ZGlmZiAtLWdpdCBhLy5tYWlsbWFwIGIvLm1haWxtYXAKaW5kZXggYTYyZTZhOC4uNTgxZmQzOSAxMDA2NDQKLS0tIGEvLm1haWxtYXAKKysrIGIvLm1haWxtYXAKQEAgLTEwNSwzICsxMDUsNCBAQAogVXdlIEtsZWluZS1Lw7ZuaWcgPHVrbEBwZW5ndXRyb25peC5kZT4KIFV3ZSBLbGVpbmUtS8O2bmlnIDxVd2UuS2xlaW5lLUtvZW5pZ0BkaWdpLmNvbT4KIFZhbGRpcyBLbGV0bmlla3MgPFZhbGRpcy5LbGV0bmlla3NAdnQuZWR1PgorVGFrYXNoaSBZT1NISUkgPHRha2FzaGkueW9zaGlpLnpqQHJlbmVzYXMuY29tPgpkaWZmIC0tZ2l0IGEvQ1JFRElUUyBiL0NSRURJVFMKaW5kZXggNDFkOGU2My4uNDk0YjZlNCAxMDA2NDQKLS0tIGEvQ1JFRElUUworKysgYi9DUkVESVRTCkBAIC0yMzY1LDggKzIzNjUsNiBAQAogVzogaHR0cDovL29vcHMuZ2hvc3Rwcm90b2NvbHMubmV0OjgxL2Jsb2cvCiBQOiAxMDI0RC85MjI0REYwMSBENURGIEUzQkIgRTNDOCBCQ0JCIEY4QUQgIDg0MUEgQjZBQiA0NjgxIDkyMjQgREYwMQogRDogSVBYLCBMTEMsIERDQ1AsIGN5YzJ4LCB3bDM1MDFfY3MsIG5ldC8gaGFja3MKLVM6IFIuIEJyYXPDrWxpbyBJdGliZXLDqiwgNDI3MC8xMDEwIC0gw4FndWEgVmVyZGUKLVM6IDgwMjQwLTA2MCAtIEN1cml0aWJhIC0gUGFyYW7DoQogUzogQnJhemlsCiAKIE46IEthcnN0ZW4gTWVya2VyCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLW5ldC1iYXRtYW4tYWR2IGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1uZXQtYmF0bWFuLWFkdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGRkNzYyZGUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLW5ldC1iYXRtYW4tYWR2CkBAIC0wLDAgKzEsMTQgQEAKKworV2hhdDogICAgICAgICAgIC9zeXMvY2xhc3MvbmV0LzxpZmFjZT4vYmF0bWFuLWFkdi9tZXNoX2lmYWNlCitEYXRlOiAgICAgICAgICAgTWF5IDIwMTAKK0NvbnRhY3Q6ICAgICAgICBNYXJlayBMaW5kbmVyIDxsaW5kbmVyX21hcmVrQHlhaG9vLmRlPgorRGVzY3JpcHRpb246CisgICAgICAgICAgICAgICAgVGhlIC9zeXMvY2xhc3MvbmV0LzxpZmFjZT4vYmF0bWFuLWFkdi9tZXNoX2lmYWNlIGZpbGUKKyAgICAgICAgICAgICAgICBkaXNwbGF5cyB0aGUgYmF0bWFuIG1lc2ggaW50ZXJmYWNlIHRoaXMgPGlmYWNlPgorICAgICAgICAgICAgICAgIGN1cnJlbnRseSBpcyBhc3NvY2lhdGVkIHdpdGguCisKK1doYXQ6ICAgICAgICAgICAvc3lzL2NsYXNzL25ldC88aWZhY2U+L2JhdG1hbi1hZHYvaWZhY2Vfc3RhdHVzCitEYXRlOiAgICAgICAgICAgTWF5IDIwMTAKK0NvbnRhY3Q6ICAgICAgICBNYXJlayBMaW5kbmVyIDxsaW5kbmVyX21hcmVrQHlhaG9vLmRlPgorRGVzY3JpcHRpb246CisgICAgICAgICAgICAgICAgSW5kaWNhdGVzIHRoZSBzdGF0dXMgb2YgPGlmYWNlPiBhcyBpdCBpcyBzZWVuIGJ5IGJhdG1hbi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtbmV0LW1lc2ggYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLW5ldC1tZXNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0OGZlMTcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLW5ldC1tZXNoCkBAIC0wLDAgKzEsNjkgQEAKKworV2hhdDogICAgICAgICAgIC9zeXMvY2xhc3MvbmV0LzxtZXNoX2lmYWNlPi9tZXNoL2FnZ3JlZ2F0ZWRfb2dtcworRGF0ZTogICAgICAgICAgIE1heSAyMDEwCitDb250YWN0OiAgICAgICAgTWFyZWsgTGluZG5lciA8bGluZG5lcl9tYXJla0B5YWhvby5kZT4KK0Rlc2NyaXB0aW9uOgorICAgICAgICAgICAgICAgIEluZGljYXRlcyB3aGV0aGVyIHRoZSBiYXRtYW4gcHJvdG9jb2wgbWVzc2FnZXMgb2YgdGhlCisgICAgICAgICAgICAgICAgbWVzaCA8bWVzaF9pZmFjZT4gc2hhbGwgYmUgYWdncmVnYXRlZCBvciBub3QuCisKK1doYXQ6ICAgICAgICAgICAvc3lzL2NsYXNzL25ldC88bWVzaF9pZmFjZT4vbWVzaC9ib25kaW5nCitEYXRlOiAgICAgICAgICAgSnVuZSAyMDEwCitDb250YWN0OiAgICAgICAgU2ltb24gV3VuZGVybGljaCA8c2l3dUBocnoudHUtY2hlbW5pdHouZGU+CitEZXNjcmlwdGlvbjoKKyAgICAgICAgICAgICAgICBJbmRpY2F0ZXMgd2hldGhlciB0aGUgZGF0YSB0cmFmZmljIGdvaW5nIHRocm91Z2ggdGhlCisgICAgICAgICAgICAgICAgbWVzaCB3aWxsIGJlIHNlbnQgdXNpbmcgbXVsdGlwbGUgaW50ZXJmYWNlcyBhdCB0aGUKKyAgICAgICAgICAgICAgICBzYW1lIHRpbWUgKGlmIGF2YWlsYWJsZSkuCisKK1doYXQ6ICAgICAgICAgICAvc3lzL2NsYXNzL25ldC88bWVzaF9pZmFjZT4vbWVzaC9mcmFnbWVudGF0aW9uCitEYXRlOiAgICAgICAgICAgT2N0b2JlciAyMDEwCitDb250YWN0OiAgICAgICAgQW5kcmVhcyBMYW5nZXIgPGFuLmxhbmdlckBnbXguZGU+CitEZXNjcmlwdGlvbjoKKyAgICAgICAgICAgICAgICBJbmRpY2F0ZXMgd2hldGhlciB0aGUgZGF0YSB0cmFmZmljIGdvaW5nIHRocm91Z2ggdGhlCisgICAgICAgICAgICAgICAgbWVzaCB3aWxsIGJlIGZyYWdtZW50ZWQgb3Igc2lsZW50bHkgZGlzY2FyZGVkIGlmIHRoZQorICAgICAgICAgICAgICAgIHBhY2tldCBzaXplIGV4Y2VlZHMgdGhlIG91dGdvaW5nIGludGVyZmFjZSBNVFUuCisKK1doYXQ6ICAgICAgICAgICAvc3lzL2NsYXNzL25ldC88bWVzaF9pZmFjZT4vbWVzaC9nd19iYW5kd2lkdGgKK0RhdGU6ICAgICAgICAgICBPY3RvYmVyIDIwMTAKK0NvbnRhY3Q6ICAgICAgICBNYXJlayBMaW5kbmVyIDxsaW5kbmVyX21hcmVrQHlhaG9vLmRlPgorRGVzY3JpcHRpb246CisgICAgICAgICAgICAgICAgRGVmaW5lcyB0aGUgYmFuZHdpZHRoIHdoaWNoIGlzIHByb3BhZ2F0ZWQgYnkgdGhpcworICAgICAgICAgICAgICAgIG5vZGUgaWYgZ3dfbW9kZSB3YXMgc2V0IHRvICdzZXJ2ZXInLgorCitXaGF0OiAgICAgICAgICAgL3N5cy9jbGFzcy9uZXQvPG1lc2hfaWZhY2U+L21lc2gvZ3dfbW9kZQorRGF0ZTogICAgICAgICAgIE9jdG9iZXIgMjAxMAorQ29udGFjdDogICAgICAgIE1hcmVrIExpbmRuZXIgPGxpbmRuZXJfbWFyZWtAeWFob28uZGU+CitEZXNjcmlwdGlvbjoKKyAgICAgICAgICAgICAgICBEZWZpbmVzIHRoZSBzdGF0ZSBvZiB0aGUgZ2F0ZXdheSBmZWF0dXJlcy4gQ2FuIGJlCisgICAgICAgICAgICAgICAgZWl0aGVyICdvZmYnLCAnY2xpZW50JyBvciAnc2VydmVyJy4KKworV2hhdDogICAgICAgICAgIC9zeXMvY2xhc3MvbmV0LzxtZXNoX2lmYWNlPi9tZXNoL2d3X3NlbF9jbGFzcworRGF0ZTogICAgICAgICAgIE9jdG9iZXIgMjAxMAorQ29udGFjdDogICAgICAgIE1hcmVrIExpbmRuZXIgPGxpbmRuZXJfbWFyZWtAeWFob28uZGU+CitEZXNjcmlwdGlvbjoKKyAgICAgICAgICAgICAgICBEZWZpbmVzIHRoZSBzZWxlY3Rpb24gY3JpdGVyaWEgdGhpcyBub2RlIHdpbGwgdXNlCisgICAgICAgICAgICAgICAgdG8gY2hvb3NlIGEgZ2F0ZXdheSBpZiBnd19tb2RlIHdhcyBzZXQgdG8gJ2NsaWVudCcuCisKK1doYXQ6ICAgICAgICAgICAvc3lzL2NsYXNzL25ldC88bWVzaF9pZmFjZT4vbWVzaC9vcmlnX2ludGVydmFsCitEYXRlOiAgICAgICAgICAgTWF5IDIwMTAKK0NvbnRhY3Q6ICAgICAgICBNYXJlayBMaW5kbmVyIDxsaW5kbmVyX21hcmVrQHlhaG9vLmRlPgorRGVzY3JpcHRpb246CisgICAgICAgICAgICAgICAgRGVmaW5lcyB0aGUgaW50ZXJ2YWwgaW4gbWlsbGlzZWNvbmRzIGluIHdoaWNoIGJhdG1hbgorICAgICAgICAgICAgICAgIHNlbmRzIGl0cyBwcm90b2NvbCBtZXNzYWdlcy4KKworV2hhdDogICAgICAgICAgIC9zeXMvY2xhc3MvbmV0LzxtZXNoX2lmYWNlPi9tZXNoL2hvcF9wZW5hbHR5CitEYXRlOiAgICAgICAgICAgT2N0IDIwMTAKK0NvbnRhY3Q6ICAgICAgICBMaW51cyBMw7xzc2luZyA8bGludXMubHVlc3NpbmdAd2ViLmRlPgorRGVzY3JpcHRpb246CisJCURlZmluZXMgdGhlIHBlbmFsdHkgd2hpY2ggd2lsbCBiZSBhcHBsaWVkIHRvIGFuCisJCW9yaWdpbmF0b3IgbWVzc2FnZSdzIHRxLWZpZWxkIG9uIGV2ZXJ5IGhvcC4KKworV2hhdDogICAgICAgICAgIC9zeXMvY2xhc3MvbmV0LzxtZXNoX2lmYWNlPi9tZXNoL3Zpc19tb2RlCitEYXRlOiAgICAgICAgICAgTWF5IDIwMTAKK0NvbnRhY3Q6ICAgICAgICBNYXJlayBMaW5kbmVyIDxsaW5kbmVyX21hcmVrQHlhaG9vLmRlPgorRGVzY3JpcHRpb246CisgICAgICAgICAgICAgICAgRWFjaCBiYXRtYW4gbm9kZSBvbmx5IG1haW50YWlucyBpbmZvcm1hdGlvbiBhYm91dCBpdHMKKyAgICAgICAgICAgICAgICBvd24gbG9jYWwgbmVpZ2hib3Job29kLCB0aGVyZWZvcmUgZ2VuZXJhdGluZyBncmFwaHMKKyAgICAgICAgICAgICAgICBzaG93aW5nIHRoZSB0b3BvbG9neSBvZiB0aGUgZW50aXJlIG1lc2ggaXMgbm90IGVhc2lseQorICAgICAgICAgICAgICAgIGZlYXNpYmxlIHdpdGhvdXQgaGF2aW5nIGEgY2VudHJhbCBpbnN0YW5jZSB0byBjb2xsZWN0CisgICAgICAgICAgICAgICAgdGhlIGxvY2FsIHRvcG9sb2dpZXMgZnJvbSBhbGwgbm9kZXMuIFRoaXMgZmlsZSBhbGxvd3MKKyAgICAgICAgICAgICAgICB0byBhY3RpdmF0ZSB0aGUgY29sbGVjdGluZyAoc2VydmVyKSBtb2RlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1kcml2ZXItaGlkLXJvY2NhdC1rb25lIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1kcml2ZXItaGlkLXJvY2NhdC1rb25lCmluZGV4IDA2M2JkYTcuLjY5OGI4MDggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZHJpdmVyLWhpZC1yb2NjYXQta29uZQorKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWRyaXZlci1oaWQtcm9jY2F0LWtvbmUKQEAgLTEsNCArMSw0IEBACi1XaGF0OgkJL3N5cy9idXMvdXNiL2RldmljZXMvPGJ1c251bT4tPGRldm51bT46PGNvbmZpZyBudW0+LjxpbnRlcmZhY2UgbnVtPi9hY3R1YWxfZHBpCitXaGF0OgkJL3N5cy9idXMvdXNiL2RldmljZXMvPGJ1c251bT4tPGRldm51bT46PGNvbmZpZyBudW0+LjxpbnRlcmZhY2UgbnVtPi88aGlkLWJ1cz46PHZlbmRvci1pZD46PHByb2R1Y3QtaWQ+LjxudW0+L2tvbmUvcm9jY2F0a29uZTxtaW5vcj4vYWN0dWFsX2RwaQogRGF0ZToJCU1hcmNoIDIwMTAKIENvbnRhY3Q6CVN0ZWZhbiBBY2hhdHogPGVyYXpvcl9kZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CiBEZXNjcmlwdGlvbjoJSXQgaXMgcG9zc2libGUgdG8gc3dpdGNoIHRoZSBkcGkgc2V0dGluZyBvZiB0aGUgbW91c2Ugd2l0aCB0aGUKQEAgLTE3LDEzICsxNywxMyBAQAogCiAJCVRoaXMgZmlsZSBpcyByZWFkb25seS4KIAotV2hhdDoJCS9zeXMvYnVzL3VzYi9kZXZpY2VzLzxidXNudW0+LTxkZXZudW0+Ojxjb25maWcgbnVtPi48aW50ZXJmYWNlIG51bT4vYWN0dWFsX3Byb2ZpbGUKK1doYXQ6CQkvc3lzL2J1cy91c2IvZGV2aWNlcy88YnVzbnVtPi08ZGV2bnVtPjo8Y29uZmlnIG51bT4uPGludGVyZmFjZSBudW0+LzxoaWQtYnVzPjo8dmVuZG9yLWlkPjo8cHJvZHVjdC1pZD4uPG51bT4va29uZS9yb2NjYXRrb25lPG1pbm9yPi9hY3R1YWxfcHJvZmlsZQogRGF0ZToJCU1hcmNoIDIwMTAKIENvbnRhY3Q6CVN0ZWZhbiBBY2hhdHogPGVyYXpvcl9kZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CiBEZXNjcmlwdGlvbjoJV2hlbiByZWFkLCB0aGlzIGZpbGUgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHRoZSBhY3R1YWwgcHJvZmlsZS4KIAkJVGhpcyBmaWxlIGlzIHJlYWRvbmx5LgogCi1XaGF0OgkJL3N5cy9idXMvdXNiL2RldmljZXMvPGJ1c251bT4tPGRldm51bT46PGNvbmZpZyBudW0+LjxpbnRlcmZhY2UgbnVtPi9maXJtd2FyZV92ZXJzaW9uCitXaGF0OgkJL3N5cy9idXMvdXNiL2RldmljZXMvPGJ1c251bT4tPGRldm51bT46PGNvbmZpZyBudW0+LjxpbnRlcmZhY2UgbnVtPi88aGlkLWJ1cz46PHZlbmRvci1pZD46PHByb2R1Y3QtaWQ+LjxudW0+L2tvbmUvcm9jY2F0a29uZTxtaW5vcj4vZmlybXdhcmVfdmVyc2lvbgogRGF0ZToJCU1hcmNoIDIwMTAKIENvbnRhY3Q6CVN0ZWZhbiBBY2hhdHogPGVyYXpvcl9kZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CiBEZXNjcmlwdGlvbjoJV2hlbiByZWFkLCB0aGlzIGZpbGUgcmV0dXJucyB0aGUgcmF3IGludGVnZXIgdmVyc2lvbiBudW1iZXIgb2YgdGhlCkBAIC0zMyw3ICszMyw3IEBACiAJCWxlZnQuIEUuZy4gYSByZXR1cm5lZCB2YWx1ZSBvZiAxMzggbWVhbnMgMS4zOAogCQlUaGlzIGZpbGUgaXMgcmVhZG9ubHkuCiAKLVdoYXQ6CQkvc3lzL2J1cy91c2IvZGV2aWNlcy88YnVzbnVtPi08ZGV2bnVtPjo8Y29uZmlnIG51bT4uPGludGVyZmFjZSBudW0+L3Byb2ZpbGVbMS01XQorV2hhdDoJCS9zeXMvYnVzL3VzYi9kZXZpY2VzLzxidXNudW0+LTxkZXZudW0+Ojxjb25maWcgbnVtPi48aW50ZXJmYWNlIG51bT4vPGhpZC1idXM+Ojx2ZW5kb3ItaWQ+Ojxwcm9kdWN0LWlkPi48bnVtPi9rb25lL3JvY2NhdGtvbmU8bWlub3I+L3Byb2ZpbGVbMS01XQogRGF0ZToJCU1hcmNoIDIwMTAKIENvbnRhY3Q6CVN0ZWZhbiBBY2hhdHogPGVyYXpvcl9kZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CiBEZXNjcmlwdGlvbjoJVGhlIG1vdXNlIGNhbiBzdG9yZSA1IHByb2ZpbGVzIHdoaWNoIGNhbiBiZSBzd2l0Y2hlZCBieSB0aGUKQEAgLTQ4LDcgKzQ4LDcgQEAKIAkJc3RvcmVkIGluIHRoZSBwcm9maWxlIGRvZXNuJ3QgbmVlZCB0byBmaXQgdGhlIG51bWJlciBvZiB0aGUKIAkJc3RvcmUuCiAKLVdoYXQ6CQkvc3lzL2J1cy91c2IvZGV2aWNlcy88YnVzbnVtPi08ZGV2bnVtPjo8Y29uZmlnIG51bT4uPGludGVyZmFjZSBudW0+L3NldHRpbmdzCitXaGF0OgkJL3N5cy9idXMvdXNiL2RldmljZXMvPGJ1c251bT4tPGRldm51bT46PGNvbmZpZyBudW0+LjxpbnRlcmZhY2UgbnVtPi88aGlkLWJ1cz46PHZlbmRvci1pZD46PHByb2R1Y3QtaWQ+LjxudW0+L2tvbmUvcm9jY2F0a29uZTxtaW5vcj4vc2V0dGluZ3MKIERhdGU6CQlNYXJjaCAyMDEwCiBDb250YWN0OglTdGVmYW4gQWNoYXR6IDxlcmF6b3JfZGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgogRGVzY3JpcHRpb246CVdoZW4gcmVhZCwgdGhpcyBmaWxlIHJldHVybnMgdGhlIHNldHRpbmdzIHN0b3JlZCBpbiB0aGUgbW91c2UuCkBAIC01OCw3ICs1OCw3IEBACiAJCVRoZSBkYXRhIGhhcyB0byBiZSAzNiBieXRlcyBsb25nLiBUaGUgbW91c2Ugd2lsbCByZWplY3QgaW52YWxpZAogCQlkYXRhLgogCi1XaGF0OgkJL3N5cy9idXMvdXNiL2RldmljZXMvPGJ1c251bT4tPGRldm51bT46PGNvbmZpZyBudW0+LjxpbnRlcmZhY2UgbnVtPi9zdGFydHVwX3Byb2ZpbGUKK1doYXQ6CQkvc3lzL2J1cy91c2IvZGV2aWNlcy88YnVzbnVtPi08ZGV2bnVtPjo8Y29uZmlnIG51bT4uPGludGVyZmFjZSBudW0+LzxoaWQtYnVzPjo8dmVuZG9yLWlkPjo8cHJvZHVjdC1pZD4uPG51bT4va29uZS9yb2NjYXRrb25lPG1pbm9yPi9zdGFydHVwX3Byb2ZpbGUKIERhdGU6CQlNYXJjaCAyMDEwCiBDb250YWN0OglTdGVmYW4gQWNoYXR6IDxlcmF6b3JfZGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgogRGVzY3JpcHRpb246CVRoZSBpbnRlZ2VyIHZhbHVlIG9mIHRoaXMgYXR0cmlidXRlIHJhbmdlcyBmcm9tIDEgdG8gNS4KQEAgLTY3LDcgKzY3LDcgQEAKIAkJV2hlbiB3cml0dGVuLCB0aGlzIGZpbGUgc2V0cyB0aGUgbnVtYmVyIG9mIHRoZSBzdGFydHVwIHByb2ZpbGUKIAkJYW5kIHRoZSBtb3VzZSBhY3RpdmF0ZXMgdGhpcyBwcm9maWxlIGltbWVkaWF0ZWx5LgogCi1XaGF0OgkJL3N5cy9idXMvdXNiL2RldmljZXMvPGJ1c251bT4tPGRldm51bT46PGNvbmZpZyBudW0+LjxpbnRlcmZhY2UgbnVtPi90Y3UKK1doYXQ6CQkvc3lzL2J1cy91c2IvZGV2aWNlcy88YnVzbnVtPi08ZGV2bnVtPjo8Y29uZmlnIG51bT4uPGludGVyZmFjZSBudW0+LzxoaWQtYnVzPjo8dmVuZG9yLWlkPjo8cHJvZHVjdC1pZD4uPG51bT4va29uZS9yb2NjYXRrb25lPG1pbm9yPi90Y3UKIERhdGU6CQlNYXJjaCAyMDEwCiBDb250YWN0OglTdGVmYW4gQWNoYXR6IDxlcmF6b3JfZGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgogRGVzY3JpcHRpb246CVRoZSBtb3VzZSBoYXMgYSAiVHJhY2tpbmcgQ29udHJvbCBVbml0IiB3aGljaCBsZXRzIHRoZSB1c2VyCkBAIC03OCw3ICs3OCw3IEBACiAJCVdyaXRpbmcgMSBpbiB0aGlzIGZpbGUgd2lsbCBzdGFydCB0aGUgY2FsaWJyYXRpb24gd2hpY2ggdGFrZXMKIAkJYXJvdW5kIDYgc2Vjb25kcyB0byBjb21wbGV0ZSBhbmQgYWN0aXZhdGVzIHRoZSBUQ1UuCiAKLVdoYXQ6CQkvc3lzL2J1cy91c2IvZGV2aWNlcy88YnVzbnVtPi08ZGV2bnVtPjo8Y29uZmlnIG51bT4uPGludGVyZmFjZSBudW0+L3dlaWdodAorV2hhdDoJCS9zeXMvYnVzL3VzYi9kZXZpY2VzLzxidXNudW0+LTxkZXZudW0+Ojxjb25maWcgbnVtPi48aW50ZXJmYWNlIG51bT4vPGhpZC1idXM+Ojx2ZW5kb3ItaWQ+Ojxwcm9kdWN0LWlkPi48bnVtPi9rb25lL3JvY2NhdGtvbmU8bWlub3I+L3dlaWdodAogRGF0ZToJCU1hcmNoIDIwMTAKIENvbnRhY3Q6CVN0ZWZhbiBBY2hhdHogPGVyYXpvcl9kZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CiBEZXNjcmlwdGlvbjoJVGhlIG1vdXNlIGNhbiBiZSBlcXVpcHBlZCB3aXRoIG9uZSBvZiBmb3VyIHN1cHBsaWVkIHdlaWdodHMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZHJpdmVyLWhpZC1yb2NjYXQta29uZXBsdXMgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWRyaXZlci1oaWQtcm9jY2F0LWtvbmVwbHVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmOWYzMGUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWRyaXZlci1oaWQtcm9jY2F0LWtvbmVwbHVzCkBAIC0wLDAgKzEsMTA4IEBACitXaGF0OgkJL3N5cy9idXMvdXNiL2RldmljZXMvPGJ1c251bT4tPGRldm51bT46PGNvbmZpZyBudW0+LjxpbnRlcmZhY2UgbnVtPi88aGlkLWJ1cz46PHZlbmRvci1pZD46PHByb2R1Y3QtaWQ+LjxudW0+L2tvbmVwbHVzL3JvY2NhdGtvbmVwbHVzPG1pbm9yPi9hY3R1YWxfcHJvZmlsZQorRGF0ZToJCU9jdG9iZXIgMjAxMAorQ29udGFjdDoJU3RlZmFuIEFjaGF0eiA8ZXJhem9yX2RlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0Rlc2NyaXB0aW9uOglXaGVuIHJlYWQsIHRoaXMgZmlsZSByZXR1cm5zIHRoZSBudW1iZXIgb2YgdGhlIGFjdHVhbCBwcm9maWxlIGluCisJCXJhbmdlIDAtNC4KKwkJVGhpcyBmaWxlIGlzIHJlYWRvbmx5LgorCitXaGF0OgkJL3N5cy9idXMvdXNiL2RldmljZXMvPGJ1c251bT4tPGRldm51bT46PGNvbmZpZyBudW0+LjxpbnRlcmZhY2UgbnVtPi88aGlkLWJ1cz46PHZlbmRvci1pZD46PHByb2R1Y3QtaWQ+LjxudW0+L2tvbmVwbHVzL3JvY2NhdGtvbmVwbHVzPG1pbm9yPi9maXJtd2FyZV92ZXJzaW9uCitEYXRlOgkJT2N0b2JlciAyMDEwCitDb250YWN0OglTdGVmYW4gQWNoYXR6IDxlcmF6b3JfZGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGVzY3JpcHRpb246CVdoZW4gcmVhZCwgdGhpcyBmaWxlIHJldHVybnMgdGhlIHJhdyBpbnRlZ2VyIHZlcnNpb24gbnVtYmVyIG9mIHRoZQorCQlmaXJtd2FyZSByZXBvcnRlZCBieSB0aGUgbW91c2UuIFVzaW5nIHRoZSBpbnRlZ2VyIHZhbHVlIGVhc2VzCisJCWZ1cnRoZXIgdXNhZ2UgaW4gb3RoZXIgcHJvZ3JhbXMuIFRvIHJlY2VpdmUgdGhlIHJlYWwgdmVyc2lvbgorCQludW1iZXIgdGhlIGRlY2ltYWwgcG9pbnQgaGFzIHRvIGJlIHNoaWZ0ZWQgMiBwb3NpdGlvbnMgdG8gdGhlCisJCWxlZnQuIEUuZy4gYSByZXR1cm5lZCB2YWx1ZSBvZiAxMjEgbWVhbnMgMS4yMQorCQlUaGlzIGZpbGUgaXMgcmVhZG9ubHkuCisKK1doYXQ6CQkvc3lzL2J1cy91c2IvZGV2aWNlcy88YnVzbnVtPi08ZGV2bnVtPjo8Y29uZmlnIG51bT4uPGludGVyZmFjZSBudW0+LzxoaWQtYnVzPjo8dmVuZG9yLWlkPjo8cHJvZHVjdC1pZD4uPG51bT4va29uZXBsdXMvcm9jY2F0a29uZXBsdXM8bWlub3I+L21hY3JvCitEYXRlOgkJT2N0b2JlciAyMDEwCitDb250YWN0OglTdGVmYW4gQWNoYXR6IDxlcmF6b3JfZGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGVzY3JpcHRpb246CVRoZSBtb3VzZSBjYW4gc3RvcmUgYSBtYWNybyB3aXRoIG1heCA1MDAga2V5L2J1dHRvbiBzdHJva2VzCisJCWludGVybmFsbHkuCisJCVdoZW4gd3JpdHRlbiwgdGhpcyBmaWxlIGxldHMgb25lIHNldCB0aGUgc2VxdWVuY2UgZm9yIGEgc3BlY2lmaWMKKwkJYnV0dG9uIGZvciBhIHNwZWNpZmljIHByb2ZpbGUuIEJ1dHRvbiBhbmQgcHJvZmlsZSBudW1iZXJzIGFyZQorCQlpbmNsdWRlZCBpbiB3cml0dGVuIGRhdGEuIFRoZSBkYXRhIGhhcyB0byBiZSAyMDgyIGJ5dGVzIGxvbmcuCisJCVRoaXMgZmlsZSBpcyB3cml0ZW9ubHkuCisKK1doYXQ6CQkvc3lzL2J1cy91c2IvZGV2aWNlcy88YnVzbnVtPi08ZGV2bnVtPjo8Y29uZmlnIG51bT4uPGludGVyZmFjZSBudW0+LzxoaWQtYnVzPjo8dmVuZG9yLWlkPjo8cHJvZHVjdC1pZD4uPG51bT4va29uZXBsdXMvcm9jY2F0a29uZXBsdXM8bWlub3I+L3Byb2ZpbGVfYnV0dG9ucworRGF0ZToJCUF1Z3VzdCAyMDEwCitDb250YWN0OglTdGVmYW4gQWNoYXR6IDxlcmF6b3JfZGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGVzY3JpcHRpb246CVRoZSBtb3VzZSBjYW4gc3RvcmUgNSBwcm9maWxlcyB3aGljaCBjYW4gYmUgc3dpdGNoZWQgYnkgdGhlCisJCXByZXNzIG9mIGEgYnV0dG9uLiBBIHByb2ZpbGUgaXMgc3BsaXQgaW4gc2V0dGluZ3MgYW5kIGJ1dHRvbnMuCisJCXByb2ZpbGVfYnV0dG9ucyBob2xkcyBpbmZvcm1hdGlvbnMgYWJvdXQgYnV0dG9uIGxheW91dC4KKwkJV2hlbiB3cml0dGVuLCB0aGlzIGZpbGUgbGV0cyBvbmUgd3JpdGUgdGhlIHJlc3BlY3RpdmUgcHJvZmlsZQorCQlidXR0b25zIGJhY2sgdG8gdGhlIG1vdXNlLiBUaGUgZGF0YSBoYXMgdG8gYmUgNzcgYnl0ZXMgbG9uZy4KKwkJVGhlIG1vdXNlIHdpbGwgcmVqZWN0IGludmFsaWQgZGF0YS4KKwkJV2hpY2ggcHJvZmlsZSB0byB3cml0ZSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBwcm9maWxlIG51bWJlcgorCQljb250YWluZWQgaW4gdGhlIGRhdGEuCisJCVRoaXMgZmlsZSBpcyB3cml0ZW9ubHkuCisKK1doYXQ6CQkvc3lzL2J1cy91c2IvZGV2aWNlcy88YnVzbnVtPi08ZGV2bnVtPjo8Y29uZmlnIG51bT4uPGludGVyZmFjZSBudW0+LzxoaWQtYnVzPjo8dmVuZG9yLWlkPjo8cHJvZHVjdC1pZD4uPG51bT4va29uZXBsdXMvcm9jY2F0a29uZXBsdXM8bWlub3I+L3Byb2ZpbGVbMS01XV9idXR0b25zCitEYXRlOgkJQXVndXN0IDIwMTAKK0NvbnRhY3Q6CVN0ZWZhbiBBY2hhdHogPGVyYXpvcl9kZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEZXNjcmlwdGlvbjoJVGhlIG1vdXNlIGNhbiBzdG9yZSA1IHByb2ZpbGVzIHdoaWNoIGNhbiBiZSBzd2l0Y2hlZCBieSB0aGUKKwkJcHJlc3Mgb2YgYSBidXR0b24uIEEgcHJvZmlsZSBpcyBzcGxpdCBpbiBzZXR0aW5ncyBhbmQgYnV0dG9ucy4KKwkJcHJvZmlsZV9idXR0b25zIGhvbGRzIGluZm9ybWF0aW9ucyBhYm91dCBidXR0b24gbGF5b3V0LgorCQlXaGVuIHJlYWQsIHRoZXNlIGZpbGVzIHJldHVybiB0aGUgcmVzcGVjdGl2ZSBwcm9maWxlIGJ1dHRvbnMuCisJCVRoZSByZXR1cm5lZCBkYXRhIGlzIDc3IGJ5dGVzIGluIHNpemUuCisJCVRoaXMgZmlsZSBpcyByZWFkb25seS4KKworV2hhdDoJCS9zeXMvYnVzL3VzYi9kZXZpY2VzLzxidXNudW0+LTxkZXZudW0+Ojxjb25maWcgbnVtPi48aW50ZXJmYWNlIG51bT4vPGhpZC1idXM+Ojx2ZW5kb3ItaWQ+Ojxwcm9kdWN0LWlkPi48bnVtPi9rb25lcGx1cy9yb2NjYXRrb25lcGx1czxtaW5vcj4vcHJvZmlsZV9zZXR0aW5ncworRGF0ZToJCU9jdG9iZXIgMjAxMAorQ29udGFjdDoJU3RlZmFuIEFjaGF0eiA8ZXJhem9yX2RlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0Rlc2NyaXB0aW9uOglUaGUgbW91c2UgY2FuIHN0b3JlIDUgcHJvZmlsZXMgd2hpY2ggY2FuIGJlIHN3aXRjaGVkIGJ5IHRoZQorCQlwcmVzcyBvZiBhIGJ1dHRvbi4gQSBwcm9maWxlIGlzIHNwbGl0IGluIHNldHRpbmdzIGFuZCBidXR0b25zLgorCQlwcm9maWxlX3NldHRpbmdzIGhvbGRzIGluZm9ybWF0aW9ucyBsaWtlIHJlc29sdXRpb24sIHNlbnNpdGl2aXR5CisJCWFuZCBsaWdodCBlZmZlY3RzLgorCQlXaGVuIHdyaXR0ZW4sIHRoaXMgZmlsZSBsZXRzIG9uZSB3cml0ZSB0aGUgcmVzcGVjdGl2ZSBwcm9maWxlCisJCXNldHRpbmdzIGJhY2sgdG8gdGhlIG1vdXNlLiBUaGUgZGF0YSBoYXMgdG8gYmUgNDMgYnl0ZXMgbG9uZy4KKwkJVGhlIG1vdXNlIHdpbGwgcmVqZWN0IGludmFsaWQgZGF0YS4KKwkJV2hpY2ggcHJvZmlsZSB0byB3cml0ZSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBwcm9maWxlIG51bWJlcgorCQljb250YWluZWQgaW4gdGhlIGRhdGEuCisJCVRoaXMgZmlsZSBpcyB3cml0ZW9ubHkuCisKK1doYXQ6CQkvc3lzL2J1cy91c2IvZGV2aWNlcy88YnVzbnVtPi08ZGV2bnVtPjo8Y29uZmlnIG51bT4uPGludGVyZmFjZSBudW0+LzxoaWQtYnVzPjo8dmVuZG9yLWlkPjo8cHJvZHVjdC1pZD4uPG51bT4va29uZXBsdXMvcm9jY2F0a29uZXBsdXM8bWlub3I+L3Byb2ZpbGVbMS01XV9zZXR0aW5ncworRGF0ZToJCUF1Z3VzdCAyMDEwCitDb250YWN0OglTdGVmYW4gQWNoYXR6IDxlcmF6b3JfZGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGVzY3JpcHRpb246CVRoZSBtb3VzZSBjYW4gc3RvcmUgNSBwcm9maWxlcyB3aGljaCBjYW4gYmUgc3dpdGNoZWQgYnkgdGhlCisJCXByZXNzIG9mIGEgYnV0dG9uLiBBIHByb2ZpbGUgaXMgc3BsaXQgaW4gc2V0dGluZ3MgYW5kIGJ1dHRvbnMuCisJCXByb2ZpbGVfc2V0dGluZ3MgaG9sZHMgaW5mb3JtYXRpb25zIGxpa2UgcmVzb2x1dGlvbiwgc2Vuc2l0aXZpdHkKKwkJYW5kIGxpZ2h0IGVmZmVjdHMuCisJCVdoZW4gcmVhZCwgdGhlc2UgZmlsZXMgcmV0dXJuIHRoZSByZXNwZWN0aXZlIHByb2ZpbGUgc2V0dGluZ3MuCisJCVRoZSByZXR1cm5lZCBkYXRhIGlzIDQzIGJ5dGVzIGluIHNpemUuCisJCVRoaXMgZmlsZSBpcyByZWFkb25seS4KKworV2hhdDoJCS9zeXMvYnVzL3VzYi9kZXZpY2VzLzxidXNudW0+LTxkZXZudW0+Ojxjb25maWcgbnVtPi48aW50ZXJmYWNlIG51bT4vPGhpZC1idXM+Ojx2ZW5kb3ItaWQ+Ojxwcm9kdWN0LWlkPi48bnVtPi9rb25lcGx1cy9yb2NjYXRrb25lcGx1czxtaW5vcj4vc2Vuc29yCitEYXRlOgkJT2N0b2JlciAyMDEwCitDb250YWN0OglTdGVmYW4gQWNoYXR6IDxlcmF6b3JfZGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGVzY3JpcHRpb246CVRoZSBtb3VzZSBoYXMgYSB0cmFja2luZy0gYW5kIGEgZGlzdGFuY2UtY29udHJvbC11bml0LiBUaGVzZQorCQljYW4gYmUgYWN0aXZhdGVkL2RlYWN0aXZhdGVkIGFuZCB0aGUgbGlmdC1vZmYgZGlzdGFuY2UgY2FuIGJlCisJCXNldC4gVGhlIGRhdGEgaGFzIHRvIGJlIDYgYnl0ZXMgbG9uZy4KKwkJVGhpcyBmaWxlIGlzIHdyaXRlb25seS4KKworV2hhdDoJCS9zeXMvYnVzL3VzYi9kZXZpY2VzLzxidXNudW0+LTxkZXZudW0+Ojxjb25maWcgbnVtPi48aW50ZXJmYWNlIG51bT4vPGhpZC1idXM+Ojx2ZW5kb3ItaWQ+Ojxwcm9kdWN0LWlkPi48bnVtPi9rb25lcGx1cy9yb2NjYXRrb25lcGx1czxtaW5vcj4vc3RhcnR1cF9wcm9maWxlCitEYXRlOgkJT2N0b2JlciAyMDEwCitDb250YWN0OglTdGVmYW4gQWNoYXR6IDxlcmF6b3JfZGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGVzY3JpcHRpb246CVRoZSBpbnRlZ2VyIHZhbHVlIG9mIHRoaXMgYXR0cmlidXRlIHJhbmdlcyBmcm9tIDAtNC4KKyAgICAgICAgICAgICAgICBXaGVuIHJlYWQsIHRoaXMgYXR0cmlidXRlIHJldHVybnMgdGhlIG51bWJlciBvZiB0aGUgcHJvZmlsZQorICAgICAgICAgICAgICAgIHRoYXQncyBhY3RpdmUgd2hlbiB0aGUgbW91c2UgaXMgcG93ZXJlZCBvbi4KKwkJV2hlbiB3cml0dGVuLCB0aGlzIGZpbGUgc2V0cyB0aGUgbnVtYmVyIG9mIHRoZSBzdGFydHVwIHByb2ZpbGUKKwkJYW5kIHRoZSBtb3VzZSBhY3RpdmF0ZXMgdGhpcyBwcm9maWxlIGltbWVkaWF0ZWx5LgorCitXaGF0OgkJL3N5cy9idXMvdXNiL2RldmljZXMvPGJ1c251bT4tPGRldm51bT46PGNvbmZpZyBudW0+LjxpbnRlcmZhY2UgbnVtPi88aGlkLWJ1cz46PHZlbmRvci1pZD46PHByb2R1Y3QtaWQ+LjxudW0+L2tvbmVwbHVzL3JvY2NhdGtvbmVwbHVzPG1pbm9yPi90Y3UKK0RhdGU6CQlPY3RvYmVyIDIwMTAKK0NvbnRhY3Q6CVN0ZWZhbiBBY2hhdHogPGVyYXpvcl9kZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEZXNjcmlwdGlvbjoJV2hlbiB3cml0dGVuIGEgY2FsaWJyYXRpb24gcHJvY2VzcyBmb3IgdGhlIHRyYWNraW5nIGNvbnRyb2wgdW5pdAorCQljYW4gYmUgaW5pdGlhdGVkL2NhbmNlbGxlZC4KKwkJVGhlIGRhdGEgaGFzIHRvIGJlIDMgYnl0ZXMgbG9uZy4KKwkJVGhpcyBmaWxlIGlzIHdyaXRlb25seS4KKworV2hhdDoJCS9zeXMvYnVzL3VzYi9kZXZpY2VzLzxidXNudW0+LTxkZXZudW0+Ojxjb25maWcgbnVtPi48aW50ZXJmYWNlIG51bT4vPGhpZC1idXM+Ojx2ZW5kb3ItaWQ+Ojxwcm9kdWN0LWlkPi48bnVtPi9rb25lcGx1cy9yb2NjYXRrb25lcGx1czxtaW5vcj4vdGN1X2ltYWdlCitEYXRlOgkJT2N0b2JlciAyMDEwCitDb250YWN0OglTdGVmYW4gQWNoYXR6IDxlcmF6b3JfZGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGVzY3JpcHRpb246CVdoZW4gcmVhZCB0aGUgbW91c2UgcmV0dXJucyBhIDMweDMwIHBpeGVsIGltYWdlIG9mIHRoZQorCQlzYW1wbGVkIHVuZGVyZ3JvdW5kLiBUaGlzIHdvcmtzIG9ubHkgaW4gdGhlIGNvdXJzZSBvZiBhCisJCWNhbGlicmF0aW9uIHByb2Nlc3MgaW5pdGlhdGVkIHdpdGggdGN1LgorCQlUaGUgcmV0dXJuZWQgZGF0YSBpcyAxMDI4IGJ5dGVzIGluIHNpemUuCisJCVRoaXMgZmlsZSBpcyByZWFkb25seS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZHJpdmVyLWhpZC1yb2NjYXQtcHlyYSBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZHJpdmVyLWhpZC1yb2NjYXQtcHlyYQppbmRleCBhZDExMjViLi4xYzM3YjgyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWRyaXZlci1oaWQtcm9jY2F0LXB5cmEKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1kcml2ZXItaGlkLXJvY2NhdC1weXJhCkBAIC0xLDQgKzEsNCBAQAotV2hhdDoJCS9zeXMvYnVzL3VzYi9kZXZpY2VzLzxidXNudW0+LTxkZXZudW0+Ojxjb25maWcgbnVtPi48aW50ZXJmYWNlIG51bT4vYWN0dWFsX2NwaQorV2hhdDoJCS9zeXMvYnVzL3VzYi9kZXZpY2VzLzxidXNudW0+LTxkZXZudW0+Ojxjb25maWcgbnVtPi48aW50ZXJmYWNlIG51bT4vPGhpZC1idXM+Ojx2ZW5kb3ItaWQ+Ojxwcm9kdWN0LWlkPi48bnVtPi9weXJhL3JvY2NhdHB5cmE8bWlub3I+L2FjdHVhbF9jcGkKIERhdGU6CQlBdWd1c3QgMjAxMAogQ29udGFjdDoJU3RlZmFuIEFjaGF0eiA8ZXJhem9yX2RlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KIERlc2NyaXB0aW9uOglJdCBpcyBwb3NzaWJsZSB0byBzd2l0Y2ggdGhlIGNwaSBzZXR0aW5nIG9mIHRoZSBtb3VzZSB3aXRoIHRoZQpAQCAtMTQsMTQgKzE0LDE0IEBACiAKIAkJVGhpcyBmaWxlIGlzIHJlYWRvbmx5LgogCi1XaGF0OgkJL3N5cy9idXMvdXNiL2RldmljZXMvPGJ1c251bT4tPGRldm51bT46PGNvbmZpZyBudW0+LjxpbnRlcmZhY2UgbnVtPi9hY3R1YWxfcHJvZmlsZQorV2hhdDoJCS9zeXMvYnVzL3VzYi9kZXZpY2VzLzxidXNudW0+LTxkZXZudW0+Ojxjb25maWcgbnVtPi48aW50ZXJmYWNlIG51bT4vPGhpZC1idXM+Ojx2ZW5kb3ItaWQ+Ojxwcm9kdWN0LWlkPi48bnVtPi9weXJhL3JvY2NhdHB5cmE8bWlub3I+L2FjdHVhbF9wcm9maWxlCiBEYXRlOgkJQXVndXN0IDIwMTAKIENvbnRhY3Q6CVN0ZWZhbiBBY2hhdHogPGVyYXpvcl9kZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CiBEZXNjcmlwdGlvbjoJV2hlbiByZWFkLCB0aGlzIGZpbGUgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHRoZSBhY3R1YWwgcHJvZmlsZSBpbgogCQlyYW5nZSAwLTQuCiAJCVRoaXMgZmlsZSBpcyByZWFkb25seS4KIAotV2hhdDoJCS9zeXMvYnVzL3VzYi9kZXZpY2VzLzxidXNudW0+LTxkZXZudW0+Ojxjb25maWcgbnVtPi48aW50ZXJmYWNlIG51bT4vZmlybXdhcmVfdmVyc2lvbgorV2hhdDoJCS9zeXMvYnVzL3VzYi9kZXZpY2VzLzxidXNudW0+LTxkZXZudW0+Ojxjb25maWcgbnVtPi48aW50ZXJmYWNlIG51bT4vPGhpZC1idXM+Ojx2ZW5kb3ItaWQ+Ojxwcm9kdWN0LWlkPi48bnVtPi9weXJhL3JvY2NhdHB5cmE8bWlub3I+L2Zpcm13YXJlX3ZlcnNpb24KIERhdGU6CQlBdWd1c3QgMjAxMAogQ29udGFjdDoJU3RlZmFuIEFjaGF0eiA8ZXJhem9yX2RlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KIERlc2NyaXB0aW9uOglXaGVuIHJlYWQsIHRoaXMgZmlsZSByZXR1cm5zIHRoZSByYXcgaW50ZWdlciB2ZXJzaW9uIG51bWJlciBvZiB0aGUKQEAgLTMxLDcgKzMxLDcgQEAKIAkJbGVmdC4gRS5nLiBhIHJldHVybmVkIHZhbHVlIG9mIDEzOCBtZWFucyAxLjM4CiAJCVRoaXMgZmlsZSBpcyByZWFkb25seS4KIAotV2hhdDoJCS9zeXMvYnVzL3VzYi9kZXZpY2VzLzxidXNudW0+LTxkZXZudW0+Ojxjb25maWcgbnVtPi48aW50ZXJmYWNlIG51bT4vcHJvZmlsZV9zZXR0aW5ncworV2hhdDoJCS9zeXMvYnVzL3VzYi9kZXZpY2VzLzxidXNudW0+LTxkZXZudW0+Ojxjb25maWcgbnVtPi48aW50ZXJmYWNlIG51bT4vPGhpZC1idXM+Ojx2ZW5kb3ItaWQ+Ojxwcm9kdWN0LWlkPi48bnVtPi9weXJhL3JvY2NhdHB5cmE8bWlub3I+L3Byb2ZpbGVfc2V0dGluZ3MKIERhdGU6CQlBdWd1c3QgMjAxMAogQ29udGFjdDoJU3RlZmFuIEFjaGF0eiA8ZXJhem9yX2RlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KIERlc2NyaXB0aW9uOglUaGUgbW91c2UgY2FuIHN0b3JlIDUgcHJvZmlsZXMgd2hpY2ggY2FuIGJlIHN3aXRjaGVkIGJ5IHRoZQpAQCAtNDUsNyArNDUsNyBAQAogCQljb250YWluZWQgaW4gdGhlIGRhdGEuCiAJCVRoaXMgZmlsZSBpcyB3cml0ZW9ubHkuCiAKLVdoYXQ6CQkvc3lzL2J1cy91c2IvZGV2aWNlcy88YnVzbnVtPi08ZGV2bnVtPjo8Y29uZmlnIG51bT4uPGludGVyZmFjZSBudW0+L3Byb2ZpbGVbMS01XV9zZXR0aW5ncworV2hhdDoJCS9zeXMvYnVzL3VzYi9kZXZpY2VzLzxidXNudW0+LTxkZXZudW0+Ojxjb25maWcgbnVtPi48aW50ZXJmYWNlIG51bT4vPGhpZC1idXM+Ojx2ZW5kb3ItaWQ+Ojxwcm9kdWN0LWlkPi48bnVtPi9weXJhL3JvY2NhdHB5cmE8bWlub3I+L3Byb2ZpbGVbMS01XV9zZXR0aW5ncwogRGF0ZToJCUF1Z3VzdCAyMDEwCiBDb250YWN0OglTdGVmYW4gQWNoYXR6IDxlcmF6b3JfZGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgogRGVzY3JpcHRpb246CVRoZSBtb3VzZSBjYW4gc3RvcmUgNSBwcm9maWxlcyB3aGljaCBjYW4gYmUgc3dpdGNoZWQgYnkgdGhlCkBAIC01Niw3ICs1Niw3IEBACiAJCVRoZSByZXR1cm5lZCBkYXRhIGlzIDEzIGJ5dGVzIGluIHNpemUuCiAJCVRoaXMgZmlsZSBpcyByZWFkb25seS4KIAotV2hhdDoJCS9zeXMvYnVzL3VzYi9kZXZpY2VzLzxidXNudW0+LTxkZXZudW0+Ojxjb25maWcgbnVtPi48aW50ZXJmYWNlIG51bT4vcHJvZmlsZV9idXR0b25zCitXaGF0OgkJL3N5cy9idXMvdXNiL2RldmljZXMvPGJ1c251bT4tPGRldm51bT46PGNvbmZpZyBudW0+LjxpbnRlcmZhY2UgbnVtPi88aGlkLWJ1cz46PHZlbmRvci1pZD46PHByb2R1Y3QtaWQ+LjxudW0+L3B5cmEvcm9jY2F0cHlyYTxtaW5vcj4vcHJvZmlsZV9idXR0b25zCiBEYXRlOgkJQXVndXN0IDIwMTAKIENvbnRhY3Q6CVN0ZWZhbiBBY2hhdHogPGVyYXpvcl9kZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CiBEZXNjcmlwdGlvbjoJVGhlIG1vdXNlIGNhbiBzdG9yZSA1IHByb2ZpbGVzIHdoaWNoIGNhbiBiZSBzd2l0Y2hlZCBieSB0aGUKQEAgLTY5LDcgKzY5LDcgQEAKIAkJY29udGFpbmVkIGluIHRoZSBkYXRhLgogCQlUaGlzIGZpbGUgaXMgd3JpdGVvbmx5LgogCi1XaGF0OgkJL3N5cy9idXMvdXNiL2RldmljZXMvPGJ1c251bT4tPGRldm51bT46PGNvbmZpZyBudW0+LjxpbnRlcmZhY2UgbnVtPi9wcm9maWxlWzEtNV1fYnV0dG9ucworV2hhdDoJCS9zeXMvYnVzL3VzYi9kZXZpY2VzLzxidXNudW0+LTxkZXZudW0+Ojxjb25maWcgbnVtPi48aW50ZXJmYWNlIG51bT4vPGhpZC1idXM+Ojx2ZW5kb3ItaWQ+Ojxwcm9kdWN0LWlkPi48bnVtPi9weXJhL3JvY2NhdHB5cmE8bWlub3I+L3Byb2ZpbGVbMS01XV9idXR0b25zCiBEYXRlOgkJQXVndXN0IDIwMTAKIENvbnRhY3Q6CVN0ZWZhbiBBY2hhdHogPGVyYXpvcl9kZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CiBEZXNjcmlwdGlvbjoJVGhlIG1vdXNlIGNhbiBzdG9yZSA1IHByb2ZpbGVzIHdoaWNoIGNhbiBiZSBzd2l0Y2hlZCBieSB0aGUKQEAgLTc5LDcgKzc5LDcgQEAKIAkJVGhlIHJldHVybmVkIGRhdGEgaXMgMTkgYnl0ZXMgaW4gc2l6ZS4KIAkJVGhpcyBmaWxlIGlzIHJlYWRvbmx5LgogCi1XaGF0OgkJL3N5cy9idXMvdXNiL2RldmljZXMvPGJ1c251bT4tPGRldm51bT46PGNvbmZpZyBudW0+LjxpbnRlcmZhY2UgbnVtPi9zdGFydHVwX3Byb2ZpbGUKK1doYXQ6CQkvc3lzL2J1cy91c2IvZGV2aWNlcy88YnVzbnVtPi08ZGV2bnVtPjo8Y29uZmlnIG51bT4uPGludGVyZmFjZSBudW0+LzxoaWQtYnVzPjo8dmVuZG9yLWlkPjo8cHJvZHVjdC1pZD4uPG51bT4vcHlyYS9yb2NjYXRweXJhPG1pbm9yPi9zdGFydHVwX3Byb2ZpbGUKIERhdGU6CQlBdWd1c3QgMjAxMAogQ29udGFjdDoJU3RlZmFuIEFjaGF0eiA8ZXJhem9yX2RlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KIERlc2NyaXB0aW9uOglUaGUgaW50ZWdlciB2YWx1ZSBvZiB0aGlzIGF0dHJpYnV0ZSByYW5nZXMgZnJvbSAwLTQuCkBAIC04Nyw3ICs4Nyw3IEBACiAgICAgICAgICAgICAgICAgdGhhdCdzIGFjdGl2ZSB3aGVuIHRoZSBtb3VzZSBpcyBwb3dlcmVkIG9uLgogCQlUaGlzIGZpbGUgaXMgcmVhZG9ubHkuCiAKLVdoYXQ6CQkvc3lzL2J1cy91c2IvZGV2aWNlcy88YnVzbnVtPi08ZGV2bnVtPjo8Y29uZmlnIG51bT4uPGludGVyZmFjZSBudW0+L3NldHRpbmdzCitXaGF0OgkJL3N5cy9idXMvdXNiL2RldmljZXMvPGJ1c251bT4tPGRldm51bT46PGNvbmZpZyBudW0+LjxpbnRlcmZhY2UgbnVtPi88aGlkLWJ1cz46PHZlbmRvci1pZD46PHByb2R1Y3QtaWQ+LjxudW0+L3B5cmEvcm9jY2F0cHlyYTxtaW5vcj4vc2V0dGluZ3MKIERhdGU6CQlBdWd1c3QgMjAxMAogQ29udGFjdDoJU3RlZmFuIEFjaGF0eiA8ZXJhem9yX2RlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KIERlc2NyaXB0aW9uOglXaGVuIHJlYWQsIHRoaXMgZmlsZSByZXR1cm5zIHRoZSBzZXR0aW5ncyBzdG9yZWQgaW4gdGhlIG1vdXNlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy10dHkgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXR0eQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTM4YjY2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy10dHkKQEAgLTAsMCArMSwxOSBAQAorV2hhdDoJCS9zeXMvY2xhc3MvdHR5L2NvbnNvbGUvYWN0aXZlCitEYXRlOgkJTm92IDIwMTAKK0NvbnRhY3Q6CUtheSBTaWV2ZXJzIDxrYXkuc2lldmVyc0B2cmZ5Lm9yZz4KK0Rlc2NyaXB0aW9uOgorCQkgU2hvd3MgdGhlIGxpc3Qgb2YgY3VycmVudGx5IGNvbmZpZ3VyZWQKKwkJIGNvbnNvbGUgZGV2aWNlcywgbGlrZSAndHR5MSB0dHlTMCcuCisJCSBUaGUgbGFzdCBlbnRyeSBpbiB0aGUgZmlsZSBpcyB0aGUgYWN0aXZlCisJCSBkZXZpY2UgY29ubmVjdGVkIHRvIC9kZXYvY29uc29sZS4KKwkJIFRoZSBmaWxlIHN1cHBvcnRzIHBvbGwoKSB0byBkZXRlY3QgdmlydHVhbAorCQkgY29uc29sZSBzd2l0Y2hlcy4KKworV2hhdDoJCS9zeXMvY2xhc3MvdHR5L3R0eTAvYWN0aXZlCitEYXRlOgkJTm92IDIwMTAKK0NvbnRhY3Q6CUtheSBTaWV2ZXJzIDxrYXkuc2lldmVyc0B2cmZ5Lm9yZz4KK0Rlc2NyaXB0aW9uOgorCQkgU2hvd3MgdGhlIGN1cnJlbnRseSBhY3RpdmUgdmlydHVhbCBjb25zb2xlCisJCSBkZXZpY2UsIGxpa2UgJ3R0eTEnLgorCQkgVGhlIGZpbGUgc3VwcG9ydHMgcG9sbCgpIHRvIGRldGVjdCB2aXJ0dWFsCisJCSBjb25zb2xlIHN3aXRjaGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rLzgwMjExLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svODAyMTEudG1wbAppbmRleCAxOWExMjEwLi4wMzY0MWEwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svODAyMTEudG1wbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svODAyMTEudG1wbApAQCAtMTQ2LDYgKzE0Niw3IEBACiAhRmluY2x1ZGUvbmV0L2NmZzgwMjExLmggY2ZnODAyMTFfcnhfbWdtdAogIUZpbmNsdWRlL25ldC9jZmc4MDIxMS5oIGNmZzgwMjExX21nbXRfdHhfc3RhdHVzCiAhRmluY2x1ZGUvbmV0L2NmZzgwMjExLmggY2ZnODAyMTFfY3FtX3Jzc2lfbm90aWZ5CishRmluY2x1ZGUvbmV0L2NmZzgwMjExLmggY2ZnODAyMTFfY3FtX3BrdGxvc3Nfbm90aWZ5CiAhRmluY2x1ZGUvbmV0L2NmZzgwMjExLmggY2ZnODAyMTFfbWljaGFlbF9taWNfZmFpbHVyZQogICAgICAgPC9jaGFwdGVyPgogICAgICAgPGNoYXB0ZXI+CkBAIC0zMzIsMTAgKzMzMywxNiBAQAogICAgICAgICAgIDx0aXRsZT5mdW5jdGlvbnMvZGVmaW5pdGlvbnM8L3RpdGxlPgogIUZpbmNsdWRlL25ldC9tYWM4MDIxMS5oIGllZWU4MDIxMV9yeF9zdGF0dXMKICFGaW5jbHVkZS9uZXQvbWFjODAyMTEuaCBtYWM4MDIxMV9yeF9mbGFncworIUZpbmNsdWRlL25ldC9tYWM4MDIxMS5oIG1hYzgwMjExX3R4X2NvbnRyb2xfZmxhZ3MKKyFGaW5jbHVkZS9uZXQvbWFjODAyMTEuaCBtYWM4MDIxMV9yYXRlX2NvbnRyb2xfZmxhZ3MKKyFGaW5jbHVkZS9uZXQvbWFjODAyMTEuaCBpZWVlODAyMTFfdHhfcmF0ZQogIUZpbmNsdWRlL25ldC9tYWM4MDIxMS5oIGllZWU4MDIxMV90eF9pbmZvCishRmluY2x1ZGUvbmV0L21hYzgwMjExLmggaWVlZTgwMjExX3R4X2luZm9fY2xlYXJfc3RhdHVzCiAhRmluY2x1ZGUvbmV0L21hYzgwMjExLmggaWVlZTgwMjExX3J4CishRmluY2x1ZGUvbmV0L21hYzgwMjExLmggaWVlZTgwMjExX3J4X25pCiAhRmluY2x1ZGUvbmV0L21hYzgwMjExLmggaWVlZTgwMjExX3J4X2lycXNhZmUKICFGaW5jbHVkZS9uZXQvbWFjODAyMTEuaCBpZWVlODAyMTFfdHhfc3RhdHVzCishRmluY2x1ZGUvbmV0L21hYzgwMjExLmggaWVlZTgwMjExX3R4X3N0YXR1c19uaQogIUZpbmNsdWRlL25ldC9tYWM4MDIxMS5oIGllZWU4MDIxMV90eF9zdGF0dXNfaXJxc2FmZQogIUZpbmNsdWRlL25ldC9tYWM4MDIxMS5oIGllZWU4MDIxMV9ydHNfZ2V0CiAhRmluY2x1ZGUvbmV0L21hYzgwMjExLmggaWVlZTgwMjExX3J0c19kdXJhdGlvbgpAQCAtMzQ2LDYgKzM1Myw3IEBACiAhRmluY2x1ZGUvbmV0L21hYzgwMjExLmggaWVlZTgwMjExX3N0b3BfcXVldWUKICFGaW5jbHVkZS9uZXQvbWFjODAyMTEuaCBpZWVlODAyMTFfd2FrZV9xdWV1ZXMKICFGaW5jbHVkZS9uZXQvbWFjODAyMTEuaCBpZWVlODAyMTFfc3RvcF9xdWV1ZXMKKyFGaW5jbHVkZS9uZXQvbWFjODAyMTEuaCBpZWVlODAyMTFfcXVldWVfc3RvcHBlZAogICAgICAgICA8L3NlY3QxPgogICAgICAgPC9jaGFwdGVyPgogCkBAIC0zNTQsNiArMzYyLDEzIEBACiAhUGluY2x1ZGUvbmV0L21hYzgwMjExLmggRnJhbWUgZmlsdGVyaW5nCiAhRmluY2x1ZGUvbmV0L21hYzgwMjExLmggaWVlZTgwMjExX2ZpbHRlcl9mbGFncwogICAgICAgPC9jaGFwdGVyPgorCisgICAgICA8Y2hhcHRlciBpZD0id29ya3F1ZXVlIj4KKyAgICAgICAgPHRpdGxlPlRoZSBtYWM4MDIxMSB3b3JrcXVldWU8L3RpdGxlPgorIVBpbmNsdWRlL25ldC9tYWM4MDIxMS5oIG1hYzgwMjExIHdvcmtxdWV1ZQorIUZpbmNsdWRlL25ldC9tYWM4MDIxMS5oIGllZWU4MDIxMV9xdWV1ZV93b3JrCishRmluY2x1ZGUvbmV0L21hYzgwMjExLmggaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yaworICAgICAgPC9jaGFwdGVyPgogICAgIDwvcGFydD4KIAogICAgIDxwYXJ0IGlkPSJhZHZhbmNlZCI+CkBAIC0zNzQsNiArMzg5LDkgQEAKICFGaW5jbHVkZS9uZXQvbWFjODAyMTEuaCBzZXRfa2V5X2NtZAogIUZpbmNsdWRlL25ldC9tYWM4MDIxMS5oIGllZWU4MDIxMV9rZXlfY29uZgogIUZpbmNsdWRlL25ldC9tYWM4MDIxMS5oIGllZWU4MDIxMV9rZXlfZmxhZ3MKKyFGaW5jbHVkZS9uZXQvbWFjODAyMTEuaCBpZWVlODAyMTFfdGtpcF9rZXlfdHlwZQorIUZpbmNsdWRlL25ldC9tYWM4MDIxMS5oIGllZWU4MDIxMV9nZXRfdGtpcF9rZXkKKyFGaW5jbHVkZS9uZXQvbWFjODAyMTEuaCBpZWVlODAyMTFfa2V5X3JlbW92ZWQKICAgICAgIDwvY2hhcHRlcj4KIAogICAgICAgPGNoYXB0ZXIgaWQ9InBvd2Vyc2F2ZSI+CkBAIC00MTcsNiArNDM1LDE4IEBACiAgICAgICAgICAgc3VwcG9ydGVkIGJ5IG1hYzgwMjExLCBhZGQgbm90ZXMgYWJvdXQgc3VwcG9ydGluZyBodyBjcnlwdG8KICAgICAgICAgICB3aXRoIGl0LgogICAgICAgICA8L3BhcmE+CishRmluY2x1ZGUvbmV0L21hYzgwMjExLmggaWVlZTgwMjExX2l0ZXJhdGVfYWN0aXZlX2ludGVyZmFjZXMKKyFGaW5jbHVkZS9uZXQvbWFjODAyMTEuaCBpZWVlODAyMTFfaXRlcmF0ZV9hY3RpdmVfaW50ZXJmYWNlc19hdG9taWMKKyAgICAgIDwvY2hhcHRlcj4KKworICAgICAgPGNoYXB0ZXIgaWQ9InN0YXRpb24taGFuZGxpbmciPgorICAgICAgICA8dGl0bGU+U3RhdGlvbiBoYW5kbGluZzwvdGl0bGU+CisgICAgICAgIDxwYXJhPlRPRE88L3BhcmE+CishRmluY2x1ZGUvbmV0L21hYzgwMjExLmggaWVlZTgwMjExX3N0YQorIUZpbmNsdWRlL25ldC9tYWM4MDIxMS5oIHN0YV9ub3RpZnlfY21kCishRmluY2x1ZGUvbmV0L21hYzgwMjExLmggaWVlZTgwMjExX2ZpbmRfc3RhCishRmluY2x1ZGUvbmV0L21hYzgwMjExLmggaWVlZTgwMjExX2ZpbmRfc3RhX2J5X2lmYWRkcgorIUZpbmNsdWRlL25ldC9tYWM4MDIxMS5oIGllZWU4MDIxMV9zdGFfYmxvY2tfYXdha2UKICAgICAgIDwvY2hhcHRlcj4KIAogICAgICAgPGNoYXB0ZXIgaWQ9ImhhcmR3YXJlLXNjYW4tb2ZmbG9hZCI+CkBAIC00MjQsNiArNDU0LDI4IEBACiAgICAgICAgIDxwYXJhPlRCRDwvcGFyYT4KICFGaW5jbHVkZS9uZXQvbWFjODAyMTEuaCBpZWVlODAyMTFfc2Nhbl9jb21wbGV0ZWQKICAgICAgIDwvY2hhcHRlcj4KKworICAgICAgPGNoYXB0ZXIgaWQ9ImFnZ3JlZ2F0aW9uIj4KKyAgICAgICAgPHRpdGxlPkFnZ3JlZ2F0aW9uPC90aXRsZT4KKyAgICAgICAgPHNlY3QxPgorICAgICAgICAgIDx0aXRsZT5UWCBBLU1QRFUgYWdncmVnYXRpb248L3RpdGxlPgorIVBuZXQvbWFjODAyMTEvYWdnLXR4LmMgVFggQS1NUERVIGFnZ3JlZ2F0aW9uCishQ25ldC9tYWM4MDIxMS9hZ2ctdHguYworICAgICAgICA8L3NlY3QxPgorICAgICAgICA8c2VjdDE+CisgICAgICAgICAgPHRpdGxlPlJYIEEtTVBEVSBhZ2dyZWdhdGlvbjwvdGl0bGU+CishUG5ldC9tYWM4MDIxMS9hZ2ctcnguYyBSWCBBLU1QRFUgYWdncmVnYXRpb24KKyFDbmV0L21hYzgwMjExL2FnZy1yeC5jCisgICAgICAgIDwvc2VjdDE+CishRmluY2x1ZGUvbmV0L21hYzgwMjExLmggaWVlZTgwMjExX2FtcGR1X21sbWVfYWN0aW9uCisgICAgICA8L2NoYXB0ZXI+CisKKyAgICAgIDxjaGFwdGVyIGlkPSJzbXBzIj4KKyAgICAgICAgPHRpdGxlPlNwYXRpYWwgTXVsdGlwbGV4aW5nIFBvd2Vyc2F2ZSAoU01QUyk8L3RpdGxlPgorIVBpbmNsdWRlL25ldC9tYWM4MDIxMS5oIFNwYXRpYWwgbXVsdGlwbGV4aW5nIHBvd2VyIHNhdmUKKyFGaW5jbHVkZS9uZXQvbWFjODAyMTEuaCBpZWVlODAyMTFfcmVxdWVzdF9zbXBzCishRmluY2x1ZGUvbmV0L21hYzgwMjExLmggaWVlZTgwMjExX3NtcHNfbW9kZQorICAgICAgPC9jaGFwdGVyPgogICAgIDwvcGFydD4KIAogICAgIDxwYXJ0IGlkPSJyYXRlLWNvbnRyb2wiPgpAQCAtNDM1LDkgKzQ4NywxNiBAQAogICAgICAgICAgaW50ZXJmYWNlIGFuZCBob3cgaXQgcmVsYXRlcyB0byBtYWM4MDIxMSBhbmQgZHJpdmVycy4KICAgICAgICAgPC9wYXJhPgogICAgICAgPC9wYXJ0aW50cm8+Ci0gICAgICA8Y2hhcHRlciBpZD0iZHVtbXkiPgotICAgICAgICA8dGl0bGU+ZHVtbXkgY2hhcHRlcjwvdGl0bGU+CisgICAgICA8Y2hhcHRlciBpZD0icmF0ZWNvbnRyb2wtYXBpIj4KKyAgICAgICAgPHRpdGxlPlJhdGUgQ29udHJvbCBBUEk8L3RpdGxlPgogICAgICAgICA8cGFyYT5UQkQ8L3BhcmE+CishRmluY2x1ZGUvbmV0L21hYzgwMjExLmggaWVlZTgwMjExX3N0YXJ0X3R4X2JhX3Nlc3Npb24KKyFGaW5jbHVkZS9uZXQvbWFjODAyMTEuaCBpZWVlODAyMTFfc3RhcnRfdHhfYmFfY2JfaXJxc2FmZQorIUZpbmNsdWRlL25ldC9tYWM4MDIxMS5oIGllZWU4MDIxMV9zdG9wX3R4X2JhX3Nlc3Npb24KKyFGaW5jbHVkZS9uZXQvbWFjODAyMTEuaCBpZWVlODAyMTFfc3RvcF90eF9iYV9jYl9pcnFzYWZlCishRmluY2x1ZGUvbmV0L21hYzgwMjExLmggcmF0ZV9jb250cm9sX2NoYW5nZWQKKyFGaW5jbHVkZS9uZXQvbWFjODAyMTEuaCBpZWVlODAyMTFfdHhfcmF0ZV9jb250cm9sCishRmluY2x1ZGUvbmV0L21hYzgwMjExLmggcmF0ZV9jb250cm9sX3NlbmRfbG93CiAgICAgICA8L2NoYXB0ZXI+CiAgICAgPC9wYXJ0PgogCkBAIC00ODUsNiArNTQ0LDEzIEBACiAgICAgICAgIDwvc2VjdDE+CiAgICAgICA8L2NoYXB0ZXI+CiAKKyAgICAgIDxjaGFwdGVyIGlkPSJhZ2dyZWdhdGlvbi1pbnRlcm5hbHMiPgorICAgICAgICA8dGl0bGU+QWdncmVnYXRpb248L3RpdGxlPgorIUZuZXQvbWFjODAyMTEvc3RhX2luZm8uaCBzdGFfYW1wZHVfbWxtZQorIUZuZXQvbWFjODAyMTEvc3RhX2luZm8uaCB0aWRfYW1wZHVfdHgKKyFGbmV0L21hYzgwMjExL3N0YV9pbmZvLmggdGlkX2FtcGR1X3J4CisgICAgICA8L2NoYXB0ZXI+CisKICAgICAgIDxjaGFwdGVyIGlkPSJzeW5jaHJvbmlzYXRpb24iPgogICAgICAgICA8dGl0bGU+U3luY2hyb25pc2F0aW9uPC90aXRsZT4KICAgICAgICAgPHBhcmE+VEJEPC9wYXJhPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2RldmljZS1kcml2ZXJzLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZGV2aWNlLWRyaXZlcnMudG1wbAppbmRleCAyMmVkY2JiLi4zNTQ0N2UwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZGV2aWNlLWRyaXZlcnMudG1wbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZGV2aWNlLWRyaXZlcnMudG1wbApAQCAtMzA0LDYgKzMwNCwxMCBAQAogIUVkcml2ZXJzL2lucHV0L2ZmLWNvcmUuYwogIUVkcml2ZXJzL2lucHV0L2ZmLW1lbWxlc3MuYwogICAgICA8L3NlY3QxPgorICAgICA8c2VjdDE+PHRpdGxlPk11bHRpdG91Y2ggTGlicmFyeTwvdGl0bGU+CishSWluY2x1ZGUvbGludXgvaW5wdXQvbXQuaAorIUVkcml2ZXJzL2lucHV0L2lucHV0LW10LmMKKyAgICAgPC9zZWN0MT4KICAgICAgPHNlY3QxPjx0aXRsZT5Qb2xsZWQgaW5wdXQgZGV2aWNlczwvdGl0bGU+CiAhSWluY2x1ZGUvbGludXgvaW5wdXQtcG9sbGRldi5oCiAhRWRyaXZlcnMvaW5wdXQvaW5wdXQtcG9sbGRldi5jCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Z1bmMtaW9jdGwueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9mdW5jLWlvY3RsLnhtbAppbmRleCAwMGY5NjkwZS4uYjYwZmQzNyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9mdW5jLWlvY3RsLnhtbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Z1bmMtaW9jdGwueG1sCkBAIC0zNCw4ICszNCw3IEBACiAgICAgICA8dmFybGlzdGVudHJ5PgogCTx0ZXJtPjxwYXJhbWV0ZXI+cmVxdWVzdDwvcGFyYW1ldGVyPjwvdGVybT4KIAk8bGlzdGl0ZW0+Ci0JICA8cGFyYT5WNEwyIGlvY3RsIHJlcXVlc3QgY29kZSBhcyBkZWZpbmVkIGluIHRoZSA8bGluawotbGlua2VuZD0idmlkZW9kZXYiPnZpZGVvZGV2Lmg8L2xpbms+IGhlYWRlciBmaWxlLCBmb3IgZXhhbXBsZQorCSAgPHBhcmE+VjRMMiBpb2N0bCByZXF1ZXN0IGNvZGUgYXMgZGVmaW5lZCBpbiB0aGUgPGZpbGVuYW1lPnZpZGVvZGV2Mi5oPC9maWxlbmFtZT4gaGVhZGVyIGZpbGUsIGZvciBleGFtcGxlCiBWSURJT0NfUVVFUllDQVAuPC9wYXJhPgogCTwvbGlzdGl0ZW0+CiAgICAgICA8L3Zhcmxpc3RlbnRyeT4KQEAgLTU3LDcgKzU2LDcgQEAKIGluIGl0IHdoZXRoZXIgdGhlIGFyZ3VtZW50IGlzIGFuIGlucHV0LCBvdXRwdXQgb3IgcmVhZC93cml0ZQogcGFyYW1ldGVyLCBhbmQgdGhlIHNpemUgb2YgdGhlIGFyZ3VtZW50IDxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPiBpbgogYnl0ZXMuIE1hY3JvcyBhbmQgZGVmaW5lcyBzcGVjaWZ5aW5nIFY0TDIgaW9jdGwgcmVxdWVzdHMgYXJlIGxvY2F0ZWQKLWluIHRoZSA8bGluayBsaW5rZW5kPSJ2aWRlb2RldiI+dmlkZW9kZXYuaDwvbGluaz4gaGVhZGVyIGZpbGUuCitpbiB0aGUgPGZpbGVuYW1lPnZpZGVvZGV2Mi5oPC9maWxlbmFtZT4gaGVhZGVyIGZpbGUuCiBBcHBsaWNhdGlvbnMgc2hvdWxkIHVzZSB0aGVpciBvd24gY29weSwgbm90IGluY2x1ZGUgdGhlIHZlcnNpb24gaW4gdGhlCiBrZXJuZWwgc291cmNlcyBvbiB0aGUgc3lzdGVtIHRoZXkgY29tcGlsZSBvbi4gQWxsIFY0TDIgaW9jdGwgcmVxdWVzdHMsCiB0aGVpciByZXNwZWN0aXZlIGZ1bmN0aW9uIGFuZCBwYXJhbWV0ZXJzIGFyZSBzcGVjaWZpZWQgaW4gPHhyZWYKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcGl4Zm10LnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcGl4Zm10LnhtbAppbmRleCBkN2M0NjcxLi5jZmZmYzg4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC54bWwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9waXhmbXQueG1sCkBAIC0xNDIsOCArMTQyLDggQEAKIGhhcyBqdXN0IGFzIG1hbnkgcGFkIGJ5dGVzIGFmdGVyIGl0IGFzIHRoZSBvdGhlciByb3dzLjwvcGFyYT4KIAogICAgIDxwYXJhPkluIFY0TDIgZWFjaCBmb3JtYXQgaGFzIGFuIGlkZW50aWZpZXIgd2hpY2ggbG9va3MgbGlrZQotPGNvbnN0YW50PlBJWF9GTVRfWFhYPC9jb25zdGFudD4sIGRlZmluZWQgaW4gdGhlIDxsaW5rCi1saW5rZW5kPSJ2aWRlb2RldiI+dmlkZW9kZXYuaDwvbGluaz4gaGVhZGVyIGZpbGUuIFRoZXNlIGlkZW50aWZpZXJzCis8Y29uc3RhbnQ+UElYX0ZNVF9YWFg8L2NvbnN0YW50PiwgZGVmaW5lZCBpbiB0aGUgPGZpbGVuYW1lPnZpZGVvZGV2Mi5oPC9maWxlbmFtZT4KK2hlYWRlciBmaWxlLiBUaGVzZSBpZGVudGlmaWVycwogcmVwcmVzZW50IDxsaW5rIGxpbmtlbmQ9InY0bDItZm91cmNjIj5mb3VyIGNoYXJhY3RlciBjb2RlczwvbGluaz4KIHdoaWNoIGFyZSBhbHNvIGxpc3RlZCBiZWxvdywgaG93ZXZlciB0aGV5IGFyZSBub3QgdGhlIHNhbWUgYXMgdGhvc2UKIHVzZWQgaW4gdGhlIFdpbmRvd3Mgd29ybGQuPC9wYXJhPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9NYWtlZmlsZSBiL0RvY3VtZW50YXRpb24vTWFrZWZpbGUKaW5kZXggNmZjN2VhMS4uOWI0YmM1YyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9NYWtlZmlsZQorKysgYi9Eb2N1bWVudGF0aW9uL01ha2VmaWxlCkBAIC0xLDMgKzEsMyBAQAogb2JqLW0gOj0gRG9jQm9vay8gYWNjb3VudGluZy8gYXV4ZGlzcGxheS8gY29ubmVjdG9yLyBcCiAJZmlsZXN5c3RlbXMvIGZpbGVzeXN0ZW1zL2NvbmZpZ2ZzLyBpYTY0LyBsYXB0b3BzLyBuZXR3b3JraW5nLyBcCi0JcGNtY2lhLyBzcGkvIHRpbWVycy8gdmlkZW80bGludXgvIHZtLyB3YXRjaGRvZy9zcmMvCisJcGNtY2lhLyBzcGkvIHRpbWVycy8gdm0vIHdhdGNoZG9nL3NyYy8KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUkNVL3RyYWNlLnR4dCBiL0RvY3VtZW50YXRpb24vUkNVL3RyYWNlLnR4dAppbmRleCBhODUxMTE4Li42YThjNzNmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JDVS90cmFjZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9SQ1UvdHJhY2UudHh0CkBAIC0xLDE4ICsxLDIyIEBACiBDT05GSUdfUkNVX1RSQUNFIGRlYnVnZnMgRmlsZXMgYW5kIEZvcm1hdHMKIAogCi1UaGUgcmN1dHJlZSBpbXBsZW1lbnRhdGlvbiBvZiBSQ1UgcHJvdmlkZXMgZGVidWdmcyB0cmFjZSBvdXRwdXQgdGhhdAotc3VtbWFyaXplcyBjb3VudGVycyBhbmQgc3RhdGUuICBUaGlzIGluZm9ybWF0aW9uIGlzIHVzZWZ1bCBmb3IgZGVidWdnaW5nCi1SQ1UgaXRzZWxmLCBhbmQgY2FuIHNvbWV0aW1lcyBhbHNvIGhlbHAgdG8gZGVidWcgYWJ1c2VzIG9mIFJDVS4KLVRoZSBmb2xsb3dpbmcgc2VjdGlvbnMgZGVzY3JpYmUgdGhlIGRlYnVnZnMgZmlsZXMgYW5kIGZvcm1hdHMuCitUaGUgcmN1dHJlZSBhbmQgcmN1dGlueSBpbXBsZW1lbnRhdGlvbnMgb2YgUkNVIHByb3ZpZGUgZGVidWdmcyB0cmFjZQorb3V0cHV0IHRoYXQgc3VtbWFyaXplcyBjb3VudGVycyBhbmQgc3RhdGUuICBUaGlzIGluZm9ybWF0aW9uIGlzIHVzZWZ1bCBmb3IKK2RlYnVnZ2luZyBSQ1UgaXRzZWxmLCBhbmQgY2FuIHNvbWV0aW1lcyBhbHNvIGhlbHAgdG8gZGVidWcgYWJ1c2VzIG9mIFJDVS4KK1RoZSBmb2xsb3dpbmcgc2VjdGlvbnMgZGVzY3JpYmUgdGhlIGRlYnVnZnMgZmlsZXMgYW5kIGZvcm1hdHMsIGZpcnN0Citmb3IgcmN1dHJlZSBhbmQgbmV4dCBmb3IgcmN1dGlueS4KIAogCi1IaWVyYXJjaGljYWwgUkNVIGRlYnVnZnMgRmlsZXMgYW5kIEZvcm1hdHMKK0NPTkZJR19UUkVFX1JDVSBhbmQgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgZGVidWdmcyBGaWxlcyBhbmQgRm9ybWF0cwogCi1UaGlzIGltcGxlbWVudGF0aW9uIG9mIFJDVSBwcm92aWRlcyB0aHJlZSBkZWJ1Z2ZzIGZpbGVzIHVuZGVyIHRoZQorVGhlc2UgaW1wbGVtZW50YXRpb25zIG9mIFJDVSBwcm92aWRlcyBmaXZlIGRlYnVnZnMgZmlsZXMgdW5kZXIgdGhlCiB0b3AtbGV2ZWwgZGlyZWN0b3J5IFJDVTogcmN1L3JjdWRhdGEgKHdoaWNoIGRpc3BsYXlzIGZpZWxkcyBpbiBzdHJ1Y3QKLXJjdV9kYXRhKSwgcmN1L3JjdWdwICh3aGljaCBkaXNwbGF5cyBncmFjZS1wZXJpb2QgY291bnRlcnMpLCBhbmQKLXJjdS9yY3VoaWVyICh3aGljaCBkaXNwbGF5cyB0aGUgc3RydWN0IHJjdV9ub2RlIGhpZXJhcmNoeSkuCityY3VfZGF0YSksIHJjdS9yY3VkYXRhLmNzdiAod2hpY2ggaXMgYSAuY3N2IHNwcmVhZHNoZWV0IHZlcnNpb24gb2YKK3JjdS9yY3VkYXRhKSwgcmN1L3JjdWdwICh3aGljaCBkaXNwbGF5cyBncmFjZS1wZXJpb2QgY291bnRlcnMpLAorcmN1L3JjdWhpZXIgKHdoaWNoIGRpc3BsYXlzIHRoZSBzdHJ1Y3QgcmN1X25vZGUgaGllcmFyY2h5KSwgYW5kCityY3UvcmN1X3BlbmRpbmcgKHdoaWNoIGRpc3BsYXlzIGNvdW50cyBvZiB0aGUgcmVhc29ucyB0aGF0IHRoZQorcmN1X3BlbmRpbmcoKSBmdW5jdGlvbiBkZWNpZGVkIHRoYXQgdGhlcmUgd2FzIGNvcmUgUkNVIHdvcmsgdG8gZG8pLgogCiBUaGUgb3V0cHV0IG9mICJjYXQgcmN1L3JjdWRhdGEiIGxvb2tzIGFzIGZvbGxvd3M6CiAKQEAgLTEzMCw3ICsxMzQsOCBAQAogCWJlZW4gcmVnaXN0ZXJlZCBpbiBhYnNlbmNlIG9mIENQVS1ob3RwbHVnIGFjdGl2aXR5LgogCiBvCSJjbyIgaXMgdGhlIG51bWJlciBvZiBSQ1UgY2FsbGJhY2tzIHRoYXQgaGF2ZSBiZWVuIG9ycGhhbmVkIGR1ZSB0bwotCXRoaXMgQ1BVIGdvaW5nIG9mZmxpbmUuCisJdGhpcyBDUFUgZ29pbmcgb2ZmbGluZS4gIFRoZXNlIG9ycGhhbmVkIGNhbGxiYWNrcyBoYXZlIGJlZW4gbW92ZWQKKwl0byBhbiBhcmJpdHJhcmlseSBjaG9zZW4gb25saW5lIENQVS4KIAogbwkiY2EiIGlzIHRoZSBudW1iZXIgb2YgUkNVIGNhbGxiYWNrcyB0aGF0IGhhdmUgYmVlbiBhZG9wdGVkIGR1ZSB0bwogCW90aGVyIENQVXMgZ29pbmcgb2ZmbGluZS4gIE5vdGUgdGhhdCBjaStjby1jYStxbCBpcyB0aGUgbnVtYmVyIG9mCkBAIC0xNjgsMTIgKzE3MywxMiBAQAogCiBUaGUgb3V0cHV0IG9mICJjYXQgcmN1L3JjdWhpZXIiIGxvb2tzIGFzIGZvbGxvd3MsIHdpdGggdmVyeSBsb25nIGxpbmVzOgogCi1jPTY5MDIgZz02OTAzIHM9MiBqZnE9MyBqPTcyYzcgbmZxcz0xMzE0Mi9uZnFzbmc9MCgxMzE0MikgZnFsaD02IG9xbGVuPTAKK2M9NjkwMiBnPTY5MDMgcz0yIGpmcT0zIGo9NzJjNyBuZnFzPTEzMTQyL25mcXNuZz0wKDEzMTQyKSBmcWxoPTYKIDEvMSAuPi4gMDoxMjcgXjAgICAgCiAzLzMgLj4uIDA6MzUgXjAgICAgMC8wIC4+LiAzNjo3MSBeMSAgICAwLzAgLj4uIDcyOjEwNyBeMiAgICAwLzAgLj4uIDEwODoxMjcgXjMgICAgCiAzLzNmIC4+LiAwOjUgXjAgICAgMi8zIC4+LiA2OjExIF4xICAgIDAvMCAuPi4gMTI6MTcgXjIgICAgMC8wIC4+LiAxODoyMyBeMyAgICAwLzAgLj4uIDI0OjI5IF40ICAgIDAvMCAuPi4gMzA6MzUgXjUgICAgMC8wIC4+LiAzNjo0MSBeMCAgICAwLzAgLj4uIDQyOjQ3IF4xICAgIDAvMCAuPi4gNDg6NTMgXjIgICAgMC8wIC4+LiA1NDo1OSBeMyAgICAwLzAgLj4uIDYwOjY1IF40ICAgIDAvMCAuPi4gNjY6NzEgXjUgICAgMC8wIC4+LiA3Mjo3NyBeMCAgICAwLzAgLj4uIDc4OjgzIF4xICAgIDAvMCAuPi4gODQ6ODkgXjIgICAgMC8wIC4+LiA5MDo5NSBeMyAgICAwLzAgLj4uIDk2OjEwMSBeNCAgICAwLzAgLj4uIDEwMjoxMDcgXjUgICAgMC8wIC4+LiAxMDg6MTEzIF4wICAgIDAvMCAuPi4gMTE0OjExOSBeMSAgICAwLzAgLj4uIDEyMDoxMjUgXjIgICAgMC8wIC4+LiAxMjY6MTI3IF4zICAgIAogcmN1X2JoOgotYz0tMjI2IGc9LTIyNiBzPTEgamZxPS01NzAxIGo9NzJjNyBuZnFzPTg4L25mcXNuZz0wKDg4KSBmcWxoPTAgb3FsZW49MAorYz0tMjI2IGc9LTIyNiBzPTEgamZxPS01NzAxIGo9NzJjNyBuZnFzPTg4L25mcXNuZz0wKDg4KSBmcWxoPTAKIDAvMSAuPi4gMDoxMjcgXjAgICAgCiAwLzMgLj4uIDA6MzUgXjAgICAgMC8wIC4+LiAzNjo3MSBeMSAgICAwLzAgLj4uIDcyOjEwNyBeMiAgICAwLzAgLj4uIDEwODoxMjcgXjMgICAgCiAwLzNmIC4+LiAwOjUgXjAgICAgMC8zIC4+LiA2OjExIF4xICAgIDAvMCAuPi4gMTI6MTcgXjIgICAgMC8wIC4+LiAxODoyMyBeMyAgICAwLzAgLj4uIDI0OjI5IF40ICAgIDAvMCAuPi4gMzA6MzUgXjUgICAgMC8wIC4+LiAzNjo0MSBeMCAgICAwLzAgLj4uIDQyOjQ3IF4xICAgIDAvMCAuPi4gNDg6NTMgXjIgICAgMC8wIC4+LiA1NDo1OSBeMyAgICAwLzAgLj4uIDYwOjY1IF40ICAgIDAvMCAuPi4gNjY6NzEgXjUgICAgMC8wIC4+LiA3Mjo3NyBeMCAgICAwLzAgLj4uIDc4OjgzIF4xICAgIDAvMCAuPi4gODQ6ODkgXjIgICAgMC8wIC4+LiA5MDo5NSBeMyAgICAwLzAgLj4uIDk2OjEwMSBeNCAgICAwLzAgLj4uIDEwMjoxMDcgXjUgICAgMC8wIC4+LiAxMDg6MTEzIF4wICAgIDAvMCAuPi4gMTE0OjExOSBeMSAgICAwLzAgLj4uIDEyMDoxMjUgXjIgICAgMC8wIC4+LiAxMjY6MTI3IF4zCkBAIC0yMTIsMTEgKzIxNyw2IEBACiAJZXhpdGVkIGltbWVkaWF0ZWx5ICh3aXRob3V0IGV2ZW4gYmVpbmcgY291bnRlZCBpbiBuZnFzIGFib3ZlKQogCWR1ZSB0byBjb250ZW50aW9uIG9uIC0+ZnFzbG9jay4KIAotbwkib3FsZW4iIGlzIHRoZSBudW1iZXIgb2YgY2FsbGJhY2tzIG9uIHRoZSAib3JwaGFuIiBjYWxsYmFjawotCWxpc3QuICBSQ1UgY2FsbGJhY2tzIGFyZSBwbGFjZWQgb24gdGhpcyBsaXN0IGJ5IENQVXMgZ29pbmcKLQlvZmZsaW5lLCBhbmQgYXJlICJhZG9wdGVkIiBlaXRoZXIgYnkgdGhlIENQVSBoZWxwaW5nIHRoZSBvdXRnb2luZwotCUNQVSBvciBieSB0aGUgbmV4dCByY3VfYmFycmllciooKSBjYWxsLCB3aGljaGV2ZXIgY29tZXMgZmlyc3QuCi0KIG8JRWFjaCBlbGVtZW50IG9mIHRoZSBmb3JtICIxLzEgMDoxMjcgXjAiIHJlcHJlc2VudHMgb25lIHN0cnVjdAogCXJjdV9ub2RlLiAgRWFjaCBsaW5lIHJlcHJlc2VudHMgb25lIGxldmVsIG9mIHRoZSBoaWVyYXJjaHksIGZyb20KIAlyb290IHRvIGxlYXZlcy4gIEl0IGlzIGJlc3QgdG8gdGhpbmsgb2YgdGhlIHJjdV9kYXRhIHN0cnVjdHVyZXMKQEAgLTMyNiwzICszMjYsMTE1IEBACiAJcmVhZGVycyB3aWxsIG5vdGUgdGhhdCB0aGUgcmN1ICJubiIgbnVtYmVyIGZvciBhIGdpdmVuIENQVSB2ZXJ5CiAJY2xvc2VseSBtYXRjaGVzIHRoZSByY3VfYmggIm5wIiBudW1iZXIgZm9yIHRoYXQgc2FtZSBDUFUuICBUaGlzCiAJaXMgZHVlIHRvIHNob3J0LWNpcmN1aXQgZXZhbHVhdGlvbiBpbiByY3VfcGVuZGluZygpLgorCisKK0NPTkZJR19USU5ZX1JDVSBhbmQgQ09ORklHX1RJTllfUFJFRU1QVF9SQ1UgZGVidWdmcyBGaWxlcyBhbmQgRm9ybWF0cworCitUaGVzZSBpbXBsZW1lbnRhdGlvbnMgb2YgUkNVIHByb3ZpZGVzIGEgc2luZ2xlIGRlYnVnZnMgZmlsZSB1bmRlciB0aGUKK3RvcC1sZXZlbCBkaXJlY3RvcnkgUkNVLCBuYW1lbHkgcmN1L3JjdWRhdGEsIHdoaWNoIGRpc3BsYXlzIGZpZWxkcyBpbgorcmN1X2JoX2N0cmxibGssIHJjdV9zY2hlZF9jdHJsYmxrIGFuZCwgZm9yIENPTkZJR19USU5ZX1BSRUVNUFRfUkNVLAorcmN1X3ByZWVtcHRfY3RybGJsay4KKworVGhlIG91dHB1dCBvZiAiY2F0IHJjdS9yY3VkYXRhIiBpcyBhcyBmb2xsb3dzOgorCityY3VfcHJlZW1wdDogcWxlbj0yNCBncD0xMDk3NjY5IGcxOTcvcDE5Ny9jMTk3IHRhc2tzPS4uLgorICAgICAgICAgICAgIHR0Yj0uIGJ0Zz1ubyBudGI9MTg0IG5lYj0wIG5uYj0xODMgaj0wMWY3IGJ0PTAyNzQKKyAgICAgICAgICAgICBub3JtYWwgYmFsazogbnQ9MTA5NzY2OSBndD0wIGJ0PTM3MSBiPTAgbnk9MjUwNzMzNzggbm9zPTAKKyAgICAgICAgICAgICBleHAgYmFsazogYnQ9MCBub3M9MAorcmN1X3NjaGVkOiBxbGVuOiAwCityY3VfYmg6IHFsZW46IDAKKworVGhpcyBpcyBzcGxpdCBpbnRvIHJjdV9wcmVlbXB0LCByY3Vfc2NoZWQsIGFuZCByY3VfYmggc2VjdGlvbnMsIHdpdGggdGhlCityY3VfcHJlZW1wdCBzZWN0aW9uIGFwcGVhcmluZyBvbmx5IGluIENPTkZJR19USU5ZX1BSRUVNUFRfUkNVIGJ1aWxkcy4KK1RoZSBsYXN0IHRocmVlIGxpbmVzIG9mIHRoZSByY3VfcHJlZW1wdCBzZWN0aW9uIGFwcGVhciBvbmx5IGluCitDT05GSUdfUkNVX0JPT1NUIGtlcm5lbCBidWlsZHMuICBUaGUgZmllbGRzIGFyZSBhcyBmb2xsb3dzOgorCitvCSJxbGVuIiBpcyB0aGUgbnVtYmVyIG9mIFJDVSBjYWxsYmFja3MgY3VycmVudGx5IHdhaXRpbmcgZWl0aGVyCisJZm9yIGFuIFJDVSBncmFjZSBwZXJpb2Qgb3Igd2FpdGluZyB0byBiZSBpbnZva2VkLiAgVGhpcyBpcyB0aGUKKwlvbmx5IGZpZWxkIHByZXNlbnQgZm9yIHJjdV9zY2hlZCBhbmQgcmN1X2JoLCBkdWUgdG8gdGhlCisJc2hvcnQtY2lyY3VpdGluZyBvZiBncmFjZSBwZXJpb2QgaW4gdGhvc2UgdHdvIGNhc2VzLgorCitvCSJncCIgaXMgdGhlIG51bWJlciBvZiBncmFjZSBwZXJpb2RzIHRoYXQgaGF2ZSBjb21wbGV0ZWQuCisKK28JImcxOTcvcDE5Ny9jMTk3IiBkaXNwbGF5cyB0aGUgZ3JhY2UtcGVyaW9kIHN0YXRlLCB3aXRoIHRoZQorCSJnIiBudW1iZXIgYmVpbmcgdGhlIG51bWJlciBvZiBncmFjZSBwZXJpb2RzIHRoYXQgaGF2ZSBzdGFydGVkCisJKG1vZCAyNTYpLCB0aGUgInAiIG51bWJlciBiZWluZyB0aGUgbnVtYmVyIG9mIGdyYWNlIHBlcmlvZHMKKwl0aGF0IHRoZSBDUFUgaGFzIHJlc3BvbmRlZCB0byAoYWxzbyBtb2QgMjU2KSwgYW5kIHRoZSAiYyIKKwludW1iZXIgYmVpbmcgdGhlIG51bWJlciBvZiBncmFjZSBwZXJpb2RzIHRoYXQgaGF2ZSBjb21wbGV0ZWQKKwkob25jZSBhZ2FpbiBtb2RlIDI1NikuCisKKwlXaHkgaGF2ZSBib3RoICJncCIgYW5kICJnIj8gIEJlY2F1c2UgdGhlIGRhdGEgZmxvd2luZyBpbnRvCisJImdwIiBpcyBvbmx5IHByZXNlbnQgaW4gYSBDT05GSUdfUkNVX1RSQUNFIGtlcm5lbC4KKworbwkidGFza3MiIGlzIGEgc2V0IG9mIGJpdHMuICBUaGUgZmlyc3QgYml0IGlzICJUIiBpZiB0aGVyZSBhcmUKKwljdXJyZW50bHkgdGFza3MgdGhhdCBoYXZlIHJlY2VudGx5IGJsb2NrZWQgd2l0aGluIGFuIFJDVQorCXJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLCB0aGUgc2Vjb25kIGJpdCBpcyAiTiIgaWYgYW55IG9mIHRoZQorCWFmb3JlbWVudGlvbmVkIHRhc2tzIGFyZSBibG9ja2luZyB0aGUgY3VycmVudCBSQ1UgZ3JhY2UgcGVyaW9kLAorCWFuZCB0aGUgdGhpcmQgYml0IGlzICJFIiBpZiBhbnkgb2YgdGhlIGFmb3JlbWVudGlvbmVkIHRhc2tzIGFyZQorCWJsb2NraW5nIHRoZSBjdXJyZW50IGV4cGVkaXRlZCBncmFjZSBwZXJpb2QuICBFYWNoIGJpdCBpcyAiLiIKKwlpZiB0aGUgY29ycmVzcG9uZGluZyBjb25kaXRpb24gZG9lcyBub3QgaG9sZC4KKworbwkidHRiIiBpcyBhIHNpbmdsZSBiaXQuICBJdCBpcyAiQiIgaWYgYW55IG9mIHRoZSBibG9ja2VkIHRhc2tzCisJbmVlZCB0byBiZSBwcmlvcml0eSBib29zdGVkIGFuZCAiLiIgb3RoZXJ3aXNlLgorCitvCSJidGciIGluZGljYXRlcyB3aGV0aGVyIGJvb3N0aW5nIGhhcyBiZWVuIGNhcnJpZWQgb3V0IGR1cmluZworCXRoZSBjdXJyZW50IGdyYWNlIHBlcmlvZCwgd2l0aCAiZXhwIiBpbmRpY2F0aW5nIHRoYXQgYm9vc3RpbmcKKwlpcyBpbiBwcm9ncmVzcyBmb3IgYW4gZXhwZWRpdGVkIGdyYWNlIHBlcmlvZCwgIm5vIiBpbmRpY2F0aW5nCisJdGhhdCBib29zdGluZyBoYXMgbm90IHlldCBzdGFydGVkIGZvciBhIG5vcm1hbCBncmFjZSBwZXJpb2QsCisJImJlZ3VuIiBpbmRpY2F0aW5nIHRoYXQgYm9vc3RpbmcgaGFzIGJlYnVnIGZvciBhIG5vcm1hbCBncmFjZQorCXBlcmlvZCwgYW5kICJkb25lIiBpbmRpY2F0aW5nIHRoYXQgYm9vc3RpbmcgaGFzIGNvbXBsZXRlZCBmb3IKKwlhIG5vcm1hbCBncmFjZSBwZXJpb2QuCisKK28JIm50YiIgaXMgdGhlIHRvdGFsIG51bWJlciBvZiB0YXNrcyBzdWJqZWN0ZWQgdG8gUkNVIHByaW9yaXR5IGJvb3N0aW5nCisJcGVyaW9kcyBzaW5jZSBib290LgorCitvCSJuZWIiIGlzIHRoZSBudW1iZXIgb2YgZXhwZWRpdGVkIGdyYWNlIHBlcmlvZHMgdGhhdCBoYXZlIGhhZAorCXRvIHJlc29ydCB0byBSQ1UgcHJpb3JpdHkgYm9vc3Rpbmcgc2luY2UgYm9vdC4KKworbwkibm5iIiBpcyB0aGUgbnVtYmVyIG9mIG5vcm1hbCBncmFjZSBwZXJpb2RzIHRoYXQgaGF2ZSBoYWQKKwl0byByZXNvcnQgdG8gUkNVIHByaW9yaXR5IGJvb3N0aW5nIHNpbmNlIGJvb3QuCisKK28JImoiIGlzIHRoZSBsb3ctb3JkZXIgMTIgYml0cyBvZiB0aGUgamlmZmllcyBjb3VudGVyIGluIGhleGFkZWNpbWFsLgorCitvCSJidCIgaXMgdGhlIGxvdy1vcmRlciAxMiBiaXRzIG9mIHRoZSB2YWx1ZSB0aGF0IHRoZSBqaWZmaWVzIGNvdW50ZXIKKwl3aWxsIGhhdmUgYXQgdGhlIG5leHQgdGltZSB0aGF0IGJvb3N0aW5nIGlzIHNjaGVkdWxlZCB0byBiZWdpbi4KKworbwlJbiB0aGUgbGluZSBiZWdpbm5pbmcgd2l0aCAibm9ybWFsIGJhbGsiLCB0aGUgZmllbGRzIGFyZSBhcyBmb2xsb3dzOgorCisJbwkibnQiIGlzIHRoZSBudW1iZXIgb2YgdGltZXMgdGhhdCB0aGUgc3lzdGVtIGJhbGtlZCBmcm9tCisJCWJvb3N0aW5nIGJlY2F1c2UgdGhlcmUgd2VyZSBubyBibG9ja2VkIHRhc2tzIHRvIGJvb3N0LgorCQlOb3RlIHRoYXQgdGhlIHN5c3RlbSB3aWxsIGJhbGsgZnJvbSBib29zdGluZyBldmVuIGlmIHRoZQorCQlncmFjZSBwZXJpb2QgaXMgb3ZlcmR1ZSB3aGVuIHRoZSBjdXJyZW50bHkgcnVubmluZyB0YXNrCisJCWlzIGxvb3Bpbmcgd2l0aGluIGFuIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbi4KKwkJVGhlcmUgaXMgbm8gcG9pbnQgaW4gYm9vc3RpbmcgaW4gdGhpcyBjYXNlLCBiZWNhdXNlCisJCWJvb3N0aW5nIGEgcnVubmluZyB0YXNrIHdvbid0IG1ha2UgaXQgcnVuIGFueSBmYXN0ZXIuCisKKwlvCSJndCIgaXMgdGhlIG51bWJlciBvZiB0aW1lcyB0aGF0IHRoZSBzeXN0ZW0gYmFsa2VkCisJCWZyb20gYm9vc3RpbmcgYmVjYXVzZSwgYWx0aG91Z2ggdGhlcmUgd2VyZSBibG9ja2VkIHRhc2tzLAorCQlub25lIG9mIHRoZW0gd2VyZSBwcmV2ZW50aW5nIHRoZSBjdXJyZW50IGdyYWNlIHBlcmlvZAorCQlmcm9tIGNvbXBsZXRpbmcuCisKKwlvCSJidCIgaXMgdGhlIG51bWJlciBvZiB0aW1lcyB0aGF0IHRoZSBzeXN0ZW0gYmFsa2VkCisJCWZyb20gYm9vc3RpbmcgYmVjYXVzZSBib29zdGluZyB3YXMgYWxyZWFkeSBpbiBwcm9ncmVzcy4KKworCW8JImIiIGlzIHRoZSBudW1iZXIgb2YgdGltZXMgdGhhdCB0aGUgc3lzdGVtIGJhbGtlZCBmcm9tCisJCWJvb3N0aW5nIGJlY2F1c2UgYm9vc3RpbmcgaGFkIGFscmVhZHkgY29tcGxldGVkIGZvcgorCQl0aGUgZ3JhY2UgcGVyaW9kIGluIHF1ZXN0aW9uLgorCisJbwkibnkiIGlzIHRoZSBudW1iZXIgb2YgdGltZXMgdGhhdCB0aGUgc3lzdGVtIGJhbGtlZCBmcm9tCisJCWJvb3N0aW5nIGJlY2F1c2UgaXQgd2FzIG5vdCB5ZXQgdGltZSB0byBzdGFydCBib29zdGluZworCQl0aGUgZ3JhY2UgcGVyaW9kIGluIHF1ZXN0aW9uLgorCisJbwkibm9zIiBpcyB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoYXQgdGhlIHN5c3RlbSBiYWxrZWQgZnJvbQorCQlib29zdGluZyBmb3IgaW5leHBsaWNhYmxlICgibm90IG90aGVyd2lzZSBzcGVjaWZpZWQiKQorCQlyZWFzb25zLiAgVGhpcyBjYW4gYWN0dWFsbHkgaGFwcGVuIGR1ZSB0byByYWNlcyBpbnZvbHZpbmcKKwkJaW5jcmVtZW50cyBvZiB0aGUgamlmZmllcyBjb3VudGVyLgorCitvCUluIHRoZSBsaW5lIGJlZ2lubmluZyB3aXRoICJleHAgYmFsayIsIHRoZSBmaWVsZHMgYXJlIGFzIGZvbGxvd3M6CisKKwlvCSJidCIgaXMgdGhlIG51bWJlciBvZiB0aW1lcyB0aGF0IHRoZSBzeXN0ZW0gYmFsa2VkIGZyb20KKwkJYm9vc3RpbmcgYmVjYXVzZSB0aGVyZSB3ZXJlIG5vIGJsb2NrZWQgdGFza3MgdG8gYm9vc3QuCisKKwlvCSJub3MiIGlzIHRoZSBudW1iZXIgb2YgdGltZXMgdGhhdCB0aGUgc3lzdGVtIGJhbGtlZCBmcm9tCisJCSBib29zdGluZyBmb3IgaW5leHBsaWNhYmxlICgibm90IG90aGVyd2lzZSBzcGVjaWZpZWQiKQorCQkgcmVhc29ucy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXJtLzAwLUlOREVYIGIvRG9jdW1lbnRhdGlvbi9hcm0vMDAtSU5ERVgKaW5kZXggZWNmN2QwNC4uOTFjMjRhMSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hcm0vMDAtSU5ERVgKKysrIGIvRG9jdW1lbnRhdGlvbi9hcm0vMDAtSU5ERVgKQEAgLTM0LDMgKzM0LDUgQEAKIAktIGRlc2NyaXB0aW9uIG9mIHRoZSB2aXJ0dWFsIG1lbW9yeSBsYXlvdXQKIG53ZnBlLwogCS0gTldGUEUgZmxvYXRpbmcgcG9pbnQgZW11bGF0b3IgZG9jdW1lbnRhdGlvbgorc3dwX2VtdWxhdGlvbgorCS0gU1dQL1NXUEIgZW11bGF0aW9uIGhhbmRsZXIvbG9nZ2luZyBkZXNjcmlwdGlvbgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcm0vT01BUC9vbWFwX3BtIGIvRG9jdW1lbnRhdGlvbi9hcm0vT01BUC9vbWFwX3BtCmluZGV4IDUzODk0NDAuLjkwMTJiYjAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYXJtL09NQVAvb21hcF9wbQorKysgYi9Eb2N1bWVudGF0aW9uL2FybS9PTUFQL29tYXBfcG0KQEAgLTEyNywzICsxMjcsMjggQEAKIDEwLiAoKnBkYXRhLT5jcHVfc2V0X2ZyZXEpKHVuc2lnbmVkIGxvbmcgZikKIAogMTEuICgqcGRhdGEtPmNwdV9nZXRfZnJlcSkodm9pZCkKKworQ3VzdG9taXppbmcgT1BQIGZvciBwbGF0Zm9ybQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PQorRGVmaW5pbmcgQ09ORklHX1BNIHNob3VsZCBlbmFibGUgT1BQIGxheWVyIGZvciB0aGUgc2lsaWNvbgorYW5kIHRoZSByZWdpc3RyYXRpb24gb2YgT1BQIHRhYmxlIHNob3VsZCB0YWtlIHBsYWNlIGF1dG9tYXRpY2FsbHkuCitIb3dldmVyLCBpbiBzcGVjaWFsIGNhc2VzLCB0aGUgZGVmYXVsdCBPUFAgdGFibGUgbWF5IG5lZWQgdG8gYmUKK3R3ZWFrZWQsIGZvciBlLmcuOgorICogZW5hYmxlIGRlZmF1bHQgT1BQcyB3aGljaCBhcmUgZGlzYWJsZWQgYnkgZGVmYXVsdCwgYnV0IHdoaWNoCisgICBjb3VsZCBiZSBlbmFibGVkIG9uIGEgcGxhdGZvcm0KKyAqIERpc2FibGUgYW4gdW5zdXBwb3J0ZWQgT1BQIG9uIHRoZSBwbGF0Zm9ybQorICogRGVmaW5lIGFuZCBhZGQgYSBjdXN0b20gb3BwIHRhYmxlIGVudHJ5CitpbiB0aGVzZSBjYXNlcywgdGhlIGJvYXJkIGZpbGUgbmVlZHMgdG8gZG8gYWRkaXRpb25hbCBzdGVwcyBhcyBmb2xsb3dzOgorYXJjaC9hcm0vbWFjaC1vbWFweC9ib2FyZC14eXouYworCSNpbmNsdWRlICJwbS5oIgorCS4uLi4KKwlzdGF0aWMgdm9pZCBfX2luaXQgb21hcF94eXpfaW5pdF9pcnEodm9pZCkKKwl7CisJCS4uLi4KKwkJLyogSW5pdGlhbGl6ZSB0aGUgZGVmYXVsdCB0YWJsZSAqLworCQlvbWFweF9vcHBfaW5pdCgpOworCQkvKiBEbyBjdXN0b21pemF0aW9uIHRvIHRoZSBkZWZhdWx0cyAqLworCQkuLi4uCisJfQorTk9URTogb21hcHhfb3BwX2luaXQgd2lsbCBiZSBvbWFwM19vcHBfaW5pdCBvciBhcyByZXF1aXJlZAorYmFzZWQgb24gdGhlIG9tYXAgZmFtaWx5LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcm0vc3dwX2VtdWxhdGlvbiBiL0RvY3VtZW50YXRpb24vYXJtL3N3cF9lbXVsYXRpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY5MDNkMgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYXJtL3N3cF9lbXVsYXRpb24KQEAgLTAsMCArMSwyNyBAQAorU29mdHdhcmUgZW11bGF0aW9uIG9mIGRlcHJlY2F0ZWQgU1dQIGluc3RydWN0aW9uIChDT05GSUdfU1dQX0VNVUxBVEUpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQVJNdjYgYXJjaGl0ZWN0dXJlIGRlcHJlY2F0ZXMgdXNlIG9mIHRoZSBTV1AvU1dQQiBpbnN0cnVjdGlvbnMsIGFuZCByZWNvbW1lZHMKK21vdmluZyB0byB0aGUgbG9hZC1sb2NrZWQvc3RvcmUtY29uZGl0aW9uYWwgaW5zdHJ1Y3Rpb25zIExEUkVYIGFuZCBTVFJFWC4KKworQVJNdjcgbXVsdGlwcm9jZXNzaW5nIGV4dGVuc2lvbnMgaW50cm9kdWNlIHRoZSBhYmlsaXR5IHRvIGRpc2FibGUgdGhlc2UKK2luc3RydWN0aW9ucywgdHJpZ2dlcmluZyBhbiB1bmRlZmluZWQgaW5zdHJ1Y3Rpb24gZXhjZXB0aW9uIHdoZW4gZXhlY3V0ZWQuCitUcmFwcGVkIGluc3RydWN0aW9ucyBhcmUgZW11bGF0ZWQgdXNpbmcgYW4gTERSRVgvU1RSRVggb3IgTERSRVhCL1NUUkVYQgorc2VxdWVuY2UuIElmIGEgbWVtb3J5IGFjY2VzcyBmYXVsdCAoYW4gYWJvcnQpIG9jY3VycywgYSBzZWdtZW50YXRpb24gZmF1bHQgaXMKK3NpZ25hbGxlZCB0byB0aGUgdHJpZ2dlcmluZyBwcm9jZXNzLgorCisvcHJvYy9jcHUvc3dwX2VtdWxhdGlvbiBob2xkcyBzb21lIHN0YXRpc3RpY3MvaW5mb3JtYXRpb24sIGluY2x1ZGluZyB0aGUgUElEIG9mCit0aGUgbGFzdCBwcm9jZXNzIHRvIHRyaWdnZXIgdGhlIGVtdWxhdGlvbiB0byBiZSBpbnZvY2F0ZWQuIEZvciBleGFtcGxlOgorLS0tCitFbXVsYXRlZCBTV1A6CQkxMgorRW11bGF0ZWQgU1dQQjoJCTAKK0Fib3J0ZWQgU1dQe0J9OgkJMQorTGFzdCBwcm9jZXNzOgkJMzE0CistLS0KKworTk9URTogd2hlbiBhY2Nlc3NpbmcgdW5jYWNoZWQgc2hhcmVkIHJlZ2lvbnMsIExEUkVYL1NUUkVYIHJlbHkgb24gYW4gZXh0ZXJuYWwKK3RyYW5zYWN0aW9uIG1vbml0b3JpbmcgYmxvY2sgY2FsbGVkIGEgZ2xvYmFsIG1vbml0b3IgdG8gbWFpbnRhaW4gdXBkYXRlCithdG9taWNpdHkuIElmIHlvdXIgc3lzdGVtIGRvZXMgbm90IGltcGxlbWVudCBhIGdsb2JhbCBtb25pdG9yLCB0aGlzIG9wdGlvbiBjYW4KK2NhdXNlIHByb2dyYW1zIHRoYXQgcGVyZm9ybSBTV1Agb3BlcmF0aW9ucyB0byB1bmNhY2hlZCBtZW1vcnkgdG8gZGVhZGxvY2ssIGFzCit0aGUgU1RSRVggb3BlcmF0aW9uIHdpbGwgYWx3YXlzIGZhaWwuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29jY2luZWxsZS50eHQgYi9Eb2N1bWVudGF0aW9uL2NvY2NpbmVsbGUudHh0CmluZGV4IDRhMjc2ZWEuLjk2YjY5MDMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY29jY2luZWxsZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9jb2NjaW5lbGxlLnR4dApAQCAtMzYsNiArMzYsMTAgQEAKIAogICAgICAgICBzdWRvIG1ha2UgaW5zdGFsbAogCitUaGUgc2VtYW50aWMgcGF0Y2hlcyBpbiB0aGUga2VybmVsIHdpbGwgd29yayBiZXN0IHdpdGggQ29jY2luZWxsZSB2ZXJzaW9uCiswLjIuNCBvciBsYXRlci4gIFVzaW5nIGVhcmxpZXIgdmVyc2lvbnMgbWF5IGluY3VyIHNvbWUgcGFyc2UgZXJyb3JzIGluIHRoZQorc2VtYW50aWMgcGF0Y2ggY29kZSwgYnV0IGFueSByZXN1bHRzIHRoYXQgYXJlIG9idGFpbmVkIHNob3VsZCBzdGlsbCBiZQorY29ycmVjdC4KIAogIFVzaW5nIENvY2NpbmVsbGUgb24gdGhlIExpbnV4IGtlcm5lbAogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZG9udGRpZmYgYi9Eb2N1bWVudGF0aW9uL2RvbnRkaWZmCmluZGV4IGQ5YmNmZmQuLjQ3MGQzZGIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZG9udGRpZmYKKysrIGIvRG9jdW1lbnRhdGlvbi9kb250ZGlmZgpAQCAtNjIsNiArNjIsMTAgQEAKIGFpYzcqc2VxLmgqCiBhaWNhc20KIGFpY2RiLmgqCithbHRpdmVjMS5jCithbHRpdmVjMi5jCithbHRpdmVjNC5jCithbHRpdmVjOC5jCiBhc20tb2Zmc2V0cy5oCiBhc21fb2Zmc2V0cy5oCiBhdXRvY29uZi5oKgpAQCAtNzYsNiArODAsNyBAQAogYnVpbGQKIGJ2bWxpbnV4CiBiekltYWdlKgorY2FwZmxhZ3MuYwogY2xhc3NsaXN0LmgqCiBjb21wKi5sb2cKIGNvbXBpbGUuaCoKQEAgLTk0LDYgKzk5LDcgQEAKIGRvY3Byb2MKIGVsZjJlY29mZgogZWxmY29uZmlnLmgqCitldmVyZ3JlZW5fcmVnX3NhZmUuaAogZml4ZGVwCiBmbGFzay5oCiBmb3JlMjAwZV9ta2Zpcm0KQEAgLTEwOCw5ICsxMTQsMTYgQEAKICpfZ3JheTI1Ni5jCiBpaGV4MmZ3CiBpa2NvbmZpZy5oKgoraW5hdC10YWJsZXMuYwogaW5pdHJhbWZzX2RhdGEuY3BpbwogaW5pdHJhbWZzX2RhdGEuY3Bpby5negogaW5pdHJhbWZzX2xpc3QKK2ludDE2LmMKK2ludDEuYworaW50Mi5jCitpbnQzMi5jCitpbnQ0LmMKK2ludDguYwoga2FsbHN5bXMKIGtjb25maWcKIGtleXdvcmRzLmMKQEAgLTE0MCw2ICsxNTMsNyBAQAogbWt0YWJsZXMKIG1rdHJlZQogbW9kcG9zdAorbW9kdWxlcy5idWlsdGluCiBtb2R1bGVzLm9yZGVyCiBtb2R2ZXJzaW9ucy5oKgogbmNzY29wZS4qCkBAIC0xNTMsMTQgKzE2NywyMyBAQAogcGNhMjAwZV9lY2QuYmluMgogcGlnZ3kuZ3oKIHBpZ2d5YmFjaworcGlnZ3kuUwogcG5tdG9sb2dvCiBwcGNfZGVmcy5oKgogcHNzX2Jvb3QuaAogcWNvbmYKK3IxMDBfcmVnX3NhZmUuaAorcjIwMF9yZWdfc2FmZS5oCityMzAwX3JlZ19zYWZlLmgKK3I0MjBfcmVnX3NhZmUuaAorcjYwMF9yZWdfc2FmZS5oCiByYWlkNmFsdGl2ZWMqLmMKIHJhaWQ2aW50Ki5jCiByYWlkNnRhYmxlcy5jCiByZWxvY3MKK3JuNTBfcmVnX3NhZmUuaAorcnM2MDBfcmVnX3NhZmUuaAorcnY1MTVfcmVnX3NhZmUuaAogc2VyaWVzCiBzZXR1cAogc2V0dXAuYmluCkBAIC0xNjksNiArMTkyLDcgQEAKIHNtX3RibCoKIHNwbGl0LWluY2x1ZGUKIHN5c2NhbGx0YWIuaAordGFibGVzLmMKIHRhZ3MKIHRmdHBib290LmltZwogdGltZWNvbnN0LmgKQEAgLTE5MCw2ICsyMTQsNyBAQAogdm1saW51eC0qCiB2bWxpbnV4LmFvdXQKIHZtbGludXgubGRzCit2b2Zmc2V0LmgKIHZzeXNjYWxsLmxkcwogdnN5c2NhbGxfMzIubGRzCiB3YW54bGZ3LmluYwpAQCAtMjAwLDMgKzIyNSw0IEBACiB3YWtldXAubGRzCiB6SW1hZ2UqCiB6Y29uZi5oYXNoLmMKK3pvZmZzZXQuaApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kdmIvbG1lZG0wNC50eHQgYi9Eb2N1bWVudGF0aW9uL2R2Yi9sbWVkbTA0LnR4dAppbmRleCBlMTc1Nzg0Li42NDE4ODY1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2R2Yi9sbWVkbTA0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2R2Yi9sbWVkbTA0LnR4dApAQCAtNDYsNyArNDYsNyBAQAogT3RoZXIgTEcgZmlybXdhcmUgY2FuIGJlIGV4dHJhY3RlZCBtYW51YWxseSBmcm9tIFVTMjgwRC5zeXMKIG9ubHkgZm91bmQgaW4gd2luZG93cy9zeXN0ZW0zMi9kcml2ZXIuCiAKLWRkIGlmPVVTMjgwRC5zeXMgaWJzPTEgc2tpcD00MjYxNiBjb3VudD0zNjY4IG9mPWR2Yi11c2ItbG1lMjUxMC1sZy5mdworZGQgaWY9VVMyODBELnN5cyBpYnM9MSBza2lwPTQyMzYwIGNvdW50PTM5MjQgb2Y9ZHZiLXVzYi1sbWUyNTEwLWxnLmZ3CiAKIGZvciBETTA0IExNRTI1MTBDIChMRyBUdW5lcikKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VkbGZiL3VkbGZiLnR4dCBiL0RvY3VtZW50YXRpb24vZmIvdWRsZmIudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL3N0YWdpbmcvdWRsZmIvdWRsZmIudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2ZiL3VkbGZiLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0IGIvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CmluZGV4IDZjMmY1NWUuLjIyZjEwODEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKQEAgLTk3LDM2ICs5NywzOCBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotV2hhdDoJVmlkZW80TGludXggQVBJIDEgaW9jdGxzIGFuZCBmcm9tIFZpZGVvIGRldmljZXMuCi1XaGVuOglrZXJuZWwgMi42LjM4Ci1GaWxlczoJaW5jbHVkZS9saW51eC92aWRlb2Rldi5oCi1DaGVjazoJaW5jbHVkZS9saW51eC92aWRlb2Rldi5oCi1XaHk6CVY0TDEgQVAxIHdhcyByZXBsYWNlZCBieSBWNEwyIEFQSSBkdXJpbmcgbWlncmF0aW9uIGZyb20gMi40IHRvIDIuNgotCXNlcmllcy4gVGhlIG9sZCBBUEkgaGF2ZSBsb3RzIG9mIGRyYXdiYWNrcyBhbmQgZG9uJ3QgcHJvdmlkZSBlbm91Z2gKLQltZWFucyB0byB3b3JrIHdpdGggYWxsIHZpZGVvIGFuZCBhdWRpbyBzdGFuZGFyZHMuIFRoZSBuZXdlciBBUEkgaXMKLQlhbHJlYWR5IGF2YWlsYWJsZSBvbiB0aGUgbWFpbiBkcml2ZXJzIGFuZCBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkLgotCU5ld2VyIGRyaXZlcnMgc2hvdWxkIHVzZSB2NGxfY29tcGF0X3RyYW5zbGF0ZV9pb2N0bCBmdW5jdGlvbiB0byBoYW5kbGUKLQlvbGQgY2FsbHMsIHJlcGxhY2luZyB0byBuZXdlciBvbmVzLgotCURlY29kZXIgaW9jdHMgYXJlIHVzaW5nIGludGVybmFsbHkgdG8gYWxsb3cgdmlkZW8gZHJpdmVycyB0bwotCWNvbW11bmljYXRlIHdpdGggdmlkZW8gZGVjb2RlcnMuIFRoaXMgc2hvdWxkIGFsc28gYmUgaW1wcm92ZWQgdG8gYWxsb3cKLQlWNEwyIGNhbGxzIGJlaW5nIHRyYW5zbGF0ZWQgaW50byBjb21wYXRpYmxlIGludGVybmFsIGlvY3Rscy4KLQlDb21wYXRpYmlsaXR5IGlvY3RscyB3aWxsIGJlIHByb3ZpZGVkLCBmb3IgYSB3aGlsZSwgdmlhIAotCXY0bDEtY29tcGF0IG1vZHVsZS4gCi1XaG86CU1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkBpbmZyYWRlYWQub3JnPgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQogV2hhdDoJVmlkZW80TGludXggb2Jzb2xldGUgZHJpdmVycyB1c2luZyBWNEwxIEFQSQotV2hlbjoJa2VybmVsIDIuNi4zOAotRmlsZXM6CWRyaXZlcnMvc3RhZ2luZy9jcGlhLyogZHJpdmVycy9zdGFnaW5nL3N0cmFkaXMvKgotQ2hlY2s6CWRyaXZlcnMvc3RhZ2luZy9jcGlhL2NwaWEuYyBkcml2ZXJzL3N0YWdpbmcvc3RyYWRpcy9zdHJhZGlzLmMKK1doZW46CWtlcm5lbCAyLjYuMzkKK0ZpbGVzOglkcml2ZXJzL3N0YWdpbmcvc2U0MDEvKiBkcml2ZXJzL3N0YWdpbmcvdXNidmlkZW8vKgorQ2hlY2s6CWRyaXZlcnMvc3RhZ2luZy9zZTQwMS9zZTQwMS5jIGRyaXZlcnMvc3RhZ2luZy91c2J2aWRlby91c2J2aWRlby5jCiBXaHk6CVRoZXJlIGFyZSBzb21lIGRyaXZlcnMgc3RpbGwgdXNpbmcgVjRMMSBBUEksIGRlc3BpdGUgYWxsIGVmZm9ydHMgd2UndmUgZG9uZQogCXRvIG1pZ3JhdGUuIFRob3NlIGRyaXZlcnMgYXJlIGZvciBvYnNvbGV0ZSBoYXJkd2FyZSB0aGF0IHRoZSBvbGQgbWFpbnRhaW5lcgogCWRpZG4ndCBjYXJlIChvciBub3QgaGF2ZSB0aGUgaGFyZHdhcmUgYW55bW9yZSksIGFuZCB0aGF0IG5vIG90aGVyIGRldmVsb3BlcgogCWNvdWxkIGZpbmQgYW55IGhhcmR3YXJlIHRvIGJ1eS4gVGhleSBwcm9iYWJseSBoYXZlIG5vIHByYWN0aWNhbCB1c2FnZSB0b2RheSwKIAlhbmQgcGVvcGxlIHdpdGggc3VjaCBvbGQgaGFyZHdhcmUgY291bGQgcHJvYmFibHkga2VlcCB1c2luZyBhbiBvbGRlciB2ZXJzaW9uCi0Jb2YgdGhlIGtlcm5lbC4gVGhvc2UgZHJpdmVycyB3aWxsIGJlIG1vdmVkIHRvIHN0YWdpbmcgb24gMi42LjM3IGFuZCwgaWYgbm9ib2R5Ci0JY2FyZSBlbm91Z2ggdG8gcG9ydCBhbmQgdGVzdCB0aGVtIHdpdGggVjRMMiBBUEksIHRoZXknbGwgYmUgcmVtb3ZlZCBvbiAyLjYuMzguCisJb2YgdGhlIGtlcm5lbC4gVGhvc2UgZHJpdmVycyB3aWxsIGJlIG1vdmVkIHRvIHN0YWdpbmcgb24gMi42LjM4IGFuZCwgaWYgbm9ib2R5CisJY2FyZXMgZW5vdWdoIHRvIHBvcnQgYW5kIHRlc3QgdGhlbSB3aXRoIFY0TDIgQVBJLCB0aGV5J2xsIGJlIHJlbW92ZWQgb24gMi42LjM5LgorV2hvOglNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAaW5mcmFkZWFkLm9yZz4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doYXQ6CVZpZGVvNExpbnV4OiBSZW1vdmUgb2Jzb2xldGUgaW9jdGwncworV2hlbjoJa2VybmVsIDIuNi4zOQorRmlsZXM6CWluY2x1ZGUvbWVkaWEvdmlkZW9kZXYyLmgKK1doeToJU29tZSBpb2N0bCdzIHdlcmUgZGVmaW5lZCB3cm9uZyBvbiAyLjYuMiBhbmQgMi42LjYsIHVzaW5nIHRoZSB3cm9uZworCXR5cGUgb2YgUi9XIGFyZ3VtZW50cy4gVGhleSB3ZXJlIGZpeGVkLCBidXQgdGhlIG9sZCBpb2N0bCBuYW1lcyBhcmUKKwlzdGlsbCB0aGVyZSwgbWFpbnRhaW5lZCB0byBhdm9pZCBicmVha2luZyBiaW5hcnkgY29tcGF0aWJpbGl0eToKKwkgICNkZWZpbmUgVklESU9DX09WRVJMQVlfT0xEICAgCV9JT1dSKCdWJywgMTQsIGludCkKKwkgICNkZWZpbmUgVklESU9DX1NfUEFSTV9PTEQJX0lPVygnVicsIDIyLCBzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtKQorCSAgI2RlZmluZSBWSURJT0NfU19DVFJMX09MRAlfSU9XKCdWJywgMjgsIHN0cnVjdCB2NGwyX2NvbnRyb2wpCisJICAjZGVmaW5lIFZJRElPQ19HX0FVRElPX09MRAlfSU9XUignVicsIDMzLCBzdHJ1Y3QgdjRsMl9hdWRpbykKKwkgICNkZWZpbmUgVklESU9DX0dfQVVET1VUX09MRAlfSU9XUignVicsIDQ5LCBzdHJ1Y3QgdjRsMl9hdWRpb291dCkKKwkgICNkZWZpbmUgVklESU9DX0NST1BDQVBfT0xECV9JT1IoJ1YnLCA1OCwgc3RydWN0IHY0bDJfY3JvcGNhcCkKKwlUaGVyZSdzIG5vIHNlbnNlIG9uIHByZXNlcnZpbmcgdGhvc2UgZm9yZXZlciwgYXMgaXQgaXMgdmVyeSBkb3VidGZ1bAorCXRoYXQgc29tZW9uZSB3b3VsZCB0cnkgdG8gdXNlIGEgc3VjaCBvbGQgYmluYXJ5IHdpdGggYSBtb2Rlcm4ga2VybmVsLgorCVJlbW92aW5nIHRoZW0gd2lsbCBhbGxvdyB1cyB0byByZW1vdmUgc29tZSBtYWdpYyBkb25lIGF0IHRoZSBWNEwgaW9jdGwKKwloYW5kbGVyLgorCiBXaG86CU1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkBpbmZyYWRlYWQub3JnPgogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTU2NCwzICs1NjYsMTMgQEAKIFdobzoJSmVhbiBEZWx2YXJlIDxraGFsaUBsaW51eC1mci5vcmc+CiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hhdDoJY2FuY2VsX3JlYXJtaW5nX2RlbGF5ZWRfd29ya1txdWV1ZV0oKQorV2hlbjoJMi42LjM5CisKK1doeToJVGhlIGZ1bmN0aW9ucyBoYXZlIGJlZW4gc3VwZXJjZWRlZCBieSBjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoKQorCXF1aXRlIHNvbWUgdGltZSBhZ28uICBUaGUgY29udmVyc2lvbiBpcyB0cml2aWFsIGFuZCB0aGVyZSBpcyBubworCWluLWtlcm5lbCB1c2VyIGxlZnQuCitXaG86CVRlanVuIEhlbyA8dGpAa2VybmVsLm9yZz4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9Mb2NraW5nIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9Mb2NraW5nCmluZGV4IDMzZmEzZTUuLjk3N2Q4OTEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvTG9ja2luZworKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL0xvY2tpbmcKQEAgLTksMjIgKzksMjUgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGRlbnRyeV9vcGVyYXRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBwcm90b3R5cGVzOgotCWludCAoKmRfcmV2YWxpZGF0ZSkoc3RydWN0IGRlbnRyeSAqLCBpbnQpOwotCWludCAoKmRfaGFzaCkgKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IHFzdHIgKik7Ci0JaW50ICgqZF9jb21wYXJlKSAoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgcXN0ciAqLCBzdHJ1Y3QgcXN0ciAqKTsKKwlpbnQgKCpkX3JldmFsaWRhdGUpKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IG5hbWVpZGF0YSAqKTsKKwlpbnQgKCpkX2hhc2gpKGNvbnN0IHN0cnVjdCBkZW50cnkgKiwgY29uc3Qgc3RydWN0IGlub2RlICosCisJCQlzdHJ1Y3QgcXN0ciAqKTsKKwlpbnQgKCpkX2NvbXBhcmUpKGNvbnN0IHN0cnVjdCBkZW50cnkgKiwgY29uc3Qgc3RydWN0IGlub2RlICosCisJCQljb25zdCBzdHJ1Y3QgZGVudHJ5ICosIGNvbnN0IHN0cnVjdCBpbm9kZSAqLAorCQkJdW5zaWduZWQgaW50LCBjb25zdCBjaGFyICosIGNvbnN0IHN0cnVjdCBxc3RyICopOwogCWludCAoKmRfZGVsZXRlKShzdHJ1Y3QgZGVudHJ5ICopOwogCXZvaWQgKCpkX3JlbGVhc2UpKHN0cnVjdCBkZW50cnkgKik7CiAJdm9pZCAoKmRfaXB1dCkoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgaW5vZGUgKik7CiAJY2hhciAqKCpkX2RuYW1lKSgoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjaGFyICpidWZmZXIsIGludCBidWZsZW4pOwogCiBsb2NraW5nIHJ1bGVzOgotCQlkY2FjaGVfbG9jawlyZW5hbWVfbG9jawktPmRfbG9jawltYXkgYmxvY2sKLWRfcmV2YWxpZGF0ZToJbm8JCW5vCQlubwkJeWVzCi1kX2hhc2gJCW5vCQlubwkJbm8JCXllcwotZF9jb21wYXJlOglubwkJeWVzCQlubwkJbm8gCi1kX2RlbGV0ZToJeWVzCQlubwkJeWVzCQlubwotZF9yZWxlYXNlOglubwkJbm8JCW5vCQl5ZXMKLWRfaXB1dDoJCW5vCQlubwkJbm8JCXllcworCQlyZW5hbWVfbG9jawktPmRfbG9jawltYXkgYmxvY2sJcmN1LXdhbGsKK2RfcmV2YWxpZGF0ZToJbm8JCW5vCQl5ZXMgKHJlZi13YWxrKQltYXliZQorZF9oYXNoCQlubwkJbm8JCW5vCQltYXliZQorZF9jb21wYXJlOgl5ZXMJCW5vCQlubwkJbWF5YmUKK2RfZGVsZXRlOglubwkJeWVzCQlubwkJbm8KK2RfcmVsZWFzZToJbm8JCW5vCQl5ZXMJCW5vCitkX2lwdXQ6CQlubwkJbm8JCXllcwkJbm8KIGRfZG5hbWU6CW5vCQlubwkJbm8JCW5vCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBpbm9kZV9vcGVyYXRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKQEAgLTQ0LDggKzQ3LDggQEAKIAl2b2lkICogKCpmb2xsb3dfbGluaykgKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IG5hbWVpZGF0YSAqKTsKIAl2b2lkICgqcHV0X2xpbmspIChzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBuYW1laWRhdGEgKiwgdm9pZCAqKTsKIAl2b2lkICgqdHJ1bmNhdGUpIChzdHJ1Y3QgaW5vZGUgKik7Ci0JaW50ICgqcGVybWlzc2lvbikgKHN0cnVjdCBpbm9kZSAqLCBpbnQsIHN0cnVjdCBuYW1laWRhdGEgKik7Ci0JaW50ICgqY2hlY2tfYWNsKShzdHJ1Y3QgaW5vZGUgKiwgaW50KTsKKwlpbnQgKCpwZXJtaXNzaW9uKSAoc3RydWN0IGlub2RlICosIGludCwgdW5zaWduZWQgaW50KTsKKwlpbnQgKCpjaGVja19hY2wpKHN0cnVjdCBpbm9kZSAqLCBpbnQsIHVuc2lnbmVkIGludCk7CiAJaW50ICgqc2V0YXR0cikgKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGlhdHRyICopOwogCWludCAoKmdldGF0dHIpIChzdHJ1Y3QgdmZzbW91bnQgKiwgc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3Qga3N0YXQgKik7CiAJaW50ICgqc2V0eGF0dHIpIChzdHJ1Y3QgZGVudHJ5ICosIGNvbnN0IGNoYXIgKixjb25zdCB2b2lkICosc2l6ZV90LGludCk7CkBAIC03Myw3ICs3Niw3IEBACiBwdXRfbGluazoJbm8KIHRydW5jYXRlOgl5ZXMJCShzZWUgYmVsb3cpCiBzZXRhdHRyOgl5ZXMKLXBlcm1pc3Npb246CW5vCitwZXJtaXNzaW9uOglubyAobWF5IG5vdCBibG9jayBpZiBjYWxsZWQgaW4gcmN1LXdhbGsgbW9kZSkKIGNoZWNrX2FjbDoJbm8KIGdldGF0dHI6CW5vCiBzZXR4YXR0cjoJeWVzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2RlbnRyeS1sb2NraW5nLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZGVudHJ5LWxvY2tpbmcudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OTMzNGVkLi4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZGVudHJ5LWxvY2tpbmcudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTc0ICswLDAgQEAKLVJDVS1iYXNlZCBkY2FjaGUgbG9ja2luZyBtb2RlbAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLU9uIG1hbnkgd29ya2xvYWRzLCB0aGUgbW9zdCBjb21tb24gb3BlcmF0aW9uIG9uIGRjYWNoZSBpcyB0byBsb29rIHVwIGEKLWRlbnRyeSwgZ2l2ZW4gYSBwYXJlbnQgZGVudHJ5IGFuZCB0aGUgbmFtZSBvZiB0aGUgY2hpbGQuIFR5cGljYWxseSwKLWZvciBldmVyeSBvcGVuKCksIHN0YXQoKSBldGMuLCB0aGUgZGVudHJ5IGNvcnJlc3BvbmRpbmcgdG8gdGhlCi1wYXRobmFtZSB3aWxsIGJlIGxvb2tlZCB1cCBieSB3YWxraW5nIHRoZSB0cmVlIHN0YXJ0aW5nIHdpdGggdGhlIGZpcnN0Ci1jb21wb25lbnQgb2YgdGhlIHBhdGhuYW1lIGFuZCB1c2luZyB0aGF0IGRlbnRyeSBhbG9uZyB3aXRoIHRoZSBuZXh0Ci1jb21wb25lbnQgdG8gbG9vayB1cCB0aGUgbmV4dCBsZXZlbCBhbmQgc28gb24uIFNpbmNlIGl0IGlzIGEgZnJlcXVlbnQKLW9wZXJhdGlvbiBmb3Igd29ya2xvYWRzIGxpa2UgbXVsdGl1c2VyIGVudmlyb25tZW50cyBhbmQgd2ViIHNlcnZlcnMsCi1pdCBpcyBpbXBvcnRhbnQgdG8gb3B0aW1pemUgdGhpcyBwYXRoLgotCi1QcmlvciB0byAyLjUuMTAsIGRjYWNoZV9sb2NrIHdhcyBhY3F1aXJlZCBpbiBkX2xvb2t1cCBhbmQgdGh1cyBpbgotZXZlcnkgY29tcG9uZW50IGR1cmluZyBwYXRoIGxvb2stdXAuIFNpbmNlIDIuNS4xMCBvbndhcmRzLCBmYXN0LXdhbGsKLWFsZ29yaXRobSBjaGFuZ2VkIHRoaXMgYnkgaG9sZGluZyB0aGUgZGNhY2hlX2xvY2sgYXQgdGhlIGJlZ2lubmluZyBhbmQKLXdhbGtpbmcgYXMgbWFueSBjYWNoZWQgcGF0aCBjb21wb25lbnQgZGVudHJpZXMgYXMgcG9zc2libGUuIFRoaXMKLXNpZ25pZmljYW50bHkgZGVjcmVhc2VzIHRoZSBudW1iZXIgb2YgYWNxdWlzaXRpb24gb2YKLWRjYWNoZV9sb2NrLiBIb3dldmVyIGl0IGFsc28gaW5jcmVhc2VzIHRoZSBsb2NrIGhvbGQgdGltZQotc2lnbmlmaWNhbnRseSBhbmQgYWZmZWN0cyBwZXJmb3JtYW5jZSBpbiBsYXJnZSBTTVAgbWFjaGluZXMuIFNpbmNlCi0yLjUuNjIga2VybmVsLCBkY2FjaGUgaGFzIGJlZW4gdXNpbmcgYSBuZXcgbG9ja2luZyBtb2RlbCB0aGF0IHVzZXMgUkNVCi10byBtYWtlIGRjYWNoZSBsb29rLXVwIGxvY2stZnJlZS4KLQotVGhlIGN1cnJlbnQgZGNhY2hlIGxvY2tpbmcgbW9kZWwgaXMgbm90IHZlcnkgZGlmZmVyZW50IGZyb20gdGhlCi1leGlzdGluZyBkY2FjaGUgbG9ja2luZyBtb2RlbC4gUHJpb3IgdG8gMi41LjYyIGtlcm5lbCwgZGNhY2hlX2xvY2sKLXByb3RlY3RlZCB0aGUgaGFzaCBjaGFpbiwgZF9jaGlsZCwgZF9hbGlhcywgZF9scnUgbGlzdHMgYXMgd2VsbCBhcwotZF9pbm9kZSBhbmQgc2V2ZXJhbCBvdGhlciB0aGluZ3MgbGlrZSBtb3VudCBsb29rLXVwLiBSQ1UtYmFzZWQgY2hhbmdlcwotYWZmZWN0IG9ubHkgdGhlIHdheSB0aGUgaGFzaCBjaGFpbiBpcyBwcm90ZWN0ZWQuIEZvciBldmVyeXRoaW5nIGVsc2UKLXRoZSBkY2FjaGVfbG9jayBtdXN0IGJlIHRha2VuIGZvciBib3RoIHRyYXZlcnNpbmcgYXMgd2VsbCBhcwotdXBkYXRpbmcuIFRoZSBoYXNoIGNoYWluIHVwZGF0ZXMgdG9vIHRha2UgdGhlIGRjYWNoZV9sb2NrLiAgVGhlCi1zaWduaWZpY2FudCBjaGFuZ2UgaXMgdGhlIHdheSBkX2xvb2t1cCB0cmF2ZXJzZXMgdGhlIGhhc2ggY2hhaW4sIGl0Ci1kb2Vzbid0IGFjcXVpcmUgdGhlIGRjYWNoZV9sb2NrIGZvciB0aGlzIGFuZCByZWx5IG9uIFJDVSB0byBlbnN1cmUKLXRoYXQgdGhlIGRlbnRyeSBoYXMgbm90IGJlZW4gKmZyZWVkKi4KLQotCi1EY2FjaGUgbG9ja2luZyBkZXRhaWxzCi09PT09PT09PT09PT09PT09PT09PT09Ci0KLUZvciBtYW55IG11bHRpLXVzZXIgd29ya2xvYWRzLCBvcGVuKCkgYW5kIHN0YXQoKSBvbiBmaWxlcyBhcmUgdmVyeQotZnJlcXVlbnRseSBvY2N1cnJpbmcgb3BlcmF0aW9ucy4gQm90aCBpbnZvbHZlIHdhbGtpbmcgb2YgcGF0aCBuYW1lcyB0bwotZmluZCB0aGUgZGVudHJ5IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGNvbmNlcm5lZCBmaWxlLiBJbiAyLjQga2VybmVsLAotZGNhY2hlX2xvY2sgd2FzIGhlbGQgZHVyaW5nIGxvb2stdXAgb2YgZWFjaCBwYXRoIGNvbXBvbmVudC4gQ29udGVudGlvbgotYW5kIGNhY2hlLWxpbmUgYm91bmNpbmcgb2YgdGhpcyBnbG9iYWwgbG9jayBjYXVzZWQgc2lnbmlmaWNhbnQKLXNjYWxhYmlsaXR5IHByb2JsZW1zLiBXaXRoIHRoZSBpbnRyb2R1Y3Rpb24gb2YgUkNVIGluIExpbnV4IGtlcm5lbCwKLXRoaXMgd2FzIHdvcmtlZCBhcm91bmQgYnkgbWFraW5nIHRoZSBsb29rLXVwIG9mIHBhdGggY29tcG9uZW50cyBkdXJpbmcKLXBhdGggd2Fsa2luZyBsb2NrLWZyZWUuCi0KLQotU2FmZSBsb2NrLWZyZWUgbG9vay11cCBvZiBkY2FjaGUgaGFzaCB0YWJsZQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1EY2FjaGUgaXMgYSBjb21wbGV4IGRhdGEgc3RydWN0dXJlIHdpdGggdGhlIGhhc2ggdGFibGUgZW50cmllcyBhbHNvCi1saW5rZWQgdG9nZXRoZXIgaW4gb3RoZXIgbGlzdHMuIEluIDIuNCBrZXJuZWwsIGRjYWNoZV9sb2NrIHByb3RlY3RlZAotYWxsIHRoZSBsaXN0cy4gV2UgYXBwbGllZCBSQ1Ugb25seSBvbiBoYXNoIGNoYWluIHdhbGtpbmcuIFRoZSByZXN0IG9mCi10aGUgbGlzdHMgYXJlIHN0aWxsIHByb3RlY3RlZCBieSBkY2FjaGVfbG9jay4gIFNvbWUgb2YgdGhlIGltcG9ydGFudAotY2hhbmdlcyBhcmUgOgotCi0xLiBUaGUgZGVsZXRpb24gZnJvbSBoYXNoIGNoYWluIGlzIGRvbmUgdXNpbmcgaGxpc3RfZGVsX3JjdSgpIG1hY3JvCi0gICB3aGljaCBkb2Vzbid0IGluaXRpYWxpemUgbmV4dCBwb2ludGVyIG9mIHRoZSBkZWxldGVkIGRlbnRyeSBhbmQKLSAgIHRoaXMgYWxsb3dzIHVzIHRvIHdhbGsgc2FmZWx5IGxvY2stZnJlZSB3aGlsZSBhIGRlbGV0aW9uIGlzCi0gICBoYXBwZW5pbmcuCi0KLTIuIEluc2VydGlvbiBvZiBhIGRlbnRyeSBpbnRvIHRoZSBoYXNoIHRhYmxlIGlzIGRvbmUgdXNpbmcKLSAgIGhsaXN0X2FkZF9oZWFkX3JjdSgpIHdoaWNoIHRha2UgY2FyZSBvZiBvcmRlcmluZyB0aGUgd3JpdGVzIC0gdGhlCi0gICB3cml0ZXMgdG8gdGhlIGRlbnRyeSBtdXN0IGJlIHZpc2libGUgYmVmb3JlIHRoZSBkZW50cnkgaXMKLSAgIGluc2VydGVkLiBUaGlzIHdvcmtzIGluIGNvbmp1bmN0aW9uIHdpdGggaGxpc3RfZm9yX2VhY2hfcmN1KCksCi0gICB3aGljaCBoYXMgc2luY2UgYmVlbiByZXBsYWNlZCBieSBobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoKSwgd2hpbGUKLSAgIHdhbGtpbmcgdGhlIGhhc2ggY2hhaW4uIFRoZSBvbmx5IHJlcXVpcmVtZW50IGlzIHRoYXQgYWxsCi0gICBpbml0aWFsaXphdGlvbiB0byB0aGUgZGVudHJ5IG11c3QgYmUgZG9uZSBiZWZvcmUKLSAgIGhsaXN0X2FkZF9oZWFkX3JjdSgpIHNpbmNlIHdlIGRvbid0IGhhdmUgZGNhY2hlX2xvY2sgcHJvdGVjdGlvbgotICAgd2hpbGUgdHJhdmVyc2luZyB0aGUgaGFzaCBjaGFpbi4gVGhpcyBpc24ndCBkaWZmZXJlbnQgZnJvbSB0aGUKLSAgIGV4aXN0aW5nIGNvZGUuCi0KLTMuIFRoZSBkZW50cnkgbG9va2VkIHVwIHdpdGhvdXQgaG9sZGluZyBkY2FjaGVfbG9jayBieSBjYW5ub3QgYmUKLSAgIHJldHVybmVkIGZvciB3YWxraW5nIGlmIGl0IGlzIHVuaGFzaGVkLiBJdCB0aGVuIG1heSBoYXZlIGEgTlVMTAotICAgZF9pbm9kZSBvciBvdGhlciBib2dvc2l0eSBzaW5jZSBSQ1UgZG9lc24ndCBwcm90ZWN0IHRoZSBvdGhlcgotICAgZmllbGRzIGluIHRoZSBkZW50cnkuIFdlIHRoZXJlZm9yZSB1c2UgYSBmbGFnIERDQUNIRV9VTkhBU0hFRCB0bwotICAgaW5kaWNhdGUgdW5oYXNoZWQgZGVudHJpZXMgYW5kIHVzZSB0aGlzIGluIGNvbmp1bmN0aW9uIHdpdGggYQotICAgcGVyLWRlbnRyeSBsb2NrIChkX2xvY2spLiBPbmNlIGxvb2tlZCB1cCB3aXRob3V0IHRoZSBkY2FjaGVfbG9jaywKLSAgIHdlIGFjcXVpcmUgdGhlIHBlci1kZW50cnkgbG9jayAoZF9sb2NrKSBhbmQgY2hlY2sgaWYgdGhlIGRlbnRyeSBpcwotICAgdW5oYXNoZWQuIElmIHNvLCB0aGUgbG9vay11cCBpcyBmYWlsZWQuIElmIG5vdCwgdGhlIHJlZmVyZW5jZSBjb3VudAotICAgb2YgdGhlIGRlbnRyeSBpcyBpbmNyZWFzZWQgYW5kIHRoZSBkZW50cnkgaXMgcmV0dXJuZWQuCi0KLTQuIE9uY2UgYSBkZW50cnkgaXMgbG9va2VkIHVwLCBpdCBtdXN0IGJlIGVuc3VyZWQgZHVyaW5nIHRoZSBwYXRoIHdhbGsKLSAgIGZvciB0aGF0IGNvbXBvbmVudCBpdCBkb2Vzbid0IGdvIGF3YXkuIEluIHByZS0yLjUuMTAgY29kZSwgdGhpcyB3YXMKLSAgIGRvbmUgaG9sZGluZyBhIHJlZmVyZW5jZSB0byB0aGUgZGVudHJ5LiBkY2FjaGVfcmN1IGRvZXMgdGhlIHNhbWUuCi0gICBJbiBzb21lIHNlbnNlLCBkY2FjaGVfcmN1IHBhdGggd2Fsa2luZyBsb29rcyBsaWtlIHRoZSBwcmUtMi41LjEwCi0gICB2ZXJzaW9uLgotCi01LiBBbGwgZGVudHJ5IGhhc2ggY2hhaW4gdXBkYXRlcyBtdXN0IHRha2UgdGhlIGRjYWNoZV9sb2NrIGFzIHdlbGwgYXMKLSAgIHRoZSBwZXItZGVudHJ5IGxvY2sgaW4gdGhhdCBvcmRlci4gZHB1dCgpIGRvZXMgdGhpcyB0byBlbnN1cmUgdGhhdAotICAgYSBkZW50cnkgdGhhdCBoYXMganVzdCBiZWVuIGxvb2tlZCB1cCBpbiBhbm90aGVyIENQVSBkb2Vzbid0IGdldAotICAgZGVsZXRlZCBiZWZvcmUgZGdldCgpIGNhbiBiZSBkb25lIG9uIGl0LgotCi02LiBUaGVyZSBhcmUgc2V2ZXJhbCB3YXlzIHRvIGRvIHJlZmVyZW5jZSBjb3VudGluZyBvZiBSQ1UgcHJvdGVjdGVkCi0gICBvYmplY3RzLiBPbmUgc3VjaCBleGFtcGxlIGlzIGluIGlwdjQgcm91dGUgY2FjaGUgd2hlcmUgZGVmZXJyZWQKLSAgIGZyZWVpbmcgKHVzaW5nIGNhbGxfcmN1KCkpIGlzIGRvbmUgYXMgc29vbiBhcyB0aGUgcmVmZXJlbmNlIGNvdW50Ci0gICBnb2VzIHRvIHplcm8uIFRoaXMgY2Fubm90IGJlIGRvbmUgaW4gdGhlIGNhc2Ugb2YgZGVudHJpZXMgYmVjYXVzZQotICAgdGVhcmluZyBkb3duIG9mIGRlbnRyaWVzIHJlcXVpcmUgYmxvY2tpbmcgKGRlbnRyeV9pcHV0KCkpIHdoaWNoCi0gICBpc24ndCBzdXBwb3J0ZWQgZnJvbSBSQ1UgY2FsbGJhY2tzLiBJbnN0ZWFkLCB0ZWFyaW5nIGRvd24gb2YKLSAgIGRlbnRyaWVzIGhhcHBlbiBzeW5jaHJvbm91c2x5IGluIGRwdXQoKSwgYnV0IGFjdHVhbCBmcmVlaW5nIGhhcHBlbnMKLSAgIGxhdGVyIHdoZW4gUkNVIGdyYWNlIHBlcmlvZCBpcyBvdmVyLiBUaGlzIGFsbG93cyBzYWZlIGxvY2stZnJlZQotICAgd2Fsa2luZyBvZiB0aGUgaGFzaCBjaGFpbnMsIGJ1dCBhIG1hdGNoZWQgZGVudHJ5IG1heSBoYXZlIGJlZW4KLSAgIHBhcnRpYWxseSB0b3JuIGRvd24uIFRoZSBjaGVja2luZyBvZiBEQ0FDSEVfVU5IQVNIRUQgZmxhZyB3aXRoCi0gICBkX2xvY2sgaGVsZCBkZXRlY3RzIHN1Y2ggZGVudHJpZXMgYW5kIHByZXZlbnRzIHRoZW0gZnJvbSBiZWluZwotICAgcmV0dXJuZWQgZnJvbSBsb29rLXVwLgotCi0KLU1haW50YWluaW5nIFBPU0lYIHJlbmFtZSBzZW1hbnRpY3MKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotU2luY2UgbG9vay11cCBvZiBkZW50cmllcyBpcyBsb2NrLWZyZWUsIGl0IGNhbiByYWNlIGFnYWluc3QgYQotY29uY3VycmVudCByZW5hbWUgb3BlcmF0aW9uLiBGb3IgZXhhbXBsZSwgZHVyaW5nIHJlbmFtZSBvZiBmaWxlIEEgdG8KLUIsIGxvb2stdXAgb2YgZWl0aGVyIEEgb3IgQiBtdXN0IHN1Y2NlZWQuICBTbywgaWYgbG9vay11cCBvZiBCIGhhcHBlbnMKLWFmdGVyIEEgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBoYXNoIGNoYWluIGJ1dCBub3QgYWRkZWQgdG8gdGhlIG5ldwotaGFzaCBjaGFpbiwgaXQgbWF5IGZhaWwuICBBbHNvLCBhIGNvbXBhcmlzb24gd2hpbGUgdGhlIG5hbWUgaXMgYmVpbmcKLXdyaXR0ZW4gY29uY3VycmVudGx5IGJ5IGEgcmVuYW1lIG1heSByZXN1bHQgaW4gZmFsc2UgcG9zaXRpdmUgbWF0Y2hlcwotdmlvbGF0aW5nIHJlbmFtZSBzZW1hbnRpY3MuICBJc3N1ZXMgcmVsYXRlZCB0byByYWNlIHdpdGggcmVuYW1lIGFyZQotaGFuZGxlZCBhcyBkZXNjcmliZWQgYmVsb3cgOgotCi0xLiBMb29rLXVwIGNhbiBiZSBkb25lIGluIHR3byB3YXlzIC0gZF9sb29rdXAoKSB3aGljaCBpcyBzYWZlIGZyb20KLSAgIHNpbXVsdGFuZW91cyByZW5hbWVzIGFuZCBfX2RfbG9va3VwKCkgd2hpY2ggaXMgbm90LiAgSWYKLSAgIF9fZF9sb29rdXAoKSBmYWlscywgaXQgbXVzdCBiZSBmb2xsb3dlZCB1cCBieSBhIGRfbG9va3VwKCkgdG8KLSAgIGNvcnJlY3RseSBkZXRlcm1pbmUgd2hldGhlciBhIGRlbnRyeSBpcyBpbiB0aGUgaGFzaCB0YWJsZSBvcgotICAgbm90LiBkX2xvb2t1cCgpIHByb3RlY3RzIGxvb2stdXBzIHVzaW5nIGEgc2VxdWVuY2UgbG9jawotICAgKHJlbmFtZV9sb2NrKS4KLQotMi4gVGhlIG5hbWUgYXNzb2NpYXRlZCB3aXRoIGEgZGVudHJ5IChkX25hbWUpIG1heSBiZSBjaGFuZ2VkIGlmIGEKLSAgIHJlbmFtZSBpcyBhbGxvd2VkIHRvIGhhcHBlbiBzaW11bHRhbmVvdXNseS4gVG8gYXZvaWQgbWVtY21wKCkgaW4KLSAgIF9fZF9sb29rdXAoKSBnbyBvdXQgb2YgYm91bmRzIGR1ZSB0byBhIHJlbmFtZSBhbmQgZmFsc2UgcG9zaXRpdmUKLSAgIGNvbXBhcmlzb24sIHRoZSBuYW1lIGNvbXBhcmlzb24gaXMgZG9uZSB3aGlsZSBob2xkaW5nIHRoZQotICAgcGVyLWRlbnRyeSBsb2NrLiBUaGlzIHByZXZlbnRzIGNvbmN1cnJlbnQgcmVuYW1lcyBkdXJpbmcgdGhpcwotICAgb3BlcmF0aW9uLgotCi0zLiBIYXNoIHRhYmxlIHdhbGtpbmcgZHVyaW5nIGxvb2stdXAgbWF5IG1vdmUgdG8gYSBkaWZmZXJlbnQgYnVja2V0IGFzCi0gICB0aGUgY3VycmVudCBkZW50cnkgaXMgbW92ZWQgdG8gYSBkaWZmZXJlbnQgYnVja2V0IGR1ZSB0byByZW5hbWUuCi0gICBCdXQgd2UgdXNlIGhsaXN0cyBpbiBkY2FjaGUgaGFzaCB0YWJsZSBhbmQgdGhleSBhcmUKLSAgIG51bGwtdGVybWluYXRlZC4gIFNvLCBldmVuIGlmIGEgZGVudHJ5IG1vdmVzIHRvIGEgZGlmZmVyZW50IGJ1Y2tldCwKLSAgIGhhc2ggY2hhaW4gd2FsayB3aWxsIHRlcm1pbmF0ZS4gW3dpdGggYSBsaXN0X2hlYWQgbGlzdCwgaXQgbWF5IG5vdAotICAgc2luY2UgdGVybWluYXRpb24gaXMgd2hlbiB0aGUgbGlzdF9oZWFkIGluIHRoZSBvcmlnaW5hbCBidWNrZXQgaXMKLSAgIHJlYWNoZWRdLiAgU2luY2Ugd2UgcmVkbyB0aGUgZF9wYXJlbnQgY2hlY2sgYW5kIGNvbXBhcmUgbmFtZSB3aGlsZQotICAgaG9sZGluZyBkX2xvY2ssIGxvY2stZnJlZSBsb29rLXVwIHdpbGwgbm90IHJhY2UgYWdhaW5zdCBkX21vdmUoKS4KLQotNC4gVGhlcmUgY2FuIGJlIGEgdGhlb3JldGljYWwgcmFjZSB3aGVuIGEgZGVudHJ5IGtlZXBzIGNvbWluZyBiYWNrIHRvCi0gICBvcmlnaW5hbCBidWNrZXQgZHVlIHRvIGRvdWJsZSBtb3Zlcy4gRHVlIHRvIHRoaXMgbG9vay11cCBtYXkKLSAgIGNvbnNpZGVyIHRoYXQgaXQgaGFzIG5ldmVyIG1vdmVkIGFuZCBjYW4gZW5kIHVwIGluIGEgaW5maW5pdGUgbG9vcC4KLSAgIEJ1dCB0aGlzIGlzIG5vdCBhbnkgd29yc2UgdGhhdCB0aGVvcmV0aWNhbCBsaXZlbG9ja3Mgd2UgYWxyZWFkeQotICAgaGF2ZSBpbiB0aGUga2VybmVsLgotCi0KLUltcG9ydGFudCBndWlkZWxpbmVzIGZvciBmaWxlc3lzdGVtIGRldmVsb3BlcnMgcmVsYXRlZCB0byBkY2FjaGVfcmN1Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0xLiBFeGlzdGluZyBkY2FjaGUgaW50ZXJmYWNlcyAocHJlLTIuNS42MikgZXhwb3J0ZWQgdG8gZmlsZXN5c3RlbQotICAgZG9uJ3QgY2hhbmdlLiBPbmx5IGRjYWNoZSBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBjaGFuZ2VzLiBIb3dldmVyCi0gICBmaWxlc3lzdGVtcyAqbXVzdCBub3QqIGRlbGV0ZSBmcm9tIHRoZSBkZW50cnkgaGFzaCBjaGFpbnMgZGlyZWN0bHkKLSAgIHVzaW5nIHRoZSBsaXN0IG1hY3JvcyBsaWtlIGFsbG93ZWQgZWFybGllci4gVGhleSBtdXN0IHVzZSBkY2FjaGUKLSAgIEFQSXMgbGlrZSBkX2Ryb3AoKSBvciBfX2RfZHJvcCgpIGRlcGVuZGluZyBvbiB0aGUgc2l0dWF0aW9uLgotCi0yLiBkX2ZsYWdzIGlzIG5vdyBwcm90ZWN0ZWQgYnkgYSBwZXItZGVudHJ5IGxvY2sgKGRfbG9jaykuIEFsbCBhY2Nlc3MKLSAgIHRvIGRfZmxhZ3MgbXVzdCBiZSBwcm90ZWN0ZWQgYnkgaXQuCi0KLTMuIEZvciBhIGhhc2hlZCBkZW50cnksIGNoZWNraW5nIG9mIGRfY291bnQgbmVlZHMgdG8gYmUgcHJvdGVjdGVkIGJ5Ci0gICBkX2xvY2suCi0KLQotUGFwZXJzIGFuZCBvdGhlciBkb2N1bWVudGF0aW9uIG9uIGRjYWNoZSBsb2NraW5nCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotMS4gU2NhbGluZyBkY2FjaGUgd2l0aCBSQ1UgKGh0dHA6Ly9saW51eGpvdXJuYWwuY29tL2FydGljbGUucGhwP3NpZD03MTI0KS4KLQotMi4gaHR0cDovL2xzZS5zb3VyY2Vmb3JnZS5uZXQvbG9ja2luZy9kY2FjaGUvZGNhY2hlLmh0bWwKLQotCi0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcGF0aC1sb29rdXAudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wYXRoLWxvb2t1cC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI1OWM4YgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcGF0aC1sb29rdXAudHh0CkBAIC0wLDAgKzEsMzgyIEBACitQYXRoIHdhbGtpbmcgYW5kIG5hbWUgbG9va3VwIGxvY2tpbmcKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitQYXRoIHJlc29sdXRpb24gaXMgdGhlIGZpbmRpbmcgYSBkZW50cnkgY29ycmVzcG9uZGluZyB0byBhIHBhdGggbmFtZSBzdHJpbmcsIGJ5CitwZXJmb3JtaW5nIGEgcGF0aCB3YWxrLiBUeXBpY2FsbHksIGZvciBldmVyeSBvcGVuKCksIHN0YXQoKSBldGMuLCB0aGUgcGF0aCBuYW1lCit3aWxsIGJlIHJlc29sdmVkLiBQYXRocyBhcmUgcmVzb2x2ZWQgYnkgd2Fsa2luZyB0aGUgbmFtZXNwYWNlIHRyZWUsIHN0YXJ0aW5nCit3aXRoIHRoZSBmaXJzdCBjb21wb25lbnQgb2YgdGhlIHBhdGhuYW1lIChlZy4gcm9vdCBvciBjd2QpIHdpdGggYSBrbm93biBkZW50cnksCit0aGVuIGZpbmRpbmcgdGhlIGNoaWxkIG9mIHRoYXQgZGVudHJ5LCB3aGljaCBpcyBuYW1lZCB0aGUgbmV4dCBjb21wb25lbnQgaW4gdGhlCitwYXRoIHN0cmluZy4gVGhlbiByZXBlYXRpbmcgdGhlIGxvb2t1cCBmcm9tIHRoZSBjaGlsZCBkZW50cnkgYW5kIGZpbmRpbmcgaXRzCitjaGlsZCB3aXRoIHRoZSBuZXh0IGVsZW1lbnQsIGFuZCBzbyBvbi4KKworU2luY2UgaXQgaXMgYSBmcmVxdWVudCBvcGVyYXRpb24gZm9yIHdvcmtsb2FkcyBsaWtlIG11bHRpdXNlciBlbnZpcm9ubWVudHMgYW5kCit3ZWIgc2VydmVycywgaXQgaXMgaW1wb3J0YW50IHRvIG9wdGltaXplIHRoaXMgY29kZS4KKworUGF0aCB3YWxraW5nIHN5bmNocm9uaXNhdGlvbiBoaXN0b3J5OgorUHJpb3IgdG8gMi41LjEwLCBkY2FjaGVfbG9jayB3YXMgYWNxdWlyZWQgaW4gZF9sb29rdXAgKGRjYWNoZSBoYXNoIGxvb2t1cCkgYW5kCit0aHVzIGluIGV2ZXJ5IGNvbXBvbmVudCBkdXJpbmcgcGF0aCBsb29rLXVwLiBTaW5jZSAyLjUuMTAgb253YXJkcywgZmFzdC13YWxrCithbGdvcml0aG0gY2hhbmdlZCB0aGlzIGJ5IGhvbGRpbmcgdGhlIGRjYWNoZV9sb2NrIGF0IHRoZSBiZWdpbm5pbmcgYW5kIHdhbGtpbmcKK2FzIG1hbnkgY2FjaGVkIHBhdGggY29tcG9uZW50IGRlbnRyaWVzIGFzIHBvc3NpYmxlLiBUaGlzIHNpZ25pZmljYW50bHkKK2RlY3JlYXNlcyB0aGUgbnVtYmVyIG9mIGFjcXVpc2l0aW9uIG9mIGRjYWNoZV9sb2NrLiBIb3dldmVyIGl0IGFsc28gaW5jcmVhc2VzCit0aGUgbG9jayBob2xkIHRpbWUgc2lnbmlmaWNhbnRseSBhbmQgYWZmZWN0cyBwZXJmb3JtYW5jZSBpbiBsYXJnZSBTTVAgbWFjaGluZXMuCitTaW5jZSAyLjUuNjIga2VybmVsLCBkY2FjaGUgaGFzIGJlZW4gdXNpbmcgYSBuZXcgbG9ja2luZyBtb2RlbCB0aGF0IHVzZXMgUkNVIHRvCittYWtlIGRjYWNoZSBsb29rLXVwIGxvY2stZnJlZS4KKworQWxsIHRoZSBhYm92ZSBhbGdvcml0aG1zIHJlcXVpcmVkIHRha2luZyBhIGxvY2sgYW5kIHJlZmVyZW5jZSBjb3VudCBvbiB0aGUKK2RlbnRyeSB0aGF0IHdhcyBsb29rZWQgdXAsIHNvIHRoYXQgbWF5IGJlIHVzZWQgYXMgdGhlIGJhc2lzIGZvciB3YWxraW5nIHRoZQorbmV4dCBwYXRoIGVsZW1lbnQuIFRoaXMgaXMgaW5lZmZpY2llbnQgYW5kIHVuc2NhbGFibGUuIEl0IGlzIGluZWZmaWNpZW50CitiZWNhdXNlIG9mIHRoZSBsb2NrcyBhbmQgYXRvbWljIG9wZXJhdGlvbnMgcmVxdWlyZWQgZm9yIGV2ZXJ5IGRlbnRyeSBlbGVtZW50CitzbG93cyB0aGluZ3MgZG93bi4gSXQgaXMgbm90IHNjYWxhYmxlIGJlY2F1c2UgbWFueSBwYXJhbGxlbCBhcHBsaWNhdGlvbnMgdGhhdAorYXJlIHBhdGgtd2FsayBpbnRlbnNpdmUgdGVuZCB0byBkbyBwYXRoIGxvb2t1cHMgc3RhcnRpbmcgZnJvbSBhIGNvbW1vbiBkZW50cnkKKyh1c3VhbGx5LCB0aGUgcm9vdCAiLyIgb3IgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSkuIFNvIGNvbnRlbnRpb24gb24gdGhlc2UKK2NvbW1vbiBwYXRoIGVsZW1lbnRzIGNhdXNlcyBsb2NrIGFuZCBjYWNoZWxpbmUgcXVldWVpbmcuCisKK1NpbmNlIDIuNi4zOCwgUkNVIGlzIHVzZWQgdG8gbWFrZSBhIHNpZ25pZmljYW50IHBhcnQgb2YgdGhlIGVudGlyZSBwYXRoIHdhbGsKKyhpbmNsdWRpbmcgZGNhY2hlIGxvb2stdXApIGNvbXBsZXRlbHkgInN0b3JlLWZyZWUiIChzbywgbm8gbG9ja3MsIGF0b21pY3MsIG9yCitldmVuIHN0b3JlcyBpbnRvIGNhY2hlbGluZXMgb2YgY29tbW9uIGRlbnRyaWVzKS4gVGhpcyBpcyBrbm93biBhcyAicmN1LXdhbGsiCitwYXRoIHdhbGtpbmcuCisKK1BhdGggd2Fsa2luZyBvdmVydmlldworPT09PT09PT09PT09PT09PT09PT09CisKK0EgbmFtZSBzdHJpbmcgc3BlY2lmaWVzIGEgc3RhcnQgKHJvb3QgZGlyZWN0b3J5LCBjd2QsIGZkLXJlbGF0aXZlKSBhbmQgYQorc2VxdWVuY2Ugb2YgZWxlbWVudHMgKGRpcmVjdG9yeSBlbnRyeSBuYW1lcyksIHdoaWNoIHRvZ2V0aGVyIHJlZmVyIHRvIGEgcGF0aCBpbgordGhlIG5hbWVzcGFjZS4gQSBwYXRoIGlzIHJlcHJlc2VudGVkIGFzIGEgKGRlbnRyeSwgdmZzbW91bnQpIHR1cGxlLiBUaGUgbmFtZQorZWxlbWVudHMgYXJlIHN1Yi1zdHJpbmdzLCBzZXBlcmF0ZWQgYnkgJy8nLgorCitOYW1lIGxvb2t1cHMgd2lsbCB3YW50IHRvIGZpbmQgYSBwYXJ0aWN1bGFyIHBhdGggdGhhdCBhIG5hbWUgc3RyaW5nIHJlZmVycyB0bworKHVzdWFsbHkgdGhlIGZpbmFsIGVsZW1lbnQsIG9yIHBhcmVudCBvZiBmaW5hbCBlbGVtZW50KS4gVGhpcyBpcyBkb25lIGJ5IHRha2luZwordGhlIHBhdGggZ2l2ZW4gYnkgdGhlIG5hbWUncyBzdGFydGluZyBwb2ludCAod2hpY2ggd2Uga25vdyBpbiBhZHZhbmNlIC0tIGVnLgorY3VycmVudC0+ZnMtPmN3ZCBvciBjdXJyZW50LT5mcy0+cm9vdCkgYXMgdGhlIGZpcnN0IHBhcmVudCBvZiB0aGUgbG9va3VwLiBUaGVuCitpdGVyYXRpdmVseSBmb3IgZWFjaCBzdWJzZXF1ZW50IG5hbWUgZWxlbWVudCwgbG9vayB1cCB0aGUgY2hpbGQgb2YgdGhlIGN1cnJlbnQKK3BhcmVudCB3aXRoIHRoZSBnaXZlbiBuYW1lIGFuZCBpZiBpdCBpcyBub3QgdGhlIGRlc2lyZWQgZW50cnksIG1ha2UgaXQgdGhlCitwYXJlbnQgZm9yIHRoZSBuZXh0IGxvb2t1cC4KKworQSBwYXJlbnQsIG9mIGNvdXJzZSwgbXVzdCBiZSBhIGRpcmVjdG9yeSwgYW5kIHdlIG11c3QgaGF2ZSBhcHByb3ByaWF0ZQorcGVybWlzc2lvbnMgb24gdGhlIHBhcmVudCBpbm9kZSB0byBiZSBhYmxlIHRvIHdhbGsgaW50byBpdC4KKworVHVybmluZyB0aGUgY2hpbGQgaW50byBhIHBhcmVudCBmb3IgdGhlIG5leHQgbG9va3VwIHJlcXVpcmVzIG1vcmUgY2hlY2tzIGFuZAorcHJvY2VkdXJlcy4gU3ltbGlua3MgZXNzZW50aWFsbHkgc3Vic3RpdHV0ZSB0aGUgc3ltbGluayBuYW1lIGZvciB0aGUgdGFyZ2V0CituYW1lIGluIHRoZSBuYW1lIHN0cmluZywgYW5kIHJlcXVpcmUgc29tZSByZWN1cnNpdmUgcGF0aCB3YWxraW5nLiAgTW91bnQgcG9pbnRzCittdXN0IGJlIGZvbGxvd2VkIGludG8gKHRodXMgY2hhbmdpbmcgdGhlIHZmc21vdW50IHRoYXQgc3Vic2VxdWVudCBwYXRoIGVsZW1lbnRzCityZWZlciB0byksIHN3aXRjaGluZyBmcm9tIHRoZSBtb3VudCBwb2ludCBwYXRoIHRvIHRoZSByb290IG9mIHRoZSBwYXJ0aWN1bGFyCittb3VudGVkIHZmc21vdW50LiBUaGVzZSBiZWhhdmlvdXJzIGFyZSB2YXJpb3VzbHkgbW9kaWZpZWQgZGVwZW5kaW5nIG9uIHRoZQorZXhhY3QgcGF0aCB3YWxraW5nIGZsYWdzLgorCitQYXRoIHdhbGtpbmcgdGhlbiBtdXN0LCBicm9hZGx5LCBkbyBzZXZlcmFsIHBhcnRpY3VsYXIgdGhpbmdzOgorLSBmaW5kIHRoZSBzdGFydCBwb2ludCBvZiB0aGUgd2FsazsKKy0gcGVyZm9ybSBwZXJtaXNzaW9ucyBhbmQgdmFsaWRpdHkgY2hlY2tzIG9uIGlub2RlczsKKy0gcGVyZm9ybSBkY2FjaGUgaGFzaCBuYW1lIGxvb2t1cHMgb24gKHBhcmVudCwgbmFtZSBlbGVtZW50KSB0dXBsZXM7CistIHRyYXZlcnNlIG1vdW50IHBvaW50czsKKy0gdHJhdmVyc2Ugc3ltbGlua3M7CistIGxvb2t1cCBhbmQgY3JlYXRlIG1pc3NpbmcgcGFydHMgb2YgdGhlIHBhdGggb24gZGVtYW5kLgorCitTYWZlIHN0b3JlLWZyZWUgbG9vay11cCBvZiBkY2FjaGUgaGFzaCB0YWJsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRGNhY2hlIG5hbWUgbG9va3VwCistLS0tLS0tLS0tLS0tLS0tLS0KK0luIG9yZGVyIHRvIGxvb2t1cCBhIGRjYWNoZSAocGFyZW50LCBuYW1lKSB0dXBsZSwgd2UgdGFrZSBhIGhhc2ggb24gdGhlIHR1cGxlCithbmQgdXNlIHRoYXQgdG8gc2VsZWN0IGEgYnVja2V0IGluIHRoZSBkY2FjaGUtaGFzaCB0YWJsZS4gVGhlIGxpc3Qgb2YgZW50cmllcworaW4gdGhhdCBidWNrZXQgaXMgdGhlbiB3YWxrZWQsIGFuZCB3ZSBkbyBhIGZ1bGwgY29tcGFyaXNvbiBvZiBlYWNoIGVudHJ5CithZ2FpbnN0IG91ciAocGFyZW50LCBuYW1lKSB0dXBsZS4KKworVGhlIGhhc2ggbGlzdHMgYXJlIFJDVSBwcm90ZWN0ZWQsIHNvIGxpc3Qgd2Fsa2luZyBpcyBub3Qgc2VyaWFsaXNlZCB3aXRoCitjb25jdXJyZW50IHVwZGF0ZXMgKGluc2VydGlvbiwgZGVsZXRpb24gZnJvbSB0aGUgaGFzaCkuIFRoaXMgaXMgYSBzdGFuZGFyZCBSQ1UKK2xpc3QgYXBwbGljYXRpb24gd2l0aCB0aGUgZXhjZXB0aW9uIG9mIHJlbmFtZXMsIHdoaWNoIHdpbGwgYmUgY292ZXJlZCBiZWxvdy4KKworUGFyZW50IGFuZCBuYW1lIG1lbWJlcnMgb2YgYSBkZW50cnksIGFzIHdlbGwgYXMgaXRzIG1lbWJlcnNoaXAgaW4gdGhlIGRjYWNoZQoraGFzaCwgYW5kIGl0cyBpbm9kZSBhcmUgcHJvdGVjdGVkIGJ5IHRoZSBwZXItZGVudHJ5IGRfbG9jayBzcGlubG9jay4gQQorcmVmZXJlbmNlIGlzIHRha2VuIG9uIHRoZSBkZW50cnkgKHdoaWxlIHRoZSBmaWVsZHMgYXJlIHZlcmlmaWVkIHVuZGVyIGRfbG9jayksCithbmQgdGhpcyBzdGFiaWxpc2VzIGl0cyBkX2lub2RlIHBvaW50ZXIgYW5kIGFjdHVhbCBpbm9kZS4gVGhpcyBnaXZlcyBhIHN0YWJsZQorcG9pbnQgdG8gcGVyZm9ybSB0aGUgbmV4dCBzdGVwIG9mIG91ciBwYXRoIHdhbGsgYWdhaW5zdC4KKworVGhlc2UgbWVtYmVycyBhcmUgYWxzbyBwcm90ZWN0ZWQgYnkgZF9zZXEgc2VxbG9jaywgYWx0aG91Z2ggdGhpcyBvZmZlcnMKK3JlYWQtb25seSBwcm90ZWN0aW9uIGFuZCBubyBkdXJhYmlsaXR5IG9mIHJlc3VsdHMsIHNvIGNhcmUgbXVzdCBiZSB0YWtlbiB3aGVuCit1c2luZyBkX3NlcSBmb3Igc3luY2hyb25pc2F0aW9uIChzZWUgc2VxY291bnQgYmFzZWQgbG9va3VwcywgYmVsb3cpLgorCitSZW5hbWVzCistLS0tLS0tCitCYWNrIHRvIHRoZSByZW5hbWUgY2FzZS4gSW4gdXN1YWwgUkNVIHByb3RlY3RlZCBsaXN0cywgdGhlIG9ubHkgb3BlcmF0aW9ucyB0aGF0Cit3aWxsIGhhcHBlbiB0byBhbiBvYmplY3QgaXMgaW5zZXJ0aW9uLCBhbmQgdGhlbiBldmVudHVhbGx5IHJlbW92YWwgZnJvbSB0aGUKK2xpc3QuIFRoZSBvYmplY3Qgd2lsbCBub3QgYmUgcmV1c2VkIHVudGlsIGFuIFJDVSBncmFjZSBwZXJpb2QgaXMgY29tcGxldGUuCitUaGlzIGVuc3VyZXMgdGhlIFJDVSBsaXN0IHRyYXZlcnNhbCBwcmltaXRpdmVzIGNhbiBydW4gb3ZlciB0aGUgb2JqZWN0IHdpdGhvdXQKK3Byb2JsZW1zIChzZWUgUkNVIGRvY3VtZW50YXRpb24gZm9yIGhvdyB0aGlzIHdvcmtzKS4KKworSG93ZXZlciB3aGVuIGEgZGVudHJ5IGlzIHJlbmFtZWQsIGl0cyBoYXNoIHZhbHVlIGNhbiBjaGFuZ2UsIHJlcXVpcmluZyBpdCB0byBiZQorbW92ZWQgdG8gYSBuZXcgaGFzaCBsaXN0LiBBbGxvY2F0aW5nIGFuZCBpbnNlcnRpbmcgYSBuZXcgYWxpYXMgd291bGQgYmUKK2V4cGVuc2l2ZSBhbmQgYWxzbyBwcm9ibGVtYXRpYyBmb3IgZGlyZWN0b3J5IGRlbnRyaWVzLiBMYXRlbmN5IHdvdWxkIGJlIGZhciB0bworaGlnaCB0byB3YWl0IGZvciBhIGdyYWNlIHBlcmlvZCBhZnRlciByZW1vdmluZyB0aGUgZGVudHJ5IGFuZCBiZWZvcmUgaW5zZXJ0aW5nCitpdCBpbiB0aGUgbmV3IGhhc2ggYnVja2V0LiBTbyB3aGF0IGlzIGRvbmUgaXMgdG8gaW5zZXJ0IHRoZSBkZW50cnkgaW50byB0aGUKK25ldyBsaXN0IGltbWVkaWF0ZWx5LgorCitIb3dldmVyLCB3aGVuIHRoZSBkZW50cnkncyBsaXN0IHBvaW50ZXJzIGFyZSB1cGRhdGVkIHRvIHBvaW50IHRvIG9iamVjdHMgaW4gdGhlCituZXcgbGlzdCBiZWZvcmUgd2FpdGluZyBmb3IgYSBncmFjZSBwZXJpb2QsIHRoaXMgY2FuIHJlc3VsdCBpbiBhIGNvbmN1cnJlbnQgUkNVCitsb29rdXAgb2YgdGhlIG9sZCBsaXN0IHZlZXJpbmcgb2ZmIGludG8gdGhlIG5ldyAoaW5jb3JyZWN0KSBsaXN0IGFuZCBtaXNzaW5nCit0aGUgcmVtYWluaW5nIGRlbnRyaWVzIG9uIHRoZSBsaXN0LgorCitUaGVyZSBpcyBubyBmdW5kYW1lbnRhbCBwcm9ibGVtIHdpdGggd2Fsa2luZyBkb3duIHRoZSB3cm9uZyBsaXN0LCBiZWNhdXNlIHRoZQorZGVudHJ5IGNvbXBhcmlzb25zIHdpbGwgbmV2ZXIgbWF0Y2guIEhvd2V2ZXIgaXQgaXMgZmF0YWwgdG8gbWlzcyBhIG1hdGNoaW5nCitkZW50cnkuIFNvIGEgc2VxbG9jayBpcyB1c2VkIHRvIGRldGVjdCB3aGVuIGEgcmVuYW1lIGhhcyBvY2N1cnJlZCwgYW5kIHNvIHRoZQorbG9va3VwIGNhbiBiZSByZXRyaWVkLgorCisgICAgICAgICAxICAgICAgMiAgICAgIDMKKyAgICAgICAgKy0tLSsgICstLS0rICArLS0tKworaGxpc3QtLT58IE4tKy0+fCBOLSstPnwgTi0rLT4KK2hlYWQgPC0tKy1QIHw8LSstUCB8PC0rLVAgfAorICAgICAgICArLS0tKyAgKy0tLSsgICstLS0rCisKK1JlbmFtZSBvZiBkZW50cnkgMiBtYXkgcmVxdWlyZSBpdCBkZWxldGVkIGZyb20gdGhlIGFib3ZlIGxpc3QsIGFuZCBpbnNlcnRlZAoraW50byBhIG5ldyBsaXN0LiBEZWxldGluZyAyIGdpdmVzIHRoZSBmb2xsb3dpbmcgbGlzdC4KKworICAgICAgICAgMSAgICAgICAgICAgICAzCisgICAgICAgICstLS0rICAgICAgICAgKy0tLSsgICAgIChkb24ndCB3b3JyeSwgdGhlIGxvbmdlciBwb2ludGVycyBkbyBub3QKK2hsaXN0LS0+fCBOLSstLS0tLS0tLT58IE4tKy0+ICAgIGltcG9zZSBhIG1lYXN1cmFibGUgcGVyZm9ybWFuY2Ugb3ZlcmhlYWQKK2hlYWQgPC0tKy1QIHw8LS0tLS0tLS0rLVAgfCAgICAgIG9uIG1vZGVybiBDUFVzKQorICAgICAgICArLS0tKyAgICAgICAgICstLS0rCisgICAgICAgICAgXiAgICAgIDIgICAgICBeCisgICAgICAgICAgfCAgICArLS0tKyAgICB8CisgICAgICAgICAgfCAgICB8IE4tKy0tLS0rCisgICAgICAgICAgKy0tLS0rLVAgfAorICAgICAgICAgICAgICAgKy0tLSsKKworVGhpcyBpcyBhIHN0YW5kYXJkIFJDVS1saXN0IGRlbGV0aW9uLCB3aGljaCBsZWF2ZXMgdGhlIGRlbGV0ZWQgb2JqZWN0J3MKK3BvaW50ZXJzIGludGFjdCwgc28gYSBjb25jdXJyZW50IGxpc3Qgd2Fsa2VyIHRoYXQgaXMgY3VycmVudGx5IGxvb2tpbmcgYXQKK29iamVjdCAyIHdpbGwgY29ycmVjdGx5IGNvbnRpbnVlIHRvIG9iamVjdCAzIHdoZW4gaXQgaXMgdGltZSB0byB0cmF2ZXJzZSB0aGUKK25leHQgb2JqZWN0LgorCitIb3dldmVyLCB3aGVuIGluc2VydGluZyBvYmplY3QgMiBvbnRvIGEgbmV3IGxpc3QsIHdlIGVuZCB1cCB3aXRoIHRoaXM6CisKKyAgICAgICAgIDEgICAgICAgICAgICAgMworICAgICAgICArLS0tKyAgICAgICAgICstLS0rCitobGlzdC0tPnwgTi0rLS0tLS0tLS0+fCBOLSstPgoraGVhZCA8LS0rLVAgfDwtLS0tLS0tLSstUCB8CisgICAgICAgICstLS0rICAgICAgICAgKy0tLSsKKyAgICAgICAgICAgICAgICAgMgorICAgICAgICAgICAgICAgKy0tLSsKKyAgICAgICAgICAgICAgIHwgTi0rLS0tLT4KKyAgICAgICAgICA8LS0tLSstUCB8CisgICAgICAgICAgICAgICArLS0tKworCitCZWNhdXNlIHdlIGRpZG4ndCB3YWl0IGZvciBhIGdyYWNlIHBlcmlvZCwgdGhlcmUgbWF5IGJlIGEgY29uY3VycmVudCBsb29rdXAKK3N0aWxsIGF0IDIuIE5vdyB3aGVuIGl0IGZvbGxvd3MgMidzICduZXh0JyBwb2ludGVyLCBpdCB3aWxsIHdhbGsgb2ZmIGludG8KK2Fub3RoZXIgbGlzdCB3aXRob3V0IGV2ZXIgaGF2aW5nIGNoZWNrZWQgb2JqZWN0IDMuCisKK0EgcmVsYXRlZCwgYnV0IGRpc3RpbmN0bHkgZGlmZmVyZW50LCBpc3N1ZSBpcyB0aGF0IG9mIHJlbmFtZSBhdG9taWNpdHkgdmVyc3VzCitsb29rdXAgb3BlcmF0aW9ucy4gSWYgYSBmaWxlIGlzIHJlbmFtZWQgZnJvbSAnQScgdG8gJ0InLCBhIGxvb2t1cCBtdXN0IG9ubHkKK2ZpbmQgZWl0aGVyICdBJyBvciAnQicuIFNvIGlmIGEgbG9va3VwIG9mICdBJyByZXR1cm5zIE5VTEwsIGEgc3Vic2VxdWVudCBsb29rdXAKK29mICdCJyBtdXN0IHN1Y2NlZWQgKG5vdGUgdGhlIHJldmVyc2UgaXMgbm90IHRydWUpLgorCitCZXR3ZWVuIGRlbGV0aW5nIHRoZSBkZW50cnkgZnJvbSB0aGUgb2xkIGhhc2ggbGlzdCwgYW5kIGluc2VydGluZyBpdCBvbiB0aGUgbmV3CitoYXNoIGxpc3QsIGEgbG9va3VwIG1heSBmaW5kIG5laXRoZXIgJ0EnIG5vciAnQicgbWF0Y2hpbmcgdGhlIGRlbnRyeS4gVGhlIHNhbWUKK3JlbmFtZSBzZXFsb2NrIGlzIGFsc28gdXNlZCB0byBjb3ZlciB0aGlzIHJhY2UgaW4gbXVjaCB0aGUgc2FtZSB3YXksIGJ5CityZXRyeWluZyBhIG5lZ2F0aXZlIGxvb2t1cCByZXN1bHQgaWYgYSByZW5hbWUgd2FzIGluIHByb2dyZXNzLgorCitTZXFjb3VudCBiYXNlZCBsb29rdXBzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJbiByZWZjb3VudCBiYXNlZCBkY2FjaGUgbG9va3VwcywgZF9sb2NrIGlzIHVzZWQgdG8gc2VyaWFsaXNlIGFjY2VzcyB0bwordGhlIGRlbnRyeSwgc3RhYmlsaXNpbmcgaXQgd2hpbGUgY29tcGFyaW5nIGl0cyBuYW1lIGFuZCBwYXJlbnQgYW5kIHRoZW4KK3Rha2luZyBhIHJlZmVyZW5jZSBjb3VudCAodGhlIHJlZmVyZW5jZSBjb3VudCB0aGVuIGdpdmVzIGEgc3RhYmxlIHBsYWNlIHRvCitzdGFydCB0aGUgbmV4dCBwYXJ0IG9mIHRoZSBwYXRoIHdhbGsgZnJvbSkuCisKK0FzIGV4cGxhaW5lZCBhYm92ZSwgd2Ugd291bGQgbGlrZSB0byBkbyBwYXRoIHdhbGtpbmcgd2l0aG91dCB0YWtpbmcgbG9ja3Mgb3IKK3JlZmVyZW5jZSBjb3VudHMgb24gaW50ZXJtZWRpYXRlIGRlbnRyaWVzIGFsb25nIHRoZSBwYXRoLiBUbyBkbyB0aGlzLCBhIHBlcgorZGVudHJ5IHNlcWxvY2sgKGRfc2VxKSBpcyB1c2VkIHRvIHRha2UgYSAiY29oZXJlbnQgc25hcHNob3QiIG9mIHdoYXQgdGhlIGRlbnRyeQorbG9va3MgbGlrZSAoaXRzIG5hbWUsIHBhcmVudCwgYW5kIGlub2RlKS4gVGhhdCBzbmFwc2hvdCBpcyB0aGVuIHVzZWQgdG8gc3RhcnQKK3RoZSBuZXh0IHBhcnQgb2YgdGhlIHBhdGggd2Fsay4gV2hlbiBsb2FkaW5nIHRoZSBjb2hlcmVudCBzbmFwc2hvdCB1bmRlciBkX3NlcSwKK2NhcmUgbXVzdCBiZSB0YWtlbiB0byBsb2FkIHRoZSBtZW1iZXJzIHVwLWZyb250LCBhbmQgdXNlIHRob3NlIHBvaW50ZXJzIHJhdGhlcgordGhhbiByZWxvYWRpbmcgZnJvbSB0aGUgZGVudHJ5IGxhdGVyIG9uIChvdGhlcndpc2Ugd2UnZCBoYXZlIGludGVyZXN0aW5nIHRoaW5ncworbGlrZSBkX2lub2RlIGdvaW5nIE5VTEwgdW5kZXJuZWF0aCB1cywgaWYgdGhlIG5hbWUgd2FzIHVubGlua2VkKS4KKworQWxzbyBpbXBvcnRhbnQgaXMgdG8gYXZvaWQgcGVyZm9ybWluZyBhbnkgZGVzdHJ1Y3RpdmUgb3BlcmF0aW9ucyAocHJldHR5IG11Y2g6CitubyBub24tYXRvbWljIHN0b3JlcyB0byBzaGFyZWQgZGF0YSksIGFuZCB0byByZWNoZWNrIHRoZSBzZXFjb3VudCB3aGVuIHdlIGFyZQorImRvbmUiIHdpdGggdGhlIG9wZXJhdGlvbi4gUmV0cnkgb3IgYWJvcnQgaWYgdGhlIHNlcWNvdW50IGRvZXMgbm90IG1hdGNoLgorQXZvaWRpbmcgZGVzdHJ1Y3RpdmUgb3IgY2hhbmdpbmcgb3BlcmF0aW9ucyBtZWFucyB3ZSBjYW4gZWFzaWx5IHVud2luZCBmcm9tCitmYWlsdXJlLgorCitXaGF0IHRoaXMgbWVhbnMgaXMgdGhhdCBhIGNhbGxlciwgcHJvdmlkZWQgdGhleSBhcmUgaG9sZGluZyBSQ1UgbG9jayB0bworcHJvdGVjdCB0aGUgZGVudHJ5IG9iamVjdCBmcm9tIGRpc2FwcGVhcmluZywgY2FuIHBlcmZvcm0gYSBzZXFjb3VudCBiYXNlZAorbG9va3VwIHdoaWNoIGRvZXMgbm90IGluY3JlbWVudCB0aGUgcmVmY291bnQgb24gdGhlIGRlbnRyeSBvciB3cml0ZSB0bworaXQgaW4gYW55IHdheS4gVGhpcyByZXR1cm5lZCBkZW50cnkgY2FuIGJlIHVzZWQgZm9yIHN1YnNlcXVlbnQgb3BlcmF0aW9ucywKK3Byb3ZpZGVkIHRoYXQgZF9zZXEgaXMgcmVjaGVja2VkIGFmdGVyIHRoYXQgb3BlcmF0aW9uIGlzIGNvbXBsZXRlLgorCitJbm9kZXMgYXJlIGFsc28gcmN1IGZyZWVkLCBzbyB0aGUgc2VxY291bnQgbG9va3VwIGRlbnRyeSdzIGlub2RlIG1heSBhbHNvIGJlCitxdWVyaWVkIGZvciBwZXJtaXNzaW9ucy4KKworV2l0aCB0aGlzIHR3byBwYXJ0cyBvZiB0aGUgcHV6emxlLCB3ZSBjYW4gZG8gcGF0aCBsb29rdXBzIHdpdGhvdXQgdGFraW5nCitsb2NrcyBvciByZWZjb3VudHMgb24gZGVudHJ5IGVsZW1lbnRzLgorCitSQ1Utd2FsayBwYXRoIHdhbGtpbmcgZGVzaWduCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1BhdGggd2Fsa2luZyBjb2RlIG5vdyBoYXMgdHdvIGRpc3RpbmN0IG1vZGVzLCByZWYtd2FsayBhbmQgcmN1LXdhbGsuIHJlZi13YWxrCitpcyB0aGUgdHJhZGl0aW9uYWxbKl0gd2F5IG9mIHBlcmZvcm1pbmcgZGNhY2hlIGxvb2t1cHMgdXNpbmcgZF9sb2NrIHRvCitzZXJpYWxpc2UgY29uY3VycmVudCBtb2RpZmljYXRpb25zIHRvIHRoZSBkZW50cnkgYW5kIHRha2UgYSByZWZlcmVuY2UgY291bnQgb24KK2l0LiByZWYtd2FsayBpcyBzaW1wbGUgYW5kIG9idmlvdXMsIGFuZCBtYXkgc2xlZXAsIHRha2UgbG9ja3MsIGV0YyB3aGlsZSBwYXRoCit3YWxraW5nIGlzIG9wZXJhdGluZyBvbiBlYWNoIGRlbnRyeS4gcmN1LXdhbGsgdXNlcyBzZXFjb3VudCBiYXNlZCBkZW50cnkKK2xvb2t1cHMsIGFuZCBjYW4gcGVyZm9ybSBsb29rdXAgb2YgaW50ZXJtZWRpYXRlIGVsZW1lbnRzIHdpdGhvdXQgYW55IHN0b3JlcyB0bworc2hhcmVkIGRhdGEgaW4gdGhlIGRlbnRyeSBvciBpbm9kZS4gcmN1LXdhbGsgY2FuIG5vdCBiZSBhcHBsaWVkIHRvIGFsbCBjYXNlcywKK2VnLiBpZiB0aGUgZmlsZXN5c3RlbSBtdXN0IHNsZWVwIG9yIHBlcmZvcm0gbm9uIHRyaXZpYWwgb3BlcmF0aW9ucywgcmN1LXdhbGsKK211c3QgYmUgc3dpdGNoZWQgdG8gcmVmLXdhbGsgbW9kZS4KKworWypdIFJDVSBpcyBzdGlsbCB1c2VkIGZvciB0aGUgZGVudHJ5IGhhc2ggbG9va3VwIGluIHJlZi13YWxrLCBidXQgbm90IHRoZSBmdWxsCisgICAgcGF0aCB3YWxrLgorCitXaGVyZSByZWYtd2FsayB1c2VzIGEgc3RhYmxlLCByZWZjb3VudGVkIGBgcGFyZW50JycgdG8gd2FsayB0aGUgcmVtYWluaW5nCitwYXRoIHN0cmluZywgcmN1LXdhbGsgdXNlcyBhIGRfc2VxIHByb3RlY3RlZCBzbmFwc2hvdC4gV2hlbiBsb29raW5nIHVwIGEKK2NoaWxkIG9mIHRoaXMgcGFyZW50IHNuYXBzaG90LCB3ZSBvcGVuIGRfc2VxIGNyaXRpY2FsIHNlY3Rpb24gb24gdGhlIGNoaWxkCitiZWZvcmUgY2xvc2luZyBkX3NlcSBjcml0aWNhbCBzZWN0aW9uIG9uIHRoZSBwYXJlbnQuIFRoaXMgZ2l2ZXMgYW4gaW50ZXJsb2NraW5nCitsYWRkZXIgb2Ygc25hcHNob3RzIHRvIHdhbGsgZG93bi4KKworCisgICAgIHByb2MgMTAxCisgICAgICAvLS0tLS0tLS0tLS0tLS0tLVwKKyAgICAgLyBjb21tOiAgICAidmkiICAgIFwKKyAgICAvICBmcy5yb290OiBkZW50cnkwICBcCisgICAgXCAgZnMuY3dkOiAgZGVudHJ5MiAgLworICAgICBcICAgICAgICAgICAgICAgICAgLworICAgICAgXC0tLS0tLS0tLS0tLS0tLS0vCisKK1NvIHdoZW4gdmkgd2FudHMgdG8gb3BlbigiL2hvbWUvbnBpZ2dpbi90ZXN0LmMiLCBPX1JEV1IpLCB0aGVuIGl0IHdpbGwKK3N0YXJ0IGZyb20gY3VycmVudC0+ZnMtPnJvb3QsIHdoaWNoIGlzIGEgcGlubmVkIGRlbnRyeS4gQWx0ZXJuYXRpdmVseSwKKyIuL3Rlc3QuYyIgd291bGQgc3RhcnQgZnJvbSBjd2Q7IGJvdGggbmFtZXMgcmVmZXIgdG8gdGhlIHNhbWUgcGF0aCBpbgordGhlIGNvbnRleHQgb2YgcHJvYzEwMS4KKworICAgICBkZW50cnkgMAorICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgcmN1LXdhbGsgYmVnaW5zIGhlcmUsIHdlIG5vdGUgZF9zZXEsIGNoZWNrIHRoZQorICAgIHwgbmFtZTogICAgIi8iICAgICAgICB8ICAgaW5vZGUncyBwZXJtaXNzaW9uLCBhbmQgdGhlbiBsb29rIHVwIHRoZSBuZXh0CisgICAgfCBpbm9kZTogICAxMCAgICAgICAgIHwgICBwYXRoIGVsZW1lbnQgd2hpY2ggaXMgImhvbWUiLi4uCisgICAgfCBjaGlsZHJlbjoiaG9tZSIsIC4uLnwKKyAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgICAgICB8CisgICAgIGRlbnRyeSAxIFYKKyAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgIC4uLiB3aGljaCBicmluZ3MgdXMgaGVyZS4gV2UgZmluZCBkZW50cnkxIHZpYQorICAgIHwgbmFtZTogICAgImhvbWUiICAgICB8ICAgaGFzaCBsb29rdXAsIHRoZW4gbm90ZSBkX3NlcSBhbmQgY29tcGFyZSBuYW1lCisgICAgfCBpbm9kZTogICA2NzggICAgICAgIHwgICBzdHJpbmcgYW5kIHBhcmVudCBwb2ludGVyLiBXaGVuIHdlIGhhdmUgYSBtYXRjaCwKKyAgICB8IGNoaWxkcmVuOiJucGlnZ2luIiAgfCAgIHdlIG5vdyByZWNoZWNrIHRoZSBkX3NlcSBvZiBkZW50cnkwLiBUaGVuIHdlCisgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgICBjaGVjayBpbm9kZSBhbmQgbG9vayB1cCB0aGUgbmV4dCBlbGVtZW50LgorICAgICAgICAgICAgICB8CisgICAgIGRlbnRyeTIgIFYKKyAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgIE5vdGU6IGlmIGRlbnRyeTAgaXMgbm93IG1vZGlmaWVkLCBsb29rdXAgaXMKKyAgICB8IG5hbWU6ICAgICJucGlnZ2luIiAgfCAgIG5vdCBuZWNlc3NhcmlseSBpbnZhbGlkLCBzbyB3ZSBuZWVkIG9ubHkga2VlcCBhCisgICAgfCBpbm9kZTogICA1NDMgICAgICAgIHwgICBwYXJlbnQgZm9yIGRfc2VxIHZlcmlmaWNhdGlvbiwgYW5kIGdyYW5kcGFyZW50cworICAgIHwgY2hpbGRyZW46ImEuYyIsIC4uLiB8ICAgY2FuIGJlIGZvcmdvdHRlbi4KKyAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgICAgICB8CisgICAgIGRlbnRyeTMgIFYKKyAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgIEF0IHRoaXMgcG9pbnQgd2UgaGF2ZSBvdXIgZGVzdGluYXRpb24gZGVudHJ5LgorICAgIHwgbmFtZTogICAgImEuYyIgICAgICB8ICAgV2Ugbm93IHRha2UgaXRzIGRfbG9jaywgdmVyaWZ5IGRfc2VxIG9mIHRoaXMKKyAgICB8IGlub2RlOiAgIDE0MjIxICAgICAgfCAgIGRlbnRyeS4gSWYgdGhhdCBjaGVja3Mgb3V0LCB3ZSBjYW4gaW5jcmVtZW50CisgICAgfCBjaGlsZHJlbjpOVUxMICAgICAgIHwgICBpdHMgcmVmY291bnQgYmVjYXVzZSB3ZSdyZSBob2xkaW5nIGRfbG9jay4KKyAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCitUYWtpbmcgYSByZWZjb3VudCBvbiBhIGRlbnRyeSBmcm9tIHJjdS13YWxrIG1vZGUsIGJ5IHRha2luZyBpdHMgZF9sb2NrLAorcmUtY2hlY2tpbmcgaXRzIGRfc2VxLCBhbmQgdGhlbiBpbmNyZW1lbnRpbmcgaXRzIHJlZmNvdW50IGlzIGNhbGxlZAorImRyb3BwaW5nIHJjdSIgb3IgZHJvcHBpbmcgZnJvbSByY3Utd2FsayBpbnRvIHJlZi13YWxrIG1vZGUuCisKK0l0IGlzLCBpbiBzb21lIHNlbnNlLCBhIGJpdCBvZiBhIGhvdXNlIG9mIGNhcmRzLiBJZiB0aGUgc2VxY291bnQgY2hlY2sgb2YgdGhlCitwYXJlbnQgc25hcHNob3QgZmFpbHMsIHRoZSBob3VzZSBjb21lcyBkb3duLCBiZWNhdXNlIHdlIGhhZCBjbG9zZWQgdGhlIGRfc2VxCitzZWN0aW9uIG9uIHRoZSBncmFuZHBhcmVudCwgc28gd2UgaGF2ZSBub3RoaW5nIGxlZnQgdG8gc3RhbmQgb24uIEluIHRoYXQgY2FzZSwKK3RoZSBwYXRoIHdhbGsgbXVzdCBiZSBmdWxseSByZXN0YXJ0ZWQgKHdoaWNoIHdlIGRvIGluIHJlZi13YWxrIG1vZGUsIHRvIGF2b2lkCitsaXZlIGxvY2tzKS4gSXQgaXMgY29zdGx5IHRvIGhhdmUgYSBmdWxsIHJlc3RhcnQsIGJ1dCBmb3J0dW5hdGVseSB0aGV5IGFyZQorcXVpdGUgcmFyZS4KKworV2hlbiB3ZSByZWFjaCBhIHBvaW50IHdoZXJlIHNsZWVwaW5nIGlzIHJlcXVpcmVkLCBvciBhIGZpbGVzeXN0ZW0gY2FsbG91dAorcmVxdWlyZXMgcmVmLXdhbGssIHRoZW4gaW5zdGVhZCBvZiByZXN0YXJ0aW5nIHRoZSB3YWxrLCB3ZSBhdHRlbXB0IHRvIGRyb3AgcmN1CithdCB0aGUgbGFzdCBrbm93biBnb29kIGRlbnRyeSB3ZSBoYXZlLiBBdm9pZGluZyBhIGZ1bGwgcmVzdGFydCBpbiByZWYtd2FsayBpbgordGhlc2UgY2FzZXMgaXMgZnVuZGFtZW50YWwgZm9yIHBlcmZvcm1hbmNlIGFuZCBzY2FsYWJpbGl0eSBiZWNhdXNlIGJsb2NraW5nCitvcGVyYXRpb25zIHN1Y2ggYXMgY3JlYXRlcyBhbmQgdW5saW5rcyBhcmUgbm90IHVuY29tbW9uLgorCitUaGUgZGV0YWlsZWQgZGVzaWduIGZvciByY3Utd2FsayBpcyBsaWtlIHRoaXM6CisqIExPT0tVUF9SQ1UgaXMgc2V0IGluIG5kLT5mbGFncywgd2hpY2ggZGlzdGluZ3Vpc2hlcyByY3Utd2FsayBmcm9tIHJlZi13YWxrLgorKiBUYWtlIHRoZSBSQ1UgbG9jayBmb3IgdGhlIGVudGlyZSBwYXRoIHdhbGssIHN0YXJ0aW5nIHdpdGggdGhlIGFjcXVpcmluZworICBvZiB0aGUgc3RhcnRpbmcgcGF0aCAoZWcuIHJvb3QvY3dkL2ZkLXBhdGgpLiBTbyBub3cgZGVudHJ5IHJlZmNvdW50cyBhcmUKKyAgbm90IHJlcXVpcmVkIGZvciBkZW50cnkgcGVyc2lzdGVuY2UuCisqIHN5bmNocm9uaXplX3JjdSBpcyBjYWxsZWQgd2hlbiB1bnJlZ2lzdGVyaW5nIGEgZmlsZXN5c3RlbSwgc28gd2UgY2FuCisgIGFjY2VzcyBkX29wcyBhbmQgaV9vcHMgZHVyaW5nIHJjdS13YWxrLgorKiBTaW1pbGFybHkgdGFrZSB0aGUgdmZzbW91bnQgbG9jayBmb3IgdGhlIGVudGlyZSBwYXRoIHdhbGsuIFNvIG5vdyBtbnQKKyAgcmVmY291bnRzIGFyZSBub3QgcmVxdWlyZWQgZm9yIHBlcnNpc3RlbmNlLiBBbHNvIHdlIGFyZSBmcmVlIHRvIHBlcmZvcm0gbW91bnQKKyAgbG9va3VwcywgYW5kIHRvIGFzc3VtZSBkZW50cnkgbW91bnQgcG9pbnRzIGFuZCBtb3VudCByb290cyBhcmUgc3RhYmxlIHVwIGFuZAorICBkb3duIHRoZSBwYXRoLgorKiBIYXZlIGEgcGVyLWRlbnRyeSBzZXFsb2NrIHRvIHByb3RlY3QgdGhlIGRlbnRyeSBuYW1lLCBwYXJlbnQsIGFuZCBpbm9kZSwKKyAgc28gd2UgY2FuIGxvYWQgdGhpcyB0dXBsZSBhdG9taWNhbGx5LCBhbmQgYWxzbyBjaGVjayB3aGV0aGVyIGFueSBvZiBpdHMKKyAgbWVtYmVycyBoYXZlIGNoYW5nZWQuCisqIERlbnRyeSBsb29rdXBzIChiYXNlZCBvbiBwYXJlbnQsIGNhbmRpZGF0ZSBzdHJpbmcgdHVwbGUpIHJlY2hlY2sgdGhlIHBhcmVudAorICBzZXF1ZW5jZSBhZnRlciB0aGUgY2hpbGQgaXMgZm91bmQgaW4gY2FzZSBhbnl0aGluZyBjaGFuZ2VkIGluIHRoZSBwYXJlbnQKKyAgZHVyaW5nIHRoZSBwYXRoIHdhbGsuCisqIGlub2RlIGlzIGFsc28gUkNVIHByb3RlY3RlZCBzbyB3ZSBjYW4gbG9hZCBkX2lub2RlIGFuZCB1c2UgdGhlIGlub2RlIGZvcgorICBsaW1pdGVkIHRoaW5ncy4KKyogaV9tb2RlLCBpX3VpZCwgaV9naWQgY2FuIGJlIHRlc3RlZCBmb3IgZXhlYyBwZXJtaXNzaW9ucyBkdXJpbmcgcGF0aCB3YWxrLgorKiBpX29wIGNhbiBiZSBsb2FkZWQuCisqIFdoZW4gdGhlIGRlc3RpbmF0aW9uIGRlbnRyeSBpcyByZWFjaGVkLCBkcm9wIHJjdSB0aGVyZSAoaWUuIHRha2UgZF9sb2NrLAorICB2ZXJpZnkgZF9zZXEsIGluY3JlbWVudCByZWZjb3VudCkuCisqIElmIHNlcWxvY2sgdmVyaWZpY2F0aW9uIGZhaWxzIGFueXdoZXJlIGFsb25nIHRoZSBwYXRoLCBkbyBhIGZ1bGwgcmVzdGFydAorICBvZiB0aGUgcGF0aCBsb29rdXAgaW4gcmVmLXdhbGsgbW9kZS4gLUVDSElMRCB0ZW5kcyB0byBiZSB1c2VkIChmb3Igd2FudCBvZgorICBhIGJldHRlciBlcnJubykgdG8gc2lnbmFsIGFuIHJjdS13YWxrIGZhaWx1cmUuCisKK1RoZSBjYXNlcyB3aGVyZSByY3Utd2FsayBjYW5ub3QgY29udGludWUgYXJlOgorKiBOVUxMIGRlbnRyeSAoaWUuIGFueSB1bmNhY2hlZCBwYXRoIGVsZW1lbnQpCisqIEZvbGxvd2luZyBsaW5rcworCitJdCBtYXkgYmUgcG9zc2libGUgZXZlbnR1YWxseSB0byBtYWtlIGZvbGxvd2luZyBsaW5rcyByY3Utd2FsayBhd2FyZS4KKworVW5jYWNoZWQgcGF0aCBlbGVtZW50cyB3aWxsIGFsd2F5cyByZXF1aXJlIGRyb3BwaW5nIHRvIHJlZi13YWxrIG1vZGUsIGF0IHRoZQordmVyeSBsZWFzdCBiZWNhdXNlIGlfbXV0ZXggbmVlZHMgdG8gYmUgZ3JhYmJlZCwgYW5kIG9iamVjdHMgYWxsb2NhdGVkLgorCitGaW5hbCBub3RlOgorInN0b3JlLWZyZWUiIHBhdGggd2Fsa2luZyBpcyBub3Qgc3RyaWN0bHkgc3RvcmUgZnJlZS4gV2UgdGFrZSB2ZnNtb3VudCBsb2NrCithbmQgcmVmY291bnRzIChib3RoIG9mIHdoaWNoIGNhbiBiZSBtYWRlIHBlci1jcHUpLCBhbmQgd2UgYWxzbyBzdG9yZSB0byB0aGUKK3N0YWNrICh3aGljaCBpcyBlc3NlbnRpYWxseSBDUFUtbG9jYWwpLCBhbmQgd2UgYWxzbyBoYXZlIHRvIHRha2UgbG9ja3MgYW5kCityZWZjb3VudCBvbiBmaW5hbCBkZW50cnkuCisKK1RoZSBwb2ludCBpcyB0aGF0IHNoYXJlZCBkYXRhLCB3aGVyZSBwcmFjdGljYWxseSBwb3NzaWJsZSwgaXMgbm90IGxvY2tlZAorb3Igc3RvcmVkIGludG8uIFRoZSByZXN1bHQgaXMgbWFzc2l2ZSBpbXByb3ZlbWVudHMgaW4gcGVyZm9ybWFuY2UgYW5kCitzY2FsYWJpbGl0eSBvZiBwYXRoIHJlc29sdXRpb24uCisKKworSW50ZXJlc3Rpbmcgc3RhdGlzdGljcworPT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgZm9sbG93aW5nIHRhYmxlIGdpdmVzIHJjdSBsb29rdXAgc3RhdGlzdGljcyBmb3IgYSBmZXcgc2ltcGxlIHdvcmtsb2FkcworKDJzMTJjMjR0IFdlc3RtZXJlLCBkZWJpYW4gbm9uLWdyYXBoaWNhbCBzeXN0ZW0pLiBVbmdyYWNlZnVsIGFyZSBhdHRlbXB0cyB0bworZHJvcCByY3UgdGhhdCBmYWlsIGR1ZSB0byBkX3NlcSBmYWlsdXJlIGFuZCByZXF1aXJpbmcgdGhlIGVudGlyZSBwYXRoIGxvb2t1cAorYWdhaW4uIE90aGVyIGNhc2VzIGFyZSBzdWNjZXNzZnVsIHJjdS1kcm9wcyB0aGF0IGFyZSByZXF1aXJlZCBiZWZvcmUgdGhlIGZpbmFsCitlbGVtZW50LCBub2RlbnRyeSBmb3IgbWlzc2luZyBkZW50cnksIHJldmFsaWRhdGUgZm9yIGZpbGVzeXN0ZW0gcmV2YWxpZGF0ZQorcm91dGluZSByZXF1aXJpbmcgcmN1IGRyb3AsIHBlcm1pc3Npb24gZm9yIHBlcm1pc3Npb24gY2hlY2sgcmVxdWlyaW5nIGRyb3AsCithbmQgbGluayBmb3Igc3ltbGluayB0cmF2ZXJzYWwgcmVxdWlyaW5nIGRyb3AuCisKKyAgICAgcmN1LWxvb2t1cHMgICAgIHJlc3RhcnQgIG5vZGVudHJ5ICAgICAgICAgIGxpbmsgIHJldmFsaWRhdGUgIHBlcm1pc3Npb24KK2Jvb3R1cCAgICAgNDcxMjEgICAgICAgICAgIDAgICAgICA0NjI0ICAgICAgICAgIDEwMTAgICAgICAgMTAyODMgICAgICAgIDc4NTIKK2RiZW5jaCAgMjUzODY3OTMgICAgICAgICAgIDAgICA2Nzc4NjU5KDI2LjclKSAgICAgNTUgICAgICAgICA1NDkgICAgICAgIDExNTYKK2tidWlsZCAgIDI2OTY2NzIgICAgICAgICAgMTAgICAgIDY0NDQyKDIuMyUpICAxMDg3NjQoNC4wJSkgICAgIDEgICAgICAgIDE1OTAKK2dpdCBkaWZmICAgMzk2MDUgICAgICAgICAgIDAgICAgICAgIDI4ICAgICAgICAgICAgIDIgICAgICAgICAgIDAgICAgICAgICAxMDYKK3Zmc3Rlc3QgMjQxODU0OTIgICAgICAgIDQ5NDUgICAgNzA4NzI1KDIuOSUpIDEwNzYxMzYoNC40JSkgICAgIDAgICAgICAgIDI2NTEKKworV2hhdCB0aGlzIHNob3dzIGlzIHRoYXQgZmFpbGVkIHJjdS13YWxrIGxvb2t1cHMsIGllLiBvbmVzIHRoYXQgYXJlIHJlc3RhcnRlZAorZW50aXJlbHkgd2l0aCByZWYtd2FsaywgYXJlIHF1aXRlIHJhcmUuIEV2ZW4gdGhlICJ2ZnN0ZXN0IiBjYXNlIHdoaWNoCitzcGVjaWZpY2FsbHkgaGFzIGNvbmN1cnJlbnQgcmVuYW1lcy9ta2Rpci9ybWRpci8gY3JlYXQvdW5saW5rL2V0YyB0byBleGNlcmNpc2UKK3N1Y2ggcmFjZXMgaXMgbm90IHNob3dpbmcgYSBodWdlIGFtb3VudCBvZiByZXN0YXJ0cy4KKworRHJvcHBpbmcgZnJvbSByY3Utd2FsayB0byByZWYtd2FsayBtZWFuIHRoYXQgd2UgaGF2ZSBlbmNvdW50ZXJlZCBhIGRlbnRyeSB3aGVyZQordGhlIHJlZmVyZW5jZSBjb3VudCBuZWVkcyB0byBiZSB0YWtlbiBmb3Igc29tZSByZWFzb24uIFRoaXMgaXMgZWl0aGVyIGJlY2F1c2UKK3dlIGhhdmUgcmVhY2hlZCB0aGUgdGFyZ2V0IG9mIHRoZSBwYXRoIHdhbGssIG9yIGJlY2F1c2Ugd2UgaGF2ZSBlbmNvdW50ZXJlZCBhCitjb25kaXRpb24gdGhhdCBjYW4ndCBiZSByZXNvbHZlZCBpbiByY3Utd2FsayBtb2RlLiAgSWRlYWxseSwgd2UgZHJvcCByY3Utd2Fsaworb25seSB3aGVuIHdlIGhhdmUgcmVhY2hlZCB0aGUgdGFyZ2V0IGRlbnRyeSwgc28gdGhlIG90aGVyIHN0YXRpc3RpY3Mgc2hvdyB3aGVyZQordGhpcyBkb2VzIG5vdCBoYXBwZW4uCisKK05vdGUgdGhhdCBhIGdyYWNlZnVsIGRyb3AgZnJvbSByY3Utd2FsayBtb2RlIGR1ZSB0byBzb21ldGhpbmcgc3VjaCBhcyB0aGUKK2RlbnRyeSBub3QgZXhpc3RpbmcgKHdoaWNoIGNhbiBiZSBjb21tb24pIGlzIG5vdCBuZWNlc3NhcmlseSBhIGZhaWx1cmUgb2YKK3JjdS13YWxrIHNjaGVtZSwgYmVjYXVzZSBzb21lIGVsZW1lbnRzIG9mIHRoZSBwYXRoIG1heSBoYXZlIGJlZW4gd2Fsa2VkIGluCityY3Utd2FsayBtb2RlLiBUaGUgZnVydGhlciB3ZSBnZXQgZnJvbSBjb21tb24gcGF0aCBlbGVtZW50cyAoc3VjaCBhcyBjd2Qgb3IKK3Jvb3QpLCB0aGUgbGVzcyBjb250ZW5kZWQgdGhlIGRlbnRyeSBpcyBsaWtlbHkgdG8gYmUuIFRoZSBjbG9zZXIgd2UgYXJlIHRvCitjb21tb24gcGF0aCBlbGVtZW50cywgdGhlIG1vcmUgbGlrZWx5IHRoZXkgd2lsbCBleGlzdCBpbiBkZW50cnkgY2FjaGUuCisKKworUGFwZXJzIGFuZCBvdGhlciBkb2N1bWVudGF0aW9uIG9uIGRjYWNoZSBsb2NraW5nCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworMS4gU2NhbGluZyBkY2FjaGUgd2l0aCBSQ1UgKGh0dHA6Ly9saW51eGpvdXJuYWwuY29tL2FydGljbGUucGhwP3NpZD03MTI0KS4KKworMi4gaHR0cDovL2xzZS5zb3VyY2Vmb3JnZS5uZXQvbG9ja2luZy9kY2FjaGUvZGNhY2hlLmh0bWwKKworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcKaW5kZXggYjEyYzg5NS4uMDdhMzJiNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nCisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZwpAQCAtMjE2LDcgKzIxNiw2IEBACiAtPmRfcGFyZW50IGNoYW5nZXMgYXJlIG5vdCBwcm90ZWN0ZWQgYnkgQktMIGFueW1vcmUuICBSZWFkIGFjY2VzcyBpcyBzYWZlCiBpZiBhdCBsZWFzdCBvbmUgb2YgdGhlIGZvbGxvd2luZyBpcyB0cnVlOgogCSogZmlsZXN5c3RlbSBoYXMgbm8gY3Jvc3MtZGlyZWN0b3J5IHJlbmFtZSgpCi0JKiBkY2FjaGVfbG9jayBpcyBoZWxkCiAJKiB3ZSBrbm93IHRoYXQgcGFyZW50IGhhZCBiZWVuIGxvY2tlZCAoZS5nLiB3ZSBhcmUgbG9va2luZyBhdAogLT5kX3BhcmVudCBvZiAtPmxvb2t1cCgpIGFyZ3VtZW50KS4KIAkqIHdlIGFyZSBjYWxsZWQgZnJvbSAtPnJlbmFtZSgpLgpAQCAtMzE4LDMgKzMxNyw3MSBAQAogbWF5IGhhcHBlbiB3aGlsZSB0aGUgaW5vZGUgaXMgaW4gdGhlIG1pZGRsZSBvZiAtPndyaXRlX2lub2RlKCk7IGUuZy4gaWYgeW91IGJsaW5kbHkKIGZyZWUgdGhlIG9uLWRpc2sgaW5vZGUsIHlvdSBtYXkgZW5kIHVwIGRvaW5nIHRoYXQgd2hpbGUgLT53cml0ZV9pbm9kZSgpIGlzIHdyaXRpbmcKIHRvIGl0LgorCistLS0KK1ttYW5kYXRvcnldCisKKwkuZF9kZWxldGUoKSBub3cgb25seSBhZHZpc2VzIHRoZSBkY2FjaGUgYXMgdG8gd2hldGhlciBvciBub3QgdG8gY2FjaGUKK3VucmVmZXJlbmNlZCBkZW50cmllcywgYW5kIGlzIG5vdyBvbmx5IGNhbGxlZCB3aGVuIHRoZSBkZW50cnkgcmVmY291bnQgZ29lcyB0bworMC4gRXZlbiBvbiAwIHJlZmNvdW50IHRyYW5zaXRpb24sIGl0IG11c3QgYmUgYWJsZSB0byB0b2xlcmF0ZSBiZWluZyBjYWxsZWQgMCwKKzEsIG9yIG1vcmUgdGltZXMgKGVnLiBjb25zdGFudCwgaWRlbXBvdGVudCkuCisKKy0tLQorW21hbmRhdG9yeV0KKworCS5kX2NvbXBhcmUoKSBjYWxsaW5nIGNvbnZlbnRpb24gYW5kIGxvY2tpbmcgcnVsZXMgYXJlIHNpZ25pZmljYW50bHkKK2NoYW5nZWQuIFJlYWQgdXBkYXRlZCBkb2N1bWVudGF0aW9uIGluIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnR4dCAoYW5kCitsb29rIGF0IGV4YW1wbGVzIG9mIG90aGVyIGZpbGVzeXN0ZW1zKSBmb3IgZ3VpZGFuY2UuCisKKy0tLQorW21hbmRhdG9yeV0KKworCS5kX2hhc2goKSBjYWxsaW5nIGNvbnZlbnRpb24gYW5kIGxvY2tpbmcgcnVsZXMgYXJlIHNpZ25pZmljYW50bHkKK2NoYW5nZWQuIFJlYWQgdXBkYXRlZCBkb2N1bWVudGF0aW9uIGluIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnR4dCAoYW5kCitsb29rIGF0IGV4YW1wbGVzIG9mIG90aGVyIGZpbGVzeXN0ZW1zKSBmb3IgZ3VpZGFuY2UuCisKKy0tLQorW21hbmRhdG9yeV0KKwlkY2FjaGVfbG9jayBpcyBnb25lLCByZXBsYWNlZCBieSBmaW5lIGdyYWluZWQgbG9ja3MuIFNlZSBmcy9kY2FjaGUuYworZm9yIGRldGFpbHMgb2Ygd2hhdCBsb2NrcyB0byByZXBsYWNlIGRjYWNoZV9sb2NrIHdpdGggaW4gb3JkZXIgdG8gcHJvdGVjdAorcGFydGljdWxhciB0aGluZ3MuIE1vc3Qgb2YgdGhlIHRpbWUsIGEgZmlsZXN5c3RlbSBvbmx5IG5lZWRzIC0+ZF9sb2NrLCB3aGljaAorcHJvdGVjdHMgKmFsbCogdGhlIGRjYWNoZSBzdGF0ZSBvZiBhIGdpdmVuIGRlbnRyeS4KKworLS0KK1ttYW5kYXRvcnldCisKKwlGaWxlc3lzdGVtcyBtdXN0IFJDVS1mcmVlIHRoZWlyIGlub2RlcywgaWYgdGhleSBjYW4gaGF2ZSBiZWVuIGFjY2Vzc2VkCit2aWEgcmN1LXdhbGsgcGF0aCB3YWxrIChiYXNpY2FsbHksIGlmIHRoZSBmaWxlIGNhbiBoYXZlIGhhZCBhIHBhdGggbmFtZSBpbiB0aGUKK3ZmcyBuYW1lc3BhY2UpLgorCisJaV9kZW50cnkgYW5kIGlfcmN1IHNoYXJlIHN0b3JhZ2UgaW4gYSB1bmlvbiwgYW5kIHRoZSB2ZnMgZXhwZWN0cworaV9kZW50cnkgdG8gYmUgcmVpbml0aWFsaXplZCBiZWZvcmUgaXQgaXMgZnJlZWQsIHNvIGFuOgorCisgIElOSVRfTElTVF9IRUFEKCZpbm9kZS0+aV9kZW50cnkpOworCittdXN0IGJlIGRvbmUgaW4gdGhlIFJDVSBjYWxsYmFjay4KKworLS0KK1tyZWNvbW1lbmRlZF0KKwl2ZnMgbm93IHRyaWVzIHRvIGRvIHBhdGggd2Fsa2luZyBpbiAicmN1LXdhbGsgbW9kZSIsIHdoaWNoIGF2b2lkcworYXRvbWljIG9wZXJhdGlvbnMgYW5kIHNjYWxhYmlsaXR5IGhhemFyZHMgb24gZGVudHJpZXMgYW5kIGlub2RlcyAoc2VlCitEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BhdGgtd2Fsay50eHQpLiBkX2hhc2ggYW5kIGRfY29tcGFyZSBjaGFuZ2VzIChhYm92ZSkKK2FyZSBleGFtcGxlcyBvZiB0aGUgY2hhbmdlcyByZXF1aXJlZCB0byBzdXBwb3J0IHRoaXMuIEZvciBtb3JlIGNvbXBsZXgKK2ZpbGVzeXN0ZW0gY2FsbGJhY2tzLCB0aGUgdmZzIGRyb3BzIG91dCBvZiByY3Utd2FsayBtb2RlIGJlZm9yZSB0aGUgZnMgY2FsbCwgc28KK25vIGNoYW5nZXMgYXJlIHJlcXVpcmVkIHRvIHRoZSBmaWxlc3lzdGVtLiBIb3dldmVyLCB0aGlzIGlzIGNvc3RseSBhbmQgbG9zZXMKK3RoZSBiZW5lZml0cyBvZiByY3Utd2FsayBtb2RlLiBXZSB3aWxsIGJlZ2luIHRvIGFkZCBmaWxlc3lzdGVtIGNhbGxiYWNrcyB0aGF0CithcmUgcmN1LXdhbGsgYXdhcmUsIHNob3duIGJlbG93LiBGaWxlc3lzdGVtcyBzaG91bGQgdGFrZSBhZHZhbnRhZ2Ugb2YgdGhpcword2hlcmUgcG9zc2libGUuCisKKy0tCitbbWFuZGF0b3J5XQorCWRfcmV2YWxpZGF0ZSBpcyBhIGNhbGxiYWNrIHRoYXQgaXMgbWFkZSBvbiBldmVyeSBwYXRoIGVsZW1lbnQgKGlmCit0aGUgZmlsZXN5c3RlbSBwcm92aWRlcyBpdCksIHdoaWNoIHJlcXVpcmVzIGRyb3BwaW5nIG91dCBvZiByY3Utd2FsayBtb2RlLiBUaGlzCittYXkgbm93IGJlIGNhbGxlZCBpbiByY3Utd2FsayBtb2RlIChuZC0+ZmxhZ3MgJiBMT09LVVBfUkNVKS4gLUVDSElMRCBzaG91bGQgYmUKK3JldHVybmVkIGlmIHRoZSBmaWxlc3lzdGVtIGNhbm5vdCBoYW5kbGUgcmN1LXdhbGsuIFNlZQorRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMudHh0IGZvciBtb3JlIGRldGFpbHMuCisKKwlwZXJtaXNzaW9uIGFuZCBjaGVja19hY2wgYXJlIGlub2RlIHBlcm1pc3Npb24gY2hlY2tzIHRoYXQgYXJlIGNhbGxlZAorb24gbWFueSBvciBhbGwgZGlyZWN0b3J5IGlub2RlcyBvbiB0aGUgd2F5IGRvd24gYSBwYXRoIHdhbGsgKHRvIGNoZWNrIGZvcgorZXhlYyBwZXJtaXNzaW9uKS4gVGhlc2UgbXVzdCBub3cgYmUgcmN1LXdhbGsgYXdhcmUgKGZsYWdzICYgSVBFUk1fUkNVKS4gU2VlCitEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy50eHQgZm9yIG1vcmUgZGV0YWlscy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MudHh0CmluZGV4IGU3M2RmMjcuLjk0NzEyMjUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnR4dApAQCAtMTE4MSw2ICsxMTgxLDMwIEBACiAgbWJfZ3JvdXBzICAgICAgIGRldGFpbHMgb2YgbXVsdGlibG9jayBhbGxvY2F0b3IgYnVkZHkgY2FjaGUgb2YgZnJlZSBibG9ja3MKIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCisyLjAgL3Byb2MvY29uc29sZXMKKy0tLS0tLS0tLS0tLS0tLS0tLQorU2hvd3MgcmVnaXN0ZXJlZCBzeXN0ZW0gY29uc29sZSBsaW5lcy4KKworVG8gc2VlIHdoaWNoIGNoYXJhY3RlciBkZXZpY2UgbGluZXMgYXJlIGN1cnJlbnRseSB1c2VkIGZvciB0aGUgc3lzdGVtIGNvbnNvbGUKKy9kZXYvY29uc29sZSwgeW91IG1heSBzaW1wbHkgbG9vayBpbnRvIHRoZSBmaWxlIC9wcm9jL2NvbnNvbGVzOgorCisgID4gY2F0IC9wcm9jL2NvbnNvbGVzCisgIHR0eTAgICAgICAgICAgICAgICAgIC1XVSAoRUNwKSAgICAgICA0OjcKKyAgdHR5UzAgICAgICAgICAgICAgICAgLVctIChFcCkgICAgICAgIDQ6NjQKKworVGhlIGNvbHVtbnMgYXJlOgorCisgIGRldmljZSAgICAgICAgICAgICAgIG5hbWUgb2YgdGhlIGRldmljZQorICBvcGVyYXRpb25zICAgICAgICAgICBSID0gY2FuIGRvIHJlYWQgb3BlcmF0aW9ucworICAgICAgICAgICAgICAgICAgICAgICBXID0gY2FuIGRvIHdyaXRlIG9wZXJhdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgICAgVSA9IGNhbiBkbyB1bmJsYW5rCisgIGZsYWdzICAgICAgICAgICAgICAgIEUgPSBpdCBpcyBlbmFibGVkCisgICAgICAgICAgICAgICAgICAgICAgIEMgPSBpdCBpcyBwcmVmZXJlZCBjb25zb2xlCisgICAgICAgICAgICAgICAgICAgICAgIEIgPSBpdCBpcyBwcmltYXJ5IGJvb3QgY29uc29sZQorICAgICAgICAgICAgICAgICAgICAgICBwID0gaXQgaXMgdXNlZCBmb3IgcHJpbnRrIGJ1ZmZlcgorICAgICAgICAgICAgICAgICAgICAgICBiID0gaXQgaXMgbm90IGEgVFRZIGJ1dCBhIEJyYWlsbGUgZGV2aWNlCisgICAgICAgICAgICAgICAgICAgICAgIGEgPSBpdCBpcyBzYWZlIHRvIHVzZSB3aGVuIGNwdSBpcyBvZmZsaW5lCisgIG1ham9yOm1pbm9yICAgICAgICAgIG1ham9yIGFuZCBtaW5vciBudW1iZXIgb2YgdGhlIGRldmljZSBzZXBhcmF0ZWQgYnkgYSBjb2xvbgogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFN1bW1hcnkKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnR4dAppbmRleCAyMDg5OWUwLi5mYmIzMjRlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMudHh0CkBAIC0zMjUsNyArMzI1LDggQEAKICAgICAgICAgdm9pZCAqICgqZm9sbG93X2xpbmspIChzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBuYW1laWRhdGEgKik7CiAgICAgICAgIHZvaWQgKCpwdXRfbGluaykgKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IG5hbWVpZGF0YSAqLCB2b2lkICopOwogCXZvaWQgKCp0cnVuY2F0ZSkgKHN0cnVjdCBpbm9kZSAqKTsKLQlpbnQgKCpwZXJtaXNzaW9uKSAoc3RydWN0IGlub2RlICosIGludCwgc3RydWN0IG5hbWVpZGF0YSAqKTsKKwlpbnQgKCpwZXJtaXNzaW9uKSAoc3RydWN0IGlub2RlICosIGludCwgdW5zaWduZWQgaW50KTsKKwlpbnQgKCpjaGVja19hY2wpKHN0cnVjdCBpbm9kZSAqLCBpbnQsIHVuc2lnbmVkIGludCk7CiAJaW50ICgqc2V0YXR0cikgKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGlhdHRyICopOwogCWludCAoKmdldGF0dHIpIChzdHJ1Y3QgdmZzbW91bnQgKm1udCwgc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3Qga3N0YXQgKik7CiAJaW50ICgqc2V0eGF0dHIpIChzdHJ1Y3QgZGVudHJ5ICosIGNvbnN0IGNoYXIgKixjb25zdCB2b2lkICosc2l6ZV90LGludCk7CkBAIC00MTQsNiArNDE1LDEzIEBACiAgIHBlcm1pc3Npb246IGNhbGxlZCBieSB0aGUgVkZTIHRvIGNoZWNrIGZvciBhY2Nlc3MgcmlnaHRzIG9uIGEgUE9TSVgtbGlrZQogICAJZmlsZXN5c3RlbS4KIAorCU1heSBiZSBjYWxsZWQgaW4gcmN1LXdhbGsgbW9kZSAoZmxhZ3MgJiBJUEVSTV9SQ1UpLiBJZiBpbiByY3Utd2FsaworCW1vZGUsIHRoZSBmaWxlc3lzdGVtIG11c3QgY2hlY2sgdGhlIHBlcm1pc3Npb24gd2l0aG91dCBibG9ja2luZyBvcgorCXN0b3JpbmcgdG8gdGhlIGlub2RlLgorCisJSWYgYSBzaXR1YXRpb24gaXMgZW5jb3VudGVyZWQgdGhhdCByY3Utd2FsayBjYW5ub3QgaGFuZGxlLCByZXR1cm4KKwktRUNISUxEIGFuZCBpdCB3aWxsIGJlIGNhbGxlZCBhZ2FpbiBpbiByZWYtd2FsayBtb2RlLgorCiAgIHNldGF0dHI6IGNhbGxlZCBieSB0aGUgVkZTIHRvIHNldCBhdHRyaWJ1dGVzIGZvciBhIGZpbGUuIFRoaXMgbWV0aG9kCiAgIAlpcyBjYWxsZWQgYnkgY2htb2QoMikgYW5kIHJlbGF0ZWQgc3lzdGVtIGNhbGxzLgogCkBAIC04NDcsOSArODU1LDEyIEBACiAKIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyB7CiAJaW50ICgqZF9yZXZhbGlkYXRlKShzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBuYW1laWRhdGEgKik7Ci0JaW50ICgqZF9oYXNoKSAoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgcXN0ciAqKTsKLQlpbnQgKCpkX2NvbXBhcmUpIChzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBxc3RyICosIHN0cnVjdCBxc3RyICopOwotCWludCAoKmRfZGVsZXRlKShzdHJ1Y3QgZGVudHJ5ICopOworCWludCAoKmRfaGFzaCkoY29uc3Qgc3RydWN0IGRlbnRyeSAqLCBjb25zdCBzdHJ1Y3QgaW5vZGUgKiwKKwkJCXN0cnVjdCBxc3RyICopOworCWludCAoKmRfY29tcGFyZSkoY29uc3Qgc3RydWN0IGRlbnRyeSAqLCBjb25zdCBzdHJ1Y3QgaW5vZGUgKiwKKwkJCWNvbnN0IHN0cnVjdCBkZW50cnkgKiwgY29uc3Qgc3RydWN0IGlub2RlICosCisJCQl1bnNpZ25lZCBpbnQsIGNvbnN0IGNoYXIgKiwgY29uc3Qgc3RydWN0IHFzdHIgKik7CisJaW50ICgqZF9kZWxldGUpKGNvbnN0IHN0cnVjdCBkZW50cnkgKik7CiAJdm9pZCAoKmRfcmVsZWFzZSkoc3RydWN0IGRlbnRyeSAqKTsKIAl2b2lkICgqZF9pcHV0KShzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBpbm9kZSAqKTsKIAljaGFyICooKmRfZG5hbWUpKHN0cnVjdCBkZW50cnkgKiwgY2hhciAqLCBpbnQpOwpAQCAtODYwLDEzICs4NzEsNDUgQEAKIAlkY2FjaGUuIE1vc3QgZmlsZXN5c3RlbXMgbGVhdmUgdGhpcyBhcyBOVUxMLCBiZWNhdXNlIGFsbCB0aGVpcgogCWRlbnRyaWVzIGluIHRoZSBkY2FjaGUgYXJlIHZhbGlkCiAKLSAgZF9oYXNoOiBjYWxsZWQgd2hlbiB0aGUgVkZTIGFkZHMgYSBkZW50cnkgdG8gdGhlIGhhc2ggdGFibGUKKwlkX3JldmFsaWRhdGUgbWF5IGJlIGNhbGxlZCBpbiByY3Utd2FsayBtb2RlIChuZC0+ZmxhZ3MgJiBMT09LVVBfUkNVKS4KKwlJZiBpbiByY3Utd2FsayBtb2RlLCB0aGUgZmlsZXN5c3RlbSBtdXN0IHJldmFsaWRhdGUgdGhlIGRlbnRyeSB3aXRob3V0CisJYmxvY2tpbmcgb3Igc3RvcmluZyB0byB0aGUgZGVudHJ5LCBkX3BhcmVudCBhbmQgZF9pbm9kZSBzaG91bGQgbm90IGJlCisJdXNlZCB3aXRob3V0IGNhcmUgKGJlY2F1c2UgdGhleSBjYW4gZ28gTlVMTCksIGluc3RlYWQgbmQtPmlub2RlIHNob3VsZAorCWJlIHVzZWQuCiAKLSAgZF9jb21wYXJlOiBjYWxsZWQgd2hlbiBhIGRlbnRyeSBzaG91bGQgYmUgY29tcGFyZWQgd2l0aCBhbm90aGVyCisJSWYgYSBzaXR1YXRpb24gaXMgZW5jb3VudGVyZWQgdGhhdCByY3Utd2FsayBjYW5ub3QgaGFuZGxlLCByZXR1cm4KKwktRUNISUxEIGFuZCBpdCB3aWxsIGJlIGNhbGxlZCBhZ2FpbiBpbiByZWYtd2FsayBtb2RlLgogCi0gIGRfZGVsZXRlOiBjYWxsZWQgd2hlbiB0aGUgbGFzdCByZWZlcmVuY2UgdG8gYSBkZW50cnkgaXMKLQlkZWxldGVkLiBUaGlzIG1lYW5zIG5vLW9uZSBpcyB1c2luZyB0aGUgZGVudHJ5LCBob3dldmVyIGl0IGlzCi0Jc3RpbGwgdmFsaWQgYW5kIGluIHRoZSBkY2FjaGUKKyAgZF9oYXNoOiBjYWxsZWQgd2hlbiB0aGUgVkZTIGFkZHMgYSBkZW50cnkgdG8gdGhlIGhhc2ggdGFibGUuIFRoZSBmaXJzdAorCWRlbnRyeSBwYXNzZWQgdG8gZF9oYXNoIGlzIHRoZSBwYXJlbnQgZGlyZWN0b3J5IHRoYXQgdGhlIG5hbWUgaXMKKwl0byBiZSBoYXNoZWQgaW50by4gVGhlIGlub2RlIGlzIHRoZSBkZW50cnkncyBpbm9kZS4KKworCVNhbWUgbG9ja2luZyBhbmQgc3luY2hyb25pc2F0aW9uIHJ1bGVzIGFzIGRfY29tcGFyZSByZWdhcmRpbmcKKwl3aGF0IGlzIHNhZmUgdG8gZGVyZWZlcmVuY2UgZXRjLgorCisgIGRfY29tcGFyZTogY2FsbGVkIHRvIGNvbXBhcmUgYSBkZW50cnkgbmFtZSB3aXRoIGEgZ2l2ZW4gbmFtZS4gVGhlIGZpcnN0CisJZGVudHJ5IGlzIHRoZSBwYXJlbnQgb2YgdGhlIGRlbnRyeSB0byBiZSBjb21wYXJlZCwgdGhlIHNlY29uZCBpcworCXRoZSBwYXJlbnQncyBpbm9kZSwgdGhlbiB0aGUgZGVudHJ5IGFuZCBpbm9kZSAobWF5IGJlIE5VTEwpIG9mIHRoZQorCWNoaWxkIGRlbnRyeS4gbGVuIGFuZCBuYW1lIHN0cmluZyBhcmUgcHJvcGVydGllcyBvZiB0aGUgZGVudHJ5IHRvIGJlCisJY29tcGFyZWQuIHFzdHIgaXMgdGhlIG5hbWUgdG8gY29tcGFyZSBpdCB3aXRoLgorCisJTXVzdCBiZSBjb25zdGFudCBhbmQgaWRlbXBvdGVudCwgYW5kIHNob3VsZCBub3QgdGFrZSBsb2NrcyBpZgorCXBvc3NpYmxlLCBhbmQgc2hvdWxkIG5vdCBvciBzdG9yZSBpbnRvIHRoZSBkZW50cnkgb3IgaW5vZGVzLgorCVNob3VsZCBub3QgZGVyZWZlcmVuY2UgcG9pbnRlcnMgb3V0c2lkZSB0aGUgZGVudHJ5IG9yIGlub2RlcyB3aXRob3V0CisJbG90cyBvZiBjYXJlIChlZy4gIGRfcGFyZW50LCBkX2lub2RlLCBkX25hbWUgc2hvdWxkIG5vdCBiZSB1c2VkKS4KKworCUhvd2V2ZXIsIG91ciB2ZnNtb3VudCBpcyBwaW5uZWQsIGFuZCBSQ1UgaGVsZCwgc28gdGhlIGRlbnRyaWVzIGFuZAorCWlub2RlcyB3b24ndCBkaXNhcHBlYXIsIG5laXRoZXIgd2lsbCBvdXIgc2Igb3IgZmlsZXN5c3RlbSBtb2R1bGUuCisJLT5pX3NiIGFuZCAtPmRfc2IgbWF5IGJlIHVzZWQuCisKKwlJdCBpcyBhIHRyaWNreSBjYWxsaW5nIGNvbnZlbnRpb24gYmVjYXVzZSBpdCBuZWVkcyB0byBiZSBjYWxsZWQgdW5kZXIKKwkicmN1LXdhbGsiLCBpZS4gd2l0aG91dCBhbnkgbG9ja3Mgb3IgcmVmZXJlbmNlcyBvbiB0aGluZ3MuCisKKyAgZF9kZWxldGU6IGNhbGxlZCB3aGVuIHRoZSBsYXN0IHJlZmVyZW5jZSB0byBhIGRlbnRyeSBpcyBkcm9wcGVkIGFuZCB0aGUKKwlkY2FjaGUgaXMgZGVjaWRpbmcgd2hldGhlciBvciBub3QgdG8gY2FjaGUgaXQuIFJldHVybiAxIHRvIGRlbGV0ZQorCWltbWVkaWF0ZWx5LCBvciAwIHRvIGNhY2hlIHRoZSBkZW50cnkuIERlZmF1bHQgaXMgTlVMTCB3aGljaCBtZWFucyB0bworCWFsd2F5cyBjYWNoZSBhIHJlYWNoYWJsZSBkZW50cnkuIGRfZGVsZXRlIG11c3QgYmUgY29uc3RhbnQgYW5kCisJaWRlbXBvdGVudC4KIAogICBkX3JlbGVhc2U6IGNhbGxlZCB3aGVuIGEgZGVudHJ5IGlzIHJlYWxseSBkZWFsbG9jYXRlZAogCkBAIC05MTAsMTQgKzk1MywxMSBAQAogCXRoZSB1c2FnZSBjb3VudCkKIAogICBkcHV0OiBjbG9zZSBhIGhhbmRsZSBmb3IgYSBkZW50cnkgKGRlY3JlbWVudHMgdGhlIHVzYWdlIGNvdW50KS4gSWYKLQl0aGUgdXNhZ2UgY291bnQgZHJvcHMgdG8gMCwgdGhlICJkX2RlbGV0ZSIgbWV0aG9kIGlzIGNhbGxlZAotCWFuZCB0aGUgZGVudHJ5IGlzIHBsYWNlZCBvbiB0aGUgdW51c2VkIGxpc3QgaWYgdGhlIGRlbnRyeSBpcwotCXN0aWxsIGluIGl0cyBwYXJlbnRzIGhhc2ggbGlzdC4gUHV0dGluZyB0aGUgZGVudHJ5IG9uIHRoZQotCXVudXNlZCBsaXN0IGp1c3QgbWVhbnMgdGhhdCBpZiB0aGUgc3lzdGVtIG5lZWRzIHNvbWUgUkFNLCBpdAotCWdvZXMgdGhyb3VnaCB0aGUgdW51c2VkIGxpc3Qgb2YgZGVudHJpZXMgYW5kIGRlYWxsb2NhdGVzIHRoZW0uCi0JSWYgdGhlIGRlbnRyeSBoYXMgYWxyZWFkeSBiZWVuIHVuaGFzaGVkIGFuZCB0aGUgdXNhZ2UgY291bnQKLQlkcm9wcyB0byAwLCBpbiB0aGlzIGNhc2UgdGhlIGRlbnRyeSBpcyBkZWFsbG9jYXRlZCBhZnRlciB0aGUKLQkiZF9kZWxldGUiIG1ldGhvZCBpcyBjYWxsZWQKKwl0aGUgdXNhZ2UgY291bnQgZHJvcHMgdG8gMCwgYW5kIHRoZSBkZW50cnkgaXMgc3RpbGwgaW4gaXRzCisJcGFyZW50J3MgaGFzaCwgdGhlICJkX2RlbGV0ZSIgbWV0aG9kIGlzIGNhbGxlZCB0byBjaGVjayB3aGV0aGVyCisJaXQgc2hvdWxkIGJlIGNhY2hlZC4gSWYgaXQgc2hvdWxkIG5vdCBiZSBjYWNoZWQsIG9yIGlmIHRoZSBkZW50cnkKKwlpcyBub3QgaGFzaGVkLCBpdCBpcyBkZWxldGVkLiBPdGhlcndpc2UgY2FjaGVkIGRlbnRyaWVzIGFyZSBwdXQKKwlpbnRvIGFuIExSVSBsaXN0IHRvIGJlIHJlY2xhaW1lZCBvbiBtZW1vcnkgc2hvcnRhZ2UuCiAKICAgZF9kcm9wOiB0aGlzIHVuaGFzaGVzIGEgZGVudHJ5IGZyb20gaXRzIHBhcmVudHMgaGFzaCBsaXN0LiBBCiAJc3Vic2VxdWVudCBjYWxsIHRvIGRwdXQoKSB3aWxsIGRlYWxsb2NhdGUgdGhlIGRlbnRyeSBpZiBpdHMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaW5wdXQvY21hMzAwMF9kMHgudHh0IGIvRG9jdW1lbnRhdGlvbi9pbnB1dC9jbWEzMDAwX2QweC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjlkMDg4ZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaW5wdXQvY21hMzAwMF9kMHgudHh0CkBAIC0wLDAgKzEsMTE1IEBACitLZXJuZWwgZHJpdmVyIGZvciBDTUEzMDAwLUQweAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitTdXBwb3J0ZWQgY2hpcHM6CisqIFZUSSBDTUEzMDAwLUQweAorRGF0YXNoZWV0OgorICBDTUEzMDAwLUQwWCBQcm9kdWN0IEZhbWlseSBTcGVjaWZpY2F0aW9uIDgyODEwMDBBLjAyLnBkZgorICA8aHR0cDovL3d3dy52dGkuZmkvZW4vPgorCitBdXRob3I6IEhlbWFudGggViA8aGVtYW50aHZAdGkuY29tPgorCisKK0Rlc2NyaXB0aW9uCistLS0tLS0tLS0tLQorQ01BMzAwMCBUcmktYXhpcyBhY2NlbGVyb21ldGVyIHN1cHBvcnRzIE1vdGlvbiBkZXRlY3QsIE1lYXN1cmVtZW50IGFuZAorRnJlZSBmYWxsIG1vZGVzLgorCitNb3Rpb24gRGV0ZWN0IE1vZGU6IEl0cyB0aGUgbG93IHBvd2VyIG1vZGUgd2hlcmUgaW50ZXJydXB0cyBhcmUgZ2VuZXJhdGVkIG9ubHkKK3doZW4gbW90aW9uIGV4Y2VlZHMgdGhlIGRlZmluZWQgdGhyZXNob2xkcy4KKworTWVhc3VyZW1lbnQgTW9kZTogVGhpcyBtb2RlIGlzIHVzZWQgdG8gcmVhZCB0aGUgYWNjZWxlcmF0aW9uIGRhdGEgb24gWCxZLFoKK2F4aXMgYW5kIHN1cHBvcnRzIDQwMCwgMTAwLCA0MCBIeiBzYW1wbGUgZnJlcXVlbmN5LgorCitGcmVlIGZhbGwgTW9kZTogVGhpcyBtb2RlIGlzIGludGVuZGVkIHRvIHNhdmUgc3lzdGVtIHJlc291cmNlcy4KKworVGhyZXNob2xkIHZhbHVlczogQ2hpcCBzdXBwb3J0cyBkZWZpbmluZyB0aHJlc2hvbGQgdmFsdWVzIGZvciBhYm92ZSBtb2Rlcword2hpY2ggaW5jbHVkZXMgdGltZSBhbmQgZyB2YWx1ZS4gUmVmZXIgcHJvZHVjdCBzcGVjaWZpY2F0aW9ucyBmb3IgbW9yZSBkZXRhaWxzLgorCitDTUEzMDAwIGNoaXAgc3VwcG9ydHMgbXV0dWFsbHkgZXhjbHVzaXZlIEkyQyBhbmQgU1BJIGludGVyZmFjZXMgZm9yCitjb21tdW5pY2F0aW9uLCBjdXJyZW50bHkgdGhlIGRyaXZlciBzdXBwb3J0cyBJMkMgYmFzZWQgY29tbXVuaWNhdGlvbiBvbmx5LgorSW5pdGlhbCBjb25maWd1cmF0aW9uIGZvciBidXMgbW9kZSBpcyBzZXQgaW4gbm9uIHZvbGF0aWxlIG1lbW9yeSBhbmQgY2FuIGxhdGVyCitiZSBtb2RpZmllZCB0aHJvdWdoIGJ1cyBpbnRlcmZhY2UgY29tbWFuZC4KKworRHJpdmVyIHJlcG9ydHMgYWNjZWxlcmF0aW9uIGRhdGEgdGhyb3VnaCBpbnB1dCBzdWJzeXN0ZW0uIEl0IGdlbmVyYXRlcyBBQlNfTUlTQworZXZlbnQgd2l0aCB2YWx1ZSAxIHdoZW4gZnJlZSBmYWxsIGlzIGRldGVjdGVkLgorCitQbGF0Zm9ybSBkYXRhIG5lZWQgdG8gYmUgY29uZmlndXJlZCBmb3IgaW5pdGlhbCBkZWZhdWx0IHZhbHVlcy4KKworUGxhdGZvcm0gRGF0YQorLS0tLS0tLS0tLS0tLQorZnV6el94OiBOb2lzZSBvbiBYIEF4aXMKKworZnV6el95OiBOb2lzZSBvbiBZIEF4aXMKKworZnV6el96OiBOb2lzZSBvbiBaIEF4aXMKKworZ19yYW5nZTogRyByYW5nZSBpbiBtaWxsaSBnIGkuZSAyMDAwIG9yIDgwMDAKKworbW9kZTogRGVmYXVsdCBPcGVyYXRpbmcgbW9kZQorCittZHRocjogTW90aW9uIGRldGVjdCBnIHJhbmdlIHRocmVzaG9sZCB2YWx1ZQorCittZGZmdG1yOiBNb3Rpb24gZGV0ZWN0IGFuZCBmcmVlIGZhbGwgdGltZSB0aHJlc2hvbGQgdmFsdWUKKworZmZ0aHI6IEZyZWUgZmFsbCBnIHJhbmdlIHRocmVzaG9sZCB2YWx1ZQorCitJbnB1dCBJbnRlcmZhY2UKKy0tLS0tLS0tLS0tLS0tCitJbnB1dCBkcml2ZXIgdmVyc2lvbiBpcyAxLjAuMAorSW5wdXQgZGV2aWNlIElEOiBidXMgMHgxOCB2ZW5kb3IgMHgwIHByb2R1Y3QgMHgwIHZlcnNpb24gMHgwCitJbnB1dCBkZXZpY2UgbmFtZTogImNtYTMwMDAtYWNjZWxlcm9tZXRlciIKK1N1cHBvcnRlZCBldmVudHM6CisgIEV2ZW50IHR5cGUgMCAoU3luYykKKyAgRXZlbnQgdHlwZSAzIChBYnNvbHV0ZSkKKyAgICBFdmVudCBjb2RlIDAgKFgpCisgICAgICBWYWx1ZSAgICAgNDcKKyAgICAgIE1pbiAgICAtODAwMAorICAgICAgTWF4ICAgICA4MDAwCisgICAgICBGdXp6ICAgICAyMDAKKyAgICBFdmVudCBjb2RlIDEgKFkpCisgICAgICBWYWx1ZSAgICAtMjgKKyAgICAgIE1pbiAgICAtODAwMAorICAgICAgTWF4ICAgICA4MDAwCisgICAgICBGdXp6ICAgICAyMDAKKyAgICBFdmVudCBjb2RlIDIgKFopCisgICAgICBWYWx1ZSAgICA5MDUKKyAgICAgIE1pbiAgICAtODAwMAorICAgICAgTWF4ICAgICA4MDAwCisgICAgICBGdXp6ICAgICAyMDAKKyAgICBFdmVudCBjb2RlIDQwIChNaXNjKQorICAgICAgVmFsdWUgICAgICAwCisgICAgICBNaW4gICAgICAgIDAKKyAgICAgIE1heCAgICAgICAgMQorICBFdmVudCB0eXBlIDQgKE1pc2MpCisKKworUmVnaXN0ZXIvUGxhdGZvcm0gcGFyYW1ldGVycyBEZXNjcmlwdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2RlOgorCTA6IHBvd2VyIGRvd24gbW9kZQorCTE6IDEwMCBIeiBNZWFzdXJlbWVudCBtb2RlCisJMjogNDAwIEh6IE1lYXN1cmVtZW50IG1vZGUKKwkzOiA0MCBIeiBNZWFzdXJlbWVudCBtb2RlCisJNDogTW90aW9uIERldGVjdCBtb2RlIChkZWZhdWx0KQorCTU6IDEwMCBIeiBGcmVlIGZhbGwgbW9kZQorCTY6IDQwIEh6IEZyZWUgZmFsbCBtb2RlCisJNzogUG93ZXIgb2ZmIG1vZGUKKworZ3JhbmdlOgorCTIwMDA6IDIwMDAgbWcgb3IgMkcgUmFuZ2UKKwk4MDAwOiA4MDAwIG1nIG9yIDhHIFJhbmdlCisKK21kdGhyOgorCVg6IFggKiA3MW1nICg4RyBSYW5nZSkKKwlYOiBYICogMThtZyAoMkcgUmFuZ2UpCisKK21kZmZ0bXI6CisJWDogKFggJiAweDcwKSAqIDEwMCBtcyAoTURUTVIpCisJICAgKFggJiAweDBGKSAqIDIuNSBtcyAoRkZUTVIgNDAwIEh6KQorCSAgIChYICYgMHgwRikgKiAxMCBtcyAgKEZGVE1SIDEwMCBIeikKKworZmZ0aHI6CisgICAgICAgWDogKFggPj4gMikgKiAxOG1nICgyRyBSYW5nZSkKKyAgICAgICBYOiAoWCAmIDB4MEYpICogNzEgbWcgKDhHIFJhbmdlKQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pbnB1dC9tdWx0aS10b3VjaC1wcm90b2NvbC50eHQgYi9Eb2N1bWVudGF0aW9uL2lucHV0L211bHRpLXRvdWNoLXByb3RvY29sLnR4dAppbmRleCBiZGNiYTE1NC4uNzE1MzZlNyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pbnB1dC9tdWx0aS10b3VjaC1wcm90b2NvbC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9pbnB1dC9tdWx0aS10b3VjaC1wcm90b2NvbC50eHQKQEAgLTEsNiArMSw2IEBACiBNdWx0aS10b3VjaCAoTVQpIFByb3RvY29sCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JQ29weXJpZ2h0IChDKSAyMDA5CUhlbnJpayBSeWRiZXJnIDxyeWRiZXJnQGV1cm9tYWlsLnNlPgorCUNvcHlyaWdodCAoQykgMjAwOS0yMDEwCUhlbnJpayBSeWRiZXJnIDxyeWRiZXJnQGV1cm9tYWlsLnNlPgogCiAKIEludHJvZHVjdGlvbgpAQCAtMTYxLDE5ICsxNjEsMjQgQEAKIHJhdGlvIEFCU19NVF9UT1VDSF9NQUpPUiAvIEFCU19NVF9XSURUSF9NQUpPUiwgd2hpY2ggaXMgYWx3YXlzIHNtYWxsZXIgdGhhbgogdW5pdHksIGlzIHJlbGF0ZWQgdG8gdGhlIGNvbnRhY3QgcHJlc3N1cmUuIEZvciBwcmVzc3VyZS1iYXNlZCBkZXZpY2VzLAogQUJTX01UX1BSRVNTVVJFIG1heSBiZSB1c2VkIHRvIHByb3ZpZGUgdGhlIHByZXNzdXJlIG9uIHRoZSBjb250YWN0IGFyZWEKLWluc3RlYWQuCitpbnN0ZWFkLiBEZXZpY2VzIGNhcGFibGUgb2YgY29udGFjdCBob3ZlcmluZyBjYW4gdXNlIEFCU19NVF9ESVNUQU5DRSB0bworaW5kaWNhdGUgdGhlIGRpc3RhbmNlIGJldHdlZW4gdGhlIGNvbnRhY3QgYW5kIHRoZSBzdXJmYWNlLgogCiBJbiBhZGRpdGlvbiB0byB0aGUgTUFKT1IgcGFyYW1ldGVycywgdGhlIG92YWwgc2hhcGUgb2YgdGhlIGNvbnRhY3QgY2FuIGJlCiBkZXNjcmliZWQgYnkgYWRkaW5nIHRoZSBNSU5PUiBwYXJhbWV0ZXJzLCBzdWNoIHRoYXQgTUFKT1IgYW5kIE1JTk9SIGFyZSB0aGUKIG1ham9yIGFuZCBtaW5vciBheGlzIG9mIGFuIGVsbGlwc2UuIEZpbmFsbHksIHRoZSBvcmllbnRhdGlvbiBvZiB0aGUgb3ZhbAogc2hhcGUgY2FuIGJlIGRlc2NyaWJlIHdpdGggdGhlIE9SSUVOVEFUSU9OIHBhcmFtZXRlci4KIAorRm9yIHR5cGUgQSBkZXZpY2VzLCBmdXJ0aGVyIHNwZWNpZmljYXRpb24gb2YgdGhlIHRvdWNoIHNoYXBlIGlzIHBvc3NpYmxlCit2aWEgQUJTX01UX0JMT0JfSUQuCisKIFRoZSBBQlNfTVRfVE9PTF9UWVBFIG1heSBiZSB1c2VkIHRvIHNwZWNpZnkgd2hldGhlciB0aGUgdG91Y2hpbmcgdG9vbCBpcyBhCi1jb250YWN0IG9yIGEgcGVuIG9yIHNvbWV0aGluZyBlbHNlLiAgRGV2aWNlcyB3aXRoIG1vcmUgZ3JhbnVsYXIgaW5mb3JtYXRpb24KLW1heSBzcGVjaWZ5IGdlbmVyYWwgc2hhcGVzIGFzIGJsb2JzLCBpLmUuLCBhcyBhIHNlcXVlbmNlIG9mIHJlY3Rhbmd1bGFyCi1zaGFwZXMgZ3JvdXBlZCB0b2dldGhlciBieSBhbiBBQlNfTVRfQkxPQl9JRC4gRmluYWxseSwgZm9yIHRoZSBmZXcgZGV2aWNlcwotdGhhdCBjdXJyZW50bHkgc3VwcG9ydCBpdCwgdGhlIEFCU19NVF9UUkFDS0lOR19JRCBldmVudCBtYXkgYmUgdXNlZCB0bwotcmVwb3J0IGNvbnRhY3QgdHJhY2tpbmcgZnJvbSBoYXJkd2FyZSBbNV0uCitmaW5nZXIgb3IgYSBwZW4gb3Igc29tZXRoaW5nIGVsc2UuIEZpbmFsbHksIHRoZSBBQlNfTVRfVFJBQ0tJTkdfSUQgZXZlbnQKK21heSBiZSB1c2VkIHRvIHRyYWNrIGlkZW50aWZpZWQgY29udGFjdHMgb3ZlciB0aW1lIFs1XS4KKworSW4gdGhlIHR5cGUgQiBwcm90b2NvbCwgQUJTX01UX1RPT0xfVFlQRSBhbmQgQUJTX01UX1RSQUNLSU5HX0lEIGFyZQoraW1wbGljaXRseSBoYW5kbGVkIGJ5IGlucHV0IGNvcmU7IGRyaXZlcnMgc2hvdWxkIGluc3RlYWQgY2FsbAoraW5wdXRfbXRfcmVwb3J0X3Nsb3Rfc3RhdGUoKS4KIAogCiBFdmVudCBTZW1hbnRpY3MKQEAgLTIxMyw2ICsyMTgsMTIgQEAKIG9mIFRPVUNIIGFuZCBXSURUSCBmb3IgcHJlc3N1cmUtYmFzZWQgZGV2aWNlcyBvciBhbnkgZGV2aWNlIHdpdGggYSBzcGF0aWFsCiBzaWduYWwgaW50ZW5zaXR5IGRpc3RyaWJ1dGlvbi4KIAorQUJTX01UX0RJU1RBTkNFCisKK1RoZSBkaXN0YW5jZSwgaW4gc3VyZmFjZSB1bml0cywgYmV0d2VlbiB0aGUgY29udGFjdCBhbmQgdGhlIHN1cmZhY2UuIFplcm8KK2Rpc3RhbmNlIG1lYW5zIHRoZSBjb250YWN0IGlzIHRvdWNoaW5nIHRoZSBzdXJmYWNlLiBBIHBvc2l0aXZlIG51bWJlciBtZWFucwordGhlIGNvbnRhY3QgaXMgaG92ZXJpbmcgYWJvdmUgdGhlIHN1cmZhY2UuCisKIEFCU19NVF9PUklFTlRBVElPTgogCiBUaGUgb3JpZW50YXRpb24gb2YgdGhlIGVsbGlwc2UuIFRoZSB2YWx1ZSBzaG91bGQgZGVzY3JpYmUgYSBzaWduZWQgcXVhcnRlcgpAQCAtMjQwLDIxICsyNTEsMjQgQEAKIFRoZSB0eXBlIG9mIGFwcHJvYWNoaW5nIHRvb2wuIEEgbG90IG9mIGtlcm5lbCBkcml2ZXJzIGNhbm5vdCBkaXN0aW5ndWlzaAogYmV0d2VlbiBkaWZmZXJlbnQgdG9vbCB0eXBlcywgc3VjaCBhcyBhIGZpbmdlciBvciBhIHBlbi4gSW4gc3VjaCBjYXNlcywgdGhlCiBldmVudCBzaG91bGQgYmUgb21pdHRlZC4gVGhlIHByb3RvY29sIGN1cnJlbnRseSBzdXBwb3J0cyBNVF9UT09MX0ZJTkdFUiBhbmQKLU1UX1RPT0xfUEVOIFsyXS4KK01UX1RPT0xfUEVOIFsyXS4gRm9yIHR5cGUgQiBkZXZpY2VzLCB0aGlzIGV2ZW50IGlzIGhhbmRsZWQgYnkgaW5wdXQgY29yZTsKK2RyaXZlcnMgc2hvdWxkIGluc3RlYWQgdXNlIGlucHV0X210X3JlcG9ydF9zbG90X3N0YXRlKCkuCiAKIEFCU19NVF9CTE9CX0lECiAKIFRoZSBCTE9CX0lEIGdyb3VwcyBzZXZlcmFsIHBhY2tldHMgdG9nZXRoZXIgaW50byBvbmUgYXJiaXRyYXJpbHkgc2hhcGVkCi1jb250YWN0LiBUaGlzIGlzIGEgbG93LWxldmVsIGFub255bW91cyBncm91cGluZyBmb3IgdHlwZSBBIGRldmljZXMsIGFuZAorY29udGFjdC4gVGhlIHNlcXVlbmNlIG9mIHBvaW50cyBmb3JtcyBhIHBvbHlnb24gd2hpY2ggZGVmaW5lcyB0aGUgc2hhcGUgb2YKK3RoZSBjb250YWN0LiBUaGlzIGlzIGEgbG93LWxldmVsIGFub255bW91cyBncm91cGluZyBmb3IgdHlwZSBBIGRldmljZXMsIGFuZAogc2hvdWxkIG5vdCBiZSBjb25mdXNlZCB3aXRoIHRoZSBoaWdoLWxldmVsIHRyYWNraW5nSUQgWzVdLiBNb3N0IHR5cGUgQQogZGV2aWNlcyBkbyBub3QgaGF2ZSBibG9iIGNhcGFiaWxpdHksIHNvIGRyaXZlcnMgY2FuIHNhZmVseSBvbWl0IHRoaXMgZXZlbnQuCiAKIEFCU19NVF9UUkFDS0lOR19JRAogCiBUaGUgVFJBQ0tJTkdfSUQgaWRlbnRpZmllcyBhbiBpbml0aWF0ZWQgY29udGFjdCB0aHJvdWdob3V0IGl0cyBsaWZlIGN5Y2xlCi1bNV0uIFRoaXMgZXZlbnQgaXMgbWFuZGF0b3J5IGZvciB0eXBlIEIgZGV2aWNlcy4gVGhlIHZhbHVlIHJhbmdlIG9mIHRoZQotVFJBQ0tJTkdfSUQgc2hvdWxkIGJlIGxhcmdlIGVub3VnaCB0byBlbnN1cmUgdW5pcXVlIGlkZW50aWZpY2F0aW9uIG9mIGEKLWNvbnRhY3QgbWFpbnRhaW5lZCBvdmVyIGFuIGV4dGVuZGVkIHBlcmlvZCBvZiB0aW1lLgorWzVdLiBUaGUgdmFsdWUgcmFuZ2Ugb2YgdGhlIFRSQUNLSU5HX0lEIHNob3VsZCBiZSBsYXJnZSBlbm91Z2ggdG8gZW5zdXJlCit1bmlxdWUgaWRlbnRpZmljYXRpb24gb2YgYSBjb250YWN0IG1haW50YWluZWQgb3ZlciBhbiBleHRlbmRlZCBwZXJpb2Qgb2YKK3RpbWUuIEZvciB0eXBlIEIgZGV2aWNlcywgdGhpcyBldmVudCBpcyBoYW5kbGVkIGJ5IGlucHV0IGNvcmU7IGRyaXZlcnMKK3Nob3VsZCBpbnN0ZWFkIHVzZSBpbnB1dF9tdF9yZXBvcnRfc2xvdF9zdGF0ZSgpLgogCiAKIEV2ZW50IENvbXB1dGF0aW9uCkBAIC0zMDEsMTggKzMxNSwxOSBAQAogTm90ZXMKIC0tLS0tCiAKLUluIG9yZGVyIHRvIHN0YXkgY29tcGF0aWJsZSB3aXRoIGV4aXN0aW5nIGFwcGxpY2F0aW9ucywgdGhlIGRhdGEKLXJlcG9ydGVkIGluIGEgZmluZ2VyIHBhY2tldCBtdXN0IG5vdCBiZSByZWNvZ25pemVkIGFzIHNpbmdsZS10b3VjaAotZXZlbnRzLiBJbiBhZGRpdGlvbiwgYWxsIGZpbmdlciBkYXRhIG11c3QgYnlwYXNzIGlucHV0IGZpbHRlcmluZywKLXNpbmNlIHN1YnNlcXVlbnQgZXZlbnRzIG9mIHRoZSBzYW1lIHR5cGUgcmVmZXIgdG8gZGlmZmVyZW50IGZpbmdlcnMuCitJbiBvcmRlciB0byBzdGF5IGNvbXBhdGlibGUgd2l0aCBleGlzdGluZyBhcHBsaWNhdGlvbnMsIHRoZSBkYXRhIHJlcG9ydGVkCitpbiBhIGZpbmdlciBwYWNrZXQgbXVzdCBub3QgYmUgcmVjb2duaXplZCBhcyBzaW5nbGUtdG91Y2ggZXZlbnRzLgogCi1UaGUgZmlyc3Qga2VybmVsIGRyaXZlciB0byB1dGlsaXplIHRoZSBNVCBwcm90b2NvbCBpcyB0aGUgYmNtNTk3NCBkcml2ZXIsCi13aGVyZSBleGFtcGxlcyBjYW4gYmUgZm91bmQuCitGb3IgdHlwZSBBIGRldmljZXMsIGFsbCBmaW5nZXIgZGF0YSBieXBhc3NlcyBpbnB1dCBmaWx0ZXJpbmcsIHNpbmNlCitzdWJzZXF1ZW50IGV2ZW50cyBvZiB0aGUgc2FtZSB0eXBlIHJlZmVyIHRvIGRpZmZlcmVudCBmaW5nZXJzLgorCitGb3IgZXhhbXBsZSB1c2FnZSBvZiB0aGUgdHlwZSBBIHByb3RvY29sLCBzZWUgdGhlIGJjbTU5NzQgZHJpdmVyLiBGb3IKK2V4YW1wbGUgdXNhZ2Ugb2YgdGhlIHR5cGUgQiBwcm90b2NvbCwgc2VlIHRoZSBoaWQtZWdhbGF4IGRyaXZlci4KIAogWzFdIFdpdGggdGhlIGV4dGVuc2lvbiBBQlNfTVRfQVBQUk9BQ0hfWCBhbmQgQUJTX01UX0FQUFJPQUNIX1ksIHRoZQogZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBjb250YWN0IHBvc2l0aW9uIGFuZCB0aGUgYXBwcm9hY2hpbmcgdG9vbCBwb3NpdGlvbgogY291bGQgYmUgdXNlZCB0byBkZXJpdmUgdGlsdC4KIFsyXSBUaGUgbGlzdCBjYW4gb2YgY291cnNlIGJlIGV4dGVuZGVkLgotWzNdIE11bHRpdG91Y2ggWCBkcml2ZXIgcHJvamVjdDogaHR0cDovL2JpdG1hdGgub3JnL2NvZGUvbXVsdGl0b3VjaC8uCitbM10gVGhlIG10ZGV2IHByb2plY3Q6IGh0dHA6Ly9iaXRtYXRoLm9yZy9jb2RlL210ZGV2Ly4KIFs0XSBTZWUgdGhlIHNlY3Rpb24gb24gZXZlbnQgY29tcHV0YXRpb24uCiBbNV0gU2VlIHRoZSBzZWN0aW9uIG9uIGZpbmdlciB0cmFja2luZy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaW9jdGwvaW9jdGwtbnVtYmVyLnR4dCBiL0RvY3VtZW50YXRpb24vaW9jdGwvaW9jdGwtbnVtYmVyLnR4dAppbmRleCA2M2ZmZDc4Li5kNmE2M2M3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2lvY3RsL2lvY3RsLW51bWJlci50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9pb2N0bC9pb2N0bC1udW1iZXIudHh0CkBAIC0xNTUsNyArMTU1LDYgQEAKICdRJwlhbGwJbGludXgvc291bmRjYXJkLmgKICdSJwkwMC0xRglsaW51eC9yYW5kb20uaAkJY29uZmxpY3QhCiAnUicJMDEJbGludXgvcmZraWxsLmgJCWNvbmZsaWN0IQotJ1InCTAxLTBGCW1lZGlhL3Jkcy5oCQljb25mbGljdCEKICdSJwlDMC1ERgluZXQvYmx1ZXRvb3RoL3JmY29tbS5oCiAnUycJYWxsCWxpbnV4L2Nkcm9tLmgJCWNvbmZsaWN0IQogJ1MnCTgwLTgxCXNjc2kvc2NzaV9pb2N0bC5oCWNvbmZsaWN0IQpAQCAtMTk0LDcgKzE5Myw2IEBACiAJCQkJCTxodHRwOi8vbHJjd3d3LmVwZmwuY2gvPgogJ2InCTAwLUZGCQkJCWNvbmZsaWN0ISBiaXQzIHZtZSBob3N0IGJyaWRnZQogCQkJCQk8bWFpbHRvOm5hdGFsaWFAbmlraGVmay5uaWtoZWYubmw+Ci0nYicJMDAtMEYJbWVkaWEvYnQ4MTkuaAkJY29uZmxpY3QhCiAnYycJYWxsCWxpbnV4L2NtNDAwMF9jcy5oCWNvbmZsaWN0IQogJ2MnCTAwLTdGCWxpbnV4L2NvbXN0YXRzLmgJY29uZmxpY3QhCiAnYycJMDAtN0YJbGludXgvY29kYS5oCQljb25mbGljdCEKQEAgLTI2MCwxNCArMjU4LDExIEBACiAndCcJODAtOEYJbGludXgvaXNkbl9wcHAuaAogJ3QnCTkwCWxpbnV4L3Rvc2hpYmEuaAogJ3UnCTAwLTFGCWxpbnV4L3NtYl9mcy5oCQlnb25lCi0ndicJYWxsCWxpbnV4L3ZpZGVvZGV2LmgJY29uZmxpY3QhCiAndicJMDAtMUYJbGludXgvZXh0Ml9mcy5oCQljb25mbGljdCEKICd2JwkwMC0xRglsaW51eC9mcy5oCQljb25mbGljdCEKICd2JwkwMC0wRglsaW51eC9zb255cGkuaAkJY29uZmxpY3QhCi0ndicJQzAtQ0YJZHJpdmVycy9tZWRpYS92aWRlby9vdjUxMS5oCWNvbmZsaWN0IQogJ3YnCUMwLURGCW1lZGlhL3B3Yy1pb2N0bC5oCWNvbmZsaWN0IQogJ3YnCUMwLUZGCWxpbnV4L21leWUuaAkJY29uZmxpY3QhCi0ndicJQzAtQ0YJZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbi5oCWNvbmZsaWN0IQogJ3YnCUQwLURGCWRyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYTIvY3BpYTJkZXYuaAljb25mbGljdCEKICd3JwlhbGwJCQkJQ0VSTiBTQ0kgZHJpdmVyCiAneScJMDAtMUYJCQkJcGFja2V0IGJhc2VkIHVzZXIgbGV2ZWwgY29tbXVuaWNhdGlvbnMKQEAgLTI3OCw3ICsyNzMsNiBAQAogCQkJCQk8bWFpbHRvOm9lQHBvcnQuZGU+CiAneicJMTAtNEYJZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfYXBpLmgJY29uZmxpY3QhCiAweDgwCTAwLTFGCWxpbnV4L2ZiLmgKLTB4ODgJMDAtM0YJbWVkaWEvb3ZjYW1jaGlwLmgKIDB4ODkJMDAtMDYJYXJjaC94ODYvaW5jbHVkZS9hc20vc29ja2lvcy5oCiAweDg5CTBCLURGCWxpbnV4L3NvY2tpb3MuaAogMHg4OQlFMC1FRglsaW51eC9zb2NraW9zLmgJCVNJT0NQUk9UT1BSSVZBVEUgcmFuZ2UKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va2J1aWxkL2tidWlsZC50eHQgYi9Eb2N1bWVudGF0aW9uL2tidWlsZC9rYnVpbGQudHh0CmluZGV4IDFlNTE2NWEuLjRhOTkwMzEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24va2J1aWxkL2tidWlsZC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9rYnVpbGQva2J1aWxkLnR4dApAQCAtNzMsNiArNzMsMTQgQEAKIFRoZSBvdXRwdXQgZGlyZWN0b3J5IGNhbiBhbHNvIGJlIHNwZWNpZmllZCB1c2luZyAiTz0uLi4iLgogU2V0dGluZyAiTz0uLi4iIHRha2VzIHByZWNlZGVuY2Ugb3ZlciBLQlVJTERfT1VUUFVULgogCitLQlVJTERfREVCQVJDSAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0ZvciB0aGUgZGViLXBrZyB0YXJnZXQsIGFsbG93cyBvdmVycmlkaW5nIHRoZSBub3JtYWwgaGV1cmlzdGljcyBkZXBsb3llZCBieQorZGViLXBrZy4gTm9ybWFsbHkgZGViLXBrZyBhdHRlbXB0cyB0byBndWVzcyB0aGUgcmlnaHQgYXJjaGl0ZWN0dXJlIGJhc2VkIG9uCit0aGUgVVRTX01BQ0hJTkUgdmFyaWFibGUsIGFuZCBvbiBzb21lIGFyY2hpdGVjdHVyZXMgYWxzbyB0aGUga2VybmVsIGNvbmZpZy4KK1RoZSB2YWx1ZSBvZiBLQlVJTERfREVCQVJDSCBpcyBhc3N1bWVkIChub3QgY2hlY2tlZCkgdG8gYmUgYSB2YWxpZCBEZWJpYW4KK2FyY2hpdGVjdHVyZS4KKwogQVJDSAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFNldCBBUkNIIHRvIHRoZSBhcmNoaXRlY3R1cmUgdG8gYmUgYnVpbHQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2tidWlsZC9rY29uZmlnLWxhbmd1YWdlLnR4dCBiL0RvY3VtZW50YXRpb24va2J1aWxkL2tjb25maWctbGFuZ3VhZ2UudHh0CmluZGV4IDJmZTkzY2EuLmI1MDdkNjEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24va2J1aWxkL2tjb25maWctbGFuZ3VhZ2UudHh0CisrKyBiL0RvY3VtZW50YXRpb24va2J1aWxkL2tjb25maWctbGFuZ3VhZ2UudHh0CkBAIC0xMTIsNyArMTEyLDYgQEAKIAkobm8gcHJvbXB0cyBhbnl3aGVyZSkgYW5kIGZvciBzeW1ib2xzIHdpdGggbm8gZGVwZW5kZW5jaWVzLgogCVRoYXQgd2lsbCBsaW1pdCB0aGUgdXNlZnVsbmVzcyBidXQgb24gdGhlIG90aGVyIGhhbmQgYXZvaWQKIAl0aGUgaWxsZWdhbCBjb25maWd1cmF0aW9ucyBhbGwgb3Zlci4KLQlrY29uZmlnIHNob3VsZCBvbmUgZGF5IHdhcm4gYWJvdXQgc3VjaCB0aGluZ3MuCiAKIC0gbnVtZXJpY2FsIHJhbmdlczogInJhbmdlIiA8c3ltYm9sPiA8c3ltYm9sPiBbImlmIiA8ZXhwcj5dCiAgIFRoaXMgYWxsb3dzIHRvIGxpbWl0IHRoZSByYW5nZSBvZiBwb3NzaWJsZSBpbnB1dCB2YWx1ZXMgZm9yIGludApAQCAtMjY4LDcgKzI2Nyw3IEBACiAKIGNob2ljZXM6CiAKLQkiY2hvaWNlIgorCSJjaG9pY2UiIFtzeW1ib2xdCiAJPGNob2ljZSBvcHRpb25zPgogCTxjaG9pY2UgYmxvY2s+CiAJImVuZGNob2ljZSIKQEAgLTI4Miw2ICsyODEsMTAgQEAKIGNhbiBiZSBjb21waWxlZCBhcyBtb2R1bGVzLgogQSBjaG9pY2UgYWNjZXB0cyBhbm90aGVyIG9wdGlvbiAib3B0aW9uYWwiLCB3aGljaCBhbGxvd3MgdG8gc2V0IHRoZQogY2hvaWNlIHRvICduJyBhbmQgbm8gZW50cnkgbmVlZHMgdG8gYmUgc2VsZWN0ZWQuCitJZiBubyBbc3ltYm9sXSBpcyBhc3NvY2lhdGVkIHdpdGggYSBjaG9pY2UsIHRoZW4geW91IGNhbiBub3QgaGF2ZSBtdWx0aXBsZQorZGVmaW5pdGlvbnMgb2YgdGhhdCBjaG9pY2UuIElmIGEgW3N5bWJvbF0gaXMgYXNzb2NpYXRlZCB0byB0aGUgY2hvaWNlLAordGhlbiB5b3UgbWF5IGRlZmluZSB0aGUgc2FtZSBjaG9pY2UgKGllLiB3aXRoIHRoZSBzYW1lIGVudHJpZXMpIGluIGFub3RoZXIKK3BsYWNlLgogCiBjb21tZW50OgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2tlcm5lbC1kb2NzLnR4dCBiL0RvY3VtZW50YXRpb24va2VybmVsLWRvY3MudHh0CmluZGV4IDcxNWVhYWYuLjlhODY3NDYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24va2VybmVsLWRvY3MudHh0CisrKyBiL0RvY3VtZW50YXRpb24va2VybmVsLWRvY3MudHh0CkBAIC01MzcsNyArNTM3LDcgQEAKICAgICAgICBOb3RlczogRnVydGhlciBpbmZvcm1hdGlvbiBpbgogICAgICAgIGh0dHA6Ly93d3cub3JlaWxseS5jb20vY2F0YWxvZy9saW51eGRyaXZlMi8KIAotICAgICAqIFRpdGxlOiAiTGludXggRGV2aWNlIERyaXZlcnMsIDNuZCBFZGl0aW9uIgorICAgICAqIFRpdGxlOiAiTGludXggRGV2aWNlIERyaXZlcnMsIDNyZCBFZGl0aW9uIgogICAgICAgIEF1dGhvcnM6IEpvbmF0aGFuIENvcmJldCwgQWxlc3NhbmRybyBSdWJpbmksIGFuZCBHcmVnIEtyb2FoLUhhcnRtYW4KICAgICAgICBQdWJsaXNoZXI6IE8nUmVpbGx5ICYgQXNzb2NpYXRlcy4KICAgICAgICBEYXRlOiAyMDA1LgpAQCAtNTkyLDE0ICs1OTIsNiBAQAogICAgICAgIFBhZ2VzOiA2MDAuCiAgICAgICAgSVNCTjogMC0xMy0xMDE5MDgtMgogCi0gICAgICogVGl0bGU6ICAiVGhlICBEZXNpZ24gIGFuZCBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgNC40IEJTRCBVTklYCi0gICAgICAgT3BlcmF0aW5nIFN5c3RlbSIKLSAgICAgICBBdXRob3I6IE1hcnNoYWxsIEtpcmsgTWNLdXNpY2ssIEtlaXRoIEJvc3RpYywgTWljaGFlbCBKLiBLYXJlbHMsCi0gICAgICAgSm9obiBTLiBRdWFydGVybWFuLgotICAgICAgIFB1Ymxpc2hlcjogQWRkaXNvbi1XZXNsZXkuCi0gICAgICAgRGF0ZTogMTk5Ni4KLSAgICAgICBJU0JOOiAwLTIwMS01NDk3OS00Ci0KICAgICAgKiBUaXRsZTogIlByb2dyYW1taW5nIGZvciB0aGUgcmVhbCB3b3JsZCAtIFBPU0lYLjQiCiAgICAgICAgQXV0aG9yOiBCaWxsIE8uIEdhbGxtZWlzdGVyLgogICAgICAgIFB1Ymxpc2hlcjogTydSZWlsbHkgJiBBc3NvY2lhdGVzLCBJbmMuLgpAQCAtNjEwLDI4ICs2MDIsMTMgQEAKICAgICAgICBQT1NJWC4gR29vZCByZWZlcmVuY2UuCiAKICAgICAgKiBUaXRsZTogICJVTklYICBTeXN0ZW1zICBmb3IgIE1vZGVybiBBcmNoaXRlY3R1cmVzOiBTeW1tZXRyaWMKLSAgICAgICBNdWx0aXByb2Nlc3NzaW5nIGFuZCBDYWNoaW5nIGZvciBLZXJuZWwgUHJvZ3JhbW1lcnMiCisgICAgICAgTXVsdGlwcm9jZXNzaW5nIGFuZCBDYWNoaW5nIGZvciBLZXJuZWwgUHJvZ3JhbW1lcnMiCiAgICAgICAgQXV0aG9yOiBDdXJ0IFNjaGltbWVsLgogICAgICAgIFB1Ymxpc2hlcjogQWRkaXNvbiBXZXNsZXkuCiAgICAgICAgRGF0ZTogSnVuZSwgMTk5NC4KICAgICAgICBQYWdlczogNDMyLgogICAgICAgIElTQk46IDAtMjAxLTYzMzM4LTgKIAotICAgICAqIFRpdGxlOiAgIlRoZSAgRGVzaWduICBhbmQgSW1wbGVtZW50YXRpb24gb2YgdGhlIDQuMyBCU0QgVU5JWAotICAgICAgIE9wZXJhdGluZyBTeXN0ZW0iCi0gICAgICAgQXV0aG9yOiBTYW11ZWwgSi4gTGVmZmxlciwgTWFyc2hhbGwgS2lyayBNY0t1c2ljaywgTWljaGFlbCBKLgotICAgICAgIEthcmVscywgSm9obiBTLiBRdWFydGVybWFuLgotICAgICAgIFB1Ymxpc2hlcjogQWRkaXNvbi1XZXNsZXkuCi0gICAgICAgRGF0ZTogMTk4OSAocmVwcmludGVkIHdpdGggY29ycmVjdGlvbnMgb24gT2N0b2JlciwgMTk5MCkuCi0gICAgICAgSVNCTjogMC0yMDEtMDYxOTYtMQotCi0gICAgICogVGl0bGU6ICJUaGUgRGVzaWduIG9mIHRoZSBVTklYIE9wZXJhdGluZyBTeXN0ZW0iCi0gICAgICAgQXV0aG9yOiBNYXVyaWNlIEouIEJhY2guCi0gICAgICAgUHVibGlzaGVyOiBQcmVudGljZSBIYWxsLgotICAgICAgIERhdGU6IDE5ODYuCi0gICAgICAgUGFnZXM6IDQ3MS4KLSAgICAgICBJU0JOOiAwLTEzLTIwMTc1Ny0xCi0KICAgICAgTUlTQ0VMTEFORU9VUzoKIAogICAgICAqIE5hbWU6IGxpbnV4L0RvY3VtZW50YXRpb24KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKaW5kZXggMDFlY2UxYi4uZjNkYzk1MSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKQEAgLTE1NzksMjAgKzE1NzksMTIgQEAKIAogCW5taV93YXRjaGRvZz0JW0tOTCxCVUdTPVg4Nl0gRGVidWdnaW5nIGZlYXR1cmVzIGZvciBTTVAga2VybmVscwogCQkJRm9ybWF0OiBbcGFuaWMsXVtudW1dCi0JCQlWYWxpZCBudW06IDAsMSwyCisJCQlWYWxpZCBudW06IDAKIAkJCTAgLSB0dXJuIG5taV93YXRjaGRvZyBvZmYKLQkJCTEgLSB1c2UgdGhlIElPLUFQSUMgdGltZXIgZm9yIHRoZSBOTUkgd2F0Y2hkb2cKLQkJCTIgLSB1c2UgdGhlIGxvY2FsIEFQSUMgZm9yIHRoZSBOTUkgd2F0Y2hkb2cgdXNpbmcKLQkJCWEgcGVyZm9ybWFuY2UgY291bnRlci4gTm90ZTogVGhpcyB3aWxsIHVzZSBvbmUKLQkJCXBlcmZvcm1hbmNlIGNvdW50ZXIgYW5kIHRoZSBsb2NhbCBBUElDJ3MgcGVyZm9ybWFuY2UKLQkJCXZlY3Rvci4KIAkJCVdoZW4gcGFuaWMgaXMgc3BlY2lmaWVkLCBwYW5pYyB3aGVuIGFuIE5NSSB3YXRjaGRvZwogCQkJdGltZW91dCBvY2N1cnMuCiAJCQlUaGlzIGlzIHVzZWZ1bCB3aGVuIHlvdSB1c2UgYSBwYW5pYz0uLi4gdGltZW91dCBhbmQKIAkJCW5lZWQgdGhlIGJveCBxdWlja2x5IHVwIGFnYWluLgotCQkJSW5zdGVhZCBvZiAxIGFuZCAyIGl0IGlzIHBvc3NpYmxlIHRvIHVzZSB0aGUgZm9sbG93aW5nCi0JCQlzeW1ib2xpYyBuYW1lczogbGFwaWMgYW5kIGlvYXBpYwotCQkJRXhhbXBsZTogbm1pX3dhdGNoZG9nPTIgb3Igbm1pX3dhdGNoZG9nPXBhbmljLGxhcGljCiAKIAluZXRwb2xsLmNhcnJpZXJfdGltZW91dD0KIAkJCVtORVRdIFNwZWNpZmllcyBhbW91bnQgb2YgdGltZSAoaW4gc2Vjb25kcykgdGhhdApAQCAtMTYyMiw2ICsxNjE0LDggQEAKIAlub2FwaWMJCVtTTVAsQVBJQ10gVGVsbHMgdGhlIGtlcm5lbCB0byBub3QgbWFrZSB1c2Ugb2YgYW55CiAJCQlJT0FQSUNzIHRoYXQgbWF5IGJlIHByZXNlbnQgaW4gdGhlIHN5c3RlbS4KIAorCW5vYXV0b2dyb3VwCURpc2FibGUgc2NoZWR1bGVyIGF1dG9tYXRpYyB0YXNrIGdyb3VwIGNyZWF0aW9uLgorCiAJbm9iYXRzCQlbUFBDXSBEbyBub3QgdXNlIEJBVHMgZm9yIG1hcHBpbmcga2VybmVsIGxvd21lbQogCQkJb24gIkNsYXNzaWMiIFBQQyBjb3Jlcy4KIApAQCAtMjQ2NywxMiArMjQ2MSwxMyBAQAogCQkJdG8gZmFjaWxpdGF0ZSBlYXJseSBib290IGRlYnVnZ2luZy4KIAkJCVNlZSBhbHNvIERvY3VtZW50YXRpb24vdHJhY2UvZXZlbnRzLnR4dAogCi0JdHNjPQkJRGlzYWJsZSBjbG9ja3NvdXJjZS1tdXN0LXZlcmlmeSBmbGFnIGZvciBUU0MuCisJdHNjPQkJRGlzYWJsZSBjbG9ja3NvdXJjZSBzdGFiaWxpdHkgY2hlY2tzIGZvciBUU0MuCiAJCQlGb3JtYXQ6IDxzdHJpbmc+CiAJCQlbeDg2XSByZWxpYWJsZTogbWFyayB0c2MgY2xvY2tzb3VyY2UgYXMgcmVsaWFibGUsIHRoaXMKLQkJCWRpc2FibGVzIGNsb2Nrc291cmNlIHZlcmlmaWNhdGlvbiBhdCBydW50aW1lLgotCQkJVXNlZCB0byBlbmFibGUgaGlnaC1yZXNvbHV0aW9uIHRpbWVyIG1vZGUgb24gb2xkZXIKLQkJCWhhcmR3YXJlLCBhbmQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuCisJCQlkaXNhYmxlcyBjbG9ja3NvdXJjZSB2ZXJpZmljYXRpb24gYXQgcnVudGltZSwgYXMgd2VsbAorCQkJYXMgdGhlIHN0YWJpbGl0eSBjaGVja3MgZG9uZSBhdCBib290dXAuCVVzZWQgdG8gZW5hYmxlCisJCQloaWdoLXJlc29sdXRpb24gdGltZXIgbW9kZSBvbiBvbGRlciBoYXJkd2FyZSwgYW5kIGluCisJCQl2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4KIAkJCVt4ODZdIG5vaXJxdGltZTogRG8gbm90IHVzZSBUU0MgdG8gZG8gaXJxIGFjY291bnRpbmcuCiAJCQlVc2VkIHRvIHJ1biB0aW1lIGRpc2FibGUgSVJRX1RJTUVfQUNDT1VOVElORyBvbiBhbnkKIAkJCXBsYXRmb3JtcyB3aGVyZSBSRFRTQyBpcyBzbG93IGFuZCB0aGlzIGFjY291bnRpbmcKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbWFrZS9oZWFkZXJzX2luc3RhbGwudHh0IGIvRG9jdW1lbnRhdGlvbi9tYWtlL2hlYWRlcnNfaW5zdGFsbC50eHQKaW5kZXggZjI0ODFjYS4uOTUxZWI5ZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9tYWtlL2hlYWRlcnNfaW5zdGFsbC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9tYWtlL2hlYWRlcnNfaW5zdGFsbC50eHQKQEAgLTM5LDggKzM5LDkgQEAKIFRoZSBjb21tYW5kICJtYWtlIGhlYWRlcnNfaW5zdGFsbF9hbGwiIGV4cG9ydHMgaGVhZGVycyBmb3IgYWxsIGFyY2hpdGVjdHVyZXMKIHNpbXVsdGFuZW91c2x5LiAgKFRoaXMgaXMgbW9zdGx5IG9mIGludGVyZXN0IHRvIGRpc3RyaWJ1dGlvbiBtYWludGFpbmVycywKIHdobyBjcmVhdGUgYW4gYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IHRhcmJhbGwgZnJvbSB0aGUgcmVzdWx0aW5nIGluY2x1ZGUKLWRpcmVjdG9yeS4pICBSZW1lbWJlciB0byBwcm92aWRlIHRoZSBhcHByb3ByaWF0ZSBsaW51eC9hc20gZGlyZWN0b3J5IHZpYSAibXYiCi1vciAibG4gLXMiIGJlZm9yZSBidWlsZGluZyBhIEMgbGlicmFyeSB3aXRoIGhlYWRlcnMgZXhwb3J0ZWQgdGhpcyB3YXkuCitkaXJlY3RvcnkuKSAgWW91IGFsc28gY2FuIHVzZSBIRFJfQVJDSF9MSVNUIHRvIHNwZWNpZnkgbGlzdCBvZiBhcmNoaXRlY3R1cmVzLgorUmVtZW1iZXIgdG8gcHJvdmlkZSB0aGUgYXBwcm9wcmlhdGUgbGludXgvYXNtIGRpcmVjdG9yeSB2aWEgIm12IiBvciAibG4gLXMiCitiZWZvcmUgYnVpbGRpbmcgYSBDIGxpYnJhcnkgd2l0aCBoZWFkZXJzIGV4cG9ydGVkIHRoaXMgd2F5LgogCiBUaGUga2VybmVsIGhlYWRlciBleHBvcnQgaW5mcmFzdHJ1Y3R1cmUgaXMgbWFpbnRhaW5lZCBieSBEYXZpZCBXb29kaG91c2UKIDxkd213MkBpbmZyYWRlYWQub3JnPi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9MSUNFTlNFLnFsY25pYyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9MSUNFTlNFLnFsY25pYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWFkNGIxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL0xJQ0VOU0UucWxjbmljCkBAIC0wLDAgKzEsMzI3IEBACitDb3B5cmlnaHQgKGMpIDIwMDktMjAxMCBRTG9naWMgQ29ycG9yYXRpb24KK1FMb2dpYyBMaW51eCBxbGNuaWMgTklDIERyaXZlcgorCitUaGlzIHByb2dyYW0gaW5jbHVkZXMgYSBkZXZpY2UgZHJpdmVyIGZvciBMaW51eCAyLjYgdGhhdCBtYXkgYmUKK2Rpc3RyaWJ1dGVkIHdpdGggUUxvZ2ljIGhhcmR3YXJlIHNwZWNpZmljIGZpcm13YXJlIGJpbmFyeSBmaWxlLgorWW91IG1heSBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSB0aGUgZGV2aWNlIGRyaXZlciBjb2RlIHVuZGVyIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKGEgY29weSBvZiB3aGljaCBpcyBhdHRhY2hlZCBoZXJldG8gYXMKK0V4aGliaXQgQSkgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gKHZlcnNpb24gMikuCisKK1lvdSBtYXkgcmVkaXN0cmlidXRlIHRoZSBoYXJkd2FyZSBzcGVjaWZpYyBmaXJtd2FyZSBiaW5hcnkgZmlsZQordW5kZXIgdGhlIGZvbGxvd2luZyB0ZXJtczoKKworICAgICAgIDEuIFJlZGlzdHJpYnV0aW9uIG9mIHNvdXJjZSBjb2RlIChvbmx5IGlmIGFwcGxpY2FibGUpLAorICAgICAgICAgIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YKKyAgICAgICAgICBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKyAgICAgICAyLiBSZWRpc3RyaWJ1dGlvbiBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAgICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlCisgICAgICAgICAgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyCisgICAgICAgICAgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICAgICAgIDMuIFRoZSBuYW1lIG9mIFFMb2dpYyBDb3Jwb3JhdGlvbiBtYXkgbm90IGJlIHVzZWQgdG8KKyAgICAgICAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgICAgICAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbgorCitSRUdBUkRMRVNTIE9GIFdIQVQgTElDRU5TSU5HIE1FQ0hBTklTTSBJUyBVU0VEIE9SIEFQUExJQ0FCTEUsCitUSElTIFBST0dSQU0gSVMgUFJPVklERUQgQlkgUUxPR0lDIENPUlBPUkFUSU9OICJBUyBJUycnIEFORCBBTlkKK0VYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBCitQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IKK0JFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCitFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKK1RPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKK0RBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCitBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKK09SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCitQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworVVNFUiBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUyBUSEFUIFVTRSBPRiBUSElTIFBST0dSQU0gV0lMTCBOT1QKK0NSRUFURSBPUiBHSVZFIEdST1VORFMgRk9SIEEgTElDRU5TRSBCWSBJTVBMSUNBVElPTiwgRVNUT1BQRUwsIE9SCitPVEhFUldJU0UgSU4gQU5ZIElOVEVMTEVDVFVBTCBQUk9QRVJUWSBSSUdIVFMgKFBBVEVOVCwgQ09QWVJJR0hULAorVFJBREUgU0VDUkVULCBNQVNLIFdPUkssIE9SIE9USEVSIFBST1BSSUVUQVJZIFJJR0hUKSBFTUJPRElFRCBJTgorQU5ZIE9USEVSIFFMT0dJQyBIQVJEV0FSRSBPUiBTT0ZUV0FSRSBFSVRIRVIgU09MRUxZIE9SIElOCitDT01CSU5BVElPTiBXSVRIIFRISVMgUFJPR1JBTS4KKworCitFWEhJQklUIEEKKworICAgICAgICAgICAgICAgICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKworIENvcHlyaWdodCAoQykgMTk4OSwgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJlYW1ibGUKKworICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyCitmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZQorc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFRoaXMKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBtb3N0IG9mIHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uJ3Mgc29mdHdhcmUgYW5kIHRvIGFueSBvdGhlciBwcm9ncmFtIHdob3NlIGF1dGhvcnMgY29tbWl0IHRvCit1c2luZyBpdC4gIChTb21lIG90aGVyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSBpcyBjb3ZlcmVkIGJ5Cit0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQuKSAgWW91IGNhbiBhcHBseSBpdCB0bworeW91ciBwcm9ncmFtcywgdG9vLgorCisgIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKK3ByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UKK2hhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IKK3RoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdAoraWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQKK2luIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKworICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCithbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuCitUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdQorZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZiB5b3UgbW9kaWZ5IGl0LgorCisgIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIKK2dyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdAoreW91IGhhdmUuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUKK3NvdXJjZSBjb2RlLiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIKK3JpZ2h0cy4KKworICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0IHRoZSBzb2Z0d2FyZSwgYW5kCisoMikgb2ZmZXIgeW91IHRoaXMgbGljZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LAorZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBzb2Z0d2FyZS4KKworICBBbHNvLCBmb3IgZWFjaCBhdXRob3IncyBwcm90ZWN0aW9uIGFuZCBvdXJzLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbgordGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUKK3NvZnR3YXJlLiAgSWYgdGhlIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZQord2FudCBpdHMgcmVjaXBpZW50cyB0byBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCwgc28KK3RoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24gdGhlIG9yaWdpbmFsCithdXRob3JzJyByZXB1dGF0aW9ucy4KKworICBGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZQorcGF0ZW50cy4gIFdlIHdpc2ggdG8gYXZvaWQgdGhlIGRhbmdlciB0aGF0IHJlZGlzdHJpYnV0b3JzIG9mIGEgZnJlZQorcHJvZ3JhbSB3aWxsIGluZGl2aWR1YWxseSBvYnRhaW4gcGF0ZW50IGxpY2Vuc2VzLCBpbiBlZmZlY3QgbWFraW5nIHRoZQorcHJvZ3JhbSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpcywgd2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55CitwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncyBmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgorCisgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCittb2RpZmljYXRpb24gZm9sbG93LgorCisgICAgICAgICAgICAgICAgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorCisgIDAuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2ggY29udGFpbnMKK2Egbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkCit1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhlICJQcm9ncmFtIiwgYmVsb3csCityZWZlcnMgdG8gYW55IHN1Y2ggcHJvZ3JhbSBvciB3b3JrLCBhbmQgYSAid29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSIKK21lYW5zIGVpdGhlciB0aGUgUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6Cit0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIFByb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0LAorZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIKK2xhbmd1YWdlLiAgKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4KK3RoZSB0ZXJtICJtb2RpZmljYXRpb24iLikgIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgorCitBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdAorY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgVGhlIGFjdCBvZgorcnVubmluZyB0aGUgUHJvZ3JhbSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIHRoZSBvdXRwdXQgZnJvbSB0aGUgUHJvZ3JhbQoraXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0gKGluZGVwZW5kZW50IG9mIGhhdmluZyBiZWVuIG1hZGUgYnkgcnVubmluZyB0aGUgUHJvZ3JhbSkuCitXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIFByb2dyYW0gZG9lcy4KKworICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3MKK3NvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdQorY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZQorY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZQorbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OworYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZQorYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4KKworWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kCit5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgorCisgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24KK29mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBhbmQgY29weSBhbmQKK2Rpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQorYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworICAgIGEpIFlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisKKyAgICBiKSBZb3UgbXVzdCBjYXVzZSBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQgaW4KKyAgICB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkKKyAgICBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hvbGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZAorICAgIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworICAgIGMpIElmIHRoZSBtb2RpZmllZCBwcm9ncmFtIG5vcm1hbGx5IHJlYWRzIGNvbW1hbmRzIGludGVyYWN0aXZlbHkKKyAgICB3aGVuIHJ1biwgeW91IG11c3QgY2F1c2UgaXQsIHdoZW4gc3RhcnRlZCBydW5uaW5nIGZvciBzdWNoCisgICAgaW50ZXJhY3RpdmUgdXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbgorICAgIGFubm91bmNlbWVudCBpbmNsdWRpbmcgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYQorICAgIG5vdGljZSB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZQorICAgIGEgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIKKyAgICB0aGVzZSBjb25kaXRpb25zLCBhbmQgdGVsbGluZyB0aGUgdXNlciBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcworICAgIExpY2Vuc2UuICAoRXhjZXB0aW9uOiBpZiB0aGUgUHJvZ3JhbSBpdHNlbGYgaXMgaW50ZXJhY3RpdmUgYnV0CisgICAgZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3VjaCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbgorICAgIHRoZSBQcm9ncmFtIGlzIG5vdCByZXF1aXJlZCB0byBwcmludCBhbiBhbm5vdW5jZW1lbnQuKQorCitUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCitpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLAorYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCit0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCitzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQorZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgorCitUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKK3lvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bworZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCitjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLgorCitJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtCit3aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YKK2Egc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCit0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCisgIDMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2VkIG9uIGl0LAordW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCitTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICBhKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlCisgICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zCisgICAgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBiKSBBY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQorICAgIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyCisgICAgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZQorICAgIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bQorICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGMpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyCisgICAgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAgKFRoaXMgYWx0ZXJuYXRpdmUgaXMKKyAgICBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQorICAgIHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB3aXRoIHN1Y2gKKyAgICBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikKKworVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgorbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UKK2NvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55Cithc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8KK2NvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gIEhvd2V2ZXIsIGFzIGEKK3NwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZQorYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkKK2Zvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlCitvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudAoraXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgorCitJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nCithY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50CithY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdAorY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKworICA0LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KK2V4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQKK290aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpcwordm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLgorSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIKK3RoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoCitwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisKKyAgNS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90CitzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcgorZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gIFRoZXNlIGFjdGlvbnMgYXJlCitwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5Cittb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kCithbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCit0aGUgUHJvZ3JhbSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KKworICA2LiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQorb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSBvciBtb2RpZnkgdGhlIFByb2dyYW0gc3ViamVjdCB0bwordGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKK3Jlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KK1lvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHRvCit0aGlzIExpY2Vuc2UuCisKKyAgNy4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAoraW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwKK2NvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKK290aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKK2V4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90CitkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCitMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91CittYXkgbm90IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50CitsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGJ5CithbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KK3RoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8KK3JlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uCisKK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlcgorYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0bworYXBwbHkgYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIKK2NpcmN1bXN0YW5jZXMuCisKK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKK3BhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55CitzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCitpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSwgd2hpY2ggaXMKK2ltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gIE1hbnkgcGVvcGxlIGhhdmUgbWFkZQorZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAordGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQKK3N5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcKK3RvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAoraW1wb3NlIHRoYXQgY2hvaWNlLgorCitUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KK2JlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgorCisgIDguIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmljdGVkIGluCitjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UKK21heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZwordGhvc2UgY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZworY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzCit0aGUgbGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKworICA5LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucworb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCitiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8KK2FkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorCitFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIElmIHRoZSBQcm9ncmFtCitzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueQorbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YKK3RoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24uCisKKyAgMTAuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBQcm9ncmFtIGludG8gb3RoZXIgZnJlZQorcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gdGhlIGF1dGhvcgordG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMKK21ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91ciBkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzCitvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kCitvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgTk8gV0FSUkFOVFkKKworICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkKK0ZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTgorT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUworUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKK09SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTCitUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFCitQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywKK1JFUEFJUiBPUiBDT1JSRUNUSU9OLgorCisgIDEyLiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcKK1dJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IKK1JFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCitJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcKK09VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQKK1RPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQorWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIKK1BST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JhdG1hbi1hZHYudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JhdG1hbi1hZHYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3ZjBjZGQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYmF0bWFuLWFkdi50eHQKQEAgLTAsMCArMSwyNDAgQEAKK1tzdGF0ZTogMjEtMTEtMjAxMF0KKworQkFUTUFOLUFEVgorLS0tLS0tLS0tLQorCitCYXRtYW4gIGFkdmFuY2VkICBpcyAgYSBuZXcgYXBwcm9hY2ggdG8gd2lyZWxlc3MgbmV0d29ya2luZyB3aGljaAorZG9lcyBubyBsb25nZXIgb3BlcmF0ZSBvbiB0aGUgSVAgYmFzaXMuIFVubGlrZSB0aGUgYmF0bWFuIGRhZW1vbiwKK3doaWNoICBleGNoYW5nZXMgIGluZm9ybWF0aW9uICB1c2luZyBVRFAgcGFja2V0cyBhbmQgc2V0cyByb3V0aW5nCit0YWJsZXMsIGJhdG1hbi1hZHZhbmNlZCBvcGVyYXRlcyBvbiBJU08vT1NJIExheWVyIDIgb25seSBhbmQgdXNlcworYW5kICByb3V0ZXMgIChvciAgYmV0dGVyOiBicmlkZ2VzKSBFdGhlcm5ldCBGcmFtZXMuIEl0IGVtdWxhdGVzIGEKK3ZpcnR1YWwgbmV0d29yayBzd2l0Y2ggb2YgYWxsIG5vZGVzIHBhcnRpY2lwYXRpbmcuICBUaGVyZWZvcmUgYWxsCitub2RlcyAgYXBwZWFyICB0byBiZSBsaW5rIGxvY2FsLCB0aHVzIGFsbCBoaWdoZXIgb3BlcmF0aW5nIHByb3RvLQorY29scyB3b24ndCBiZSBhZmZlY3RlZCBieSBhbnkgY2hhbmdlcyB3aXRoaW4gdGhlIG5ldHdvcmsuIFlvdSBjYW4KK3J1biBhbG1vc3QgYW55IHByb3RvY29sIGFib3ZlIGJhdG1hbiBhZHZhbmNlZCwgcHJvbWluZW50IGV4YW1wbGVzCithcmU6IElQdjQsIElQdjYsIERIQ1AsIElQWC4KKworQmF0bWFuIGFkdmFuY2VkIHdhcyBpbXBsZW1lbnRlZCBhcyBhIExpbnV4IGtlcm5lbCBkcml2ZXIgIHRvICByZS0KK2R1Y2UgdGhlIG92ZXJoZWFkIHRvIGEgbWluaW11bS4gSXQgZG9lcyBub3QgZGVwZW5kIG9uIGFueSAob3RoZXIpCituZXR3b3JrIGRyaXZlciwgYW5kIGNhbiBiZSB1c2VkIG9uIHdpZmkgYXMgd2VsbCBhcyBldGhlcm5ldCAgbGFuLAordnBuLCAgZXRjIC4uLiAoYW55dGhpbmcgd2l0aCBldGhlcm5ldC1zdHlsZSBsYXllciAyKS4KKworQ09ORklHVVJBVElPTgorLS0tLS0tLS0tLS0tLQorCitMb2FkIHRoZSBiYXRtYW4tYWR2IG1vZHVsZSBpbnRvIHlvdXIga2VybmVsOgorCisjIGluc21vZCBiYXRtYW4tYWR2LmtvCisKK1RoZSAgbW9kdWxlICBpcyBub3cgd2FpdGluZyBmb3IgYWN0aXZhdGlvbi4gWW91IG11c3QgYWRkIHNvbWUgaW4tCit0ZXJmYWNlcyBvbiB3aGljaCBiYXRtYW4gY2FuIG9wZXJhdGUuIEFmdGVyICBsb2FkaW5nICB0aGUgIG1vZHVsZQorYmF0bWFuICBhZHZhbmNlZCAgd2lsbCBzY2FuIHlvdXIgc3lzdGVtcyBpbnRlcmZhY2VzIHRvIHNlYXJjaCBmb3IKK2NvbXBhdGlibGUgaW50ZXJmYWNlcy4gT25jZSBmb3VuZCwgaXQgd2lsbCBjcmVhdGUgIHN1YmZvbGRlcnMgIGluCit0aGUgL3N5cyBkaXJlY3RvcmllcyBvZiBlYWNoIHN1cHBvcnRlZCBpbnRlcmZhY2UsIGUuZy4KKworIyBscyAvc3lzL2NsYXNzL25ldC9ldGgwL2JhdG1hbl9hZHYvCisjIGlmYWNlX3N0YXR1cyAgbWVzaF9pZmFjZQorCitJZiBhbiBpbnRlcmZhY2UgZG9lcyBub3QgaGF2ZSB0aGUgImJhdG1hbl9hZHYiIHN1YmZvbGRlciBpdCBwcm9iLQorYWJseSBpcyBub3Qgc3VwcG9ydGVkLiBOb3Qgc3VwcG9ydGVkICBpbnRlcmZhY2VzICBhcmU6ICBsb29wYmFjaywKK25vbi1ldGhlcm5ldCBhbmQgYmF0bWFuJ3Mgb3duIGludGVyZmFjZXMuCisKK05vdGU6ICBBZnRlciB0aGUgbW9kdWxlIHdhcyBsb2FkZWQgaXQgd2lsbCBjb250aW51b3VzbHkgd2F0Y2ggZm9yCituZXcgaW50ZXJmYWNlcyB0byB2ZXJpZnkgdGhlIGNvbXBhdGliaWxpdHkuIFRoZXJlIGlzIG5vICBuZWVkICB0bworcmVsb2FkIHRoZSBtb2R1bGUgaWYgeW91IHBsdWcgeW91ciBVU0Igd2lmaSBhZGFwdGVyIGludG8geW91ciBtYS0KK2NoaW5lIGFmdGVyIGJhdG1hbiBhZHZhbmNlZCB3YXMgaW5pdGlhbGx5IGxvYWRlZC4KKworVG8gYWN0aXZhdGUgYSAgZ2l2ZW4gIGludGVyZmFjZSAgc2ltcGx5ICB3cml0ZSAgImJhdDAiICBpbnRvICBpdHMKKyJtZXNoX2lmYWNlIiBmaWxlIGluc2lkZSB0aGUgYmF0bWFuX2FkdiBzdWJmb2xkZXI6CisKKyMgZWNobyBiYXQwID4gL3N5cy9jbGFzcy9uZXQvZXRoMC9iYXRtYW5fYWR2L21lc2hfaWZhY2UKKworUmVwZWF0ICB0aGlzIHN0ZXAgZm9yIGFsbCBpbnRlcmZhY2VzIHlvdSB3aXNoIHRvIGFkZC4gIE5vdyBiYXRtYW4KK3N0YXJ0cyB1c2luZy9icm9hZGNhc3Rpbmcgb24gdGhpcy90aGVzZSBpbnRlcmZhY2UocykuCisKK0J5IHJlYWRpbmcgdGhlICJpZmFjZV9zdGF0dXMiIGZpbGUgeW91IGNhbiBjaGVjayBpdHMgc3RhdHVzOgorCisjIGNhdCAvc3lzL2NsYXNzL25ldC9ldGgwL2JhdG1hbl9hZHYvaWZhY2Vfc3RhdHVzCisjIGFjdGl2ZQorCitUbyBkZWFjdGl2YXRlIGFuIGludGVyZmFjZSB5b3UgaGF2ZSAgdG8gIHdyaXRlICAibm9uZSIgIGludG8gIGl0cworIm1lc2hfaWZhY2UiIGZpbGU6CisKKyMgZWNobyBub25lID4gL3N5cy9jbGFzcy9uZXQvZXRoMC9iYXRtYW5fYWR2L21lc2hfaWZhY2UKKworCitBbGwgIG1lc2ggIHdpZGUgIHNldHRpbmdzICBjYW4gYmUgZm91bmQgaW4gYmF0bWFuJ3Mgb3duIGludGVyZmFjZQorZm9sZGVyOgorCisjICBscyAgL3N5cy9jbGFzcy9uZXQvYmF0MC9tZXNoLworIyAgYWdncmVnYXRlZF9vZ21zICBib25kaW5nICBmcmFnbWVudGF0aW9uICBvcmlnX2ludGVydmFsCisjICB2aXNfbW9kZQorCisKK1RoZXJlIGlzIGEgc3BlY2lhbCBmb2xkZXIgZm9yIGRlYnVnZ2luZyBpbmZvcm1hdGlvbnM6CisKKyMgIGxzIC9zeXMva2VybmVsL2RlYnVnL2JhdG1hbl9hZHYvYmF0MC8KKyMgIG9yaWdpbmF0b3JzICBzb2NrZXQgIHRyYW5zdGFibGVfZ2xvYmFsICB0cmFuc3RhYmxlX2xvY2FsCisjICB2aXNfZGF0YQorCisKK1NvbWUgb2YgdGhlIGZpbGVzIGNvbnRhaW4gYWxsIHNvcnQgb2Ygc3RhdHVzIGluZm9ybWF0aW9uICByZWdhcmQtCitpbmcgIHRoZSAgbWVzaCAgbmV0d29yay4gIEZvciAgZXhhbXBsZSwgeW91IGNhbiB2aWV3IHRoZSB0YWJsZSBvZgorb3JpZ2luYXRvcnMgKG1lc2ggcGFydGljaXBhbnRzKSB3aXRoOgorCisjIGNhdCAvc3lzL2tlcm5lbC9kZWJ1Zy9iYXRtYW5fYWR2L2JhdDAvb3JpZ2luYXRvcnMKKworT3RoZXIgZmlsZXMgYWxsb3cgdG8gY2hhbmdlIGJhdG1hbidzIGJlaGF2aW91ciB0byBiZXR0ZXIgZml0IHlvdXIKK3JlcXVpcmVtZW50cy4gIEZvciBpbnN0YW5jZSwgeW91IGNhbiBjaGVjayB0aGUgY3VycmVudCBvcmlnaW5hdG9yCitpbnRlcnZhbCAodmFsdWUgaW4gbWlsbGlzZWNvbmRzIHdoaWNoIGRldGVybWluZXMgaG93IG9mdGVuIGJhdG1hbgorc2VuZHMgaXRzIGJyb2FkY2FzdCBwYWNrZXRzKToKKworIyBjYXQgL3N5cy9jbGFzcy9uZXQvYmF0MC9tZXNoL29yaWdfaW50ZXJ2YWwKKyMgMTAwMAorCithbmQgYWxzbyBjaGFuZ2UgaXRzIHZhbHVlOgorCisjIGVjaG8gMzAwMCA+IC9zeXMvY2xhc3MvbmV0L2JhdDAvbWVzaC9vcmlnX2ludGVydmFsCisKK0luIHZlcnkgbW9iaWxlIHNjZW5hcmlvcywgeW91IG1pZ2h0IHdhbnQgdG8gYWRqdXN0IHRoZSBvcmlnaW5hdG9yCitpbnRlcnZhbCB0byBhIGxvd2VyIHZhbHVlLiBUaGlzIHdpbGwgbWFrZSB0aGUgbWVzaCAgbW9yZSAgcmVzcG9uLQorc2l2ZSB0byB0b3BvbG9neSBjaGFuZ2VzLCBidXQgd2lsbCBhbHNvIGluY3JlYXNlIHRoZSBvdmVyaGVhZC4KKworCitVU0FHRQorLS0tLS0KKworVG8gIG1ha2UgdXNlIG9mIHlvdXIgbmV3bHkgY3JlYXRlZCBtZXNoLCBiYXRtYW4gYWR2YW5jZWQgcHJvdmlkZXMKK2EgbmV3IGludGVyZmFjZSAiYmF0MCIgd2hpY2ggeW91IHNob3VsZCB1c2UgZnJvbSB0aGlzICBwb2ludCAgb24uCitBbGwgIGludGVyZmFjZXMgIGFkZGVkICB0byAgYmF0bWFuICBhZHZhbmNlZCBhcmUgbm90IHJlbGV2YW50IGFueQorbG9uZ2VyIGJlY2F1c2UgYmF0bWFuIGhhbmRsZXMgdGhlbSBmb3IgeW91LiBCYXNpY2FsbHksIG9uZSAiaGFuZHMKK292ZXIiIHRoZSBkYXRhIGJ5IHVzaW5nIHRoZSBiYXRtYW4gaW50ZXJmYWNlIGFuZCBiYXRtYW4gd2lsbCBtYWtlCitzdXJlIGl0IHJlYWNoZXMgaXRzIGRlc3RpbmF0aW9uLgorCitUaGUgImJhdDAiIGludGVyZmFjZSBjYW4gYmUgdXNlZCBsaWtlIGFueSAgb3RoZXIgIHJlZ3VsYXIgIGludGVyLQorZmFjZS4gIEl0IG5lZWRzIGFuIElQIGFkZHJlc3Mgd2hpY2ggY2FuIGJlIGVpdGhlciBzdGF0aWNhbGx5IGNvbi0KK2ZpZ3VyZWQgb3IgZHluYW1pY2FsbHkgKGJ5IHVzaW5nIERIQ1Agb3Igc2ltaWxhciBzZXJ2aWNlcyk6CisKKyMgTm9kZUE6IGlmY29uZmlnIGJhdDAgMTkyLjE2OC4wLjEKKyMgTm9kZUI6IGlmY29uZmlnIGJhdDAgMTkyLjE2OC4wLjIKKyMgTm9kZUI6IHBpbmcgMTkyLjE2OC4wLjEKKworTm90ZTogIEluICBvcmRlciB0byBhdm9pZCBwcm9ibGVtcyByZW1vdmUgYWxsIElQIGFkZHJlc3NlcyBwcmV2aS0KK291c2x5IGFzc2lnbmVkIHRvIGludGVyZmFjZXMgbm93IHVzZWQgYnkgYmF0bWFuIGFkdmFuY2VkLCBlLmcuCisKKyMgaWZjb25maWcgZXRoMCAwLjAuMC4wCisKKworVklTVUFMSVpBVElPTgorLS0tLS0tLS0tLS0tLQorCitJZiB5b3Ugd2FudCB0b3BvbG9neSB2aXN1YWxpemF0aW9uLCBhdCBsZWFzdCBvbmUgbWVzaCAgbm9kZSAgbXVzdAorYmUgY29uZmlndXJlZCBhcyBWSVMtc2VydmVyOgorCisjIGVjaG8gInNlcnZlciIgPiAvc3lzL2NsYXNzL25ldC9iYXQwL21lc2gvdmlzX21vZGUKKworRWFjaCAgbm9kZSAgaXMgIGVpdGhlciBjb25maWd1cmVkIGFzICJzZXJ2ZXIiIG9yIGFzICJjbGllbnQiIChkZS0KK2ZhdWx0OiAiY2xpZW50IikuICBDbGllbnRzIHNlbmQgdGhlaXIgdG9wb2xvZ3kgZGF0YSB0byB0aGUgc2VydmVyCituZXh0IHRvIHRoZW0sIGFuZCBzZXJ2ZXIgc3luY2hyb25pemUgd2l0aCBvdGhlciBzZXJ2ZXJzLiBJZiB0aGVyZQoraXMgbm8gc2VydmVyIGNvbmZpZ3VyZWQgKGRlZmF1bHQpIHdpdGhpbiB0aGUgIG1lc2gsICBubyAgdG9wb2xvZ3kKK2luZm9ybWF0aW9uICAgd2lsbCAgYmUgIHRyYW5zbWl0dGVkLiAgV2l0aCAgdGhlc2UgICJzeW5jaHJvbml6aW5nCitzZXJ2ZXJzIiwgdGhlcmUgY2FuIGJlIDEgb3IgbW9yZSB2aXMgc2VydmVycyBzaGFyaW5nIHRoZSBzYW1lIChvcgorYXQgbGVhc3QgdmVyeSBzaW1pbGFyKSBkYXRhLgorCitXaGVuICBjb25maWd1cmVkICBhcyAgc2VydmVyLCAgeW91IGNhbiBnZXQgYSB0b3BvbG9neSBzbmFwc2hvdCBvZgoreW91ciBtZXNoOgorCisjIGNhdCAvc3lzL2tlcm5lbC9kZWJ1Zy9iYXRtYW5fYWR2L2JhdDAvdmlzX2RhdGEKKworVGhpcyByYXcgb3V0cHV0IGlzIGludGVuZGVkIHRvIGJlIGVhc2lseSBwYXJzYWJsZSBhbmQgY29udmVydGFibGUKK3dpdGggIG90aGVyIHRvb2xzLiBIYXZlIGEgbG9vayBhdCB0aGUgYmF0Y3RsIFJFQURNRSBpZiB5b3Ugd2FudCBhCit2aXMgb3V0cHV0IGluIGRvdCBvciBqc29uIGZvcm1hdCBmb3IgaW5zdGFuY2UgYW5kIGhvdyB0aG9zZSAgb3V0LQorcHV0cyBjb3VsZCB0aGVuIGJlIHZpc3VhbGlzZWQgaW4gYW4gaW1hZ2UuCisKK1RoZSByYXcgZm9ybWF0IGNvbnNpc3RzIG9mIGNvbW1hIHNlcGFyYXRlZCB2YWx1ZXMgcGVyIGVudHJ5IHdoZXJlCitlYWNoIGVudHJ5IGlzIGdpdmluZyBpbmZvcm1hdGlvbiBhYm91dCBhICBjZXJ0YWluICBzb3VyY2UgIGludGVyLQorZmFjZS4gIEVhY2ggIGVudHJ5IGNhbi9oYXMgdG8gaGF2ZSB0aGUgZm9sbG93aW5nIHZhbHVlczoKKy0+ICJtYWMiIC0gbWFjIGFkZHJlc3Mgb2YgYW4gb3JpZ2luYXRvcidzIHNvdXJjZSBpbnRlcmZhY2UKKyAgICAgICAgICAgKGVhY2ggbGluZSBiZWdpbnMgd2l0aCBpdCkKKy0+ICJUUSBtYWMgIHZhbHVlIiAgLSAgc3JjIG1hYydzIGxpbmsgcXVhbGl0eSB0b3dhcmRzIG1hYyBhZGRyZXNzCisgICAgICAgICAgICAgICAgICAgICAgIG9mIGEgbmVpZ2hib3Igb3JpZ2luYXRvcidzIGludGVyZmFjZSB3aGljaAorICAgICAgICAgICAgICAgICAgICAgICBpcyBiZWluZyB1c2VkIGZvciByb3V0aW5nCistPiAiSE5BIG1hYyIgLSBITkEgYW5ub3VuY2VkIGJ5IHNvdXJjZSBtYWMKKy0+ICJQUklNQVJZIiAtIHRoaXMgIGlzIGEgcHJpbWFyeSBpbnRlcmZhY2UKKy0+ICJTRUMgbWFjIiAtIHNlY29uZGFyeSBtYWMgYWRkcmVzcyBvZiBzb3VyY2UKKyAgICAgICAgICAgICAgIChyZXF1aXJlcyBwcmVjZWRpbmcgUFJJTUFSWSkKKworVGhlIFRRIHZhbHVlIGhhcyBhIHJhbmdlIGZyb20gNCB0byAyNTUgd2l0aCAyNTUgYmVpbmcgIHRoZSAgYmVzdC4KK1RoZSBITkEgZW50cmllcyBhcmUgc2hvd2luZyB3aGljaCBob3N0cyBhcmUgY29ubmVjdGVkIHRvIHRoZSBtZXNoCit2aWEgYmF0MCBvciBiZWluZyBicmlkZ2VkIGludG8gdGhlIG1lc2ggbmV0d29yay4gIFRoZSBQUklNQVJZL1NFQwordmFsdWVzIGFyZSBvbmx5IGFwcGxpZWQgb24gcHJpbWFyeSBpbnRlcmZhY2VzCisKKworTE9HR0lORy9ERUJVR0dJTkcKKy0tLS0tLS0tLS0tLS0tLS0tCisKK0FsbCBlcnJvciBtZXNzYWdlcywgd2FybmluZ3MgYW5kIGluZm9ybWF0aW9uIG1lc3NhZ2VzIGFyZSBzZW50IHRvCit0aGUga2VybmVsIGxvZy4gRGVwZW5kaW5nIG9uIHlvdXIgb3BlcmF0aW5nICBzeXN0ZW0gIGRpc3RyaWJ1dGlvbgordGhpcyAgY2FuICBiZSByZWFkIGluIG9uZSBvZiBhIG51bWJlciBvZiB3YXlzLiBUcnkgdXNpbmcgdGhlIGNvbS0KK21hbmRzOiBkbWVzZywgbG9ncmVhZCwgb3IgbG9va2luZyBpbiB0aGUgZmlsZXMgIC92YXIvbG9nL2tlcm4ubG9nCitvciAgL3Zhci9sb2cvc3lzbG9nLiAgQWxsICBiYXRtYW4tYWR2ICBtZXNzYWdlcyBhcmUgcHJlZml4ZWQgd2l0aAorImJhdG1hbi1hZHY6IiBTbyB0byBzZWUganVzdCB0aGVzZSBtZXNzYWdlcyB0cnkKKworIyBkbWVzZyB8IGdyZXAgYmF0bWFuLWFkdgorCitXaGVuIGludmVzdGlnYXRpbmcgcHJvYmxlbXMgd2l0aCB5b3VyIG1lc2ggbmV0d29yayAgaXQgIGlzICBzb21lLQordGltZXMgIG5lY2Vzc2FyeSAgdG8gc2VlIG1vcmUgZGV0YWlsIGRlYnVnIG1lc3NhZ2VzLiBUaGlzIG11c3QgYmUKK2VuYWJsZWQgd2hlbiBjb21waWxpbmcgdGhlIGJhdG1hbi1hZHYgbW9kdWxlLiBXaGVuIGJ1aWxkaW5nICBiYXQtCittYW4tYWR2ICBhcyAgcGFydCBvZiBrZXJuZWwsIHVzZSAibWFrZSBtZW51Y29uZmlnIiBhbmQgZW5hYmxlIHRoZQorb3B0aW9uICJCLkEuVC5NLkEuTi4gZGVidWdnaW5nIi4KKworVGhvc2UgYWRkaXRpb25hbCAgZGVidWcgbWVzc2FnZXMgY2FuIGJlIGFjY2Vzc2VkICB1c2luZyBhIHNwZWNpYWwKK2ZpbGUgaW4gZGVidWdmcworCisjIGNhdCAvc3lzL2tlcm5lbC9kZWJ1Zy9iYXRtYW5fYWR2L2JhdDAvbG9nCisKK1RoZSBhZGRpdGlvbmFsIGRlYnVnIG91dHB1dCBpcyBieSBkZWZhdWx0IGRpc2FibGVkLiBJdCBjYW4gYmUgZW4tCithYmxlZCAgZHVyaW5nIHJ1biB0aW1lLiBGb2xsb3dpbmcgbG9nX2xldmVscyBhcmUgZGVmaW5lZDoKKworMCAtIEFsbCAgZGVidWcgIG91dHB1dCAgZGlzYWJsZWQKKzEgLSBFbmFibGUgbWVzc2FnZXMgcmVsYXRlZCB0byByb3V0aW5nIC8gZmxvb2RpbmcgLyBicm9hZGNhc3RpbmcKKzIgLSBFbmFibGUgcm91dGUgb3IgaG5hIGFkZGVkIC8gY2hhbmdlZCAvIGRlbGV0ZWQKKzMgLSBFbmFibGUgYWxsIG1lc3NhZ2VzCisKK1RoZSBkZWJ1ZyBvdXRwdXQgY2FuIGJlIGNoYW5nZWQgYXQgcnVudGltZSAgdXNpbmcgIHRoZSAgZmlsZQorL3N5cy9jbGFzcy9uZXQvYmF0MC9tZXNoL2xvZ19sZXZlbC4gZS5nLgorCisjIGVjaG8gMiA+IC9zeXMvY2xhc3MvbmV0L2JhdDAvbWVzaC9sb2dfbGV2ZWwKKword2lsbCBlbmFibGUgZGVidWcgbWVzc2FnZXMgZm9yIHdoZW4gcm91dGVzIG9yIEhOQXMgY2hhbmdlLgorCisKK0JBVENUTAorLS0tLS0tCisKK0FzIGJhdG1hbiBhZHZhbmNlZCBvcGVyYXRlcyBvbiBsYXllciAyIGFsbCBob3N0cyBwYXJ0aWNpcGF0aW5nIGluCit0aGUgIHZpcnR1YWwgc3dpdGNoIGFyZSBjb21wbGV0ZWx5IHRyYW5zcGFyZW50IGZvciBhbGwgIHByb3RvY29scworYWJvdmUgbGF5ZXIgMi4gVGhlcmVmb3JlIHRoZSBjb21tb24gZGlhZ25vc2lzIHRvb2xzIGRvICBub3QgIHdvcmsKK2FzICBleHBlY3RlZC4gIFRvICBvdmVyY29tZSB0aGVzZSBwcm9ibGVtcyBiYXRjdGwgd2FzIGNyZWF0ZWQuIEF0Cit0aGUgIG1vbWVudCB0aGUgIGJhdGN0bCBjb250YWlucyBwaW5nLCAgdHJhY2Vyb3V0ZSwgIHRjcGR1bXAgIGFuZAoraW50ZXJmYWNlcyB0byB0aGUga2VybmVsIG1vZHVsZSBzZXR0aW5ncy4KKworRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSBzZWUgdGhlIG1hbnBhZ2UgKG1hbiBiYXRjdGwpLgorCitiYXRjdGwgaXMgYXZhaWxhYmxlIG9uIGh0dHA6Ly93d3cub3Blbi1tZXNoLm9yZy8KKworCitDT05UQUNUCistLS0tLS0tCisKK1BsZWFzZSBzZW5kIHVzIGNvbW1lbnRzLCBleHBlcmllbmNlcywgcXVlc3Rpb25zLCBhbnl0aGluZyA6KQorCitJUkM6ICAgICAgICAgICAgI2JhdG1hbiAgIG9uICAgaXJjLmZyZWVub2RlLm9yZworTWFpbGluZy1saXN0OiAgIGIuYS50Lm0uYS5uQGIuYS50Lm0uYS5uQGxpc3RzLm9wZW4tbWVzaC5vcmcKKyAgICAgICAgICAgICAgICAob3B0aW9uYWwgICBzdWJzY3JpcHRpb24gICBhdAorICAgICAgICAgICAgICAgICBodHRwczovL2xpc3RzLm9wZW4tbWVzaC5vcmcvbW0vbGlzdGluZm8vYi5hLnQubS5hLm4pCisKK1lvdSBjYW4gYWxzbyBjb250YWN0IHRoZSBBdXRob3JzOgorCitNYXJlayAgTGluZG5lciAgPGxpbmRuZXJfbWFyZWtAeWFob28uZGU+CitTaW1vbiAgV3VuZGVybGljaCAgPHNpd3VAaHJ6LnR1LWNoZW1uaXR6LmRlPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RjY3AudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RjY3AudHh0CmluZGV4IDI3MWQ1MjQuLmIzOTVjYTYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kY2NwLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGNjcC50eHQKQEAgLTQ3LDYgKzQ3LDI2IEBACiAKIFNvY2tldCBvcHRpb25zCiA9PT09PT09PT09PT09PQorRENDUF9TT0NLT1BUX1FQT0xJQ1lfSUQgc2V0cyB0aGUgZGVxdWV1aW5nIHBvbGljeSBmb3Igb3V0Z29pbmcgcGFja2V0cy4gSXQgdGFrZXMKK2EgcG9saWN5IElEIGFzIGFyZ3VtZW50IGFuZCBjYW4gb25seSBiZSBzZXQgYmVmb3JlIHRoZSBjb25uZWN0aW9uIChpLmUuIGNoYW5nZXMKK2R1cmluZyBhbiBlc3RhYmxpc2hlZCBjb25uZWN0aW9uIGFyZSBub3Qgc3VwcG9ydGVkKS4gQ3VycmVudGx5LCB0d28gcG9saWNpZXMgYXJlCitkZWZpbmVkOiB0aGUgInNpbXBsZSIgcG9saWN5IChEQ0NQUV9QT0xJQ1lfU0lNUExFKSwgd2hpY2ggZG9lcyBub3RoaW5nIHNwZWNpYWwsCithbmQgYSBwcmlvcml0eS1iYXNlZCB2YXJpYW50IChEQ0NQUV9QT0xJQ1lfUFJJTykuIFRoZSBsYXR0ZXIgYWxsb3dzIHRvIHBhc3MgYW4KK3UzMiBwcmlvcml0eSB2YWx1ZSBhcyBhbmNpbGxhcnkgZGF0YSB0byBzZW5kbXNnKCksIHdoZXJlIGhpZ2hlciBudW1iZXJzIGluZGljYXRlCithIGhpZ2hlciBwYWNrZXQgcHJpb3JpdHkgKHNpbWlsYXIgdG8gU09fUFJJT1JJVFkpLiBUaGlzIGFuY2lsbGFyeSBkYXRhIG5lZWRzIHRvCitiZSBmb3JtYXR0ZWQgdXNpbmcgYSBjbXNnKDMpIG1lc3NhZ2UgaGVhZGVyIGZpbGxlZCBpbiBhcyBmb2xsb3dzOgorCWNtc2ctPmNtc2dfbGV2ZWwgPSBTT0xfRENDUDsKKwljbXNnLT5jbXNnX3R5cGUJID0gRENDUF9TQ01fUFJJT1JJVFk7CisJY21zZy0+Y21zZ19sZW4JID0gQ01TR19MRU4oc2l6ZW9mKHVpbnQzMl90KSk7CS8qIG9yIENNU0dfTEVOKDQpICovCisKK0RDQ1BfU09DS09QVF9RUE9MSUNZX1RYUUxFTiBzZXRzIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiB0aGUgb3V0cHV0IHF1ZXVlLiBBIHplcm8KK3ZhbHVlIGlzIGFsd2F5cyBpbnRlcnByZXRlZCBhcyB1bmJvdW5kZWQgcXVldWUgbGVuZ3RoLiBJZiBkaWZmZXJlbnQgZnJvbSB6ZXJvLAordGhlIGludGVycHJldGF0aW9uIG9mIHRoaXMgcGFyYW1ldGVyIGRlcGVuZHMgb24gdGhlIGN1cnJlbnQgZGVxdWV1aW5nIHBvbGljeQorKHNlZSBhYm92ZSk6IHRoZSAic2ltcGxlIiBwb2xpY3kgd2lsbCBlbmZvcmNlIGEgZml4ZWQgcXVldWUgc2l6ZSBieSByZXR1cm5pbmcKK0VBR0FJTiwgd2hlcmVhcyB0aGUgInByaW8iIHBvbGljeSBlbmZvcmNlcyBhIGZpeGVkIHF1ZXVlIGxlbmd0aCBieSBkcm9wcGluZyB0aGUKK2xvd2VzdC1wcmlvcml0eSBwYWNrZXQgZmlyc3QuIFRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGlzIHBhcmFtZXRlciBpcworaW5pdGlhbGlzZWQgZnJvbSAvcHJvYy9zeXMvbmV0L2RjY3AvZGVmYXVsdC90eF9xbGVuLgorCiBEQ0NQX1NPQ0tPUFRfU0VSVklDRSBzZXRzIHRoZSBzZXJ2aWNlLiBUaGUgc3BlY2lmaWNhdGlvbiBtYW5kYXRlcyB1c2Ugb2YKIHNlcnZpY2UgY29kZXMgKFJGQyA0MzQwLCBzZWMuIDguMS4yKTsgaWYgdGhpcyBzb2NrZXQgb3B0aW9uIGlzIG5vdCBzZXQsCiB0aGUgc29ja2V0IHdpbGwgZmFsbCBiYWNrIHRvIDAgKHdoaWNoIG1lYW5zIHRoYXQgbm8gbWVhbmluZ2Z1bCBzZXJ2aWNlIGNvZGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9lMTAwLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9lMTAwLnR4dAppbmRleCA5NDRhYTU1Li4xNjJmMzIzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZTEwMC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2UxMDAudHh0CkBAIC03Miw3ICs3Miw3IEBACiAgICBldGh0b29sIC1HIGV0aD8gdHggbiwgd2hlcmUgbiBpcyB0aGUgbnVtYmVyIG9mIGRlc2lyZWQgdHggZGVzY3JpcHRvcnMuCiAKIFNwZWVkL0R1cGxleDogVGhlIGRyaXZlciBhdXRvLW5lZ290aWF0ZXMgdGhlIGxpbmsgc3BlZWQgYW5kIGR1cGxleCBzZXR0aW5ncyBieQotICAgZGVmYXVsdC4gRXRodG9vbCBjYW4gYmUgdXNlZCBhcyBmb2xsb3dzIHRvIGZvcmNlIHNwZWVkL2R1cGxleC4KKyAgIGRlZmF1bHQuIFRoZSBldGh0b29sIHV0aWxpdHkgY2FuIGJlIHVzZWQgYXMgZm9sbG93cyB0byBmb3JjZSBzcGVlZC9kdXBsZXguCiAKICAgIGV0aHRvb2wgLXMgZXRoPyAgYXV0b25lZyBvZmYgc3BlZWQgezEwfDEwMH0gZHVwbGV4IHtmdWxsfGhhbGZ9CiAKQEAgLTEyNiwzMCArMTI2LDIxIEBACiAgIC0tLS0tLS0KIAogICBUaGUgZHJpdmVyIHV0aWxpemVzIHRoZSBldGh0b29sIGludGVyZmFjZSBmb3IgZHJpdmVyIGNvbmZpZ3VyYXRpb24gYW5kCi0gIGRpYWdub3N0aWNzLCBhcyB3ZWxsIGFzIGRpc3BsYXlpbmcgc3RhdGlzdGljYWwgaW5mb3JtYXRpb24uICBFdGh0b29sCisgIGRpYWdub3N0aWNzLCBhcyB3ZWxsIGFzIGRpc3BsYXlpbmcgc3RhdGlzdGljYWwgaW5mb3JtYXRpb24uICBUaGUgZXRodG9vbAogICB2ZXJzaW9uIDEuNiBvciBsYXRlciBpcyByZXF1aXJlZCBmb3IgdGhpcyBmdW5jdGlvbmFsaXR5LgogCiAgIFRoZSBsYXRlc3QgcmVsZWFzZSBvZiBldGh0b29sIGNhbiBiZSBmb3VuZCBmcm9tCi0gIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZ2tlcm5lbC4KLQotICBOT1RFOiBFdGh0b29sIDEuNiBvbmx5IHN1cHBvcnRzIGEgbGltaXRlZCBzZXQgb2YgZXRodG9vbCBvcHRpb25zLiBTdXBwb3J0Ci0gIGZvciBhIG1vcmUgY29tcGxldGUgZXRodG9vbCBmZWF0dXJlIHNldCBjYW4gYmUgZW5hYmxlZCBieSB1cGdyYWRpbmcKLSAgZXRodG9vbCB0byBldGh0b29sLTEuOC4xLgotCisgIGh0dHA6Ly9mdHAua2VybmVsLm9yZy9wdWIvc29mdHdhcmUvbmV0d29yay9ldGh0b29sLwogCiAgIEVuYWJsaW5nIFdha2Ugb24gTEFOKiAoV29MKQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgV29MIGlzIHByb3ZpZGVkIHRocm91Z2ggdGhlIEV0aHRvb2wqIHV0aWxpdHkuIEV0aHRvb2wgaXMgaW5jbHVkZWQgd2l0aCBSZWQKLSAgSGF0KiA4LjAuIEZvciBvdGhlciBMaW51eCBkaXN0cmlidXRpb25zLCBkb3dubG9hZCBhbmQgaW5zdGFsbCBFdGh0b29sIGZyb20KLSAgdGhlIGZvbGxvd2luZyB3ZWJzaXRlOiBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2drZXJuZWwuCi0KLSAgRm9yIGluc3RydWN0aW9ucyBvbiBlbmFibGluZyBXb0wgd2l0aCBFdGh0b29sLCByZWZlciB0byB0aGUgRXRodG9vbCBtYW4gcGFnZS4KKyAgV29MIGlzIHByb3ZpZGVkIHRocm91Z2ggdGhlIGV0aHRvb2wqIHV0aWxpdHkuICBGb3IgaW5zdHJ1Y3Rpb25zIG9uIGVuYWJsaW5nCisgIFdvTCB3aXRoIGV0aHRvb2wsIHJlZmVyIHRvIHRoZSBldGh0b29sIG1hbiBwYWdlLgogCiAgIFdvTCB3aWxsIGJlIGVuYWJsZWQgb24gdGhlIHN5c3RlbSBkdXJpbmcgdGhlIG5leHQgc2h1dCBkb3duIG9yIHJlYm9vdC4gRm9yCiAgIHRoaXMgZHJpdmVyIHZlcnNpb24sIGluIG9yZGVyIHRvIGVuYWJsZSBXb0wsIHRoZSBlMTAwIGRyaXZlciBtdXN0IGJlCiAgIGxvYWRlZCB3aGVuIHNodXR0aW5nIGRvd24gb3IgcmVib290aW5nIHRoZSBzeXN0ZW0uCiAKLQogICBOQVBJCiAgIC0tLS0KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2UxMDAwLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9lMTAwMC50eHQKaW5kZXggZDkyNzFlNy4uNzFjYTk1OCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2UxMDAwLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZTEwMDAudHh0CkBAIC03OSw3ICs3OSw3IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KIChub3Qgc3VwcG9ydGVkIG9uIEludGVsKFIpIDgyNTQyLCA4MjU0MyBvciA4MjU0NC1iYXNlZCBhZGFwdGVycykKIFZhbGlkIFJhbmdlOiAgIDAsMSwzLDQsMTAwLTEwMDAwMCAoMD1vZmYsIDE9ZHluYW1pYywgMz1keW5hbWljIGNvbnNlcnZhdGl2ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgND1zaW1wbGlmaWVkIGJhbGFuY2luZykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ9c2ltcGxpZmllZCBiYWxhbmNpbmcpCiBEZWZhdWx0IFZhbHVlOiAzCiAKIFRoZSBkcml2ZXIgY2FuIGxpbWl0IHRoZSBhbW91bnQgb2YgaW50ZXJydXB0cyBwZXIgc2Vjb25kIHRoYXQgdGhlIGFkYXB0ZXIKQEAgLTEyNCw4ICsxMjQsOCBAQAogdGhlIHNhbWUgYXMgbW9kZSAzLCB0aGUgSW50ZXJydXB0VGhyb3R0bGVSYXRlIHdpbGwgYmUgaW5jcmVhc2VkIHN0ZXB3aXNlIHRvCiA3MDAwMCBmb3IgdHJhZmZpYyBpbiBjbGFzcyAiTG93ZXN0IGxhdGVuY3kiLgogCi1JbiBzaW1wbGlmaWVkIG1vZGUgdGhlIGludGVycnVwdCByYXRlIGlzIGJhc2VkIG9uIHRoZSByYXRpbyBvZiBUeCBhbmQKLVJ4IHRyYWZmaWMuICBJZiB0aGUgYnl0ZXMgcGVyIHNlY29uZCByYXRlIGlzIGFwcHJveGltYXRlbHkgZXF1YWwsIHRoZQorSW4gc2ltcGxpZmllZCBtb2RlIHRoZSBpbnRlcnJ1cHQgcmF0ZSBpcyBiYXNlZCBvbiB0aGUgcmF0aW8gb2YgVFggYW5kCitSWCB0cmFmZmljLiAgSWYgdGhlIGJ5dGVzIHBlciBzZWNvbmQgcmF0ZSBpcyBhcHByb3hpbWF0ZWx5IGVxdWFsLCB0aGUKIGludGVycnVwdCByYXRlIHdpbGwgZHJvcCBhcyBsb3cgYXMgMjAwMCBpbnRlcnJ1cHRzIHBlciBzZWNvbmQuICBJZiB0aGUKIHRyYWZmaWMgaXMgbW9zdGx5IHRyYW5zbWl0IG9yIG1vc3RseSByZWNlaXZlLCB0aGUgaW50ZXJydXB0IHJhdGUgY291bGQKIGJlIGFzIGhpZ2ggYXMgODAwMC4KQEAgLTI0NSw3ICsyNDUsNyBAQAogVHhEZXNjcmlwdG9yU3RlcAogLS0tLS0tLS0tLS0tLS0tLQogVmFsaWQgUmFuZ2U6ICAgIDEgKHVzZSBldmVyeSBUeCBEZXNjcmlwdG9yKQotCQk0ICh1c2UgZXZlcnkgNHRoIFR4IERlc2NyaXB0b3IpCisgICAgICAgICAgICAgICAgNCAodXNlIGV2ZXJ5IDR0aCBUeCBEZXNjcmlwdG9yKQogCiBEZWZhdWx0IFZhbHVlOiAgMSAodXNlIGV2ZXJ5IFR4IERlc2NyaXB0b3IpCiAKQEAgLTMxMiw3ICszMTIsNyBAQAogRGVmYXVsdCBWYWx1ZTogMjU2CiBVc2FnZTogaW5zbW9kIGUxMDAwLmtvIGNvcHlicmVhaz0xMjgKIAotRHJpdmVyIGNvcGllcyBhbGwgcGFja2V0cyBiZWxvdyBvciBlcXVhbGluZyB0aGlzIHNpemUgdG8gYSBmcmVzaCBSeAorRHJpdmVyIGNvcGllcyBhbGwgcGFja2V0cyBiZWxvdyBvciBlcXVhbGluZyB0aGlzIHNpemUgdG8gYSBmcmVzaCBSWAogYnVmZmVyIGJlZm9yZSBoYW5kaW5nIGl0IHVwIHRoZSBzdGFjay4KIAogVGhpcyBwYXJhbWV0ZXIgaXMgZGlmZmVyZW50IHRoYW4gb3RoZXIgcGFyYW1ldGVycywgaW4gdGhhdCBpdCBpcyBhCkBAIC00MzEsMTUgKzQzMSwxNSBAQAogICBFdGh0b29sCiAgIC0tLS0tLS0KICAgVGhlIGRyaXZlciB1dGlsaXplcyB0aGUgZXRodG9vbCBpbnRlcmZhY2UgZm9yIGRyaXZlciBjb25maWd1cmF0aW9uIGFuZAotICBkaWFnbm9zdGljcywgYXMgd2VsbCBhcyBkaXNwbGF5aW5nIHN0YXRpc3RpY2FsIGluZm9ybWF0aW9uLiAgRXRodG9vbAorICBkaWFnbm9zdGljcywgYXMgd2VsbCBhcyBkaXNwbGF5aW5nIHN0YXRpc3RpY2FsIGluZm9ybWF0aW9uLiAgVGhlIGV0aHRvb2wKICAgdmVyc2lvbiAxLjYgb3IgbGF0ZXIgaXMgcmVxdWlyZWQgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eS4KIAogICBUaGUgbGF0ZXN0IHJlbGVhc2Ugb2YgZXRodG9vbCBjYW4gYmUgZm91bmQgZnJvbQotICBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2drZXJuZWwuCisgIGh0dHA6Ly9mdHAua2VybmVsLm9yZy9wdWIvc29mdHdhcmUvbmV0d29yay9ldGh0b29sLwogCiAgIEVuYWJsaW5nIFdha2Ugb24gTEFOKiAoV29MKQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgV29MIGlzIGNvbmZpZ3VyZWQgdGhyb3VnaCB0aGUgRXRodG9vbCogdXRpbGl0eS4KKyAgV29MIGlzIGNvbmZpZ3VyZWQgdGhyb3VnaCB0aGUgZXRodG9vbCogdXRpbGl0eS4KIAogICBXb0wgd2lsbCBiZSBlbmFibGVkIG9uIHRoZSBzeXN0ZW0gZHVyaW5nIHRoZSBuZXh0IHNodXQgZG93biBvciByZWJvb3QuCiAgIEZvciB0aGlzIGRyaXZlciB2ZXJzaW9uLCBpbiBvcmRlciB0byBlbmFibGUgV29MLCB0aGUgZTEwMDAgZHJpdmVyIG11c3QgYmUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9lMTAwMGUudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2UxMDAwZS50eHQKaW5kZXggNmFhMDQ4Yi4uOTdiNWJhOSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2UxMDAwZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2UxMDAwZS50eHQKQEAgLTEsNSArMSw1IEBACiBMaW51eCogRHJpdmVyIGZvciBJbnRlbChSKSBOZXR3b3JrIENvbm5lY3Rpb24KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKIEludGVsIEdpZ2FiaXQgTGludXggZHJpdmVyLgogQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLgpAQCAtNjEsNiArNjEsMTIgQEAKIGxvYWQgb24gdGhlIHN5c3RlbSBhbmQgY2FuIGxvd2VyIENQVSB1dGlsaXphdGlvbiB1bmRlciBoZWF2eSBsb2FkLAogYnV0IHdpbGwgaW5jcmVhc2UgbGF0ZW5jeSBhcyBwYWNrZXRzIGFyZSBub3QgcHJvY2Vzc2VkIGFzIHF1aWNrbHkuCiAKK1RoZSBkZWZhdWx0IGJlaGF2aW91ciBvZiB0aGUgZHJpdmVyIHByZXZpb3VzbHkgYXNzdW1lZCBhIHN0YXRpYworSW50ZXJydXB0VGhyb3R0bGVSYXRlIHZhbHVlIG9mIDgwMDAsIHByb3ZpZGluZyBhIGdvb2QgZmFsbGJhY2sgdmFsdWUgZm9yCithbGwgdHJhZmZpYyB0eXBlcywgYnV0IGxhY2tpbmcgaW4gc21hbGwgcGFja2V0IHBlcmZvcm1hbmNlIGFuZCBsYXRlbmN5LgorVGhlIGhhcmR3YXJlIGNhbiBoYW5kbGUgbWFueSBtb3JlIHNtYWxsIHBhY2tldHMgcGVyIHNlY29uZCBob3dldmVyLCBhbmQKK2ZvciB0aGlzIHJlYXNvbiBhbiBhZGFwdGl2ZSBpbnRlcnJ1cHQgbW9kZXJhdGlvbiBhbGdvcml0aG0gd2FzIGltcGxlbWVudGVkLgorCiBUaGUgZHJpdmVyIGhhcyB0d28gYWRhcHRpdmUgbW9kZXMgKHNldHRpbmcgMSBvciAzKSBpbiB3aGljaAogaXQgZHluYW1pY2FsbHkgYWRqdXN0cyB0aGUgSW50ZXJydXB0VGhyb3R0bGVSYXRlIHZhbHVlIGJhc2VkIG9uIHRoZSB0cmFmZmljCiB0aGF0IGl0IHJlY2VpdmVzLiBBZnRlciBkZXRlcm1pbmluZyB0aGUgdHlwZSBvZiBpbmNvbWluZyB0cmFmZmljIGluIHRoZSBsYXN0CkBAIC04Niw4ICs5Miw4IEBACiB0aGUgc2FtZSBhcyBtb2RlIDMsIHRoZSBJbnRlcnJ1cHRUaHJvdHRsZVJhdGUgd2lsbCBiZSBpbmNyZWFzZWQgc3RlcHdpc2UgdG8KIDcwMDAwIGZvciB0cmFmZmljIGluIGNsYXNzICJMb3dlc3QgbGF0ZW5jeSIuCiAKLUluIHNpbXBsaWZpZWQgbW9kZSB0aGUgaW50ZXJydXB0IHJhdGUgaXMgYmFzZWQgb24gdGhlIHJhdGlvIG9mIFR4IGFuZAotUnggdHJhZmZpYy4gIElmIHRoZSBieXRlcyBwZXIgc2Vjb25kIHJhdGUgaXMgYXBwcm94aW1hdGVseSBlcXVhbCB0aGUKK0luIHNpbXBsaWZpZWQgbW9kZSB0aGUgaW50ZXJydXB0IHJhdGUgaXMgYmFzZWQgb24gdGhlIHJhdGlvIG9mIFRYIGFuZAorUlggdHJhZmZpYy4gIElmIHRoZSBieXRlcyBwZXIgc2Vjb25kIHJhdGUgaXMgYXBwcm94aW1hdGVseSBlcXVhbCwgdGhlCiBpbnRlcnJ1cHQgcmF0ZSB3aWxsIGRyb3AgYXMgbG93IGFzIDIwMDAgaW50ZXJydXB0cyBwZXIgc2Vjb25kLiAgSWYgdGhlCiB0cmFmZmljIGlzIG1vc3RseSB0cmFuc21pdCBvciBtb3N0bHkgcmVjZWl2ZSwgdGhlIGludGVycnVwdCByYXRlIGNvdWxkCiBiZSBhcyBoaWdoIGFzIDgwMDAuCkBAIC0xNzcsNyArMTgzLDcgQEAKIFZhbGlkIFJhbmdlOiAgIDAteHh4eHh4eCAoMD1vZmYpCiBEZWZhdWx0IFZhbHVlOiAyNTYKIAotRHJpdmVyIGNvcGllcyBhbGwgcGFja2V0cyBiZWxvdyBvciBlcXVhbGluZyB0aGlzIHNpemUgdG8gYSBmcmVzaCBSeAorRHJpdmVyIGNvcGllcyBhbGwgcGFja2V0cyBiZWxvdyBvciBlcXVhbGluZyB0aGlzIHNpemUgdG8gYSBmcmVzaCBSWAogYnVmZmVyIGJlZm9yZSBoYW5kaW5nIGl0IHVwIHRoZSBzdGFjay4KIAogVGhpcyBwYXJhbWV0ZXIgaXMgZGlmZmVyZW50IHRoYW4gb3RoZXIgcGFyYW1ldGVycywgaW4gdGhhdCBpdCBpcyBhCkBAIC0yMjMsMTcgKzIyOSwxNyBAQAogCiBXcml0ZVByb3RlY3ROVk0KIC0tLS0tLS0tLS0tLS0tLQotVmFsaWQgUmFuZ2U6IDAtMQotRGVmYXVsdCBWYWx1ZTogMSAoZW5hYmxlZCkKK1ZhbGlkIFJhbmdlOiAwLDEKK0RlZmF1bHQgVmFsdWU6IDEKIAotU2V0IHRoZSBoYXJkd2FyZSB0byBpZ25vcmUgYWxsIHdyaXRlL2VyYXNlIGN5Y2xlcyB0byB0aGUgR2JFIHJlZ2lvbiBpbiB0aGUKLUlDSHggTlZNIChub24tdm9sYXRpbGUgbWVtb3J5KS4gIFRoaXMgZmVhdHVyZSBjYW4gYmUgZGlzYWJsZWQgYnkgdGhlCi1Xcml0ZVByb3RlY3ROVk0gbW9kdWxlIHBhcmFtZXRlciAoZW5hYmxlZCBieSBkZWZhdWx0KSBvbmx5IGFmdGVyIGEgaGFyZHdhcmUKLXJlc2V0LCBidXQgdGhlIG1hY2hpbmUgbXVzdCBiZSBwb3dlciBjeWNsZWQgYmVmb3JlIHRyeWluZyB0byBlbmFibGUgd3JpdGVzLgotCi1Ob3RlOiB0aGUga2VybmVsIGJvb3Qgb3B0aW9uIGlvbWVtPXJlbGF4ZWQgbWF5IG5lZWQgdG8gYmUgc2V0IGlmIHRoZSBrZXJuZWwKLWNvbmZpZyBvcHRpb24gQ09ORklHX1NUUklDVF9ERVZNRU09eSwgaWYgdGhlIHJvb3QgdXNlciB3YW50cyB0byB3cml0ZSB0aGUKLU5WTSBmcm9tIHVzZXIgc3BhY2UgdmlhIGV0aHRvb2wuCitJZiBzZXQgdG8gMSwgY29uZmlndXJlIHRoZSBoYXJkd2FyZSB0byBpZ25vcmUgYWxsIHdyaXRlL2VyYXNlIGN5Y2xlcyB0byB0aGUKK0diRSByZWdpb24gaW4gdGhlIElDSHggTlZNIChpbiBvcmRlciB0byBwcmV2ZW50IGFjY2lkZW50YWwgY29ycnVwdGlvbiBvZiB0aGUKK05WTSkuIFRoaXMgZmVhdHVyZSBjYW4gYmUgZGlzYWJsZWQgYnkgc2V0dGluZyB0aGUgcGFyYW1ldGVyIHRvIDAgZHVyaW5nIGluaXRpYWwKK2RyaXZlciBsb2FkLgorTk9URTogVGhlIG1hY2hpbmUgbXVzdCBiZSBwb3dlciBjeWNsZWQgKGZ1bGwgb2ZmL29uKSB3aGVuIGVuYWJsaW5nIE5WTSB3cml0ZXMKK3ZpYSBzZXR0aW5nIHRoZSBwYXJhbWV0ZXIgdG8gemVyby4gT25jZSB0aGUgTlZNIGhhcyBiZWVuIGxvY2tlZCAodmlhIHRoZQorcGFyYW1ldGVyIGF0IDEgd2hlbiB0aGUgZHJpdmVyIGxvYWRzKSBpdCBjYW5ub3QgYmUgdW5sb2NrZWQgZXhjZXB0IHZpYSBwb3dlcgorY3ljbGUuCiAKIEFkZGl0aW9uYWwgQ29uZmlndXJhdGlvbnMKID09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTI1OSwzMiArMjY1LDMwIEBACiAgIC0gU29tZSBhZGFwdGVycyBsaW1pdCBKdW1ibyBGcmFtZXMgc2l6ZWQgcGFja2V0cyB0byBhIG1heGltdW0gb2YKICAgICA0MDk2IGJ5dGVzIGFuZCBzb21lIGFkYXB0ZXJzIGRvIG5vdCBzdXBwb3J0IEp1bWJvIEZyYW1lcy4KIAotCiAgIEV0aHRvb2wKICAgLS0tLS0tLQogICBUaGUgZHJpdmVyIHV0aWxpemVzIHRoZSBldGh0b29sIGludGVyZmFjZSBmb3IgZHJpdmVyIGNvbmZpZ3VyYXRpb24gYW5kCiAgIGRpYWdub3N0aWNzLCBhcyB3ZWxsIGFzIGRpc3BsYXlpbmcgc3RhdGlzdGljYWwgaW5mb3JtYXRpb24uICBXZQotICBzdHJvbmdseSByZWNvbW1lbmQgZG93bmxvYWRpbmcgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIEV0aHRvb2wgYXQ6CisgIHN0cm9uZ2x5IHJlY29tbWVuZCBkb3dubG9hZGluZyB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgZXRodG9vbCBhdDoKIAotICBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2drZXJuZWwuCisgIGh0dHA6Ly9mdHAua2VybmVsLm9yZy9wdWIvc29mdHdhcmUvbmV0d29yay9ldGh0b29sLwogCiAgIFNwZWVkIGFuZCBEdXBsZXgKICAgLS0tLS0tLS0tLS0tLS0tLQotICBTcGVlZCBhbmQgRHVwbGV4IGFyZSBjb25maWd1cmVkIHRocm91Z2ggdGhlIEV0aHRvb2wqIHV0aWxpdHkuIEZvcgotICBpbnN0cnVjdGlvbnMsICByZWZlciB0byB0aGUgRXRodG9vbCBtYW4gcGFnZS4KKyAgU3BlZWQgYW5kIER1cGxleCBhcmUgY29uZmlndXJlZCB0aHJvdWdoIHRoZSBldGh0b29sKiB1dGlsaXR5LiBGb3IKKyAgaW5zdHJ1Y3Rpb25zLCAgcmVmZXIgdG8gdGhlIGV0aHRvb2wgbWFuIHBhZ2UuCiAKICAgRW5hYmxpbmcgV2FrZSBvbiBMQU4qIChXb0wpCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICBXb0wgaXMgY29uZmlndXJlZCB0aHJvdWdoIHRoZSBFdGh0b29sKiB1dGlsaXR5LiBGb3IgaW5zdHJ1Y3Rpb25zIG9uCi0gIGVuYWJsaW5nIFdvTCB3aXRoIEV0aHRvb2wsIHJlZmVyIHRvIHRoZSBFdGh0b29sIG1hbiBwYWdlLgorICBXb0wgaXMgY29uZmlndXJlZCB0aHJvdWdoIHRoZSBldGh0b29sKiB1dGlsaXR5LiBGb3IgaW5zdHJ1Y3Rpb25zIG9uCisgIGVuYWJsaW5nIFdvTCB3aXRoIGV0aHRvb2wsIHJlZmVyIHRvIHRoZSBldGh0b29sIG1hbiBwYWdlLgogCiAgIFdvTCB3aWxsIGJlIGVuYWJsZWQgb24gdGhlIHN5c3RlbSBkdXJpbmcgdGhlIG5leHQgc2h1dCBkb3duIG9yIHJlYm9vdC4KICAgRm9yIHRoaXMgZHJpdmVyIHZlcnNpb24sIGluIG9yZGVyIHRvIGVuYWJsZSBXb0wsIHRoZSBlMTAwMGUgZHJpdmVyIG11c3QgYmUKICAgbG9hZGVkIHdoZW4gc2h1dHRpbmcgZG93biBvciByZWJvb3RpbmcgdGhlIHN5c3RlbS4KIAogICBJbiBtb3N0IGNhc2VzIFdha2UgT24gTEFOIGlzIG9ubHkgc3VwcG9ydGVkIG9uIHBvcnQgQSBmb3IgbXVsdGlwbGUgcG9ydAotICBhZGFwdGVycy4gVG8gdmVyaWZ5IGlmIGEgcG9ydCBzdXBwb3J0cyBXYWtlIG9uIExBTiBydW4gZXRodG9vbCBldGg8WD4uCi0KKyAgYWRhcHRlcnMuIFRvIHZlcmlmeSBpZiBhIHBvcnQgc3VwcG9ydHMgV2FrZSBvbiBMYW4gcnVuIGV0aHRvb2wgZXRoPFg+LgogCiBTdXBwb3J0CiA9PT09PT09CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaWdiLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pZ2IudHh0CmluZGV4IGFiMmQ3MTguLjk4OTUzYzAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pZ2IudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pZ2IudHh0CkBAIC0zNiw2ICszNiw3IEBACiBUaGlzIHBhcmFtZXRlciBhZGRzIHN1cHBvcnQgZm9yIFNSLUlPVi4gIEl0IGNhdXNlcyB0aGUgZHJpdmVyIHRvIHNwYXduIHVwIHRvCiBtYXhfdmZzIHdvcnRoIG9mIHZpcnR1YWwgZnVuY3Rpb24uCiAKKwogQWRkaXRpb25hbCBDb25maWd1cmF0aW9ucwogPT09PT09PT09PT09PT09PT09PT09PT09PQogCkBAIC02MCwxNSArNjEsMTYgQEAKICAgRXRodG9vbAogICAtLS0tLS0tCiAgIFRoZSBkcml2ZXIgdXRpbGl6ZXMgdGhlIGV0aHRvb2wgaW50ZXJmYWNlIGZvciBkcml2ZXIgY29uZmlndXJhdGlvbiBhbmQKLSAgZGlhZ25vc3RpY3MsIGFzIHdlbGwgYXMgZGlzcGxheWluZyBzdGF0aXN0aWNhbCBpbmZvcm1hdGlvbi4KKyAgZGlhZ25vc3RpY3MsIGFzIHdlbGwgYXMgZGlzcGxheWluZyBzdGF0aXN0aWNhbCBpbmZvcm1hdGlvbi4gVGhlIGxhdGVzdAorICB2ZXJzaW9uIG9mIGV0aHRvb2wgY2FuIGJlIGZvdW5kIGF0OgogCi0gIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZ2tlcm5lbC4KKyAgaHR0cDovL2Z0cC5rZXJuZWwub3JnL3B1Yi9zb2Z0d2FyZS9uZXR3b3JrL2V0aHRvb2wvCiAKICAgRW5hYmxpbmcgV2FrZSBvbiBMQU4qIChXb0wpCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICBXb0wgaXMgY29uZmlndXJlZCB0aHJvdWdoIHRoZSBFdGh0b29sKiB1dGlsaXR5LgorICBXb0wgaXMgY29uZmlndXJlZCB0aHJvdWdoIHRoZSBldGh0b29sKiB1dGlsaXR5LgogCi0gIEZvciBpbnN0cnVjdGlvbnMgb24gZW5hYmxpbmcgV29MIHdpdGggRXRodG9vbCwgcmVmZXIgdG8gdGhlIEV0aHRvb2wgbWFuIHBhZ2UuCisgIEZvciBpbnN0cnVjdGlvbnMgb24gZW5hYmxpbmcgV29MIHdpdGggZXRodG9vbCwgcmVmZXIgdG8gdGhlIGV0aHRvb2wgbWFuIHBhZ2UuCiAKICAgV29MIHdpbGwgYmUgZW5hYmxlZCBvbiB0aGUgc3lzdGVtIGR1cmluZyB0aGUgbmV4dCBzaHV0IGRvd24gb3IgcmVib290LgogICBGb3IgdGhpcyBkcml2ZXIgdmVyc2lvbiwgaW4gb3JkZXIgdG8gZW5hYmxlIFdvTCwgdGhlIGlnYiBkcml2ZXIgbXVzdCBiZQpAQCAtOTEsMzEgKzkzLDYgQEAKICAgUkVRVUlSRU1FTlRTOiBNU0ktWCBzdXBwb3J0IGlzIHJlcXVpcmVkIGZvciBNdWx0aXF1ZXVlLiBJZiBNU0ktWCBpcyBub3QKICAgZm91bmQsIHRoZSBzeXN0ZW0gd2lsbCBmYWxsYmFjayB0byBNU0kgb3IgdG8gTGVnYWN5IGludGVycnVwdHMuCiAKLSAgTFJPCi0gIC0tLQotICBMYXJnZSBSZWNlaXZlIE9mZmxvYWQgKExSTykgaXMgYSB0ZWNobmlxdWUgZm9yIGluY3JlYXNpbmcgaW5ib3VuZCB0aHJvdWdocHV0Ci0gIG9mIGhpZ2gtYmFuZHdpZHRoIG5ldHdvcmsgY29ubmVjdGlvbnMgYnkgcmVkdWNpbmcgQ1BVIG92ZXJoZWFkLiBJdCB3b3JrcyBieQotICBhZ2dyZWdhdGluZyBtdWx0aXBsZSBpbmNvbWluZyBwYWNrZXRzIGZyb20gYSBzaW5nbGUgc3RyZWFtIGludG8gYSBsYXJnZXIKLSAgYnVmZmVyIGJlZm9yZSB0aGV5IGFyZSBwYXNzZWQgaGlnaGVyIHVwIHRoZSBuZXR3b3JraW5nIHN0YWNrLCB0aHVzIHJlZHVjaW5nCi0gIHRoZSBudW1iZXIgb2YgcGFja2V0cyB0aGF0IGhhdmUgdG8gYmUgcHJvY2Vzc2VkLiBMUk8gY29tYmluZXMgbXVsdGlwbGUKLSAgRXRoZXJuZXQgZnJhbWVzIGludG8gYSBzaW5nbGUgcmVjZWl2ZSBpbiB0aGUgc3RhY2ssIHRoZXJlYnkgcG90ZW50aWFsbHkKLSAgZGVjcmVhc2luZyBDUFUgdXRpbGl6YXRpb24gZm9yIHJlY2VpdmVzLgotCi0gIE5PVEU6IFlvdSBuZWVkIHRvIGhhdmUgaW5ldF9scm8gZW5hYmxlZCB2aWEgZWl0aGVyIHRoZSBDT05GSUdfSU5FVF9MUk8gb3IKLSAgQ09ORklHX0lORVRfTFJPX01PRFVMRSBrZXJuZWwgY29uZmlnIG9wdGlvbi4gQWRkaXRpb25hbGx5LCBpZgotICBDT05GSUdfSU5FVF9MUk9fTU9EVUxFIGlzIHVzZWQsIHRoZSBpbmV0X2xybyBtb2R1bGUgbmVlZHMgdG8gYmUgbG9hZGVkCi0gIGJlZm9yZSB0aGUgaWdiIGRyaXZlci4KLQotICBZb3UgY2FuIHZlcmlmeSB0aGF0IHRoZSBkcml2ZXIgaXMgdXNpbmcgTFJPIGJ5IGxvb2tpbmcgYXQgdGhlc2UgY291bnRlcnMgaW4KLSAgRXRodG9vbDoKLQotICBscm9fYWdncmVnYXRlZCAtIGNvdW50IG9mIHRvdGFsIHBhY2tldHMgdGhhdCB3ZXJlIGNvbWJpbmVkCi0gIGxyb19mbHVzaGVkIC0gY291bnRzIHRoZSBudW1iZXIgb2YgcGFja2V0cyBmbHVzaGVkIG91dCBvZiBMUk8KLSAgbHJvX25vX2Rlc2MgLSBjb3VudHMgdGhlIG51bWJlciBvZiB0aW1lcyBhbiBMUk8gZGVzY3JpcHRvciB3YXMgbm90IGF2YWlsYWJsZQotICBmb3IgdGhlIExSTyBwYWNrZXQKLQotICBOT1RFOiBJUHY2IGFuZCBVRFAgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgTFJPLgotCiBTdXBwb3J0CiA9PT09PT09CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pZ2J2Zi50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaWdidmYudHh0CmluZGV4IDA1NjAyODEzLi5jYmZlNGVlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaWdidmYudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pZ2J2Zi50eHQKQEAgLTU4LDkgKzU4LDExIEBACiAgIEV0aHRvb2wKICAgLS0tLS0tLQogICBUaGUgZHJpdmVyIHV0aWxpemVzIHRoZSBldGh0b29sIGludGVyZmFjZSBmb3IgZHJpdmVyIGNvbmZpZ3VyYXRpb24gYW5kCi0gIGRpYWdub3N0aWNzLCBhcyB3ZWxsIGFzIGRpc3BsYXlpbmcgc3RhdGlzdGljYWwgaW5mb3JtYXRpb24uCisgIGRpYWdub3N0aWNzLCBhcyB3ZWxsIGFzIGRpc3BsYXlpbmcgc3RhdGlzdGljYWwgaW5mb3JtYXRpb24uICBUaGUgZXRodG9vbAorICB2ZXJzaW9uIDMuMCBvciBsYXRlciBpcyByZXF1aXJlZCBmb3IgdGhpcyBmdW5jdGlvbmFsaXR5LCBhbHRob3VnaCB3ZQorICBzdHJvbmdseSByZWNvbW1lbmQgZG93bmxvYWRpbmcgdGhlIGxhdGVzdCB2ZXJzaW9uIGF0OgogCi0gIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZ2tlcm5lbC4KKyAgaHR0cDovL2Z0cC5rZXJuZWwub3JnL3B1Yi9zb2Z0d2FyZS9uZXR3b3JrL2V0aHRvb2wvCiAKIFN1cHBvcnQKID09PT09PT0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC50eHQKaW5kZXggM2M1ZTQ2NS4uZDk5OTQwZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC50eHQKQEAgLTExLDcgKzExLDkgQEAKIAlmb3Igcm91dGVycykKIAogaXBfZGVmYXVsdF90dGwgLSBJTlRFR0VSCi0JZGVmYXVsdCA2NAorCURlZmF1bHQgdmFsdWUgb2YgVFRMIGZpZWxkIChUaW1lIFRvIExpdmUpIGZvciBvdXRnb2luZyAoYnV0IG5vdAorCWZvcndhcmRlZCkgSVAgcGFja2V0cy4gU2hvdWxkIGJlIGJldHdlZW4gMSBhbmQgMjU1IGluY2x1c2l2ZS4KKwlEZWZhdWx0OiA2NCAoYXMgcmVjb21tZW5kZWQgYnkgUkZDMTcwMCkKIAogaXBfbm9fcG10dV9kaXNjIC0gQk9PTEVBTgogCURpc2FibGUgUGF0aCBNVFUgRGlzY292ZXJ5LgpAQCAtNzA4LDEwICs3MTAsMjggQEAKIAlDaGFuZ2UgdGhlIG1heGltdW0gbnVtYmVyIG9mIG11bHRpY2FzdCBncm91cHMgd2UgY2FuIHN1YnNjcmliZSB0by4KIAlEZWZhdWx0OiAyMAogCi1jb25mL2ludGVyZmFjZS8qICBjaGFuZ2VzIHNwZWNpYWwgc2V0dGluZ3MgcGVyIGludGVyZmFjZSAod2hlcmUgImludGVyZmFjZSIgaXMKLQkJICB0aGUgbmFtZSBvZiB5b3VyIG5ldHdvcmsgaW50ZXJmYWNlKQotY29uZi9hbGwvKgkgIGlzIHNwZWNpYWwsIGNoYW5nZXMgdGhlIHNldHRpbmdzIGZvciBhbGwgaW50ZXJmYWNlcworCVRoZW9yZXRpY2FsIG1heGltdW0gdmFsdWUgaXMgYm91bmRlZCBieSBoYXZpbmcgdG8gc2VuZCBhIG1lbWJlcnNoaXAKKwlyZXBvcnQgaW4gYSBzaW5nbGUgZGF0YWdyYW0gKGkuZS4gdGhlIHJlcG9ydCBjYW4ndCBzcGFuIG11bHRpcGxlCisJZGF0YWdyYW1zLCBvciByaXNrIGNvbmZ1c2luZyB0aGUgc3dpdGNoIGFuZCBsZWF2aW5nIGdyb3VwcyB5b3UgZG9uJ3QKKwlpbnRlbmQgdG8pLgogCisJVGhlIG51bWJlciBvZiBzdXBwb3J0ZWQgZ3JvdXBzICdNJyBpcyBib3VuZGVkIGJ5IHRoZSBudW1iZXIgb2YgZ3JvdXAKKwlyZXBvcnQgZW50cmllcyB5b3UgY2FuIGZpdCBpbnRvIGEgc2luZ2xlIGRhdGFncmFtIG9mIDY1NTM1IGJ5dGVzLgorCisJTSA9IDY1NTM2LXNpemVvZiAoaXAgaGVhZGVyKS8oc2l6ZW9mKEdyb3VwIHJlY29yZCkpCisKKwlHcm91cCByZWNvcmRzIGFyZSB2YXJpYWJsZSBsZW5ndGgsIHdpdGggYSBtaW5pbXVtIG9mIDEyIGJ5dGVzLgorCVNvIG5ldC5pcHY0LmlnbXBfbWF4X21lbWJlcnNoaXBzIHNob3VsZCBub3QgYmUgc2V0IGhpZ2hlciB0aGFuOgorCisJKDY1NTM2LTI0KSAvIDEyID0gNTQ1OQorCisJVGhlIHZhbHVlIDU0NTkgYXNzdW1lcyBubyBJUCBoZWFkZXIgb3B0aW9ucywgc28gaW4gcHJhY3RpY2UKKwl0aGlzIG51bWJlciBtYXkgYmUgbG93ZXIuCisKKwljb25mL2ludGVyZmFjZS8qICBjaGFuZ2VzIHNwZWNpYWwgc2V0dGluZ3MgcGVyIGludGVyZmFjZSAod2hlcmUKKwkiaW50ZXJmYWNlIiBpcyB0aGUgbmFtZSBvZiB5b3VyIG5ldHdvcmsgaW50ZXJmYWNlKQorCisJY29uZi9hbGwvKgkgIGlzIHNwZWNpYWwsIGNoYW5nZXMgdGhlIHNldHRpbmdzIGZvciBhbGwgaW50ZXJmYWNlcwogCiBsb2dfbWFydGlhbnMgLSBCT09MRUFOCiAJTG9nIHBhY2tldHMgd2l0aCBpbXBvc3NpYmxlIGFkZHJlc3NlcyB0byBrZXJuZWwgbG9nLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2l4Z2IudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2l4Z2IudHh0CmluZGV4IGEwZDBmZmIuLmUxOTZmMTYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9peGdiLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXhnYi50eHQKQEAgLTMwOSwxNSArMzA5LDE1IEBACiAgIEV0aHRvb2wKICAgLS0tLS0tLQogICBUaGUgZHJpdmVyIHV0aWxpemVzIHRoZSBldGh0b29sIGludGVyZmFjZSBmb3IgZHJpdmVyIGNvbmZpZ3VyYXRpb24gYW5kCi0gIGRpYWdub3N0aWNzLCBhcyB3ZWxsIGFzIGRpc3BsYXlpbmcgc3RhdGlzdGljYWwgaW5mb3JtYXRpb24uICBFdGh0b29sCisgIGRpYWdub3N0aWNzLCBhcyB3ZWxsIGFzIGRpc3BsYXlpbmcgc3RhdGlzdGljYWwgaW5mb3JtYXRpb24uICBUaGUgZXRodG9vbAogICB2ZXJzaW9uIDEuNiBvciBsYXRlciBpcyByZXF1aXJlZCBmb3IgdGhpcyBmdW5jdGlvbmFsaXR5LgogCiAgIFRoZSBsYXRlc3QgcmVsZWFzZSBvZiBldGh0b29sIGNhbiBiZSBmb3VuZCBmcm9tCi0gIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZ2tlcm5lbAorICBodHRwOi8vZnRwLmtlcm5lbC5vcmcvcHViL3NvZnR3YXJlL25ldHdvcmsvZXRodG9vbC8KIAotICBOT1RFOiBFdGh0b29sIDEuNiBvbmx5IHN1cHBvcnRzIGEgbGltaXRlZCBzZXQgb2YgZXRodG9vbCBvcHRpb25zLiBTdXBwb3J0Ci0gICAgICAgIGZvciBhIG1vcmUgY29tcGxldGUgZXRodG9vbCBmZWF0dXJlIHNldCBjYW4gYmUgZW5hYmxlZCBieSB1cGdyYWRpbmcKLSAgICAgICAgdG8gdGhlIGxhdGVzdCB2ZXJzaW9uLgorICBOT1RFOiBUaGUgZXRodG9vbCB2ZXJzaW9uIDEuNiBvbmx5IHN1cHBvcnRzIGEgbGltaXRlZCBzZXQgb2YgZXRodG9vbCBvcHRpb25zLgorICAgICAgICBTdXBwb3J0IGZvciBhIG1vcmUgY29tcGxldGUgZXRodG9vbCBmZWF0dXJlIHNldCBjYW4gYmUgZW5hYmxlZCBieQorICAgICAgICB1cGdyYWRpbmcgdG8gdGhlIGxhdGVzdCB2ZXJzaW9uLgogCiAKICAgTkFQSQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2l4Z2JlLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9peGdiZS50eHQKaW5kZXggZWViNjg2OC4uYWY3N2VkMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2l4Z2JlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXhnYmUudHh0CkBAIC0xLDEwNyArMSwxMjYgQEAKIExpbnV4IEJhc2UgRHJpdmVyIGZvciAxMCBHaWdhYml0IFBDSSBFeHByZXNzIEludGVsKFIpIE5ldHdvcmsgQ29ubmVjdGlvbgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLU1hcmNoIDEwLCAyMDA5Ci0KK0ludGVsIEdpZ2FiaXQgTGludXggZHJpdmVyLgorQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLgogCiBDb250ZW50cwogPT09PT09PT0KIAotLSBJbiBUaGlzIFJlbGVhc2UKIC0gSWRlbnRpZnlpbmcgWW91ciBBZGFwdGVyCi0tIEJ1aWxkaW5nIGFuZCBJbnN0YWxsYXRpb24KIC0gQWRkaXRpb25hbCBDb25maWd1cmF0aW9ucworLSBQZXJmb3JtYW5jZSBUdW5pbmcKKy0gS25vd24gSXNzdWVzCiAtIFN1cHBvcnQKIAotCi0KLUluIFRoaXMgUmVsZWFzZQotPT09PT09PT09PT09PT09Ci0KLVRoaXMgZmlsZSBkZXNjcmliZXMgdGhlIGl4Z2JlIExpbnV4IEJhc2UgRHJpdmVyIGZvciB0aGUgMTAgR2lnYWJpdCBQQ0kKLUV4cHJlc3MgSW50ZWwoUikgTmV0d29yayBDb25uZWN0aW9uLiAgVGhpcyBkcml2ZXIgaW5jbHVkZXMgc3VwcG9ydCBmb3IKLUl0YW5pdW0oUikyLWJhc2VkIHN5c3RlbXMuCi0KLUZvciBxdWVzdGlvbnMgcmVsYXRlZCB0byBoYXJkd2FyZSByZXF1aXJlbWVudHMsIHJlZmVyIHRvIHRoZSBkb2N1bWVudGF0aW9uCi1zdXBwbGllZCB3aXRoIHlvdXIgMTAgR2lnYWJpdCBhZGFwdGVyLiAgQWxsIGhhcmR3YXJlIHJlcXVpcmVtZW50cyBsaXN0ZWQgYXBwbHkKLXRvIHVzZSB3aXRoIExpbnV4LgotCi1UaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBhdmFpbGFibGUgaW4gdGhpcyBrZXJuZWw6Ci0gLSBOYXRpdmUgVkxBTnMKLSAtIENoYW5uZWwgQm9uZGluZyAodGVhbWluZykKLSAtIFNOTVAKLSAtIEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkCi0gLSBEYXRhIENlbnRlciBCcmlkZ2luZwotCi1DaGFubmVsIEJvbmRpbmcgZG9jdW1lbnRhdGlvbiBjYW4gYmUgZm91bmQgaW4gdGhlIExpbnV4IGtlcm5lbCBzb3VyY2U6Ci0vRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JvbmRpbmcudHh0Ci0KLUV0aHRvb2wsIGxzcGNpLCBhbmQgaWZjb25maWcgY2FuIGJlIHVzZWQgdG8gZGlzcGxheSBkZXZpY2UgYW5kIGRyaXZlcgotc3BlY2lmaWMgaW5mb3JtYXRpb24uCi0KLQogSWRlbnRpZnlpbmcgWW91ciBBZGFwdGVyCiA9PT09PT09PT09PT09PT09PT09PT09PT0KIAotVGhpcyBkcml2ZXIgc3VwcG9ydHMgZGV2aWNlcyBiYXNlZCBvbiB0aGUgODI1OTggY29udHJvbGxlciBhbmQgdGhlIDgyNTk5Ci1jb250cm9sbGVyLgorVGhlIGRyaXZlciBpbiB0aGlzIHJlbGVhc2UgaXMgY29tcGF0aWJsZSB3aXRoIDgyNTk4IGFuZCA4MjU5OS1iYXNlZCBJbnRlbAorTmV0d29yayBDb25uZWN0aW9ucy4KIAotRm9yIHNwZWNpZmljIGluZm9ybWF0aW9uIG9uIGlkZW50aWZ5aW5nIHdoaWNoIGFkYXB0ZXIgeW91IGhhdmUsIHBsZWFzZSB2aXNpdDoKK0ZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0byBpZGVudGlmeSB5b3VyIGFkYXB0ZXIsIGdvIHRvIHRoZSBBZGFwdGVyICYKK0RyaXZlciBJRCBHdWlkZSBhdDoKIAotICAgIGh0dHA6Ly9zdXBwb3J0LmludGVsLmNvbS9zdXBwb3J0L25ldHdvcmsvc2IvQ1MtMDA4NDQxLmh0bQorICAgIGh0dHA6Ly9zdXBwb3J0LmludGVsLmNvbS9zdXBwb3J0L25ldHdvcmsvc2IvQ1MtMDEyOTA0Lmh0bQorCitTRlArIERldmljZXMgd2l0aCBQbHVnZ2FibGUgT3B0aWNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKzgyNTk5LUJBU0VEIEFEQVBURVJTCisKK05PVEVTOiBJZiB5b3VyIDgyNTk5LWJhc2VkIEludGVsKFIpIE5ldHdvcmsgQWRhcHRlciBjYW1lIHdpdGggSW50ZWwgb3B0aWNzLCBvcgoraXMgYW4gSW50ZWwoUikgRXRoZXJuZXQgU2VydmVyIEFkYXB0ZXIgWDUyMC0yLCB0aGVuIGl0IG9ubHkgc3VwcG9ydHMgSW50ZWwKK29wdGljcyBhbmQvb3IgdGhlIGRpcmVjdCBhdHRhY2ggY2FibGVzIGxpc3RlZCBiZWxvdy4KKworV2hlbiA4MjU5OS1iYXNlZCBTRlArIGRldmljZXMgYXJlIGNvbm5lY3RlZCBiYWNrIHRvIGJhY2ssIHRoZXkgc2hvdWxkIGJlIHNldCB0bwordGhlIHNhbWUgU3BlZWQgc2V0dGluZyB2aWEgZXRodG9vbC4gUmVzdWx0cyBtYXkgdmFyeSBpZiB5b3UgbWl4IHNwZWVkIHNldHRpbmdzLgorODI1OTgtYmFzZWQgYWRhcHRlcnMgc3VwcG9ydCBhbGwgcGFzc2l2ZSBkaXJlY3QgYXR0YWNoIGNhYmxlcyB0aGF0IGNvbXBseQord2l0aCBTRkYtODQzMSB2NC4xIGFuZCBTRkYtODQ3MiB2MTAuNCBzcGVjaWZpY2F0aW9ucy4gQWN0aXZlIGRpcmVjdCBhdHRhY2gKK2NhYmxlcyBhcmUgbm90IHN1cHBvcnRlZC4KKworU3VwcGxpZXIgICAgVHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhcnQgTnVtYmVycworCitTUiBNb2R1bGVzCitJbnRlbCAgICAgICBEVUFMIFJBVEUgMUcvMTBHIFNGUCsgU1IgKGJhaWxlZCkgICAgICAgICAgICAgICAgRlRMWDg1NzFEM0JDVi1JVAorSW50ZWwgICAgICAgRFVBTCBSQVRFIDFHLzEwRyBTRlArIFNSIChiYWlsZWQpICAgICAgICAgICAgICAgIEFGQlItNzAzU0REWi1JTjEKK0ludGVsICAgICAgIERVQUwgUkFURSAxRy8xMEcgU0ZQKyBTUiAoYmFpbGVkKSAgICAgICAgICAgICAgICBBRkJSLTcwM1NEWi1JTjIKK0xSIE1vZHVsZXMKK0ludGVsICAgICAgIERVQUwgUkFURSAxRy8xMEcgU0ZQKyBMUiAoYmFpbGVkKSAgICAgICAgICAgICAgICBGVExYMTQ3MUQzQkNWLUlUCitJbnRlbCAgICAgICBEVUFMIFJBVEUgMUcvMTBHIFNGUCsgTFIgKGJhaWxlZCkgICAgICAgICAgICAgICAgQUZDVC03MDFTRERaLUlOMQorSW50ZWwgICAgICAgRFVBTCBSQVRFIDFHLzEwRyBTRlArIExSIChiYWlsZWQpICAgICAgICAgICAgICAgIEFGQ1QtNzAxU0RaLUlOMgorCitUaGUgZm9sbG93aW5nIGlzIGEgbGlzdCBvZiAzcmQgcGFydHkgU0ZQKyBtb2R1bGVzIGFuZCBkaXJlY3QgYXR0YWNoIGNhYmxlcyB0aGF0CitoYXZlIHJlY2VpdmVkIHNvbWUgdGVzdGluZy4gTm90IGFsbCBtb2R1bGVzIGFyZSBhcHBsaWNhYmxlIHRvIGFsbCBkZXZpY2VzLgorCitTdXBwbGllciAgIFR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFydCBOdW1iZXJzCisKK0ZpbmlzYXIgICAgU0ZQKyBTUiBiYWlsZWQsIDEwZyBzaW5nbGUgcmF0ZSAgICAgICAgICAgICAgICAgICBGVExYODU3MUQzQkNMCitBdmFnbyAgICAgIFNGUCsgU1IgYmFpbGVkLCAxMGcgc2luZ2xlIHJhdGUgICAgICAgICAgICAgICAgICAgQUZCUi03MDBTRFoKK0ZpbmlzYXIgICAgU0ZQKyBMUiBiYWlsZWQsIDEwZyBzaW5nbGUgcmF0ZSAgICAgICAgICAgICAgICAgICBGVExYMTQ3MUQzQkNMCisKK0ZpbmlzYXIgICAgRFVBTCBSQVRFIDFHLzEwRyBTRlArIFNSIChObyBCYWlsKSAgICAgICAgICAgICAgICBGVExYODU3MUQzUUNWLUlUCitBdmFnbyAgICAgIERVQUwgUkFURSAxRy8xMEcgU0ZQKyBTUiAoTm8gQmFpbCkgICAgICAgICAgICAgICAgQUZCUi03MDNTRFotSU4xCitGaW5pc2FyICAgIERVQUwgUkFURSAxRy8xMEcgU0ZQKyBMUiAoTm8gQmFpbCkgICAgICAgICAgICAgICAgRlRMWDE0NzFEM1FDVi1JVAorQXZhZ28gICAgICBEVUFMIFJBVEUgMUcvMTBHIFNGUCsgTFIgKE5vIEJhaWwpICAgICAgICAgICAgICAgIEFGQ1QtNzAxU0RaLUlOMQorRmluaXN0YXIgICAxMDAwQkFTRS1UIFNGUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZDTEY4NTIyUDJCVEwKK0F2YWdvICAgICAgMTAwMEJBU0UtVCBTRlAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQkNVLTU3MTBSWgorCis4MjU5OS1iYXNlZCBhZGFwdGVycyBzdXBwb3J0IGFsbCBwYXNzaXZlIGFuZCBhY3RpdmUgbGltaXRpbmcgZGlyZWN0IGF0dGFjaAorY2FibGVzIHRoYXQgY29tcGx5IHdpdGggU0ZGLTg0MzEgdjQuMSBhbmQgU0ZGLTg0NzIgdjEwLjQgc3BlY2lmaWNhdGlvbnMuCisKK0xhc2VyIHR1cm5zIG9mZiBmb3IgU0ZQKyB3aGVuIGlmY29uZmlnIGRvd24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyJpZmNvbmZpZyBkb3duIiB0dXJucyBvZmYgdGhlIGxhc2VyIGZvciA4MjU5OS1iYXNlZCBTRlArIGZpYmVyIGFkYXB0ZXJzLgorImlmY29uZmlnIHVwIiB0dXJucyBvbiB0aGUgbGF0ZXIuCiAKIAotQnVpbGRpbmcgYW5kIEluc3RhbGxhdGlvbgotPT09PT09PT09PT09PT09PT09PT09PT09PQorODI1OTgtQkFTRUQgQURBUFRFUlMKIAotc2VsZWN0IG0gZm9yICJJbnRlbChSKSAxMEdiRSBQQ0kgRXhwcmVzcyBhZGFwdGVycyBzdXBwb3J0IiBsb2NhdGVkIGF0OgotICAgICAgTG9jYXRpb246Ci0gICAgICAgIC0+IERldmljZSBEcml2ZXJzCi0gICAgICAgICAgLT4gTmV0d29yayBkZXZpY2Ugc3VwcG9ydCAoTkVUREVWSUNFUyBbPXldKQotICAgICAgICAgICAgLT4gRXRoZXJuZXQgKDEwMDAwIE1iaXQpIChORVRERVZfMTAwMDAgWz15XSkKK05PVEVTIGZvciA4MjU5OC1CYXNlZCBBZGFwdGVyczoKKy0gSW50ZWwoUikgTmV0d29yayBBZGFwdGVycyB0aGF0IHN1cHBvcnQgcmVtb3ZhYmxlIG9wdGljYWwgbW9kdWxlcyBvbmx5IHN1cHBvcnQKKyAgdGhlaXIgb3JpZ2luYWwgbW9kdWxlIHR5cGUgKGkuZS4sIHRoZSBJbnRlbChSKSAxMCBHaWdhYml0IFNSIER1YWwgUG9ydAorICBFeHByZXNzIE1vZHVsZSBvbmx5IHN1cHBvcnRzIFNSIG9wdGljYWwgbW9kdWxlcykuIElmIHlvdSBwbHVnIGluIGEgZGlmZmVyZW50CisgIHR5cGUgb2YgbW9kdWxlLCB0aGUgZHJpdmVyIHdpbGwgbm90IGxvYWQuCistIEhvdCBTd2FwcGluZy9ob3QgcGx1Z2dpbmcgb3B0aWNhbCBtb2R1bGVzIGlzIG5vdCBzdXBwb3J0ZWQuCistIE9ubHkgc2luZ2xlIHNwZWVkLCAxMCBnaWdhYml0IG1vZHVsZXMgYXJlIHN1cHBvcnRlZC4KKy0gTEFOIG9uIE1vdGhlcmJvYXJkIChMT01zKSBtYXkgc3VwcG9ydCBEQSwgU1IsIG9yIExSIG1vZHVsZXMuIE90aGVyIG1vZHVsZQorICB0eXBlcyBhcmUgbm90IHN1cHBvcnRlZC4gUGxlYXNlIHNlZSB5b3VyIHN5c3RlbSBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLgogCi0xLiBtYWtlIG1vZHVsZXMgJiBtYWtlIG1vZHVsZXNfaW5zdGFsbAorVGhlIGZvbGxvd2luZyBpcyBhIGxpc3Qgb2YgM3JkIHBhcnR5IFNGUCsgbW9kdWxlcyBhbmQgZGlyZWN0IGF0dGFjaCBjYWJsZXMgdGhhdAoraGF2ZSByZWNlaXZlZCBzb21lIHRlc3RpbmcuIE5vdCBhbGwgbW9kdWxlcyBhcmUgYXBwbGljYWJsZSB0byBhbGwgZGV2aWNlcy4KIAotMi4gTG9hZCB0aGUgbW9kdWxlOgorU3VwcGxpZXIgICBUeXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhcnQgTnVtYmVycwogCi0jIG1vZHByb2JlIGl4Z2JlCitGaW5pc2FyICAgIFNGUCsgU1IgYmFpbGVkLCAxMGcgc2luZ2xlIHJhdGUgICAgICAgICAgICAgICAgICAgRlRMWDg1NzFEM0JDTAorQXZhZ28gICAgICBTRlArIFNSIGJhaWxlZCwgMTBnIHNpbmdsZSByYXRlICAgICAgICAgICAgICAgICAgIEFGQlItNzAwU0RaCitGaW5pc2FyICAgIFNGUCsgTFIgYmFpbGVkLCAxMGcgc2luZ2xlIHJhdGUgICAgICAgICAgICAgICAgICAgRlRMWDE0NzFEM0JDTAogCi0gICBUaGUgaW5zbW9kIGNvbW1hbmQgY2FuIGJlIHVzZWQgaWYgdGhlIGZ1bGwKLSAgIHBhdGggdG8gdGhlIGRyaXZlciBtb2R1bGUgaXMgc3BlY2lmaWVkLiAgRm9yIGV4YW1wbGU6Cis4MjU5OC1iYXNlZCBhZGFwdGVycyBzdXBwb3J0IGFsbCBwYXNzaXZlIGRpcmVjdCBhdHRhY2ggY2FibGVzIHRoYXQgY29tcGx5Cit3aXRoIFNGRi04NDMxIHY0LjEgYW5kIFNGRi04NDcyIHYxMC40IHNwZWNpZmljYXRpb25zLiBBY3RpdmUgZGlyZWN0IGF0dGFjaAorY2FibGVzIGFyZSBub3Qgc3VwcG9ydGVkLgogCi0gICAgIGluc21vZCAvbGliL21vZHVsZXMvPEtFUk5FTCBWRVJTSU9OPi9rZXJuZWwvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmUua28KIAotICAgV2l0aCAyLjYgYmFzZWQga2VybmVscyBhbHNvIG1ha2Ugc3VyZSB0aGF0IG9sZGVyIGl4Z2JlIGRyaXZlcnMgYXJlCi0gICByZW1vdmVkIGZyb20gdGhlIGtlcm5lbCwgYmVmb3JlIGxvYWRpbmcgdGhlIG5ldyBtb2R1bGU6CitGbG93IENvbnRyb2wKKy0tLS0tLS0tLS0tLQorRXRoZXJuZXQgRmxvdyBDb250cm9sIChJRUVFIDgwMi4zeCkgY2FuIGJlIGNvbmZpZ3VyZWQgd2l0aCBldGh0b29sIHRvIGVuYWJsZQorcmVjZWl2aW5nIGFuZCB0cmFuc21pdHRpbmcgcGF1c2UgZnJhbWVzIGZvciBpeGdiZS4gV2hlbiBUWCBpcyBlbmFibGVkLCBQQVVTRQorZnJhbWVzIGFyZSBnZW5lcmF0ZWQgd2hlbiB0aGUgcmVjZWl2ZSBwYWNrZXQgYnVmZmVyIGNyb3NzZXMgYSBwcmVkZWZpbmVkCit0aHJlc2hvbGQuICBXaGVuIHJ4IGlzIGVuYWJsZWQsIHRoZSB0cmFuc21pdCB1bml0IHdpbGwgaGFsdCBmb3IgdGhlIHRpbWUgZGVsYXkKK3NwZWNpZmllZCB3aGVuIGEgUEFVU0UgZnJhbWUgaXMgcmVjZWl2ZWQuCiAKLSAgICAgcm1tb2QgaXhnYmU7IG1vZHByb2JlIGl4Z2JlCitGbG93IENvbnRyb2wgaXMgZW5hYmxlZCBieSBkZWZhdWx0LiBJZiB5b3Ugd2FudCB0byBkaXNhYmxlIGEgZmxvdyBjb250cm9sCitjYXBhYmxlIGxpbmsgcGFydG5lciwgdXNlIGV0aHRvb2w6CiAKLTMuIEFzc2lnbiBhbiBJUCBhZGRyZXNzIHRvIHRoZSBpbnRlcmZhY2UgYnkgZW50ZXJpbmcgdGhlIGZvbGxvd2luZywgd2hlcmUKLSAgIHggaXMgdGhlIGludGVyZmFjZSBudW1iZXI6CisgICAgIGV0aHRvb2wgLUEgZXRoPyBhdXRvbmVnIG9mZiBSWCBvZmYgVFggb2ZmCiAKLSAgICAgaWZjb25maWcgZXRoeCA8SVBfYWRkcmVzcz4KLQotNC4gVmVyaWZ5IHRoYXQgdGhlIGludGVyZmFjZSB3b3Jrcy4gRW50ZXIgdGhlIGZvbGxvd2luZywgd2hlcmUgPElQX2FkZHJlc3M+Ci0gICBpcyB0aGUgSVAgYWRkcmVzcyBmb3IgYW5vdGhlciBtYWNoaW5lIG9uIHRoZSBzYW1lIHN1Ym5ldCBhcyB0aGUgaW50ZXJmYWNlCi0gICB0aGF0IGlzIGJlaW5nIHRlc3RlZDoKLQotICAgICBwaW5nICA8SVBfYWRkcmVzcz4KLQorTk9URTogRm9yIDgyNTk4IGJhY2twbGFuZSBjYXJkcyBlbnRlcmluZyAxIGdpZyBtb2RlLCBmbG93IGNvbnRyb2wgZGVmYXVsdAorYmVoYXZpb3IgaXMgY2hhbmdlZCB0byBvZmYuICBGbG93IGNvbnRyb2wgaW4gMSBnaWcgbW9kZSBvbiB0aGVzZSBkZXZpY2VzIGNhbgorbGVhZCB0byBUeCBoYW5ncy4KIAogQWRkaXRpb25hbCBDb25maWd1cmF0aW9ucwogPT09PT09PT09PT09PT09PT09PT09PT09PQogCi0gIFZpZXdpbmcgTGluayBNZXNzYWdlcwotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgTGluayBtZXNzYWdlcyB3aWxsIG5vdCBiZSBkaXNwbGF5ZWQgdG8gdGhlIGNvbnNvbGUgaWYgdGhlIGRpc3RyaWJ1dGlvbiBpcwotICByZXN0cmljdGluZyBzeXN0ZW0gbWVzc2FnZXMuIEluIG9yZGVyIHRvIHNlZSBuZXR3b3JrIGRyaXZlciBsaW5rIG1lc3NhZ2VzIG9uCi0gIHlvdXIgY29uc29sZSwgc2V0IGRtZXNnIHRvIGVpZ2h0IGJ5IGVudGVyaW5nIHRoZSBmb2xsb3dpbmc6Ci0KLSAgICAgICBkbWVzZyAtbiA4Ci0KLSAgTk9URTogVGhpcyBzZXR0aW5nIGlzIG5vdCBzYXZlZCBhY3Jvc3MgcmVib290cy4KLQotCiAgIEp1bWJvIEZyYW1lcwogICAtLS0tLS0tLS0tLS0KICAgVGhlIGRyaXZlciBzdXBwb3J0cyBKdW1ibyBGcmFtZXMgZm9yIGFsbCBhZGFwdGVycy4gSnVtYm8gRnJhbWVzIHN1cHBvcnQgaXMKQEAgLTEyMywxMyArMTQyLDggQEAKICAgb3RoZXIgcHJvdG9jb2xzIGJlc2lkZXMgVENQLiAgSXQncyBhbHNvIHNhZmUgdG8gdXNlIHdpdGggY29uZmlndXJhdGlvbnMgdGhhdAogICBhcmUgcHJvYmxlbWF0aWMgZm9yIExSTywgbmFtZWx5IGJyaWRnaW5nIGFuZCBpU0NTSS4KIAotICBHUk8gaXMgZW5hYmxlZCBieSBkZWZhdWx0IGluIHRoZSBkcml2ZXIuICBGdXR1cmUgdmVyc2lvbnMgb2YgZXRodG9vbCB3aWxsCi0gIHN1cHBvcnQgZGlzYWJsaW5nIGFuZCByZS1lbmFibGluZyBHUk8gb24gdGhlIGZseS4KLQotCiAgIERhdGEgQ2VudGVyIEJyaWRnaW5nLCBha2EgRENCCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KICAgRENCIGlzIGEgY29uZmlndXJhdGlvbiBRdWFsaXR5IG9mIFNlcnZpY2UgaW1wbGVtZW50YXRpb24gaW4gaGFyZHdhcmUuCiAgIEl0IHVzZXMgdGhlIFZMQU4gcHJpb3JpdHkgdGFnICg4MDIuMXApIHRvIGZpbHRlciB0cmFmZmljLiAgVGhhdCBtZWFucwogICB0aGF0IHRoZXJlIGFyZSA4IGRpZmZlcmVudCBwcmlvcml0aWVzIHRoYXQgdHJhZmZpYyBjYW4gYmUgZmlsdGVyZWQgaW50by4KQEAgLTE2MywyNCArMTc3LDcxIEBACiAKICAgICAgICAgaHR0cDovL2UxMDAwLnNmLm5ldAogCi0KICAgRXRodG9vbAogICAtLS0tLS0tCiAgIFRoZSBkcml2ZXIgdXRpbGl6ZXMgdGhlIGV0aHRvb2wgaW50ZXJmYWNlIGZvciBkcml2ZXIgY29uZmlndXJhdGlvbiBhbmQKLSAgZGlhZ25vc3RpY3MsIGFzIHdlbGwgYXMgZGlzcGxheWluZyBzdGF0aXN0aWNhbCBpbmZvcm1hdGlvbi4gIEV0aHRvb2wKLSAgdmVyc2lvbiAzLjAgb3IgbGF0ZXIgaXMgcmVxdWlyZWQgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eS4KKyAgZGlhZ25vc3RpY3MsIGFzIHdlbGwgYXMgZGlzcGxheWluZyBzdGF0aXN0aWNhbCBpbmZvcm1hdGlvbi4gVGhlIGxhdGVzdAorICBldGh0b29sIHZlcnNpb24gaXMgcmVxdWlyZWQgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eS4KIAogICBUaGUgbGF0ZXN0IHJlbGVhc2Ugb2YgZXRodG9vbCBjYW4gYmUgZm91bmQgZnJvbQotICBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2drZXJuZWwuCisgIGh0dHA6Ly9mdHAua2VybmVsLm9yZy9wdWIvc29mdHdhcmUvbmV0d29yay9ldGh0b29sLwogCi0KLSAgTkFQSQorICBGQ29FCiAgIC0tLS0KKyAgVGhpcyByZWxlYXNlIG9mIHRoZSBpeGdiZSBkcml2ZXIgY29udGFpbnMgbmV3IGNvZGUgdG8gZW5hYmxlIHVzZXJzIHRvIHVzZQorICBGaWJlciBDaGFubmVsIG92ZXIgRXRoZXJuZXQgKEZDb0UpIGFuZCBEYXRhIENlbnRlciBCcmlkZ2luZyAoRENCKQorICBmdW5jdGlvbmFsaXR5IHRoYXQgaXMgc3VwcG9ydGVkIGJ5IHRoZSA4MjU5OC1iYXNlZCBoYXJkd2FyZS4gIFRoaXMgY29kZSBoYXMKKyAgbm8gZGVmYXVsdCBlZmZlY3Qgb24gdGhlIHJlZ3VsYXIgZHJpdmVyIG9wZXJhdGlvbiwgYW5kIGNvbmZpZ3VyaW5nIERDQiBhbmQKKyAgRkNvRSBpcyBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGlzIGRyaXZlciBSRUFETUUuIFJlZmVyIHRvCisgIGh0dHA6Ly93d3cub3Blbi1mY29lLm9yZy8gZm9yIEZDb0UgcHJvamVjdCBpbmZvcm1hdGlvbiBhbmQgY29udGFjdAorICBlMTAwMC1lZWRjQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCBmb3IgRENCIGluZm9ybWF0aW9uLgogCi0gIE5BUEkgKFJ4IHBvbGxpbmcgbW9kZSkgaXMgc3VwcG9ydGVkIGluIHRoZSBpeGdiZSBkcml2ZXIuICBOQVBJIGlzIGVuYWJsZWQKLSAgYnkgZGVmYXVsdCBpbiB0aGUgZHJpdmVyLgorICBNQUMgYW5kIFZMQU4gYW50aS1zcG9vZmluZyBmZWF0dXJlCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgV2hlbiBhIG1hbGljaW91cyBkcml2ZXIgYXR0ZW1wdHMgdG8gc2VuZCBhIHNwb29mZWQgcGFja2V0LCBpdCBpcyBkcm9wcGVkIGJ5CisgIHRoZSBoYXJkd2FyZSBhbmQgbm90IHRyYW5zbWl0dGVkLiAgQW4gaW50ZXJydXB0IGlzIHNlbnQgdG8gdGhlIFBGIGRyaXZlcgorICBub3RpZnlpbmcgaXQgb2YgdGhlIHNwb29mIGF0dGVtcHQuCiAKLSAgU2VlIHd3dy5jeWJlcnVzLmNhL35oYWRpL3VzZW5peC1wYXBlci50Z3ogZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gTkFQSS4KKyAgV2hlbiBhIHNwb29mZWQgcGFja2V0IGlzIGRldGVjdGVkIHRoZSBQRiBkcml2ZXIgd2lsbCBzZW5kIHRoZSBmb2xsb3dpbmcKKyAgbWVzc2FnZSB0byB0aGUgc3lzdGVtIGxvZyAoZGlzcGxheWVkIGJ5ICB0aGUgImRtZXNnIiBjb21tYW5kKToKKworICBTcG9vZiBldmVudChzKSBkZXRlY3RlZCBvbiBWRiAobikKKworICBXaGVyZSBuPXRoZSBWRiB0aGF0IGF0dGVtcHRlZCB0byBkbyB0aGUgc3Bvb2ZpbmcuCisKKworUGVyZm9ybWFuY2UgVHVuaW5nCis9PT09PT09PT09PT09PT09PT0KKworQW4gZXhjZWxsZW50IGFydGljbGUgb24gcGVyZm9ybWFuY2UgdHVuaW5nIGNhbiBiZSBmb3VuZCBhdDoKKworaHR0cDovL3d3dy5yZWRoYXQuY29tL3Byb21vL3N1bW1pdC8yMDA4L2Rvd25sb2Fkcy9wZGYvVGh1cnNkYXkvTWFya19XYWduZXIucGRmCisKKworS25vd24gSXNzdWVzCis9PT09PT09PT09PT0KKworICBFbmFibGluZyBTUi1JT1YgaW4gYSAzMi1iaXQgTWljcm9zb2Z0KiBXaW5kb3dzKiBTZXJ2ZXIgMjAwOCBHdWVzdCBPUyB1c2luZworICBJbnRlbCAoUikgODI1NzYtYmFzZWQgR2JFIG9yIEludGVsIChSKSA4MjU5OS1iYXNlZCAxMEdiRSBjb250cm9sbGVyIHVuZGVyIEtWTQorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBLVk0gSHlwZXJ2aXNvci9WTU0gc3VwcG9ydHMgZGlyZWN0IGFzc2lnbm1lbnQgb2YgYSBQQ0llIGRldmljZSB0byBhIFZNLiAgVGhpcworICBpbmNsdWRlcyB0cmFkaXRpb25hbCBQQ0llIGRldmljZXMsIGFzIHdlbGwgYXMgU1ItSU9WLWNhcGFibGUgZGV2aWNlcyB1c2luZworICBJbnRlbCA4MjU3Ni1iYXNlZCBhbmQgODI1OTktYmFzZWQgY29udHJvbGxlcnMuCisKKyAgV2hpbGUgZGlyZWN0IGFzc2lnbm1lbnQgb2YgYSBQQ0llIGRldmljZSBvciBhbiBTUi1JT1YgVmlydHVhbCBGdW5jdGlvbiAoVkYpCisgIHRvIGEgTGludXgtYmFzZWQgVk0gcnVubmluZyAyLjYuMzIgb3IgbGF0ZXIga2VybmVsIHdvcmtzIGZpbmUsIHRoZXJlIGlzIGEKKyAga25vd24gaXNzdWUgd2l0aCBNaWNyb3NvZnQgV2luZG93cyBTZXJ2ZXIgMjAwOCBWTSB0aGF0IHJlc3VsdHMgaW4gYSAieWVsbG93CisgIGJhbmciIGVycm9yLiBUaGlzIHByb2JsZW0gaXMgd2l0aGluIHRoZSBLVk0gVk1NIGl0c2VsZiwgbm90IHRoZSBJbnRlbCBkcml2ZXIsCisgIG9yIHRoZSBTUi1JT1YgbG9naWMgb2YgdGhlIFZNTSwgYnV0IHJhdGhlciB0aGF0IEtWTSBlbXVsYXRlcyBhbiBvbGRlciBDUFUKKyAgbW9kZWwgZm9yIHRoZSBndWVzdHMsIGFuZCB0aGlzIG9sZGVyIENQVSBtb2RlbCBkb2VzIG5vdCBzdXBwb3J0IE1TSS1YCisgIGludGVycnVwdHMsIHdoaWNoIGlzIGEgcmVxdWlyZW1lbnQgZm9yIEludGVsIFNSLUlPVi4KKworICBJZiB5b3Ugd2lzaCB0byB1c2UgdGhlIEludGVsIDgyNTc2IG9yIDgyNTk5LWJhc2VkIGNvbnRyb2xsZXJzIGluIFNSLUlPViBtb2RlCisgIHdpdGggS1ZNIGFuZCBhIE1pY3Jvc29mdCBXaW5kb3dzIFNlcnZlciAyMDA4IGd1ZXN0IHRyeSB0aGUgZm9sbG93aW5nCisgIHdvcmthcm91bmQuIFRoZSB3b3JrYXJvdW5kIGlzIHRvIHRlbGwgS1ZNIHRvIGVtdWxhdGUgYSBkaWZmZXJlbnQgbW9kZWwgb2YgQ1BVCisgIHdoZW4gdXNpbmcgcWVtdSB0byBjcmVhdGUgdGhlIEtWTSBndWVzdDoKKworICAgICAgICItY3B1IHFlbXU2NCxtb2RlbD0xMyIKIAogCiBTdXBwb3J0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXhnYmV2Zi50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXhnYmV2Zi50eHQKaW5kZXggMjFkZDVkMS4uNWE5MWE0MSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2l4Z2JldmYudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9peGdiZXZmLnR4dApAQCAtMzUsMTAgKzM1LDYgQEAKIEtub3duIElzc3Vlcy9Ucm91Ymxlc2hvb3RpbmcKID09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotICBVbmxvYWRpbmcgUGh5c2ljYWwgRnVuY3Rpb24gKFBGKSBEcml2ZXIgQ2F1c2VzIFN5c3RlbSBSZWJvb3RzIFdoZW4gVk0gaXMKLSAgUnVubmluZyBhbmQgVkYgaXMgTG9hZGVkIG9uIHRoZSBWTQotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgRG8gbm90IHVubG9hZCB0aGUgUEYgZHJpdmVyIChpeGdiZSkgd2hpbGUgVkZzIGFyZSBhc3NpZ25lZCB0byBndWVzdHMuCiAKIFN1cHBvcnQKID09PT09PT0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9zdG1tYWMudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3N0bW1hYy50eHQKaW5kZXggN2VlNzcwYi4uODBhN2EzNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3N0bW1hYy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3N0bW1hYy50eHQKQEAgLTcsNyArNyw3IEBACiAoU3lub3BzeXMgSVAgYmxvY2tzKTsgaXQgaGFzIGJlZW4gZnVsbHkgdGVzdGVkIG9uIFNUTGludXggcGxhdGZvcm1zLgogCiBDdXJyZW50bHkgdGhpcyBuZXR3b3JrIGRldmljZSBkcml2ZXIgaXMgZm9yIGFsbCBTVE0gZW1iZWRkZWQgTUFDL0dNQUMKLSg3eHh4IFNvQ3MpLgorKDd4eHggU29DcykuIE90aGVyIHBsYXRmb3JtcyBzdGFydCB1c2luZyBpdCBpLmUuIEFSTSBTUEVBci4KIAogRFdDIEV0aGVyIE1BQyAxMC8xMDAvMTAwMCBVbml2ZXJzYWwgdmVyc2lvbiAzLjQxYSBhbmQgRFdDIEV0aGVyIE1BQyAxMC8xMDAKIFVuaXZlcnNhbCB2ZXJzaW9uIDQuMCBoYXZlIGJlZW4gdXNlZCBmb3IgZGV2ZWxvcGluZyB0aGUgZmlyc3QgY29kZQpAQCAtOTUsOSArOTUsMTQgQEAKIGRyaXZlcidzIEhlYWRlciBmaWxlIGluIGluY2x1ZGUvbGludXggZGlyZWN0b3J5LgogCiBzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgewotICAgICAgICBpbnQgYnVzX2lkOwotICAgICAgICBpbnQgcGJsOwotICAgICAgICBpbnQgaGFzX2dtYWM7CisJaW50IGJ1c19pZDsKKwlpbnQgcGJsOworCWludCBjbGtfY3NyOworCWludCBoYXNfZ21hYzsKKwlpbnQgZW5oX2Rlc2M7CisJaW50IHR4X2NvZTsKKwlpbnQgYnVnZ2VkX2p1bWJvOworCWludCBwbXQ7CiAgICAgICAgIHZvaWQgKCpmaXhfbWFjX3NwZWVkKSh2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgc3BlZWQpOwogICAgICAgICB2b2lkICgqYnVzX3NldHVwKSh1bnNpZ25lZCBsb25nIGlvYWRkcik7CiAjaWZkZWYgQ09ORklHX1NUTV9EUklWRVJTCkBAIC0xMTQsNiArMTE5LDEyIEBACiAgIHJlZ2lzdGVycyAob24gU1RNIHBsYXRmb3Jtcyk7CiAtIGhhc19nbWFjOiBHTUFDIGNvcmUgaXMgb24gYm9hcmQgKGdldCBpdCBhdCBydW4tdGltZSBpbiB0aGUgbmV4dCBzdGVwKTsKIC0gYnVzX2lkOiBidXMgaWRlbnRpZmllci4KKy0gdHhfY29lOiBjb3JlIGlzIGFibGUgdG8gcGVyZm9ybSB0aGUgdHggY3N1bSBpbiBIVy4KKy0gZW5oX2Rlc2M6IGlmIHNldHMgdGhlIE1BQyB3aWxsIHVzZSB0aGUgZW5oYW5jZWQgZGVzY3JpcHRvciBzdHJ1Y3R1cmUuCistIGNsa19jc3I6IENTUiBDbG9jayByYW5nZSBzZWxlY3Rpb24uCistIGJ1Z2dlZF9qdW1ibzogc29tZSBIV3MgYXJlIG5vdCBhYmxlIHRvIHBlcmZvcm0gdGhlIGNzdW0gaW4gSFcgZm9yCisgIG92ZXItc2l6ZWQgZnJhbWVzIGR1ZSB0byBsaW1pdGVkIGJ1ZmZlciBzaXplcy4gU2V0dGluZyB0aGlzCisgIGZsYWcgdGhlIGNzdW0gd2lsbCBiZSBkb25lIGluIFNXIG9uIEpVTUJPIGZyYW1lcy4KIAogc3RydWN0IHBsYXRfc3RtbWFjcGh5X2RhdGEgewogICAgICAgICBpbnQgYnVzX2lkOwpAQCAtMTMxLDEzICsxNDIsMjggQEAKIC0gaW50ZXJmYWNlOiBwaHlzaWNhbCBNSUkgaW50ZXJmYWNlIG1vZGU7CiAtIHBoeV9yZXNldDogaG9vayB0byByZXNldCBIVyBmdW5jdGlvbi4KIAorU09VUkNFUzoKKy0gS2NvbmZpZworLSBNYWtlZmlsZQorLSBzdG1tYWNfbWFpbi5jOiBtYWluIG5ldHdvcmsgZGV2aWNlIGRyaXZlcjsKKy0gc3RtbWFjX21kaW8uYzogbWRpbyBmdW5jdGlvbnM7CistIHN0bW1hY19ldGh0b29sLmM6IGV0aHRvb2wgc3VwcG9ydDsKKy0gc3RtbWFjX3RpbWVyLltjaF06IHRpbWVyIGNvZGUgdXNlZCBmb3IgbWl0aWdhdGluZyB0aGUgZHJpdmVyIGRtYSBpbnRlcnJ1cHRzCisgIE9ubHkgdGVzdGVkIG9uIFNUNDAgcGxhdGZvcm1zIGJhc2VkLgorLSBzdG1tYWMuaDogcHJpdmF0ZSBkcml2ZXIgc3RydWN0dXJlOworLSBjb21tb24uaDogY29tbW9uIGRlZmluaXRpb25zIGFuZCBWRlRzOworLSBkZXNjcy5oOiBkZXNjcmlwdG9yIHN0cnVjdHVyZSBkZWZpbml0aW9uczsKKy0gZHdtYWMxMDAwX2NvcmUuYzogR01BQyBjb3JlIGZ1bmN0aW9uczsKKy0gZHdtYWMxMDAwX2RtYS5jOiAgZG1hIGZ1bmN0aW9ucyBmb3IgdGhlIEdNQUMgY2hpcDsKKy0gZHdtYWMxMDAwLmg6IHNwZWNpZmljIGhlYWRlciBmaWxlIGZvciB0aGUgR01BQzsKKy0gZHdtYWMxMDBfY29yZTogTUFDIDEwMCBjb3JlIGFuZCBkbWEgY29kZTsKKy0gZHdtYWMxMDBfZG1hLmM6IGRtYSBmdW50aW9ucyBmb3IgdGhlIE1BQyBjaGlwOworLSBkd21hYzEwMDAuaDogc3BlY2lmaWMgaGVhZGVyIGZpbGUgZm9yIHRoZSBNQUM7CistIGR3bWFjX2xpYi5jOiBnZW5lcmljIERNQSBmdW5jdGlvbnMgc2hhcmVkIGFtb25nIGNoaXBzCistIGVuaF9kZXNjLmM6IGZ1bmN0aW9ucyBmb3IgaGFuZGxpbmcgZW5oYW5jZWQgZGVzY3JpcHRvcnMKKy0gbm9ybV9kZXNjLmM6IGZ1bmN0aW9ucyBmb3IgaGFuZGxpbmcgbm9ybWFsIGRlc2NyaXB0b3JzCisKIFRPRE86Ci0tIENvbnRpbnVlIHRvIG1ha2UgdGhlIGRyaXZlciBtb3JlIGdlbmVyaWMgYW5kIHN1aXRhYmxlIGZvciBvdGhlciBTeW5vcHN5cwotICBFdGhlcm5ldCBjb250cm9sbGVycyB1c2VkIG9uIG90aGVyIGFyY2hpdGVjdHVyZXMgKGkuZS4gQVJNKS4KLS0gMTBHIGNvbnRyb2xsZXJzIGFyZSBub3Qgc3VwcG9ydGVkLgotLSBNQUMgdXNlcyBOb3JtYWwgZGVzY3JpcHRvcnMgYW5kIEdNQUMgdXNlcyBlbmhhbmNlZCBvbmVzLgotICBUaGlzIGlzIGEgbGltaXQgdGhhdCBzaG91bGQgYmUgcmV2aWV3ZWQuIE1BQyBjb3VsZCB3YW50IHRvCi0gIHVzZSB0aGUgZW5oYW5jZWQgc3RydWN0dXJlLgotLSBDaGVja3N1bW1pbmc6IFJ4L1R4IGNzdW0gaXMgZG9uZSBpbiBIVyBpbiBjYXNlIG9mIEdNQUMgb25seS4KKy0gWEdNQUMgY29udHJvbGxlciBpcyBub3Qgc3VwcG9ydGVkLgogLSBSZXZpZXcgdGhlIHRpbWVyIG9wdGltaXNhdGlvbiBjb2RlIHRvIHVzZSBhbiBlbWJlZGRlZCBkZXZpY2UgdGhhdCBzZWVtcyB0byBiZQogICBhdmFpbGFibGUgaW4gbmV3IGNoaXAgZ2VuZXJhdGlvbnMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VyL2RyaXZlcnMtdGVzdGluZy50eHQgYi9Eb2N1bWVudGF0aW9uL3Bvd2VyL2RyaXZlcnMtdGVzdGluZy50eHQKaW5kZXggN2Y3YTczNy4uNjM4YWZkZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9wb3dlci9kcml2ZXJzLXRlc3RpbmcudHh0CisrKyBiL0RvY3VtZW50YXRpb24vcG93ZXIvZHJpdmVycy10ZXN0aW5nLnR4dApAQCAtMjMsMTAgKzIzLDEwIEBACiB3aXRob3V0IHRoZSBuZXcgZHJpdmVyLCB5b3UgYXJlIHJlYWR5IHRvIHRlc3QgaXQ6CiAKIGEpIEJ1aWxkIHRoZSBkcml2ZXIgYXMgYSBtb2R1bGUsIGxvYWQgaXQgYW5kIHRyeSB0aGUgdGVzdCBtb2RlcyBvZiBoaWJlcm5hdGlvbgotICAgKHNlZTogRG9jdW1lbnRzL3Bvd2VyL2Jhc2ljLXBtLWRlYnVnZ2luZy50eHQsIDEpLgorICAgKHNlZTogRG9jdW1lbnRhdGlvbi9wb3dlci9iYXNpYy1wbS1kZWJ1Z2dpbmcudHh0LCAxKS4KIAogYikgTG9hZCB0aGUgZHJpdmVyIGFuZCBhdHRlbXB0IHRvIGhpYmVybmF0ZSBpbiB0aGUgInJlYm9vdCIsICJzaHV0ZG93biIgYW5kCi0gICAicGxhdGZvcm0iIG1vZGVzIChzZWU6IERvY3VtZW50cy9wb3dlci9iYXNpYy1wbS1kZWJ1Z2dpbmcudHh0LCAxKS4KKyAgICJwbGF0Zm9ybSIgbW9kZXMgKHNlZTogRG9jdW1lbnRhdGlvbi9wb3dlci9iYXNpYy1wbS1kZWJ1Z2dpbmcudHh0LCAxKS4KIAogYykgQ29tcGlsZSB0aGUgZHJpdmVyIGRpcmVjdGx5IGludG8gdGhlIGtlcm5lbCBhbmQgdHJ5IHRoZSB0ZXN0IG1vZGVzIG9mCiAgICBoaWJlcm5hdGlvbi4KQEAgLTM0LDEyICszNCwxMiBAQAogZCkgQXR0ZW1wdCB0byBoaWJlcm5hdGUgd2l0aCB0aGUgZHJpdmVyIGNvbXBpbGVkIGRpcmVjdGx5IGludG8gdGhlIGtlcm5lbAogICAgaW4gdGhlICJyZWJvb3QiLCAic2h1dGRvd24iIGFuZCAicGxhdGZvcm0iIG1vZGVzLgogCi1lKSBUcnkgdGhlIHRlc3QgbW9kZXMgb2Ygc3VzcGVuZCAoc2VlOiBEb2N1bWVudHMvcG93ZXIvYmFzaWMtcG0tZGVidWdnaW5nLnR4dCwKK2UpIFRyeSB0aGUgdGVzdCBtb2RlcyBvZiBzdXNwZW5kIChzZWU6IERvY3VtZW50YXRpb24vcG93ZXIvYmFzaWMtcG0tZGVidWdnaW5nLnR4dCwKICAgIDIpLiAgW0FzIGZhciBhcyB0aGUgU1RSIHRlc3RzIGFyZSBjb25jZXJuZWQsIGl0IHNob3VsZCBub3QgbWF0dGVyIHdoZXRoZXIgb3IKICAgIG5vdCB0aGUgZHJpdmVyIGlzIGJ1aWx0IGFzIGEgbW9kdWxlLl0KIAogZikgQXR0ZW1wdCB0byBzdXNwZW5kIHRvIFJBTSB1c2luZyB0aGUgczJyYW0gdG9vbCB3aXRoIHRoZSBkcml2ZXIgbG9hZGVkCi0gICAoc2VlOiBEb2N1bWVudHMvcG93ZXIvYmFzaWMtcG0tZGVidWdnaW5nLnR4dCwgMikuCisgICAoc2VlOiBEb2N1bWVudGF0aW9uL3Bvd2VyL2Jhc2ljLXBtLWRlYnVnZ2luZy50eHQsIDIpLgogCiBFYWNoIG9mIHRoZSBhYm92ZSB0ZXN0cyBzaG91bGQgYmUgcmVwZWF0ZWQgc2V2ZXJhbCB0aW1lcyBhbmQgdGhlIFNURCB0ZXN0cwogc2hvdWxkIGJlIG1peGVkIHdpdGggdGhlIFNUUiB0ZXN0cy4gIElmIGFueSBvZiB0aGVtIGZhaWxzLCB0aGUgZHJpdmVyIGNhbm5vdCBiZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlci9ydW50aW1lX3BtLnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXIvcnVudGltZV9wbS50eHQKaW5kZXggNDFjYzdiMy4uZmZlNTVmZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9wb3dlci9ydW50aW1lX3BtLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VyL3J1bnRpbWVfcG0udHh0CkBAIC01MCw2ICs1MCwxNSBAQAogYW5kIGRldmljZSBjbGFzcyBjYWxsYmFja3MgYXJlIHJlZmVycmVkIHRvIGFzIHN1YnN5c3RlbS1sZXZlbCBjYWxsYmFja3MgaW4gd2hhdAogZm9sbG93cy4KIAorQnkgZGVmYXVsdCwgdGhlIGNhbGxiYWNrcyBhcmUgYWx3YXlzIGludm9rZWQgaW4gcHJvY2VzcyBjb250ZXh0IHdpdGggaW50ZXJydXB0cworZW5hYmxlZC4gIEhvd2V2ZXIsIHN1YnN5c3RlbXMgY2FuIHVzZSB0aGUgcG1fcnVudGltZV9pcnFfc2FmZSgpIGhlbHBlciBmdW5jdGlvbgordG8gdGVsbCB0aGUgUE0gY29yZSB0aGF0IGEgZGV2aWNlJ3MgLT5ydW50aW1lX3N1c3BlbmQoKSBhbmQgLT5ydW50aW1lX3Jlc3VtZSgpCitjYWxsYmFja3Mgc2hvdWxkIGJlIGludm9rZWQgaW4gYXRvbWljIGNvbnRleHQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkCisoLT5ydW50aW1lX2lkbGUoKSBpcyBzdGlsbCBpbnZva2VkIHRoZSBkZWZhdWx0IHdheSkuICBUaGlzIGltcGxpZXMgdGhhdCB0aGVzZQorY2FsbGJhY2sgcm91dGluZXMgbXVzdCBub3QgYmxvY2sgb3Igc2xlZXAsIGJ1dCBpdCBhbHNvIG1lYW5zIHRoYXQgdGhlCitzeW5jaHJvbm91cyBoZWxwZXIgZnVuY3Rpb25zIGxpc3RlZCBhdCB0aGUgZW5kIG9mIFNlY3Rpb24gNCBjYW4gYmUgdXNlZCB3aXRoaW4KK2FuIGludGVycnVwdCBoYW5kbGVyIG9yIGluIGFuIGF0b21pYyBjb250ZXh0LgorCiBUaGUgc3Vic3lzdGVtLWxldmVsIHN1c3BlbmQgY2FsbGJhY2sgaXMgX2VudGlyZWx5XyBfcmVzcG9uc2libGVfIGZvciBoYW5kbGluZwogdGhlIHN1c3BlbmQgb2YgdGhlIGRldmljZSBhcyBhcHByb3ByaWF0ZSwgd2hpY2ggbWF5LCBidXQgbmVlZCBub3QgaW5jbHVkZQogZXhlY3V0aW5nIHRoZSBkZXZpY2UgZHJpdmVyJ3Mgb3duIC0+cnVudGltZV9zdXNwZW5kKCkgY2FsbGJhY2sgKGZyb20gdGhlCkBAIC0yMzcsNiArMjQ2LDEwIEBACiAgICAgICBTZWN0aW9uIDgpOyBpdCBtYXkgYmUgbW9kaWZpZWQgb25seSBieSB0aGUgcG1fcnVudGltZV9ub19jYWxsYmFja3MoKQogICAgICAgaGVscGVyIGZ1bmN0aW9uCiAKKyAgdW5zaWduZWQgaW50IGlycV9zYWZlOworICAgIC0gaW5kaWNhdGVzIHRoYXQgdGhlIC0+cnVudGltZV9zdXNwZW5kKCkgYW5kIC0+cnVudGltZV9yZXN1bWUoKSBjYWxsYmFja3MKKyAgICAgIHdpbGwgYmUgaW52b2tlZCB3aXRoIHRoZSBzcGlubG9jayBoZWxkIGFuZCBpbnRlcnJ1cHRzIGRpc2FibGVkCisKICAgdW5zaWduZWQgaW50IHVzZV9hdXRvc3VzcGVuZDsKICAgICAtIGluZGljYXRlcyB0aGF0IHRoZSBkZXZpY2UncyBkcml2ZXIgc3VwcG9ydHMgZGVsYXllZCBhdXRvc3VzcGVuZCAoc2VlCiAgICAgICBTZWN0aW9uIDkpOyBpdCBtYXkgYmUgbW9kaWZpZWQgb25seSBieSB0aGUKQEAgLTM0NCw2ICszNTcsMTAgQEAKICAgICAtIGRlY3JlbWVudCB0aGUgZGV2aWNlJ3MgdXNhZ2UgY291bnRlcjsgaWYgdGhlIHJlc3VsdCBpcyAwIHRoZW4gcnVuCiAgICAgICBwbV9ydW50aW1lX2lkbGUoZGV2KSBhbmQgcmV0dXJuIGl0cyByZXN1bHQKIAorICBpbnQgcG1fcnVudGltZV9wdXRfc3luY19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldik7CisgICAgLSBkZWNyZW1lbnQgdGhlIGRldmljZSdzIHVzYWdlIGNvdW50ZXI7IGlmIHRoZSByZXN1bHQgaXMgMCB0aGVuIHJ1bgorICAgICAgcG1fcnVudGltZV9zdXNwZW5kKGRldikgYW5kIHJldHVybiBpdHMgcmVzdWx0CisKICAgaW50IHBtX3J1bnRpbWVfcHV0X3N5bmNfYXV0b3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KTsKICAgICAtIGRlY3JlbWVudCB0aGUgZGV2aWNlJ3MgdXNhZ2UgY291bnRlcjsgaWYgdGhlIHJlc3VsdCBpcyAwIHRoZW4gcnVuCiAgICAgICBwbV9ydW50aW1lX2F1dG9zdXNwZW5kKGRldikgYW5kIHJldHVybiBpdHMgcmVzdWx0CkBAIC0zOTcsNiArNDE0LDExIEBACiAgICAgICBQTSBhdHRyaWJ1dGVzIGZyb20gL3N5cy9kZXZpY2VzLy4uLi9wb3dlciAob3IgcHJldmVudCB0aGVtIGZyb20gYmVpbmcKICAgICAgIGFkZGVkIHdoZW4gdGhlIGRldmljZSBpcyByZWdpc3RlcmVkKQogCisgIHZvaWQgcG1fcnVudGltZV9pcnFfc2FmZShzdHJ1Y3QgZGV2aWNlICpkZXYpOworICAgIC0gc2V0IHRoZSBwb3dlci5pcnFfc2FmZSBmbGFnIGZvciB0aGUgZGV2aWNlLCBjYXVzaW5nIHRoZSBydW50aW1lLVBNCisgICAgICBzdXNwZW5kIGFuZCByZXN1bWUgY2FsbGJhY2tzIChidXQgbm90IHRoZSBpZGxlIGNhbGxiYWNrKSB0byBiZSBpbnZva2VkCisgICAgICB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQKKwogICB2b2lkIHBtX3J1bnRpbWVfbWFya19sYXN0X2J1c3koc3RydWN0IGRldmljZSAqZGV2KTsKICAgICAtIHNldCB0aGUgcG93ZXIubGFzdF9idXN5IGZpZWxkIHRvIHRoZSBjdXJyZW50IHRpbWUKIApAQCAtNDM4LDYgKzQ2MCwxNSBAQAogcG1fcnVudGltZV9tYXJrX2xhc3RfYnVzeSgpCiBwbV9ydW50aW1lX2F1dG9zdXNwZW5kX2V4cGlyYXRpb24oKQogCitJZiBwbV9ydW50aW1lX2lycV9zYWZlKCkgaGFzIGJlZW4gY2FsbGVkIGZvciBhIGRldmljZSB0aGVuIHRoZSBmb2xsb3dpbmcgaGVscGVyCitmdW5jdGlvbnMgbWF5IGFsc28gYmUgdXNlZCBpbiBpbnRlcnJ1cHQgY29udGV4dDoKKworcG1fcnVudGltZV9zdXNwZW5kKCkKK3BtX3J1bnRpbWVfYXV0b3N1c3BlbmQoKQorcG1fcnVudGltZV9yZXN1bWUoKQorcG1fcnVudGltZV9nZXRfc3luYygpCitwbV9ydW50aW1lX3B1dF9zeW5jX3N1c3BlbmQoKQorCiA1LiBSdW4tdGltZSBQTSBJbml0aWFsaXphdGlvbiwgRGV2aWNlIFByb2JpbmcgYW5kIFJlbW92YWwKIAogSW5pdGlhbGx5LCB0aGUgcnVuLXRpbWUgUE0gaXMgZGlzYWJsZWQgZm9yIGFsbCBkZXZpY2VzLCB3aGljaCBtZWFucyB0aGF0IHRoZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy5tZWdhcmFpZF9zYXMgYi9Eb2N1bWVudGF0aW9uL3Njc2kvQ2hhbmdlTG9nLm1lZ2FyYWlkX3NhcwppbmRleCAwMDMwMWVkLi5iNjRkMTBkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3Njc2kvQ2hhbmdlTG9nLm1lZ2FyYWlkX3NhcworKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvQ2hhbmdlTG9nLm1lZ2FyYWlkX3NhcwpAQCAtMSwzICsxLDI1IEBACitSZWxlYXNlIERhdGUgICAgOiBUdWVzLiAgRGVjIDE0LCAyMDEwIDE3OjAwOjAwIFBTVCAyMDEwIC0KKwkJCShlbWFpbGQtaWQ6bWVnYXJhaWRsaW51eEBsc2kuY29tKQorCQkJQWRhbSBSYWRmb3JkCitDdXJyZW50IFZlcnNpb24gOiAwMC4wMC4wNS4yOS1yYzEKK09sZCBWZXJzaW9uICAgICA6IDAwLjAwLjA0LjMxLXJjMQorICAgIDEuIFJlbmFtZSBtZWdhcmFpZF9zYXMuYyB0byBtZWdhcmFpZF9zYXNfYmFzZS5jLgorICAgIDIuIFVwZGF0ZSBHUEwgaGVhZGVycy4KKyAgICAzLiBBZGQgTVNJLVggc3VwcG9ydCBhbmQgJ21zaXhfZGlzYWJsZScgbW9kdWxlIHBhcmFtZXRlci4KKyAgICA0LiBVc2UgbG93ZXN0IG1lbW9yeSBiYXIgKGZvciBTUi1JT1YgVkYgc3VwcG9ydCkuCisgICAgNS4gQWRkIHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlX3RlbWxhdGUgY2hhbmdlcywgYW5kIGNoYW5nZSBhbGwgY29kZSB0byB1c2UKKyAgICAgICBuZXcgaW5zdGFuY2UgZW50cmllczoKKworICAgICAgIGlycXJldHVybl90ICgqc2VydmljZV9pc3IgKShpbnQgaXJxLCB2b2lkICpkZXZwKTsKKyAgICAgICB2b2lkICgqdGFza2xldCkodW5zaWduZWQgbG9uZyk7CisgICAgICAgdTMyICgqaW5pdF9hZGFwdGVyKShzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqKTsKKyAgICAgICB1MzIgKCpidWlsZF9hbmRfaXNzdWVfY21kKSAoc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKiwKKyAgICAgICBzdHJ1Y3Qgc2NzaV9jbW5kICopOworICAgICAgIHZvaWQgKCppc3N1ZV9kY21kKSAoc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG1lZ2FzYXNfY21kICpjbWQpOworCisgICA2LiBBZGQgY29kZSB0byBzdXBwb3J0IE1lZ2FSQUlEIDkyNjUvOTI4NSBjb250cm9sbGVycyBkZXZpY2UgaWQgKDB4NWIpLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogMSBSZWxlYXNlIERhdGUgICAgOiBUaHVyLiAgTWF5IDAzLCAyMDEwIDA5OjEyOjQ1IFBTVCAyMDA5IC0KIAkJCShlbWFpbGQtaWQ6bWVnYXJhaWRsaW51eEBsc2kuY29tKQogCQkJQm8gWWFuZwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zZXJpYWwvMDAtSU5ERVggYi9Eb2N1bWVudGF0aW9uL3NlcmlhbC8wMC1JTkRFWAppbmRleCAwN2RjZGIwLi5lMDk0NjhhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NlcmlhbC8wMC1JTkRFWAorKysgYi9Eb2N1bWVudGF0aW9uL3NlcmlhbC8wMC1JTkRFWApAQCAtMTQsNiArMTQsOCBAQAogCS0gbm90ZXMgb24gdXNpbmcgdGhlIFJJU0NvbS84IG11bHRpLXBvcnQgc2VyaWFsIGRyaXZlci4KIHJvY2tldC50eHQKIAktIGluZm8gb24gdGhlIENvbXRyb2wgUm9ja2V0UG9ydCBtdWx0aXBvcnQgc2VyaWFsIGRyaXZlci4KK3NlcmlhbC1yczQ4NS50eHQKKwktIGluZm8gYWJvdXQgUlM0ODUgc3RydWN0dXJlcyBhbmQgc3VwcG9ydCBpbiB0aGUga2VybmVsLgogc3BlY2lhbGl4LnR4dAogCS0gaW5mbyBvbiBoYXJkd2FyZS9kcml2ZXIgZm9yIHNwZWNpYWxpeCBJTzgrIG11bHRpcG9ydCBzZXJpYWwgY2FyZC4KIHN0YWxsaW9uLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zZXJpYWwvc2VyaWFsLXJzNDg1LnR4dCBiL0RvY3VtZW50YXRpb24vc2VyaWFsL3NlcmlhbC1yczQ4NS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ5MzIzOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2VyaWFsL3NlcmlhbC1yczQ4NS50eHQKQEAgLTAsMCArMSwxMjAgQEAKKyAgICAgICAgICAgICAgICAgICAgICAgIFJTNDg1IFNFUklBTCBDT01NVU5JQ0FUSU9OUworCisxLiBJTlRST0RVQ1RJT04KKworICAgRUlBLTQ4NSwgYWxzbyBrbm93biBhcyBUSUEvRUlBLTQ4NSBvciBSUy00ODUsIGlzIGEgc3RhbmRhcmQgZGVmaW5pbmcgdGhlCisgICBlbGVjdHJpY2FsIGNoYXJhY3RlcmlzdGljcyBvZiBkcml2ZXJzIGFuZCByZWNlaXZlcnMgZm9yIHVzZSBpbiBiYWxhbmNlZAorICAgZGlnaXRhbCBtdWx0aXBvaW50IHN5c3RlbXMuCisgICBUaGlzIHN0YW5kYXJkIGlzIHdpZGVseSB1c2VkIGZvciBjb21tdW5pY2F0aW9ucyBpbiBpbmR1c3RyaWFsIGF1dG9tYXRpb24KKyAgIGJlY2F1c2UgaXQgY2FuIGJlIHVzZWQgZWZmZWN0aXZlbHkgb3ZlciBsb25nIGRpc3RhbmNlcyBhbmQgaW4gZWxlY3RyaWNhbGx5CisgICBub2lzeSBlbnZpcm9ubWVudHMuCisKKzIuIEhBUkRXQVJFLVJFTEFURUQgQ09OU0lERVJBVElPTlMKKworICAgU29tZSBDUFVzL1VBUlRzIChlLmcuLCBBdG1lbCBBVDkxIG9yIDE2Qzk1MCBVQVJUKSBjb250YWluIGEgYnVpbHQtaW4KKyAgIGhhbGYtZHVwbGV4IG1vZGUgY2FwYWJsZSBvZiBhdXRvbWF0aWNhbGx5IGNvbnRyb2xsaW5nIGxpbmUgZGlyZWN0aW9uIGJ5CisgICB0b2dnbGluZyBSVFMgb3IgRFRSIHNpZ25hbHMuIFRoYXQgY2FuIGJlIHVzZWQgdG8gY29udHJvbCBleHRlcm5hbAorICAgaGFsZi1kdXBsZXggaGFyZHdhcmUgbGlrZSBhbiBSUzQ4NSB0cmFuc2NlaXZlciBvciBhbnkgUlMyMzItY29ubmVjdGVkCisgICBoYWxmLWR1cGxleCBkZXZpY2VzIGxpa2Ugc29tZSBtb2RlbXMuCisKKyAgIEZvciB0aGVzZSBtaWNyb2NvbnRyb2xsZXJzLCB0aGUgTGludXggZHJpdmVyIHNob3VsZCBiZSBtYWRlIGNhcGFibGUgb2YKKyAgIHdvcmtpbmcgaW4gYm90aCBtb2RlcywgYW5kIHByb3BlciBpb2N0bHMgKHNlZSBsYXRlcikgc2hvdWxkIGJlIG1hZGUKKyAgIGF2YWlsYWJsZSBhdCB1c2VyLWxldmVsIHRvIGFsbG93IHN3aXRjaGluZyBmcm9tIG9uZSBtb2RlIHRvIHRoZSBvdGhlciwgYW5kCisgICB2aWNlIHZlcnNhLgorCiszLiBEQVRBIFNUUlVDVFVSRVMgQUxSRUFEWSBBVkFJTEFCTEUgSU4gVEhFIEtFUk5FTAorCisgICBUaGUgTGludXgga2VybmVsIHByb3ZpZGVzIHRoZSBzZXJpYWxfcnM0ODUgc3RydWN0dXJlIChzZWUgWzFdKSB0byBoYW5kbGUKKyAgIFJTNDg1IGNvbW11bmljYXRpb25zLiBUaGlzIGRhdGEgc3RydWN0dXJlIGlzIHVzZWQgdG8gc2V0IGFuZCBjb25maWd1cmUgUlM0ODUKKyAgIHBhcmFtZXRlcnMgaW4gdGhlIHBsYXRmb3JtIGRhdGEgYW5kIGluIGlvY3Rscy4KKworICAgQW55IGRyaXZlciBmb3IgZGV2aWNlcyBjYXBhYmxlIG9mIHdvcmtpbmcgYm90aCBhcyBSUzIzMiBhbmQgUlM0ODUgc2hvdWxkCisgICBwcm92aWRlIGF0IGxlYXN0IHRoZSBmb2xsb3dpbmcgaW9jdGxzOgorCisgICAgLSBUSU9DU1JTNDg1ICh0eXBpY2FsbHkgYXNzb2NpYXRlZCB3aXRoIG51bWJlciAweDU0MkYpLiBUaGlzIGlvY3RsIGlzIHVzZWQKKyAgICAgIHRvIGVuYWJsZS9kaXNhYmxlIFJTNDg1IG1vZGUgZnJvbSB1c2VyLXNwYWNlCisKKyAgICAtIFRJT0NHUlM0ODUgKHR5cGljYWxseSBhc3NvY2lhdGVkIHdpdGggbnVtYmVyIDB4NTQyRSkuIFRoaXMgaW9jdGwgaXMgdXNlZAorICAgICAgdG8gZ2V0IFJTNDg1IG1vZGUgZnJvbSBrZXJuZWwtc3BhY2UgKGkuZS4sIGRyaXZlcikgdG8gdXNlci1zcGFjZS4KKworICAgSW4gb3RoZXIgd29yZHMsIHRoZSBzZXJpYWwgZHJpdmVyIHNob3VsZCBjb250YWluIGEgY29kZSBzaW1pbGFyIHRvIHRoZSBuZXh0CisgICBvbmU6CisKKwlzdGF0aWMgc3RydWN0IHVhcnRfb3BzIGF0bWVsX3BvcHMgPSB7CisJCS8qIC4uLiAqLworCQkuaW9jdGwJCT0gaGFuZGxlX2lvY3RsLAorCX07CisKKwlzdGF0aWMgaW50IGhhbmRsZV9pb2N0bChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LAorCQl1bnNpZ25lZCBpbnQgY21kLAorCQl1bnNpZ25lZCBsb25nIGFyZykKKwl7CisJCXN0cnVjdCBzZXJpYWxfcnM0ODUgcnM0ODVjb25mOworCisJCXN3aXRjaCAoY21kKSB7CisJCWNhc2UgVElPQ1NSUzQ4NToKKwkJCWlmIChjb3B5X2Zyb21fdXNlcigmcnM0ODVjb25mLAorCQkJCShzdHJ1Y3Qgc2VyaWFsX3JzNDg1ICopIGFyZywKKwkJCQlzaXplb2YocnM0ODVjb25mKSkpCisJCQkJCXJldHVybiAtRUZBVUxUOworCisJCQkvKiAuLi4gKi8KKwkJCWJyZWFrOworCisJCWNhc2UgVElPQ0dSUzQ4NToKKwkJCWlmIChjb3B5X3RvX3VzZXIoKHN0cnVjdCBzZXJpYWxfcnM0ODUgKikgYXJnLAorCQkJCS4uLiwKKwkJCQlzaXplb2YocnM0ODVjb25mKSkpCisJCQkJCXJldHVybiAtRUZBVUxUOworCQkJLyogLi4uICovCisJCQlicmVhazsKKworCQkvKiAuLi4gKi8KKwkJfQorCX0KKworCis0LiBVU0FHRSBGUk9NIFVTRVItTEVWRUwKKworICAgRnJvbSB1c2VyLWxldmVsLCBSUzQ4NSBjb25maWd1cmF0aW9uIGNhbiBiZSBnZXQvc2V0IHVzaW5nIHRoZSBwcmV2aW91cworICAgaW9jdGxzLiBGb3IgaW5zdGFuY2UsIHRvIHNldCBSUzQ4NSB5b3UgY2FuIHVzZSB0aGUgZm9sbG93aW5nIGNvZGU6CisKKwkjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CisKKwkvKiBEcml2ZXItc3BlY2lmaWMgaW9jdGxzOiAqLworCSNkZWZpbmUgVElPQ0dSUzQ4NSAgICAgIDB4NTQyRQorCSNkZWZpbmUgVElPQ1NSUzQ4NSAgICAgIDB4NTQyRgorCisJLyogT3BlbiB5b3VyIHNwZWNpZmljIGRldmljZSAoZS5nLiwgL2Rldi9teWRldmljZSk6ICovCisJaW50IGZkID0gb3BlbiAoIi9kZXYvbXlkZXZpY2UiLCBPX1JEV1IpOworCWlmIChmZCA8IDApIHsKKwkJLyogRXJyb3IgaGFuZGxpbmcuIFNlZSBlcnJuby4gKi8KKwl9CisKKwlzdHJ1Y3Qgc2VyaWFsX3JzNDg1IHJzNDg1Y29uZjsKKworCS8qIFNldCBSUzQ4NSBtb2RlOiAqLworCXJzNDg1Y29uZi5mbGFncyB8PSBTRVJfUlM0ODVfRU5BQkxFRDsKKworCS8qIFNldCBydHMgZGVsYXkgYmVmb3JlIHNlbmQsIGlmIG5lZWRlZDogKi8KKwlyczQ4NWNvbmYuZmxhZ3MgfD0gU0VSX1JTNDg1X1JUU19CRUZPUkVfU0VORDsKKwlyczQ4NWNvbmYuZGVsYXlfcnRzX2JlZm9yZV9zZW5kID0gLi4uOworCisJLyogU2V0IHJ0cyBkZWxheSBhZnRlciBzZW5kLCBpZiBuZWVkZWQ6ICovCisJcnM0ODVjb25mLmZsYWdzIHw9IFNFUl9SUzQ4NV9SVFNfQUZURVJfU0VORDsKKwlyczQ4NWNvbmYuZGVsYXlfcnRzX2FmdGVyX3NlbmQgPSAuLi47CisKKwlpZiAoaW9jdGwgKGZkLCBUSU9DU1JTNDg1LCAmcnM0ODVjb25mKSA8IDApIHsKKwkJLyogRXJyb3IgaGFuZGxpbmcuIFNlZSBlcnJuby4gKi8KKwl9CisKKwkvKiBVc2UgcmVhZCgpIGFuZCB3cml0ZSgpIHN5c2NhbGxzIGhlcmUuLi4gKi8KKworCS8qIENsb3NlIHRoZSBkZXZpY2Ugd2hlbiBmaW5pc2hlZDogKi8KKwlpZiAoY2xvc2UgKGZkKSA8IDApIHsKKwkJLyogRXJyb3IgaGFuZGxpbmcuIFNlZSBlcnJuby4gKi8KKwl9CisKKzUuIFJFRkVSRU5DRVMKKworIFsxXQlpbmNsdWRlL2xpbnV4L3NlcmlhbC5oCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NwaS9weGEyeHggYi9Eb2N1bWVudGF0aW9uL3NwaS9weGEyeHgKaW5kZXggNmJiOTE2ZC4uNjhhNGZlMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zcGkvcHhhMnh4CisrKyBiL0RvY3VtZW50YXRpb24vc3BpL3B4YTJ4eApAQCAtMTksNyArMTksNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFR5cGljYWxseSBhIFNQSSBtYXN0ZXIgaXMgZGVmaW5lZCBpbiB0aGUgYXJjaC8uLi4vbWFjaC0qL2JvYXJkLSouYyBhcyBhCiAicGxhdGZvcm0gZGV2aWNlIi4gIFRoZSBtYXN0ZXIgY29uZmlndXJhdGlvbiBpcyBwYXNzZWQgdG8gdGhlIGRyaXZlciB2aWEgYSB0YWJsZQotZm91bmQgaW4gYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YTJ4eF9zcGkuaDoKK2ZvdW5kIGluIGluY2x1ZGUvbGludXgvc3BpL3B4YTJ4eF9zcGkuaDoKIAogc3RydWN0IHB4YTJ4eF9zcGlfbWFzdGVyIHsKIAllbnVtIHB4YV9zc3BfdHlwZSBzc3BfdHlwZTsKQEAgLTk0LDcgKzk0LDcgQEAKIAogRWFjaCBzbGF2ZSBkZXZpY2UgYXR0YWNoZWQgdG8gdGhlIFBYQSBtdXN0IHByb3ZpZGUgc2xhdmUgc3BlY2lmaWMgY29uZmlndXJhdGlvbgogaW5mb3JtYXRpb24gdmlhIHRoZSBzdHJ1Y3R1cmUgInB4YTJ4eF9zcGlfY2hpcCIgZm91bmQgaW4KLSJhcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhMnh4X3NwaS5oIi4gIFRoZSBweGEyeHhfc3BpIG1hc3RlciBjb250cm9sbGVyIGRyaXZlcgorImluY2x1ZGUvbGludXgvc3BpL3B4YTJ4eF9zcGkuaCIuICBUaGUgcHhhMnh4X3NwaSBtYXN0ZXIgY29udHJvbGxlciBkcml2ZXIKIHdpbGwgdXNlcyB0aGUgY29uZmlndXJhdGlvbiB3aGVuZXZlciB0aGUgZHJpdmVyIGNvbW11bmljYXRlcyB3aXRoIHRoZSBzbGF2ZQogZGV2aWNlLiBBbGwgZmllbGRzIGFyZSBvcHRpb25hbC4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90cmFjZS9ldmVudHMtcG93ZXIudHh0IGIvRG9jdW1lbnRhdGlvbi90cmFjZS9ldmVudHMtcG93ZXIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2ZDg3YjYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3RyYWNlL2V2ZW50cy1wb3dlci50eHQKQEAgLTAsMCArMSw5MCBAQAorCisJCQlTdWJzeXN0ZW0gVHJhY2UgUG9pbnRzOiBwb3dlcgorCitUaGUgcG93ZXIgdHJhY2luZyBzeXN0ZW0gY2FwdHVyZXMgZXZlbnRzIHJlbGF0ZWQgdG8gcG93ZXIgdHJhbnNpdGlvbnMKK3dpdGhpbiB0aGUga2VybmVsLiBCcm9hZGx5IHNwZWFraW5nIHRoZXJlIGFyZSB0aHJlZSBtYWpvciBzdWJoZWFkaW5nczoKKworICBvIFBvd2VyIHN0YXRlIHN3aXRjaCB3aGljaCByZXBvcnRzIGV2ZW50cyByZWxhdGVkIHRvIHN1c3BlbmQgKFMtc3RhdGVzKSwKKyAgICAgY3B1aWRsZSAoQy1zdGF0ZXMpIGFuZCBjcHVmcmVxIChQLXN0YXRlcykKKyAgbyBTeXN0ZW0gY2xvY2sgcmVsYXRlZCBjaGFuZ2VzCisgIG8gUG93ZXIgZG9tYWlucyByZWxhdGVkIGNoYW5nZXMgYW5kIHRyYW5zaXRpb25zCisKK1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHdoYXQgZWFjaCBvZiB0aGUgdHJhY2Vwb2ludHMgaXMgYW5kIHdoeSB0aGV5CittaWdodCBiZSB1c2VmdWwuCisKK0NmLiBpbmNsdWRlL3RyYWNlL2V2ZW50cy9wb3dlci5oIGZvciB0aGUgZXZlbnRzIGRlZmluaXRpb25zLgorCisxLiBQb3dlciBzdGF0ZSBzd2l0Y2ggZXZlbnRzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKzEuMSBOZXcgdHJhY2UgQVBJCistLS0tLS0tLS0tLS0tLS0tLQorCitBICdjcHUnIGV2ZW50IGNsYXNzIGdhdGhlcnMgdGhlIENQVS1yZWxhdGVkIGV2ZW50czogY3B1aWRsZSBhbmQKK2NwdWZyZXEuCisKK2NwdV9pZGxlCQkic3RhdGU9JWx1IGNwdV9pZD0lbHUiCitjcHVfZnJlcXVlbmN5CQkic3RhdGU9JWx1IGNwdV9pZD0lbHUiCisKK0Egc3VzcGVuZCBldmVudCBpcyB1c2VkIHRvIGluZGljYXRlIHRoZSBzeXN0ZW0gZ29pbmcgaW4gYW5kIG91dCBvZiB0aGUKK3N1c3BlbmQgbW9kZToKKworbWFjaGluZV9zdXNwZW5kCQkic3RhdGU9JWx1IgorCisKK05vdGU6IHRoZSB2YWx1ZSBvZiAnLTEnIG9yICc0Mjk0OTY3Mjk1JyBmb3Igc3RhdGUgbWVhbnMgYW4gZXhpdCBmcm9tIHRoZSBjdXJyZW50IHN0YXRlLAoraS5lLiB0cmFjZV9jcHVfaWRsZSg0LCBzbXBfcHJvY2Vzc29yX2lkKCkpIG1lYW5zIHRoYXQgdGhlIHN5c3RlbQorZW50ZXJzIHRoZSBpZGxlIHN0YXRlIDQsIHdoaWxlIHRyYWNlX2NwdV9pZGxlKFBXUl9FVkVOVF9FWElULCBzbXBfcHJvY2Vzc29yX2lkKCkpCittZWFucyB0aGF0IHRoZSBzeXN0ZW0gZXhpdHMgdGhlIHByZXZpb3VzIGlkbGUgc3RhdGUuCisKK1RoZSBldmVudCB3aGljaCBoYXMgJ3N0YXRlPTQyOTQ5NjcyOTUnIGluIHRoZSB0cmFjZSBpcyB2ZXJ5IGltcG9ydGFudCB0byB0aGUgdXNlcgorc3BhY2UgdG9vbHMgd2hpY2ggYXJlIHVzaW5nIGl0IHRvIGRldGVjdCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IHN0YXRlLCBhbmQgc28gdG8KK2NvcnJlY3RseSBkcmF3IHRoZSBzdGF0ZXMgZGlhZ3JhbXMgYW5kIHRvIGNhbGN1bGF0ZSBhY2N1cmF0ZSBzdGF0aXN0aWNzIGV0Yy4KKworMS4yIERFUFJFQ0FURUQgdHJhY2UgQVBJCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQSBuZXcgS2NvbmZpZyBvcHRpb24gQ09ORklHX0VWRU5UX1BPV0VSX1RSQUNJTkdfREVQUkVDQVRFRCB3aXRoIHRoZSBkZWZhdWx0IHZhbHVlIG9mCisneScgaGFzIGJlZW4gY3JlYXRlZC4gVGhpcyBhbGxvd3MgdGhlIGxlZ2FjeSB0cmFjZSBwb3dlciBBUEkgdG8gYmUgdXNlZCBjb25qb2ludGx5Cit3aXRoIHRoZSBuZXcgdHJhY2UgQVBJLgorVGhlIEtjb25maWcgb3B0aW9uLCB0aGUgb2xkIHRyYWNlIEFQSSAoaW4gaW5jbHVkZS90cmFjZS9ldmVudHMvcG93ZXIuaCkgYW5kIHRoZQorb2xkIHRyYWNlIHBvaW50cyB3aWxsIGRpc2FwcGVhciBpbiBhIGZ1dHVyZSByZWxlYXNlIChuYW1lbHkgMi42LjQxKS4KKworcG93ZXJfc3RhcnQJCSJ0eXBlPSVsdSBzdGF0ZT0lbHUgY3B1X2lkPSVsdSIKK3Bvd2VyX2ZyZXF1ZW5jeQkJInR5cGU9JWx1IHN0YXRlPSVsdSBjcHVfaWQ9JWx1IgorcG93ZXJfZW5kCQkiY3B1X2lkPSVsdSIKKworVGhlICd0eXBlJyBwYXJhbWV0ZXIgdGFrZXMgb25lIG9mIHRob3NlIG1hY3JvczoKKyAuIFBPV0VSX05PTkUJPSAwLAorIC4gUE9XRVJfQ1NUQVRFCT0gMSwJLyogQy1TdGF0ZSAqLworIC4gUE9XRVJfUFNUQVRFCT0gMiwJLyogRmVxdWVuY3kgY2hhbmdlIG9yIERWRlMgKi8KKworVGhlICdzdGF0ZScgcGFyYW1ldGVyIGlzIHNldCBkZXBlbmRpbmcgb24gdGhlIHR5cGU6CisgLiBUYXJnZXQgQy1zdGF0ZSBmb3IgdHlwZT1QT1dFUl9DU1RBVEUsCisgLiBUYXJnZXQgZnJlcXVlbmN5IGZvciB0eXBlPVBPV0VSX1BTVEFURSwKKworcG93ZXJfZW5kIGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhlIGV4aXQgb2YgYSBzdGF0ZSwgY29ycmVzcG9uZGluZyB0byB0aGUgbGF0ZXN0Citwb3dlcl9zdGFydCBldmVudC4KKworMi4gQ2xvY2tzIGV2ZW50cworPT09PT09PT09PT09PT09PQorVGhlIGNsb2NrIGV2ZW50cyBhcmUgdXNlZCBmb3IgY2xvY2sgZW5hYmxlL2Rpc2FibGUgYW5kIGZvcgorY2xvY2sgcmF0ZSBjaGFuZ2UuCisKK2Nsb2NrX2VuYWJsZQkJIiVzIHN0YXRlPSVsdSBjcHVfaWQ9JWx1IgorY2xvY2tfZGlzYWJsZQkJIiVzIHN0YXRlPSVsdSBjcHVfaWQ9JWx1IgorY2xvY2tfc2V0X3JhdGUJCSIlcyBzdGF0ZT0lbHUgY3B1X2lkPSVsdSIKKworVGhlIGZpcnN0IHBhcmFtZXRlciBnaXZlcyB0aGUgY2xvY2sgbmFtZSAoZS5nLiAiZ3BpbzFfaWNsayIpLgorVGhlIHNlY29uZCBwYXJhbWV0ZXIgaXMgJzEnIGZvciBlbmFibGUsICcwJyBmb3IgZGlzYWJsZSwgdGhlIHRhcmdldAorY2xvY2sgcmF0ZSBmb3Igc2V0X3JhdGUuCisKKzMuIFBvd2VyIGRvbWFpbnMgZXZlbnRzCis9PT09PT09PT09PT09PT09PT09PT09PQorVGhlIHBvd2VyIGRvbWFpbiBldmVudHMgYXJlIHVzZWQgZm9yIHBvd2VyIGRvbWFpbnMgdHJhbnNpdGlvbnMKKworcG93ZXJfZG9tYWluX3RhcmdldAkiJXMgc3RhdGU9JWx1IGNwdV9pZD0lbHUiCisKK1RoZSBmaXJzdCBwYXJhbWV0ZXIgZ2l2ZXMgdGhlIHBvd2VyIGRvbWFpbiBuYW1lIChlLmcuICJtcHVfcHdyZG0iKS4KK1RoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIHRoZSBwb3dlciBkb21haW4gdGFyZ2V0IHN0YXRlLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzYi9wb3dlci1tYW5hZ2VtZW50LnR4dCBiL0RvY3VtZW50YXRpb24vdXNiL3Bvd2VyLW1hbmFnZW1lbnQudHh0CmluZGV4IGIyOWQ4ZTUuLmM5ZmZhOWMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdXNiL3Bvd2VyLW1hbmFnZW1lbnQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdXNiL3Bvd2VyLW1hbmFnZW1lbnQudHh0CkBAIC0yLDcgKzIsNyBAQAogCiAJCSBBbGFuIFN0ZXJuIDxzdGVybkByb3dsYW5kLmhhcnZhcmQuZWR1PgogCi0JCQkgICAgRGVjZW1iZXIgMTEsIDIwMDkKKwkJCSAgICBPY3RvYmVyIDI4LCAyMDEwCiAKIAogCkBAIC0xMDcsOSArMTA3LDE0IEBACiBUaGUgdXNlciBpbnRlcmZhY2UgZm9yIGNvbnRyb2xsaW5nIGR5bmFtaWMgUE0gaXMgbG9jYXRlZCBpbiB0aGUgcG93ZXIvCiBzdWJkaXJlY3Rvcnkgb2YgZWFjaCBVU0IgZGV2aWNlJ3Mgc3lzZnMgZGlyZWN0b3J5LCB0aGF0IGlzLCBpbgogL3N5cy9idXMvdXNiL2RldmljZXMvLi4uL3Bvd2VyLyB3aGVyZSAiLi4uIiBpcyB0aGUgZGV2aWNlJ3MgSUQuICBUaGUKLXJlbGV2YW50IGF0dHJpYnV0ZSBmaWxlcyBhcmU6IHdha2V1cCwgY29udHJvbCwgYW5kIGF1dG9zdXNwZW5kLgotKFRoZXJlIG1heSBhbHNvIGJlIGEgZmlsZSBuYW1lZCAibGV2ZWwiOyB0aGlzIGZpbGUgd2FzIGRlcHJlY2F0ZWQKLWFzIG9mIHRoZSAyLjYuMzUga2VybmVsIGFuZCByZXBsYWNlZCBieSB0aGUgImNvbnRyb2wiIGZpbGUuKQorcmVsZXZhbnQgYXR0cmlidXRlIGZpbGVzIGFyZTogd2FrZXVwLCBjb250cm9sLCBhbmQKK2F1dG9zdXNwZW5kX2RlbGF5X21zLiAgKFRoZXJlIG1heSBhbHNvIGJlIGEgZmlsZSBuYW1lZCAibGV2ZWwiOyB0aGlzCitmaWxlIHdhcyBkZXByZWNhdGVkIGFzIG9mIHRoZSAyLjYuMzUga2VybmVsIGFuZCByZXBsYWNlZCBieSB0aGUKKyJjb250cm9sIiBmaWxlLiAgSW4gMi42LjM4IHRoZSAiYXV0b3N1c3BlbmQiIGZpbGUgd2lsbCBiZSBkZXByZWNhdGVkCithbmQgcmVwbGFjZWQgYnkgdGhlICJhdXRvc3VzcGVuZF9kZWxheV9tcyIgZmlsZS4gIFRoZSBvbmx5IGRpZmZlcmVuY2UKK2lzIHRoYXQgdGhlIG5ld2VyIGZpbGUgZXhwcmVzc2VzIHRoZSBkZWxheSBpbiBtaWxsaXNlY29uZHMgd2hlcmVhcyB0aGUKK29sZGVyIGZpbGUgdXNlcyBzZWNvbmRzLiAgQ29uZnVzaW5nbHksIGJvdGggZmlsZXMgYXJlIHByZXNlbnQgaW4gMi42LjM3CitidXQgb25seSAiYXV0b3N1c3BlbmQiIHdvcmtzLikKIAogCXBvd2VyL3dha2V1cAogCkBAIC0xNDAsMzMgKzE0NSwzNiBAQAogCQlzdXNwZW5kZWQgYW5kIGF1dG9yZXN1bWUgd2FzIG5vdCBhbGxvd2VkLiAgVGhpcwogCQlzZXR0aW5nIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuKQogCi0JcG93ZXIvYXV0b3N1c3BlbmQKKwlwb3dlci9hdXRvc3VzcGVuZF9kZWxheV9tcwogCiAJCVRoaXMgZmlsZSBjb250YWlucyBhbiBpbnRlZ2VyIHZhbHVlLCB3aGljaCBpcyB0aGUKLQkJbnVtYmVyIG9mIHNlY29uZHMgdGhlIGRldmljZSBzaG91bGQgcmVtYWluIGlkbGUgYmVmb3JlCi0JCXRoZSBrZXJuZWwgd2lsbCBhdXRvc3VzcGVuZCBpdCAodGhlIGlkbGUtZGVsYXkgdGltZSkuCi0JCVRoZSBkZWZhdWx0IGlzIDIuICAwIG1lYW5zIHRvIGF1dG9zdXNwZW5kIGFzIHNvb24gYXMKLQkJdGhlIGRldmljZSBiZWNvbWVzIGlkbGUsIGFuZCBuZWdhdGl2ZSB2YWx1ZXMgbWVhbgotCQluZXZlciB0byBhdXRvc3VzcGVuZC4gIFlvdSBjYW4gd3JpdGUgYSBudW1iZXIgdG8gdGhlCi0JCWZpbGUgdG8gY2hhbmdlIHRoZSBhdXRvc3VzcGVuZCBpZGxlLWRlbGF5IHRpbWUuCisJCW51bWJlciBvZiBtaWxsaXNlY29uZHMgdGhlIGRldmljZSBzaG91bGQgcmVtYWluIGlkbGUKKwkJYmVmb3JlIHRoZSBrZXJuZWwgd2lsbCBhdXRvc3VzcGVuZCBpdCAodGhlIGlkbGUtZGVsYXkKKwkJdGltZSkuICBUaGUgZGVmYXVsdCBpcyAyMDAwLiAgMCBtZWFucyB0byBhdXRvc3VzcGVuZAorCQlhcyBzb29uIGFzIHRoZSBkZXZpY2UgYmVjb21lcyBpZGxlLCBhbmQgbmVnYXRpdmUKKwkJdmFsdWVzIG1lYW4gbmV2ZXIgdG8gYXV0b3N1c3BlbmQuICBZb3UgY2FuIHdyaXRlIGEKKwkJbnVtYmVyIHRvIHRoZSBmaWxlIHRvIGNoYW5nZSB0aGUgYXV0b3N1c3BlbmQKKwkJaWRsZS1kZWxheSB0aW1lLgogCi1Xcml0aW5nICItMSIgdG8gcG93ZXIvYXV0b3N1c3BlbmQgYW5kIHdyaXRpbmcgIm9uIiB0byBwb3dlci9jb250cm9sIGRvCi1lc3NlbnRpYWxseSB0aGUgc2FtZSB0aGluZyAtLSB0aGV5IGJvdGggcHJldmVudCB0aGUgZGV2aWNlIGZyb20gYmVpbmcKLWF1dG9zdXNwZW5kZWQuICBZZXMsIHRoaXMgaXMgYSByZWR1bmRhbmN5IGluIHRoZSBBUEkuCitXcml0aW5nICItMSIgdG8gcG93ZXIvYXV0b3N1c3BlbmRfZGVsYXlfbXMgYW5kIHdyaXRpbmcgIm9uIiB0bworcG93ZXIvY29udHJvbCBkbyBlc3NlbnRpYWxseSB0aGUgc2FtZSB0aGluZyAtLSB0aGV5IGJvdGggcHJldmVudCB0aGUKK2RldmljZSBmcm9tIGJlaW5nIGF1dG9zdXNwZW5kZWQuICBZZXMsIHRoaXMgaXMgYSByZWR1bmRhbmN5IGluIHRoZQorQVBJLgogCiAoSW4gMi42LjIxIHdyaXRpbmcgIjAiIHRvIHBvd2VyL2F1dG9zdXNwZW5kIHdvdWxkIHByZXZlbnQgdGhlIGRldmljZQogZnJvbSBiZWluZyBhdXRvc3VzcGVuZGVkOyB0aGUgYmVoYXZpb3Igd2FzIGNoYW5nZWQgaW4gMi42LjIyLiAgVGhlCiBwb3dlci9hdXRvc3VzcGVuZCBhdHRyaWJ1dGUgZGlkIG5vdCBleGlzdCBwcmlvciB0byAyLjYuMjEsIGFuZCB0aGUKIHBvd2VyL2xldmVsIGF0dHJpYnV0ZSBkaWQgbm90IGV4aXN0IHByaW9yIHRvIDIuNi4yMi4gIHBvd2VyL2NvbnRyb2wKLXdhcyBhZGRlZCBpbiAyLjYuMzQuKQord2FzIGFkZGVkIGluIDIuNi4zNCwgYW5kIHBvd2VyL2F1dG9zdXNwZW5kX2RlbGF5X21zIHdhcyBhZGRlZCBpbgorMi42LjM3IGJ1dCBkaWQgbm90IGJlY29tZSBmdW5jdGlvbmFsIHVudGlsIDIuNi4zOC4pCiAKIAogCUNoYW5naW5nIHRoZSBkZWZhdWx0IGlkbGUtZGVsYXkgdGltZQogCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1UaGUgZGVmYXVsdCBhdXRvc3VzcGVuZCBpZGxlLWRlbGF5IHRpbWUgaXMgY29udHJvbGxlZCBieSBhIG1vZHVsZQotcGFyYW1ldGVyIGluIHVzYmNvcmUuICBZb3UgY2FuIHNwZWNpZnkgdGhlIHZhbHVlIHdoZW4gdXNiY29yZSBpcwotbG9hZGVkLiAgRm9yIGV4YW1wbGUsIHRvIHNldCBpdCB0byA1IHNlY29uZHMgaW5zdGVhZCBvZiAyIHlvdSB3b3VsZAorVGhlIGRlZmF1bHQgYXV0b3N1c3BlbmQgaWRsZS1kZWxheSB0aW1lIChpbiBzZWNvbmRzKSBpcyBjb250cm9sbGVkIGJ5CithIG1vZHVsZSBwYXJhbWV0ZXIgaW4gdXNiY29yZS4gIFlvdSBjYW4gc3BlY2lmeSB0aGUgdmFsdWUgd2hlbiB1c2Jjb3JlCitpcyBsb2FkZWQuICBGb3IgZXhhbXBsZSwgdG8gc2V0IGl0IHRvIDUgc2Vjb25kcyBpbnN0ZWFkIG9mIDIgeW91IHdvdWxkCiBkbzoKIAogCW1vZHByb2JlIHVzYmNvcmUgYXV0b3N1c3BlbmQ9NQpAQCAtMjM0LDI1ICsyNDIsMjMgQEAKIAogSWYgYSBkcml2ZXIga25vd3MgdGhhdCBpdHMgZGV2aWNlIGhhcyBwcm9wZXIgc3VzcGVuZC9yZXN1bWUgc3VwcG9ydCwKIGl0IGNhbiBlbmFibGUgYXV0b3N1c3BlbmQgYWxsIGJ5IGl0c2VsZi4gIEZvciBleGFtcGxlLCB0aGUgdmlkZW8KLWRyaXZlciBmb3IgYSBsYXB0b3AncyB3ZWJjYW0gbWlnaHQgZG8gdGhpcywgc2luY2UgdGhlc2UgZGV2aWNlcyBhcmUKLXJhcmVseSB1c2VkIGFuZCBzbyBzaG91bGQgbm9ybWFsbHkgYmUgYXV0b3N1c3BlbmRlZC4KK2RyaXZlciBmb3IgYSBsYXB0b3AncyB3ZWJjYW0gbWlnaHQgZG8gdGhpcyAoaW4gcmVjZW50IGtlcm5lbHMgdGhleQorZG8pLCBzaW5jZSB0aGVzZSBkZXZpY2VzIGFyZSByYXJlbHkgdXNlZCBhbmQgc28gc2hvdWxkIG5vcm1hbGx5IGJlCithdXRvc3VzcGVuZGVkLgogCiBTb21ldGltZXMgaXQgdHVybnMgb3V0IHRoYXQgZXZlbiB3aGVuIGEgZGV2aWNlIGRvZXMgd29yayBva2F5IHdpdGgKLWF1dG9zdXNwZW5kIHRoZXJlIGFyZSBzdGlsbCBwcm9ibGVtcy4gIEZvciBleGFtcGxlLCB0aGVyZSBhcmUKLWV4cGVyaW1lbnRhbCBwYXRjaGVzIGFkZGluZyBhdXRvc3VzcGVuZCBzdXBwb3J0IHRvIHRoZSB1c2JoaWQgZHJpdmVyLAotd2hpY2ggbWFuYWdlcyBrZXlib2FyZHMgYW5kIG1pY2UsIGFtb25nIG90aGVyIHRoaW5ncy4gIFRlc3RzIHdpdGggYQotbnVtYmVyIG9mIGtleWJvYXJkcyBzaG93ZWQgdGhhdCB0eXBpbmcgb24gYSBzdXNwZW5kZWQga2V5Ym9hcmQsIHdoaWxlCi1jYXVzaW5nIHRoZSBrZXlib2FyZCB0byBkbyBhIHJlbW90ZSB3YWtldXAgYWxsIHJpZ2h0LCB3b3VsZAotbm9uZXRoZWxlc3MgZnJlcXVlbnRseSByZXN1bHQgaW4gbG9zdCBrZXlzdHJva2VzLiAgVGVzdHMgd2l0aCBtaWNlCi1zaG93ZWQgdGhhdCBzb21lIG9mIHRoZW0gd291bGQgaXNzdWUgYSByZW1vdGUtd2FrZXVwIHJlcXVlc3QgaW4KLXJlc3BvbnNlIHRvIGJ1dHRvbiBwcmVzc2VzIGJ1dCBub3QgdG8gbW90aW9uLCBhbmQgc29tZSBpbiByZXNwb25zZSB0bwotbmVpdGhlci4KK2F1dG9zdXNwZW5kIHRoZXJlIGFyZSBzdGlsbCBwcm9ibGVtcy4gIEZvciBleGFtcGxlLCB0aGUgdXNiaGlkIGRyaXZlciwKK3doaWNoIG1hbmFnZXMga2V5Ym9hcmRzIGFuZCBtaWNlLCBoYXMgYXV0b3N1c3BlbmQgc3VwcG9ydC4gIFRlc3RzIHdpdGgKK2EgbnVtYmVyIG9mIGtleWJvYXJkcyBzaG93IHRoYXQgdHlwaW5nIG9uIGEgc3VzcGVuZGVkIGtleWJvYXJkLCB3aGlsZQorY2F1c2luZyB0aGUga2V5Ym9hcmQgdG8gZG8gYSByZW1vdGUgd2FrZXVwIGFsbCByaWdodCwgd2lsbCBub25ldGhlbGVzcworZnJlcXVlbnRseSByZXN1bHQgaW4gbG9zdCBrZXlzdHJva2VzLiAgVGVzdHMgd2l0aCBtaWNlIHNob3cgdGhhdCBzb21lCitvZiB0aGVtIHdpbGwgaXNzdWUgYSByZW1vdGUtd2FrZXVwIHJlcXVlc3QgaW4gcmVzcG9uc2UgdG8gYnV0dG9uCitwcmVzc2VzIGJ1dCBub3QgdG8gbW90aW9uLCBhbmQgc29tZSBpbiByZXNwb25zZSB0byBuZWl0aGVyLgogCiBUaGUga2VybmVsIHdpbGwgbm90IHByZXZlbnQgeW91IGZyb20gZW5hYmxpbmcgYXV0b3N1c3BlbmQgb24gZGV2aWNlcwogdGhhdCBjYW4ndCBoYW5kbGUgaXQuICBJdCBpcyBldmVuIHBvc3NpYmxlIGluIHRoZW9yeSB0byBkYW1hZ2UgYQotZGV2aWNlIGJ5IHN1c3BlbmRpbmcgaXQgYXQgdGhlIHdyb25nIHRpbWUgLS0gZm9yIGV4YW1wbGUsIHN1c3BlbmRpbmcgYQotVVNCIGhhcmQgZGlzayBtaWdodCBjYXVzZSBpdCB0byBzcGluIGRvd24gd2l0aG91dCBwYXJraW5nIHRoZSBoZWFkcy4KLShIaWdobHkgdW5saWtlbHksIGJ1dCBwb3NzaWJsZS4pICBUYWtlIGNhcmUuCitkZXZpY2UgYnkgc3VzcGVuZGluZyBpdCBhdCB0aGUgd3JvbmcgdGltZS4gIChIaWdobHkgdW5saWtlbHksIGJ1dAorcG9zc2libGUuKSAgVGFrZSBjYXJlLgogCiAKIAlUaGUgZHJpdmVyIGludGVyZmFjZSBmb3IgUG93ZXIgTWFuYWdlbWVudApAQCAtMzM2LDEwICszNDIsNiBAQAogdGhlbiB0aGUgaW50ZXJmYWNlIGlzIGNvbnNpZGVyZWQgdG8gYmUgaWRsZSwgYW5kIHRoZSBrZXJuZWwgbWF5CiBhdXRvc3VzcGVuZCB0aGUgZGV2aWNlLgogCi0oVGhlcmUgaXMgYSBzaW1pbGFyIHVzYWdlIGNvdW50ZXIgZmllbGQgaW4gc3RydWN0IHVzYl9kZXZpY2UsCi1hc3NvY2lhdGVkIHdpdGggdGhlIGRldmljZSBpdHNlbGYgcmF0aGVyIHRoYW4gYW55IG9mIGl0cyBpbnRlcmZhY2VzLgotVGhpcyBjb3VudGVyIGlzIHVzZWQgb25seSBieSB0aGUgVVNCIGNvcmUuKQotCiBEcml2ZXJzIG5lZWQgbm90IGJlIGNvbmNlcm5lZCBhYm91dCBiYWxhbmNpbmcgY2hhbmdlcyB0byB0aGUgdXNhZ2UKIGNvdW50ZXI7IHRoZSBVU0IgY29yZSB3aWxsIHVuZG8gYW55IHJlbWFpbmluZyAiZ2V0InMgd2hlbiBhIGRyaXZlcgogaXMgdW5ib3VuZCBmcm9tIGl0cyBpbnRlcmZhY2UuICBBcyBhIGNvcm9sbGFyeSwgZHJpdmVycyBtdXN0IG5vdCBjYWxsCkBAIC00MDksMTEgKzQxMSwxMSBAQAogYXV0b3N1c3BlbmRpbmcgYSBrZXlib2FyZCBpZiB0aGUgdXNlciBjYW4ndCBjYXVzZSB0aGUga2V5Ym9hcmQgdG8gZG8gYQogcmVtb3RlIHdha2V1cCBieSB0eXBpbmcgb24gaXQuICBJZiB0aGUgZHJpdmVyIHNldHMKIGludGYtPm5lZWRzX3JlbW90ZV93YWtldXAgdG8gMSwgdGhlIGtlcm5lbCB3b24ndCBhdXRvc3VzcGVuZCB0aGUKLWRldmljZSBpZiByZW1vdGUgd2FrZXVwIGlzbid0IGF2YWlsYWJsZSBvciBoYXMgYmVlbiBkaXNhYmxlZCB0aHJvdWdoCi10aGUgcG93ZXIvd2FrZXVwIGF0dHJpYnV0ZS4gIChJZiB0aGUgZGV2aWNlIGlzIGFscmVhZHkgYXV0b3N1c3BlbmRlZCwKLXRob3VnaCwgc2V0dGluZyB0aGlzIGZsYWcgd29uJ3QgY2F1c2UgdGhlIGtlcm5lbCB0byBhdXRvcmVzdW1lIGl0LgotTm9ybWFsbHkgYSBkcml2ZXIgd291bGQgc2V0IHRoaXMgZmxhZyBpbiBpdHMgcHJvYmUgbWV0aG9kLCBhdCB3aGljaAotdGltZSB0aGUgZGV2aWNlIGlzIGd1YXJhbnRlZWQgbm90IHRvIGJlIGF1dG9zdXNwZW5kZWQuKQorZGV2aWNlIGlmIHJlbW90ZSB3YWtldXAgaXNuJ3QgYXZhaWxhYmxlLiAgKElmIHRoZSBkZXZpY2UgaXMgYWxyZWFkeQorYXV0b3N1c3BlbmRlZCwgdGhvdWdoLCBzZXR0aW5nIHRoaXMgZmxhZyB3b24ndCBjYXVzZSB0aGUga2VybmVsIHRvCithdXRvcmVzdW1lIGl0LiAgTm9ybWFsbHkgYSBkcml2ZXIgd291bGQgc2V0IHRoaXMgZmxhZyBpbiBpdHMgcHJvYmUKK21ldGhvZCwgYXQgd2hpY2ggdGltZSB0aGUgZGV2aWNlIGlzIGd1YXJhbnRlZWQgbm90IHRvIGJlCithdXRvc3VzcGVuZGVkLikKIAogSWYgYSBkcml2ZXIgZG9lcyBpdHMgSS9PIGFzeW5jaHJvbm91c2x5IGluIGludGVycnVwdCBjb250ZXh0LCBpdAogc2hvdWxkIGNhbGwgdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlX2FzeW5jKCkgYmVmb3JlIHN0YXJ0aW5nIG91dHB1dCBhbmQKQEAgLTQyMiwyMCArNDI0LDE5IEBACiAKIAl1c2JfbWFya19sYXN0X2J1c3koc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpOwogCi1pbiB0aGUgZXZlbnQgaGFuZGxlci4gIFRoaXMgc2V0cyB1ZGV2LT5sYXN0X2J1c3kgdG8gdGhlIGN1cnJlbnQgdGltZS4KLXVkZXYtPmxhc3RfYnVzeSBpcyB0aGUgZmllbGQgdXNlZCBmb3IgaWRsZS1kZWxheSBjYWxjdWxhdGlvbnM7Ci11cGRhdGluZyBpdCB3aWxsIGNhdXNlIGFueSBwZW5kaW5nIGF1dG9zdXNwZW5kIHRvIGJlIG1vdmVkIGJhY2suICBNb3N0Ci1vZiB0aGUgdXNiX2F1dG9wbV8qIHJvdXRpbmVzIHdpbGwgYWxzbyBzZXQgdGhlIGxhc3RfYnVzeSBmaWVsZCB0byB0aGUKLWN1cnJlbnQgdGltZS4KK2luIHRoZSBldmVudCBoYW5kbGVyLiAgVGhpcyB0ZWxscyB0aGUgUE0gY29yZSB0aGF0IHRoZSBkZXZpY2Ugd2FzIGp1c3QKK2J1c3kgYW5kIHRoZXJlZm9yZSB0aGUgbmV4dCBhdXRvc3VzcGVuZCBpZGxlLWRlbGF5IGV4cGlyYXRpb24gc2hvdWxkCitiZSBwdXNoZWQgYmFjay4gIE1hbnkgb2YgdGhlIHVzYl9hdXRvcG1fKiByb3V0aW5lcyBhbHNvIG1ha2UgdGhpcyBjYWxsLAorc28gZHJpdmVycyBuZWVkIHRvIHdvcnJ5IG9ubHkgd2hlbiBpbnRlcnJ1cHQtZHJpdmVuIGlucHV0IGFycml2ZXMuCiAKIEFzeW5jaHJvbm91cyBvcGVyYXRpb24gaXMgYWx3YXlzIHN1YmplY3QgdG8gcmFjZXMuICBGb3IgZXhhbXBsZSwgYQotZHJpdmVyIG1heSBjYWxsIG9uZSBvZiB0aGUgdXNiX2F1dG9wbV8qX2ludGVyZmFjZV9hc3luYygpIHJvdXRpbmVzIGF0Ci1hIHRpbWUgd2hlbiB0aGUgY29yZSBoYXMganVzdCBmaW5pc2hlZCBkZWNpZGluZyB0aGUgZGV2aWNlIGhhcyBiZWVuCi1pZGxlIGZvciBsb25nIGVub3VnaCBidXQgbm90IHlldCBnb3R0ZW4gYXJvdW5kIHRvIGNhbGxpbmcgdGhlIGRyaXZlcidzCi1zdXNwZW5kIG1ldGhvZC4gIFRoZSBzdXNwZW5kIG1ldGhvZCBtdXN0IGJlIHJlc3BvbnNpYmxlIGZvcgotc3luY2hyb25pemluZyB3aXRoIHRoZSBvdXRwdXQgcmVxdWVzdCByb3V0aW5lIGFuZCB0aGUgVVJCIGNvbXBsZXRpb24KLWhhbmRsZXI7IGl0IHNob3VsZCBjYXVzZSBhdXRvc3VzcGVuZHMgdG8gZmFpbCB3aXRoIC1FQlVTWSBpZiB0aGUKLWRyaXZlciBuZWVkcyB0byB1c2UgdGhlIGRldmljZS4KK2RyaXZlciBtYXkgY2FsbCB0aGUgdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlX2FzeW5jKCkgcm91dGluZSBhdCBhIHRpbWUKK3doZW4gdGhlIGNvcmUgaGFzIGp1c3QgZmluaXNoZWQgZGVjaWRpbmcgdGhlIGRldmljZSBoYXMgYmVlbiBpZGxlIGZvcgorbG9uZyBlbm91Z2ggYnV0IG5vdCB5ZXQgZ290dGVuIGFyb3VuZCB0byBjYWxsaW5nIHRoZSBkcml2ZXIncyBzdXNwZW5kCittZXRob2QuICBUaGUgc3VzcGVuZCBtZXRob2QgbXVzdCBiZSByZXNwb25zaWJsZSBmb3Igc3luY2hyb25pemluZyB3aXRoCit0aGUgSS9PIHJlcXVlc3Qgcm91dGluZSBhbmQgdGhlIFVSQiBjb21wbGV0aW9uIGhhbmRsZXI7IGl0IHNob3VsZAorY2F1c2UgYXV0b3N1c3BlbmRzIHRvIGZhaWwgd2l0aCAtRUJVU1kgaWYgdGhlIGRyaXZlciBuZWVkcyB0byB1c2UgdGhlCitkZXZpY2UuCiAKIEV4dGVybmFsIHN1c3BlbmQgY2FsbHMgc2hvdWxkIG5ldmVyIGJlIGFsbG93ZWQgdG8gZmFpbCBpbiB0aGlzIHdheSwKIG9ubHkgYXV0b3N1c3BlbmQgY2FsbHMuICBUaGUgZHJpdmVyIGNhbiB0ZWxsIHRoZW0gYXBhcnQgYnkgY2hlY2tpbmcKQEAgLTQ3Miw3ICs0NzMsOSBAQAogb2NjdXJzLiAgU2luY2Ugc3lzdGVtIHN1c3BlbmRzIGFyZSBzdXBwb3NlZCB0byBiZSBhcyB0cmFuc3BhcmVudCBhcwogcG9zc2libGUsIHRoZSBkZXZpY2Ugc2hvdWxkIHJlbWFpbiBzdXNwZW5kZWQgZm9sbG93aW5nIHRoZSBzeXN0ZW0KIHJlc3VtZS4gIEJ1dCB0aGlzIHRoZW9yeSBtYXkgbm90IHdvcmsgb3V0IHdlbGwgaW4gcHJhY3RpY2U7IG92ZXIgdGltZQotdGhlIGtlcm5lbCdzIGJlaGF2aW9yIGluIHRoaXMgcmVnYXJkIGhhcyBjaGFuZ2VkLgordGhlIGtlcm5lbCdzIGJlaGF2aW9yIGluIHRoaXMgcmVnYXJkIGhhcyBjaGFuZ2VkLiAgQXMgb2YgMi42LjM3IHRoZQorcG9saWN5IGlzIHRvIHJlc3VtZSBhbGwgZGV2aWNlcyBkdXJpbmcgYSBzeXN0ZW0gcmVzdW1lIGFuZCBsZXQgdGhlbQoraGFuZGxlIHRoZWlyIG93biBydW50aW1lIHN1c3BlbmRzIGFmdGVyd2FyZC4KIAogU2Vjb25kbHksIGEgZHluYW1pYyBwb3dlci1tYW5hZ2VtZW50IGV2ZW50IG1heSBvY2N1ciBhcyBhIHN5c3RlbQogc3VzcGVuZCBpcyB1bmRlcndheS4gIFRoZSB3aW5kb3cgZm9yIHRoaXMgaXMgc2hvcnQsIHNpbmNlIHN5c3RlbQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5lbTI4eHggYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmVtMjh4eAppbmRleCBhYzI2MTZhLi4zMWI0ODU3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmVtMjh4eAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmVtMjh4eApAQCAtMSw1ICsxLDUgQEAKICAgMCAtPiBVbmtub3duIEVNMjgwMCB2aWRlbyBncmFiYmVyICAgICAgICAgICAgIChlbTI4MDApICAgICAgICBbZWIxYToyODAwXQotICAxIC0+IFVua25vd24gRU0yNzUwLzI4eHggdmlkZW8gZ3JhYmJlciAgICAgICAgKGVtMjgyMC9lbTI4NDApIFtlYjFhOjI3MTAsZWIxYToyODIwLGViMWE6MjgyMSxlYjFhOjI4NjAsZWIxYToyODYxLGViMWE6Mjg2MixlYjFhOjI4NjMsZWIxYToyODcwLGViMWE6Mjg4MSxlYjFhOjI4ODMsZWIxYToyODY4XQorICAxIC0+IFVua25vd24gRU0yNzUwLzI4eHggdmlkZW8gZ3JhYmJlciAgICAgICAgKGVtMjgyMC9lbTI4NDApIFtlYjFhOjI3MTAsZWIxYToyODIwLGViMWE6MjgyMSxlYjFhOjI4NjAsZWIxYToyODYxLGViMWE6Mjg2MixlYjFhOjI4NjMsZWIxYToyODcwLGViMWE6Mjg4MSxlYjFhOjI4ODMsZWIxYToyODY4LGViMWE6Mjg3NV0KICAgMiAtPiBUZXJyYXRlYyBDaW5lcmd5IDI1MCBVU0IgICAgICAgICAgICAgICAgIChlbTI4MjAvZW0yODQwKSBbMGNjZDowMDM2XQogICAzIC0+IFBpbm5hY2xlIFBDVFYgVVNCIDIgICAgICAgICAgICAgICAgICAgICAgKGVtMjgyMC9lbTI4NDApIFsyMzA0OjAyMDhdCiAgIDQgLT4gSGF1cHBhdWdlIFdpblRWIFVTQiAyICAgICAgICAgICAgICAgICAgICAoZW0yODIwL2VtMjg0MCkgWzIwNDA6NDIwMCwyMDQwOjQyMDFdCkBAIC05LDcgKzksNyBAQAogICA4IC0+IEt3b3JsZCBVU0IyODAwICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVtMjgwMCkKICAgOSAtPiBQaW5uYWNsZSBEYXp6bGUgRFZDIDkwLzEwMC8xMDEvMTA3IC8gS2Fpc2VyIEJhYXMgVmlkZW8gdG8gRFZEIG1ha2VyICAoZW0yODIwL2VtMjg0MCkgWzFiODA6ZTMwMiwxYjgwOmUzMDQsMjMwNDowMjA3LDIzMDQ6MDIxYV0KICAxMCAtPiBIYXVwcGF1Z2UgV2luVFYgSFZSIDkwMCAgICAgICAgICAgICAgICAgIChlbTI4ODApICAgICAgICBbMjA0MDo2NTAwXQotIDExIC0+IFRlcnJhdGVjIEh5YnJpZCBYUyAgICAgICAgICAgICAgICAgICAgICAgKGVtMjg4MCkgICAgICAgIFswY2NkOjAwNDJdCisgMTEgLT4gVGVycmF0ZWMgSHlicmlkIFhTICAgICAgICAgICAgICAgICAgICAgICAoZW0yODgwKQogIDEyIC0+IEt3b3JsZCBQVlIgVFYgMjgwMCBSRiAgICAgICAgICAgICAgICAgICAgKGVtMjgyMC9lbTI4NDApCiAgMTMgLT4gVGVycmF0ZWMgUHJvZGlneSBYUyAgICAgICAgICAgICAgICAgICAgICAoZW0yODgwKSAgICAgICAgWzBjY2Q6MDA0N10KICAxNCAtPiBTSUlHIEFWVHVuZXItUFZSIC8gUGl4ZWx2aWV3IFByb2xpbmsgUGxheVRWIFVTQiAyLjAgKGVtMjgyMC9lbTI4NDApCkBAIC01Myw3ICs1Myw3IEBACiAgNTIgLT4gRE5UIERBMiBIeWJyaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAoZW0yODgxKQogIDUzIC0+IFBpbm5hY2xlIEh5YnJpZCBQcm8gICAgICAgICAgICAgICAgICAgICAgKGVtMjg4MSkKICA1NCAtPiBLd29ybGQgVlMtRFZCLVQgMzIzVVIgICAgICAgICAgICAgICAgICAgIChlbTI4ODIpICAgICAgICBbZWIxYTplMzIzXQotIDU1IC0+IFRlcnJhdGVjIEh5YnJpZCBYUyAoZW0yODgyKSAgICAgICAgICAgICAgKGVtMjg4MikgICAgICAgIFswY2NkOjAwNWVdCisgNTUgLT4gVGVycmF0ZWMgQ2lubmVyZ3kgSHlicmlkIFQgVVNCIFhTIChlbTI4ODIpIChlbTI4ODIpICAgICAgICBbMGNjZDowMDVlLDBjY2Q6MDA0Ml0KICA1NiAtPiBQaW5uYWNsZSBIeWJyaWQgUHJvICgyKSAgICAgICAgICAgICAgICAgIChlbTI4ODIpICAgICAgICBbMjMwNDowMjI2XQogIDU3IC0+IEt3b3JsZCBQbHVzVFYgSEQgSHlicmlkIDMzMCAgICAgICAgICAgICAgKGVtMjg4MykgICAgICAgIFtlYjFhOmEzMTZdCiAgNTggLT4gQ29tcHJvIFZpZGVvTWF0ZSBGb3JZb3UvU3RlcmVvICAgICAgICAgICAoZW0yODIwL2VtMjg0MCkgWzE4NWI6MjA0MV0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1Quc2FhNzEzNCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1Quc2FhNzEzNAppbmRleCA4ZDlhZmM3Li42YjRjNzJkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnNhYTcxMzQKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5zYWE3MTM0CkBAIC0xODAsMyArMTgwLDUgQEAKIDE3OSAtPiBCZWhvbGRlciBCZWhvbGRUViBBNyAgICAgICAgICAgICAgICAgICAgIFs1YWNlOjcwOTBdCiAxODAgLT4gQXZlcm1lZGlhIFBDSSBNNzMzQSAgICAgICAgICAgICAgICAgICAgICBbMTQ2MTo0MTU1LDE0NjE6NDI1NV0KIDE4MSAtPiBUZWNob1RyZW5kIFRULWJ1ZGdldCBULTMwMDAgICAgICAgICAgICAgIFsxM2MyOjI4MDRdCisxODIgLT4gS3dvcmxkIFBDSSBTQlRWRC9JU0RCLVQgRnVsbC1TZWcgSHlicmlkICBbMTdkZTpiMTM2XQorMTgzIC0+IENvbXBybyBWaWRlb01hdGUgVmlzdGEgTTFGICAgICAgICAgICAgICAgWzE4NWI6YzkwMF0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvTWFrZWZpbGUgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZWQwZTk4Li4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLSMga2J1aWxkIHRyaWNrIHRvIGF2b2lkIGxpbmtlciBlcnJvci4gQ2FuIGJlIG9taXR0ZWQgaWYgYSBtb2R1bGUgaXMgYnVpbHQuCi1vYmotIDo9IGR1bW15Lm8KLQotIyBMaXN0IG9mIHByb2dyYW1zIHRvIGJ1aWxkCi1ob3N0cHJvZ3MteSA6PSB2NGxncmFiCi0KLSMgVGVsbCBrYnVpbGQgdG8gYWx3YXlzIGJ1aWxkIHRoZSBwcm9ncmFtcwotYWx3YXlzIDo9ICQoaG9zdHByb2dzLXkpCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L1JFQURNRS5jcGlhIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9SRUFETUUuY3BpYQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGE3NDdmZS4uMDAwMDAwMAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L1JFQURNRS5jcGlhCisrKyAvZGV2L251bGwKQEAgLTEsMTkxICswLDAgQEAKLVRoaXMgaXMgYSBkcml2ZXIgZm9yIHRoZSBDUGlBIFBQQzIgZHJpdmVuIHBhcmFsbGVsIGNvbm5lY3RlZAotQ2FtZXJhLiBGb3IgZXhhbXBsZSB0aGUgQ3JlYXRpdmUgV2ViY2FtSUkgaXMgQ1BpQSBkcml2ZW4uCi0KLSAgICkgWzFdUGV0ZXIgUHJlZ2xlciwgTGlueiAyMDAwLCBwdWJsaXNoZWQgdW5kZXIgdGhlIFsyXUdOVSBHUEwKLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVVTQUdFOgotCi1HZW5lcmFsOgotPT09PT09PT0KLQotMSkgTWFrZSBzdXJlIHlvdSBoYXZlIGNyZWF0ZWQgdGhlIHZpZGVvIGRldmljZXMgKC9kZXYvdmlkZW8qKToKLQotLSBpZiB5b3UgaGF2ZSBhIHJlY2VudCBNQUtFREVWIGRvIGEgJ2NkIC9kZXY7Li9NQUtFREVWIHZpZGVvJwotLSBvdGhlcndpc2UgZG8gYToKLQotY2QgL2RldgotbWtub2QgdmlkZW8wIGMgODEgMAotbG4gLXMgdmlkZW8wIHZpZGVvCi0KLTIpIENvbXBpbGUgdGhlIGtlcm5lbCAoc2VlIGJlbG93IGZvciB0aGUgbGlzdCBvZiBvcHRpb25zIHRvIHVzZSksCi0gICBjb25maWd1cmUgeW91ciBwYXJwb3J0IGFuZCByZWJvb3QuCi0KLTMpIElmIGFsbCB3b3JrZWQgd2VsbCB5b3Ugc2hvdWxkIGdldCBtZXNzYWdlcyBzaW1pbGFyCi0gICB0byB0aGUgZm9sbG93aW5nICh5b3VyIHZlcnNpb25zIG1heSBiZSBkaWZmZXJlbnQpIG9uIHRoZSBjb25zb2xlOgotCi1WNEwtRHJpdmVyIGZvciBWaXNpb24gQ1BpQSBiYXNlZCBjYW1lcmFzIHYwLjcuNAotcGFycG9ydDA6IHJlYWQyIHRpbWVvdXQuCi1wYXJwb3J0MDogTXVsdGltZWRpYSBkZXZpY2UsIFZMU0kgVmlzaW9uIEx0ZCBQUEMyCi1QYXJhbGxlbCBwb3J0IGRyaXZlciBmb3IgVmlzaW9uIENQaUEgYmFzZWQgY2FtZXJhCi0gIENQSUEgVmVyc2lvbjogMS4yMCAoMi4wKQotICBDUElBIFBuUC1JRDogMDU1MzowMDAyOjAxMDAKLSAgVlAtVmVyc2lvbjogMS4wIDAxMDAKLSAgMSBjYW1lcmEocykgZm91bmQKLQotCi1BcyBtb2R1bGVzOgotPT09PT09PT09PT0KLQotTWFrZSBzdXJlIHlvdSBoYXZlIHNlbGVjdGVkIHRoZSBmb2xsb3dpbmcga2VybmVsIG9wdGlvbnMgKHlvdSBjYW4KLXNlbGVjdCBhbGwgc3R1ZmYgYXMgbW9kdWxlcyk6Ci0KLVRoZSBjcGlhLXN0dWZmIGlzIGluIHRoZSBzZWN0aW9uICdDaGFyYWN0ZXIgZGV2aWNlcyAtPiBWaWRlbyBGb3IgTGludXgnLgotCi1DT05GSUdfUEFSUE9SVD1tCi1DT05GSUdfUEFSUE9SVF9QQz1tCi1DT05GSUdfUEFSUE9SVF9QQ19GSUZPPXkKLUNPTkZJR19QQVJQT1JUXzEyODQ9eQotQ09ORklHX1ZJREVPX0RFVj1tCi1DT05GSUdfVklERU9fQ1BJQT1tCi1DT05GSUdfVklERU9fQ1BJQV9QUD1tCi0KLUZvciBhdXRvbG9hZGluZyBvZiBhbGwgdGhvc2UgbW9kdWxlcyB5b3UgbmVlZCB0byB0ZWxsIG1vZHVsZS1pbml0LXRvb2xzCi1zb21lIHN0dWZmLiBBZGQgdGhlIGZvbGxvd2luZyBsaW5lIHRvIHlvdXIgbW9kdWxlLWluaXQtdG9vbHMgY29uZmlnLWZpbGUKLShlLmcuIC9ldGMvbW9kcHJvYmUuY29uZiBvciB3aGVyZXZlciB5b3VyIGRpc3RyaWJ1dGlvbiBkb2VzIHN0b3JlIHRoYXQKLXN0dWZmKToKLQotb3B0aW9ucyBwYXJwb3J0X3BjIGlvPTB4Mzc4IGlycT03IGRtYT0zCi1hbGlhcyBjaGFyLW1ham9yLTgxIGNwaWFfcHAKLQotVGhlIGZpcnN0IGxpbmUgdGVsbHMgdGhlIGRtYS9pcnEgY2hhbm5lbHMgdG8gdXNlLiBUaG9zZSBfbXVzdF8gbWF0Y2gKLXRoZSBzZXR0aW5ncyBvZiB5b3VyIEJJT1MuIERvIE5PVCBzaW1wbHkgdXNlIHRoZSB2YWx1ZXMgYWJvdmUuICBTZWUKLURvY3VtZW50YXRpb24vcGFycG9ydC50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcy4gVGhlIHNlY29uZAotbGluZSBhc3NvY2lhdGVzIHRoZSB2aWRlby1kZXZpY2UgZmlsZSB3aXRoIHRoZSBkcml2ZXIuIE9mIGNhdXNlIHlvdQotY2FuIGFsc28gbG9hZCB0aGUgbW9kdWxlcyBvbmNlIHVwb24gYm9vdCAodXN1YWxseSBkb25lIGluIC9ldGMvbW9kdWxlcykuCi0KLUxpbmtlZCBpbnRvIHRoZSBrZXJuZWw6Ci09PT09PT09PT09PT09PT09PT09PT09PQotCi1NYWtlIHN1cmUgeW91IGhhdmUgc2VsZWN0ZWQgdGhlIGZvbGxvd2luZyBrZXJuZWwgb3B0aW9ucy4gTm90ZSB0aGF0Ci15b3UgY2Fubm90IGNvbXBpbGUgdGhlIHBhcnBvcnQtc3R1ZmYgYXMgbW9kdWxlcyBhbmQgdGhlIGNwaWEtZHJpdmVyCi1zdGF0aWNhbGx5ICh0aGUgb3RoZXIgd2F5IHJvdW5kIGlzIG9rYXkgdGhvdWdoKS4KLQotVGhlIGNwaWEtc3R1ZmYgaXMgaW4gdGhlIHNlY3Rpb24gJ0NoYXJhY3RlciBkZXZpY2VzIC0+IFZpZGVvIEZvciBMaW51eCcuCi0KLUNPTkZJR19QQVJQT1JUPXkKLUNPTkZJR19QQVJQT1JUX1BDPXkKLUNPTkZJR19QQVJQT1JUX1BDX0ZJRk89eQotQ09ORklHX1BBUlBPUlRfMTI4ND15Ci1DT05GSUdfVklERU9fREVWPXkKLUNPTkZJR19WSURFT19DUElBPXkKLUNPTkZJR19WSURFT19DUElBX1BQPXkKLQotVG8gdXNlIERNQS9pcnEgeW91IHdpbGwgbmVlZCB0byB0ZWxsIHRoZSBrZXJuZWwgdXBvbiBib290IHRpbWUgdGhlCi1oYXJkd2FyZSBjb25maWd1cmF0aW9uIG9mIHRoZSBwYXJwb3J0LiBZb3UgY2FuIGdpdmUgdGhlIGJvb3QtcGFyYW1ldGVyCi1hdCB0aGUgTElMTy1wcm9tcHQgb3Igc3BlY2lmeSBpdCBpbiBsaWxvLmNvbmYuIEkgdXNlIHRoZSBmb2xsb3dpbmcKLWFwcGVuZC1saW5lIGluIGxpbG8uY29uZjoKLQotCWFwcGVuZD0icGFycG9ydD0weDM3OCw3LDMiCi0KLVNlZSBEb2N1bWVudGF0aW9uL3BhcnBvcnQudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZQotY29uZmlndXJhdGlvbiBvZiB0aGUgcGFycG9ydCBhbmQgdGhlIHZhbHVlcyBnaXZlbiBhYm92ZS4gRG8gbm90IHNpbXBseQotdXNlIHRoZSB2YWx1ZXMgZ2l2ZW4gYWJvdmUuCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRkVBVFVSRVM6Ci0KLS0gbW1hcC9yZWFkIHY0bC1pbnRlcmZhY2UgKGJ1dCBubyBvdmVybGF5KQotLSBpbWFnZSBmb3JtYXRzOiBDSUYvUUNJRiwgU0lGL1FTSUYsIHZhcmlvdXMgb3RoZXJzIHVzZWQgYnkgaXNhYmVsOwotICBub3RlOiBhbGwgc2l6ZXMgZXhjZXB0IENJRi9RQ0lGIGFyZSBpbXBsZW1lbnRlZCBieSBjbGlwcGluZywgaS5lLgotICBwaXhlbHMgYXJlIG5vdCB1cGxvYWRlZCBmcm9tIHRoZSBjYW1lcmEKLS0gcGFsZXR0ZXM6IFZJREVPX1BBTEVUVEVfR1JBWSwgVklERU9fUEFMRVRURV9SR0I1NjUsIFZJREVPX1BBTEVUVEVfUkdCNTU1LAotICBWSURFT19QQUxFVFRFX1JHQjI0LCBWSURFT19QQUxFVFRFX1JHQjMyLCBWSURFT19QQUxFVFRFX1lVWVYsCi0gIFZJREVPX1BBTEVUVEVfVVlWWSwgVklERU9fUEFMRVRURV9ZVVY0MjIKLS0gc3RhdGUgaW5mb3JtYXRpb24gKGNvbG9yIGJhbGFuY2UsIGV4cG9zdXJlLCAuLi4pIGlzIHByZXNlcnZlZCBiZXR3ZWVuCi0gIGRldmljZSBvcGVucwotLSBjb21wbGV0ZSBjb250cm9sIG92ZXIgY2FtZXJhIHZpYSBwcm9jLWludGVyZmFjZSAoX2FsbF8gY2FtZXJhIHNldHRpbmdzIGFyZQotICBzdXBwb3J0ZWQpLCB0aGVyZSBpcyBhbHNvIGEgcHl0aG9uLWd0ayBhcHBsaWNhdGlvbiBhdmFpbGFibGUgZm9yIHRoaXMgWzNdCi0tIHdvcmtzIHVuZGVyIFNNUCAoYnV0IHRoZSBkcml2ZXIgaXMgY29tcGxldGVseSBzZXJpYWxpemVkIGFuZCBzeW5jaHJvbm91cykKLSAgc28geW91IGdldCBubyBiZW5lZml0IGZyb20gU01QLCBidXQgYXQgbGVhc3QgaXQgZG9lcyBub3QgY3Jhc2ggeW91ciBib3gKLS0gbWlnaHQgd29yayBmb3Igbm9uLUludGVsIGFyY2hpdGVjdHVyZSwgbGV0IHVzIGtub3cgYWJvdXQgdGhpcwotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRFU1RFRCBBUFBMSUNBVElPTlM6Ci0KLS0gYSBzaW1wbGUgdGVzdCBhcHBsaWNhdGlvbiBiYXNlZCBvbiBYdCBpcyBhdmFpbGFibGUgYXQgWzNdCi0tIGFub3RoZXIgdGVzdC1hcHBsaWNhdGlvbiBiYXNlZCBvbiBncWNhbS0wLjQgKHVzZXMgR1RLKQotLSBncWNhbS0wLjYgc2hvdWxkIHdvcmsKLS0geGF3dHYtMy54IChhbHNvIHRoZSB3ZWJjYW0gc29mdHdhcmUpCi0tIHhhd3R2LTIuNDYKLS0gdzNjYW0gKGNnaS1pbnRlcmZhY2UgYW5kIHZpZGNhdCwgZS5nLiB5b3UgbWF5IHRyeSBvdXQgJ3ZpZGNhdCAgfHh2Ci0gIC1tYXhwZWN0IC1yb290IC1xdWl0ICtub3Jlc2V0cm9vdCAtcm1vZGUgNSAtJykKLS0gdmljLCB0aGUgTUJPTkUgdmlkZW8gY29uZmVyZW5jaW5nIHRvb2wgKHZlcnNpb24gMi44dWNsNC0xKQotLSBpc2FiZWwgM1I0YmV0YSAoYmFyZWx5IHdvcmtpbmcsIGJ1dCBBRkFJQ1QgYWxsIHRoZSBwcm9ibGVtcyBhcmUgb24KLSAgdGhlaXIgc2lkZSkKLS0gY2Ftc2Vydi0wLjQwCi0KLVNlZSBbM10gZm9yIHBvaW50ZXJzIHRvIHY0bC1hcHBsaWNhdGlvbnMuCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotS05PV04gUFJPQkxFTVM6Ci0KLS0gc29tZSBhcHBsaWNhdGlvbnMgZG8gbm90IGhhbmRsZSB0aGUgaW1hZ2UgZm9ybWF0IGNvcnJlY3RseSwgeW91IHdpbGwKLSAgc2VlIHN0cmFuZ2UgaG9yaXpvbnRhbCBzdHJpcGVzIGluc3RlYWQgb2YgYSBuaWNlIHBpY3R1cmUgLT4gbWFrZSBzdXJlCi0gIHlvdXIgYXBwbGljYXRpb24gZG9lcyB1c2UgYSBzdXBwb3J0ZWQgaW1hZ2Ugc2l6ZSBvciBxdWVyaWVzIHRoZSBkcml2ZXIKLSAgZm9yIHRoZSBhY3R1YWxseSB1c2VkIHNpemUgKHJlYXNvbiBiZWhpbmQgdGhpczogdGhlIGNhbWVyYSBjYW5ub3QKLSAgcHJvdmlkZSBhbnkgaW1hZ2UgZm9ybWF0LCBzbyBpZiBzaXplIE54TSBpcyByZXF1ZXN0ZWQgdGhlIGRyaXZlciB3aWxsCi0gIHVzZSBhIGZvcm1hdCB0byB0aGUgY2xvc2VzdCBmaXR0aW5nIE4xeE0xLCB0aGUgYXBwbGljYXRpb24gc2hvdWxkIG5vdwotICBxdWVyeSBmb3IgdGhpcyBncmFudGVkIHNpemUsIG1vc3QgYXBwbGljYXRpb25zIGRvIG5vdCkuCi0tIGFsbCB0aGUgdG9kbyA7KQotLSBpZiB0aGVyZSBpcyBub3QgZW5vdWdoIGxpZ2h0IGFuZCB0aGUgcGljdHVyZSBpcyB0b28gZGFyayB0cnkgdG8KLSAgYWRqdXN0IHRoZSBTZXRTZW5zb3JGUFMgc2V0dGluZywgYXV0b21hdGljIGZyYW1lIHJhdGUgYWRqdXN0bWVudAotICBoYXMgaXRzIHByaWNlCi0tIGRvIG5vdCB0cnkgb3V0IGlzYWJlbCAzUjRiZXRhIChidWlsdCAxMzUpLCB5b3Ugd2lsbCBiZSBkaXNhcHBvaW50ZWQKLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UT0RPOgotCi0tIG11bHRpcGxlIGNhbWVyYSBzdXBwb3J0IChzdHJ1Y3QgY2FtZXJhIG9yIHNvbWV0aGluZykgLSBUaGlzIHNob3VsZCB3b3JrLAotICBidXQgaGFzbid0IGJlZW4gdGVzdGVkIHlldC4KLS0gYXJjaGl0ZWN0dXJlIGluZGVwZW5kZW5jZT8KLS0gU01QLXNhZmUgYXN5bmNocm9ub3VzIG1tYXAgaW50ZXJmYWNlCi0tIG5pYmJsZSBtb2RlIGZvciBvbGQgcGFycG9ydCBpbnRlcmZhY2VzCi0tIHN0cmVhbWluZyBjYXB0dXJlLCB0aGlzIHNob3VsZCBnaXZlIGEgcGVyZm9ybWFuY2UgZ2FpbgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUlNUExFTUVOVEFUSU9OIE5PVEVTOgotCi1UaGUgY2FtZXJhIGNhbiBhY3QgaW4gdHdvIG1vZGVzLCBzdHJlYW1pbmcgb3IgZ3JhYmJpbmcuIFJpZ2h0IG5vdyBhCi1wb2xsaW5nIGdyYWItc2NoZW1lIGlzIHVzZWQuIE1heWJlIGludGVycnVwdCBkcml2ZW4gc3RyZWFtaW5nIHdpbGwgYmUKLXVzZWQgZm9yIGEgYXN5bmNocm9ub3VzIG1tYXAgaW50ZXJmYWNlIGluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2Ugb2YgdGhlCi1kcml2ZXIuIFRoaXMgbWlnaHQgZ2l2ZSBhIGJldHRlciBmcmFtZSByYXRlLgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRIQU5LUyAoaW4gbm8gcGFydGljdWxhciBvcmRlcik6Ci0KLS0gU2NvdHQgSi4gQmVydGluIDxzYmVydGluQG1pbmRzcHJpbmcuY29tPiBmb3IgY2xlYW51cHMsIHRoZSBwcm9jLWZpbGVzeXN0ZW0KLSAgYW5kIG11Y2ggbW9yZQotLSBIZW5yeSBCcnVjZSA8d2hiQHZ2bC5jby51az4gZm9yIHByb3ZpZGluZyBkZXZlbG9wZXJzIGluZm9ybWF0aW9uIGFib3V0Ci0gIHRoZSBDUGlBIGNoaXAsIEkgd2lzaCBhbGwgY29tcGFuaWVzIHdvdWxkIHRyZWF0IExpbnV4IGFzIHNlcmlvdXNseQotLSBLYXJvbHkgRXJkZWkgPEthcm9seS5FcmRlaUByaXNjLnVuaS1saW56LmFjLmF0PiBhbmQgUklTQy1MaW56IGZvciBiZWluZwotICBteSBib3NzIDspIHJlc3AuIG15IGVtcGxveWVyIGFuZCBmb3IgcHJvdmlkaW5nIG1lIHRoZSBoYXJkd2FyZSBhbmQKLSAgYWxsb3cgbWUgdG8gZGV2b3RlIHNvbWUgd29ya2luZyB0aW1lIHRvIHRoaXMgcHJvamVjdAotLSBNYW51ZWwgSi4gUGV0aXQgZGUgR2FicmllbCA8bXBldGl0QGRpdC51cG0uZXM+IGZvciBwcm92aWRpbmcgaGVscAotICB3aXRoIElzYWJlbCAoaHR0cDovL2lzYWJlbC5kaXQudXBtLmVzLykKLS0gQmFzIEh1aXNtYW4gPGJodWlzbUBjcy51dHdlbnRlLm5sPiBmb3Igd3JpdGluZyB0aGUgaW5pdGlhbCBwYXJwb3J0IGNvZGUKLS0gSmFybCBUb3RsYW5kIDxKYXJsLlRvdGxhbmRAYmRjLm5vPiBmb3Igc2V0dGluZyB1cCB0aGUgbWFpbGluZyBsaXN0Ci0gIGFuZCBtYWludGFpbmluZyB0aGUgd2ViLXNlcnZlclszXQotLSBDaHJpcyBXaGl0ZWZvcmQgPENocmlzQGluZm9ybWludGVyYWN0aXZlLmNvbT4gZm9yIGZpeGVzIHJlbGF0ZWQgdG8gdGhlCi0gIDEuMDIgZmlybXdhcmUKLS0gc3BlY2lhbCBrdWRvcyB0byBhbGwgdGhlIHRlc3RlciB3aG9zZSBtYWNoaW5lcyBjcmFzaGVkIGFuZC9vcgotICB3aWxsIGNyYXNoLiA6KQotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVJFRkVSRU5DRVMKLQotICAgMS4gaHR0cDovL3d3dy5yaXNjLnVuaS1saW56LmFjLmF0LwotICAgICAgbWFpbHRvOlBldGVyX1ByZWdsZXJAZW1haWwuY29tCi0gICAyLiBzZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgdG9wIGRpcmVjdG9yeSBvZiB0aGUga2VybmVsIHRyZWUKLSAgIDMuIGh0dHA6Ly93ZWJjYW0uc291cmNlZm9yZ2UubmV0LwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9ab3JhbiBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvWm9yYW4KaW5kZXggMDBlM2Y5Mi4uNjk5YjYwZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9ab3JhbgorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L1pvcmFuCkBAIC0zMjIsNzYgKzMyMiwxMSBAQAogCiA0LiBQcm9ncmFtbWluZyBpbnRlcmZhY2UKIAotVGhpcyBkcml2ZXIgY29uZm9ybXMgdG8gdmlkZW80bGludXggYW5kIHZpZGVvNGxpbnV4MiwgYm90aCBjYW4gYmUgdXNlZCB0bwotdXNlIHRoZSBkcml2ZXIuIFNpbmNlIHZpZGVvNGxpbnV4IGRpZG4ndCBwcm92aWRlIGFkZXF1YXRlIGNhbGxzIHRvIGZ1bGx5Ci11c2UgdGhlIGNhcmRzJyBmZWF0dXJlcywgd2UndmUgaW50cm9kdWNlZCBzZXZlcmFsIHByb2dyYW1taW5nIGV4dGVuc2lvbnMsCi13aGljaCBhcmUgY3VycmVudGx5IG9mZmljaWFsbHkgYWNjZXB0ZWQgaW4gdGhlIDIuNC54IGJyYW5jaCBvZiB0aGUga2VybmVsLgotVGhlc2UgZXh0ZW5zaW9ucyBhcmUga25vd24gYXMgdGhlIHY0bC9tanBlZyBleHRlbnNpb25zLiBTZWUgem9yYW4uaCBmb3IKLWRldGFpbHMgKHN0cnVjdHMvaW9jdGxzKS4KLQotSW5mb3JtYXRpb24gLSB2aWRlbzRsaW51eDoKLWh0dHA6Ly9saW51eC5ieXRlc2V4Lm9yZy92NGwyL0FQSS5odG1sCi1Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0FQSS5odG1sCi0vdXNyL2luY2x1ZGUvbGludXgvdmlkZW9kZXYuaAotCi1JbmZvcm1hdGlvbiAtIHZpZGVvNGxpbnV4L21qcGVnIGV4dGVuc2lvbnM6Ci0uL3pvcmFuLmgKLShhbHNvIHNlZSBiZWxvdykKLQotSW5mb3JtYXRpb24gLSB2aWRlbzRsaW51eDI6Ci1odHRwOi8vbGludXh0di5vcmcKLWh0dHA6Ly92NGwyc3BlYy5ieXRlc2V4Lm9yZy8KLS91c3IvaW5jbHVkZS9saW51eC92aWRlb2RldjIuaAotCi1Nb3JlIGluZm9ybWF0aW9uIG9uIHRoZSB2aWRlbzRsaW51eC9tanBlZyBleHRlbnNpb25zLCBieSBTZXJndWVpCi1NaXJpZG9ub3ZpIGFuZCBSYWluZXIgSm9oYW5uaToKLS0tCi1UaGUgaW9jdGxzIGZvciB0aGF0IGludGVyZmFjZSBhcmUgYXMgZm9sbG93czoKLQotQlVaSU9DX0dfUEFSQU1TCi1CVVpJT0NfU19QQVJBTVMKLQotR2V0IGFuZCBzZXQgdGhlIHBhcmFtZXRlcnMgb2YgdGhlIGJ1ei4gVGhlIHVzZXIgc2hvdWxkIGFsd2F5cyBkbyBhCi1CVVpJT0NfR19QQVJBTVMgKHdpdGggYSBzdHJ1Y3QgYnV6X3BhcmFtcykgdG8gb2J0YWluIHRoZSBkZWZhdWx0Ci1zZXR0aW5ncywgY2hhbmdlIHdoYXQgaGUgbGlrZXMgYW5kIHRoZW4gbWFrZSBhIEJVWklPQ19TX1BBUkFNUyBjYWxsLgotCi1CVVpJT0NfUkVRQlVGUwotCi1CZWZvcmUgYmVpbmcgYWJsZSB0byBjYXB0dXJlL3BsYXliYWNrLCB0aGUgdXNlciBoYXMgdG8gcmVxdWVzdAotdGhlIGJ1ZmZlcnMgaGUgaXMgd2FudGluZyB0byB1c2UuIEZpbGwgdGhlIHN0cnVjdHVyZQotem9yYW5fcmVxdWVzdGJ1ZmZlcnMgd2l0aCB0aGUgc2l6ZSAocmVjb21tZW5kZWQ6IDI1NioxMDI0KSBhbmQKLXRoZSBudW1iZXIgKHJlY29tbWVuZGVkIDMyIHVwIHRvIDI1NikuIFRoZXJlIGFyZSBubyBzdWNoIHJlc3RyaWN0aW9ucwotYXMgZm9yIHRoZSBWaWRlbyBmb3IgTGludXggYnVmZmVycywgeW91IHNob3VsZCBMRUFWRSBTVUZGSUNJRU5UCi1NRU1PUlkgZm9yIHlvdXIgc3lzdGVtIGhvd2V2ZXIsIGVsc2Ugc3RyYW5nZSB0aGluZ3Mgd2lsbCBoYXBwZW4gLi4uLgotT24gcmV0dXJuLCB0aGUgem9yYW5fcmVxdWVzdGJ1ZmZlcnMgc3RydWN0dXJlIGNvbnRhaW5zIG51bWJlciBhbmQKLXNpemUgb2YgdGhlIGFjdHVhbGx5IGFsbG9jYXRlZCBidWZmZXJzLgotWW91IHNob3VsZCB1c2UgdGhlc2UgbnVtYmVycyBmb3IgZG9pbmcgYSBtbWFwIG9mIHRoZSBidWZmZXJzCi1pbnRvIHRoZSB1c2VyIHNwYWNlLgotVGhlIEJVWklPQ19SRVFCVUZTIGlvY3RsIGFsc28gbWFrZXMgaXQgaGFwcGVuLCB0aGF0IHRoZSBuZXh0IG1tYXAKLW1hcHMgdGhlIE1KUEVHIGJ1ZmZlciBpbnN0ZWFkIG9mIHRoZSBWNEwgYnVmZmVycy4KLQotQlVaSU9DX1FCVUZfQ0FQVAotQlVaSU9DX1FCVUZfUExBWQotCi1RdWV1ZSBhIGJ1ZmZlciBmb3IgY2FwdHVyZSBvciBwbGF5YmFjay4gVGhlIGZpcnN0IGNhbGwgYWxzbyBzdGFydHMKLXN0cmVhbWluZyBjYXB0dXJlLiBXaGVuIHN0cmVhbWluZyBjYXB0dXJlIGlzIGdvaW5nIG9uLCB5b3UgbWF5Ci1vbmx5IHF1ZXVlIGZ1cnRoZXIgYnVmZmVycyBvciBpc3N1ZSBzeW5jcyB1bnRpbCBzdHJlYW1pbmcKLWNhcHR1cmUgaXMgc3dpdGNoZWQgb2ZmIGFnYWluIHdpdGggYSBhcmd1bWVudCBvZiAtMSB0bwotYSBCVVpJT0NfUUJVRl9DQVBUL0JVWklPQ19RQlVGX1BMQVkgaW9jdGwuCi0KLUJVWklPQ19TWU5DCi0KLUlzc3VlIHRoaXMgaW9jdGwgd2hlbiBhbGwgYnVmZmVycyBhcmUgcXVldWVkLiBUaGlzIGlvY3RsIHdpbGwKLWJsb2NrIHVudGlsIHRoZSBmaXJzdCBidWZmZXIgYmVjb21lcyBmcmVlIGZvciBzYXZpbmcgaXRzCi1kYXRhIHRvIGRpc2sgKGFmdGVyIEJVWklPQ19RQlVGX0NBUFQpIG9yIGZvciByZXVzZSAoYWZ0ZXIgQlVaSU9DX1FCVUZfUExBWSkuCi0KLUJVWklPQ19HX1NUQVRVUwotCi1HZXQgdGhlIHN0YXR1cyBvZiB0aGUgaW5wdXQgbGluZXMgKHZpZGVvIHNvdXJjZSBjb25uZWN0ZWQvbm9ybSkuCitUaGlzIGRyaXZlciBjb25mb3JtcyB0byB2aWRlbzRsaW51eDIuIFN1cHBvcnQgZm9yIFY0TDEgYW5kIGZvciB0aGUgY3VzdG9tCit6b3JhbiBpb2N0bHMgaGFzIGJlZW4gcmVtb3ZlZCBpbiBrZXJuZWwgMi42LjM4LgogCiBGb3IgcHJvZ3JhbW1pbmcgZXhhbXBsZSwgcGxlYXNlLCBsb29rIGF0IGxhdnJlYy5jIGFuZCBsYXZwbGF5LmMgY29kZSBpbgotbGF2dG9vbHMtMS4ycDIgcGFja2FnZSAoVVJMOiBodHRwOi8vd3d3LmNpY2VzZS5teC8pCi1hbmQgdGhlICdleGFtcGxlcycgZGlyZWN0b3J5IGluIHRoZSBvcmlnaW5hbCBCdXogZHJpdmVyIGRpc3RyaWJ1dGlvbi4KK3RoZSBNSlBFRy10b29scyAoaHR0cDovL21qcGVnLnNmLm5ldC8pLgogCiBBZGRpdGlvbmFsIG5vdGVzIGZvciBzb2Z0d2FyZSBkZXZlbG9wZXJzOgogCkBAIC00MDIsOSArMzM3LDYgQEAKICAgIHN0YW5kYXJkIGlzICJtb3JlIGNvbnN0YW50IiBmb3IgY3VycmVudCBjb3VudHJ5IHRoYW4gZ2VvbWV0cnkKICAgIHNldHRpbmdzIG9mIGEgdmFyaWV0eSBvZiBUViBjYXB0dXJlIGNhcmRzIHdoaWNoIG1heSB3b3JrIGluIElUVSBvcgogICAgc3F1YXJlIHBpeGVsIGZvcm1hdC4KLS0tCi1QbGVhc2Ugbm90ZSB0aGF0IGxhdnBsYXkvbGF2cmVjIGFyZSBhbHNvIGluY2x1ZGVkIGluIHRoZSBNSlBFRy10b29scwotKGh0dHA6Ly9tanBlZy5zZi5uZXQvKS4KIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9DYXJkcyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9DYXJkcwppbmRleCAxMjIxN2ZjLi5kYjgzM2NlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvQ2FyZHMKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L0NhcmRzCkBAIC00NjQsMTAgKzQ2NCw2IEBACiAtLS0tLS0tCiAgICBNdWx0aW1lZGlhIGVYdGVuc2lvbiBCb2FyZCAoTVhCKSAoU0FBNzE0NiwgU0FBNzExMSkKIAotU3RyYWRpcwotLS0tLS0tLQotICAgU0RNMjc1LFNETTI1MCxTRE0wMjYsU0RNMDI1IChTQUE3MTQ2LCBJQk1NUEVHMik6IE1QRUcyIGRlY29kZXIgb25seQotCiBQb3dlcmNvbG9yCiAtLS0tLS0tLS0tCiAgICBNVFY4NzgKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvZ3NwY2EudHh0IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9nc3BjYS50eHQKaW5kZXggNmE1NjJlZS4uMjYxNzc2ZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9nc3BjYS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9nc3BjYS50eHQKQEAgLTM2Niw2ICszNjYsNyBAQAogdmMwMzJ4CQkxN2VmOjQ4MDIJTGVub3ZvIFZjMDMyMytNSTEzMTBfU09DCiBwYWMyMDcJCTIwMDE6ZjExNQlELUxpbmsgRFNCLUMxMjAKIHNxOTA1YwkJMjc3MDo5MDUwCURpc25leSBwaXggbWljcm8gKENJRikKK3NxOTA1YwkJMjc3MDo5MDUxCUxlZ28gQmlvbmljbGUKIHNxOTA1YwkJMjc3MDo5MDUyCURpc25leSBwaXggbWljcm8gMiAoVkdBKQogc3E5MDVjCQkyNzcwOjkwNWMJQWxsIDExIGtub3duIGNhbWVyYXMgd2l0aCB0aGlzIElECiBzcTkwNQkJMjc3MDo5MTIwCUFsbCAyNCBrbm93biBjYW1lcmFzIHdpdGggdGhpcyBJRApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9tZXllLnR4dCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvbWV5ZS50eHQKaW5kZXggYmYzYWY1Zi4uMzRlMjg0MiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9tZXllLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L21leWUudHh0CkBAIC00NSw4ICs0NSw2IEBACiBtb2R1bGUgb3IgbWV5ZS48cGFyYW0+PTx2YWx1ZT4gb24gdGhlIGtlcm5lbCBib290IGxpbmUgd2hlbiBtZXllIGlzCiBzdGF0aWNhbGx5IGxpbmtlZCBpbnRvIHRoZSBrZXJuZWwpLiBUaG9zZSBvcHRpb25zIGFyZToKIAotCWZvcmNldjRsMToJZm9yY2UgdXNlIG9mIFY0TDEgQVBJIGluc3RlYWQgb2YgVjRMMgotCiAJZ2J1ZmZlcnM6CW51bWJlciBvZiBjYXB0dXJlIGJ1ZmZlcnMsIGRlZmF1bHQgaXMgMiAoMzIgbWF4KQogCiAJZ2J1ZnNpemU6CXNpemUgb2YgZWFjaCBjYXB0dXJlIGJ1ZmZlciwgZGVmYXVsdCBpcyA2MTQ0MDAKQEAgLTc5LDkgKzc3LDggQEAKIFByaXZhdGUgQVBJOgogLS0tLS0tLS0tLS0tCiAKLQlUaGUgZHJpdmVyIHN1cHBvcnRzIGZyYW1lIGdyYWJiaW5nIHdpdGggdGhlIHZpZGVvNGxpbnV4IEFQSQotCShlaXRoZXIgdjRsMSBvciB2NGwyKSwgc28gYWxsIHZpZGVvNGxpbnV4IHRvb2xzIChsaWtlIHhhd3R2KQotCXNob3VsZCB3b3JrIHdpdGggdGhpcyBkcml2ZXIuCisJVGhlIGRyaXZlciBzdXBwb3J0cyBmcmFtZSBncmFiYmluZyB3aXRoIHRoZSB2aWRlbzRsaW51eCBBUEksCisJc28gYWxsIHZpZGVvNGxpbnV4IHRvb2xzIChsaWtlIHhhd3R2KSBzaG91bGQgd29yayB3aXRoIHRoaXMgZHJpdmVyLgogCiAJQmVzaWRlcyB0aGUgdmlkZW80bGludXggaW50ZXJmYWNlLCB0aGUgZHJpdmVyIGhhcyBhIHByaXZhdGUgaW50ZXJmYWNlCiAJZm9yIGFjY2Vzc2luZyB0aGUgTW90aW9uIEV5ZSBleHRlbmRlZCBwYXJhbWV0ZXJzIChjYW1lcmEgc2hhcnBuZXNzLApAQCAtMTIzLDcgKzEyMCw0IEBACiBCdWdzIC8gVG9kbzoKIC0tLS0tLS0tLS0tLQogCi0JLSB0aGUgZHJpdmVyIGNvdWxkIGJlIG11Y2ggY2xlYW5lZCB1cCBieSByZW1vdmluZyB0aGUgdjRsMSBzdXBwb3J0LgotCSAgSG93ZXZlciwgdGhpcyBtZWFucyBhbGwgdjRsMS1vbmx5IGFwcGxpY2F0aW9ucyB3aWxsIHN0b3Agd29ya2luZy4KLQogCS0gJ21vdGlvbmV5ZScgc3RpbGwgdXNlcyB0aGUgbWV5ZSBwcml2YXRlIHY0bDEgQVBJIGV4dGVuc2lvbnMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3Y0bGdyYWIuYyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvdjRsZ3JhYi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOGRlZDE3Li4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvdjRsZ3JhYi5jCisrKyAvZGV2L251bGwKQEAgLTEsMjAxICswLDAgQEAKLS8qIFNpbXBsZSBWaWRlbzRMaW51eCBpbWFnZSBncmFiYmVyLiAqLwotLyoKLSAqCVZpZGVvNExpbnV4IERyaXZlciBUZXN0L0V4YW1wbGUgRnJhbWVncmFiYmluZyBQcm9ncmFtCi0gKgotICoJQ29tcGlsZSB3aXRoOgotICoJCWdjYyAtcyAtV2FsbCAtV3N0cmljdC1wcm90b3R5cGVzIHY0bGdyYWIuYyAtbyB2NGxncmFiCi0gKglVc2UgYXM6Ci0gKgkJdjRsZ3JhYiA+aW1hZ2UucHBtCi0gKgotICoJQ29weXJpZ2h0IChDKSAxOTk4LTA1LTAzLCBQaGlsIEJsdW5kZWxsIDxwaGlsYkBnbnUub3JnPgotICoJQ29waWVkIGZyb20gaHR0cDovL3d3dy50YXplbmRhLmRlbW9uLmNvLnVrL3BoaWwvdmdyYWJiZXIuYwotICoJd2l0aCBtaW5vciBtb2RpZmljYXRpb25zIChEYXZlIEZvcnJlc3QsIGRyZjVuQHZpcmdpbmlhLmVkdSkuCi0gKgotICoKLSAqCUZvciBzb21lIGNhbWVyYXMgeW91IG1heSBuZWVkIHRvIHByZS1sb2FkIGxpYnY0bCB0byBwZXJmb3JtCi0gKgl0aGUgbmVjZXNzYXJ5IGRlY29tcHJlc3Npb24sIGUuZy46Ci0gKgotICoJZXhwb3J0IExEX1BSRUxPQUQ9L3Vzci9saWIvbGlidjRsL3Y0bDFjb21wYXQuc28KLSAqCS4vdjRsZ3JhYiA+aW1hZ2UucHBtCi0gKgotICoJc2VlIGh0dHA6Ly9oYW5zZGVnb2VkZS5saXZlam91cm5hbC5jb20vMzYzNi5odG1sIGZvciBkZXRhaWxzLgotICoKLSAqLwotCi0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNpbmNsdWRlIDxmY250bC5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3lzL2lvY3RsLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+Ci0KLSNkZWZpbmUgVklERU9fREVWICIvZGV2L3ZpZGVvMCIKLQotLyogU3RvbGUgdGhpcyBmcm9tIHR2c2V0LmMgKi8KLQotI2RlZmluZSBSRUFEX1ZJREVPX1BJWEVMKGJ1ZiwgZm9ybWF0LCBkZXB0aCwgciwgZywgYikgICAgICAgICAgICAgICAgICAgXAoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCXN3aXRjaCAoZm9ybWF0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJY2FzZSBWSURFT19QQUxFVFRFX0dSRVk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCQlzd2l0Y2ggKGRlcHRoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCQl7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCQkJY2FzZSA0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJCQljYXNlIDY6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQkJCWNhc2UgODogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCQkJCShyKSA9IChnKSA9IChiKSA9ICgqYnVmKysgPDwgOCk7XAotCQkJCQlicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJCQkJCQkJCVwKLQkJCQljYXNlIDE2OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQkJCQkocikgPSAoZykgPSAoYikgPSAgICAgICAgICAgICAgIFwKLQkJCQkJCSooKHVuc2lnbmVkIHNob3J0ICopIGJ1Zik7ICAgICAgXAotCQkJCQlidWYgKz0gMjsgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJCQkJYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCQl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCQlicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCQkJCQkJCQlcCi0JCQkJCQkJCQlcCi0JCWNhc2UgVklERU9fUEFMRVRURV9SR0I1NjU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQl7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJCXVuc2lnbmVkIHNob3J0IHRtcCA9ICoodW5zaWduZWQgc2hvcnQgKilidWY7ICAgIFwKLQkJCShyKSA9IHRtcCYweEY4MDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJCShnKSA9ICh0bXA8PDUpJjB4RkMwMDsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJCShiKSA9ICh0bXA8PDExKSYweEY4MDA7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJCWJ1ZiArPSAyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCWJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQkJCQkJCQkJXAotCQljYXNlIFZJREVPX1BBTEVUVEVfUkdCNTU1OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJCShyKSA9IChidWZbMF0mMHhGOCk8PDg7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJCShnKSA9ICgoYnVmWzBdIDw8IDUgfCBidWZbMV0gPj4gMykmMHhGOCk8PDg7ICAgIFwKLQkJCShiKSA9ICgoYnVmWzFdIDw8IDIgKSAmIDB4RjgpPDw4OyAgICAgICAgICAgICAgIFwKLQkJCWJ1ZiArPSAyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJCWJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJCQkJCQkJCVwKLQkJY2FzZSBWSURFT19QQUxFVFRFX1JHQjI0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCQkocikgPSBidWZbMF0gPDwgODsgKGcpID0gYnVmWzFdIDw8IDg7ICAgICAgICAgICBcCi0JCQkoYikgPSBidWZbMl0gPDwgODsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCQlidWYgKz0gMzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCQlicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCQkJCQkJCQlcCi0JCWRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQkJZnByaW50ZihzdGRlcnIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQkJCSJGb3JtYXQgJWQgbm90IHlldCBzdXBwb3J0ZWRcbiIsICAgICAgICBcCi0JCQkJZm9ybWF0KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfQotCi1zdGF0aWMgaW50IGdldF9icmlnaHRuZXNzX2Fkaih1bnNpZ25lZCBjaGFyICppbWFnZSwgbG9uZyBzaXplLCBpbnQgKmJyaWdodG5lc3MpIHsKLSAgbG9uZyBpLCB0b3QgPSAwOwotICBmb3IgKGk9MDtpPHNpemUqMztpKyspCi0gICAgdG90ICs9IGltYWdlW2ldOwotICAqYnJpZ2h0bmVzcyA9ICgxMjggLSB0b3QvKHNpemUqMykpLzM7Ci0gIHJldHVybiAhKCh0b3QvKHNpemUqMykpID49IDEyNiAmJiAodG90LyhzaXplKjMpKSA8PSAxMzApOwotfQotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKiBhcmd2KQotewotICBpbnQgZmQgPSBvcGVuKFZJREVPX0RFViwgT19SRE9OTFkpLCBmOwotICBzdHJ1Y3QgdmlkZW9fY2FwYWJpbGl0eSBjYXA7Ci0gIHN0cnVjdCB2aWRlb193aW5kb3cgd2luOwotICBzdHJ1Y3QgdmlkZW9fcGljdHVyZSB2cGljOwotCi0gIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgKnNyYzsKLSAgaW50IGJwcCA9IDI0LCByID0gMCwgZyA9IDAsIGIgPSAwOwotICB1bnNpZ25lZCBpbnQgaSwgc3JjX2RlcHRoID0gMTY7Ci0KLSAgaWYgKGZkIDwgMCkgewotICAgIHBlcnJvcihWSURFT19ERVYpOwotICAgIGV4aXQoMSk7Ci0gIH0KLQotICBpZiAoaW9jdGwoZmQsIFZJRElPQ0dDQVAsICZjYXApIDwgMCkgewotICAgIHBlcnJvcigiVklESU9HQ0FQIik7Ci0gICAgZnByaW50ZihzdGRlcnIsICIoIiBWSURFT19ERVYgIiBub3QgYSB2aWRlbzRsaW51eCBkZXZpY2U/KVxuIik7Ci0gICAgY2xvc2UoZmQpOwotICAgIGV4aXQoMSk7Ci0gIH0KLQotICBpZiAoaW9jdGwoZmQsIFZJRElPQ0dXSU4sICZ3aW4pIDwgMCkgewotICAgIHBlcnJvcigiVklESU9DR1dJTiIpOwotICAgIGNsb3NlKGZkKTsKLSAgICBleGl0KDEpOwotICB9Ci0KLSAgaWYgKGlvY3RsKGZkLCBWSURJT0NHUElDVCwgJnZwaWMpIDwgMCkgewotICAgIHBlcnJvcigiVklESU9DR1BJQ1QiKTsKLSAgICBjbG9zZShmZCk7Ci0gICAgZXhpdCgxKTsKLSAgfQotCi0gIGlmIChjYXAudHlwZSAmIFZJRF9UWVBFX01PTk9DSFJPTUUpIHsKLSAgICB2cGljLmRlcHRoPTg7Ci0gICAgdnBpYy5wYWxldHRlPVZJREVPX1BBTEVUVEVfR1JFWTsgICAgLyogOGJpdCBncmV5ICovCi0gICAgaWYoaW9jdGwoZmQsIFZJRElPQ1NQSUNULCAmdnBpYykgPCAwKSB7Ci0gICAgICB2cGljLmRlcHRoPTY7Ci0gICAgICBpZihpb2N0bChmZCwgVklESU9DU1BJQ1QsICZ2cGljKSA8IDApIHsKLQl2cGljLmRlcHRoPTQ7Ci0JaWYoaW9jdGwoZmQsIFZJRElPQ1NQSUNULCAmdnBpYykgPCAwKSB7Ci0JICBmcHJpbnRmKHN0ZGVyciwgIlVuYWJsZSB0byBmaW5kIGEgc3VwcG9ydGVkIGNhcHR1cmUgZm9ybWF0LlxuIik7Ci0JICBjbG9zZShmZCk7Ci0JICBleGl0KDEpOwotCX0KLSAgICAgIH0KLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgdnBpYy5kZXB0aD0yNDsKLSAgICB2cGljLnBhbGV0dGU9VklERU9fUEFMRVRURV9SR0IyNDsKLQotICAgIGlmKGlvY3RsKGZkLCBWSURJT0NTUElDVCwgJnZwaWMpIDwgMCkgewotICAgICAgdnBpYy5wYWxldHRlPVZJREVPX1BBTEVUVEVfUkdCNTY1OwotICAgICAgdnBpYy5kZXB0aD0xNjsKLQotICAgICAgaWYoaW9jdGwoZmQsIFZJRElPQ1NQSUNULCAmdnBpYyk9PS0xKSB7Ci0JdnBpYy5wYWxldHRlPVZJREVPX1BBTEVUVEVfUkdCNTU1OwotCXZwaWMuZGVwdGg9MTU7Ci0KLQlpZihpb2N0bChmZCwgVklESU9DU1BJQ1QsICZ2cGljKT09LTEpIHsKLQkgIGZwcmludGYoc3RkZXJyLCAiVW5hYmxlIHRvIGZpbmQgYSBzdXBwb3J0ZWQgY2FwdHVyZSBmb3JtYXQuXG4iKTsKLQkgIHJldHVybiAtMTsKLQl9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgYnVmZmVyID0gbWFsbG9jKHdpbi53aWR0aCAqIHdpbi5oZWlnaHQgKiBicHApOwotICBpZiAoIWJ1ZmZlcikgewotICAgIGZwcmludGYoc3RkZXJyLCAiT3V0IG9mIG1lbW9yeS5cbiIpOwotICAgIGV4aXQoMSk7Ci0gIH0KLQotICBkbyB7Ci0gICAgaW50IG5ld2JyaWdodDsKLSAgICByZWFkKGZkLCBidWZmZXIsIHdpbi53aWR0aCAqIHdpbi5oZWlnaHQgKiBicHApOwotICAgIGYgPSBnZXRfYnJpZ2h0bmVzc19hZGooYnVmZmVyLCB3aW4ud2lkdGggKiB3aW4uaGVpZ2h0LCAmbmV3YnJpZ2h0KTsKLSAgICBpZiAoZikgewotICAgICAgdnBpYy5icmlnaHRuZXNzICs9IChuZXdicmlnaHQgPDwgOCk7Ci0gICAgICBpZihpb2N0bChmZCwgVklESU9DU1BJQ1QsICZ2cGljKT09LTEpIHsKLQlwZXJyb3IoIlZJRElPU1BJQ1QiKTsKLQlicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gIH0gd2hpbGUgKGYpOwotCi0gIGZwcmludGYoc3Rkb3V0LCAiUDZcbiVkICVkIDI1NVxuIiwgd2luLndpZHRoLCB3aW4uaGVpZ2h0KTsKLQotICBzcmMgPSBidWZmZXI7Ci0KLSAgZm9yIChpID0gMDsgaSA8IHdpbi53aWR0aCAqIHdpbi5oZWlnaHQ7IGkrKykgewotICAgIFJFQURfVklERU9fUElYRUwoc3JjLCB2cGljLnBhbGV0dGUsIHNyY19kZXB0aCwgciwgZywgYik7Ci0gICAgZnB1dGMocj4+OCwgc3Rkb3V0KTsKLSAgICBmcHV0YyhnPj44LCBzdGRvdXQpOwotICAgIGZwdXRjKGI+PjgsIHN0ZG91dCk7Ci0gIH0KLQotICBjbG9zZShmZCk7Ci0gIHJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC92aWRlb2J1ZiBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvdmlkZW9idWYKaW5kZXggMTdhMWY5YS4uMWQwMGQ3ZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC92aWRlb2J1ZgorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3ZpZGVvYnVmCkBAIC0yNDcsOCArMjQ3LDYgQEAKIAkJICAgICAgIGludCBub25ibG9ja2luZyk7CiAgICAgaW50IHZpZGVvYnVmX3N0cmVhbW9uKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSk7CiAgICAgaW50IHZpZGVvYnVmX3N0cmVhbW9mZihzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEpOwotICAgIGludCB2aWRlb2J1Zl9jZ21idWYoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLCBzdHJ1Y3QgdmlkZW9fbWJ1ZiAqbWJ1ZiwKLQkJCWludCBjb3VudCk7CiAKIFNvLCBmb3IgZXhhbXBsZSwgYSBWSURJT0NfUkVRQlVGUyBjYWxsIHR1cm5zIGludG8gYSBjYWxsIHRvIHRoZSBkcml2ZXIncwogdmlkaW9jX3JlcWJ1ZnMoKSBjYWxsYmFjayB3aGljaCwgaW4gdHVybiwgdXN1YWxseSBvbmx5IG5lZWRzIHRvIGxvY2F0ZSB0aGUKQEAgLTI1OCwxMCArMjU2LDcgQEAKIAogVGhlIHZpZGlvY19zdHJlYW1vbigpIGFuZCB2aWRpb2Nfc3RyZWFtb2ZmKCkgZnVuY3Rpb25zIHdpbGwgYmUgYSBiaXQgbW9yZQogY29tcGxleCwgb2YgY291cnNlLCBzaW5jZSB0aGV5IHdpbGwgYWxzbyBuZWVkIHRvIGRlYWwgd2l0aCBzdGFydGluZyBhbmQKLXN0b3BwaW5nIHRoZSBjYXB0dXJlIGVuZ2luZS4gIHZpZGVvYnVmX2NnbWJ1ZigpLCBjYWxsZWQgZnJvbSB0aGUgZHJpdmVyJ3MKLXZpZGlvY2dtYnVmKCkgZnVuY3Rpb24sIG9ubHkgZXhpc3RzIGlmIHRoZSBWNEwxIGNvbXBhdGliaWxpdHkgbW9kdWxlIGhhcwotYmVlbiBzZWxlY3RlZCB3aXRoIENPTkZJR19WSURFT19WNEwxX0NPTVBBVCwgc28gaXRzIHVzZSBtdXN0IGJlIHN1cnJvdW5kZWQKLXdpdGggI2lmZGVmIGRpcmVjdGl2ZXMuCitzdG9wcGluZyB0aGUgY2FwdHVyZSBlbmdpbmUuCiAKIEJ1ZmZlciBhbGxvY2F0aW9uCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24veDg2L2Jvb3QudHh0IGIvRG9jdW1lbnRhdGlvbi94ODYvYm9vdC50eHQKaW5kZXggMzBiNDNlMS4uYmRlYjgxYyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi94ODYvYm9vdC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi94ODYvYm9vdC50eHQKQEAgLTYwMCw2ICs2MDAsNyBAQAogICAweDAwMDAwMDAxCWxndWVzdAogICAweDAwMDAwMDAyCVhlbgogICAweDAwMDAwMDAzCU1vb3Jlc3Rvd24gTUlECisgIDB4MDAwMDAwMDQJQ0U0MTAwIFRWIFBsYXRmb3JtCiAKIEZpZWxkIG5hbWU6CWhhcmR3YXJlX3N1YmFyY2hfZGF0YQogVHlwZToJCXdyaXRlIChzdWJhcmNoLWRlcGVuZGVudCkKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggNzU4NWU5ZC4uMDNjNTE2YSAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKKysrIGIvTUFJTlRBSU5FUlMKQEAgLTE2Niw5ICsxNjYsOCBAQAogRjoJaW5jbHVkZS9saW51eC9zZXJpYWxfODI1MC5oCiAKIDgzOTAgTkVUV09SSyBEUklWRVJTIFtXRDgweDMvU01DLUVMSVRFLCBTTUMtVUxUUkEsIE5FMjAwMCwgM0M1MDMsIGV0Yy5dCi1NOglQYXVsIEdvcnRtYWtlciA8cF9nb3J0bWFrZXJAeWFob28uY29tPgogTDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZwotUzoJTWFpbnRhaW5lZAorUzoJT3JwaGFuIC8gT2Jzb2xldGUKIEY6CWRyaXZlcnMvbmV0Lyo4MzkwKgogRjoJZHJpdmVycy9uZXQvYXg4ODc5Ni5jCiAKQEAgLTEwOTUsNiArMTA5NCwxMiBAQAogRjoJRG9jdW1lbnRhdGlvbi9hb2UvCiBGOglkcml2ZXJzL2Jsb2NrL2FvZS8KIAorQVRIRVJPUyBBVEggR0VORVJJQyBVVElMSVRJRVMKK006CSJMdWlzIFIuIFJvZHJpZ3VleiIgPGxyb2RyaWd1ZXpAYXRoZXJvcy5jb20+CitMOglsaW51eC13aXJlbGVzc0B2Z2VyLmtlcm5lbC5vcmcKK1M6CVN1cHBvcnRlZAorRjoJZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoLyoKKwogQVRIRVJPUyBBVEg1SyBXSVJFTEVTUyBEUklWRVIKIE06CUppcmkgU2xhYnkgPGppcmlzbGFieUBnbWFpbC5jb20+CiBNOglOaWNrIEtvc3NpZmlkaXMgPG1pY2tmbGVtbUBnbWFpbC5jb20+CkBAIC0xMjczLDYgKzEyNzgsMTUgQEAKIEY6CWRyaXZlcnMvdmlkZW8vYmFja2xpZ2h0LwogRjoJaW5jbHVkZS9saW51eC9iYWNrbGlnaHQuaAogCitCQVRNQU4gQURWQU5DRUQKK006CU1hcmVrIExpbmRuZXIgPGxpbmRuZXJfbWFyZWtAeWFob28uZGU+CitNOglTaW1vbiBXdW5kZXJsaWNoIDxzaXd1QGhyei50dS1jaGVtbml0ei5kZT4KK006CVN2ZW4gRWNrZWxtYW5uIDxzdmVuQG5hcmZhdGlvbi5vcmc+CitMOgliLmEudC5tLmEubkBsaXN0cy5vcGVuLW1lc2gub3JnCitXOglodHRwOi8vd3d3Lm9wZW4tbWVzaC5vcmcvCitTOglNYWludGFpbmVkCitGOgluZXQvYmF0bWFuLWFkdi8KKwogQkFZQ09NL0hETENEUlYgRFJJVkVSUyBGT1IgQVguMjUKIE06CVRob21hcyBTYWlsZXIgPHQuc2FpbGVyQGFsdW1uaS5ldGh6LmNoPgogTDoJbGludXgtaGFtc0B2Z2VyLmtlcm5lbC5vcmcKQEAgLTI4MTIsNiArMjgyNiwxMCBAQAogUzoJTWFpbnRhaW5lZAogRjoJRG9jdW1lbnRhdGlvbi90aW1lcnMvCiBGOglrZXJuZWwvaHJ0aW1lci5jCitGOglrZXJuZWwvdGltZS9jbG9ja2V2ZW50cy5jCitGOglrZXJuZWwvdGltZS90aWNrKi4qCitGOglrZXJuZWwvdGltZS90aW1lcl8qLmMKK0YJaW5jbHVkZS9saW51eC9jbG9ja2V2ZW50cy5oCiBGOglpbmNsdWRlL2xpbnV4L2hydGltZXIuaAogCiBISUdILVNQRUVEIFNDQyBEUklWRVIgRk9SIEFYLjI1CkBAIC0zMDQ3LDggKzMwNjUsMTAgQEAKIElOUFVUIE1VTFRJVE9VQ0ggKE1UKSBQUk9UT0NPTAogTToJSGVucmlrIFJ5ZGJlcmcgPHJ5ZGJlcmdAZXVyb21haWwuc2U+CiBMOglsaW51eC1pbnB1dEB2Z2VyLmtlcm5lbC5vcmcKK1Q6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvcnlkYmVyZy9pbnB1dC1tdC5naXQKIFM6CU1haW50YWluZWQKIEY6CURvY3VtZW50YXRpb24vaW5wdXQvbXVsdGktdG91Y2gtcHJvdG9jb2wudHh0CitGOglkcml2ZXJzL2lucHV0L2lucHV0LW10LmMKIEs6CVxiKEFCU3xTWU4pX01UXwogCiBJTlRFTCBJRExFIERSSVZFUgpAQCAtMzEzNSw2ICszMTU1LDggQEAKIE06CUpvaG4gUm9uY2lhayA8am9obi5yb25jaWFrQGludGVsLmNvbT4KIEw6CWUxMDAwLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAogVzoJaHR0cDovL2UxMDAwLnNvdXJjZWZvcmdlLm5ldC8KK1Q6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvamtpcnNoZXIvbmV0LTIuNi5naXQKK1Q6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvamtpcnNoZXIvbmV0LW5leHQtMi42LmdpdAogUzoJU3VwcG9ydGVkCiBGOglEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZTEwMC50eHQKIEY6CURvY3VtZW50YXRpb24vbmV0d29ya2luZy9lMTAwMC50eHQKQEAgLTQyNDYsNiArNDI2OCw3IEBACiBNOglLT05JU0hJIFJ5dXN1a2UgPGtvbmlzaGkucnl1c3VrZUBsYWIubnR0LmNvLmpwPgogTDoJbGludXgtbmlsZnNAdmdlci5rZXJuZWwub3JnCiBXOglodHRwOi8vd3d3Lm5pbGZzLm9yZy9lbi8KK1Q6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvcnl1c3VrZS9uaWxmczIuZ2l0CiBTOglTdXBwb3J0ZWQKIEY6CURvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmlsZnMyLnR4dAogRjoJZnMvbmlsZnMyLwpAQCAtNDM0Myw2ICs0MzY2LDIwIEBACiBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL2NoYXIvaHdfcmFuZG9tL29tYXAtcm5nLmMKIAorT01BUCBIV01PRCBTVVBQT1JUCitNOglCZW5vw650IENvdXNzb24gPGItY291c3NvbkB0aS5jb20+CitNOglQYXVsIFdhbG1zbGV5IDxwYXVsQHB3c2FuLmNvbT4KK0w6CWxpbnV4LW9tYXBAdmdlci5rZXJuZWwub3JnCitTOglNYWludGFpbmVkCitGOglhcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYworRjoJYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9vbWFwX2h3bW9kLmgKKworT01BUCBIV01PRCBEQVRBIEZPUiBPTUFQNC1CQVNFRCBERVZJQ0VTCitNOglCZW5vw650IENvdXNzb24gPGItY291c3NvbkB0aS5jb20+CitMOglsaW51eC1vbWFwQHZnZXIua2VybmVsLm9yZworUzoJTWFpbnRhaW5lZAorRjoJYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzQ0eHhfZGF0YS5jCisKIE9NQVAgVVNCIFNVUFBPUlQKIE06CUZlbGlwZSBCYWxiaSA8YmFsYmlAdGkuY29tPgogTToJRGF2aWQgQnJvd25lbGwgPGRicm93bmVsbEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CkBAIC00NjE3LDYgKzQ2NTQsMTYgQEAKIEY6CWNyeXB0by9wY3J5cHQuYwogRjoJaW5jbHVkZS9jcnlwdG8vcGNyeXB0LmgKIAorUEVSLUNQVSBNRU1PUlkgQUxMT0NBVE9SCitNOglUZWp1biBIZW8gPHRqQGtlcm5lbC5vcmc+CitNOglDaHJpc3RvcGggTGFtZXRlciA8Y2xAbGludXgtZm91bmRhdGlvbi5vcmc+CitMOglsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnCitUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3RqL3BlcmNwdS5naXQKK1M6CU1haW50YWluZWQKK0Y6CWluY2x1ZGUvbGludXgvcGVyY3B1Ki5oCitGOgltbS9wZXJjcHUqLmMKK0Y6CWFyY2gvKi9pbmNsdWRlL2FzbS9wZXJjcHUuaAorCiBQRVItVEFTSyBERUxBWSBBQ0NPVU5USU5HCiBNOglCYWxiaXIgU2luZ2ggPGJhbGJpckBsaW51eC52bmV0LmlibS5jb20+CiBTOglNYWludGFpbmVkCkBAIC00NjI3LDcgKzQ2NzQsNyBAQAogTToJUGV0ZXIgWmlqbHN0cmEgPGEucC56aWpsc3RyYUBjaGVsbG8ubmw+CiBNOglQYXVsIE1hY2tlcnJhcyA8cGF1bHVzQHNhbWJhLm9yZz4KIE06CUluZ28gTW9sbmFyIDxtaW5nb0BlbHRlLmh1PgotTToJQXJuYWxkbyBDYXJ2YWxobyBkZSBNZWxvIDxhY21lQHJlZGhhdC5jb20+CitNOglBcm5hbGRvIENhcnZhbGhvIGRlIE1lbG8gPGFjbWVAZ2hvc3Rwcm90b2NvbHMubmV0PgogUzoJU3VwcG9ydGVkCiBGOglrZXJuZWwvcGVyZl9ldmVudCouYwogRjoJaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50LmgKQEAgLTUwNTIsNyArNTA5OSw3IEBACiBXOglodHRwOi8vbGludXh3aXJlbGVzcy5vcmcvCiBUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2xpbnZpbGxlL3dpcmVsZXNzLXRlc3RpbmcuZ2l0CiBTOglNYWludGFpbmVkCi1GOglkcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODAqCitGOglkcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODAvCiAKIFJUTDgxODcgV0lSRUxFU1MgRFJJVkVSCiBNOglIZXJ0b24gUm9uYWxkbyBLcnplc2luc2tpIDxoZXJ0b25AbWFuZHJpdmEuY29tLmJyPgpAQCAtNTA2Miw3ICs1MTA5LDE3IEBACiBXOglodHRwOi8vbGludXh3aXJlbGVzcy5vcmcvCiBUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2xpbnZpbGxlL3dpcmVsZXNzLXRlc3RpbmcuZ2l0CiBTOglNYWludGFpbmVkCi1GOglkcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODcqCitGOglkcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODcvCisKK1JUTDgxOTJDRSBXSVJFTEVTUyBEUklWRVIKK006CUxhcnJ5IEZpbmdlciA8TGFycnkuRmluZ2VyQGx3ZmluZ2VyLm5ldD4KK006CUNoYW9taW5nIExpIDxjaGFvbWluZ19saUByZWFsc2lsLmNvbS5jbj4KK0w6CWxpbnV4LXdpcmVsZXNzQHZnZXIua2VybmVsLm9yZworVzoJaHR0cDovL2xpbnV4d2lyZWxlc3Mub3JnLworVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9saW52aWxsZS93aXJlbGVzcy10ZXN0aW5nLmdpdAorUzoJTWFpbnRhaW5lZAorRjoJZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS8KK0Y6CWRyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmNlLwogCiBTMyBTQVZBR0UgRlJBTUVCVUZGRVIgRFJJVkVSCiBNOglBbnRvbmlubyBEYXBsYXMgPGFkYXBsYXNAZ21haWwuY29tPgpAQCAtNTE0Miw2ICs1MTk5LDE4IEBACiBTOglTdXBwb3J0ZWQKIEY6CXNvdW5kL3NvYy9zM2MyNHh4CiAKK1RJTUVLRUVQSU5HLCBOVFAKK006CUpvaG4gU3R1bHR6IDxqb2huc3R1bEB1cy5pYm0uY29tPgorTToJVGhvbWFzIEdsZWl4bmVyIDx0Z2x4QGxpbnV0cm9uaXguZGU+CitTOglTdXBwb3J0ZWQKK0Y6CWluY2x1ZGUvbGludXgvY2xvY2tzb3VyY2UuaAorRjoJaW5jbHVkZS9saW51eC90aW1lLmgKK0Y6CWluY2x1ZGUvbGludXgvdGltZXguaAorRjoJaW5jbHVkZS9saW51eC90aW1la2VlcGluZy5oCitGOglrZXJuZWwvdGltZS9jbG9ja3NvdXJjZS5jCitGOglrZXJuZWwvdGltZS90aW1lKi5jCitGOglrZXJuZWwvdGltZS9udHAuYworCiBUTEcyMzAwIFZJREVPNExJTlVYLTIgRFJJVkVSCiBNOglIdWFuZyBTaGlqaWUgPHNoaWppZThAZ21haWwuY29tPgogTToJS2FuZyBZb25nIDxrYW5neW9uZ0B0ZWxlZ2VudC5jb20+CkBAIC01NzEyLDEyICs1NzgxLDYgQEAKIFM6CU9kZCBGaXhlcwogRjoJZHJpdmVycy9uZXQvc3RhcmZpcmUqCiAKLVNUUkFESVMgTVBFRy0yIERFQ09ERVIgRFJJVkVSCi1NOglOYXRoYW4gTGFyZWRvIDxsYXJlZG9AZ251Lm9yZz4KLVc6CWh0dHA6Ly93d3cuc3RyYWRpcy5jb20vCi1TOglNYWludGFpbmVkCi1GOglkcml2ZXJzL21lZGlhL3ZpZGVvL3N0cmFkaXMuYwotCiBTVU4zLzNYCiBNOglTYW0gQ3JlYXNleSA8c2FtbXlAc2FtbXkubmV0PgogVzoJaHR0cDovL3NhbW15Lm5ldC9zdW4zLwpkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQppbmRleCA3NGIyNTU1Li42YTQ1NzY5IDEwMDY0NAotLS0gYS9NYWtlZmlsZQorKysgYi9NYWtlZmlsZQpAQCAtMjI0LDYgKzIyNCw3IEBACiBlbmRpZgogCiBLQ09ORklHX0NPTkZJRwk/PSAuY29uZmlnCitleHBvcnQgS0NPTkZJR19DT05GSUcKIAogIyBTSEVMTCB1c2VkIGJ5IGtidWlsZAogQ09ORklHX1NIRUxMIDo9ICQoc2hlbGwgaWYgWyAteCAiJCRCQVNIIiBdOyB0aGVuIGVjaG8gJCRCQVNIOyBcCmRpZmYgLS1naXQgYS9hcmNoL0tjb25maWcgYi9hcmNoL0tjb25maWcKaW5kZXggOGJmMGZhNjUuLmY3OGMyYmUgMTAwNjQ0Ci0tLSBhL2FyY2gvS2NvbmZpZworKysgYi9hcmNoL0tjb25maWcKQEAgLTE3NSw0ICsxNzUsNyBAQAogY29uZmlnIEhBVkVfQVJDSF9KVU1QX0xBQkVMCiAJYm9vbAogCitjb25maWcgSEFWRV9BUkNIX01VVEVYX0NQVV9SRUxBWAorCWJvb2wKKwogc291cmNlICJrZXJuZWwvZ2Nvdi9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9pb2N0bHMuaCBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vaW9jdGxzLmgKaW5kZXggNTk2MTdjMy4uMDM0YjZjZiAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9pb2N0bHMuaAorKysgYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL2lvY3Rscy5oCkBAIC05Miw2ICs5Miw3IEBACiAjZGVmaW5lIFRJT0NHU0lECTB4NTQyOSAgLyogUmV0dXJuIHRoZSBzZXNzaW9uIElEIG9mIEZEICovCiAjZGVmaW5lIFRJT0NHUFROCV9JT1IoJ1QnLDB4MzAsIHVuc2lnbmVkIGludCkgLyogR2V0IFB0eSBOdW1iZXIgKG9mIHB0eS1tdXggZGV2aWNlKSAqLwogI2RlZmluZSBUSU9DU1BUTENLCV9JT1coJ1QnLDB4MzEsIGludCkgIC8qIExvY2svdW5sb2NrIFB0eSAqLworI2RlZmluZSBUSU9DR0RFVglfSU9SKCdUJywweDMyLCB1bnNpZ25lZCBpbnQpIC8qIEdldCBwcmltYXJ5IGRldmljZSBub2RlIG9mIC9kZXYvY29uc29sZSAqLwogI2RlZmluZSBUSU9DU0lHCQlfSU9XKCdUJywweDM2LCBpbnQpICAvKiBHZW5lcmF0ZSBzaWduYWwgb24gUHR5IHNsYXZlICovCiAKICNkZWZpbmUgVElPQ1NFUkNPTkZJRwkweDU0NTMKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmgKaW5kZXggZmU3OTJjYS4uNTk5NmU3YSAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmgKKysrIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmgKQEAgLTEsMTAgKzEsNCBAQAogI2lmbmRlZiBfX0FTTV9BTFBIQV9QRVJGX0VWRU5UX0gKICNkZWZpbmUgX19BU01fQUxQSEFfUEVSRl9FVkVOVF9ICiAKLSNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMKLWV4dGVybiB2b2lkIGluaXRfaHdfcGVyZl9ldmVudHModm9pZCk7Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIGluaXRfaHdfcGVyZl9ldmVudHModm9pZCkgICAgeyB9Ci0jZW5kaWYKLQogI2VuZGlmIC8qIF9fQVNNX0FMUEhBX1BFUkZfRVZFTlRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvaXJxX2FscGhhLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9pcnFfYWxwaGEuYwppbmRleCA1Zjc3YWZiLi40YzhiYjM3IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9pcnFfYWxwaGEuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9pcnFfYWxwaGEuYwpAQCAtMTEyLDggKzExMiw2IEBACiAJd3JlbnQoZW50SW50LCAwKTsKIAogCWFscGhhX212LmluaXRfaXJxKCk7Ci0KLQlpbml0X2h3X3BlcmZfZXZlbnRzKCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9wZXJmX2V2ZW50LmMgYi9hcmNoL2FscGhhL2tlcm5lbC9wZXJmX2V2ZW50LmMKaW5kZXggMWNjNDk2OC4uOTA1NjFjNCAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvcGVyZl9ldmVudC5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL3BlcmZfZXZlbnQuYwpAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2tkZWJ1Zy5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogCiAjaW5jbHVkZSA8YXNtL2h3cnBiLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgpAQCAtODYzLDEzICs4NjQsMTMgQEAKIC8qCiAgKiBJbml0IGNhbGwgdG8gaW5pdGlhbGlzZSBwZXJmb3JtYW5jZSBldmVudHMgYXQga2VybmVsIHN0YXJ0dXAuCiAgKi8KLXZvaWQgX19pbml0IGluaXRfaHdfcGVyZl9ldmVudHModm9pZCkKK2ludCBfX2luaXQgaW5pdF9od19wZXJmX2V2ZW50cyh2b2lkKQogewogCXByX2luZm8oIlBlcmZvcm1hbmNlIGV2ZW50czogIik7CiAKIAlpZiAoIXN1cHBvcnRlZF9jcHUoKSkgewogCQlwcl9jb250KCJObyBzdXBwb3J0IGZvciB5b3VyIENQVS5cbiIpOwotCQlyZXR1cm47CisJCXJldHVybiAwOwogCX0KIAogCXByX2NvbnQoIlN1cHBvcnRlZCBDUFUgdHlwZSFcbiIpOwpAQCAtODgxLDYgKzg4Miw4IEBACiAJLyogQW5kIHNldCB1cCBQTVUgc3BlY2lmaWNhdGlvbiAqLwogCWFscGhhX3BtdSA9ICZldjY3X3BtdTsKIAotCXBlcmZfcG11X3JlZ2lzdGVyKCZwbXUpOwotfQorCXBlcmZfcG11X3JlZ2lzdGVyKCZwbXUsICJjcHUiLCBQRVJGX1RZUEVfUkFXKTsKIAorCXJldHVybiAwOworfQorZWFybHlfaW5pdGNhbGwoaW5pdF9od19wZXJmX2V2ZW50cyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9LY29uZmlnIGIvYXJjaC9hcm0vS2NvbmZpZwppbmRleCBkNTZkMjFjLi5lMmY4MDExIDEwMDY0NAotLS0gYS9hcmNoL2FybS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL0tjb25maWcKQEAgLTIsNiArMiw3IEBACiAJYm9vbAogCWRlZmF1bHQgeQogCXNlbGVjdCBIQVZFX0FPVVQKKwlzZWxlY3QgSEFWRV9ETUFfQVBJX0RFQlVHCiAJc2VsZWN0IEhBVkVfSURFCiAJc2VsZWN0IEhBVkVfTUVNQkxPQ0sKIAlzZWxlY3QgUlRDX0xJQgpAQCAtMTQsNiArMTUsNyBAQAogCXNlbGVjdCBIQVZFX0ZVTkNUSU9OX1RSQUNFUiBpZiAoIVhJUF9LRVJORUwpCiAJc2VsZWN0IEhBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQgaWYgKCFYSVBfS0VSTkVMKQogCXNlbGVjdCBIQVZFX0RZTkFNSUNfRlRSQUNFIGlmICghWElQX0tFUk5FTCkKKwlzZWxlY3QgSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVIgaWYgKCFUSFVNQjJfS0VSTkVMKQogCXNlbGVjdCBIQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UCiAJc2VsZWN0IEhBVkVfS0VSTkVMX0daSVAKIAlzZWxlY3QgSEFWRV9LRVJORUxfTFpPCkBAIC0yMyw2ICsyNSw3IEBACiAJc2VsZWN0IFBFUkZfVVNFX1ZNQUxMT0MKIAlzZWxlY3QgSEFWRV9SRUdTX0FORF9TVEFDS19BQ0NFU1NfQVBJCiAJc2VsZWN0IEhBVkVfSFdfQlJFQUtQT0lOVCBpZiAoUEVSRl9FVkVOVFMgJiYgKENQVV9WNiB8fCBDUFVfVjcpKQorCXNlbGVjdCBIQVZFX0NfUkVDT1JETUNPVU5UCiAJaGVscAogCSAgVGhlIEFSTSBzZXJpZXMgaXMgYSBsaW5lIG9mIGxvdy1wb3dlci1jb25zdW1wdGlvbiBSSVNDIGNoaXAgZGVzaWducwogCSAgbGljZW5zZWQgYnkgQVJNIEx0ZCBhbmQgdGFyZ2V0ZWQgYXQgZW1iZWRkZWQgYXBwbGljYXRpb25zIGFuZApAQCAtMzQsOSArMzcsMTUgQEAKIGNvbmZpZyBIQVZFX1BXTQogCWJvb2wKIAorY29uZmlnIE1JR0hUX0hBVkVfUENJCisJYm9vbAorCiBjb25maWcgU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT04KIAlib29sCiAKK2NvbmZpZyBIQVZFX1NDSEVEX0NMT0NLCisJYm9vbAorCiBjb25maWcgR0VORVJJQ19HUElPCiAJYm9vbAogCkBAIC0yMjEsNyArMjMwLDcgQEAKIAlib29sICJBUk0gTHRkLiBJbnRlZ3JhdG9yIGZhbWlseSIKIAlzZWxlY3QgQVJNX0FNQkEKIAlzZWxlY3QgQVJDSF9IQVNfQ1BVRlJFUQotCXNlbGVjdCBDT01NT05fQ0xLREVWCisJc2VsZWN0IENMS0RFVl9MT09LVVAKIAlzZWxlY3QgSUNTVAogCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCiAJc2VsZWN0IFBMQVRfVkVSU0FUSUxFCkBAIC0yMzEsNyArMjQwLDggQEAKIGNvbmZpZyBBUkNIX1JFQUxWSUVXCiAJYm9vbCAiQVJNIEx0ZC4gUmVhbFZpZXcgZmFtaWx5IgogCXNlbGVjdCBBUk1fQU1CQQotCXNlbGVjdCBDT01NT05fQ0xLREVWCisJc2VsZWN0IENMS0RFVl9MT09LVVAKKwlzZWxlY3QgSEFWRV9TQ0hFRF9DTE9DSwogCXNlbGVjdCBJQ1NUCiAJc2VsZWN0IEdFTkVSSUNfQ0xPQ0tFVkVOVFMKIAlzZWxlY3QgQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUIKQEAgLTI0NSw3ICsyNTUsOCBAQAogCWJvb2wgIkFSTSBMdGQuIFZlcnNhdGlsZSBmYW1pbHkiCiAJc2VsZWN0IEFSTV9BTUJBCiAJc2VsZWN0IEFSTV9WSUMKLQlzZWxlY3QgQ09NTU9OX0NMS0RFVgorCXNlbGVjdCBDTEtERVZfTE9PS1VQCisJc2VsZWN0IEhBVkVfU0NIRURfQ0xPQ0sKIAlzZWxlY3QgSUNTVAogCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCiAJc2VsZWN0IEFSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCCkBAIC0yNTksOSArMjcwLDEwIEBACiAJc2VsZWN0IEFSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCCiAJc2VsZWN0IEFSTV9BTUJBCiAJc2VsZWN0IEFSTV9USU1FUl9TUDgwNAotCXNlbGVjdCBDT01NT05fQ0xLREVWCisJc2VsZWN0IENMS0RFVl9MT09LVVAKIAlzZWxlY3QgR0VORVJJQ19DTE9DS0VWRU5UUwogCXNlbGVjdCBIQVZFX0NMSworCXNlbGVjdCBIQVZFX1NDSEVEX0NMT0NLCiAJc2VsZWN0IElDU1QKIAlzZWxlY3QgUExBVF9WRVJTQVRJTEUKIAloZWxwCkBAIC0yODAsNyArMjkyLDcgQEAKIAlkZXBlbmRzIG9uIE1NVQogCXNlbGVjdCBDUFVfVjYKIAlzZWxlY3QgQVJNX0FNQkEKLQlzZWxlY3QgQ09NTU9OX0NMS0RFVgorCXNlbGVjdCBDTEtERVZfTE9PS1VQCiAJc2VsZWN0IEdFTkVSSUNfQ0xPQ0tFVkVOVFMKIAlzZWxlY3QgQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUIKIAloZWxwCkBAIC0yOTgsNiArMzEwLDcgQEAKIAlzZWxlY3QgQ1BVX1Y2CiAJc2VsZWN0IEdFTkVSSUNfQ0xPQ0tFVkVOVFMKIAlzZWxlY3QgQVJNX0dJQworCXNlbGVjdCBNSUdIVF9IQVZFX1BDSQogCXNlbGVjdCBQQ0lfRE9NQUlOUyBpZiBQQ0kKIAloZWxwCiAJICBTdXBwb3J0IGZvciBDYXZpdW0gTmV0d29ya3MgQ05TM1hYWCBwbGF0Zm9ybS4KQEAgLTMyNyw3ICszNDAsNyBAQAogCXNlbGVjdCBDUFVfQVJNOTIwVAogCXNlbGVjdCBBUk1fQU1CQQogCXNlbGVjdCBBUk1fVklDCi0Jc2VsZWN0IENPTU1PTl9DTEtERVYKKwlzZWxlY3QgQ0xLREVWX0xPT0tVUAogCXNlbGVjdCBBUkNIX1JFUVVJUkVfR1BJT0xJQgogCXNlbGVjdCBBUkNIX0hBU19IT0xFU19NRU1PUllNT0RFTAogCXNlbGVjdCBBUkNIX1VTRVNfR0VUVElNRU9GRlNFVApAQCAtMzQ3LDE0ICszNjAsMjIgQEAKIAlib29sICJGcmVlc2NhbGUgTVhDL2lNWC1iYXNlZCIKIAlzZWxlY3QgR0VORVJJQ19DTE9DS0VWRU5UUwogCXNlbGVjdCBBUkNIX1JFUVVJUkVfR1BJT0xJQgotCXNlbGVjdCBDT01NT05fQ0xLREVWCisJc2VsZWN0IENMS0RFVl9MT09LVVAKIAloZWxwCiAJICBTdXBwb3J0IGZvciBGcmVlc2NhbGUgTVhDL2lNWC1iYXNlZCBmYW1pbHkgb2YgcHJvY2Vzc29ycwogCitjb25maWcgQVJDSF9NWFMKKwlib29sICJGcmVlc2NhbGUgTVhTLWJhc2VkIgorCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCisJc2VsZWN0IEFSQ0hfUkVRVUlSRV9HUElPTElCCisJc2VsZWN0IENPTU1PTl9DTEtERVYKKwloZWxwCisJICBTdXBwb3J0IGZvciBGcmVlc2NhbGUgTVhTLWJhc2VkIGZhbWlseSBvZiBwcm9jZXNzb3JzCisKIGNvbmZpZyBBUkNIX1NUTVAzWFhYCiAJYm9vbCAiRnJlZXNjYWxlIFNUTVAzeHh4IgogCXNlbGVjdCBDUFVfQVJNOTI2VAotCXNlbGVjdCBDT01NT05fQ0xLREVWCisJc2VsZWN0IENMS0RFVl9MT09LVVAKIAlzZWxlY3QgQVJDSF9SRVFVSVJFX0dQSU9MSUIKIAlzZWxlY3QgR0VORVJJQ19DTE9DS0VWRU5UUwogCXNlbGVjdCBVU0JfQVJDSF9IQVNfRUhDSQpAQCAtNDMzLDYgKzQ1NCw4IEBACiAJc2VsZWN0IENQVV9YU0NBTEUKIAlzZWxlY3QgR0VORVJJQ19HUElPCiAJc2VsZWN0IEdFTkVSSUNfQ0xPQ0tFVkVOVFMKKwlzZWxlY3QgSEFWRV9TQ0hFRF9DTE9DSworCXNlbGVjdCBNSUdIVF9IQVZFX1BDSQogCXNlbGVjdCBETUFCT1VOQ0UgaWYgUENJCiAJaGVscAogCSAgU3VwcG9ydCBmb3IgSW50ZWwncyBJWFA0WFggKFhTY2FsZSkgZmFtaWx5IG9mIHByb2Nlc3NvcnMuCkBAIC00NzIsNyArNDk1LDcgQEAKIAlzZWxlY3QgSEFWRV9JREUKIAlzZWxlY3QgQVJNX0FNQkEKIAlzZWxlY3QgVVNCX0FSQ0hfSEFTX09IQ0kKLQlzZWxlY3QgQ09NTU9OX0NMS0RFVgorCXNlbGVjdCBDTEtERVZfTE9PS1VQCiAJc2VsZWN0IEdFTkVSSUNfVElNRQogCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCiAJaGVscApAQCAtNTA2LDggKzUyOSw5IEBACiAJYm9vbCAiTWFydmVsbCBQWEExNjgvOTEwL01NUDIiCiAJZGVwZW5kcyBvbiBNTVUKIAlzZWxlY3QgQVJDSF9SRVFVSVJFX0dQSU9MSUIKLQlzZWxlY3QgQ09NTU9OX0NMS0RFVgorCXNlbGVjdCBDTEtERVZfTE9PS1VQCiAJc2VsZWN0IEdFTkVSSUNfQ0xPQ0tFVkVOVFMKKwlzZWxlY3QgSEFWRV9TQ0hFRF9DTE9DSwogCXNlbGVjdCBUSUNLX09ORVNIT1QKIAlzZWxlY3QgUExBVF9QWEEKIAlzZWxlY3QgU1BBUlNFX0lSUQpAQCAtNTM5LDcgKzU2Myw3IEBACiAJYm9vbCAiTnV2b3RvbiBXOTBYOTAwIENQVSIKIAlzZWxlY3QgQ1BVX0FSTTkyNlQKIAlzZWxlY3QgQVJDSF9SRVFVSVJFX0dQSU9MSUIKLQlzZWxlY3QgQ09NTU9OX0NMS0RFVgorCXNlbGVjdCBDTEtERVZfTE9PS1VQCiAJc2VsZWN0IEdFTkVSSUNfQ0xPQ0tFVkVOVFMKIAloZWxwCiAJICBTdXBwb3J0IGZvciBOdXZvdG9uIChXaW5ib25kIGxvZ2ljIGRlcHQuKSBBUk05IHByb2Nlc3NvciwKQEAgLTU1MywxOCArNTc3LDE5IEBACiBjb25maWcgQVJDSF9OVUM5M1gKIAlib29sICJOdXZvdG9uIE5VQzkzWCBDUFUiCiAJc2VsZWN0IENQVV9BUk05MjZUCi0Jc2VsZWN0IENPTU1PTl9DTEtERVYKKwlzZWxlY3QgQ0xLREVWX0xPT0tVUAogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIE51dm90b24gKFdpbmJvbmQgbG9naWMgZGVwdC4pIE5VQzkzWCBNQ1UsVGhlIE5VQzkzWCBpcyBhCiAJICBsb3ctcG93ZXIgYW5kIGhpZ2ggcGVyZm9ybWFuY2UgTVBFRy00L0pQRUcgbXVsdGltZWRpYSBjb250cm9sbGVyIGNoaXAuCiAKIGNvbmZpZyBBUkNIX1RFR1JBCiAJYm9vbCAiTlZJRElBIFRlZ3JhIgorCXNlbGVjdCBDTEtERVZfTE9PS1VQCiAJc2VsZWN0IEdFTkVSSUNfVElNRQogCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCiAJc2VsZWN0IEdFTkVSSUNfR1BJTwogCXNlbGVjdCBIQVZFX0NMSwotCXNlbGVjdCBDT01NT05fQ0xLREVWCisJc2VsZWN0IEhBVkVfU0NIRURfQ0xPQ0sKIAlzZWxlY3QgQVJDSF9IQVNfQkFSUklFUlMgaWYgQ0FDSEVfTDJYMAogCXNlbGVjdCBBUkNIX0hBU19DUFVGUkVRCiAJaGVscApAQCAtNTc0LDcgKzU5OSw3IEBACiBjb25maWcgQVJDSF9QTlg0MDA4CiAJYm9vbCAiUGhpbGlwcyBOZXhwZXJpYSBQTlg0MDA4IE1vYmlsZSIKIAlzZWxlY3QgQ1BVX0FSTTkyNlQKLQlzZWxlY3QgQ09NTU9OX0NMS0RFVgorCXNlbGVjdCBDTEtERVZfTE9PS1VQCiAJc2VsZWN0IEFSQ0hfVVNFU19HRVRUSU1FT0ZGU0VUCiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIFBoaWxpcHMgUE5YNDAwOCBtb2JpbGUgcGxhdGZvcm0uCkBAIC01ODQsOSArNjA5LDEwIEBACiAJZGVwZW5kcyBvbiBNTVUKIAlzZWxlY3QgQVJDSF9NVERfWElQCiAJc2VsZWN0IEFSQ0hfSEFTX0NQVUZSRVEKLQlzZWxlY3QgQ09NTU9OX0NMS0RFVgorCXNlbGVjdCBDTEtERVZfTE9PS1VQCiAJc2VsZWN0IEFSQ0hfUkVRVUlSRV9HUElPTElCCiAJc2VsZWN0IEdFTkVSSUNfQ0xPQ0tFVkVOVFMKKwlzZWxlY3QgSEFWRV9TQ0hFRF9DTE9DSwogCXNlbGVjdCBUSUNLX09ORVNIT1QKIAlzZWxlY3QgUExBVF9QWEEKIAlzZWxlY3QgU1BBUlNFX0lSUQpAQCAtNjA2LDkgKzYzMiwxNSBAQAogCSAgKGNsb2NrIGFuZCBwb3dlciBjb250cm9sLCBldGMpLgogCiBjb25maWcgQVJDSF9TSE1PQklMRQotCWJvb2wgIlJlbmVzYXMgU0gtTW9iaWxlIgorCWJvb2wgIlJlbmVzYXMgU0gtTW9iaWxlIC8gUi1Nb2JpbGUiCisJc2VsZWN0IEhBVkVfQ0xLCisJc2VsZWN0IENMS0RFVl9MT09LVVAKKwlzZWxlY3QgR0VORVJJQ19DTE9DS0VWRU5UUworCXNlbGVjdCBOT19JT1BPUlQKKwlzZWxlY3QgU1BBUlNFX0lSUQorCXNlbGVjdCBNVUxUSV9JUlFfSEFORExFUgogCWhlbHAKLQkgIFN1cHBvcnQgZm9yIFJlbmVzYXMncyBTSC1Nb2JpbGUgQVJNIHBsYXRmb3JtcworCSAgU3VwcG9ydCBmb3IgUmVuZXNhcydzIFNILU1vYmlsZSBhbmQgUi1Nb2JpbGUgQVJNIHBsYXRmb3Jtcy4KIAogY29uZmlnIEFSQ0hfUlBDCiAJYm9vbCAiUmlzY1BDIgpAQCAtNjM1LDYgKzY2Nyw3IEBACiAJc2VsZWN0IENQVV9GUkVRCiAJc2VsZWN0IEdFTkVSSUNfQ0xPQ0tFVkVOVFMKIAlzZWxlY3QgSEFWRV9DTEsKKwlzZWxlY3QgSEFWRV9TQ0hFRF9DTE9DSwogCXNlbGVjdCBUSUNLX09ORVNIT1QKIAlzZWxlY3QgQVJDSF9SRVFVSVJFX0dQSU9MSUIKIAloZWxwCkBAIC03NjEsNyArNzk0LDcgQEAKIAlib29sICJUZWxlY2hpcHMgVENDIEFSTTkyNi1iYXNlZCBzeXN0ZW1zIgogCXNlbGVjdCBDUFVfQVJNOTI2VAogCXNlbGVjdCBIQVZFX0NMSwotCXNlbGVjdCBDT01NT05fQ0xLREVWCisJc2VsZWN0IENMS0RFVl9MT09LVVAKIAlzZWxlY3QgR0VORVJJQ19DTE9DS0VWRU5UUwogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIFRlbGVjaGlwcyBUQ0MgQVJNOTI2LWJhc2VkIHN5c3RlbXMuCkBAIC03ODEsMTEgKzgxNCwxMiBAQAogCWJvb2wgIlNULUVyaWNzc29uIFUzMDAgU2VyaWVzIgogCWRlcGVuZHMgb24gTU1VCiAJc2VsZWN0IENQVV9BUk05MjZUCisJc2VsZWN0IEhBVkVfU0NIRURfQ0xPQ0sKIAlzZWxlY3QgSEFWRV9UQ00KIAlzZWxlY3QgQVJNX0FNQkEKIAlzZWxlY3QgQVJNX1ZJQwogCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCi0Jc2VsZWN0IENPTU1PTl9DTEtERVYKKwlzZWxlY3QgQ0xLREVWX0xPT0tVUAogCXNlbGVjdCBHRU5FUklDX0dQSU8KIAloZWxwCiAJICBTdXBwb3J0IGZvciBTVC1Fcmljc3NvbiBVMzAwIHNlcmllcyBtb2JpbGUgcGxhdGZvcm1zLgpAQCAtNzk1LDggKzgyOSw5IEBACiAJc2VsZWN0IENQVV9WNwogCXNlbGVjdCBBUk1fQU1CQQogCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCi0Jc2VsZWN0IENPTU1PTl9DTEtERVYKKwlzZWxlY3QgQ0xLREVWX0xPT0tVUAogCXNlbGVjdCBBUkNIX1JFUVVJUkVfR1BJT0xJQgorCXNlbGVjdCBBUkNIX0hBU19DUFVGUkVRCiAJaGVscAogCSAgU3VwcG9ydCBmb3IgU1QtRXJpY3Nzb24ncyBVeDUwMCBhcmNoaXRlY3R1cmUKIApAQCAtODA1LDcgKzg0MCw3IEBACiAJc2VsZWN0IEFSTV9BTUJBCiAJc2VsZWN0IEFSTV9WSUMKIAlzZWxlY3QgQ1BVX0FSTTkyNlQKLQlzZWxlY3QgQ09NTU9OX0NMS0RFVgorCXNlbGVjdCBDTEtERVZfTE9PS1VQCiAJc2VsZWN0IEdFTkVSSUNfQ0xPQ0tFVkVOVFMKIAlzZWxlY3QgQVJDSF9SRVFVSVJFX0dQSU9MSUIKIAloZWxwCkBAIC04MTcsNyArODUyLDcgQEAKIAlzZWxlY3QgQVJDSF9SRVFVSVJFX0dQSU9MSUIKIAlzZWxlY3QgWk9ORV9ETUEKIAlzZWxlY3QgSEFWRV9JREUKLQlzZWxlY3QgQ09NTU9OX0NMS0RFVgorCXNlbGVjdCBDTEtERVZfTE9PS1VQCiAJc2VsZWN0IEdFTkVSSUNfQUxMT0NBVE9SCiAJc2VsZWN0IEFSQ0hfSEFTX0hPTEVTX01FTU9SWU1PREVMCiAJaGVscApAQCAtODI5LDYgKzg2NCw3IEBACiAJc2VsZWN0IEFSQ0hfUkVRVUlSRV9HUElPTElCCiAJc2VsZWN0IEFSQ0hfSEFTX0NQVUZSRVEKIAlzZWxlY3QgR0VORVJJQ19DTE9DS0VWRU5UUworCXNlbGVjdCBIQVZFX1NDSEVEX0NMT0NLCiAJc2VsZWN0IEFSQ0hfSEFTX0hPTEVTX01FTU9SWU1PREVMCiAJaGVscAogCSAgU3VwcG9ydCBmb3IgVEkncyBPTUFQIHBsYXRmb3JtIChPTUFQMS8yLzMvNCkuCkBAIC04MzcsNyArODczLDcgQEAKIAlib29sICJTVCBTUEVBciIKIAlzZWxlY3QgQVJNX0FNQkEKIAlzZWxlY3QgQVJDSF9SRVFVSVJFX0dQSU9MSUIKLQlzZWxlY3QgQ09NTU9OX0NMS0RFVgorCXNlbGVjdCBDTEtERVZfTE9PS1VQCiAJc2VsZWN0IEdFTkVSSUNfQ0xPQ0tFVkVOVFMKIAlzZWxlY3QgSEFWRV9DTEsKIAloZWxwCkBAIC05MDIsNiArOTM4LDggQEAKIAogc291cmNlICJhcmNoL2FybS9wbGF0LW14Yy9LY29uZmlnIgogCitzb3VyY2UgImFyY2gvYXJtL21hY2gtbXhzL0tjb25maWciCisKIHNvdXJjZSAiYXJjaC9hcm0vbWFjaC1uZXR4L0tjb25maWciCiAKIHNvdXJjZSAiYXJjaC9hcm0vbWFjaC1ub21hZGlrL0tjb25maWciCkBAIC05ODIsOSArMTAyMCwxMSBAQAogY29uZmlnIFBMQVRfSU9QCiAJYm9vbAogCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCisJc2VsZWN0IEhBVkVfU0NIRURfQ0xPQ0sKIAogY29uZmlnIFBMQVRfT1JJT04KIAlib29sCisJc2VsZWN0IEhBVkVfU0NIRURfQ0xPQ0sKIAogY29uZmlnIFBMQVRfUFhBCiAJYm9vbApAQCAtOTk5LDggKzEwMzksOCBAQAogCiBjb25maWcgSVdNTVhUCiAJYm9vbCAiRW5hYmxlIGlXTU1YdCBzdXBwb3J0IgotCWRlcGVuZHMgb24gQ1BVX1hTQ0FMRSB8fCBDUFVfWFNDMyB8fCBDUFVfTU9IQVdLCi0JZGVmYXVsdCB5IGlmIFBYQTI3eCB8fCBQWEEzeHggfHwgQVJDSF9NTVAKKwlkZXBlbmRzIG9uIENQVV9YU0NBTEUgfHwgQ1BVX1hTQzMgfHwgQ1BVX01PSEFXSyB8fCBDUFVfUEo0CisJZGVmYXVsdCB5IGlmIFBYQTI3eCB8fCBQWEEzeHggfHwgUFhBOTV4IHx8IEFSQ0hfTU1QCiAJaGVscAogCSAgRW5hYmxlIHN1cHBvcnQgZm9yIGlXTU1YdCBjb250ZXh0IHN3aXRjaGluZyBhdCBydW4gdGltZSBpZgogCSAgcnVubmluZyBvbiBhIENQVSB0aGF0IHN1cHBvcnRzIGl0LgpAQCAtMTAxNyw2ICsxMDU3LDExIEBACiAJZGVmYXVsdCB5CiAJYm9vbAogCitjb25maWcgTVVMVElfSVJRX0hBTkRMRVIKKwlib29sCisJaGVscAorCSAgQWxsb3cgZWFjaCBtYWNoaW5lIHRvIHNwZWNpZnkgaXQncyBvd24gSVJRIGhhbmRsZXIgYXQgcnVuIHRpbWUuCisKIGlmICFNTVUKIHNvdXJjZSAiYXJjaC9hcm0vS2NvbmZpZy1ub21tdSIKIGVuZGlmCkBAIC0xMTY0LDcgKzEyMDksNyBAQAogCWJvb2wKIAogY29uZmlnIFBDSQotCWJvb2wgIlBDSSBzdXBwb3J0IiBpZiBBUkNIX0lOVEVHUkFUT1JfQVAgfHwgQVJDSF9WRVJTQVRJTEVfUEIgfHwgQVJDSF9JWFA0WFggfHwgQVJDSF9LUzg2OTUgfHwgTUFDSF9BUk1DT1JFIHx8IEFSQ0hfQ05TM1hYWAorCWJvb2wgIlBDSSBzdXBwb3J0IiBpZiBNSUdIVF9IQVZFX1BDSQogCWhlbHAKIAkgIEZpbmQgb3V0IHdoZXRoZXIgeW91IGhhdmUgYSBQQ0kgbW90aGVyYm9hcmQuIFBDSSBpcyB0aGUgbmFtZSBvZiBhCiAJICBidXMgc3lzdGVtLCBpLmUuIHRoZSB3YXkgdGhlIENQVSB0YWxrcyB0byB0aGUgb3RoZXIgc3R1ZmYgaW5zaWRlCkBAIC0xMTc1LDYgKzEyMjAsMTIgQEAKIAlib29sCiAJZGVwZW5kcyBvbiBQQ0kKIAorY29uZmlnIFBDSV9OQU5PRU5HSU5FCisJYm9vbCAiQlNFIG5hbm9FbmdpbmUgUENJIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBTQTExMDBfTkFOT0VOR0lORQorCWhlbHAKKwkgIEVuYWJsZSBQQ0kgb24gdGhlIEJTRSBuYW5vRW5naW5lIGJvYXJkLgorCiBjb25maWcgUENJX1NZU0NBTEwKIAlkZWZfYm9vbCBQQ0kKIApAQCAtMTIwNSwxMCArMTI1NiwxMSBAQAogCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCiAJZGVwZW5kcyBvbiBHRU5FUklDX0NMT0NLRVZFTlRTCiAJZGVwZW5kcyBvbiBSRUFMVklFV19FQl9BUk0xMU1QIHx8IFJFQUxWSUVXX0VCX0E5TVAgfHwgXAotCQkgTUFDSF9SRUFMVklFV19QQjExTVAgfHwgTUFDSF9SRUFMVklFV19QQlggfHwgQVJDSF9PTUFQNCB8fFwKLQkJIEFSQ0hfUzVQVjMxMCB8fCBBUkNIX1RFR1JBIHx8IEFSQ0hfVTg1MDAgfHwgQVJDSF9WRVhQUkVTU19DQTlYNAorCQkgTUFDSF9SRUFMVklFV19QQjExTVAgfHwgTUFDSF9SRUFMVklFV19QQlggfHwgQVJDSF9PTUFQNCB8fCBcCisJCSBBUkNIX1M1UFYzMTAgfHwgQVJDSF9URUdSQSB8fCBBUkNIX1U4NTAwIHx8IEFSQ0hfVkVYUFJFU1NfQ0E5WDQgfHwgXAorCQkgQVJDSF9NU01fU0NPUlBJT05NUCB8fCBBUkNIX1NITU9CSUxFCiAJc2VsZWN0IFVTRV9HRU5FUklDX1NNUF9IRUxQRVJTCi0Jc2VsZWN0IEhBVkVfQVJNX1NDVQorCXNlbGVjdCBIQVZFX0FSTV9TQ1UgaWYgIUFSQ0hfTVNNX1NDT1JQSU9OTVAKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3Igc3lzdGVtcyB3aXRoIG1vcmUgdGhhbiBvbmUgQ1BVLiBJZiB5b3UgaGF2ZQogCSAgYSBzeXN0ZW0gd2l0aCBvbmx5IG9uZSBDUFUsIGxpa2UgbW9zdCBwZXJzb25hbCBjb21wdXRlcnMsIHNheSBOLiBJZgpAQCAtMTIyOSw3ICsxMjgxLDcgQEAKIGNvbmZpZyBTTVBfT05fVVAKIAlib29sICJBbGxvdyBib290aW5nIFNNUCBrZXJuZWwgb24gdW5pcHJvY2Vzc29yIHN5c3RlbXMgKEVYUEVSSU1FTlRBTCkiCiAJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKLQlkZXBlbmRzIG9uIFNNUCAmJiAhWElQICYmICFUSFVNQjJfS0VSTkVMCisJZGVwZW5kcyBvbiBTTVAgJiYgIVhJUAogCWRlZmF1bHQgeQogCWhlbHAKIAkgIFNNUCBrZXJuZWxzIGNvbnRhaW4gaW5zdHJ1Y3Rpb25zIHdoaWNoIGZhaWwgb24gbm9uLVNNUCBwcm9jZXNzb3JzLgpAQCAtMTI0OCw2ICsxMzAwLDcgQEAKIGNvbmZpZyBIQVZFX0FSTV9UV0QKIAlib29sCiAJZGVwZW5kcyBvbiBTTVAKKwlzZWxlY3QgVElDS19PTkVTSE9UCiAJaGVscAogCSAgVGhpcyBvcHRpb25zIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIEFSTSB0aW1lciBhbmQgd2F0Y2hkb2cgdW5pdAogCkBAIC0xMjgzLDYgKzEzMzYsNyBAQAogY29uZmlnIEhPVFBMVUdfQ1BVCiAJYm9vbCAiU3VwcG9ydCBmb3IgaG90LXBsdWdnYWJsZSBDUFVzIChFWFBFUklNRU5UQUwpIgogCWRlcGVuZHMgb24gU01QICYmIEhPVFBMVUcgJiYgRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiAhQVJDSF9NU00KIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIGV4cGVyaW1lbnQgd2l0aCB0dXJuaW5nIENQVXMgb2ZmIGFuZCBvbi4gIENQVXMKIAkgIGNhbiBiZSBjb250cm9sbGVkIHRocm91Z2ggL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUuCkBAIC0xMjkxLDcgKzEzNDUsNyBAQAogCWJvb2wgIlVzZSBsb2NhbCB0aW1lciBpbnRlcnJ1cHRzIgogCWRlcGVuZHMgb24gU01QCiAJZGVmYXVsdCB5Ci0Jc2VsZWN0IEhBVkVfQVJNX1RXRAorCXNlbGVjdCBIQVZFX0FSTV9UV0QgaWYgIUFSQ0hfTVNNX1NDT1JQSU9OTVAKIAloZWxwCiAJICBFbmFibGUgc3VwcG9ydCBmb3IgbG9jYWwgdGltZXJzIG9uIFNNUCBwbGF0Zm9ybXMsIHJhdGhlciB0aGVuIHRoZQogCSAgbGVnYWN5IElQSSBicm9hZGNhc3QgbWV0aG9kLiAgTG9jYWwgdGltZXJzIGFsbG93cyB0aGUgc3lzdGVtCkBAIC0xMzEwLDcgKzEzNjQsNyBAQAogCWRlZmF1bHQgMTAwCiAKIGNvbmZpZyBUSFVNQjJfS0VSTkVMCi0JYm9vbCAiQ29tcGlsZSB0aGUga2VybmVsIGluIFRodW1iLTIgbW9kZSIKKwlib29sICJDb21waWxlIHRoZSBrZXJuZWwgaW4gVGh1bWItMiBtb2RlIChFWFBFUklNRU5UQUwpIgogCWRlcGVuZHMgb24gQ1BVX1Y3ICYmICFDUFVfVjYgJiYgRVhQRVJJTUVOVEFMCiAJc2VsZWN0IEFFQUJJCiAJc2VsZWN0IEFSTV9BU01fVU5JRklFRApAQCAtMTUyNCw2ICsxNTc4LDcgQEAKIAogY29uZmlnIENDX1NUQUNLUFJPVEVDVE9SCiAJYm9vbCAiRW5hYmxlIC1mc3RhY2stcHJvdGVjdG9yIGJ1ZmZlciBvdmVyZmxvdyBkZXRlY3Rpb24gKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKIAloZWxwCiAJICBUaGlzIG9wdGlvbiB0dXJucyBvbiB0aGUgLWZzdGFjay1wcm90ZWN0b3IgR0NDIGZlYXR1cmUuIFRoaXMKIAkgIGZlYXR1cmUgcHV0cywgYXQgdGhlIGJlZ2lubmluZyBvZiBmdW5jdGlvbnMsIGEgY2FuYXJ5IHZhbHVlIG9uCkBAIC0xNjUwLDYgKzE3MDUsMTkgQEAKIAkgIFNob3VsZCB0aGUgYXRhZ3MgdXNlZCB0byBib290IHRoZSBrZXJuZWwgYmUgZXhwb3J0ZWQgaW4gYW4gImF0YWdzIgogCSAgZmlsZSBpbiBwcm9jZnMuIFVzZWZ1bCB3aXRoIGtleGVjLgogCitjb25maWcgQ1JBU0hfRFVNUAorCWJvb2wgIkJ1aWxkIGtkdW1wIGNyYXNoIGtlcm5lbCAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAorCWhlbHAKKwkgIEdlbmVyYXRlIGNyYXNoIGR1bXAgYWZ0ZXIgYmVpbmcgc3RhcnRlZCBieSBrZXhlYy4gVGhpcyBzaG91bGQKKwkgIGJlIG5vcm1hbGx5IG9ubHkgc2V0IGluIHNwZWNpYWwgY3Jhc2ggZHVtcCBrZXJuZWxzIHdoaWNoIGFyZQorCSAgbG9hZGVkIGluIHRoZSBtYWluIGtlcm5lbCB3aXRoIGtleGVjLXRvb2xzIGludG8gYSBzcGVjaWFsbHkKKwkgIHJlc2VydmVkIHJlZ2lvbiBhbmQgdGhlbiBsYXRlciBleGVjdXRlZCBhZnRlciBhIGNyYXNoIGJ5CisJICBrZHVtcC9rZXhlYy4gVGhlIGNyYXNoIGR1bXAga2VybmVsIG11c3QgYmUgY29tcGlsZWQgdG8gYQorCSAgbWVtb3J5IGFkZHJlc3Mgbm90IHVzZWQgYnkgdGhlIG1haW4ga2VybmVsCisKKwkgIEZvciBtb3JlIGRldGFpbHMgc2VlIERvY3VtZW50YXRpb24va2R1bXAva2R1bXAudHh0CisKIGNvbmZpZyBBVVRPX1pSRUxBRERSCiAJYm9vbCAiQXV0byBjYWxjdWxhdGlvbiBvZiB0aGUgZGVjb21wcmVzc2VkIGtlcm5lbCBpbWFnZSBhZGRyZXNzIgogCWRlcGVuZHMgb24gIVpCT09UX1JPTSAmJiAhQVJDSF9VMzAwCkBAIC0xNzA3LDcgKzE3NzUsNyBAQAogCSAgSW50ZXJuYWwgY29uZmlndXJhdGlvbiBub2RlIGZvciBjb21tb24gY3B1ZnJlcSBvbiBTYW1zdW5nIFNvQwogCiBjb25maWcgQ1BVX0ZSRVFfUzNDMjRYWAotCWJvb2wgIkNQVWZyZXEgZHJpdmVyIGZvciBTYW1zdW5nIFMzQzI0WFggc2VyaWVzIENQVXMiCisJYm9vbCAiQ1BVZnJlcSBkcml2ZXIgZm9yIFNhbXN1bmcgUzNDMjRYWCBzZXJpZXMgQ1BVcyAoRVhQRVJJTUVOVEFMKSIKIAlkZXBlbmRzIG9uIEFSQ0hfUzNDMjQxMCAmJiBDUFVfRlJFUSAmJiBFWFBFUklNRU5UQUwKIAlzZWxlY3QgQ1BVX0ZSRVFfUzNDCiAJaGVscApAQCAtMTcxOSw3ICsxNzg3LDcgQEAKIAkgIElmIGluIGRvdWJ0LCBzYXkgTi4KIAogY29uZmlnIENQVV9GUkVRX1MzQzI0WFhfUExMCi0JYm9vbCAiU3VwcG9ydCBDUFVmcmVxIGNoYW5naW5nIG9mIFBMTCBmcmVxdWVuY3kiCisJYm9vbCAiU3VwcG9ydCBDUFVmcmVxIGNoYW5naW5nIG9mIFBMTCBmcmVxdWVuY3kgKEVYUEVSSU1FTlRBTCkiCiAJZGVwZW5kcyBvbiBDUFVfRlJFUV9TM0MyNFhYICYmIEVYUEVSSU1FTlRBTAogCWhlbHAKIAkgIENvbXBpbGUgaW4gc3VwcG9ydCBmb3IgY2hhbmdpbmcgdGhlIFBMTCBmcmVxdWVuY3kgZnJvbSB0aGUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL0tjb25maWcuZGVidWcgYi9hcmNoL2FybS9LY29uZmlnLmRlYnVnCmluZGV4IDJmZDBiOTkuLjQ5NDIyNGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL0tjb25maWcuZGVidWcKKysrIGIvYXJjaC9hcm0vS2NvbmZpZy5kZWJ1ZwpAQCAtMjMsNyArMjMsNyBAQAogY29uZmlnIEZSQU1FX1BPSU5URVIKIAlib29sCiAJZGVwZW5kcyBvbiAhVEhVTUIyX0tFUk5FTAotCWRlZmF1bHQgeSBpZiAhQVJNX1VOV0lORAorCWRlZmF1bHQgeSBpZiAhQVJNX1VOV0lORCB8fCBGVU5DVElPTl9HUkFQSF9UUkFDRVIKIAloZWxwCiAJICBJZiB5b3Ugc2F5IE4gaGVyZSwgdGhlIHJlc3VsdGluZyBrZXJuZWwgd2lsbCBiZSBzbGlnaHRseSBzbWFsbGVyIGFuZAogCSAgZmFzdGVyLiBIb3dldmVyLCBpZiBuZWl0aGVyIEZSQU1FX1BPSU5URVIgbm9yIEFSTV9VTldJTkQgYXJlIGVuYWJsZWQsCkBAIC0zMSw3ICszMSw3IEBACiAJICByZXBvcnRlZCBpcyBzZXZlcmVseSBsaW1pdGVkLgogCiBjb25maWcgQVJNX1VOV0lORAotCWJvb2wgIkVuYWJsZSBzdGFjayB1bndpbmRpbmcgc3VwcG9ydCIKKwlib29sICJFbmFibGUgc3RhY2sgdW53aW5kaW5nIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCiAJZGVwZW5kcyBvbiBBRUFCSSAmJiBFWFBFUklNRU5UQUwKIAlkZWZhdWx0IHkKIAloZWxwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9NYWtlZmlsZSBiL2FyY2gvYXJtL01ha2VmaWxlCmluZGV4IGI4N2FlZDAuLmMyMmMxYWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL01ha2VmaWxlCkBAIC0xNTQsMTAgKzE1NCwxMSBAQAogbWFjaGluZS0kKENPTkZJR19BUkNIX01WNzhYWDApCQk6PSBtdjc4eHgwCiBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfTVgxKQkJOj0gaW14CiBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfTVgyKQkJOj0gaW14Ci1tYWNoaW5lLSQoQ09ORklHX0FSQ0hfTVgyNSkJCTo9IG14MjUKK21hY2hpbmUtJChDT05GSUdfQVJDSF9NWDI1KQkJOj0gaW14CiBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfTVgzKQkJOj0gbXgzCiBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfTVg1KQkJOj0gbXg1CiBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfTVhDOTEyMzEpCQk6PSBteGM5MTIzMQorbWFjaGluZS0kKENPTkZJR19BUkNIX01YUykJCTo9IG14cwogbWFjaGluZS0kKENPTkZJR19BUkNIX05FVFgpCQk6PSBuZXR4CiBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfTk9NQURJSykJCTo9IG5vbWFkaWsKIG1hY2hpbmUtJChDT05GSUdfQVJDSF9OUzlYWFgpCQk6PSBuczl4eHgKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZSBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQppbmRleCA2NWE3YzFjLi4wYThmNzQ4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCkBAIC00NSw2ICs0NSwxMCBAQAogZW5kaWYKIGVuZGlmCiAKK2lmZXEgKCQoQ09ORklHX0FSQ0hfU0hNT0JJTEUpLHkpCitPQkpTCQkrPSBoZWFkLXNobW9iaWxlLm8KK2VuZGlmCisKICMKICMgV2Ugbm93IGhhdmUgYSBQSUMgZGVjb21wcmVzc29yIGltcGxlbWVudGF0aW9uLiAgRGVjb21wcmVzc29ycyBydW5uaW5nCiAjIGZyb20gUkFNIHNob3VsZCBub3QgZGVmaW5lIFpURVhUQUREUi4gIERlY29tcHJlc3NvcnMgcnVubmluZyBkaXJlY3RseQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQtc2htb2JpbGUuUyBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLXNobW9iaWxlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA5NzNiNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLXNobW9iaWxlLlMKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIFRoZSBoZWFkLWZpbGUgZm9yIFNILU1vYmlsZSBBUk0gcGxhdGZvcm1zCisgKgorICogS3VuaW5vcmkgTW9yaW1vdG8gPGt1bmlub3JpLm1vcmltb3RvLmd4QHJlbmVzYXMuY29tPgorICogU2ltb24gSG9ybWFuIDxob3Jtc0B2ZXJnZS5uZXQuYXU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lmZGVmIENPTkZJR19aQk9PVF9ST00KKworCS5zZWN0aW9uCSIuc3RhcnQiLCAiYXgiCisKKwkvKiBsb2FkIGJvYXJkLXNwZWNpZmljIGluaXRpYWxpemF0aW9uIGNvZGUgKi8KKyNpbmNsdWRlIDxtYWNoL3pib290Lmg+CisKKwliCTFmCitfX2F0YWdzOkAgdGFnICMxCisJLmxvbmcJMTIJCQlAIHRhZy0+aGRyLnNpemUgPSB0YWdfc2l6ZSh0YWdfY29yZSk7CisJLmxvbmcJMHg1NDQxMDAwMQkJQCB0YWctPmhkci50YWcgPSBBVEFHX0NPUkU7CisJLmxvbmcgICAwCQkJQCB0YWctPnUuY29yZS5mbGFncyA9IDA7CisJLmxvbmcJMAkJCUAgdGFnLT51LmNvcmUucGFnZXNpemUgPSAwOworCS5sb25nCTAJCQlAIHRhZy0+dS5jb3JlLnJvb3RkZXYgPSAwOworCUAgdGFnICMyCisJLmxvbmcJOAkJCUAgdGFnLT5oZHIuc2l6ZSA9IHRhZ19zaXplKHRhZ19tZW0zMik7CisJLmxvbmcJMHg1NDQxMDAwMgkJQCB0YWctPmhkci50YWcgPSBBVEFHX01FTTsKKwkubG9uZwlDT05GSUdfTUVNT1JZX1NJWkUJQCB0YWctPnUubWVtLnNpemUgPSBDT05GSUdfTUVNT1JZX1NJWkU7CisJLmxvbmcJQ09ORklHX01FTU9SWV9TVEFSVAlAIEAgdGFnLT51Lm1lbS5zdGFydCA9IENPTkZJR19NRU1PUllfU1RBUlQ7CisJQCB0YWcgIzMKKwkubG9uZwkwCQkJQCB0YWctPmhkci5zaXplID0gMAorCS5sb25nCTAJCQlAIHRhZy0+aGRyLnRhZyA9IEFUQUdfTk9ORTsKKzE6CisKKwkvKiBTZXQgYm9hcmQgSUQgbmVjZXNzYXJ5IGZvciBib290ICovCisJbGRyCXI3LCAxZgkJCQlAIFNldCBtYWNoaW5lIHR5cGUgcmVnaXN0ZXIKKwlhZHIJcjgsIF9fYXRhZ3MJCQlAIFNldCBhdGFnIHJlZ2lzdGVyCisJYgkyZgorCisxIDoJLmxvbmcgTUFDSF9UWVBFCisyIDoKKworI2VuZGlmIC8qIENPTkZJR19aQk9PVF9ST00gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbW1vbi9LY29uZmlnIGIvYXJjaC9hcm0vY29tbW9uL0tjb25maWcKaW5kZXggMGEzNGM4MS4uNzc4NjU1ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29tbW9uL0tjb25maWcKKysrIGIvYXJjaC9hcm0vY29tbW9uL0tjb25maWcKQEAgLTM3LDcgKzM3LDMgQEAKIAogY29uZmlnIFNIQVJQX1NDT09QCiAJYm9vbAotCi1jb25maWcgQ09NTU9OX0NMS0RFVgotCWJvb2wKLQlzZWxlY3QgSEFWRV9DTEsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbW1vbi9NYWtlZmlsZSBiL2FyY2gvYXJtL2NvbW1vbi9NYWtlZmlsZQppbmRleCBlNmU4NjY0Li5lNzUyMWJjYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29tbW9uL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL2NvbW1vbi9NYWtlZmlsZQpAQCAtMTcsMyArMTcsNCBAQAogb2JqLSQoQ09ORklHX0FSQ0hfSVhQMjNYWCkJKz0gdWVuZ2luZS5vCiBvYmotJChDT05GSUdfUENJX0hPU1RfSVRFODE1MikgICs9IGl0ODE1Mi5vCiBvYmotJChDT05GSUdfQ09NTU9OX0NMS0RFVikJKz0gY2xrZGV2Lm8KK29iai0kKENPTkZJR19BUk1fVElNRVJfU1A4MDQpCSs9IHRpbWVyLXNwLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbW1vbi9jbGtkZXYuYyBiL2FyY2gvYXJtL2NvbW1vbi9jbGtkZXYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTJiMmJiNi4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9jb21tb24vY2xrZGV2LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNzkgKzAsMCBAQAotLyoKLSAqICBhcmNoL2FybS9jb21tb24vY2xrZGV2LmMKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA4IFJ1c3NlbGwgS2luZy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIEhlbHBlciBmb3IgdGhlIGNsayBBUEkgdG8gYXNzaXN0IGxvb2tpbmcgdXAgYSBzdHJ1Y3QgY2xrLgotICovCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJyLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0KLSNpbmNsdWRlIDxhc20vY2xrZGV2Lmg+Ci0jaW5jbHVkZSA8bWFjaC9jbGtkZXYuaD4KLQotc3RhdGljIExJU1RfSEVBRChjbG9ja3MpOwotc3RhdGljIERFRklORV9NVVRFWChjbG9ja3NfbXV0ZXgpOwotCi0vKgotICogRmluZCB0aGUgY29ycmVjdCBzdHJ1Y3QgY2xrIGZvciB0aGUgZGV2aWNlIGFuZCBjb25uZWN0aW9uIElELgotICogV2UgZG8gc2xpZ2h0bHkgZnV6enkgbWF0Y2hpbmcgaGVyZToKLSAqICBBbiBlbnRyeSB3aXRoIGEgTlVMTCBJRCBpcyBhc3N1bWVkIHRvIGJlIGEgd2lsZGNhcmQuCi0gKiAgSWYgYW4gZW50cnkgaGFzIGEgZGV2aWNlIElELCBpdCBtdXN0IG1hdGNoCi0gKiAgSWYgYW4gZW50cnkgaGFzIGEgY29ubmVjdGlvbiBJRCwgaXQgbXVzdCBtYXRjaAotICogVGhlbiB3ZSB0YWtlIHRoZSBtb3N0IHNwZWNpZmljIGVudHJ5IC0gd2l0aCB0aGUgZm9sbG93aW5nCi0gKiBvcmRlciBvZiBwcmVjZWRlbmNlOiBkZXYrY29uID4gZGV2IG9ubHkgPiBjb24gb25seS4KLSAqLwotc3RhdGljIHN0cnVjdCBjbGsgKmNsa19maW5kKGNvbnN0IGNoYXIgKmRldl9pZCwgY29uc3QgY2hhciAqY29uX2lkKQotewotCXN0cnVjdCBjbGtfbG9va3VwICpwOwotCXN0cnVjdCBjbGsgKmNsayA9IE5VTEw7Ci0JaW50IG1hdGNoLCBiZXN0ID0gMDsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkocCwgJmNsb2Nrcywgbm9kZSkgewotCQltYXRjaCA9IDA7Ci0JCWlmIChwLT5kZXZfaWQpIHsKLQkJCWlmICghZGV2X2lkIHx8IHN0cmNtcChwLT5kZXZfaWQsIGRldl9pZCkpCi0JCQkJY29udGludWU7Ci0JCQltYXRjaCArPSAyOwotCQl9Ci0JCWlmIChwLT5jb25faWQpIHsKLQkJCWlmICghY29uX2lkIHx8IHN0cmNtcChwLT5jb25faWQsIGNvbl9pZCkpCi0JCQkJY29udGludWU7Ci0JCQltYXRjaCArPSAxOwotCQl9Ci0KLQkJaWYgKG1hdGNoID4gYmVzdCkgewotCQkJY2xrID0gcC0+Y2xrOwotCQkJaWYgKG1hdGNoICE9IDMpCi0JCQkJYmVzdCA9IG1hdGNoOwotCQkJZWxzZQotCQkJCWJyZWFrOwotCQl9Ci0JfQotCXJldHVybiBjbGs7Ci19Ci0KLXN0cnVjdCBjbGsgKmNsa19nZXRfc3lzKGNvbnN0IGNoYXIgKmRldl9pZCwgY29uc3QgY2hhciAqY29uX2lkKQotewotCXN0cnVjdCBjbGsgKmNsazsKLQotCW11dGV4X2xvY2soJmNsb2Nrc19tdXRleCk7Ci0JY2xrID0gY2xrX2ZpbmQoZGV2X2lkLCBjb25faWQpOwotCWlmIChjbGsgJiYgIV9fY2xrX2dldChjbGspKQotCQljbGsgPSBOVUxMOwotCW11dGV4X3VubG9jaygmY2xvY2tzX211dGV4KTsKLQotCXJldHVybiBjbGsgPyBjbGsgOiBFUlJfUFRSKC1FTk9FTlQpOwotfQotRVhQT1JUX1NZTUJPTChjbGtfZ2V0X3N5cyk7Ci0KLXN0cnVjdCBjbGsgKmNsa19nZXQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpjb25faWQpCi17Ci0JY29uc3QgY2hhciAqZGV2X2lkID0gZGV2ID8gZGV2X25hbWUoZGV2KSA6IE5VTEw7Ci0KLQlyZXR1cm4gY2xrX2dldF9zeXMoZGV2X2lkLCBjb25faWQpOwotfQotRVhQT1JUX1NZTUJPTChjbGtfZ2V0KTsKLQotdm9pZCBjbGtfcHV0KHN0cnVjdCBjbGsgKmNsaykKLXsKLQlfX2Nsa19wdXQoY2xrKTsKLX0KLUVYUE9SVF9TWU1CT0woY2xrX3B1dCk7Ci0KLXZvaWQgY2xrZGV2X2FkZChzdHJ1Y3QgY2xrX2xvb2t1cCAqY2wpCi17Ci0JbXV0ZXhfbG9jaygmY2xvY2tzX211dGV4KTsKLQlsaXN0X2FkZF90YWlsKCZjbC0+bm9kZSwgJmNsb2Nrcyk7Ci0JbXV0ZXhfdW5sb2NrKCZjbG9ja3NfbXV0ZXgpOwotfQotRVhQT1JUX1NZTUJPTChjbGtkZXZfYWRkKTsKLQotdm9pZCBfX2luaXQgY2xrZGV2X2FkZF90YWJsZShzdHJ1Y3QgY2xrX2xvb2t1cCAqY2wsIHNpemVfdCBudW0pCi17Ci0JbXV0ZXhfbG9jaygmY2xvY2tzX211dGV4KTsKLQl3aGlsZSAobnVtLS0pIHsKLQkJbGlzdF9hZGRfdGFpbCgmY2wtPm5vZGUsICZjbG9ja3MpOwotCQljbCsrOwotCX0KLQltdXRleF91bmxvY2soJmNsb2Nrc19tdXRleCk7Ci19Ci0KLSNkZWZpbmUgTUFYX0RFVl9JRAkyMAotI2RlZmluZSBNQVhfQ09OX0lECTE2Ci0KLXN0cnVjdCBjbGtfbG9va3VwX2FsbG9jIHsKLQlzdHJ1Y3QgY2xrX2xvb2t1cCBjbDsKLQljaGFyCWRldl9pZFtNQVhfREVWX0lEXTsKLQljaGFyCWNvbl9pZFtNQVhfQ09OX0lEXTsKLX07Ci0KLXN0cnVjdCBjbGtfbG9va3VwICpjbGtkZXZfYWxsb2Moc3RydWN0IGNsayAqY2xrLCBjb25zdCBjaGFyICpjb25faWQsCi0JY29uc3QgY2hhciAqZGV2X2ZtdCwgLi4uKQotewotCXN0cnVjdCBjbGtfbG9va3VwX2FsbG9jICpjbGE7Ci0KLQljbGEgPSBremFsbG9jKHNpemVvZigqY2xhKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjbGEpCi0JCXJldHVybiBOVUxMOwotCi0JY2xhLT5jbC5jbGsgPSBjbGs7Ci0JaWYgKGNvbl9pZCkgewotCQlzdHJsY3B5KGNsYS0+Y29uX2lkLCBjb25faWQsIHNpemVvZihjbGEtPmNvbl9pZCkpOwotCQljbGEtPmNsLmNvbl9pZCA9IGNsYS0+Y29uX2lkOwotCX0KLQotCWlmIChkZXZfZm10KSB7Ci0JCXZhX2xpc3QgYXA7Ci0KLQkJdmFfc3RhcnQoYXAsIGRldl9mbXQpOwotCQl2c2NucHJpbnRmKGNsYS0+ZGV2X2lkLCBzaXplb2YoY2xhLT5kZXZfaWQpLCBkZXZfZm10LCBhcCk7Ci0JCWNsYS0+Y2wuZGV2X2lkID0gY2xhLT5kZXZfaWQ7Ci0JCXZhX2VuZChhcCk7Ci0JfQotCi0JcmV0dXJuICZjbGEtPmNsOwotfQotRVhQT1JUX1NZTUJPTChjbGtkZXZfYWxsb2MpOwotCi1pbnQgY2xrX2FkZF9hbGlhcyhjb25zdCBjaGFyICphbGlhcywgY29uc3QgY2hhciAqYWxpYXNfZGV2X25hbWUsIGNoYXIgKmlkLAotCXN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgY2xrICpyID0gY2xrX2dldChkZXYsIGlkKTsKLQlzdHJ1Y3QgY2xrX2xvb2t1cCAqbDsKLQotCWlmIChJU19FUlIocikpCi0JCXJldHVybiBQVFJfRVJSKHIpOwotCi0JbCA9IGNsa2Rldl9hbGxvYyhyLCBhbGlhcywgYWxpYXNfZGV2X25hbWUpOwotCWNsa19wdXQocik7Ci0JaWYgKCFsKQotCQlyZXR1cm4gLUVOT0RFVjsKLQljbGtkZXZfYWRkKGwpOwotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTChjbGtfYWRkX2FsaWFzKTsKLQotLyoKLSAqIGNsa2Rldl9kcm9wIC0gcmVtb3ZlIGEgY2xvY2sgZHluYW1pY2FsbHkgYWxsb2NhdGVkCi0gKi8KLXZvaWQgY2xrZGV2X2Ryb3Aoc3RydWN0IGNsa19sb29rdXAgKmNsKQotewotCW11dGV4X2xvY2soJmNsb2Nrc19tdXRleCk7Ci0JbGlzdF9kZWwoJmNsLT5ub2RlKTsKLQltdXRleF91bmxvY2soJmNsb2Nrc19tdXRleCk7Ci0Ja2ZyZWUoY2wpOwotfQotRVhQT1JUX1NZTUJPTChjbGtkZXZfZHJvcCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb21tb24vZG1hYm91bmNlLmMgYi9hcmNoL2FybS9jb21tb24vZG1hYm91bmNlLmMKaW5kZXggY2MwYTkzMi4uZTU2ODE2MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29tbW9uL2RtYWJvdW5jZS5jCisrKyBiL2FyY2gvYXJtL2NvbW1vbi9kbWFib3VuY2UuYwpAQCAtMzI4LDcgKzMyOCw3IEBACiAgKiBzdWJzdGl0dXRlIHRoZSBzYWZlIGJ1ZmZlciBmb3IgdGhlIHVuc2FmZSBvbmUuCiAgKiAoYmFzaWNhbGx5IG1vdmUgdGhlIGJ1ZmZlciBmcm9tIGFuIHVuc2FmZSBhcmVhIHRvIGEgc2FmZSBvbmUpCiAgKi8KLWRtYV9hZGRyX3QgZG1hX21hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpwdHIsIHNpemVfdCBzaXplLAorZG1hX2FkZHJfdCBfX2RtYV9tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwKIAkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQogewogCWRldl9kYmcoZGV2LCAiJXMocHRyPSVwLHNpemU9JWQsZGlyPSV4KVxuIiwKQEAgLTMzOCw3ICszMzgsNyBAQAogCiAJcmV0dXJuIG1hcF9zaW5nbGUoZGV2LCBwdHIsIHNpemUsIGRpcik7CiB9Ci1FWFBPUlRfU1lNQk9MKGRtYV9tYXBfc2luZ2xlKTsKK0VYUE9SVF9TWU1CT0woX19kbWFfbWFwX3NpbmdsZSk7CiAKIC8qCiAgKiBzZWUgaWYgYSBtYXBwZWQgYWRkcmVzcyB3YXMgcmVhbGx5IGEgInNhZmUiIGJ1ZmZlciBhbmQgaWYgc28sIGNvcHkKQEAgLTM0Niw3ICszNDYsNyBAQAogICogdGhlIHNhZmUgYnVmZmVyLiAgKGJhc2ljYWxseSByZXR1cm4gdGhpbmdzIGJhY2sgdG8gdGhlIHdheSB0aGV5CiAgKiBzaG91bGQgYmUpCiAgKi8KLXZvaWQgZG1hX3VubWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHIsIHNpemVfdCBzaXplLAordm9pZCBfX2RtYV91bm1hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyLCBzaXplX3Qgc2l6ZSwKIAkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQogewogCWRldl9kYmcoZGV2LCAiJXMocHRyPSVwLHNpemU9JWQsZGlyPSV4KVxuIiwKQEAgLTM1NCw5ICszNTQsOSBAQAogCiAJdW5tYXBfc2luZ2xlKGRldiwgZG1hX2FkZHIsIHNpemUsIGRpcik7CiB9Ci1FWFBPUlRfU1lNQk9MKGRtYV91bm1hcF9zaW5nbGUpOworRVhQT1JUX1NZTUJPTChfX2RtYV91bm1hcF9zaW5nbGUpOwogCi1kbWFfYWRkcl90IGRtYV9tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwYWdlICpwYWdlLAorZG1hX2FkZHJfdCBfX2RtYV9tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwYWdlICpwYWdlLAogCQl1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKIHsKIAlkZXZfZGJnKGRldiwgIiVzKHBhZ2U9JXAsb2ZmPSUjbHgsc2l6ZT0lengsZGlyPSV4KVxuIiwKQEAgLTM3Miw3ICszNzIsNyBAQAogCiAJcmV0dXJuIG1hcF9zaW5nbGUoZGV2LCBwYWdlX2FkZHJlc3MocGFnZSkgKyBvZmZzZXQsIHNpemUsIGRpcik7CiB9Ci1FWFBPUlRfU1lNQk9MKGRtYV9tYXBfcGFnZSk7CitFWFBPUlRfU1lNQk9MKF9fZG1hX21hcF9wYWdlKTsKIAogLyoKICAqIHNlZSBpZiBhIG1hcHBlZCBhZGRyZXNzIHdhcyByZWFsbHkgYSAic2FmZSIgYnVmZmVyIGFuZCBpZiBzbywgY29weQpAQCAtMzgwLDcgKzM4MCw3IEBACiAgKiB0aGUgc2FmZSBidWZmZXIuICAoYmFzaWNhbGx5IHJldHVybiB0aGluZ3MgYmFjayB0byB0aGUgd2F5IHRoZXkKICAqIHNob3VsZCBiZSkKICAqLwotdm9pZCBkbWFfdW5tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHIsIHNpemVfdCBzaXplLAordm9pZCBfX2RtYV91bm1hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfYWRkciwgc2l6ZV90IHNpemUsCiAJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKIHsKIAlkZXZfZGJnKGRldiwgIiVzKHB0cj0lcCxzaXplPSVkLGRpcj0leClcbiIsCkBAIC0zODgsNyArMzg4LDcgQEAKIAogCXVubWFwX3NpbmdsZShkZXYsIGRtYV9hZGRyLCBzaXplLCBkaXIpOwogfQotRVhQT1JUX1NZTUJPTChkbWFfdW5tYXBfcGFnZSk7CitFWFBPUlRfU1lNQk9MKF9fZG1hX3VubWFwX3BhZ2UpOwogCiBpbnQgZG1hYm91bmNlX3N5bmNfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgYWRkciwKIAkJdW5zaWduZWQgbG9uZyBvZmYsIHNpemVfdCBzeiwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29tbW9uL2dpYy5jIGIvYXJjaC9hcm0vY29tbW9uL2dpYy5jCmluZGV4IGU2Mzg4ZGMuLjBiODllZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbW1vbi9naWMuYworKysgYi9hcmNoL2FybS9jb21tb24vZ2ljLmMKQEAgLTM1LDYgKzM1LDkgQEAKIAogc3RhdGljIERFRklORV9TUElOTE9DSyhpcnFfY29udHJvbGxlcl9sb2NrKTsKIAorLyogQWRkcmVzcyBvZiBHSUMgMCBDUFUgaW50ZXJmYWNlICovCit2b2lkIF9faW9tZW0gKmdpY19jcHVfYmFzZV9hZGRyIF9fcmVhZF9tb3N0bHk7CisKIHN0cnVjdCBnaWNfY2hpcF9kYXRhIHsKIAl1bnNpZ25lZCBpbnQgaXJxX29mZnNldDsKIAl2b2lkIF9faW9tZW0gKmRpc3RfYmFzZTsKQEAgLTQ1LDcgKzQ4LDcgQEAKICNkZWZpbmUgTUFYX0dJQ19OUgkxCiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCBnaWNfY2hpcF9kYXRhIGdpY19kYXRhW01BWF9HSUNfTlJdOworc3RhdGljIHN0cnVjdCBnaWNfY2hpcF9kYXRhIGdpY19kYXRhW01BWF9HSUNfTlJdIF9fcmVhZF9tb3N0bHk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2lvbWVtICpnaWNfZGlzdF9iYXNlKHVuc2lnbmVkIGludCBpcnEpCiB7CkBAIC0yMTMsMjEgKzIxNiwxNiBAQAogCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKGlycSwgZ2ljX2hhbmRsZV9jYXNjYWRlX2lycSk7CiB9CiAKLXZvaWQgX19pbml0IGdpY19kaXN0X2luaXQodW5zaWduZWQgaW50IGdpY19uciwgdm9pZCBfX2lvbWVtICpiYXNlLAotCQkJICB1bnNpZ25lZCBpbnQgaXJxX3N0YXJ0KQorc3RhdGljIHZvaWQgX19pbml0IGdpY19kaXN0X2luaXQoc3RydWN0IGdpY19jaGlwX2RhdGEgKmdpYywKKwl1bnNpZ25lZCBpbnQgaXJxX3N0YXJ0KQogewogCXVuc2lnbmVkIGludCBnaWNfaXJxcywgaXJxX2xpbWl0LCBpOworCXZvaWQgX19pb21lbSAqYmFzZSA9IGdpYy0+ZGlzdF9iYXNlOwogCXUzMiBjcHVtYXNrID0gMSA8PCBzbXBfcHJvY2Vzc29yX2lkKCk7CiAKLQlpZiAoZ2ljX25yID49IE1BWF9HSUNfTlIpCi0JCUJVRygpOwotCiAJY3B1bWFzayB8PSBjcHVtYXNrIDw8IDg7CiAJY3B1bWFzayB8PSBjcHVtYXNrIDw8IDE2OwogCi0JZ2ljX2RhdGFbZ2ljX25yXS5kaXN0X2Jhc2UgPSBiYXNlOwotCWdpY19kYXRhW2dpY19ucl0uaXJxX29mZnNldCA9IChpcnFfc3RhcnQgLSAxKSAmIH4zMTsKLQogCXdyaXRlbCgwLCBiYXNlICsgR0lDX0RJU1RfQ1RSTCk7CiAKIAkvKgpAQCAtMjY3LDcgKzI2NSw3IEBACiAJLyoKIAkgKiBMaW1pdCBudW1iZXIgb2YgaW50ZXJydXB0cyByZWdpc3RlcmVkIHRvIHRoZSBwbGF0Zm9ybSBtYXhpbXVtCiAJICovCi0JaXJxX2xpbWl0ID0gZ2ljX2RhdGFbZ2ljX25yXS5pcnFfb2Zmc2V0ICsgZ2ljX2lycXM7CisJaXJxX2xpbWl0ID0gZ2ljLT5pcnFfb2Zmc2V0ICsgZ2ljX2lycXM7CiAJaWYgKFdBUk5fT04oaXJxX2xpbWl0ID4gTlJfSVJRUykpCiAJCWlycV9saW1pdCA9IE5SX0lSUVM7CiAKQEAgLTI3Niw3ICsyNzQsNyBAQAogCSAqLwogCWZvciAoaSA9IGlycV9zdGFydDsgaSA8IGlycV9saW1pdDsgaSsrKSB7CiAJCXNldF9pcnFfY2hpcChpLCAmZ2ljX2NoaXApOwotCQlzZXRfaXJxX2NoaXBfZGF0YShpLCAmZ2ljX2RhdGFbZ2ljX25yXSk7CisJCXNldF9pcnFfY2hpcF9kYXRhKGksIGdpYyk7CiAJCXNldF9pcnFfaGFuZGxlcihpLCBoYW5kbGVfbGV2ZWxfaXJxKTsKIAkJc2V0X2lycV9mbGFncyhpLCBJUlFGX1ZBTElEIHwgSVJRRl9QUk9CRSk7CiAJfQpAQCAtMjg0LDE5ICsyODIsMTIgQEAKIAl3cml0ZWwoMSwgYmFzZSArIEdJQ19ESVNUX0NUUkwpOwogfQogCi12b2lkIF9fY3B1aW5pdCBnaWNfY3B1X2luaXQodW5zaWduZWQgaW50IGdpY19uciwgdm9pZCBfX2lvbWVtICpiYXNlKQorc3RhdGljIHZvaWQgX19jcHVpbml0IGdpY19jcHVfaW5pdChzdHJ1Y3QgZ2ljX2NoaXBfZGF0YSAqZ2ljKQogewotCXZvaWQgX19pb21lbSAqZGlzdF9iYXNlOworCXZvaWQgX19pb21lbSAqZGlzdF9iYXNlID0gZ2ljLT5kaXN0X2Jhc2U7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gZ2ljLT5jcHVfYmFzZTsKIAlpbnQgaTsKIAotCWlmIChnaWNfbnIgPj0gTUFYX0dJQ19OUikKLQkJQlVHKCk7Ci0KLQlkaXN0X2Jhc2UgPSBnaWNfZGF0YVtnaWNfbnJdLmRpc3RfYmFzZTsKLQlCVUdfT04oIWRpc3RfYmFzZSk7Ci0KLQlnaWNfZGF0YVtnaWNfbnJdLmNwdV9iYXNlID0gYmFzZTsKLQogCS8qCiAJICogRGVhbCB3aXRoIHRoZSBiYW5rZWQgUFBJIGFuZCBTR0kgaW50ZXJydXB0cyAtIGRpc2FibGUgYWxsCiAJICogUFBJIGludGVycnVwdHMsIGVuc3VyZSBhbGwgU0dJIGludGVycnVwdHMgYXJlIGVuYWJsZWQuCkBAIC0zMTQsNiArMzA1LDQyIEBACiAJd3JpdGVsKDEsIGJhc2UgKyBHSUNfQ1BVX0NUUkwpOwogfQogCit2b2lkIF9faW5pdCBnaWNfaW5pdCh1bnNpZ25lZCBpbnQgZ2ljX25yLCB1bnNpZ25lZCBpbnQgaXJxX3N0YXJ0LAorCXZvaWQgX19pb21lbSAqZGlzdF9iYXNlLCB2b2lkIF9faW9tZW0gKmNwdV9iYXNlKQoreworCXN0cnVjdCBnaWNfY2hpcF9kYXRhICpnaWM7CisKKwlCVUdfT04oZ2ljX25yID49IE1BWF9HSUNfTlIpOworCisJZ2ljID0gJmdpY19kYXRhW2dpY19ucl07CisJZ2ljLT5kaXN0X2Jhc2UgPSBkaXN0X2Jhc2U7CisJZ2ljLT5jcHVfYmFzZSA9IGNwdV9iYXNlOworCWdpYy0+aXJxX29mZnNldCA9IChpcnFfc3RhcnQgLSAxKSAmIH4zMTsKKworCWlmIChnaWNfbnIgPT0gMCkKKwkJZ2ljX2NwdV9iYXNlX2FkZHIgPSBjcHVfYmFzZTsKKworCWdpY19kaXN0X2luaXQoZ2ljLCBpcnFfc3RhcnQpOworCWdpY19jcHVfaW5pdChnaWMpOworfQorCit2b2lkIF9fY3B1aW5pdCBnaWNfc2Vjb25kYXJ5X2luaXQodW5zaWduZWQgaW50IGdpY19ucikKK3sKKwlCVUdfT04oZ2ljX25yID49IE1BWF9HSUNfTlIpOworCisJZ2ljX2NwdV9pbml0KCZnaWNfZGF0YVtnaWNfbnJdKTsKK30KKwordm9pZCBfX2NwdWluaXQgZ2ljX2VuYWJsZV9wcGkodW5zaWduZWQgaW50IGlycSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWlycV90b19kZXNjKGlycSktPnN0YXR1cyB8PSBJUlFfTk9QUk9CRTsKKwlnaWNfdW5tYXNrX2lycShpcnEpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKwogI2lmZGVmIENPTkZJR19TTVAKIHZvaWQgZ2ljX3JhaXNlX3NvZnRpcnEoY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2ssIHVuc2lnbmVkIGludCBpcnEpCiB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb21tb24vdGltZXItc3AuYyBiL2FyY2gvYXJtL2NvbW1vbi90aW1lci1zcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlZjMzNDIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9jb21tb24vdGltZXItc3AuYwpAQCAtMCwwICsxLDE1MiBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9jb21tb24vdGltZXItc3AuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTkgLSAyMDAzIEFSTSBMaW1pdGVkCisgKiAgQ29weXJpZ2h0IChDKSAyMDAwIERlZXAgQmx1ZSBTb2x1dGlvbnMgTHRkCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jbG9ja2NoaXBzLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9hcm1fdGltZXIuaD4KKworLyoKKyAqIFRoZXNlIHRpbWVycyBhcmUgY3VycmVudGx5IGFsd2F5cyBzZXR1cCB0byBiZSBjbG9ja2VkIGF0IDFNSHouCisgKi8KKyNkZWZpbmUgVElNRVJfRlJFUV9LSFoJKDEwMDApCisjZGVmaW5lIFRJTUVSX1JFTE9BRAkoVElNRVJfRlJFUV9LSFogKiAxMDAwIC8gSFopCisKK3N0YXRpYyB2b2lkIF9faW9tZW0gKmNsa3NyY19iYXNlOworCitzdGF0aWMgY3ljbGVfdCBzcDgwNF9yZWFkKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MpCit7CisJcmV0dXJuIH5yZWFkbChjbGtzcmNfYmFzZSArIFRJTUVSX1ZBTFVFKTsKK30KKworc3RhdGljIHN0cnVjdCBjbG9ja3NvdXJjZSBjbG9ja3NvdXJjZV9zcDgwNCA9IHsKKwkubmFtZQkJPSAidGltZXIzIiwKKwkucmF0aW5nCQk9IDIwMCwKKwkucmVhZAkJPSBzcDgwNF9yZWFkLAorCS5tYXNrCQk9IENMT0NLU09VUkNFX01BU0soMzIpLAorCS5mbGFncwkJPSBDTE9DS19TT1VSQ0VfSVNfQ09OVElOVU9VUywKK307CisKK3ZvaWQgX19pbml0IHNwODA0X2Nsb2Nrc291cmNlX2luaXQodm9pZCBfX2lvbWVtICpiYXNlKQoreworCXN0cnVjdCBjbG9ja3NvdXJjZSAqY3MgPSAmY2xvY2tzb3VyY2Vfc3A4MDQ7CisKKwljbGtzcmNfYmFzZSA9IGJhc2U7CisKKwkvKiBzZXR1cCB0aW1lciAwIGFzIGZyZWUtcnVubmluZyBjbG9ja3NvdXJjZSAqLworCXdyaXRlbCgwLCBjbGtzcmNfYmFzZSArIFRJTUVSX0NUUkwpOworCXdyaXRlbCgweGZmZmZmZmZmLCBjbGtzcmNfYmFzZSArIFRJTUVSX0xPQUQpOworCXdyaXRlbCgweGZmZmZmZmZmLCBjbGtzcmNfYmFzZSArIFRJTUVSX1ZBTFVFKTsKKwl3cml0ZWwoVElNRVJfQ1RSTF8zMkJJVCB8IFRJTUVSX0NUUkxfRU5BQkxFIHwgVElNRVJfQ1RSTF9QRVJJT0RJQywKKwkJY2xrc3JjX2Jhc2UgKyBUSU1FUl9DVFJMKTsKKworCWNsb2Nrc291cmNlX3JlZ2lzdGVyX2toeihjcywgVElNRVJfRlJFUV9LSFopOworfQorCisKK3N0YXRpYyB2b2lkIF9faW9tZW0gKmNsa2V2dF9iYXNlOworCisvKgorICogSVJRIGhhbmRsZXIgZm9yIHRoZSB0aW1lcgorICovCitzdGF0aWMgaXJxcmV0dXJuX3Qgc3A4MDRfdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQgPSBkZXZfaWQ7CisKKwkvKiBjbGVhciB0aGUgaW50ZXJydXB0ICovCisJd3JpdGVsKDEsIGNsa2V2dF9iYXNlICsgVElNRVJfSU5UQ0xSKTsKKworCWV2dC0+ZXZlbnRfaGFuZGxlcihldnQpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCBzcDgwNF9zZXRfbW9kZShlbnVtIGNsb2NrX2V2ZW50X21vZGUgbW9kZSwKKwlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpCit7CisJdW5zaWduZWQgbG9uZyBjdHJsID0gVElNRVJfQ1RSTF8zMkJJVCB8IFRJTUVSX0NUUkxfSUU7CisKKwl3cml0ZWwoY3RybCwgY2xrZXZ0X2Jhc2UgKyBUSU1FUl9DVFJMKTsKKworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgQ0xPQ0tfRVZUX01PREVfUEVSSU9ESUM6CisJCXdyaXRlbChUSU1FUl9SRUxPQUQsIGNsa2V2dF9iYXNlICsgVElNRVJfTE9BRCk7CisJCWN0cmwgfD0gVElNRVJfQ1RSTF9QRVJJT0RJQyB8IFRJTUVSX0NUUkxfRU5BQkxFOworCQlicmVhazsKKworCWNhc2UgQ0xPQ0tfRVZUX01PREVfT05FU0hPVDoKKwkJLyogcGVyaW9kIHNldCwgYW5kIHRpbWVyIGVuYWJsZWQgaW4gJ25leHRfZXZlbnQnIGhvb2sgKi8KKwkJY3RybCB8PSBUSU1FUl9DVFJMX09ORVNIT1Q7CisJCWJyZWFrOworCisJY2FzZSBDTE9DS19FVlRfTU9ERV9VTlVTRUQ6CisJY2FzZSBDTE9DS19FVlRfTU9ERV9TSFVURE9XTjoKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwl3cml0ZWwoY3RybCwgY2xrZXZ0X2Jhc2UgKyBUSU1FUl9DVFJMKTsKK30KKworc3RhdGljIGludCBzcDgwNF9zZXRfbmV4dF9ldmVudCh1bnNpZ25lZCBsb25nIG5leHQsCisJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0KQoreworCXVuc2lnbmVkIGxvbmcgY3RybCA9IHJlYWRsKGNsa2V2dF9iYXNlICsgVElNRVJfQ1RSTCk7CisKKwl3cml0ZWwobmV4dCwgY2xrZXZ0X2Jhc2UgKyBUSU1FUl9MT0FEKTsKKwl3cml0ZWwoY3RybCB8IFRJTUVSX0NUUkxfRU5BQkxFLCBjbGtldnRfYmFzZSArIFRJTUVSX0NUUkwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlIHNwODA0X2Nsb2NrZXZlbnQgPSB7CisJLm5hbWUJCT0gInRpbWVyMCIsCisJLnNoaWZ0CQk9IDMyLAorCS5mZWF0dXJlcyAgICAgICA9IENMT0NLX0VWVF9GRUFUX1BFUklPRElDIHwgQ0xPQ0tfRVZUX0ZFQVRfT05FU0hPVCwKKwkuc2V0X21vZGUJPSBzcDgwNF9zZXRfbW9kZSwKKwkuc2V0X25leHRfZXZlbnQJPSBzcDgwNF9zZXRfbmV4dF9ldmVudCwKKwkucmF0aW5nCQk9IDMwMCwKKwkuY3B1bWFzawk9IGNwdV9hbGxfbWFzaywKK307CisKK3N0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIHNwODA0X3RpbWVyX2lycSA9IHsKKwkubmFtZQkJPSAidGltZXIiLAorCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiB8IElSUUZfSVJRUE9MTCwKKwkuaGFuZGxlcgk9IHNwODA0X3RpbWVyX2ludGVycnVwdCwKKwkuZGV2X2lkCQk9ICZzcDgwNF9jbG9ja2V2ZW50LAorfTsKKwordm9pZCBfX2luaXQgc3A4MDRfY2xvY2tldmVudHNfaW5pdCh2b2lkIF9faW9tZW0gKmJhc2UsIHVuc2lnbmVkIGludCB0aW1lcl9pcnEpCit7CisJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0ID0gJnNwODA0X2Nsb2NrZXZlbnQ7CisKKwljbGtldnRfYmFzZSA9IGJhc2U7CisKKwlldnQtPmlycSA9IHRpbWVyX2lycTsKKwlldnQtPm11bHQgPSBkaXZfc2MoVElNRVJfRlJFUV9LSFosIE5TRUNfUEVSX01TRUMsIGV2dC0+c2hpZnQpOworCWV2dC0+bWF4X2RlbHRhX25zID0gY2xvY2tldmVudF9kZWx0YTJucygweGZmZmZmZmZmLCBldnQpOworCWV2dC0+bWluX2RlbHRhX25zID0gY2xvY2tldmVudF9kZWx0YTJucygweGYsIGV2dCk7CisKKwlzZXR1cF9pcnEodGltZXJfaXJxLCAmc3A4MDRfdGltZXJfaXJxKTsKKwljbG9ja2V2ZW50c19yZWdpc3Rlcl9kZXZpY2UoZXZ0KTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvYWc1ZXZtX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvYWc1ZXZtX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjljZjU2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY29uZmlncy9hZzVldm1fZGVmY29uZmlnCkBAIC0wLDAgKzEsODMgQEAKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX0lLQ09ORklHPXkKK0NPTkZJR19JS0NPTkZJR19QUk9DPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE2CitDT05GSUdfTkFNRVNQQUNFUz15CisjIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAorIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAorIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU0hNT0JJTEU9eQorQ09ORklHX0FSQ0hfU0g3M0EwPXkKK0NPTkZJR19NQUNIX0FHNUVWTT15CitDT05GSUdfTUVNT1JZX1NJWkU9MHgxMDAwMDAwMAorQ09ORklHX0NQVV9CUFJFRElDVF9ESVNBQkxFPXkKK0NPTkZJR19BUk1fRVJSQVRBXzQzMDk3Mz15CitDT05GSUdfQVJNX0VSUkFUQV80NTg2OTM9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19BRUFCST15CisjIENPTkZJR19PQUJJX0NPTVBBVCBpcyBub3Qgc2V0CitDT05GSUdfSElHSE1FTT15CitDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCitDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKK0NPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eTAgY29uc29sZT10dHlTQzIsMTE1MjAwIGVhcmx5cHJpbnRrPXNoLXNjaS4yLDExNTIwMCBpZ25vcmVfbG9nbGV2ZWwiCitDT05GSUdfQ01ETElORV9GT1JDRT15CitDT05GSUdfS0VYRUM9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorQ09ORklHX1BNPXkKKyMgQ09ORklHX1NVU1BFTkQgaXMgbm90IHNldAorQ09ORklHX1BNX1JVTlRJTUU9eQorQ09ORklHX05FVD15CitDT05GSUdfUEFDS0VUPXkKK0NPTkZJR19VTklYPXkKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0RJQUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfQkxLX0RFViBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19TTVNDOTExWD15CisjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTiBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfU1BBUlNFS01BUD15CisjIENPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWCBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfRVZERVY9eQorIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9TSF9TQ0k9eQorQ09ORklHX1NFUklBTF9TSF9TQ0lfTlJfVUFSVFM9OQorQ09ORklHX1NFUklBTF9TSF9TQ0lfQ09OU09MRT15CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorQ09ORklHX0kyQz15CitDT05GSUdfSTJDX1NIX01PQklMRT15CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfRkI9eQorQ09ORklHX0ZCX1NIX01PQklMRV9MQ0RDPXkKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZPXkKKyMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAorIyBDT05GSUdfSU5PVElGWV9VU0VSIGlzIG5vdCBzZXQKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19NSVNDX0ZJTEVTWVNURU1TIGlzIG5vdCBzZXQKK0NPTkZJR19NQUdJQ19TWVNSUT15CitDT05GSUdfREVCVUdfS0VSTkVMPXkKKyMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2Ftc19kZWx0YV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2Ftc19kZWx0YV9kZWZjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1ZGU0NWUuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9hbXNfZGVsdGFfZGVmY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsMTIxICswLDAgQEAKLUNPTkZJR19FWFBFUklNRU5UQUw9eQotIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTVklQQz15Ci1DT05GSUdfVFJFRV9QUkVFTVBUX1JDVT15Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAotQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19FTUJFRERFRD15Ci0jIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0xBQj15Ci1DT05GSUdfTU9EVUxFUz15Ci1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15Ci0jIENPTkZJR19MQkRBRiBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9PTUFQPXkKLUNPTkZJR19BUkNIX09NQVAxPXkKLUNPTkZJR19PTUFQX01CT1hfRldLPW0KLUNPTkZJR19NQUNIX0FNU19ERUxUQT15Ci1DT05GSUdfT01BUF9BUk1fMTUwTUhaPXkKLSMgQ09ORklHX09NQVBfQVJNXzYwTUhaIGlzIG5vdCBzZXQKLUNPTkZJR19QUkVFTVBUPXkKLUNPTkZJR19BRUFCST15Ci1DT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCi1DT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKLUNPTkZJR19DTURMSU5FPSJtZW09MzJNIGNvbnNvbGU9dHR5UzAsMTE1MjAwbjggcm9vdD0vZGV2L3JhbTAgaW5pdHJkPTB4MTFjMDAwMDAsNE0iCi1DT05GSUdfRlBFX05XRlBFPXkKLUNPTkZJR19QTT15Ci0jIENPTkZJR19TVVNQRU5EIGlzIG5vdCBzZXQKLUNPTkZJR19QTV9SVU5USU1FPXkKLUNPTkZJR19ORVQ9eQotQ09ORklHX1BBQ0tFVD15Ci1DT05GSUdfVU5JWD15Ci1DT05GSUdfSU5FVD15Ci1DT05GSUdfSVBfTVVMVElDQVNUPXkKLUNPTkZJR19JUFY2PXkKLSMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREPXkKLUNPTkZJR19NVERfUEFSVElUSU9OUz15Ci1DT05GSUdfTVREX0NIQVI9eQotQ09ORklHX01URF9CTE9DSz15Ci1DT05GSUdfTVREX05BTkQ9eQotQ09ORklHX01URF9OQU5EX0FNU19ERUxUQT15Ci1DT05GSUdfQkxLX0RFVl9MT09QPXkKLUNPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fU0laRT04MTkyCi1DT05GSUdfU0NTST15Ci1DT05GSUdfQkxLX0RFVl9TRD15Ci1DT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19VU0JfQ0FUQz15Ci1DT05GSUdfVVNCX0tBV0VUSD15Ci1DT05GSUdfVVNCX1BFR0FTVVM9eQotQ09ORklHX1VTQl9SVEw4MTUwPXkKLUNPTkZJR19VU0JfVVNCTkVUPXkKLUNPTkZJR19QUFA9eQotQ09ORklHX1BQUF9NVUxUSUxJTks9eQotQ09ORklHX0lOUFVUX0VWREVWPXkKLUNPTkZJR19LRVlCT0FSRF9PTUFQPXkKLSMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfODI1MD15Ci1DT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15Ci0jIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0Ci1DT05GSUdfSFdfUkFORE9NPXkKLUNPTkZJR19JMkM9eQotQ09ORklHX0kyQ19DSEFSREVWPXkKLUNPTkZJR19JMkNfT01BUD15Ci1DT05GSUdfR1BJT19TWVNGUz15Ci0jIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci1DT05GSUdfRkI9eQotQ09ORklHX0ZJUk1XQVJFX0VESUQ9eQotQ09ORklHX0ZCX09NQVA9eQotQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVD15Ci1DT05GSUdfTENEX0NMQVNTX0RFVklDRT15Ci0jIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15Ci1DT05GSUdfRk9OVFM9eQotQ09ORklHX0ZPTlRfNngxMT15Ci1DT05GSUdfTE9HTz15Ci0jIENPTkZJR19MT0dPX0xJTlVYX01PTk8gaXMgbm90IHNldAotIyBDT05GSUdfTE9HT19MSU5VWF9WR0ExNiBpcyBub3Qgc2V0Ci1DT05GSUdfU09VTkQ9eQotQ09ORklHX1NORD15Ci1DT05GSUdfU05EX01JWEVSX09TUz15Ci1DT05GSUdfU05EX1BDTV9PU1M9eQotQ09ORklHX1NORF9TT0M9eQotQ09ORklHX1NORF9PTUFQX1NPQz15Ci1DT05GSUdfU05EX09NQVBfU09DX0FNU19ERUxUQT15Ci1DT05GSUdfVVNCPXkKLUNPTkZJR19VU0JfREVWSUNFRlM9eQotIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX01PTj15Ci1DT05GSUdfVVNCX09IQ0lfSENEPXkKLUNPTkZJR19VU0JfU1RPUkFHRT15Ci1DT05GSUdfTkVXX0xFRFM9eQotQ09ORklHX0xFRFNfQ0xBU1M9eQotQ09ORklHX0xFRFNfQU1TX0RFTFRBPXkKLUNPTkZJR19MRURTX1RSSUdHRVJTPXkKLUNPTkZJR19MRURTX1RSSUdHRVJfVElNRVI9eQotQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQ9eQotQ09ORklHX0xFRFNfVFJJR0dFUl9ERUZBVUxUX09OPXkKLUNPTkZJR19SVENfQ0xBU1M9eQotQ09ORklHX1JUQ19EUlZfT01BUD15Ci1DT05GSUdfRVhUMl9GUz15Ci1DT05GSUdfRVhUM19GUz15Ci1DT05GSUdfSU5PVElGWT15Ci1DT05GSUdfQVVUT0ZTX0ZTPXkKLUNPTkZJR19BVVRPRlM0X0ZTPXkKLUNPTkZJR19NU0RPU19GUz15Ci1DT05GSUdfVkZBVF9GUz15Ci1DT05GSUdfVE1QRlM9eQotQ09ORklHX0pGRlMyX0ZTPXkKLUNPTkZJR19KRkZTMl9TVU1NQVJZPXkKLUNPTkZJR19ORlNfRlM9eQotQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci1DT05GSUdfTkxTX0NPREVQQUdFXzQzNz15Ci1DT05GSUdfTkxTX0NPREVQQUdFXzg1MD15Ci1DT05GSUdfTkxTX0NPREVQQUdFXzg1Mj15Ci1DT05GSUdfTkxTX0lTTzg4NTlfMT15Ci1DT05GSUdfTkxTX0lTTzg4NTlfMj15Ci1DT05GSUdfTUFHSUNfU1lTUlE9eQotQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvaHRjaGVyYWxkX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvaHRjaGVyYWxkX2RlZmNvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWRmYTFjMC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9jb25maWdzL2h0Y2hlcmFsZF9kZWZjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX1NMQUI9eQotQ09ORklHX01PRFVMRVM9eQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfT01BUD15Ci1DT05GSUdfQVJDSF9PTUFQMT15Ci1DT05GSUdfQVJDSF9PTUFQODUwPXkKLSMgQ09ORklHX0FSQ0hfT01BUDE1WFggaXMgbm90IHNldAotQ09ORklHX01BQ0hfSEVSQUxEPXkKLUNPTkZJR19PTUFQX0FSTV8xOTVNSFo9eQotIyBDT05GSUdfT01BUF9BUk1fNjBNSFogaXMgbm90IHNldAotQ09ORklHX0NQVV9BUk05MjVUPXkKLUNPTkZJR19QUkVFTVBUPXkKLUNPTkZJR19BRUFCST15Ci1DT05GSUdfTEVEUz15Ci1DT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCi1DT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKLUNPTkZJR19DTURMSU5FPSJtZW09MzJNIGNvbnNvbGU9dHR5UzAsMTE1MjAwIGlwPWRoY3AiCi1DT05GSUdfRlBFX05XRlBFPXkKLUNPTkZJR19QTT15Ci1DT05GSUdfTkVUPXkKLUNPTkZJR19QQUNLRVQ9eQotQ09ORklHX1VOSVg9eQotQ09ORklHX0lORVQ9eQotQ09ORklHX0lQX01VTFRJQ0FTVD15Ci1DT05GSUdfSVBfUE5QPXkKLUNPTkZJR19JUF9QTlBfREhDUD15Ci1DT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLUNPTkZJR19CTEtfREVWX0xPT1A9eQotQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9TSVpFPTgxOTIKLUNPTkZJR19ORVRERVZJQ0VTPXkKLUNPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX1NNQzkxWD15Ci0jIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0Ci1DT05GSUdfS0VZQk9BUkRfT01BUD15Ci0jIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMXzgyNTA9bQotIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAotQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KLUNPTkZJR19GQj15Ci1DT05GSUdfRkJfTU9ERV9IRUxQRVJTPXkKLUNPTkZJR19GQl9PTUFQPXkKLSMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKLUNPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OPXkKLUNPTkZJR19GT05UUz15Ci1DT05GSUdfRk9OVF9NSU5JXzR4Nj15Ci1DT05GSUdfVVNCX0dBREdFVD15Ci1DT05GSUdfVVNCX0VUSD1tCi0jIENPTkZJR19VU0JfRVRIX1JORElTIGlzIG5vdCBzZXQKLUNPTkZJR19NTUM9eQotQ09ORklHX01NQ19TREhDST15Ci1DT05GSUdfTU1DX1NESENJX1BMVEZNPXkKLUNPTkZJR19NTUNfT01BUD15Ci1DT05GSUdfUlRDX0NMQVNTPXkKLUNPTkZJR19FWFQyX0ZTPXkKLUNPTkZJR19FWFQzX0ZTPXkKLUNPTkZJR19JTk9USUZZPXkKLUNPTkZJR19UTVBGUz15Ci1DT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ST09UX05GUz15Ci0jIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fREVGTEFURT15Ci1DT05GSUdfQ1JZUFRPX1pMSUI9eQotQ09ORklHX0NSWVBUT19MWk89eQotIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9tYWNrZXJlbF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL21hY2tlcmVsX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDZhMmUyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY29uZmlncy9tYWNrZXJlbF9kZWZjb25maWcKQEAgLTAsMCArMSwxMzggQEAKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX0lLQ09ORklHPXkKK0NPTkZJR19JS0NPTkZJR19QUk9DPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE2CisjIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAorIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAorIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9OUyBpcyBub3Qgc2V0CitDT05GSUdfU0xBQj15CitDT05GSUdfTU9EVUxFUz15CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NITU9CSUxFPXkKK0NPTkZJR19BUkNIX1NINzM3Mj15CitDT05GSUdfTUFDSF9NQUNLRVJFTD15CitDT05GSUdfTUVNT1JZX1NJWkU9MHgxMDAwMDAwMAorQ09ORklHX0FFQUJJPXkKKyMgQ09ORklHX09BQklfQ09NUEFUIGlzIG5vdCBzZXQKK0NPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTE1CitDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCitDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKK0NPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eTAsIGNvbnNvbGU9dHR5U0MwLDExNTIwMCBlYXJseXByaW50az1zaC1zY2kuMCwxMTUyMDAgcm9vdD0vZGV2L25mcyBuZnNyb290PSx0Y3AsdjMgaXA9ZGhjcCBtZW1jaHVuay52cHU9NjRtIG1lbWNodW5rLnZldTA9OG0gbWVtY2h1bmsuc3B1MD0ybSBtZW09MjQwbSIKK0NPTkZJR19LRVhFQz15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CitDT05GSUdfUE09eQorQ09ORklHX1BNX1JVTlRJTUU9eQorQ09ORklHX05FVD15CitDT05GSUdfUEFDS0VUPXkKK0NPTkZJR19VTklYPXkKK0NPTkZJR19JTkVUPXkKK0NPTkZJR19JUF9NVUxUSUNBU1Q9eQorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAorQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTCBpcyBub3Qgc2V0CitDT05GSUdfTVREPXkKK0NPTkZJR19NVERfQ09OQ0FUPXkKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTE9DSz15CitDT05GSUdfTVREX0NGST15CitDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUz15CitDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CitDT05GSUdfTVREX1BIWVNNQVA9eQorQ09ORklHX01URF9BUk1fSU5URUdSQVRPUj15CitDT05GSUdfTVREX0JMT0NLMk1URD15CitDT05GSUdfU0NTST15CitDT05GSUdfQkxLX0RFVl9TRD15CisjIENPTkZJR19TQ1NJX0xPV0xFVkVMIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX1NNU0M5MTFYPXkKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfU0hfU0NJPXkKK0NPTkZJR19TRVJJQUxfU0hfU0NJX05SX1VBUlRTPTgKK0NPTkZJR19TRVJJQUxfU0hfU0NJX0NPTlNPTEU9eQorIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19GQj15CitDT05GSUdfRkJfTU9ERV9IRUxQRVJTPXkKK0NPTkZJR19GQl9TSF9NT0JJTEVfTENEQz15CitDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15CitDT05GSUdfTE9HTz15CisjIENPTkZJR19MT0dPX0xJTlVYX01PTk8gaXMgbm90IHNldAorIyBDT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQyX0ZTPXkKK0NPTkZJR19FWFQyX0ZTX1hBVFRSPXkKK0NPTkZJR19FWFQyX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfRVhUMl9GU19TRUNVUklUWT15CitDT05GSUdfRVhUMl9GU19YSVA9eQorQ09ORklHX0VYVDNfRlM9eQorIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfRVhUM19GU19TRUNVUklUWT15CisjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOT1RJRllfVVNFUiBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfRlM9eQorQ09ORklHX1ZGQVRfRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX01JU0NfRklMRVNZU1RFTVMgaXMgbm90IHNldAorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKK0NPTkZJR19ORlNfVjNfQUNMPXkKK0NPTkZJR19ORlNfVjQ9eQorQ09ORklHX05GU19WNF8xPXkKK0NPTkZJR19ST09UX05GUz15CitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CitDT05GSUdfTkxTX0NPREVQQUdFXzczNz15CitDT05GSUdfTkxTX0NPREVQQUdFXzc3NT15CitDT05GSUdfTkxTX0NPREVQQUdFXzg1MD15CitDT05GSUdfTkxTX0NPREVQQUdFXzg1Mj15CitDT05GSUdfTkxTX0NPREVQQUdFXzg1NT15CitDT05GSUdfTkxTX0NPREVQQUdFXzg1Nz15CitDT05GSUdfTkxTX0NPREVQQUdFXzg2MD15CitDT05GSUdfTkxTX0NPREVQQUdFXzg2MT15CitDT05GSUdfTkxTX0NPREVQQUdFXzg2Mj15CitDT05GSUdfTkxTX0NPREVQQUdFXzg2Mz15CitDT05GSUdfTkxTX0NPREVQQUdFXzg2ND15CitDT05GSUdfTkxTX0NPREVQQUdFXzg2NT15CitDT05GSUdfTkxTX0NPREVQQUdFXzg2Nj15CitDT05GSUdfTkxTX0NPREVQQUdFXzg2OT15CitDT05GSUdfTkxTX0lTTzg4NTlfMT15CitDT05GSUdfTkxTX0lTTzg4NTlfMj15CitDT05GSUdfTkxTX0lTTzg4NTlfMz15CitDT05GSUdfTkxTX0lTTzg4NTlfND15CitDT05GSUdfTkxTX0lTTzg4NTlfNT15CitDT05GSUdfTkxTX0lTTzg4NTlfNj15CitDT05GSUdfTkxTX0lTTzg4NTlfNz15CitDT05GSUdfTkxTX0lTTzg4NTlfOT15CitDT05GSUdfTkxTX0lTTzg4NTlfMTM9eQorQ09ORklHX05MU19JU084ODU5XzE0PXkKK0NPTkZJR19OTFNfSVNPODg1OV8xNT15CitDT05GSUdfTkxTX0tPSThfUj15CitDT05GSUdfTkxTX0tPSThfVT15CitDT05GSUdfTkxTX1VURjg9eQorIyBDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRCBpcyBub3Qgc2V0CisjIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUk1fVU5XSU5EIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvbXgzX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbXgzX2RlZmNvbmZpZwppbmRleCBmMGMzMzlmLi5lNjQ4ZWEzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL214M19kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9teDNfZGVmY29uZmlnCkBAIC04NCw2ICs4NCw3IEBACiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0lNWD15CitDT05GSUdfU1BJPXkKIENPTkZJR19XMT15CiBDT05GSUdfVzFfTUFTVEVSX01YQz15CiBDT05GSUdfVzFfU0xBVkVfVEhFUk09eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9uNzcwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvbjc3MF9kZWZjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5M2U5NGQuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9uNzcwX2RlZmNvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDEzOCArMCwwIEBACi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19QT1NJWF9NUVVFVUU9eQotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLUNPTkZJR19TTEFCPXkKLUNPTkZJR19NT0RVTEVTPXkKLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfT01BUD15Ci1DT05GSUdfQVJDSF9PTUFQMT15Ci1DT05GSUdfT01BUF9SRVNFVF9DTE9DS1M9eQotIyBDT05GSUdfT01BUF9NVVggaXMgbm90IHNldAotQ09ORklHX09NQVBfTUJPWF9GV0s9eQotQ09ORklHX09NQVBfMzJLX1RJTUVSPXkKLUNPTkZJR19PTUFQX0RNX1RJTUVSPXkKLSMgQ09ORklHX0FSQ0hfT01BUDE1WFggaXMgbm90IHNldAotQ09ORklHX0FSQ0hfT01BUDE2WFg9eQotQ09ORklHX01BQ0hfTk9LSUE3NzA9eQotQ09ORklHX09NQVBfQ0xPQ0tTX1NFVF9CWV9CT09UTE9BREVSPXkKLUNPTkZJR19PTUFQX0FSTV8yMTZNSFo9eQotIyBDT05GSUdfT01BUF9BUk1fNjBNSFogaXMgbm90IHNldAotQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAotQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCi1DT05GSUdfQ01ETElORT0icm9vdD0xZjAzIHJvb3Rmc3R5cGU9amZmczIgdGltZSIKLUNPTkZJR19GUEVfTldGUEU9eQotQ09ORklHX1BNPXkKLUNPTkZJR19QTV9SVU5USU1FPXkKLUNPTkZJR19ORVQ9eQotQ09ORklHX1BBQ0tFVD15Ci1DT05GSUdfVU5JWD15Ci1DT05GSUdfSU5FVD15Ci1DT05GSUdfSVBfTVVMVElDQVNUPXkKLUNPTkZJR19JUF9QTlA9eQotQ09ORklHX0lQX1BOUF9ESENQPXkKLUNPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9ESUFHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotQ09ORklHX05FVEZJTFRFUj15Ci1DT05GSUdfQlQ9eQotQ09ORklHX0JUX0wyQ0FQPXkKLUNPTkZJR19CVF9TQ089eQotQ09ORklHX0JUX1JGQ09NTT15Ci1DT05GSUdfQlRfUkZDT01NX1RUWT15Ci1DT05GSUdfQlRfQk5FUD15Ci1DT05GSUdfQlRfSElEUD15Ci1DT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotQ09ORklHX0NPTk5FQ1RPUj15Ci0jIENPTkZJR19QUk9DX0VWRU5UUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREPXkKLUNPTkZJR19NVERfUEFSVElUSU9OUz15Ci1DT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQotQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxPQ0s9eQotQ09ORklHX01URF9OQU5EPXkKLUNPTkZJR19CTEtfREVWX0xPT1A9eQotQ09ORklHX1NDU0k9eQotIyBDT05GSUdfU0NTSV9QUk9DX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1NEPXkKLUNPTkZJR19ORVRERVZJQ0VTPXkKLUNPTkZJR19UVU49eQotQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfVVNCX1VTQk5FVD15Ci0jIENPTkZJR19VU0JfTkVUX0FYODgxN1ggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX05FVF9DRENfU1VCU0VUIGlzIG5vdCBzZXQKLUNPTkZJR19QUFA9eQotQ09ORklHX1BQUF9GSUxURVI9eQotQ09ORklHX1BQUF9BU1lOQz15Ci1DT05GSUdfUFBQX0RFRkxBVEU9eQotQ09ORklHX1BQUF9CU0RDT01QPXkKLSMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9FVkRFVj15Ci0jIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0Ci1DT05GSUdfS0VZQk9BUkRfT01BUD15Ci0jIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQotQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDY9eQotQ09ORklHX1NFUklBTF84MjUwPXkKLUNPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLSMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKLUNPTkZJR19JMkM9eQotQ09ORklHX0kyQ19PTUFQPXkKLUNPTkZJR19TUEk9eQotQ09ORklHX1NQSV9PTUFQX1VXSVJFPXkKLSMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLUNPTkZJR19XQVRDSERPRz15Ci1DT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQ9eQotQ09ORklHX09NQVBfV0FUQ0hET0c9eQotQ09ORklHX0ZCPXkKLUNPTkZJR19GQl9PTUFQPXkKLUNPTkZJR19GQl9PTUFQX0xDRENfRVhURVJOQUw9eQotQ09ORklHX0ZCX09NQVBfTENEQ19IV0E3NDI9eQotQ09ORklHX0ZCX09NQVBfTUFOVUFMX1VQREFURT15Ci1DT05GSUdfRkJfT01BUF9MQ0RfTUlQSUQ9eQotIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX1NPVU5EPXkKLUNPTkZJR19TTkQ9eQotIyBDT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQSSBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX0RVTU1ZPXkKLUNPTkZJR19TTkRfVVNCX0FVRElPPXkKLUNPTkZJR19VU0I9eQotQ09ORklHX1VTQl9ERVZJQ0VGUz15Ci1DT05GSUdfVVNCX1NVU1BFTkQ9eQotQ09ORklHX1VTQl9PVEc9eQotIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAotQ09ORklHX1VTQl9PSENJX0hDRD15Ci1DT05GSUdfVVNCX1NUT1JBR0U9eQotQ09ORklHX1VTQl9TRVJJQUw9eQotQ09ORklHX1VTQl9TRVJJQUxfQ09OU09MRT15Ci1DT05GSUdfVVNCX1NFUklBTF9QTDIzMDM9eQotQ09ORklHX1VTQl9HQURHRVQ9eQotQ09ORklHX1VTQl9FVEg9bQotQ09ORklHX1VTQl9GSUxFX1NUT1JBR0U9bQotQ09ORklHX1VTQl9GSUxFX1NUT1JBR0VfVEVTVD15Ci1DT05GSUdfTU1DPXkKLUNPTkZJR19NTUNfT01BUD15Ci1DT05GSUdfRVhUMl9GUz15Ci1DT05GSUdfRVhUM19GUz15Ci1DT05GSUdfTVNET1NfRlM9eQotQ09ORklHX1ZGQVRfRlM9eQotQ09ORklHX1RNUEZTPXkKLUNPTkZJR19KRkZTMl9GUz15Ci1DT05GSUdfSkZGUzJfU1VNTUFSWT15Ci1DT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUz15Ci1DT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ORlNfVjM9eQotQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci1DT05GSUdfTkxTX0NPREVQQUdFXzQzNz15Ci1DT05GSUdfTkxTX0NPREVQQUdFXzg1Mj15Ci1DT05GSUdfTkxTX0lTTzg4NTlfMT15Ci1DT05GSUdfTkxTX0lTTzg4NTlfMTU9eQotQ09ORklHX05MU19VVEY4PXkKLUNPTkZJR19NQUdJQ19TWVNSUT15Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKLUNPTkZJR19ERUJVR19NVVRFWEVTPXkKLUNPTkZJR19ERUJVR19FUlJPUlM9eQotQ09ORklHX1NFQ1VSSVRZPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDFfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwMV9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTM1MGNjNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDFfZGVmY29uZmlnCkBAIC0wLDAgKzEsMjg2IEBACitDT05GSUdfRVhQRVJJTUVOVEFMPXkKKyMgQ09ORklHX1NXQVAgaXMgbm90IHNldAorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CitDT05GSUdfSUtDT05GSUc9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfRU1CRURERUQ9eQorIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAorIyBDT05GSUdfRUxGX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfQkFTRV9GVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NITUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTIGlzIG5vdCBzZXQKK0NPTkZJR19TTE9CPXkKK0NPTkZJR19QUk9GSUxJTkc9eQorQ09ORklHX09QUk9GSUxFPXkKK0NPTkZJR19NT0RVTEVTPXkKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKK0NPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKKyMgQ09ORklHX0xCREFGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfT01BUD15CitDT05GSUdfQVJDSF9PTUFQMT15CitDT05GSUdfT01BUF9SRVNFVF9DTE9DS1M9eQorIyBDT05GSUdfT01BUF9NVVggaXMgbm90IHNldAorQ09ORklHX09NQVBfTUJPWF9GV0s9eQorQ09ORklHX09NQVBfMzJLX1RJTUVSPXkKK0NPTkZJR19PTUFQX0RNX1RJTUVSPXkKK0NPTkZJR19BUkNIX09NQVA3MzA9eQorQ09ORklHX0FSQ0hfT01BUDg1MD15CitDT05GSUdfQVJDSF9PTUFQMTZYWD15CitDT05GSUdfTUFDSF9PTUFQX0lOTk9WQVRPUj15CitDT05GSUdfTUFDSF9PTUFQX0gyPXkKK0NPTkZJR19NQUNIX09NQVBfSDM9eQorQ09ORklHX01BQ0hfT01BUF9IVENXSVpBUkQ9eQorQ09ORklHX01BQ0hfSEVSQUxEPXkKK0NPTkZJR19NQUNIX09NQVBfT1NLPXkKK0NPTkZJR19NQUNIX09NQVBfUEVSU0VVUzI9eQorQ09ORklHX01BQ0hfT01BUF9GU0FNUExFPXkKK0NPTkZJR19NQUNIX1ZPSUNFQkxVRT15CitDT05GSUdfTUFDSF9PTUFQX1BBTE1URT15CitDT05GSUdfTUFDSF9PTUFQX1BBTE1aNzE9eQorQ09ORklHX01BQ0hfT01BUF9QQUxNVFQ9eQorQ09ORklHX01BQ0hfU1gxPXkKK0NPTkZJR19NQUNIX05PS0lBNzcwPXkKK0NPTkZJR19NQUNIX0FNU19ERUxUQT15CitDT05GSUdfTUFDSF9PTUFQX0dFTkVSSUM9eQorQ09ORklHX09NQVBfQ0xPQ0tTX1NFVF9CWV9CT09UTE9BREVSPXkKK0NPTkZJR19PTUFQX0FSTV8yMTZNSFo9eQorQ09ORklHX09NQVBfQVJNXzE5NU1IWj15CitDT05GSUdfT01BUF9BUk1fMTkyTUhaPXkKK0NPTkZJR19PTUFQX0FSTV8xODJNSFo9eQorQ09ORklHX09NQVBfQVJNXzE2OE1IWj15CisjIENPTkZJR19PTUFQX0FSTV82ME1IWiBpcyBub3Qgc2V0CisjIENPTkZJR19BUk1fVEhVTUIgaXMgbm90IHNldAorQ09ORklHX1BDQ0FSRD15CitDT05GSUdfT01BUF9DRj15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfUFJFRU1QVD15CitDT05GSUdfQUVBQkk9eQorQ09ORklHX0xFRFM9eQorQ09ORklHX0xFRFNfQ1BVPXkKK0NPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKK0NPTkZJR19aQk9PVF9ST01fQlNTPTB4MAorQ09ORklHX0NNRExJTkU9InJvb3Q9MWYwMyByb290ZnN0eXBlPWpmZnMyIgorQ09ORklHX0ZQRV9OV0ZQRT15CitDT05GSUdfQklORk1UX01JU0M9eQorQ09ORklHX1BNPXkKKyMgQ09ORklHX1NVU1BFTkQgaXMgbm90IHNldAorQ09ORklHX1BNX1JVTlRJTUU9eQorQ09ORklHX05FVD15CitDT05GSUdfUEFDS0VUPXkKK0NPTkZJR19VTklYPXkKK0NPTkZJR19ORVRfS0VZPXkKK0NPTkZJR19JTkVUPXkKK0NPTkZJR19JUF9NVUxUSUNBU1Q9eQorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorQ09ORklHX0lQX1BOUF9CT09UUD15CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9ESUFHIGlzIG5vdCBzZXQKK0NPTkZJR19JUFY2PXkKK0NPTkZJR19ORVRGSUxURVI9eQorQ09ORklHX0JUPXkKK0NPTkZJR19CVF9MMkNBUD15CitDT05GSUdfQlRfU0NPPXkKK0NPTkZJR19CVF9SRkNPTU09eQorQ09ORklHX0JUX1JGQ09NTV9UVFk9eQorQ09ORklHX0JUX0JORVA9eQorQ09ORklHX0JUX0hJRFA9eQorQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX1NUQU5EQUxPTkUgaXMgbm90IHNldAorIyBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRCBpcyBub3Qgc2V0CitDT05GSUdfQ09OTkVDVE9SPXkKKyMgQ09ORklHX1BST0NfRVZFTlRTIGlzIG5vdCBzZXQKK0NPTkZJR19NVEQ9eQorQ09ORklHX01URF9ERUJVRz15CitDT05GSUdfTVREX0RFQlVHX1ZFUkJPU0U9MworQ09ORklHX01URF9QQVJUSVRJT05TPXkKK0NPTkZJR19NVERfQ01ETElORV9QQVJUUz15CitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTE9DSz15CitDT05GSUdfTVREX0NGST15CitDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CitDT05GSUdfTVREX05BTkQ9eQorQ09ORklHX0JMS19ERVZfTE9PUD15CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTIKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTgxOTIKK0NPTkZJR19JREU9bQorQ09ORklHX0JMS19ERVZfSURFQ1M9bQorQ09ORklHX1NDU0k9eQorIyBDT05GSUdfU0NTSV9QUk9DX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1NEPXkKK0NPTkZJR19DSFJfREVWX1NUPXkKK0NPTkZJR19CTEtfREVWX1NSPXkKK0NPTkZJR19DSFJfREVWX1NHPXkKK0NPTkZJR19TQ1NJX01VTFRJX0xVTj15CitDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfVFVOPXkKK0NPTkZJR19QSFlMSUI9eQorQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfU01DOTFYPXkKK0NPTkZJR19VU0JfQ0FUQz15CitDT05GSUdfVVNCX0tBV0VUSD15CitDT05GSUdfVVNCX1BFR0FTVVM9eQorQ09ORklHX1VTQl9SVEw4MTUwPXkKK0NPTkZJR19VU0JfVVNCTkVUPXkKKyMgQ09ORklHX1VTQl9ORVRfQVg4ODE3WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTkVUX0NEQ19TVUJTRVQgaXMgbm90IHNldAorQ09ORklHX1BQUD15CitDT05GSUdfUFBQX01VTFRJTElOSz15CitDT05GSUdfUFBQX0ZJTFRFUj15CitDT05GSUdfUFBQX0FTWU5DPXkKK0NPTkZJR19QUFBfREVGTEFURT15CitDT05GSUdfUFBQX0JTRENPTVA9eQorQ09ORklHX1NMSVA9eQorQ09ORklHX1NMSVBfQ09NUFJFU1NFRD15CisjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfRVZERVY9eQorQ09ORklHX0lOUFVUX0VWQlVHPXkKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9UT1VDSFNDUkVFTj15CitDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0Nj15CitDT05GSUdfSU5QVVRfTUlTQz15CitDT05GSUdfSU5QVVRfVUlOUFVUPXkKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfODI1MD15CitDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MworQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9MworIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAorQ09ORklHX0hXX1JBTkRPTT15CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj15CitDT05GSUdfU1BJPXkKK0NPTkZJR19TUElfT01BUF9VV0lSRT15CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CitDT05GSUdfV0FUQ0hET0c9eQorQ09ORklHX1dBVENIRE9HX05PV0FZT1VUPXkKK0NPTkZJR19PTUFQX1dBVENIRE9HPXkKK0NPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD15CitDT05GSUdfRkI9eQorQ09ORklHX0ZJUk1XQVJFX0VESUQ9eQorQ09ORklHX0ZCX01PREVfSEVMUEVSUz15CitDT05GSUdfRkJfVklSVFVBTD15CitDT05GSUdfRkJfT01BUD15CitDT05GSUdfRkJfT01BUF9MQ0RDX0VYVEVSTkFMPXkKK0NPTkZJR19GQl9PTUFQX0xDRENfSFdBNzQyPXkKK0NPTkZJR19GQl9PTUFQX01BTlVBTF9VUERBVEU9eQorQ09ORklHX0ZCX09NQVBfTENEX01JUElEPXkKK0NPTkZJR19GQl9PTUFQX0JPT1RMT0FERVJfSU5JVD15CitDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUPXkKK0NPTkZJR19MQ0RfQ0xBU1NfREVWSUNFPXkKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OPXkKK0NPTkZJR19GT05UUz15CitDT05GSUdfRk9OVF84eDg9eQorQ09ORklHX0ZPTlRfOHgxNj15CitDT05GSUdfRk9OVF82eDExPXkKK0NPTkZJR19GT05UX01JTklfNHg2PXkKK0NPTkZJR19MT0dPPXkKKyMgQ09ORklHX0xPR09fTElOVVhfTU9OTyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dPX0xJTlVYX1ZHQTE2IGlzIG5vdCBzZXQKK0NPTkZJR19TT1VORD15CitDT05GSUdfU05EPXkKK0NPTkZJR19TTkRfTUlYRVJfT1NTPXkKK0NPTkZJR19TTkRfUENNX09TUz15CisjIENPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUyBpcyBub3Qgc2V0CitDT05GSUdfU05EX0RVTU1ZPXkKK0NPTkZJR19TTkRfVVNCX0FVRElPPXkKK0NPTkZJR19TTkRfU09DPXkKK0NPTkZJR19TTkRfT01BUF9TT0M9eQorIyBDT05GSUdfVVNCX0hJRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCPXkKK0NPTkZJR19VU0JfREVCVUc9eQorQ09ORklHX1VTQl9ERVZJQ0VGUz15CisjIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VTUEVORD15CitDT05GSUdfVVNCX01PTj15CitDT05GSUdfVVNCX09IQ0lfSENEPXkKK0NPTkZJR19VU0JfU1RPUkFHRT15CitDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQj15CitDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTT15CitDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5PXkKK0NPTkZJR19VU0JfU1RPUkFHRV9TRERSNTU9eQorQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UPXkKK0NPTkZJR19VU0JfU0VSSUFMPXkKK0NPTkZJR19VU0JfU0VSSUFMX0NPTlNPTEU9eQorQ09ORklHX1VTQl9TRVJJQUxfUEwyMzAzPXkKK0NPTkZJR19VU0JfVEVTVD15CitDT05GSUdfVVNCX0dBREdFVD15CitDT05GSUdfVVNCX0VUSD1tCisjIENPTkZJR19VU0JfRVRIX1JORElTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRklMRV9TVE9SQUdFPW0KK0NPTkZJR19VU0JfRklMRV9TVE9SQUdFX1RFU1Q9eQorQ09ORklHX01NQz15CitDT05GSUdfTU1DX1NESENJPXkKK0NPTkZJR19NTUNfU0RIQ0lfUExURk09eQorQ09ORklHX01NQ19PTUFQPXkKK0NPTkZJR19ORVdfTEVEUz15CitDT05GSUdfTEVEU19DTEFTUz15CitDT05GSUdfTEVEU19UUklHR0VSUz15CitDT05GSUdfTEVEU19UUklHR0VSX1RJTUVSPXkKK0NPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUPXkKK0NPTkZJR19MRURTX1RSSUdHRVJfREVGQVVMVF9PTj15CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfRFJWX09NQVA9eQorQ09ORklHX0VYVDJfRlM9eQorQ09ORklHX0VYVDNfRlM9eQorIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CitDT05GSUdfQVVUT0ZTNF9GUz15CitDT05GSUdfSVNPOTY2MF9GUz15CitDT05GSUdfSk9MSUVUPXkKK0NPTkZJR19NU0RPU19GUz15CitDT05GSUdfVkZBVF9GUz15CitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9ODY2CitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJrb2k4LXIiCitDT05GSUdfSkZGUzJfRlM9eQorQ09ORklHX0pGRlMyX1NVTU1BUlk9eQorQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlM9eQorQ09ORklHX0NSQU1GUz15CitDT05GSUdfUk9NRlNfRlM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKK0NPTkZJR19ORlNfVjQ9eQorQ09ORklHX1JPT1RfTkZTPXkKK0NPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQorQ09ORklHX05MU19DT0RFUEFHRV84NTA9eQorQ09ORklHX05MU19DT0RFUEFHRV84NTI9eQorQ09ORklHX05MU19DT0RFUEFHRV84NjY9eQorQ09ORklHX05MU19DT0RFUEFHRV8xMjUxPXkKK0NPTkZJR19OTFNfSVNPODg1OV8xPXkKK0NPTkZJR19OTFNfSVNPODg1OV8yPXkKK0NPTkZJR19OTFNfSVNPODg1OV81PXkKK0NPTkZJR19OTFNfSVNPODg1OV8xNT15CitDT05GSUdfTkxTX0tPSThfUj15CitDT05GSUdfTkxTX1VURjg9eQorIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX01BR0lDX1NZU1JRPXkKK0NPTkZJR19ERUJVR19LRVJORUw9eQorQ09ORklHX0RFQlVHX1NQSU5MT0NLPXkKK0NPTkZJR19ERUJVR19NVVRFWEVTPXkKKyMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0lORk89eQorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfVVNFUj15CitDT05GSUdfREVCVUdfRVJST1JTPXkKK0NPTkZJR19TRUNVUklUWT15CitDT05GSUdfQ1JZUFRPX0VDQj15CitDT05GSUdfQ1JZUFRPX1BDQkM9eQorQ09ORklHX0NSWVBUT19ERUZMQVRFPXkKK0NPTkZJR19DUllQVE9fWkxJQj15CitDT05GSUdfQ1JZUFRPX0xaTz15CisjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CitDT05GSUdfTElCQ1JDMzJDPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9nZW5lcmljXzE1MTBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwX2dlbmVyaWNfMTUxMF9kZWZjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlNDJiYTQuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vbWFwX2dlbmVyaWNfMTUxMF9kZWZjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX1NMQUI9eQotQ09ORklHX01PRFVMRVM9eQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQ9eQotIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfT01BUD15Ci1DT05GSUdfQVJDSF9PTUFQMT15Ci1DT05GSUdfTUFDSF9PTUFQX0dFTkVSSUM9eQotQ09ORklHX09NQVBfQVJNXzE2OE1IWj15Ci0jIENPTkZJR19PTUFQX0FSTV82ME1IWiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUk1fVEhVTUIgaXMgbm90IHNldAotQ09ORklHX1BSRUVNUFQ9eQotQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAotQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCi1DT05GSUdfQ01ETElORT0ibWVtPTY0TSBjb25zb2xlPXR0eVMyLDExNTIwMCByb290PTA4MDMgcm8gaW5pdD0vYmluL3NoIgotQ09ORklHX0ZQRV9OV0ZQRT15Ci1DT05GSUdfUE09eQotQ09ORklHX05FVD15Ci1DT05GSUdfUEFDS0VUPXkKLUNPTkZJR19VTklYPXkKLUNPTkZJR19JTkVUPXkKLUNPTkZJR19JUF9NVUxUSUNBU1Q9eQotQ09ORklHX0lQX1BOUD15Ci1DT05GSUdfSVBfUE5QX0RIQ1A9eQotQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0xPT1A9eQotQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9TSVpFPTgxOTIKLUNPTkZJR19TQ1NJPXkKLUNPTkZJR19CTEtfREVWX1NEPXkKLUNPTkZJR19CTEtfREVWX1NSPXkKLUNPTkZJR19DSFJfREVWX1NHPXkKLUNPTkZJR19TQ1NJX01VTFRJX0xVTj15Ci1DT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19VU0JfUlRMODE1MD15Ci1DT05GSUdfVVNCX1VTQk5FVD15Ci1DT05GSUdfVVNCX0FOMjcyMD15Ci1DT05GSUdfVVNCX0VQU09OMjg4OD15Ci1DT05GSUdfUFBQPXkKLUNPTkZJR19QUFBfTVVMVElMSU5LPXkKLUNPTkZJR19LRVlCT0FSRF9PTUFQPXkKLSMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfODI1MD15Ci1DT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15Ci0jIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0Ci1DT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQ0hBUkRFVj15Ci1DT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQotIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX1VTQj15Ci1DT05GSUdfVVNCX0RFQlVHPXkKLUNPTkZJR19VU0JfREVWSUNFRlM9eQotIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX01PTj15Ci1DT05GSUdfVVNCX09IQ0lfSENEPXkKLUNPTkZJR19VU0JfU1RPUkFHRT15Ci1DT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQj15Ci1DT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTT15Ci1DT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5PXkKLUNPTkZJR19VU0JfU1RPUkFHRV9TRERSNTU9eQotQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UPXkKLUNPTkZJR19NTUM9eQotQ09ORklHX01NQ19PTUFQPXkKLUNPTkZJR19SVENfQ0xBU1M9eQotQ09ORklHX1JUQ19EUlZfT01BUD15Ci1DT05GSUdfRVhUMl9GUz15Ci1DT05GSUdfRVhUM19GUz15Ci1DT05GSUdfSU5PVElGWT15Ci1DT05GSUdfQVVUT0ZTX0ZTPXkKLUNPTkZJR19BVVRPRlM0X0ZTPXkKLUNPTkZJR19JU085NjYwX0ZTPXkKLUNPTkZJR19KT0xJRVQ9eQotQ09ORklHX01TRE9TX0ZTPW0KLUNPTkZJR19WRkFUX0ZTPW0KLUNPTkZJR19ORlNfRlM9eQotQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci1DT05GSUdfTUFHSUNfU1lTUlE9eQotQ09ORklHX0RFQlVHX0tFUk5FTD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29tYXBfZ2VuZXJpY18xNjEwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9nZW5lcmljXzE2MTBfZGVmY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZTUzNmNmLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9nZW5lcmljXzE2MTBfZGVmY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfU1lTVklQQz15Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAotQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19TTEFCPXkKLUNPTkZJR19NT0RVTEVTPXkKLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKLSMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX09NQVA9eQotQ09ORklHX0FSQ0hfT01BUDE9eQotIyBDT05GSUdfQVJDSF9PTUFQMTVYWCBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9PTUFQMTZYWD15Ci1DT05GSUdfTUFDSF9PTUFQX0dFTkVSSUM9eQotQ09ORklHX09NQVBfQVJNXzE5Mk1IWj15Ci0jIENPTkZJR19PTUFQX0FSTV82ME1IWiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUk1fVEhVTUIgaXMgbm90IHNldAotQ09ORklHX1BSRUVNUFQ9eQotQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAotQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCi1DT05GSUdfQ01ETElORT0ibWVtPTY0TSBjb25zb2xlPXR0eVMyLDExNTIwMCByb290PTA4MDMgcm8gaW5pdD0vYmluL3NoIgotQ09ORklHX0ZQRV9OV0ZQRT15Ci1DT05GSUdfUE09eQotQ09ORklHX05FVD15Ci1DT05GSUdfUEFDS0VUPXkKLUNPTkZJR19VTklYPXkKLUNPTkZJR19JTkVUPXkKLUNPTkZJR19JUF9NVUxUSUNBU1Q9eQotQ09ORklHX0lQX1BOUD15Ci1DT05GSUdfSVBfUE5QX0RIQ1A9eQotQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0xPT1A9eQotQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9TSVpFPTgxOTIKLUNPTkZJR19TQ1NJPXkKLUNPTkZJR19CTEtfREVWX1NEPXkKLUNPTkZJR19CTEtfREVWX1NSPXkKLUNPTkZJR19DSFJfREVWX1NHPXkKLUNPTkZJR19TQ1NJX01VTFRJX0xVTj15Ci1DT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19VU0JfUlRMODE1MD15Ci1DT05GSUdfVVNCX1VTQk5FVD15Ci1DT05GSUdfVVNCX0FMSV9NNTYzMj15Ci1DT05GSUdfVVNCX0FOMjcyMD15Ci1DT05GSUdfVVNCX0VQU09OMjg4OD15Ci1DT05GSUdfUFBQPXkKLUNPTkZJR19QUFBfTVVMVElMSU5LPXkKLUNPTkZJR19LRVlCT0FSRF9PTUFQPXkKLSMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfODI1MD15Ci1DT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15Ci0jIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0Ci1DT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQ0hBUkRFVj15Ci1DT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQotIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX1VTQj15Ci1DT05GSUdfVVNCX0RFQlVHPXkKLUNPTkZJR19VU0JfREVWSUNFRlM9eQotIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX01PTj15Ci1DT05GSUdfVVNCX09IQ0lfSENEPXkKLUNPTkZJR19VU0JfU1RPUkFHRT15Ci1DT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQj15Ci1DT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTT15Ci1DT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5PXkKLUNPTkZJR19VU0JfU1RPUkFHRV9TRERSNTU9eQotQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UPXkKLUNPTkZJR19NTUM9eQotQ09ORklHX01NQ19PTUFQPXkKLUNPTkZJR19SVENfQ0xBU1M9eQotQ09ORklHX1JUQ19EUlZfT01BUD15Ci1DT05GSUdfRVhUMl9GUz15Ci1DT05GSUdfRVhUM19GUz15Ci1DT05GSUdfSU5PVElGWT15Ci1DT05GSUdfQVVUT0ZTX0ZTPXkKLUNPTkZJR19BVVRPRlM0X0ZTPXkKLUNPTkZJR19JU085NjYwX0ZTPXkKLUNPTkZJR19KT0xJRVQ9eQotQ09ORklHX01TRE9TX0ZTPW0KLUNPTkZJR19WRkFUX0ZTPW0KLUNPTkZJR19ORlNfRlM9eQotQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci1DT05GSUdfTUFHSUNfU1lTUlE9eQotQ09ORklHX0RFQlVHX0tFUk5FTD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29tYXBfZ2VuZXJpY18xNzEwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9nZW5lcmljXzE3MTBfZGVmY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDg2N2IxLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9nZW5lcmljXzE3MTBfZGVmY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsNzUgKzAsMCBAQAotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfU1lTVklQQz15Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAotQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLSMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX09NQVA9eQotQ09ORklHX0FSQ0hfT01BUDE9eQotIyBDT05GSUdfT01BUF9NVVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PTUFQMTVYWCBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9PTUFQMTZYWD15Ci1DT05GSUdfTUFDSF9PTUFQX0dFTkVSSUM9eQotQ09ORklHX09NQVBfQVJNXzE5Mk1IWj15Ci0jIENPTkZJR19PTUFQX0FSTV82ME1IWiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUk1fVEhVTUIgaXMgbm90IHNldAotQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAotQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCi1DT05GSUdfQ01ETElORT0ibWVtPTY0TSBjb25zb2xlPXR0eTAgY29uc29sZT10dHlTMiwxMTUyMDAgcm9vdD0wODAxIgotQ09ORklHX0ZQRV9OV0ZQRT15Ci1DT05GSUdfQVJUSFVSPXkKLUNPTkZJR19QTT15Ci1DT05GSUdfTkVUPXkKLUNPTkZJR19QQUNLRVQ9eQotQ09ORklHX1VOSVg9eQotQ09ORklHX0lORVQ9eQotQ09ORklHX0lQX01VTFRJQ0FTVD15Ci1DT05GSUdfSVBfUE5QPXkKLUNPTkZJR19JUF9QTlBfREhDUD15Ci1DT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfTE9PUD15Ci1DT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9ODE5MgotQ09ORklHX1NDU0k9eQotQ09ORklHX0JMS19ERVZfU0Q9eQotQ09ORklHX05FVERFVklDRVM9eQotQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfVVNCX1VTQk5FVD15Ci1DT05GSUdfVVNCX0FMSV9NNTYzMj15Ci0jIENPTkZJR19VU0JfQkVMS0lOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUk1MSU5VWCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBQPXkKLUNPTkZJR19JTlBVVF9FVkRFVj15Ci1DT05GSUdfS0VZQk9BUkRfT01BUD15Ci0jIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMXzgyNTA9eQotQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQotQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPXkKLSMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19VU0I9eQotQ09ORklHX1VTQl9ERUJVRz15Ci1DT05GSUdfVVNCX0RFVklDRUZTPXkKLUNPTkZJR19VU0JfTU9OPXkKLUNPTkZJR19VU0JfT0hDSV9IQ0Q9eQotQ09ORklHX1VTQl9TVE9SQUdFPXkKLUNPTkZJR19NTUM9eQotQ09ORklHX01NQ19PTUFQPXkKLUNPTkZJR19FWFQyX0ZTPXkKLUNPTkZJR19FWFQzX0ZTPXkKLUNPTkZJR19JTk9USUZZPXkKLUNPTkZJR19UTVBGUz15Ci1DT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ORlNfVjM9eQotQ09ORklHX05GU19WND15Ci1DT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLUNPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKLUNPTkZJR19OTFNfQ09ERVBBR0VfODUyPXkKLUNPTkZJR19OTFNfSVNPODg1OV8xPXkKLUNPTkZJR19OTFNfSVNPODg1OV8xNT15Ci1DT05GSUdfTUFHSUNfU1lTUlE9eQotQ09ORklHX0RFQlVHX0tFUk5FTD15Ci1DT05GSUdfREVCVUdfU1BJTkxPQ0s9eQotQ09ORklHX0RFQlVHX0VSUk9SUz15Ci1DT05GSUdfU0VDVVJJVFk9eQotQ09ORklHX0NSWVBUT19FQ0I9eQotQ09ORklHX0NSWVBUT19QQ0JDPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9oMl8xNjEwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9oMl8xNjEwX2RlZmNvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTJkZTJhYS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9jb25maWdzL29tYXBfaDJfMTYxMF9kZWZjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSwxMDkgKzAsMCBAQAotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfU1lTVklQQz15Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAotQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19TTEFCPXkKLUNPTkZJR19NT0RVTEVTPXkKLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX09NQVA9eQotQ09ORklHX0FSQ0hfT01BUDE9eQotQ09ORklHX09NQVBfTVVYX0RFQlVHPXkKLUNPTkZJR19PTUFQXzMyS19USU1FUj15Ci1DT05GSUdfT01BUF9ETV9USU1FUj15Ci0jIENPTkZJR19BUkNIX09NQVAxNVhYIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX09NQVAxNlhYPXkKLUNPTkZJR19NQUNIX09NQVBfSDI9eQotQ09ORklHX05PX0haPXkKLUNPTkZJR19ISUdIX1JFU19USU1FUlM9eQotQ09ORklHX0xFRFM9eQotQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAotQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCi1DT05GSUdfQ01ETElORT0ibWVtPTMyTSBjb25zb2xlPXR0eVMwLDExNTIwMG44IHJvb3Q9L2Rldi9yYW0wIHJ3IGluaXRyZD0weDEwNjAwMDAwLDhNIHJhbWRpc2tfc2l6ZT04MTkyIgotQ09ORklHX0ZQRV9OV0ZQRT15Ci1DT05GSUdfUE09eQotQ09ORklHX1BNX1JVTlRJTUU9eQotQ09ORklHX05FVD15Ci1DT05GSUdfUEFDS0VUPXkKLUNPTkZJR19VTklYPXkKLUNPTkZJR19JTkVUPXkKLUNPTkZJR19JUF9QTlA9eQotQ09ORklHX0lQX1BOUF9ESENQPXkKLUNPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci1DT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotQ09ORklHX0RFQlVHX0RSSVZFUj15Ci1DT05GSUdfTVREPXkKLUNPTkZJR19NVERfREVCVUc9eQotQ09ORklHX01URF9ERUJVR19WRVJCT1NFPTMKLUNPTkZJR19NVERfUEFSVElUSU9OUz15Ci1DT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQotQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxPQ0s9eQotQ09ORklHX01URF9DRkk9eQotQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQotQ09ORklHX0JMS19ERVZfTE9PUD15Ci1DT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9ODE5MgotQ09ORklHX05FVERFVklDRVM9eQotQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfU01DOTFYPXkKLUNPTkZJR19QUFA9eQotQ09ORklHX1NMSVA9eQotQ09ORklHX1NMSVBfQ09NUFJFU1NFRD15Ci1DT05GSUdfSU5QVVRfRVZERVY9eQotQ09ORklHX0lOUFVUX0VWQlVHPXkKLSMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9NSVNDPXkKLUNPTkZJR19JTlBVVF9VSU5QVVQ9eQotQ09ORklHX1NFUklBTF84MjUwPXkKLUNPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLSMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKLUNPTkZJR19JMkM9eQotQ09ORklHX0kyQ19PTUFQPXkKLUNPTkZJR19TUEk9eQotQ09ORklHX1NQSV9PTUFQX1VXSVJFPXkKLUNPTkZJR19XQVRDSERPRz15Ci1DT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQ9eQotQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KLUNPTkZJR19GQj15Ci1DT05GSUdfRklSTVdBUkVfRURJRD15Ci1DT05GSUdfRkJfTU9ERV9IRUxQRVJTPXkKLUNPTkZJR19GQl9PTUFQPXkKLSMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKLUNPTkZJR19MT0dPPXkKLSMgQ09ORklHX0xPR09fTElOVVhfTU9OTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0dPX0xJTlVYX1ZHQTE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ISUQgaXMgbm90IHNldAotQ09ORklHX1VTQj15Ci1DT05GSUdfVVNCX0RFVklDRUZTPXkKLSMgQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1MgaXMgbm90IHNldAotQ09ORklHX1VTQl9TVVNQRU5EPXkKLUNPTkZJR19VU0JfT1RHPXkKLUNPTkZJR19VU0JfTU9OPXkKLUNPTkZJR19VU0JfT0hDSV9IQ0Q9eQotQ09ORklHX1VTQl9URVNUPXkKLUNPTkZJR19VU0JfR0FER0VUPXkKLUNPTkZJR19VU0JfRVRIPW0KLUNPTkZJR19NTUM9eQotQ09ORklHX01NQ19PTUFQPXkKLUNPTkZJR19SVENfQ0xBU1M9eQotQ09ORklHX1JUQ19EUlZfT01BUD15Ci1DT05GSUdfRVhUMl9GUz15Ci1DT05GSUdfSU5PVElGWT15Ci1DT05GSUdfTVNET1NfRlM9eQotQ09ORklHX1ZGQVRfRlM9eQotQ09ORklHX0pGRlMyX0ZTPXkKLUNPTkZJR19DUkFNRlM9eQotQ09ORklHX1JPTUZTX0ZTPXkKLUNPTkZJR19ORlNfRlM9eQotQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKLUNPTkZJR19OTFNfSVNPODg1OV8xPXkKLUNPTkZJR19ERUJVR19LRVJORUw9eQotQ09ORklHX0RFQlVHX0lORk89eQotQ09ORklHX0RFQlVHX1VTRVI9eQotQ09ORklHX0RFQlVHX0VSUk9SUz15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29tYXBfaW5ub3ZhdG9yXzE1MTBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwX2lubm92YXRvcl8xNTEwX2RlZmNvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjY1YWYyNi4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9jb25maWdzL29tYXBfaW5ub3ZhdG9yXzE1MTBfZGVmY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLUNPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLUNPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfU0xBQj15Ci1DT05GSUdfTU9EVUxFUz15Ci1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci0jIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9PTUFQPXkKLUNPTkZJR19BUkNIX09NQVAxPXkKLUNPTkZJR19NQUNIX09NQVBfSU5OT1ZBVE9SPXkKLUNPTkZJR19PTUFQX0FSTV8xNjhNSFo9eQotIyBDT05GSUdfT01BUF9BUk1fNjBNSFogaXMgbm90IHNldAotQ09ORklHX1BSRUVNUFQ9eQotQ09ORklHX0xFRFM9eQotQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAotQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCi1DT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTMCwxMTUyMDBuOCByb290PS9kZXYvbmZzIGlwPWJvb3RwIG5vaW5pdHJkIgotQ09ORklHX0ZQRV9OV0ZQRT15Ci1DT05GSUdfUE09eQotQ09ORklHX05FVD15Ci1DT05GSUdfUEFDS0VUPXkKLUNPTkZJR19VTklYPXkKLUNPTkZJR19JTkVUPXkKLUNPTkZJR19JUF9NVUxUSUNBU1Q9eQotQ09ORklHX0lQX1BOUD15Ci1DT05GSUdfSVBfUE5QX0RIQ1A9eQotQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0xPT1A9eQotQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9TSVpFPTgxOTIKLUNPTkZJR19TQ1NJPXkKLUNPTkZJR19CTEtfREVWX1NEPXkKLUNPTkZJR19DSFJfREVWX1NUPXkKLUNPTkZJR19CTEtfREVWX1NSPXkKLUNPTkZJR19DSFJfREVWX1NHPXkKLUNPTkZJR19TQ1NJX01VTFRJX0xVTj15Ci1DT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19TTUM5MVg9eQotQ09ORklHX1VTQl9SVEw4MTUwPXkKLUNPTkZJR19VU0JfVVNCTkVUPXkKLSMgQ09ORklHX1VTQl9ORVRfQ0RDX1NVQlNFVCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBQPXkKLUNPTkZJR19QUFBfTVVMVElMSU5LPXkKLUNPTkZJR19QUFBfQVNZTkM9eQotQ09ORklHX1BQUF9ERUZMQVRFPXkKLUNPTkZJR19QUFBfQlNEQ09NUD15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MjQwCi1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9MzIwCi0jIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0Ci1DT05GSUdfS0VZQk9BUkRfT01BUD15Ci0jIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMXzgyNTA9eQotQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQotIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAotQ09ORklHX0kyQz15Ci1DT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQotQ09ORklHX0ZCPXkKLUNPTkZJR19GQl9PTUFQPXkKLSMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKLUNPTkZJR19GT05UUz15Ci1DT05GSUdfRk9OVF84eDg9eQotQ09ORklHX0ZPTlRfOHgxNj15Ci1DT05GSUdfTE9HTz15Ci1DT05GSUdfVVNCPXkKLUNPTkZJR19VU0JfREVCVUc9eQotQ09ORklHX1VTQl9ERVZJQ0VGUz15Ci0jIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfTU9OPXkKLUNPTkZJR19VU0JfT0hDSV9IQ0Q9eQotQ09ORklHX1VTQl9TVE9SQUdFPXkKLUNPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCPXkKLUNPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NPXkKLUNPTkZJR19VU0JfU1RPUkFHRV9TRERSMDk9eQotQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NT15Ci1DT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1Q9eQotQ09ORklHX01NQz15Ci1DT05GSUdfTU1DX09NQVA9eQotQ09ORklHX1JUQ19DTEFTUz15Ci1DT05GSUdfUlRDX0RSVl9PTUFQPXkKLUNPTkZJR19FWFQyX0ZTPXkKLUNPTkZJR19FWFQzX0ZTPXkKLUNPTkZJR19JTk9USUZZPXkKLUNPTkZJR19BVVRPRlNfRlM9eQotQ09ORklHX0FVVE9GUzRfRlM9eQotQ09ORklHX0lTTzk2NjBfRlM9eQotQ09ORklHX0pPTElFVD15Ci1DT05GSUdfTVNET1NfRlM9bQotQ09ORklHX1ZGQVRfRlM9bQotQ09ORklHX1RNUEZTPXkKLUNPTkZJR19ORlNfRlM9eQotQ09ORklHX05GU19WMz15Ci1DT05GSUdfTkZTX1Y0PXkKLUNPTkZJR19ST09UX05GUz15Ci1DT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLUNPTkZJR19NQUdJQ19TWVNSUT15Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKLUNPTkZJR19DUllQVE9fRUNCPW0KLUNPTkZJR19DUllQVE9fUENCQz1tCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29tYXBfaW5ub3ZhdG9yXzE2MTBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwX2lubm92YXRvcl8xNjEwX2RlZmNvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2M3ZmJmOC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9jb25maWdzL29tYXBfaW5ub3ZhdG9yXzE2MTBfZGVmY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfU1lTVklQQz15Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAotQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19NT0RVTEVTPXkKLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX09NQVA9eQotQ09ORklHX0FSQ0hfT01BUDE9eQotIyBDT05GSUdfQVJDSF9PTUFQMTVYWCBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9PTUFQMTZYWD15Ci1DT05GSUdfTUFDSF9PTUFQX0lOTk9WQVRPUj15Ci1DT05GSUdfT01BUF9BUk1fMTkyTUhaPXkKLSMgQ09ORklHX09NQVBfQVJNXzYwTUhaIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSTV9USFVNQiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0g9eQotQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAotQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCi1DT05GSUdfQ01ETElORT0ibWVtPTMyTSBjb25zb2xlPXR0eTAgY29uc29sZT10dHlTMCwxMTUyMDAgaW5pdHJkPTB4MTAyMDAwMDAsOE0gcm9vdD0vZGV2L3JhbTAgcnciCi1DT05GSUdfRlBFX05XRlBFPXkKLUNPTkZJR19ORVQ9eQotQ09ORklHX1BBQ0tFVD1tCi1DT05GSUdfVU5JWD15Ci1DT05GSUdfSU5FVD15Ci1DT05GSUdfSVBfTVVMVElDQVNUPXkKLUNPTkZJR19JUF9QTlA9eQotQ09ORklHX0lQX1BOUF9ESENQPXkKLUNPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9MT09QPXkKLUNPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fU0laRT04MTkyCi1DT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19TTUM5MVg9eQotQ09ORklHX1BQUD15Ci1DT05GSUdfUFBQX01VTFRJTElOSz15Ci0jIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0Ci1DT05GSUdfS0VZQk9BUkRfT01BUD15Ci0jIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMXzgyNTA9eQotQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQotQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KLUNPTkZJR19GQj15Ci1DT05GSUdfRkJfTU9ERV9IRUxQRVJTPXkKLUNPTkZJR19GQl9PTUFQPXkKLSMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKLUNPTkZJR19GT05UUz15Ci1DT05GSUdfRk9OVF84eDg9eQotQ09ORklHX0ZPTlRfOHgxNj15Ci1DT05GSUdfTE9HTz15Ci1DT05GSUdfRVhUMl9GUz15Ci1DT05GSUdfSU5PVElGWT15Ci1DT05GSUdfQVVUT0ZTX0ZTPXkKLUNPTkZJR19BVVRPRlM0X0ZTPXkKLUNPTkZJR19ORlNfRlM9eQotQ09ORklHX05GU19WMz15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29tYXBfb3NrXzU5MTJfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwX29za181OTEyX2RlZmNvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTEwNWRlNy4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9jb25maWdzL29tYXBfb3NrXzU5MTJfZGVmY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfU1lTVklQQz15Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAotQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19NT0RVTEVTPXkKLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX09NQVA9eQotQ09ORklHX0FSQ0hfT01BUDE9eQotQ09ORklHX09NQVBfUkVTRVRfQ0xPQ0tTPXkKLUNPTkZJR19PTUFQXzMyS19USU1FUj15Ci0jIENPTkZJR19BUkNIX09NQVAxNVhYIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX09NQVAxNlhYPXkKLUNPTkZJR19NQUNIX09NQVBfT1NLPXkKLUNPTkZJR19PTUFQX0FSTV8xOTJNSFo9eQotIyBDT05GSUdfT01BUF9BUk1fNjBNSFogaXMgbm90IHNldAotIyBDT05GSUdfQVJNX1RIVU1CIGlzIG5vdCBzZXQKLUNPTkZJR19QQ0NBUkQ9eQotQ09ORklHX09NQVBfQ0Y9eQotQ09ORklHX05PX0haPXkKLUNPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKLUNPTkZJR19aQk9PVF9ST01fQlNTPTB4MAotQ09ORklHX0NNRExJTkU9Im1lbT0zMk0gY29uc29sZT10dHlTMCwxMTUyMDAgaW5pdHJkPTB4MTA0MDAwMDAsOE0gcm9vdD0vZGV2L3JhbTAgcnciCi1DT05GSUdfRlBFX05XRlBFPXkKLUNPTkZJR19QTT15Ci1DT05GSUdfTkVUPXkKLUNPTkZJR19QQUNLRVQ9bQotQ09ORklHX1VOSVg9eQotQ09ORklHX0lORVQ9eQotQ09ORklHX0lQX01VTFRJQ0FTVD15Ci1DT05GSUdfSVBfUE5QPXkKLUNPTkZJR19JUF9QTlBfREhDUD15Ci1DT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLUNPTkZJR19NVEQ9eQotQ09ORklHX01URF9QQVJUSVRJT05TPXkKLUNPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci1DT05GSUdfTVREX0NIQVI9eQotQ09ORklHX01URF9CTE9DSz15Ci1DT05GSUdfTVREX0NGST15Ci1DT05GSUdfTVREX0NGSV9JTlRFTEVYVD15Ci1DT05GSUdfQkxLX0RFVl9MT09QPXkKLUNPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fU0laRT04MTkyCi1DT05GSUdfSURFPW0KLUNPTkZJR19CTEtfREVWX0lERUNTPW0KLUNPTkZJR19ORVRERVZJQ0VTPXkKLUNPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX1NNQzkxWD15Ci1DT05GSUdfUFBQPXkKLUNPTkZJR19QUFBfTVVMVElMSU5LPXkKLSMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9FVkRFVj15Ci0jIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0Ci1DT05GSUdfS0VZQk9BUkRfT01BUD15Ci0jIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQotIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotQ09ORklHX1NFUklBTF84MjUwPXkKLUNPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLUNPTkZJR19JMkM9eQotQ09ORklHX0kyQ19DSEFSREVWPXkKLUNPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCi1DT05GSUdfRkI9eQotQ09ORklHX0ZCX01PREVfSEVMUEVSUz15Ci1DT05GSUdfRkJfT01BUD15Ci0jIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15Ci1DT05GSUdfRk9OVFM9eQotQ09ORklHX0ZPTlRfOHg4PXkKLUNPTkZJR19MT0dPPXkKLSMgQ09ORklHX0xPR09fTElOVVhfTU9OTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0dPX0xJTlVYX1ZHQTE2IGlzIG5vdCBzZXQKLUNPTkZJR19FWFQyX0ZTPXkKLUNPTkZJR19JTk9USUZZPXkKLUNPTkZJR19BVVRPRlNfRlM9eQotQ09ORklHX0FVVE9GUzRfRlM9eQotQ09ORklHX01TRE9TX0ZTPW0KLUNPTkZJR19WRkFUX0ZTPW0KLUNPTkZJR19KRkZTMl9GUz15Ci1DT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ORlNfVjM9eQotQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19OTFNfQ09ERVBBR0VfNDM3PW0KLUNPTkZJR19OTFNfSVNPODg1OV8xPW0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9wZXJzZXVzMl83MzBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwX3BlcnNldXMyXzczMF9kZWZjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhNzc3ZTYuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vbWFwX3BlcnNldXMyXzczMF9kZWZjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX1NMQUI9eQotQ09ORklHX01PRFVMRVM9eQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfT01BUD15Ci1DT05GSUdfQVJDSF9PTUFQMT15Ci1DT05GSUdfQVJDSF9PTUFQNzMwPXkKLSMgQ09ORklHX0FSQ0hfT01BUDE1WFggaXMgbm90IHNldAotQ09ORklHX01BQ0hfT01BUF9QRVJTRVVTMj15Ci1DT05GSUdfT01BUF9BUk1fMTgyTUhaPXkKLSMgQ09ORklHX09NQVBfQVJNXzYwTUhaIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSTV9USFVNQiBpcyBub3Qgc2V0Ci1DT05GSUdfUFJFRU1QVD15Ci1DT05GSUdfTEVEUz15Ci1DT05GSUdfTEVEU19DUFU9eQotQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAotQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCi1DT05GSUdfQ01ETElORT0ibWVtPTMyTSBjb25zb2xlPXR0eVMwLDExNTIwMCBpcD1kaGNwIgotQ09ORklHX0ZQRV9OV0ZQRT15Ci1DT05GSUdfUE09eQotQ09ORklHX05FVD15Ci1DT05GSUdfUEFDS0VUPXkKLUNPTkZJR19VTklYPXkKLUNPTkZJR19JTkVUPXkKLUNPTkZJR19JUF9NVUxUSUNBU1Q9eQotQ09ORklHX0lQX1BOUD15Ci1DT05GSUdfSVBfUE5QX0RIQ1A9eQotQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLUNPTkZJR19NVEQ9eQotQ09ORklHX01URF9QQVJUSVRJT05TPXkKLUNPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci1DT05GSUdfTVREX0NIQVI9eQotQ09ORklHX01URF9CTE9DSz15Ci1DT05GSUdfTVREX0NGST15Ci1DT05GSUdfTVREX0NGSV9JTlRFTEVYVD15Ci1DT05GSUdfTVREX05BTkQ9eQotQ09ORklHX0JMS19ERVZfTE9PUD15Ci1DT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9ODE5MgotQ09ORklHX05FVERFVklDRVM9eQotQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfU01DOTFYPXkKLSMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKLUNPTkZJR19LRVlCT0FSRF9PTUFQPXkKLSMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfODI1MD15Ci1DT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15Ci0jIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0Ci1DT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQotQ09ORklHX0ZCPXkKLUNPTkZJR19GQl9NT0RFX0hFTFBFUlM9eQotQ09ORklHX0ZCX1ZJUlRVQUw9eQotIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX1JUQ19DTEFTUz15Ci1DT05GSUdfUlRDX0RSVl9PTUFQPXkKLUNPTkZJR19FWFQyX0ZTPXkKLUNPTkZJR19JTk9USUZZPXkKLUNPTkZJR19KRkZTMl9GUz15Ci1DT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ST09UX05GUz15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3BhbG10ZV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3BhbG10ZV9kZWZjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyOGQ3Y2IuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9wYWxtdGVfZGVmY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci0jIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfU0xBQj15Ci0jIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX09NQVA9eQotQ09ORklHX0FSQ0hfT01BUDE9eQotQ09ORklHX01BQ0hfT01BUF9QQUxNVEU9eQotQ09ORklHX09NQVBfQ0xPQ0tTX1NFVF9CWV9CT09UTE9BREVSPXkKLSMgQ09ORklHX09NQVBfQVJNXzYwTUhaIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSTV9USFVNQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0Ci1DT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCi1DT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKLUNPTkZJR19GUEVfTldGUEU9eQotIyBDT05GSUdfU1RBTkRBTE9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0zMjAKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT0zMjAKLSMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLUNPTkZJR19GQj15Ci1DT05GSUdfRkJfT01BUD15Ci0jIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15Ci1DT05GSUdfTE9HTz15Ci0jIENPTkZJR19MT0dPX0xJTlVYX01PTk8gaXMgbm90IHNldAotIyBDT05GSUdfTE9HT19MSU5VWF9WR0ExNiBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0dBREdFVD15Ci1DT05GSUdfTU1DPXkKLUNPTkZJR19NTUNfT01BUD15Ci1DT05GSUdfRVhUMl9GUz15Ci1DT05GSUdfTVNET1NfRlM9eQotQ09ORklHX1ZGQVRfRlM9eQotQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTg1MAotQ09ORklHX1RNUEZTPXkKLUNPTkZJR19DUkFNRlM9eQotQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci1DT05GSUdfTkxTX0NPREVQQUdFXzg1MD15Ci1DT05GSUdfTkxTX0lTTzg4NTlfMT15Ci1DT05GSUdfQ1JDX0NDSVRUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvcGFsbXR0X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvcGFsbXR0X2RlZmNvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzFkMDJjNC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9jb25maWdzL3BhbG10dF9kZWZjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfU0xBQj15Ci0jIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX09NQVA9eQotQ09ORklHX0FSQ0hfT01BUDE9eQotQ09ORklHX01BQ0hfT01BUF9QQUxNVFQ9eQotQ09ORklHX09NQVBfQ0xPQ0tTX1NFVF9CWV9CT09UTE9BREVSPXkKLSMgQ09ORklHX09NQVBfQVJNXzYwTUhaIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKLUNPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKLUNPTkZJR19aQk9PVF9ST01fQlNTPTB4MAotQ09ORklHX0NNRExJTkU9InJvb3Q9L2Rldi9tbWNibGswcDIgcncgaW5pdD0vaW5pdCIKLUNPTkZJR19GUEVfTldGUEU9eQotQ09ORklHX05FVD15Ci1DT05GSUdfUEFDS0VUPXkKLUNPTkZJR19VTklYPXkKLUNPTkZJR19ORVRfS0VZPXkKLUNPTkZJR19JTkVUPXkKLSMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0RJQUcgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MzIwCi1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9MzIwCi1DT05GSUdfSU5QVVRfRVZERVY9eQotIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKLUNPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2PXkKLSMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLUNPTkZJR19TUEk9eQotQ09ORklHX1NQSV9PTUFQX1VXSVJFPXkKLUNPTkZJR19GQj15Ci1DT05GSUdfRklSTVdBUkVfRURJRD15Ci1DT05GSUdfRkJfT01BUD15Ci1DT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUPXkKLSMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKLUNPTkZJR19ORVdfTEVEUz15Ci1DT05GSUdfTEVEU19DTEFTUz15Ci1DT05GSUdfTEVEU19UUklHR0VSUz15Ci1DT05GSUdfTEVEU19UUklHR0VSX1RJTUVSPXkKLUNPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUPXkKLUNPTkZJR19SVENfQ0xBU1M9eQotQ09ORklHX1JUQ19EUlZfT01BUD15Ci1DT05GSUdfRVhUMl9GUz15Ci1DT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKLUNPTkZJR19DUkNfQ0NJVFQ9eQotQ09ORklHX0NSQzE2PXkKLUNPTkZJR19MSUJDUkMzMkM9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9wYWxtejcxX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvcGFsbXo3MV9kZWZjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0NzhkYjYuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9wYWxtejcxX2RlZmNvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLUNPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0xPQ0FMVkVSU0lPTj0iLXo3MSIKLUNPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfU0xBQj15Ci0jIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX09NQVA9eQotQ09ORklHX0FSQ0hfT01BUDE9eQotQ09ORklHX01BQ0hfT01BUF9QQUxNWjcxPXkKLUNPTkZJR19PTUFQX0NMT0NLU19TRVRfQllfQk9PVExPQURFUj15Ci0jIENPTkZJR19PTUFQX0FSTV82ME1IWiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUk1fVEhVTUIgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAotQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAotQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCi1DT05GSUdfRlBFX05XRlBFPXkKLUNPTkZJR19ORVQ9eQotQ09ORklHX1BBQ0tFVD15Ci1DT05GSUdfVU5JWD15Ci1DT05GSUdfTkVUX0tFWT15Ci1DT05GSUdfSU5FVD15Ci0jIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0zMjAKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT0zMjAKLSMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9UT1VDSFNDUkVFTj15Ci1DT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0Nj15Ci0jIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMXzgyNTA9eQotQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MTYKLUNPTkZJR19TUEk9eQotQ09ORklHX1NQSV9PTUFQX1VXSVJFPXkKLUNPTkZJR19GQj15Ci1DT05GSUdfRklSTVdBUkVfRURJRD15Ci1DT05GSUdfRkJfT01BUD15Ci1DT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUPXkKLSMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKLUNPTkZJR19NTUM9eQotQ09ORklHX01NQ19PTUFQPXkKLUNPTkZJR19SVENfQ0xBU1M9eQotQ09ORklHX1JUQ19EUlZfT01BUD15Ci1DT05GSUdfRVhUMl9GUz15Ci1DT05GSUdfQ1JDX0NDSVRUPXkKLUNPTkZJR19DUkMxNj15Ci1DT05GSUdfTElCQ1JDMzJDPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvc3gxX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvc3gxX2RlZmNvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjBhODYxOC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9jb25maWdzL3N4MV9kZWZjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSwxMTAgKzAsMCBAQAotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfU1lTVklQQz15Ci1DT05GSUdfUE9TSVhfTVFVRVVFPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAotQ09ORklHX0VNQkVEREVEPXkKLSMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VMRl9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBU0VfRlVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSE1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0xPQj15Ci1DT05GSUdfUFJPRklMSU5HPXkKLUNPTkZJR19PUFJPRklMRT15Ci1DT05GSUdfTU9EVUxFUz15Ci1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci0jIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9PTUFQPXkKLUNPTkZJR19BUkNIX09NQVAxPXkKLUNPTkZJR19PTUFQX01CT1hfRldLPXkKLUNPTkZJR19NQUNIX1NYMT15Ci1DT05GSUdfT01BUF9BUk1fMTY4TUhaPXkKLSMgQ09ORklHX09NQVBfQVJNXzYwTUhaIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKLUNPTkZJR19QUkVFTVBUPXkKLUNPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKLUNPTkZJR19aQk9PVF9ST01fQlNTPTB4MAotQ09ORklHX0ZQRV9OV0ZQRT15Ci1DT05GSUdfQklORk1UX01JU0M9eQotQ09ORklHX05FVD15Ci1DT05GSUdfUEFDS0VUPXkKLUNPTkZJR19VTklYPXkKLUNPTkZJR19JTkVUPXkKLUNPTkZJR19JUF9QTlA9eQotIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci1DT05GSUdfQ09OTkVDVE9SPXkKLSMgQ09ORklHX1BST0NfRVZFTlRTIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0xPT1A9bQotQ09ORklHX0JMS19ERVZfUkFNPW0KLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0yCi1DT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfUEhZTElCPXkKLUNPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST15Ci0jIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfRVZERVY9eQotIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAotQ09ORklHX0tFWUJPQVJEX09NQVA9eQotIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotQ09ORklHX1NFUklBTF84MjUwPXkKLUNPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz0zCi0jIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotQ09ORklHX0kyQz15Ci1DT05GSUdfSTJDX0NIQVJERVY9eQotQ09ORklHX0kyQ19PTUFQPXkKLSMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLUNPTkZJR19GQj15Ci1DT05GSUdfRkJfT01BUD15Ci1DT05GSUdfRkJfT01BUF9CT09UTE9BREVSX0lOSVQ9eQotIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQotQ09ORklHX0ZPTlRTPXkKLUNPTkZJR19GT05UX01JTklfNHg2PXkKLUNPTkZJR19MT0dPPXkKLSMgQ09ORklHX0xPR09fTElOVVhfTU9OTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0dPX0xJTlVYX1ZHQTE2IGlzIG5vdCBzZXQKLUNPTkZJR19TT1VORD15Ci1DT05GSUdfU05EPXkKLUNPTkZJR19TTkRfTUlYRVJfT1NTPXkKLUNPTkZJR19TTkRfUENNX09TUz15Ci0jIENPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0dBREdFVD15Ci1DT05GSUdfVVNCX0VUSD1tCi1DT05GSUdfTU1DPXkKLUNPTkZJR19NTUNfT01BUD15Ci1DT05GSUdfUlRDX0NMQVNTPXkKLUNPTkZJR19SVENfRFJWX09NQVA9eQotQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5PVElGWT15Ci1DT05GSUdfTVNET1NfRlM9eQotQ09ORklHX1ZGQVRfRlM9eQotQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTg2NgotQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0ia29pOC1yIgotQ09ORklHX0NSQU1GUz15Ci1DT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ST09UX05GUz15Ci1DT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLUNPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKLUNPTkZJR19OTFNfQ09ERVBBR0VfODY2PXkKLUNPTkZJR19OTFNfQ09ERVBBR0VfMTI1MT15Ci1DT05GSUdfTkxTX0lTTzg4NTlfMT15Ci1DT05GSUdfTkxTX0lTTzg4NTlfNT15Ci1DT05GSUdfTkxTX0tPSThfUj15Ci1DT05GSUdfTkxTX1VURjg9eQotIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKLUNPTkZJR19DUkNfQ0NJVFQ9eQotQ09ORklHX0NSQzE2PXkKLUNPTkZJR19MSUJDUkMzMkM9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXNzZW1ibGVyLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hc3NlbWJsZXIuaAppbmRleCA3NDliYjY2Li5iYzJkMmQ3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hc3NlbWJsZXIuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hc3NlbWJsZXIuaApAQCAtMTgsNiArMTgsNyBAQAogI2VuZGlmCiAKICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisjaW5jbHVkZSA8YXNtL2RvbWFpbi5oPgogCiAvKgogICogRW5kaWFuIGluZGVwZW5kZW50IG1hY3JvcyBmb3Igc2hpZnRpbmcgYnl0ZXMgd2l0aGluIHJlZ2lzdGVycy4KQEAgLTE1NywxNiArMTU4LDI0IEBACiAjaWZkZWYgQ09ORklHX1NNUAogI2RlZmluZSBBTFRfU01QKGluc3RyLi4uKQkJCQkJXAogOTk5ODoJaW5zdHIKKy8qCisgKiBOb3RlOiBpZiB5b3UgZ2V0IGFzc2VtYmxlciBlcnJvcnMgZnJvbSBBTFRfVVAoKSB3aGVuIGJ1aWxkaW5nIHdpdGgKKyAqIENPTkZJR19USFVNQjJfS0VSTkVMLCB5b3UgYWxtb3N0IGNlcnRhaW5seSBuZWVkIHRvIHVzZQorICogQUxUX1NNUCggVyhpbnN0cikgLi4uICkKKyAqLwogI2RlZmluZSBBTFRfVVAoaW5zdHIuLi4pCQkJCQlcCiAJLnB1c2hzZWN0aW9uICIuYWx0LnNtcC5pbml0IiwgImEiCQkJO1wKIAkubG9uZwk5OTk4YgkJCQkJCTtcCi0JaW5zdHIJCQkJCQkJO1wKKzk5OTc6CWluc3RyCQkJCQkJCTtcCisJLmlmIC4gLSA5OTk3YiAhPSA0CQkJCQk7XAorCQkuZXJyb3IgIkFMVF9VUCgpIGNvbnRlbnQgbXVzdCBhc3NlbWJsZSB0byBleGFjdGx5IDQgYnl0ZXMiO1wKKwkuZW5kaWYJCQkJCQkJO1wKIAkucG9wc2VjdGlvbgogI2RlZmluZSBBTFRfVVBfQihsYWJlbCkJCQkJCVwKIAkuZXF1CXVwX2Jfb2Zmc2V0LCBsYWJlbCAtIDk5OThiCQkJO1wKIAkucHVzaHNlY3Rpb24gIi5hbHQuc21wLmluaXQiLCAiYSIJCQk7XAogCS5sb25nCTk5OThiCQkJCQkJO1wKLQliCS4gKyB1cF9iX29mZnNldAkJCQkJO1wKKwlXKGIpCS4gKyB1cF9iX29mZnNldAkJCQkJO1wKIAkucG9wc2VjdGlvbgogI2Vsc2UKICNkZWZpbmUgQUxUX1NNUChpbnN0ci4uLikKQEAgLTE3NywxNiArMTg2LDI0IEBACiAvKgogICogU01QIGRhdGEgbWVtb3J5IGJhcnJpZXIKICAqLwotCS5tYWNybwlzbXBfZG1iCisJLm1hY3JvCXNtcF9kbWIgbW9kZQogI2lmZGVmIENPTkZJR19TTVAKICNpZiBfX0xJTlVYX0FSTV9BUkNIX18gPj0gNworCS5pZmVxcyAiXG1vZGUiLCJhcm0iCiAJQUxUX1NNUChkbWIpCisJLmVsc2UKKwlBTFRfU01QKFcoZG1iKSkKKwkuZW5kaWYKICNlbGlmIF9fTElOVVhfQVJNX0FSQ0hfXyA9PSA2CiAJQUxUX1NNUChtY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNSkJQCBkbWIKICNlbHNlCiAjZXJyb3IgSW5jb21wYXRpYmxlIFNNUCBwbGF0Zm9ybQogI2VuZGlmCisJLmlmZXFzICJcbW9kZSIsImFybSIKIAlBTFRfVVAobm9wKQorCS5lbHNlCisJQUxUX1VQKFcobm9wKSkKKwkuZW5kaWYKICNlbmRpZgogCS5lbmRtCiAKQEAgLTIwNiwxMiArMjIzLDEyIEBACiAgKi8KICNpZmRlZiBDT05GSUdfVEhVTUIyX0tFUk5FTAogCi0JLm1hY3JvCXVzcmFjY29mZiwgaW5zdHIsIHJlZywgcHRyLCBpbmMsIG9mZiwgY29uZCwgYWJvcnQKKwkubWFjcm8JdXNyYWNjb2ZmLCBpbnN0ciwgcmVnLCBwdHIsIGluYywgb2ZmLCBjb25kLCBhYm9ydCwgdD1UKCkKIDk5OTk6CiAJLmlmCVxpbmMgPT0gMQotCVxpbnN0clxjb25kXCgpYnQgXHJlZywgW1xwdHIsICNcb2ZmXQorCVxpbnN0clxjb25kXCgpYlwoKVx0XCgpLncgXHJlZywgW1xwdHIsICNcb2ZmXQogCS5lbHNlaWYJXGluYyA9PSA0Ci0JXGluc3RyXGNvbmRcKCl0IFxyZWcsIFtccHRyLCAjXG9mZl0KKwlcaW5zdHJcY29uZFwoKVx0XCgpLncgXHJlZywgW1xwdHIsICNcb2ZmXQogCS5lbHNlCiAJLmVycm9yCSJVbnN1cHBvcnRlZCBpbmMgbWFjcm8gYXJndW1lbnQiCiAJLmVuZGlmCkBAIC0yNDYsMTMgKzI2MywxMyBAQAogCiAjZWxzZQkvKiAhQ09ORklHX1RIVU1CMl9LRVJORUwgKi8KIAotCS5tYWNybwl1c3JhY2MsIGluc3RyLCByZWcsIHB0ciwgaW5jLCBjb25kLCByZXB0LCBhYm9ydAorCS5tYWNybwl1c3JhY2MsIGluc3RyLCByZWcsIHB0ciwgaW5jLCBjb25kLCByZXB0LCBhYm9ydCwgdD1UKCkKIAkucmVwdAlccmVwdAogOTk5OToKIAkuaWYJXGluYyA9PSAxCi0JXGluc3RyXGNvbmRcKClidCBccmVnLCBbXHB0cl0sICNcaW5jCisJXGluc3RyXGNvbmRcKCliXCgpXHQgXHJlZywgW1xwdHJdLCAjXGluYwogCS5lbHNlaWYJXGluYyA9PSA0Ci0JXGluc3RyXGNvbmRcKCl0IFxyZWcsIFtccHRyXSwgI1xpbmMKKwlcaW5zdHJcY29uZFwoKVx0IFxyZWcsIFtccHRyXSwgI1xpbmMKIAkuZWxzZQogCS5lcnJvcgkiVW5zdXBwb3J0ZWQgaW5jIG1hY3JvIGFyZ3VtZW50IgogCS5lbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vY2FjaGUuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2NhY2hlLmgKaW5kZXggOWQ2MTIyMC4uNzVmZTY2YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vY2FjaGUuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9jYWNoZS5oCkBAIC0yMyw0ICsyMyw2IEBACiAjZGVmaW5lIEFSQ0hfU0xBQl9NSU5BTElHTiA4CiAjZW5kaWYKIAorI2RlZmluZSBfX3JlYWRfbW9zdGx5IF9fYXR0cmlidXRlX18oKF9fc2VjdGlvbl9fKCIuZGF0YS4ucmVhZF9tb3N0bHkiKSkpCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vY2xrZGV2LmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9jbGtkZXYuaAppbmRleCBiNTZjMTM4Li43NjVkMzMyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9jbGtkZXYuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9jbGtkZXYuaApAQCAtMTIsMjMgKzEyLDEzIEBACiAjaWZuZGVmIF9fQVNNX0NMS0RFVl9ICiAjZGVmaW5lIF9fQVNNX0NMS0RFVl9ICiAKLXN0cnVjdCBjbGs7Ci1zdHJ1Y3QgZGV2aWNlOworI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAotc3RydWN0IGNsa19sb29rdXAgewotCXN0cnVjdCBsaXN0X2hlYWQJbm9kZTsKLQljb25zdCBjaGFyCQkqZGV2X2lkOwotCWNvbnN0IGNoYXIJCSpjb25faWQ7Ci0Jc3RydWN0IGNsawkJKmNsazsKLX07CisjaW5jbHVkZSA8bWFjaC9jbGtkZXYuaD4KIAotc3RydWN0IGNsa19sb29rdXAgKmNsa2Rldl9hbGxvYyhzdHJ1Y3QgY2xrICpjbGssIGNvbnN0IGNoYXIgKmNvbl9pZCwKLQljb25zdCBjaGFyICpkZXZfZm10LCAuLi4pOwotCi12b2lkIGNsa2Rldl9hZGQoc3RydWN0IGNsa19sb29rdXAgKmNsKTsKLXZvaWQgY2xrZGV2X2Ryb3Aoc3RydWN0IGNsa19sb29rdXAgKmNsKTsKLQotdm9pZCBjbGtkZXZfYWRkX3RhYmxlKHN0cnVjdCBjbGtfbG9va3VwICosIHNpemVfdCk7Ci1pbnQgY2xrX2FkZF9hbGlhcyhjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY2hhciAqLCBzdHJ1Y3QgZGV2aWNlICopOworc3RhdGljIGlubGluZSBzdHJ1Y3QgY2xrX2xvb2t1cF9hbGxvYyAqX19jbGtkZXZfYWxsb2Moc2l6ZV90IHNpemUpCit7CisJcmV0dXJuIGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7Cit9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKaW5kZXggYzU2OGRhNy4uNGZmZjgzNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCkBAIC01LDI0ICs1LDI5IEBACiAKICNpbmNsdWRlIDxsaW51eC9tbV90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CisjaW5jbHVkZSA8bGludXgvZG1hLWRlYnVnLmg+CiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9kbWEtY29oZXJlbnQuaD4KICNpbmNsdWRlIDxhc20vbWVtb3J5Lmg+CiAKKyNpZmRlZiBfX2FyY2hfcGFnZV90b19kbWEKKyNlcnJvciBQbGVhc2UgdXBkYXRlIHRvIF9fYXJjaF9wZm5fdG9fZG1hCisjZW5kaWYKKwogLyoKLSAqIHBhZ2VfdG9fZG1hL2RtYV90b192aXJ0L3ZpcnRfdG9fZG1hIGFyZSBhcmNoaXRlY3R1cmUgcHJpdmF0ZSBmdW5jdGlvbnMKLSAqIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgRE1BLW1hcHBpbmcgQVBJIHRvIHByb3ZpZGUgRE1BIGFkZHJlc3Nlcy4gVGhleQotICogbXVzdCBub3QgYmUgdXNlZCBieSBkcml2ZXJzLgorICogZG1hX3RvX3Bmbi9wZm5fdG9fZG1hL2RtYV90b192aXJ0L3ZpcnRfdG9fZG1hIGFyZSBhcmNoaXRlY3R1cmUgcHJpdmF0ZQorICogZnVuY3Rpb25zIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgRE1BLW1hcHBpbmcgQVBJIHRvIHByb3ZpZGUgRE1BCisgKiBhZGRyZXNzZXMuIFRoZXkgbXVzdCBub3QgYmUgdXNlZCBieSBkcml2ZXJzLgogICovCi0jaWZuZGVmIF9fYXJjaF9wYWdlX3RvX2RtYQotc3RhdGljIGlubGluZSBkbWFfYWRkcl90IHBhZ2VfdG9fZG1hKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2UpCisjaWZuZGVmIF9fYXJjaF9wZm5fdG9fZG1hCitzdGF0aWMgaW5saW5lIGRtYV9hZGRyX3QgcGZuX3RvX2RtYShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgcGZuKQogewotCXJldHVybiAoZG1hX2FkZHJfdClfX3Bmbl90b19idXMocGFnZV90b19wZm4ocGFnZSkpOworCXJldHVybiAoZG1hX2FkZHJfdClfX3Bmbl90b19idXMocGZuKTsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqZG1hX3RvX3BhZ2Uoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGFkZHIpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZG1hX3RvX3BmbihzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgYWRkcikKIHsKLQlyZXR1cm4gcGZuX3RvX3BhZ2UoX19idXNfdG9fcGZuKGFkZHIpKTsKKwlyZXR1cm4gX19idXNfdG9fcGZuKGFkZHIpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgKmRtYV90b192aXJ0KHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBhZGRyKQpAQCAtMzUsMTQgKzQwLDE0IEBACiAJcmV0dXJuIChkbWFfYWRkcl90KV9fdmlydF90b19idXMoKHVuc2lnbmVkIGxvbmcpKGFkZHIpKTsKIH0KICNlbHNlCi1zdGF0aWMgaW5saW5lIGRtYV9hZGRyX3QgcGFnZV90b19kbWEoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3N0YXRpYyBpbmxpbmUgZG1hX2FkZHJfdCBwZm5fdG9fZG1hKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBwZm4pCiB7Ci0JcmV0dXJuIF9fYXJjaF9wYWdlX3RvX2RtYShkZXYsIHBhZ2UpOworCXJldHVybiBfX2FyY2hfcGZuX3RvX2RtYShkZXYsIHBmbik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKmRtYV90b19wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBhZGRyKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGRtYV90b19wZm4oc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGFkZHIpCiB7Ci0JcmV0dXJuIF9fYXJjaF9kbWFfdG9fcGFnZShkZXYsIGFkZHIpOworCXJldHVybiBfX2FyY2hfZG1hX3RvX3BmbihkZXYsIGFkZHIpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgKmRtYV90b192aXJ0KHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBhZGRyKQpAQCAtMjkzLDEzICsyOTgsMTMgQEAKIC8qCiAgKiBUaGUgRE1BIEFQSSwgaW1wbGVtZW50ZWQgYnkgZG1hYm91bmNlLmMuICBTZWUgYmVsb3cgZm9yIGRlc2NyaXB0aW9ucy4KICAqLwotZXh0ZXJuIGRtYV9hZGRyX3QgZG1hX21hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqLCB2b2lkICosIHNpemVfdCwKK2V4dGVybiBkbWFfYWRkcl90IF9fZG1hX21hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqLCB2b2lkICosIHNpemVfdCwKIAkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24pOwotZXh0ZXJuIHZvaWQgZG1hX3VubWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICosIGRtYV9hZGRyX3QsIHNpemVfdCwKK2V4dGVybiB2b2lkIF9fZG1hX3VubWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICosIGRtYV9hZGRyX3QsIHNpemVfdCwKIAkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24pOwotZXh0ZXJuIGRtYV9hZGRyX3QgZG1hX21hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKiwgc3RydWN0IHBhZ2UgKiwKK2V4dGVybiBkbWFfYWRkcl90IF9fZG1hX21hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKiwgc3RydWN0IHBhZ2UgKiwKIAkJdW5zaWduZWQgbG9uZywgc2l6ZV90LCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbik7Ci1leHRlcm4gdm9pZCBkbWFfdW5tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICosIGRtYV9hZGRyX3QsIHNpemVfdCwKK2V4dGVybiB2b2lkIF9fZG1hX3VubWFwX3BhZ2Uoc3RydWN0IGRldmljZSAqLCBkbWFfYWRkcl90LCBzaXplX3QsCiAJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uKTsKIAogLyoKQEAgLTMyMyw2ICszMjgsMzQgQEAKIH0KIAogCitzdGF0aWMgaW5saW5lIGRtYV9hZGRyX3QgX19kbWFfbWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmNwdV9hZGRyLAorCQlzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQoreworCV9fZG1hX3NpbmdsZV9jcHVfdG9fZGV2KGNwdV9hZGRyLCBzaXplLCBkaXIpOworCXJldHVybiB2aXJ0X3RvX2RtYShkZXYsIGNwdV9hZGRyKTsKK30KKworc3RhdGljIGlubGluZSBkbWFfYWRkcl90IF9fZG1hX21hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2UsCisJICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKK3sKKwlfX2RtYV9wYWdlX2NwdV90b19kZXYocGFnZSwgb2Zmc2V0LCBzaXplLCBkaXIpOworCXJldHVybiBwZm5fdG9fZG1hKGRldiwgcGFnZV90b19wZm4ocGFnZSkpICsgb2Zmc2V0OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19kbWFfdW5tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBoYW5kbGUsCisJCXNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCit7CisJX19kbWFfc2luZ2xlX2Rldl90b19jcHUoZG1hX3RvX3ZpcnQoZGV2LCBoYW5kbGUpLCBzaXplLCBkaXIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19kbWFfdW5tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgaGFuZGxlLAorCQlzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQoreworCV9fZG1hX3BhZ2VfZGV2X3RvX2NwdShwZm5fdG9fcGFnZShkbWFfdG9fcGZuKGRldiwgaGFuZGxlKSksCisJCWhhbmRsZSAmIH5QQUdFX01BU0ssIHNpemUsIGRpcik7Cit9CisjZW5kaWYgLyogQ09ORklHX0RNQUJPVU5DRSAqLworCiAvKioKICAqIGRtYV9tYXBfc2luZ2xlIC0gbWFwIGEgc2luZ2xlIGJ1ZmZlciBmb3Igc3RyZWFtaW5nIERNQQogICogQGRldjogdmFsaWQgc3RydWN0IGRldmljZSBwb2ludGVyLCBvciBOVUxMIGZvciBJU0EgYW5kIEVJU0EtbGlrZSBkZXZpY2VzCkBAIC0zNDAsMTEgKzM3MywxNiBAQAogc3RhdGljIGlubGluZSBkbWFfYWRkcl90IGRtYV9tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsCiAJCXNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCiB7CisJZG1hX2FkZHJfdCBhZGRyOworCiAJQlVHX09OKCF2YWxpZF9kbWFfZGlyZWN0aW9uKGRpcikpOwogCi0JX19kbWFfc2luZ2xlX2NwdV90b19kZXYoY3B1X2FkZHIsIHNpemUsIGRpcik7CisJYWRkciA9IF9fZG1hX21hcF9zaW5nbGUoZGV2LCBjcHVfYWRkciwgc2l6ZSwgZGlyKTsKKwlkZWJ1Z19kbWFfbWFwX3BhZ2UoZGV2LCB2aXJ0X3RvX3BhZ2UoY3B1X2FkZHIpLAorCQkJKHVuc2lnbmVkIGxvbmcpY3B1X2FkZHIgJiB+UEFHRV9NQVNLLCBzaXplLAorCQkJZGlyLCBhZGRyLCB0cnVlKTsKIAotCXJldHVybiB2aXJ0X3RvX2RtYShkZXYsIGNwdV9hZGRyKTsKKwlyZXR1cm4gYWRkcjsKIH0KIAogLyoqCkBAIC0zNjQsMTEgKzQwMiwxNCBAQAogc3RhdGljIGlubGluZSBkbWFfYWRkcl90IGRtYV9tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwYWdlICpwYWdlLAogCSAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCiB7CisJZG1hX2FkZHJfdCBhZGRyOworCiAJQlVHX09OKCF2YWxpZF9kbWFfZGlyZWN0aW9uKGRpcikpOwogCi0JX19kbWFfcGFnZV9jcHVfdG9fZGV2KHBhZ2UsIG9mZnNldCwgc2l6ZSwgZGlyKTsKKwlhZGRyID0gX19kbWFfbWFwX3BhZ2UoZGV2LCBwYWdlLCBvZmZzZXQsIHNpemUsIGRpcik7CisJZGVidWdfZG1hX21hcF9wYWdlKGRldiwgcGFnZSwgb2Zmc2V0LCBzaXplLCBkaXIsIGFkZHIsIGZhbHNlKTsKIAotCXJldHVybiBwYWdlX3RvX2RtYShkZXYsIHBhZ2UpICsgb2Zmc2V0OworCXJldHVybiBhZGRyOwogfQogCiAvKioKQEAgLTM4OCw3ICs0MjksOCBAQAogc3RhdGljIGlubGluZSB2b2lkIGRtYV91bm1hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGhhbmRsZSwKIAkJc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKIHsKLQlfX2RtYV9zaW5nbGVfZGV2X3RvX2NwdShkbWFfdG9fdmlydChkZXYsIGhhbmRsZSksIHNpemUsIGRpcik7CisJZGVidWdfZG1hX3VubWFwX3BhZ2UoZGV2LCBoYW5kbGUsIHNpemUsIGRpciwgdHJ1ZSk7CisJX19kbWFfdW5tYXBfc2luZ2xlKGRldiwgaGFuZGxlLCBzaXplLCBkaXIpOwogfQogCiAvKioKQEAgLTQwOCwxMCArNDUwLDkgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfdW5tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgaGFuZGxlLAogCQlzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQogewotCV9fZG1hX3BhZ2VfZGV2X3RvX2NwdShkbWFfdG9fcGFnZShkZXYsIGhhbmRsZSksIGhhbmRsZSAmIH5QQUdFX01BU0ssCi0JCXNpemUsIGRpcik7CisJZGVidWdfZG1hX3VubWFwX3BhZ2UoZGV2LCBoYW5kbGUsIHNpemUsIGRpciwgZmFsc2UpOworCV9fZG1hX3VubWFwX3BhZ2UoZGV2LCBoYW5kbGUsIHNpemUsIGRpcik7CiB9Ci0jZW5kaWYgLyogQ09ORklHX0RNQUJPVU5DRSAqLwogCiAvKioKICAqIGRtYV9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfY3B1CkBAIC00MzcsNiArNDc4LDggQEAKIHsKIAlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyKSk7CiAKKwlkZWJ1Z19kbWFfc3luY19zaW5nbGVfZm9yX2NwdShkZXYsIGhhbmRsZSArIG9mZnNldCwgc2l6ZSwgZGlyKTsKKwogCWlmICghZG1hYm91bmNlX3N5bmNfZm9yX2NwdShkZXYsIGhhbmRsZSwgb2Zmc2V0LCBzaXplLCBkaXIpKQogCQlyZXR1cm47CiAKQEAgLTQ0OSw2ICs0OTIsOCBAQAogewogCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXIpKTsKIAorCWRlYnVnX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGRldiwgaGFuZGxlICsgb2Zmc2V0LCBzaXplLCBkaXIpOworCiAJaWYgKCFkbWFib3VuY2Vfc3luY19mb3JfZGV2aWNlKGRldiwgaGFuZGxlLCBvZmZzZXQsIHNpemUsIGRpcikpCiAJCXJldHVybjsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vZG9tYWluLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9kb21haW4uaAppbmRleCBjYzdlZjQwLi5hZjE4Y2VhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9kb21haW4uaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9kb21haW4uaApAQCAtNDUsMTMgKzQ1LDE3IEBACiAgKi8KICNkZWZpbmUgRE9NQUlOX05PQUNDRVNTCTAKICNkZWZpbmUgRE9NQUlOX0NMSUVOVAkxCisjaWZkZWYgQ09ORklHX0NQVV9VU0VfRE9NQUlOUwogI2RlZmluZSBET01BSU5fTUFOQUdFUgkzCisjZWxzZQorI2RlZmluZSBET01BSU5fTUFOQUdFUgkxCisjZW5kaWYKIAogI2RlZmluZSBkb21haW5fdmFsKGRvbSx0eXBlKQkoKHR5cGUpIDw8ICgyKihkb20pKSkKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAotI2lmZGVmIENPTkZJR19NTVUKKyNpZmRlZiBDT05GSUdfQ1BVX1VTRV9ET01BSU5TCiAjZGVmaW5lIHNldF9kb21haW4oeCkJCQkJCVwKIAlkbyB7CQkJCQkJXAogCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQlcCkBAIC03NCw1ICs3OCwyOCBAQAogI2RlZmluZSBtb2RpZnlfZG9tYWluKGRvbSx0eXBlKQlkbyB7IH0gd2hpbGUgKDApCiAjZW5kaWYKIAorLyoKKyAqIEdlbmVyYXRlIHRoZSBUICh1c2VyKSB2ZXJzaW9ucyBvZiB0aGUgTERSL1NUUiBhbmQgcmVsYXRlZAorICogaW5zdHJ1Y3Rpb25zIChpbmxpbmUgYXNzZW1ibHkpCisgKi8KKyNpZmRlZiBDT05GSUdfQ1BVX1VTRV9ET01BSU5TCisjZGVmaW5lIFQoaW5zdHIpCSNpbnN0ciAidCIKKyNlbHNlCisjZGVmaW5lIFQoaW5zdHIpCSNpbnN0cgogI2VuZGlmCi0jZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworCisjZWxzZSAvKiBfX0FTU0VNQkxZX18gKi8KKworLyoKKyAqIEdlbmVyYXRlIHRoZSBUICh1c2VyKSB2ZXJzaW9ucyBvZiB0aGUgTERSL1NUUiBhbmQgcmVsYXRlZAorICogaW5zdHJ1Y3Rpb25zCisgKi8KKyNpZmRlZiBDT05GSUdfQ1BVX1VTRV9ET01BSU5TCisjZGVmaW5lIFQoaW5zdHIpCWluc3RyICMjIHQKKyNlbHNlCisjZGVmaW5lIFQoaW5zdHIpCWluc3RyCisjZW5kaWYKKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYgLyogIV9fQVNNX1BST0NfRE9NQUlOX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2VsZi5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vZWxmLmgKaW5kZXggOGJiNjZiYy4uYzNjZDg3NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vZWxmLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vZWxmLmgKQEAgLTk5LDYgKzk5LDggQEAKIGV4dGVybiBpbnQgZWxmX2NoZWNrX2FyY2goY29uc3Qgc3RydWN0IGVsZjMyX2hkciAqKTsKICNkZWZpbmUgZWxmX2NoZWNrX2FyY2ggZWxmX2NoZWNrX2FyY2gKIAorI2RlZmluZSB2bWNvcmVfZWxmNjRfY2hlY2tfYXJjaCh4KSAoMCkKKwogZXh0ZXJuIGludCBhcm1fZWxmX3JlYWRfaW1wbGllc19leGVjKGNvbnN0IHN0cnVjdCBlbGYzMl9oZHIgKiwgaW50KTsKICNkZWZpbmUgZWxmX3JlYWRfaW1wbGllc19leGVjKGV4LHN0aykgYXJtX2VsZl9yZWFkX2ltcGxpZXNfZXhlYygmKGV4KSwgc3RrKQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9lbnRyeS1tYWNyby1tdWx0aS5TIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vZW50cnktbWFjcm8tbXVsdGkuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzBiYmY3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vZW50cnktbWFjcm8tbXVsdGkuUwpAQCAtMCwwICsxLDQ0IEBACisvKgorICogSW50ZXJydXB0IGhhbmRsaW5nLiAgUHJlc2VydmVzIHI3LCByOCwgcjkKKyAqLworCS5tYWNybwlhcmNoX2lycV9oYW5kbGVyX2RlZmF1bHQKKwlnZXRfaXJxbnJfcHJlYW1ibGUgcjUsIGxyCisxOglnZXRfaXJxbnJfYW5kX2Jhc2UgcjAsIHI2LCByNSwgbHIKKwltb3ZuZQlyMSwgc3AKKwlACisJQCByb3V0aW5lIGNhbGxlZCB3aXRoIHIwID0gaXJxIG51bWJlciwgcjEgPSBzdHJ1Y3QgcHRfcmVncyAqCisJQAorCWFkcm5lCWxyLCBCU1lNKDFiKQorCWJuZQlhc21fZG9fSVJRCisKKyNpZmRlZiBDT05GSUdfU01QCisJLyoKKwkgKiBYWFgKKwkgKgorCSAqIHRoaXMgbWFjcm8gYXNzdW1lcyB0aGF0IGlycXN0YXQgKHI2KSBhbmQgYmFzZSAocjUpIGFyZQorCSAqIHByZXNlcnZlZCBmcm9tIGdldF9pcnFucl9hbmRfYmFzZSBhYm92ZQorCSAqLworCUFMVF9TTVAodGVzdF9mb3JfaXBpIHIwLCByNiwgcjUsIGxyKQorCUFMVF9VUF9CKDk5OTdmKQorCW1vdm5lCXIxLCBzcAorCWFkcm5lCWxyLCBCU1lNKDFiKQorCWJuZQlkb19JUEkKKworI2lmZGVmIENPTkZJR19MT0NBTF9USU1FUlMKKwl0ZXN0X2Zvcl9sdGlycSByMCwgcjYsIHI1LCBscgorCW1vdm5lCXIwLCBzcAorCWFkcm5lCWxyLCBCU1lNKDFiKQorCWJuZQlkb19sb2NhbF90aW1lcgorI2VuZGlmCisjZW5kaWYKKzk5OTc6CisJLmVuZG0KKworCS5tYWNybwlhcmNoX2lycV9oYW5kbGVyLCBzeW1ib2xfbmFtZQorCS5hbGlnbgk1CisJLmdsb2JhbCBcc3ltYm9sX25hbWUKK1xzeW1ib2xfbmFtZToKKwltb3YJcjQsIGxyCisJYXJjaF9pcnFfaGFuZGxlcl9kZWZhdWx0CisJbW92ICAgICBwYywgcjQKKwkuZW5kbQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vZnV0ZXguaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2Z1dGV4LmgKaW5kZXggNTQwYTA0NC4uYjMzZmU3MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vZnV0ZXguaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9mdXRleC5oCkBAIC0xMywxMiArMTMsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9wcmVlbXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9lcnJuby5oPgorI2luY2x1ZGUgPGFzbS9kb21haW4uaD4KIAogI2RlZmluZSBfX2Z1dGV4X2F0b21pY19vcChpbnNuLCByZXQsIG9sZHZhbCwgdWFkZHIsIG9wYXJnKQlcCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQlcCi0JIjE6CWxkcnQJJTEsIFslMl1cbiIJCQkJXAorCSIxOgkiIFQobGRyKSAiCSUxLCBbJTJdXG4iCQkJXAogCSIJIiBpbnNuICJcbiIJCQkJCVwKLQkiMjoJc3RydAklMCwgWyUyXVxuIgkJCQlcCisJIjI6CSIgVChzdHIpICIJJTAsIFslMl1cbiIJCQlcCiAJIgltb3YJJTAsICMwXG4iCQkJCVwKIAkiMzpcbiIJCQkJCQkJXAogCSIJLnB1c2hzZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIJCVwKQEAgLTk3LDEwICs5OCwxMCBAQAogCXBhZ2VmYXVsdF9kaXNhYmxlKCk7CS8qIGltcGxpZXMgcHJlZW1wdF9kaXNhYmxlKCkgKi8KIAogCV9fYXNtX18gX192b2xhdGlsZV9fKCJAZnV0ZXhfYXRvbWljX2NtcHhjaGdfaW5hdG9taWNcbiIKLQkiMToJbGRydAklMCwgWyUzXVxuIgorCSIxOgkiIFQobGRyKSAiCSUwLCBbJTNdXG4iCiAJIgl0ZXEJJTAsICUxXG4iCiAJIglpdAllcQlAIGV4cGxpY2l0IElUIG5lZWRlZCBmb3IgdGhlIDJiIGxhYmVsXG4iCi0JIjI6CXN0cmVxdAklMiwgWyUzXVxuIgorCSIyOgkiIFQoc3RyZXEpICIJJTIsIFslM11cbiIKIAkiMzpcbiIKIAkiCS5wdXNoc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCiAJIgkuYWxpZ24JM1xuIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vaGFyZGlycS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vaGFyZGlycS5oCmluZGV4IDZkNzQ4NWEuLjg5YWQxODAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2hhcmRpcnEuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9oYXJkaXJxLmgKQEAgLTUsMTMgKzUsMzEgQEAKICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogCisjZGVmaW5lIE5SX0lQSQk1CisKIHR5cGVkZWYgc3RydWN0IHsKIAl1bnNpZ25lZCBpbnQgX19zb2Z0aXJxX3BlbmRpbmc7CisjaWZkZWYgQ09ORklHX0xPQ0FMX1RJTUVSUwogCXVuc2lnbmVkIGludCBsb2NhbF90aW1lcl9pcnFzOworI2VuZGlmCisjaWZkZWYgQ09ORklHX1NNUAorCXVuc2lnbmVkIGludCBpcGlfaXJxc1tOUl9JUEldOworI2VuZGlmCiB9IF9fX19jYWNoZWxpbmVfYWxpZ25lZCBpcnFfY3B1c3RhdF90OwogCiAjaW5jbHVkZSA8bGludXgvaXJxX2NwdXN0YXQuaD4JLyogU3RhbmRhcmQgbWFwcGluZ3MgZm9yIGlycV9jcHVzdGF0X3QgYWJvdmUgKi8KIAorI2RlZmluZSBfX2luY19pcnFfc3RhdChjcHUsIG1lbWJlcikJX19JUlFfU1RBVChjcHUsIG1lbWJlcikrKworI2RlZmluZSBfX2dldF9pcnFfc3RhdChjcHUsIG1lbWJlcikJX19JUlFfU1RBVChjcHUsIG1lbWJlcikKKworI2lmZGVmIENPTkZJR19TTVAKK3U2NCBzbXBfaXJxX3N0YXRfY3B1KHVuc2lnbmVkIGludCBjcHUpOworI2Vsc2UKKyNkZWZpbmUgc21wX2lycV9zdGF0X2NwdShjcHUpCTAKKyNlbmRpZgorCisjZGVmaW5lIGFyY2hfaXJxX3N0YXRfY3B1CXNtcF9pcnFfc3RhdF9jcHUKKwogI2lmIE5SX0lSUVMgPiA1MTIKICNkZWZpbmUgSEFSRElSUV9CSVRTCTEwCiAjZWxpZiBOUl9JUlFTID4gMjU2CmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9oYXJkd2FyZS9jYWNoZS1sMngwLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9oYXJkd2FyZS9jYWNoZS1sMngwLmgKaW5kZXggY2M0MmQ1Zi4uNWFlZWMxZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vaGFyZHdhcmUvY2FjaGUtbDJ4MC5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2hhcmR3YXJlL2NhY2hlLWwyeDAuaApAQCAtNTksNyArNTksMTcgQEAKICNkZWZpbmUgTDJYMF9DQUNIRV9JRF9QQVJUX01BU0sJCSgweGYgPDwgNikKICNkZWZpbmUgTDJYMF9DQUNIRV9JRF9QQVJUX0wyMTAJCSgxIDw8IDYpCiAjZGVmaW5lIEwyWDBfQ0FDSEVfSURfUEFSVF9MMzEwCQkoMyA8PCA2KQotI2RlZmluZSBMMlgwX0FVWF9DVFJMX1dBWV9TSVpFX01BU0sJKDB4MyA8PCAxNykKKworI2RlZmluZSBMMlgwX0FVWF9DVFJMX01BU0sJCQkweGMwMDAwZmZmCisjZGVmaW5lIEwyWDBfQVVYX0NUUkxfQVNTT0NJQVRJVklUWV9TSElGVAkxNgorI2RlZmluZSBMMlgwX0FVWF9DVFJMX1dBWV9TSVpFX1NISUZUCQkxNworI2RlZmluZSBMMlgwX0FVWF9DVFJMX1dBWV9TSVpFX01BU0sJCSgweDMgPDwgMTcpCisjZGVmaW5lIEwyWDBfQVVYX0NUUkxfU0hBUkVfT1ZFUlJJREVfU0hJRlQJMjIKKyNkZWZpbmUgTDJYMF9BVVhfQ1RSTF9OU19MT0NLRE9XTl9TSElGVAkJMjYKKyNkZWZpbmUgTDJYMF9BVVhfQ1RSTF9OU19JTlRfQ1RSTF9TSElGVAkJMjcKKyNkZWZpbmUgTDJYMF9BVVhfQ1RSTF9EQVRBX1BSRUZFVENIX1NISUZUCTI4CisjZGVmaW5lIEwyWDBfQVVYX0NUUkxfSU5TVFJfUFJFRkVUQ0hfU0hJRlQJMjkKKyNkZWZpbmUgTDJYMF9BVVhfQ1RSTF9FQVJMWV9CUkVTUF9TSElGVAkJMzAKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIGV4dGVybiB2b2lkIF9faW5pdCBsMngwX2luaXQodm9pZCBfX2lvbWVtICpiYXNlLCBfX3UzMiBhdXhfdmFsLCBfX3UzMiBhdXhfbWFzayk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9oYXJkd2FyZS9lbnRyeS1tYWNyby1naWMuUyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2hhcmR3YXJlL2VudHJ5LW1hY3JvLWdpYy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxMTViODIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9oYXJkd2FyZS9lbnRyeS1tYWNyby1naWMuUwpAQCAtMCwwICsxLDc1IEBACisvKgorICogYXJjaC9hcm0vaW5jbHVkZS9hc20vaGFyZHdhcmUvZW50cnktbWFjcm8tZ2ljLlMKKyAqCisgKiBMb3ctbGV2ZWwgSVJRIGhlbHBlciBtYWNyb3MgZm9yIEdJQworICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvZ2ljLmg+CisKKyNpZm5kZWYgSEFWRV9HRVRfSVJRTlJfUFJFQU1CTEUKKwkubWFjcm8JZ2V0X2lycW5yX3ByZWFtYmxlLCBiYXNlLCB0bXAKKwlsZHIJXGJhc2UsID1naWNfY3B1X2Jhc2VfYWRkcgorCWxkcglcYmFzZSwgW1xiYXNlXQorCS5lbmRtCisjZW5kaWYKKworLyoKKyAqIFRoZSBpbnRlcnJ1cHQgbnVtYmVyaW5nIHNjaGVtZSBpcyBkZWZpbmVkIGluIHRoZQorICogaW50ZXJydXB0IGNvbnRyb2xsZXIgc3BlYy4gIFRvIHdpdDoKKyAqCisgKiBJbnRlcnJ1cHRzIDAtMTUgYXJlIElQSQorICogMTYtMjggYXJlIHJlc2VydmVkCisgKiAyOS0zMSBhcmUgbG9jYWwuICBXZSBhbGxvdyAzMCB0byBiZSB1c2VkIGZvciB0aGUgd2F0Y2hkb2cuCisgKiAzMi0xMDIwIGFyZSBnbG9iYWwKKyAqIDEwMjEtMTAyMiBhcmUgcmVzZXJ2ZWQKKyAqIDEwMjMgaXMgInNwdXJpb3VzIiAobm8gaW50ZXJydXB0KQorICoKKyAqIEZvciBub3csIHdlIGlnbm9yZSBhbGwgbG9jYWwgaW50ZXJydXB0cyBzbyBvbmx5IHJldHVybiBhbiBpbnRlcnJ1cHQgaWYgaXQncworICogYmV0d2VlbiAzMCBhbmQgMTAyMC4gIFRoZSB0ZXN0X2Zvcl9pcGkgcm91dGluZSBiZWxvdyB3aWxsIHBpY2sgdXAgb24gSVBJcy4KKyAqCisgKiBBIHNpbXBsZSByZWFkIGZyb20gdGhlIGNvbnRyb2xsZXIgd2lsbCB0ZWxsIHVzIHRoZSBudW1iZXIgb2YgdGhlIGhpZ2hlc3QKKyAqIHByaW9yaXR5IGVuYWJsZWQgaW50ZXJydXB0LiAgV2UgdGhlbiBqdXN0IG5lZWQgdG8gY2hlY2sgd2hldGhlciBpdCBpcyBpbiB0aGUKKyAqIHZhbGlkIHJhbmdlIGZvciBhbiBJUlEgKDMwLTEwMjAgaW5jbHVzaXZlKS4KKyAqLworCisJLm1hY3JvICBnZXRfaXJxbnJfYW5kX2Jhc2UsIGlycW5yLCBpcnFzdGF0LCBiYXNlLCB0bXAKKworCWxkciAgICAgXGlycXN0YXQsIFtcYmFzZSwgI0dJQ19DUFVfSU5UQUNLXQorCS8qIGJpdHMgMTItMTAgPSBzcmMgQ1BVLCA5LTAgPSBpbnQgIyAqLworCisJbGRyCVx0bXAsID0xMDIxCisJYmljICAgICBcaXJxbnIsIFxpcnFzdGF0LCAjMHgxYzAwCisJY21wICAgICBcaXJxbnIsICMyOQorCWNtcGNjCVxpcnFuciwgXGlycW5yCisJY21wbmUJXGlycW5yLCBcdG1wCisJY21wY3MJXGlycW5yLCBcaXJxbnIKKwkuZW5kbQorCisvKiBXZSBhc3N1bWUgdGhhdCBpcnFzdGF0ICh0aGUgcmF3IHZhbHVlIG9mIHRoZSBJUlEgYWNrbm93bGVkZ2UKKyAqIHJlZ2lzdGVyKSBpcyBwcmVzZXJ2ZWQgZnJvbSB0aGUgbWFjcm8gYWJvdmUuCisgKiBJZiB0aGVyZSBpcyBhbiBJUEksIHdlIGltbWVkaWF0ZWx5IHNpZ25hbCBlbmQgb2YgaW50ZXJydXB0IG9uIHRoZQorICogY29udHJvbGxlciwgc2luY2UgdGhpcyByZXF1aXJlcyB0aGUgb3JpZ2luYWwgaXJxc3RhdCB2YWx1ZSB3aGljaAorICogd2Ugd29uJ3QgZWFzaWx5IGJlIGFibGUgdG8gcmVjcmVhdGUgbGF0ZXIuCisgKi8KKworCS5tYWNybyB0ZXN0X2Zvcl9pcGksIGlycW5yLCBpcnFzdGF0LCBiYXNlLCB0bXAKKwliaWMJXGlycW5yLCBcaXJxc3RhdCwgIzB4MWMwMAorCWNtcAlcaXJxbnIsICMxNgorCXN0cmNjCVxpcnFzdGF0LCBbXGJhc2UsICNHSUNfQ1BVX0VPSV0KKwljbXBjcwlcaXJxbnIsIFxpcnFucgorCS5lbmRtCisKKy8qIEFzIGFib3ZlLCB0aGlzIGFzc3VtZXMgdGhhdCBpcnFzdGF0IGFuZCBiYXNlIGFyZSBwcmVzZXJ2ZWQuLiAqLworCisJLm1hY3JvIHRlc3RfZm9yX2x0aXJxLCBpcnFuciwgaXJxc3RhdCwgYmFzZSwgdG1wCisJYmljCVxpcnFuciwgXGlycXN0YXQsICMweDFjMDAKKwltb3YgCVx0bXAsICMwCisJY21wCVxpcnFuciwgIzI5CisJbW92ZXEJXHRtcCwgIzEKKwlzdHJlcQlcaXJxc3RhdCwgW1xiYXNlLCAjR0lDX0NQVV9FT0ldCisJY21wCVx0bXAsICMwCisJLmVuZG0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2hhcmR3YXJlL2dpYy5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vaGFyZHdhcmUvZ2ljLmgKaW5kZXggN2YzNDMzMy4uODQ1NTdkMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vaGFyZHdhcmUvZ2ljLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vaGFyZHdhcmUvZ2ljLmgKQEAgLTMzLDEwICszMywxMyBAQAogI2RlZmluZSBHSUNfRElTVF9TT0ZUSU5UCQkweGYwMAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwotdm9pZCBnaWNfZGlzdF9pbml0KHVuc2lnbmVkIGludCBnaWNfbnIsIHZvaWQgX19pb21lbSAqYmFzZSwgdW5zaWduZWQgaW50IGlycV9zdGFydCk7Ci12b2lkIGdpY19jcHVfaW5pdCh1bnNpZ25lZCBpbnQgZ2ljX25yLCB2b2lkIF9faW9tZW0gKmJhc2UpOworZXh0ZXJuIHZvaWQgX19pb21lbSAqZ2ljX2NwdV9iYXNlX2FkZHI7CisKK3ZvaWQgZ2ljX2luaXQodW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQsIHZvaWQgX19pb21lbSAqLCB2b2lkIF9faW9tZW0gKik7Cit2b2lkIGdpY19zZWNvbmRhcnlfaW5pdCh1bnNpZ25lZCBpbnQpOwogdm9pZCBnaWNfY2FzY2FkZV9pcnEodW5zaWduZWQgaW50IGdpY19uciwgdW5zaWduZWQgaW50IGlycSk7CiB2b2lkIGdpY19yYWlzZV9zb2Z0aXJxKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLCB1bnNpZ25lZCBpbnQgaXJxKTsKK3ZvaWQgZ2ljX2VuYWJsZV9wcGkodW5zaWduZWQgaW50KTsKICNlbmRpZgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtdmVyc2F0aWxlL2luY2x1ZGUvcGxhdC90aW1lci1zcC5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vaGFyZHdhcmUvdGltZXItc3AuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9hcm0vcGxhdC12ZXJzYXRpbGUvaW5jbHVkZS9wbGF0L3RpbWVyLXNwLmgKcmVuYW1lIHRvIGFyY2gvYXJtL2luY2x1ZGUvYXNtL2hhcmR3YXJlL3RpbWVyLXNwLmgKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2h3X2JyZWFrcG9pbnQuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2h3X2JyZWFrcG9pbnQuaAppbmRleCA0ZDhhZTlkLi5mMzg5YjI3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9od19icmVha3BvaW50LmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vaHdfYnJlYWtwb2ludC5oCkBAIC0yMCw4ICsyMCw4IEBACiBzdHJ1Y3QgYXJjaF9od19icmVha3BvaW50IHsKIAl1MzIJYWRkcmVzczsKIAl1MzIJdHJpZ2dlcjsKLQlzdHJ1Y3QgcGVyZl9ldmVudCAqc3VzcGVuZGVkX3dwOwotCXN0cnVjdCBhcmNoX2h3X2JyZWFrcG9pbnRfY3RybCBjdHJsOworCXN0cnVjdAlhcmNoX2h3X2JyZWFrcG9pbnRfY3RybCBzdGVwX2N0cmw7CisJc3RydWN0CWFyY2hfaHdfYnJlYWtwb2ludF9jdHJsIGN0cmw7CiB9OwogCiBzdGF0aWMgaW5saW5lIHUzMiBlbmNvZGVfY3RybF9yZWcoc3RydWN0IGFyY2hfaHdfYnJlYWtwb2ludF9jdHJsIGN0cmwpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9pby5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vaW8uaAppbmRleCA4MTVlZmEyLi4yMGUwZjdjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9pby5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2lvLmgKQEAgLTI0MSwxOCArMjQxLDE1IEBACiAgKgogICovCiAjaWZuZGVmIF9fYXJjaF9pb3JlbWFwCi0jZGVmaW5lIGlvcmVtYXAoY29va2llLHNpemUpCQlfX2FybV9pb3JlbWFwKGNvb2tpZSwgc2l6ZSwgTVRfREVWSUNFKQotI2RlZmluZSBpb3JlbWFwX25vY2FjaGUoY29va2llLHNpemUpCV9fYXJtX2lvcmVtYXAoY29va2llLCBzaXplLCBNVF9ERVZJQ0UpCi0jZGVmaW5lIGlvcmVtYXBfY2FjaGVkKGNvb2tpZSxzaXplKQlfX2FybV9pb3JlbWFwKGNvb2tpZSwgc2l6ZSwgTVRfREVWSUNFX0NBQ0hFRCkKLSNkZWZpbmUgaW9yZW1hcF93Yyhjb29raWUsc2l6ZSkJCV9fYXJtX2lvcmVtYXAoY29va2llLCBzaXplLCBNVF9ERVZJQ0VfV0MpCi0jZGVmaW5lIGlvdW5tYXAoY29va2llKQkJCV9faW91bm1hcChjb29raWUpCi0jZWxzZQorI2RlZmluZSBfX2FyY2hfaW9yZW1hcAkJCV9fYXJtX2lvcmVtYXAKKyNkZWZpbmUgX19hcmNoX2lvdW5tYXAJCQlfX2lvdW5tYXAKKyNlbmRpZgorCiAjZGVmaW5lIGlvcmVtYXAoY29va2llLHNpemUpCQlfX2FyY2hfaW9yZW1hcCgoY29va2llKSwgKHNpemUpLCBNVF9ERVZJQ0UpCiAjZGVmaW5lIGlvcmVtYXBfbm9jYWNoZShjb29raWUsc2l6ZSkJX19hcmNoX2lvcmVtYXAoKGNvb2tpZSksIChzaXplKSwgTVRfREVWSUNFKQogI2RlZmluZSBpb3JlbWFwX2NhY2hlZChjb29raWUsc2l6ZSkJX19hcmNoX2lvcmVtYXAoKGNvb2tpZSksIChzaXplKSwgTVRfREVWSUNFX0NBQ0hFRCkKICNkZWZpbmUgaW9yZW1hcF93Yyhjb29raWUsc2l6ZSkJCV9fYXJjaF9pb3JlbWFwKChjb29raWUpLCAoc2l6ZSksIE1UX0RFVklDRV9XQykKLSNkZWZpbmUgaW91bm1hcChjb29raWUpCQkJX19hcmNoX2lvdW5tYXAoY29va2llKQotI2VuZGlmCisjZGVmaW5lIGlvdW5tYXAJCQkJX19hcmNoX2lvdW5tYXAKIAogLyoKICAqIGlve3JlYWQsd3JpdGV9ezgsMTYsMzJ9IG1hY3JvcwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20va2V4ZWMuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2tleGVjLmgKaW5kZXggOGVjOWVmNS4uYzAwOTRkOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20va2V4ZWMuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9rZXhlYy5oCkBAIC0zMywxMCArMzMsMjAgQEAKIAlpZiAob2xkcmVncykgewogCQltZW1jcHkobmV3cmVncywgb2xkcmVncywgc2l6ZW9mKCpuZXdyZWdzKSk7CiAJfSBlbHNlIHsKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzdG1pYSAlMCwge3IwIC0gcjE1fSIKLQkJCQkgICAgICA6IDogInIiICgmbmV3cmVncy0+QVJNX3IwKSk7Ci0JCV9fYXNtX18gX192b2xhdGlsZV9fICgibXJzICUwLCBjcHNyIgotCQkJCSAgICAgIDogIj1yIiAobmV3cmVncy0+QVJNX2Nwc3IpKTsKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCQkJInN0bWlhCSVbcmVnc19iYXNlXSwge3IwLXIxMn1cblx0IgorCQkJIm1vdgklW19BUk1fc3BdLCBzcFxuXHQiCisJCQkic3RyCWxyLCAlW19BUk1fbHJdXG5cdCIKKwkJCSJhZHIJJVtfQVJNX3BjXSwgMWZcblx0IgorCQkJIm1ycwklW19BUk1fY3Bzcl0sIGNwc3Jcblx0IgorCQkiMToiCisJCQk6IFtfQVJNX3BjXSAiPXIiIChuZXdyZWdzLT5BUk1fcGMpLAorCQkJICBbX0FSTV9jcHNyXSAiPXIiIChuZXdyZWdzLT5BUk1fY3BzciksCisJCQkgIFtfQVJNX3NwXSAiPXIiIChuZXdyZWdzLT5BUk1fc3ApLAorCQkJICBbX0FSTV9scl0gIj1vIiAobmV3cmVncy0+QVJNX2xyKQorCQkJOiBbcmVnc19iYXNlXSAiciIgKCZuZXdyZWdzLT5BUk1fcjApCisJCQk6ICJtZW1vcnkiCisJCSk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9sb2NhbHRpbWVyLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9sb2NhbHRpbWVyLmgKaW5kZXggNTBjN2U3Yy4uNmJjNjNhYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vbG9jYWx0aW1lci5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2xvY2FsdGltZXIuaApAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgInNtcF90d2QuaCIKIAogI2RlZmluZSBsb2NhbF90aW1lcl9hY2soKQl0d2RfdGltZXJfYWNrKCkKLSNkZWZpbmUgbG9jYWxfdGltZXJfc3RvcCgpCXR3ZF90aW1lcl9zdG9wKCkKIAogI2Vsc2UKIApAQCAtNDAsMTEgKzM5LDYgQEAKICAqLwogaW50IGxvY2FsX3RpbWVyX2Fjayh2b2lkKTsKIAotLyoKLSAqIFN0b3AgYSBsb2NhbCB0aW1lciBpbnRlcnJ1cHQuCi0gKi8KLXZvaWQgbG9jYWxfdGltZXJfc3RvcCh2b2lkKTsKLQogI2VuZGlmCiAKIC8qCkBAIC01MiwxMiArNDYsNiBAQAogICovCiB2b2lkIGxvY2FsX3RpbWVyX3NldHVwKHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKik7CiAKLSNlbHNlCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBsb2NhbF90aW1lcl9zdG9wKHZvaWQpCi17Ci19Ci0KICNlbmRpZgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21hY2gvYXJjaC5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWFjaC9hcmNoLmgKaW5kZXggZDk3YTk2NC4uM2EwODkzYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWFjaC9hcmNoLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWFjaC9hcmNoLmgKQEAgLTM3LDEyICszNywyMSBAQAogCQkJCQkgc3RydWN0IG1lbWluZm8gKik7CiAJdm9pZAkJCSgqcmVzZXJ2ZSkodm9pZCk7LyogcmVzZXJ2ZSBtZW0gYmxvY2tzCSovCiAJdm9pZAkJCSgqbWFwX2lvKSh2b2lkKTsvKiBJTyBtYXBwaW5nIGZ1bmN0aW9uCSovCisJdm9pZAkJCSgqaW5pdF9lYXJseSkodm9pZCk7CiAJdm9pZAkJCSgqaW5pdF9pcnEpKHZvaWQpOwogCXN0cnVjdCBzeXNfdGltZXIJKnRpbWVyOwkJLyogc3lzdGVtIHRpY2sgdGltZXIJKi8KIAl2b2lkCQkJKCppbml0X21hY2hpbmUpKHZvaWQpOworI2lmZGVmIENPTkZJR19NVUxUSV9JUlFfSEFORExFUgorCXZvaWQJCQkoKmhhbmRsZV9pcnEpKHN0cnVjdCBwdF9yZWdzICopOworI2VuZGlmCiB9OwogCiAvKgorICogQ3VycmVudCBtYWNoaW5lIC0gb25seSBhY2Nlc3NpYmxlIGR1cmluZyBib290LgorICovCitleHRlcm4gc3RydWN0IG1hY2hpbmVfZGVzYyAqbWFjaGluZV9kZXNjOworCisvKgogICogU2V0IG9mIG1hY3JvcyB0byBkZWZpbmUgYXJjaGl0ZWN0dXJlIGZlYXR1cmVzLiAgVGhpcyBpcyBidWlsdCBpbnRvCiAgKiBhIHRhYmxlIGJ5IHRoZSBsaW5rZXIuCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21hY2gvaXJxLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9tYWNoL2lycS5oCmluZGV4IGNlM2VlZTlmLi4yMmFjMTQwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9tYWNoL2lycS5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21hY2gvaXJxLmgKQEAgLTE3LDEwICsxNywxMiBAQAogLyoKICAqIFRoaXMgaXMgaW50ZXJuYWwuICBEbyBub3QgdXNlIGl0LgogICovCi1leHRlcm4gdW5zaWduZWQgaW50IGFyY2hfbnJfaXJxczsKLWV4dGVybiB2b2lkICgqaW5pdF9hcmNoX2lycSkodm9pZCk7CiBleHRlcm4gdm9pZCBpbml0X0ZJUSh2b2lkKTsKLWV4dGVybiBpbnQgc2hvd19maXFfbGlzdChzdHJ1Y3Qgc2VxX2ZpbGUgKiwgdm9pZCAqKTsKK2V4dGVybiBpbnQgc2hvd19maXFfbGlzdChzdHJ1Y3Qgc2VxX2ZpbGUgKiwgaW50KTsKKworI2lmZGVmIENPTkZJR19NVUxUSV9JUlFfSEFORExFUgorZXh0ZXJuIHZvaWQgKCpoYW5kbGVfYXJjaF9pcnEpKHN0cnVjdCBwdF9yZWdzICopOworI2VuZGlmCiAKIC8qCiAgKiBUaGlzIGlzIGZvciBlYXN5IG1pZ3JhdGlvbiwgYnV0IHNob3VsZCBiZSBjaGFuZ2VkIGluIHRoZSBzb3VyY2UKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21hY2gvdGltZS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWFjaC90aW1lLmgKaW5kZXggMzVkNDA4Zi4uODgzZjZiZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWFjaC90aW1lLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWFjaC90aW1lLmgKQEAgLTQzLDcgKzQzLDYgQEAKICNlbmRpZgogfTsKIAotZXh0ZXJuIHN0cnVjdCBzeXNfdGltZXIgKnN5c3RlbV90aW1lcjsKIGV4dGVybiB2b2lkIHRpbWVyX3RpY2sodm9pZCk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vbW9kdWxlLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9tb2R1bGUuaAppbmRleCBjYmIwYmMyLi4xMmM4ZTY4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9tb2R1bGUuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9tb2R1bGUuaApAQCAtOCwxMSArOCw2IEBACiBzdHJ1Y3QgdW53aW5kX3RhYmxlOwogCiAjaWZkZWYgQ09ORklHX0FSTV9VTldJTkQKLXN0cnVjdCBhcm1fdW53aW5kX21hcHBpbmcgewotCUVsZl9TaGRyICp1bndfc2VjOwotCUVsZl9TaGRyICpzZWNfdGV4dDsKLQlzdHJ1Y3QgdW53aW5kX3RhYmxlICp1bndpbmQ7Ci19OwogZW51bSB7CiAJQVJNX1NFQ19JTklULAogCUFSTV9TRUNfREVWSU5JVCwKQEAgLTIxLDE0ICsxNiwxNCBAQAogCUFSTV9TRUNfREVWRVhJVCwKIAlBUk1fU0VDX01BWCwKIH07Ci1zdHJ1Y3QgbW9kX2FyY2hfc3BlY2lmaWMgewotCXN0cnVjdCBhcm1fdW53aW5kX21hcHBpbmcgbWFwW0FSTV9TRUNfTUFYXTsKLX07Ci0jZWxzZQotc3RydWN0IG1vZF9hcmNoX3NwZWNpZmljIHsKLX07CiAjZW5kaWYKIAorc3RydWN0IG1vZF9hcmNoX3NwZWNpZmljIHsKKyNpZmRlZiBDT05GSUdfQVJNX1VOV0lORAorCXN0cnVjdCB1bndpbmRfdGFibGUgKnVud2luZFtBUk1fU0VDX01BWF07CisjZW5kaWYKK307CisKIC8qCiAgKiBJbmNsdWRlIHRoZSBBUk0gYXJjaGl0ZWN0dXJlIHZlcnNpb24uCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BhZ2UuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BhZ2UuaAppbmRleCBhNDg1YWMzLi5mNTFhNjk1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wYWdlLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGFnZS5oCkBAIC0xNTEsMTMgKzE1MSwxNSBAQAogI2RlZmluZSBjbGVhcl9wYWdlKHBhZ2UpCW1lbXNldCgodm9pZCAqKShwYWdlKSwgMCwgUEFHRV9TSVpFKQogZXh0ZXJuIHZvaWQgY29weV9wYWdlKHZvaWQgKnRvLCBjb25zdCB2b2lkICpmcm9tKTsKIAordHlwZWRlZiB1bnNpZ25lZCBsb25nIHB0ZXZhbF90OworCiAjdW5kZWYgU1RSSUNUX01NX1RZUEVDSEVDS1MKIAogI2lmZGVmIFNUUklDVF9NTV9UWVBFQ0hFQ0tTCiAvKgogICogVGhlc2UgYXJlIHVzZWQgdG8gbWFrZSB1c2Ugb2YgQyB0eXBlLWNoZWNraW5nLi4KICAqLwotdHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHB0ZTsgfSBwdGVfdDsKK3R5cGVkZWYgc3RydWN0IHsgcHRldmFsX3QgcHRlOyB9IHB0ZV90OwogdHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHBtZDsgfSBwbWRfdDsKIHR5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBwZ2RbMl07IH0gcGdkX3Q7CiB0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGxvbmcgcGdwcm90OyB9IHBncHJvdF90OwpAQCAtMTc1LDcgKzE3Nyw3IEBACiAvKgogICogLi4gd2hpbGUgdGhlc2UgbWFrZSBpdCBlYXNpZXIgb24gdGhlIGNvbXBpbGVyCiAgKi8KLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBwdGVfdDsKK3R5cGVkZWYgcHRldmFsX3QgcHRlX3Q7CiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgcG1kX3Q7CiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgcGdkX3RbMl07CiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgcGdwcm90X3Q7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wZ2FsbG9jLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKaW5kZXggYjEyY2M5OC4uOTc2M2JlMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGdhbGxvYy5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BnYWxsb2MuaApAQCAtMzAsMTQgKzMwLDE2IEBACiAjZGVmaW5lIHBtZF9mcmVlKG1tLCBwbWQpCQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIHBnZF9wb3B1bGF0ZShtbSxwbWQscHRlKQlCVUcoKQogCi1leHRlcm4gcGdkX3QgKmdldF9wZ2Rfc2xvdyhzdHJ1Y3QgbW1fc3RydWN0ICptbSk7Ci1leHRlcm4gdm9pZCBmcmVlX3BnZF9zbG93KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkKTsKLQotI2RlZmluZSBwZ2RfYWxsb2MobW0pCQkJZ2V0X3BnZF9zbG93KG1tKQotI2RlZmluZSBwZ2RfZnJlZShtbSwgcGdkKQkJZnJlZV9wZ2Rfc2xvdyhtbSwgcGdkKQorZXh0ZXJuIHBnZF90ICpwZ2RfYWxsb2Moc3RydWN0IG1tX3N0cnVjdCAqbW0pOworZXh0ZXJuIHZvaWQgcGdkX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QpOwogCiAjZGVmaW5lIFBHQUxMT0NfR0ZQCShHRlBfS0VSTkVMIHwgX19HRlBfTk9UUkFDSyB8IF9fR0ZQX1JFUEVBVCB8IF9fR0ZQX1pFUk8pCiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhbl9wdGVfdGFibGUocHRlX3QgKnB0ZSkKK3sKKwljbGVhbl9kY2FjaGVfYXJlYShwdGUgKyBQVEVfSFdUQUJMRV9QVFJTLCBQVEVfSFdUQUJMRV9TSVpFKTsKK30KKwogLyoKICAqIEFsbG9jYXRlIG9uZSBQVEUgdGFibGUuCiAgKgpAQCAtNDUsMTQgKzQ3LDE0IEBACiAgKiBpbnRvIG9uZSB0YWJsZSB0aHVzOgogICoKICAqICArLS0tLS0tLS0tLS0tKwotICogIHwgIGgvdyBwdCAwICB8Ci0gKiAgKy0tLS0tLS0tLS0tLSsKLSAqICB8ICBoL3cgcHQgMSAgfAotICogICstLS0tLS0tLS0tLS0rCiAgKiAgfCBMaW51eCBwdCAwIHwKICAqICArLS0tLS0tLS0tLS0tKwogICogIHwgTGludXggcHQgMSB8CiAgKiAgKy0tLS0tLS0tLS0tLSsKKyAqICB8ICBoL3cgcHQgMCAgfAorICogICstLS0tLS0tLS0tLS0rCisgKiAgfCAgaC93IHB0IDEgIHwKKyAqICArLS0tLS0tLS0tLS0tKwogICovCiBzdGF0aWMgaW5saW5lIHB0ZV90ICoKIHB0ZV9hbGxvY19vbmVfa2VybmVsKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpCkBAIC02MCwxMCArNjIsOCBAQAogCXB0ZV90ICpwdGU7CiAKIAlwdGUgPSAocHRlX3QgKilfX2dldF9mcmVlX3BhZ2UoUEdBTExPQ19HRlApOwotCWlmIChwdGUpIHsKLQkJY2xlYW5fZGNhY2hlX2FyZWEocHRlLCBzaXplb2YocHRlX3QpICogUFRSU19QRVJfUFRFKTsKLQkJcHRlICs9IFBUUlNfUEVSX1BURTsKLQl9CisJaWYgKHB0ZSkKKwkJY2xlYW5fcHRlX3RhYmxlKHB0ZSk7CiAKIAlyZXR1cm4gcHRlOwogfQpAQCAtNzksMTAgKzc5LDggQEAKIAlwdGUgPSBhbGxvY19wYWdlcyhQR0FMTE9DX0dGUCwgMCk7CiAjZW5kaWYKIAlpZiAocHRlKSB7Ci0JCWlmICghUGFnZUhpZ2hNZW0ocHRlKSkgewotCQkJdm9pZCAqcGFnZSA9IHBhZ2VfYWRkcmVzcyhwdGUpOwotCQkJY2xlYW5fZGNhY2hlX2FyZWEocGFnZSwgc2l6ZW9mKHB0ZV90KSAqIFBUUlNfUEVSX1BURSk7Ci0JCX0KKwkJaWYgKCFQYWdlSGlnaE1lbShwdGUpKQorCQkJY2xlYW5fcHRlX3RhYmxlKHBhZ2VfYWRkcmVzcyhwdGUpKTsKIAkJcGd0YWJsZV9wYWdlX2N0b3IocHRlKTsKIAl9CiAKQEAgLTk0LDEwICs5Miw4IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBwdGVfZnJlZV9rZXJuZWwoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHB0ZV90ICpwdGUpCiB7Ci0JaWYgKHB0ZSkgewotCQlwdGUgLT0gUFRSU19QRVJfUFRFOworCWlmIChwdGUpCiAJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylwdGUpOwotCX0KIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHB0ZV9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ3RhYmxlX3QgcHRlKQpAQCAtMTA2LDggKzEwMiwxMCBAQAogCV9fZnJlZV9wYWdlKHB0ZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3BtZF9wb3B1bGF0ZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBwbWR2YWwpCitzdGF0aWMgaW5saW5lIHZvaWQgX19wbWRfcG9wdWxhdGUocG1kX3QgKnBtZHAsIHBoeXNfYWRkcl90IHB0ZSwKKwl1bnNpZ25lZCBsb25nIHByb3QpCiB7CisJdW5zaWduZWQgbG9uZyBwbWR2YWwgPSAocHRlICsgUFRFX0hXVEFCTEVfT0ZGKSB8IHByb3Q7CiAJcG1kcFswXSA9IF9fcG1kKHBtZHZhbCk7CiAJcG1kcFsxXSA9IF9fcG1kKHBtZHZhbCArIDI1NiAqIHNpemVvZihwdGVfdCkpOwogCWZsdXNoX3BtZF9lbnRyeShwbWRwKTsKQEAgLTEyMiwyMCArMTIwLDE2IEBACiBzdGF0aWMgaW5saW5lIHZvaWQKIHBtZF9wb3B1bGF0ZV9rZXJuZWwoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWRwLCBwdGVfdCAqcHRlcCkKIHsKLQl1bnNpZ25lZCBsb25nIHB0ZV9wdHIgPSAodW5zaWduZWQgbG9uZylwdGVwOwotCiAJLyoKLQkgKiBUaGUgcG1kIG11c3QgYmUgbG9hZGVkIHdpdGggdGhlIHBoeXNpY2FsCi0JICogYWRkcmVzcyBvZiB0aGUgUFRFIHRhYmxlCisJICogVGhlIHBtZCBtdXN0IGJlIGxvYWRlZCB3aXRoIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBQVEUgdGFibGUKIAkgKi8KLQlwdGVfcHRyIC09IFBUUlNfUEVSX1BURSAqIHNpemVvZih2b2lkICopOwotCV9fcG1kX3BvcHVsYXRlKHBtZHAsIF9fcGEocHRlX3B0cikgfCBfUEFHRV9LRVJORUxfVEFCTEUpOworCV9fcG1kX3BvcHVsYXRlKHBtZHAsIF9fcGEocHRlcCksIF9QQUdFX0tFUk5FTF9UQUJMRSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAogcG1kX3BvcHVsYXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kcCwgcGd0YWJsZV90IHB0ZXApCiB7Ci0JX19wbWRfcG9wdWxhdGUocG1kcCwgcGFnZV90b19wZm4ocHRlcCkgPDwgUEFHRV9TSElGVCB8IF9QQUdFX1VTRVJfVEFCTEUpOworCV9fcG1kX3BvcHVsYXRlKHBtZHAsIHBhZ2VfdG9fcGh5cyhwdGVwKSwgX1BBR0VfVVNFUl9UQUJMRSk7CiB9CiAjZGVmaW5lIHBtZF9wZ3RhYmxlKHBtZCkgcG1kX3BhZ2UocG1kKQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggNTNkMWQ1ZC4uZWJjYjY0MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGd0YWJsZS5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtMTAsNiArMTAsNyBAQAogI2lmbmRlZiBfQVNNQVJNX1BHVEFCTEVfSAogI2RlZmluZSBfQVNNQVJNX1BHVEFCTEVfSAogCisjaW5jbHVkZSA8bGludXgvY29uc3QuaD4KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy80bGV2ZWwtZml4dXAuaD4KICNpbmNsdWRlIDxhc20vcHJvYy1mbnMuaD4KIApAQCAtNTQsNyArNTUsNyBAQAogICogVGhlcmVmb3JlLCB3ZSB0d2VhayB0aGUgaW1wbGVtZW50YXRpb24gc2xpZ2h0bHkgLSB3ZSB0ZWxsIExpbnV4IHRoYXQgd2UKICAqIGhhdmUgMjA0OCBlbnRyaWVzIGluIHRoZSBmaXJzdCBsZXZlbCwgZWFjaCBvZiB3aGljaCBpcyA4IGJ5dGVzIChpb3csIHR3bwogICogaGFyZHdhcmUgcG9pbnRlcnMgdG8gdGhlIHNlY29uZCBsZXZlbC4pICBUaGUgc2Vjb25kIGxldmVsIGNvbnRhaW5zIHR3bwotICogaGFyZHdhcmUgUFRFIHRhYmxlcyBhcnJhbmdlZCBjb250aWd1b3VzbHksIGZvbGxvd2VkIGJ5IExpbnV4IHZlcnNpb25zCisgKiBoYXJkd2FyZSBQVEUgdGFibGVzIGFycmFuZ2VkIGNvbnRpZ3VvdXNseSwgcHJlY2VkZWQgYnkgTGludXggdmVyc2lvbnMKICAqIHdoaWNoIGNvbnRhaW4gdGhlIHN0YXRlIGluZm9ybWF0aW9uIExpbnV4IG5lZWRzLiAgV2UsIHRoZXJlZm9yZSwgZW5kIHVwCiAgKiB3aXRoIDUxMiBlbnRyaWVzIGluIHRoZSAiUFRFIiBsZXZlbC4KICAqCkBAIC02MiwxNSArNjMsMTUgQEAKICAqCiAgKiAgICBwZ2QgICAgICAgICAgICAgcHRlCiAgKiB8ICAgICAgICB8Ci0gKiArLS0tLS0tLS0rICswCi0gKiB8ICAgICAgICB8LS0tLS0+ICstLS0tLS0tLS0tLS0rICswCi0gKiArLSAtIC0gLSArICs0ICAgIHwgIGgvdyBwdCAwICB8Ci0gKiB8ICAgICAgICB8LS0tLS0+ICstLS0tLS0tLS0tLS0rICsxMDI0Ci0gKiArLS0tLS0tLS0rICs4ICAgIHwgIGgvdyBwdCAxICB8Ci0gKiB8ICAgICAgICB8ICAgICAgICstLS0tLS0tLS0tLS0rICsyMDQ4CisgKiArLS0tLS0tLS0rCisgKiB8ICAgICAgICB8ICAgICAgICstLS0tLS0tLS0tLS0rICswCiAgKiArLSAtIC0gLSArICAgICAgIHwgTGludXggcHQgMCB8Ci0gKiB8ICAgICAgICB8ICAgICAgICstLS0tLS0tLS0tLS0rICszMDcyCi0gKiArLS0tLS0tLS0rICAgICAgIHwgTGludXggcHQgMSB8CisgKiB8ICAgICAgICB8ICAgICAgICstLS0tLS0tLS0tLS0rICsxMDI0CisgKiArLS0tLS0tLS0rICswICAgIHwgTGludXggcHQgMSB8CisgKiB8ICAgICAgICB8LS0tLS0+ICstLS0tLS0tLS0tLS0rICsyMDQ4CisgKiArLSAtIC0gLSArICs0ICAgIHwgIGgvdyBwdCAwICB8CisgKiB8ICAgICAgICB8LS0tLS0+ICstLS0tLS0tLS0tLS0rICszMDcyCisgKiArLS0tLS0tLS0rICs4ICAgIHwgIGgvdyBwdCAxICB8CiAgKiB8ICAgICAgICB8ICAgICAgICstLS0tLS0tLS0tLS0rICs0MDk2CiAgKgogICogU2VlIExfUFRFX3h4eCBiZWxvdyBmb3IgZGVmaW5pdGlvbnMgb2YgYml0cyBpbiB0aGUgIkxpbnV4IHB0IiwgYW5kCkBAIC0xMDIsNiArMTAzLDEwIEBACiAjZGVmaW5lIFBUUlNfUEVSX1BNRAkJMQogI2RlZmluZSBQVFJTX1BFUl9QR0QJCTIwNDgKIAorI2RlZmluZSBQVEVfSFdUQUJMRV9QVFJTCShQVFJTX1BFUl9QVEUpCisjZGVmaW5lIFBURV9IV1RBQkxFX09GRgkJKFBURV9IV1RBQkxFX1BUUlMgKiBzaXplb2YocHRlX3QpKQorI2RlZmluZSBQVEVfSFdUQUJMRV9TSVpFCShQVFJTX1BFUl9QVEUgKiBzaXplb2YodTMyKSkKKwogLyoKICAqIFBNRF9TSElGVCBkZXRlcm1pbmVzIHRoZSBzaXplIG9mIHRoZSBhcmVhIGEgc2Vjb25kLWxldmVsIHBhZ2UgdGFibGUgY2FuIG1hcAogICogUEdESVJfU0hJRlQgZGV0ZXJtaW5lcyB3aGF0IGEgdGhpcmQtbGV2ZWwgcGFnZSB0YWJsZSBlbnRyeSBjYW4gbWFwCkBAIC0xMTIsMTMgKzExNywxMyBAQAogI2RlZmluZSBMSUJSQVJZX1RFWFRfU1RBUlQJMHgwYzAwMDAwMAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwotZXh0ZXJuIHZvaWQgX19wdGVfZXJyb3IoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIHVuc2lnbmVkIGxvbmcgdmFsKTsKLWV4dGVybiB2b2lkIF9fcG1kX2Vycm9yKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCB1bnNpZ25lZCBsb25nIHZhbCk7Ci1leHRlcm4gdm9pZCBfX3BnZF9lcnJvcihjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgdW5zaWduZWQgbG9uZyB2YWwpOworZXh0ZXJuIHZvaWQgX19wdGVfZXJyb3IoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIHB0ZV90KTsKK2V4dGVybiB2b2lkIF9fcG1kX2Vycm9yKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBwbWRfdCk7CitleHRlcm4gdm9pZCBfX3BnZF9lcnJvcihjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgcGdkX3QpOwogCi0jZGVmaW5lIHB0ZV9FUlJPUihwdGUpCQlfX3B0ZV9lcnJvcihfX0ZJTEVfXywgX19MSU5FX18sIHB0ZV92YWwocHRlKSkKLSNkZWZpbmUgcG1kX0VSUk9SKHBtZCkJCV9fcG1kX2Vycm9yKF9fRklMRV9fLCBfX0xJTkVfXywgcG1kX3ZhbChwbWQpKQotI2RlZmluZSBwZ2RfRVJST1IocGdkKQkJX19wZ2RfZXJyb3IoX19GSUxFX18sIF9fTElORV9fLCBwZ2RfdmFsKHBnZCkpCisjZGVmaW5lIHB0ZV9FUlJPUihwdGUpCQlfX3B0ZV9lcnJvcihfX0ZJTEVfXywgX19MSU5FX18sIHB0ZSkKKyNkZWZpbmUgcG1kX0VSUk9SKHBtZCkJCV9fcG1kX2Vycm9yKF9fRklMRV9fLCBfX0xJTkVfXywgcG1kKQorI2RlZmluZSBwZ2RfRVJST1IocGdkKQkJX19wZ2RfZXJyb3IoX19GSUxFX18sIF9fTElORV9fLCBwZ2QpCiAjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLwogCiAjZGVmaW5lIFBNRF9TSVpFCQkoMVVMIDw8IFBNRF9TSElGVCkKQEAgLTEzMyw4ICsxMzgsNyBAQAogICovCiAjZGVmaW5lIEZJUlNUX1VTRVJfQUREUkVTUwlQQUdFX1NJWkUKIAotI2RlZmluZSBGSVJTVF9VU0VSX1BHRF9OUgkxCi0jZGVmaW5lIFVTRVJfUFRSU19QRVJfUEdECSgoVEFTS19TSVpFL1BHRElSX1NJWkUpIC0gRklSU1RfVVNFUl9QR0RfTlIpCisjZGVmaW5lIFVTRVJfUFRSU19QRVJfUEdECShUQVNLX1NJWkUgLyBQR0RJUl9TSVpFKQogCiAvKgogICogc2VjdGlvbiBhZGRyZXNzIG1hc2sgYW5kIHNpemUgZGVmaW5pdGlvbnMuCkBAIC0xNjEsMzAgKzE2NSwzMCBAQAogICogVGhlIFBURSB0YWJsZSBwb2ludGVyIHJlZmVycyB0byB0aGUgaGFyZHdhcmUgZW50cmllczsgdGhlICJMaW51eCIKICAqIGVudHJpZXMgYXJlIHN0b3JlZCAxMDI0IGJ5dGVzIGJlbG93LgogICovCi0jZGVmaW5lIExfUFRFX1BSRVNFTlQJCSgxIDw8IDApCi0jZGVmaW5lIExfUFRFX1lPVU5HCQkoMSA8PCAxKQotI2RlZmluZSBMX1BURV9GSUxFCQkoMSA8PCAyKQkvKiBvbmx5IHdoZW4gIVBSRVNFTlQgKi8KLSNkZWZpbmUgTF9QVEVfRElSVFkJCSgxIDw8IDYpCi0jZGVmaW5lIExfUFRFX1dSSVRFCQkoMSA8PCA3KQotI2RlZmluZSBMX1BURV9VU0VSCQkoMSA8PCA4KQotI2RlZmluZSBMX1BURV9FWEVDCQkoMSA8PCA5KQotI2RlZmluZSBMX1BURV9TSEFSRUQJCSgxIDw8IDEwKQkvKiBzaGFyZWQodjYpLCBjb2hlcmVudCh4c2MzKSAqLworI2RlZmluZSBMX1BURV9QUkVTRU5UCQkoX0FUKHB0ZXZhbF90LCAxKSA8PCAwKQorI2RlZmluZSBMX1BURV9ZT1VORwkJKF9BVChwdGV2YWxfdCwgMSkgPDwgMSkKKyNkZWZpbmUgTF9QVEVfRklMRQkJKF9BVChwdGV2YWxfdCwgMSkgPDwgMikJLyogb25seSB3aGVuICFQUkVTRU5UICovCisjZGVmaW5lIExfUFRFX0RJUlRZCQkoX0FUKHB0ZXZhbF90LCAxKSA8PCA2KQorI2RlZmluZSBMX1BURV9SRE9OTFkJCShfQVQocHRldmFsX3QsIDEpIDw8IDcpCisjZGVmaW5lIExfUFRFX1VTRVIJCShfQVQocHRldmFsX3QsIDEpIDw8IDgpCisjZGVmaW5lIExfUFRFX1hOCQkoX0FUKHB0ZXZhbF90LCAxKSA8PCA5KQorI2RlZmluZSBMX1BURV9TSEFSRUQJCShfQVQocHRldmFsX3QsIDEpIDw8IDEwKQkvKiBzaGFyZWQodjYpLCBjb2hlcmVudCh4c2MzKSAqLwogCiAvKgogICogVGhlc2UgYXJlIHRoZSBtZW1vcnkgdHlwZXMsIGRlZmluZWQgdG8gYmUgY29tcGF0aWJsZSB3aXRoCiAgKiBwcmUtQVJNdjYgQ1BVcyBjYWNoZWFibGUgYW5kIGJ1ZmZlcmFibGUgYml0czogICBYWENCCiAgKi8KLSNkZWZpbmUgTF9QVEVfTVRfVU5DQUNIRUQJKDB4MDAgPDwgMikJLyogMDAwMCAqLwotI2RlZmluZSBMX1BURV9NVF9CVUZGRVJBQkxFCSgweDAxIDw8IDIpCS8qIDAwMDEgKi8KLSNkZWZpbmUgTF9QVEVfTVRfV1JJVEVUSFJPVUdICSgweDAyIDw8IDIpCS8qIDAwMTAgKi8KLSNkZWZpbmUgTF9QVEVfTVRfV1JJVEVCQUNLCSgweDAzIDw8IDIpCS8qIDAwMTEgKi8KLSNkZWZpbmUgTF9QVEVfTVRfTUlOSUNBQ0hFCSgweDA2IDw8IDIpCS8qIDAxMTAgKHNhMTEwMCwgeHNjYWxlKSAqLwotI2RlZmluZSBMX1BURV9NVF9XUklURUFMTE9DCSgweDA3IDw8IDIpCS8qIDAxMTEgKi8KLSNkZWZpbmUgTF9QVEVfTVRfREVWX1NIQVJFRAkoMHgwNCA8PCAyKQkvKiAwMTAwICovCi0jZGVmaW5lIExfUFRFX01UX0RFVl9OT05TSEFSRUQJKDB4MGMgPDwgMikJLyogMTEwMCAqLwotI2RlZmluZSBMX1BURV9NVF9ERVZfV0MJCSgweDA5IDw8IDIpCS8qIDEwMDEgKi8KLSNkZWZpbmUgTF9QVEVfTVRfREVWX0NBQ0hFRAkoMHgwYiA8PCAyKQkvKiAxMDExICovCi0jZGVmaW5lIExfUFRFX01UX01BU0sJCSgweDBmIDw8IDIpCisjZGVmaW5lIExfUFRFX01UX1VOQ0FDSEVECShfQVQocHRldmFsX3QsIDB4MDApIDw8IDIpCS8qIDAwMDAgKi8KKyNkZWZpbmUgTF9QVEVfTVRfQlVGRkVSQUJMRQkoX0FUKHB0ZXZhbF90LCAweDAxKSA8PCAyKQkvKiAwMDAxICovCisjZGVmaW5lIExfUFRFX01UX1dSSVRFVEhST1VHSAkoX0FUKHB0ZXZhbF90LCAweDAyKSA8PCAyKQkvKiAwMDEwICovCisjZGVmaW5lIExfUFRFX01UX1dSSVRFQkFDSwkoX0FUKHB0ZXZhbF90LCAweDAzKSA8PCAyKQkvKiAwMDExICovCisjZGVmaW5lIExfUFRFX01UX01JTklDQUNIRQkoX0FUKHB0ZXZhbF90LCAweDA2KSA8PCAyKQkvKiAwMTEwIChzYTExMDAsIHhzY2FsZSkgKi8KKyNkZWZpbmUgTF9QVEVfTVRfV1JJVEVBTExPQwkoX0FUKHB0ZXZhbF90LCAweDA3KSA8PCAyKQkvKiAwMTExICovCisjZGVmaW5lIExfUFRFX01UX0RFVl9TSEFSRUQJKF9BVChwdGV2YWxfdCwgMHgwNCkgPDwgMikJLyogMDEwMCAqLworI2RlZmluZSBMX1BURV9NVF9ERVZfTk9OU0hBUkVECShfQVQocHRldmFsX3QsIDB4MGMpIDw8IDIpCS8qIDExMDAgKi8KKyNkZWZpbmUgTF9QVEVfTVRfREVWX1dDCQkoX0FUKHB0ZXZhbF90LCAweDA5KSA8PCAyKQkvKiAxMDAxICovCisjZGVmaW5lIExfUFRFX01UX0RFVl9DQUNIRUQJKF9BVChwdGV2YWxfdCwgMHgwYikgPDwgMikJLyogMTAxMSAqLworI2RlZmluZSBMX1BURV9NVF9NQVNLCQkoX0FUKHB0ZXZhbF90LCAweDBmKSA8PCAyKQogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCkBAIC0yMDEsMjMgKzIwNSw0NCBAQAogCiAjZGVmaW5lIF9NT0RfUFJPVChwLCBiKQlfX3BncHJvdChwZ3Byb3RfdmFsKHApIHwgKGIpKQogCi0jZGVmaW5lIFBBR0VfTk9ORQkJcGdwcm90X3VzZXIKLSNkZWZpbmUgUEFHRV9TSEFSRUQJCV9NT0RfUFJPVChwZ3Byb3RfdXNlciwgTF9QVEVfVVNFUiB8IExfUFRFX1dSSVRFKQotI2RlZmluZSBQQUdFX1NIQVJFRF9FWEVDCV9NT0RfUFJPVChwZ3Byb3RfdXNlciwgTF9QVEVfVVNFUiB8IExfUFRFX1dSSVRFIHwgTF9QVEVfRVhFQykKLSNkZWZpbmUgUEFHRV9DT1BZCQlfTU9EX1BST1QocGdwcm90X3VzZXIsIExfUFRFX1VTRVIpCi0jZGVmaW5lIFBBR0VfQ09QWV9FWEVDCQlfTU9EX1BST1QocGdwcm90X3VzZXIsIExfUFRFX1VTRVIgfCBMX1BURV9FWEVDKQotI2RlZmluZSBQQUdFX1JFQURPTkxZCQlfTU9EX1BST1QocGdwcm90X3VzZXIsIExfUFRFX1VTRVIpCi0jZGVmaW5lIFBBR0VfUkVBRE9OTFlfRVhFQwlfTU9EX1BST1QocGdwcm90X3VzZXIsIExfUFRFX1VTRVIgfCBMX1BURV9FWEVDKQotI2RlZmluZSBQQUdFX0tFUk5FTAkJcGdwcm90X2tlcm5lbAotI2RlZmluZSBQQUdFX0tFUk5FTF9FWEVDCV9NT0RfUFJPVChwZ3Byb3Rfa2VybmVsLCBMX1BURV9FWEVDKQorI2RlZmluZSBQQUdFX05PTkUJCV9NT0RfUFJPVChwZ3Byb3RfdXNlciwgTF9QVEVfWE4gfCBMX1BURV9SRE9OTFkpCisjZGVmaW5lIFBBR0VfU0hBUkVECQlfTU9EX1BST1QocGdwcm90X3VzZXIsIExfUFRFX1VTRVIgfCBMX1BURV9YTikKKyNkZWZpbmUgUEFHRV9TSEFSRURfRVhFQwlfTU9EX1BST1QocGdwcm90X3VzZXIsIExfUFRFX1VTRVIpCisjZGVmaW5lIFBBR0VfQ09QWQkJX01PRF9QUk9UKHBncHJvdF91c2VyLCBMX1BURV9VU0VSIHwgTF9QVEVfUkRPTkxZIHwgTF9QVEVfWE4pCisjZGVmaW5lIFBBR0VfQ09QWV9FWEVDCQlfTU9EX1BST1QocGdwcm90X3VzZXIsIExfUFRFX1VTRVIgfCBMX1BURV9SRE9OTFkpCisjZGVmaW5lIFBBR0VfUkVBRE9OTFkJCV9NT0RfUFJPVChwZ3Byb3RfdXNlciwgTF9QVEVfVVNFUiB8IExfUFRFX1JET05MWSB8IExfUFRFX1hOKQorI2RlZmluZSBQQUdFX1JFQURPTkxZX0VYRUMJX01PRF9QUk9UKHBncHJvdF91c2VyLCBMX1BURV9VU0VSIHwgTF9QVEVfUkRPTkxZKQorI2RlZmluZSBQQUdFX0tFUk5FTAkJX01PRF9QUk9UKHBncHJvdF9rZXJuZWwsIExfUFRFX1hOKQorI2RlZmluZSBQQUdFX0tFUk5FTF9FWEVDCXBncHJvdF9rZXJuZWwKIAotI2RlZmluZSBfX1BBR0VfTk9ORQkJX19wZ3Byb3QoX0xfUFRFX0RFRkFVTFQpCi0jZGVmaW5lIF9fUEFHRV9TSEFSRUQJCV9fcGdwcm90KF9MX1BURV9ERUZBVUxUIHwgTF9QVEVfVVNFUiB8IExfUFRFX1dSSVRFKQotI2RlZmluZSBfX1BBR0VfU0hBUkVEX0VYRUMJX19wZ3Byb3QoX0xfUFRFX0RFRkFVTFQgfCBMX1BURV9VU0VSIHwgTF9QVEVfV1JJVEUgfCBMX1BURV9FWEVDKQotI2RlZmluZSBfX1BBR0VfQ09QWQkJX19wZ3Byb3QoX0xfUFRFX0RFRkFVTFQgfCBMX1BURV9VU0VSKQotI2RlZmluZSBfX1BBR0VfQ09QWV9FWEVDCV9fcGdwcm90KF9MX1BURV9ERUZBVUxUIHwgTF9QVEVfVVNFUiB8IExfUFRFX0VYRUMpCi0jZGVmaW5lIF9fUEFHRV9SRUFET05MWQkJX19wZ3Byb3QoX0xfUFRFX0RFRkFVTFQgfCBMX1BURV9VU0VSKQotI2RlZmluZSBfX1BBR0VfUkVBRE9OTFlfRVhFQwlfX3BncHJvdChfTF9QVEVfREVGQVVMVCB8IExfUFRFX1VTRVIgfCBMX1BURV9FWEVDKQorI2RlZmluZSBfX1BBR0VfTk9ORQkJX19wZ3Byb3QoX0xfUFRFX0RFRkFVTFQgfCBMX1BURV9SRE9OTFkgfCBMX1BURV9YTikKKyNkZWZpbmUgX19QQUdFX1NIQVJFRAkJX19wZ3Byb3QoX0xfUFRFX0RFRkFVTFQgfCBMX1BURV9VU0VSIHwgTF9QVEVfWE4pCisjZGVmaW5lIF9fUEFHRV9TSEFSRURfRVhFQwlfX3BncHJvdChfTF9QVEVfREVGQVVMVCB8IExfUFRFX1VTRVIpCisjZGVmaW5lIF9fUEFHRV9DT1BZCQlfX3BncHJvdChfTF9QVEVfREVGQVVMVCB8IExfUFRFX1VTRVIgfCBMX1BURV9SRE9OTFkgfCBMX1BURV9YTikKKyNkZWZpbmUgX19QQUdFX0NPUFlfRVhFQwlfX3BncHJvdChfTF9QVEVfREVGQVVMVCB8IExfUFRFX1VTRVIgfCBMX1BURV9SRE9OTFkpCisjZGVmaW5lIF9fUEFHRV9SRUFET05MWQkJX19wZ3Byb3QoX0xfUFRFX0RFRkFVTFQgfCBMX1BURV9VU0VSIHwgTF9QVEVfUkRPTkxZIHwgTF9QVEVfWE4pCisjZGVmaW5lIF9fUEFHRV9SRUFET05MWV9FWEVDCV9fcGdwcm90KF9MX1BURV9ERUZBVUxUIHwgTF9QVEVfVVNFUiB8IExfUFRFX1JET05MWSkKKworI2RlZmluZSBfX3BncHJvdF9tb2RpZnkocHJvdCxtYXNrLGJpdHMpCQlcCisJX19wZ3Byb3QoKHBncHJvdF92YWwocHJvdCkgJiB+KG1hc2spKSB8IChiaXRzKSkKKworI2RlZmluZSBwZ3Byb3Rfbm9uY2FjaGVkKHByb3QpIFwKKwlfX3BncHJvdF9tb2RpZnkocHJvdCwgTF9QVEVfTVRfTUFTSywgTF9QVEVfTVRfVU5DQUNIRUQpCisKKyNkZWZpbmUgcGdwcm90X3dyaXRlY29tYmluZShwcm90KSBcCisJX19wZ3Byb3RfbW9kaWZ5KHByb3QsIExfUFRFX01UX01BU0ssIExfUFRFX01UX0JVRkZFUkFCTEUpCisKKyNpZmRlZiBDT05GSUdfQVJNX0RNQV9NRU1fQlVGRkVSQUJMRQorI2RlZmluZSBwZ3Byb3RfZG1hY29oZXJlbnQocHJvdCkgXAorCV9fcGdwcm90X21vZGlmeShwcm90LCBMX1BURV9NVF9NQVNLLCBMX1BURV9NVF9CVUZGRVJBQkxFIHwgTF9QVEVfWE4pCisjZGVmaW5lIF9fSEFWRV9QSFlTX01FTV9BQ0NFU1NfUFJPVAorc3RydWN0IGZpbGU7CitleHRlcm4gcGdwcm90X3QgcGh5c19tZW1fYWNjZXNzX3Byb3Qoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgcGZuLAorCQkJCSAgICAgdW5zaWduZWQgbG9uZyBzaXplLCBwZ3Byb3RfdCB2bWFfcHJvdCk7CisjZWxzZQorI2RlZmluZSBwZ3Byb3RfZG1hY29oZXJlbnQocHJvdCkgXAorCV9fcGdwcm90X21vZGlmeShwcm90LCBMX1BURV9NVF9NQVNLLCBMX1BURV9NVF9VTkNBQ0hFRCB8IExfUFRFX1hOKQorI2VuZGlmCiAKICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KIApAQCAtMjU1LDk0ICsyODAsMzEgQEAKIGV4dGVybiBzdHJ1Y3QgcGFnZSAqZW1wdHlfemVyb19wYWdlOwogI2RlZmluZSBaRVJPX1BBR0UodmFkZHIpCShlbXB0eV96ZXJvX3BhZ2UpCiAKLSNkZWZpbmUgcHRlX3BmbihwdGUpCQkocHRlX3ZhbChwdGUpID4+IFBBR0VfU0hJRlQpCi0jZGVmaW5lIHBmbl9wdGUocGZuLHByb3QpCShfX3B0ZSgoKHBmbikgPDwgUEFHRV9TSElGVCkgfCBwZ3Byb3RfdmFsKHByb3QpKSkKIAotI2RlZmluZSBwdGVfbm9uZShwdGUpCQkoIXB0ZV92YWwocHRlKSkKLSNkZWZpbmUgcHRlX2NsZWFyKG1tLGFkZHIscHRlcCkJc2V0X3B0ZV9leHQocHRlcCwgX19wdGUoMCksIDApCi0jZGVmaW5lIHB0ZV9wYWdlKHB0ZSkJCShwZm5fdG9fcGFnZShwdGVfcGZuKHB0ZSkpKQotI2RlZmluZSBwdGVfb2Zmc2V0X2tlcm5lbChkaXIsYWRkcikJKHBtZF9wYWdlX3ZhZGRyKCooZGlyKSkgKyBfX3B0ZV9pbmRleChhZGRyKSkKK2V4dGVybiBwZ2RfdCBzd2FwcGVyX3BnX2RpcltQVFJTX1BFUl9QR0RdOwogCi0jZGVmaW5lIHB0ZV9vZmZzZXRfbWFwKGRpcixhZGRyKQkoX19wdGVfbWFwKGRpcikgKyBfX3B0ZV9pbmRleChhZGRyKSkKLSNkZWZpbmUgcHRlX3VubWFwKHB0ZSkJCQlfX3B0ZV91bm1hcChwdGUpCisvKiB0byBmaW5kIGFuIGVudHJ5IGluIGEgcGFnZS10YWJsZS1kaXJlY3RvcnkgKi8KKyNkZWZpbmUgcGdkX2luZGV4KGFkZHIpCQkoKGFkZHIpID4+IFBHRElSX1NISUZUKQogCi0jaWZuZGVmIENPTkZJR19ISUdIUFRFCi0jZGVmaW5lIF9fcHRlX21hcChkaXIpCQlwbWRfcGFnZV92YWRkcigqKGRpcikpCi0jZGVmaW5lIF9fcHRlX3VubWFwKHB0ZSkJZG8geyB9IHdoaWxlICgwKQotI2Vsc2UKLSNkZWZpbmUgX19wdGVfbWFwKGRpcikJCSgocHRlX3QgKilrbWFwX2F0b21pYyhwbWRfcGFnZSgqKGRpcikpKSArIFBUUlNfUEVSX1BURSkKLSNkZWZpbmUgX19wdGVfdW5tYXAocHRlKQlrdW5tYXBfYXRvbWljKChwdGUgLSBQVFJTX1BFUl9QVEUpKQotI2VuZGlmCisjZGVmaW5lIHBnZF9vZmZzZXQobW0sIGFkZHIpCSgobW0pLT5wZ2QgKyBwZ2RfaW5kZXgoYWRkcikpCiAKLSNkZWZpbmUgc2V0X3B0ZV9leHQocHRlcCxwdGUsZXh0KSBjcHVfc2V0X3B0ZV9leHQocHRlcCxwdGUsZXh0KQotCi0jaWYgX19MSU5VWF9BUk1fQVJDSF9fIDwgNgotc3RhdGljIGlubGluZSB2b2lkIF9fc3luY19pY2FjaGVfZGNhY2hlKHB0ZV90IHB0ZXZhbCkKLXsKLX0KLSNlbHNlCi1leHRlcm4gdm9pZCBfX3N5bmNfaWNhY2hlX2RjYWNoZShwdGVfdCBwdGV2YWwpOwotI2VuZGlmCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcHRlX2F0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkgICAgICBwdGVfdCAqcHRlcCwgcHRlX3QgcHRldmFsKQotewotCWlmIChhZGRyID49IFRBU0tfU0laRSkKLQkJc2V0X3B0ZV9leHQocHRlcCwgcHRldmFsLCAwKTsKLQllbHNlIHsKLQkJX19zeW5jX2ljYWNoZV9kY2FjaGUocHRldmFsKTsKLQkJc2V0X3B0ZV9leHQocHRlcCwgcHRldmFsLCBQVEVfRVhUX05HKTsKLQl9Ci19CisvKiB0byBmaW5kIGFuIGVudHJ5IGluIGEga2VybmVsIHBhZ2UtdGFibGUtZGlyZWN0b3J5ICovCisjZGVmaW5lIHBnZF9vZmZzZXRfayhhZGRyKQlwZ2Rfb2Zmc2V0KCZpbml0X21tLCBhZGRyKQogCiAvKgotICogVGhlIGZvbGxvd2luZyBvbmx5IHdvcmsgaWYgcHRlX3ByZXNlbnQoKSBpcyB0cnVlLgotICogVW5kZWZpbmVkIGJlaGF2aW91ciBpZiBub3QuLgorICogVGhlICJwZ2RfeHh4KCkiIGZ1bmN0aW9ucyBoZXJlIGFyZSB0cml2aWFsIGZvciBhIGZvbGRlZCB0d28tbGV2ZWwKKyAqIHNldHVwOiB0aGUgcGdkIGlzIG5ldmVyIGJhZCwgYW5kIGEgcG1kIGFsd2F5cyBleGlzdHMgKGFzIGl0J3MgZm9sZGVkCisgKiBpbnRvIHRoZSBwZ2QgZW50cnkpCiAgKi8KLSNkZWZpbmUgcHRlX3ByZXNlbnQocHRlKQkocHRlX3ZhbChwdGUpICYgTF9QVEVfUFJFU0VOVCkKLSNkZWZpbmUgcHRlX3dyaXRlKHB0ZSkJCShwdGVfdmFsKHB0ZSkgJiBMX1BURV9XUklURSkKLSNkZWZpbmUgcHRlX2RpcnR5KHB0ZSkJCShwdGVfdmFsKHB0ZSkgJiBMX1BURV9ESVJUWSkKLSNkZWZpbmUgcHRlX3lvdW5nKHB0ZSkJCShwdGVfdmFsKHB0ZSkgJiBMX1BURV9ZT1VORykKLSNkZWZpbmUgcHRlX2V4ZWMocHRlKQkJKHB0ZV92YWwocHRlKSAmIExfUFRFX0VYRUMpCi0jZGVmaW5lIHB0ZV9zcGVjaWFsKHB0ZSkJKDApCisjZGVmaW5lIHBnZF9ub25lKHBnZCkJCSgwKQorI2RlZmluZSBwZ2RfYmFkKHBnZCkJCSgwKQorI2RlZmluZSBwZ2RfcHJlc2VudChwZ2QpCSgxKQorI2RlZmluZSBwZ2RfY2xlYXIocGdkcCkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgc2V0X3BnZChwZ2QscGdkcCkJZG8geyB9IHdoaWxlICgwKQogCi0jZGVmaW5lIHB0ZV9wcmVzZW50X3VzZXIocHRlKSBcCi0JKChwdGVfdmFsKHB0ZSkgJiAoTF9QVEVfUFJFU0VOVCB8IExfUFRFX1VTRVIpKSA9PSBcCi0JIChMX1BURV9QUkVTRU5UIHwgTF9QVEVfVVNFUikpCiAKLSNkZWZpbmUgUFRFX0JJVF9GVU5DKGZuLG9wKSBcCi1zdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV8jI2ZuKHB0ZV90IHB0ZSkgeyBwdGVfdmFsKHB0ZSkgb3A7IHJldHVybiBwdGU7IH0KLQotUFRFX0JJVF9GVU5DKHdycHJvdGVjdCwgJj0gfkxfUFRFX1dSSVRFKTsKLVBURV9CSVRfRlVOQyhta3dyaXRlLCAgIHw9IExfUFRFX1dSSVRFKTsKLVBURV9CSVRfRlVOQyhta2NsZWFuLCAgICY9IH5MX1BURV9ESVJUWSk7Ci1QVEVfQklUX0ZVTkMobWtkaXJ0eSwgICB8PSBMX1BURV9ESVJUWSk7Ci1QVEVfQklUX0ZVTkMobWtvbGQsICAgICAmPSB+TF9QVEVfWU9VTkcpOwotUFRFX0JJVF9GVU5DKG1reW91bmcsICAgfD0gTF9QVEVfWU9VTkcpOwotCi1zdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3NwZWNpYWwocHRlX3QgcHRlKSB7IHJldHVybiBwdGU7IH0KLQotI2RlZmluZSBfX3BncHJvdF9tb2RpZnkocHJvdCxtYXNrLGJpdHMpCQlcCi0JX19wZ3Byb3QoKHBncHJvdF92YWwocHJvdCkgJiB+KG1hc2spKSB8IChiaXRzKSkKLQotLyoKLSAqIE1hcmsgdGhlIHByb3QgdmFsdWUgYXMgdW5jYWNoZWFibGUgYW5kIHVuYnVmZmVyYWJsZS4KLSAqLwotI2RlZmluZSBwZ3Byb3Rfbm9uY2FjaGVkKHByb3QpIFwKLQlfX3BncHJvdF9tb2RpZnkocHJvdCwgTF9QVEVfTVRfTUFTSywgTF9QVEVfTVRfVU5DQUNIRUQpCi0jZGVmaW5lIHBncHJvdF93cml0ZWNvbWJpbmUocHJvdCkgXAotCV9fcGdwcm90X21vZGlmeShwcm90LCBMX1BURV9NVF9NQVNLLCBMX1BURV9NVF9CVUZGRVJBQkxFKQotI2lmZGVmIENPTkZJR19BUk1fRE1BX01FTV9CVUZGRVJBQkxFCi0jZGVmaW5lIHBncHJvdF9kbWFjb2hlcmVudChwcm90KSBcCi0JX19wZ3Byb3RfbW9kaWZ5KHByb3QsIExfUFRFX01UX01BU0t8TF9QVEVfRVhFQywgTF9QVEVfTVRfQlVGRkVSQUJMRSkKLSNkZWZpbmUgX19IQVZFX1BIWVNfTUVNX0FDQ0VTU19QUk9UCi1zdHJ1Y3QgZmlsZTsKLWV4dGVybiBwZ3Byb3RfdCBwaHlzX21lbV9hY2Nlc3NfcHJvdChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBwZm4sCi0JCQkJICAgICB1bnNpZ25lZCBsb25nIHNpemUsIHBncHJvdF90IHZtYV9wcm90KTsKLSNlbHNlCi0jZGVmaW5lIHBncHJvdF9kbWFjb2hlcmVudChwcm90KSBcCi0JX19wZ3Byb3RfbW9kaWZ5KHByb3QsIExfUFRFX01UX01BU0t8TF9QVEVfRVhFQywgTF9QVEVfTVRfVU5DQUNIRUQpCi0jZW5kaWYKKy8qIEZpbmQgYW4gZW50cnkgaW4gdGhlIHNlY29uZC1sZXZlbCBwYWdlIHRhYmxlLi4gKi8KKyNkZWZpbmUgcG1kX29mZnNldChkaXIsIGFkZHIpCSgocG1kX3QgKikoZGlyKSkKIAogI2RlZmluZSBwbWRfbm9uZShwbWQpCQkoIXBtZF92YWwocG1kKSkKICNkZWZpbmUgcG1kX3ByZXNlbnQocG1kKQkocG1kX3ZhbChwbWQpKQpAQCAtMzY0LDEyICszMjYsNyBAQAogCiBzdGF0aWMgaW5saW5lIHB0ZV90ICpwbWRfcGFnZV92YWRkcihwbWRfdCBwbWQpCiB7Ci0JdW5zaWduZWQgbG9uZyBwdHI7Ci0KLQlwdHIgPSBwbWRfdmFsKHBtZCkgJiB+KFBUUlNfUEVSX1BURSAqIHNpemVvZih2b2lkICopIC0gMSk7Ci0JcHRyICs9IFBUUlNfUEVSX1BURSAqIHNpemVvZih2b2lkICopOwotCi0JcmV0dXJuIF9fdmEocHRyKTsKKwlyZXR1cm4gX192YShwbWRfdmFsKHBtZCkgJiBQQUdFX01BU0spOwogfQogCiAjZGVmaW5lIHBtZF9wYWdlKHBtZCkJCXBmbl90b19wYWdlKF9fcGh5c190b19wZm4ocG1kX3ZhbChwbWQpKSkKQEAgLTM3Nyw0NiArMzM0LDgxIEBACiAvKiB3ZSBkb24ndCBuZWVkIGNvbXBsZXggY2FsY3VsYXRpb25zIGhlcmUgYXMgdGhlIHBtZCBpcyBmb2xkZWQgaW50byB0aGUgcGdkICovCiAjZGVmaW5lIHBtZF9hZGRyX2VuZChhZGRyLGVuZCkJKGVuZCkKIAotLyoKLSAqIENvbnZlcnNpb24gZnVuY3Rpb25zOiBjb252ZXJ0IGEgcGFnZSBhbmQgcHJvdGVjdGlvbiB0byBhIHBhZ2UgZW50cnksCi0gKiBhbmQgYSBwYWdlIGVudHJ5IGFuZCBwYWdlIGRpcmVjdG9yeSB0byB0aGUgcGFnZSB0aGV5IHJlZmVyIHRvLgotICovCi0jZGVmaW5lIG1rX3B0ZShwYWdlLHByb3QpCXBmbl9wdGUocGFnZV90b19wZm4ocGFnZSkscHJvdCkKIAotLyoKLSAqIFRoZSAicGdkX3h4eCgpIiBmdW5jdGlvbnMgaGVyZSBhcmUgdHJpdmlhbCBmb3IgYSBmb2xkZWQgdHdvLWxldmVsCi0gKiBzZXR1cDogdGhlIHBnZCBpcyBuZXZlciBiYWQsIGFuZCBhIHBtZCBhbHdheXMgZXhpc3RzIChhcyBpdCdzIGZvbGRlZAotICogaW50byB0aGUgcGdkIGVudHJ5KQotICovCi0jZGVmaW5lIHBnZF9ub25lKHBnZCkJCSgwKQotI2RlZmluZSBwZ2RfYmFkKHBnZCkJCSgwKQotI2RlZmluZSBwZ2RfcHJlc2VudChwZ2QpCSgxKQotI2RlZmluZSBwZ2RfY2xlYXIocGdkcCkJCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgc2V0X3BnZChwZ2QscGdkcCkJZG8geyB9IHdoaWxlICgwKQorI2lmbmRlZiBDT05GSUdfSElHSFBURQorI2RlZmluZSBfX3B0ZV9tYXAocG1kKQkJcG1kX3BhZ2VfdmFkZHIoKihwbWQpKQorI2RlZmluZSBfX3B0ZV91bm1hcChwdGUpCWRvIHsgfSB3aGlsZSAoMCkKKyNlbHNlCisjZGVmaW5lIF9fcHRlX21hcChwbWQpCQkocHRlX3QgKilrbWFwX2F0b21pYyhwbWRfcGFnZSgqKHBtZCkpKQorI2RlZmluZSBfX3B0ZV91bm1hcChwdGUpCWt1bm1hcF9hdG9taWMocHRlKQorI2VuZGlmCiAKLS8qIHRvIGZpbmQgYW4gZW50cnkgaW4gYSBwYWdlLXRhYmxlLWRpcmVjdG9yeSAqLwotI2RlZmluZSBwZ2RfaW5kZXgoYWRkcikJCSgoYWRkcikgPj4gUEdESVJfU0hJRlQpCisjZGVmaW5lIHB0ZV9pbmRleChhZGRyKQkJKCgoYWRkcikgPj4gUEFHRV9TSElGVCkgJiAoUFRSU19QRVJfUFRFIC0gMSkpCiAKLSNkZWZpbmUgcGdkX29mZnNldChtbSwgYWRkcikJKChtbSktPnBnZCtwZ2RfaW5kZXgoYWRkcikpCisjZGVmaW5lIHB0ZV9vZmZzZXRfa2VybmVsKHBtZCxhZGRyKQkocG1kX3BhZ2VfdmFkZHIoKihwbWQpKSArIHB0ZV9pbmRleChhZGRyKSkKIAotLyogdG8gZmluZCBhbiBlbnRyeSBpbiBhIGtlcm5lbCBwYWdlLXRhYmxlLWRpcmVjdG9yeSAqLwotI2RlZmluZSBwZ2Rfb2Zmc2V0X2soYWRkcikJcGdkX29mZnNldCgmaW5pdF9tbSwgYWRkcikKKyNkZWZpbmUgcHRlX29mZnNldF9tYXAocG1kLGFkZHIpCShfX3B0ZV9tYXAocG1kKSArIHB0ZV9pbmRleChhZGRyKSkKKyNkZWZpbmUgcHRlX3VubWFwKHB0ZSkJCQlfX3B0ZV91bm1hcChwdGUpCiAKLS8qIEZpbmQgYW4gZW50cnkgaW4gdGhlIHNlY29uZC1sZXZlbCBwYWdlIHRhYmxlLi4gKi8KLSNkZWZpbmUgcG1kX29mZnNldChkaXIsIGFkZHIpCSgocG1kX3QgKikoZGlyKSkKKyNkZWZpbmUgcHRlX3BmbihwdGUpCQkocHRlX3ZhbChwdGUpID4+IFBBR0VfU0hJRlQpCisjZGVmaW5lIHBmbl9wdGUocGZuLHByb3QpCV9fcHRlKCgocGZuKSA8PCBQQUdFX1NISUZUKSB8IHBncHJvdF92YWwocHJvdCkpCiAKLS8qIEZpbmQgYW4gZW50cnkgaW4gdGhlIHRoaXJkLWxldmVsIHBhZ2UgdGFibGUuLiAqLwotI2RlZmluZSBfX3B0ZV9pbmRleChhZGRyKQkoKChhZGRyKSA+PiBQQUdFX1NISUZUKSAmIChQVFJTX1BFUl9QVEUgLSAxKSkKKyNkZWZpbmUgcHRlX3BhZ2UocHRlKQkJcGZuX3RvX3BhZ2UocHRlX3BmbihwdGUpKQorI2RlZmluZSBta19wdGUocGFnZSxwcm90KQlwZm5fcHRlKHBhZ2VfdG9fcGZuKHBhZ2UpLCBwcm90KQorCisjZGVmaW5lIHNldF9wdGVfZXh0KHB0ZXAscHRlLGV4dCkgY3B1X3NldF9wdGVfZXh0KHB0ZXAscHRlLGV4dCkKKyNkZWZpbmUgcHRlX2NsZWFyKG1tLGFkZHIscHRlcCkJc2V0X3B0ZV9leHQocHRlcCwgX19wdGUoMCksIDApCisKKyNpZiBfX0xJTlVYX0FSTV9BUkNIX18gPCA2CitzdGF0aWMgaW5saW5lIHZvaWQgX19zeW5jX2ljYWNoZV9kY2FjaGUocHRlX3QgcHRldmFsKQoreworfQorI2Vsc2UKK2V4dGVybiB2b2lkIF9fc3luY19pY2FjaGVfZGNhY2hlKHB0ZV90IHB0ZXZhbCk7CisjZW5kaWYKKworc3RhdGljIGlubGluZSB2b2lkIHNldF9wdGVfYXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCSAgICAgIHB0ZV90ICpwdGVwLCBwdGVfdCBwdGV2YWwpCit7CisJaWYgKGFkZHIgPj0gVEFTS19TSVpFKQorCQlzZXRfcHRlX2V4dChwdGVwLCBwdGV2YWwsIDApOworCWVsc2UgeworCQlfX3N5bmNfaWNhY2hlX2RjYWNoZShwdGV2YWwpOworCQlzZXRfcHRlX2V4dChwdGVwLCBwdGV2YWwsIFBURV9FWFRfTkcpOworCX0KK30KKworI2RlZmluZSBwdGVfbm9uZShwdGUpCQkoIXB0ZV92YWwocHRlKSkKKyNkZWZpbmUgcHRlX3ByZXNlbnQocHRlKQkocHRlX3ZhbChwdGUpICYgTF9QVEVfUFJFU0VOVCkKKyNkZWZpbmUgcHRlX3dyaXRlKHB0ZSkJCSghKHB0ZV92YWwocHRlKSAmIExfUFRFX1JET05MWSkpCisjZGVmaW5lIHB0ZV9kaXJ0eShwdGUpCQkocHRlX3ZhbChwdGUpICYgTF9QVEVfRElSVFkpCisjZGVmaW5lIHB0ZV95b3VuZyhwdGUpCQkocHRlX3ZhbChwdGUpICYgTF9QVEVfWU9VTkcpCisjZGVmaW5lIHB0ZV9leGVjKHB0ZSkJCSghKHB0ZV92YWwocHRlKSAmIExfUFRFX1hOKSkKKyNkZWZpbmUgcHRlX3NwZWNpYWwocHRlKQkoMCkKKworI2RlZmluZSBwdGVfcHJlc2VudF91c2VyKHB0ZSkgXAorCSgocHRlX3ZhbChwdGUpICYgKExfUFRFX1BSRVNFTlQgfCBMX1BURV9VU0VSKSkgPT0gXAorCSAoTF9QVEVfUFJFU0VOVCB8IExfUFRFX1VTRVIpKQorCisjZGVmaW5lIFBURV9CSVRfRlVOQyhmbixvcCkgXAorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfIyNmbihwdGVfdCBwdGUpIHsgcHRlX3ZhbChwdGUpIG9wOyByZXR1cm4gcHRlOyB9CisKK1BURV9CSVRfRlVOQyh3cnByb3RlY3QsIHw9IExfUFRFX1JET05MWSk7CitQVEVfQklUX0ZVTkMobWt3cml0ZSwgICAmPSB+TF9QVEVfUkRPTkxZKTsKK1BURV9CSVRfRlVOQyhta2NsZWFuLCAgICY9IH5MX1BURV9ESVJUWSk7CitQVEVfQklUX0ZVTkMobWtkaXJ0eSwgICB8PSBMX1BURV9ESVJUWSk7CitQVEVfQklUX0ZVTkMobWtvbGQsICAgICAmPSB+TF9QVEVfWU9VTkcpOworUFRFX0JJVF9GVU5DKG1reW91bmcsICAgfD0gTF9QVEVfWU9VTkcpOworCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3NwZWNpYWwocHRlX3QgcHRlKSB7IHJldHVybiBwdGU7IH0KIAogc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbW9kaWZ5KHB0ZV90IHB0ZSwgcGdwcm90X3QgbmV3cHJvdCkKIHsKLQljb25zdCB1bnNpZ25lZCBsb25nIG1hc2sgPSBMX1BURV9FWEVDIHwgTF9QVEVfV1JJVEUgfCBMX1BURV9VU0VSOworCWNvbnN0IHB0ZXZhbF90IG1hc2sgPSBMX1BURV9YTiB8IExfUFRFX1JET05MWSB8IExfUFRFX1VTRVI7CiAJcHRlX3ZhbChwdGUpID0gKHB0ZV92YWwocHRlKSAmIH5tYXNrKSB8IChwZ3Byb3RfdmFsKG5ld3Byb3QpICYgbWFzayk7CiAJcmV0dXJuIHB0ZTsKIH0KIAotZXh0ZXJuIHBnZF90IHN3YXBwZXJfcGdfZGlyW1BUUlNfUEVSX1BHRF07Ci0KIC8qCiAgKiBFbmNvZGUgYW5kIGRlY29kZSBhIHN3YXAgZW50cnkuICBTd2FwIGVudHJpZXMgYXJlIHN0b3JlZCBpbiB0aGUgTGludXgKICAqIHBhZ2UgdGFibGVzIGFzIGZvbGxvd3M6CkBAIC00ODEsNiArNDczLDkgQEAKIAogI2RlZmluZSBwZ3RhYmxlX2NhY2hlX2luaXQoKSBkbyB7IH0gd2hpbGUgKDApCiAKK3ZvaWQgaWRlbnRpdHlfbWFwcGluZ19hZGQocGdkX3QgKiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7Cit2b2lkIGlkZW50aXR5X21hcHBpbmdfZGVsKHBnZF90ICosIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOworCiAjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLwogCiAjZW5kaWYgLyogQ09ORklHX01NVSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vc2NoZWRfY2xvY2suaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3NjaGVkX2Nsb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg0NjI4YgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3NjaGVkX2Nsb2NrLmgKQEAgLTAsMCArMSwxMTggQEAKKy8qCisgKiBzY2hlZF9jbG9jay5oOiBzdXBwb3J0IGZvciBleHRlbmRpbmcgY291bnRlcnMgdG8gZnVsbCA2NC1iaXQgbnMgY291bnRlcgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpZm5kZWYgQVNNX1NDSEVEX0NMT0NLCisjZGVmaW5lIEFTTV9TQ0hFRF9DTE9DSworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IGNsb2NrX2RhdGEgeworCXU2NCBlcG9jaF9uczsKKwl1MzIgZXBvY2hfY3ljOworCXUzMiBlcG9jaF9jeWNfY29weTsKKwl1MzIgbXVsdDsKKwl1MzIgc2hpZnQ7Cit9OworCisjZGVmaW5lIERFRklORV9DTE9DS19EQVRBKG5hbWUpCXN0cnVjdCBjbG9ja19kYXRhIG5hbWUKKworc3RhdGljIGlubGluZSB1NjQgY3ljX3RvX25zKHU2NCBjeWMsIHUzMiBtdWx0LCB1MzIgc2hpZnQpCit7CisJcmV0dXJuIChjeWMgKiBtdWx0KSA+PiBzaGlmdDsKK30KKworLyoKKyAqIEF0b21pY2FsbHkgdXBkYXRlIHRoZSBzY2hlZF9jbG9jayBlcG9jaC4gIFlvdXIgdXBkYXRlIGNhbGxiYWNrIHdpbGwKKyAqIGJlIGNhbGxlZCBmcm9tIGEgdGltZXIgYmVmb3JlIHRoZSBjb3VudGVyIHdyYXBzIC0gcmVhZCB0aGUgY3VycmVudAorICogY291bnRlciB2YWx1ZSwgYW5kIGNhbGwgdGhpcyBmdW5jdGlvbiB0byBzYWZlbHkgbW92ZSB0aGUgZXBvY2hzCisgKiBmb3J3YXJkLiAgT25seSB1c2UgdGhpcyBmcm9tIHRoZSB1cGRhdGUgY2FsbGJhY2suCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfc2NoZWRfY2xvY2soc3RydWN0IGNsb2NrX2RhdGEgKmNkLCB1MzIgY3ljLCB1MzIgbWFzaykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXU2NCBucyA9IGNkLT5lcG9jaF9ucyArCisJCWN5Y190b19ucygoY3ljIC0gY2QtPmVwb2NoX2N5YykgJiBtYXNrLCBjZC0+bXVsdCwgY2QtPnNoaWZ0KTsKKworCS8qCisJICogV3JpdGUgZXBvY2hfY3ljIGFuZCBlcG9jaF9ucyBpbiBhIHdheSB0aGF0IHRoZSB1cGRhdGUgaXMKKwkgKiBkZXRlY3RhYmxlIGluIGN5Y190b19maXhlZF9zY2hlZF9jbG9jaygpLgorCSAqLworCXJhd19sb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJY2QtPmVwb2NoX2N5YyA9IGN5YzsKKwlzbXBfd21iKCk7CisJY2QtPmVwb2NoX25zID0gbnM7CisJc21wX3dtYigpOworCWNkLT5lcG9jaF9jeWNfY29weSA9IGN5YzsKKwlyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCisvKgorICogSWYgeW91ciBjbG9jayByYXRlIGlzIGtub3duIGF0IGNvbXBpbGUgdGltZSwgdXNpbmcgdGhpcyB3aWxsIGFsbG93CisgKiB5b3UgdG8gb3B0aW1pemUgdGhlIG11bHQvc2hpZnQgbG9hZHMgYXdheS4gIFRoaXMgaXMgcGFpcmVkIHdpdGgKKyAqIGluaXRfZml4ZWRfc2NoZWRfY2xvY2soKSB0byBlbnN1cmUgdGhhdCB5b3VyIG11bHQvc2hpZnQgYXJlIGNvcnJlY3QuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIGN5Y190b19maXhlZF9zY2hlZF9jbG9jayhzdHJ1Y3QgY2xvY2tfZGF0YSAqY2QsCisJdTMyIGN5YywgdTMyIG1hc2ssIHUzMiBtdWx0LCB1MzIgc2hpZnQpCit7CisJdTY0IGVwb2NoX25zOworCXUzMiBlcG9jaF9jeWM7CisKKwkvKgorCSAqIExvYWQgdGhlIGVwb2NoX2N5YyBhbmQgZXBvY2hfbnMgYXRvbWljYWxseS4gIFdlIGRvIHRoaXMgYnkKKwkgKiBlbnN1cmluZyB0aGF0IHdlIGFsd2F5cyB3cml0ZSBlcG9jaF9jeWMsIGVwb2NoX25zIGFuZAorCSAqIGVwb2NoX2N5Y19jb3B5IGluIHN0cmljdCBvcmRlciwgYW5kIHJlYWQgdGhlbSBpbiBzdHJpY3Qgb3JkZXIuCisJICogSWYgZXBvY2hfY3ljIGFuZCBlcG9jaF9jeWNfY29weSBhcmUgbm90IGVxdWFsLCB0aGVuIHdlJ3JlIGluCisJICogdGhlIG1pZGRsZSBvZiBhbiB1cGRhdGUsIGFuZCB3ZSBzaG91bGQgcmVwZWF0IHRoZSBsb2FkLgorCSAqLworCWRvIHsKKwkJZXBvY2hfY3ljID0gY2QtPmVwb2NoX2N5YzsKKwkJc21wX3JtYigpOworCQllcG9jaF9ucyA9IGNkLT5lcG9jaF9uczsKKwkJc21wX3JtYigpOworCX0gd2hpbGUgKGVwb2NoX2N5YyAhPSBjZC0+ZXBvY2hfY3ljX2NvcHkpOworCisJcmV0dXJuIGVwb2NoX25zICsgY3ljX3RvX25zKChjeWMgLSBlcG9jaF9jeWMpICYgbWFzaywgbXVsdCwgc2hpZnQpOworfQorCisvKgorICogT3RoZXJ3aXNlLCB5b3UgbmVlZCB0byB1c2UgdGhpcywgd2hpY2ggd2lsbCBvYnRhaW4gdGhlIG11bHQvc2hpZnQKKyAqIGZyb20gdGhlIGNsb2NrX2RhdGEgc3RydWN0dXJlLiAgVXNlIGluaXRfc2NoZWRfY2xvY2soKSB3aXRoIHRoaXMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIGN5Y190b19zY2hlZF9jbG9jayhzdHJ1Y3QgY2xvY2tfZGF0YSAqY2QsCisJdTMyIGN5YywgdTMyIG1hc2spCit7CisJcmV0dXJuIGN5Y190b19maXhlZF9zY2hlZF9jbG9jayhjZCwgY3ljLCBtYXNrLCBjZC0+bXVsdCwgY2QtPnNoaWZ0KTsKK30KKworLyoKKyAqIEluaXRpYWxpemUgdGhlIGNsb2NrIGRhdGEgLSBjYWxjdWxhdGUgdGhlIGFwcHJvcHJpYXRlIG11bHRpcGxpZXIKKyAqIGFuZCBzaGlmdC4gIEFsc28gc2V0dXAgYSB0aW1lciB0byBlbnN1cmUgdGhhdCB0aGUgZXBvY2ggaXMgcmVmcmVzaGVkCisgKiBhdCB0aGUgYXBwcm9wcmlhdGUgdGltZSBpbnRlcnZhbCwgd2hpY2ggd2lsbCBjYWxsIHlvdXIgdXBkYXRlCisgKiBoYW5kbGVyLgorICovCit2b2lkIGluaXRfc2NoZWRfY2xvY2soc3RydWN0IGNsb2NrX2RhdGEgKiwgdm9pZCAoKikodm9pZCksCisJdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTsKKworLyoKKyAqIFVzZSB0aGlzIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIHJhdGhlciB0aGFuIGluaXRfc2NoZWRfY2xvY2soKSBpZgorICogeW91J3JlIHVzaW5nIGN5Y190b19maXhlZF9zY2hlZF9jbG9jaywgd2hpY2ggd2lsbCB3YXJuIGlmIHlvdXIKKyAqIGNvbnN0YW50cyBhcmUgaW5jb3JyZWN0LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9maXhlZF9zY2hlZF9jbG9jayhzdHJ1Y3QgY2xvY2tfZGF0YSAqY2QsCisJdm9pZCAoKnVwZGF0ZSkodm9pZCksIHVuc2lnbmVkIGludCBiaXRzLCB1bnNpZ25lZCBsb25nIHJhdGUsCisJdTMyIG11bHQsIHUzMiBzaGlmdCkKK3sKKwlpbml0X3NjaGVkX2Nsb2NrKGNkLCB1cGRhdGUsIGJpdHMsIHJhdGUpOworCWlmIChjZC0+bXVsdCAhPSBtdWx0IHx8IGNkLT5zaGlmdCAhPSBzaGlmdCkgeworCQlwcl9jcml0KCJzY2hlZF9jbG9jazogd3JvbmcgbXVsdGlwbHkvc2hpZnQ6ICV1Pj4ldSB2cyBjYWxjdWxhdGVkICV1Pj4ldVxuIgorCQkJInNjaGVkX2Nsb2NrOiBmaXggbXVsdGlwbHkvc2hpZnQgdG8gYXZvaWQgc2NoZWR1bGVyIGhpY2N1cHNcbiIsCisJCQltdWx0LCBzaGlmdCwgY2QtPm11bHQsIGNkLT5zaGlmdCk7CisJfQorfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3NtcC5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vc21wLmgKaW5kZXggM2QwNTE5MC4uOTZlZDUyMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vc21wLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vc21wLmgKQEAgLTMzLDI3ICszMywyMyBAQAogLyoKICAqIGdlbmVyYXRlIElQSSBsaXN0IHRleHQKICAqLwotZXh0ZXJuIHZvaWQgc2hvd19pcGlfbGlzdChzdHJ1Y3Qgc2VxX2ZpbGUgKnApOworZXh0ZXJuIHZvaWQgc2hvd19pcGlfbGlzdChzdHJ1Y3Qgc2VxX2ZpbGUgKiwgaW50KTsKIAogLyoKICAqIENhbGxlZCBmcm9tIGFzc2VtYmx5IGNvZGUsIHRoaXMgaGFuZGxlcyBhbiBJUEkuCiAgKi8KLWFzbWxpbmthZ2Ugdm9pZCBkb19JUEkoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworYXNtbGlua2FnZSB2b2lkIGRvX0lQSShpbnQgaXBpbnIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKIAogLyoKICAqIFNldHVwIHRoZSBzZXQgb2YgcG9zc2libGUgQ1BVcyAodmlhIHNldF9jcHVfcG9zc2libGUpCiAgKi8KIGV4dGVybiB2b2lkIHNtcF9pbml0X2NwdXModm9pZCk7CiAKLS8qCi0gKiBNb3ZlIGdsb2JhbCBkYXRhIGludG8gcGVyLXByb2Nlc3NvciBzdG9yYWdlLgotICovCi1leHRlcm4gdm9pZCBzbXBfc3RvcmVfY3B1X2luZm8odW5zaWduZWQgaW50IGNwdWlkKTsKIAogLyoKICAqIFJhaXNlIGFuIElQSSBjcm9zcyBjYWxsIG9uIENQVXMgaW4gY2FsbG1hcC4KICAqLwotZXh0ZXJuIHZvaWQgc21wX2Nyb3NzX2NhbGwoY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2spOworZXh0ZXJuIHZvaWQgc21wX2Nyb3NzX2NhbGwoY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2ssIGludCBpcGkpOwogCiAvKgogICogQm9vdCBhIHNlY29uZGFyeSBDUFUsIGFuZCBhc3NpZ24gaXQgdGhlIHNwZWNpZmllZCBpZGxlIHRhc2suCkBAIC03Myw2ICs2OSwxMSBAQAogZXh0ZXJuIHZvaWQgcGxhdGZvcm1fc2Vjb25kYXJ5X2luaXQodW5zaWduZWQgaW50IGNwdSk7CiAKIC8qCisgKiBJbml0aWFsaXplIGNwdV9wb3NzaWJsZSBtYXAsIGFuZCBlbmFibGUgY29oZXJlbmN5CisgKi8KK2V4dGVybiB2b2lkIHBsYXRmb3JtX3NtcF9wcmVwYXJlX2NwdXModW5zaWduZWQgaW50KTsKKworLyoKICAqIEluaXRpYWwgZGF0YSBmb3IgYnJpbmdpbmcgdXAgYSBzZWNvbmRhcnkgQ1BVLgogICovCiBzdHJ1Y3Qgc2Vjb25kYXJ5X2RhdGEgewpAQCAtOTcsNiArOTgsNiBAQAogLyoKICAqIHNob3cgbG9jYWwgaW50ZXJydXB0IGluZm8KICAqLwotZXh0ZXJuIHZvaWQgc2hvd19sb2NhbF9pcnFzKHN0cnVjdCBzZXFfZmlsZSAqKTsKK2V4dGVybiB2b2lkIHNob3dfbG9jYWxfaXJxcyhzdHJ1Y3Qgc2VxX2ZpbGUgKiwgaW50KTsKIAogI2VuZGlmIC8qIGlmbmRlZiBfX0FTTV9BUk1fU01QX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3NtcF9tcGlkci5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vc21wX21waWRyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhOTMwN2QuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vc21wX21waWRyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi0jaWZuZGVmIEFTTUFSTV9TTVBfTUlEUl9ICi0jZGVmaW5lIEFTTUFSTV9TTVBfTUlEUl9ICi0KLSNkZWZpbmUgaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCkJCQkJCQlcCi0JKHsJCQkJCQkJCVwKLQkJdW5zaWduZWQgaW50IGNwdW51bTsJCQkJCVwKLQkJX19hc21fXygiXG4iCQkJCQkJXAotCQkJIjE6CW1yYyBwMTUsIDAsICUwLCBjMCwgYzAsIDVcbiIJCVwKLQkJCSIJLnB1c2hzZWN0aW9uIFwiLmFsdC5zbXAuaW5pdFwiLCBcImFcIlxuIlwKLQkJCSIJLmxvbmcJMWJcbiIJCQkJXAotCQkJIgltb3YJJTAsICMwXG4iCQkJXAotCQkJIgkucG9wc2VjdGlvbiIJCQkJXAotCQkJOiAiPXIiIChjcHVudW0pKTsJCQkJXAotCQljcHVudW0gJj0gMHgwRjsJCQkJCQlcCi0JfSkKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9zbXBfdHdkLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9zbXBfdHdkLmgKaW5kZXggNjM0ZjM1Ny4uZmVkOTk4MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vc21wX3R3ZC5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3NtcF90d2QuaApAQCAtMjIsNyArMjIsNiBAQAogCiBleHRlcm4gdm9pZCBfX2lvbWVtICp0d2RfYmFzZTsKIAotdm9pZCB0d2RfdGltZXJfc3RvcCh2b2lkKTsKIGludCB0d2RfdGltZXJfYWNrKHZvaWQpOwogdm9pZCB0d2RfdGltZXJfc2V0dXAoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vc3lzdGVtLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9zeXN0ZW0uaAppbmRleCA4MDAyNTk0Li45N2Y2ZDYwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9zeXN0ZW0uaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9zeXN0ZW0uaApAQCAtNjMsNiArNjMsMTEgQEAKICNpbmNsdWRlIDxhc20vb3V0ZXJjYWNoZS5oPgogCiAjZGVmaW5lIF9fZXhjZXB0aW9uCV9fYXR0cmlidXRlX18oKHNlY3Rpb24oIi5leGNlcHRpb24udGV4dCIpKSkKKyNpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCisjZGVmaW5lIF9fZXhjZXB0aW9uX2lycV9lbnRyeQlfX2lycV9lbnRyeQorI2Vsc2UKKyNkZWZpbmUgX19leGNlcHRpb25faXJxX2VudHJ5CV9fZXhjZXB0aW9uCisjZW5kaWYKIAogc3RydWN0IHRocmVhZF9pbmZvOwogc3RydWN0IHRhc2tfc3RydWN0OwpAQCAtMTE5LDYgKzEyNCwxMyBAQAogI2RlZmluZSB2ZWN0b3JzX2hpZ2goKQkoMCkKICNlbmRpZgogCisjaWYgX19MSU5VWF9BUk1fQVJDSF9fID49IDcgfHwJCVwKKwkoX19MSU5VWF9BUk1fQVJDSF9fID09IDYgJiYgZGVmaW5lZChDT05GSUdfQ1BVXzMydjZLKSkKKyNkZWZpbmUgc2V2KCkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzZXYiIDogOiA6ICJtZW1vcnkiKQorI2RlZmluZSB3ZmUoKQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIndmZSIgOiA6IDogIm1lbW9yeSIpCisjZGVmaW5lIHdmaSgpCV9fYXNtX18gX192b2xhdGlsZV9fICgid2ZpIiA6IDogOiAibWVtb3J5IikKKyNlbmRpZgorCiAjaWYgX19MSU5VWF9BUk1fQVJDSF9fID49IDcKICNkZWZpbmUgaXNiKCkgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJpc2IiIDogOiA6ICJtZW1vcnkiKQogI2RlZmluZSBkc2IoKSBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImRzYiIgOiA6IDogIm1lbW9yeSIpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS90cmFwcy5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vdHJhcHMuaAppbmRleCA0OTE5NjBiLi4xYjk2MGQ1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS90cmFwcy5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RyYXBzLmgKQEAgLTE1LDE2ICsxNSwzNyBAQAogdm9pZCByZWdpc3Rlcl91bmRlZl9ob29rKHN0cnVjdCB1bmRlZl9ob29rICpob29rKTsKIHZvaWQgdW5yZWdpc3Rlcl91bmRlZl9ob29rKHN0cnVjdCB1bmRlZl9ob29rICpob29rKTsKIAorI2lmZGVmIENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVIKK3N0YXRpYyBpbmxpbmUgaW50IF9faW5faXJxZW50cnlfdGV4dCh1bnNpZ25lZCBsb25nIHB0cikKK3sKKwlleHRlcm4gY2hhciBfX2lycWVudHJ5X3RleHRfc3RhcnRbXTsKKwlleHRlcm4gY2hhciBfX2lycWVudHJ5X3RleHRfZW5kW107CisKKwlyZXR1cm4gcHRyID49ICh1bnNpZ25lZCBsb25nKSZfX2lycWVudHJ5X3RleHRfc3RhcnQgJiYKKwkgICAgICAgcHRyIDwgKHVuc2lnbmVkIGxvbmcpJl9faXJxZW50cnlfdGV4dF9lbmQ7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgX19pbl9pcnFlbnRyeV90ZXh0KHVuc2lnbmVkIGxvbmcgcHRyKQoreworCXJldHVybiAwOworfQorI2VuZGlmCisKIHN0YXRpYyBpbmxpbmUgaW50IGluX2V4Y2VwdGlvbl90ZXh0KHVuc2lnbmVkIGxvbmcgcHRyKQogewogCWV4dGVybiBjaGFyIF9fZXhjZXB0aW9uX3RleHRfc3RhcnRbXTsKIAlleHRlcm4gY2hhciBfX2V4Y2VwdGlvbl90ZXh0X2VuZFtdOworCWludCBpbjsKIAotCXJldHVybiBwdHIgPj0gKHVuc2lnbmVkIGxvbmcpJl9fZXhjZXB0aW9uX3RleHRfc3RhcnQgJiYKLQkgICAgICAgcHRyIDwgKHVuc2lnbmVkIGxvbmcpJl9fZXhjZXB0aW9uX3RleHRfZW5kOworCWluID0gcHRyID49ICh1bnNpZ25lZCBsb25nKSZfX2V4Y2VwdGlvbl90ZXh0X3N0YXJ0ICYmCisJICAgICBwdHIgPCAodW5zaWduZWQgbG9uZykmX19leGNlcHRpb25fdGV4dF9lbmQ7CisKKwlyZXR1cm4gaW4gPyA6IF9faW5faXJxZW50cnlfdGV4dChwdHIpOwogfQogCiBleHRlcm4gdm9pZCBfX2luaXQgZWFybHlfdHJhcF9pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgZHVtcF9iYWNrdHJhY2VfZW50cnkodW5zaWduZWQgbG9uZyB3aGVyZSwgdW5zaWduZWQgbG9uZyBmcm9tLCB1bnNpZ25lZCBsb25nIGZyYW1lKTsKIAorZXh0ZXJuIHZvaWQgKnZlY3RvcnNfcGFnZTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS91YWNjZXNzLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS91YWNjZXNzLmgKaW5kZXggMzNlNGE0OC4uYjI5MzYxNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vdWFjY2Vzcy5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaApAQCAtMjI3LDcgKzIyNyw3IEBACiAKICNkZWZpbmUgX19nZXRfdXNlcl9hc21fYnl0ZSh4LGFkZHIsZXJyKQkJCQlcCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQlcCi0JIjE6CWxkcmJ0CSUxLFslMl1cbiIJCQkJXAorCSIxOgkiIFQobGRyYikgIgklMSxbJTJdLCMwXG4iCQkJXAogCSIyOlxuIgkJCQkJCQlcCiAJIgkucHVzaHNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIgkJCVwKIAkiCS5hbGlnbgkyXG4iCQkJCQlcCkBAIC0yNjMsNyArMjYzLDcgQEAKIAogI2RlZmluZSBfX2dldF91c2VyX2FzbV93b3JkKHgsYWRkcixlcnIpCQkJCVwKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCVwKLQkiMToJbGRydAklMSxbJTJdXG4iCQkJCVwKKwkiMToJIiBUKGxkcikgIgklMSxbJTJdLCMwXG4iCQkJXAogCSIyOlxuIgkJCQkJCQlcCiAJIgkucHVzaHNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIgkJCVwKIAkiCS5hbGlnbgkyXG4iCQkJCQlcCkBAIC0zMDgsNyArMzA4LDcgQEAKIAogI2RlZmluZSBfX3B1dF91c2VyX2FzbV9ieXRlKHgsX19wdV9hZGRyLGVycikJCQlcCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQlcCi0JIjE6CXN0cmJ0CSUxLFslMl1cbiIJCQkJXAorCSIxOgkiIFQoc3RyYikgIgklMSxbJTJdLCMwXG4iCQkJXAogCSIyOlxuIgkJCQkJCQlcCiAJIgkucHVzaHNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIgkJCVwKIAkiCS5hbGlnbgkyXG4iCQkJCQlcCkBAIC0zNDEsNyArMzQxLDcgQEAKIAogI2RlZmluZSBfX3B1dF91c2VyX2FzbV93b3JkKHgsX19wdV9hZGRyLGVycikJCQlcCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQlcCi0JIjE6CXN0cnQJJTEsWyUyXVxuIgkJCQlcCisJIjE6CSIgVChzdHIpICIJJTEsWyUyXSwjMFxuIgkJCVwKIAkiMjpcbiIJCQkJCQkJXAogCSIJLnB1c2hzZWN0aW9uIC5maXh1cCxcImF4XCJcbiIJCQlcCiAJIgkuYWxpZ24JMlxuIgkJCQkJXApAQCAtMzY2LDEwICszNjYsMTAgQEAKIAogI2RlZmluZSBfX3B1dF91c2VyX2FzbV9kd29yZCh4LF9fcHVfYWRkcixlcnIpCQkJXAogCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJXAotIEFSTSgJIjE6CXN0cnQJIiBfX3JlZ19vcGVyMSAiLCBbJTFdLCAjNFxuIgkpCVwKLSBBUk0oCSIyOglzdHJ0CSIgX19yZWdfb3BlcjAgIiwgWyUxXVxuIgkpCVwKLSBUSFVNQigJIjE6CXN0cnQJIiBfX3JlZ19vcGVyMSAiLCBbJTFdXG4iCSkJXAotIFRIVU1CKAkiMjoJc3RydAkiIF9fcmVnX29wZXIwICIsIFslMSwgIzRdXG4iCSkJXAorIEFSTSgJIjE6CSIgVChzdHIpICIJIiBfX3JlZ19vcGVyMSAiLCBbJTFdLCAjNFxuIgkpCVwKKyBBUk0oCSIyOgkiIFQoc3RyKSAiCSIgX19yZWdfb3BlcjAgIiwgWyUxXVxuIgkpCVwKKyBUSFVNQigJIjE6CSIgVChzdHIpICIJIiBfX3JlZ19vcGVyMSAiLCBbJTFdXG4iCSkJXAorIFRIVU1CKAkiMjoJIiBUKHN0cikgIgkiIF9fcmVnX29wZXIwICIsIFslMSwgIzRdXG4iCSkJXAogCSIzOlxuIgkJCQkJCQlcCiAJIgkucHVzaHNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIgkJCVwKIAkiCS5hbGlnbgkyXG4iCQkJCQlcCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL2FybS9rZXJuZWwvTWFrZWZpbGUKaW5kZXggNWI5YjI2OC4uMTg1ZWU4MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9NYWtlZmlsZQpAQCAtNSw3ICs1LDcgQEAKIENQUEZMQUdTX3ZtbGludXgubGRzIDo9IC1EVEVYVF9PRkZTRVQ9JChURVhUX09GRlNFVCkKIEFGTEFHU19oZWFkLm8gICAgICAgIDo9IC1EVEVYVF9PRkZTRVQ9JChURVhUX09GRlNFVCkKIAotaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFCitpZmRlZiBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSCiBDRkxBR1NfUkVNT1ZFX2Z0cmFjZS5vID0gLXBnCiBlbmRpZgogCkBAIC0yOSwxMCArMjksMTIgQEAKIG9iai0kKENPTkZJR19BUlRIVVIpCQkrPSBhcnRodXIubwogb2JqLSQoQ09ORklHX0lTQV9ETUEpCQkrPSBkbWEtaXNhLm8KIG9iai0kKENPTkZJR19QQ0kpCQkrPSBiaW9zMzIubyBpc2Eubwotb2JqLSQoQ09ORklHX1NNUCkJCSs9IHNtcC5vCitvYmotJChDT05GSUdfSEFWRV9TQ0hFRF9DTE9DSykJKz0gc2NoZWRfY2xvY2subworb2JqLSQoQ09ORklHX1NNUCkJCSs9IHNtcC5vIHNtcF90bGIubwogb2JqLSQoQ09ORklHX0hBVkVfQVJNX1NDVSkJKz0gc21wX3NjdS5vCiBvYmotJChDT05GSUdfSEFWRV9BUk1fVFdEKQkrPSBzbXBfdHdkLm8KIG9iai0kKENPTkZJR19EWU5BTUlDX0ZUUkFDRSkJKz0gZnRyYWNlLm8KK29iai0kKENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVIpCSs9IGZ0cmFjZS5vCiBvYmotJChDT05GSUdfS0VYRUMpCQkrPSBtYWNoaW5lX2tleGVjLm8gcmVsb2NhdGVfa2VybmVsLm8KIG9iai0kKENPTkZJR19LUFJPQkVTKQkJKz0ga3Byb2Jlcy5vIGtwcm9iZXMtZGVjb2RlLm8KIG9iai0kKENPTkZJR19BVEFHU19QUk9DKQkrPSBhdGFncy5vCkBAIC00Miw2ICs0NCw4IEBACiBvYmotJChDT05GSUdfQVJNX1VOV0lORCkJKz0gdW53aW5kLm8KIG9iai0kKENPTkZJR19IQVZFX1RDTSkJCSs9IHRjbS5vCiBvYmotJChDT05GSUdfQ1JBU0hfRFVNUCkJKz0gY3Jhc2hfZHVtcC5vCitvYmotJChDT05GSUdfU1dQX0VNVUxBVEUpCSs9IHN3cF9lbXVsYXRlLm8KK0NGTEFHU19zd3BfZW11bGF0ZS5vCQk6PSAtV2EsLW1hcmNoPWFybXY3LWEKIG9iai0kKENPTkZJR19IQVZFX0hXX0JSRUFLUE9JTlQpCSs9IGh3X2JyZWFrcG9pbnQubwogCiBvYmotJChDT05GSUdfQ1JVTkNIKQkJKz0gY3J1bmNoLm8gY3J1bmNoLWJpdHMubwpAQCAtNTAsNiArNTQsNyBAQAogb2JqLSQoQ09ORklHX0NQVV9YU0NBTEUpCSs9IHhzY2FsZS1jcDAubwogb2JqLSQoQ09ORklHX0NQVV9YU0MzKQkJKz0geHNjYWxlLWNwMC5vCiBvYmotJChDT05GSUdfQ1BVX01PSEFXSykJKz0geHNjYWxlLWNwMC5vCitvYmotJChDT05GSUdfQ1BVX1BKNCkJCSs9IHBqNC1jcDAubwogb2JqLSQoQ09ORklHX0lXTU1YVCkJCSs9IGl3bW14dC5vCiBvYmotJChDT05GSUdfQ1BVX0hBU19QTVUpCSs9IHBtdS5vCiBvYmotJChDT05GSUdfSFdfUEVSRl9FVkVOVFMpCSs9IHBlcmZfZXZlbnQubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2VudHJ5LWFybXYuUyBiL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1hcm12LlMKaW5kZXggYmI5NmE3ZC4uMmI0NmZlYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2VudHJ5LWFybXYuUworKysgYi9hcmNoL2FybS9rZXJuZWwvZW50cnktYXJtdi5TCkBAIC0yNSw0MiArMjUsMjIgQEAKICNpbmNsdWRlIDxhc20vdGxzLmg+CiAKICNpbmNsdWRlICJlbnRyeS1oZWFkZXIuUyIKKyNpbmNsdWRlIDxhc20vZW50cnktbWFjcm8tbXVsdGkuUz4KIAogLyoKICAqIEludGVycnVwdCBoYW5kbGluZy4gIFByZXNlcnZlcyByNywgcjgsIHI5CiAgKi8KIAkubWFjcm8JaXJxX2hhbmRsZXIKLQlnZXRfaXJxbnJfcHJlYW1ibGUgcjUsIGxyCi0xOglnZXRfaXJxbnJfYW5kX2Jhc2UgcjAsIHI2LCByNSwgbHIKLQltb3ZuZQlyMSwgc3AKLQlACi0JQCByb3V0aW5lIGNhbGxlZCB3aXRoIHIwID0gaXJxIG51bWJlciwgcjEgPSBzdHJ1Y3QgcHRfcmVncyAqCi0JQAotCWFkcm5lCWxyLCBCU1lNKDFiKQotCWJuZQlhc21fZG9fSVJRCi0KLSNpZmRlZiBDT05GSUdfU01QCi0JLyoKLQkgKiBYWFgKLQkgKgotCSAqIHRoaXMgbWFjcm8gYXNzdW1lcyB0aGF0IGlycXN0YXQgKHI2KSBhbmQgYmFzZSAocjUpIGFyZQotCSAqIHByZXNlcnZlZCBmcm9tIGdldF9pcnFucl9hbmRfYmFzZSBhYm92ZQotCSAqLwotCUFMVF9TTVAodGVzdF9mb3JfaXBpIHIwLCByNiwgcjUsIGxyKQotCUFMVF9VUF9CKDk5OTdmKQotCW1vdm5lCXIwLCBzcAotCWFkcm5lCWxyLCBCU1lNKDFiKQotCWJuZQlkb19JUEkKLQotI2lmZGVmIENPTkZJR19MT0NBTF9USU1FUlMKLQl0ZXN0X2Zvcl9sdGlycSByMCwgcjYsIHI1LCBscgotCW1vdm5lCXIwLCBzcAotCWFkcm5lCWxyLCBCU1lNKDFiKQotCWJuZQlkb19sb2NhbF90aW1lcgorI2lmZGVmIENPTkZJR19NVUxUSV9JUlFfSEFORExFUgorCWxkcglyNSwgPWhhbmRsZV9hcmNoX2lycQorCW1vdglyMCwgc3AKKwlsZHIJcjUsIFtyNV0KKwlhZHIJbHIsIEJTWU0oOTk5N2YpCisJdGVxCXI1LCAjMAorCW1vdm5lCXBjLCByNQogI2VuZGlmCisJYXJjaF9pcnFfaGFuZGxlcl9kZWZhdWx0CiA5OTk3OgotI2VuZGlmCi0KIAkuZW5kbQogCiAjaWZkZWYgQ09ORklHX0tQUk9CRVMKQEAgLTE5OCw2ICsxNzgsNyBAQAogCUAKIAlAIHNldCBkZXNpcmVkIElSUSBzdGF0ZSwgdGhlbiBjYWxsIG1haW4gaGFuZGxlcgogCUAKKwlkZWJ1Z19lbnRyeSByMQogCW1zcgljcHNyX2MsIHI5CiAJbW92CXIyLCBzcAogCWJsCWRvX0RhdGFBYm9ydApAQCAtMzI0LDYgKzMwNSw3IEBACiAjZWxzZQogCWJsCUNQVV9QQUJPUlRfSEFORExFUgogI2VuZGlmCisJZGVidWdfZW50cnkgcjEKIAltc3IJY3Bzcl9jLCByOQkJCUAgTWF5YmUgZW5hYmxlIGludGVycnVwdHMKIAltb3YJcjIsIHNwCQkJCUAgcmVncwogCWJsCWRvX1ByZWZldGNoQWJvcnQJCUAgY2FsbCBhYm9ydCBoYW5kbGVyCkBAIC00MzksNiArNDIxLDcgQEAKIAlACiAJQCBJUlFzIG9uLCB0aGVuIGNhbGwgdGhlIG1haW4gaGFuZGxlcgogCUAKKwlkZWJ1Z19lbnRyeSByMQogCWVuYWJsZV9pcnEKIAltb3YJcjIsIHNwCiAJYWRyCWxyLCBCU1lNKHJldF9mcm9tX2V4Y2VwdGlvbikKQEAgLTcwMyw2ICs2ODYsNyBAQAogI2Vsc2UKIAlibAlDUFVfUEFCT1JUX0hBTkRMRVIKICNlbmRpZgorCWRlYnVnX2VudHJ5IHIxCiAJZW5hYmxlX2lycQkJCQlAIEVuYWJsZSBpbnRlcnJ1cHRzCiAJbW92CXIyLCBzcAkJCQlAIHJlZ3MKIAlibAlkb19QcmVmZXRjaEFib3J0CQlAIGNhbGwgYWJvcnQgaGFuZGxlcgpAQCAtNzM1LDcgKzcxOSw3IEBACiAgVEhVTUIoCXN0bWlhCWlwISwge3I0IC0gc2wsIGZwfQkgICApCUAgU3RvcmUgbW9zdCByZWdzIG9uIHN0YWNrCiAgVEhVTUIoCXN0cglzcCwgW2lwXSwgIzQJCSAgICkKICBUSFVNQigJc3RyCWxyLCBbaXBdLCAjNAkJICAgKQotI2lmZGVmIENPTkZJR19NTVUKKyNpZmRlZiBDT05GSUdfQ1BVX1VTRV9ET01BSU5TCiAJbGRyCXI2LCBbcjIsICNUSV9DUFVfRE9NQUlOXQogI2VuZGlmCiAJc2V0X3RscwlyMywgcjQsIHI1CkBAIC03NDQsNyArNzI4LDcgQEAKIAlsZHIJcjgsID1fX3N0YWNrX2Noa19ndWFyZAogCWxkcglyNywgW3I3LCAjVFNLX1NUQUNLX0NBTkFSWV0KICNlbmRpZgotI2lmZGVmIENPTkZJR19NTVUKKyNpZmRlZiBDT05GSUdfQ1BVX1VTRV9ET01BSU5TCiAJbWNyCXAxNSwgMCwgcjYsIGMzLCBjMCwgMAkJQCBTZXQgZG9tYWluIHJlZ2lzdGVyCiAjZW5kaWYKIAltb3YJcjUsIHIwCkBAIC04NDIsNyArODI2LDcgQEAKICAqLwogCiBfX2t1c2VyX21lbW9yeV9iYXJyaWVyOgkJCQlAIDB4ZmZmZjBmYTAKLQlzbXBfZG1iCisJc21wX2RtYglhcm0KIAl1c3JfcmV0CWxyCiAKIAkuYWxpZ24JNQpAQCAtOTU5LDcgKzk0Myw3IEBACiAKICNlbHNlCiAKLQlzbXBfZG1iCisJc21wX2RtYglhcm0KIDE6CWxkcmV4CXIzLCBbcjJdCiAJc3VicwlyMywgcjMsIHIwCiAJc3RyZXhlcQlyMywgcjEsIFtyMl0KQEAgLTEyNDUsMyArMTIyOSw5IEBACiAJLnNwYWNlCTQKIGNyX25vX2FsaWdubWVudDoKIAkuc3BhY2UJNAorCisjaWZkZWYgQ09ORklHX01VTFRJX0lSUV9IQU5ETEVSCisJLmdsb2JsCWhhbmRsZV9hcmNoX2lycQoraGFuZGxlX2FyY2hfaXJxOgorCS5zcGFjZQk0CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1jb21tb24uUyBiL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1jb21tb24uUwppbmRleCA4MGJmOGNkLi4xZTdiMDRhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvZW50cnktY29tbW9uLlMKKysrIGIvYXJjaC9hcm0va2VybmVsL2VudHJ5LWNvbW1vbi5TCkBAIC0xNDcsOTggKzE0NywxNzAgQEAKICNlbmRpZgogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0UKLUVOVFJZKF9fZ251X21jb3VudF9uYykKLQltb3YJaXAsIGxyCi0JbGRtaWEJc3AhLCB7bHJ9Ci0JbW92CXBjLCBpcAotRU5EUFJPQyhfX2dudV9tY291bnRfbmMpCi0KLUVOVFJZKGZ0cmFjZV9jYWxsZXIpCi0Jc3RtZGIJc3AhLCB7cjAtcjMsIGxyfQotCW1vdglyMCwgbHIKLQlzdWIJcjAsIHIwLCAjTUNPVU5UX0lOU05fU0laRQotCWxkcglyMSwgW3NwLCAjMjBdCi0KLQkuZ2xvYmFsCWZ0cmFjZV9jYWxsCi1mdHJhY2VfY2FsbDoKLQlibAlmdHJhY2Vfc3R1YgotCWxkbWlhCXNwISwge3IwLXIzLCBpcCwgbHJ9Ci0JbW92CXBjLCBpcAotRU5EUFJPQyhmdHJhY2VfY2FsbGVyKQotCi0jaWZkZWYgQ09ORklHX09MRF9NQ09VTlQKLUVOVFJZKG1jb3VudCkKLQlzdG1kYglzcCEsIHtscn0KLQlsZHIJbHIsIFtmcCwgIy00XQotCWxkbWlhCXNwISwge3BjfQotRU5EUFJPQyhtY291bnQpCi0KLUVOVFJZKGZ0cmFjZV9jYWxsZXJfb2xkKQotCXN0bWRiCXNwISwge3IwLXIzLCBscn0KLQlsZHIJcjEsIFtmcCwgIy00XQotCW1vdglyMCwgbHIKLQlzdWIJcjAsIHIwLCAjTUNPVU5UX0lOU05fU0laRQotCi0JLmdsb2JsIGZ0cmFjZV9jYWxsX29sZAotZnRyYWNlX2NhbGxfb2xkOgotCWJsCWZ0cmFjZV9zdHViCi0JbGRyCWxyLCBbZnAsICMtNF0JCQlAIHJlc3RvcmUgbHIKLQlsZG1pYQlzcCEsIHtyMC1yMywgcGN9Ci1FTkRQUk9DKGZ0cmFjZV9jYWxsZXJfb2xkKQotI2VuZGlmCi0KLSNlbHNlCi0KLUVOVFJZKF9fZ251X21jb3VudF9uYykKLQlzdG1kYglzcCEsIHtyMC1yMywgbHJ9CisubWFjcm8gX19tY291bnQgc3VmZml4CisJbWNvdW50X2VudGVyCiAJbGRyCXIwLCA9ZnRyYWNlX3RyYWNlX2Z1bmN0aW9uCiAJbGRyCXIyLCBbcjBdCiAJYWRyCXIwLCAuTGZ0cmFjZV9zdHViCiAJY21wCXIwLCByMgotCWJuZQlnbnVfdHJhY2UKLQlsZG1pYQlzcCEsIHtyMC1yMywgaXAsIGxyfQotCW1vdglwYywgaXAKKwlibmUJMWYKIAotZ251X3RyYWNlOgotCWxkcglyMSwgW3NwLCAjMjBdCQkJQCBsciBvZiBpbnN0cnVtZW50ZWQgcm91dGluZQotCW1vdglyMCwgbHIKKyNpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCisJbGRyICAgICByMSwgPWZ0cmFjZV9ncmFwaF9yZXR1cm4KKwlsZHIgICAgIHIyLCBbcjFdCisJY21wICAgICByMCwgcjIKKwlibmUgICAgIGZ0cmFjZV9ncmFwaF9jYWxsZXJcc3VmZml4CisKKwlsZHIgICAgIHIxLCA9ZnRyYWNlX2dyYXBoX2VudHJ5CisJbGRyICAgICByMiwgW3IxXQorCWxkciAgICAgcjAsID1mdHJhY2VfZ3JhcGhfZW50cnlfc3R1YgorCWNtcCAgICAgcjAsIHIyCisJYm5lICAgICBmdHJhY2VfZ3JhcGhfY2FsbGVyXHN1ZmZpeAorI2VuZGlmCisKKwltY291bnRfZXhpdAorCisxOiAJbWNvdW50X2dldF9scglyMQkJCUAgbHIgb2YgaW5zdHJ1bWVudGVkIGZ1bmMKKwltb3YJcjAsIGxyCQkJCUAgaW5zdHJ1bWVudGVkIGZ1bmN0aW9uCiAJc3ViCXIwLCByMCwgI01DT1VOVF9JTlNOX1NJWkUKLQlhZHIJbHIsIEJTWU0oMWYpCisJYWRyCWxyLCBCU1lNKDJmKQogCW1vdglwYywgcjIKLTE6Ci0JbGRtaWEJc3AhLCB7cjAtcjMsIGlwLCBscn0KLQltb3YJcGMsIGlwCi1FTkRQUk9DKF9fZ251X21jb3VudF9uYykKKzI6CW1jb3VudF9leGl0CisuZW5kbQorCisubWFjcm8gX19mdHJhY2VfY2FsbGVyIHN1ZmZpeAorCW1jb3VudF9lbnRlcgorCisJbWNvdW50X2dldF9scglyMQkJCUAgbHIgb2YgaW5zdHJ1bWVudGVkIGZ1bmMKKwltb3YJcjAsIGxyCQkJCUAgaW5zdHJ1bWVudGVkIGZ1bmN0aW9uCisJc3ViCXIwLCByMCwgI01DT1VOVF9JTlNOX1NJWkUKKworCS5nbG9ibCBmdHJhY2VfY2FsbFxzdWZmaXgKK2Z0cmFjZV9jYWxsXHN1ZmZpeDoKKwlibAlmdHJhY2Vfc3R1YgorCisjaWZkZWYgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUgorCS5nbG9ibCBmdHJhY2VfZ3JhcGhfY2FsbFxzdWZmaXgKK2Z0cmFjZV9ncmFwaF9jYWxsXHN1ZmZpeDoKKwltb3YJcjAsIHIwCisjZW5kaWYKKworCW1jb3VudF9leGl0CisuZW5kbQorCisubWFjcm8gX19mdHJhY2VfZ3JhcGhfY2FsbGVyCisJc3ViCXIwLCBmcCwgIzQJCUAgJmxyIG9mIGluc3RydW1lbnRlZCByb3V0aW5lICgmcGFyZW50KQorI2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRQorCUAgY2FsbGVkIGZyb20gX19mdHJhY2VfY2FsbGVyLCBzYXZlZCBpbiBtY291bnRfZW50ZXIKKwlsZHIJcjEsIFtzcCwgIzE2XQkJQCBpbnN0cnVtZW50ZWQgcm91dGluZSAoZnVuYykKKyNlbHNlCisJQCBjYWxsZWQgZnJvbSBfX21jb3VudCwgdW50b3VjaGVkIGluIGxyCisJbW92CXIxLCBscgkJCUAgaW5zdHJ1bWVudGVkIHJvdXRpbmUgKGZ1bmMpCisjZW5kaWYKKwlzdWIJcjEsIHIxLCAjTUNPVU5UX0lOU05fU0laRQorCW1vdglyMiwgZnAJCQlAIGZyYW1lIHBvaW50ZXIKKwlibAlwcmVwYXJlX2Z0cmFjZV9yZXR1cm4KKwltY291bnRfZXhpdAorLmVuZG0KIAogI2lmZGVmIENPTkZJR19PTERfTUNPVU5UCiAvKgotICogVGhpcyBpcyB1bmRlciBhbiBpZmRlZiBpbiBvcmRlciB0byBmb3JjZSBsaW5rLXRpbWUgZXJyb3JzIGZvciBwZW9wbGUgdHJ5aW5nCi0gKiB0byBidWlsZCB3aXRoICFGUkFNRV9QT0lOVEVSIHdpdGggYSBHQ0Mgd2hpY2ggZG9lc24ndCB1c2UgdGhlIG5ldy1zdHlsZQotICogbWNvdW50LgorICogbWNvdW50CiAgKi8KLUVOVFJZKG1jb3VudCkKLQlzdG1kYglzcCEsIHtyMC1yMywgbHJ9Ci0JbGRyCXIwLCA9ZnRyYWNlX3RyYWNlX2Z1bmN0aW9uCi0JbGRyCXIyLCBbcjBdCi0JYWRyCXIwLCBmdHJhY2Vfc3R1YgotCWNtcAlyMCwgcjIKLQlibmUJdHJhY2UKLQlsZHIJbHIsIFtmcCwgIy00XQkJCUAgcmVzdG9yZSBscgotCWxkbWlhCXNwISwge3IwLXIzLCBwY30KIAotdHJhY2U6Ci0JbGRyCXIxLCBbZnAsICMtNF0JCQlAIGxyIG9mIGluc3RydW1lbnRlZCByb3V0aW5lCi0JbW92CXIwLCBscgotCXN1YglyMCwgcjAsICNNQ09VTlRfSU5TTl9TSVpFCi0JbW92CWxyLCBwYwotCW1vdglwYywgcjIKLQlsZHIJbHIsIFtmcCwgIy00XQkJCUAgcmVzdG9yZSBscgorLm1hY3JvIG1jb3VudF9lbnRlcgorCXN0bWRiCXNwISwge3IwLXIzLCBscn0KKy5lbmRtCisKKy5tYWNybyBtY291bnRfZ2V0X2xyIHJlZworCWxkcglccmVnLCBbZnAsICMtNF0KKy5lbmRtCisKKy5tYWNybyBtY291bnRfZXhpdAorCWxkcglsciwgW2ZwLCAjLTRdCiAJbGRtaWEJc3AhLCB7cjAtcjMsIHBjfQorLmVuZG0KKworRU5UUlkobWNvdW50KQorI2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRQorCXN0bWRiCXNwISwge2xyfQorCWxkcglsciwgW2ZwLCAjLTRdCisJbGRtaWEJc3AhLCB7cGN9CisjZWxzZQorCV9fbWNvdW50IF9vbGQKKyNlbmRpZgogRU5EUFJPQyhtY291bnQpCisKKyNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0UKK0VOVFJZKGZ0cmFjZV9jYWxsZXJfb2xkKQorCV9fZnRyYWNlX2NhbGxlciBfb2xkCitFTkRQUk9DKGZ0cmFjZV9jYWxsZXJfb2xkKQogI2VuZGlmCiAKLSNlbmRpZiAvKiBDT05GSUdfRFlOQU1JQ19GVFJBQ0UgKi8KKyNpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCitFTlRSWShmdHJhY2VfZ3JhcGhfY2FsbGVyX29sZCkKKwlfX2Z0cmFjZV9ncmFwaF9jYWxsZXIKK0VORFBST0MoZnRyYWNlX2dyYXBoX2NhbGxlcl9vbGQpCisjZW5kaWYKKworLnB1cmdlbSBtY291bnRfZW50ZXIKKy5wdXJnZW0gbWNvdW50X2dldF9scgorLnB1cmdlbSBtY291bnRfZXhpdAorI2VuZGlmCisKKy8qCisgKiBfX2dudV9tY291bnRfbmMKKyAqLworCisubWFjcm8gbWNvdW50X2VudGVyCisJc3RtZGIJc3AhLCB7cjAtcjMsIGxyfQorLmVuZG0KKworLm1hY3JvIG1jb3VudF9nZXRfbHIgcmVnCisJbGRyCVxyZWcsIFtzcCwgIzIwXQorLmVuZG0KKworLm1hY3JvIG1jb3VudF9leGl0CisJbGRtaWEJc3AhLCB7cjAtcjMsIGlwLCBscn0KKwltb3YJcGMsIGlwCisuZW5kbQorCitFTlRSWShfX2dudV9tY291bnRfbmMpCisjaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFCisJbW92CWlwLCBscgorCWxkbWlhCXNwISwge2xyfQorCW1vdglwYywgaXAKKyNlbHNlCisJX19tY291bnQKKyNlbmRpZgorRU5EUFJPQyhfX2dudV9tY291bnRfbmMpCisKKyNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0UKK0VOVFJZKGZ0cmFjZV9jYWxsZXIpCisJX19mdHJhY2VfY2FsbGVyCitFTkRQUk9DKGZ0cmFjZV9jYWxsZXIpCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVIKK0VOVFJZKGZ0cmFjZV9ncmFwaF9jYWxsZXIpCisJX19mdHJhY2VfZ3JhcGhfY2FsbGVyCitFTkRQUk9DKGZ0cmFjZV9ncmFwaF9jYWxsZXIpCisjZW5kaWYKKworLnB1cmdlbSBtY291bnRfZW50ZXIKKy5wdXJnZW0gbWNvdW50X2dldF9scgorLnB1cmdlbSBtY291bnRfZXhpdAorCisjaWZkZWYgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUgorCS5nbG9ibCByZXR1cm5fdG9faGFuZGxlcgorcmV0dXJuX3RvX2hhbmRsZXI6CisJc3RtZGIJc3AhLCB7cjAtcjN9CisJbW92CXIwLCBmcAkJCUAgZnJhbWUgcG9pbnRlcgorCWJsCWZ0cmFjZV9yZXR1cm5fdG9faGFuZGxlcgorCW1vdglsciwgcjAJCQlAIHIwIGhhcyByZWFsIHJldCBhZGRyCisJbGRtaWEJc3AhLCB7cjAtcjN9CisJbW92CXBjLCBscgorI2VuZGlmCiAKIEVOVFJZKGZ0cmFjZV9zdHViKQogLkxmdHJhY2Vfc3R1YjoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1oZWFkZXIuUyBiL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1oZWFkZXIuUwppbmRleCBkOTNmOTc2Li5hZTk0NjQ5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvZW50cnktaGVhZGVyLlMKKysrIGIvYXJjaC9hcm0va2VybmVsL2VudHJ5LWhlYWRlci5TCkBAIC0xNjUsNiArMTY1LDI1IEBACiAJLmVuZG0KICNlbmRpZgkvKiAhQ09ORklHX1RIVU1CMl9LRVJORUwgKi8KIAorCUAKKwlAIERlYnVnIGV4Y2VwdGlvbnMgYXJlIHRha2VuIGFzIHByZWZldGNoIG9yIGRhdGEgYWJvcnRzLgorCUAgV2UgbXVzdCBkaXNhYmxlIHByZWVtcHRpb24gZHVyaW5nIHRoZSBoYW5kbGVyIHNvIHRoYXQKKwlAIHdlIGNhbiBhY2Nlc3MgdGhlIGRlYnVnIHJlZ2lzdGVycyBzYWZlbHkuCisJQAorCS5tYWNybwlkZWJ1Z19lbnRyeSwgZnNyCisjaWYgZGVmaW5lZChDT05GSUdfSEFWRV9IV19CUkVBS1BPSU5UKSAmJiBkZWZpbmVkKENPTkZJR19QUkVFTVBUKQorCWxkcglyNCwgPTB4NDBmCQlAIG1hc2sgb3V0IGZzci5mcworCWFuZAlyNSwgcjQsIFxmc3IKKwljbXAJcjUsICMyCQkJQCBkZWJ1ZyBleGNlcHRpb24KKwlibmUJMWYKKwlnZXRfdGhyZWFkX2luZm8gcjEwCisJbGRyCXI2LCBbcjEwLCAjVElfUFJFRU1QVF0JQCBnZXQgcHJlZW1wdCBjb3VudAorCWFkZAlyMTEsIHI2LCAjMQkJQCBpbmNyZW1lbnQgaXQKKwlzdHIJcjExLCBbcjEwLCAjVElfUFJFRU1QVF0KKzE6CisjZW5kaWYKKwkuZW5kbQorCiAvKgogICogVGhlc2UgYXJlIHRoZSByZWdpc3RlcnMgdXNlZCBpbiB0aGUgc3lzY2FsbCBoYW5kbGVyLCBhbmQgYWxsb3cgdXMgdG8KICAqIGhhdmUgaW4gdGhlb3J5IHVwIHRvIDcgYXJndW1lbnRzIHRvIGEgZnVuY3Rpb24gLSByMCB0byByNi4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9maXEuYyBiL2FyY2gvYXJtL2tlcm5lbC9maXEuYwppbmRleCA2ZmY3OTE5Li5lNzJkYzM0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvZmlxLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL2ZpcS5jCkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSA8YXNtL2ZpcS5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL3RyYXBzLmg+CiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIG5vX2ZpcV9pbnNuOwogCkBAIC02NywxNyArNjgsMjIgQEAKIAogc3RhdGljIHN0cnVjdCBmaXFfaGFuZGxlciAqY3VycmVudF9maXEgPSAmZGVmYXVsdF9vd25lcjsKIAotaW50IHNob3dfZmlxX2xpc3Qoc3RydWN0IHNlcV9maWxlICpwLCB2b2lkICp2KQoraW50IHNob3dfZmlxX2xpc3Qoc3RydWN0IHNlcV9maWxlICpwLCBpbnQgcHJlYykKIHsKIAlpZiAoY3VycmVudF9maXEgIT0gJmRlZmF1bHRfb3duZXIpCi0JCXNlcV9wcmludGYocCwgIkZJUTogICAgICAgICAgICAgICVzXG4iLCBjdXJyZW50X2ZpcS0+bmFtZSk7CisJCXNlcV9wcmludGYocCwgIiUqczogICAgICAgICAgICAgICVzXG4iLCBwcmVjLCAiRklRIiwKKwkJCWN1cnJlbnRfZmlxLT5uYW1lKTsKIAogCXJldHVybiAwOwogfQogCiB2b2lkIHNldF9maXFfaGFuZGxlcih2b2lkICpzdGFydCwgdW5zaWduZWQgaW50IGxlbmd0aCkKIHsKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfVVNFX0RPTUFJTlMpCiAJbWVtY3B5KCh2b2lkICopMHhmZmZmMDAxYywgc3RhcnQsIGxlbmd0aCk7CisjZWxzZQorCW1lbWNweSh2ZWN0b3JzX3BhZ2UgKyAweDFjLCBzdGFydCwgbGVuZ3RoKTsKKyNlbmRpZgogCWZsdXNoX2ljYWNoZV9yYW5nZSgweGZmZmYwMDFjLCAweGZmZmYwMDFjICsgbGVuZ3RoKTsKIAlpZiAoIXZlY3RvcnNfaGlnaCgpKQogCQlmbHVzaF9pY2FjaGVfcmFuZ2UoMHgxYywgMHgxYyArIGxlbmd0aCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvZnRyYWNlLmMgYi9hcmNoL2FybS9rZXJuZWwvZnRyYWNlLmMKaW5kZXggOTcxYWM4Yy4uYzAwNjJhZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2Z0cmFjZS5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9mdHJhY2UuYwpAQCAtMjQsNiArMjQsNyBAQAogI2RlZmluZQlOT1AJCTB4ZThiZDQwMDAJLyogcG9wIHtscn0gKi8KICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFCiAjaWZkZWYgQ09ORklHX09MRF9NQ09VTlQKICNkZWZpbmUgT0xEX01DT1VOVF9BRERSCSgodW5zaWduZWQgbG9uZykgbWNvdW50KQogI2RlZmluZSBPTERfRlRSQUNFX0FERFIgKCh1bnNpZ25lZCBsb25nKSBmdHJhY2VfY2FsbGVyX29sZCkKQEAgLTU5LDkgKzYwLDkgQEAKIH0KICNlbmRpZgogCi0vKiBjb25zdHJ1Y3QgYSBicmFuY2ggKEJMKSBpbnN0cnVjdGlvbiB0byBhZGRyICovCiAjaWZkZWYgQ09ORklHX1RIVU1CMl9LRVJORUwKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGZ0cmFjZV9jYWxsX3JlcGxhY2UodW5zaWduZWQgbG9uZyBwYywgdW5zaWduZWQgbG9uZyBhZGRyKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgZnRyYWNlX2dlbl9icmFuY2godW5zaWduZWQgbG9uZyBwYywgdW5zaWduZWQgbG9uZyBhZGRyLAorCQkJCSAgICAgICBib29sIGxpbmspCiB7CiAJdW5zaWduZWQgbG9uZyBzLCBqMSwgajIsIGkxLCBpMiwgaW1tMTAsIGltbTExOwogCXVuc2lnbmVkIGxvbmcgZmlyc3QsIHNlY29uZDsKQEAgLTgzLDE1ICs4NCwyMiBAQAogCWoyID0gKCFpMikgXiBzOwogCiAJZmlyc3QgPSAweGYwMDAgfCAocyA8PCAxMCkgfCBpbW0xMDsKLQlzZWNvbmQgPSAweGQwMDAgfCAoajEgPDwgMTMpIHwgKGoyIDw8IDExKSB8IGltbTExOworCXNlY29uZCA9IDB4OTAwMCB8IChqMSA8PCAxMykgfCAoajIgPDwgMTEpIHwgaW1tMTE7CisJaWYgKGxpbmspCisJCXNlY29uZCB8PSAxIDw8IDE0OwogCiAJcmV0dXJuIChzZWNvbmQgPDwgMTYpIHwgZmlyc3Q7CiB9CiAjZWxzZQotc3RhdGljIHVuc2lnbmVkIGxvbmcgZnRyYWNlX2NhbGxfcmVwbGFjZSh1bnNpZ25lZCBsb25nIHBjLCB1bnNpZ25lZCBsb25nIGFkZHIpCitzdGF0aWMgdW5zaWduZWQgbG9uZyBmdHJhY2VfZ2VuX2JyYW5jaCh1bnNpZ25lZCBsb25nIHBjLCB1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkJICAgICAgIGJvb2wgbGluaykKIHsKKwl1bnNpZ25lZCBsb25nIG9wY29kZSA9IDB4ZWEwMDAwMDA7CiAJbG9uZyBvZmZzZXQ7CiAKKwlpZiAobGluaykKKwkJb3Bjb2RlIHw9IDEgPDwgMjQ7CisKIAlvZmZzZXQgPSAobG9uZylhZGRyIC0gKGxvbmcpKHBjICsgOCk7CiAJaWYgKHVubGlrZWx5KG9mZnNldCA8IC0zMzU1NDQzMiB8fCBvZmZzZXQgPiAzMzU1NDQyOCkpIHsKIAkJLyogQ2FuJ3QgZ2VuZXJhdGUgYnJhbmNoZXMgdGhhdCBmYXIgKGZyb20gQVJNIEFSTSkuIEZ0cmFjZQpAQCAtMTAzLDEwICsxMTEsMTUgQEAKIAogCW9mZnNldCA9IChvZmZzZXQgPj4gMikgJiAweDAwZmZmZmZmOwogCi0JcmV0dXJuIDB4ZWIwMDAwMDAgfCBvZmZzZXQ7CisJcmV0dXJuIG9wY29kZSB8IG9mZnNldDsKIH0KICNlbmRpZgogCitzdGF0aWMgdW5zaWduZWQgbG9uZyBmdHJhY2VfY2FsbF9yZXBsYWNlKHVuc2lnbmVkIGxvbmcgcGMsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlyZXR1cm4gZnRyYWNlX2dlbl9icmFuY2gocGMsIGFkZHIsIHRydWUpOworfQorCiBzdGF0aWMgaW50IGZ0cmFjZV9tb2RpZnlfY29kZSh1bnNpZ25lZCBsb25nIHBjLCB1bnNpZ25lZCBsb25nIG9sZCwKIAkJCSAgICAgIHVuc2lnbmVkIGxvbmcgbmV3KQogewpAQCAtMTkzLDMgKzIwNiw4MyBAQAogCiAJcmV0dXJuIDA7CiB9CisjZW5kaWYgLyogQ09ORklHX0RZTkFNSUNfRlRSQUNFICovCisKKyNpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCit2b2lkIHByZXBhcmVfZnRyYWNlX3JldHVybih1bnNpZ25lZCBsb25nICpwYXJlbnQsIHVuc2lnbmVkIGxvbmcgc2VsZl9hZGRyLAorCQkJICAgdW5zaWduZWQgbG9uZyBmcmFtZV9wb2ludGVyKQoreworCXVuc2lnbmVkIGxvbmcgcmV0dXJuX2hvb2tlciA9ICh1bnNpZ25lZCBsb25nKSAmcmV0dXJuX3RvX2hhbmRsZXI7CisJc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnQgdHJhY2U7CisJdW5zaWduZWQgbG9uZyBvbGQ7CisJaW50IGVycjsKKworCWlmICh1bmxpa2VseShhdG9taWNfcmVhZCgmY3VycmVudC0+dHJhY2luZ19ncmFwaF9wYXVzZSkpKQorCQlyZXR1cm47CisKKwlvbGQgPSAqcGFyZW50OworCSpwYXJlbnQgPSByZXR1cm5faG9va2VyOworCisJZXJyID0gZnRyYWNlX3B1c2hfcmV0dXJuX3RyYWNlKG9sZCwgc2VsZl9hZGRyLCAmdHJhY2UuZGVwdGgsCisJCQkJICAgICAgIGZyYW1lX3BvaW50ZXIpOworCWlmIChlcnIgPT0gLUVCVVNZKSB7CisJCSpwYXJlbnQgPSBvbGQ7CisJCXJldHVybjsKKwl9CisKKwl0cmFjZS5mdW5jID0gc2VsZl9hZGRyOworCisJLyogT25seSB0cmFjZSBpZiB0aGUgY2FsbGluZyBmdW5jdGlvbiBleHBlY3RzIHRvICovCisJaWYgKCFmdHJhY2VfZ3JhcGhfZW50cnkoJnRyYWNlKSkgeworCQljdXJyZW50LT5jdXJyX3JldF9zdGFjay0tOworCQkqcGFyZW50ID0gb2xkOworCX0KK30KKworI2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRQorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZnRyYWNlX2dyYXBoX2NhbGw7CitleHRlcm4gdW5zaWduZWQgbG9uZyBmdHJhY2VfZ3JhcGhfY2FsbF9vbGQ7CitleHRlcm4gdm9pZCBmdHJhY2VfZ3JhcGhfY2FsbGVyX29sZCh2b2lkKTsKKworc3RhdGljIGludCBfX2Z0cmFjZV9tb2RpZnlfY2FsbGVyKHVuc2lnbmVkIGxvbmcgKmNhbGxzaXRlLAorCQkJCSAgdm9pZCAoKmZ1bmMpICh2b2lkKSwgYm9vbCBlbmFibGUpCit7CisJdW5zaWduZWQgbG9uZyBjYWxsZXJfZm4gPSAodW5zaWduZWQgbG9uZykgZnVuYzsKKwl1bnNpZ25lZCBsb25nIHBjID0gKHVuc2lnbmVkIGxvbmcpIGNhbGxzaXRlOworCXVuc2lnbmVkIGxvbmcgYnJhbmNoID0gZnRyYWNlX2dlbl9icmFuY2gocGMsIGNhbGxlcl9mbiwgZmFsc2UpOworCXVuc2lnbmVkIGxvbmcgbm9wID0gMHhlMWEwMDAwMDsJLyogbW92IHIwLCByMCAqLworCXVuc2lnbmVkIGxvbmcgb2xkID0gZW5hYmxlID8gbm9wIDogYnJhbmNoOworCXVuc2lnbmVkIGxvbmcgbmV3ID0gZW5hYmxlID8gYnJhbmNoIDogbm9wOworCisJcmV0dXJuIGZ0cmFjZV9tb2RpZnlfY29kZShwYywgb2xkLCBuZXcpOworfQorCitzdGF0aWMgaW50IGZ0cmFjZV9tb2RpZnlfZ3JhcGhfY2FsbGVyKGJvb2wgZW5hYmxlKQoreworCWludCByZXQ7CisKKwlyZXQgPSBfX2Z0cmFjZV9tb2RpZnlfY2FsbGVyKCZmdHJhY2VfZ3JhcGhfY2FsbCwKKwkJCQkgICAgIGZ0cmFjZV9ncmFwaF9jYWxsZXIsCisJCQkJICAgICBlbmFibGUpOworCisjaWZkZWYgQ09ORklHX09MRF9NQ09VTlQKKwlpZiAoIXJldCkKKwkJcmV0ID0gX19mdHJhY2VfbW9kaWZ5X2NhbGxlcigmZnRyYWNlX2dyYXBoX2NhbGxfb2xkLAorCQkJCQkgICAgIGZ0cmFjZV9ncmFwaF9jYWxsZXJfb2xkLAorCQkJCQkgICAgIGVuYWJsZSk7CisjZW5kaWYKKworCXJldHVybiByZXQ7Cit9CisKK2ludCBmdHJhY2VfZW5hYmxlX2Z0cmFjZV9ncmFwaF9jYWxsZXIodm9pZCkKK3sKKwlyZXR1cm4gZnRyYWNlX21vZGlmeV9ncmFwaF9jYWxsZXIodHJ1ZSk7Cit9CisKK2ludCBmdHJhY2VfZGlzYWJsZV9mdHJhY2VfZ3JhcGhfY2FsbGVyKHZvaWQpCit7CisJcmV0dXJuIGZ0cmFjZV9tb2RpZnlfZ3JhcGhfY2FsbGVyKGZhbHNlKTsKK30KKyNlbmRpZiAvKiBDT05GSUdfRFlOQU1JQ19GVFJBQ0UgKi8KKyNlbmRpZiAvKiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvaGVhZC5TIGIvYXJjaC9hcm0va2VybmVsL2hlYWQuUwppbmRleCA2YmQ4MmQyNS4uZjE3ZDlhMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2hlYWQuUworKysgYi9hcmNoL2FybS9rZXJuZWwvaGVhZC5TCkBAIC05MSw2ICs5MSwxMSBAQAogCW1vdnMJcjgsIHI1CQkJCUAgaW52YWxpZCBtYWNoaW5lIChyNT0wKT8KICBUSFVNQiggaXQJZXEgKQkJQCBmb3JjZSBmaXh1cC1hYmxlIGxvbmcgYnJhbmNoIGVuY29kaW5nCiAJYmVxCV9fZXJyb3JfYQkJCUAgeWVzLCBlcnJvciAnYScKKworCS8qCisJICogcjEgPSBtYWNoaW5lIG5vLCByMiA9IGF0YWdzLAorCSAqIHI4ID0gbWFjaGluZm8sIHI5ID0gY3B1aWQsIHIxMCA9IHByb2NpbmZvCisJICovCiAJYmwJX192ZXRfYXRhZ3MKICNpZmRlZiBDT05GSUdfU01QX09OX1VQCiAJYmwJX19maXh1cF9zbXAKQEAgLTM4NywxOSArMzkyLDE5IEBACiAKICNpZmRlZiBDT05GSUdfU01QX09OX1VQCiBfX2ZpeHVwX3NtcDoKLQltb3YJcjcsICMweDAwMDcwMDAwCi0Jb3JyCXI2LCByNywgIzB4ZmYwMDAwMDAJQCBtYXNrIDB4ZmYwNzAwMDAKLQlvcnIJcjcsIHI3LCAjMHg0MTAwMDAwMAlAIHZhbCAweDQxMDcwMDAwCi0JYW5kCXIwLCByOSwgcjYKLQl0ZXEJcjAsIHI3CQkJQCBBUk0gQ1BVIGFuZCBBUk12Ni92Nz8KKwltb3YJcjQsICMweDAwMDcwMDAwCisJb3JyCXIzLCByNCwgIzB4ZmYwMDAwMDAJQCBtYXNrIDB4ZmYwNzAwMDAKKwlvcnIJcjQsIHI0LCAjMHg0MTAwMDAwMAlAIHZhbCAweDQxMDcwMDAwCisJYW5kCXIwLCByOSwgcjMKKwl0ZXEJcjAsIHI0CQkJQCBBUk0gQ1BVIGFuZCBBUk12Ni92Nz8KIAlibmUJX19maXh1cF9zbXBfb25fdXAJQCBubywgYXNzdW1lIFVQCiAKLQlvcnIJcjYsIHI2LCAjMHgwMDAwZmYwMAotCW9ycglyNiwgcjYsICMweDAwMDAwMGYwCUAgbWFzayAweGZmMDdmZmYwCi0Jb3JyCXI3LCByNywgIzB4MDAwMGIwMDAKLQlvcnIJcjcsIHI3LCAjMHgwMDAwMDAyMAlAIHZhbCAweDQxMDdiMDIwCi0JYW5kCXIwLCByOSwgcjYKLQl0ZXEJcjAsIHI3CQkJQCBBUk0gMTFNUENvcmU/CisJb3JyCXIzLCByMywgIzB4MDAwMGZmMDAKKwlvcnIJcjMsIHIzLCAjMHgwMDAwMDBmMAlAIG1hc2sgMHhmZjA3ZmZmMAorCW9ycglyNCwgcjQsICMweDAwMDBiMDAwCisJb3JyCXI0LCByNCwgIzB4MDAwMDAwMjAJQCB2YWwgMHg0MTA3YjAyMAorCWFuZAlyMCwgcjksIHIzCisJdGVxCXIwLCByNAkJCUAgQVJNIDExTVBDb3JlPwogCW1vdmVxCXBjLCBscgkJCUAgeWVzLCBhc3N1bWUgU01QCiAKIAltcmMJcDE1LCAwLCByMCwgYzAsIGMwLCA1CUAgcmVhZCBNUElEUgpAQCAtNDA4LDE1ICs0MTMsMjIgQEAKIAogX19maXh1cF9zbXBfb25fdXA6CiAJYWRyCXIwLCAxZgotCWxkbWlhCXIwLCB7cjMsIHI2LCByN30KKwlsZG1pYQlyMCwge3IzIC0gcjV9CiAJc3ViCXIzLCByMCwgcjMKLQlhZGQJcjYsIHI2LCByMwotCWFkZAlyNywgcjcsIHIzCi0yOgljbXAJcjYsIHI3Ci0JbGRtaWEJcjYhLCB7cjAsIHI0fQotCXN0cmxvCXI0LCBbcjAsIHIzXQotCWJsbwkyYgotCW1vdglwYywgbHIKKwlhZGQJcjQsIHI0LCByMworCWFkZAlyNSwgcjUsIHIzCisyOgljbXAJcjQsIHI1CisJbW92aHMJcGMsIGxyCisJbGRtaWEJcjQhLCB7cjAsIHI2fQorIEFSTSgJc3RyCXI2LCBbcjAsIHIzXQkpCisgVEhVTUIoCWFkZAlyMCwgcjAsIHIzCSkKKyNpZmRlZiBfX0FSTUVCX18KKyBUSFVNQigJbW92CXI2LCByNiwgcm9yICMxNgkpCUAgQ29udmVydCB3b3JkIG9yZGVyIGZvciBiaWctZW5kaWFuLgorI2VuZGlmCisgVEhVTUIoCXN0cmgJcjYsIFtyMF0sICMyCSkJQCBGb3IgVGh1bWItMiwgc3RvcmUgYXMgdHdvIGhhbGZ3b3JkcworIFRIVU1CKAltb3YJcjYsIHI2LCBsc3IgIzE2CSkJQCB0byBiZSByb2J1c3QgYWdhaW5zdCBtaXNhbGlnbmVkIHIzLgorIFRIVU1CKAlzdHJoCXI2LCBbcjBdCSkKKwliCTJiCiBFTkRQUk9DKF9fZml4dXBfc21wKQogCiAJLmFsaWduCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvaHdfYnJlYWtwb2ludC5jIGIvYXJjaC9hcm0va2VybmVsL2h3X2JyZWFrcG9pbnQuYwppbmRleCAyMWUzYTRhLi5jOWYzZjA0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvaHdfYnJlYWtwb2ludC5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9od19icmVha3BvaW50LmMKQEAgLTI0LDYgKzI0LDcgQEAKICNkZWZpbmUgcHJfZm10KGZtdCkgImh3LWJyZWFrcG9pbnQ6ICIgZm10CiAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KICNpbmNsdWRlIDxsaW51eC9wZXJmX2V2ZW50Lmg+CiAjaW5jbHVkZSA8bGludXgvaHdfYnJlYWtwb2ludC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgpAQCAtNDQsNiArNDUsNyBAQAogCiAvKiBOdW1iZXIgb2YgQlJQL1dSUCByZWdpc3RlcnMgb24gdGhpcyBDUFUuICovCiBzdGF0aWMgaW50IGNvcmVfbnVtX2JycHM7CitzdGF0aWMgaW50IGNvcmVfbnVtX3Jlc2VydmVkX2JycHM7CiBzdGF0aWMgaW50IGNvcmVfbnVtX3dycHM7CiAKIC8qIERlYnVnIGFyY2hpdGVjdHVyZSB2ZXJzaW9uLiAqLwpAQCAtNTIsODcgKzU0LDYgQEAKIC8qIE1heGltdW0gc3VwcG9ydGVkIHdhdGNocG9pbnQgbGVuZ3RoLiAqLwogc3RhdGljIHU4IG1heF93YXRjaHBvaW50X2xlbjsKIAotLyogRGV0ZXJtaW5lIG51bWJlciBvZiBCUlAgcmVnaXN0ZXJzIGF2YWlsYWJsZS4gKi8KLXN0YXRpYyBpbnQgZ2V0X251bV9icnBzKHZvaWQpCi17Ci0JdTMyIGRpZHI7Ci0JQVJNX0RCR19SRUFEKGMwLCAwLCBkaWRyKTsKLQlyZXR1cm4gKChkaWRyID4+IDI0KSAmIDB4ZikgKyAxOwotfQotCi0vKiBEZXRlcm1pbmUgbnVtYmVyIG9mIFdSUCByZWdpc3RlcnMgYXZhaWxhYmxlLiAqLwotc3RhdGljIGludCBnZXRfbnVtX3dycHModm9pZCkKLXsKLQkvKgotCSAqIEZJWE1FOiBXaGVuIGEgd2F0Y2hwb2ludCBmaXJlcywgdGhlIG9ubHkgd2F5IHRvIHdvcmsgb3V0IHdoaWNoCi0JICogd2F0Y2hwb2ludCBpdCB3YXMgaXMgYnkgZGlzYXNzZW1ibGluZyB0aGUgZmF1bHRpbmcgaW5zdHJ1Y3Rpb24KLQkgKiBhbmQgd29ya2luZyBvdXQgdGhlIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeSBhY2Nlc3MuCi0JICoKLQkgKiBGdXJ0aGVybW9yZSwgd2UgY2FuIG9ubHkgZG8gdGhpcyBpZiB0aGUgd2F0Y2hwb2ludCB3YXMgcHJlY2lzZQotCSAqIHNpbmNlIGltcHJlY2lzZSB3YXRjaHBvaW50cyBwcmV2ZW50IHVzIGZyb20gY2FsY3VsYXRpbmcgcmVnaXN0ZXIKLQkgKiBiYXNlZCBhZGRyZXNzZXMuCi0JICoKLQkgKiBGb3IgdGhlIHRpbWUgYmVpbmcsIHdlIG9ubHkgcmVwb3J0IDEgd2F0Y2hwb2ludCByZWdpc3RlciBzbyB3ZQotCSAqIGFsd2F5cyBrbm93IHdoaWNoIHdhdGNocG9pbnQgZmlyZWQuIEluIHRoZSBmdXR1cmUgd2UgY2FuIGVpdGhlcgotCSAqIGFkZCBhIGRpc2Fzc2VtYmxlciBhbmQgYWRkcmVzcyBnZW5lcmF0aW9uIGVtdWxhdG9yLCBvciB3ZSBjYW4KLQkgKiBpbnNlcnQgYSBjaGVjayB0byBzZWUgaWYgdGhlIERGQVIgaXMgc2V0IG9uIHdhdGNocG9pbnQgZXhjZXB0aW9uCi0JICogZW50cnkgW3RoZSBBUk0gQVJNIHN0YXRlcyB0aGF0IHRoZSBERkFSIGlzIFVOS05PV04sIGJ1dAotCSAqIGV4cGVyaWVuY2Ugc2hvd3MgdGhhdCBpdCBpcyBzZXQgb24gc29tZSBpbXBsZW1lbnRhdGlvbnNdLgotCSAqLwotCi0jaWYgMAotCXUzMiBkaWRyLCB3cnBzOwotCUFSTV9EQkdfUkVBRChjMCwgMCwgZGlkcik7Ci0JcmV0dXJuICgoZGlkciA+PiAyOCkgJiAweGYpICsgMTsKLSNlbmRpZgotCi0JcmV0dXJuIDE7Ci19Ci0KLWludCBod19icmVha3BvaW50X3Nsb3RzKGludCB0eXBlKQotewotCS8qCi0JICogV2UgY2FuIGJlIGNhbGxlZCBlYXJseSwgc28gZG9uJ3QgcmVseSBvbgotCSAqIG91ciBzdGF0aWMgdmFyaWFibGVzIGJlaW5nIGluaXRpYWxpc2VkLgotCSAqLwotCXN3aXRjaCAodHlwZSkgewotCWNhc2UgVFlQRV9JTlNUOgotCQlyZXR1cm4gZ2V0X251bV9icnBzKCk7Ci0JY2FzZSBUWVBFX0RBVEE6Ci0JCXJldHVybiBnZXRfbnVtX3dycHMoKTsKLQlkZWZhdWx0OgotCQlwcl93YXJuaW5nKCJ1bmtub3duIHNsb3QgdHlwZTogJWRcbiIsIHR5cGUpOwotCQlyZXR1cm4gMDsKLQl9Ci19Ci0KLS8qIERldGVybWluZSBkZWJ1ZyBhcmNoaXRlY3R1cmUuICovCi1zdGF0aWMgdTggZ2V0X2RlYnVnX2FyY2godm9pZCkKLXsKLQl1MzIgZGlkcjsKLQotCS8qIERvIHdlIGltcGxlbWVudCB0aGUgZXh0ZW5kZWQgQ1BVSUQgaW50ZXJmYWNlPyAqLwotCWlmICgoKHJlYWRfY3B1aWRfaWQoKSA+PiAxNikgJiAweGYpICE9IDB4ZikgewotCQlwcl93YXJuaW5nKCJDUFVJRCBmZWF0dXJlIHJlZ2lzdGVycyBub3Qgc3VwcG9ydGVkLiAiCi0JCQkJIkFzc3VtaW5nIHY2IGRlYnVnIGlzIHByZXNlbnQuXG4iKTsKLQkJcmV0dXJuIEFSTV9ERUJVR19BUkNIX1Y2OwotCX0KLQotCUFSTV9EQkdfUkVBRChjMCwgMCwgZGlkcik7Ci0JcmV0dXJuIChkaWRyID4+IDE2KSAmIDB4ZjsKLX0KLQotLyogRG9lcyB0aGlzIGNvcmUgc3VwcG9ydCBtaXNtYXRjaCBicmVha3BvaW50cz8gKi8KLXN0YXRpYyBpbnQgY29yZV9oYXNfbWlzbWF0Y2hfYnBzKHZvaWQpCi17Ci0JcmV0dXJuIGRlYnVnX2FyY2ggPj0gQVJNX0RFQlVHX0FSQ0hfVjdfRUNQMTQgJiYgY29yZV9udW1fYnJwcyA+IDE7Ci19Ci0KLXU4IGFyY2hfZ2V0X2RlYnVnX2FyY2godm9pZCkKLXsKLQlyZXR1cm4gZGVidWdfYXJjaDsKLX0KLQogI2RlZmluZSBSRUFEX1dCX1JFR19DQVNFKE9QMiwgTSwgVkFMKQkJXAogCWNhc2UgKChPUDIgPDwgNCkgKyBNKToJCQlcCiAJCUFSTV9EQkdfUkVBRChjICMjIE0sIE9QMiwgVkFMKTsgXApAQCAtMjEwLDYgKzEzMSw5NCBAQAogCWlzYigpOwogfQogCisvKiBEZXRlcm1pbmUgZGVidWcgYXJjaGl0ZWN0dXJlLiAqLworc3RhdGljIHU4IGdldF9kZWJ1Z19hcmNoKHZvaWQpCit7CisJdTMyIGRpZHI7CisKKwkvKiBEbyB3ZSBpbXBsZW1lbnQgdGhlIGV4dGVuZGVkIENQVUlEIGludGVyZmFjZT8gKi8KKwlpZiAoKChyZWFkX2NwdWlkX2lkKCkgPj4gMTYpICYgMHhmKSAhPSAweGYpIHsKKwkJcHJfd2FybmluZygiQ1BVSUQgZmVhdHVyZSByZWdpc3RlcnMgbm90IHN1cHBvcnRlZC4gIgorCQkJCSJBc3N1bWluZyB2NiBkZWJ1ZyBpcyBwcmVzZW50LlxuIik7CisJCXJldHVybiBBUk1fREVCVUdfQVJDSF9WNjsKKwl9CisKKwlBUk1fREJHX1JFQUQoYzAsIDAsIGRpZHIpOworCXJldHVybiAoZGlkciA+PiAxNikgJiAweGY7Cit9CisKK3U4IGFyY2hfZ2V0X2RlYnVnX2FyY2godm9pZCkKK3sKKwlyZXR1cm4gZGVidWdfYXJjaDsKK30KKworLyogRGV0ZXJtaW5lIG51bWJlciBvZiBCUlAgcmVnaXN0ZXIgYXZhaWxhYmxlLiAqLworc3RhdGljIGludCBnZXRfbnVtX2JycF9yZXNvdXJjZXModm9pZCkKK3sKKwl1MzIgZGlkcjsKKwlBUk1fREJHX1JFQUQoYzAsIDAsIGRpZHIpOworCXJldHVybiAoKGRpZHIgPj4gMjQpICYgMHhmKSArIDE7Cit9CisKKy8qIERvZXMgdGhpcyBjb3JlIHN1cHBvcnQgbWlzbWF0Y2ggYnJlYWtwb2ludHM/ICovCitzdGF0aWMgaW50IGNvcmVfaGFzX21pc21hdGNoX2JycHModm9pZCkKK3sKKwlyZXR1cm4gKGdldF9kZWJ1Z19hcmNoKCkgPj0gQVJNX0RFQlVHX0FSQ0hfVjdfRUNQMTQgJiYKKwkJZ2V0X251bV9icnBfcmVzb3VyY2VzKCkgPiAxKTsKK30KKworLyogRGV0ZXJtaW5lIG51bWJlciBvZiB1c2FibGUgV1JQcyBhdmFpbGFibGUuICovCitzdGF0aWMgaW50IGdldF9udW1fd3Jwcyh2b2lkKQoreworCS8qCisJICogRklYTUU6IFdoZW4gYSB3YXRjaHBvaW50IGZpcmVzLCB0aGUgb25seSB3YXkgdG8gd29yayBvdXQgd2hpY2gKKwkgKiB3YXRjaHBvaW50IGl0IHdhcyBpcyBieSBkaXNhc3NlbWJsaW5nIHRoZSBmYXVsdGluZyBpbnN0cnVjdGlvbgorCSAqIGFuZCB3b3JraW5nIG91dCB0aGUgYWRkcmVzcyBvZiB0aGUgbWVtb3J5IGFjY2Vzcy4KKwkgKgorCSAqIEZ1cnRoZXJtb3JlLCB3ZSBjYW4gb25seSBkbyB0aGlzIGlmIHRoZSB3YXRjaHBvaW50IHdhcyBwcmVjaXNlCisJICogc2luY2UgaW1wcmVjaXNlIHdhdGNocG9pbnRzIHByZXZlbnQgdXMgZnJvbSBjYWxjdWxhdGluZyByZWdpc3RlcgorCSAqIGJhc2VkIGFkZHJlc3Nlcy4KKwkgKgorCSAqIFByb3ZpZGluZyB3ZSBoYXZlIG1vcmUgdGhhbiAxIGJyZWFrcG9pbnQgcmVnaXN0ZXIsIHdlIG9ubHkgcmVwb3J0CisJICogYSBzaW5nbGUgd2F0Y2hwb2ludCByZWdpc3RlciBmb3IgdGhlIHRpbWUgYmVpbmcuIFRoaXMgd2F5LCB3ZSBhbHdheXMKKwkgKiBrbm93IHdoaWNoIHdhdGNocG9pbnQgZmlyZWQuIEluIHRoZSBmdXR1cmUgd2UgY2FuIGVpdGhlciBhZGQgYQorCSAqIGRpc2Fzc2VtYmxlciBhbmQgYWRkcmVzcyBnZW5lcmF0aW9uIGVtdWxhdG9yLCBvciB3ZSBjYW4gaW5zZXJ0IGEKKwkgKiBjaGVjayB0byBzZWUgaWYgdGhlIERGQVIgaXMgc2V0IG9uIHdhdGNocG9pbnQgZXhjZXB0aW9uIGVudHJ5CisJICogW3RoZSBBUk0gQVJNIHN0YXRlcyB0aGF0IHRoZSBERkFSIGlzIFVOS05PV04sIGJ1dCBleHBlcmllbmNlIHNob3dzCisJICogdGhhdCBpdCBpcyBzZXQgb24gc29tZSBpbXBsZW1lbnRhdGlvbnNdLgorCSAqLworCisjaWYgMAorCWludCB3cnBzOworCXUzMiBkaWRyOworCUFSTV9EQkdfUkVBRChjMCwgMCwgZGlkcik7CisJd3JwcyA9ICgoZGlkciA+PiAyOCkgJiAweGYpICsgMTsKKyNlbmRpZgorCWludCB3cnBzID0gMTsKKworCWlmIChjb3JlX2hhc19taXNtYXRjaF9icnBzKCkgJiYgd3JwcyA+PSBnZXRfbnVtX2JycF9yZXNvdXJjZXMoKSkKKwkJd3JwcyA9IGdldF9udW1fYnJwX3Jlc291cmNlcygpIC0gMTsKKworCXJldHVybiB3cnBzOworfQorCisvKiBXZSByZXNlcnZlIG9uZSBicmVha3BvaW50IGZvciBlYWNoIHdhdGNocG9pbnQuICovCitzdGF0aWMgaW50IGdldF9udW1fcmVzZXJ2ZWRfYnJwcyh2b2lkKQoreworCWlmIChjb3JlX2hhc19taXNtYXRjaF9icnBzKCkpCisJCXJldHVybiBnZXRfbnVtX3dycHMoKTsKKwlyZXR1cm4gMDsKK30KKworLyogRGV0ZXJtaW5lIG51bWJlciBvZiB1c2FibGUgQlJQcyBhdmFpbGFibGUuICovCitzdGF0aWMgaW50IGdldF9udW1fYnJwcyh2b2lkKQoreworCWludCBicnBzID0gZ2V0X251bV9icnBfcmVzb3VyY2VzKCk7CisJaWYgKGNvcmVfaGFzX21pc21hdGNoX2JycHMoKSkKKwkJYnJwcyAtPSBnZXRfbnVtX3Jlc2VydmVkX2JycHMoKTsKKwlyZXR1cm4gYnJwczsKK30KKwogLyoKICAqIEluIG9yZGVyIHRvIGFjY2VzcyB0aGUgYnJlYWtwb2ludC93YXRjaHBvaW50IGNvbnRyb2wgcmVnaXN0ZXJzLAogICogd2UgbXVzdCBiZSBydW5uaW5nIGluIGRlYnVnIG1vbml0b3IgbW9kZS4gVW5mb3J0dW5hdGVseSwgd2UgY2FuCkBAIC0yMzAsOCArMjM5LDEyIEBACiAJCWdvdG8gb3V0OwogCX0KIAorCS8qIElmIG1vbml0b3IgbW9kZSBpcyBhbHJlYWR5IGVuYWJsZWQsIGp1c3QgcmV0dXJuLiAqLworCWlmIChkc2NyICYgQVJNX0RTQ1JfTURCR0VOKQorCQlnb3RvIG91dDsKKwogCS8qIFdyaXRlIHRvIHRoZSBjb3JyZXNwb25kaW5nIERTQ1IuICovCi0Jc3dpdGNoIChkZWJ1Z19hcmNoKSB7CisJc3dpdGNoIChnZXRfZGVidWdfYXJjaCgpKSB7CiAJY2FzZSBBUk1fREVCVUdfQVJDSF9WNjoKIAljYXNlIEFSTV9ERUJVR19BUkNIX1Y2XzE6CiAJCUFSTV9EQkdfV1JJVEUoYzEsIDAsIChkc2NyIHwgQVJNX0RTQ1JfTURCR0VOKSk7CkBAIC0yNDYsMTUgKzI1OSwzMCBAQAogCiAJLyogQ2hlY2sgdGhhdCB0aGUgd3JpdGUgbWFkZSBpdCB0aHJvdWdoLiAqLwogCUFSTV9EQkdfUkVBRChjMSwgMCwgZHNjcik7Ci0JaWYgKFdBUk5fT05DRSghKGRzY3IgJiBBUk1fRFNDUl9NREJHRU4pLAotCQkJCSJmYWlsZWQgdG8gZW5hYmxlIG1vbml0b3IgbW9kZS4iKSkgeworCWlmICghKGRzY3IgJiBBUk1fRFNDUl9NREJHRU4pKQogCQlyZXQgPSAtRVBFUk07Ci0JfQogCiBvdXQ6CiAJcmV0dXJuIHJldDsKIH0KIAoraW50IGh3X2JyZWFrcG9pbnRfc2xvdHMoaW50IHR5cGUpCit7CisJLyoKKwkgKiBXZSBjYW4gYmUgY2FsbGVkIGVhcmx5LCBzbyBkb24ndCByZWx5IG9uCisJICogb3VyIHN0YXRpYyB2YXJpYWJsZXMgYmVpbmcgaW5pdGlhbGlzZWQuCisJICovCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBUWVBFX0lOU1Q6CisJCXJldHVybiBnZXRfbnVtX2JycHMoKTsKKwljYXNlIFRZUEVfREFUQToKKwkJcmV0dXJuIGdldF9udW1fd3JwcygpOworCWRlZmF1bHQ6CisJCXByX3dhcm5pbmcoInVua25vd24gc2xvdCB0eXBlOiAlZFxuIiwgdHlwZSk7CisJCXJldHVybiAwOworCX0KK30KKwogLyoKICAqIENoZWNrIGlmIDgtYml0IGJ5dGUtYWRkcmVzcyBzZWxlY3QgaXMgYXZhaWxhYmxlLgogICogVGhpcyBjbG9iYmVycyBXUlAgMC4KQEAgLTI2OCw5ICsyOTYsNiBAQAogCWlmIChkZWJ1Z19hcmNoIDwgQVJNX0RFQlVHX0FSQ0hfVjdfRUNQMTQpCiAJCWdvdG8gb3V0OwogCi0JaWYgKGVuYWJsZV9tb25pdG9yX21vZGUoKSkKLQkJZ290byBvdXQ7Ci0KIAltZW1zZXQoJmN0cmwsIDAsIHNpemVvZihjdHJsKSk7CiAJY3RybC5sZW4gPSBBUk1fQlJFQUtQT0lOVF9MRU5fODsKIAljdHJsX3JlZyA9IGVuY29kZV9jdHJsX3JlZyhjdHJsKTsKQEAgLTI5MCwyMyArMzE1LDYgQEAKIH0KIAogLyoKLSAqIEhhbmRsZXIgZm9yIHJlYWN0aXZhdGluZyBhIHN1c3BlbmRlZCB3YXRjaHBvaW50IHdoZW4gdGhlIHNpbmdsZQotICogc3RlcCBgbWlzbWF0Y2gnIGJyZWFrcG9pbnQgaXMgdHJpZ2dlcmVkLgotICovCi1zdGF0aWMgdm9pZCB3cF9zaW5nbGVfc3RlcF9oYW5kbGVyKHN0cnVjdCBwZXJmX2V2ZW50ICpicCwgaW50IHVudXNlZCwKLQkJCQkgICBzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSAqZGF0YSwKLQkJCQkgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlwZXJmX2V2ZW50X2VuYWJsZShjb3VudGVyX2FyY2hfYnAoYnApLT5zdXNwZW5kZWRfd3ApOwotCXVucmVnaXN0ZXJfaHdfYnJlYWtwb2ludChicCk7Ci19Ci0KLXN0YXRpYyBpbnQgYnBfaXNfc2luZ2xlX3N0ZXAoc3RydWN0IHBlcmZfZXZlbnQgKmJwKQotewotCXJldHVybiBicC0+b3ZlcmZsb3dfaGFuZGxlciA9PSB3cF9zaW5nbGVfc3RlcF9oYW5kbGVyOwotfQotCi0vKgogICogSW5zdGFsbCBhIHBlcmYgY291bnRlciBicmVha3BvaW50LgogICovCiBpbnQgYXJjaF9pbnN0YWxsX2h3X2JyZWFrcG9pbnQoc3RydWN0IHBlcmZfZXZlbnQgKmJwKQpAQCAtMzE0LDMwICszMjIsNDEgQEAKIAlzdHJ1Y3QgYXJjaF9od19icmVha3BvaW50ICppbmZvID0gY291bnRlcl9hcmNoX2JwKGJwKTsKIAlzdHJ1Y3QgcGVyZl9ldmVudCAqKnNsb3QsICoqc2xvdHM7CiAJaW50IGksIG1heF9zbG90cywgY3RybF9iYXNlLCB2YWxfYmFzZSwgcmV0ID0gMDsKKwl1MzIgYWRkciwgY3RybDsKIAogCS8qIEVuc3VyZSB0aGF0IHdlIGFyZSBpbiBtb25pdG9yIG1vZGUgYW5kIGhhbHRpbmcgbW9kZSBpcyBkaXNhYmxlZC4gKi8KIAlyZXQgPSBlbmFibGVfbW9uaXRvcl9tb2RlKCk7CiAJaWYgKHJldCkKIAkJZ290byBvdXQ7CiAKKwlhZGRyID0gaW5mby0+YWRkcmVzczsKKwljdHJsID0gZW5jb2RlX2N0cmxfcmVnKGluZm8tPmN0cmwpIHwgMHgxOworCiAJaWYgKGluZm8tPmN0cmwudHlwZSA9PSBBUk1fQlJFQUtQT0lOVF9FWEVDVVRFKSB7CiAJCS8qIEJyZWFrcG9pbnQgKi8KIAkJY3RybF9iYXNlID0gQVJNX0JBU0VfQkNSOwogCQl2YWxfYmFzZSA9IEFSTV9CQVNFX0JWUjsKLQkJc2xvdHMgPSBfX2dldF9jcHVfdmFyKGJwX29uX3JlZyk7Ci0JCW1heF9zbG90cyA9IGNvcmVfbnVtX2JycHMgLSAxOwotCi0JCWlmIChicF9pc19zaW5nbGVfc3RlcChicCkpIHsKLQkJCWluZm8tPmN0cmwubWlzbWF0Y2ggPSAxOwotCQkJaSA9IG1heF9zbG90czsKLQkJCXNsb3RzW2ldID0gYnA7Ci0JCQlnb3RvIHNldHVwOworCQlzbG90cyA9IChzdHJ1Y3QgcGVyZl9ldmVudCAqKilfX2dldF9jcHVfdmFyKGJwX29uX3JlZyk7CisJCW1heF9zbG90cyA9IGNvcmVfbnVtX2JycHM7CisJCWlmIChpbmZvLT5zdGVwX2N0cmwuZW5hYmxlZCkgeworCQkJLyogT3ZlcnJpZGUgdGhlIGJyZWFrcG9pbnQgZGF0YSB3aXRoIHRoZSBzdGVwIGRhdGEuICovCisJCQlhZGRyID0gaW5mby0+dHJpZ2dlciAmIH4weDM7CisJCQljdHJsID0gZW5jb2RlX2N0cmxfcmVnKGluZm8tPnN0ZXBfY3RybCk7CiAJCX0KIAl9IGVsc2UgewogCQkvKiBXYXRjaHBvaW50ICovCi0JCWN0cmxfYmFzZSA9IEFSTV9CQVNFX1dDUjsKLQkJdmFsX2Jhc2UgPSBBUk1fQkFTRV9XVlI7Ci0JCXNsb3RzID0gX19nZXRfY3B1X3Zhcih3cF9vbl9yZWcpOworCQlpZiAoaW5mby0+c3RlcF9jdHJsLmVuYWJsZWQpIHsKKwkJCS8qIEluc3RhbGwgaW50byB0aGUgcmVzZXJ2ZWQgYnJlYWtwb2ludCByZWdpb24uICovCisJCQljdHJsX2Jhc2UgPSBBUk1fQkFTRV9CQ1IgKyBjb3JlX251bV9icnBzOworCQkJdmFsX2Jhc2UgPSBBUk1fQkFTRV9CVlIgKyBjb3JlX251bV9icnBzOworCQkJLyogT3ZlcnJpZGUgdGhlIHdhdGNocG9pbnQgZGF0YSB3aXRoIHRoZSBzdGVwIGRhdGEuICovCisJCQlhZGRyID0gaW5mby0+dHJpZ2dlciAmIH4weDM7CisJCQljdHJsID0gZW5jb2RlX2N0cmxfcmVnKGluZm8tPnN0ZXBfY3RybCk7CisJCX0gZWxzZSB7CisJCQljdHJsX2Jhc2UgPSBBUk1fQkFTRV9XQ1I7CisJCQl2YWxfYmFzZSA9IEFSTV9CQVNFX1dWUjsKKwkJfQorCQlzbG90cyA9IChzdHJ1Y3QgcGVyZl9ldmVudCAqKilfX2dldF9jcHVfdmFyKHdwX29uX3JlZyk7CiAJCW1heF9zbG90cyA9IGNvcmVfbnVtX3dycHM7CiAJfQogCkBAIC0zNTUsMTIgKzM3NCwxMSBAQAogCQlnb3RvIG91dDsKIAl9CiAKLXNldHVwOgogCS8qIFNldHVwIHRoZSBhZGRyZXNzIHJlZ2lzdGVyLiAqLwotCXdyaXRlX3diX3JlZyh2YWxfYmFzZSArIGksIGluZm8tPmFkZHJlc3MpOworCXdyaXRlX3diX3JlZyh2YWxfYmFzZSArIGksIGFkZHIpOwogCiAJLyogU2V0dXAgdGhlIGNvbnRyb2wgcmVnaXN0ZXIuICovCi0Jd3JpdGVfd2JfcmVnKGN0cmxfYmFzZSArIGksIGVuY29kZV9jdHJsX3JlZyhpbmZvLT5jdHJsKSB8IDB4MSk7CisJd3JpdGVfd2JfcmVnKGN0cmxfYmFzZSArIGksIGN0cmwpOwogCiBvdXQ6CiAJcmV0dXJuIHJldDsKQEAgLTM3NSwxOCArMzkzLDE1IEBACiAJaWYgKGluZm8tPmN0cmwudHlwZSA9PSBBUk1fQlJFQUtQT0lOVF9FWEVDVVRFKSB7CiAJCS8qIEJyZWFrcG9pbnQgKi8KIAkJYmFzZSA9IEFSTV9CQVNFX0JDUjsKLQkJc2xvdHMgPSBfX2dldF9jcHVfdmFyKGJwX29uX3JlZyk7Ci0JCW1heF9zbG90cyA9IGNvcmVfbnVtX2JycHMgLSAxOwotCi0JCWlmIChicF9pc19zaW5nbGVfc3RlcChicCkpIHsKLQkJCWkgPSBtYXhfc2xvdHM7Ci0JCQlzbG90c1tpXSA9IE5VTEw7Ci0JCQlnb3RvIHJlc2V0OwotCQl9CisJCXNsb3RzID0gKHN0cnVjdCBwZXJmX2V2ZW50ICoqKV9fZ2V0X2NwdV92YXIoYnBfb25fcmVnKTsKKwkJbWF4X3Nsb3RzID0gY29yZV9udW1fYnJwczsKIAl9IGVsc2UgewogCQkvKiBXYXRjaHBvaW50ICovCi0JCWJhc2UgPSBBUk1fQkFTRV9XQ1I7Ci0JCXNsb3RzID0gX19nZXRfY3B1X3Zhcih3cF9vbl9yZWcpOworCQlpZiAoaW5mby0+c3RlcF9jdHJsLmVuYWJsZWQpCisJCQliYXNlID0gQVJNX0JBU0VfQkNSICsgY29yZV9udW1fYnJwczsKKwkJZWxzZQorCQkJYmFzZSA9IEFSTV9CQVNFX1dDUjsKKwkJc2xvdHMgPSAoc3RydWN0IHBlcmZfZXZlbnQgKiopX19nZXRfY3B1X3Zhcih3cF9vbl9yZWcpOwogCQltYXhfc2xvdHMgPSBjb3JlX251bV93cnBzOwogCX0KIApAQCAtNDAzLDcgKzQxOCw2IEBACiAJaWYgKFdBUk5fT05DRShpID09IG1heF9zbG90cywgIkNhbid0IGZpbmQgYW55IGJyZWFrcG9pbnQgc2xvdCIpKQogCQlyZXR1cm47CiAKLXJlc2V0OgogCS8qIFJlc2V0IHRoZSBjb250cm9sIHJlZ2lzdGVyLiAqLwogCXdyaXRlX3diX3JlZyhiYXNlICsgaSwgMCk7CiB9CkBAIC01MzcsMTIgKzU1MSwyMyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwkvKgorCSAqIEJyZWFrcG9pbnRzIG11c3QgYmUgb2YgbGVuZ3RoIDIgKHRodW1iKSBvciA0IChBUk0pIGJ5dGVzLgorCSAqIFdhdGNocG9pbnRzIGNhbiBiZSBvZiBsZW5ndGggMSwgMiwgNCBvciA4IGJ5dGVzIGlmIHN1cHBvcnRlZAorCSAqIGJ5IHRoZSBoYXJkd2FyZSBhbmQgbXVzdCBiZSBhbGlnbmVkIHRvIHRoZSBhcHByb3ByaWF0ZSBudW1iZXIgb2YKKwkgKiBieXRlcy4KKwkgKi8KKwlpZiAoaW5mby0+Y3RybC50eXBlID09IEFSTV9CUkVBS1BPSU5UX0VYRUNVVEUgJiYKKwkgICAgaW5mby0+Y3RybC5sZW4gIT0gQVJNX0JSRUFLUE9JTlRfTEVOXzIgJiYKKwkgICAgaW5mby0+Y3RybC5sZW4gIT0gQVJNX0JSRUFLUE9JTlRfTEVOXzQpCisJCXJldHVybiAtRUlOVkFMOworCiAJLyogQWRkcmVzcyAqLwogCWluZm8tPmFkZHJlc3MgPSBicC0+YXR0ci5icF9hZGRyOwogCiAJLyogUHJpdmlsZWdlICovCiAJaW5mby0+Y3RybC5wcml2aWxlZ2UgPSBBUk1fQlJFQUtQT0lOVF9VU0VSOwotCWlmIChhcmNoX2NoZWNrX2JwX2luX2tlcm5lbHNwYWNlKGJwKSAmJiAhYnBfaXNfc2luZ2xlX3N0ZXAoYnApKQorCWlmIChhcmNoX2NoZWNrX2JwX2luX2tlcm5lbHNwYWNlKGJwKSkKIAkJaW5mby0+Y3RybC5wcml2aWxlZ2UgfD0gQVJNX0JSRUFLUE9JTlRfUFJJVjsKIAogCS8qIEVuYWJsZWQ/ICovCkBAIC01NjEsNyArNTg2LDcgQEAKIHsKIAlzdHJ1Y3QgYXJjaF9od19icmVha3BvaW50ICppbmZvID0gY291bnRlcl9hcmNoX2JwKGJwKTsKIAlpbnQgcmV0ID0gMDsKLQl1MzIgYnl0ZWxlbiwgbWF4X2xlbiwgb2Zmc2V0LCBhbGlnbm1lbnRfbWFzayA9IDB4MzsKKwl1MzIgb2Zmc2V0LCBhbGlnbm1lbnRfbWFzayA9IDB4MzsKIAogCS8qIEJ1aWxkIHRoZSBhcmNoX2h3X2JyZWFrcG9pbnQuICovCiAJcmV0ID0gYXJjaF9idWlsZF9icF9pbmZvKGJwKTsKQEAgLTU3MSw4NCArNTk2LDg1IEBACiAJLyogQ2hlY2sgYWRkcmVzcyBhbGlnbm1lbnQuICovCiAJaWYgKGluZm8tPmN0cmwubGVuID09IEFSTV9CUkVBS1BPSU5UX0xFTl84KQogCQlhbGlnbm1lbnRfbWFzayA9IDB4NzsKLQlpZiAoaW5mby0+YWRkcmVzcyAmIGFsaWdubWVudF9tYXNrKSB7Ci0JCS8qCi0JCSAqIFRyeSB0byBmaXggdGhlIGFsaWdubWVudC4gVGhpcyBtYXkgcmVzdWx0IGluIGEgbGVuZ3RoCi0JCSAqIHRoYXQgaXMgdG9vIGxhcmdlLCBzbyB3ZSBtdXN0IGNoZWNrIGZvciB0aGF0LgotCQkgKi8KLQkJYnl0ZWxlbiA9IGdldF9oYnBfbGVuKGluZm8tPmN0cmwubGVuKTsKLQkJbWF4X2xlbiA9IGluZm8tPmN0cmwudHlwZSA9PSBBUk1fQlJFQUtQT0lOVF9FWEVDVVRFID8gNCA6Ci0JCQkJbWF4X3dhdGNocG9pbnRfbGVuOwotCi0JCWlmIChtYXhfbGVuID49IDgpCi0JCQlvZmZzZXQgPSBpbmZvLT5hZGRyZXNzICYgMHg3OwotCQllbHNlCi0JCQlvZmZzZXQgPSBpbmZvLT5hZGRyZXNzICYgMHgzOwotCi0JCWlmIChieXRlbGVuID4gKDEgPDwgKChtYXhfbGVuIC0gKG9mZnNldCArIDEpKSA+PiAxKSkpIHsKLQkJCXJldCA9IC1FRkJJRzsKLQkJCWdvdG8gb3V0OwotCQl9Ci0KLQkJaW5mby0+Y3RybC5sZW4gPDw9IG9mZnNldDsKLQkJaW5mby0+YWRkcmVzcyAmPSB+b2Zmc2V0OwotCi0JCXByX2RlYnVnKCJicmVha3BvaW50IGFsaWdubWVudCBmaXh1cDogbGVuZ3RoID0gMHgleCwgIgotCQkJImFkZHJlc3MgPSAweCV4XG4iLCBpbmZvLT5jdHJsLmxlbiwgaW5mby0+YWRkcmVzcyk7CisJb2Zmc2V0ID0gaW5mby0+YWRkcmVzcyAmIGFsaWdubWVudF9tYXNrOworCXN3aXRjaCAob2Zmc2V0KSB7CisJY2FzZSAwOgorCQkvKiBBbGlnbmVkICovCisJCWJyZWFrOworCWNhc2UgMToKKwkJLyogQWxsb3cgc2luZ2xlIGJ5dGUgd2F0Y2hwb2ludC4gKi8KKwkJaWYgKGluZm8tPmN0cmwubGVuID09IEFSTV9CUkVBS1BPSU5UX0xFTl8xKQorCQkJYnJlYWs7CisJY2FzZSAyOgorCQkvKiBBbGxvdyBoYWxmd29yZCB3YXRjaHBvaW50cyBhbmQgYnJlYWtwb2ludHMuICovCisJCWlmIChpbmZvLT5jdHJsLmxlbiA9PSBBUk1fQlJFQUtQT0lOVF9MRU5fMikKKwkJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OwogCX0KIAorCWluZm8tPmFkZHJlc3MgJj0gfmFsaWdubWVudF9tYXNrOworCWluZm8tPmN0cmwubGVuIDw8PSBvZmZzZXQ7CisKIAkvKgogCSAqIEN1cnJlbnRseSB3ZSByZWx5IG9uIGFuIG92ZXJmbG93IGhhbmRsZXIgdG8gdGFrZQogCSAqIGNhcmUgb2Ygc2luZ2xlLXN0ZXBwaW5nIHRoZSBicmVha3BvaW50IHdoZW4gaXQgZmlyZXMuCiAJICogSW4gdGhlIGNhc2Ugb2YgdXNlcnNwYWNlIGJyZWFrcG9pbnRzIG9uIGEgY29yZSB3aXRoIFY3IGRlYnVnLAotCSAqIHdlIGNhbiB1c2UgdGhlIG1pc21hdGNoIGZlYXR1cmUgYXMgYSBwb29yLW1hbidzIGhhcmR3YXJlIHNpbmdsZS1zdGVwLgorCSAqIHdlIGNhbiB1c2UgdGhlIG1pc21hdGNoIGZlYXR1cmUgYXMgYSBwb29yLW1hbidzIGhhcmR3YXJlCisJICogc2luZ2xlLXN0ZXAsIGJ1dCB0aGlzIG9ubHkgd29ya3MgZm9yIHBlci10YXNrIGJyZWFrcG9pbnRzLgogCSAqLwogCWlmIChXQVJOX09OQ0UoIWJwLT5vdmVyZmxvd19oYW5kbGVyICYmCi0JCShhcmNoX2NoZWNrX2JwX2luX2tlcm5lbHNwYWNlKGJwKSB8fCAhY29yZV9oYXNfbWlzbWF0Y2hfYnBzKCkpLAorCQkoYXJjaF9jaGVja19icF9pbl9rZXJuZWxzcGFjZShicCkgfHwgIWNvcmVfaGFzX21pc21hdGNoX2JycHMoKQorCQkgfHwgIWJwLT5ody5icF90YXJnZXQpLAogCQkJIm92ZXJmbG93IGhhbmRsZXIgcmVxdWlyZWQgYnV0IG5vbmUgZm91bmQiKSkgewogCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIG91dDsKIAl9CiBvdXQ6CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgdXBkYXRlX21pc21hdGNoX2ZsYWcoaW50IGlkeCwgaW50IGZsYWcpCisvKgorICogRW5hYmxlL2Rpc2FibGUgc2luZ2xlLXN0ZXBwaW5nIG92ZXIgdGhlIGJyZWFrcG9pbnQgYnAgYXQgYWRkcmVzcyBhZGRyLgorICovCitzdGF0aWMgdm9pZCBlbmFibGVfc2luZ2xlX3N0ZXAoc3RydWN0IHBlcmZfZXZlbnQgKmJwLCB1MzIgYWRkcikKIHsKLQlzdHJ1Y3QgcGVyZl9ldmVudCAqYnAgPSBfX2dldF9jcHVfdmFyKGJwX29uX3JlZ1tpZHhdKTsKLQlzdHJ1Y3QgYXJjaF9od19icmVha3BvaW50ICppbmZvOworCXN0cnVjdCBhcmNoX2h3X2JyZWFrcG9pbnQgKmluZm8gPSBjb3VudGVyX2FyY2hfYnAoYnApOwogCi0JaWYgKGJwID09IE5VTEwpCi0JCXJldHVybjsKKwlhcmNoX3VuaW5zdGFsbF9od19icmVha3BvaW50KGJwKTsKKwlpbmZvLT5zdGVwX2N0cmwubWlzbWF0Y2ggID0gMTsKKwlpbmZvLT5zdGVwX2N0cmwubGVuCSAgPSBBUk1fQlJFQUtQT0lOVF9MRU5fNDsKKwlpbmZvLT5zdGVwX2N0cmwudHlwZQkgID0gQVJNX0JSRUFLUE9JTlRfRVhFQ1VURTsKKwlpbmZvLT5zdGVwX2N0cmwucHJpdmlsZWdlID0gaW5mby0+Y3RybC5wcml2aWxlZ2U7CisJaW5mby0+c3RlcF9jdHJsLmVuYWJsZWQJICA9IDE7CisJaW5mby0+dHJpZ2dlcgkJICA9IGFkZHI7CisJYXJjaF9pbnN0YWxsX2h3X2JyZWFrcG9pbnQoYnApOworfQogCi0JaW5mbyA9IGNvdW50ZXJfYXJjaF9icChicCk7Ci0KLQkvKiBVcGRhdGUgdGhlIG1pc21hdGNoIGZpZWxkIHRvIGVudGVyL2V4aXQgYHNpbmdsZS1zdGVwJyBtb2RlICovCi0JaWYgKCFicC0+b3ZlcmZsb3dfaGFuZGxlciAmJiBpbmZvLT5jdHJsLm1pc21hdGNoICE9IGZsYWcpIHsKLQkJaW5mby0+Y3RybC5taXNtYXRjaCA9IGZsYWc7Ci0JCXdyaXRlX3diX3JlZyhBUk1fQkFTRV9CQ1IgKyBpZHgsIGVuY29kZV9jdHJsX3JlZyhpbmZvLT5jdHJsKSB8IDB4MSk7Ci0JfQorc3RhdGljIHZvaWQgZGlzYWJsZV9zaW5nbGVfc3RlcChzdHJ1Y3QgcGVyZl9ldmVudCAqYnApCit7CisJYXJjaF91bmluc3RhbGxfaHdfYnJlYWtwb2ludChicCk7CisJY291bnRlcl9hcmNoX2JwKGJwKS0+c3RlcF9jdHJsLmVuYWJsZWQgPSAwOworCWFyY2hfaW5zdGFsbF9od19icmVha3BvaW50KGJwKTsKIH0KIAogc3RhdGljIHZvaWQgd2F0Y2hwb2ludF9oYW5kbGVyKHVuc2lnbmVkIGxvbmcgdW5rbm93biwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJaW50IGk7Ci0Jc3RydWN0IHBlcmZfZXZlbnQgKmJwLCAqKnNsb3RzID0gX19nZXRfY3B1X3Zhcih3cF9vbl9yZWcpOworCXN0cnVjdCBwZXJmX2V2ZW50ICp3cCwgKipzbG90czsKIAlzdHJ1Y3QgYXJjaF9od19icmVha3BvaW50ICppbmZvOwotCXN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgYXR0cjsKKworCXNsb3RzID0gKHN0cnVjdCBwZXJmX2V2ZW50ICoqKV9fZ2V0X2NwdV92YXIod3Bfb25fcmVnKTsKIAogCS8qIFdpdGhvdXQgYSBkaXNhc3NlbWJsZXIsIHdlIGNhbiBvbmx5IGhhbmRsZSAxIHdhdGNocG9pbnQuICovCiAJQlVHX09OKGNvcmVfbnVtX3dycHMgPiAxKTsKIAotCWh3X2JyZWFrcG9pbnRfaW5pdCgmYXR0cik7Ci0JYXR0ci5icF9hZGRyCT0gcmVncy0+QVJNX3BjICYgfjB4MzsKLQlhdHRyLmJwX2xlbgk9IEhXX0JSRUFLUE9JTlRfTEVOXzQ7Ci0JYXR0ci5icF90eXBlCT0gSFdfQlJFQUtQT0lOVF9YOwotCiAJZm9yIChpID0gMDsgaSA8IGNvcmVfbnVtX3dycHM7ICsraSkgewogCQlyY3VfcmVhZF9sb2NrKCk7CiAKLQkJaWYgKHNsb3RzW2ldID09IE5VTEwpIHsKKwkJd3AgPSBzbG90c1tpXTsKKworCQlpZiAod3AgPT0gTlVMTCkgewogCQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCQljb250aW51ZTsKIAkJfQpAQCAtNjU4LDg3ICs2ODQsMTIxIEBACiAJCSAqIHNpbmdsZSB3YXRjaHBvaW50LCB3ZSBjYW4gc2V0IHRoZSB0cmlnZ2VyIHRvIHRoZSBsb3dlc3QKIAkJICogcG9zc2libGUgZmF1bHRpbmcgYWRkcmVzcy4KIAkJICovCi0JCWluZm8gPSBjb3VudGVyX2FyY2hfYnAoc2xvdHNbaV0pOwotCQlpbmZvLT50cmlnZ2VyID0gc2xvdHNbaV0tPmF0dHIuYnBfYWRkcjsKKwkJaW5mbyA9IGNvdW50ZXJfYXJjaF9icCh3cCk7CisJCWluZm8tPnRyaWdnZXIgPSB3cC0+YXR0ci5icF9hZGRyOwogCQlwcl9kZWJ1Zygid2F0Y2hwb2ludCBmaXJlZDogYWRkcmVzcyA9IDB4JXhcbiIsIGluZm8tPnRyaWdnZXIpOwotCQlwZXJmX2JwX2V2ZW50KHNsb3RzW2ldLCByZWdzKTsKKwkJcGVyZl9icF9ldmVudCh3cCwgcmVncyk7CiAKIAkJLyoKIAkJICogSWYgbm8gb3ZlcmZsb3cgaGFuZGxlciBpcyBwcmVzZW50LCBpbnNlcnQgYSB0ZW1wb3JhcnkKIAkJICogbWlzbWF0Y2ggYnJlYWtwb2ludCBzbyB3ZSBjYW4gc2luZ2xlLXN0ZXAgb3ZlciB0aGUKIAkJICogd2F0Y2hwb2ludCB0cmlnZ2VyLgogCQkgKi8KLQkJaWYgKCFzbG90c1tpXS0+b3ZlcmZsb3dfaGFuZGxlcikgewotCQkJYnAgPSByZWdpc3Rlcl91c2VyX2h3X2JyZWFrcG9pbnQoJmF0dHIsCi0JCQkJCQkJIHdwX3NpbmdsZV9zdGVwX2hhbmRsZXIsCi0JCQkJCQkJIGN1cnJlbnQpOwotCQkJY291bnRlcl9hcmNoX2JwKGJwKS0+c3VzcGVuZGVkX3dwID0gc2xvdHNbaV07Ci0JCQlwZXJmX2V2ZW50X2Rpc2FibGUoc2xvdHNbaV0pOwotCQl9CisJCWlmICghd3AtPm92ZXJmbG93X2hhbmRsZXIpCisJCQllbmFibGVfc2luZ2xlX3N0ZXAod3AsIGluc3RydWN0aW9uX3BvaW50ZXIocmVncykpOwogCiAJCXJjdV9yZWFkX3VubG9jaygpOwogCX0KIH0KIAorc3RhdGljIHZvaWQgd2F0Y2hwb2ludF9zaW5nbGVfc3RlcF9oYW5kbGVyKHVuc2lnbmVkIGxvbmcgcGMpCit7CisJaW50IGk7CisJc3RydWN0IHBlcmZfZXZlbnQgKndwLCAqKnNsb3RzOworCXN0cnVjdCBhcmNoX2h3X2JyZWFrcG9pbnQgKmluZm87CisKKwlzbG90cyA9IChzdHJ1Y3QgcGVyZl9ldmVudCAqKilfX2dldF9jcHVfdmFyKHdwX29uX3JlZyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY29yZV9udW1fcmVzZXJ2ZWRfYnJwczsgKytpKSB7CisJCXJjdV9yZWFkX2xvY2soKTsKKworCQl3cCA9IHNsb3RzW2ldOworCisJCWlmICh3cCA9PSBOVUxMKQorCQkJZ290byB1bmxvY2s7CisKKwkJaW5mbyA9IGNvdW50ZXJfYXJjaF9icCh3cCk7CisJCWlmICghaW5mby0+c3RlcF9jdHJsLmVuYWJsZWQpCisJCQlnb3RvIHVubG9jazsKKworCQkvKgorCQkgKiBSZXN0b3JlIHRoZSBvcmlnaW5hbCB3YXRjaHBvaW50IGlmIHdlJ3ZlIGNvbXBsZXRlZCB0aGUKKwkJICogc2luZ2xlLXN0ZXAuCisJCSAqLworCQlpZiAoaW5mby0+dHJpZ2dlciAhPSBwYykKKwkJCWRpc2FibGVfc2luZ2xlX3N0ZXAod3ApOworCit1bmxvY2s6CisJCXJjdV9yZWFkX3VubG9jaygpOworCX0KK30KKwogc3RhdGljIHZvaWQgYnJlYWtwb2ludF9oYW5kbGVyKHVuc2lnbmVkIGxvbmcgdW5rbm93biwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJaW50IGk7Ci0JaW50IG1pc21hdGNoOwogCXUzMiBjdHJsX3JlZywgdmFsLCBhZGRyOwotCXN0cnVjdCBwZXJmX2V2ZW50ICpicCwgKipzbG90cyA9IF9fZ2V0X2NwdV92YXIoYnBfb25fcmVnKTsKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqYnAsICoqc2xvdHM7CiAJc3RydWN0IGFyY2hfaHdfYnJlYWtwb2ludCAqaW5mbzsKIAlzdHJ1Y3QgYXJjaF9od19icmVha3BvaW50X2N0cmwgY3RybDsKIAorCXNsb3RzID0gKHN0cnVjdCBwZXJmX2V2ZW50ICoqKV9fZ2V0X2NwdV92YXIoYnBfb25fcmVnKTsKKwogCS8qIFRoZSBleGNlcHRpb24gZW50cnkgY29kZSBwbGFjZXMgdGhlIGFtZW5kZWQgbHIgaW4gdGhlIFBDLiAqLwogCWFkZHIgPSByZWdzLT5BUk1fcGM7CiAKKwkvKiBDaGVjayB0aGUgY3VycmVudGx5IGluc3RhbGxlZCBicmVha3BvaW50cyBmaXJzdC4gKi8KIAlmb3IgKGkgPSAwOyBpIDwgY29yZV9udW1fYnJwczsgKytpKSB7CiAJCXJjdV9yZWFkX2xvY2soKTsKIAogCQlicCA9IHNsb3RzW2ldOwogCi0JCWlmIChicCA9PSBOVUxMKSB7Ci0JCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJCWNvbnRpbnVlOwotCQl9CisJCWlmIChicCA9PSBOVUxMKQorCQkJZ290byB1bmxvY2s7CiAKLQkJbWlzbWF0Y2ggPSAwOworCQlpbmZvID0gY291bnRlcl9hcmNoX2JwKGJwKTsKIAogCQkvKiBDaGVjayBpZiB0aGUgYnJlYWtwb2ludCB2YWx1ZSBtYXRjaGVzLiAqLwogCQl2YWwgPSByZWFkX3diX3JlZyhBUk1fQkFTRV9CVlIgKyBpKTsKIAkJaWYgKHZhbCAhPSAoYWRkciAmIH4weDMpKQotCQkJZ290byB1bmxvY2s7CisJCQlnb3RvIG1pc21hdGNoOwogCiAJCS8qIFBvc3NpYmxlIG1hdGNoLCBjaGVjayB0aGUgYnl0ZSBhZGRyZXNzIHNlbGVjdCB0byBjb25maXJtLiAqLwogCQljdHJsX3JlZyA9IHJlYWRfd2JfcmVnKEFSTV9CQVNFX0JDUiArIGkpOwogCQlkZWNvZGVfY3RybF9yZWcoY3RybF9yZWcsICZjdHJsKTsKIAkJaWYgKCgxIDw8IChhZGRyICYgMHgzKSkgJiBjdHJsLmxlbikgewotCQkJbWlzbWF0Y2ggPSAxOwotCQkJaW5mbyA9IGNvdW50ZXJfYXJjaF9icChicCk7CiAJCQlpbmZvLT50cmlnZ2VyID0gYWRkcjsKLQkJfQotCi11bmxvY2s6Ci0JCWlmICgobWlzbWF0Y2ggJiYgIWluZm8tPmN0cmwubWlzbWF0Y2gpIHx8IGJwX2lzX3NpbmdsZV9zdGVwKGJwKSkgewogCQkJcHJfZGVidWcoImJyZWFrcG9pbnQgZmlyZWQ6IGFkZHJlc3MgPSAweCV4XG4iLCBhZGRyKTsKIAkJCXBlcmZfYnBfZXZlbnQoYnAsIHJlZ3MpOworCQkJaWYgKCFicC0+b3ZlcmZsb3dfaGFuZGxlcikKKwkJCQllbmFibGVfc2luZ2xlX3N0ZXAoYnAsIGFkZHIpOworCQkJZ290byB1bmxvY2s7CiAJCX0KIAotCQl1cGRhdGVfbWlzbWF0Y2hfZmxhZyhpLCBtaXNtYXRjaCk7CittaXNtYXRjaDoKKwkJLyogSWYgd2UncmUgc3RlcHBpbmcgYSBicmVha3BvaW50LCBpdCBjYW4gbm93IGJlIHJlc3RvcmVkLiAqLworCQlpZiAoaW5mby0+c3RlcF9jdHJsLmVuYWJsZWQpCisJCQlkaXNhYmxlX3NpbmdsZV9zdGVwKGJwKTsKK3VubG9jazoKIAkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJfQorCisJLyogSGFuZGxlIGFueSBwZW5kaW5nIHdhdGNocG9pbnQgc2luZ2xlLXN0ZXAgYnJlYWtwb2ludHMuICovCisJd2F0Y2hwb2ludF9zaW5nbGVfc3RlcF9oYW5kbGVyKGFkZHIpOwogfQogCiAvKgogICogQ2FsbGVkIGZyb20gZWl0aGVyIHRoZSBEYXRhIEFib3J0IEhhbmRsZXIgW3dhdGNocG9pbnRdIG9yIHRoZQotICogUHJlZmV0Y2ggQWJvcnQgSGFuZGxlciBbYnJlYWtwb2ludF0uCisgKiBQcmVmZXRjaCBBYm9ydCBIYW5kbGVyIFticmVha3BvaW50XSB3aXRoIHByZWVtcHRpb24gZGlzYWJsZWQuCiAgKi8KIHN0YXRpYyBpbnQgaHdfYnJlYWtwb2ludF9wZW5kaW5nKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgaW50IGZzciwKIAkJCQkgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0JaW50IHJldCA9IDE7IC8qIFVuaGFuZGxlZCBmYXVsdC4gKi8KKwlpbnQgcmV0ID0gMDsKIAl1MzIgZHNjcjsKIAorCS8qIFdlIG11c3QgYmUgY2FsbGVkIHdpdGggcHJlZW1wdGlvbiBkaXNhYmxlZC4gKi8KKwlXQVJOX09OKHByZWVtcHRpYmxlKCkpOworCiAJLyogV2Ugb25seSBoYW5kbGUgd2F0Y2hwb2ludHMgYW5kIGhhcmR3YXJlIGJyZWFrcG9pbnRzLiAqLwogCUFSTV9EQkdfUkVBRChjMSwgMCwgZHNjcik7CiAKQEAgLTc1MywyNSArODEzLDQ3IEBACiAJCXdhdGNocG9pbnRfaGFuZGxlcihhZGRyLCByZWdzKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJZ290byBvdXQ7CisJCXJldCA9IDE7IC8qIFVuaGFuZGxlZCBmYXVsdC4gKi8KIAl9CiAKLQlyZXQgPSAwOwotb3V0OgorCS8qCisJICogUmUtZW5hYmxlIHByZWVtcHRpb24gYWZ0ZXIgaXQgd2FzIGRpc2FibGVkIGluIHRoZQorCSAqIGxvdy1sZXZlbCBleGNlcHRpb24gaGFuZGxpbmcgY29kZS4KKwkgKi8KKwlwcmVlbXB0X2VuYWJsZSgpOworCiAJcmV0dXJuIHJldDsKIH0KIAogLyoKICAqIE9uZS10aW1lIGluaXRpYWxpc2F0aW9uLgogICovCi1zdGF0aWMgdm9pZCBfX2luaXQgcmVzZXRfY3RybF9yZWdzKHZvaWQgKnVudXNlZCkKK3N0YXRpYyB2b2lkIHJlc2V0X2N0cmxfcmVncyh2b2lkICp1bnVzZWQpCiB7CiAJaW50IGk7CiAKKwkvKgorCSAqIHY3IGRlYnVnIGNvbnRhaW5zIHNhdmUgYW5kIHJlc3RvcmUgcmVnaXN0ZXJzIHNvIHRoYXQgZGVidWcgc3RhdGUKKwkgKiBjYW4gYmUgbWFpbnRhaW5lZCBhY3Jvc3MgbG93LXBvd2VyIG1vZGVzIHdpdGhvdXQgbGVhdmluZworCSAqIHRoZSBkZWJ1ZyBsb2dpYyBwb3dlcmVkIHVwLiBJdCBpcyBJTVBMRU1FTlRBVElPTiBERUZJTkVEIHdoZXRoZXIKKwkgKiB3ZSBjYW4gd3JpdGUgdG8gdGhlIGRlYnVnIHJlZ2lzdGVycyBvdXQgb2YgcmVzZXQsIHNvIHdlIG11c3QKKwkgKiB1bmxvY2sgdGhlIE9TIExvY2sgQWNjZXNzIFJlZ2lzdGVyIHRvIGF2b2lkIHRha2luZyB1bmRlZmluZWQKKwkgKiBpbnN0cnVjdGlvbiBleGNlcHRpb25zIGxhdGVyIG9uLgorCSAqLworCWlmIChkZWJ1Z19hcmNoID49IEFSTV9ERUJVR19BUkNIX1Y3X0VDUDE0KSB7CisJCS8qCisJCSAqIFVuY29uZGl0aW9uYWxseSBjbGVhciB0aGUgbG9jayBieSB3cml0aW5nIGEgdmFsdWUKKwkJICogb3RoZXIgdGhhbiAweEM1QUNDRTU1IHRvIHRoZSBhY2Nlc3MgcmVnaXN0ZXIuCisJCSAqLworCQlhc20gdm9sYXRpbGUoIm1jciBwMTQsIDAsICUwLCBjMSwgYzAsIDQiIDogOiAiciIgKDApKTsKKwkJaXNiKCk7CisJfQorCiAJaWYgKGVuYWJsZV9tb25pdG9yX21vZGUoKSkKIAkJcmV0dXJuOwogCi0JZm9yIChpID0gMDsgaSA8IGNvcmVfbnVtX2JycHM7ICsraSkgeworCS8qIFdlIG11c3QgYWxzbyByZXNldCBhbnkgcmVzZXJ2ZWQgcmVnaXN0ZXJzLiAqLworCWZvciAoaSA9IDA7IGkgPCBjb3JlX251bV9icnBzICsgY29yZV9udW1fcmVzZXJ2ZWRfYnJwczsgKytpKSB7CiAJCXdyaXRlX3diX3JlZyhBUk1fQkFTRV9CQ1IgKyBpLCAwVUwpOwogCQl3cml0ZV93Yl9yZWcoQVJNX0JBU0VfQlZSICsgaSwgMFVMKTsKIAl9CkBAIC03ODIsNDUgKzg2NCw1NyBAQAogCX0KIH0KIAorc3RhdGljIGludCBfX2NwdWluaXQgZGJnX3Jlc2V0X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmNwdSkKK3sKKwlpZiAoYWN0aW9uID09IENQVV9PTkxJTkUpCisJCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZSgoaW50KWNwdSwgcmVzZXRfY3RybF9yZWdzLCBOVUxMLCAxKTsKKwlyZXR1cm4gTk9USUZZX09LOworfQorCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIF9fY3B1aW5pdGRhdGEgZGJnX3Jlc2V0X25iID0geworCS5ub3RpZmllcl9jYWxsID0gZGJnX3Jlc2V0X25vdGlmeSwKK307CisKIHN0YXRpYyBpbnQgX19pbml0IGFyY2hfaHdfYnJlYWtwb2ludF9pbml0KHZvaWQpCiB7Ci0JaW50IHJldCA9IDA7CiAJdTMyIGRzY3I7CiAKIAlkZWJ1Z19hcmNoID0gZ2V0X2RlYnVnX2FyY2goKTsKIAogCWlmIChkZWJ1Z19hcmNoID4gQVJNX0RFQlVHX0FSQ0hfVjdfRUNQMTQpIHsKIAkJcHJfaW5mbygiZGVidWcgYXJjaGl0ZWN0dXJlIDB4JXggdW5zdXBwb3J0ZWQuXG4iLCBkZWJ1Z19hcmNoKTsKLQkJcmV0ID0gLUVOT0RFVjsKLQkJZ290byBvdXQ7CisJCXJldHVybiAwOwogCX0KIAogCS8qIERldGVybWluZSBob3cgbWFueSBCUlBzL1dSUHMgYXJlIGF2YWlsYWJsZS4gKi8KIAljb3JlX251bV9icnBzID0gZ2V0X251bV9icnBzKCk7CisJY29yZV9udW1fcmVzZXJ2ZWRfYnJwcyA9IGdldF9udW1fcmVzZXJ2ZWRfYnJwcygpOwogCWNvcmVfbnVtX3dycHMgPSBnZXRfbnVtX3dycHMoKTsKIAogCXByX2luZm8oImZvdW5kICVkIGJyZWFrcG9pbnQgYW5kICVkIHdhdGNocG9pbnQgcmVnaXN0ZXJzLlxuIiwKLQkJCWNvcmVfbnVtX2JycHMsIGNvcmVfbnVtX3dycHMpOworCQljb3JlX251bV9icnBzICsgY29yZV9udW1fcmVzZXJ2ZWRfYnJwcywgY29yZV9udW1fd3Jwcyk7CiAKLQlpZiAoY29yZV9oYXNfbWlzbWF0Y2hfYnBzKCkpCi0JCXByX2luZm8oIjEgYnJlYWtwb2ludCByZXNlcnZlZCBmb3Igd2F0Y2hwb2ludCBzaW5nbGUtc3RlcC5cbiIpOworCWlmIChjb3JlX251bV9yZXNlcnZlZF9icnBzKQorCQlwcl9pbmZvKCIlZCBicmVha3BvaW50KHMpIHJlc2VydmVkIGZvciB3YXRjaHBvaW50ICIKKwkJCQkic2luZ2xlLXN0ZXAuXG4iLCBjb3JlX251bV9yZXNlcnZlZF9icnBzKTsKIAogCUFSTV9EQkdfUkVBRChjMSwgMCwgZHNjcik7CiAJaWYgKGRzY3IgJiBBUk1fRFNDUl9IREJHRU4pIHsKIAkJcHJfd2FybmluZygiaGFsdGluZyBkZWJ1ZyBtb2RlIGVuYWJsZWQuIEFzc3VtaW5nIG1heGltdW0gIgogCQkJCSJ3YXRjaHBvaW50IHNpemUgb2YgNCBieXRlcy4iKTsKIAl9IGVsc2UgewotCQkvKiBXb3JrIG91dCB0aGUgbWF4aW11bSBzdXBwb3J0ZWQgd2F0Y2hwb2ludCBsZW5ndGguICovCi0JCW1heF93YXRjaHBvaW50X2xlbiA9IGdldF9tYXhfd3BfbGVuKCk7Ci0JCXByX2luZm8oIm1heGltdW0gd2F0Y2hwb2ludCBzaXplIGlzICV1IGJ5dGVzLlxuIiwKLQkJCQltYXhfd2F0Y2hwb2ludF9sZW4pOwotCiAJCS8qCiAJCSAqIFJlc2V0IHRoZSBicmVha3BvaW50IHJlc291cmNlcy4gV2UgYXNzdW1lIHRoYXQgYSBoYWx0aW5nCiAJCSAqIGRlYnVnZ2VyIHdpbGwgbGVhdmUgdGhlIHdvcmxkIGluIGEgbmljZSBzdGF0ZSBmb3IgdXMuCiAJCSAqLwogCQlzbXBfY2FsbF9mdW5jdGlvbihyZXNldF9jdHJsX3JlZ3MsIE5VTEwsIDEpOwogCQlyZXNldF9jdHJsX3JlZ3MoTlVMTCk7CisKKwkJLyogV29yayBvdXQgdGhlIG1heGltdW0gc3VwcG9ydGVkIHdhdGNocG9pbnQgbGVuZ3RoLiAqLworCQltYXhfd2F0Y2hwb2ludF9sZW4gPSBnZXRfbWF4X3dwX2xlbigpOworCQlwcl9pbmZvKCJtYXhpbXVtIHdhdGNocG9pbnQgc2l6ZSBpcyAldSBieXRlcy5cbiIsCisJCQkJbWF4X3dhdGNocG9pbnRfbGVuKTsKIAl9CiAKIAkvKiBSZWdpc3RlciBkZWJ1ZyBmYXVsdCBoYW5kbGVyLiAqLwpAQCAtODI5LDggKzkyMyw5IEBACiAJaG9va19pZmF1bHRfY29kZSgyLCBod19icmVha3BvaW50X3BlbmRpbmcsIFNJR1RSQVAsIFRSQVBfSFdCS1BULAogCQkJImJyZWFrcG9pbnQgZGVidWcgZXhjZXB0aW9uIik7CiAKLW91dDoKLQlyZXR1cm4gcmV0OworCS8qIFJlZ2lzdGVyIGhvdHBsdWcgbm90aWZpZXIuICovCisJcmVnaXN0ZXJfY3B1X25vdGlmaWVyKCZkYmdfcmVzZXRfbmIpOworCXJldHVybiAwOwogfQogYXJjaF9pbml0Y2FsbChhcmNoX2h3X2JyZWFrcG9pbnRfaW5pdCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9pcnEuYyBiL2FyY2gvYXJtL2tlcm5lbC9pcnEuYwppbmRleCAzNmFkM2JlLi44MTM1NDM4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL2lycS5jCkBAIC0zNSw4ICszNSwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgogCkBAIC00Nyw4ICs0OSw2IEBACiAjZGVmaW5lIGlycV9maW5pc2goaXJxKSBkbyB7IH0gd2hpbGUgKDApCiAjZW5kaWYKIAotdW5zaWduZWQgaW50IGFyY2hfbnJfaXJxczsKLXZvaWQgKCppbml0X2FyY2hfaXJxKSh2b2lkKSBfX2luaXRkYXRhID0gTlVMTDsKIHVuc2lnbmVkIGxvbmcgaXJxX2Vycl9jb3VudDsKIAogaW50IHNob3dfaW50ZXJydXB0cyhzdHJ1Y3Qgc2VxX2ZpbGUgKnAsIHZvaWQgKnYpCkBAIC01NywxMSArNTcsMjAgQEAKIAlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CiAJc3RydWN0IGlycWFjdGlvbiAqIGFjdGlvbjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBwcmVjLCBuOworCisJZm9yIChwcmVjID0gMywgbiA9IDEwMDA7IHByZWMgPCAxMCAmJiBuIDw9IG5yX2lycXM7IHByZWMrKykKKwkJbiAqPSAxMDsKKworI2lmZGVmIENPTkZJR19TTVAKKwlpZiAocHJlYyA8IDQpCisJCXByZWMgPSA0OworI2VuZGlmCiAKIAlpZiAoaSA9PSAwKSB7CiAJCWNoYXIgY3B1bmFtZVsxMl07CiAKLQkJc2VxX3ByaW50ZihwLCAiICAgICIpOworCQlzZXFfcHJpbnRmKHAsICIlKnMgIiwgcHJlYywgIiIpOwogCQlmb3JfZWFjaF9wcmVzZW50X2NwdShjcHUpIHsKIAkJCXNwcmludGYoY3B1bmFtZSwgIkNQVSVkIiwgY3B1KTsKIAkJCXNlcV9wcmludGYocCwgIiAlMTBzIiwgY3B1bmFtZSk7CkBAIC03Niw3ICs4NSw3IEBACiAJCWlmICghYWN0aW9uKQogCQkJZ290byB1bmxvY2s7CiAKLQkJc2VxX3ByaW50ZihwLCAiJTNkOiAiLCBpKTsKKwkJc2VxX3ByaW50ZihwLCAiJSpkOiAiLCBwcmVjLCBpKTsKIAkJZm9yX2VhY2hfcHJlc2VudF9jcHUoY3B1KQogCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzX2NwdShpLCBjcHUpKTsKIAkJc2VxX3ByaW50ZihwLCAiICUxMHMiLCBkZXNjLT5jaGlwLT5uYW1lID8gOiAiLSIpOwpAQCAtODksMTMgKzk4LDE1IEBACiAJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiAJfSBlbHNlIGlmIChpID09IG5yX2lycXMpIHsKICNpZmRlZiBDT05GSUdfRklRCi0JCXNob3dfZmlxX2xpc3QocCwgdik7CisJCXNob3dfZmlxX2xpc3QocCwgcHJlYyk7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfU01QCi0JCXNob3dfaXBpX2xpc3QocCk7Ci0JCXNob3dfbG9jYWxfaXJxcyhwKTsKKwkJc2hvd19pcGlfbGlzdChwLCBwcmVjKTsKICNlbmRpZgotCQlzZXFfcHJpbnRmKHAsICJFcnI6ICUxMGx1XG4iLCBpcnFfZXJyX2NvdW50KTsKKyNpZmRlZiBDT05GSUdfTE9DQUxfVElNRVJTCisJCXNob3dfbG9jYWxfaXJxcyhwLCBwcmVjKTsKKyNlbmRpZgorCQlzZXFfcHJpbnRmKHAsICIlKnM6ICUxMGx1XG4iLCBwcmVjLCAiRXJyIiwgaXJxX2Vycl9jb3VudCk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMTA1LDcgKzExNiw4IEBACiAgKiBjb21lIHZpYSB0aGlzIGZ1bmN0aW9uLiAgSW5zdGVhZCwgdGhleSBzaG91bGQgcHJvdmlkZSB0aGVpcgogICogb3duICdoYW5kbGVyJwogICovCi1hc21saW5rYWdlIHZvaWQgX19leGNlcHRpb24gYXNtX2RvX0lSUSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK2FzbWxpbmthZ2Ugdm9pZCBfX2V4Y2VwdGlvbl9pcnFfZW50cnkKK2FzbV9kb19JUlEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJc3RydWN0IHB0X3JlZ3MgKm9sZF9yZWdzID0gc2V0X2lycV9yZWdzKHJlZ3MpOwogCkBAIC0xNTQsMTMgKzE2NiwxMyBAQAogCiB2b2lkIF9faW5pdCBpbml0X0lSUSh2b2lkKQogewotCWluaXRfYXJjaF9pcnEoKTsKKwltYWNoaW5lX2Rlc2MtPmluaXRfaXJxKCk7CiB9CiAKICNpZmRlZiBDT05GSUdfU1BBUlNFX0lSUQogaW50IF9faW5pdCBhcmNoX3Byb2JlX25yX2lycXModm9pZCkKIHsKLQlucl9pcnFzID0gYXJjaF9ucl9pcnFzID8gYXJjaF9ucl9pcnFzIDogTlJfSVJRUzsKKwlucl9pcnFzID0gbWFjaGluZV9kZXNjLT5ucl9pcnFzID8gbWFjaGluZV9kZXNjLT5ucl9pcnFzIDogTlJfSVJRUzsKIAlyZXR1cm4gbnJfaXJxczsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2l3bW14dC5TIGIvYXJjaC9hcm0va2VybmVsL2l3bW14dC5TCmluZGV4IGI2M2I1MjguLjdmYTNiYjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9pd21teHQuUworKysgYi9hcmNoL2FybS9rZXJuZWwvaXdtbXh0LlMKQEAgLTE5LDYgKzE5LDE0IEBACiAjaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+CiAjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CiAKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfUEo0KQorI2RlZmluZSBQSjQoY29kZS4uLikJCWNvZGUKKyNkZWZpbmUgWFNDKGNvZGUuLi4pCisjZWxzZQorI2RlZmluZSBQSjQoY29kZS4uLikKKyNkZWZpbmUgWFNDKGNvZGUuLi4pCQljb2RlCisjZW5kaWYKKwogI2RlZmluZSBNTVhfV1IwCQkgCSgweDAwKQogI2RlZmluZSBNTVhfV1IxCQkgCSgweDA4KQogI2RlZmluZSBNTVhfV1IyCQkgCSgweDEwKQpAQCAtNTgsMTEgKzY2LDE3IEBACiAKIEVOVFJZKGl3bW14dF90YXNrX2VuYWJsZSkKIAotCW1yYwlwMTUsIDAsIHIyLCBjMTUsIGMxLCAwCi0JdHN0CXIyLCAjMHgzCQkJQCBDUDAgYW5kIENQMSBhY2Nlc3NpYmxlPworCVhTQyhtcmMJcDE1LCAwLCByMiwgYzE1LCBjMSwgMCkKKwlQSjQobXJjIHAxNSwgMCwgcjIsIGMxLCBjMCwgMikKKwlAIENQMCBhbmQgQ1AxIGFjY2Vzc2libGU/CisJWFNDKHRzdAlyMiwgIzB4MykKKwlQSjQodHN0CXIyLCAjMHhmKQogCW1vdm5lCXBjLCBscgkJCQlAIGlmIHNvIG5vIGJ1c2luZXNzIGhlcmUKLQlvcnIJcjIsIHIyLCAjMHgzCQkJQCBlbmFibGUgYWNjZXNzIHRvIENQMCBhbmQgQ1AxCi0JbWNyCXAxNSwgMCwgcjIsIGMxNSwgYzEsIDAKKwlAIGVuYWJsZSBhY2Nlc3MgdG8gQ1AwIGFuZCBDUDEKKwlYU0Mob3JyCXIyLCByMiwgIzB4MykKKwlYU0MobWNyCXAxNSwgMCwgcjIsIGMxNSwgYzEsIDApCisJUEo0KG9ycglyMiwgcjIsICMweGYpCisJUEo0KG1jcglwMTUsIDAsIHIyLCBjMSwgYzAsIDIpCiAKIAlsZHIJcjMsID1jb25jYW5fb3duZXIKIAlhZGQJcjAsIHIxMCwgI1RJX0lXTU1YVF9TVEFURQlAIGdldCB0YXNrIENvbmNhbiBzYXZlIGFyZWEKQEAgLTE3OSwxNyArMTkzLDI2IEBACiAJdGVxbmUJcjEsIHIyCQkJCUAgb3Igc3BlY2lmaWVkIG9uZT8KIAlibmUJMWYJCQkJQCBubzogcXVpdAogCi0JbXJjCXAxNSwgMCwgcjQsIGMxNSwgYzEsIDAKLQlvcnIJcjQsIHI0LCAjMHgzCQkJQCBlbmFibGUgYWNjZXNzIHRvIENQMCBhbmQgQ1AxCi0JbWNyCXAxNSwgMCwgcjQsIGMxNSwgYzEsIDAKKwlAIGVuYWJsZSBhY2Nlc3MgdG8gQ1AwIGFuZCBDUDEKKwlYU0MobXJjCXAxNSwgMCwgcjQsIGMxNSwgYzEsIDApCisJWFNDKG9ycglyNCwgcjQsICMweGYpCisJWFNDKG1jcglwMTUsIDAsIHI0LCBjMTUsIGMxLCAwKQorCVBKNChtcmMgcDE1LCAwLCByNCwgYzEsIGMwLCAyKQorCVBKNChvcnIJcjQsIHI0LCAjMHgzKQorCVBKNChtY3IJcDE1LCAwLCByNCwgYzEsIGMwLCAyKQorCiAJbW92CXIwLCAjMAkJCQlAIG5vdGhpbmcgdG8gbG9hZAogCXN0cglyMCwgW3IzXQkJCUAgbm8gbW9yZSBjdXJyZW50IG93bmVyCiAJbXJjCXAxNSwgMCwgcjIsIGMyLCBjMCwgMAogCW1vdglyMiwgcjIJCQkJQCBjcHdhaXQKIAlibAljb25jYW5fc2F2ZQogCi0JYmljCXI0LCByNCwgIzB4MwkJCUAgZGlzYWJsZSBhY2Nlc3MgdG8gQ1AwIGFuZCBDUDEKLQltY3IJcDE1LCAwLCByNCwgYzE1LCBjMSwgMAorCUAgZGlzYWJsZSBhY2Nlc3MgdG8gQ1AwIGFuZCBDUDEKKwlYU0MoYmljCXI0LCByNCwgIzB4MykKKwlYU0MobWNyCXAxNSwgMCwgcjQsIGMxNSwgYzEsIDApCisJUEo0KGJpYwlyNCwgcjQsICMweGYpCisJUEo0KG1jcglwMTUsIDAsIHI0LCBjMSwgYzAsIDIpCisKIAltcmMJcDE1LCAwLCByMiwgYzIsIGMwLCAwCiAJbW92CXIyLCByMgkJCQlAIGNwd2FpdAogCkBAIC0yNzcsOCArMzAwLDExIEBACiAgKi8KIEVOVFJZKGl3bW14dF90YXNrX3N3aXRjaCkKIAotCW1yYwlwMTUsIDAsIHIxLCBjMTUsIGMxLCAwCi0JdHN0CXIxLCAjMHgzCQkJQCBDUDAgYW5kIENQMSBhY2Nlc3NpYmxlPworCVhTQyhtcmMJcDE1LCAwLCByMSwgYzE1LCBjMSwgMCkKKwlQSjQobXJjCXAxNSwgMCwgcjEsIGMxLCBjMCwgMikKKwlAIENQMCBhbmQgQ1AxIGFjY2Vzc2libGU/CisJWFNDKHRzdAlyMSwgIzB4MykKKwlQSjQodHN0CXIxLCAjMHhmKQogCWJuZQkxZgkJCQlAIHllczogYmxvY2sgdGhlbSBmb3IgbmV4dCB0YXNrCiAKIAlsZHIJcjIsID1jb25jYW5fb3duZXIKQEAgLTI4Nyw4ICszMTMsMTEgQEAKIAl0ZXEJcjIsIHIzCQkJCUAgbmV4dCB0YXNrIG93bnMgaXQ/CiAJbW92bmUJcGMsIGxyCQkJCUAgbm86IGxlYXZlIENvbmNhbiBkaXNhYmxlZAogCi0xOgllb3IJcjEsIHIxLCAjMwkJCUAgZmxpcCBDb25jYW4gYWNjZXNzCi0JbWNyCXAxNSwgMCwgcjEsIGMxNSwgYzEsIDAKKzE6CUAgZmxpcCBDb25hbiBhY2Nlc3MKKwlYU0MoZW9yCXIxLCByMSwgIzB4MykKKwlYU0MobWNyCXAxNSwgMCwgcjEsIGMxNSwgYzEsIDApCisJUEo0KGVvciByMSwgcjEsICMweGYpCisJUEo0KG1jcglwMTUsIDAsIHIxLCBjMSwgYzAsIDIpCiAKIAltcmMJcDE1LCAwLCByMSwgYzIsIGMwLCAwCiAJc3ViCXBjLCBsciwgcjEsIGxzciAjMzIJCUAgY3B3YWl0IGFuZCByZXR1cm4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9tYWNoaW5lX2tleGVjLmMgYi9hcmNoL2FybS9rZXJuZWwvbWFjaGluZV9rZXhlYy5jCmluZGV4IDNhOGZkNTE0Li4zMGVhZDEzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvbWFjaGluZV9rZXhlYy5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9tYWNoaW5lX2tleGVjLmMKQEAgLTIzLDYgKzIzLDggQEAKIGV4dGVybiB1bnNpZ25lZCBsb25nIGtleGVjX21hY2hfdHlwZTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIGtleGVjX2Jvb3RfYXRhZ3M7CiAKK3N0YXRpYyBhdG9taWNfdCB3YWl0aW5nX2Zvcl9jcmFzaF9pcGk7CisKIC8qCiAgKiBQcm92aWRlIGEgZHVtbXkgY3Jhc2hfbm90ZXMgZGVmaW5pdGlvbiB3aGlsZSBjcmFzaCBkdW1wIGFycml2ZXMgdG8gYXJtLgogICogVGhpcyBwcmV2ZW50cyBicmVha2FnZSBvZiBjcmFzaF9ub3RlcyBhdHRyaWJ1dGUgaW4ga2VybmVsL2tzeXNmcy5jLgpAQCAtMzcsOSArMzksMzcgQEAKIHsKIH0KIAordm9pZCBtYWNoaW5lX2NyYXNoX25vbnBhbmljX2NvcmUodm9pZCAqdW51c2VkKQoreworCXN0cnVjdCBwdF9yZWdzIHJlZ3M7CisKKwljcmFzaF9zZXR1cF9yZWdzKCZyZWdzLCBOVUxMKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiQ1BVICV1IHdpbGwgc3RvcCBkb2luZyBhbnl0aGluZyB1c2VmdWwgc2luY2UgYW5vdGhlciBDUFUgaGFzIGNyYXNoZWRcbiIsCisJICAgICAgIHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJY3Jhc2hfc2F2ZV9jcHUoJnJlZ3MsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJZmx1c2hfY2FjaGVfYWxsKCk7CisKKwlhdG9taWNfZGVjKCZ3YWl0aW5nX2Zvcl9jcmFzaF9pcGkpOworCXdoaWxlICgxKQorCQljcHVfcmVsYXgoKTsKK30KKwogdm9pZCBtYWNoaW5lX2NyYXNoX3NodXRkb3duKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogeworCXVuc2lnbmVkIGxvbmcgbXNlY3M7CisKIAlsb2NhbF9pcnFfZGlzYWJsZSgpOworCisJYXRvbWljX3NldCgmd2FpdGluZ19mb3JfY3Jhc2hfaXBpLCBudW1fb25saW5lX2NwdXMoKSAtIDEpOworCXNtcF9jYWxsX2Z1bmN0aW9uKG1hY2hpbmVfY3Jhc2hfbm9ucGFuaWNfY29yZSwgTlVMTCwgZmFsc2UpOworCW1zZWNzID0gMTAwMDsgLyogV2FpdCBhdCBtb3N0IGEgc2Vjb25kIGZvciB0aGUgb3RoZXIgY3B1cyB0byBzdG9wICovCisJd2hpbGUgKChhdG9taWNfcmVhZCgmd2FpdGluZ19mb3JfY3Jhc2hfaXBpKSA+IDApICYmIG1zZWNzKSB7CisJCW1kZWxheSgxKTsKKwkJbXNlY3MtLTsKKwl9CisJaWYgKGF0b21pY19yZWFkKCZ3YWl0aW5nX2Zvcl9jcmFzaF9pcGkpID4gMCkKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiTm9uLWNyYXNoaW5nIENQVXMgZGlkIG5vdCByZWFjdCB0byBJUElcbiIpOworCiAJY3Jhc2hfc2F2ZV9jcHUocmVncywgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAogCXByaW50ayhLRVJOX0lORk8gIkxvYWRpbmcgY3Jhc2hkdW1wIGtlcm5lbC4uLlxuIik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvbW9kdWxlLmMgYi9hcmNoL2FybS9rZXJuZWwvbW9kdWxlLmMKaW5kZXggZDliZDc4Ni4uMGMxYmI2OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL21vZHVsZS5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9tb2R1bGUuYwpAQCAtNjcsMzUgKzY3LDYgQEAKIAkJCSAgICAgIGNoYXIgKnNlY3N0cmluZ3MsCiAJCQkgICAgICBzdHJ1Y3QgbW9kdWxlICptb2QpCiB7Ci0jaWZkZWYgQ09ORklHX0FSTV9VTldJTkQKLQlFbGZfU2hkciAqcywgKnNlY2hkcnNfZW5kID0gc2VjaGRycyArIGhkci0+ZV9zaG51bTsKLQlzdHJ1Y3QgYXJtX3Vud2luZF9tYXBwaW5nICptYXBzID0gbW9kLT5hcmNoLm1hcDsKLQotCWZvciAocyA9IHNlY2hkcnM7IHMgPCBzZWNoZHJzX2VuZDsgcysrKSB7Ci0JCWNoYXIgY29uc3QgKnNlY25hbWUgPSBzZWNzdHJpbmdzICsgcy0+c2hfbmFtZTsKLQotCQlpZiAoc3RyY21wKCIuQVJNLmV4aWR4LmluaXQudGV4dCIsIHNlY25hbWUpID09IDApCi0JCQltYXBzW0FSTV9TRUNfSU5JVF0udW53X3NlYyA9IHM7Ci0JCWVsc2UgaWYgKHN0cmNtcCgiLkFSTS5leGlkeC5kZXZpbml0LnRleHQiLCBzZWNuYW1lKSA9PSAwKQotCQkJbWFwc1tBUk1fU0VDX0RFVklOSVRdLnVud19zZWMgPSBzOwotCQllbHNlIGlmIChzdHJjbXAoIi5BUk0uZXhpZHgiLCBzZWNuYW1lKSA9PSAwKQotCQkJbWFwc1tBUk1fU0VDX0NPUkVdLnVud19zZWMgPSBzOwotCQllbHNlIGlmIChzdHJjbXAoIi5BUk0uZXhpZHguZXhpdC50ZXh0Iiwgc2VjbmFtZSkgPT0gMCkKLQkJCW1hcHNbQVJNX1NFQ19FWElUXS51bndfc2VjID0gczsKLQkJZWxzZSBpZiAoc3RyY21wKCIuQVJNLmV4aWR4LmRldmV4aXQudGV4dCIsIHNlY25hbWUpID09IDApCi0JCQltYXBzW0FSTV9TRUNfREVWRVhJVF0udW53X3NlYyA9IHM7Ci0JCWVsc2UgaWYgKHN0cmNtcCgiLmluaXQudGV4dCIsIHNlY25hbWUpID09IDApCi0JCQltYXBzW0FSTV9TRUNfSU5JVF0uc2VjX3RleHQgPSBzOwotCQllbHNlIGlmIChzdHJjbXAoIi5kZXZpbml0LnRleHQiLCBzZWNuYW1lKSA9PSAwKQotCQkJbWFwc1tBUk1fU0VDX0RFVklOSVRdLnNlY190ZXh0ID0gczsKLQkJZWxzZSBpZiAoc3RyY21wKCIudGV4dCIsIHNlY25hbWUpID09IDApCi0JCQltYXBzW0FSTV9TRUNfQ09SRV0uc2VjX3RleHQgPSBzOwotCQllbHNlIGlmIChzdHJjbXAoIi5leGl0LnRleHQiLCBzZWNuYW1lKSA9PSAwKQotCQkJbWFwc1tBUk1fU0VDX0VYSVRdLnNlY190ZXh0ID0gczsKLQkJZWxzZSBpZiAoc3RyY21wKCIuZGV2ZXhpdC50ZXh0Iiwgc2VjbmFtZSkgPT0gMCkKLQkJCW1hcHNbQVJNX1NFQ19ERVZFWElUXS5zZWNfdGV4dCA9IHM7Ci0JfQotI2VuZGlmCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMwMCw0MSArMjcxLDY5IEBACiAJcmV0dXJuIC1FTk9FWEVDOwogfQogCitzdHJ1Y3QgbW9kX3Vud2luZF9tYXAgeworCWNvbnN0IEVsZl9TaGRyICp1bndfc2VjOworCWNvbnN0IEVsZl9TaGRyICp0eHRfc2VjOworfTsKKworaW50IG1vZHVsZV9maW5hbGl6ZShjb25zdCBFbGYzMl9FaGRyICpoZHIsIGNvbnN0IEVsZl9TaGRyICpzZWNoZHJzLAorCQkgICAgc3RydWN0IG1vZHVsZSAqbW9kKQorewogI2lmZGVmIENPTkZJR19BUk1fVU5XSU5ECi1zdGF0aWMgdm9pZCByZWdpc3Rlcl91bndpbmRfdGFibGVzKHN0cnVjdCBtb2R1bGUgKm1vZCkKLXsKKwljb25zdCBjaGFyICpzZWNzdHJzID0gKHZvaWQgKiloZHIgKyBzZWNoZHJzW2hkci0+ZV9zaHN0cm5keF0uc2hfb2Zmc2V0OworCWNvbnN0IEVsZl9TaGRyICpzLCAqc2VjaGRyc19lbmQgPSBzZWNoZHJzICsgaGRyLT5lX3NobnVtOworCXN0cnVjdCBtb2RfdW53aW5kX21hcCBtYXBzW0FSTV9TRUNfTUFYXTsKIAlpbnQgaTsKLQlmb3IgKGkgPSAwOyBpIDwgQVJNX1NFQ19NQVg7ICsraSkgewotCQlzdHJ1Y3QgYXJtX3Vud2luZF9tYXBwaW5nICptYXAgPSAmbW9kLT5hcmNoLm1hcFtpXTsKLQkJaWYgKG1hcC0+dW53X3NlYyAmJiBtYXAtPnNlY190ZXh0KQotCQkJbWFwLT51bndpbmQgPSB1bndpbmRfdGFibGVfYWRkKG1hcC0+dW53X3NlYy0+c2hfYWRkciwKLQkJCQkJCSAgICAgICBtYXAtPnVud19zZWMtPnNoX3NpemUsCi0JCQkJCQkgICAgICAgbWFwLT5zZWNfdGV4dC0+c2hfYWRkciwKLQkJCQkJCSAgICAgICBtYXAtPnNlY190ZXh0LT5zaF9zaXplKTsKKworCW1lbXNldChtYXBzLCAwLCBzaXplb2YobWFwcykpOworCisJZm9yIChzID0gc2VjaGRyczsgcyA8IHNlY2hkcnNfZW5kOyBzKyspIHsKKwkJY29uc3QgY2hhciAqc2VjbmFtZSA9IHNlY3N0cnMgKyBzLT5zaF9uYW1lOworCisJCWlmICghKHMtPnNoX2ZsYWdzICYgU0hGX0FMTE9DKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChzdHJjbXAoIi5BUk0uZXhpZHguaW5pdC50ZXh0Iiwgc2VjbmFtZSkgPT0gMCkKKwkJCW1hcHNbQVJNX1NFQ19JTklUXS51bndfc2VjID0gczsKKwkJZWxzZSBpZiAoc3RyY21wKCIuQVJNLmV4aWR4LmRldmluaXQudGV4dCIsIHNlY25hbWUpID09IDApCisJCQltYXBzW0FSTV9TRUNfREVWSU5JVF0udW53X3NlYyA9IHM7CisJCWVsc2UgaWYgKHN0cmNtcCgiLkFSTS5leGlkeCIsIHNlY25hbWUpID09IDApCisJCQltYXBzW0FSTV9TRUNfQ09SRV0udW53X3NlYyA9IHM7CisJCWVsc2UgaWYgKHN0cmNtcCgiLkFSTS5leGlkeC5leGl0LnRleHQiLCBzZWNuYW1lKSA9PSAwKQorCQkJbWFwc1tBUk1fU0VDX0VYSVRdLnVud19zZWMgPSBzOworCQllbHNlIGlmIChzdHJjbXAoIi5BUk0uZXhpZHguZGV2ZXhpdC50ZXh0Iiwgc2VjbmFtZSkgPT0gMCkKKwkJCW1hcHNbQVJNX1NFQ19ERVZFWElUXS51bndfc2VjID0gczsKKwkJZWxzZSBpZiAoc3RyY21wKCIuaW5pdC50ZXh0Iiwgc2VjbmFtZSkgPT0gMCkKKwkJCW1hcHNbQVJNX1NFQ19JTklUXS50eHRfc2VjID0gczsKKwkJZWxzZSBpZiAoc3RyY21wKCIuZGV2aW5pdC50ZXh0Iiwgc2VjbmFtZSkgPT0gMCkKKwkJCW1hcHNbQVJNX1NFQ19ERVZJTklUXS50eHRfc2VjID0gczsKKwkJZWxzZSBpZiAoc3RyY21wKCIudGV4dCIsIHNlY25hbWUpID09IDApCisJCQltYXBzW0FSTV9TRUNfQ09SRV0udHh0X3NlYyA9IHM7CisJCWVsc2UgaWYgKHN0cmNtcCgiLmV4aXQudGV4dCIsIHNlY25hbWUpID09IDApCisJCQltYXBzW0FSTV9TRUNfRVhJVF0udHh0X3NlYyA9IHM7CisJCWVsc2UgaWYgKHN0cmNtcCgiLmRldmV4aXQudGV4dCIsIHNlY25hbWUpID09IDApCisJCQltYXBzW0FSTV9TRUNfREVWRVhJVF0udHh0X3NlYyA9IHM7CiAJfQotfQogCi1zdGF0aWMgdm9pZCB1bnJlZ2lzdGVyX3Vud2luZF90YWJsZXMoc3RydWN0IG1vZHVsZSAqbW9kKQotewotCWludCBpID0gQVJNX1NFQ19NQVg7Ci0Jd2hpbGUgKC0taSA+PSAwKQotCQl1bndpbmRfdGFibGVfZGVsKG1vZC0+YXJjaC5tYXBbaV0udW53aW5kKTsKLX0KLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgcmVnaXN0ZXJfdW53aW5kX3RhYmxlcyhzdHJ1Y3QgbW9kdWxlICptb2QpIHsgfQotc3RhdGljIGlubGluZSB2b2lkIHVucmVnaXN0ZXJfdW53aW5kX3RhYmxlcyhzdHJ1Y3QgbW9kdWxlICptb2QpIHsgfQorCWZvciAoaSA9IDA7IGkgPCBBUk1fU0VDX01BWDsgaSsrKQorCQlpZiAobWFwc1tpXS51bndfc2VjICYmIG1hcHNbaV0udHh0X3NlYykKKwkJCW1vZC0+YXJjaC51bndpbmRbaV0gPQorCQkJCXVud2luZF90YWJsZV9hZGQobWFwc1tpXS51bndfc2VjLT5zaF9hZGRyLAorCQkJCQkgICAgICAgICBtYXBzW2ldLnVud19zZWMtPnNoX3NpemUsCisJCQkJCSAgICAgICAgIG1hcHNbaV0udHh0X3NlYy0+c2hfYWRkciwKKwkJCQkJICAgICAgICAgbWFwc1tpXS50eHRfc2VjLT5zaF9zaXplKTsKICNlbmRpZgotCi1pbnQKLW1vZHVsZV9maW5hbGl6ZShjb25zdCBFbGYzMl9FaGRyICpoZHIsIGNvbnN0IEVsZl9TaGRyICpzZWNoZHJzLAotCQlzdHJ1Y3QgbW9kdWxlICptb2R1bGUpCi17Ci0JcmVnaXN0ZXJfdW53aW5kX3RhYmxlcyhtb2R1bGUpOwogCXJldHVybiAwOwogfQogCiB2b2lkCiBtb2R1bGVfYXJjaF9jbGVhbnVwKHN0cnVjdCBtb2R1bGUgKm1vZCkKIHsKLQl1bnJlZ2lzdGVyX3Vud2luZF90YWJsZXMobW9kKTsKKyNpZmRlZiBDT05GSUdfQVJNX1VOV0lORAorCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSTV9TRUNfTUFYOyBpKyspCisJCWlmIChtb2QtPmFyY2gudW53aW5kW2ldKQorCQkJdW53aW5kX3RhYmxlX2RlbChtb2QtPmFyY2gudW53aW5kW2ldKTsKKyNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3BlcmZfZXZlbnQuYyBiL2FyY2gvYXJtL2tlcm5lbC9wZXJmX2V2ZW50LmMKaW5kZXggMDdhNTAzNS4uNWVmYTI2NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3BlcmZfZXZlbnQuYworKysgYi9hcmNoL2FybS9rZXJuZWwvcGVyZl9ldmVudC5jCkBAIC00LDkgKzQsNyBAQAogICogQVJNIHBlcmZvcm1hbmNlIGNvdW50ZXIgc3VwcG9ydC4KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgcGljb0NoaXAgRGVzaWducywgTHRkLiwgSmFtaWUgSWxlcwotICoKLSAqIEFSTXY3IHN1cHBvcnQ6IEplYW4gUGloZXQgPGpwaWhldEBtdmlzdGEuY29tPgotICogMjAxMCAoYykgTW9udGFWaXN0YSBTb2Z0d2FyZSwgTExDLgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFSTSBMdGQuLCBXaWxsIERlYWNvbiA8d2lsbC5kZWFjb25AYXJtLmNvbT4KICAqCiAgKiBUaGlzIGNvZGUgaXMgYmFzZWQgb24gdGhlIHNwYXJjNjQgcGVyZiBldmVudCBjb2RlLCB3aGljaCBpcyBpbiB0dXJuIGJhc2VkCiAgKiBvbiB0aGUgeDg2IGNvZGUuIENhbGxjaGFpbiBjb2RlIGlzIGJhc2VkIG9uIHRoZSBBUk0gT1Byb2ZpbGUgYmFja3RyYWNlCkBAIC0zNCw3ICszMiw3IEBACiAgKiBIYXJkd2FyZSBsb2NrIHRvIHNlcmlhbGl6ZSBhY2Nlc3NlcyB0byBQTVUgcmVnaXN0ZXJzLiBOZWVkZWQgZm9yIHRoZQogICogcmVhZC9tb2RpZnkvd3JpdGUgc2VxdWVuY2VzLgogICovCi1ERUZJTkVfU1BJTkxPQ0socG11X2xvY2spOworc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0socG11X2xvY2spOwogCiAvKgogICogQVJNdjYgc3VwcG9ydHMgYSBtYXhpbXVtIG9mIDMgZXZlbnRzLCBzdGFydGluZyBmcm9tIGluZGV4IDEuIElmIHdlIGFkZApAQCAtNjcsMzEgKzY1LDI1IEBACiAJICovCiAJdW5zaWduZWQgbG9uZwkJYWN0aXZlX21hc2tbQklUU19UT19MT05HUyhBUk1QTVVfTUFYX0hXRVZFTlRTKV07CiB9OwotREVGSU5FX1BFUl9DUFUoc3RydWN0IGNwdV9od19ldmVudHMsIGNwdV9od19ldmVudHMpOwotCi0vKiBQTVUgbmFtZXMuICovCi1zdGF0aWMgY29uc3QgY2hhciAqYXJtX3BtdV9uYW1lc1tdID0gewotCVtBUk1fUEVSRl9QTVVfSURfWFNDQUxFMV0gPSAieHNjYWxlMSIsCi0JW0FSTV9QRVJGX1BNVV9JRF9YU0NBTEUyXSA9ICJ4c2NhbGUyIiwKLQlbQVJNX1BFUkZfUE1VX0lEX1Y2XQkgID0gInY2IiwKLQlbQVJNX1BFUkZfUE1VX0lEX1Y2TVBdCSAgPSAidjZtcGNvcmUiLAotCVtBUk1fUEVSRl9QTVVfSURfQ0E4XQkgID0gIkFSTXY3IENvcnRleC1BOCIsCi0JW0FSTV9QRVJGX1BNVV9JRF9DQTldCSAgPSAiQVJNdjcgQ29ydGV4LUE5IiwKLX07CitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGNwdV9od19ldmVudHMsIGNwdV9od19ldmVudHMpOwogCiBzdHJ1Y3QgYXJtX3BtdSB7CiAJZW51bSBhcm1fcGVyZl9wbXVfaWRzIGlkOworCWNvbnN0IGNoYXIJKm5hbWU7CiAJaXJxcmV0dXJuX3QJKCpoYW5kbGVfaXJxKShpbnQgaXJxX251bSwgdm9pZCAqZGV2KTsKIAl2b2lkCQkoKmVuYWJsZSkoc3RydWN0IGh3X3BlcmZfZXZlbnQgKmV2dCwgaW50IGlkeCk7CiAJdm9pZAkJKCpkaXNhYmxlKShzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqZXZ0LCBpbnQgaWR4KTsKLQlpbnQJCSgqZXZlbnRfbWFwKShpbnQgZXZ0KTsKLQl1NjQJCSgqcmF3X2V2ZW50KSh1NjQpOwogCWludAkJKCpnZXRfZXZlbnRfaWR4KShzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YywKIAkJCQkJIHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MpOwogCXUzMgkJKCpyZWFkX2NvdW50ZXIpKGludCBpZHgpOwogCXZvaWQJCSgqd3JpdGVfY291bnRlcikoaW50IGlkeCwgdTMyIHZhbCk7CiAJdm9pZAkJKCpzdGFydCkodm9pZCk7CiAJdm9pZAkJKCpzdG9wKSh2b2lkKTsKKwljb25zdCB1bnNpZ25lZAkoKmNhY2hlX21hcClbUEVSRl9DT1VOVF9IV19DQUNIRV9NQVhdCisJCQkJICAgIFtQRVJGX0NPVU5UX0hXX0NBQ0hFX09QX01BWF0KKwkJCQkgICAgW1BFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX01BWF07CisJY29uc3QgdW5zaWduZWQJKCpldmVudF9tYXApW1BFUkZfQ09VTlRfSFdfTUFYXTsKKwl1MzIJCXJhd19ldmVudF9tYXNrOwogCWludAkJbnVtX2V2ZW50czsKIAl1NjQJCW1heF9wZXJpb2Q7CiB9OwpAQCAtMTM2LDEwICsxMjgsNiBAQAogCiAjZGVmaW5lIENBQ0hFX09QX1VOU1VQUE9SVEVECQkweEZGRkYKIAotc3RhdGljIHVuc2lnbmVkIGFybXBtdV9wZXJmX2NhY2hlX21hcFtQRVJGX0NPVU5UX0hXX0NBQ0hFX01BWF0KLQkJCQkgICAgIFtQRVJGX0NPVU5UX0hXX0NBQ0hFX09QX01BWF0KLQkJCQkgICAgIFtQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9NQVhdOwotCiBzdGF0aWMgaW50CiBhcm1wbXVfbWFwX2NhY2hlX2V2ZW50KHU2NCBjb25maWcpCiB7CkBAIC0xNTcsNyArMTQ1LDcgQEAKIAlpZiAoY2FjaGVfcmVzdWx0ID49IFBFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX01BWCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZXQgPSAoaW50KWFybXBtdV9wZXJmX2NhY2hlX21hcFtjYWNoZV90eXBlXVtjYWNoZV9vcF1bY2FjaGVfcmVzdWx0XTsKKwlyZXQgPSAoaW50KSgqYXJtcG11LT5jYWNoZV9tYXApW2NhY2hlX3R5cGVdW2NhY2hlX29wXVtjYWNoZV9yZXN1bHRdOwogCiAJaWYgKHJldCA9PSBDQUNIRV9PUF9VTlNVUFBPUlRFRCkKIAkJcmV0dXJuIC1FTk9FTlQ7CkBAIC0xNjYsNiArMTU0LDE5IEBACiB9CiAKIHN0YXRpYyBpbnQKK2FybXBtdV9tYXBfZXZlbnQodTY0IGNvbmZpZykKK3sKKwlpbnQgbWFwcGluZyA9ICgqYXJtcG11LT5ldmVudF9tYXApW2NvbmZpZ107CisJcmV0dXJuIG1hcHBpbmcgPT0gSFdfT1BfVU5TVVBQT1JURUQgPyAtRU9QTk9UU1VQUCA6IG1hcHBpbmc7Cit9CisKK3N0YXRpYyBpbnQKK2FybXBtdV9tYXBfcmF3X2V2ZW50KHU2NCBjb25maWcpCit7CisJcmV0dXJuIChpbnQpKGNvbmZpZyAmIGFybXBtdS0+cmF3X2V2ZW50X21hc2spOworfQorCitzdGF0aWMgaW50CiBhcm1wbXVfZXZlbnRfc2V0X3BlcmlvZChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsCiAJCQlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLAogCQkJaW50IGlkeCkKQEAgLTQ1OCwxMSArNDU5LDExIEBACiAKIAkvKiBEZWNvZGUgdGhlIGdlbmVyaWMgdHlwZSBpbnRvIGFuIEFSTSBldmVudCBpZGVudGlmaWVyLiAqLwogCWlmIChQRVJGX1RZUEVfSEFSRFdBUkUgPT0gZXZlbnQtPmF0dHIudHlwZSkgewotCQltYXBwaW5nID0gYXJtcG11LT5ldmVudF9tYXAoZXZlbnQtPmF0dHIuY29uZmlnKTsKKwkJbWFwcGluZyA9IGFybXBtdV9tYXBfZXZlbnQoZXZlbnQtPmF0dHIuY29uZmlnKTsKIAl9IGVsc2UgaWYgKFBFUkZfVFlQRV9IV19DQUNIRSA9PSBldmVudC0+YXR0ci50eXBlKSB7CiAJCW1hcHBpbmcgPSBhcm1wbXVfbWFwX2NhY2hlX2V2ZW50KGV2ZW50LT5hdHRyLmNvbmZpZyk7CiAJfSBlbHNlIGlmIChQRVJGX1RZUEVfUkFXID09IGV2ZW50LT5hdHRyLnR5cGUpIHsKLQkJbWFwcGluZyA9IGFybXBtdS0+cmF3X2V2ZW50KGV2ZW50LT5hdHRyLmNvbmZpZyk7CisJCW1hcHBpbmcgPSBhcm1wbXVfbWFwX3Jhd19ldmVudChldmVudC0+YXR0ci5jb25maWcpOwogCX0gZWxzZSB7CiAJCXByX2RlYnVnKCJldmVudCB0eXBlICV4IG5vdCBzdXBwb3J0ZWRcbiIsIGV2ZW50LT5hdHRyLnR5cGUpOwogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CkBAIC02MDMsMjM2NiArNjA0LDEwIEBACiAJLnJlYWQJCT0gYXJtcG11X3JlYWQsCiB9OwogCi0vKgotICogQVJNdjYgUGVyZm9ybWFuY2UgY291bnRlciBoYW5kbGluZyBjb2RlLgotICoKLSAqIEFSTXY2IGhhcyAyIGNvbmZpZ3VyYWJsZSBwZXJmb3JtYW5jZSBjb3VudGVycyBhbmQgYSBzaW5nbGUgY3ljbGUgY291bnRlci4KLSAqIFRoZXkgYWxsIHNoYXJlIGEgc2luZ2xlIHJlc2V0IGJpdCBidXQgY2FuIGJlIHdyaXR0ZW4gdG8gemVybyBzbyB3ZSBjYW4gdXNlCi0gKiB0aGF0IGZvciBhIHJlc2V0LgotICoKLSAqIFRoZSBjb3VudGVycyBjYW4ndCBiZSBpbmRpdmlkdWFsbHkgZW5hYmxlZCBvciBkaXNhYmxlZCBzbyB3aGVuIHdlIHJlbW92ZQotICogb25lIGV2ZW50IGFuZCByZXBsYWNlIGl0IHdpdGggYW5vdGhlciB3ZSBjb3VsZCBnZXQgc3B1cmlvdXMgY291bnRzIGZyb20gdGhlCi0gKiB3cm9uZyBldmVudC4gSG93ZXZlciwgd2UgY2FuIHRha2UgYWR2YW50YWdlIG9mIHRoZSBmYWN0IHRoYXQgdGhlCi0gKiBwZXJmb3JtYW5jZSBjb3VudGVycyBjYW4gZXhwb3J0IGV2ZW50cyB0byB0aGUgZXZlbnQgYnVzLCBhbmQgdGhlIGV2ZW50IGJ1cwotICogaXRzZWxmIGNhbiBiZSBtb25pdG9yZWQuIFRoaXMgcmVxdWlyZXMgdGhhdCB3ZSAqZG9uJ3QqIGV4cG9ydCB0aGUgZXZlbnRzIHRvCi0gKiB0aGUgZXZlbnQgYnVzLiBUaGUgcHJvY2VkdXJlIGZvciBkaXNhYmxpbmcgYSBjb25maWd1cmFibGUgY291bnRlciBpczoKLSAqCS0gY2hhbmdlIHRoZSBjb3VudGVyIHRvIGNvdW50IHRoZSBFVE1FWFRPVVRbMF0gc2lnbmFsICgweDIwKS4gVGhpcwotICoJICBlZmZlY3RpdmVseSBzdG9wcyB0aGUgY291bnRlciBmcm9tIGNvdW50aW5nLgotICoJLSBkaXNhYmxlIHRoZSBjb3VudGVyJ3MgaW50ZXJydXB0IGdlbmVyYXRpb24gKGVhY2ggY291bnRlciBoYXMgaXQncwotICoJICBvd24gaW50ZXJydXB0IGVuYWJsZSBiaXQpLgotICogT25jZSBzdG9wcGVkLCB0aGUgY291bnRlciB2YWx1ZSBjYW4gYmUgd3JpdHRlbiBhcyAwIHRvIHJlc2V0LgotICoKLSAqIFRvIGVuYWJsZSBhIGNvdW50ZXI6Ci0gKgktIGVuYWJsZSB0aGUgY291bnRlcidzIGludGVycnVwdCBnZW5lcmF0aW9uLgotICoJLSBzZXQgdGhlIG5ldyBldmVudCB0eXBlLgotICoKLSAqIE5vdGU6IHRoZSBkZWRpY2F0ZWQgY3ljbGUgY291bnRlciBvbmx5IGNvdW50cyBjeWNsZXMgYW5kIGNhbid0IGJlCi0gKiBlbmFibGVkL2Rpc2FibGVkIGluZGVwZW5kZW50bHkgb2YgdGhlIG90aGVycy4gV2hlbiB3ZSB3YW50IHRvIGRpc2FibGUgdGhlCi0gKiBjeWNsZSBjb3VudGVyLCB3ZSBoYXZlIHRvIGp1c3QgZGlzYWJsZSB0aGUgaW50ZXJydXB0IHJlcG9ydGluZyBhbmQgc3RhcnQKLSAqIGlnbm9yaW5nIHRoYXQgY291bnRlci4gV2hlbiByZS1lbmFibGluZywgd2UgaGF2ZSB0byByZXNldCB0aGUgdmFsdWUgYW5kCi0gKiBlbmFibGUgdGhlIGludGVycnVwdC4KLSAqLwotCi1lbnVtIGFybXY2X3BlcmZfdHlwZXMgewotCUFSTVY2X1BFUkZDVFJfSUNBQ0hFX01JU1MJICAgID0gMHgwLAotCUFSTVY2X1BFUkZDVFJfSUJVRl9TVEFMTAkgICAgPSAweDEsCi0JQVJNVjZfUEVSRkNUUl9EREVQX1NUQUxMCSAgICA9IDB4MiwKLQlBUk1WNl9QRVJGQ1RSX0lUTEJfTUlTUwkJICAgID0gMHgzLAotCUFSTVY2X1BFUkZDVFJfRFRMQl9NSVNTCQkgICAgPSAweDQsCi0JQVJNVjZfUEVSRkNUUl9CUl9FWEVDCQkgICAgPSAweDUsCi0JQVJNVjZfUEVSRkNUUl9CUl9NSVNQUkVESUNUCSAgICA9IDB4NiwKLQlBUk1WNl9QRVJGQ1RSX0lOU1RSX0VYRUMJICAgID0gMHg3LAotCUFSTVY2X1BFUkZDVFJfRENBQ0hFX0hJVAkgICAgPSAweDksCi0JQVJNVjZfUEVSRkNUUl9EQ0FDSEVfQUNDRVNTCSAgICA9IDB4QSwKLQlBUk1WNl9QRVJGQ1RSX0RDQUNIRV9NSVNTCSAgICA9IDB4QiwKLQlBUk1WNl9QRVJGQ1RSX0RDQUNIRV9XQkFDSwkgICAgPSAweEMsCi0JQVJNVjZfUEVSRkNUUl9TV19QQ19DSEFOR0UJICAgID0gMHhELAotCUFSTVY2X1BFUkZDVFJfTUFJTl9UTEJfTUlTUwkgICAgPSAweEYsCi0JQVJNVjZfUEVSRkNUUl9FWFBMX0RfQUNDRVNTCSAgICA9IDB4MTAsCi0JQVJNVjZfUEVSRkNUUl9MU1VfRlVMTF9TVEFMTAkgICAgPSAweDExLAotCUFSTVY2X1BFUkZDVFJfV0JVRl9EUkFJTkVECSAgICA9IDB4MTIsCi0JQVJNVjZfUEVSRkNUUl9DUFVfQ1lDTEVTCSAgICA9IDB4RkYsCi0JQVJNVjZfUEVSRkNUUl9OT1AJCSAgICA9IDB4MjAsCi19OwotCi1lbnVtIGFybXY2X2NvdW50ZXJzIHsKLQlBUk1WNl9DWUNMRV9DT1VOVEVSID0gMSwKLQlBUk1WNl9DT1VOVEVSMCwKLQlBUk1WNl9DT1VOVEVSMSwKLX07Ci0KLS8qCi0gKiBUaGUgaGFyZHdhcmUgZXZlbnRzIHRoYXQgd2Ugc3VwcG9ydC4gV2UgZG8gc3VwcG9ydCBjYWNoZSBvcGVyYXRpb25zIGJ1dAotICogd2UgaGF2ZSBoYXJ2YXJkIGNhY2hlcyBhbmQgbm8gd2F5IHRvIGNvbWJpbmUgaW5zdHJ1Y3Rpb24gYW5kIGRhdGEKLSAqIGFjY2Vzc2VzL21pc3NlcyBpbiBoYXJkd2FyZS4KLSAqLwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGFybXY2X3BlcmZfbWFwW1BFUkZfQ09VTlRfSFdfTUFYXSA9IHsKLQlbUEVSRl9DT1VOVF9IV19DUFVfQ1lDTEVTXQkgICAgPSBBUk1WNl9QRVJGQ1RSX0NQVV9DWUNMRVMsCi0JW1BFUkZfQ09VTlRfSFdfSU5TVFJVQ1RJT05TXQkgICAgPSBBUk1WNl9QRVJGQ1RSX0lOU1RSX0VYRUMsCi0JW1BFUkZfQ09VTlRfSFdfQ0FDSEVfUkVGRVJFTkNFU10gICAgPSBIV19PUF9VTlNVUFBPUlRFRCwKLQlbUEVSRl9DT1VOVF9IV19DQUNIRV9NSVNTRVNdCSAgICA9IEhXX09QX1VOU1VQUE9SVEVELAotCVtQRVJGX0NPVU5UX0hXX0JSQU5DSF9JTlNUUlVDVElPTlNdID0gQVJNVjZfUEVSRkNUUl9CUl9FWEVDLAotCVtQRVJGX0NPVU5UX0hXX0JSQU5DSF9NSVNTRVNdCSAgICA9IEFSTVY2X1BFUkZDVFJfQlJfTUlTUFJFRElDVCwKLQlbUEVSRl9DT1VOVF9IV19CVVNfQ1lDTEVTXQkgICAgPSBIV19PUF9VTlNVUFBPUlRFRCwKLX07Ci0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBhcm12Nl9wZXJmX2NhY2hlX21hcFtQRVJGX0NPVU5UX0hXX0NBQ0hFX01BWF0KLQkJCQkJICBbUEVSRl9DT1VOVF9IV19DQUNIRV9PUF9NQVhdCi0JCQkJCSAgW1BFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX01BWF0gPSB7Ci0JW0MoTDFEKV0gPSB7Ci0JCS8qCi0JCSAqIFRoZSBwZXJmb3JtYW5jZSBjb3VudGVycyBkb24ndCBkaWZmZXJlbnRpYXRlIGJldHdlZW4gcmVhZAotCQkgKiBhbmQgd3JpdGUgYWNjZXNzZXMvbWlzc2VzIHNvIHRoaXMgaXNuJ3Qgc3RyaWN0bHkgY29ycmVjdCwKLQkJICogYnV0IGl0J3MgdGhlIGJlc3Qgd2UgY2FuIGRvLiBXcml0ZXMgYW5kIHJlYWRzIGdldAotCQkgKiBjb21iaW5lZC4KLQkJICovCi0JCVtDKE9QX1JFQUQpXSA9IHsKLQkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IEFSTVY2X1BFUkZDVFJfRENBQ0hFX0FDQ0VTUywKLQkJCVtDKFJFU1VMVF9NSVNTKV0JPSBBUk1WNl9QRVJGQ1RSX0RDQUNIRV9NSVNTLAotCQl9LAotCQlbQyhPUF9XUklURSldID0gewotCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQVJNVjZfUEVSRkNUUl9EQ0FDSEVfQUNDRVNTLAotCQkJW0MoUkVTVUxUX01JU1MpXQk9IEFSTVY2X1BFUkZDVFJfRENBQ0hFX01JU1MsCi0JCX0sCi0JCVtDKE9QX1BSRUZFVENIKV0gPSB7Ci0JCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKLQkJCVtDKFJFU1VMVF9NSVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKLQkJfSwKLQl9LAotCVtDKEwxSSldID0gewotCQlbQyhPUF9SRUFEKV0gPSB7Ci0JCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKLQkJCVtDKFJFU1VMVF9NSVNTKV0JPSBBUk1WNl9QRVJGQ1RSX0lDQUNIRV9NSVNTLAotCQl9LAotCQlbQyhPUF9XUklURSldID0gewotCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCi0JCQlbQyhSRVNVTFRfTUlTUyldCT0gQVJNVjZfUEVSRkNUUl9JQ0FDSEVfTUlTUywKLQkJfSwKLQkJW0MoT1BfUFJFRkVUQ0gpXSA9IHsKLQkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAotCQkJW0MoUkVTVUxUX01JU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAotCQl9LAotCX0sCi0JW0MoTEwpXSA9IHsKLQkJW0MoT1BfUkVBRCldID0gewotCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCi0JCQlbQyhSRVNVTFRfTUlTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCi0JCX0sCi0JCVtDKE9QX1dSSVRFKV0gPSB7Ci0JCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKLQkJCVtDKFJFU1VMVF9NSVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKLQkJfSwKLQkJW0MoT1BfUFJFRkVUQ0gpXSA9IHsKLQkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAotCQkJW0MoUkVTVUxUX01JU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAotCQl9LAotCX0sCi0JW0MoRFRMQildID0gewotCQkvKgotCQkgKiBUaGUgQVJNIHBlcmZvcm1hbmNlIGNvdW50ZXJzIGNhbiBjb3VudCBtaWNybyBEVExCIG1pc3NlcywKLQkJICogbWljcm8gSVRMQiBtaXNzZXMgYW5kIG1haW4gVExCIG1pc3Nlcy4gVGhlcmUgaXNuJ3QgYW4gZXZlbnQKLQkJICogZm9yIFRMQiBtaXNzZXMsIHNvIHVzZSB0aGUgbWljcm8gbWlzc2VzIGhlcmUgYW5kIGlmIHVzZXJzCi0JCSAqIHdhbnQgdGhlIG1haW4gVExCIG1pc3NlcyB0aGV5IGNhbiB1c2UgYSByYXcgY291bnRlci4KLQkJICovCi0JCVtDKE9QX1JFQUQpXSA9IHsKLQkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAotCQkJW0MoUkVTVUxUX01JU1MpXQk9IEFSTVY2X1BFUkZDVFJfRFRMQl9NSVNTLAotCQl9LAotCQlbQyhPUF9XUklURSldID0gewotCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCi0JCQlbQyhSRVNVTFRfTUlTUyldCT0gQVJNVjZfUEVSRkNUUl9EVExCX01JU1MsCi0JCX0sCi0JCVtDKE9QX1BSRUZFVENIKV0gPSB7Ci0JCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKLQkJCVtDKFJFU1VMVF9NSVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKLQkJfSwKLQl9LAotCVtDKElUTEIpXSA9IHsKLQkJW0MoT1BfUkVBRCldID0gewotCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCi0JCQlbQyhSRVNVTFRfTUlTUyldCT0gQVJNVjZfUEVSRkNUUl9JVExCX01JU1MsCi0JCX0sCi0JCVtDKE9QX1dSSVRFKV0gPSB7Ci0JCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKLQkJCVtDKFJFU1VMVF9NSVNTKV0JPSBBUk1WNl9QRVJGQ1RSX0lUTEJfTUlTUywKLQkJfSwKLQkJW0MoT1BfUFJFRkVUQ0gpXSA9IHsKLQkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAotCQkJW0MoUkVTVUxUX01JU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAotCQl9LAotCX0sCi0JW0MoQlBVKV0gPSB7Ci0JCVtDKE9QX1JFQUQpXSA9IHsKLQkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAotCQkJW0MoUkVTVUxUX01JU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAotCQl9LAotCQlbQyhPUF9XUklURSldID0gewotCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCi0JCQlbQyhSRVNVTFRfTUlTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCi0JCX0sCi0JCVtDKE9QX1BSRUZFVENIKV0gPSB7Ci0JCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKLQkJCVtDKFJFU1VMVF9NSVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKLQkJfSwKLQl9LAotfTsKLQotZW51bSBhcm12Nm1wY29yZV9wZXJmX3R5cGVzIHsKLQlBUk1WNk1QQ09SRV9QRVJGQ1RSX0lDQUNIRV9NSVNTCSAgICA9IDB4MCwKLQlBUk1WNk1QQ09SRV9QRVJGQ1RSX0lCVUZfU1RBTEwJICAgID0gMHgxLAotCUFSTVY2TVBDT1JFX1BFUkZDVFJfRERFUF9TVEFMTAkgICAgPSAweDIsCi0JQVJNVjZNUENPUkVfUEVSRkNUUl9JVExCX01JU1MJICAgID0gMHgzLAotCUFSTVY2TVBDT1JFX1BFUkZDVFJfRFRMQl9NSVNTCSAgICA9IDB4NCwKLQlBUk1WNk1QQ09SRV9QRVJGQ1RSX0JSX0VYRUMJICAgID0gMHg1LAotCUFSTVY2TVBDT1JFX1BFUkZDVFJfQlJfTk9UUFJFRElDVCAgID0gMHg2LAotCUFSTVY2TVBDT1JFX1BFUkZDVFJfQlJfTUlTUFJFRElDVCAgID0gMHg3LAotCUFSTVY2TVBDT1JFX1BFUkZDVFJfSU5TVFJfRVhFQwkgICAgPSAweDgsCi0JQVJNVjZNUENPUkVfUEVSRkNUUl9EQ0FDSEVfUkRBQ0NFU1MgPSAweEEsCi0JQVJNVjZNUENPUkVfUEVSRkNUUl9EQ0FDSEVfUkRNSVNTICAgPSAweEIsCi0JQVJNVjZNUENPUkVfUEVSRkNUUl9EQ0FDSEVfV1JBQ0NFU1MgPSAweEMsCi0JQVJNVjZNUENPUkVfUEVSRkNUUl9EQ0FDSEVfV1JNSVNTICAgPSAweEQsCi0JQVJNVjZNUENPUkVfUEVSRkNUUl9EQ0FDSEVfRVZJQ1RJT04gPSAweEUsCi0JQVJNVjZNUENPUkVfUEVSRkNUUl9TV19QQ19DSEFOR0UgICAgPSAweEYsCi0JQVJNVjZNUENPUkVfUEVSRkNUUl9NQUlOX1RMQl9NSVNTICAgPSAweDEwLAotCUFSTVY2TVBDT1JFX1BFUkZDVFJfRVhQTF9NRU1fQUNDRVNTID0gMHgxMSwKLQlBUk1WNk1QQ09SRV9QRVJGQ1RSX0xTVV9GVUxMX1NUQUxMICA9IDB4MTIsCi0JQVJNVjZNUENPUkVfUEVSRkNUUl9XQlVGX0RSQUlORUQgICAgPSAweDEzLAotCUFSTVY2TVBDT1JFX1BFUkZDVFJfQ1BVX0NZQ0xFUwkgICAgPSAweEZGLAotfTsKLQotLyoKLSAqIFRoZSBoYXJkd2FyZSBldmVudHMgdGhhdCB3ZSBzdXBwb3J0LiBXZSBkbyBzdXBwb3J0IGNhY2hlIG9wZXJhdGlvbnMgYnV0Ci0gKiB3ZSBoYXZlIGhhcnZhcmQgY2FjaGVzIGFuZCBubyB3YXkgdG8gY29tYmluZSBpbnN0cnVjdGlvbiBhbmQgZGF0YQotICogYWNjZXNzZXMvbWlzc2VzIGluIGhhcmR3YXJlLgotICovCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgYXJtdjZtcGNvcmVfcGVyZl9tYXBbUEVSRl9DT1VOVF9IV19NQVhdID0gewotCVtQRVJGX0NPVU5UX0hXX0NQVV9DWUNMRVNdCSAgICA9IEFSTVY2TVBDT1JFX1BFUkZDVFJfQ1BVX0NZQ0xFUywKLQlbUEVSRl9DT1VOVF9IV19JTlNUUlVDVElPTlNdCSAgICA9IEFSTVY2TVBDT1JFX1BFUkZDVFJfSU5TVFJfRVhFQywKLQlbUEVSRl9DT1VOVF9IV19DQUNIRV9SRUZFUkVOQ0VTXSAgICA9IEhXX09QX1VOU1VQUE9SVEVELAotCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX01JU1NFU10JICAgID0gSFdfT1BfVU5TVVBQT1JURUQsCi0JW1BFUkZfQ09VTlRfSFdfQlJBTkNIX0lOU1RSVUNUSU9OU10gPSBBUk1WNk1QQ09SRV9QRVJGQ1RSX0JSX0VYRUMsCi0JW1BFUkZfQ09VTlRfSFdfQlJBTkNIX01JU1NFU10JICAgID0gQVJNVjZNUENPUkVfUEVSRkNUUl9CUl9NSVNQUkVESUNULAotCVtQRVJGX0NPVU5UX0hXX0JVU19DWUNMRVNdCSAgICA9IEhXX09QX1VOU1VQUE9SVEVELAotfTsKLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGFybXY2bXBjb3JlX3BlcmZfY2FjaGVfbWFwW1BFUkZfQ09VTlRfSFdfQ0FDSEVfTUFYXQotCQkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9PUF9NQVhdCi0JCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9NQVhdID0gewotCVtDKEwxRCldID0gewotCQlbQyhPUF9SRUFEKV0gPSB7Ci0JCQlbQyhSRVNVTFRfQUNDRVNTKV0gID0KLQkJCQlBUk1WNk1QQ09SRV9QRVJGQ1RSX0RDQUNIRV9SREFDQ0VTUywKLQkJCVtDKFJFU1VMVF9NSVNTKV0gICAgPQotCQkJCUFSTVY2TVBDT1JFX1BFUkZDVFJfRENBQ0hFX1JETUlTUywKLQkJfSwKLQkJW0MoT1BfV1JJVEUpXSA9IHsKLQkJCVtDKFJFU1VMVF9BQ0NFU1MpXSAgPQotCQkJCUFSTVY2TVBDT1JFX1BFUkZDVFJfRENBQ0hFX1dSQUNDRVNTLAotCQkJW0MoUkVTVUxUX01JU1MpXSAgICA9Ci0JCQkJQVJNVjZNUENPUkVfUEVSRkNUUl9EQ0FDSEVfV1JNSVNTLAotCQl9LAotCQlbQyhPUF9QUkVGRVRDSCldID0gewotCQkJW0MoUkVTVUxUX0FDQ0VTUyldICA9IENBQ0hFX09QX1VOU1VQUE9SVEVELAotCQkJW0MoUkVTVUxUX01JU1MpXSAgICA9IENBQ0hFX09QX1VOU1VQUE9SVEVELAotCQl9LAotCX0sCi0JW0MoTDFJKV0gPSB7Ci0JCVtDKE9QX1JFQUQpXSA9IHsKLQkJCVtDKFJFU1VMVF9BQ0NFU1MpXSAgPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKLQkJCVtDKFJFU1VMVF9NSVNTKV0gICAgPSBBUk1WNk1QQ09SRV9QRVJGQ1RSX0lDQUNIRV9NSVNTLAotCQl9LAotCQlbQyhPUF9XUklURSldID0gewotCQkJW0MoUkVTVUxUX0FDQ0VTUyldICA9IENBQ0hFX09QX1VOU1VQUE9SVEVELAotCQkJW0MoUkVTVUxUX01JU1MpXSAgICA9IEFSTVY2TVBDT1JFX1BFUkZDVFJfSUNBQ0hFX01JU1MsCi0JCX0sCi0JCVtDKE9QX1BSRUZFVENIKV0gPSB7Ci0JCQlbQyhSRVNVTFRfQUNDRVNTKV0gID0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCi0JCQlbQyhSRVNVTFRfTUlTUyldICAgID0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCi0JCX0sCi0JfSwKLQlbQyhMTCldID0gewotCQlbQyhPUF9SRUFEKV0gPSB7Ci0JCQlbQyhSRVNVTFRfQUNDRVNTKV0gID0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCi0JCQlbQyhSRVNVTFRfTUlTUyldICAgID0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCi0JCX0sCi0JCVtDKE9QX1dSSVRFKV0gPSB7Ci0JCQlbQyhSRVNVTFRfQUNDRVNTKV0gID0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCi0JCQlbQyhSRVNVTFRfTUlTUyldICAgID0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCi0JCX0sCi0JCVtDKE9QX1BSRUZFVENIKV0gPSB7Ci0JCQlbQyhSRVNVTFRfQUNDRVNTKV0gID0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCi0JCQlbQyhSRVNVTFRfTUlTUyldICAgID0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCi0JCX0sCi0JfSwKLQlbQyhEVExCKV0gPSB7Ci0JCS8qCi0JCSAqIFRoZSBBUk0gcGVyZm9ybWFuY2UgY291bnRlcnMgY2FuIGNvdW50IG1pY3JvIERUTEIgbWlzc2VzLAotCQkgKiBtaWNybyBJVExCIG1pc3NlcyBhbmQgbWFpbiBUTEIgbWlzc2VzLiBUaGVyZSBpc24ndCBhbiBldmVudAotCQkgKiBmb3IgVExCIG1pc3Nlcywgc28gdXNlIHRoZSBtaWNybyBtaXNzZXMgaGVyZSBhbmQgaWYgdXNlcnMKLQkJICogd2FudCB0aGUgbWFpbiBUTEIgbWlzc2VzIHRoZXkgY2FuIHVzZSBhIHJhdyBjb3VudGVyLgotCQkgKi8KLQkJW0MoT1BfUkVBRCldID0gewotCQkJW0MoUkVTVUxUX0FDQ0VTUyldICA9IENBQ0hFX09QX1VOU1VQUE9SVEVELAotCQkJW0MoUkVTVUxUX01JU1MpXSAgICA9IEFSTVY2TVBDT1JFX1BFUkZDVFJfRFRMQl9NSVNTLAotCQl9LAotCQlbQyhPUF9XUklURSldID0gewotCQkJW0MoUkVTVUxUX0FDQ0VTUyldICA9IENBQ0hFX09QX1VOU1VQUE9SVEVELAotCQkJW0MoUkVTVUxUX01JU1MpXSAgICA9IEFSTVY2TVBDT1JFX1BFUkZDVFJfRFRMQl9NSVNTLAotCQl9LAotCQlbQyhPUF9QUkVGRVRDSCldID0gewotCQkJW0MoUkVTVUxUX0FDQ0VTUyldICA9IENBQ0hFX09QX1VOU1VQUE9SVEVELAotCQkJW0MoUkVTVUxUX01JU1MpXSAgICA9IENBQ0hFX09QX1VOU1VQUE9SVEVELAotCQl9LAotCX0sCi0JW0MoSVRMQildID0gewotCQlbQyhPUF9SRUFEKV0gPSB7Ci0JCQlbQyhSRVNVTFRfQUNDRVNTKV0gID0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCi0JCQlbQyhSRVNVTFRfTUlTUyldICAgID0gQVJNVjZNUENPUkVfUEVSRkNUUl9JVExCX01JU1MsCi0JCX0sCi0JCVtDKE9QX1dSSVRFKV0gPSB7Ci0JCQlbQyhSRVNVTFRfQUNDRVNTKV0gID0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCi0JCQlbQyhSRVNVTFRfTUlTUyldICAgID0gQVJNVjZNUENPUkVfUEVSRkNUUl9JVExCX01JU1MsCi0JCX0sCi0JCVtDKE9QX1BSRUZFVENIKV0gPSB7Ci0JCQlbQyhSRVNVTFRfQUNDRVNTKV0gID0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCi0JCQlbQyhSRVNVTFRfTUlTUyldICAgID0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCi0JCX0sCi0JfSwKLQlbQyhCUFUpXSA9IHsKLQkJW0MoT1BfUkVBRCldID0gewotCQkJW0MoUkVTVUxUX0FDQ0VTUyldICA9IENBQ0hFX09QX1VOU1VQUE9SVEVELAotCQkJW0MoUkVTVUxUX01JU1MpXSAgICA9IENBQ0hFX09QX1VOU1VQUE9SVEVELAotCQl9LAotCQlbQyhPUF9XUklURSldID0gewotCQkJW0MoUkVTVUxUX0FDQ0VTUyldICA9IENBQ0hFX09QX1VOU1VQUE9SVEVELAotCQkJW0MoUkVTVUxUX01JU1MpXSAgICA9IENBQ0hFX09QX1VOU1VQUE9SVEVELAotCQl9LAotCQlbQyhPUF9QUkVGRVRDSCldID0gewotCQkJW0MoUkVTVUxUX0FDQ0VTUyldICA9IENBQ0hFX09QX1VOU1VQUE9SVEVELAotCQkJW0MoUkVTVUxUX01JU1MpXSAgICA9IENBQ0hFX09QX1VOU1VQUE9SVEVELAotCQl9LAotCX0sCi19OwotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKLWFybXY2X3BtY3JfcmVhZCh2b2lkKQotewotCXUzMiB2YWw7Ci0JYXNtIHZvbGF0aWxlKCJtcmMgICBwMTUsIDAsICUwLCBjMTUsIGMxMiwgMCIgOiAiPXIiKHZhbCkpOwotCXJldHVybiB2YWw7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotYXJtdjZfcG1jcl93cml0ZSh1bnNpZ25lZCBsb25nIHZhbCkKLXsKLQlhc20gdm9sYXRpbGUoIm1jciAgIHAxNSwgMCwgJTAsIGMxNSwgYzEyLCAwIiA6IDogInIiKHZhbCkpOwotfQotCi0jZGVmaW5lIEFSTVY2X1BNQ1JfRU5BQkxFCQkoMSA8PCAwKQotI2RlZmluZSBBUk1WNl9QTUNSX0NUUjAxX1JFU0VUCQkoMSA8PCAxKQotI2RlZmluZSBBUk1WNl9QTUNSX0NDT1VOVF9SRVNFVAkJKDEgPDwgMikKLSNkZWZpbmUgQVJNVjZfUE1DUl9DQ09VTlRfRElWCQkoMSA8PCAzKQotI2RlZmluZSBBUk1WNl9QTUNSX0NPVU5UMF9JRU4JCSgxIDw8IDQpCi0jZGVmaW5lIEFSTVY2X1BNQ1JfQ09VTlQxX0lFTgkJKDEgPDwgNSkKLSNkZWZpbmUgQVJNVjZfUE1DUl9DQ09VTlRfSUVOCQkoMSA8PCA2KQotI2RlZmluZSBBUk1WNl9QTUNSX0NPVU5UMF9PVkVSRkxPVwkoMSA8PCA4KQotI2RlZmluZSBBUk1WNl9QTUNSX0NPVU5UMV9PVkVSRkxPVwkoMSA8PCA5KQotI2RlZmluZSBBUk1WNl9QTUNSX0NDT1VOVF9PVkVSRkxPVwkoMSA8PCAxMCkKLSNkZWZpbmUgQVJNVjZfUE1DUl9FVlRfQ09VTlQwX1NISUZUCTIwCi0jZGVmaW5lIEFSTVY2X1BNQ1JfRVZUX0NPVU5UMF9NQVNLCSgweEZGIDw8IEFSTVY2X1BNQ1JfRVZUX0NPVU5UMF9TSElGVCkKLSNkZWZpbmUgQVJNVjZfUE1DUl9FVlRfQ09VTlQxX1NISUZUCTEyCi0jZGVmaW5lIEFSTVY2X1BNQ1JfRVZUX0NPVU5UMV9NQVNLCSgweEZGIDw8IEFSTVY2X1BNQ1JfRVZUX0NPVU5UMV9TSElGVCkKLQotI2RlZmluZSBBUk1WNl9QTUNSX09WRVJGTE9XRURfTUFTSyBcCi0JKEFSTVY2X1BNQ1JfQ09VTlQwX09WRVJGTE9XIHwgQVJNVjZfUE1DUl9DT1VOVDFfT1ZFUkZMT1cgfCBcCi0JIEFSTVY2X1BNQ1JfQ0NPVU5UX09WRVJGTE9XKQotCi1zdGF0aWMgaW5saW5lIGludAotYXJtdjZfcG1jcl9oYXNfb3ZlcmZsb3dlZCh1bnNpZ25lZCBsb25nIHBtY3IpCi17Ci0JcmV0dXJuIChwbWNyICYgQVJNVjZfUE1DUl9PVkVSRkxPV0VEX01BU0spOwotfQotCi1zdGF0aWMgaW5saW5lIGludAotYXJtdjZfcG1jcl9jb3VudGVyX2hhc19vdmVyZmxvd2VkKHVuc2lnbmVkIGxvbmcgcG1jciwKLQkJCQkgIGVudW0gYXJtdjZfY291bnRlcnMgY291bnRlcikKLXsKLQlpbnQgcmV0ID0gMDsKLQotCWlmIChBUk1WNl9DWUNMRV9DT1VOVEVSID09IGNvdW50ZXIpCi0JCXJldCA9IHBtY3IgJiBBUk1WNl9QTUNSX0NDT1VOVF9PVkVSRkxPVzsKLQllbHNlIGlmIChBUk1WNl9DT1VOVEVSMCA9PSBjb3VudGVyKQotCQlyZXQgPSBwbWNyICYgQVJNVjZfUE1DUl9DT1VOVDBfT1ZFUkZMT1c7Ci0JZWxzZSBpZiAoQVJNVjZfQ09VTlRFUjEgPT0gY291bnRlcikKLQkJcmV0ID0gcG1jciAmIEFSTVY2X1BNQ1JfQ09VTlQxX09WRVJGTE9XOwotCWVsc2UKLQkJV0FSTl9PTkNFKDEsICJpbnZhbGlkIGNvdW50ZXIgbnVtYmVyICglZClcbiIsIGNvdW50ZXIpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGlubGluZSB1MzIKLWFybXY2cG11X3JlYWRfY291bnRlcihpbnQgY291bnRlcikKLXsKLQl1bnNpZ25lZCBsb25nIHZhbHVlID0gMDsKLQotCWlmIChBUk1WNl9DWUNMRV9DT1VOVEVSID09IGNvdW50ZXIpCi0JCWFzbSB2b2xhdGlsZSgibXJjICAgcDE1LCAwLCAlMCwgYzE1LCBjMTIsIDEiIDogIj1yIih2YWx1ZSkpOwotCWVsc2UgaWYgKEFSTVY2X0NPVU5URVIwID09IGNvdW50ZXIpCi0JCWFzbSB2b2xhdGlsZSgibXJjICAgcDE1LCAwLCAlMCwgYzE1LCBjMTIsIDIiIDogIj1yIih2YWx1ZSkpOwotCWVsc2UgaWYgKEFSTVY2X0NPVU5URVIxID09IGNvdW50ZXIpCi0JCWFzbSB2b2xhdGlsZSgibXJjICAgcDE1LCAwLCAlMCwgYzE1LCBjMTIsIDMiIDogIj1yIih2YWx1ZSkpOwotCWVsc2UKLQkJV0FSTl9PTkNFKDEsICJpbnZhbGlkIGNvdW50ZXIgbnVtYmVyICglZClcbiIsIGNvdW50ZXIpOwotCi0JcmV0dXJuIHZhbHVlOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWFybXY2cG11X3dyaXRlX2NvdW50ZXIoaW50IGNvdW50ZXIsCi0JCSAgICAgICB1MzIgdmFsdWUpCi17Ci0JaWYgKEFSTVY2X0NZQ0xFX0NPVU5URVIgPT0gY291bnRlcikKLQkJYXNtIHZvbGF0aWxlKCJtY3IgICBwMTUsIDAsICUwLCBjMTUsIGMxMiwgMSIgOiA6ICJyIih2YWx1ZSkpOwotCWVsc2UgaWYgKEFSTVY2X0NPVU5URVIwID09IGNvdW50ZXIpCi0JCWFzbSB2b2xhdGlsZSgibWNyICAgcDE1LCAwLCAlMCwgYzE1LCBjMTIsIDIiIDogOiAiciIodmFsdWUpKTsKLQllbHNlIGlmIChBUk1WNl9DT1VOVEVSMSA9PSBjb3VudGVyKQotCQlhc20gdm9sYXRpbGUoIm1jciAgIHAxNSwgMCwgJTAsIGMxNSwgYzEyLCAzIiA6IDogInIiKHZhbHVlKSk7Ci0JZWxzZQotCQlXQVJOX09OQ0UoMSwgImludmFsaWQgY291bnRlciBudW1iZXIgKCVkKVxuIiwgY291bnRlcik7Ci19Ci0KLXZvaWQKLWFybXY2cG11X2VuYWJsZV9ldmVudChzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLAotCQkgICAgICBpbnQgaWR4KQotewotCXVuc2lnbmVkIGxvbmcgdmFsLCBtYXNrLCBldnQsIGZsYWdzOwotCi0JaWYgKEFSTVY2X0NZQ0xFX0NPVU5URVIgPT0gaWR4KSB7Ci0JCW1hc2sJPSAwOwotCQlldnQJPSBBUk1WNl9QTUNSX0NDT1VOVF9JRU47Ci0JfSBlbHNlIGlmIChBUk1WNl9DT1VOVEVSMCA9PSBpZHgpIHsKLQkJbWFzawk9IEFSTVY2X1BNQ1JfRVZUX0NPVU5UMF9NQVNLOwotCQlldnQJPSAoaHdjLT5jb25maWdfYmFzZSA8PCBBUk1WNl9QTUNSX0VWVF9DT1VOVDBfU0hJRlQpIHwKLQkJCSAgQVJNVjZfUE1DUl9DT1VOVDBfSUVOOwotCX0gZWxzZSBpZiAoQVJNVjZfQ09VTlRFUjEgPT0gaWR4KSB7Ci0JCW1hc2sJPSBBUk1WNl9QTUNSX0VWVF9DT1VOVDFfTUFTSzsKLQkJZXZ0CT0gKGh3Yy0+Y29uZmlnX2Jhc2UgPDwgQVJNVjZfUE1DUl9FVlRfQ09VTlQxX1NISUZUKSB8Ci0JCQkgIEFSTVY2X1BNQ1JfQ09VTlQxX0lFTjsKLQl9IGVsc2UgewotCQlXQVJOX09OQ0UoMSwgImludmFsaWQgY291bnRlciBudW1iZXIgKCVkKVxuIiwgaWR4KTsKLQkJcmV0dXJuOwotCX0KLQotCS8qCi0JICogTWFzayBvdXQgdGhlIGN1cnJlbnQgZXZlbnQgYW5kIHNldCB0aGUgY291bnRlciB0byBjb3VudCB0aGUgZXZlbnQKLQkgKiB0aGF0IHdlJ3JlIGludGVyZXN0ZWQgaW4uCi0JICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBtdV9sb2NrLCBmbGFncyk7Ci0JdmFsID0gYXJtdjZfcG1jcl9yZWFkKCk7Ci0JdmFsICY9IH5tYXNrOwotCXZhbCB8PSBldnQ7Ci0JYXJtdjZfcG1jcl93cml0ZSh2YWwpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtdV9sb2NrLCBmbGFncyk7Ci19Ci0KLXN0YXRpYyBpcnFyZXR1cm5fdAotYXJtdjZwbXVfaGFuZGxlX2lycShpbnQgaXJxX251bSwKLQkJICAgIHZvaWQgKmRldikKLXsKLQl1bnNpZ25lZCBsb25nIHBtY3IgPSBhcm12Nl9wbWNyX3JlYWQoKTsKLQlzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSBkYXRhOwotCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjOwotCXN0cnVjdCBwdF9yZWdzICpyZWdzOwotCWludCBpZHg7Ci0KLQlpZiAoIWFybXY2X3BtY3JfaGFzX292ZXJmbG93ZWQocG1jcikpCi0JCXJldHVybiBJUlFfTk9ORTsKLQotCXJlZ3MgPSBnZXRfaXJxX3JlZ3MoKTsKLQotCS8qCi0JICogVGhlIGludGVycnVwdHMgYXJlIGNsZWFyZWQgYnkgd3JpdGluZyB0aGUgb3ZlcmZsb3cgZmxhZ3MgYmFjayB0bwotCSAqIHRoZSBjb250cm9sIHJlZ2lzdGVyLiBBbGwgb2YgdGhlIG90aGVyIGJpdHMgZG9uJ3QgaGF2ZSBhbnkgZWZmZWN0Ci0JICogaWYgdGhleSBhcmUgcmV3cml0dGVuLCBzbyB3cml0ZSB0aGUgd2hvbGUgdmFsdWUgYmFjay4KLQkgKi8KLQlhcm12Nl9wbWNyX3dyaXRlKHBtY3IpOwotCi0JcGVyZl9zYW1wbGVfZGF0YV9pbml0KCZkYXRhLCAwKTsKLQotCWNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKLQlmb3IgKGlkeCA9IDA7IGlkeCA8PSBhcm1wbXUtPm51bV9ldmVudHM7ICsraWR4KSB7Ci0JCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCA9IGNwdWMtPmV2ZW50c1tpZHhdOwotCQlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjOwotCi0JCWlmICghdGVzdF9iaXQoaWR4LCBjcHVjLT5hY3RpdmVfbWFzaykpCi0JCQljb250aW51ZTsKLQotCQkvKgotCQkgKiBXZSBoYXZlIGEgc2luZ2xlIGludGVycnVwdCBmb3IgYWxsIGNvdW50ZXJzLiBDaGVjayB0aGF0Ci0JCSAqIGVhY2ggY291bnRlciBoYXMgb3ZlcmZsb3dlZCBiZWZvcmUgd2UgcHJvY2VzcyBpdC4KLQkJICovCi0JCWlmICghYXJtdjZfcG1jcl9jb3VudGVyX2hhc19vdmVyZmxvd2VkKHBtY3IsIGlkeCkpCi0JCQljb250aW51ZTsKLQotCQlod2MgPSAmZXZlbnQtPmh3OwotCQlhcm1wbXVfZXZlbnRfdXBkYXRlKGV2ZW50LCBod2MsIGlkeCk7Ci0JCWRhdGEucGVyaW9kID0gZXZlbnQtPmh3Lmxhc3RfcGVyaW9kOwotCQlpZiAoIWFybXBtdV9ldmVudF9zZXRfcGVyaW9kKGV2ZW50LCBod2MsIGlkeCkpCi0JCQljb250aW51ZTsKLQotCQlpZiAocGVyZl9ldmVudF9vdmVyZmxvdyhldmVudCwgMCwgJmRhdGEsIHJlZ3MpKQotCQkJYXJtcG11LT5kaXNhYmxlKGh3YywgaWR4KTsKLQl9Ci0KLQkvKgotCSAqIEhhbmRsZSB0aGUgcGVuZGluZyBwZXJmIGV2ZW50cy4KLQkgKgotCSAqIE5vdGU6IHRoaXMgY2FsbCAqbXVzdCogYmUgcnVuIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC4gRm9yCi0JICogcGxhdGZvcm1zIHRoYXQgY2FuIGhhdmUgdGhlIFBNVSBpbnRlcnJ1cHRzIHJhaXNlZCBhcyBhbiBOTUksIHRoaXMKLQkgKiB3aWxsIG5vdCB3b3JrLgotCSAqLwotCWlycV93b3JrX3J1bigpOwotCi0JcmV0dXJuIElSUV9IQU5ETEVEOwotfQotCi1zdGF0aWMgdm9pZAotYXJtdjZwbXVfc3RhcnQodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzLCB2YWw7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcG11X2xvY2ssIGZsYWdzKTsKLQl2YWwgPSBhcm12Nl9wbWNyX3JlYWQoKTsKLQl2YWwgfD0gQVJNVjZfUE1DUl9FTkFCTEU7Ci0JYXJtdjZfcG1jcl93cml0ZSh2YWwpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtdV9sb2NrLCBmbGFncyk7Ci19Ci0KLXZvaWQKLWFybXY2cG11X3N0b3Aodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzLCB2YWw7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcG11X2xvY2ssIGZsYWdzKTsKLQl2YWwgPSBhcm12Nl9wbWNyX3JlYWQoKTsKLQl2YWwgJj0gfkFSTVY2X1BNQ1JfRU5BQkxFOwotCWFybXY2X3BtY3Jfd3JpdGUodmFsKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbXVfbG9jaywgZmxhZ3MpOwotfQotCi1zdGF0aWMgaW5saW5lIGludAotYXJtdjZwbXVfZXZlbnRfbWFwKGludCBjb25maWcpCi17Ci0JaW50IG1hcHBpbmcgPSBhcm12Nl9wZXJmX21hcFtjb25maWddOwotCWlmIChIV19PUF9VTlNVUFBPUlRFRCA9PSBtYXBwaW5nKQotCQltYXBwaW5nID0gLUVPUE5PVFNVUFA7Ci0JcmV0dXJuIG1hcHBpbmc7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50Ci1hcm12Nm1wY29yZV9wbXVfZXZlbnRfbWFwKGludCBjb25maWcpCi17Ci0JaW50IG1hcHBpbmcgPSBhcm12Nm1wY29yZV9wZXJmX21hcFtjb25maWddOwotCWlmIChIV19PUF9VTlNVUFBPUlRFRCA9PSBtYXBwaW5nKQotCQltYXBwaW5nID0gLUVPUE5PVFNVUFA7Ci0JcmV0dXJuIG1hcHBpbmc7Ci19Ci0KLXN0YXRpYyB1NjQKLWFybXY2cG11X3Jhd19ldmVudCh1NjQgY29uZmlnKQotewotCXJldHVybiBjb25maWcgJiAweGZmOwotfQotCi1zdGF0aWMgaW50Ci1hcm12NnBtdV9nZXRfZXZlbnRfaWR4KHN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjLAotCQkgICAgICAgc3RydWN0IGh3X3BlcmZfZXZlbnQgKmV2ZW50KQotewotCS8qIEFsd2F5cyBwbGFjZSBhIGN5Y2xlIGNvdW50ZXIgaW50byB0aGUgY3ljbGUgY291bnRlci4gKi8KLQlpZiAoQVJNVjZfUEVSRkNUUl9DUFVfQ1lDTEVTID09IGV2ZW50LT5jb25maWdfYmFzZSkgewotCQlpZiAodGVzdF9hbmRfc2V0X2JpdChBUk1WNl9DWUNMRV9DT1VOVEVSLCBjcHVjLT51c2VkX21hc2spKQotCQkJcmV0dXJuIC1FQUdBSU47Ci0KLQkJcmV0dXJuIEFSTVY2X0NZQ0xFX0NPVU5URVI7Ci0JfSBlbHNlIHsKLQkJLyoKLQkJICogRm9yIGFueXRoaW5nIG90aGVyIHRoYW4gYSBjeWNsZSBjb3VudGVyLCB0cnkgYW5kIHVzZQotCQkgKiBjb3VudGVyMCBhbmQgY291bnRlcjEuCi0JCSAqLwotCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoQVJNVjZfQ09VTlRFUjEsIGNwdWMtPnVzZWRfbWFzaykpIHsKLQkJCXJldHVybiBBUk1WNl9DT1VOVEVSMTsKLQkJfQotCi0JCWlmICghdGVzdF9hbmRfc2V0X2JpdChBUk1WNl9DT1VOVEVSMCwgY3B1Yy0+dXNlZF9tYXNrKSkgewotCQkJcmV0dXJuIEFSTVY2X0NPVU5URVIwOwotCQl9Ci0KLQkJLyogVGhlIGNvdW50ZXJzIGFyZSBhbGwgaW4gdXNlLiAqLwotCQlyZXR1cm4gLUVBR0FJTjsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi1hcm12NnBtdV9kaXNhYmxlX2V2ZW50KHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsCi0JCSAgICAgICBpbnQgaWR4KQotewotCXVuc2lnbmVkIGxvbmcgdmFsLCBtYXNrLCBldnQsIGZsYWdzOwotCi0JaWYgKEFSTVY2X0NZQ0xFX0NPVU5URVIgPT0gaWR4KSB7Ci0JCW1hc2sJPSBBUk1WNl9QTUNSX0NDT1VOVF9JRU47Ci0JCWV2dAk9IDA7Ci0JfSBlbHNlIGlmIChBUk1WNl9DT1VOVEVSMCA9PSBpZHgpIHsKLQkJbWFzawk9IEFSTVY2X1BNQ1JfQ09VTlQwX0lFTiB8IEFSTVY2X1BNQ1JfRVZUX0NPVU5UMF9NQVNLOwotCQlldnQJPSBBUk1WNl9QRVJGQ1RSX05PUCA8PCBBUk1WNl9QTUNSX0VWVF9DT1VOVDBfU0hJRlQ7Ci0JfSBlbHNlIGlmIChBUk1WNl9DT1VOVEVSMSA9PSBpZHgpIHsKLQkJbWFzawk9IEFSTVY2X1BNQ1JfQ09VTlQxX0lFTiB8IEFSTVY2X1BNQ1JfRVZUX0NPVU5UMV9NQVNLOwotCQlldnQJPSBBUk1WNl9QRVJGQ1RSX05PUCA8PCBBUk1WNl9QTUNSX0VWVF9DT1VOVDFfU0hJRlQ7Ci0JfSBlbHNlIHsKLQkJV0FSTl9PTkNFKDEsICJpbnZhbGlkIGNvdW50ZXIgbnVtYmVyICglZClcbiIsIGlkeCk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKgotCSAqIE1hc2sgb3V0IHRoZSBjdXJyZW50IGV2ZW50IGFuZCBzZXQgdGhlIGNvdW50ZXIgdG8gY291bnQgdGhlIG51bWJlcgotCSAqIG9mIEVUTSBidXMgc2lnbmFsIGFzc2VydGlvbiBjeWNsZXMuIFRoZSBleHRlcm5hbCByZXBvcnRpbmcgc2hvdWxkCi0JICogYmUgZGlzYWJsZWQgYW5kIHNvIHRoaXMgc2hvdWxkIG5ldmVyIGluY3JlbWVudC4KLQkgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcG11X2xvY2ssIGZsYWdzKTsKLQl2YWwgPSBhcm12Nl9wbWNyX3JlYWQoKTsKLQl2YWwgJj0gfm1hc2s7Ci0JdmFsIHw9IGV2dDsKLQlhcm12Nl9wbWNyX3dyaXRlKHZhbCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG11X2xvY2ssIGZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQKLWFybXY2bXBjb3JlX3BtdV9kaXNhYmxlX2V2ZW50KHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsCi0JCQkgICAgICBpbnQgaWR4KQotewotCXVuc2lnbmVkIGxvbmcgdmFsLCBtYXNrLCBmbGFncywgZXZ0ID0gMDsKLQotCWlmIChBUk1WNl9DWUNMRV9DT1VOVEVSID09IGlkeCkgewotCQltYXNrCT0gQVJNVjZfUE1DUl9DQ09VTlRfSUVOOwotCX0gZWxzZSBpZiAoQVJNVjZfQ09VTlRFUjAgPT0gaWR4KSB7Ci0JCW1hc2sJPSBBUk1WNl9QTUNSX0NPVU5UMF9JRU47Ci0JfSBlbHNlIGlmIChBUk1WNl9DT1VOVEVSMSA9PSBpZHgpIHsKLQkJbWFzawk9IEFSTVY2X1BNQ1JfQ09VTlQxX0lFTjsKLQl9IGVsc2UgewotCQlXQVJOX09OQ0UoMSwgImludmFsaWQgY291bnRlciBudW1iZXIgKCVkKVxuIiwgaWR4KTsKLQkJcmV0dXJuOwotCX0KLQotCS8qCi0JICogVW5saWtlIFVQIEFSTXY2LCB3ZSBkb24ndCBoYXZlIGEgd2F5IG9mIHN0b3BwaW5nIHRoZSBjb3VudGVycy4gV2UKLQkgKiBzaW1wbHkgZGlzYWJsZSB0aGUgaW50ZXJydXB0IHJlcG9ydGluZy4KLQkgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcG11X2xvY2ssIGZsYWdzKTsKLQl2YWwgPSBhcm12Nl9wbWNyX3JlYWQoKTsKLQl2YWwgJj0gfm1hc2s7Ci0JdmFsIHw9IGV2dDsKLQlhcm12Nl9wbWNyX3dyaXRlKHZhbCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG11X2xvY2ssIGZsYWdzKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBhcm1fcG11IGFybXY2cG11ID0gewotCS5pZAkJCT0gQVJNX1BFUkZfUE1VX0lEX1Y2LAotCS5oYW5kbGVfaXJxCQk9IGFybXY2cG11X2hhbmRsZV9pcnEsCi0JLmVuYWJsZQkJCT0gYXJtdjZwbXVfZW5hYmxlX2V2ZW50LAotCS5kaXNhYmxlCQk9IGFybXY2cG11X2Rpc2FibGVfZXZlbnQsCi0JLmV2ZW50X21hcAkJPSBhcm12NnBtdV9ldmVudF9tYXAsCi0JLnJhd19ldmVudAkJPSBhcm12NnBtdV9yYXdfZXZlbnQsCi0JLnJlYWRfY291bnRlcgkJPSBhcm12NnBtdV9yZWFkX2NvdW50ZXIsCi0JLndyaXRlX2NvdW50ZXIJCT0gYXJtdjZwbXVfd3JpdGVfY291bnRlciwKLQkuZ2V0X2V2ZW50X2lkeAkJPSBhcm12NnBtdV9nZXRfZXZlbnRfaWR4LAotCS5zdGFydAkJCT0gYXJtdjZwbXVfc3RhcnQsCi0JLnN0b3AJCQk9IGFybXY2cG11X3N0b3AsCi0JLm51bV9ldmVudHMJCT0gMywKLQkubWF4X3BlcmlvZAkJPSAoMUxMVSA8PCAzMikgLSAxLAotfTsKLQotLyoKLSAqIEFSTXY2bXBjb3JlIGlzIGFsbW9zdCBpZGVudGljYWwgdG8gc2luZ2xlIGNvcmUgQVJNdjYgd2l0aCB0aGUgZXhjZXB0aW9uCi0gKiB0aGF0IHNvbWUgb2YgdGhlIGV2ZW50cyBoYXZlIGRpZmZlcmVudCBlbnVtZXJhdGlvbnMgYW5kIHRoYXQgdGhlcmUgaXMgbm8KLSAqICpoYWNrKiB0byBzdG9wIHRoZSBwcm9ncmFtbWFibGUgY291bnRlcnMuIFRvIHN0b3AgdGhlIGNvdW50ZXJzIHdlIHNpbXBseQotICogZGlzYWJsZSB0aGUgaW50ZXJydXB0IHJlcG9ydGluZyBhbmQgdXBkYXRlIHRoZSBldmVudC4gV2hlbiB1bnRocm90dGxpbmcgd2UKLSAqIHJlc2V0IHRoZSBwZXJpb2QgYW5kIGVuYWJsZSB0aGUgaW50ZXJydXB0IHJlcG9ydGluZy4KLSAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBhcm1fcG11IGFybXY2bXBjb3JlX3BtdSA9IHsKLQkuaWQJCQk9IEFSTV9QRVJGX1BNVV9JRF9WNk1QLAotCS5oYW5kbGVfaXJxCQk9IGFybXY2cG11X2hhbmRsZV9pcnEsCi0JLmVuYWJsZQkJCT0gYXJtdjZwbXVfZW5hYmxlX2V2ZW50LAotCS5kaXNhYmxlCQk9IGFybXY2bXBjb3JlX3BtdV9kaXNhYmxlX2V2ZW50LAotCS5ldmVudF9tYXAJCT0gYXJtdjZtcGNvcmVfcG11X2V2ZW50X21hcCwKLQkucmF3X2V2ZW50CQk9IGFybXY2cG11X3Jhd19ldmVudCwKLQkucmVhZF9jb3VudGVyCQk9IGFybXY2cG11X3JlYWRfY291bnRlciwKLQkud3JpdGVfY291bnRlcgkJPSBhcm12NnBtdV93cml0ZV9jb3VudGVyLAotCS5nZXRfZXZlbnRfaWR4CQk9IGFybXY2cG11X2dldF9ldmVudF9pZHgsCi0JLnN0YXJ0CQkJPSBhcm12NnBtdV9zdGFydCwKLQkuc3RvcAkJCT0gYXJtdjZwbXVfc3RvcCwKLQkubnVtX2V2ZW50cwkJPSAzLAotCS5tYXhfcGVyaW9kCQk9ICgxTExVIDw8IDMyKSAtIDEsCi19OwotCi0vKgotICogQVJNdjcgQ29ydGV4LUE4IGFuZCBDb3J0ZXgtQTkgUGVyZm9ybWFuY2UgRXZlbnRzIGhhbmRsaW5nIGNvZGUuCi0gKgotICogQ29waWVkIGZyb20gQVJNdjYgY29kZSwgd2l0aCB0aGUgbG93IGxldmVsIGNvZGUgaW5zcGlyZWQKLSAqICBieSB0aGUgQVJNdjcgT3Byb2ZpbGUgY29kZS4KLSAqCi0gKiBDb3J0ZXgtQTggaGFzIHVwIHRvIDQgY29uZmlndXJhYmxlIHBlcmZvcm1hbmNlIGNvdW50ZXJzIGFuZAotICogIGEgc2luZ2xlIGN5Y2xlIGNvdW50ZXIuCi0gKiBDb3J0ZXgtQTkgaGFzIHVwIHRvIDMxIGNvbmZpZ3VyYWJsZSBwZXJmb3JtYW5jZSBjb3VudGVycyBhbmQKLSAqICBhIHNpbmdsZSBjeWNsZSBjb3VudGVyLgotICoKLSAqIEFsbCBjb3VudGVycyBjYW4gYmUgZW5hYmxlZC9kaXNhYmxlZCBhbmQgSVJRIG1hc2tlZCBzZXBhcmF0ZWx5LiBUaGUgY3ljbGUKLSAqICBjb3VudGVyIGFuZCBhbGwgNCBwZXJmb3JtYW5jZSBjb3VudGVycyB0b2dldGhlciBjYW4gYmUgcmVzZXQgc2VwYXJhdGVseS4KLSAqLwotCi0vKiBDb21tb24gQVJNdjcgZXZlbnQgdHlwZXMgKi8KLWVudW0gYXJtdjdfcGVyZl90eXBlcyB7Ci0JQVJNVjdfUEVSRkNUUl9QTU5DX1NXX0lOQ1IJCT0gMHgwMCwKLQlBUk1WN19QRVJGQ1RSX0lGRVRDSF9NSVNTCQk9IDB4MDEsCi0JQVJNVjdfUEVSRkNUUl9JVExCX01JU1MJCQk9IDB4MDIsCi0JQVJNVjdfUEVSRkNUUl9EQ0FDSEVfUkVGSUxMCQk9IDB4MDMsCi0JQVJNVjdfUEVSRkNUUl9EQ0FDSEVfQUNDRVNTCQk9IDB4MDQsCi0JQVJNVjdfUEVSRkNUUl9EVExCX1JFRklMTAkJPSAweDA1LAotCUFSTVY3X1BFUkZDVFJfRFJFQUQJCQk9IDB4MDYsCi0JQVJNVjdfUEVSRkNUUl9EV1JJVEUJCQk9IDB4MDcsCi0KLQlBUk1WN19QRVJGQ1RSX0VYQ19UQUtFTgkJCT0gMHgwOSwKLQlBUk1WN19QRVJGQ1RSX0VYQ19FWEVDVVRFRAkJPSAweDBBLAotCUFSTVY3X1BFUkZDVFJfQ0lEX1dSSVRFCQkJPSAweDBCLAotCS8qIEFSTVY3X1BFUkZDVFJfUENfV1JJVEUgaXMgZXF1aXZhbGVudCB0byBIV19CUkFOQ0hfSU5TVFJVQ1RJT05TLgotCSAqIEl0IGNvdW50czoKLQkgKiAgLSBhbGwgYnJhbmNoIGluc3RydWN0aW9ucywKLQkgKiAgLSBpbnN0cnVjdGlvbnMgdGhhdCBleHBsaWNpdGx5IHdyaXRlIHRoZSBQQywKLQkgKiAgLSBleGNlcHRpb24gZ2VuZXJhdGluZyBpbnN0cnVjdGlvbnMuCi0JICovCi0JQVJNVjdfUEVSRkNUUl9QQ19XUklURQkJCT0gMHgwQywKLQlBUk1WN19QRVJGQ1RSX1BDX0lNTV9CUkFOQ0gJCT0gMHgwRCwKLQlBUk1WN19QRVJGQ1RSX1VOQUxJR05FRF9BQ0NFU1MJCT0gMHgwRiwKLQlBUk1WN19QRVJGQ1RSX1BDX0JSQU5DSF9NSVNfUFJFRAk9IDB4MTAsCi0JQVJNVjdfUEVSRkNUUl9DTE9DS19DWUNMRVMJCT0gMHgxMSwKLQotCUFSTVY3X1BFUkZDVFJfUENfQlJBTkNIX01JU19VU0VECT0gMHgxMiwKLQotCUFSTVY3X1BFUkZDVFJfQ1BVX0NZQ0xFUwkJPSAweEZGCi19OwotCi0vKiBBUk12NyBDb3J0ZXgtQTggc3BlY2lmaWMgZXZlbnQgdHlwZXMgKi8KLWVudW0gYXJtdjdfYThfcGVyZl90eXBlcyB7Ci0JQVJNVjdfUEVSRkNUUl9JTlNUUl9FWEVDVVRFRAkJPSAweDA4LAotCi0JQVJNVjdfUEVSRkNUUl9QQ19QUk9DX1JFVFVSTgkJPSAweDBFLAotCi0JQVJNVjdfUEVSRkNUUl9XUklURV9CVUZGRVJfRlVMTAkJPSAweDQwLAotCUFSTVY3X1BFUkZDVFJfTDJfU1RPUkVfTUVSR0VECQk9IDB4NDEsCi0JQVJNVjdfUEVSRkNUUl9MMl9TVE9SRV9CVUZGCQk9IDB4NDIsCi0JQVJNVjdfUEVSRkNUUl9MMl9BQ0NFU1MJCQk9IDB4NDMsCi0JQVJNVjdfUEVSRkNUUl9MMl9DQUNIX01JU1MJCT0gMHg0NCwKLQlBUk1WN19QRVJGQ1RSX0FYSV9SRUFEX0NZQ0xFUwkJPSAweDQ1LAotCUFSTVY3X1BFUkZDVFJfQVhJX1dSSVRFX0NZQ0xFUwkJPSAweDQ2LAotCUFSTVY3X1BFUkZDVFJfTUVNT1JZX1JFUExBWQkJPSAweDQ3LAotCUFSTVY3X1BFUkZDVFJfVU5BTElHTkVEX0FDQ0VTU19SRVBMQVkJPSAweDQ4LAotCUFSTVY3X1BFUkZDVFJfTDFfREFUQV9NSVNTCQk9IDB4NDksCi0JQVJNVjdfUEVSRkNUUl9MMV9JTlNUX01JU1MJCT0gMHg0QSwKLQlBUk1WN19QRVJGQ1RSX0wxX0RBVEFfQ09MT1JJTkcJCT0gMHg0QiwKLQlBUk1WN19QRVJGQ1RSX0wxX05FT05fREFUQQkJPSAweDRDLAotCUFSTVY3X1BFUkZDVFJfTDFfTkVPTl9DQUNIX0RBVEEJCT0gMHg0RCwKLQlBUk1WN19QRVJGQ1RSX0wyX05FT04JCQk9IDB4NEUsCi0JQVJNVjdfUEVSRkNUUl9MMl9ORU9OX0hJVAkJPSAweDRGLAotCUFSTVY3X1BFUkZDVFJfTDFfSU5TVAkJCT0gMHg1MCwKLQlBUk1WN19QRVJGQ1RSX1BDX1JFVFVSTl9NSVNfUFJFRAk9IDB4NTEsCi0JQVJNVjdfUEVSRkNUUl9QQ19CUkFOQ0hfRkFJTEVECQk9IDB4NTIsCi0JQVJNVjdfUEVSRkNUUl9QQ19CUkFOQ0hfVEFLRU4JCT0gMHg1MywKLQlBUk1WN19QRVJGQ1RSX1BDX0JSQU5DSF9FWEVDVVRFRAk9IDB4NTQsCi0JQVJNVjdfUEVSRkNUUl9PUF9FWEVDVVRFRAkJPSAweDU1LAotCUFSTVY3X1BFUkZDVFJfQ1lDTEVTX0lOU1RfU1RBTEwJCT0gMHg1NiwKLQlBUk1WN19QRVJGQ1RSX0NZQ0xFU19JTlNUCQk9IDB4NTcsCi0JQVJNVjdfUEVSRkNUUl9DWUNMRVNfTkVPTl9EQVRBX1NUQUxMCT0gMHg1OCwKLQlBUk1WN19QRVJGQ1RSX0NZQ0xFU19ORU9OX0lOU1RfU1RBTEwJPSAweDU5LAotCUFSTVY3X1BFUkZDVFJfTkVPTl9DWUNMRVMJCT0gMHg1QSwKLQotCUFSTVY3X1BFUkZDVFJfUE1VMF9FVkVOVFMJCT0gMHg3MCwKLQlBUk1WN19QRVJGQ1RSX1BNVTFfRVZFTlRTCQk9IDB4NzEsCi0JQVJNVjdfUEVSRkNUUl9QTVVfRVZFTlRTCQk9IDB4NzIsCi19OwotCi0vKiBBUk12NyBDb3J0ZXgtQTkgc3BlY2lmaWMgZXZlbnQgdHlwZXMgKi8KLWVudW0gYXJtdjdfYTlfcGVyZl90eXBlcyB7Ci0JQVJNVjdfUEVSRkNUUl9KQVZBX0hXX0JZVEVDT0RFX0VYRUMJPSAweDQwLAotCUFSTVY3X1BFUkZDVFJfSkFWQV9TV19CWVRFQ09ERV9FWEVDCT0gMHg0MSwKLQlBUk1WN19QRVJGQ1RSX0pBWkVMTEVfQlJBTkNIX0VYRUMJPSAweDQyLAotCi0JQVJNVjdfUEVSRkNUUl9DT0hFUkVOVF9MSU5FX01JU1MJPSAweDUwLAotCUFSTVY3X1BFUkZDVFJfQ09IRVJFTlRfTElORV9ISVQJCT0gMHg1MSwKLQotCUFSTVY3X1BFUkZDVFJfSUNBQ0hFX0RFUF9TVEFMTF9DWUNMRVMJPSAweDYwLAotCUFSTVY3X1BFUkZDVFJfRENBQ0hFX0RFUF9TVEFMTF9DWUNMRVMJPSAweDYxLAotCUFSTVY3X1BFUkZDVFJfVExCX01JU1NfREVQX1NUQUxMX0NZQ0xFUwk9IDB4NjIsCi0JQVJNVjdfUEVSRkNUUl9TVFJFWF9FWEVDVVRFRF9QQVNTRUQJPSAweDYzLAotCUFSTVY3X1BFUkZDVFJfU1RSRVhfRVhFQ1VURURfRkFJTEVECT0gMHg2NCwKLQlBUk1WN19QRVJGQ1RSX0RBVEFfRVZJQ1RJT04JCT0gMHg2NSwKLQlBUk1WN19QRVJGQ1RSX0lTU1VFX1NUQUdFX05PX0lOU1QJPSAweDY2LAotCUFSTVY3X1BFUkZDVFJfSVNTVUVfU1RBR0VfRU1QVFkJCT0gMHg2NywKLQlBUk1WN19QRVJGQ1RSX0lOU1RfT1VUX09GX1JFTkFNRV9TVEFHRQk9IDB4NjgsCi0KLQlBUk1WN19QRVJGQ1RSX1BSRURJQ1RBQkxFX0ZVTkNUX1JFVFVSTlMJPSAweDZFLAotCi0JQVJNVjdfUEVSRkNUUl9NQUlOX1VOSVRfRVhFQ1VURURfSU5TVAk9IDB4NzAsCi0JQVJNVjdfUEVSRkNUUl9TRUNPTkRfVU5JVF9FWEVDVVRFRF9JTlNUCT0gMHg3MSwKLQlBUk1WN19QRVJGQ1RSX0xEX1NUX1VOSVRfRVhFQ1VURURfSU5TVAk9IDB4NzIsCi0JQVJNVjdfUEVSRkNUUl9GUF9FWEVDVVRFRF9JTlNUCQk9IDB4NzMsCi0JQVJNVjdfUEVSRkNUUl9ORU9OX0VYRUNVVEVEX0lOU1QJPSAweDc0LAotCi0JQVJNVjdfUEVSRkNUUl9QTERfRlVMTF9ERVBfU1RBTExfQ1lDTEVTCT0gMHg4MCwKLQlBUk1WN19QRVJGQ1RSX0RBVEFfV1JfREVQX1NUQUxMX0NZQ0xFUwk9IDB4ODEsCi0JQVJNVjdfUEVSRkNUUl9JVExCX01JU1NfREVQX1NUQUxMX0NZQ0xFUwk9IDB4ODIsCi0JQVJNVjdfUEVSRkNUUl9EVExCX01JU1NfREVQX1NUQUxMX0NZQ0xFUwk9IDB4ODMsCi0JQVJNVjdfUEVSRkNUUl9NSUNST19JVExCX01JU1NfREVQX1NUQUxMX0NZQ0xFUwk9IDB4ODQsCi0JQVJNVjdfUEVSRkNUUl9NSUNST19EVExCX01JU1NfREVQX1NUQUxMX0NZQ0xFUyAJPSAweDg1LAotCUFSTVY3X1BFUkZDVFJfRE1CX0RFUF9TVEFMTF9DWUNMRVMJPSAweDg2LAotCi0JQVJNVjdfUEVSRkNUUl9JTlRHUl9DTEtfRU5BQkxFRF9DWUNMRVMJPSAweDhBLAotCUFSTVY3X1BFUkZDVFJfREFUQV9FTkdJTkVfQ0xLX0VOX0NZQ0xFUwk9IDB4OEIsCi0KLQlBUk1WN19QRVJGQ1RSX0lTQl9JTlNUCQkJPSAweDkwLAotCUFSTVY3X1BFUkZDVFJfRFNCX0lOU1QJCQk9IDB4OTEsCi0JQVJNVjdfUEVSRkNUUl9ETUJfSU5TVAkJCT0gMHg5MiwKLQlBUk1WN19QRVJGQ1RSX0VYVF9JTlRFUlJVUFRTCQk9IDB4OTMsCi0KLQlBUk1WN19QRVJGQ1RSX1BMRV9DQUNIRV9MSU5FX1JRU1RfQ09NUExFVEVECT0gMHhBMCwKLQlBUk1WN19QRVJGQ1RSX1BMRV9DQUNIRV9MSU5FX1JRU1RfU0tJUFBFRAk9IDB4QTEsCi0JQVJNVjdfUEVSRkNUUl9QTEVfRklGT19GTFVTSAkJPSAweEEyLAotCUFSTVY3X1BFUkZDVFJfUExFX1JRU1RfQ09NUExFVEVECT0gMHhBMywKLQlBUk1WN19QRVJGQ1RSX1BMRV9GSUZPX09WRVJGTE9XCQk9IDB4QTQsCi0JQVJNVjdfUEVSRkNUUl9QTEVfUlFTVF9QUk9HCQk9IDB4QTUKLX07Ci0KLS8qCi0gKiBDb3J0ZXgtQTggSFcgZXZlbnRzIG1hcHBpbmcKLSAqCi0gKiBUaGUgaGFyZHdhcmUgZXZlbnRzIHRoYXQgd2Ugc3VwcG9ydC4gV2UgZG8gc3VwcG9ydCBjYWNoZSBvcGVyYXRpb25zIGJ1dAotICogd2UgaGF2ZSBoYXJ2YXJkIGNhY2hlcyBhbmQgbm8gd2F5IHRvIGNvbWJpbmUgaW5zdHJ1Y3Rpb24gYW5kIGRhdGEKLSAqIGFjY2Vzc2VzL21pc3NlcyBpbiBoYXJkd2FyZS4KLSAqLwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGFybXY3X2E4X3BlcmZfbWFwW1BFUkZfQ09VTlRfSFdfTUFYXSA9IHsKLQlbUEVSRl9DT1VOVF9IV19DUFVfQ1lDTEVTXQkgICAgPSBBUk1WN19QRVJGQ1RSX0NQVV9DWUNMRVMsCi0JW1BFUkZfQ09VTlRfSFdfSU5TVFJVQ1RJT05TXQkgICAgPSBBUk1WN19QRVJGQ1RSX0lOU1RSX0VYRUNVVEVELAotCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFRkVSRU5DRVNdICAgID0gSFdfT1BfVU5TVVBQT1JURUQsCi0JW1BFUkZfQ09VTlRfSFdfQ0FDSEVfTUlTU0VTXQkgICAgPSBIV19PUF9VTlNVUFBPUlRFRCwKLQlbUEVSRl9DT1VOVF9IV19CUkFOQ0hfSU5TVFJVQ1RJT05TXSA9IEFSTVY3X1BFUkZDVFJfUENfV1JJVEUsCi0JW1BFUkZfQ09VTlRfSFdfQlJBTkNIX01JU1NFU10JICAgID0gQVJNVjdfUEVSRkNUUl9QQ19CUkFOQ0hfTUlTX1BSRUQsCi0JW1BFUkZfQ09VTlRfSFdfQlVTX0NZQ0xFU10JICAgID0gQVJNVjdfUEVSRkNUUl9DTE9DS19DWUNMRVMsCi19OwotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgYXJtdjdfYThfcGVyZl9jYWNoZV9tYXBbUEVSRl9DT1VOVF9IV19DQUNIRV9NQVhdCi0JCQkJCSAgW1BFUkZfQ09VTlRfSFdfQ0FDSEVfT1BfTUFYXQotCQkJCQkgIFtQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9NQVhdID0gewotCVtDKEwxRCldID0gewotCQkvKgotCQkgKiBUaGUgcGVyZm9ybWFuY2UgY291bnRlcnMgZG9uJ3QgZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIHJlYWQKLQkJICogYW5kIHdyaXRlIGFjY2Vzc2VzL21pc3NlcyBzbyB0aGlzIGlzbid0IHN0cmljdGx5IGNvcnJlY3QsCi0JCSAqIGJ1dCBpdCdzIHRoZSBiZXN0IHdlIGNhbiBkby4gV3JpdGVzIGFuZCByZWFkcyBnZXQKLQkJICogY29tYmluZWQuCi0JCSAqLwotCQlbQyhPUF9SRUFEKV0gPSB7Ci0JCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBBUk1WN19QRVJGQ1RSX0RDQUNIRV9BQ0NFU1MsCi0JCQlbQyhSRVNVTFRfTUlTUyldCT0gQVJNVjdfUEVSRkNUUl9EQ0FDSEVfUkVGSUxMLAotCQl9LAotCQlbQyhPUF9XUklURSldID0gewotCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQVJNVjdfUEVSRkNUUl9EQ0FDSEVfQUNDRVNTLAotCQkJW0MoUkVTVUxUX01JU1MpXQk9IEFSTVY3X1BFUkZDVFJfRENBQ0hFX1JFRklMTCwKLQkJfSwKLQkJW0MoT1BfUFJFRkVUQ0gpXSA9IHsKLQkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAotCQkJW0MoUkVTVUxUX01JU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAotCQl9LAotCX0sCi0JW0MoTDFJKV0gPSB7Ci0JCVtDKE9QX1JFQUQpXSA9IHsKLQkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IEFSTVY3X1BFUkZDVFJfTDFfSU5TVCwKLQkJCVtDKFJFU1VMVF9NSVNTKV0JPSBBUk1WN19QRVJGQ1RSX0wxX0lOU1RfTUlTUywKLQkJfSwKLQkJW0MoT1BfV1JJVEUpXSA9IHsKLQkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IEFSTVY3X1BFUkZDVFJfTDFfSU5TVCwKLQkJCVtDKFJFU1VMVF9NSVNTKV0JPSBBUk1WN19QRVJGQ1RSX0wxX0lOU1RfTUlTUywKLQkJfSwKLQkJW0MoT1BfUFJFRkVUQ0gpXSA9IHsKLQkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAotCQkJW0MoUkVTVUxUX01JU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAotCQl9LAotCX0sCi0JW0MoTEwpXSA9IHsKLQkJW0MoT1BfUkVBRCldID0gewotCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQVJNVjdfUEVSRkNUUl9MMl9BQ0NFU1MsCi0JCQlbQyhSRVNVTFRfTUlTUyldCT0gQVJNVjdfUEVSRkNUUl9MMl9DQUNIX01JU1MsCi0JCX0sCi0JCVtDKE9QX1dSSVRFKV0gPSB7Ci0JCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBBUk1WN19QRVJGQ1RSX0wyX0FDQ0VTUywKLQkJCVtDKFJFU1VMVF9NSVNTKV0JPSBBUk1WN19QRVJGQ1RSX0wyX0NBQ0hfTUlTUywKLQkJfSwKLQkJW0MoT1BfUFJFRkVUQ0gpXSA9IHsKLQkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAotCQkJW0MoUkVTVUxUX01JU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAotCQl9LAotCX0sCi0JW0MoRFRMQildID0gewotCQkvKgotCQkgKiBPbmx5IElUTEIgbWlzc2VzIGFuZCBEVExCIHJlZmlsbHMgYXJlIHN1cHBvcnRlZC4KLQkJICogSWYgdXNlcnMgd2FudCB0aGUgRFRMQiByZWZpbGxzIG1pc3NlcyBhIHJhdyBjb3VudGVyCi0JCSAqIG11c3QgYmUgdXNlZC4KLQkJICovCi0JCVtDKE9QX1JFQUQpXSA9IHsKLQkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAotCQkJW0MoUkVTVUxUX01JU1MpXQk9IEFSTVY3X1BFUkZDVFJfRFRMQl9SRUZJTEwsCi0JCX0sCi0JCVtDKE9QX1dSSVRFKV0gPSB7Ci0JCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKLQkJCVtDKFJFU1VMVF9NSVNTKV0JPSBBUk1WN19QRVJGQ1RSX0RUTEJfUkVGSUxMLAotCQl9LAotCQlbQyhPUF9QUkVGRVRDSCldID0gewotCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCi0JCQlbQyhSRVNVTFRfTUlTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCi0JCX0sCi0JfSwKLQlbQyhJVExCKV0gPSB7Ci0JCVtDKE9QX1JFQUQpXSA9IHsKLQkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAotCQkJW0MoUkVTVUxUX01JU1MpXQk9IEFSTVY3X1BFUkZDVFJfSVRMQl9NSVNTLAotCQl9LAotCQlbQyhPUF9XUklURSldID0gewotCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCi0JCQlbQyhSRVNVTFRfTUlTUyldCT0gQVJNVjdfUEVSRkNUUl9JVExCX01JU1MsCi0JCX0sCi0JCVtDKE9QX1BSRUZFVENIKV0gPSB7Ci0JCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKLQkJCVtDKFJFU1VMVF9NSVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKLQkJfSwKLQl9LAotCVtDKEJQVSldID0gewotCQlbQyhPUF9SRUFEKV0gPSB7Ci0JCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBBUk1WN19QRVJGQ1RSX1BDX1dSSVRFLAotCQkJW0MoUkVTVUxUX01JU1MpXQotCQkJCQk9IEFSTVY3X1BFUkZDVFJfUENfQlJBTkNIX01JU19QUkVELAotCQl9LAotCQlbQyhPUF9XUklURSldID0gewotCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQVJNVjdfUEVSRkNUUl9QQ19XUklURSwKLQkJCVtDKFJFU1VMVF9NSVNTKV0KLQkJCQkJPSBBUk1WN19QRVJGQ1RSX1BDX0JSQU5DSF9NSVNfUFJFRCwKLQkJfSwKLQkJW0MoT1BfUFJFRkVUQ0gpXSA9IHsKLQkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAotCQkJW0MoUkVTVUxUX01JU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAotCQl9LAotCX0sCi19OwotCi0vKgotICogQ29ydGV4LUE5IEhXIGV2ZW50cyBtYXBwaW5nCi0gKi8KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBhcm12N19hOV9wZXJmX21hcFtQRVJGX0NPVU5UX0hXX01BWF0gPSB7Ci0JW1BFUkZfQ09VTlRfSFdfQ1BVX0NZQ0xFU10JICAgID0gQVJNVjdfUEVSRkNUUl9DUFVfQ1lDTEVTLAotCVtQRVJGX0NPVU5UX0hXX0lOU1RSVUNUSU9OU10JICAgID0KLQkJCQkJQVJNVjdfUEVSRkNUUl9JTlNUX09VVF9PRl9SRU5BTUVfU1RBR0UsCi0JW1BFUkZfQ09VTlRfSFdfQ0FDSEVfUkVGRVJFTkNFU10gICAgPSBBUk1WN19QRVJGQ1RSX0NPSEVSRU5UX0xJTkVfSElULAotCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX01JU1NFU10JICAgID0gQVJNVjdfUEVSRkNUUl9DT0hFUkVOVF9MSU5FX01JU1MsCi0JW1BFUkZfQ09VTlRfSFdfQlJBTkNIX0lOU1RSVUNUSU9OU10gPSBBUk1WN19QRVJGQ1RSX1BDX1dSSVRFLAotCVtQRVJGX0NPVU5UX0hXX0JSQU5DSF9NSVNTRVNdCSAgICA9IEFSTVY3X1BFUkZDVFJfUENfQlJBTkNIX01JU19QUkVELAotCVtQRVJGX0NPVU5UX0hXX0JVU19DWUNMRVNdCSAgICA9IEFSTVY3X1BFUkZDVFJfQ0xPQ0tfQ1lDTEVTLAotfTsKLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGFybXY3X2E5X3BlcmZfY2FjaGVfbWFwW1BFUkZfQ09VTlRfSFdfQ0FDSEVfTUFYXQotCQkJCQkgIFtQRVJGX0NPVU5UX0hXX0NBQ0hFX09QX01BWF0KLQkJCQkJICBbUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfTUFYXSA9IHsKLQlbQyhMMUQpXSA9IHsKLQkJLyoKLQkJICogVGhlIHBlcmZvcm1hbmNlIGNvdW50ZXJzIGRvbid0IGRpZmZlcmVudGlhdGUgYmV0d2VlbiByZWFkCi0JCSAqIGFuZCB3cml0ZSBhY2Nlc3Nlcy9taXNzZXMgc28gdGhpcyBpc24ndCBzdHJpY3RseSBjb3JyZWN0LAotCQkgKiBidXQgaXQncyB0aGUgYmVzdCB3ZSBjYW4gZG8uIFdyaXRlcyBhbmQgcmVhZHMgZ2V0Ci0JCSAqIGNvbWJpbmVkLgotCQkgKi8KLQkJW0MoT1BfUkVBRCldID0gewotCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQVJNVjdfUEVSRkNUUl9EQ0FDSEVfQUNDRVNTLAotCQkJW0MoUkVTVUxUX01JU1MpXQk9IEFSTVY3X1BFUkZDVFJfRENBQ0hFX1JFRklMTCwKLQkJfSwKLQkJW0MoT1BfV1JJVEUpXSA9IHsKLQkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IEFSTVY3X1BFUkZDVFJfRENBQ0hFX0FDQ0VTUywKLQkJCVtDKFJFU1VMVF9NSVNTKV0JPSBBUk1WN19QRVJGQ1RSX0RDQUNIRV9SRUZJTEwsCi0JCX0sCi0JCVtDKE9QX1BSRUZFVENIKV0gPSB7Ci0JCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKLQkJCVtDKFJFU1VMVF9NSVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKLQkJfSwKLQl9LAotCVtDKEwxSSldID0gewotCQlbQyhPUF9SRUFEKV0gPSB7Ci0JCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKLQkJCVtDKFJFU1VMVF9NSVNTKV0JPSBBUk1WN19QRVJGQ1RSX0lGRVRDSF9NSVNTLAotCQl9LAotCQlbQyhPUF9XUklURSldID0gewotCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCi0JCQlbQyhSRVNVTFRfTUlTUyldCT0gQVJNVjdfUEVSRkNUUl9JRkVUQ0hfTUlTUywKLQkJfSwKLQkJW0MoT1BfUFJFRkVUQ0gpXSA9IHsKLQkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAotCQkJW0MoUkVTVUxUX01JU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAotCQl9LAotCX0sCi0JW0MoTEwpXSA9IHsKLQkJW0MoT1BfUkVBRCldID0gewotCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCi0JCQlbQyhSRVNVTFRfTUlTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCi0JCX0sCi0JCVtDKE9QX1dSSVRFKV0gPSB7Ci0JCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKLQkJCVtDKFJFU1VMVF9NSVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKLQkJfSwKLQkJW0MoT1BfUFJFRkVUQ0gpXSA9IHsKLQkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAotCQkJW0MoUkVTVUxUX01JU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAotCQl9LAotCX0sCi0JW0MoRFRMQildID0gewotCQkvKgotCQkgKiBPbmx5IElUTEIgbWlzc2VzIGFuZCBEVExCIHJlZmlsbHMgYXJlIHN1cHBvcnRlZC4KLQkJICogSWYgdXNlcnMgd2FudCB0aGUgRFRMQiByZWZpbGxzIG1pc3NlcyBhIHJhdyBjb3VudGVyCi0JCSAqIG11c3QgYmUgdXNlZC4KLQkJICovCi0JCVtDKE9QX1JFQUQpXSA9IHsKLQkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAotCQkJW0MoUkVTVUxUX01JU1MpXQk9IEFSTVY3X1BFUkZDVFJfRFRMQl9SRUZJTEwsCi0JCX0sCi0JCVtDKE9QX1dSSVRFKV0gPSB7Ci0JCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKLQkJCVtDKFJFU1VMVF9NSVNTKV0JPSBBUk1WN19QRVJGQ1RSX0RUTEJfUkVGSUxMLAotCQl9LAotCQlbQyhPUF9QUkVGRVRDSCldID0gewotCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCi0JCQlbQyhSRVNVTFRfTUlTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCi0JCX0sCi0JfSwKLQlbQyhJVExCKV0gPSB7Ci0JCVtDKE9QX1JFQUQpXSA9IHsKLQkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAotCQkJW0MoUkVTVUxUX01JU1MpXQk9IEFSTVY3X1BFUkZDVFJfSVRMQl9NSVNTLAotCQl9LAotCQlbQyhPUF9XUklURSldID0gewotCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCi0JCQlbQyhSRVNVTFRfTUlTUyldCT0gQVJNVjdfUEVSRkNUUl9JVExCX01JU1MsCi0JCX0sCi0JCVtDKE9QX1BSRUZFVENIKV0gPSB7Ci0JCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKLQkJCVtDKFJFU1VMVF9NSVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKLQkJfSwKLQl9LAotCVtDKEJQVSldID0gewotCQlbQyhPUF9SRUFEKV0gPSB7Ci0JCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBBUk1WN19QRVJGQ1RSX1BDX1dSSVRFLAotCQkJW0MoUkVTVUxUX01JU1MpXQotCQkJCQk9IEFSTVY3X1BFUkZDVFJfUENfQlJBTkNIX01JU19QUkVELAotCQl9LAotCQlbQyhPUF9XUklURSldID0gewotCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQVJNVjdfUEVSRkNUUl9QQ19XUklURSwKLQkJCVtDKFJFU1VMVF9NSVNTKV0KLQkJCQkJPSBBUk1WN19QRVJGQ1RSX1BDX0JSQU5DSF9NSVNfUFJFRCwKLQkJfSwKLQkJW0MoT1BfUFJFRkVUQ0gpXSA9IHsKLQkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAotCQkJW0MoUkVTVUxUX01JU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAotCQl9LAotCX0sCi19OwotCi0vKgotICogUGVyZiBFdmVudHMgY291bnRlcnMKLSAqLwotZW51bSBhcm12N19jb3VudGVycyB7Ci0JQVJNVjdfQ1lDTEVfQ09VTlRFUiAJCT0gMSwJLyogQ3ljbGUgY291bnRlciAqLwotCUFSTVY3X0NPVU5URVIwCQkJPSAyLAkvKiBGaXJzdCBldmVudCBjb3VudGVyICovCi19OwotCi0vKgotICogVGhlIGN5Y2xlIGNvdW50ZXIgaXMgQVJNVjdfQ1lDTEVfQ09VTlRFUi4KLSAqIFRoZSBmaXJzdCBldmVudCBjb3VudGVyIGlzIEFSTVY3X0NPVU5URVIwLgotICogVGhlIGxhc3QgZXZlbnQgY291bnRlciBpcyAoQVJNVjdfQ09VTlRFUjAgKyBhcm1wbXUtPm51bV9ldmVudHMgLSAxKS4KLSAqLwotI2RlZmluZQlBUk1WN19DT1VOVEVSX0xBU1QJKEFSTVY3X0NPVU5URVIwICsgYXJtcG11LT5udW1fZXZlbnRzIC0gMSkKLQotLyoKLSAqIEFSTXY3IGxvdyBsZXZlbCBQTU5DIGFjY2VzcwotICovCi0KLS8qCi0gKiBQZXItQ1BVIFBNTkM6IGNvbmZpZyByZWcKLSAqLwotI2RlZmluZSBBUk1WN19QTU5DX0UJCSgxIDw8IDApIC8qIEVuYWJsZSBhbGwgY291bnRlcnMgKi8KLSNkZWZpbmUgQVJNVjdfUE1OQ19QCQkoMSA8PCAxKSAvKiBSZXNldCBhbGwgY291bnRlcnMgKi8KLSNkZWZpbmUgQVJNVjdfUE1OQ19DCQkoMSA8PCAyKSAvKiBDeWNsZSBjb3VudGVyIHJlc2V0ICovCi0jZGVmaW5lIEFSTVY3X1BNTkNfRAkJKDEgPDwgMykgLyogQ0NOVCBjb3VudHMgZXZlcnkgNjR0aCBjcHUgY3ljbGUgKi8KLSNkZWZpbmUgQVJNVjdfUE1OQ19YCQkoMSA8PCA0KSAvKiBFeHBvcnQgdG8gRVRNICovCi0jZGVmaW5lIEFSTVY3X1BNTkNfRFAJCSgxIDw8IDUpIC8qIERpc2FibGUgQ0NOVCBpZiBub24taW52YXNpdmUgZGVidWcqLwotI2RlZmluZQlBUk1WN19QTU5DX05fU0hJRlQJMTEJIC8qIE51bWJlciBvZiBjb3VudGVycyBzdXBwb3J0ZWQgKi8KLSNkZWZpbmUJQVJNVjdfUE1OQ19OX01BU0sJMHgxZgotI2RlZmluZQlBUk1WN19QTU5DX01BU0sJCTB4M2YJIC8qIE1hc2sgZm9yIHdyaXRhYmxlIGJpdHMgKi8KLQotLyoKLSAqIEF2YWlsYWJsZSBjb3VudGVycwotICovCi0jZGVmaW5lIEFSTVY3X0NOVDAgCQkwCS8qIEZpcnN0IGV2ZW50IGNvdW50ZXIgKi8KLSNkZWZpbmUgQVJNVjdfQ0NOVCAJCTMxCS8qIEN5Y2xlIGNvdW50ZXIgKi8KLQotLyogUGVyZiBFdmVudCB0byBsb3cgbGV2ZWwgY291bnRlcnMgbWFwcGluZyAqLwotI2RlZmluZSBBUk1WN19FVkVOVF9DTlRfVE9fQ05UeAkoQVJNVjdfQ09VTlRFUjAgLSBBUk1WN19DTlQwKQotCi0vKgotICogQ05URU5TOiBjb3VudGVycyBlbmFibGUgcmVnCi0gKi8KLSNkZWZpbmUgQVJNVjdfQ05URU5TX1AoaWR4KQkoMSA8PCAoaWR4IC0gQVJNVjdfRVZFTlRfQ05UX1RPX0NOVHgpKQotI2RlZmluZSBBUk1WN19DTlRFTlNfQwkJKDEgPDwgQVJNVjdfQ0NOVCkKLQotLyoKLSAqIENOVEVOQzogY291bnRlcnMgZGlzYWJsZSByZWcKLSAqLwotI2RlZmluZSBBUk1WN19DTlRFTkNfUChpZHgpCSgxIDw8IChpZHggLSBBUk1WN19FVkVOVF9DTlRfVE9fQ05UeCkpCi0jZGVmaW5lIEFSTVY3X0NOVEVOQ19DCQkoMSA8PCBBUk1WN19DQ05UKQotCi0vKgotICogSU5URU5TOiBjb3VudGVycyBvdmVyZmxvdyBpbnRlcnJ1cHQgZW5hYmxlIHJlZwotICovCi0jZGVmaW5lIEFSTVY3X0lOVEVOU19QKGlkeCkJKDEgPDwgKGlkeCAtIEFSTVY3X0VWRU5UX0NOVF9UT19DTlR4KSkKLSNkZWZpbmUgQVJNVjdfSU5URU5TX0MJCSgxIDw8IEFSTVY3X0NDTlQpCi0KLS8qCi0gKiBJTlRFTkM6IGNvdW50ZXJzIG92ZXJmbG93IGludGVycnVwdCBkaXNhYmxlIHJlZwotICovCi0jZGVmaW5lIEFSTVY3X0lOVEVOQ19QKGlkeCkJKDEgPDwgKGlkeCAtIEFSTVY3X0VWRU5UX0NOVF9UT19DTlR4KSkKLSNkZWZpbmUgQVJNVjdfSU5URU5DX0MJCSgxIDw8IEFSTVY3X0NDTlQpCi0KLS8qCi0gKiBFVlRTRUw6IEV2ZW50IHNlbGVjdGlvbiByZWcKLSAqLwotI2RlZmluZQlBUk1WN19FVlRTRUxfTUFTSwkweGZmCQkvKiBNYXNrIGZvciB3cml0YWJsZSBiaXRzICovCi0KLS8qCi0gKiBTRUxFQ1Q6IENvdW50ZXIgc2VsZWN0aW9uIHJlZwotICovCi0jZGVmaW5lCUFSTVY3X1NFTEVDVF9NQVNLCTB4MWYJCS8qIE1hc2sgZm9yIHdyaXRhYmxlIGJpdHMgKi8KLQotLyoKLSAqIEZMQUc6IGNvdW50ZXJzIG92ZXJmbG93IGZsYWcgc3RhdHVzIHJlZwotICovCi0jZGVmaW5lIEFSTVY3X0ZMQUdfUChpZHgpCSgxIDw8IChpZHggLSBBUk1WN19FVkVOVF9DTlRfVE9fQ05UeCkpCi0jZGVmaW5lIEFSTVY3X0ZMQUdfQwkJKDEgPDwgQVJNVjdfQ0NOVCkKLSNkZWZpbmUJQVJNVjdfRkxBR19NQVNLCQkweGZmZmZmZmZmCS8qIE1hc2sgZm9yIHdyaXRhYmxlIGJpdHMgKi8KLSNkZWZpbmUJQVJNVjdfT1ZFUkZMT1dFRF9NQVNLCUFSTVY3X0ZMQUdfTUFTSwotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgYXJtdjdfcG1uY19yZWFkKHZvaWQpCi17Ci0JdTMyIHZhbDsKLQlhc20gdm9sYXRpbGUoIm1yYyBwMTUsIDAsICUwLCBjOSwgYzEyLCAwIiA6ICI9ciIodmFsKSk7Ci0JcmV0dXJuIHZhbDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGFybXY3X3BtbmNfd3JpdGUodW5zaWduZWQgbG9uZyB2YWwpCi17Ci0JdmFsICY9IEFSTVY3X1BNTkNfTUFTSzsKLQlhc20gdm9sYXRpbGUoIm1jciBwMTUsIDAsICUwLCBjOSwgYzEyLCAwIiA6IDogInIiKHZhbCkpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBhcm12N19wbW5jX2hhc19vdmVyZmxvd2VkKHVuc2lnbmVkIGxvbmcgcG1uYykKLXsKLQlyZXR1cm4gcG1uYyAmIEFSTVY3X09WRVJGTE9XRURfTUFTSzsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgYXJtdjdfcG1uY19jb3VudGVyX2hhc19vdmVyZmxvd2VkKHVuc2lnbmVkIGxvbmcgcG1uYywKLQkJCQkJZW51bSBhcm12N19jb3VudGVycyBjb3VudGVyKQotewotCWludCByZXQgPSAwOwotCi0JaWYgKGNvdW50ZXIgPT0gQVJNVjdfQ1lDTEVfQ09VTlRFUikKLQkJcmV0ID0gcG1uYyAmIEFSTVY3X0ZMQUdfQzsKLQllbHNlIGlmICgoY291bnRlciA+PSBBUk1WN19DT1VOVEVSMCkgJiYgKGNvdW50ZXIgPD0gQVJNVjdfQ09VTlRFUl9MQVNUKSkKLQkJcmV0ID0gcG1uYyAmIEFSTVY3X0ZMQUdfUChjb3VudGVyKTsKLQllbHNlCi0JCXByX2VycigiQ1BVJXUgY2hlY2tpbmcgd3JvbmcgY291bnRlciAlZCBvdmVyZmxvdyBzdGF0dXNcbiIsCi0JCQlzbXBfcHJvY2Vzc29yX2lkKCksIGNvdW50ZXIpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgYXJtdjdfcG1uY19zZWxlY3RfY291bnRlcih1bnNpZ25lZCBpbnQgaWR4KQotewotCXUzMiB2YWw7Ci0KLQlpZiAoKGlkeCA8IEFSTVY3X0NPVU5URVIwKSB8fCAoaWR4ID4gQVJNVjdfQ09VTlRFUl9MQVNUKSkgewotCQlwcl9lcnIoIkNQVSV1IHNlbGVjdGluZyB3cm9uZyBQTU5DIGNvdW50ZXIiCi0JCQkiICVkXG4iLCBzbXBfcHJvY2Vzc29yX2lkKCksIGlkeCk7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQl2YWwgPSAoaWR4IC0gQVJNVjdfRVZFTlRfQ05UX1RPX0NOVHgpICYgQVJNVjdfU0VMRUNUX01BU0s7Ci0JYXNtIHZvbGF0aWxlKCJtY3IgcDE1LCAwLCAlMCwgYzksIGMxMiwgNSIgOiA6ICJyIiAodmFsKSk7Ci0KLQlyZXR1cm4gaWR4OwotfQotCi1zdGF0aWMgaW5saW5lIHUzMiBhcm12N3BtdV9yZWFkX2NvdW50ZXIoaW50IGlkeCkKLXsKLQl1bnNpZ25lZCBsb25nIHZhbHVlID0gMDsKLQotCWlmIChpZHggPT0gQVJNVjdfQ1lDTEVfQ09VTlRFUikKLQkJYXNtIHZvbGF0aWxlKCJtcmMgcDE1LCAwLCAlMCwgYzksIGMxMywgMCIgOiAiPXIiICh2YWx1ZSkpOwotCWVsc2UgaWYgKChpZHggPj0gQVJNVjdfQ09VTlRFUjApICYmIChpZHggPD0gQVJNVjdfQ09VTlRFUl9MQVNUKSkgewotCQlpZiAoYXJtdjdfcG1uY19zZWxlY3RfY291bnRlcihpZHgpID09IGlkeCkKLQkJCWFzbSB2b2xhdGlsZSgibXJjIHAxNSwgMCwgJTAsIGM5LCBjMTMsIDIiCi0JCQkJICAgICA6ICI9ciIgKHZhbHVlKSk7Ci0JfSBlbHNlCi0JCXByX2VycigiQ1BVJXUgcmVhZGluZyB3cm9uZyBjb3VudGVyICVkXG4iLAotCQkJc21wX3Byb2Nlc3Nvcl9pZCgpLCBpZHgpOwotCi0JcmV0dXJuIHZhbHVlOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYXJtdjdwbXVfd3JpdGVfY291bnRlcihpbnQgaWR4LCB1MzIgdmFsdWUpCi17Ci0JaWYgKGlkeCA9PSBBUk1WN19DWUNMRV9DT1VOVEVSKQotCQlhc20gdm9sYXRpbGUoIm1jciBwMTUsIDAsICUwLCBjOSwgYzEzLCAwIiA6IDogInIiICh2YWx1ZSkpOwotCWVsc2UgaWYgKChpZHggPj0gQVJNVjdfQ09VTlRFUjApICYmIChpZHggPD0gQVJNVjdfQ09VTlRFUl9MQVNUKSkgewotCQlpZiAoYXJtdjdfcG1uY19zZWxlY3RfY291bnRlcihpZHgpID09IGlkeCkKLQkJCWFzbSB2b2xhdGlsZSgibWNyIHAxNSwgMCwgJTAsIGM5LCBjMTMsIDIiCi0JCQkJICAgICA6IDogInIiICh2YWx1ZSkpOwotCX0gZWxzZQotCQlwcl9lcnIoIkNQVSV1IHdyaXRpbmcgd3JvbmcgY291bnRlciAlZFxuIiwKLQkJCXNtcF9wcm9jZXNzb3JfaWQoKSwgaWR4KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGFybXY3X3BtbmNfd3JpdGVfZXZ0c2VsKHVuc2lnbmVkIGludCBpZHgsIHUzMiB2YWwpCi17Ci0JaWYgKGFybXY3X3BtbmNfc2VsZWN0X2NvdW50ZXIoaWR4KSA9PSBpZHgpIHsKLQkJdmFsICY9IEFSTVY3X0VWVFNFTF9NQVNLOwotCQlhc20gdm9sYXRpbGUoIm1jciBwMTUsIDAsICUwLCBjOSwgYzEzLCAxIiA6IDogInIiICh2YWwpKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTMyIGFybXY3X3BtbmNfZW5hYmxlX2NvdW50ZXIodW5zaWduZWQgaW50IGlkeCkKLXsKLQl1MzIgdmFsOwotCi0JaWYgKChpZHggIT0gQVJNVjdfQ1lDTEVfQ09VTlRFUikgJiYKLQkgICAgKChpZHggPCBBUk1WN19DT1VOVEVSMCkgfHwgKGlkeCA+IEFSTVY3X0NPVU5URVJfTEFTVCkpKSB7Ci0JCXByX2VycigiQ1BVJXUgZW5hYmxpbmcgd3JvbmcgUE1OQyBjb3VudGVyIgotCQkJIiAlZFxuIiwgc21wX3Byb2Nlc3Nvcl9pZCgpLCBpZHgpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JaWYgKGlkeCA9PSBBUk1WN19DWUNMRV9DT1VOVEVSKQotCQl2YWwgPSBBUk1WN19DTlRFTlNfQzsKLQllbHNlCi0JCXZhbCA9IEFSTVY3X0NOVEVOU19QKGlkeCk7Ci0KLQlhc20gdm9sYXRpbGUoIm1jciBwMTUsIDAsICUwLCBjOSwgYzEyLCAxIiA6IDogInIiICh2YWwpKTsKLQotCXJldHVybiBpZHg7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTMyIGFybXY3X3BtbmNfZGlzYWJsZV9jb3VudGVyKHVuc2lnbmVkIGludCBpZHgpCi17Ci0JdTMyIHZhbDsKLQotCi0JaWYgKChpZHggIT0gQVJNVjdfQ1lDTEVfQ09VTlRFUikgJiYKLQkgICAgKChpZHggPCBBUk1WN19DT1VOVEVSMCkgfHwgKGlkeCA+IEFSTVY3X0NPVU5URVJfTEFTVCkpKSB7Ci0JCXByX2VycigiQ1BVJXUgZGlzYWJsaW5nIHdyb25nIFBNTkMgY291bnRlciIKLQkJCSIgJWRcbiIsIHNtcF9wcm9jZXNzb3JfaWQoKSwgaWR4KTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCWlmIChpZHggPT0gQVJNVjdfQ1lDTEVfQ09VTlRFUikKLQkJdmFsID0gQVJNVjdfQ05URU5DX0M7Ci0JZWxzZQotCQl2YWwgPSBBUk1WN19DTlRFTkNfUChpZHgpOwotCi0JYXNtIHZvbGF0aWxlKCJtY3IgcDE1LCAwLCAlMCwgYzksIGMxMiwgMiIgOiA6ICJyIiAodmFsKSk7Ci0KLQlyZXR1cm4gaWR4OwotfQotCi1zdGF0aWMgaW5saW5lIHUzMiBhcm12N19wbW5jX2VuYWJsZV9pbnRlbnModW5zaWduZWQgaW50IGlkeCkKLXsKLQl1MzIgdmFsOwotCi0JaWYgKChpZHggIT0gQVJNVjdfQ1lDTEVfQ09VTlRFUikgJiYKLQkgICAgKChpZHggPCBBUk1WN19DT1VOVEVSMCkgfHwgKGlkeCA+IEFSTVY3X0NPVU5URVJfTEFTVCkpKSB7Ci0JCXByX2VycigiQ1BVJXUgZW5hYmxpbmcgd3JvbmcgUE1OQyBjb3VudGVyIgotCQkJIiBpbnRlcnJ1cHQgZW5hYmxlICVkXG4iLCBzbXBfcHJvY2Vzc29yX2lkKCksIGlkeCk7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlpZiAoaWR4ID09IEFSTVY3X0NZQ0xFX0NPVU5URVIpCi0JCXZhbCA9IEFSTVY3X0lOVEVOU19DOwotCWVsc2UKLQkJdmFsID0gQVJNVjdfSU5URU5TX1AoaWR4KTsKLQotCWFzbSB2b2xhdGlsZSgibWNyIHAxNSwgMCwgJTAsIGM5LCBjMTQsIDEiIDogOiAiciIgKHZhbCkpOwotCi0JcmV0dXJuIGlkeDsKLX0KLQotc3RhdGljIGlubGluZSB1MzIgYXJtdjdfcG1uY19kaXNhYmxlX2ludGVucyh1bnNpZ25lZCBpbnQgaWR4KQotewotCXUzMiB2YWw7Ci0KLQlpZiAoKGlkeCAhPSBBUk1WN19DWUNMRV9DT1VOVEVSKSAmJgotCSAgICAoKGlkeCA8IEFSTVY3X0NPVU5URVIwKSB8fCAoaWR4ID4gQVJNVjdfQ09VTlRFUl9MQVNUKSkpIHsKLQkJcHJfZXJyKCJDUFUldSBkaXNhYmxpbmcgd3JvbmcgUE1OQyBjb3VudGVyIgotCQkJIiBpbnRlcnJ1cHQgZW5hYmxlICVkXG4iLCBzbXBfcHJvY2Vzc29yX2lkKCksIGlkeCk7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlpZiAoaWR4ID09IEFSTVY3X0NZQ0xFX0NPVU5URVIpCi0JCXZhbCA9IEFSTVY3X0lOVEVOQ19DOwotCWVsc2UKLQkJdmFsID0gQVJNVjdfSU5URU5DX1AoaWR4KTsKLQotCWFzbSB2b2xhdGlsZSgibWNyIHAxNSwgMCwgJTAsIGM5LCBjMTQsIDIiIDogOiAiciIgKHZhbCkpOwotCi0JcmV0dXJuIGlkeDsKLX0KLQotc3RhdGljIGlubGluZSB1MzIgYXJtdjdfcG1uY19nZXRyZXNldF9mbGFncyh2b2lkKQotewotCXUzMiB2YWw7Ci0KLQkvKiBSZWFkICovCi0JYXNtIHZvbGF0aWxlKCJtcmMgcDE1LCAwLCAlMCwgYzksIGMxMiwgMyIgOiAiPXIiICh2YWwpKTsKLQotCS8qIFdyaXRlIHRvIGNsZWFyIGZsYWdzICovCi0JdmFsICY9IEFSTVY3X0ZMQUdfTUFTSzsKLQlhc20gdm9sYXRpbGUoIm1jciBwMTUsIDAsICUwLCBjOSwgYzEyLCAzIiA6IDogInIiICh2YWwpKTsKLQotCXJldHVybiB2YWw7Ci19Ci0KLSNpZmRlZiBERUJVRwotc3RhdGljIHZvaWQgYXJtdjdfcG1uY19kdW1wX3JlZ3Modm9pZCkKLXsKLQl1MzIgdmFsOwotCXVuc2lnbmVkIGludCBjbnQ7Ci0KLQlwcmludGsoS0VSTl9JTkZPICJQTU5DIHJlZ2lzdGVycyBkdW1wOlxuIik7Ci0KLQlhc20gdm9sYXRpbGUoIm1yYyBwMTUsIDAsICUwLCBjOSwgYzEyLCAwIiA6ICI9ciIgKHZhbCkpOwotCXByaW50ayhLRVJOX0lORk8gIlBNTkMgID0weCUwOHhcbiIsIHZhbCk7Ci0KLQlhc20gdm9sYXRpbGUoIm1yYyBwMTUsIDAsICUwLCBjOSwgYzEyLCAxIiA6ICI9ciIgKHZhbCkpOwotCXByaW50ayhLRVJOX0lORk8gIkNOVEVOUz0weCUwOHhcbiIsIHZhbCk7Ci0KLQlhc20gdm9sYXRpbGUoIm1yYyBwMTUsIDAsICUwLCBjOSwgYzE0LCAxIiA6ICI9ciIgKHZhbCkpOwotCXByaW50ayhLRVJOX0lORk8gIklOVEVOUz0weCUwOHhcbiIsIHZhbCk7Ci0KLQlhc20gdm9sYXRpbGUoIm1yYyBwMTUsIDAsICUwLCBjOSwgYzEyLCAzIiA6ICI9ciIgKHZhbCkpOwotCXByaW50ayhLRVJOX0lORk8gIkZMQUdTID0weCUwOHhcbiIsIHZhbCk7Ci0KLQlhc20gdm9sYXRpbGUoIm1yYyBwMTUsIDAsICUwLCBjOSwgYzEyLCA1IiA6ICI9ciIgKHZhbCkpOwotCXByaW50ayhLRVJOX0lORk8gIlNFTEVDVD0weCUwOHhcbiIsIHZhbCk7Ci0KLQlhc20gdm9sYXRpbGUoIm1yYyBwMTUsIDAsICUwLCBjOSwgYzEzLCAwIiA6ICI9ciIgKHZhbCkpOwotCXByaW50ayhLRVJOX0lORk8gIkNDTlQgID0weCUwOHhcbiIsIHZhbCk7Ci0KLQlmb3IgKGNudCA9IEFSTVY3X0NPVU5URVIwOyBjbnQgPCBBUk1WN19DT1VOVEVSX0xBU1Q7IGNudCsrKSB7Ci0JCWFybXY3X3BtbmNfc2VsZWN0X2NvdW50ZXIoY250KTsKLQkJYXNtIHZvbGF0aWxlKCJtcmMgcDE1LCAwLCAlMCwgYzksIGMxMywgMiIgOiAiPXIiICh2YWwpKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiQ05UWyVkXSBjb3VudCA9MHglMDh4XG4iLAotCQkJY250LUFSTVY3X0VWRU5UX0NOVF9UT19DTlR4LCB2YWwpOwotCQlhc20gdm9sYXRpbGUoIm1yYyBwMTUsIDAsICUwLCBjOSwgYzEzLCAxIiA6ICI9ciIgKHZhbCkpOwotCQlwcmludGsoS0VSTl9JTkZPICJDTlRbJWRdIGV2dHNlbD0weCUwOHhcbiIsCi0JCQljbnQtQVJNVjdfRVZFTlRfQ05UX1RPX0NOVHgsIHZhbCk7Ci0JfQotfQotI2VuZGlmCi0KLXZvaWQgYXJtdjdwbXVfZW5hYmxlX2V2ZW50KHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsIGludCBpZHgpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCS8qCi0JICogRW5hYmxlIGNvdW50ZXIgYW5kIGludGVycnVwdCwgYW5kIHNldCB0aGUgY291bnRlciB0byBjb3VudAotCSAqIHRoZSBldmVudCB0aGF0IHdlJ3JlIGludGVyZXN0ZWQgaW4uCi0JICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBtdV9sb2NrLCBmbGFncyk7Ci0KLQkvKgotCSAqIERpc2FibGUgY291bnRlcgotCSAqLwotCWFybXY3X3BtbmNfZGlzYWJsZV9jb3VudGVyKGlkeCk7Ci0KLQkvKgotCSAqIFNldCBldmVudCAoaWYgZGVzdGluZWQgZm9yIFBNTnggY291bnRlcnMpCi0JICogV2UgZG9uJ3QgbmVlZCB0byBzZXQgdGhlIGV2ZW50IGlmIGl0J3MgYSBjeWNsZSBjb3VudAotCSAqLwotCWlmIChpZHggIT0gQVJNVjdfQ1lDTEVfQ09VTlRFUikKLQkJYXJtdjdfcG1uY193cml0ZV9ldnRzZWwoaWR4LCBod2MtPmNvbmZpZ19iYXNlKTsKLQotCS8qCi0JICogRW5hYmxlIGludGVycnVwdCBmb3IgdGhpcyBjb3VudGVyCi0JICovCi0JYXJtdjdfcG1uY19lbmFibGVfaW50ZW5zKGlkeCk7Ci0KLQkvKgotCSAqIEVuYWJsZSBjb3VudGVyCi0JICovCi0JYXJtdjdfcG1uY19lbmFibGVfY291bnRlcihpZHgpOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG11X2xvY2ssIGZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQgYXJtdjdwbXVfZGlzYWJsZV9ldmVudChzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLCBpbnQgaWR4KQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkvKgotCSAqIERpc2FibGUgY291bnRlciBhbmQgaW50ZXJydXB0Ci0JICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBtdV9sb2NrLCBmbGFncyk7Ci0KLQkvKgotCSAqIERpc2FibGUgY291bnRlcgotCSAqLwotCWFybXY3X3BtbmNfZGlzYWJsZV9jb3VudGVyKGlkeCk7Ci0KLQkvKgotCSAqIERpc2FibGUgaW50ZXJydXB0IGZvciB0aGlzIGNvdW50ZXIKLQkgKi8KLQlhcm12N19wbW5jX2Rpc2FibGVfaW50ZW5zKGlkeCk7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbXVfbG9jaywgZmxhZ3MpOwotfQotCi1zdGF0aWMgaXJxcmV0dXJuX3QgYXJtdjdwbXVfaGFuZGxlX2lycShpbnQgaXJxX251bSwgdm9pZCAqZGV2KQotewotCXVuc2lnbmVkIGxvbmcgcG1uYzsKLQlzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSBkYXRhOwotCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjOwotCXN0cnVjdCBwdF9yZWdzICpyZWdzOwotCWludCBpZHg7Ci0KLQkvKgotCSAqIEdldCBhbmQgcmVzZXQgdGhlIElSUSBmbGFncwotCSAqLwotCXBtbmMgPSBhcm12N19wbW5jX2dldHJlc2V0X2ZsYWdzKCk7Ci0KLQkvKgotCSAqIERpZCBhbiBvdmVyZmxvdyBvY2N1cj8KLQkgKi8KLQlpZiAoIWFybXY3X3BtbmNfaGFzX292ZXJmbG93ZWQocG1uYykpCi0JCXJldHVybiBJUlFfTk9ORTsKLQotCS8qCi0JICogSGFuZGxlIHRoZSBjb3VudGVyKHMpIG92ZXJmbG93KHMpCi0JICovCi0JcmVncyA9IGdldF9pcnFfcmVncygpOwotCi0JcGVyZl9zYW1wbGVfZGF0YV9pbml0KCZkYXRhLCAwKTsKLQotCWNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKLQlmb3IgKGlkeCA9IDA7IGlkeCA8PSBhcm1wbXUtPm51bV9ldmVudHM7ICsraWR4KSB7Ci0JCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCA9IGNwdWMtPmV2ZW50c1tpZHhdOwotCQlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjOwotCi0JCWlmICghdGVzdF9iaXQoaWR4LCBjcHVjLT5hY3RpdmVfbWFzaykpCi0JCQljb250aW51ZTsKLQotCQkvKgotCQkgKiBXZSBoYXZlIGEgc2luZ2xlIGludGVycnVwdCBmb3IgYWxsIGNvdW50ZXJzLiBDaGVjayB0aGF0Ci0JCSAqIGVhY2ggY291bnRlciBoYXMgb3ZlcmZsb3dlZCBiZWZvcmUgd2UgcHJvY2VzcyBpdC4KLQkJICovCi0JCWlmICghYXJtdjdfcG1uY19jb3VudGVyX2hhc19vdmVyZmxvd2VkKHBtbmMsIGlkeCkpCi0JCQljb250aW51ZTsKLQotCQlod2MgPSAmZXZlbnQtPmh3OwotCQlhcm1wbXVfZXZlbnRfdXBkYXRlKGV2ZW50LCBod2MsIGlkeCk7Ci0JCWRhdGEucGVyaW9kID0gZXZlbnQtPmh3Lmxhc3RfcGVyaW9kOwotCQlpZiAoIWFybXBtdV9ldmVudF9zZXRfcGVyaW9kKGV2ZW50LCBod2MsIGlkeCkpCi0JCQljb250aW51ZTsKLQotCQlpZiAocGVyZl9ldmVudF9vdmVyZmxvdyhldmVudCwgMCwgJmRhdGEsIHJlZ3MpKQotCQkJYXJtcG11LT5kaXNhYmxlKGh3YywgaWR4KTsKLQl9Ci0KLQkvKgotCSAqIEhhbmRsZSB0aGUgcGVuZGluZyBwZXJmIGV2ZW50cy4KLQkgKgotCSAqIE5vdGU6IHRoaXMgY2FsbCAqbXVzdCogYmUgcnVuIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC4gRm9yCi0JICogcGxhdGZvcm1zIHRoYXQgY2FuIGhhdmUgdGhlIFBNVSBpbnRlcnJ1cHRzIHJhaXNlZCBhcyBhbiBOTUksIHRoaXMKLQkgKiB3aWxsIG5vdCB3b3JrLgotCSAqLwotCWlycV93b3JrX3J1bigpOwotCi0JcmV0dXJuIElSUV9IQU5ETEVEOwotfQotCi1zdGF0aWMgdm9pZCBhcm12N3BtdV9zdGFydCh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcG11X2xvY2ssIGZsYWdzKTsKLQkvKiBFbmFibGUgYWxsIGNvdW50ZXJzICovCi0JYXJtdjdfcG1uY193cml0ZShhcm12N19wbW5jX3JlYWQoKSB8IEFSTVY3X1BNTkNfRSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG11X2xvY2ssIGZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQgYXJtdjdwbXVfc3RvcCh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcG11X2xvY2ssIGZsYWdzKTsKLQkvKiBEaXNhYmxlIGFsbCBjb3VudGVycyAqLwotCWFybXY3X3BtbmNfd3JpdGUoYXJtdjdfcG1uY19yZWFkKCkgJiB+QVJNVjdfUE1OQ19FKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbXVfbG9jaywgZmxhZ3MpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBhcm12N19hOF9wbXVfZXZlbnRfbWFwKGludCBjb25maWcpCi17Ci0JaW50IG1hcHBpbmcgPSBhcm12N19hOF9wZXJmX21hcFtjb25maWddOwotCWlmIChIV19PUF9VTlNVUFBPUlRFRCA9PSBtYXBwaW5nKQotCQltYXBwaW5nID0gLUVPUE5PVFNVUFA7Ci0JcmV0dXJuIG1hcHBpbmc7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGFybXY3X2E5X3BtdV9ldmVudF9tYXAoaW50IGNvbmZpZykKLXsKLQlpbnQgbWFwcGluZyA9IGFybXY3X2E5X3BlcmZfbWFwW2NvbmZpZ107Ci0JaWYgKEhXX09QX1VOU1VQUE9SVEVEID09IG1hcHBpbmcpCi0JCW1hcHBpbmcgPSAtRU9QTk9UU1VQUDsKLQlyZXR1cm4gbWFwcGluZzsKLX0KLQotc3RhdGljIHU2NCBhcm12N3BtdV9yYXdfZXZlbnQodTY0IGNvbmZpZykKLXsKLQlyZXR1cm4gY29uZmlnICYgMHhmZjsKLX0KLQotc3RhdGljIGludCBhcm12N3BtdV9nZXRfZXZlbnRfaWR4KHN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjLAotCQkJCSAgc3RydWN0IGh3X3BlcmZfZXZlbnQgKmV2ZW50KQotewotCWludCBpZHg7Ci0KLQkvKiBBbHdheXMgcGxhY2UgYSBjeWNsZSBjb3VudGVyIGludG8gdGhlIGN5Y2xlIGNvdW50ZXIuICovCi0JaWYgKGV2ZW50LT5jb25maWdfYmFzZSA9PSBBUk1WN19QRVJGQ1RSX0NQVV9DWUNMRVMpIHsKLQkJaWYgKHRlc3RfYW5kX3NldF9iaXQoQVJNVjdfQ1lDTEVfQ09VTlRFUiwgY3B1Yy0+dXNlZF9tYXNrKSkKLQkJCXJldHVybiAtRUFHQUlOOwotCi0JCXJldHVybiBBUk1WN19DWUNMRV9DT1VOVEVSOwotCX0gZWxzZSB7Ci0JCS8qCi0JCSAqIEZvciBhbnl0aGluZyBvdGhlciB0aGFuIGEgY3ljbGUgY291bnRlciwgdHJ5IGFuZCB1c2UKLQkJICogdGhlIGV2ZW50cyBjb3VudGVycwotCQkgKi8KLQkJZm9yIChpZHggPSBBUk1WN19DT1VOVEVSMDsgaWR4IDw9IGFybXBtdS0+bnVtX2V2ZW50czsgKytpZHgpIHsKLQkJCWlmICghdGVzdF9hbmRfc2V0X2JpdChpZHgsIGNwdWMtPnVzZWRfbWFzaykpCi0JCQkJcmV0dXJuIGlkeDsKLQkJfQotCi0JCS8qIFRoZSBjb3VudGVycyBhcmUgYWxsIGluIHVzZS4gKi8KLQkJcmV0dXJuIC1FQUdBSU47Ci0JfQotfQotCi1zdGF0aWMgc3RydWN0IGFybV9wbXUgYXJtdjdwbXUgPSB7Ci0JLmhhbmRsZV9pcnEJCT0gYXJtdjdwbXVfaGFuZGxlX2lycSwKLQkuZW5hYmxlCQkJPSBhcm12N3BtdV9lbmFibGVfZXZlbnQsCi0JLmRpc2FibGUJCT0gYXJtdjdwbXVfZGlzYWJsZV9ldmVudCwKLQkucmF3X2V2ZW50CQk9IGFybXY3cG11X3Jhd19ldmVudCwKLQkucmVhZF9jb3VudGVyCQk9IGFybXY3cG11X3JlYWRfY291bnRlciwKLQkud3JpdGVfY291bnRlcgkJPSBhcm12N3BtdV93cml0ZV9jb3VudGVyLAotCS5nZXRfZXZlbnRfaWR4CQk9IGFybXY3cG11X2dldF9ldmVudF9pZHgsCi0JLnN0YXJ0CQkJPSBhcm12N3BtdV9zdGFydCwKLQkuc3RvcAkJCT0gYXJtdjdwbXVfc3RvcCwKLQkubWF4X3BlcmlvZAkJPSAoMUxMVSA8PCAzMikgLSAxLAotfTsKLQotc3RhdGljIHUzMiBfX2luaXQgYXJtdjdfcmVzZXRfcmVhZF9wbW5jKHZvaWQpCi17Ci0JdTMyIG5iX2NudDsKLQotCS8qIEluaXRpYWxpemUgJiBSZXNldCBQTU5DOiBDIGFuZCBQIGJpdHMgKi8KLQlhcm12N19wbW5jX3dyaXRlKEFSTVY3X1BNTkNfUCB8IEFSTVY3X1BNTkNfQyk7Ci0KLQkvKiBSZWFkIHRoZSBuYiBvZiBDTlR4IGNvdW50ZXJzIHN1cHBvcnRlZCBmcm9tIFBNTkMgKi8KLQluYl9jbnQgPSAoYXJtdjdfcG1uY19yZWFkKCkgPj4gQVJNVjdfUE1OQ19OX1NISUZUKSAmIEFSTVY3X1BNTkNfTl9NQVNLOwotCi0JLyogQWRkIHRoZSBDUFUgY3ljbGVzIGNvdW50ZXIgYW5kIHJldHVybiAqLwotCXJldHVybiBuYl9jbnQgKyAxOwotfQotCi0vKgotICogQVJNdjUgW3hzY2FsZV0gUGVyZm9ybWFuY2UgY291bnRlciBoYW5kbGluZyBjb2RlLgotICoKLSAqIEJhc2VkIG9uIHhzY2FsZSBPUHJvZmlsZSBjb2RlLgotICoKLSAqIFRoZXJlIGFyZSB0d28gdmFyaWFudHMgb2YgdGhlIHhzY2FsZSBQTVUgdGhhdCB3ZSBzdXBwb3J0OgotICogCS0geHNjYWxlMXBtdTogMiBldmVudCBjb3VudGVycyBhbmQgYSBjeWNsZSBjb3VudGVyCi0gKiAJLSB4c2NhbGUycG11OiA0IGV2ZW50IGNvdW50ZXJzIGFuZCBhIGN5Y2xlIGNvdW50ZXIKLSAqIFRoZSB0d28gdmFyaWFudHMgc2hhcmUgZXZlbnQgZGVmaW5pdGlvbnMsIGJ1dCBoYXZlIGRpZmZlcmVudAotICogUE1VIHN0cnVjdHVyZXMuCi0gKi8KLQotZW51bSB4c2NhbGVfcGVyZl90eXBlcyB7Ci0JWFNDQUxFX1BFUkZDVFJfSUNBQ0hFX01JU1MJCT0gMHgwMCwKLQlYU0NBTEVfUEVSRkNUUl9JQ0FDSEVfTk9fREVMSVZFUgk9IDB4MDEsCi0JWFNDQUxFX1BFUkZDVFJfREFUQV9TVEFMTAkJPSAweDAyLAotCVhTQ0FMRV9QRVJGQ1RSX0lUTEJfTUlTUwkJPSAweDAzLAotCVhTQ0FMRV9QRVJGQ1RSX0RUTEJfTUlTUwkJPSAweDA0LAotCVhTQ0FMRV9QRVJGQ1RSX0JSQU5DSAkJCT0gMHgwNSwKLQlYU0NBTEVfUEVSRkNUUl9CUkFOQ0hfTUlTUwkJPSAweDA2LAotCVhTQ0FMRV9QRVJGQ1RSX0lOU1RSVUNUSU9OCQk9IDB4MDcsCi0JWFNDQUxFX1BFUkZDVFJfRENBQ0hFX0ZVTExfU1RBTEwJPSAweDA4LAotCVhTQ0FMRV9QRVJGQ1RSX0RDQUNIRV9GVUxMX1NUQUxMX0NPTlRJRwk9IDB4MDksCi0JWFNDQUxFX1BFUkZDVFJfRENBQ0hFX0FDQ0VTUwkJPSAweDBBLAotCVhTQ0FMRV9QRVJGQ1RSX0RDQUNIRV9NSVNTCQk9IDB4MEIsCi0JWFNDQUxFX1BFUkZDVFJfRENBQ0hFX1dSSVRFX0JBQ0sJPSAweDBDLAotCVhTQ0FMRV9QRVJGQ1RSX1BDX0NIQU5HRUQJCT0gMHgwRCwKLQlYU0NBTEVfUEVSRkNUUl9CQ1VfUkVRVUVTVAkJPSAweDEwLAotCVhTQ0FMRV9QRVJGQ1RSX0JDVV9GVUxMCQkJPSAweDExLAotCVhTQ0FMRV9QRVJGQ1RSX0JDVV9EUkFJTgkJPSAweDEyLAotCVhTQ0FMRV9QRVJGQ1RSX0JDVV9FQ0NfTk9fRUxPRwkJPSAweDE0LAotCVhTQ0FMRV9QRVJGQ1RSX0JDVV8xX0JJVF9FUlIJCT0gMHgxNSwKLQlYU0NBTEVfUEVSRkNUUl9STVcJCQk9IDB4MTYsCi0JLyogWFNDQUxFX1BFUkZDVFJfQ0NOVCBpcyBub3QgaGFyZHdhcmUgZGVmaW5lZCAqLwotCVhTQ0FMRV9QRVJGQ1RSX0NDTlQJCQk9IDB4RkUsCi0JWFNDQUxFX1BFUkZDVFJfVU5VU0VECQkJPSAweEZGLAotfTsKLQotZW51bSB4c2NhbGVfY291bnRlcnMgewotCVhTQ0FMRV9DWUNMRV9DT1VOVEVSCT0gMSwKLQlYU0NBTEVfQ09VTlRFUjAsCi0JWFNDQUxFX0NPVU5URVIxLAotCVhTQ0FMRV9DT1VOVEVSMiwKLQlYU0NBTEVfQ09VTlRFUjMsCi19OwotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgeHNjYWxlX3BlcmZfbWFwW1BFUkZfQ09VTlRfSFdfTUFYXSA9IHsKLQlbUEVSRl9DT1VOVF9IV19DUFVfQ1lDTEVTXQkgICAgPSBYU0NBTEVfUEVSRkNUUl9DQ05ULAotCVtQRVJGX0NPVU5UX0hXX0lOU1RSVUNUSU9OU10JICAgID0gWFNDQUxFX1BFUkZDVFJfSU5TVFJVQ1RJT04sCi0JW1BFUkZfQ09VTlRfSFdfQ0FDSEVfUkVGRVJFTkNFU10gICAgPSBIV19PUF9VTlNVUFBPUlRFRCwKLQlbUEVSRl9DT1VOVF9IV19DQUNIRV9NSVNTRVNdCSAgICA9IEhXX09QX1VOU1VQUE9SVEVELAotCVtQRVJGX0NPVU5UX0hXX0JSQU5DSF9JTlNUUlVDVElPTlNdID0gWFNDQUxFX1BFUkZDVFJfQlJBTkNILAotCVtQRVJGX0NPVU5UX0hXX0JSQU5DSF9NSVNTRVNdCSAgICA9IFhTQ0FMRV9QRVJGQ1RSX0JSQU5DSF9NSVNTLAotCVtQRVJGX0NPVU5UX0hXX0JVU19DWUNMRVNdCSAgICA9IEhXX09QX1VOU1VQUE9SVEVELAotfTsKLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHhzY2FsZV9wZXJmX2NhY2hlX21hcFtQRVJGX0NPVU5UX0hXX0NBQ0hFX01BWF0KLQkJCQkJICAgW1BFUkZfQ09VTlRfSFdfQ0FDSEVfT1BfTUFYXQotCQkJCQkgICBbUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfTUFYXSA9IHsKLQlbQyhMMUQpXSA9IHsKLQkJW0MoT1BfUkVBRCldID0gewotCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gWFNDQUxFX1BFUkZDVFJfRENBQ0hFX0FDQ0VTUywKLQkJCVtDKFJFU1VMVF9NSVNTKV0JPSBYU0NBTEVfUEVSRkNUUl9EQ0FDSEVfTUlTUywKLQkJfSwKLQkJW0MoT1BfV1JJVEUpXSA9IHsKLQkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IFhTQ0FMRV9QRVJGQ1RSX0RDQUNIRV9BQ0NFU1MsCi0JCQlbQyhSRVNVTFRfTUlTUyldCT0gWFNDQUxFX1BFUkZDVFJfRENBQ0hFX01JU1MsCi0JCX0sCi0JCVtDKE9QX1BSRUZFVENIKV0gPSB7Ci0JCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKLQkJCVtDKFJFU1VMVF9NSVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKLQkJfSwKLQl9LAotCVtDKEwxSSldID0gewotCQlbQyhPUF9SRUFEKV0gPSB7Ci0JCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKLQkJCVtDKFJFU1VMVF9NSVNTKV0JPSBYU0NBTEVfUEVSRkNUUl9JQ0FDSEVfTUlTUywKLQkJfSwKLQkJW0MoT1BfV1JJVEUpXSA9IHsKLQkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAotCQkJW0MoUkVTVUxUX01JU1MpXQk9IFhTQ0FMRV9QRVJGQ1RSX0lDQUNIRV9NSVNTLAotCQl9LAotCQlbQyhPUF9QUkVGRVRDSCldID0gewotCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCi0JCQlbQyhSRVNVTFRfTUlTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCi0JCX0sCi0JfSwKLQlbQyhMTCldID0gewotCQlbQyhPUF9SRUFEKV0gPSB7Ci0JCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKLQkJCVtDKFJFU1VMVF9NSVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKLQkJfSwKLQkJW0MoT1BfV1JJVEUpXSA9IHsKLQkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAotCQkJW0MoUkVTVUxUX01JU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAotCQl9LAotCQlbQyhPUF9QUkVGRVRDSCldID0gewotCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCi0JCQlbQyhSRVNVTFRfTUlTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCi0JCX0sCi0JfSwKLQlbQyhEVExCKV0gPSB7Ci0JCVtDKE9QX1JFQUQpXSA9IHsKLQkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAotCQkJW0MoUkVTVUxUX01JU1MpXQk9IFhTQ0FMRV9QRVJGQ1RSX0RUTEJfTUlTUywKLQkJfSwKLQkJW0MoT1BfV1JJVEUpXSA9IHsKLQkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAotCQkJW0MoUkVTVUxUX01JU1MpXQk9IFhTQ0FMRV9QRVJGQ1RSX0RUTEJfTUlTUywKLQkJfSwKLQkJW0MoT1BfUFJFRkVUQ0gpXSA9IHsKLQkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAotCQkJW0MoUkVTVUxUX01JU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAotCQl9LAotCX0sCi0JW0MoSVRMQildID0gewotCQlbQyhPUF9SRUFEKV0gPSB7Ci0JCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKLQkJCVtDKFJFU1VMVF9NSVNTKV0JPSBYU0NBTEVfUEVSRkNUUl9JVExCX01JU1MsCi0JCX0sCi0JCVtDKE9QX1dSSVRFKV0gPSB7Ci0JCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKLQkJCVtDKFJFU1VMVF9NSVNTKV0JPSBYU0NBTEVfUEVSRkNUUl9JVExCX01JU1MsCi0JCX0sCi0JCVtDKE9QX1BSRUZFVENIKV0gPSB7Ci0JCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKLQkJCVtDKFJFU1VMVF9NSVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKLQkJfSwKLQl9LAotCVtDKEJQVSldID0gewotCQlbQyhPUF9SRUFEKV0gPSB7Ci0JCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKLQkJCVtDKFJFU1VMVF9NSVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKLQkJfSwKLQkJW0MoT1BfV1JJVEUpXSA9IHsKLQkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAotCQkJW0MoUkVTVUxUX01JU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAotCQl9LAotCQlbQyhPUF9QUkVGRVRDSCldID0gewotCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCi0JCQlbQyhSRVNVTFRfTUlTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCi0JCX0sCi0JfSwKLX07Ci0KLSNkZWZpbmUJWFNDQUxFX1BNVV9FTkFCTEUJMHgwMDEKLSNkZWZpbmUgWFNDQUxFX1BNTl9SRVNFVAkweDAwMgotI2RlZmluZQlYU0NBTEVfQ0NOVF9SRVNFVAkweDAwNAotI2RlZmluZQlYU0NBTEVfUE1VX1JFU0VUCShDQ05UX1JFU0VUIHwgUE1OX1JFU0VUKQotI2RlZmluZSBYU0NBTEVfUE1VX0NOVDY0CTB4MDA4Ci0KLXN0YXRpYyBpbmxpbmUgaW50Ci14c2NhbGVwbXVfZXZlbnRfbWFwKGludCBjb25maWcpCi17Ci0JaW50IG1hcHBpbmcgPSB4c2NhbGVfcGVyZl9tYXBbY29uZmlnXTsKLQlpZiAoSFdfT1BfVU5TVVBQT1JURUQgPT0gbWFwcGluZykKLQkJbWFwcGluZyA9IC1FT1BOT1RTVVBQOwotCXJldHVybiBtYXBwaW5nOwotfQotCi1zdGF0aWMgdTY0Ci14c2NhbGVwbXVfcmF3X2V2ZW50KHU2NCBjb25maWcpCi17Ci0JcmV0dXJuIGNvbmZpZyAmIDB4ZmY7Ci19Ci0KLSNkZWZpbmUgWFNDQUxFMV9PVkVSRkxPV0VEX01BU0sJMHg3MDAKLSNkZWZpbmUgWFNDQUxFMV9DQ09VTlRfT1ZFUkZMT1cJMHg0MDAKLSNkZWZpbmUgWFNDQUxFMV9DT1VOVDBfT1ZFUkZMT1cJMHgxMDAKLSNkZWZpbmUgWFNDQUxFMV9DT1VOVDFfT1ZFUkZMT1cJMHgyMDAKLSNkZWZpbmUgWFNDQUxFMV9DQ09VTlRfSU5UX0VOCTB4MDQwCi0jZGVmaW5lIFhTQ0FMRTFfQ09VTlQwX0lOVF9FTgkweDAxMAotI2RlZmluZSBYU0NBTEUxX0NPVU5UMV9JTlRfRU4JMHgwMjAKLSNkZWZpbmUgWFNDQUxFMV9DT1VOVDBfRVZUX1NIRlQJMTIKLSNkZWZpbmUgWFNDQUxFMV9DT1VOVDBfRVZUX01BU0sJKDB4ZmYgPDwgWFNDQUxFMV9DT1VOVDBfRVZUX1NIRlQpCi0jZGVmaW5lIFhTQ0FMRTFfQ09VTlQxX0VWVF9TSEZUCTIwCi0jZGVmaW5lIFhTQ0FMRTFfQ09VTlQxX0VWVF9NQVNLCSgweGZmIDw8IFhTQ0FMRTFfQ09VTlQxX0VWVF9TSEZUKQotCi1zdGF0aWMgaW5saW5lIHUzMgoteHNjYWxlMXBtdV9yZWFkX3BtbmModm9pZCkKLXsKLQl1MzIgdmFsOwotCWFzbSB2b2xhdGlsZSgibXJjIHAxNCwgMCwgJTAsIGMwLCBjMCwgMCIgOiAiPXIiICh2YWwpKTsKLQlyZXR1cm4gdmFsOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLXhzY2FsZTFwbXVfd3JpdGVfcG1uYyh1MzIgdmFsKQotewotCS8qIHVwcGVyIDRiaXRzIGFuZCA3LCAxMSBhcmUgd3JpdGUtYXMtMCAqLwotCXZhbCAmPSAweGZmZmY3N2Y7Ci0JYXNtIHZvbGF0aWxlKCJtY3IgcDE0LCAwLCAlMCwgYzAsIGMwLCAwIiA6IDogInIiICh2YWwpKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQKLXhzY2FsZTFfcG1uY19jb3VudGVyX2hhc19vdmVyZmxvd2VkKHVuc2lnbmVkIGxvbmcgcG1uYywKLQkJCQkJZW51bSB4c2NhbGVfY291bnRlcnMgY291bnRlcikKLXsKLQlpbnQgcmV0ID0gMDsKLQotCXN3aXRjaCAoY291bnRlcikgewotCWNhc2UgWFNDQUxFX0NZQ0xFX0NPVU5URVI6Ci0JCXJldCA9IHBtbmMgJiBYU0NBTEUxX0NDT1VOVF9PVkVSRkxPVzsKLQkJYnJlYWs7Ci0JY2FzZSBYU0NBTEVfQ09VTlRFUjA6Ci0JCXJldCA9IHBtbmMgJiBYU0NBTEUxX0NPVU5UMF9PVkVSRkxPVzsKLQkJYnJlYWs7Ci0JY2FzZSBYU0NBTEVfQ09VTlRFUjE6Ci0JCXJldCA9IHBtbmMgJiBYU0NBTEUxX0NPVU5UMV9PVkVSRkxPVzsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJV0FSTl9PTkNFKDEsICJpbnZhbGlkIGNvdW50ZXIgbnVtYmVyICglZClcbiIsIGNvdW50ZXIpOwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpcnFyZXR1cm5fdAoteHNjYWxlMXBtdV9oYW5kbGVfaXJxKGludCBpcnFfbnVtLCB2b2lkICpkZXYpCi17Ci0JdW5zaWduZWQgbG9uZyBwbW5jOwotCXN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhIGRhdGE7Ci0Jc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWM7Ci0Jc3RydWN0IHB0X3JlZ3MgKnJlZ3M7Ci0JaW50IGlkeDsKLQotCS8qCi0JICogTk9URTogdGhlcmUncyBhbiBBIHN0ZXBwaW5nIGVycmF0dW0gdGhhdCBzdGF0ZXMgaWYgYW4gb3ZlcmZsb3cKLQkgKiAgICAgICBiaXQgYWxyZWFkeSBleGlzdHMgYW5kIGFub3RoZXIgb2NjdXJzLCB0aGUgcHJldmlvdXMKLQkgKiAgICAgICBPdmVyZmxvdyBiaXQgZ2V0cyBjbGVhcmVkLiBUaGVyZSdzIG5vIHdvcmthcm91bmQuCi0JICoJIEZpeGVkIGluIEIgc3RlcHBpbmcgb3IgbGF0ZXIuCi0JICovCi0JcG1uYyA9IHhzY2FsZTFwbXVfcmVhZF9wbW5jKCk7Ci0KLQkvKgotCSAqIFdyaXRlIHRoZSB2YWx1ZSBiYWNrIHRvIGNsZWFyIHRoZSBvdmVyZmxvdyBmbGFncy4gT3ZlcmZsb3cKLQkgKiBmbGFncyByZW1haW4gaW4gcG1uYyBmb3IgdXNlIGJlbG93LiBXZSBhbHNvIGRpc2FibGUgdGhlIFBNVQotCSAqIHdoaWxlIHdlIHByb2Nlc3MgdGhlIGludGVycnVwdC4KLQkgKi8KLQl4c2NhbGUxcG11X3dyaXRlX3BtbmMocG1uYyAmIH5YU0NBTEVfUE1VX0VOQUJMRSk7Ci0KLQlpZiAoIShwbW5jICYgWFNDQUxFMV9PVkVSRkxPV0VEX01BU0spKQotCQlyZXR1cm4gSVJRX05PTkU7Ci0KLQlyZWdzID0gZ2V0X2lycV9yZWdzKCk7Ci0KLQlwZXJmX3NhbXBsZV9kYXRhX2luaXQoJmRhdGEsIDApOwotCi0JY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOwotCWZvciAoaWR4ID0gMDsgaWR4IDw9IGFybXBtdS0+bnVtX2V2ZW50czsgKytpZHgpIHsKLQkJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50ID0gY3B1Yy0+ZXZlbnRzW2lkeF07Ci0JCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2M7Ci0KLQkJaWYgKCF0ZXN0X2JpdChpZHgsIGNwdWMtPmFjdGl2ZV9tYXNrKSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmICgheHNjYWxlMV9wbW5jX2NvdW50ZXJfaGFzX292ZXJmbG93ZWQocG1uYywgaWR4KSkKLQkJCWNvbnRpbnVlOwotCi0JCWh3YyA9ICZldmVudC0+aHc7Ci0JCWFybXBtdV9ldmVudF91cGRhdGUoZXZlbnQsIGh3YywgaWR4KTsKLQkJZGF0YS5wZXJpb2QgPSBldmVudC0+aHcubGFzdF9wZXJpb2Q7Ci0JCWlmICghYXJtcG11X2V2ZW50X3NldF9wZXJpb2QoZXZlbnQsIGh3YywgaWR4KSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChwZXJmX2V2ZW50X292ZXJmbG93KGV2ZW50LCAwLCAmZGF0YSwgcmVncykpCi0JCQlhcm1wbXUtPmRpc2FibGUoaHdjLCBpZHgpOwotCX0KLQotCWlycV93b3JrX3J1bigpOwotCi0JLyoKLQkgKiBSZS1lbmFibGUgdGhlIFBNVS4KLQkgKi8KLQlwbW5jID0geHNjYWxlMXBtdV9yZWFkX3BtbmMoKSB8IFhTQ0FMRV9QTVVfRU5BQkxFOwotCXhzY2FsZTFwbXVfd3JpdGVfcG1uYyhwbW5jKTsKLQotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotc3RhdGljIHZvaWQKLXhzY2FsZTFwbXVfZW5hYmxlX2V2ZW50KHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsIGludCBpZHgpCi17Ci0JdW5zaWduZWQgbG9uZyB2YWwsIG1hc2ssIGV2dCwgZmxhZ3M7Ci0KLQlzd2l0Y2ggKGlkeCkgewotCWNhc2UgWFNDQUxFX0NZQ0xFX0NPVU5URVI6Ci0JCW1hc2sgPSAwOwotCQlldnQgPSBYU0NBTEUxX0NDT1VOVF9JTlRfRU47Ci0JCWJyZWFrOwotCWNhc2UgWFNDQUxFX0NPVU5URVIwOgotCQltYXNrID0gWFNDQUxFMV9DT1VOVDBfRVZUX01BU0s7Ci0JCWV2dCA9IChod2MtPmNvbmZpZ19iYXNlIDw8IFhTQ0FMRTFfQ09VTlQwX0VWVF9TSEZUKSB8Ci0JCQlYU0NBTEUxX0NPVU5UMF9JTlRfRU47Ci0JCWJyZWFrOwotCWNhc2UgWFNDQUxFX0NPVU5URVIxOgotCQltYXNrID0gWFNDQUxFMV9DT1VOVDFfRVZUX01BU0s7Ci0JCWV2dCA9IChod2MtPmNvbmZpZ19iYXNlIDw8IFhTQ0FMRTFfQ09VTlQxX0VWVF9TSEZUKSB8Ci0JCQlYU0NBTEUxX0NPVU5UMV9JTlRfRU47Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCVdBUk5fT05DRSgxLCAiaW52YWxpZCBjb3VudGVyIG51bWJlciAoJWQpXG4iLCBpZHgpOwotCQlyZXR1cm47Ci0JfQotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBtdV9sb2NrLCBmbGFncyk7Ci0JdmFsID0geHNjYWxlMXBtdV9yZWFkX3BtbmMoKTsKLQl2YWwgJj0gfm1hc2s7Ci0JdmFsIHw9IGV2dDsKLQl4c2NhbGUxcG11X3dyaXRlX3BtbmModmFsKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbXVfbG9jaywgZmxhZ3MpOwotfQotCi1zdGF0aWMgdm9pZAoteHNjYWxlMXBtdV9kaXNhYmxlX2V2ZW50KHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsIGludCBpZHgpCi17Ci0JdW5zaWduZWQgbG9uZyB2YWwsIG1hc2ssIGV2dCwgZmxhZ3M7Ci0KLQlzd2l0Y2ggKGlkeCkgewotCWNhc2UgWFNDQUxFX0NZQ0xFX0NPVU5URVI6Ci0JCW1hc2sgPSBYU0NBTEUxX0NDT1VOVF9JTlRfRU47Ci0JCWV2dCA9IDA7Ci0JCWJyZWFrOwotCWNhc2UgWFNDQUxFX0NPVU5URVIwOgotCQltYXNrID0gWFNDQUxFMV9DT1VOVDBfSU5UX0VOIHwgWFNDQUxFMV9DT1VOVDBfRVZUX01BU0s7Ci0JCWV2dCA9IFhTQ0FMRV9QRVJGQ1RSX1VOVVNFRCA8PCBYU0NBTEUxX0NPVU5UMF9FVlRfU0hGVDsKLQkJYnJlYWs7Ci0JY2FzZSBYU0NBTEVfQ09VTlRFUjE6Ci0JCW1hc2sgPSBYU0NBTEUxX0NPVU5UMV9JTlRfRU4gfCBYU0NBTEUxX0NPVU5UMV9FVlRfTUFTSzsKLQkJZXZ0ID0gWFNDQUxFX1BFUkZDVFJfVU5VU0VEIDw8IFhTQ0FMRTFfQ09VTlQxX0VWVF9TSEZUOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlXQVJOX09OQ0UoMSwgImludmFsaWQgY291bnRlciBudW1iZXIgKCVkKVxuIiwgaWR4KTsKLQkJcmV0dXJuOwotCX0KLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwbXVfbG9jaywgZmxhZ3MpOwotCXZhbCA9IHhzY2FsZTFwbXVfcmVhZF9wbW5jKCk7Ci0JdmFsICY9IH5tYXNrOwotCXZhbCB8PSBldnQ7Ci0JeHNjYWxlMXBtdV93cml0ZV9wbW5jKHZhbCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG11X2xvY2ssIGZsYWdzKTsKLX0KLQotc3RhdGljIGludAoteHNjYWxlMXBtdV9nZXRfZXZlbnRfaWR4KHN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjLAotCQkJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmV2ZW50KQotewotCWlmIChYU0NBTEVfUEVSRkNUUl9DQ05UID09IGV2ZW50LT5jb25maWdfYmFzZSkgewotCQlpZiAodGVzdF9hbmRfc2V0X2JpdChYU0NBTEVfQ1lDTEVfQ09VTlRFUiwgY3B1Yy0+dXNlZF9tYXNrKSkKLQkJCXJldHVybiAtRUFHQUlOOwotCi0JCXJldHVybiBYU0NBTEVfQ1lDTEVfQ09VTlRFUjsKLQl9IGVsc2UgewotCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoWFNDQUxFX0NPVU5URVIxLCBjcHVjLT51c2VkX21hc2spKSB7Ci0JCQlyZXR1cm4gWFNDQUxFX0NPVU5URVIxOwotCQl9Ci0KLQkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFhTQ0FMRV9DT1VOVEVSMCwgY3B1Yy0+dXNlZF9tYXNrKSkgewotCQkJcmV0dXJuIFhTQ0FMRV9DT1VOVEVSMDsKLQkJfQotCi0JCXJldHVybiAtRUFHQUlOOwotCX0KLX0KLQotc3RhdGljIHZvaWQKLXhzY2FsZTFwbXVfc3RhcnQodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzLCB2YWw7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcG11X2xvY2ssIGZsYWdzKTsKLQl2YWwgPSB4c2NhbGUxcG11X3JlYWRfcG1uYygpOwotCXZhbCB8PSBYU0NBTEVfUE1VX0VOQUJMRTsKLQl4c2NhbGUxcG11X3dyaXRlX3BtbmModmFsKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbXVfbG9jaywgZmxhZ3MpOwotfQotCi1zdGF0aWMgdm9pZAoteHNjYWxlMXBtdV9zdG9wKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFncywgdmFsOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBtdV9sb2NrLCBmbGFncyk7Ci0JdmFsID0geHNjYWxlMXBtdV9yZWFkX3BtbmMoKTsKLQl2YWwgJj0gflhTQ0FMRV9QTVVfRU5BQkxFOwotCXhzY2FsZTFwbXVfd3JpdGVfcG1uYyh2YWwpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtdV9sb2NrLCBmbGFncyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTMyCi14c2NhbGUxcG11X3JlYWRfY291bnRlcihpbnQgY291bnRlcikKLXsKLQl1MzIgdmFsID0gMDsKLQotCXN3aXRjaCAoY291bnRlcikgewotCWNhc2UgWFNDQUxFX0NZQ0xFX0NPVU5URVI6Ci0JCWFzbSB2b2xhdGlsZSgibXJjIHAxNCwgMCwgJTAsIGMxLCBjMCwgMCIgOiAiPXIiICh2YWwpKTsKLQkJYnJlYWs7Ci0JY2FzZSBYU0NBTEVfQ09VTlRFUjA6Ci0JCWFzbSB2b2xhdGlsZSgibXJjIHAxNCwgMCwgJTAsIGMyLCBjMCwgMCIgOiAiPXIiICh2YWwpKTsKLQkJYnJlYWs7Ci0JY2FzZSBYU0NBTEVfQ09VTlRFUjE6Ci0JCWFzbSB2b2xhdGlsZSgibXJjIHAxNCwgMCwgJTAsIGMzLCBjMCwgMCIgOiAiPXIiICh2YWwpKTsKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIHZhbDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi14c2NhbGUxcG11X3dyaXRlX2NvdW50ZXIoaW50IGNvdW50ZXIsIHUzMiB2YWwpCi17Ci0Jc3dpdGNoIChjb3VudGVyKSB7Ci0JY2FzZSBYU0NBTEVfQ1lDTEVfQ09VTlRFUjoKLQkJYXNtIHZvbGF0aWxlKCJtY3IgcDE0LCAwLCAlMCwgYzEsIGMwLCAwIiA6IDogInIiICh2YWwpKTsKLQkJYnJlYWs7Ci0JY2FzZSBYU0NBTEVfQ09VTlRFUjA6Ci0JCWFzbSB2b2xhdGlsZSgibWNyIHAxNCwgMCwgJTAsIGMyLCBjMCwgMCIgOiA6ICJyIiAodmFsKSk7Ci0JCWJyZWFrOwotCWNhc2UgWFNDQUxFX0NPVU5URVIxOgotCQlhc20gdm9sYXRpbGUoIm1jciBwMTQsIDAsICUwLCBjMywgYzAsIDAiIDogOiAiciIgKHZhbCkpOwotCQlicmVhazsKLQl9Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJtX3BtdSB4c2NhbGUxcG11ID0gewotCS5pZAkJPSBBUk1fUEVSRl9QTVVfSURfWFNDQUxFMSwKLQkuaGFuZGxlX2lycQk9IHhzY2FsZTFwbXVfaGFuZGxlX2lycSwKLQkuZW5hYmxlCQk9IHhzY2FsZTFwbXVfZW5hYmxlX2V2ZW50LAotCS5kaXNhYmxlCT0geHNjYWxlMXBtdV9kaXNhYmxlX2V2ZW50LAotCS5ldmVudF9tYXAJPSB4c2NhbGVwbXVfZXZlbnRfbWFwLAotCS5yYXdfZXZlbnQJPSB4c2NhbGVwbXVfcmF3X2V2ZW50LAotCS5yZWFkX2NvdW50ZXIJPSB4c2NhbGUxcG11X3JlYWRfY291bnRlciwKLQkud3JpdGVfY291bnRlcgk9IHhzY2FsZTFwbXVfd3JpdGVfY291bnRlciwKLQkuZ2V0X2V2ZW50X2lkeAk9IHhzY2FsZTFwbXVfZ2V0X2V2ZW50X2lkeCwKLQkuc3RhcnQJCT0geHNjYWxlMXBtdV9zdGFydCwKLQkuc3RvcAkJPSB4c2NhbGUxcG11X3N0b3AsCi0JLm51bV9ldmVudHMJPSAzLAotCS5tYXhfcGVyaW9kCT0gKDFMTFUgPDwgMzIpIC0gMSwKLX07Ci0KLSNkZWZpbmUgWFNDQUxFMl9PVkVSRkxPV0VEX01BU0sJMHgwMWYKLSNkZWZpbmUgWFNDQUxFMl9DQ09VTlRfT1ZFUkZMT1cJMHgwMDEKLSNkZWZpbmUgWFNDQUxFMl9DT1VOVDBfT1ZFUkZMT1cJMHgwMDIKLSNkZWZpbmUgWFNDQUxFMl9DT1VOVDFfT1ZFUkZMT1cJMHgwMDQKLSNkZWZpbmUgWFNDQUxFMl9DT1VOVDJfT1ZFUkZMT1cJMHgwMDgKLSNkZWZpbmUgWFNDQUxFMl9DT1VOVDNfT1ZFUkZMT1cJMHgwMTAKLSNkZWZpbmUgWFNDQUxFMl9DQ09VTlRfSU5UX0VOCTB4MDAxCi0jZGVmaW5lIFhTQ0FMRTJfQ09VTlQwX0lOVF9FTgkweDAwMgotI2RlZmluZSBYU0NBTEUyX0NPVU5UMV9JTlRfRU4JMHgwMDQKLSNkZWZpbmUgWFNDQUxFMl9DT1VOVDJfSU5UX0VOCTB4MDA4Ci0jZGVmaW5lIFhTQ0FMRTJfQ09VTlQzX0lOVF9FTgkweDAxMAotI2RlZmluZSBYU0NBTEUyX0NPVU5UMF9FVlRfU0hGVAkwCi0jZGVmaW5lIFhTQ0FMRTJfQ09VTlQwX0VWVF9NQVNLCSgweGZmIDw8IFhTQ0FMRTJfQ09VTlQwX0VWVF9TSEZUKQotI2RlZmluZSBYU0NBTEUyX0NPVU5UMV9FVlRfU0hGVAk4Ci0jZGVmaW5lIFhTQ0FMRTJfQ09VTlQxX0VWVF9NQVNLCSgweGZmIDw8IFhTQ0FMRTJfQ09VTlQxX0VWVF9TSEZUKQotI2RlZmluZSBYU0NBTEUyX0NPVU5UMl9FVlRfU0hGVAkxNgotI2RlZmluZSBYU0NBTEUyX0NPVU5UMl9FVlRfTUFTSwkoMHhmZiA8PCBYU0NBTEUyX0NPVU5UMl9FVlRfU0hGVCkKLSNkZWZpbmUgWFNDQUxFMl9DT1VOVDNfRVZUX1NIRlQJMjQKLSNkZWZpbmUgWFNDQUxFMl9DT1VOVDNfRVZUX01BU0sJKDB4ZmYgPDwgWFNDQUxFMl9DT1VOVDNfRVZUX1NIRlQpCi0KLXN0YXRpYyBpbmxpbmUgdTMyCi14c2NhbGUycG11X3JlYWRfcG1uYyh2b2lkKQotewotCXUzMiB2YWw7Ci0JYXNtIHZvbGF0aWxlKCJtcmMgcDE0LCAwLCAlMCwgYzAsIGMxLCAwIiA6ICI9ciIgKHZhbCkpOwotCS8qIGJpdHMgMS0yIGFuZCA0LTIzIGFyZSByZWFkLXVucHJlZGljdGFibGUgKi8KLQlyZXR1cm4gdmFsICYgMHhmZjAwMDAwOTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi14c2NhbGUycG11X3dyaXRlX3BtbmModTMyIHZhbCkKLXsKLQkvKiBiaXRzIDQtMjMgYXJlIHdyaXRlLWFzLTAsIDI0LTMxIGFyZSB3cml0ZSBpZ25vcmVkICovCi0JdmFsICY9IDB4ZjsKLQlhc20gdm9sYXRpbGUoIm1jciBwMTQsIDAsICUwLCBjMCwgYzEsIDAiIDogOiAiciIgKHZhbCkpOwotfQotCi1zdGF0aWMgaW5saW5lIHUzMgoteHNjYWxlMnBtdV9yZWFkX292ZXJmbG93X2ZsYWdzKHZvaWQpCi17Ci0JdTMyIHZhbDsKLQlhc20gdm9sYXRpbGUoIm1yYyBwMTQsIDAsICUwLCBjNSwgYzEsIDAiIDogIj1yIiAodmFsKSk7Ci0JcmV0dXJuIHZhbDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi14c2NhbGUycG11X3dyaXRlX292ZXJmbG93X2ZsYWdzKHUzMiB2YWwpCi17Ci0JYXNtIHZvbGF0aWxlKCJtY3IgcDE0LCAwLCAlMCwgYzUsIGMxLCAwIiA6IDogInIiICh2YWwpKTsKLX0KLQotc3RhdGljIGlubGluZSB1MzIKLXhzY2FsZTJwbXVfcmVhZF9ldmVudF9zZWxlY3Qodm9pZCkKLXsKLQl1MzIgdmFsOwotCWFzbSB2b2xhdGlsZSgibXJjIHAxNCwgMCwgJTAsIGM4LCBjMSwgMCIgOiAiPXIiICh2YWwpKTsKLQlyZXR1cm4gdmFsOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLXhzY2FsZTJwbXVfd3JpdGVfZXZlbnRfc2VsZWN0KHUzMiB2YWwpCi17Ci0JYXNtIHZvbGF0aWxlKCJtY3IgcDE0LCAwLCAlMCwgYzgsIGMxLCAwIiA6IDogInIiKHZhbCkpOwotfQotCi1zdGF0aWMgaW5saW5lIHUzMgoteHNjYWxlMnBtdV9yZWFkX2ludF9lbmFibGUodm9pZCkKLXsKLQl1MzIgdmFsOwotCWFzbSB2b2xhdGlsZSgibXJjIHAxNCwgMCwgJTAsIGM0LCBjMSwgMCIgOiAiPXIiICh2YWwpKTsKLQlyZXR1cm4gdmFsOwotfQotCi1zdGF0aWMgdm9pZAoteHNjYWxlMnBtdV93cml0ZV9pbnRfZW5hYmxlKHUzMiB2YWwpCi17Ci0JYXNtIHZvbGF0aWxlKCJtY3IgcDE0LCAwLCAlMCwgYzQsIGMxLCAwIiA6IDogInIiICh2YWwpKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQKLXhzY2FsZTJfcG1uY19jb3VudGVyX2hhc19vdmVyZmxvd2VkKHVuc2lnbmVkIGxvbmcgb2ZfZmxhZ3MsCi0JCQkJCWVudW0geHNjYWxlX2NvdW50ZXJzIGNvdW50ZXIpCi17Ci0JaW50IHJldCA9IDA7Ci0KLQlzd2l0Y2ggKGNvdW50ZXIpIHsKLQljYXNlIFhTQ0FMRV9DWUNMRV9DT1VOVEVSOgotCQlyZXQgPSBvZl9mbGFncyAmIFhTQ0FMRTJfQ0NPVU5UX09WRVJGTE9XOwotCQlicmVhazsKLQljYXNlIFhTQ0FMRV9DT1VOVEVSMDoKLQkJcmV0ID0gb2ZfZmxhZ3MgJiBYU0NBTEUyX0NPVU5UMF9PVkVSRkxPVzsKLQkJYnJlYWs7Ci0JY2FzZSBYU0NBTEVfQ09VTlRFUjE6Ci0JCXJldCA9IG9mX2ZsYWdzICYgWFNDQUxFMl9DT1VOVDFfT1ZFUkZMT1c7Ci0JCWJyZWFrOwotCWNhc2UgWFNDQUxFX0NPVU5URVIyOgotCQlyZXQgPSBvZl9mbGFncyAmIFhTQ0FMRTJfQ09VTlQyX09WRVJGTE9XOwotCQlicmVhazsKLQljYXNlIFhTQ0FMRV9DT1VOVEVSMzoKLQkJcmV0ID0gb2ZfZmxhZ3MgJiBYU0NBTEUyX0NPVU5UM19PVkVSRkxPVzsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJV0FSTl9PTkNFKDEsICJpbnZhbGlkIGNvdW50ZXIgbnVtYmVyICglZClcbiIsIGNvdW50ZXIpOwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpcnFyZXR1cm5fdAoteHNjYWxlMnBtdV9oYW5kbGVfaXJxKGludCBpcnFfbnVtLCB2b2lkICpkZXYpCi17Ci0JdW5zaWduZWQgbG9uZyBwbW5jLCBvZl9mbGFnczsKLQlzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSBkYXRhOwotCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjOwotCXN0cnVjdCBwdF9yZWdzICpyZWdzOwotCWludCBpZHg7Ci0KLQkvKiBEaXNhYmxlIHRoZSBQTVUuICovCi0JcG1uYyA9IHhzY2FsZTJwbXVfcmVhZF9wbW5jKCk7Ci0JeHNjYWxlMnBtdV93cml0ZV9wbW5jKHBtbmMgJiB+WFNDQUxFX1BNVV9FTkFCTEUpOwotCi0JLyogQ2hlY2sgdGhlIG92ZXJmbG93IGZsYWcgcmVnaXN0ZXIuICovCi0Jb2ZfZmxhZ3MgPSB4c2NhbGUycG11X3JlYWRfb3ZlcmZsb3dfZmxhZ3MoKTsKLQlpZiAoIShvZl9mbGFncyAmIFhTQ0FMRTJfT1ZFUkZMT1dFRF9NQVNLKSkKLQkJcmV0dXJuIElSUV9OT05FOwotCi0JLyogQ2xlYXIgdGhlIG92ZXJmbG93IGJpdHMuICovCi0JeHNjYWxlMnBtdV93cml0ZV9vdmVyZmxvd19mbGFncyhvZl9mbGFncyk7Ci0KLQlyZWdzID0gZ2V0X2lycV9yZWdzKCk7Ci0KLQlwZXJmX3NhbXBsZV9kYXRhX2luaXQoJmRhdGEsIDApOwotCi0JY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOwotCWZvciAoaWR4ID0gMDsgaWR4IDw9IGFybXBtdS0+bnVtX2V2ZW50czsgKytpZHgpIHsKLQkJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50ID0gY3B1Yy0+ZXZlbnRzW2lkeF07Ci0JCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2M7Ci0KLQkJaWYgKCF0ZXN0X2JpdChpZHgsIGNwdWMtPmFjdGl2ZV9tYXNrKSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmICgheHNjYWxlMl9wbW5jX2NvdW50ZXJfaGFzX292ZXJmbG93ZWQocG1uYywgaWR4KSkKLQkJCWNvbnRpbnVlOwotCi0JCWh3YyA9ICZldmVudC0+aHc7Ci0JCWFybXBtdV9ldmVudF91cGRhdGUoZXZlbnQsIGh3YywgaWR4KTsKLQkJZGF0YS5wZXJpb2QgPSBldmVudC0+aHcubGFzdF9wZXJpb2Q7Ci0JCWlmICghYXJtcG11X2V2ZW50X3NldF9wZXJpb2QoZXZlbnQsIGh3YywgaWR4KSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChwZXJmX2V2ZW50X292ZXJmbG93KGV2ZW50LCAwLCAmZGF0YSwgcmVncykpCi0JCQlhcm1wbXUtPmRpc2FibGUoaHdjLCBpZHgpOwotCX0KLQotCWlycV93b3JrX3J1bigpOwotCi0JLyoKLQkgKiBSZS1lbmFibGUgdGhlIFBNVS4KLQkgKi8KLQlwbW5jID0geHNjYWxlMnBtdV9yZWFkX3BtbmMoKSB8IFhTQ0FMRV9QTVVfRU5BQkxFOwotCXhzY2FsZTJwbXVfd3JpdGVfcG1uYyhwbW5jKTsKLQotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotc3RhdGljIHZvaWQKLXhzY2FsZTJwbXVfZW5hYmxlX2V2ZW50KHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsIGludCBpZHgpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFncywgaWVuLCBldnRzZWw7Ci0KLQlpZW4gPSB4c2NhbGUycG11X3JlYWRfaW50X2VuYWJsZSgpOwotCWV2dHNlbCA9IHhzY2FsZTJwbXVfcmVhZF9ldmVudF9zZWxlY3QoKTsKLQotCXN3aXRjaCAoaWR4KSB7Ci0JY2FzZSBYU0NBTEVfQ1lDTEVfQ09VTlRFUjoKLQkJaWVuIHw9IFhTQ0FMRTJfQ0NPVU5UX0lOVF9FTjsKLQkJYnJlYWs7Ci0JY2FzZSBYU0NBTEVfQ09VTlRFUjA6Ci0JCWllbiB8PSBYU0NBTEUyX0NPVU5UMF9JTlRfRU47Ci0JCWV2dHNlbCAmPSB+WFNDQUxFMl9DT1VOVDBfRVZUX01BU0s7Ci0JCWV2dHNlbCB8PSBod2MtPmNvbmZpZ19iYXNlIDw8IFhTQ0FMRTJfQ09VTlQwX0VWVF9TSEZUOwotCQlicmVhazsKLQljYXNlIFhTQ0FMRV9DT1VOVEVSMToKLQkJaWVuIHw9IFhTQ0FMRTJfQ09VTlQxX0lOVF9FTjsKLQkJZXZ0c2VsICY9IH5YU0NBTEUyX0NPVU5UMV9FVlRfTUFTSzsKLQkJZXZ0c2VsIHw9IGh3Yy0+Y29uZmlnX2Jhc2UgPDwgWFNDQUxFMl9DT1VOVDFfRVZUX1NIRlQ7Ci0JCWJyZWFrOwotCWNhc2UgWFNDQUxFX0NPVU5URVIyOgotCQlpZW4gfD0gWFNDQUxFMl9DT1VOVDJfSU5UX0VOOwotCQlldnRzZWwgJj0gflhTQ0FMRTJfQ09VTlQyX0VWVF9NQVNLOwotCQlldnRzZWwgfD0gaHdjLT5jb25maWdfYmFzZSA8PCBYU0NBTEUyX0NPVU5UMl9FVlRfU0hGVDsKLQkJYnJlYWs7Ci0JY2FzZSBYU0NBTEVfQ09VTlRFUjM6Ci0JCWllbiB8PSBYU0NBTEUyX0NPVU5UM19JTlRfRU47Ci0JCWV2dHNlbCAmPSB+WFNDQUxFMl9DT1VOVDNfRVZUX01BU0s7Ci0JCWV2dHNlbCB8PSBod2MtPmNvbmZpZ19iYXNlIDw8IFhTQ0FMRTJfQ09VTlQzX0VWVF9TSEZUOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlXQVJOX09OQ0UoMSwgImludmFsaWQgY291bnRlciBudW1iZXIgKCVkKVxuIiwgaWR4KTsKLQkJcmV0dXJuOwotCX0KLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwbXVfbG9jaywgZmxhZ3MpOwotCXhzY2FsZTJwbXVfd3JpdGVfZXZlbnRfc2VsZWN0KGV2dHNlbCk7Ci0JeHNjYWxlMnBtdV93cml0ZV9pbnRfZW5hYmxlKGllbik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG11X2xvY2ssIGZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQKLXhzY2FsZTJwbXVfZGlzYWJsZV9ldmVudChzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLCBpbnQgaWR4KQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGllbiwgZXZ0c2VsOwotCi0JaWVuID0geHNjYWxlMnBtdV9yZWFkX2ludF9lbmFibGUoKTsKLQlldnRzZWwgPSB4c2NhbGUycG11X3JlYWRfZXZlbnRfc2VsZWN0KCk7Ci0KLQlzd2l0Y2ggKGlkeCkgewotCWNhc2UgWFNDQUxFX0NZQ0xFX0NPVU5URVI6Ci0JCWllbiAmPSB+WFNDQUxFMl9DQ09VTlRfSU5UX0VOOwotCQlicmVhazsKLQljYXNlIFhTQ0FMRV9DT1VOVEVSMDoKLQkJaWVuICY9IH5YU0NBTEUyX0NPVU5UMF9JTlRfRU47Ci0JCWV2dHNlbCAmPSB+WFNDQUxFMl9DT1VOVDBfRVZUX01BU0s7Ci0JCWV2dHNlbCB8PSBYU0NBTEVfUEVSRkNUUl9VTlVTRUQgPDwgWFNDQUxFMl9DT1VOVDBfRVZUX1NIRlQ7Ci0JCWJyZWFrOwotCWNhc2UgWFNDQUxFX0NPVU5URVIxOgotCQlpZW4gJj0gflhTQ0FMRTJfQ09VTlQxX0lOVF9FTjsKLQkJZXZ0c2VsICY9IH5YU0NBTEUyX0NPVU5UMV9FVlRfTUFTSzsKLQkJZXZ0c2VsIHw9IFhTQ0FMRV9QRVJGQ1RSX1VOVVNFRCA8PCBYU0NBTEUyX0NPVU5UMV9FVlRfU0hGVDsKLQkJYnJlYWs7Ci0JY2FzZSBYU0NBTEVfQ09VTlRFUjI6Ci0JCWllbiAmPSB+WFNDQUxFMl9DT1VOVDJfSU5UX0VOOwotCQlldnRzZWwgJj0gflhTQ0FMRTJfQ09VTlQyX0VWVF9NQVNLOwotCQlldnRzZWwgfD0gWFNDQUxFX1BFUkZDVFJfVU5VU0VEIDw8IFhTQ0FMRTJfQ09VTlQyX0VWVF9TSEZUOwotCQlicmVhazsKLQljYXNlIFhTQ0FMRV9DT1VOVEVSMzoKLQkJaWVuICY9IH5YU0NBTEUyX0NPVU5UM19JTlRfRU47Ci0JCWV2dHNlbCAmPSB+WFNDQUxFMl9DT1VOVDNfRVZUX01BU0s7Ci0JCWV2dHNlbCB8PSBYU0NBTEVfUEVSRkNUUl9VTlVTRUQgPDwgWFNDQUxFMl9DT1VOVDNfRVZUX1NIRlQ7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCVdBUk5fT05DRSgxLCAiaW52YWxpZCBjb3VudGVyIG51bWJlciAoJWQpXG4iLCBpZHgpOwotCQlyZXR1cm47Ci0JfQotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBtdV9sb2NrLCBmbGFncyk7Ci0JeHNjYWxlMnBtdV93cml0ZV9ldmVudF9zZWxlY3QoZXZ0c2VsKTsKLQl4c2NhbGUycG11X3dyaXRlX2ludF9lbmFibGUoaWVuKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbXVfbG9jaywgZmxhZ3MpOwotfQotCi1zdGF0aWMgaW50Ci14c2NhbGUycG11X2dldF9ldmVudF9pZHgoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMsCi0JCQlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqZXZlbnQpCi17Ci0JaW50IGlkeCA9IHhzY2FsZTFwbXVfZ2V0X2V2ZW50X2lkeChjcHVjLCBldmVudCk7Ci0JaWYgKGlkeCA+PSAwKQotCQlnb3RvIG91dDsKLQotCWlmICghdGVzdF9hbmRfc2V0X2JpdChYU0NBTEVfQ09VTlRFUjMsIGNwdWMtPnVzZWRfbWFzaykpCi0JCWlkeCA9IFhTQ0FMRV9DT1VOVEVSMzsKLQllbHNlIGlmICghdGVzdF9hbmRfc2V0X2JpdChYU0NBTEVfQ09VTlRFUjIsIGNwdWMtPnVzZWRfbWFzaykpCi0JCWlkeCA9IFhTQ0FMRV9DT1VOVEVSMjsKLW91dDoKLQlyZXR1cm4gaWR4OwotfQotCi1zdGF0aWMgdm9pZAoteHNjYWxlMnBtdV9zdGFydCh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZhbDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwbXVfbG9jaywgZmxhZ3MpOwotCXZhbCA9IHhzY2FsZTJwbXVfcmVhZF9wbW5jKCkgJiB+WFNDQUxFX1BNVV9DTlQ2NDsKLQl2YWwgfD0gWFNDQUxFX1BNVV9FTkFCTEU7Ci0JeHNjYWxlMnBtdV93cml0ZV9wbW5jKHZhbCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG11X2xvY2ssIGZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQKLXhzY2FsZTJwbXVfc3RvcCh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZhbDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwbXVfbG9jaywgZmxhZ3MpOwotCXZhbCA9IHhzY2FsZTJwbXVfcmVhZF9wbW5jKCk7Ci0JdmFsICY9IH5YU0NBTEVfUE1VX0VOQUJMRTsKLQl4c2NhbGUycG11X3dyaXRlX3BtbmModmFsKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbXVfbG9jaywgZmxhZ3MpOwotfQotCi1zdGF0aWMgaW5saW5lIHUzMgoteHNjYWxlMnBtdV9yZWFkX2NvdW50ZXIoaW50IGNvdW50ZXIpCi17Ci0JdTMyIHZhbCA9IDA7Ci0KLQlzd2l0Y2ggKGNvdW50ZXIpIHsKLQljYXNlIFhTQ0FMRV9DWUNMRV9DT1VOVEVSOgotCQlhc20gdm9sYXRpbGUoIm1yYyBwMTQsIDAsICUwLCBjMSwgYzEsIDAiIDogIj1yIiAodmFsKSk7Ci0JCWJyZWFrOwotCWNhc2UgWFNDQUxFX0NPVU5URVIwOgotCQlhc20gdm9sYXRpbGUoIm1yYyBwMTQsIDAsICUwLCBjMCwgYzIsIDAiIDogIj1yIiAodmFsKSk7Ci0JCWJyZWFrOwotCWNhc2UgWFNDQUxFX0NPVU5URVIxOgotCQlhc20gdm9sYXRpbGUoIm1yYyBwMTQsIDAsICUwLCBjMSwgYzIsIDAiIDogIj1yIiAodmFsKSk7Ci0JCWJyZWFrOwotCWNhc2UgWFNDQUxFX0NPVU5URVIyOgotCQlhc20gdm9sYXRpbGUoIm1yYyBwMTQsIDAsICUwLCBjMiwgYzIsIDAiIDogIj1yIiAodmFsKSk7Ci0JCWJyZWFrOwotCWNhc2UgWFNDQUxFX0NPVU5URVIzOgotCQlhc20gdm9sYXRpbGUoIm1yYyBwMTQsIDAsICUwLCBjMywgYzIsIDAiIDogIj1yIiAodmFsKSk7Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiB2YWw7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAoteHNjYWxlMnBtdV93cml0ZV9jb3VudGVyKGludCBjb3VudGVyLCB1MzIgdmFsKQotewotCXN3aXRjaCAoY291bnRlcikgewotCWNhc2UgWFNDQUxFX0NZQ0xFX0NPVU5URVI6Ci0JCWFzbSB2b2xhdGlsZSgibWNyIHAxNCwgMCwgJTAsIGMxLCBjMSwgMCIgOiA6ICJyIiAodmFsKSk7Ci0JCWJyZWFrOwotCWNhc2UgWFNDQUxFX0NPVU5URVIwOgotCQlhc20gdm9sYXRpbGUoIm1jciBwMTQsIDAsICUwLCBjMCwgYzIsIDAiIDogOiAiciIgKHZhbCkpOwotCQlicmVhazsKLQljYXNlIFhTQ0FMRV9DT1VOVEVSMToKLQkJYXNtIHZvbGF0aWxlKCJtY3IgcDE0LCAwLCAlMCwgYzEsIGMyLCAwIiA6IDogInIiICh2YWwpKTsKLQkJYnJlYWs7Ci0JY2FzZSBYU0NBTEVfQ09VTlRFUjI6Ci0JCWFzbSB2b2xhdGlsZSgibWNyIHAxNCwgMCwgJTAsIGMyLCBjMiwgMCIgOiA6ICJyIiAodmFsKSk7Ci0JCWJyZWFrOwotCWNhc2UgWFNDQUxFX0NPVU5URVIzOgotCQlhc20gdm9sYXRpbGUoIm1jciBwMTQsIDAsICUwLCBjMywgYzIsIDAiIDogOiAiciIgKHZhbCkpOwotCQlicmVhazsKLQl9Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJtX3BtdSB4c2NhbGUycG11ID0gewotCS5pZAkJPSBBUk1fUEVSRl9QTVVfSURfWFNDQUxFMiwKLQkuaGFuZGxlX2lycQk9IHhzY2FsZTJwbXVfaGFuZGxlX2lycSwKLQkuZW5hYmxlCQk9IHhzY2FsZTJwbXVfZW5hYmxlX2V2ZW50LAotCS5kaXNhYmxlCT0geHNjYWxlMnBtdV9kaXNhYmxlX2V2ZW50LAotCS5ldmVudF9tYXAJPSB4c2NhbGVwbXVfZXZlbnRfbWFwLAotCS5yYXdfZXZlbnQJPSB4c2NhbGVwbXVfcmF3X2V2ZW50LAotCS5yZWFkX2NvdW50ZXIJPSB4c2NhbGUycG11X3JlYWRfY291bnRlciwKLQkud3JpdGVfY291bnRlcgk9IHhzY2FsZTJwbXVfd3JpdGVfY291bnRlciwKLQkuZ2V0X2V2ZW50X2lkeAk9IHhzY2FsZTJwbXVfZ2V0X2V2ZW50X2lkeCwKLQkuc3RhcnQJCT0geHNjYWxlMnBtdV9zdGFydCwKLQkuc3RvcAkJPSB4c2NhbGUycG11X3N0b3AsCi0JLm51bV9ldmVudHMJPSA1LAotCS5tYXhfcGVyaW9kCT0gKDFMTFUgPDwgMzIpIC0gMSwKLX07CisvKiBJbmNsdWRlIHRoZSBQTVUtc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zLiAqLworI2luY2x1ZGUgInBlcmZfZXZlbnRfeHNjYWxlLmMiCisjaW5jbHVkZSAicGVyZl9ldmVudF92Ni5jIgorI2luY2x1ZGUgInBlcmZfZXZlbnRfdjcuYyIKIAogc3RhdGljIGludCBfX2luaXQKIGluaXRfaHdfcGVyZl9ldmVudHModm9pZCkKQEAgLTI5NzcsMzcgKzYyMiwxNiBAQAogCQljYXNlIDB4QjM2MDoJLyogQVJNMTEzNiAqLwogCQljYXNlIDB4QjU2MDoJLyogQVJNMTE1NiAqLwogCQljYXNlIDB4Qjc2MDoJLyogQVJNMTE3NiAqLwotCQkJYXJtcG11ID0gJmFybXY2cG11OwotCQkJbWVtY3B5KGFybXBtdV9wZXJmX2NhY2hlX21hcCwgYXJtdjZfcGVyZl9jYWNoZV9tYXAsCi0JCQkJCXNpemVvZihhcm12Nl9wZXJmX2NhY2hlX21hcCkpOworCQkJYXJtcG11ID0gYXJtdjZwbXVfaW5pdCgpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHhCMDIwOgkvKiBBUk0xMW1wY29yZSAqLwotCQkJYXJtcG11ID0gJmFybXY2bXBjb3JlX3BtdTsKLQkJCW1lbWNweShhcm1wbXVfcGVyZl9jYWNoZV9tYXAsCi0JCQkgICAgICAgYXJtdjZtcGNvcmVfcGVyZl9jYWNoZV9tYXAsCi0JCQkgICAgICAgc2l6ZW9mKGFybXY2bXBjb3JlX3BlcmZfY2FjaGVfbWFwKSk7CisJCQlhcm1wbXUgPSBhcm12Nm1wY29yZV9wbXVfaW5pdCgpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHhDMDgwOgkvKiBDb3J0ZXgtQTggKi8KLQkJCWFybXY3cG11LmlkID0gQVJNX1BFUkZfUE1VX0lEX0NBODsKLQkJCW1lbWNweShhcm1wbXVfcGVyZl9jYWNoZV9tYXAsIGFybXY3X2E4X3BlcmZfY2FjaGVfbWFwLAotCQkJCXNpemVvZihhcm12N19hOF9wZXJmX2NhY2hlX21hcCkpOwotCQkJYXJtdjdwbXUuZXZlbnRfbWFwID0gYXJtdjdfYThfcG11X2V2ZW50X21hcDsKLQkJCWFybXBtdSA9ICZhcm12N3BtdTsKLQotCQkJLyogUmVzZXQgUE1OQyBhbmQgcmVhZCB0aGUgbmIgb2YgQ05UeCBjb3VudGVycwotCQkJICAgIHN1cHBvcnRlZCAqLwotCQkJYXJtdjdwbXUubnVtX2V2ZW50cyA9IGFybXY3X3Jlc2V0X3JlYWRfcG1uYygpOworCQkJYXJtcG11ID0gYXJtdjdfYThfcG11X2luaXQoKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4QzA5MDoJLyogQ29ydGV4LUE5ICovCi0JCQlhcm12N3BtdS5pZCA9IEFSTV9QRVJGX1BNVV9JRF9DQTk7Ci0JCQltZW1jcHkoYXJtcG11X3BlcmZfY2FjaGVfbWFwLCBhcm12N19hOV9wZXJmX2NhY2hlX21hcCwKLQkJCQlzaXplb2YoYXJtdjdfYTlfcGVyZl9jYWNoZV9tYXApKTsKLQkJCWFybXY3cG11LmV2ZW50X21hcCA9IGFybXY3X2E5X3BtdV9ldmVudF9tYXA7Ci0JCQlhcm1wbXUgPSAmYXJtdjdwbXU7Ci0KLQkJCS8qIFJlc2V0IFBNTkMgYW5kIHJlYWQgdGhlIG5iIG9mIENOVHggY291bnRlcnMKLQkJCSAgICBzdXBwb3J0ZWQgKi8KLQkJCWFybXY3cG11Lm51bV9ldmVudHMgPSBhcm12N19yZXNldF9yZWFkX3BtbmMoKTsKKwkJCWFybXBtdSA9IGFybXY3X2E5X3BtdV9pbml0KCk7CiAJCQlicmVhazsKIAkJfQogCS8qIEludGVsIENQVXMgW3hzY2FsZV0uICovCkBAIC0zMDE1LDMwICs2MzksMjYgQEAKIAkJcGFydF9udW1iZXIgPSAoY3B1aWQgPj4gMTMpICYgMHg3OwogCQlzd2l0Y2ggKHBhcnRfbnVtYmVyKSB7CiAJCWNhc2UgMToKLQkJCWFybXBtdSA9ICZ4c2NhbGUxcG11OwotCQkJbWVtY3B5KGFybXBtdV9wZXJmX2NhY2hlX21hcCwgeHNjYWxlX3BlcmZfY2FjaGVfbWFwLAotCQkJCQlzaXplb2YoeHNjYWxlX3BlcmZfY2FjaGVfbWFwKSk7CisJCQlhcm1wbXUgPSB4c2NhbGUxcG11X2luaXQoKTsKIAkJCWJyZWFrOwogCQljYXNlIDI6Ci0JCQlhcm1wbXUgPSAmeHNjYWxlMnBtdTsKLQkJCW1lbWNweShhcm1wbXVfcGVyZl9jYWNoZV9tYXAsIHhzY2FsZV9wZXJmX2NhY2hlX21hcCwKLQkJCQkJc2l6ZW9mKHhzY2FsZV9wZXJmX2NhY2hlX21hcCkpOworCQkJYXJtcG11ID0geHNjYWxlMnBtdV9pbml0KCk7CiAJCQlicmVhazsKIAkJfQogCX0KIAogCWlmIChhcm1wbXUpIHsKIAkJcHJfaW5mbygiZW5hYmxlZCB3aXRoICVzIFBNVSBkcml2ZXIsICVkIGNvdW50ZXJzIGF2YWlsYWJsZVxuIiwKLQkJCQlhcm1fcG11X25hbWVzW2FybXBtdS0+aWRdLCBhcm1wbXUtPm51bV9ldmVudHMpOworCQkJYXJtcG11LT5uYW1lLCBhcm1wbXUtPm51bV9ldmVudHMpOwogCX0gZWxzZSB7CiAJCXByX2luZm8oIm5vIGhhcmR3YXJlIHN1cHBvcnQgYXZhaWxhYmxlXG4iKTsKIAl9CiAKLQlwZXJmX3BtdV9yZWdpc3RlcigmcG11KTsKKwlwZXJmX3BtdV9yZWdpc3RlcigmcG11LCAiY3B1IiwgUEVSRl9UWVBFX1JBVyk7CiAKIAlyZXR1cm4gMDsKIH0KLWFyY2hfaW5pdGNhbGwoaW5pdF9od19wZXJmX2V2ZW50cyk7CitlYXJseV9pbml0Y2FsbChpbml0X2h3X3BlcmZfZXZlbnRzKTsKIAogLyoKICAqIENhbGxjaGFpbiBoYW5kbGluZyBjb2RlLgpAQCAtMzA1MywxNyArNjczLDE3IEBACiAgKiBUaGlzIGNvZGUgaGFzIGJlZW4gYWRhcHRlZCBmcm9tIHRoZSBBUk0gT1Byb2ZpbGUgc3VwcG9ydC4KICAqLwogc3RydWN0IGZyYW1lX3RhaWwgewotCXN0cnVjdCBmcmFtZV90YWlsICAgKmZwOwotCXVuc2lnbmVkIGxvbmcJICAgIHNwOwotCXVuc2lnbmVkIGxvbmcJICAgIGxyOworCXN0cnVjdCBmcmFtZV90YWlsIF9fdXNlciAqZnA7CisJdW5zaWduZWQgbG9uZyBzcDsKKwl1bnNpZ25lZCBsb25nIGxyOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogLyoKICAqIEdldCB0aGUgcmV0dXJuIGFkZHJlc3MgZm9yIGEgc2luZ2xlIHN0YWNrZnJhbWUgYW5kIHJldHVybiBhIHBvaW50ZXIgdG8gdGhlCiAgKiBuZXh0IGZyYW1lIHRhaWwuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgZnJhbWVfdGFpbCAqCi11c2VyX2JhY2t0cmFjZShzdHJ1Y3QgZnJhbWVfdGFpbCAqdGFpbCwKK3N0YXRpYyBzdHJ1Y3QgZnJhbWVfdGFpbCBfX3VzZXIgKgordXNlcl9iYWNrdHJhY2Uoc3RydWN0IGZyYW1lX3RhaWwgX191c2VyICp0YWlsLAogCSAgICAgICBzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKmVudHJ5KQogewogCXN0cnVjdCBmcmFtZV90YWlsIGJ1ZnRhaWw7CkBAIC0zMDg5LDEwICs3MDksMTAgQEAKIHZvaWQKIHBlcmZfY2FsbGNoYWluX3VzZXIoc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICplbnRyeSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0Jc3RydWN0IGZyYW1lX3RhaWwgKnRhaWw7CisJc3RydWN0IGZyYW1lX3RhaWwgX191c2VyICp0YWlsOwogCiAKLQl0YWlsID0gKHN0cnVjdCBmcmFtZV90YWlsICopcmVncy0+QVJNX2ZwIC0gMTsKKwl0YWlsID0gKHN0cnVjdCBmcmFtZV90YWlsIF9fdXNlciAqKXJlZ3MtPkFSTV9mcCAtIDE7CiAKIAl3aGlsZSAodGFpbCAmJiAhKCh1bnNpZ25lZCBsb25nKXRhaWwgJiAweDMpKQogCQl0YWlsID0gdXNlcl9iYWNrdHJhY2UodGFpbCwgZW50cnkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3BlcmZfZXZlbnRfdjYuYyBiL2FyY2gvYXJtL2tlcm5lbC9wZXJmX2V2ZW50X3Y2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA1OGJmYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9wZXJmX2V2ZW50X3Y2LmMKQEAgLTAsMCArMSw2NzIgQEAKKy8qCisgKiBBUk12NiBQZXJmb3JtYW5jZSBjb3VudGVyIGhhbmRsaW5nIGNvZGUuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IHBpY29DaGlwIERlc2lnbnMsIEx0ZC4sIEphbWllIElsZXMKKyAqCisgKiBBUk12NiBoYXMgMiBjb25maWd1cmFibGUgcGVyZm9ybWFuY2UgY291bnRlcnMgYW5kIGEgc2luZ2xlIGN5Y2xlIGNvdW50ZXIuCisgKiBUaGV5IGFsbCBzaGFyZSBhIHNpbmdsZSByZXNldCBiaXQgYnV0IGNhbiBiZSB3cml0dGVuIHRvIHplcm8gc28gd2UgY2FuIHVzZQorICogdGhhdCBmb3IgYSByZXNldC4KKyAqCisgKiBUaGUgY291bnRlcnMgY2FuJ3QgYmUgaW5kaXZpZHVhbGx5IGVuYWJsZWQgb3IgZGlzYWJsZWQgc28gd2hlbiB3ZSByZW1vdmUKKyAqIG9uZSBldmVudCBhbmQgcmVwbGFjZSBpdCB3aXRoIGFub3RoZXIgd2UgY291bGQgZ2V0IHNwdXJpb3VzIGNvdW50cyBmcm9tIHRoZQorICogd3JvbmcgZXZlbnQuIEhvd2V2ZXIsIHdlIGNhbiB0YWtlIGFkdmFudGFnZSBvZiB0aGUgZmFjdCB0aGF0IHRoZQorICogcGVyZm9ybWFuY2UgY291bnRlcnMgY2FuIGV4cG9ydCBldmVudHMgdG8gdGhlIGV2ZW50IGJ1cywgYW5kIHRoZSBldmVudCBidXMKKyAqIGl0c2VsZiBjYW4gYmUgbW9uaXRvcmVkLiBUaGlzIHJlcXVpcmVzIHRoYXQgd2UgKmRvbid0KiBleHBvcnQgdGhlIGV2ZW50cyB0bworICogdGhlIGV2ZW50IGJ1cy4gVGhlIHByb2NlZHVyZSBmb3IgZGlzYWJsaW5nIGEgY29uZmlndXJhYmxlIGNvdW50ZXIgaXM6CisgKgktIGNoYW5nZSB0aGUgY291bnRlciB0byBjb3VudCB0aGUgRVRNRVhUT1VUWzBdIHNpZ25hbCAoMHgyMCkuIFRoaXMKKyAqCSAgZWZmZWN0aXZlbHkgc3RvcHMgdGhlIGNvdW50ZXIgZnJvbSBjb3VudGluZy4KKyAqCS0gZGlzYWJsZSB0aGUgY291bnRlcidzIGludGVycnVwdCBnZW5lcmF0aW9uIChlYWNoIGNvdW50ZXIgaGFzIGl0J3MKKyAqCSAgb3duIGludGVycnVwdCBlbmFibGUgYml0KS4KKyAqIE9uY2Ugc3RvcHBlZCwgdGhlIGNvdW50ZXIgdmFsdWUgY2FuIGJlIHdyaXR0ZW4gYXMgMCB0byByZXNldC4KKyAqCisgKiBUbyBlbmFibGUgYSBjb3VudGVyOgorICoJLSBlbmFibGUgdGhlIGNvdW50ZXIncyBpbnRlcnJ1cHQgZ2VuZXJhdGlvbi4KKyAqCS0gc2V0IHRoZSBuZXcgZXZlbnQgdHlwZS4KKyAqCisgKiBOb3RlOiB0aGUgZGVkaWNhdGVkIGN5Y2xlIGNvdW50ZXIgb25seSBjb3VudHMgY3ljbGVzIGFuZCBjYW4ndCBiZQorICogZW5hYmxlZC9kaXNhYmxlZCBpbmRlcGVuZGVudGx5IG9mIHRoZSBvdGhlcnMuIFdoZW4gd2Ugd2FudCB0byBkaXNhYmxlIHRoZQorICogY3ljbGUgY291bnRlciwgd2UgaGF2ZSB0byBqdXN0IGRpc2FibGUgdGhlIGludGVycnVwdCByZXBvcnRpbmcgYW5kIHN0YXJ0CisgKiBpZ25vcmluZyB0aGF0IGNvdW50ZXIuIFdoZW4gcmUtZW5hYmxpbmcsIHdlIGhhdmUgdG8gcmVzZXQgdGhlIHZhbHVlIGFuZAorICogZW5hYmxlIHRoZSBpbnRlcnJ1cHQuCisgKi8KKworI2lmZGVmIENPTkZJR19DUFVfVjYKK2VudW0gYXJtdjZfcGVyZl90eXBlcyB7CisJQVJNVjZfUEVSRkNUUl9JQ0FDSEVfTUlTUwkgICAgPSAweDAsCisJQVJNVjZfUEVSRkNUUl9JQlVGX1NUQUxMCSAgICA9IDB4MSwKKwlBUk1WNl9QRVJGQ1RSX0RERVBfU1RBTEwJICAgID0gMHgyLAorCUFSTVY2X1BFUkZDVFJfSVRMQl9NSVNTCQkgICAgPSAweDMsCisJQVJNVjZfUEVSRkNUUl9EVExCX01JU1MJCSAgICA9IDB4NCwKKwlBUk1WNl9QRVJGQ1RSX0JSX0VYRUMJCSAgICA9IDB4NSwKKwlBUk1WNl9QRVJGQ1RSX0JSX01JU1BSRURJQ1QJICAgID0gMHg2LAorCUFSTVY2X1BFUkZDVFJfSU5TVFJfRVhFQwkgICAgPSAweDcsCisJQVJNVjZfUEVSRkNUUl9EQ0FDSEVfSElUCSAgICA9IDB4OSwKKwlBUk1WNl9QRVJGQ1RSX0RDQUNIRV9BQ0NFU1MJICAgID0gMHhBLAorCUFSTVY2X1BFUkZDVFJfRENBQ0hFX01JU1MJICAgID0gMHhCLAorCUFSTVY2X1BFUkZDVFJfRENBQ0hFX1dCQUNLCSAgICA9IDB4QywKKwlBUk1WNl9QRVJGQ1RSX1NXX1BDX0NIQU5HRQkgICAgPSAweEQsCisJQVJNVjZfUEVSRkNUUl9NQUlOX1RMQl9NSVNTCSAgICA9IDB4RiwKKwlBUk1WNl9QRVJGQ1RSX0VYUExfRF9BQ0NFU1MJICAgID0gMHgxMCwKKwlBUk1WNl9QRVJGQ1RSX0xTVV9GVUxMX1NUQUxMCSAgICA9IDB4MTEsCisJQVJNVjZfUEVSRkNUUl9XQlVGX0RSQUlORUQJICAgID0gMHgxMiwKKwlBUk1WNl9QRVJGQ1RSX0NQVV9DWUNMRVMJICAgID0gMHhGRiwKKwlBUk1WNl9QRVJGQ1RSX05PUAkJICAgID0gMHgyMCwKK307CisKK2VudW0gYXJtdjZfY291bnRlcnMgeworCUFSTVY2X0NZQ0xFX0NPVU5URVIgPSAxLAorCUFSTVY2X0NPVU5URVIwLAorCUFSTVY2X0NPVU5URVIxLAorfTsKKworLyoKKyAqIFRoZSBoYXJkd2FyZSBldmVudHMgdGhhdCB3ZSBzdXBwb3J0LiBXZSBkbyBzdXBwb3J0IGNhY2hlIG9wZXJhdGlvbnMgYnV0CisgKiB3ZSBoYXZlIGhhcnZhcmQgY2FjaGVzIGFuZCBubyB3YXkgdG8gY29tYmluZSBpbnN0cnVjdGlvbiBhbmQgZGF0YQorICogYWNjZXNzZXMvbWlzc2VzIGluIGhhcmR3YXJlLgorICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgYXJtdjZfcGVyZl9tYXBbUEVSRl9DT1VOVF9IV19NQVhdID0geworCVtQRVJGX0NPVU5UX0hXX0NQVV9DWUNMRVNdCSAgICA9IEFSTVY2X1BFUkZDVFJfQ1BVX0NZQ0xFUywKKwlbUEVSRl9DT1VOVF9IV19JTlNUUlVDVElPTlNdCSAgICA9IEFSTVY2X1BFUkZDVFJfSU5TVFJfRVhFQywKKwlbUEVSRl9DT1VOVF9IV19DQUNIRV9SRUZFUkVOQ0VTXSAgICA9IEhXX09QX1VOU1VQUE9SVEVELAorCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX01JU1NFU10JICAgID0gSFdfT1BfVU5TVVBQT1JURUQsCisJW1BFUkZfQ09VTlRfSFdfQlJBTkNIX0lOU1RSVUNUSU9OU10gPSBBUk1WNl9QRVJGQ1RSX0JSX0VYRUMsCisJW1BFUkZfQ09VTlRfSFdfQlJBTkNIX01JU1NFU10JICAgID0gQVJNVjZfUEVSRkNUUl9CUl9NSVNQUkVESUNULAorCVtQRVJGX0NPVU5UX0hXX0JVU19DWUNMRVNdCSAgICA9IEhXX09QX1VOU1VQUE9SVEVELAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGFybXY2X3BlcmZfY2FjaGVfbWFwW1BFUkZfQ09VTlRfSFdfQ0FDSEVfTUFYXQorCQkJCQkgIFtQRVJGX0NPVU5UX0hXX0NBQ0hFX09QX01BWF0KKwkJCQkJICBbUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfTUFYXSA9IHsKKwlbQyhMMUQpXSA9IHsKKwkJLyoKKwkJICogVGhlIHBlcmZvcm1hbmNlIGNvdW50ZXJzIGRvbid0IGRpZmZlcmVudGlhdGUgYmV0d2VlbiByZWFkCisJCSAqIGFuZCB3cml0ZSBhY2Nlc3Nlcy9taXNzZXMgc28gdGhpcyBpc24ndCBzdHJpY3RseSBjb3JyZWN0LAorCQkgKiBidXQgaXQncyB0aGUgYmVzdCB3ZSBjYW4gZG8uIFdyaXRlcyBhbmQgcmVhZHMgZ2V0CisJCSAqIGNvbWJpbmVkLgorCQkgKi8KKwkJW0MoT1BfUkVBRCldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQVJNVjZfUEVSRkNUUl9EQ0FDSEVfQUNDRVNTLAorCQkJW0MoUkVTVUxUX01JU1MpXQk9IEFSTVY2X1BFUkZDVFJfRENBQ0hFX01JU1MsCisJCX0sCisJCVtDKE9QX1dSSVRFKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBBUk1WNl9QRVJGQ1RSX0RDQUNIRV9BQ0NFU1MsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gQVJNVjZfUEVSRkNUUl9EQ0FDSEVfTUlTUywKKwkJfSwKKwkJW0MoT1BfUFJFRkVUQ0gpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQl9LAorCX0sCisJW0MoTDFJKV0gPSB7CisJCVtDKE9QX1JFQUQpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXQk9IEFSTVY2X1BFUkZDVFJfSUNBQ0hFX01JU1MsCisJCX0sCisJCVtDKE9QX1dSSVRFKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBBUk1WNl9QRVJGQ1RSX0lDQUNIRV9NSVNTLAorCQl9LAorCQlbQyhPUF9QUkVGRVRDSCldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCX0sCisJfSwKKwlbQyhMTCldID0geworCQlbQyhPUF9SRUFEKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJfSwKKwkJW0MoT1BfV1JJVEUpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQl9LAorCQlbQyhPUF9QUkVGRVRDSCldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCX0sCisJfSwKKwlbQyhEVExCKV0gPSB7CisJCS8qCisJCSAqIFRoZSBBUk0gcGVyZm9ybWFuY2UgY291bnRlcnMgY2FuIGNvdW50IG1pY3JvIERUTEIgbWlzc2VzLAorCQkgKiBtaWNybyBJVExCIG1pc3NlcyBhbmQgbWFpbiBUTEIgbWlzc2VzLiBUaGVyZSBpc24ndCBhbiBldmVudAorCQkgKiBmb3IgVExCIG1pc3Nlcywgc28gdXNlIHRoZSBtaWNybyBtaXNzZXMgaGVyZSBhbmQgaWYgdXNlcnMKKwkJICogd2FudCB0aGUgbWFpbiBUTEIgbWlzc2VzIHRoZXkgY2FuIHVzZSBhIHJhdyBjb3VudGVyLgorCQkgKi8KKwkJW0MoT1BfUkVBRCldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gQVJNVjZfUEVSRkNUUl9EVExCX01JU1MsCisJCX0sCisJCVtDKE9QX1dSSVRFKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBBUk1WNl9QRVJGQ1RSX0RUTEJfTUlTUywKKwkJfSwKKwkJW0MoT1BfUFJFRkVUQ0gpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQl9LAorCX0sCisJW0MoSVRMQildID0geworCQlbQyhPUF9SRUFEKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBBUk1WNl9QRVJGQ1RSX0lUTEJfTUlTUywKKwkJfSwKKwkJW0MoT1BfV1JJVEUpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXQk9IEFSTVY2X1BFUkZDVFJfSVRMQl9NSVNTLAorCQl9LAorCQlbQyhPUF9QUkVGRVRDSCldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCX0sCisJfSwKKwlbQyhCUFUpXSA9IHsKKwkJW0MoT1BfUkVBRCldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCX0sCisJCVtDKE9QX1dSSVRFKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJfSwKKwkJW0MoT1BfUFJFRkVUQ0gpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQl9LAorCX0sCit9OworCitlbnVtIGFybXY2bXBjb3JlX3BlcmZfdHlwZXMgeworCUFSTVY2TVBDT1JFX1BFUkZDVFJfSUNBQ0hFX01JU1MJICAgID0gMHgwLAorCUFSTVY2TVBDT1JFX1BFUkZDVFJfSUJVRl9TVEFMTAkgICAgPSAweDEsCisJQVJNVjZNUENPUkVfUEVSRkNUUl9EREVQX1NUQUxMCSAgICA9IDB4MiwKKwlBUk1WNk1QQ09SRV9QRVJGQ1RSX0lUTEJfTUlTUwkgICAgPSAweDMsCisJQVJNVjZNUENPUkVfUEVSRkNUUl9EVExCX01JU1MJICAgID0gMHg0LAorCUFSTVY2TVBDT1JFX1BFUkZDVFJfQlJfRVhFQwkgICAgPSAweDUsCisJQVJNVjZNUENPUkVfUEVSRkNUUl9CUl9OT1RQUkVESUNUICAgPSAweDYsCisJQVJNVjZNUENPUkVfUEVSRkNUUl9CUl9NSVNQUkVESUNUICAgPSAweDcsCisJQVJNVjZNUENPUkVfUEVSRkNUUl9JTlNUUl9FWEVDCSAgICA9IDB4OCwKKwlBUk1WNk1QQ09SRV9QRVJGQ1RSX0RDQUNIRV9SREFDQ0VTUyA9IDB4QSwKKwlBUk1WNk1QQ09SRV9QRVJGQ1RSX0RDQUNIRV9SRE1JU1MgICA9IDB4QiwKKwlBUk1WNk1QQ09SRV9QRVJGQ1RSX0RDQUNIRV9XUkFDQ0VTUyA9IDB4QywKKwlBUk1WNk1QQ09SRV9QRVJGQ1RSX0RDQUNIRV9XUk1JU1MgICA9IDB4RCwKKwlBUk1WNk1QQ09SRV9QRVJGQ1RSX0RDQUNIRV9FVklDVElPTiA9IDB4RSwKKwlBUk1WNk1QQ09SRV9QRVJGQ1RSX1NXX1BDX0NIQU5HRSAgICA9IDB4RiwKKwlBUk1WNk1QQ09SRV9QRVJGQ1RSX01BSU5fVExCX01JU1MgICA9IDB4MTAsCisJQVJNVjZNUENPUkVfUEVSRkNUUl9FWFBMX01FTV9BQ0NFU1MgPSAweDExLAorCUFSTVY2TVBDT1JFX1BFUkZDVFJfTFNVX0ZVTExfU1RBTEwgID0gMHgxMiwKKwlBUk1WNk1QQ09SRV9QRVJGQ1RSX1dCVUZfRFJBSU5FRCAgICA9IDB4MTMsCisJQVJNVjZNUENPUkVfUEVSRkNUUl9DUFVfQ1lDTEVTCSAgICA9IDB4RkYsCit9OworCisvKgorICogVGhlIGhhcmR3YXJlIGV2ZW50cyB0aGF0IHdlIHN1cHBvcnQuIFdlIGRvIHN1cHBvcnQgY2FjaGUgb3BlcmF0aW9ucyBidXQKKyAqIHdlIGhhdmUgaGFydmFyZCBjYWNoZXMgYW5kIG5vIHdheSB0byBjb21iaW5lIGluc3RydWN0aW9uIGFuZCBkYXRhCisgKiBhY2Nlc3Nlcy9taXNzZXMgaW4gaGFyZHdhcmUuCisgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBhcm12Nm1wY29yZV9wZXJmX21hcFtQRVJGX0NPVU5UX0hXX01BWF0gPSB7CisJW1BFUkZfQ09VTlRfSFdfQ1BVX0NZQ0xFU10JICAgID0gQVJNVjZNUENPUkVfUEVSRkNUUl9DUFVfQ1lDTEVTLAorCVtQRVJGX0NPVU5UX0hXX0lOU1RSVUNUSU9OU10JICAgID0gQVJNVjZNUENPUkVfUEVSRkNUUl9JTlNUUl9FWEVDLAorCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFRkVSRU5DRVNdICAgID0gSFdfT1BfVU5TVVBQT1JURUQsCisJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfTUlTU0VTXQkgICAgPSBIV19PUF9VTlNVUFBPUlRFRCwKKwlbUEVSRl9DT1VOVF9IV19CUkFOQ0hfSU5TVFJVQ1RJT05TXSA9IEFSTVY2TVBDT1JFX1BFUkZDVFJfQlJfRVhFQywKKwlbUEVSRl9DT1VOVF9IV19CUkFOQ0hfTUlTU0VTXQkgICAgPSBBUk1WNk1QQ09SRV9QRVJGQ1RSX0JSX01JU1BSRURJQ1QsCisJW1BFUkZfQ09VTlRfSFdfQlVTX0NZQ0xFU10JICAgID0gSFdfT1BfVU5TVVBQT1JURUQsCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgYXJtdjZtcGNvcmVfcGVyZl9jYWNoZV9tYXBbUEVSRl9DT1VOVF9IV19DQUNIRV9NQVhdCisJCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX09QX01BWF0KKwkJCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX01BWF0gPSB7CisJW0MoTDFEKV0gPSB7CisJCVtDKE9QX1JFQUQpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXSAgPQorCQkJCUFSTVY2TVBDT1JFX1BFUkZDVFJfRENBQ0hFX1JEQUNDRVNTLAorCQkJW0MoUkVTVUxUX01JU1MpXSAgICA9CisJCQkJQVJNVjZNUENPUkVfUEVSRkNUUl9EQ0FDSEVfUkRNSVNTLAorCQl9LAorCQlbQyhPUF9XUklURSldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldICA9CisJCQkJQVJNVjZNUENPUkVfUEVSRkNUUl9EQ0FDSEVfV1JBQ0NFU1MsCisJCQlbQyhSRVNVTFRfTUlTUyldICAgID0KKwkJCQlBUk1WNk1QQ09SRV9QRVJGQ1RSX0RDQUNIRV9XUk1JU1MsCisJCX0sCisJCVtDKE9QX1BSRUZFVENIKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0gID0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldICAgID0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCX0sCisJfSwKKwlbQyhMMUkpXSA9IHsKKwkJW0MoT1BfUkVBRCldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldICA9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXSAgICA9IEFSTVY2TVBDT1JFX1BFUkZDVFJfSUNBQ0hFX01JU1MsCisJCX0sCisJCVtDKE9QX1dSSVRFKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0gID0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldICAgID0gQVJNVjZNUENPUkVfUEVSRkNUUl9JQ0FDSEVfTUlTUywKKwkJfSwKKwkJW0MoT1BfUFJFRkVUQ0gpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXSAgPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0gICAgPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJfSwKKwl9LAorCVtDKExMKV0gPSB7CisJCVtDKE9QX1JFQUQpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXSAgPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0gICAgPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJfSwKKwkJW0MoT1BfV1JJVEUpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXSAgPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0gICAgPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJfSwKKwkJW0MoT1BfUFJFRkVUQ0gpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXSAgPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0gICAgPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJfSwKKwl9LAorCVtDKERUTEIpXSA9IHsKKwkJLyoKKwkJICogVGhlIEFSTSBwZXJmb3JtYW5jZSBjb3VudGVycyBjYW4gY291bnQgbWljcm8gRFRMQiBtaXNzZXMsCisJCSAqIG1pY3JvIElUTEIgbWlzc2VzIGFuZCBtYWluIFRMQiBtaXNzZXMuIFRoZXJlIGlzbid0IGFuIGV2ZW50CisJCSAqIGZvciBUTEIgbWlzc2VzLCBzbyB1c2UgdGhlIG1pY3JvIG1pc3NlcyBoZXJlIGFuZCBpZiB1c2VycworCQkgKiB3YW50IHRoZSBtYWluIFRMQiBtaXNzZXMgdGhleSBjYW4gdXNlIGEgcmF3IGNvdW50ZXIuCisJCSAqLworCQlbQyhPUF9SRUFEKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0gID0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldICAgID0gQVJNVjZNUENPUkVfUEVSRkNUUl9EVExCX01JU1MsCisJCX0sCisJCVtDKE9QX1dSSVRFKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0gID0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldICAgID0gQVJNVjZNUENPUkVfUEVSRkNUUl9EVExCX01JU1MsCisJCX0sCisJCVtDKE9QX1BSRUZFVENIKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0gID0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldICAgID0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCX0sCisJfSwKKwlbQyhJVExCKV0gPSB7CisJCVtDKE9QX1JFQUQpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXSAgPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0gICAgPSBBUk1WNk1QQ09SRV9QRVJGQ1RSX0lUTEJfTUlTUywKKwkJfSwKKwkJW0MoT1BfV1JJVEUpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXSAgPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0gICAgPSBBUk1WNk1QQ09SRV9QRVJGQ1RSX0lUTEJfTUlTUywKKwkJfSwKKwkJW0MoT1BfUFJFRkVUQ0gpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXSAgPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0gICAgPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJfSwKKwl9LAorCVtDKEJQVSldID0geworCQlbQyhPUF9SRUFEKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0gID0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldICAgID0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCX0sCisJCVtDKE9QX1dSSVRFKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0gID0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldICAgID0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCX0sCisJCVtDKE9QX1BSRUZFVENIKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0gID0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldICAgID0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCX0sCisJfSwKK307CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZworYXJtdjZfcG1jcl9yZWFkKHZvaWQpCit7CisJdTMyIHZhbDsKKwlhc20gdm9sYXRpbGUoIm1yYyAgIHAxNSwgMCwgJTAsIGMxNSwgYzEyLCAwIiA6ICI9ciIodmFsKSk7CisJcmV0dXJuIHZhbDsKK30KKworc3RhdGljIGlubGluZSB2b2lkCithcm12Nl9wbWNyX3dyaXRlKHVuc2lnbmVkIGxvbmcgdmFsKQoreworCWFzbSB2b2xhdGlsZSgibWNyICAgcDE1LCAwLCAlMCwgYzE1LCBjMTIsIDAiIDogOiAiciIodmFsKSk7Cit9CisKKyNkZWZpbmUgQVJNVjZfUE1DUl9FTkFCTEUJCSgxIDw8IDApCisjZGVmaW5lIEFSTVY2X1BNQ1JfQ1RSMDFfUkVTRVQJCSgxIDw8IDEpCisjZGVmaW5lIEFSTVY2X1BNQ1JfQ0NPVU5UX1JFU0VUCQkoMSA8PCAyKQorI2RlZmluZSBBUk1WNl9QTUNSX0NDT1VOVF9ESVYJCSgxIDw8IDMpCisjZGVmaW5lIEFSTVY2X1BNQ1JfQ09VTlQwX0lFTgkJKDEgPDwgNCkKKyNkZWZpbmUgQVJNVjZfUE1DUl9DT1VOVDFfSUVOCQkoMSA8PCA1KQorI2RlZmluZSBBUk1WNl9QTUNSX0NDT1VOVF9JRU4JCSgxIDw8IDYpCisjZGVmaW5lIEFSTVY2X1BNQ1JfQ09VTlQwX09WRVJGTE9XCSgxIDw8IDgpCisjZGVmaW5lIEFSTVY2X1BNQ1JfQ09VTlQxX09WRVJGTE9XCSgxIDw8IDkpCisjZGVmaW5lIEFSTVY2X1BNQ1JfQ0NPVU5UX09WRVJGTE9XCSgxIDw8IDEwKQorI2RlZmluZSBBUk1WNl9QTUNSX0VWVF9DT1VOVDBfU0hJRlQJMjAKKyNkZWZpbmUgQVJNVjZfUE1DUl9FVlRfQ09VTlQwX01BU0sJKDB4RkYgPDwgQVJNVjZfUE1DUl9FVlRfQ09VTlQwX1NISUZUKQorI2RlZmluZSBBUk1WNl9QTUNSX0VWVF9DT1VOVDFfU0hJRlQJMTIKKyNkZWZpbmUgQVJNVjZfUE1DUl9FVlRfQ09VTlQxX01BU0sJKDB4RkYgPDwgQVJNVjZfUE1DUl9FVlRfQ09VTlQxX1NISUZUKQorCisjZGVmaW5lIEFSTVY2X1BNQ1JfT1ZFUkZMT1dFRF9NQVNLIFwKKwkoQVJNVjZfUE1DUl9DT1VOVDBfT1ZFUkZMT1cgfCBBUk1WNl9QTUNSX0NPVU5UMV9PVkVSRkxPVyB8IFwKKwkgQVJNVjZfUE1DUl9DQ09VTlRfT1ZFUkZMT1cpCisKK3N0YXRpYyBpbmxpbmUgaW50Cithcm12Nl9wbWNyX2hhc19vdmVyZmxvd2VkKHVuc2lnbmVkIGxvbmcgcG1jcikKK3sKKwlyZXR1cm4gcG1jciAmIEFSTVY2X1BNQ1JfT1ZFUkZMT1dFRF9NQVNLOworfQorCitzdGF0aWMgaW5saW5lIGludAorYXJtdjZfcG1jcl9jb3VudGVyX2hhc19vdmVyZmxvd2VkKHVuc2lnbmVkIGxvbmcgcG1jciwKKwkJCQkgIGVudW0gYXJtdjZfY291bnRlcnMgY291bnRlcikKK3sKKwlpbnQgcmV0ID0gMDsKKworCWlmIChBUk1WNl9DWUNMRV9DT1VOVEVSID09IGNvdW50ZXIpCisJCXJldCA9IHBtY3IgJiBBUk1WNl9QTUNSX0NDT1VOVF9PVkVSRkxPVzsKKwllbHNlIGlmIChBUk1WNl9DT1VOVEVSMCA9PSBjb3VudGVyKQorCQlyZXQgPSBwbWNyICYgQVJNVjZfUE1DUl9DT1VOVDBfT1ZFUkZMT1c7CisJZWxzZSBpZiAoQVJNVjZfQ09VTlRFUjEgPT0gY291bnRlcikKKwkJcmV0ID0gcG1jciAmIEFSTVY2X1BNQ1JfQ09VTlQxX09WRVJGTE9XOworCWVsc2UKKwkJV0FSTl9PTkNFKDEsICJpbnZhbGlkIGNvdW50ZXIgbnVtYmVyICglZClcbiIsIGNvdW50ZXIpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSB1MzIKK2FybXY2cG11X3JlYWRfY291bnRlcihpbnQgY291bnRlcikKK3sKKwl1bnNpZ25lZCBsb25nIHZhbHVlID0gMDsKKworCWlmIChBUk1WNl9DWUNMRV9DT1VOVEVSID09IGNvdW50ZXIpCisJCWFzbSB2b2xhdGlsZSgibXJjICAgcDE1LCAwLCAlMCwgYzE1LCBjMTIsIDEiIDogIj1yIih2YWx1ZSkpOworCWVsc2UgaWYgKEFSTVY2X0NPVU5URVIwID09IGNvdW50ZXIpCisJCWFzbSB2b2xhdGlsZSgibXJjICAgcDE1LCAwLCAlMCwgYzE1LCBjMTIsIDIiIDogIj1yIih2YWx1ZSkpOworCWVsc2UgaWYgKEFSTVY2X0NPVU5URVIxID09IGNvdW50ZXIpCisJCWFzbSB2b2xhdGlsZSgibXJjICAgcDE1LCAwLCAlMCwgYzE1LCBjMTIsIDMiIDogIj1yIih2YWx1ZSkpOworCWVsc2UKKwkJV0FSTl9PTkNFKDEsICJpbnZhbGlkIGNvdW50ZXIgbnVtYmVyICglZClcbiIsIGNvdW50ZXIpOworCisJcmV0dXJuIHZhbHVlOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2FybXY2cG11X3dyaXRlX2NvdW50ZXIoaW50IGNvdW50ZXIsCisJCSAgICAgICB1MzIgdmFsdWUpCit7CisJaWYgKEFSTVY2X0NZQ0xFX0NPVU5URVIgPT0gY291bnRlcikKKwkJYXNtIHZvbGF0aWxlKCJtY3IgICBwMTUsIDAsICUwLCBjMTUsIGMxMiwgMSIgOiA6ICJyIih2YWx1ZSkpOworCWVsc2UgaWYgKEFSTVY2X0NPVU5URVIwID09IGNvdW50ZXIpCisJCWFzbSB2b2xhdGlsZSgibWNyICAgcDE1LCAwLCAlMCwgYzE1LCBjMTIsIDIiIDogOiAiciIodmFsdWUpKTsKKwllbHNlIGlmIChBUk1WNl9DT1VOVEVSMSA9PSBjb3VudGVyKQorCQlhc20gdm9sYXRpbGUoIm1jciAgIHAxNSwgMCwgJTAsIGMxNSwgYzEyLCAzIiA6IDogInIiKHZhbHVlKSk7CisJZWxzZQorCQlXQVJOX09OQ0UoMSwgImludmFsaWQgY291bnRlciBudW1iZXIgKCVkKVxuIiwgY291bnRlcik7Cit9CisKK3N0YXRpYyB2b2lkCithcm12NnBtdV9lbmFibGVfZXZlbnQoc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YywKKwkJICAgICAgaW50IGlkeCkKK3sKKwl1bnNpZ25lZCBsb25nIHZhbCwgbWFzaywgZXZ0LCBmbGFnczsKKworCWlmIChBUk1WNl9DWUNMRV9DT1VOVEVSID09IGlkeCkgeworCQltYXNrCT0gMDsKKwkJZXZ0CT0gQVJNVjZfUE1DUl9DQ09VTlRfSUVOOworCX0gZWxzZSBpZiAoQVJNVjZfQ09VTlRFUjAgPT0gaWR4KSB7CisJCW1hc2sJPSBBUk1WNl9QTUNSX0VWVF9DT1VOVDBfTUFTSzsKKwkJZXZ0CT0gKGh3Yy0+Y29uZmlnX2Jhc2UgPDwgQVJNVjZfUE1DUl9FVlRfQ09VTlQwX1NISUZUKSB8CisJCQkgIEFSTVY2X1BNQ1JfQ09VTlQwX0lFTjsKKwl9IGVsc2UgaWYgKEFSTVY2X0NPVU5URVIxID09IGlkeCkgeworCQltYXNrCT0gQVJNVjZfUE1DUl9FVlRfQ09VTlQxX01BU0s7CisJCWV2dAk9IChod2MtPmNvbmZpZ19iYXNlIDw8IEFSTVY2X1BNQ1JfRVZUX0NPVU5UMV9TSElGVCkgfAorCQkJICBBUk1WNl9QTUNSX0NPVU5UMV9JRU47CisJfSBlbHNlIHsKKwkJV0FSTl9PTkNFKDEsICJpbnZhbGlkIGNvdW50ZXIgbnVtYmVyICglZClcbiIsIGlkeCk7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIE1hc2sgb3V0IHRoZSBjdXJyZW50IGV2ZW50IGFuZCBzZXQgdGhlIGNvdW50ZXIgdG8gY291bnQgdGhlIGV2ZW50CisJICogdGhhdCB3ZSdyZSBpbnRlcmVzdGVkIGluLgorCSAqLworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcG11X2xvY2ssIGZsYWdzKTsKKwl2YWwgPSBhcm12Nl9wbWNyX3JlYWQoKTsKKwl2YWwgJj0gfm1hc2s7CisJdmFsIHw9IGV2dDsKKwlhcm12Nl9wbWNyX3dyaXRlKHZhbCk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtdV9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdAorYXJtdjZwbXVfaGFuZGxlX2lycShpbnQgaXJxX251bSwKKwkJICAgIHZvaWQgKmRldikKK3sKKwl1bnNpZ25lZCBsb25nIHBtY3IgPSBhcm12Nl9wbWNyX3JlYWQoKTsKKwlzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSBkYXRhOworCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjOworCXN0cnVjdCBwdF9yZWdzICpyZWdzOworCWludCBpZHg7CisKKwlpZiAoIWFybXY2X3BtY3JfaGFzX292ZXJmbG93ZWQocG1jcikpCisJCXJldHVybiBJUlFfTk9ORTsKKworCXJlZ3MgPSBnZXRfaXJxX3JlZ3MoKTsKKworCS8qCisJICogVGhlIGludGVycnVwdHMgYXJlIGNsZWFyZWQgYnkgd3JpdGluZyB0aGUgb3ZlcmZsb3cgZmxhZ3MgYmFjayB0bworCSAqIHRoZSBjb250cm9sIHJlZ2lzdGVyLiBBbGwgb2YgdGhlIG90aGVyIGJpdHMgZG9uJ3QgaGF2ZSBhbnkgZWZmZWN0CisJICogaWYgdGhleSBhcmUgcmV3cml0dGVuLCBzbyB3cml0ZSB0aGUgd2hvbGUgdmFsdWUgYmFjay4KKwkgKi8KKwlhcm12Nl9wbWNyX3dyaXRlKHBtY3IpOworCisJcGVyZl9zYW1wbGVfZGF0YV9pbml0KCZkYXRhLCAwKTsKKworCWNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKKwlmb3IgKGlkeCA9IDA7IGlkeCA8PSBhcm1wbXUtPm51bV9ldmVudHM7ICsraWR4KSB7CisJCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCA9IGNwdWMtPmV2ZW50c1tpZHhdOworCQlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjOworCisJCWlmICghdGVzdF9iaXQoaWR4LCBjcHVjLT5hY3RpdmVfbWFzaykpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBXZSBoYXZlIGEgc2luZ2xlIGludGVycnVwdCBmb3IgYWxsIGNvdW50ZXJzLiBDaGVjayB0aGF0CisJCSAqIGVhY2ggY291bnRlciBoYXMgb3ZlcmZsb3dlZCBiZWZvcmUgd2UgcHJvY2VzcyBpdC4KKwkJICovCisJCWlmICghYXJtdjZfcG1jcl9jb3VudGVyX2hhc19vdmVyZmxvd2VkKHBtY3IsIGlkeCkpCisJCQljb250aW51ZTsKKworCQlod2MgPSAmZXZlbnQtPmh3OworCQlhcm1wbXVfZXZlbnRfdXBkYXRlKGV2ZW50LCBod2MsIGlkeCk7CisJCWRhdGEucGVyaW9kID0gZXZlbnQtPmh3Lmxhc3RfcGVyaW9kOworCQlpZiAoIWFybXBtdV9ldmVudF9zZXRfcGVyaW9kKGV2ZW50LCBod2MsIGlkeCkpCisJCQljb250aW51ZTsKKworCQlpZiAocGVyZl9ldmVudF9vdmVyZmxvdyhldmVudCwgMCwgJmRhdGEsIHJlZ3MpKQorCQkJYXJtcG11LT5kaXNhYmxlKGh3YywgaWR4KTsKKwl9CisKKwkvKgorCSAqIEhhbmRsZSB0aGUgcGVuZGluZyBwZXJmIGV2ZW50cy4KKwkgKgorCSAqIE5vdGU6IHRoaXMgY2FsbCAqbXVzdCogYmUgcnVuIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC4gRm9yCisJICogcGxhdGZvcm1zIHRoYXQgY2FuIGhhdmUgdGhlIFBNVSBpbnRlcnJ1cHRzIHJhaXNlZCBhcyBhbiBOTUksIHRoaXMKKwkgKiB3aWxsIG5vdCB3b3JrLgorCSAqLworCWlycV93b3JrX3J1bigpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZAorYXJtdjZwbXVfc3RhcnQodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzLCB2YWw7CisKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnBtdV9sb2NrLCBmbGFncyk7CisJdmFsID0gYXJtdjZfcG1jcl9yZWFkKCk7CisJdmFsIHw9IEFSTVY2X1BNQ1JfRU5BQkxFOworCWFybXY2X3BtY3Jfd3JpdGUodmFsKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG11X2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQKK2FybXY2cG11X3N0b3Aodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzLCB2YWw7CisKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnBtdV9sb2NrLCBmbGFncyk7CisJdmFsID0gYXJtdjZfcG1jcl9yZWFkKCk7CisJdmFsICY9IH5BUk1WNl9QTUNSX0VOQUJMRTsKKwlhcm12Nl9wbWNyX3dyaXRlKHZhbCk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtdV9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQKK2FybXY2cG11X2dldF9ldmVudF9pZHgoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMsCisJCSAgICAgICBzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqZXZlbnQpCit7CisJLyogQWx3YXlzIHBsYWNlIGEgY3ljbGUgY291bnRlciBpbnRvIHRoZSBjeWNsZSBjb3VudGVyLiAqLworCWlmIChBUk1WNl9QRVJGQ1RSX0NQVV9DWUNMRVMgPT0gZXZlbnQtPmNvbmZpZ19iYXNlKSB7CisJCWlmICh0ZXN0X2FuZF9zZXRfYml0KEFSTVY2X0NZQ0xFX0NPVU5URVIsIGNwdWMtPnVzZWRfbWFzaykpCisJCQlyZXR1cm4gLUVBR0FJTjsKKworCQlyZXR1cm4gQVJNVjZfQ1lDTEVfQ09VTlRFUjsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBGb3IgYW55dGhpbmcgb3RoZXIgdGhhbiBhIGN5Y2xlIGNvdW50ZXIsIHRyeSBhbmQgdXNlCisJCSAqIGNvdW50ZXIwIGFuZCBjb3VudGVyMS4KKwkJICovCisJCWlmICghdGVzdF9hbmRfc2V0X2JpdChBUk1WNl9DT1VOVEVSMSwgY3B1Yy0+dXNlZF9tYXNrKSkKKwkJCXJldHVybiBBUk1WNl9DT1VOVEVSMTsKKworCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoQVJNVjZfQ09VTlRFUjAsIGNwdWMtPnVzZWRfbWFzaykpCisJCQlyZXR1cm4gQVJNVjZfQ09VTlRFUjA7CisKKwkJLyogVGhlIGNvdW50ZXJzIGFyZSBhbGwgaW4gdXNlLiAqLworCQlyZXR1cm4gLUVBR0FJTjsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCithcm12NnBtdV9kaXNhYmxlX2V2ZW50KHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsCisJCSAgICAgICBpbnQgaWR4KQoreworCXVuc2lnbmVkIGxvbmcgdmFsLCBtYXNrLCBldnQsIGZsYWdzOworCisJaWYgKEFSTVY2X0NZQ0xFX0NPVU5URVIgPT0gaWR4KSB7CisJCW1hc2sJPSBBUk1WNl9QTUNSX0NDT1VOVF9JRU47CisJCWV2dAk9IDA7CisJfSBlbHNlIGlmIChBUk1WNl9DT1VOVEVSMCA9PSBpZHgpIHsKKwkJbWFzawk9IEFSTVY2X1BNQ1JfQ09VTlQwX0lFTiB8IEFSTVY2X1BNQ1JfRVZUX0NPVU5UMF9NQVNLOworCQlldnQJPSBBUk1WNl9QRVJGQ1RSX05PUCA8PCBBUk1WNl9QTUNSX0VWVF9DT1VOVDBfU0hJRlQ7CisJfSBlbHNlIGlmIChBUk1WNl9DT1VOVEVSMSA9PSBpZHgpIHsKKwkJbWFzawk9IEFSTVY2X1BNQ1JfQ09VTlQxX0lFTiB8IEFSTVY2X1BNQ1JfRVZUX0NPVU5UMV9NQVNLOworCQlldnQJPSBBUk1WNl9QRVJGQ1RSX05PUCA8PCBBUk1WNl9QTUNSX0VWVF9DT1VOVDFfU0hJRlQ7CisJfSBlbHNlIHsKKwkJV0FSTl9PTkNFKDEsICJpbnZhbGlkIGNvdW50ZXIgbnVtYmVyICglZClcbiIsIGlkeCk7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIE1hc2sgb3V0IHRoZSBjdXJyZW50IGV2ZW50IGFuZCBzZXQgdGhlIGNvdW50ZXIgdG8gY291bnQgdGhlIG51bWJlcgorCSAqIG9mIEVUTSBidXMgc2lnbmFsIGFzc2VydGlvbiBjeWNsZXMuIFRoZSBleHRlcm5hbCByZXBvcnRpbmcgc2hvdWxkCisJICogYmUgZGlzYWJsZWQgYW5kIHNvIHRoaXMgc2hvdWxkIG5ldmVyIGluY3JlbWVudC4KKwkgKi8KKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnBtdV9sb2NrLCBmbGFncyk7CisJdmFsID0gYXJtdjZfcG1jcl9yZWFkKCk7CisJdmFsICY9IH5tYXNrOworCXZhbCB8PSBldnQ7CisJYXJtdjZfcG1jcl93cml0ZSh2YWwpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbXVfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZAorYXJtdjZtcGNvcmVfcG11X2Rpc2FibGVfZXZlbnQoc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YywKKwkJCSAgICAgIGludCBpZHgpCit7CisJdW5zaWduZWQgbG9uZyB2YWwsIG1hc2ssIGZsYWdzLCBldnQgPSAwOworCisJaWYgKEFSTVY2X0NZQ0xFX0NPVU5URVIgPT0gaWR4KSB7CisJCW1hc2sJPSBBUk1WNl9QTUNSX0NDT1VOVF9JRU47CisJfSBlbHNlIGlmIChBUk1WNl9DT1VOVEVSMCA9PSBpZHgpIHsKKwkJbWFzawk9IEFSTVY2X1BNQ1JfQ09VTlQwX0lFTjsKKwl9IGVsc2UgaWYgKEFSTVY2X0NPVU5URVIxID09IGlkeCkgeworCQltYXNrCT0gQVJNVjZfUE1DUl9DT1VOVDFfSUVOOworCX0gZWxzZSB7CisJCVdBUk5fT05DRSgxLCAiaW52YWxpZCBjb3VudGVyIG51bWJlciAoJWQpXG4iLCBpZHgpOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBVbmxpa2UgVVAgQVJNdjYsIHdlIGRvbid0IGhhdmUgYSB3YXkgb2Ygc3RvcHBpbmcgdGhlIGNvdW50ZXJzLiBXZQorCSAqIHNpbXBseSBkaXNhYmxlIHRoZSBpbnRlcnJ1cHQgcmVwb3J0aW5nLgorCSAqLworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcG11X2xvY2ssIGZsYWdzKTsKKwl2YWwgPSBhcm12Nl9wbWNyX3JlYWQoKTsKKwl2YWwgJj0gfm1hc2s7CisJdmFsIHw9IGV2dDsKKwlhcm12Nl9wbWNyX3dyaXRlKHZhbCk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtdV9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXJtX3BtdSBhcm12NnBtdSA9IHsKKwkuaWQJCQk9IEFSTV9QRVJGX1BNVV9JRF9WNiwKKwkubmFtZQkJCT0gInY2IiwKKwkuaGFuZGxlX2lycQkJPSBhcm12NnBtdV9oYW5kbGVfaXJxLAorCS5lbmFibGUJCQk9IGFybXY2cG11X2VuYWJsZV9ldmVudCwKKwkuZGlzYWJsZQkJPSBhcm12NnBtdV9kaXNhYmxlX2V2ZW50LAorCS5yZWFkX2NvdW50ZXIJCT0gYXJtdjZwbXVfcmVhZF9jb3VudGVyLAorCS53cml0ZV9jb3VudGVyCQk9IGFybXY2cG11X3dyaXRlX2NvdW50ZXIsCisJLmdldF9ldmVudF9pZHgJCT0gYXJtdjZwbXVfZ2V0X2V2ZW50X2lkeCwKKwkuc3RhcnQJCQk9IGFybXY2cG11X3N0YXJ0LAorCS5zdG9wCQkJPSBhcm12NnBtdV9zdG9wLAorCS5jYWNoZV9tYXAJCT0gJmFybXY2X3BlcmZfY2FjaGVfbWFwLAorCS5ldmVudF9tYXAJCT0gJmFybXY2X3BlcmZfbWFwLAorCS5yYXdfZXZlbnRfbWFzawkJPSAweEZGLAorCS5udW1fZXZlbnRzCQk9IDMsCisJLm1heF9wZXJpb2QJCT0gKDFMTFUgPDwgMzIpIC0gMSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXJtX3BtdSAqX19pbml0IGFybXY2cG11X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gJmFybXY2cG11OworfQorCisvKgorICogQVJNdjZtcGNvcmUgaXMgYWxtb3N0IGlkZW50aWNhbCB0byBzaW5nbGUgY29yZSBBUk12NiB3aXRoIHRoZSBleGNlcHRpb24KKyAqIHRoYXQgc29tZSBvZiB0aGUgZXZlbnRzIGhhdmUgZGlmZmVyZW50IGVudW1lcmF0aW9ucyBhbmQgdGhhdCB0aGVyZSBpcyBubworICogKmhhY2sqIHRvIHN0b3AgdGhlIHByb2dyYW1tYWJsZSBjb3VudGVycy4gVG8gc3RvcCB0aGUgY291bnRlcnMgd2Ugc2ltcGx5CisgKiBkaXNhYmxlIHRoZSBpbnRlcnJ1cHQgcmVwb3J0aW5nIGFuZCB1cGRhdGUgdGhlIGV2ZW50LiBXaGVuIHVudGhyb3R0bGluZyB3ZQorICogcmVzZXQgdGhlIHBlcmlvZCBhbmQgZW5hYmxlIHRoZSBpbnRlcnJ1cHQgcmVwb3J0aW5nLgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGFybV9wbXUgYXJtdjZtcGNvcmVfcG11ID0geworCS5pZAkJCT0gQVJNX1BFUkZfUE1VX0lEX1Y2TVAsCisJLm5hbWUJCQk9ICJ2Nm1wY29yZSIsCisJLmhhbmRsZV9pcnEJCT0gYXJtdjZwbXVfaGFuZGxlX2lycSwKKwkuZW5hYmxlCQkJPSBhcm12NnBtdV9lbmFibGVfZXZlbnQsCisJLmRpc2FibGUJCT0gYXJtdjZtcGNvcmVfcG11X2Rpc2FibGVfZXZlbnQsCisJLnJlYWRfY291bnRlcgkJPSBhcm12NnBtdV9yZWFkX2NvdW50ZXIsCisJLndyaXRlX2NvdW50ZXIJCT0gYXJtdjZwbXVfd3JpdGVfY291bnRlciwKKwkuZ2V0X2V2ZW50X2lkeAkJPSBhcm12NnBtdV9nZXRfZXZlbnRfaWR4LAorCS5zdGFydAkJCT0gYXJtdjZwbXVfc3RhcnQsCisJLnN0b3AJCQk9IGFybXY2cG11X3N0b3AsCisJLmNhY2hlX21hcAkJPSAmYXJtdjZtcGNvcmVfcGVyZl9jYWNoZV9tYXAsCisJLmV2ZW50X21hcAkJPSAmYXJtdjZtcGNvcmVfcGVyZl9tYXAsCisJLnJhd19ldmVudF9tYXNrCQk9IDB4RkYsCisJLm51bV9ldmVudHMJCT0gMywKKwkubWF4X3BlcmlvZAkJPSAoMUxMVSA8PCAzMikgLSAxLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhcm1fcG11ICpfX2luaXQgYXJtdjZtcGNvcmVfcG11X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gJmFybXY2bXBjb3JlX3BtdTsKK30KKyNlbHNlCitzdGF0aWMgY29uc3Qgc3RydWN0IGFybV9wbXUgKl9faW5pdCBhcm12NnBtdV9pbml0KHZvaWQpCit7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXJtX3BtdSAqX19pbml0IGFybXY2bXBjb3JlX3BtdV9pbml0KHZvaWQpCit7CisJcmV0dXJuIE5VTEw7Cit9CisjZW5kaWYJLyogQ09ORklHX0NQVV9WNiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3BlcmZfZXZlbnRfdjcuYyBiL2FyY2gvYXJtL2tlcm5lbC9wZXJmX2V2ZW50X3Y3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmUxNDAyNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9wZXJmX2V2ZW50X3Y3LmMKQEAgLTAsMCArMSw5MDYgQEAKKy8qCisgKiBBUk12NyBDb3J0ZXgtQTggYW5kIENvcnRleC1BOSBQZXJmb3JtYW5jZSBFdmVudHMgaGFuZGxpbmcgY29kZS4KKyAqCisgKiBBUk12NyBzdXBwb3J0OiBKZWFuIFBpaGV0IDxqcGloZXRAbXZpc3RhLmNvbT4KKyAqIDIwMTAgKGMpIE1vbnRhVmlzdGEgU29mdHdhcmUsIExMQy4KKyAqCisgKiBDb3BpZWQgZnJvbSBBUk12NiBjb2RlLCB3aXRoIHRoZSBsb3cgbGV2ZWwgY29kZSBpbnNwaXJlZAorICogIGJ5IHRoZSBBUk12NyBPcHJvZmlsZSBjb2RlLgorICoKKyAqIENvcnRleC1BOCBoYXMgdXAgdG8gNCBjb25maWd1cmFibGUgcGVyZm9ybWFuY2UgY291bnRlcnMgYW5kCisgKiAgYSBzaW5nbGUgY3ljbGUgY291bnRlci4KKyAqIENvcnRleC1BOSBoYXMgdXAgdG8gMzEgY29uZmlndXJhYmxlIHBlcmZvcm1hbmNlIGNvdW50ZXJzIGFuZAorICogIGEgc2luZ2xlIGN5Y2xlIGNvdW50ZXIuCisgKgorICogQWxsIGNvdW50ZXJzIGNhbiBiZSBlbmFibGVkL2Rpc2FibGVkIGFuZCBJUlEgbWFza2VkIHNlcGFyYXRlbHkuIFRoZSBjeWNsZQorICogIGNvdW50ZXIgYW5kIGFsbCA0IHBlcmZvcm1hbmNlIGNvdW50ZXJzIHRvZ2V0aGVyIGNhbiBiZSByZXNldCBzZXBhcmF0ZWx5LgorICovCisKKyNpZmRlZiBDT05GSUdfQ1BVX1Y3CisvKiBDb21tb24gQVJNdjcgZXZlbnQgdHlwZXMgKi8KK2VudW0gYXJtdjdfcGVyZl90eXBlcyB7CisJQVJNVjdfUEVSRkNUUl9QTU5DX1NXX0lOQ1IJCT0gMHgwMCwKKwlBUk1WN19QRVJGQ1RSX0lGRVRDSF9NSVNTCQk9IDB4MDEsCisJQVJNVjdfUEVSRkNUUl9JVExCX01JU1MJCQk9IDB4MDIsCisJQVJNVjdfUEVSRkNUUl9EQ0FDSEVfUkVGSUxMCQk9IDB4MDMsCisJQVJNVjdfUEVSRkNUUl9EQ0FDSEVfQUNDRVNTCQk9IDB4MDQsCisJQVJNVjdfUEVSRkNUUl9EVExCX1JFRklMTAkJPSAweDA1LAorCUFSTVY3X1BFUkZDVFJfRFJFQUQJCQk9IDB4MDYsCisJQVJNVjdfUEVSRkNUUl9EV1JJVEUJCQk9IDB4MDcsCisKKwlBUk1WN19QRVJGQ1RSX0VYQ19UQUtFTgkJCT0gMHgwOSwKKwlBUk1WN19QRVJGQ1RSX0VYQ19FWEVDVVRFRAkJPSAweDBBLAorCUFSTVY3X1BFUkZDVFJfQ0lEX1dSSVRFCQkJPSAweDBCLAorCS8qIEFSTVY3X1BFUkZDVFJfUENfV1JJVEUgaXMgZXF1aXZhbGVudCB0byBIV19CUkFOQ0hfSU5TVFJVQ1RJT05TLgorCSAqIEl0IGNvdW50czoKKwkgKiAgLSBhbGwgYnJhbmNoIGluc3RydWN0aW9ucywKKwkgKiAgLSBpbnN0cnVjdGlvbnMgdGhhdCBleHBsaWNpdGx5IHdyaXRlIHRoZSBQQywKKwkgKiAgLSBleGNlcHRpb24gZ2VuZXJhdGluZyBpbnN0cnVjdGlvbnMuCisJICovCisJQVJNVjdfUEVSRkNUUl9QQ19XUklURQkJCT0gMHgwQywKKwlBUk1WN19QRVJGQ1RSX1BDX0lNTV9CUkFOQ0gJCT0gMHgwRCwKKwlBUk1WN19QRVJGQ1RSX1VOQUxJR05FRF9BQ0NFU1MJCT0gMHgwRiwKKwlBUk1WN19QRVJGQ1RSX1BDX0JSQU5DSF9NSVNfUFJFRAk9IDB4MTAsCisJQVJNVjdfUEVSRkNUUl9DTE9DS19DWUNMRVMJCT0gMHgxMSwKKworCUFSTVY3X1BFUkZDVFJfUENfQlJBTkNIX01JU19VU0VECT0gMHgxMiwKKworCUFSTVY3X1BFUkZDVFJfQ1BVX0NZQ0xFUwkJPSAweEZGCit9OworCisvKiBBUk12NyBDb3J0ZXgtQTggc3BlY2lmaWMgZXZlbnQgdHlwZXMgKi8KK2VudW0gYXJtdjdfYThfcGVyZl90eXBlcyB7CisJQVJNVjdfUEVSRkNUUl9JTlNUUl9FWEVDVVRFRAkJPSAweDA4LAorCisJQVJNVjdfUEVSRkNUUl9QQ19QUk9DX1JFVFVSTgkJPSAweDBFLAorCisJQVJNVjdfUEVSRkNUUl9XUklURV9CVUZGRVJfRlVMTAkJPSAweDQwLAorCUFSTVY3X1BFUkZDVFJfTDJfU1RPUkVfTUVSR0VECQk9IDB4NDEsCisJQVJNVjdfUEVSRkNUUl9MMl9TVE9SRV9CVUZGCQk9IDB4NDIsCisJQVJNVjdfUEVSRkNUUl9MMl9BQ0NFU1MJCQk9IDB4NDMsCisJQVJNVjdfUEVSRkNUUl9MMl9DQUNIX01JU1MJCT0gMHg0NCwKKwlBUk1WN19QRVJGQ1RSX0FYSV9SRUFEX0NZQ0xFUwkJPSAweDQ1LAorCUFSTVY3X1BFUkZDVFJfQVhJX1dSSVRFX0NZQ0xFUwkJPSAweDQ2LAorCUFSTVY3X1BFUkZDVFJfTUVNT1JZX1JFUExBWQkJPSAweDQ3LAorCUFSTVY3X1BFUkZDVFJfVU5BTElHTkVEX0FDQ0VTU19SRVBMQVkJPSAweDQ4LAorCUFSTVY3X1BFUkZDVFJfTDFfREFUQV9NSVNTCQk9IDB4NDksCisJQVJNVjdfUEVSRkNUUl9MMV9JTlNUX01JU1MJCT0gMHg0QSwKKwlBUk1WN19QRVJGQ1RSX0wxX0RBVEFfQ09MT1JJTkcJCT0gMHg0QiwKKwlBUk1WN19QRVJGQ1RSX0wxX05FT05fREFUQQkJPSAweDRDLAorCUFSTVY3X1BFUkZDVFJfTDFfTkVPTl9DQUNIX0RBVEEJCT0gMHg0RCwKKwlBUk1WN19QRVJGQ1RSX0wyX05FT04JCQk9IDB4NEUsCisJQVJNVjdfUEVSRkNUUl9MMl9ORU9OX0hJVAkJPSAweDRGLAorCUFSTVY3X1BFUkZDVFJfTDFfSU5TVAkJCT0gMHg1MCwKKwlBUk1WN19QRVJGQ1RSX1BDX1JFVFVSTl9NSVNfUFJFRAk9IDB4NTEsCisJQVJNVjdfUEVSRkNUUl9QQ19CUkFOQ0hfRkFJTEVECQk9IDB4NTIsCisJQVJNVjdfUEVSRkNUUl9QQ19CUkFOQ0hfVEFLRU4JCT0gMHg1MywKKwlBUk1WN19QRVJGQ1RSX1BDX0JSQU5DSF9FWEVDVVRFRAk9IDB4NTQsCisJQVJNVjdfUEVSRkNUUl9PUF9FWEVDVVRFRAkJPSAweDU1LAorCUFSTVY3X1BFUkZDVFJfQ1lDTEVTX0lOU1RfU1RBTEwJCT0gMHg1NiwKKwlBUk1WN19QRVJGQ1RSX0NZQ0xFU19JTlNUCQk9IDB4NTcsCisJQVJNVjdfUEVSRkNUUl9DWUNMRVNfTkVPTl9EQVRBX1NUQUxMCT0gMHg1OCwKKwlBUk1WN19QRVJGQ1RSX0NZQ0xFU19ORU9OX0lOU1RfU1RBTEwJPSAweDU5LAorCUFSTVY3X1BFUkZDVFJfTkVPTl9DWUNMRVMJCT0gMHg1QSwKKworCUFSTVY3X1BFUkZDVFJfUE1VMF9FVkVOVFMJCT0gMHg3MCwKKwlBUk1WN19QRVJGQ1RSX1BNVTFfRVZFTlRTCQk9IDB4NzEsCisJQVJNVjdfUEVSRkNUUl9QTVVfRVZFTlRTCQk9IDB4NzIsCit9OworCisvKiBBUk12NyBDb3J0ZXgtQTkgc3BlY2lmaWMgZXZlbnQgdHlwZXMgKi8KK2VudW0gYXJtdjdfYTlfcGVyZl90eXBlcyB7CisJQVJNVjdfUEVSRkNUUl9KQVZBX0hXX0JZVEVDT0RFX0VYRUMJPSAweDQwLAorCUFSTVY3X1BFUkZDVFJfSkFWQV9TV19CWVRFQ09ERV9FWEVDCT0gMHg0MSwKKwlBUk1WN19QRVJGQ1RSX0pBWkVMTEVfQlJBTkNIX0VYRUMJPSAweDQyLAorCisJQVJNVjdfUEVSRkNUUl9DT0hFUkVOVF9MSU5FX01JU1MJPSAweDUwLAorCUFSTVY3X1BFUkZDVFJfQ09IRVJFTlRfTElORV9ISVQJCT0gMHg1MSwKKworCUFSTVY3X1BFUkZDVFJfSUNBQ0hFX0RFUF9TVEFMTF9DWUNMRVMJPSAweDYwLAorCUFSTVY3X1BFUkZDVFJfRENBQ0hFX0RFUF9TVEFMTF9DWUNMRVMJPSAweDYxLAorCUFSTVY3X1BFUkZDVFJfVExCX01JU1NfREVQX1NUQUxMX0NZQ0xFUwk9IDB4NjIsCisJQVJNVjdfUEVSRkNUUl9TVFJFWF9FWEVDVVRFRF9QQVNTRUQJPSAweDYzLAorCUFSTVY3X1BFUkZDVFJfU1RSRVhfRVhFQ1VURURfRkFJTEVECT0gMHg2NCwKKwlBUk1WN19QRVJGQ1RSX0RBVEFfRVZJQ1RJT04JCT0gMHg2NSwKKwlBUk1WN19QRVJGQ1RSX0lTU1VFX1NUQUdFX05PX0lOU1QJPSAweDY2LAorCUFSTVY3X1BFUkZDVFJfSVNTVUVfU1RBR0VfRU1QVFkJCT0gMHg2NywKKwlBUk1WN19QRVJGQ1RSX0lOU1RfT1VUX09GX1JFTkFNRV9TVEFHRQk9IDB4NjgsCisKKwlBUk1WN19QRVJGQ1RSX1BSRURJQ1RBQkxFX0ZVTkNUX1JFVFVSTlMJPSAweDZFLAorCisJQVJNVjdfUEVSRkNUUl9NQUlOX1VOSVRfRVhFQ1VURURfSU5TVAk9IDB4NzAsCisJQVJNVjdfUEVSRkNUUl9TRUNPTkRfVU5JVF9FWEVDVVRFRF9JTlNUCT0gMHg3MSwKKwlBUk1WN19QRVJGQ1RSX0xEX1NUX1VOSVRfRVhFQ1VURURfSU5TVAk9IDB4NzIsCisJQVJNVjdfUEVSRkNUUl9GUF9FWEVDVVRFRF9JTlNUCQk9IDB4NzMsCisJQVJNVjdfUEVSRkNUUl9ORU9OX0VYRUNVVEVEX0lOU1QJPSAweDc0LAorCisJQVJNVjdfUEVSRkNUUl9QTERfRlVMTF9ERVBfU1RBTExfQ1lDTEVTCT0gMHg4MCwKKwlBUk1WN19QRVJGQ1RSX0RBVEFfV1JfREVQX1NUQUxMX0NZQ0xFUwk9IDB4ODEsCisJQVJNVjdfUEVSRkNUUl9JVExCX01JU1NfREVQX1NUQUxMX0NZQ0xFUwk9IDB4ODIsCisJQVJNVjdfUEVSRkNUUl9EVExCX01JU1NfREVQX1NUQUxMX0NZQ0xFUwk9IDB4ODMsCisJQVJNVjdfUEVSRkNUUl9NSUNST19JVExCX01JU1NfREVQX1NUQUxMX0NZQ0xFUwk9IDB4ODQsCisJQVJNVjdfUEVSRkNUUl9NSUNST19EVExCX01JU1NfREVQX1NUQUxMX0NZQ0xFUwk9IDB4ODUsCisJQVJNVjdfUEVSRkNUUl9ETUJfREVQX1NUQUxMX0NZQ0xFUwk9IDB4ODYsCisKKwlBUk1WN19QRVJGQ1RSX0lOVEdSX0NMS19FTkFCTEVEX0NZQ0xFUwk9IDB4OEEsCisJQVJNVjdfUEVSRkNUUl9EQVRBX0VOR0lORV9DTEtfRU5fQ1lDTEVTCT0gMHg4QiwKKworCUFSTVY3X1BFUkZDVFJfSVNCX0lOU1QJCQk9IDB4OTAsCisJQVJNVjdfUEVSRkNUUl9EU0JfSU5TVAkJCT0gMHg5MSwKKwlBUk1WN19QRVJGQ1RSX0RNQl9JTlNUCQkJPSAweDkyLAorCUFSTVY3X1BFUkZDVFJfRVhUX0lOVEVSUlVQVFMJCT0gMHg5MywKKworCUFSTVY3X1BFUkZDVFJfUExFX0NBQ0hFX0xJTkVfUlFTVF9DT01QTEVURUQJPSAweEEwLAorCUFSTVY3X1BFUkZDVFJfUExFX0NBQ0hFX0xJTkVfUlFTVF9TS0lQUEVECT0gMHhBMSwKKwlBUk1WN19QRVJGQ1RSX1BMRV9GSUZPX0ZMVVNICQk9IDB4QTIsCisJQVJNVjdfUEVSRkNUUl9QTEVfUlFTVF9DT01QTEVURUQJPSAweEEzLAorCUFSTVY3X1BFUkZDVFJfUExFX0ZJRk9fT1ZFUkZMT1cJCT0gMHhBNCwKKwlBUk1WN19QRVJGQ1RSX1BMRV9SUVNUX1BST0cJCT0gMHhBNQorfTsKKworLyoKKyAqIENvcnRleC1BOCBIVyBldmVudHMgbWFwcGluZworICoKKyAqIFRoZSBoYXJkd2FyZSBldmVudHMgdGhhdCB3ZSBzdXBwb3J0LiBXZSBkbyBzdXBwb3J0IGNhY2hlIG9wZXJhdGlvbnMgYnV0CisgKiB3ZSBoYXZlIGhhcnZhcmQgY2FjaGVzIGFuZCBubyB3YXkgdG8gY29tYmluZSBpbnN0cnVjdGlvbiBhbmQgZGF0YQorICogYWNjZXNzZXMvbWlzc2VzIGluIGhhcmR3YXJlLgorICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgYXJtdjdfYThfcGVyZl9tYXBbUEVSRl9DT1VOVF9IV19NQVhdID0geworCVtQRVJGX0NPVU5UX0hXX0NQVV9DWUNMRVNdCSAgICA9IEFSTVY3X1BFUkZDVFJfQ1BVX0NZQ0xFUywKKwlbUEVSRl9DT1VOVF9IV19JTlNUUlVDVElPTlNdCSAgICA9IEFSTVY3X1BFUkZDVFJfSU5TVFJfRVhFQ1VURUQsCisJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfUkVGRVJFTkNFU10gICAgPSBIV19PUF9VTlNVUFBPUlRFRCwKKwlbUEVSRl9DT1VOVF9IV19DQUNIRV9NSVNTRVNdCSAgICA9IEhXX09QX1VOU1VQUE9SVEVELAorCVtQRVJGX0NPVU5UX0hXX0JSQU5DSF9JTlNUUlVDVElPTlNdID0gQVJNVjdfUEVSRkNUUl9QQ19XUklURSwKKwlbUEVSRl9DT1VOVF9IV19CUkFOQ0hfTUlTU0VTXQkgICAgPSBBUk1WN19QRVJGQ1RSX1BDX0JSQU5DSF9NSVNfUFJFRCwKKwlbUEVSRl9DT1VOVF9IV19CVVNfQ1lDTEVTXQkgICAgPSBBUk1WN19QRVJGQ1RSX0NMT0NLX0NZQ0xFUywKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBhcm12N19hOF9wZXJmX2NhY2hlX21hcFtQRVJGX0NPVU5UX0hXX0NBQ0hFX01BWF0KKwkJCQkJICBbUEVSRl9DT1VOVF9IV19DQUNIRV9PUF9NQVhdCisJCQkJCSAgW1BFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX01BWF0gPSB7CisJW0MoTDFEKV0gPSB7CisJCS8qCisJCSAqIFRoZSBwZXJmb3JtYW5jZSBjb3VudGVycyBkb24ndCBkaWZmZXJlbnRpYXRlIGJldHdlZW4gcmVhZAorCQkgKiBhbmQgd3JpdGUgYWNjZXNzZXMvbWlzc2VzIHNvIHRoaXMgaXNuJ3Qgc3RyaWN0bHkgY29ycmVjdCwKKwkJICogYnV0IGl0J3MgdGhlIGJlc3Qgd2UgY2FuIGRvLiBXcml0ZXMgYW5kIHJlYWRzIGdldAorCQkgKiBjb21iaW5lZC4KKwkJICovCisJCVtDKE9QX1JFQUQpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IEFSTVY3X1BFUkZDVFJfRENBQ0hFX0FDQ0VTUywKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBBUk1WN19QRVJGQ1RSX0RDQUNIRV9SRUZJTEwsCisJCX0sCisJCVtDKE9QX1dSSVRFKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBBUk1WN19QRVJGQ1RSX0RDQUNIRV9BQ0NFU1MsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gQVJNVjdfUEVSRkNUUl9EQ0FDSEVfUkVGSUxMLAorCQl9LAorCQlbQyhPUF9QUkVGRVRDSCldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCX0sCisJfSwKKwlbQyhMMUkpXSA9IHsKKwkJW0MoT1BfUkVBRCldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQVJNVjdfUEVSRkNUUl9MMV9JTlNULAorCQkJW0MoUkVTVUxUX01JU1MpXQk9IEFSTVY3X1BFUkZDVFJfTDFfSU5TVF9NSVNTLAorCQl9LAorCQlbQyhPUF9XUklURSldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQVJNVjdfUEVSRkNUUl9MMV9JTlNULAorCQkJW0MoUkVTVUxUX01JU1MpXQk9IEFSTVY3X1BFUkZDVFJfTDFfSU5TVF9NSVNTLAorCQl9LAorCQlbQyhPUF9QUkVGRVRDSCldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCX0sCisJfSwKKwlbQyhMTCldID0geworCQlbQyhPUF9SRUFEKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBBUk1WN19QRVJGQ1RSX0wyX0FDQ0VTUywKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBBUk1WN19QRVJGQ1RSX0wyX0NBQ0hfTUlTUywKKwkJfSwKKwkJW0MoT1BfV1JJVEUpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IEFSTVY3X1BFUkZDVFJfTDJfQUNDRVNTLAorCQkJW0MoUkVTVUxUX01JU1MpXQk9IEFSTVY3X1BFUkZDVFJfTDJfQ0FDSF9NSVNTLAorCQl9LAorCQlbQyhPUF9QUkVGRVRDSCldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCX0sCisJfSwKKwlbQyhEVExCKV0gPSB7CisJCS8qCisJCSAqIE9ubHkgSVRMQiBtaXNzZXMgYW5kIERUTEIgcmVmaWxscyBhcmUgc3VwcG9ydGVkLgorCQkgKiBJZiB1c2VycyB3YW50IHRoZSBEVExCIHJlZmlsbHMgbWlzc2VzIGEgcmF3IGNvdW50ZXIKKwkJICogbXVzdCBiZSB1c2VkLgorCQkgKi8KKwkJW0MoT1BfUkVBRCldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gQVJNVjdfUEVSRkNUUl9EVExCX1JFRklMTCwKKwkJfSwKKwkJW0MoT1BfV1JJVEUpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXQk9IEFSTVY3X1BFUkZDVFJfRFRMQl9SRUZJTEwsCisJCX0sCisJCVtDKE9QX1BSRUZFVENIKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJfSwKKwl9LAorCVtDKElUTEIpXSA9IHsKKwkJW0MoT1BfUkVBRCldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gQVJNVjdfUEVSRkNUUl9JVExCX01JU1MsCisJCX0sCisJCVtDKE9QX1dSSVRFKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBBUk1WN19QRVJGQ1RSX0lUTEJfTUlTUywKKwkJfSwKKwkJW0MoT1BfUFJFRkVUQ0gpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQl9LAorCX0sCisJW0MoQlBVKV0gPSB7CisJCVtDKE9QX1JFQUQpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IEFSTVY3X1BFUkZDVFJfUENfV1JJVEUsCisJCQlbQyhSRVNVTFRfTUlTUyldCisJCQkJCT0gQVJNVjdfUEVSRkNUUl9QQ19CUkFOQ0hfTUlTX1BSRUQsCisJCX0sCisJCVtDKE9QX1dSSVRFKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBBUk1WN19QRVJGQ1RSX1BDX1dSSVRFLAorCQkJW0MoUkVTVUxUX01JU1MpXQorCQkJCQk9IEFSTVY3X1BFUkZDVFJfUENfQlJBTkNIX01JU19QUkVELAorCQl9LAorCQlbQyhPUF9QUkVGRVRDSCldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCX0sCisJfSwKK307CisKKy8qCisgKiBDb3J0ZXgtQTkgSFcgZXZlbnRzIG1hcHBpbmcKKyAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGFybXY3X2E5X3BlcmZfbWFwW1BFUkZfQ09VTlRfSFdfTUFYXSA9IHsKKwlbUEVSRl9DT1VOVF9IV19DUFVfQ1lDTEVTXQkgICAgPSBBUk1WN19QRVJGQ1RSX0NQVV9DWUNMRVMsCisJW1BFUkZfQ09VTlRfSFdfSU5TVFJVQ1RJT05TXQkgICAgPQorCQkJCQlBUk1WN19QRVJGQ1RSX0lOU1RfT1VUX09GX1JFTkFNRV9TVEFHRSwKKwlbUEVSRl9DT1VOVF9IV19DQUNIRV9SRUZFUkVOQ0VTXSAgICA9IEFSTVY3X1BFUkZDVFJfQ09IRVJFTlRfTElORV9ISVQsCisJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfTUlTU0VTXQkgICAgPSBBUk1WN19QRVJGQ1RSX0NPSEVSRU5UX0xJTkVfTUlTUywKKwlbUEVSRl9DT1VOVF9IV19CUkFOQ0hfSU5TVFJVQ1RJT05TXSA9IEFSTVY3X1BFUkZDVFJfUENfV1JJVEUsCisJW1BFUkZfQ09VTlRfSFdfQlJBTkNIX01JU1NFU10JICAgID0gQVJNVjdfUEVSRkNUUl9QQ19CUkFOQ0hfTUlTX1BSRUQsCisJW1BFUkZfQ09VTlRfSFdfQlVTX0NZQ0xFU10JICAgID0gQVJNVjdfUEVSRkNUUl9DTE9DS19DWUNMRVMsCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgYXJtdjdfYTlfcGVyZl9jYWNoZV9tYXBbUEVSRl9DT1VOVF9IV19DQUNIRV9NQVhdCisJCQkJCSAgW1BFUkZfQ09VTlRfSFdfQ0FDSEVfT1BfTUFYXQorCQkJCQkgIFtQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9NQVhdID0geworCVtDKEwxRCldID0geworCQkvKgorCQkgKiBUaGUgcGVyZm9ybWFuY2UgY291bnRlcnMgZG9uJ3QgZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIHJlYWQKKwkJICogYW5kIHdyaXRlIGFjY2Vzc2VzL21pc3NlcyBzbyB0aGlzIGlzbid0IHN0cmljdGx5IGNvcnJlY3QsCisJCSAqIGJ1dCBpdCdzIHRoZSBiZXN0IHdlIGNhbiBkby4gV3JpdGVzIGFuZCByZWFkcyBnZXQKKwkJICogY29tYmluZWQuCisJCSAqLworCQlbQyhPUF9SRUFEKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBBUk1WN19QRVJGQ1RSX0RDQUNIRV9BQ0NFU1MsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gQVJNVjdfUEVSRkNUUl9EQ0FDSEVfUkVGSUxMLAorCQl9LAorCQlbQyhPUF9XUklURSldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQVJNVjdfUEVSRkNUUl9EQ0FDSEVfQUNDRVNTLAorCQkJW0MoUkVTVUxUX01JU1MpXQk9IEFSTVY3X1BFUkZDVFJfRENBQ0hFX1JFRklMTCwKKwkJfSwKKwkJW0MoT1BfUFJFRkVUQ0gpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQl9LAorCX0sCisJW0MoTDFJKV0gPSB7CisJCVtDKE9QX1JFQUQpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXQk9IEFSTVY3X1BFUkZDVFJfSUZFVENIX01JU1MsCisJCX0sCisJCVtDKE9QX1dSSVRFKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBBUk1WN19QRVJGQ1RSX0lGRVRDSF9NSVNTLAorCQl9LAorCQlbQyhPUF9QUkVGRVRDSCldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCX0sCisJfSwKKwlbQyhMTCldID0geworCQlbQyhPUF9SRUFEKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJfSwKKwkJW0MoT1BfV1JJVEUpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQl9LAorCQlbQyhPUF9QUkVGRVRDSCldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCX0sCisJfSwKKwlbQyhEVExCKV0gPSB7CisJCS8qCisJCSAqIE9ubHkgSVRMQiBtaXNzZXMgYW5kIERUTEIgcmVmaWxscyBhcmUgc3VwcG9ydGVkLgorCQkgKiBJZiB1c2VycyB3YW50IHRoZSBEVExCIHJlZmlsbHMgbWlzc2VzIGEgcmF3IGNvdW50ZXIKKwkJICogbXVzdCBiZSB1c2VkLgorCQkgKi8KKwkJW0MoT1BfUkVBRCldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gQVJNVjdfUEVSRkNUUl9EVExCX1JFRklMTCwKKwkJfSwKKwkJW0MoT1BfV1JJVEUpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXQk9IEFSTVY3X1BFUkZDVFJfRFRMQl9SRUZJTEwsCisJCX0sCisJCVtDKE9QX1BSRUZFVENIKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJfSwKKwl9LAorCVtDKElUTEIpXSA9IHsKKwkJW0MoT1BfUkVBRCldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gQVJNVjdfUEVSRkNUUl9JVExCX01JU1MsCisJCX0sCisJCVtDKE9QX1dSSVRFKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBBUk1WN19QRVJGQ1RSX0lUTEJfTUlTUywKKwkJfSwKKwkJW0MoT1BfUFJFRkVUQ0gpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQl9LAorCX0sCisJW0MoQlBVKV0gPSB7CisJCVtDKE9QX1JFQUQpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IEFSTVY3X1BFUkZDVFJfUENfV1JJVEUsCisJCQlbQyhSRVNVTFRfTUlTUyldCisJCQkJCT0gQVJNVjdfUEVSRkNUUl9QQ19CUkFOQ0hfTUlTX1BSRUQsCisJCX0sCisJCVtDKE9QX1dSSVRFKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBBUk1WN19QRVJGQ1RSX1BDX1dSSVRFLAorCQkJW0MoUkVTVUxUX01JU1MpXQorCQkJCQk9IEFSTVY3X1BFUkZDVFJfUENfQlJBTkNIX01JU19QUkVELAorCQl9LAorCQlbQyhPUF9QUkVGRVRDSCldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCX0sCisJfSwKK307CisKKy8qCisgKiBQZXJmIEV2ZW50cyBjb3VudGVycworICovCitlbnVtIGFybXY3X2NvdW50ZXJzIHsKKwlBUk1WN19DWUNMRV9DT1VOVEVSCQk9IDEsCS8qIEN5Y2xlIGNvdW50ZXIgKi8KKwlBUk1WN19DT1VOVEVSMAkJCT0gMiwJLyogRmlyc3QgZXZlbnQgY291bnRlciAqLworfTsKKworLyoKKyAqIFRoZSBjeWNsZSBjb3VudGVyIGlzIEFSTVY3X0NZQ0xFX0NPVU5URVIuCisgKiBUaGUgZmlyc3QgZXZlbnQgY291bnRlciBpcyBBUk1WN19DT1VOVEVSMC4KKyAqIFRoZSBsYXN0IGV2ZW50IGNvdW50ZXIgaXMgKEFSTVY3X0NPVU5URVIwICsgYXJtcG11LT5udW1fZXZlbnRzIC0gMSkuCisgKi8KKyNkZWZpbmUJQVJNVjdfQ09VTlRFUl9MQVNUCShBUk1WN19DT1VOVEVSMCArIGFybXBtdS0+bnVtX2V2ZW50cyAtIDEpCisKKy8qCisgKiBBUk12NyBsb3cgbGV2ZWwgUE1OQyBhY2Nlc3MKKyAqLworCisvKgorICogUGVyLUNQVSBQTU5DOiBjb25maWcgcmVnCisgKi8KKyNkZWZpbmUgQVJNVjdfUE1OQ19FCQkoMSA8PCAwKSAvKiBFbmFibGUgYWxsIGNvdW50ZXJzICovCisjZGVmaW5lIEFSTVY3X1BNTkNfUAkJKDEgPDwgMSkgLyogUmVzZXQgYWxsIGNvdW50ZXJzICovCisjZGVmaW5lIEFSTVY3X1BNTkNfQwkJKDEgPDwgMikgLyogQ3ljbGUgY291bnRlciByZXNldCAqLworI2RlZmluZSBBUk1WN19QTU5DX0QJCSgxIDw8IDMpIC8qIENDTlQgY291bnRzIGV2ZXJ5IDY0dGggY3B1IGN5Y2xlICovCisjZGVmaW5lIEFSTVY3X1BNTkNfWAkJKDEgPDwgNCkgLyogRXhwb3J0IHRvIEVUTSAqLworI2RlZmluZSBBUk1WN19QTU5DX0RQCQkoMSA8PCA1KSAvKiBEaXNhYmxlIENDTlQgaWYgbm9uLWludmFzaXZlIGRlYnVnKi8KKyNkZWZpbmUJQVJNVjdfUE1OQ19OX1NISUZUCTExCSAvKiBOdW1iZXIgb2YgY291bnRlcnMgc3VwcG9ydGVkICovCisjZGVmaW5lCUFSTVY3X1BNTkNfTl9NQVNLCTB4MWYKKyNkZWZpbmUJQVJNVjdfUE1OQ19NQVNLCQkweDNmCSAvKiBNYXNrIGZvciB3cml0YWJsZSBiaXRzICovCisKKy8qCisgKiBBdmFpbGFibGUgY291bnRlcnMKKyAqLworI2RlZmluZSBBUk1WN19DTlQwCQkwCS8qIEZpcnN0IGV2ZW50IGNvdW50ZXIgKi8KKyNkZWZpbmUgQVJNVjdfQ0NOVAkJMzEJLyogQ3ljbGUgY291bnRlciAqLworCisvKiBQZXJmIEV2ZW50IHRvIGxvdyBsZXZlbCBjb3VudGVycyBtYXBwaW5nICovCisjZGVmaW5lIEFSTVY3X0VWRU5UX0NOVF9UT19DTlR4CShBUk1WN19DT1VOVEVSMCAtIEFSTVY3X0NOVDApCisKKy8qCisgKiBDTlRFTlM6IGNvdW50ZXJzIGVuYWJsZSByZWcKKyAqLworI2RlZmluZSBBUk1WN19DTlRFTlNfUChpZHgpCSgxIDw8IChpZHggLSBBUk1WN19FVkVOVF9DTlRfVE9fQ05UeCkpCisjZGVmaW5lIEFSTVY3X0NOVEVOU19DCQkoMSA8PCBBUk1WN19DQ05UKQorCisvKgorICogQ05URU5DOiBjb3VudGVycyBkaXNhYmxlIHJlZworICovCisjZGVmaW5lIEFSTVY3X0NOVEVOQ19QKGlkeCkJKDEgPDwgKGlkeCAtIEFSTVY3X0VWRU5UX0NOVF9UT19DTlR4KSkKKyNkZWZpbmUgQVJNVjdfQ05URU5DX0MJCSgxIDw8IEFSTVY3X0NDTlQpCisKKy8qCisgKiBJTlRFTlM6IGNvdW50ZXJzIG92ZXJmbG93IGludGVycnVwdCBlbmFibGUgcmVnCisgKi8KKyNkZWZpbmUgQVJNVjdfSU5URU5TX1AoaWR4KQkoMSA8PCAoaWR4IC0gQVJNVjdfRVZFTlRfQ05UX1RPX0NOVHgpKQorI2RlZmluZSBBUk1WN19JTlRFTlNfQwkJKDEgPDwgQVJNVjdfQ0NOVCkKKworLyoKKyAqIElOVEVOQzogY291bnRlcnMgb3ZlcmZsb3cgaW50ZXJydXB0IGRpc2FibGUgcmVnCisgKi8KKyNkZWZpbmUgQVJNVjdfSU5URU5DX1AoaWR4KQkoMSA8PCAoaWR4IC0gQVJNVjdfRVZFTlRfQ05UX1RPX0NOVHgpKQorI2RlZmluZSBBUk1WN19JTlRFTkNfQwkJKDEgPDwgQVJNVjdfQ0NOVCkKKworLyoKKyAqIEVWVFNFTDogRXZlbnQgc2VsZWN0aW9uIHJlZworICovCisjZGVmaW5lCUFSTVY3X0VWVFNFTF9NQVNLCTB4ZmYJCS8qIE1hc2sgZm9yIHdyaXRhYmxlIGJpdHMgKi8KKworLyoKKyAqIFNFTEVDVDogQ291bnRlciBzZWxlY3Rpb24gcmVnCisgKi8KKyNkZWZpbmUJQVJNVjdfU0VMRUNUX01BU0sJMHgxZgkJLyogTWFzayBmb3Igd3JpdGFibGUgYml0cyAqLworCisvKgorICogRkxBRzogY291bnRlcnMgb3ZlcmZsb3cgZmxhZyBzdGF0dXMgcmVnCisgKi8KKyNkZWZpbmUgQVJNVjdfRkxBR19QKGlkeCkJKDEgPDwgKGlkeCAtIEFSTVY3X0VWRU5UX0NOVF9UT19DTlR4KSkKKyNkZWZpbmUgQVJNVjdfRkxBR19DCQkoMSA8PCBBUk1WN19DQ05UKQorI2RlZmluZQlBUk1WN19GTEFHX01BU0sJCTB4ZmZmZmZmZmYJLyogTWFzayBmb3Igd3JpdGFibGUgYml0cyAqLworI2RlZmluZQlBUk1WN19PVkVSRkxPV0VEX01BU0sJQVJNVjdfRkxBR19NQVNLCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBhcm12N19wbW5jX3JlYWQodm9pZCkKK3sKKwl1MzIgdmFsOworCWFzbSB2b2xhdGlsZSgibXJjIHAxNSwgMCwgJTAsIGM5LCBjMTIsIDAiIDogIj1yIih2YWwpKTsKKwlyZXR1cm4gdmFsOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXJtdjdfcG1uY193cml0ZSh1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwl2YWwgJj0gQVJNVjdfUE1OQ19NQVNLOworCWFzbSB2b2xhdGlsZSgibWNyIHAxNSwgMCwgJTAsIGM5LCBjMTIsIDAiIDogOiAiciIodmFsKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGFybXY3X3BtbmNfaGFzX292ZXJmbG93ZWQodW5zaWduZWQgbG9uZyBwbW5jKQoreworCXJldHVybiBwbW5jICYgQVJNVjdfT1ZFUkZMT1dFRF9NQVNLOworfQorCitzdGF0aWMgaW5saW5lIGludCBhcm12N19wbW5jX2NvdW50ZXJfaGFzX292ZXJmbG93ZWQodW5zaWduZWQgbG9uZyBwbW5jLAorCQkJCQllbnVtIGFybXY3X2NvdW50ZXJzIGNvdW50ZXIpCit7CisJaW50IHJldCA9IDA7CisKKwlpZiAoY291bnRlciA9PSBBUk1WN19DWUNMRV9DT1VOVEVSKQorCQlyZXQgPSBwbW5jICYgQVJNVjdfRkxBR19DOworCWVsc2UgaWYgKChjb3VudGVyID49IEFSTVY3X0NPVU5URVIwKSAmJiAoY291bnRlciA8PSBBUk1WN19DT1VOVEVSX0xBU1QpKQorCQlyZXQgPSBwbW5jICYgQVJNVjdfRkxBR19QKGNvdW50ZXIpOworCWVsc2UKKwkJcHJfZXJyKCJDUFUldSBjaGVja2luZyB3cm9uZyBjb3VudGVyICVkIG92ZXJmbG93IHN0YXR1c1xuIiwKKwkJCXNtcF9wcm9jZXNzb3JfaWQoKSwgY291bnRlcik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIGludCBhcm12N19wbW5jX3NlbGVjdF9jb3VudGVyKHVuc2lnbmVkIGludCBpZHgpCit7CisJdTMyIHZhbDsKKworCWlmICgoaWR4IDwgQVJNVjdfQ09VTlRFUjApIHx8IChpZHggPiBBUk1WN19DT1VOVEVSX0xBU1QpKSB7CisJCXByX2VycigiQ1BVJXUgc2VsZWN0aW5nIHdyb25nIFBNTkMgY291bnRlciIKKwkJCSIgJWRcbiIsIHNtcF9wcm9jZXNzb3JfaWQoKSwgaWR4KTsKKwkJcmV0dXJuIC0xOworCX0KKworCXZhbCA9IChpZHggLSBBUk1WN19FVkVOVF9DTlRfVE9fQ05UeCkgJiBBUk1WN19TRUxFQ1RfTUFTSzsKKwlhc20gdm9sYXRpbGUoIm1jciBwMTUsIDAsICUwLCBjOSwgYzEyLCA1IiA6IDogInIiICh2YWwpKTsKKworCXJldHVybiBpZHg7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGFybXY3cG11X3JlYWRfY291bnRlcihpbnQgaWR4KQoreworCXVuc2lnbmVkIGxvbmcgdmFsdWUgPSAwOworCisJaWYgKGlkeCA9PSBBUk1WN19DWUNMRV9DT1VOVEVSKQorCQlhc20gdm9sYXRpbGUoIm1yYyBwMTUsIDAsICUwLCBjOSwgYzEzLCAwIiA6ICI9ciIgKHZhbHVlKSk7CisJZWxzZSBpZiAoKGlkeCA+PSBBUk1WN19DT1VOVEVSMCkgJiYgKGlkeCA8PSBBUk1WN19DT1VOVEVSX0xBU1QpKSB7CisJCWlmIChhcm12N19wbW5jX3NlbGVjdF9jb3VudGVyKGlkeCkgPT0gaWR4KQorCQkJYXNtIHZvbGF0aWxlKCJtcmMgcDE1LCAwLCAlMCwgYzksIGMxMywgMiIKKwkJCQkgICAgIDogIj1yIiAodmFsdWUpKTsKKwl9IGVsc2UKKwkJcHJfZXJyKCJDUFUldSByZWFkaW5nIHdyb25nIGNvdW50ZXIgJWRcbiIsCisJCQlzbXBfcHJvY2Vzc29yX2lkKCksIGlkeCk7CisKKwlyZXR1cm4gdmFsdWU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcm12N3BtdV93cml0ZV9jb3VudGVyKGludCBpZHgsIHUzMiB2YWx1ZSkKK3sKKwlpZiAoaWR4ID09IEFSTVY3X0NZQ0xFX0NPVU5URVIpCisJCWFzbSB2b2xhdGlsZSgibWNyIHAxNSwgMCwgJTAsIGM5LCBjMTMsIDAiIDogOiAiciIgKHZhbHVlKSk7CisJZWxzZSBpZiAoKGlkeCA+PSBBUk1WN19DT1VOVEVSMCkgJiYgKGlkeCA8PSBBUk1WN19DT1VOVEVSX0xBU1QpKSB7CisJCWlmIChhcm12N19wbW5jX3NlbGVjdF9jb3VudGVyKGlkeCkgPT0gaWR4KQorCQkJYXNtIHZvbGF0aWxlKCJtY3IgcDE1LCAwLCAlMCwgYzksIGMxMywgMiIKKwkJCQkgICAgIDogOiAiciIgKHZhbHVlKSk7CisJfSBlbHNlCisJCXByX2VycigiQ1BVJXUgd3JpdGluZyB3cm9uZyBjb3VudGVyICVkXG4iLAorCQkJc21wX3Byb2Nlc3Nvcl9pZCgpLCBpZHgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXJtdjdfcG1uY193cml0ZV9ldnRzZWwodW5zaWduZWQgaW50IGlkeCwgdTMyIHZhbCkKK3sKKwlpZiAoYXJtdjdfcG1uY19zZWxlY3RfY291bnRlcihpZHgpID09IGlkeCkgeworCQl2YWwgJj0gQVJNVjdfRVZUU0VMX01BU0s7CisJCWFzbSB2b2xhdGlsZSgibWNyIHAxNSwgMCwgJTAsIGM5LCBjMTMsIDEiIDogOiAiciIgKHZhbCkpOworCX0KK30KKworc3RhdGljIGlubGluZSB1MzIgYXJtdjdfcG1uY19lbmFibGVfY291bnRlcih1bnNpZ25lZCBpbnQgaWR4KQoreworCXUzMiB2YWw7CisKKwlpZiAoKGlkeCAhPSBBUk1WN19DWUNMRV9DT1VOVEVSKSAmJgorCSAgICAoKGlkeCA8IEFSTVY3X0NPVU5URVIwKSB8fCAoaWR4ID4gQVJNVjdfQ09VTlRFUl9MQVNUKSkpIHsKKwkJcHJfZXJyKCJDUFUldSBlbmFibGluZyB3cm9uZyBQTU5DIGNvdW50ZXIiCisJCQkiICVkXG4iLCBzbXBfcHJvY2Vzc29yX2lkKCksIGlkeCk7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoaWR4ID09IEFSTVY3X0NZQ0xFX0NPVU5URVIpCisJCXZhbCA9IEFSTVY3X0NOVEVOU19DOworCWVsc2UKKwkJdmFsID0gQVJNVjdfQ05URU5TX1AoaWR4KTsKKworCWFzbSB2b2xhdGlsZSgibWNyIHAxNSwgMCwgJTAsIGM5LCBjMTIsIDEiIDogOiAiciIgKHZhbCkpOworCisJcmV0dXJuIGlkeDsKK30KKworc3RhdGljIGlubGluZSB1MzIgYXJtdjdfcG1uY19kaXNhYmxlX2NvdW50ZXIodW5zaWduZWQgaW50IGlkeCkKK3sKKwl1MzIgdmFsOworCisKKwlpZiAoKGlkeCAhPSBBUk1WN19DWUNMRV9DT1VOVEVSKSAmJgorCSAgICAoKGlkeCA8IEFSTVY3X0NPVU5URVIwKSB8fCAoaWR4ID4gQVJNVjdfQ09VTlRFUl9MQVNUKSkpIHsKKwkJcHJfZXJyKCJDUFUldSBkaXNhYmxpbmcgd3JvbmcgUE1OQyBjb3VudGVyIgorCQkJIiAlZFxuIiwgc21wX3Byb2Nlc3Nvcl9pZCgpLCBpZHgpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKGlkeCA9PSBBUk1WN19DWUNMRV9DT1VOVEVSKQorCQl2YWwgPSBBUk1WN19DTlRFTkNfQzsKKwllbHNlCisJCXZhbCA9IEFSTVY3X0NOVEVOQ19QKGlkeCk7CisKKwlhc20gdm9sYXRpbGUoIm1jciBwMTUsIDAsICUwLCBjOSwgYzEyLCAyIiA6IDogInIiICh2YWwpKTsKKworCXJldHVybiBpZHg7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGFybXY3X3BtbmNfZW5hYmxlX2ludGVucyh1bnNpZ25lZCBpbnQgaWR4KQoreworCXUzMiB2YWw7CisKKwlpZiAoKGlkeCAhPSBBUk1WN19DWUNMRV9DT1VOVEVSKSAmJgorCSAgICAoKGlkeCA8IEFSTVY3X0NPVU5URVIwKSB8fCAoaWR4ID4gQVJNVjdfQ09VTlRFUl9MQVNUKSkpIHsKKwkJcHJfZXJyKCJDUFUldSBlbmFibGluZyB3cm9uZyBQTU5DIGNvdW50ZXIiCisJCQkiIGludGVycnVwdCBlbmFibGUgJWRcbiIsIHNtcF9wcm9jZXNzb3JfaWQoKSwgaWR4KTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChpZHggPT0gQVJNVjdfQ1lDTEVfQ09VTlRFUikKKwkJdmFsID0gQVJNVjdfSU5URU5TX0M7CisJZWxzZQorCQl2YWwgPSBBUk1WN19JTlRFTlNfUChpZHgpOworCisJYXNtIHZvbGF0aWxlKCJtY3IgcDE1LCAwLCAlMCwgYzksIGMxNCwgMSIgOiA6ICJyIiAodmFsKSk7CisKKwlyZXR1cm4gaWR4OworfQorCitzdGF0aWMgaW5saW5lIHUzMiBhcm12N19wbW5jX2Rpc2FibGVfaW50ZW5zKHVuc2lnbmVkIGludCBpZHgpCit7CisJdTMyIHZhbDsKKworCWlmICgoaWR4ICE9IEFSTVY3X0NZQ0xFX0NPVU5URVIpICYmCisJICAgICgoaWR4IDwgQVJNVjdfQ09VTlRFUjApIHx8IChpZHggPiBBUk1WN19DT1VOVEVSX0xBU1QpKSkgeworCQlwcl9lcnIoIkNQVSV1IGRpc2FibGluZyB3cm9uZyBQTU5DIGNvdW50ZXIiCisJCQkiIGludGVycnVwdCBlbmFibGUgJWRcbiIsIHNtcF9wcm9jZXNzb3JfaWQoKSwgaWR4KTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChpZHggPT0gQVJNVjdfQ1lDTEVfQ09VTlRFUikKKwkJdmFsID0gQVJNVjdfSU5URU5DX0M7CisJZWxzZQorCQl2YWwgPSBBUk1WN19JTlRFTkNfUChpZHgpOworCisJYXNtIHZvbGF0aWxlKCJtY3IgcDE1LCAwLCAlMCwgYzksIGMxNCwgMiIgOiA6ICJyIiAodmFsKSk7CisKKwlyZXR1cm4gaWR4OworfQorCitzdGF0aWMgaW5saW5lIHUzMiBhcm12N19wbW5jX2dldHJlc2V0X2ZsYWdzKHZvaWQpCit7CisJdTMyIHZhbDsKKworCS8qIFJlYWQgKi8KKwlhc20gdm9sYXRpbGUoIm1yYyBwMTUsIDAsICUwLCBjOSwgYzEyLCAzIiA6ICI9ciIgKHZhbCkpOworCisJLyogV3JpdGUgdG8gY2xlYXIgZmxhZ3MgKi8KKwl2YWwgJj0gQVJNVjdfRkxBR19NQVNLOworCWFzbSB2b2xhdGlsZSgibWNyIHAxNSwgMCwgJTAsIGM5LCBjMTIsIDMiIDogOiAiciIgKHZhbCkpOworCisJcmV0dXJuIHZhbDsKK30KKworI2lmZGVmIERFQlVHCitzdGF0aWMgdm9pZCBhcm12N19wbW5jX2R1bXBfcmVncyh2b2lkKQoreworCXUzMiB2YWw7CisJdW5zaWduZWQgaW50IGNudDsKKworCXByaW50ayhLRVJOX0lORk8gIlBNTkMgcmVnaXN0ZXJzIGR1bXA6XG4iKTsKKworCWFzbSB2b2xhdGlsZSgibXJjIHAxNSwgMCwgJTAsIGM5LCBjMTIsIDAiIDogIj1yIiAodmFsKSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiUE1OQyAgPTB4JTA4eFxuIiwgdmFsKTsKKworCWFzbSB2b2xhdGlsZSgibXJjIHAxNSwgMCwgJTAsIGM5LCBjMTIsIDEiIDogIj1yIiAodmFsKSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiQ05URU5TPTB4JTA4eFxuIiwgdmFsKTsKKworCWFzbSB2b2xhdGlsZSgibXJjIHAxNSwgMCwgJTAsIGM5LCBjMTQsIDEiIDogIj1yIiAodmFsKSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiSU5URU5TPTB4JTA4eFxuIiwgdmFsKTsKKworCWFzbSB2b2xhdGlsZSgibXJjIHAxNSwgMCwgJTAsIGM5LCBjMTIsIDMiIDogIj1yIiAodmFsKSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiRkxBR1MgPTB4JTA4eFxuIiwgdmFsKTsKKworCWFzbSB2b2xhdGlsZSgibXJjIHAxNSwgMCwgJTAsIGM5LCBjMTIsIDUiIDogIj1yIiAodmFsKSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiU0VMRUNUPTB4JTA4eFxuIiwgdmFsKTsKKworCWFzbSB2b2xhdGlsZSgibXJjIHAxNSwgMCwgJTAsIGM5LCBjMTMsIDAiIDogIj1yIiAodmFsKSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiQ0NOVCAgPTB4JTA4eFxuIiwgdmFsKTsKKworCWZvciAoY250ID0gQVJNVjdfQ09VTlRFUjA7IGNudCA8IEFSTVY3X0NPVU5URVJfTEFTVDsgY250KyspIHsKKwkJYXJtdjdfcG1uY19zZWxlY3RfY291bnRlcihjbnQpOworCQlhc20gdm9sYXRpbGUoIm1yYyBwMTUsIDAsICUwLCBjOSwgYzEzLCAyIiA6ICI9ciIgKHZhbCkpOworCQlwcmludGsoS0VSTl9JTkZPICJDTlRbJWRdIGNvdW50ID0weCUwOHhcbiIsCisJCQljbnQtQVJNVjdfRVZFTlRfQ05UX1RPX0NOVHgsIHZhbCk7CisJCWFzbSB2b2xhdGlsZSgibXJjIHAxNSwgMCwgJTAsIGM5LCBjMTMsIDEiIDogIj1yIiAodmFsKSk7CisJCXByaW50ayhLRVJOX0lORk8gIkNOVFslZF0gZXZ0c2VsPTB4JTA4eFxuIiwKKwkJCWNudC1BUk1WN19FVkVOVF9DTlRfVE9fQ05UeCwgdmFsKTsKKwl9Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgYXJtdjdwbXVfZW5hYmxlX2V2ZW50KHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsIGludCBpZHgpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qCisJICogRW5hYmxlIGNvdW50ZXIgYW5kIGludGVycnVwdCwgYW5kIHNldCB0aGUgY291bnRlciB0byBjb3VudAorCSAqIHRoZSBldmVudCB0aGF0IHdlJ3JlIGludGVyZXN0ZWQgaW4uCisJICovCisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZwbXVfbG9jaywgZmxhZ3MpOworCisJLyoKKwkgKiBEaXNhYmxlIGNvdW50ZXIKKwkgKi8KKwlhcm12N19wbW5jX2Rpc2FibGVfY291bnRlcihpZHgpOworCisJLyoKKwkgKiBTZXQgZXZlbnQgKGlmIGRlc3RpbmVkIGZvciBQTU54IGNvdW50ZXJzKQorCSAqIFdlIGRvbid0IG5lZWQgdG8gc2V0IHRoZSBldmVudCBpZiBpdCdzIGEgY3ljbGUgY291bnQKKwkgKi8KKwlpZiAoaWR4ICE9IEFSTVY3X0NZQ0xFX0NPVU5URVIpCisJCWFybXY3X3BtbmNfd3JpdGVfZXZ0c2VsKGlkeCwgaHdjLT5jb25maWdfYmFzZSk7CisKKwkvKgorCSAqIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIHRoaXMgY291bnRlcgorCSAqLworCWFybXY3X3BtbmNfZW5hYmxlX2ludGVucyhpZHgpOworCisJLyoKKwkgKiBFbmFibGUgY291bnRlcgorCSAqLworCWFybXY3X3BtbmNfZW5hYmxlX2NvdW50ZXIoaWR4KTsKKworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbXVfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBhcm12N3BtdV9kaXNhYmxlX2V2ZW50KHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsIGludCBpZHgpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qCisJICogRGlzYWJsZSBjb3VudGVyIGFuZCBpbnRlcnJ1cHQKKwkgKi8KKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnBtdV9sb2NrLCBmbGFncyk7CisKKwkvKgorCSAqIERpc2FibGUgY291bnRlcgorCSAqLworCWFybXY3X3BtbmNfZGlzYWJsZV9jb3VudGVyKGlkeCk7CisKKwkvKgorCSAqIERpc2FibGUgaW50ZXJydXB0IGZvciB0aGlzIGNvdW50ZXIKKwkgKi8KKwlhcm12N19wbW5jX2Rpc2FibGVfaW50ZW5zKGlkeCk7CisKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG11X2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGlycXJldHVybl90IGFybXY3cG11X2hhbmRsZV9pcnEoaW50IGlycV9udW0sIHZvaWQgKmRldikKK3sKKwl1bnNpZ25lZCBsb25nIHBtbmM7CisJc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgZGF0YTsKKwlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YzsKKwlzdHJ1Y3QgcHRfcmVncyAqcmVnczsKKwlpbnQgaWR4OworCisJLyoKKwkgKiBHZXQgYW5kIHJlc2V0IHRoZSBJUlEgZmxhZ3MKKwkgKi8KKwlwbW5jID0gYXJtdjdfcG1uY19nZXRyZXNldF9mbGFncygpOworCisJLyoKKwkgKiBEaWQgYW4gb3ZlcmZsb3cgb2NjdXI/CisJICovCisJaWYgKCFhcm12N19wbW5jX2hhc19vdmVyZmxvd2VkKHBtbmMpKQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwkvKgorCSAqIEhhbmRsZSB0aGUgY291bnRlcihzKSBvdmVyZmxvdyhzKQorCSAqLworCXJlZ3MgPSBnZXRfaXJxX3JlZ3MoKTsKKworCXBlcmZfc2FtcGxlX2RhdGFfaW5pdCgmZGF0YSwgMCk7CisKKwljcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7CisJZm9yIChpZHggPSAwOyBpZHggPD0gYXJtcG11LT5udW1fZXZlbnRzOyArK2lkeCkgeworCQlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQgPSBjcHVjLT5ldmVudHNbaWR4XTsKKwkJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YzsKKworCQlpZiAoIXRlc3RfYml0KGlkeCwgY3B1Yy0+YWN0aXZlX21hc2spKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogV2UgaGF2ZSBhIHNpbmdsZSBpbnRlcnJ1cHQgZm9yIGFsbCBjb3VudGVycy4gQ2hlY2sgdGhhdAorCQkgKiBlYWNoIGNvdW50ZXIgaGFzIG92ZXJmbG93ZWQgYmVmb3JlIHdlIHByb2Nlc3MgaXQuCisJCSAqLworCQlpZiAoIWFybXY3X3BtbmNfY291bnRlcl9oYXNfb3ZlcmZsb3dlZChwbW5jLCBpZHgpKQorCQkJY29udGludWU7CisKKwkJaHdjID0gJmV2ZW50LT5odzsKKwkJYXJtcG11X2V2ZW50X3VwZGF0ZShldmVudCwgaHdjLCBpZHgpOworCQlkYXRhLnBlcmlvZCA9IGV2ZW50LT5ody5sYXN0X3BlcmlvZDsKKwkJaWYgKCFhcm1wbXVfZXZlbnRfc2V0X3BlcmlvZChldmVudCwgaHdjLCBpZHgpKQorCQkJY29udGludWU7CisKKwkJaWYgKHBlcmZfZXZlbnRfb3ZlcmZsb3coZXZlbnQsIDAsICZkYXRhLCByZWdzKSkKKwkJCWFybXBtdS0+ZGlzYWJsZShod2MsIGlkeCk7CisJfQorCisJLyoKKwkgKiBIYW5kbGUgdGhlIHBlbmRpbmcgcGVyZiBldmVudHMuCisJICoKKwkgKiBOb3RlOiB0aGlzIGNhbGwgKm11c3QqIGJlIHJ1biB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQuIEZvcgorCSAqIHBsYXRmb3JtcyB0aGF0IGNhbiBoYXZlIHRoZSBQTVUgaW50ZXJydXB0cyByYWlzZWQgYXMgYW4gTk1JLCB0aGlzCisJICogd2lsbCBub3Qgd29yay4KKwkgKi8KKwlpcnFfd29ya19ydW4oKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHZvaWQgYXJtdjdwbXVfc3RhcnQodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZwbXVfbG9jaywgZmxhZ3MpOworCS8qIEVuYWJsZSBhbGwgY291bnRlcnMgKi8KKwlhcm12N19wbW5jX3dyaXRlKGFybXY3X3BtbmNfcmVhZCgpIHwgQVJNVjdfUE1OQ19FKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG11X2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgYXJtdjdwbXVfc3RvcCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnBtdV9sb2NrLCBmbGFncyk7CisJLyogRGlzYWJsZSBhbGwgY291bnRlcnMgKi8KKwlhcm12N19wbW5jX3dyaXRlKGFybXY3X3BtbmNfcmVhZCgpICYgfkFSTVY3X1BNTkNfRSk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtdV9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgYXJtdjdwbXVfZ2V0X2V2ZW50X2lkeChzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YywKKwkJCQkgIHN0cnVjdCBod19wZXJmX2V2ZW50ICpldmVudCkKK3sKKwlpbnQgaWR4OworCisJLyogQWx3YXlzIHBsYWNlIGEgY3ljbGUgY291bnRlciBpbnRvIHRoZSBjeWNsZSBjb3VudGVyLiAqLworCWlmIChldmVudC0+Y29uZmlnX2Jhc2UgPT0gQVJNVjdfUEVSRkNUUl9DUFVfQ1lDTEVTKSB7CisJCWlmICh0ZXN0X2FuZF9zZXRfYml0KEFSTVY3X0NZQ0xFX0NPVU5URVIsIGNwdWMtPnVzZWRfbWFzaykpCisJCQlyZXR1cm4gLUVBR0FJTjsKKworCQlyZXR1cm4gQVJNVjdfQ1lDTEVfQ09VTlRFUjsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBGb3IgYW55dGhpbmcgb3RoZXIgdGhhbiBhIGN5Y2xlIGNvdW50ZXIsIHRyeSBhbmQgdXNlCisJCSAqIHRoZSBldmVudHMgY291bnRlcnMKKwkJICovCisJCWZvciAoaWR4ID0gQVJNVjdfQ09VTlRFUjA7IGlkeCA8PSBhcm1wbXUtPm51bV9ldmVudHM7ICsraWR4KSB7CisJCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoaWR4LCBjcHVjLT51c2VkX21hc2spKQorCQkJCXJldHVybiBpZHg7CisJCX0KKworCQkvKiBUaGUgY291bnRlcnMgYXJlIGFsbCBpbiB1c2UuICovCisJCXJldHVybiAtRUFHQUlOOworCX0KK30KKworc3RhdGljIHN0cnVjdCBhcm1fcG11IGFybXY3cG11ID0geworCS5oYW5kbGVfaXJxCQk9IGFybXY3cG11X2hhbmRsZV9pcnEsCisJLmVuYWJsZQkJCT0gYXJtdjdwbXVfZW5hYmxlX2V2ZW50LAorCS5kaXNhYmxlCQk9IGFybXY3cG11X2Rpc2FibGVfZXZlbnQsCisJLnJlYWRfY291bnRlcgkJPSBhcm12N3BtdV9yZWFkX2NvdW50ZXIsCisJLndyaXRlX2NvdW50ZXIJCT0gYXJtdjdwbXVfd3JpdGVfY291bnRlciwKKwkuZ2V0X2V2ZW50X2lkeAkJPSBhcm12N3BtdV9nZXRfZXZlbnRfaWR4LAorCS5zdGFydAkJCT0gYXJtdjdwbXVfc3RhcnQsCisJLnN0b3AJCQk9IGFybXY3cG11X3N0b3AsCisJLnJhd19ldmVudF9tYXNrCQk9IDB4RkYsCisJLm1heF9wZXJpb2QJCT0gKDFMTFUgPDwgMzIpIC0gMSwKK307CisKK3N0YXRpYyB1MzIgX19pbml0IGFybXY3X3Jlc2V0X3JlYWRfcG1uYyh2b2lkKQoreworCXUzMiBuYl9jbnQ7CisKKwkvKiBJbml0aWFsaXplICYgUmVzZXQgUE1OQzogQyBhbmQgUCBiaXRzICovCisJYXJtdjdfcG1uY193cml0ZShBUk1WN19QTU5DX1AgfCBBUk1WN19QTU5DX0MpOworCisJLyogUmVhZCB0aGUgbmIgb2YgQ05UeCBjb3VudGVycyBzdXBwb3J0ZWQgZnJvbSBQTU5DICovCisJbmJfY250ID0gKGFybXY3X3BtbmNfcmVhZCgpID4+IEFSTVY3X1BNTkNfTl9TSElGVCkgJiBBUk1WN19QTU5DX05fTUFTSzsKKworCS8qIEFkZCB0aGUgQ1BVIGN5Y2xlcyBjb3VudGVyIGFuZCByZXR1cm4gKi8KKwlyZXR1cm4gbmJfY250ICsgMTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBhcm1fcG11ICpfX2luaXQgYXJtdjdfYThfcG11X2luaXQodm9pZCkKK3sKKwlhcm12N3BtdS5pZAkJPSBBUk1fUEVSRl9QTVVfSURfQ0E4OworCWFybXY3cG11Lm5hbWUJCT0gIkFSTXY3IENvcnRleC1BOCI7CisJYXJtdjdwbXUuY2FjaGVfbWFwCT0gJmFybXY3X2E4X3BlcmZfY2FjaGVfbWFwOworCWFybXY3cG11LmV2ZW50X21hcAk9ICZhcm12N19hOF9wZXJmX21hcDsKKwlhcm12N3BtdS5udW1fZXZlbnRzCT0gYXJtdjdfcmVzZXRfcmVhZF9wbW5jKCk7CisJcmV0dXJuICZhcm12N3BtdTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBhcm1fcG11ICpfX2luaXQgYXJtdjdfYTlfcG11X2luaXQodm9pZCkKK3sKKwlhcm12N3BtdS5pZAkJPSBBUk1fUEVSRl9QTVVfSURfQ0E5OworCWFybXY3cG11Lm5hbWUJCT0gIkFSTXY3IENvcnRleC1BOSI7CisJYXJtdjdwbXUuY2FjaGVfbWFwCT0gJmFybXY3X2E5X3BlcmZfY2FjaGVfbWFwOworCWFybXY3cG11LmV2ZW50X21hcAk9ICZhcm12N19hOV9wZXJmX21hcDsKKwlhcm12N3BtdS5udW1fZXZlbnRzCT0gYXJtdjdfcmVzZXRfcmVhZF9wbW5jKCk7CisJcmV0dXJuICZhcm12N3BtdTsKK30KKyNlbHNlCitzdGF0aWMgY29uc3Qgc3RydWN0IGFybV9wbXUgKl9faW5pdCBhcm12N19hOF9wbXVfaW5pdCh2b2lkKQoreworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGFybV9wbXUgKl9faW5pdCBhcm12N19hOV9wbXVfaW5pdCh2b2lkKQoreworCXJldHVybiBOVUxMOworfQorI2VuZGlmCS8qIENPTkZJR19DUFVfVjcgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9wZXJmX2V2ZW50X3hzY2FsZS5jIGIvYXJjaC9hcm0va2VybmVsL3BlcmZfZXZlbnRfeHNjYWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhjZDNiMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9wZXJmX2V2ZW50X3hzY2FsZS5jCkBAIC0wLDAgKzEsODA3IEBACisvKgorICogQVJNdjUgW3hzY2FsZV0gUGVyZm9ybWFuY2UgY291bnRlciBoYW5kbGluZyBjb2RlLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgQVJNIEx0ZC4sIFdpbGwgRGVhY29uIDx3aWxsLmRlYWNvbkBhcm0uY29tPgorICoKKyAqIEJhc2VkIG9uIHRoZSBwcmV2aW91cyB4c2NhbGUgT1Byb2ZpbGUgY29kZS4KKyAqCisgKiBUaGVyZSBhcmUgdHdvIHZhcmlhbnRzIG9mIHRoZSB4c2NhbGUgUE1VIHRoYXQgd2Ugc3VwcG9ydDoKKyAqIAktIHhzY2FsZTFwbXU6IDIgZXZlbnQgY291bnRlcnMgYW5kIGEgY3ljbGUgY291bnRlcgorICogCS0geHNjYWxlMnBtdTogNCBldmVudCBjb3VudGVycyBhbmQgYSBjeWNsZSBjb3VudGVyCisgKiBUaGUgdHdvIHZhcmlhbnRzIHNoYXJlIGV2ZW50IGRlZmluaXRpb25zLCBidXQgaGF2ZSBkaWZmZXJlbnQKKyAqIFBNVSBzdHJ1Y3R1cmVzLgorICovCisKKyNpZmRlZiBDT05GSUdfQ1BVX1hTQ0FMRQorZW51bSB4c2NhbGVfcGVyZl90eXBlcyB7CisJWFNDQUxFX1BFUkZDVFJfSUNBQ0hFX01JU1MJCT0gMHgwMCwKKwlYU0NBTEVfUEVSRkNUUl9JQ0FDSEVfTk9fREVMSVZFUgk9IDB4MDEsCisJWFNDQUxFX1BFUkZDVFJfREFUQV9TVEFMTAkJPSAweDAyLAorCVhTQ0FMRV9QRVJGQ1RSX0lUTEJfTUlTUwkJPSAweDAzLAorCVhTQ0FMRV9QRVJGQ1RSX0RUTEJfTUlTUwkJPSAweDA0LAorCVhTQ0FMRV9QRVJGQ1RSX0JSQU5DSAkJCT0gMHgwNSwKKwlYU0NBTEVfUEVSRkNUUl9CUkFOQ0hfTUlTUwkJPSAweDA2LAorCVhTQ0FMRV9QRVJGQ1RSX0lOU1RSVUNUSU9OCQk9IDB4MDcsCisJWFNDQUxFX1BFUkZDVFJfRENBQ0hFX0ZVTExfU1RBTEwJPSAweDA4LAorCVhTQ0FMRV9QRVJGQ1RSX0RDQUNIRV9GVUxMX1NUQUxMX0NPTlRJRwk9IDB4MDksCisJWFNDQUxFX1BFUkZDVFJfRENBQ0hFX0FDQ0VTUwkJPSAweDBBLAorCVhTQ0FMRV9QRVJGQ1RSX0RDQUNIRV9NSVNTCQk9IDB4MEIsCisJWFNDQUxFX1BFUkZDVFJfRENBQ0hFX1dSSVRFX0JBQ0sJPSAweDBDLAorCVhTQ0FMRV9QRVJGQ1RSX1BDX0NIQU5HRUQJCT0gMHgwRCwKKwlYU0NBTEVfUEVSRkNUUl9CQ1VfUkVRVUVTVAkJPSAweDEwLAorCVhTQ0FMRV9QRVJGQ1RSX0JDVV9GVUxMCQkJPSAweDExLAorCVhTQ0FMRV9QRVJGQ1RSX0JDVV9EUkFJTgkJPSAweDEyLAorCVhTQ0FMRV9QRVJGQ1RSX0JDVV9FQ0NfTk9fRUxPRwkJPSAweDE0LAorCVhTQ0FMRV9QRVJGQ1RSX0JDVV8xX0JJVF9FUlIJCT0gMHgxNSwKKwlYU0NBTEVfUEVSRkNUUl9STVcJCQk9IDB4MTYsCisJLyogWFNDQUxFX1BFUkZDVFJfQ0NOVCBpcyBub3QgaGFyZHdhcmUgZGVmaW5lZCAqLworCVhTQ0FMRV9QRVJGQ1RSX0NDTlQJCQk9IDB4RkUsCisJWFNDQUxFX1BFUkZDVFJfVU5VU0VECQkJPSAweEZGLAorfTsKKworZW51bSB4c2NhbGVfY291bnRlcnMgeworCVhTQ0FMRV9DWUNMRV9DT1VOVEVSCT0gMSwKKwlYU0NBTEVfQ09VTlRFUjAsCisJWFNDQUxFX0NPVU5URVIxLAorCVhTQ0FMRV9DT1VOVEVSMiwKKwlYU0NBTEVfQ09VTlRFUjMsCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgeHNjYWxlX3BlcmZfbWFwW1BFUkZfQ09VTlRfSFdfTUFYXSA9IHsKKwlbUEVSRl9DT1VOVF9IV19DUFVfQ1lDTEVTXQkgICAgPSBYU0NBTEVfUEVSRkNUUl9DQ05ULAorCVtQRVJGX0NPVU5UX0hXX0lOU1RSVUNUSU9OU10JICAgID0gWFNDQUxFX1BFUkZDVFJfSU5TVFJVQ1RJT04sCisJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfUkVGRVJFTkNFU10gICAgPSBIV19PUF9VTlNVUFBPUlRFRCwKKwlbUEVSRl9DT1VOVF9IV19DQUNIRV9NSVNTRVNdCSAgICA9IEhXX09QX1VOU1VQUE9SVEVELAorCVtQRVJGX0NPVU5UX0hXX0JSQU5DSF9JTlNUUlVDVElPTlNdID0gWFNDQUxFX1BFUkZDVFJfQlJBTkNILAorCVtQRVJGX0NPVU5UX0hXX0JSQU5DSF9NSVNTRVNdCSAgICA9IFhTQ0FMRV9QRVJGQ1RSX0JSQU5DSF9NSVNTLAorCVtQRVJGX0NPVU5UX0hXX0JVU19DWUNMRVNdCSAgICA9IEhXX09QX1VOU1VQUE9SVEVELAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHhzY2FsZV9wZXJmX2NhY2hlX21hcFtQRVJGX0NPVU5UX0hXX0NBQ0hFX01BWF0KKwkJCQkJICAgW1BFUkZfQ09VTlRfSFdfQ0FDSEVfT1BfTUFYXQorCQkJCQkgICBbUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfTUFYXSA9IHsKKwlbQyhMMUQpXSA9IHsKKwkJW0MoT1BfUkVBRCldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gWFNDQUxFX1BFUkZDVFJfRENBQ0hFX0FDQ0VTUywKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBYU0NBTEVfUEVSRkNUUl9EQ0FDSEVfTUlTUywKKwkJfSwKKwkJW0MoT1BfV1JJVEUpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IFhTQ0FMRV9QRVJGQ1RSX0RDQUNIRV9BQ0NFU1MsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gWFNDQUxFX1BFUkZDVFJfRENBQ0hFX01JU1MsCisJCX0sCisJCVtDKE9QX1BSRUZFVENIKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJfSwKKwl9LAorCVtDKEwxSSldID0geworCQlbQyhPUF9SRUFEKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBYU0NBTEVfUEVSRkNUUl9JQ0FDSEVfTUlTUywKKwkJfSwKKwkJW0MoT1BfV1JJVEUpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXQk9IFhTQ0FMRV9QRVJGQ1RSX0lDQUNIRV9NSVNTLAorCQl9LAorCQlbQyhPUF9QUkVGRVRDSCldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCX0sCisJfSwKKwlbQyhMTCldID0geworCQlbQyhPUF9SRUFEKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJfSwKKwkJW0MoT1BfV1JJVEUpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQl9LAorCQlbQyhPUF9QUkVGRVRDSCldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCX0sCisJfSwKKwlbQyhEVExCKV0gPSB7CisJCVtDKE9QX1JFQUQpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXQk9IFhTQ0FMRV9QRVJGQ1RSX0RUTEJfTUlTUywKKwkJfSwKKwkJW0MoT1BfV1JJVEUpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXQk9IFhTQ0FMRV9QRVJGQ1RSX0RUTEJfTUlTUywKKwkJfSwKKwkJW0MoT1BfUFJFRkVUQ0gpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQl9LAorCX0sCisJW0MoSVRMQildID0geworCQlbQyhPUF9SRUFEKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBYU0NBTEVfUEVSRkNUUl9JVExCX01JU1MsCisJCX0sCisJCVtDKE9QX1dSSVRFKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBYU0NBTEVfUEVSRkNUUl9JVExCX01JU1MsCisJCX0sCisJCVtDKE9QX1BSRUZFVENIKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJfSwKKwl9LAorCVtDKEJQVSldID0geworCQlbQyhPUF9SRUFEKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJfSwKKwkJW0MoT1BfV1JJVEUpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQl9LAorCQlbQyhPUF9QUkVGRVRDSCldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCX0sCisJfSwKK307CisKKyNkZWZpbmUJWFNDQUxFX1BNVV9FTkFCTEUJMHgwMDEKKyNkZWZpbmUgWFNDQUxFX1BNTl9SRVNFVAkweDAwMgorI2RlZmluZQlYU0NBTEVfQ0NOVF9SRVNFVAkweDAwNAorI2RlZmluZQlYU0NBTEVfUE1VX1JFU0VUCShDQ05UX1JFU0VUIHwgUE1OX1JFU0VUKQorI2RlZmluZSBYU0NBTEVfUE1VX0NOVDY0CTB4MDA4CisKKyNkZWZpbmUgWFNDQUxFMV9PVkVSRkxPV0VEX01BU0sJMHg3MDAKKyNkZWZpbmUgWFNDQUxFMV9DQ09VTlRfT1ZFUkZMT1cJMHg0MDAKKyNkZWZpbmUgWFNDQUxFMV9DT1VOVDBfT1ZFUkZMT1cJMHgxMDAKKyNkZWZpbmUgWFNDQUxFMV9DT1VOVDFfT1ZFUkZMT1cJMHgyMDAKKyNkZWZpbmUgWFNDQUxFMV9DQ09VTlRfSU5UX0VOCTB4MDQwCisjZGVmaW5lIFhTQ0FMRTFfQ09VTlQwX0lOVF9FTgkweDAxMAorI2RlZmluZSBYU0NBTEUxX0NPVU5UMV9JTlRfRU4JMHgwMjAKKyNkZWZpbmUgWFNDQUxFMV9DT1VOVDBfRVZUX1NIRlQJMTIKKyNkZWZpbmUgWFNDQUxFMV9DT1VOVDBfRVZUX01BU0sJKDB4ZmYgPDwgWFNDQUxFMV9DT1VOVDBfRVZUX1NIRlQpCisjZGVmaW5lIFhTQ0FMRTFfQ09VTlQxX0VWVF9TSEZUCTIwCisjZGVmaW5lIFhTQ0FMRTFfQ09VTlQxX0VWVF9NQVNLCSgweGZmIDw8IFhTQ0FMRTFfQ09VTlQxX0VWVF9TSEZUKQorCitzdGF0aWMgaW5saW5lIHUzMgoreHNjYWxlMXBtdV9yZWFkX3BtbmModm9pZCkKK3sKKwl1MzIgdmFsOworCWFzbSB2b2xhdGlsZSgibXJjIHAxNCwgMCwgJTAsIGMwLCBjMCwgMCIgOiAiPXIiICh2YWwpKTsKKwlyZXR1cm4gdmFsOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3hzY2FsZTFwbXVfd3JpdGVfcG1uYyh1MzIgdmFsKQoreworCS8qIHVwcGVyIDRiaXRzIGFuZCA3LCAxMSBhcmUgd3JpdGUtYXMtMCAqLworCXZhbCAmPSAweGZmZmY3N2Y7CisJYXNtIHZvbGF0aWxlKCJtY3IgcDE0LCAwLCAlMCwgYzAsIGMwLCAwIiA6IDogInIiICh2YWwpKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK3hzY2FsZTFfcG1uY19jb3VudGVyX2hhc19vdmVyZmxvd2VkKHVuc2lnbmVkIGxvbmcgcG1uYywKKwkJCQkJZW51bSB4c2NhbGVfY291bnRlcnMgY291bnRlcikKK3sKKwlpbnQgcmV0ID0gMDsKKworCXN3aXRjaCAoY291bnRlcikgeworCWNhc2UgWFNDQUxFX0NZQ0xFX0NPVU5URVI6CisJCXJldCA9IHBtbmMgJiBYU0NBTEUxX0NDT1VOVF9PVkVSRkxPVzsKKwkJYnJlYWs7CisJY2FzZSBYU0NBTEVfQ09VTlRFUjA6CisJCXJldCA9IHBtbmMgJiBYU0NBTEUxX0NPVU5UMF9PVkVSRkxPVzsKKwkJYnJlYWs7CisJY2FzZSBYU0NBTEVfQ09VTlRFUjE6CisJCXJldCA9IHBtbmMgJiBYU0NBTEUxX0NPVU5UMV9PVkVSRkxPVzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJV0FSTl9PTkNFKDEsICJpbnZhbGlkIGNvdW50ZXIgbnVtYmVyICglZClcbiIsIGNvdW50ZXIpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdAoreHNjYWxlMXBtdV9oYW5kbGVfaXJxKGludCBpcnFfbnVtLCB2b2lkICpkZXYpCit7CisJdW5zaWduZWQgbG9uZyBwbW5jOworCXN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhIGRhdGE7CisJc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWM7CisJc3RydWN0IHB0X3JlZ3MgKnJlZ3M7CisJaW50IGlkeDsKKworCS8qCisJICogTk9URTogdGhlcmUncyBhbiBBIHN0ZXBwaW5nIGVycmF0dW0gdGhhdCBzdGF0ZXMgaWYgYW4gb3ZlcmZsb3cKKwkgKiAgICAgICBiaXQgYWxyZWFkeSBleGlzdHMgYW5kIGFub3RoZXIgb2NjdXJzLCB0aGUgcHJldmlvdXMKKwkgKiAgICAgICBPdmVyZmxvdyBiaXQgZ2V0cyBjbGVhcmVkLiBUaGVyZSdzIG5vIHdvcmthcm91bmQuCisJICoJIEZpeGVkIGluIEIgc3RlcHBpbmcgb3IgbGF0ZXIuCisJICovCisJcG1uYyA9IHhzY2FsZTFwbXVfcmVhZF9wbW5jKCk7CisKKwkvKgorCSAqIFdyaXRlIHRoZSB2YWx1ZSBiYWNrIHRvIGNsZWFyIHRoZSBvdmVyZmxvdyBmbGFncy4gT3ZlcmZsb3cKKwkgKiBmbGFncyByZW1haW4gaW4gcG1uYyBmb3IgdXNlIGJlbG93LiBXZSBhbHNvIGRpc2FibGUgdGhlIFBNVQorCSAqIHdoaWxlIHdlIHByb2Nlc3MgdGhlIGludGVycnVwdC4KKwkgKi8KKwl4c2NhbGUxcG11X3dyaXRlX3BtbmMocG1uYyAmIH5YU0NBTEVfUE1VX0VOQUJMRSk7CisKKwlpZiAoIShwbW5jICYgWFNDQUxFMV9PVkVSRkxPV0VEX01BU0spKQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwlyZWdzID0gZ2V0X2lycV9yZWdzKCk7CisKKwlwZXJmX3NhbXBsZV9kYXRhX2luaXQoJmRhdGEsIDApOworCisJY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOworCWZvciAoaWR4ID0gMDsgaWR4IDw9IGFybXBtdS0+bnVtX2V2ZW50czsgKytpZHgpIHsKKwkJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50ID0gY3B1Yy0+ZXZlbnRzW2lkeF07CisJCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2M7CisKKwkJaWYgKCF0ZXN0X2JpdChpZHgsIGNwdWMtPmFjdGl2ZV9tYXNrKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICgheHNjYWxlMV9wbW5jX2NvdW50ZXJfaGFzX292ZXJmbG93ZWQocG1uYywgaWR4KSkKKwkJCWNvbnRpbnVlOworCisJCWh3YyA9ICZldmVudC0+aHc7CisJCWFybXBtdV9ldmVudF91cGRhdGUoZXZlbnQsIGh3YywgaWR4KTsKKwkJZGF0YS5wZXJpb2QgPSBldmVudC0+aHcubGFzdF9wZXJpb2Q7CisJCWlmICghYXJtcG11X2V2ZW50X3NldF9wZXJpb2QoZXZlbnQsIGh3YywgaWR4KSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChwZXJmX2V2ZW50X292ZXJmbG93KGV2ZW50LCAwLCAmZGF0YSwgcmVncykpCisJCQlhcm1wbXUtPmRpc2FibGUoaHdjLCBpZHgpOworCX0KKworCWlycV93b3JrX3J1bigpOworCisJLyoKKwkgKiBSZS1lbmFibGUgdGhlIFBNVS4KKwkgKi8KKwlwbW5jID0geHNjYWxlMXBtdV9yZWFkX3BtbmMoKSB8IFhTQ0FMRV9QTVVfRU5BQkxFOworCXhzY2FsZTFwbXVfd3JpdGVfcG1uYyhwbW5jKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHZvaWQKK3hzY2FsZTFwbXVfZW5hYmxlX2V2ZW50KHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsIGludCBpZHgpCit7CisJdW5zaWduZWQgbG9uZyB2YWwsIG1hc2ssIGV2dCwgZmxhZ3M7CisKKwlzd2l0Y2ggKGlkeCkgeworCWNhc2UgWFNDQUxFX0NZQ0xFX0NPVU5URVI6CisJCW1hc2sgPSAwOworCQlldnQgPSBYU0NBTEUxX0NDT1VOVF9JTlRfRU47CisJCWJyZWFrOworCWNhc2UgWFNDQUxFX0NPVU5URVIwOgorCQltYXNrID0gWFNDQUxFMV9DT1VOVDBfRVZUX01BU0s7CisJCWV2dCA9IChod2MtPmNvbmZpZ19iYXNlIDw8IFhTQ0FMRTFfQ09VTlQwX0VWVF9TSEZUKSB8CisJCQlYU0NBTEUxX0NPVU5UMF9JTlRfRU47CisJCWJyZWFrOworCWNhc2UgWFNDQUxFX0NPVU5URVIxOgorCQltYXNrID0gWFNDQUxFMV9DT1VOVDFfRVZUX01BU0s7CisJCWV2dCA9IChod2MtPmNvbmZpZ19iYXNlIDw8IFhTQ0FMRTFfQ09VTlQxX0VWVF9TSEZUKSB8CisJCQlYU0NBTEUxX0NPVU5UMV9JTlRfRU47CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVdBUk5fT05DRSgxLCAiaW52YWxpZCBjb3VudGVyIG51bWJlciAoJWQpXG4iLCBpZHgpOworCQlyZXR1cm47CisJfQorCisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZwbXVfbG9jaywgZmxhZ3MpOworCXZhbCA9IHhzY2FsZTFwbXVfcmVhZF9wbW5jKCk7CisJdmFsICY9IH5tYXNrOworCXZhbCB8PSBldnQ7CisJeHNjYWxlMXBtdV93cml0ZV9wbW5jKHZhbCk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtdV9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkCit4c2NhbGUxcG11X2Rpc2FibGVfZXZlbnQoc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YywgaW50IGlkeCkKK3sKKwl1bnNpZ25lZCBsb25nIHZhbCwgbWFzaywgZXZ0LCBmbGFnczsKKworCXN3aXRjaCAoaWR4KSB7CisJY2FzZSBYU0NBTEVfQ1lDTEVfQ09VTlRFUjoKKwkJbWFzayA9IFhTQ0FMRTFfQ0NPVU5UX0lOVF9FTjsKKwkJZXZ0ID0gMDsKKwkJYnJlYWs7CisJY2FzZSBYU0NBTEVfQ09VTlRFUjA6CisJCW1hc2sgPSBYU0NBTEUxX0NPVU5UMF9JTlRfRU4gfCBYU0NBTEUxX0NPVU5UMF9FVlRfTUFTSzsKKwkJZXZ0ID0gWFNDQUxFX1BFUkZDVFJfVU5VU0VEIDw8IFhTQ0FMRTFfQ09VTlQwX0VWVF9TSEZUOworCQlicmVhazsKKwljYXNlIFhTQ0FMRV9DT1VOVEVSMToKKwkJbWFzayA9IFhTQ0FMRTFfQ09VTlQxX0lOVF9FTiB8IFhTQ0FMRTFfQ09VTlQxX0VWVF9NQVNLOworCQlldnQgPSBYU0NBTEVfUEVSRkNUUl9VTlVTRUQgPDwgWFNDQUxFMV9DT1VOVDFfRVZUX1NIRlQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVdBUk5fT05DRSgxLCAiaW52YWxpZCBjb3VudGVyIG51bWJlciAoJWQpXG4iLCBpZHgpOworCQlyZXR1cm47CisJfQorCisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZwbXVfbG9jaywgZmxhZ3MpOworCXZhbCA9IHhzY2FsZTFwbXVfcmVhZF9wbW5jKCk7CisJdmFsICY9IH5tYXNrOworCXZhbCB8PSBldnQ7CisJeHNjYWxlMXBtdV93cml0ZV9wbW5jKHZhbCk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtdV9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQKK3hzY2FsZTFwbXVfZ2V0X2V2ZW50X2lkeChzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YywKKwkJCXN0cnVjdCBod19wZXJmX2V2ZW50ICpldmVudCkKK3sKKwlpZiAoWFNDQUxFX1BFUkZDVFJfQ0NOVCA9PSBldmVudC0+Y29uZmlnX2Jhc2UpIHsKKwkJaWYgKHRlc3RfYW5kX3NldF9iaXQoWFNDQUxFX0NZQ0xFX0NPVU5URVIsIGNwdWMtPnVzZWRfbWFzaykpCisJCQlyZXR1cm4gLUVBR0FJTjsKKworCQlyZXR1cm4gWFNDQUxFX0NZQ0xFX0NPVU5URVI7CisJfSBlbHNlIHsKKwkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFhTQ0FMRV9DT1VOVEVSMSwgY3B1Yy0+dXNlZF9tYXNrKSkKKwkJCXJldHVybiBYU0NBTEVfQ09VTlRFUjE7CisKKwkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFhTQ0FMRV9DT1VOVEVSMCwgY3B1Yy0+dXNlZF9tYXNrKSkKKwkJCXJldHVybiBYU0NBTEVfQ09VTlRFUjA7CisKKwkJcmV0dXJuIC1FQUdBSU47CisJfQorfQorCitzdGF0aWMgdm9pZAoreHNjYWxlMXBtdV9zdGFydCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZhbDsKKworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcG11X2xvY2ssIGZsYWdzKTsKKwl2YWwgPSB4c2NhbGUxcG11X3JlYWRfcG1uYygpOworCXZhbCB8PSBYU0NBTEVfUE1VX0VOQUJMRTsKKwl4c2NhbGUxcG11X3dyaXRlX3BtbmModmFsKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG11X2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQKK3hzY2FsZTFwbXVfc3RvcCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZhbDsKKworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcG11X2xvY2ssIGZsYWdzKTsKKwl2YWwgPSB4c2NhbGUxcG11X3JlYWRfcG1uYygpOworCXZhbCAmPSB+WFNDQUxFX1BNVV9FTkFCTEU7CisJeHNjYWxlMXBtdV93cml0ZV9wbW5jKHZhbCk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtdV9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyCit4c2NhbGUxcG11X3JlYWRfY291bnRlcihpbnQgY291bnRlcikKK3sKKwl1MzIgdmFsID0gMDsKKworCXN3aXRjaCAoY291bnRlcikgeworCWNhc2UgWFNDQUxFX0NZQ0xFX0NPVU5URVI6CisJCWFzbSB2b2xhdGlsZSgibXJjIHAxNCwgMCwgJTAsIGMxLCBjMCwgMCIgOiAiPXIiICh2YWwpKTsKKwkJYnJlYWs7CisJY2FzZSBYU0NBTEVfQ09VTlRFUjA6CisJCWFzbSB2b2xhdGlsZSgibXJjIHAxNCwgMCwgJTAsIGMyLCBjMCwgMCIgOiAiPXIiICh2YWwpKTsKKwkJYnJlYWs7CisJY2FzZSBYU0NBTEVfQ09VTlRFUjE6CisJCWFzbSB2b2xhdGlsZSgibXJjIHAxNCwgMCwgJTAsIGMzLCBjMCwgMCIgOiAiPXIiICh2YWwpKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHZhbDsKK30KKworc3RhdGljIGlubGluZSB2b2lkCit4c2NhbGUxcG11X3dyaXRlX2NvdW50ZXIoaW50IGNvdW50ZXIsIHUzMiB2YWwpCit7CisJc3dpdGNoIChjb3VudGVyKSB7CisJY2FzZSBYU0NBTEVfQ1lDTEVfQ09VTlRFUjoKKwkJYXNtIHZvbGF0aWxlKCJtY3IgcDE0LCAwLCAlMCwgYzEsIGMwLCAwIiA6IDogInIiICh2YWwpKTsKKwkJYnJlYWs7CisJY2FzZSBYU0NBTEVfQ09VTlRFUjA6CisJCWFzbSB2b2xhdGlsZSgibWNyIHAxNCwgMCwgJTAsIGMyLCBjMCwgMCIgOiA6ICJyIiAodmFsKSk7CisJCWJyZWFrOworCWNhc2UgWFNDQUxFX0NPVU5URVIxOgorCQlhc20gdm9sYXRpbGUoIm1jciBwMTQsIDAsICUwLCBjMywgYzAsIDAiIDogOiAiciIgKHZhbCkpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXJtX3BtdSB4c2NhbGUxcG11ID0geworCS5pZAkJPSBBUk1fUEVSRl9QTVVfSURfWFNDQUxFMSwKKwkubmFtZQkJPSAieHNjYWxlMSIsCisJLmhhbmRsZV9pcnEJPSB4c2NhbGUxcG11X2hhbmRsZV9pcnEsCisJLmVuYWJsZQkJPSB4c2NhbGUxcG11X2VuYWJsZV9ldmVudCwKKwkuZGlzYWJsZQk9IHhzY2FsZTFwbXVfZGlzYWJsZV9ldmVudCwKKwkucmVhZF9jb3VudGVyCT0geHNjYWxlMXBtdV9yZWFkX2NvdW50ZXIsCisJLndyaXRlX2NvdW50ZXIJPSB4c2NhbGUxcG11X3dyaXRlX2NvdW50ZXIsCisJLmdldF9ldmVudF9pZHgJPSB4c2NhbGUxcG11X2dldF9ldmVudF9pZHgsCisJLnN0YXJ0CQk9IHhzY2FsZTFwbXVfc3RhcnQsCisJLnN0b3AJCT0geHNjYWxlMXBtdV9zdG9wLAorCS5jYWNoZV9tYXAJPSAmeHNjYWxlX3BlcmZfY2FjaGVfbWFwLAorCS5ldmVudF9tYXAJPSAmeHNjYWxlX3BlcmZfbWFwLAorCS5yYXdfZXZlbnRfbWFzawk9IDB4RkYsCisJLm51bV9ldmVudHMJPSAzLAorCS5tYXhfcGVyaW9kCT0gKDFMTFUgPDwgMzIpIC0gMSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXJtX3BtdSAqX19pbml0IHhzY2FsZTFwbXVfaW5pdCh2b2lkKQoreworCXJldHVybiAmeHNjYWxlMXBtdTsKK30KKworI2RlZmluZSBYU0NBTEUyX09WRVJGTE9XRURfTUFTSwkweDAxZgorI2RlZmluZSBYU0NBTEUyX0NDT1VOVF9PVkVSRkxPVwkweDAwMQorI2RlZmluZSBYU0NBTEUyX0NPVU5UMF9PVkVSRkxPVwkweDAwMgorI2RlZmluZSBYU0NBTEUyX0NPVU5UMV9PVkVSRkxPVwkweDAwNAorI2RlZmluZSBYU0NBTEUyX0NPVU5UMl9PVkVSRkxPVwkweDAwOAorI2RlZmluZSBYU0NBTEUyX0NPVU5UM19PVkVSRkxPVwkweDAxMAorI2RlZmluZSBYU0NBTEUyX0NDT1VOVF9JTlRfRU4JMHgwMDEKKyNkZWZpbmUgWFNDQUxFMl9DT1VOVDBfSU5UX0VOCTB4MDAyCisjZGVmaW5lIFhTQ0FMRTJfQ09VTlQxX0lOVF9FTgkweDAwNAorI2RlZmluZSBYU0NBTEUyX0NPVU5UMl9JTlRfRU4JMHgwMDgKKyNkZWZpbmUgWFNDQUxFMl9DT1VOVDNfSU5UX0VOCTB4MDEwCisjZGVmaW5lIFhTQ0FMRTJfQ09VTlQwX0VWVF9TSEZUCTAKKyNkZWZpbmUgWFNDQUxFMl9DT1VOVDBfRVZUX01BU0sJKDB4ZmYgPDwgWFNDQUxFMl9DT1VOVDBfRVZUX1NIRlQpCisjZGVmaW5lIFhTQ0FMRTJfQ09VTlQxX0VWVF9TSEZUCTgKKyNkZWZpbmUgWFNDQUxFMl9DT1VOVDFfRVZUX01BU0sJKDB4ZmYgPDwgWFNDQUxFMl9DT1VOVDFfRVZUX1NIRlQpCisjZGVmaW5lIFhTQ0FMRTJfQ09VTlQyX0VWVF9TSEZUCTE2CisjZGVmaW5lIFhTQ0FMRTJfQ09VTlQyX0VWVF9NQVNLCSgweGZmIDw8IFhTQ0FMRTJfQ09VTlQyX0VWVF9TSEZUKQorI2RlZmluZSBYU0NBTEUyX0NPVU5UM19FVlRfU0hGVAkyNAorI2RlZmluZSBYU0NBTEUyX0NPVU5UM19FVlRfTUFTSwkoMHhmZiA8PCBYU0NBTEUyX0NPVU5UM19FVlRfU0hGVCkKKworc3RhdGljIGlubGluZSB1MzIKK3hzY2FsZTJwbXVfcmVhZF9wbW5jKHZvaWQpCit7CisJdTMyIHZhbDsKKwlhc20gdm9sYXRpbGUoIm1yYyBwMTQsIDAsICUwLCBjMCwgYzEsIDAiIDogIj1yIiAodmFsKSk7CisJLyogYml0cyAxLTIgYW5kIDQtMjMgYXJlIHJlYWQtdW5wcmVkaWN0YWJsZSAqLworCXJldHVybiB2YWwgJiAweGZmMDAwMDA5OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3hzY2FsZTJwbXVfd3JpdGVfcG1uYyh1MzIgdmFsKQoreworCS8qIGJpdHMgNC0yMyBhcmUgd3JpdGUtYXMtMCwgMjQtMzEgYXJlIHdyaXRlIGlnbm9yZWQgKi8KKwl2YWwgJj0gMHhmOworCWFzbSB2b2xhdGlsZSgibWNyIHAxNCwgMCwgJTAsIGMwLCBjMSwgMCIgOiA6ICJyIiAodmFsKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyCit4c2NhbGUycG11X3JlYWRfb3ZlcmZsb3dfZmxhZ3Modm9pZCkKK3sKKwl1MzIgdmFsOworCWFzbSB2b2xhdGlsZSgibXJjIHAxNCwgMCwgJTAsIGM1LCBjMSwgMCIgOiAiPXIiICh2YWwpKTsKKwlyZXR1cm4gdmFsOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3hzY2FsZTJwbXVfd3JpdGVfb3ZlcmZsb3dfZmxhZ3ModTMyIHZhbCkKK3sKKwlhc20gdm9sYXRpbGUoIm1jciBwMTQsIDAsICUwLCBjNSwgYzEsIDAiIDogOiAiciIgKHZhbCkpOworfQorCitzdGF0aWMgaW5saW5lIHUzMgoreHNjYWxlMnBtdV9yZWFkX2V2ZW50X3NlbGVjdCh2b2lkKQoreworCXUzMiB2YWw7CisJYXNtIHZvbGF0aWxlKCJtcmMgcDE0LCAwLCAlMCwgYzgsIGMxLCAwIiA6ICI9ciIgKHZhbCkpOworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAoreHNjYWxlMnBtdV93cml0ZV9ldmVudF9zZWxlY3QodTMyIHZhbCkKK3sKKwlhc20gdm9sYXRpbGUoIm1jciBwMTQsIDAsICUwLCBjOCwgYzEsIDAiIDogOiAiciIodmFsKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyCit4c2NhbGUycG11X3JlYWRfaW50X2VuYWJsZSh2b2lkKQoreworCXUzMiB2YWw7CisJYXNtIHZvbGF0aWxlKCJtcmMgcDE0LCAwLCAlMCwgYzQsIGMxLCAwIiA6ICI9ciIgKHZhbCkpOworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyB2b2lkCit4c2NhbGUycG11X3dyaXRlX2ludF9lbmFibGUodTMyIHZhbCkKK3sKKwlhc20gdm9sYXRpbGUoIm1jciBwMTQsIDAsICUwLCBjNCwgYzEsIDAiIDogOiAiciIgKHZhbCkpOworfQorCitzdGF0aWMgaW5saW5lIGludAoreHNjYWxlMl9wbW5jX2NvdW50ZXJfaGFzX292ZXJmbG93ZWQodW5zaWduZWQgbG9uZyBvZl9mbGFncywKKwkJCQkJZW51bSB4c2NhbGVfY291bnRlcnMgY291bnRlcikKK3sKKwlpbnQgcmV0ID0gMDsKKworCXN3aXRjaCAoY291bnRlcikgeworCWNhc2UgWFNDQUxFX0NZQ0xFX0NPVU5URVI6CisJCXJldCA9IG9mX2ZsYWdzICYgWFNDQUxFMl9DQ09VTlRfT1ZFUkZMT1c7CisJCWJyZWFrOworCWNhc2UgWFNDQUxFX0NPVU5URVIwOgorCQlyZXQgPSBvZl9mbGFncyAmIFhTQ0FMRTJfQ09VTlQwX09WRVJGTE9XOworCQlicmVhazsKKwljYXNlIFhTQ0FMRV9DT1VOVEVSMToKKwkJcmV0ID0gb2ZfZmxhZ3MgJiBYU0NBTEUyX0NPVU5UMV9PVkVSRkxPVzsKKwkJYnJlYWs7CisJY2FzZSBYU0NBTEVfQ09VTlRFUjI6CisJCXJldCA9IG9mX2ZsYWdzICYgWFNDQUxFMl9DT1VOVDJfT1ZFUkZMT1c7CisJCWJyZWFrOworCWNhc2UgWFNDQUxFX0NPVU5URVIzOgorCQlyZXQgPSBvZl9mbGFncyAmIFhTQ0FMRTJfQ09VTlQzX09WRVJGTE9XOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlXQVJOX09OQ0UoMSwgImludmFsaWQgY291bnRlciBudW1iZXIgKCVkKVxuIiwgY291bnRlcik7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlycXJldHVybl90Cit4c2NhbGUycG11X2hhbmRsZV9pcnEoaW50IGlycV9udW0sIHZvaWQgKmRldikKK3sKKwl1bnNpZ25lZCBsb25nIHBtbmMsIG9mX2ZsYWdzOworCXN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhIGRhdGE7CisJc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWM7CisJc3RydWN0IHB0X3JlZ3MgKnJlZ3M7CisJaW50IGlkeDsKKworCS8qIERpc2FibGUgdGhlIFBNVS4gKi8KKwlwbW5jID0geHNjYWxlMnBtdV9yZWFkX3BtbmMoKTsKKwl4c2NhbGUycG11X3dyaXRlX3BtbmMocG1uYyAmIH5YU0NBTEVfUE1VX0VOQUJMRSk7CisKKwkvKiBDaGVjayB0aGUgb3ZlcmZsb3cgZmxhZyByZWdpc3Rlci4gKi8KKwlvZl9mbGFncyA9IHhzY2FsZTJwbXVfcmVhZF9vdmVyZmxvd19mbGFncygpOworCWlmICghKG9mX2ZsYWdzICYgWFNDQUxFMl9PVkVSRkxPV0VEX01BU0spKQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwkvKiBDbGVhciB0aGUgb3ZlcmZsb3cgYml0cy4gKi8KKwl4c2NhbGUycG11X3dyaXRlX292ZXJmbG93X2ZsYWdzKG9mX2ZsYWdzKTsKKworCXJlZ3MgPSBnZXRfaXJxX3JlZ3MoKTsKKworCXBlcmZfc2FtcGxlX2RhdGFfaW5pdCgmZGF0YSwgMCk7CisKKwljcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7CisJZm9yIChpZHggPSAwOyBpZHggPD0gYXJtcG11LT5udW1fZXZlbnRzOyArK2lkeCkgeworCQlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQgPSBjcHVjLT5ldmVudHNbaWR4XTsKKwkJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YzsKKworCQlpZiAoIXRlc3RfYml0KGlkeCwgY3B1Yy0+YWN0aXZlX21hc2spKQorCQkJY29udGludWU7CisKKwkJaWYgKCF4c2NhbGUyX3BtbmNfY291bnRlcl9oYXNfb3ZlcmZsb3dlZChwbW5jLCBpZHgpKQorCQkJY29udGludWU7CisKKwkJaHdjID0gJmV2ZW50LT5odzsKKwkJYXJtcG11X2V2ZW50X3VwZGF0ZShldmVudCwgaHdjLCBpZHgpOworCQlkYXRhLnBlcmlvZCA9IGV2ZW50LT5ody5sYXN0X3BlcmlvZDsKKwkJaWYgKCFhcm1wbXVfZXZlbnRfc2V0X3BlcmlvZChldmVudCwgaHdjLCBpZHgpKQorCQkJY29udGludWU7CisKKwkJaWYgKHBlcmZfZXZlbnRfb3ZlcmZsb3coZXZlbnQsIDAsICZkYXRhLCByZWdzKSkKKwkJCWFybXBtdS0+ZGlzYWJsZShod2MsIGlkeCk7CisJfQorCisJaXJxX3dvcmtfcnVuKCk7CisKKwkvKgorCSAqIFJlLWVuYWJsZSB0aGUgUE1VLgorCSAqLworCXBtbmMgPSB4c2NhbGUycG11X3JlYWRfcG1uYygpIHwgWFNDQUxFX1BNVV9FTkFCTEU7CisJeHNjYWxlMnBtdV93cml0ZV9wbW5jKHBtbmMpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZAoreHNjYWxlMnBtdV9lbmFibGVfZXZlbnQoc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YywgaW50IGlkeCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzLCBpZW4sIGV2dHNlbDsKKworCWllbiA9IHhzY2FsZTJwbXVfcmVhZF9pbnRfZW5hYmxlKCk7CisJZXZ0c2VsID0geHNjYWxlMnBtdV9yZWFkX2V2ZW50X3NlbGVjdCgpOworCisJc3dpdGNoIChpZHgpIHsKKwljYXNlIFhTQ0FMRV9DWUNMRV9DT1VOVEVSOgorCQlpZW4gfD0gWFNDQUxFMl9DQ09VTlRfSU5UX0VOOworCQlicmVhazsKKwljYXNlIFhTQ0FMRV9DT1VOVEVSMDoKKwkJaWVuIHw9IFhTQ0FMRTJfQ09VTlQwX0lOVF9FTjsKKwkJZXZ0c2VsICY9IH5YU0NBTEUyX0NPVU5UMF9FVlRfTUFTSzsKKwkJZXZ0c2VsIHw9IGh3Yy0+Y29uZmlnX2Jhc2UgPDwgWFNDQUxFMl9DT1VOVDBfRVZUX1NIRlQ7CisJCWJyZWFrOworCWNhc2UgWFNDQUxFX0NPVU5URVIxOgorCQlpZW4gfD0gWFNDQUxFMl9DT1VOVDFfSU5UX0VOOworCQlldnRzZWwgJj0gflhTQ0FMRTJfQ09VTlQxX0VWVF9NQVNLOworCQlldnRzZWwgfD0gaHdjLT5jb25maWdfYmFzZSA8PCBYU0NBTEUyX0NPVU5UMV9FVlRfU0hGVDsKKwkJYnJlYWs7CisJY2FzZSBYU0NBTEVfQ09VTlRFUjI6CisJCWllbiB8PSBYU0NBTEUyX0NPVU5UMl9JTlRfRU47CisJCWV2dHNlbCAmPSB+WFNDQUxFMl9DT1VOVDJfRVZUX01BU0s7CisJCWV2dHNlbCB8PSBod2MtPmNvbmZpZ19iYXNlIDw8IFhTQ0FMRTJfQ09VTlQyX0VWVF9TSEZUOworCQlicmVhazsKKwljYXNlIFhTQ0FMRV9DT1VOVEVSMzoKKwkJaWVuIHw9IFhTQ0FMRTJfQ09VTlQzX0lOVF9FTjsKKwkJZXZ0c2VsICY9IH5YU0NBTEUyX0NPVU5UM19FVlRfTUFTSzsKKwkJZXZ0c2VsIHw9IGh3Yy0+Y29uZmlnX2Jhc2UgPDwgWFNDQUxFMl9DT1VOVDNfRVZUX1NIRlQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVdBUk5fT05DRSgxLCAiaW52YWxpZCBjb3VudGVyIG51bWJlciAoJWQpXG4iLCBpZHgpOworCQlyZXR1cm47CisJfQorCisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZwbXVfbG9jaywgZmxhZ3MpOworCXhzY2FsZTJwbXVfd3JpdGVfZXZlbnRfc2VsZWN0KGV2dHNlbCk7CisJeHNjYWxlMnBtdV93cml0ZV9pbnRfZW5hYmxlKGllbik7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtdV9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkCit4c2NhbGUycG11X2Rpc2FibGVfZXZlbnQoc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YywgaW50IGlkeCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzLCBpZW4sIGV2dHNlbDsKKworCWllbiA9IHhzY2FsZTJwbXVfcmVhZF9pbnRfZW5hYmxlKCk7CisJZXZ0c2VsID0geHNjYWxlMnBtdV9yZWFkX2V2ZW50X3NlbGVjdCgpOworCisJc3dpdGNoIChpZHgpIHsKKwljYXNlIFhTQ0FMRV9DWUNMRV9DT1VOVEVSOgorCQlpZW4gJj0gflhTQ0FMRTJfQ0NPVU5UX0lOVF9FTjsKKwkJYnJlYWs7CisJY2FzZSBYU0NBTEVfQ09VTlRFUjA6CisJCWllbiAmPSB+WFNDQUxFMl9DT1VOVDBfSU5UX0VOOworCQlldnRzZWwgJj0gflhTQ0FMRTJfQ09VTlQwX0VWVF9NQVNLOworCQlldnRzZWwgfD0gWFNDQUxFX1BFUkZDVFJfVU5VU0VEIDw8IFhTQ0FMRTJfQ09VTlQwX0VWVF9TSEZUOworCQlicmVhazsKKwljYXNlIFhTQ0FMRV9DT1VOVEVSMToKKwkJaWVuICY9IH5YU0NBTEUyX0NPVU5UMV9JTlRfRU47CisJCWV2dHNlbCAmPSB+WFNDQUxFMl9DT1VOVDFfRVZUX01BU0s7CisJCWV2dHNlbCB8PSBYU0NBTEVfUEVSRkNUUl9VTlVTRUQgPDwgWFNDQUxFMl9DT1VOVDFfRVZUX1NIRlQ7CisJCWJyZWFrOworCWNhc2UgWFNDQUxFX0NPVU5URVIyOgorCQlpZW4gJj0gflhTQ0FMRTJfQ09VTlQyX0lOVF9FTjsKKwkJZXZ0c2VsICY9IH5YU0NBTEUyX0NPVU5UMl9FVlRfTUFTSzsKKwkJZXZ0c2VsIHw9IFhTQ0FMRV9QRVJGQ1RSX1VOVVNFRCA8PCBYU0NBTEUyX0NPVU5UMl9FVlRfU0hGVDsKKwkJYnJlYWs7CisJY2FzZSBYU0NBTEVfQ09VTlRFUjM6CisJCWllbiAmPSB+WFNDQUxFMl9DT1VOVDNfSU5UX0VOOworCQlldnRzZWwgJj0gflhTQ0FMRTJfQ09VTlQzX0VWVF9NQVNLOworCQlldnRzZWwgfD0gWFNDQUxFX1BFUkZDVFJfVU5VU0VEIDw8IFhTQ0FMRTJfQ09VTlQzX0VWVF9TSEZUOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlXQVJOX09OQ0UoMSwgImludmFsaWQgY291bnRlciBudW1iZXIgKCVkKVxuIiwgaWR4KTsKKwkJcmV0dXJuOworCX0KKworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcG11X2xvY2ssIGZsYWdzKTsKKwl4c2NhbGUycG11X3dyaXRlX2V2ZW50X3NlbGVjdChldnRzZWwpOworCXhzY2FsZTJwbXVfd3JpdGVfaW50X2VuYWJsZShpZW4pOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbXVfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50Cit4c2NhbGUycG11X2dldF9ldmVudF9pZHgoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMsCisJCQlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqZXZlbnQpCit7CisJaW50IGlkeCA9IHhzY2FsZTFwbXVfZ2V0X2V2ZW50X2lkeChjcHVjLCBldmVudCk7CisJaWYgKGlkeCA+PSAwKQorCQlnb3RvIG91dDsKKworCWlmICghdGVzdF9hbmRfc2V0X2JpdChYU0NBTEVfQ09VTlRFUjMsIGNwdWMtPnVzZWRfbWFzaykpCisJCWlkeCA9IFhTQ0FMRV9DT1VOVEVSMzsKKwllbHNlIGlmICghdGVzdF9hbmRfc2V0X2JpdChYU0NBTEVfQ09VTlRFUjIsIGNwdWMtPnVzZWRfbWFzaykpCisJCWlkeCA9IFhTQ0FMRV9DT1VOVEVSMjsKK291dDoKKwlyZXR1cm4gaWR4OworfQorCitzdGF0aWMgdm9pZAoreHNjYWxlMnBtdV9zdGFydCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZhbDsKKworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcG11X2xvY2ssIGZsYWdzKTsKKwl2YWwgPSB4c2NhbGUycG11X3JlYWRfcG1uYygpICYgflhTQ0FMRV9QTVVfQ05UNjQ7CisJdmFsIHw9IFhTQ0FMRV9QTVVfRU5BQkxFOworCXhzY2FsZTJwbXVfd3JpdGVfcG1uYyh2YWwpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbXVfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZAoreHNjYWxlMnBtdV9zdG9wKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFncywgdmFsOworCisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZwbXVfbG9jaywgZmxhZ3MpOworCXZhbCA9IHhzY2FsZTJwbXVfcmVhZF9wbW5jKCk7CisJdmFsICY9IH5YU0NBTEVfUE1VX0VOQUJMRTsKKwl4c2NhbGUycG11X3dyaXRlX3BtbmModmFsKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG11X2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGlubGluZSB1MzIKK3hzY2FsZTJwbXVfcmVhZF9jb3VudGVyKGludCBjb3VudGVyKQoreworCXUzMiB2YWwgPSAwOworCisJc3dpdGNoIChjb3VudGVyKSB7CisJY2FzZSBYU0NBTEVfQ1lDTEVfQ09VTlRFUjoKKwkJYXNtIHZvbGF0aWxlKCJtcmMgcDE0LCAwLCAlMCwgYzEsIGMxLCAwIiA6ICI9ciIgKHZhbCkpOworCQlicmVhazsKKwljYXNlIFhTQ0FMRV9DT1VOVEVSMDoKKwkJYXNtIHZvbGF0aWxlKCJtcmMgcDE0LCAwLCAlMCwgYzAsIGMyLCAwIiA6ICI9ciIgKHZhbCkpOworCQlicmVhazsKKwljYXNlIFhTQ0FMRV9DT1VOVEVSMToKKwkJYXNtIHZvbGF0aWxlKCJtcmMgcDE0LCAwLCAlMCwgYzEsIGMyLCAwIiA6ICI9ciIgKHZhbCkpOworCQlicmVhazsKKwljYXNlIFhTQ0FMRV9DT1VOVEVSMjoKKwkJYXNtIHZvbGF0aWxlKCJtcmMgcDE0LCAwLCAlMCwgYzIsIGMyLCAwIiA6ICI9ciIgKHZhbCkpOworCQlicmVhazsKKwljYXNlIFhTQ0FMRV9DT1VOVEVSMzoKKwkJYXNtIHZvbGF0aWxlKCJtcmMgcDE0LCAwLCAlMCwgYzMsIGMyLCAwIiA6ICI9ciIgKHZhbCkpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gdmFsOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3hzY2FsZTJwbXVfd3JpdGVfY291bnRlcihpbnQgY291bnRlciwgdTMyIHZhbCkKK3sKKwlzd2l0Y2ggKGNvdW50ZXIpIHsKKwljYXNlIFhTQ0FMRV9DWUNMRV9DT1VOVEVSOgorCQlhc20gdm9sYXRpbGUoIm1jciBwMTQsIDAsICUwLCBjMSwgYzEsIDAiIDogOiAiciIgKHZhbCkpOworCQlicmVhazsKKwljYXNlIFhTQ0FMRV9DT1VOVEVSMDoKKwkJYXNtIHZvbGF0aWxlKCJtY3IgcDE0LCAwLCAlMCwgYzAsIGMyLCAwIiA6IDogInIiICh2YWwpKTsKKwkJYnJlYWs7CisJY2FzZSBYU0NBTEVfQ09VTlRFUjE6CisJCWFzbSB2b2xhdGlsZSgibWNyIHAxNCwgMCwgJTAsIGMxLCBjMiwgMCIgOiA6ICJyIiAodmFsKSk7CisJCWJyZWFrOworCWNhc2UgWFNDQUxFX0NPVU5URVIyOgorCQlhc20gdm9sYXRpbGUoIm1jciBwMTQsIDAsICUwLCBjMiwgYzIsIDAiIDogOiAiciIgKHZhbCkpOworCQlicmVhazsKKwljYXNlIFhTQ0FMRV9DT1VOVEVSMzoKKwkJYXNtIHZvbGF0aWxlKCJtY3IgcDE0LCAwLCAlMCwgYzMsIGMyLCAwIiA6IDogInIiICh2YWwpKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGFybV9wbXUgeHNjYWxlMnBtdSA9IHsKKwkuaWQJCT0gQVJNX1BFUkZfUE1VX0lEX1hTQ0FMRTIsCisJLm5hbWUJCT0gInhzY2FsZTIiLAorCS5oYW5kbGVfaXJxCT0geHNjYWxlMnBtdV9oYW5kbGVfaXJxLAorCS5lbmFibGUJCT0geHNjYWxlMnBtdV9lbmFibGVfZXZlbnQsCisJLmRpc2FibGUJPSB4c2NhbGUycG11X2Rpc2FibGVfZXZlbnQsCisJLnJlYWRfY291bnRlcgk9IHhzY2FsZTJwbXVfcmVhZF9jb3VudGVyLAorCS53cml0ZV9jb3VudGVyCT0geHNjYWxlMnBtdV93cml0ZV9jb3VudGVyLAorCS5nZXRfZXZlbnRfaWR4CT0geHNjYWxlMnBtdV9nZXRfZXZlbnRfaWR4LAorCS5zdGFydAkJPSB4c2NhbGUycG11X3N0YXJ0LAorCS5zdG9wCQk9IHhzY2FsZTJwbXVfc3RvcCwKKwkuY2FjaGVfbWFwCT0gJnhzY2FsZV9wZXJmX2NhY2hlX21hcCwKKwkuZXZlbnRfbWFwCT0gJnhzY2FsZV9wZXJmX21hcCwKKwkucmF3X2V2ZW50X21hc2sJPSAweEZGLAorCS5udW1fZXZlbnRzCT0gNSwKKwkubWF4X3BlcmlvZAk9ICgxTExVIDw8IDMyKSAtIDEsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGFybV9wbXUgKl9faW5pdCB4c2NhbGUycG11X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gJnhzY2FsZTJwbXU7Cit9CisjZWxzZQorc3RhdGljIGNvbnN0IHN0cnVjdCBhcm1fcG11ICpfX2luaXQgeHNjYWxlMXBtdV9pbml0KHZvaWQpCit7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXJtX3BtdSAqX19pbml0IHhzY2FsZTJwbXVfaW5pdCh2b2lkKQoreworCXJldHVybiBOVUxMOworfQorI2VuZGlmCS8qIENPTkZJR19DUFVfWFNDQUxFICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvcGo0LWNwMC5jIGIvYXJjaC9hcm0va2VybmVsL3BqNC1jcDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGIxYjA3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0va2VybmVsL3BqNC1jcDAuYwpAQCAtMCwwICsxLDk0IEBACisvKgorICogbGludXgvYXJjaC9hcm0va2VybmVsL3BqNC1jcDAuYworICoKKyAqIFBKNCBpV01NWHQgY29wcm9jZXNzb3IgY29udGV4dCBzd2l0Y2hpbmcgYW5kIGhhbmRsaW5nCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIE1hcnZlbGwgSW50ZXJuYXRpb25hbCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGFzbS90aHJlYWRfbm90aWZ5Lmg+CisKK3N0YXRpYyBpbnQgaXdtbXh0X2RvKHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwgdW5zaWduZWQgbG9uZyBjbWQsIHZvaWQgKnQpCit7CisJc3RydWN0IHRocmVhZF9pbmZvICp0aHJlYWQgPSB0OworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFRIUkVBRF9OT1RJRllfRkxVU0g6CisJCS8qCisJCSAqIGZsdXNoX3RocmVhZCgpIHplcm9lcyB0aHJlYWQtPmZwc3RhdGUsIHNvIG5vIG5lZWQKKwkJICogdG8gZG8gYW55dGhpbmcgaGVyZS4KKwkJICoKKwkJICogRkFMTFRIUk9VR0g6IEVuc3VyZSB3ZSBkb24ndCB0cnkgdG8gb3ZlcndyaXRlIG91ciBuZXdseQorCQkgKiBpbml0aWFsaXNlZCBzdGF0ZSBpbmZvcm1hdGlvbiBvbiB0aGUgZmlyc3QgZmF1bHQuCisJCSAqLworCisJY2FzZSBUSFJFQURfTk9USUZZX0VYSVQ6CisJCWl3bW14dF90YXNrX3JlbGVhc2UodGhyZWFkKTsKKwkJYnJlYWs7CisKKwljYXNlIFRIUkVBRF9OT1RJRllfU1dJVENIOgorCQlpd21teHRfdGFza19zd2l0Y2godGhyZWFkKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIE5PVElGWV9ET05FOworfQorCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGl3bW14dF9ub3RpZmllcl9ibG9jayA9IHsKKwkubm90aWZpZXJfY2FsbAk9IGl3bW14dF9kbywKK307CisKKworc3RhdGljIHUzMiBfX2luaXQgcGo0X2NwX2FjY2Vzc19yZWFkKHZvaWQpCit7CisJdTMyIHZhbHVlOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCQkibXJjCXAxNSwgMCwgJTAsIGMxLCBjMCwgMlxuXHQiCisJCTogIj1yIiAodmFsdWUpKTsKKwlyZXR1cm4gdmFsdWU7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBwajRfY3BfYWNjZXNzX3dyaXRlKHUzMiB2YWx1ZSkKK3sKKwl1MzIgdGVtcDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fICgKKwkJIm1jcglwMTUsIDAsICUxLCBjMSwgYzAsIDJcblx0IgorCQkibXJjCXAxNSwgMCwgJTAsIGMxLCBjMCwgMlxuXHQiCisJCSJtb3YJJTAsICUwXG5cdCIKKwkJInN1YglwYywgcGMsICM0XG5cdCIKKwkJOiAiPXIiICh0ZW1wKSA6ICJyIiAodmFsdWUpKTsKK30KKworCisvKgorICogRGlzYWJsZSBDUDAvQ1AxIG9uIGJvb3QsIGFuZCBsZXQgY2FsbF9mcGUoKSBhbmQgdGhlIGlXTU1YdCBsYXp5CisgKiBzd2l0Y2ggY29kZSBoYW5kbGUgaVdNTVh0IGNvbnRleHQgc3dpdGNoaW5nLgorICovCitzdGF0aWMgaW50IF9faW5pdCBwajRfY3AwX2luaXQodm9pZCkKK3sKKwl1MzIgY3BfYWNjZXNzOworCisJY3BfYWNjZXNzID0gcGo0X2NwX2FjY2Vzc19yZWFkKCkgJiB+MHhmOworCXBqNF9jcF9hY2Nlc3Nfd3JpdGUoY3BfYWNjZXNzKTsKKworCXByaW50ayhLRVJOX0lORk8gIlBKNCBpV01NWHQgY29wcm9jZXNzb3IgZW5hYmxlZC5cbiIpOworCWVsZl9od2NhcCB8PSBIV0NBUF9JV01NWFQ7CisJdGhyZWFkX3JlZ2lzdGVyX25vdGlmaWVyKCZpd21teHRfbm90aWZpZXJfYmxvY2spOworCisJcmV0dXJuIDA7Cit9CisKK2xhdGVfaW5pdGNhbGwocGo0X2NwMF9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvYXJtL2tlcm5lbC9wdHJhY2UuYwppbmRleCAzZTk3NDgzLi4xOWM2ODE2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3B0cmFjZS5jCkBAIC0xMDYwLDggKzEwNjAsOCBAQAogCQkJZ290byBvdXQ7CiAKIAkJaWYgKChnZW5fdHlwZSAmIGltcGxpZWRfdHlwZSkgIT0gZ2VuX3R5cGUpIHsKLQkJCQlyZXQgPSAtRUlOVkFMOwotCQkJCWdvdG8gb3V0OworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0OwogCQl9CiAKIAkJYXR0ci5icF9sZW4JPSBnZW5fbGVuOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3NjaGVkX2Nsb2NrLmMgYi9hcmNoL2FybS9rZXJuZWwvc2NoZWRfY2xvY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yY2RjYzkyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0va2VybmVsL3NjaGVkX2Nsb2NrLmMKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIHNjaGVkX2Nsb2NrLmM6IHN1cHBvcnQgZm9yIGV4dGVuZGluZyBjb3VudGVycyB0byBmdWxsIDY0LWJpdCBucyBjb3VudGVyCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2Nsb2Nrc291cmNlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisKKyNpbmNsdWRlIDxhc20vc2NoZWRfY2xvY2suaD4KKworc3RhdGljIHZvaWQgc2NoZWRfY2xvY2tfcG9sbCh1bnNpZ25lZCBsb25nIHdyYXBfdGlja3MpOworc3RhdGljIERFRklORV9USU1FUihzY2hlZF9jbG9ja190aW1lciwgc2NoZWRfY2xvY2tfcG9sbCwgMCwgMCk7CitzdGF0aWMgdm9pZCAoKnNjaGVkX2Nsb2NrX3VwZGF0ZV9mbikodm9pZCk7CisKK3N0YXRpYyB2b2lkIHNjaGVkX2Nsb2NrX3BvbGwodW5zaWduZWQgbG9uZyB3cmFwX3RpY2tzKQoreworCW1vZF90aW1lcigmc2NoZWRfY2xvY2tfdGltZXIsIHJvdW5kX2ppZmZpZXMoamlmZmllcyArIHdyYXBfdGlja3MpKTsKKwlzY2hlZF9jbG9ja191cGRhdGVfZm4oKTsKK30KKwordm9pZCBfX2luaXQgaW5pdF9zY2hlZF9jbG9jayhzdHJ1Y3QgY2xvY2tfZGF0YSAqY2QsIHZvaWQgKCp1cGRhdGUpKHZvaWQpLAorCXVuc2lnbmVkIGludCBjbG9ja19iaXRzLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJdW5zaWduZWQgbG9uZyByLCB3OworCXU2NCByZXMsIHdyYXA7CisJY2hhciByX3VuaXQ7CisKKwlzY2hlZF9jbG9ja191cGRhdGVfZm4gPSB1cGRhdGU7CisKKwkvKiBjYWxjdWxhdGUgdGhlIG11bHQvc2hpZnQgdG8gY29udmVydCBjb3VudGVyIHRpY2tzIHRvIG5zLiAqLworCWNsb2Nrc19jYWxjX211bHRfc2hpZnQoJmNkLT5tdWx0LCAmY2QtPnNoaWZ0LCByYXRlLCBOU0VDX1BFUl9TRUMsIDYwKTsKKworCXIgPSByYXRlOworCWlmIChyID49IDQwMDAwMDApIHsKKwkJciAvPSAxMDAwMDAwOworCQlyX3VuaXQgPSAnTSc7CisJfSBlbHNlIHsKKwkJciAvPSAxMDAwOworCQlyX3VuaXQgPSAnayc7CisJfQorCisJLyogY2FsY3VsYXRlIGhvdyBtYW55IG5zIHVudGlsIHdlIHdyYXAgKi8KKwl3cmFwID0gY3ljX3RvX25zKCgxVUxMIDw8IGNsb2NrX2JpdHMpIC0gMSwgY2QtPm11bHQsIGNkLT5zaGlmdCk7CisJZG9fZGl2KHdyYXAsIE5TRUNfUEVSX01TRUMpOworCXcgPSB3cmFwOworCisJLyogY2FsY3VsYXRlIHRoZSBucyByZXNvbHV0aW9uIG9mIHRoaXMgY291bnRlciAqLworCXJlcyA9IGN5Y190b19ucygxVUxMLCBjZC0+bXVsdCwgY2QtPnNoaWZ0KTsKKwlwcl9pbmZvKCJzY2hlZF9jbG9jazogJXUgYml0cyBhdCAlbHUlY0h6LCByZXNvbHV0aW9uICVsbHVucywgd3JhcHMgZXZlcnkgJWx1bXNcbiIsCisJCWNsb2NrX2JpdHMsIHIsIHJfdW5pdCwgcmVzLCB3KTsKKworCS8qCisJICogU3RhcnQgdGhlIHRpbWVyIHRvIGtlZXAgc2NoZWRfY2xvY2soKSBwcm9wZXJseSB1cGRhdGVkIGFuZAorCSAqIHNldHMgdGhlIGluaXRpYWwgZXBvY2guCisJICovCisJc2NoZWRfY2xvY2tfdGltZXIuZGF0YSA9IG1zZWNzX3RvX2ppZmZpZXModyAtICh3IC8gMTApKTsKKwlzY2hlZF9jbG9ja19wb2xsKHNjaGVkX2Nsb2NrX3RpbWVyLmRhdGEpOworCisJLyoKKwkgKiBFbnN1cmUgdGhhdCBzY2hlZF9jbG9jaygpIHN0YXJ0cyBvZmYgYXQgMG5zCisJICovCisJY2QtPmVwb2NoX25zID0gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9hcm0va2VybmVsL3NldHVwLmMKaW5kZXggMzM2ZjE0ZS4uMzQ1NWFkMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3NldHVwLmMKQEAgLTc1LDkgKzc1LDkgQEAKIAogdW5zaWduZWQgaW50IHByb2Nlc3Nvcl9pZDsKIEVYUE9SVF9TWU1CT0wocHJvY2Vzc29yX2lkKTsKLXVuc2lnbmVkIGludCBfX21hY2hpbmVfYXJjaF90eXBlOwordW5zaWduZWQgaW50IF9fbWFjaGluZV9hcmNoX3R5cGUgX19yZWFkX21vc3RseTsKIEVYUE9SVF9TWU1CT0woX19tYWNoaW5lX2FyY2hfdHlwZSk7Ci11bnNpZ25lZCBpbnQgY2FjaGVpZDsKK3Vuc2lnbmVkIGludCBjYWNoZWlkIF9fcmVhZF9tb3N0bHk7CiBFWFBPUlRfU1lNQk9MKGNhY2hlaWQpOwogCiB1bnNpZ25lZCBpbnQgX19hdGFnc19wb2ludGVyIF9faW5pdGRhdGE7CkBAIC05MSwyNCArOTEsMjQgQEAKIHVuc2lnbmVkIGludCBzeXN0ZW1fc2VyaWFsX2hpZ2g7CiBFWFBPUlRfU1lNQk9MKHN5c3RlbV9zZXJpYWxfaGlnaCk7CiAKLXVuc2lnbmVkIGludCBlbGZfaHdjYXA7Cit1bnNpZ25lZCBpbnQgZWxmX2h3Y2FwIF9fcmVhZF9tb3N0bHk7CiBFWFBPUlRfU1lNQk9MKGVsZl9od2NhcCk7CiAKIAogI2lmZGVmIE1VTFRJX0NQVQotc3RydWN0IHByb2Nlc3NvciBwcm9jZXNzb3I7CitzdHJ1Y3QgcHJvY2Vzc29yIHByb2Nlc3NvciBfX3JlYWRfbW9zdGx5OwogI2VuZGlmCiAjaWZkZWYgTVVMVElfVExCCi1zdHJ1Y3QgY3B1X3RsYl9mbnMgY3B1X3RsYjsKK3N0cnVjdCBjcHVfdGxiX2ZucyBjcHVfdGxiIF9fcmVhZF9tb3N0bHk7CiAjZW5kaWYKICNpZmRlZiBNVUxUSV9VU0VSCi1zdHJ1Y3QgY3B1X3VzZXJfZm5zIGNwdV91c2VyOworc3RydWN0IGNwdV91c2VyX2ZucyBjcHVfdXNlciBfX3JlYWRfbW9zdGx5OwogI2VuZGlmCiAjaWZkZWYgTVVMVElfQ0FDSEUKLXN0cnVjdCBjcHVfY2FjaGVfZm5zIGNwdV9jYWNoZTsKK3N0cnVjdCBjcHVfY2FjaGVfZm5zIGNwdV9jYWNoZSBfX3JlYWRfbW9zdGx5OwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX09VVEVSX0NBQ0hFCi1zdHJ1Y3Qgb3V0ZXJfY2FjaGVfZm5zIG91dGVyX2NhY2hlOworc3RydWN0IG91dGVyX2NhY2hlX2ZucyBvdXRlcl9jYWNoZSBfX3JlYWRfbW9zdGx5OwogRVhQT1JUX1NZTUJPTChvdXRlcl9jYWNoZSk7CiAjZW5kaWYKIApAQCAtMTI2LDYgKzEyNiw3IEBACiBzdGF0aWMgY29uc3QgY2hhciAqY3B1X25hbWU7CiBzdGF0aWMgY29uc3QgY2hhciAqbWFjaGluZV9uYW1lOwogc3RhdGljIGNoYXIgX19pbml0ZGF0YSBjbWRfbGluZVtDT01NQU5EX0xJTkVfU0laRV07CitzdHJ1Y3QgbWFjaGluZV9kZXNjICptYWNoaW5lX2Rlc2MgX19pbml0ZGF0YTsKIAogc3RhdGljIGNoYXIgZGVmYXVsdF9jb21tYW5kX2xpbmVbQ09NTUFORF9MSU5FX1NJWkVdIF9faW5pdGRhdGEgPSBDT05GSUdfQ01ETElORTsKIHN0YXRpYyB1bmlvbiB7IGNoYXIgY1s0XTsgdW5zaWduZWQgbG9uZyBsOyB9IGVuZGlhbl90ZXN0IF9faW5pdGRhdGEgPSB7IHsgJ2wnLCAnPycsICc/JywgJ2InIH0gfTsKQEAgLTcwOCwxMyArNzA5LDExIEBACiAJeyAwLCBBVEFHX05PTkUgfQogfTsKIAotc3RhdGljIHZvaWQgKCppbml0X21hY2hpbmUpKHZvaWQpIF9faW5pdGRhdGE7Ci0KIHN0YXRpYyBpbnQgX19pbml0IGN1c3RvbWl6ZV9tYWNoaW5lKHZvaWQpCiB7CiAJLyogY3VzdG9taXplcyBwbGF0Zm9ybSBkZXZpY2VzLCBvciBhZGRzIG5ldyBvbmVzICovCi0JaWYgKGluaXRfbWFjaGluZSkKLQkJaW5pdF9tYWNoaW5lKCk7CisJaWYgKG1hY2hpbmVfZGVzYy0+aW5pdF9tYWNoaW5lKQorCQltYWNoaW5lX2Rlc2MtPmluaXRfbWFjaGluZSgpOwogCXJldHVybiAwOwogfQogYXJjaF9pbml0Y2FsbChjdXN0b21pemVfbWFjaGluZSk7CkBAIC04MDksNiArODA4LDcgQEAKIAogCXNldHVwX3Byb2Nlc3NvcigpOwogCW1kZXNjID0gc2V0dXBfbWFjaGluZShtYWNoaW5lX2FyY2hfdHlwZSk7CisJbWFjaGluZV9kZXNjID0gbWRlc2M7CiAJbWFjaGluZV9uYW1lID0gbWRlc2MtPm5hbWU7CiAKIAlpZiAobWRlc2MtPnNvZnRfcmVib290KQpAQCAtODY4LDEzICs4NjgsOSBAQAogCWNwdV9pbml0KCk7CiAJdGNtX2luaXQoKTsKIAotCS8qCi0JICogU2V0IHVwIHZhcmlvdXMgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHBvaW50ZXJzCi0JICovCi0JYXJjaF9ucl9pcnFzID0gbWRlc2MtPm5yX2lycXM7Ci0JaW5pdF9hcmNoX2lycSA9IG1kZXNjLT5pbml0X2lycTsKLQlzeXN0ZW1fdGltZXIgPSBtZGVzYy0+dGltZXI7Ci0JaW5pdF9tYWNoaW5lID0gbWRlc2MtPmluaXRfbWFjaGluZTsKKyNpZmRlZiBDT05GSUdfTVVMVElfSVJRX0hBTkRMRVIKKwloYW5kbGVfYXJjaF9pcnEgPSBtZGVzYy0+aGFuZGxlX2lycTsKKyNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1ZUCiAjaWYgZGVmaW5lZChDT05GSUdfVkdBX0NPTlNPTEUpCkBAIC04ODQsNiArODgwLDkgQEAKICNlbmRpZgogI2VuZGlmCiAJZWFybHlfdHJhcF9pbml0KCk7CisKKwlpZiAobWRlc2MtPmluaXRfZWFybHkpCisJCW1kZXNjLT5pbml0X2Vhcmx5KCk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3NtcC5jIGIvYXJjaC9hcm0va2VybmVsL3NtcC5jCmluZGV4IDkwNjY0NzMuLjQ1MzllYmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9zbXAuYworKysgYi9hcmNoL2FybS9rZXJuZWwvc21wLmMKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CkBAIC0yNCw2ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvY2xvY2tjaGlwcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KIAogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgpAQCAtMzcsNyArMzksNiBAQAogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vbG9jYWx0aW1lci5oPgotI2luY2x1ZGUgPGFzbS9zbXBfcGxhdC5oPgogCiAvKgogICogYXMgZnJvbSAyLjUsIGtlcm5lbHMgbm8gbG9uZ2VyIGhhdmUgYW4gaW5pdF90YXNrcyBzdHJ1Y3R1cmUKQEAgLTQ2LDY0ICs0NywxNCBAQAogICovCiBzdHJ1Y3Qgc2Vjb25kYXJ5X2RhdGEgc2Vjb25kYXJ5X2RhdGE7CiAKLS8qCi0gKiBzdHJ1Y3R1cmVzIGZvciBpbnRlci1wcm9jZXNzb3IgY2FsbHMKLSAqIC0gQSBjb2xsZWN0aW9uIG9mIHNpbmdsZSBiaXQgaXBpIG1lc3NhZ2VzLgotICovCi1zdHJ1Y3QgaXBpX2RhdGEgewotCXNwaW5sb2NrX3QgbG9jazsKLQl1bnNpZ25lZCBsb25nIGlwaV9jb3VudDsKLQl1bnNpZ25lZCBsb25nIGJpdHM7Ci19OwotCi1zdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGlwaV9kYXRhLCBpcGlfZGF0YSkgPSB7Ci0JLmxvY2sJPSBTUElOX0xPQ0tfVU5MT0NLRUQsCi19OwotCiBlbnVtIGlwaV9tc2dfdHlwZSB7Ci0JSVBJX1RJTUVSLAorCUlQSV9USU1FUiA9IDIsCiAJSVBJX1JFU0NIRURVTEUsCiAJSVBJX0NBTExfRlVOQywKIAlJUElfQ0FMTF9GVU5DX1NJTkdMRSwKIAlJUElfQ1BVX1NUT1AsCiB9OwogCi1zdGF0aWMgaW5saW5lIHZvaWQgaWRlbnRpdHlfbWFwcGluZ19hZGQocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBzdGFydCwKLQl1bnNpZ25lZCBsb25nIGVuZCkKLXsKLQl1bnNpZ25lZCBsb25nIGFkZHIsIHByb3Q7Ci0JcG1kX3QgKnBtZDsKLQotCXByb3QgPSBQTURfVFlQRV9TRUNUIHwgUE1EX1NFQ1RfQVBfV1JJVEU7Ci0JaWYgKGNwdV9hcmNoaXRlY3R1cmUoKSA8PSBDUFVfQVJDSF9BUk12NVRFSiAmJiAhY3B1X2lzX3hzY2FsZSgpKQotCQlwcm90IHw9IFBNRF9CSVQ0OwotCi0JZm9yIChhZGRyID0gc3RhcnQgJiBQR0RJUl9NQVNLOyBhZGRyIDwgZW5kOykgewotCQlwbWQgPSBwbWRfb2Zmc2V0KHBnZCArIHBnZF9pbmRleChhZGRyKSwgYWRkcik7Ci0JCXBtZFswXSA9IF9fcG1kKGFkZHIgfCBwcm90KTsKLQkJYWRkciArPSBTRUNUSU9OX1NJWkU7Ci0JCXBtZFsxXSA9IF9fcG1kKGFkZHIgfCBwcm90KTsKLQkJYWRkciArPSBTRUNUSU9OX1NJWkU7Ci0JCWZsdXNoX3BtZF9lbnRyeShwbWQpOwotCQlvdXRlcl9jbGVhbl9yYW5nZShfX3BhKHBtZCksIF9fcGEocG1kICsgMSkpOwotCX0KLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGlkZW50aXR5X21hcHBpbmdfZGVsKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgc3RhcnQsCi0JdW5zaWduZWQgbG9uZyBlbmQpCi17Ci0JdW5zaWduZWQgbG9uZyBhZGRyOwotCXBtZF90ICpwbWQ7Ci0KLQlmb3IgKGFkZHIgPSBzdGFydCAmIFBHRElSX01BU0s7IGFkZHIgPCBlbmQ7IGFkZHIgKz0gUEdESVJfU0laRSkgewotCQlwbWQgPSBwbWRfb2Zmc2V0KHBnZCArIHBnZF9pbmRleChhZGRyKSwgYWRkcik7Ci0JCXBtZFswXSA9IF9fcG1kKDApOwotCQlwbWRbMV0gPSBfX3BtZCgwKTsKLQkJY2xlYW5fcG1kX2VudHJ5KHBtZCk7Ci0JCW91dGVyX2NsZWFuX3JhbmdlKF9fcGEocG1kKSwgX19wYShwbWQgKyAxKSk7Ci0JfQotfQotCiBpbnQgX19jcHVpbml0IF9fY3B1X3VwKHVuc2lnbmVkIGludCBjcHUpCiB7CiAJc3RydWN0IGNwdWluZm9fYXJtICpjaSA9ICZwZXJfY3B1KGNwdV9kYXRhLCBjcHUpOwpAQCAtMTc3LDggKzEyOCwxMiBAQAogCQkJYmFycmllcigpOwogCQl9CiAKLQkJaWYgKCFjcHVfb25saW5lKGNwdSkpCisJCWlmICghY3B1X29ubGluZShjcHUpKSB7CisJCQlwcl9jcml0KCJDUFUldTogZmFpbGVkIHRvIGNvbWUgb25saW5lXG4iLCBjcHUpOwogCQkJcmV0ID0gLUVJTzsKKwkJfQorCX0gZWxzZSB7CisJCXByX2VycigiQ1BVJXU6IGZhaWxlZCB0byBib290OiAlZFxuIiwgY3B1LCByZXQpOwogCX0KIAogCXNlY29uZGFyeV9kYXRhLnN0YWNrID0gTlVMTDsKQEAgLTE5NCwxOCArMTQ5LDEyIEBACiAKIAlwZ2RfZnJlZSgmaW5pdF9tbSwgcGdkKTsKIAotCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fQ1JJVCAiQ1BVJXU6IHByb2Nlc3NvciBmYWlsZWQgdG8gYm9vdFxuIiwgY3B1KTsKLQotCQkvKgotCQkgKiBGSVhNRTogV2UgbmVlZCB0byBjbGVhbiB1cCB0aGUgbmV3IGlkbGUgdGhyZWFkLiAtLXJtawotCQkgKi8KLQl9Ci0KIAlyZXR1cm4gcmV0OwogfQogCiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCitzdGF0aWMgdm9pZCBwZXJjcHVfdGltZXJfc3RvcCh2b2lkKTsKKwogLyoKICAqIF9fY3B1X2Rpc2FibGUgcnVucyBvbiB0aGUgcHJvY2Vzc29yIHRvIGJlIHNodXRkb3duLgogICovCkBAIC0yMzMsNyArMTgyLDcgQEAKIAkvKgogCSAqIFN0b3AgdGhlIGxvY2FsIHRpbWVyIGZvciB0aGlzIENQVS4KIAkgKi8KLQlsb2NhbF90aW1lcl9zdG9wKCk7CisJcGVyY3B1X3RpbWVyX3N0b3AoKTsKIAogCS8qCiAJICogRmx1c2ggdXNlciBjYWNoZSBhbmQgVExCIG1hcHBpbmdzLCBhbmQgdGhlbiByZW1vdmUgdGhpcyBDUFUKQEAgLTI1MiwxMiArMjAxLDIwIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBERUNMQVJFX0NPTVBMRVRJT04oY3B1X2RpZWQpOworCiAvKgogICogY2FsbGVkIG9uIHRoZSB0aHJlYWQgd2hpY2ggaXMgYXNraW5nIGZvciBhIENQVSB0byBiZSBzaHV0ZG93biAtCiAgKiB3YWl0cyB1bnRpbCBzaHV0ZG93biBoYXMgY29tcGxldGVkLCBvciBpdCBpcyB0aW1lZCBvdXQuCiAgKi8KIHZvaWQgX19jcHVfZGllKHVuc2lnbmVkIGludCBjcHUpCiB7CisJaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmNwdV9kaWVkLCBtc2Vjc190b19qaWZmaWVzKDUwMDApKSkgeworCQlwcl9lcnIoIkNQVSV1OiBjcHUgZGlkbid0IGRpZVxuIiwgY3B1KTsKKwkJcmV0dXJuOworCX0KKwlwcmludGsoS0VSTl9OT1RJQ0UgIkNQVSV1OiBzaHV0ZG93blxuIiwgY3B1KTsKKwogCWlmICghcGxhdGZvcm1fY3B1X2tpbGwoY3B1KSkKIAkJcHJpbnRrKCJDUFUldTogdW5hYmxlIHRvIGtpbGxcbiIsIGNwdSk7CiB9CkBAIC0yNzQsMTIgKzIzMSwxNyBAQAogewogCXVuc2lnbmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAKLQlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCWlkbGVfdGFza19leGl0KCk7CiAKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCW1iKCk7CisKKwkvKiBUZWxsIF9fY3B1X2RpZSgpIHRoYXQgdGhpcyBDUFUgaXMgbm93IHNhZmUgdG8gZGlzcG9zZSBvZiAqLworCWNvbXBsZXRlKCZjcHVfZGllZCk7CisKIAkvKgogCSAqIGFjdHVhbCBDUFUgc2h1dGRvd24gcHJvY2VkdXJlIGlzIGF0IGxlYXN0IHBsYXRmb3JtIChpZiBub3QKLQkgKiBDUFUpIHNwZWNpZmljCisJICogQ1BVKSBzcGVjaWZpYy4KIAkgKi8KIAlwbGF0Zm9ybV9jcHVfZGllKGNwdSk7CiAKQEAgLTI4OSw2ICsyNTEsNyBAQAogCSAqIHRvIGJlIHJlcGVhdGVkIHRvIHVuZG8gdGhlIGVmZmVjdHMgb2YgdGFraW5nIHRoZSBDUFUgb2ZmbGluZS4KIAkgKi8KIAlfX2FzbV9fKCJtb3YJc3AsICUwXG4iCisJIgltb3YJZnAsICMwXG4iCiAJIgliCXNlY29uZGFyeV9zdGFydF9rZXJuZWwiCiAJCToKIAkJOiAiciIgKHRhc2tfc3RhY2tfcGFnZShjdXJyZW50KSArIFRIUkVBRF9TSVpFIC0gOCkpOwpAQCAtMjk2LDYgKzI1OSwxNyBAQAogI2VuZGlmIC8qIENPTkZJR19IT1RQTFVHX0NQVSAqLwogCiAvKgorICogQ2FsbGVkIGJ5IGJvdGggYm9vdCBhbmQgc2Vjb25kYXJpZXMgdG8gbW92ZSBnbG9iYWwgZGF0YSBpbnRvCisgKiBwZXItcHJvY2Vzc29yIHN0b3JhZ2UuCisgKi8KK3N0YXRpYyB2b2lkIF9fY3B1aW5pdCBzbXBfc3RvcmVfY3B1X2luZm8odW5zaWduZWQgaW50IGNwdWlkKQoreworCXN0cnVjdCBjcHVpbmZvX2FybSAqY3B1X2luZm8gPSAmcGVyX2NwdShjcHVfZGF0YSwgY3B1aWQpOworCisJY3B1X2luZm8tPmxvb3BzX3Blcl9qaWZmeSA9IGxvb3BzX3Blcl9qaWZmeTsKK30KKworLyoKICAqIFRoaXMgaXMgdGhlIHNlY29uZGFyeSBDUFUgYm9vdCBlbnRyeS4gIFdlJ3JlIHVzaW5nIHRoaXMgQ1BVcwogICogaWRsZSB0aHJlYWQgc3RhY2ssIGJ1dCBhIHNldCBvZiB0ZW1wb3JhcnkgcGFnZSB0YWJsZXMuCiAgKi8KQEAgLTMxOSw2ICsyOTMsNyBAQAogCiAJY3B1X2luaXQoKTsKIAlwcmVlbXB0X2Rpc2FibGUoKTsKKwl0cmFjZV9oYXJkaXJxc19vZmYoKTsKIAogCS8qCiAJICogR2l2ZSB0aGUgcGxhdGZvcm0gYSBjaGFuY2UgdG8gZG8gaXRzIG93biBpbml0aWFsaXNhdGlvbi4KQEAgLTM1MiwxNyArMzI3LDYgQEAKIAljcHVfaWRsZSgpOwogfQogCi0vKgotICogQ2FsbGVkIGJ5IGJvdGggYm9vdCBhbmQgc2Vjb25kYXJpZXMgdG8gbW92ZSBnbG9iYWwgZGF0YSBpbnRvCi0gKiBwZXItcHJvY2Vzc29yIHN0b3JhZ2UuCi0gKi8KLXZvaWQgX19jcHVpbml0IHNtcF9zdG9yZV9jcHVfaW5mbyh1bnNpZ25lZCBpbnQgY3B1aWQpCi17Ci0Jc3RydWN0IGNwdWluZm9fYXJtICpjcHVfaW5mbyA9ICZwZXJfY3B1KGNwdV9kYXRhLCBjcHVpZCk7Ci0KLQljcHVfaW5mby0+bG9vcHNfcGVyX2ppZmZ5ID0gbG9vcHNfcGVyX2ppZmZ5OwotfQotCiB2b2lkIF9faW5pdCBzbXBfY3B1c19kb25lKHVuc2lnbmVkIGludCBtYXhfY3B1cykKIHsKIAlpbnQgY3B1OwpAQCAtMzg1LDYxICszNDksODAgQEAKIAlwZXJfY3B1KGNwdV9kYXRhLCBjcHUpLmlkbGUgPSBjdXJyZW50OwogfQogCi1zdGF0aWMgdm9pZCBzZW5kX2lwaV9tZXNzYWdlKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLCBlbnVtIGlwaV9tc2dfdHlwZSBtc2cpCit2b2lkIF9faW5pdCBzbXBfcHJlcGFyZV9jcHVzKHVuc2lnbmVkIGludCBtYXhfY3B1cykKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGludCBjcHU7CisJdW5zaWduZWQgaW50IG5jb3JlcyA9IG51bV9wb3NzaWJsZV9jcHVzKCk7CiAKLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0KLQlmb3JfZWFjaF9jcHUoY3B1LCBtYXNrKSB7Ci0JCXN0cnVjdCBpcGlfZGF0YSAqaXBpID0gJnBlcl9jcHUoaXBpX2RhdGEsIGNwdSk7Ci0KLQkJc3Bpbl9sb2NrKCZpcGktPmxvY2spOwotCQlpcGktPmJpdHMgfD0gMSA8PCBtc2c7Ci0JCXNwaW5fdW5sb2NrKCZpcGktPmxvY2spOwotCX0KKwlzbXBfc3RvcmVfY3B1X2luZm8oc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAogCS8qCi0JICogQ2FsbCB0aGUgcGxhdGZvcm0gc3BlY2lmaWMgY3Jvc3MtQ1BVIGNhbGwgZnVuY3Rpb24uCisJICogYXJlIHdlIHRyeWluZyB0byBib290IG1vcmUgY29yZXMgdGhhbiBleGlzdD8KIAkgKi8KLQlzbXBfY3Jvc3NfY2FsbChtYXNrKTsKKwlpZiAobWF4X2NwdXMgPiBuY29yZXMpCisJCW1heF9jcHVzID0gbmNvcmVzOwogCi0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCWlmIChtYXhfY3B1cyA+IDEpIHsKKwkJLyoKKwkJICogRW5hYmxlIHRoZSBsb2NhbCB0aW1lciBvciBicm9hZGNhc3QgZGV2aWNlIGZvciB0aGUKKwkJICogYm9vdCBDUFUsIGJ1dCBvbmx5IGlmIHdlIGhhdmUgbW9yZSB0aGFuIG9uZSBDUFUuCisJCSAqLworCQlwZXJjcHVfdGltZXJfc2V0dXAoKTsKKworCQkvKgorCQkgKiBJbml0aWFsaXNlIHRoZSBTQ1UgaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgQ1BVCisJCSAqIGFuZCBsZXQgdGhlbSBrbm93IHdoZXJlIHRvIHN0YXJ0LgorCQkgKi8KKwkJcGxhdGZvcm1fc21wX3ByZXBhcmVfY3B1cyhtYXhfY3B1cyk7CisJfQogfQogCiB2b2lkIGFyY2hfc2VuZF9jYWxsX2Z1bmN0aW9uX2lwaV9tYXNrKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrKQogewotCXNlbmRfaXBpX21lc3NhZ2UobWFzaywgSVBJX0NBTExfRlVOQyk7CisJc21wX2Nyb3NzX2NhbGwobWFzaywgSVBJX0NBTExfRlVOQyk7CiB9CiAKIHZvaWQgYXJjaF9zZW5kX2NhbGxfZnVuY3Rpb25fc2luZ2xlX2lwaShpbnQgY3B1KQogewotCXNlbmRfaXBpX21lc3NhZ2UoY3B1bWFza19vZihjcHUpLCBJUElfQ0FMTF9GVU5DX1NJTkdMRSk7CisJc21wX2Nyb3NzX2NhbGwoY3B1bWFza19vZihjcHUpLCBJUElfQ0FMTF9GVU5DX1NJTkdMRSk7CiB9CiAKLXZvaWQgc2hvd19pcGlfbGlzdChzdHJ1Y3Qgc2VxX2ZpbGUgKnApCitzdGF0aWMgY29uc3QgY2hhciAqaXBpX3R5cGVzW05SX0lQSV0gPSB7CisjZGVmaW5lIFMoeCxzKQlbeCAtIElQSV9USU1FUl0gPSBzCisJUyhJUElfVElNRVIsICJUaW1lciBicm9hZGNhc3QgaW50ZXJydXB0cyIpLAorCVMoSVBJX1JFU0NIRURVTEUsICJSZXNjaGVkdWxpbmcgaW50ZXJydXB0cyIpLAorCVMoSVBJX0NBTExfRlVOQywgIkZ1bmN0aW9uIGNhbGwgaW50ZXJydXB0cyIpLAorCVMoSVBJX0NBTExfRlVOQ19TSU5HTEUsICJTaW5nbGUgZnVuY3Rpb24gY2FsbCBpbnRlcnJ1cHRzIiksCisJUyhJUElfQ1BVX1NUT1AsICJDUFUgc3RvcCBpbnRlcnJ1cHRzIiksCit9OworCit2b2lkIHNob3dfaXBpX2xpc3Qoc3RydWN0IHNlcV9maWxlICpwLCBpbnQgcHJlYykKIHsKLQl1bnNpZ25lZCBpbnQgY3B1OworCXVuc2lnbmVkIGludCBjcHUsIGk7CiAKLQlzZXFfcHV0cyhwLCAiSVBJOiIpOworCWZvciAoaSA9IDA7IGkgPCBOUl9JUEk7IGkrKykgeworCQlzZXFfcHJpbnRmKHAsICIlKnMldTogIiwgcHJlYyAtIDEsICJJUEkiLCBpKTsKIAotCWZvcl9lYWNoX3ByZXNlbnRfY3B1KGNwdSkKLQkJc2VxX3ByaW50ZihwLCAiICUxMGx1IiwgcGVyX2NwdShpcGlfZGF0YSwgY3B1KS5pcGlfY291bnQpOworCQlmb3JfZWFjaF9wcmVzZW50X2NwdShjcHUpCisJCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsCisJCQkJICAgX19nZXRfaXJxX3N0YXQoY3B1LCBpcGlfaXJxc1tpXSkpOwogCi0Jc2VxX3B1dGMocCwgJ1xuJyk7CisJCXNlcV9wcmludGYocCwgIiAlc1xuIiwgaXBpX3R5cGVzW2ldKTsKKwl9CiB9CiAKLXZvaWQgc2hvd19sb2NhbF9pcnFzKHN0cnVjdCBzZXFfZmlsZSAqcCkKK3U2NCBzbXBfaXJxX3N0YXRfY3B1KHVuc2lnbmVkIGludCBjcHUpCiB7Ci0JdW5zaWduZWQgaW50IGNwdTsKKwl1NjQgc3VtID0gMDsKKwlpbnQgaTsKIAotCXNlcV9wcmludGYocCwgIkxPQzogIik7CisJZm9yIChpID0gMDsgaSA8IE5SX0lQSTsgaSsrKQorCQlzdW0gKz0gX19nZXRfaXJxX3N0YXQoY3B1LCBpcGlfaXJxc1tpXSk7CiAKLQlmb3JfZWFjaF9wcmVzZW50X2NwdShjcHUpCi0JCXNlcV9wcmludGYocCwgIiUxMHUgIiwgaXJxX3N0YXRbY3B1XS5sb2NhbF90aW1lcl9pcnFzKTsKKyNpZmRlZiBDT05GSUdfTE9DQUxfVElNRVJTCisJc3VtICs9IF9fZ2V0X2lycV9zdGF0KGNwdSwgbG9jYWxfdGltZXJfaXJxcyk7CisjZW5kaWYKIAotCXNlcV9wdXRjKHAsICdcbicpOworCXJldHVybiBzdW07CiB9CiAKIC8qCkBAIC00NTYsMjQgKzQzOSwzNiBAQAogfQogCiAjaWZkZWYgQ09ORklHX0xPQ0FMX1RJTUVSUwotYXNtbGlua2FnZSB2b2lkIF9fZXhjZXB0aW9uIGRvX2xvY2FsX3RpbWVyKHN0cnVjdCBwdF9yZWdzICpyZWdzKQorYXNtbGlua2FnZSB2b2lkIF9fZXhjZXB0aW9uX2lycV9lbnRyeSBkb19sb2NhbF90aW1lcihzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlzdHJ1Y3QgcHRfcmVncyAqb2xkX3JlZ3MgPSBzZXRfaXJxX3JlZ3MocmVncyk7CiAJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAogCWlmIChsb2NhbF90aW1lcl9hY2soKSkgewotCQlpcnFfc3RhdFtjcHVdLmxvY2FsX3RpbWVyX2lycXMrKzsKKwkJX19pbmNfaXJxX3N0YXQoY3B1LCBsb2NhbF90aW1lcl9pcnFzKTsKIAkJaXBpX3RpbWVyKCk7CiAJfQogCiAJc2V0X2lycV9yZWdzKG9sZF9yZWdzKTsKIH0KKwordm9pZCBzaG93X2xvY2FsX2lycXMoc3RydWN0IHNlcV9maWxlICpwLCBpbnQgcHJlYykKK3sKKwl1bnNpZ25lZCBpbnQgY3B1OworCisJc2VxX3ByaW50ZihwLCAiJSpzOiAiLCBwcmVjLCAiTE9DIik7CisKKwlmb3JfZWFjaF9wcmVzZW50X2NwdShjcHUpCisJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgX19nZXRfaXJxX3N0YXQoY3B1LCBsb2NhbF90aW1lcl9pcnFzKSk7CisKKwlzZXFfcHJpbnRmKHAsICIgTG9jYWwgdGltZXIgaW50ZXJydXB0c1xuIik7Cit9CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JST0FEQ0FTVAogc3RhdGljIHZvaWQgc21wX3RpbWVyX2Jyb2FkY2FzdChjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaykKIHsKLQlzZW5kX2lwaV9tZXNzYWdlKG1hc2ssIElQSV9USU1FUik7CisJc21wX2Nyb3NzX2NhbGwobWFzaywgSVBJX1RJTUVSKTsKIH0KICNlbHNlCiAjZGVmaW5lIHNtcF90aW1lcl9icm9hZGNhc3QJTlVMTApAQCAtNTEwLDYgKzUwNSwyMSBAQAogCWxvY2FsX3RpbWVyX3NldHVwKGV2dCk7CiB9CiAKKyNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKKy8qCisgKiBUaGUgZ2VuZXJpYyBjbG9jayBldmVudHMgY29kZSBwdXJwb3NlbHkgZG9lcyBub3Qgc3RvcCB0aGUgbG9jYWwgdGltZXIKKyAqIG9uIENQVV9ERUFEL0NQVV9ERUFEX0ZST1pFTiBob3RwbHVnIGV2ZW50cywgc28gd2UgaGF2ZSB0byBkbyBpdAorICogbWFudWFsbHkgaGVyZS4KKyAqLworc3RhdGljIHZvaWQgcGVyY3B1X3RpbWVyX3N0b3Aodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCA9ICZwZXJfY3B1KHBlcmNwdV9jbG9ja2V2ZW50LCBjcHUpOworCisJZXZ0LT5zZXRfbW9kZShDTE9DS19FVlRfTU9ERV9VTlVTRUQsIGV2dCk7Cit9CisjZW5kaWYKKwogc3RhdGljIERFRklORV9TUElOTE9DSyhzdG9wX2xvY2spOwogCiAvKgpAQCAtNTM2LDg1ICs1NDYsNzAgQEAKIAogLyoKICAqIE1haW4gaGFuZGxlciBmb3IgaW50ZXItcHJvY2Vzc29yIGludGVycnVwdHMKLSAqCi0gKiBGb3IgQVJNLCB0aGUgaXBpbWFzayBub3cgb25seSBpZGVudGlmaWVzIGEgc2luZ2xlCi0gKiBjYXRlZ29yeSBvZiBJUEkgKEJpdCAxIElQSXMgaGF2ZSBiZWVuIHJlcGxhY2VkIGJ5IGEKLSAqIGRpZmZlcmVudCBtZWNoYW5pc20pOgotICoKLSAqICBCaXQgMCAtIEludGVyLXByb2Nlc3NvciBmdW5jdGlvbiBjYWxsCiAgKi8KLWFzbWxpbmthZ2Ugdm9pZCBfX2V4Y2VwdGlvbiBkb19JUEkoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCithc21saW5rYWdlIHZvaWQgX19leGNlcHRpb25faXJxX2VudHJ5IGRvX0lQSShpbnQgaXBpbnIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXVuc2lnbmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0Jc3RydWN0IGlwaV9kYXRhICppcGkgPSAmcGVyX2NwdShpcGlfZGF0YSwgY3B1KTsKIAlzdHJ1Y3QgcHRfcmVncyAqb2xkX3JlZ3MgPSBzZXRfaXJxX3JlZ3MocmVncyk7CiAKLQlpcGktPmlwaV9jb3VudCsrOworCWlmIChpcGluciA+PSBJUElfVElNRVIgJiYgaXBpbnIgPCBJUElfVElNRVIgKyBOUl9JUEkpCisJCV9faW5jX2lycV9zdGF0KGNwdSwgaXBpX2lycXNbaXBpbnIgLSBJUElfVElNRVJdKTsKIAotCWZvciAoOzspIHsKLQkJdW5zaWduZWQgbG9uZyBtc2dzOworCXN3aXRjaCAoaXBpbnIpIHsKKwljYXNlIElQSV9USU1FUjoKKwkJaXBpX3RpbWVyKCk7CisJCWJyZWFrOwogCi0JCXNwaW5fbG9jaygmaXBpLT5sb2NrKTsKLQkJbXNncyA9IGlwaS0+Yml0czsKLQkJaXBpLT5iaXRzID0gMDsKLQkJc3Bpbl91bmxvY2soJmlwaS0+bG9jayk7CisJY2FzZSBJUElfUkVTQ0hFRFVMRToKKwkJLyoKKwkJICogbm90aGluZyBtb3JlIHRvIGRvIC0gZXZleXRoaW5nIGlzCisJCSAqIGRvbmUgb24gdGhlIGludGVycnVwdCByZXR1cm4gcGF0aAorCQkgKi8KKwkJYnJlYWs7CiAKLQkJaWYgKCFtc2dzKQotCQkJYnJlYWs7CisJY2FzZSBJUElfQ0FMTF9GVU5DOgorCQlnZW5lcmljX3NtcF9jYWxsX2Z1bmN0aW9uX2ludGVycnVwdCgpOworCQlicmVhazsKIAotCQlkbyB7Ci0JCQl1bnNpZ25lZCBuZXh0bXNnOworCWNhc2UgSVBJX0NBTExfRlVOQ19TSU5HTEU6CisJCWdlbmVyaWNfc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlX2ludGVycnVwdCgpOworCQlicmVhazsKIAotCQkJbmV4dG1zZyA9IG1zZ3MgJiAtbXNnczsKLQkJCW1zZ3MgJj0gfm5leHRtc2c7Ci0JCQluZXh0bXNnID0gZmZ6KH5uZXh0bXNnKTsKKwljYXNlIElQSV9DUFVfU1RPUDoKKwkJaXBpX2NwdV9zdG9wKGNwdSk7CisJCWJyZWFrOwogCi0JCQlzd2l0Y2ggKG5leHRtc2cpIHsKLQkJCWNhc2UgSVBJX1RJTUVSOgotCQkJCWlwaV90aW1lcigpOwotCQkJCWJyZWFrOwotCi0JCQljYXNlIElQSV9SRVNDSEVEVUxFOgotCQkJCS8qCi0JCQkJICogbm90aGluZyBtb3JlIHRvIGRvIC0gZXZleXRoaW5nIGlzCi0JCQkJICogZG9uZSBvbiB0aGUgaW50ZXJydXB0IHJldHVybiBwYXRoCi0JCQkJICovCi0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgSVBJX0NBTExfRlVOQzoKLQkJCQlnZW5lcmljX3NtcF9jYWxsX2Z1bmN0aW9uX2ludGVycnVwdCgpOwotCQkJCWJyZWFrOwotCi0JCQljYXNlIElQSV9DQUxMX0ZVTkNfU0lOR0xFOgotCQkJCWdlbmVyaWNfc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlX2ludGVycnVwdCgpOwotCQkJCWJyZWFrOwotCi0JCQljYXNlIElQSV9DUFVfU1RPUDoKLQkJCQlpcGlfY3B1X3N0b3AoY3B1KTsKLQkJCQlicmVhazsKLQotCQkJZGVmYXVsdDoKLQkJCQlwcmludGsoS0VSTl9DUklUICJDUFUldTogVW5rbm93biBJUEkgbWVzc2FnZSAweCV4XG4iLAotCQkJCSAgICAgICBjcHUsIG5leHRtc2cpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9IHdoaWxlIChtc2dzKTsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9DUklUICJDUFUldTogVW5rbm93biBJUEkgbWVzc2FnZSAweCV4XG4iLAorCQkgICAgICAgY3B1LCBpcGlucik7CisJCWJyZWFrOwogCX0KLQogCXNldF9pcnFfcmVncyhvbGRfcmVncyk7CiB9CiAKIHZvaWQgc21wX3NlbmRfcmVzY2hlZHVsZShpbnQgY3B1KQogewotCXNlbmRfaXBpX21lc3NhZ2UoY3B1bWFza19vZihjcHUpLCBJUElfUkVTQ0hFRFVMRSk7CisJc21wX2Nyb3NzX2NhbGwoY3B1bWFza19vZihjcHUpLCBJUElfUkVTQ0hFRFVMRSk7CiB9CiAKIHZvaWQgc21wX3NlbmRfc3RvcCh2b2lkKQogewotCWNwdW1hc2tfdCBtYXNrID0gY3B1X29ubGluZV9tYXA7Ci0JY3B1X2NsZWFyKHNtcF9wcm9jZXNzb3JfaWQoKSwgbWFzayk7Ci0JaWYgKCFjcHVzX2VtcHR5KG1hc2spKQotCQlzZW5kX2lwaV9tZXNzYWdlKCZtYXNrLCBJUElfQ1BVX1NUT1ApOworCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKKworCWlmIChudW1fb25saW5lX2NwdXMoKSA+IDEpIHsKKwkJY3B1bWFza190IG1hc2sgPSBjcHVfb25saW5lX21hcDsKKwkJY3B1X2NsZWFyKHNtcF9wcm9jZXNzb3JfaWQoKSwgbWFzayk7CisKKwkJc21wX2Nyb3NzX2NhbGwoJm1hc2ssIElQSV9DUFVfU1RPUCk7CisJfQorCisJLyogV2FpdCB1cCB0byBvbmUgc2Vjb25kIGZvciBvdGhlciBDUFVzIHRvIHN0b3AgKi8KKwl0aW1lb3V0ID0gVVNFQ19QRVJfU0VDOworCXdoaWxlIChudW1fb25saW5lX2NwdXMoKSA+IDEgJiYgdGltZW91dC0tKQorCQl1ZGVsYXkoMSk7CisKKwlpZiAobnVtX29ubGluZV9jcHVzKCkgPiAxKQorCQlwcl93YXJuaW5nKCJTTVA6IGZhaWxlZCB0byBzdG9wIHNlY29uZGFyeSBDUFVzXG4iKTsKIH0KIAogLyoKQEAgLTYyNCwxMjggKzYxOSwzIEBACiB7CiAJcmV0dXJuIC1FSU5WQUw7CiB9Ci0KLXN0YXRpYyB2b2lkCi1vbl9lYWNoX2NwdV9tYXNrKHZvaWQgKCpmdW5jKSh2b2lkICopLCB2b2lkICppbmZvLCBpbnQgd2FpdCwKLQkJY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2spCi17Ci0JcHJlZW1wdF9kaXNhYmxlKCk7Ci0KLQlzbXBfY2FsbF9mdW5jdGlvbl9tYW55KG1hc2ssIGZ1bmMsIGluZm8sIHdhaXQpOwotCWlmIChjcHVtYXNrX3Rlc3RfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSwgbWFzaykpCi0JCWZ1bmMoaW5mbyk7Ci0KLQlwcmVlbXB0X2VuYWJsZSgpOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoKLSAqIFRMQiBvcGVyYXRpb25zCi0gKi8KLXN0cnVjdCB0bGJfYXJncyB7Ci0Jc3RydWN0IHZtX2FyZWFfc3RydWN0ICp0YV92bWE7Ci0JdW5zaWduZWQgbG9uZyB0YV9zdGFydDsKLQl1bnNpZ25lZCBsb25nIHRhX2VuZDsKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpcGlfZmx1c2hfdGxiX2FsbCh2b2lkICppZ25vcmVkKQotewotCWxvY2FsX2ZsdXNoX3RsYl9hbGwoKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGlwaV9mbHVzaF90bGJfbW0odm9pZCAqYXJnKQotewotCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gKHN0cnVjdCBtbV9zdHJ1Y3QgKilhcmc7Ci0KLQlsb2NhbF9mbHVzaF90bGJfbW0obW0pOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaXBpX2ZsdXNoX3RsYl9wYWdlKHZvaWQgKmFyZykKLXsKLQlzdHJ1Y3QgdGxiX2FyZ3MgKnRhID0gKHN0cnVjdCB0bGJfYXJncyAqKWFyZzsKLQotCWxvY2FsX2ZsdXNoX3RsYl9wYWdlKHRhLT50YV92bWEsIHRhLT50YV9zdGFydCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpcGlfZmx1c2hfdGxiX2tlcm5lbF9wYWdlKHZvaWQgKmFyZykKLXsKLQlzdHJ1Y3QgdGxiX2FyZ3MgKnRhID0gKHN0cnVjdCB0bGJfYXJncyAqKWFyZzsKLQotCWxvY2FsX2ZsdXNoX3RsYl9rZXJuZWxfcGFnZSh0YS0+dGFfc3RhcnQpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaXBpX2ZsdXNoX3RsYl9yYW5nZSh2b2lkICphcmcpCi17Ci0Jc3RydWN0IHRsYl9hcmdzICp0YSA9IChzdHJ1Y3QgdGxiX2FyZ3MgKilhcmc7Ci0KLQlsb2NhbF9mbHVzaF90bGJfcmFuZ2UodGEtPnRhX3ZtYSwgdGEtPnRhX3N0YXJ0LCB0YS0+dGFfZW5kKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGlwaV9mbHVzaF90bGJfa2VybmVsX3JhbmdlKHZvaWQgKmFyZykKLXsKLQlzdHJ1Y3QgdGxiX2FyZ3MgKnRhID0gKHN0cnVjdCB0bGJfYXJncyAqKWFyZzsKLQotCWxvY2FsX2ZsdXNoX3RsYl9rZXJuZWxfcmFuZ2UodGEtPnRhX3N0YXJ0LCB0YS0+dGFfZW5kKTsKLX0KLQotdm9pZCBmbHVzaF90bGJfYWxsKHZvaWQpCi17Ci0JaWYgKHRsYl9vcHNfbmVlZF9icm9hZGNhc3QoKSkKLQkJb25fZWFjaF9jcHUoaXBpX2ZsdXNoX3RsYl9hbGwsIE5VTEwsIDEpOwotCWVsc2UKLQkJbG9jYWxfZmx1c2hfdGxiX2FsbCgpOwotfQotCi12b2lkIGZsdXNoX3RsYl9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKLXsKLQlpZiAodGxiX29wc19uZWVkX2Jyb2FkY2FzdCgpKQotCQlvbl9lYWNoX2NwdV9tYXNrKGlwaV9mbHVzaF90bGJfbW0sIG1tLCAxLCBtbV9jcHVtYXNrKG1tKSk7Ci0JZWxzZQotCQlsb2NhbF9mbHVzaF90bGJfbW0obW0pOwotfQotCi12b2lkIGZsdXNoX3RsYl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHVhZGRyKQotewotCWlmICh0bGJfb3BzX25lZWRfYnJvYWRjYXN0KCkpIHsKLQkJc3RydWN0IHRsYl9hcmdzIHRhOwotCQl0YS50YV92bWEgPSB2bWE7Ci0JCXRhLnRhX3N0YXJ0ID0gdWFkZHI7Ci0JCW9uX2VhY2hfY3B1X21hc2soaXBpX2ZsdXNoX3RsYl9wYWdlLCAmdGEsIDEsIG1tX2NwdW1hc2sodm1hLT52bV9tbSkpOwotCX0gZWxzZQotCQlsb2NhbF9mbHVzaF90bGJfcGFnZSh2bWEsIHVhZGRyKTsKLX0KLQotdm9pZCBmbHVzaF90bGJfa2VybmVsX3BhZ2UodW5zaWduZWQgbG9uZyBrYWRkcikKLXsKLQlpZiAodGxiX29wc19uZWVkX2Jyb2FkY2FzdCgpKSB7Ci0JCXN0cnVjdCB0bGJfYXJncyB0YTsKLQkJdGEudGFfc3RhcnQgPSBrYWRkcjsKLQkJb25fZWFjaF9jcHUoaXBpX2ZsdXNoX3RsYl9rZXJuZWxfcGFnZSwgJnRhLCAxKTsKLQl9IGVsc2UKLQkJbG9jYWxfZmx1c2hfdGxiX2tlcm5lbF9wYWdlKGthZGRyKTsKLX0KLQotdm9pZCBmbHVzaF90bGJfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0gICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKLXsKLQlpZiAodGxiX29wc19uZWVkX2Jyb2FkY2FzdCgpKSB7Ci0JCXN0cnVjdCB0bGJfYXJncyB0YTsKLQkJdGEudGFfdm1hID0gdm1hOwotCQl0YS50YV9zdGFydCA9IHN0YXJ0OwotCQl0YS50YV9lbmQgPSBlbmQ7Ci0JCW9uX2VhY2hfY3B1X21hc2soaXBpX2ZsdXNoX3RsYl9yYW5nZSwgJnRhLCAxLCBtbV9jcHVtYXNrKHZtYS0+dm1fbW0pKTsKLQl9IGVsc2UKLQkJbG9jYWxfZmx1c2hfdGxiX3JhbmdlKHZtYSwgc3RhcnQsIGVuZCk7Ci19Ci0KLXZvaWQgZmx1c2hfdGxiX2tlcm5lbF9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKLXsKLQlpZiAodGxiX29wc19uZWVkX2Jyb2FkY2FzdCgpKSB7Ci0JCXN0cnVjdCB0bGJfYXJncyB0YTsKLQkJdGEudGFfc3RhcnQgPSBzdGFydDsKLQkJdGEudGFfZW5kID0gZW5kOwotCQlvbl9lYWNoX2NwdShpcGlfZmx1c2hfdGxiX2tlcm5lbF9yYW5nZSwgJnRhLCAxKTsKLQl9IGVsc2UKLQkJbG9jYWxfZmx1c2hfdGxiX2tlcm5lbF9yYW5nZShzdGFydCwgZW5kKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9zbXBfdGxiLmMgYi9hcmNoL2FybS9rZXJuZWwvc21wX3RsYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkY2IzNTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9rZXJuZWwvc21wX3RsYi5jCkBAIC0wLDAgKzEsMTM5IEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL2tlcm5lbC9zbXBfdGxiLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAyIEFSTSBMaW1pdGVkLCBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9wcmVlbXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CisKKyNpbmNsdWRlIDxhc20vc21wX3BsYXQuaD4KKyNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KKworc3RhdGljIHZvaWQgb25fZWFjaF9jcHVfbWFzayh2b2lkICgqZnVuYykodm9pZCAqKSwgdm9pZCAqaW5mbywgaW50IHdhaXQsCisJY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2spCit7CisJcHJlZW1wdF9kaXNhYmxlKCk7CisKKwlzbXBfY2FsbF9mdW5jdGlvbl9tYW55KG1hc2ssIGZ1bmMsIGluZm8sIHdhaXQpOworCWlmIChjcHVtYXNrX3Rlc3RfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSwgbWFzaykpCisJCWZ1bmMoaW5mbyk7CisKKwlwcmVlbXB0X2VuYWJsZSgpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIFRMQiBvcGVyYXRpb25zCisgKi8KK3N0cnVjdCB0bGJfYXJncyB7CisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp0YV92bWE7CisJdW5zaWduZWQgbG9uZyB0YV9zdGFydDsKKwl1bnNpZ25lZCBsb25nIHRhX2VuZDsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpcGlfZmx1c2hfdGxiX2FsbCh2b2lkICppZ25vcmVkKQoreworCWxvY2FsX2ZsdXNoX3RsYl9hbGwoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGlwaV9mbHVzaF90bGJfbW0odm9pZCAqYXJnKQoreworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gKHN0cnVjdCBtbV9zdHJ1Y3QgKilhcmc7CisKKwlsb2NhbF9mbHVzaF90bGJfbW0obW0pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaXBpX2ZsdXNoX3RsYl9wYWdlKHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgdGxiX2FyZ3MgKnRhID0gKHN0cnVjdCB0bGJfYXJncyAqKWFyZzsKKworCWxvY2FsX2ZsdXNoX3RsYl9wYWdlKHRhLT50YV92bWEsIHRhLT50YV9zdGFydCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpcGlfZmx1c2hfdGxiX2tlcm5lbF9wYWdlKHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgdGxiX2FyZ3MgKnRhID0gKHN0cnVjdCB0bGJfYXJncyAqKWFyZzsKKworCWxvY2FsX2ZsdXNoX3RsYl9rZXJuZWxfcGFnZSh0YS0+dGFfc3RhcnQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaXBpX2ZsdXNoX3RsYl9yYW5nZSh2b2lkICphcmcpCit7CisJc3RydWN0IHRsYl9hcmdzICp0YSA9IChzdHJ1Y3QgdGxiX2FyZ3MgKilhcmc7CisKKwlsb2NhbF9mbHVzaF90bGJfcmFuZ2UodGEtPnRhX3ZtYSwgdGEtPnRhX3N0YXJ0LCB0YS0+dGFfZW5kKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGlwaV9mbHVzaF90bGJfa2VybmVsX3JhbmdlKHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgdGxiX2FyZ3MgKnRhID0gKHN0cnVjdCB0bGJfYXJncyAqKWFyZzsKKworCWxvY2FsX2ZsdXNoX3RsYl9rZXJuZWxfcmFuZ2UodGEtPnRhX3N0YXJ0LCB0YS0+dGFfZW5kKTsKK30KKwordm9pZCBmbHVzaF90bGJfYWxsKHZvaWQpCit7CisJaWYgKHRsYl9vcHNfbmVlZF9icm9hZGNhc3QoKSkKKwkJb25fZWFjaF9jcHUoaXBpX2ZsdXNoX3RsYl9hbGwsIE5VTEwsIDEpOworCWVsc2UKKwkJbG9jYWxfZmx1c2hfdGxiX2FsbCgpOworfQorCit2b2lkIGZsdXNoX3RsYl9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlpZiAodGxiX29wc19uZWVkX2Jyb2FkY2FzdCgpKQorCQlvbl9lYWNoX2NwdV9tYXNrKGlwaV9mbHVzaF90bGJfbW0sIG1tLCAxLCBtbV9jcHVtYXNrKG1tKSk7CisJZWxzZQorCQlsb2NhbF9mbHVzaF90bGJfbW0obW0pOworfQorCit2b2lkIGZsdXNoX3RsYl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHVhZGRyKQoreworCWlmICh0bGJfb3BzX25lZWRfYnJvYWRjYXN0KCkpIHsKKwkJc3RydWN0IHRsYl9hcmdzIHRhOworCQl0YS50YV92bWEgPSB2bWE7CisJCXRhLnRhX3N0YXJ0ID0gdWFkZHI7CisJCW9uX2VhY2hfY3B1X21hc2soaXBpX2ZsdXNoX3RsYl9wYWdlLCAmdGEsIDEsIG1tX2NwdW1hc2sodm1hLT52bV9tbSkpOworCX0gZWxzZQorCQlsb2NhbF9mbHVzaF90bGJfcGFnZSh2bWEsIHVhZGRyKTsKK30KKwordm9pZCBmbHVzaF90bGJfa2VybmVsX3BhZ2UodW5zaWduZWQgbG9uZyBrYWRkcikKK3sKKwlpZiAodGxiX29wc19uZWVkX2Jyb2FkY2FzdCgpKSB7CisJCXN0cnVjdCB0bGJfYXJncyB0YTsKKwkJdGEudGFfc3RhcnQgPSBrYWRkcjsKKwkJb25fZWFjaF9jcHUoaXBpX2ZsdXNoX3RsYl9rZXJuZWxfcGFnZSwgJnRhLCAxKTsKKwl9IGVsc2UKKwkJbG9jYWxfZmx1c2hfdGxiX2tlcm5lbF9wYWdlKGthZGRyKTsKK30KKwordm9pZCBmbHVzaF90bGJfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwlpZiAodGxiX29wc19uZWVkX2Jyb2FkY2FzdCgpKSB7CisJCXN0cnVjdCB0bGJfYXJncyB0YTsKKwkJdGEudGFfdm1hID0gdm1hOworCQl0YS50YV9zdGFydCA9IHN0YXJ0OworCQl0YS50YV9lbmQgPSBlbmQ7CisJCW9uX2VhY2hfY3B1X21hc2soaXBpX2ZsdXNoX3RsYl9yYW5nZSwgJnRhLCAxLCBtbV9jcHVtYXNrKHZtYS0+dm1fbW0pKTsKKwl9IGVsc2UKKwkJbG9jYWxfZmx1c2hfdGxiX3JhbmdlKHZtYSwgc3RhcnQsIGVuZCk7Cit9CisKK3ZvaWQgZmx1c2hfdGxiX2tlcm5lbF9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwlpZiAodGxiX29wc19uZWVkX2Jyb2FkY2FzdCgpKSB7CisJCXN0cnVjdCB0bGJfYXJncyB0YTsKKwkJdGEudGFfc3RhcnQgPSBzdGFydDsKKwkJdGEudGFfZW5kID0gZW5kOworCQlvbl9lYWNoX2NwdShpcGlfZmx1c2hfdGxiX2tlcm5lbF9yYW5nZSwgJnRhLCAxKTsKKwl9IGVsc2UKKwkJbG9jYWxfZmx1c2hfdGxiX2tlcm5lbF9yYW5nZShzdGFydCwgZW5kKTsKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3NtcF90d2QuYyBiL2FyY2gvYXJtL2tlcm5lbC9zbXBfdHdkLmMKaW5kZXggMzU4ODJmYi4uZGQ3OTA3NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3NtcF90d2QuYworKysgYi9hcmNoL2FybS9rZXJuZWwvc21wX3R3ZC5jCkBAIC0xMjcsOCArMTI3LDYgQEAKICAqLwogdm9pZCBfX2NwdWluaXQgdHdkX3RpbWVyX3NldHVwKHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmNsaykKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCiAJdHdkX2NhbGlicmF0ZV9yYXRlKCk7CiAKIAljbGstPm5hbWUgPSAibG9jYWxfdGltZXIiOwpAQCAtMTQzLDIwICsxNDEsNyBAQAogCWNsay0+bWluX2RlbHRhX25zID0gY2xvY2tldmVudF9kZWx0YTJucygweGYsIGNsayk7CiAKIAkvKiBNYWtlIHN1cmUgb3VyIGxvY2FsIGludGVycnVwdCBjb250cm9sbGVyIGhhcyB0aGlzIGVuYWJsZWQgKi8KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JaXJxX3RvX2Rlc2MoY2xrLT5pcnEpLT5zdGF0dXMgfD0gSVJRX05PUFJPQkU7Ci0JZ2V0X2lycV9jaGlwKGNsay0+aXJxKS0+dW5tYXNrKGNsay0+aXJxKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJZ2ljX2VuYWJsZV9wcGkoY2xrLT5pcnEpOwogCiAJY2xvY2tldmVudHNfcmVnaXN0ZXJfZGV2aWNlKGNsayk7CiB9Ci0KLSNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKLS8qCi0gKiB0YWtlIGEgbG9jYWwgdGltZXIgZG93bgotICovCi12b2lkIHR3ZF90aW1lcl9zdG9wKHZvaWQpCi17Ci0JX19yYXdfd3JpdGVsKDAsIHR3ZF9iYXNlICsgVFdEX1RJTUVSX0NPTlRST0wpOwotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvc3dwX2VtdWxhdGUuYyBiL2FyY2gvYXJtL2tlcm5lbC9zd3BfZW11bGF0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhNTc2MDkyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0va2VybmVsL3N3cF9lbXVsYXRlLmMKQEAgLTAsMCArMSwyNjcgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0va2VybmVsL3N3cF9lbXVsYXRlLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IEFSTSBMaW1pdGVkCisgKiAgX191c2VyXyogZnVuY3Rpb25zIGFkYXB0ZWQgZnJvbSBpbmNsdWRlL2FzbS91YWNjZXNzLmgKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBJbXBsZW1lbnRzIGVtdWxhdGlvbiBvZiB0aGUgU1dQL1NXUEIgaW5zdHJ1Y3Rpb25zIHVzaW5nIGxvYWQtZXhjbHVzaXZlIGFuZAorICogIHN0b3JlLWV4Y2x1c2l2ZSBmb3IgcHJvY2Vzc29ycyB0aGF0IGhhdmUgdGhlbSBkaXNhYmxlZCAob3IgZnV0dXJlIG9uZXMgdGhhdAorICogIG1pZ2h0IG5vdCBpbXBsZW1lbnQgdGhlbSkuCisgKgorICogIFN5bnRheCBvZiBTV1B7Qn0gaW5zdHJ1Y3Rpb246IFNXUHtCfTxjPiA8UnQ+LCA8UnQyPiwgWzxSbj5dCisgKiAgV2hlcmU6IFJ0ICA9IGRlc3RpbmF0aW9uCisgKgkgICBSdDIgPSBzb3VyY2UKKyAqCSAgIFJuICA9IGFkZHJlc3MKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgorCisjaW5jbHVkZSA8YXNtL3RyYXBzLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKworLyoKKyAqIEVycm9yLWNoZWNraW5nIFNXUCBtYWNyb3MgaW1wbGVtZW50ZWQgdXNpbmcgbGRyZXh7Yn0vc3RyZXh7Yn0KKyAqLworI2RlZmluZSBfX3VzZXJfc3dwWF9hc20oZGF0YSwgYWRkciwgcmVzLCB0ZW1wLCBCKQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJXAorCSIJbW92CQklMiwgJTFcbiIJCQlcCisJIjA6CWxkcmV4IkIiCSUxLCBbJTNdXG4iCQkJXAorCSIxOglzdHJleCJCIgklMCwgJTIsIFslM11cbiIJCQlcCisJIgljbXAJCSUwLCAjMFxuIgkJCVwKKwkiCW1vdm5lCQklMCwgJTRcbiIJCQlcCisJIjI6XG4iCQkJCQkJCVwKKwkiCS5zZWN0aW9uCSAuZml4dXAsXCJheFwiXG4iCQlcCisJIgkuYWxpZ24JCTJcbiIJCQkJXAorCSIzOgltb3YJCSUwLCAlNVxuIgkJCVwKKwkiCWIJCTJiXG4iCQkJCVwKKwkiCS5wcmV2aW91c1xuIgkJCQkJXAorCSIJLnNlY3Rpb24JIF9fZXhfdGFibGUsXCJhXCJcbiIJCVwKKwkiCS5hbGlnbgkJM1xuIgkJCQlcCisJIgkubG9uZwkJMGIsIDNiXG4iCQkJXAorCSIJLmxvbmcJCTFiLCAzYlxuIgkJCVwKKwkiCS5wcmV2aW91cyIJCQkJCVwKKwk6ICI9JnIiIChyZXMpLCAiK3IiIChkYXRhKSwgIj0mciIgKHRlbXApCQlcCisJOiAiciIgKGFkZHIpLCAiaSIgKC1FQUdBSU4pLCAiaSIgKC1FRkFVTFQpCQlcCisJOiAiY2MiLCAibWVtb3J5IikKKworI2RlZmluZSBfX3VzZXJfc3dwX2FzbShkYXRhLCBhZGRyLCByZXMsIHRlbXApIFwKKwlfX3VzZXJfc3dwWF9hc20oZGF0YSwgYWRkciwgcmVzLCB0ZW1wLCAiIikKKyNkZWZpbmUgX191c2VyX3N3cGJfYXNtKGRhdGEsIGFkZHIsIHJlcywgdGVtcCkgXAorCV9fdXNlcl9zd3BYX2FzbShkYXRhLCBhZGRyLCByZXMsIHRlbXAsICJiIikKKworLyoKKyAqIE1hY3Jvcy9kZWZpbmVzIGZvciBleHRyYWN0aW5nIHJlZ2lzdGVyIG51bWJlcnMgZnJvbSBpbnN0cnVjdGlvbi4KKyAqLworI2RlZmluZSBFWFRSQUNUX1JFR19OVU0oaW5zdHJ1Y3Rpb24sIG9mZnNldCkgXAorCSgoKGluc3RydWN0aW9uKSAmICgweGYgPDwgKG9mZnNldCkpKSA+PiAob2Zmc2V0KSkKKyNkZWZpbmUgUk5fT0ZGU0VUICAxNgorI2RlZmluZSBSVF9PRkZTRVQgIDEyCisjZGVmaW5lIFJUMl9PRkZTRVQgIDAKKy8qCisgKiBCaXQgMjIgb2YgdGhlIGluc3RydWN0aW9uIGVuY29kaW5nIGRpc3Rpbmd1aXNoZXMgYmV0d2VlbgorICogdGhlIFNXUCBhbmQgU1dQQiB2YXJpYW50cyAoYml0IHNldCBtZWFucyBTV1BCKS4KKyAqLworI2RlZmluZSBUWVBFX1NXUEIgKDEgPDwgMjIpCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHN3cGNvdW50ZXI7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBzd3BiY291bnRlcjsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGFidGNvdW50ZXI7CitzdGF0aWMgcGlkX3QgICAgICAgICBwcmV2aW91c19waWQ7CisKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworc3RhdGljIGludCBwcm9jX3JlYWRfc3RhdHVzKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLCBpbnQgY291bnQsCisJCQkgICAgaW50ICplb2YsIHZvaWQgKmRhdGEpCit7CisJY2hhciAqcCA9IHBhZ2U7CisJaW50IGxlbjsKKworCXAgKz0gc3ByaW50ZihwLCAiRW11bGF0ZWQgU1dQOlx0XHQlbHVcbiIsIHN3cGNvdW50ZXIpOworCXAgKz0gc3ByaW50ZihwLCAiRW11bGF0ZWQgU1dQQjpcdFx0JWx1XG4iLCBzd3BiY291bnRlcik7CisJcCArPSBzcHJpbnRmKHAsICJBYm9ydGVkIFNXUHtCfTpcdFx0JWx1XG4iLCBhYnRjb3VudGVyKTsKKwlpZiAocHJldmlvdXNfcGlkICE9IDApCisJCXAgKz0gc3ByaW50ZihwLCAiTGFzdCBwcm9jZXNzOlx0XHQlZFxuIiwgcHJldmlvdXNfcGlkKTsKKworCWxlbiA9IChwIC0gcGFnZSkgLSBvZmY7CisJaWYgKGxlbiA8IDApCisJCWxlbiA9IDA7CisKKwkqZW9mID0gKGxlbiA8PSBjb3VudCkgPyAxIDogMDsKKwkqc3RhcnQgPSBwYWdlICsgb2ZmOworCisJcmV0dXJuIGxlbjsKK30KKyNlbmRpZgorCisvKgorICogU2V0IHVwIHByb2Nlc3MgaW5mbyB0byBzaWduYWwgc2VnbWVudGF0aW9uIGZhdWx0IC0gY2FsbGVkIG9uIGFjY2VzcyBlcnJvci4KKyAqLworc3RhdGljIHZvaWQgc2V0X3NlZ2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJc2lnaW5mb190IGluZm87CisKKwlpZiAoZmluZF92bWEoY3VycmVudC0+bW0sIGFkZHIpID09IE5VTEwpCisJCWluZm8uc2lfY29kZSA9IFNFR1ZfTUFQRVJSOworCWVsc2UKKwkJaW5mby5zaV9jb2RlID0gU0VHVl9BQ0NFUlI7CisKKwlpbmZvLnNpX3NpZ25vID0gU0lHU0VHVjsKKwlpbmZvLnNpX2Vycm5vID0gMDsKKwlpbmZvLnNpX2FkZHIgID0gKHZvaWQgKikgaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKTsKKworCXByX2RlYnVnKCJTV1B7Qn0gZW11bGF0aW9uOiBhY2Nlc3MgY2F1c2VkIG1lbW9yeSBhYm9ydCFcbiIpOworCWFybV9ub3RpZnlfZGllKCJJbGxlZ2FsIG1lbW9yeSBhY2Nlc3MiLCByZWdzLCAmaW5mbywgMCwgMCk7CisKKwlhYnRjb3VudGVyKys7Cit9CisKK3N0YXRpYyBpbnQgZW11bGF0ZV9zd3BYKHVuc2lnbmVkIGludCBhZGRyZXNzLCB1bnNpZ25lZCBpbnQgKmRhdGEsCisJCQl1bnNpZ25lZCBpbnQgdHlwZSkKK3sKKwl1bnNpZ25lZCBpbnQgcmVzID0gMDsKKworCWlmICgodHlwZSAhPSBUWVBFX1NXUEIpICYmIChhZGRyZXNzICYgMHgzKSkgeworCQkvKiBTV1AgdG8gdW5hbGlnbmVkIGFkZHJlc3Mgbm90IHBlcm1pdHRlZCAqLworCQlwcl9kZWJ1ZygiU1dQIGluc3RydWN0aW9uIG9uIHVuYWxpZ25lZCBwb2ludGVyIVxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCXdoaWxlICgxKSB7CisJCXVuc2lnbmVkIGxvbmcgdGVtcDsKKworCQkvKgorCQkgKiBCYXJyaWVyIHJlcXVpcmVkIGJldHdlZW4gYWNjZXNzaW5nIHByb3RlY3RlZCByZXNvdXJjZSBhbmQKKwkJICogcmVsZWFzaW5nIGEgbG9jayBmb3IgaXQuIExlZ2FjeSBjb2RlIG1pZ2h0IG5vdCBoYXZlIGRvbmUKKwkJICogdGhpcywgYW5kIHdlIGNhbm5vdCBkZXRlcm1pbmUgdGhhdCB0aGlzIGlzIG5vdCB0aGUgY2FzZQorCQkgKiBiZWluZyBlbXVsYXRlZCwgc28gaW5zZXJ0IGFsd2F5cy4KKwkJICovCisJCXNtcF9tYigpOworCisJCWlmICh0eXBlID09IFRZUEVfU1dQQikKKwkJCV9fdXNlcl9zd3BiX2FzbSgqZGF0YSwgYWRkcmVzcywgcmVzLCB0ZW1wKTsKKwkJZWxzZQorCQkJX191c2VyX3N3cF9hc20oKmRhdGEsIGFkZHJlc3MsIHJlcywgdGVtcCk7CisKKwkJaWYgKGxpa2VseShyZXMgIT0gLUVBR0FJTikgfHwgc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCisJCQlicmVhazsKKworCQljb25kX3Jlc2NoZWQoKTsKKwl9CisKKwlpZiAocmVzID09IDApIHsKKwkJLyoKKwkJICogQmFycmllciBhbHNvIHJlcXVpcmVkIGJldHdlZW4gYXF1aXJpbmcgYSBsb2NrIGZvciBhCisJCSAqIHByb3RlY3RlZCByZXNvdXJjZSBhbmQgYWNjZXNzaW5nIHRoZSByZXNvdXJjZS4gSW5zZXJ0ZWQgZm9yCisJCSAqIHNhbWUgcmVhc29uIGFzIGFib3ZlLgorCQkgKi8KKwkJc21wX21iKCk7CisKKwkJaWYgKHR5cGUgPT0gVFlQRV9TV1BCKQorCQkJc3dwYmNvdW50ZXIrKzsKKwkJZWxzZQorCQkJc3dwY291bnRlcisrOworCX0KKworCXJldHVybiByZXM7Cit9CisKKy8qCisgKiBzd3BfaGFuZGxlciBsb2dzIHRoZSBpZCBvZiBjYWxsaW5nIHByb2Nlc3MsIGRpc3NlY3RzIHRoZSBpbnN0cnVjdGlvbiwgc2FuaXR5CisgKiBjaGVja3MgdGhlIG1lbW9yeSBsb2NhdGlvbiwgY2FsbHMgZW11bGF0ZV9zd3BYIGZvciB0aGUgYWN0dWFsIG9wZXJhdGlvbiBhbmQKKyAqIGRlYWxzIHdpdGggZml4dXAvZXJyb3IgaGFuZGxpbmcgYmVmb3JlIHJldHVybmluZworICovCitzdGF0aWMgaW50IHN3cF9oYW5kbGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBpbnQgaW5zdHIpCit7CisJdW5zaWduZWQgaW50IGFkZHJlc3MsIGRlc3RyZWcsIGRhdGEsIHR5cGU7CisJdW5zaWduZWQgaW50IHJlcyA9IDA7CisKKwlwZXJmX3N3X2V2ZW50KFBFUkZfQ09VTlRfU1dfRU1VTEFUSU9OX0ZBVUxUUywgMSwgMCwgcmVncywgcmVncy0+QVJNX3BjKTsKKworCWlmIChjdXJyZW50LT5waWQgIT0gcHJldmlvdXNfcGlkKSB7CisJCXByX2RlYnVnKCJcIiVzXCIgKCVsZCkgdXNlcyBkZXByZWNhdGVkIFNXUHtCfSBpbnN0cnVjdGlvblxuIiwKKwkJCSBjdXJyZW50LT5jb21tLCAodW5zaWduZWQgbG9uZyljdXJyZW50LT5waWQpOworCQlwcmV2aW91c19waWQgPSBjdXJyZW50LT5waWQ7CisJfQorCisJYWRkcmVzcyA9IHJlZ3MtPnVyZWdzW0VYVFJBQ1RfUkVHX05VTShpbnN0ciwgUk5fT0ZGU0VUKV07CisJZGF0YQk9IHJlZ3MtPnVyZWdzW0VYVFJBQ1RfUkVHX05VTShpbnN0ciwgUlQyX09GRlNFVCldOworCWRlc3RyZWcgPSBFWFRSQUNUX1JFR19OVU0oaW5zdHIsIFJUX09GRlNFVCk7CisKKwl0eXBlID0gaW5zdHIgJiBUWVBFX1NXUEI7CisKKwlwcl9kZWJ1ZygiYWRkciBpbiByJWQtPjB4JTA4eCwgZGVzdCBpcyByJWQsIHNvdXJjZSBpbiByJWQtPjB4JTA4eClcbiIsCisJCSBFWFRSQUNUX1JFR19OVU0oaW5zdHIsIFJOX09GRlNFVCksIGFkZHJlc3MsCisJCSBkZXN0cmVnLCBFWFRSQUNUX1JFR19OVU0oaW5zdHIsIFJUMl9PRkZTRVQpLCBkYXRhKTsKKworCS8qIENoZWNrIGFjY2VzcyBpbiByZWFzb25hYmxlIGFjY2VzcyByYW5nZSBmb3IgYm90aCBTV1AgYW5kIFNXUEIgKi8KKwlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIChhZGRyZXNzICYgfjMpLCA0KSkgeworCQlwcl9kZWJ1ZygiU1dQe0J9IGVtdWxhdGlvbjogYWNjZXNzIHRvICVwIG5vdCBhbGxvd2VkIVxuIiwKKwkJCSAodm9pZCAqKWFkZHJlc3MpOworCQlyZXMgPSAtRUZBVUxUOworCX0gZWxzZSB7CisJCXJlcyA9IGVtdWxhdGVfc3dwWChhZGRyZXNzLCAmZGF0YSwgdHlwZSk7CisJfQorCisJaWYgKHJlcyA9PSAwKSB7CisJCS8qCisJCSAqIE9uIHN1Y2Nlc3NmdWwgZW11bGF0aW9uLCByZXZlcnQgdGhlIGFkanVzdG1lbnQgdG8gdGhlIFBDCisJCSAqIG1hZGUgaW4ga2VybmVsL3RyYXBzLmMgaW4gb3JkZXIgdG8gcmVzdW1lIGV4ZWN1dGlvbiBhdCB0aGUKKwkJICogaW5zdHJ1Y3Rpb24gZm9sbG93aW5nIHRoZSBTV1B7Qn0uCisJCSAqLworCQlyZWdzLT5BUk1fcGMgKz0gNDsKKwkJcmVncy0+dXJlZ3NbZGVzdHJlZ10gPSBkYXRhOworCX0gZWxzZSBpZiAocmVzID09IC1FRkFVTFQpIHsKKwkJLyoKKwkJICogTWVtb3J5IGVycm9ycyBkbyBub3QgbWVhbiBlbXVsYXRpb24gZmFpbGVkLgorCQkgKiBTZXQgdXAgc2lnbmFsIGluZm8gdG8gcmV0dXJuIFNFR1YsIHRoZW4gcmV0dXJuIE9LCisJCSAqLworCQlzZXRfc2VnZmF1bHQocmVncywgYWRkcmVzcyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBPbmx5IGVtdWxhdGUgU1dQL1NXUEIgZXhlY3V0ZWQgaW4gQVJNIHN0YXRlL1VzZXIgbW9kZS4KKyAqIFRoZSBrZXJuZWwgbXVzdCBiZSBTV1AgZnJlZSBhbmQgU1dQe0J9IGRvZXMgbm90IGV4aXN0IGluIFRodW1iL1RodW1iRUUuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdW5kZWZfaG9vayBzd3BfaG9vayA9IHsKKwkuaW5zdHJfbWFzayA9IDB4MGZiMDBmZjAsCisJLmluc3RyX3ZhbCAgPSAweDAxMDAwMDkwLAorCS5jcHNyX21hc2sgID0gTU9ERV9NQVNLIHwgUFNSX1RfQklUIHwgUFNSX0pfQklULAorCS5jcHNyX3ZhbCAgID0gVVNSX01PREUsCisJLmZuCSAgICA9IHN3cF9oYW5kbGVyCit9OworCisvKgorICogUmVnaXN0ZXIgaGFuZGxlciBhbmQgY3JlYXRlIHN0YXR1cyBmaWxlIGluIC9wcm9jL2NwdQorICogSW52b2tlZCBhcyBsYXRlX2luaXRjYWxsLCBzaW5jZSBub3QgbmVlZGVkIGJlZm9yZSBpbml0IHNwYXduZWQuCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IHN3cF9lbXVsYXRpb25faW5pdCh2b2lkKQoreworI2lmZGVmIENPTkZJR19QUk9DX0ZTCisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpyZXM7CisKKwlyZXMgPSBjcmVhdGVfcHJvY19lbnRyeSgiY3B1L3N3cF9lbXVsYXRpb24iLCBTX0lSVUdPLCBOVUxMKTsKKworCWlmICghcmVzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJlcy0+cmVhZF9wcm9jID0gcHJvY19yZWFkX3N0YXR1czsKKyNlbmRpZiAvKiBDT05GSUdfUFJPQ19GUyAqLworCisJcHJpbnRrKEtFUk5fTk9USUNFICJSZWdpc3RlcmluZyBTV1AvU1dQQiBlbXVsYXRpb24gaGFuZGxlclxuIik7CisJcmVnaXN0ZXJfdW5kZWZfaG9vaygmc3dwX2hvb2spOworCisJcmV0dXJuIDA7Cit9CisKK2xhdGVfaW5pdGNhbGwoc3dwX2VtdWxhdGlvbl9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC90aW1lLmMgYi9hcmNoL2FybS9rZXJuZWwvdGltZS5jCmluZGV4IDM4YzI2MWYuLmYxZTJlYjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3RpbWUuYwpAQCAtMzAsMTIgKzMwLDEzIEBACiAjaW5jbHVkZSA8YXNtL2xlZHMuaD4KICNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KICNpbmNsdWRlIDxhc20vc3RhY2t0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CiAKIC8qCiAgKiBPdXIgc3lzdGVtIHRpbWVyLgogICovCi1zdHJ1Y3Qgc3lzX3RpbWVyICpzeXN0ZW1fdGltZXI7CitzdGF0aWMgc3RydWN0IHN5c190aW1lciAqc3lzdGVtX3RpbWVyOwogCiAjaWYgZGVmaW5lZChDT05GSUdfUlRDX0RSVl9DTU9TKSB8fCBkZWZpbmVkKENPTkZJR19SVENfRFJWX0NNT1NfTU9EVUxFKQogLyogdGhpcyBuZWVkcyBhIGJldHRlciBob21lICovCkBAIC0xNjAsNiArMTYxLDcgQEAKIAogdm9pZCBfX2luaXQgdGltZV9pbml0KHZvaWQpCiB7CisJc3lzdGVtX3RpbWVyID0gbWFjaGluZV9kZXNjLT50aW1lcjsKIAlzeXN0ZW1fdGltZXItPmluaXQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3RyYXBzLmMgYi9hcmNoL2FybS9rZXJuZWwvdHJhcHMuYwppbmRleCA0NDZhZWU5Li5lZTU3NjQwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL2FybS9rZXJuZWwvdHJhcHMuYwpAQCAtMzcsNiArMzcsOCBAQAogCiBzdGF0aWMgY29uc3QgY2hhciAqaGFuZGxlcltdPSB7ICJwcmVmZXRjaCBhYm9ydCIsICJkYXRhIGFib3J0IiwgImFkZHJlc3MgZXhjZXB0aW9uIiwgImludGVycnVwdCIgfTsKIAordm9pZCAqdmVjdG9yc19wYWdlOworCiAjaWZkZWYgQ09ORklHX0RFQlVHX1VTRVIKIHVuc2lnbmVkIGludCB1c2VyX2RlYnVnOwogCkBAIC03MDgsMTkgKzcxMCwxOSBAQAogfQogRVhQT1JUX1NZTUJPTChfX3JlYWR3cml0ZV9idWcpOwogCi12b2lkIF9fcHRlX2Vycm9yKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCB1bnNpZ25lZCBsb25nIHZhbCkKK3ZvaWQgX19wdGVfZXJyb3IoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIHB0ZV90IHB0ZSkKIHsKLQlwcmludGsoIiVzOiVkOiBiYWQgcHRlICUwOGx4LlxuIiwgZmlsZSwgbGluZSwgdmFsKTsKKwlwcmludGsoIiVzOiVkOiBiYWQgcHRlICUwOGx4LlxuIiwgZmlsZSwgbGluZSwgcHRlX3ZhbChwdGUpKTsKIH0KIAotdm9pZCBfX3BtZF9lcnJvcihjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgdW5zaWduZWQgbG9uZyB2YWwpCit2b2lkIF9fcG1kX2Vycm9yKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBwbWRfdCBwbWQpCiB7Ci0JcHJpbnRrKCIlczolZDogYmFkIHBtZCAlMDhseC5cbiIsIGZpbGUsIGxpbmUsIHZhbCk7CisJcHJpbnRrKCIlczolZDogYmFkIHBtZCAlMDhseC5cbiIsIGZpbGUsIGxpbmUsIHBtZF92YWwocG1kKSk7CiB9CiAKLXZvaWQgX19wZ2RfZXJyb3IoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIHVuc2lnbmVkIGxvbmcgdmFsKQordm9pZCBfX3BnZF9lcnJvcihjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgcGdkX3QgcGdkKQogewotCXByaW50aygiJXM6JWQ6IGJhZCBwZ2QgJTA4bHguXG4iLCBmaWxlLCBsaW5lLCB2YWwpOworCXByaW50aygiJXM6JWQ6IGJhZCBwZ2QgJTA4bHguXG4iLCBmaWxlLCBsaW5lLCBwZ2RfdmFsKHBnZCkpOwogfQogCiBhc21saW5rYWdlIHZvaWQgX19kaXYwKHZvaWQpCkBAIC03NTYsNyArNzU4LDExIEBACiAKIHZvaWQgX19pbml0IGVhcmx5X3RyYXBfaW5pdCh2b2lkKQogeworI2lmIGRlZmluZWQoQ09ORklHX0NQVV9VU0VfRE9NQUlOUykKIAl1bnNpZ25lZCBsb25nIHZlY3RvcnMgPSBDT05GSUdfVkVDVE9SU19CQVNFOworI2Vsc2UKKwl1bnNpZ25lZCBsb25nIHZlY3RvcnMgPSAodW5zaWduZWQgbG9uZyl2ZWN0b3JzX3BhZ2U7CisjZW5kaWYKIAlleHRlcm4gY2hhciBfX3N0dWJzX3N0YXJ0W10sIF9fc3R1YnNfZW5kW107CiAJZXh0ZXJuIGNoYXIgX192ZWN0b3JzX3N0YXJ0W10sIF9fdmVjdG9yc19lbmRbXTsKIAlleHRlcm4gY2hhciBfX2t1c2VyX2hlbHBlcl9zdGFydFtdLCBfX2t1c2VyX2hlbHBlcl9lbmRbXTsKQEAgLTc4MCwxMCArNzg2LDEwIEBACiAJICogQ29weSBzaWduYWwgcmV0dXJuIGhhbmRsZXJzIGludG8gdGhlIHZlY3RvciBwYWdlLCBhbmQKIAkgKiBzZXQgc2lncmV0dXJuIHRvIGJlIGEgcG9pbnRlciB0byB0aGVzZS4KIAkgKi8KLQltZW1jcHkoKHZvaWQgKilLRVJOX1NJR1JFVFVSTl9DT0RFLCBzaWdyZXR1cm5fY29kZXMsCi0JICAgICAgIHNpemVvZihzaWdyZXR1cm5fY29kZXMpKTsKLQltZW1jcHkoKHZvaWQgKilLRVJOX1JFU1RBUlRfQ09ERSwgc3lzY2FsbF9yZXN0YXJ0X2NvZGUsCi0JICAgICAgIHNpemVvZihzeXNjYWxsX3Jlc3RhcnRfY29kZSkpOworCW1lbWNweSgodm9pZCAqKSh2ZWN0b3JzICsgS0VSTl9TSUdSRVRVUk5fQ09ERSAtIENPTkZJR19WRUNUT1JTX0JBU0UpLAorCSAgICAgICBzaWdyZXR1cm5fY29kZXMsIHNpemVvZihzaWdyZXR1cm5fY29kZXMpKTsKKwltZW1jcHkoKHZvaWQgKikodmVjdG9ycyArIEtFUk5fUkVTVEFSVF9DT0RFIC0gQ09ORklHX1ZFQ1RPUlNfQkFTRSksCisJICAgICAgIHN5c2NhbGxfcmVzdGFydF9jb2RlLCBzaXplb2Yoc3lzY2FsbF9yZXN0YXJ0X2NvZGUpKTsKIAogCWZsdXNoX2ljYWNoZV9yYW5nZSh2ZWN0b3JzLCB2ZWN0b3JzICsgUEFHRV9TSVpFKTsKIAltb2RpZnlfZG9tYWluKERPTUFJTl9VU0VSLCBET01BSU5fQ0xJRU5UKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9hcm0va2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggY2VhZDg4OS4uODZiNjZmMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9hcm0va2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTEwMSw2ICsxMDEsNyBAQAogCQkJX19leGNlcHRpb25fdGV4dF9zdGFydCA9IC47CiAJCQkqKC5leGNlcHRpb24udGV4dCkKIAkJCV9fZXhjZXB0aW9uX3RleHRfZW5kID0gLjsKKwkJCUlSUUVOVFJZX1RFWFQKIAkJCVRFWFRfVEVYVAogCQkJU0NIRURfVEVYVAogCQkJTE9DS19URVhUCkBAIC0xNjcsNiArMTY4LDcgQEAKIAogCQlOT1NBVkVfREFUQQogCQlDQUNIRUxJTkVfQUxJR05FRF9EQVRBKDMyKQorCQlSRUFEX01PU1RMWV9EQVRBKDMyKQogCiAJCS8qCiAJCSAqIFRoZSBleGNlcHRpb24gZml4dXAgdGFibGUgKG1pZ2h0IG5lZWQgcmVzb3J0aW5nIGF0IHJ1bnRpbWUpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9saWIvZ2V0dXNlci5TIGIvYXJjaC9hcm0vbGliL2dldHVzZXIuUwppbmRleCBiMTYzMWE3Li4xYjA0OWNkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9saWIvZ2V0dXNlci5TCisrKyBiL2FyY2gvYXJtL2xpYi9nZXR1c2VyLlMKQEAgLTI4LDIwICsyOCwyMSBAQAogICovCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGFzbS9lcnJuby5oPgorI2luY2x1ZGUgPGFzbS9kb21haW4uaD4KIAogRU5UUlkoX19nZXRfdXNlcl8xKQotMToJbGRyYnQJcjIsIFtyMF0KKzE6CVQobGRyYikJcjIsIFtyMF0KIAltb3YJcjAsICMwCiAJbW92CXBjLCBscgogRU5EUFJPQyhfX2dldF91c2VyXzEpCiAKIEVOVFJZKF9fZ2V0X3VzZXJfMikKICNpZmRlZiBDT05GSUdfVEhVTUIyX0tFUk5FTAotMjoJbGRyYnQJcjIsIFtyMF0KLTM6CWxkcmJ0CXIzLCBbcjAsICMxXQorMjoJVChsZHJiKQlyMiwgW3IwXQorMzoJVChsZHJiKQlyMywgW3IwLCAjMV0KICNlbHNlCi0yOglsZHJidAlyMiwgW3IwXSwgIzEKLTM6CWxkcmJ0CXIzLCBbcjBdCisyOglUKGxkcmIpCXIyLCBbcjBdLCAjMQorMzoJVChsZHJiKQlyMywgW3IwXQogI2VuZGlmCiAjaWZuZGVmIF9fQVJNRUJfXwogCW9ycglyMiwgcjIsIHIzLCBsc2wgIzgKQEAgLTUzLDcgKzU0LDcgQEAKIEVORFBST0MoX19nZXRfdXNlcl8yKQogCiBFTlRSWShfX2dldF91c2VyXzQpCi00OglsZHJ0CXIyLCBbcjBdCis0OglUKGxkcikJcjIsIFtyMF0KIAltb3YJcjAsICMwCiAJbW92CXBjLCBscgogRU5EUFJPQyhfX2dldF91c2VyXzQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9saWIvcHV0dXNlci5TIGIvYXJjaC9hcm0vbGliL3B1dHVzZXIuUwppbmRleCA1YTAxYTIzLi5jMDIzZmMxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9saWIvcHV0dXNlci5TCisrKyBiL2FyY2gvYXJtL2xpYi9wdXR1c2VyLlMKQEAgLTI4LDkgKzI4LDEwIEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8YXNtL2Vycm5vLmg+CisjaW5jbHVkZSA8YXNtL2RvbWFpbi5oPgogCiBFTlRSWShfX3B1dF91c2VyXzEpCi0xOglzdHJidAlyMiwgW3IwXQorMToJVChzdHJiKQlyMiwgW3IwXQogCW1vdglyMCwgIzAKIAltb3YJcGMsIGxyCiBFTkRQUk9DKF9fcHV0X3VzZXJfMSkKQEAgLTM5LDE5ICs0MCwxOSBAQAogCW1vdglpcCwgcjIsIGxzciAjOAogI2lmZGVmIENPTkZJR19USFVNQjJfS0VSTkVMCiAjaWZuZGVmIF9fQVJNRUJfXwotMjoJc3RyYnQJcjIsIFtyMF0KLTM6CXN0cmJ0CWlwLCBbcjAsICMxXQorMjoJVChzdHJiKQlyMiwgW3IwXQorMzoJVChzdHJiKQlpcCwgW3IwLCAjMV0KICNlbHNlCi0yOglzdHJidAlpcCwgW3IwXQotMzoJc3RyYnQJcjIsIFtyMCwgIzFdCisyOglUKHN0cmIpCWlwLCBbcjBdCiszOglUKHN0cmIpCXIyLCBbcjAsICMxXQogI2VuZGlmCiAjZWxzZQkvKiAhQ09ORklHX1RIVU1CMl9LRVJORUwgKi8KICNpZm5kZWYgX19BUk1FQl9fCi0yOglzdHJidAlyMiwgW3IwXSwgIzEKLTM6CXN0cmJ0CWlwLCBbcjBdCisyOglUKHN0cmIpCXIyLCBbcjBdLCAjMQorMzoJVChzdHJiKQlpcCwgW3IwXQogI2Vsc2UKLTI6CXN0cmJ0CWlwLCBbcjBdLCAjMQotMzoJc3RyYnQJcjIsIFtyMF0KKzI6CVQoc3RyYikJaXAsIFtyMF0sICMxCiszOglUKHN0cmIpCXIyLCBbcjBdCiAjZW5kaWYKICNlbmRpZgkvKiBDT05GSUdfVEhVTUIyX0tFUk5FTCAqLwogCW1vdglyMCwgIzAKQEAgLTU5LDE4ICs2MCwxOCBAQAogRU5EUFJPQyhfX3B1dF91c2VyXzIpCiAKIEVOVFJZKF9fcHV0X3VzZXJfNCkKLTQ6CXN0cnQJcjIsIFtyMF0KKzQ6CVQoc3RyKQlyMiwgW3IwXQogCW1vdglyMCwgIzAKIAltb3YJcGMsIGxyCiBFTkRQUk9DKF9fcHV0X3VzZXJfNCkKIAogRU5UUlkoX19wdXRfdXNlcl84KQogI2lmZGVmIENPTkZJR19USFVNQjJfS0VSTkVMCi01OglzdHJ0CXIyLCBbcjBdCi02OglzdHJ0CXIzLCBbcjAsICM0XQorNToJVChzdHIpCXIyLCBbcjBdCis2OglUKHN0cikJcjMsIFtyMCwgIzRdCiAjZWxzZQotNToJc3RydAlyMiwgW3IwXSwgIzQKLTY6CXN0cnQJcjMsIFtyMF0KKzU6CVQoc3RyKQlyMiwgW3IwXSwgIzQKKzY6CVQoc3RyKQlyMywgW3IwXQogI2VuZGlmCiAJbW92CXIwLCAjMAogCW1vdglwYywgbHIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2xpYi91YWNjZXNzLlMgYi9hcmNoL2FybS9saWIvdWFjY2Vzcy5TCmluZGV4IGZlZTlmNmYuLmQwZWNlMmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2xpYi91YWNjZXNzLlMKKysrIGIvYXJjaC9hcm0vbGliL3VhY2Nlc3MuUwpAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CiAjaW5jbHVkZSA8YXNtL2Vycm5vLmg+CisjaW5jbHVkZSA8YXNtL2RvbWFpbi5oPgogCiAJCS50ZXh0CiAKQEAgLTMxLDExICszMiwxMSBAQAogCQlyc2IJaXAsIGlwLCAjNAogCQljbXAJaXAsICMyCiAJCWxkcmIJcjMsIFtyMV0sICMxCi1VU0VSKAkJc3RyYnQJcjMsIFtyMF0sICMxKQkJCUAgTWF5IGZhdWx0CitVU0VSKAkJVChzdHJiKQlyMywgW3IwXSwgIzEpCQkJQCBNYXkgZmF1bHQKIAkJbGRyZ2ViCXIzLCBbcjFdLCAjMQotVVNFUigJCXN0cmdlYnQJcjMsIFtyMF0sICMxKQkJCUAgTWF5IGZhdWx0CitVU0VSKAkJVChzdHJnZWIpIHIzLCBbcjBdLCAjMSkJCQlAIE1heSBmYXVsdAogCQlsZHJndGIJcjMsIFtyMV0sICMxCi1VU0VSKAkJc3RyZ3RidAlyMywgW3IwXSwgIzEpCQkJQCBNYXkgZmF1bHQKK1VTRVIoCQlUKHN0cmd0YikgcjMsIFtyMF0sICMxKQkJCUAgTWF5IGZhdWx0CiAJCXN1YglyMiwgcjIsIGlwCiAJCWIJLkxjMnVfZGVzdF9hbGlnbmVkCiAKQEAgLTU4LDcgKzU5LDcgQEAKIAkJYWRkbWkJaXAsIHIyLCAjNAogCQlibWkJLkxjMnVfMG5vd29yZHMKIAkJbGRyCXIzLCBbcjFdLCAjNAotVVNFUigJCXN0cnQJcjMsIFtyMF0sICM0KQkJCUAgTWF5IGZhdWx0CitVU0VSKAkJVChzdHIpCXIzLCBbcjBdLCAjNCkJCQlAIE1heSBmYXVsdAogCQltb3YJaXAsIHIwLCBsc2wgIzMyIC0gUEFHRV9TSElGVAlAIE9uIGVhY2ggcGFnZSwgdXNlIGEgbGQvc3Q/P3QgaW5zdHJ1Y3Rpb24KIAkJcnNiCWlwLCBpcCwgIzAKIAkJbW92cwlpcCwgaXAsIGxzciAjMzIgLSBQQUdFX1NISUZUCkBAIC04NywxOCArODgsMTggQEAKIAkJc3RtbmVpYQlyMCEsIHtyMyAtIHI0fQkJCUAgU2hvdWxkbnQgZmF1bHQKIAkJdHN0CWlwLCAjNAogCQlsZHJuZQlyMywgW3IxXSwgIzQKLQkJc3RybmV0CXIzLCBbcjBdLCAjNAkJCUAgU2hvdWxkbnQgZmF1bHQKKwkJVChzdHJuZSkgcjMsIFtyMF0sICM0CQkJQCBTaG91bGRudCBmYXVsdAogCQlhbmRzCWlwLCBpcCwgIzMKIAkJYmVxCS5MYzJ1XzBmdXBpCiAuTGMydV8wbm93b3JkczoJdGVxCWlwLCAjMAogCQliZXEJLkxjMnVfZmluaXNoZWQKIC5MYzJ1X25vd29yZHM6CWNtcAlpcCwgIzIKIAkJbGRyYglyMywgW3IxXSwgIzEKLVVTRVIoCQlzdHJidAlyMywgW3IwXSwgIzEpCQkJQCBNYXkgZmF1bHQKK1VTRVIoCQlUKHN0cmIpCXIzLCBbcjBdLCAjMSkJCQlAIE1heSBmYXVsdAogCQlsZHJnZWIJcjMsIFtyMV0sICMxCi1VU0VSKAkJc3RyZ2VidAlyMywgW3IwXSwgIzEpCQkJQCBNYXkgZmF1bHQKK1VTRVIoCQlUKHN0cmdlYikgcjMsIFtyMF0sICMxKQkJCUAgTWF5IGZhdWx0CiAJCWxkcmd0YglyMywgW3IxXSwgIzEKLVVTRVIoCQlzdHJndGJ0CXIzLCBbcjBdLCAjMSkJCQlAIE1heSBmYXVsdAorVVNFUigJCVQoc3RyZ3RiKSByMywgW3IwXSwgIzEpCQkJQCBNYXkgZmF1bHQKIAkJYgkuTGMydV9maW5pc2hlZAogCiAuTGMydV9ub3RfZW5vdWdoOgpAQCAtMTE5LDcgKzEyMCw3IEBACiAJCW1vdglyMywgcjcsIHB1bGwgIzgKIAkJbGRyCXI3LCBbcjFdLCAjNAogCQlvcnIJcjMsIHIzLCByNywgcHVzaCAjMjQKLVVTRVIoCQlzdHJ0CXIzLCBbcjBdLCAjNCkJCQlAIE1heSBmYXVsdAorVVNFUigJCVQoc3RyKQlyMywgW3IwXSwgIzQpCQkJQCBNYXkgZmF1bHQKIAkJbW92CWlwLCByMCwgbHNsICMzMiAtIFBBR0VfU0hJRlQKIAkJcnNiCWlwLCBpcCwgIzAKIAkJbW92cwlpcCwgaXAsIGxzciAjMzIgLSBQQUdFX1NISUZUCkBAIC0xNTQsMTggKzE1NSwxOCBAQAogCQltb3ZuZQlyMywgcjcsIHB1bGwgIzgKIAkJbGRybmUJcjcsIFtyMV0sICM0CiAJCW9ycm5lCXIzLCByMywgcjcsIHB1c2ggIzI0Ci0JCXN0cm5ldAlyMywgW3IwXSwgIzQJCQlAIFNob3VsZG50IGZhdWx0CisJCVQoc3RybmUpIHIzLCBbcjBdLCAjNAkJCUAgU2hvdWxkbnQgZmF1bHQKIAkJYW5kcwlpcCwgaXAsICMzCiAJCWJlcQkuTGMydV8xZnVwaQogLkxjMnVfMW5vd29yZHM6CW1vdglyMywgcjcsIGdldF9ieXRlXzEKIAkJdGVxCWlwLCAjMAogCQliZXEJLkxjMnVfZmluaXNoZWQKIAkJY21wCWlwLCAjMgotVVNFUigJCXN0cmJ0CXIzLCBbcjBdLCAjMSkJCQlAIE1heSBmYXVsdAorVVNFUigJCVQoc3RyYikJcjMsIFtyMF0sICMxKQkJCUAgTWF5IGZhdWx0CiAJCW1vdmdlCXIzLCByNywgZ2V0X2J5dGVfMgotVVNFUigJCXN0cmdlYnQJcjMsIFtyMF0sICMxKQkJCUAgTWF5IGZhdWx0CitVU0VSKAkJVChzdHJnZWIpIHIzLCBbcjBdLCAjMSkJCQlAIE1heSBmYXVsdAogCQltb3ZndAlyMywgcjcsIGdldF9ieXRlXzMKLVVTRVIoCQlzdHJndGJ0CXIzLCBbcjBdLCAjMSkJCQlAIE1heSBmYXVsdAorVVNFUigJCVQoc3RyZ3RiKSByMywgW3IwXSwgIzEpCQkJQCBNYXkgZmF1bHQKIAkJYgkuTGMydV9maW5pc2hlZAogCiAuTGMydV8yZnVwaToJc3VicwlyMiwgcjIsICM0CkBAIC0xNzQsNyArMTc1LDcgQEAKIAkJbW92CXIzLCByNywgcHVsbCAjMTYKIAkJbGRyCXI3LCBbcjFdLCAjNAogCQlvcnIJcjMsIHIzLCByNywgcHVzaCAjMTYKLVVTRVIoCQlzdHJ0CXIzLCBbcjBdLCAjNCkJCQlAIE1heSBmYXVsdAorVVNFUigJCVQoc3RyKQlyMywgW3IwXSwgIzQpCQkJQCBNYXkgZmF1bHQKIAkJbW92CWlwLCByMCwgbHNsICMzMiAtIFBBR0VfU0hJRlQKIAkJcnNiCWlwLCBpcCwgIzAKIAkJbW92cwlpcCwgaXAsIGxzciAjMzIgLSBQQUdFX1NISUZUCkBAIC0yMDksMTggKzIxMCwxOCBAQAogCQltb3ZuZQlyMywgcjcsIHB1bGwgIzE2CiAJCWxkcm5lCXI3LCBbcjFdLCAjNAogCQlvcnJuZQlyMywgcjMsIHI3LCBwdXNoICMxNgotCQlzdHJuZXQJcjMsIFtyMF0sICM0CQkJQCBTaG91bGRudCBmYXVsdAorCQlUKHN0cm5lKSByMywgW3IwXSwgIzQJCQlAIFNob3VsZG50IGZhdWx0CiAJCWFuZHMJaXAsIGlwLCAjMwogCQliZXEJLkxjMnVfMmZ1cGkKIC5MYzJ1XzJub3dvcmRzOgltb3YJcjMsIHI3LCBnZXRfYnl0ZV8yCiAJCXRlcQlpcCwgIzAKIAkJYmVxCS5MYzJ1X2ZpbmlzaGVkCiAJCWNtcAlpcCwgIzIKLVVTRVIoCQlzdHJidAlyMywgW3IwXSwgIzEpCQkJQCBNYXkgZmF1bHQKK1VTRVIoCQlUKHN0cmIpCXIzLCBbcjBdLCAjMSkJCQlAIE1heSBmYXVsdAogCQltb3ZnZQlyMywgcjcsIGdldF9ieXRlXzMKLVVTRVIoCQlzdHJnZWJ0CXIzLCBbcjBdLCAjMSkJCQlAIE1heSBmYXVsdAorVVNFUigJCVQoc3RyZ2ViKSByMywgW3IwXSwgIzEpCQkJQCBNYXkgZmF1bHQKIAkJbGRyZ3RiCXIzLCBbcjFdLCAjMAotVVNFUigJCXN0cmd0YnQJcjMsIFtyMF0sICMxKQkJCUAgTWF5IGZhdWx0CitVU0VSKAkJVChzdHJndGIpIHIzLCBbcjBdLCAjMSkJCQlAIE1heSBmYXVsdAogCQliCS5MYzJ1X2ZpbmlzaGVkCiAKIC5MYzJ1XzNmdXBpOglzdWJzCXIyLCByMiwgIzQKQEAgLTIyOSw3ICsyMzAsNyBAQAogCQltb3YJcjMsIHI3LCBwdWxsICMyNAogCQlsZHIJcjcsIFtyMV0sICM0CiAJCW9ycglyMywgcjMsIHI3LCBwdXNoICM4Ci1VU0VSKAkJc3RydAlyMywgW3IwXSwgIzQpCQkJQCBNYXkgZmF1bHQKK1VTRVIoCQlUKHN0cikJcjMsIFtyMF0sICM0KQkJCUAgTWF5IGZhdWx0CiAJCW1vdglpcCwgcjAsIGxzbCAjMzIgLSBQQUdFX1NISUZUCiAJCXJzYglpcCwgaXAsICMwCiAJCW1vdnMJaXAsIGlwLCBsc3IgIzMyIC0gUEFHRV9TSElGVApAQCAtMjY0LDE4ICsyNjUsMTggQEAKIAkJbW92bmUJcjMsIHI3LCBwdWxsICMyNAogCQlsZHJuZQlyNywgW3IxXSwgIzQKIAkJb3JybmUJcjMsIHIzLCByNywgcHVzaCAjOAotCQlzdHJuZXQJcjMsIFtyMF0sICM0CQkJQCBTaG91bGRudCBmYXVsdAorCQlUKHN0cm5lKSByMywgW3IwXSwgIzQJCQlAIFNob3VsZG50IGZhdWx0CiAJCWFuZHMJaXAsIGlwLCAjMwogCQliZXEJLkxjMnVfM2Z1cGkKIC5MYzJ1XzNub3dvcmRzOgltb3YJcjMsIHI3LCBnZXRfYnl0ZV8zCiAJCXRlcQlpcCwgIzAKIAkJYmVxCS5MYzJ1X2ZpbmlzaGVkCiAJCWNtcAlpcCwgIzIKLVVTRVIoCQlzdHJidAlyMywgW3IwXSwgIzEpCQkJQCBNYXkgZmF1bHQKK1VTRVIoCQlUKHN0cmIpCXIzLCBbcjBdLCAjMSkJCQlAIE1heSBmYXVsdAogCQlsZHJnZWIJcjMsIFtyMV0sICMxCi1VU0VSKAkJc3RyZ2VidAlyMywgW3IwXSwgIzEpCQkJQCBNYXkgZmF1bHQKK1VTRVIoCQlUKHN0cmdlYikgcjMsIFtyMF0sICMxKQkJCUAgTWF5IGZhdWx0CiAJCWxkcmd0YglyMywgW3IxXSwgIzAKLVVTRVIoCQlzdHJndGJ0CXIzLCBbcjBdLCAjMSkJCQlAIE1heSBmYXVsdAorVVNFUigJCVQoc3RyZ3RiKSByMywgW3IwXSwgIzEpCQkJQCBNYXkgZmF1bHQKIAkJYgkuTGMydV9maW5pc2hlZAogRU5EUFJPQyhfX2NvcHlfdG9fdXNlcikKIApAQCAtMjk0LDExICsyOTUsMTEgQEAKIC5MY2Z1X2Rlc3Rfbm90X2FsaWduZWQ6CiAJCXJzYglpcCwgaXAsICM0CiAJCWNtcAlpcCwgIzIKLVVTRVIoCQlsZHJidAlyMywgW3IxXSwgIzEpCQkJQCBNYXkgZmF1bHQKK1VTRVIoCQlUKGxkcmIpCXIzLCBbcjFdLCAjMSkJCQlAIE1heSBmYXVsdAogCQlzdHJiCXIzLCBbcjBdLCAjMQotVVNFUigJCWxkcmdlYnQJcjMsIFtyMV0sICMxKQkJCUAgTWF5IGZhdWx0CitVU0VSKAkJVChsZHJnZWIpIHIzLCBbcjFdLCAjMSkJCQlAIE1heSBmYXVsdAogCQlzdHJnZWIJcjMsIFtyMF0sICMxCi1VU0VSKAkJbGRyZ3RidAlyMywgW3IxXSwgIzEpCQkJQCBNYXkgZmF1bHQKK1VTRVIoCQlUKGxkcmd0YikgcjMsIFtyMV0sICMxKQkJCUAgTWF5IGZhdWx0CiAJCXN0cmd0YglyMywgW3IwXSwgIzEKIAkJc3ViCXIyLCByMiwgaXAKIAkJYgkuTGNmdV9kZXN0X2FsaWduZWQKQEAgLTMyMSw3ICszMjIsNyBAQAogLkxjZnVfMGZ1cGk6CXN1YnMJcjIsIHIyLCAjNAogCQlhZGRtaQlpcCwgcjIsICM0CiAJCWJtaQkuTGNmdV8wbm93b3JkcwotVVNFUigJCWxkcnQJcjMsIFtyMV0sICM0KQorVVNFUigJCVQobGRyKQlyMywgW3IxXSwgIzQpCiAJCXN0cglyMywgW3IwXSwgIzQKIAkJbW92CWlwLCByMSwgbHNsICMzMiAtIFBBR0VfU0hJRlQJQCBPbiBlYWNoIHBhZ2UsIHVzZSBhIGxkL3N0Pz90IGluc3RydWN0aW9uCiAJCXJzYglpcCwgaXAsICMwCkBAIC0zNTAsMTggKzM1MSwxOCBAQAogCQlsZG1uZWlhCXIxISwge3IzIC0gcjR9CQkJQCBTaG91bGRudCBmYXVsdAogCQlzdG1uZWlhCXIwISwge3IzIC0gcjR9CiAJCXRzdAlpcCwgIzQKLQkJbGRybmV0CXIzLCBbcjFdLCAjNAkJCUAgU2hvdWxkbnQgZmF1bHQKKwkJVChsZHJuZSkgcjMsIFtyMV0sICM0CQkJQCBTaG91bGRudCBmYXVsdAogCQlzdHJuZQlyMywgW3IwXSwgIzQKIAkJYW5kcwlpcCwgaXAsICMzCiAJCWJlcQkuTGNmdV8wZnVwaQogLkxjZnVfMG5vd29yZHM6CXRlcQlpcCwgIzAKIAkJYmVxCS5MY2Z1X2ZpbmlzaGVkCiAuTGNmdV9ub3dvcmRzOgljbXAJaXAsICMyCi1VU0VSKAkJbGRyYnQJcjMsIFtyMV0sICMxKQkJCUAgTWF5IGZhdWx0CitVU0VSKAkJVChsZHJiKQlyMywgW3IxXSwgIzEpCQkJQCBNYXkgZmF1bHQKIAkJc3RyYglyMywgW3IwXSwgIzEKLVVTRVIoCQlsZHJnZWJ0CXIzLCBbcjFdLCAjMSkJCQlAIE1heSBmYXVsdAorVVNFUigJCVQobGRyZ2ViKSByMywgW3IxXSwgIzEpCQkJQCBNYXkgZmF1bHQKIAkJc3RyZ2ViCXIzLCBbcjBdLCAjMQotVVNFUigJCWxkcmd0YnQJcjMsIFtyMV0sICMxKQkJCUAgTWF5IGZhdWx0CitVU0VSKAkJVChsZHJndGIpIHIzLCBbcjFdLCAjMSkJCQlAIE1heSBmYXVsdAogCQlzdHJndGIJcjMsIFtyMF0sICMxCiAJCWIJLkxjZnVfZmluaXNoZWQKIApAQCAtMzc0LDcgKzM3NSw3IEBACiAKIC5MY2Z1X3NyY19ub3RfYWxpZ25lZDoKIAkJYmljCXIxLCByMSwgIzMKLVVTRVIoCQlsZHJ0CXI3LCBbcjFdLCAjNCkJCQlAIE1heSBmYXVsdAorVVNFUigJCVQobGRyKQlyNywgW3IxXSwgIzQpCQkJQCBNYXkgZmF1bHQKIAkJY21wCWlwLCAjMgogCQliZ3QJLkxjZnVfM2Z1cGkKIAkJYmVxCS5MY2Z1XzJmdXBpCkBAIC0zODIsNyArMzgzLDcgQEAKIAkJYWRkbWkJaXAsIHIyLCAjNAogCQlibWkJLkxjZnVfMW5vd29yZHMKIAkJbW92CXIzLCByNywgcHVsbCAjOAotVVNFUigJCWxkcnQJcjcsIFtyMV0sICM0KQkJCUAgTWF5IGZhdWx0CitVU0VSKAkJVChsZHIpCXI3LCBbcjFdLCAjNCkJCQlAIE1heSBmYXVsdAogCQlvcnIJcjMsIHIzLCByNywgcHVzaCAjMjQKIAkJc3RyCXIzLCBbcjBdLCAjNAogCQltb3YJaXAsIHIxLCBsc2wgIzMyIC0gUEFHRV9TSElGVApAQCAtNDE3LDcgKzQxOCw3IEBACiAJCXN0bW5laWEJcjAhLCB7cjMgLSByNH0KIAkJdHN0CWlwLCAjNAogCQltb3ZuZQlyMywgcjcsIHB1bGwgIzgKLVVTRVIoCQlsZHJuZXQJcjcsIFtyMV0sICM0KQkJCUAgTWF5IGZhdWx0CitVU0VSKAkJVChsZHJuZSkgcjcsIFtyMV0sICM0KQkJCUAgTWF5IGZhdWx0CiAJCW9ycm5lCXIzLCByMywgcjcsIHB1c2ggIzI0CiAJCXN0cm5lCXIzLCBbcjBdLCAjNAogCQlhbmRzCWlwLCBpcCwgIzMKQEAgLTQzNyw3ICs0MzgsNyBAQAogCQlhZGRtaQlpcCwgcjIsICM0CiAJCWJtaQkuTGNmdV8ybm93b3JkcwogCQltb3YJcjMsIHI3LCBwdWxsICMxNgotVVNFUigJCWxkcnQJcjcsIFtyMV0sICM0KQkJCUAgTWF5IGZhdWx0CitVU0VSKAkJVChsZHIpCXI3LCBbcjFdLCAjNCkJCQlAIE1heSBmYXVsdAogCQlvcnIJcjMsIHIzLCByNywgcHVzaCAjMTYKIAkJc3RyCXIzLCBbcjBdLCAjNAogCQltb3YJaXAsIHIxLCBsc2wgIzMyIC0gUEFHRV9TSElGVApAQCAtNDczLDcgKzQ3NCw3IEBACiAJCXN0bW5laWEJcjAhLCB7cjMgLSByNH0KIAkJdHN0CWlwLCAjNAogCQltb3ZuZQlyMywgcjcsIHB1bGwgIzE2Ci1VU0VSKAkJbGRybmV0CXI3LCBbcjFdLCAjNCkJCQlAIE1heSBmYXVsdAorVVNFUigJCVQobGRybmUpIHI3LCBbcjFdLCAjNCkJCQlAIE1heSBmYXVsdAogCQlvcnJuZQlyMywgcjMsIHI3LCBwdXNoICMxNgogCQlzdHJuZQlyMywgW3IwXSwgIzQKIAkJYW5kcwlpcCwgaXAsICMzCkBAIC00ODUsNyArNDg2LDcgQEAKIAkJc3RyYglyMywgW3IwXSwgIzEKIAkJbW92Z2UJcjMsIHI3LCBnZXRfYnl0ZV8zCiAJCXN0cmdlYglyMywgW3IwXSwgIzEKLVVTRVIoCQlsZHJndGJ0CXIzLCBbcjFdLCAjMCkJCQlAIE1heSBmYXVsdAorVVNFUigJCVQobGRyZ3RiKSByMywgW3IxXSwgIzApCQkJQCBNYXkgZmF1bHQKIAkJc3RyZ3RiCXIzLCBbcjBdLCAjMQogCQliCS5MY2Z1X2ZpbmlzaGVkCiAKQEAgLTQ5Myw3ICs0OTQsNyBAQAogCQlhZGRtaQlpcCwgcjIsICM0CiAJCWJtaQkuTGNmdV8zbm93b3JkcwogCQltb3YJcjMsIHI3LCBwdWxsICMyNAotVVNFUigJCWxkcnQJcjcsIFtyMV0sICM0KQkJCUAgTWF5IGZhdWx0CitVU0VSKAkJVChsZHIpCXI3LCBbcjFdLCAjNCkJCQlAIE1heSBmYXVsdAogCQlvcnIJcjMsIHIzLCByNywgcHVzaCAjOAogCQlzdHIJcjMsIFtyMF0sICM0CiAJCW1vdglpcCwgcjEsIGxzbCAjMzIgLSBQQUdFX1NISUZUCkBAIC01MjgsNyArNTI5LDcgQEAKIAkJc3RtbmVpYQlyMCEsIHtyMyAtIHI0fQogCQl0c3QJaXAsICM0CiAJCW1vdm5lCXIzLCByNywgcHVsbCAjMjQKLVVTRVIoCQlsZHJuZXQJcjcsIFtyMV0sICM0KQkJCUAgTWF5IGZhdWx0CitVU0VSKAkJVChsZHJuZSkgcjcsIFtyMV0sICM0KQkJCUAgTWF5IGZhdWx0CiAJCW9ycm5lCXIzLCByMywgcjcsIHB1c2ggIzgKIAkJc3RybmUJcjMsIFtyMF0sICM0CiAJCWFuZHMJaXAsIGlwLCAjMwpAQCAtNTM4LDkgKzUzOSw5IEBACiAJCWJlcQkuTGNmdV9maW5pc2hlZAogCQljbXAJaXAsICMyCiAJCXN0cmIJcjMsIFtyMF0sICMxCi1VU0VSKAkJbGRyZ2VidAlyMywgW3IxXSwgIzEpCQkJQCBNYXkgZmF1bHQKK1VTRVIoCQlUKGxkcmdlYikgcjMsIFtyMV0sICMxKQkJCUAgTWF5IGZhdWx0CiAJCXN0cmdlYglyMywgW3IwXSwgIzEKLVVTRVIoCQlsZHJndGJ0CXIzLCBbcjFdLCAjMSkJCQlAIE1heSBmYXVsdAorVVNFUigJCVQobGRyZ3RiKSByMywgW3IxXSwgIzEpCQkJQCBNYXkgZmF1bHQKIAkJc3RyZ3RiCXIzLCBbcjBdLCAjMQogCQliCS5MY2Z1X2ZpbmlzaGVkCiBFTkRQUk9DKF9fY29weV9mcm9tX3VzZXIpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXJtOTIwMF90aW1lLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXJtOTIwMF90aW1lLmMKaW5kZXggMjUwMGY0MS4uMWRkNjljOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFybTkyMDBfdGltZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxcm05MjAwX3RpbWUuYwpAQCAtMTAxLDcgKzEwMSw2IEBACiAJLnJhdGluZwkJPSAxNTAsCiAJLnJlYWQJCT0gcmVhZF9jbGszMmssCiAJLm1hc2sJCT0gQ0xPQ0tTT1VSQ0VfTUFTSygyMCksCi0JLnNoaWZ0CQk9IDEwLAogCS5mbGFncwkJPSBDTE9DS19TT1VSQ0VfSVNfQ09OVElOVU9VUywKIH07CiAKQEAgLTIwMSw4ICsyMDAsNyBAQAogCWNsb2NrZXZlbnRzX3JlZ2lzdGVyX2RldmljZSgmY2xrZXZ0KTsKIAogCS8qIHJlZ2lzdGVyIGNsb2Nrc291cmNlICovCi0JY2xrMzJrLm11bHQgPSBjbG9ja3NvdXJjZV9oejJtdWx0KEFUOTFfU0xPV19DTE9DSywgY2xrMzJrLnNoaWZ0KTsKLQljbG9ja3NvdXJjZV9yZWdpc3RlcigmY2xrMzJrKTsKKwljbG9ja3NvdXJjZV9yZWdpc3Rlcl9oeigmY2xrMzJrLCBBVDkxX1NMT1dfQ0xPQ0spOwogfQogCiBzdHJ1Y3Qgc3lzX3RpbWVyIGF0OTFybTkyMDBfdGltZXIgPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNnhfdGltZS5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjZ4X3RpbWUuYwppbmRleCA2MDhhNjMyLi40YmE4NTQ5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNnhfdGltZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2eF90aW1lLmMKQEAgLTUxLDcgKzUxLDYgQEAKIAkubmFtZQkJPSAicGl0IiwKIAkucmF0aW5nCQk9IDE3NSwKIAkucmVhZAkJPSByZWFkX3BpdF9jbGssCi0JLnNoaWZ0CQk9IDIwLAogCS5mbGFncwkJPSBDTE9DS19TT1VSQ0VfSVNfQ09OVElOVU9VUywKIH07CiAKQEAgLTE2MywxMCArMTYyLDkgQEAKIAkgKiBSZWdpc3RlciBjbG9ja3NvdXJjZS4gIFRoZSBoaWdoIG9yZGVyIGJpdHMgb2YgUElWIGFyZSB1bnVzZWQsCiAJICogc28gdGhpcyBpc24ndCBhIDMyLWJpdCBjb3VudGVyIHVubGVzcyB3ZSBnZXQgY2xvY2tldmVudCBpcnFzLgogCSAqLwotCXBpdF9jbGsubXVsdCA9IGNsb2Nrc291cmNlX2h6Mm11bHQocGl0X3JhdGUsIHBpdF9jbGsuc2hpZnQpOwogCWJpdHMgPSAxMiAvKiBQSUNOVCAqLyArIGlsb2cyKHBpdF9jeWNsZSkgLyogUElWICovOwogCXBpdF9jbGsubWFzayA9IENMT0NLU09VUkNFX01BU0soYml0cyk7Ci0JY2xvY2tzb3VyY2VfcmVnaXN0ZXIoJnBpdF9jbGspOworCWNsb2Nrc291cmNlX3JlZ2lzdGVyX2h6KCZwaXRfY2xrLCBwaXRfcmF0ZSk7CiAKIAkvKiBTZXQgdXAgaXJxIGhhbmRsZXIgKi8KIAlzZXR1cF9pcnEoQVQ5MV9JRF9TWVMsICZhdDkxc2FtOTI2eF9waXRfaXJxKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYmNtcmluZy9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2Nsb2NrLmMKaW5kZXggMTRiYWZjMy4uYWQyMzdhNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2Nsb2NrLmMKQEAgLTIxLDEzICsyMSwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvY2xrZGV2Lmg+CiAjaW5jbHVkZSA8bWFjaC9jc3AvaHdfY2ZnLmg+CiAjaW5jbHVkZSA8bWFjaC9jc3AvY2hpcGNId19kZWYuaD4KICNpbmNsdWRlIDxtYWNoL2NzcC9jaGlwY0h3X3JlZy5oPgogI2luY2x1ZGUgPG1hY2gvY3NwL2NoaXBjSHdfaW5saW5lLmg+CiAKLSNpbmNsdWRlIDxhc20vY2xrZGV2Lmg+Ci0KICNpbmNsdWRlICJjbG9jay5oIgogCiAjZGVmaW5lIGNsa19pc19wcmltYXJ5KHgpICAgICAgICgoeCktPnR5cGUgJiBDTEtfVFlQRV9QUklNQVJZKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2NvcmUuYyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9jb3JlLmMKaW5kZXggZDNmOTU5ZS4uOGZjMjAzNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2NvcmUuYworKysgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvY29yZS5jCkBAIC0zMCwxMCArMzAsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9hbWJhL2J1cy5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsb2Nrc291cmNlLmg+CiAjaW5jbHVkZSA8bGludXgvY2xvY2tjaGlwcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsa2Rldi5oPgogCiAjaW5jbHVkZSA8bWFjaC9jc3AvbW1fYWRkci5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vY2xrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2FybV90aW1lci5oPgpAQCAtMjk0LDcgKzI5NCw2IEBACiAJLnJhdGluZyA9IDIwMCwKIAkucmVhZCA9IGJjbXJpbmdfZ2V0X2N5Y2xlc190aW1lcjEsCiAJLm1hc2sgPSBDTE9DS1NPVVJDRV9NQVNLKDMyKSwKLQkuc2hpZnQgPSAyMCwKIAkuZmxhZ3MgPSBDTE9DS19TT1VSQ0VfSVNfQ09OVElOVU9VUywKIH07CiAKQEAgLTMwMyw3ICszMDIsNiBAQAogCS5yYXRpbmcgPSAxMDAsCiAJLnJlYWQgPSBiY21yaW5nX2dldF9jeWNsZXNfdGltZXIzLAogCS5tYXNrID0gQ0xPQ0tTT1VSQ0VfTUFTSygzMiksCi0JLnNoaWZ0ID0gMjAsCiAJLmZsYWdzID0gQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVMsCiB9OwogCkBAIC0zMTYsMTAgKzMxNCw4IEBACiAJd3JpdGVsKFRJTUVSX0NUUkxfMzJCSVQgfCBUSU1FUl9DVFJMX0VOQUJMRSB8IFRJTUVSX0NUUkxfUEVSSU9ESUMsCiAJICAgICAgIFRJTUVSMV9WQV9CQVNFICsgVElNRVJfQ1RSTCk7CiAKLQljbG9ja3NvdXJjZV9iY21yaW5nX3RpbWVyMS5tdWx0ID0KLQkgICAgY2xvY2tzb3VyY2Vfa2h6Mm11bHQoVElNRVIxX0ZSRVFVRU5DWV9NSFogKiAxMDAwLAotCQkJCSBjbG9ja3NvdXJjZV9iY21yaW5nX3RpbWVyMS5zaGlmdCk7Ci0JY2xvY2tzb3VyY2VfcmVnaXN0ZXIoJmNsb2Nrc291cmNlX2JjbXJpbmdfdGltZXIxKTsKKwljbG9ja3NvdXJjZV9yZWdpc3Rlcl9raHooJmNsb2Nrc291cmNlX2JjbXJpbmdfdGltZXIxLAorCQkJCSBUSU1FUjFfRlJFUVVFTkNZX01IWiAqIDEwMDApOwogCiAJLyogc2V0dXAgdGltZXIzIGFzIGZyZWUtcnVubmluZyBjbG9ja3NvdXJjZSAqLwogCXdyaXRlbCgwLCBUSU1FUjNfVkFfQkFTRSArIFRJTUVSX0NUUkwpOwpAQCAtMzI4LDEwICszMjQsOCBAQAogCXdyaXRlbChUSU1FUl9DVFJMXzMyQklUIHwgVElNRVJfQ1RSTF9FTkFCTEUgfCBUSU1FUl9DVFJMX1BFUklPRElDLAogCSAgICAgICBUSU1FUjNfVkFfQkFTRSArIFRJTUVSX0NUUkwpOwogCi0JY2xvY2tzb3VyY2VfYmNtcmluZ190aW1lcjMubXVsdCA9Ci0JICAgIGNsb2Nrc291cmNlX2toejJtdWx0KFRJTUVSM19GUkVRVUVOQ1lfS0haLAotCQkJCSBjbG9ja3NvdXJjZV9iY21yaW5nX3RpbWVyMy5zaGlmdCk7Ci0JY2xvY2tzb3VyY2VfcmVnaXN0ZXIoJmNsb2Nrc291cmNlX2JjbXJpbmdfdGltZXIzKTsKKwljbG9ja3NvdXJjZV9yZWdpc3Rlcl9raHooJmNsb2Nrc291cmNlX2JjbXJpbmdfdGltZXIzLAorCQkJCSBUSU1FUjNfRlJFUVVFTkNZX0tIWik7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtY25zM3h4eC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1jbnMzeHh4L0tjb25maWcKaW5kZXggOWViZmNjNC4uMjliMTNmMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1jbnMzeHh4L0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1jbnMzeHh4L0tjb25maWcKQEAgLTMsNiArMyw3IEBACiAKIGNvbmZpZyBNQUNIX0NOUzM0MjBWQgogCWJvb2wgIlN1cHBvcnQgZm9yIENOUzM0MjAgVmFsaWRhdGlvbiBCb2FyZCIKKwlzZWxlY3QgTUlHSFRfSEFWRV9QQ0kKIAloZWxwCiAJICBJbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBDYXZpdW0gTmV0d29ya3MgQ05TMzQyMCBNUENvcmUgUGxhdGZvcm0KIAkgIEJhc2Vib2FyZC4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtY25zM3h4eC9jbnMzNDIwdmIuYyBiL2FyY2gvYXJtL21hY2gtY25zM3h4eC9jbnMzNDIwdmIuYwppbmRleCA5MGZlOWFiLi4wOGU1Yzg3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWNuczN4eHgvY25zMzQyMHZiLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1jbnMzeHh4L2NuczM0MjB2Yi5jCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfODI1MC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgpAQCAtMTA4LDEwICsxMDksNjMgQEAKIH0KIAogLyoKKyAqIFVTQgorICovCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGNuczN4eHhfdXNiX2VoY2lfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQgPSBDTlMzWFhYX1VTQl9CQVNFLAorCQkuZW5kICAgPSBDTlMzWFhYX1VTQl9CQVNFICsgU1pfMTZNIC0gMSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydCA9IElSUV9DTlMzWFhYX1VTQl9FSENJLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHU2NCBjbnMzeHh4X3VzYl9laGNpX2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY25zM3h4eF91c2JfZWhjaV9kZXZpY2UgPSB7CisJLm5hbWUgICAgICAgICAgPSAiY25zM3h4eC1laGNpIiwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUoY25zM3h4eF91c2JfZWhjaV9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSAgICAgID0gY25zM3h4eF91c2JfZWhjaV9yZXNvdXJjZXMsCisJLmRldiAgICAgICAgICAgPSB7CisJCS5kbWFfbWFzayAgICAgICAgICA9ICZjbnMzeHh4X3VzYl9laGNpX2RtYV9tYXNrLAorCQkuY29oZXJlbnRfZG1hX21hc2sgPSBETUFfQklUX01BU0soMzIpLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGNuczN4eHhfdXNiX29oY2lfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQgPSBDTlMzWFhYX1VTQl9PSENJX0JBU0UsCisJCS5lbmQgICA9IENOUzNYWFhfVVNCX09IQ0lfQkFTRSArIFNaXzE2TSAtIDEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQgPSBJUlFfQ05TM1hYWF9VU0JfT0hDSSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyB1NjQgY25zM3h4eF91c2Jfb2hjaV9kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMik7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNuczN4eHhfdXNiX29oY2lfZGV2aWNlID0geworCS5uYW1lICAgICAgICAgID0gImNuczN4eHgtb2hjaSIsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKGNuczN4eHhfdXNiX29oY2lfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UgICAgICA9IGNuczN4eHhfdXNiX29oY2lfcmVzb3VyY2VzLAorCS5kZXYgICAgICAgICAgID0geworCQkuZG1hX21hc2sgICAgICAgICAgPSAmY25zM3h4eF91c2Jfb2hjaV9kbWFfbWFzaywKKwkJLmNvaGVyZW50X2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKSwKKwl9LAorfTsKKworLyoKICAqIEluaXRpYWxpemF0aW9uCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpjbnMzNDIwX3BkZXZzW10gX19pbml0ZGF0YSA9IHsKIAkmY25zMzQyMF9ub3JfcGRldiwKKwkmY25zM3h4eF91c2JfZWhjaV9kZXZpY2UsCisJJmNuczN4eHhfdXNiX29oY2lfZGV2aWNlLAogfTsKIAogc3RhdGljIHZvaWQgX19pbml0IGNuczM0MjBfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1jbnMzeHh4L2NvcmUuYyBiL2FyY2gvYXJtL21hY2gtY25zM3h4eC9jb3JlLmMKaW5kZXggOWNhNGQ1OC4uZGEzMDA3OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1jbnMzeHh4L2NvcmUuYworKysgYi9hcmNoL2FybS9tYWNoLWNuczN4eHgvY29yZS5jCkBAIC02OSwxMyArNjksMTAgQEAKIH0KIAogLyogdXNlZCBieSBlbnRyeS1tYWNyby5TICovCi12b2lkIF9faW9tZW0gKmdpY19jcHVfYmFzZV9hZGRyOwotCiB2b2lkIF9faW5pdCBjbnMzeHh4X2luaXRfaXJxKHZvaWQpCiB7Ci0JZ2ljX2NwdV9iYXNlX2FkZHIgPSBfX2lvKENOUzNYWFhfVEMxMU1QX0dJQ19DUFVfQkFTRV9WSVJUKTsKLQlnaWNfZGlzdF9pbml0KDAsIF9faW8oQ05TM1hYWF9UQzExTVBfR0lDX0RJU1RfQkFTRV9WSVJUKSwgMjkpOwotCWdpY19jcHVfaW5pdCgwLCBnaWNfY3B1X2Jhc2VfYWRkcik7CisJZ2ljX2luaXQoMCwgMjksIF9faW8oQ05TM1hYWF9UQzExTVBfR0lDX0RJU1RfQkFTRV9WSVJUKSwKKwkJIF9faW8oQ05TM1hYWF9UQzExTVBfR0lDX0NQVV9CQVNFX1ZJUlQpKTsKIH0KIAogdm9pZCBjbnMzeHh4X3Bvd2VyX29mZih2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1jbnMzeHh4L2NvcmUuaCBiL2FyY2gvYXJtL21hY2gtY25zM3h4eC9jb3JlLmgKaW5kZXggNmIzM2VjMS4uZmZlYjNhOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1jbnMzeHh4L2NvcmUuaAorKysgYi9hcmNoL2FybS9tYWNoLWNuczN4eHgvY29yZS5oCkBAIC0xMSwxMyArMTEsMTAgQEAKICNpZm5kZWYgX19DTlMzWFhYX0NPUkVfSAogI2RlZmluZSBfX0NOUzNYWFhfQ09SRV9ICiAKLWV4dGVybiB2b2lkIF9faW9tZW0gKmdpY19jcHVfYmFzZV9hZGRyOwogZXh0ZXJuIHN0cnVjdCBzeXNfdGltZXIgY25zM3h4eF90aW1lcjsKIAogdm9pZCBfX2luaXQgY25zM3h4eF9tYXBfaW8odm9pZCk7CiB2b2lkIF9faW5pdCBjbnMzeHh4X2luaXRfaXJxKHZvaWQpOwogdm9pZCBjbnMzeHh4X3Bvd2VyX29mZih2b2lkKTsKLXZvaWQgY25zM3h4eF9wd3JfcG93ZXJfdXAodW5zaWduZWQgaW50IGJsb2NrKTsKLXZvaWQgY25zM3h4eF9wd3JfcG93ZXJfZG93bih1bnNpZ25lZCBpbnQgYmxvY2spOwogCiAjZW5kaWYgLyogX19DTlMzWFhYX0NPUkVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1jbnMzeHh4L2RldmljZXMuYyBiL2FyY2gvYXJtL21hY2gtY25zM3h4eC9kZXZpY2VzLmMKaW5kZXggNTBiNGQzMS4uNzlkMWZiMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1jbnMzeHh4L2RldmljZXMuYworKysgYi9hcmNoL2FybS9tYWNoLWNuczN4eHgvZGV2aWNlcy5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bWFjaC9jbnMzeHh4Lmg+CiAjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CisjaW5jbHVkZSA8bWFjaC9wbS5oPgogI2luY2x1ZGUgImNvcmUuaCIKICNpbmNsdWRlICJkZXZpY2VzLmgiCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtY25zM3h4eC9pbmNsdWRlL21hY2gvY25zM3h4eC5oIGIvYXJjaC9hcm0vbWFjaC1jbnMzeHh4L2luY2x1ZGUvbWFjaC9jbnMzeHh4LmgKaW5kZXggNmRiY2UxMy4uMTkxYzhlNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1jbnMzeHh4L2luY2x1ZGUvbWFjaC9jbnMzeHh4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1jbnMzeHh4L2luY2x1ZGUvbWFjaC9jbnMzeHh4LmgKQEAgLTE2NSw3ICsxNjUsNiBAQAogI2RlZmluZSBDTlMzWFhYX1VTQk9UR19CQVNFX1ZJUlQJCTB4RkZGMTUwMDAKIAogI2RlZmluZSBDTlMzWFhYX1VTQl9CQVNFCQkJMHg4MjAwMDAwMAkvKiBVU0IgSG9zdCBDb250cm9sICovCi0jZGVmaW5lIENOUzNYWFhfVVNCX0JBU0VfVklSVAkJCTB4RkZGMTYwMDAKIAogI2RlZmluZSBDTlMzWFhYX1NBVEEyX0JBU0UJCQkweDgzMDAwMDAwCS8qIFNBVEEgKi8KICNkZWZpbmUgQ05TM1hYWF9TQVRBMl9TSVpFCQkJU1pfMTZNCkBAIC0xODQsNyArMTgzLDYgQEAKICNkZWZpbmUgQ05TM1hYWF8yREdfQkFTRV9WSVJUCQkJMHhGRkYxQjAwMAogCiAjZGVmaW5lIENOUzNYWFhfVVNCX09IQ0lfQkFTRQkJCTB4ODgwMDAwMDAJLyogVVNCIE9IQ0kgKi8KLSNkZWZpbmUgQ05TM1hYWF9VU0JfT0hDSV9CQVNFX1ZJUlQJCTB4RkZGMUMwMDAKIAogI2RlZmluZSBDTlMzWFhYX0wyQ19CQVNFCQkJMHg5MjAwMDAwMAkvKiBMMiBDYWNoZSBDb250cm9sICovCiAjZGVmaW5lIENOUzNYWFhfTDJDX0JBU0VfVklSVAkJCTB4RkZGMjcwMDAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtY25zM3h4eC9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtY25zM3h4eC9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUwppbmRleCA1ZTFjNTU0Li42YmQ4M2VkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWNuczN4eHgvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1jbnMzeHh4L2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCkBAIC05LDc0ICs5LDEwIEBACiAgKi8KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vaGFyZHdhcmUvZ2ljLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2VudHJ5LW1hY3JvLWdpYy5TPgogCiAJCS5tYWNybwlkaXNhYmxlX2ZpcQogCQkuZW5kbQogCi0JCS5tYWNybyAgZ2V0X2lycW5yX3ByZWFtYmxlLCBiYXNlLCB0bXAKLQkJbGRyCVxiYXNlLCA9Z2ljX2NwdV9iYXNlX2FkZHIKLQkJbGRyCVxiYXNlLCBbXGJhc2VdCi0JCS5lbmRtCi0KIAkJLm1hY3JvICBhcmNoX3JldF90b191c2VyLCB0bXAxLCB0bXAyCiAJCS5lbmRtCi0KLQkJLyoKLQkJICogVGhlIGludGVycnVwdCBudW1iZXJpbmcgc2NoZW1lIGlzIGRlZmluZWQgaW4gdGhlCi0JCSAqIGludGVycnVwdCBjb250cm9sbGVyIHNwZWMuICBUbyB3aXQ6Ci0JCSAqCi0JCSAqIEludGVycnVwdHMgMC0xNSBhcmUgSVBJCi0JCSAqIDE2LTI4IGFyZSByZXNlcnZlZAotCQkgKiAyOS0zMSBhcmUgbG9jYWwuICBXZSBhbGxvdyAzMCB0byBiZSB1c2VkIGZvciB0aGUgd2F0Y2hkb2cuCi0JCSAqIDMyLTEwMjAgYXJlIGdsb2JhbAotCQkgKiAxMDIxLTEwMjIgYXJlIHJlc2VydmVkCi0JCSAqIDEwMjMgaXMgInNwdXJpb3VzIiAobm8gaW50ZXJydXB0KQotCQkgKgotCQkgKiBGb3Igbm93LCB3ZSBpZ25vcmUgYWxsIGxvY2FsIGludGVycnVwdHMgc28gb25seSByZXR1cm4gYW4gaW50ZXJydXB0IGlmIGl0J3MKLQkJICogYmV0d2VlbiAzMCBhbmQgMTAyMC4gIFRoZSB0ZXN0X2Zvcl9pcGkgcm91dGluZSBiZWxvdyB3aWxsIHBpY2sgdXAgb24gSVBJcy4KLQkJICoKLQkJICogQSBzaW1wbGUgcmVhZCBmcm9tIHRoZSBjb250cm9sbGVyIHdpbGwgdGVsbCB1cyB0aGUgbnVtYmVyIG9mIHRoZSBoaWdoZXN0Ci0gICAgICAgICAgICAgICAgICogcHJpb3JpdHkgZW5hYmxlZCBpbnRlcnJ1cHQuICBXZSB0aGVuIGp1c3QgbmVlZCB0byBjaGVjayB3aGV0aGVyIGl0IGlzIGluIHRoZQotCQkgKiB2YWxpZCByYW5nZSBmb3IgYW4gSVJRICgzMC0xMDIwIGluY2x1c2l2ZSkuCi0JCSAqLwotCi0JCS5tYWNybyAgZ2V0X2lycW5yX2FuZF9iYXNlLCBpcnFuciwgaXJxc3RhdCwgYmFzZSwgdG1wCi0KLQkJbGRyICAgICBcaXJxc3RhdCwgW1xiYXNlLCAjR0lDX0NQVV9JTlRBQ0tdIC8qIGJpdHMgMTItMTAgPSBzcmMgQ1BVLCA5LTAgPSBpbnQgIyAqLwotCi0JCWxkcglcdG1wLCA9MTAyMQotCi0JCWJpYyAgICAgXGlycW5yLCBcaXJxc3RhdCwgIzB4MWMwMAotCi0JCWNtcCAgICAgXGlycW5yLCAjMjkKLQkJY21wY2MJXGlycW5yLCBcaXJxbnIKLQkJY21wbmUJXGlycW5yLCBcdG1wCi0JCWNtcGNzCVxpcnFuciwgXGlycW5yCi0KLQkJLmVuZG0KLQotCQkvKiBXZSBhc3N1bWUgdGhhdCBpcnFzdGF0ICh0aGUgcmF3IHZhbHVlIG9mIHRoZSBJUlEgYWNrbm93bGVkZ2UKLQkJICogcmVnaXN0ZXIpIGlzIHByZXNlcnZlZCBmcm9tIHRoZSBtYWNybyBhYm92ZS4KLQkJICogSWYgdGhlcmUgaXMgYW4gSVBJLCB3ZSBpbW1lZGlhdGVseSBzaWduYWwgZW5kIG9mIGludGVycnVwdCBvbiB0aGUKLQkJICogY29udHJvbGxlciwgc2luY2UgdGhpcyByZXF1aXJlcyB0aGUgb3JpZ2luYWwgaXJxc3RhdCB2YWx1ZSB3aGljaAotCQkgKiB3ZSB3b24ndCBlYXNpbHkgYmUgYWJsZSB0byByZWNyZWF0ZSBsYXRlci4KLQkJICovCi0KLQkJLm1hY3JvIHRlc3RfZm9yX2lwaSwgaXJxbnIsIGlycXN0YXQsIGJhc2UsIHRtcAotCQliaWMJXGlycW5yLCBcaXJxc3RhdCwgIzB4MWMwMAotCQljbXAJXGlycW5yLCAjMTYKLQkJc3RyY2MJXGlycXN0YXQsIFtcYmFzZSwgI0dJQ19DUFVfRU9JXQotCQljbXBjcwlcaXJxbnIsIFxpcnFucgotCQkuZW5kbQotCi0JCS8qIEFzIGFib3ZlLCB0aGlzIGFzc3VtZXMgdGhhdCBpcnFzdGF0IGFuZCBiYXNlIGFyZSBwcmVzZXJ2ZWQuLiAqLwotCi0JCS5tYWNybyB0ZXN0X2Zvcl9sdGlycSwgaXJxbnIsIGlycXN0YXQsIGJhc2UsIHRtcAotCQliaWMJXGlycW5yLCBcaXJxc3RhdCwgIzB4MWMwMAotCQltb3YgCVx0bXAsICMwCi0JCWNtcAlcaXJxbnIsICMyOQotCQltb3ZlcQlcdG1wLCAjMQotCQlzdHJlcQlcaXJxc3RhdCwgW1xiYXNlLCAjR0lDX0NQVV9FT0ldCi0JCWNtcAlcdG1wLCAjMAotCQkuZW5kbQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1jbnMzeHh4L2luY2x1ZGUvbWFjaC9wbS5oIGIvYXJjaC9hcm0vbWFjaC1jbnMzeHh4L2luY2x1ZGUvbWFjaC9wbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlYWU3ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWNuczN4eHgvaW5jbHVkZS9tYWNoL3BtLmgKQEAgLTAsMCArMSwyMyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwIERlZXAgQmx1ZSBTb2x1dGlvbnMgTHRkCisgKiBDb3B5cmlnaHQgMjAwNCBBUk0gTGltaXRlZAorICogQ29weXJpZ2h0IDIwMDggQ2F2aXVtIE5ldHdvcmtzCisgKgorICogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIFZlcnNpb24gMiwgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19DTlMzWFhYX1BNX0gKKyNkZWZpbmUgX19DTlMzWFhYX1BNX0gKKworI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKwordm9pZCBjbnMzeHh4X3B3cl9jbGtfZW4odW5zaWduZWQgaW50IGJsb2NrKTsKK3ZvaWQgY25zM3h4eF9wd3JfY2xrX2Rpcyh1bnNpZ25lZCBpbnQgYmxvY2spOwordm9pZCBjbnMzeHh4X3B3cl9wb3dlcl91cCh1bnNpZ25lZCBpbnQgYmxvY2spOwordm9pZCBjbnMzeHh4X3B3cl9wb3dlcl9kb3duKHVuc2lnbmVkIGludCBibG9jayk7CisKK2V4dGVybiBhdG9taWNfdCB1c2JfcHdyX3JlZjsKKworI2VuZGlmIC8qIF9fQ05TM1hYWF9QTV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWNuczN4eHgvcG0uYyBiL2FyY2gvYXJtL21hY2gtY25zM3h4eC9wbS5jCmluZGV4IDM4ZTQ0NzAuLjVlNTc5NTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtY25zM3h4eC9wbS5jCisrKyBiL2FyY2gvYXJtL21hY2gtY25zM3h4eC9wbS5jCkBAIC02LDEwICs2LDE0IEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAjaW5jbHVkZSA8bWFjaC9zeXN0ZW0uaD4KICNpbmNsdWRlIDxtYWNoL2NuczN4eHguaD4KKyNpbmNsdWRlIDxtYWNoL3BtLmg+CiAKIHZvaWQgY25zM3h4eF9wd3JfY2xrX2VuKHVuc2lnbmVkIGludCBibG9jaykKIHsKQEAgLTE4LDYgKzIyLDE2IEBACiAJcmVnIHw9IChibG9jayAmIFBNX0NMS19HQVRFX1JFR19NQVNLKTsKIAlfX3Jhd193cml0ZWwocmVnLCBQTV9DTEtfR0FURV9SRUcpOwogfQorRVhQT1JUX1NZTUJPTChjbnMzeHh4X3B3cl9jbGtfZW4pOworCit2b2lkIGNuczN4eHhfcHdyX2Nsa19kaXModW5zaWduZWQgaW50IGJsb2NrKQoreworCXUzMiByZWcgPSBfX3Jhd19yZWFkbChQTV9DTEtfR0FURV9SRUcpOworCisJcmVnICY9IH4oYmxvY2sgJiBQTV9DTEtfR0FURV9SRUdfTUFTSyk7CisJX19yYXdfd3JpdGVsKHJlZywgUE1fQ0xLX0dBVEVfUkVHKTsKK30KK0VYUE9SVF9TWU1CT0woY25zM3h4eF9wd3JfY2xrX2Rpcyk7CiAKIHZvaWQgY25zM3h4eF9wd3JfcG93ZXJfdXAodW5zaWduZWQgaW50IGJsb2NrKQogewpAQCAtMjksNiArNDMsNyBAQAogCS8qIFdhaXQgZm9yIDMwMHVzIGZvciB0aGUgUExMIG91dHB1dCBjbG9jayBsb2NrZWQuICovCiAJdWRlbGF5KDMwMCk7CiB9OworRVhQT1JUX1NZTUJPTChjbnMzeHh4X3B3cl9wb3dlcl91cCk7CiAKIHZvaWQgY25zM3h4eF9wd3JfcG93ZXJfZG93bih1bnNpZ25lZCBpbnQgYmxvY2spCiB7CkBAIC0zOCw2ICs1Myw3IEBACiAJcmVnIHw9IChibG9jayAmIENOUzNYWFhfUFdSX1BMTF9BTEwpOwogCV9fcmF3X3dyaXRlbChyZWcsIFBNX1BMTF9ITV9QRF9DVFJMX1JFRyk7CiB9OworRVhQT1JUX1NZTUJPTChjbnMzeHh4X3B3cl9wb3dlcl9kb3duKTsKIAogc3RhdGljIHZvaWQgY25zM3h4eF9wd3Jfc29mdF9yc3RfZm9yY2UodW5zaWduZWQgaW50IGJsb2NrKQogewpAQCAtNTEsMTEgKzY3LDEzIEBACiAJCXJlZyAmPSB+KGJsb2NrICYgUE1fU09GVF9SU1RfUkVHX01BU0spOwogCX0gZWxzZSB7CiAJCXJlZyAmPSB+KGJsb2NrICYgUE1fU09GVF9SU1RfUkVHX01BU0spOworCQlfX3Jhd193cml0ZWwocmVnLCBQTV9TT0ZUX1JTVF9SRUcpOwogCQlyZWcgfD0gKGJsb2NrICYgUE1fU09GVF9SU1RfUkVHX01BU0spOwogCX0KIAogCV9fcmF3X3dyaXRlbChyZWcsIFBNX1NPRlRfUlNUX1JFRyk7CiB9CitFWFBPUlRfU1lNQk9MKGNuczN4eHhfcHdyX3NvZnRfcnN0X2ZvcmNlKTsKIAogdm9pZCBjbnMzeHh4X3B3cl9zb2Z0X3JzdCh1bnNpZ25lZCBpbnQgYmxvY2spCiB7CkBAIC02OSw2ICs4Nyw3IEBACiAJfQogCWNuczN4eHhfcHdyX3NvZnRfcnN0X2ZvcmNlKGJsb2NrKTsKIH0KK0VYUE9SVF9TWU1CT0woY25zM3h4eF9wd3Jfc29mdF9yc3QpOwogCiB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpCiB7CkBAIC05OSwzICsxMTgsNyBAQAogCiAJcmV0dXJuIGNwdTsKIH0KK0VYUE9SVF9TWU1CT0woY25zM3h4eF9jcHVfY2xvY2spOworCithdG9taWNfdCB1c2JfcHdyX3JlZiA9IEFUT01JQ19JTklUKDApOworRVhQT1JUX1NZTUJPTCh1c2JfcHdyX3JlZik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9LY29uZmlnCmluZGV4IGI3N2I4NjAuLjMyZjE0NzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9LY29uZmlnCkBAIC02MSw2ICs2MSw4IEBACiAJYm9vbCAiVEkgRE02NDR4IEVWTSIKIAlkZWZhdWx0IEFSQ0hfREFWSU5DSV9ETTY0NHgKIAlkZXBlbmRzIG9uIEFSQ0hfREFWSU5DSV9ETTY0NHgKKwlzZWxlY3QgTUlTQ19ERVZJQ0VTCisJc2VsZWN0IEVFUFJPTV9BVDI0CiAJaGVscAogCSAgQ29uZmlndXJlIHRoaXMgb3B0aW9uIHRvIHNwZWNpZnkgdGhlIHdoZXRoZXIgdGhlIGJvYXJkIHVzZWQKIAkgIGZvciBkZXZlbG9wbWVudCBpcyBhIERNNjQ0eCBFVk0KQEAgLTY4LDYgKzcwLDggQEAKIGNvbmZpZyBNQUNIX1NGRlNEUgogCWJvb2wgIkx5cnRlY2ggU0ZGU0RSIgogCWRlcGVuZHMgb24gQVJDSF9EQVZJTkNJX0RNNjQ0eAorCXNlbGVjdCBNSVNDX0RFVklDRVMKKwlzZWxlY3QgRUVQUk9NX0FUMjQKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIHNlbGVjdCB0aGUgTHlydGVjaCBTbWFsbCBGb3JtIEZhY3RvcgogCSAgU29mdHdhcmUgRGVmaW5lZCBSYWRpbyAoU0ZGU0RSKSBib2FyZC4KQEAgLTk5LDYgKzEwMyw4IEBACiAJZGVmYXVsdCBBUkNIX0RBVklOQ0lfRE02NDZ4CiAJZGVwZW5kcyBvbiBBUkNIX0RBVklOQ0lfRE02NDZ4CiAJc2VsZWN0IE1BQ0hfREFWSU5DSV9ETTY0NjdURVZNCisJc2VsZWN0IE1JU0NfREVWSUNFUworCXNlbGVjdCBFRVBST01fQVQyNAogCWhlbHAKIAkgIENvbmZpZ3VyZSB0aGlzIG9wdGlvbiB0byBzcGVjaWZ5IHRoZSB3aGV0aGVyIHRoZSBib2FyZCB1c2VkCiAJICBmb3IgZGV2ZWxvcG1lbnQgaXMgYSBETTY0NjcgRVZNCkBAIC0xMTAsNiArMTE2LDggQEAKIAlib29sICJUSSBETTM2NSBFVk0iCiAJZGVmYXVsdCBBUkNIX0RBVklOQ0lfRE0zNjUKIAlkZXBlbmRzIG9uIEFSQ0hfREFWSU5DSV9ETTM2NQorCXNlbGVjdCBNSVNDX0RFVklDRVMKKwlzZWxlY3QgRUVQUk9NX0FUMjQKIAloZWxwCiAJICBDb25maWd1cmUgdGhpcyBvcHRpb24gdG8gc3BlY2lmeSB3aGV0aGVyIHRoZSBib2FyZCB1c2VkCiAJICBmb3IgZGV2ZWxvcG1lbnQgaXMgYSBETTM2NSBFVk0KQEAgLTExOSw2ICsxMjcsOCBAQAogCWRlZmF1bHQgQVJDSF9EQVZJTkNJX0RBODMwCiAJZGVwZW5kcyBvbiBBUkNIX0RBVklOQ0lfREE4MzAKIAlzZWxlY3QgR1BJT19QQ0Y4NTdYCisJc2VsZWN0IE1JU0NfREVWSUNFUworCXNlbGVjdCBFRVBST01fQVQyNAogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gc2VsZWN0IHRoZSBUSSBEQTgzMC9PTUFQLUwxMzcvQU0xN3ggRXZhbHVhdGlvbiBNb2R1bGUuCiAKQEAgLTE0OCw3ICsxNTgsNiBAQAogCWJvb2wgIlRJIERBODUwL09NQVAtTDEzOC9BTTE4eCBSZWZlcmVuY2UgUGxhdGZvcm0iCiAJZGVmYXVsdCBBUkNIX0RBVklOQ0lfREE4NTAKIAlkZXBlbmRzIG9uIEFSQ0hfREFWSU5DSV9EQTg1MAotCXNlbGVjdCBHUElPX1BDQTk1M1gKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIHNlbGVjdCB0aGUgVEkgREE4NTAvT01BUC1MMTM4L0FNMTh4IEV2YWx1YXRpb24gTW9kdWxlLgogCkBAIC0xNzgsNiArMTg3LDEyIEBACiAKIGVuZGNob2ljZQogCitjb25maWcgR1BJT19QQ0E5NTNYCisJZGVmYXVsdCBNQUNIX0RBVklOQ0lfREE4NTBfRVZNCisKK2NvbmZpZyBLRVlCT0FSRF9HUElPX1BPTExFRAorCWRlZmF1bHQgTUFDSF9EQVZJTkNJX0RBODUwX0VWTQorCiBjb25maWcgTUFDSF9UTkVUVjEwN1gKIAlib29sICJUSSBUTkVUVjEwN1ggUmVmZXJlbmNlIFBsYXRmb3JtIgogCWRlZmF1bHQgQVJDSF9EQVZJTkNJX1RORVRWMTA3WApAQCAtMTg4LDYgKzIwMyw4IEBACiBjb25maWcgTUFDSF9NSVRZT01BUEwxMzgKIAlib29sICJDcml0aWNhbCBMaW5rIE1pdHlEU1AtTDEzOC9NaXR5QVJNLTE4MDggU29NIgogCWRlcGVuZHMgb24gQVJDSF9EQVZJTkNJX0RBODUwCisJc2VsZWN0IE1JU0NfREVWSUNFUworCXNlbGVjdCBFRVBST01fQVQyNAogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gc2VsZWN0IHRoZSBDcml0aWNhbCBMaW5rIE1pdHlEU1AtTDEzOC9NaXR5QVJNLTE4MDgKIAkgIFN5c3RlbSBvbiBNb2R1bGUuICBJbmZvcm1hdGlvbiBvbiB0aGlzIFNvTSBtYXkgYmUgZm91bmQgYXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9hZW1pZi5jIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2FlbWlmLmMKaW5kZXggOWMzZjUwMC4uMWNlNzBhOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2FlbWlmLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2FlbWlmLmMKQEAgLTkwLDcgKzkwLDcgQEAKIAkJCQkJdm9pZCBfX2lvbWVtICpiYXNlLCB1bnNpZ25lZCBjcykKIHsKIAl1bnNpZ25lZCBzZXQsIHZhbDsKLQl1bnNpZ25lZCB0YSwgcmhvbGQsIHJzdHJvYmUsIHJzZXR1cCwgd2hvbGQsIHdzdHJvYmUsIHdzZXR1cDsKKwlpbnQgdGEsIHJob2xkLCByc3Ryb2JlLCByc2V0dXAsIHdob2xkLCB3c3Ryb2JlLCB3c2V0dXA7CiAJdW5zaWduZWQgb2Zmc2V0ID0gQTFDUl9PRkZTRVQgKyBjcyAqIDQ7CiAJc3RydWN0IGNsayAqYWVtaWZfY2xrOwogCXVuc2lnbmVkIGxvbmcgY2xrcmF0ZTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1kYTg1MC1ldm0uYyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1kYTg1MC1ldm0uYwppbmRleCBjNmUxMWM2Li5iMDFmYjJhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtZGE4NTAtZXZtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLWRhODUwLWV2bS5jCkBAIC0xNyw4ICsxNywxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy9hdDI0Lmg+CiAjaW5jbHVkZSA8bGludXgvaTJjL3BjYTk1M3guaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPGxpbnV4L21mZC90cHM2NTA3eC5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvX2tleXMuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KQEAgLTI2NiwzNCArMjY4LDExNSBAQAogCXN0cnVjdCBkYXZpbmNpX3NvY19pbmZvICpzb2NfaW5mbyA9ICZkYXZpbmNpX3NvY19pbmZvOwogCiAJc29jX2luZm8tPmVtYWNfcGRhdGEtPnJtaWlfZW4gPSAxOwotCWdwaW9fc2V0X3ZhbHVlKHJtaWlfc2VsLCAwKTsKKwlncGlvX3NldF92YWx1ZV9jYW5zbGVlcChybWlpX3NlbCwgMCk7CiB9CiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIGRhODUwX2V2bV9zZXR1cF9lbWFjX3JtaWkoaW50IHJtaWlfc2VsKSB7IH0KICNlbmRpZgogCisKKyNkZWZpbmUgREE4NTBfS0VZU19ERUJPVU5DRV9NUwkxMAorLyoKKyAqIEF0IDIwMG1zIHBvbGxpbmcgaW50ZXJ2YWwgaXQgaXMgcG9zc2libGUgdG8gbWlzcyBhbgorICogZXZlbnQgYnkgdGFwcGluZyB2ZXJ5IGxpZ2h0bHkgb24gdGhlIHB1c2ggYnV0dG9uIGJ1dCBtb3N0CisgKiBwdXNoZXMgZG8gcmVzdWx0IGluIGFuIGV2ZW50OyBsb25nZXIgaW50ZXJ2YWxzIHJlcXVpcmUgdGhlCisgKiB1c2VyIHRvIGhvbGQgdGhlIGJ1dHRvbiB3aGVyZWFzIHNob3J0ZXIgaW50ZXJ2YWxzIHJlcXVpcmUKKyAqIG1vcmUgQ1BVIHRpbWUgZm9yIHBvbGxpbmcuCisgKi8KKyNkZWZpbmUgREE4NTBfR1BJT19LRVlTX1BPTExfTVMJMjAwCisKK2VudW0gZGE4NTBfZXZtX3VpX2V4cF9waW5zIHsKKwlEQTg1MF9FVk1fVUlfRVhQX1NFTF9DID0gNSwKKwlEQTg1MF9FVk1fVUlfRVhQX1NFTF9CLAorCURBODUwX0VWTV9VSV9FWFBfU0VMX0EsCisJREE4NTBfRVZNX1VJX0VYUF9QQjgsCisJREE4NTBfRVZNX1VJX0VYUF9QQjcsCisJREE4NTBfRVZNX1VJX0VYUF9QQjYsCisJREE4NTBfRVZNX1VJX0VYUF9QQjUsCisJREE4NTBfRVZNX1VJX0VYUF9QQjQsCisJREE4NTBfRVZNX1VJX0VYUF9QQjMsCisJREE4NTBfRVZNX1VJX0VYUF9QQjIsCisJREE4NTBfRVZNX1VJX0VYUF9QQjEsCit9OworCitzdGF0aWMgY29uc3QgY2hhciBjb25zdCAqZGE4NTBfZXZtX3VpX2V4cFtdID0geworCVtEQTg1MF9FVk1fVUlfRVhQX1NFTF9DXSAgICAgICAgPSAic2VsX2MiLAorCVtEQTg1MF9FVk1fVUlfRVhQX1NFTF9CXSAgICAgICAgPSAic2VsX2IiLAorCVtEQTg1MF9FVk1fVUlfRVhQX1NFTF9BXSAgICAgICAgPSAic2VsX2EiLAorCVtEQTg1MF9FVk1fVUlfRVhQX1BCOF0gICAgICAgICAgPSAicGI4IiwKKwlbREE4NTBfRVZNX1VJX0VYUF9QQjddICAgICAgICAgID0gInBiNyIsCisJW0RBODUwX0VWTV9VSV9FWFBfUEI2XSAgICAgICAgICA9ICJwYjYiLAorCVtEQTg1MF9FVk1fVUlfRVhQX1BCNV0gICAgICAgICAgPSAicGI1IiwKKwlbREE4NTBfRVZNX1VJX0VYUF9QQjRdICAgICAgICAgID0gInBiNCIsCisJW0RBODUwX0VWTV9VSV9FWFBfUEIzXSAgICAgICAgICA9ICJwYjMiLAorCVtEQTg1MF9FVk1fVUlfRVhQX1BCMl0gICAgICAgICAgPSAicGIyIiwKKwlbREE4NTBfRVZNX1VJX0VYUF9QQjFdICAgICAgICAgID0gInBiMSIsCit9OworCisjZGVmaW5lIERBODUwX05fVUlfUEIJCTgKKworc3RhdGljIHN0cnVjdCBncGlvX2tleXNfYnV0dG9uIGRhODUwX2V2bV91aV9rZXlzW10gPSB7CisJWzAgLi4uIERBODUwX05fVUlfUEIgLSAxXSA9IHsKKwkJLnR5cGUJCQk9IEVWX0tFWSwKKwkJLmFjdGl2ZV9sb3cJCT0gMSwKKwkJLndha2V1cAkJCT0gMCwKKwkJLmRlYm91bmNlX2ludGVydmFsCT0gREE4NTBfS0VZU19ERUJPVU5DRV9NUywKKwkJLmNvZGUJCQk9IC0xLCAvKiBhc3NpZ25lZCBhdCBydW50aW1lICovCisJCS5ncGlvCQkJPSAtMSwgLyogYXNzaWduZWQgYXQgcnVudGltZSAqLworCQkuZGVzYwkJCT0gTlVMTCwgLyogYXNzaWduZWQgYXQgcnVudGltZSAqLworCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fa2V5c19wbGF0Zm9ybV9kYXRhIGRhODUwX2V2bV91aV9rZXlzX3BkYXRhID0geworCS5idXR0b25zID0gZGE4NTBfZXZtX3VpX2tleXMsCisJLm5idXR0b25zID0gQVJSQVlfU0laRShkYTg1MF9ldm1fdWlfa2V5cyksCisJLnBvbGxfaW50ZXJ2YWwgPSBEQTg1MF9HUElPX0tFWVNfUE9MTF9NUywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGRhODUwX2V2bV91aV9rZXlzX2RldmljZSA9IHsKKwkubmFtZSA9ICJncGlvLWtleXMtcG9sbGVkIiwKKwkuaWQgPSAwLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJmRhODUwX2V2bV91aV9rZXlzX3BkYXRhCisJfSwKK307CisKK3N0YXRpYyB2b2lkIGRhODUwX2V2bV91aV9rZXlzX2luaXQodW5zaWduZWQgZ3BpbykKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgZ3Bpb19rZXlzX2J1dHRvbiAqYnV0dG9uOworCisJZm9yIChpID0gMDsgaSA8IERBODUwX05fVUlfUEI7IGkrKykgeworCQlidXR0b24gPSAmZGE4NTBfZXZtX3VpX2tleXNbaV07CisJCWJ1dHRvbi0+Y29kZSA9IEtFWV9GOCAtIGk7CisJCWJ1dHRvbi0+ZGVzYyA9IChjaGFyICopCisJCQkJZGE4NTBfZXZtX3VpX2V4cFtEQTg1MF9FVk1fVUlfRVhQX1BCOCArIGldOworCQlidXR0b24tPmdwaW8gPSBncGlvICsgREE4NTBfRVZNX1VJX0VYUF9QQjggKyBpOworCX0KK30KKwogc3RhdGljIGludCBkYTg1MF9ldm1fdWlfZXhwYW5kZXJfc2V0dXAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgZ3BpbywKIAkJCQkJCXVuc2lnbmVkIG5ncGlvLCB2b2lkICpjKQogewogCWludCBzZWxfYSwgc2VsX2IsIHNlbF9jLCByZXQ7CiAKLQlzZWxfYSA9IGdwaW8gKyA3OwotCXNlbF9iID0gZ3BpbyArIDY7Ci0Jc2VsX2MgPSBncGlvICsgNTsKKwlzZWxfYSA9IGdwaW8gKyBEQTg1MF9FVk1fVUlfRVhQX1NFTF9BOworCXNlbF9iID0gZ3BpbyArIERBODUwX0VWTV9VSV9FWFBfU0VMX0I7CisJc2VsX2MgPSBncGlvICsgREE4NTBfRVZNX1VJX0VYUF9TRUxfQzsKIAotCXJldCA9IGdwaW9fcmVxdWVzdChzZWxfYSwgInNlbF9hIik7CisJcmV0ID0gZ3Bpb19yZXF1ZXN0KHNlbF9hLCBkYTg1MF9ldm1fdWlfZXhwW0RBODUwX0VWTV9VSV9FWFBfU0VMX0FdKTsKIAlpZiAocmV0KSB7CiAJCXByX3dhcm5pbmcoIkNhbm5vdCBvcGVuIFVJIGV4cGFuZGVyIHBpbiAlZFxuIiwgc2VsX2EpOwogCQlnb3RvIGV4cF9zZXR1cF9zZWxhX2ZhaWw7CiAJfQogCi0JcmV0ID0gZ3Bpb19yZXF1ZXN0KHNlbF9iLCAic2VsX2IiKTsKKwlyZXQgPSBncGlvX3JlcXVlc3Qoc2VsX2IsIGRhODUwX2V2bV91aV9leHBbREE4NTBfRVZNX1VJX0VYUF9TRUxfQl0pOwogCWlmIChyZXQpIHsKIAkJcHJfd2FybmluZygiQ2Fubm90IG9wZW4gVUkgZXhwYW5kZXIgcGluICVkXG4iLCBzZWxfYik7CiAJCWdvdG8gZXhwX3NldHVwX3NlbGJfZmFpbDsKIAl9CiAKLQlyZXQgPSBncGlvX3JlcXVlc3Qoc2VsX2MsICJzZWxfYyIpOworCXJldCA9IGdwaW9fcmVxdWVzdChzZWxfYywgZGE4NTBfZXZtX3VpX2V4cFtEQTg1MF9FVk1fVUlfRVhQX1NFTF9DXSk7CiAJaWYgKHJldCkgewogCQlwcl93YXJuaW5nKCJDYW5ub3Qgb3BlbiBVSSBleHBhbmRlciBwaW4gJWRcbiIsIHNlbF9jKTsKIAkJZ290byBleHBfc2V0dXBfc2VsY19mYWlsOwpAQCAtMzA0LDYgKzM4NywxMyBAQAogCWdwaW9fZGlyZWN0aW9uX291dHB1dChzZWxfYiwgMSk7CiAJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHNlbF9jLCAxKTsKIAorCWRhODUwX2V2bV91aV9rZXlzX2luaXQoZ3Bpbyk7CisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZkYTg1MF9ldm1fdWlfa2V5c19kZXZpY2UpOworCWlmIChyZXQpIHsKKwkJcHJfd2FybmluZygiQ291bGQgbm90IHJlZ2lzdGVyIFVJIEdQSU8gZXhwYW5kZXIgcHVzaC1idXR0b25zIik7CisJCWdvdG8gZXhwX3NldHVwX2tleXNfZmFpbDsKKwl9CisKIAl1aV9jYXJkX2RldGVjdGVkID0gMTsKIAlwcl9pbmZvKCJEQTg1MC9PTUFQLUwxMzggRVZNIFVJIGNhcmQgZGV0ZWN0ZWRcbiIpOwogCkBAIC0zMTMsNiArNDAzLDggQEAKIAogCXJldHVybiAwOwogCitleHBfc2V0dXBfa2V5c19mYWlsOgorCWdwaW9fZnJlZShzZWxfYyk7CiBleHBfc2V0dXBfc2VsY19mYWlsOgogCWdwaW9fZnJlZShzZWxfYik7CiBleHBfc2V0dXBfc2VsYl9mYWlsOgpAQCAtMzI0LDE0ICs0MTYsMTkyIEBACiBzdGF0aWMgaW50IGRhODUwX2V2bV91aV9leHBhbmRlcl90ZWFyZG93bihzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJCQl1bnNpZ25lZCBncGlvLCB1bnNpZ25lZCBuZ3Bpbywgdm9pZCAqYykKIHsKLQkvKiBkZXNlbGVjdCBhbGwgZnVuY3Rpb25hbGl0aWVzICovCi0JZ3Bpb19zZXRfdmFsdWUoZ3BpbyArIDUsIDEpOwotCWdwaW9fc2V0X3ZhbHVlKGdwaW8gKyA2LCAxKTsKLQlncGlvX3NldF92YWx1ZShncGlvICsgNywgMSk7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoJmRhODUwX2V2bV91aV9rZXlzX2RldmljZSk7CiAKLQlncGlvX2ZyZWUoZ3BpbyArIDUpOwotCWdwaW9fZnJlZShncGlvICsgNik7Ci0JZ3Bpb19mcmVlKGdwaW8gKyA3KTsKKwkvKiBkZXNlbGVjdCBhbGwgZnVuY3Rpb25hbGl0aWVzICovCisJZ3Bpb19zZXRfdmFsdWVfY2Fuc2xlZXAoZ3BpbyArIERBODUwX0VWTV9VSV9FWFBfU0VMX0MsIDEpOworCWdwaW9fc2V0X3ZhbHVlX2NhbnNsZWVwKGdwaW8gKyBEQTg1MF9FVk1fVUlfRVhQX1NFTF9CLCAxKTsKKwlncGlvX3NldF92YWx1ZV9jYW5zbGVlcChncGlvICsgREE4NTBfRVZNX1VJX0VYUF9TRUxfQSwgMSk7CisKKwlncGlvX2ZyZWUoZ3BpbyArIERBODUwX0VWTV9VSV9FWFBfU0VMX0MpOworCWdwaW9fZnJlZShncGlvICsgREE4NTBfRVZNX1VJX0VYUF9TRUxfQik7CisJZ3Bpb19mcmVlKGdwaW8gKyBEQTg1MF9FVk1fVUlfRVhQX1NFTF9BKTsKKworCXJldHVybiAwOworfQorCisvKiBhc3NpZ24gdGhlIGJhc2Vib2FyZCBleHBhbmRlcidzIEdQSU9zIGFmdGVyIHRoZSBVSSBib2FyZCdzICovCisjZGVmaW5lIERBODUwX1VJX0VYUEFOREVSX05fR1BJT1MgQVJSQVlfU0laRShkYTg1MF9ldm1fdWlfZXhwKQorI2RlZmluZSBEQTg1MF9CQl9FWFBBTkRFUl9HUElPX0JBU0UgKERBVklOQ0lfTl9HUElPICsgREE4NTBfVUlfRVhQQU5ERVJfTl9HUElPUykKKworZW51bSBkYTg1MF9ldm1fYmJfZXhwX3BpbnMgeworCURBODUwX0VWTV9CQl9FWFBfREVFUF9TTEVFUF9FTiA9IDAsCisJREE4NTBfRVZNX0JCX0VYUF9TV19SU1QsCisJREE4NTBfRVZNX0JCX0VYUF9UUF8yMywKKwlEQTg1MF9FVk1fQkJfRVhQX1RQXzIyLAorCURBODUwX0VWTV9CQl9FWFBfVFBfMjEsCisJREE4NTBfRVZNX0JCX0VYUF9VU0VSX1BCMSwKKwlEQTg1MF9FVk1fQkJfRVhQX1VTRVJfTEVEMiwKKwlEQTg1MF9FVk1fQkJfRVhQX1VTRVJfTEVEMSwKKwlEQTg1MF9FVk1fQkJfRVhQX1VTRVJfU1cxLAorCURBODUwX0VWTV9CQl9FWFBfVVNFUl9TVzIsCisJREE4NTBfRVZNX0JCX0VYUF9VU0VSX1NXMywKKwlEQTg1MF9FVk1fQkJfRVhQX1VTRVJfU1c0LAorCURBODUwX0VWTV9CQl9FWFBfVVNFUl9TVzUsCisJREE4NTBfRVZNX0JCX0VYUF9VU0VSX1NXNiwKKwlEQTg1MF9FVk1fQkJfRVhQX1VTRVJfU1c3LAorCURBODUwX0VWTV9CQl9FWFBfVVNFUl9TVzgKK307CisKK3N0YXRpYyBjb25zdCBjaGFyIGNvbnN0ICpkYTg1MF9ldm1fYmJfZXhwW10gPSB7CisJW0RBODUwX0VWTV9CQl9FWFBfREVFUF9TTEVFUF9FTl0JPSAiZGVlcF9zbGVlcF9lbiIsCisJW0RBODUwX0VWTV9CQl9FWFBfU1dfUlNUXQkJPSAic3dfcnN0IiwKKwlbREE4NTBfRVZNX0JCX0VYUF9UUF8yM10JCT0gInRwXzIzIiwKKwlbREE4NTBfRVZNX0JCX0VYUF9UUF8yMl0JCT0gInRwXzIyIiwKKwlbREE4NTBfRVZNX0JCX0VYUF9UUF8yMV0JCT0gInRwXzIxIiwKKwlbREE4NTBfRVZNX0JCX0VYUF9VU0VSX1BCMV0JCT0gInVzZXJfcGIxIiwKKwlbREE4NTBfRVZNX0JCX0VYUF9VU0VSX0xFRDJdCQk9ICJ1c2VyX2xlZDIiLAorCVtEQTg1MF9FVk1fQkJfRVhQX1VTRVJfTEVEMV0JCT0gInVzZXJfbGVkMSIsCisJW0RBODUwX0VWTV9CQl9FWFBfVVNFUl9TVzFdCQk9ICJ1c2VyX3N3MSIsCisJW0RBODUwX0VWTV9CQl9FWFBfVVNFUl9TVzJdCQk9ICJ1c2VyX3N3MiIsCisJW0RBODUwX0VWTV9CQl9FWFBfVVNFUl9TVzNdCQk9ICJ1c2VyX3N3MyIsCisJW0RBODUwX0VWTV9CQl9FWFBfVVNFUl9TVzRdCQk9ICJ1c2VyX3N3NCIsCisJW0RBODUwX0VWTV9CQl9FWFBfVVNFUl9TVzVdCQk9ICJ1c2VyX3N3NSIsCisJW0RBODUwX0VWTV9CQl9FWFBfVVNFUl9TVzZdCQk9ICJ1c2VyX3N3NiIsCisJW0RBODUwX0VWTV9CQl9FWFBfVVNFUl9TVzddCQk9ICJ1c2VyX3N3NyIsCisJW0RBODUwX0VWTV9CQl9FWFBfVVNFUl9TVzhdCQk9ICJ1c2VyX3N3OCIsCit9OworCisjZGVmaW5lIERBODUwX05fQkJfVVNFUl9TVwk4CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX2J1dHRvbiBkYTg1MF9ldm1fYmJfa2V5c1tdID0geworCVswXSA9IHsKKwkJLnR5cGUJCQk9IEVWX0tFWSwKKwkJLmFjdGl2ZV9sb3cJCT0gMSwKKwkJLndha2V1cAkJCT0gMCwKKwkJLmRlYm91bmNlX2ludGVydmFsCT0gREE4NTBfS0VZU19ERUJPVU5DRV9NUywKKwkJLmNvZGUJCQk9IEtFWV9QUk9HMSwKKwkJLmRlc2MJCQk9IE5VTEwsIC8qIGFzc2lnbmVkIGF0IHJ1bnRpbWUgKi8KKwkJLmdwaW8JCQk9IC0xLCAvKiBhc3NpZ25lZCBhdCBydW50aW1lICovCisJfSwKKwlbMSAuLi4gREE4NTBfTl9CQl9VU0VSX1NXXSA9IHsKKwkJLnR5cGUJCQk9IEVWX1NXLAorCQkuYWN0aXZlX2xvdwkJPSAxLAorCQkud2FrZXVwCQkJPSAwLAorCQkuZGVib3VuY2VfaW50ZXJ2YWwJPSBEQTg1MF9LRVlTX0RFQk9VTkNFX01TLAorCQkuY29kZQkJCT0gLTEsIC8qIGFzc2lnbmVkIGF0IHJ1bnRpbWUgKi8KKwkJLmRlc2MJCQk9IE5VTEwsIC8qIGFzc2lnbmVkIGF0IHJ1bnRpbWUgKi8KKwkJLmdwaW8JCQk9IC0xLCAvKiBhc3NpZ25lZCBhdCBydW50aW1lICovCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX3BsYXRmb3JtX2RhdGEgZGE4NTBfZXZtX2JiX2tleXNfcGRhdGEgPSB7CisJLmJ1dHRvbnMgPSBkYTg1MF9ldm1fYmJfa2V5cywKKwkubmJ1dHRvbnMgPSBBUlJBWV9TSVpFKGRhODUwX2V2bV9iYl9rZXlzKSwKKwkucG9sbF9pbnRlcnZhbCA9IERBODUwX0dQSU9fS0VZU19QT0xMX01TLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZGE4NTBfZXZtX2JiX2tleXNfZGV2aWNlID0geworCS5uYW1lID0gImdwaW8ta2V5cy1wb2xsZWQiLAorCS5pZCA9IDEsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmZGE4NTBfZXZtX2JiX2tleXNfcGRhdGEKKwl9LAorfTsKKworc3RhdGljIHZvaWQgZGE4NTBfZXZtX2JiX2tleXNfaW5pdCh1bnNpZ25lZCBncGlvKQoreworCWludCBpOworCXN0cnVjdCBncGlvX2tleXNfYnV0dG9uICpidXR0b247CisKKwlidXR0b24gPSAmZGE4NTBfZXZtX2JiX2tleXNbMF07CisJYnV0dG9uLT5kZXNjID0gKGNoYXIgKikKKwkJZGE4NTBfZXZtX2JiX2V4cFtEQTg1MF9FVk1fQkJfRVhQX1VTRVJfUEIxXTsKKwlidXR0b24tPmdwaW8gPSBncGlvICsgREE4NTBfRVZNX0JCX0VYUF9VU0VSX1BCMTsKKworCWZvciAoaSA9IDA7IGkgPCBEQTg1MF9OX0JCX1VTRVJfU1c7IGkrKykgeworCQlidXR0b24gPSAmZGE4NTBfZXZtX2JiX2tleXNbaSArIDFdOworCQlidXR0b24tPmNvZGUgPSBTV19MSUQgKyBpOworCQlidXR0b24tPmRlc2MgPSAoY2hhciAqKQorCQkJCWRhODUwX2V2bV9iYl9leHBbREE4NTBfRVZNX0JCX0VYUF9VU0VSX1NXMSArIGldOworCQlidXR0b24tPmdwaW8gPSBncGlvICsgREE4NTBfRVZNX0JCX0VYUF9VU0VSX1NXMSArIGk7CisJfQorfQorCisjZGVmaW5lIERBODUwX05fQkJfVVNFUl9MRUQJMgorCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkIGRhODUwX2V2bV9iYl9sZWRzW10gPSB7CisJWzAgLi4uIERBODUwX05fQkJfVVNFUl9MRUQgLSAxXSA9IHsKKwkJLmFjdGl2ZV9sb3cgPSAxLAorCQkuZ3BpbyA9IC0xLCAvKiBhc3NpZ25lZCBhdCBydW50aW1lICovCisJCS5uYW1lID0gTlVMTCwgLyogYXNzaWduZWQgYXQgcnVudGltZSAqLworCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkX3BsYXRmb3JtX2RhdGEgZGE4NTBfZXZtX2JiX2xlZHNfcGRhdGEgPSB7CisJLmxlZHMgPSBkYTg1MF9ldm1fYmJfbGVkcywKKwkubnVtX2xlZHMgPSBBUlJBWV9TSVpFKGRhODUwX2V2bV9iYl9sZWRzKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGRhODUwX2V2bV9iYl9sZWRzX2RldmljZSA9IHsKKwkubmFtZQkJPSAibGVkcy1ncGlvIiwKKwkuaWQJCT0gLTEsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmZGE4NTBfZXZtX2JiX2xlZHNfcGRhdGEKKwl9Cit9OworCitzdGF0aWMgdm9pZCBkYTg1MF9ldm1fYmJfbGVkc19pbml0KHVuc2lnbmVkIGdwaW8pCit7CisJaW50IGk7CisJc3RydWN0IGdwaW9fbGVkICpsZWQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgREE4NTBfTl9CQl9VU0VSX0xFRDsgaSsrKSB7CisJCWxlZCA9ICZkYTg1MF9ldm1fYmJfbGVkc1tpXTsKKworCQlsZWQtPmdwaW8gPSBncGlvICsgREE4NTBfRVZNX0JCX0VYUF9VU0VSX0xFRDIgKyBpOworCQlsZWQtPm5hbWUgPQorCQkJZGE4NTBfZXZtX2JiX2V4cFtEQTg1MF9FVk1fQkJfRVhQX1VTRVJfTEVEMiArIGldOworCX0KK30KKworc3RhdGljIGludCBkYTg1MF9ldm1fYmJfZXhwYW5kZXJfc2V0dXAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCQkJCXVuc2lnbmVkIGdwaW8sIHVuc2lnbmVkIG5ncGlvLAorCQkJCQkJdm9pZCAqYykKK3sKKwlpbnQgcmV0OworCisJLyoKKwkgKiBSZWdpc3RlciB0aGUgc3dpdGNoZXMgYW5kIHB1c2hidXR0b24gb24gdGhlIGJhc2Vib2FyZCBhcyBhIGdwaW8ta2V5cworCSAqIGRldmljZS4KKwkgKi8KKwlkYTg1MF9ldm1fYmJfa2V5c19pbml0KGdwaW8pOworCXJldCA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZGE4NTBfZXZtX2JiX2tleXNfZGV2aWNlKTsKKwlpZiAocmV0KSB7CisJCXByX3dhcm5pbmcoIkNvdWxkIG5vdCByZWdpc3RlciBiYXNlYm9hcmQgR1BJTyBleHBhbmRlciBrZXlzIik7CisJCWdvdG8gaW9fZXhwX3NldHVwX3N3X2ZhaWw7CisJfQorCisJZGE4NTBfZXZtX2JiX2xlZHNfaW5pdChncGlvKTsKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmRhODUwX2V2bV9iYl9sZWRzX2RldmljZSk7CisJaWYgKHJldCkgeworCQlwcl93YXJuaW5nKCJDb3VsZCBub3QgcmVnaXN0ZXIgYmFzZWJvYXJkIEdQSU8gZXhwYW5kZXIgTEVEUyIpOworCQlnb3RvIGlvX2V4cF9zZXR1cF9sZWRzX2ZhaWw7CisJfQorCisJcmV0dXJuIDA7CisKK2lvX2V4cF9zZXR1cF9sZWRzX2ZhaWw6CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoJmRhODUwX2V2bV9iYl9rZXlzX2RldmljZSk7Citpb19leHBfc2V0dXBfc3dfZmFpbDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGRhODUwX2V2bV9iYl9leHBhbmRlcl90ZWFyZG93bihzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJCQl1bnNpZ25lZCBncGlvLCB1bnNpZ25lZCBuZ3Bpbywgdm9pZCAqYykKK3sKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcigmZGE4NTBfZXZtX2JiX2xlZHNfZGV2aWNlKTsKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcigmZGE4NTBfZXZtX2JiX2tleXNfZGV2aWNlKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzQwLDYgKzYxMCwxNCBAQAogCS5ncGlvX2Jhc2UJPSBEQVZJTkNJX05fR1BJTywKIAkuc2V0dXAJCT0gZGE4NTBfZXZtX3VpX2V4cGFuZGVyX3NldHVwLAogCS50ZWFyZG93bgk9IGRhODUwX2V2bV91aV9leHBhbmRlcl90ZWFyZG93biwKKwkubmFtZXMJCT0gZGE4NTBfZXZtX3VpX2V4cCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGNhOTUzeF9wbGF0Zm9ybV9kYXRhIGRhODUwX2V2bV9iYl9leHBhbmRlcl9pbmZvID0geworCS5ncGlvX2Jhc2UJPSBEQTg1MF9CQl9FWFBBTkRFUl9HUElPX0JBU0UsCisJLnNldHVwCQk9IGRhODUwX2V2bV9iYl9leHBhbmRlcl9zZXR1cCwKKwkudGVhcmRvd24JPSBkYTg1MF9ldm1fYmJfZXhwYW5kZXJfdGVhcmRvd24sCisJLm5hbWVzCQk9IGRhODUwX2V2bV9iYl9leHAsCiB9OwogCiBzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgZGE4NTBfZXZtX2kyY19kZXZpY2VzW10gPSB7CkBAIC0zNTAsNiArNjI4LDEwIEBACiAJCUkyQ19CT0FSRF9JTkZPKCJ0Y2E2NDE2IiwgMHgyMCksCiAJCS5wbGF0Zm9ybV9kYXRhID0gJmRhODUwX2V2bV91aV9leHBhbmRlcl9pbmZvLAogCX0sCisJeworCQlJMkNfQk9BUkRfSU5GTygidGNhNjQxNiIsIDB4MjEpLAorCQkucGxhdGZvcm1fZGF0YSA9ICZkYTg1MF9ldm1fYmJfZXhwYW5kZXJfaW5mbywKKwl9LAogfTsKIAogc3RhdGljIHN0cnVjdCBkYXZpbmNpX2kyY19wbGF0Zm9ybV9kYXRhIGRhODUwX2V2bV9pMmNfMF9wZGF0YSA9IHsKQEAgLTU0MCw3ICs4MjIsNyBAQAogCXsKIAkJLmNvbnN0cmFpbnRzID0gewogCQkJLm1pbl91ViA9IDk1MDAwMCwKLQkJCS5tYXhfdVYgPSAxMzIwMDAwLAorCQkJLm1heF91ViA9IDEzNTAwMDAsCiAJCQkudmFsaWRfb3BzX21hc2sgPSAoUkVHVUxBVE9SX0NIQU5HRV9WT0xUQUdFIHwKIAkJCQlSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUyksCiAJCQkuYm9vdF9vbiA9IDEsCkBAIC01OTEsNyArODczLDcgQEAKIAkudHBzNjUwN3hfdHNfaW5pdF9kYXRhID0gJnRwczY1MDd4X3RvdWNoc2NyZWVuX2RhdGEsCiB9OwogCi1zdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgZGE4NTBldm1fdHBzNjUwNzBfaW5mb1tdID0geworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIGRhODUwX2V2bV90cHM2NTA3MF9pbmZvW10gPSB7CiAJewogCQlJMkNfQk9BUkRfSU5GTygidHBzNjUwN3giLCAweDQ4KSwKIAkJLnBsYXRmb3JtX2RhdGEgPSAmdHBzX2JvYXJkLApAQCAtNjAwLDggKzg4Miw4IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHBtaWNfdHBzNjUwNzBfaW5pdCh2b2lkKQogewotCXJldHVybiBpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygxLCBkYTg1MGV2bV90cHM2NTA3MF9pbmZvLAotCQkJCQlBUlJBWV9TSVpFKGRhODUwZXZtX3RwczY1MDcwX2luZm8pKTsKKwlyZXR1cm4gaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMSwgZGE4NTBfZXZtX3RwczY1MDcwX2luZm8sCisJCQkJCUFSUkFZX1NJWkUoZGE4NTBfZXZtX3RwczY1MDcwX2luZm8pKTsKIH0KIAogc3RhdGljIGNvbnN0IHNob3J0IGRhODUwX2V2bV9sY2RjX3BpbnNbXSA9IHsKQEAgLTczNiw2ICsxMDE4LDI3IEBACiAJJmRhODUwX2VkbWFfY2MxX3JzdiwKIH07CiAKKyNpZmRlZiBDT05GSUdfQ1BVX0ZSRVEKK3N0YXRpYyBfX2luaXQgaW50IGRhODUwX2V2bV9pbml0X2NwdWZyZXEodm9pZCkKK3sKKwlzd2l0Y2ggKHN5c3RlbV9yZXYgJiAweEYpIHsKKwljYXNlIDM6CisJCWRhODUwX21heF9zcGVlZCA9IDQ1NjAwMDsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlkYTg1MF9tYXhfc3BlZWQgPSA0MDgwMDA7CisJCWJyZWFrOworCWNhc2UgMToKKwkJZGE4NTBfbWF4X3NwZWVkID0gMzcyMDAwOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gZGE4NTBfcmVnaXN0ZXJfY3B1ZnJlcSgicGxsMF9zeXNjbGszIik7Cit9CisjZWxzZQorc3RhdGljIF9faW5pdCBpbnQgZGE4NTBfZXZtX2luaXRfY3B1ZnJlcSh2b2lkKSB7IHJldHVybiAwOyB9CisjZW5kaWYKKwogc3RhdGljIF9faW5pdCB2b2lkIGRhODUwX2V2bV9pbml0KHZvaWQpCiB7CiAJaW50IHJldDsKQEAgLTgzNiw3ICsxMTM5LDcgQEAKIAlpZiAocmV0KQogCQlwcl93YXJuaW5nKCJkYTg1MF9ldm1faW5pdDogcnRjIHNldHVwIGZhaWxlZDogJWRcbiIsIHJldCk7CiAKLQlyZXQgPSBkYTg1MF9yZWdpc3Rlcl9jcHVmcmVxKCJwbGwwX3N5c2NsazMiKTsKKwlyZXQgPSBkYTg1MF9ldm1faW5pdF9jcHVmcmVxKCk7CiAJaWYgKHJldCkKIAkJcHJfd2FybmluZygiZGE4NTBfZXZtX2luaXQ6IGNwdWZyZXEgcmVnaXN0cmF0aW9uIGZhaWxlZDogJWRcbiIsCiAJCQkJcmV0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2Nsb2NrLmMKaW5kZXggMDFiYTA4MC4uZTRlM2FmMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2Nsb2NrLmMKQEAgLTMzNiw3ICszMzYsNyBAQAogCQlyYXRpby0tOwogCX0KIAotCWlmIChyYXRpbyA+IFBMTERJVl9SQVRJT19NQVNLKQorCWlmIChyYXRpbyA+IHBsbC0+ZGl2X3JhdGlvX21hc2spCiAJCXJldHVybiAtRUlOVkFMOwogCiAJZG8gewpAQCAtMzQ0LDcgKzM0NCw3IEBACiAJfSB3aGlsZSAodiAmIFBMTFNUQVRfR09TVEFUKTsKIAogCXYgPSBfX3Jhd19yZWFkbChwbGwtPmJhc2UgKyBjbGstPmRpdl9yZWcpOwotCXYgJj0gflBMTERJVl9SQVRJT19NQVNLOworCXYgJj0gfnBsbC0+ZGl2X3JhdGlvX21hc2s7CiAJdiB8PSByYXRpbyB8IFBMTERJVl9FTjsKIAlfX3Jhd193cml0ZWwodiwgcGxsLT5iYXNlICsgY2xrLT5kaXZfcmVnKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2Nsb2NrLmggYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvY2xvY2suaAppbmRleCAxMTA5OTk4Li4wZGQyMjAzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvY2xvY2suaAorKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvY2xvY2suaApAQCAtNjgsNyArNjgsNyBAQAogI2lmbmRlZiBfX0FTU0VNQkxFUl9fCiAKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8YXNtL2Nsa2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsa2Rldi5oPgogCiAjZGVmaW5lIFBMTFNUQVRfR09TVEFUCUJJVCgwKQogI2RlZmluZSBQTExDTURfR09TRVQJQklUKDApCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvZGE4NTAuYyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kYTg1MC5jCmluZGV4IDYzOTE2YjkuLjc4YjVhZTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kYTg1MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kYTg1MC5jCkBAIC04MzAsOCArODMwLDcgQEAKICAqIEFjY29yZGluZyB0byB0aGUgVFJNLCBtaW5pbXVtIFBMTE0gcmVzdWx0cyBpbiBtYXhpbXVtIHBvd2VyIHNhdmluZ3MuCiAgKiBUaGUgT1BQIGRlZmluaXRpb25zIGJlbG93IHNob3VsZCBrZWVwIHRoZSBQTExNIGFzIGxvdyBhcyBwb3NzaWJsZS4KICAqCi0gKiBUaGUgb3V0cHV0IG9mIHRoZSBQTExNIG11c3QgYmUgYmV0d2VlbiA0MDAgdG8gNjAwIE1Iei4KLSAqIFRoaXMgcnVsZXMgb3V0IHByZWRpdiBvZiBhbnl0aGluZyBidXQgZGl2aWRlLWJ5LW9uZSBmb3IgMjRNaHogT1NDIGlucHV0LgorICogVGhlIG91dHB1dCBvZiB0aGUgUExMTSBtdXN0IGJlIGJldHdlZW4gMzAwIHRvIDYwMCBNSHouCiAgKi8KIHN0cnVjdCBkYTg1MF9vcHAgewogCXVuc2lnbmVkIGludAlmcmVxOwkvKiBpbiBLSHogKi8KQEAgLTg0Miw2ICs4NDEsMzMgQEAKIAl1bnNpZ25lZCBpbnQJY3ZkZF9tYXg7IC8qIGluIHVWICovCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IGRhODUwX29wcCBkYTg1MF9vcHBfNDU2ID0geworCS5mcmVxCQk9IDQ1NjAwMCwKKwkucHJlZGl2CQk9IDEsCisJLm11bHQJCT0gMTksCisJLnBvc3RkaXYJPSAxLAorCS5jdmRkX21pbgk9IDEzMDAwMDAsCisJLmN2ZGRfbWF4CT0gMTM1MDAwMCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGE4NTBfb3BwIGRhODUwX29wcF80MDggPSB7CisJLmZyZXEJCT0gNDA4MDAwLAorCS5wcmVkaXYJCT0gMSwKKwkubXVsdAkJPSAxNywKKwkucG9zdGRpdgk9IDEsCisJLmN2ZGRfbWluCT0gMTMwMDAwMCwKKwkuY3ZkZF9tYXgJPSAxMzUwMDAwLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkYTg1MF9vcHAgZGE4NTBfb3BwXzM3MiA9IHsKKwkuZnJlcQkJPSAzNzIwMDAsCisJLnByZWRpdgkJPSAyLAorCS5tdWx0CQk9IDMxLAorCS5wb3N0ZGl2CT0gMSwKKwkuY3ZkZF9taW4JPSAxMjAwMDAwLAorCS5jdmRkX21heAk9IDEzMjAwMDAsCit9OworCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRhODUwX29wcCBkYTg1MF9vcHBfMzAwID0gewogCS5mcmVxCQk9IDMwMDAwMCwKIAkucHJlZGl2CQk9IDEsCkBAIC04NzYsNiArOTAyLDkgQEAKIAl9CiAKIHN0YXRpYyBzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgZGE4NTBfZnJlcV90YWJsZVtdID0geworCU9QUCg0NTYpLAorCU9QUCg0MDgpLAorCU9QUCgzNzIpLAogCU9QUCgzMDApLAogCU9QUCgyMDApLAogCU9QUCg5NiksCkBAIC04ODYsNiArOTE1LDE5IEBACiB9OwogCiAjaWZkZWYgQ09ORklHX1JFR1VMQVRPUgorc3RhdGljIGludCBkYTg1MF9zZXRfdm9sdGFnZSh1bnNpZ25lZCBpbnQgaW5kZXgpOworc3RhdGljIGludCBkYTg1MF9yZWd1bGF0b3JfaW5pdCh2b2lkKTsKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IGRhdmluY2lfY3B1ZnJlcV9jb25maWcgY3B1ZnJlcV9pbmZvID0geworCS5mcmVxX3RhYmxlID0gZGE4NTBfZnJlcV90YWJsZSwKKyNpZmRlZiBDT05GSUdfUkVHVUxBVE9SCisJLmluaXQgPSBkYTg1MF9yZWd1bGF0b3JfaW5pdCwKKwkuc2V0X3ZvbHRhZ2UgPSBkYTg1MF9zZXRfdm9sdGFnZSwKKyNlbmRpZgorfTsKKworI2lmZGVmIENPTkZJR19SRUdVTEFUT1IKIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yICpjdmRkOwogCiBzdGF0aWMgaW50IGRhODUwX3NldF92b2x0YWdlKHVuc2lnbmVkIGludCBpbmRleCkKQEAgLTg5NSw3ICs5MzcsNyBAQAogCWlmICghY3ZkZCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlvcHAgPSAoc3RydWN0IGRhODUwX29wcCAqKSBkYTg1MF9mcmVxX3RhYmxlW2luZGV4XS5pbmRleDsKKwlvcHAgPSAoc3RydWN0IGRhODUwX29wcCAqKSBjcHVmcmVxX2luZm8uZnJlcV90YWJsZVtpbmRleF0uaW5kZXg7CiAKIAlyZXR1cm4gcmVndWxhdG9yX3NldF92b2x0YWdlKGN2ZGQsIG9wcC0+Y3ZkZF9taW4sIG9wcC0+Y3ZkZF9tYXgpOwogfQpAQCAtOTEyLDE0ICs5NTQsNiBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgZGF2aW5jaV9jcHVmcmVxX2NvbmZpZyBjcHVmcmVxX2luZm8gPSB7Ci0JLmZyZXFfdGFibGUgPSAmZGE4NTBfZnJlcV90YWJsZVswXSwKLSNpZmRlZiBDT05GSUdfUkVHVUxBVE9SCi0JLmluaXQgPSBkYTg1MF9yZWd1bGF0b3JfaW5pdCwKLQkuc2V0X3ZvbHRhZ2UgPSBkYTg1MF9zZXRfdm9sdGFnZSwKLSNlbmRpZgotfTsKLQogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZGE4NTBfY3B1ZnJlcV9kZXZpY2UgPSB7CiAJLm5hbWUJCQk9ICJjcHVmcmVxLWRhdmluY2kiLAogCS5kZXYgPSB7CkBAIC05MjgsMTIgKzk2MiwyMiBAQAogCS5pZCA9IC0xLAogfTsKIAordW5zaWduZWQgaW50IGRhODUwX21heF9zcGVlZCA9IDMwMDAwMDsKKwogaW50IF9faW5pdCBkYTg1MF9yZWdpc3Rlcl9jcHVmcmVxKGNoYXIgKmFzeW5jX2NsaykKIHsKKwlpbnQgaTsKKwogCS8qIGNwdWZyZXEgZHJpdmVyIGNhbiBoZWxwIGtlZXAgYW4gImFzeW5jIiBjbG9jayBjb25zdGFudCAqLwogCWlmIChhc3luY19jbGspCiAJCWNsa19hZGRfYWxpYXMoImFzeW5jIiwgZGE4NTBfY3B1ZnJlcV9kZXZpY2UubmFtZSwKIAkJCQkJCQlhc3luY19jbGssIE5VTEwpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRhODUwX2ZyZXFfdGFibGUpOyBpKyspIHsKKwkJaWYgKGRhODUwX2ZyZXFfdGFibGVbaV0uZnJlcXVlbmN5IDw9IGRhODUwX21heF9zcGVlZCkgeworCQkJY3B1ZnJlcV9pbmZvLmZyZXFfdGFibGUgPSAmZGE4NTBfZnJlcV90YWJsZVtpXTsKKwkJCWJyZWFrOworCQl9CisJfQogCiAJcmV0dXJuIHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZGE4NTBfY3B1ZnJlcV9kZXZpY2UpOwogfQpAQCAtOTQyLDE3ICs5ODYsMTggQEAKIHsKIAlpbnQgaSwgcmV0ID0gMCwgZGlmZjsKIAl1bnNpZ25lZCBpbnQgYmVzdCA9ICh1bnNpZ25lZCBpbnQpIC0xOworCXN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqdGFibGUgPSBjcHVmcmVxX2luZm8uZnJlcV90YWJsZTsKIAogCXJhdGUgLz0gMTAwMDsgLyogY29udmVydCB0byBrSHogKi8KIAotCWZvciAoaSA9IDA7IGRhODUwX2ZyZXFfdGFibGVbaV0uZnJlcXVlbmN5ICE9IENQVUZSRVFfVEFCTEVfRU5EOyBpKyspIHsKLQkJZGlmZiA9IGRhODUwX2ZyZXFfdGFibGVbaV0uZnJlcXVlbmN5IC0gcmF0ZTsKKwlmb3IgKGkgPSAwOyB0YWJsZVtpXS5mcmVxdWVuY3kgIT0gQ1BVRlJFUV9UQUJMRV9FTkQ7IGkrKykgeworCQlkaWZmID0gdGFibGVbaV0uZnJlcXVlbmN5IC0gcmF0ZTsKIAkJaWYgKGRpZmYgPCAwKQogCQkJZGlmZiA9IC1kaWZmOwogCiAJCWlmIChkaWZmIDwgYmVzdCkgewogCQkJYmVzdCA9IGRpZmY7Ci0JCQlyZXQgPSBkYTg1MF9mcmVxX3RhYmxlW2ldLmZyZXF1ZW5jeTsKKwkJCXJldCA9IHRhYmxlW2ldLmZyZXF1ZW5jeTsKIAkJfQogCX0KIApAQCAtOTczLDcgKzEwMTgsNyBAQAogCXN0cnVjdCBwbGxfZGF0YSAqcGxsID0gY2xrLT5wbGxfZGF0YTsKIAlpbnQgcmV0OwogCi0Jb3BwID0gKHN0cnVjdCBkYTg1MF9vcHAgKikgZGE4NTBfZnJlcV90YWJsZVtpbmRleF0uaW5kZXg7CisJb3BwID0gKHN0cnVjdCBkYTg1MF9vcHAgKikgY3B1ZnJlcV9pbmZvLmZyZXFfdGFibGVbaW5kZXhdLmluZGV4OwogCXByZWRpdiA9IG9wcC0+cHJlZGl2OwogCW11bHQgPSBvcHAtPm11bHQ7CiAJcG9zdGRpdiA9IG9wcC0+cG9zdGRpdjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kZXZpY2VzLXRuZXR2MTA3eC5jIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RldmljZXMtdG5ldHYxMDd4LmMKaW5kZXggYzlhODZkOC4uODU1MDNkZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kZXZpY2VzLXRuZXR2MTA3eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kZXZpY2VzLXRuZXR2MTA3eC5jCkBAIC0zNDQsNyArMzQ0LDIwIEBACiAKIHZvaWQgX19pbml0IHRuZXR2MTA3eF9kZXZpY2VzX2luaXQoc3RydWN0IHRuZXR2MTA3eF9kZXZpY2VfaW5mbyAqaW5mbykKIHsKLQlpbnQgaTsKKwlpbnQgaSwgZXJyb3I7CisJc3RydWN0IGNsayAqdHNjX2NsazsKKworCS8qCisJICogVGhlIHJlc2V0IGRlZmF1bHRzIGZvciB0bmV0djEwN3ggdHNjIGNsb2NrIGRpdmlkZXIgaXMgc2V0IHRvbyBoaWdoLgorCSAqIFRoaXMgZm9yY2VzIHRoZSBjbG9jayBkb3duIHRvIGEgcmFuZ2UgdGhhdCBhbGxvd3MgdGhlIEFEQyB0bworCSAqIGNvbXBsZXRlIHNhbXBsZSBjb252ZXJzaW9uIGluIHRpbWUuCisJICovCisJdHNjX2NsayA9IGNsa19nZXQoTlVMTCwgInN5c190c2NfY2xrIik7CisJaWYgKHRzY19jbGspIHsKKwkJZXJyb3IgPSBjbGtfc2V0X3JhdGUodHNjX2NsaywgNTAwMDAwMCk7CisJCVdBUk5fT04oZXJyb3IgPCAwKTsKKwkJY2xrX3B1dCh0c2NfY2xrKTsKKwl9CiAKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmVkbWFfZGV2aWNlKTsKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnRuZXR2MTA3eF93ZHRfZGV2aWNlKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kbTM1NS5jIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RtMzU1LmMKaW5kZXggMjY1MmFmMS4uYTVmOGE4MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RtMzU1LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RtMzU1LmMKQEAgLTQxMiwxMiArNDEyLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgZGF2aW5jaV9zcGlfcGxhdGZvcm1fZGF0YSBkbTM1NV9zcGkwX3BkYXRhID0gewogCS52ZXJzaW9uIAk9IFNQSV9WRVJTSU9OXzEsCiAJLm51bV9jaGlwc2VsZWN0ID0gMiwKLQkuY2xrX2ludGVybmFsCT0gMSwKLQkuY3NfaG9sZAk9IDEsCi0JLmludHJfbGV2ZWwJPSAwLAotCS5wb2xsX21vZGUJPSAxLAkvKiAwIC0+IGludGVycnVwdCBtb2RlIDEtPiBwb2xsaW5nIG1vZGUgKi8KLQkuYzJ0ZGVsYXkJPSAwLAotCS50MmNkZWxheQk9IDAsCisJLmNzaG9sZF9idWcJPSB0cnVlLAogfTsKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGRtMzU1X3NwaTBfZGV2aWNlID0gewogCS5uYW1lID0gInNwaV9kYXZpbmNpIiwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kbTM2NS5jIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RtMzY1LmMKaW5kZXggYzQ2NmQ3MS4uMDJkMmNjMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RtMzY1LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RtMzY1LmMKQEAgLTYyNSwxMiArNjI1LDYgQEAKIHN0YXRpYyBzdHJ1Y3QgZGF2aW5jaV9zcGlfcGxhdGZvcm1fZGF0YSBkbTM2NV9zcGkwX3BkYXRhID0gewogCS52ZXJzaW9uIAk9IFNQSV9WRVJTSU9OXzEsCiAJLm51bV9jaGlwc2VsZWN0ID0gMiwKLQkuY2xrX2ludGVybmFsCT0gMSwKLQkuY3NfaG9sZAk9IDEsCi0JLmludHJfbGV2ZWwJPSAwLAotCS5wb2xsX21vZGUJPSAxLAkvKiAwIC0+IGludGVycnVwdCBtb2RlIDEtPiBwb2xsaW5nIG1vZGUgKi8KLQkuYzJ0ZGVsYXkJPSAwLAotCS50MmNkZWxheQk9IDAsCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGRtMzY1X3NwaTBfcmVzb3VyY2VzW10gPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL2RhOHh4LmggYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL2RhOHh4LmgKaW5kZXggNDI0N2IzZi4uZTdmOTUyMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9kYTh4eC5oCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvZGE4eHguaApAQCAtMjgsNiArMjgsMTMgQEAKIGV4dGVybiB2b2lkIF9faW9tZW0gKmRhOHh4X3N5c2NmZzFfYmFzZTsKIAogLyoKKyAqIElmIHRoZSBEQTg1MC9PTUFQLUwxMzgvQU0xOHggU29DIG9uIGJvYXJkIGlzIG9mIGEgaGlnaGVyIHNwZWVkIGdyYWRlCisgKiAodGhhbiB0aGUgcmVndWxhciAzMDBNaHogdmFyaWFudCksIHRoZSBib2FyZCBjb2RlIHNob3VsZCBzZXQgdGhpcyB1cAorICogd2l0aCB0aGUgc3VwcG9ydGVkIHNwZWVkIGJlZm9yZSBjYWxsaW5nIGRhODUwX3JlZ2lzdGVyX2NwdWZyZXEoKS4KKyAqLworZXh0ZXJuIHVuc2lnbmVkIGludCBkYTg1MF9tYXhfc3BlZWQ7CisKKy8qCiAgKiBUaGUgY3BfaW50YyBpbnRlcnJ1cHQgY29udHJvbGxlciBmb3IgdGhlIGRhOHh4IGlzbid0IGluIHRoZSBzYW1lCiAgKiBjaHVuayBvZiBwaHlzaWNhbCBtZW1vcnkgc3BhY2UgYXMgdGhlIG90aGVyIHJlZ2lzdGVycyAobGlrZSBpdCBpcwogICogb24gdGhlIGRhdmluY2lzKSBzbyBpdCBuZWVkcyB0byBiZSBtYXBwZWQgc2VwYXJhdGVseS4gIEl0IHdpbGwgYmUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvaW8uaCBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvaW8uaAppbmRleCA2MmIwYTkwLi5kMWI5NTQ5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL2lvLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9pby5oCkBAIC0yMiw4ICsyMiw4IEBACiAjZGVmaW5lIF9fbWVtX2lzYShhKQkJKGEpCiAKICNpZm5kZWYgX19BU1NFTUJMRVJfXwotI2RlZmluZSBfX2FyY2hfaW9yZW1hcChwLCBzLCB0KQlkYXZpbmNpX2lvcmVtYXAocCwgcywgdCkKLSNkZWZpbmUgX19hcmNoX2lvdW5tYXAodikJZGF2aW5jaV9pb3VubWFwKHYpCisjZGVmaW5lIF9fYXJjaF9pb3JlbWFwCQlkYXZpbmNpX2lvcmVtYXAKKyNkZWZpbmUgX19hcmNoX2lvdW5tYXAJCWRhdmluY2lfaW91bm1hcAogCiB2b2lkIF9faW9tZW0gKmRhdmluY2lfaW9yZW1hcCh1bnNpZ25lZCBsb25nIHBoeXMsIHNpemVfdCBzaXplLAogCQkJICAgICAgdW5zaWduZWQgaW50IHR5cGUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9zcGkuaCBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvc3BpLmgKaW5kZXggOTEwZWZiZi4uMzhmNGRhNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9zcGkuaAorKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL3NwaS5oCkBAIC0xOSwyNiArMTksNjYgQEAKICNpZm5kZWYgX19BUkNIX0FSTV9EQVZJTkNJX1NQSV9ICiAjZGVmaW5lIF9fQVJDSF9BUk1fREFWSU5DSV9TUElfSAogCisjZGVmaW5lIFNQSV9JTlRFUk5fQ1MJMHhGRgorCiBlbnVtIHsKIAlTUElfVkVSU0lPTl8xLCAvKiBGb3IgRE0zNTUvRE0zNjUvRE02NDY3ICovCiAJU1BJX1ZFUlNJT05fMiwgLyogRm9yIERBOHh4ICovCiB9OwogCisvKioKKyAqIGRhdmluY2lfc3BpX3BsYXRmb3JtX2RhdGEgLSBQbGF0Zm9ybSBkYXRhIGZvciBTUEkgbWFzdGVyIGRldmljZSBvbiBEYVZpbmNpCisgKgorICogQHZlcnNpb246CXZlcnNpb24gb2YgdGhlIFNQSSBJUC4gRGlmZmVyZW50IERhVmluY2kgZGV2aWNlcyBoYXZlIHNsaWdodGx5CisgKgkJdmFyeWluZyB2ZXJzaW9ucyBvZiB0aGUgc2FtZSBJUC4KKyAqIEBudW1fY2hpcHNlbGVjdDogbnVtYmVyIG9mIGNoaXBzZWxlY3RzIHN1cHBvcnRlZCBieSB0aGlzIFNQSSBtYXN0ZXIKKyAqIEBpbnRyX2xpbmU6CWludGVycnVwdCBsaW5lIHVzZWQgdG8gY29ubmVjdCB0aGUgU1BJIElQIHRvIHRoZSBBUk0gaW50ZXJydXB0CisgKgkJY29udHJvbGxlciB3aXRobiB0aGUgU29DLiBQb3NzaWJsZSB2YWx1ZXMgYXJlIDAgYW5kIDEuCisgKiBAY2hpcF9zZWw6CWxpc3Qgb2YgR1BJT3Mgd2hpY2ggY2FuIGFjdCBhcyBjaGlwLXNlbGVjdHMgZm9yIHRoZSBTUEkuCisgKgkJU1BJX0lOVEVSTl9DUyBkZW5vdGVzIGludGVybmFsIFNQSSBjaGlwLXNlbGVjdC4gTm90IG5lY2Vzc2FyeQorICoJCXRvIHBvcHVsYXRlIGlmIGFsbCBjaGlwLXNlbGVjdHMgYXJlIGludGVybmFsLgorICogQGNzaG9sZF9idWc6CXNldCB0aGlzIHRvIHRydWUgaWYgdGhlIFNQSSBjb250cm9sbGVyIG9uIHlvdXIgY2hpcCByZXF1aXJlcworICoJCWEgd3JpdGUgdG8gQ1NIT0xEIGJpdCBpbiBiZXR3ZWVuIHRyYW5zZmVycyAobGlrZSBpbiBETTM1NSkuCisgKi8KIHN0cnVjdCBkYXZpbmNpX3NwaV9wbGF0Zm9ybV9kYXRhIHsKIAl1OAl2ZXJzaW9uOwogCXU4CW51bV9jaGlwc2VsZWN0OworCXU4CWludHJfbGluZTsKKwl1OAkqY2hpcF9zZWw7CisJYm9vbAljc2hvbGRfYnVnOworfTsKKworLyoqCisgKiBkYXZpbmNpX3NwaV9jb25maWcgLSBQZXItY2hpcC1zZWxlY3QgY29uZmlndXJhdGlvbiBmb3IgU1BJIHNsYXZlIGRldmljZXMKKyAqCisgKiBAd2RlbGF5OglhbW91bnQgb2YgZGVsYXkgYmV0d2VlbiB0cmFuc21pc3Npb25zLiBNZWFzdXJlZCBpbiBudW1iZXIgb2YKKyAqCQlTUEkgbW9kdWxlIGNsb2Nrcy4KKyAqIEBvZGRfcGFyaXR5Oglwb2xhcml0eSBvZiBwYXJpdHkgZmxhZyBhdCB0aGUgZW5kIG9mIHRyYW5zbWl0IGRhdGEgc3RyZWFtLgorICoJCTAgLSBvZGQgcGFyaXR5LCAxIC0gZXZlbiBwYXJpdHkuCisgKiBAcGFyaXR5X2VuYWJsZTogZW5hYmxlIHRyYW5zbWlzc2lvbiBvZiBwYXJpdHkgYXQgZW5kIG9mIGVhY2ggdHJhbnNtaXQKKyAqCQlkYXRhIHN0cmVhbS4KKyAqIEBpb190eXBlOgl0eXBlIG9mIElPIHRyYW5zZmVyLiBDaG9vc2UgYmV0d2VlbiBwb2xsZWQsIGludGVycnVwdCBhbmQgRE1BLgorICogQHRpbWVyX2Rpc2FibGU6IGRpc2FibGUgY2hpcC1zZWxlY3QgdGltZXJzIChzZXR1cCBhbmQgaG9sZCkKKyAqIEBjMnRkZWxheToJY2hpcC1zZWxlY3Qgc2V0dXAgdGltZS4gTWVhc3VyZWQgaW4gbnVtYmVyIG9mIFNQSSBtb2R1bGUgY2xvY2tzLgorICogQHQyY2RlbGF5OgljaGlwLXNlbGVjdCBob2xkIHRpbWUuIE1lYXN1cmVkIGluIG51bWJlciBvZiBTUEkgbW9kdWxlIGNsb2Nrcy4KKyAqIEB0MmVkZWxheToJdHJhbnNtaXQgZGF0YSBmaW5pc2hlZCB0byBTUEkgRU5BbiBwaW4gaW5hY3RpdmUgdGltZS4gTWVhc3VyZWQKKyAqCQlpbiBudW1iZXIgb2YgU1BJIGNsb2Nrcy4KKyAqIEBjMmVkZWxheToJY2hpcC1zZWxlY3QgYWN0aXZlIHRvIFNQSSBFTkFuIHNpZ25hbCBhY3RpdmUgdGltZS4gTWVhc3VyZWQgaW4KKyAqCQludW1iZXIgb2YgU1BJIGNsb2Nrcy4KKyAqLworc3RydWN0IGRhdmluY2lfc3BpX2NvbmZpZyB7CiAJdTgJd2RlbGF5OwogCXU4CW9kZF9wYXJpdHk7CiAJdTgJcGFyaXR5X2VuYWJsZTsKLQl1OAl3YWl0X2VuYWJsZTsKKyNkZWZpbmUgU1BJX0lPX1RZUEVfSU5UUgkwCisjZGVmaW5lIFNQSV9JT19UWVBFX1BPTEwJMQorI2RlZmluZSBTUElfSU9fVFlQRV9ETUEJCTIKKwl1OAlpb190eXBlOwogCXU4CXRpbWVyX2Rpc2FibGU7Ci0JdTgJY2xrX2ludGVybmFsOwotCXU4CWNzX2hvbGQ7Ci0JdTgJaW50cl9sZXZlbDsKLQl1OAlwb2xsX21vZGU7Ci0JdTgJdXNlX2RtYTsKIAl1OAljMnRkZWxheTsKIAl1OAl0MmNkZWxheTsKKwl1OAl0MmVkZWxheTsKKwl1OAljMmVkZWxheTsKIH07CiAKICNlbmRpZgkvKiBfX0FSQ0hfQVJNX0RBVklOQ0lfU1BJX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9wc2MuYyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9wc2MuYwppbmRleCAxYjE1ZGJkLi5hNDE1ODA0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvcHNjLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL3BzYy5jCkBAIC04MywyMSArODMsMTYgQEAKIAkJcGRjdGwxID0gX19yYXdfcmVhZGwocHNjX2Jhc2UgKyBQRENUTDEpOwogCQlwZGN0bDEgfD0gMHgxMDA7CiAJCV9fcmF3X3dyaXRlbChwZGN0bDEsIHBzY19iYXNlICsgUERDVEwxKTsKLQotCQlkbyB7Ci0JCQlwdHN0YXQgPSBfX3Jhd19yZWFkbChwc2NfYmFzZSArCi0JCQkJCSAgICAgICBQVFNUQVQpOwotCQl9IHdoaWxlICghKCgocHRzdGF0ID4+IGRvbWFpbikgJiAxKSA9PSAwKSk7CiAJfSBlbHNlIHsKIAkJcHRjbWQgPSAxIDw8IGRvbWFpbjsKIAkJX19yYXdfd3JpdGVsKHB0Y21kLCBwc2NfYmFzZSArIFBUQ01EKTsKLQotCQlkbyB7Ci0JCQlwdHN0YXQgPSBfX3Jhd19yZWFkbChwc2NfYmFzZSArIFBUU1RBVCk7Ci0JCX0gd2hpbGUgKCEoKChwdHN0YXQgPj4gZG9tYWluKSAmIDEpID09IDApKTsKIAl9CiAKIAlkbyB7CisJCXB0c3RhdCA9IF9fcmF3X3JlYWRsKHBzY19iYXNlICsgUFRTVEFUKTsKKwl9IHdoaWxlICghKCgocHRzdGF0ID4+IGRvbWFpbikgJiAxKSA9PSAwKSk7CisKKwlkbyB7CiAJCW1kc3RhdCA9IF9fcmF3X3JlYWRsKHBzY19iYXNlICsgTURTVEFUICsgNCAqIGlkKTsKIAl9IHdoaWxlICghKChtZHN0YXQgJiBNRFNUQVRfU1RBVEVfTUFTSykgPT0gbmV4dF9zdGF0ZSkpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvdGltZS5jIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL3RpbWUuYwppbmRleCAwZjIxYzM2Li5lMTk2OWNlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvdGltZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS90aW1lLmMKQEAgLTI3MiwxNSArMjcyLDM1IEBACiAJcmV0dXJuIChjeWNsZXNfdCl0aW1lcjMyX3JlYWQodCk7CiB9CiAKKy8qCisgKiBLZXJuZWwgYXNzdW1lcyB0aGF0IHNjaGVkX2Nsb2NrIGNhbiBiZSBjYWxsZWQgZWFybHkgYnV0IG1heSBub3QgaGF2ZQorICogdGhpbmdzIHJlYWR5IHlldC4KKyAqLworc3RhdGljIGN5Y2xlX3QgcmVhZF9kdW1teShzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKQoreworCXJldHVybiAwOworfQorCisKIHN0YXRpYyBzdHJ1Y3QgY2xvY2tzb3VyY2UgY2xvY2tzb3VyY2VfZGF2aW5jaSA9IHsKIAkucmF0aW5nCQk9IDMwMCwKLQkucmVhZAkJPSByZWFkX2N5Y2xlcywKKwkucmVhZAkJPSByZWFkX2R1bW15LAogCS5tYXNrCQk9IENMT0NLU09VUkNFX01BU0soMzIpLAotCS5zaGlmdAkJPSAyNCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVMsCiB9OwogCiAvKgorICogT3ZlcndyaXRlIHdlYWsgZGVmYXVsdCBzY2hlZF9jbG9jayB3aXRoIHNvbWV0aGluZyBtb3JlIHByZWNpc2UKKyAqLwordW5zaWduZWQgbG9uZyBsb25nIG5vdHJhY2Ugc2NoZWRfY2xvY2sodm9pZCkKK3sKKwljb25zdCBjeWNsZV90IGN5YyA9IGNsb2Nrc291cmNlX2RhdmluY2kucmVhZCgmY2xvY2tzb3VyY2VfZGF2aW5jaSk7CisKKwlyZXR1cm4gY2xvY2tzb3VyY2VfY3ljMm5zKGN5YywgY2xvY2tzb3VyY2VfZGF2aW5jaS5tdWx0LAorCQkJCWNsb2Nrc291cmNlX2RhdmluY2kuc2hpZnQpOworfQorCisvKgogICogY2xvY2tldmVudAogICovCiBzdGF0aWMgaW50IGRhdmluY2lfc2V0X25leHRfZXZlbnQodW5zaWduZWQgbG9uZyBjeWNsZXMsCkBAIC0zNzcsMTEgKzM5NywxMCBAQAogCWRhdmluY2lfY2xvY2tfdGlja19yYXRlID0gY2xrX2dldF9yYXRlKHRpbWVyX2Nsayk7CiAKIAkvKiBzZXR1cCBjbG9ja3NvdXJjZSAqLworCWNsb2Nrc291cmNlX2RhdmluY2kucmVhZCA9IHJlYWRfY3ljbGVzOwogCWNsb2Nrc291cmNlX2RhdmluY2kubmFtZSA9IGlkX3RvX25hbWVbY2xvY2tzb3VyY2VfaWRdOwotCWNsb2Nrc291cmNlX2RhdmluY2kubXVsdCA9Ci0JCWNsb2Nrc291cmNlX2toejJtdWx0KGRhdmluY2lfY2xvY2tfdGlja19yYXRlLzEwMDAsCi0JCQkJICAgICBjbG9ja3NvdXJjZV9kYXZpbmNpLnNoaWZ0KTsKLQlpZiAoY2xvY2tzb3VyY2VfcmVnaXN0ZXIoJmNsb2Nrc291cmNlX2RhdmluY2kpKQorCWlmIChjbG9ja3NvdXJjZV9yZWdpc3Rlcl9oeigmY2xvY2tzb3VyY2VfZGF2aW5jaSwKKwkJCQkgICAgZGF2aW5jaV9jbG9ja190aWNrX3JhdGUpKQogCQlwcmludGsoZXJyLCBjbG9ja3NvdXJjZV9kYXZpbmNpLm5hbWUpOwogCiAJLyogc2V0dXAgY2xvY2tldmVudCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL3RuZXR2MTA3eC5jIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL3RuZXR2MTA3eC5jCmluZGV4IGRhZWFlMDYuLjZmY2RlY2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS90bmV0djEwN3guYworKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvdG5ldHYxMDd4LmMKQEAgLTEzMSwxMiArMTMxLDEzIEBACiBkZWZpbmVfcGxsX2NsayhldGgsIDIsIDB4MGZmLCAweDQwMCk7CiAKIC8qIExldmVsIDIgLSBkaXZpZGVkIG91dHB1dHMgZnJvbSB0aGUgUExMcyAqLwotI2RlZmluZSBkZWZpbmVfcGxsX2Rpdl9jbGsocGxsLCBjbmFtZSwgZGl2KQkJXAotCXN0YXRpYyBzdHJ1Y3QgY2xrIHBsbCMjXyMjY25hbWUjI19jbGsgPSB7CVwKLQkJLm5hbWUJCT0gI3BsbCAiXyIgI2NuYW1lICJfY2xrIixcCi0JCS5wYXJlbnQJCT0gJnBsbF8jI3BsbCMjX2NsaywJXAotCQkuZmxhZ3MJCT0gQ0xLX1BMTCwJCVwKLQkJLmRpdl9yZWcJPSBQTExESVYjI2RpdiwJCVwKKyNkZWZpbmUgZGVmaW5lX3BsbF9kaXZfY2xrKHBsbCwgY25hbWUsIGRpdikJCQlcCisJc3RhdGljIHN0cnVjdCBjbGsgcGxsIyNfIyNjbmFtZSMjX2NsayA9IHsJCVwKKwkJLm5hbWUJCT0gI3BsbCAiXyIgI2NuYW1lICJfY2xrIiwJXAorCQkucGFyZW50CQk9ICZwbGxfIyNwbGwjI19jbGssCQlcCisJCS5mbGFncwkJPSBDTEtfUExMLAkJCVwKKwkJLmRpdl9yZWcJPSBQTExESVYjI2RpdiwJCQlcCisJCS5zZXRfcmF0ZQk9IGRhdmluY2lfc2V0X3N5c2Nsa19yYXRlLAlcCiAJfQogCiBkZWZpbmVfcGxsX2Rpdl9jbGsoc3lzLCBhcm0xMTc2LAkxKTsKQEAgLTE5Miw2ICsxOTMsNyBAQAogbHBzY19jbGtfZW5hYmxlZChkZHIyX3Zyc3QsCXN5c19kZHJfY2xrLAlERFIyX0VNSUYxX1ZSU1QpOwogbHBzY19jbGtfZW5hYmxlZChkZHIyX3ZjdGxfcnN0LAlzeXNfZGRyX2NsaywJRERSMl9FTUlGMl9WQ1RMX1JTVCk7CiBscHNjX2Nsa19lbmFibGVkKHdkdF9hcm0sCXN5c19oYWxmX2NsaywJV0RUX0FSTSk7CitscHNjX2Nsa19lbmFibGVkKHRpbWVyMSwJc3lzX2hhbGZfY2xrLAlUSU1FUjEpOwogCiBscHNjX2NsayhtYnhfbGl0ZSwJc3lzX2FybTExNzZfY2xrLAlNQlhfTElURSk7CiBscHNjX2NsayhldGhzcywJCWV0aF8xMjVtaHpfY2xrLAkJRVRIU1MpOwpAQCAtMjA1LDE2ICsyMDcsMTUgQEAKIGxwc2NfY2xrKHNkaW8wLAkJc3lzX2hhbGZfY2xrLAkJU0RJTzApOwogbHBzY19jbGsoc2RpbzEsCQlzeXNfaGFsZl9jbGssCQlTRElPMSk7CiBscHNjX2Nsayh0aW1lcjAsCXN5c19oYWxmX2NsaywJCVRJTUVSMCk7Ci1scHNjX2Nsayh0aW1lcjEsCXN5c19oYWxmX2NsaywJCVRJTUVSMSk7CiBscHNjX2Nsayh3ZHRfZHNwLAlzeXNfaGFsZl9jbGssCQlXRFRfRFNQKTsKIGxwc2NfY2xrKHNzcCwJCXN5c19oYWxmX2NsaywJCVNTUCk7CiBscHNjX2Nsayh0ZG0wLAkJdGRtXzBfY2xrLAkJVERNMCk7CiBscHNjX2Nsayh0ZG0xLAkJdGRtXzFfY2xrLAkJVERNMSk7CiBscHNjX2Nsayh2bHlucSwJCXN5c192bHlucV9yZWZfY2xrLAlWTFlOUSk7CiBscHNjX2NsayhtY2RtYSwJCXN5c19oYWxmX2NsaywJCU1DRE1BKTsKLWxwc2NfY2xrKHVzYjAsCQlzeXNfaGFsZl9jbGssCQlVU0IwKTsKLWxwc2NfY2xrKHVzYjEsCQlzeXNfaGFsZl9jbGssCQlVU0IxKTsKIGxwc2NfY2xrKHVzYnNzLAkJc3lzX2hhbGZfY2xrLAkJVVNCU1MpOworbHBzY19jbGsodXNiMCwJCWNsa191c2JzcywJCVVTQjApOworbHBzY19jbGsodXNiMSwJCWNsa191c2JzcywJCVVTQjEpOwogbHBzY19jbGsoZXRoc3NfcmdtaWksCWV0aF8yNTBtaHpfY2xrLAkJRVRIU1NfUkdNSUkpOwogbHBzY19jbGsoaW1jb3AsCQlzeXNfZHNwX2NsaywJCUlNQ09QKTsKIGxwc2NfY2xrKHNwYXJlLAkJc3lzX2hhbGZfY2xrLAkJU1BBUkUpOwpAQCAtMjgxLDcgKzI4Miw5IEBACiAJQ0xLKE5VTEwsCQkiY2xrX3RkbTAiLAkJJmNsa190ZG0wKSwKIAlDTEsoTlVMTCwJCSJjbGtfdmx5bnEiLAkJJmNsa192bHlucSksCiAJQ0xLKE5VTEwsCQkiY2xrX21jZG1hIiwJCSZjbGtfbWNkbWEpLAorCUNMSyhOVUxMLAkJImNsa191c2JzcyIsCQkmY2xrX3VzYnNzKSwKIAlDTEsoTlVMTCwJCSJjbGtfdXNiMCIsCQkmY2xrX3VzYjApLAorCUNMSyhOVUxMLAkJImNsa191c2IxIiwJCSZjbGtfdXNiMSksCiAJQ0xLKE5VTEwsCQkiY2xrX3RkbTEiLAkJJmNsa190ZG0xKSwKIAlDTEsoTlVMTCwJCSJjbGtfZGVidWdzcyIsCQkmY2xrX2RlYnVnc3MpLAogCUNMSyhOVUxMLAkJImNsa19ldGhzc19yZ21paSIsCSZjbGtfZXRoc3NfcmdtaWkpLApAQCAtMjg5LDggKzI5Miw2IEBACiAJQ0xLKE5VTEwsCQkiY2xrX2ltY29wIiwJCSZjbGtfaW1jb3ApLAogCUNMSyhOVUxMLAkJImNsa19zcGFyZSIsCQkmY2xrX3NwYXJlKSwKIAlDTEsoImRhdmluY2lfbW1jLjEiLAlOVUxMLAkJCSZjbGtfc2RpbzEpLAotCUNMSyhOVUxMLAkJImNsa191c2IxIiwJCSZjbGtfdXNiMSksCi0JQ0xLKE5VTEwsCQkiY2xrX3VzYnNzIiwJCSZjbGtfdXNic3MpLAogCUNMSyhOVUxMLAkJImNsa19kZHIyX3Zyc3QiLAkmY2xrX2RkcjJfdnJzdCksCiAJQ0xLKE5VTEwsCQkiY2xrX2RkcjJfdmN0bF9yc3QiLAkmY2xrX2RkcjJfdmN0bF9yc3QpLAogCUNMSyhOVUxMLAkJTlVMTCwJCQlOVUxMKSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS91c2IuYyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS91c2IuYwppbmRleCAzMWYwY2JlLi4yM2QyYjZkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvdXNiLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL3VzYi5jCkBAIC02NCwxNyArNjQsMTkgQEAKIAl7CiAJCS5zdGFydCAgICAgICAgICA9IElSUV9VU0JJTlQsCiAJCS5mbGFncyAgICAgICAgICA9IElPUkVTT1VSQ0VfSVJRLAorCQkubmFtZQkJPSAibWMiCiAJfSwKIAl7CiAJCS8qIHBsYWNlaG9sZGVyIGZvciB0aGUgZGVkaWNhdGVkIENQUEkgSVJRICovCiAJCS5mbGFncyAgICAgICAgICA9IElPUkVTT1VSQ0VfSVJRLAorCQkubmFtZQkJPSAiZG1hIgogCX0sCiB9OwogCiBzdGF0aWMgdTY0IHVzYl9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdXNiX2RldiA9IHsKLQkubmFtZSAgICAgICAgICAgPSAibXVzYl9oZHJjIiwKKwkubmFtZSAgICAgICAgICAgPSAibXVzYi1kYXZpbmNpIiwKIAkuaWQgICAgICAgICAgICAgPSAtMSwKIAkuZGV2ID0gewogCQkucGxhdGZvcm1fZGF0YQkJPSAmdXNiX2RhdGEsCkBAIC0xMTAsNiArMTEyLDcgQEAKIAl7CiAJCS5zdGFydAkJPSBJUlFfREE4WFhfVVNCX0lOVCwKIAkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCQkubmFtZQkJPSAibWMiLAogCX0sCiB9OwogCkBAIC0xMjEsNiArMTI0LDcgQEAKIAogCXVzYl9kZXYucmVzb3VyY2UgPSBkYTh4eF91c2IyMF9yZXNvdXJjZXM7CiAJdXNiX2Rldi5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShkYTh4eF91c2IyMF9yZXNvdXJjZXMpOworCXVzYl9kZXYubmFtZSA9ICJtdXNiLWRhOHh4IjsKIAogCXJldHVybiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnVzYl9kZXYpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kb3ZlL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLWRvdmUvS2NvbmZpZwppbmRleCAzYjlhMzJhLi5hNGVkMzkwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRvdmUvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLWRvdmUvS2NvbmZpZwpAQCAtOSw2ICs5LDEyIEBACiAJICBTYXkgJ1knIGhlcmUgaWYgeW91IHdhbnQgeW91ciBrZXJuZWwgdG8gc3VwcG9ydCB0aGUKIAkgIE1hcnZlbGwgREItTVY4OEFQNTEwIERldmVsb3BtZW50IEJvYXJkLgogCisgY29uZmlnIE1BQ0hfQ01fQTUxMAorCWJvb2wgIkNvbXB1TGFiIENNLUE1MTAgQm9hcmQiCisJaGVscAorCSAgU2F5ICdZJyBoZXJlIGlmIHlvdSB3YW50IHlvdXIga2VybmVsIHRvIHN1cHBvcnQgdGhlCisJICBDb21wdUxhYiBDTS1BNTEwIEJvYXJkLgorCiBlbmRtZW51CiAKIGVuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRvdmUvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLWRvdmUvTWFrZWZpbGUKaW5kZXggN2FiM2JlNS4uZmEwZjAxOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kb3ZlL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtZG92ZS9NYWtlZmlsZQpAQCAtMSwzICsxLDQgQEAKLW9iai15CQkJCSs9IGNvbW1vbi5vIGFkZHItbWFwLm8gaXJxLm8gcGNpZS5vCitvYmoteQkJCQkrPSBjb21tb24ubyBhZGRyLW1hcC5vIGlycS5vIHBjaWUubyBtcHAubwogCiBvYmotJChDT05GSUdfTUFDSF9ET1ZFX0RCKQkrPSBkb3ZlLWRiLXNldHVwLm8KK29iai0kKENPTkZJR19NQUNIX0NNX0E1MTApCSs9IGNtLWE1MTAubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kb3ZlL2NtLWE1MTAuYyBiL2FyY2gvYXJtL21hY2gtZG92ZS9jbS1hNTEwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZlMGU5NAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZG92ZS9jbS1hNTEwLmMKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtZG92ZS9jbS1hNTEwLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQ29tcHVMYWIsIEx0ZC4KKyAqIEtvbnN0YW50aW4gU2lueXVrIDxrb3N0eWFzQGNvbXB1bGFiLmNvLmlsPgorICoKKyAqIEJhc2VkIG9uIE1hcnZlbGwgREItTVY4OEFQNTEwLUJQIERldmVsb3BtZW50IEJvYXJkIFNldHVwCisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9hdGFfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9tdjY0M3h4X2V0aC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvZmxhc2guaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorCisjaW5jbHVkZSA8bWFjaC9kb3ZlLmg+CisKKyNpbmNsdWRlICJjb21tb24uaCIKKworc3RhdGljIHN0cnVjdCBtdjY0M3h4X2V0aF9wbGF0Zm9ybV9kYXRhIGNtX2E1MTBfZ2UwMF9kYXRhID0geworCS5waHlfYWRkcgk9IE1WNjQzWFhfRVRIX1BIWV9BRERSX0RFRkFVTFQsCit9OworCitzdGF0aWMgc3RydWN0IG12X3NhdGFfcGxhdGZvcm1fZGF0YSBjbV9hNTEwX3NhdGFfZGF0YSA9IHsKKwkubl9wb3J0cyAgICAgICAgPSAxLAorfTsKKworLyoKKyAqIFNQSSBEZXZpY2VzOgorICogU1BJMDogMU0gRmxhc2ggV2luYm9uZCB3MjVxMzJidgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEgY21fYTUxMF9zcGlfZmxhc2hfZGF0YSA9IHsKKwkudHlwZQkJPSAidzI1cTMyYnYiLAorfTsKKworc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyBfX2luaXRkYXRhIGNtX2E1MTBfc3BpX2ZsYXNoX2luZm9bXSA9IHsKKwl7CisJCS5tb2RhbGlhcyAgICAgICA9ICJtMjVwODAiLAorCQkucGxhdGZvcm1fZGF0YSAgPSAmY21fYTUxMF9zcGlfZmxhc2hfZGF0YSwKKwkJLmlycSAgICAgICAgICAgID0gLTEsCisJCS5tYXhfc3BlZWRfaHogICA9IDIwMDAwMDAwLAorCQkuYnVzX251bSAgICAgICAgPSAwLAorCQkuY2hpcF9zZWxlY3QgICAgPSAwLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBjbV9hNTEwX3BjaV9pbml0KHZvaWQpCit7CisJaWYgKG1hY2hpbmVfaXNfY21fYTUxMCgpKQorCQlkb3ZlX3BjaWVfaW5pdCgxLCAxKTsKKworCXJldHVybiAwOworfQorCitzdWJzeXNfaW5pdGNhbGwoY21fYTUxMF9wY2lfaW5pdCk7CisKKy8qIEJvYXJkIEluaXQgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBjbV9hNTEwX2luaXQodm9pZCkKK3sKKwkvKgorCSAqIEJhc2ljIERvdmUgc2V0dXAuIE5lZWRzIHRvIGJlIGNhbGxlZCBlYXJseS4KKwkgKi8KKwlkb3ZlX2luaXQoKTsKKworCWRvdmVfZ2UwMF9pbml0KCZjbV9hNTEwX2dlMDBfZGF0YSk7CisJZG92ZV9laGNpMF9pbml0KCk7CisJZG92ZV9laGNpMV9pbml0KCk7CisJZG92ZV9zYXRhX2luaXQoJmNtX2E1MTBfc2F0YV9kYXRhKTsKKwlkb3ZlX3NkaW8wX2luaXQoKTsKKwlkb3ZlX3NkaW8xX2luaXQoKTsKKwlkb3ZlX3NwaTBfaW5pdCgpOworCWRvdmVfc3BpMV9pbml0KCk7CisJZG92ZV91YXJ0MF9pbml0KCk7CisJZG92ZV91YXJ0MV9pbml0KCk7CisJZG92ZV9pMmNfaW5pdCgpOworCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKGNtX2E1MTBfc3BpX2ZsYXNoX2luZm8sCisJCQkJQVJSQVlfU0laRShjbV9hNTEwX3NwaV9mbGFzaF9pbmZvKSk7Cit9CisKK01BQ0hJTkVfU1RBUlQoQ01fQTUxMCwgIkNvbXB1bGFiIENNLUE1MTAgQm9hcmQiKQorCS5ib290X3BhcmFtcwk9IDB4MDAwMDAxMDAsCisJLmluaXRfbWFjaGluZQk9IGNtX2E1MTBfaW5pdCwKKwkubWFwX2lvCQk9IGRvdmVfbWFwX2lvLAorCS5pbml0X2lycQk9IGRvdmVfaW5pdF9pcnEsCisJLnRpbWVyCQk9ICZkb3ZlX3RpbWVyLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZG92ZS9pbmNsdWRlL21hY2gvZG92ZS5oIGIvYXJjaC9hcm0vbWFjaC1kb3ZlL2luY2x1ZGUvbWFjaC9kb3ZlLmgKaW5kZXggZjZhMDgzOS4uMjdiNDE0NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kb3ZlL2luY2x1ZGUvbWFjaC9kb3ZlLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1kb3ZlL2luY2x1ZGUvbWFjaC9kb3ZlLmgKQEAgLTEzMSwxNCArMTMxLDIxIEBACiAjZGVmaW5lIERPVkVfUkVTRVRfU0FNUExFX0xPCShET1ZFX01QUF9WSVJUX0JBU0UgfCAweDAxNCkKICNkZWZpbmUgRE9WRV9SRVNFVF9TQU1QTEVfSEkJKERPVkVfTVBQX1ZJUlRfQkFTRSB8IDB4MDE4KQogI2RlZmluZSBET1ZFX0dQSU9fVklSVF9CQVNFCShET1ZFX1NCX1JFR1NfVklSVF9CQVNFIHwgMHhkMDQwMCkKKyNkZWZpbmUgRE9WRV9HUElPMl9WSVJUX0JBU0UgICAgKERPVkVfU0JfUkVHU19WSVJUX0JBU0UgfCAweGU4NDAwKQogI2RlZmluZSBET1ZFX01QUF9HRU5FUkFMX1ZJUlRfQkFTRQkoRE9WRV9TQl9SRUdTX1ZJUlRfQkFTRSB8IDB4ZTgwM2MpCiAjZGVmaW5lICBET1ZFX0FVMV9TUERJRk9fR1BJT19FTgkoMSA8PCAxKQogI2RlZmluZSAgRE9WRV9OQU5EX0dQSU9fRU4JCSgxIDw8IDApCiAjZGVmaW5lIERPVkVfTVBQX0NUUkw0X1ZJUlRfQkFTRQkoRE9WRV9HUElPX1ZJUlRfQkFTRSArIDB4NDApCi0KKyNkZWZpbmUgIERPVkVfU1BJX0dQSU9fU0VMCQkoMSA8PCA1KQorI2RlZmluZSAgRE9WRV9VQVJUMV9HUElPX1NFTAkJKDEgPDwgNCkKKyNkZWZpbmUgIERPVkVfQVUxX0dQSU9fU0VMCQkoMSA8PCAzKQorI2RlZmluZSAgRE9WRV9DQU1fR1BJT19TRUwJCSgxIDw8IDIpCisjZGVmaW5lICBET1ZFX1NEMV9HUElPX1NFTAkJKDEgPDwgMSkKKyNkZWZpbmUgIERPVkVfU0QwX0dQSU9fU0VMCQkoMSA8PCAwKQogCiAvKiBQb3dlciBNYW5hZ2VtZW50ICovCiAjZGVmaW5lIERPVkVfUE1VX1ZJUlRfQkFTRQkoRE9WRV9TQl9SRUdTX1ZJUlRfQkFTRSB8IDB4ZDAwMDApCisjZGVmaW5lIERPVkVfUE1VX1NJR19DVFJMCShET1ZFX1BNVV9WSVJUX0JBU0UgKyAweDgwMmMpCiAKIC8qIFJlYWwgVGltZSBDbG9jayAqLwogI2RlZmluZSBET1ZFX1JUQ19QSFlTX0JBU0UJKERPVkVfU0JfUkVHU19QSFlTX0JBU0UgfCAweGQ4NTAwKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kb3ZlL2luY2x1ZGUvbWFjaC9ncGlvLmggYi9hcmNoL2FybS9tYWNoLWRvdmUvaW5jbHVkZS9tYWNoL2dwaW8uaAppbmRleCAwZWU3MGZmLi4zNDBiYjdhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRvdmUvaW5jbHVkZS9tYWNoL2dwaW8uaAorKysgYi9hcmNoL2FybS9tYWNoLWRvdmUvaW5jbHVkZS9tYWNoL2dwaW8uaApAQCAtMTQsMTIgKzE0LDE0IEBACiAjaW5jbHVkZSA8cGxhdC9ncGlvLmg+CiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZ3Bpby5oPgkJLyogY2Fuc2xlZXAgd3JhcHBlcnMgKi8KIAotI2RlZmluZSBHUElPX01BWAk2NAorI2RlZmluZSBHUElPX01BWAk3MgogCiAjZGVmaW5lIEdQSU9fQkFTRV9MTwkJKERPVkVfR1BJT19WSVJUX0JBU0UgKyAweDAwKQogI2RlZmluZSBHUElPX0JBU0VfSEkJCShET1ZFX0dQSU9fVklSVF9CQVNFICsgMHgyMCkKIAotI2RlZmluZSBHUElPX0JBU0UocGluKQkJKChwaW4gPCAzMikgPyBHUElPX0JBU0VfTE8gOiBHUElPX0JBU0VfSEkpCisjZGVmaW5lIEdQSU9fQkFTRShwaW4pCQkoKHBpbiA8IDMyKSA/IEdQSU9fQkFTRV9MTyA6CQlcCisJCQkJICgocGluIDwgNjQpID8gR1BJT19CQVNFX0hJIDoJCVwKKwkJCQkgIERPVkVfR1BJTzJfVklSVF9CQVNFKSkKIAogI2RlZmluZSBHUElPX09VVChwaW4pCQkoR1BJT19CQVNFKHBpbikgKyAweDAwKQogI2RlZmluZSBHUElPX0lPX0NPTkYocGluKQkoR1BJT19CQVNFKHBpbikgKyAweDA0KQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kb3ZlL21wcC5jIGIvYXJjaC9hcm0vbWFjaC1kb3ZlL21wcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxZGIyYmQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWRvdmUvbXBwLmMKQEAgLTAsMCArMSwyMTIgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLWRvdmUvbXBwLmMKKyAqCisgKiBNUFAgZnVuY3Rpb25zIGZvciBNYXJ2ZWxsIERvdmUgU29DcworICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPG1hY2gvZG92ZS5oPgorCisjaW5jbHVkZSAibXBwLmgiCisKKyNkZWZpbmUgTVBQX05SX1JFR1MgNAorI2RlZmluZSBNUFBfQ1RSTChpKQkoKGkpID09IDMgPwkJCQlcCisJCQkgRE9WRV9NUFBfQ1RSTDRfVklSVF9CQVNFIDoJCVwKKwkJCSBET1ZFX01QUF9WSVJUX0JBU0UgKyAoaSkgKiA0KQorI2RlZmluZSBQTVVfU0lHX1JFR1MgMgorI2RlZmluZSBQTVVfU0lHX0NUUkwoaSkJKERPVkVfUE1VX1NJR19DVFJMICsgKGkpICogNCkKKworc3RydWN0IGRvdmVfbXBwX2dycCB7CisJaW50IHN0YXJ0OworCWludCBlbmQ7Cit9OworCitzdGF0aWMgc3RydWN0IGRvdmVfbXBwX2dycCBkb3ZlX21wcF9ncnBbXSA9IHsKKwlbTVBQXzI0XzM5XSA9IHsKKwkJLnN0YXJ0CT0gMjQsCisJCS5lbmQJPSAzOSwKKwl9LAorCVtNUFBfNDBfNDVdID0geworCQkuc3RhcnQJPSA0MCwKKwkJLmVuZAk9IDQ1LAorCX0sCisJW01QUF80Nl81MV0gPSB7CisJCS5zdGFydAk9IDQwLAorCQkuZW5kCT0gNDUsCisJfSwKKwlbTVBQXzU4XzYxXSA9IHsKKwkJLnN0YXJ0CT0gNTgsCisJCS5lbmQJPSA2MSwKKwl9LAorCVtNUFBfNjJfNjNdID0geworCQkuc3RhcnQJPSA2MiwKKwkJLmVuZAk9IDYzLAorCX0sCit9OworCitzdGF0aWMgdm9pZCBkb3ZlX21wcF9ncGlvX21vZGUoaW50IHN0YXJ0LCBpbnQgZW5kLCBpbnQgZ3Bpb19tb2RlKQoreworCWludCBpOworCisJZm9yIChpID0gc3RhcnQ7IGkgPD0gZW5kOyBpKyspCisJCW9yaW9uX2dwaW9fc2V0X3ZhbGlkKGksIGdwaW9fbW9kZSk7Cit9CisKK3N0YXRpYyB2b2lkIGRvdmVfbXBwX2R1bXBfcmVncyh2b2lkKQoreworI2lmZGVmIERFQlVHCisJaW50IGk7CisKKwlwcl9kZWJ1ZygiTVBQX0NUUkwgcmVnczoiKTsKKwlmb3IgKGkgPSAwOyBpIDwgTVBQX05SX1JFR1M7IGkrKykKKwkJcHJpbnRrKCIgJTA4eCIsIHJlYWRsKE1QUF9DVFJMKGkpKSk7CisJcHJpbnRrKCJcbiIpOworCisJcHJfZGVidWcoIlBNVV9TSUdfQ1RSTCByZWdzOiIpOworCWZvciAoaSA9IDA7IGkgPCBQTVVfU0lHX1JFR1M7IGkrKykKKwkJcHJpbnRrKCIgJTA4eCIsIHJlYWRsKFBNVV9TSUdfQ1RSTChpKSkpOworCXByaW50aygiXG4iKTsKKworCXByX2RlYnVnKCJQTVVfTVBQX0dFTkVSQUxfQ1RSTDogJTA4eFxuIiwgcmVhZGwoRE9WRV9QTVVfTVBQX0dFTkVSQUxfQ1RSTCkpOworCXByX2RlYnVnKCJNUFBfR0VORVJBTDogJTA4eFxuIiwgcmVhZGwoRE9WRV9NUFBfR0VORVJBTF9WSVJUX0JBU0UpKTsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBkb3ZlX21wcF9jZmdfbmZjKGludCBzZWwpCit7CisJdTMyIG1wcF9nZW5fY2ZnID0gcmVhZGwoRE9WRV9NUFBfR0VORVJBTF9WSVJUX0JBU0UpOworCisJbXBwX2dlbl9jZmcgJj0gfjB4MTsKKwltcHBfZ2VuX2NmZyB8PSBzZWw7CisJd3JpdGVsKG1wcF9nZW5fY2ZnLCBET1ZFX01QUF9HRU5FUkFMX1ZJUlRfQkFTRSk7CisKKwlkb3ZlX21wcF9ncGlvX21vZGUoNjQsIDcxLCBHUElPX09VVFBVVF9PSyk7Cit9CisKK3N0YXRpYyB2b2lkIGRvdmVfbXBwX2NmZ19hdTEoaW50IHNlbCkKK3sKKwl1MzIgbXBwX2N0cmw0CQk9IHJlYWRsKERPVkVfTVBQX0NUUkw0X1ZJUlRfQkFTRSk7CisJdTMyIHNzcF9jdHJsMSA9IHJlYWRsKERPVkVfU1NQX0NUUkxfU1RBVFVTXzEpOworCXUzMiBtcHBfZ2VuX2N0cmwgPSByZWFkbChET1ZFX01QUF9HRU5FUkFMX1ZJUlRfQkFTRSk7CisJdTMyIGdsb2JhbF9jZmdfMiA9IHJlYWRsKERPVkVfR0xPQkFMX0NPTkZJR18yKTsKKworCW1wcF9jdHJsNCAmPSB+KERPVkVfQVUxX0dQSU9fU0VMKTsKKwlzc3BfY3RybDEgJj0gfihET1ZFX1NTUF9PTl9BVTEpOworCW1wcF9nZW5fY3RybCAmPSB+KERPVkVfQVUxX1NQRElGT19HUElPX0VOKTsKKwlnbG9iYWxfY2ZnXzIgJj0gfihET1ZFX1RXU0lfT1BUSU9OM19HUElPKTsKKworCWlmICghc2VsIHx8IHNlbCA9PSAweDIpCisJCWRvdmVfbXBwX2dwaW9fbW9kZSg1MiwgNTcsIDApOworCWVsc2UKKwkJZG92ZV9tcHBfZ3Bpb19tb2RlKDUyLCA1NywgR1BJT19PVVRQVVRfT0sgfCBHUElPX0lOUFVUX09LKTsKKworCWlmIChzZWwgJiAweDEpIHsKKwkJZ2xvYmFsX2NmZ18yIHw9IERPVkVfVFdTSV9PUFRJT04zX0dQSU87CisJCWRvdmVfbXBwX2dwaW9fbW9kZSg1NiwgNTcsIDApOworCX0KKwlpZiAoc2VsICYgMHgyKSB7CisJCW1wcF9nZW5fY3RybCB8PSBET1ZFX0FVMV9TUERJRk9fR1BJT19FTjsKKwkJZG92ZV9tcHBfZ3Bpb19tb2RlKDU3LCA1NywgR1BJT19PVVRQVVRfT0sgfCBHUElPX0lOUFVUX09LKTsKKwl9CisJaWYgKHNlbCAmIDB4NCkgeworCQlzc3BfY3RybDEgfD0gRE9WRV9TU1BfT05fQVUxOworCQlkb3ZlX21wcF9ncGlvX21vZGUoNTIsIDU1LCAwKTsKKwl9CisJaWYgKHNlbCAmIDB4OCkKKwkJbXBwX2N0cmw0IHw9IERPVkVfQVUxX0dQSU9fU0VMOworCisJd3JpdGVsKG1wcF9jdHJsNCwgRE9WRV9NUFBfQ1RSTDRfVklSVF9CQVNFKTsKKwl3cml0ZWwoc3NwX2N0cmwxLCBET1ZFX1NTUF9DVFJMX1NUQVRVU18xKTsKKwl3cml0ZWwobXBwX2dlbl9jdHJsLCBET1ZFX01QUF9HRU5FUkFMX1ZJUlRfQkFTRSk7CisJd3JpdGVsKGdsb2JhbF9jZmdfMiwgRE9WRV9HTE9CQUxfQ09ORklHXzIpOworfQorCitzdGF0aWMgdm9pZCBkb3ZlX21wcF9jb25mX2dycChpbnQgbnVtLCBpbnQgc2VsLCB1MzIgKm1wcF9jdHJsKQoreworCWludCBzdGFydCA9IGRvdmVfbXBwX2dycFtudW1dLnN0YXJ0OworCWludCBlbmQgPSBkb3ZlX21wcF9ncnBbbnVtXS5lbmQ7CisJaW50IGdwaW9fbW9kZSA9IHNlbCA/IEdQSU9fT1VUUFVUX09LIHwgR1BJT19JTlBVVF9PSyA6IDA7CisKKwkqbXBwX2N0cmwgJj0gfigweDEgPDwgbnVtKTsKKwkqbXBwX2N0cmwgfD0gc2VsIDw8IG51bTsKKworCWRvdmVfbXBwX2dwaW9fbW9kZShzdGFydCwgZW5kLCBncGlvX21vZGUpOworfQorCit2b2lkIF9faW5pdCBkb3ZlX21wcF9jb25mKHVuc2lnbmVkIGludCAqbXBwX2xpc3QpCit7CisJdTMyIG1wcF9jdHJsW01QUF9OUl9SRUdTXTsKKwl1MzIgcG11X21wcF9jdHJsID0gMDsKKwl1MzIgcG11X3NpZ19jdHJsW1BNVV9TSUdfUkVHU107CisJaW50IGk7CisKKwkvKiBJbml0aWFsaXplIGdwaW9saWIuICovCisJb3Jpb25fZ3Bpb19pbml0KCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTVBQX05SX1JFR1M7IGkrKykKKwkJbXBwX2N0cmxbaV0gPSByZWFkbChNUFBfQ1RSTChpKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgUE1VX1NJR19SRUdTOyBpKyspCisJCXBtdV9zaWdfY3RybFtpXSA9IHJlYWRsKFBNVV9TSUdfQ1RSTChpKSk7CisKKwlwbXVfbXBwX2N0cmwgPSByZWFkbChET1ZFX1BNVV9NUFBfR0VORVJBTF9DVFJMKTsKKworCWRvdmVfbXBwX2R1bXBfcmVncygpOworCisJZm9yICggOyAqbXBwX2xpc3QgIT0gTVBQX0VORDsgbXBwX2xpc3QrKykgeworCQl1bnNpZ25lZCBpbnQgbnVtID0gTVBQX05VTSgqbXBwX2xpc3QpOworCQl1bnNpZ25lZCBpbnQgc2VsID0gTVBQX1NFTCgqbXBwX2xpc3QpOworCQlpbnQgc2hpZnQsIGdwaW9fbW9kZTsKKworCQlpZiAobnVtID4gTVBQX01BWCkgeworCQkJcHJfZXJyKCJkb3ZlOiBpbnZhbGlkIE1QUCBudW1iZXIgKCV1KVxuIiwgbnVtKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKCptcHBfbGlzdCAmIE1QUF9ORkNfTUFTSykgeworCQkJZG92ZV9tcHBfY2ZnX25mYyhzZWwpOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoKm1wcF9saXN0ICYgTVBQX0FVMV9NQVNLKSB7CisJCQlkb3ZlX21wcF9jZmdfYXUxKHNlbCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmICgqbXBwX2xpc3QgJiBNUFBfR1JQX01BU0spIHsKKwkJCWRvdmVfbXBwX2NvbmZfZ3JwKG51bSwgc2VsLCAmbXBwX2N0cmxbM10pOworCQkJY29udGludWU7CisJCX0KKworCQlzaGlmdCA9IChudW0gJiA3KSA8PCAyOworCQlpZiAoKm1wcF9saXN0ICYgTVBQX1BNVV9NQVNLKSB7CisJCQlwbXVfbXBwX2N0cmwgfD0gKDB4MSA8PCBudW0pOworCQkJcG11X3NpZ19jdHJsW251bSAvIDhdICY9IH4oMHhmIDw8IHNoaWZ0KTsKKwkJCXBtdV9zaWdfY3RybFtudW0gLyA4XSB8PSAweGYgPDwgc2hpZnQ7CisJCQlncGlvX21vZGUgPSAwOworCQl9IGVsc2UgeworCQkJbXBwX2N0cmxbbnVtIC8gOF0gJj0gfigweGYgPDwgc2hpZnQpOworCQkJbXBwX2N0cmxbbnVtIC8gOF0gfD0gc2VsIDw8IHNoaWZ0OworCQkJZ3Bpb19tb2RlID0gR1BJT19PVVRQVVRfT0sgfCBHUElPX0lOUFVUX09LOworCQl9CisKKwkJb3Jpb25fZ3Bpb19zZXRfdmFsaWQobnVtLCBncGlvX21vZGUpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBNUFBfTlJfUkVHUzsgaSsrKQorCQl3cml0ZWwobXBwX2N0cmxbaV0sIE1QUF9DVFJMKGkpKTsKKworCWZvciAoaSA9IDA7IGkgPCBQTVVfU0lHX1JFR1M7IGkrKykKKwkJd3JpdGVsKHBtdV9zaWdfY3RybFtpXSwgUE1VX1NJR19DVFJMKGkpKTsKKworCXdyaXRlbChwbXVfbXBwX2N0cmwsIERPVkVfUE1VX01QUF9HRU5FUkFMX0NUUkwpOworCisJZG92ZV9tcHBfZHVtcF9yZWdzKCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRvdmUvbXBwLmggYi9hcmNoL2FybS9tYWNoLWRvdmUvbXBwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE0M2NlNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZG92ZS9tcHAuaApAQCAtMCwwICsxLDIyMCBAQAorI2lmbmRlZiBfX0FSQ0hfRE9WRV9NUFBfQ09ERURfSAorI2RlZmluZSBfX0FSQ0hfRE9WRV9NUFBfQ09ERURfSAorCisjZGVmaW5lIE1QUChfbnVtLCBfbW9kZSwgX3BtdSwgX2dycCwgX2F1MSwgX25mYykgKAlcCisvKiBNUFAvZ3JvdXAgbnVtYmVyICovCQkoKF9udW0pICYgMHhmZikgfAkJXAorLyogTVBQIHNlbGVjdCB2YWx1ZSAqLwkJKCgoX21vZGUpICYgMHhmKSA8PCA4KSB8CVwKKy8qIE1QUCBQTVUgKi8JCQkoKCEhKF9wbXUpKSA8PCAxMikgfAkJXAorLyogZ3JvdXAgZmxhZyAqLwkJKCghIShfZ3JwKSkgPDwgMTMpIHwJCVwKKy8qIEFVMSBmbGFnICovCQkJKCghIShfYXUxKSkgPDwgMTQpIHwJCVwKKy8qIE5GQ0UgZmxhZyAqLwkJCSgoISEoX25mYykpIDw8IDE1KSkKKworI2RlZmluZSBNUFBfTUFYCTcxCisKKyNkZWZpbmUgTVBQX05VTSh4KSAgICAoKHgpICYgMHhmZikKKyNkZWZpbmUgTVBQX1NFTCh4KSAgICAoKCh4KSA+PiA4KSAmIDB4ZikKKworI2RlZmluZSBNUFBfUE1VX01BU0sJCU1QUCgwLCAweDAsIDEsIDAsIDAsIDApCisjZGVmaW5lIE1QUF9HUlBfTUFTSwkJTVBQKDAsIDB4MCwgMCwgMSwgMCwgMCkKKyNkZWZpbmUgTVBQX0FVMV9NQVNLCQlNUFAoMCwgMHgwLCAwLCAwLCAxLCAwKQorI2RlZmluZSBNUFBfTkZDX01BU0sJCU1QUCgwLCAweDAsIDAsIDAsIDAsIDEpCisKKyNkZWZpbmUgTVBQX0VORAkJCU1QUCgweGZmLCAweGYsIDEsIDEsIDEsIDEpCisKKyNkZWZpbmUgTVBQX1BNVV9EUklWRV8wCQkweDEKKyNkZWZpbmUgTVBQX1BNVV9EUklWRV8xCQkweDIKKyNkZWZpbmUgTVBQX1BNVV9TREkJCTB4MworI2RlZmluZSBNUFBfUE1VX0NQVV9QV1JEV04JMHg0CisjZGVmaW5lIE1QUF9QTVVfU1RCWV9QV1JEV04JMHg1CisjZGVmaW5lIE1QUF9QTVVfQ09SRV9QV1JfR09PRAkweDgKKyNkZWZpbmUgTVBQX1BNVV9CQVRfRkFVTFQJMHhhCisjZGVmaW5lIE1QUF9QTVVfRVhUMF9XVQkJMHhiCisjZGVmaW5lIE1QUF9QTVVfRVhUMV9XVQkJMHhjCisjZGVmaW5lIE1QUF9QTVVfRVhUMl9XVQkJMHhkCisjZGVmaW5lIE1QUF9QTVVfQkxJTksJCTB4ZQorI2RlZmluZSBNUFBfUE1VKF9udW0sIF9tb2RlKQlNUFAoKF9udW0pLCBNUFBfUE1VXyMjX21vZGUsIDEsIDAsIDAsIDApCisKKyNkZWZpbmUgTVBQX1BJTihfbnVtLCBfbW9kZSkJTVBQKChfbnVtKSwgKF9tb2RlKSwgMCwgMCwgMCwgMCkKKyNkZWZpbmUgTVBQX0dSUChfZ3JwLCBfbW9kZSkJTVBQKChfZ3JwKSwgKF9tb2RlKSwgMCwgMSwgMCwgMCkKKyNkZWZpbmUgTVBQX0dSUF9BVTEoX21vZGUpCU1QUCgwLCAoX21vZGUpLCAwLCAwLCAxLCAwKQorI2RlZmluZSBNUFBfR1JQX05GQyhfbW9kZSkJTVBQKDAsIChfbW9kZSksIDAsIDAsIDAsIDEpCisKKyNkZWZpbmUgTVBQMF9HUElPMAkJTVBQX1BJTigwLCAweDApCisjZGVmaW5lIE1QUDBfVUEyX1JUU24JCU1QUF9QSU4oMCwgMHgyKQorI2RlZmluZSBNUFAwX1NESU8wX0NECQlNUFBfUElOKDAsIDB4MykKKyNkZWZpbmUgTVBQMF9MQ0QwX1BXTQkJTVBQX1BJTigwLCAweGYpCisKKyNkZWZpbmUgTVBQMV9HUElPMQkJTVBQX1BJTigxLCAweDApCisjZGVmaW5lIE1QUDFfVUEyX0NUU24JCU1QUF9QSU4oMSwgMHgyKQorI2RlZmluZSBNUFAxX1NESU8wX1dQCQlNUFBfUElOKDEsIDB4MykKKyNkZWZpbmUgTVBQMV9MQ0QxX1BXTQkJTVBQX1BJTigxLCAweGYpCisKKyNkZWZpbmUgTVBQMl9HUElPMgkJTVBQX1BJTigyLCAweDApCisjZGVmaW5lIE1QUDJfU0FUQV9QUkVTRU5UCU1QUF9QSU4oMiwgMHgxKQorI2RlZmluZSBNUFAyX1VBMl9UWEQJCU1QUF9QSU4oMiwgMHgyKQorI2RlZmluZSBNUFAyX1NESU8wX0JVU19QT1dFUglNUFBfUElOKDIsIDB4MykKKyNkZWZpbmUgTVBQMl9VQV9SVFNuMQkJTVBQX1BJTigyLCAweDQpCisKKyNkZWZpbmUgTVBQM19HUElPMwkJTVBQX1BJTigzLCAweDApCisjZGVmaW5lIE1QUDNfU0FUQV9BQ1QJCU1QUF9QSU4oMywgMHgxKQorI2RlZmluZSBNUFAzX1VBMl9SWEQJCU1QUF9QSU4oMywgMHgyKQorI2RlZmluZSBNUFAzX1NESU8wX0xFRF9DVFJMCU1QUF9QSU4oMywgMHgzKQorI2RlZmluZSBNUFAzX1VBX0NUU24xCQlNUFBfUElOKDMsIDB4NCkKKyNkZWZpbmUgTVBQM19TUElfTENEX0NTMQlNUFBfUElOKDMsIDB4ZikKKworI2RlZmluZSBNUFA0X0dQSU80CQlNUFBfUElOKDQsIDB4MCkKKyNkZWZpbmUgTVBQNF9VQTNfUlRTbgkJTVBQX1BJTig0LCAweDIpCisjZGVmaW5lIE1QUDRfU0RJTzFfQ0QJCU1QUF9QSU4oNCwgMHgzKQorI2RlZmluZSBNUFA0X1NQSV8xX01JU08JCU1QUF9QSU4oNCwgMHg0KQorCisjZGVmaW5lIE1QUDVfR1BJTzUJCU1QUF9QSU4oNSwgMHgwKQorI2RlZmluZSBNUFA1X1VBM19DVFNuCQlNUFBfUElOKDUsIDB4MikKKyNkZWZpbmUgTVBQNV9TRElPMV9XUAkJTVBQX1BJTig1LCAweDMpCisjZGVmaW5lIE1QUDVfU1BJXzFfQ1MJCU1QUF9QSU4oNSwgMHg0KQorCisjZGVmaW5lIE1QUDZfR1BJTzYJCU1QUF9QSU4oNiwgMHgwKQorI2RlZmluZSBNUFA2X1VBM19UWEQJCU1QUF9QSU4oNiwgMHgyKQorI2RlZmluZSBNUFA2X1NESU8xX0JVU19QT1dFUglNUFBfUElOKDYsIDB4MykKKyNkZWZpbmUgTVBQNl9TUElfMV9NT1NJCQlNUFBfUElOKDYsIDB4NCkKKworI2RlZmluZSBNUFA3X0dQSU83CQlNUFBfUElOKDcsIDB4MCkKKyNkZWZpbmUgTVBQN19VQTNfUlhECQlNUFBfUElOKDcsIDB4MikKKyNkZWZpbmUgTVBQN19TRElPMV9MRURfQ1RSTAlNUFBfUElOKDcsIDB4MykKKyNkZWZpbmUgTVBQN19TUElfMV9TQ0sJCU1QUF9QSU4oNywgMHg0KQorCisjZGVmaW5lIE1QUDhfR1BJTzgJCU1QUF9QSU4oOCwgMHgwKQorI2RlZmluZSBNUFA4X1dEX1JTVF9PVVQJCU1QUF9QSU4oOCwgMHgxKQorCisjZGVmaW5lIE1QUDlfR1BJTzkJCU1QUF9QSU4oOSwgMHgwKQorI2RlZmluZSBNUFA5X1BFWDFfQ0xLUkVRbglNUFBfUElOKDksIDB4NSkKKworI2RlZmluZSBNUFAxMF9HUElPMTAJCU1QUF9QSU4oMTAsIDB4MCkKKyNkZWZpbmUgTVBQMTBfU1NQX1NDTEsJCU1QUF9QSU4oMTAsIDB4NSkKKworI2RlZmluZSBNUFAxMV9HUElPMTEJCU1QUF9QSU4oMTEsIDB4MCkKKyNkZWZpbmUgTVBQMTFfU0FUQV9QUkVTRU5UCU1QUF9QSU4oMTEsIDB4MSkKKyNkZWZpbmUgTVBQMTFfU0FUQV9BQ1QJCU1QUF9QSU4oMTEsIDB4MikKKyNkZWZpbmUgTVBQMTFfU0RJTzBfTEVEX0NUUkwJTVBQX1BJTigxMSwgMHgzKQorI2RlZmluZSBNUFAxMV9TRElPMV9MRURfQ1RSTAlNUFBfUElOKDExLCAweDQpCisjZGVmaW5lIE1QUDExX1BFWDBfQ0xLUkVRbglNUFBfUElOKDExLCAweDUpCisKKyNkZWZpbmUgTVBQMTJfR1BJTzEyCQlNUFBfUElOKDEyLCAweDApCisjZGVmaW5lIE1QUDEyX1NBVEFfQUNUCQlNUFBfUElOKDEyLCAweDEpCisjZGVmaW5lIE1QUDEyX1VBMl9SVFNuCQlNUFBfUElOKDEyLCAweDIpCisjZGVmaW5lIE1QUDEyX0FEMF9JMlNfRVhUX01DTEsJTVBQX1BJTigxMiwgMHgzKQorI2RlZmluZSBNUFAxMl9TRElPMV9DRAkJTVBQX1BJTigxMiwgMHg0KQorCisjZGVmaW5lIE1QUDEzX0dQSU8xMwkJTVBQX1BJTigxMywgMHgwKQorI2RlZmluZSBNUFAxM19VQTJfQ1RTbgkJTVBQX1BJTigxMywgMHgyKQorI2RlZmluZSBNUFAxM19BRDFfSTJTX0VYVF9NQ0xLCU1QUF9QSU4oMTMsIDB4MykKKyNkZWZpbmUgTVBQMTNfU0RJTzFXUAkJTVBQX1BJTigxMywgMHg0KQorI2RlZmluZSBNUFAxM19TU1BfRVhUQ0xLCU1QUF9QSU4oMTMsIDB4NSkKKworI2RlZmluZSBNUFAxNF9HUElPMTQJCU1QUF9QSU4oMTQsIDB4MCkKKyNkZWZpbmUgTVBQMTRfVUEyX1RYRAkJTVBQX1BJTigxNCwgMHgyKQorI2RlZmluZSBNUFAxNF9TRElPMV9CVVNfUE9XRVIJTVBQX1BJTigxNCwgMHg0KQorI2RlZmluZSBNUFAxNF9TU1BfUlhECQlNUFBfUElOKDE0LCAweDUpCisKKyNkZWZpbmUgTVBQMTVfR1BJTzE1CQlNUFBfUElOKDE1LCAweDApCisjZGVmaW5lIE1QUDE1X1VBMl9SWEQJCU1QUF9QSU4oMTUsIDB4MikKKyNkZWZpbmUgTVBQMTVfU0RJTzFfTEVEX0NUUkwJTVBQX1BJTigxNSwgMHg0KQorI2RlZmluZSBNUFAxNV9TU1BfU0ZSTQkJTVBQX1BJTigxNSwgMHg1KQorCisjZGVmaW5lIE1QUDE2X0dQSU8xNgkJTVBQX1BJTigxNiwgMHgwKQorI2RlZmluZSBNUFAxNl9VQTNfUlRTbgkJTVBQX1BJTigxNiwgMHgyKQorI2RlZmluZSBNUFAxNl9TRElPMF9DRAkJTVBQX1BJTigxNiwgMHgzKQorI2RlZmluZSBNUFAxNl9TUElfTENEX0NTMQlNUFBfUElOKDE2LCAweDQpCisjZGVmaW5lIE1QUDE2X0FDOTdfU0RBVEFfSU4xCU1QUF9QSU4oMTYsIDB4NSkKKworI2RlZmluZSBNUFAxN19HUElPMTcJCU1QUF9QSU4oMTcsIDB4MCkKKyNkZWZpbmUgTVBQMTdfQUM5N19TWVNDTEtfT1VUCU1QUF9QSU4oMTcsIDB4MSkKKyNkZWZpbmUgTVBQMTdfVUEzX0NUU24JCU1QUF9QSU4oMTcsIDB4MikKKyNkZWZpbmUgTVBQMTdfU0RJTzBfV1AJCU1QUF9QSU4oMTcsIDB4MykKKyNkZWZpbmUgTVBQMTdfVFdfU0RBMgkJTVBQX1BJTigxNywgMHg0KQorI2RlZmluZSBNUFAxN19BQzk3X1NEQVRBX0lOMglNUFBfUElOKDE3LCAweDUpCisKKyNkZWZpbmUgTVBQMThfR1BJTzE4CQlNUFBfUElOKDE4LCAweDApCisjZGVmaW5lIE1QUDE4X1VBM19UWEQJCU1QUF9QSU4oMTgsIDB4MikKKyNkZWZpbmUgTVBQMThfU0RJTzBfQlVTX1BPV0VSCU1QUF9QSU4oMTgsIDB4MykKKyNkZWZpbmUgTVBQMThfTENEMF9QV00JCU1QUF9QSU4oMTgsIDB4NCkKKyNkZWZpbmUgTVBQMThfQUNfU0RBVEFfSU4zCU1QUF9QSU4oMTgsIDB4NSkKKworI2RlZmluZSBNUFAxOV9HUElPMTkJCU1QUF9QSU4oMTksIDB4MCkKKyNkZWZpbmUgTVBQMTlfVUEzX1JYRAkJTVBQX1BJTigxOSwgMHgyKQorI2RlZmluZSBNUFAxOV9TRElPMF9MRURfQ1RSTAlNUFBfUElOKDE5LCAweDMpCisjZGVmaW5lIE1QUDE5X1RXX1NDSzIJCU1QUF9QSU4oMTksIDB4NCkKKworI2RlZmluZSBNUFAyMF9HUElPMjAJCU1QUF9QSU4oMjAsIDB4MCkKKyNkZWZpbmUgTVBQMjBfQUM5N19TWVNDTEtfT1VUCU1QUF9QSU4oMjAsIDB4MSkKKyNkZWZpbmUgTVBQMjBfU1BJX0xDRF9NSVNPCU1QUF9QSU4oMjAsIDB4MikKKyNkZWZpbmUgTVBQMjBfU0RJTzFfQ0QJCU1QUF9QSU4oMjAsIDB4MykKKyNkZWZpbmUgTVBQMjBfU0RJTzBfQ0QJCU1QUF9QSU4oMjAsIDB4NSkKKyNkZWZpbmUgTVBQMjBfU1BJXzFfTUlTTwlNUFBfUElOKDIwLCAweDYpCisKKyNkZWZpbmUgTVBQMjFfR1BJTzIxCQlNUFBfUElOKDIxLCAweDApCisjZGVmaW5lIE1QUDIxX1VBMV9SVFNuCQlNUFBfUElOKDIxLCAweDEpCisjZGVmaW5lIE1QUDIxX1NQSV9MQ0RfQ1MwCU1QUF9QSU4oMjEsIDB4MikKKyNkZWZpbmUgTVBQMjFfU0RJTzFfV1AJCU1QUF9QSU4oMjEsIDB4MykKKyNkZWZpbmUgTVBQMjFfU1NQX1NGUk0JCU1QUF9QSU4oMjEsIDB4NCkKKyNkZWZpbmUgTVBQMjFfU0RJTzBfV1AJCU1QUF9QSU4oMjEsIDB4NSkKKyNkZWZpbmUgTVBQMjFfU1BJXzFfQ1MJCU1QUF9QSU4oMjEsIDB4NikKKworI2RlZmluZSBNUFAyMl9HUElPMjIJCU1QUF9QSU4oMjIsIDB4MCkKKyNkZWZpbmUgTVBQMjJfVUExX0NUU24JCU1QUF9QSU4oMjIsIDB4MSkKKyNkZWZpbmUgTVBQMjJfU1BJX0xDRF9NT1NJCU1QUF9QSU4oMjIsIDB4MikKKyNkZWZpbmUgTVBQMjJfU0RJTzFfQlVTX1BPV0VSCU1QUF9QSU4oMjIsIDB4MykKKyNkZWZpbmUgTVBQMjJfU1NQX1RYRAkJTVBQX1BJTigyMiwgMHg0KQorI2RlZmluZSBNUFAyMl9TRElPMF9CVVNfUE9XRVIJTVBQX1BJTigyMiwgMHg1KQorI2RlZmluZSBNUFAyMl9TUElfMV9NT1NJCU1QUF9QSU4oMjIsIDB4NikKKworI2RlZmluZSBNUFAyM19HUElPMjMJCU1QUF9QSU4oMjMsIDB4MCkKKyNkZWZpbmUgTVBQMjNfU1BJX0xDRF9TQ0sJTVBQX1BJTigyMywgMHgyKQorI2RlZmluZSBNUFAyM19TRElPMV9MRURfQ1RSTAlNUFBfUElOKDIzLCAweDMpCisjZGVmaW5lIE1QUDIzX1NTUF9TQ0xLCQlNUFBfUElOKDIzLCAweDQpCisjZGVmaW5lIE1QUDIzX1NESU8wX0xFRF9DVFJMCU1QUF9QSU4oMjMsIDB4NSkKKyNkZWZpbmUgTVBQMjNfU1BJXzFfU0NLCQlNUFBfUElOKDIzLCAweDYpCisKKy8qIGZvciBNUFAgZ3JvdXBzIF9udW0gaXMgYSBncm91cCBpbmRleCAqLworZW51bSBkb3ZlX21wcF9ncnBfaWR4IHsKKwlNUFBfMjRfMzkgPSAyLAorCU1QUF80MF80NSA9IDAsCisJTVBQXzQ2XzUxID0gMSwKKwlNUFBfNThfNjEgPSA1LAorCU1QUF82Ml82MyA9IDQsCit9OworCisjZGVmaW5lIE1QUDI0XzM5X0dQSU8JCU1QUF9HUlAoTVBQXzI0XzM5LCAweDEpCisjZGVmaW5lIE1QUDI0XzM5X0NBTQkJTVBQX0dSUChNUFBfMjRfMzksIDB4MCkKKworI2RlZmluZSBNUFA0MF80NV9HUElPCQlNUFBfR1JQKE1QUF80MF80NSwgMHgxKQorI2RlZmluZSBNUFA0MF80NV9TRDAJCU1QUF9HUlAoTVBQXzQwXzQ1LCAweDApCisKKyNkZWZpbmUgTVBQNDZfNTFfR1BJTwkJTVBQX0dSUChNUFBfNDZfNTEsIDB4MSkKKyNkZWZpbmUgTVBQNDZfNTFfU0QxCQlNUFBfR1JQKE1QUF80Nl81MSwgMHgwKQorCisjZGVmaW5lIE1QUDU4XzYxX0dQSU8JCU1QUF9HUlAoTVBQXzU4XzYxLCAweDEpCisjZGVmaW5lIE1QUDU4XzYxX1NQSQkJTVBQX0dSUChNUFBfNThfNjEsIDB4MCkKKworI2RlZmluZSBNUFA2Ml82M19HUElPCQlNUFBfR1JQKE1QUF82Ml82MywgMHgxKQorI2RlZmluZSBNUFA2Ml82M19VQTEJCU1QUF9HUlAoTVBQXzYyXzYzLCAweDApCisKKy8qIFRoZSBNUFBbNjQ6NzFdIGNvbnRyb2wgZGlmZmVycyBmcm9tIG90aGVyIGdyb3VwcyAqLworI2RlZmluZSBNUFA2NF83MV9HUE8JCU1QUF9HUlBfTkZDKDB4MSkKKyNkZWZpbmUgTVBQNjRfNzFfTkZDCQlNUFBfR1JQX05GQygweDApCisKKy8qCisgKiBUaGUgTVBQWzUyOjU3XSBmdW5jdGlvbmFsaXR5IGlzIGVuY29kZWQgYnkgNCBiaXRzIGluIGRpZmZlcmVudAorICogcmVnaXN0ZXJzLiBUaGUgX251bSBmaWVsZCBpbiB0aGlzIGNhc2UgZW5jb2RlcyB0aG9zZSBiaXRzIGluCisgKiBjb3JyZXNwb2RlbmNlIHdpdGggVGFibGUgMTM1IG9mIDg4QVA1MTAgRnVuY3Rpb25hbCBzcGVjaWZpY2F0aW9uCisgKi8KKyNkZWZpbmUgTVBQNTJfNTdfQVUxCQlNUFBfR1JQX0FVMSgweDApCisjZGVmaW5lIE1QUDUyXzU3X0FVMV9HUElPNTcJTVBQX0dSUF9BVTEoMHgyKQorI2RlZmluZSBNUFA1Ml81N19HUElPCQlNUFBfR1JQX0FVMSgweGEpCisjZGVmaW5lIE1QUDUyXzU3X1RXX0dQSU8JTVBQX0dSUF9BVTEoMHhiKQorI2RlZmluZSBNUFA1Ml81N19BVTFfU1NQCU1QUF9HUlBfQVUxKDB4YykKKyNkZWZpbmUgTVBQNTJfNTdfU1NQX0dQSU8JTVBQX0dSUF9BVTEoMHhlKQorI2RlZmluZSBNUFA1Ml81N19TU1BfVFcJCU1QUF9HUlBfQVUxKDB4ZikKKwordm9pZCBkb3ZlX21wcF9jb25mKHVuc2lnbmVkIGludCAqbXBwX2xpc3QpOworCisjZW5kaWYJLyogX19BUkNIX0RPVkVfTVBQX0NPREVEX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9jbG9jay5jCmluZGV4IGVmMDZjNjYuLmNhNGRlNzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY2xvY2suYwpAQCAtMTksMTAgKzE5LDEwIEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsa2Rldi5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCi0jaW5jbHVkZSA8YXNtL2Nsa2Rldi5oPgogI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgogCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L0tjb25maWcgYi9hcmNoL2FybS9tYWNoLWlteC9LY29uZmlnCmluZGV4IDE5N2Y5ZTIuLjE3ZDJlNjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvS2NvbmZpZwpAQCAtMSwxMyArMSwzNyBAQAogY29uZmlnIElNWF9IQVZFX0RNQV9WMQogCWJvb2wKIAotaWYgQVJDSF9NWDEKLQogY29uZmlnIFNPQ19JTVgxCisJYm9vbAogCXNlbGVjdCBDUFVfQVJNOTIwVAogCXNlbGVjdCBJTVhfSEFWRV9ETUFfVjEKIAlzZWxlY3QgSU1YX0hBVkVfSU9NVVhfVjEKKwlzZWxlY3QgTVhDX0FWSUMKKworY29uZmlnIFNPQ19JTVgyMQogCWJvb2wKKwlzZWxlY3QgQ1BVX0FSTTkyNlQKKwlzZWxlY3QgQVJDSF9NWENfQVVETVVYX1YxCisJc2VsZWN0IElNWF9IQVZFX0RNQV9WMQorCXNlbGVjdCBJTVhfSEFWRV9JT01VWF9WMQorCXNlbGVjdCBNWENfQVZJQworCitjb25maWcgU09DX0lNWDI1CisJYm9vbAorCXNlbGVjdCBDUFVfQVJNOTI2VAorCXNlbGVjdCBBUkNIX01YQ19BVURNVVhfVjIKKwlzZWxlY3QgQVJDSF9NWENfSU9NVVhfVjMKKwlzZWxlY3QgTVhDX0FWSUMKKworY29uZmlnIFNPQ19JTVgyNworCWJvb2wKKwlzZWxlY3QgQ1BVX0FSTTkyNlQKKwlzZWxlY3QgQVJDSF9NWENfQVVETVVYX1YxCisJc2VsZWN0IElNWF9IQVZFX0RNQV9WMQorCXNlbGVjdCBJTVhfSEFWRV9JT01VWF9WMQorCXNlbGVjdCBNWENfQVZJQworCitpZiBBUkNIX01YMQogCiBjb21tZW50ICJNWDEgcGxhdGZvcm1zOiIKIGNvbmZpZyBNQUNIX01YTEFEUwpAQCAtMzEsMzMgKzU1LDE3IEBACiAKIGlmIEFSQ0hfTVgyCiAKLWNvbmZpZyBTT0NfSU1YMjEKLQlzZWxlY3QgQ1BVX0FSTTkyNlQKLQlzZWxlY3QgQVJDSF9NWENfQVVETVVYX1YxCi0Jc2VsZWN0IElNWF9IQVZFX0RNQV9WMQotCXNlbGVjdCBJTVhfSEFWRV9JT01VWF9WMQotCWJvb2wKLQotY29uZmlnIFNPQ19JTVgyNwotCXNlbGVjdCBDUFVfQVJNOTI2VAotCXNlbGVjdCBBUkNIX01YQ19BVURNVVhfVjEKLQlzZWxlY3QgSU1YX0hBVkVfRE1BX1YxCi0Jc2VsZWN0IElNWF9IQVZFX0lPTVVYX1YxCi0JYm9vbAotCiBjaG9pY2UKIAlwcm9tcHQgIkNQVXM6IgogCWRlZmF1bHQgTUFDSF9NWDIxCiAKIGNvbmZpZyBNQUNIX01YMjEKIAlib29sICJpLk1YMjEgc3VwcG9ydCIKLQlzZWxlY3QgU09DX0lNWDIxCiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIEZyZWVzY2FsZSdzIE1YMiBiYXNlZCBpLk1YMjEgcHJvY2Vzc29yLgogCiBjb25maWcgTUFDSF9NWDI3CiAJYm9vbCAiaS5NWDI3IHN1cHBvcnQiCi0Jc2VsZWN0IFNPQ19JTVgyNwogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBGcmVlc2NhbGUncyBNWDIgYmFzZWQgaS5NWDI3IHByb2Nlc3Nvci4KIApAQCAtNzEsNyArNzksMTAgQEAKIAogY29uZmlnIE1BQ0hfTVgyMUFEUwogCWJvb2wgIk1YMjFBRFMgcGxhdGZvcm0iCisJc2VsZWN0IFNPQ19JTVgyMQorCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9JTVhfRkIKIAlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fSU1YX1VBUlQKKwlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fTVhDX01NQwogCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9NWENfTkFORAogCWhlbHAKIAkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgTVgyMUFEUyBwbGF0Zm9ybS4gVGhpcyBpbmNsdWRlcyBzcGVjaWZpYwpAQCAtNzksMjQgKzkwLDc5IEBACiAKIGVuZGlmCiAKK2lmIEFSQ0hfTVgyNQorCitjb21tZW50ICJNWDI1IHBsYXRmb3JtczoiCisKK2NvbmZpZyBNQUNIX01YMjVfM0RTCisJYm9vbCAiU3VwcG9ydCBNWDI1UERLICgzRFMpIFBsYXRmb3JtIgorCXNlbGVjdCBTT0NfSU1YMjUKKwlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fRlNMX1VTQjJfVURDCisJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0lNWDJfV0RUCisJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0lNWERJX1JUQworCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9JTVhfRkIKKwlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fSU1YX0tFWVBBRAorCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9JTVhfVUFSVAorCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9NWENfRUhDSQorCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9NWENfTkFORAorCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9TREhDSV9FU0RIQ19JTVgKKworY29uZmlnIE1BQ0hfRVVLUkVBX0NQVUlNWDI1CisJYm9vbCAiU3VwcG9ydCBFdWtyZWEgQ1BVSU1YMjUgUGxhdGZvcm0iCisJc2VsZWN0IFNPQ19JTVgyNQorCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9GTEVYQ0FOCisJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0ZTTF9VU0IyX1VEQworCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9JTVhESV9SVEMKKwlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fSU1YX0ZCCisJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0lNWF9JMkMKKwlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fSU1YX1VBUlQKKwlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fTVhDX0VIQ0kKKwlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fTVhDX05BTkQKKwlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fU0RIQ0lfRVNESENfSU1YCisJc2VsZWN0IE1YQ19VTFBJIGlmIFVTQl9VTFBJCisKK2Nob2ljZQorCXByb21wdCAiQmFzZWJvYXJkIgorCWRlcGVuZHMgb24gTUFDSF9FVUtSRUFfQ1BVSU1YMjUKKwlkZWZhdWx0IE1BQ0hfRVVLUkVBX01CSU1YU0QyNV9CQVNFQk9BUkQKKworY29uZmlnIE1BQ0hfRVVLUkVBX01CSU1YU0QyNV9CQVNFQk9BUkQKKwlib29sICJFdWtyZWEgTUJJTVhTRCBkZXZlbG9wbWVudCBib2FyZCIKKwlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fSU1YX1NTSQorCWhlbHAKKwkgIFRoaXMgYWRkcyBib2FyZCBzcGVjaWZpYyBkZXZpY2VzIHRoYXQgY2FuIGJlIGZvdW5kIG9uIEV1a3JlYSdzCisJICBNQklNWFNEIGV2YWx1YXRpb24gYm9hcmQuCisKK2VuZGNob2ljZQorCitlbmRpZgorCiBpZiBNQUNIX01YMjcKIAogY29tbWVudCAiTVgyNyBwbGF0Zm9ybXM6IgogCiBjb25maWcgTUFDSF9NWDI3QURTCiAJYm9vbCAiTVgyN0FEUyBwbGF0Zm9ybSIKKwlzZWxlY3QgU09DX0lNWDI3CisJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0lNWF9GQgogCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9JTVhfSTJDCiAJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0lNWF9VQVJUCisJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX01YQ19NTUMKIAlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fTVhDX05BTkQKKwlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fTVhDX1cxCiAJaGVscAogCSAgSW5jbHVkZSBzdXBwb3J0IGZvciBNWDI3QURTIHBsYXRmb3JtLiBUaGlzIGluY2x1ZGVzIHNwZWNpZmljCiAJICBjb25maWd1cmF0aW9ucyBmb3IgdGhlIGJvYXJkIGFuZCBpdHMgcGVyaXBoZXJhbHMuCiAKIGNvbmZpZyBNQUNIX1BDTTAzOAogCWJvb2wgIlBoeXRlYyBwaHlDT1JFLWkuTVgyNyBDUFUgbW9kdWxlIChwY20wMzgpIgorCXNlbGVjdCBTT0NfSU1YMjcKKwlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fSU1YMl9XRFQKIAlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fSU1YX0kyQwogCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9JTVhfVUFSVAorCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9NWENfRUhDSQogCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9NWENfTkFORAorCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9NWENfVzEKIAlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fU1BJX0lNWAogCXNlbGVjdCBNWENfVUxQSSBpZiBVU0JfVUxQSQogCWhlbHAKQEAgLTEwOSw4ICsxNzUsOSBAQAogCWRlZmF1bHQgTUFDSF9QQ005NzBfQkFTRUJPQVJECiAKIGNvbmZpZyBNQUNIX1BDTTk3MF9CQVNFQk9BUkQKLQlwcm9tcHQgIlBIWVRFQyBQQ005NzAgZGV2ZWxvcG1lbnQgYm9hcmQiCi0JYm9vbAorCWJvb2wgIlBIWVRFQyBQQ005NzAgZGV2ZWxvcG1lbnQgYm9hcmQiCisJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0lNWF9GQgorCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9NWENfTU1DCiAJaGVscAogCSAgVGhpcyBhZGRzIGJvYXJkIHNwZWNpZmljIGRldmljZXMgdGhhdCBjYW4gYmUgZm91bmQgb24gUGh5dGVjJ3MKIAkgIFBDTTk3MCBldmFsdWF0aW9uIGJvYXJkLgpAQCAtMTE5LDkgKzE4NiwxNCBAQAogCiBjb25maWcgTUFDSF9DUFVJTVgyNwogCWJvb2wgIkV1a3JlYSBDUFVJTVgyNyBtb2R1bGUiCisJc2VsZWN0IFNPQ19JTVgyNworCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9GU0xfVVNCMl9VREMKKwlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fSU1YMl9XRFQKIAlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fSU1YX0kyQwogCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9JTVhfVUFSVAorCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9NWENfRUhDSQogCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9NWENfTkFORAorCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9NWENfVzEKIAlzZWxlY3QgTVhDX1VMUEkgaWYgVVNCX1VMUEkKIAloZWxwCiAJICBJbmNsdWRlIHN1cHBvcnQgZm9yIEV1a3JlYSBDUFVJTVgyNyBwbGF0Zm9ybS4gVGhpcyBpbmNsdWRlcwpAQCAtMTMwLDYgKzIwMiw3IEBACiBjb25maWcgTUFDSF9FVUtSRUFfQ1BVSU1YMjdfVVNFU0RIQzIKIAlib29sICJDUFVJTVgyNyBpbnRlZ3JhdGVzIFNESEMyIG1vZHVsZSIKIAlkZXBlbmRzIG9uIE1BQ0hfQ1BVSU1YMjcKKwlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fTVhDX01NQwogCWhlbHAKIAkgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciB0aGUgaW50ZXJuYWwgU0RIQzIgdXNlZCBvbiBDUFVJTVgyNwogCSAgZm9yIHdpZmkgb3IgZU1NQy4KQEAgLTE0OCw4ICsyMjEsMTEgQEAKIAogY29uZmlnIE1BQ0hfRVVLUkVBX01CSU1YMjdfQkFTRUJPQVJECiAJYm9vbCAiRXVrcmVhIE1CSU1YMjcgZGV2ZWxvcG1lbnQgYm9hcmQiCisJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0lNWF9GQgorCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9JTVhfS0VZUEFECiAJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0lNWF9TU0kKIAlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fSU1YX1VBUlQKKwlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fTVhDX01NQwogCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9TUElfSU1YCiAJaGVscAogCSAgVGhpcyBhZGRzIGJvYXJkIHNwZWNpZmljIGRldmljZXMgdGhhdCBjYW4gYmUgZm91bmQgb24gRXVrcmVhJ3MKQEAgLTE1OSwxNSArMjM1LDI2IEBACiAKIGNvbmZpZyBNQUNIX01YMjdfM0RTCiAJYm9vbCAiTVgyN1BESyBwbGF0Zm9ybSIKKwlzZWxlY3QgU09DX0lNWDI3CisJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0ZTTF9VU0IyX1VEQworCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9JTVgyX1dEVAorCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9JTVhfS0VZUEFECiAJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0lNWF9VQVJUCisJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX01YQ19FSENJCisJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX01YQ19NTUMKKwlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fU1BJX0lNWAorCXNlbGVjdCBNWENfVUxQSSBpZiBVU0JfVUxQSQogCWhlbHAKIAkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgTVgyN1BESyBwbGF0Zm9ybS4gVGhpcyBpbmNsdWRlcyBzcGVjaWZpYwogCSAgY29uZmlndXJhdGlvbnMgZm9yIHRoZSBib2FyZCBhbmQgaXRzIHBlcmlwaGVyYWxzLgogCiBjb25maWcgTUFDSF9JTVgyN19WSVNTVFJJTV9NMTAKIAlib29sICJWaXN0YSBTaWxpY29uIGkuTVgyNyBWaXNzdHJpbV9tMTAiCisJc2VsZWN0IFNPQ19JTVgyNwogCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9JTVhfSTJDCiAJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0lNWF9VQVJUCisJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX01YQ19NTUMKKwlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fTVhDX0VIQ0kKIAloZWxwCiAJICBJbmNsdWRlIHN1cHBvcnQgZm9yIFZpc3N0cmltX20xMCBwbGF0Zm9ybSBhbmQgaXRzIGRpZmZlcmVudCB2YXJpYW50cy4KIAkgIFRoaXMgaW5jbHVkZXMgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgZm9yIHRoZSBib2FyZCBhbmQgaXRzCkBAIC0xNzUsNiArMjYyLDcgQEAKIAogY29uZmlnIE1BQ0hfSU1YMjdMSVRFCiAJYm9vbCAiTG9naWNQRCBNWDI3IExJVEVLSVQgcGxhdGZvcm0iCisJc2VsZWN0IFNPQ19JTVgyNwogCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9JTVhfVUFSVAogCWhlbHAKIAkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgTVgyNyBMSVRFS0lUIHBsYXRmb3JtLiBUaGlzIGluY2x1ZGVzIHNwZWNpZmljCkBAIC0xODIsMTAgKzI3MCwxNyBAQAogCiBjb25maWcgTUFDSF9QQ0ExMDAKIAlib29sICJQaHl0ZWMgcGh5Q0FSRC1zIChwY2ExMDApIgorCXNlbGVjdCBTT0NfSU1YMjcKKwlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fRlNMX1VTQjJfVURDCisJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0lNWDJfV0RUCisJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0lNWF9GQgogCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9JTVhfSTJDCiAJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0lNWF9TU0kKIAlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fSU1YX1VBUlQKKwlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fTVhDX0VIQ0kKKwlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fTVhDX01NQwogCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9NWENfTkFORAorCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9NWENfVzEKIAlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fU1BJX0lNWAogCXNlbGVjdCBNWENfVUxQSSBpZiBVU0JfVUxQSQogCWhlbHAKQEAgLTE5NCw4ICsyODksMTEgQEAKIAogY29uZmlnIE1BQ0hfTVhUX1RENjAKIAlib29sICJNYXh0cmFjayBpLU1YVCBURDYwIgorCXNlbGVjdCBTT0NfSU1YMjcKKwlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fSU1YX0ZCCiAJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0lNWF9JMkMKIAlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fSU1YX1VBUlQKKwlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fTVhDX01NQwogCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9NWENfTkFORAogCWhlbHAKIAkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgaS1NWFQgKGFrYSB0ZDYwKSBwbGF0Zm9ybS4gVGhpcwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLWlteC9NYWtlZmlsZQppbmRleCA1NTgyNjkyLi43NzEwMGJmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLWlteC9NYWtlZmlsZQpAQCAtNCwxMyArNCwxMyBAQAogCiAjIE9iamVjdCBmaWxlIGxpc3RzLgogCi1vYmoteQk6PSAgZGV2aWNlcy5vCi0KIG9iai0kKENPTkZJR19JTVhfSEFWRV9ETUFfVjEpICs9IGRtYS12MS5vCiAKIG9iai0kKENPTkZJR19BUkNIX01YMSkgKz0gY2xvY2staW14MS5vIG1tLWlteDEubwogb2JqLSQoQ09ORklHX01BQ0hfTVgyMSkgKz0gY2xvY2staW14MjEubyBtbS1pbXgyMS5vCiAKK29iai0kKENPTkZJR19BUkNIX01YMjUpICs9IGNsb2NrLWlteDI1Lm8gbW0taW14MjUubworCiBvYmotJChDT05GSUdfTUFDSF9NWDI3KSArPSBjcHUtaW14MjcubyBwbS1pbXgyNy5vCiBvYmotJChDT05GSUdfTUFDSF9NWDI3KSArPSBjbG9jay1pbXgyNy5vIG1tLWlteDI3Lm8KIApAQCAtMjIsNiArMjIsMTAgQEAKIAogb2JqLSQoQ09ORklHX01BQ0hfTVgyMUFEUykgKz0gbWFjaC1teDIxYWRzLm8KIAorb2JqLSQoQ09ORklHX01BQ0hfTVgyNV8zRFMpICs9IG1hY2gtbXgyNV8zZHMubworb2JqLSQoQ09ORklHX01BQ0hfRVVLUkVBX0NQVUlNWDI1KSArPSBtYWNoLWV1a3JlYV9jcHVpbXgyNS5vCitvYmotJChDT05GSUdfTUFDSF9FVUtSRUFfTUJJTVhTRDI1X0JBU0VCT0FSRCkgKz0gZXVrcmVhX21iaW14c2QyNS1iYXNlYm9hcmQubworCiBvYmotJChDT05GSUdfTUFDSF9NWDI3QURTKSArPSBtYWNoLW14MjdhZHMubwogb2JqLSQoQ09ORklHX01BQ0hfUENNMDM4KSArPSBtYWNoLXBjbTAzOC5vCiBvYmotJChDT05GSUdfTUFDSF9QQ005NzBfQkFTRUJPQVJEKSArPSBwY205NzAtYmFzZWJvYXJkLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L01ha2VmaWxlLmJvb3QgYi9hcmNoL2FybS9tYWNoLWlteC9NYWtlZmlsZS5ib290CmluZGV4IDc5ODhhODUuLjM5NTNkNjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L01ha2VmaWxlLmJvb3QKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvTWFrZWZpbGUuYm9vdApAQCAtNiw2ICs2LDEwIEBACiBwYXJhbXNfcGh5cy0kKENPTkZJR19NQUNIX01YMjEpCTo9IDB4QzAwMDAxMDAKIGluaXRyZF9waHlzLSQoQ09ORklHX01BQ0hfTVgyMSkJOj0gMHhDMDgwMDAwMAogCit6cmVsYWRkci0kKENPTkZJR19BUkNIX01YMjUpCTo9IDB4ODAwMDgwMDAKK3BhcmFtc19waHlzLSQoQ09ORklHX0FSQ0hfTVgyNSkJOj0gMHg4MDAwMDEwMAoraW5pdHJkX3BoeXMtJChDT05GSUdfQVJDSF9NWDI1KQk6PSAweDgwODAwMDAwCisKIHpyZWxhZGRyLSQoQ09ORklHX01BQ0hfTVgyNykJOj0gMHhBMDAwODAwMAogcGFyYW1zX3BoeXMtJChDT05GSUdfTUFDSF9NWDI3KQk6PSAweEEwMDAwMTAwCiBpbml0cmRfcGh5cy0kKENPTkZJR19NQUNIX01YMjcpCTo9IDB4QTA4MDAwMDAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L2Nsb2NrLWlteDEuYyBiL2FyY2gvYXJtL21hY2gtaW14L2Nsb2NrLWlteDEuYwppbmRleCBkYWNhMzBiLi4zOTM4YTU2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9jbG9jay1pbXgxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvY2xvY2staW14MS5jCkBAIC0yMiw4ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KLQotI2luY2x1ZGUgPGFzbS9jbGtkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGtkZXYuaD4KIAogI2luY2x1ZGUgPG1hY2gvY2xvY2suaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9jbG9jay1pbXgyMS5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvY2xvY2staW14MjEuYwppbmRleCBjZjE1ZWE1Li5iZjMwYThjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9jbG9jay1pbXgyMS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L2Nsb2NrLWlteDIxLmMKQEAgLTIxLDExICsyMSwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvY2xrZGV2Lmg+CiAKICNpbmNsdWRlIDxtYWNoL2Nsb2NrLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+Ci0jaW5jbHVkZSA8YXNtL2Nsa2Rldi5oPgogI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgogCiAjZGVmaW5lIElPX0FERFJfQ0NNKG9mZikJKE1YMjFfSU9fQUREUkVTUyhNWDIxX0NDTV9CQVNFX0FERFIgKyAob2ZmKSkpCkBAIC0xMTg1LDcgKzExODUsNyBAQAogCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiYnJvbSIsIGJyb21fY2xrKQogCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiZW1tYSIsIGVtbWFfY2xrWzBdKQogCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAic2xjZGMiLCBzbGNkY19jbGtbMF0pCi0JX1JFR0lTVEVSX0NMT0NLKCJpbXgtd2R0LjAiLCBOVUxMLCB3ZG9nX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImlteDItd2R0LjAiLCBOVUxMLCB3ZG9nX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImdwaW8iLCBncGlvX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soImlteC1pMmMuMCIsIE5VTEwsIGkyY19jbGspCiAJX1JFR0lTVEVSX0NMT0NLKCJteGMta2V5cGFkIiwgTlVMTCwga3BwX2NsaykKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L2Nsb2NrLWlteDI1LmMgYi9hcmNoL2FybS9tYWNoLWlteC9jbG9jay1pbXgyNS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhYTAxNjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWlteC9jbG9jay1pbXgyNS5jCkBAIC0wLDAgKzEsMzMxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IGJ5IFNhc2NoYSBIYXVlciwgUGVuZ3V0cm9uaXgKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKKyAqIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsa2Rldi5oPgorCisjaW5jbHVkZSA8bWFjaC9jbG9jay5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgorI2luY2x1ZGUgPG1hY2gvbXgyNS5oPgorCisjZGVmaW5lIENSTV9CQVNFCU1YMjVfSU9fQUREUkVTUyhNWDI1X0NSTV9CQVNFX0FERFIpCisKKyNkZWZpbmUgQ0NNX01QQ1RMCTB4MDAKKyNkZWZpbmUgQ0NNX1VQQ1RMCTB4MDQKKyNkZWZpbmUgQ0NNX0NDVEwJMHgwOAorI2RlZmluZSBDQ01fQ0dDUjAJMHgwQworI2RlZmluZSBDQ01fQ0dDUjEJMHgxMAorI2RlZmluZSBDQ01fQ0dDUjIJMHgxNAorI2RlZmluZSBDQ01fUENEUjAJMHgxOAorI2RlZmluZSBDQ01fUENEUjEJMHgxQworI2RlZmluZSBDQ01fUENEUjIJMHgyMAorI2RlZmluZSBDQ01fUENEUjMJMHgyNAorI2RlZmluZSBDQ01fUkNTUgkweDI4CisjZGVmaW5lIENDTV9DUkRSCTB4MkMKKyNkZWZpbmUgQ0NNX0RDVlIwCTB4MzAKKyNkZWZpbmUgQ0NNX0RDVlIxCTB4MzQKKyNkZWZpbmUgQ0NNX0RDVlIyCTB4MzgKKyNkZWZpbmUgQ0NNX0RDVlIzCTB4M2MKKyNkZWZpbmUgQ0NNX0xUUjAJMHg0MAorI2RlZmluZSBDQ01fTFRSMQkweDQ0CisjZGVmaW5lIENDTV9MVFIyCTB4NDgKKyNkZWZpbmUgQ0NNX0xUUjMJMHg0YworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcmF0ZV9tcGxsKHZvaWQpCit7CisJdWxvbmcgbXBjdGwgPSBfX3Jhd19yZWFkbChDUk1fQkFTRSArIENDTV9NUENUTCk7CisKKwlyZXR1cm4gbXhjX2RlY29kZV9wbGwobXBjdGwsIDI0MDAwMDAwKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3JhdGVfdXBsbCh2b2lkKQoreworCXVsb25nIG1wY3RsID0gX19yYXdfcmVhZGwoQ1JNX0JBU0UgKyBDQ01fVVBDVEwpOworCisJcmV0dXJuIG14Y19kZWNvZGVfcGxsKG1wY3RsLCAyNDAwMDAwMCk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgZ2V0X3JhdGVfYXJtKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIGNjdGwgPSByZWFkbChDUk1fQkFTRSArIENDTV9DQ1RMKTsKKwl1bnNpZ25lZCBsb25nIHJhdGUgPSBnZXRfcmF0ZV9tcGxsKCk7CisKKwlpZiAoY2N0bCAmICgxIDw8IDE0KSkKKwkJcmF0ZSA9IChyYXRlICogMykgPj4gMjsKKworCXJldHVybiByYXRlIC8gKChjY3RsID4+IDMwKSArIDEpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcmF0ZV9haGIoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgY2N0bCA9IHJlYWRsKENSTV9CQVNFICsgQ0NNX0NDVEwpOworCisJcmV0dXJuIGdldF9yYXRlX2FybShOVUxMKSAvICgoKGNjdGwgPj4gMjgpICYgMHgzKSArIDEpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcmF0ZV9pcGcoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiBnZXRfcmF0ZV9haGIoTlVMTCkgPj4gMTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3JhdGVfcGVyKGludCBwZXIpCit7CisJdW5zaWduZWQgbG9uZyBvZnMgPSAocGVyICYgMHgzKSAqIDg7CisJdW5zaWduZWQgbG9uZyByZWcgPSBwZXIgJiB+MHgzOworCXVuc2lnbmVkIGxvbmcgdmFsID0gKHJlYWRsKENSTV9CQVNFICsgQ0NNX1BDRFIwICsgcmVnKSA+PiBvZnMpICYgMHgzZjsKKwl1bnNpZ25lZCBsb25nIGZyZWY7CisKKwlpZiAocmVhZGwoQ1JNX0JBU0UgKyAweDY0KSAmICgxIDw8IHBlcikpCisJCWZyZWYgPSBnZXRfcmF0ZV91cGxsKCk7CisJZWxzZQorCQlmcmVmID0gZ2V0X3JhdGVfYWhiKE5VTEwpOworCisJcmV0dXJuIGZyZWYgLyAodmFsICsgMSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9yYXRlX3VhcnQoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiBnZXRfcmF0ZV9wZXIoMTUpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcmF0ZV9zc2kyKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gZ2V0X3JhdGVfcGVyKDE0KTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3JhdGVfc3NpMShzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIGdldF9yYXRlX3BlcigxMyk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9yYXRlX2kyYyhzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIGdldF9yYXRlX3Blcig2KTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3JhdGVfbmZjKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gZ2V0X3JhdGVfcGVyKDgpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcmF0ZV9ncHQoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiBnZXRfcmF0ZV9wZXIoNSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9yYXRlX2xjZGMoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiBnZXRfcmF0ZV9wZXIoNyk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9yYXRlX2VzZGhjMShzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIGdldF9yYXRlX3BlcigzKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3JhdGVfZXNkaGMyKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gZ2V0X3JhdGVfcGVyKDQpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcmF0ZV9jc2koc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiBnZXRfcmF0ZV9wZXIoMCk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9yYXRlX290ZyhzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgbG9uZyBjY3RsID0gcmVhZGwoQ1JNX0JBU0UgKyBDQ01fQ0NUTCk7CisJdW5zaWduZWQgbG9uZyByYXRlID0gZ2V0X3JhdGVfdXBsbCgpOworCisJcmV0dXJuIChjY3RsICYgKDEgPDwgMjMpKSA/IDAgOiByYXRlIC8gKCgweDNGICYgKGNjdGwgPj4gMTYpKSArIDEpOworfQorCitzdGF0aWMgaW50IGNsa19jZ2NyX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJdTMyIHJlZzsKKworCXJlZyA9IF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7CisJcmVnIHw9IDEgPDwgY2xrLT5lbmFibGVfc2hpZnQ7CisJX19yYXdfd3JpdGVsKHJlZywgY2xrLT5lbmFibGVfcmVnKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjbGtfY2djcl9kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1MzIgcmVnOworCisJcmVnID0gX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKKwlyZWcgJj0gfigxIDw8IGNsay0+ZW5hYmxlX3NoaWZ0KTsKKwlfX3Jhd193cml0ZWwocmVnLCBjbGstPmVuYWJsZV9yZWcpOworfQorCisjZGVmaW5lIERFRklORV9DTE9DSyhuYW1lLCBpLCBlciwgZXMsIGdyLCBzciwgcykJXAorCXN0YXRpYyBzdHJ1Y3QgY2xrIG5hbWUgPSB7CQkJXAorCQkuaWQJCT0gaSwJCQlcCisJCS5lbmFibGVfcmVnCT0gQ1JNX0JBU0UgKyBlciwJXAorCQkuZW5hYmxlX3NoaWZ0CT0gZXMsCQkJXAorCQkuZ2V0X3JhdGUJPSBnciwJCQlcCisJCS5zZXRfcmF0ZQk9IHNyLAkJCVwKKwkJLmVuYWJsZQkJPSBjbGtfY2djcl9lbmFibGUsCVwKKwkJLmRpc2FibGUJPSBjbGtfY2djcl9kaXNhYmxlLAlcCisJCS5zZWNvbmRhcnkJPSBzLAkJCVwKKwl9CisKKy8qCisgKiBOb3RlOiB0aGUgZm9sbG93aW5nIElQRyBjbG9jayBnYXRpbmcgYml0cyBhcmUgd3JvbmdseSBtYXJrZWQgIlJlc2VydmVkIiBpbgorICogdGhlIGkuTVgyNSBSZWZlcmVuY2UgTWFudWFsIFJldiAxLCB0YWJsZSAxNS0xMy4gVGhlIGluZm9ybWF0aW9uIGJlbG93IGlzCisgKiB0YWtlbiBmcm9tIHRoZSBGcmVlc2NhbGUgcmVsZWFzZWQgQlNQLgorICoKKyAqIGJpdAlyZWcJb2Zmc2V0CWNsb2NrCisgKgorICogMAlDR0NSMQkwCUFVRE1VWAorICogMTIJQ0dDUjEJMTIJRVNBSQorICogMTYJQ0dDUjEJMTYJR1BJTzEKKyAqIDE3CUNHQ1IxCTE3CUdQSU8yCisgKiAxOAlDR0NSMQkxOAlHUElPMworICogMjMJQ0dDUjEJMjMJSTJDMQorICogMjQJQ0dDUjEJMjQJSTJDMgorICogMjUJQ0dDUjEJMjUJSTJDMworICogMjcJQ0dDUjEJMjcJSU9NVVhDCisgKiAyOAlDR0NSMQkyOAlLUFAKKyAqIDMwCUNHQ1IxCTMwCU9XSVJFCisgKiAzNglDR0NSMgk0CVJUSUMKKyAqIDUxCUNHQ1IyCTE5CVdET0cKKyAqLworCitERUZJTkVfQ0xPQ0soZ3B0X2NsaywgICAgMCwgQ0NNX0NHQ1IwLCAgNSwgZ2V0X3JhdGVfZ3B0LCBOVUxMLCBOVUxMKTsKK0RFRklORV9DTE9DSyh1YXJ0X3Blcl9jbGssIDAsIENDTV9DR0NSMCwgMTUsIGdldF9yYXRlX3VhcnQsIE5VTEwsIE5VTEwpOworREVGSU5FX0NMT0NLKHNzaTFfcGVyX2NsaywgMCwgQ0NNX0NHQ1IwLCAxMywgZ2V0X3JhdGVfaXBnLCBOVUxMLCBOVUxMKTsKK0RFRklORV9DTE9DSyhzc2kyX3Blcl9jbGssIDAsIENDTV9DR0NSMCwgMTQsIGdldF9yYXRlX2lwZywgTlVMTCwgTlVMTCk7CitERUZJTkVfQ0xPQ0soY3NwaTFfY2xrLCAgMCwgQ0NNX0NHQ1IxLCAgNSwgZ2V0X3JhdGVfaXBnLCBOVUxMLCBOVUxMKTsKK0RFRklORV9DTE9DSyhjc3BpMl9jbGssICAwLCBDQ01fQ0dDUjEsICA2LCBnZXRfcmF0ZV9pcGcsIE5VTEwsIE5VTEwpOworREVGSU5FX0NMT0NLKGNzcGkzX2NsaywgIDAsIENDTV9DR0NSMSwgIDcsIGdldF9yYXRlX2lwZywgTlVMTCwgTlVMTCk7CitERUZJTkVfQ0xPQ0soZXNkaGMxX2FoYl9jbGssIDAsIENDTV9DR0NSMCwgMjEsIGdldF9yYXRlX2VzZGhjMSwJIE5VTEwsIE5VTEwpOworREVGSU5FX0NMT0NLKGVzZGhjMV9wZXJfY2xrLCAwLCBDQ01fQ0dDUjAsICAzLCBnZXRfcmF0ZV9lc2RoYzEsCSBOVUxMLAorCQkmZXNkaGMxX2FoYl9jbGspOworREVGSU5FX0NMT0NLKGVzZGhjMl9haGJfY2xrLCAwLCBDQ01fQ0dDUjAsIDIyLCBnZXRfcmF0ZV9lc2RoYzIsCSBOVUxMLCBOVUxMKTsKK0RFRklORV9DTE9DSyhlc2RoYzJfcGVyX2NsaywgMCwgQ0NNX0NHQ1IwLCAgNCwgZ2V0X3JhdGVfZXNkaGMyLAkgTlVMTCwKKwkJJmVzZGhjMl9haGJfY2xrKTsKK0RFRklORV9DTE9DSyhmZWNfYWhiX2NsaywgMCwgQ0NNX0NHQ1IwLCAyMywgTlVMTCwJIE5VTEwsIE5VTEwpOworREVGSU5FX0NMT0NLKGxjZGNfYWhiX2NsaywgMCwgQ0NNX0NHQ1IwLCAyNCwgTlVMTCwJIE5VTEwsIE5VTEwpOworREVGSU5FX0NMT0NLKGxjZGNfcGVyX2NsaywgMCwgQ0NNX0NHQ1IwLCAgNywgTlVMTCwJIE5VTEwsICZsY2RjX2FoYl9jbGspOworREVGSU5FX0NMT0NLKGNzaV9haGJfY2xrLCAwLCBDQ01fQ0dDUjAsIDE4LCBnZXRfcmF0ZV9jc2ksIE5VTEwsIE5VTEwpOworREVGSU5FX0NMT0NLKGNzaV9wZXJfY2xrLCAwLCBDQ01fQ0dDUjAsIDAsIGdldF9yYXRlX2NzaSwgTlVMTCwgJmNzaV9haGJfY2xrKTsKK0RFRklORV9DTE9DSyh1YXJ0MV9jbGssICAwLCBDQ01fQ0dDUjIsIDE0LCBnZXRfcmF0ZV91YXJ0LCBOVUxMLCAmdWFydF9wZXJfY2xrKTsKK0RFRklORV9DTE9DSyh1YXJ0Ml9jbGssICAwLCBDQ01fQ0dDUjIsIDE1LCBnZXRfcmF0ZV91YXJ0LCBOVUxMLCAmdWFydF9wZXJfY2xrKTsKK0RFRklORV9DTE9DSyh1YXJ0M19jbGssICAwLCBDQ01fQ0dDUjIsIDE2LCBnZXRfcmF0ZV91YXJ0LCBOVUxMLCAmdWFydF9wZXJfY2xrKTsKK0RFRklORV9DTE9DSyh1YXJ0NF9jbGssICAwLCBDQ01fQ0dDUjIsIDE3LCBnZXRfcmF0ZV91YXJ0LCBOVUxMLCAmdWFydF9wZXJfY2xrKTsKK0RFRklORV9DTE9DSyh1YXJ0NV9jbGssICAwLCBDQ01fQ0dDUjIsIDE4LCBnZXRfcmF0ZV91YXJ0LCBOVUxMLCAmdWFydF9wZXJfY2xrKTsKK0RFRklORV9DTE9DSyhuZmNfY2xrLCAgICAwLCBDQ01fQ0dDUjAsICA4LCBnZXRfcmF0ZV9uZmMsIE5VTEwsIE5VTEwpOworREVGSU5FX0NMT0NLKHVzYm90Z19jbGssIDAsIENDTV9DR0NSMCwgMjgsIGdldF9yYXRlX290ZywgTlVMTCwgTlVMTCk7CitERUZJTkVfQ0xPQ0socHdtMV9jbGssCSAwLCBDQ01fQ0dDUjEsIDMxLCBnZXRfcmF0ZV9pcGcsIE5VTEwsIE5VTEwpOworREVGSU5FX0NMT0NLKHB3bTJfY2xrLAkgMCwgQ0NNX0NHQ1IyLCAgMCwgZ2V0X3JhdGVfaXBnLCBOVUxMLCBOVUxMKTsKK0RFRklORV9DTE9DSyhwd20zX2NsaywJIDAsIENDTV9DR0NSMiwgIDEsIGdldF9yYXRlX2lwZywgTlVMTCwgTlVMTCk7CitERUZJTkVfQ0xPQ0socHdtNF9jbGssCSAwLCBDQ01fQ0dDUjIsICAyLCBnZXRfcmF0ZV9pcGcsIE5VTEwsIE5VTEwpOworREVGSU5FX0NMT0NLKGtwcF9jbGssCSAwLCBDQ01fQ0dDUjEsIDI4LCBnZXRfcmF0ZV9pcGcsIE5VTEwsIE5VTEwpOworREVGSU5FX0NMT0NLKHRzY19jbGssCSAwLCBDQ01fQ0dDUjIsIDEzLCBnZXRfcmF0ZV9pcGcsIE5VTEwsIE5VTEwpOworREVGSU5FX0NMT0NLKGkyY19jbGssCSAwLCBDQ01fQ0dDUjAsICA2LCBnZXRfcmF0ZV9pMmMsIE5VTEwsIE5VTEwpOworREVGSU5FX0NMT0NLKGZlY19jbGssCSAwLCBDQ01fQ0dDUjEsIDE1LCBnZXRfcmF0ZV9pcGcsIE5VTEwsICZmZWNfYWhiX2Nsayk7CitERUZJTkVfQ0xPQ0soZHJ5aWNlX2NsaywgMCwgQ0NNX0NHQ1IxLCAgOCwgZ2V0X3JhdGVfaXBnLCBOVUxMLCBOVUxMKTsKK0RFRklORV9DTE9DSyhsY2RjX2NsaywJIDAsIENDTV9DR0NSMSwgMjksIGdldF9yYXRlX2xjZGMsIE5VTEwsICZsY2RjX3Blcl9jbGspOworREVGSU5FX0NMT0NLKHdkdF9jbGssICAgIDAsIENDTV9DR0NSMiwgMTksIGdldF9yYXRlX2lwZywgTlVMTCwgIE5VTEwpOworREVGSU5FX0NMT0NLKHNzaTFfY2xrLCAgMCwgQ0NNX0NHQ1IyLCAxMSwgZ2V0X3JhdGVfc3NpMSwgTlVMTCwgJnNzaTFfcGVyX2Nsayk7CitERUZJTkVfQ0xPQ0soc3NpMl9jbGssICAxLCBDQ01fQ0dDUjIsIDEyLCBnZXRfcmF0ZV9zc2kyLCBOVUxMLCAmc3NpMl9wZXJfY2xrKTsKK0RFRklORV9DTE9DSyhlc2RoYzFfY2xrLCAgMCwgQ0NNX0NHQ1IxLCAxMywgZ2V0X3JhdGVfZXNkaGMxLCBOVUxMLAorCQkmZXNkaGMxX3Blcl9jbGspOworREVGSU5FX0NMT0NLKGVzZGhjMl9jbGssICAxLCBDQ01fQ0dDUjEsIDE0LCBnZXRfcmF0ZV9lc2RoYzIsIE5VTEwsCisJCSZlc2RoYzJfcGVyX2Nsayk7CitERUZJTkVfQ0xPQ0soYXVkbXV4X2NsaywgMCwgQ0NNX0NHQ1IxLCAwLCBOVUxMLCBOVUxMLCBOVUxMKTsKK0RFRklORV9DTE9DSyhjc2lfY2xrLCAgICAwLCBDQ01fQ0dDUjEsICA0LCBnZXRfcmF0ZV9jc2ksIE5VTEwsICAmY3NpX3Blcl9jbGspOworREVGSU5FX0NMT0NLKGNhbjFfY2xrLAkgMCwgQ0NNX0NHQ1IxLCAgMiwgZ2V0X3JhdGVfaXBnLCBOVUxMLCBOVUxMKTsKK0RFRklORV9DTE9DSyhjYW4yX2NsaywJIDEsIENDTV9DR0NSMSwgIDMsIGdldF9yYXRlX2lwZywgTlVMTCwgTlVMTCk7CisKKyNkZWZpbmUgX1JFR0lTVEVSX0NMT0NLKGQsIG4sIGMpCVwKKwl7CQkJCVwKKwkJLmRldl9pZCA9IGQsCQlcCisJCS5jb25faWQgPSBuLAkJXAorCQkuY2xrID0gJmMsCQlcCisJfSwKKworc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIGxvb2t1cHNbXSA9IHsKKwlfUkVHSVNURVJfQ0xPQ0soImlteC11YXJ0LjAiLCBOVUxMLCB1YXJ0MV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgtdWFydC4xIiwgTlVMTCwgdWFydDJfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaW14LXVhcnQuMiIsIE5VTEwsIHVhcnQzX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImlteC11YXJ0LjMiLCBOVUxMLCB1YXJ0NF9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgtdWFydC40IiwgTlVMTCwgdWFydDVfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygibXhjLWVoY2kuMCIsICJ1c2IiLCB1c2JvdGdfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygibXhjLWVoY2kuMSIsICJ1c2IiLCB1c2JvdGdfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygibXhjLWVoY2kuMiIsICJ1c2IiLCB1c2JvdGdfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiZnNsLXVzYjItdWRjIiwgInVzYiIsIHVzYm90Z19jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJteGNfbmFuZC4wIiwgTlVMTCwgbmZjX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImlteDI1LWNzcGkuMCIsIE5VTEwsIGNzcGkxX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImlteDI1LWNzcGkuMSIsIE5VTEwsIGNzcGkyX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImlteDI1LWNzcGkuMiIsIE5VTEwsIGNzcGkzX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soIm14Y19wd20uMCIsIE5VTEwsIHB3bTFfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygibXhjX3B3bS4xIiwgTlVMTCwgcHdtMl9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJteGNfcHdtLjIiLCBOVUxMLCBwd20zX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soIm14Y19wd20uMyIsIE5VTEwsIHB3bTRfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaW14LWtleXBhZCIsIE5VTEwsIGtwcF9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJteDI1LWFkYyIsIE5VTEwsIHRzY19jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgtaTJjLjAiLCBOVUxMLCBpMmNfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaW14LWkyYy4xIiwgTlVMTCwgaTJjX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImlteC1pMmMuMiIsIE5VTEwsIGkyY19jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJmZWMuMCIsIE5VTEwsIGZlY19jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXhkaV9ydGMuMCIsIE5VTEwsIGRyeWljZV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgtZmIuMCIsIE5VTEwsIGxjZGNfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaW14Mi13ZHQuMCIsIE5VTEwsIHdkdF9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgtc3NpLjAiLCBOVUxMLCBzc2kxX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImlteC1zc2kuMSIsIE5VTEwsIHNzaTJfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygic2RoY2ktZXNkaGMtaW14LjAiLCBOVUxMLCBlc2RoYzFfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygic2RoY2ktZXNkaGMtaW14LjEiLCBOVUxMLCBlc2RoYzJfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygibXgyLWNhbWVyYS4wIiwgTlVMTCwgY3NpX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImF1ZG11eCIsIGF1ZG11eF9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJmbGV4Y2FuLjAiLCBOVUxMLCBjYW4xX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImZsZXhjYW4uMSIsIE5VTEwsIGNhbjJfY2xrKQorfTsKKworaW50IF9faW5pdCBteDI1X2Nsb2Nrc19pbml0KHZvaWQpCit7CisJY2xrZGV2X2FkZF90YWJsZShsb29rdXBzLCBBUlJBWV9TSVpFKGxvb2t1cHMpKTsKKworCS8qIFR1cm4gb2ZmIGFsbCBjbG9ja3MgZXhjZXB0IHRoZSBvbmVzIHdlIG5lZWQgdG8gc3Vydml2ZSwgbmFtZWx5OgorCSAqIEVNSSwgR1BJTzEtMyAoQ0NNX0NHQ1IxWzE4OjE2XSksIEdQVDEsIElPTVVYQyAoQ0NNX0NHQ1IxWzI3XSksIElJTSwKKwkgKiBTQ0MKKwkgKi8KKwlfX3Jhd193cml0ZWwoKDEgPDwgMTkpLCBDUk1fQkFTRSArIENDTV9DR0NSMCk7CisJX19yYXdfd3JpdGVsKCgweGYgPDwgMTYpIHwgKDMgPDwgMjYpLCBDUk1fQkFTRSArIENDTV9DR0NSMSk7CisJX19yYXdfd3JpdGVsKCgxIDw8IDUpLCBDUk1fQkFTRSArIENDTV9DR0NSMik7CisjaWYgZGVmaW5lZChDT05GSUdfREVCVUdfTEwpICYmICFkZWZpbmVkKENPTkZJR19ERUJVR19JQ0VEQ0MpCisJY2xrX2VuYWJsZSgmdWFydDFfY2xrKTsKKyNlbmRpZgorCisJLyogQ2xvY2sgc291cmNlIGZvciBsY2RjIGFuZCBjc2kgaXMgdXBsbCAqLworCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChDUk1fQkFTRSsweDY0KSB8ICgxIDw8IDcpIHwgKDEgPDwgMCksCisJCQlDUk1fQkFTRSArIDB4NjQpOworCisJbXhjX3RpbWVyX2luaXQoJmdwdF9jbGssIE1YMjVfSU9fQUREUkVTUyhNWDI1X0dQVDFfQkFTRV9BRERSKSwgNTQpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9jbG9jay1pbXgyNy5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvY2xvY2staW14MjcuYwppbmRleCA5OGEyNWJhLi41ODNmMjUxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9jbG9jay1pbXgyNy5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L2Nsb2NrLWlteDI3LmMKQEAgLTIxLDggKzIxLDggQEAKICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsa2Rldi5oPgogCi0jaW5jbHVkZSA8YXNtL2Nsa2Rldi5oPgogI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgogCiAjaW5jbHVkZSA8bWFjaC9jbG9jay5oPgpAQCAtMTI1LDcgKzEyNSw3IEBACiAJaWYgKGNsay0+cGFyZW50ID09IHBhcmVudCkKIAkJcmV0dXJuIDA7CiAKLQlpZiAobXgyN19yZXZpc2lvbigpID49IENISVBfUkVWXzJfMCkgeworCWlmIChteDI3X3JldmlzaW9uKCkgPj0gSU1YX0NISVBfUkVWSVNJT05fMl8wKSB7CiAJCWlmIChwYXJlbnQgPT0gJm1wbGxfbWFpbjFfY2xrKSB7CiAJCQljc2NyIHw9IENDTV9DU0NSX0FSTV9TUkM7CiAJCX0gZWxzZSB7CkBAIC0xNzQsNyArMTc0LDcgQEAKIAlkaXYtLTsKIAogCXJlZyA9IF9fcmF3X3JlYWRsKENDTV9DU0NSKTsKLQlpZiAobXgyN19yZXZpc2lvbigpID49IENISVBfUkVWXzJfMCkgeworCWlmIChteDI3X3JldmlzaW9uKCkgPj0gSU1YX0NISVBfUkVWSVNJT05fMl8wKSB7CiAJCXJlZyAmPSB+KDMgPDwgMTIpOwogCQlyZWcgfD0gZGl2IDw8IDEyOwogCQlyZWcgJj0gfihDQ01fQ1NDUl9GUE0gfCBDQ01fQ1NDUl9TUEVOKTsKQEAgLTI0NCw3ICsyNDQsNyBAQAogCiAJcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOwogCi0JaWYgKG14MjdfcmV2aXNpb24oKSA+PSBDSElQX1JFVl8yXzApCisJaWYgKG14MjdfcmV2aXNpb24oKSA+PSBJTVhfQ0hJUF9SRVZJU0lPTl8yXzApCiAJCXBkZiArPSA0OyAgLyogTVgyNyBUTzIrICovCiAJZWxzZQogCQlwZGYgPSAocGRmIDwgMikgPyAxMjRVTCA6IHBkZjsgIC8qIE1YMjEgJiBNWDI3IFRPMSAqLwpAQCAtMjY5LDcgKzI2OSw3IEBACiAKIAlwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CiAKLQlpZiAobXgyN19yZXZpc2lvbigpID49IENISVBfUkVWXzJfMCkKKwlpZiAobXgyN19yZXZpc2lvbigpID49IElNWF9DSElQX1JFVklTSU9OXzJfMCkKIAkJbmZjX3BkZiA9IChfX3Jhd19yZWFkbChDQ01fUENEUjApID4+IDYpICYgMHhmOwogCWVsc2UKIAkJbmZjX3BkZiA9IChfX3Jhd19yZWFkbChDQ01fUENEUjApID4+IDEyKSAmIDB4ZjsKQEAgLTI4NCw3ICsyODQsNyBAQAogCiAJcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOwogCi0JaWYgKG14MjdfcmV2aXNpb24oKSA+PSBDSElQX1JFVl8yXzApIHsKKwlpZiAobXgyN19yZXZpc2lvbigpID49IElNWF9DSElQX1JFVklTSU9OXzJfMCkgewogCQl2cHVfcGRmID0gKF9fcmF3X3JlYWRsKENDTV9QQ0RSMCkgPj4gMTApICYgMHgzZjsKIAkJdnB1X3BkZiArPSA0OwogCX0gZWxzZSB7CkBAIC0zNDcsNyArMzQ3LDcgQEAKIAkgKiBjbGstPmlkID09IDA6IGFybSBjbG9jayBzb3VyY2UgcGF0aCAxIHdoaWNoIGlzIGZyb20gMiAqIE1QTEwgLyAyCiAJICogY2xrLT5pZCA9PSAxOiBhcm0gY2xvY2sgc291cmNlIHBhdGggMiB3aGljaCBpcyBmcm9tIDIgKiBNUExMIC8gMwogCSAqLwotCWlmIChteDI3X3JldmlzaW9uKCkgPj0gQ0hJUF9SRVZfMl8wICYmIGNsay0+aWQgPT0gMSkKKwlpZiAobXgyN19yZXZpc2lvbigpID49IElNWF9DSElQX1JFVklTSU9OXzJfMCAmJiBjbGstPmlkID09IDEpCiAJCXJldHVybiAyVUwgKiBwYXJlbnRfcmF0ZSAvIDNVTDsKIAogCXJldHVybiBwYXJlbnRfcmF0ZTsKQEAgLTM2NSw3ICszNjUsNyBAQAogCS8qIE9uIFRPMiB3ZSBoYXZlIHRvIHdyaXRlIHRoZSB2YWx1ZSBiYWNrLiBPdGhlcndpc2Ugd2UKIAkgKiByZWFkIDAgZnJvbSB0aGlzIHJlZ2lzdGVyIHRoZSBuZXh0IHRpbWUuCiAJICovCi0JaWYgKG14MjdfcmV2aXNpb24oKSA+PSBDSElQX1JFVl8yXzApCisJaWYgKG14MjdfcmV2aXNpb24oKSA+PSBJTVhfQ0hJUF9SRVZJU0lPTl8yXzApCiAJCV9fcmF3X3dyaXRlbChyZWcsIENDTV9TUENUTDApOwogCiAJcmV0dXJuIG14Y19kZWNvZGVfcGxsKHJlZywgcmF0ZSk7CkBAIC0zNzYsNyArMzc2LDcgQEAKIAl1MzIgZGl2OwogCXVuc2lnbmVkIGxvbmcgcmF0ZTsKIAotCWlmIChteDI3X3JldmlzaW9uKCkgPj0gQ0hJUF9SRVZfMl8wKQorCWlmIChteDI3X3JldmlzaW9uKCkgPj0gSU1YX0NISVBfUkVWSVNJT05fMl8wKQogCQlkaXYgPSAoX19yYXdfcmVhZGwoQ0NNX0NTQ1IpID4+IDEyKSAmIDB4MzsKIAllbHNlCiAJCWRpdiA9IChfX3Jhd19yZWFkbChDQ01fQ1NDUikgPj4gMTMpICYgMHg3OwpAQCAtMzg5LDcgKzM4OSw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyByYXRlLCBiY2xrX3BkZjsKIAotCWlmIChteDI3X3JldmlzaW9uKCkgPj0gQ0hJUF9SRVZfMl8wKQorCWlmIChteDI3X3JldmlzaW9uKCkgPj0gSU1YX0NISVBfUkVWSVNJT05fMl8wKQogCQliY2xrX3BkZiA9IChfX3Jhd19yZWFkbChDQ01fQ1NDUikgPj4gOCkgJiAweDM7CiAJZWxzZQogCQliY2xrX3BkZiA9IChfX3Jhd19yZWFkbChDQ01fQ1NDUikgPj4gOSkgJiAweGY7CkBAIC00MDIsNyArNDAyLDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIHJhdGUsIGlwZ19wZGY7CiAKLQlpZiAobXgyN19yZXZpc2lvbigpID49IENISVBfUkVWXzJfMCkKKwlpZiAobXgyN19yZXZpc2lvbigpID49IElNWF9DSElQX1JFVklTSU9OXzJfMCkKIAkJcmV0dXJuIGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CiAJZWxzZQogCQlpcGdfcGRmID0gKF9fcmF3X3JlYWRsKENDTV9DU0NSKSA+PiA4KSAmIDE7CkBAIC02NjcsNyArNjY3LDcgQEAKIAlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInNhaGFyYTIiLCBzYWhhcmEyX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImF0YSIsIGF0YV9jbGspCiAJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJtc3RpY2siLCBtc3RpY2tfY2xrKQotCV9SRUdJU1RFUl9DTE9DSygiaW14LXdkdC4wIiwgTlVMTCwgd2RvZ19jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgyLXdkdC4wIiwgTlVMTCwgd2RvZ19jbGspCiAJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJncGlvIiwgZ3Bpb19jbGspCiAJX1JFR0lTVEVSX0NMT0NLKCJpbXgtaTJjLjAiLCBOVUxMLCBpMmMxX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soImlteC1pMmMuMSIsIE5VTEwsIGkyYzJfY2xrKQpAQCAtNjgzLDcgKzY4Myw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyBjc2NyID0gX19yYXdfcmVhZGwoQ0NNX0NTQ1IpOwogCi0JaWYgKG14MjdfcmV2aXNpb24oKSA+PSBDSElQX1JFVl8yXzApIHsKKwlpZiAobXgyN19yZXZpc2lvbigpID49IElNWF9DSElQX1JFVklTSU9OXzJfMCkgewogCQlpZiAoY3NjciAmIENDTV9DU0NSX0FSTV9TUkMpCiAJCQljcHVfY2xrLnBhcmVudCA9ICZtcGxsX21haW4xX2NsazsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvY3B1LWlteDI3LmMgYi9hcmNoL2FybS9tYWNoLWlteC9jcHUtaW14MjcuYwppbmRleCBkOGQzYjJkLi4zYjExN2JlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9jcHUtaW14MjcuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9jcHUtaW14MjcuYwpAQCAtNDIsNyArNDIsMTkgQEAKIAl2YWwgPSBfX3Jhd19yZWFkbChNWDI3X0lPX0FERFJFU1MoTVgyN19TWVNDVFJMX0JBU0VfQUREUgogCQkJCSsgU1lTX0NISVBfSUQpKTsKIAotCWNwdV9zaWxpY29uX3JldiA9IChpbnQpKHZhbCA+PiAyOCk7CisJc3dpdGNoICh2YWwgPj4gMjgpIHsKKwljYXNlIDA6CisJCWNwdV9zaWxpY29uX3JldiA9IElNWF9DSElQX1JFVklTSU9OXzFfMDsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQljcHVfc2lsaWNvbl9yZXYgPSBJTVhfQ0hJUF9SRVZJU0lPTl8yXzA7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJY3B1X3NpbGljb25fcmV2ID0gSU1YX0NISVBfUkVWSVNJT05fMl8xOworCQlicmVhazsKKwlkZWZhdWx0OgorCQljcHVfc2lsaWNvbl9yZXYgPSBJTVhfQ0hJUF9SRVZJU0lPTl9VTktOT1dOOworCX0KIAljcHVfcGFydG51bWJlciA9IChpbnQpKCh2YWwgPj4gMTIpICYgMHhGRkZGKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvZGV2aWNlcy1pbXgyMS5oIGIvYXJjaC9hcm0vbWFjaC1pbXgvZGV2aWNlcy1pbXgyMS5oCmluZGV4IGQxODkwMzkuLjE2NzQ0ZDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L2RldmljZXMtaW14MjEuaAorKysgYi9hcmNoL2FybS9tYWNoLWlteC9kZXZpY2VzLWlteDIxLmgKQEAgLTksMTAgKzksMjYgQEAKICNpbmNsdWRlIDxtYWNoL214MjEuaD4KICNpbmNsdWRlIDxtYWNoL2RldmljZXMtY29tbW9uLmg+CiAKK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW14X2lteDIxX2hjZF9kYXRhIGlteDIxX2lteDIxX2hjZF9kYXRhIF9faW5pdGNvbnN0OworI2RlZmluZSBpbXgyMV9hZGRfaW14MjFfaGNkKHBkYXRhKQlcCisJaW14X2FkZF9pbXgyMV9oY2QoJmlteDIxX2lteDIxX2hjZF9kYXRhLCBwZGF0YSkKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbXhfaW14Ml93ZHRfZGF0YSBpbXgyMV9pbXgyX3dkdF9kYXRhIF9faW5pdGNvbnN0OworI2RlZmluZSBpbXgyMV9hZGRfaW14Ml93ZHQocGRhdGEpCVwKKwlpbXhfYWRkX2lteDJfd2R0KCZpbXgyMV9pbXgyX3dkdF9kYXRhKQorCitleHRlcm4gY29uc3Qgc3RydWN0IGlteF9pbXhfZmJfZGF0YSBpbXgyMV9pbXhfZmJfZGF0YSBfX2luaXRjb25zdDsKKyNkZWZpbmUgaW14MjFfYWRkX2lteF9mYihwZGF0YSkJXAorCWlteF9hZGRfaW14X2ZiKCZpbXgyMV9pbXhfZmJfZGF0YSwgcGRhdGEpCisKIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW14X2lteF9pMmNfZGF0YSBpbXgyMV9pbXhfaTJjX2RhdGEgX19pbml0Y29uc3Q7CiAjZGVmaW5lIGlteDIxX2FkZF9pbXhfaTJjKHBkYXRhKQlcCiAJaW14X2FkZF9pbXhfaTJjKCZpbXgyMV9pbXhfaTJjX2RhdGEsIHBkYXRhKQogCitleHRlcm4gY29uc3Qgc3RydWN0IGlteF9pbXhfa2V5cGFkX2RhdGEgaW14MjFfaW14X2tleXBhZF9kYXRhIF9faW5pdGNvbnN0OworI2RlZmluZSBpbXgyMV9hZGRfaW14X2tleXBhZChwZGF0YSkJXAorCWlteF9hZGRfaW14X2tleXBhZCgmaW14MjFfaW14X2tleXBhZF9kYXRhLCBwZGF0YSkKKwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbXhfaW14X3NzaV9kYXRhIGlteDIxX2lteF9zc2lfZGF0YVtdIF9faW5pdGNvbnN0OwogI2RlZmluZSBpbXgyMV9hZGRfaW14X3NzaShpZCwgcGRhdGEpCVwKIAlpbXhfYWRkX2lteF9zc2koJmlteDIxX2lteF9zc2lfZGF0YVtpZF0sIHBkYXRhKQpAQCAtMjUsMTAgKzQxLDE4IEBACiAjZGVmaW5lIGlteDIxX2FkZF9pbXhfdWFydDIocGRhdGEpCWlteDIxX2FkZF9pbXhfdWFydCgyLCBwZGF0YSkKICNkZWZpbmUgaW14MjFfYWRkX2lteF91YXJ0MyhwZGF0YSkJaW14MjFfYWRkX2lteF91YXJ0KDMsIHBkYXRhKQogCitleHRlcm4gY29uc3Qgc3RydWN0IGlteF9teGNfbW1jX2RhdGEgaW14MjFfbXhjX21tY19kYXRhW10gX19pbml0Y29uc3Q7CisjZGVmaW5lIGlteDIxX2FkZF9teGNfbW1jKGlkLCBwZGF0YSkJXAorCWlteF9hZGRfbXhjX21tYygmaW14MjFfbXhjX21tY19kYXRhW2lkXSwgcGRhdGEpCisKIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW14X214Y19uYW5kX2RhdGEgaW14MjFfbXhjX25hbmRfZGF0YSBfX2luaXRjb25zdDsKICNkZWZpbmUgaW14MjFfYWRkX214Y19uYW5kKHBkYXRhKQlcCiAJaW14X2FkZF9teGNfbmFuZCgmaW14MjFfbXhjX25hbmRfZGF0YSwgcGRhdGEpCiAKK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW14X214Y193MV9kYXRhIGlteDIxX214Y193MV9kYXRhIF9faW5pdGNvbnN0OworI2RlZmluZSBpbXgyMV9hZGRfbXhjX3cxKHBkYXRhKQlcCisJaW14X2FkZF9teGNfdzEoJmlteDIxX214Y193MV9kYXRhKQorCiBleHRlcm4gY29uc3Qgc3RydWN0IGlteF9zcGlfaW14X2RhdGEgaW14MjFfY3NwaV9kYXRhW10gX19pbml0Y29uc3Q7CiAjZGVmaW5lIGlteDIxX2FkZF9jc3BpKGlkLCBwZGF0YSkJXAogCWlteF9hZGRfc3BpX2lteCgmaW14MjFfY3NwaV9kYXRhW2lkXSwgcGRhdGEpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9kZXZpY2VzLWlteDI1LmggYi9hcmNoL2FybS9tYWNoLWlteC9kZXZpY2VzLWlteDI1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRlMzNjYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L2RldmljZXMtaW14MjUuaApAQCAtMCwwICsxLDg3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFBlbmd1dHJvbml4CisgKiBVd2UgS2xlaW5lLUtvZW5pZyA8dS5rbGVpbmUta29lbmlnQHBlbmd1dHJvbml4LmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxtYWNoL214MjUuaD4KKyNpbmNsdWRlIDxtYWNoL2RldmljZXMtY29tbW9uLmg+CisKK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW14X2ZlY19kYXRhIGlteDI1X2ZlY19kYXRhIF9faW5pdGNvbnN0OworI2RlZmluZSBpbXgyNV9hZGRfZmVjKHBkYXRhKQlcCisJaW14X2FkZF9mZWMoJmlteDI1X2ZlY19kYXRhLCBwZGF0YSkKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbXhfZmxleGNhbl9kYXRhIGlteDI1X2ZsZXhjYW5fZGF0YVtdIF9faW5pdGNvbnN0OworI2RlZmluZSBpbXgyNV9hZGRfZmxleGNhbihpZCwgcGRhdGEpCVwKKwlpbXhfYWRkX2ZsZXhjYW4oJmlteDI1X2ZsZXhjYW5fZGF0YVtpZF0sIHBkYXRhKQorI2RlZmluZSBpbXgyNV9hZGRfZmxleGNhbjAocGRhdGEpCWlteDI1X2FkZF9mbGV4Y2FuKDAsIHBkYXRhKQorI2RlZmluZSBpbXgyNV9hZGRfZmxleGNhbjEocGRhdGEpCWlteDI1X2FkZF9mbGV4Y2FuKDEsIHBkYXRhKQorCitleHRlcm4gY29uc3Qgc3RydWN0IGlteF9mc2xfdXNiMl91ZGNfZGF0YSBpbXgyNV9mc2xfdXNiMl91ZGNfZGF0YSBfX2luaXRjb25zdDsKKyNkZWZpbmUgaW14MjVfYWRkX2ZzbF91c2IyX3VkYyhwZGF0YSkJXAorCWlteF9hZGRfZnNsX3VzYjJfdWRjKCZpbXgyNV9mc2xfdXNiMl91ZGNfZGF0YSwgcGRhdGEpCisKK2V4dGVybiBzdHJ1Y3QgaW14X2lteGRpX3J0Y19kYXRhIGlteDI1X2lteGRpX3J0Y19kYXRhIF9faW5pdGNvbnN0OworI2RlZmluZSBpbXgyNV9hZGRfaW14ZGlfcnRjKHBkYXRhKQlcCisJaW14X2FkZF9pbXhkaV9ydGMoJmlteDI1X2lteGRpX3J0Y19kYXRhKQorCitleHRlcm4gY29uc3Qgc3RydWN0IGlteF9pbXgyX3dkdF9kYXRhIGlteDI1X2lteDJfd2R0X2RhdGEgX19pbml0Y29uc3Q7CisjZGVmaW5lIGlteDI1X2FkZF9pbXgyX3dkdChwZGF0YSkJXAorCWlteF9hZGRfaW14Ml93ZHQoJmlteDI1X2lteDJfd2R0X2RhdGEpCisKK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW14X2lteF9mYl9kYXRhIGlteDI1X2lteF9mYl9kYXRhIF9faW5pdGNvbnN0OworI2RlZmluZSBpbXgyNV9hZGRfaW14X2ZiKHBkYXRhKQlcCisJaW14X2FkZF9pbXhfZmIoJmlteDI1X2lteF9mYl9kYXRhLCBwZGF0YSkKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbXhfaW14X2kyY19kYXRhIGlteDI1X2lteF9pMmNfZGF0YVtdIF9faW5pdGNvbnN0OworI2RlZmluZSBpbXgyNV9hZGRfaW14X2kyYyhpZCwgcGRhdGEpCVwKKwlpbXhfYWRkX2lteF9pMmMoJmlteDI1X2lteF9pMmNfZGF0YVtpZF0sIHBkYXRhKQorI2RlZmluZSBpbXgyNV9hZGRfaW14X2kyYzAocGRhdGEpCWlteDI1X2FkZF9pbXhfaTJjKDAsIHBkYXRhKQorI2RlZmluZSBpbXgyNV9hZGRfaW14X2kyYzEocGRhdGEpCWlteDI1X2FkZF9pbXhfaTJjKDEsIHBkYXRhKQorI2RlZmluZSBpbXgyNV9hZGRfaW14X2kyYzIocGRhdGEpCWlteDI1X2FkZF9pbXhfaTJjKDIsIHBkYXRhKQorCitleHRlcm4gY29uc3Qgc3RydWN0IGlteF9pbXhfa2V5cGFkX2RhdGEgaW14MjVfaW14X2tleXBhZF9kYXRhIF9faW5pdGNvbnN0OworI2RlZmluZSBpbXgyNV9hZGRfaW14X2tleXBhZChwZGF0YSkJXAorCWlteF9hZGRfaW14X2tleXBhZCgmaW14MjVfaW14X2tleXBhZF9kYXRhLCBwZGF0YSkKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbXhfaW14X3NzaV9kYXRhIGlteDI1X2lteF9zc2lfZGF0YVtdIF9faW5pdGNvbnN0OworI2RlZmluZSBpbXgyNV9hZGRfaW14X3NzaShpZCwgcGRhdGEpCVwKKwlpbXhfYWRkX2lteF9zc2koJmlteDI1X2lteF9zc2lfZGF0YVtpZF0sIHBkYXRhKQorCitleHRlcm4gY29uc3Qgc3RydWN0IGlteF9pbXhfdWFydF8xaXJxX2RhdGEgaW14MjVfaW14X3VhcnRfZGF0YVtdIF9faW5pdGNvbnN0OworI2RlZmluZSBpbXgyNV9hZGRfaW14X3VhcnQoaWQsIHBkYXRhKQlcCisJaW14X2FkZF9pbXhfdWFydF8xaXJxKCZpbXgyNV9pbXhfdWFydF9kYXRhW2lkXSwgcGRhdGEpCisjZGVmaW5lIGlteDI1X2FkZF9pbXhfdWFydDAocGRhdGEpCWlteDI1X2FkZF9pbXhfdWFydCgwLCBwZGF0YSkKKyNkZWZpbmUgaW14MjVfYWRkX2lteF91YXJ0MShwZGF0YSkJaW14MjVfYWRkX2lteF91YXJ0KDEsIHBkYXRhKQorI2RlZmluZSBpbXgyNV9hZGRfaW14X3VhcnQyKHBkYXRhKQlpbXgyNV9hZGRfaW14X3VhcnQoMiwgcGRhdGEpCisjZGVmaW5lIGlteDI1X2FkZF9pbXhfdWFydDMocGRhdGEpCWlteDI1X2FkZF9pbXhfdWFydCgzLCBwZGF0YSkKKyNkZWZpbmUgaW14MjVfYWRkX2lteF91YXJ0NChwZGF0YSkJaW14MjVfYWRkX2lteF91YXJ0KDQsIHBkYXRhKQorCitleHRlcm4gY29uc3Qgc3RydWN0IGlteF9teDJfY2FtZXJhX2RhdGEgaW14MjVfbXgyX2NhbWVyYV9kYXRhIF9faW5pdGNvbnN0OworI2RlZmluZSBpbXgyNV9hZGRfbXgyX2NhbWVyYShwZGF0YSkJXAorCWlteF9hZGRfbXgyX2NhbWVyYSgmaW14MjVfbXgyX2NhbWVyYV9kYXRhLCBwZGF0YSkKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbXhfbXhjX2VoY2lfZGF0YSBpbXgyNV9teGNfZWhjaV9vdGdfZGF0YSBfX2luaXRjb25zdDsKKyNkZWZpbmUgaW14MjVfYWRkX214Y19laGNpX290ZyhwZGF0YSkJXAorCWlteF9hZGRfbXhjX2VoY2koJmlteDI1X214Y19laGNpX290Z19kYXRhLCBwZGF0YSkKK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW14X214Y19laGNpX2RhdGEgaW14MjVfbXhjX2VoY2lfaHNfZGF0YSBfX2luaXRjb25zdDsKKyNkZWZpbmUgaW14MjVfYWRkX214Y19laGNpX2hzKHBkYXRhKQlcCisJaW14X2FkZF9teGNfZWhjaSgmaW14MjVfbXhjX2VoY2lfaHNfZGF0YSwgcGRhdGEpCisKK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW14X214Y19uYW5kX2RhdGEgaW14MjVfbXhjX25hbmRfZGF0YSBfX2luaXRjb25zdDsKKyNkZWZpbmUgaW14MjVfYWRkX214Y19uYW5kKHBkYXRhKQlcCisJaW14X2FkZF9teGNfbmFuZCgmaW14MjVfbXhjX25hbmRfZGF0YSwgcGRhdGEpCisKK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW14X3NkaGNpX2VzZGhjX2lteF9kYXRhCitpbXgyNV9zZGhjaV9lc2RoY19pbXhfZGF0YVtdIF9faW5pdGNvbnN0OworI2RlZmluZSBpbXgyNV9hZGRfc2RoY2lfZXNkaGNfaW14KGlkLCBwZGF0YSkJXAorCWlteF9hZGRfc2RoY2lfZXNkaGNfaW14KCZpbXgyNV9zZGhjaV9lc2RoY19pbXhfZGF0YVtpZF0sIHBkYXRhKQorCitleHRlcm4gY29uc3Qgc3RydWN0IGlteF9zcGlfaW14X2RhdGEgaW14MjVfY3NwaV9kYXRhW10gX19pbml0Y29uc3Q7CisjZGVmaW5lIGlteDI1X2FkZF9zcGlfaW14KGlkLCBwZGF0YSkJXAorCWlteF9hZGRfc3BpX2lteCgmaW14MjVfc3BpX2lteF9kYXRhW2lkXSwgcGRhdGEpCisjZGVmaW5lIGlteDI1X2FkZF9zcGlfaW14MChwZGF0YSkJaW14MjVfYWRkX3NwaV9pbXgoMCwgcGRhdGEpCisjZGVmaW5lIGlteDI1X2FkZF9zcGlfaW14MShwZGF0YSkJaW14MjVfYWRkX3NwaV9pbXgoMSwgcGRhdGEpCisjZGVmaW5lIGlteDI1X2FkZF9zcGlfaW14MihwZGF0YSkJaW14MjVfYWRkX3NwaV9pbXgoMiwgcGRhdGEpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9kZXZpY2VzLWlteDI3LmggYi9hcmNoL2FybS9tYWNoLWlteC9kZXZpY2VzLWlteDI3LmgKaW5kZXggNzAxMTY5MC4uZjEyNzJkNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvZGV2aWNlcy1pbXgyNy5oCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L2RldmljZXMtaW14MjcuaApAQCAtMTMsMTAgKzEzLDI2IEBACiAjZGVmaW5lIGlteDI3X2FkZF9mZWMocGRhdGEpCVwKIAlpbXhfYWRkX2ZlYygmaW14MjdfZmVjX2RhdGEsIHBkYXRhKQogCitleHRlcm4gY29uc3Qgc3RydWN0IGlteF9mc2xfdXNiMl91ZGNfZGF0YSBpbXgyN19mc2xfdXNiMl91ZGNfZGF0YSBfX2luaXRjb25zdDsKKyNkZWZpbmUgaW14MjdfYWRkX2ZzbF91c2IyX3VkYyhwZGF0YSkJXAorCWlteF9hZGRfZnNsX3VzYjJfdWRjKCZpbXgyN19mc2xfdXNiMl91ZGNfZGF0YSwgcGRhdGEpCisKK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW14X2lteDJfd2R0X2RhdGEgaW14MjdfaW14Ml93ZHRfZGF0YSBfX2luaXRjb25zdDsKKyNkZWZpbmUgaW14MjdfYWRkX2lteDJfd2R0KHBkYXRhKQlcCisJaW14X2FkZF9pbXgyX3dkdCgmaW14MjdfaW14Ml93ZHRfZGF0YSkKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbXhfaW14X2ZiX2RhdGEgaW14MjdfaW14X2ZiX2RhdGEgX19pbml0Y29uc3Q7CisjZGVmaW5lIGlteDI3X2FkZF9pbXhfZmIocGRhdGEpCVwKKwlpbXhfYWRkX2lteF9mYigmaW14MjdfaW14X2ZiX2RhdGEsIHBkYXRhKQorCiBleHRlcm4gY29uc3Qgc3RydWN0IGlteF9pbXhfaTJjX2RhdGEgaW14MjdfaW14X2kyY19kYXRhW10gX19pbml0Y29uc3Q7CiAjZGVmaW5lIGlteDI3X2FkZF9pbXhfaTJjKGlkLCBwZGF0YSkJXAogCWlteF9hZGRfaW14X2kyYygmaW14MjdfaW14X2kyY19kYXRhW2lkXSwgcGRhdGEpCiAKK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW14X2lteF9rZXlwYWRfZGF0YSBpbXgyN19pbXhfa2V5cGFkX2RhdGEgX19pbml0Y29uc3Q7CisjZGVmaW5lIGlteDI3X2FkZF9pbXhfa2V5cGFkKHBkYXRhKQlcCisJaW14X2FkZF9pbXhfa2V5cGFkKCZpbXgyN19pbXhfa2V5cGFkX2RhdGEsIHBkYXRhKQorCiBleHRlcm4gY29uc3Qgc3RydWN0IGlteF9pbXhfc3NpX2RhdGEgaW14MjdfaW14X3NzaV9kYXRhW10gX19pbml0Y29uc3Q7CiAjZGVmaW5lIGlteDI3X2FkZF9pbXhfc3NpKGlkLCBwZGF0YSkgICAgXAogCWlteF9hZGRfaW14X3NzaSgmaW14MjdfaW14X3NzaV9kYXRhW2lkXSwgcGRhdGEpCkBAIC0zMSwxMCArNDcsMjkgQEAKICNkZWZpbmUgaW14MjdfYWRkX2lteF91YXJ0NChwZGF0YSkJaW14MjdfYWRkX2lteF91YXJ0KDQsIHBkYXRhKQogI2RlZmluZSBpbXgyN19hZGRfaW14X3VhcnQ1KHBkYXRhKQlpbXgyN19hZGRfaW14X3VhcnQoNSwgcGRhdGEpCiAKK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW14X214Ml9jYW1lcmFfZGF0YSBpbXgyN19teDJfY2FtZXJhX2RhdGEgX19pbml0Y29uc3Q7CisjZGVmaW5lIGlteDI3X2FkZF9teDJfY2FtZXJhKHBkYXRhKQlcCisJaW14X2FkZF9teDJfY2FtZXJhKCZpbXgyN19teDJfY2FtZXJhX2RhdGEsIHBkYXRhKQorCitleHRlcm4gY29uc3Qgc3RydWN0IGlteF9teGNfZWhjaV9kYXRhIGlteDI3X214Y19laGNpX290Z19kYXRhIF9faW5pdGNvbnN0OworI2RlZmluZSBpbXgyN19hZGRfbXhjX2VoY2lfb3RnKHBkYXRhKQlcCisJaW14X2FkZF9teGNfZWhjaSgmaW14MjdfbXhjX2VoY2lfb3RnX2RhdGEsIHBkYXRhKQorZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbXhfbXhjX2VoY2lfZGF0YSBpbXgyN19teGNfZWhjaV9oc19kYXRhW10gX19pbml0Y29uc3Q7CisjZGVmaW5lIGlteDI3X2FkZF9teGNfZWhjaV9ocyhpZCwgcGRhdGEpCVwKKwlpbXhfYWRkX214Y19laGNpKCZpbXgyN19teGNfZWhjaV9oc19kYXRhW2lkIC0gMV0sIHBkYXRhKQorCitleHRlcm4gY29uc3Qgc3RydWN0IGlteF9teGNfbW1jX2RhdGEgaW14MjdfbXhjX21tY19kYXRhW10gX19pbml0Y29uc3Q7CisjZGVmaW5lIGlteDI3X2FkZF9teGNfbW1jKGlkLCBwZGF0YSkJXAorCWlteF9hZGRfbXhjX21tYygmaW14MjdfbXhjX21tY19kYXRhW2lkXSwgcGRhdGEpCisKIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW14X214Y19uYW5kX2RhdGEgaW14MjdfbXhjX25hbmRfZGF0YSBfX2luaXRjb25zdDsKICNkZWZpbmUgaW14MjdfYWRkX214Y19uYW5kKHBkYXRhKQlcCiAJaW14X2FkZF9teGNfbmFuZCgmaW14MjdfbXhjX25hbmRfZGF0YSwgcGRhdGEpCiAKK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW14X214Y193MV9kYXRhIGlteDI3X214Y193MV9kYXRhIF9faW5pdGNvbnN0OworI2RlZmluZSBpbXgyN19hZGRfbXhjX3cxKHBkYXRhKQlcCisJaW14X2FkZF9teGNfdzEoJmlteDI3X214Y193MV9kYXRhKQorCiBleHRlcm4gY29uc3Qgc3RydWN0IGlteF9zcGlfaW14X2RhdGEgaW14MjdfY3NwaV9kYXRhW10gX19pbml0Y29uc3Q7CiAjZGVmaW5lIGlteDI3X2FkZF9jc3BpKGlkLCBwZGF0YSkJXAogCWlteF9hZGRfc3BpX2lteCgmaW14MjdfY3NwaV9kYXRhW2lkXSwgcGRhdGEpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLWlteC9kZXZpY2VzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiYTUwNDcuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvZGV2aWNlcy5jCisrKyAvZGV2L251bGwKQEAgLTEsNTUzICswLDAgQEAKLS8qCi0gKiBBdXRob3I6IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KLSAqICAgICAgIDxzb3VyY2VAbXZpc3RhLmNvbT4KLSAqCi0gKiBCYXNlZCBvbiB0aGUgT01BUCBkZXZpY2VzLmMKLSAqCi0gKiAyMDA1IChjKSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUKLSAqIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbSBpcwotICogbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzCi0gKiBvciBpbXBsaWVkLgotICoKLSAqIENvcHlyaWdodCAyMDA2LTIwMDcgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqIENvcHlyaWdodCAyMDA4IEp1ZXJnZW4gQmVpc2VydCwga2VybmVsQHBlbmd1dHJvbml4LmRlCi0gKiBDb3B5cmlnaHQgMjAwOCBTYXNjaGEgSGF1ZXIsIGtlcm5lbEBwZW5ndXRyb25peC5kZQotICogQ29weXJpZ2h0IChjKSAyMDA4IFBhdWxpdXMgWmFsZWNrYXMgPHBhdWxpdXMuemFsZWNrYXNAdGVsdG9uaWthLmx0PgotICogQ29weXJpZ2h0IChjKSAyMDA4IERhcml1cyBBdWd1bGlzIDxkYXJpdXMuYXVndWxpc0B0ZWx0b25pa2EubHQ+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCi0gKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sCi0gKiBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2lycXMuaD4KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KLSNpbmNsdWRlIDxtYWNoL21tYy5oPgotCi0jaW5jbHVkZSAiZGV2aWNlcy5oIgotCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9NWDEpCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGlteDFfY2FtZXJhX3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0ICA9IDB4MDAyMjQwMDAsCi0JCS5lbmQgICAgPSAweDAwMjI0MDEwLAotCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwgewotCQkuc3RhcnQgID0gTVgxX0NTSV9JTlQsCi0JCS5lbmQgICAgPSBNWDFfQ1NJX0lOVCwKLQkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgdTY0IGlteDFfY2FtZXJhX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlteDFfY2FtZXJhX2RldmljZSA9IHsKLQkubmFtZSAgICAgICAgICAgPSAibXgxLWNhbWVyYSIsCi0JLmlkICAgICAgICAgICAgID0gMCwgLyogVGhpcyBpcyB1c2VkIHRvIHB1dCBjYW1lcmFzIG9uIHRoaXMgaW50ZXJmYWNlICovCi0JLmRldgkJPSB7Ci0JCS5kbWFfbWFzayA9ICZpbXgxX2NhbWVyYV9kbWFtYXNrLAotCQkuY29oZXJlbnRfZG1hX21hc2sgPSBETUFfQklUX01BU0soMzIpLAotCX0sCi0JLnJlc291cmNlICAgICAgID0gaW14MV9jYW1lcmFfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUoaW14MV9jYW1lcmFfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaW14X3J0Y19yZXNvdXJjZXNbXSA9IHsKLQl7Ci0JCS5zdGFydCAgPSAweDAwMjA0MDAwLAotCQkuZW5kICAgID0gMHgwMDIwNDAyNCwKLQkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAotCX0sIHsKLQkJLnN0YXJ0ICA9IE1YMV9SVENfSU5ULAotCQkuZW5kICAgID0gTVgxX1JUQ19JTlQsCi0JCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKLQl9LCB7Ci0JCS5zdGFydCAgPSBNWDFfUlRDX1NBTUlOVCwKLQkJLmVuZCAgICA9IE1YMV9SVENfU0FNSU5ULAotCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaW14X3J0Y19kZXZpY2UgPSB7Ci0JLm5hbWUgICAgICAgICAgID0gInJ0Yy1pbXgiLAotCS5pZCAgICAgICAgICAgICA9IDAsCi0JLnJlc291cmNlICAgICAgID0gaW14X3J0Y19yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRShpbXhfcnRjX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGlteF93ZHRfcmVzb3VyY2VzW10gPSB7Ci0JewotCQkuc3RhcnQgID0gMHgwMDIwMTAwMCwKLQkJLmVuZCAgICA9IDB4MDAyMDEwMDgsCi0JCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKLQl9LCB7Ci0JCS5zdGFydCAgPSBNWDFfV0RUX0lOVCwKLQkJLmVuZCAgICA9IE1YMV9XRFRfSU5ULAotCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaW14X3dkdF9kZXZpY2UgPSB7Ci0JLm5hbWUgICAgICAgICAgID0gImlteC13ZHQiLAotCS5pZCAgICAgICAgICAgICA9IDAsCi0JLnJlc291cmNlICAgICAgID0gaW14X3dkdF9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRShpbXhfd2R0X3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGlteF91c2JfcmVzb3VyY2VzW10gPSB7Ci0JewotCQkuc3RhcnQJPSAweDAwMjEyMDAwLAotCQkuZW5kCT0gMHgwMDIxMjE0OCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwgewotCQkuc3RhcnQJPSBNWDFfVVNCRF9JTlQwLAotCQkuZW5kCT0gTVgxX1VTQkRfSU5UMCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwgewotCQkuc3RhcnQJPSBNWDFfVVNCRF9JTlQxLAotCQkuZW5kCT0gTVgxX1VTQkRfSU5UMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwgewotCQkuc3RhcnQJPSBNWDFfVVNCRF9JTlQyLAotCQkuZW5kCT0gTVgxX1VTQkRfSU5UMiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwgewotCQkuc3RhcnQJPSBNWDFfVVNCRF9JTlQzLAotCQkuZW5kCT0gTVgxX1VTQkRfSU5UMywKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwgewotCQkuc3RhcnQJPSBNWDFfVVNCRF9JTlQ0LAotCQkuZW5kCT0gTVgxX1VTQkRfSU5UNCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwgewotCQkuc3RhcnQJPSBNWDFfVVNCRF9JTlQ1LAotCQkuZW5kCT0gTVgxX1VTQkRfSU5UNSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwgewotCQkuc3RhcnQJPSBNWDFfVVNCRF9JTlQ2LAotCQkuZW5kCT0gTVgxX1VTQkRfSU5UNiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaW14X3VzYl9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImlteF91ZGMiLAotCS5pZAkJPSAwLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShpbXhfdXNiX3Jlc291cmNlcyksCi0JLnJlc291cmNlCT0gaW14X3VzYl9yZXNvdXJjZXMsCi19OwotCi0vKiBHUElPIHBvcnQgZGVzY3JpcHRpb24gKi8KLXN0YXRpYyBzdHJ1Y3QgbXhjX2dwaW9fcG9ydCBpbXhfZ3Bpb19wb3J0c1tdID0gewotCXsKLQkJLmNoaXAubGFiZWwgPSAiZ3Bpby0wIiwKLQkJLmJhc2UgPSAodm9pZCBfX2lvbWVtICopTVgxX0lPX0FERFJFU1MoTVgxX0dQSU9fQkFTRV9BRERSKSwKLQkJLmlycSA9IE1YMV9HUElPX0lOVF9QT1JUQSwKLQkJLnZpcnR1YWxfaXJxX3N0YXJ0ID0gTVhDX0dQSU9fSVJRX1NUQVJULAotCX0sIHsKLQkJLmNoaXAubGFiZWwgPSAiZ3Bpby0xIiwKLQkJLmJhc2UgPSAodm9pZCBfX2lvbWVtICopTVgxX0lPX0FERFJFU1MoTVgxX0dQSU9fQkFTRV9BRERSICsgMHgxMDApLAotCQkuaXJxID0gTVgxX0dQSU9fSU5UX1BPUlRCLAotCQkudmlydHVhbF9pcnFfc3RhcnQgPSBNWENfR1BJT19JUlFfU1RBUlQgKyAzMiwKLQl9LCB7Ci0JCS5jaGlwLmxhYmVsID0gImdwaW8tMiIsCi0JCS5iYXNlID0gKHZvaWQgX19pb21lbSAqKU1YMV9JT19BRERSRVNTKE1YMV9HUElPX0JBU0VfQUREUiArIDB4MjAwKSwKLQkJLmlycSA9IE1YMV9HUElPX0lOVF9QT1JUQywKLQkJLnZpcnR1YWxfaXJxX3N0YXJ0ID0gTVhDX0dQSU9fSVJRX1NUQVJUICsgNjQsCi0JfSwgewotCQkuY2hpcC5sYWJlbCA9ICJncGlvLTMiLAotCQkuYmFzZSA9ICh2b2lkIF9faW9tZW0gKilNWDFfSU9fQUREUkVTUyhNWDFfR1BJT19CQVNFX0FERFIgKyAweDMwMCksCi0JCS5pcnEgPSBNWDFfR1BJT19JTlRfUE9SVEQsCi0JCS52aXJ0dWFsX2lycV9zdGFydCA9IE1YQ19HUElPX0lSUV9TVEFSVCArIDk2LAotCX0KLX07Ci0KLWludCBfX2luaXQgaW14MV9yZWdpc3Rlcl9ncGlvcyh2b2lkKQotewotCXJldHVybiBteGNfZ3Bpb19pbml0KGlteF9ncGlvX3BvcnRzLCBBUlJBWV9TSVpFKGlteF9ncGlvX3BvcnRzKSk7Ci19Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX01BQ0hfTVgyMSkgfHwgZGVmaW5lZChDT05GSUdfTUFDSF9NWDI3KQotCi0jaWZkZWYgQ09ORklHX01BQ0hfTVgyNwotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteDI3X2NhbWVyYV9yZXNvdXJjZXNbXSA9IHsKLQl7Ci0JICAgICAgIC5zdGFydCA9IE1YMjdfQ1NJX0JBU0VfQUREUiwKLQkgICAgICAgLmVuZCA9IE1YMjdfQ1NJX0JBU0VfQUREUiArIDB4MWYsCi0JICAgICAgIC5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCX0sIHsKLQkgICAgICAgLnN0YXJ0ID0gTVgyN19FTU1BX1BSUF9CQVNFX0FERFIsCi0JICAgICAgIC5lbmQgPSBNWDI3X0VNTUFfUFJQX0JBU0VfQUREUiArIDB4MWYsCi0JICAgICAgIC5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCX0sIHsKLQkgICAgICAgLnN0YXJ0ID0gTVgyN19JTlRfQ1NJLAotCSAgICAgICAuZW5kID0gTVgyN19JTlRfQ1NJLAotCSAgICAgICAuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKLQl9LHsKLQkgICAgICAgLnN0YXJ0ID0gTVgyN19JTlRfRU1NQVBSUCwKLQkgICAgICAgLmVuZCA9IE1YMjdfSU5UX0VNTUFQUlAsCi0JICAgICAgIC5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19Owotc3RydWN0IHBsYXRmb3JtX2RldmljZSBteDI3X2NhbWVyYV9kZXZpY2UgPSB7Ci0JLm5hbWUgPSAibXgyLWNhbWVyYSIsCi0JLmlkID0gMCwKLQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXgyN19jYW1lcmFfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UgPSBteDI3X2NhbWVyYV9yZXNvdXJjZXMsCi0JLmRldiA9IHsKLQkJLmNvaGVyZW50X2RtYV9tYXNrID0gMHhmZmZmZmZmZiwKLQl9LAotfTsKLSNlbmRpZgotCi0vKgotICogR2VuZXJhbCBQdXJwb3NlIFRpbWVyCi0gKiAtIGkuTVgyMTogMyB0aW1lcnMKLSAqIC0gaS5NWDI3OiA2IHRpbWVycwotICovCi0jZGVmaW5lIERFRklORV9JTVhfR1BUX0RFVklDRShuLCBiYXNlYWRkciwgaXJxKQkJCQlcCi0Jc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0aW1lciAjIyBuICMjX3Jlc291cmNlc1tdID0gewkJXAotCQl7CQkJCQkJCVwKLQkJCS5zdGFydCA9IGJhc2VhZGRyLAkJCQlcCi0JCQkuZW5kID0gYmFzZWFkZHIgKyBTWl80SyAtIDEsCQkJXAotCQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCQkJXAotCQl9LCB7CQkJCQkJCVwKLQkJCS5zdGFydCA9IGlycSwJCQkJCVwKLQkJCS5lbmQgPSBpcnEsCQkJCQlcCi0JCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwJCQlcCi0JCX0JCQkJCQkJXAotCX07CQkJCQkJCQlcCi0JCQkJCQkJCQlcCi0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfZ3B0ICMjIG4gPSB7CQkJCVwKLQkJLm5hbWUgPSAiaW14X2dwdCIsCQkJCQlcCi0JCS5pZCA9IG4sCQkJCQkJXAotCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodGltZXIgIyMgbiAjIyBfcmVzb3VyY2VzKSwJXAotCQkucmVzb3VyY2UgPSB0aW1lciAjIyBuICMjIF9yZXNvdXJjZXMsCQkJXAotCX0KLQotLyogV2UgdXNlIGdwdDEgYXMgc3lzdGVtIHRpbWVyLCBzbyBkbyBub3QgYWRkIGEgZGV2aWNlIGZvciB0aGlzIG9uZSAqLwotREVGSU5FX0lNWF9HUFRfREVWSUNFKDEsIE1YMnhfR1BUMl9CQVNFX0FERFIsIE1YMnhfSU5UX0dQVDIpOwotREVGSU5FX0lNWF9HUFRfREVWSUNFKDIsIE1YMnhfR1BUM19CQVNFX0FERFIsIE1YMnhfSU5UX0dQVDMpOwotCi0jaWZkZWYgQ09ORklHX01BQ0hfTVgyNwotREVGSU5FX0lNWF9HUFRfREVWSUNFKDMsIE1YMjdfR1BUNF9CQVNFX0FERFIsIE1YMjdfSU5UX0dQVDQpOwotREVGSU5FX0lNWF9HUFRfREVWSUNFKDQsIE1YMjdfR1BUNV9CQVNFX0FERFIsIE1YMjdfSU5UX0dQVDUpOwotREVGSU5FX0lNWF9HUFRfREVWSUNFKDUsIE1YMjdfR1BUNl9CQVNFX0FERFIsIE1YMjdfSU5UX0dQVDYpOwotI2VuZGlmCi0KLS8qIFdhdGNoZG9nOiBpLk1YMSBoYXMgc2VwZXJhdGUgZHJpdmVyLCBpLk1YMjEgYW5kIGkuTVgyNyBhcmUgZXF1YWwgKi8KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXhjX3dkdF9yZXNvdXJjZXNbXSA9IHsKLQl7Ci0JCS5zdGFydCA9IE1YMnhfV0RPR19CQVNFX0FERFIsCi0JCS5lbmQgPSBNWDJ4X1dET0dfQkFTRV9BRERSICsgU1pfNEsgLSAxLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLQl9LAotfTsKLQotc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfd2R0ID0gewotCS5uYW1lID0gImlteDItd2R0IiwKLQkuaWQgPSAwLAotCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNfd2R0X3Jlc291cmNlcyksCi0JLnJlc291cmNlID0gbXhjX3dkdF9yZXNvdXJjZXMsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y193MV9tYXN0ZXJfcmVzb3VyY2VzW10gPSB7Ci0JewotCQkuc3RhcnQgPSBNWDJ4X09XSVJFX0JBU0VfQUREUiwKLQkJLmVuZCA9IE1YMnhfT1dJUkVfQkFTRV9BRERSICsgU1pfNEsgLSAxLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLQl9LAotfTsKLQotc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfdzFfbWFzdGVyX2RldmljZSA9IHsKLQkubmFtZSA9ICJteGNfdzEiLAotCS5pZCA9IDAsCi0JLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKG14Y193MV9tYXN0ZXJfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UgPSBteGNfdzFfbWFzdGVyX3Jlc291cmNlcywKLX07Ci0KLS8qCi0gKiBsY2RjOgotICogLSBpLk1YMTogdGhlIGJhc2ljIGNvbnRyb2xsZXIKLSAqIC0gaS5NWDIxOiB0byBiZSBjaGVja2VkCi0gKiAtIGkuTVgyNzogbGlrZSBpLk1YMSwgd2l0aCBzbGlnaHRseSB2YXJpYXRpb25zCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXhjX2ZiW10gPSB7Ci0JewotCQkuc3RhcnQgPSBNWDJ4X0xDRENfQkFTRV9BRERSLAotCQkuZW5kID0gTVgyeF9MQ0RDX0JBU0VfQUREUiArIFNaXzRLIC0gMSwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwgewotCQkuc3RhcnQgPSBNWDJ4X0lOVF9MQ0RDLAotCQkuZW5kID0gTVgyeF9JTlRfTENEQywKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi0JfQotfTsKLQotLyogbXhjIGxjZCBkcml2ZXIgKi8KLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX2ZiX2RldmljZSA9IHsKLQkubmFtZSA9ICJpbXgtZmIiLAotCS5pZCA9IDAsCi0JLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKG14Y19mYiksCi0JLnJlc291cmNlID0gbXhjX2ZiLAotCS5kZXYgPSB7Ci0JCS5jb2hlcmVudF9kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMiksCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXhjX3B3bV9yZXNvdXJjZXNbXSA9IHsKLQl7Ci0JCS5zdGFydCA9IE1YMnhfUFdNX0JBU0VfQUREUiwKLQkJLmVuZCA9IE1YMnhfUFdNX0JBU0VfQUREUiArIFNaXzRLIC0gMSwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwgewotCQkuc3RhcnQgPSBNWDJ4X0lOVF9QV00sCi0JCS5lbmQgPSBNWDJ4X0lOVF9QV00sCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotCX0KLX07Ci0KLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3B3bV9kZXZpY2UgPSB7Ci0JLm5hbWUgPSAibXhjX3B3bSIsCi0JLmlkID0gMCwKLQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX3B3bV9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZSA9IG14Y19wd21fcmVzb3VyY2VzLAotfTsKLQotI2RlZmluZSBERUZJTkVfTVhDX01NQ19ERVZJQ0UobiwgYmFzZWFkZHIsIGlycSwgZG1hcmVxKQkJCVwKLQlzdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y19zZGhjX3Jlc291cmNlcyAjIyBuW10gPSB7CQlcCi0JCXsJCQkJCQkJXAotCQkJLnN0YXJ0ID0gYmFzZWFkZHIsCQkJCVwKLQkJCS5lbmQgPSBiYXNlYWRkciArIFNaXzRLIC0gMSwJCQlcCi0JCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwJCQlcCi0JCX0sIHsJCQkJCQkJXAotCQkJLnN0YXJ0ID0gaXJxLAkJCQkJXAotCQkJLmVuZCA9IGlycSwJCQkJCVwKLQkJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAkJCVwKLQkJfSwgewkJCQkJCQlcCi0JCQkuc3RhcnQgPSBkbWFyZXEsCQkJCVwKLQkJCS5lbmQgPSBkbWFyZXEsCQkJCQlcCi0JCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0RNQSwJCQlcCi0JCX0sCQkJCQkJCVwKLQl9OwkJCQkJCQkJXAotCQkJCQkJCQkJXAotCXN0YXRpYyB1NjQgbXhjX3NkaGMgIyMgbiAjIyBfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7CVwKLQkJCQkJCQkJCVwKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19zZGhjX2RldmljZSAjIyBuID0gewkJCVwKLQkJLm5hbWUgPSAibXhjLW1tYyIsCQkJCQlcCi0JCS5pZCA9IG4sCQkJCQkJXAotCQkuZGV2ID0gewkJCQkJCVwKLQkJCS5kbWFfbWFzayA9ICZteGNfc2RoYyAjIyBuICMjIF9kbWFtYXNrLAkJXAotCQkJLmNvaGVyZW50X2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKSwJCVwKLQkJfSwJCQkJCQkJXAotCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX3NkaGNfcmVzb3VyY2VzICMjIG4pLAlcCi0JCS5yZXNvdXJjZSA9IG14Y19zZGhjX3Jlc291cmNlcyAjIyBuLAkJXAotCX0KLQotREVGSU5FX01YQ19NTUNfREVWSUNFKDAsIE1YMnhfU0RIQzFfQkFTRV9BRERSLCBNWDJ4X0lOVF9TREhDMSwgTVgyeF9ETUFfUkVRX1NESEMxKTsKLURFRklORV9NWENfTU1DX0RFVklDRSgxLCBNWDJ4X1NESEMyX0JBU0VfQUREUiwgTVgyeF9JTlRfU0RIQzIsIE1YMnhfRE1BX1JFUV9TREhDMik7Ci0KLSNpZmRlZiBDT05GSUdfTUFDSF9NWDI3Ci1zdGF0aWMgc3RydWN0IHJlc291cmNlIG90Z19yZXNvdXJjZXNbXSA9IHsKLQl7Ci0JCS5zdGFydCA9IE1YMjdfVVNCT1RHX0JBU0VfQUREUiwKLQkJLmVuZCA9IE1YMjdfVVNCT1RHX0JBU0VfQUREUiArIDB4MWZmLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLQl9LCB7Ci0JCS5zdGFydCA9IE1YMjdfSU5UX1VTQjMsCi0JCS5lbmQgPSBNWDI3X0lOVF9VU0IzLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHU2NCBvdGdfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci0KLS8qIE9URyBnYWRnZXQgZGV2aWNlICovCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19vdGdfdWRjX2RldmljZSA9IHsKLQkubmFtZQkJPSAiZnNsLXVzYjItdWRjIiwKLQkuaWQJCT0gLTEsCi0JLmRldgkJPSB7Ci0JCS5kbWFfbWFzawkJPSAmb3RnX2RtYW1hc2ssCi0JCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JfSwKLQkucmVzb3VyY2UJPSBvdGdfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShvdGdfcmVzb3VyY2VzKSwKLX07Ci0KLS8qIE9URyBob3N0ICovCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19vdGdfaG9zdCA9IHsKLQkubmFtZSA9ICJteGMtZWhjaSIsCi0JLmlkID0gMCwKLQkuZGV2ID0gewotCQkuY29oZXJlbnRfZG1hX21hc2sgPSBETUFfQklUX01BU0soMzIpLAotCQkuZG1hX21hc2sgPSAmb3RnX2RtYW1hc2ssCi0JfSwKLQkucmVzb3VyY2UgPSBvdGdfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShvdGdfcmVzb3VyY2VzKSwKLX07Ci0KLS8qIFVTQiBob3N0IDEgKi8KLQotc3RhdGljIHU2NCB1c2JoMV9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteGNfdXNiaDFfcmVzb3VyY2VzW10gPSB7Ci0JewotCQkuc3RhcnQgPSBNWDI3X1VTQk9UR19CQVNFX0FERFIgKyAweDIwMCwKLQkJLmVuZCA9IE1YMjdfVVNCT1RHX0JBU0VfQUREUiArIDB4M2ZmLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLQl9LCB7Ci0JCS5zdGFydCA9IE1YMjdfSU5UX1VTQjEsCi0JCS5lbmQgPSBNWDI3X0lOVF9VU0IxLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfdXNiaDEgPSB7Ci0JLm5hbWUgPSAibXhjLWVoY2kiLAotCS5pZCA9IDEsCi0JLmRldiA9IHsKLQkJLmNvaGVyZW50X2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJLmRtYV9tYXNrID0gJnVzYmgxX2RtYW1hc2ssCi0JfSwKLQkucmVzb3VyY2UgPSBteGNfdXNiaDFfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNfdXNiaDFfcmVzb3VyY2VzKSwKLX07Ci0KLS8qIFVTQiBob3N0IDIgKi8KLXN0YXRpYyB1NjQgdXNiaDJfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXhjX3VzYmgyX3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0ID0gTVgyN19VU0JPVEdfQkFTRV9BRERSICsgMHg0MDAsCi0JCS5lbmQgPSBNWDI3X1VTQk9UR19CQVNFX0FERFIgKyAweDVmZiwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwgewotCQkuc3RhcnQgPSBNWDI3X0lOVF9VU0IyLAotCQkuZW5kID0gTVgyN19JTlRfVVNCMiwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3VzYmgyID0gewotCS5uYW1lID0gIm14Yy1laGNpIiwKLQkuaWQgPSAyLAotCS5kZXYgPSB7Ci0JCS5jb2hlcmVudF9kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMiksCi0JCS5kbWFfbWFzayA9ICZ1c2JoMl9kbWFtYXNrLAotCX0sCi0JLnJlc291cmNlID0gbXhjX3VzYmgyX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX3VzYmgyX3Jlc291cmNlcyksCi19OwotI2VuZGlmCi0KLS8qIEdQSU8gcG9ydCBkZXNjcmlwdGlvbiAqLwotI2RlZmluZSBERUZJTkVfTVhDX0dQSU9fUE9SVF9JUlEoU09DLCBuLCBfaXJxKQkJCQlcCi0JewkJCQkJCQkJXAotCQkuY2hpcC5sYWJlbCA9ICJncGlvLSIgI24sCQkJCVwKLQkJLmlycSA9IF9pcnEsCQkJCQkJXAotCQkuYmFzZSA9IFNPQyAjIyBfSU9fQUREUkVTUyhNWDJ4X0dQSU9fQkFTRV9BRERSICsJXAotCQkJCW4gKiAweDEwMCksCQkJCVwKLQkJLnZpcnR1YWxfaXJxX3N0YXJ0ID0gTVhDX0dQSU9fSVJRX1NUQVJUICsgbiAqIDMyLAlcCi0JfQotCi0jZGVmaW5lIERFRklORV9NWENfR1BJT19QT1JUKFNPQywgbikJCQkJCVwKLQl7CQkJCQkJCQlcCi0JCS5jaGlwLmxhYmVsID0gImdwaW8tIiAjbiwJCQkJXAotCQkuYmFzZSA9IFNPQyAjIyBfSU9fQUREUkVTUyhNWDJ4X0dQSU9fQkFTRV9BRERSICsJXAotCQkJCW4gKiAweDEwMCksCQkJCVwKLQkJLnZpcnR1YWxfaXJxX3N0YXJ0ID0gTVhDX0dQSU9fSVJRX1NUQVJUICsgbiAqIDMyLAlcCi0JfQotCi0jZGVmaW5lIERFRklORV9NWENfR1BJT19QT1JUUyhTT0MsIHBmeCkJCQkJCVwKLQlzdGF0aWMgc3RydWN0IG14Y19ncGlvX3BvcnQgcGZ4ICMjIF9ncGlvX3BvcnRzW10gPSB7CQlcCi0JCURFRklORV9NWENfR1BJT19QT1JUX0lSUShTT0MsIDAsIFNPQyAjIyBfSU5UX0dQSU8pLAlcCi0JCURFRklORV9NWENfR1BJT19QT1JUKFNPQywgMSksCQkJCVwKLQkJREVGSU5FX01YQ19HUElPX1BPUlQoU09DLCAyKSwJCQkJXAotCQlERUZJTkVfTVhDX0dQSU9fUE9SVChTT0MsIDMpLAkJCQlcCi0JCURFRklORV9NWENfR1BJT19QT1JUKFNPQywgNCksCQkJCVwKLQkJREVGSU5FX01YQ19HUElPX1BPUlQoU09DLCA1KSwJCQkJXAotCX0KLQotI2lmZGVmIENPTkZJR19NQUNIX01YMjEKLURFRklORV9NWENfR1BJT19QT1JUUyhNWDIxLCBpbXgyMSk7Ci0KLWludCBfX2luaXQgaW14MjFfcmVnaXN0ZXJfZ3Bpb3Modm9pZCkKLXsKLQlyZXR1cm4gbXhjX2dwaW9faW5pdChpbXgyMV9ncGlvX3BvcnRzLCBBUlJBWV9TSVpFKGlteDIxX2dwaW9fcG9ydHMpKTsKLX0KLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX01BQ0hfTVgyNwotREVGSU5FX01YQ19HUElPX1BPUlRTKE1YMjcsIGlteDI3KTsKLQotaW50IF9faW5pdCBpbXgyN19yZWdpc3Rlcl9ncGlvcyh2b2lkKQotewotCXJldHVybiBteGNfZ3Bpb19pbml0KGlteDI3X2dwaW9fcG9ydHMsIEFSUkFZX1NJWkUoaW14MjdfZ3Bpb19wb3J0cykpOwotfQotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfTUFDSF9NWDIxCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIG14MjFfdXNiaGNfcmVzb3VyY2VzW10gPSB7Ci0JewotCQkuc3RhcnQJPSBNWDIxX1VTQk9UR19CQVNFX0FERFIsCi0JCS5lbmQJPSBNWDIxX1VTQk9UR19CQVNFX0FERFIgKyBTWl84SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JewotCQkuc3RhcnQJCT0gTVgyMV9JTlRfVVNCSE9TVCwKLQkJLmVuZAkJPSBNWDIxX0lOVF9VU0JIT1NULAotCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXgyMV91c2JoY19kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImlteDIxLWhjZCIsCi0JLmlkCQk9IDAsCi0JLmRldgkJPSB7Ci0JCS5kbWFfbWFzayA9ICZteDIxX3VzYmhjX2RldmljZS5kZXYuY29oZXJlbnRfZG1hX21hc2ssCi0JCS5jb2hlcmVudF9kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMiksCi0JfSwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobXgyMV91c2JoY19yZXNvdXJjZXMpLAotCS5yZXNvdXJjZQk9IG14MjFfdXNiaGNfcmVzb3VyY2VzLAotfTsKLSNlbmRpZgotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGlteF9rcHBfcmVzb3VyY2VzW10gPSB7Ci0JewotCQkuc3RhcnQgID0gTVgyeF9LUFBfQkFTRV9BRERSLAotCQkuZW5kICAgID0gTVgyeF9LUFBfQkFTRV9BRERSICsgMHhmLAotCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0KLQl9LCB7Ci0JCS5zdGFydCAgPSBNWDJ4X0lOVF9LUFAsCi0JCS5lbmQgICAgPSBNWDJ4X0lOVF9LUFAsCi0JCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbXhfa3BwX2RldmljZSA9IHsKLQkubmFtZSA9ICJpbXgta2V5cGFkIiwKLQkuaWQgPSAtMSwKLQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUoaW14X2twcF9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZSA9IGlteF9rcHBfcmVzb3VyY2VzLAotfTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9kZXZpY2VzLmggYi9hcmNoL2FybS9tYWNoLWlteC9kZXZpY2VzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwN2YwMmEuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvZGV2aWNlcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotI2lmZGVmIENPTkZJR19BUkNIX01YMQotZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaW14MV9jYW1lcmFfZGV2aWNlOwotZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaW14X3J0Y19kZXZpY2U7Ci1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbXhfd2R0X2RldmljZTsKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlteF91c2JfZGV2aWNlOwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19NQUNIX01YMjEpIHx8IGRlZmluZWQoQ09ORklHX01BQ0hfTVgyNykKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19ncHQxOwotZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX2dwdDI7Ci0jaWZkZWYgQ09ORklHX01BQ0hfTVgyNwotZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX2dwdDM7Ci1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfZ3B0NDsKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19ncHQ1OwotI2VuZGlmCi1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfd2R0OwotZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3cxX21hc3Rlcl9kZXZpY2U7Ci1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfZmJfZGV2aWNlOwotZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3B3bV9kZXZpY2U7Ci1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfc2RoY19kZXZpY2UwOwotZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3NkaGNfZGV2aWNlMTsKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19vdGdfdWRjX2RldmljZTsKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14MjdfY2FtZXJhX2RldmljZTsKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19vdGdfaG9zdDsKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y191c2JoMTsKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y191c2JoMjsKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14MjFfdXNiaGNfZGV2aWNlOwotZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaW14X2twcF9kZXZpY2U7Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L2RtYS12MS5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvZG1hLXYxLmMKaW5kZXggM2U4YzQ3Yy4uZTlmMTc2OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvZG1hLXYxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvZG1hLXYxLmMKQEAgLTgxOCw5ICs4MTgsMTEgQEAKIAkJaW14X2RtYXYxX2Jhc2VhZGRyID0gTVgyN19JT19BRERSRVNTKE1YMjdfRE1BX0JBU0VfQUREUik7CiAJZWxzZQogI2VuZGlmCi0JCUJVRygpOworCQlyZXR1cm4gMDsKIAogCWRtYV9jbGsgPSBjbGtfZ2V0KE5VTEwsICJkbWEiKTsKKwlpZiAoSVNfRVJSKGRtYV9jbGspKQorCQlyZXR1cm4gUFRSX0VSUihkbWFfY2xrKTsKIAljbGtfZW5hYmxlKGRtYV9jbGspOwogCiAJLyogcmVzZXQgRE1BIG1vZHVsZSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvZXVrcmVhX21iaW14MjctYmFzZWJvYXJkLmMgYi9hcmNoL2FybS9tYWNoLWlteC9ldWtyZWFfbWJpbXgyNy1iYXNlYm9hcmQuYwppbmRleCA3ZTFlOWRjLi4yNzVjODU4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9ldWtyZWFfbWJpbXgyNy1iYXNlYm9hcmQuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9ldWtyZWFfbWJpbXgyNy1iYXNlYm9hcmQuYwpAQCAtMjYsMjAgKzI2LDE2IEBACiAjaW5jbHVkZSA8bGludXgvc3BpL2Fkczc4NDYuaD4KICNpbmNsdWRlIDxsaW51eC9iYWNrbGlnaHQuaD4KICNpbmNsdWRlIDx2aWRlby9wbGF0Zm9ybV9sY2QuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnB1dC9tYXRyaXhfa2V5cGFkLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAKICNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgogI2luY2x1ZGUgPG1hY2gvaW9tdXgtbXgyNy5oPgotI2luY2x1ZGUgPG1hY2gvaW14ZmIuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9tbWMuaD4KICNpbmNsdWRlIDxtYWNoL3NwaS5oPgogI2luY2x1ZGUgPG1hY2gvYXVkbXV4Lmg+CiAKICNpbmNsdWRlICJkZXZpY2VzLWlteDI3LmgiCi0jaW5jbHVkZSAiZGV2aWNlcy5oIgogCiBzdGF0aWMgY29uc3QgaW50IGV1a3JlYV9tYmlteDI3X3BpbnNbXSBfX2luaXRjb25zdCA9IHsKIAkvKiBVQVJUMiAqLwpAQCAtMTExLDcgKzEwNyw4IEBACiAJS0VZKDEsIDEsIEtFWV9MRUZUKSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgbWF0cml4X2tleW1hcF9kYXRhIGV1a3JlYV9tYmlteDI3X2tleW1hcF9kYXRhID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBtYXRyaXhfa2V5bWFwX2RhdGEKK2V1a3JlYV9tYmlteDI3X2tleW1hcF9kYXRhIF9faW5pdGNvbnN0ID0gewogCS5rZXltYXAgICAgICAgICA9IGV1a3JlYV9tYmlteDI3X2tleW1hcCwKIAkua2V5bWFwX3NpemUgICAgPSBBUlJBWV9TSVpFKGV1a3JlYV9tYmlteDI3X2tleW1hcCksCiB9OwpAQCAtMTk2LDcgKzE5Myw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaW14X2ZiX3BsYXRmb3JtX2RhdGEgZXVrcmVhX21iaW14MjdfZmJfZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW14X2ZiX3BsYXRmb3JtX2RhdGEgZXVrcmVhX21iaW14MjdfZmJfZGF0YSBfX2luaXRjb25zdCA9IHsKIAkubW9kZSA9IGV1a3JlYV9tYmlteDI3X21vZGVzLAogCS5udW1fbW9kZXMgPSBBUlJBWV9TSVpFKGV1a3JlYV9tYmlteDI3X21vZGVzKSwKIApAQCAtMzAwLDcgKzI5Nyw3IEBACiAJJmxlZHNfZ3BpbywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaW14bW1jX3BsYXRmb3JtX2RhdGEgc2RoY19wZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW14bW1jX3BsYXRmb3JtX2RhdGEgc2RoY19wZGF0YSBfX2luaXRjb25zdCA9IHsKIAkuZGF0M19jYXJkX2RldGVjdCA9IDEsCiB9OwogCkBAIC0zNDUsOCArMzQyLDggQEAKIAlpbXgyN19hZGRfaW14X3VhcnQzKCZ1YXJ0X3BkYXRhKTsKICNlbmRpZgogCi0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX2ZiX2RldmljZSwgJmV1a3JlYV9tYmlteDI3X2ZiX2RhdGEpOwotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19zZGhjX2RldmljZTAsICZzZGhjX3BkYXRhKTsKKwlpbXgyN19hZGRfaW14X2ZiKCZldWtyZWFfbWJpbXgyN19mYl9kYXRhKTsKKwlpbXgyN19hZGRfbXhjX21tYygwLCAmc2RoY19wZGF0YSk7CiAKIAlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBldWtyZWFfbWJpbXgyN19pMmNfZGV2aWNlcywKIAkJCQlBUlJBWV9TSVpFKGV1a3JlYV9tYmlteDI3X2kyY19kZXZpY2VzKSk7CkBAIC0zODAsNyArMzc3LDcgQEAKIAlncGlvX3JlcXVlc3QoR1BJT19QT1JUQSB8IDI1LCAibGNkX2VuYWJsZSIpOwogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZXVrcmVhX21iaW14MjdfbGNkX3Bvd2VyZGV2KTsKIAotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJmlteF9rcHBfZGV2aWNlLCAmZXVrcmVhX21iaW14Mjdfa2V5bWFwX2RhdGEpOworCWlteDI3X2FkZF9pbXhfa2V5cGFkKCZldWtyZWFfbWJpbXgyN19rZXltYXBfZGF0YSk7CiAKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhwbGF0Zm9ybV9kZXZpY2VzLCBBUlJBWV9TSVpFKHBsYXRmb3JtX2RldmljZXMpKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L2V1a3JlYV9tYmlteHNkMjUtYmFzZWJvYXJkLmMgYi9hcmNoL2FybS9tYWNoLWlteC9ldWtyZWFfbWJpbXhzZDI1LWJhc2Vib2FyZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiNzA1YzIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWlteC9ldWtyZWFfbWJpbXhzZDI1LWJhc2Vib2FyZC5jCkBAIC0wLDAgKzEsMjk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEVyaWMgQmVuYXJkIC0gZXJpY0BldWtyZWEuY29tCisgKgorICogQmFzZWQgb24gcGNtOTcwLWJhc2Vib2FyZC5jIHdoaWNoIGlzIDoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBKdWVyZ2VuIEJlaXNlcnQgKGtlcm5lbEBwZW5ndXRyb25peC5kZSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKKyAqIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvX2tleXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPHZpZGVvL3BsYXRmb3JtX2xjZC5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvaW9tdXgtbXgyNS5oPgorI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8bWFjaC9teDI1Lmg+CisjaW5jbHVkZSA8bWFjaC9pbXgtdWFydC5oPgorI2luY2x1ZGUgPG1hY2gvYXVkbXV4Lmg+CisKKyNpbmNsdWRlICJkZXZpY2VzLWlteDI1LmgiCisKK3N0YXRpYyBpb211eF92M19jZmdfdCBldWtyZWFfbWJpbXhzZF9wYWRzW10gPSB7CisJLyogTENEICovCisJTVgyNV9QQURfTEQwX19MRDAsCisJTVgyNV9QQURfTEQxX19MRDEsCisJTVgyNV9QQURfTEQyX19MRDIsCisJTVgyNV9QQURfTEQzX19MRDMsCisJTVgyNV9QQURfTEQ0X19MRDQsCisJTVgyNV9QQURfTEQ1X19MRDUsCisJTVgyNV9QQURfTEQ2X19MRDYsCisJTVgyNV9QQURfTEQ3X19MRDcsCisJTVgyNV9QQURfTEQ4X19MRDgsCisJTVgyNV9QQURfTEQ5X19MRDksCisJTVgyNV9QQURfTEQxMF9fTEQxMCwKKwlNWDI1X1BBRF9MRDExX19MRDExLAorCU1YMjVfUEFEX0xEMTJfX0xEMTIsCisJTVgyNV9QQURfTEQxM19fTEQxMywKKwlNWDI1X1BBRF9MRDE0X19MRDE0LAorCU1YMjVfUEFEX0xEMTVfX0xEMTUsCisJTVgyNV9QQURfR1BJT19FX19MRDE2LAorCU1YMjVfUEFEX0dQSU9fRl9fTEQxNywKKwlNWDI1X1BBRF9IU1lOQ19fSFNZTkMsCisJTVgyNV9QQURfVlNZTkNfX1ZTWU5DLAorCU1YMjVfUEFEX0xTQ0xLX19MU0NMSywKKwlNWDI1X1BBRF9PRV9BQ0RfX09FX0FDRCwKKwlNWDI1X1BBRF9DT05UUkFTVF9fQ09OVFJBU1QsCisJLyogTENEX1BXUiAqLworCU1YMjVfUEFEX1BXTV9fR1BJT18xXzI2LAorCS8qIExFRCAqLworCU1YMjVfUEFEX1BPV0VSX0ZBSUxfX0dQSU9fM18xOSwKKwkvKiBTV0lUQ0ggKi8KKwlNWDI1X1BBRF9WU1RCWV9BQ0tfX0dQSU9fM18xOCwKKwkvKiBVQVJUMiAqLworCU1YMjVfUEFEX1VBUlQyX1JUU19fVUFSVDJfUlRTLAorCU1YMjVfUEFEX1VBUlQyX0NUU19fVUFSVDJfQ1RTLAorCU1YMjVfUEFEX1VBUlQyX1RYRF9fVUFSVDJfVFhELAorCU1YMjVfUEFEX1VBUlQyX1JYRF9fVUFSVDJfUlhELAorCS8qIFNEMSAqLworCU1YMjVfUEFEX1NEMV9DTURfX1NEMV9DTUQsCisJTVgyNV9QQURfU0QxX0NMS19fU0QxX0NMSywKKwlNWDI1X1BBRF9TRDFfREFUQTBfX1NEMV9EQVRBMCwKKwlNWDI1X1BBRF9TRDFfREFUQTFfX1NEMV9EQVRBMSwKKwlNWDI1X1BBRF9TRDFfREFUQTJfX1NEMV9EQVRBMiwKKwlNWDI1X1BBRF9TRDFfREFUQTNfX1NEMV9EQVRBMywKKwkvKiBTRDEgQ0QgKi8KKwlNWDI1X1BBRF9ERV9CX19HUElPXzJfMjAsCisJLyogSTJTICovCisJTVgyNV9QQURfS1BQX0NPTDNfX0FVRDVfVFhGUywKKwlNWDI1X1BBRF9LUFBfQ09MMl9fQVVENV9UWEMsCisJTVgyNV9QQURfS1BQX0NPTDFfX0FVRDVfUlhELAorCU1YMjVfUEFEX0tQUF9DT0wwX19BVUQ1X1RYRCwKKwkvKiBDQU4gKi8KKwlNWDI1X1BBRF9HUElPX0RfX0NBTjJfUlgsCisJTVgyNV9QQURfR1BJT19DX19DQU4yX1RYLAorfTsKKworI2RlZmluZSBHUElPX0xFRDEJODMKKyNkZWZpbmUgR1BJT19TV0lUQ0gxCTgyCisjZGVmaW5lIEdQSU9fU0QxQ0QJNTIKKyNkZWZpbmUgR1BJT19MQ0RQV1IJMjYKKworc3RhdGljIHN0cnVjdCBpbXhfZmJfdmlkZW9tb2RlIGV1a3JlYV9teGlteHNkX21vZGVzW10gPSB7CisJeworCQkubW9kZQk9IHsKKwkJCS5uYW1lCQk9ICJDTU8tUVZHQSIsCisJCQkucmVmcmVzaAk9IDYwLAorCQkJLnhyZXMJCT0gMzIwLAorCQkJLnlyZXMJCT0gMjQwLAorCQkJLnBpeGNsb2NrCT0gS0haMlBJQ09TKDY1MDApLAorCQkJLmxlZnRfbWFyZ2luCT0gMzAsCisJCQkucmlnaHRfbWFyZ2luCT0gMzgsCisJCQkudXBwZXJfbWFyZ2luCT0gMjAsCisJCQkubG93ZXJfbWFyZ2luCT0gMywKKwkJCS5oc3luY19sZW4JPSAxNSwKKwkJCS52c3luY19sZW4JPSA0LAorCQl9LAorCQkuYnBwCT0gMTYsCisJCS5wY3IJPSAweENBRDA4QjgwLAorCX0sIHsKKwkJLm1vZGUgPSB7CisJCQkubmFtZQkJPSAiRFZJLVZHQSIsCisJCQkucmVmcmVzaAk9IDYwLAorCQkJLnhyZXMJCT0gNjQwLAorCQkJLnlyZXMJCT0gNDgwLAorCQkJLnBpeGNsb2NrCT0gMzIwMDAsCisJCQkuaHN5bmNfbGVuCT0gNywKKwkJCS5sZWZ0X21hcmdpbgk9IDEwMCwKKwkJCS5yaWdodF9tYXJnaW4JPSAxMDAsCisJCQkudnN5bmNfbGVuCT0gNywKKwkJCS51cHBlcl9tYXJnaW4JPSA3LAorCQkJLmxvd2VyX21hcmdpbgk9IDEwMCwKKwkJfSwKKwkJLnBjcgkJPSAweEZBMjA4QjgwLAorCQkuYnBwCQk9IDE2LAorCX0sIHsKKwkJLm1vZGUgPSB7CisJCQkubmFtZQkJPSAiRFZJLVNWR0EiLAorCQkJLnJlZnJlc2gJPSA2MCwKKwkJCS54cmVzCQk9IDgwMCwKKwkJCS55cmVzCQk9IDYwMCwKKwkJCS5waXhjbG9jawk9IDI1MDAwLAorCQkJLmhzeW5jX2xlbgk9IDcsCisJCQkubGVmdF9tYXJnaW4JPSA3NSwKKwkJCS5yaWdodF9tYXJnaW4JPSA3NSwKKwkJCS52c3luY19sZW4JPSA3LAorCQkJLnVwcGVyX21hcmdpbgk9IDcsCisJCQkubG93ZXJfbWFyZ2luCT0gNzUsCisJCX0sCisJCS5wY3IJCT0gMHhGQTIwOEI4MCwKKwkJLmJwcAkJPSAxNiwKKwl9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpbXhfZmJfcGxhdGZvcm1fZGF0YSBldWtyZWFfbXhpbXhzZF9mYl9wZGF0YSBfX2luaXRjb25zdCA9IHsKKwkubW9kZQkJPSBldWtyZWFfbXhpbXhzZF9tb2RlcywKKwkubnVtX21vZGVzCT0gQVJSQVlfU0laRShldWtyZWFfbXhpbXhzZF9tb2RlcyksCisJLnB3bXIJCT0gMHgwMEE5MDNGRiwKKwkubHNjcjEJCT0gMHgwMDEyMDMwMCwKKwkuZG1hY3IJCT0gMHgwMDA0MDA2MCwKK307CisKK3N0YXRpYyB2b2lkIGV1a3JlYV9tYmlteHNkX2xjZF9wb3dlcl9zZXQoc3RydWN0IHBsYXRfbGNkX2RhdGEgKnBkLAorCQkJCSAgIHVuc2lnbmVkIGludCBwb3dlcikKK3sKKwlpZiAocG93ZXIpCisJCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX0xDRFBXUiwgMSk7CisJZWxzZQorCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19MQ0RQV1IsIDApOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRfbGNkX2RhdGEgZXVrcmVhX21iaW14c2RfbGNkX3Bvd2VyX2RhdGEgPSB7CisJLnNldF9wb3dlcgkJPSBldWtyZWFfbWJpbXhzZF9sY2RfcG93ZXJfc2V0LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZXVrcmVhX21iaW14c2RfbGNkX3Bvd2VyZGV2ID0geworCS5uYW1lCQkJPSAicGxhdGZvcm0tbGNkIiwKKwkuZGV2LnBsYXRmb3JtX2RhdGEJPSAmZXVrcmVhX21iaW14c2RfbGNkX3Bvd2VyX2RhdGEsCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkIGV1a3JlYV9tYmlteHNkX2xlZHNbXSA9IHsKKwl7CisJCS5uYW1lCQkJPSAibGVkMSIsCisJCS5kZWZhdWx0X3RyaWdnZXIJPSAiaGVhcnRiZWF0IiwKKwkJLmFjdGl2ZV9sb3cJCT0gMSwKKwkJLmdwaW8JCQk9IEdQSU9fTEVEMSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2xlZF9wbGF0Zm9ybV9kYXRhIGV1a3JlYV9tYmlteHNkX2xlZF9pbmZvID0geworCS5sZWRzCQk9IGV1a3JlYV9tYmlteHNkX2xlZHMsCisJLm51bV9sZWRzCT0gQVJSQVlfU0laRShldWtyZWFfbWJpbXhzZF9sZWRzKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGV1a3JlYV9tYmlteHNkX2xlZHNfZ3BpbyA9IHsKKwkubmFtZQk9ICJsZWRzLWdwaW8iLAorCS5pZAk9IC0xLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmV1a3JlYV9tYmlteHNkX2xlZF9pbmZvLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fa2V5c19idXR0b24gZXVrcmVhX21iaW14c2RfZ3Bpb19idXR0b25zW10gPSB7CisJeworCQkuZ3BpbwkJPSBHUElPX1NXSVRDSDEsCisJCS5jb2RlCQk9IEJUTl8wLAorCQkuZGVzYwkJPSAiQlAxIiwKKwkJLmFjdGl2ZV9sb3cJPSAxLAorCQkud2FrZXVwCQk9IDEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX3BsYXRmb3JtX2RhdGEgZXVrcmVhX21iaW14c2RfYnV0dG9uX2RhdGEgPSB7CisJLmJ1dHRvbnMJPSBldWtyZWFfbWJpbXhzZF9ncGlvX2J1dHRvbnMsCisJLm5idXR0b25zCT0gQVJSQVlfU0laRShldWtyZWFfbWJpbXhzZF9ncGlvX2J1dHRvbnMpLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZXVrcmVhX21iaW14c2RfYnV0dG9uX2RldmljZSA9IHsKKwkubmFtZQkJPSAiZ3Bpby1rZXlzIiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSAwLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZldWtyZWFfbWJpbXhzZF9idXR0b25fZGF0YSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdGZvcm1fZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJmV1a3JlYV9tYmlteHNkX2xlZHNfZ3BpbywKKwkmZXVrcmVhX21iaW14c2RfYnV0dG9uX2RldmljZSwKKwkmZXVrcmVhX21iaW14c2RfbGNkX3Bvd2VyZGV2LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpbXh1YXJ0X3BsYXRmb3JtX2RhdGEgdWFydF9wZGF0YSBfX2luaXRjb25zdCA9IHsKKwkuZmxhZ3MgPSBJTVhVQVJUX0hBVkVfUlRTQ1RTLAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBldWtyZWFfbWJpbXhzZF9pMmNfZGV2aWNlc1tdID0geworCXsKKwkJSTJDX0JPQVJEX0lORk8oInRsdjMyMGFpYzIzIiwgMHgxYSksCisJfSwKK307CisKK3N0YXRpYyBjb25zdAorc3RydWN0IGlteF9zc2lfcGxhdGZvcm1fZGF0YSBldWtyZWFfbWJpbXhzZF9zc2lfcGRhdGEgX19pbml0Y29uc3QgPSB7CisJLmZsYWdzID0gSU1YX1NTSV9TWU4gfCBJTVhfU1NJX05FVCB8IElNWF9TU0lfVVNFX0kyU19TTEFWRSwKK307CisKKy8qCisgKiBzeXN0ZW0gaW5pdCBmb3IgYmFzZWJvYXJkIHVzYWdlLiBXaWxsIGJlIGNhbGxlZCBieSBjcHVpbXgyNSBpbml0LgorICoKKyAqIEFkZCBwbGF0Zm9ybSBkZXZpY2VzIHByZXNlbnQgb24gdGhpcyBiYXNlYm9hcmQgYW5kIGluaXQKKyAqIHRoZW0gZnJvbSBDUFUgc2lkZSBhcyBmYXIgYXMgcmVxdWlyZWQgdG8gdXNlIHRoZW0gbGF0ZXIgb24KKyAqLwordm9pZCBfX2luaXQgZXVrcmVhX21iaW14c2QyNV9iYXNlYm9hcmRfaW5pdCh2b2lkKQoreworCWlmIChteGNfaW9tdXhfdjNfc2V0dXBfbXVsdGlwbGVfcGFkcyhldWtyZWFfbWJpbXhzZF9wYWRzLAorCQkJQVJSQVlfU0laRShldWtyZWFfbWJpbXhzZF9wYWRzKSkpCisJCXByaW50ayhLRVJOX0VSUiAiZXJyb3Igc2V0dGluZyBtYmlteHNkIHBhZHMgIVxuIik7CisKKyNpZiBkZWZpbmVkKENPTkZJR19TTkRfU09DX0VVS1JFQV9UTFYzMjApCisJLyogU1NJIHVuaXQgbWFzdGVyIEkyUyBjb2RlYyBjb25uZWN0ZWQgdG8gU1NJX0FVRDUqLworCW14Y19hdWRtdXhfdjJfY29uZmlndXJlX3BvcnQoMCwKKwkJCU1YQ19BVURNVVhfVjJfUFRDUl9TWU4gfAorCQkJTVhDX0FVRE1VWF9WMl9QVENSX1RGU0RJUiB8CisJCQlNWENfQVVETVVYX1YyX1BUQ1JfVEZTRUwoNCkgfAorCQkJTVhDX0FVRE1VWF9WMl9QVENSX1RDTEtESVIgfAorCQkJTVhDX0FVRE1VWF9WMl9QVENSX1RDU0VMKDQpLAorCQkJTVhDX0FVRE1VWF9WMl9QRENSX1JYRFNFTCg0KQorCSk7CisJbXhjX2F1ZG11eF92Ml9jb25maWd1cmVfcG9ydCg0LAorCQkJTVhDX0FVRE1VWF9WMl9QVENSX1NZTiwKKwkJCU1YQ19BVURNVVhfVjJfUERDUl9SWERTRUwoMCkKKwkpOworI2VuZGlmCisKKwlpbXgyNV9hZGRfaW14X3VhcnQxKCZ1YXJ0X3BkYXRhKTsKKwlpbXgyNV9hZGRfaW14X2ZiKCZldWtyZWFfbXhpbXhzZF9mYl9wZGF0YSk7CisJaW14MjVfYWRkX2lteF9zc2koMCwgJmV1a3JlYV9tYmlteHNkX3NzaV9wZGF0YSk7CisKKwlpbXgyNV9hZGRfZmxleGNhbjEoTlVMTCk7CisJaW14MjVfYWRkX3NkaGNpX2VzZGhjX2lteCgwLCBOVUxMKTsKKworCWdwaW9fcmVxdWVzdChHUElPX0xFRDEsICJMRUQxIik7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fTEVEMSwgMSk7CisJZ3Bpb19mcmVlKEdQSU9fTEVEMSk7CisKKwlncGlvX3JlcXVlc3QoR1BJT19TV0lUQ0gxLCAiU1dJVENIMSIpOworCWdwaW9fZGlyZWN0aW9uX2lucHV0KEdQSU9fU1dJVENIMSk7CisJZ3Bpb19mcmVlKEdQSU9fU1dJVENIMSk7CisKKwlncGlvX3JlcXVlc3QoR1BJT19MQ0RQV1IsICJMQ0RQV1IiKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19MQ0RQV1IsIDEpOworCWdwaW9fZnJlZShHUElPX1NXSVRDSDEpOworCisJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgZXVrcmVhX21iaW14c2RfaTJjX2RldmljZXMsCisJCQkJQVJSQVlfU0laRShldWtyZWFfbWJpbXhzZF9pMmNfZGV2aWNlcykpOworCisJcGxhdGZvcm1fYWRkX2RldmljZXMocGxhdGZvcm1fZGV2aWNlcywgQVJSQVlfU0laRShwbGF0Zm9ybV9kZXZpY2VzKSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9tYWNoLWNwdWlteDI3LmMgYi9hcmNoL2FybS9tYWNoLWlteC9tYWNoLWNwdWlteDI3LmMKaW5kZXggNzQ1ZWU2MC4uNmNmMDRkYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1jcHVpbXgyNy5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtY3B1aW14MjcuYwpAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF84MjUwLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL290Zy5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi91bHBpLmg+Ci0jaW5jbHVkZSA8bGludXgvZnNsX2RldmljZXMuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgpAQCAtNDAsMTEgKzM5LDkgQEAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9pb211eC1teDI3Lmg+CiAjaW5jbHVkZSA8bWFjaC9teGNfbmFuZC5oPgotI2luY2x1ZGUgPG1hY2gvbXhjX2VoY2kuaD4KICNpbmNsdWRlIDxtYWNoL3VscGkuaD4KIAogI2luY2x1ZGUgImRldmljZXMtaW14MjcuaCIKLSNpbmNsdWRlICJkZXZpY2VzLmgiCiAKIHN0YXRpYyBjb25zdCBpbnQgZXVrcmVhX2NwdWlteDI3X3BpbnNbXSBfX2luaXRjb25zdCA9IHsKIAkvKiBVQVJUMSAqLwpAQCAtMTU3LDggKzE1NCw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0Zm9ybV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmZXVrcmVhX2NwdWlteDI3X25vcl9tdGRfZGV2aWNlLAotCSZteGNfd2R0LAotCSZteGNfdzFfbWFzdGVyX2RldmljZSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW14aTJjX3BsYXRmb3JtX2RhdGEgY3B1aW14MjdfaTJjMV9kYXRhIF9faW5pdGNvbnN0ID0gewpAQCAtMjE1LDE4ICsyMTAsMTggQEAKICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfVVNCX1VMUEkpCi1zdGF0aWMgc3RydWN0IG14Y191c2JoX3BsYXRmb3JtX2RhdGEgb3RnX3BkYXRhID0geworc3RhdGljIHN0cnVjdCBteGNfdXNiaF9wbGF0Zm9ybV9kYXRhIG90Z19wZGF0YSBfX2luaXRkYXRhID0gewogCS5wb3J0c2MJPSBNWENfRUhDSV9NT0RFX1VMUEksCiAJLmZsYWdzCT0gTVhDX0VIQ0lfSU5URVJGQUNFX0RJRkZfVU5JLAogfTsKIAotc3RhdGljIHN0cnVjdCBteGNfdXNiaF9wbGF0Zm9ybV9kYXRhIHVzYmgyX3BkYXRhID0geworc3RhdGljIHN0cnVjdCBteGNfdXNiaF9wbGF0Zm9ybV9kYXRhIHVzYmgyX3BkYXRhIF9faW5pdGRhdGEgPSB7CiAJLnBvcnRzYwk9IE1YQ19FSENJX01PREVfVUxQSSwKIAkuZmxhZ3MJPSBNWENfRUhDSV9JTlRFUkZBQ0VfRElGRl9VTkksCiB9OwogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgZnNsX3VzYjJfcGxhdGZvcm1fZGF0YSBvdGdfZGV2aWNlX3BkYXRhID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmc2xfdXNiMl9wbGF0Zm9ybV9kYXRhIG90Z19kZXZpY2VfcGRhdGEgX19pbml0Y29uc3QgPSB7CiAJLm9wZXJhdGluZ19tb2RlID0gRlNMX1VTQjJfRFJfREVWSUNFLAogCS5waHlfbW9kZSAgICAgICA9IEZTTF9VU0IyX1BIWV9VTFBJLAogfTsKQEAgLTI2MiwxMCArMjU3LDEyIEBACiAKIAlpbXgyN19hZGRfZmVjKE5VTEwpOwogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHBsYXRmb3JtX2RldmljZXMsIEFSUkFZX1NJWkUocGxhdGZvcm1fZGV2aWNlcykpOworCWlteDI3X2FkZF9pbXgyX3dkdChOVUxMKTsKKwlpbXgyN19hZGRfbXhjX3cxKE5VTEwpOwogCiAjaWYgZGVmaW5lZChDT05GSUdfTUFDSF9FVUtSRUFfQ1BVSU1YMjdfVVNFU0RIQzIpCiAJLyogU0RIQzIgY2FuIGJlIHVzZWQgZm9yIFdpZmkgKi8KLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfc2RoY19kZXZpY2UxLCBOVUxMKTsKKwlpbXgyN19hZGRfbXhjX21tYygxLCBOVUxMKTsKICNlbmRpZgogI2lmIGRlZmluZWQoTUFDSF9FVUtSRUFfQ1BVSU1YMjdfVVNFVUFSVDQpCiAJLyogaW4gd2hpY2ggY2FzZSBVQVJUNCBpcyBhbHNvIHVzZWQgZm9yIEJsdWV0b290aCAqLwpAQCAtMjgxLDE2ICsyNzgsMTYgQEAKIAkJb3RnX3BkYXRhLm90ZyA9IG90Z191bHBpX2NyZWF0ZSgmbXhjX3VscGlfYWNjZXNzX29wcywKIAkJCQlVTFBJX09UR19EUlZWQlVTIHwgVUxQSV9PVEdfRFJWVkJVU19FWFQpOwogCi0JCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19vdGdfaG9zdCwgJm90Z19wZGF0YSk7CisJCWlteDI3X2FkZF9teGNfZWhjaV9vdGcoJm90Z19wZGF0YSk7CiAJfQogCiAJdXNiaDJfcGRhdGEub3RnID0gb3RnX3VscGlfY3JlYXRlKCZteGNfdWxwaV9hY2Nlc3Nfb3BzLAogCQkJCVVMUElfT1RHX0RSVlZCVVMgfCBVTFBJX09UR19EUlZWQlVTX0VYVCk7CiAKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdXNiaDIsICZ1c2JoMl9wZGF0YSk7CisJaW14MjdfYWRkX214Y19laGNpX2hzKDIsICZ1c2JoMl9wZGF0YSk7CiAjZW5kaWYKIAlpZiAoIW90Z19tb2RlX2hvc3QpCi0JCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19vdGdfdWRjX2RldmljZSwgJm90Z19kZXZpY2VfcGRhdGEpOworCQlpbXgyN19hZGRfZnNsX3VzYjJfdWRjKCZvdGdfZGV2aWNlX3BkYXRhKTsKIAogI2lmZGVmIENPTkZJR19NQUNIX0VVS1JFQV9NQklNWDI3X0JBU0VCT0FSRAogCWV1a3JlYV9tYmlteDI3X2Jhc2Vib2FyZF9pbml0KCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9tYWNoLWV1a3JlYV9jcHVpbXgyNS5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1ldWtyZWFfY3B1aW14MjUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjM5NWFiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1ldWtyZWFfY3B1aW14MjUuYwpAQCAtMCwwICsxLDE2MSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA5IFNhc2NoYSBIYXVlciwgPGtlcm5lbEBwZW5ndXRyb25peC5kZT4KKyAqIENvcHlyaWdodCAyMDEwIEVyaWMgQsOpbmFyZCAtIEV1a3LDqWEgRWxlY3Ryb21hdGlxdWUsIDxlcmljQGV1a3JlYS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC91c2Ivb3RnLmg+CisjaW5jbHVkZSA8bGludXgvdXNiL3VscGkuaD4KKworI2luY2x1ZGUgPG1hY2gvZXVrcmVhLWJhc2Vib2FyZHMuaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorI2luY2x1ZGUgPGFzbS9tZW1vcnkuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgorI2luY2x1ZGUgPG1hY2gvbXgyNS5oPgorI2luY2x1ZGUgPG1hY2gvbXhjX25hbmQuaD4KKyNpbmNsdWRlIDxtYWNoL2lteGZiLmg+CisjaW5jbHVkZSA8bWFjaC9pb211eC1teDI1Lmg+CisKKyNpbmNsdWRlICJkZXZpY2VzLWlteDI1LmgiCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW14dWFydF9wbGF0Zm9ybV9kYXRhIHVhcnRfcGRhdGEgX19pbml0Y29uc3QgPSB7CisJLmZsYWdzID0gSU1YVUFSVF9IQVZFX1JUU0NUUywKK307CisKK3N0YXRpYyBpb211eF92M19jZmdfdCBldWtyZWFfY3B1aW14MjVfcGFkc1tdID0geworCS8qIEZFQyAtIFJNSUkgKi8KKwlNWDI1X1BBRF9GRUNfTURDX19GRUNfTURDLAorCU1YMjVfUEFEX0ZFQ19NRElPX19GRUNfTURJTywKKwlNWDI1X1BBRF9GRUNfVERBVEEwX19GRUNfVERBVEEwLAorCU1YMjVfUEFEX0ZFQ19UREFUQTFfX0ZFQ19UREFUQTEsCisJTVgyNV9QQURfRkVDX1RYX0VOX19GRUNfVFhfRU4sCisJTVgyNV9QQURfRkVDX1JEQVRBMF9fRkVDX1JEQVRBMCwKKwlNWDI1X1BBRF9GRUNfUkRBVEExX19GRUNfUkRBVEExLAorCU1YMjVfUEFEX0ZFQ19SWF9EVl9fRkVDX1JYX0RWLAorCU1YMjVfUEFEX0ZFQ19UWF9DTEtfX0ZFQ19UWF9DTEssCisJLyogSTJDMSAqLworCU1YMjVfUEFEX0kyQzFfQ0xLX19JMkMxX0NMSywKKwlNWDI1X1BBRF9JMkMxX0RBVF9fSTJDMV9EQVQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGZlY19wbGF0Zm9ybV9kYXRhIG14MjVfZmVjX3BkYXRhIF9faW5pdGNvbnN0ID0geworCS5waHkJPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXhjX25hbmRfcGxhdGZvcm1fZGF0YQorZXVrcmVhX2NwdWlteDI1X25hbmRfYm9hcmRfaW5mbyBfX2luaXRjb25zdCA9IHsKKwkud2lkdGgJCT0gMSwKKwkuaHdfZWNjCQk9IDEsCisJLmZsYXNoX2JidAk9IDEsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGlteGkyY19wbGF0Zm9ybV9kYXRhCitldWtyZWFfY3B1aW14MjVfaTJjMF9kYXRhIF9faW5pdGNvbnN0ID0geworCS5iaXRyYXRlID0gMTAwMDAwLAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBldWtyZWFfY3B1aW14MjVfaTJjX2RldmljZXNbXSA9IHsKKwl7CisJCUkyQ19CT0FSRF9JTkZPKCJwY2Y4NTYzIiwgMHg1MSksCisJfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXhjX3VzYmhfcGxhdGZvcm1fZGF0YSBvdGdfcGRhdGEgX19pbml0Y29uc3QgPSB7CisJLnBvcnRzYwk9IE1YQ19FSENJX01PREVfVVRNSSwKKwkuZmxhZ3MJPSBNWENfRUhDSV9JTlRFUkZBQ0VfRElGRl9VTkksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG14Y191c2JoX3BsYXRmb3JtX2RhdGEgdXNiaDJfcGRhdGEgX19pbml0Y29uc3QgPSB7CisJLnBvcnRzYwk9IE1YQ19FSENJX01PREVfU0VSSUFMLAorCS5mbGFncwk9IE1YQ19FSENJX0lOVEVSRkFDRV9TSU5HTEVfVU5JIHwgTVhDX0VIQ0lfSU5URVJOQUxfUEhZIHwKKwkJICBNWENfRUhDSV9JUFBVRV9ET1dOLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBmc2xfdXNiMl9wbGF0Zm9ybV9kYXRhIG90Z19kZXZpY2VfcGRhdGEgX19pbml0Y29uc3QgPSB7CisJLm9wZXJhdGluZ19tb2RlID0gRlNMX1VTQjJfRFJfREVWSUNFLAorCS5waHlfbW9kZSAgICAgICA9IEZTTF9VU0IyX1BIWV9VVE1JLAorfTsKKworc3RhdGljIGludCBvdGdfbW9kZV9ob3N0OworCitzdGF0aWMgaW50IF9faW5pdCBldWtyZWFfY3B1aW14MjVfb3RnX21vZGUoY2hhciAqb3B0aW9ucykKK3sKKwlpZiAoIXN0cmNtcChvcHRpb25zLCAiaG9zdCIpKQorCQlvdGdfbW9kZV9ob3N0ID0gMTsKKwllbHNlIGlmICghc3RyY21wKG9wdGlvbnMsICJkZXZpY2UiKSkKKwkJb3RnX21vZGVfaG9zdCA9IDA7CisJZWxzZQorCQlwcl9pbmZvKCJvdGdfbW9kZSBuZWl0aGVyIFwiaG9zdFwiIG5vciBcImRldmljZVwiLiAiCisJCQkiRGVmYXVsdGluZyB0byBkZXZpY2VcbiIpOworCXJldHVybiAwOworfQorX19zZXR1cCgib3RnX21vZGU9IiwgZXVrcmVhX2NwdWlteDI1X290Z19tb2RlKTsKKworc3RhdGljIHZvaWQgX19pbml0IGV1a3JlYV9jcHVpbXgyNV9pbml0KHZvaWQpCit7CisJaWYgKG14Y19pb211eF92M19zZXR1cF9tdWx0aXBsZV9wYWRzKGV1a3JlYV9jcHVpbXgyNV9wYWRzLAorCQkJQVJSQVlfU0laRShldWtyZWFfY3B1aW14MjVfcGFkcykpKQorCQlwcmludGsoS0VSTl9FUlIgImVycm9yIHNldHRpbmcgY3B1aW14MjUgcGFkcyAhXG4iKTsKKworCWlteDI1X2FkZF9pbXhfdWFydDAoJnVhcnRfcGRhdGEpOworCWlteDI1X2FkZF9teGNfbmFuZCgmZXVrcmVhX2NwdWlteDI1X25hbmRfYm9hcmRfaW5mbyk7CisJaW14MjVfYWRkX2lteGRpX3J0YyhOVUxMKTsKKwlpbXgyNV9hZGRfZmVjKCZteDI1X2ZlY19wZGF0YSk7CisKKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBldWtyZWFfY3B1aW14MjVfaTJjX2RldmljZXMsCisJCQkJQVJSQVlfU0laRShldWtyZWFfY3B1aW14MjVfaTJjX2RldmljZXMpKTsKKwlpbXgyNV9hZGRfaW14X2kyYzAoJmV1a3JlYV9jcHVpbXgyNV9pMmMwX2RhdGEpOworCisJaWYgKG90Z19tb2RlX2hvc3QpCisJCWlteDI1X2FkZF9teGNfZWhjaV9vdGcoJm90Z19wZGF0YSk7CisJZWxzZQorCQlpbXgyNV9hZGRfZnNsX3VzYjJfdWRjKCZvdGdfZGV2aWNlX3BkYXRhKTsKKworCWlteDI1X2FkZF9teGNfZWhjaV9ocygmdXNiaDJfcGRhdGEpOworCisjaWZkZWYgQ09ORklHX01BQ0hfRVVLUkVBX01CSU1YU0QyNV9CQVNFQk9BUkQKKwlldWtyZWFfbWJpbXhzZDI1X2Jhc2Vib2FyZF9pbml0KCk7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgX19pbml0IGV1a3JlYV9jcHVpbXgyNV90aW1lcl9pbml0KHZvaWQpCit7CisJbXgyNV9jbG9ja3NfaW5pdCgpOworfQorCitzdGF0aWMgc3RydWN0IHN5c190aW1lciBldWtyZWFfY3B1aW14MjVfdGltZXIgPSB7CisJLmluaXQgICA9IGV1a3JlYV9jcHVpbXgyNV90aW1lcl9pbml0LAorfTsKKworTUFDSElORV9TVEFSVChFVUtSRUFfQ1BVSU1YMjUsICJFdWtyZWEgQ1BVSU1YMjUiKQorCS8qIE1haW50YWluZXI6IEV1a3JlYSBFbGVjdHJvbWF0aXF1ZSAqLworCS5ib290X3BhcmFtcyAgICA9IE1YMjVfUEhZU19PRkZTRVQgKyAweDEwMCwKKwkubWFwX2lvICAgICAgICAgPSBteDI1X21hcF9pbywKKwkuaW5pdF9pcnEgICAgICAgPSBteDI1X2luaXRfaXJxLAorCS5pbml0X21hY2hpbmUgICA9IGV1a3JlYV9jcHVpbXgyNV9pbml0LAorCS50aW1lciAgICAgICAgICA9ICZldWtyZWFfY3B1aW14MjVfdGltZXIsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1pbXgyN192aXNzdHJpbV9tMTAuYyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtaW14Mjdfdmlzc3RyaW1fbTEwLmMKaW5kZXggNTk3MTZmYS4uNDBhMzY2NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1pbXgyN192aXNzdHJpbV9tMTAuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9tYWNoLWlteDI3X3Zpc3N0cmltX20xMC5jCkBAIC0zNCwxMiArMzQsOSBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CiAjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KLSNpbmNsdWRlIDxtYWNoL21tYy5oPgogI2luY2x1ZGUgPG1hY2gvaW9tdXguaD4KLSNpbmNsdWRlIDxtYWNoL214Y19laGNpLmg+CiAKICNpbmNsdWRlICJkZXZpY2VzLWlteDI3LmgiCi0jaW5jbHVkZSAiZGV2aWNlcy5oIgogCiAjZGVmaW5lIE9UR19QSFlfQ1NfR1BJTyAoR1BJT19QT1JURiArIDE3KQogI2RlZmluZSBTREhDMV9JUlEgSVJRX0dQSU9CKDI1KQpAQCAtMTU2LDcgKzE1Myw3IEBACiAJZnJlZV9pcnEoU0RIQzFfSVJRLCBkYXRhKTsKIH0KIAotc3RhdGljIHN0cnVjdCBpbXhtbWNfcGxhdGZvcm1fZGF0YSB2aXNzdHJpbV9tMTBfc2RoY19wZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW14bW1jX3BsYXRmb3JtX2RhdGEgdmlzc3RyaW1fbTEwX3NkaGNfcGRhdGEgX19pbml0Y29uc3QgPSB7CiAJLmluaXQgPSB2aXNzdHJpbV9tMTBfc2RoYzFfaW5pdCwKIAkuZXhpdCA9IHZpc3N0cmltX20xMF9zZGhjMV9leGl0LAogfTsKQEAgLTIxNiw3ICsyMTMsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IG14Y191c2JoX3BsYXRmb3JtX2RhdGEgdmlzc3RyaW1fbTEwX3VzYm90Z19wZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXhjX3VzYmhfcGxhdGZvcm1fZGF0YQordmlzc3RyaW1fbTEwX3VzYm90Z19wZGF0YSBfX2luaXRjb25zdCA9IHsKIAkuaW5pdCA9IG90Z19waHlfaW5pdCwKIAkucG9ydHNjCT0gTVhDX0VIQ0lfTU9ERV9VTFBJIHwgTVhDX0VIQ0lfVVRNSV84QklULAogCS5mbGFncwk9IE1YQ19FSENJX1BPV0VSX1BJTlNfRU5BQkxFRCwKQEAgLTIzNyw4ICsyMzUsOCBAQAogCQkJCUFSUkFZX1NJWkUodmlzc3RyaW1fbTEwX2kyY19kZXZpY2VzKSk7CiAJaW14MjdfYWRkX2lteF9pMmMoMCwgJnZpc3N0cmltX20xMF9pMmNfZGF0YSk7CiAJaW14MjdfYWRkX2lteF9pMmMoMSwgJnZpc3N0cmltX20xMF9pMmNfZGF0YSk7Ci0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3NkaGNfZGV2aWNlMCwgJnZpc3N0cmltX20xMF9zZGhjX3BkYXRhKTsKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfb3RnX2hvc3QsICZ2aXNzdHJpbV9tMTBfdXNib3RnX3BkYXRhKTsKKwlpbXgyN19hZGRfbXhjX21tYygwLCAmdmlzc3RyaW1fbTEwX3NkaGNfcGRhdGEpOworCWlteDI3X2FkZF9teGNfZWhjaV9vdGcoJnZpc3N0cmltX20xMF91c2JvdGdfcGRhdGEpOwogCWlteDI3X2FkZF9mZWMoTlVMTCk7CiAJcGxhdGZvcm1fYWRkX2RldmljZXMocGxhdGZvcm1fZGV2aWNlcywgQVJSQVlfU0laRShwbGF0Zm9ybV9kZXZpY2VzKSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9tYWNoLWlteDI3bGl0ZS5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1pbXgyN2xpdGUuYwppbmRleCBiYmRiYzc1Li4zYTEyMDJlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9tYWNoLWlteDI3bGl0ZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtaW14MjdsaXRlLmMKQEAgLTI1LDcgKzI1LDYgQEAKICNpbmNsdWRlIDxtYWNoL2lvbXV4LW14MjcuaD4KIAogI2luY2x1ZGUgImRldmljZXMtaW14MjcuaCIKLSNpbmNsdWRlICJkZXZpY2VzLmgiCiAKIHN0YXRpYyBjb25zdCBpbnQgbXgyN2xpdGVfcGluc1tdIF9faW5pdGNvbnN0ID0gewogCS8qIFVBUlQxICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9tYWNoLW14MWFkcy5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1teDFhZHMuYwppbmRleCA2MTg3Y2U5Li4xZjQ0NmU1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9tYWNoLW14MWFkcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtbXgxYWRzLmMKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlIDxtYWNoL2lycXMuaD4KIAogI2luY2x1ZGUgImRldmljZXMtaW14MS5oIgotI2luY2x1ZGUgImRldmljZXMuaCIKIAogc3RhdGljIGNvbnN0IGludCBteDFhZHNfcGluc1tdIF9faW5pdGNvbnN0ID0gewogCS8qIFVBUlQxICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9tYWNoLW14MjFhZHMuYyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtbXgyMWFkcy5jCmluZGV4IGUxMjgyZTkuLjBhMzcyNTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L21hY2gtbXgyMWFkcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtbXgyMWFkcy5jCkBAIC0yNCwxMyArMjQsMTAgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotI2luY2x1ZGUgPG1hY2gvaW14ZmIuaD4KICNpbmNsdWRlIDxtYWNoL2lvbXV4LW14MjEuaD4KICNpbmNsdWRlIDxtYWNoL214Y19uYW5kLmg+Ci0jaW5jbHVkZSA8bWFjaC9tbWMuaD4KIAogI2luY2x1ZGUgImRldmljZXMtaW14MjEuaCIKLSNpbmNsdWRlICJkZXZpY2VzLmgiCiAKIC8qCiAgKiBNZW1vcnktbWFwcGVkIEkvTyBvbiBNWDIxQURTIGJhc2UgYm9hcmQKQEAgLTIxMyw3ICsyMTAsNyBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IGlteF9mYl9wbGF0Zm9ybV9kYXRhIG14MjFhZHNfZmJfZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW14X2ZiX3BsYXRmb3JtX2RhdGEgbXgyMWFkc19mYl9kYXRhIF9faW5pdGNvbnN0ID0gewogCS5tb2RlID0gbXgyMWFkc19tb2RlcywKIAkubnVtX21vZGVzID0gQVJSQVlfU0laRShteDIxYWRzX21vZGVzKSwKIApAQCAtMjMzLDE1ICsyMzAsOCBAQAogc3RhdGljIGludCBteDIxYWRzX3NkaGNfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIGlycV9oYW5kbGVyX3QgZGV0ZWN0X2lycSwKIAl2b2lkICpkYXRhKQogewotCWludCByZXQ7Ci0KLQlyZXQgPSByZXF1ZXN0X2lycShJUlFfR1BJT0QoMjUpLCBkZXRlY3RfaXJxLAorCXJldHVybiByZXF1ZXN0X2lycShJUlFfR1BJT0QoMjUpLCBkZXRlY3RfaXJxLAogCQlJUlFGX1RSSUdHRVJfRkFMTElORywgIm1tYy1kZXRlY3QiLCBkYXRhKTsKLQlpZiAocmV0KQotCQlnb3RvIG91dDsKLQlyZXR1cm4gMDsKLW91dDoKLQlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBteDIxYWRzX3NkaGNfZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCkBAIC0yNDksNyArMjM5LDcgQEAKIAlmcmVlX2lycShJUlFfR1BJT0QoMjUpLCBkYXRhKTsKIH0KIAotc3RhdGljIHN0cnVjdCBpbXhtbWNfcGxhdGZvcm1fZGF0YSBteDIxYWRzX3NkaGNfcGRhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGlteG1tY19wbGF0Zm9ybV9kYXRhIG14MjFhZHNfc2RoY19wZGF0YSBfX2luaXRjb25zdCA9IHsKIAkub2NyX2F2YWlsID0gTU1DX1ZERF8yOV8zMCB8IE1NQ19WRERfMzBfMzEsIC8qIDMuMFYgKi8KIAkuZ2V0X3JvID0gbXgyMWFkc19zZGhjX2dldF9ybywKIAkuaW5pdCA9IG14MjFhZHNfc2RoY19pbml0LApAQCAtMjk2LDggKzI4Niw4IEBACiAJaW14MjFfYWRkX2lteF91YXJ0MCgmdWFydF9wZGF0YV9ydHMpOwogCWlteDIxX2FkZF9pbXhfdWFydDIoJnVhcnRfcGRhdGFfbm9ydHMpOwogCWlteDIxX2FkZF9pbXhfdWFydDMoJnVhcnRfcGRhdGFfcnRzKTsKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfZmJfZGV2aWNlLCAmbXgyMWFkc19mYl9kYXRhKTsKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfc2RoY19kZXZpY2UwLCAmbXgyMWFkc19zZGhjX3BkYXRhKTsKKwlpbXgyMV9hZGRfaW14X2ZiKCZteDIxYWRzX2ZiX2RhdGEpOworCWlteDIxX2FkZF9teGNfbW1jKDAsICZteDIxYWRzX3NkaGNfcGRhdGEpOwogCWlteDIxX2FkZF9teGNfbmFuZCgmbXgyMWFkc19uYW5kX2JvYXJkX2luZm8pOwogCiAJcGxhdGZvcm1fYWRkX2RldmljZXMocGxhdGZvcm1fZGV2aWNlcywgQVJSQVlfU0laRShwbGF0Zm9ybV9kZXZpY2VzKSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9tYWNoLW14MjVfM2RzLmMgYi9hcmNoL2FybS9tYWNoLWlteC9tYWNoLW14MjVfM2RzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE3NmNmZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtbXgyNV8zZHMuYwpAQCAtMCwwICsxLDIzNSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA5IFNhc2NoYSBIYXVlciwgPGtlcm5lbEBwZW5ndXRyb25peC5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BICAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworLyoKKyAqIFRoaXMgbWFjaGluZSBpcyBrbm93biBhczoKKyAqICAtIGkuTVgyNSAzLVN0YWNrIERldmVsb3BtZW50IFN5c3RlbQorICogIC0gaS5NWDI1IFBsYXRmb3JtIERldmVsb3BtZW50IEtpdCAoaS5NWDI1IFBESykKKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQvbWF0cml4X2tleXBhZC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi9vdGcuaD4KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CisjaW5jbHVkZSA8YXNtL21lbW9yeS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CisjaW5jbHVkZSA8bWFjaC9teDI1Lmg+CisjaW5jbHVkZSA8bWFjaC9pb211eC1teDI1Lmg+CisKKyNpbmNsdWRlICJkZXZpY2VzLWlteDI1LmgiCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW14dWFydF9wbGF0Zm9ybV9kYXRhIHVhcnRfcGRhdGEgX19pbml0Y29uc3QgPSB7CisJLmZsYWdzID0gSU1YVUFSVF9IQVZFX1JUU0NUUywKK307CisKK3N0YXRpYyBpb211eF92M19jZmdfdCBteDI1cGRrX3BhZHNbXSA9IHsKKwlNWDI1X1BBRF9GRUNfTURDX19GRUNfTURDLAorCU1YMjVfUEFEX0ZFQ19NRElPX19GRUNfTURJTywKKwlNWDI1X1BBRF9GRUNfVERBVEEwX19GRUNfVERBVEEwLAorCU1YMjVfUEFEX0ZFQ19UREFUQTFfX0ZFQ19UREFUQTEsCisJTVgyNV9QQURfRkVDX1RYX0VOX19GRUNfVFhfRU4sCisJTVgyNV9QQURfRkVDX1JEQVRBMF9fRkVDX1JEQVRBMCwKKwlNWDI1X1BBRF9GRUNfUkRBVEExX19GRUNfUkRBVEExLAorCU1YMjVfUEFEX0ZFQ19SWF9EVl9fRkVDX1JYX0RWLAorCU1YMjVfUEFEX0ZFQ19UWF9DTEtfX0ZFQ19UWF9DTEssCisJTVgyNV9QQURfQTE3X19HUElPXzJfMywgLyogRkVDX0VOLCBHUElPIDM1ICovCisJTVgyNV9QQURfRDEyX19HUElPXzRfOCwgLyogRkVDX1JFU0VUX0IsIEdQSU8gMTA0ICovCisKKwkvKiBMQ0QgKi8KKwlNWDI1X1BBRF9MRDBfX0xEMCwKKwlNWDI1X1BBRF9MRDFfX0xEMSwKKwlNWDI1X1BBRF9MRDJfX0xEMiwKKwlNWDI1X1BBRF9MRDNfX0xEMywKKwlNWDI1X1BBRF9MRDRfX0xENCwKKwlNWDI1X1BBRF9MRDVfX0xENSwKKwlNWDI1X1BBRF9MRDZfX0xENiwKKwlNWDI1X1BBRF9MRDdfX0xENywKKwlNWDI1X1BBRF9MRDhfX0xEOCwKKwlNWDI1X1BBRF9MRDlfX0xEOSwKKwlNWDI1X1BBRF9MRDEwX19MRDEwLAorCU1YMjVfUEFEX0xEMTFfX0xEMTEsCisJTVgyNV9QQURfTEQxMl9fTEQxMiwKKwlNWDI1X1BBRF9MRDEzX19MRDEzLAorCU1YMjVfUEFEX0xEMTRfX0xEMTQsCisJTVgyNV9QQURfTEQxNV9fTEQxNSwKKwlNWDI1X1BBRF9HUElPX0VfX0xEMTYsCisJTVgyNV9QQURfR1BJT19GX19MRDE3LAorCU1YMjVfUEFEX0hTWU5DX19IU1lOQywKKwlNWDI1X1BBRF9WU1lOQ19fVlNZTkMsCisJTVgyNV9QQURfTFNDTEtfX0xTQ0xLLAorCU1YMjVfUEFEX09FX0FDRF9fT0VfQUNELAorCU1YMjVfUEFEX0NPTlRSQVNUX19DT05UUkFTVCwKKworCS8qIEtleXBhZCAqLworCU1YMjVfUEFEX0tQUF9ST1cwX19LUFBfUk9XMCwKKwlNWDI1X1BBRF9LUFBfUk9XMV9fS1BQX1JPVzEsCisJTVgyNV9QQURfS1BQX1JPVzJfX0tQUF9ST1cyLAorCU1YMjVfUEFEX0tQUF9ST1czX19LUFBfUk9XMywKKwlNWDI1X1BBRF9LUFBfQ09MMF9fS1BQX0NPTDAsCisJTVgyNV9QQURfS1BQX0NPTDFfX0tQUF9DT0wxLAorCU1YMjVfUEFEX0tQUF9DT0wyX19LUFBfQ09MMiwKKwlNWDI1X1BBRF9LUFBfQ09MM19fS1BQX0NPTDMsCisKKwkvKiBTRDEgKi8KKwlNWDI1X1BBRF9TRDFfQ01EX19TRDFfQ01ELAorCU1YMjVfUEFEX1NEMV9DTEtfX1NEMV9DTEssCisJTVgyNV9QQURfU0QxX0RBVEEwX19TRDFfREFUQTAsCisJTVgyNV9QQURfU0QxX0RBVEExX19TRDFfREFUQTEsCisJTVgyNV9QQURfU0QxX0RBVEEyX19TRDFfREFUQTIsCisJTVgyNV9QQURfU0QxX0RBVEEzX19TRDFfREFUQTMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGZlY19wbGF0Zm9ybV9kYXRhIG14MjVfZmVjX3BkYXRhIF9faW5pdGNvbnN0ID0geworCS5waHkgICAgPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSwKK307CisKKyNkZWZpbmUgRkVDX0VOQUJMRV9HUElPCQkzNQorI2RlZmluZSBGRUNfUkVTRVRfQl9HUElPCTEwNAorCitzdGF0aWMgdm9pZCBfX2luaXQgbXgyNXBka19mZWNfcmVzZXQodm9pZCkKK3sKKwlncGlvX3JlcXVlc3QoRkVDX0VOQUJMRV9HUElPLCAiRkVDIFBIWSBlbmFibGUiKTsKKwlncGlvX3JlcXVlc3QoRkVDX1JFU0VUX0JfR1BJTywgIkZFQyBQSFkgcmVzZXQiKTsKKworCWdwaW9fZGlyZWN0aW9uX291dHB1dChGRUNfRU5BQkxFX0dQSU8sIDApOyAgLyogZHJvcCBQSFkgcG93ZXIgKi8KKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoRkVDX1JFU0VUX0JfR1BJTywgMCk7IC8qIGFzc2VydCByZXNldCAqLworCXVkZWxheSgyKTsKKworCS8qIHR1cm4gb24gUEhZIHBvd2VyIGFuZCBsaWZ0IHJlc2V0ICovCisJZ3Bpb19zZXRfdmFsdWUoRkVDX0VOQUJMRV9HUElPLCAxKTsKKwlncGlvX3NldF92YWx1ZShGRUNfUkVTRVRfQl9HUElPLCAxKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBteGNfbmFuZF9wbGF0Zm9ybV9kYXRhCitteDI1cGRrX25hbmRfYm9hcmRfaW5mbyBfX2luaXRjb25zdCA9IHsKKwkud2lkdGgJCT0gMSwKKwkuaHdfZWNjCQk9IDEsCisJLmZsYXNoX2JidAk9IDEsCit9OworCitzdGF0aWMgc3RydWN0IGlteF9mYl92aWRlb21vZGUgbXgyNXBka19tb2Rlc1tdID0geworCXsKKwkJLm1vZGUJPSB7CisJCQkubmFtZQkJPSAiQ1JULVZHQSIsCisJCQkucmVmcmVzaAk9IDYwLAorCQkJLnhyZXMJCT0gNjQwLAorCQkJLnlyZXMJCT0gNDgwLAorCQkJLnBpeGNsb2NrCT0gMzk2ODMsCisJCQkubGVmdF9tYXJnaW4JPSA0NSwKKwkJCS5yaWdodF9tYXJnaW4JPSAxMTQsCisJCQkudXBwZXJfbWFyZ2luCT0gMzMsCisJCQkubG93ZXJfbWFyZ2luCT0gMTEsCisJCQkuaHN5bmNfbGVuCT0gMSwKKwkJCS52c3luY19sZW4JPSAxLAorCQl9LAorCQkuYnBwCT0gMTYsCisJCS5wY3IJPSAweEZBMjA4QjgwLAorCX0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGlteF9mYl9wbGF0Zm9ybV9kYXRhIG14MjVwZGtfZmJfcGRhdGEgX19pbml0Y29uc3QgPSB7CisJLm1vZGUJCT0gbXgyNXBka19tb2RlcywKKwkubnVtX21vZGVzCT0gQVJSQVlfU0laRShteDI1cGRrX21vZGVzKSwKKwkucHdtcgkJPSAweDAwQTkwM0ZGLAorCS5sc2NyMQkJPSAweDAwMTIwMzAwLAorCS5kbWFjcgkJPSAweDAwMDIwMDEwLAorfTsKKworc3RhdGljIGNvbnN0IHVpbnQzMl90IG14MjVwZGtfa2V5bWFwW10gPSB7CisJS0VZKDAsIDAsIEtFWV9VUCksCisJS0VZKDAsIDEsIEtFWV9ET1dOKSwKKwlLRVkoMCwgMiwgS0VZX1ZPTFVNRURPV04pLAorCUtFWSgwLCAzLCBLRVlfSE9NRSksCisJS0VZKDEsIDAsIEtFWV9SSUdIVCksCisJS0VZKDEsIDEsIEtFWV9MRUZUKSwKKwlLRVkoMSwgMiwgS0VZX0VOVEVSKSwKKwlLRVkoMSwgMywgS0VZX1ZPTFVNRVVQKSwKKwlLRVkoMiwgMCwgS0VZX0Y2KSwKKwlLRVkoMiwgMSwgS0VZX0Y4KSwKKwlLRVkoMiwgMiwgS0VZX0Y5KSwKKwlLRVkoMiwgMywgS0VZX0YxMCksCisJS0VZKDMsIDAsIEtFWV9GMSksCisJS0VZKDMsIDEsIEtFWV9GMiksCisJS0VZKDMsIDIsIEtFWV9GMyksCisJS0VZKDMsIDMsIEtFWV9QT1dFUiksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG1hdHJpeF9rZXltYXBfZGF0YSBteDI1cGRrX2tleW1hcF9kYXRhIF9faW5pdGRhdGEgPSB7CisJLmtleW1hcAkJPSBteDI1cGRrX2tleW1hcCwKKwkua2V5bWFwX3NpemUJPSBBUlJBWV9TSVpFKG14MjVwZGtfa2V5bWFwKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXhjX3VzYmhfcGxhdGZvcm1fZGF0YSB1c2JoMl9wZGF0YSBfX2luaXRjb25zdCA9IHsKKwkucG9ydHNjCT0gTVhDX0VIQ0lfTU9ERV9TRVJJQUwsCisJLmZsYWdzCT0gTVhDX0VIQ0lfSU5URVJOQUxfUEhZLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBmc2xfdXNiMl9wbGF0Zm9ybV9kYXRhIG90Z19kZXZpY2VfcGRhdGEgX19pbml0Y29uc3QgPSB7CisJLm9wZXJhdGluZ19tb2RlID0gRlNMX1VTQjJfRFJfREVWSUNFLAorCS5waHlfbW9kZSAgICAgICA9IEZTTF9VU0IyX1BIWV9VVE1JLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IG14MjVwZGtfaW5pdCh2b2lkKQoreworCW14Y19pb211eF92M19zZXR1cF9tdWx0aXBsZV9wYWRzKG14MjVwZGtfcGFkcywKKwkJCUFSUkFZX1NJWkUobXgyNXBka19wYWRzKSk7CisKKwlpbXgyNV9hZGRfaW14X3VhcnQwKCZ1YXJ0X3BkYXRhKTsKKwlpbXgyNV9hZGRfZnNsX3VzYjJfdWRjKCZvdGdfZGV2aWNlX3BkYXRhKTsKKwlpbXgyNV9hZGRfbXhjX2VoY2lfaHMoJnVzYmgyX3BkYXRhKTsKKwlpbXgyNV9hZGRfbXhjX25hbmQoJm14MjVwZGtfbmFuZF9ib2FyZF9pbmZvKTsKKwlpbXgyNV9hZGRfaW14ZGlfcnRjKE5VTEwpOworCWlteDI1X2FkZF9pbXhfZmIoJm14MjVwZGtfZmJfcGRhdGEpOworCWlteDI1X2FkZF9pbXgyX3dkdChOVUxMKTsKKworCW14MjVwZGtfZmVjX3Jlc2V0KCk7CisJaW14MjVfYWRkX2ZlYygmbXgyNV9mZWNfcGRhdGEpOworCWlteDI1X2FkZF9pbXhfa2V5cGFkKCZteDI1cGRrX2tleW1hcF9kYXRhKTsKKworCWlteDI1X2FkZF9zZGhjaV9lc2RoY19pbXgoMCwgTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBteDI1cGRrX3RpbWVyX2luaXQodm9pZCkKK3sKKwlteDI1X2Nsb2Nrc19pbml0KCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzX3RpbWVyIG14MjVwZGtfdGltZXIgPSB7CisJLmluaXQgICA9IG14MjVwZGtfdGltZXJfaW5pdCwKK307CisKK01BQ0hJTkVfU1RBUlQoTVgyNV8zRFMsICJGcmVlc2NhbGUgTVgyNVBESyAoM0RTKSIpCisJLyogTWFpbnRhaW5lcjogRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gKi8KKwkuYm9vdF9wYXJhbXMgICAgPSBNWDI1X1BIWVNfT0ZGU0VUICsgMHgxMDAsCisJLm1hcF9pbyAgICAgICAgID0gbXgyNV9tYXBfaW8sCisJLmluaXRfaXJxICAgICAgID0gbXgyNV9pbml0X2lycSwKKwkuaW5pdF9tYWNoaW5lICAgPSBteDI1cGRrX2luaXQsCisJLnRpbWVyICAgICAgICAgID0gJm14MjVwZGtfdGltZXIsCitNQUNISU5FX0VORAorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9tYWNoLW14MjdfM2RzLmMgYi9hcmNoL2FybS9tYWNoLWlteC9tYWNoLW14MjdfM2RzLmMKaW5kZXggODRhNWJhMC4uNmZkMGY4ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1teDI3XzNkcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtbXgyN18zZHMuYwpAQCAtMjIsMjAgKzIyLDI3IEBACiAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5wdXQvbWF0cml4X2tleXBhZC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi9vdGcuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvdWxwaS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvbWZkL21jMTM3ODMuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL21hY2hpbmUuaD4KKwogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KICNpbmNsdWRlIDxtYWNoL2lvbXV4LW14MjcuaD4KLSNpbmNsdWRlIDxtYWNoL21tYy5oPgorI2luY2x1ZGUgPG1hY2gvdWxwaS5oPgogCiAjaW5jbHVkZSAiZGV2aWNlcy1pbXgyNy5oIgotI2luY2x1ZGUgImRldmljZXMuaCIKIAogI2RlZmluZSBTRDFfRU5fR1BJTyAoR1BJT19QT1JUQiArIDI1KQorI2RlZmluZSBPVEdfUEhZX1JFU0VUX0dQSU8gKEdQSU9fUE9SVEIgKyAyMykKKyNkZWZpbmUgU1BJMl9TUzAgKEdQSU9fUE9SVEQgKyAyMSkKIAogc3RhdGljIGNvbnN0IGludCBteDI3cGRrX3BpbnNbXSBfX2luaXRjb25zdCA9IHsKIAkvKiBVQVJUMSAqLwpAQCAtNzAsNiArNzcsMjQgQEAKIAlQRTIyX1BGX1NEMV9DTUQsCiAJUEUyM19QRl9TRDFfQ0xLLAogCVNEMV9FTl9HUElPIHwgR1BJT19HUElPIHwgR1BJT19PVVQsCisJLyogT1RHICovCisJT1RHX1BIWV9SRVNFVF9HUElPIHwgR1BJT19HUElPIHwgR1BJT19PVVQsCisJUEM3X1BGX1VTQk9UR19EQVRBNSwKKwlQQzhfUEZfVVNCT1RHX0RBVEE2LAorCVBDOV9QRl9VU0JPVEdfREFUQTAsCisJUEMxMF9QRl9VU0JPVEdfREFUQTIsCisJUEMxMV9QRl9VU0JPVEdfREFUQTEsCisJUEMxMl9QRl9VU0JPVEdfREFUQTQsCisJUEMxM19QRl9VU0JPVEdfREFUQTMsCisJUEUwX1BGX1VTQk9UR19OWFQsCisJUEUxX1BGX1VTQk9UR19TVFAsCisJUEUyX1BGX1VTQk9UR19ESVIsCisJUEUyNF9QRl9VU0JPVEdfQ0xLLAorCVBFMjVfUEZfVVNCT1RHX0RBVEE3LAorCS8qIENTUEkyICovCisJUEQyMl9QRl9DU1BJMl9TQ0xLLAorCVBEMjNfUEZfQ1NQSTJfTUlTTywKKwlQRDI0X1BGX0NTUEkyX01PU0ksCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlteHVhcnRfcGxhdGZvcm1fZGF0YSB1YXJ0X3BkYXRhIF9faW5pdGNvbnN0ID0gewpAQCAtOTIsNyArMTE3LDcgQEAKIAlLRVkoMiwgMywgS0VZX0YxMCksCiB9OwogCi1zdGF0aWMgc3RydWN0IG1hdHJpeF9rZXltYXBfZGF0YSBteDI3XzNkc19rZXltYXBfZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWF0cml4X2tleW1hcF9kYXRhIG14MjdfM2RzX2tleW1hcF9kYXRhIF9faW5pdGNvbnN0ID0gewogCS5rZXltYXAJCT0gbXgyN18zZHNfa2V5bWFwLAogCS5rZXltYXBfc2l6ZQk9IEFSUkFZX1NJWkUobXgyN18zZHNfa2V5bWFwKSwKIH07CkBAIC0xMDksNyArMTM0LDcgQEAKIAlmcmVlX2lycShJUlFfR1BJT0IoMjYpLCBkYXRhKTsKIH0KIAotc3RhdGljIHN0cnVjdCBpbXhtbWNfcGxhdGZvcm1fZGF0YSBzZGhjMV9wZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW14bW1jX3BsYXRmb3JtX2RhdGEgc2RoYzFfcGRhdGEgX19pbml0Y29uc3QgPSB7CiAJLmluaXQgPSBteDI3XzNkc19zZGhjMV9pbml0LAogCS5leGl0ID0gbXgyN18zZHNfc2RoYzFfZXhpdCwKIH07CkBAIC0xMjEsNiArMTQ2LDExMSBAQAogCWdwaW9fZGlyZWN0aW9uX291dHB1dChTRDFfRU5fR1BJTywgMSk7CiB9CiAKKworc3RhdGljIGludCBvdGdfcGh5X2luaXQodm9pZCkKK3sKKwlncGlvX3JlcXVlc3QoT1RHX1BIWV9SRVNFVF9HUElPLCAidXNiLW90Zy1yZXNldCIpOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChPVEdfUEhZX1JFU0VUX0dQSU8sIDApOworCW1kZWxheSgxKTsKKwlncGlvX3NldF92YWx1ZShPVEdfUEhZX1JFU0VUX0dQSU8sIDEpOworCXJldHVybiAwOworfQorCisjaWYgZGVmaW5lZChDT05GSUdfVVNCX1VMUEkpCisKK3N0YXRpYyBzdHJ1Y3QgbXhjX3VzYmhfcGxhdGZvcm1fZGF0YSBvdGdfcGRhdGEgX19pbml0ZGF0YSA9IHsKKwkucG9ydHNjCT0gTVhDX0VIQ0lfTU9ERV9VTFBJLAorCS5mbGFncwk9IE1YQ19FSENJX0lOVEVSRkFDRV9ESUZGX1VOSSwKK307CisjZW5kaWYKKworc3RhdGljIGNvbnN0IHN0cnVjdCBmc2xfdXNiMl9wbGF0Zm9ybV9kYXRhIG90Z19kZXZpY2VfcGRhdGEgX19pbml0Y29uc3QgPSB7CisJLm9wZXJhdGluZ19tb2RlID0gRlNMX1VTQjJfRFJfREVWSUNFLAorCS5waHlfbW9kZSAgICAgICA9IEZTTF9VU0IyX1BIWV9VTFBJLAorfTsKKworc3RhdGljIGludCBvdGdfbW9kZV9ob3N0OworCitzdGF0aWMgaW50IF9faW5pdCBteDI3XzNkc19vdGdfbW9kZShjaGFyICpvcHRpb25zKQoreworCWlmICghc3RyY21wKG9wdGlvbnMsICJob3N0IikpCisJCW90Z19tb2RlX2hvc3QgPSAxOworCWVsc2UgaWYgKCFzdHJjbXAob3B0aW9ucywgImRldmljZSIpKQorCQlvdGdfbW9kZV9ob3N0ID0gMDsKKwllbHNlCisJCXByX2luZm8oIm90Z19tb2RlIG5laXRoZXIgXCJob3N0XCIgbm9yIFwiZGV2aWNlXCIuICIKKwkJCSJEZWZhdWx0aW5nIHRvIGRldmljZVxuIik7CisJcmV0dXJuIDA7Cit9CitfX3NldHVwKCJvdGdfbW9kZT0iLCBteDI3XzNkc19vdGdfbW9kZSk7CisKKy8qIFJlZ3VsYXRvcnMgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSB2bW1jMV9jb25zdW1lcnNbXSA9IHsKKwlSRUdVTEFUT1JfU1VQUExZKCJsY2RfMnY4IiwgTlVMTCksCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgdm1tYzFfaW5pdCA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5taW5fdVYJPSAyODAwMDAwLAorCQkubWF4X3VWID0gMjgwMDAwMCwKKwkJLnZhbGlkX29wc19tYXNrID0gUkVHVUxBVE9SX0NIQU5HRV9WT0xUQUdFLAorCX0sCisJLm51bV9jb25zdW1lcl9zdXBwbGllcyA9IEFSUkFZX1NJWkUodm1tYzFfY29uc3VtZXJzKSwKKwkuY29uc3VtZXJfc3VwcGxpZXMgPSB2bW1jMV9jb25zdW1lcnMsCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgdmdlbl9jb25zdW1lcnNbXSA9IHsKKwlSRUdVTEFUT1JfU1VQUExZKCJ2ZGRfbGNkaW8iLCBOVUxMKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSB2Z2VuX2luaXQgPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkubWluX3VWCT0gMTgwMDAwMCwKKwkJLm1heF91ViA9IDE4MDAwMDAsCisJCS52YWxpZF9vcHNfbWFzayA9IFJFR1VMQVRPUl9DSEFOR0VfVk9MVEFHRSwKKwl9LAorCS5udW1fY29uc3VtZXJfc3VwcGxpZXMgPSBBUlJBWV9TSVpFKHZnZW5fY29uc3VtZXJzKSwKKwkuY29uc3VtZXJfc3VwcGxpZXMgPSB2Z2VuX2NvbnN1bWVycywKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWMxMzc4M19yZWd1bGF0b3JfaW5pdF9kYXRhIG14MjdfM2RzX3JlZ3VsYXRvcnNbXSA9IHsKKwl7CisJCS5pZCA9IE1DMTM3ODNfUkVHVV9WTU1DMSwKKwkJLmluaXRfZGF0YSA9ICZ2bW1jMV9pbml0LAorCX0sIHsKKwkJLmlkID0gTUMxMzc4M19SRUdVX1ZHRU4sCisJCS5pbml0X2RhdGEgPSAmdmdlbl9pbml0LAorCX0sCit9OworCisvKiBNQzEzNzgzICovCitzdGF0aWMgc3RydWN0IG1jMTM3ODNfcGxhdGZvcm1fZGF0YSBtYzEzNzgzX3BkYXRhIF9faW5pdGRhdGEgPSB7CisJLnJlZ3VsYXRvcnMgPSBteDI3XzNkc19yZWd1bGF0b3JzLAorCS5udW1fcmVndWxhdG9ycyA9IEFSUkFZX1NJWkUobXgyN18zZHNfcmVndWxhdG9ycyksCisJLmZsYWdzICA9IE1DMTM3ODNfVVNFX1JFR1VMQVRPUiwKK307CisKKy8qIFNQSSAqLworc3RhdGljIGludCBzcGkyX2ludGVybmFsX2NoaXBzZWxlY3RbXSA9IHtTUEkyX1NTMH07CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3BpX2lteF9tYXN0ZXIgc3BpMl9wZGF0YSBfX2luaXRjb25zdCA9IHsKKwkuY2hpcHNlbGVjdAk9IHNwaTJfaW50ZXJuYWxfY2hpcHNlbGVjdCwKKwkubnVtX2NoaXBzZWxlY3QJPSBBUlJBWV9TSVpFKHNwaTJfaW50ZXJuYWxfY2hpcHNlbGVjdCksCit9OworCitzdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIG14MjdfM2RzX3NwaV9kZXZzW10gX19pbml0ZGF0YSA9IHsKKwl7CisJCS5tb2RhbGlhcwk9ICJtYzEzNzgzIiwKKwkJLm1heF9zcGVlZF9oegk9IDEwMDAwMDAsCisJCS5idXNfbnVtCT0gMSwKKwkJLmNoaXBfc2VsZWN0CT0gMCwgLyogU1MwICovCisJCS5wbGF0Zm9ybV9kYXRhCT0gJm1jMTM3ODNfcGRhdGEsCisJCS5pcnEgPSBJUlFfR1BJT0MoMTQpLAorCQkubW9kZSA9IFNQSV9DU19ISUdILAorCX0sCit9OworCisKIHN0YXRpYyB2b2lkIF9faW5pdCBteDI3cGRrX2luaXQodm9pZCkKIHsKIAlteGNfZ3Bpb19zZXR1cF9tdWx0aXBsZV9waW5zKG14MjdwZGtfcGlucywgQVJSQVlfU0laRShteDI3cGRrX3BpbnMpLApAQCAtMTI4LDggKzI1OCwyNCBAQAogCW14MjdfM2RzX3NkaGMxX2VuYWJsZV9sZXZlbF90cmFuc2xhdG9yKCk7CiAJaW14MjdfYWRkX2lteF91YXJ0MCgmdWFydF9wZGF0YSk7CiAJaW14MjdfYWRkX2ZlYyhOVUxMKTsKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZpbXhfa3BwX2RldmljZSwgJm14MjdfM2RzX2tleW1hcF9kYXRhKTsKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfc2RoY19kZXZpY2UwLCAmc2RoYzFfcGRhdGEpOworCWlteDI3X2FkZF9pbXhfa2V5cGFkKCZteDI3XzNkc19rZXltYXBfZGF0YSk7CisJaW14MjdfYWRkX214Y19tbWMoMCwgJnNkaGMxX3BkYXRhKTsKKwlpbXgyN19hZGRfaW14Ml93ZHQoTlVMTCk7CisJb3RnX3BoeV9pbml0KCk7CisjaWYgZGVmaW5lZChDT05GSUdfVVNCX1VMUEkpCisJaWYgKG90Z19tb2RlX2hvc3QpIHsKKwkJb3RnX3BkYXRhLm90ZyA9IG90Z191bHBpX2NyZWF0ZSgmbXhjX3VscGlfYWNjZXNzX29wcywKKwkJCQlVTFBJX09UR19EUlZWQlVTIHwgVUxQSV9PVEdfRFJWVkJVU19FWFQpOworCisJCWlteDI3X2FkZF9teGNfZWhjaV9vdGcoJm90Z19wZGF0YSk7CisJfQorI2VuZGlmCisJaWYgKCFvdGdfbW9kZV9ob3N0KQorCQlpbXgyN19hZGRfZnNsX3VzYjJfdWRjKCZvdGdfZGV2aWNlX3BkYXRhKTsKKworCWlteDI3X2FkZF9zcGlfaW14MSgmc3BpMl9wZGF0YSk7CisJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8obXgyN18zZHNfc3BpX2RldnMsCisJCQkJCQlBUlJBWV9TSVpFKG14MjdfM2RzX3NwaV9kZXZzKSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBteDI3cGRrX3RpbWVyX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L21hY2gtbXgyN2Fkcy5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1teDI3YWRzLmMKaW5kZXggYTFlNGJjNS4uYjgzMmY5NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1teDI3YWRzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1teDI3YWRzLmMKQEAgLTMwLDExICszMCw4IEBACiAjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9pb211eC1teDI3Lmg+CiAjaW5jbHVkZSA8bWFjaC9teGNfbmFuZC5oPgotI2luY2x1ZGUgPG1hY2gvaW14ZmIuaD4KLSNpbmNsdWRlIDxtYWNoL21tYy5oPgogCiAjaW5jbHVkZSAiZGV2aWNlcy1pbXgyNy5oIgotI2luY2x1ZGUgImRldmljZXMuaCIKIAogLyoKICAqIEJhc2UgYWRkcmVzcyBvZiBQQkMgY29udHJvbGxlciwgQ1M0CkBAIC0yMjgsNyArMjI1LDcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBpbXhfZmJfcGxhdGZvcm1fZGF0YSBteDI3YWRzX2ZiX2RhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGlteF9mYl9wbGF0Zm9ybV9kYXRhIG14MjdhZHNfZmJfZGF0YSBfX2luaXRjb25zdCA9IHsKIAkubW9kZSA9IG14MjdhZHNfbW9kZXMsCiAJLm51bV9tb2RlcyA9IEFSUkFZX1NJWkUobXgyN2Fkc19tb2RlcyksCiAKQEAgLTI3MiwxOSArMjY5LDE4IEBACiAJZnJlZV9pcnEoSVJRX0dQSU9CKDcpLCBkYXRhKTsKIH0KIAotc3RhdGljIHN0cnVjdCBpbXhtbWNfcGxhdGZvcm1fZGF0YSBzZGhjMV9wZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW14bW1jX3BsYXRmb3JtX2RhdGEgc2RoYzFfcGRhdGEgX19pbml0Y29uc3QgPSB7CiAJLmluaXQgPSBteDI3YWRzX3NkaGMxX2luaXQsCiAJLmV4aXQgPSBteDI3YWRzX3NkaGMxX2V4aXQsCiB9OwogCi1zdGF0aWMgc3RydWN0IGlteG1tY19wbGF0Zm9ybV9kYXRhIHNkaGMyX3BkYXRhID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpbXhtbWNfcGxhdGZvcm1fZGF0YSBzZGhjMl9wZGF0YSBfX2luaXRjb25zdCA9IHsKIAkuaW5pdCA9IG14MjdhZHNfc2RoYzJfaW5pdCwKIAkuZXhpdCA9IG14MjdhZHNfc2RoYzJfZXhpdCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0Zm9ybV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmbXgyN2Fkc19ub3JfbXRkX2RldmljZSwKLQkmbXhjX3cxX21hc3Rlcl9kZXZpY2UsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlteHVhcnRfcGxhdGZvcm1fZGF0YSB1YXJ0X3BkYXRhIF9faW5pdGNvbnN0ID0gewpAQCAtMzA4LDEyICszMDQsMTMgQEAKIAlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygxLCBteDI3YWRzX2kyY19kZXZpY2VzLAogCQkJCUFSUkFZX1NJWkUobXgyN2Fkc19pMmNfZGV2aWNlcykpOwogCWlteDI3X2FkZF9pbXhfaTJjKDEsICZteDI3YWRzX2kyYzFfZGF0YSk7Ci0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX2ZiX2RldmljZSwgJm14MjdhZHNfZmJfZGF0YSk7Ci0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3NkaGNfZGV2aWNlMCwgJnNkaGMxX3BkYXRhKTsKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfc2RoY19kZXZpY2UxLCAmc2RoYzJfcGRhdGEpOworCWlteDI3X2FkZF9pbXhfZmIoJm14MjdhZHNfZmJfZGF0YSk7CisJaW14MjdfYWRkX214Y19tbWMoMCwgJnNkaGMxX3BkYXRhKTsKKwlpbXgyN19hZGRfbXhjX21tYygxLCAmc2RoYzJfcGRhdGEpOwogCiAJaW14MjdfYWRkX2ZlYyhOVUxMKTsKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhwbGF0Zm9ybV9kZXZpY2VzLCBBUlJBWV9TSVpFKHBsYXRmb3JtX2RldmljZXMpKTsKKwlpbXgyN19hZGRfbXhjX3cxKE5VTEwpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgbXgyN2Fkc190aW1lcl9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9tYWNoLW14dF90ZDYwLmMgYi9hcmNoL2FybS9tYWNoLWlteC9tYWNoLW14dF90ZDYwLmMKaW5kZXggMzhkM2E0YS4uNGNlNzFiMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1teHRfdGQ2MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtbXh0X3RkNjAuYwpAQCAtMzEsMTEgKzMxLDggQEAKICNpbmNsdWRlIDxtYWNoL2lvbXV4LW14MjcuaD4KICNpbmNsdWRlIDxtYWNoL214Y19uYW5kLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjL3BjYTk1M3guaD4KLSNpbmNsdWRlIDxtYWNoL2lteGZiLmg+Ci0jaW5jbHVkZSA8bWFjaC9tbWMuaD4KIAogI2luY2x1ZGUgImRldmljZXMtaW14MjcuaCIKLSNpbmNsdWRlICJkZXZpY2VzLmgiCiAKIHN0YXRpYyBjb25zdCBpbnQgbXh0X3RkNjBfcGluc1tdIF9faW5pdGNvbnN0ID0gewogCS8qIFVBUlQwICovCkBAIC0xOTYsNyArMTkzLDcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBpbXhfZmJfcGxhdGZvcm1fZGF0YSBteHRfdGQ2MF9mYl9kYXRhID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpbXhfZmJfcGxhdGZvcm1fZGF0YSBteHRfdGQ2MF9mYl9kYXRhIF9faW5pdGNvbnN0ID0gewogCS5tb2RlID0gbXh0X3RkNjBfbW9kZXMsCiAJLm51bV9tb2RlcyA9IEFSUkFZX1NJWkUobXh0X3RkNjBfbW9kZXMpLAogCkBAIC0yMjYsNyArMjIzLDcgQEAKIAlmcmVlX2lycShJUlFfR1BJT0YoOCksIGRhdGEpOwogfQogCi1zdGF0aWMgc3RydWN0IGlteG1tY19wbGF0Zm9ybV9kYXRhIHNkaGMxX3BkYXRhID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpbXhtbWNfcGxhdGZvcm1fZGF0YSBzZGhjMV9wZGF0YSBfX2luaXRjb25zdCA9IHsKIAkuaW5pdCA9IG14dF90ZDYwX3NkaGMxX2luaXQsCiAJLmV4aXQgPSBteHRfdGQ2MF9zZGhjMV9leGl0LAogfTsKQEAgLTI1Myw4ICsyNTAsOCBAQAogCiAJaW14MjdfYWRkX2lteF9pMmMoMCwgJm14dF90ZDYwX2kyYzBfZGF0YSk7CiAJaW14MjdfYWRkX2lteF9pMmMoMSwgJm14dF90ZDYwX2kyYzFfZGF0YSk7Ci0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX2ZiX2RldmljZSwgJm14dF90ZDYwX2ZiX2RhdGEpOwotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19zZGhjX2RldmljZTAsICZzZGhjMV9wZGF0YSk7CisJaW14MjdfYWRkX2lteF9mYigmbXh0X3RkNjBfZmJfZGF0YSk7CisJaW14MjdfYWRkX214Y19tbWMoMCwgJnNkaGMxX3BkYXRhKTsKIAlpbXgyN19hZGRfZmVjKE5VTEwpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9tYWNoLXBjYTEwMC5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1wY2ExMDAuYwppbmRleCA4YzcyMGQ0Li5jY2NjMGEwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9tYWNoLXBjYTEwMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtcGNhMTAwLmMKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL290Zy5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi91bHBpLmg+Ci0jaW5jbHVkZSA8bGludXgvZnNsX2RldmljZXMuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgpAQCAtNDAsMTMgKzM5LDkgQEAKICNpbmNsdWRlIDxtYWNoL2F1ZG11eC5oPgogI2luY2x1ZGUgPG1hY2gvbXhjX25hbmQuaD4KICNpbmNsdWRlIDxtYWNoL2lycXMuaD4KLSNpbmNsdWRlIDxtYWNoL21tYy5oPgotI2luY2x1ZGUgPG1hY2gvbXhjX2VoY2kuaD4KICNpbmNsdWRlIDxtYWNoL3VscGkuaD4KLSNpbmNsdWRlIDxtYWNoL2lteGZiLmg+CiAKICNpbmNsdWRlICJkZXZpY2VzLWlteDI3LmgiCi0jaW5jbHVkZSAiZGV2aWNlcy5oIgogCiAjZGVmaW5lIE9UR19QSFlfQ1NfR1BJTyAoR1BJT19QT1JUQiArIDIzKQogI2RlZmluZSBVU0JIMl9QSFlfQ1NfR1BJTyAoR1BJT19QT1JUQiArIDI0KQpAQCAtMTcxLDExICsxNjYsNiBAQAogCS5od19lY2MgPSAxLAogfTsKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRmb3JtX2RldmljZXNbXSBfX2luaXRkYXRhID0gewotCSZteGNfdzFfbWFzdGVyX2RldmljZSwKLQkmbXhjX3dkdCwKLX07Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW14aTJjX3BsYXRmb3JtX2RhdGEgcGNhMTAwX2kyYzFfZGF0YSBfX2luaXRjb25zdCA9IHsKIAkuYml0cmF0ZSA9IDEwMDAwMCwKIH07CkBAIC0yNzQsNyArMjY0LDcgQEAKIAlmcmVlX2lycShJUlFfR1BJT0MoMjkpLCBkYXRhKTsKIH0KIAotc3RhdGljIHN0cnVjdCBpbXhtbWNfcGxhdGZvcm1fZGF0YSBzZGhjX3BkYXRhID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpbXhtbWNfcGxhdGZvcm1fZGF0YSBzZGhjX3BkYXRhIF9faW5pdGNvbnN0ID0gewogCS5pbml0ID0gcGNhMTAwX3NkaGMyX2luaXQsCiAJLmV4aXQgPSBwY2ExMDBfc2RoYzJfZXhpdCwKIH07CkBAIC0yODYsNyArMjc2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBteGNfdXNiaF9wbGF0Zm9ybV9kYXRhIG90Z19wZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgbXhjX3VzYmhfcGxhdGZvcm1fZGF0YSBvdGdfcGRhdGEgX19pbml0ZGF0YSA9IHsKIAkuaW5pdAk9IG90Z19waHlfaW5pdCwKIAkucG9ydHNjCT0gTVhDX0VIQ0lfTU9ERV9VTFBJLAogCS5mbGFncwk9IE1YQ19FSENJX0lOVEVSRkFDRV9ESUZGX1VOSSwKQEAgLTI5OCwxNCArMjg4LDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbXhjX3VzYmhfcGxhdGZvcm1fZGF0YSB1c2JoMl9wZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgbXhjX3VzYmhfcGxhdGZvcm1fZGF0YSB1c2JoMl9wZGF0YSBfX2luaXRkYXRhID0gewogCS5pbml0CT0gdXNiaDJfcGh5X2luaXQsCiAJLnBvcnRzYwk9IE1YQ19FSENJX01PREVfVUxQSSwKIAkuZmxhZ3MJPSBNWENfRUhDSV9JTlRFUkZBQ0VfRElGRl9VTkksCiB9OwogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgZnNsX3VzYjJfcGxhdGZvcm1fZGF0YSBvdGdfZGV2aWNlX3BkYXRhID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmc2xfdXNiMl9wbGF0Zm9ybV9kYXRhIG90Z19kZXZpY2VfcGRhdGEgX19pbml0Y29uc3QgPSB7CiAJLm9wZXJhdGluZ19tb2RlID0gRlNMX1VTQjJfRFJfREVWSUNFLAogCS5waHlfbW9kZSAgICAgICA9IEZTTF9VU0IyX1BIWV9VTFBJLAogfTsKQEAgLTM1NSw3ICszNDUsNyBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IGlteF9mYl9wbGF0Zm9ybV9kYXRhIHBjYTEwMF9mYl9kYXRhID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpbXhfZmJfcGxhdGZvcm1fZGF0YSBwY2ExMDBfZmJfZGF0YSBfX2luaXRjb25zdCA9IHsKIAkubW9kZSA9IHBjYTEwMF9mYl9tb2RlcywKIAkubnVtX21vZGVzID0gQVJSQVlfU0laRShwY2ExMDBfZmJfbW9kZXMpLAogCkBAIC0zODksNyArMzc5LDcgQEAKIAogCWlteDI3X2FkZF9pbXhfdWFydDAoJnVhcnRfcGRhdGEpOwogCi0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3NkaGNfZGV2aWNlMSwgJnNkaGNfcGRhdGEpOworCWlteDI3X2FkZF9teGNfbW1jKDEsICZzZGhjX3BkYXRhKTsKIAogCWlteDI3X2FkZF9teGNfbmFuZCgmcGNhMTAwX25hbmRfYm9hcmRfaW5mbyk7CiAKQEAgLTQxNywyMyArNDA3LDI0IEBACiAJCW90Z19wZGF0YS5vdGcgPSBvdGdfdWxwaV9jcmVhdGUoJm14Y191bHBpX2FjY2Vzc19vcHMsCiAJCQkJVUxQSV9PVEdfRFJWVkJVUyB8IFVMUElfT1RHX0RSVlZCVVNfRVhUKTsKIAotCQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfb3RnX2hvc3QsICZvdGdfcGRhdGEpOworCQlpbXgyN19hZGRfbXhjX2VoY2lfb3RnKCZvdGdfcGRhdGEpOwogCX0KIAogCXVzYmgyX3BkYXRhLm90ZyA9IG90Z191bHBpX2NyZWF0ZSgmbXhjX3VscGlfYWNjZXNzX29wcywKIAkJCQlVTFBJX09UR19EUlZWQlVTIHwgVUxQSV9PVEdfRFJWVkJVU19FWFQpOwogCi0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VzYmgyLCAmdXNiaDJfcGRhdGEpOworCWlteDI3X2FkZF9teGNfZWhjaV9ocygyLCAmdXNiaDJfcGRhdGEpOwogI2VuZGlmCiAJaWYgKCFvdGdfbW9kZV9ob3N0KSB7CiAJCWdwaW9fc2V0X3ZhbHVlKE9UR19QSFlfQ1NfR1BJTywgMCk7Ci0JCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19vdGdfdWRjX2RldmljZSwgJm90Z19kZXZpY2VfcGRhdGEpOworCQlpbXgyN19hZGRfZnNsX3VzYjJfdWRjKCZvdGdfZGV2aWNlX3BkYXRhKTsKIAl9CiAKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfZmJfZGV2aWNlLCAmcGNhMTAwX2ZiX2RhdGEpOworCWlteDI3X2FkZF9pbXhfZmIoJnBjYTEwMF9mYl9kYXRhKTsKIAogCWlteDI3X2FkZF9mZWMoTlVMTCk7Ci0JcGxhdGZvcm1fYWRkX2RldmljZXMocGxhdGZvcm1fZGV2aWNlcywgQVJSQVlfU0laRShwbGF0Zm9ybV9kZXZpY2VzKSk7CisJaW14MjdfYWRkX2lteDJfd2R0KE5VTEwpOworCWlteDI3X2FkZF9teGNfdzEoTlVMTCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBwY2ExMDBfdGltZXJfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1wY20wMzguYyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtcGNtMDM4LmMKaW5kZXggNDlhOTdjZS4uZjY2N2EyNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1wY20wMzguYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9tYWNoLXBjbTAzOC5jCkBAIC0zNywxMSArMzcsOSBAQAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL2lvbXV4LW14MjcuaD4KICNpbmNsdWRlIDxtYWNoL214Y19uYW5kLmg+Ci0jaW5jbHVkZSA8bWFjaC9teGNfZWhjaS5oPgogI2luY2x1ZGUgPG1hY2gvdWxwaS5oPgogCiAjaW5jbHVkZSAiZGV2aWNlcy1pbXgyNy5oIgotI2luY2x1ZGUgImRldmljZXMuaCIKIAogc3RhdGljIGNvbnN0IGludCBwY20wMzhfcGluc1tdIF9faW5pdGNvbnN0ID0gewogCS8qIFVBUlQxICovCkBAIC0xNzIsOSArMTcwLDcgQEAKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRmb3JtX2RldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZwY20wMzhfbm9yX210ZF9kZXZpY2UsCi0JJm14Y193MV9tYXN0ZXJfZGV2aWNlLAogCSZwY20wMzhfc3JhbV9tdGRfZGV2aWNlLAotCSZteGNfd2R0LAogfTsKIAogLyogT24gcGNtMDM4IHRoZXJlJ3MgYSBzcmFtIGF0dGFjaGVkIHRvIENTMSwgd2UgZW5hYmxlIHRoZSBjaGlwc2VsZWN0IGhlcmUgYW5kCkBAIC0yMTQsNyArMjEwLDcgQEAKIAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IHNkaGMxX2NvbnN1bWVyc1tdID0gewogCXsKLQkJLmRldgk9ICZteGNfc2RoY19kZXZpY2UxLmRldiwKKwkJLmRldl9uYW1lID0gIm14Yy1tbWMuMSIsCiAJCS5zdXBwbHkJPSAic2RoY192Y2MiLAogCX0sCiB9OwpAQCAtMjg1LDcgKzI4MSw3IEBACiAJfQogfTsKIAotc3RhdGljIHN0cnVjdCBteGNfdXNiaF9wbGF0Zm9ybV9kYXRhIHVzYmgyX3BkYXRhID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBteGNfdXNiaF9wbGF0Zm9ybV9kYXRhIHVzYmgyX3BkYXRhIF9faW5pdGNvbnN0ID0gewogCS5wb3J0c2MJPSBNWENfRUhDSV9NT0RFX1VMUEksCiAJLmZsYWdzCT0gTVhDX0VIQ0lfUE9XRVJfUElOU19FTkFCTEVEIHwgTVhDX0VIQ0lfSU5URVJGQUNFX0RJRkZfVU5JLAogfTsKQEAgLTMyMiwxMCArMzE4LDEyIEBACiAJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8ocGNtMDM4X3NwaV9ib2FyZF9pbmZvLAogCQkJCUFSUkFZX1NJWkUocGNtMDM4X3NwaV9ib2FyZF9pbmZvKSk7CiAKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdXNiaDIsICZ1c2JoMl9wZGF0YSk7CisJaW14MjdfYWRkX214Y19laGNpX2hzKDIsICZ1c2JoMl9wZGF0YSk7CiAKIAlpbXgyN19hZGRfZmVjKE5VTEwpOwogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHBsYXRmb3JtX2RldmljZXMsIEFSUkFZX1NJWkUocGxhdGZvcm1fZGV2aWNlcykpOworCWlteDI3X2FkZF9pbXgyX3dkdChOVUxMKTsKKwlpbXgyN19hZGRfbXhjX3cxKE5VTEwpOwogCiAjaWZkZWYgQ09ORklHX01BQ0hfUENNOTcwX0JBU0VCT0FSRAogCXBjbTk3MF9iYXNlYm9hcmRfaW5pdCgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1zY2I5MzI4LmMgYi9hcmNoL2FybS9tYWNoLWlteC9tYWNoLXNjYjkzMjguYwppbmRleCAxZmJkZDNmLi5lYWU4NzhmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9tYWNoLXNjYjkzMjguYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9tYWNoLXNjYjkzMjguYwpAQCAtMjUsNyArMjUsNiBAQAogI2luY2x1ZGUgPG1hY2gvaW9tdXgtbXgxLmg+CiAKICNpbmNsdWRlICJkZXZpY2VzLWlteDEuaCIKLSNpbmNsdWRlICJkZXZpY2VzLmgiCiAKIC8qCiAgKiBUaGlzIHNjYjkzMjggaGFzIGEgMzJNaUIgZmxhc2gKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L21tLWlteDEuYyBiL2FyY2gvYXJtL21hY2gtaW14L21tLWlteDEuYwppbmRleCA5YmU5MmI5Li43MjlhZTA5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9tbS1pbXgxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvbW0taW14MS5jCkBAIC0yNSwxMiArMjUsNyBAQAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBpbXhfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7Ci0JewotCQkudmlydHVhbCA9IE1YMV9JT19CQVNFX0FERFJfVklSVCwKLQkJLnBmbiA9IF9fcGh5c190b19wZm4oTVgxX0lPX0JBU0VfQUREUiksCi0JCS5sZW5ndGggPSBNWDFfSU9fU0laRSwKLQkJLnR5cGUgPSBNVF9ERVZJQ0UKLQl9CisJaW14X21hcF9lbnRyeShNWDEsIElPLCBNVF9ERVZJQ0UpLAogfTsKIAogdm9pZCBfX2luaXQgbXgxX21hcF9pbyh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvbW0taW14MjEuYyBiL2FyY2gvYXJtL21hY2gtaW14L21tLWlteDIxLmMKaW5kZXggMTJmYWVlYWEuLmU3MjhhZjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L21tLWlteDIxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvbW0taW14MjEuYwpAQCAtMzUsMzMgKzM1LDE4IEBACiAJICogLSBST00gUGF0Y2gKIAkgKiAtIGFuZCBzb21lIHJlc2VydmVkIHNwYWNlCiAJICovCi0JewotCQkudmlydHVhbCA9IE1YMjFfQUlQSV9CQVNFX0FERFJfVklSVCwKLQkJLnBmbiA9IF9fcGh5c190b19wZm4oTVgyMV9BSVBJX0JBU0VfQUREUiksCi0JCS5sZW5ndGggPSBNWDIxX0FJUElfU0laRSwKLQkJLnR5cGUgPSBNVF9ERVZJQ0UKLQl9LAorCWlteF9tYXBfZW50cnkoTVgyMSwgQUlQSSwgTVRfREVWSUNFKSwKIAkvKgogCSAqIHRoaXMgZml4ZWQgbWFwcGluZyBjb3ZlcnM6CiAJICogLSBDU0kKIAkgKiAtIEFUQQogCSAqLwotCXsKLQkJLnZpcnR1YWwgPSBNWDIxX1NBSEIxX0JBU0VfQUREUl9WSVJULAotCQkucGZuID0gX19waHlzX3RvX3BmbihNWDIxX1NBSEIxX0JBU0VfQUREUiksCi0JCS5sZW5ndGggPSBNWDIxX1NBSEIxX1NJWkUsCi0JCS50eXBlID0gTVRfREVWSUNFCi0JfSwKKwlpbXhfbWFwX2VudHJ5KE1YMjEsIFNBSEIxLCBNVF9ERVZJQ0UpLAogCS8qCiAJICogdGhpcyBmaXhlZCBtYXBwaW5nIGNvdmVyczoKIAkgKiAtIEVNSQogCSAqLwotCXsKLQkJLnZpcnR1YWwgPSBNWDIxX1hfTUVNQ19CQVNFX0FERFJfVklSVCwKLQkJLnBmbiA9IF9fcGh5c190b19wZm4oTVgyMV9YX01FTUNfQkFTRV9BRERSKSwKLQkJLmxlbmd0aCA9IE1YMjFfWF9NRU1DX1NJWkUsCi0JCS50eXBlID0gTVRfREVWSUNFCi0JfSwKKwlpbXhfbWFwX2VudHJ5KE1YMjEsIFhfTUVNQywgTVRfREVWSUNFKSwKIH07CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9tbS1pbXgyNS5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvbW0taW14MjUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWRlYzZjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvbW0taW14MjUuYwpAQCAtMCwwICsxLDYyIEBACisvKgorICogIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIEFybSBMaW1pdGVkCisgKiAgQ29weXJpZ2h0IChDKSAyMDAwIERlZXAgQmx1ZSBTb2x1dGlvbnMgTHRkCisgKiAgQ29weXJpZ2h0IChDKSAyMDAyIFNoYW5lIE5heSAoc2hhbmVAbWluaXJsLmNvbSkKKyAqICBDb3B5cmlnaHQgMjAwNS0yMDA3IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgICAtIGFkZCBNWDMxIHNwZWNpZmljIGRlZmluaXRpb25zCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKworI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisKKyNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL214MjUuaD4KKyNpbmNsdWRlIDxtYWNoL2lvbXV4LXYzLmg+CisKKy8qCisgKiBUaGlzIHRhYmxlIGRlZmluZXMgc3RhdGljIHZpcnR1YWwgYWRkcmVzcyBtYXBwaW5ncyBmb3IgSS9PIHJlZ2lvbnMuCisgKiBUaGVzZSBhcmUgdGhlIG1hcHBpbmdzIGNvbW1vbiBhY3Jvc3MgYWxsIE1YMjUgYm9hcmRzLgorICovCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIG14MjVfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJaW14X21hcF9lbnRyeShNWDI1LCBBVklDLCBNVF9ERVZJQ0VfTk9OU0hBUkVEKSwKKwlpbXhfbWFwX2VudHJ5KE1YMjUsIEFJUFMxLCBNVF9ERVZJQ0VfTk9OU0hBUkVEKSwKKwlpbXhfbWFwX2VudHJ5KE1YMjUsIEFJUFMyLCBNVF9ERVZJQ0VfTk9OU0hBUkVEKSwKK307CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBtZW1vcnkgbWFwLiBJdCBpcyBjYWxsZWQgZHVyaW5nIHRoZQorICogc3lzdGVtIHN0YXJ0dXAgdG8gY3JlYXRlIHN0YXRpYyBwaHlzaWNhbCB0byB2aXJ0dWFsIG1lbW9yeSBtYXBwaW5ncworICogZm9yIHRoZSBJTyBtb2R1bGVzLgorICovCit2b2lkIF9faW5pdCBteDI1X21hcF9pbyh2b2lkKQoreworCW14Y19zZXRfY3B1X3R5cGUoTVhDX0NQVV9NWDI1KTsKKwlteGNfaW9tdXhfdjNfaW5pdChNWDI1X0lPX0FERFJFU1MoTVgyNV9JT01VWENfQkFTRV9BRERSKSk7CisJbXhjX2FyY2hfcmVzZXRfaW5pdChNWDI1X0lPX0FERFJFU1MoTVgyNV9XRE9HX0JBU0VfQUREUikpOworCisJaW90YWJsZV9pbml0KG14MjVfaW9fZGVzYywgQVJSQVlfU0laRShteDI1X2lvX2Rlc2MpKTsKK30KKworaW50IGlteDI1X3JlZ2lzdGVyX2dwaW9zKHZvaWQpOworCit2b2lkIF9faW5pdCBteDI1X2luaXRfaXJxKHZvaWQpCit7CisJbXhjX2luaXRfaXJxKE1YMjVfSU9fQUREUkVTUyhNWDI1X0FWSUNfQkFTRV9BRERSKSk7CisJaW14MjVfcmVnaXN0ZXJfZ3Bpb3MoKTsKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvbW0taW14MjcuYyBiL2FyY2gvYXJtL21hY2gtaW14L21tLWlteDI3LmMKaW5kZXggYTI0NjIyOS4uMzc0ZTQ4YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvbW0taW14MjcuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9tbS1pbXgyNy5jCkBAIC0zNSwzMyArMzUsMTggQEAKIAkgKiAtIFJPTSBQYXRjaAogCSAqIC0gYW5kIHNvbWUgcmVzZXJ2ZWQgc3BhY2UKIAkgKi8KLQl7Ci0JCS52aXJ0dWFsID0gTVgyN19BSVBJX0JBU0VfQUREUl9WSVJULAotCQkucGZuID0gX19waHlzX3RvX3BmbihNWDI3X0FJUElfQkFTRV9BRERSKSwKLQkJLmxlbmd0aCA9IE1YMjdfQUlQSV9TSVpFLAotCQkudHlwZSA9IE1UX0RFVklDRQotCX0sCisJaW14X21hcF9lbnRyeShNWDI3LCBBSVBJLCBNVF9ERVZJQ0UpLAogCS8qCiAJICogdGhpcyBmaXhlZCBtYXBwaW5nIGNvdmVyczoKIAkgKiAtIENTSQogCSAqIC0gQVRBCiAJICovCi0JewotCQkudmlydHVhbCA9IE1YMjdfU0FIQjFfQkFTRV9BRERSX1ZJUlQsCi0JCS5wZm4gPSBfX3BoeXNfdG9fcGZuKE1YMjdfU0FIQjFfQkFTRV9BRERSKSwKLQkJLmxlbmd0aCA9IE1YMjdfU0FIQjFfU0laRSwKLQkJLnR5cGUgPSBNVF9ERVZJQ0UKLQl9LAorCWlteF9tYXBfZW50cnkoTVgyNywgU0FIQjEsIE1UX0RFVklDRSksCiAJLyoKIAkgKiB0aGlzIGZpeGVkIG1hcHBpbmcgY292ZXJzOgogCSAqIC0gRU1JCiAJICovCi0JewotCQkudmlydHVhbCA9IE1YMjdfWF9NRU1DX0JBU0VfQUREUl9WSVJULAotCQkucGZuID0gX19waHlzX3RvX3BmbihNWDI3X1hfTUVNQ19CQVNFX0FERFIpLAotCQkubGVuZ3RoID0gTVgyN19YX01FTUNfU0laRSwKLQkJLnR5cGUgPSBNVF9ERVZJQ0UKLQl9LAorCWlteF9tYXBfZW50cnkoTVgyNywgWF9NRU1DLCBNVF9ERVZJQ0UpLAogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L3BjbTk3MC1iYXNlYm9hcmQuYyBiL2FyY2gvYXJtL21hY2gtaW14L3BjbTk3MC1iYXNlYm9hcmQuYwppbmRleCA5MTEwZDljLi45OWFmYmMzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9wY205NzAtYmFzZWJvYXJkLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvcGNtOTcwLWJhc2Vib2FyZC5jCkBAIC0yNSwxMSArMjUsOSBAQAogCiAjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KICNpbmNsdWRlIDxtYWNoL2lvbXV4LW14MjcuaD4KLSNpbmNsdWRlIDxtYWNoL2lteGZiLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvbW1jLmg+CiAKLSNpbmNsdWRlICJkZXZpY2VzLmgiCisjaW5jbHVkZSAiZGV2aWNlcy1pbXgyNy5oIgogCiBzdGF0aWMgY29uc3QgaW50IHBjbTk3MF9waW5zW10gX19pbml0Y29uc3QgPSB7CiAJLyogU0RIQyAqLwpAQCAtMTE5LDcgKzExNyw3IEBACiAJZ3Bpb19mcmVlKEdQSU9fUE9SVEMgKyAyOCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaW14bW1jX3BsYXRmb3JtX2RhdGEgc2RoY19wZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW14bW1jX3BsYXRmb3JtX2RhdGEgc2RoY19wZGF0YSBfX2luaXRjb25zdCA9IHsKIAkuZ2V0X3JvID0gcGNtOTcwX3NkaGMyX2dldF9ybywKIAkuaW5pdCA9IHBjbTk3MF9zZGhjMl9pbml0LAogCS5leGl0ID0gcGNtOTcwX3NkaGMyX2V4aXQsCkBAIC0xNzksNyArMTc3LDcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBpbXhfZmJfcGxhdGZvcm1fZGF0YSBwY20wMzhfZmJfZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW14X2ZiX3BsYXRmb3JtX2RhdGEgcGNtMDM4X2ZiX2RhdGEgX19pbml0Y29uc3QgPSB7CiAJLm1vZGUgPSBwY205NzBfbW9kZXMsCiAJLm51bV9tb2RlcyA9IEFSUkFZX1NJWkUocGNtOTcwX21vZGVzKSwKIApAQCAtMjI2LDggKzIyNCw4IEBACiAJbXhjX2dwaW9fc2V0dXBfbXVsdGlwbGVfcGlucyhwY205NzBfcGlucywgQVJSQVlfU0laRShwY205NzBfcGlucyksCiAJCQkiUENNOTcwIik7CiAKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfZmJfZGV2aWNlLCAmcGNtMDM4X2ZiX2RhdGEpOworCWlteDI3X2FkZF9pbXhfZmIoJnBjbTAzOF9mYl9kYXRhKTsKIAlteGNfZ3Bpb19tb2RlKEdQSU9fUE9SVEMgfCAyOCB8IEdQSU9fR1BJTyB8IEdQSU9fSU4pOwotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19zZGhjX2RldmljZTEsICZzZGhjX3BkYXRhKTsKKwlpbXgyN19hZGRfbXhjX21tYygxLCAmc2RoY19wZGF0YSk7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZwY205NzBfc2phMTAwMCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9wbS1pbXgyNy5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvcG0taW14MjcuYwppbmRleCBhZmMxN2NlLi42YmY4MWNlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9wbS1pbXgyNy5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L3BtLWlteDI3LmMKQEAgLTM5LDYgKzM5LDkgQEAKIAogc3RhdGljIGludCBfX2luaXQgbXgyN19wbV9pbml0KHZvaWQpCiB7CisJaWYgKCFjcHVfaXNfbXgyNygpKQorCQlyZXR1cm4gMDsKKwogCXN1c3BlbmRfc2V0X29wcygmbXgyN19zdXNwZW5kX29wcyk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9LY29uZmlnCmluZGV4IDI3ZGIyNzUuLjc2OWIwZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9LY29uZmlnCkBAIC00LDYgKzQsNyBAQAogCiBjb25maWcgQVJDSF9JTlRFR1JBVE9SX0FQCiAJYm9vbCAiU3VwcG9ydCBJbnRlZ3JhdG9yL0FQIGFuZCBJbnRlZ3JhdG9yL1BQMiBwbGF0Zm9ybXMiCisJc2VsZWN0IE1JR0hUX0hBVkVfUENJCiAJaGVscAogCSAgSW5jbHVkZSBzdXBwb3J0IGZvciB0aGUgQVJNKFIpIEludGVncmF0b3IvQVAgYW5kCiAJICBJbnRlZ3JhdG9yL1BQMiBwbGF0Zm9ybXMuCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvY29yZS5jIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2NvcmUuYwppbmRleCA4ZjRmYjZkLi5iOGU4ODRiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvY29yZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9jb3JlLmMKQEAgLTIxLDkgKzIxLDggQEAKICNpbmNsdWRlIDxsaW51eC9hbWJhL2J1cy5oPgogI2luY2x1ZGUgPGxpbnV4L2FtYmEvc2VyaWFsLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9jbGtkZXYuaD4KIAotI2luY2x1ZGUgPGFzbS9jbGtkZXYuaD4KLSNpbmNsdWRlIDxtYWNoL2Nsa2Rldi5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL3BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2ltcGQxLmMgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW1wZDEuYwppbmRleCBmZDY4NGJmLi41ZGI1NzRmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW1wZDEuYworKysgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW1wZDEuYwpAQCAtMjIsOSArMjIsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2FtYmEvY2xjZC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsa2Rldi5oPgogCi0jaW5jbHVkZSA8YXNtL2Nsa2Rldi5oPgotI2luY2x1ZGUgPG1hY2gvY2xrZGV2Lmg+CiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2ljc3QuaD4KICNpbmNsdWRlIDxtYWNoL2xtLmg+CiAjaW5jbHVkZSA8bWFjaC9pbXBkMS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2ludGVncmF0b3JfYXAuYyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbnRlZ3JhdG9yX2FwLmMKaW5kZXggNTQ4MjA4Zi4uMjc3NGRmOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2ludGVncmF0b3JfYXAuYworKysgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW50ZWdyYXRvcl9hcC5jCkBAIC0zNzIsNyArMzcyLDYgQEAKIAkucmF0aW5nCQk9IDIwMCwKIAkucmVhZAkJPSB0aW1lcnNwX3JlYWQsCiAJLm1hc2sJCT0gQ0xPQ0tTT1VSQ0VfTUFTSygxNiksCi0JLnNoaWZ0CQk9IDE2LAogCS5mbGFncwkJPSBDTE9DS19TT1VSQ0VfSVNfQ09OVElOVU9VUywKIH07CiAKQEAgLTM5MCw4ICszODksNyBAQAogCXdyaXRlbChjdHJsLCBiYXNlICsgVElNRVJfQ1RSTCk7CiAJd3JpdGVsKDB4ZmZmZiwgYmFzZSArIFRJTUVSX0xPQUQpOwogCi0JY3MtPm11bHQgPSBjbG9ja3NvdXJjZV9raHoybXVsdChraHosIGNzLT5zaGlmdCk7Ci0JY2xvY2tzb3VyY2VfcmVnaXN0ZXIoY3MpOworCWNsb2Nrc291cmNlX3JlZ2lzdGVyX2toeihjcywga2h6KTsKIH0KIAogc3RhdGljIHZvaWQgX19pb21lbSAqIGNvbnN0IGNsa2V2dF9iYXNlID0gKHZvaWQgX19pb21lbSAqKVRJTUVSMV9WQV9CQVNFOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2ludGVncmF0b3JfY3AuYyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbnRlZ3JhdG9yX2NwLmMKaW5kZXggNjI1OGM5MC4uODVlNDhhNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2ludGVncmF0b3JfY3AuYworKysgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW50ZWdyYXRvcl9jcC5jCkBAIC0yMSw5ICsyMSw4IEBACiAjaW5jbHVkZSA8bGludXgvYW1iYS9tbWNpLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9nZnAuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGtkZXYuaD4KIAotI2luY2x1ZGUgPGFzbS9jbGtkZXYuaD4KLSNpbmNsdWRlIDxtYWNoL2Nsa2Rldi5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL3BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgpAQCAtNDEsNyArNDAsNyBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KIAotI2luY2x1ZGUgPHBsYXQvdGltZXItc3AuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvdGltZXItc3AuaD4KIAogI2luY2x1ZGUgImNvbW1vbi5oIgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlvcDEzeHgvaW5jbHVkZS9tYWNoL2lvLmggYi9hcmNoL2FybS9tYWNoLWlvcDEzeHgvaW5jbHVkZS9tYWNoL2lvLmgKaW5kZXggYTZlMGY5ZS4uZGZmYjIzNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pb3AxM3h4L2luY2x1ZGUvbWFjaC9pby5oCisrKyBiL2FyY2gvYXJtL21hY2gtaW9wMTN4eC9pbmNsdWRlL21hY2gvaW8uaApAQCAtMzUsNyArMzUsNyBAQAogZXh0ZXJuIHNpemVfdCBpb3AxM3h4X2F0dWVfbWVtX3NpemU7CiBleHRlcm4gc2l6ZV90IGlvcDEzeHhfYXR1eF9tZW1fc2l6ZTsKIAotI2RlZmluZSBfX2FyY2hfaW9yZW1hcChhLCBzLCBmKSBfX2lvcDEzeHhfaW9yZW1hcChhLCBzLCBmKQotI2RlZmluZSBfX2FyY2hfaW91bm1hcChhKQkgX19pb3AxM3h4X2lvdW5tYXAoYSkKKyNkZWZpbmUgX19hcmNoX2lvcmVtYXAJX19pb3AxM3h4X2lvcmVtYXAKKyNkZWZpbmUgX19hcmNoX2lvdW5tYXAJX19pb3AxM3h4X2lvdW5tYXAKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlvcDEzeHgvaW5jbHVkZS9tYWNoL21lbW9yeS5oIGIvYXJjaC9hcm0vbWFjaC1pb3AxM3h4L2luY2x1ZGUvbWFjaC9tZW1vcnkuaAppbmRleCA3NDE1ZTQzLi4zYWQ0NTUzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlvcDEzeHgvaW5jbHVkZS9tYWNoL21lbW9yeS5oCisrKyBiL2FyY2gvYXJtL21hY2gtaW9wMTN4eC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKQEAgLTU4LDEzICs1OCwxMyBAQAogCQlfX2RtYTsJCQkJCQkJXAogCX0pCiAKLSNkZWZpbmUgX19hcmNoX3BhZ2VfdG9fZG1hKGRldiwgcGFnZSkJCQkJCVwKKyNkZWZpbmUgX19hcmNoX3Bmbl90b19kbWEoZGV2LCBwZm4pCQkJCQlcCiAJKHsJCQkJCQkJCVwKIAkJLyogX19pc19sYnVzX3ZpcnQoKSBjYW4gbmV2ZXIgYmUgdHJ1ZSBmb3IgUkFNIHBhZ2VzICovCVwKLQkJKGRtYV9hZGRyX3QpcGFnZV90b19waHlzKHBhZ2UpOwkJCQlcCisJCShkbWFfYWRkcl90KV9fcGZuX3RvX3BoeXMocGZuKTsJCQkJXAogCX0pCiAKLSNkZWZpbmUgX19hcmNoX2RtYV90b19wYWdlKGRldiwgYWRkcikJcGh5c190b19wYWdlKGFkZHIpCisjZGVmaW5lIF9fYXJjaF9kbWFfdG9fcGZuKGRldiwgYWRkcikJX19waHlzX3RvX3BmbihhZGRyKQogCiAjZW5kaWYgLyogQ09ORklHX0FSQ0hfSU9QMTNYWCAqLwogI2VuZGlmIC8qICFBU1NFTUJMWSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pb3AzMngvaW5jbHVkZS9tYWNoL2lvLmggYi9hcmNoL2FybS9tYWNoLWlvcDMyeC9pbmNsdWRlL21hY2gvaW8uaAppbmRleCAzMzllNTg1Li4wNTljNzgzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlvcDMyeC9pbmNsdWRlL21hY2gvaW8uaAorKysgYi9hcmNoL2FybS9tYWNoLWlvcDMyeC9pbmNsdWRlL21hY2gvaW8uaApAQCAtMjEsNyArMjEsNyBAQAogI2RlZmluZSBfX2lvKHApCQkoKHZvaWQgX19pb21lbSAqKUlPUDNYWF9QQ0lfSU9fUEhZU19UT19WSVJUKHApKQogI2RlZmluZSBfX21lbV9wY2koYSkJCShhKQogCi0jZGVmaW5lIF9fYXJjaF9pb3JlbWFwKGEsIHMsIGYpIF9faW9wM3h4X2lvcmVtYXAoYSwgcywgZikKLSNkZWZpbmUgX19hcmNoX2lvdW5tYXAoYSkJIF9faW9wM3h4X2lvdW5tYXAoYSkKKyNkZWZpbmUgX19hcmNoX2lvcmVtYXAJX19pb3AzeHhfaW9yZW1hcAorI2RlZmluZSBfX2FyY2hfaW91bm1hcAlfX2lvcDN4eF9pb3VubWFwCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pb3AzM3gvaW5jbHVkZS9tYWNoL2lvLmggYi9hcmNoL2FybS9tYWNoLWlvcDMzeC9pbmNsdWRlL21hY2gvaW8uaAppbmRleCBlOTlhN2VkLi4zOWU4OTNlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlvcDMzeC9pbmNsdWRlL21hY2gvaW8uaAorKysgYi9hcmNoL2FybS9tYWNoLWlvcDMzeC9pbmNsdWRlL21hY2gvaW8uaApAQCAtMjEsNyArMjEsNyBAQAogI2RlZmluZSBfX2lvKHApCQkoKHZvaWQgX19pb21lbSAqKUlPUDNYWF9QQ0lfSU9fUEhZU19UT19WSVJUKHApKQogI2RlZmluZSBfX21lbV9wY2koYSkJCShhKQogCi0jZGVmaW5lIF9fYXJjaF9pb3JlbWFwKGEsIHMsIGYpIF9faW9wM3h4X2lvcmVtYXAoYSwgcywgZikKLSNkZWZpbmUgX19hcmNoX2lvdW5tYXAoYSkJIF9faW9wM3h4X2lvdW5tYXAoYSkKKyNkZWZpbmUgX19hcmNoX2lvcmVtYXAJX19pb3AzeHhfaW9yZW1hcAorI2RlZmluZSBfX2FyY2hfaW91bm1hcAlfX2lvcDN4eF9pb3VubWFwCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHAyM3h4L2luY2x1ZGUvbWFjaC9pby5oIGIvYXJjaC9hcm0vbWFjaC1peHAyM3h4L2luY2x1ZGUvbWFjaC9pby5oCmluZGV4IGZkOWVmOGUuLmExNzQ5ZDAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwMjN4eC9pbmNsdWRlL21hY2gvaW8uaAorKysgYi9hcmNoL2FybS9tYWNoLWl4cDIzeHgvaW5jbHVkZS9tYWNoL2lvLmgKQEAgLTQ1LDggKzQ1LDggQEAKIAlfX2lvdW5tYXAoYWRkcik7CiB9CiAKLSNkZWZpbmUgX19hcmNoX2lvcmVtYXAoYSxzLGYpCWl4cDIzeHhfaW9yZW1hcChhLHMsZikKLSNkZWZpbmUgX19hcmNoX2lvdW5tYXAoYSkJaXhwMjN4eF9pb3VubWFwKGEpCisjZGVmaW5lIF9fYXJjaF9pb3JlbWFwCWl4cDIzeHhfaW9yZW1hcAorI2RlZmluZSBfX2FyY2hfaW91bm1hcAlpeHAyM3h4X2lvdW5tYXAKIAogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2NvbW1vbi5jIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvY29tbW9uLmMKaW5kZXggMGJjZTA5Ny4uNGRiZmNiYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvY29tbW9uLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvY29tbW9uLmMKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9zY2hlZF9jbG9jay5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CkBAIC0zOTksNiArNDAwLDIzIEBACiB9CiAKIC8qCisgKiBzY2hlZF9jbG9jaygpCisgKi8KK3N0YXRpYyBERUZJTkVfQ0xPQ0tfREFUQShjZCk7CisKK3Vuc2lnbmVkIGxvbmcgbG9uZyBub3RyYWNlIHNjaGVkX2Nsb2NrKHZvaWQpCit7CisJdTMyIGN5YyA9ICpJWFA0WFhfT1NUUzsKKwlyZXR1cm4gY3ljX3RvX3NjaGVkX2Nsb2NrKCZjZCwgY3ljLCAodTMyKX4wKTsKK30KKworc3RhdGljIHZvaWQgbm90cmFjZSBpeHA0eHhfdXBkYXRlX3NjaGVkX2Nsb2NrKHZvaWQpCit7CisJdTMyIGN5YyA9ICpJWFA0WFhfT1NUUzsKKwl1cGRhdGVfc2NoZWRfY2xvY2soJmNkLCBjeWMsICh1MzIpfjApOworfQorCisvKgogICogY2xvY2tzb3VyY2UKICAqLwogc3RhdGljIGN5Y2xlX3QgaXhwNHh4X2dldF9jeWNsZXMoc3RydWN0IGNsb2Nrc291cmNlICpjcykKQEAgLTQxMSw3ICs0MjksNiBAQAogCS5yYXRpbmcJCT0gMjAwLAogCS5yZWFkCQk9IGl4cDR4eF9nZXRfY3ljbGVzLAogCS5tYXNrCQk9IENMT0NLU09VUkNFX01BU0soMzIpLAotCS5zaGlmdCAJCT0gMjAsCiAJLmZsYWdzCQk9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTLAogfTsKIApAQCAtNDE5LDIxICs0MzYsOSBAQAogRVhQT1JUX1NZTUJPTChpeHA0eHhfdGltZXJfZnJlcSk7CiBzdGF0aWMgdm9pZCBfX2luaXQgaXhwNHh4X2Nsb2Nrc291cmNlX2luaXQodm9pZCkKIHsKLQljbG9ja3NvdXJjZV9peHA0eHgubXVsdCA9Ci0JCWNsb2Nrc291cmNlX2h6Mm11bHQoaXhwNHh4X3RpbWVyX2ZyZXEsCi0JCQkJICAgIGNsb2Nrc291cmNlX2l4cDR4eC5zaGlmdCk7Ci0JY2xvY2tzb3VyY2VfcmVnaXN0ZXIoJmNsb2Nrc291cmNlX2l4cDR4eCk7Ci19CisJaW5pdF9zY2hlZF9jbG9jaygmY2QsIGl4cDR4eF91cGRhdGVfc2NoZWRfY2xvY2ssIDMyLCBpeHA0eHhfdGltZXJfZnJlcSk7CiAKLS8qCi0gKiBzY2hlZF9jbG9jaygpCi0gKi8KLXVuc2lnbmVkIGxvbmcgbG9uZyBzY2hlZF9jbG9jayh2b2lkKQotewotCWN5Y2xlX3QgY3ljID0gaXhwNHh4X2dldF9jeWNsZXMoTlVMTCk7Ci0Jc3RydWN0IGNsb2Nrc291cmNlICpjcyA9ICZjbG9ja3NvdXJjZV9peHA0eHg7Ci0KLQlyZXR1cm4gY2xvY2tzb3VyY2VfY3ljMm5zKGN5YywgY3MtPm11bHQsIGNzLT5zaGlmdCk7CisJY2xvY2tzb3VyY2VfcmVnaXN0ZXJfaHooJmNsb2Nrc291cmNlX2l4cDR4eCwgaXhwNHh4X3RpbWVyX2ZyZXEpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvaW5jbHVkZS9tYWNoL2lvLmggYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9pbmNsdWRlL21hY2gvaW8uaAppbmRleCBkZTI3NGExLi41N2I1NDEwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9pbmNsdWRlL21hY2gvaW8uaAorKysgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9pbmNsdWRlL21hY2gvaW8uaApAQCAtNzQsOCArNzQsOCBAQAogCQlfX2lvdW5tYXAoYWRkcik7CiB9CiAKLSNkZWZpbmUgX19hcmNoX2lvcmVtYXAoYSwgcywgZikJCV9faW5kaXJlY3RfaW9yZW1hcChhLCBzLCBmKQotI2RlZmluZSBfX2FyY2hfaW91bm1hcChhKQkJX19pbmRpcmVjdF9pb3VubWFwKGEpCisjZGVmaW5lIF9fYXJjaF9pb3JlbWFwCQkJX19pbmRpcmVjdF9pb3JlbWFwCisjZGVmaW5lIF9fYXJjaF9pb3VubWFwCQkJX19pbmRpcmVjdF9pb3VubWFwCiAKICNkZWZpbmUgd3JpdGViKHYsIHApCQkJX19pbmRpcmVjdF93cml0ZWIodiwgcCkKICNkZWZpbmUgd3JpdGV3KHYsIHApCQkJX19pbmRpcmVjdF93cml0ZXcodiwgcCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvS2NvbmZpZwppbmRleCAzNDEwNjMzLi43ZmM2MDNiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9LY29uZmlnCkBAIC00NSwxOCArNDUsMTggQEAKIAkgIE1hcnZlbGwgR3VydVBsdWcgUmVmZXJlbmNlIEJvYXJkLgogCiBjb25maWcgTUFDSF9UUzIxOQotCWJvb2wgIlFOQVAgVFMtMTEwLCBUUy0xMTksIFRTLTIxMCwgVFMtMjE5IGFuZCBUUy0yMTlQIFR1cmJvIE5BUyIKKwlib29sICJRTkFQIFRTLTExMCwgVFMtMTE5LCBUUy0xMTlQKywgVFMtMjEwLCBUUy0yMTksIFRTLTIxOVAgYW5kIFRTLTIxOVArIFR1cmJvIE5BUyIKIAloZWxwCiAJICBTYXkgJ1knIGhlcmUgaWYgeW91IHdhbnQgeW91ciBrZXJuZWwgdG8gc3VwcG9ydCB0aGUKLQkgIFFOQVAgVFMtMTEwLCBUUy0xMTksIFRTLTIxMCwgVFMtMjE5IGFuZCBUUy0yMTlQIFR1cmJvIE5BUwotCSAgZGV2aWNlcy4KKwkgIFFOQVAgVFMtMTEwLCBUUy0xMTksIFRTLTExOVArLCBUUy0yMTAsIFRTLTIxOSwgVFMtMjE5UCBhbmQKKwkgIFRTLTIxOVArIFR1cmJvIE5BUyBkZXZpY2VzLgogCiBjb25maWcgTUFDSF9UUzQxWAotCWJvb2wgIlFOQVAgVFMtNDEwLCBUUy00MTBVLCBUUy00MTlQIGFuZCBUUy00MTlVIFR1cmJvIE5BUyIKKwlib29sICJRTkFQIFRTLTQxMCwgVFMtNDEwVSwgVFMtNDE5UCwgVFMtNDE5UCsgYW5kIFRTLTQxOVUgVHVyYm8gTkFTIgogCWhlbHAKIAkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBzdXBwb3J0IHRoZQotCSAgUU5BUCBUUy00MTAsIFRTLTQxMFUsIFRTLTQxOVAgYW5kIFRTLTQxOVUgVHVyYm8gTkFTCi0JICBkZXZpY2VzLgorCSAgUU5BUCBUUy00MTAsIFRTLTQxMFUsIFRTLTQxOVAsIFRTLTQxOVArIGFuZCBUUy00MTlVIFR1cmJvCisJICBOQVMgZGV2aWNlcy4KIAogY29uZmlnIE1BQ0hfRE9DS1NUQVIKIAlib29sICJTZWFnYXRlIEZyZWVBZ2VudCBEb2NrU3RhciIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvaW5jbHVkZS9tYWNoL2lvLmggYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2luY2x1ZGUvbWFjaC9pby5oCmluZGV4IDQ0ZThiZTAuLjFhYWRkYzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvaW5jbHVkZS9tYWNoL2lvLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9pbmNsdWRlL21hY2gvaW8uaApAQCAtNDIsOCArNDIsOCBAQAogCQlfX2lvdW5tYXAoYWRkcik7CiB9CiAKLSNkZWZpbmUgX19hcmNoX2lvcmVtYXAocCwgcywgbSkJX19hcmNoX2lvcmVtYXAocCwgcywgbSkKLSNkZWZpbmUgX19hcmNoX2lvdW5tYXAoYSkJX19hcmNoX2lvdW5tYXAoYSkKKyNkZWZpbmUgX19hcmNoX2lvcmVtYXAJCV9fYXJjaF9pb3JlbWFwCisjZGVmaW5lIF9fYXJjaF9pb3VubWFwCQlfX2FyY2hfaW91bm1hcAogI2RlZmluZSBfX2lvKGEpCQkJX19pbyhhKQogI2RlZmluZSBfX21lbV9wY2koYSkJCShhKQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL3RzMjE5LXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL3RzMjE5LXNldHVwLmMKaW5kZXggNjcxMGJkNy4uZGM5OTljNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC90czIxOS1zZXR1cC5jCisrKyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvdHMyMTktc2V0dXAuYwpAQCAtODAsMTUgKzgwLDE5IEBACiAJTVBQMTFfVUFSVDBfUlhELAogCU1QUDEzX1VBUlQxX1RYRCwJLyogUElDIGNvbnRyb2xsZXIgKi8KIAlNUFAxNF9VQVJUMV9SWEQsCS8qIFBJQyBjb250cm9sbGVyICovCi0JTVBQMTVfR1BJTywJCS8qIFVTQiBDb3B5IGJ1dHRvbiAqLwotCU1QUDE2X0dQSU8sCQkvKiBSZXNldCBidXR0b24gKi8KKwlNUFAxNV9HUElPLAkJLyogVVNCIENvcHkgYnV0dG9uIChvbiBkZXZpY2VzIHdpdGggODhGNjI4MSkgKi8KKwlNUFAxNl9HUElPLAkJLyogUmVzZXQgYnV0dG9uIChvbiBkZXZpY2VzIHdpdGggODhGNjI4MSkgKi8KIAlNUFAzNl9HUElPLAkJLyogUkFNOiAwOiAyNTYgTUIsIDE6IDUxMiBNQiAqLworCU1QUDM3X0dQSU8sCQkvKiBSZXNldCBidXR0b24gKG9uIGRldmljZXMgd2l0aCA4OEY2MjgyKSAqLworCU1QUDQzX0dQSU8sCQkvKiBVU0IgQ29weSBidXR0b24gKG9uIGRldmljZXMgd2l0aCA4OEY2MjgyKSAqLwogCU1QUDQ0X0dQSU8sCQkvKiBCb2FyZCBJRDogMDogVFMtMTF4LCAxOiBUUy0yMXggKi8KIAkwCiB9OwogCiBzdGF0aWMgdm9pZCBfX2luaXQgcW5hcF90czIxOV9pbml0KHZvaWQpCiB7CisJdTMyIGRldiwgcmV2OworCiAJLyoKIAkgKiBCYXNpYyBzZXR1cC4gTmVlZHMgdG8gYmUgY2FsbGVkIGVhcmx5LgogCSAqLwpAQCAtMTAwLDYgKzEwNCwxNCBAQAogCXFuYXBfdHN4MXhfcmVnaXN0ZXJfZmxhc2goKTsKIAlraXJrd29vZF9pMmNfaW5pdCgpOwogCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsICZxbmFwX3RzMjE5X2kyY19ydGMsIDEpOworCisJa2lya3dvb2RfcGNpZV9pZCgmZGV2LCAmcmV2KTsKKwlpZiAoZGV2ID09IE1WODhGNjI4Ml9ERVZfSUQpIHsKKwkJcW5hcF90czIxOV9idXR0b25zWzBdLmdwaW8gPSA0MzsgLyogVVNCIENvcHkgYnV0dG9uICovCisJCXFuYXBfdHMyMTlfYnV0dG9uc1sxXS5ncGlvID0gMzc7IC8qIFJlc2V0IGJ1dHRvbiAqLworCQlxbmFwX3RzMjE5X2dlMDBfZGF0YS5waHlfYWRkciA9IE1WNjQzWFhfRVRIX1BIWV9BRERSKDApOworCX0KKwogCWtpcmt3b29kX2dlMDBfaW5pdCgmcW5hcF90czIxOV9nZTAwX2RhdGEpOwogCWtpcmt3b29kX3NhdGFfaW5pdCgmcW5hcF90czIxOV9zYXRhX2RhdGEpOwogCWtpcmt3b29kX2VoY2lfaW5pdCgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC90czQxeC1zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC90czQxeC1zZXR1cC5jCmluZGV4IDM1ODdhMjguLjlhNDQwMjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvdHM0MXgtc2V0dXAuYworKysgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL3RzNDF4LXNldHVwLmMKQEAgLTExOSw2ICsxMTksOCBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgcW5hcF90czQxeF9pbml0KHZvaWQpCiB7CisJdTMyIGRldiwgcmV2OworCiAJLyoKIAkgKiBCYXNpYyBzZXR1cC4gTmVlZHMgdG8gYmUgY2FsbGVkIGVhcmx5LgogCSAqLwpAQCAtMTMwLDggKzEzMiwxNSBAQAogCXFuYXBfdHN4MXhfcmVnaXN0ZXJfZmxhc2goKTsKIAlraXJrd29vZF9pMmNfaW5pdCgpOwogCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsICZxbmFwX3RzNDF4X2kyY19ydGMsIDEpOworCisJa2lya3dvb2RfcGNpZV9pZCgmZGV2LCAmcmV2KTsKKwlpZiAoZGV2ID09IE1WODhGNjI4Ml9ERVZfSUQpIHsKKwkJcW5hcF90czQxeF9nZTAwX2RhdGEucGh5X2FkZHIgPSBNVjY0M1hYX0VUSF9QSFlfQUREUigwKTsKKwkJcW5hcF90czQxeF9nZTAxX2RhdGEucGh5X2FkZHIgPSBNVjY0M1hYX0VUSF9QSFlfQUREUigxKTsKKwl9CiAJa2lya3dvb2RfZ2UwMF9pbml0KCZxbmFwX3RzNDF4X2dlMDBfZGF0YSk7CiAJa2lya3dvb2RfZ2UwMV9pbml0KCZxbmFwX3RzNDF4X2dlMDFfZGF0YSk7CisKIAlraXJrd29vZF9zYXRhX2luaXQoJnFuYXBfdHM0MXhfc2F0YV9kYXRhKTsKIAlraXJrd29vZF9laGNpX2luaXQoKTsKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnFuYXBfdHM0MXhfYnV0dG9uX2RldmljZSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtzODY5NS9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1rczg2OTUvS2NvbmZpZwppbmRleCBmZTBjODJlLi5mNWMzOWE4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtzODY5NS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gta3M4Njk1L0tjb25maWcKQEAgLTQsNiArNCw3IEBACiAKIGNvbmZpZyBNQUNIX0tTODY5NQogCWJvb2wgIktTODY5NSBkZXZlbG9wbWVudCBib2FyZCIKKwlzZWxlY3QgTUlHSFRfSEFWRV9QQ0kKIAloZWxwCiAJICBTYXkgJ1knIGhlcmUgaWYgeW91IHdhbnQgeW91ciBrZXJuZWwgdG8gcnVuIG9uIHRoZSBvcmlnaW5hbAogCSAgS2VuZGluLU1pY3JlbCBLUzg2OTUgZGV2ZWxvcG1lbnQgYm9hcmQuCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtzODY5NS9pbmNsdWRlL21hY2gvbWVtb3J5LmggYi9hcmNoL2FybS9tYWNoLWtzODY5NS9pbmNsdWRlL21hY2gvbWVtb3J5LmgKaW5kZXggZmZhMTlhYS4uYmFjZTlhNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1rczg2OTUvaW5jbHVkZS9tYWNoL21lbW9yeS5oCisrKyBiL2FyY2gvYXJtL21hY2gta3M4Njk1L2luY2x1ZGUvbWFjaC9tZW1vcnkuaApAQCAtMzUsMTcgKzM1LDE3IEBACiAJCQkJCV9fcGh5c190b192aXJ0KHgpIDogX19idXNfdG9fdmlydCh4KSk7IH0pCiAjZGVmaW5lIF9fYXJjaF92aXJ0X3RvX2RtYShkZXYsIHgpCSh7IGlzX2xidXNfZGV2aWNlKGRldikgPyBcCiAJCQkJCShkbWFfYWRkcl90KV9fdmlydF90b19waHlzKHgpIDogKGRtYV9hZGRyX3QpX192aXJ0X3RvX2J1cyh4KTsgfSkKLSNkZWZpbmUgX19hcmNoX3BhZ2VfdG9fZG1hKGRldiwgeCkJXAotCSh7IGRtYV9hZGRyX3QgX19kbWEgPSBwYWdlX3RvX3BoeXMocGFnZSk7IFwKKyNkZWZpbmUgX19hcmNoX3Bmbl90b19kbWEoZGV2LCBwZm4pCVwKKwkoeyBkbWFfYWRkcl90IF9fZG1hID0gX19wZm5fdG9fcGh5cyhwZm4pOyBcCiAJICAgaWYgKCFpc19sYnVzX2RldmljZShkZXYpKSBcCiAJCV9fZG1hID0gX19kbWEgLSBQSFlTX09GRlNFVCArIEtTODY5NV9QQ0lNRU1fUEE7IFwKIAkgICBfX2RtYTsgfSkKIAotI2RlZmluZSBfX2FyY2hfZG1hX3RvX3BhZ2UoZGV2LCB4KQlcCisjZGVmaW5lIF9fYXJjaF9kbWFfdG9fcGZuKGRldiwgeCkJXAogCSh7IGRtYV9hZGRyX3QgX19kbWEgPSB4OwkJCQlcCiAJICAgaWYgKCFpc19sYnVzX2RldmljZShkZXYpKQkJCQlcCiAJCV9fZG1hICs9IFBIWVNfT0ZGU0VUIC0gS1M4Njk1X1BDSU1FTV9QQTsJXAotCSAgIHBoeXNfdG9fcGFnZShfX2RtYSk7CQkJCQlcCisJICAgX19waHlzX3RvX3BmbihfX2RtYSk7CQkJCVwKIAl9KQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbHBjMzJ4eC9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1scGMzMnh4L2Nsb2NrLmMKaW5kZXggMzJkNjM3OS4uZGEwZTY0OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1scGMzMnh4L2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1scGMzMnh4L2Nsb2NrLmMKQEAgLTkwLDEwICs5MCw5IEBACiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KICNpbmNsdWRlIDxsaW51eC9hbWJhL2NsY2QuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGtkZXYuaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vY2xrZGV2Lmg+Ci0jaW5jbHVkZSA8bWFjaC9jbGtkZXYuaD4KICNpbmNsdWRlIDxtYWNoL3BsYXRmb3JtLmg+CiAjaW5jbHVkZSAiY2xvY2suaCIKICNpbmNsdWRlICJjb21tb24uaCIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbHBjMzJ4eC90aW1lci5jIGIvYXJjaC9hcm0vbWFjaC1scGMzMnh4L3RpbWVyLmMKaW5kZXggNjMwZGQ0YS4uNjE2MmFjMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1scGMzMnh4L3RpbWVyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1scGMzMnh4L3RpbWVyLmMKQEAgLTM4LDcgKzM4LDYgQEAKIAogc3RhdGljIHN0cnVjdCBjbG9ja3NvdXJjZSBscGMzMnh4X2Nsa3NyYyA9IHsKIAkubmFtZQk9ICJscGMzMnh4X2Nsa3NyYyIsCi0JLnNoaWZ0CT0gMjQsCiAJLnJhdGluZwk9IDMwMCwKIAkucmVhZAk9IGxwYzMyeHhfY2xrc3JjX3JlYWQsCiAJLm1hc2sJPSBDTE9DS1NPVVJDRV9NQVNLKDMyKSwKQEAgLTE3MSw5ICsxNzAsNyBAQAogCV9fcmF3X3dyaXRlbCgwLCBMQ1AzMlhYX1RJTUVSX01DUihMUEMzMlhYX1RJTUVSMV9CQVNFKSk7CiAJX19yYXdfd3JpdGVsKExDUDMyWFhfVElNRVJfQ05UUl9UQ1JfRU4sCiAJCUxDUDMyWFhfVElNRVJfVENSKExQQzMyWFhfVElNRVIxX0JBU0UpKTsKLQlscGMzMnh4X2Nsa3NyYy5tdWx0ID0gY2xvY2tzb3VyY2VfaHoybXVsdChjbGtyYXRlLAotCQlscGMzMnh4X2Nsa3NyYy5zaGlmdCk7Ci0JY2xvY2tzb3VyY2VfcmVnaXN0ZXIoJmxwYzMyeHhfY2xrc3JjKTsKKwljbG9ja3NvdXJjZV9yZWdpc3Rlcl9oeigmbHBjMzJ4eF9jbGtzcmMsIGNsa3JhdGUpOwogfQogCiBzdHJ1Y3Qgc3lzX3RpbWVyIGxwYzMyeHhfdGltZXIgPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1tbXAvS2NvbmZpZwppbmRleCAwNzExZDNiLi42Nzc5M2E2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW1tcC9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL0tjb25maWcKQEAgLTM3LDI1ICszNywzOCBAQAogCSAgU2F5ICdZJyBoZXJlIGlmIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhlIE1hcnZlbGwgUFhBOTEwLWJhc2VkCiAJICBUVENfREtCIERldmVsb3BtZW50IEJvYXJkLgogCitjb25maWcgTUFDSF9CUk9XTlNUT05FCisJYm9vbCAiTWFydmVsbCdzIEJyb3duc3RvbmUgRGV2ZWxvcG1lbnQgUGxhdGZvcm0iCisJZGVwZW5kcyBvbiAhQ1BVX01PSEFXSworCXNlbGVjdCBDUFVfTU1QMgorCWhlbHAKKwkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB0byBzdXBwb3J0IHRoZSBNYXJ2ZWxsIE1NUDItYmFzZWQKKwkgIEJyb3duIERldmVsb3BtZW50IFBsYXRmb3JtLgorCSAgTU1QMi1iYXNlZCBib2FyZCBjYW4ndCBiZSBjby1leGlzdGVkIHdpdGggUFhBMTY4LWJhc2VkICYKKwkgIFBYQTkxMC1iYXNlZCBkZXZlbG9wbWVudCBib2FyZC4gU2luY2UgTU1QMiBpcyBjb21wYXRpYmxlIHRvCisJICBBUk12NyBhcmNoaXRlY3R1cmUuCisKIGNvbmZpZyBNQUNIX0ZMSU5UCiAJYm9vbCAiTWFydmVsbCdzIEZsaW50IERldmVsb3BtZW50IFBsYXRmb3JtIgorCWRlcGVuZHMgb24gIUNQVV9NT0hBV0sKIAlzZWxlY3QgQ1BVX01NUDIKIAloZWxwCiAJICBTYXkgJ1knIGhlcmUgaWYgeW91IHdhbnQgdG8gc3VwcG9ydCB0aGUgTWFydmVsbCBNTVAyLWJhc2VkCiAJICBGbGludCBEZXZlbG9wbWVudCBQbGF0Zm9ybS4KIAkgIE1NUDItYmFzZWQgYm9hcmQgY2FuJ3QgYmUgY28tZXhpc3RlZCB3aXRoIFBYQTE2OC1iYXNlZCAmCiAJICBQWEE5MTAtYmFzZWQgZGV2ZWxvcG1lbnQgYm9hcmQuIFNpbmNlIE1NUDIgaXMgY29tcGF0aWJsZSB0bwotCSAgQVJNdjYgYXJjaGl0ZWN0dXJlLgorCSAgQVJNdjcgYXJjaGl0ZWN0dXJlLgogCiBjb25maWcgTUFDSF9NQVJWRUxMX0pBU1BFUgogCWJvb2wgIk1hcnZlbGwncyBKYXNwZXIgRGV2ZWxvcG1lbnQgUGxhdGZvcm0iCisJZGVwZW5kcyBvbiAhQ1BVX01PSEFXSwogCXNlbGVjdCBDUFVfTU1QMgogCWhlbHAKIAkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB0byBzdXBwb3J0IHRoZSBNYXJ2ZWxsIE1NUDItYmFzZQogCSAgSmFzcGVyIERldmVsb3BtZW50IFBsYXRmb3JtLgogCSAgTU1QMi1iYXNlZCBib2FyZCBjYW4ndCBiZSBjby1leGlzdGVkIHdpdGggUFhBMTY4LWJhc2VkICYKIAkgIFBYQTkxMC1iYXNlZCBkZXZlbG9wbWVudCBib2FyZC4gU2luY2UgTU1QMiBpcyBjb21wYXRpYmxlIHRvCi0JICBBUk12NiBhcmNoaXRlY3R1cmUuCisJICBBUk12NyBhcmNoaXRlY3R1cmUuCiAKIGNvbmZpZyBNQUNIX1RFVE9OX0JHQQogCWJvb2wgIk1hcnZlbGwncyBQWEExNjggVGV0b24gQkdBIERldmVsb3BtZW50IEJvYXJkIgpAQCAtODAsOCArOTMsNyBAQAogCiBjb25maWcgQ1BVX01NUDIKIAlib29sCi0Jc2VsZWN0IENQVV9WNgotCXNlbGVjdCBDUFVfMzJ2NksKKwlzZWxlY3QgQ1BVX1BKNAogCWhlbHAKLQkgIFNlbGVjdCBjb2RlIHNwZWNpZmljIHRvIE1NUDIuIE1NUDIgaXMgQVJNdjYgY29tcGF0aWJsZS4KKwkgIFNlbGVjdCBjb2RlIHNwZWNpZmljIHRvIE1NUDIuIE1NUDIgaXMgQVJNdjcgY29tcGF0aWJsZS4KIGVuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtbW1wL01ha2VmaWxlCmluZGV4IDc1MWNkYmYuLjVjNjgzODIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbW1wL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL01ha2VmaWxlCkBAIC0xNSw2ICsxNSw3IEBACiBvYmotJChDT05GSUdfTUFDSF9BVkVOR0VSU19MSVRFKSs9IGF2ZW5nZXJzX2xpdGUubwogb2JqLSQoQ09ORklHX01BQ0hfVEFWT1JFVkIpCSs9IHRhdm9yZXZiLm8KIG9iai0kKENPTkZJR19NQUNIX1RUQ19ES0IpCSs9IHR0Y19ka2Iubworb2JqLSQoQ09ORklHX01BQ0hfQlJPV05TVE9ORSkJKz0gYnJvd25zdG9uZS5vCiBvYmotJChDT05GSUdfTUFDSF9GTElOVCkJKz0gZmxpbnQubwogb2JqLSQoQ09ORklHX01BQ0hfTUFSVkVMTF9KQVNQRVIpICs9IGphc3Blci5vCiBvYmotJChDT05GSUdfTUFDSF9URVRPTl9CR0EpCSs9IHRldG9uX2JnYS5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC9icm93bnN0b25lLmMgYi9hcmNoL2FybS9tYWNoLW1tcC9icm93bnN0b25lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JiNzhmZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL2Jyb3duc3RvbmUuYwpAQCAtMCwwICsxLDIwNCBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tYWNoLW1tcC9icm93bnN0b25lLmMKKyAqCisgKiAgU3VwcG9ydCBmb3IgdGhlIE1hcnZlbGwgQnJvd25zdG9uZSBEZXZlbG9wbWVudCBQbGF0Zm9ybS4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogIHB1Ymxpc2hoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL21heDg2NDkuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvZml4ZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvbWF4ODkyNS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8bWFjaC9hZGRyLW1hcC5oPgorI2luY2x1ZGUgPG1hY2gvbWZwLW1tcDIuaD4KKyNpbmNsdWRlIDxtYWNoL21tcDIuaD4KKyNpbmNsdWRlIDxtYWNoL2lycXMuaD4KKworI2luY2x1ZGUgImNvbW1vbi5oIgorCisjZGVmaW5lIEJST1dOU1RPTkVfTlJfSVJRUwkoSVJRX0JPQVJEX1NUQVJUICsgNDApCisKKyNkZWZpbmUgR1BJT181Vl9FTkFCTEUJCSg4OSkKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgYnJvd25zdG9uZV9waW5fY29uZmlnW10gX19pbml0ZGF0YSA9IHsKKwkvKiBVQVJUMSAqLworCUdQSU8yOV9VQVJUMV9SWEQsCisJR1BJTzMwX1VBUlQxX1RYRCwKKworCS8qIFVBUlQzICovCisJR1BJTzUxX1VBUlQzX1JYRCwKKwlHUElPNTJfVUFSVDNfVFhELAorCisJLyogREZJICovCisJR1BJTzE2OF9ERklfRDAsCisJR1BJTzE2N19ERklfRDEsCisJR1BJTzE2Nl9ERklfRDIsCisJR1BJTzE2NV9ERklfRDMsCisJR1BJTzEwN19ERklfRDQsCisJR1BJTzEwNl9ERklfRDUsCisJR1BJTzEwNV9ERklfRDYsCisJR1BJTzEwNF9ERklfRDcsCisJR1BJTzExMV9ERklfRDgsCisJR1BJTzE2NF9ERklfRDksCisJR1BJTzE2M19ERklfRDEwLAorCUdQSU8xNjJfREZJX0QxMSwKKwlHUElPMTYxX0RGSV9EMTIsCisJR1BJTzExMF9ERklfRDEzLAorCUdQSU8xMDlfREZJX0QxNCwKKwlHUElPMTA4X0RGSV9EMTUsCisJR1BJTzE0M19ORF9uQ1MwLAorCUdQSU8xNDRfTkRfbkNTMSwKKwlHUElPMTQ3X05EX25XRSwKKwlHUElPMTQ4X05EX25SRSwKKwlHUElPMTUwX05EX0FMRSwKKwlHUElPMTQ5X05EX0NMRSwKKwlHUElPMTEyX05EX1JEWTAsCisJR1BJTzE2MF9ORF9SRFkxLAorCisJLyogUE1JQyAqLworCVBNSUNfUE1JQ19JTlQgfCBNRlBfTFBNX0VER0VfRkFMTCwKKworCS8qIE1NQzAgKi8KKwlHUElPMTMxX01NQzFfREFUMyB8IE1GUF9QVUxMX0hJR0gsCisJR1BJTzEzMl9NTUMxX0RBVDIgfCBNRlBfUFVMTF9ISUdILAorCUdQSU8xMzNfTU1DMV9EQVQxIHwgTUZQX1BVTExfSElHSCwKKwlHUElPMTM0X01NQzFfREFUMCB8IE1GUF9QVUxMX0hJR0gsCisJR1BJTzEzNl9NTUMxX0NNRCB8IE1GUF9QVUxMX0hJR0gsCisJR1BJTzEzOV9NTUMxX0NMSywKKwlHUElPMTQwX01NQzFfQ0QgfCBNRlBfUFVMTF9MT1csCisJR1BJTzE0MV9NTUMxX1dQIHwgTUZQX1BVTExfTE9XLAorCisJLyogTU1DMSAqLworCUdQSU8zN19NTUMyX0RBVDMgfCBNRlBfUFVMTF9ISUdILAorCUdQSU8zOF9NTUMyX0RBVDIgfCBNRlBfUFVMTF9ISUdILAorCUdQSU8zOV9NTUMyX0RBVDEgfCBNRlBfUFVMTF9ISUdILAorCUdQSU80MF9NTUMyX0RBVDAgfCBNRlBfUFVMTF9ISUdILAorCUdQSU80MV9NTUMyX0NNRCB8IE1GUF9QVUxMX0hJR0gsCisJR1BJTzQyX01NQzJfQ0xLLAorCisJLyogTU1DMiAqLworCUdQSU8xNjVfTU1DM19EQVQ3IHwgTUZQX1BVTExfSElHSCwKKwlHUElPMTYyX01NQzNfREFUNiB8IE1GUF9QVUxMX0hJR0gsCisJR1BJTzE2Nl9NTUMzX0RBVDUgfCBNRlBfUFVMTF9ISUdILAorCUdQSU8xNjNfTU1DM19EQVQ0IHwgTUZQX1BVTExfSElHSCwKKwlHUElPMTY3X01NQzNfREFUMyB8IE1GUF9QVUxMX0hJR0gsCisJR1BJTzE2NF9NTUMzX0RBVDIgfCBNRlBfUFVMTF9ISUdILAorCUdQSU8xNjhfTU1DM19EQVQxIHwgTUZQX1BVTExfSElHSCwKKwlHUElPMTExX01NQzNfREFUMCB8IE1GUF9QVUxMX0hJR0gsCisJR1BJTzExMl9NTUMzX0NNRCB8IE1GUF9QVUxMX0hJR0gsCisJR1BJTzE1MV9NTUMzX0NMSywKKworCS8qIDVWIHJlZ3VsYXRvciAqLworCUdQSU84OV9HUElPLAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IG1heDg2NDlfc3VwcGx5W10gPSB7CisJUkVHVUxBVE9SX1NVUFBMWSgidmNjX2NvcmUiLCBOVUxMKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBtYXg4NjQ5X2luaXRfZGF0YSA9IHsKKwkuY29uc3RyYWludHMJPSB7CisJCS5uYW1lCQk9ICJ2Y2NfY29yZSByYW5nZSIsCisJCS5taW5fdVYJCT0gMTE1MDAwMCwKKwkJLm1heF91VgkJPSAxMjgwMDAwLAorCQkuYWx3YXlzX29uCT0gMSwKKwkJLmJvb3Rfb24JPSAxLAorCQkudmFsaWRfb3BzX21hc2sJPSBSRUdVTEFUT1JfQ0hBTkdFX1ZPTFRBR0UsCisJfSwKKwkubnVtX2NvbnN1bWVyX3N1cHBsaWVzCT0gMSwKKwkuY29uc3VtZXJfc3VwcGxpZXMJPSAmbWF4ODY0OV9zdXBwbHlbMF0sCit9OworCitzdGF0aWMgc3RydWN0IG1heDg2NDlfcGxhdGZvcm1fZGF0YSBicm93bnN0b25lX21heDg2NDlfaW5mbyA9IHsKKwkubW9kZQkJPSAyLAkvKiBWSUQxID0gMSwgVklEMCA9IDAgKi8KKwkuZXh0Y2xrCQk9IDAsCisJLnJhbXBfdGltaW5nCT0gTUFYODY0OV9SQU1QXzMyTVYsCisJLnJlZ3VsYXRvcgk9ICZtYXg4NjQ5X2luaXRfZGF0YSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBicm93bnN0b25lX3ZfNXZwX3N1cHBsaWVzW10gPSB7CisJUkVHVUxBVE9SX1NVUFBMWSgidl81dnAiLCBOVUxMKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBicm93bnN0b25lX3ZfNXZwX2RhdGEgPSB7CisJLmNvbnN0cmFpbnRzCT0geworCQkudmFsaWRfb3BzX21hc2sJCT0gUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisJfSwKKwkubnVtX2NvbnN1bWVyX3N1cHBsaWVzCT0gQVJSQVlfU0laRShicm93bnN0b25lX3ZfNXZwX3N1cHBsaWVzKSwKKwkuY29uc3VtZXJfc3VwcGxpZXMJPSBicm93bnN0b25lX3ZfNXZwX3N1cHBsaWVzLAorfTsKKworc3RhdGljIHN0cnVjdCBmaXhlZF92b2x0YWdlX2NvbmZpZyBicm93bnN0b25lX3ZfNXZwID0geworCS5zdXBwbHlfbmFtZQkJPSAidl81dnAiLAorCS5taWNyb3ZvbHRzCQk9IDUwMDAwMDAsCisJLmdwaW8JCQk9IEdQSU9fNVZfRU5BQkxFLAorCS5lbmFibGVfaGlnaAkJPSAxLAorCS5lbmFibGVkX2F0X2Jvb3QJPSAxLAorCS5pbml0X2RhdGEJCT0gJmJyb3duc3RvbmVfdl81dnBfZGF0YSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJyb3duc3RvbmVfdl81dnBfZGV2aWNlID0geworCS5uYW1lCQk9ICJyZWctZml4ZWQtdm9sdGFnZSIsCisJLmlkCQk9IDEsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmYnJvd25zdG9uZV92XzV2cCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBtYXg4OTI1X3BsYXRmb3JtX2RhdGEgYnJvd25zdG9uZV9tYXg4OTI1X2luZm8gPSB7CisJLmlycV9iYXNlCQk9IElSUV9CT0FSRF9TVEFSVCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gYnJvd25zdG9uZV90d3NpMV9pbmZvW10gPSB7CisJWzBdID0geworCQkudHlwZQkJPSAibWF4ODY0OSIsCisJCS5hZGRyCQk9IDB4NjAsCisJCS5wbGF0Zm9ybV9kYXRhCT0gJmJyb3duc3RvbmVfbWF4ODY0OV9pbmZvLAorCX0sCisJWzFdID0geworCQkudHlwZQkJPSAibWF4ODkyNSIsCisJCS5hZGRyCQk9IDB4M2MsCisJCS5pcnEJCT0gSVJRX01NUDJfUE1JQywKKwkJLnBsYXRmb3JtX2RhdGEJPSAmYnJvd25zdG9uZV9tYXg4OTI1X2luZm8sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc2RoY2lfcHhhX3BsYXRkYXRhIG1tcDJfc2RoX3BsYXRkYXRhX21tYzAgPSB7CisJLm1heF9zcGVlZAk9IDI1MDAwMDAwLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGJyb3duc3RvbmVfaW5pdCh2b2lkKQoreworCW1mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUoYnJvd25zdG9uZV9waW5fY29uZmlnKSk7CisKKwkvKiBvbi1jaGlwIGRldmljZXMgKi8KKwltbXAyX2FkZF91YXJ0KDEpOworCW1tcDJfYWRkX3VhcnQoMyk7CisJbW1wMl9hZGRfdHdzaSgxLCBOVUxMLCBBUlJBWV9BTkRfU0laRShicm93bnN0b25lX3R3c2kxX2luZm8pKTsKKwltbXAyX2FkZF9zZGhvc3QoMCwgJm1tcDJfc2RoX3BsYXRkYXRhX21tYzApOyAvKiBTRC9NTUMgKi8KKworCS8qIGVuYWJsZSA1diByZWd1bGF0b3IgKi8KKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmJyb3duc3RvbmVfdl81dnBfZGV2aWNlKTsKK30KKworTUFDSElORV9TVEFSVChCUk9XTlNUT05FLCAiQnJvd25zdG9uZSBEZXZlbG9wbWVudCBQbGF0Zm9ybSIpCisJLyogTWFpbnRhaW5lcjogSGFvamlhbiBaaHVhbmcgPGhhb2ppYW4uemh1YW5nQG1hcnZlbGwuY29tPiAqLworCS5tYXBfaW8JCT0gbW1wX21hcF9pbywKKwkubnJfaXJxcwk9IEJST1dOU1RPTkVfTlJfSVJRUywKKwkuaW5pdF9pcnEJPSBtbXAyX2luaXRfaXJxLAorCS50aW1lcgkJPSAmbW1wMl90aW1lciwKKwkuaW5pdF9tYWNoaW5lCT0gYnJvd25zdG9uZV9pbml0LAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbW1wL2Nsb2NrLmggYi9hcmNoL2FybS9tYWNoLW1tcC9jbG9jay5oCmluZGV4IDAxNmFlOTQuLjliMDI3ZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbW1wL2Nsb2NrLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1tbXAvY2xvY2suaApAQCAtNiw3ICs2LDcgQEAKICAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCi0jaW5jbHVkZSA8YXNtL2Nsa2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsa2Rldi5oPgogCiBzdHJ1Y3QgY2xrb3BzIHsKIAl2b2lkCQkJKCplbmFibGUpKHN0cnVjdCBjbGsgKik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC9mbGludC5jIGIvYXJjaC9hcm0vbWFjaC1tbXAvZmxpbnQuYwppbmRleCBiZGViNmRiLi5jNGZkODA2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW1tcC9mbGludC5jCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL2ZsaW50LmMKQEAgLTQ3LDcgKzQ3LDcgQEAKIAlHUElPMTEzX1NNQ19SRFksCiAKIAkvKkV0aGVybmV0Ki8KLQlHUElPMTU1X0dQSU8xNTUsCisJR1BJTzE1NV9HUElPLAogCiAJLyogREZJICovCiAJR1BJTzE2OF9ERklfRDAsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvbWZwLW1tcDIuaCBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9tZnAtbW1wMi5oCmluZGV4IDc2MWMyZGEuLjExN2UzMDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9tZnAtbW1wMi5oCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9tZnAtbW1wMi5oCkBAIC05LDE3NSArOSwxNzUgQEAKICNkZWZpbmUgTUZQX0RSSVZFX0ZBU1QJCSgweDggPDwgMTMpCiAKIC8qIEdQSU8gKi8KLSNkZWZpbmUgR1BJTzBfR1BJTzAJCU1GUF9DRkcoR1BJTzAsIEFGMCkKLSNkZWZpbmUgR1BJTzFfR1BJTzEJCU1GUF9DRkcoR1BJTzEsIEFGMCkKLSNkZWZpbmUgR1BJTzJfR1BJTzIJCU1GUF9DRkcoR1BJTzIsIEFGMCkKLSNkZWZpbmUgR1BJTzNfR1BJTzMJCU1GUF9DRkcoR1BJTzMsIEFGMCkKLSNkZWZpbmUgR1BJTzRfR1BJTzQJCU1GUF9DRkcoR1BJTzQsIEFGMCkKLSNkZWZpbmUgR1BJTzVfR1BJTzUJCU1GUF9DRkcoR1BJTzUsIEFGMCkKLSNkZWZpbmUgR1BJTzZfR1BJTzYJCU1GUF9DRkcoR1BJTzYsIEFGMCkKLSNkZWZpbmUgR1BJTzdfR1BJTzcJCU1GUF9DRkcoR1BJTzcsIEFGMCkKLSNkZWZpbmUgR1BJTzhfR1BJTzgJCU1GUF9DRkcoR1BJTzgsIEFGMCkKLSNkZWZpbmUgR1BJTzlfR1BJTzkJCU1GUF9DRkcoR1BJTzksIEFGMCkKLSNkZWZpbmUgR1BJTzEwX0dQSU8xMAkJTUZQX0NGRyhHUElPMTAsIEFGMCkKLSNkZWZpbmUgR1BJTzExX0dQSU8xMQkJTUZQX0NGRyhHUElPMTEsIEFGMCkKLSNkZWZpbmUgR1BJTzEyX0dQSU8xMgkJTUZQX0NGRyhHUElPMTIsIEFGMCkKLSNkZWZpbmUgR1BJTzEzX0dQSU8xMwkJTUZQX0NGRyhHUElPMTMsIEFGMCkKLSNkZWZpbmUgR1BJTzE0X0dQSU8xNAkJTUZQX0NGRyhHUElPMTQsIEFGMCkKLSNkZWZpbmUgR1BJTzE1X0dQSU8xNQkJTUZQX0NGRyhHUElPMTUsIEFGMCkKLSNkZWZpbmUgR1BJTzE2X0dQSU8xNgkJTUZQX0NGRyhHUElPMTYsIEFGMCkKLSNkZWZpbmUgR1BJTzE3X0dQSU8xNwkJTUZQX0NGRyhHUElPMTcsIEFGMCkKLSNkZWZpbmUgR1BJTzE4X0dQSU8xOAkJTUZQX0NGRyhHUElPMTgsIEFGMCkKLSNkZWZpbmUgR1BJTzE5X0dQSU8xOQkJTUZQX0NGRyhHUElPMTksIEFGMCkKLSNkZWZpbmUgR1BJTzIwX0dQSU8yMAkJTUZQX0NGRyhHUElPMjAsIEFGMCkKLSNkZWZpbmUgR1BJTzIxX0dQSU8yMQkJTUZQX0NGRyhHUElPMjEsIEFGMCkKLSNkZWZpbmUgR1BJTzIyX0dQSU8yMgkJTUZQX0NGRyhHUElPMjIsIEFGMCkKLSNkZWZpbmUgR1BJTzIzX0dQSU8yMwkJTUZQX0NGRyhHUElPMjMsIEFGMCkKLSNkZWZpbmUgR1BJTzI0X0dQSU8yNAkJTUZQX0NGRyhHUElPMjQsIEFGMCkKLSNkZWZpbmUgR1BJTzI1X0dQSU8yNQkJTUZQX0NGRyhHUElPMjUsIEFGMCkKLSNkZWZpbmUgR1BJTzI2X0dQSU8yNgkJTUZQX0NGRyhHUElPMjYsIEFGMCkKLSNkZWZpbmUgR1BJTzI3X0dQSU8yNwkJTUZQX0NGRyhHUElPMjcsIEFGMCkKLSNkZWZpbmUgR1BJTzI4X0dQSU8yOAkJTUZQX0NGRyhHUElPMjgsIEFGMCkKLSNkZWZpbmUgR1BJTzI5X0dQSU8yOQkJTUZQX0NGRyhHUElPMjksIEFGMCkKLSNkZWZpbmUgR1BJTzMwX0dQSU8zMAkJTUZQX0NGRyhHUElPMzAsIEFGMCkKLSNkZWZpbmUgR1BJTzMxX0dQSU8zMQkJTUZQX0NGRyhHUElPMzEsIEFGMCkKLSNkZWZpbmUgR1BJTzMyX0dQSU8zMgkJTUZQX0NGRyhHUElPMzIsIEFGMCkKLSNkZWZpbmUgR1BJTzMzX0dQSU8zMwkJTUZQX0NGRyhHUElPMzMsIEFGMCkKLSNkZWZpbmUgR1BJTzM0X0dQSU8zNAkJTUZQX0NGRyhHUElPMzQsIEFGMCkKLSNkZWZpbmUgR1BJTzM1X0dQSU8zNQkJTUZQX0NGRyhHUElPMzUsIEFGMCkKLSNkZWZpbmUgR1BJTzM2X0dQSU8zNgkJTUZQX0NGRyhHUElPMzYsIEFGMCkKLSNkZWZpbmUgR1BJTzM3X0dQSU8zNwkJTUZQX0NGRyhHUElPMzcsIEFGMCkKLSNkZWZpbmUgR1BJTzM4X0dQSU8zOAkJTUZQX0NGRyhHUElPMzgsIEFGMCkKLSNkZWZpbmUgR1BJTzM5X0dQSU8zOQkJTUZQX0NGRyhHUElPMzksIEFGMCkKLSNkZWZpbmUgR1BJTzQwX0dQSU80MAkJTUZQX0NGRyhHUElPNDAsIEFGMCkKLSNkZWZpbmUgR1BJTzQxX0dQSU80MQkJTUZQX0NGRyhHUElPNDEsIEFGMCkKLSNkZWZpbmUgR1BJTzQyX0dQSU80MgkJTUZQX0NGRyhHUElPNDIsIEFGMCkKLSNkZWZpbmUgR1BJTzQzX0dQSU80MwkJTUZQX0NGRyhHUElPNDMsIEFGMCkKLSNkZWZpbmUgR1BJTzQ0X0dQSU80NAkJTUZQX0NGRyhHUElPNDQsIEFGMCkKLSNkZWZpbmUgR1BJTzQ1X0dQSU80NQkJTUZQX0NGRyhHUElPNDUsIEFGMCkKLSNkZWZpbmUgR1BJTzQ2X0dQSU80NgkJTUZQX0NGRyhHUElPNDYsIEFGMCkKLSNkZWZpbmUgR1BJTzQ3X0dQSU80NwkJTUZQX0NGRyhHUElPNDcsIEFGMCkKLSNkZWZpbmUgR1BJTzQ4X0dQSU80OAkJTUZQX0NGRyhHUElPNDgsIEFGMCkKLSNkZWZpbmUgR1BJTzQ5X0dQSU80OQkJTUZQX0NGRyhHUElPNDksIEFGMCkKLSNkZWZpbmUgR1BJTzUwX0dQSU81MAkJTUZQX0NGRyhHUElPNTAsIEFGMCkKLSNkZWZpbmUgR1BJTzUxX0dQSU81MQkJTUZQX0NGRyhHUElPNTEsIEFGMCkKLSNkZWZpbmUgR1BJTzUyX0dQSU81MgkJTUZQX0NGRyhHUElPNTIsIEFGMCkKLSNkZWZpbmUgR1BJTzUzX0dQSU81MwkJTUZQX0NGRyhHUElPNTMsIEFGMCkKLSNkZWZpbmUgR1BJTzU0X0dQSU81NAkJTUZQX0NGRyhHUElPNTQsIEFGMCkKLSNkZWZpbmUgR1BJTzU1X0dQSU81NQkJTUZQX0NGRyhHUElPNTUsIEFGMCkKLSNkZWZpbmUgR1BJTzU2X0dQSU81NgkJTUZQX0NGRyhHUElPNTYsIEFGMCkKLSNkZWZpbmUgR1BJTzU3X0dQSU81NwkJTUZQX0NGRyhHUElPNTcsIEFGMCkKLSNkZWZpbmUgR1BJTzU4X0dQSU81OAkJTUZQX0NGRyhHUElPNTgsIEFGMCkKLSNkZWZpbmUgR1BJTzU5X0dQSU81OQkJTUZQX0NGRyhHUElPNTksIEFGMCkKLSNkZWZpbmUgR1BJTzYwX0dQSU82MAkJTUZQX0NGRyhHUElPNjAsIEFGMCkKLSNkZWZpbmUgR1BJTzYxX0dQSU82MQkJTUZQX0NGRyhHUElPNjEsIEFGMCkKLSNkZWZpbmUgR1BJTzYyX0dQSU82MgkJTUZQX0NGRyhHUElPNjIsIEFGMCkKLSNkZWZpbmUgR1BJTzYzX0dQSU82MwkJTUZQX0NGRyhHUElPNjMsIEFGMCkKLSNkZWZpbmUgR1BJTzY0X0dQSU82NAkJTUZQX0NGRyhHUElPNjQsIEFGMCkKLSNkZWZpbmUgR1BJTzY1X0dQSU82NQkJTUZQX0NGRyhHUElPNjUsIEFGMCkKLSNkZWZpbmUgR1BJTzY2X0dQSU82NgkJTUZQX0NGRyhHUElPNjYsIEFGMCkKLSNkZWZpbmUgR1BJTzY3X0dQSU82NwkJTUZQX0NGRyhHUElPNjcsIEFGMCkKLSNkZWZpbmUgR1BJTzY4X0dQSU82OAkJTUZQX0NGRyhHUElPNjgsIEFGMCkKLSNkZWZpbmUgR1BJTzY5X0dQSU82OQkJTUZQX0NGRyhHUElPNjksIEFGMCkKLSNkZWZpbmUgR1BJTzcwX0dQSU83MAkJTUZQX0NGRyhHUElPNzAsIEFGMCkKLSNkZWZpbmUgR1BJTzcxX0dQSU83MQkJTUZQX0NGRyhHUElPNzEsIEFGMCkKLSNkZWZpbmUgR1BJTzcyX0dQSU83MgkJTUZQX0NGRyhHUElPNzIsIEFGMCkKLSNkZWZpbmUgR1BJTzczX0dQSU83MwkJTUZQX0NGRyhHUElPNzMsIEFGMCkKLSNkZWZpbmUgR1BJTzc0X0dQSU83NAkJTUZQX0NGRyhHUElPNzQsIEFGMCkKLSNkZWZpbmUgR1BJTzc1X0dQSU83NQkJTUZQX0NGRyhHUElPNzUsIEFGMCkKLSNkZWZpbmUgR1BJTzc2X0dQSU83NgkJTUZQX0NGRyhHUElPNzYsIEFGMCkKLSNkZWZpbmUgR1BJTzc3X0dQSU83NwkJTUZQX0NGRyhHUElPNzcsIEFGMCkKLSNkZWZpbmUgR1BJTzc4X0dQSU83OAkJTUZQX0NGRyhHUElPNzgsIEFGMCkKLSNkZWZpbmUgR1BJTzc5X0dQSU83OQkJTUZQX0NGRyhHUElPNzksIEFGMCkKLSNkZWZpbmUgR1BJTzgwX0dQSU84MAkJTUZQX0NGRyhHUElPODAsIEFGMCkKLSNkZWZpbmUgR1BJTzgxX0dQSU84MQkJTUZQX0NGRyhHUElPODEsIEFGMCkKLSNkZWZpbmUgR1BJTzgyX0dQSU84MgkJTUZQX0NGRyhHUElPODIsIEFGMCkKLSNkZWZpbmUgR1BJTzgzX0dQSU84MwkJTUZQX0NGRyhHUElPODMsIEFGMCkKLSNkZWZpbmUgR1BJTzg0X0dQSU84NAkJTUZQX0NGRyhHUElPODQsIEFGMCkKLSNkZWZpbmUgR1BJTzg1X0dQSU84NQkJTUZQX0NGRyhHUElPODUsIEFGMCkKLSNkZWZpbmUgR1BJTzg2X0dQSU84NgkJTUZQX0NGRyhHUElPODYsIEFGMCkKLSNkZWZpbmUgR1BJTzg3X0dQSU84NwkJTUZQX0NGRyhHUElPODcsIEFGMCkKLSNkZWZpbmUgR1BJTzg4X0dQSU84OAkJTUZQX0NGRyhHUElPODgsIEFGMCkKLSNkZWZpbmUgR1BJTzg5X0dQSU84OQkJTUZQX0NGRyhHUElPODksIEFGMCkKLSNkZWZpbmUgR1BJTzkwX0dQSU85MAkJTUZQX0NGRyhHUElPOTAsIEFGMCkKLSNkZWZpbmUgR1BJTzkxX0dQSU85MQkJTUZQX0NGRyhHUElPOTEsIEFGMCkKLSNkZWZpbmUgR1BJTzkyX0dQSU85MgkJTUZQX0NGRyhHUElPOTIsIEFGMCkKLSNkZWZpbmUgR1BJTzkzX0dQSU85MwkJTUZQX0NGRyhHUElPOTMsIEFGMCkKLSNkZWZpbmUgR1BJTzk0X0dQSU85NAkJTUZQX0NGRyhHUElPOTQsIEFGMCkKLSNkZWZpbmUgR1BJTzk1X0dQSU85NQkJTUZQX0NGRyhHUElPOTUsIEFGMCkKLSNkZWZpbmUgR1BJTzk2X0dQSU85NgkJTUZQX0NGRyhHUElPOTYsIEFGMCkKLSNkZWZpbmUgR1BJTzk3X0dQSU85NwkJTUZQX0NGRyhHUElPOTcsIEFGMCkKLSNkZWZpbmUgR1BJTzk4X0dQSU85OAkJTUZQX0NGRyhHUElPOTgsIEFGMCkKLSNkZWZpbmUgR1BJTzk5X0dQSU85OQkJTUZQX0NGRyhHUElPOTksIEFGMCkKLSNkZWZpbmUgR1BJTzEwMF9HUElPMTAwCQlNRlBfQ0ZHKEdQSU8xMDAsIEFGMCkKLSNkZWZpbmUgR1BJTzEwMV9HUElPMTAxCQlNRlBfQ0ZHKEdQSU8xMDEsIEFGMCkKLSNkZWZpbmUgR1BJTzEwMl9HUElPMTAyCQlNRlBfQ0ZHKEdQSU8xMDIsIEFGMSkKLSNkZWZpbmUgR1BJTzEwM19HUElPMTAzCQlNRlBfQ0ZHKEdQSU8xMDMsIEFGMSkKLSNkZWZpbmUgR1BJTzEwNF9HUElPMTA0CQlNRlBfQ0ZHKEdQSU8xMDQsIEFGMSkKLSNkZWZpbmUgR1BJTzEwNV9HUElPMTA1CQlNRlBfQ0ZHKEdQSU8xMDUsIEFGMSkKLSNkZWZpbmUgR1BJTzEwNl9HUElPMTA2CQlNRlBfQ0ZHKEdQSU8xMDYsIEFGMSkKLSNkZWZpbmUgR1BJTzEwN19HUElPMTA3CQlNRlBfQ0ZHKEdQSU8xMDcsIEFGMSkKLSNkZWZpbmUgR1BJTzEwOF9HUElPMTA4CQlNRlBfQ0ZHKEdQSU8xMDgsIEFGMSkKLSNkZWZpbmUgR1BJTzEwOV9HUElPMTA5CQlNRlBfQ0ZHKEdQSU8xMDksIEFGMSkKLSNkZWZpbmUgR1BJTzExMF9HUElPMTEwCQlNRlBfQ0ZHKEdQSU8xMTAsIEFGMSkKLSNkZWZpbmUgR1BJTzExMV9HUElPMTExCQlNRlBfQ0ZHKEdQSU8xMTEsIEFGMSkKLSNkZWZpbmUgR1BJTzExMl9HUElPMTEyCQlNRlBfQ0ZHKEdQSU8xMTIsIEFGMSkKLSNkZWZpbmUgR1BJTzExM19HUElPMTEzCQlNRlBfQ0ZHKEdQSU8xMTMsIEFGMSkKLSNkZWZpbmUgR1BJTzExNF9HUElPMTE0CQlNRlBfQ0ZHKEdQSU8xMTQsIEFGMCkKLSNkZWZpbmUgR1BJTzExNV9HUElPMTE1CQlNRlBfQ0ZHKEdQSU8xMTUsIEFGMCkKLSNkZWZpbmUgR1BJTzExNl9HUElPMTE2CQlNRlBfQ0ZHKEdQSU8xMTYsIEFGMCkKLSNkZWZpbmUgR1BJTzExN19HUElPMTE3CQlNRlBfQ0ZHKEdQSU8xMTcsIEFGMCkKLSNkZWZpbmUgR1BJTzExOF9HUElPMTE4CQlNRlBfQ0ZHKEdQSU8xMTgsIEFGMCkKLSNkZWZpbmUgR1BJTzExOV9HUElPMTE5CQlNRlBfQ0ZHKEdQSU8xMTksIEFGMCkKLSNkZWZpbmUgR1BJTzEyMF9HUElPMTIwCQlNRlBfQ0ZHKEdQSU8xMjAsIEFGMCkKLSNkZWZpbmUgR1BJTzEyMV9HUElPMTIxCQlNRlBfQ0ZHKEdQSU8xMjEsIEFGMCkKLSNkZWZpbmUgR1BJTzEyMl9HUElPMTIyCQlNRlBfQ0ZHKEdQSU8xMjIsIEFGMCkKLSNkZWZpbmUgR1BJTzEyM19HUElPMTIzCQlNRlBfQ0ZHKEdQSU8xMjMsIEFGMCkKLSNkZWZpbmUgR1BJTzEyNF9HUElPMTI0CQlNRlBfQ0ZHKEdQSU8xMjQsIEFGMCkKLSNkZWZpbmUgR1BJTzEyNV9HUElPMTI1CQlNRlBfQ0ZHKEdQSU8xMjUsIEFGMCkKLSNkZWZpbmUgR1BJTzEyNl9HUElPMTI2CQlNRlBfQ0ZHKEdQSU8xMjYsIEFGMCkKLSNkZWZpbmUgR1BJTzEyN19HUElPMTI3CQlNRlBfQ0ZHKEdQSU8xMjcsIEFGMCkKLSNkZWZpbmUgR1BJTzEyOF9HUElPMTI4CQlNRlBfQ0ZHKEdQSU8xMjgsIEFGMCkKLSNkZWZpbmUgR1BJTzEyOV9HUElPMTI5CQlNRlBfQ0ZHKEdQSU8xMjksIEFGMCkKLSNkZWZpbmUgR1BJTzEzMF9HUElPMTMwCQlNRlBfQ0ZHKEdQSU8xMzAsIEFGMCkKLSNkZWZpbmUgR1BJTzEzMV9HUElPMTMxCQlNRlBfQ0ZHKEdQSU8xMzEsIEFGMCkKLSNkZWZpbmUgR1BJTzEzMl9HUElPMTMyCQlNRlBfQ0ZHKEdQSU8xMzIsIEFGMCkKLSNkZWZpbmUgR1BJTzEzM19HUElPMTMzCQlNRlBfQ0ZHKEdQSU8xMzMsIEFGMCkKLSNkZWZpbmUgR1BJTzEzNF9HUElPMTM0CQlNRlBfQ0ZHKEdQSU8xMzQsIEFGMCkKLSNkZWZpbmUgR1BJTzEzNV9HUElPMTM1CQlNRlBfQ0ZHKEdQSU8xMzUsIEFGMCkKLSNkZWZpbmUgR1BJTzEzNl9HUElPMTM2CQlNRlBfQ0ZHKEdQSU8xMzYsIEFGMCkKLSNkZWZpbmUgR1BJTzEzN19HUElPMTM3CQlNRlBfQ0ZHKEdQSU8xMzcsIEFGMCkKLSNkZWZpbmUgR1BJTzEzOF9HUElPMTM4CQlNRlBfQ0ZHKEdQSU8xMzgsIEFGMCkKLSNkZWZpbmUgR1BJTzEzOV9HUElPMTM5CQlNRlBfQ0ZHKEdQSU8xMzksIEFGMCkKLSNkZWZpbmUgR1BJTzE0MF9HUElPMTQwCQlNRlBfQ0ZHKEdQSU8xNDAsIEFGMCkKLSNkZWZpbmUgR1BJTzE0MV9HUElPMTQxCQlNRlBfQ0ZHKEdQSU8xNDEsIEFGMCkKLSNkZWZpbmUgR1BJTzE0Ml9HUElPMTQyCQlNRlBfQ0ZHKEdQSU8xNDIsIEFGMSkKLSNkZWZpbmUgR1BJTzE0M19HUElPMTQzCQlNRlBfQ0ZHKEdQSU8xNDMsIEFGMSkKLSNkZWZpbmUgR1BJTzE0NF9HUElPMTQ0CQlNRlBfQ0ZHKEdQSU8xNDQsIEFGMSkKLSNkZWZpbmUgR1BJTzE0NV9HUElPMTQ1CQlNRlBfQ0ZHKEdQSU8xNDUsIEFGMSkKLSNkZWZpbmUgR1BJTzE0Nl9HUElPMTQ2CQlNRlBfQ0ZHKEdQSU8xNDYsIEFGMSkKLSNkZWZpbmUgR1BJTzE0N19HUElPMTQ3CQlNRlBfQ0ZHKEdQSU8xNDcsIEFGMSkKLSNkZWZpbmUgR1BJTzE0OF9HUElPMTQ4CQlNRlBfQ0ZHKEdQSU8xNDgsIEFGMSkKLSNkZWZpbmUgR1BJTzE0OV9HUElPMTQ5CQlNRlBfQ0ZHKEdQSU8xNDksIEFGMSkKLSNkZWZpbmUgR1BJTzE1MF9HUElPMTUwCQlNRlBfQ0ZHKEdQSU8xNTAsIEFGMSkKLSNkZWZpbmUgR1BJTzE1MV9HUElPMTUxCQlNRlBfQ0ZHKEdQSU8xNTEsIEFGMSkKLSNkZWZpbmUgR1BJTzE1Ml9HUElPMTUyCQlNRlBfQ0ZHKEdQSU8xNTIsIEFGMSkKLSNkZWZpbmUgR1BJTzE1M19HUElPMTUzCQlNRlBfQ0ZHKEdQSU8xNTMsIEFGMSkKLSNkZWZpbmUgR1BJTzE1NF9HUElPMTU0CQlNRlBfQ0ZHKEdQSU8xNTQsIEFGMSkKLSNkZWZpbmUgR1BJTzE1NV9HUElPMTU1CQlNRlBfQ0ZHKEdQSU8xNTUsIEFGMSkKLSNkZWZpbmUgR1BJTzE1Nl9HUElPMTU2CQlNRlBfQ0ZHKEdQSU8xNTYsIEFGMSkKLSNkZWZpbmUgR1BJTzE1N19HUElPMTU3CQlNRlBfQ0ZHKEdQSU8xNTcsIEFGMSkKLSNkZWZpbmUgR1BJTzE1OF9HUElPMTU4CQlNRlBfQ0ZHKEdQSU8xNTgsIEFGMSkKLSNkZWZpbmUgR1BJTzE1OV9HUElPMTU5CQlNRlBfQ0ZHKEdQSU8xNTksIEFGMSkKLSNkZWZpbmUgR1BJTzE2MF9HUElPMTYwCQlNRlBfQ0ZHKEdQSU8xNjAsIEFGMSkKLSNkZWZpbmUgR1BJTzE2MV9HUElPMTYxCQlNRlBfQ0ZHKEdQSU8xNjEsIEFGMSkKLSNkZWZpbmUgR1BJTzE2Ml9HUElPMTYyCQlNRlBfQ0ZHKEdQSU8xNjIsIEFGMSkKLSNkZWZpbmUgR1BJTzE2M19HUElPMTYzCQlNRlBfQ0ZHKEdQSU8xNjMsIEFGMSkKLSNkZWZpbmUgR1BJTzE2NF9HUElPMTY0CQlNRlBfQ0ZHKEdQSU8xNjQsIEFGMSkKLSNkZWZpbmUgR1BJTzE2NV9HUElPMTY1CQlNRlBfQ0ZHKEdQSU8xNjUsIEFGMSkKLSNkZWZpbmUgR1BJTzE2Nl9HUElPMTY2CQlNRlBfQ0ZHKEdQSU8xNjYsIEFGMSkKLSNkZWZpbmUgR1BJTzE2N19HUElPMTY3CQlNRlBfQ0ZHKEdQSU8xNjcsIEFGMSkKLSNkZWZpbmUgR1BJTzE2OF9HUElPMTY4CQlNRlBfQ0ZHKEdQSU8xNjgsIEFGMSkKKyNkZWZpbmUgR1BJTzBfR1BJTwlNRlBfQ0ZHKEdQSU8wLCBBRjApCisjZGVmaW5lIEdQSU8xX0dQSU8JTUZQX0NGRyhHUElPMSwgQUYwKQorI2RlZmluZSBHUElPMl9HUElPCU1GUF9DRkcoR1BJTzIsIEFGMCkKKyNkZWZpbmUgR1BJTzNfR1BJTwlNRlBfQ0ZHKEdQSU8zLCBBRjApCisjZGVmaW5lIEdQSU80X0dQSU8JTUZQX0NGRyhHUElPNCwgQUYwKQorI2RlZmluZSBHUElPNV9HUElPCU1GUF9DRkcoR1BJTzUsIEFGMCkKKyNkZWZpbmUgR1BJTzZfR1BJTwlNRlBfQ0ZHKEdQSU82LCBBRjApCisjZGVmaW5lIEdQSU83X0dQSU8JTUZQX0NGRyhHUElPNywgQUYwKQorI2RlZmluZSBHUElPOF9HUElPCU1GUF9DRkcoR1BJTzgsIEFGMCkKKyNkZWZpbmUgR1BJTzlfR1BJTwlNRlBfQ0ZHKEdQSU85LCBBRjApCisjZGVmaW5lIEdQSU8xMF9HUElPCU1GUF9DRkcoR1BJTzEwLCBBRjApCisjZGVmaW5lIEdQSU8xMV9HUElPCU1GUF9DRkcoR1BJTzExLCBBRjApCisjZGVmaW5lIEdQSU8xMl9HUElPCU1GUF9DRkcoR1BJTzEyLCBBRjApCisjZGVmaW5lIEdQSU8xM19HUElPCU1GUF9DRkcoR1BJTzEzLCBBRjApCisjZGVmaW5lIEdQSU8xNF9HUElPCU1GUF9DRkcoR1BJTzE0LCBBRjApCisjZGVmaW5lIEdQSU8xNV9HUElPCU1GUF9DRkcoR1BJTzE1LCBBRjApCisjZGVmaW5lIEdQSU8xNl9HUElPCU1GUF9DRkcoR1BJTzE2LCBBRjApCisjZGVmaW5lIEdQSU8xN19HUElPCU1GUF9DRkcoR1BJTzE3LCBBRjApCisjZGVmaW5lIEdQSU8xOF9HUElPCU1GUF9DRkcoR1BJTzE4LCBBRjApCisjZGVmaW5lIEdQSU8xOV9HUElPCU1GUF9DRkcoR1BJTzE5LCBBRjApCisjZGVmaW5lIEdQSU8yMF9HUElPCU1GUF9DRkcoR1BJTzIwLCBBRjApCisjZGVmaW5lIEdQSU8yMV9HUElPCU1GUF9DRkcoR1BJTzIxLCBBRjApCisjZGVmaW5lIEdQSU8yMl9HUElPCU1GUF9DRkcoR1BJTzIyLCBBRjApCisjZGVmaW5lIEdQSU8yM19HUElPCU1GUF9DRkcoR1BJTzIzLCBBRjApCisjZGVmaW5lIEdQSU8yNF9HUElPCU1GUF9DRkcoR1BJTzI0LCBBRjApCisjZGVmaW5lIEdQSU8yNV9HUElPCU1GUF9DRkcoR1BJTzI1LCBBRjApCisjZGVmaW5lIEdQSU8yNl9HUElPCU1GUF9DRkcoR1BJTzI2LCBBRjApCisjZGVmaW5lIEdQSU8yN19HUElPCU1GUF9DRkcoR1BJTzI3LCBBRjApCisjZGVmaW5lIEdQSU8yOF9HUElPCU1GUF9DRkcoR1BJTzI4LCBBRjApCisjZGVmaW5lIEdQSU8yOV9HUElPCU1GUF9DRkcoR1BJTzI5LCBBRjApCisjZGVmaW5lIEdQSU8zMF9HUElPCU1GUF9DRkcoR1BJTzMwLCBBRjApCisjZGVmaW5lIEdQSU8zMV9HUElPCU1GUF9DRkcoR1BJTzMxLCBBRjApCisjZGVmaW5lIEdQSU8zMl9HUElPCU1GUF9DRkcoR1BJTzMyLCBBRjApCisjZGVmaW5lIEdQSU8zM19HUElPCU1GUF9DRkcoR1BJTzMzLCBBRjApCisjZGVmaW5lIEdQSU8zNF9HUElPCU1GUF9DRkcoR1BJTzM0LCBBRjApCisjZGVmaW5lIEdQSU8zNV9HUElPCU1GUF9DRkcoR1BJTzM1LCBBRjApCisjZGVmaW5lIEdQSU8zNl9HUElPCU1GUF9DRkcoR1BJTzM2LCBBRjApCisjZGVmaW5lIEdQSU8zN19HUElPCU1GUF9DRkcoR1BJTzM3LCBBRjApCisjZGVmaW5lIEdQSU8zOF9HUElPCU1GUF9DRkcoR1BJTzM4LCBBRjApCisjZGVmaW5lIEdQSU8zOV9HUElPCU1GUF9DRkcoR1BJTzM5LCBBRjApCisjZGVmaW5lIEdQSU80MF9HUElPCU1GUF9DRkcoR1BJTzQwLCBBRjApCisjZGVmaW5lIEdQSU80MV9HUElPCU1GUF9DRkcoR1BJTzQxLCBBRjApCisjZGVmaW5lIEdQSU80Ml9HUElPCU1GUF9DRkcoR1BJTzQyLCBBRjApCisjZGVmaW5lIEdQSU80M19HUElPCU1GUF9DRkcoR1BJTzQzLCBBRjApCisjZGVmaW5lIEdQSU80NF9HUElPCU1GUF9DRkcoR1BJTzQ0LCBBRjApCisjZGVmaW5lIEdQSU80NV9HUElPCU1GUF9DRkcoR1BJTzQ1LCBBRjApCisjZGVmaW5lIEdQSU80Nl9HUElPCU1GUF9DRkcoR1BJTzQ2LCBBRjApCisjZGVmaW5lIEdQSU80N19HUElPCU1GUF9DRkcoR1BJTzQ3LCBBRjApCisjZGVmaW5lIEdQSU80OF9HUElPCU1GUF9DRkcoR1BJTzQ4LCBBRjApCisjZGVmaW5lIEdQSU80OV9HUElPCU1GUF9DRkcoR1BJTzQ5LCBBRjApCisjZGVmaW5lIEdQSU81MF9HUElPCU1GUF9DRkcoR1BJTzUwLCBBRjApCisjZGVmaW5lIEdQSU81MV9HUElPCU1GUF9DRkcoR1BJTzUxLCBBRjApCisjZGVmaW5lIEdQSU81Ml9HUElPCU1GUF9DRkcoR1BJTzUyLCBBRjApCisjZGVmaW5lIEdQSU81M19HUElPCU1GUF9DRkcoR1BJTzUzLCBBRjApCisjZGVmaW5lIEdQSU81NF9HUElPCU1GUF9DRkcoR1BJTzU0LCBBRjApCisjZGVmaW5lIEdQSU81NV9HUElPCU1GUF9DRkcoR1BJTzU1LCBBRjApCisjZGVmaW5lIEdQSU81Nl9HUElPCU1GUF9DRkcoR1BJTzU2LCBBRjApCisjZGVmaW5lIEdQSU81N19HUElPCU1GUF9DRkcoR1BJTzU3LCBBRjApCisjZGVmaW5lIEdQSU81OF9HUElPCU1GUF9DRkcoR1BJTzU4LCBBRjApCisjZGVmaW5lIEdQSU81OV9HUElPCU1GUF9DRkcoR1BJTzU5LCBBRjApCisjZGVmaW5lIEdQSU82MF9HUElPCU1GUF9DRkcoR1BJTzYwLCBBRjApCisjZGVmaW5lIEdQSU82MV9HUElPCU1GUF9DRkcoR1BJTzYxLCBBRjApCisjZGVmaW5lIEdQSU82Ml9HUElPCU1GUF9DRkcoR1BJTzYyLCBBRjApCisjZGVmaW5lIEdQSU82M19HUElPCU1GUF9DRkcoR1BJTzYzLCBBRjApCisjZGVmaW5lIEdQSU82NF9HUElPCU1GUF9DRkcoR1BJTzY0LCBBRjApCisjZGVmaW5lIEdQSU82NV9HUElPCU1GUF9DRkcoR1BJTzY1LCBBRjApCisjZGVmaW5lIEdQSU82Nl9HUElPCU1GUF9DRkcoR1BJTzY2LCBBRjApCisjZGVmaW5lIEdQSU82N19HUElPCU1GUF9DRkcoR1BJTzY3LCBBRjApCisjZGVmaW5lIEdQSU82OF9HUElPCU1GUF9DRkcoR1BJTzY4LCBBRjApCisjZGVmaW5lIEdQSU82OV9HUElPCU1GUF9DRkcoR1BJTzY5LCBBRjApCisjZGVmaW5lIEdQSU83MF9HUElPCU1GUF9DRkcoR1BJTzcwLCBBRjApCisjZGVmaW5lIEdQSU83MV9HUElPCU1GUF9DRkcoR1BJTzcxLCBBRjApCisjZGVmaW5lIEdQSU83Ml9HUElPCU1GUF9DRkcoR1BJTzcyLCBBRjApCisjZGVmaW5lIEdQSU83M19HUElPCU1GUF9DRkcoR1BJTzczLCBBRjApCisjZGVmaW5lIEdQSU83NF9HUElPCU1GUF9DRkcoR1BJTzc0LCBBRjApCisjZGVmaW5lIEdQSU83NV9HUElPCU1GUF9DRkcoR1BJTzc1LCBBRjApCisjZGVmaW5lIEdQSU83Nl9HUElPCU1GUF9DRkcoR1BJTzc2LCBBRjApCisjZGVmaW5lIEdQSU83N19HUElPCU1GUF9DRkcoR1BJTzc3LCBBRjApCisjZGVmaW5lIEdQSU83OF9HUElPCU1GUF9DRkcoR1BJTzc4LCBBRjApCisjZGVmaW5lIEdQSU83OV9HUElPCU1GUF9DRkcoR1BJTzc5LCBBRjApCisjZGVmaW5lIEdQSU84MF9HUElPCU1GUF9DRkcoR1BJTzgwLCBBRjApCisjZGVmaW5lIEdQSU84MV9HUElPCU1GUF9DRkcoR1BJTzgxLCBBRjApCisjZGVmaW5lIEdQSU84Ml9HUElPCU1GUF9DRkcoR1BJTzgyLCBBRjApCisjZGVmaW5lIEdQSU84M19HUElPCU1GUF9DRkcoR1BJTzgzLCBBRjApCisjZGVmaW5lIEdQSU84NF9HUElPCU1GUF9DRkcoR1BJTzg0LCBBRjApCisjZGVmaW5lIEdQSU84NV9HUElPCU1GUF9DRkcoR1BJTzg1LCBBRjApCisjZGVmaW5lIEdQSU84Nl9HUElPCU1GUF9DRkcoR1BJTzg2LCBBRjApCisjZGVmaW5lIEdQSU84N19HUElPCU1GUF9DRkcoR1BJTzg3LCBBRjApCisjZGVmaW5lIEdQSU84OF9HUElPCU1GUF9DRkcoR1BJTzg4LCBBRjApCisjZGVmaW5lIEdQSU84OV9HUElPCU1GUF9DRkcoR1BJTzg5LCBBRjApCisjZGVmaW5lIEdQSU85MF9HUElPCU1GUF9DRkcoR1BJTzkwLCBBRjApCisjZGVmaW5lIEdQSU85MV9HUElPCU1GUF9DRkcoR1BJTzkxLCBBRjApCisjZGVmaW5lIEdQSU85Ml9HUElPCU1GUF9DRkcoR1BJTzkyLCBBRjApCisjZGVmaW5lIEdQSU85M19HUElPCU1GUF9DRkcoR1BJTzkzLCBBRjApCisjZGVmaW5lIEdQSU85NF9HUElPCU1GUF9DRkcoR1BJTzk0LCBBRjApCisjZGVmaW5lIEdQSU85NV9HUElPCU1GUF9DRkcoR1BJTzk1LCBBRjApCisjZGVmaW5lIEdQSU85Nl9HUElPCU1GUF9DRkcoR1BJTzk2LCBBRjApCisjZGVmaW5lIEdQSU85N19HUElPCU1GUF9DRkcoR1BJTzk3LCBBRjApCisjZGVmaW5lIEdQSU85OF9HUElPCU1GUF9DRkcoR1BJTzk4LCBBRjApCisjZGVmaW5lIEdQSU85OV9HUElPCU1GUF9DRkcoR1BJTzk5LCBBRjApCisjZGVmaW5lIEdQSU8xMDBfR1BJTwlNRlBfQ0ZHKEdQSU8xMDAsIEFGMCkKKyNkZWZpbmUgR1BJTzEwMV9HUElPCU1GUF9DRkcoR1BJTzEwMSwgQUYwKQorI2RlZmluZSBHUElPMTAyX0dQSU8JTUZQX0NGRyhHUElPMTAyLCBBRjEpCisjZGVmaW5lIEdQSU8xMDNfR1BJTwlNRlBfQ0ZHKEdQSU8xMDMsIEFGMSkKKyNkZWZpbmUgR1BJTzEwNF9HUElPCU1GUF9DRkcoR1BJTzEwNCwgQUYxKQorI2RlZmluZSBHUElPMTA1X0dQSU8JTUZQX0NGRyhHUElPMTA1LCBBRjEpCisjZGVmaW5lIEdQSU8xMDZfR1BJTwlNRlBfQ0ZHKEdQSU8xMDYsIEFGMSkKKyNkZWZpbmUgR1BJTzEwN19HUElPCU1GUF9DRkcoR1BJTzEwNywgQUYxKQorI2RlZmluZSBHUElPMTA4X0dQSU8JTUZQX0NGRyhHUElPMTA4LCBBRjEpCisjZGVmaW5lIEdQSU8xMDlfR1BJTwlNRlBfQ0ZHKEdQSU8xMDksIEFGMSkKKyNkZWZpbmUgR1BJTzExMF9HUElPCU1GUF9DRkcoR1BJTzExMCwgQUYxKQorI2RlZmluZSBHUElPMTExX0dQSU8JTUZQX0NGRyhHUElPMTExLCBBRjEpCisjZGVmaW5lIEdQSU8xMTJfR1BJTwlNRlBfQ0ZHKEdQSU8xMTIsIEFGMSkKKyNkZWZpbmUgR1BJTzExM19HUElPCU1GUF9DRkcoR1BJTzExMywgQUYxKQorI2RlZmluZSBHUElPMTE0X0dQSU8JTUZQX0NGRyhHUElPMTE0LCBBRjApCisjZGVmaW5lIEdQSU8xMTVfR1BJTwlNRlBfQ0ZHKEdQSU8xMTUsIEFGMCkKKyNkZWZpbmUgR1BJTzExNl9HUElPCU1GUF9DRkcoR1BJTzExNiwgQUYwKQorI2RlZmluZSBHUElPMTE3X0dQSU8JTUZQX0NGRyhHUElPMTE3LCBBRjApCisjZGVmaW5lIEdQSU8xMThfR1BJTwlNRlBfQ0ZHKEdQSU8xMTgsIEFGMCkKKyNkZWZpbmUgR1BJTzExOV9HUElPCU1GUF9DRkcoR1BJTzExOSwgQUYwKQorI2RlZmluZSBHUElPMTIwX0dQSU8JTUZQX0NGRyhHUElPMTIwLCBBRjApCisjZGVmaW5lIEdQSU8xMjFfR1BJTwlNRlBfQ0ZHKEdQSU8xMjEsIEFGMCkKKyNkZWZpbmUgR1BJTzEyMl9HUElPCU1GUF9DRkcoR1BJTzEyMiwgQUYwKQorI2RlZmluZSBHUElPMTIzX0dQSU8JTUZQX0NGRyhHUElPMTIzLCBBRjApCisjZGVmaW5lIEdQSU8xMjRfR1BJTwlNRlBfQ0ZHKEdQSU8xMjQsIEFGMCkKKyNkZWZpbmUgR1BJTzEyNV9HUElPCU1GUF9DRkcoR1BJTzEyNSwgQUYwKQorI2RlZmluZSBHUElPMTI2X0dQSU8JTUZQX0NGRyhHUElPMTI2LCBBRjApCisjZGVmaW5lIEdQSU8xMjdfR1BJTwlNRlBfQ0ZHKEdQSU8xMjcsIEFGMCkKKyNkZWZpbmUgR1BJTzEyOF9HUElPCU1GUF9DRkcoR1BJTzEyOCwgQUYwKQorI2RlZmluZSBHUElPMTI5X0dQSU8JTUZQX0NGRyhHUElPMTI5LCBBRjApCisjZGVmaW5lIEdQSU8xMzBfR1BJTwlNRlBfQ0ZHKEdQSU8xMzAsIEFGMCkKKyNkZWZpbmUgR1BJTzEzMV9HUElPCU1GUF9DRkcoR1BJTzEzMSwgQUYwKQorI2RlZmluZSBHUElPMTMyX0dQSU8JTUZQX0NGRyhHUElPMTMyLCBBRjApCisjZGVmaW5lIEdQSU8xMzNfR1BJTwlNRlBfQ0ZHKEdQSU8xMzMsIEFGMCkKKyNkZWZpbmUgR1BJTzEzNF9HUElPCU1GUF9DRkcoR1BJTzEzNCwgQUYwKQorI2RlZmluZSBHUElPMTM1X0dQSU8JTUZQX0NGRyhHUElPMTM1LCBBRjApCisjZGVmaW5lIEdQSU8xMzZfR1BJTwlNRlBfQ0ZHKEdQSU8xMzYsIEFGMCkKKyNkZWZpbmUgR1BJTzEzN19HUElPCU1GUF9DRkcoR1BJTzEzNywgQUYwKQorI2RlZmluZSBHUElPMTM4X0dQSU8JTUZQX0NGRyhHUElPMTM4LCBBRjApCisjZGVmaW5lIEdQSU8xMzlfR1BJTwlNRlBfQ0ZHKEdQSU8xMzksIEFGMCkKKyNkZWZpbmUgR1BJTzE0MF9HUElPCU1GUF9DRkcoR1BJTzE0MCwgQUYwKQorI2RlZmluZSBHUElPMTQxX0dQSU8JTUZQX0NGRyhHUElPMTQxLCBBRjApCisjZGVmaW5lIEdQSU8xNDJfR1BJTwlNRlBfQ0ZHKEdQSU8xNDIsIEFGMSkKKyNkZWZpbmUgR1BJTzE0M19HUElPCU1GUF9DRkcoR1BJTzE0MywgQUYxKQorI2RlZmluZSBHUElPMTQ0X0dQSU8JTUZQX0NGRyhHUElPMTQ0LCBBRjEpCisjZGVmaW5lIEdQSU8xNDVfR1BJTwlNRlBfQ0ZHKEdQSU8xNDUsIEFGMSkKKyNkZWZpbmUgR1BJTzE0Nl9HUElPCU1GUF9DRkcoR1BJTzE0NiwgQUYxKQorI2RlZmluZSBHUElPMTQ3X0dQSU8JTUZQX0NGRyhHUElPMTQ3LCBBRjEpCisjZGVmaW5lIEdQSU8xNDhfR1BJTwlNRlBfQ0ZHKEdQSU8xNDgsIEFGMSkKKyNkZWZpbmUgR1BJTzE0OV9HUElPCU1GUF9DRkcoR1BJTzE0OSwgQUYxKQorI2RlZmluZSBHUElPMTUwX0dQSU8JTUZQX0NGRyhHUElPMTUwLCBBRjEpCisjZGVmaW5lIEdQSU8xNTFfR1BJTwlNRlBfQ0ZHKEdQSU8xNTEsIEFGMSkKKyNkZWZpbmUgR1BJTzE1Ml9HUElPCU1GUF9DRkcoR1BJTzE1MiwgQUYxKQorI2RlZmluZSBHUElPMTUzX0dQSU8JTUZQX0NGRyhHUElPMTUzLCBBRjEpCisjZGVmaW5lIEdQSU8xNTRfR1BJTwlNRlBfQ0ZHKEdQSU8xNTQsIEFGMSkKKyNkZWZpbmUgR1BJTzE1NV9HUElPCU1GUF9DRkcoR1BJTzE1NSwgQUYxKQorI2RlZmluZSBHUElPMTU2X0dQSU8JTUZQX0NGRyhHUElPMTU2LCBBRjEpCisjZGVmaW5lIEdQSU8xNTdfR1BJTwlNRlBfQ0ZHKEdQSU8xNTcsIEFGMSkKKyNkZWZpbmUgR1BJTzE1OF9HUElPCU1GUF9DRkcoR1BJTzE1OCwgQUYxKQorI2RlZmluZSBHUElPMTU5X0dQSU8JTUZQX0NGRyhHUElPMTU5LCBBRjEpCisjZGVmaW5lIEdQSU8xNjBfR1BJTwlNRlBfQ0ZHKEdQSU8xNjAsIEFGMSkKKyNkZWZpbmUgR1BJTzE2MV9HUElPCU1GUF9DRkcoR1BJTzE2MSwgQUYxKQorI2RlZmluZSBHUElPMTYyX0dQSU8JTUZQX0NGRyhHUElPMTYyLCBBRjEpCisjZGVmaW5lIEdQSU8xNjNfR1BJTwlNRlBfQ0ZHKEdQSU8xNjMsIEFGMSkKKyNkZWZpbmUgR1BJTzE2NF9HUElPCU1GUF9DRkcoR1BJTzE2NCwgQUYxKQorI2RlZmluZSBHUElPMTY1X0dQSU8JTUZQX0NGRyhHUElPMTY1LCBBRjEpCisjZGVmaW5lIEdQSU8xNjZfR1BJTwlNRlBfQ0ZHKEdQSU8xNjYsIEFGMSkKKyNkZWZpbmUgR1BJTzE2N19HUElPCU1GUF9DRkcoR1BJTzE2NywgQUYxKQorI2RlZmluZSBHUElPMTY4X0dQSU8JTUZQX0NGRyhHUElPMTY4LCBBRjEpCiAKIC8qIERGSSAqLwogI2RlZmluZSBHUElPMTA4X0RGSV9EMTUJCU1GUF9DRkcoR1BJTzEwOCwgQUYwKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL21tcDIuaCBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9tbXAyLmgKaW5kZXggZGJiYTZlOC4uNGFlYzQ5MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL21tcDIuaAorKysgYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvbW1wMi5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBfX0FTTV9NQUNIX01NUDJfSAogI2RlZmluZSBfX0FTTV9NQUNIX01NUDJfSAogCisjaW5jbHVkZSA8cGxhdC9zZGhjaS5oPgorCiBzdHJ1Y3Qgc3lzX3RpbWVyOwogCiBleHRlcm4gc3RydWN0IHN5c190aW1lciBtbXAyX3RpbWVyOwpAQCAtMjIsNiArMjQsMTAgQEAKIGV4dGVybiBzdHJ1Y3QgcHhhX2RldmljZV9kZXNjIG1tcDJfZGV2aWNlX3R3c2k0OwogZXh0ZXJuIHN0cnVjdCBweGFfZGV2aWNlX2Rlc2MgbW1wMl9kZXZpY2VfdHdzaTU7CiBleHRlcm4gc3RydWN0IHB4YV9kZXZpY2VfZGVzYyBtbXAyX2RldmljZV90d3NpNjsKK2V4dGVybiBzdHJ1Y3QgcHhhX2RldmljZV9kZXNjIG1tcDJfZGV2aWNlX3NkaDA7CitleHRlcm4gc3RydWN0IHB4YV9kZXZpY2VfZGVzYyBtbXAyX2RldmljZV9zZGgxOworZXh0ZXJuIHN0cnVjdCBweGFfZGV2aWNlX2Rlc2MgbW1wMl9kZXZpY2Vfc2RoMjsKK2V4dGVybiBzdHJ1Y3QgcHhhX2RldmljZV9kZXNjIG1tcDJfZGV2aWNlX3NkaDM7CiAKIHN0YXRpYyBpbmxpbmUgaW50IG1tcDJfYWRkX3VhcnQoaW50IGlkKQogewpAQCAtNjMsNSArNjksMjEgQEAKIAlyZXR1cm4gcHhhX3JlZ2lzdGVyX2RldmljZShkLCBkYXRhLCBzaXplb2YoKmRhdGEpKTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgbW1wMl9hZGRfc2Rob3N0KGludCBpZCwgc3RydWN0IHNkaGNpX3B4YV9wbGF0ZGF0YSAqZGF0YSkKK3sKKwlzdHJ1Y3QgcHhhX2RldmljZV9kZXNjICpkID0gTlVMTDsKKworCXN3aXRjaCAoaWQpIHsKKwljYXNlIDA6IGQgPSAmbW1wMl9kZXZpY2Vfc2RoMDsgYnJlYWs7CisJY2FzZSAxOiBkID0gJm1tcDJfZGV2aWNlX3NkaDE7IGJyZWFrOworCWNhc2UgMjogZCA9ICZtbXAyX2RldmljZV9zZGgyOyBicmVhazsKKwljYXNlIDM6IGQgPSAmbW1wMl9kZXZpY2Vfc2RoMzsgYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIHB4YV9yZWdpc3Rlcl9kZXZpY2UoZCwgZGF0YSwgc2l6ZW9mKCpkYXRhKSk7Cit9CisKICNlbmRpZiAvKiBfX0FTTV9NQUNIX01NUDJfSCAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvcmVncy1hcG11LmggYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvcmVncy1hcG11LmgKaW5kZXggYWM0NzAyMy4uZjcwMTFlZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL3JlZ3MtYXBtdS5oCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9yZWdzLWFwbXUuaApAQCAtMjcsNiArMjcsOCBAQAogI2RlZmluZSBBUE1VX0RNQQlBUE1VX1JFRygweDA2NCkKICNkZWZpbmUgQVBNVV9HRVUJQVBNVV9SRUcoMHgwNjgpCiAjZGVmaW5lIEFQTVVfQlVTCUFQTVVfUkVHKDB4MDZjKQorI2RlZmluZSBBUE1VX1NESDIJQVBNVV9SRUcoMHgwZTgpCisjZGVmaW5lIEFQTVVfU0RIMwlBUE1VX1JFRygweDBlYykKIAogI2RlZmluZSBBUE1VX0ZOQ0xLX0VOCSgxIDw8IDQpCiAjZGVmaW5lIEFQTVVfQVhJQ0xLX0VOCSgxIDw8IDMpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC9qYXNwZXIuYyBiL2FyY2gvYXJtL21hY2gtbW1wL2phc3Blci5jCmluZGV4IDJhNjg0ZmEuLjI0MTcyYTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbW1wL2phc3Blci5jCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL2phc3Blci5jCkBAIC02Nyw2ICs2NywzNiBAQAogCiAJLyogUE1JQyAqLwogCVBNSUNfUE1JQ19JTlQgfCBNRlBfTFBNX0VER0VfRkFMTCwKKworCS8qIE1NQzEgKi8KKwlHUElPMTMxX01NQzFfREFUMywKKwlHUElPMTMyX01NQzFfREFUMiwKKwlHUElPMTMzX01NQzFfREFUMSwKKwlHUElPMTM0X01NQzFfREFUMCwKKwlHUElPMTM2X01NQzFfQ01ELAorCUdQSU8xMzlfTU1DMV9DTEssCisJR1BJTzE0MF9NTUMxX0NELAorCUdQSU8xNDFfTU1DMV9XUCwKKworCS8qIE1NQzIgKi8KKwlHUElPMzdfTU1DMl9EQVQzLAorCUdQSU8zOF9NTUMyX0RBVDIsCisJR1BJTzM5X01NQzJfREFUMSwKKwlHUElPNDBfTU1DMl9EQVQwLAorCUdQSU80MV9NTUMyX0NNRCwKKwlHUElPNDJfTU1DMl9DTEssCisKKwkvKiBNTUMzICovCisJR1BJTzE2NV9NTUMzX0RBVDcsCisJR1BJTzE2Ml9NTUMzX0RBVDYsCisJR1BJTzE2Nl9NTUMzX0RBVDUsCisJR1BJTzE2M19NTUMzX0RBVDQsCisJR1BJTzE2N19NTUMzX0RBVDMsCisJR1BJTzE2NF9NTUMzX0RBVDIsCisJR1BJTzE2OF9NTUMzX0RBVDEsCisJR1BJTzExMV9NTUMzX0RBVDAsCisJR1BJTzExMl9NTUMzX0NNRCwKKwlHUElPMTUxX01NQzNfQ0xLLAogfTsKIAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IG1heDg2NDlfc3VwcGx5W10gPSB7CkBAIC0xMjMsNiArMTUzLDEwIEBACiAJfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgc2RoY2lfcHhhX3BsYXRkYXRhIG1tcDJfc2RoX3BsYXRkYXRhX21tYzAgPSB7CisJLm1heF9zcGVlZAk9IDI1MDAwMDAwLAorfTsKKwogc3RhdGljIHZvaWQgX19pbml0IGphc3Blcl9pbml0KHZvaWQpCiB7CiAJbWZwX2NvbmZpZyhBUlJBWV9BTkRfU0laRShqYXNwZXJfcGluX2NvbmZpZykpOwpAQCAtMTMxLDYgKzE2NSw3IEBACiAJbW1wMl9hZGRfdWFydCgxKTsKIAltbXAyX2FkZF91YXJ0KDMpOwogCW1tcDJfYWRkX3R3c2koMSwgTlVMTCwgQVJSQVlfQU5EX1NJWkUoamFzcGVyX3R3c2kxX2luZm8pKTsKKwltbXAyX2FkZF9zZGhvc3QoMCwgJm1tcDJfc2RoX3BsYXRkYXRhX21tYzApOyAvKiBTRC9NTUMgKi8KIAogCXJlZ3VsYXRvcl9oYXNfZnVsbF9jb25zdHJhaW50cygpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvbW1wMi5jIGIvYXJjaC9hcm0vbWFjaC1tbXAvbW1wMi5jCmluZGV4IDJlM2RkMDguLjhlNmMzYWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbW1wL21tcDIuYworKysgYi9hcmNoL2FybS9tYWNoLW1tcC9tbXAyLmMKQEAgLTExNSw2ICsxMTUsMjkgQEAKIAltbXAyX2luaXRfZ3BpbygpOwogfQogCitzdGF0aWMgdm9pZCBzZGhjX2Nsa19lbmFibGUoc3RydWN0IGNsayAqY2xrKQoreworCXVpbnQzMl90IGNsa19yc3Q7CisKKwljbGtfcnN0ICA9ICBfX3Jhd19yZWFkbChjbGstPmNsa19yc3QpOworCWNsa19yc3QgfD0gY2xrLT5lbmFibGVfdmFsOworCV9fcmF3X3dyaXRlbChjbGtfcnN0LCBjbGstPmNsa19yc3QpOworfQorCitzdGF0aWMgdm9pZCBzZGhjX2Nsa19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1aW50MzJfdCBjbGtfcnN0OworCisJY2xrX3JzdCAgPSAgX19yYXdfcmVhZGwoY2xrLT5jbGtfcnN0KTsKKwljbGtfcnN0ICY9IH5jbGstPmVuYWJsZV92YWw7CisJX19yYXdfd3JpdGVsKGNsa19yc3QsIGNsay0+Y2xrX3JzdCk7Cit9CisKK3N0cnVjdCBjbGtvcHMgc2RoY19jbGtfb3BzID0geworCS5lbmFibGUJCT0gc2RoY19jbGtfZW5hYmxlLAorCS5kaXNhYmxlCT0gc2RoY19jbGtfZGlzYWJsZSwKK307CisKIC8qIEFQQiBwZXJpcGhlcmFsIGNsb2NrcyAqLwogc3RhdGljIEFQQkNfQ0xLKHVhcnQxLCBNTVAyX1VBUlQxLCAxLCAyNjAwMDAwMCk7CiBzdGF0aWMgQVBCQ19DTEsodWFydDIsIE1NUDJfVUFSVDIsIDEsIDI2MDAwMDAwKTsKQEAgLTEyOCw2ICsxNTEsMTAgQEAKIHN0YXRpYyBBUEJDX0NMSyh0d3NpNiwgTU1QMl9UV1NJNiwgMCwgMjYwMDAwMDApOwogCiBzdGF0aWMgQVBNVV9DTEsobmFuZCwgTkFORCwgMHhiZiwgMTAwMDAwMDAwKTsKK3N0YXRpYyBBUE1VX0NMS19PUFMoc2RoMCwgU0RIMCwgMHgxYiwgMjAwMDAwMDAwLCAmc2RoY19jbGtfb3BzKTsKK3N0YXRpYyBBUE1VX0NMS19PUFMoc2RoMSwgU0RIMSwgMHgxYiwgMjAwMDAwMDAwLCAmc2RoY19jbGtfb3BzKTsKK3N0YXRpYyBBUE1VX0NMS19PUFMoc2RoMiwgU0RIMiwgMHgxYiwgMjAwMDAwMDAwLCAmc2RoY19jbGtfb3BzKTsKK3N0YXRpYyBBUE1VX0NMS19PUFMoc2RoMywgU0RIMywgMHgxYiwgMjAwMDAwMDAwLCAmc2RoY19jbGtfb3BzKTsKIAogc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIG1tcDJfY2xrcmVnc1tdID0gewogCUlOSVRfQ0xLUkVHKCZjbGtfdWFydDEsICJweGEyeHgtdWFydC4wIiwgTlVMTCksCkBAIC0xNDEsNiArMTY4LDEwIEBACiAJSU5JVF9DTEtSRUcoJmNsa190d3NpNSwgInB4YTJ4eC1pMmMuNCIsIE5VTEwpLAogCUlOSVRfQ0xLUkVHKCZjbGtfdHdzaTYsICJweGEyeHgtaTJjLjUiLCBOVUxMKSwKIAlJTklUX0NMS1JFRygmY2xrX25hbmQsICJweGEzeHgtbmFuZCIsIE5VTEwpLAorCUlOSVRfQ0xLUkVHKCZjbGtfc2RoMCwgInNkaGNpLXB4YS4wIiwgIlBYQS1TREhDTEsiKSwKKwlJTklUX0NMS1JFRygmY2xrX3NkaDEsICJzZGhjaS1weGEuMSIsICJQWEEtU0RIQ0xLIiksCisJSU5JVF9DTEtSRUcoJmNsa19zZGgyLCAic2RoY2ktcHhhLjIiLCAiUFhBLVNESENMSyIpLAorCUlOSVRfQ0xLUkVHKCZjbGtfc2RoMywgInNkaGNpLXB4YS4zIiwgIlBYQS1TREhDTEsiKSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IG1tcDJfaW5pdCh2b2lkKQpAQCAtMTkxLDQgKzIyMiw4IEBACiBNTVAyX0RFVklDRSh0d3NpNSwgInB4YTJ4eC1pMmMiLCA0LCBUV1NJNSwgMHhkNDAzMzgwMCwgMHg3MCk7CiBNTVAyX0RFVklDRSh0d3NpNiwgInB4YTJ4eC1pMmMiLCA1LCBUV1NJNiwgMHhkNDAzNDAwMCwgMHg3MCk7CiBNTVAyX0RFVklDRShuYW5kLCAicHhhM3h4LW5hbmQiLCAtMSwgTkFORCwgMHhkNDI4MzAwMCwgMHgxMDAsIDI4LCAyOSk7CitNTVAyX0RFVklDRShzZGgwLCAic2RoY2ktcHhhIiwgMCwgTU1DLCAweGQ0MjgwMDAwLCAweDEyMCk7CitNTVAyX0RFVklDRShzZGgxLCAic2RoY2ktcHhhIiwgMSwgTU1DMiwgMHhkNDI4MDgwMCwgMHgxMjApOworTU1QMl9ERVZJQ0Uoc2RoMiwgInNkaGNpLXB4YSIsIDIsIE1NQzMsIDB4ZDQyODEwMDAsIDB4MTIwKTsKK01NUDJfREVWSUNFKHNkaDMsICJzZGhjaS1weGEiLCAzLCBNTUM0LCAweGQ0MjgxODAwLCAweDEyMCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbW1wL3B4YTkxMC5jIGIvYXJjaC9hcm0vbWFjaC1tbXAvcHhhOTEwLmMKaW5kZXggNDZmMmQ2OS4uOGY5MmNjZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tbXAvcHhhOTEwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1tbXAvcHhhOTEwLmMKQEAgLTExMSw2ICsxMTEsNyBAQAogc3RhdGljIEFQQkNfQ0xLKHB3bTQsIFBYQTkxMF9QV000LCAxLCAxMzAwMDAwMCk7CiAKIHN0YXRpYyBBUE1VX0NMSyhuYW5kLCBOQU5ELCAweDAxZGIsIDIwODAwMDAwMCk7CitzdGF0aWMgQVBNVV9DTEsodTJvLCBVU0IsIDB4MWIsIDQ4MDAwMDAwMCk7CiAKIC8qIGRldmljZSBhbmQgY2xvY2sgYmluZGluZ3MgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCBweGE5MTBfY2xrcmVnc1tdID0gewpAQCAtMTIzLDYgKzEyNCw3IEBACiAJSU5JVF9DTEtSRUcoJmNsa19wd20zLCAicHhhOTEwLXB3bS4yIiwgTlVMTCksCiAJSU5JVF9DTEtSRUcoJmNsa19wd200LCAicHhhOTEwLXB3bS4zIiwgTlVMTCksCiAJSU5JVF9DTEtSRUcoJmNsa19uYW5kLCAicHhhM3h4LW5hbmQiLCBOVUxMKSwKKwlJTklUX0NMS1JFRygmY2xrX3UybywgInB4YS11Mm8iLCAiVTJPQ0xLIiksCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBweGE5MTBfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvdGltZS5jIGIvYXJjaC9hcm0vbWFjaC1tbXAvdGltZS5jCmluZGV4IDY2NTI4MTkuLmFlYjlhZTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbW1wL3RpbWUuYworKysgYi9hcmNoL2FybS9tYWNoLW1tcC90aW1lLmMKQEAgLTI2LDggKzI2LDggQEAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvY250MzJfdG9fNjMuaD4KIAorI2luY2x1ZGUgPGFzbS9zY2hlZF9jbG9jay5oPgogI2luY2x1ZGUgPG1hY2gvYWRkci1tYXAuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtdGltZXJzLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWFwYmMuaD4KQEAgLTQyLDIzICs0Miw3IEBACiAjZGVmaW5lIE1BWF9ERUxUQQkJKDB4ZmZmZmZmZmUpCiAjZGVmaW5lIE1JTl9ERUxUQQkJKDE2KQogCi0jZGVmaW5lIFRDUjJOU19TQ0FMRV9GQUNUT1IJMTAKLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgdGNyMm5zX3NjYWxlOwotCi1zdGF0aWMgdm9pZCBfX2luaXQgc2V0X3RjcjJuc19zY2FsZSh1bnNpZ25lZCBsb25nIHRjcl9yYXRlKQotewotCXVuc2lnbmVkIGxvbmcgbG9uZyB2ID0gMTAwMDAwMDAwMFVMTCA8PCBUQ1IyTlNfU0NBTEVfRkFDVE9SOwotCWRvX2Rpdih2LCB0Y3JfcmF0ZSk7Ci0JdGNyMm5zX3NjYWxlID0gdjsKLQkvKgotCSAqIFdlIHdhbnQgYW4gZXZlbiB2YWx1ZSB0byBhdXRvbWF0aWNhbGx5IGNsZWFyIHRoZSB0b3AgYml0Ci0JICogcmV0dXJuZWQgYnkgY250MzJfdG9fNjMoKSB3aXRob3V0IGFuIGFkZGl0aW9uYWwgcnVuIHRpbWUKLQkgKiBpbnN0cnVjdGlvbi4gU28gaWYgdGhlIExTQiBpcyAxIHRoZW4gcm91bmQgaXQgdXAuCi0JICovCi0JaWYgKHRjcjJuc19zY2FsZSAmIDEpCi0JCXRjcjJuc19zY2FsZSsrOwotfQorc3RhdGljIERFRklORV9DTE9DS19EQVRBKGNkKTsKIAogLyoKICAqIEZJWE1FOiB0aGUgdGltZXIgbmVlZHMgc29tZSBkZWxheSB0byBzdGFibGl6ZSB0aGUgY291bnRlciBjYXB0dXJlCkBAIC03NSwxMCArNTksMTYgQEAKIAlyZXR1cm4gX19yYXdfcmVhZGwoVElNRVJTX1ZJUlRfQkFTRSArIFRNUl9DVldSKDApKTsKIH0KIAotdW5zaWduZWQgbG9uZyBsb25nIHNjaGVkX2Nsb2NrKHZvaWQpCit1bnNpZ25lZCBsb25nIGxvbmcgbm90cmFjZSBzY2hlZF9jbG9jayh2b2lkKQogewotCXVuc2lnbmVkIGxvbmcgbG9uZyB2ID0gY250MzJfdG9fNjModGltZXJfcmVhZCgpKTsKLQlyZXR1cm4gKHYgKiB0Y3IybnNfc2NhbGUpID4+IFRDUjJOU19TQ0FMRV9GQUNUT1I7CisJdTMyIGN5YyA9IHRpbWVyX3JlYWQoKTsKKwlyZXR1cm4gY3ljX3RvX3NjaGVkX2Nsb2NrKCZjZCwgY3ljLCAodTMyKX4wKTsKK30KKworc3RhdGljIHZvaWQgbm90cmFjZSBtbXBfdXBkYXRlX3NjaGVkX2Nsb2NrKHZvaWQpCit7CisJdTMyIGN5YyA9IHRpbWVyX3JlYWQoKTsKKwl1cGRhdGVfc2NoZWRfY2xvY2soJmNkLCBjeWMsICh1MzIpfjApOwogfQogCiBzdGF0aWMgaXJxcmV0dXJuX3QgdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKQEAgLTE0Niw3ICsxMzYsNiBAQAogCiBzdGF0aWMgc3RydWN0IGNsb2Nrc291cmNlIGNrc3JjID0gewogCS5uYW1lCQk9ICJjbG9ja3NvdXJjZSIsCi0JLnNoaWZ0CQk9IDIwLAogCS5yYXRpbmcJCT0gMjAwLAogCS5yZWFkCQk9IGNsa3NyY19yZWFkLAogCS5tYXNrCQk9IENMT0NLU09VUkNFX01BU0soMzIpLApAQCAtMTg2LDE3ICsxNzUsMTUgQEAKIHsKIAl0aW1lcl9jb25maWcoKTsKIAotCXNldF90Y3IybnNfc2NhbGUoQ0xPQ0tfVElDS19SQVRFKTsKKwlpbml0X3NjaGVkX2Nsb2NrKCZjZCwgbW1wX3VwZGF0ZV9zY2hlZF9jbG9jaywgMzIsIENMT0NLX1RJQ0tfUkFURSk7CiAKIAlja2V2dC5tdWx0ID0gZGl2X3NjKENMT0NLX1RJQ0tfUkFURSwgTlNFQ19QRVJfU0VDLCBja2V2dC5zaGlmdCk7CiAJY2tldnQubWF4X2RlbHRhX25zID0gY2xvY2tldmVudF9kZWx0YTJucyhNQVhfREVMVEEsICZja2V2dCk7CiAJY2tldnQubWluX2RlbHRhX25zID0gY2xvY2tldmVudF9kZWx0YTJucyhNSU5fREVMVEEsICZja2V2dCk7CiAJY2tldnQuY3B1bWFzayA9IGNwdW1hc2tfb2YoMCk7CiAKLQlja3NyYy5tdWx0ID0gY2xvY2tzb3VyY2VfaHoybXVsdChDTE9DS19USUNLX1JBVEUsIGNrc3JjLnNoaWZ0KTsKLQogCXNldHVwX2lycShpcnEsICZ0aW1lcl9pcnEpOwogCi0JY2xvY2tzb3VyY2VfcmVnaXN0ZXIoJmNrc3JjKTsKKwljbG9ja3NvdXJjZV9yZWdpc3Rlcl9oeigmY2tzcmMsIENMT0NLX1RJQ0tfUkFURSk7CiAJY2xvY2tldmVudHNfcmVnaXN0ZXJfZGV2aWNlKCZja2V2dCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1zbS9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1tc20vS2NvbmZpZwppbmRleCBkYmJjZmViLi5mYWU5MzFhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW1zbS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtbXNtL0tjb25maWcKQEAgLTQ0LDExICs0NCwxNCBAQAogCXNlbGVjdCBDUFVfVjcKIAlzZWxlY3QgTVNNX1YyX1RMTU0KIAlzZWxlY3QgTVNNX0dQSU9NVVgKKwlzZWxlY3QgSU9NTVVfQVBJCiAKIGVuZGNob2ljZQogCiBjb25maWcgTVNNX1NPQ19SRVZfQQogCWJvb2wKK2NvbmZpZyAgQVJDSF9NU01fU0NPUlBJT05NUAorCWJvb2wKIAogY29uZmlnICBBUkNIX01TTV9BUk0xMQogCWJvb2wKQEAgLTEyMiw2ICsxMjUsMTAgQEAKIAogZW5kbWVudQogCitjb25maWcgSU9NTVVfUEdUQUJMRVNfTDIKKwlkZWZfYm9vbCB5CisJZGVwZW5kcyBvbiBBUkNIX01TTThYNjAgJiYgTU1VICYmIFNNUCAmJiBDUFVfRENBQ0hFX0RJU0FCTEU9bgorCiBjb25maWcgTVNNX0RFQlVHX1VBUlQKIAlpbnQKIAlkZWZhdWx0IDEgaWYgTVNNX0RFQlVHX1VBUlQxCkBAIC0xNjIsNCArMTY5LDcgQEAKIAogY29uZmlnIE1TTV9WMl9UTE1NCiAJYm9vbAorCitjb25maWcgSU9NTVVfQVBJCisJYm9vbAogZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXNtL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1tc20vTWFrZWZpbGUKaW5kZXggYjVhN2IwNy4uNTk2NDZiYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tc20vTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1tc20vTWFrZWZpbGUKQEAgLTIwLDYgKzIwLDcgQEAKIG9iai0kKENPTkZJR19NU01fU01EKSArPSBsYXN0X3JhZGlvX2xvZy5vCiAKIG9iai0kKENPTkZJR19NQUNIX1RST1VUKSArPSBib2FyZC10cm91dC5vIGJvYXJkLXRyb3V0LWdwaW8ubyBib2FyZC10cm91dC1tbWMubyBkZXZpY2VzLW1zbTd4MDAubworb2JqLSQoQ09ORklHX01BQ0hfVFJPVVQpICs9IGJvYXJkLXRyb3V0Lm8gYm9hcmQtdHJvdXQtZ3Bpby5vIGJvYXJkLXRyb3V0LW1tYy5vIGJvYXJkLXRyb3V0LXBhbmVsLm8gZGV2aWNlcy1tc203eDAwLm8KIG9iai0kKENPTkZJR19NQUNIX0hBTElCVVQpICs9IGJvYXJkLWhhbGlidXQubyBkZXZpY2VzLW1zbTd4MDAubwogb2JqLSQoQ09ORklHX0FSQ0hfTVNNN1gzMCkgKz0gYm9hcmQtbXNtN3gzMC5vIGRldmljZXMtbXNtN3gzMC5vCiBvYmotJChDT05GSUdfQVJDSF9RU0Q4WDUwKSArPSBib2FyZC1xc2Q4eDUwLm8gZGV2aWNlcy1xc2Q4eDUwLm8KQEAgLTI4LDYgKzI5LDggQEAKIG9iai0kKENPTkZJR19BUkNIX01TTTdYMzApICs9IGdwaW9tdXgtN3gzMC5vIGdwaW9tdXgtdjEubyBncGlvbXV4Lm8KIG9iai0kKENPTkZJR19BUkNIX1FTRDhYNTApICs9IGdwaW9tdXgtOHg1MC5vIGdwaW9tdXgtdjEubyBncGlvbXV4Lm8KIG9iai0kKENPTkZJR19BUkNIX01TTThYNjApICs9IGdwaW9tdXgtOHg2MC5vIGdwaW9tdXgtdjIubyBncGlvbXV4Lm8KLWlmbmRlZiBDT05GSUdfTVNNX1YyX1RMTU0KK2lmZGVmIENPTkZJR19NU01fVjJfVExNTQorb2JqLXkJKz0gZ3Bpby12Mi5vCitlbHNlCiBvYmoteQkrPSBncGlvLm8KIGVuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1zbS9ib2FyZC1tc203eDMwLmMgYi9hcmNoL2FybS9tYWNoLW1zbS9ib2FyZC1tc203eDMwLmMKaW5kZXggMDUyNDFkZi4uNmYzYjk3MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tc20vYm9hcmQtbXNtN3gzMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXNtL2JvYXJkLW1zbTd4MzAuYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9zbXNjOTExeC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi9tc21faHN1c2IuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgpAQCAtMzksMTEgKzQwLDI2IEBACiAKIGV4dGVybiBzdHJ1Y3Qgc3lzX3RpbWVyIG1zbV90aW1lcjsKIAorc3RhdGljIGludCBoc3VzYl9waHlfaW5pdF9zZXFbXSA9IHsKKwkweDMwLCAweDMyLAkvKiBFbmFibGUgYW5kIHNldCBQcmUtRW1waGFzaXMgRGVwdGggdG8gMjAlICovCisJMHgwMiwgMHgzNiwJLyogRGlzYWJsZSBDRFIgQXV0byBSZXNldCBmZWF0dXJlICovCisJLTEKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXNtX290Z19wbGF0Zm9ybV9kYXRhIG1zbV9vdGdfcGRhdGEgPSB7CisJLnBoeV9pbml0X3NlcQkJPSBoc3VzYl9waHlfaW5pdF9zZXEsCisJLm1vZGUgICAgICAgICAgICAgICAgICAgPSBVU0JfUEVSSVBIRVJBTCwKKwkub3RnX2NvbnRyb2wJCT0gT1RHX1BIWV9DT05UUk9MLAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0gewogI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF9NU00pIHx8IGRlZmluZWQoQ09ORklHX01TTV9TRVJJQUxfREVCVUdHRVIpCiAgICAgICAgICZtc21fZGV2aWNlX3VhcnQyLAogI2VuZGlmCiAJJm1zbV9kZXZpY2Vfc21kLAorCSZtc21fZGV2aWNlX290ZywKKwkmbXNtX2RldmljZV9oc3VzYiwKKwkmbXNtX2RldmljZV9oc3VzYl9ob3N0LAogfTsKIAogc3RhdGljIHZvaWQgX19pbml0IG1zbTd4MzBfaW5pdF9pcnEodm9pZCkKQEAgLTUzLDYgKzY5LDEwIEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBtc203eDMwX2luaXQodm9pZCkKIHsKKwltc21fZGV2aWNlX290Zy5kZXYucGxhdGZvcm1fZGF0YSA9ICZtc21fb3RnX3BkYXRhOworCW1zbV9kZXZpY2VfaHN1c2IuZGV2LnBhcmVudCA9ICZtc21fZGV2aWNlX290Zy5kZXY7CisJbXNtX2RldmljZV9oc3VzYl9ob3N0LmRldi5wYXJlbnQgPSAmbXNtX2RldmljZV9vdGcuZGV2OworCiAJcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXNtL2JvYXJkLW1zbTh4NjAuYyBiL2FyY2gvYXJtL21hY2gtbXNtL2JvYXJkLW1zbTh4NjAuYwppbmRleCA3NDg2YTY4Li45YjVlYjJiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW1zbS9ib2FyZC1tc204eDYwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1tc20vYm9hcmQtbXNtOHg2MC5jCkBAIC0yOCw4ICsyOCw2IEBACiAjaW5jbHVkZSA8bWFjaC9ib2FyZC5oPgogI2luY2x1ZGUgPG1hY2gvbXNtX2lvbWFwLmg+CiAKLXZvaWQgX19pb21lbSAqZ2ljX2NwdV9iYXNlX2FkZHI7Ci0KIHVuc2lnbmVkIGxvbmcgY2xrX2dldF9tYXhfYXhpX2toeih2b2lkKQogewogCXJldHVybiAwOwpAQCAtNDQsOSArNDIsOCBAQAogewogCXVuc2lnbmVkIGludCBpOwogCi0JZ2ljX2Rpc3RfaW5pdCgwLCBNU01fUUdJQ19ESVNUX0JBU0UsIEdJQ19QUElfU1RBUlQpOwotCWdpY19jcHVfYmFzZV9hZGRyID0gKHZvaWQgKilNU01fUUdJQ19DUFVfQkFTRTsKLQlnaWNfY3B1X2luaXQoMCwgTVNNX1FHSUNfQ1BVX0JBU0UpOworCWdpY19pbml0KDAsIEdJQ19QUElfU1RBUlQsIE1TTV9RR0lDX0RJU1RfQkFTRSwKKwkJICh2b2lkICopTVNNX1FHSUNfQ1BVX0JBU0UpOwogCiAJLyogRWRnZSB0cmlnZ2VyIFBQSXMgZXhjZXB0IEFWU19TVklDSU5UIGFuZCBBVlNfU1ZJQ0lOVFNXRE9ORSAqLwogCXdyaXRlbCgweEZGRkZEN0ZGLCBNU01fUUdJQ19ESVNUX0JBU0UgKyBHSUNfRElTVF9DT05GSUcgKyA0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXNtL2JvYXJkLXFzZDh4NTAuYyBiL2FyY2gvYXJtL21hY2gtbXNtL2JvYXJkLXFzZDh4NTAuYwppbmRleCBlZDJhZjRhLi4yZTgzOTEzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW1zbS9ib2FyZC1xc2Q4eDUwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1tc20vYm9hcmQtcXNkOHg1MC5jCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiL21zbV9oc3VzYi5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CkBAIC03NCw5ICs3NSwyNCBAQAogfQogbW9kdWxlX2luaXQobXNtX2luaXRfc21jOTF4KTsKIAorc3RhdGljIGludCBoc3VzYl9waHlfaW5pdF9zZXFbXSA9IHsKKwkweDA4LCAweDMxLAkvKiBJbmNyZWFzZSBIUyBEcml2ZXIgQW1wbGl0dWRlICovCisJMHgyMCwgMHgzMiwJLyogRW5hYmxlIGFuZCBzZXQgUHJlLUVtcGhhc2lzIERlcHRoIHRvIDEwJSAqLworCS0xCit9OworCitzdGF0aWMgc3RydWN0IG1zbV9vdGdfcGxhdGZvcm1fZGF0YSBtc21fb3RnX3BkYXRhID0geworCS5waHlfaW5pdF9zZXEJCT0gaHN1c2JfcGh5X2luaXRfc2VxLAorCS5tb2RlICAgICAgICAgICAgICAgICAgID0gVVNCX1BFUklQSEVSQUwsCisJLm90Z19jb250cm9sCQk9IE9UR19QSFlfQ09OVFJPTCwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmbXNtX2RldmljZV91YXJ0MywKIAkmbXNtX2RldmljZV9zbWQsCisJJm1zbV9kZXZpY2Vfb3RnLAorCSZtc21fZGV2aWNlX2hzdXNiLAorCSZtc21fZGV2aWNlX2hzdXNiX2hvc3QsCiB9OwogCiBzdGF0aWMgdm9pZCBfX2luaXQgcXNkOHg1MF9tYXBfaW8odm9pZCkKQEAgLTkzLDYgKzEwOSw5IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBxc2Q4eDUwX2luaXQodm9pZCkKIHsKKwltc21fZGV2aWNlX290Zy5kZXYucGxhdGZvcm1fZGF0YSA9ICZtc21fb3RnX3BkYXRhOworCW1zbV9kZXZpY2VfaHN1c2IuZGV2LnBhcmVudCA9ICZtc21fZGV2aWNlX290Zy5kZXY7CisJbXNtX2RldmljZV9oc3VzYl9ob3N0LmRldi5wYXJlbnQgPSAmbXNtX2RldmljZV9vdGcuZGV2OwogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZXMsIEFSUkFZX1NJWkUoZGV2aWNlcykpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1zbS9ib2FyZC10cm91dC1ncGlvLmMgYi9hcmNoL2FybS9tYWNoLW1zbS9ib2FyZC10cm91dC1ncGlvLmMKaW5kZXggYzUwZjNhZi4uZjhjMDllZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tc20vYm9hcmQtdHJvdXQtZ3Bpby5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXNtL2JvYXJkLXRyb3V0LWdwaW8uYwpAQCAtNzIsNiArNzIsMTMgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCB0cm91dF9ncGlvX3RvX2lycShzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCit7CisJc3RydWN0IG1zbV9ncGlvX2NoaXAgKm1zbV9ncGlvID0gdG9fbXNtX2dwaW9fY2hpcChjaGlwKTsKKworCXJldHVybiBUUk9VVF9HUElPX1RPX0lOVChvZmZzZXQgKyBjaGlwLT5iYXNlKTsKK30KKwogI2RlZmluZSBUUk9VVF9HUElPX0JBTksobmFtZSwgcmVnX251bSwgYmFzZV9ncGlvLCBzaGFkb3dfdmFsKQkJXAogCXsJCQkJCQkJCVwKIAkJLmNoaXAgPSB7CQkJCQkJXApAQCAtODAsNiArODcsNyBAQAogCQkJLmRpcmVjdGlvbl9vdXRwdXQgPSBtc21fZ3Bpb2xpYl9kaXJlY3Rpb25fb3V0cHV0LCBcCiAJCQkuZ2V0CQkgID0gbXNtX2dwaW9saWJfZ2V0LAkJXAogCQkJLnNldAkJICA9IG1zbV9ncGlvbGliX3NldCwJCVwKKwkJCS50b19pcnEJCSAgPSB0cm91dF9ncGlvX3RvX2lycSwJCVwKIAkJCS5iYXNlCQkgID0gYmFzZV9ncGlvLAkJCVwKIAkJCS5uZ3BpbwkJICA9IDgsCQkJCVwKIAkJfSwJCQkJCQkJXApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tc20vYm9hcmQtdHJvdXQtcGFuZWwuYyBiL2FyY2gvYXJtL21hY2gtbXNtL2JvYXJkLXRyb3V0LXBhbmVsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI5YmI0OQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXNtL2JvYXJkLXRyb3V0LXBhbmVsLmMKQEAgLTAsMCArMSwyOTcgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtbXNtL2JvYXJkLXRyb3V0LW1kZGkuYworKiogQXV0aG9yOiBCcmlhbiBTd2V0bGFuZCA8c3dldGxhbmRAZ29vZ2xlLmNvbT4KKyovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vZ3Bpby5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKKyNpbmNsdWRlIDxtYWNoL21zbV9mYi5oPgorI2luY2x1ZGUgPG1hY2gvdnJlZy5oPgorCisjaW5jbHVkZSAiYm9hcmQtdHJvdXQuaCIKKyNpbmNsdWRlICJwcm9jX2NvbW0uaCIKKyNpbmNsdWRlICJkZXZpY2VzLmgiCisKKyNkZWZpbmUgVFJPVVRfREVGQVVMVF9CQUNLTElHSFRfQlJJR0hUTkVTUyAyNTUKKworI2RlZmluZSBNRERJX0NMSUVOVF9DT1JFX0JBU0UgIDB4MTA4MDAwCisjZGVmaW5lIExDRF9DT05UUk9MX0JMT0NLX0JBU0UgMHgxMTAwMDAKKyNkZWZpbmUgU1BJX0JMT0NLX0JBU0UgICAgICAgICAweDEyMDAwMAorI2RlZmluZSBJMkNfQkxPQ0tfQkFTRSAgICAgICAgIDB4MTMwMDAwCisjZGVmaW5lIFBXTV9CTE9DS19CQVNFICAgICAgICAgMHgxNDAwMDAKKyNkZWZpbmUgR1BJT19CTE9DS19CQVNFICAgICAgICAweDE1MDAwMAorI2RlZmluZSBTWVNURU1fQkxPQ0sxX0JBU0UgICAgIDB4MTYwMDAwCisjZGVmaW5lIFNZU1RFTV9CTE9DSzJfQkFTRSAgICAgMHgxNzAwMDAKKworCisjZGVmaW5lCURQU1VTICAgICAgIChNRERJX0NMSUVOVF9DT1JFX0JBU0V8MHgyNCkKKyNkZWZpbmUJU1lTQ0xLRU5BICAgKE1ERElfQ0xJRU5UX0NPUkVfQkFTRXwweDJDKQorI2RlZmluZQlQV00wT0ZGCSAgICAgIChQV01fQkxPQ0tfQkFTRXwweDFDKQorCisjZGVmaW5lIFZfVkRERTJFX1ZERDJfR1BJTyAwCisjZGVmaW5lIE1ERElfUlNUX04gODIKKworI2RlZmluZQlNRERJQ0FQMCAgICAoTURESV9DTElFTlRfQ09SRV9CQVNFfDB4MDApCisjZGVmaW5lCU1ERElDQVAxICAgIChNRERJX0NMSUVOVF9DT1JFX0JBU0V8MHgwNCkKKyNkZWZpbmUJTURESUNBUDIgICAgKE1ERElfQ0xJRU5UX0NPUkVfQkFTRXwweDA4KQorI2RlZmluZQlNRERJQ0FQMyAgICAoTURESV9DTElFTlRfQ09SRV9CQVNFfDB4MEMpCisjZGVmaW5lCU1EQ0FQQ0hHICAgIChNRERJX0NMSUVOVF9DT1JFX0JBU0V8MHgxMCkKKyNkZWZpbmUJTURDUkNFUkMgICAgKE1ERElfQ0xJRU5UX0NPUkVfQkFTRXwweDE0KQorI2RlZmluZQlUVEJVU1NFTCAgICAoTURESV9DTElFTlRfQ09SRV9CQVNFfDB4MTgpCisjZGVmaW5lCURQU0VUMCAgICAgIChNRERJX0NMSUVOVF9DT1JFX0JBU0V8MHgxQykKKyNkZWZpbmUJRFBTRVQxICAgICAgKE1ERElfQ0xJRU5UX0NPUkVfQkFTRXwweDIwKQorI2RlZmluZQlEUFNVUyAgICAgICAoTURESV9DTElFTlRfQ09SRV9CQVNFfDB4MjQpCisjZGVmaW5lCURQUlVOICAgICAgIChNRERJX0NMSUVOVF9DT1JFX0JBU0V8MHgyOCkKKyNkZWZpbmUJU1lTQ0tFTkEgICAgKE1ERElfQ0xJRU5UX0NPUkVfQkFTRXwweDJDKQorI2RlZmluZQlURVNUTU9ERSAgICAoTURESV9DTElFTlRfQ09SRV9CQVNFfDB4MzApCisjZGVmaW5lCUZJRk9NT05JICAgIChNRERJX0NMSUVOVF9DT1JFX0JBU0V8MHgzNCkKKyNkZWZpbmUJSU5UTU9OSSAgICAgKE1ERElfQ0xJRU5UX0NPUkVfQkFTRXwweDM4KQorI2RlZmluZQlNRElPQklTVCAgICAoTURESV9DTElFTlRfQ09SRV9CQVNFfDB4M0MpCisjZGVmaW5lCU1ESU9QU0VUICAgIChNRERJX0NMSUVOVF9DT1JFX0JBU0V8MHg0MCkKKyNkZWZpbmUJQklUTUFQMCAgICAgKE1ERElfQ0xJRU5UX0NPUkVfQkFTRXwweDQ0KQorI2RlZmluZQlCSVRNQVAxICAgICAoTURESV9DTElFTlRfQ09SRV9CQVNFfDB4NDgpCisjZGVmaW5lCUJJVE1BUDIgICAgIChNRERJX0NMSUVOVF9DT1JFX0JBU0V8MHg0QykKKyNkZWZpbmUJQklUTUFQMyAgICAgKE1ERElfQ0xJRU5UX0NPUkVfQkFTRXwweDUwKQorI2RlZmluZQlCSVRNQVA0ICAgICAoTURESV9DTElFTlRfQ09SRV9CQVNFfDB4NTQpCisKKyNkZWZpbmUJU1JTVCAgICAgICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHgwMCkKKyNkZWZpbmUJUE9SVF9FTkIgICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHgwNCkKKyNkZWZpbmUJU1RBUlQgICAgICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHgwOCkKKyNkZWZpbmUJUE9SVCAgICAgICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHgwQykKKyNkZWZpbmUJQ01OICAgICAgICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHgxMCkKKyNkZWZpbmUJR0FNTUEgICAgICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHgxNCkKKyNkZWZpbmUJSU5URkxHICAgICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHgxOCkKKyNkZWZpbmUJSU5UTVNLICAgICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHgxQykKKyNkZWZpbmUJTVBMRkJVRiAgICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHgyMCkKKyNkZWZpbmUJSERFX0xFRlQgICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHgyNCkKKyNkZWZpbmUJVkRFX1RPUCAgICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHgyOCkKKyNkZWZpbmUJUFhMICAgICAgICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHgzMCkKKyNkZWZpbmUJSENZQ0xFICAgICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHgzNCkKKyNkZWZpbmUJSFNXICAgICAgICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHgzOCkKKyNkZWZpbmUJSERFX1NUQVJUICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHgzQykKKyNkZWZpbmUJSERFX1NJWkUgICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHg0MCkKKyNkZWZpbmUJVkNZQ0xFICAgICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHg0NCkKKyNkZWZpbmUJVlNXICAgICAgICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHg0OCkKKyNkZWZpbmUJVkRFX1NUQVJUICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHg0QykKKyNkZWZpbmUJVkRFX1NJWkUgICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHg1MCkKKyNkZWZpbmUJV0FLRVVQICAgICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHg1NCkKKyNkZWZpbmUJV1NZTl9ETFkgICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHg1OCkKKyNkZWZpbmUJUkVHRU5CICAgICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHg1QykKKyNkZWZpbmUJVlNZTklGICAgICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHg2MCkKKyNkZWZpbmUJV1JTVEIgICAgICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHg2NCkKKyNkZWZpbmUJUkRTVEIgICAgICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHg2OCkKKyNkZWZpbmUJQVNZX0RBVEEgICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHg2QykKKyNkZWZpbmUJQVNZX0RBVEIgICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHg3MCkKKyNkZWZpbmUJQVNZX0RBVEMgICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHg3NCkKKyNkZWZpbmUJQVNZX0RBVEQgICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHg3OCkKKyNkZWZpbmUJQVNZX0RBVEUgICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHg3QykKKyNkZWZpbmUJQVNZX0RBVEYgICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHg4MCkKKyNkZWZpbmUJQVNZX0RBVEcgICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHg4NCkKKyNkZWZpbmUJQVNZX0RBVEggICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHg4OCkKKyNkZWZpbmUJQVNZX0NNRFNFVCAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHg4QykKKworI2RlZmluZQlTU0lDVEwgICAgICAoU1BJX0JMT0NLX0JBU0V8MHgwMCkKKyNkZWZpbmUJU1NJVElNRSAgICAgKFNQSV9CTE9DS19CQVNFfDB4MDQpCisjZGVmaW5lCVNTSVRYICAgICAgIChTUElfQkxPQ0tfQkFTRXwweDA4KQorI2RlZmluZQlTU0lSWCAgICAgICAoU1BJX0JMT0NLX0JBU0V8MHgwQykKKyNkZWZpbmUJU1NJSU5UQyAgICAgKFNQSV9CTE9DS19CQVNFfDB4MTApCisjZGVmaW5lCVNTSUlOVFMgICAgIChTUElfQkxPQ0tfQkFTRXwweDE0KQorI2RlZmluZQlTU0lEQkcxICAgICAoU1BJX0JMT0NLX0JBU0V8MHgxOCkKKyNkZWZpbmUJU1NJREJHMiAgICAgKFNQSV9CTE9DS19CQVNFfDB4MUMpCisjZGVmaW5lCVNTSUlEICAgICAgIChTUElfQkxPQ0tfQkFTRXwweDIwKQorCisjZGVmaW5lCVdLUkVRICAgICAgIChTWVNURU1fQkxPQ0sxX0JBU0V8MHgwMCkKKyNkZWZpbmUJQ0xLRU5CICAgICAgKFNZU1RFTV9CTE9DSzFfQkFTRXwweDA0KQorI2RlZmluZQlEUkFNUFdSICAgICAoU1lTVEVNX0JMT0NLMV9CQVNFfDB4MDgpCisjZGVmaW5lCUlOVE1BU0sgICAgIChTWVNURU1fQkxPQ0sxX0JBU0V8MHgwQykKKyNkZWZpbmUJR1BJT1NFTCAgICAgKFNZU1RFTV9CTE9DSzJfQkFTRXwweDAwKQorCisjZGVmaW5lCUdQSU9EQVRBICAgIChHUElPX0JMT0NLX0JBU0V8MHgwMCkKKyNkZWZpbmUJR1BJT0RJUiAgICAgKEdQSU9fQkxPQ0tfQkFTRXwweDA0KQorI2RlZmluZQlHUElPSVMgICAgICAoR1BJT19CTE9DS19CQVNFfDB4MDgpCisjZGVmaW5lCUdQSU9JQkUgICAgIChHUElPX0JMT0NLX0JBU0V8MHgwQykKKyNkZWZpbmUJR1BJT0lFViAgICAgKEdQSU9fQkxPQ0tfQkFTRXwweDEwKQorI2RlZmluZQlHUElPSUUgICAgICAoR1BJT19CTE9DS19CQVNFfDB4MTQpCisjZGVmaW5lCUdQSU9SSVMgICAgIChHUElPX0JMT0NLX0JBU0V8MHgxOCkKKyNkZWZpbmUJR1BJT01JUyAgICAgKEdQSU9fQkxPQ0tfQkFTRXwweDFDKQorI2RlZmluZQlHUElPSUMgICAgICAoR1BJT19CTE9DS19CQVNFfDB4MjApCisjZGVmaW5lCUdQSU9PTVMgICAgIChHUElPX0JMT0NLX0JBU0V8MHgyNCkKKyNkZWZpbmUJR1BJT1BDICAgICAgKEdQSU9fQkxPQ0tfQkFTRXwweDI4KQorI2RlZmluZQlHUElPSUQgICAgICAoR1BJT19CTE9DS19CQVNFfDB4MzApCisKKyNkZWZpbmUgU1BJX1dSSVRFKHJlZywgdmFsKSBcCisJeyBTU0lUWCwgICAgICAgIDB4MDAwMTAwMDAgfCAoKChyZWcpICYgMHhmZikgPDwgOCkgfCAoKHZhbCkgJiAweGZmKSB9LCBcCisJeyAwLCA1IH0sCisKKyNkZWZpbmUgU1BJX1dSSVRFMShyZWcpIFwKKwl7IFNTSVRYLCAgICAgICAgKHJlZykgJiAweGZmIH0sIFwKKwl7IDAsIDUgfSwKKworc3RydWN0IG1kZGlfdGFibGUgeworCXVpbnQzMl90IHJlZzsKKwl1aW50MzJfdCB2YWx1ZTsKK307CitzdGF0aWMgc3RydWN0IG1kZGlfdGFibGUgbWRkaV90b3NoaWJhX2luaXRfdGFibGVbXSA9IHsKKwl7IERQU0VUMCwgICAgICAgMHgwOWU5MDA0NiB9LAorCXsgRFBTRVQxLCAgICAgICAweDAwMDAwMTE4IH0sCisJeyBEUFNVUywgICAgICAgIDB4MDAwMDAwMDAgfSwKKwl7IERQUlVOLCAgICAgICAgMHgwMDAwMDAwMSB9LAorCXsgMSwgICAgICAgICAgICAxNCAgICAgICAgIH0sIC8qIG1zbGVlcCAxNCAqLworCXsgU1lTQ0tFTkEsICAgICAweDAwMDAwMDAxIH0sCisJeyBDTEtFTkIsICAgICAgIDB4MDAwMEExRUYgfSwgIC8qICAgICMgU1lTLkNMS0VOQiAgIyBFbmFibGUgY2xvY2tzIGZvciBlYWNoIG1vZHVsZSAod2l0aG91dCBEQ0xLICwgaTJjQ0xLKSAqLworCisJeyBHUElPREFUQSwgICAgIDB4MDIwMDAyMDAgfSwgIC8qICAgIyBHUEkgLkdQSU9EQVRBICAjIEdQSU8yKFJFU0VUX0xDRF9OKSBzZXQgdG8gMCAsIEdQSU8zKGVEUkFNX1Bvd2VyKSBzZXQgdG8gMCAqLworCXsgR1BJT0RJUiwgICAgICAweDAwMDAzMEQgIH0sICAvKiAyNEQgICAjIEdQSSAuR1BJT0RJUiAgIyBTZWxlY3QgZGlyZWN0aW9uIG9mIEdQSU8gcG9ydCAoMCwyLDMsNiw5IG91dHB1dCkgKi8KKwl7IEdQSU9TRUwsICAgICAgMC8qMHgwMDAwMDE3MyovfSwgIC8qICAgIyBTWVMuR1BJT1NFTCAgIyBHUElPIHBvcnQgbXVsdGlwbGV4aW5nIGNvbnRyb2wgKi8KKwl7IEdQSU9QQywgICAgICAgMHgwM0MzMDBDMCB9LCAgLyogICAjIEdQSSAuR1BJT1BDICAjIEdQSU8yLDMgUEQgY3V0ICovCisJeyBXS1JFUSwgICAgICAgIDB4MDAwMDAwMDAgfSwgIC8qICAgIyBTWVMuV0tSRVEgICMgV2FrZS11cCByZXF1ZXN0IGV2ZW50IGlzIFZTWU5DIGFsaWdubWVudCAqLworCisJeyBHUElPSUJFLCAgICAgIDB4MDAwMDAzRkYgfSwKKwl7IEdQSU9JUywgICAgICAgMHgwMDAwMDAwMCB9LAorCXsgR1BJT0lDLCAgICAgICAweDAwMDAwM0ZGIH0sCisJeyBHUElPSUUsICAgICAgIDB4MDAwMDAwMDAgfSwKKworCXsgR1BJT0RBVEEsICAgICAweDAwMDQwMDA0IH0sICAvKiAgICMgR1BJIC5HUElPREFUQSAgIyBlRFJBTSBWRCBzdXBwbHkgKi8KKwl7IDEsICAgICAgICAgICAgMSAgICAgICAgICB9LCAvKiBtc2xlZXAgMSAqLworCXsgR1BJT0RBVEEsICAgICAweDAyMDQwMDA0IH0sICAvKiAgICMgR1BJIC5HUElPREFUQSAgIyBlRFJBTSBWRCBzdXBwbHkgKi8KKwl7IERSQU1QV1IsICAgICAgMHgwMDAwMDAwMSB9LCAvKiBlRFJBTSBwb3dlciAqLworfTsKKworI2RlZmluZSBHUElPU0VMX1ZXQUtFSU5UICgxVSA8PCAwKQorI2RlZmluZSBJTlRNQVNLX1ZXQUtFT1VUICgxVSA8PCAwKQorCisKK3N0YXRpYyBzdHJ1Y3QgY2xrICpncF9jbGs7CitzdGF0aWMgaW50IHRyb3V0X25ld19iYWNrbGlnaHQgPSAxOworc3RhdGljIHN0cnVjdCB2cmVnICp2cmVnX21kZGlfMXY1Oworc3RhdGljIHN0cnVjdCB2cmVnICp2cmVnX2xjbV8ydjg1OworCitzdGF0aWMgdm9pZCB0cm91dF9wcm9jZXNzX21kZGlfdGFibGUoc3RydWN0IG1zbV9tZGRpX2NsaWVudF9kYXRhICpjbGllbnRfZGF0YSwKKwkJCQkgICAgIHN0cnVjdCBtZGRpX3RhYmxlICp0YWJsZSwgc2l6ZV90IGNvdW50KQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCXVpbnQzMl90IHJlZyA9IHRhYmxlW2ldLnJlZzsKKwkJdWludDMyX3QgdmFsdWUgPSB0YWJsZVtpXS52YWx1ZTsKKworCQlpZiAocmVnID09IDApCisJCQl1ZGVsYXkodmFsdWUpOworCQllbHNlIGlmIChyZWcgPT0gMSkKKwkJCW1zbGVlcCh2YWx1ZSk7CisJCWVsc2UKKwkJCWNsaWVudF9kYXRhLT5yZW1vdGVfd3JpdGUoY2xpZW50X2RhdGEsIHZhbHVlLCByZWcpOworCX0KK30KKworc3RhdGljIGludCB0cm91dF9tZGRpX3Rvc2hpYmFfY2xpZW50X2luaXQoCisJc3RydWN0IG1zbV9tZGRpX2JyaWRnZV9wbGF0Zm9ybV9kYXRhICpicmlkZ2VfZGF0YSwKKwlzdHJ1Y3QgbXNtX21kZGlfY2xpZW50X2RhdGEgKmNsaWVudF9kYXRhKQoreworCWludCBwYW5lbF9pZDsKKworCWNsaWVudF9kYXRhLT5hdXRvX2hpYmVybmF0ZShjbGllbnRfZGF0YSwgMCk7CisJdHJvdXRfcHJvY2Vzc19tZGRpX3RhYmxlKGNsaWVudF9kYXRhLCBtZGRpX3Rvc2hpYmFfaW5pdF90YWJsZSwKKwkJCQkgQVJSQVlfU0laRShtZGRpX3Rvc2hpYmFfaW5pdF90YWJsZSkpOworCWNsaWVudF9kYXRhLT5hdXRvX2hpYmVybmF0ZShjbGllbnRfZGF0YSwgMSk7CisJcGFuZWxfaWQgPSAoY2xpZW50X2RhdGEtPnJlbW90ZV9yZWFkKGNsaWVudF9kYXRhLCBHUElPREFUQSkgPj4gNCkgJiAzOworCWlmIChwYW5lbF9pZCA+IDEpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAidW5rbm93biBwYW5lbCBpZCBhdCBtZGRpX2VuYWJsZVxuIik7CisJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdHJvdXRfbWRkaV90b3NoaWJhX2NsaWVudF91bmluaXQoCisJc3RydWN0IG1zbV9tZGRpX2JyaWRnZV9wbGF0Zm9ybV9kYXRhICpicmlkZ2VfZGF0YSwKKwlzdHJ1Y3QgbXNtX21kZGlfY2xpZW50X2RhdGEgKmNsaWVudF9kYXRhKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHJlc291cmNlc19tc21fZmJbXSA9IHsKKwl7CisJCS5zdGFydCA9IE1TTV9GQl9CQVNFLAorCQkuZW5kID0gTVNNX0ZCX0JBU0UgKyBNU01fRkJfU0laRSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKK307CisKK3N0cnVjdCBtc21fbWRkaV9icmlkZ2VfcGxhdGZvcm1fZGF0YSB0b3NoaWJhX2NsaWVudF9kYXRhID0geworCS5pbml0ID0gdHJvdXRfbWRkaV90b3NoaWJhX2NsaWVudF9pbml0LAorCS51bmluaXQgPSB0cm91dF9tZGRpX3Rvc2hpYmFfY2xpZW50X3VuaW5pdCwKKwkuZmJfZGF0YSA9IHsKKwkJLnhyZXMgPSAzMjAsCisJCS55cmVzID0gNDgwLAorCQkud2lkdGggPSA0NSwKKwkJLmhlaWdodCA9IDY3LAorCQkub3V0cHV0X2Zvcm1hdCA9IDAsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXNtX21kZGlfcGxhdGZvcm1fZGF0YSBtZGRpX3BkYXRhID0geworCS5jbGtfcmF0ZSA9IDEyMjg4MDAwMCwKKwkuZmJfcmVzb3VyY2UgPSByZXNvdXJjZXNfbXNtX2ZiLAorCS5udW1fY2xpZW50cyA9IDEsCisJLmNsaWVudF9wbGF0Zm9ybV9kYXRhID0geworCQl7CisJCQkucHJvZHVjdF9pZCA9ICgweGQyNjMgPDwgMTYgfCAwKSwKKwkJCS5uYW1lID0gIm1kZGlfY19kMjYzXzAwMDAiLAorCQkJLmlkID0gMCwKKwkJCS5jbGllbnRfZGF0YSA9ICZ0b3NoaWJhX2NsaWVudF9kYXRhLAorCQkJLmNsa19yYXRlID0gMCwKKwkJfSwKKwl9LAorfTsKKworaW50IF9faW5pdCB0cm91dF9pbml0X3BhbmVsKHZvaWQpCit7CisJaW50IHJjOworCisJaWYgKCFtYWNoaW5lX2lzX3Ryb3V0KCkpCisJCXJldHVybiAwOworCXZyZWdfbWRkaV8xdjUgPSB2cmVnX2dldCgwLCAiZ3AyIik7CisJaWYgKElTX0VSUih2cmVnX21kZGlfMXY1KSkKKwkJcmV0dXJuIFBUUl9FUlIodnJlZ19tZGRpXzF2NSk7CisJdnJlZ19sY21fMnY4NSA9IHZyZWdfZ2V0KDAsICJncDQiKTsKKwlpZiAoSVNfRVJSKHZyZWdfbGNtXzJ2ODUpKQorCQlyZXR1cm4gUFRSX0VSUih2cmVnX2xjbV8ydjg1KTsKKworCXRyb3V0X25ld19iYWNrbGlnaHQgPSBzeXN0ZW1fcmV2ID49IDU7CisJaWYgKHRyb3V0X25ld19iYWNrbGlnaHQpIHsKKwkJdWludDMyX3QgY29uZmlnID0gUENPTV9HUElPX0NGRygyNywgMCwgR1BJT19PVVRQVVQsCisJCQkJCQlHUElPX05PX1BVTEwsIEdQSU9fOE1BKTsKKwkJbXNtX3Byb2NfY29tbShQQ09NX1JQQ19HUElPX1RMTU1fQ09ORklHX0VYLCAmY29uZmlnLCAwKTsKKwl9IGVsc2UgeworCQl1aW50MzJfdCBjb25maWcgPSBQQ09NX0dQSU9fQ0ZHKDI3LCAxLCBHUElPX09VVFBVVCwKKwkJCQkJCUdQSU9fTk9fUFVMTCwgR1BJT184TUEpOworCQltc21fcHJvY19jb21tKFBDT01fUlBDX0dQSU9fVExNTV9DT05GSUdfRVgsICZjb25maWcsIDApOworCisJCWdwX2NsayA9IGNsa19nZXQoTlVMTCwgImdwX2NsayIpOworCQlpZiAoSVNfRVJSKGdwX2NsaykpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAidHJvdXRfaW5pdF9wYW5lbDogY291bGQgbm90IGdldCBncCIKKwkJCSAgICAgICAiY2xvY2tcbiIpOworCQkJZ3BfY2xrID0gTlVMTDsKKwkJfQorCQlyYyA9IGNsa19zZXRfcmF0ZShncF9jbGssIDE5MjAwMDAwKTsKKwkJaWYgKHJjKQorCQkJcHJpbnRrKEtFUk5fRVJSICJ0cm91dF9pbml0X3BhbmVsOiBzZXQgY2xvY2sgcmF0ZSAiCisJCQkgICAgICAgImZhaWxlZFxuIik7CisJfQorCisJcmMgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm1zbV9kZXZpY2VfbWRwKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKwltc21fZGV2aWNlX21kZGkwLmRldi5wbGF0Zm9ybV9kYXRhID0gJm1kZGlfcGRhdGE7CisJcmV0dXJuIHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmbXNtX2RldmljZV9tZGRpMCk7Cit9CisKK2RldmljZV9pbml0Y2FsbCh0cm91dF9pbml0X3BhbmVsKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXNtL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLW1zbS9jbG9jay5jCmluZGV4IGM1NzIxMGYuLjIwNjliZmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXNtL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1tc20vY2xvY2suYwpAQCAtMTIwLDYgKzEyMCwyMSBAQAogCiBpbnQgY2xrX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQogeworCWludCByZXQ7CisJaWYgKGNsay0+ZmxhZ3MgJiBDTEtGTEFHX01BWCkgeworCQlyZXQgPSBjbGstPm9wcy0+c2V0X21heF9yYXRlKGNsay0+aWQsIHJhdGUpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisJaWYgKGNsay0+ZmxhZ3MgJiBDTEtGTEFHX01JTikgeworCQlyZXQgPSBjbGstPm9wcy0+c2V0X21pbl9yYXRlKGNsay0+aWQsIHJhdGUpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlpZiAoY2xrLT5mbGFncyAmIENMS0ZMQUdfTUFYIHx8IGNsay0+ZmxhZ3MgJiBDTEtGTEFHX01JTikKKwkJcmV0dXJuIHJldDsKKwogCXJldHVybiBjbGstPm9wcy0+c2V0X3JhdGUoY2xrLT5pZCwgcmF0ZSk7CiB9CiBFWFBPUlRfU1lNQk9MKGNsa19zZXRfcmF0ZSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1zbS9kZXZpY2VzLW1zbTd4MDAuYyBiL2FyY2gvYXJtL21hY2gtbXNtL2RldmljZXMtbXNtN3gwMC5jCmluZGV4IDRlOGMwYmMuLmZiNTQ4YTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXNtL2RldmljZXMtbXNtN3gwMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXNtL2RldmljZXMtbXNtN3gwMC5jCkBAIC0zNDcsNiArMzQ3LDczIEBACiAJcmV0dXJuIHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcihwZGV2KTsKIH0KIAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSByZXNvdXJjZXNfbWRkaTBbXSA9IHsKKwl7CisJCS5zdGFydAk9IE1TTV9QTURIX1BIWVMsCisJCS5lbmQJPSBNU01fUE1ESF9QSFlTICsgTVNNX1BNREhfU0laRSAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJPSBJTlRfTURESV9QUkksCisJCS5lbmQJPSBJTlRfTURESV9QUkksCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHJlc291cmNlc19tZGRpMVtdID0geworCXsKKwkJLnN0YXJ0CT0gTVNNX0VNREhfUEhZUywKKwkJLmVuZAk9IE1TTV9FTURIX1BIWVMgKyBNU01fRU1ESF9TSVpFIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAk9IElOVF9NRERJX0VYVCwKKwkJLmVuZAk9IElOVF9NRERJX0VYVCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXNtX2RldmljZV9tZGRpMCA9IHsKKwkubmFtZSA9ICJtc21fbWRkaSIsCisJLmlkID0gMCwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUocmVzb3VyY2VzX21kZGkwKSwKKwkucmVzb3VyY2UgPSByZXNvdXJjZXNfbWRkaTAsCisJLmRldiA9IHsKKwkJLmNvaGVyZW50X2RtYV9tYXNrICAgICAgPSAweGZmZmZmZmZmLAorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG1zbV9kZXZpY2VfbWRkaTEgPSB7CisJLm5hbWUgPSAibXNtX21kZGkiLAorCS5pZCA9IDEsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHJlc291cmNlc19tZGRpMSksCisJLnJlc291cmNlID0gcmVzb3VyY2VzX21kZGkxLAorCS5kZXYgPSB7CisJCS5jb2hlcmVudF9kbWFfbWFzayAgICAgID0gMHhmZmZmZmZmZiwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSByZXNvdXJjZXNfbWRwW10gPSB7CisJeworCQkuc3RhcnQJPSBNU01fTURQX1BIWVMsCisJCS5lbmQJPSBNU01fTURQX1BIWVMgKyBNU01fTURQX1NJWkUgLSAxLAorCQkubmFtZQk9ICJtZHAiLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTQorCX0sCisJeworCQkuc3RhcnQJPSBJTlRfTURQLAorCQkuZW5kCT0gSU5UX01EUCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXNtX2RldmljZV9tZHAgPSB7CisJLm5hbWUgPSAibXNtX21kcCIsCisJLmlkID0gMCwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUocmVzb3VyY2VzX21kcCksCisJLnJlc291cmNlID0gcmVzb3VyY2VzX21kcCwKK307CisKIHN0cnVjdCBjbGsgbXNtX2Nsb2Nrc183eDAxYVtdID0gewogCUNMS19QQ09NKCJhZG1fY2xrIiwJQURNX0NMSywJTlVMTCwgMCksCiAJQ0xLX1BDT00oImFkc3BfY2xrIiwJQURTUF9DTEssCU5VTEwsIDApLApAQCAtMzY0LDcgKzQzMSw3IEBACiAJQ0xLX1BDT00oIm1kcF9jbGsiLAlNRFBfQ0xLLAlOVUxMLCBPRkYpLAogCUNMS19QQ09NKCJwYnVzX2NsayIsCVBCVVNfQ0xLLAlOVUxMLCAwKSwKIAlDTEtfUENPTSgicGNtX2NsayIsCVBDTV9DTEssCU5VTEwsIDApLAotCUNMS19QQ09NKCJwbWRoX2NsayIsCVBNREhfQ0xLLAlOVUxMLCBPRkYgKSwKKwlDTEtfUENPTSgibWRkaV9jbGsiLAlQTURIX0NMSywJTlVMTCwgT0ZGIHwgQ0xLX01JTk1BWCksCiAJQ0xLX1BDT00oInNkYWNfY2xrIiwJU0RBQ19DTEssCU5VTEwsIE9GRiksCiAJQ0xLX1BDT00oInNkY19jbGsiLAlTREMxX0NMSywJJm1zbV9kZXZpY2Vfc2RjMS5kZXYsIE9GRiksCiAJQ0xLX1BDT00oInNkY19wY2xrIiwJU0RDMV9QX0NMSywJJm1zbV9kZXZpY2Vfc2RjMS5kZXYsIE9GRiksCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1zbS9kZXZpY2VzLW1zbTd4MzAuYyBiL2FyY2gvYXJtL21hY2gtbXNtL2RldmljZXMtbXNtN3gzMC5jCmluZGV4IDdmY2YyZTMuLjRlOWEwYWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXNtL2RldmljZXMtbXNtN3gzMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXNtL2RldmljZXMtbXNtN3gzMC5jCkBAIC01Niw2ICs1Niw3NyBAQAogCS5pZCAgICAgPSAtMSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcmVzb3VyY2VzX290Z1tdID0geworCXsKKwkJLnN0YXJ0CT0gTVNNX0hTVVNCX1BIWVMsCisJCS5lbmQJPSBNU01fSFNVU0JfUEhZUyArIE1TTV9IU1VTQl9TSVpFLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CT0gSU5UX1VTQl9IUywKKwkJLmVuZAk9IElOVF9VU0JfSFMsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG1zbV9kZXZpY2Vfb3RnID0geworCS5uYW1lCQk9ICJtc21fb3RnIiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHJlc291cmNlc19vdGcpLAorCS5yZXNvdXJjZQk9IHJlc291cmNlc19vdGcsCisJLmRldgkJPSB7CisJCS5jb2hlcmVudF9kbWFfbWFzawk9IDB4ZmZmZmZmZmYsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcmVzb3VyY2VzX2hzdXNiW10gPSB7CisJeworCQkuc3RhcnQJPSBNU01fSFNVU0JfUEhZUywKKwkJLmVuZAk9IE1TTV9IU1VTQl9QSFlTICsgTVNNX0hTVVNCX1NJWkUsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJPSBJTlRfVVNCX0hTLAorCQkuZW5kCT0gSU5UX1VTQl9IUywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXNtX2RldmljZV9oc3VzYiA9IHsKKwkubmFtZQkJPSAibXNtX2hzdXNiIiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHJlc291cmNlc19oc3VzYiksCisJLnJlc291cmNlCT0gcmVzb3VyY2VzX2hzdXNiLAorCS5kZXYJCT0geworCQkuY29oZXJlbnRfZG1hX21hc2sJPSAweGZmZmZmZmZmLAorCX0sCit9OworCitzdGF0aWMgdTY0IGRtYV9tYXNrID0gMHhmZmZmZmZmZlVMTDsKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcmVzb3VyY2VzX2hzdXNiX2hvc3RbXSA9IHsKKwl7CisJCS5zdGFydAk9IE1TTV9IU1VTQl9QSFlTLAorCQkuZW5kCT0gTVNNX0hTVVNCX1BIWVMgKyBNU01fSFNVU0JfU0laRSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAk9IElOVF9VU0JfSFMsCisJCS5lbmQJPSBJTlRfVVNCX0hTLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBtc21fZGV2aWNlX2hzdXNiX2hvc3QgPSB7CisJLm5hbWUJCT0gIm1zbV9oc3VzYl9ob3N0IiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHJlc291cmNlc19oc3VzYl9ob3N0KSwKKwkucmVzb3VyY2UJPSByZXNvdXJjZXNfaHN1c2JfaG9zdCwKKwkuZGV2CQk9IHsKKwkJLmRtYV9tYXNrICAgICAgICAgICAgICAgPSAmZG1hX21hc2ssCisJCS5jb2hlcmVudF9kbWFfbWFzayAgICAgID0gMHhmZmZmZmZmZlVMTCwKKwl9LAorfTsKKwogc3RydWN0IGNsayBtc21fY2xvY2tzXzd4MzBbXSA9IHsKIAlDTEtfUENPTSgiYWRtX2NsayIsCUFETV9DTEssCU5VTEwsIDApLAogCUNMS19QQ09NKCJhZHNwX2NsayIsCUFEU1BfQ0xLLAlOVUxMLCAwKSwKQEAgLTEwNyw2ICsxNzgsNyBAQAogCUNMS19QQ09NKCJ0dl9kYWNfY2xrIiwJVFZfREFDX0NMSywJTlVMTCwgMCksCiAJQ0xLX1BDT00oInR2X2VuY19jbGsiLAlUVl9FTkNfQ0xLLAlOVUxMLCAwKSwKIAlDTEtfUENPTSgidWFydF9jbGsiLAlVQVJUMl9DTEssCSZtc21fZGV2aWNlX3VhcnQyLmRldiwgMCksCisJQ0xLX1BDT00oInVzYl9waHlfY2xrIiwJVVNCX1BIWV9DTEssCU5VTEwsIDApLAogCUNMS19QQ09NKCJ1c2JfaHNfY2xrIiwJCVVTQl9IU19DTEssCQlOVUxMLCBPRkYpLAogCUNMS19QQ09NKCJ1c2JfaHNfcGNsayIsCQlVU0JfSFNfUF9DTEssCQlOVUxMLCBPRkYpLAogCUNMS19QQ09NKCJ1c2JfaHNfY29yZV9jbGsiLAlVU0JfSFNfQ09SRV9DTEssCU5VTEwsIE9GRiksCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1zbS9kZXZpY2VzLW1zbTh4NjAtaW9tbXUuYyBiL2FyY2gvYXJtL21hY2gtbXNtL2RldmljZXMtbXNtOHg2MC1pb21tdS5jCmluZGV4IDg5YjlkNDQuLmY5ZTdiZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXNtL2RldmljZXMtbXNtOHg2MC1pb21tdS5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXNtL2RldmljZXMtbXNtOHg2MC1pb21tdS5jCkBAIC0yNTQsNjAgKzI1NCw4NiBAQAogCX0sCiB9OwogCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG1zbV9pb21tdV9nZngyZDFfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQgPSBNU01fSU9NTVVfR0ZYMkQxX1BIWVMsCisJCS5lbmQgICA9IE1TTV9JT01NVV9HRlgyRDFfUEhZUyArIE1TTV9JT01NVV9HRlgyRDFfU0laRSAtIDEsCisJCS5uYW1lICA9ICJwaHlzYmFzZSIsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkubmFtZSA9ICJub25zZWN1cmVfaXJxIiwKKwkJLnN0YXJ0ID0gU01NVV9HRlgyRDFfQ0JfU0NfTk9OX1NFQ1VSRV9JUlEsCisJCS5lbmQgICA9IFNNTVVfR0ZYMkQxX0NCX1NDX05PTl9TRUNVUkVfSVJRLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsKKwkJLm5hbWUgPSAic2VjdXJlX2lycSIsCisJCS5zdGFydCA9IFNNTVVfR0ZYMkQxX0NCX1NDX1NFQ1VSRV9JUlEsCisJCS5lbmQgICA9IFNNTVVfR0ZYMkQxX0NCX1NDX1NFQ1VSRV9JUlEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtc21fcm9vdF9pb21tdV9kZXYgPSB7CiAJLm5hbWUgPSAibXNtX2lvbW11IiwKIAkuaWQgPSAtMSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgbXNtX2lvbW11X2RldiBqcGVnZF9zbW11ID0geworc3RhdGljIHN0cnVjdCBtc21faW9tbXVfZGV2IGpwZWdkX2lvbW11ID0gewogCS5uYW1lID0gImpwZWdkIiwKIAkuY2xrX3JhdGUgPSAtMQogfTsKIAotc3RhdGljIHN0cnVjdCBtc21faW9tbXVfZGV2IHZwZV9zbW11ID0geworc3RhdGljIHN0cnVjdCBtc21faW9tbXVfZGV2IHZwZV9pb21tdSA9IHsKIAkubmFtZSA9ICJ2cGUiCiB9OwogCi1zdGF0aWMgc3RydWN0IG1zbV9pb21tdV9kZXYgbWRwMF9zbW11ID0geworc3RhdGljIHN0cnVjdCBtc21faW9tbXVfZGV2IG1kcDBfaW9tbXUgPSB7CiAJLm5hbWUgPSAibWRwMCIKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgbXNtX2lvbW11X2RldiBtZHAxX3NtbXUgPSB7CitzdGF0aWMgc3RydWN0IG1zbV9pb21tdV9kZXYgbWRwMV9pb21tdSA9IHsKIAkubmFtZSA9ICJtZHAxIgogfTsKIAotc3RhdGljIHN0cnVjdCBtc21faW9tbXVfZGV2IHJvdF9zbW11ID0geworc3RhdGljIHN0cnVjdCBtc21faW9tbXVfZGV2IHJvdF9pb21tdSA9IHsKIAkubmFtZSA9ICJyb3QiCiB9OwogCi1zdGF0aWMgc3RydWN0IG1zbV9pb21tdV9kZXYgaWpwZWdfc21tdSA9IHsKK3N0YXRpYyBzdHJ1Y3QgbXNtX2lvbW11X2RldiBpanBlZ19pb21tdSA9IHsKIAkubmFtZSA9ICJpanBlZyIKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgbXNtX2lvbW11X2RldiB2ZmVfc21tdSA9IHsKK3N0YXRpYyBzdHJ1Y3QgbXNtX2lvbW11X2RldiB2ZmVfaW9tbXUgPSB7CiAJLm5hbWUgPSAidmZlIiwKIAkuY2xrX3JhdGUgPSAtMQogfTsKIAotc3RhdGljIHN0cnVjdCBtc21faW9tbXVfZGV2IHZjb2RlY19hX3NtbXUgPSB7CitzdGF0aWMgc3RydWN0IG1zbV9pb21tdV9kZXYgdmNvZGVjX2FfaW9tbXUgPSB7CiAJLm5hbWUgPSAidmNvZGVjX2EiCiB9OwogCi1zdGF0aWMgc3RydWN0IG1zbV9pb21tdV9kZXYgdmNvZGVjX2Jfc21tdSA9IHsKK3N0YXRpYyBzdHJ1Y3QgbXNtX2lvbW11X2RldiB2Y29kZWNfYl9pb21tdSA9IHsKIAkubmFtZSA9ICJ2Y29kZWNfYiIKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgbXNtX2lvbW11X2RldiBnZngzZF9zbW11ID0geworc3RhdGljIHN0cnVjdCBtc21faW9tbXVfZGV2IGdmeDNkX2lvbW11ID0gewogCS5uYW1lID0gImdmeDNkIiwKIAkuY2xrX3JhdGUgPSAyNzAwMDAwMAogfTsKIAotc3RhdGljIHN0cnVjdCBtc21faW9tbXVfZGV2IGdmeDJkMF9zbW11ID0geworc3RhdGljIHN0cnVjdCBtc21faW9tbXVfZGV2IGdmeDJkMF9pb21tdSA9IHsKIAkubmFtZSA9ICJnZngyZDAiLAogCS5jbGtfcmF0ZSA9IDI3MDAwMDAwCiB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtc21fZGV2aWNlX3NtbXVfanBlZ2QgPSB7CitzdGF0aWMgc3RydWN0IG1zbV9pb21tdV9kZXYgZ2Z4MmQxX2lvbW11ID0geworCS5uYW1lID0gImdmeDJkMSIsCisJLmNsa19yYXRlID0gMjcwMDAwMDAKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG1zbV9kZXZpY2VfaW9tbXVfanBlZ2QgPSB7CiAJLm5hbWUgPSAibXNtX2lvbW11IiwKIAkuaWQgPSAwLAogCS5kZXYgPSB7CkBAIC0zMTcsNyArMzQzLDcgQEAKIAkucmVzb3VyY2UgPSBtc21faW9tbXVfanBlZ2RfcmVzb3VyY2VzLAogfTsKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXNtX2RldmljZV9zbW11X3ZwZSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG1zbV9kZXZpY2VfaW9tbXVfdnBlID0gewogCS5uYW1lID0gIm1zbV9pb21tdSIsCiAJLmlkID0gMSwKIAkuZGV2ID0gewpAQCAtMzI3LDcgKzM1Myw3IEBACiAJLnJlc291cmNlID0gbXNtX2lvbW11X3ZwZV9yZXNvdXJjZXMsCiB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtc21fZGV2aWNlX3NtbXVfbWRwMCA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG1zbV9kZXZpY2VfaW9tbXVfbWRwMCA9IHsKIAkubmFtZSA9ICJtc21faW9tbXUiLAogCS5pZCA9IDIsCiAJLmRldiA9IHsKQEAgLTMzNyw3ICszNjMsNyBAQAogCS5yZXNvdXJjZSA9IG1zbV9pb21tdV9tZHAwX3Jlc291cmNlcywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG1zbV9kZXZpY2Vfc21tdV9tZHAxID0geworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXNtX2RldmljZV9pb21tdV9tZHAxID0gewogCS5uYW1lID0gIm1zbV9pb21tdSIsCiAJLmlkID0gMywKIAkuZGV2ID0gewpAQCAtMzQ3LDcgKzM3Myw3IEBACiAJLnJlc291cmNlID0gbXNtX2lvbW11X21kcDFfcmVzb3VyY2VzLAogfTsKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXNtX2RldmljZV9zbW11X3JvdCA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG1zbV9kZXZpY2VfaW9tbXVfcm90ID0gewogCS5uYW1lID0gIm1zbV9pb21tdSIsCiAJLmlkID0gNCwKIAkuZGV2ID0gewpAQCAtMzU3LDcgKzM4Myw3IEBACiAJLnJlc291cmNlID0gbXNtX2lvbW11X3JvdF9yZXNvdXJjZXMsCiB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtc21fZGV2aWNlX3NtbXVfaWpwZWcgPSB7CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtc21fZGV2aWNlX2lvbW11X2lqcGVnID0gewogCS5uYW1lID0gIm1zbV9pb21tdSIsCiAJLmlkID0gNSwKIAkuZGV2ID0gewpAQCAtMzY3LDcgKzM5Myw3IEBACiAJLnJlc291cmNlID0gbXNtX2lvbW11X2lqcGVnX3Jlc291cmNlcywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG1zbV9kZXZpY2Vfc21tdV92ZmUgPSB7CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtc21fZGV2aWNlX2lvbW11X3ZmZSA9IHsKIAkubmFtZSA9ICJtc21faW9tbXUiLAogCS5pZCA9IDYsCiAJLmRldiA9IHsKQEAgLTM3Nyw3ICs0MDMsNyBAQAogCS5yZXNvdXJjZSA9IG1zbV9pb21tdV92ZmVfcmVzb3VyY2VzLAogfTsKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXNtX2RldmljZV9zbW11X3Zjb2RlY19hID0geworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXNtX2RldmljZV9pb21tdV92Y29kZWNfYSA9IHsKIAkubmFtZSA9ICJtc21faW9tbXUiLAogCS5pZCA9IDcsCiAJLmRldiA9IHsKQEAgLTM4Nyw3ICs0MTMsNyBAQAogCS5yZXNvdXJjZSA9IG1zbV9pb21tdV92Y29kZWNfYV9yZXNvdXJjZXMsCiB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtc21fZGV2aWNlX3NtbXVfdmNvZGVjX2IgPSB7CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtc21fZGV2aWNlX2lvbW11X3Zjb2RlY19iID0gewogCS5uYW1lID0gIm1zbV9pb21tdSIsCiAJLmlkID0gOCwKIAkuZGV2ID0gewpAQCAtMzk3LDcgKzQyMyw3IEBACiAJLnJlc291cmNlID0gbXNtX2lvbW11X3Zjb2RlY19iX3Jlc291cmNlcywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG1zbV9kZXZpY2Vfc21tdV9nZngzZCA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG1zbV9kZXZpY2VfaW9tbXVfZ2Z4M2QgPSB7CiAJLm5hbWUgPSAibXNtX2lvbW11IiwKIAkuaWQgPSA5LAogCS5kZXYgPSB7CkBAIC00MDcsNyArNDMzLDcgQEAKIAkucmVzb3VyY2UgPSBtc21faW9tbXVfZ2Z4M2RfcmVzb3VyY2VzLAogfTsKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXNtX2RldmljZV9zbW11X2dmeDJkMCA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG1zbV9kZXZpY2VfaW9tbXVfZ2Z4MmQwID0gewogCS5uYW1lID0gIm1zbV9pb21tdSIsCiAJLmlkID0gMTAsCiAJLmRldiA9IHsKQEAgLTQxNyw2ICs0NDMsMTYgQEAKIAkucmVzb3VyY2UgPSBtc21faW9tbXVfZ2Z4MmQwX3Jlc291cmNlcywKIH07CiAKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXNtX2RldmljZV9pb21tdV9nZngyZDEgPSB7CisJLm5hbWUgPSAibXNtX2lvbW11IiwKKwkuaWQgPSAxMSwKKwkuZGV2ID0geworCQkucGFyZW50ID0gJm1zbV9yb290X2lvbW11X2Rldi5kZXYsCisJfSwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXNtX2lvbW11X2dmeDJkMV9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSA9IG1zbV9pb21tdV9nZngyZDFfcmVzb3VyY2VzLAorfTsKKwogc3RhdGljIHN0cnVjdCBtc21faW9tbXVfY3R4X2RldiBqcGVnZF9zcmNfY3R4ID0gewogCS5uYW1lID0gImpwZWdkX3NyYyIsCiAJLm51bSA9IDAsCkBAIC01MTksNDEgKzU1NSwzNiBAQAogCS5taWRzID0gezAsIDEsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIC0xfQogfTsKIAotc3RhdGljIHN0cnVjdCBtc21faW9tbXVfY3R4X2RldiBnZngzZF9yYnBhX2N0eCA9IHsKLQkubmFtZSA9ICJnZngzZF9yYnBhIiwKK3N0YXRpYyBzdHJ1Y3QgbXNtX2lvbW11X2N0eF9kZXYgZ2Z4M2RfdXNlcl9jdHggPSB7CisJLm5hbWUgPSAiZ2Z4M2RfdXNlciIsCiAJLm51bSA9IDAsCi0JLm1pZHMgPSB7LTF9CisJLm1pZHMgPSB7MCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgLTF9CiB9OwogCi1zdGF0aWMgc3RydWN0IG1zbV9pb21tdV9jdHhfZGV2IGdmeDNkX2Nwdmd0dGNfY3R4ID0gewotCS5uYW1lID0gImdmeDNkX2Nwdmd0dGMiLAorc3RhdGljIHN0cnVjdCBtc21faW9tbXVfY3R4X2RldiBnZngzZF9wcml2X2N0eCA9IHsKKwkubmFtZSA9ICJnZngzZF9wcml2IiwKIAkubnVtID0gMSwKKwkubWlkcyA9IHsxNiwgMTcsIDE4LCAxOSwgMjAsIDIxLCAyMiwgMjMsIDI0LCAyNSwgMjYsIDI3LCAyOCwgMjksIDMwLAorCQkgMzEsIC0xfQorfTsKKworc3RhdGljIHN0cnVjdCBtc21faW9tbXVfY3R4X2RldiBnZngyZDBfMmQwX2N0eCA9IHsKKwkubmFtZSA9ICJnZngyZDBfMmQwIiwKKwkubnVtID0gMCwKIAkubWlkcyA9IHswLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCAtMX0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgbXNtX2lvbW11X2N0eF9kZXYgZ2Z4M2Rfc21tdV9jdHggPSB7Ci0JLm5hbWUgPSAiZ2Z4M2Rfc21tdSIsCi0JLm51bSA9IDIsCi0JLm1pZHMgPSB7OCwgOSwgMTAsIDExLCAxMiwgLTF9Ci19OwotCi1zdGF0aWMgc3RydWN0IG1zbV9pb21tdV9jdHhfZGV2IGdmeDJkMF9waXh2MV9jdHggPSB7Ci0JLm5hbWUgPSAiZ2Z4MmQwX3BpeHYxX3NtbXUiLAorc3RhdGljIHN0cnVjdCBtc21faW9tbXVfY3R4X2RldiBnZngyZDFfMmQxX2N0eCA9IHsKKwkubmFtZSA9ICJnZngyZDFfMmQxIiwKIAkubnVtID0gMCwKLQkubWlkcyA9IHswLCAzLCA0LCAtMX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbXNtX2lvbW11X2N0eF9kZXYgZ2Z4MmQwX3RleHYzX2N0eCA9IHsKLQkubmFtZSA9ICJnZngyZDBfdGV4djNfc21tdSIsCi0JLm51bSA9IDEsCi0JLm1pZHMgPSB7MSwgNiwgNywgLTF9CisJLm1pZHMgPSB7MCwgMSwgMiwgMywgNCwgNSwgNiwgNywgLTF9CiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtc21fZGV2aWNlX2pwZWdkX3NyY19jdHggPSB7CiAJLm5hbWUgPSAibXNtX2lvbW11X2N0eCIsCiAJLmlkID0gMCwKIAkuZGV2ID0gewotCQkucGFyZW50ID0gJm1zbV9kZXZpY2Vfc21tdV9qcGVnZC5kZXYsCisJCS5wYXJlbnQgPSAmbXNtX2RldmljZV9pb21tdV9qcGVnZC5kZXYsCiAJfSwKIH07CiAKQEAgLTU2MSw3ICs1OTIsNyBAQAogCS5uYW1lID0gIm1zbV9pb21tdV9jdHgiLAogCS5pZCA9IDEsCiAJLmRldiA9IHsKLQkJLnBhcmVudCA9ICZtc21fZGV2aWNlX3NtbXVfanBlZ2QuZGV2LAorCQkucGFyZW50ID0gJm1zbV9kZXZpY2VfaW9tbXVfanBlZ2QuZGV2LAogCX0sCiB9OwogCkBAIC01NjksNyArNjAwLDcgQEAKIAkubmFtZSA9ICJtc21faW9tbXVfY3R4IiwKIAkuaWQgPSAyLAogCS5kZXYgPSB7Ci0JCS5wYXJlbnQgPSAmbXNtX2RldmljZV9zbW11X3ZwZS5kZXYsCisJCS5wYXJlbnQgPSAmbXNtX2RldmljZV9pb21tdV92cGUuZGV2LAogCX0sCiB9OwogCkBAIC01NzcsNyArNjA4LDcgQEAKIAkubmFtZSA9ICJtc21faW9tbXVfY3R4IiwKIAkuaWQgPSAzLAogCS5kZXYgPSB7Ci0JCS5wYXJlbnQgPSAmbXNtX2RldmljZV9zbW11X3ZwZS5kZXYsCisJCS5wYXJlbnQgPSAmbXNtX2RldmljZV9pb21tdV92cGUuZGV2LAogCX0sCiB9OwogCkBAIC01ODUsNyArNjE2LDcgQEAKIAkubmFtZSA9ICJtc21faW9tbXVfY3R4IiwKIAkuaWQgPSA0LAogCS5kZXYgPSB7Ci0JCS5wYXJlbnQgPSAmbXNtX2RldmljZV9zbW11X21kcDAuZGV2LAorCQkucGFyZW50ID0gJm1zbV9kZXZpY2VfaW9tbXVfbWRwMC5kZXYsCiAJfSwKIH07CiAKQEAgLTU5Myw3ICs2MjQsNyBAQAogCS5uYW1lID0gIm1zbV9pb21tdV9jdHgiLAogCS5pZCA9IDUsCiAJLmRldiA9IHsKLQkJLnBhcmVudCA9ICZtc21fZGV2aWNlX3NtbXVfbWRwMC5kZXYsCisJCS5wYXJlbnQgPSAmbXNtX2RldmljZV9pb21tdV9tZHAwLmRldiwKIAl9LAogfTsKIApAQCAtNjAxLDcgKzYzMiw3IEBACiAJLm5hbWUgPSAibXNtX2lvbW11X2N0eCIsCiAJLmlkID0gNiwKIAkuZGV2ID0gewotCQkucGFyZW50ID0gJm1zbV9kZXZpY2Vfc21tdV9tZHAxLmRldiwKKwkJLnBhcmVudCA9ICZtc21fZGV2aWNlX2lvbW11X21kcDEuZGV2LAogCX0sCiB9OwogCkBAIC02MDksNyArNjQwLDcgQEAKIAkubmFtZSA9ICJtc21faW9tbXVfY3R4IiwKIAkuaWQgPSA3LAogCS5kZXYgPSB7Ci0JCS5wYXJlbnQgPSAmbXNtX2RldmljZV9zbW11X21kcDEuZGV2LAorCQkucGFyZW50ID0gJm1zbV9kZXZpY2VfaW9tbXVfbWRwMS5kZXYsCiAJfSwKIH07CiAKQEAgLTYxNyw3ICs2NDgsNyBAQAogCS5uYW1lID0gIm1zbV9pb21tdV9jdHgiLAogCS5pZCA9IDgsCiAJLmRldiA9IHsKLQkJLnBhcmVudCA9ICZtc21fZGV2aWNlX3NtbXVfcm90LmRldiwKKwkJLnBhcmVudCA9ICZtc21fZGV2aWNlX2lvbW11X3JvdC5kZXYsCiAJfSwKIH07CiAKQEAgLTYyNSw3ICs2NTYsNyBAQAogCS5uYW1lID0gIm1zbV9pb21tdV9jdHgiLAogCS5pZCA9IDksCiAJLmRldiA9IHsKLQkJLnBhcmVudCA9ICZtc21fZGV2aWNlX3NtbXVfcm90LmRldiwKKwkJLnBhcmVudCA9ICZtc21fZGV2aWNlX2lvbW11X3JvdC5kZXYsCiAJfSwKIH07CiAKQEAgLTYzMyw3ICs2NjQsNyBAQAogCS5uYW1lID0gIm1zbV9pb21tdV9jdHgiLAogCS5pZCA9IDEwLAogCS5kZXYgPSB7Ci0JCS5wYXJlbnQgPSAmbXNtX2RldmljZV9zbW11X2lqcGVnLmRldiwKKwkJLnBhcmVudCA9ICZtc21fZGV2aWNlX2lvbW11X2lqcGVnLmRldiwKIAl9LAogfTsKIApAQCAtNjQxLDcgKzY3Miw3IEBACiAJLm5hbWUgPSAibXNtX2lvbW11X2N0eCIsCiAJLmlkID0gMTEsCiAJLmRldiA9IHsKLQkJLnBhcmVudCA9ICZtc21fZGV2aWNlX3NtbXVfaWpwZWcuZGV2LAorCQkucGFyZW50ID0gJm1zbV9kZXZpY2VfaW9tbXVfaWpwZWcuZGV2LAogCX0sCiB9OwogCkBAIC02NDksNyArNjgwLDcgQEAKIAkubmFtZSA9ICJtc21faW9tbXVfY3R4IiwKIAkuaWQgPSAxMiwKIAkuZGV2ID0gewotCQkucGFyZW50ID0gJm1zbV9kZXZpY2Vfc21tdV92ZmUuZGV2LAorCQkucGFyZW50ID0gJm1zbV9kZXZpY2VfaW9tbXVfdmZlLmRldiwKIAl9LAogfTsKIApAQCAtNjU3LDcgKzY4OCw3IEBACiAJLm5hbWUgPSAibXNtX2lvbW11X2N0eCIsCiAJLmlkID0gMTMsCiAJLmRldiA9IHsKLQkJLnBhcmVudCA9ICZtc21fZGV2aWNlX3NtbXVfdmZlLmRldiwKKwkJLnBhcmVudCA9ICZtc21fZGV2aWNlX2lvbW11X3ZmZS5kZXYsCiAJfSwKIH07CiAKQEAgLTY2NSw3ICs2OTYsNyBAQAogCS5uYW1lID0gIm1zbV9pb21tdV9jdHgiLAogCS5pZCA9IDE0LAogCS5kZXYgPSB7Ci0JCS5wYXJlbnQgPSAmbXNtX2RldmljZV9zbW11X3Zjb2RlY19hLmRldiwKKwkJLnBhcmVudCA9ICZtc21fZGV2aWNlX2lvbW11X3Zjb2RlY19hLmRldiwKIAl9LAogfTsKIApAQCAtNjczLDcgKzcwNCw3IEBACiAJLm5hbWUgPSAibXNtX2lvbW11X2N0eCIsCiAJLmlkID0gMTUsCiAJLmRldiA9IHsKLQkJLnBhcmVudCA9ICZtc21fZGV2aWNlX3NtbXVfdmNvZGVjX2EuZGV2LAorCQkucGFyZW50ID0gJm1zbV9kZXZpY2VfaW9tbXVfdmNvZGVjX2EuZGV2LAogCX0sCiB9OwogCkBAIC02ODEsNzYgKzcxMiw3MCBAQAogCS5uYW1lID0gIm1zbV9pb21tdV9jdHgiLAogCS5pZCA9IDE2LAogCS5kZXYgPSB7Ci0JCS5wYXJlbnQgPSAmbXNtX2RldmljZV9zbW11X3Zjb2RlY19iLmRldiwKKwkJLnBhcmVudCA9ICZtc21fZGV2aWNlX2lvbW11X3Zjb2RlY19iLmRldiwKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXNtX2RldmljZV9nZngzZF9yYnBhX2N0eCA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG1zbV9kZXZpY2VfZ2Z4M2RfdXNlcl9jdHggPSB7CiAJLm5hbWUgPSAibXNtX2lvbW11X2N0eCIsCiAJLmlkID0gMTcsCiAJLmRldiA9IHsKLQkJLnBhcmVudCA9ICZtc21fZGV2aWNlX3NtbXVfZ2Z4M2QuZGV2LAorCQkucGFyZW50ID0gJm1zbV9kZXZpY2VfaW9tbXVfZ2Z4M2QuZGV2LAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtc21fZGV2aWNlX2dmeDNkX2Nwdmd0dGNfY3R4ID0geworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXNtX2RldmljZV9nZngzZF9wcml2X2N0eCA9IHsKIAkubmFtZSA9ICJtc21faW9tbXVfY3R4IiwKIAkuaWQgPSAxOCwKIAkuZGV2ID0gewotCQkucGFyZW50ID0gJm1zbV9kZXZpY2Vfc21tdV9nZngzZC5kZXYsCisJCS5wYXJlbnQgPSAmbXNtX2RldmljZV9pb21tdV9nZngzZC5kZXYsCiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG1zbV9kZXZpY2VfZ2Z4M2Rfc21tdV9jdHggPSB7CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtc21fZGV2aWNlX2dmeDJkMF8yZDBfY3R4ID0gewogCS5uYW1lID0gIm1zbV9pb21tdV9jdHgiLAogCS5pZCA9IDE5LAogCS5kZXYgPSB7Ci0JCS5wYXJlbnQgPSAmbXNtX2RldmljZV9zbW11X2dmeDNkLmRldiwKKwkJLnBhcmVudCA9ICZtc21fZGV2aWNlX2lvbW11X2dmeDJkMC5kZXYsCiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG1zbV9kZXZpY2VfZ2Z4MmQwX3BpeHYxX2N0eCA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG1zbV9kZXZpY2VfZ2Z4MmQxXzJkMV9jdHggPSB7CiAJLm5hbWUgPSAibXNtX2lvbW11X2N0eCIsCiAJLmlkID0gMjAsCiAJLmRldiA9IHsKLQkJLnBhcmVudCA9ICZtc21fZGV2aWNlX3NtbXVfZ2Z4MmQwLmRldiwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXNtX2RldmljZV9nZngyZDBfdGV4djNfY3R4ID0gewotCS5uYW1lID0gIm1zbV9pb21tdV9jdHgiLAotCS5pZCA9IDIxLAotCS5kZXYgPSB7Ci0JCS5wYXJlbnQgPSAmbXNtX2RldmljZV9zbW11X2dmeDJkMC5kZXYsCisJCS5wYXJlbnQgPSAmbXNtX2RldmljZV9pb21tdV9nZngyZDEuZGV2LAogCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbXNtX2lvbW11X2RldnNbXSA9IHsKLQkmbXNtX2RldmljZV9zbW11X2pwZWdkLAotCSZtc21fZGV2aWNlX3NtbXVfdnBlLAotCSZtc21fZGV2aWNlX3NtbXVfbWRwMCwKLQkmbXNtX2RldmljZV9zbW11X21kcDEsCi0JJm1zbV9kZXZpY2Vfc21tdV9yb3QsCi0JJm1zbV9kZXZpY2Vfc21tdV9panBlZywKLQkmbXNtX2RldmljZV9zbW11X3ZmZSwKLQkmbXNtX2RldmljZV9zbW11X3Zjb2RlY19hLAotCSZtc21fZGV2aWNlX3NtbXVfdmNvZGVjX2IsCi0JJm1zbV9kZXZpY2Vfc21tdV9nZngzZCwKLQkmbXNtX2RldmljZV9zbW11X2dmeDJkMCwKKwkmbXNtX2RldmljZV9pb21tdV9qcGVnZCwKKwkmbXNtX2RldmljZV9pb21tdV92cGUsCisJJm1zbV9kZXZpY2VfaW9tbXVfbWRwMCwKKwkmbXNtX2RldmljZV9pb21tdV9tZHAxLAorCSZtc21fZGV2aWNlX2lvbW11X3JvdCwKKwkmbXNtX2RldmljZV9pb21tdV9panBlZywKKwkmbXNtX2RldmljZV9pb21tdV92ZmUsCisJJm1zbV9kZXZpY2VfaW9tbXVfdmNvZGVjX2EsCisJJm1zbV9kZXZpY2VfaW9tbXVfdmNvZGVjX2IsCisJJm1zbV9kZXZpY2VfaW9tbXVfZ2Z4M2QsCisJJm1zbV9kZXZpY2VfaW9tbXVfZ2Z4MmQwLAorCSZtc21fZGV2aWNlX2lvbW11X2dmeDJkMSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbXNtX2lvbW11X2RldiAqbXNtX2lvbW11X2RhdGFbXSA9IHsKLQkmanBlZ2Rfc21tdSwKLQkmdnBlX3NtbXUsCi0JJm1kcDBfc21tdSwKLQkmbWRwMV9zbW11LAotCSZyb3Rfc21tdSwKLQkmaWpwZWdfc21tdSwKLQkmdmZlX3NtbXUsCi0JJnZjb2RlY19hX3NtbXUsCi0JJnZjb2RlY19iX3NtbXUsCi0JJmdmeDNkX3NtbXUsCi0JJmdmeDJkMF9zbW11LAorCSZqcGVnZF9pb21tdSwKKwkmdnBlX2lvbW11LAorCSZtZHAwX2lvbW11LAorCSZtZHAxX2lvbW11LAorCSZyb3RfaW9tbXUsCisJJmlqcGVnX2lvbW11LAorCSZ2ZmVfaW9tbXUsCisJJnZjb2RlY19hX2lvbW11LAorCSZ2Y29kZWNfYl9pb21tdSwKKwkmZ2Z4M2RfaW9tbXUsCisJJmdmeDJkMF9pb21tdSwKKwkmZ2Z4MmQxX2lvbW11LAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm1zbV9pb21tdV9jdHhfZGV2c1tdID0gewpAQCAtNzcxLDExICs3OTYsMTAgQEAKIAkmbXNtX2RldmljZV92Y29kZWNfYV9zdHJlYW1fY3R4LAogCSZtc21fZGV2aWNlX3Zjb2RlY19hX21tMV9jdHgsCiAJJm1zbV9kZXZpY2VfdmNvZGVjX2JfbW0yX2N0eCwKLQkmbXNtX2RldmljZV9nZngzZF9yYnBhX2N0eCwKLQkmbXNtX2RldmljZV9nZngzZF9jcHZndHRjX2N0eCwKLQkmbXNtX2RldmljZV9nZngzZF9zbW11X2N0eCwKLQkmbXNtX2RldmljZV9nZngyZDBfcGl4djFfY3R4LAotCSZtc21fZGV2aWNlX2dmeDJkMF90ZXh2M19jdHgsCisJJm1zbV9kZXZpY2VfZ2Z4M2RfdXNlcl9jdHgsCisJJm1zbV9kZXZpY2VfZ2Z4M2RfcHJpdl9jdHgsCisJJm1zbV9kZXZpY2VfZ2Z4MmQwXzJkMF9jdHgsCisJJm1zbV9kZXZpY2VfZ2Z4MmQxXzJkMV9jdHgsCiB9OwogCiBzdGF0aWMgc3RydWN0IG1zbV9pb21tdV9jdHhfZGV2ICptc21faW9tbXVfY3R4X2RhdGFbXSA9IHsKQEAgLTc5NiwxNCArODIwLDEzIEBACiAJJnZjb2RlY19hX3N0cmVhbV9jdHgsCiAJJnZjb2RlY19hX21tMV9jdHgsCiAJJnZjb2RlY19iX21tMl9jdHgsCi0JJmdmeDNkX3JicGFfY3R4LAotCSZnZngzZF9jcHZndHRjX2N0eCwKLQkmZ2Z4M2Rfc21tdV9jdHgsCi0JJmdmeDJkMF9waXh2MV9jdHgsCi0JJmdmeDJkMF90ZXh2M19jdHgsCisJJmdmeDNkX3VzZXJfY3R4LAorCSZnZngzZF9wcml2X2N0eCwKKwkmZ2Z4MmQwXzJkMF9jdHgsCisJJmdmeDJkMV8yZDFfY3R4LAogfTsKIAotc3RhdGljIGludCBtc204eDYwX2lvbW11X2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IG1zbTh4NjBfaW9tbXVfaW5pdCh2b2lkKQogewogCWludCByZXQsIGk7CiAKQEAgLTgyNiw3ICs4NDksNyBAQAogCQlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIobXNtX2lvbW11X2RldnNbaV0pOwogCiAJCWlmIChyZXQgIT0gMCkgewotCQkJcHJfZXJyKCJwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIgc21tdSBmYWlsZWQsICIKKwkJCXByX2VycigicGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyIGlvbW11IGZhaWxlZCwgIgogCQkJICAgICAgICJpID0gJWRcbiIsIGkpOwogCQkJZ290byBmYWlsdXJlX3Vud2luZDsKIAkJfQpAQCAtODM3LDcgKzg2MCw3IEBACiAJCQkJCSAgICAgICBtc21faW9tbXVfY3R4X2RhdGFbaV0sCiAJCQkJCSAgICAgICBzaXplb2YoKm1zbV9pb21tdV9jdHhfZGV2c1tpXSkpOwogCQlpZiAocmV0ICE9IDApIHsKLQkJCXByX2VycigicGxhdGZvcm1fZGV2aWNlX2FkZF9kYXRhIHNtbXUgZmFpbGVkLCAiCisJCQlwcl9lcnIoInBsYXRmb3JtX2RldmljZV9hZGRfZGF0YSBpb21tdSBmYWlsZWQsICIKIAkJCSAgICAgICAiaSA9ICVkXG4iLCBpKTsKIAkJCWdvdG8gZmFpbHVyZV91bndpbmQyOwogCQl9CkBAIC04NjMsNyArODg2LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBtc204eDYwX2lvbW11X2V4aXQodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBtc204eDYwX2lvbW11X2V4aXQodm9pZCkKIHsKIAlpbnQgaTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tc20vZGV2aWNlcy1xc2Q4eDUwLmMgYi9hcmNoL2FybS9tYWNoLW1zbS9kZXZpY2VzLXFzZDh4NTAuYwppbmRleCA2ZmU2N2M1Li5hNGI3OThmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW1zbS9kZXZpY2VzLXFzZDh4NTAuYworKysgYi9hcmNoL2FybS9tYWNoLW1zbS9kZXZpY2VzLXFzZDh4NTAuYwpAQCAtNTMsNiArNTMsNzcgQEAKIAkuaWQgICAgID0gLTEsCiB9OwogCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHJlc291cmNlc19vdGdbXSA9IHsKKwl7CisJCS5zdGFydAk9IE1TTV9IU1VTQl9QSFlTLAorCQkuZW5kCT0gTVNNX0hTVVNCX1BIWVMgKyBNU01fSFNVU0JfU0laRSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAk9IElOVF9VU0JfSFMsCisJCS5lbmQJPSBJTlRfVVNCX0hTLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBtc21fZGV2aWNlX290ZyA9IHsKKwkubmFtZQkJPSAibXNtX290ZyIsCisJLmlkCQk9IC0xLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShyZXNvdXJjZXNfb3RnKSwKKwkucmVzb3VyY2UJPSByZXNvdXJjZXNfb3RnLAorCS5kZXYJCT0geworCQkuY29oZXJlbnRfZG1hX21hc2sJPSAweGZmZmZmZmZmLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHJlc291cmNlc19oc3VzYltdID0geworCXsKKwkJLnN0YXJ0CT0gTVNNX0hTVVNCX1BIWVMsCisJCS5lbmQJPSBNU01fSFNVU0JfUEhZUyArIE1TTV9IU1VTQl9TSVpFLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CT0gSU5UX1VTQl9IUywKKwkJLmVuZAk9IElOVF9VU0JfSFMsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG1zbV9kZXZpY2VfaHN1c2IgPSB7CisJLm5hbWUJCT0gIm1zbV9oc3VzYiIsCisJLmlkCQk9IC0xLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShyZXNvdXJjZXNfaHN1c2IpLAorCS5yZXNvdXJjZQk9IHJlc291cmNlc19oc3VzYiwKKwkuZGV2CQk9IHsKKwkJLmNvaGVyZW50X2RtYV9tYXNrCT0gMHhmZmZmZmZmZiwKKwl9LAorfTsKKworc3RhdGljIHU2NCBkbWFfbWFzayA9IDB4ZmZmZmZmZmZVTEw7CitzdGF0aWMgc3RydWN0IHJlc291cmNlIHJlc291cmNlc19oc3VzYl9ob3N0W10gPSB7CisJeworCQkuc3RhcnQJPSBNU01fSFNVU0JfUEhZUywKKwkJLmVuZAk9IE1TTV9IU1VTQl9QSFlTICsgTVNNX0hTVVNCX1NJWkUsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJPSBJTlRfVVNCX0hTLAorCQkuZW5kCT0gSU5UX1VTQl9IUywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXNtX2RldmljZV9oc3VzYl9ob3N0ID0geworCS5uYW1lCQk9ICJtc21faHN1c2JfaG9zdCIsCisJLmlkCQk9IC0xLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShyZXNvdXJjZXNfaHN1c2JfaG9zdCksCisJLnJlc291cmNlCT0gcmVzb3VyY2VzX2hzdXNiX2hvc3QsCisJLmRldgkJPSB7CisJCS5kbWFfbWFzayAgICAgICAgICAgICAgID0gJmRtYV9tYXNrLAorCQkuY29oZXJlbnRfZG1hX21hc2sgICAgICA9IDB4ZmZmZmZmZmZVTEwsCisJfSwKK307CisKIHN0cnVjdCBjbGsgbXNtX2Nsb2Nrc184eDUwW10gPSB7CiAJQ0xLX1BDT00oImFkbV9jbGsiLAlBRE1fQ0xLLAlOVUxMLCAwKSwKIAlDTEtfUENPTSgiZWJpMV9jbGsiLAlFQkkxX0NMSywJTlVMTCwgQ0xLX01JTiksCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1zbS9kZXZpY2VzLmggYi9hcmNoL2FybS9tYWNoLW1zbS9kZXZpY2VzLmgKaW5kZXggNTY4NDQzZS4uODdjNzBiZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tc20vZGV2aWNlcy5oCisrKyBiL2FyY2gvYXJtL21hY2gtbXNtL2RldmljZXMuaApAQCAtMjgsNiArMjgsOCBAQAogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXNtX2RldmljZV9zZGM0OwogCiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBtc21fZGV2aWNlX2hzdXNiOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXNtX2RldmljZV9vdGc7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBtc21fZGV2aWNlX2hzdXNiX2hvc3Q7CiAKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG1zbV9kZXZpY2VfaTJjOwogCkBAIC0zNSw2ICszNywxMCBAQAogCiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBtc21fZGV2aWNlX25hbmQ7CiAKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG1zbV9kZXZpY2VfbWRkaTA7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBtc21fZGV2aWNlX21kZGkxOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXNtX2RldmljZV9tZHA7CisKIGV4dGVybiBzdHJ1Y3QgY2xrIG1zbV9jbG9ja3NfN3gwMWFbXTsKIGV4dGVybiB1bnNpZ25lZCBtc21fbnVtX2Nsb2Nrc183eDAxYTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tc20vZ3Bpby12Mi5jIGIvYXJjaC9hcm0vbWFjaC1tc20vZ3Bpby12Mi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkZTE5ZWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW1zbS9ncGlvLXYyLmMKQEAgLTAsMCArMSw0MjYgQEAKKy8qIENvcHlyaWdodCAoYykgMjAxMCwgQ29kZSBBdXJvcmEgRm9ydW0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAorICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKyNkZWZpbmUgcHJfZm10KGZtdCkgIiVzOiAiIGZtdCwgX19mdW5jX18KKworI2luY2x1ZGUgPGxpbnV4L2JpdG1hcC5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPG1hY2gvbXNtX2lvbWFwLmg+CisjaW5jbHVkZSAiZ3Bpb211eC5oIgorCisvKiBCaXRzIG9mIGludGVyZXN0IGluIHRoZSBHUElPX0lOX09VVCByZWdpc3Rlci4KKyAqLworZW51bSB7CisJR1BJT19JTiAgPSAwLAorCUdQSU9fT1VUID0gMQorfTsKKworLyogQml0cyBvZiBpbnRlcmVzdCBpbiB0aGUgR1BJT19JTlRSX1NUQVRVUyByZWdpc3Rlci4KKyAqLworZW51bSB7CisJSU5UUl9TVEFUVVMgPSAwLAorfTsKKworLyogQml0cyBvZiBpbnRlcmVzdCBpbiB0aGUgR1BJT19DRkcgcmVnaXN0ZXIuCisgKi8KK2VudW0geworCUdQSU9fT0UgPSA5LAorfTsKKworLyogQml0cyBvZiBpbnRlcmVzdCBpbiB0aGUgR1BJT19JTlRSX0NGRyByZWdpc3Rlci4KKyAqIFdoZW4gYSBHUElPIHRyaWdnZXJzLCB0d28gc2VwYXJhdGUgZGVjaXNpb25zIGFyZSBtYWRlLCBjb250cm9sbGVkCisgKiBieSB0d28gc2VwYXJhdGUgZmxhZ3MuCisgKgorICogLSBGaXJzdCwgSU5UUl9SQVdfU1RBVFVTX0VOIGNvbnRyb2xzIHdoZXRoZXIgb3Igbm90IHRoZSBHUElPX0lOVFJfU1RBVFVTCisgKiByZWdpc3RlciBmb3IgdGhhdCBHUElPIHdpbGwgYmUgdXBkYXRlZCB0byByZWZsZWN0IHRoZSB0cmlnZ2VyaW5nIG9mIHRoYXQKKyAqIGdwaW8uICBJZiB0aGlzIGJpdCBpcyAwLCB0aGlzIHJlZ2lzdGVyIHdpbGwgbm90IGJlIHVwZGF0ZWQuCisgKiAtIFNlY29uZCwgSU5UUl9FTkFCTEUgY29udHJvbHMgd2hldGhlciBhbiBpbnRlcnJ1cHQgaXMgdHJpZ2dlcmVkLgorICoKKyAqIElmIElOVFJfRU5BQkxFIGlzIHNldCBhbmQgSU5UUl9SQVdfU1RBVFVTX0VOIGlzIE5PVCBzZXQsIGFuIGludGVycnVwdAorICogY2FuIGJlIHRyaWdnZXJlZCBidXQgdGhlIHN0YXR1cyByZWdpc3RlciB3aWxsIG5vdCByZWZsZWN0IGl0LgorICovCitlbnVtIHsKKwlJTlRSX0VOQUJMRSAgICAgICAgPSAwLAorCUlOVFJfUE9MX0NUTCAgICAgICA9IDEsCisJSU5UUl9ERUNUX0NUTCAgICAgID0gMiwKKwlJTlRSX1JBV19TVEFUVVNfRU4gPSAzLAorfTsKKworLyogQ29kZXMgb2YgaW50ZXJlc3QgaW4gR1BJT19JTlRSX0NGR19TVS4KKyAqLworZW51bSB7CisJVEFSR0VUX1BST0NfU0NPUlBJT04gPSA0LAorCVRBUkdFVF9QUk9DX05PTkUgICAgID0gNywKK307CisKKworI2RlZmluZSBHUElPX0lOVFJfQ0ZHX1NVKGdwaW8pICAgIChNU01fVExNTV9CQVNFICsgMHgwNDAwICsgKDB4MDQgKiAoZ3BpbykpKQorI2RlZmluZSBHUElPX0NPTkZJRyhncGlvKSAgICAgICAgIChNU01fVExNTV9CQVNFICsgMHgxMDAwICsgKDB4MTAgKiAoZ3BpbykpKQorI2RlZmluZSBHUElPX0lOX09VVChncGlvKSAgICAgICAgIChNU01fVExNTV9CQVNFICsgMHgxMDA0ICsgKDB4MTAgKiAoZ3BpbykpKQorI2RlZmluZSBHUElPX0lOVFJfQ0ZHKGdwaW8pICAgICAgIChNU01fVExNTV9CQVNFICsgMHgxMDA4ICsgKDB4MTAgKiAoZ3BpbykpKQorI2RlZmluZSBHUElPX0lOVFJfU1RBVFVTKGdwaW8pICAgIChNU01fVExNTV9CQVNFICsgMHgxMDBjICsgKDB4MTAgKiAoZ3BpbykpKQorCisvKioKKyAqIHN0cnVjdCBtc21fZ3Bpb19kZXY6IHRoZSBNU004NjYwIFNvQyBHUElPIGRldmljZSBzdHJ1Y3R1cmUKKyAqCisgKiBAZW5hYmxlZF9pcnFzOiBhIGJpdG1hcCB1c2VkIHRvIG9wdGltaXplIHRoZSBzdW1tYXJ5LWlycSBoYW5kbGVyLiAgQnkKKyAqIGtlZXBpbmcgdHJhY2sgb2Ygd2hpY2ggZ3Bpb3MgYXJlIHVubWFza2VkIGFzIGlycSBzb3VyY2VzLCB3ZSBhdm9pZAorICogaGF2aW5nIHRvIGRvIHJlYWRsIGNhbGxzIG9uIGh1bmRyZWRzIG9mIGlvbWFwcGVkIHJlZ2lzdGVycyBlYWNoIHRpbWUKKyAqIHRoZSBzdW1tYXJ5IGludGVycnVwdCBmaXJlcyBpbiBvcmRlciB0byBsb2NhdGUgdGhlIGFjdGl2ZSBpbnRlcnJ1cHRzLgorICoKKyAqIEB3YWtlX2lycXM6IGEgYml0bWFwIGZvciB0cmFja2luZyB3aGljaCBpbnRlcnJ1cHQgbGluZXMgYXJlIGVuYWJsZWQKKyAqIGFzIHdha2V1cCBzb3VyY2VzLiAgV2hlbiB0aGUgZGV2aWNlIGlzIHN1c3BlbmRlZCwgaW50ZXJydXB0cyB3aGljaCBhcmUKKyAqIG5vdCB3YWtldXAgc291cmNlcyBhcmUgZGlzYWJsZWQuCisgKgorICogQGR1YWxfZWRnZV9pcnFzOiBhIGJpdG1hcCB1c2VkIHRvIHRyYWNrIHdoaWNoIGlycXMgYXJlIGNvbmZpZ3VyZWQKKyAqIGFzIGR1YWwtZWRnZSwgYXMgdGhpcyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBoYXJkd2FyZSBhbmQgcmVxdWlyZXMKKyAqIHNvbWUgc3BlY2lhbCBoYW5kbGluZyBpbiB0aGUgZHJpdmVyLgorICovCitzdHJ1Y3QgbXNtX2dwaW9fZGV2IHsKKwlzdHJ1Y3QgZ3Bpb19jaGlwIGdwaW9fY2hpcDsKKwlERUNMQVJFX0JJVE1BUChlbmFibGVkX2lycXMsIE5SX0dQSU9fSVJRUyk7CisJREVDTEFSRV9CSVRNQVAod2FrZV9pcnFzLCBOUl9HUElPX0lSUVMpOworCURFQ0xBUkVfQklUTUFQKGR1YWxfZWRnZV9pcnFzLCBOUl9HUElPX0lSUVMpOworfTsKKworc3RhdGljIERFRklORV9TUElOTE9DSyh0bG1tX2xvY2spOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtc21fZ3Bpb19kZXYgKnRvX21zbV9ncGlvX2RldihzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwKQoreworCXJldHVybiBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IG1zbV9ncGlvX2RldiwgZ3Bpb19jaGlwKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldF9ncGlvX2JpdHModW5zaWduZWQgbiwgdm9pZCBfX2lvbWVtICpyZWcpCit7CisJd3JpdGVsKHJlYWRsKHJlZykgfCBuLCByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfZ3Bpb19iaXRzKHVuc2lnbmVkIG4sIHZvaWQgX19pb21lbSAqcmVnKQoreworCXdyaXRlbChyZWFkbChyZWcpICYgfm4sIHJlZyk7Cit9CisKK3N0YXRpYyBpbnQgbXNtX2dwaW9fZ2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKK3sKKwlyZXR1cm4gcmVhZGwoR1BJT19JTl9PVVQob2Zmc2V0KSkgJiBCSVQoR1BJT19JTik7Cit9CisKK3N0YXRpYyB2b2lkIG1zbV9ncGlvX3NldChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQsIGludCB2YWwpCit7CisJd3JpdGVsKHZhbCA/IEJJVChHUElPX09VVCkgOiAwLCBHUElPX0lOX09VVChvZmZzZXQpKTsKK30KKworc3RhdGljIGludCBtc21fZ3Bpb19kaXJlY3Rpb25faW5wdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQoreworCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnRsbW1fbG9jaywgaXJxX2ZsYWdzKTsKKwljbGVhcl9ncGlvX2JpdHMoQklUKEdQSU9fT0UpLCBHUElPX0NPTkZJRyhvZmZzZXQpKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0bG1tX2xvY2ssIGlycV9mbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXNtX2dwaW9fZGlyZWN0aW9uX291dHB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAorCQkJCXVuc2lnbmVkIG9mZnNldCwKKwkJCQlpbnQgdmFsKQoreworCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnRsbW1fbG9jaywgaXJxX2ZsYWdzKTsKKwltc21fZ3Bpb19zZXQoY2hpcCwgb2Zmc2V0LCB2YWwpOworCXNldF9ncGlvX2JpdHMoQklUKEdQSU9fT0UpLCBHUElPX0NPTkZJRyhvZmZzZXQpKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0bG1tX2xvY2ssIGlycV9mbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXNtX2dwaW9fcmVxdWVzdChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCit7CisJcmV0dXJuIG1zbV9ncGlvbXV4X2dldChjaGlwLT5iYXNlICsgb2Zmc2V0KTsKK30KKworc3RhdGljIHZvaWQgbXNtX2dwaW9fZnJlZShzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCit7CisJbXNtX2dwaW9tdXhfcHV0KGNoaXAtPmJhc2UgKyBvZmZzZXQpOworfQorCitzdGF0aWMgaW50IG1zbV9ncGlvX3RvX2lycShzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCit7CisJcmV0dXJuIE1TTV9HUElPX1RPX0lOVChjaGlwLT5iYXNlICsgb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSBpbnQgbXNtX2lycV90b19ncGlvKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIGlycSkKK3sKKwlyZXR1cm4gaXJxIC0gTVNNX0dQSU9fVE9fSU5UKGNoaXAtPmJhc2UpOworfQorCitzdGF0aWMgc3RydWN0IG1zbV9ncGlvX2RldiBtc21fZ3BpbyA9IHsKKwkuZ3Bpb19jaGlwID0geworCQkuYmFzZSAgICAgICAgICAgICA9IDAsCisJCS5uZ3BpbyAgICAgICAgICAgID0gTlJfR1BJT19JUlFTLAorCQkuZGlyZWN0aW9uX2lucHV0ICA9IG1zbV9ncGlvX2RpcmVjdGlvbl9pbnB1dCwKKwkJLmRpcmVjdGlvbl9vdXRwdXQgPSBtc21fZ3Bpb19kaXJlY3Rpb25fb3V0cHV0LAorCQkuZ2V0ICAgICAgICAgICAgICA9IG1zbV9ncGlvX2dldCwKKwkJLnNldCAgICAgICAgICAgICAgPSBtc21fZ3Bpb19zZXQsCisJCS50b19pcnEgICAgICAgICAgID0gbXNtX2dwaW9fdG9faXJxLAorCQkucmVxdWVzdCAgICAgICAgICA9IG1zbV9ncGlvX3JlcXVlc3QsCisJCS5mcmVlICAgICAgICAgICAgID0gbXNtX2dwaW9fZnJlZSwKKwl9LAorfTsKKworLyogRm9yIGR1YWwtZWRnZSBpbnRlcnJ1cHRzIGluIHNvZnR3YXJlLCBzaW5jZSB0aGUgaGFyZHdhcmUgaGFzIG5vCisgKiBzdWNoIHN1cHBvcnQ6CisgKgorICogQXQgYXBwcm9wcmlhdGUgbW9tZW50cywgdGhpcyBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIHRvIGZsaXAgdGhlIHBvbGFyaXR5CisgKiBzZXR0aW5ncyBvZiBib3RoLWVkZ2UgaXJxIGxpbmVzIHRvIHRyeSBhbmQgY2F0Y2ggdGhlIG5leHQgZWRnZS4KKyAqCisgKiBUaGUgYXR0ZW1wdCBpcyBjb25zaWRlcmVkIHN1Y2Nlc3NmdWwgaWY6CisgKiAtIHRoZSBzdGF0dXMgYml0IGdvZXMgaGlnaCwgaW5kaWNhdGluZyB0aGF0IGFuIGVkZ2Ugd2FzIGNhdWdodCwgb3IKKyAqIC0gdGhlIGlucHV0IHZhbHVlIG9mIHRoZSBncGlvIGRvZXNuJ3QgY2hhbmdlIGR1cmluZyB0aGUgYXR0ZW1wdC4KKyAqIElmIHRoZSB2YWx1ZSBjaGFuZ2VzIHR3aWNlIGR1cmluZyB0aGUgcHJvY2VzcywgdGhhdCB3b3VsZCBjYXVzZSB0aGUgZmlyc3QKKyAqIHRlc3QgdG8gZmFpbCBidXQgd291bGQgZm9yY2UgdGhlIHNlY29uZCwgYXMgdHdvIG9wcG9zaXRlCisgKiB0cmFuc2l0aW9ucyB3b3VsZCBjYXVzZSBhIGRldGVjdGlvbiBubyBtYXR0ZXIgdGhlIHBvbGFyaXR5IHNldHRpbmcuCisgKgorICogVGhlIGRvLWxvb3AgdHJpZXMgdG8gc2xlZGdlLWhhbW1lciBjbG9zZWQgdGhlIHRpbWluZyBob2xlIGJldHdlZW4KKyAqIHRoZSBpbml0aWFsIHZhbHVlLXJlYWQgYW5kIHRoZSBwb2xhcml0eS13cml0ZSAtIGlmIHRoZSBsaW5lIHZhbHVlIGNoYW5nZXMKKyAqIGR1cmluZyB0aGF0IHdpbmRvdywgYW4gaW50ZXJydXB0IGlzIGxvc3QsIHRoZSBuZXcgcG9sYXJpdHkgc2V0dGluZyBpcworICogaW5jb3JyZWN0LCBhbmQgdGhlIGZpcnN0IHN1Y2Nlc3MgdGVzdCB3aWxsIGZhaWwsIGNhdXNpbmcgYSByZXRyeS4KKyAqCisgKiBBbGdvcml0aG0gY29tZXMgZnJvbSBHb29nbGUncyBtc21ncGlvIGRyaXZlciwgc2VlIG1hY2gtbXNtL2dwaW8uYy4KKyAqLworc3RhdGljIHZvaWQgbXNtX2dwaW9fdXBkYXRlX2R1YWxfZWRnZV9wb3ModW5zaWduZWQgZ3BpbykKK3sKKwlpbnQgbG9vcF9saW1pdCA9IDEwMDsKKwl1bnNpZ25lZCB2YWwsIHZhbDIsIGludHN0YXQ7CisKKwlkbyB7CisJCXZhbCA9IHJlYWRsKEdQSU9fSU5fT1VUKGdwaW8pKSAmIEJJVChHUElPX0lOKTsKKwkJaWYgKHZhbCkKKwkJCWNsZWFyX2dwaW9fYml0cyhCSVQoSU5UUl9QT0xfQ1RMKSwgR1BJT19JTlRSX0NGRyhncGlvKSk7CisJCWVsc2UKKwkJCXNldF9ncGlvX2JpdHMoQklUKElOVFJfUE9MX0NUTCksIEdQSU9fSU5UUl9DRkcoZ3BpbykpOworCQl2YWwyID0gcmVhZGwoR1BJT19JTl9PVVQoZ3BpbykpICYgQklUKEdQSU9fSU4pOworCQlpbnRzdGF0ID0gcmVhZGwoR1BJT19JTlRSX1NUQVRVUyhncGlvKSkgJiBCSVQoSU5UUl9TVEFUVVMpOworCQlpZiAoaW50c3RhdCB8fCB2YWwgPT0gdmFsMikKKwkJCXJldHVybjsKKwl9IHdoaWxlIChsb29wX2xpbWl0LS0gPiAwKTsKKwlwcl9lcnIoImR1YWwtZWRnZSBpcnEgZmFpbGVkIHRvIHN0YWJpbGl6ZSwgIgorCSAgICAgICAiaW50ZXJydXB0cyBkcm9wcGVkLiAlIzA4eCAhPSAlIzA4eFxuIiwKKwkgICAgICAgdmFsLCB2YWwyKTsKK30KKworc3RhdGljIHZvaWQgbXNtX2dwaW9faXJxX2Fjayh1bnNpZ25lZCBpbnQgaXJxKQoreworCWludCBncGlvID0gbXNtX2lycV90b19ncGlvKCZtc21fZ3Bpby5ncGlvX2NoaXAsIGlycSk7CisKKwl3cml0ZWwoQklUKElOVFJfU1RBVFVTKSwgR1BJT19JTlRSX1NUQVRVUyhncGlvKSk7CisJaWYgKHRlc3RfYml0KGdwaW8sIG1zbV9ncGlvLmR1YWxfZWRnZV9pcnFzKSkKKwkJbXNtX2dwaW9fdXBkYXRlX2R1YWxfZWRnZV9wb3MoZ3Bpbyk7Cit9CisKK3N0YXRpYyB2b2lkIG1zbV9ncGlvX2lycV9tYXNrKHVuc2lnbmVkIGludCBpcnEpCit7CisJaW50IGdwaW8gPSBtc21faXJxX3RvX2dwaW8oJm1zbV9ncGlvLmdwaW9fY2hpcCwgaXJxKTsKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ0bG1tX2xvY2ssIGlycV9mbGFncyk7CisJd3JpdGVsKFRBUkdFVF9QUk9DX05PTkUsIEdQSU9fSU5UUl9DRkdfU1UoZ3BpbykpOworCWNsZWFyX2dwaW9fYml0cyhJTlRSX1JBV19TVEFUVVNfRU4gfCBJTlRSX0VOQUJMRSwgR1BJT19JTlRSX0NGRyhncGlvKSk7CisJX19jbGVhcl9iaXQoZ3BpbywgbXNtX2dwaW8uZW5hYmxlZF9pcnFzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0bG1tX2xvY2ssIGlycV9mbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIG1zbV9ncGlvX2lycV91bm1hc2sodW5zaWduZWQgaW50IGlycSkKK3sKKwlpbnQgZ3BpbyA9IG1zbV9pcnFfdG9fZ3BpbygmbXNtX2dwaW8uZ3Bpb19jaGlwLCBpcnEpOworCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnRsbW1fbG9jaywgaXJxX2ZsYWdzKTsKKwlfX3NldF9iaXQoZ3BpbywgbXNtX2dwaW8uZW5hYmxlZF9pcnFzKTsKKwlzZXRfZ3Bpb19iaXRzKElOVFJfUkFXX1NUQVRVU19FTiB8IElOVFJfRU5BQkxFLCBHUElPX0lOVFJfQ0ZHKGdwaW8pKTsKKwl3cml0ZWwoVEFSR0VUX1BST0NfU0NPUlBJT04sIEdQSU9fSU5UUl9DRkdfU1UoZ3BpbykpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRsbW1fbG9jaywgaXJxX2ZsYWdzKTsKK30KKworc3RhdGljIGludCBtc21fZ3Bpb19pcnFfc2V0X3R5cGUodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IGZsb3dfdHlwZSkKK3sKKwlpbnQgZ3BpbyA9IG1zbV9pcnFfdG9fZ3BpbygmbXNtX2dwaW8uZ3Bpb19jaGlwLCBpcnEpOworCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOworCXVpbnQzMl90IGJpdHM7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdGxtbV9sb2NrLCBpcnFfZmxhZ3MpOworCisJYml0cyA9IHJlYWRsKEdQSU9fSU5UUl9DRkcoZ3BpbykpOworCisJaWYgKGZsb3dfdHlwZSAmIElSUV9UWVBFX0VER0VfQk9USCkgeworCQliaXRzIHw9IEJJVChJTlRSX0RFQ1RfQ1RMKTsKKwkJaXJxX2Rlc2NbaXJxXS5oYW5kbGVfaXJxID0gaGFuZGxlX2VkZ2VfaXJxOworCQlpZiAoKGZsb3dfdHlwZSAmIElSUV9UWVBFX0VER0VfQk9USCkgPT0gSVJRX1RZUEVfRURHRV9CT1RIKQorCQkJX19zZXRfYml0KGdwaW8sIG1zbV9ncGlvLmR1YWxfZWRnZV9pcnFzKTsKKwkJZWxzZQorCQkJX19jbGVhcl9iaXQoZ3BpbywgbXNtX2dwaW8uZHVhbF9lZGdlX2lycXMpOworCX0gZWxzZSB7CisJCWJpdHMgJj0gfkJJVChJTlRSX0RFQ1RfQ1RMKTsKKwkJaXJxX2Rlc2NbaXJxXS5oYW5kbGVfaXJxID0gaGFuZGxlX2xldmVsX2lycTsKKwkJX19jbGVhcl9iaXQoZ3BpbywgbXNtX2dwaW8uZHVhbF9lZGdlX2lycXMpOworCX0KKworCWlmIChmbG93X3R5cGUgJiAoSVJRX1RZUEVfRURHRV9SSVNJTkcgfCBJUlFfVFlQRV9MRVZFTF9ISUdIKSkKKwkJYml0cyB8PSBCSVQoSU5UUl9QT0xfQ1RMKTsKKwllbHNlCisJCWJpdHMgJj0gfkJJVChJTlRSX1BPTF9DVEwpOworCisJd3JpdGVsKGJpdHMsIEdQSU9fSU5UUl9DRkcoZ3BpbykpOworCisJaWYgKChmbG93X3R5cGUgJiBJUlFfVFlQRV9FREdFX0JPVEgpID09IElSUV9UWVBFX0VER0VfQk9USCkKKwkJbXNtX2dwaW9fdXBkYXRlX2R1YWxfZWRnZV9wb3MoZ3Bpbyk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0bG1tX2xvY2ssIGlycV9mbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFdoZW4gdGhlIHN1bW1hcnkgSVJRIGlzIHJhaXNlZCwgYW55IG51bWJlciBvZiBHUElPIGxpbmVzIG1heSBiZSBoaWdoLgorICogSXQgaXMgdGhlIGpvYiBvZiB0aGUgc3VtbWFyeSBoYW5kbGVyIHRvIGZpbmQgYWxsIHRob3NlIEdQSU8gbGluZXMKKyAqIHdoaWNoIGhhdmUgYmVlbiBzZXQgYXMgc3VtbWFyeSBJUlEgbGluZXMgYW5kIHdoaWNoIGFyZSB0cmlnZ2VyZWQsCisgKiBhbmQgdG8gY2FsbCB0aGVpciBpbnRlcnJ1cHQgaGFuZGxlcnMuCisgKi8KK3N0YXRpYyB2b2lkIG1zbV9zdW1tYXJ5X2lycV9oYW5kbGVyKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKK3sKKwl1bnNpZ25lZCBsb25nIGk7CisKKwlmb3IgKGkgPSBmaW5kX2ZpcnN0X2JpdChtc21fZ3Bpby5lbmFibGVkX2lycXMsIE5SX0dQSU9fSVJRUyk7CisJICAgICBpIDwgTlJfR1BJT19JUlFTOworCSAgICAgaSA9IGZpbmRfbmV4dF9iaXQobXNtX2dwaW8uZW5hYmxlZF9pcnFzLCBOUl9HUElPX0lSUVMsIGkgKyAxKSkgeworCQlpZiAocmVhZGwoR1BJT19JTlRSX1NUQVRVUyhpKSkgJiBCSVQoSU5UUl9TVEFUVVMpKQorCQkJZ2VuZXJpY19oYW5kbGVfaXJxKG1zbV9ncGlvX3RvX2lycSgmbXNtX2dwaW8uZ3Bpb19jaGlwLAorCQkJCQkJCSAgIGkpKTsKKwl9CisJZGVzYy0+Y2hpcC0+YWNrKGlycSk7Cit9CisKK3N0YXRpYyBpbnQgbXNtX2dwaW9faXJxX3NldF93YWtlKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCBvbikKK3sKKwlpbnQgZ3BpbyA9IG1zbV9pcnFfdG9fZ3BpbygmbXNtX2dwaW8uZ3Bpb19jaGlwLCBpcnEpOworCisJaWYgKG9uKSB7CisJCWlmIChiaXRtYXBfZW1wdHkobXNtX2dwaW8ud2FrZV9pcnFzLCBOUl9HUElPX0lSUVMpKQorCQkJc2V0X2lycV93YWtlKFRMTU1fU0NTU19TVU1NQVJZX0lSUSwgMSk7CisJCXNldF9iaXQoZ3BpbywgbXNtX2dwaW8ud2FrZV9pcnFzKTsKKwl9IGVsc2UgeworCQljbGVhcl9iaXQoZ3BpbywgbXNtX2dwaW8ud2FrZV9pcnFzKTsKKwkJaWYgKGJpdG1hcF9lbXB0eShtc21fZ3Bpby53YWtlX2lycXMsIE5SX0dQSU9fSVJRUykpCisJCQlzZXRfaXJxX3dha2UoVExNTV9TQ1NTX1NVTU1BUllfSVJRLCAwKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBtc21fZ3Bpb19pcnFfY2hpcCA9IHsKKwkubmFtZQkJPSAibXNtZ3BpbyIsCisJLm1hc2sJCT0gbXNtX2dwaW9faXJxX21hc2ssCisJLnVubWFzawkJPSBtc21fZ3Bpb19pcnFfdW5tYXNrLAorCS5hY2sJCT0gbXNtX2dwaW9faXJxX2FjaywKKwkuc2V0X3R5cGUJPSBtc21fZ3Bpb19pcnFfc2V0X3R5cGUsCisJLnNldF93YWtlCT0gbXNtX2dwaW9faXJxX3NldF93YWtlLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgbXNtX2dwaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCWludCBpLCBpcnEsIHJldDsKKworCWJpdG1hcF96ZXJvKG1zbV9ncGlvLmVuYWJsZWRfaXJxcywgTlJfR1BJT19JUlFTKTsKKwliaXRtYXBfemVybyhtc21fZ3Bpby53YWtlX2lycXMsIE5SX0dQSU9fSVJRUyk7CisJYml0bWFwX3plcm8obXNtX2dwaW8uZHVhbF9lZGdlX2lycXMsIE5SX0dQSU9fSVJRUyk7CisJbXNtX2dwaW8uZ3Bpb19jaGlwLmxhYmVsID0gZGV2LT5uYW1lOworCXJldCA9IGdwaW9jaGlwX2FkZCgmbXNtX2dwaW8uZ3Bpb19jaGlwKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWZvciAoaSA9IDA7IGkgPCBtc21fZ3Bpby5ncGlvX2NoaXAubmdwaW87ICsraSkgeworCQlpcnEgPSBtc21fZ3Bpb190b19pcnEoJm1zbV9ncGlvLmdwaW9fY2hpcCwgaSk7CisJCXNldF9pcnFfY2hpcChpcnEsICZtc21fZ3Bpb19pcnFfY2hpcCk7CisJCXNldF9pcnFfaGFuZGxlcihpcnEsIGhhbmRsZV9sZXZlbF9pcnEpOworCQlzZXRfaXJxX2ZsYWdzKGlycSwgSVJRRl9WQUxJRCk7CisJfQorCisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoVExNTV9TQ1NTX1NVTU1BUllfSVJRLAorCQkJCW1zbV9zdW1tYXJ5X2lycV9oYW5kbGVyKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgbXNtX2dwaW9fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlpbnQgcmV0ID0gZ3Bpb2NoaXBfcmVtb3ZlKCZtc21fZ3Bpby5ncGlvX2NoaXApOworCisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlzZXRfaXJxX2hhbmRsZXIoVExNTV9TQ1NTX1NVTU1BUllfSVJRLCBOVUxMKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtc21fZ3Bpb19kcml2ZXIgPSB7CisJLnByb2JlID0gbXNtX2dwaW9fcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKG1zbV9ncGlvX3JlbW92ZSksCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAibXNtZ3BpbyIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtc21fZGV2aWNlX2dwaW8gPSB7CisJLm5hbWUgPSAibXNtZ3BpbyIsCisJLmlkICAgPSAtMSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG1zbV9ncGlvX2luaXQodm9pZCkKK3sKKwlpbnQgcmM7CisKKwlyYyA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbXNtX2dwaW9fZHJpdmVyKTsKKwlpZiAoIXJjKSB7CisJCXJjID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZtc21fZGV2aWNlX2dwaW8pOworCQlpZiAocmMpCisJCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbXNtX2dwaW9fZHJpdmVyKTsKKwl9CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBtc21fZ3Bpb19leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoJm1zbV9kZXZpY2VfZ3Bpbyk7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm1zbV9ncGlvX2RyaXZlcik7Cit9CisKK3Bvc3Rjb3JlX2luaXRjYWxsKG1zbV9ncGlvX2luaXQpOworbW9kdWxlX2V4aXQobXNtX2dwaW9fZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkdyZWdvcnkgQmVhbiA8Z2JlYW5AY29kZWF1cm9yYS5vcmc+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgUXVhbGNvbW0gTVNNIFRMTU12MiBTb0MgR1BJT3MiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06bXNtZ3BpbyIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL2lvbW11LmggYi9hcmNoL2FybS9tYWNoLW1zbS9pbmNsdWRlL21hY2gvaW9tbXUuaAppbmRleCAyMThlZjU3Li4yOTZjMGYxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW1zbS9pbmNsdWRlL21hY2gvaW9tbXUuaAorKysgYi9hcmNoL2FybS9tYWNoLW1zbS9pbmNsdWRlL21hY2gvaW9tbXUuaApAQCAtMjAsMTMgKzIwLDI2IEBACiAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KIAorLyogU2hhcmFiaWxpdHkgYXR0cmlidXRlcyBvZiBNU00gSU9NTVUgbWFwcGluZ3MgKi8KKyNkZWZpbmUgTVNNX0lPTU1VX0FUVFJfTk9OX1NICQkweDAKKyNkZWZpbmUgTVNNX0lPTU1VX0FUVFJfU0gJCTB4NAorCisvKiBDYWNoZWFiaWxpdHkgYXR0cmlidXRlcyBvZiBNU00gSU9NTVUgbWFwcGluZ3MgKi8KKyNkZWZpbmUgTVNNX0lPTU1VX0FUVFJfTk9OQ0FDSEVECTB4MAorI2RlZmluZSBNU01fSU9NTVVfQVRUUl9DQUNIRURfV0JfV0EJMHgxCisjZGVmaW5lIE1TTV9JT01NVV9BVFRSX0NBQ0hFRF9XQl9OV0EJMHgyCisjZGVmaW5lIE1TTV9JT01NVV9BVFRSX0NBQ0hFRF9XVAkweDMKKworLyogTWFzayBmb3IgdGhlIGNhY2hlIHBvbGljeSBhdHRyaWJ1dGUgKi8KKyNkZWZpbmUgTVNNX0lPTU1VX0NQX01BU0sJCTB4MDMKKwogLyogTWF4aW11bSBudW1iZXIgb2YgTWFjaGluZSBJRHMgdGhhdCB3ZSBhcmUgYWxsb3dpbmcgdG8gYmUgbWFwcGVkIHRvIHRoZSBzYW1lCiAgKiBjb250ZXh0IGJhbmsuIFRoZSBudW1iZXIgb2YgTUlEcyBtYXBwZWQgdG8gdGhlIHNhbWUgQ0IgZG9lcyBub3QgYWZmZWN0CiAgKiBwZXJmb3JtYW5jZSwgYnV0IHRoZXJlIGlzIGEgcHJhY3RpY2FsIGxpbWl0IG9uIGhvdyBtYW55IGRpc3RpbmN0IE1JRHMgbWF5CiAgKiBiZSBwcmVzZW50LiBUaGVzZSBtYXBwaW5ncyBhcmUgdHlwaWNhbGx5IGRldGVybWluZWQgYXQgZGVzaWduIHRpbWUgYW5kIGFyZQogICogbm90IGV4cGVjdGVkIHRvIGNoYW5nZSBhdCBydW4gdGltZS4KICAqLwotI2RlZmluZSBNQVhfTlVNX01JRFMJMTYKKyNkZWZpbmUgTUFYX05VTV9NSURTCTMyCiAKIC8qKgogICogc3RydWN0IG1zbV9pb21tdV9kZXYgLSBhIHNpbmdsZSBJT01NVSBoYXJkd2FyZSBpbnN0YW5jZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL2lvbW11X2h3LTh4eHguaCBiL2FyY2gvYXJtL21hY2gtbXNtL2luY2x1ZGUvbWFjaC9pb21tdV9ody04eHh4LmgKaW5kZXggZjkzODZkMy4uYzJjM2RhOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL2lvbW11X2h3LTh4eHguaAorKysgYi9hcmNoL2FybS9tYWNoLW1zbS9pbmNsdWRlL21hY2gvaW9tbXVfaHctOHh4eC5oCkBAIC01NCw2ICs1NCw3IEBACiAKICNkZWZpbmUgTlVNX0ZMX1BURQk0MDk2CiAjZGVmaW5lIE5VTV9TTF9QVEUJMjU2CisjZGVmaW5lIE5VTV9URVhfQ0xBU1MJOAogCiAvKiBGaXJzdC1sZXZlbCBwYWdlIHRhYmxlIGJpdHMgKi8KICNkZWZpbmUgRkxfQkFTRV9NQVNLCQkweEZGRkZGQzAwCkBAIC02Myw2ICs2NCw5IEBACiAjZGVmaW5lIEZMX0FQX1dSSVRFCQkoMSA8PCAxMCkKICNkZWZpbmUgRkxfQVBfUkVBRAkJKDEgPDwgMTEpCiAjZGVmaW5lIEZMX1NIQVJFRAkJKDEgPDwgMTYpCisjZGVmaW5lIEZMX0JVRkZFUkFCTEUJCSgxIDw8IDIpCisjZGVmaW5lIEZMX0NBQ0hFQUJMRQkJKDEgPDwgMykKKyNkZWZpbmUgRkxfVEVYMAkJCSgxIDw8IDEyKQogI2RlZmluZSBGTF9PRkZTRVQodmEpCQkoKCh2YSkgJiAweEZGRjAwMDAwKSA+PiAyMCkKIAogLyogU2Vjb25kLWxldmVsIHBhZ2UgdGFibGUgYml0cyAqLwpAQCAtNzMsOCArNzcsMjAgQEAKICNkZWZpbmUgU0xfQVAwCQkJKDEgPDwgNCkKICNkZWZpbmUgU0xfQVAxCQkJKDIgPDwgNCkKICNkZWZpbmUgU0xfU0hBUkVECQkoMSA8PCAxMCkKKyNkZWZpbmUgU0xfQlVGRkVSQUJMRQkJKDEgPDwgMikKKyNkZWZpbmUgU0xfQ0FDSEVBQkxFCQkoMSA8PCAzKQorI2RlZmluZSBTTF9URVgwCQkJKDEgPDwgNikKICNkZWZpbmUgU0xfT0ZGU0VUKHZhKQkJKCgodmEpICYgMHhGRjAwMCkgPj4gMTIpCiAKKy8qIE1lbW9yeSB0eXBlIGFuZCBjYWNoZSBwb2xpY3kgYXR0cmlidXRlcyAqLworI2RlZmluZSBNVF9TTwkJCTAKKyNkZWZpbmUgTVRfREVWCQkJMQorI2RlZmluZSBNVF9OT1JNQUwJCTIKKyNkZWZpbmUgQ1BfTk9OQ0FDSEVECQkwCisjZGVmaW5lIENQX1dCX1dBCQkxCisjZGVmaW5lIENQX1dUCQkJMgorI2RlZmluZSBDUF9XQl9OV0EJCTMKKwogLyogR2xvYmFsIHJlZ2lzdGVyIHNldHRlcnMgLyBnZXR0ZXJzICovCiAjZGVmaW5lIFNFVF9NMlZDQlJfTihiLCBOLCB2KQkgU0VUX0dMT0JBTF9SRUdfTihNMlZDQlJfTiwgTiwgKGIpLCAodikpCiAjZGVmaW5lIFNFVF9DQkFDUl9OKGIsIE4sIHYpCSBTRVRfR0xPQkFMX1JFR19OKENCQUNSX04sIE4sIChiKSwgKHYpKQpAQCAtNzA2LDcgKzcyMiw5IEBACiAjZGVmaW5lIEdFVF9PQ1BDNShiLCBjKQkJR0VUX0NPTlRFWFRfRklFTEQoYiwgYywgTk1SUiwgT0NQQzUpCiAjZGVmaW5lIEdFVF9PQ1BDNihiLCBjKQkJR0VUX0NPTlRFWFRfRklFTEQoYiwgYywgTk1SUiwgT0NQQzYpCiAjZGVmaW5lIEdFVF9PQ1BDNyhiLCBjKQkJR0VUX0NPTlRFWFRfRklFTEQoYiwgYywgTk1SUiwgT0NQQzcpCi0KKyNkZWZpbmUgTk1SUl9JQ1Aobm1yciwgbikJKCgobm1ycikgJiAoMyA8PCAoKG4pICogMikpKSA+PiAoKG4pICogMikpCisjZGVmaW5lIE5NUlJfT0NQKG5tcnIsIG4pCSgoKG5tcnIpICYgKDMgPDwgKChuKSAqIDIgKyAxNikpKSA+PiBcCisJCQkJCQkJCSgobikgKiAyICsgMTYpKQogCiAvKiBQQVIgKi8KICNkZWZpbmUgR0VUX0ZBVUxUKGIsIGMpCQlHRVRfQ09OVEVYVF9GSUVMRChiLCBjLCBQQVIsIEZBVUxUKQpAQCAtNzUwLDYgKzc2OCw4IEBACiAjZGVmaW5lIEdFVF9OT1M1KGIsIGMpCQlHRVRfQ09OVEVYVF9GSUVMRChiLCBjLCBQUlJSLCBOT1M1KQogI2RlZmluZSBHRVRfTk9TNihiLCBjKQkJR0VUX0NPTlRFWFRfRklFTEQoYiwgYywgUFJSUiwgTk9TNikKICNkZWZpbmUgR0VUX05PUzcoYiwgYykJCUdFVF9DT05URVhUX0ZJRUxEKGIsIGMsIFBSUlIsIE5PUzcpCisjZGVmaW5lIFBSUlJfTk9TKHBycnIsIG4pCSAoKHBycnIpICYgKDEgPDwgKChuKSArIDI0KSkgPyAxIDogMCkKKyNkZWZpbmUgUFJSUl9NVChwcnJyLCBuKQkgKCgoKHBycnIpICYgKDMgPDwgKChuKSAqIDIpKSkgPj4gKChuKSAqIDIpKSkKIAogCiAvKiBSRVNVTUUgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXNtL2luY2x1ZGUvbWFjaC9pcnFzLTh4NjAuaCBiL2FyY2gvYXJtL21hY2gtbXNtL2luY2x1ZGUvbWFjaC9pcnFzLTh4NjAuaAppbmRleCAzNjA3NGNmLi5mNjU4NDFjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW1zbS9pbmNsdWRlL21hY2gvaXJxcy04eDYwLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL2lycXMtOHg2MC5oCkBAIC0yMzcsNyArMjM3LDEyIEBACiAjZGVmaW5lIEdTQkkxMV9RVVBfSVJRCQkJCShHSUNfU1BJX1NUQVJUICsgMTk0KQogI2RlZmluZSBJTlRfVUFSVDEyRE1fSVJRCQkJKEdJQ19TUElfU1RBUlQgKyAxOTUpCiAjZGVmaW5lIEdTQkkxMl9RVVBfSVJRCQkJCShHSUNfU1BJX1NUQVJUICsgMTk2KQotLypTUEkgMTk3IHRvIDIxNiBhcmVudCB1c2VkIGluIDh4NjAqLworCisvKlNQSSAxOTcgdG8gMjA5IGFyZW50IHVzZWQgaW4gOHg2MCovCisjZGVmaW5lIFNNTVVfR0ZYMkQxX0NCX1NDX1NFQ1VSRV9JUlEgICAgICAgICAgICAoR0lDX1NQSV9TVEFSVCArIDIxMCkKKyNkZWZpbmUgU01NVV9HRlgyRDFfQ0JfU0NfTk9OX1NFQ1VSRV9JUlEgICAgICAgIChHSUNfU1BJX1NUQVJUICsgMjExKQorCisvKlNQSSAyMTIgdG8gMjE2IGFyZW50IHVzZWQgaW4gOHg2MCovCiAjZGVmaW5lIFNNUFNTX1NQQVJFXzEJCQkJKEdJQ19TUElfU1RBUlQgKyAyMTcpCiAjZGVmaW5lIFNNUFNTX1NQQVJFXzIJCQkJKEdJQ19TUElfU1RBUlQgKyAyMTgpCiAjZGVmaW5lIFNNUFNTX1NQQVJFXzMJCQkJKEdJQ19TUElfU1RBUlQgKyAyMTkpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1zbS9pbmNsdWRlL21hY2gvbXNtX2lvbWFwLTd4MzAuaCBiL2FyY2gvYXJtL21hY2gtbXNtL2luY2x1ZGUvbWFjaC9tc21faW9tYXAtN3gzMC5oCmluZGV4IDhhMDBjMmQuLjBmZDdiNjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXNtL2luY2x1ZGUvbWFjaC9tc21faW9tYXAtN3gzMC5oCisrKyBiL2FyY2gvYXJtL21hY2gtbXNtL2luY2x1ZGUvbWFjaC9tc21faW9tYXAtN3gzMC5oCkBAIC0xMTksNCArMTE5LDcgQEAKICNkZWZpbmUgTVNNX0FENV9QSFlTICAgICAgICAgIDB4QTcwMDAwMDAKICNkZWZpbmUgTVNNX0FENV9TSVpFICAgICAgICAgIChTWl8xTSoxMykKIAorI2RlZmluZSBNU01fSFNVU0JfUEhZUyAgICAgICAgMHhBMzYwMDAwMAorI2RlZmluZSBNU01fSFNVU0JfU0laRSAgICAgICAgU1pfMUsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1zbS9pbmNsdWRlL21hY2gvbXNtX2lvbWFwLTh4NjAuaCBiL2FyY2gvYXJtL21hY2gtbXNtL2luY2x1ZGUvbWFjaC9tc21faW9tYXAtOHg2MC5oCmluZGV4IDQ1YmFiNTAuLjdjNDNhOWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXNtL2luY2x1ZGUvbWFjaC9tc21faW9tYXAtOHg2MC5oCisrKyBiL2FyY2gvYXJtL21hY2gtbXNtL2luY2x1ZGUvbWFjaC9tc21faW9tYXAtOHg2MC5oCkBAIC05OCw0ICs5OCw3IEBACiAjZGVmaW5lIE1TTV9JT01NVV9HRlgyRDBfUEhZUwkweDA3RDAwMDAwCiAjZGVmaW5lIE1TTV9JT01NVV9HRlgyRDBfU0laRQlTWl8xTQogCisjZGVmaW5lIE1TTV9JT01NVV9HRlgyRDFfUEhZUwkweDA3RTAwMDAwCisjZGVmaW5lIE1TTV9JT01NVV9HRlgyRDFfU0laRQlTWl8xTQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXNtL2luY2x1ZGUvbWFjaC9zbXAuaCBiL2FyY2gvYXJtL21hY2gtbXNtL2luY2x1ZGUvbWFjaC9zbXAuaAppbmRleCAzZmY3YmY1Li5hOTVmN2I5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW1zbS9pbmNsdWRlL21hY2gvc21wLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL3NtcC5oCkBAIC0zMSw5ICszMSw5IEBACiAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvZ2ljLmg+CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzbXBfY3Jvc3NfY2FsbChjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaykKK3N0YXRpYyBpbmxpbmUgdm9pZCBzbXBfY3Jvc3NfY2FsbChjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywgaW50IGlwaSkKIHsKLQlnaWNfcmFpc2Vfc29mdGlycShtYXNrLCAxKTsKKwlnaWNfcmFpc2Vfc29mdGlycShtYXNrLCBpcGkpOwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXNtL2lvLmMgYi9hcmNoL2FybS9tYWNoLW1zbS9pby5jCmluZGV4IGQzNmI2MTAuLmY5MTJkN2IgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXNtL2lvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1tc20vaW8uYwpAQCAtMTYzLDMgKzE2Myw0IEBACiAJcmV0dXJuIF9fYXJtX2lvcmVtYXBfY2FsbGVyKHBoeXNfYWRkciwgc2l6ZSwgbXR5cGUsCiAJCV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiB9CitFWFBPUlRfU1lNQk9MKF9fbXNtX2lvcmVtYXApOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tc20vaW9tbXUuYyBiL2FyY2gvYXJtL21hY2gtbXNtL2lvbW11LmMKaW5kZXggZjcxNzQ3ZC4uZTJkNThlNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tc20vaW9tbXUuYworKysgYi9hcmNoL2FybS9tYWNoLW1zbS9pb21tdS5jCkBAIC0zMyw2ICszMywxNiBAQAogI2luY2x1ZGUgPG1hY2gvaW9tbXVfaHctOHh4eC5oPgogI2luY2x1ZGUgPG1hY2gvaW9tbXUuaD4KIAorI2RlZmluZSBNUkMocmVnLCBwcm9jZXNzb3IsIG9wMSwgY3JuLCBjcm0sIG9wMikJCQkJXAorX19hc21fXyBfX3ZvbGF0aWxlX18gKAkJCQkJCQlcCisiICAgbXJjICAgIiAgICNwcm9jZXNzb3IgIiwiICNvcDEgIiwgJTAsIiAgI2NybiAiLCIgI2NybSAiLCIgI29wMiAiXG4iICBcCis6ICI9ciIgKHJlZykpCisKKyNkZWZpbmUgUkNQMTVfUFJSUihyZWcpCQlNUkMocmVnLCBwMTUsIDAsIGMxMCwgYzIsIDApCisjZGVmaW5lIFJDUDE1X05NUlIocmVnKQkJTVJDKHJlZywgcDE1LCAwLCBjMTAsIGMyLCAxKQorCitzdGF0aWMgaW50IG1zbV9pb21tdV90ZXhfY2xhc3NbNF07CisKIERFRklORV9TUElOTE9DSyhtc21faW9tbXVfbG9jayk7CiAKIHN0cnVjdCBtc21fcHJpdiB7CkBAIC00MCwyMyArNTAsMjYgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3RfYXR0YWNoZWQ7CiB9OwogCi1zdGF0aWMgdm9pZCBfX2ZsdXNoX2lvdGxiKHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbikKK3N0YXRpYyBpbnQgX19mbHVzaF9pb3RsYihzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4pCiB7CiAJc3RydWN0IG1zbV9wcml2ICpwcml2ID0gZG9tYWluLT5wcml2OwogCXN0cnVjdCBtc21faW9tbXVfZHJ2ZGF0YSAqaW9tbXVfZHJ2ZGF0YTsKIAlzdHJ1Y3QgbXNtX2lvbW11X2N0eF9kcnZkYXRhICpjdHhfZHJ2ZGF0YTsKLQorCWludCByZXQgPSAwOwogI2lmbmRlZiBDT05GSUdfSU9NTVVfUEdUQUJMRVNfTDIKIAl1bnNpZ25lZCBsb25nICpmbF90YWJsZSA9IHByaXYtPnBndGFibGU7CiAJaW50IGk7CiAKLQlkbWFjX2ZsdXNoX3JhbmdlKGZsX3RhYmxlLCBmbF90YWJsZSArIFNaXzE2Syk7CisJaWYgKCFsaXN0X2VtcHR5KCZwcml2LT5saXN0X2F0dGFjaGVkKSkgeworCQlkbWFjX2ZsdXNoX3JhbmdlKGZsX3RhYmxlLCBmbF90YWJsZSArIFNaXzE2Syk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgTlVNX0ZMX1BURTsgaSsrKQotCQlpZiAoKGZsX3RhYmxlW2ldICYgMHgwMykgPT0gRkxfVFlQRV9UQUJMRSkgewotCQkJdm9pZCAqc2xfdGFibGUgPSBfX3ZhKGZsX3RhYmxlW2ldICYgRkxfQkFTRV9NQVNLKTsKLQkJCWRtYWNfZmx1c2hfcmFuZ2Uoc2xfdGFibGUsIHNsX3RhYmxlICsgU1pfNEspOwotCQl9CisJCWZvciAoaSA9IDA7IGkgPCBOVU1fRkxfUFRFOyBpKyspCisJCQlpZiAoKGZsX3RhYmxlW2ldICYgMHgwMykgPT0gRkxfVFlQRV9UQUJMRSkgeworCQkJCXZvaWQgKnNsX3RhYmxlID0gX192YShmbF90YWJsZVtpXSAmCisJCQkJCQkJCUZMX0JBU0VfTUFTSyk7CisJCQkJZG1hY19mbHVzaF9yYW5nZShzbF90YWJsZSwgc2xfdGFibGUgKyBTWl80Syk7CisJCQl9CisJfQogI2VuZGlmCiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGN0eF9kcnZkYXRhLCAmcHJpdi0+bGlzdF9hdHRhY2hlZCwgYXR0YWNoZWRfZWxtKSB7CkBAIC02Niw2ICs3OSw4IEBACiAJCWlvbW11X2RydmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoY3R4X2RydmRhdGEtPnBkZXYtPmRldi5wYXJlbnQpOwogCQlTRVRfQ1RYX1RMQklBTEwoaW9tbXVfZHJ2ZGF0YS0+YmFzZSwgY3R4X2RydmRhdGEtPm51bSwgMCk7CiAJfQorCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgX19yZXNldF9jb250ZXh0KHZvaWQgX19pb21lbSAqYmFzZSwgaW50IGN0eCkKQEAgLTk1LDYgKzExMCw3IEBACiAKIHN0YXRpYyB2b2lkIF9fcHJvZ3JhbV9jb250ZXh0KHZvaWQgX19pb21lbSAqYmFzZSwgaW50IGN0eCwgcGh5c19hZGRyX3QgcGd0YWJsZSkKIHsKKwl1bnNpZ25lZCBpbnQgcHJyciwgbm1ycjsKIAlfX3Jlc2V0X2NvbnRleHQoYmFzZSwgY3R4KTsKIAogCS8qIFNldCB1cCBIVFcgbW9kZSAqLwpAQCAtMTI3LDExICsxNDMsMTEgQEAKIAkvKiBUdXJuIG9uIFRFWCBSZW1hcCAqLwogCVNFVF9UUkUoYmFzZSwgY3R4LCAxKTsKIAotCS8qIERvIG5vdCBjb25maWd1cmUgUFJSUiAvIE5NUlIgb24gdGhlIElPTU1VIGZvciBub3cuIFdlIHdpbGwgYXNzdW1lCi0JICogVEVYIGNsYXNzIDAgZm9yIGV2ZXJ5dGhpbmcgdW50aWwgYXR0cmlidXRlcyBhcmUgcHJvcGVybHkgd29ya2VkIG91dAotCSAqLwotCVNFVF9QUlJSKGJhc2UsIGN0eCwgMCk7Ci0JU0VUX05NUlIoYmFzZSwgY3R4LCAwKTsKKwkvKiBTZXQgVEVYIHJlbWFwIGF0dHJpYnV0ZXMgKi8KKwlSQ1AxNV9QUlJSKHBycnIpOworCVJDUDE1X05NUlIobm1ycik7CisJU0VUX1BSUlIoYmFzZSwgY3R4LCBwcnJyKTsKKwlTRVRfTk1SUihiYXNlLCBjdHgsIG5tcnIpOwogCiAJLyogVHVybiBvbiBCRkIgcHJlZmV0Y2ggKi8KIAlTRVRfQkZCREZFKGJhc2UsIGN0eCwgMSk7CkBAIC0yMzgsNiArMjU0LDExIEBACiAJCWdvdG8gZmFpbDsKIAl9CiAKKwlpZiAoIWxpc3RfZW1wdHkoJmN0eF9kcnZkYXRhLT5hdHRhY2hlZF9lbG0pKSB7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBmYWlsOworCX0KKwogCWxpc3RfZm9yX2VhY2hfZW50cnkodG1wX2RydmRhdGEsICZwcml2LT5saXN0X2F0dGFjaGVkLCBhdHRhY2hlZF9lbG0pCiAJCWlmICh0bXBfZHJ2ZGF0YSA9PSBjdHhfZHJ2ZGF0YSkgewogCQkJcmV0ID0gLUVCVVNZOwpAQCAtMjQ4LDcgKzI2OSw3IEBACiAJCQkgIF9fcGEocHJpdi0+cGd0YWJsZSkpOwogCiAJbGlzdF9hZGQoJihjdHhfZHJ2ZGF0YS0+YXR0YWNoZWRfZWxtKSwgJnByaXYtPmxpc3RfYXR0YWNoZWQpOwotCV9fZmx1c2hfaW90bGIoZG9tYWluKTsKKwlyZXQgPSBfX2ZsdXNoX2lvdGxiKGRvbWFpbik7CiAKIGZhaWw6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXNtX2lvbW11X2xvY2ssIGZsYWdzKTsKQEAgLTI2Myw2ICsyODQsNyBAQAogCXN0cnVjdCBtc21faW9tbXVfZHJ2ZGF0YSAqaW9tbXVfZHJ2ZGF0YTsKIAlzdHJ1Y3QgbXNtX2lvbW11X2N0eF9kcnZkYXRhICpjdHhfZHJ2ZGF0YTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQ7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbXNtX2lvbW11X2xvY2ssIGZsYWdzKTsKIAlwcml2ID0gZG9tYWluLT5wcml2OwpAQCAtMjc3LDcgKzI5OSwxMCBAQAogCWlmICghaW9tbXVfZHJ2ZGF0YSB8fCAhY3R4X2RydmRhdGEgfHwgIWN0eF9kZXYpCiAJCWdvdG8gZmFpbDsKIAotCV9fZmx1c2hfaW90bGIoZG9tYWluKTsKKwlyZXQgPSBfX2ZsdXNoX2lvdGxiKGRvbWFpbik7CisJaWYgKHJldCkKKwkJZ290byBmYWlsOworCiAJX19yZXNldF9jb250ZXh0KGlvbW11X2RydmRhdGEtPmJhc2UsIGN0eF9kZXYtPm51bSk7CiAJbGlzdF9kZWxfaW5pdCgmY3R4X2RydmRhdGEtPmF0dGFjaGVkX2VsbSk7CiAKQEAgLTI5NiwxMiArMzIxLDIxIEBACiAJdW5zaWduZWQgbG9uZyAqc2xfdGFibGU7CiAJdW5zaWduZWQgbG9uZyAqc2xfcHRlOwogCXVuc2lnbmVkIGxvbmcgc2xfb2Zmc2V0OworCXVuc2lnbmVkIGludCBwZ3Byb3Q7CiAJc2l6ZV90IGxlbiA9IDB4MTAwMFVMIDw8IG9yZGVyOwotCWludCByZXQgPSAwOworCWludCByZXQgPSAwLCB0ZXgsIHNoOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJm1zbV9pb21tdV9sb2NrLCBmbGFncyk7Ci0JcHJpdiA9IGRvbWFpbi0+cHJpdjsKIAorCXNoID0gKHByb3QgJiBNU01fSU9NTVVfQVRUUl9TSCkgPyAxIDogMDsKKwl0ZXggPSBtc21faW9tbXVfdGV4X2NsYXNzW3Byb3QgJiBNU01fSU9NTVVfQ1BfTUFTS107CisKKwlpZiAodGV4IDwgMCB8fCB0ZXggPiBOVU1fVEVYX0NMQVNTIC0gMSkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGZhaWw7CisJfQorCisJcHJpdiA9IGRvbWFpbi0+cHJpdjsKIAlpZiAoIXByaXYpIHsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBmYWlsOwpAQCAtMzIyLDYgKzM1NiwxOCBAQAogCQlnb3RvIGZhaWw7CiAJfQogCisJaWYgKGxlbiA9PSBTWl8xNk0gfHwgbGVuID09IFNaXzFNKSB7CisJCXBncHJvdCA9IHNoID8gRkxfU0hBUkVEIDogMDsKKwkJcGdwcm90IHw9IHRleCAmIDB4MDEgPyBGTF9CVUZGRVJBQkxFIDogMDsKKwkJcGdwcm90IHw9IHRleCAmIDB4MDIgPyBGTF9DQUNIRUFCTEUgOiAwOworCQlwZ3Byb3QgfD0gdGV4ICYgMHgwNCA/IEZMX1RFWDAgOiAwOworCX0gZWxzZQl7CisJCXBncHJvdCA9IHNoID8gU0xfU0hBUkVEIDogMDsKKwkJcGdwcm90IHw9IHRleCAmIDB4MDEgPyBTTF9CVUZGRVJBQkxFIDogMDsKKwkJcGdwcm90IHw9IHRleCAmIDB4MDIgPyBTTF9DQUNIRUFCTEUgOiAwOworCQlwZ3Byb3QgfD0gdGV4ICYgMHgwNCA/IFNMX1RFWDAgOiAwOworCX0KKwogCWZsX29mZnNldCA9IEZMX09GRlNFVCh2YSk7CS8qIFVwcGVyIDEyIGJpdHMgKi8KIAlmbF9wdGUgPSBmbF90YWJsZSArIGZsX29mZnNldDsJLyogaW50IHBvaW50ZXJzLCA0IGJ5dGVzICovCiAKQEAgLTMzMCwxNyArMzc2LDE3IEBACiAJCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQogCQkJKihmbF9wdGUraSkgPSAocGEgJiAweEZGMDAwMDAwKSB8IEZMX1NVUEVSU0VDVElPTiB8CiAJCQkJICBGTF9BUF9SRUFEIHwgRkxfQVBfV1JJVEUgfCBGTF9UWVBFX1NFQ1QgfAotCQkJCSAgRkxfU0hBUkVEOworCQkJCSAgRkxfU0hBUkVEIHwgcGdwcm90OwogCX0KIAogCWlmIChsZW4gPT0gU1pfMU0pCiAJCSpmbF9wdGUgPSAocGEgJiAweEZGRjAwMDAwKSB8IEZMX0FQX1JFQUQgfCBGTF9BUF9XUklURSB8Ci0JCQkJCQlGTF9UWVBFX1NFQ1QgfCBGTF9TSEFSRUQ7CisJCQkJCSAgICBGTF9UWVBFX1NFQ1QgfCBGTF9TSEFSRUQgfCBwZ3Byb3Q7CiAKIAkvKiBOZWVkIGEgMm5kIGxldmVsIHRhYmxlICovCiAJaWYgKChsZW4gPT0gU1pfNEsgfHwgbGVuID09IFNaXzY0SykgJiYgKCpmbF9wdGUpID09IDApIHsKIAkJdW5zaWduZWQgbG9uZyAqc2w7Ci0JCXNsID0gKHVuc2lnbmVkIGxvbmcgKikgX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMLAorCQlzbCA9ICh1bnNpZ25lZCBsb25nICopIF9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0FUT01JQywKIAkJCQkJCQlnZXRfb3JkZXIoU1pfNEspKTsKIAogCQlpZiAoIXNsKSB7CkBAIC0zNjAsMTcgKzQwNiwxNyBAQAogCiAJaWYgKGxlbiA9PSBTWl80SykKIAkJKnNsX3B0ZSA9IChwYSAmIFNMX0JBU0VfTUFTS19TTUFMTCkgfCBTTF9BUDAgfCBTTF9BUDEgfAotCQkJCQkgIFNMX1NIQVJFRCB8IFNMX1RZUEVfU01BTEw7CisJCQkJCSAgU0xfU0hBUkVEIHwgU0xfVFlQRV9TTUFMTCB8IHBncHJvdDsKIAogCWlmIChsZW4gPT0gU1pfNjRLKSB7CiAJCWludCBpOwogCiAJCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQogCQkJKihzbF9wdGUraSkgPSAocGEgJiBTTF9CQVNFX01BU0tfTEFSR0UpIHwgU0xfQVAwIHwKLQkJCQkJICAgIFNMX0FQMSB8IFNMX1NIQVJFRCB8IFNMX1RZUEVfTEFSR0U7CisJCQkJU0xfQVAxIHwgU0xfU0hBUkVEIHwgU0xfVFlQRV9MQVJHRSB8IHBncHJvdDsKIAl9CiAKLQlfX2ZsdXNoX2lvdGxiKGRvbWFpbik7CisJcmV0ID0gX19mbHVzaF9pb3RsYihkb21haW4pOwogZmFpbDoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtc21faW9tbXVfbG9jaywgZmxhZ3MpOwogCXJldHVybiByZXQ7CkBAIC00NTUsNyArNTAxLDcgQEAKIAkJfQogCX0KIAotCV9fZmx1c2hfaW90bGIoZG9tYWluKTsKKwlyZXQgPSBfX2ZsdXNoX2lvdGxiKGRvbWFpbik7CiBmYWlsOgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1zbV9pb21tdV9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIHJldDsKQEAgLTQ5MCw5ICs1MzYsNiBAQAogCVNFVF9DVFhfVExCSUFMTChiYXNlLCBjdHgsIDApOwogCVNFVF9WMlBQUl9WQShiYXNlLCBjdHgsIHZhID4+IFYyUHh4X1ZBX1NISUZUKTsKIAotCWlmIChHRVRfRkFVTFQoYmFzZSwgY3R4KSkKLQkJZ290byBmYWlsOwotCiAJcGFyID0gR0VUX1BBUihiYXNlLCBjdHgpOwogCiAJLyogV2UgYXJlIGRlYWxpbmcgd2l0aCBhIHN1cGVyc2VjdGlvbiAqLwpAQCAtNTAxLDYgKzU0NCw5IEBACiAJZWxzZQkvKiBVcHBlciAyMCBiaXRzIGZyb20gUEFSLCBsb3dlciAxMiBmcm9tIFZBICovCiAJCXJldCA9IChwYXIgJiAweEZGRkZGMDAwKSB8ICh2YSAmIDB4MDAwMDBGRkYpOwogCisJaWYgKEdFVF9GQVVMVChiYXNlLCBjdHgpKQorCQlyZXQgPSAwOworCiBmYWlsOgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1zbV9pb21tdV9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIHJldDsKQEAgLTU0Myw4ICs1ODksOCBAQAogewogCXN0cnVjdCBtc21faW9tbXVfZHJ2ZGF0YSAqZHJ2ZGF0YSA9IGRldl9pZDsKIAl2b2lkIF9faW9tZW0gKmJhc2U7Ci0JdW5zaWduZWQgaW50IGZzciA9IDA7Ci0JaW50IG5jYiA9IDAsIGkgPSAwOworCXVuc2lnbmVkIGludCBmc3I7CisJaW50IG5jYiwgaTsKIAogCXNwaW5fbG9jaygmbXNtX2lvbW11X2xvY2spOwogCkBAIC01NTUsNyArNjAxLDYgQEAKIAogCWJhc2UgPSBkcnZkYXRhLT5iYXNlOwogCi0JcHJfZXJyKCI9PT09PSBXT0FIISA9PT09PVxuIik7CiAJcHJfZXJyKCJVbmV4cGVjdGVkIElPTU1VIHBhZ2UgZmF1bHQhXG4iKTsKIAlwcl9lcnIoImJhc2UgPSAlMDh4XG4iLCAodW5zaWduZWQgaW50KSBiYXNlKTsKIApAQCAtNTg1LDggKzYzMCw0NyBAQAogCS5kb21haW5faGFzX2NhcCA9IG1zbV9pb21tdV9kb21haW5faGFzX2NhcAogfTsKIAotc3RhdGljIGludCBtc21faW9tbXVfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgZ2V0X3RleF9jbGFzcyhpbnQgaWNwLCBpbnQgb2NwLCBpbnQgbXQsIGludCBub3MpCiB7CisJaW50IGkgPSAwOworCXVuc2lnbmVkIGludCBwcnJyID0gMDsKKwl1bnNpZ25lZCBpbnQgbm1yciA9IDA7CisJaW50IGNfaWNwLCBjX29jcCwgY19tdCwgY19ub3M7CisKKwlSQ1AxNV9QUlJSKHBycnIpOworCVJDUDE1X05NUlIobm1ycik7CisKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX1RFWF9DTEFTUzsgaSsrKSB7CisJCWNfbm9zID0gUFJSUl9OT1MocHJyciwgaSk7CisJCWNfbXQgPSBQUlJSX01UKHBycnIsIGkpOworCQljX2ljcCA9IE5NUlJfSUNQKG5tcnIsIGkpOworCQljX29jcCA9IE5NUlJfT0NQKG5tcnIsIGkpOworCisJCWlmIChpY3AgPT0gY19pY3AgJiYgb2NwID09IGNfb2NwICYmIGNfbXQgPT0gbXQgJiYgY19ub3MgPT0gbm9zKQorCQkJcmV0dXJuIGk7CisJfQorCisJcmV0dXJuIC1FTk9ERVY7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9pb21tdV90ZXhfY2xhc3Nlcyh2b2lkKQoreworCW1zbV9pb21tdV90ZXhfY2xhc3NbTVNNX0lPTU1VX0FUVFJfTk9OQ0FDSEVEXSA9CisJCQlnZXRfdGV4X2NsYXNzKENQX05PTkNBQ0hFRCwgQ1BfTk9OQ0FDSEVELCBNVF9OT1JNQUwsIDEpOworCisJbXNtX2lvbW11X3RleF9jbGFzc1tNU01fSU9NTVVfQVRUUl9DQUNIRURfV0JfV0FdID0KKwkJCWdldF90ZXhfY2xhc3MoQ1BfV0JfV0EsIENQX1dCX1dBLCBNVF9OT1JNQUwsIDEpOworCisJbXNtX2lvbW11X3RleF9jbGFzc1tNU01fSU9NTVVfQVRUUl9DQUNIRURfV0JfTldBXSA9CisJCQlnZXRfdGV4X2NsYXNzKENQX1dCX05XQSwgQ1BfV0JfTldBLCBNVF9OT1JNQUwsIDEpOworCisJbXNtX2lvbW11X3RleF9jbGFzc1tNU01fSU9NTVVfQVRUUl9DQUNIRURfV1RdID0KKwkJCWdldF90ZXhfY2xhc3MoQ1BfV1QsIENQX1dULCBNVF9OT1JNQUwsIDEpOworfQorCitzdGF0aWMgaW50IF9faW5pdCBtc21faW9tbXVfaW5pdCh2b2lkKQoreworCXNldHVwX2lvbW11X3RleF9jbGFzc2VzKCk7CiAJcmVnaXN0ZXJfaW9tbXUoJm1zbV9pb21tdV9vcHMpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tc20vaW9tbXVfZGV2LmMgYi9hcmNoL2FybS9tYWNoLW1zbS9pb21tdV9kZXYuYwppbmRleCA5MDE5Y2VlLi5iODNjNzNiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW1zbS9pb21tdV9kZXYuYworKysgYi9hcmNoL2FybS9tYWNoLW1zbS9pb21tdV9kZXYuYwpAQCAtMzQ2LDcgKzM0Niw3IEBACiAJLnJlbW92ZQkJPSBtc21faW9tbXVfY3R4X3JlbW92ZSwKIH07CiAKLXN0YXRpYyBpbnQgbXNtX2lvbW11X2RyaXZlcl9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBtc21faW9tbXVfZHJpdmVyX2luaXQodm9pZCkKIHsKIAlpbnQgcmV0OwogCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbXNtX2lvbW11X2RyaXZlcik7CkBAIC0zNjUsNyArMzY1LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBtc21faW9tbXVfZHJpdmVyX2V4aXQodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBtc21faW9tbXVfZHJpdmVyX2V4aXQodm9pZCkKIHsKIAlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbXNtX2lvbW11X2N0eF9kcml2ZXIpOwogCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZtc21faW9tbXVfZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXNtL3NpcmMuYyBiL2FyY2gvYXJtL21hY2gtbXNtL3NpcmMuYwppbmRleCBiMDc5NDUyLi4xNTJlZWZkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW1zbS9zaXJjLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1tc20vc2lyYy5jCkBAIC00MCw5ICs0MCw2IEBACiAJfQogfTsKIAotc3RhdGljIHVuc2lnbmVkIGludCBzYXZlX3R5cGU7Ci1zdGF0aWMgdW5zaWduZWQgaW50IHNhdmVfcG9sYXJpdHk7Ci0KIC8qIE1hc2sgb2ZmIHRoZSBnaXZlbiBpbnRlcnJ1cHQuIEtlZXAgdGhlIGludF9lbmFibGUgbWFzayBpbiBzeW5jIHdpdGgKICAgIHRoZSBlbmFibGUgcmVnLCBzbyBpdCBjYW4gYmUgcmVzdG9yZWQgYWZ0ZXIgcG93ZXIgY29sbGFwc2UuICovCiBzdGF0aWMgdm9pZCBzaXJjX2lycV9tYXNrKHVuc2lnbmVkIGludCBpcnEpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1zbS9zbWQuYyBiL2FyY2gvYXJtL21hY2gtbXNtL3NtZC5jCmluZGV4IGYwN2RjN2MuLjY1N2JlNzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXNtL3NtZC5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXNtL3NtZC5jCkBAIC0xNCw2ICsxNCw4IEBACiAgKgogICovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CkBAIC04OSw3ICs5MSw3IEBACiAJeCA9IHNtZW1fZmluZChJRF9ESUFHX0VSUl9NU0csIFNaX0RJQUdfRVJSX01TRyk7CiAJaWYgKHggIT0gMCkgewogCQl4W1NaX0RJQUdfRVJSX01TRyAtIDFdID0gMDsKLQkJcHJfaW5mbygic21lbTogRElBRyAnJXMnXG4iLCB4KTsKKwkJcHJfZGVidWcoIkRJQUcgJyVzJ1xuIiwgeCk7CiAJfQogfQogCkBAIC0zMTIsNyArMzE0LDcgQEAKIHsKIAljaC0+bGFzdF9zdGF0ZSA9IG5leHQ7CiAKLQlwcl9pbmZvKCJTTUQ6IGNoICVkICVkIC0+ICVkXG4iLCBjaC0+biwgbGFzdCwgbmV4dCk7CisJcHJfZGVidWcoImNoICVkICVkIC0+ICVkXG4iLCBjaC0+biwgbGFzdCwgbmV4dCk7CiAKIAlzd2l0Y2ggKG5leHQpIHsKIAljYXNlIFNNRF9TU19PUEVOSU5HOgpAQCAtNjAxLDcgKzYwMyw3IEBACiAJY2gtPnBkZXYubmFtZSA9IGNoLT5uYW1lOwogCWNoLT5wZGV2LmlkID0gLTE7CiAKLQlwcl9pbmZvKCJzbWRfYWxsb2NfY2hhbm5lbCgpIGNpZD0lMDJkIHNpemU9JTA1ZCAnJXMnXG4iLAorCXByX2RlYnVnKCJzbWRfYWxsb2NfY2hhbm5lbCgpIGNpZD0lMDJkIHNpemU9JTA1ZCAnJXMnXG4iLAogCQljaC0+biwgY2gtPmZpZm9fc2l6ZSwgY2gtPm5hbWUpOwogCiAJbXV0ZXhfbG9jaygmc21kX2NyZWF0aW9uX211dGV4KTsKQEAgLTYyMSw3ICs2MjMsNyBAQAogCiAJc2hhcmVkID0gc21lbV9maW5kKElEX0NIX0FMTE9DX1RCTCwgc2l6ZW9mKCpzaGFyZWQpICogNjQpOwogCWlmICghc2hhcmVkKSB7Ci0JCXByX2Vycigic21kOiBjYW5ub3QgZmluZCBhbGxvY2F0aW9uIHRhYmxlXG4iKTsKKwkJcHJfZXJyKCJjYW5ub3QgZmluZCBhbGxvY2F0aW9uIHRhYmxlXG4iKTsKIAkJcmV0dXJuOwogCX0KIAlmb3IgKG4gPSAwOyBuIDwgNjQ7IG4rKykgewpAQCAtNzI1LDggKzcyNyw2IEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXByX2luZm8oInNtZF9jbG9zZSglcClcbiIsIGNoKTsKLQogCWlmIChjaCA9PSAwKQogCQlyZXR1cm4gLTE7CiAKQEAgLTkzOSw3ICs5MzksNiBAQAogaW50IHNtZF9jb3JlX2luaXQodm9pZCkKIHsKIAlpbnQgcjsKLQlwcl9pbmZvKCJzbWRfY29yZV9pbml0KClcbiIpOwogCiAJLyogd2FpdCBmb3IgZXNzZW50aWFsIGl0ZW1zIHRvIGJlIGluaXRpYWxpemVkICovCiAJZm9yICg7OykgewpAQCAtOTkyLDE1ICs5OTEsMTEgQEAKIAlzbXNtX2NoYW5nZV9zdGF0ZShTTVNNX1NUQVRFX0FQUFNfREVNLCB+MCwgMCk7CiAjZW5kaWYKIAotCXByX2luZm8oInNtZF9jb3JlX2luaXQoKSBkb25lXG4iKTsKLQogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBtc21fc21kX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0JcHJfaW5mbygic21kX2luaXQoKVxuIik7Ci0KIAkvKgogCSAqIElmIHdlIGhhdmVuJ3Qgd2FpdGVkIGZvciB0aGUgQVJNOSB0byBib290IHVwIHRpbGwgbm93LAogCSAqIHRoZW4gd2UgbmVlZCB0byB3YWl0IGhlcmUuIE90aGVyd2lzZSB0aGlzIHNob3VsZCBqdXN0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1zbS9zbWRfZGVidWcuYyBiL2FyY2gvYXJtL21hY2gtbXNtL3NtZF9kZWJ1Zy5jCmluZGV4IGY5MWMzYjcuLjg3MzZhZmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXNtL3NtZF9kZWJ1Zy5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXNtL3NtZF9kZWJ1Zy5jCkBAIC0yNzAsOCArMjcwLDEwIEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1aW50MzJfdCAqcHRyOworI2lmbmRlZiBDT05GSUdfQVJDSF9NU01fU0NPUlBJT04KIAlzdHJ1Y3QgdHJhbXBfZ3Bpb19zbWVtICpncGlvOwogCXN0cnVjdCBzbXNtX2ludGVycnVwdF9pbmZvICppbnRfaW5mbzsKKyNlbmRpZgogCiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc21lbV9sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1zbS90aW1lci5jIGIvYXJjaC9hcm0vbWFjaC1tc20vdGltZXIuYwppbmRleCA5NTAxMDBmLi41OTViZTdmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW1zbS90aW1lci5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXNtL3RpbWVyLmMKQEAgLTEzNyw3ICsxMzcsNiBAQAogCQkJLnJhdGluZyAgICAgICAgID0gMjAwLAogCQkJLnJlYWQgICAgICAgICAgID0gbXNtX2dwdF9yZWFkLAogCQkJLm1hc2sgICAgICAgICAgID0gQ0xPQ0tTT1VSQ0VfTUFTSygzMiksCi0JCQkuc2hpZnQgICAgICAgICAgPSAxNywKIAkJCS5mbGFncyAgICAgICAgICA9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTLAogCQl9LAogCQkuaXJxID0gewpAQCAtMTY0LDcgKzE2Myw2IEBACiAJCQkucmF0aW5nICAgICAgICAgPSAzMDAsCiAJCQkucmVhZCAgICAgICAgICAgPSBtc21fZGd0X3JlYWQsCiAJCQkubWFzayAgICAgICAgICAgPSBDTE9DS1NPVVJDRV9NQVNLKCgzMiAtIE1TTV9ER1RfU0hJRlQpKSwKLQkJCS5zaGlmdCAgICAgICAgICA9IDI0IC0gTVNNX0RHVF9TSElGVCwKIAkJCS5mbGFncyAgICAgICAgICA9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTLAogCQl9LAogCQkuaXJxID0gewpAQCAtMjA1LDggKzIwMyw3IEBACiAJCWNlLT5taW5fZGVsdGFfbnMgPSBjbG9ja2V2ZW50X2RlbHRhMm5zKDQsIGNlKTsKIAkJY2UtPmNwdW1hc2sgPSBjcHVtYXNrX29mKDApOwogCi0JCWNzLT5tdWx0ID0gY2xvY2tzb3VyY2VfaHoybXVsdChjbG9jay0+ZnJlcSwgY3MtPnNoaWZ0KTsKLQkJcmVzID0gY2xvY2tzb3VyY2VfcmVnaXN0ZXIoY3MpOworCQlyZXMgPSBjbG9ja3NvdXJjZV9yZWdpc3Rlcl9oeihjcywgY2xvY2stPmZyZXEpOwogCQlpZiAocmVzKQogCQkJcHJpbnRrKEtFUk5fRVJSICJtc21fdGltZXJfaW5pdDogY2xvY2tzb3VyY2VfcmVnaXN0ZXIgIgogCQkJICAgICAgICJmYWlsZWQgZm9yICVzXG4iLCBjcy0+bmFtZSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW12Nzh4eDAvaW5jbHVkZS9tYWNoL212Nzh4eDAuaCBiL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9pbmNsdWRlL21hY2gvbXY3OHh4MC5oCmluZGV4IDc4OGJkYWMuLjNlZmYzOTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9pbmNsdWRlL21hY2gvbXY3OHh4MC5oCisrKyBiL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9pbmNsdWRlL21hY2gvbXY3OHh4MC5oCkBAIC02NSw3ICs2NSw3IEBACiAgKi8KICNkZWZpbmUgRERSX1ZJUlRfQkFTRQkJKE1WNzhYWDBfUkVHU19WSVJUX0JBU0UgfCAweDAwMDAwKQogI2RlZmluZSAgRERSX1dJTkRPV19DUFUwX0JBU0UJKEREUl9WSVJUX0JBU0UgfCAweDE1MDApCi0jZGVmaW5lICBERFJfV0lORE9XX0NQVTFfQkFTRQkoRERSX1ZJUlRfQkFTRSB8IDB4MTcwMCkKKyNkZWZpbmUgIEREUl9XSU5ET1dfQ1BVMV9CQVNFCShERFJfVklSVF9CQVNFIHwgMHgxNTcwKQogCiAjZGVmaW5lIERFVl9CVVNfUEhZU19CQVNFCShNVjc4WFgwX1JFR1NfUEhZU19CQVNFIHwgMHgxMDAwMCkKICNkZWZpbmUgREVWX0JVU19WSVJUX0JBU0UJKE1WNzhYWDBfUkVHU19WSVJUX0JBU0UgfCAweDEwMDAwKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDI1L0tjb25maWcgYi9hcmNoL2FybS9tYWNoLW14MjUvS2NvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzhjYTA5YS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLW14MjUvS2NvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLWlmIEFSQ0hfTVgyNQotCi1jb21tZW50ICJNWDI1IHBsYXRmb3JtczoiCi0KLWNvbmZpZyBNQUNIX01YMjVfM0RTCi0JYm9vbCAiU3VwcG9ydCBNWDI1UERLICgzRFMpIFBsYXRmb3JtIgotCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9JTVhfVUFSVAotCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9NWENfTkFORAotCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9FU0RIQwotCi1jb25maWcgTUFDSF9FVUtSRUFfQ1BVSU1YMjUKLQlib29sICJTdXBwb3J0IEV1a3JlYSBDUFVJTVgyNSBQbGF0Zm9ybSIKLQlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fSU1YX0kyQwotCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9JTVhfVUFSVAotCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9NWENfTkFORAotCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9GTEVYQ0FOCi0Jc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0VTREhDCi0Jc2VsZWN0IE1YQ19VTFBJIGlmIFVTQl9VTFBJCi0KLWNob2ljZQotCXByb21wdCAiQmFzZWJvYXJkIgotCWRlcGVuZHMgb24gTUFDSF9FVUtSRUFfQ1BVSU1YMjUKLQlkZWZhdWx0IE1BQ0hfRVVLUkVBX01CSU1YU0QyNV9CQVNFQk9BUkQKLQotY29uZmlnIE1BQ0hfRVVLUkVBX01CSU1YU0QyNV9CQVNFQk9BUkQKLQlib29sICJFdWtyZWEgTUJJTVhTRCBkZXZlbG9wbWVudCBib2FyZCIKLQlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fSU1YX1NTSQotCWhlbHAKLQkgIFRoaXMgYWRkcyBib2FyZCBzcGVjaWZpYyBkZXZpY2VzIHRoYXQgY2FuIGJlIGZvdW5kIG9uIEV1a3JlYSdzCi0JICBNQklNWFNEIGV2YWx1YXRpb24gYm9hcmQuCi0KLWVuZGNob2ljZQotCi1lbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDI1L01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1teDI1L01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOWU0NmNlLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtbXgyNS9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotb2JqLXkJCQkJOj0gbW0ubyBkZXZpY2VzLm8KLW9iai0kKENPTkZJR19BUkNIX01YMjUpCQkrPSBjbG9jay5vCi1vYmotJChDT05GSUdfTUFDSF9NWDI1XzNEUykJKz0gbWFjaC1teDI1XzNkcy5vCi1vYmotJChDT05GSUdfTUFDSF9FVUtSRUFfQ1BVSU1YMjUpCQkrPSBtYWNoLWNwdWlteDI1Lm8KLW9iai0kKENPTkZJR19NQUNIX0VVS1JFQV9NQklNWFNEMjVfQkFTRUJPQVJEKQkrPSBldWtyZWFfbWJpbXhzZC1iYXNlYm9hcmQubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDI1L01ha2VmaWxlLmJvb3QgYi9hcmNoL2FybS9tYWNoLW14MjUvTWFrZWZpbGUuYm9vdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTFkZDM2Ni4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLW14MjUvTWFrZWZpbGUuYm9vdAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotICAgenJlbGFkZHIteQk6PSAweDgwMDA4MDAwCi1wYXJhbXNfcGh5cy15CTo9IDB4ODAwMDAxMDAKLWluaXRyZF9waHlzLXkJOj0gMHg4MDgwMDAwMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDI1L2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLW14MjUvY2xvY2suYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWU0YTU1Ny4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLW14MjUvY2xvY2suYworKysgL2Rldi9udWxsCkBAIC0xLDMzMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IGJ5IFNhc2NoYSBIYXVlciwgUGVuZ3V0cm9uaXgKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKLSAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKLSAqIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotCi0jaW5jbHVkZSA8YXNtL2Nsa2Rldi5oPgotCi0jaW5jbHVkZSA8bWFjaC9jbG9jay5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgotI2luY2x1ZGUgPG1hY2gvbXgyNS5oPgotCi0jZGVmaW5lIENSTV9CQVNFCU1YMjVfSU9fQUREUkVTUyhNWDI1X0NSTV9CQVNFX0FERFIpCi0KLSNkZWZpbmUgQ0NNX01QQ1RMCTB4MDAKLSNkZWZpbmUgQ0NNX1VQQ1RMCTB4MDQKLSNkZWZpbmUgQ0NNX0NDVEwJMHgwOAotI2RlZmluZSBDQ01fQ0dDUjAJMHgwQwotI2RlZmluZSBDQ01fQ0dDUjEJMHgxMAotI2RlZmluZSBDQ01fQ0dDUjIJMHgxNAotI2RlZmluZSBDQ01fUENEUjAJMHgxOAotI2RlZmluZSBDQ01fUENEUjEJMHgxQwotI2RlZmluZSBDQ01fUENEUjIJMHgyMAotI2RlZmluZSBDQ01fUENEUjMJMHgyNAotI2RlZmluZSBDQ01fUkNTUgkweDI4Ci0jZGVmaW5lIENDTV9DUkRSCTB4MkMKLSNkZWZpbmUgQ0NNX0RDVlIwCTB4MzAKLSNkZWZpbmUgQ0NNX0RDVlIxCTB4MzQKLSNkZWZpbmUgQ0NNX0RDVlIyCTB4MzgKLSNkZWZpbmUgQ0NNX0RDVlIzCTB4M2MKLSNkZWZpbmUgQ0NNX0xUUjAJMHg0MAotI2RlZmluZSBDQ01fTFRSMQkweDQ0Ci0jZGVmaW5lIENDTV9MVFIyCTB4NDgKLSNkZWZpbmUgQ0NNX0xUUjMJMHg0YwotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcmF0ZV9tcGxsKHZvaWQpCi17Ci0JdWxvbmcgbXBjdGwgPSBfX3Jhd19yZWFkbChDUk1fQkFTRSArIENDTV9NUENUTCk7Ci0KLQlyZXR1cm4gbXhjX2RlY29kZV9wbGwobXBjdGwsIDI0MDAwMDAwKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3JhdGVfdXBsbCh2b2lkKQotewotCXVsb25nIG1wY3RsID0gX19yYXdfcmVhZGwoQ1JNX0JBU0UgKyBDQ01fVVBDVEwpOwotCi0JcmV0dXJuIG14Y19kZWNvZGVfcGxsKG1wY3RsLCAyNDAwMDAwMCk7Ci19Ci0KLXVuc2lnbmVkIGxvbmcgZ2V0X3JhdGVfYXJtKHN0cnVjdCBjbGsgKmNsaykKLXsKLQl1bnNpZ25lZCBsb25nIGNjdGwgPSByZWFkbChDUk1fQkFTRSArIENDTV9DQ1RMKTsKLQl1bnNpZ25lZCBsb25nIHJhdGUgPSBnZXRfcmF0ZV9tcGxsKCk7Ci0KLQlpZiAoY2N0bCAmICgxIDw8IDE0KSkKLQkJcmF0ZSA9IChyYXRlICogMykgPj4gMjsKLQotCXJldHVybiByYXRlIC8gKChjY3RsID4+IDMwKSArIDEpOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcmF0ZV9haGIoc3RydWN0IGNsayAqY2xrKQotewotCXVuc2lnbmVkIGxvbmcgY2N0bCA9IHJlYWRsKENSTV9CQVNFICsgQ0NNX0NDVEwpOwotCi0JcmV0dXJuIGdldF9yYXRlX2FybShOVUxMKSAvICgoKGNjdGwgPj4gMjgpICYgMHgzKSArIDEpOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcmF0ZV9pcGcoc3RydWN0IGNsayAqY2xrKQotewotCXJldHVybiBnZXRfcmF0ZV9haGIoTlVMTCkgPj4gMTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3JhdGVfcGVyKGludCBwZXIpCi17Ci0JdW5zaWduZWQgbG9uZyBvZnMgPSAocGVyICYgMHgzKSAqIDg7Ci0JdW5zaWduZWQgbG9uZyByZWcgPSBwZXIgJiB+MHgzOwotCXVuc2lnbmVkIGxvbmcgdmFsID0gKHJlYWRsKENSTV9CQVNFICsgQ0NNX1BDRFIwICsgcmVnKSA+PiBvZnMpICYgMHgzZjsKLQl1bnNpZ25lZCBsb25nIGZyZWY7Ci0KLQlpZiAocmVhZGwoQ1JNX0JBU0UgKyAweDY0KSAmICgxIDw8IHBlcikpCi0JCWZyZWYgPSBnZXRfcmF0ZV91cGxsKCk7Ci0JZWxzZQotCQlmcmVmID0gZ2V0X3JhdGVfYWhiKE5VTEwpOwotCi0JcmV0dXJuIGZyZWYgLyAodmFsICsgMSk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9yYXRlX3VhcnQoc3RydWN0IGNsayAqY2xrKQotewotCXJldHVybiBnZXRfcmF0ZV9wZXIoMTUpOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcmF0ZV9zc2kyKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlyZXR1cm4gZ2V0X3JhdGVfcGVyKDE0KTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3JhdGVfc3NpMShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JcmV0dXJuIGdldF9yYXRlX3BlcigxMyk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9yYXRlX2kyYyhzdHJ1Y3QgY2xrICpjbGspCi17Ci0JcmV0dXJuIGdldF9yYXRlX3Blcig2KTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3JhdGVfbmZjKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlyZXR1cm4gZ2V0X3JhdGVfcGVyKDgpOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcmF0ZV9ncHQoc3RydWN0IGNsayAqY2xrKQotewotCXJldHVybiBnZXRfcmF0ZV9wZXIoNSk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9yYXRlX2xjZGMoc3RydWN0IGNsayAqY2xrKQotewotCXJldHVybiBnZXRfcmF0ZV9wZXIoNyk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9yYXRlX2VzZGhjMShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JcmV0dXJuIGdldF9yYXRlX3BlcigzKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3JhdGVfZXNkaGMyKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlyZXR1cm4gZ2V0X3JhdGVfcGVyKDQpOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcmF0ZV9jc2koc3RydWN0IGNsayAqY2xrKQotewotCXJldHVybiBnZXRfcmF0ZV9wZXIoMCk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9yYXRlX290ZyhzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdW5zaWduZWQgbG9uZyBjY3RsID0gcmVhZGwoQ1JNX0JBU0UgKyBDQ01fQ0NUTCk7Ci0JdW5zaWduZWQgbG9uZyByYXRlID0gZ2V0X3JhdGVfdXBsbCgpOwotCi0JcmV0dXJuIChjY3RsICYgKDEgPDwgMjMpKSA/IDAgOiByYXRlIC8gKCgweDNGICYgKGNjdGwgPj4gMTYpKSArIDEpOwotfQotCi1zdGF0aWMgaW50IGNsa19jZ2NyX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdTMyIHJlZzsKLQotCXJlZyA9IF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7Ci0JcmVnIHw9IDEgPDwgY2xrLT5lbmFibGVfc2hpZnQ7Ci0JX19yYXdfd3JpdGVsKHJlZywgY2xrLT5lbmFibGVfcmVnKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBjbGtfY2djcl9kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQl1MzIgcmVnOwotCi0JcmVnID0gX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKLQlyZWcgJj0gfigxIDw8IGNsay0+ZW5hYmxlX3NoaWZ0KTsKLQlfX3Jhd193cml0ZWwocmVnLCBjbGstPmVuYWJsZV9yZWcpOwotfQotCi0jZGVmaW5lIERFRklORV9DTE9DSyhuYW1lLCBpLCBlciwgZXMsIGdyLCBzciwgcykJXAotCXN0YXRpYyBzdHJ1Y3QgY2xrIG5hbWUgPSB7CQkJXAotCQkuaWQJCT0gaSwJCQlcCi0JCS5lbmFibGVfcmVnCT0gQ1JNX0JBU0UgKyBlciwJXAotCQkuZW5hYmxlX3NoaWZ0CT0gZXMsCQkJXAotCQkuZ2V0X3JhdGUJPSBnciwJCQlcCi0JCS5zZXRfcmF0ZQk9IHNyLAkJCVwKLQkJLmVuYWJsZQkJPSBjbGtfY2djcl9lbmFibGUsCVwKLQkJLmRpc2FibGUJPSBjbGtfY2djcl9kaXNhYmxlLAlcCi0JCS5zZWNvbmRhcnkJPSBzLAkJCVwKLQl9Ci0KLS8qCi0gKiBOb3RlOiB0aGUgZm9sbG93aW5nIElQRyBjbG9jayBnYXRpbmcgYml0cyBhcmUgd3JvbmdseSBtYXJrZWQgIlJlc2VydmVkIiBpbgotICogdGhlIGkuTVgyNSBSZWZlcmVuY2UgTWFudWFsIFJldiAxLCB0YWJsZSAxNS0xMy4gVGhlIGluZm9ybWF0aW9uIGJlbG93IGlzCi0gKiB0YWtlbiBmcm9tIHRoZSBGcmVlc2NhbGUgcmVsZWFzZWQgQlNQLgotICoKLSAqIGJpdAlyZWcJb2Zmc2V0CWNsb2NrCi0gKgotICogMAlDR0NSMQkwCUFVRE1VWAotICogMTIJQ0dDUjEJMTIJRVNBSQotICogMTYJQ0dDUjEJMTYJR1BJTzEKLSAqIDE3CUNHQ1IxCTE3CUdQSU8yCi0gKiAxOAlDR0NSMQkxOAlHUElPMwotICogMjMJQ0dDUjEJMjMJSTJDMQotICogMjQJQ0dDUjEJMjQJSTJDMgotICogMjUJQ0dDUjEJMjUJSTJDMwotICogMjcJQ0dDUjEJMjcJSU9NVVhDCi0gKiAyOAlDR0NSMQkyOAlLUFAKLSAqIDMwCUNHQ1IxCTMwCU9XSVJFCi0gKiAzNglDR0NSMgk0CVJUSUMKLSAqIDUxCUNHQ1IyCTE5CVdET0cKLSAqLwotCi1ERUZJTkVfQ0xPQ0soZ3B0X2NsaywgICAgMCwgQ0NNX0NHQ1IwLCAgNSwgZ2V0X3JhdGVfZ3B0LCBOVUxMLCBOVUxMKTsKLURFRklORV9DTE9DSyh1YXJ0X3Blcl9jbGssIDAsIENDTV9DR0NSMCwgMTUsIGdldF9yYXRlX3VhcnQsIE5VTEwsIE5VTEwpOwotREVGSU5FX0NMT0NLKHNzaTFfcGVyX2NsaywgMCwgQ0NNX0NHQ1IwLCAxMywgZ2V0X3JhdGVfaXBnLCBOVUxMLCBOVUxMKTsKLURFRklORV9DTE9DSyhzc2kyX3Blcl9jbGssIDAsIENDTV9DR0NSMCwgMTQsIGdldF9yYXRlX2lwZywgTlVMTCwgTlVMTCk7Ci1ERUZJTkVfQ0xPQ0soY3NwaTFfY2xrLCAgMCwgQ0NNX0NHQ1IxLCAgNSwgZ2V0X3JhdGVfaXBnLCBOVUxMLCBOVUxMKTsKLURFRklORV9DTE9DSyhjc3BpMl9jbGssICAwLCBDQ01fQ0dDUjEsICA2LCBnZXRfcmF0ZV9pcGcsIE5VTEwsIE5VTEwpOwotREVGSU5FX0NMT0NLKGNzcGkzX2NsaywgIDAsIENDTV9DR0NSMSwgIDcsIGdldF9yYXRlX2lwZywgTlVMTCwgTlVMTCk7Ci1ERUZJTkVfQ0xPQ0soZXNkaGMxX2FoYl9jbGssIDAsIENDTV9DR0NSMCwgMjEsIGdldF9yYXRlX2VzZGhjMSwJIE5VTEwsIE5VTEwpOwotREVGSU5FX0NMT0NLKGVzZGhjMV9wZXJfY2xrLCAwLCBDQ01fQ0dDUjAsICAzLCBnZXRfcmF0ZV9lc2RoYzEsCSBOVUxMLAotCQkmZXNkaGMxX2FoYl9jbGspOwotREVGSU5FX0NMT0NLKGVzZGhjMl9haGJfY2xrLCAwLCBDQ01fQ0dDUjAsIDIyLCBnZXRfcmF0ZV9lc2RoYzIsCSBOVUxMLCBOVUxMKTsKLURFRklORV9DTE9DSyhlc2RoYzJfcGVyX2NsaywgMCwgQ0NNX0NHQ1IwLCAgNCwgZ2V0X3JhdGVfZXNkaGMyLAkgTlVMTCwKLQkJJmVzZGhjMl9haGJfY2xrKTsKLURFRklORV9DTE9DSyhmZWNfYWhiX2NsaywgMCwgQ0NNX0NHQ1IwLCAyMywgTlVMTCwJIE5VTEwsIE5VTEwpOwotREVGSU5FX0NMT0NLKGxjZGNfYWhiX2NsaywgMCwgQ0NNX0NHQ1IwLCAyNCwgTlVMTCwJIE5VTEwsIE5VTEwpOwotREVGSU5FX0NMT0NLKGxjZGNfcGVyX2NsaywgMCwgQ0NNX0NHQ1IwLCAgNywgTlVMTCwJIE5VTEwsICZsY2RjX2FoYl9jbGspOwotREVGSU5FX0NMT0NLKGNzaV9haGJfY2xrLCAwLCBDQ01fQ0dDUjAsIDE4LCBnZXRfcmF0ZV9jc2ksIE5VTEwsIE5VTEwpOwotREVGSU5FX0NMT0NLKGNzaV9wZXJfY2xrLCAwLCBDQ01fQ0dDUjAsIDAsIGdldF9yYXRlX2NzaSwgTlVMTCwgJmNzaV9haGJfY2xrKTsKLURFRklORV9DTE9DSyh1YXJ0MV9jbGssICAwLCBDQ01fQ0dDUjIsIDE0LCBnZXRfcmF0ZV91YXJ0LCBOVUxMLCAmdWFydF9wZXJfY2xrKTsKLURFRklORV9DTE9DSyh1YXJ0Ml9jbGssICAwLCBDQ01fQ0dDUjIsIDE1LCBnZXRfcmF0ZV91YXJ0LCBOVUxMLCAmdWFydF9wZXJfY2xrKTsKLURFRklORV9DTE9DSyh1YXJ0M19jbGssICAwLCBDQ01fQ0dDUjIsIDE2LCBnZXRfcmF0ZV91YXJ0LCBOVUxMLCAmdWFydF9wZXJfY2xrKTsKLURFRklORV9DTE9DSyh1YXJ0NF9jbGssICAwLCBDQ01fQ0dDUjIsIDE3LCBnZXRfcmF0ZV91YXJ0LCBOVUxMLCAmdWFydF9wZXJfY2xrKTsKLURFRklORV9DTE9DSyh1YXJ0NV9jbGssICAwLCBDQ01fQ0dDUjIsIDE4LCBnZXRfcmF0ZV91YXJ0LCBOVUxMLCAmdWFydF9wZXJfY2xrKTsKLURFRklORV9DTE9DSyhuZmNfY2xrLCAgICAwLCBDQ01fQ0dDUjAsICA4LCBnZXRfcmF0ZV9uZmMsIE5VTEwsIE5VTEwpOwotREVGSU5FX0NMT0NLKHVzYm90Z19jbGssIDAsIENDTV9DR0NSMCwgMjgsIGdldF9yYXRlX290ZywgTlVMTCwgTlVMTCk7Ci1ERUZJTkVfQ0xPQ0socHdtMV9jbGssCSAwLCBDQ01fQ0dDUjEsIDMxLCBnZXRfcmF0ZV9pcGcsIE5VTEwsIE5VTEwpOwotREVGSU5FX0NMT0NLKHB3bTJfY2xrLAkgMCwgQ0NNX0NHQ1IyLCAgMCwgZ2V0X3JhdGVfaXBnLCBOVUxMLCBOVUxMKTsKLURFRklORV9DTE9DSyhwd20zX2NsaywJIDAsIENDTV9DR0NSMiwgIDEsIGdldF9yYXRlX2lwZywgTlVMTCwgTlVMTCk7Ci1ERUZJTkVfQ0xPQ0socHdtNF9jbGssCSAwLCBDQ01fQ0dDUjIsICAyLCBnZXRfcmF0ZV9pcGcsIE5VTEwsIE5VTEwpOwotREVGSU5FX0NMT0NLKGtwcF9jbGssCSAwLCBDQ01fQ0dDUjEsIDI4LCBnZXRfcmF0ZV9pcGcsIE5VTEwsIE5VTEwpOwotREVGSU5FX0NMT0NLKHRzY19jbGssCSAwLCBDQ01fQ0dDUjIsIDEzLCBnZXRfcmF0ZV9pcGcsIE5VTEwsIE5VTEwpOwotREVGSU5FX0NMT0NLKGkyY19jbGssCSAwLCBDQ01fQ0dDUjAsICA2LCBnZXRfcmF0ZV9pMmMsIE5VTEwsIE5VTEwpOwotREVGSU5FX0NMT0NLKGZlY19jbGssCSAwLCBDQ01fQ0dDUjEsIDE1LCBnZXRfcmF0ZV9pcGcsIE5VTEwsICZmZWNfYWhiX2Nsayk7Ci1ERUZJTkVfQ0xPQ0soZHJ5aWNlX2NsaywgMCwgQ0NNX0NHQ1IxLCAgOCwgZ2V0X3JhdGVfaXBnLCBOVUxMLCBOVUxMKTsKLURFRklORV9DTE9DSyhsY2RjX2NsaywJIDAsIENDTV9DR0NSMSwgMjksIGdldF9yYXRlX2xjZGMsIE5VTEwsICZsY2RjX3Blcl9jbGspOwotREVGSU5FX0NMT0NLKHdkdF9jbGssICAgIDAsIENDTV9DR0NSMiwgMTksIGdldF9yYXRlX2lwZywgTlVMTCwgIE5VTEwpOwotREVGSU5FX0NMT0NLKHNzaTFfY2xrLCAgMCwgQ0NNX0NHQ1IyLCAxMSwgZ2V0X3JhdGVfc3NpMSwgTlVMTCwgJnNzaTFfcGVyX2Nsayk7Ci1ERUZJTkVfQ0xPQ0soc3NpMl9jbGssICAxLCBDQ01fQ0dDUjIsIDEyLCBnZXRfcmF0ZV9zc2kyLCBOVUxMLCAmc3NpMl9wZXJfY2xrKTsKLURFRklORV9DTE9DSyhlc2RoYzFfY2xrLCAgMCwgQ0NNX0NHQ1IxLCAxMywgZ2V0X3JhdGVfZXNkaGMxLCBOVUxMLAotCQkmZXNkaGMxX3Blcl9jbGspOwotREVGSU5FX0NMT0NLKGVzZGhjMl9jbGssICAxLCBDQ01fQ0dDUjEsIDE0LCBnZXRfcmF0ZV9lc2RoYzIsIE5VTEwsCi0JCSZlc2RoYzJfcGVyX2Nsayk7Ci1ERUZJTkVfQ0xPQ0soYXVkbXV4X2NsaywgMCwgQ0NNX0NHQ1IxLCAwLCBOVUxMLCBOVUxMLCBOVUxMKTsKLURFRklORV9DTE9DSyhjc2lfY2xrLCAgICAwLCBDQ01fQ0dDUjEsICA0LCBnZXRfcmF0ZV9jc2ksIE5VTEwsICAmY3NpX3Blcl9jbGspOwotREVGSU5FX0NMT0NLKGNhbjFfY2xrLAkgMCwgQ0NNX0NHQ1IxLCAgMiwgZ2V0X3JhdGVfaXBnLCBOVUxMLCBOVUxMKTsKLURFRklORV9DTE9DSyhjYW4yX2NsaywJIDEsIENDTV9DR0NSMSwgIDMsIGdldF9yYXRlX2lwZywgTlVMTCwgTlVMTCk7Ci0KLSNkZWZpbmUgX1JFR0lTVEVSX0NMT0NLKGQsIG4sIGMpCVwKLQl7CQkJCVwKLQkJLmRldl9pZCA9IGQsCQlcCi0JCS5jb25faWQgPSBuLAkJXAotCQkuY2xrID0gJmMsCQlcCi0JfSwKLQotc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIGxvb2t1cHNbXSA9IHsKLQlfUkVHSVNURVJfQ0xPQ0soImlteC11YXJ0LjAiLCBOVUxMLCB1YXJ0MV9jbGspCi0JX1JFR0lTVEVSX0NMT0NLKCJpbXgtdWFydC4xIiwgTlVMTCwgdWFydDJfY2xrKQotCV9SRUdJU1RFUl9DTE9DSygiaW14LXVhcnQuMiIsIE5VTEwsIHVhcnQzX2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soImlteC11YXJ0LjMiLCBOVUxMLCB1YXJ0NF9jbGspCi0JX1JFR0lTVEVSX0NMT0NLKCJpbXgtdWFydC40IiwgTlVMTCwgdWFydDVfY2xrKQotCV9SRUdJU1RFUl9DTE9DSygibXhjLWVoY2kuMCIsICJ1c2IiLCB1c2JvdGdfY2xrKQotCV9SRUdJU1RFUl9DTE9DSygibXhjLWVoY2kuMSIsICJ1c2IiLCB1c2JvdGdfY2xrKQotCV9SRUdJU1RFUl9DTE9DSygibXhjLWVoY2kuMiIsICJ1c2IiLCB1c2JvdGdfY2xrKQotCV9SRUdJU1RFUl9DTE9DSygiZnNsLXVzYjItdWRjIiwgInVzYiIsIHVzYm90Z19jbGspCi0JX1JFR0lTVEVSX0NMT0NLKCJteGNfbmFuZC4wIiwgTlVMTCwgbmZjX2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soImlteDI1LWNzcGkuMCIsIE5VTEwsIGNzcGkxX2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soImlteDI1LWNzcGkuMSIsIE5VTEwsIGNzcGkyX2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soImlteDI1LWNzcGkuMiIsIE5VTEwsIGNzcGkzX2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soIm14Y19wd20uMCIsIE5VTEwsIHB3bTFfY2xrKQotCV9SRUdJU1RFUl9DTE9DSygibXhjX3B3bS4xIiwgTlVMTCwgcHdtMl9jbGspCi0JX1JFR0lTVEVSX0NMT0NLKCJteGNfcHdtLjIiLCBOVUxMLCBwd20zX2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soIm14Y19wd20uMyIsIE5VTEwsIHB3bTRfY2xrKQotCV9SRUdJU1RFUl9DTE9DSygiaW14LWtleXBhZCIsIE5VTEwsIGtwcF9jbGspCi0JX1JFR0lTVEVSX0NMT0NLKCJteDI1LWFkYyIsIE5VTEwsIHRzY19jbGspCi0JX1JFR0lTVEVSX0NMT0NLKCJpbXgtaTJjLjAiLCBOVUxMLCBpMmNfY2xrKQotCV9SRUdJU1RFUl9DTE9DSygiaW14LWkyYy4xIiwgTlVMTCwgaTJjX2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soImlteC1pMmMuMiIsIE5VTEwsIGkyY19jbGspCi0JX1JFR0lTVEVSX0NMT0NLKCJmZWMuMCIsIE5VTEwsIGZlY19jbGspCi0JX1JFR0lTVEVSX0NMT0NLKCJpbXhkaV9ydGMuMCIsIE5VTEwsIGRyeWljZV9jbGspCi0JX1JFR0lTVEVSX0NMT0NLKCJpbXgtZmIuMCIsIE5VTEwsIGxjZGNfY2xrKQotCV9SRUdJU1RFUl9DTE9DSygiaW14LXdkdC4wIiwgTlVMTCwgd2R0X2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soImlteC1zc2kuMCIsIE5VTEwsIHNzaTFfY2xrKQotCV9SRUdJU1RFUl9DTE9DSygiaW14LXNzaS4xIiwgTlVMTCwgc3NpMl9jbGspCi0JX1JFR0lTVEVSX0NMT0NLKCJzZGhjaS1lc2RoYy1pbXguMCIsIE5VTEwsIGVzZGhjMV9jbGspCi0JX1JFR0lTVEVSX0NMT0NLKCJzZGhjaS1lc2RoYy1pbXguMSIsIE5VTEwsIGVzZGhjMl9jbGspCi0JX1JFR0lTVEVSX0NMT0NLKCJteDItY2FtZXJhLjAiLCBOVUxMLCBjc2lfY2xrKQotCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiYXVkbXV4IiwgYXVkbXV4X2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soImZsZXhjYW4uMCIsIE5VTEwsIGNhbjFfY2xrKQotCV9SRUdJU1RFUl9DTE9DSygiZmxleGNhbi4xIiwgTlVMTCwgY2FuMl9jbGspCi19OwotCi1pbnQgX19pbml0IG14MjVfY2xvY2tzX2luaXQodm9pZCkKLXsKLQljbGtkZXZfYWRkX3RhYmxlKGxvb2t1cHMsIEFSUkFZX1NJWkUobG9va3VwcykpOwotCi0JLyogVHVybiBvZmYgYWxsIGNsb2NrcyBleGNlcHQgdGhlIG9uZXMgd2UgbmVlZCB0byBzdXJ2aXZlLCBuYW1lbHk6Ci0JICogRU1JLCBHUElPMS0zIChDQ01fQ0dDUjFbMTg6MTZdKSwgR1BUMSwgSU9NVVhDIChDQ01fQ0dDUjFbMjddKSwgSUlNLAotCSAqIFNDQwotCSAqLwotCV9fcmF3X3dyaXRlbCgoMSA8PCAxOSksIENSTV9CQVNFICsgQ0NNX0NHQ1IwKTsKLQlfX3Jhd193cml0ZWwoKDB4ZiA8PCAxNikgfCAoMyA8PCAyNiksIENSTV9CQVNFICsgQ0NNX0NHQ1IxKTsKLQlfX3Jhd193cml0ZWwoKDEgPDwgNSksIENSTV9CQVNFICsgQ0NNX0NHQ1IyKTsKLSNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19MTCkgJiYgIWRlZmluZWQoQ09ORklHX0RFQlVHX0lDRURDQykKLQljbGtfZW5hYmxlKCZ1YXJ0MV9jbGspOwotI2VuZGlmCi0KLQkvKiBDbG9jayBzb3VyY2UgZm9yIGxjZGMgYW5kIGNzaSBpcyB1cGxsICovCi0JX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKENSTV9CQVNFKzB4NjQpIHwgKDEgPDwgNykgfCAoMSA8PCAwKSwKLQkJCUNSTV9CQVNFICsgMHg2NCk7Ci0KLQlteGNfdGltZXJfaW5pdCgmZ3B0X2NsaywgTVgyNV9JT19BRERSRVNTKE1YMjVfR1BUMV9CQVNFX0FERFIpLCA1NCk7Ci0KLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyNS9kZXZpY2VzLWlteDI1LmggYi9hcmNoL2FybS9tYWNoLW14MjUvZGV2aWNlcy1pbXgyNS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOTRkMjgyLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtbXgyNS9kZXZpY2VzLWlteDI1LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFBlbmd1dHJvbml4Ci0gKiBVd2UgS2xlaW5lLUtvZW5pZyA8dS5rbGVpbmUta29lbmlnQHBlbmd1dHJvbml4LmRlPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCi0gKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLSNpbmNsdWRlIDxtYWNoL214MjUuaD4KLSNpbmNsdWRlIDxtYWNoL2RldmljZXMtY29tbW9uLmg+Ci0KLWV4dGVybiBjb25zdCBzdHJ1Y3QgaW14X2ZlY19kYXRhIGlteDI1X2ZlY19kYXRhIF9faW5pdGNvbnN0OwotI2RlZmluZSBpbXgyNV9hZGRfZmVjKHBkYXRhKQlcCi0JaW14X2FkZF9mZWMoJmlteDI1X2ZlY19kYXRhLCBwZGF0YSkKLQotI2RlZmluZSBpbXgyNV9hZGRfZmxleGNhbjAocGRhdGEpCVwKLQlpbXhfYWRkX2ZsZXhjYW4oMCwgTVgyNV9DQU4xX0JBU0VfQUREUiwgU1pfMTZLLCBNWDI1X0lOVF9DQU4xLCBwZGF0YSkKLSNkZWZpbmUgaW14MjVfYWRkX2ZsZXhjYW4xKHBkYXRhKQlcCi0JaW14X2FkZF9mbGV4Y2FuKDEsIE1YMjVfQ0FOMl9CQVNFX0FERFIsIFNaXzE2SywgTVgyNV9JTlRfQ0FOMiwgcGRhdGEpCi0KLWV4dGVybiBjb25zdCBzdHJ1Y3QgaW14X2lteF9pMmNfZGF0YSBpbXgyNV9pbXhfaTJjX2RhdGFbXSBfX2luaXRjb25zdDsKLSNkZWZpbmUgaW14MjVfYWRkX2lteF9pMmMoaWQsIHBkYXRhKQlcCi0JaW14X2FkZF9pbXhfaTJjKCZpbXgyNV9pbXhfaTJjX2RhdGFbaWRdLCBwZGF0YSkKLSNkZWZpbmUgaW14MjVfYWRkX2lteF9pMmMwKHBkYXRhKQlpbXgyNV9hZGRfaW14X2kyYygwLCBwZGF0YSkKLSNkZWZpbmUgaW14MjVfYWRkX2lteF9pMmMxKHBkYXRhKQlpbXgyNV9hZGRfaW14X2kyYygxLCBwZGF0YSkKLSNkZWZpbmUgaW14MjVfYWRkX2lteF9pMmMyKHBkYXRhKQlpbXgyNV9hZGRfaW14X2kyYygyLCBwZGF0YSkKLQotZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbXhfaW14X3NzaV9kYXRhIGlteDI1X2lteF9zc2lfZGF0YVtdIF9faW5pdGNvbnN0OwotI2RlZmluZSBpbXgyNV9hZGRfaW14X3NzaShpZCwgcGRhdGEpCVwKLQlpbXhfYWRkX2lteF9zc2koJmlteDI1X2lteF9zc2lfZGF0YVtpZF0sIHBkYXRhKQotCi1leHRlcm4gY29uc3Qgc3RydWN0IGlteF9pbXhfdWFydF8xaXJxX2RhdGEgaW14MjVfaW14X3VhcnRfZGF0YVtdIF9faW5pdGNvbnN0OwotI2RlZmluZSBpbXgyNV9hZGRfaW14X3VhcnQoaWQsIHBkYXRhKQlcCi0JaW14X2FkZF9pbXhfdWFydF8xaXJxKCZpbXgyNV9pbXhfdWFydF9kYXRhW2lkXSwgcGRhdGEpCi0jZGVmaW5lIGlteDI1X2FkZF9pbXhfdWFydDAocGRhdGEpCWlteDI1X2FkZF9pbXhfdWFydCgwLCBwZGF0YSkKLSNkZWZpbmUgaW14MjVfYWRkX2lteF91YXJ0MShwZGF0YSkJaW14MjVfYWRkX2lteF91YXJ0KDEsIHBkYXRhKQotI2RlZmluZSBpbXgyNV9hZGRfaW14X3VhcnQyKHBkYXRhKQlpbXgyNV9hZGRfaW14X3VhcnQoMiwgcGRhdGEpCi0jZGVmaW5lIGlteDI1X2FkZF9pbXhfdWFydDMocGRhdGEpCWlteDI1X2FkZF9pbXhfdWFydCgzLCBwZGF0YSkKLSNkZWZpbmUgaW14MjVfYWRkX2lteF91YXJ0NChwZGF0YSkJaW14MjVfYWRkX2lteF91YXJ0KDQsIHBkYXRhKQotCi1leHRlcm4gY29uc3Qgc3RydWN0IGlteF9teGNfbmFuZF9kYXRhIGlteDI1X214Y19uYW5kX2RhdGEgX19pbml0Y29uc3Q7Ci0jZGVmaW5lIGlteDI1X2FkZF9teGNfbmFuZChwZGF0YSkJXAotCWlteF9hZGRfbXhjX25hbmQoJmlteDI1X214Y19uYW5kX2RhdGEsIHBkYXRhKQotCi1leHRlcm4gY29uc3Qgc3RydWN0IGlteF9zcGlfaW14X2RhdGEgaW14MjVfY3NwaV9kYXRhW10gX19pbml0Y29uc3Q7Ci0jZGVmaW5lIGlteDI1X2FkZF9zcGlfaW14KGlkLCBwZGF0YSkJXAotCWlteF9hZGRfc3BpX2lteCgmaW14MjVfY3NwaV9kYXRhW2lkXSwgcGRhdGEpCi0jZGVmaW5lIGlteDI1X2FkZF9zcGlfaW14MChwZGF0YSkJaW14MjVfYWRkX3NwaV9pbXgoMCwgcGRhdGEpCi0jZGVmaW5lIGlteDI1X2FkZF9zcGlfaW14MShwZGF0YSkJaW14MjVfYWRkX3NwaV9pbXgoMSwgcGRhdGEpCi0jZGVmaW5lIGlteDI1X2FkZF9zcGlfaW14MihwZGF0YSkJaW14MjVfYWRkX3NwaV9pbXgoMiwgcGRhdGEpCi0KLWV4dGVybiBjb25zdCBzdHJ1Y3QgaW14X2VzZGhjX2lteF9kYXRhIGlteDI1X2VzZGhjX2RhdGFbXSBfX2luaXRjb25zdDsKLSNkZWZpbmUgaW14MjVfYWRkX2VzZGhjKGlkLCBwZGF0YSkJXAotCWlteF9hZGRfZXNkaGMoJmlteDI1X2VzZGhjX2RhdGFbaWRdLCBwZGF0YSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyNS9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLW14MjUvZGV2aWNlcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZDBlYjNlLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtbXgyNS9kZXZpY2VzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDA5IFNhc2NoYSBIYXVlciwgPGtlcm5lbEBwZW5ndXRyb25peC5kZT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKLSAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BICAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPG1hY2gvbXgyNS5oPgotI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgotCi1zdGF0aWMgdTY0IG90Z19kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteGNfb3RnX3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0ID0gTVgyNV9PVEdfQkFTRV9BRERSLAotCQkuZW5kID0gTVgyNV9PVEdfQkFTRV9BRERSICsgMHgxZmYsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCX0sIHsKLQkJLnN0YXJ0ID0gMzcsCi0JCS5lbmQgPSAzNywKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX290ZyA9IHsKLQkubmFtZSA9ICJteGMtZWhjaSIsCi0JLmlkID0gMCwKLQkuZGV2ID0gewotCQkuY29oZXJlbnRfZG1hX21hc2sgPSAweGZmZmZmZmZmLAotCQkuZG1hX21hc2sgPSAmb3RnX2RtYW1hc2ssCi0JfSwKLQkucmVzb3VyY2UgPSBteGNfb3RnX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX290Z19yZXNvdXJjZXMpLAotfTsKLQotLyogT1RHIGdhZGdldCBkZXZpY2UgKi8KLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb3RnX3VkY19kZXZpY2UgPSB7Ci0JLm5hbWUgPSAiZnNsLXVzYjItdWRjIiwKLQkuaWQgICA9IC0xLAotCS5kZXYgID0gewotCQkuZG1hX21hc2sgICAgICAgICAgPSAmb3RnX2RtYW1hc2ssCi0JCS5jb2hlcmVudF9kbWFfbWFzayA9IDB4ZmZmZmZmZmYsCi0JfSwKLQkucmVzb3VyY2UgPSBteGNfb3RnX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX290Z19yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIHU2NCB1c2JoMl9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteGNfdXNiaDJfcmVzb3VyY2VzW10gPSB7Ci0JewotCQkuc3RhcnQgPSBNWDI1X09UR19CQVNFX0FERFIgKyAweDQwMCwKLQkJLmVuZCA9IE1YMjVfT1RHX0JBU0VfQUREUiArIDB4NWZmLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLQl9LCB7Ci0JCS5zdGFydCA9IDM1LAotCQkuZW5kID0gMzUsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y191c2JoMiA9IHsKLQkubmFtZSA9ICJteGMtZWhjaSIsCi0JLmlkID0gMSwKLQkuZGV2ID0gewotCQkuY29oZXJlbnRfZG1hX21hc2sgPSAweGZmZmZmZmZmLAotCQkuZG1hX21hc2sgPSAmdXNiaDJfZG1hbWFzaywKLQl9LAotCS5yZXNvdXJjZSA9IG14Y191c2JoMl9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKG14Y191c2JoMl9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteGNfcHdtX3Jlc291cmNlczBbXSA9IHsKLQl7Ci0JCS5zdGFydAk9IDB4NTNmZTAwMDAsCi0JCS5lbmQJPSAweDUzZmUzZmZmLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LCB7Ci0JCS5zdGFydCAgID0gMjYsCi0JCS5lbmQgICAgID0gMjYsCi0JCS5mbGFncyAgID0gSU9SRVNPVVJDRV9JUlEsCi0JfQotfTsKLQotc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfcHdtX2RldmljZTAgPSB7Ci0JLm5hbWUgPSAibXhjX3B3bSIsCi0JLmlkID0gMCwKLQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX3B3bV9yZXNvdXJjZXMwKSwKLQkucmVzb3VyY2UgPSBteGNfcHdtX3Jlc291cmNlczAsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y19wd21fcmVzb3VyY2VzMVtdID0gewotCXsKLQkJLnN0YXJ0CT0gMHg1M2ZhMDAwMCwKLQkJLmVuZAk9IDB4NTNmYTNmZmYsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sIHsKLQkJLnN0YXJ0ICAgPSAzNiwKLQkJLmVuZCAgICAgPSAzNiwKLQkJLmZsYWdzICAgPSBJT1JFU09VUkNFX0lSUSwKLQl9Ci19OwotCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19wd21fZGV2aWNlMSA9IHsKLQkubmFtZSA9ICJteGNfcHdtIiwKLQkuaWQgPSAxLAotCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNfcHdtX3Jlc291cmNlczEpLAotCS5yZXNvdXJjZSA9IG14Y19wd21fcmVzb3VyY2VzMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXhjX3B3bV9yZXNvdXJjZXMyW10gPSB7Ci0JewotCQkuc3RhcnQJPSAweDUzZmE4MDAwLAotCQkuZW5kCT0gMHg1M2ZhYmZmZiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwgewotCQkuc3RhcnQgICA9IDQxLAotCQkuZW5kICAgICA9IDQxLAotCQkuZmxhZ3MgICA9IElPUkVTT1VSQ0VfSVJRLAotCX0KLX07Ci0KLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3B3bV9kZXZpY2UyID0gewotCS5uYW1lID0gIm14Y19wd20iLAotCS5pZCA9IDIsCi0JLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKG14Y19wd21fcmVzb3VyY2VzMiksCi0JLnJlc291cmNlID0gbXhjX3B3bV9yZXNvdXJjZXMyLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteGNfa2V5cGFkX3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0CT0gMHg0M2ZhODAwMCwKLQkJLmVuZAk9IDB4NDNmYWJmZmYsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sIHsKLQkJLnN0YXJ0ICAgPSAyNCwKLQkJLmVuZCAgICAgPSAyNCwKLQkJLmZsYWdzICAgPSBJT1JFU09VUkNFX0lSUSwKLQl9Ci19OwotCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19rZXlwYWRfZGV2aWNlID0gewotCS5uYW1lID0gIm14Yy1rZXlwYWQiLAotCS5pZCA9IC0xLAotCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNfa2V5cGFkX3Jlc291cmNlcyksCi0JLnJlc291cmNlID0gbXhjX2tleXBhZF9yZXNvdXJjZXMsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y19wd21fcmVzb3VyY2VzM1tdID0gewotCXsKLQkJLnN0YXJ0CT0gMHg1M2ZjODAwMCwKLQkJLmVuZAk9IDB4NTNmY2JmZmYsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sIHsKLQkJLnN0YXJ0ICAgPSA0MiwKLQkJLmVuZCAgICAgPSA0MiwKLQkJLmZsYWdzICAgPSBJT1JFU09VUkNFX0lSUSwKLQl9Ci19OwotCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19wd21fZGV2aWNlMyA9IHsKLQkubmFtZSA9ICJteGNfcHdtIiwKLQkuaWQgPSAzLAotCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNfcHdtX3Jlc291cmNlczMpLAotCS5yZXNvdXJjZSA9IG14Y19wd21fcmVzb3VyY2VzMywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbXhjX2dwaW9fcG9ydCBpbXhfZ3Bpb19wb3J0c1tdID0gewotCXsKLQkJLmNoaXAubGFiZWwgPSAiZ3Bpby0wIiwKLQkJLmJhc2UgPSAodm9pZCBfX2lvbWVtICopTVgyNV9HUElPMV9CQVNFX0FERFJfVklSVCwKLQkJLmlycSA9IDUyLAotCQkudmlydHVhbF9pcnFfc3RhcnQgPSBNWENfR1BJT19JUlFfU1RBUlQsCi0JfSwgewotCQkuY2hpcC5sYWJlbCA9ICJncGlvLTEiLAotCQkuYmFzZSA9ICh2b2lkIF9faW9tZW0gKilNWDI1X0dQSU8yX0JBU0VfQUREUl9WSVJULAotCQkuaXJxID0gNTEsCi0JCS52aXJ0dWFsX2lycV9zdGFydCA9IE1YQ19HUElPX0lSUV9TVEFSVCArIDMyLAotCX0sIHsKLQkJLmNoaXAubGFiZWwgPSAiZ3Bpby0yIiwKLQkJLmJhc2UgPSAodm9pZCBfX2lvbWVtICopTVgyNV9HUElPM19CQVNFX0FERFJfVklSVCwKLQkJLmlycSA9IDE2LAotCQkudmlydHVhbF9pcnFfc3RhcnQgPSBNWENfR1BJT19JUlFfU1RBUlQgKyA2NCwKLQl9LCB7Ci0JCS5jaGlwLmxhYmVsID0gImdwaW8tMyIsCi0JCS5iYXNlID0gKHZvaWQgX19pb21lbSAqKU1YMjVfR1BJTzRfQkFTRV9BRERSX1ZJUlQsCi0JCS5pcnEgPSAyMywKLQkJLnZpcnR1YWxfaXJxX3N0YXJ0ID0gTVhDX0dQSU9fSVJRX1NUQVJUICsgOTYsCi0JfQotfTsKLQotaW50IF9faW5pdCBpbXgyNV9yZWdpc3Rlcl9ncGlvcyh2b2lkKQotewotCXJldHVybiBteGNfZ3Bpb19pbml0KGlteF9ncGlvX3BvcnRzLCBBUlJBWV9TSVpFKGlteF9ncGlvX3BvcnRzKSk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXgyNV9ydGNfcmVzb3VyY2VzW10gPSB7Ci0JewotCQkuc3RhcnQJPSBNWDI1X0RSWUlDRV9CQVNFX0FERFIsCi0JCS5lbmQJPSBNWDI1X0RSWUlDRV9CQVNFX0FERFIgKyAweDQwLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCXsKLQkJLnN0YXJ0CT0gTVgyNV9JTlRfRFJZSUNFLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUQotCX0sCi19OwotCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14MjVfcnRjX2RldmljZSA9IHsKLQkubmFtZQk9ICJpbXhkaV9ydGMiLAotCS5pZAk9IDAsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG14MjVfcnRjX3Jlc291cmNlcyksCi0JLnJlc291cmNlCT0gbXgyNV9ydGNfcmVzb3VyY2VzLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteDI1X2ZiX3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0CT0gTVgyNV9MQ0RDX0JBU0VfQUREUiwKLQkJLmVuZAk9IE1YMjVfTENEQ19CQVNFX0FERFIgKyAweGZmZiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQl7Ci0JCS5zdGFydAk9IE1YMjVfSU5UX0xDREMsCi0JCS5lbmQJPSBNWDI1X0lOVF9MQ0RDLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RydWN0IHBsYXRmb3JtX2RldmljZSBteDI1X2ZiX2RldmljZSA9IHsKLQkubmFtZQkJPSAiaW14LWZiIiwKLQkuaWQJCT0gMCwKLQkucmVzb3VyY2UJPSBteDI1X2ZiX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobXgyNV9mYl9yZXNvdXJjZXMpLAotCS5kZXYJCT0gewotCQkuY29oZXJlbnRfZG1hX21hc2sgPSAweEZGRkZGRkZGLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y193ZHRfcmVzb3VyY2VzW10gPSB7Ci0JewotCQkuc3RhcnQgPSBNWDI1X1dET0dfQkFTRV9BRERSLAotCQkuZW5kID0gTVgyNV9XRE9HX0JBU0VfQUREUiArIFNaXzE2SyAtIDEsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi19OwotCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y193ZHQgPSB7Ci0JLm5hbWUgPSAiaW14Mi13ZHQiLAotCS5pZCA9IDAsCi0JLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKG14Y193ZHRfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UgPSBteGNfd2R0X3Jlc291cmNlcywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXgyNV9rcHBfcmVzb3VyY2VzW10gPSB7Ci0JewotCQkuc3RhcnQJPSBNWDI1X0tQUF9CQVNFX0FERFIsCi0JCS5lbmQJPSBNWDI1X0tQUF9CQVNFX0FERFIgKyAweGYsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JewotCQkuc3RhcnQJPSBNWDI1X0lOVF9LUFAsCi0JCS5lbmQJPSBNWDI1X0lOVF9LUFAsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14MjVfa3BwX2RldmljZSA9IHsKLQkubmFtZQk9ICJpbXgta2V5cGFkIiwKLQkuaWQJPSAtMSwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobXgyNV9rcHBfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UJPSBteDI1X2twcF9yZXNvdXJjZXMsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIG14MjVfY3NpX3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0CT0gTVgyNV9DU0lfQkFTRV9BRERSLAotCQkuZW5kCT0gTVgyNV9DU0lfQkFTRV9BRERSICsgMHhmZmYsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JewotCQkuc3RhcnQJPSBNWDI1X0lOVF9DU0ksCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRCi0JfSwKLX07Ci0KLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXgyNV9jc2lfZGV2aWNlID0gewotCS5uYW1lCT0gIm14Mi1jYW1lcmEiLAotCS5pZAk9IDAsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG14MjVfY3NpX3Jlc291cmNlcyksCi0JLnJlc291cmNlCT0gbXgyNV9jc2lfcmVzb3VyY2VzLAotCS5kZXYJCT0gewotCQkuY29oZXJlbnRfZG1hX21hc2sgPSAweGZmZmZmZmZmLAotCX0sCi19OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDI1L2RldmljZXMuaCBiL2FyY2gvYXJtL21hY2gtbXgyNS9kZXZpY2VzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiNzBhNDMuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDI1L2RldmljZXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19vdGc7Ci1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBvdGdfdWRjX2RldmljZTsKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y191c2JoMjsKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19wd21fZGV2aWNlMDsKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19wd21fZGV2aWNlMTsKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19wd21fZGV2aWNlMjsKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19wd21fZGV2aWNlMzsKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19rZXlwYWRfZGV2aWNlOwotZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXgyNV9ydGNfZGV2aWNlOwotZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXgyNV9mYl9kZXZpY2U7Ci1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfd2R0OwotZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXgyNV9rcHBfZGV2aWNlOwotZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXgyNV9jc2lfZGV2aWNlOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDI1L2V1a3JlYV9tYmlteHNkLWJhc2Vib2FyZC5jIGIvYXJjaC9hcm0vbWFjaC1teDI1L2V1a3JlYV9tYmlteHNkLWJhc2Vib2FyZC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzY1YWM1Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtbXgyNS9ldWtyZWFfbWJpbXhzZC1iYXNlYm9hcmQuYworKysgL2Rldi9udWxsCkBAIC0xLDI5OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEVyaWMgQmVuYXJkIC0gZXJpY0BldWtyZWEuY29tCi0gKgotICogQmFzZWQgb24gcGNtOTcwLWJhc2Vib2FyZC5jIHdoaWNoIGlzIDoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBKdWVyZ2VuIEJlaXNlcnQgKGtlcm5lbEBwZW5ndXRyb25peC5kZSkKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKLSAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKLSAqIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvX2tleXMuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgotI2luY2x1ZGUgPHZpZGVvL3BsYXRmb3JtX2xjZC5oPgotCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvaW9tdXgtbXgyNS5oPgotI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8bWFjaC9teDI1Lmg+Ci0jaW5jbHVkZSA8bWFjaC9pbXgtdWFydC5oPgotI2luY2x1ZGUgPG1hY2gvaW14ZmIuaD4KLSNpbmNsdWRlIDxtYWNoL2F1ZG11eC5oPgotCi0jaW5jbHVkZSAiZGV2aWNlcy1pbXgyNS5oIgotI2luY2x1ZGUgImRldmljZXMuaCIKLQotc3RhdGljIHN0cnVjdCBwYWRfZGVzYyBldWtyZWFfbWJpbXhzZF9wYWRzW10gPSB7Ci0JLyogTENEICovCi0JTVgyNV9QQURfTEQwX19MRDAsCi0JTVgyNV9QQURfTEQxX19MRDEsCi0JTVgyNV9QQURfTEQyX19MRDIsCi0JTVgyNV9QQURfTEQzX19MRDMsCi0JTVgyNV9QQURfTEQ0X19MRDQsCi0JTVgyNV9QQURfTEQ1X19MRDUsCi0JTVgyNV9QQURfTEQ2X19MRDYsCi0JTVgyNV9QQURfTEQ3X19MRDcsCi0JTVgyNV9QQURfTEQ4X19MRDgsCi0JTVgyNV9QQURfTEQ5X19MRDksCi0JTVgyNV9QQURfTEQxMF9fTEQxMCwKLQlNWDI1X1BBRF9MRDExX19MRDExLAotCU1YMjVfUEFEX0xEMTJfX0xEMTIsCi0JTVgyNV9QQURfTEQxM19fTEQxMywKLQlNWDI1X1BBRF9MRDE0X19MRDE0LAotCU1YMjVfUEFEX0xEMTVfX0xEMTUsCi0JTVgyNV9QQURfR1BJT19FX19MRDE2LAotCU1YMjVfUEFEX0dQSU9fRl9fTEQxNywKLQlNWDI1X1BBRF9IU1lOQ19fSFNZTkMsCi0JTVgyNV9QQURfVlNZTkNfX1ZTWU5DLAotCU1YMjVfUEFEX0xTQ0xLX19MU0NMSywKLQlNWDI1X1BBRF9PRV9BQ0RfX09FX0FDRCwKLQlNWDI1X1BBRF9DT05UUkFTVF9fQ09OVFJBU1QsCi0JLyogTENEX1BXUiAqLwotCU1YMjVfUEFEX1BXTV9fR1BJT18xXzI2LAotCS8qIExFRCAqLwotCU1YMjVfUEFEX1BPV0VSX0ZBSUxfX0dQSU9fM18xOSwKLQkvKiBTV0lUQ0ggKi8KLQlNWDI1X1BBRF9WU1RCWV9BQ0tfX0dQSU9fM18xOCwKLQkvKiBVQVJUMiAqLwotCU1YMjVfUEFEX1VBUlQyX1JUU19fVUFSVDJfUlRTLAotCU1YMjVfUEFEX1VBUlQyX0NUU19fVUFSVDJfQ1RTLAotCU1YMjVfUEFEX1VBUlQyX1RYRF9fVUFSVDJfVFhELAotCU1YMjVfUEFEX1VBUlQyX1JYRF9fVUFSVDJfUlhELAotCS8qIFNEMSAqLwotCU1YMjVfUEFEX1NEMV9DTURfX1NEMV9DTUQsCi0JTVgyNV9QQURfU0QxX0NMS19fU0QxX0NMSywKLQlNWDI1X1BBRF9TRDFfREFUQTBfX1NEMV9EQVRBMCwKLQlNWDI1X1BBRF9TRDFfREFUQTFfX1NEMV9EQVRBMSwKLQlNWDI1X1BBRF9TRDFfREFUQTJfX1NEMV9EQVRBMiwKLQlNWDI1X1BBRF9TRDFfREFUQTNfX1NEMV9EQVRBMywKLQkvKiBTRDEgQ0QgKi8KLQlNWDI1X1BBRF9ERV9CX19HUElPXzJfMjAsCi0JLyogSTJTICovCi0JTVgyNV9QQURfS1BQX0NPTDNfX0FVRDVfVFhGUywKLQlNWDI1X1BBRF9LUFBfQ09MMl9fQVVENV9UWEMsCi0JTVgyNV9QQURfS1BQX0NPTDFfX0FVRDVfUlhELAotCU1YMjVfUEFEX0tQUF9DT0wwX19BVUQ1X1RYRCwKLQkvKiBDQU4gKi8KLQlNWDI1X1BBRF9HUElPX0RfX0NBTjJfUlgsCi0JTVgyNV9QQURfR1BJT19DX19DQU4yX1RYLAotfTsKLQotI2RlZmluZSBHUElPX0xFRDEJODMKLSNkZWZpbmUgR1BJT19TV0lUQ0gxCTgyCi0jZGVmaW5lIEdQSU9fU0QxQ0QJNTIKLSNkZWZpbmUgR1BJT19MQ0RQV1IJMjYKLQotc3RhdGljIHN0cnVjdCBpbXhfZmJfdmlkZW9tb2RlIGV1a3JlYV9teGlteHNkX21vZGVzW10gPSB7Ci0JewotCQkubW9kZQk9IHsKLQkJCS5uYW1lCQk9ICJDTU8tUVZHQSIsCi0JCQkucmVmcmVzaAk9IDYwLAotCQkJLnhyZXMJCT0gMzIwLAotCQkJLnlyZXMJCT0gMjQwLAotCQkJLnBpeGNsb2NrCT0gS0haMlBJQ09TKDY1MDApLAotCQkJLmxlZnRfbWFyZ2luCT0gMzAsCi0JCQkucmlnaHRfbWFyZ2luCT0gMzgsCi0JCQkudXBwZXJfbWFyZ2luCT0gMjAsCi0JCQkubG93ZXJfbWFyZ2luCT0gMywKLQkJCS5oc3luY19sZW4JPSAxNSwKLQkJCS52c3luY19sZW4JPSA0LAotCQl9LAotCQkuYnBwCT0gMTYsCi0JCS5wY3IJPSAweENBRDA4QjgwLAotCX0sIHsKLQkJLm1vZGUgPSB7Ci0JCQkubmFtZQkJPSAiRFZJLVZHQSIsCi0JCQkucmVmcmVzaAk9IDYwLAotCQkJLnhyZXMJCT0gNjQwLAotCQkJLnlyZXMJCT0gNDgwLAotCQkJLnBpeGNsb2NrCT0gMzIwMDAsCi0JCQkuaHN5bmNfbGVuCT0gNywKLQkJCS5sZWZ0X21hcmdpbgk9IDEwMCwKLQkJCS5yaWdodF9tYXJnaW4JPSAxMDAsCi0JCQkudnN5bmNfbGVuCT0gNywKLQkJCS51cHBlcl9tYXJnaW4JPSA3LAotCQkJLmxvd2VyX21hcmdpbgk9IDEwMCwKLQkJfSwKLQkJLnBjcgkJPSAweEZBMjA4QjgwLAotCQkuYnBwCQk9IDE2LAotCX0sIHsKLQkJLm1vZGUgPSB7Ci0JCQkubmFtZQkJPSAiRFZJLVNWR0EiLAotCQkJLnJlZnJlc2gJPSA2MCwKLQkJCS54cmVzCQk9IDgwMCwKLQkJCS55cmVzCQk9IDYwMCwKLQkJCS5waXhjbG9jawk9IDI1MDAwLAotCQkJLmhzeW5jX2xlbgk9IDcsCi0JCQkubGVmdF9tYXJnaW4JPSA3NSwKLQkJCS5yaWdodF9tYXJnaW4JPSA3NSwKLQkJCS52c3luY19sZW4JPSA3LAotCQkJLnVwcGVyX21hcmdpbgk9IDcsCi0JCQkubG93ZXJfbWFyZ2luCT0gNzUsCi0JCX0sCi0JCS5wY3IJCT0gMHhGQTIwOEI4MCwKLQkJLmJwcAkJPSAxNiwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBpbXhfZmJfcGxhdGZvcm1fZGF0YSBldWtyZWFfbXhpbXhzZF9mYl9wZGF0YSA9IHsKLQkubW9kZQkJPSBldWtyZWFfbXhpbXhzZF9tb2RlcywKLQkubnVtX21vZGVzCT0gQVJSQVlfU0laRShldWtyZWFfbXhpbXhzZF9tb2RlcyksCi0JLnB3bXIJCT0gMHgwMEE5MDNGRiwKLQkubHNjcjEJCT0gMHgwMDEyMDMwMCwKLQkuZG1hY3IJCT0gMHgwMDA0MDA2MCwKLX07Ci0KLXN0YXRpYyB2b2lkIGV1a3JlYV9tYmlteHNkX2xjZF9wb3dlcl9zZXQoc3RydWN0IHBsYXRfbGNkX2RhdGEgKnBkLAotCQkJCSAgIHVuc2lnbmVkIGludCBwb3dlcikKLXsKLQlpZiAocG93ZXIpCi0JCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX0xDRFBXUiwgMSk7Ci0JZWxzZQotCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19MQ0RQV1IsIDApOwotfQotCi1zdGF0aWMgc3RydWN0IHBsYXRfbGNkX2RhdGEgZXVrcmVhX21iaW14c2RfbGNkX3Bvd2VyX2RhdGEgPSB7Ci0JLnNldF9wb3dlcgkJPSBldWtyZWFfbWJpbXhzZF9sY2RfcG93ZXJfc2V0LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZXVrcmVhX21iaW14c2RfbGNkX3Bvd2VyZGV2ID0gewotCS5uYW1lCQkJPSAicGxhdGZvcm0tbGNkIiwKLQkuZGV2LnBsYXRmb3JtX2RhdGEJPSAmZXVrcmVhX21iaW14c2RfbGNkX3Bvd2VyX2RhdGEsCi19OwotCi1zdGF0aWMgc3RydWN0IGdwaW9fbGVkIGV1a3JlYV9tYmlteHNkX2xlZHNbXSA9IHsKLQl7Ci0JCS5uYW1lCQkJPSAibGVkMSIsCi0JCS5kZWZhdWx0X3RyaWdnZXIJPSAiaGVhcnRiZWF0IiwKLQkJLmFjdGl2ZV9sb3cJCT0gMSwKLQkJLmdwaW8JCQk9IEdQSU9fTEVEMSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBncGlvX2xlZF9wbGF0Zm9ybV9kYXRhIGV1a3JlYV9tYmlteHNkX2xlZF9pbmZvID0gewotCS5sZWRzCQk9IGV1a3JlYV9tYmlteHNkX2xlZHMsCi0JLm51bV9sZWRzCT0gQVJSQVlfU0laRShldWtyZWFfbWJpbXhzZF9sZWRzKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGV1a3JlYV9tYmlteHNkX2xlZHNfZ3BpbyA9IHsKLQkubmFtZQk9ICJsZWRzLWdwaW8iLAotCS5pZAk9IC0xLAotCS5kZXYJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJmV1a3JlYV9tYmlteHNkX2xlZF9pbmZvLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGdwaW9fa2V5c19idXR0b24gZXVrcmVhX21iaW14c2RfZ3Bpb19idXR0b25zW10gPSB7Ci0JewotCQkuZ3BpbwkJPSBHUElPX1NXSVRDSDEsCi0JCS5jb2RlCQk9IEJUTl8wLAotCQkuZGVzYwkJPSAiQlAxIiwKLQkJLmFjdGl2ZV9sb3cJPSAxLAotCQkud2FrZXVwCQk9IDEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX3BsYXRmb3JtX2RhdGEgZXVrcmVhX21iaW14c2RfYnV0dG9uX2RhdGEgPSB7Ci0JLmJ1dHRvbnMJPSBldWtyZWFfbWJpbXhzZF9ncGlvX2J1dHRvbnMsCi0JLm5idXR0b25zCT0gQVJSQVlfU0laRShldWtyZWFfbWJpbXhzZF9ncGlvX2J1dHRvbnMpLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZXVrcmVhX21iaW14c2RfYnV0dG9uX2RldmljZSA9IHsKLQkubmFtZQkJPSAiZ3Bpby1rZXlzIiwKLQkuaWQJCT0gLTEsCi0JLm51bV9yZXNvdXJjZXMJPSAwLAotCS5kZXYJCT0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZldWtyZWFfbWJpbXhzZF9idXR0b25fZGF0YSwKLQl9Ci19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdGZvcm1fZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7Ci0JJmV1a3JlYV9tYmlteHNkX2xlZHNfZ3BpbywKLQkmZXVrcmVhX21iaW14c2RfYnV0dG9uX2RldmljZSwKLQkmZXVrcmVhX21iaW14c2RfbGNkX3Bvd2VyZGV2LAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBpbXh1YXJ0X3BsYXRmb3JtX2RhdGEgdWFydF9wZGF0YSBfX2luaXRjb25zdCA9IHsKLQkuZmxhZ3MgPSBJTVhVQVJUX0hBVkVfUlRTQ1RTLAotfTsKLQotc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBldWtyZWFfbWJpbXhzZF9pMmNfZGV2aWNlc1tdID0gewotCXsKLQkJSTJDX0JPQVJEX0lORk8oInRsdjMyMGFpYzIzIiwgMHgxYSksCi0JfSwKLX07Ci0KLXN0YXRpYyBjb25zdAotc3RydWN0IGlteF9zc2lfcGxhdGZvcm1fZGF0YSBldWtyZWFfbWJpbXhzZF9zc2lfcGRhdGEgX19pbml0Y29uc3QgPSB7Ci0JLmZsYWdzID0gSU1YX1NTSV9TWU4gfCBJTVhfU1NJX05FVCB8IElNWF9TU0lfVVNFX0kyU19TTEFWRSwKLX07Ci0KLS8qCi0gKiBzeXN0ZW0gaW5pdCBmb3IgYmFzZWJvYXJkIHVzYWdlLiBXaWxsIGJlIGNhbGxlZCBieSBjcHVpbXgyNSBpbml0LgotICoKLSAqIEFkZCBwbGF0Zm9ybSBkZXZpY2VzIHByZXNlbnQgb24gdGhpcyBiYXNlYm9hcmQgYW5kIGluaXQKLSAqIHRoZW0gZnJvbSBDUFUgc2lkZSBhcyBmYXIgYXMgcmVxdWlyZWQgdG8gdXNlIHRoZW0gbGF0ZXIgb24KLSAqLwotdm9pZCBfX2luaXQgZXVrcmVhX21iaW14c2QyNV9iYXNlYm9hcmRfaW5pdCh2b2lkKQotewotCWlmIChteGNfaW9tdXhfdjNfc2V0dXBfbXVsdGlwbGVfcGFkcyhldWtyZWFfbWJpbXhzZF9wYWRzLAotCQkJQVJSQVlfU0laRShldWtyZWFfbWJpbXhzZF9wYWRzKSkpCi0JCXByaW50ayhLRVJOX0VSUiAiZXJyb3Igc2V0dGluZyBtYmlteHNkIHBhZHMgIVxuIik7Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19TTkRfU09DX0VVS1JFQV9UTFYzMjApCi0JLyogU1NJIHVuaXQgbWFzdGVyIEkyUyBjb2RlYyBjb25uZWN0ZWQgdG8gU1NJX0FVRDUqLwotCW14Y19hdWRtdXhfdjJfY29uZmlndXJlX3BvcnQoMCwKLQkJCU1YQ19BVURNVVhfVjJfUFRDUl9TWU4gfAotCQkJTVhDX0FVRE1VWF9WMl9QVENSX1RGU0RJUiB8Ci0JCQlNWENfQVVETVVYX1YyX1BUQ1JfVEZTRUwoNCkgfAotCQkJTVhDX0FVRE1VWF9WMl9QVENSX1RDTEtESVIgfAotCQkJTVhDX0FVRE1VWF9WMl9QVENSX1RDU0VMKDQpLAotCQkJTVhDX0FVRE1VWF9WMl9QRENSX1JYRFNFTCg0KQotCSk7Ci0JbXhjX2F1ZG11eF92Ml9jb25maWd1cmVfcG9ydCg0LAotCQkJTVhDX0FVRE1VWF9WMl9QVENSX1NZTiwKLQkJCU1YQ19BVURNVVhfVjJfUERDUl9SWERTRUwoMCkKLQkpOwotI2VuZGlmCi0KLQlpbXgyNV9hZGRfaW14X3VhcnQxKCZ1YXJ0X3BkYXRhKTsKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteDI1X2ZiX2RldmljZSwgJmV1a3JlYV9teGlteHNkX2ZiX3BkYXRhKTsKLQlpbXgyNV9hZGRfaW14X3NzaSgwLCAmZXVrcmVhX21iaW14c2Rfc3NpX3BkYXRhKTsKLQotCWlteDI1X2FkZF9mbGV4Y2FuMShOVUxMKTsKLQlpbXgyNV9hZGRfZXNkaGMoMCwgTlVMTCk7Ci0KLQlncGlvX3JlcXVlc3QoR1BJT19MRUQxLCAiTEVEMSIpOwotCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX0xFRDEsIDEpOwotCWdwaW9fZnJlZShHUElPX0xFRDEpOwotCi0JZ3Bpb19yZXF1ZXN0KEdQSU9fU1dJVENIMSwgIlNXSVRDSDEiKTsKLQlncGlvX2RpcmVjdGlvbl9pbnB1dChHUElPX1NXSVRDSDEpOwotCWdwaW9fZnJlZShHUElPX1NXSVRDSDEpOwotCi0JZ3Bpb19yZXF1ZXN0KEdQSU9fTENEUFdSLCAiTENEUFdSIik7Ci0JZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fTENEUFdSLCAxKTsKLQlncGlvX2ZyZWUoR1BJT19TV0lUQ0gxKTsKLQotCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIGV1a3JlYV9tYmlteHNkX2kyY19kZXZpY2VzLAotCQkJCUFSUkFZX1NJWkUoZXVrcmVhX21iaW14c2RfaTJjX2RldmljZXMpKTsKLQotCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHBsYXRmb3JtX2RldmljZXMsIEFSUkFZX1NJWkUocGxhdGZvcm1fZGV2aWNlcykpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDI1L21hY2gtY3B1aW14MjUuYyBiL2FyY2gvYXJtL21hY2gtbXgyNS9tYWNoLWNwdWlteDI1LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2ZjlhZDYuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDI1L21hY2gtY3B1aW14MjUuYworKysgL2Rldi9udWxsCkBAIC0xLDE2NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDkgU2FzY2hhIEhhdWVyLCA8a2VybmVsQHBlbmd1dHJvbml4LmRlPgotICogQ29weXJpZ2h0IDIwMTAgRXJpYyBCw6luYXJkIC0gRXVrcsOpYSBFbGVjdHJvbWF0aXF1ZSwgPGVyaWNAZXVrcmVhLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKLSAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BICAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvY2xrLmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3VzYi9vdGcuaD4KLSNpbmNsdWRlIDxsaW51eC91c2IvdWxwaS5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzbF9kZXZpY2VzLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2V1a3JlYS1iYXNlYm9hcmRzLmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KLSNpbmNsdWRlIDxhc20vbWVtb3J5Lmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KLSNpbmNsdWRlIDxtYWNoL214MjUuaD4KLSNpbmNsdWRlIDxtYWNoL214Y19uYW5kLmg+Ci0jaW5jbHVkZSA8bWFjaC9pbXhmYi5oPgotI2luY2x1ZGUgPG1hY2gvbXhjX2VoY2kuaD4KLSNpbmNsdWRlIDxtYWNoL2lvbXV4LW14MjUuaD4KLQotI2luY2x1ZGUgImRldmljZXMtaW14MjUuaCIKLSNpbmNsdWRlICJkZXZpY2VzLmgiCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW14dWFydF9wbGF0Zm9ybV9kYXRhIHVhcnRfcGRhdGEgX19pbml0Y29uc3QgPSB7Ci0JLmZsYWdzID0gSU1YVUFSVF9IQVZFX1JUU0NUUywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGFkX2Rlc2MgZXVrcmVhX2NwdWlteDI1X3BhZHNbXSA9IHsKLQkvKiBGRUMgLSBSTUlJICovCi0JTVgyNV9QQURfRkVDX01EQ19fRkVDX01EQywKLQlNWDI1X1BBRF9GRUNfTURJT19fRkVDX01ESU8sCi0JTVgyNV9QQURfRkVDX1REQVRBMF9fRkVDX1REQVRBMCwKLQlNWDI1X1BBRF9GRUNfVERBVEExX19GRUNfVERBVEExLAotCU1YMjVfUEFEX0ZFQ19UWF9FTl9fRkVDX1RYX0VOLAotCU1YMjVfUEFEX0ZFQ19SREFUQTBfX0ZFQ19SREFUQTAsCi0JTVgyNV9QQURfRkVDX1JEQVRBMV9fRkVDX1JEQVRBMSwKLQlNWDI1X1BBRF9GRUNfUlhfRFZfX0ZFQ19SWF9EViwKLQlNWDI1X1BBRF9GRUNfVFhfQ0xLX19GRUNfVFhfQ0xLLAotCS8qIEkyQzEgKi8KLQlNWDI1X1BBRF9JMkMxX0NMS19fSTJDMV9DTEssCi0JTVgyNV9QQURfSTJDMV9EQVRfX0kyQzFfREFULAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmZWNfcGxhdGZvcm1fZGF0YSBteDI1X2ZlY19wZGF0YSBfX2luaXRjb25zdCA9IHsKLQkucGh5CT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUksCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IG14Y19uYW5kX3BsYXRmb3JtX2RhdGEKLWV1a3JlYV9jcHVpbXgyNV9uYW5kX2JvYXJkX2luZm8gX19pbml0Y29uc3QgPSB7Ci0JLndpZHRoCQk9IDEsCi0JLmh3X2VjYwkJPSAxLAotCS5mbGFzaF9iYnQJPSAxLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBpbXhpMmNfcGxhdGZvcm1fZGF0YQotZXVrcmVhX2NwdWlteDI1X2kyYzBfZGF0YSBfX2luaXRjb25zdCA9IHsKLQkuYml0cmF0ZSA9IDEwMDAwMCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gZXVrcmVhX2NwdWlteDI1X2kyY19kZXZpY2VzW10gPSB7Ci0JewotCQlJMkNfQk9BUkRfSU5GTygicGNmODU2MyIsIDB4NTEpLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IG14Y191c2JoX3BsYXRmb3JtX2RhdGEgb3RnX3BkYXRhID0gewotCS5wb3J0c2MJPSBNWENfRUhDSV9NT0RFX1VUTUksCi0JLmZsYWdzCT0gTVhDX0VIQ0lfSU5URVJGQUNFX0RJRkZfVU5JLAotfTsKLQotc3RhdGljIHN0cnVjdCBteGNfdXNiaF9wbGF0Zm9ybV9kYXRhIHVzYmgyX3BkYXRhID0gewotCS5wb3J0c2MJPSBNWENfRUhDSV9NT0RFX1NFUklBTCwKLQkuZmxhZ3MJPSBNWENfRUhDSV9JTlRFUkZBQ0VfU0lOR0xFX1VOSSB8IE1YQ19FSENJX0lOVEVSTkFMX1BIWSB8Ci0JCSAgTVhDX0VIQ0lfSVBQVUVfRE9XTiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZnNsX3VzYjJfcGxhdGZvcm1fZGF0YSBvdGdfZGV2aWNlX3BkYXRhID0gewotCS5vcGVyYXRpbmdfbW9kZSA9IEZTTF9VU0IyX0RSX0RFVklDRSwKLQkucGh5X21vZGUgICAgICAgPSBGU0xfVVNCMl9QSFlfVVRNSSwKLX07Ci0KLXN0YXRpYyBpbnQgb3RnX21vZGVfaG9zdDsKLQotc3RhdGljIGludCBfX2luaXQgZXVrcmVhX2NwdWlteDI1X290Z19tb2RlKGNoYXIgKm9wdGlvbnMpCi17Ci0JaWYgKCFzdHJjbXAob3B0aW9ucywgImhvc3QiKSkKLQkJb3RnX21vZGVfaG9zdCA9IDE7Ci0JZWxzZSBpZiAoIXN0cmNtcChvcHRpb25zLCAiZGV2aWNlIikpCi0JCW90Z19tb2RlX2hvc3QgPSAwOwotCWVsc2UKLQkJcHJfaW5mbygib3RnX21vZGUgbmVpdGhlciBcImhvc3RcIiBub3IgXCJkZXZpY2VcIi4gIgotCQkJIkRlZmF1bHRpbmcgdG8gZGV2aWNlXG4iKTsKLQlyZXR1cm4gMDsKLX0KLV9fc2V0dXAoIm90Z19tb2RlPSIsIGV1a3JlYV9jcHVpbXgyNV9vdGdfbW9kZSk7Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBldWtyZWFfY3B1aW14MjVfaW5pdCh2b2lkKQotewotCWlmIChteGNfaW9tdXhfdjNfc2V0dXBfbXVsdGlwbGVfcGFkcyhldWtyZWFfY3B1aW14MjVfcGFkcywKLQkJCUFSUkFZX1NJWkUoZXVrcmVhX2NwdWlteDI1X3BhZHMpKSkKLQkJcHJpbnRrKEtFUk5fRVJSICJlcnJvciBzZXR0aW5nIGNwdWlteDI1IHBhZHMgIVxuIik7Ci0KLQlpbXgyNV9hZGRfaW14X3VhcnQwKCZ1YXJ0X3BkYXRhKTsKLQlpbXgyNV9hZGRfbXhjX25hbmQoJmV1a3JlYV9jcHVpbXgyNV9uYW5kX2JvYXJkX2luZm8pOwotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14MjVfcnRjX2RldmljZSwgTlVMTCk7Ci0JaW14MjVfYWRkX2ZlYygmbXgyNV9mZWNfcGRhdGEpOwotCi0JaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgZXVrcmVhX2NwdWlteDI1X2kyY19kZXZpY2VzLAotCQkJCUFSUkFZX1NJWkUoZXVrcmVhX2NwdWlteDI1X2kyY19kZXZpY2VzKSk7Ci0JaW14MjVfYWRkX2lteF9pMmMwKCZldWtyZWFfY3B1aW14MjVfaTJjMF9kYXRhKTsKLQotCWlmIChvdGdfbW9kZV9ob3N0KQotCQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfb3RnLCAmb3RnX3BkYXRhKTsKLQllbHNlCi0JCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm90Z191ZGNfZGV2aWNlLCAmb3RnX2RldmljZV9wZGF0YSk7Ci0KLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdXNiaDIsICZ1c2JoMl9wZGF0YSk7Ci0KLSNpZmRlZiBDT05GSUdfTUFDSF9FVUtSRUFfTUJJTVhTRDI1X0JBU0VCT0FSRAotCWV1a3JlYV9tYmlteHNkMjVfYmFzZWJvYXJkX2luaXQoKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgZXVrcmVhX2NwdWlteDI1X3RpbWVyX2luaXQodm9pZCkKLXsKLQlteDI1X2Nsb2Nrc19pbml0KCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc3lzX3RpbWVyIGV1a3JlYV9jcHVpbXgyNV90aW1lciA9IHsKLQkuaW5pdCAgID0gZXVrcmVhX2NwdWlteDI1X3RpbWVyX2luaXQsCi19OwotCi1NQUNISU5FX1NUQVJUKEVVS1JFQV9DUFVJTVgyNSwgIkV1a3JlYSBDUFVJTVgyNSIpCi0JLyogTWFpbnRhaW5lcjogRXVrcmVhIEVsZWN0cm9tYXRpcXVlICovCi0JLmJvb3RfcGFyYW1zICAgID0gTVgyNV9QSFlTX09GRlNFVCArIDB4MTAwLAotCS5tYXBfaW8gICAgICAgICA9IG14MjVfbWFwX2lvLAotCS5pbml0X2lycSAgICAgICA9IG14MjVfaW5pdF9pcnEsCi0JLmluaXRfbWFjaGluZSAgID0gZXVrcmVhX2NwdWlteDI1X2luaXQsCi0JLnRpbWVyICAgICAgICAgID0gJmV1a3JlYV9jcHVpbXgyNV90aW1lciwKLU1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14MjUvbWFjaC1teDI1XzNkcy5jIGIvYXJjaC9hcm0vbWFjaC1teDI1L21hY2gtbXgyNV8zZHMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjhiZTFlYi4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLW14MjUvbWFjaC1teDI1XzNkcy5jCisrKyAvZGV2L251bGwKQEAgLTEsMjI1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAwOSBTYXNjaGEgSGF1ZXIsIDxrZXJuZWxAcGVuZ3V0cm9uaXguZGU+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCi0gKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qCi0gKiBUaGlzIG1hY2hpbmUgaXMga25vd24gYXM6Ci0gKiAgLSBpLk1YMjUgMy1TdGFjayBEZXZlbG9wbWVudCBTeXN0ZW0KLSAqICAtIGkuTVgyNSBQbGF0Zm9ybSBEZXZlbG9wbWVudCBLaXQgKGkuTVgyNSBQREspCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvY2xrLmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2lucHV0L21hdHJpeF9rZXlwYWQuaD4KLQotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+Ci0jaW5jbHVkZSA8YXNtL21lbW9yeS5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+Ci0jaW5jbHVkZSA8bWFjaC9teDI1Lmg+Ci0jaW5jbHVkZSA8bWFjaC9pbXhmYi5oPgotI2luY2x1ZGUgPG1hY2gvaW9tdXgtbXgyNS5oPgotCi0jaW5jbHVkZSAiZGV2aWNlcy1pbXgyNS5oIgotI2luY2x1ZGUgImRldmljZXMuaCIKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBpbXh1YXJ0X3BsYXRmb3JtX2RhdGEgdWFydF9wZGF0YSBfX2luaXRjb25zdCA9IHsKLQkuZmxhZ3MgPSBJTVhVQVJUX0hBVkVfUlRTQ1RTLAotfTsKLQotc3RhdGljIHN0cnVjdCBwYWRfZGVzYyBteDI1cGRrX3BhZHNbXSA9IHsKLQlNWDI1X1BBRF9GRUNfTURDX19GRUNfTURDLAotCU1YMjVfUEFEX0ZFQ19NRElPX19GRUNfTURJTywKLQlNWDI1X1BBRF9GRUNfVERBVEEwX19GRUNfVERBVEEwLAotCU1YMjVfUEFEX0ZFQ19UREFUQTFfX0ZFQ19UREFUQTEsCi0JTVgyNV9QQURfRkVDX1RYX0VOX19GRUNfVFhfRU4sCi0JTVgyNV9QQURfRkVDX1JEQVRBMF9fRkVDX1JEQVRBMCwKLQlNWDI1X1BBRF9GRUNfUkRBVEExX19GRUNfUkRBVEExLAotCU1YMjVfUEFEX0ZFQ19SWF9EVl9fRkVDX1JYX0RWLAotCU1YMjVfUEFEX0ZFQ19UWF9DTEtfX0ZFQ19UWF9DTEssCi0JTVgyNV9QQURfQTE3X19HUElPXzJfMywgLyogRkVDX0VOLCBHUElPIDM1ICovCi0JTVgyNV9QQURfRDEyX19HUElPXzRfOCwgLyogRkVDX1JFU0VUX0IsIEdQSU8gMTA0ICovCi0KLQkvKiBMQ0QgKi8KLQlNWDI1X1BBRF9MRDBfX0xEMCwKLQlNWDI1X1BBRF9MRDFfX0xEMSwKLQlNWDI1X1BBRF9MRDJfX0xEMiwKLQlNWDI1X1BBRF9MRDNfX0xEMywKLQlNWDI1X1BBRF9MRDRfX0xENCwKLQlNWDI1X1BBRF9MRDVfX0xENSwKLQlNWDI1X1BBRF9MRDZfX0xENiwKLQlNWDI1X1BBRF9MRDdfX0xENywKLQlNWDI1X1BBRF9MRDhfX0xEOCwKLQlNWDI1X1BBRF9MRDlfX0xEOSwKLQlNWDI1X1BBRF9MRDEwX19MRDEwLAotCU1YMjVfUEFEX0xEMTFfX0xEMTEsCi0JTVgyNV9QQURfTEQxMl9fTEQxMiwKLQlNWDI1X1BBRF9MRDEzX19MRDEzLAotCU1YMjVfUEFEX0xEMTRfX0xEMTQsCi0JTVgyNV9QQURfTEQxNV9fTEQxNSwKLQlNWDI1X1BBRF9HUElPX0VfX0xEMTYsCi0JTVgyNV9QQURfR1BJT19GX19MRDE3LAotCU1YMjVfUEFEX0hTWU5DX19IU1lOQywKLQlNWDI1X1BBRF9WU1lOQ19fVlNZTkMsCi0JTVgyNV9QQURfTFNDTEtfX0xTQ0xLLAotCU1YMjVfUEFEX09FX0FDRF9fT0VfQUNELAotCU1YMjVfUEFEX0NPTlRSQVNUX19DT05UUkFTVCwKLQotCS8qIEtleXBhZCAqLwotCU1YMjVfUEFEX0tQUF9ST1cwX19LUFBfUk9XMCwKLQlNWDI1X1BBRF9LUFBfUk9XMV9fS1BQX1JPVzEsCi0JTVgyNV9QQURfS1BQX1JPVzJfX0tQUF9ST1cyLAotCU1YMjVfUEFEX0tQUF9ST1czX19LUFBfUk9XMywKLQlNWDI1X1BBRF9LUFBfQ09MMF9fS1BQX0NPTDAsCi0JTVgyNV9QQURfS1BQX0NPTDFfX0tQUF9DT0wxLAotCU1YMjVfUEFEX0tQUF9DT0wyX19LUFBfQ09MMiwKLQlNWDI1X1BBRF9LUFBfQ09MM19fS1BQX0NPTDMsCi0KLQkvKiBTRDEgKi8KLQlNWDI1X1BBRF9TRDFfQ01EX19TRDFfQ01ELAotCU1YMjVfUEFEX1NEMV9DTEtfX1NEMV9DTEssCi0JTVgyNV9QQURfU0QxX0RBVEEwX19TRDFfREFUQTAsCi0JTVgyNV9QQURfU0QxX0RBVEExX19TRDFfREFUQTEsCi0JTVgyNV9QQURfU0QxX0RBVEEyX19TRDFfREFUQTIsCi0JTVgyNV9QQURfU0QxX0RBVEEzX19TRDFfREFUQTMsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZlY19wbGF0Zm9ybV9kYXRhIG14MjVfZmVjX3BkYXRhIF9faW5pdGNvbnN0ID0gewotICAgICAgICAucGh5ICAgID0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUksCi19OwotCi0jZGVmaW5lIEZFQ19FTkFCTEVfR1BJTwkJMzUKLSNkZWZpbmUgRkVDX1JFU0VUX0JfR1BJTwkxMDQKLQotc3RhdGljIHZvaWQgX19pbml0IG14MjVwZGtfZmVjX3Jlc2V0KHZvaWQpCi17Ci0JZ3Bpb19yZXF1ZXN0KEZFQ19FTkFCTEVfR1BJTywgIkZFQyBQSFkgZW5hYmxlIik7Ci0JZ3Bpb19yZXF1ZXN0KEZFQ19SRVNFVF9CX0dQSU8sICJGRUMgUEhZIHJlc2V0Iik7Ci0KLQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoRkVDX0VOQUJMRV9HUElPLCAwKTsgIC8qIGRyb3AgUEhZIHBvd2VyICovCi0JZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEZFQ19SRVNFVF9CX0dQSU8sIDApOyAvKiBhc3NlcnQgcmVzZXQgKi8KLQl1ZGVsYXkoMik7Ci0KLQkvKiB0dXJuIG9uIFBIWSBwb3dlciBhbmQgbGlmdCByZXNldCAqLwotCWdwaW9fc2V0X3ZhbHVlKEZFQ19FTkFCTEVfR1BJTywgMSk7Ci0JZ3Bpb19zZXRfdmFsdWUoRkVDX1JFU0VUX0JfR1BJTywgMSk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbXhjX25hbmRfcGxhdGZvcm1fZGF0YQotbXgyNXBka19uYW5kX2JvYXJkX2luZm8gX19pbml0Y29uc3QgPSB7Ci0JLndpZHRoCQk9IDEsCi0JLmh3X2VjYwkJPSAxLAotCS5mbGFzaF9iYnQJPSAxLAotfTsKLQotc3RhdGljIHN0cnVjdCBpbXhfZmJfdmlkZW9tb2RlIG14MjVwZGtfbW9kZXNbXSA9IHsKLQl7Ci0JCS5tb2RlCT0gewotCQkJLm5hbWUJCT0gIkNSVC1WR0EiLAotCQkJLnJlZnJlc2gJPSA2MCwKLQkJCS54cmVzCQk9IDY0MCwKLQkJCS55cmVzCQk9IDQ4MCwKLQkJCS5waXhjbG9jawk9IDM5NjgzLAotCQkJLmxlZnRfbWFyZ2luCT0gNDUsCi0JCQkucmlnaHRfbWFyZ2luCT0gMTE0LAotCQkJLnVwcGVyX21hcmdpbgk9IDMzLAotCQkJLmxvd2VyX21hcmdpbgk9IDExLAotCQkJLmhzeW5jX2xlbgk9IDEsCi0JCQkudnN5bmNfbGVuCT0gMSwKLQkJfSwKLQkJLmJwcAk9IDE2LAotCQkucGNyCT0gMHhGQTIwOEI4MCwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBpbXhfZmJfcGxhdGZvcm1fZGF0YSBteDI1cGRrX2ZiX3BkYXRhID0gewotCS5tb2RlCQk9IG14MjVwZGtfbW9kZXMsCi0JLm51bV9tb2Rlcwk9IEFSUkFZX1NJWkUobXgyNXBka19tb2RlcyksCi0JLnB3bXIJCT0gMHgwMEE5MDNGRiwKLQkubHNjcjEJCT0gMHgwMDEyMDMwMCwKLQkuZG1hY3IJCT0gMHgwMDAyMDAxMCwKLX07Ci0KLXN0YXRpYyBjb25zdCB1aW50MzJfdCBteDI1cGRrX2tleW1hcFtdID0gewotCUtFWSgwLCAwLCBLRVlfVVApLAotCUtFWSgwLCAxLCBLRVlfRE9XTiksCi0JS0VZKDAsIDIsIEtFWV9WT0xVTUVET1dOKSwKLQlLRVkoMCwgMywgS0VZX0hPTUUpLAotCUtFWSgxLCAwLCBLRVlfUklHSFQpLAotCUtFWSgxLCAxLCBLRVlfTEVGVCksCi0JS0VZKDEsIDIsIEtFWV9FTlRFUiksCi0JS0VZKDEsIDMsIEtFWV9WT0xVTUVVUCksCi0JS0VZKDIsIDAsIEtFWV9GNiksCi0JS0VZKDIsIDEsIEtFWV9GOCksCi0JS0VZKDIsIDIsIEtFWV9GOSksCi0JS0VZKDIsIDMsIEtFWV9GMTApLAotCUtFWSgzLCAwLCBLRVlfRjEpLAotCUtFWSgzLCAxLCBLRVlfRjIpLAotCUtFWSgzLCAyLCBLRVlfRjMpLAotCUtFWSgzLCAzLCBLRVlfUE9XRVIpLAotfTsKLQotc3RhdGljIHN0cnVjdCBtYXRyaXhfa2V5bWFwX2RhdGEgbXgyNXBka19rZXltYXBfZGF0YSA9IHsKLQkua2V5bWFwCQk9IG14MjVwZGtfa2V5bWFwLAotCS5rZXltYXBfc2l6ZQk9IEFSUkFZX1NJWkUobXgyNXBka19rZXltYXApLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IG14MjVwZGtfaW5pdCh2b2lkKQotewotCW14Y19pb211eF92M19zZXR1cF9tdWx0aXBsZV9wYWRzKG14MjVwZGtfcGFkcywKLQkJCUFSUkFZX1NJWkUobXgyNXBka19wYWRzKSk7Ci0KLQlpbXgyNV9hZGRfaW14X3VhcnQwKCZ1YXJ0X3BkYXRhKTsKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdXNiaDIsIE5VTEwpOwotCWlteDI1X2FkZF9teGNfbmFuZCgmbXgyNXBka19uYW5kX2JvYXJkX2luZm8pOwotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14MjVfcnRjX2RldmljZSwgTlVMTCk7Ci0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXgyNV9mYl9kZXZpY2UsICZteDI1cGRrX2ZiX3BkYXRhKTsKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfd2R0LCBOVUxMKTsKLQotCW14MjVwZGtfZmVjX3Jlc2V0KCk7Ci0JaW14MjVfYWRkX2ZlYygmbXgyNV9mZWNfcGRhdGEpOwotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14MjVfa3BwX2RldmljZSwgJm14MjVwZGtfa2V5bWFwX2RhdGEpOwotCi0JaW14MjVfYWRkX2VzZGhjKDAsIE5VTEwpOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgbXgyNXBka190aW1lcl9pbml0KHZvaWQpCi17Ci0JbXgyNV9jbG9ja3NfaW5pdCgpOwotfQotCi1zdGF0aWMgc3RydWN0IHN5c190aW1lciBteDI1cGRrX3RpbWVyID0gewotCS5pbml0ICAgPSBteDI1cGRrX3RpbWVyX2luaXQsCi19OwotCi1NQUNISU5FX1NUQVJUKE1YMjVfM0RTLCAiRnJlZXNjYWxlIE1YMjVQREsgKDNEUykiKQotCS8qIE1haW50YWluZXI6IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuICovCi0JLmJvb3RfcGFyYW1zICAgID0gTVgyNV9QSFlTX09GRlNFVCArIDB4MTAwLAotCS5tYXBfaW8gICAgICAgICA9IG14MjVfbWFwX2lvLAotCS5pbml0X2lycSAgICAgICA9IG14MjVfaW5pdF9pcnEsCi0JLmluaXRfbWFjaGluZSAgID0gbXgyNXBka19pbml0LAotCS50aW1lciAgICAgICAgICA9ICZteDI1cGRrX3RpbWVyLAotTUFDSElORV9FTkQKLQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDI1L21tLmMgYi9hcmNoL2FybS9tYWNoLW14MjUvbW0uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmI2NzcxMS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLW14MjUvbW0uYworKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgQXJtIExpbWl0ZWQKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDAgRGVlcCBCbHVlIFNvbHV0aW9ucyBMdGQKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDIgU2hhbmUgTmF5IChzaGFuZUBtaW5pcmwuY29tKQotICogIENvcHlyaWdodCAyMDA1LTIwMDcgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqICAgIC0gYWRkIE1YMzEgc3BlY2lmaWMgZGVmaW5pdGlvbnMKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgotCi0jaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLQotI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvbXgyNS5oPgotI2luY2x1ZGUgPG1hY2gvaW9tdXgtdjMuaD4KLQotLyoKLSAqIFRoaXMgdGFibGUgZGVmaW5lcyBzdGF0aWMgdmlydHVhbCBhZGRyZXNzIG1hcHBpbmdzIGZvciBJL08gcmVnaW9ucy4KLSAqIFRoZXNlIGFyZSB0aGUgbWFwcGluZ3MgY29tbW9uIGFjcm9zcyBhbGwgTVgzIGJvYXJkcy4KLSAqLwotc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBteGNfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7Ci0JewotCQkudmlydHVhbAk9IE1YMjVfQVZJQ19CQVNFX0FERFJfVklSVCwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKE1YMjVfQVZJQ19CQVNFX0FERFIpLAotCQkubGVuZ3RoCQk9IE1YMjVfQVZJQ19TSVpFLAotCQkudHlwZQkJPSBNVF9ERVZJQ0VfTk9OU0hBUkVECi0JfSwgewotCQkudmlydHVhbAk9IE1YMjVfQUlQUzFfQkFTRV9BRERSX1ZJUlQsCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbihNWDI1X0FJUFMxX0JBU0VfQUREUiksCi0JCS5sZW5ndGgJCT0gTVgyNV9BSVBTMV9TSVpFLAotCQkudHlwZQkJPSBNVF9ERVZJQ0VfTk9OU0hBUkVECi0JfSwgewotCQkudmlydHVhbAk9IE1YMjVfQUlQUzJfQkFTRV9BRERSX1ZJUlQsCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbihNWDI1X0FJUFMyX0JBU0VfQUREUiksCi0JCS5sZW5ndGgJCT0gTVgyNV9BSVBTMl9TSVpFLAotCQkudHlwZQkJPSBNVF9ERVZJQ0VfTk9OU0hBUkVECi0JfSwKLX07Ci0KLS8qCi0gKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBtZW1vcnkgbWFwLiBJdCBpcyBjYWxsZWQgZHVyaW5nIHRoZQotICogc3lzdGVtIHN0YXJ0dXAgdG8gY3JlYXRlIHN0YXRpYyBwaHlzaWNhbCB0byB2aXJ0dWFsIG1lbW9yeSBtYXBwaW5ncwotICogZm9yIHRoZSBJTyBtb2R1bGVzLgotICovCi12b2lkIF9faW5pdCBteDI1X21hcF9pbyh2b2lkKQotewotCW14Y19zZXRfY3B1X3R5cGUoTVhDX0NQVV9NWDI1KTsKLQlteGNfaW9tdXhfdjNfaW5pdChNWDI1X0lPX0FERFJFU1MoTVgyNV9JT01VWENfQkFTRV9BRERSKSk7Ci0JbXhjX2FyY2hfcmVzZXRfaW5pdChNWDI1X0lPX0FERFJFU1MoTVgyNV9XRE9HX0JBU0VfQUREUikpOwotCi0JaW90YWJsZV9pbml0KG14Y19pb19kZXNjLCBBUlJBWV9TSVpFKG14Y19pb19kZXNjKSk7Ci19Ci0KLWludCBpbXgyNV9yZWdpc3Rlcl9ncGlvcyh2b2lkKTsKLQotdm9pZCBfX2luaXQgbXgyNV9pbml0X2lycSh2b2lkKQotewotCW14Y19pbml0X2lycSgodm9pZCBfX2lvbWVtICopTVgyNV9BVklDX0JBU0VfQUREUl9WSVJUKTsKLQlpbXgyNV9yZWdpc3Rlcl9ncGlvcygpOwotfQotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1teDMvS2NvbmZpZwppbmRleCA1MDAwYWMxLi4wNzE3Zjg4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL0tjb25maWcKQEAgLTEsMjEgKzEsMzUgQEAKIGlmIEFSQ0hfTVgzCiAKKyMgQVJDSF9NWDMxIGFuZCBBUkNIX01YMzUgYXJlIGxlZnQgZm9yIGNvbXBhdGliaWxpdHkKKyMgU29tZSB1c2FnZXMgYXNzdW1lIHRoYXQgaGF2aW5nIG9uZSBvZiB0aGVtIGltcGxpZXMgbm90IGhhdmluZyAoZS5nLikgQVJDSF9NWDIuCisjIFRvIGVhc2lseSBkaXN0aW5ndWlzaCBnb29kIGFuZCByZXZpZXdlZCBmcm9tIHVucmV2aWV3ZWQgdXNhZ2VzIG5ldyAoYW5kIElNSE8KKyMgbW9yZSBzZW5zaWJsZSkgbmFtZXMgYXJlIHVzZWQ6IFNPQ19JTVgzMSBhbmQgU09DX0lNWDM1CiBjb25maWcgQVJDSF9NWDMxCi0Jc2VsZWN0IEFSQ0hfSEFTX1JOR0EKLQlzZWxlY3QgQVJDSF9NWENfQVVETVVYX1YyCiAJYm9vbAogCiBjb25maWcgQVJDSF9NWDM1CiAJYm9vbAorCitjb25maWcgU09DX0lNWDMxCisJYm9vbAorCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9NWENfUk5HQQorCXNlbGVjdCBBUkNIX01YQ19BVURNVVhfVjIKKwlzZWxlY3QgQVJDSF9NWDMxCisJc2VsZWN0IE1YQ19BVklDCisKK2NvbmZpZyBTT0NfSU1YMzUKKwlib29sCiAJc2VsZWN0IEFSQ0hfTVhDX0lPTVVYX1YzCiAJc2VsZWN0IEFSQ0hfTVhDX0FVRE1VWF9WMgogCXNlbGVjdCBIQVZFX0VQSVQKKwlzZWxlY3QgQVJDSF9NWDM1CisJc2VsZWN0IE1YQ19BVklDCiAKIGNvbW1lbnQgIk1YMyBwbGF0Zm9ybXM6IgogCiBjb25maWcgTUFDSF9NWDMxQURTCiAJYm9vbCAiU3VwcG9ydCBNWDMxQURTIHBsYXRmb3JtcyIKLQlzZWxlY3QgQVJDSF9NWDMxCisJc2VsZWN0IFNPQ19JTVgzMQogCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9JTVhfSTJDCiAJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0lNWF9TU0kKIAlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fSU1YX1VBUlQKQEAgLTM3LDEwICs1MSwxNSBAQAogCiBjb25maWcgTUFDSF9QQ00wMzcKIAlib29sICJTdXBwb3J0IFBoeXRlYyBwY20wMzcgKGkuTVgzMSkgcGxhdGZvcm1zIgotCXNlbGVjdCBBUkNIX01YMzEKKwlzZWxlY3QgU09DX0lNWDMxCisJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0ZTTF9VU0IyX1VEQworCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9JTVgyX1dEVAogCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9JTVhfSTJDCiAJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0lNWF9VQVJUCisJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX01YQ19FSENJCisJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX01YQ19NTUMKIAlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fTVhDX05BTkQKKwlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fTVhDX1cxCiAJc2VsZWN0IE1YQ19VTFBJIGlmIFVTQl9VTFBJCiAJaGVscAogCSAgSW5jbHVkZSBzdXBwb3J0IGZvciBQaHl0ZWMgcGNtMDM3IHBsYXRmb3JtLiBUaGlzIGluY2x1ZGVzCkBAIC01Nyw5ICs3NiwxMiBAQAogCiBjb25maWcgTUFDSF9NWDMxTElURQogCWJvb2wgIlN1cHBvcnQgTVgzMSBMSVRFS0lUIChMb2dpY1BEKSIKLQlzZWxlY3QgQVJDSF9NWDMxCisJc2VsZWN0IFNPQ19JTVgzMQogCXNlbGVjdCBNWENfVUxQSSBpZiBVU0JfVUxQSQorCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9JTVgyX1dEVAogCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9JTVhfVUFSVAorCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9NWENfRUhDSQorCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9NWENfTU1DCiAJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX01YQ19OQU5ECiAJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX1NQSV9JTVgKIAloZWxwCkBAIC02OCwxMSArOTAsMTYgQEAKIAogY29uZmlnIE1BQ0hfTVgzMV8zRFMKIAlib29sICJTdXBwb3J0IE1YMzFQREsgKDNEUykiCi0Jc2VsZWN0IEFSQ0hfTVgzMQorCXNlbGVjdCBTT0NfSU1YMzEKIAlzZWxlY3QgTVhDX0RFQlVHX0JPQVJECisJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0ZTTF9VU0IyX1VEQworCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9JTVgyX1dEVAorCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9JTVhfS0VZUEFECiAJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0lNWF9VQVJUCisJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX01YQ19FSENJCiAJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX01YQ19OQU5ECiAJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX1NQSV9JTVgKKwlzZWxlY3QgTVhDX1VMUEkgaWYgVVNCX1VMUEkKIAloZWxwCiAJICBJbmNsdWRlIHN1cHBvcnQgZm9yIE1YMzFQREsgKDNEUykgcGxhdGZvcm0uIFRoaXMgaW5jbHVkZXMgc3BlY2lmaWMKIAkgIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgYm9hcmQgYW5kIGl0cyBwZXJpcGhlcmFscy4KQEAgLTg4LDkgKzExNSwxMiBAQAogCiBjb25maWcgTUFDSF9NWDMxTU9CT0FSRAogCWJvb2wgIlN1cHBvcnQgbXgzMW1vYm9hcmQgcGxhdGZvcm1zIChFUEZMIE1vYm90cyBncm91cCkiCi0Jc2VsZWN0IEFSQ0hfTVgzMQorCXNlbGVjdCBTT0NfSU1YMzEKKwlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fRlNMX1VTQjJfVURDCiAJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0lNWF9JMkMKIAlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fSU1YX1VBUlQKKwlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fTVhDX0VIQ0kKKwlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fTVhDX01NQwogCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9TUElfSU1YCiAJc2VsZWN0IE1YQ19VTFBJIGlmIFVTQl9VTFBJCiAJaGVscApAQCAtOTksOCArMTI5LDEwIEBACiAKIGNvbmZpZyBNQUNIX01YMzFMSUxMWQogCWJvb2wgIlN1cHBvcnQgTVgzMSBMSUxMWS0xMTMxIHBsYXRmb3JtcyAoSU5DTyBzdGFydGVjKSIKLQlzZWxlY3QgQVJDSF9NWDMxCisJc2VsZWN0IFNPQ19JTVgzMQogCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9JTVhfVUFSVAorCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9NWENfRUhDSQorCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9NWENfTU1DCiAJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX1NQSV9JTVgKIAlzZWxlY3QgTVhDX1VMUEkgaWYgVVNCX1VMUEkKIAloZWxwCkBAIC0xMDksNyArMTQxLDcgQEAKIAogY29uZmlnIE1BQ0hfUU9ORwogCWJvb2wgIlN1cHBvcnQgRGF2ZS9ERU5YIFFvbmdFVkItTElURSBwbGF0Zm9ybSIKLQlzZWxlY3QgQVJDSF9NWDMxCisJc2VsZWN0IFNPQ19JTVgzMQogCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9JTVhfVUFSVAogCWhlbHAKIAkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgRGF2ZS9ERU5YIFFvbmdFVkItTElURSBwbGF0Zm9ybS4gVGhpcyBpbmNsdWRlcwpAQCAtMTE3LDEzICsxNDksMTYgQEAKIAogY29uZmlnIE1BQ0hfUENNMDQzCiAJYm9vbCAiU3VwcG9ydCBQaHl0ZWMgcGNtMDQzIChpLk1YMzUpIHBsYXRmb3JtcyIKLQlzZWxlY3QgQVJDSF9NWDM1CisJc2VsZWN0IFNPQ19JTVgzNQorCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9GTEVYQ0FOCisJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0ZTTF9VU0IyX1VEQworCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9JTVgyX1dEVAogCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9JTVhfSTJDCiAJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0lNWF9TU0kKIAlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fSU1YX1VBUlQKKwlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fTVhDX0VIQ0kKIAlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fTVhDX05BTkQKLQlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fRkxFWENBTgotCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9FU0RIQworCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9TREhDSV9FU0RIQ19JTVgKIAlzZWxlY3QgTVhDX1VMUEkgaWYgVVNCX1VMUEkKIAloZWxwCiAJICBJbmNsdWRlIHN1cHBvcnQgZm9yIFBoeXRlYyBwY20wNDMgcGxhdGZvcm0uIFRoaXMgaW5jbHVkZXMKQEAgLTEzMSw5ICsxNjYsMTEgQEAKIAogY29uZmlnIE1BQ0hfQVJNQURJTExPNVgwCiAJYm9vbCAiU3VwcG9ydCBBdG1hcmsgQXJtYWRpbGxvLTUwMCBEZXZlbG9wbWVudCBCYXNlIEJvYXJkIgotCXNlbGVjdCBBUkNIX01YMzEKKwlzZWxlY3QgU09DX0lNWDMxCiAJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0lNWF9JMkMKIAlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fSU1YX1VBUlQKKwlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fTVhDX0VIQ0kKKwlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fTVhDX01NQwogCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9NWENfTkFORAogCXNlbGVjdCBNWENfVUxQSSBpZiBVU0JfVUxQSQogCWhlbHAKQEAgLTE0MiwxOSArMTc5LDIxIEBACiAKIGNvbmZpZyBNQUNIX01YMzVfM0RTCiAJYm9vbCAiU3VwcG9ydCBNWDM1UERLIHBsYXRmb3JtIgotCXNlbGVjdCBBUkNIX01YMzUKKwlzZWxlY3QgU09DX0lNWDM1CiAJc2VsZWN0IE1YQ19ERUJVR19CT0FSRAorCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9GU0xfVVNCMl9VREMKKwlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fSU1YMl9XRFQKIAlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fSU1YX1VBUlQKKwlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fTVhDX0VIQ0kKIAlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fTVhDX05BTkQKLQlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fRVNESEMKLQlkZWZhdWx0IG4KKwlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fU0RIQ0lfRVNESENfSU1YCiAJaGVscAogCSAgSW5jbHVkZSBzdXBwb3J0IGZvciBNWDM1UERLIHBsYXRmb3JtLiBUaGlzIGluY2x1ZGVzIHNwZWNpZmljCiAJICBjb25maWd1cmF0aW9ucyBmb3IgdGhlIGJvYXJkIGFuZCBpdHMgcGVyaXBoZXJhbHMuCiAKIGNvbmZpZyBNQUNIX0taTV9BUk0xMV8wMQogCWJvb2wgIlN1cHBvcnQgS1pNLUFSTTExLTAxKEt5b3RvIE1pY3JvY29tcHV0ZXIpIgotCXNlbGVjdCBBUkNIX01YMzEKKwlzZWxlY3QgU09DX0lNWDMxCiAJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0lNWF9VQVJUCiAJaGVscAogCSAgSW5jbHVkZSBzdXBwb3J0IGZvciBLWk0tQVJNMTEtMDEuIFRoaXMgaW5jbHVkZXMgc3BlY2lmaWMKQEAgLTE2MiwxMiArMjAxLDE1IEBACiAKIGNvbmZpZyBNQUNIX0VVS1JFQV9DUFVJTVgzNQogCWJvb2wgIlN1cHBvcnQgRXVrcmVhIENQVUlNWDM1IFBsYXRmb3JtIgotCXNlbGVjdCBBUkNIX01YMzUKLQlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fSU1YX1VBUlQKLQlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fSU1YX0kyQwotCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9NWENfTkFORAorCXNlbGVjdCBTT0NfSU1YMzUKIAlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fRkxFWENBTgotCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9FU0RIQworCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9GU0xfVVNCMl9VREMKKwlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fSU1YMl9XRFQKKwlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fSU1YX0kyQworCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9JTVhfVUFSVAorCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9NWENfRUhDSQorCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9NWENfTkFORAorCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9TREhDSV9FU0RIQ19JTVgKIAlzZWxlY3QgTVhDX1VMUEkgaWYgVVNCX1VMUEkKIAloZWxwCiAJICBJbmNsdWRlIHN1cHBvcnQgZm9yIEV1a3JlYSBDUFVJTVgzNSBwbGF0Zm9ybS4gVGhpcyBpbmNsdWRlcwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLW14My9NYWtlZmlsZQppbmRleCA4YTE4MmQwYS4uOGRiMTMyOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvTWFrZWZpbGUKQEAgLTUsMTcgKzUsMTQgQEAKICMgT2JqZWN0IGZpbGUgbGlzdHMuCiAKIG9iai15CQkJCTo9IG1tLm8gZGV2aWNlcy5vIGNwdS5vCi1DRkxBR1NfbW0ubyA9IC1ESU1YX05FRURTX0RFUFJFQ0FURURfU1lNQk9MUwotQ0ZMQUdTX2RldmljZXMubyA9IC1ESU1YX05FRURTX0RFUFJFQ0FURURfU1lNQk9MUwotb2JqLSQoQ09ORklHX0FSQ0hfTVgzMSkJCSs9IGNsb2NrLWlteDMxLm8gaW9tdXgtaW14MzEubwotb2JqLSQoQ09ORklHX0FSQ0hfTVgzNSkJCSs9IGNsb2NrLWlteDM1Lm8KK29iai0kKENPTkZJR19TT0NfSU1YMzEpCQkrPSBjbG9jay1pbXgzMS5vIGlvbXV4LWlteDMxLm8KK29iai0kKENPTkZJR19TT0NfSU1YMzUpCQkrPSBjbG9jay1pbXgzNS5vCiBvYmotJChDT05GSUdfTUFDSF9NWDMxQURTKQkrPSBtYWNoLW14MzFhZHMubwogb2JqLSQoQ09ORklHX01BQ0hfTVgzMUxJTExZKQkrPSBtYWNoLW14MzFsaWxseS5vIG14MzFsaWxseS1kYi5vCiBvYmotJChDT05GSUdfTUFDSF9NWDMxTElURSkJKz0gbWFjaC1teDMxbGl0ZS5vIG14MzFsaXRlLWRiLm8KIG9iai0kKENPTkZJR19NQUNIX1BDTTAzNykJKz0gbWFjaC1wY20wMzcubwogb2JqLSQoQ09ORklHX01BQ0hfUENNMDM3X0VFVCkJKz0gbWFjaC1wY20wMzdfZWV0Lm8KIG9iai0kKENPTkZJR19NQUNIX01YMzFfM0RTKQkrPSBtYWNoLW14MzFfM2RzLm8KLUNGTEFHU19tYWNoLW14MzFfM2RzLm8gPSAtRElNWF9ORUVEU19ERVBSRUNBVEVEX1NZTUJPTFMKIG9iai0kKENPTkZJR19NQUNIX01YMzFNT0JPQVJEKQkrPSBtYWNoLW14MzFtb2JvYXJkLm8gbXgzMW1vYm9hcmQtZGV2Ym9hcmQubyBcCiAJCQkJICAgbXgzMW1vYm9hcmQtbWFyeGJvdC5vIG14MzFtb2JvYXJkLXNtYXJ0Ym90Lm8KIG9iai0kKENPTkZJR19NQUNIX1FPTkcpCQkrPSBtYWNoLXFvbmcubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvY2xvY2staW14MzEuYyBiL2FyY2gvYXJtL21hY2gtbXgzL2Nsb2NrLWlteDMxLmMKaW5kZXggMTA5ZTk4Zi4uZDQyM2NhYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvY2xvY2staW14MzEuYworKysgYi9hcmNoL2FybS9tYWNoLW14My9jbG9jay1pbXgzMS5jCkBAIC0yMyw4ICsyMyw4IEBACiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9jbGtkZXYuaD4KIAotI2luY2x1ZGUgPGFzbS9jbGtkZXYuaD4KICNpbmNsdWRlIDxhc20vZGl2NjQuaD4KIAogI2luY2x1ZGUgPG1hY2gvY2xvY2suaD4KQEAgLTUzMCw3ICs1MzAsNyBAQAogCV9SRUdJU1RFUl9DTE9DSygiaW14MzEtY3NwaS4yIiwgTlVMTCwgY3NwaTNfY2xrKQogCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiZ3B0IiwgZ3B0X2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInB3bSIsIHB3bV9jbGspCi0JX1JFR0lTVEVSX0NMT0NLKCJpbXgtd2R0LjAiLCBOVUxMLCB3ZG9nX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImlteDItd2R0LjAiLCBOVUxMLCB3ZG9nX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInJ0YyIsIHJ0Y19jbGspCiAJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJlcGl0IiwgZXBpdDFfY2xrKQogCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiZXBpdCIsIGVwaXQyX2NsaykKQEAgLTYxNSw3ICs2MTUsNyBAQAogCiAJbXgzMV9yZWFkX2NwdV9yZXYoKTsKIAotCWlmIChteDMxX3JldmlzaW9uKCkgPj0gTVgzMV9DSElQX1JFVl8yXzApIHsKKwlpZiAobXgzMV9yZXZpc2lvbigpID49IElNWF9DSElQX1JFVklTSU9OXzJfMCkgewogCQlyZWcgPSBfX3Jhd19yZWFkbChNWENfQ0NNX1BNQ1IxKTsKIAkJLyogTm8gUExMIHJlc3RhcnQgb24gRFZGUyBzd2l0Y2g7IGVuYWJsZSBhdXRvIEVNSSBoYW5kc2hha2UgKi8KIAkJcmVnIHw9IE1YQ19DQ01fUE1DUjFfUExMUkRJUyB8IE1YQ19DQ01fUE1DUjFfRU1JUlFfRU47CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9jbG9jay1pbXgzNS5jIGIvYXJjaC9hcm0vbWFjaC1teDMvY2xvY2staW14MzUuYwppbmRleCA2MWU0YTMxLi40NDhhMDM4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9jbG9jay1pbXgzNS5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL2Nsb2NrLWlteDM1LmMKQEAgLTIxLDggKzIxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KLQotI2luY2x1ZGUgPGFzbS9jbGtkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGtkZXYuaD4KIAogI2luY2x1ZGUgPG1hY2gvY2xvY2suaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CkBAIC00OTUsNyArNDk0LDcgQEAKIAlfUkVHSVNURVJfQ0xPQ0soIm14Yy1laGNpLjIiLCAidXNiIiwgdXNib3RnX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soImZzbC11c2IyLXVkYyIsICJ1c2IiLCB1c2JvdGdfY2xrKQogCV9SRUdJU1RFUl9DTE9DSygiZnNsLXVzYjItdWRjIiwgInVzYl9haGIiLCB1c2JhaGJfY2xrKQotCV9SRUdJU1RFUl9DTE9DSygiaW14LXdkdC4wIiwgTlVMTCwgd2RvZ19jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgyLXdkdC4wIiwgTlVMTCwgd2RvZ19jbGspCiAJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJtYXgiLCBtYXhfY2xrKQogCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiYXVkbXV4IiwgYXVkbXV4X2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImNzaSIsIGNzaV9jbGspCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9jcHUuYyBiL2FyY2gvYXJtL21hY2gtbXgzL2NwdS5jCmluZGV4IGQwMGE3NTQuLmQxZDMzOTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL2NwdS5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL2NwdS5jCkBAIC0yNSwxNSArMjUsMTUgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbXgzX2NwdV90eXBlIG14MzFfY3B1X3R5cGVbXSBfX2luaXRkYXRhID0gewotCXsgLnNyZXYgPSAweDAwLCAubmFtZSA9ICJpLk1YMzEoTCkiLCAudiA9ICIxLjAiLCAgLnJldiA9IE1YM3hfQ0hJUF9SRVZfMV8wIH0sCi0JeyAuc3JldiA9IDB4MTAsIC5uYW1lID0gImkuTVgzMSIsICAgIC52ID0gIjEuMSIsICAucmV2ID0gTVgzeF9DSElQX1JFVl8xXzEgfSwKLQl7IC5zcmV2ID0gMHgxMSwgLm5hbWUgPSAiaS5NWDMxTCIsICAgLnYgPSAiMS4xIiwgIC5yZXYgPSBNWDN4X0NISVBfUkVWXzFfMSB9LAotCXsgLnNyZXYgPSAweDEyLCAubmFtZSA9ICJpLk1YMzEiLCAgICAudiA9ICIxLjE1IiwgLnJldiA9IE1YM3hfQ0hJUF9SRVZfMV8xIH0sCi0JeyAuc3JldiA9IDB4MTMsIC5uYW1lID0gImkuTVgzMUwiLCAgIC52ID0gIjEuMTUiLCAucmV2ID0gTVgzeF9DSElQX1JFVl8xXzEgfSwKLQl7IC5zcmV2ID0gMHgxNCwgLm5hbWUgPSAiaS5NWDMxIiwgICAgLnYgPSAiMS4yIiwgIC5yZXYgPSBNWDN4X0NISVBfUkVWXzFfMiB9LAotCXsgLnNyZXYgPSAweDE1LCAubmFtZSA9ICJpLk1YMzFMIiwgICAudiA9ICIxLjIiLCAgLnJldiA9IE1YM3hfQ0hJUF9SRVZfMV8yIH0sCi0JeyAuc3JldiA9IDB4MjgsIC5uYW1lID0gImkuTVgzMSIsICAgIC52ID0gIjIuMCIsICAucmV2ID0gTVgzeF9DSElQX1JFVl8yXzAgfSwKLQl7IC5zcmV2ID0gMHgyOSwgLm5hbWUgPSAiaS5NWDMxTCIsICAgLnYgPSAiMi4wIiwgIC5yZXYgPSBNWDN4X0NISVBfUkVWXzJfMCB9LAorCXsgLnNyZXYgPSAweDAwLCAubmFtZSA9ICJpLk1YMzEoTCkiLCAudiA9ICIxLjAiLCAgLnJldiA9IElNWF9DSElQX1JFVklTSU9OXzFfMAl9LAorCXsgLnNyZXYgPSAweDEwLCAubmFtZSA9ICJpLk1YMzEiLCAgICAudiA9ICIxLjEiLCAgLnJldiA9IElNWF9DSElQX1JFVklTSU9OXzFfMQl9LAorCXsgLnNyZXYgPSAweDExLCAubmFtZSA9ICJpLk1YMzFMIiwgICAudiA9ICIxLjEiLCAgLnJldiA9IElNWF9DSElQX1JFVklTSU9OXzFfMQl9LAorCXsgLnNyZXYgPSAweDEyLCAubmFtZSA9ICJpLk1YMzEiLCAgICAudiA9ICIxLjE1IiwgLnJldiA9IElNWF9DSElQX1JFVklTSU9OXzFfMQl9LAorCXsgLnNyZXYgPSAweDEzLCAubmFtZSA9ICJpLk1YMzFMIiwgICAudiA9ICIxLjE1IiwgLnJldiA9IElNWF9DSElQX1JFVklTSU9OXzFfMQl9LAorCXsgLnNyZXYgPSAweDE0LCAubmFtZSA9ICJpLk1YMzEiLCAgICAudiA9ICIxLjIiLCAgLnJldiA9IElNWF9DSElQX1JFVklTSU9OXzFfMgl9LAorCXsgLnNyZXYgPSAweDE1LCAubmFtZSA9ICJpLk1YMzFMIiwgICAudiA9ICIxLjIiLCAgLnJldiA9IElNWF9DSElQX1JFVklTSU9OXzFfMgl9LAorCXsgLnNyZXYgPSAweDI4LCAubmFtZSA9ICJpLk1YMzEiLCAgICAudiA9ICIyLjAiLCAgLnJldiA9IElNWF9DSElQX1JFVklTSU9OXzJfMAl9LAorCXsgLnNyZXYgPSAweDI5LCAubmFtZSA9ICJpLk1YMzFMIiwgICAudiA9ICIyLjAiLCAgLnJldiA9IElNWF9DSElQX1JFVklTSU9OXzJfMAl9LAogfTsKIAogdm9pZCBfX2luaXQgbXgzMV9yZWFkX2NwdV9yZXYodm9pZCkKQEAgLTUzLDYgKzUzLDggQEAKIAkJCXJldHVybjsKIAkJfQogCisJbXgzMV9jcHVfcmV2ID0gSU1YX0NISVBfUkVWSVNJT05fVU5LTk9XTjsKKwogCXByaW50ayhLRVJOX1dBUk5JTkcgIlVua25vd24gQ1BVIGlkZW50aWZpZXIuIHNyZXYgPSAlMDJ4XG4iLCBzcmV2KTsKIH0KIApAQCAtNjIsMjIgKzY0LDI1IEBACiB2b2lkIF9faW5pdCBteDM1X3JlYWRfY3B1X3Jldih2b2lkKQogewogCXUzMiByZXY7Ci0JY2hhciAqc3JldiA9ICJ1bmtub3duIjsKKwljaGFyICpzcmV2OwogCiAJcmV2ID0gX19yYXdfcmVhZGwoTVgzNV9JT19BRERSRVNTKE1YMzVfSUlNX0JBU0VfQUREUiArIE1YQ19JSU1TUkVWKSk7CiAJc3dpdGNoIChyZXYpIHsKIAljYXNlIDB4MDA6Ci0JCW14MzVfY3B1X3JldiA9IE1YM3hfQ0hJUF9SRVZfMV8wOworCQlteDM1X2NwdV9yZXYgPSBJTVhfQ0hJUF9SRVZJU0lPTl8xXzA7CiAJCXNyZXYgPSAiMS4wIjsKIAkJYnJlYWs7CiAJY2FzZSAweDEwOgotCQlteDM1X2NwdV9yZXYgPSBNWDN4X0NISVBfUkVWXzJfMDsKKwkJbXgzNV9jcHVfcmV2ID0gSU1YX0NISVBfUkVWSVNJT05fMl8wOwogCQlzcmV2ID0gIjIuMCI7CiAJCWJyZWFrOwogCWNhc2UgMHgxMToKLQkJbXgzNV9jcHVfcmV2ID0gTVgzeF9DSElQX1JFVl8yXzE7CisJCW14MzVfY3B1X3JldiA9IElNWF9DSElQX1JFVklTSU9OXzJfMTsKIAkJc3JldiA9ICIyLjEiOwogCQlicmVhazsKKwlkZWZhdWx0OgorCQlteDM1X2NwdV9yZXYgPSBJTVhfQ0hJUF9SRVZJU0lPTl9VTktOT1dOOworCQlzcmV2ID0gInVua25vd24iOwogCX0KIAogCXByaW50ayhLRVJOX0lORk8gIkNQVSBpZGVudGlmaWVkIGFzIGkuTVgzNSwgc2lsaWNvbiByZXYgJXNcbiIsIHNyZXYpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvZGV2aWNlcy1pbXgzMS5oIGIvYXJjaC9hcm0vbWFjaC1teDMvZGV2aWNlcy1pbXgzMS5oCmluZGV4IGRlOTU5ODUuLjQwZjRlODQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL2RldmljZXMtaW14MzEuaAorKysgYi9hcmNoL2FybS9tYWNoLW14My9kZXZpY2VzLWlteDMxLmgKQEAgLTksNiArOSwxNCBAQAogI2luY2x1ZGUgPG1hY2gvbXgzMS5oPgogI2luY2x1ZGUgPG1hY2gvZGV2aWNlcy1jb21tb24uaD4KIAorZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbXhfZnNsX3VzYjJfdWRjX2RhdGEgaW14MzFfZnNsX3VzYjJfdWRjX2RhdGEgX19pbml0Y29uc3Q7CisjZGVmaW5lIGlteDMxX2FkZF9mc2xfdXNiMl91ZGMocGRhdGEpCVwKKwlpbXhfYWRkX2ZzbF91c2IyX3VkYygmaW14MzFfZnNsX3VzYjJfdWRjX2RhdGEsIHBkYXRhKQorCitleHRlcm4gY29uc3Qgc3RydWN0IGlteF9pbXgyX3dkdF9kYXRhIGlteDMxX2lteDJfd2R0X2RhdGEgX19pbml0Y29uc3Q7CisjZGVmaW5lIGlteDMxX2FkZF9pbXgyX3dkdChwZGF0YSkgICAgICAgXAorCWlteF9hZGRfaW14Ml93ZHQoJmlteDMxX2lteDJfd2R0X2RhdGEpCisKIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW14X2lteF9pMmNfZGF0YSBpbXgzMV9pbXhfaTJjX2RhdGFbXSBfX2luaXRjb25zdDsKICNkZWZpbmUgaW14MzFfYWRkX2lteF9pMmMoaWQsIHBkYXRhKQlcCiAJaW14X2FkZF9pbXhfaTJjKCZpbXgzMV9pbXhfaTJjX2RhdGFbaWRdLCBwZGF0YSkKQEAgLTE2LDYgKzI0LDEwIEBACiAjZGVmaW5lIGlteDMxX2FkZF9pbXhfaTJjMShwZGF0YSkJaW14MzFfYWRkX2lteF9pMmMoMSwgcGRhdGEpCiAjZGVmaW5lIGlteDMxX2FkZF9pbXhfaTJjMihwZGF0YSkJaW14MzFfYWRkX2lteF9pMmMoMiwgcGRhdGEpCiAKK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW14X2lteF9rZXlwYWRfZGF0YSBpbXgzMV9pbXhfa2V5cGFkX2RhdGEgX19pbml0Y29uc3Q7CisjZGVmaW5lIGlteDMxX2FkZF9pbXhfa2V5cGFkKHBkYXRhKQlcCisJaW14X2FkZF9pbXhfa2V5cGFkKCZpbXgzMV9pbXhfa2V5cGFkX2RhdGEsIHBkYXRhKQorCiBleHRlcm4gY29uc3Qgc3RydWN0IGlteF9pbXhfc3NpX2RhdGEgaW14MzFfaW14X3NzaV9kYXRhW10gX19pbml0Y29uc3Q7CiAjZGVmaW5lIGlteDMxX2FkZF9pbXhfc3NpKGlkLCBwZGF0YSkgICAgXAogCWlteF9hZGRfaW14X3NzaSgmaW14MzFfaW14X3NzaV9kYXRhW2lkXSwgcGRhdGEpCkBAIC0yOSwxMCArNDEsMjUgQEAKICNkZWZpbmUgaW14MzFfYWRkX2lteF91YXJ0MyhwZGF0YSkJaW14MzFfYWRkX2lteF91YXJ0KDMsIHBkYXRhKQogI2RlZmluZSBpbXgzMV9hZGRfaW14X3VhcnQ0KHBkYXRhKQlpbXgzMV9hZGRfaW14X3VhcnQoNCwgcGRhdGEpCiAKK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW14X214Y19laGNpX2RhdGEgaW14MzFfbXhjX2VoY2lfb3RnX2RhdGEgX19pbml0Y29uc3Q7CisjZGVmaW5lIGlteDMxX2FkZF9teGNfZWhjaV9vdGcocGRhdGEpCVwKKwlpbXhfYWRkX214Y19laGNpKCZpbXgzMV9teGNfZWhjaV9vdGdfZGF0YSwgcGRhdGEpCitleHRlcm4gY29uc3Qgc3RydWN0IGlteF9teGNfZWhjaV9kYXRhIGlteDMxX214Y19laGNpX2hzX2RhdGFbXSBfX2luaXRjb25zdDsKKyNkZWZpbmUgaW14MzFfYWRkX214Y19laGNpX2hzKGlkLCBwZGF0YSkJXAorCWlteF9hZGRfbXhjX2VoY2koJmlteDMxX214Y19laGNpX2hzX2RhdGFbaWQgLSAxXSwgcGRhdGEpCisKK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW14X214Y19tbWNfZGF0YSBpbXgzMV9teGNfbW1jX2RhdGFbXSBfX2luaXRjb25zdDsKKyNkZWZpbmUgaW14MzFfYWRkX214Y19tbWMoaWQsIHBkYXRhKQlcCisJaW14X2FkZF9teGNfbW1jKCZpbXgzMV9teGNfbW1jX2RhdGFbaWRdLCBwZGF0YSkKKwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbXhfbXhjX25hbmRfZGF0YSBpbXgzMV9teGNfbmFuZF9kYXRhIF9faW5pdGNvbnN0OwogI2RlZmluZSBpbXgzMV9hZGRfbXhjX25hbmQocGRhdGEpCVwKIAlpbXhfYWRkX214Y19uYW5kKCZpbXgzMV9teGNfbmFuZF9kYXRhLCBwZGF0YSkKIAorZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbXhfbXhjX3cxX2RhdGEgaW14MzFfbXhjX3cxX2RhdGEgX19pbml0Y29uc3Q7CisjZGVmaW5lIGlteDMxX2FkZF9teGNfdzEocGRhdGEpCVwKKwlpbXhfYWRkX214Y193MSgmaW14MzFfbXhjX3cxX2RhdGEpCisKIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW14X3NwaV9pbXhfZGF0YSBpbXgzMV9jc3BpX2RhdGFbXSBfX2luaXRjb25zdDsKICNkZWZpbmUgaW14MzFfYWRkX2NzcGkoaWQsIHBkYXRhKQlcCiAJaW14X2FkZF9zcGlfaW14KCZpbXgzMV9jc3BpX2RhdGFbaWRdLCBwZGF0YSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL2RldmljZXMtaW14MzUuaCBiL2FyY2gvYXJtL21hY2gtbXgzL2RldmljZXMtaW14MzUuaAppbmRleCA1ZWI5MTdiLi42NzdiMThhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9kZXZpY2VzLWlteDM1LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvZGV2aWNlcy1pbXgzNS5oCkBAIC0xMywxMCArMTMsMTkgQEAKICNkZWZpbmUgaW14MzVfYWRkX2ZlYyhwZGF0YSkJXAogCWlteF9hZGRfZmVjKCZpbXgzNV9mZWNfZGF0YSwgcGRhdGEpCiAKLSNkZWZpbmUgaW14MzVfYWRkX2ZsZXhjYW4wKHBkYXRhKQlcCi0JaW14X2FkZF9mbGV4Y2FuKDAsIE1YMzVfQ0FOMV9CQVNFX0FERFIsIFNaXzE2SywgTVgzNV9JTlRfQ0FOMSwgcGRhdGEpCi0jZGVmaW5lIGlteDM1X2FkZF9mbGV4Y2FuMShwZGF0YSkJXAotCWlteF9hZGRfZmxleGNhbigxLCBNWDM1X0NBTjJfQkFTRV9BRERSLCBTWl8xNkssIE1YMzVfSU5UX0NBTjIsIHBkYXRhKQorZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbXhfZnNsX3VzYjJfdWRjX2RhdGEgaW14MzVfZnNsX3VzYjJfdWRjX2RhdGEgX19pbml0Y29uc3Q7CisjZGVmaW5lIGlteDM1X2FkZF9mc2xfdXNiMl91ZGMocGRhdGEpCVwKKwlpbXhfYWRkX2ZzbF91c2IyX3VkYygmaW14MzVfZnNsX3VzYjJfdWRjX2RhdGEsIHBkYXRhKQorCitleHRlcm4gY29uc3Qgc3RydWN0IGlteF9mbGV4Y2FuX2RhdGEgaW14MzVfZmxleGNhbl9kYXRhW10gX19pbml0Y29uc3Q7CisjZGVmaW5lIGlteDM1X2FkZF9mbGV4Y2FuKGlkLCBwZGF0YSkJXAorCWlteF9hZGRfZmxleGNhbigmaW14MzVfZmxleGNhbl9kYXRhW2lkXSwgcGRhdGEpCisjZGVmaW5lIGlteDM1X2FkZF9mbGV4Y2FuMChwZGF0YSkJaW14MzVfYWRkX2ZsZXhjYW4oMCwgcGRhdGEpCisjZGVmaW5lIGlteDM1X2FkZF9mbGV4Y2FuMShwZGF0YSkJaW14MzVfYWRkX2ZsZXhjYW4oMSwgcGRhdGEpCisKK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW14X2lteDJfd2R0X2RhdGEgaW14MzVfaW14Ml93ZHRfZGF0YSBfX2luaXRjb25zdDsKKyNkZWZpbmUgaW14MzVfYWRkX2lteDJfd2R0KHBkYXRhKSAgICAgICBcCisJaW14X2FkZF9pbXgyX3dkdCgmaW14MzVfaW14Ml93ZHRfZGF0YSkKIAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbXhfaW14X2kyY19kYXRhIGlteDM1X2lteF9pMmNfZGF0YVtdIF9faW5pdGNvbnN0OwogI2RlZmluZSBpbXgzNV9hZGRfaW14X2kyYyhpZCwgcGRhdGEpCVwKQEAgLTI1LDYgKzM0LDEwIEBACiAjZGVmaW5lIGlteDM1X2FkZF9pbXhfaTJjMShwZGF0YSkJaW14MzVfYWRkX2lteF9pMmMoMSwgcGRhdGEpCiAjZGVmaW5lIGlteDM1X2FkZF9pbXhfaTJjMihwZGF0YSkJaW14MzVfYWRkX2lteF9pMmMoMiwgcGRhdGEpCiAKK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW14X2lteF9rZXlwYWRfZGF0YSBpbXgzNV9pbXhfa2V5cGFkX2RhdGEgX19pbml0Y29uc3Q7CisjZGVmaW5lIGlteDMxX2FkZF9pbXhfa2V5cGFkKHBkYXRhKQlcCisJaW14X2FkZF9pbXhfa2V5cGFkKCZpbXgzNV9pbXhfa2V5cGFkX2RhdGEsIHBkYXRhKQorCiBleHRlcm4gY29uc3Qgc3RydWN0IGlteF9pbXhfc3NpX2RhdGEgaW14MzVfaW14X3NzaV9kYXRhW10gX19pbml0Y29uc3Q7CiAjZGVmaW5lIGlteDM1X2FkZF9pbXhfc3NpKGlkLCBwZGF0YSkgICAgXAogCWlteF9hZGRfaW14X3NzaSgmaW14MzVfaW14X3NzaV9kYXRhW2lkXSwgcGRhdGEpCkBAIC0zNiwxNiArNDksMjggQEAKICNkZWZpbmUgaW14MzVfYWRkX2lteF91YXJ0MShwZGF0YSkJaW14MzVfYWRkX2lteF91YXJ0KDEsIHBkYXRhKQogI2RlZmluZSBpbXgzNV9hZGRfaW14X3VhcnQyKHBkYXRhKQlpbXgzNV9hZGRfaW14X3VhcnQoMiwgcGRhdGEpCiAKK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW14X214Y19laGNpX2RhdGEgaW14MzVfbXhjX2VoY2lfb3RnX2RhdGEgX19pbml0Y29uc3Q7CisjZGVmaW5lIGlteDM1X2FkZF9teGNfZWhjaV9vdGcocGRhdGEpCVwKKwlpbXhfYWRkX214Y19laGNpKCZpbXgzNV9teGNfZWhjaV9vdGdfZGF0YSwgcGRhdGEpCitleHRlcm4gY29uc3Qgc3RydWN0IGlteF9teGNfZWhjaV9kYXRhIGlteDM1X214Y19laGNpX2hzX2RhdGEgX19pbml0Y29uc3Q7CisjZGVmaW5lIGlteDM1X2FkZF9teGNfZWhjaV9ocyhwZGF0YSkJXAorCWlteF9hZGRfbXhjX2VoY2koJmlteDM1X214Y19laGNpX2hzX2RhdGEsIHBkYXRhKQorCiBleHRlcm4gY29uc3Qgc3RydWN0IGlteF9teGNfbmFuZF9kYXRhIGlteDM1X214Y19uYW5kX2RhdGEgX19pbml0Y29uc3Q7CiAjZGVmaW5lIGlteDM1X2FkZF9teGNfbmFuZChwZGF0YSkJXAogCWlteF9hZGRfbXhjX25hbmQoJmlteDM1X214Y19uYW5kX2RhdGEsIHBkYXRhKQogCitleHRlcm4gY29uc3Qgc3RydWN0IGlteF9teGNfdzFfZGF0YSBpbXgzNV9teGNfdzFfZGF0YSBfX2luaXRjb25zdDsKKyNkZWZpbmUgaW14MzVfYWRkX214Y193MShwZGF0YSkJXAorCWlteF9hZGRfbXhjX3cxKCZpbXgzNV9teGNfdzFfZGF0YSkKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbXhfc2RoY2lfZXNkaGNfaW14X2RhdGEKK2lteDM1X3NkaGNpX2VzZGhjX2lteF9kYXRhW10gX19pbml0Y29uc3Q7CisjZGVmaW5lIGlteDM1X2FkZF9zZGhjaV9lc2RoY19pbXgoaWQsIHBkYXRhKQlcCisJaW14X2FkZF9zZGhjaV9lc2RoY19pbXgoJmlteDM1X3NkaGNpX2VzZGhjX2lteF9kYXRhW2lkXSwgcGRhdGEpCisKIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW14X3NwaV9pbXhfZGF0YSBpbXgzNV9jc3BpX2RhdGFbXSBfX2luaXRjb25zdDsKICNkZWZpbmUgaW14MzVfYWRkX2NzcGkoaWQsIHBkYXRhKQlcCiAJaW14X2FkZF9zcGlfaW14KCZpbXgzNV9jc3BpX2RhdGFbaWRdLCBwZGF0YSkKICNkZWZpbmUgaW14MzVfYWRkX3NwaV9pbXgwKHBkYXRhKQlpbXgzNV9hZGRfY3NwaSgwLCBwZGF0YSkKICNkZWZpbmUgaW14MzVfYWRkX3NwaV9pbXgxKHBkYXRhKQlpbXgzNV9hZGRfY3NwaSgxLCBwZGF0YSkKLQotZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbXhfZXNkaGNfaW14X2RhdGEgaW14MzVfZXNkaGNfZGF0YVtdIF9faW5pdGNvbnN0OwotI2RlZmluZSBpbXgzNV9hZGRfZXNkaGMoaWQsIHBkYXRhKQlcCi0JaW14X2FkZF9lc2RoYygmaW14MzVfZXNkaGNfZGF0YVtpZF0sIHBkYXRhKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1teDMvZGV2aWNlcy5jCmluZGV4IGQ0ZGE5NDkuLmI2NjcyZGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL2RldmljZXMuYworKysgYi9hcmNoL2FybS9tYWNoLW14My9kZXZpY2VzLmMKQEAgLTI5LDEyMCArMjksMjUgQEAKIAogI2luY2x1ZGUgImRldmljZXMuaCIKIAotLyogR1BJTyBwb3J0IGRlc2NyaXB0aW9uICovCi1zdGF0aWMgc3RydWN0IG14Y19ncGlvX3BvcnQgaW14X2dwaW9fcG9ydHNbXSA9IHsKLQl7Ci0JCS5jaGlwLmxhYmVsID0gImdwaW8tMCIsCi0JCS5iYXNlID0gSU9fQUREUkVTUyhHUElPMV9CQVNFX0FERFIpLAotCQkuaXJxID0gTVhDX0lOVF9HUElPMSwKLQkJLnZpcnR1YWxfaXJxX3N0YXJ0ID0gTVhDX0dQSU9fSVJRX1NUQVJULAotCX0sIHsKLQkJLmNoaXAubGFiZWwgPSAiZ3Bpby0xIiwKLQkJLmJhc2UgPSBJT19BRERSRVNTKEdQSU8yX0JBU0VfQUREUiksCi0JCS5pcnEgPSBNWENfSU5UX0dQSU8yLAotCQkudmlydHVhbF9pcnFfc3RhcnQgPSBNWENfR1BJT19JUlFfU1RBUlQgKyAzMiwKLQl9LCB7Ci0JCS5jaGlwLmxhYmVsID0gImdwaW8tMiIsCi0JCS5iYXNlID0gSU9fQUREUkVTUyhHUElPM19CQVNFX0FERFIpLAotCQkuaXJxID0gTVhDX0lOVF9HUElPMywKLQkJLnZpcnR1YWxfaXJxX3N0YXJ0ID0gTVhDX0dQSU9fSVJRX1NUQVJUICsgNjQsCi0JfQotfTsKLQotaW50IF9faW5pdCBpbXgzeF9yZWdpc3Rlcl9ncGlvcyh2b2lkKQotewotCXJldHVybiBteGNfZ3Bpb19pbml0KGlteF9ncGlvX3BvcnRzLCBBUlJBWV9TSVpFKGlteF9ncGlvX3BvcnRzKSk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXhjX3cxX21hc3Rlcl9yZXNvdXJjZXNbXSA9IHsKLQl7Ci0JCS5zdGFydCA9IE9XSVJFX0JBU0VfQUREUiwKLQkJLmVuZCAgID0gT1dJUkVfQkFTRV9BRERSICsgU1pfNEsgLSAxLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLQl9LAotfTsKLQotc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfdzFfbWFzdGVyX2RldmljZSA9IHsKLQkubmFtZSA9ICJteGNfdzEiLAotCS5pZCA9IDAsCi0JLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKG14Y193MV9tYXN0ZXJfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UgPSBteGNfdzFfbWFzdGVyX3Jlc291cmNlcywKLX07Ci0KLSNpZmRlZiBDT05GSUdfQVJDSF9NWDMxCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y3NkaGMwX3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0ID0gTVgzMV9NTUNfU0RIQzFfQkFTRV9BRERSLAotCQkuZW5kID0gTVgzMV9NTUNfU0RIQzFfQkFTRV9BRERSICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwgewotCQkuc3RhcnQgPSBNWDMxX0lOVF9NTUNfU0RIQzEsCi0JCS5lbmQgPSBNWDMxX0lOVF9NTUNfU0RIQzEsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y3NkaGMxX3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0ID0gTVgzMV9NTUNfU0RIQzJfQkFTRV9BRERSLAotCQkuZW5kID0gTVgzMV9NTUNfU0RIQzJfQkFTRV9BRERSICsgU1pfMTZLIC0gMSwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwgewotCQkuc3RhcnQgPSBNWDMxX0lOVF9NTUNfU0RIQzIsCi0JCS5lbmQgPSBNWDMxX0lOVF9NTUNfU0RIQzIsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y3NkaGNfZGV2aWNlMCA9IHsKLQkubmFtZSA9ICJteGMtbW1jIiwKLQkuaWQgPSAwLAotCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNzZGhjMF9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZSA9IG14Y3NkaGMwX3Jlc291cmNlcywKLX07Ci0KLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjc2RoY19kZXZpY2UxID0gewotCS5uYW1lID0gIm14Yy1tbWMiLAotCS5pZCA9IDEsCi0JLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKG14Y3NkaGMxX3Jlc291cmNlcyksCi0JLnJlc291cmNlID0gbXhjc2RoYzFfcmVzb3VyY2VzLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBybmdhX3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0ID0gUk5HQV9CQVNFX0FERFIsCi0JCS5lbmQgPSBSTkdBX0JBU0VfQUREUiArIDB4MjgsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi19OwotCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19ybmdhX2RldmljZSA9IHsKLQkubmFtZSA9ICJteGNfcm5nYSIsCi0JLmlkID0gLTEsCi0JLm51bV9yZXNvdXJjZXMgPSAxLAotCS5yZXNvdXJjZSA9IHJuZ2FfcmVzb3VyY2VzLAotfTsKLSNlbmRpZiAvKiBDT05GSUdfQVJDSF9NWDMxICovCi0KIC8qIGkuTVgzMSBJbWFnZSBQcm9jZXNzaW5nIFVuaXQgKi8KIAogLyogVGhlIHJlc291cmNlIG9yZGVyIGlzIGltcG9ydGFudCEgKi8KIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXgzX2lwdV9yc3JjW10gPSB7CiAJewotCQkuc3RhcnQgPSBJUFVfQ1RSTF9CQVNFX0FERFIsCi0JCS5lbmQgPSBJUFVfQ1RSTF9CQVNFX0FERFIgKyAweDVGLAorCQkuc3RhcnQgPSBNWDN4X0lQVV9DVFJMX0JBU0VfQUREUiwKKwkJLmVuZCA9IE1YM3hfSVBVX0NUUkxfQkFTRV9BRERSICsgMHg1RiwKIAkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCiAJfSwgewotCQkuc3RhcnQgPSBJUFVfQ1RSTF9CQVNFX0FERFIgKyAweDg4LAotCQkuZW5kID0gSVBVX0NUUkxfQkFTRV9BRERSICsgMHhCMywKKwkJLnN0YXJ0ID0gTVgzeF9JUFVfQ1RSTF9CQVNFX0FERFIgKyAweDg4LAorCQkuZW5kID0gTVgzeF9JUFVfQ1RSTF9CQVNFX0FERFIgKyAweEIzLAogCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKIAl9LCB7Ci0JCS5zdGFydCA9IE1YQ19JTlRfSVBVX1NZTiwKLQkJLmVuZCA9IE1YQ19JTlRfSVBVX1NZTiwKKwkJLnN0YXJ0ID0gTVgzeF9JTlRfSVBVX1NZTiwKKwkJLmVuZCA9IE1YM3hfSU5UX0lQVV9TWU4sCiAJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAogCX0sIHsKLQkJLnN0YXJ0ID0gTVhDX0lOVF9JUFVfRVJSLAotCQkuZW5kID0gTVhDX0lOVF9JUFVfRVJSLAorCQkuc3RhcnQgPSBNWDN4X0lOVF9JUFVfRVJSLAorCQkuZW5kID0gTVgzeF9JTlRfSVBVX0VSUiwKIAkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKIH07CkBAIC0xNTYsOCArNjEsOCBAQAogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGZiX3Jlc291cmNlc1tdID0gewogCXsKLQkJLnN0YXJ0CT0gSVBVX0NUUkxfQkFTRV9BRERSICsgMHhCNCwKLQkJLmVuZAk9IElQVV9DVFJMX0JBU0VfQUREUiArIDB4MUJGLAorCQkuc3RhcnQJPSBNWDN4X0lQVV9DVFJMX0JBU0VfQUREUiArIDB4QjQsCisJCS5lbmQJPSBNWDN4X0lQVV9DVFJMX0JBU0VfQUREUiArIDB4MUJGLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKIAl9LAogfTsKQEAgLTE3NCw4ICs3OSw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY2FtZXJhX3Jlc291cmNlc1tdID0gewogCXsKLQkJLnN0YXJ0CT0gSVBVX0NUUkxfQkFTRV9BRERSICsgMHg2MCwKLQkJLmVuZAk9IElQVV9DVFJMX0JBU0VfQUREUiArIDB4ODcsCisJCS5zdGFydAk9IE1YM3hfSVBVX0NUUkxfQkFTRV9BRERSICsgMHg2MCwKKwkJLmVuZAk9IE1YM3hfSVBVX0NUUkxfQkFTRV9BRERSICsgMHg4NywKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKIH07CkBAIC0xOTAsMTEwICs5NSw2IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugb3RnX3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0CT0gTVgzMV9PVEdfQkFTRV9BRERSLAotCQkuZW5kCT0gTVgzMV9PVEdfQkFTRV9BRERSICsgMHgxZmYsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sIHsKLQkJLnN0YXJ0CT0gTVhDX0lOVF9VU0IzLAotCQkuZW5kCT0gTVhDX0lOVF9VU0IzLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHU2NCBvdGdfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci0KLS8qIE9URyBnYWRnZXQgZGV2aWNlICovCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19vdGdfdWRjX2RldmljZSA9IHsKLQkubmFtZQkJPSAiZnNsLXVzYjItdWRjIiwKLQkuaWQJCT0gLTEsCi0JLmRldgkJPSB7Ci0JCS5kbWFfbWFzawkJPSAmb3RnX2RtYW1hc2ssCi0JCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCi0JfSwKLQkucmVzb3VyY2UJPSBvdGdfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShvdGdfcmVzb3VyY2VzKSwKLX07Ci0KLS8qIE9URyBob3N0ICovCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19vdGdfaG9zdCA9IHsKLQkubmFtZSA9ICJteGMtZWhjaSIsCi0JLmlkID0gMCwKLQkuZGV2ID0gewotCQkuY29oZXJlbnRfZG1hX21hc2sgPSAweGZmZmZmZmZmLAotCQkuZG1hX21hc2sgPSAmb3RnX2RtYW1hc2ssCi0JfSwKLQkucmVzb3VyY2UgPSBvdGdfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShvdGdfcmVzb3VyY2VzKSwKLX07Ci0KLS8qIFVTQiBob3N0IDEgKi8KLQotc3RhdGljIHU2NCB1c2JoMV9kbWFtYXNrID0gfih1MzIpMDsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteGNfdXNiaDFfcmVzb3VyY2VzW10gPSB7Ci0JewotCQkuc3RhcnQgPSBNWDMxX09UR19CQVNFX0FERFIgKyAweDIwMCwKLQkJLmVuZCA9IE1YMzFfT1RHX0JBU0VfQUREUiArIDB4M2ZmLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLQl9LCB7Ci0JCS5zdGFydCA9IE1YQ19JTlRfVVNCMSwKLQkJLmVuZCA9IE1YQ19JTlRfVVNCMSwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3VzYmgxID0gewotCS5uYW1lID0gIm14Yy1laGNpIiwKLQkuaWQgPSAxLAotCS5kZXYgPSB7Ci0JCS5jb2hlcmVudF9kbWFfbWFzayA9IDB4ZmZmZmZmZmYsCi0JCS5kbWFfbWFzayA9ICZ1c2JoMV9kbWFtYXNrLAotCX0sCi0JLnJlc291cmNlID0gbXhjX3VzYmgxX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX3VzYmgxX3Jlc291cmNlcyksCi19OwotCi0vKiBVU0IgaG9zdCAyICovCi1zdGF0aWMgdTY0IHVzYmgyX2RtYW1hc2sgPSB+KHUzMikwOwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y191c2JoMl9yZXNvdXJjZXNbXSA9IHsKLQl7Ci0JCS5zdGFydCA9IE1YMzFfT1RHX0JBU0VfQUREUiArIDB4NDAwLAotCQkuZW5kID0gTVgzMV9PVEdfQkFTRV9BRERSICsgMHg1ZmYsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCX0sIHsKLQkJLnN0YXJ0ID0gTVhDX0lOVF9VU0IyLAotCQkuZW5kID0gTVhDX0lOVF9VU0IyLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfdXNiaDIgPSB7Ci0JLm5hbWUgPSAibXhjLWVoY2kiLAotCS5pZCA9IDIsCi0JLmRldiA9IHsKLQkJLmNvaGVyZW50X2RtYV9tYXNrID0gMHhmZmZmZmZmZiwKLQkJLmRtYV9tYXNrID0gJnVzYmgyX2RtYW1hc2ssCi0JfSwKLQkucmVzb3VyY2UgPSBteGNfdXNiaDJfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNfdXNiaDJfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaW14X3dkdF9yZXNvdXJjZXNbXSA9IHsKLQl7Ci0JCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi19OwotCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlteF93ZHRfZGV2aWNlMCA9IHsKLQkubmFtZSAgICAgICAgICAgPSAiaW14Mi13ZHQiLAotCS5pZCAgICAgICAgICAgICA9IDAsCi0JLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRShpbXhfd2R0X3Jlc291cmNlcyksCi0JLnJlc291cmNlICAgICAgID0gaW14X3dkdF9yZXNvdXJjZXMsCi19OwotCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGlteF9ydGNfcmVzb3VyY2VzW10gPSB7CiAJewogCQkuc3RhcnQgID0gTVgzMV9SVENfQkFTRV9BRERSLApAQCAtMzEyLDUxICsxMTMsMyBAQAogCS5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUoaW14X3J0Y19yZXNvdXJjZXMpLAogCS5yZXNvdXJjZSAgICAgICA9IGlteF9ydGNfcmVzb3VyY2VzLAogfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpbXhfa3BwX3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0CT0gTVgzeF9LUFBfQkFTRV9BRERSLAotCQkuZW5kCT0gTVgzeF9LUFBfQkFTRV9BRERSICsgMHhmLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTQotCX0sIHsKLQkJLnN0YXJ0CT0gTVgzeF9JTlRfS1BQLAotCQkuZW5kCT0gTVgzeF9JTlRfS1BQLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbXhfa3BwX2RldmljZSA9IHsKLQkubmFtZSA9ICJpbXgta2V5cGFkIiwKLQkuaWQgPSAtMSwKLQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUoaW14X2twcF9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZSA9IGlteF9rcHBfcmVzb3VyY2VzLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgbXgzX2RldmljZXNfaW5pdCh2b2lkKQotewotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfTVgzMSkKLQlpZiAoY3B1X2lzX214MzEoKSkgewotCQlpbXhfd2R0X3Jlc291cmNlc1swXS5zdGFydCA9IE1YMzFfV0RPR19CQVNFX0FERFI7Ci0JCWlteF93ZHRfcmVzb3VyY2VzWzBdLmVuZCA9IE1YMzFfV0RPR19CQVNFX0FERFIgKyAweDNmZmY7Ci0JCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19ybmdhX2RldmljZSwgTlVMTCk7Ci0JfQotI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9NWDM1KQotCWlmIChjcHVfaXNfbXgzNSgpKSB7Ci0JCW90Z19yZXNvdXJjZXNbMF0uc3RhcnQgPSBNWDM1X09UR19CQVNFX0FERFI7Ci0JCW90Z19yZXNvdXJjZXNbMF0uZW5kID0gTVgzNV9PVEdfQkFTRV9BRERSICsgMHgxZmY7Ci0JCW90Z19yZXNvdXJjZXNbMV0uc3RhcnQgPSBNWENfSU5UX1VTQk9URzsKLQkJb3RnX3Jlc291cmNlc1sxXS5lbmQgPSBNWENfSU5UX1VTQk9URzsKLQkJbXhjX3VzYmgxX3Jlc291cmNlc1swXS5zdGFydCA9IE1YMzVfT1RHX0JBU0VfQUREUiArIDB4NDAwOwotCQlteGNfdXNiaDFfcmVzb3VyY2VzWzBdLmVuZCA9IE1YMzVfT1RHX0JBU0VfQUREUiArIDB4NWZmOwotCQlteGNfdXNiaDFfcmVzb3VyY2VzWzFdLnN0YXJ0ID0gTVhDX0lOVF9VU0JIUzsKLQkJbXhjX3VzYmgxX3Jlc291cmNlc1sxXS5lbmQgPSBNWENfSU5UX1VTQkhTOwotCQlpbXhfd2R0X3Jlc291cmNlc1swXS5zdGFydCA9IE1YMzVfV0RPR19CQVNFX0FERFI7Ci0JCWlteF93ZHRfcmVzb3VyY2VzWzBdLmVuZCA9IE1YMzVfV0RPR19CQVNFX0FERFIgKyAweDNmZmY7Ci0JfQotI2VuZGlmCi0KLQlyZXR1cm4gMDsKLX0KLQotc3Vic3lzX2luaXRjYWxsKG14M19kZXZpY2VzX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvZGV2aWNlcy5oIGIvYXJjaC9hcm0vbWFjaC1teDMvZGV2aWNlcy5oCmluZGV4IDU4NWY4MTQuLjEyMTk2MmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL2RldmljZXMuaAorKysgYi9hcmNoL2FybS9tYWNoLW14My9kZXZpY2VzLmgKQEAgLTEsMTQgKzEsNCBAQAotZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3cxX21hc3Rlcl9kZXZpY2U7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteDNfaXB1OwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXgzX2ZiOwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXgzX2NhbWVyYTsKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y3NkaGNfZGV2aWNlMDsKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y3NkaGNfZGV2aWNlMTsKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19vdGdfdWRjX2RldmljZTsKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19vdGdfaG9zdDsKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y191c2JoMTsKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y191c2JoMjsKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19ybmdhX2RldmljZTsKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlteF93ZHRfZGV2aWNlMDsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlteF9ydGNfZGV2aWNlMDsKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlteF9rcHBfZGV2aWNlOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvZXVrcmVhX21iaW14c2QtYmFzZWJvYXJkLmMgYi9hcmNoL2FybS9tYWNoLW14My9ldWtyZWFfbWJpbXhzZC1iYXNlYm9hcmQuYwppbmRleCAxYWJjMTBkLi4xNGE1ZmZjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9ldWtyZWFfbWJpbXhzZC1iYXNlYm9hcmQuYworKysgYi9hcmNoL2FybS9tYWNoLW14My9ldWtyZWFfbWJpbXhzZC1iYXNlYm9hcmQuYwpAQCAtMTExLDcgKzExMSw3IEBACiAJLm51bV9tb2Rlcwk9IEFSUkFZX1NJWkUoZmJfbW9kZWRiKSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGFkX2Rlc2MgZXVrcmVhX21iaW14c2RfcGFkc1tdID0geworc3RhdGljIGlvbXV4X3YzX2NmZ190IGV1a3JlYV9tYmlteHNkX3BhZHNbXSA9IHsKIAkvKiBMQ0QgKi8KIAlNWDM1X1BBRF9MRDBfX0lQVV9ESVNQQl9EQVRfMCwKIAlNWDM1X1BBRF9MRDFfX0lQVV9ESVNQQl9EQVRfMSwKQEAgLTI4OSw3ICsyODksNyBAQAogCWlteDM1X2FkZF9pbXhfc3NpKDAsICZldWtyZWFfbWJpbXhzZF9zc2lfcGRhdGEpOwogCiAJaW14MzVfYWRkX2ZsZXhjYW4xKE5VTEwpOwotCWlteDM1X2FkZF9lc2RoYygwLCBOVUxMKTsKKwlpbXgzNV9hZGRfc2RoY2lfZXNkaGNfaW14KDAsIE5VTEwpOwogCiAJZ3Bpb19yZXF1ZXN0KEdQSU9fTEVEMSwgIkxFRDEiKTsKIAlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19MRUQxLCAxKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtYXJtYWRpbGxvNXgwLmMgYi9hcmNoL2FybS9tYWNoLW14My9tYWNoLWFybWFkaWxsbzV4MC5jCmluZGV4IGFhYTMwZmUuLjI4YjZmNDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtYXJtYWRpbGxvNXgwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC1hcm1hZGlsbG81eDAuYwpAQCAtNDksMTAgKzQ5LDggQEAKIAogI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CiAjaW5jbHVkZSA8bWFjaC9pb211eC1teDMuaD4KLSNpbmNsdWRlIDxtYWNoL21tYy5oPgogI2luY2x1ZGUgPG1hY2gvaXB1Lmg+CiAjaW5jbHVkZSA8bWFjaC9teDNmYi5oPgotI2luY2x1ZGUgPG1hY2gvbXhjX2VoY2kuaD4KICNpbmNsdWRlIDxtYWNoL3VscGkuaD4KIAogI2luY2x1ZGUgImRldmljZXMtaW14MzEuaCIKQEAgLTI0NSwxMyArMjQzLDEzIEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHN0cnVjdCBteGNfdXNiaF9wbGF0Zm9ybV9kYXRhIHVzYm90Z19wZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgbXhjX3VzYmhfcGxhdGZvcm1fZGF0YSB1c2JvdGdfcGRhdGEgX19pbml0ZGF0YSA9IHsKIAkuaW5pdAk9IHVzYm90Z19pbml0LAogCS5wb3J0c2MJPSBNWENfRUhDSV9NT0RFX1VMUEkgfCBNWENfRUhDSV9VVE1JXzhCSVQsCiAJLmZsYWdzCT0gTVhDX0VIQ0lfUE9XRVJfUElOU19FTkFCTEVEIHwgTVhDX0VIQ0lfSU5URVJGQUNFX0RJRkZfVU5JLAogfTsKIAotc3RhdGljIHN0cnVjdCBteGNfdXNiaF9wbGF0Zm9ybV9kYXRhIHVzYmgyX3BkYXRhID0geworc3RhdGljIHN0cnVjdCBteGNfdXNiaF9wbGF0Zm9ybV9kYXRhIHVzYmgyX3BkYXRhIF9faW5pdGRhdGEgPSB7CiAJLmluaXQJPSB1c2JoMl9pbml0LAogCS5wb3J0c2MJPSBNWENfRUhDSV9NT0RFX1VMUEkgfCBNWENfRUhDSV9VVE1JXzhCSVQsCiAJLmZsYWdzCT0gTVhDX0VIQ0lfUE9XRVJfUElOU19FTkFCTEVEIHwgTVhDX0VIQ0lfSU5URVJGQUNFX0RJRkZfVU5JLApAQCAtNDUzLDcgKzQ1MSw3IEBACiAJZ3Bpb19mcmVlKElPTVVYX1RPX0dQSU8oTVgzMV9QSU5fQVRBX1JFU0VUX0IpKTsKIH0KIAotc3RhdGljIHN0cnVjdCBpbXhtbWNfcGxhdGZvcm1fZGF0YSBzZGhjX3BkYXRhID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpbXhtbWNfcGxhdGZvcm1fZGF0YSBzZGhjX3BkYXRhIF9faW5pdGNvbnN0ID0gewogCS5nZXRfcm8gPSBhcm1hZGlsbG81eDBfc2RoYzFfZ2V0X3JvLAogCS5pbml0ID0gYXJtYWRpbGxvNXgwX3NkaGMxX2luaXQsCiAJLmV4aXQgPSBhcm1hZGlsbG81eDBfc2RoYzFfZXhpdCwKQEAgLTUyMCw3ICs1MTgsNyBAQAogCWdwaW9fZGlyZWN0aW9uX2lucHV0KE1YMzFfUElOX0dQSU8xXzApOwogCiAJLyogUmVnaXN0ZXIgU0RIQyAqLwotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y3NkaGNfZGV2aWNlMCwgJnNkaGNfcGRhdGEpOworCWlteDMxX2FkZF9teGNfbW1jKDAsICZzZGhjX3BkYXRhKTsKIAogCS8qIFJlZ2lzdGVyIEZCICovCiAJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXgzX2lwdSwgJm14M19pcHVfZGF0YSk7CkBAIC01NTUsOCArNTUzLDggQEAKIAl1c2JoMl9wZGF0YS5vdGcgPSBvdGdfdWxwaV9jcmVhdGUoJm14Y191bHBpX2FjY2Vzc19vcHMsCiAJCQlVTFBJX09UR19EUlZWQlVTIHwgVUxQSV9PVEdfRFJWVkJVU19FWFQpOwogCi0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX290Z19ob3N0LCAmdXNib3RnX3BkYXRhKTsKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdXNiaDIsICZ1c2JoMl9wZGF0YSk7CisJaW14MzFfYWRkX214Y19laGNpX290ZygmdXNib3RnX3BkYXRhKTsKKwlpbXgzMV9hZGRfbXhjX2VoY2lfaHMoMiwgJnVzYmgyX3BkYXRhKTsKICNlbmRpZgogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9tYWNoLWNwdWlteDM1LmMgYi9hcmNoL2FybS9tYWNoLW14My9tYWNoLWNwdWlteDM1LmMKaW5kZXggOWZkZTg3My4uMjZhZTkwZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC1jcHVpbXgzNS5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtY3B1aW14MzUuYwpAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy90c2MyMDA3Lmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL290Zy5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi91bHBpLmg+Ci0jaW5jbHVkZSA8bGludXgvZnNsX2RldmljZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMtZ3Bpby5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KQEAgLTQzLDcgKzQyLDYgQEAKICNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgogI2luY2x1ZGUgPG1hY2gvaW9tdXgtbXgzNS5oPgogI2luY2x1ZGUgPG1hY2gvbXhjX25hbmQuaD4KLSNpbmNsdWRlIDxtYWNoL214Y19laGNpLmg+CiAKICNpbmNsdWRlICJkZXZpY2VzLWlteDM1LmgiCiAjaW5jbHVkZSAiZGV2aWNlcy5oIgpAQCAtNzQsMTEgKzcyLDcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0gewotCSZpbXhfd2R0X2RldmljZTAsCi19OwotCi1zdGF0aWMgc3RydWN0IHBhZF9kZXNjIGV1a3JlYV9jcHVpbXgzNV9wYWRzW10gPSB7CitzdGF0aWMgaW9tdXhfdjNfY2ZnX3QgZXVrcmVhX2NwdWlteDM1X3BhZHNbXSA9IHsKIAkvKiBVQVJUMSAqLwogCU1YMzVfUEFEX0NUUzFfX1VBUlQxX0NUUywKIAlNWDM1X1BBRF9SVFMxX19VQVJUMV9SVFMsCkBAIC0xMTcsMTggKzExMSwxOCBAQAogCS5mbGFzaF9iYnQJPSAxLAogfTsKIAotc3RhdGljIHN0cnVjdCBteGNfdXNiaF9wbGF0Zm9ybV9kYXRhIF9fbWF5YmVfdW51c2VkIG90Z19wZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXhjX3VzYmhfcGxhdGZvcm1fZGF0YSBvdGdfcGRhdGEgX19pbml0Y29uc3QgPSB7CiAJLnBvcnRzYwk9IE1YQ19FSENJX01PREVfVVRNSSwKIAkuZmxhZ3MJPSBNWENfRUhDSV9JTlRFUkZBQ0VfRElGRl9VTkksCiB9OwogCi1zdGF0aWMgc3RydWN0IG14Y191c2JoX3BsYXRmb3JtX2RhdGEgX19tYXliZV91bnVzZWQgdXNiaDFfcGRhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG14Y191c2JoX3BsYXRmb3JtX2RhdGEgdXNiaDFfcGRhdGEgX19pbml0Y29uc3QgPSB7CiAJLnBvcnRzYwk9IE1YQ19FSENJX01PREVfU0VSSUFMLAogCS5mbGFncwk9IE1YQ19FSENJX0lOVEVSRkFDRV9TSU5HTEVfVU5JIHwgTVhDX0VIQ0lfSU5URVJOQUxfUEhZIHwKIAkJICBNWENfRUhDSV9JUFBVRV9ET1dOLAogfTsKIAotc3RhdGljIHN0cnVjdCBmc2xfdXNiMl9wbGF0Zm9ybV9kYXRhIG90Z19kZXZpY2VfcGRhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZzbF91c2IyX3BsYXRmb3JtX2RhdGEgb3RnX2RldmljZV9wZGF0YSBfX2luaXRjb25zdCA9IHsKIAkub3BlcmF0aW5nX21vZGUJPSBGU0xfVVNCMl9EUl9ERVZJQ0UsCiAJLnBoeV9tb2RlCT0gRlNMX1VTQjJfUEhZX1VUTUksCiAJLndvcmthcm91bmQJPSBGTFNfVVNCMl9XT1JLQVJPVU5EX0VOR0NNMDkxNTIsCkBAIC0xNTgsNyArMTUyLDcgQEAKIAkJCUFSUkFZX1NJWkUoZXVrcmVhX2NwdWlteDM1X3BhZHMpKTsKIAogCWlteDM1X2FkZF9mZWMoTlVMTCk7Ci0JcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7CisJaW14MzVfYWRkX2lteDJfd2R0KE5VTEwpOwogCiAJaW14MzVfYWRkX2lteF91YXJ0MCgmdWFydF9wZGF0YSk7CiAJaW14MzVfYWRkX214Y19uYW5kKCZldWtyZWFfY3B1aW14MzVfbmFuZF9ib2FyZF9pbmZvKTsKQEAgLTE2OCwxMSArMTYyLDExIEBACiAJaW14MzVfYWRkX2lteF9pMmMwKCZldWtyZWFfY3B1aW14MzVfaTJjMF9kYXRhKTsKIAogCWlmIChvdGdfbW9kZV9ob3N0KQotCQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfb3RnX2hvc3QsICZvdGdfcGRhdGEpOworCQlpbXgzNV9hZGRfbXhjX2VoY2lfb3RnKCZvdGdfcGRhdGEpOwogCWVsc2UKLQkJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX290Z191ZGNfZGV2aWNlLCAmb3RnX2RldmljZV9wZGF0YSk7CisJCWlteDM1X2FkZF9mc2xfdXNiMl91ZGMoJm90Z19kZXZpY2VfcGRhdGEpOwogCi0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VzYmgxLCAmdXNiaDFfcGRhdGEpOworCWlteDM1X2FkZF9teGNfZWhjaV9ocygmdXNiaDFfcGRhdGEpOwogCiAjaWZkZWYgQ09ORklHX01BQ0hfRVVLUkVBX01CSU1YU0QzNV9CQVNFQk9BUkQKIAlldWtyZWFfbWJpbXhzZDM1X2Jhc2Vib2FyZF9pbml0KCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9tYWNoLWt6bV9hcm0xMV8wMS5jIGIvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC1rem1fYXJtMTFfMDEuYwppbmRleCAwNDJjZDU2Li5hNWYzZWIyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9tYWNoLWt6bV9hcm0xMV8wMS5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL21hY2gta3ptX2FybTExXzAxLmMKQEAgLTQxLDkgKzQxLDkgQEAKICNpbmNsdWRlICJkZXZpY2VzLWlteDMxLmgiCiAjaW5jbHVkZSAiZGV2aWNlcy5oIgogCi0jZGVmaW5lIEtaTV9BUk0xMV9JT19BRERSRVNTKHgpICgJCQkJCVwKLQlJTVhfSU9fQUREUkVTUyh4LCBNWDMxX0NTNCkgPzoJCQkJCVwKLQlJTVhfSU9fQUREUkVTUyh4LCBNWDMxX0NTNSkgPzoJCQkJCVwKKyNkZWZpbmUgS1pNX0FSTTExX0lPX0FERFJFU1MoeCkgKElPTUVNKAkJCQkJXAorCUlNWF9JT19QMlZfTU9EVUxFKHgsIE1YMzFfQ1M0KSA/OgkJCQlcCisJSU1YX0lPX1AyVl9NT0RVTEUoeCwgTVgzMV9DUzUpKSA/OgkJCQlcCiAJTVgzMV9JT19BRERSRVNTKHgpKQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC1teDMxXzNkcy5jIGIvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC1teDMxXzNkcy5jCmluZGV4IDBhZDllNzguLjRlNTE2YjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtbXgzMV8zZHMuYworKysgYi9hcmNoL2FybS9tYWNoLW14My9tYWNoLW14MzFfM2RzLmMKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlIDxsaW51eC9tZmQvbWMxMzc4My5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KICNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvbWFjaGluZS5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzbF9kZXZpY2VzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5wdXQvbWF0cml4X2tleXBhZC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi9vdGcuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvdWxwaS5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KICNpbmNsdWRlIDxtYWNoL2lvbXV4LW14My5oPgogI2luY2x1ZGUgPG1hY2gvM2RzX2RlYnVnYm9hcmQuaD4KKyNpbmNsdWRlIDxtYWNoL3VscGkuaD4KIAogI2luY2x1ZGUgImRldmljZXMtaW14MzEuaCIKICNpbmNsdWRlICJkZXZpY2VzLmgiCkBAIC04NCw2ICs4NSwyMSBAQAogCU1YMzFfUElOX0tFWV9DT0wxX0tFWV9DT0wxLAogCU1YMzFfUElOX0tFWV9DT0wyX0tFWV9DT0wyLAogCU1YMzFfUElOX0tFWV9DT0wzX0tFWV9DT0wzLAorCS8qIFVTQiBIb3N0IDIgKi8KKwlJT01VWF9NT0RFKE1YMzFfUElOX1VTQkgyX0NMSywgSU9NVVhfQ09ORklHX0ZVTkMpLAorCUlPTVVYX01PREUoTVgzMV9QSU5fVVNCSDJfRElSLCBJT01VWF9DT05GSUdfRlVOQyksCisJSU9NVVhfTU9ERShNWDMxX1BJTl9VU0JIMl9OWFQsIElPTVVYX0NPTkZJR19GVU5DKSwKKwlJT01VWF9NT0RFKE1YMzFfUElOX1VTQkgyX1NUUCwgSU9NVVhfQ09ORklHX0ZVTkMpLAorCUlPTVVYX01PREUoTVgzMV9QSU5fVVNCSDJfREFUQTAsIElPTVVYX0NPTkZJR19GVU5DKSwKKwlJT01VWF9NT0RFKE1YMzFfUElOX1VTQkgyX0RBVEExLCBJT01VWF9DT05GSUdfRlVOQyksCisJSU9NVVhfTU9ERShNWDMxX1BJTl9QQ19WUzIsIElPTVVYX0NPTkZJR19BTFQxKSwKKwlJT01VWF9NT0RFKE1YMzFfUElOX1BDX0JWRDEsIElPTVVYX0NPTkZJR19BTFQxKSwKKwlJT01VWF9NT0RFKE1YMzFfUElOX1BDX0JWRDIsIElPTVVYX0NPTkZJR19BTFQxKSwKKwlJT01VWF9NT0RFKE1YMzFfUElOX1BDX1JTVCwgSU9NVVhfQ09ORklHX0FMVDEpLAorCUlPTVVYX01PREUoTVgzMV9QSU5fSU9JUzE2LCBJT01VWF9DT05GSUdfQUxUMSksCisJSU9NVVhfTU9ERShNWDMxX1BJTl9QQ19SV19CLCBJT01VWF9DT05GSUdfQUxUMSksCisJLyogVVNCIEhvc3QyIHJlc2V0ICovCisJSU9NVVhfTU9ERShNWDMxX1BJTl9VU0JfQllQLCBJT01VWF9DT05GSUdfR1BJTyksCiB9OwogCiAvKgpAQCAtMTAyLDcgKzExOCw3IEBACiAJS0VZKDIsIDMsIEtFWV9GMTApLAogfTsKIAotc3RhdGljIHN0cnVjdCBtYXRyaXhfa2V5bWFwX2RhdGEgbXgzMV8zZHNfa2V5bWFwX2RhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG1hdHJpeF9rZXltYXBfZGF0YSBteDMxXzNkc19rZXltYXBfZGF0YSBfX2luaXRjb25zdCA9IHsKIAkua2V5bWFwCQk9IG14MzFfM2RzX2tleW1hcCwKIAkua2V5bWFwX3NpemUJPSBBUlJBWV9TSVpFKG14MzFfM2RzX2tleW1hcCksCiB9OwpAQCAtMTE1LDYgKzEzMSwxMyBAQAogCX0sCiB9OwogCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgZ3BvX2luaXQgPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkuYm9vdF9vbiA9IDEsCisJCS5hbHdheXNfb24gPSAxLAorCX0KK307CisKIHN0YXRpYyBzdHJ1Y3QgbWMxMzc4M19yZWd1bGF0b3JfaW5pdF9kYXRhIG14MzFfM2RzX3JlZ3VsYXRvcnNbXSA9IHsKIAl7CiAJCS5pZCA9IE1DMTM3ODNfUkVHVV9QV0dUMVNQSSwgLyogUG93ZXIgR2F0ZSBmb3IgQVJNIGNvcmUuICovCkBAIC0xMjIsNiArMTQ1LDEzIEBACiAJfSwgewogCQkuaWQgPSBNQzEzNzgzX1JFR1VfUFdHVDJTUEksIC8qIFBvd2VyIEdhdGUgZm9yIEwyIENhY2hlLiAqLwogCQkuaW5pdF9kYXRhID0gJnB3Z3R4X2luaXQsCisJfSwgeworCisJCS5pZCA9IE1DMTM3ODNfUkVHVV9HUE8xLCAvKiBUdXJuIG9uIDEuOFYgKi8KKwkJLmluaXRfZGF0YSA9ICZncG9faW5pdCwKKwl9LCB7CisJCS5pZCA9IE1DMTM3ODNfUkVHVV9HUE8zLCAvKiBUdXJuIG9uIDMuM1YgKi8KKwkJLmluaXRfZGF0YSA9ICZncG9faW5pdCwKIAl9LAogfTsKIApAQCAtMTI5LDcgKzE1OSw3IEBACiBzdGF0aWMgc3RydWN0IG1jMTM3ODNfcGxhdGZvcm1fZGF0YSBtYzEzNzgzX3BkYXRhIF9faW5pdGRhdGEgPSB7CiAJLnJlZ3VsYXRvcnMgPSBteDMxXzNkc19yZWd1bGF0b3JzLAogCS5udW1fcmVndWxhdG9ycyA9IEFSUkFZX1NJWkUobXgzMV8zZHNfcmVndWxhdG9ycyksCi0JLmZsYWdzICA9IE1DMTM3ODNfVVNFX1JFR1VMQVRPUiwKKwkuZmxhZ3MgID0gTUMxMzc4M19VU0VfUkVHVUxBVE9SIHwgTUMxMzc4M19VU0VfVE9VQ0hTQ1JFRU4sCiB9OwogCiAvKiBTUEkgKi8KQEAgLTE3NSw2ICsyMDUsNyBAQAogCQkgICAgIFBBRF9DVExfT0RFX0NNT1MgfCBQQURfQ1RMXzEwMEtfUFUpCiAKICNkZWZpbmUgVVNCT1RHX1JTVF9CIElPTVVYX1RPX0dQSU8oTVgzMV9QSU5fVVNCX1BXUikKKyNkZWZpbmUgVVNCSDJfUlNUX0IgSU9NVVhfVE9fR1BJTyhNWDMxX1BJTl9VU0JfQllQKQogCiBzdGF0aWMgaW50IG14MzFfM2RzX3VzYm90Z19pbml0KHZvaWQpCiB7CkBAIC0yMTQsMTEgKzI0NSw3NyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZnNsX3VzYjJfcGxhdGZvcm1fZGF0YSB1c2JvdGdfcGRhdGEgPSB7CitzdGF0aWMgaW50IG14MzFfM2RzX2hvc3QyX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlpbnQgZXJyOworCisJbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCSDJfQ0xLLCBVU0JfUEFEX0NGRyk7CisJbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCSDJfRElSLCBVU0JfUEFEX0NGRyk7CisJbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCSDJfTlhULCBVU0JfUEFEX0NGRyk7CisJbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCSDJfU1RQLCBVU0JfUEFEX0NGRyk7CisJbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCSDJfREFUQTAsIFVTQl9QQURfQ0ZHKTsKKwlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9VU0JIMl9EQVRBMSwgVVNCX1BBRF9DRkcpOworCW14Y19pb211eF9zZXRfcGFkKE1YMzFfUElOX1BDX1ZTMiwgVVNCX1BBRF9DRkcpOworCW14Y19pb211eF9zZXRfcGFkKE1YMzFfUElOX1BDX0JWRDEsIFVTQl9QQURfQ0ZHKTsKKwlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9QQ19CVkQyLCBVU0JfUEFEX0NGRyk7CisJbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fUENfUlNULCBVU0JfUEFEX0NGRyk7CisJbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fSU9JUzE2LCBVU0JfUEFEX0NGRyk7CisJbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fUENfUldfQiwgVVNCX1BBRF9DRkcpOworCisJZXJyID0gZ3Bpb19yZXF1ZXN0KFVTQkgyX1JTVF9CLCAidXNiaDItcmVzZXQiKTsKKwlpZiAoZXJyKSB7CisJCXByX2VycigiRmFpbGVkIHRvIHJlcXVlc3QgdGhlIFVTQiBIb3N0IDIgcmVzZXQgZ3Bpb1xuIik7CisJCXJldHVybiBlcnI7CisJfQorCisJZXJyID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFVTQkgyX1JTVF9CLCAwKTsKKwlpZiAoZXJyKSB7CisJCXByX2VycigiRmFpbGVkIHRvIGRyaXZlIHRoZSBVU0IgSG9zdCAyIHJlc2V0IGdwaW9cbiIpOworCQlnb3RvIHVzYm90Z19mcmVlX3Jlc2V0OworCX0KKworCW1kZWxheSgxKTsKKwlncGlvX3NldF92YWx1ZShVU0JIMl9SU1RfQiwgMSk7CisJcmV0dXJuIDA7CisKK3VzYm90Z19mcmVlX3Jlc2V0OgorCWdwaW9fZnJlZShVU0JIMl9SU1RfQik7CisJcmV0dXJuIGVycjsKK30KKworI2lmIGRlZmluZWQoQ09ORklHX1VTQl9VTFBJKQorc3RhdGljIHN0cnVjdCBteGNfdXNiaF9wbGF0Zm9ybV9kYXRhIG90Z19wZGF0YSBfX2luaXRkYXRhID0geworCS5wb3J0c2MJPSBNWENfRUhDSV9NT0RFX1VMUEksCisJLmZsYWdzCT0gTVhDX0VIQ0lfUE9XRVJfUElOU19FTkFCTEVELAorfTsKKworc3RhdGljIHN0cnVjdCBteGNfdXNiaF9wbGF0Zm9ybV9kYXRhIHVzYmgyX3BkYXRhIF9faW5pdGRhdGEgPSB7CisJLmluaXQgPSBteDMxXzNkc19ob3N0Ml9pbml0LAorCS5wb3J0c2MJPSBNWENfRUhDSV9NT0RFX1VMUEksCisJLmZsYWdzCT0gTVhDX0VIQ0lfUE9XRVJfUElOU19FTkFCTEVELAorfTsKKyNlbmRpZgorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZzbF91c2IyX3BsYXRmb3JtX2RhdGEgdXNib3RnX3BkYXRhIF9faW5pdGNvbnN0ID0gewogCS5vcGVyYXRpbmdfbW9kZSA9IEZTTF9VU0IyX0RSX0RFVklDRSwKIAkucGh5X21vZGUJPSBGU0xfVVNCMl9QSFlfVUxQSSwKIH07CiAKK3N0YXRpYyBpbnQgb3RnX21vZGVfaG9zdDsKKworc3RhdGljIGludCBfX2luaXQgbXgzMV8zZHNfb3RnX21vZGUoY2hhciAqb3B0aW9ucykKK3sKKwlpZiAoIXN0cmNtcChvcHRpb25zLCAiaG9zdCIpKQorCQlvdGdfbW9kZV9ob3N0ID0gMTsKKwllbHNlIGlmICghc3RyY21wKG9wdGlvbnMsICJkZXZpY2UiKSkKKwkJb3RnX21vZGVfaG9zdCA9IDA7CisJZWxzZQorCQlwcl9pbmZvKCJvdGdfbW9kZSBuZWl0aGVyIFwiaG9zdFwiIG5vciBcImRldmljZVwiLiAiCisJCQkiRGVmYXVsdGluZyB0byBkZXZpY2VcbiIpOworCXJldHVybiAwOworfQorX19zZXR1cCgib3RnX21vZGU9IiwgbXgzMV8zZHNfb3RnX21vZGUpOworCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlteHVhcnRfcGxhdGZvcm1fZGF0YSB1YXJ0X3BkYXRhIF9faW5pdGNvbnN0ID0gewogCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCiB9OwpAQCAtMjQ2LDE0ICszNDMsMjcgQEAKIAlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyhteDMxXzNkc19zcGlfZGV2cywKIAkJCQkJCUFSUkFZX1NJWkUobXgzMV8zZHNfc3BpX2RldnMpKTsKIAotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJmlteF9rcHBfZGV2aWNlLCAmbXgzMV8zZHNfa2V5bWFwX2RhdGEpOworCWlteDMxX2FkZF9pbXhfa2V5cGFkKCZteDMxXzNkc19rZXltYXBfZGF0YSk7CiAKIAlteDMxXzNkc191c2JvdGdfaW5pdCgpOwotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19vdGdfdWRjX2RldmljZSwgJnVzYm90Z19wZGF0YSk7CisjaWYgZGVmaW5lZChDT05GSUdfVVNCX1VMUEkpCisJaWYgKG90Z19tb2RlX2hvc3QpIHsKKwkJb3RnX3BkYXRhLm90ZyA9IG90Z191bHBpX2NyZWF0ZSgmbXhjX3VscGlfYWNjZXNzX29wcywKKwkJCQlVTFBJX09UR19EUlZWQlVTIHwgVUxQSV9PVEdfRFJWVkJVU19FWFQpOworCisJCWlteDMxX2FkZF9teGNfZWhjaV9vdGcoJm90Z19wZGF0YSk7CisJfQorCXVzYmgyX3BkYXRhLm90ZyA9IG90Z191bHBpX2NyZWF0ZSgmbXhjX3VscGlfYWNjZXNzX29wcywKKwkJCQlVTFBJX09UR19EUlZWQlVTIHwgVUxQSV9PVEdfRFJWVkJVU19FWFQpOworCWlteDMxX2FkZF9teGNfZWhjaV9ocygyLCAmdXNiaDJfcGRhdGEpOworI2VuZGlmCisJaWYgKCFvdGdfbW9kZV9ob3N0KQorCQlpbXgzMV9hZGRfZnNsX3VzYjJfdWRjKCZ1c2JvdGdfcGRhdGEpOwogCiAJaWYgKG14Y19leHBpb19pbml0KE1YMzFfQ1M1X0JBU0VfQUREUiwgRVhQSU9fUEFSRU5UX0lOVCkpCiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIkluaXQgb2YgdGhlIGRlYnVnIGJvYXJkIGZhaWxlZCwgYWxsICIKIAkJCQkgICAgImRldmljZXMgb24gdGhlIGRlYnVnIGJvYXJkIGFyZSB1bnVzYWJsZS5cbiIpOworCWlteDMxX2FkZF9pbXgyX3dkdChOVUxMKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IG14MzFfM2RzX3RpbWVyX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtbXgzMWxpbGx5LmMgYi9hcmNoL2FybS9tYWNoLW14My9tYWNoLW14MzFsaWxseS5jCmluZGV4IDQyZjQ3ZmEuLjJjNTk1NDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtbXgzMWxpbGx5LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC1teDMxbGlsbHkuYwpAQCAtNDIsNyArNDIsNiBAQAogI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CiAjaW5jbHVkZSA8bWFjaC9pb211eC1teDMuaD4KICNpbmNsdWRlIDxtYWNoL2JvYXJkLW14MzFsaWxseS5oPgotI2luY2x1ZGUgPG1hY2gvbXhjX2VoY2kuaD4KICNpbmNsdWRlIDxtYWNoL3VscGkuaD4KIAogI2luY2x1ZGUgImRldmljZXMtaW14MzEuaCIKQEAgLTIzMCwxMyArMjI5LDEzIEBACiAJLmZsYWdzCT0gTVhDX0VIQ0lfUE9XRVJfUElOU19FTkFCTEVELAogfTsKIAotc3RhdGljIHN0cnVjdCBteGNfdXNiaF9wbGF0Zm9ybV9kYXRhIHVzYmgxX3BkYXRhID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBteGNfdXNiaF9wbGF0Zm9ybV9kYXRhIHVzYmgxX3BkYXRhIF9faW5pdGNvbnN0ID0gewogCS5pbml0CT0gdXNiaDFfaW5pdCwKIAkucG9ydHNjCT0gTVhDX0VIQ0lfTU9ERV9VVE1JIHwgTVhDX0VIQ0lfU0VSSUFMLAogCS5mbGFncwk9IE1YQ19FSENJX1BPV0VSX1BJTlNfRU5BQkxFRCB8IE1YQ19FSENJX0lOVEVSRkFDRV9TSU5HTEVfVU5JLAogfTsKIAotc3RhdGljIHN0cnVjdCBteGNfdXNiaF9wbGF0Zm9ybV9kYXRhIHVzYmgyX3BkYXRhID0geworc3RhdGljIHN0cnVjdCBteGNfdXNiaF9wbGF0Zm9ybV9kYXRhIHVzYmgyX3BkYXRhIF9faW5pdGRhdGEgPSB7CiAJLmluaXQJPSB1c2JoMl9pbml0LAogCS5wb3J0c2MJPSBNWENfRUhDSV9NT0RFX1VMUEkgfCBNWENfRUhDSV9VVE1JXzhCSVQsCiAJLmZsYWdzCT0gTVhDX0VIQ0lfUE9XRVJfUElOU19FTkFCTEVELApAQCAtMjQ5LDggKzI0OCw4IEBACiAJdXNiaDJfcGRhdGEub3RnID0gb3RnX3VscGlfY3JlYXRlKCZteGNfdWxwaV9hY2Nlc3Nfb3BzLAogCQkJCVVMUElfT1RHX0RSVlZCVVMgfCBVTFBJX09UR19EUlZWQlVTX0VYVCk7CiAKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdXNiaDEsICZ1c2JoMV9wZGF0YSk7Ci0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VzYmgyLCAmdXNiaDJfcGRhdGEpOworCWlteDMxX2FkZF9teGNfZWhjaV9ocygxLCAmdXNiaDFfcGRhdGEpOworCWlteDMxX2FkZF9teGNfZWhjaV9ocygyLCAmdXNiaDJfcGRhdGEpOwogfQogCiAjZWxzZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC1teDMxbGl0ZS5jIGIvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC1teDMxbGl0ZS5jCmluZGV4IGI5Mzg5NTguLjllNjRjNjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtbXgzMWxpdGUuYworKysgYi9hcmNoL2FybS9tYWNoLW14My9tYWNoLW14MzFsaXRlLmMKQEAgLTQwLDcgKzQwLDYgQEAKICNpbmNsdWRlIDxtYWNoL2JvYXJkLW14MzFsaXRlLmg+CiAjaW5jbHVkZSA8bWFjaC9pb211eC1teDMuaD4KICNpbmNsdWRlIDxtYWNoL2lycXMuaD4KLSNpbmNsdWRlIDxtYWNoL214Y19laGNpLmg+CiAjaW5jbHVkZSA8bWFjaC91bHBpLmg+CiAKICNpbmNsdWRlICJkZXZpY2VzLWlteDMxLmgiCkBAIC0xNzEsNyArMTcwLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBteGNfdXNiaF9wbGF0Zm9ybV9kYXRhIHVzYmgyX3BkYXRhID0geworc3RhdGljIHN0cnVjdCBteGNfdXNiaF9wbGF0Zm9ybV9kYXRhIHVzYmgyX3BkYXRhIF9faW5pdGRhdGEgPSB7CiAJLmluaXQgICA9IHVzYmgyX2luaXQsCiAJLnBvcnRzYyA9IE1YQ19FSENJX01PREVfVUxQSSB8IE1YQ19FSENJX1VUTUlfOEJJVCwKIAkuZmxhZ3MgID0gTVhDX0VIQ0lfUE9XRVJfUElOU19FTkFCTEVELApAQCAtMjU4LDcgKzI1Nyw3IEBACiAJdXNiaDJfcGRhdGEub3RnID0gb3RnX3VscGlfY3JlYXRlKCZteGNfdWxwaV9hY2Nlc3Nfb3BzLAogCQkJCVVMUElfT1RHX0RSVlZCVVMgfCBVTFBJX09UR19EUlZWQlVTX0VYVCk7CiAKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdXNiaDIsICZ1c2JoMl9wZGF0YSk7CisJaW14MzFfYWRkX214Y19laGNpX2hzKDIsICZ1c2JoMl9wZGF0YSk7CiAjZW5kaWYKIAogCS8qIFNNU0M5MTE3IElSUSBwaW4gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtbXgzMW1vYm9hcmQuYyBiL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtbXgzMW1vYm9hcmQuYwppbmRleCBlYjVmNDI2Li4yMDNkMjFhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9tYWNoLW14MzFtb2JvYXJkLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC1teDMxbW9ib2FyZC5jCkBAIC00MCw4ICs0MCw2IEBACiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvaW9tdXgtbXgzLmg+CiAjaW5jbHVkZSA8bWFjaC9pcHUuaD4KLSNpbmNsdWRlIDxtYWNoL21tYy5oPgotI2luY2x1ZGUgPG1hY2gvbXhjX2VoY2kuaD4KICNpbmNsdWRlIDxtYWNoL214M19jYW1lcmEuaD4KICNpbmNsdWRlIDxtYWNoL3NwaS5oPgogI2luY2x1ZGUgPG1hY2gvdWxwaS5oPgpAQCAtMTcwLDExICsxNjgsMTEgQEAKIAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IHNkaGNfY29uc3VtZXJzW10gPSB7CiAJewotCQkuZGV2CT0gJm14Y3NkaGNfZGV2aWNlMC5kZXYsCisJCS5kZXZfbmFtZSA9ICJteGMtbW1jLjAiLAogCQkuc3VwcGx5CT0gInNkaGMwX3ZjYyIsCiAJfSwKIAl7Ci0JCS5kZXYJPSAmbXhjc2RoY19kZXZpY2UxLmRldiwKKwkJLmRldl9uYW1lID0gIm14Yy1tbWMuMSIsCiAJCS5zdXBwbHkJPSAic2RoYzFfdmNjIiwKIAl9LAogfTsKQEAgLTM0NSw3ICszNDMsNyBAQAogCWdwaW9fZnJlZShTREhDMV9DRCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaW14bW1jX3BsYXRmb3JtX2RhdGEgc2RoYzFfcGRhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGlteG1tY19wbGF0Zm9ybV9kYXRhIHNkaGMxX3BkYXRhIF9faW5pdGNvbnN0ID0gewogCS5nZXRfcm8JPSBtb2JvYXJkX3NkaGMxX2dldF9ybywKIAkuaW5pdAk9IG1vYm9hcmRfc2RoYzFfaW5pdCwKIAkuZXhpdAk9IG1vYm9hcmRfc2RoYzFfZXhpdCwKQEAgLTQwNCwxNyArNDAyLDIzIEBACiAKICNpZiBkZWZpbmVkKENPTkZJR19VU0JfVUxQSSkKIAotc3RhdGljIHN0cnVjdCBteGNfdXNiaF9wbGF0Zm9ybV9kYXRhIHVzYmgyX3BkYXRhID0geworc3RhdGljIHN0cnVjdCBteGNfdXNiaF9wbGF0Zm9ybV9kYXRhIHVzYmgyX3BkYXRhIF9faW5pdGRhdGEgPSB7CiAJLnBvcnRzYwk9IE1YQ19FSENJX01PREVfVUxQSSB8IE1YQ19FSENJX1VUTUlfOEJJVCwKIAkuZmxhZ3MJPSBNWENfRUhDSV9QT1dFUl9QSU5TX0VOQUJMRUQsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBtb2JvYXJkX3VzYmgyX2luaXQodm9pZCkKIHsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCiAJdXNiaDJfcGRhdGEub3RnID0gb3RnX3VscGlfY3JlYXRlKCZteGNfdWxwaV9hY2Nlc3Nfb3BzLAogCQkJVUxQSV9PVEdfRFJWVkJVUyB8IFVMUElfT1RHX0RSVlZCVVNfRVhUKTsKIAotCXJldHVybiBteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdXNiaDIsICZ1c2JoMl9wZGF0YSk7CisJcGRldiA9IGlteDMxX2FkZF9teGNfZWhjaV9ocygyLCAmdXNiaDJfcGRhdGEpOworCWlmIChJU19FUlIocGRldikpCisJCXJldHVybiBQVFJfRVJSKHBkZXYpOworCisJcmV0dXJuIDA7CiB9CiAjZWxzZQogc3RhdGljIGlubGluZSBpbnQgbW9ib2FyZF91c2JoMl9pbml0KHZvaWQpIHsgcmV0dXJuIDA7IH0KQEAgLTUyMCw3ICs1MjQsNyBAQAogCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKG1vYm9hcmRfc3BpX2JvYXJkX2luZm8sCiAJCUFSUkFZX1NJWkUobW9ib2FyZF9zcGlfYm9hcmRfaW5mbykpOwogCi0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjc2RoY19kZXZpY2UwLCAmc2RoYzFfcGRhdGEpOworCWlteDMxX2FkZF9teGNfbW1jKDAsICZzZGhjMV9wZGF0YSk7CiAKIAlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteDNfaXB1LCAmbXgzX2lwdV9kYXRhKTsKIAlpZiAoIW14MzFtb2JvYXJkX2NhbV9hbGxvY19kbWEoQ0FNRVJBX0JVRl9TSVpFKSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtbXgzNV8zZHMuYyBiL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtbXgzNV8zZHMuYwppbmRleCBiNjZhNzVhLi5iMTk2M2YyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9tYWNoLW14MzVfM2RzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC1teDM1XzNkcy5jCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbWVtb3J5Lmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzbF9kZXZpY2VzLmg+CisjaW5jbHVkZSA8bGludXgvdXNiL290Zy5oPgogCiAjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KIApAQCAtNDAsNyArNDAsNiBAQAogI2luY2x1ZGUgPG1hY2gvaW9tdXgtbXgzNS5oPgogI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgogI2luY2x1ZGUgPG1hY2gvM2RzX2RlYnVnYm9hcmQuaD4KLSNpbmNsdWRlIDxtYWNoL214Y19laGNpLmg+CiAKICNpbmNsdWRlICJkZXZpY2VzLWlteDM1LmgiCiAjaW5jbHVkZSAiZGV2aWNlcy5oIgpAQCAtODEsNyArODAsNyBAQAogCSZteDM1cGRrX2ZsYXNoLAogfTsKIAotc3RhdGljIHN0cnVjdCBwYWRfZGVzYyBteDM1cGRrX3BhZHNbXSA9IHsKK3N0YXRpYyBpb211eF92M19jZmdfdCBteDM1cGRrX3BhZHNbXSA9IHsKIAkvKiBVQVJUMSAqLwogCU1YMzVfUEFEX0NUUzFfX1VBUlQxX0NUUywKIAlNWDM1X1BBRF9SVFMxX19VQVJUMV9SVFMsCkBAIC0xMjIsMTggKzEyMSwzOCBAQAogfTsKIAogLyogT1RHIGNvbmZpZyAqLwotc3RhdGljIHN0cnVjdCBmc2xfdXNiMl9wbGF0Zm9ybV9kYXRhIHVzYl9vdGdfcGRhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZzbF91c2IyX3BsYXRmb3JtX2RhdGEgdXNiX290Z19wZGF0YSBfX2luaXRjb25zdCA9IHsKIAkub3BlcmF0aW5nX21vZGUJPSBGU0xfVVNCMl9EUl9ERVZJQ0UsCiAJLnBoeV9tb2RlCT0gRlNMX1VTQjJfUEhZX1VUTUlfV0lERSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgbXhjX3VzYmhfcGxhdGZvcm1fZGF0YSBvdGdfcGRhdGEgX19pbml0ZGF0YSA9IHsKKwkucG9ydHNjCT0gTVhDX0VIQ0lfTU9ERV9VVE1JLAorCS5mbGFncwk9IE1YQ19FSENJX0lOVEVSTkFMX1BIWSwKK307CisKIC8qIFVTQiBIT1NUIGNvbmZpZyAqLwotc3RhdGljIHN0cnVjdCBteGNfdXNiaF9wbGF0Zm9ybV9kYXRhIHVzYl9ob3N0X3BkYXRhID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBteGNfdXNiaF9wbGF0Zm9ybV9kYXRhIHVzYl9ob3N0X3BkYXRhIF9faW5pdGNvbnN0ID0gewogCS5wb3J0c2MJCT0gTVhDX0VIQ0lfTU9ERV9TRVJJQUwsCiAJLmZsYWdzCQk9IE1YQ19FSENJX0lOVEVSRkFDRV9TSU5HTEVfVU5JIHwKIAkJCSAgTVhDX0VIQ0lfSU5URVJOQUxfUEhZLAogfTsKIAorc3RhdGljIGludCBvdGdfbW9kZV9ob3N0OworCitzdGF0aWMgaW50IF9faW5pdCBteDM1XzNkc19vdGdfbW9kZShjaGFyICpvcHRpb25zKQoreworCWlmICghc3RyY21wKG9wdGlvbnMsICJob3N0IikpCisJCW90Z19tb2RlX2hvc3QgPSAxOworCWVsc2UgaWYgKCFzdHJjbXAob3B0aW9ucywgImRldmljZSIpKQorCQlvdGdfbW9kZV9ob3N0ID0gMDsKKwllbHNlCisJCXByX2luZm8oIm90Z19tb2RlIG5laXRoZXIgXCJob3N0XCIgbm9yIFwiZGV2aWNlXCIuICIKKwkJCSJEZWZhdWx0aW5nIHRvIGRldmljZVxuIik7CisJcmV0dXJuIDA7Cit9CitfX3NldHVwKCJvdGdfbW9kZT0iLCBteDM1XzNkc19vdGdfbW9kZSk7CisKIC8qCiAgKiBCb2FyZCBzcGVjaWZpYyBpbml0aWFsaXphdGlvbi4KICAqLwpAQCAtMTQyLDE2ICsxNjEsMjEgQEAKIAlteGNfaW9tdXhfdjNfc2V0dXBfbXVsdGlwbGVfcGFkcyhteDM1cGRrX3BhZHMsIEFSUkFZX1NJWkUobXgzNXBka19wYWRzKSk7CiAKIAlpbXgzNV9hZGRfZmVjKE5VTEwpOworCWlteDM1X2FkZF9pbXgyX3dkdChOVUxMKTsKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKIAogCWlteDM1X2FkZF9pbXhfdWFydDAoJnVhcnRfcGRhdGEpOwogCi0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX290Z191ZGNfZGV2aWNlLCAmdXNiX290Z19wZGF0YSk7CisJaWYgKG90Z19tb2RlX2hvc3QpCisJCWlteDM1X2FkZF9teGNfZWhjaV9vdGcoJm90Z19wZGF0YSk7CiAKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdXNiaDEsICZ1c2JfaG9zdF9wZGF0YSk7CisJaW14MzVfYWRkX214Y19laGNpX2hzKCZ1c2JfaG9zdF9wZGF0YSk7CisKKwlpZiAoIW90Z19tb2RlX2hvc3QpCisJCWlteDM1X2FkZF9mc2xfdXNiMl91ZGMoJnVzYl9vdGdfcGRhdGEpOwogCiAJaW14MzVfYWRkX214Y19uYW5kKCZteDM1cGRrX25hbmRfYm9hcmRfaW5mbyk7Ci0JaW14MzVfYWRkX2VzZGhjKDAsIE5VTEwpOworCWlteDM1X2FkZF9zZGhjaV9lc2RoY19pbXgoMCwgTlVMTCk7CiAKIAlpZiAobXhjX2V4cGlvX2luaXQoTVgzNV9DUzVfQkFTRV9BRERSLCBFWFBJT19QQVJFTlRfSU5UKSkKIAkJcHJfd2FybigiSW5pdCBvZiB0aGUgZGVidWdib2FyZCBmYWlsZWQsIGFsbCAiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9tYWNoLXBjbTAzNy5jIGIvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC1wY20wMzcuYwppbmRleCAyZmYzZjY2Li5iNzUyZjZiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9tYWNoLXBjbTAzNy5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtcGNtMDM3LmMKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9mc2xfZGV2aWNlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Nhbi9wbGF0Zm9ybS9zamExMDAwLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL290Zy5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi91bHBpLmg+CkBAIC00MywxMCArNDIsOCBAQAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL2lvbXV4LW14My5oPgogI2luY2x1ZGUgPG1hY2gvaXB1Lmg+Ci0jaW5jbHVkZSA8bWFjaC9tbWMuaD4KICNpbmNsdWRlIDxtYWNoL214M19jYW1lcmEuaD4KICNpbmNsdWRlIDxtYWNoL214M2ZiLmg+Ci0jaW5jbHVkZSA8bWFjaC9teGNfZWhjaS5oPgogI2luY2x1ZGUgPG1hY2gvdWxwaS5oPgogCiAjaW5jbHVkZSAiZGV2aWNlcy1pbXgzMS5oIgpAQCAtMzk5LDcgKzM5Niw3IEBACiAJZ3Bpb19mcmVlKFNESEMxX0dQSU9fV1ApOwogfQogCi1zdGF0aWMgc3RydWN0IGlteG1tY19wbGF0Zm9ybV9kYXRhIHNkaGNfcGRhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGlteG1tY19wbGF0Zm9ybV9kYXRhIHNkaGNfcGRhdGEgX19pbml0Y29uc3QgPSB7CiAjaWZkZWYgUENNOTcwX1NESENfUldfU1dJVENICiAJLmdldF9ybyA9IHBjbTk3MF9zZGhjMV9nZXRfcm8sCiAjZW5kaWYKQEAgLTQ0MSw3ICs0MzgsNiBAQAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZwY20wMzdfZmxhc2gsCiAJJnBjbTAzN19zcmFtX2RldmljZSwKLQkmaW14X3dkdF9kZXZpY2UwLAogCSZwY20wMzdfbXQ5dDAzMSwKIAkmcGNtMDM3X210OXYwMjIsCiB9OwpAQCAtNTM4LDE4ICs1MzQsMTggQEAKIH07CiAKICNpZiBkZWZpbmVkKENPTkZJR19VU0JfVUxQSSkKLXN0YXRpYyBzdHJ1Y3QgbXhjX3VzYmhfcGxhdGZvcm1fZGF0YSBvdGdfcGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IG14Y191c2JoX3BsYXRmb3JtX2RhdGEgb3RnX3BkYXRhIF9faW5pdGRhdGEgPSB7CiAJLnBvcnRzYwk9IE1YQ19FSENJX01PREVfVUxQSSwKIAkuZmxhZ3MJPSBNWENfRUhDSV9JTlRFUkZBQ0VfRElGRl9VTkksCiB9OwogCi1zdGF0aWMgc3RydWN0IG14Y191c2JoX3BsYXRmb3JtX2RhdGEgdXNiaDJfcGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IG14Y191c2JoX3BsYXRmb3JtX2RhdGEgdXNiaDJfcGRhdGEgX19pbml0ZGF0YSA9IHsKIAkucG9ydHNjCT0gTVhDX0VIQ0lfTU9ERV9VTFBJLAogCS5mbGFncwk9IE1YQ19FSENJX0lOVEVSRkFDRV9ESUZGX1VOSSwKIH07CiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCBmc2xfdXNiMl9wbGF0Zm9ybV9kYXRhIG90Z19kZXZpY2VfcGRhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZzbF91c2IyX3BsYXRmb3JtX2RhdGEgb3RnX2RldmljZV9wZGF0YSBfX2luaXRjb25zdCA9IHsKIAkub3BlcmF0aW5nX21vZGUgPSBGU0xfVVNCMl9EUl9ERVZJQ0UsCiAJLnBoeV9tb2RlICAgICAgID0gRlNMX1VTQjJfUEhZX1VMUEksCiB9OwpAQCAtNjA3LDEyICs2MDMsMTMgQEAKIAogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZXMsIEFSUkFZX1NJWkUoZGV2aWNlcykpOwogCisJaW14MzFfYWRkX2lteDJfd2R0KE5VTEwpOwogCWlteDMxX2FkZF9pbXhfdWFydDAoJnVhcnRfcGRhdGEpOwogCS8qIFhYWDogc2hvdWxkJ3QgdGhpcyBoYXZlIC5mbGFncyA9IDAgKGkuZS4gbm8gUlRTQ1RTKSBvbiBQQ00wMzdfRUVUPyAqLwogCWlteDMxX2FkZF9pbXhfdWFydDEoJnVhcnRfcGRhdGEpOwogCWlteDMxX2FkZF9pbXhfdWFydDIoJnVhcnRfcGRhdGEpOwogCi0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3cxX21hc3Rlcl9kZXZpY2UsIE5VTEwpOworCWlteDMxX2FkZF9teGNfdzEoTlVMTCk7CiAKIAkvKiBMQU45MjE3IElSUSBwaW4gKi8KIAlyZXQgPSBncGlvX3JlcXVlc3QoSU9NVVhfVE9fR1BJTyhNWDMxX1BJTl9HUElPM18xKSwgImxhbjkyMTctaXJxIik7CkBAIC02MzIsNyArNjI5LDcgQEAKIAlpbXgzMV9hZGRfaW14X2kyYzIoJnBjbTAzN19pMmMyX2RhdGEpOwogCiAJaW14MzFfYWRkX214Y19uYW5kKCZwY20wMzdfbmFuZF9ib2FyZF9pbmZvKTsKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNzZGhjX2RldmljZTAsICZzZGhjX3BkYXRhKTsKKwlpbXgzMV9hZGRfbXhjX21tYygwLCAmc2RoY19wZGF0YSk7CiAJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXgzX2lwdSwgJm14M19pcHVfZGF0YSk7CiAJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXgzX2ZiLCAmbXgzZmJfcGRhdGEpOwogCkBAIC02NTQsMTYgKzY1MSwxNiBAQAogCQlvdGdfcGRhdGEub3RnID0gb3RnX3VscGlfY3JlYXRlKCZteGNfdWxwaV9hY2Nlc3Nfb3BzLAogCQkJCVVMUElfT1RHX0RSVlZCVVMgfCBVTFBJX09UR19EUlZWQlVTX0VYVCk7CiAKLQkJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX290Z19ob3N0LCAmb3RnX3BkYXRhKTsKKwkJaW14MzFfYWRkX214Y19laGNpX290Zygmb3RnX3BkYXRhKTsKIAl9CiAKIAl1c2JoMl9wZGF0YS5vdGcgPSBvdGdfdWxwaV9jcmVhdGUoJm14Y191bHBpX2FjY2Vzc19vcHMsCiAJCQkJVUxQSV9PVEdfRFJWVkJVUyB8IFVMUElfT1RHX0RSVlZCVVNfRVhUKTsKIAotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191c2JoMiwgJnVzYmgyX3BkYXRhKTsKKwlpbXgzMV9hZGRfbXhjX2VoY2lfaHMoMiwgJnVzYmgyX3BkYXRhKTsKICNlbmRpZgogCWlmICghb3RnX21vZGVfaG9zdCkKLQkJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX290Z191ZGNfZGV2aWNlLCAmb3RnX2RldmljZV9wZGF0YSk7CisJCWlteDMxX2FkZF9mc2xfdXNiMl91ZGMoJm90Z19kZXZpY2VfcGRhdGEpOwogCiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtcGNtMDQzLmMgYi9hcmNoL2FybS9tYWNoLW14My9tYWNoLXBjbTA0My5jCmluZGV4IDRlMWRlODcuLmJjZjgzZmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtcGNtMDQzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC1wY20wNDMuYwpAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy9hdDI0Lmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL290Zy5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi91bHBpLmg+Ci0jaW5jbHVkZSA8bGludXgvZnNsX2RldmljZXMuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgpAQCAtMzksNyArMzgsNiBAQAogI2luY2x1ZGUgPG1hY2gvaW9tdXgtbXgzNS5oPgogI2luY2x1ZGUgPG1hY2gvaXB1Lmg+CiAjaW5jbHVkZSA8bWFjaC9teDNmYi5oPgotI2luY2x1ZGUgPG1hY2gvbXhjX2VoY2kuaD4KICNpbmNsdWRlIDxtYWNoL3VscGkuaD4KICNpbmNsdWRlIDxtYWNoL2F1ZG11eC5oPgogCkBAIC0xNDAsMTAgKzEzOCw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmcGNtMDQzX2ZsYXNoLAotCSZpbXhfd2R0X2RldmljZTAsCiB9OwogCi1zdGF0aWMgc3RydWN0IHBhZF9kZXNjIHBjbTA0M19wYWRzW10gPSB7CitzdGF0aWMgaW9tdXhfdjNfY2ZnX3QgcGNtMDQzX3BhZHNbXSA9IHsKIAkvKiBVQVJUMSAqLwogCU1YMzVfUEFEX0NUUzFfX1VBUlQxX0NUUywKIAlNWDM1X1BBRF9SVFMxX19VQVJUMV9SVFMsCkBAIC0yMzAsOCArMjI3LDggQEAKIAogc3RhdGljIHZvaWQgcGNtMDQzX2FjOTdfd2FybV9yZXNldChzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcpCiB7Ci0Jc3RydWN0IHBhZF9kZXNjIHR4ZnNfZ3BpbyA9IE1YMzVfUEFEX1NUWEZTNF9fR1BJTzJfMzE7Ci0Jc3RydWN0IHBhZF9kZXNjIHR4ZnMgPSBNWDM1X1BBRF9TVFhGUzRfX0FVRE1VWF9BVUQ0X1RYRlM7CisJaW9tdXhfdjNfY2ZnX3QgdHhmc19ncGlvID0gTVgzNV9QQURfU1RYRlM0X19HUElPMl8zMTsKKwlpb211eF92M19jZmdfdCB0eGZzID0gTVgzNV9QQURfU1RYRlM0X19BVURNVVhfQVVENF9UWEZTOwogCWludCByZXQ7CiAKIAlyZXQgPSBncGlvX3JlcXVlc3QoQUM5N19HUElPX1RYRlMsICJTU0kiKTsKQEAgLTI0MCw3ICsyMzcsNyBAQAogCQlyZXR1cm47CiAJfQogCi0JbXhjX2lvbXV4X3YzX3NldHVwX3BhZCgmdHhmc19ncGlvKTsKKwlteGNfaW9tdXhfdjNfc2V0dXBfcGFkKHR4ZnNfZ3Bpbyk7CiAKIAkvKiB3YXJtIHJlc2V0ICovCiAJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEFDOTdfR1BJT19UWEZTLCAxKTsKQEAgLTI0OCwxNiArMjQ1LDE2IEBACiAJZ3Bpb19zZXRfdmFsdWUoQUM5N19HUElPX1RYRlMsIDApOwogCiAJZ3Bpb19mcmVlKEFDOTdfR1BJT19UWEZTKTsKLQlteGNfaW9tdXhfdjNfc2V0dXBfcGFkKCZ0eGZzKTsKKwlteGNfaW9tdXhfdjNfc2V0dXBfcGFkKHR4ZnMpOwogfQogCiBzdGF0aWMgdm9pZCBwY20wNDNfYWM5N19jb2xkX3Jlc2V0KHN0cnVjdCBzbmRfYWM5NyAqYWM5NykKIHsKLQlzdHJ1Y3QgcGFkX2Rlc2MgdHhmc19ncGlvID0gTVgzNV9QQURfU1RYRlM0X19HUElPMl8zMTsKLQlzdHJ1Y3QgcGFkX2Rlc2MgdHhmcyA9IE1YMzVfUEFEX1NUWEZTNF9fQVVETVVYX0FVRDRfVFhGUzsKLQlzdHJ1Y3QgcGFkX2Rlc2MgdHhkX2dwaW8gPSBNWDM1X1BBRF9TVFhENF9fR1BJTzJfMjg7Ci0Jc3RydWN0IHBhZF9kZXNjIHR4ZCA9IE1YMzVfUEFEX1NUWEQ0X19BVURNVVhfQVVENF9UWEQ7Ci0Jc3RydWN0IHBhZF9kZXNjIHJlc2V0X2dwaW8gPSBNWDM1X1BBRF9TRDJfQ01EX19HUElPMl8wOworCWlvbXV4X3YzX2NmZ190IHR4ZnNfZ3BpbyA9IE1YMzVfUEFEX1NUWEZTNF9fR1BJTzJfMzE7CisJaW9tdXhfdjNfY2ZnX3QgdHhmcyA9IE1YMzVfUEFEX1NUWEZTNF9fQVVETVVYX0FVRDRfVFhGUzsKKwlpb211eF92M19jZmdfdCB0eGRfZ3BpbyA9IE1YMzVfUEFEX1NUWEQ0X19HUElPMl8yODsKKwlpb211eF92M19jZmdfdCB0eGQgPSBNWDM1X1BBRF9TVFhENF9fQVVETVVYX0FVRDRfVFhEOworCWlvbXV4X3YzX2NmZ190IHJlc2V0X2dwaW8gPSBNWDM1X1BBRF9TRDJfQ01EX19HUElPMl8wOwogCWludCByZXQ7CiAKIAlyZXQgPSBncGlvX3JlcXVlc3QoQUM5N19HUElPX1RYRlMsICJTU0kiKTsKQEAgLTI3Miw5ICsyNjksOSBAQAogCWlmIChyZXQpCiAJCWdvdG8gZXJyMzsKIAotCW14Y19pb211eF92M19zZXR1cF9wYWQoJnR4ZnNfZ3Bpbyk7Ci0JbXhjX2lvbXV4X3YzX3NldHVwX3BhZCgmdHhkX2dwaW8pOwotCW14Y19pb211eF92M19zZXR1cF9wYWQoJnJlc2V0X2dwaW8pOworCW14Y19pb211eF92M19zZXR1cF9wYWQodHhmc19ncGlvKTsKKwlteGNfaW9tdXhfdjNfc2V0dXBfcGFkKHR4ZF9ncGlvKTsKKwlteGNfaW9tdXhfdjNfc2V0dXBfcGFkKHJlc2V0X2dwaW8pOwogCiAJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEFDOTdfR1BJT19UWEZTLCAwKTsKIAlncGlvX2RpcmVjdGlvbl9vdXRwdXQoQUM5N19HUElPX1RYRCwgMCk7CkBAIC0yODQsOCArMjgxLDggQEAKIAl1ZGVsYXkoMTApOwogCWdwaW9fZGlyZWN0aW9uX291dHB1dChBQzk3X0dQSU9fUkVTRVQsIDEpOwogCi0JbXhjX2lvbXV4X3YzX3NldHVwX3BhZCgmdHhkKTsKLQlteGNfaW9tdXhfdjNfc2V0dXBfcGFkKCZ0eGZzKTsKKwlteGNfaW9tdXhfdjNfc2V0dXBfcGFkKHR4ZCk7CisJbXhjX2lvbXV4X3YzX3NldHVwX3BhZCh0eGZzKTsKIAogCWdwaW9fZnJlZShBQzk3X0dQSU9fUkVTRVQpOwogZXJyMzoKQEAgLTMxMSwxOSArMzA4LDE5IEBACiB9OwogCiAjaWYgZGVmaW5lZChDT05GSUdfVVNCX1VMUEkpCi1zdGF0aWMgc3RydWN0IG14Y191c2JoX3BsYXRmb3JtX2RhdGEgb3RnX3BkYXRhID0geworc3RhdGljIHN0cnVjdCBteGNfdXNiaF9wbGF0Zm9ybV9kYXRhIG90Z19wZGF0YSBfX2luaXRkYXRhID0gewogCS5wb3J0c2MJPSBNWENfRUhDSV9NT0RFX1VUTUksCiAJLmZsYWdzCT0gTVhDX0VIQ0lfSU5URVJGQUNFX0RJRkZfVU5JLAogfTsKIAotc3RhdGljIHN0cnVjdCBteGNfdXNiaF9wbGF0Zm9ybV9kYXRhIHVzYmgxX3BkYXRhID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBteGNfdXNiaF9wbGF0Zm9ybV9kYXRhIHVzYmgxX3BkYXRhIF9faW5pdGNvbnN0ID0gewogCS5wb3J0c2MJPSBNWENfRUhDSV9NT0RFX1NFUklBTCwKIAkuZmxhZ3MJPSBNWENfRUhDSV9JTlRFUkZBQ0VfU0lOR0xFX1VOSSB8IE1YQ19FSENJX0lOVEVSTkFMX1BIWSB8CiAJCSAgTVhDX0VIQ0lfSVBQVUVfRE9XTiwKIH07CiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCBmc2xfdXNiMl9wbGF0Zm9ybV9kYXRhIG90Z19kZXZpY2VfcGRhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZzbF91c2IyX3BsYXRmb3JtX2RhdGEgb3RnX2RldmljZV9wZGF0YSBfX2luaXRjb25zdCA9IHsKIAkub3BlcmF0aW5nX21vZGUgPSBGU0xfVVNCMl9EUl9ERVZJQ0UsCiAJLnBoeV9tb2RlICAgICAgID0gRlNMX1VTQjJfUEhZX1VUTUksCiB9OwpAQCAtMzY0LDYgKzM2MSw3IEBACiAKIAlpbXgzNV9hZGRfZmVjKE5VTEwpOwogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZXMsIEFSUkFZX1NJWkUoZGV2aWNlcykpOworCWlteDM1X2FkZF9pbXgyX3dkdChOVUxMKTsKIAogCWlteDM1X2FkZF9pbXhfdWFydDAoJnVhcnRfcGRhdGEpOwogCWlteDM1X2FkZF9teGNfbmFuZCgmcGNtMDM3X25hbmRfYm9hcmRfaW5mbyk7CkBAIC0zODYsMTYgKzM4NCwxNiBAQAogCQlvdGdfcGRhdGEub3RnID0gb3RnX3VscGlfY3JlYXRlKCZteGNfdWxwaV9hY2Nlc3Nfb3BzLAogCQkJCVVMUElfT1RHX0RSVlZCVVMgfCBVTFBJX09UR19EUlZWQlVTX0VYVCk7CiAKLQkJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX290Z19ob3N0LCAmb3RnX3BkYXRhKTsKKwkJaW14MzVfYWRkX214Y19laGNpX290Zygmb3RnX3BkYXRhKTsKIAl9CiAKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdXNiaDEsICZ1c2JoMV9wZGF0YSk7CisJaW14MzVfYWRkX214Y19laGNpX2hzKCZ1c2JoMV9wZGF0YSk7CiAjZW5kaWYKIAlpZiAoIW90Z19tb2RlX2hvc3QpCi0JCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19vdGdfdWRjX2RldmljZSwgJm90Z19kZXZpY2VfcGRhdGEpOworCQlpbXgzNV9hZGRfZnNsX3VzYjJfdWRjKCZvdGdfZGV2aWNlX3BkYXRhKTsKIAogCWlteDM1X2FkZF9mbGV4Y2FuMShOVUxMKTsKLQlpbXgzNV9hZGRfZXNkaGMoMCwgTlVMTCk7CisJaW14MzVfYWRkX3NkaGNpX2VzZGhjX2lteCgwLCBOVUxMKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IHBjbTA0M190aW1lcl9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9tbS5jIGIvYXJjaC9hcm0vbWFjaC1teDMvbW0uYwppbmRleCBiNGZmYzUzLi40NzExOGY3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9tbS5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL21tLmMKQEAgLTM2LDQwICszNiwxNiBAQAogICogQGluZ3JvdXAgTWVtb3J5CiAgKi8KIAotLyohCi0gKiBUaGlzIHRhYmxlIGRlZmluZXMgc3RhdGljIHZpcnR1YWwgYWRkcmVzcyBtYXBwaW5ncyBmb3IgSS9PIHJlZ2lvbnMuCi0gKiBUaGVzZSBhcmUgdGhlIG1hcHBpbmdzIGNvbW1vbiBhY3Jvc3MgYWxsIE1YMyBib2FyZHMuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgbXhjX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0gewotCXsKLQkJLnZpcnR1YWwJPSBYX01FTUNfQkFTRV9BRERSX1ZJUlQsCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbihYX01FTUNfQkFTRV9BRERSKSwKLQkJLmxlbmd0aAkJPSBYX01FTUNfU0laRSwKLQkJLnR5cGUJCT0gTVRfREVWSUNFCi0JfSwgewotCQkudmlydHVhbAk9IEFWSUNfQkFTRV9BRERSX1ZJUlQsCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbihBVklDX0JBU0VfQUREUiksCi0JCS5sZW5ndGgJCT0gQVZJQ19TSVpFLAotCQkudHlwZQkJPSBNVF9ERVZJQ0VfTk9OU0hBUkVECi0JfSwgewotCQkudmlydHVhbAk9IEFJUFMxX0JBU0VfQUREUl9WSVJULAotCQkucGZuCQk9IF9fcGh5c190b19wZm4oQUlQUzFfQkFTRV9BRERSKSwKLQkJLmxlbmd0aAkJPSBBSVBTMV9TSVpFLAotCQkudHlwZQkJPSBNVF9ERVZJQ0VfTk9OU0hBUkVECi0JfSwgewotCQkudmlydHVhbAk9IEFJUFMyX0JBU0VfQUREUl9WSVJULAotCQkucGZuCQk9IF9fcGh5c190b19wZm4oQUlQUzJfQkFTRV9BRERSKSwKLQkJLmxlbmd0aAkJPSBBSVBTMl9TSVpFLAotCQkudHlwZQkJPSBNVF9ERVZJQ0VfTk9OU0hBUkVECi0JfSwgewotCQkudmlydHVhbCA9IFNQQkEwX0JBU0VfQUREUl9WSVJULAotCQkucGZuID0gX19waHlzX3RvX3BmbihTUEJBMF9CQVNFX0FERFIpLAotCQkubGVuZ3RoID0gU1BCQTBfU0laRSwKLQkJLnR5cGUgPSBNVF9ERVZJQ0VfTk9OU0hBUkVECi0JfSwKKyNpZmRlZiBDT05GSUdfU09DX0lNWDMxCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIG14MzFfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJaW14X21hcF9lbnRyeShNWDMxLCBYX01FTUMsIE1UX0RFVklDRSksCisJaW14X21hcF9lbnRyeShNWDMxLCBBVklDLCBNVF9ERVZJQ0VfTk9OU0hBUkVEKSwKKwlpbXhfbWFwX2VudHJ5KE1YMzEsIEFJUFMxLCBNVF9ERVZJQ0VfTk9OU0hBUkVEKSwKKwlpbXhfbWFwX2VudHJ5KE1YMzEsIEFJUFMyLCBNVF9ERVZJQ0VfTk9OU0hBUkVEKSwKKwlpbXhfbWFwX2VudHJ5KE1YMzEsIFNQQkEwLCBNVF9ERVZJQ0VfTk9OU0hBUkVEKSwKIH07CiAKLS8qIQorLyoKICAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIG1lbW9yeSBtYXAuIEl0IGlzIGNhbGxlZCBkdXJpbmcgdGhlCiAgKiBzeXN0ZW0gc3RhcnR1cCB0byBjcmVhdGUgc3RhdGljIHBoeXNpY2FsIHRvIHZpcnR1YWwgbWVtb3J5IG1hcHBpbmdzCiAgKiBmb3IgdGhlIElPIG1vZHVsZXMuCkBAIC03NywzNCArNTMsNDQgQEAKIHZvaWQgX19pbml0IG14MzFfbWFwX2lvKHZvaWQpCiB7CiAJbXhjX3NldF9jcHVfdHlwZShNWENfQ1BVX01YMzEpOwotCW14Y19hcmNoX3Jlc2V0X2luaXQoSU9fQUREUkVTUyhXRE9HX0JBU0VfQUREUikpOworCW14Y19hcmNoX3Jlc2V0X2luaXQoTVgzMV9JT19BRERSRVNTKE1YMzFfV0RPR19CQVNFX0FERFIpKTsKIAotCWlvdGFibGVfaW5pdChteGNfaW9fZGVzYywgQVJSQVlfU0laRShteGNfaW9fZGVzYykpOworCWlvdGFibGVfaW5pdChteDMxX2lvX2Rlc2MsIEFSUkFZX1NJWkUobXgzMV9pb19kZXNjKSk7CiB9CiAKLSNpZmRlZiBDT05GSUdfQVJDSF9NWDM1CitpbnQgaW14MzFfcmVnaXN0ZXJfZ3Bpb3Modm9pZCk7Cit2b2lkIF9faW5pdCBteDMxX2luaXRfaXJxKHZvaWQpCit7CisJbXhjX2luaXRfaXJxKE1YMzFfSU9fQUREUkVTUyhNWDMxX0FWSUNfQkFTRV9BRERSKSk7CisJaW14MzFfcmVnaXN0ZXJfZ3Bpb3MoKTsKK30KKyNlbmRpZiAvKiBpZmRlZiBDT05GSUdfU09DX0lNWDMxICovCisKKyNpZmRlZiBDT05GSUdfU09DX0lNWDM1CitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIG14MzVfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJaW14X21hcF9lbnRyeShNWDM1LCBYX01FTUMsIE1UX0RFVklDRSksCisJaW14X21hcF9lbnRyeShNWDM1LCBBVklDLCBNVF9ERVZJQ0VfTk9OU0hBUkVEKSwKKwlpbXhfbWFwX2VudHJ5KE1YMzUsIEFJUFMxLCBNVF9ERVZJQ0VfTk9OU0hBUkVEKSwKKwlpbXhfbWFwX2VudHJ5KE1YMzUsIEFJUFMyLCBNVF9ERVZJQ0VfTk9OU0hBUkVEKSwKKwlpbXhfbWFwX2VudHJ5KE1YMzUsIFNQQkEwLCBNVF9ERVZJQ0VfTk9OU0hBUkVEKSwKK307CisKIHZvaWQgX19pbml0IG14MzVfbWFwX2lvKHZvaWQpCiB7CiAJbXhjX3NldF9jcHVfdHlwZShNWENfQ1BVX01YMzUpOwotCW14Y19pb211eF92M19pbml0KElPX0FERFJFU1MoSU9NVVhDX0JBU0VfQUREUikpOwotCW14Y19hcmNoX3Jlc2V0X2luaXQoSU9fQUREUkVTUyhXRE9HX0JBU0VfQUREUikpOworCW14Y19pb211eF92M19pbml0KE1YMzVfSU9fQUREUkVTUyhNWDM1X0lPTVVYQ19CQVNFX0FERFIpKTsKKwlteGNfYXJjaF9yZXNldF9pbml0KE1YMzVfSU9fQUREUkVTUyhNWDM1X1dET0dfQkFTRV9BRERSKSk7CiAKLQlpb3RhYmxlX2luaXQobXhjX2lvX2Rlc2MsIEFSUkFZX1NJWkUobXhjX2lvX2Rlc2MpKTsKLX0KLSNlbmRpZgotCi1pbnQgaW14M3hfcmVnaXN0ZXJfZ3Bpb3Modm9pZCk7Ci0KLXZvaWQgX19pbml0IG14MzFfaW5pdF9pcnEodm9pZCkKLXsKLQlteGNfaW5pdF9pcnEoSU9fQUREUkVTUyhBVklDX0JBU0VfQUREUikpOwotCWlteDN4X3JlZ2lzdGVyX2dwaW9zKCk7CisJaW90YWJsZV9pbml0KG14MzVfaW9fZGVzYywgQVJSQVlfU0laRShteDM1X2lvX2Rlc2MpKTsKIH0KIAoraW50IGlteDM1X3JlZ2lzdGVyX2dwaW9zKHZvaWQpOwogdm9pZCBfX2luaXQgbXgzNV9pbml0X2lycSh2b2lkKQogewotCW14MzFfaW5pdF9pcnEoKTsKKwlteGNfaW5pdF9pcnEoTVgzNV9JT19BRERSRVNTKE1YMzVfQVZJQ19CQVNFX0FERFIpKTsKKwlpbXgzNV9yZWdpc3Rlcl9ncGlvcygpOwogfQorI2VuZGlmIC8qIGlmZGVmIENPTkZJR19TT0NfSU1YMzUgKi8KIAogI2lmZGVmIENPTkZJR19DQUNIRV9MMlgwCiBzdGF0aWMgaW50IG14Y19pbml0X2wyeDAodm9pZCkKQEAgLTEyOSw3ICsxMTUsNyBAQAogCQlwcl9lcnIoIkwyIGNhY2hlOiBDYW5ub3QgZml4IHRpbWluZy4gVHJ5aW5nIHRvIGNvbnRpbnVlIHdpdGhvdXRcbiIpOwogCX0KIAotCWwyeDBfYmFzZSA9IGlvcmVtYXAoTDJDQ19CQVNFX0FERFIsIDQwOTYpOworCWwyeDBfYmFzZSA9IGlvcmVtYXAoTVgzeF9MMkNDX0JBU0VfQUREUiwgNDA5Nik7CiAJaWYgKElTX0VSUihsMngwX2Jhc2UpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAicmVtYXBwaW5nIEwyIGNhY2hlIGFyZWEgZmFpbGVkIHdpdGggJWxkXG4iLAogCQkJCVBUUl9FUlIobDJ4MF9iYXNlKSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9teDMxbGlsbHktZGIuYyBiL2FyY2gvYXJtL21hY2gtbXgzL214MzFsaWxseS1kYi5jCmluZGV4IDgyN2ZkM2MuLjhmMWEzOGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL214MzFsaWxseS1kYi5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL214MzFsaWxseS1kYi5jCkBAIC0zNCw3ICszNCw2IEBACiAjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KICNpbmNsdWRlIDxtYWNoL2lvbXV4LW14My5oPgogI2luY2x1ZGUgPG1hY2gvYm9hcmQtbXgzMWxpbGx5Lmg+Ci0jaW5jbHVkZSA8bWFjaC9tbWMuaD4KICNpbmNsdWRlIDxtYWNoL214M2ZiLmg+CiAjaW5jbHVkZSA8bWFjaC9pcHUuaD4KIApAQCAtMTU4LDcgKzE1Nyw3IEBACiAJZnJlZV9pcnEoSU9NVVhfVE9fSVJRKE1YMzFfUElOX0dQSU8xXzEpLCBkYXRhKTsKIH0KIAotc3RhdGljIHN0cnVjdCBpbXhtbWNfcGxhdGZvcm1fZGF0YSBtbWNfcGRhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGlteG1tY19wbGF0Zm9ybV9kYXRhIG1tY19wZGF0YSBfX2luaXRjb25zdCA9IHsKIAkuZ2V0X3JvCT0gbXhjX21tYzFfZ2V0X3JvLAogCS5pbml0CT0gbXhjX21tYzFfaW5pdCwKIAkuZXhpdAk9IG14Y19tbWMxX2V4aXQsCkBAIC0yMTYsNyArMjE1LDcgQEAKIAlpbXgzMV9hZGRfaW14X3VhcnQwKCZ1YXJ0X3BkYXRhKTsKIAlpbXgzMV9hZGRfaW14X3VhcnQxKCZ1YXJ0X3BkYXRhKTsKIAlpbXgzMV9hZGRfaW14X3VhcnQyKCZ1YXJ0X3BkYXRhKTsKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNzZGhjX2RldmljZTAsICZtbWNfcGRhdGEpOworCWlteDMxX2FkZF9teGNfbW1jKDAsICZtbWNfcGRhdGEpOwogCW14MzFsaWxseV9pbml0X2ZiKCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL214MzFsaXRlLWRiLmMgYi9hcmNoL2FybS9tYWNoLW14My9teDMxbGl0ZS1kYi5jCmluZGV4IDdiMGU3NGUuLjMxMjRlYTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL214MzFsaXRlLWRiLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvbXgzMWxpdGUtZGIuYwpAQCAtMzUsNyArMzUsNiBAQAogI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CiAjaW5jbHVkZSA8bWFjaC9pb211eC1teDMuaD4KICNpbmNsdWRlIDxtYWNoL2JvYXJkLW14MzFsaXRlLmg+Ci0jaW5jbHVkZSA8bWFjaC9tbWMuaD4KIAogI2luY2x1ZGUgImRldmljZXMtaW14MzEuaCIKICNpbmNsdWRlICJkZXZpY2VzLmgiCkBAIC0xNDIsNyArMTQxLDcgQEAKIAlmcmVlX2lycShJT01VWF9UT19JUlEoTVgzMV9QSU5fRENEX0RDRTEpLCBkYXRhKTsKIH0KIAotc3RhdGljIHN0cnVjdCBpbXhtbWNfcGxhdGZvcm1fZGF0YSBtbWNfcGRhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGlteG1tY19wbGF0Zm9ybV9kYXRhIG1tY19wZGF0YSBfX2luaXRjb25zdCA9IHsKIAkuZ2V0X3JvCSA9IG14Y19tbWMxX2dldF9ybywKIAkuaW5pdAkgICA9IG14Y19tbWMxX2luaXQsCiAJLmV4aXQJICAgPSBteGNfbW1jMV9leGl0LApAQCAtMTk3LDEwICsxOTYsOSBAQAogCQkJCQlBUlJBWV9TSVpFKGxpdGVraXRfZGJfYm9hcmRfcGlucyksCiAJCQkJCSJkZXZlbG9wbWVudCBib2FyZCBwaW5zIik7CiAJaW14MzFfYWRkX2lteF91YXJ0MCgmdWFydF9wZGF0YSk7Ci0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjc2RoY19kZXZpY2UwLCAmbW1jX3BkYXRhKTsKKwlpbXgzMV9hZGRfbXhjX21tYygwLCAmbW1jX3BkYXRhKTsKIAlpbXgzMV9hZGRfc3BpX2lteDAoJnNwaTBfcGRhdGEpOwogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmbGl0ZWtpdF9sZWRfZGV2aWNlKTsKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZpbXhfd2R0X2RldmljZTAsIE5VTEwpOworCWlteDMxX2FkZF9pbXgyX3dkdChOVUxMKTsKIAlteGNfcmVnaXN0ZXJfZGV2aWNlKCZpbXhfcnRjX2RldmljZTAsIE5VTEwpOwogfQotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9teDMxbW9ib2FyZC1kZXZib2FyZC5jIGIvYXJjaC9hcm0vbWFjaC1teDMvbXgzMW1vYm9hcmQtZGV2Ym9hcmQuYwppbmRleCBmYzM5NWE3Li45NGEwYjllIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9teDMxbW9ib2FyZC1kZXZib2FyZC5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL214MzFtb2JvYXJkLWRldmJvYXJkLmMKQEAgLTE4LDE1ICsxOCwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzbF9kZXZpY2VzLmg+CiAKICNpbmNsdWRlIDxsaW51eC91c2Ivb3RnLmg+CiAKICNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgogI2luY2x1ZGUgPG1hY2gvaW9tdXgtbXgzLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvbW1jLmg+Ci0jaW5jbHVkZSA8bWFjaC9teGNfZWhjaS5oPgogI2luY2x1ZGUgPG1hY2gvdWxwaS5oPgogCiAjaW5jbHVkZSAiZGV2aWNlcy1pbXgzMS5oIgpAQCAtMTAzLDcgKzEwMCw3IEBACiAJZ3Bpb19mcmVlKFNESEMyX0NEKTsKIH0KIAotc3RhdGljIHN0cnVjdCBpbXhtbWNfcGxhdGZvcm1fZGF0YSBzZGhjMl9wZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW14bW1jX3BsYXRmb3JtX2RhdGEgc2RoYzJfcGRhdGEgX19pbml0Y29uc3QgPSB7CiAJLmdldF9ybwk9IGRldmJvYXJkX3NkaGMyX2dldF9ybywKIAkuaW5pdAk9IGRldmJvYXJkX3NkaGMyX2luaXQsCiAJLmV4aXQJPSBkZXZib2FyZF9zZGhjMl9leGl0LApAQCAtMTg3LDcgKzE4NCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbXhjX3VzYmhfcGxhdGZvcm1fZGF0YSB1c2JoMV9wZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgbXhjX3VzYmhfcGxhdGZvcm1fZGF0YSB1c2JoMV9wZGF0YSBfX2luaXRkYXRhID0gewogCS5pbml0CT0gZGV2Ym9hcmRfdXNiaDFfaHdfaW5pdCwKIAkucG9ydHNjCT0gTVhDX0VIQ0lfTU9ERV9VVE1JIHwgTVhDX0VIQ0lfU0VSSUFMLAogCS5mbGFncwk9IE1YQ19FSENJX1BPV0VSX1BJTlNfRU5BQkxFRCB8IE1YQ19FSENJX0lOVEVSRkFDRV9TSU5HTEVfVU5JLApAQCAtMTk2LDYgKzE5Myw3IEBACiBzdGF0aWMgaW50IF9faW5pdCBkZXZib2FyZF91c2JoMV9pbml0KHZvaWQpCiB7CiAJc3RydWN0IG90Z190cmFuc2NlaXZlciAqb3RnOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CiAKIAlvdGcgPSBremFsbG9jKHNpemVvZigqb3RnKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFvdGcpCkBAIC0yMDcsMTEgKzIwNSwxNSBAQAogCiAJdXNiaDFfcGRhdGEub3RnID0gb3RnOwogCi0JcmV0dXJuIG14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191c2JoMSwgJnVzYmgxX3BkYXRhKTsKKwlwZGV2ID0gaW14MzFfYWRkX214Y19laGNpX2hzKDEsICZ1c2JoMV9wZGF0YSk7CisJaWYgKElTX0VSUihwZGV2KSkKKwkJcmV0dXJuIFBUUl9FUlIocGRldik7CisKKwlyZXR1cm4gMDsKIH0KIAogCi1zdGF0aWMgc3RydWN0IGZzbF91c2IyX3BsYXRmb3JtX2RhdGEgdXNiX3BkYXRhID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmc2xfdXNiMl9wbGF0Zm9ybV9kYXRhIHVzYl9wZGF0YSBfX2luaXRjb25zdCA9IHsKIAkub3BlcmF0aW5nX21vZGUJPSBGU0xfVVNCMl9EUl9ERVZJQ0UsCiAJLnBoeV9tb2RlCT0gRlNMX1VTQjJfUEhZX1VMUEksCiB9OwpAQCAtMjI4LDExICsyMzAsMTEgQEAKIAogCWlteDMxX2FkZF9pbXhfdWFydDEoJnVhcnRfcGRhdGEpOwogCi0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjc2RoY19kZXZpY2UxLCAmc2RoYzJfcGRhdGEpOworCWlteDMxX2FkZF9teGNfbW1jKDEsICZzZGhjMl9wZGF0YSk7CiAKIAlkZXZib2FyZF9pbml0X3NlbF9ncGlvcygpOwogCi0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX290Z191ZGNfZGV2aWNlLCAmdXNiX3BkYXRhKTsKKwlpbXgzMV9hZGRfZnNsX3VzYjJfdWRjKCZ1c2JfcGRhdGEpOwogCiAJZGV2Ym9hcmRfdXNiaDFfaW5pdCgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvbXgzMW1vYm9hcmQtbWFyeGJvdC5jIGIvYXJjaC9hcm0vbWFjaC1teDMvbXgzMW1vYm9hcmQtbWFyeGJvdC5jCmluZGV4IDE4MDY5Y2IuLmY0NDlhOTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL214MzFtb2JvYXJkLW1hcnhib3QuYworKysgYi9hcmNoL2FybS9tYWNoLW14My9teDMxbW9ib2FyZC1tYXJ4Ym90LmMKQEAgLTIxLDcgKzIxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9mc2xfZGV2aWNlcy5oPgogCiAjaW5jbHVkZSA8bGludXgvdXNiL290Zy5oPgogCkBAIC0yOSwxMiArMjgsMTEgQEAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9pbXgtdWFydC5oPgogI2luY2x1ZGUgPG1hY2gvaW9tdXgtbXgzLmg+Ci0jaW5jbHVkZSA8bWFjaC9tbWMuaD4KLSNpbmNsdWRlIDxtYWNoL214Y19laGNpLmg+CiAjaW5jbHVkZSA8bWFjaC91bHBpLmg+CiAKICNpbmNsdWRlIDxtZWRpYS9zb2NfY2FtZXJhLmg+CiAKKyNpbmNsdWRlICJkZXZpY2VzLWlteDMxLmgiCiAjaW5jbHVkZSAiZGV2aWNlcy5oIgogCiBzdGF0aWMgdW5zaWduZWQgaW50IG1hcnhib3RfcGluc1tdID0gewpAQCAtMTE2LDcgKzExNCw3IEBACiAJZ3Bpb19mcmVlKFNESEMyX0NEKTsKIH0KIAotc3RhdGljIHN0cnVjdCBpbXhtbWNfcGxhdGZvcm1fZGF0YSBzZGhjMl9wZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW14bW1jX3BsYXRmb3JtX2RhdGEgc2RoYzJfcGRhdGEgX19pbml0Y29uc3QgPSB7CiAJLmdldF9ybwk9IG1hcnhib3Rfc2RoYzJfZ2V0X3JvLAogCS5pbml0CT0gbWFyeGJvdF9zZGhjMl9pbml0LAogCS5leGl0CT0gbWFyeGJvdF9zZGhjMl9leGl0LApAQCAtMzAyLDcgKzMwMCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbXhjX3VzYmhfcGxhdGZvcm1fZGF0YSB1c2JoMV9wZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgbXhjX3VzYmhfcGxhdGZvcm1fZGF0YSB1c2JoMV9wZGF0YSBfX2luaXRkYXRhID0gewogCS5pbml0CT0gbWFyeGJvdF91c2JoMV9od19pbml0LAogCS5wb3J0c2MJPSBNWENfRUhDSV9NT0RFX1VUTUkgfCBNWENfRUhDSV9TRVJJQUwsCiAJLmZsYWdzCT0gTVhDX0VIQ0lfUE9XRVJfUElOU19FTkFCTEVEIHwgTVhDX0VIQ0lfSU5URVJGQUNFX1NJTkdMRV9VTkksCkBAIC0zMTEsNiArMzA5LDcgQEAKIHN0YXRpYyBpbnQgX19pbml0IG1hcnhib3RfdXNiaDFfaW5pdCh2b2lkKQogewogCXN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIgKm90ZzsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwogCiAJb3RnID0ga3phbGxvYyhzaXplb2YoKm90ZyksIEdGUF9LRVJORUwpOwogCWlmICghb3RnKQpAQCAtMzIyLDEwICszMjEsMTQgQEAKIAogCXVzYmgxX3BkYXRhLm90ZyA9IG90ZzsKIAotCXJldHVybiBteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdXNiaDEsICZ1c2JoMV9wZGF0YSk7CisJcGRldiA9IGlteDMxX2FkZF9teGNfZWhjaV9ocygxLCAmdXNiaDFfcGRhdGEpOworCWlmIChJU19FUlIocGRldikpCisJCXJldHVybiBQVFJfRVJSKHBkZXYpOworCisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZnNsX3VzYjJfcGxhdGZvcm1fZGF0YSB1c2JfcGRhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZzbF91c2IyX3BsYXRmb3JtX2RhdGEgdXNiX3BkYXRhIF9faW5pdGNvbnN0ID0gewogCS5vcGVyYXRpbmdfbW9kZQk9IEZTTF9VU0IyX0RSX0RFVklDRSwKIAkucGh5X21vZGUJPSBGU0xfVVNCMl9QSFlfVUxQSSwKIH07CkBAIC0zNDQsNyArMzQ3LDcgQEAKIAogCWRzcGljc19yZXNldHNfaW5pdCgpOwogCi0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjc2RoY19kZXZpY2UxLCAmc2RoYzJfcGRhdGEpOworCWlteDMxX2FkZF9teGNfbW1jKDEsICZzZGhjMl9wZGF0YSk7CiAKIAlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyhtYXJ4Ym90X3NwaV9ib2FyZF9pbmZvLAogCQlBUlJBWV9TSVpFKG1hcnhib3Rfc3BpX2JvYXJkX2luZm8pKTsKQEAgLTM1Nyw3ICszNjAsNyBAQAogCWdwaW9fZGlyZWN0aW9uX2lucHV0KElPTVVYX1RPX0dQSU8oTVgzMV9QSU5fTENTMCkpOwogCWdwaW9fZXhwb3J0KElPTVVYX1RPX0dQSU8oTVgzMV9QSU5fTENTMCksIGZhbHNlKTsKIAotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19vdGdfdWRjX2RldmljZSwgJnVzYl9wZGF0YSk7CisJaW14MzFfYWRkX2ZzbF91c2IyX3VkYygmdXNiX3BkYXRhKTsKIAogCW1hcnhib3RfdXNiaDFfaW5pdCgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvbXgzMW1vYm9hcmQtc21hcnRib3QuYyBiL2FyY2gvYXJtL21hY2gtbXgzL214MzFtb2JvYXJkLXNtYXJ0Ym90LmMKaW5kZXggMDQ3NjBhNS4uYmJlYzNjOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvbXgzMW1vYm9hcmQtc21hcnRib3QuYworKysgYi9hcmNoL2FybS9tYWNoLW14My9teDMxbW9ib2FyZC1zbWFydGJvdC5jCkBAIC0xOSw3ICsxOSw2IEBACiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9mc2xfZGV2aWNlcy5oPgogCiAjaW5jbHVkZSA8bGludXgvdXNiL290Zy5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi91bHBpLmg+CkBAIC0yOCw3ICsyNyw2IEBACiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvaW9tdXgtbXgzLmg+CiAjaW5jbHVkZSA8bWFjaC9ib2FyZC1teDMxbW9ib2FyZC5oPgotI2luY2x1ZGUgPG1hY2gvbXhjX2VoY2kuaD4KICNpbmNsdWRlIDxtYWNoL3VscGkuaD4KIAogI2luY2x1ZGUgPG1lZGlhL3NvY19jYW1lcmEuaD4KQEAgLTExOCwyNCArMTE2LDMwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZnNsX3VzYjJfcGxhdGZvcm1fZGF0YSB1c2JfcGRhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZzbF91c2IyX3BsYXRmb3JtX2RhdGEgdXNiX3BkYXRhIF9faW5pdGNvbnN0ID0gewogCS5vcGVyYXRpbmdfbW9kZQk9IEZTTF9VU0IyX0RSX0RFVklDRSwKIAkucGh5X21vZGUJPSBGU0xfVVNCMl9QSFlfVUxQSSwKIH07CiAKICNpZiBkZWZpbmVkKENPTkZJR19VU0JfVUxQSSkKIAotc3RhdGljIHN0cnVjdCBteGNfdXNiaF9wbGF0Zm9ybV9kYXRhIG90Z19ob3N0X3BkYXRhID0geworc3RhdGljIHN0cnVjdCBteGNfdXNiaF9wbGF0Zm9ybV9kYXRhIG90Z19ob3N0X3BkYXRhIF9faW5pdGRhdGEgPSB7CiAJLnBvcnRzYyA9IE1YQ19FSENJX01PREVfVUxQSSB8IE1YQ19FSENJX1VUTUlfOEJJVCwKIAkuZmxhZ3MJPSBNWENfRUhDSV9QT1dFUl9QSU5TX0VOQUJMRUQsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBzbWFydGJvdF9vdGdfaG9zdF9pbml0KHZvaWQpCiB7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKwogCW90Z19ob3N0X3BkYXRhLm90ZyA9IG90Z191bHBpX2NyZWF0ZSgmbXhjX3VscGlfYWNjZXNzX29wcywKIAkJCVVMUElfT1RHX0RSVlZCVVMgfCBVTFBJX09UR19EUlZWQlVTX0VYVCk7CiAKLQlyZXR1cm4gbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX290Z19ob3N0LCAmb3RnX2hvc3RfcGRhdGEpOworCXBkZXYgPSBpbXgzMV9hZGRfbXhjX2VoY2lfb3RnKCZvdGdfaG9zdF9wZGF0YSk7CisJaWYgKElTX0VSUihwZGV2KSkKKwkJcmV0dXJuIFBUUl9FUlIocGRldik7CisKKwlyZXR1cm4gMDsKIH0KICNlbHNlCiBzdGF0aWMgaW5saW5lIGludCBzbWFydGJvdF9vdGdfaG9zdF9pbml0KHZvaWQpIHsgcmV0dXJuIDA7IH0KQEAgLTE4Miw3ICsxODYsNyBAQAogCiAJc3dpdGNoIChib2FyZCkgewogCWNhc2UgTVgzMVNNQVJUQk9UOgotCQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfb3RnX3VkY19kZXZpY2UsICZ1c2JfcGRhdGEpOworCQlpbXgzMV9hZGRfZnNsX3VzYjJfdWRjKCZ1c2JfcGRhdGEpOwogCQlicmVhazsKIAljYXNlIE1YMzFFWUVCT1Q6CiAJCXNtYXJ0Ym90X290Z19ob3N0X2luaXQoKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXg1L0tjb25maWcgYi9hcmNoL2FybS9tYWNoLW14NS9LY29uZmlnCmluZGV4IDNlYzkxMGEuLjU1MjU0YjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXg1L0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1teDUvS2NvbmZpZwpAQCAtMSwyMCArMSw0NyBAQAogaWYgQVJDSF9NWDUKKyMgQVJDSF9NWDUxIGFuZCBBUkNIX01YNTAgYXJlIGxlZnQgZm9yIGNvbXBhdGliaWxpdHkKKworY29uZmlnIEFSQ0hfTVg1MAorCWJvb2wKIAogY29uZmlnIEFSQ0hfTVg1MQogCWJvb2wKLQlkZWZhdWx0IHkKKworY29uZmlnIEFSQ0hfTVg1MworCWJvb2wKKworY29uZmlnIFNPQ19JTVg1MAorCWJvb2wKIAlzZWxlY3QgTVhDX1RaSUMKIAlzZWxlY3QgQVJDSF9NWENfSU9NVVhfVjMKIAlzZWxlY3QgQVJDSF9NWENfQVVETVVYX1YyCiAJc2VsZWN0IEFSQ0hfSEFTX0NQVUZSRVEKKwlzZWxlY3QgQVJDSF9NWDUwCisKK2NvbmZpZwlTT0NfSU1YNTEKKwlib29sCisJc2VsZWN0IE1YQ19UWklDCisJc2VsZWN0IEFSQ0hfTVhDX0lPTVVYX1YzCisJc2VsZWN0IEFSQ0hfTVhDX0FVRE1VWF9WMgorCXNlbGVjdCBBUkNIX0hBU19DUFVGUkVRCisJc2VsZWN0IEFSQ0hfTVg1MQorCitjb25maWcJU09DX0lNWDUzCisJYm9vbAorCXNlbGVjdCBNWENfVFpJQworCXNlbGVjdCBBUkNIX01YQ19JT01VWF9WMworCXNlbGVjdCBBUkNIX01YNTMKIAogY29tbWVudCAiTVg1IHBsYXRmb3JtczoiCiAKIGNvbmZpZyBNQUNIX01YNTFfQkFCQkFHRQogCWJvb2wgIlN1cHBvcnQgTVg1MSBCQUJCQUdFIHBsYXRmb3JtcyIKKwlzZWxlY3QgU09DX0lNWDUxCisJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0lNWDJfV0RUCiAJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0lNWF9JMkMKIAlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fSU1YX1VBUlQKLQlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fRVNESEMKKwlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fU0RIQ0lfRVNESENfSU1YCisJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX1NQSV9JTVgKIAloZWxwCiAJICBJbmNsdWRlIHN1cHBvcnQgZm9yIE1YNTEgQmFiYmFnZSBwbGF0Zm9ybSwgYWxzbyBrbm93biBhcyBNWDUxRVZLIGluCiAJICB1LWJvb3QuIFRoaXMgaW5jbHVkZXMgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgZm9yIHRoZSBib2FyZCBhbmQgaXRzCkBAIC0yMiw3ICs0OSw5IEBACiAKIGNvbmZpZyBNQUNIX01YNTFfM0RTCiAJYm9vbCAiU3VwcG9ydCBNWDUxUERLICgzRFMpIgorCXNlbGVjdCBTT0NfSU1YNTEKIAlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fSU1YX1VBUlQKKwlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fU0RIQ0lfRVNESENfSU1YCiAJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX1NQSV9JTVgKIAlzZWxlY3QgTVhDX0RFQlVHX0JPQVJECiAJaGVscApAQCAtMzEsNiArNjAsNyBAQAogCiBjb25maWcgTUFDSF9FVUtSRUFfQ1BVSU1YNTEKIAlib29sICJTdXBwb3J0IEV1a3JlYSBDUFVJTVg1MSBtb2R1bGUiCisJc2VsZWN0IFNPQ19JTVg1MQogCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9JTVhfSTJDCiAJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0lNWF9VQVJUCiAJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX01YQ19OQU5ECkBAIC00Nyw3ICs3Nyw3IEBACiBjb25maWcgTUFDSF9FVUtSRUFfTUJJTVg1MV9CQVNFQk9BUkQKIAlwcm9tcHQgIkV1a3JlYSBNQklNWDUxIGRldmVsb3BtZW50IGJvYXJkIgogCWJvb2wKLQlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fRVNESEMKKwlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fU0RIQ0lfRVNESENfSU1YCiAJaGVscAogCSAgVGhpcyBhZGRzIGJvYXJkIHNwZWNpZmljIGRldmljZXMgdGhhdCBjYW4gYmUgZm91bmQgb24gRXVrcmVhJ3MKIAkgIE1CSU1YNTEgZXZhbHVhdGlvbiBib2FyZC4KQEAgLTU2LDYgKzg2LDcgQEAKIAogY29uZmlnIE1BQ0hfRVVLUkVBX0NQVUlNWDUxU0QKIAlib29sICJTdXBwb3J0IEV1a3JlYSBDUFVJTVg1MVNEIG1vZHVsZSIKKwlzZWxlY3QgU09DX0lNWDUxCiAJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0lNWF9JMkMKIAlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fU1BJX0lNWAogCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9JTVhfVUFSVApAQCAtNzIsNyArMTAzLDcgQEAKIGNvbmZpZyBNQUNIX0VVS1JFQV9NQklNWFNENTFfQkFTRUJPQVJECiAJcHJvbXB0ICJFdWtyZWEgTUJJTVhTRCBkZXZlbG9wbWVudCBib2FyZCIKIAlib29sCi0Jc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX0VTREhDCisJc2VsZWN0IElNWF9IQVZFX1BMQVRGT1JNX1NESENJX0VTREhDX0lNWAogCWhlbHAKIAkgIFRoaXMgYWRkcyBib2FyZCBzcGVjaWZpYyBkZXZpY2VzIHRoYXQgY2FuIGJlIGZvdW5kIG9uIEV1a3JlYSdzCiAJICBNQklNWFNEIGV2YWx1YXRpb24gYm9hcmQuCkBAIC04MSw5ICsxMTIsMzMgQEAKIAogY29uZmlnIE1BQ0hfTVg1MV9FRklLQU1YCiAJYm9vbCAiU3VwcG9ydCBNWDUxIEdlbmVzaSBFZmlrYSBNWCBuZXR0b3AiCisJc2VsZWN0IFNPQ19JTVg1MQogCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9JTVhfVUFSVAorCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9TREhDSV9FU0RIQ19JTVgKKwlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fU1BJX0lNWAogCWhlbHAKIAkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgR2VuZXNpIEVmaWthIE1YIG5ldHRvcC4gVGhpcyBpbmNsdWRlcyBzcGVjaWZpYwogCSAgY29uZmlndXJhdGlvbnMgZm9yIHRoZSBib2FyZCBhbmQgaXRzIHBlcmlwaGVyYWxzLgogCitjb25maWcgTUFDSF9NWDUzX0VWSworCWJvb2wgIlN1cHBvcnQgTVg1MyBFVksgcGxhdGZvcm1zIgorCXNlbGVjdCBTT0NfSU1YNTMKKwlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fSU1YX1VBUlQKKwloZWxwCisJICBJbmNsdWRlIHN1cHBvcnQgZm9yIE1YNTMgRVZLIHBsYXRmb3JtLiBUaGlzIGluY2x1ZGVzIHNwZWNpZmljCisJICBjb25maWd1cmF0aW9ucyBmb3IgdGhlIGJvYXJkIGFuZCBpdHMgcGVyaXBoZXJhbHMuCisKKworY29uZmlnIE1BQ0hfTVg1MF9SRFAKKwlib29sICJTdXBwb3J0IE1YNTAgcmVmZXJlbmNlIGRlc2lnbiBwbGF0Zm9ybSIKKwlkZXBlbmRzIG9uIEJST0tFTgorCXNlbGVjdCBTT0NfSU1YNTAKKwlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fSU1YX0kyQworCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9JTVhfVUFSVAorCXNlbGVjdCBJTVhfSEFWRV9QTEFURk9STV9TREhDSV9FU0RIQ19JTVgKKwlzZWxlY3QgSU1YX0hBVkVfUExBVEZPUk1fU1BJX0lNWAorCWhlbHAKKwkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgTVg1MCByZWZlcmVuY2UgZGVzaWduIHBsYXRmb3JtIChSRFApIGJvYXJkLiBUaGlzCisJICBpbmNsdWRlcyBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBmb3IgdGhlIGJvYXJkIGFuZCBpdHMgcGVyaXBoZXJhbHMuCisKIGVuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14NS9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtbXg1L01ha2VmaWxlCmluZGV4IDQ2MmYxNzcuLjBjMzk4YmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXg1L01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtbXg1L01ha2VmaWxlCkBAIC0zLDEzICszLDE2IEBACiAjCiAKICMgT2JqZWN0IGZpbGUgbGlzdHMuCi1vYmoteSAgIDo9IGNwdS5vIG1tLm8gY2xvY2stbXg1MS5vIGRldmljZXMubworb2JqLXkgICA6PSBjcHUubyBtbS5vIGNsb2NrLW14NTEtbXg1My5vIGRldmljZXMubworb2JqLSQoQ09ORklHX1NPQ19JTVg1MCkgKz0gbW0tbXg1MC5vCiAKIG9iai0kKENPTkZJR19DUFVfRlJFUV9JTVgpICAgICs9IGNwdV9vcC1teDUxLm8KIG9iai0kKENPTkZJR19NQUNIX01YNTFfQkFCQkFHRSkgKz0gYm9hcmQtbXg1MV9iYWJiYWdlLm8KIG9iai0kKENPTkZJR19NQUNIX01YNTFfM0RTKSArPSBib2FyZC1teDUxXzNkcy5vCitvYmotJChDT05GSUdfTUFDSF9NWDUzX0VWSykgKz0gYm9hcmQtbXg1M19ldmsubwogb2JqLSQoQ09ORklHX01BQ0hfRVVLUkVBX0NQVUlNWDUxKSArPSBib2FyZC1jcHVpbXg1MS5vCiBvYmotJChDT05GSUdfTUFDSF9FVUtSRUFfTUJJTVg1MV9CQVNFQk9BUkQpICs9IGV1a3JlYV9tYmlteDUxLWJhc2Vib2FyZC5vCiBvYmotJChDT05GSUdfTUFDSF9FVUtSRUFfQ1BVSU1YNTFTRCkgKz0gYm9hcmQtY3B1aW14NTFzZC5vCiBvYmotJChDT05GSUdfTUFDSF9FVUtSRUFfTUJJTVhTRDUxX0JBU0VCT0FSRCkgKz0gZXVrcmVhX21iaW14c2QtYmFzZWJvYXJkLm8KIG9iai0kKENPTkZJR19NQUNIX01YNTFfRUZJS0FNWCkgKz0gYm9hcmQtbXg1MV9lZmlrYW14Lm8KK29iai0kKENPTkZJR19NQUNIX01YNTBfUkRQKSArPSBib2FyZC1teDUwX3JkcC5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14NS9NYWtlZmlsZS5ib290IGIvYXJjaC9hcm0vbWFjaC1teDUvTWFrZWZpbGUuYm9vdAppbmRleCA5OTM5YTE5Li5lOTI4YmUxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14NS9NYWtlZmlsZS5ib290CisrKyBiL2FyY2gvYXJtL21hY2gtbXg1L01ha2VmaWxlLmJvb3QKQEAgLTEsMyArMSw5IEBACi0gICB6cmVsYWRkci15CTo9IDB4OTAwMDgwMDAKLXBhcmFtc19waHlzLXkJOj0gMHg5MDAwMDEwMAotaW5pdHJkX3BoeXMteQk6PSAweDkwODAwMDAwCisgICB6cmVsYWRkci0kKENPTkZJR19BUkNIX01YNTApCTo9IDB4NzAwMDgwMDAKK3BhcmFtc19waHlzLSQoQ09ORklHX0FSQ0hfTVg1MCkJOj0gMHg3MDAwMDEwMAoraW5pdHJkX3BoeXMtJChDT05GSUdfQVJDSF9NWDUwKQk6PSAweDcwODAwMDAwCisgICB6cmVsYWRkci0kKENPTkZJR19BUkNIX01YNTEpCTo9IDB4OTAwMDgwMDAKK3BhcmFtc19waHlzLSQoQ09ORklHX0FSQ0hfTVg1MSkJOj0gMHg5MDAwMDEwMAoraW5pdHJkX3BoeXMtJChDT05GSUdfQVJDSF9NWDUxKQk6PSAweDkwODAwMDAwCisgICB6cmVsYWRkci0kKENPTkZJR19BUkNIX01YNTMpCTo9IDB4NzAwMDgwMDAKK3BhcmFtc19waHlzLSQoQ09ORklHX0FSQ0hfTVg1MykJOj0gMHg3MDAwMDEwMAoraW5pdHJkX3BoeXMtJChDT05GSUdfQVJDSF9NWDUzKQk6PSAweDcwODAwMDAwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14NS9ib2FyZC1jcHVpbXg1MS5jIGIvYXJjaC9hcm0vbWFjaC1teDUvYm9hcmQtY3B1aW14NTEuYwppbmRleCA2YTk3OTJmLi5mODY1MmVmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14NS9ib2FyZC1jcHVpbXg1MS5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXg1L2JvYXJkLWNwdWlteDUxLmMKQEAgLTQwLDExICs0MCwxMSBAQAogI2luY2x1ZGUgImRldmljZXMtaW14NTEuaCIKICNpbmNsdWRlICJkZXZpY2VzLmgiCiAKLSNkZWZpbmUgQ1BVSU1YNTFfVVNCSDFfU1RQCSgwKjMyICsgMjcpCi0jZGVmaW5lIENQVUlNWDUxX1FVQVJUQV9HUElPCSgyKjMyICsgMjgpCi0jZGVmaW5lIENQVUlNWDUxX1FVQVJUQl9HUElPCSgyKjMyICsgMjUpCi0jZGVmaW5lIENQVUlNWDUxX1FVQVJUQ19HUElPCSgyKjMyICsgMjYpCi0jZGVmaW5lIENQVUlNWDUxX1FVQVJURF9HUElPCSgyKjMyICsgMjcpCisjZGVmaW5lIENQVUlNWDUxX1VTQkgxX1NUUAlJTVhfR1BJT19OUigxLCAyNykKKyNkZWZpbmUgQ1BVSU1YNTFfUVVBUlRBX0dQSU8JSU1YX0dQSU9fTlIoMywgMjgpCisjZGVmaW5lIENQVUlNWDUxX1FVQVJUQl9HUElPCUlNWF9HUElPX05SKDMsIDI1KQorI2RlZmluZSBDUFVJTVg1MV9RVUFSVENfR1BJTwlJTVhfR1BJT19OUigzLCAyNikKKyNkZWZpbmUgQ1BVSU1YNTFfUVVBUlREX0dQSU8JSU1YX0dQSU9fTlIoMywgMjcpCiAjZGVmaW5lIENQVUlNWDUxX1FVQVJUQV9JUlEJKE1YQ19JTlRFUk5BTF9JUlFTICsgQ1BVSU1YNTFfUVVBUlRBX0dQSU8pCiAjZGVmaW5lIENQVUlNWDUxX1FVQVJUQl9JUlEJKE1YQ19JTlRFUk5BTF9JUlFTICsgQ1BVSU1YNTFfUVVBUlRCX0dQSU8pCiAjZGVmaW5lIENQVUlNWDUxX1FVQVJUQ19JUlEJKE1YQ19JTlRFUk5BTF9JUlFTICsgQ1BVSU1YNTFfUVVBUlRDX0dQSU8pCkBAIC0xMTMsNyArMTEzLDcgQEAKICNlbmRpZgogfTsKIAotc3RhdGljIHN0cnVjdCBwYWRfZGVzYyBldWtyZWFfY3B1aW14NTFfcGFkc1tdID0geworc3RhdGljIGlvbXV4X3YzX2NmZ190IGV1a3JlYV9jcHVpbXg1MV9wYWRzW10gPSB7CiAJLyogVUFSVDEgKi8KIAlNWDUxX1BBRF9VQVJUMV9SWERfX1VBUlQxX1JYRCwKIAlNWDUxX1BBRF9VQVJUMV9UWERfX1VBUlQxX1RYRCwKQEAgLTEyMSwxNSArMTIxLDE1IEBACiAJTVg1MV9QQURfVUFSVDFfQ1RTX19VQVJUMV9DVFMsCiAKIAkvKiBJMkMyICovCi0JTVg1MV9QQURfR1BJT18xXzJfX0kyQzJfU0NMLAotCU1YNTFfUEFEX0dQSU9fMV8zX19JMkMyX1NEQSwKLQlNWDUxX1BBRF9OQU5ERl9EMTBfX0dQSU9fM18zMCwKKwlNWDUxX1BBRF9HUElPMV8yX19JMkMyX1NDTCwKKwlNWDUxX1BBRF9HUElPMV8zX19JMkMyX1NEQSwKKwlNWDUxX1BBRF9OQU5ERl9EMTBfX0dQSU8zXzMwLAogCiAJLyogUVVBUlQgSVJRICovCi0JTVg1MV9QQURfTkFOREZfRDE1X19HUElPXzNfMjUsCi0JTVg1MV9QQURfTkFOREZfRDE0X19HUElPXzNfMjYsCi0JTVg1MV9QQURfTkFOREZfRDEzX19HUElPXzNfMjcsCi0JTVg1MV9QQURfTkFOREZfRDEyX19HUElPXzNfMjgsCisJTVg1MV9QQURfTkFOREZfRDE1X19HUElPM18yNSwKKwlNWDUxX1BBRF9OQU5ERl9EMTRfX0dQSU8zXzI2LAorCU1YNTFfUEFEX05BTkRGX0QxM19fR1BJTzNfMjcsCisJTVg1MV9QQURfTkFOREZfRDEyX19HUElPM18yOCwKIAogCS8qIFVTQiBIT1NUMSAqLwogCU1YNTFfUEFEX1VTQkgxX0NMS19fVVNCSDFfQ0xLLApAQCAtMTc4LDYgKzE3OCw4IEBACiAJdm9pZCBfX2lvbWVtICp1c2JvdGhlcl9iYXNlOwogCiAJdXNiX2Jhc2UgPSBpb3JlbWFwKE1YNTFfT1RHX0JBU0VfQUREUiwgU1pfNEspOworCWlmICghdXNiX2Jhc2UpCisJCXJldHVybiAtRU5PTUVNOwogCXVzYm90aGVyX2Jhc2UgPSB1c2JfYmFzZSArIE1YNV9VU0JPVEhFUl9SRUdTX09GRlNFVDsKIAogCS8qIFNldCB0aGUgUEhZIGNsb2NrIHRvIDE5LjJNSHogKi8KQEAgLTE5Niw2ICsxOTgsOCBAQAogCXZvaWQgX19pb21lbSAqdXNib3RoZXJfYmFzZTsKIAogCXVzYl9iYXNlID0gaW9yZW1hcChNWDUxX09UR19CQVNFX0FERFIsIFNaXzRLKTsKKwlpZiAoIXVzYl9iYXNlKQorCQlyZXR1cm4gLUVOT01FTTsKIAl1c2JvdGhlcl9iYXNlID0gdXNiX2Jhc2UgKyBNWDVfVVNCT1RIRVJfUkVHU19PRkZTRVQ7CiAKIAkvKiBUaGUgY2xvY2sgZm9yIHRoZSBVU0JIMSBVTFBJIHBvcnQgd2lsbCBjb21lIGV4dGVybmFsbHkgZnJvbSB0aGUgUEhZLiAqLwpAQCAtMjkyLDcgKzI5Niw3IEBACiAKIE1BQ0hJTkVfU1RBUlQoRVVLUkVBX0NQVUlNWDUxLCAiRXVrcmVhIENQVUlNWDUxIE1vZHVsZSIpCiAJLyogTWFpbnRhaW5lcjogRXJpYyBCw6luYXJkIDxlcmljQGV1a3JlYS5jb20+ICovCi0JLmJvb3RfcGFyYW1zID0gUEhZU19PRkZTRVQgKyAweDEwMCwKKwkuYm9vdF9wYXJhbXMgPSBNWDUxX1BIWVNfT0ZGU0VUICsgMHgxMDAsCiAJLm1hcF9pbyA9IG14NTFfbWFwX2lvLAogCS5pbml0X2lycSA9IG14NTFfaW5pdF9pcnEsCiAJLmluaXRfbWFjaGluZSA9IGV1a3JlYV9jcHVpbXg1MV9pbml0LApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDUvYm9hcmQtY3B1aW14NTFzZC5jIGIvYXJjaC9hcm0vbWFjaC1teDUvYm9hcmQtY3B1aW14NTFzZC5jCmluZGV4IDRiM2E2MTEuLmFkOTMxODkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXg1L2JvYXJkLWNwdWlteDUxc2QuYworKysgYi9hcmNoL2FybS9tYWNoLW14NS9ib2FyZC1jcHVpbXg1MXNkLmMKQEAgLTQzLDE5ICs0MywxOSBAQAogI2luY2x1ZGUgImRldmljZXMtaW14NTEuaCIKICNpbmNsdWRlICJkZXZpY2VzLmgiCiAKLSNkZWZpbmUgVVNCSDFfUlNUCQkoMSozMiArIDI4KQotI2RlZmluZSBFVEhfUlNUCQkJKDEqMzIgKyAzMSkKLSNkZWZpbmUgVFNDMjAwN19JUlFHUElPCQkoMiozMiArIDEyKQotI2RlZmluZSBDQU5fSVJRR1BJTwkJKDAqMzIgKyAxKQotI2RlZmluZSBDQU5fUlNUCQkJKDMqMzIgKyAxNSkKLSNkZWZpbmUgQ0FOX05DUwkJCSgzKjMyICsgMjQpCi0jZGVmaW5lIENBTl9SWE9CRgkJKDAqMzIgKyA0KQotI2RlZmluZSBDQU5fUlgxQkYJCSgwKjMyICsgNikKLSNkZWZpbmUgQ0FOX1RYT1JUUwkJKDAqMzIgKyA3KQotI2RlZmluZSBDQU5fVFgxUlRTCQkoMCozMiArIDgpCi0jZGVmaW5lIENBTl9UWDJSVFMJCSgwKjMyICsgOSkKLSNkZWZpbmUgSTJDX1NDTAkJCSgzKjMyICsgMTYpCi0jZGVmaW5lIEkyQ19TREEJCQkoMyozMiArIDE3KQorI2RlZmluZSBVU0JIMV9SU1QJCUlNWF9HUElPX05SKDIsIDI4KQorI2RlZmluZSBFVEhfUlNUCQkJSU1YX0dQSU9fTlIoMiwgMzEpCisjZGVmaW5lIFRTQzIwMDdfSVJRR1BJTwkJSU1YX0dQSU9fTlIoMywgMTIpCisjZGVmaW5lIENBTl9JUlFHUElPCQlJTVhfR1BJT19OUigxLCAxKQorI2RlZmluZSBDQU5fUlNUCQkJSU1YX0dQSU9fTlIoNCwgMTUpCisjZGVmaW5lIENBTl9OQ1MJCQlJTVhfR1BJT19OUig0LCAyNCkKKyNkZWZpbmUgQ0FOX1JYT0JGCQlJTVhfR1BJT19OUigxLCA0KQorI2RlZmluZSBDQU5fUlgxQkYJCUlNWF9HUElPX05SKDEsIDYpCisjZGVmaW5lIENBTl9UWE9SVFMJCUlNWF9HUElPX05SKDEsIDcpCisjZGVmaW5lIENBTl9UWDFSVFMJCUlNWF9HUElPX05SKDEsIDgpCisjZGVmaW5lIENBTl9UWDJSVFMJCUlNWF9HUElPX05SKDEsIDkpCisjZGVmaW5lIEkyQ19TQ0wJCQlJTVhfR1BJT19OUig0LCAxNikKKyNkZWZpbmUgSTJDX1NEQQkJCUlNWF9HUElPX05SKDQsIDE3KQogCiAvKiBVU0JfQ1RSTF8xICovCiAjZGVmaW5lIE1YNTFfVVNCX0NUUkxfMV9PRkZTRVQJCTB4MTAKQEAgLTY1LDEwICs2NSw3IEBACiAjZGVmaW5lCU1YNTFfVVNCX1BMTF9ESVZfMTlfMl9NSFoJMHgwMQogI2RlZmluZQlNWDUxX1VTQl9QTExfRElWXzI0X01IWgkJMHgwMgogCi0jZGVmaW5lIENQVUlNWDUxU0RfR1BJT18zXzEyIElPTVVYX1BBRCgweDU3QywgMHgxOTQsIDMsIDB4MCwgMCwgXAotCQkJCU1YNTFfUEFEX0NUUkxfMSB8IFBBRF9DVExfUFVTXzIyS19VUCkKLQotc3RhdGljIHN0cnVjdCBwYWRfZGVzYyBldWtyZWFfY3B1aW14NTFzZF9wYWRzW10gPSB7CitzdGF0aWMgaW9tdXhfdjNfY2ZnX3QgZXVrcmVhX2NwdWlteDUxc2RfcGFkc1tdID0gewogCS8qIFVBUlQxICovCiAJTVg1MV9QQURfVUFSVDFfUlhEX19VQVJUMV9SWEQsCiAJTVg1MV9QQURfVUFSVDFfVFhEX19VQVJUMV9UWEQsCkBAIC04OCwzMCArODUsMzMgQEAKIAlNWDUxX1BBRF9VU0JIMV9EQVRBNl9fVVNCSDFfREFUQTYsCiAJTVg1MV9QQURfVVNCSDFfREFUQTdfX1VTQkgxX0RBVEE3LAogCU1YNTFfUEFEX1VTQkgxX1NUUF9fVVNCSDFfU1RQLAotCU1YNTFfUEFEX0VJTV9DUzNfX0dQSU9fMl8yOCwJCS8qIFBIWSBuUkVTRVQgKi8KKwlNWDUxX1BBRF9FSU1fQ1MzX19HUElPMl8yOCwJCS8qIFBIWSBuUkVTRVQgKi8KIAogCS8qIEZFQyAqLwotCU1YNTFfUEFEX0VJTV9EVEFDS19fR1BJT18yXzMxLAkJLyogUEhZIG5SRVNFVCAqLworCU1YNTFfUEFEX0VJTV9EVEFDS19fR1BJTzJfMzEsCQkvKiBQSFkgblJFU0VUICovCiAKIAkvKiBIU0kyQyAqLwotCU1YNTFfUEFEX0kyQzFfQ0xLX19HUElPXzRfMTYsCi0JTVg1MV9QQURfSTJDMV9EQVRfX0dQSU9fNF8xNywKKwlNWDUxX1BBRF9JMkMxX0NMS19fR1BJTzRfMTYsCisJTVg1MV9QQURfSTJDMV9EQVRfX0dQSU80XzE3LAogCiAJLyogQ0FOICovCiAJTVg1MV9QQURfQ1NQSTFfTU9TSV9fRUNTUEkxX01PU0ksCiAJTVg1MV9QQURfQ1NQSTFfTUlTT19fRUNTUEkxX01JU08sCiAJTVg1MV9QQURfQ1NQSTFfU0NMS19fRUNTUEkxX1NDTEssCi0JTVg1MV9QQURfQ1NQSTFfU1MwX19HUElPXzRfMjQsCQkvKiBuQ1MgKi8KLQlNWDUxX1BBRF9DU0kyX1BJWENMS19fR1BJT180XzE1LAkvKiBuUmVzZXQgKi8KLQlNWDUxX1BBRF9HUElPXzFfMV9fR1BJT18xXzEsCQkvKiBJUlEgKi8KLQlNWDUxX1BBRF9HUElPXzFfNF9fR1BJT18xXzQsCQkvKiBDb250cm9sIHNpZ25hbHMgKi8KLQlNWDUxX1BBRF9HUElPXzFfNl9fR1BJT18xXzYsCi0JTVg1MV9QQURfR1BJT18xXzdfX0dQSU9fMV83LAotCU1YNTFfUEFEX0dQSU9fMV84X19HUElPXzFfOCwKLQlNWDUxX1BBRF9HUElPXzFfOV9fR1BJT18xXzksCisJTVg1MV9QQURfQ1NQSTFfU1MwX19HUElPNF8yNCwJCS8qIG5DUyAqLworCU1YNTFfUEFEX0NTSTJfUElYQ0xLX19HUElPNF8xNSwJCS8qIG5SZXNldCAqLworCU1YNTFfUEFEX0dQSU8xXzFfX0dQSU8xXzEsCQkvKiBJUlEgKi8KKwlNWDUxX1BBRF9HUElPMV80X19HUElPMV80LAkJLyogQ29udHJvbCBzaWduYWxzICovCisJTVg1MV9QQURfR1BJTzFfNl9fR1BJTzFfNiwKKwlNWDUxX1BBRF9HUElPMV83X19HUElPMV83LAorCU1YNTFfUEFEX0dQSU8xXzhfX0dQSU8xXzgsCisJTVg1MV9QQURfR1BJTzFfOV9fR1BJTzFfOSwKIAogCS8qIFRvdWNoc2NyZWVuICovCi0JQ1BVSU1YNTFTRF9HUElPXzNfMTIsCQkJLyogSVJRICovCisJLyogSVJRICovCisJX01YNTFfUEFEX0NTSTFfRDhfX0dQSU8zXzEyIHwgTVVYX1BBRF9DVFJMKFBBRF9DVExfUFVTXzIyS19VUCB8CisJCQlQQURfQ1RMX1BLRSB8IFBBRF9DVExfU1JFX0ZBU1QgfAorCQkJUEFEX0NUTF9EU0VfSElHSCB8IFBBRF9DVExfUFVFIHwgUEFEX0NUTF9IWVMpLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpbXh1YXJ0X3BsYXRmb3JtX2RhdGEgdWFydF9wZGF0YSBfX2luaXRjb25zdCA9IHsKQEAgLTE1Nyw2ICsxNTcsOCBAQAogCXZvaWQgX19pb21lbSAqdXNib3RoZXJfYmFzZTsKIAogCXVzYl9iYXNlID0gaW9yZW1hcChNWDUxX09UR19CQVNFX0FERFIsIFNaXzRLKTsKKwlpZiAoIXVzYl9iYXNlKQorCQlyZXR1cm4gLUVOT01FTTsKIAl1c2JvdGhlcl9iYXNlID0gdXNiX2Jhc2UgKyBNWDVfVVNCT1RIRVJfUkVHU19PRkZTRVQ7CiAKIAkvKiBTZXQgdGhlIFBIWSBjbG9jayB0byAxOS4yTUh6ICovCkBAIC0xNzUsNiArMTc3LDggQEAKIAl2b2lkIF9faW9tZW0gKnVzYm90aGVyX2Jhc2U7CiAKIAl1c2JfYmFzZSA9IGlvcmVtYXAoTVg1MV9PVEdfQkFTRV9BRERSLCBTWl80Syk7CisJaWYgKCF1c2JfYmFzZSkKKwkJcmV0dXJuIC1FTk9NRU07CiAJdXNib3RoZXJfYmFzZSA9IHVzYl9iYXNlICsgTVg1X1VTQk9USEVSX1JFR1NfT0ZGU0VUOwogCiAJLyogVGhlIGNsb2NrIGZvciB0aGUgVVNCSDEgVUxQSSBwb3J0IHdpbGwgY29tZSBmcm9tIHRoZSBQSFkuICovCkBAIC0yNDMsNyArMjQ3LDcgQEAKIAkJLm1vZGUJCT0gU1BJX01PREVfMCwKIAkJLmNoaXBfc2VsZWN0ICAgICA9IDAsCiAJCS5wbGF0Zm9ybV9kYXRhICAgPSAmbWNwMjUxeF9pbmZvLAotCQkuaXJxICAgICAgICAgICAgID0gZ3Bpb190b19pcnEoMCAqIDMyICsgMSkKKwkJLmlycSAgICAgICAgICAgICA9IGdwaW9fdG9faXJxKENBTl9JUlFHUElPKQogCX0sCiB9OwogCkBAIC0zMjMsNyArMzI3LDcgQEAKIAogTUFDSElORV9TVEFSVChFVUtSRUFfQ1BVSU1YNTFTRCwgIkV1a3JlYSBDUFVJTVg1MVNEIikKIAkvKiBNYWludGFpbmVyOiBFcmljIELDqW5hcmQgPGVyaWNAZXVrcmVhLmNvbT4gKi8KLQkuYm9vdF9wYXJhbXMgPSBQSFlTX09GRlNFVCArIDB4MTAwLAorCS5ib290X3BhcmFtcyA9IE1YNTFfUEhZU19PRkZTRVQgKyAweDEwMCwKIAkubWFwX2lvID0gbXg1MV9tYXBfaW8sCiAJLmluaXRfaXJxID0gbXg1MV9pbml0X2lycSwKIAkuaW5pdF9tYWNoaW5lID0gZXVrcmVhX2NwdWlteDUxc2RfaW5pdCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXg1L2JvYXJkLW14NTBfcmRwLmMgYi9hcmNoL2FybS9tYWNoLW14NS9ib2FyZC1teDUwX3JkcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkMzJlNGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW14NS9ib2FyZC1teDUwX3JkcC5jCkBAIC0wLDAgKzEsMTk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKi8KKworLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZnNsX2RldmljZXMuaD4KKworI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvaW9tdXgtbXg1MC5oPgorCisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKworI2luY2x1ZGUgImRldmljZXMtbXg1MC5oIgorCitzdGF0aWMgaW9tdXhfdjNfY2ZnX3QgbXg1MF9yZHBfcGFkc1tdIF9faW5pdGRhdGEgPSB7CisJLyogU0QxICovCisJTVg1MF9QQURfRUNTUEkyX1NTMF9fR1BJT180XzE5LAorCU1YNTBfUEFEX0VJTV9DUkVfX0dQSU9fMV8yNywKKwlNWDUwX1BBRF9TRDFfQ01EX19TRDFfQ01ELAorCisJTVg1MF9QQURfU0QxX0NMS19fU0QxX0NMSywKKwlNWDUwX1BBRF9TRDFfRDBfX1NEMV9EMCwKKwlNWDUwX1BBRF9TRDFfRDFfX1NEMV9EMSwKKwlNWDUwX1BBRF9TRDFfRDJfX1NEMV9EMiwKKwlNWDUwX1BBRF9TRDFfRDNfX1NEMV9EMywKKworCS8qIFNEMiAqLworCU1YNTBfUEFEX1NEMl9DRF9fR1BJT181XzE3LAorCU1YNTBfUEFEX1NEMl9XUF9fR1BJT181XzE2LAorCU1YNTBfUEFEX1NEMl9DTURfX1NEMl9DTUQsCisJTVg1MF9QQURfU0QyX0NMS19fU0QyX0NMSywKKwlNWDUwX1BBRF9TRDJfRDBfX1NEMl9EMCwKKwlNWDUwX1BBRF9TRDJfRDFfX1NEMl9EMSwKKwlNWDUwX1BBRF9TRDJfRDJfX1NEMl9EMiwKKwlNWDUwX1BBRF9TRDJfRDNfX1NEMl9EMywKKwlNWDUwX1BBRF9TRDJfRDRfX1NEMl9ENCwKKwlNWDUwX1BBRF9TRDJfRDVfX1NEMl9ENSwKKwlNWDUwX1BBRF9TRDJfRDZfX1NEMl9ENiwKKwlNWDUwX1BBRF9TRDJfRDdfX1NEMl9ENywKKworCS8qIFNEMyAqLworCU1YNTBfUEFEX1NEM19DTURfX1NEM19DTUQsCisJTVg1MF9QQURfU0QzX0NMS19fU0QzX0NMSywKKwlNWDUwX1BBRF9TRDNfRDBfX1NEM19EMCwKKwlNWDUwX1BBRF9TRDNfRDFfX1NEM19EMSwKKwlNWDUwX1BBRF9TRDNfRDJfX1NEM19EMiwKKwlNWDUwX1BBRF9TRDNfRDNfX1NEM19EMywKKwlNWDUwX1BBRF9TRDNfRDRfX1NEM19ENCwKKwlNWDUwX1BBRF9TRDNfRDVfX1NEM19ENSwKKwlNWDUwX1BBRF9TRDNfRDZfX1NEM19ENiwKKwlNWDUwX1BBRF9TRDNfRDdfX1NEM19ENywKKworCS8qIFBXUl9JTlQgKi8KKwlNWDUwX1BBRF9FQ1NQSTJfTUlTT19fR1BJT180XzE4LAorCisJLyogVUFSVCBwYWQgc2V0dGluZyAqLworCU1YNTBfUEFEX1VBUlQxX1RYRF9fVUFSVDFfVFhELAorCU1YNTBfUEFEX1VBUlQxX1JYRF9fVUFSVDFfUlhELAorCU1YNTBfUEFEX1VBUlQxX1JUU19fVUFSVDFfUlRTLAorCU1YNTBfUEFEX1VBUlQyX1RYRF9fVUFSVDJfVFhELAorCU1YNTBfUEFEX1VBUlQyX1JYRF9fVUFSVDJfUlhELAorCU1YNTBfUEFEX1VBUlQyX0NUU19fVUFSVDJfQ1RTLAorCU1YNTBfUEFEX1VBUlQyX1JUU19fVUFSVDJfUlRTLAorCisJTVg1MF9QQURfSTJDMV9TQ0xfX0kyQzFfU0NMLAorCU1YNTBfUEFEX0kyQzFfU0RBX19JMkMxX1NEQSwKKwlNWDUwX1BBRF9JMkMyX1NDTF9fSTJDMl9TQ0wsCisJTVg1MF9QQURfSTJDMl9TREFfX0kyQzJfU0RBLAorCisJTVg1MF9QQURfRVBJVE9fX1VTQkgxX1BXUiwKKwkvKiBOZWVkIHRvIGNvbW1lbnQgYmVsb3cgbGluZSBpZgorCSAqIG9uZSBuZWVkcyB0byBkZWJ1ZyBvd2lyZS4KKwkgKi8KKwlNWDUwX1BBRF9PV0lSRV9fVVNCSDFfT0MsCisJLyogdXNpbmcgZ3BpbyB0byBjb250cm9sIG90ZyBwd3IgKi8KKwlNWDUwX1BBRF9QV00yX19HUElPXzZfMjUsCisJTVg1MF9QQURfSTJDM19TQ0xfX1VTQk9UR19PQywKKworCU1YNTBfUEFEX1NTSV9SWENfX0ZFQ19NRElPLAorCU1YNTBfUEFEX1NTSV9SWENfX0ZFQ19NRElPLAorCU1YNTBfUEFEX0RJU1BfRDBfX0ZFQ19UWENMSywKKwlNWDUwX1BBRF9ESVNQX0QxX19GRUNfUlhfRVIsCisJTVg1MF9QQURfRElTUF9EMl9fRkVDX1JYX0RWLAorCU1YNTBfUEFEX0RJU1BfRDNfX0ZFQ19SWEQxLAorCU1YNTBfUEFEX0RJU1BfRDRfX0ZFQ19SWEQwLAorCU1YNTBfUEFEX0RJU1BfRDVfX0ZFQ19UWF9FTiwKKwlNWDUwX1BBRF9ESVNQX0Q2X19GRUNfVFhEMSwKKwlNWDUwX1BBRF9ESVNQX0Q3X19GRUNfVFhEMCwKKwlNWDUwX1BBRF9TU0lfUlhGU19fRkVDX01EQywKKwlNWDUwX1BBRF9JMkMzX1NEQV9fR1BJT182XzIzLAorCU1YNTBfUEFEX0VDU1BJMV9TQ0xLX19HUElPXzRfMTIsCisKKwlNWDUwX1BBRF9DU1BJX1NTMF9fQ1NQSV9TUzAsCisJTVg1MF9QQURfRUNTUEkxX01PU0lfX0NTUElfU1MxLAorCU1YNTBfUEFEX0NTUElfTU9TSV9fQ1NQSV9NT1NJLAorCU1YNTBfUEFEX0NTUElfTUlTT19fQ1NQSV9NSVNPLAorCisJLyogU0dUTDUwMF9PU0NfRU4gKi8KKwlNWDUwX1BBRF9VQVJUMV9DVFNfX0dQSU9fNl84LAorCisJLyogU0dUTF9BTVBfU0hETiAqLworCU1YNTBfUEFEX1VBUlQzX1JYRF9fR1BJT182XzE1LAorCisJLyogS2V5cGFkICovCisJTVg1MF9QQURfS0VZX0NPTDBfX0tFWV9DT0wwLAorCU1YNTBfUEFEX0tFWV9ST1cwX19LRVlfUk9XMCwKKwlNWDUwX1BBRF9LRVlfQ09MMV9fS0VZX0NPTDEsCisJTVg1MF9QQURfS0VZX1JPVzFfX0tFWV9ST1cxLAorCU1YNTBfUEFEX0tFWV9DT0wyX19LRVlfQ09MMiwKKwlNWDUwX1BBRF9LRVlfUk9XMl9fS0VZX1JPVzIsCisJTVg1MF9QQURfS0VZX0NPTDNfX0tFWV9DT0wzLAorCU1YNTBfUEFEX0tFWV9ST1czX19LRVlfUk9XMywKKwlNWDUwX1BBRF9FSU1fREEwX19LRVlfQ09MNCwKKwlNWDUwX1BBRF9FSU1fREExX19LRVlfUk9XNCwKKwlNWDUwX1BBRF9FSU1fREEyX19LRVlfQ09MNSwKKwlNWDUwX1BBRF9FSU1fREEzX19LRVlfUk9XNSwKKwlNWDUwX1BBRF9FSU1fREE0X19LRVlfQ09MNiwKKwlNWDUwX1BBRF9FSU1fREE1X19LRVlfUk9XNiwKKwlNWDUwX1BBRF9FSU1fREE2X19LRVlfQ09MNywKKwlNWDUwX1BBRF9FSU1fREE3X19LRVlfUk9XNywKKwkvKkVJTSBwYWRzICovCisJTVg1MF9QQURfRUlNX0RBOF9fR1BJT18xXzgsCisJTVg1MF9QQURfRUlNX0RBOV9fR1BJT18xXzksCisJTVg1MF9QQURfRUlNX0RBMTBfX0dQSU9fMV8xMCwKKwlNWDUwX1BBRF9FSU1fREExMV9fR1BJT18xXzExLAorCU1YNTBfUEFEX0VJTV9EQTEyX19HUElPXzFfMTIsCisJTVg1MF9QQURfRUlNX0RBMTNfX0dQSU9fMV8xMywKKwlNWDUwX1BBRF9FSU1fREExNF9fR1BJT18xXzE0LAorCU1YNTBfUEFEX0VJTV9EQTE1X19HUElPXzFfMTUsCisJTVg1MF9QQURfRUlNX0NTMl9fR1BJT18xXzE2LAorCU1YNTBfUEFEX0VJTV9DUzFfX0dQSU9fMV8xNywKKwlNWDUwX1BBRF9FSU1fQ1MwX19HUElPXzFfMTgsCisJTVg1MF9QQURfRUlNX0VCMF9fR1BJT18xXzE5LAorCU1YNTBfUEFEX0VJTV9FQjFfX0dQSU9fMV8yMCwKKwlNWDUwX1BBRF9FSU1fV0FJVF9fR1BJT18xXzIxLAorCU1YNTBfUEFEX0VJTV9CQ0xLX19HUElPXzFfMjIsCisJTVg1MF9QQURfRUlNX1JEWV9fR1BJT18xXzIzLAorCU1YNTBfUEFEX0VJTV9PRV9fR1BJT18xXzI0LAorfTsKKworLyogU2VyaWFsIHBvcnRzICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGlteHVhcnRfcGxhdGZvcm1fZGF0YSB1YXJ0X3BkYXRhIF9faW5pdGNvbnN0ID0geworCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCit9OworCisvKgorICogQm9hcmQgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24uCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBteDUwX3JkcF9ib2FyZF9pbml0KHZvaWQpCit7CisJbXhjX2lvbXV4X3YzX3NldHVwX211bHRpcGxlX3BhZHMobXg1MF9yZHBfcGFkcywKKwkJCQkJQVJSQVlfU0laRShteDUwX3JkcF9wYWRzKSk7CisKKwlpbXg1MF9hZGRfaW14X3VhcnQoMCwgJnVhcnRfcGRhdGEpOworCWlteDUwX2FkZF9pbXhfdWFydCgxLCAmdWFydF9wZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBteDUwX3JkcF90aW1lcl9pbml0KHZvaWQpCit7CisJbXg1MF9jbG9ja3NfaW5pdCgzMjc2OCwgMjQwMDAwMDAsIDIyNTc5MjAwKTsKK30KKworc3RhdGljIHN0cnVjdCBzeXNfdGltZXIgbXg1MF9yZHBfdGltZXIgPSB7CisJLmluaXQJPSBteDUwX3JkcF90aW1lcl9pbml0LAorfTsKKworTUFDSElORV9TVEFSVChNWDUwX1JEUCwgIkZyZWVzY2FsZSBNWDUwIFJlZmVyZW5jZSBEZXNpZ24gUGxhdGZvcm0iKQorCS5tYXBfaW8gPSBteDUwX21hcF9pbywKKwkuaW5pdF9pcnEgPSBteDUwX2luaXRfaXJxLAorCS5pbml0X21hY2hpbmUgPSBteDUwX3JkcF9ib2FyZF9pbml0LAorCS50aW1lciA9ICZteDUwX3JkcF90aW1lciwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14NS9ib2FyZC1teDUxXzNkcy5jIGIvYXJjaC9hcm0vbWFjaC1teDUvYm9hcmQtbXg1MV8zZHMuYwppbmRleCA3OWNlOGRjLi5lNDJiZDJlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14NS9ib2FyZC1teDUxXzNkcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXg1L2JvYXJkLW14NTFfM2RzLmMKQEAgLTMwLDcgKzMwLDcgQEAKICNkZWZpbmUgRVhQSU9fUEFSRU5UX0lOVAkoTVhDX0lOVEVSTkFMX0lSUVMgKyBHUElPX1BPUlRBICsgNikKICNkZWZpbmUgTVg1MV8zRFNfRUNTUEkyX0NTCShHUElPX1BPUlRDICsgMjgpCiAKLXN0YXRpYyBzdHJ1Y3QgcGFkX2Rlc2MgbXg1MV8zZHNfcGFkc1tdID0geworc3RhdGljIGlvbXV4X3YzX2NmZ190IG14NTFfM2RzX3BhZHNbXSA9IHsKIAkvKiBVQVJUMSAqLwogCU1YNTFfUEFEX1VBUlQxX1JYRF9fVUFSVDFfUlhELAogCU1YNTFfUEFEX1VBUlQxX1RYRF9fVUFSVDFfVFhELApAQCAtNTAsNyArNTAsNyBAQAogCU1YNTFfUEFEX0VJTV9EMjdfX1VBUlQzX1JUUywKIAogCS8qIENQTEQgUEFSRU5UIElSUSBQSU4gKi8KLQlNWDUxX1BBRF9HUElPXzFfNl9fR1BJT18xXzYsCisJTVg1MV9QQURfR1BJTzFfNl9fR1BJTzFfNiwKIAogCS8qIEtQUCAqLwogCU1YNTFfUEFEX0tFWV9ST1cwX19LRVlfUk9XMCwKQEAgLTY4LDcgKzY4LDcgQEAKIAlNWDUxX1BBRF9OQU5ERl9SQjJfX0VDU1BJMl9TQ0xLLAogCU1YNTFfUEFEX05BTkRGX1JCM19fRUNTUEkyX01JU08sCiAJTVg1MV9QQURfTkFOREZfRDE1X19FQ1NQSTJfTU9TSSwKLQlNWDUxX1BBRF9OQU5ERl9EMTJfX0dQSU9fM18yOCwKKwlNWDUxX1BBRF9OQU5ERl9EMTJfX0dQSU8zXzI4LAogfTsKIAogLyogU2VyaWFsIHBvcnRzICovCkBAIC0xNzIsNiArMTcyLDcgQEAKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiSW5pdCBvZiB0aGUgZGVidWdib2FyZCBmYWlsZWQsIGFsbCAiCiAJCQkJICAgICJkZXZpY2VzIG9uIHRoZSBib2FyZCBhcmUgdW51c2FibGUuXG4iKTsKIAorCWlteDUxX2FkZF9zZGhjaV9lc2RoY19pbXgoMCwgTlVMTCk7CiAJbXhjX2luaXRfa2V5cGFkKCk7CiB9CiAKQEAgLTE4Niw3ICsxODcsNyBAQAogCiBNQUNISU5FX1NUQVJUKE1YNTFfM0RTLCAiRnJlZXNjYWxlIE1YNTEgMy1TdGFjayBCb2FyZCIpCiAJLyogTWFpbnRhaW5lcjogRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gKi8KLQkuYm9vdF9wYXJhbXMgPSBQSFlTX09GRlNFVCArIDB4MTAwLAorCS5ib290X3BhcmFtcyA9IE1YNTFfUEhZU19PRkZTRVQgKyAweDEwMCwKIAkubWFwX2lvID0gbXg1MV9tYXBfaW8sCiAJLmluaXRfaXJxID0gbXg1MV9pbml0X2lycSwKIAkuaW5pdF9tYWNoaW5lID0gbXhjX2JvYXJkX2luaXQsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14NS9ib2FyZC1teDUxX2JhYmJhZ2UuYyBiL2FyY2gvYXJtL21hY2gtbXg1L2JvYXJkLW14NTFfYmFiYmFnZS5jCmluZGV4IGFjYmUzMGQuLjFkMjMxZTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXg1L2JvYXJkLW14NTFfYmFiYmFnZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXg1L2JvYXJkLW14NTFfYmFiYmFnZS5jCkBAIC0yMCw2ICsyMCw4IEBACiAjaW5jbHVkZSA8bGludXgvZmVjLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvZmxhc2guaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAKICNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KQEAgLTM2LDExICszOCwxMyBAQAogI2luY2x1ZGUgImRldmljZXMuaCIKICNpbmNsdWRlICJjcHVfb3AtbXg1MS5oIgogCi0jZGVmaW5lIEJBQkJBR0VfVVNCX0hVQl9SRVNFVAkoMCozMiArIDcpCS8qIEdQSU9fMV83ICovCi0jZGVmaW5lIEJBQkJBR0VfVVNCSDFfU1RQCSgwKjMyICsgMjcpCS8qIEdQSU9fMV8yNyAqLwotI2RlZmluZSBCQUJCQUdFX1BIWV9SRVNFVAkoMSozMiArIDUpCS8qIEdQSU9fMl81ICovCi0jZGVmaW5lIEJBQkJBR0VfRkVDX1BIWV9SRVNFVAkoMSozMiArIDE0KQkvKiBHUElPXzJfMTQgKi8KLSNkZWZpbmUgQkFCQkFHRV9QT1dFUl9LRVkJKDEqMzIgKyAyMSkJLyogR1BJT18yXzIxICovCisjZGVmaW5lIEJBQkJBR0VfVVNCX0hVQl9SRVNFVAlJTVhfR1BJT19OUigxLCA3KQorI2RlZmluZSBCQUJCQUdFX1VTQkgxX1NUUAlJTVhfR1BJT19OUigxLCAyNykKKyNkZWZpbmUgQkFCQkFHRV9QSFlfUkVTRVQJSU1YX0dQSU9fTlIoMiwgNSkKKyNkZWZpbmUgQkFCQkFHRV9GRUNfUEhZX1JFU0VUCUlNWF9HUElPX05SKDIsIDE0KQorI2RlZmluZSBCQUJCQUdFX1BPV0VSX0tFWQlJTVhfR1BJT19OUigyLCAyMSkKKyNkZWZpbmUgQkFCQkFHRV9FQ1NQSTFfQ1MwCUlNWF9HUElPX05SKDQsIDI0KQorI2RlZmluZSBCQUJCQUdFX0VDU1BJMV9DUzEJSU1YX0dQSU9fTlIoNCwgMjUpCiAKIC8qIFVTQl9DVFJMXzEgKi8KICNkZWZpbmUgTVg1MV9VU0JfQ1RSTF8xX09GRlNFVAkJCTB4MTAKQEAgLTY1LDcgKzY5LDcgQEAKIAkubmJ1dHRvbnMJPSBBUlJBWV9TSVpFKGJhYmJhZ2VfYnV0dG9ucyksCiB9OwogCi1zdGF0aWMgc3RydWN0IHBhZF9kZXNjIG14NTFiYWJiYWdlX3BhZHNbXSA9IHsKK3N0YXRpYyBpb211eF92M19jZmdfdCBteDUxYmFiYmFnZV9wYWRzW10gPSB7CiAJLyogVUFSVDEgKi8KIAlNWDUxX1BBRF9VQVJUMV9SWERfX1VBUlQxX1JYRCwKIAlNWDUxX1BBRF9VQVJUMV9UWERfX1VBUlQxX1RYRCwKQEAgLTkxLDggKzk1LDggQEAKIAlNWDUxX1BBRF9LRVlfQ09MNV9fSTJDMl9TREEsCiAKIAkvKiBIU0kyQyAqLwotCU1YNTFfUEFEX0kyQzFfQ0xLX19IU0kyQ19DTEssCi0JTVg1MV9QQURfSTJDMV9EQVRfX0hTSTJDX0RBVCwKKwlNWDUxX1BBRF9JMkMxX0NMS19fSTJDMV9DTEssCisJTVg1MV9QQURfSTJDMV9EQVRfX0kyQzFfREFULAogCiAJLyogVVNCIEhPU1QxICovCiAJTVg1MV9QQURfVVNCSDFfQ0xLX19VU0JIMV9DTEssCkBAIC0xMDgsMjkgKzExMiwyOSBAQAogCU1YNTFfUEFEX1VTQkgxX0RBVEE3X19VU0JIMV9EQVRBNywKIAogCS8qIFVTQiBIVUIgcmVzZXQgbGluZSovCi0JTVg1MV9QQURfR1BJT18xXzdfX0dQSU9fMV83LAorCU1YNTFfUEFEX0dQSU8xXzdfX0dQSU8xXzcsCiAKIAkvKiBGRUMgKi8KIAlNWDUxX1BBRF9FSU1fRUIyX19GRUNfTURJTywKLQlNWDUxX1BBRF9FSU1fRUIzX19GRUNfUkRBVDEsCi0JTVg1MV9QQURfRUlNX0NTMl9fRkVDX1JEQVQyLAotCU1YNTFfUEFEX0VJTV9DUzNfX0ZFQ19SREFUMywKKwlNWDUxX1BBRF9FSU1fRUIzX19GRUNfUkRBVEExLAorCU1YNTFfUEFEX0VJTV9DUzJfX0ZFQ19SREFUQTIsCisJTVg1MV9QQURfRUlNX0NTM19fRkVDX1JEQVRBMywKIAlNWDUxX1BBRF9FSU1fQ1M0X19GRUNfUlhfRVIsCiAJTVg1MV9QQURfRUlNX0NTNV9fRkVDX0NSUywKIAlNWDUxX1BBRF9OQU5ERl9SQjJfX0ZFQ19DT0wsCi0JTVg1MV9QQURfTkFOREZfUkIzX19GRUNfUlhDTEssCi0JTVg1MV9QQURfTkFOREZfUkI2X19GRUNfUkRBVDAsCi0JTVg1MV9QQURfTkFOREZfUkI3X19GRUNfVERBVDAsCisJTVg1MV9QQURfTkFOREZfUkIzX19GRUNfUlhfQ0xLLAorCU1YNTFfUEFEX05BTkRGX0Q5X19GRUNfUkRBVEEwLAorCU1YNTFfUEFEX05BTkRGX0Q4X19GRUNfVERBVEEwLAogCU1YNTFfUEFEX05BTkRGX0NTMl9fRkVDX1RYX0VSLAogCU1YNTFfUEFEX05BTkRGX0NTM19fRkVDX01EQywKLQlNWDUxX1BBRF9OQU5ERl9DUzRfX0ZFQ19UREFUMSwKLQlNWDUxX1BBRF9OQU5ERl9DUzVfX0ZFQ19UREFUMiwKLQlNWDUxX1BBRF9OQU5ERl9DUzZfX0ZFQ19UREFUMywKKwlNWDUxX1BBRF9OQU5ERl9DUzRfX0ZFQ19UREFUQTEsCisJTVg1MV9QQURfTkFOREZfQ1M1X19GRUNfVERBVEEyLAorCU1YNTFfUEFEX05BTkRGX0NTNl9fRkVDX1REQVRBMywKIAlNWDUxX1BBRF9OQU5ERl9DUzdfX0ZFQ19UWF9FTiwKIAlNWDUxX1BBRF9OQU5ERl9SRFlfSU5UX19GRUNfVFhfQ0xLLAogCiAJLyogRkVDIFBIWSByZXNldCBsaW5lICovCi0JTVg1MV9QQURfRUlNX0EyMF9fR1BJT18yXzE0LAorCU1YNTFfUEFEX0VJTV9BMjBfX0dQSU8yXzE0LAogCiAJLyogU0QgMSAqLwogCU1YNTFfUEFEX1NEMV9DTURfX1NEMV9DTUQsCkBAIC0xNDcsNiArMTUxLDEzIEBACiAJTVg1MV9QQURfU0QyX0RBVEExX19TRDJfREFUQTEsCiAJTVg1MV9QQURfU0QyX0RBVEEyX19TRDJfREFUQTIsCiAJTVg1MV9QQURfU0QyX0RBVEEzX19TRDJfREFUQTMsCisKKwkvKiBlQ1NQSTEgKi8KKwlNWDUxX1BBRF9DU1BJMV9NSVNPX19FQ1NQSTFfTUlTTywKKwlNWDUxX1BBRF9DU1BJMV9NT1NJX19FQ1NQSTFfTU9TSSwKKwlNWDUxX1BBRF9DU1BJMV9TQ0xLX19FQ1NQSTFfU0NMSywKKwlNWDUxX1BBRF9DU1BJMV9TUzBfX0dQSU80XzI0LAorCU1YNTFfUEFEX0NTUEkxX1NTMV9fR1BJTzRfMjUsCiB9OwogCiAvKiBTZXJpYWwgcG9ydHMgKi8KQEAgLTE3NywxMiArMTg4LDEyIEBACiAKIHN0YXRpYyBpbnQgZ3Bpb191c2JoMV9hY3RpdmUodm9pZCkKIHsKLQlzdHJ1Y3QgcGFkX2Rlc2MgdXNiaDFzdHBfZ3BpbyA9IE1YNTFfUEFEX1VTQkgxX1NUUF9fR1BJT18xXzI3OwotCXN0cnVjdCBwYWRfZGVzYyBwaHlyZXNldF9ncGlvID0gTVg1MV9QQURfRUlNX0QyMV9fR1BJT18yXzU7CisJaW9tdXhfdjNfY2ZnX3QgdXNiaDFzdHBfZ3BpbyA9IE1YNTFfUEFEX1VTQkgxX1NUUF9fR1BJTzFfMjc7CisJaW9tdXhfdjNfY2ZnX3QgcGh5cmVzZXRfZ3BpbyA9IE1YNTFfUEFEX0VJTV9EMjFfX0dQSU8yXzU7CiAJaW50IHJldDsKIAogCS8qIFNldCBVU0JIMV9TVFAgdG8gR1BJTyBhbmQgdG9nZ2xlIGl0ICovCi0JbXhjX2lvbXV4X3YzX3NldHVwX3BhZCgmdXNiaDFzdHBfZ3Bpbyk7CisJbXhjX2lvbXV4X3YzX3NldHVwX3BhZCh1c2JoMXN0cF9ncGlvKTsKIAlyZXQgPSBncGlvX3JlcXVlc3QoQkFCQkFHRV9VU0JIMV9TVFAsICJ1c2JoMV9zdHAiKTsKIAogCWlmIChyZXQpIHsKQEAgLTE5NSw3ICsyMDYsNyBAQAogCWdwaW9fZnJlZShCQUJCQUdFX1VTQkgxX1NUUCk7CiAKIAkvKiBEZS1hc3NlcnQgVVNCIFBIWSBSRVNFVEIgKi8KLQlteGNfaW9tdXhfdjNfc2V0dXBfcGFkKCZwaHlyZXNldF9ncGlvKTsKKwlteGNfaW9tdXhfdjNfc2V0dXBfcGFkKHBoeXJlc2V0X2dwaW8pOwogCXJldCA9IGdwaW9fcmVxdWVzdChCQUJCQUdFX1BIWV9SRVNFVCwgInBoeV9yZXNldCIpOwogCiAJaWYgKHJldCkgewpAQCAtMjUxLDYgKzI2Miw4IEBACiAJdm9pZCBfX2lvbWVtICp1c2JvdGhlcl9iYXNlOwogCiAJdXNiX2Jhc2UgPSBpb3JlbWFwKE1YNTFfT1RHX0JBU0VfQUREUiwgU1pfNEspOworCWlmICghdXNiX2Jhc2UpCisJCXJldHVybiAtRU5PTUVNOwogCXVzYm90aGVyX2Jhc2UgPSB1c2JfYmFzZSArIE1YNV9VU0JPVEhFUl9SRUdTX09GRlNFVDsKIAogCS8qIFNldCB0aGUgUEhZIGNsb2NrIHRvIDE5LjJNSHogKi8KQEAgLTI2OSw2ICsyODIsOCBAQAogCXZvaWQgX19pb21lbSAqdXNib3RoZXJfYmFzZTsKIAogCXVzYl9iYXNlID0gaW9yZW1hcChNWDUxX09UR19CQVNFX0FERFIsIFNaXzRLKTsKKwlpZiAoIXVzYl9iYXNlKQorCQlyZXR1cm4gLUVOT01FTTsKIAl1c2JvdGhlcl9iYXNlID0gdXNiX2Jhc2UgKyBNWDVfVVNCT1RIRVJfUkVHU19PRkZTRVQ7CiAKIAkvKiBUaGUgY2xvY2sgZm9yIHRoZSBVU0JIMSBVTFBJIHBvcnQgd2lsbCBjb21lIGV4dGVybmFsbHkgZnJvbSB0aGUgUEhZLiAqLwpAQCAtMzEwLDEzICszMjUsMzUgQEAKIH0KIF9fc2V0dXAoIm90Z19tb2RlPSIsIGJhYmJhZ2Vfb3RnX21vZGUpOwogCitzdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIG14NTFfYmFiYmFnZV9zcGlfYm9hcmRfaW5mb1tdIF9faW5pdGRhdGEgPSB7CisJeworCQkubW9kYWxpYXMgPSAibXRkX2RhdGFmbGFzaCIsCisJCS5tYXhfc3BlZWRfaHogPSAyNTAwMDAwMCwKKwkJLmJ1c19udW0gPSAwLAorCQkuY2hpcF9zZWxlY3QgPSAxLAorCQkubW9kZSA9IFNQSV9NT0RFXzAsCisJCS5wbGF0Zm9ybV9kYXRhID0gTlVMTCwKKwl9LAorfTsKKworc3RhdGljIGludCBteDUxX2JhYmJhZ2Vfc3BpX2NzW10gPSB7CisJQkFCQkFHRV9FQ1NQSTFfQ1MwLAorCUJBQkJBR0VfRUNTUEkxX0NTMSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3BpX2lteF9tYXN0ZXIgbXg1MV9iYWJiYWdlX3NwaV9wZGF0YSBfX2luaXRjb25zdCA9IHsKKwkuY2hpcHNlbGVjdCAgICAgPSBteDUxX2JhYmJhZ2Vfc3BpX2NzLAorCS5udW1fY2hpcHNlbGVjdCA9IEFSUkFZX1NJWkUobXg1MV9iYWJiYWdlX3NwaV9jcyksCit9OworCiAvKgogICogQm9hcmQgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24uCiAgKi8KIHN0YXRpYyB2b2lkIF9faW5pdCBteGNfYm9hcmRfaW5pdCh2b2lkKQogewotCXN0cnVjdCBwYWRfZGVzYyB1c2JoMXN0cCA9IE1YNTFfUEFEX1VTQkgxX1NUUF9fVVNCSDFfU1RQOwotCXN0cnVjdCBwYWRfZGVzYyBwb3dlcl9rZXkgPSBNWDUxX1BBRF9FSU1fQTI3X19HUElPXzJfMjE7CisJaW9tdXhfdjNfY2ZnX3QgdXNiaDFzdHAgPSBNWDUxX1BBRF9VU0JIMV9TVFBfX1VTQkgxX1NUUDsKKwlpb211eF92M19jZmdfdCBwb3dlcl9rZXkgPSBfTVg1MV9QQURfRUlNX0EyN19fR1BJTzJfMjEgfAorCQlNVVhfUEFEX0NUUkwoUEFEX0NUTF9TUkVfRkFTVCB8IFBBRF9DVExfRFNFX0hJR0ggfCBQQURfQ1RMX1BVU18xMDBLX1VQKTsKIAogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9GUkVRX0lNWCkKIAlnZXRfY3B1X29wID0gbXg1MV9nZXRfY3B1X29wOwpAQCAtMzI4LDggKzM2NSw3IEBACiAJaW14NTFfYWRkX2ZlYyhOVUxMKTsKIAogCS8qIFNldCB0aGUgUEFEIHNldHRpbmdzIGZvciB0aGUgcHdyIGtleS4gKi8KLQlwb3dlcl9rZXkucGFkX2N0cmwgPSBNWDUxX0dQSU9fUEFEX0NUUkxfMjsKLQlteGNfaW9tdXhfdjNfc2V0dXBfcGFkKCZwb3dlcl9rZXkpOworCW14Y19pb211eF92M19zZXR1cF9wYWQocG93ZXJfa2V5KTsKIAlpbXg1MV9hZGRfZ3Bpb19rZXlzKCZpbXhfYnV0dG9uX2RhdGEpOwogCiAJaW14NTFfYWRkX2lteF9pMmMoMCwgJmJhYmJhZ2VfaTJjX2RhdGEpOwpAQCAtMzQ2LDExICszODIsMTYgQEAKIAlncGlvX3VzYmgxX2FjdGl2ZSgpOwogCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191c2JoMV9kZXZpY2UsICZ1c2JoMV9jb25maWcpOwogCS8qIHNldGJhY2sgVVNCSDFfU1RQIHRvIGJlIGZ1bmN0aW9uICovCi0JbXhjX2lvbXV4X3YzX3NldHVwX3BhZCgmdXNiaDFzdHApOworCW14Y19pb211eF92M19zZXR1cF9wYWQodXNiaDFzdHApOwogCWJhYmJhZ2VfdXNiaHViX3Jlc2V0KCk7CiAKLQlpbXg1MV9hZGRfZXNkaGMoMCwgTlVMTCk7Ci0JaW14NTFfYWRkX2VzZGhjKDEsIE5VTEwpOworCWlteDUxX2FkZF9zZGhjaV9lc2RoY19pbXgoMCwgTlVMTCk7CisJaW14NTFfYWRkX3NkaGNpX2VzZGhjX2lteCgxLCBOVUxMKTsKKworCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKG14NTFfYmFiYmFnZV9zcGlfYm9hcmRfaW5mbywKKwkJQVJSQVlfU0laRShteDUxX2JhYmJhZ2Vfc3BpX2JvYXJkX2luZm8pKTsKKwlpbXg1MV9hZGRfZWNzcGkoMCwgJm14NTFfYmFiYmFnZV9zcGlfcGRhdGEpOworCWlteDUxX2FkZF9pbXgyX3dkdCgwLCBOVUxMKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IG14NTFfYmFiYmFnZV90aW1lcl9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14NS9ib2FyZC1teDUxX2VmaWthbXguYyBiL2FyY2gvYXJtL21hY2gtbXg1L2JvYXJkLW14NTFfZWZpa2FteC5jCmluZGV4IDZlNjIzYmQuLmI3OTQ2ZjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXg1L2JvYXJkLW14NTFfZWZpa2FteC5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXg1L2JvYXJkLW14NTFfZWZpa2FteC5jCkBAIC0xOCw5ICsxOCwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvZnNsX2RldmljZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvZmxhc2guaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAKICNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KQEAgLTM5LDEyICs0Myw4MSBAQAogCiAjZGVmaW5lCU1YNTFfVVNCX1BMTF9ESVZfMjRfTUhaCTB4MDEKIAotc3RhdGljIHN0cnVjdCBwYWRfZGVzYyBteDUxZWZpa2FteF9wYWRzW10gPSB7CisjZGVmaW5lIEVGSUtBTVhfUENCSUQwCQlJTVhfR1BJT19OUigzLCAxNikKKyNkZWZpbmUgRUZJS0FNWF9QQ0JJRDEJCUlNWF9HUElPX05SKDMsIDE3KQorI2RlZmluZSBFRklLQU1YX1BDQklEMgkJSU1YX0dQSU9fTlIoMywgMTEpCisKKyNkZWZpbmUgRUZJS0FNWF9CTFVFX0xFRAlJTVhfR1BJT19OUigzLCAxMykKKyNkZWZpbmUgRUZJS0FNWF9HUkVFTl9MRUQJSU1YX0dQSU9fTlIoMywgMTQpCisjZGVmaW5lIEVGSUtBTVhfUkVEX0xFRAkJSU1YX0dQSU9fTlIoMywgMTUpCisKKyNkZWZpbmUgRUZJS0FNWF9QT1dFUl9LRVkJSU1YX0dQSU9fTlIoMiwgMzEpCisKKyNkZWZpbmUgRUZJS0FNWF9TUElfQ1MwCQlJTVhfR1BJT19OUig0LCAyNCkKKyNkZWZpbmUgRUZJS0FNWF9TUElfQ1MxCQlJTVhfR1BJT19OUig0LCAyNSkKKworLyogYm9hcmQgMS4xIGRvZXNuJ3QgaGF2ZSBzYW1lIHJlc2V0IGdwaW8gKi8KKyNkZWZpbmUgRUZJS0FNWF9SRVNFVDFfMQlJTVhfR1BJT19OUigzLCAyKQorI2RlZmluZSBFRklLQU1YX1JFU0VUCQlJTVhfR1BJT19OUigxLCA0KQorCisvKiB0aGUgcGNpIGlkcyBwaW4gaGF2ZSBwdWxsIHVwLiB0aGV5J3JlIGRyaXZlbiBsb3cgYWNjb3JkaW5nIHRvIGJvYXJkIGlkICovCisjZGVmaW5lIE1YNTFfUEFEX1BDQklEMAlJT01VWF9QQUQoMHg1MTgsIDB4MTMwLCAzLCAweDAsICAgMCwgUEFEX0NUTF9QVVNfMTAwS19VUCkKKyNkZWZpbmUgTVg1MV9QQURfUENCSUQxCUlPTVVYX1BBRCgweDUxQywgMHgxMzQsIDMsIDB4MCwgICAwLCBQQURfQ1RMX1BVU18xMDBLX1VQKQorI2RlZmluZSBNWDUxX1BBRF9QQ0JJRDIJSU9NVVhfUEFEKDB4NTA0LCAweDEyOCwgMywgMHgwLCAgIDAsIFBBRF9DVExfUFVTXzEwMEtfVVApCisjZGVmaW5lIE1YNTFfUEFEX1BXUktFWQlJT01VWF9QQUQoMHg0OGMsIDB4MGY4LCAxLCAweDAsICAgMCwgUEFEX0NUTF9QVVNfMTAwS19VUCB8IFBBRF9DVExfUEtFKQorCitzdGF0aWMgaW9tdXhfdjNfY2ZnX3QgbXg1MWVmaWthbXhfcGFkc1tdID0gewogCS8qIFVBUlQxICovCiAJTVg1MV9QQURfVUFSVDFfUlhEX19VQVJUMV9SWEQsCiAJTVg1MV9QQURfVUFSVDFfVFhEX19VQVJUMV9UWEQsCiAJTVg1MV9QQURfVUFSVDFfUlRTX19VQVJUMV9SVFMsCiAJTVg1MV9QQURfVUFSVDFfQ1RTX19VQVJUMV9DVFMsCisJLyogYm9hcmQgaWQgKi8KKwlNWDUxX1BBRF9QQ0JJRDAsCisJTVg1MV9QQURfUENCSUQxLAorCU1YNTFfUEFEX1BDQklEMiwKKworCS8qIFNEIDEgKi8KKwlNWDUxX1BBRF9TRDFfQ01EX19TRDFfQ01ELAorCU1YNTFfUEFEX1NEMV9DTEtfX1NEMV9DTEssCisJTVg1MV9QQURfU0QxX0RBVEEwX19TRDFfREFUQTAsCisJTVg1MV9QQURfU0QxX0RBVEExX19TRDFfREFUQTEsCisJTVg1MV9QQURfU0QxX0RBVEEyX19TRDFfREFUQTIsCisJTVg1MV9QQURfU0QxX0RBVEEzX19TRDFfREFUQTMsCisKKwkvKiBTRCAyICovCisJTVg1MV9QQURfU0QyX0NNRF9fU0QyX0NNRCwKKwlNWDUxX1BBRF9TRDJfQ0xLX19TRDJfQ0xLLAorCU1YNTFfUEFEX1NEMl9EQVRBMF9fU0QyX0RBVEEwLAorCU1YNTFfUEFEX1NEMl9EQVRBMV9fU0QyX0RBVEExLAorCU1YNTFfUEFEX1NEMl9EQVRBMl9fU0QyX0RBVEEyLAorCU1YNTFfUEFEX1NEMl9EQVRBM19fU0QyX0RBVEEzLAorCisJLyogU0QvTU1DIFdQL0NEICovCisJTVg1MV9QQURfR1BJTzFfMF9fU0QxX0NELAorCU1YNTFfUEFEX0dQSU8xXzFfX1NEMV9XUCwKKwlNWDUxX1BBRF9HUElPMV83X19TRDJfV1AsCisJTVg1MV9QQURfR1BJTzFfOF9fU0QyX0NELAorCisJLyogbGVkcyAqLworCU1YNTFfUEFEX0NTSTFfRDlfX0dQSU8zXzEzLAorCU1YNTFfUEFEX0NTSTFfVlNZTkNfX0dQSU8zXzE0LAorCU1YNTFfUEFEX0NTSTFfSFNZTkNfX0dQSU8zXzE1LAorCisJLyogcG93ZXIga2V5ICovCisJTVg1MV9QQURfUFdSS0VZLAorCisJLyogc3BpICovCisJTVg1MV9QQURfQ1NQSTFfTU9TSV9fRUNTUEkxX01PU0ksCisJTVg1MV9QQURfQ1NQSTFfTUlTT19fRUNTUEkxX01JU08sCisJTVg1MV9QQURfQ1NQSTFfU1MwX19HUElPNF8yNCwKKwlNWDUxX1BBRF9DU1BJMV9TUzFfX0dQSU80XzI1LAorCU1YNTFfUEFEX0NTUEkxX1JEWV9fRUNTUEkxX1JEWSwKKwlNWDUxX1BBRF9DU1BJMV9TQ0xLX19FQ1NQSTFfU0NMSywKKworCS8qIHJlc2V0ICovCisJTVg1MV9QQURfREkxX1BJTjEzX19HUElPM18yLAorCU1YNTFfUEFEX0dQSU8xXzRfX0dQSU8xXzQsCiB9OwogCiAvKiBTZXJpYWwgcG9ydHMgKi8KQEAgLTc1LDYgKzE0OCw4IEBACiAJdm9pZCBfX2lvbWVtICp1c2JfYmFzZTsKIAl2b2lkIF9faW9tZW0gKnVzYm90aGVyX2Jhc2U7CiAJdXNiX2Jhc2UgPSBpb3JlbWFwKE1YNTFfT1RHX0JBU0VfQUREUiwgU1pfNEspOworCWlmICghdXNiX2Jhc2UpCisJCXJldHVybiAtRU5PTUVNOwogCXVzYm90aGVyX2Jhc2UgPSAodm9pZCBfX2lvbWVtICopKHVzYl9iYXNlICsgTVg1X1VTQk9USEVSX1JFR1NfT0ZGU0VUKTsKIAogCS8qIFNldCB0aGUgUEhZIGNsb2NrIHRvIDE5LjJNSHogKi8KQEAgLTkyLDEyICsxNjcsMTgyIEBACiAJLmZsYWdzICA9IE1YQ19FSENJX0lOVEVSTkFMX1BIWSwKIH07CiAKKy8qICAgUENCSUQyICBQQ0JJRDEgUENCSUQwICBTVEFURQorCTEgICAgICAgMSAgICAgIDEgICAgRVIxOnJldjEuMQorCTEgICAgICAgMSAgICAgIDAgICAgRVIyOnJldjEuMgorCTEgICAgICAgMCAgICAgIDEgICAgRVIzOnJldjEuMworCTEgICAgICAgMCAgICAgIDAgICAgRVI0OnJldjEuNAorKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBteDUxX2VmaWthbXhfYm9hcmRfaWQodm9pZCkKK3sKKwlpbnQgaWQ7CisKKwkvKiB0aGluZ3MgYXJlIHRha2luZyB0aW1lIHRvIHNldHRsZSAqLworCW1zbGVlcCgxNTApOworCisJZ3Bpb19yZXF1ZXN0KEVGSUtBTVhfUENCSUQwLCAicGNiaWQwIik7CisJZ3Bpb19kaXJlY3Rpb25faW5wdXQoRUZJS0FNWF9QQ0JJRDApOworCWdwaW9fcmVxdWVzdChFRklLQU1YX1BDQklEMSwgInBjYmlkMSIpOworCWdwaW9fZGlyZWN0aW9uX2lucHV0KEVGSUtBTVhfUENCSUQxKTsKKwlncGlvX3JlcXVlc3QoRUZJS0FNWF9QQ0JJRDIsICJwY2JpZDIiKTsKKwlncGlvX2RpcmVjdGlvbl9pbnB1dChFRklLQU1YX1BDQklEMik7CisKKwlpZCA9IGdwaW9fZ2V0X3ZhbHVlKEVGSUtBTVhfUENCSUQwKTsKKwlpZCB8PSBncGlvX2dldF92YWx1ZShFRklLQU1YX1BDQklEMSkgPDwgMTsKKwlpZCB8PSBncGlvX2dldF92YWx1ZShFRklLQU1YX1BDQklEMikgPDwgMjsKKworCXN3aXRjaCAoaWQpIHsKKwljYXNlIDc6CisJCXN5c3RlbV9yZXYgPSAweDExOworCQlicmVhazsKKwljYXNlIDY6CisJCXN5c3RlbV9yZXYgPSAweDEyOworCQlicmVhazsKKwljYXNlIDU6CisJCXN5c3RlbV9yZXYgPSAweDEzOworCQlicmVhazsKKwljYXNlIDQ6CisJCXN5c3RlbV9yZXYgPSAweDE0OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlzeXN0ZW1fcmV2ID0gMHgxMDsKKwkJYnJlYWs7CisJfQorCisJaWYgKChzeXN0ZW1fcmV2ID09IDB4MTApCisJCXx8IChzeXN0ZW1fcmV2ID09IDB4MTIpCisJCXx8IChzeXN0ZW1fcmV2ID09IDB4MTQpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSJFZmlrYU1YOiBVbnN1cHBvcnRlZCBib2FyZCByZXZpc2lvbiAxLiV1IVxuIiwKKwkJCXN5c3RlbV9yZXYgJiAweGYpOworCX0KK30KKworc3RhdGljIHN0cnVjdCBncGlvX2xlZCBteDUxX2VmaWthbXhfbGVkc1tdID0geworCXsKKwkJLm5hbWUgPSAiZWZpa2FteDpncmVlbiIsCisJCS5kZWZhdWx0X3RyaWdnZXIgPSAiZGVmYXVsdC1vbiIsCisJCS5ncGlvID0gRUZJS0FNWF9HUkVFTl9MRUQsCisJfSwKKwl7CisJCS5uYW1lID0gImVmaWthbXg6cmVkIiwKKwkJLmRlZmF1bHRfdHJpZ2dlciA9ICJpZGUtZGlzayIsCisJCS5ncGlvID0gRUZJS0FNWF9SRURfTEVELAorCX0sCisJeworCQkubmFtZSA9ICJlZmlrYW14OmJsdWUiLAorCQkuZGVmYXVsdF90cmlnZ2VyID0gIm1tYzAiLAorCQkuZ3BpbyA9IEVGSUtBTVhfQkxVRV9MRUQsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWRfcGxhdGZvcm1fZGF0YSBteDUxX2VmaWthbXhfbGVkc19kYXRhID0geworCS5sZWRzID0gbXg1MV9lZmlrYW14X2xlZHMsCisJLm51bV9sZWRzID0gQVJSQVlfU0laRShteDUxX2VmaWthbXhfbGVkcyksCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBteDUxX2VmaWthbXhfbGVkc19kZXZpY2UgPSB7CisJLm5hbWUgPSAibGVkcy1ncGlvIiwKKwkuaWQgPSAtMSwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZteDUxX2VmaWthbXhfbGVkc19kYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fa2V5c19idXR0b24gbXg1MV9lZmlrYW14X3Bvd2Vya2V5W10gPSB7CisJeworCQkuY29kZSA9IEtFWV9QT1dFUiwKKwkJLmdwaW8gPSBFRklLQU1YX1BPV0VSX0tFWSwKKwkJLnR5cGUgPSBFVl9QV1IsCisJCS5kZXNjID0gIlBvd2VyIEJ1dHRvbiAoQ00pIiwKKwkJLndha2V1cCA9IDEsCisJCS5kZWJvdW5jZV9pbnRlcnZhbCA9IDEwLCAvKiBtcyAqLworCX0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGdwaW9fa2V5c19wbGF0Zm9ybV9kYXRhIG14NTFfZWZpa2FteF9wb3dlcmtleV9kYXRhIF9faW5pdGNvbnN0ID0geworCS5idXR0b25zID0gbXg1MV9lZmlrYW14X3Bvd2Vya2V5LAorCS5uYnV0dG9ucyA9IEFSUkFZX1NJWkUobXg1MV9lZmlrYW14X3Bvd2Vya2V5KSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBteDUxX2VmaWthbXhfc3BpX25vcl9wYXJ0aXRpb25zW10gPSB7CisJeworCSAubmFtZSA9ICJ1LWJvb3QiLAorCSAub2Zmc2V0ID0gMCwKKwkgLnNpemUgPSBTWl8yNTZLLAorCX0sCisJeworCSAgLm5hbWUgPSAiY29uZmlnIiwKKwkgIC5vZmZzZXQgPSBNVERQQVJUX09GU19BUFBFTkQsCisJICAuc2l6ZSA9IFNaXzY0SywKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhIG14NTFfZWZpa2FteF9zcGlfZmxhc2hfZGF0YSA9IHsKKwkubmFtZQkJPSAic3BpX2ZsYXNoIiwKKwkucGFydHMJCT0gbXg1MV9lZmlrYW14X3NwaV9ub3JfcGFydGl0aW9ucywKKwkubnJfcGFydHMJPSBBUlJBWV9TSVpFKG14NTFfZWZpa2FteF9zcGlfbm9yX3BhcnRpdGlvbnMpLAorCS50eXBlCQk9ICJzc3QyNXZmMDMyYiIsCit9OworCitzdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIG14NTFfZWZpa2FteF9zcGlfYm9hcmRfaW5mb1tdIF9faW5pdGRhdGEgPSB7CisJeworCQkubW9kYWxpYXMgPSAibTI1cDgwIiwKKwkJLm1heF9zcGVlZF9oeiA9IDI1MDAwMDAwLAorCQkuYnVzX251bSA9IDAsCisJCS5jaGlwX3NlbGVjdCA9IDEsCisJCS5wbGF0Zm9ybV9kYXRhID0gJm14NTFfZWZpa2FteF9zcGlfZmxhc2hfZGF0YSwKKwkJLmlycSA9IC0xLAorCX0sCit9OworCitzdGF0aWMgaW50IG14NTFfZWZpa2FteF9zcGlfY3NbXSA9IHsKKwlFRklLQU1YX1NQSV9DUzAsCisJRUZJS0FNWF9TUElfQ1MxLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzcGlfaW14X21hc3RlciBteDUxX2VmaWthbXhfc3BpX3BkYXRhIF9faW5pdGNvbnN0ID0geworCS5jaGlwc2VsZWN0ICAgICA9IG14NTFfZWZpa2FteF9zcGlfY3MsCisJLm51bV9jaGlwc2VsZWN0ID0gQVJSQVlfU0laRShteDUxX2VmaWthbXhfc3BpX2NzKSwKK307CisKK3ZvaWQgbXg1MV9lZmlrYW14X3Jlc2V0KHZvaWQpCit7CisJaWYgKHN5c3RlbV9yZXYgPT0gMHgxMSkKKwkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEVGSUtBTVhfUkVTRVQxXzEsIDApOworCWVsc2UKKwkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEVGSUtBTVhfUkVTRVQsIDApOworfQorCiBzdGF0aWMgdm9pZCBfX2luaXQgbXhjX2JvYXJkX2luaXQodm9pZCkKIHsKIAlteGNfaW9tdXhfdjNfc2V0dXBfbXVsdGlwbGVfcGFkcyhteDUxZWZpa2FteF9wYWRzLAogCQkJCQlBUlJBWV9TSVpFKG14NTFlZmlrYW14X3BhZHMpKTsKKwlteDUxX2VmaWthbXhfYm9hcmRfaWQoKTsKIAlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdXNiZHJfaG9zdF9kZXZpY2UsICZkcl91dG1pX2NvbmZpZyk7CiAJbXhjX2luaXRfaW14X3VhcnQoKTsKKwlpbXg1MV9hZGRfc2RoY2lfZXNkaGNfaW14KDAsIE5VTEwpOworCisJLyogb24gPCAxLjIgYm9hcmRzIGJvdGggU0QgY29udHJvbGxlcnMgYXJlIHVzZWQgKi8KKwlpZiAoc3lzdGVtX3JldiA8IDB4MTIpIHsKKwkJaW14NTFfYWRkX3NkaGNpX2VzZGhjX2lteCgxLCBOVUxMKTsKKwkJbXg1MV9lZmlrYW14X2xlZHNbMl0uZGVmYXVsdF90cmlnZ2VyID0gIm1tYzEiOworCX0KKworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmbXg1MV9lZmlrYW14X2xlZHNfZGV2aWNlKTsKKwlpbXg1MV9hZGRfZ3Bpb19rZXlzKCZteDUxX2VmaWthbXhfcG93ZXJrZXlfZGF0YSk7CisKKwlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyhteDUxX2VmaWthbXhfc3BpX2JvYXJkX2luZm8sCisJCUFSUkFZX1NJWkUobXg1MV9lZmlrYW14X3NwaV9ib2FyZF9pbmZvKSk7CisJaW14NTFfYWRkX2Vjc3BpKDAsICZteDUxX2VmaWthbXhfc3BpX3BkYXRhKTsKKworCWlmIChzeXN0ZW1fcmV2ID09IDB4MTEpIHsKKwkJZ3Bpb19yZXF1ZXN0KEVGSUtBTVhfUkVTRVQxXzEsICJyZXNldCIpOworCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoRUZJS0FNWF9SRVNFVDFfMSwgMSk7CisJfSBlbHNlIHsKKwkJZ3Bpb19yZXF1ZXN0KEVGSUtBTVhfUkVTRVQsICJyZXNldCIpOworCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoRUZJS0FNWF9SRVNFVCwgMSk7CisJfQogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgbXg1MV9lZmlrYW14X3RpbWVyX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXg1L2JvYXJkLW14NTNfZXZrLmMgYi9hcmNoL2FybS9tYWNoLW14NS9ib2FyZC1teDUzX2V2ay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhOTdkMGQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW14NS9ib2FyZC1teDUzX2V2ay5jCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBZb25nIFNoZW4uIDxZb25nLlNoZW5AbGluYXJvLm9yZz4KKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorI2luY2x1ZGUgPG1hY2gvaW14LXVhcnQuaD4KKyNpbmNsdWRlIDxtYWNoL2lvbXV4LW14NTMuaD4KKworI2luY2x1ZGUgImNybV9yZWdzLmgiCisjaW5jbHVkZSAiZGV2aWNlcy1pbXg1My5oIgorCitzdGF0aWMgaW9tdXhfdjNfY2ZnX3QgbXg1M19ldmtfcGFkc1tdID0geworCU1YNTNfUEFEX0NTSTBfRDEwX19VQVJUMV9UWEQsCisJTVg1M19QQURfQ1NJMF9EMTFfX1VBUlQxX1JYRCwKKwlNWDUzX1BBRF9BVEFfRElPV19fVUFSVDFfVFhELAorCU1YNTNfUEFEX0FUQV9ETUFDS19fVUFSVDFfUlhELAorCisJTVg1M19QQURfQVRBX0JVRkZFUl9FTl9fVUFSVDJfUlhELAorCU1YNTNfUEFEX0FUQV9ETUFSUV9fVUFSVDJfVFhELAorCU1YNTNfUEFEX0FUQV9ESU9SX19VQVJUMl9SVFMsCisJTVg1M19QQURfQVRBX0lOVFJRX19VQVJUMl9DVFMsCisKKwlNWDUzX1BBRF9BVEFfQ1NfMF9fVUFSVDNfVFhELAorCU1YNTNfUEFEX0FUQV9DU18xX19VQVJUM19SWEQsCisJTVg1M19QQURfQVRBX0RBXzFfX1VBUlQzX0NUUywKKwlNWDUzX1BBRF9BVEFfREFfMl9fVUFSVDNfUlRTLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpbXh1YXJ0X3BsYXRmb3JtX2RhdGEgbXg1M19ldmtfdWFydF9wZGF0YSBfX2luaXRjb25zdCA9IHsKKwkuZmxhZ3MgPSBJTVhVQVJUX0hBVkVfUlRTQ1RTLAorfTsKKworc3RhdGljIGlubGluZSB2b2lkIG14NTNfZXZrX2luaXRfdWFydCh2b2lkKQoreworCWlteDUzX2FkZF9pbXhfdWFydCgwLCAmbXg1M19ldmtfdWFydF9wZGF0YSk7CisJaW14NTNfYWRkX2lteF91YXJ0KDEsICZteDUzX2V2a191YXJ0X3BkYXRhKTsKKwlpbXg1M19hZGRfaW14X3VhcnQoMiwgJm14NTNfZXZrX3VhcnRfcGRhdGEpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgbXg1M19ldmtfYm9hcmRfaW5pdCh2b2lkKQoreworCW14Y19pb211eF92M19zZXR1cF9tdWx0aXBsZV9wYWRzKG14NTNfZXZrX3BhZHMsCisJCQkJCUFSUkFZX1NJWkUobXg1M19ldmtfcGFkcykpOworCW14NTNfZXZrX2luaXRfdWFydCgpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgbXg1M19ldmtfdGltZXJfaW5pdCh2b2lkKQoreworCW14NTNfY2xvY2tzX2luaXQoMzI3NjgsIDI0MDAwMDAwLCAyMjU3OTIwMCwgMCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzX3RpbWVyIG14NTNfZXZrX3RpbWVyID0geworCS5pbml0CT0gbXg1M19ldmtfdGltZXJfaW5pdCwKK307CisKK01BQ0hJTkVfU1RBUlQoTVg1M19FVkssICJGcmVlc2NhbGUgTVg1MyBFVksgQm9hcmQiKQorCS5tYXBfaW8gPSBteDUzX21hcF9pbywKKwkuaW5pdF9pcnEgPSBteDUzX2luaXRfaXJxLAorCS5pbml0X21hY2hpbmUgPSBteDUzX2V2a19ib2FyZF9pbml0LAorCS50aW1lciA9ICZteDUzX2V2a190aW1lciwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14NS9jbG9jay1teDUxLW14NTMuYyBiL2FyY2gvYXJtL21hY2gtbXg1L2Nsb2NrLW14NTEtbXg1My5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4NWUxYTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW14NS9jbG9jay1teDUxLW14NTMuYwpAQCAtMCwwICsxLDE0MjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOC0yMDEwIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBBbWl0IEt1Y2hlcmlhIDxhbWl0Lmt1Y2hlcmlhQGNhbm9uaWNhbC5jb20+CisgKgorICogVGhlIGNvZGUgY29udGFpbmVkIGhlcmVpbiBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBWZXJzaW9uIDIgb3IgbGF0ZXIgYXQgdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6CisgKgorICogaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ncGwtbGljZW5zZS5odG1sCisgKiBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvY2xrZGV2Lmg+CisKKyNpbmNsdWRlIDxhc20vZGl2NjQuaD4KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgorI2luY2x1ZGUgPG1hY2gvY2xvY2suaD4KKworI2luY2x1ZGUgImNybV9yZWdzLmgiCisKKy8qIEV4dGVybmFsIGNsb2NrIHZhbHVlcyBwYXNzZWQtaW4gYnkgdGhlIGJvYXJkIGNvZGUgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIGV4dGVybmFsX2hpZ2hfcmVmZXJlbmNlLCBleHRlcm5hbF9sb3dfcmVmZXJlbmNlOworc3RhdGljIHVuc2lnbmVkIGxvbmcgb3NjaWxsYXRvcl9yZWZlcmVuY2UsIGNraWgyX3JlZmVyZW5jZTsKKworc3RhdGljIHN0cnVjdCBjbGsgb3NjX2NsazsKK3N0YXRpYyBzdHJ1Y3QgY2xrIHBsbDFfbWFpbl9jbGs7CitzdGF0aWMgc3RydWN0IGNsayBwbGwxX3N3X2NsazsKK3N0YXRpYyBzdHJ1Y3QgY2xrIHBsbDJfc3dfY2xrOworc3RhdGljIHN0cnVjdCBjbGsgcGxsM19zd19jbGs7CitzdGF0aWMgc3RydWN0IGNsayBteDUzX3BsbDRfc3dfY2xrOworc3RhdGljIHN0cnVjdCBjbGsgbHBfYXBtX2NsazsKK3N0YXRpYyBzdHJ1Y3QgY2xrIHBlcmlwaF9hcG1fY2xrOworc3RhdGljIHN0cnVjdCBjbGsgYWhiX2NsazsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGlwZ19jbGs7CitzdGF0aWMgc3RydWN0IGNsayB1c2JvaDNfY2xrOworc3RhdGljIHN0cnVjdCBjbGsgZW1pX2Zhc3RfY2xrOworc3RhdGljIHN0cnVjdCBjbGsgaXB1X2NsazsKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1pcGlfaHNjMV9jbGs7CisKKyNkZWZpbmUgTUFYX0RQTExfV0FJVF9UUklFUwkxMDAwIC8qIDEwMDAgKiB1ZGVsYXkoMSkgPSAxbXMgKi8KKworLyogY2FsY3VsYXRlIGJlc3QgcHJlIGFuZCBwb3N0IGRpdmlkZXJzIHRvIGdldCB0aGUgcmVxdWlyZWQgZGl2aWRlciAqLworc3RhdGljIHZvaWQgX19jYWxjX3ByZV9wb3N0X2RpdmlkZXJzKHUzMiBkaXYsIHUzMiAqcHJlLCB1MzIgKnBvc3QsCisJdTMyIG1heF9wcmUsIHUzMiBtYXhfcG9zdCkKK3sKKwlpZiAoZGl2ID49IG1heF9wcmUgKiBtYXhfcG9zdCkgeworCQkqcHJlID0gbWF4X3ByZTsKKwkJKnBvc3QgPSBtYXhfcG9zdDsKKwl9IGVsc2UgaWYgKGRpdiA+PSBtYXhfcHJlKSB7CisJCXUzMiBtaW5fcHJlLCB0ZW1wX3ByZSwgb2xkX2VyciwgZXJyOworCQltaW5fcHJlID0gRElWX1JPVU5EX1VQKGRpdiwgbWF4X3Bvc3QpOworCQlvbGRfZXJyID0gbWF4X3ByZTsKKwkJZm9yICh0ZW1wX3ByZSA9IG1heF9wcmU7IHRlbXBfcHJlID49IG1pbl9wcmU7IHRlbXBfcHJlLS0pIHsKKwkJCWVyciA9IGRpdiAlIHRlbXBfcHJlOworCQkJaWYgKGVyciA9PSAwKSB7CisJCQkJKnByZSA9IHRlbXBfcHJlOworCQkJCWJyZWFrOworCQkJfQorCQkJZXJyID0gdGVtcF9wcmUgLSBlcnI7CisJCQlpZiAoZXJyIDwgb2xkX2VycikgeworCQkJCW9sZF9lcnIgPSBlcnI7CisJCQkJKnByZSA9IHRlbXBfcHJlOworCQkJfQorCQl9CisJCSpwb3N0ID0gRElWX1JPVU5EX1VQKGRpdiwgKnByZSk7CisJfSBlbHNlIHsKKwkJKnByZSA9IGRpdjsKKwkJKnBvc3QgPSAxOworCX0KK30KKworc3RhdGljIHZvaWQgX2Nsa19jY2dyX3NldGNsayhzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIG1vZGUpCit7CisJdTMyIHJlZyA9IF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7CisKKwlyZWcgJj0gfihNWENfQ0NNX0NDR1J4X0NHX01BU0sgPDwgY2xrLT5lbmFibGVfc2hpZnQpOworCXJlZyB8PSBtb2RlIDw8IGNsay0+ZW5hYmxlX3NoaWZ0OworCisJX19yYXdfd3JpdGVsKHJlZywgY2xrLT5lbmFibGVfcmVnKTsKK30KKworc3RhdGljIGludCBfY2xrX2NjZ3JfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlfY2xrX2NjZ3Jfc2V0Y2xrKGNsaywgTVhDX0NDTV9DQ0dSeF9NT0RfT04pOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfY2xrX2NjZ3JfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJX2Nsa19jY2dyX3NldGNsayhjbGssIE1YQ19DQ01fQ0NHUnhfTU9EX09GRik7Cit9CisKK3N0YXRpYyBpbnQgX2Nsa19jY2dyX2VuYWJsZV9pbnJ1bihzdHJ1Y3QgY2xrICpjbGspCit7CisJX2Nsa19jY2dyX3NldGNsayhjbGssIE1YQ19DQ01fQ0NHUnhfTU9EX0lETEUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfY2xrX2NjZ3JfZGlzYWJsZV9pbndhaXQoc3RydWN0IGNsayAqY2xrKQoreworCV9jbGtfY2Nncl9zZXRjbGsoY2xrLCBNWENfQ0NNX0NDR1J4X01PRF9JRExFKTsKK30KKworLyoKKyAqIEZvciB0aGUgNC10by0xIG11eGVkIGlucHV0IGNsb2NrCisgKi8KK3N0YXRpYyBpbmxpbmUgdTMyIF9nZXRfbXV4KHN0cnVjdCBjbGsgKnBhcmVudCwgc3RydWN0IGNsayAqbTAsCisJCQkgICBzdHJ1Y3QgY2xrICptMSwgc3RydWN0IGNsayAqbTIsIHN0cnVjdCBjbGsgKm0zKQoreworCWlmIChwYXJlbnQgPT0gbTApCisJCXJldHVybiAwOworCWVsc2UgaWYgKHBhcmVudCA9PSBtMSkKKwkJcmV0dXJuIDE7CisJZWxzZSBpZiAocGFyZW50ID09IG0yKQorCQlyZXR1cm4gMjsKKwllbHNlIGlmIChwYXJlbnQgPT0gbTMpCisJCXJldHVybiAzOworCWVsc2UKKwkJQlVHKCk7CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKl9teDUxX2dldF9wbGxfYmFzZShzdHJ1Y3QgY2xrICpwbGwpCit7CisJaWYgKHBsbCA9PSAmcGxsMV9tYWluX2NsaykKKwkJcmV0dXJuIE1YNTFfRFBMTDFfQkFTRTsKKwllbHNlIGlmIChwbGwgPT0gJnBsbDJfc3dfY2xrKQorCQlyZXR1cm4gTVg1MV9EUExMMl9CQVNFOworCWVsc2UgaWYgKHBsbCA9PSAmcGxsM19zd19jbGspCisJCXJldHVybiBNWDUxX0RQTEwzX0JBU0U7CisJZWxzZQorCQlCVUcoKTsKKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqX214NTNfZ2V0X3BsbF9iYXNlKHN0cnVjdCBjbGsgKnBsbCkKK3sKKwlpZiAocGxsID09ICZwbGwxX21haW5fY2xrKQorCQlyZXR1cm4gTVg1M19EUExMMV9CQVNFOworCWVsc2UgaWYgKHBsbCA9PSAmcGxsMl9zd19jbGspCisJCXJldHVybiBNWDUzX0RQTEwyX0JBU0U7CisJZWxzZSBpZiAocGxsID09ICZwbGwzX3N3X2NsaykKKwkJcmV0dXJuIE1YNTNfRFBMTDNfQkFTRTsKKwllbHNlIGlmIChwbGwgPT0gJm14NTNfcGxsNF9zd19jbGspCisJCXJldHVybiBNWDUzX0RQTEw0X0JBU0U7CisJZWxzZQorCQlCVUcoKTsKKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqX2dldF9wbGxfYmFzZShzdHJ1Y3QgY2xrICpwbGwpCit7CisJaWYgKGNwdV9pc19teDUxKCkpCisJCXJldHVybiBfbXg1MV9nZXRfcGxsX2Jhc2UocGxsKTsKKwllbHNlCisJCXJldHVybiBfbXg1M19nZXRfcGxsX2Jhc2UocGxsKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgY2xrX3BsbF9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCit7CisJbG9uZyBtZmksIG1mbiwgbWZkLCBwZGYsIHJlZl9jbGssIG1mbl9hYnM7CisJdW5zaWduZWQgbG9uZyBkcF9vcCwgZHBfbWZkLCBkcF9tZm4sIGRwX2N0bCwgcGxsX2hmc20sIGRibDsKKwl2b2lkIF9faW9tZW0gKnBsbGJhc2U7CisJczY0IHRlbXA7CisJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZTsKKworCXBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKKworCXBsbGJhc2UgPSBfZ2V0X3BsbF9iYXNlKGNsayk7CisKKwlkcF9jdGwgPSBfX3Jhd19yZWFkbChwbGxiYXNlICsgTVhDX1BMTF9EUF9DVEwpOworCXBsbF9oZnNtID0gZHBfY3RsICYgTVhDX1BMTF9EUF9DVExfSEZTTTsKKwlkYmwgPSBkcF9jdGwgJiBNWENfUExMX0RQX0NUTF9EUERDSzBfMl9FTjsKKworCWlmIChwbGxfaGZzbSA9PSAwKSB7CisJCWRwX29wID0gX19yYXdfcmVhZGwocGxsYmFzZSArIE1YQ19QTExfRFBfT1ApOworCQlkcF9tZmQgPSBfX3Jhd19yZWFkbChwbGxiYXNlICsgTVhDX1BMTF9EUF9NRkQpOworCQlkcF9tZm4gPSBfX3Jhd19yZWFkbChwbGxiYXNlICsgTVhDX1BMTF9EUF9NRk4pOworCX0gZWxzZSB7CisJCWRwX29wID0gX19yYXdfcmVhZGwocGxsYmFzZSArIE1YQ19QTExfRFBfSEZTX09QKTsKKwkJZHBfbWZkID0gX19yYXdfcmVhZGwocGxsYmFzZSArIE1YQ19QTExfRFBfSEZTX01GRCk7CisJCWRwX21mbiA9IF9fcmF3X3JlYWRsKHBsbGJhc2UgKyBNWENfUExMX0RQX0hGU19NRk4pOworCX0KKwlwZGYgPSBkcF9vcCAmIE1YQ19QTExfRFBfT1BfUERGX01BU0s7CisJbWZpID0gKGRwX29wICYgTVhDX1BMTF9EUF9PUF9NRklfTUFTSykgPj4gTVhDX1BMTF9EUF9PUF9NRklfT0ZGU0VUOworCW1maSA9IChtZmkgPD0gNSkgPyA1IDogbWZpOworCW1mZCA9IGRwX21mZCAmIE1YQ19QTExfRFBfTUZEX01BU0s7CisJbWZuID0gbWZuX2FicyA9IGRwX21mbiAmIE1YQ19QTExfRFBfTUZOX01BU0s7CisJLyogU2lnbiBleHRlbmQgdG8gMzItYml0cyAqLworCWlmIChtZm4gPj0gMHgwNDAwMDAwMCkgeworCQltZm4gfD0gMHhGQzAwMDAwMDsKKwkJbWZuX2FicyA9IC1tZm47CisJfQorCisJcmVmX2NsayA9IDIgKiBwYXJlbnRfcmF0ZTsKKwlpZiAoZGJsICE9IDApCisJCXJlZl9jbGsgKj0gMjsKKworCXJlZl9jbGsgLz0gKHBkZiArIDEpOworCXRlbXAgPSAodTY0KSByZWZfY2xrICogbWZuX2FiczsKKwlkb19kaXYodGVtcCwgbWZkICsgMSk7CisJaWYgKG1mbiA8IDApCisJCXRlbXAgPSAtdGVtcDsKKwl0ZW1wID0gKHJlZl9jbGsgKiBtZmkpICsgdGVtcDsKKworCXJldHVybiB0ZW1wOworfQorCitzdGF0aWMgaW50IF9jbGtfcGxsX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCXUzMiByZWc7CisJdm9pZCBfX2lvbWVtICpwbGxiYXNlOworCisJbG9uZyBtZmksIHBkZiwgbWZuLCBtZmQgPSA5OTk5OTk7CisJczY0IHRlbXA2NDsKKwl1bnNpZ25lZCBsb25nIHF1YWRfcGFyZW50X3JhdGU7CisJdW5zaWduZWQgbG9uZyBwbGxfaGZzbSwgZHBfY3RsOworCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGU7CisKKwlwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CisKKwlwbGxiYXNlID0gX2dldF9wbGxfYmFzZShjbGspOworCisJcXVhZF9wYXJlbnRfcmF0ZSA9IDQgKiBwYXJlbnRfcmF0ZTsKKwlwZGYgPSBtZmkgPSAtMTsKKwl3aGlsZSAoKytwZGYgPCAxNiAmJiBtZmkgPCA1KQorCQltZmkgPSByYXRlICogKHBkZisxKSAvIHF1YWRfcGFyZW50X3JhdGU7CisJaWYgKG1maSA+IDE1KQorCQlyZXR1cm4gLUVJTlZBTDsKKwlwZGYtLTsKKworCXRlbXA2NCA9IHJhdGUgKiAocGRmKzEpIC0gcXVhZF9wYXJlbnRfcmF0ZSAqIG1maTsKKwlkb19kaXYodGVtcDY0LCBxdWFkX3BhcmVudF9yYXRlLzEwMDAwMDApOworCW1mbiA9IChsb25nKXRlbXA2NDsKKworCWRwX2N0bCA9IF9fcmF3X3JlYWRsKHBsbGJhc2UgKyBNWENfUExMX0RQX0NUTCk7CisJLyogdXNlIGRwZGNrMF8yICovCisJX19yYXdfd3JpdGVsKGRwX2N0bCB8IDB4MTAwMEwsIHBsbGJhc2UgKyBNWENfUExMX0RQX0NUTCk7CisJcGxsX2hmc20gPSBkcF9jdGwgJiBNWENfUExMX0RQX0NUTF9IRlNNOworCWlmIChwbGxfaGZzbSA9PSAwKSB7CisJCXJlZyA9IG1maSA8PCA0IHwgcGRmOworCQlfX3Jhd193cml0ZWwocmVnLCBwbGxiYXNlICsgTVhDX1BMTF9EUF9PUCk7CisJCV9fcmF3X3dyaXRlbChtZmQsIHBsbGJhc2UgKyBNWENfUExMX0RQX01GRCk7CisJCV9fcmF3X3dyaXRlbChtZm4sIHBsbGJhc2UgKyBNWENfUExMX0RQX01GTik7CisJfSBlbHNlIHsKKwkJcmVnID0gbWZpIDw8IDQgfCBwZGY7CisJCV9fcmF3X3dyaXRlbChyZWcsIHBsbGJhc2UgKyBNWENfUExMX0RQX0hGU19PUCk7CisJCV9fcmF3X3dyaXRlbChtZmQsIHBsbGJhc2UgKyBNWENfUExMX0RQX0hGU19NRkQpOworCQlfX3Jhd193cml0ZWwobWZuLCBwbGxiYXNlICsgTVhDX1BMTF9EUF9IRlNfTUZOKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfY2xrX3BsbF9lbmFibGUoc3RydWN0IGNsayAqY2xrKQoreworCXUzMiByZWc7CisJdm9pZCBfX2lvbWVtICpwbGxiYXNlOworCWludCBpID0gMDsKKworCXBsbGJhc2UgPSBfZ2V0X3BsbF9iYXNlKGNsayk7CisJcmVnID0gX19yYXdfcmVhZGwocGxsYmFzZSArIE1YQ19QTExfRFBfQ1RMKSB8IE1YQ19QTExfRFBfQ1RMX1VQRU47CisJX19yYXdfd3JpdGVsKHJlZywgcGxsYmFzZSArIE1YQ19QTExfRFBfQ1RMKTsKKworCS8qIFdhaXQgZm9yIGxvY2sgKi8KKwlkbyB7CisJCXJlZyA9IF9fcmF3X3JlYWRsKHBsbGJhc2UgKyBNWENfUExMX0RQX0NUTCk7CisJCWlmIChyZWcgJiBNWENfUExMX0RQX0NUTF9MUkYpCisJCQlicmVhazsKKworCQl1ZGVsYXkoMSk7CisJfSB3aGlsZSAoKytpIDwgTUFYX0RQTExfV0FJVF9UUklFUyk7CisKKwlpZiAoaSA9PSBNQVhfRFBMTF9XQUlUX1RSSUVTKSB7CisJCXByX2VycigiTVg1OiBwbGwgbG9ja2luZyBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX2Nsa19wbGxfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJdTMyIHJlZzsKKwl2b2lkIF9faW9tZW0gKnBsbGJhc2U7CisKKwlwbGxiYXNlID0gX2dldF9wbGxfYmFzZShjbGspOworCXJlZyA9IF9fcmF3X3JlYWRsKHBsbGJhc2UgKyBNWENfUExMX0RQX0NUTCkgJiB+TVhDX1BMTF9EUF9DVExfVVBFTjsKKwlfX3Jhd193cml0ZWwocmVnLCBwbGxiYXNlICsgTVhDX1BMTF9EUF9DVEwpOworfQorCitzdGF0aWMgaW50IF9jbGtfcGxsMV9zd19zZXRfcGFyZW50KHN0cnVjdCBjbGsgKmNsaywgc3RydWN0IGNsayAqcGFyZW50KQoreworCXUzMiByZWcsIHN0ZXA7CisKKwlyZWcgPSBfX3Jhd19yZWFkbChNWENfQ0NNX0NDU1IpOworCisJLyogV2hlbiBzd2l0Y2hpbmcgZnJvbSBwbGxfbWFpbl9jbGsgdG8gYSBieXBhc3MgY2xvY2ssIGZpcnN0IHNlbGVjdCBhCisJICogbXVsdGlwbGV4ZWQgY2xvY2sgaW4gJ3N0ZXBfc2VsJywgdGhlbiBzaGlmdCB0aGUgZ2xpdGNobGVzcyBtdXgKKwkgKiAncGxsMV9zd19jbGtfc2VsJy4KKwkgKgorCSAqIFdoZW4gc3dpdGNoaW5nIGJhY2ssIGRvIGl0IGluIHJldmVyc2Ugb3JkZXIKKwkgKi8KKwlpZiAocGFyZW50ID09ICZwbGwxX21haW5fY2xrKSB7CisJCS8qIFN3aXRjaCB0byBwbGwxX21haW5fY2xrICovCisJCXJlZyAmPSB+TVhDX0NDTV9DQ1NSX1BMTDFfU1dfQ0xLX1NFTDsKKwkJX19yYXdfd3JpdGVsKHJlZywgTVhDX0NDTV9DQ1NSKTsKKwkJLyogc3RlcF9jbGsgbXV4IHN3aXRjaGVkIHRvIGxwX2FwbSwgdG8gc2F2ZSBwb3dlci4gKi8KKwkJcmVnID0gX19yYXdfcmVhZGwoTVhDX0NDTV9DQ1NSKTsKKwkJcmVnICY9IH5NWENfQ0NNX0NDU1JfU1RFUF9TRUxfTUFTSzsKKwkJcmVnIHw9IChNWENfQ0NNX0NDU1JfU1RFUF9TRUxfTFBfQVBNIDw8CisJCQkJTVhDX0NDTV9DQ1NSX1NURVBfU0VMX09GRlNFVCk7CisJfSBlbHNlIHsKKwkJaWYgKHBhcmVudCA9PSAmbHBfYXBtX2NsaykgeworCQkJc3RlcCA9IE1YQ19DQ01fQ0NTUl9TVEVQX1NFTF9MUF9BUE07CisJCX0gZWxzZSAgaWYgKHBhcmVudCA9PSAmcGxsMl9zd19jbGspIHsKKwkJCXN0ZXAgPSBNWENfQ0NNX0NDU1JfU1RFUF9TRUxfUExMMl9ESVZJREVEOworCQl9IGVsc2UgIGlmIChwYXJlbnQgPT0gJnBsbDNfc3dfY2xrKSB7CisJCQlzdGVwID0gTVhDX0NDTV9DQ1NSX1NURVBfU0VMX1BMTDNfRElWSURFRDsKKwkJfSBlbHNlCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlyZWcgJj0gfk1YQ19DQ01fQ0NTUl9TVEVQX1NFTF9NQVNLOworCQlyZWcgfD0gKHN0ZXAgPDwgTVhDX0NDTV9DQ1NSX1NURVBfU0VMX09GRlNFVCk7CisKKwkJX19yYXdfd3JpdGVsKHJlZywgTVhDX0NDTV9DQ1NSKTsKKwkJLyogU3dpdGNoIHRvIHN0ZXBfY2xrICovCisJCXJlZyA9IF9fcmF3X3JlYWRsKE1YQ19DQ01fQ0NTUik7CisJCXJlZyB8PSBNWENfQ0NNX0NDU1JfUExMMV9TV19DTEtfU0VMOworCX0KKwlfX3Jhd193cml0ZWwocmVnLCBNWENfQ0NNX0NDU1IpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBjbGtfcGxsMV9zd19nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCit7CisJdTMyIHJlZywgZGl2OworCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGU7CisKKwlwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CisKKwlyZWcgPSBfX3Jhd19yZWFkbChNWENfQ0NNX0NDU1IpOworCisJaWYgKGNsay0+cGFyZW50ID09ICZwbGwyX3N3X2NsaykgeworCQlkaXYgPSAoKHJlZyAmIE1YQ19DQ01fQ0NTUl9QTEwyX1BPREZfTUFTSykgPj4KKwkJICAgICAgIE1YQ19DQ01fQ0NTUl9QTEwyX1BPREZfT0ZGU0VUKSArIDE7CisJfSBlbHNlIGlmIChjbGstPnBhcmVudCA9PSAmcGxsM19zd19jbGspIHsKKwkJZGl2ID0gKChyZWcgJiBNWENfQ0NNX0NDU1JfUExMM19QT0RGX01BU0spID4+CisJCSAgICAgICBNWENfQ0NNX0NDU1JfUExMM19QT0RGX09GRlNFVCkgKyAxOworCX0gZWxzZQorCQlkaXYgPSAxOworCXJldHVybiBwYXJlbnRfcmF0ZSAvIGRpdjsKK30KKworc3RhdGljIGludCBfY2xrX3BsbDJfc3dfc2V0X3BhcmVudChzdHJ1Y3QgY2xrICpjbGssIHN0cnVjdCBjbGsgKnBhcmVudCkKK3sKKwl1MzIgcmVnOworCisJcmVnID0gX19yYXdfcmVhZGwoTVhDX0NDTV9DQ1NSKTsKKworCWlmIChwYXJlbnQgPT0gJnBsbDJfc3dfY2xrKQorCQlyZWcgJj0gfk1YQ19DQ01fQ0NTUl9QTEwyX1NXX0NMS19TRUw7CisJZWxzZQorCQlyZWcgfD0gTVhDX0NDTV9DQ1NSX1BMTDJfU1dfQ0xLX1NFTDsKKworCV9fcmF3X3dyaXRlbChyZWcsIE1YQ19DQ01fQ0NTUik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX2Nsa19scF9hcG1fc2V0X3BhcmVudChzdHJ1Y3QgY2xrICpjbGssIHN0cnVjdCBjbGsgKnBhcmVudCkKK3sKKwl1MzIgcmVnOworCisJaWYgKHBhcmVudCA9PSAmb3NjX2NsaykKKwkJcmVnID0gX19yYXdfcmVhZGwoTVhDX0NDTV9DQ1NSKSAmIH5NWENfQ0NNX0NDU1JfTFBfQVBNX1NFTDsKKwllbHNlCisJCXJldHVybiAtRUlOVkFMOworCisJX19yYXdfd3JpdGVsKHJlZywgTVhDX0NDTV9DQ1NSKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBjbGtfY3B1X2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1MzIgY2FjcnIsIGRpdjsKKwl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlOworCisJcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCWNhY3JyID0gX19yYXdfcmVhZGwoTVhDX0NDTV9DQUNSUik7CisJZGl2ID0gKGNhY3JyICYgTVhDX0NDTV9DQUNSUl9BUk1fUE9ERl9NQVNLKSArIDE7CisKKwlyZXR1cm4gcGFyZW50X3JhdGUgLyBkaXY7Cit9CisKK3N0YXRpYyBpbnQgY2xrX2NwdV9zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwl1MzIgcmVnLCBjcHVfcG9kZjsKKwl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlOworCisJcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCWNwdV9wb2RmID0gcGFyZW50X3JhdGUgLyByYXRlIC0gMTsKKwkvKiB1c2UgcG9zdCBkaXZpZGVyIHRvIGNoYW5nZSBmcmVxICovCisJcmVnID0gX19yYXdfcmVhZGwoTVhDX0NDTV9DQUNSUik7CisJcmVnICY9IH5NWENfQ0NNX0NBQ1JSX0FSTV9QT0RGX01BU0s7CisJcmVnIHw9IGNwdV9wb2RmIDw8IE1YQ19DQ01fQ0FDUlJfQVJNX1BPREZfT0ZGU0VUOworCV9fcmF3X3dyaXRlbChyZWcsIE1YQ19DQ01fQ0FDUlIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX2Nsa19wZXJpcGhfYXBtX3NldF9wYXJlbnQoc3RydWN0IGNsayAqY2xrLCBzdHJ1Y3QgY2xrICpwYXJlbnQpCit7CisJdTMyIHJlZywgbXV4OworCWludCBpID0gMDsKKworCW11eCA9IF9nZXRfbXV4KHBhcmVudCwgJnBsbDFfc3dfY2xrLCAmcGxsM19zd19jbGssICZscF9hcG1fY2xrLCBOVUxMKTsKKworCXJlZyA9IF9fcmF3X3JlYWRsKE1YQ19DQ01fQ0JDTVIpICYgfk1YQ19DQ01fQ0JDTVJfUEVSSVBIX0NMS19TRUxfTUFTSzsKKwlyZWcgfD0gbXV4IDw8IE1YQ19DQ01fQ0JDTVJfUEVSSVBIX0NMS19TRUxfT0ZGU0VUOworCV9fcmF3X3dyaXRlbChyZWcsIE1YQ19DQ01fQ0JDTVIpOworCisJLyogV2FpdCBmb3IgbG9jayAqLworCWRvIHsKKwkJcmVnID0gX19yYXdfcmVhZGwoTVhDX0NDTV9DREhJUFIpOworCQlpZiAoIShyZWcgJiAgTVhDX0NDTV9DREhJUFJfUEVSSVBIX0NMS19TRUxfQlVTWSkpCisJCQlicmVhazsKKworCQl1ZGVsYXkoMSk7CisJfSB3aGlsZSAoKytpIDwgTUFYX0RQTExfV0FJVF9UUklFUyk7CisKKwlpZiAoaSA9PSBNQVhfRFBMTF9XQUlUX1RSSUVTKSB7CisJCXByX2VycigiTVg1OiBTZXQgcGFyZW50IGZvciBwZXJpcGhfYXBtIGNsb2NrIGZhaWxlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9jbGtfbWFpbl9idXNfc2V0X3BhcmVudChzdHJ1Y3QgY2xrICpjbGssIHN0cnVjdCBjbGsgKnBhcmVudCkKK3sKKwl1MzIgcmVnOworCisJcmVnID0gX19yYXdfcmVhZGwoTVhDX0NDTV9DQkNEUik7CisKKwlpZiAocGFyZW50ID09ICZwbGwyX3N3X2NsaykKKwkJcmVnICY9IH5NWENfQ0NNX0NCQ0RSX1BFUklQSF9DTEtfU0VMOworCWVsc2UgaWYgKHBhcmVudCA9PSAmcGVyaXBoX2FwbV9jbGspCisJCXJlZyB8PSBNWENfQ0NNX0NCQ0RSX1BFUklQSF9DTEtfU0VMOworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlfX3Jhd193cml0ZWwocmVnLCBNWENfQ0NNX0NCQ0RSKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGNsayBtYWluX2J1c19jbGsgPSB7CisJLnBhcmVudCA9ICZwbGwyX3N3X2NsaywKKwkuc2V0X3BhcmVudCA9IF9jbGtfbWFpbl9idXNfc2V0X3BhcmVudCwKK307CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNsa19haGJfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCXUzMiByZWcsIGRpdjsKKwl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlOworCisJcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCisJcmVnID0gX19yYXdfcmVhZGwoTVhDX0NDTV9DQkNEUik7CisJZGl2ID0gKChyZWcgJiBNWENfQ0NNX0NCQ0RSX0FIQl9QT0RGX01BU0spID4+CisJICAgICAgIE1YQ19DQ01fQ0JDRFJfQUhCX1BPREZfT0ZGU0VUKSArIDE7CisJcmV0dXJuIHBhcmVudF9yYXRlIC8gZGl2OworfQorCisKK3N0YXRpYyBpbnQgX2Nsa19haGJfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJdTMyIHJlZywgZGl2OworCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGU7CisJaW50IGkgPSAwOworCisJcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCisJZGl2ID0gcGFyZW50X3JhdGUgLyByYXRlOworCWlmIChkaXYgPiA4IHx8IGRpdiA8IDEgfHwgKChwYXJlbnRfcmF0ZSAvIGRpdikgIT0gcmF0ZSkpCisJCXJldHVybiAtRUlOVkFMOworCisJcmVnID0gX19yYXdfcmVhZGwoTVhDX0NDTV9DQkNEUik7CisJcmVnICY9IH5NWENfQ0NNX0NCQ0RSX0FIQl9QT0RGX01BU0s7CisJcmVnIHw9IChkaXYgLSAxKSA8PCBNWENfQ0NNX0NCQ0RSX0FIQl9QT0RGX09GRlNFVDsKKwlfX3Jhd193cml0ZWwocmVnLCBNWENfQ0NNX0NCQ0RSKTsKKworCS8qIFdhaXQgZm9yIGxvY2sgKi8KKwlkbyB7CisJCXJlZyA9IF9fcmF3X3JlYWRsKE1YQ19DQ01fQ0RISVBSKTsKKwkJaWYgKCEocmVnICYgTVhDX0NDTV9DREhJUFJfQUhCX1BPREZfQlVTWSkpCisJCQlicmVhazsKKworCQl1ZGVsYXkoMSk7CisJfSB3aGlsZSAoKytpIDwgTUFYX0RQTExfV0FJVF9UUklFUyk7CisKKwlpZiAoaSA9PSBNQVhfRFBMTF9XQUlUX1RSSUVTKSB7CisJCXByX2VycigiTVg1OiBjbGtfYWhiX3NldF9yYXRlIGZhaWxlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBfY2xrX2FoYl9yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywKKwkJCQkJCXVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwl1MzIgZGl2OworCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGU7CisKKwlwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CisKKwlkaXYgPSBwYXJlbnRfcmF0ZSAvIHJhdGU7CisJaWYgKGRpdiA+IDgpCisJCWRpdiA9IDg7CisJZWxzZSBpZiAoZGl2ID09IDApCisJCWRpdisrOworCXJldHVybiBwYXJlbnRfcmF0ZSAvIGRpdjsKK30KKworCitzdGF0aWMgaW50IF9jbGtfbWF4X2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJdTMyIHJlZzsKKworCV9jbGtfY2Nncl9lbmFibGUoY2xrKTsKKworCS8qIEhhbmRzaGFrZSB3aXRoIE1BWCB3aGVuIExQTSBpcyBlbnRlcmVkLiAqLworCXJlZyA9IF9fcmF3X3JlYWRsKE1YQ19DQ01fQ0xQQ1IpOworCWlmIChjcHVfaXNfbXg1MSgpKQorCQlyZWcgJj0gfk1YNTFfQ0NNX0NMUENSX0JZUEFTU19NQVhfTFBNX0hTOworCWVsc2UgaWYgKGNwdV9pc19teDUzKCkpCisJCXJlZyAmPSB+TVg1M19DQ01fQ0xQQ1JfQllQQVNTX01BWF9MUE1fSFM7CisJX19yYXdfd3JpdGVsKHJlZywgTVhDX0NDTV9DTFBDUik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX2Nsa19tYXhfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJdTMyIHJlZzsKKworCV9jbGtfY2Nncl9kaXNhYmxlX2lud2FpdChjbGspOworCisJLyogTm8gSGFuZHNoYWtlIHdpdGggTUFYIHdoZW4gTFBNIGlzIGVudGVyZWQgYXMgaXRzIGRpc2FibGVkLiAqLworCXJlZyA9IF9fcmF3X3JlYWRsKE1YQ19DQ01fQ0xQQ1IpOworCWlmIChjcHVfaXNfbXg1MSgpKQorCQlyZWcgfD0gTVg1MV9DQ01fQ0xQQ1JfQllQQVNTX01BWF9MUE1fSFM7CisJZWxzZSBpZiAoY3B1X2lzX214NTMoKSkKKwkJcmVnICY9IH5NWDUzX0NDTV9DTFBDUl9CWVBBU1NfTUFYX0xQTV9IUzsKKwlfX3Jhd193cml0ZWwocmVnLCBNWENfQ0NNX0NMUENSKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgY2xrX2lwZ19nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCit7CisJdTMyIHJlZywgZGl2OworCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGU7CisKKwlwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CisKKwlyZWcgPSBfX3Jhd19yZWFkbChNWENfQ0NNX0NCQ0RSKTsKKwlkaXYgPSAoKHJlZyAmIE1YQ19DQ01fQ0JDRFJfSVBHX1BPREZfTUFTSykgPj4KKwkgICAgICAgTVhDX0NDTV9DQkNEUl9JUEdfUE9ERl9PRkZTRVQpICsgMTsKKworCXJldHVybiBwYXJlbnRfcmF0ZSAvIGRpdjsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgY2xrX2lwZ19wZXJfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCXUzMiByZWcsIHByZWRpdjEsIHByZWRpdjIsIHBvZGY7CisJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZTsKKworCXBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKKworCWlmIChjbGstPnBhcmVudCA9PSAmbWFpbl9idXNfY2xrIHx8IGNsay0+cGFyZW50ID09ICZscF9hcG1fY2xrKSB7CisJCS8qIHRoZSBtYWluX2J1c19jbGsgaXMgdGhlIG9uZSBiZWZvcmUgdGhlIERWRlMgZW5naW5lICovCisJCXJlZyA9IF9fcmF3X3JlYWRsKE1YQ19DQ01fQ0JDRFIpOworCQlwcmVkaXYxID0gKChyZWcgJiBNWENfQ0NNX0NCQ0RSX1BFUkNMS19QUkVEMV9NQVNLKSA+PgorCQkJICAgTVhDX0NDTV9DQkNEUl9QRVJDTEtfUFJFRDFfT0ZGU0VUKSArIDE7CisJCXByZWRpdjIgPSAoKHJlZyAmIE1YQ19DQ01fQ0JDRFJfUEVSQ0xLX1BSRUQyX01BU0spID4+CisJCQkgICBNWENfQ0NNX0NCQ0RSX1BFUkNMS19QUkVEMl9PRkZTRVQpICsgMTsKKwkJcG9kZiA9ICgocmVnICYgTVhDX0NDTV9DQkNEUl9QRVJDTEtfUE9ERl9NQVNLKSA+PgorCQkJTVhDX0NDTV9DQkNEUl9QRVJDTEtfUE9ERl9PRkZTRVQpICsgMTsKKwkJcmV0dXJuIHBhcmVudF9yYXRlIC8gKHByZWRpdjEgKiBwcmVkaXYyICogcG9kZik7CisJfSBlbHNlIGlmIChjbGstPnBhcmVudCA9PSAmaXBnX2NsaykKKwkJcmV0dXJuIHBhcmVudF9yYXRlOworCWVsc2UKKwkJQlVHKCk7Cit9CisKK3N0YXRpYyBpbnQgX2Nsa19pcGdfcGVyX3NldF9wYXJlbnQoc3RydWN0IGNsayAqY2xrLCBzdHJ1Y3QgY2xrICpwYXJlbnQpCit7CisJdTMyIHJlZzsKKworCXJlZyA9IF9fcmF3X3JlYWRsKE1YQ19DQ01fQ0JDTVIpOworCisJcmVnICY9IH5NWENfQ0NNX0NCQ01SX1BFUkNMS19MUF9BUE1fQ0xLX1NFTDsKKwlyZWcgJj0gfk1YQ19DQ01fQ0JDTVJfUEVSQ0xLX0lQR19DTEtfU0VMOworCisJaWYgKHBhcmVudCA9PSAmaXBnX2NsaykKKwkJcmVnIHw9IE1YQ19DQ01fQ0JDTVJfUEVSQ0xLX0lQR19DTEtfU0VMOworCWVsc2UgaWYgKHBhcmVudCA9PSAmbHBfYXBtX2NsaykKKwkJcmVnIHw9IE1YQ19DQ01fQ0JDTVJfUEVSQ0xLX0xQX0FQTV9DTEtfU0VMOworCWVsc2UgaWYgKHBhcmVudCAhPSAmbWFpbl9idXNfY2xrKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCV9fcmF3X3dyaXRlbChyZWcsIE1YQ19DQ01fQ0JDTVIpOworCisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgY2xrX25mY19zZXRfcGFyZW50CU5VTEwKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgY2xrX25mY19nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgbG9uZyByYXRlOworCXUzMiByZWcsIGRpdjsKKworCXJlZyA9IF9fcmF3X3JlYWRsKE1YQ19DQ01fQ0JDRFIpOworCWRpdiA9ICgocmVnICYgTVhDX0NDTV9DQkNEUl9ORkNfUE9ERl9NQVNLKSA+PgorCSAgICAgICBNWENfQ0NNX0NCQ0RSX05GQ19QT0RGX09GRlNFVCkgKyAxOworCXJhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpIC8gZGl2OworCVdBUk5fT04ocmF0ZSA9PSAwKTsKKwlyZXR1cm4gcmF0ZTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgY2xrX25mY19yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywKKwkJCQkJCXVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwl1MzIgZGl2OworCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCisJaWYgKCFyYXRlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRpdiA9IHBhcmVudF9yYXRlIC8gcmF0ZTsKKworCWlmIChwYXJlbnRfcmF0ZSAlIHJhdGUpCisJCWRpdisrOworCisJaWYgKGRpdiA+IDgpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIHBhcmVudF9yYXRlIC8gZGl2OworCit9CisKK3N0YXRpYyBpbnQgY2xrX25mY19zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwl1MzIgcmVnLCBkaXY7CisKKwlkaXYgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpIC8gcmF0ZTsKKwlpZiAoZGl2ID09IDApCisJCWRpdisrOworCWlmICgoKGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCkgLyBkaXYpICE9IHJhdGUpIHx8IChkaXYgPiA4KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZWcgPSBfX3Jhd19yZWFkbChNWENfQ0NNX0NCQ0RSKTsKKwlyZWcgJj0gfk1YQ19DQ01fQ0JDRFJfTkZDX1BPREZfTUFTSzsKKwlyZWcgfD0gKGRpdiAtIDEpIDw8IE1YQ19DQ01fQ0JDRFJfTkZDX1BPREZfT0ZGU0VUOworCV9fcmF3X3dyaXRlbChyZWcsIE1YQ19DQ01fQ0JDRFIpOworCisJd2hpbGUgKF9fcmF3X3JlYWRsKE1YQ19DQ01fQ0RISVBSKSAmCisJCQlNWENfQ0NNX0NESElQUl9ORkNfSVBHX0lOVF9NRU1fUE9ERl9CVVNZKXsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X2hpZ2hfcmVmZXJlbmNlX2Nsb2NrX3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiBleHRlcm5hbF9oaWdoX3JlZmVyZW5jZTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X2xvd19yZWZlcmVuY2VfY2xvY2tfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIGV4dGVybmFsX2xvd19yZWZlcmVuY2U7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9vc2NpbGxhdG9yX3JlZmVyZW5jZV9jbG9ja19yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gb3NjaWxsYXRvcl9yZWZlcmVuY2U7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9ja2loMl9yZWZlcmVuY2VfY2xvY2tfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIGNraWgyX3JlZmVyZW5jZTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgY2xrX2VtaV9zbG93X2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1MzIgcmVnLCBkaXY7CisKKwlyZWcgPSBfX3Jhd19yZWFkbChNWENfQ0NNX0NCQ0RSKTsKKwlkaXYgPSAoKHJlZyAmIE1YQ19DQ01fQ0JDRFJfRU1JX1BPREZfTUFTSykgPj4KKwkgICAgICAgTVhDX0NDTV9DQkNEUl9FTUlfUE9ERl9PRkZTRVQpICsgMTsKKworCXJldHVybiBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpIC8gZGl2OworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBfY2xrX2Rkcl9oZl9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgbG9uZyByYXRlOworCXUzMiByZWcsIGRpdjsKKworCXJlZyA9IF9fcmF3X3JlYWRsKE1YQ19DQ01fQ0JDRFIpOworCWRpdiA9ICgocmVnICYgTVhDX0NDTV9DQkNEUl9ERFJfUE9ERl9NQVNLKSA+PgorCQlNWENfQ0NNX0NCQ0RSX0REUl9QT0RGX09GRlNFVCkgKyAxOworCXJhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpIC8gZGl2OworCisJcmV0dXJuIHJhdGU7Cit9CisKKy8qIEV4dGVybmFsIGhpZ2ggZnJlcXVlbmN5IGNsb2NrICovCitzdGF0aWMgc3RydWN0IGNsayBja2loX2NsayA9IHsKKwkuZ2V0X3JhdGUgPSBnZXRfaGlnaF9yZWZlcmVuY2VfY2xvY2tfcmF0ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNraWgyX2NsayA9IHsKKwkuZ2V0X3JhdGUgPSBnZXRfY2tpaDJfcmVmZXJlbmNlX2Nsb2NrX3JhdGUsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBvc2NfY2xrID0geworCS5nZXRfcmF0ZSA9IGdldF9vc2NpbGxhdG9yX3JlZmVyZW5jZV9jbG9ja19yYXRlLAorfTsKKworLyogRXh0ZXJuYWwgbG93IGZyZXF1ZW5jeSAoMzJrSHopIGNsb2NrICovCitzdGF0aWMgc3RydWN0IGNsayBja2lsX2NsayA9IHsKKwkuZ2V0X3JhdGUgPSBnZXRfbG93X3JlZmVyZW5jZV9jbG9ja19yYXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgcGxsMV9tYWluX2NsayA9IHsKKwkucGFyZW50ID0gJm9zY19jbGssCisJLmdldF9yYXRlID0gY2xrX3BsbF9nZXRfcmF0ZSwKKwkuZW5hYmxlID0gX2Nsa19wbGxfZW5hYmxlLAorCS5kaXNhYmxlID0gX2Nsa19wbGxfZGlzYWJsZSwKK307CisKKy8qIENsb2NrIHRyZWUgYmxvY2sgZGlhZ3JhbSAoV0lQKToKKyAqIAlDQ006IENsb2NrIENvbnRyb2xsZXIgTW9kdWxlCisgKgorICogUExMIG91dHB1dCAtPiB8CisgKiAgICAgICAgICAgICAgIHwgQ0NNIFN3aXRjaGVyIC0+IENDTV9DTEtfUk9PVF9HRU4gLT4KKyAqIFBMTCBieXBhc3MgLT4gfAorICoKKyAqLworCisvKiBQTEwxIFNXIHN1cHBsaWVzIHRvIEFSTSBjb3JlICovCitzdGF0aWMgc3RydWN0IGNsayBwbGwxX3N3X2NsayA9IHsKKwkucGFyZW50ID0gJnBsbDFfbWFpbl9jbGssCisJLnNldF9wYXJlbnQgPSBfY2xrX3BsbDFfc3dfc2V0X3BhcmVudCwKKwkuZ2V0X3JhdGUgPSBjbGtfcGxsMV9zd19nZXRfcmF0ZSwKK307CisKKy8qIFBMTDIgU1cgc3VwcGxpZXMgdG8gQVhJL0FIQi9JUCBidXNlcyAqLworc3RhdGljIHN0cnVjdCBjbGsgcGxsMl9zd19jbGsgPSB7CisJLnBhcmVudCA9ICZvc2NfY2xrLAorCS5nZXRfcmF0ZSA9IGNsa19wbGxfZ2V0X3JhdGUsCisJLnNldF9yYXRlID0gX2Nsa19wbGxfc2V0X3JhdGUsCisJLnNldF9wYXJlbnQgPSBfY2xrX3BsbDJfc3dfc2V0X3BhcmVudCwKKwkuZW5hYmxlID0gX2Nsa19wbGxfZW5hYmxlLAorCS5kaXNhYmxlID0gX2Nsa19wbGxfZGlzYWJsZSwKK307CisKKy8qIFBMTDMgU1cgc3VwcGxpZXMgdG8gc2VyaWFsIGNsb2NrcyBsaWtlIFVTQiwgU1NJLCBldGMuICovCitzdGF0aWMgc3RydWN0IGNsayBwbGwzX3N3X2NsayA9IHsKKwkucGFyZW50ID0gJm9zY19jbGssCisJLnNldF9yYXRlID0gX2Nsa19wbGxfc2V0X3JhdGUsCisJLmdldF9yYXRlID0gY2xrX3BsbF9nZXRfcmF0ZSwKKwkuZW5hYmxlID0gX2Nsa19wbGxfZW5hYmxlLAorCS5kaXNhYmxlID0gX2Nsa19wbGxfZGlzYWJsZSwKK307CisKKy8qIFBMTDQgU1cgc3VwcGxpZXMgdG8gTFZEUyBEaXNwbGF5IEJyaWRnZShMREIpICovCitzdGF0aWMgc3RydWN0IGNsayBteDUzX3BsbDRfc3dfY2xrID0geworCS5wYXJlbnQgPSAmb3NjX2NsaywKKwkuc2V0X3JhdGUgPSBfY2xrX3BsbF9zZXRfcmF0ZSwKKwkuZW5hYmxlID0gX2Nsa19wbGxfZW5hYmxlLAorCS5kaXNhYmxlID0gX2Nsa19wbGxfZGlzYWJsZSwKK307CisKKy8qIExvdy1wb3dlciBBdWRpbyBQbGF5YmFjayBNb2RlIGNsb2NrICovCitzdGF0aWMgc3RydWN0IGNsayBscF9hcG1fY2xrID0geworCS5wYXJlbnQgPSAmb3NjX2NsaywKKwkuc2V0X3BhcmVudCA9IF9jbGtfbHBfYXBtX3NldF9wYXJlbnQsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBwZXJpcGhfYXBtX2NsayA9IHsKKwkucGFyZW50ID0gJnBsbDFfc3dfY2xrLAorCS5zZXRfcGFyZW50ID0gX2Nsa19wZXJpcGhfYXBtX3NldF9wYXJlbnQsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBjcHVfY2xrID0geworCS5wYXJlbnQgPSAmcGxsMV9zd19jbGssCisJLmdldF9yYXRlID0gY2xrX2NwdV9nZXRfcmF0ZSwKKwkuc2V0X3JhdGUgPSBjbGtfY3B1X3NldF9yYXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgYWhiX2NsayA9IHsKKwkucGFyZW50ID0gJm1haW5fYnVzX2NsaywKKwkuZ2V0X3JhdGUgPSBjbGtfYWhiX2dldF9yYXRlLAorCS5zZXRfcmF0ZSA9IF9jbGtfYWhiX3NldF9yYXRlLAorCS5yb3VuZF9yYXRlID0gX2Nsa19haGJfcm91bmRfcmF0ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGlpbV9jbGsgPSB7CisJLnBhcmVudCA9ICZpcGdfY2xrLAorCS5lbmFibGVfcmVnID0gTVhDX0NDTV9DQ0dSMCwKKwkuZW5hYmxlX3NoaWZ0ID0gTVhDX0NDTV9DQ0dSeF9DRzE1X09GRlNFVCwKK307CisKKy8qIE1haW4gSVAgaW50ZXJmYWNlIGNsb2NrIGZvciBhY2Nlc3MgdG8gcmVnaXN0ZXJzICovCitzdGF0aWMgc3RydWN0IGNsayBpcGdfY2xrID0geworCS5wYXJlbnQgPSAmYWhiX2NsaywKKwkuZ2V0X3JhdGUgPSBjbGtfaXBnX2dldF9yYXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgaXBnX3BlcmNsayA9IHsKKwkucGFyZW50ID0gJmxwX2FwbV9jbGssCisJLmdldF9yYXRlID0gY2xrX2lwZ19wZXJfZ2V0X3JhdGUsCisJLnNldF9wYXJlbnQgPSBfY2xrX2lwZ19wZXJfc2V0X3BhcmVudCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGFoYl9tYXhfY2xrID0geworCS5wYXJlbnQgPSAmYWhiX2NsaywKKwkuZW5hYmxlX3JlZyA9IE1YQ19DQ01fQ0NHUjAsCisJLmVuYWJsZV9zaGlmdCA9IE1YQ19DQ01fQ0NHUnhfQ0cxNF9PRkZTRVQsCisJLmVuYWJsZSA9IF9jbGtfbWF4X2VuYWJsZSwKKwkuZGlzYWJsZSA9IF9jbGtfbWF4X2Rpc2FibGUsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBhaXBzX3R6MV9jbGsgPSB7CisJLnBhcmVudCA9ICZhaGJfY2xrLAorCS5zZWNvbmRhcnkgPSAmYWhiX21heF9jbGssCisJLmVuYWJsZV9yZWcgPSBNWENfQ0NNX0NDR1IwLAorCS5lbmFibGVfc2hpZnQgPSBNWENfQ0NNX0NDR1J4X0NHMTJfT0ZGU0VULAorCS5lbmFibGUgPSBfY2xrX2NjZ3JfZW5hYmxlLAorCS5kaXNhYmxlID0gX2Nsa19jY2dyX2Rpc2FibGVfaW53YWl0LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgYWlwc190ejJfY2xrID0geworCS5wYXJlbnQgPSAmYWhiX2NsaywKKwkuc2Vjb25kYXJ5ID0gJmFoYl9tYXhfY2xrLAorCS5lbmFibGVfcmVnID0gTVhDX0NDTV9DQ0dSMCwKKwkuZW5hYmxlX3NoaWZ0ID0gTVhDX0NDTV9DQ0dSeF9DRzEzX09GRlNFVCwKKwkuZW5hYmxlID0gX2Nsa19jY2dyX2VuYWJsZSwKKwkuZGlzYWJsZSA9IF9jbGtfY2Nncl9kaXNhYmxlX2lud2FpdCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdF8zMmtfY2xrID0geworCS5pZCA9IDAsCisJLnBhcmVudCA9ICZja2lsX2NsaywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGtwcF9jbGsgPSB7CisJLmlkID0gMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGR1bW15X2NsayA9IHsKKwkuaWQgPSAwLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZW1pX3Nsb3dfY2xrID0geworCS5wYXJlbnQgPSAmcGxsMl9zd19jbGssCisJLmVuYWJsZV9yZWcgPSBNWENfQ0NNX0NDR1I1LAorCS5lbmFibGVfc2hpZnQgPSBNWENfQ0NNX0NDR1J4X0NHOF9PRkZTRVQsCisJLmVuYWJsZSA9IF9jbGtfY2Nncl9lbmFibGUsCisJLmRpc2FibGUgPSBfY2xrX2NjZ3JfZGlzYWJsZV9pbndhaXQsCisJLmdldF9yYXRlID0gY2xrX2VtaV9zbG93X2dldF9yYXRlLAorfTsKKworc3RhdGljIGludCBjbGtfaXB1X2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJdTMyIHJlZzsKKworCV9jbGtfY2Nncl9lbmFibGUoY2xrKTsKKworCS8qIEVuYWJsZSBoYW5kc2hha2Ugd2l0aCBJUFUgd2hlbiBjZXJ0YWluIGNsb2NrIHJhdGVzIGFyZSBjaGFuZ2VkICovCisJcmVnID0gX19yYXdfcmVhZGwoTVhDX0NDTV9DQ0RSKTsKKwlyZWcgJj0gfk1YQ19DQ01fQ0NEUl9JUFVfSFNfTUFTSzsKKwlfX3Jhd193cml0ZWwocmVnLCBNWENfQ0NNX0NDRFIpOworCisJLyogRW5hYmxlIGhhbmRzaGFrZSB3aXRoIElQVSB3aGVuIExQTSBpcyBlbnRlcmVkICovCisJcmVnID0gX19yYXdfcmVhZGwoTVhDX0NDTV9DTFBDUik7CisJcmVnICY9IH5NWENfQ0NNX0NMUENSX0JZUEFTU19JUFVfTFBNX0hTOworCV9fcmF3X3dyaXRlbChyZWcsIE1YQ19DQ01fQ0xQQ1IpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNsa19pcHVfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJdTMyIHJlZzsKKworCV9jbGtfY2Nncl9kaXNhYmxlKGNsayk7CisKKwkvKiBEaXNhYmxlIGhhbmRzaGFrZSB3aXRoIElQVSB3aGUgZGl2aWRlcnMgYXJlIGNoYW5nZWQgKi8KKwlyZWcgPSBfX3Jhd19yZWFkbChNWENfQ0NNX0NDRFIpOworCXJlZyB8PSBNWENfQ0NNX0NDRFJfSVBVX0hTX01BU0s7CisJX19yYXdfd3JpdGVsKHJlZywgTVhDX0NDTV9DQ0RSKTsKKworCS8qIERpc2FibGUgaGFuZHNoYWtlIHdpdGggSVBVIHdoZW4gTFBNIGlzIGVudGVyZWQgKi8KKwlyZWcgPSBfX3Jhd19yZWFkbChNWENfQ0NNX0NMUENSKTsKKwlyZWcgfD0gTVhDX0NDTV9DTFBDUl9CWVBBU1NfSVBVX0xQTV9IUzsKKwlfX3Jhd193cml0ZWwocmVnLCBNWENfQ0NNX0NMUENSKTsKK30KKworc3RhdGljIHN0cnVjdCBjbGsgYWhibXV4MV9jbGsgPSB7CisJLnBhcmVudCA9ICZhaGJfY2xrLAorCS5zZWNvbmRhcnkgPSAmYWhiX21heF9jbGssCisJLmVuYWJsZV9yZWcgPSBNWENfQ0NNX0NDR1IwLAorCS5lbmFibGVfc2hpZnQgPSBNWENfQ0NNX0NDR1J4X0NHOF9PRkZTRVQsCisJLmVuYWJsZSA9IF9jbGtfY2Nncl9lbmFibGUsCisJLmRpc2FibGUgPSBfY2xrX2NjZ3JfZGlzYWJsZV9pbndhaXQsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBpcHVfc2VjX2NsayA9IHsKKwkucGFyZW50ID0gJmVtaV9mYXN0X2NsaywKKwkuc2Vjb25kYXJ5ID0gJmFoYm11eDFfY2xrLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZGRyX2hmX2NsayA9IHsKKwkucGFyZW50ID0gJnBsbDFfc3dfY2xrLAorCS5nZXRfcmF0ZSA9IF9jbGtfZGRyX2hmX2dldF9yYXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZGRyX2NsayA9IHsKKwkucGFyZW50ID0gJmRkcl9oZl9jbGssCit9OworCisvKiBjbG9jayBkZWZpbml0aW9ucyBmb3IgTUlQSSBIU0MgdW5pdCB3aGljaCBoYXMgYmVlbiByZW1vdmVkCisgKiBmcm9tIGRvY3VtZW50YXRpb24sIGJ1dCBub3QgZnJvbSBoYXJkd2FyZQorICovCitzdGF0aWMgaW50IF9jbGtfaHNjX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJdTMyIHJlZzsKKworCV9jbGtfY2Nncl9lbmFibGUoY2xrKTsKKwkvKiBIYW5kc2hha2Ugd2l0aCBJUFUgd2hlbiBjZXJ0YWluIGNsb2NrIHJhdGVzIGFyZSBjaGFuZ2VkLiAqLworCXJlZyA9IF9fcmF3X3JlYWRsKE1YQ19DQ01fQ0NEUik7CisJcmVnICY9IH5NWENfQ0NNX0NDRFJfSFNDX0hTX01BU0s7CisJX19yYXdfd3JpdGVsKHJlZywgTVhDX0NDTV9DQ0RSKTsKKworCXJlZyA9IF9fcmF3X3JlYWRsKE1YQ19DQ01fQ0xQQ1IpOworCXJlZyAmPSB+TVhDX0NDTV9DTFBDUl9CWVBBU1NfSFNDX0xQTV9IUzsKKwlfX3Jhd193cml0ZWwocmVnLCBNWENfQ0NNX0NMUENSKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfY2xrX2hzY19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1MzIgcmVnOworCisJX2Nsa19jY2dyX2Rpc2FibGUoY2xrKTsKKwkvKiBObyBoYW5kc2hha2Ugd2l0aCBIU0MgYXMgaXRzIG5vdCBlbmFibGVkLiAqLworCXJlZyA9IF9fcmF3X3JlYWRsKE1YQ19DQ01fQ0NEUik7CisJcmVnIHw9IE1YQ19DQ01fQ0NEUl9IU0NfSFNfTUFTSzsKKwlfX3Jhd193cml0ZWwocmVnLCBNWENfQ0NNX0NDRFIpOworCisJcmVnID0gX19yYXdfcmVhZGwoTVhDX0NDTV9DTFBDUik7CisJcmVnIHw9IE1YQ19DQ01fQ0xQQ1JfQllQQVNTX0hTQ19MUE1fSFM7CisJX19yYXdfd3JpdGVsKHJlZywgTVhDX0NDTV9DTFBDUik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1pcGlfaHNwX2NsayA9IHsKKwkucGFyZW50ID0gJmlwdV9jbGssCisJLmVuYWJsZV9yZWcgPSBNWENfQ0NNX0NDR1I0LAorCS5lbmFibGVfc2hpZnQgPSBNWENfQ0NNX0NDR1J4X0NHNl9PRkZTRVQsCisJLmVuYWJsZSA9IF9jbGtfaHNjX2VuYWJsZSwKKwkuZGlzYWJsZSA9IF9jbGtfaHNjX2Rpc2FibGUsCisJLnNlY29uZGFyeSA9ICZtaXBpX2hzYzFfY2xrLAorfTsKKworI2RlZmluZSBERUZJTkVfQ0xPQ0tfQ0NHUihuYW1lLCBpLCBlciwgZXMsIHBmeCwgcCwgcykJXAorCXN0YXRpYyBzdHJ1Y3QgY2xrIG5hbWUgPSB7CQkJXAorCQkuaWQJCT0gaSwJCQlcCisJCS5lbmFibGVfcmVnCT0gZXIsCQkJXAorCQkuZW5hYmxlX3NoaWZ0CT0gZXMsCQkJXAorCQkuZ2V0X3JhdGUJPSBwZngjI19nZXRfcmF0ZSwJXAorCQkuc2V0X3JhdGUJPSBwZngjI19zZXRfcmF0ZSwJXAorCQkucm91bmRfcmF0ZQk9IHBmeCMjX3JvdW5kX3JhdGUsCVwKKwkJLnNldF9wYXJlbnQJPSBwZngjI19zZXRfcGFyZW50LAlcCisJCS5lbmFibGUJCT0gX2Nsa19jY2dyX2VuYWJsZSwJXAorCQkuZGlzYWJsZQk9IF9jbGtfY2Nncl9kaXNhYmxlLAlcCisJCS5wYXJlbnQJCT0gcCwJCQlcCisJCS5zZWNvbmRhcnkJPSBzLAkJCVwKKwl9CisKKyNkZWZpbmUgREVGSU5FX0NMT0NLX01BWChuYW1lLCBpLCBlciwgZXMsIHBmeCwgcCwgcykJXAorCXN0YXRpYyBzdHJ1Y3QgY2xrIG5hbWUgPSB7CQkJXAorCQkuaWQJCT0gaSwJCQlcCisJCS5lbmFibGVfcmVnCT0gZXIsCQkJXAorCQkuZW5hYmxlX3NoaWZ0CT0gZXMsCQkJXAorCQkuZ2V0X3JhdGUJPSBwZngjI19nZXRfcmF0ZSwJXAorCQkuc2V0X3JhdGUJPSBwZngjI19zZXRfcmF0ZSwJXAorCQkuc2V0X3BhcmVudAk9IHBmeCMjX3NldF9wYXJlbnQsCVwKKwkJLmVuYWJsZQkJPSBfY2xrX21heF9lbmFibGUsCVwKKwkJLmRpc2FibGUJPSBfY2xrX21heF9kaXNhYmxlLAlcCisJCS5wYXJlbnQJCT0gcCwJCQlcCisJCS5zZWNvbmRhcnkJPSBzLAkJCVwKKwl9CisKKyNkZWZpbmUgQ0xLX0dFVF9SQVRFKG5hbWUsIG5yLCBiaXRzbmFtZSkJCQkJXAorc3RhdGljIHVuc2lnbmVkIGxvbmcgY2xrXyMjbmFtZSMjX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykJCVwKK3sJCQkJCQkJCQlcCisJdTMyIHJlZywgcHJlZCwgcG9kZjsJCQkJCQlcCisJCQkJCQkJCQlcCisJcmVnID0gX19yYXdfcmVhZGwoTVhDX0NDTV9DU0NEUiMjbnIpOwkJCQlcCisJcHJlZCA9IChyZWcgJiBNWENfQ0NNX0NTQ0RSIyNuciMjXyMjYml0c25hbWUjI19DTEtfUFJFRF9NQVNLKQlcCisJCT4+IE1YQ19DQ01fQ1NDRFIjI25yIyNfIyNiaXRzbmFtZSMjX0NMS19QUkVEX09GRlNFVDsJXAorCXBvZGYgPSAocmVnICYgTVhDX0NDTV9DU0NEUiMjbnIjI18jI2JpdHNuYW1lIyNfQ0xLX1BPREZfTUFTSykJXAorCQk+PiBNWENfQ0NNX0NTQ0RSIyNuciMjXyMjYml0c25hbWUjI19DTEtfUE9ERl9PRkZTRVQ7CVwKKwkJCQkJCQkJCVwKKwlyZXR1cm4gRElWX1JPVU5EX0NMT1NFU1QoY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KSwJCVwKKwkJCShwcmVkICsgMSkgKiAocG9kZiArIDEpKTsJCQlcCit9CisKKyNkZWZpbmUgQ0xLX1NFVF9QQVJFTlQobmFtZSwgbnIsIGJpdHNuYW1lKQkJCQlcCitzdGF0aWMgaW50IGNsa18jI25hbWUjI19zZXRfcGFyZW50KHN0cnVjdCBjbGsgKmNsaywgc3RydWN0IGNsayAqcGFyZW50KQlcCit7CQkJCQkJCQkJXAorCXUzMiByZWcsIG11eDsJCQkJCQkJXAorCQkJCQkJCQkJXAorCW11eCA9IF9nZXRfbXV4KHBhcmVudCwgJnBsbDFfc3dfY2xrLCAmcGxsMl9zd19jbGssCQlcCisJCQkmcGxsM19zd19jbGssICZscF9hcG1fY2xrKTsJCQlcCisJcmVnID0gX19yYXdfcmVhZGwoTVhDX0NDTV9DU0NNUiMjbnIpICYJCQkJXAorCQl+TVhDX0NDTV9DU0NNUiMjbnIjI18jI2JpdHNuYW1lIyNfQ0xLX1NFTF9NQVNLOwkJXAorCXJlZyB8PSBtdXggPDwgTVhDX0NDTV9DU0NNUiMjbnIjI18jI2JpdHNuYW1lIyNfQ0xLX1NFTF9PRkZTRVQ7CVwKKwlfX3Jhd193cml0ZWwocmVnLCBNWENfQ0NNX0NTQ01SIyNucik7CQkJCVwKKwkJCQkJCQkJCVwKKwlyZXR1cm4gMDsJCQkJCQkJXAorfQorCisjZGVmaW5lIENMS19TRVRfUkFURShuYW1lLCBuciwgYml0c25hbWUpCQkJCVwKK3N0YXRpYyBpbnQgY2xrXyMjbmFtZSMjX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQlcCit7CQkJCQkJCQkJXAorCXUzMiByZWcsIGRpdiwgcGFyZW50X3JhdGU7CQkJCQlcCisJdTMyIHByZSA9IDAsIHBvc3QgPSAwOwkJCQkJCVwKKwkJCQkJCQkJCVwKKwlwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CQkJXAorCWRpdiA9IHBhcmVudF9yYXRlIC8gcmF0ZTsJCQkJCVwKKwkJCQkJCQkJCVwKKwlpZiAoKHBhcmVudF9yYXRlIC8gZGl2KSAhPSByYXRlKQkJCQlcCisJCXJldHVybiAtRUlOVkFMOwkJCQkJCVwKKwkJCQkJCQkJCVwKKwlfX2NhbGNfcHJlX3Bvc3RfZGl2aWRlcnMoZGl2LCAmcHJlLCAmcG9zdCwJCQlcCisJCShNWENfQ0NNX0NTQ0RSIyNuciMjXyMjYml0c25hbWUjI19DTEtfUFJFRF9NQVNLID4+CVwKKwkJTVhDX0NDTV9DU0NEUiMjbnIjI18jI2JpdHNuYW1lIyNfQ0xLX1BSRURfT0ZGU0VUKSArIDEsCVwKKwkJKE1YQ19DQ01fQ1NDRFIjI25yIyNfIyNiaXRzbmFtZSMjX0NMS19QT0RGX01BU0sgPj4JXAorCQlNWENfQ0NNX0NTQ0RSIyNuciMjXyMjYml0c25hbWUjI19DTEtfUE9ERl9PRkZTRVQpICsgMSk7XAorCQkJCQkJCQkJXAorCS8qIFNldCBzZGhjMSBjbG9jayBkaXZpZGVyICovCQkJCQlcCisJcmVnID0gX19yYXdfcmVhZGwoTVhDX0NDTV9DU0NEUiMjbnIpICYJCQkJXAorCQl+KE1YQ19DQ01fQ1NDRFIjI25yIyNfIyNiaXRzbmFtZSMjX0NMS19QUkVEX01BU0sJXAorCQl8IE1YQ19DQ01fQ1NDRFIjI25yIyNfIyNiaXRzbmFtZSMjX0NMS19QT0RGX01BU0spOwlcCisJcmVnIHw9IChwb3N0IC0gMSkgPDwJCQkJCQlcCisJCU1YQ19DQ01fQ1NDRFIjI25yIyNfIyNiaXRzbmFtZSMjX0NMS19QT0RGX09GRlNFVDsJXAorCXJlZyB8PSAocHJlIC0gMSkgPDwJCQkJCQlcCisJCU1YQ19DQ01fQ1NDRFIjI25yIyNfIyNiaXRzbmFtZSMjX0NMS19QUkVEX09GRlNFVDsJXAorCV9fcmF3X3dyaXRlbChyZWcsIE1YQ19DQ01fQ1NDRFIjI25yKTsJCQkJXAorCQkJCQkJCQkJXAorCXJldHVybiAwOwkJCQkJCQlcCit9CisKKy8qIFVBUlQgKi8KK0NMS19HRVRfUkFURSh1YXJ0LCAxLCBVQVJUKQorQ0xLX1NFVF9QQVJFTlQodWFydCwgMSwgVUFSVCkKKworc3RhdGljIHN0cnVjdCBjbGsgdWFydF9yb290X2NsayA9IHsKKwkucGFyZW50ID0gJnBsbDJfc3dfY2xrLAorCS5nZXRfcmF0ZSA9IGNsa191YXJ0X2dldF9yYXRlLAorCS5zZXRfcGFyZW50ID0gY2xrX3VhcnRfc2V0X3BhcmVudCwKK307CisKKy8qIFVTQk9IMyAqLworQ0xLX0dFVF9SQVRFKHVzYm9oMywgMSwgVVNCT0gzKQorQ0xLX1NFVF9QQVJFTlQodXNib2gzLCAxLCBVU0JPSDMpCisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVzYm9oM19jbGsgPSB7CisJLnBhcmVudCA9ICZwbGwyX3N3X2NsaywKKwkuZ2V0X3JhdGUgPSBjbGtfdXNib2gzX2dldF9yYXRlLAorCS5zZXRfcGFyZW50ID0gY2xrX3VzYm9oM19zZXRfcGFyZW50LAorCS5lbmFibGUgPSBfY2xrX2NjZ3JfZW5hYmxlLAorCS5kaXNhYmxlID0gX2Nsa19jY2dyX2Rpc2FibGUsCisJLmVuYWJsZV9yZWcgPSBNWENfQ0NNX0NDR1IyLAorCS5lbmFibGVfc2hpZnQgPSBNWENfQ0NNX0NDR1J4X0NHMTRfT0ZGU0VULAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdXNiX2FoYl9jbGsgPSB7CisJLnBhcmVudCA9ICZpcGdfY2xrLAorCS5lbmFibGUgPSBfY2xrX2NjZ3JfZW5hYmxlLAorCS5kaXNhYmxlID0gX2Nsa19jY2dyX2Rpc2FibGUsCisJLmVuYWJsZV9yZWcgPSBNWENfQ0NNX0NDR1IyLAorCS5lbmFibGVfc2hpZnQgPSBNWENfQ0NNX0NDR1J4X0NHMTNfT0ZGU0VULAorfTsKKworc3RhdGljIGludCBjbGtfdXNiX3BoeTFfc2V0X3BhcmVudChzdHJ1Y3QgY2xrICpjbGssIHN0cnVjdCBjbGsgKnBhcmVudCkKK3sKKwl1MzIgcmVnOworCisJcmVnID0gX19yYXdfcmVhZGwoTVhDX0NDTV9DU0NNUjEpICYgfk1YQ19DQ01fQ1NDTVIxX1VTQl9QSFlfQ0xLX1NFTDsKKworCWlmIChwYXJlbnQgPT0gJnBsbDNfc3dfY2xrKQorCQlyZWcgfD0gMSA8PCBNWENfQ0NNX0NTQ01SMV9VU0JfUEhZX0NMS19TRUxfT0ZGU0VUOworCisJX19yYXdfd3JpdGVsKHJlZywgTVhDX0NDTV9DU0NNUjEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVzYl9waHkxX2NsayA9IHsKKwkucGFyZW50ID0gJnBsbDNfc3dfY2xrLAorCS5zZXRfcGFyZW50ID0gY2xrX3VzYl9waHkxX3NldF9wYXJlbnQsCisJLmVuYWJsZSA9IF9jbGtfY2Nncl9lbmFibGUsCisJLmVuYWJsZV9yZWcgPSBNWENfQ0NNX0NDR1IyLAorCS5lbmFibGVfc2hpZnQgPSBNWENfQ0NNX0NDR1J4X0NHMF9PRkZTRVQsCisJLmRpc2FibGUgPSBfY2xrX2NjZ3JfZGlzYWJsZSwKK307CisKKy8qIGVDU1BJICovCitDTEtfR0VUX1JBVEUoZWNzcGksIDIsIENTUEkpCitDTEtfU0VUX1BBUkVOVChlY3NwaSwgMSwgQ1NQSSkKKworc3RhdGljIHN0cnVjdCBjbGsgZWNzcGlfbWFpbl9jbGsgPSB7CisJLnBhcmVudCA9ICZwbGwzX3N3X2NsaywKKwkuZ2V0X3JhdGUgPSBjbGtfZWNzcGlfZ2V0X3JhdGUsCisJLnNldF9wYXJlbnQgPSBjbGtfZWNzcGlfc2V0X3BhcmVudCwKK307CisKKy8qIGVTREhDICovCitDTEtfR0VUX1JBVEUoZXNkaGMxLCAxLCBFU0RIQzFfTVNIQzEpCitDTEtfU0VUX1BBUkVOVChlc2RoYzEsIDEsIEVTREhDMV9NU0hDMSkKK0NMS19TRVRfUkFURShlc2RoYzEsIDEsIEVTREhDMV9NU0hDMSkKKworQ0xLX0dFVF9SQVRFKGVzZGhjMiwgMSwgRVNESEMyX01TSEMyKQorQ0xLX1NFVF9QQVJFTlQoZXNkaGMyLCAxLCBFU0RIQzJfTVNIQzIpCitDTEtfU0VUX1JBVEUoZXNkaGMyLCAxLCBFU0RIQzJfTVNIQzIpCisKKyNkZWZpbmUgREVGSU5FX0NMT0NLX0ZVTEwobmFtZSwgaSwgZXIsIGVzLCBnciwgc3IsIGUsIGQsIHAsIHMpCQlcCisJc3RhdGljIHN0cnVjdCBjbGsgbmFtZSA9IHsJCQkJCVwKKwkJLmlkCQk9IGksCQkJCQlcCisJCS5lbmFibGVfcmVnCT0gZXIsCQkJCQlcCisJCS5lbmFibGVfc2hpZnQJPSBlcywJCQkJCVwKKwkJLmdldF9yYXRlCT0gZ3IsCQkJCQlcCisJCS5zZXRfcmF0ZQk9IHNyLAkJCQkJXAorCQkuZW5hYmxlCQk9IGUsCQkJCQlcCisJCS5kaXNhYmxlCT0gZCwJCQkJCVwKKwkJLnBhcmVudAkJPSBwLAkJCQkJXAorCQkuc2Vjb25kYXJ5CT0gcywJCQkJCVwKKwl9CisKKyNkZWZpbmUgREVGSU5FX0NMT0NLKG5hbWUsIGksIGVyLCBlcywgZ3IsIHNyLCBwLCBzKQkJCVwKKwlERUZJTkVfQ0xPQ0tfRlVMTChuYW1lLCBpLCBlciwgZXMsIGdyLCBzciwgX2Nsa19jY2dyX2VuYWJsZSwgX2Nsa19jY2dyX2Rpc2FibGUsIHAsIHMpCisKKy8qIFNoYXJlZCBwZXJpcGhlcmFsIGJ1cyBhcmJpdGVyICovCitERUZJTkVfQ0xPQ0soc3BiYV9jbGssIDAsIE1YQ19DQ01fQ0NHUjUsIE1YQ19DQ01fQ0NHUnhfQ0cwX09GRlNFVCwKKwlOVUxMLCAgTlVMTCwgJmlwZ19jbGssIE5VTEwpOworCisvKiBVQVJUICovCitERUZJTkVfQ0xPQ0sodWFydDFfaXBnX2NsaywgMCwgTVhDX0NDTV9DQ0dSMSwgTVhDX0NDTV9DQ0dSeF9DRzNfT0ZGU0VULAorCU5VTEwsICBOVUxMLCAmaXBnX2NsaywgJmFpcHNfdHoxX2Nsayk7CitERUZJTkVfQ0xPQ0sodWFydDJfaXBnX2NsaywgMSwgTVhDX0NDTV9DQ0dSMSwgTVhDX0NDTV9DQ0dSeF9DRzVfT0ZGU0VULAorCU5VTEwsICBOVUxMLCAmaXBnX2NsaywgJmFpcHNfdHoxX2Nsayk7CitERUZJTkVfQ0xPQ0sodWFydDNfaXBnX2NsaywgMiwgTVhDX0NDTV9DQ0dSMSwgTVhDX0NDTV9DQ0dSeF9DRzdfT0ZGU0VULAorCU5VTEwsICBOVUxMLCAmaXBnX2NsaywgJnNwYmFfY2xrKTsKK0RFRklORV9DTE9DSyh1YXJ0MV9jbGssIDAsIE1YQ19DQ01fQ0NHUjEsIE1YQ19DQ01fQ0NHUnhfQ0c0X09GRlNFVCwKKwlOVUxMLCAgTlVMTCwgJnVhcnRfcm9vdF9jbGssICZ1YXJ0MV9pcGdfY2xrKTsKK0RFRklORV9DTE9DSyh1YXJ0Ml9jbGssIDEsIE1YQ19DQ01fQ0NHUjEsIE1YQ19DQ01fQ0NHUnhfQ0c2X09GRlNFVCwKKwlOVUxMLCAgTlVMTCwgJnVhcnRfcm9vdF9jbGssICZ1YXJ0Ml9pcGdfY2xrKTsKK0RFRklORV9DTE9DSyh1YXJ0M19jbGssIDIsIE1YQ19DQ01fQ0NHUjEsIE1YQ19DQ01fQ0NHUnhfQ0c4X09GRlNFVCwKKwlOVUxMLCAgTlVMTCwgJnVhcnRfcm9vdF9jbGssICZ1YXJ0M19pcGdfY2xrKTsKKworLyogR1BUICovCitERUZJTkVfQ0xPQ0soZ3B0X2lwZ19jbGssIDAsIE1YQ19DQ01fQ0NHUjIsIE1YQ19DQ01fQ0NHUnhfQ0cxMF9PRkZTRVQsCisJTlVMTCwgIE5VTEwsICZpcGdfY2xrLCBOVUxMKTsKK0RFRklORV9DTE9DSyhncHRfY2xrLCAwLCBNWENfQ0NNX0NDR1IyLCBNWENfQ0NNX0NDR1J4X0NHOV9PRkZTRVQsCisJTlVMTCwgIE5VTEwsICZpcGdfY2xrLCAmZ3B0X2lwZ19jbGspOworCisvKiBJMkMgKi8KK0RFRklORV9DTE9DSyhpMmMxX2NsaywgMCwgTVhDX0NDTV9DQ0dSMSwgTVhDX0NDTV9DQ0dSeF9DRzlfT0ZGU0VULAorCU5VTEwsIE5VTEwsICZpcGdfY2xrLCBOVUxMKTsKK0RFRklORV9DTE9DSyhpMmMyX2NsaywgMSwgTVhDX0NDTV9DQ0dSMSwgTVhDX0NDTV9DQ0dSeF9DRzEwX09GRlNFVCwKKwlOVUxMLCBOVUxMLCAmaXBnX2NsaywgTlVMTCk7CitERUZJTkVfQ0xPQ0soaHNpMmNfY2xrLCAwLCBNWENfQ0NNX0NDR1IxLCBNWENfQ0NNX0NDR1J4X0NHMTFfT0ZGU0VULAorCU5VTEwsIE5VTEwsICZpcGdfY2xrLCBOVUxMKTsKKworLyogRkVDICovCitERUZJTkVfQ0xPQ0soZmVjX2NsaywgMCwgTVhDX0NDTV9DQ0dSMiwgTVhDX0NDTV9DQ0dSeF9DRzEyX09GRlNFVCwKKwlOVUxMLCAgTlVMTCwgJmlwZ19jbGssIE5VTEwpOworCisvKiBORkMgKi8KK0RFRklORV9DTE9DS19DQ0dSKG5mY19jbGssIDAsIE1YQ19DQ01fQ0NHUjUsIE1YQ19DQ01fQ0NHUnhfQ0cxMF9PRkZTRVQsCisJY2xrX25mYywgJmVtaV9zbG93X2NsaywgTlVMTCk7CisKKy8qIFNTSSAqLworREVGSU5FX0NMT0NLKHNzaTFfaXBnX2NsaywgMCwgTVhDX0NDTV9DQ0dSMywgTVhDX0NDTV9DQ0dSeF9DRzhfT0ZGU0VULAorCU5VTEwsIE5VTEwsICZpcGdfY2xrLCBOVUxMKTsKK0RFRklORV9DTE9DSyhzc2kxX2NsaywgMCwgTVhDX0NDTV9DQ0dSMywgTVhDX0NDTV9DQ0dSeF9DRzlfT0ZGU0VULAorCU5VTEwsIE5VTEwsICZwbGwzX3N3X2NsaywgJnNzaTFfaXBnX2Nsayk7CitERUZJTkVfQ0xPQ0soc3NpMl9pcGdfY2xrLCAxLCBNWENfQ0NNX0NDR1IzLCBNWENfQ0NNX0NDR1J4X0NHMTBfT0ZGU0VULAorCU5VTEwsIE5VTEwsICZpcGdfY2xrLCBOVUxMKTsKK0RFRklORV9DTE9DSyhzc2kyX2NsaywgMSwgTVhDX0NDTV9DQ0dSMywgTVhDX0NDTV9DQ0dSeF9DRzExX09GRlNFVCwKKwlOVUxMLCBOVUxMLCAmcGxsM19zd19jbGssICZzc2kyX2lwZ19jbGspOworREVGSU5FX0NMT0NLKHNzaTNfaXBnX2NsaywgMiwgTVhDX0NDTV9DQ0dSMywgTVhDX0NDTV9DQ0dSeF9DRzEyX09GRlNFVCwKKwlOVUxMLCBOVUxMLCAmaXBnX2NsaywgTlVMTCk7CitERUZJTkVfQ0xPQ0soc3NpM19jbGssIDIsIE1YQ19DQ01fQ0NHUjMsIE1YQ19DQ01fQ0NHUnhfQ0cxM19PRkZTRVQsCisJTlVMTCwgTlVMTCwgJnBsbDNfc3dfY2xrLCAmc3NpM19pcGdfY2xrKTsKKworLyogZUNTUEkgKi8KK0RFRklORV9DTE9DS19GVUxMKGVjc3BpMV9pcGdfY2xrLCAwLCBNWENfQ0NNX0NDR1I0LCBNWENfQ0NNX0NDR1J4X0NHOV9PRkZTRVQsCisJCU5VTEwsIE5VTEwsIF9jbGtfY2Nncl9lbmFibGVfaW5ydW4sIF9jbGtfY2Nncl9kaXNhYmxlLAorCQkmaXBnX2NsaywgJnNwYmFfY2xrKTsKK0RFRklORV9DTE9DSyhlY3NwaTFfY2xrLCAwLCBNWENfQ0NNX0NDR1I0LCBNWENfQ0NNX0NDR1J4X0NHMTBfT0ZGU0VULAorCQlOVUxMLCBOVUxMLCAmZWNzcGlfbWFpbl9jbGssICZlY3NwaTFfaXBnX2Nsayk7CitERUZJTkVfQ0xPQ0tfRlVMTChlY3NwaTJfaXBnX2NsaywgMCwgTVhDX0NDTV9DQ0dSNCwgTVhDX0NDTV9DQ0dSeF9DRzExX09GRlNFVCwKKwkJTlVMTCwgTlVMTCwgX2Nsa19jY2dyX2VuYWJsZV9pbnJ1biwgX2Nsa19jY2dyX2Rpc2FibGUsCisJCSZpcGdfY2xrLCAmYWlwc190ejJfY2xrKTsKK0RFRklORV9DTE9DSyhlY3NwaTJfY2xrLCAwLCBNWENfQ0NNX0NDR1I0LCBNWENfQ0NNX0NDR1J4X0NHMTJfT0ZGU0VULAorCQlOVUxMLCBOVUxMLCAmZWNzcGlfbWFpbl9jbGssICZlY3NwaTJfaXBnX2Nsayk7CisKKy8qIENTUEkgKi8KK0RFRklORV9DTE9DSyhjc3BpX2lwZ19jbGssIDAsIE1YQ19DQ01fQ0NHUjQsIE1YQ19DQ01fQ0NHUnhfQ0c5X09GRlNFVCwKKwkJTlVMTCwgTlVMTCwgJmlwZ19jbGssICZhaXBzX3R6Ml9jbGspOworREVGSU5FX0NMT0NLKGNzcGlfY2xrLCAwLCBNWENfQ0NNX0NDR1I0LCBNWENfQ0NNX0NDR1J4X0NHMTNfT0ZGU0VULAorCQlOVUxMLCBOVUxMLCAmaXBnX2NsaywgJmNzcGlfaXBnX2Nsayk7CisKKy8qIFNETUEgKi8KK0RFRklORV9DTE9DSyhzZG1hX2NsaywgMSwgTVhDX0NDTV9DQ0dSNCwgTVhDX0NDTV9DQ0dSeF9DRzE1X09GRlNFVCwKKwkJTlVMTCwgTlVMTCwgJmFoYl9jbGssIE5VTEwpOworCisvKiBlU0RIQyAqLworREVGSU5FX0NMT0NLX0ZVTEwoZXNkaGMxX2lwZ19jbGssIDAsIE1YQ19DQ01fQ0NHUjMsIE1YQ19DQ01fQ0NHUnhfQ0cwX09GRlNFVCwKKwlOVUxMLCAgTlVMTCwgX2Nsa19tYXhfZW5hYmxlLCBfY2xrX21heF9kaXNhYmxlLCAmaXBnX2NsaywgTlVMTCk7CitERUZJTkVfQ0xPQ0tfTUFYKGVzZGhjMV9jbGssIDAsIE1YQ19DQ01fQ0NHUjMsIE1YQ19DQ01fQ0NHUnhfQ0cxX09GRlNFVCwKKwljbGtfZXNkaGMxLCAmcGxsMl9zd19jbGssICZlc2RoYzFfaXBnX2Nsayk7CitERUZJTkVfQ0xPQ0tfRlVMTChlc2RoYzJfaXBnX2NsaywgMSwgTVhDX0NDTV9DQ0dSMywgTVhDX0NDTV9DQ0dSeF9DRzJfT0ZGU0VULAorCU5VTEwsICBOVUxMLCBfY2xrX21heF9lbmFibGUsIF9jbGtfbWF4X2Rpc2FibGUsICZpcGdfY2xrLCBOVUxMKTsKK0RFRklORV9DTE9DS19NQVgoZXNkaGMyX2NsaywgMSwgTVhDX0NDTV9DQ0dSMywgTVhDX0NDTV9DQ0dSeF9DRzNfT0ZGU0VULAorCWNsa19lc2RoYzIsICZwbGwyX3N3X2NsaywgJmVzZGhjMl9pcGdfY2xrKTsKKworREVGSU5FX0NMT0NLKG1pcGlfZXNjX2NsaywgMCwgTVhDX0NDTV9DQ0dSNCwgTVhDX0NDTV9DQ0dSeF9DRzVfT0ZGU0VULCBOVUxMLCBOVUxMLCBOVUxMLCAmcGxsMl9zd19jbGspOworREVGSU5FX0NMT0NLKG1pcGlfaHNjMl9jbGssIDAsIE1YQ19DQ01fQ0NHUjQsIE1YQ19DQ01fQ0NHUnhfQ0c0X09GRlNFVCwgTlVMTCwgTlVMTCwgJm1pcGlfZXNjX2NsaywgJnBsbDJfc3dfY2xrKTsKK0RFRklORV9DTE9DSyhtaXBpX2hzYzFfY2xrLCAwLCBNWENfQ0NNX0NDR1I0LCBNWENfQ0NNX0NDR1J4X0NHM19PRkZTRVQsIE5VTEwsIE5VTEwsICZtaXBpX2hzYzJfY2xrLCAmcGxsMl9zd19jbGspOworCisvKiBJUFUgKi8KK0RFRklORV9DTE9DS19GVUxMKGlwdV9jbGssIDAsIE1YQ19DQ01fQ0NHUjUsIE1YQ19DQ01fQ0NHUnhfQ0c1X09GRlNFVCwKKwlOVUxMLCAgTlVMTCwgY2xrX2lwdV9lbmFibGUsIGNsa19pcHVfZGlzYWJsZSwgJmFoYl9jbGssICZpcHVfc2VjX2Nsayk7CisKK0RFRklORV9DTE9DS19GVUxMKGVtaV9mYXN0X2NsaywgMCwgTVhDX0NDTV9DQ0dSNSwgTVhDX0NDTV9DQ0dSeF9DRzdfT0ZGU0VULAorCQlOVUxMLCBOVUxMLCBfY2xrX2NjZ3JfZW5hYmxlLCBfY2xrX2NjZ3JfZGlzYWJsZV9pbndhaXQsCisJCSZkZHJfY2xrLCBOVUxMKTsKKworREVGSU5FX0NMT0NLKGlwdV9kaTBfY2xrLCAwLCBNWENfQ0NNX0NDR1I2LCBNWENfQ0NNX0NDR1J4X0NHNV9PRkZTRVQsCisJCU5VTEwsIE5VTEwsICZwbGwzX3N3X2NsaywgTlVMTCk7CitERUZJTkVfQ0xPQ0soaXB1X2RpMV9jbGssIDAsIE1YQ19DQ01fQ0NHUjYsIE1YQ19DQ01fQ0NHUnhfQ0c2X09GRlNFVCwKKwkJTlVMTCwgTlVMTCwgJnBsbDNfc3dfY2xrLCBOVUxMKTsKKworI2RlZmluZSBfUkVHSVNURVJfQ0xPQ0soZCwgbiwgYykgXAorICAgICAgIHsgXAorCQkuZGV2X2lkID0gZCwgXAorCQkuY29uX2lkID0gbiwgXAorCQkuY2xrID0gJmMsICAgXAorICAgICAgIH0sCisKK3N0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCBteDUxX2xvb2t1cHNbXSA9IHsKKwlfUkVHSVNURVJfQ0xPQ0soImlteC11YXJ0LjAiLCBOVUxMLCB1YXJ0MV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgtdWFydC4xIiwgTlVMTCwgdWFydDJfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaW14LXVhcnQuMiIsIE5VTEwsIHVhcnQzX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImdwdCIsIGdwdF9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJmZWMuMCIsIE5VTEwsIGZlY19jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgtaTJjLjAiLCBOVUxMLCBpMmMxX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImlteC1pMmMuMSIsIE5VTEwsIGkyYzJfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaW14LWkyYy4yIiwgTlVMTCwgaHNpMmNfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygibXhjLWVoY2kuMCIsICJ1c2IiLCB1c2JvaDNfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygibXhjLWVoY2kuMCIsICJ1c2JfYWhiIiwgdXNiX2FoYl9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJteGMtZWhjaS4wIiwgInVzYl9waHkxIiwgdXNiX3BoeTFfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygibXhjLWVoY2kuMSIsICJ1c2IiLCB1c2JvaDNfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygibXhjLWVoY2kuMSIsICJ1c2JfYWhiIiwgdXNiX2FoYl9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJteGMtZWhjaS4yIiwgInVzYiIsIHVzYm9oM19jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJteGMtZWhjaS4yIiwgInVzYl9haGIiLCB1c2JfYWhiX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImZzbC11c2IyLXVkYyIsICJ1c2IiLCB1c2JvaDNfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiZnNsLXVzYjItdWRjIiwgInVzYl9haGIiLCBhaGJfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaW14LWtleXBhZC4wIiwgTlVMTCwga3BwX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soIm14Y19uYW5kIiwgTlVMTCwgbmZjX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImlteC1zc2kuMCIsIE5VTEwsIHNzaTFfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaW14LXNzaS4xIiwgTlVMTCwgc3NpMl9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgtc3NpLjIiLCBOVUxMLCBzc2kzX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImlteC1zZG1hIiwgTlVMTCwgc2RtYV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJja2loIiwgY2tpaF9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJja2loMiIsIGNraWgyX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImdwdF8zMmsiLCBncHRfMzJrX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImlteDUxLWVjc3BpLjAiLCBOVUxMLCBlY3NwaTFfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaW14NTEtZWNzcGkuMSIsIE5VTEwsIGVjc3BpMl9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXg1MS1jc3BpLjAiLCBOVUxMLCBjc3BpX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soInNkaGNpLWVzZGhjLWlteC4wIiwgTlVMTCwgZXNkaGMxX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soInNkaGNpLWVzZGhjLWlteC4xIiwgTlVMTCwgZXNkaGMyX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImNwdV9jbGsiLCBjcHVfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiaWltX2NsayIsIGlpbV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgyLXdkdC4wIiwgTlVMTCwgZHVtbXlfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaW14Mi13ZHQuMSIsIE5VTEwsIGR1bW15X2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgIm1pcGlfaHNwIiwgbWlwaV9oc3BfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaW14LWlwdXYzIiwgTlVMTCwgaXB1X2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImlteC1pcHV2MyIsICJkaTAiLCBpcHVfZGkwX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImlteC1pcHV2MyIsICJkaTEiLCBpcHVfZGkxX2NsaykKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCBteDUzX2xvb2t1cHNbXSA9IHsKKwlfUkVHSVNURVJfQ0xPQ0soImlteC11YXJ0LjAiLCBOVUxMLCB1YXJ0MV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgtdWFydC4xIiwgTlVMTCwgdWFydDJfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaW14LXVhcnQuMiIsIE5VTEwsIHVhcnQzX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImdwdCIsIGdwdF9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJmZWMuMCIsIE5VTEwsIGZlY19jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJpaW1fY2xrIiwgaWltX2NsaykKK307CisKK3N0YXRpYyB2b2lkIGNsa190cmVlX2luaXQodm9pZCkKK3sKKwl1MzIgcmVnOworCisJaXBnX3BlcmNsay5zZXRfcGFyZW50KCZpcGdfcGVyY2xrLCAmbHBfYXBtX2Nsayk7CisKKwkvKgorCSAqIEluaXRpYWxpc2UgdGhlIElQRyBQRVIgQ0xLIGRpdmlkZXJzIHRvIDMuIElQR19QRVJfQ0xLIHNob3VsZCBiZSBhdAorCSAqIDhNSHosIGl0cyBkZXJpdmVkIGZyb20gbHBfYXBtLgorCSAqCisJICogRklYTUU6IFZlcmlmeSBpZiB0cnVlIGZvciBhbGwgYm9hcmRzCisJICovCisJcmVnID0gX19yYXdfcmVhZGwoTVhDX0NDTV9DQkNEUik7CisJcmVnICY9IH5NWENfQ0NNX0NCQ0RSX1BFUkNMS19QUkVEMV9NQVNLOworCXJlZyAmPSB+TVhDX0NDTV9DQkNEUl9QRVJDTEtfUFJFRDJfTUFTSzsKKwlyZWcgJj0gfk1YQ19DQ01fQ0JDRFJfUEVSQ0xLX1BPREZfTUFTSzsKKwlyZWcgfD0gKDIgPDwgTVhDX0NDTV9DQkNEUl9QRVJDTEtfUFJFRDFfT0ZGU0VUKTsKKwlfX3Jhd193cml0ZWwocmVnLCBNWENfQ0NNX0NCQ0RSKTsKK30KKworaW50IF9faW5pdCBteDUxX2Nsb2Nrc19pbml0KHVuc2lnbmVkIGxvbmcgY2tpbCwgdW5zaWduZWQgbG9uZyBvc2MsCisJCQl1bnNpZ25lZCBsb25nIGNraWgxLCB1bnNpZ25lZCBsb25nIGNraWgyKQoreworCWludCBpOworCisJZXh0ZXJuYWxfbG93X3JlZmVyZW5jZSA9IGNraWw7CisJZXh0ZXJuYWxfaGlnaF9yZWZlcmVuY2UgPSBja2loMTsKKwlja2loMl9yZWZlcmVuY2UgPSBja2loMjsKKwlvc2NpbGxhdG9yX3JlZmVyZW5jZSA9IG9zYzsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG14NTFfbG9va3Vwcyk7IGkrKykKKwkJY2xrZGV2X2FkZCgmbXg1MV9sb29rdXBzW2ldKTsKKworCWNsa190cmVlX2luaXQoKTsKKworCWNsa19zZXRfcGFyZW50KCZ1YXJ0X3Jvb3RfY2xrLCAmcGxsM19zd19jbGspOworCWNsa19lbmFibGUoJmNwdV9jbGspOworCWNsa19lbmFibGUoJm1haW5fYnVzX2Nsayk7CisKKwljbGtfZW5hYmxlKCZpaW1fY2xrKTsKKwlteDUxX3JldmlzaW9uKCk7CisJY2xrX2Rpc2FibGUoJmlpbV9jbGspOworCisJLyogbW92ZSB1c2JfcGh5X2NsayB0byAyNE1IeiAqLworCWNsa19zZXRfcGFyZW50KCZ1c2JfcGh5MV9jbGssICZvc2NfY2xrKTsKKworCS8qIHNldCB0aGUgdXNib2gzX2NsayBwYXJlbnQgdG8gcGxsMl9zd19jbGsgKi8KKwljbGtfc2V0X3BhcmVudCgmdXNib2gzX2NsaywgJnBsbDJfc3dfY2xrKTsKKworCS8qIFNldCBTREhDIHBhcmVudHMgdG8gYmUgUExMMiAqLworCWNsa19zZXRfcGFyZW50KCZlc2RoYzFfY2xrLCAmcGxsMl9zd19jbGspOworCWNsa19zZXRfcGFyZW50KCZlc2RoYzJfY2xrLCAmcGxsMl9zd19jbGspOworCisJLyogc2V0IFNESEMgcm9vdCBjbG9jayBhcyAxNjYuMjVNSFoqLworCWNsa19zZXRfcmF0ZSgmZXNkaGMxX2NsaywgMTY2MjUwMDAwKTsKKwljbGtfc2V0X3JhdGUoJmVzZGhjMl9jbGssIDE2NjI1MDAwMCk7CisKKwkvKiBTeXN0ZW0gdGltZXIgKi8KKwlteGNfdGltZXJfaW5pdCgmZ3B0X2NsaywgTVg1MV9JT19BRERSRVNTKE1YNTFfR1BUMV9CQVNFX0FERFIpLAorCQlNWDUxX01YQ19JTlRfR1BUKTsKKwlyZXR1cm4gMDsKK30KKworaW50IF9faW5pdCBteDUzX2Nsb2Nrc19pbml0KHVuc2lnbmVkIGxvbmcgY2tpbCwgdW5zaWduZWQgbG9uZyBvc2MsCisJCQl1bnNpZ25lZCBsb25nIGNraWgxLCB1bnNpZ25lZCBsb25nIGNraWgyKQoreworCWludCBpOworCisJZXh0ZXJuYWxfbG93X3JlZmVyZW5jZSA9IGNraWw7CisJZXh0ZXJuYWxfaGlnaF9yZWZlcmVuY2UgPSBja2loMTsKKwlja2loMl9yZWZlcmVuY2UgPSBja2loMjsKKwlvc2NpbGxhdG9yX3JlZmVyZW5jZSA9IG9zYzsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG14NTNfbG9va3Vwcyk7IGkrKykKKwkJY2xrZGV2X2FkZCgmbXg1M19sb29rdXBzW2ldKTsKKworCWNsa190cmVlX2luaXQoKTsKKworCWNsa19lbmFibGUoJmNwdV9jbGspOworCWNsa19lbmFibGUoJm1haW5fYnVzX2Nsayk7CisKKwljbGtfZW5hYmxlKCZpaW1fY2xrKTsKKwlteDUzX3JldmlzaW9uKCk7CisJY2xrX2Rpc2FibGUoJmlpbV9jbGspOworCisJLyogU3lzdGVtIHRpbWVyICovCisJbXhjX3RpbWVyX2luaXQoJmdwdF9jbGssIE1YNTNfSU9fQUREUkVTUyhNWDUzX0dQVDFfQkFTRV9BRERSKSwKKwkJTVg1M19JTlRfR1BUKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXg1L2Nsb2NrLW14NTEuYyBiL2FyY2gvYXJtL21hY2gtbXg1L2Nsb2NrLW14NTEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGFjMzZkOC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLW14NS9jbG9jay1teDUxLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTQwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAwOC0yMDEwIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBBbWl0IEt1Y2hlcmlhIDxhbWl0Lmt1Y2hlcmlhQGNhbm9uaWNhbC5jb20+Ci0gKgotICogVGhlIGNvZGUgY29udGFpbmVkIGhlcmVpbiBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBWZXJzaW9uIDIgb3IgbGF0ZXIgYXQgdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6Ci0gKgotICogaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ncGwtbGljZW5zZS5odG1sCi0gKiBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0KLSNpbmNsdWRlIDxhc20vY2xrZGV2Lmg+Ci0jaW5jbHVkZSA8YXNtL2RpdjY0Lmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KLSNpbmNsdWRlIDxtYWNoL2Nsb2NrLmg+Ci0KLSNpbmNsdWRlICJjcm1fcmVncy5oIgotCi0vKiBFeHRlcm5hbCBjbG9jayB2YWx1ZXMgcGFzc2VkLWluIGJ5IHRoZSBib2FyZCBjb2RlICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBleHRlcm5hbF9oaWdoX3JlZmVyZW5jZSwgZXh0ZXJuYWxfbG93X3JlZmVyZW5jZTsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIG9zY2lsbGF0b3JfcmVmZXJlbmNlLCBja2loMl9yZWZlcmVuY2U7Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG9zY19jbGs7Ci1zdGF0aWMgc3RydWN0IGNsayBwbGwxX21haW5fY2xrOwotc3RhdGljIHN0cnVjdCBjbGsgcGxsMV9zd19jbGs7Ci1zdGF0aWMgc3RydWN0IGNsayBwbGwyX3N3X2NsazsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHBsbDNfc3dfY2xrOwotc3RhdGljIHN0cnVjdCBjbGsgbHBfYXBtX2NsazsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHBlcmlwaF9hcG1fY2xrOwotc3RhdGljIHN0cnVjdCBjbGsgYWhiX2NsazsKLXN0YXRpYyBzdHJ1Y3QgY2xrIGlwZ19jbGs7Ci1zdGF0aWMgc3RydWN0IGNsayB1c2JvaDNfY2xrOwotCi0jZGVmaW5lIE1BWF9EUExMX1dBSVRfVFJJRVMJMTAwMCAvKiAxMDAwICogdWRlbGF5KDEpID0gMW1zICovCi0KLS8qIGNhbGN1bGF0ZSBiZXN0IHByZSBhbmQgcG9zdCBkaXZpZGVycyB0byBnZXQgdGhlIHJlcXVpcmVkIGRpdmlkZXIgKi8KLXN0YXRpYyB2b2lkIF9fY2FsY19wcmVfcG9zdF9kaXZpZGVycyh1MzIgZGl2LCB1MzIgKnByZSwgdTMyICpwb3N0LAotCXUzMiBtYXhfcHJlLCB1MzIgbWF4X3Bvc3QpCi17Ci0JaWYgKGRpdiA+PSBtYXhfcHJlICogbWF4X3Bvc3QpIHsKLQkJKnByZSA9IG1heF9wcmU7Ci0JCSpwb3N0ID0gbWF4X3Bvc3Q7Ci0JfSBlbHNlIGlmIChkaXYgPj0gbWF4X3ByZSkgewotCQl1MzIgbWluX3ByZSwgdGVtcF9wcmUsIG9sZF9lcnIsIGVycjsKLQkJbWluX3ByZSA9IERJVl9ST1VORF9VUChkaXYsIG1heF9wb3N0KTsKLQkJb2xkX2VyciA9IG1heF9wcmU7Ci0JCWZvciAodGVtcF9wcmUgPSBtYXhfcHJlOyB0ZW1wX3ByZSA+PSBtaW5fcHJlOyB0ZW1wX3ByZS0tKSB7Ci0JCQllcnIgPSBkaXYgJSB0ZW1wX3ByZTsKLQkJCWlmIChlcnIgPT0gMCkgewotCQkJCSpwcmUgPSB0ZW1wX3ByZTsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWVyciA9IHRlbXBfcHJlIC0gZXJyOwotCQkJaWYgKGVyciA8IG9sZF9lcnIpIHsKLQkJCQlvbGRfZXJyID0gZXJyOwotCQkJCSpwcmUgPSB0ZW1wX3ByZTsKLQkJCX0KLQkJfQotCQkqcG9zdCA9IERJVl9ST1VORF9VUChkaXYsICpwcmUpOwotCX0gZWxzZSB7Ci0JCSpwcmUgPSBkaXY7Ci0JCSpwb3N0ID0gMTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIF9jbGtfY2Nncl9zZXRjbGsoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBtb2RlKQotewotCXUzMiByZWcgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpOwotCi0JcmVnICY9IH4oTVhDX0NDTV9DQ0dSeF9DR19NQVNLIDw8IGNsay0+ZW5hYmxlX3NoaWZ0KTsKLQlyZWcgfD0gbW9kZSA8PCBjbGstPmVuYWJsZV9zaGlmdDsKLQotCV9fcmF3X3dyaXRlbChyZWcsIGNsay0+ZW5hYmxlX3JlZyk7Ci19Ci0KLXN0YXRpYyBpbnQgX2Nsa19jY2dyX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JX2Nsa19jY2dyX3NldGNsayhjbGssIE1YQ19DQ01fQ0NHUnhfTU9EX09OKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgX2Nsa19jY2dyX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQotewotCV9jbGtfY2Nncl9zZXRjbGsoY2xrLCBNWENfQ0NNX0NDR1J4X01PRF9PRkYpOwotfQotCi1zdGF0aWMgaW50IF9jbGtfY2Nncl9lbmFibGVfaW5ydW4oc3RydWN0IGNsayAqY2xrKQotewotCV9jbGtfY2Nncl9zZXRjbGsoY2xrLCBNWENfQ0NNX0NDR1J4X01PRF9JRExFKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgX2Nsa19jY2dyX2Rpc2FibGVfaW53YWl0KHN0cnVjdCBjbGsgKmNsaykKLXsKLQlfY2xrX2NjZ3Jfc2V0Y2xrKGNsaywgTVhDX0NDTV9DQ0dSeF9NT0RfSURMRSk7Ci19Ci0KLS8qCi0gKiBGb3IgdGhlIDQtdG8tMSBtdXhlZCBpbnB1dCBjbG9jawotICovCi1zdGF0aWMgaW5saW5lIHUzMiBfZ2V0X211eChzdHJ1Y3QgY2xrICpwYXJlbnQsIHN0cnVjdCBjbGsgKm0wLAotCQkJICAgc3RydWN0IGNsayAqbTEsIHN0cnVjdCBjbGsgKm0yLCBzdHJ1Y3QgY2xrICptMykKLXsKLQlpZiAocGFyZW50ID09IG0wKQotCQlyZXR1cm4gMDsKLQllbHNlIGlmIChwYXJlbnQgPT0gbTEpCi0JCXJldHVybiAxOwotCWVsc2UgaWYgKHBhcmVudCA9PSBtMikKLQkJcmV0dXJuIDI7Ci0JZWxzZSBpZiAocGFyZW50ID09IG0zKQotCQlyZXR1cm4gMzsKLQllbHNlCi0JCUJVRygpOwotCi0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2lvbWVtICpfZ2V0X3BsbF9iYXNlKHN0cnVjdCBjbGsgKnBsbCkKLXsKLQlpZiAocGxsID09ICZwbGwxX21haW5fY2xrKQotCQlyZXR1cm4gTVg1MV9EUExMMV9CQVNFOwotCWVsc2UgaWYgKHBsbCA9PSAmcGxsMl9zd19jbGspCi0JCXJldHVybiBNWDUxX0RQTEwyX0JBU0U7Ci0JZWxzZSBpZiAocGxsID09ICZwbGwzX3N3X2NsaykKLQkJcmV0dXJuIE1YNTFfRFBMTDNfQkFTRTsKLQllbHNlCi0JCUJVRygpOwotCi0JcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGNsa19wbGxfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQotewotCWxvbmcgbWZpLCBtZm4sIG1mZCwgcGRmLCByZWZfY2xrLCBtZm5fYWJzOwotCXVuc2lnbmVkIGxvbmcgZHBfb3AsIGRwX21mZCwgZHBfbWZuLCBkcF9jdGwsIHBsbF9oZnNtLCBkYmw7Ci0Jdm9pZCBfX2lvbWVtICpwbGxiYXNlOwotCXM2NCB0ZW1wOwotCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGU7Ci0KLQlwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7Ci0KLQlwbGxiYXNlID0gX2dldF9wbGxfYmFzZShjbGspOwotCi0JZHBfY3RsID0gX19yYXdfcmVhZGwocGxsYmFzZSArIE1YQ19QTExfRFBfQ1RMKTsKLQlwbGxfaGZzbSA9IGRwX2N0bCAmIE1YQ19QTExfRFBfQ1RMX0hGU007Ci0JZGJsID0gZHBfY3RsICYgTVhDX1BMTF9EUF9DVExfRFBEQ0swXzJfRU47Ci0KLQlpZiAocGxsX2hmc20gPT0gMCkgewotCQlkcF9vcCA9IF9fcmF3X3JlYWRsKHBsbGJhc2UgKyBNWENfUExMX0RQX09QKTsKLQkJZHBfbWZkID0gX19yYXdfcmVhZGwocGxsYmFzZSArIE1YQ19QTExfRFBfTUZEKTsKLQkJZHBfbWZuID0gX19yYXdfcmVhZGwocGxsYmFzZSArIE1YQ19QTExfRFBfTUZOKTsKLQl9IGVsc2UgewotCQlkcF9vcCA9IF9fcmF3X3JlYWRsKHBsbGJhc2UgKyBNWENfUExMX0RQX0hGU19PUCk7Ci0JCWRwX21mZCA9IF9fcmF3X3JlYWRsKHBsbGJhc2UgKyBNWENfUExMX0RQX0hGU19NRkQpOwotCQlkcF9tZm4gPSBfX3Jhd19yZWFkbChwbGxiYXNlICsgTVhDX1BMTF9EUF9IRlNfTUZOKTsKLQl9Ci0JcGRmID0gZHBfb3AgJiBNWENfUExMX0RQX09QX1BERl9NQVNLOwotCW1maSA9IChkcF9vcCAmIE1YQ19QTExfRFBfT1BfTUZJX01BU0spID4+IE1YQ19QTExfRFBfT1BfTUZJX09GRlNFVDsKLQltZmkgPSAobWZpIDw9IDUpID8gNSA6IG1maTsKLQltZmQgPSBkcF9tZmQgJiBNWENfUExMX0RQX01GRF9NQVNLOwotCW1mbiA9IG1mbl9hYnMgPSBkcF9tZm4gJiBNWENfUExMX0RQX01GTl9NQVNLOwotCS8qIFNpZ24gZXh0ZW5kIHRvIDMyLWJpdHMgKi8KLQlpZiAobWZuID49IDB4MDQwMDAwMDApIHsKLQkJbWZuIHw9IDB4RkMwMDAwMDA7Ci0JCW1mbl9hYnMgPSAtbWZuOwotCX0KLQotCXJlZl9jbGsgPSAyICogcGFyZW50X3JhdGU7Ci0JaWYgKGRibCAhPSAwKQotCQlyZWZfY2xrICo9IDI7Ci0KLQlyZWZfY2xrIC89IChwZGYgKyAxKTsKLQl0ZW1wID0gKHU2NCkgcmVmX2NsayAqIG1mbl9hYnM7Ci0JZG9fZGl2KHRlbXAsIG1mZCArIDEpOwotCWlmIChtZm4gPCAwKQotCQl0ZW1wID0gLXRlbXA7Ci0JdGVtcCA9IChyZWZfY2xrICogbWZpKSArIHRlbXA7Ci0KLQlyZXR1cm4gdGVtcDsKLX0KLQotc3RhdGljIGludCBfY2xrX3BsbF9zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKLXsKLQl1MzIgcmVnOwotCXZvaWQgX19pb21lbSAqcGxsYmFzZTsKLQotCWxvbmcgbWZpLCBwZGYsIG1mbiwgbWZkID0gOTk5OTk5OwotCXM2NCB0ZW1wNjQ7Ci0JdW5zaWduZWQgbG9uZyBxdWFkX3BhcmVudF9yYXRlOwotCXVuc2lnbmVkIGxvbmcgcGxsX2hmc20sIGRwX2N0bDsKLQl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlOwotCi0JcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOwotCi0JcGxsYmFzZSA9IF9nZXRfcGxsX2Jhc2UoY2xrKTsKLQotCXF1YWRfcGFyZW50X3JhdGUgPSA0ICogcGFyZW50X3JhdGU7Ci0JcGRmID0gbWZpID0gLTE7Ci0Jd2hpbGUgKCsrcGRmIDwgMTYgJiYgbWZpIDwgNSkKLQkJbWZpID0gcmF0ZSAqIChwZGYrMSkgLyBxdWFkX3BhcmVudF9yYXRlOwotCWlmIChtZmkgPiAxNSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JcGRmLS07Ci0KLQl0ZW1wNjQgPSByYXRlICogKHBkZisxKSAtIHF1YWRfcGFyZW50X3JhdGUgKiBtZmk7Ci0JZG9fZGl2KHRlbXA2NCwgcXVhZF9wYXJlbnRfcmF0ZS8xMDAwMDAwKTsKLQltZm4gPSAobG9uZyl0ZW1wNjQ7Ci0KLQlkcF9jdGwgPSBfX3Jhd19yZWFkbChwbGxiYXNlICsgTVhDX1BMTF9EUF9DVEwpOwotCS8qIHVzZSBkcGRjazBfMiAqLwotCV9fcmF3X3dyaXRlbChkcF9jdGwgfCAweDEwMDBMLCBwbGxiYXNlICsgTVhDX1BMTF9EUF9DVEwpOwotCXBsbF9oZnNtID0gZHBfY3RsICYgTVhDX1BMTF9EUF9DVExfSEZTTTsKLQlpZiAocGxsX2hmc20gPT0gMCkgewotCQlyZWcgPSBtZmkgPDwgNCB8IHBkZjsKLQkJX19yYXdfd3JpdGVsKHJlZywgcGxsYmFzZSArIE1YQ19QTExfRFBfT1ApOwotCQlfX3Jhd193cml0ZWwobWZkLCBwbGxiYXNlICsgTVhDX1BMTF9EUF9NRkQpOwotCQlfX3Jhd193cml0ZWwobWZuLCBwbGxiYXNlICsgTVhDX1BMTF9EUF9NRk4pOwotCX0gZWxzZSB7Ci0JCXJlZyA9IG1maSA8PCA0IHwgcGRmOwotCQlfX3Jhd193cml0ZWwocmVnLCBwbGxiYXNlICsgTVhDX1BMTF9EUF9IRlNfT1ApOwotCQlfX3Jhd193cml0ZWwobWZkLCBwbGxiYXNlICsgTVhDX1BMTF9EUF9IRlNfTUZEKTsKLQkJX19yYXdfd3JpdGVsKG1mbiwgcGxsYmFzZSArIE1YQ19QTExfRFBfSEZTX01GTik7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgX2Nsa19wbGxfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQl1MzIgcmVnOwotCXZvaWQgX19pb21lbSAqcGxsYmFzZTsKLQlpbnQgaSA9IDA7Ci0KLQlwbGxiYXNlID0gX2dldF9wbGxfYmFzZShjbGspOwotCXJlZyA9IF9fcmF3X3JlYWRsKHBsbGJhc2UgKyBNWENfUExMX0RQX0NUTCkgfCBNWENfUExMX0RQX0NUTF9VUEVOOwotCV9fcmF3X3dyaXRlbChyZWcsIHBsbGJhc2UgKyBNWENfUExMX0RQX0NUTCk7Ci0KLQkvKiBXYWl0IGZvciBsb2NrICovCi0JZG8gewotCQlyZWcgPSBfX3Jhd19yZWFkbChwbGxiYXNlICsgTVhDX1BMTF9EUF9DVEwpOwotCQlpZiAocmVnICYgTVhDX1BMTF9EUF9DVExfTFJGKQotCQkJYnJlYWs7Ci0KLQkJdWRlbGF5KDEpOwotCX0gd2hpbGUgKCsraSA8IE1BWF9EUExMX1dBSVRfVFJJRVMpOwotCi0JaWYgKGkgPT0gTUFYX0RQTExfV0FJVF9UUklFUykgewotCQlwcl9lcnIoIk1YNTogcGxsIGxvY2tpbmcgZmFpbGVkXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9jbGtfcGxsX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQotewotCXUzMiByZWc7Ci0Jdm9pZCBfX2lvbWVtICpwbGxiYXNlOwotCi0JcGxsYmFzZSA9IF9nZXRfcGxsX2Jhc2UoY2xrKTsKLQlyZWcgPSBfX3Jhd19yZWFkbChwbGxiYXNlICsgTVhDX1BMTF9EUF9DVEwpICYgfk1YQ19QTExfRFBfQ1RMX1VQRU47Ci0JX19yYXdfd3JpdGVsKHJlZywgcGxsYmFzZSArIE1YQ19QTExfRFBfQ1RMKTsKLX0KLQotc3RhdGljIGludCBfY2xrX3BsbDFfc3dfc2V0X3BhcmVudChzdHJ1Y3QgY2xrICpjbGssIHN0cnVjdCBjbGsgKnBhcmVudCkKLXsKLQl1MzIgcmVnLCBzdGVwOwotCi0JcmVnID0gX19yYXdfcmVhZGwoTVhDX0NDTV9DQ1NSKTsKLQotCS8qIFdoZW4gc3dpdGNoaW5nIGZyb20gcGxsX21haW5fY2xrIHRvIGEgYnlwYXNzIGNsb2NrLCBmaXJzdCBzZWxlY3QgYQotCSAqIG11bHRpcGxleGVkIGNsb2NrIGluICdzdGVwX3NlbCcsIHRoZW4gc2hpZnQgdGhlIGdsaXRjaGxlc3MgbXV4Ci0JICogJ3BsbDFfc3dfY2xrX3NlbCcuCi0JICoKLQkgKiBXaGVuIHN3aXRjaGluZyBiYWNrLCBkbyBpdCBpbiByZXZlcnNlIG9yZGVyCi0JICovCi0JaWYgKHBhcmVudCA9PSAmcGxsMV9tYWluX2NsaykgewotCQkvKiBTd2l0Y2ggdG8gcGxsMV9tYWluX2NsayAqLwotCQlyZWcgJj0gfk1YQ19DQ01fQ0NTUl9QTEwxX1NXX0NMS19TRUw7Ci0JCV9fcmF3X3dyaXRlbChyZWcsIE1YQ19DQ01fQ0NTUik7Ci0JCS8qIHN0ZXBfY2xrIG11eCBzd2l0Y2hlZCB0byBscF9hcG0sIHRvIHNhdmUgcG93ZXIuICovCi0JCXJlZyA9IF9fcmF3X3JlYWRsKE1YQ19DQ01fQ0NTUik7Ci0JCXJlZyAmPSB+TVhDX0NDTV9DQ1NSX1NURVBfU0VMX01BU0s7Ci0JCXJlZyB8PSAoTVhDX0NDTV9DQ1NSX1NURVBfU0VMX0xQX0FQTSA8PAotCQkJCU1YQ19DQ01fQ0NTUl9TVEVQX1NFTF9PRkZTRVQpOwotCX0gZWxzZSB7Ci0JCWlmIChwYXJlbnQgPT0gJmxwX2FwbV9jbGspIHsKLQkJCXN0ZXAgPSBNWENfQ0NNX0NDU1JfU1RFUF9TRUxfTFBfQVBNOwotCQl9IGVsc2UgIGlmIChwYXJlbnQgPT0gJnBsbDJfc3dfY2xrKSB7Ci0JCQlzdGVwID0gTVhDX0NDTV9DQ1NSX1NURVBfU0VMX1BMTDJfRElWSURFRDsKLQkJfSBlbHNlICBpZiAocGFyZW50ID09ICZwbGwzX3N3X2NsaykgewotCQkJc3RlcCA9IE1YQ19DQ01fQ0NTUl9TVEVQX1NFTF9QTEwzX0RJVklERUQ7Ci0JCX0gZWxzZQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJcmVnICY9IH5NWENfQ0NNX0NDU1JfU1RFUF9TRUxfTUFTSzsKLQkJcmVnIHw9IChzdGVwIDw8IE1YQ19DQ01fQ0NTUl9TVEVQX1NFTF9PRkZTRVQpOwotCi0JCV9fcmF3X3dyaXRlbChyZWcsIE1YQ19DQ01fQ0NTUik7Ci0JCS8qIFN3aXRjaCB0byBzdGVwX2NsayAqLwotCQlyZWcgPSBfX3Jhd19yZWFkbChNWENfQ0NNX0NDU1IpOwotCQlyZWcgfD0gTVhDX0NDTV9DQ1NSX1BMTDFfU1dfQ0xLX1NFTDsKLQl9Ci0JX19yYXdfd3JpdGVsKHJlZywgTVhDX0NDTV9DQ1NSKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgY2xrX3BsbDFfc3dfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQotewotCXUzMiByZWcsIGRpdjsKLQl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlOwotCi0JcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOwotCi0JcmVnID0gX19yYXdfcmVhZGwoTVhDX0NDTV9DQ1NSKTsKLQotCWlmIChjbGstPnBhcmVudCA9PSAmcGxsMl9zd19jbGspIHsKLQkJZGl2ID0gKChyZWcgJiBNWENfQ0NNX0NDU1JfUExMMl9QT0RGX01BU0spID4+Ci0JCSAgICAgICBNWENfQ0NNX0NDU1JfUExMMl9QT0RGX09GRlNFVCkgKyAxOwotCX0gZWxzZSBpZiAoY2xrLT5wYXJlbnQgPT0gJnBsbDNfc3dfY2xrKSB7Ci0JCWRpdiA9ICgocmVnICYgTVhDX0NDTV9DQ1NSX1BMTDNfUE9ERl9NQVNLKSA+PgotCQkgICAgICAgTVhDX0NDTV9DQ1NSX1BMTDNfUE9ERl9PRkZTRVQpICsgMTsKLQl9IGVsc2UKLQkJZGl2ID0gMTsKLQlyZXR1cm4gcGFyZW50X3JhdGUgLyBkaXY7Ci19Ci0KLXN0YXRpYyBpbnQgX2Nsa19wbGwyX3N3X3NldF9wYXJlbnQoc3RydWN0IGNsayAqY2xrLCBzdHJ1Y3QgY2xrICpwYXJlbnQpCi17Ci0JdTMyIHJlZzsKLQotCXJlZyA9IF9fcmF3X3JlYWRsKE1YQ19DQ01fQ0NTUik7Ci0KLQlpZiAocGFyZW50ID09ICZwbGwyX3N3X2NsaykKLQkJcmVnICY9IH5NWENfQ0NNX0NDU1JfUExMMl9TV19DTEtfU0VMOwotCWVsc2UKLQkJcmVnIHw9IE1YQ19DQ01fQ0NTUl9QTEwyX1NXX0NMS19TRUw7Ci0KLQlfX3Jhd193cml0ZWwocmVnLCBNWENfQ0NNX0NDU1IpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IF9jbGtfbHBfYXBtX3NldF9wYXJlbnQoc3RydWN0IGNsayAqY2xrLCBzdHJ1Y3QgY2xrICpwYXJlbnQpCi17Ci0JdTMyIHJlZzsKLQotCWlmIChwYXJlbnQgPT0gJm9zY19jbGspCi0JCXJlZyA9IF9fcmF3X3JlYWRsKE1YQ19DQ01fQ0NTUikgJiB+TVhDX0NDTV9DQ1NSX0xQX0FQTV9TRUw7Ci0JZWxzZQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCV9fcmF3X3dyaXRlbChyZWcsIE1YQ19DQ01fQ0NTUik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgY2xrX2NwdV9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdTMyIGNhY3JyLCBkaXY7Ci0JdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZTsKLQotCXBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKLQljYWNyciA9IF9fcmF3X3JlYWRsKE1YQ19DQ01fQ0FDUlIpOwotCWRpdiA9IChjYWNyciAmIE1YQ19DQ01fQ0FDUlJfQVJNX1BPREZfTUFTSykgKyAxOwotCi0JcmV0dXJuIHBhcmVudF9yYXRlIC8gZGl2OwotfQotCi1zdGF0aWMgaW50IGNsa19jcHVfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCi17Ci0JdTMyIHJlZywgY3B1X3BvZGY7Ci0JdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZTsKLQotCXBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKLQljcHVfcG9kZiA9IHBhcmVudF9yYXRlIC8gcmF0ZSAtIDE7Ci0JLyogdXNlIHBvc3QgZGl2aWRlciB0byBjaGFuZ2UgZnJlcSAqLwotCXJlZyA9IF9fcmF3X3JlYWRsKE1YQ19DQ01fQ0FDUlIpOwotCXJlZyAmPSB+TVhDX0NDTV9DQUNSUl9BUk1fUE9ERl9NQVNLOwotCXJlZyB8PSBjcHVfcG9kZiA8PCBNWENfQ0NNX0NBQ1JSX0FSTV9QT0RGX09GRlNFVDsKLQlfX3Jhd193cml0ZWwocmVnLCBNWENfQ0NNX0NBQ1JSKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IF9jbGtfcGVyaXBoX2FwbV9zZXRfcGFyZW50KHN0cnVjdCBjbGsgKmNsaywgc3RydWN0IGNsayAqcGFyZW50KQotewotCXUzMiByZWcsIG11eDsKLQlpbnQgaSA9IDA7Ci0KLQltdXggPSBfZ2V0X211eChwYXJlbnQsICZwbGwxX3N3X2NsaywgJnBsbDNfc3dfY2xrLCAmbHBfYXBtX2NsaywgTlVMTCk7Ci0KLQlyZWcgPSBfX3Jhd19yZWFkbChNWENfQ0NNX0NCQ01SKSAmIH5NWENfQ0NNX0NCQ01SX1BFUklQSF9DTEtfU0VMX01BU0s7Ci0JcmVnIHw9IG11eCA8PCBNWENfQ0NNX0NCQ01SX1BFUklQSF9DTEtfU0VMX09GRlNFVDsKLQlfX3Jhd193cml0ZWwocmVnLCBNWENfQ0NNX0NCQ01SKTsKLQotCS8qIFdhaXQgZm9yIGxvY2sgKi8KLQlkbyB7Ci0JCXJlZyA9IF9fcmF3X3JlYWRsKE1YQ19DQ01fQ0RISVBSKTsKLQkJaWYgKCEocmVnICYgIE1YQ19DQ01fQ0RISVBSX1BFUklQSF9DTEtfU0VMX0JVU1kpKQotCQkJYnJlYWs7Ci0KLQkJdWRlbGF5KDEpOwotCX0gd2hpbGUgKCsraSA8IE1BWF9EUExMX1dBSVRfVFJJRVMpOwotCi0JaWYgKGkgPT0gTUFYX0RQTExfV0FJVF9UUklFUykgewotCQlwcl9lcnIoIk1YNTogU2V0IHBhcmVudCBmb3IgcGVyaXBoX2FwbSBjbG9jayBmYWlsZWRcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBfY2xrX21haW5fYnVzX3NldF9wYXJlbnQoc3RydWN0IGNsayAqY2xrLCBzdHJ1Y3QgY2xrICpwYXJlbnQpCi17Ci0JdTMyIHJlZzsKLQotCXJlZyA9IF9fcmF3X3JlYWRsKE1YQ19DQ01fQ0JDRFIpOwotCi0JaWYgKHBhcmVudCA9PSAmcGxsMl9zd19jbGspCi0JCXJlZyAmPSB+TVhDX0NDTV9DQkNEUl9QRVJJUEhfQ0xLX1NFTDsKLQllbHNlIGlmIChwYXJlbnQgPT0gJnBlcmlwaF9hcG1fY2xrKQotCQlyZWcgfD0gTVhDX0NDTV9DQkNEUl9QRVJJUEhfQ0xLX1NFTDsKLQllbHNlCi0JCXJldHVybiAtRUlOVkFMOwotCi0JX19yYXdfd3JpdGVsKHJlZywgTVhDX0NDTV9DQkNEUik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBjbGsgbWFpbl9idXNfY2xrID0gewotCS5wYXJlbnQgPSAmcGxsMl9zd19jbGssCi0JLnNldF9wYXJlbnQgPSBfY2xrX21haW5fYnVzX3NldF9wYXJlbnQsCi19OwotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBjbGtfYWhiX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQl1MzIgcmVnLCBkaXY7Ci0JdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZTsKLQotCXBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKLQotCXJlZyA9IF9fcmF3X3JlYWRsKE1YQ19DQ01fQ0JDRFIpOwotCWRpdiA9ICgocmVnICYgTVhDX0NDTV9DQkNEUl9BSEJfUE9ERl9NQVNLKSA+PgotCSAgICAgICBNWENfQ0NNX0NCQ0RSX0FIQl9QT0RGX09GRlNFVCkgKyAxOwotCXJldHVybiBwYXJlbnRfcmF0ZSAvIGRpdjsKLX0KLQotCi1zdGF0aWMgaW50IF9jbGtfYWhiX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQotewotCXUzMiByZWcsIGRpdjsKLQl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlOwotCWludCBpID0gMDsKLQotCXBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKLQotCWRpdiA9IHBhcmVudF9yYXRlIC8gcmF0ZTsKLQlpZiAoZGl2ID4gOCB8fCBkaXYgPCAxIHx8ICgocGFyZW50X3JhdGUgLyBkaXYpICE9IHJhdGUpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXJlZyA9IF9fcmF3X3JlYWRsKE1YQ19DQ01fQ0JDRFIpOwotCXJlZyAmPSB+TVhDX0NDTV9DQkNEUl9BSEJfUE9ERl9NQVNLOwotCXJlZyB8PSAoZGl2IC0gMSkgPDwgTVhDX0NDTV9DQkNEUl9BSEJfUE9ERl9PRkZTRVQ7Ci0JX19yYXdfd3JpdGVsKHJlZywgTVhDX0NDTV9DQkNEUik7Ci0KLQkvKiBXYWl0IGZvciBsb2NrICovCi0JZG8gewotCQlyZWcgPSBfX3Jhd19yZWFkbChNWENfQ0NNX0NESElQUik7Ci0JCWlmICghKHJlZyAmIE1YQ19DQ01fQ0RISVBSX0FIQl9QT0RGX0JVU1kpKQotCQkJYnJlYWs7Ci0KLQkJdWRlbGF5KDEpOwotCX0gd2hpbGUgKCsraSA8IE1BWF9EUExMX1dBSVRfVFJJRVMpOwotCi0JaWYgKGkgPT0gTUFYX0RQTExfV0FJVF9UUklFUykgewotCQlwcl9lcnIoIk1YNTogY2xrX2FoYl9zZXRfcmF0ZSBmYWlsZWRcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgX2Nsa19haGJfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssCi0JCQkJCQl1bnNpZ25lZCBsb25nIHJhdGUpCi17Ci0JdTMyIGRpdjsKLQl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlOwotCi0JcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOwotCi0JZGl2ID0gcGFyZW50X3JhdGUgLyByYXRlOwotCWlmIChkaXYgPiA4KQotCQlkaXYgPSA4OwotCWVsc2UgaWYgKGRpdiA9PSAwKQotCQlkaXYrKzsKLQlyZXR1cm4gcGFyZW50X3JhdGUgLyBkaXY7Ci19Ci0KLQotc3RhdGljIGludCBfY2xrX21heF9lbmFibGUoc3RydWN0IGNsayAqY2xrKQotewotCXUzMiByZWc7Ci0KLQlfY2xrX2NjZ3JfZW5hYmxlKGNsayk7Ci0KLQkvKiBIYW5kc2hha2Ugd2l0aCBNQVggd2hlbiBMUE0gaXMgZW50ZXJlZC4gKi8KLQlyZWcgPSBfX3Jhd19yZWFkbChNWENfQ0NNX0NMUENSKTsKLQlyZWcgJj0gfk1YQ19DQ01fQ0xQQ1JfQllQQVNTX01BWF9MUE1fSFM7Ci0JX19yYXdfd3JpdGVsKHJlZywgTVhDX0NDTV9DTFBDUik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgX2Nsa19tYXhfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdTMyIHJlZzsKLQotCV9jbGtfY2Nncl9kaXNhYmxlX2lud2FpdChjbGspOwotCi0JLyogTm8gSGFuZHNoYWtlIHdpdGggTUFYIHdoZW4gTFBNIGlzIGVudGVyZWQgYXMgaXRzIGRpc2FibGVkLiAqLwotCXJlZyA9IF9fcmF3X3JlYWRsKE1YQ19DQ01fQ0xQQ1IpOwotCXJlZyB8PSBNWENfQ0NNX0NMUENSX0JZUEFTU19NQVhfTFBNX0hTOwotCV9fcmF3X3dyaXRlbChyZWcsIE1YQ19DQ01fQ0xQQ1IpOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBjbGtfaXBnX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQl1MzIgcmVnLCBkaXY7Ci0JdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZTsKLQotCXBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKLQotCXJlZyA9IF9fcmF3X3JlYWRsKE1YQ19DQ01fQ0JDRFIpOwotCWRpdiA9ICgocmVnICYgTVhDX0NDTV9DQkNEUl9JUEdfUE9ERl9NQVNLKSA+PgotCSAgICAgICBNWENfQ0NNX0NCQ0RSX0lQR19QT0RGX09GRlNFVCkgKyAxOwotCi0JcmV0dXJuIHBhcmVudF9yYXRlIC8gZGl2OwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBjbGtfaXBnX3Blcl9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdTMyIHJlZywgcHJlZGl2MSwgcHJlZGl2MiwgcG9kZjsKLQl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlOwotCi0JcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOwotCi0JaWYgKGNsay0+cGFyZW50ID09ICZtYWluX2J1c19jbGsgfHwgY2xrLT5wYXJlbnQgPT0gJmxwX2FwbV9jbGspIHsKLQkJLyogdGhlIG1haW5fYnVzX2NsayBpcyB0aGUgb25lIGJlZm9yZSB0aGUgRFZGUyBlbmdpbmUgKi8KLQkJcmVnID0gX19yYXdfcmVhZGwoTVhDX0NDTV9DQkNEUik7Ci0JCXByZWRpdjEgPSAoKHJlZyAmIE1YQ19DQ01fQ0JDRFJfUEVSQ0xLX1BSRUQxX01BU0spID4+Ci0JCQkgICBNWENfQ0NNX0NCQ0RSX1BFUkNMS19QUkVEMV9PRkZTRVQpICsgMTsKLQkJcHJlZGl2MiA9ICgocmVnICYgTVhDX0NDTV9DQkNEUl9QRVJDTEtfUFJFRDJfTUFTSykgPj4KLQkJCSAgIE1YQ19DQ01fQ0JDRFJfUEVSQ0xLX1BSRUQyX09GRlNFVCkgKyAxOwotCQlwb2RmID0gKChyZWcgJiBNWENfQ0NNX0NCQ0RSX1BFUkNMS19QT0RGX01BU0spID4+Ci0JCQlNWENfQ0NNX0NCQ0RSX1BFUkNMS19QT0RGX09GRlNFVCkgKyAxOwotCQlyZXR1cm4gcGFyZW50X3JhdGUgLyAocHJlZGl2MSAqIHByZWRpdjIgKiBwb2RmKTsKLQl9IGVsc2UgaWYgKGNsay0+cGFyZW50ID09ICZpcGdfY2xrKQotCQlyZXR1cm4gcGFyZW50X3JhdGU7Ci0JZWxzZQotCQlCVUcoKTsKLX0KLQotc3RhdGljIGludCBfY2xrX2lwZ19wZXJfc2V0X3BhcmVudChzdHJ1Y3QgY2xrICpjbGssIHN0cnVjdCBjbGsgKnBhcmVudCkKLXsKLQl1MzIgcmVnOwotCi0JcmVnID0gX19yYXdfcmVhZGwoTVhDX0NDTV9DQkNNUik7Ci0KLQlyZWcgJj0gfk1YQ19DQ01fQ0JDTVJfUEVSQ0xLX0xQX0FQTV9DTEtfU0VMOwotCXJlZyAmPSB+TVhDX0NDTV9DQkNNUl9QRVJDTEtfSVBHX0NMS19TRUw7Ci0KLQlpZiAocGFyZW50ID09ICZpcGdfY2xrKQotCQlyZWcgfD0gTVhDX0NDTV9DQkNNUl9QRVJDTEtfSVBHX0NMS19TRUw7Ci0JZWxzZSBpZiAocGFyZW50ID09ICZscF9hcG1fY2xrKQotCQlyZWcgfD0gTVhDX0NDTV9DQkNNUl9QRVJDTEtfTFBfQVBNX0NMS19TRUw7Ci0JZWxzZSBpZiAocGFyZW50ICE9ICZtYWluX2J1c19jbGspCi0JCXJldHVybiAtRUlOVkFMOwotCi0JX19yYXdfd3JpdGVsKHJlZywgTVhDX0NDTV9DQkNNUik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotI2RlZmluZSBjbGtfbmZjX3NldF9wYXJlbnQJTlVMTAotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBjbGtfbmZjX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQl1bnNpZ25lZCBsb25nIHJhdGU7Ci0JdTMyIHJlZywgZGl2OwotCi0JcmVnID0gX19yYXdfcmVhZGwoTVhDX0NDTV9DQkNEUik7Ci0JZGl2ID0gKChyZWcgJiBNWENfQ0NNX0NCQ0RSX05GQ19QT0RGX01BU0spID4+Ci0JICAgICAgIE1YQ19DQ01fQ0JDRFJfTkZDX1BPREZfT0ZGU0VUKSArIDE7Ci0JcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCkgLyBkaXY7Ci0JV0FSTl9PTihyYXRlID09IDApOwotCXJldHVybiByYXRlOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBjbGtfbmZjX3JvdW5kX3JhdGUoc3RydWN0IGNsayAqY2xrLAotCQkJCQkJdW5zaWduZWQgbG9uZyByYXRlKQotewotCXUzMiBkaXY7Ci0JdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7Ci0KLQlpZiAoIXJhdGUpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JZGl2ID0gcGFyZW50X3JhdGUgLyByYXRlOwotCi0JaWYgKHBhcmVudF9yYXRlICUgcmF0ZSkKLQkJZGl2Kys7Ci0KLQlpZiAoZGl2ID4gOCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXR1cm4gcGFyZW50X3JhdGUgLyBkaXY7Ci0KLX0KLQotc3RhdGljIGludCBjbGtfbmZjX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQotewotCXUzMiByZWcsIGRpdjsKLQotCWRpdiA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCkgLyByYXRlOwotCWlmIChkaXYgPT0gMCkKLQkJZGl2Kys7Ci0JaWYgKCgoY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KSAvIGRpdikgIT0gcmF0ZSkgfHwgKGRpdiA+IDgpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXJlZyA9IF9fcmF3X3JlYWRsKE1YQ19DQ01fQ0JDRFIpOwotCXJlZyAmPSB+TVhDX0NDTV9DQkNEUl9ORkNfUE9ERl9NQVNLOwotCXJlZyB8PSAoZGl2IC0gMSkgPDwgTVhDX0NDTV9DQkNEUl9ORkNfUE9ERl9PRkZTRVQ7Ci0JX19yYXdfd3JpdGVsKHJlZywgTVhDX0NDTV9DQkNEUik7Ci0KLQl3aGlsZSAoX19yYXdfcmVhZGwoTVhDX0NDTV9DREhJUFIpICYKLQkJCU1YQ19DQ01fQ0RISVBSX05GQ19JUEdfSU5UX01FTV9QT0RGX0JVU1kpewotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfaGlnaF9yZWZlcmVuY2VfY2xvY2tfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JcmV0dXJuIGV4dGVybmFsX2hpZ2hfcmVmZXJlbmNlOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfbG93X3JlZmVyZW5jZV9jbG9ja19yYXRlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlyZXR1cm4gZXh0ZXJuYWxfbG93X3JlZmVyZW5jZTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X29zY2lsbGF0b3JfcmVmZXJlbmNlX2Nsb2NrX3JhdGUoc3RydWN0IGNsayAqY2xrKQotewotCXJldHVybiBvc2NpbGxhdG9yX3JlZmVyZW5jZTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X2NraWgyX3JlZmVyZW5jZV9jbG9ja19yYXRlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlyZXR1cm4gY2tpaDJfcmVmZXJlbmNlOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBjbGtfZW1pX3Nsb3dfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQotewotCXUzMiByZWcsIGRpdjsKLQotCXJlZyA9IF9fcmF3X3JlYWRsKE1YQ19DQ01fQ0JDRFIpOwotCWRpdiA9ICgocmVnICYgTVhDX0NDTV9DQkNEUl9FTUlfUE9ERl9NQVNLKSA+PgotCSAgICAgICBNWENfQ0NNX0NCQ0RSX0VNSV9QT0RGX09GRlNFVCkgKyAxOwotCi0JcmV0dXJuIGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCkgLyBkaXY7Ci19Ci0KLS8qIEV4dGVybmFsIGhpZ2ggZnJlcXVlbmN5IGNsb2NrICovCi1zdGF0aWMgc3RydWN0IGNsayBja2loX2NsayA9IHsKLQkuZ2V0X3JhdGUgPSBnZXRfaGlnaF9yZWZlcmVuY2VfY2xvY2tfcmF0ZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGNraWgyX2NsayA9IHsKLQkuZ2V0X3JhdGUgPSBnZXRfY2tpaDJfcmVmZXJlbmNlX2Nsb2NrX3JhdGUsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBvc2NfY2xrID0gewotCS5nZXRfcmF0ZSA9IGdldF9vc2NpbGxhdG9yX3JlZmVyZW5jZV9jbG9ja19yYXRlLAotfTsKLQotLyogRXh0ZXJuYWwgbG93IGZyZXF1ZW5jeSAoMzJrSHopIGNsb2NrICovCi1zdGF0aWMgc3RydWN0IGNsayBja2lsX2NsayA9IHsKLQkuZ2V0X3JhdGUgPSBnZXRfbG93X3JlZmVyZW5jZV9jbG9ja19yYXRlLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgcGxsMV9tYWluX2NsayA9IHsKLQkucGFyZW50ID0gJm9zY19jbGssCi0JLmdldF9yYXRlID0gY2xrX3BsbF9nZXRfcmF0ZSwKLQkuZW5hYmxlID0gX2Nsa19wbGxfZW5hYmxlLAotCS5kaXNhYmxlID0gX2Nsa19wbGxfZGlzYWJsZSwKLX07Ci0KLS8qIENsb2NrIHRyZWUgYmxvY2sgZGlhZ3JhbSAoV0lQKToKLSAqIAlDQ006IENsb2NrIENvbnRyb2xsZXIgTW9kdWxlCi0gKgotICogUExMIG91dHB1dCAtPiB8Ci0gKiAgICAgICAgICAgICAgIHwgQ0NNIFN3aXRjaGVyIC0+IENDTV9DTEtfUk9PVF9HRU4gLT4KLSAqIFBMTCBieXBhc3MgLT4gfAotICoKLSAqLwotCi0vKiBQTEwxIFNXIHN1cHBsaWVzIHRvIEFSTSBjb3JlICovCi1zdGF0aWMgc3RydWN0IGNsayBwbGwxX3N3X2NsayA9IHsKLQkucGFyZW50ID0gJnBsbDFfbWFpbl9jbGssCi0JLnNldF9wYXJlbnQgPSBfY2xrX3BsbDFfc3dfc2V0X3BhcmVudCwKLQkuZ2V0X3JhdGUgPSBjbGtfcGxsMV9zd19nZXRfcmF0ZSwKLX07Ci0KLS8qIFBMTDIgU1cgc3VwcGxpZXMgdG8gQVhJL0FIQi9JUCBidXNlcyAqLwotc3RhdGljIHN0cnVjdCBjbGsgcGxsMl9zd19jbGsgPSB7Ci0JLnBhcmVudCA9ICZvc2NfY2xrLAotCS5nZXRfcmF0ZSA9IGNsa19wbGxfZ2V0X3JhdGUsCi0JLnNldF9yYXRlID0gX2Nsa19wbGxfc2V0X3JhdGUsCi0JLnNldF9wYXJlbnQgPSBfY2xrX3BsbDJfc3dfc2V0X3BhcmVudCwKLQkuZW5hYmxlID0gX2Nsa19wbGxfZW5hYmxlLAotCS5kaXNhYmxlID0gX2Nsa19wbGxfZGlzYWJsZSwKLX07Ci0KLS8qIFBMTDMgU1cgc3VwcGxpZXMgdG8gc2VyaWFsIGNsb2NrcyBsaWtlIFVTQiwgU1NJLCBldGMuICovCi1zdGF0aWMgc3RydWN0IGNsayBwbGwzX3N3X2NsayA9IHsKLQkucGFyZW50ID0gJm9zY19jbGssCi0JLnNldF9yYXRlID0gX2Nsa19wbGxfc2V0X3JhdGUsCi0JLmdldF9yYXRlID0gY2xrX3BsbF9nZXRfcmF0ZSwKLQkuZW5hYmxlID0gX2Nsa19wbGxfZW5hYmxlLAotCS5kaXNhYmxlID0gX2Nsa19wbGxfZGlzYWJsZSwKLX07Ci0KLS8qIExvdy1wb3dlciBBdWRpbyBQbGF5YmFjayBNb2RlIGNsb2NrICovCi1zdGF0aWMgc3RydWN0IGNsayBscF9hcG1fY2xrID0gewotCS5wYXJlbnQgPSAmb3NjX2NsaywKLQkuc2V0X3BhcmVudCA9IF9jbGtfbHBfYXBtX3NldF9wYXJlbnQsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBwZXJpcGhfYXBtX2NsayA9IHsKLQkucGFyZW50ID0gJnBsbDFfc3dfY2xrLAotCS5zZXRfcGFyZW50ID0gX2Nsa19wZXJpcGhfYXBtX3NldF9wYXJlbnQsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBjcHVfY2xrID0gewotCS5wYXJlbnQgPSAmcGxsMV9zd19jbGssCi0JLmdldF9yYXRlID0gY2xrX2NwdV9nZXRfcmF0ZSwKLQkuc2V0X3JhdGUgPSBjbGtfY3B1X3NldF9yYXRlLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgYWhiX2NsayA9IHsKLQkucGFyZW50ID0gJm1haW5fYnVzX2NsaywKLQkuZ2V0X3JhdGUgPSBjbGtfYWhiX2dldF9yYXRlLAotCS5zZXRfcmF0ZSA9IF9jbGtfYWhiX3NldF9yYXRlLAotCS5yb3VuZF9yYXRlID0gX2Nsa19haGJfcm91bmRfcmF0ZSwKLX07Ci0KLS8qIE1haW4gSVAgaW50ZXJmYWNlIGNsb2NrIGZvciBhY2Nlc3MgdG8gcmVnaXN0ZXJzICovCi1zdGF0aWMgc3RydWN0IGNsayBpcGdfY2xrID0gewotCS5wYXJlbnQgPSAmYWhiX2NsaywKLQkuZ2V0X3JhdGUgPSBjbGtfaXBnX2dldF9yYXRlLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgaXBnX3BlcmNsayA9IHsKLQkucGFyZW50ID0gJmxwX2FwbV9jbGssCi0JLmdldF9yYXRlID0gY2xrX2lwZ19wZXJfZ2V0X3JhdGUsCi0JLnNldF9wYXJlbnQgPSBfY2xrX2lwZ19wZXJfc2V0X3BhcmVudCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGFoYl9tYXhfY2xrID0gewotCS5wYXJlbnQgPSAmYWhiX2NsaywKLQkuZW5hYmxlX3JlZyA9IE1YQ19DQ01fQ0NHUjAsCi0JLmVuYWJsZV9zaGlmdCA9IE1YQ19DQ01fQ0NHUnhfQ0cxNF9PRkZTRVQsCi0JLmVuYWJsZSA9IF9jbGtfbWF4X2VuYWJsZSwKLQkuZGlzYWJsZSA9IF9jbGtfbWF4X2Rpc2FibGUsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBhaXBzX3R6MV9jbGsgPSB7Ci0JLnBhcmVudCA9ICZhaGJfY2xrLAotCS5zZWNvbmRhcnkgPSAmYWhiX21heF9jbGssCi0JLmVuYWJsZV9yZWcgPSBNWENfQ0NNX0NDR1IwLAotCS5lbmFibGVfc2hpZnQgPSBNWENfQ0NNX0NDR1J4X0NHMTJfT0ZGU0VULAotCS5lbmFibGUgPSBfY2xrX2NjZ3JfZW5hYmxlLAotCS5kaXNhYmxlID0gX2Nsa19jY2dyX2Rpc2FibGVfaW53YWl0LAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgYWlwc190ejJfY2xrID0gewotCS5wYXJlbnQgPSAmYWhiX2NsaywKLQkuc2Vjb25kYXJ5ID0gJmFoYl9tYXhfY2xrLAotCS5lbmFibGVfcmVnID0gTVhDX0NDTV9DQ0dSMCwKLQkuZW5hYmxlX3NoaWZ0ID0gTVhDX0NDTV9DQ0dSeF9DRzEzX09GRlNFVCwKLQkuZW5hYmxlID0gX2Nsa19jY2dyX2VuYWJsZSwKLQkuZGlzYWJsZSA9IF9jbGtfY2Nncl9kaXNhYmxlX2lud2FpdCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdF8zMmtfY2xrID0gewotCS5pZCA9IDAsCi0JLnBhcmVudCA9ICZja2lsX2NsaywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGtwcF9jbGsgPSB7Ci0JLmlkID0gMCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGVtaV9zbG93X2NsayA9IHsKLQkucGFyZW50ID0gJnBsbDJfc3dfY2xrLAotCS5lbmFibGVfcmVnID0gTVhDX0NDTV9DQ0dSNSwKLQkuZW5hYmxlX3NoaWZ0ID0gTVhDX0NDTV9DQ0dSeF9DRzhfT0ZGU0VULAotCS5lbmFibGUgPSBfY2xrX2NjZ3JfZW5hYmxlLAotCS5kaXNhYmxlID0gX2Nsa19jY2dyX2Rpc2FibGVfaW53YWl0LAotCS5nZXRfcmF0ZSA9IGNsa19lbWlfc2xvd19nZXRfcmF0ZSwKLX07Ci0KLSNkZWZpbmUgREVGSU5FX0NMT0NLX0NDR1IobmFtZSwgaSwgZXIsIGVzLCBwZngsIHAsIHMpCVwKLQlzdGF0aWMgc3RydWN0IGNsayBuYW1lID0gewkJCVwKLQkJLmlkCQk9IGksCQkJXAotCQkuZW5hYmxlX3JlZwk9IGVyLAkJCVwKLQkJLmVuYWJsZV9zaGlmdAk9IGVzLAkJCVwKLQkJLmdldF9yYXRlCT0gcGZ4IyNfZ2V0X3JhdGUsCVwKLQkJLnNldF9yYXRlCT0gcGZ4IyNfc2V0X3JhdGUsCVwKLQkJLnJvdW5kX3JhdGUJPSBwZngjI19yb3VuZF9yYXRlLAlcCi0JCS5zZXRfcGFyZW50CT0gcGZ4IyNfc2V0X3BhcmVudCwJXAotCQkuZW5hYmxlCQk9IF9jbGtfY2Nncl9lbmFibGUsCVwKLQkJLmRpc2FibGUJPSBfY2xrX2NjZ3JfZGlzYWJsZSwJXAotCQkucGFyZW50CQk9IHAsCQkJXAotCQkuc2Vjb25kYXJ5CT0gcywJCQlcCi0JfQotCi0jZGVmaW5lIERFRklORV9DTE9DS19NQVgobmFtZSwgaSwgZXIsIGVzLCBwZngsIHAsIHMpCVwKLQlzdGF0aWMgc3RydWN0IGNsayBuYW1lID0gewkJCVwKLQkJLmlkCQk9IGksCQkJXAotCQkuZW5hYmxlX3JlZwk9IGVyLAkJCVwKLQkJLmVuYWJsZV9zaGlmdAk9IGVzLAkJCVwKLQkJLmdldF9yYXRlCT0gcGZ4IyNfZ2V0X3JhdGUsCVwKLQkJLnNldF9yYXRlCT0gcGZ4IyNfc2V0X3JhdGUsCVwKLQkJLnNldF9wYXJlbnQJPSBwZngjI19zZXRfcGFyZW50LAlcCi0JCS5lbmFibGUJCT0gX2Nsa19tYXhfZW5hYmxlLAlcCi0JCS5kaXNhYmxlCT0gX2Nsa19tYXhfZGlzYWJsZSwJXAotCQkucGFyZW50CQk9IHAsCQkJXAotCQkuc2Vjb25kYXJ5CT0gcywJCQlcCi0JfQotCi0jZGVmaW5lIENMS19HRVRfUkFURShuYW1lLCBuciwgYml0c25hbWUpCQkJCVwKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGNsa18jI25hbWUjI19nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCQlcCi17CQkJCQkJCQkJXAotCXUzMiByZWcsIHByZWQsIHBvZGY7CQkJCQkJXAotCQkJCQkJCQkJXAotCXJlZyA9IF9fcmF3X3JlYWRsKE1YQ19DQ01fQ1NDRFIjI25yKTsJCQkJXAotCXByZWQgPSAocmVnICYgTVhDX0NDTV9DU0NEUiMjbnIjI18jI2JpdHNuYW1lIyNfQ0xLX1BSRURfTUFTSykJXAotCQk+PiBNWENfQ0NNX0NTQ0RSIyNuciMjXyMjYml0c25hbWUjI19DTEtfUFJFRF9PRkZTRVQ7CVwKLQlwb2RmID0gKHJlZyAmIE1YQ19DQ01fQ1NDRFIjI25yIyNfIyNiaXRzbmFtZSMjX0NMS19QT0RGX01BU0spCVwKLQkJPj4gTVhDX0NDTV9DU0NEUiMjbnIjI18jI2JpdHNuYW1lIyNfQ0xLX1BPREZfT0ZGU0VUOwlcCi0JCQkJCQkJCQlcCi0JcmV0dXJuIERJVl9ST1VORF9DTE9TRVNUKGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCksCQlcCi0JCQkocHJlZCArIDEpICogKHBvZGYgKyAxKSk7CQkJXAotfQotCi0jZGVmaW5lIENMS19TRVRfUEFSRU5UKG5hbWUsIG5yLCBiaXRzbmFtZSkJCQkJXAotc3RhdGljIGludCBjbGtfIyNuYW1lIyNfc2V0X3BhcmVudChzdHJ1Y3QgY2xrICpjbGssIHN0cnVjdCBjbGsgKnBhcmVudCkJXAotewkJCQkJCQkJCVwKLQl1MzIgcmVnLCBtdXg7CQkJCQkJCVwKLQkJCQkJCQkJCVwKLQltdXggPSBfZ2V0X211eChwYXJlbnQsICZwbGwxX3N3X2NsaywgJnBsbDJfc3dfY2xrLAkJXAotCQkJJnBsbDNfc3dfY2xrLCAmbHBfYXBtX2Nsayk7CQkJXAotCXJlZyA9IF9fcmF3X3JlYWRsKE1YQ19DQ01fQ1NDTVIjI25yKSAmCQkJCVwKLQkJfk1YQ19DQ01fQ1NDTVIjI25yIyNfIyNiaXRzbmFtZSMjX0NMS19TRUxfTUFTSzsJCVwKLQlyZWcgfD0gbXV4IDw8IE1YQ19DQ01fQ1NDTVIjI25yIyNfIyNiaXRzbmFtZSMjX0NMS19TRUxfT0ZGU0VUOwlcCi0JX19yYXdfd3JpdGVsKHJlZywgTVhDX0NDTV9DU0NNUiMjbnIpOwkJCQlcCi0JCQkJCQkJCQlcCi0JcmV0dXJuIDA7CQkJCQkJCVwKLX0KLQotI2RlZmluZSBDTEtfU0VUX1JBVEUobmFtZSwgbnIsIGJpdHNuYW1lKQkJCQlcCi1zdGF0aWMgaW50IGNsa18jI25hbWUjI19zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkJXAotewkJCQkJCQkJCVwKLQl1MzIgcmVnLCBkaXYsIHBhcmVudF9yYXRlOwkJCQkJXAotCXUzMiBwcmUgPSAwLCBwb3N0ID0gMDsJCQkJCQlcCi0JCQkJCQkJCQlcCi0JcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOwkJCVwKLQlkaXYgPSBwYXJlbnRfcmF0ZSAvIHJhdGU7CQkJCQlcCi0JCQkJCQkJCQlcCi0JaWYgKChwYXJlbnRfcmF0ZSAvIGRpdikgIT0gcmF0ZSkJCQkJXAotCQlyZXR1cm4gLUVJTlZBTDsJCQkJCQlcCi0JCQkJCQkJCQlcCi0JX19jYWxjX3ByZV9wb3N0X2RpdmlkZXJzKGRpdiwgJnByZSwgJnBvc3QsCQkJXAotCQkoTVhDX0NDTV9DU0NEUiMjbnIjI18jI2JpdHNuYW1lIyNfQ0xLX1BSRURfTUFTSyA+PglcCi0JCU1YQ19DQ01fQ1NDRFIjI25yIyNfIyNiaXRzbmFtZSMjX0NMS19QUkVEX09GRlNFVCkgKyAxLAlcCi0JCShNWENfQ0NNX0NTQ0RSIyNuciMjXyMjYml0c25hbWUjI19DTEtfUE9ERl9NQVNLID4+CVwKLQkJTVhDX0NDTV9DU0NEUiMjbnIjI18jI2JpdHNuYW1lIyNfQ0xLX1BPREZfT0ZGU0VUKSArIDEpO1wKLQkJCQkJCQkJCVwKLQkvKiBTZXQgc2RoYzEgY2xvY2sgZGl2aWRlciAqLwkJCQkJXAotCXJlZyA9IF9fcmF3X3JlYWRsKE1YQ19DQ01fQ1NDRFIjI25yKSAmCQkJCVwKLQkJfihNWENfQ0NNX0NTQ0RSIyNuciMjXyMjYml0c25hbWUjI19DTEtfUFJFRF9NQVNLCVwKLQkJfCBNWENfQ0NNX0NTQ0RSIyNuciMjXyMjYml0c25hbWUjI19DTEtfUE9ERl9NQVNLKTsJXAotCXJlZyB8PSAocG9zdCAtIDEpIDw8CQkJCQkJXAotCQlNWENfQ0NNX0NTQ0RSIyNuciMjXyMjYml0c25hbWUjI19DTEtfUE9ERl9PRkZTRVQ7CVwKLQlyZWcgfD0gKHByZSAtIDEpIDw8CQkJCQkJXAotCQlNWENfQ0NNX0NTQ0RSIyNuciMjXyMjYml0c25hbWUjI19DTEtfUFJFRF9PRkZTRVQ7CVwKLQlfX3Jhd193cml0ZWwocmVnLCBNWENfQ0NNX0NTQ0RSIyNucik7CQkJCVwKLQkJCQkJCQkJCVwKLQlyZXR1cm4gMDsJCQkJCQkJXAotfQotCi0vKiBVQVJUICovCi1DTEtfR0VUX1JBVEUodWFydCwgMSwgVUFSVCkKLUNMS19TRVRfUEFSRU5UKHVhcnQsIDEsIFVBUlQpCi0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHVhcnRfcm9vdF9jbGsgPSB7Ci0JLnBhcmVudCA9ICZwbGwyX3N3X2NsaywKLQkuZ2V0X3JhdGUgPSBjbGtfdWFydF9nZXRfcmF0ZSwKLQkuc2V0X3BhcmVudCA9IGNsa191YXJ0X3NldF9wYXJlbnQsCi19OwotCi0vKiBVU0JPSDMgKi8KLUNMS19HRVRfUkFURSh1c2JvaDMsIDEsIFVTQk9IMykKLUNMS19TRVRfUEFSRU5UKHVzYm9oMywgMSwgVVNCT0gzKQotCi1zdGF0aWMgc3RydWN0IGNsayB1c2JvaDNfY2xrID0gewotCS5wYXJlbnQgPSAmcGxsMl9zd19jbGssCi0JLmdldF9yYXRlID0gY2xrX3VzYm9oM19nZXRfcmF0ZSwKLQkuc2V0X3BhcmVudCA9IGNsa191c2JvaDNfc2V0X3BhcmVudCwKLX07Ci0KLS8qIGVDU1BJICovCi1DTEtfR0VUX1JBVEUoZWNzcGksIDIsIENTUEkpCi1DTEtfU0VUX1BBUkVOVChlY3NwaSwgMSwgQ1NQSSkKLQotc3RhdGljIHN0cnVjdCBjbGsgZWNzcGlfbWFpbl9jbGsgPSB7Ci0JLnBhcmVudCA9ICZwbGwzX3N3X2NsaywKLQkuZ2V0X3JhdGUgPSBjbGtfZWNzcGlfZ2V0X3JhdGUsCi0JLnNldF9wYXJlbnQgPSBjbGtfZWNzcGlfc2V0X3BhcmVudCwKLX07Ci0KLS8qIGVTREhDICovCi1DTEtfR0VUX1JBVEUoZXNkaGMxLCAxLCBFU0RIQzFfTVNIQzEpCi1DTEtfU0VUX1BBUkVOVChlc2RoYzEsIDEsIEVTREhDMV9NU0hDMSkKLUNMS19TRVRfUkFURShlc2RoYzEsIDEsIEVTREhDMV9NU0hDMSkKLQotQ0xLX0dFVF9SQVRFKGVzZGhjMiwgMSwgRVNESEMyX01TSEMyKQotQ0xLX1NFVF9QQVJFTlQoZXNkaGMyLCAxLCBFU0RIQzJfTVNIQzIpCi1DTEtfU0VUX1JBVEUoZXNkaGMyLCAxLCBFU0RIQzJfTVNIQzIpCi0KLSNkZWZpbmUgREVGSU5FX0NMT0NLX0ZVTEwobmFtZSwgaSwgZXIsIGVzLCBnciwgc3IsIGUsIGQsIHAsIHMpCQlcCi0Jc3RhdGljIHN0cnVjdCBjbGsgbmFtZSA9IHsJCQkJCVwKLQkJLmlkCQk9IGksCQkJCQlcCi0JCS5lbmFibGVfcmVnCT0gZXIsCQkJCQlcCi0JCS5lbmFibGVfc2hpZnQJPSBlcywJCQkJCVwKLQkJLmdldF9yYXRlCT0gZ3IsCQkJCQlcCi0JCS5zZXRfcmF0ZQk9IHNyLAkJCQkJXAotCQkuZW5hYmxlCQk9IGUsCQkJCQlcCi0JCS5kaXNhYmxlCT0gZCwJCQkJCVwKLQkJLnBhcmVudAkJPSBwLAkJCQkJXAotCQkuc2Vjb25kYXJ5CT0gcywJCQkJCVwKLQl9Ci0KLSNkZWZpbmUgREVGSU5FX0NMT0NLKG5hbWUsIGksIGVyLCBlcywgZ3IsIHNyLCBwLCBzKQkJCVwKLQlERUZJTkVfQ0xPQ0tfRlVMTChuYW1lLCBpLCBlciwgZXMsIGdyLCBzciwgX2Nsa19jY2dyX2VuYWJsZSwgX2Nsa19jY2dyX2Rpc2FibGUsIHAsIHMpCi0KLS8qIFNoYXJlZCBwZXJpcGhlcmFsIGJ1cyBhcmJpdGVyICovCi1ERUZJTkVfQ0xPQ0soc3BiYV9jbGssIDAsIE1YQ19DQ01fQ0NHUjUsIE1YQ19DQ01fQ0NHUnhfQ0cwX09GRlNFVCwKLQlOVUxMLCAgTlVMTCwgJmlwZ19jbGssIE5VTEwpOwotCi0vKiBVQVJUICovCi1ERUZJTkVfQ0xPQ0sodWFydDFfaXBnX2NsaywgMCwgTVhDX0NDTV9DQ0dSMSwgTVhDX0NDTV9DQ0dSeF9DRzNfT0ZGU0VULAotCU5VTEwsICBOVUxMLCAmaXBnX2NsaywgJmFpcHNfdHoxX2Nsayk7Ci1ERUZJTkVfQ0xPQ0sodWFydDJfaXBnX2NsaywgMSwgTVhDX0NDTV9DQ0dSMSwgTVhDX0NDTV9DQ0dSeF9DRzVfT0ZGU0VULAotCU5VTEwsICBOVUxMLCAmaXBnX2NsaywgJmFpcHNfdHoxX2Nsayk7Ci1ERUZJTkVfQ0xPQ0sodWFydDNfaXBnX2NsaywgMiwgTVhDX0NDTV9DQ0dSMSwgTVhDX0NDTV9DQ0dSeF9DRzdfT0ZGU0VULAotCU5VTEwsICBOVUxMLCAmaXBnX2NsaywgJnNwYmFfY2xrKTsKLURFRklORV9DTE9DSyh1YXJ0MV9jbGssIDAsIE1YQ19DQ01fQ0NHUjEsIE1YQ19DQ01fQ0NHUnhfQ0c0X09GRlNFVCwKLQlOVUxMLCAgTlVMTCwgJnVhcnRfcm9vdF9jbGssICZ1YXJ0MV9pcGdfY2xrKTsKLURFRklORV9DTE9DSyh1YXJ0Ml9jbGssIDEsIE1YQ19DQ01fQ0NHUjEsIE1YQ19DQ01fQ0NHUnhfQ0c2X09GRlNFVCwKLQlOVUxMLCAgTlVMTCwgJnVhcnRfcm9vdF9jbGssICZ1YXJ0Ml9pcGdfY2xrKTsKLURFRklORV9DTE9DSyh1YXJ0M19jbGssIDIsIE1YQ19DQ01fQ0NHUjEsIE1YQ19DQ01fQ0NHUnhfQ0c4X09GRlNFVCwKLQlOVUxMLCAgTlVMTCwgJnVhcnRfcm9vdF9jbGssICZ1YXJ0M19pcGdfY2xrKTsKLQotLyogR1BUICovCi1ERUZJTkVfQ0xPQ0soZ3B0X2lwZ19jbGssIDAsIE1YQ19DQ01fQ0NHUjIsIE1YQ19DQ01fQ0NHUnhfQ0cxMF9PRkZTRVQsCi0JTlVMTCwgIE5VTEwsICZpcGdfY2xrLCBOVUxMKTsKLURFRklORV9DTE9DSyhncHRfY2xrLCAwLCBNWENfQ0NNX0NDR1IyLCBNWENfQ0NNX0NDR1J4X0NHOV9PRkZTRVQsCi0JTlVMTCwgIE5VTEwsICZpcGdfY2xrLCAmZ3B0X2lwZ19jbGspOwotCi0vKiBJMkMgKi8KLURFRklORV9DTE9DSyhpMmMxX2NsaywgMCwgTVhDX0NDTV9DQ0dSMSwgTVhDX0NDTV9DQ0dSeF9DRzlfT0ZGU0VULAotCU5VTEwsIE5VTEwsICZpcGdfY2xrLCBOVUxMKTsKLURFRklORV9DTE9DSyhpMmMyX2NsaywgMSwgTVhDX0NDTV9DQ0dSMSwgTVhDX0NDTV9DQ0dSeF9DRzEwX09GRlNFVCwKLQlOVUxMLCBOVUxMLCAmaXBnX2NsaywgTlVMTCk7Ci1ERUZJTkVfQ0xPQ0soaHNpMmNfY2xrLCAwLCBNWENfQ0NNX0NDR1IxLCBNWENfQ0NNX0NDR1J4X0NHMTFfT0ZGU0VULAotCU5VTEwsIE5VTEwsICZpcGdfY2xrLCBOVUxMKTsKLQotLyogRkVDICovCi1ERUZJTkVfQ0xPQ0soZmVjX2NsaywgMCwgTVhDX0NDTV9DQ0dSMiwgTVhDX0NDTV9DQ0dSeF9DRzEyX09GRlNFVCwKLQlOVUxMLCAgTlVMTCwgJmlwZ19jbGssIE5VTEwpOwotCi0vKiBORkMgKi8KLURFRklORV9DTE9DS19DQ0dSKG5mY19jbGssIDAsIE1YQ19DQ01fQ0NHUjUsIE1YQ19DQ01fQ0NHUnhfQ0cxMF9PRkZTRVQsCi0JY2xrX25mYywgJmVtaV9zbG93X2NsaywgTlVMTCk7Ci0KLS8qIFNTSSAqLwotREVGSU5FX0NMT0NLKHNzaTFfaXBnX2NsaywgMCwgTVhDX0NDTV9DQ0dSMywgTVhDX0NDTV9DQ0dSeF9DRzhfT0ZGU0VULAotCU5VTEwsIE5VTEwsICZpcGdfY2xrLCBOVUxMKTsKLURFRklORV9DTE9DSyhzc2kxX2NsaywgMCwgTVhDX0NDTV9DQ0dSMywgTVhDX0NDTV9DQ0dSeF9DRzlfT0ZGU0VULAotCU5VTEwsIE5VTEwsICZwbGwzX3N3X2NsaywgJnNzaTFfaXBnX2Nsayk7Ci1ERUZJTkVfQ0xPQ0soc3NpMl9pcGdfY2xrLCAxLCBNWENfQ0NNX0NDR1IzLCBNWENfQ0NNX0NDR1J4X0NHMTBfT0ZGU0VULAotCU5VTEwsIE5VTEwsICZpcGdfY2xrLCBOVUxMKTsKLURFRklORV9DTE9DSyhzc2kyX2NsaywgMSwgTVhDX0NDTV9DQ0dSMywgTVhDX0NDTV9DQ0dSeF9DRzExX09GRlNFVCwKLQlOVUxMLCBOVUxMLCAmcGxsM19zd19jbGssICZzc2kyX2lwZ19jbGspOwotCi0vKiBlQ1NQSSAqLwotREVGSU5FX0NMT0NLX0ZVTEwoZWNzcGkxX2lwZ19jbGssIDAsIE1YQ19DQ01fQ0NHUjQsIE1YQ19DQ01fQ0NHUnhfQ0c5X09GRlNFVCwKLQkJTlVMTCwgTlVMTCwgX2Nsa19jY2dyX2VuYWJsZV9pbnJ1biwgX2Nsa19jY2dyX2Rpc2FibGUsCi0JCSZpcGdfY2xrLCAmc3BiYV9jbGspOwotREVGSU5FX0NMT0NLKGVjc3BpMV9jbGssIDAsIE1YQ19DQ01fQ0NHUjQsIE1YQ19DQ01fQ0NHUnhfQ0cxMF9PRkZTRVQsCi0JCU5VTEwsIE5VTEwsICZlY3NwaV9tYWluX2NsaywgJmVjc3BpMV9pcGdfY2xrKTsKLURFRklORV9DTE9DS19GVUxMKGVjc3BpMl9pcGdfY2xrLCAwLCBNWENfQ0NNX0NDR1I0LCBNWENfQ0NNX0NDR1J4X0NHMTFfT0ZGU0VULAotCQlOVUxMLCBOVUxMLCBfY2xrX2NjZ3JfZW5hYmxlX2lucnVuLCBfY2xrX2NjZ3JfZGlzYWJsZSwKLQkJJmlwZ19jbGssICZhaXBzX3R6Ml9jbGspOwotREVGSU5FX0NMT0NLKGVjc3BpMl9jbGssIDAsIE1YQ19DQ01fQ0NHUjQsIE1YQ19DQ01fQ0NHUnhfQ0cxMl9PRkZTRVQsCi0JCU5VTEwsIE5VTEwsICZlY3NwaV9tYWluX2NsaywgJmVjc3BpMl9pcGdfY2xrKTsKLQotLyogQ1NQSSAqLwotREVGSU5FX0NMT0NLKGNzcGlfaXBnX2NsaywgMCwgTVhDX0NDTV9DQ0dSNCwgTVhDX0NDTV9DQ0dSeF9DRzlfT0ZGU0VULAotCQlOVUxMLCBOVUxMLCAmaXBnX2NsaywgJmFpcHNfdHoyX2Nsayk7Ci1ERUZJTkVfQ0xPQ0soY3NwaV9jbGssIDAsIE1YQ19DQ01fQ0NHUjQsIE1YQ19DQ01fQ0NHUnhfQ0cxM19PRkZTRVQsCi0JCU5VTEwsIE5VTEwsICZpcGdfY2xrLCAmY3NwaV9pcGdfY2xrKTsKLQotLyogU0RNQSAqLwotREVGSU5FX0NMT0NLKHNkbWFfY2xrLCAxLCBNWENfQ0NNX0NDR1I0LCBNWENfQ0NNX0NDR1J4X0NHMTVfT0ZGU0VULAotCQlOVUxMLCBOVUxMLCAmYWhiX2NsaywgTlVMTCk7Ci0KLS8qIGVTREhDICovCi1ERUZJTkVfQ0xPQ0tfRlVMTChlc2RoYzFfaXBnX2NsaywgMCwgTVhDX0NDTV9DQ0dSMywgTVhDX0NDTV9DQ0dSeF9DRzBfT0ZGU0VULAotCU5VTEwsICBOVUxMLCBfY2xrX21heF9lbmFibGUsIF9jbGtfbWF4X2Rpc2FibGUsICZpcGdfY2xrLCBOVUxMKTsKLURFRklORV9DTE9DS19NQVgoZXNkaGMxX2NsaywgMCwgTVhDX0NDTV9DQ0dSMywgTVhDX0NDTV9DQ0dSeF9DRzFfT0ZGU0VULAotCWNsa19lc2RoYzEsICZwbGwyX3N3X2NsaywgJmVzZGhjMV9pcGdfY2xrKTsKLURFRklORV9DTE9DS19GVUxMKGVzZGhjMl9pcGdfY2xrLCAxLCBNWENfQ0NNX0NDR1IzLCBNWENfQ0NNX0NDR1J4X0NHMl9PRkZTRVQsCi0JTlVMTCwgIE5VTEwsIF9jbGtfbWF4X2VuYWJsZSwgX2Nsa19tYXhfZGlzYWJsZSwgJmlwZ19jbGssIE5VTEwpOwotREVGSU5FX0NMT0NLX01BWChlc2RoYzJfY2xrLCAxLCBNWENfQ0NNX0NDR1IzLCBNWENfQ0NNX0NDR1J4X0NHM19PRkZTRVQsCi0JY2xrX2VzZGhjMiwgJnBsbDJfc3dfY2xrLCAmZXNkaGMyX2lwZ19jbGspOwotCi0jZGVmaW5lIF9SRUdJU1RFUl9DTE9DSyhkLCBuLCBjKSBcCi0gICAgICAgeyBcCi0JCS5kZXZfaWQgPSBkLCBcCi0JCS5jb25faWQgPSBuLCBcCi0JCS5jbGsgPSAmYywgICBcCi0gICAgICAgfSwKLQotc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIGxvb2t1cHNbXSA9IHsKLQlfUkVHSVNURVJfQ0xPQ0soImlteC11YXJ0LjAiLCBOVUxMLCB1YXJ0MV9jbGspCi0JX1JFR0lTVEVSX0NMT0NLKCJpbXgtdWFydC4xIiwgTlVMTCwgdWFydDJfY2xrKQotCV9SRUdJU1RFUl9DTE9DSygiaW14LXVhcnQuMiIsIE5VTEwsIHVhcnQzX2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImdwdCIsIGdwdF9jbGspCi0JX1JFR0lTVEVSX0NMT0NLKCJmZWMuMCIsIE5VTEwsIGZlY19jbGspCi0JX1JFR0lTVEVSX0NMT0NLKCJpbXgtaTJjLjAiLCBOVUxMLCBpMmMxX2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soImlteC1pMmMuMSIsIE5VTEwsIGkyYzJfY2xrKQotCV9SRUdJU1RFUl9DTE9DSygiaW14LWkyYy4yIiwgTlVMTCwgaHNpMmNfY2xrKQotCV9SRUdJU1RFUl9DTE9DSygibXhjLWVoY2kuMCIsICJ1c2IiLCB1c2JvaDNfY2xrKQotCV9SRUdJU1RFUl9DTE9DSygibXhjLWVoY2kuMCIsICJ1c2JfYWhiIiwgYWhiX2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soIm14Yy1laGNpLjEiLCAidXNiIiwgdXNib2gzX2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soIm14Yy1laGNpLjEiLCAidXNiX2FoYiIsIGFoYl9jbGspCi0JX1JFR0lTVEVSX0NMT0NLKCJmc2wtdXNiMi11ZGMiLCAidXNiIiwgdXNib2gzX2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soImZzbC11c2IyLXVkYyIsICJ1c2JfYWhiIiwgYWhiX2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soImlteC1rZXlwYWQuMCIsIE5VTEwsIGtwcF9jbGspCi0JX1JFR0lTVEVSX0NMT0NLKCJteGNfbmFuZCIsIE5VTEwsIG5mY19jbGspCi0JX1JFR0lTVEVSX0NMT0NLKCJpbXgtc3NpLjAiLCBOVUxMLCBzc2kxX2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soImlteC1zc2kuMSIsIE5VTEwsIHNzaTJfY2xrKQotCV9SRUdJU1RFUl9DTE9DSygiaW14LXNkbWEiLCBOVUxMLCBzZG1hX2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImNraWgiLCBja2loX2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImNraWgyIiwgY2tpaDJfY2xrKQotCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiZ3B0XzMyayIsIGdwdF8zMmtfY2xrKQotCV9SRUdJU1RFUl9DTE9DSygiaW14NTEtZWNzcGkuMCIsIE5VTEwsIGVjc3BpMV9jbGspCi0JX1JFR0lTVEVSX0NMT0NLKCJpbXg1MS1lY3NwaS4xIiwgTlVMTCwgZWNzcGkyX2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soImlteDUxLWNzcGkuMCIsIE5VTEwsIGNzcGlfY2xrKQotCV9SRUdJU1RFUl9DTE9DSygic2RoY2ktZXNkaGMtaW14LjAiLCBOVUxMLCBlc2RoYzFfY2xrKQotCV9SRUdJU1RFUl9DTE9DSygic2RoY2ktZXNkaGMtaW14LjEiLCBOVUxMLCBlc2RoYzJfY2xrKQotCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiY3B1X2NsayIsIGNwdV9jbGspCi19OwotCi1zdGF0aWMgdm9pZCBjbGtfdHJlZV9pbml0KHZvaWQpCi17Ci0JdTMyIHJlZzsKLQotCWlwZ19wZXJjbGsuc2V0X3BhcmVudCgmaXBnX3BlcmNsaywgJmxwX2FwbV9jbGspOwotCi0JLyoKLQkgKiBJbml0aWFsaXNlIHRoZSBJUEcgUEVSIENMSyBkaXZpZGVycyB0byAzLiBJUEdfUEVSX0NMSyBzaG91bGQgYmUgYXQKLQkgKiA4TUh6LCBpdHMgZGVyaXZlZCBmcm9tIGxwX2FwbS4KLQkgKgotCSAqIEZJWE1FOiBWZXJpZnkgaWYgdHJ1ZSBmb3IgYWxsIGJvYXJkcwotCSAqLwotCXJlZyA9IF9fcmF3X3JlYWRsKE1YQ19DQ01fQ0JDRFIpOwotCXJlZyAmPSB+TVhDX0NDTV9DQkNEUl9QRVJDTEtfUFJFRDFfTUFTSzsKLQlyZWcgJj0gfk1YQ19DQ01fQ0JDRFJfUEVSQ0xLX1BSRUQyX01BU0s7Ci0JcmVnICY9IH5NWENfQ0NNX0NCQ0RSX1BFUkNMS19QT0RGX01BU0s7Ci0JcmVnIHw9ICgyIDw8IE1YQ19DQ01fQ0JDRFJfUEVSQ0xLX1BSRUQxX09GRlNFVCk7Ci0JX19yYXdfd3JpdGVsKHJlZywgTVhDX0NDTV9DQkNEUik7Ci19Ci0KLWludCBfX2luaXQgbXg1MV9jbG9ja3NfaW5pdCh1bnNpZ25lZCBsb25nIGNraWwsIHVuc2lnbmVkIGxvbmcgb3NjLAotCQkJdW5zaWduZWQgbG9uZyBja2loMSwgdW5zaWduZWQgbG9uZyBja2loMikKLXsKLQlpbnQgaTsKLQotCWV4dGVybmFsX2xvd19yZWZlcmVuY2UgPSBja2lsOwotCWV4dGVybmFsX2hpZ2hfcmVmZXJlbmNlID0gY2tpaDE7Ci0JY2tpaDJfcmVmZXJlbmNlID0gY2tpaDI7Ci0Jb3NjaWxsYXRvcl9yZWZlcmVuY2UgPSBvc2M7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShsb29rdXBzKTsgaSsrKQotCQljbGtkZXZfYWRkKCZsb29rdXBzW2ldKTsKLQotCWNsa190cmVlX2luaXQoKTsKLQotCWNsa19lbmFibGUoJmNwdV9jbGspOwotCWNsa19lbmFibGUoJm1haW5fYnVzX2Nsayk7Ci0KLQkvKiBzZXQgdGhlIHVzYm9oM19jbGsgcGFyZW50IHRvIHBsbDJfc3dfY2xrICovCi0JY2xrX3NldF9wYXJlbnQoJnVzYm9oM19jbGssICZwbGwyX3N3X2Nsayk7Ci0KLQkvKiBTZXQgU0RIQyBwYXJlbnRzIHRvIGJlIFBMTDIgKi8KLQljbGtfc2V0X3BhcmVudCgmZXNkaGMxX2NsaywgJnBsbDJfc3dfY2xrKTsKLQljbGtfc2V0X3BhcmVudCgmZXNkaGMyX2NsaywgJnBsbDJfc3dfY2xrKTsKLQotCS8qIHNldCBTREhDIHJvb3QgY2xvY2sgYXMgMTY2LjI1TUhaKi8KLQljbGtfc2V0X3JhdGUoJmVzZGhjMV9jbGssIDE2NjI1MDAwMCk7Ci0JY2xrX3NldF9yYXRlKCZlc2RoYzJfY2xrLCAxNjYyNTAwMDApOwotCi0JLyogU3lzdGVtIHRpbWVyICovCi0JbXhjX3RpbWVyX2luaXQoJmdwdF9jbGssIE1YNTFfSU9fQUREUkVTUyhNWDUxX0dQVDFfQkFTRV9BRERSKSwKLQkJTVg1MV9NWENfSU5UX0dQVCk7Ci0JcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14NS9jcHUuYyBiL2FyY2gvYXJtL21hY2gtbXg1L2NwdS5jCmluZGV4IGVhYWNiNmUuLmQ0MDY3MWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXg1L2NwdS5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXg1L2NwdS5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAyMDA4LTIwMDkgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDA4LTIwMTAgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBUaGUgY29kZSBjb250YWluZWQgaGVyZWluIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKQEAgLTIwLDM3ICsyMCwxOCBAQAogCiBzdGF0aWMgaW50IGNwdV9zaWxpY29uX3JldiA9IC0xOwogCi0jZGVmaW5lIFNJX1JFViAweDQ4CisjZGVmaW5lIElJTV9TUkVWIDB4MjQKIAotc3RhdGljIHZvaWQgcXVlcnlfc2lsaWNvbl9wYXJhbWV0ZXIodm9pZCkKK3N0YXRpYyBpbnQgZ2V0X214NTFfc3Jldih2b2lkKQogewotCXZvaWQgX19pb21lbSAqcm9tID0gaW9yZW1hcChNWDUxX0lST01fQkFTRV9BRERSLCBNWDUxX0lST01fU0laRSk7Ci0JdTMyIHJldjsKKwl2b2lkIF9faW9tZW0gKmlpbV9iYXNlID0gTVg1MV9JT19BRERSRVNTKE1YNTFfSUlNX0JBU0VfQUREUik7CisJdTMyIHJldiA9IHJlYWRsKGlpbV9iYXNlICsgSUlNX1NSRVYpICYgMHhmZjsKIAotCWlmICghcm9tKSB7Ci0JCWNwdV9zaWxpY29uX3JldiA9IC1FSU5WQUw7Ci0JCXJldHVybjsKLQl9Ci0KLQlyZXYgPSByZWFkbChyb20gKyBTSV9SRVYpOwotCXN3aXRjaCAocmV2KSB7Ci0JY2FzZSAweDE6Ci0JCWNwdV9zaWxpY29uX3JldiA9IE1YNTFfQ0hJUF9SRVZfMV8wOwotCQlicmVhazsKLQljYXNlIDB4MjoKLQkJY3B1X3NpbGljb25fcmV2ID0gTVg1MV9DSElQX1JFVl8xXzE7Ci0JCWJyZWFrOwotCWNhc2UgMHgxMDoKLQkJY3B1X3NpbGljb25fcmV2ID0gTVg1MV9DSElQX1JFVl8yXzA7Ci0JCWJyZWFrOwotCWNhc2UgMHgyMDoKLQkJY3B1X3NpbGljb25fcmV2ID0gTVg1MV9DSElQX1JFVl8zXzA7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWNwdV9zaWxpY29uX3JldiA9IDA7Ci0JfQotCi0JaW91bm1hcChyb20pOworCWlmIChyZXYgPT0gMHgwKQorCQlyZXR1cm4gSU1YX0NISVBfUkVWSVNJT05fMl8wOworCWVsc2UgaWYgKHJldiA9PSAweDEwKQorCQlyZXR1cm4gSU1YX0NISVBfUkVWSVNJT05fM18wOworCXJldHVybiAwOwogfQogCiAvKgpAQCAtNjQsNyArNDUsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChjcHVfc2lsaWNvbl9yZXYgPT0gLTEpCi0JCXF1ZXJ5X3NpbGljb25fcGFyYW1ldGVyKCk7CisJCWNwdV9zaWxpY29uX3JldiA9IGdldF9teDUxX3NyZXYoKTsKIAogCXJldHVybiBjcHVfc2lsaWNvbl9yZXY7CiB9CkBAIC03OSw3ICs2MCwxMCBAQAogICovCiBzdGF0aWMgaW50IF9faW5pdCBteDUxX25lb25fZml4dXAodm9pZCkKIHsKLQlpZiAobXg1MV9yZXZpc2lvbigpIDwgTVg1MV9DSElQX1JFVl8zXzAgJiYgKGVsZl9od2NhcCAmIEhXQ0FQX05FT04pKSB7CisJaWYgKCFjcHVfaXNfbXg1MSgpKQorCQlyZXR1cm4gMDsKKworCWlmIChteDUxX3JldmlzaW9uKCkgPCBJTVhfQ0hJUF9SRVZJU0lPTl8zXzAgJiYgKGVsZl9od2NhcCAmIEhXQ0FQX05FT04pKSB7CiAJCWVsZl9od2NhcCAmPSB+SFdDQVBfTkVPTjsKIAkJcHJfaW5mbygiVHVybmluZyBvZmYgTkVPTiBzdXBwb3J0LCBkZXRlY3RlZCBicm9rZW4gTkVPTiBpbXBsZW1lbnRhdGlvblxuIik7CiAJfQpAQCAtODksMjkgKzczLDY1IEBACiBsYXRlX2luaXRjYWxsKG14NTFfbmVvbl9maXh1cCk7CiAjZW5kaWYKIAorc3RhdGljIGludCBnZXRfbXg1M19zcmV2KHZvaWQpCit7CisJdm9pZCBfX2lvbWVtICppaW1fYmFzZSA9IE1YNTFfSU9fQUREUkVTUyhNWDUzX0lJTV9CQVNFX0FERFIpOworCXUzMiByZXYgPSByZWFkbChpaW1fYmFzZSArIElJTV9TUkVWKSAmIDB4ZmY7CisKKwlpZiAocmV2ID09IDB4MCkKKwkJcmV0dXJuIElNWF9DSElQX1JFVklTSU9OXzFfMDsKKwllbHNlIGlmIChyZXYgPT0gMHgxMCkKKwkJcmV0dXJuIElNWF9DSElQX1JFVklTSU9OXzJfMDsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJldHVybnM6CisgKgl0aGUgc2lsaWNvbiByZXZpc2lvbiBvZiB0aGUgY3B1CisgKgktRUlOVkFMIC0gbm90IGEgbXg1MworICovCitpbnQgbXg1M19yZXZpc2lvbih2b2lkKQoreworCWlmICghY3B1X2lzX214NTMoKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoY3B1X3NpbGljb25fcmV2ID09IC0xKQorCQljcHVfc2lsaWNvbl9yZXYgPSBnZXRfbXg1M19zcmV2KCk7CisKKwlyZXR1cm4gY3B1X3NpbGljb25fcmV2OworfQorRVhQT1JUX1NZTUJPTChteDUzX3JldmlzaW9uKTsKKwogc3RhdGljIGludCBfX2luaXQgcG9zdF9jcHVfaW5pdCh2b2lkKQogewogCXVuc2lnbmVkIGludCByZWc7CiAJdm9pZCBfX2lvbWVtICpiYXNlOwogCi0JaWYgKCFjcHVfaXNfbXg1MSgpKQotCQlyZXR1cm4gMDsKKwlpZiAoY3B1X2lzX214NTEoKSB8fCBjcHVfaXNfbXg1MygpKSB7CisJCWlmIChjcHVfaXNfbXg1MSgpKQorCQkJYmFzZSA9IE1YNTFfSU9fQUREUkVTUyhNWDUxX0FJUFMxX0JBU0VfQUREUik7CisJCWVsc2UKKwkJCWJhc2UgPSBNWDUzX0lPX0FERFJFU1MoTVg1M19BSVBTMV9CQVNFX0FERFIpOwogCi0JYmFzZSA9IE1YNTFfSU9fQUREUkVTUyhNWDUxX0FJUFMxX0JBU0VfQUREUik7Ci0JX19yYXdfd3JpdGVsKDB4MCwgYmFzZSArIDB4NDApOwotCV9fcmF3X3dyaXRlbCgweDAsIGJhc2UgKyAweDQ0KTsKLQlfX3Jhd193cml0ZWwoMHgwLCBiYXNlICsgMHg0OCk7Ci0JX19yYXdfd3JpdGVsKDB4MCwgYmFzZSArIDB4NEMpOwotCXJlZyA9IF9fcmF3X3JlYWRsKGJhc2UgKyAweDUwKSAmIDB4MDBGRkZGRkY7Ci0JX19yYXdfd3JpdGVsKHJlZywgYmFzZSArIDB4NTApOworCQlfX3Jhd193cml0ZWwoMHgwLCBiYXNlICsgMHg0MCk7CisJCV9fcmF3X3dyaXRlbCgweDAsIGJhc2UgKyAweDQ0KTsKKwkJX19yYXdfd3JpdGVsKDB4MCwgYmFzZSArIDB4NDgpOworCQlfX3Jhd193cml0ZWwoMHgwLCBiYXNlICsgMHg0Qyk7CisJCXJlZyA9IF9fcmF3X3JlYWRsKGJhc2UgKyAweDUwKSAmIDB4MDBGRkZGRkY7CisJCV9fcmF3X3dyaXRlbChyZWcsIGJhc2UgKyAweDUwKTsKIAotCWJhc2UgPSBNWDUxX0lPX0FERFJFU1MoTVg1MV9BSVBTMl9CQVNFX0FERFIpOwotCV9fcmF3X3dyaXRlbCgweDAsIGJhc2UgKyAweDQwKTsKLQlfX3Jhd193cml0ZWwoMHgwLCBiYXNlICsgMHg0NCk7Ci0JX19yYXdfd3JpdGVsKDB4MCwgYmFzZSArIDB4NDgpOwotCV9fcmF3X3dyaXRlbCgweDAsIGJhc2UgKyAweDRDKTsKLQlyZWcgPSBfX3Jhd19yZWFkbChiYXNlICsgMHg1MCkgJiAweDAwRkZGRkZGOwotCV9fcmF3X3dyaXRlbChyZWcsIGJhc2UgKyAweDUwKTsKKwkJaWYgKGNwdV9pc19teDUxKCkpCisJCQliYXNlID0gTVg1MV9JT19BRERSRVNTKE1YNTFfQUlQUzJfQkFTRV9BRERSKTsKKwkJZWxzZQorCQkJYmFzZSA9IE1YNTNfSU9fQUREUkVTUyhNWDUzX0FJUFMyX0JBU0VfQUREUik7CisKKwkJX19yYXdfd3JpdGVsKDB4MCwgYmFzZSArIDB4NDApOworCQlfX3Jhd193cml0ZWwoMHgwLCBiYXNlICsgMHg0NCk7CisJCV9fcmF3X3dyaXRlbCgweDAsIGJhc2UgKyAweDQ4KTsKKwkJX19yYXdfd3JpdGVsKDB4MCwgYmFzZSArIDB4NEMpOworCQlyZWcgPSBfX3Jhd19yZWFkbChiYXNlICsgMHg1MCkgJiAweDAwRkZGRkZGOworCQlfX3Jhd193cml0ZWwocmVnLCBiYXNlICsgMHg1MCk7CisJfQogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14NS9jcm1fcmVncy5oIGIvYXJjaC9hcm0vbWFjaC1teDUvY3JtX3JlZ3MuaAppbmRleCBjNzc2YjlhLi5iNDYyYzIyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14NS9jcm1fcmVncy5oCisrKyBiL2FyY2gvYXJtL21hY2gtbXg1L2NybV9yZWdzLmgKQEAgLTE4LDYgKzE4LDEzIEBACiAjZGVmaW5lIE1YNTFfQ09SVEVYQThfQkFTRQlNWDUxX0lPX0FERFJFU1MoTVg1MV9BUk1fQkFTRV9BRERSKQogI2RlZmluZSBNWDUxX0dQQ19CQVNFCQlNWDUxX0lPX0FERFJFU1MoTVg1MV9HUENfQkFTRV9BRERSKQogCisvKk1YNTMqLworI2RlZmluZSBNWDUzX0NDTV9CQVNFCQlNWDUzX0lPX0FERFJFU1MoTVg1M19DQ01fQkFTRV9BRERSKQorI2RlZmluZSBNWDUzX0RQTEwxX0JBU0UJCU1YNTNfSU9fQUREUkVTUyhNWDUzX1BMTDFfQkFTRV9BRERSKQorI2RlZmluZSBNWDUzX0RQTEwyX0JBU0UJCU1YNTNfSU9fQUREUkVTUyhNWDUzX1BMTDJfQkFTRV9BRERSKQorI2RlZmluZSBNWDUzX0RQTEwzX0JBU0UJCU1YNTNfSU9fQUREUkVTUyhNWDUzX1BMTDNfQkFTRV9BRERSKQorI2RlZmluZSBNWDUzX0RQTEw0X0JBU0UJCU1YNTNfSU9fQUREUkVTUyhNWDUzX1BMTDNfQkFTRV9BRERSKQorCiAvKiBQTEwgUmVnaXN0ZXIgT2Zmc2V0cyAqLwogI2RlZmluZSBNWENfUExMX0RQX0NUTAkJCTB4MDAKICNkZWZpbmUgTVhDX1BMTF9EUF9DT05GSUcJCTB4MDQKQEAgLTM4MCw3ICszODcsOCBAQAogLyogRGVmaW5lIHRoZSBiaXRzIGluIHJlZ2lzdGVyIENMUENSICovCiAjZGVmaW5lIE1YQ19DQ01fQ0xQQ1JfQllQQVNTX0hTQ19MUE1fSFMJCSgweDEgPDwgMjMpCiAjZGVmaW5lIE1YQ19DQ01fQ0xQQ1JfQllQQVNTX1NDQ19MUE1fSFMJCSgweDEgPDwgMjIpCi0jZGVmaW5lIE1YQ19DQ01fQ0xQQ1JfQllQQVNTX01BWF9MUE1fSFMJCSgweDEgPDwgMjEpCisjZGVmaW5lIE1YNTFfQ0NNX0NMUENSX0JZUEFTU19NQVhfTFBNX0hTCQkoMHgxIDw8IDIxKQorI2RlZmluZSBNWDUzX0NDTV9DTFBDUl9CWVBBU1NfTUFYX0xQTV9IUwkJKDB4MSA8PCAyNSkKICNkZWZpbmUgTVhDX0NDTV9DTFBDUl9CWVBBU1NfU0RNQV9MUE1fSFMJKDB4MSA8PCAyMCkKICNkZWZpbmUgTVhDX0NDTV9DTFBDUl9CWVBBU1NfRU1JX0xQTV9IUwkJKDB4MSA8PCAxOSkKICNkZWZpbmUgTVhDX0NDTV9DTFBDUl9CWVBBU1NfSVBVX0xQTV9IUwkJKDB4MSA8PCAxOCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXg1L2RldmljZXMtaW14NTEuaCBiL2FyY2gvYXJtL21hY2gtbXg1L2RldmljZXMtaW14NTEuaAppbmRleCA4YzUwY2I1Li42MzAyZTQ2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14NS9kZXZpY2VzLWlteDUxLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1teDUvZGV2aWNlcy1pbXg1MS5oCkBAIC0zMSw2ICszMSwxMSBAQAogI2RlZmluZSBpbXg1MV9hZGRfbXhjX25hbmQocGRhdGEpCVwKIAlpbXhfYWRkX214Y19uYW5kKCZpbXg1MV9teGNfbmFuZF9kYXRhLCBwZGF0YSkKIAorZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbXhfc2RoY2lfZXNkaGNfaW14X2RhdGEKK2lteDUxX3NkaGNpX2VzZGhjX2lteF9kYXRhW10gX19pbml0Y29uc3Q7CisjZGVmaW5lIGlteDUxX2FkZF9zZGhjaV9lc2RoY19pbXgoaWQsIHBkYXRhKQlcCisJaW14X2FkZF9zZGhjaV9lc2RoY19pbXgoJmlteDUxX3NkaGNpX2VzZGhjX2lteF9kYXRhW2lkXSwgcGRhdGEpCisKIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW14X3NwaV9pbXhfZGF0YSBpbXg1MV9jc3BpX2RhdGEgX19pbml0Y29uc3Q7CiAjZGVmaW5lIGlteDUxX2FkZF9jc3BpKHBkYXRhKQlcCiAJaW14X2FkZF9zcGlfaW14KCZpbXg1MV9jc3BpX2RhdGEsIHBkYXRhKQpAQCAtMzksNiArNDQsNiBAQAogI2RlZmluZSBpbXg1MV9hZGRfZWNzcGkoaWQsIHBkYXRhKQlcCiAJaW14X2FkZF9zcGlfaW14KCZpbXg1MV9lY3NwaV9kYXRhW2lkXSwgcGRhdGEpCiAKLWV4dGVybiBjb25zdCBzdHJ1Y3QgaW14X2VzZGhjX2lteF9kYXRhIGlteDUxX2VzZGhjX2RhdGFbXSBfX2luaXRjb25zdDsKLSNkZWZpbmUgaW14NTFfYWRkX2VzZGhjKGlkLCBwZGF0YSkJXAotCWlteF9hZGRfZXNkaGMoJmlteDUxX2VzZGhjX2RhdGFbaWRdLCBwZGF0YSkKK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW14X2lteDJfd2R0X2RhdGEgaW14NTFfaW14Ml93ZHRfZGF0YVtdIF9faW5pdGNvbnN0OworI2RlZmluZSBpbXg1MV9hZGRfaW14Ml93ZHQoaWQsIHBkYXRhKQlcCisJaW14X2FkZF9pbXgyX3dkdCgmaW14NTFfaW14Ml93ZHRfZGF0YVtpZF0pCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14NS9kZXZpY2VzLWlteDUzLmggYi9hcmNoL2FybS9tYWNoLW14NS9kZXZpY2VzLWlteDUzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQwZWMyNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXg1L2RldmljZXMtaW14NTMuaApAQCAtMCwwICsxLDEzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFlvbmcgU2hlbi4gPFlvbmcuU2hlbkBsaW5hcm8ub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxtYWNoL214NTMuaD4KKyNpbmNsdWRlIDxtYWNoL2RldmljZXMtY29tbW9uLmg+CisKK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW14X2lteF91YXJ0XzFpcnFfZGF0YSBpbXg1M19pbXhfdWFydF9kYXRhW10gX19pbml0Y29uc3Q7CisjZGVmaW5lIGlteDUzX2FkZF9pbXhfdWFydChpZCwgcGRhdGEpCVwKKwlpbXhfYWRkX2lteF91YXJ0XzFpcnEoJmlteDUzX2lteF91YXJ0X2RhdGFbaWRdLCBwZGF0YSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXg1L2RldmljZXMtbXg1MC5oIGIvYXJjaC9hcm0vbWFjaC1teDUvZGV2aWNlcy1teDUwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThhYjA3NAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXg1L2RldmljZXMtbXg1MC5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICovCisKKyNpbmNsdWRlIDxtYWNoL214NTAuaD4KKyNpbmNsdWRlIDxtYWNoL2RldmljZXMtY29tbW9uLmg+CisKK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW14X2lteF91YXJ0XzFpcnFfZGF0YSBpbXg1MF9pbXhfdWFydF9kYXRhW10gX19pbml0Y29uc3Q7CisjZGVmaW5lIGlteDUwX2FkZF9pbXhfdWFydChpZCwgcGRhdGEpCVwKKwlpbXhfYWRkX2lteF91YXJ0XzFpcnEoJmlteDUwX2lteF91YXJ0X2RhdGFbaWRdLCBwZGF0YSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXg1L2RldmljZXMuYyBiL2FyY2gvYXJtL21hY2gtbXg1L2RldmljZXMuYwppbmRleCA0YzdiZTg3Li4xYmRhNWNiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14NS9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDUvZGV2aWNlcy5jCkBAIC05NywxOSArOTcsMjcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteGNfd2R0X3Jlc291cmNlc1tdID0geworc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1c2JoMl9yZXNvdXJjZXNbXSA9IHsKIAl7Ci0JCS5zdGFydCA9IE1YNTFfV0RPR19CQVNFX0FERFIsCi0JCS5lbmQgPSBNWDUxX1dET0dfQkFTRV9BRERSICsgU1pfMTZLIC0gMSwKKwkJLnN0YXJ0ID0gTVg1MV9PVEdfQkFTRV9BRERSICsgMHg0MDAsCisJCS5lbmQgPSBNWDUxX09UR19CQVNFX0FERFIgKyAweDQwMCArIDB4MWZmLAogCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKIAl9LAorCXsKKwkJLnN0YXJ0ID0gTVg1MV9NWENfSU5UX1VTQl9IMiwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKIH07CiAKLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3dkdCA9IHsKLQkubmFtZSA9ICJpbXgyLXdkdCIsCi0JLmlkID0gMCwKLQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX3dkdF9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZSA9IG14Y193ZHRfcmVzb3VyY2VzLAorc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfdXNiaDJfZGV2aWNlID0geworCS5uYW1lID0gIm14Yy1laGNpIiwKKwkuaWQgPSAyLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh1c2JoMl9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSA9IHVzYmgyX3Jlc291cmNlcywKKwkuZGV2ID0geworCQkuZG1hX21hc2sgPSAmdXNiX2RtYV9tYXNrLAorCQkuY29oZXJlbnRfZG1hX21hc2sgPSBETUFfQklUX01BU0soMzIpLAorCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y19rcHBfcmVzb3VyY2VzW10gPSB7CkBAIC0xNjAsOSArMTY4LDM2IEBACiAJCS5pcnFfaGlnaCA9IE1YNTFfTVhDX0lOVF9HUElPNF9ISUdILAogCQkudmlydHVhbF9pcnFfc3RhcnQgPSBNWENfR1BJT19JUlFfU1RBUlQgKyAzMiAqIDMKIAl9LAorCXsKKwkJLmNoaXAubGFiZWwgPSAiZ3Bpby00IiwKKwkJLmJhc2UgPSBNWDUzX0lPX0FERFJFU1MoTVg1M19HUElPNV9CQVNFX0FERFIpLAorCQkuaXJxID0gTVg1M19JTlRfR1BJTzVfTE9XLAorCQkuaXJxX2hpZ2ggPSBNWDUzX0lOVF9HUElPNV9ISUdILAorCQkudmlydHVhbF9pcnFfc3RhcnQgPSBNWENfR1BJT19JUlFfU1RBUlQgKyAzMiAqIDQKKwl9LAorCXsKKwkJLmNoaXAubGFiZWwgPSAiZ3Bpby01IiwKKwkJLmJhc2UgPSBNWDUzX0lPX0FERFJFU1MoTVg1M19HUElPNl9CQVNFX0FERFIpLAorCQkuaXJxID0gTVg1M19JTlRfR1BJTzZfTE9XLAorCQkuaXJxX2hpZ2ggPSBNWDUzX0lOVF9HUElPNl9ISUdILAorCQkudmlydHVhbF9pcnFfc3RhcnQgPSBNWENfR1BJT19JUlFfU1RBUlQgKyAzMiAqIDUKKwl9LAorCXsKKwkJLmNoaXAubGFiZWwgPSAiZ3Bpby02IiwKKwkJLmJhc2UgPSBNWDUzX0lPX0FERFJFU1MoTVg1M19HUElPN19CQVNFX0FERFIpLAorCQkuaXJxID0gTVg1M19JTlRfR1BJTzdfTE9XLAorCQkuaXJxX2hpZ2ggPSBNWDUzX0lOVF9HUElPN19ISUdILAorCQkudmlydHVhbF9pcnFfc3RhcnQgPSBNWENfR1BJT19JUlFfU1RBUlQgKyAzMiAqIDYKKwl9LAogfTsKIAogaW50IF9faW5pdCBpbXg1MV9yZWdpc3Rlcl9ncGlvcyh2b2lkKQogeworCXJldHVybiBteGNfZ3Bpb19pbml0KG14Y19ncGlvX3BvcnRzLCA0KTsKK30KKworaW50IF9faW5pdCBpbXg1M19yZWdpc3Rlcl9ncGlvcyh2b2lkKQorewogCXJldHVybiBteGNfZ3Bpb19pbml0KG14Y19ncGlvX3BvcnRzLCBBUlJBWV9TSVpFKG14Y19ncGlvX3BvcnRzKSk7CiB9CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXg1L2RldmljZXMuaCBiL2FyY2gvYXJtL21hY2gtbXg1L2RldmljZXMuaAppbmRleCBhZjFkMDdjLi4xNjg5MWFhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14NS9kZXZpY2VzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1teDUvZGV2aWNlcy5oCkBAIC0xLDYgKzEsNiBAQAogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3VzYmRyX2hvc3RfZGV2aWNlOwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3VzYmgxX2RldmljZTsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y191c2JoMl9kZXZpY2U7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfdXNiZHJfdWRjX2RldmljZTsKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y193ZHQ7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfaHNpMmNfZGV2aWNlOwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX2tleXBhZF9kZXZpY2U7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14NS9ldWtyZWFfbWJpbXg1MS1iYXNlYm9hcmQuYyBiL2FyY2gvYXJtL21hY2gtbXg1L2V1a3JlYV9tYmlteDUxLWJhc2Vib2FyZC5jCmluZGV4IGEyZTZlOGMuLmM5NmQwMTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXg1L2V1a3JlYV9tYmlteDUxLWJhc2Vib2FyZC5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXg1L2V1a3JlYV9tYmlteDUxLWJhc2Vib2FyZC5jCkBAIC0zMywxMiArMzMsMTIgQEAKICNpbmNsdWRlICJkZXZpY2VzLWlteDUxLmgiCiAjaW5jbHVkZSAiZGV2aWNlcy5oIgogCi0jZGVmaW5lIE1CSU1YNTFfVFNDMjAwN19HUElPCSgyKjMyICsgMzApCisjZGVmaW5lIE1CSU1YNTFfVFNDMjAwN19HUElPCUlNWF9HUElPX05SKDMsIDMwKQogI2RlZmluZSBNQklNWDUxX1RTQzIwMDdfSVJRCShNWENfSU5URVJOQUxfSVJRUyArIE1CSU1YNTFfVFNDMjAwN19HUElPKQotI2RlZmluZSBNQklNWDUxX0xFRDAJCSgyKjMyICsgNSkKLSNkZWZpbmUgTUJJTVg1MV9MRUQxCQkoMiozMiArIDYpCi0jZGVmaW5lIE1CSU1YNTFfTEVEMgkJKDIqMzIgKyA3KQotI2RlZmluZSBNQklNWDUxX0xFRDMJCSgyKjMyICsgOCkKKyNkZWZpbmUgTUJJTVg1MV9MRUQwCQlJTVhfR1BJT19OUigzLCA1KQorI2RlZmluZSBNQklNWDUxX0xFRDEJCUlNWF9HUElPX05SKDMsIDYpCisjZGVmaW5lIE1CSU1YNTFfTEVEMgkJSU1YX0dQSU9fTlIoMywgNykKKyNkZWZpbmUgTUJJTVg1MV9MRUQzCQlJTVhfR1BJT19OUigzLCA4KQogCiBzdGF0aWMgc3RydWN0IGdwaW9fbGVkIG1iaW14NTFfbGVkc1tdID0gewogCXsKQEAgLTg0LDcgKzg0LDcgQEAKIAkmbWJpbXg1MV9sZWRzX2dwaW8sCiB9OwogCi1zdGF0aWMgc3RydWN0IHBhZF9kZXNjIG1iaW14NTFfcGFkc1tdID0geworc3RhdGljIGlvbXV4X3YzX2NmZ190IG1iaW14NTFfcGFkc1tdID0gewogCS8qIFVBUlQyICovCiAJTVg1MV9QQURfVUFSVDJfUlhEX19VQVJUMl9SWEQsCiAJTVg1MV9QQURfVUFSVDJfVFhEX19VQVJUMl9UWEQsCkBAIC05NiwxMyArOTYsMTMgQEAKIAlNWDUxX1BBRF9LRVlfQ09MNV9fVUFSVDNfQ1RTLAogCiAJLyogVFNDMjAwNyBJUlEgKi8KLQlNWDUxX1BBRF9OQU5ERl9EMTBfX0dQSU9fM18zMCwKKwlNWDUxX1BBRF9OQU5ERl9EMTBfX0dQSU8zXzMwLAogCiAJLyogTEVEUyAqLwotCU1YNTFfUEFEX0RJU1BCMl9TRVJfRElOX19HUElPXzNfNSwKLQlNWDUxX1BBRF9ESVNQQjJfU0VSX0RJT19fR1BJT18zXzYsCi0JTVg1MV9QQURfRElTUEIyX1NFUl9DTEtfX0dQSU9fM183LAotCU1YNTFfUEFEX0RJU1BCMl9TRVJfUlNfX0dQSU9fM184LAorCU1YNTFfUEFEX0RJU1BCMl9TRVJfRElOX19HUElPM181LAorCU1YNTFfUEFEX0RJU1BCMl9TRVJfRElPX19HUElPM182LAorCU1YNTFfUEFEX0RJU1BCMl9TRVJfQ0xLX19HUElPM183LAorCU1YNTFfUEFEX0RJU1BCMl9TRVJfUlNfX0dQSU8zXzgsCiAKIAkvKiBLUFAgKi8KIAlNWDUxX1BBRF9LRVlfUk9XMF9fS0VZX1JPVzAsCkBAIC0yMTcsNiArMjE3LDYgQEAKIAlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygxLCBtYmlteDUxX2kyY19kZXZpY2VzLAogCQkJCUFSUkFZX1NJWkUobWJpbXg1MV9pMmNfZGV2aWNlcykpOwogCi0JaW14NTFfYWRkX2VzZGhjKDAsIE5VTEwpOwotCWlteDUxX2FkZF9lc2RoYygxLCBOVUxMKTsKKwlpbXg1MV9hZGRfc2RoY2lfZXNkaGNfaW14KDAsIE5VTEwpOworCWlteDUxX2FkZF9zZGhjaV9lc2RoY19pbXgoMSwgTlVMTCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14NS9ldWtyZWFfbWJpbXhzZC1iYXNlYm9hcmQuYyBiL2FyY2gvYXJtL21hY2gtbXg1L2V1a3JlYV9tYmlteHNkLWJhc2Vib2FyZC5jCmluZGV4IDJiNDhmNTEuLmMzNzJhNDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXg1L2V1a3JlYV9tYmlteHNkLWJhc2Vib2FyZC5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXg1L2V1a3JlYV9tYmlteHNkLWJhc2Vib2FyZC5jCkBAIC00NSwxNCArNDUsMTMgQEAKICNpbmNsdWRlICJkZXZpY2VzLWlteDUxLmgiCiAjaW5jbHVkZSAiZGV2aWNlcy5oIgogCi0jZGVmaW5lIE1CSU1YU0RfR1BJT18zXzMxIElPTVVYX1BBRCgweDU1NCwgMHgxNkMsIDMsIDB4MCwgMCwgXAotCQkJCU1YNTFfUEFEX0NUUkxfMSB8IFBBRF9DVExfUFVTXzIyS19VUCkKLQotc3RhdGljIHN0cnVjdCBwYWRfZGVzYyBldWtyZWFfbWJpbXhzZF9wYWRzW10gPSB7CitzdGF0aWMgaW9tdXhfdjNfY2ZnX3QgZXVrcmVhX21iaW14c2RfcGFkc1tdID0gewogCS8qIExFRCAqLwotCU1YNTFfUEFEX05BTkRGX0QxMF9fR1BJT18zXzMwLAorCU1YNTFfUEFEX05BTkRGX0QxMF9fR1BJTzNfMzAsCiAJLyogU1dJVENIICovCi0JTUJJTVhTRF9HUElPXzNfMzEsCisJX01YNTFfUEFEX05BTkRGX0Q5X19HUElPM18zMSB8IE1VWF9QQURfQ1RSTChQQURfQ1RMX1BVU18yMktfVVAgfAorCQkJUEFEX0NUTF9QS0UgfCBQQURfQ1RMX1NSRV9GQVNUIHwKKwkJCVBBRF9DVExfRFNFX0hJR0ggfCBQQURfQ1RMX1BVRSB8IFBBRF9DVExfSFlTKSwKIAkvKiBVQVJUMiAqLwogCU1YNTFfUEFEX1VBUlQyX1JYRF9fVUFSVDJfUlhELAogCU1YNTFfUEFEX1VBUlQyX1RYRF9fVUFSVDJfVFhELApAQCAtNzAsOCArNjksOCBAQAogCU1YNTFfUEFEX1NEMV9EQVRBM19fU0QxX0RBVEEzLAogfTsKIAotI2RlZmluZSBHUElPX0xFRDEJKDIgKiAzMiArIDMwKQotI2RlZmluZSBHUElPX1NXSVRDSDEJKDIgKiAzMiArIDMxKQorI2RlZmluZSBHUElPX0xFRDEJSU1YX0dQSU9fTlIoMywgMzApCisjZGVmaW5lIEdQSU9fU1dJVENIMQlJTVhfR1BJT19OUigzLCAzMSkKIAogc3RhdGljIHN0cnVjdCBncGlvX2xlZCBldWtyZWFfbWJpbXhzZF9sZWRzW10gPSB7CiAJewpAQCAtMTQ5LDcgKzE0OCw3IEBACiAJaW14NTFfYWRkX2lteF91YXJ0KDEsIE5VTEwpOwogCWlteDUxX2FkZF9pbXhfdWFydCgyLCAmdWFydF9wZGF0YSk7CiAKLQlpbXg1MV9hZGRfZXNkaGMoMCwgTlVMTCk7CisJaW14NTFfYWRkX3NkaGNpX2VzZGhjX2lteCgwLCBOVUxMKTsKIAogCWdwaW9fcmVxdWVzdChHUElPX0xFRDEsICJMRUQxIik7CiAJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fTEVEMSwgMSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14NS9tbS1teDUwLmMgYi9hcmNoL2FybS9tYWNoLW14NS9tbS1teDUwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM2NTQwZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXg1L21tLW14NTAuYwpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICoKKyAqIENyZWF0ZSBzdGF0aWMgbWFwcGluZyBiZXR3ZWVuIHBoeXNpY2FsIHRvIHZpcnR1YWwgbWVtb3J5LgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CisjaW5jbHVkZSA8bWFjaC9pb211eC12My5oPgorCisvKgorICogRGVmaW5lIHRoZSBNWDUwIG1lbW9yeSBtYXAuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgbXg1MF9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKKwlpbXhfbWFwX2VudHJ5KE1YNTAsIFRaSUMsIE1UX0RFVklDRSksCisJaW14X21hcF9lbnRyeShNWDUwLCBTUEJBMCwgTVRfREVWSUNFKSwKKwlpbXhfbWFwX2VudHJ5KE1YNTAsIEFJUFMxLCBNVF9ERVZJQ0UpLAorCWlteF9tYXBfZW50cnkoTVg1MCwgQUlQUzIsIE1UX0RFVklDRSksCit9OworCisvKgorICogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgbWVtb3J5IG1hcC4gSXQgaXMgY2FsbGVkIGR1cmluZyB0aGUKKyAqIHN5c3RlbSBzdGFydHVwIHRvIGNyZWF0ZSBzdGF0aWMgcGh5c2ljYWwgdG8gdmlydHVhbCBtZW1vcnkgbWFwcGluZ3MKKyAqIGZvciB0aGUgSU8gbW9kdWxlcy4KKyAqLwordm9pZCBfX2luaXQgbXg1MF9tYXBfaW8odm9pZCkKK3sKKwlteGNfc2V0X2NwdV90eXBlKE1YQ19DUFVfTVg1MCk7CisJbXhjX2lvbXV4X3YzX2luaXQoTVg1MF9JT19BRERSRVNTKE1YNTBfSU9NVVhDX0JBU0VfQUREUikpOworCW14Y19hcmNoX3Jlc2V0X2luaXQoTVg1MF9JT19BRERSRVNTKE1YNTBfV0RPR19CQVNFX0FERFIpKTsKKwlpb3RhYmxlX2luaXQobXg1MF9pb19kZXNjLCBBUlJBWV9TSVpFKG14NTBfaW9fZGVzYykpOworfQorCitpbnQgaW14NTBfcmVnaXN0ZXJfZ3Bpb3Modm9pZCk7CisKK3ZvaWQgX19pbml0IG14NTBfaW5pdF9pcnEodm9pZCkKK3sKKwl0emljX2luaXRfaXJxKE1YNTBfSU9fQUREUkVTUyhNWDUwX1RaSUNfQkFTRV9BRERSKSk7CisJaW14NTBfcmVnaXN0ZXJfZ3Bpb3MoKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXg1L21tLmMgYi9hcmNoL2FybS9tYWNoLW14NS9tbS5jCmluZGV4IGJjM2YzMGQuLjQ1N2Y5ZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXg1L21tLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDUvbW0uYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgMjAwOC0yMDA5IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwOC0yMDEwIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogVGhlIGNvZGUgY29udGFpbmVkIGhlcmVpbiBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtMjMsMzMgKzIzLDIxIEBACiAvKgogICogRGVmaW5lIHRoZSBNWDUxIG1lbW9yeSBtYXAuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgbXhjX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0gewotCXsKLQkJLnZpcnR1YWwgPSBNWDUxX0lSQU1fQkFTRV9BRERSX1ZJUlQsCi0JCS5wZm4gPSBfX3BoeXNfdG9fcGZuKE1YNTFfSVJBTV9CQVNFX0FERFIpLAotCQkubGVuZ3RoID0gTVg1MV9JUkFNX1NJWkUsCi0JCS50eXBlID0gTVRfREVWSUNFCi0JfSwgewotCQkudmlydHVhbCA9IE1YNTFfREVCVUdfQkFTRV9BRERSX1ZJUlQsCi0JCS5wZm4gPSBfX3BoeXNfdG9fcGZuKE1YNTFfREVCVUdfQkFTRV9BRERSKSwKLQkJLmxlbmd0aCA9IE1YNTFfREVCVUdfU0laRSwKLQkJLnR5cGUgPSBNVF9ERVZJQ0UKLQl9LCB7Ci0JCS52aXJ0dWFsID0gTVg1MV9BSVBTMV9CQVNFX0FERFJfVklSVCwKLQkJLnBmbiA9IF9fcGh5c190b19wZm4oTVg1MV9BSVBTMV9CQVNFX0FERFIpLAotCQkubGVuZ3RoID0gTVg1MV9BSVBTMV9TSVpFLAotCQkudHlwZSA9IE1UX0RFVklDRQotCX0sIHsKLQkJLnZpcnR1YWwgPSBNWDUxX1NQQkEwX0JBU0VfQUREUl9WSVJULAotCQkucGZuID0gX19waHlzX3RvX3BmbihNWDUxX1NQQkEwX0JBU0VfQUREUiksCi0JCS5sZW5ndGggPSBNWDUxX1NQQkEwX1NJWkUsCi0JCS50eXBlID0gTVRfREVWSUNFCi0JfSwgewotCQkudmlydHVhbCA9IE1YNTFfQUlQUzJfQkFTRV9BRERSX1ZJUlQsCi0JCS5wZm4gPSBfX3BoeXNfdG9fcGZuKE1YNTFfQUlQUzJfQkFTRV9BRERSKSwKLQkJLmxlbmd0aCA9IE1YNTFfQUlQUzJfU0laRSwKLQkJLnR5cGUgPSBNVF9ERVZJQ0UKLQl9LAorc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBteDUxX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0geworCWlteF9tYXBfZW50cnkoTVg1MSwgSVJBTSwgTVRfREVWSUNFKSwKKwlpbXhfbWFwX2VudHJ5KE1YNTEsIERFQlVHLCBNVF9ERVZJQ0UpLAorCWlteF9tYXBfZW50cnkoTVg1MSwgQUlQUzEsIE1UX0RFVklDRSksCisJaW14X21hcF9lbnRyeShNWDUxLCBTUEJBMCwgTVRfREVWSUNFKSwKKwlpbXhfbWFwX2VudHJ5KE1YNTEsIEFJUFMyLCBNVF9ERVZJQ0UpLAorfTsKKworLyoKKyAqIERlZmluZSB0aGUgTVg1MyBtZW1vcnkgbWFwLgorICovCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIG14NTNfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJaW14X21hcF9lbnRyeShNWDUzLCBBSVBTMSwgTVRfREVWSUNFKSwKKwlpbXhfbWFwX2VudHJ5KE1YNTMsIFNQQkEwLCBNVF9ERVZJQ0UpLAorCWlteF9tYXBfZW50cnkoTVg1MywgQUlQUzIsIE1UX0RFVklDRSksCiB9OwogCiAvKgpAQCAtNjEsOCArNDksMTYgQEAKIHsKIAlteGNfc2V0X2NwdV90eXBlKE1YQ19DUFVfTVg1MSk7CiAJbXhjX2lvbXV4X3YzX2luaXQoTVg1MV9JT19BRERSRVNTKE1YNTFfSU9NVVhDX0JBU0VfQUREUikpOwotCW14Y19hcmNoX3Jlc2V0X2luaXQoTVg1MV9JT19BRERSRVNTKE1YNTFfV0RPR19CQVNFX0FERFIpKTsKLQlpb3RhYmxlX2luaXQobXhjX2lvX2Rlc2MsIEFSUkFZX1NJWkUobXhjX2lvX2Rlc2MpKTsKKwlteGNfYXJjaF9yZXNldF9pbml0KE1YNTFfSU9fQUREUkVTUyhNWDUxX1dET0cxX0JBU0VfQUREUikpOworCWlvdGFibGVfaW5pdChteDUxX2lvX2Rlc2MsIEFSUkFZX1NJWkUobXg1MV9pb19kZXNjKSk7Cit9CisKK3ZvaWQgX19pbml0IG14NTNfbWFwX2lvKHZvaWQpCit7CisJbXhjX3NldF9jcHVfdHlwZShNWENfQ1BVX01YNTMpOworCW14Y19pb211eF92M19pbml0KE1YNTNfSU9fQUREUkVTUyhNWDUzX0lPTVVYQ19CQVNFX0FERFIpKTsKKwlteGNfYXJjaF9yZXNldF9pbml0KE1YNTNfSU9fQUREUkVTUyhNWDUzX1dET0dfQkFTRV9BRERSKSk7CisJaW90YWJsZV9pbml0KG14NTNfaW9fZGVzYywgQVJSQVlfU0laRShteDUzX2lvX2Rlc2MpKTsKIH0KIAogaW50IGlteDUxX3JlZ2lzdGVyX2dwaW9zKHZvaWQpOwpAQCAtNzIsNyArNjgsNyBAQAogCXVuc2lnbmVkIGxvbmcgdHppY19hZGRyOwogCXZvaWQgX19pb21lbSAqdHppY192aXJ0OwogCi0JaWYgKG14NTFfcmV2aXNpb24oKSA8IE1YNTFfQ0hJUF9SRVZfMl8wKQorCWlmIChteDUxX3JldmlzaW9uKCkgPCBJTVhfQ0hJUF9SRVZJU0lPTl8yXzApCiAJCXR6aWNfYWRkciA9IE1YNTFfVFpJQ19CQVNFX0FERFJfVE8xOwogCWVsc2UKIAkJdHppY19hZGRyID0gTVg1MV9UWklDX0JBU0VfQUREUjsKQEAgLTg0LDMgKzgwLDIwIEBACiAJdHppY19pbml0X2lycSh0emljX3ZpcnQpOwogCWlteDUxX3JlZ2lzdGVyX2dwaW9zKCk7CiB9CisKK2ludCBpbXg1M19yZWdpc3Rlcl9ncGlvcyh2b2lkKTsKKwordm9pZCBfX2luaXQgbXg1M19pbml0X2lycSh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgdHppY19hZGRyOworCXZvaWQgX19pb21lbSAqdHppY192aXJ0OworCisJdHppY19hZGRyID0gTVg1M19UWklDX0JBU0VfQUREUjsKKworCXR6aWNfdmlydCA9IGlvcmVtYXAodHppY19hZGRyLCBTWl8xNkspOworCWlmICghdHppY192aXJ0KQorCQlwYW5pYygidW5hYmxlIHRvIG1hcCBUWklDIGludGVycnVwdCBjb250cm9sbGVyXG4iKTsKKworCXR6aWNfaW5pdF9pcnEodHppY192aXJ0KTsKKwlpbXg1M19yZWdpc3Rlcl9ncGlvcygpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teGM5MTIzMS9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1teGM5MTIzMS9jbG9jay5jCmluZGV4IDVjODUwNzUuLjlmYWI1MDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXhjOTEyMzEvY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLW14YzkxMjMxL2Nsb2NrLmMKQEAgLTIsMTIgKzIsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9jbGtkZXYuaD4KIAogI2luY2x1ZGUgPG1hY2gvY2xvY2suaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KIAotI2luY2x1ZGUgPGFzbS9jbGtkZXYuaD4KICNpbmNsdWRlIDxhc20vYnVnLmg+CiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXhjOTEyMzEvbW0uYyBiL2FyY2gvYXJtL21hY2gtbXhjOTEyMzEvbW0uYwppbmRleCBhZWNjZmQ3NS4uNzY1MmMzMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teGM5MTIzMS9tbS5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXhjOTEyMzEvbW0uYwpAQCAtMjcsNDggKzI3LDE1IEBACiAvKgogICogVGhpcyBzdHJ1Y3R1cmUgZGVmaW5lcyB0aGUgTVhDIG1lbW9yeSBtYXAuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgbXhjX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0gewotCXsKLQkJLnZpcnR1YWwJPSBNWEM5MTIzMV9MMkNDX0JBU0VfQUREUl9WSVJULAotCQkucGZuCQk9IF9fcGh5c190b19wZm4oTVhDOTEyMzFfTDJDQ19CQVNFX0FERFIpLAotCQkubGVuZ3RoCQk9IE1YQzkxMjMxX0wyQ0NfU0laRSwKLQkJLnR5cGUJCT0gTVRfREVWSUNFLAotCX0sIHsKLQkJLnZpcnR1YWwJPSBNWEM5MTIzMV9YX01FTUNfQkFTRV9BRERSX1ZJUlQsCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbihNWEM5MTIzMV9YX01FTUNfQkFTRV9BRERSKSwKLQkJLmxlbmd0aAkJPSBNWEM5MTIzMV9YX01FTUNfU0laRSwKLQkJLnR5cGUJCT0gTVRfREVWSUNFLAotCX0sIHsKLQkJLnZpcnR1YWwJPSBNWEM5MTIzMV9ST01QX0JBU0VfQUREUl9WSVJULAotCQkucGZuCQk9IF9fcGh5c190b19wZm4oTVhDOTEyMzFfUk9NUF9CQVNFX0FERFIpLAotCQkubGVuZ3RoCQk9IE1YQzkxMjMxX1JPTVBfU0laRSwKLQkJLnR5cGUJCT0gTVRfREVWSUNFLAotCX0sIHsKLQkJLnZpcnR1YWwJPSBNWEM5MTIzMV9BVklDX0JBU0VfQUREUl9WSVJULAotCQkucGZuCQk9IF9fcGh5c190b19wZm4oTVhDOTEyMzFfQVZJQ19CQVNFX0FERFIpLAotCQkubGVuZ3RoCQk9IE1YQzkxMjMxX0FWSUNfU0laRSwKLQkJLnR5cGUJCT0gTVRfREVWSUNFLAotCX0sIHsKLQkJLnZpcnR1YWwJPSBNWEM5MTIzMV9BSVBTMV9CQVNFX0FERFJfVklSVCwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKE1YQzkxMjMxX0FJUFMxX0JBU0VfQUREUiksCi0JCS5sZW5ndGgJCT0gTVhDOTEyMzFfQUlQUzFfU0laRSwKLQkJLnR5cGUJCT0gTVRfREVWSUNFLAotCX0sIHsKLQkJLnZpcnR1YWwJPSBNWEM5MTIzMV9TUEJBMF9CQVNFX0FERFJfVklSVCwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKE1YQzkxMjMxX1NQQkEwX0JBU0VfQUREUiksCi0JCS5sZW5ndGgJCT0gTVhDOTEyMzFfU1BCQTBfU0laRSwKLQkJLnR5cGUJCT0gTVRfREVWSUNFLAotCX0sIHsKLQkJLnZpcnR1YWwJPSBNWEM5MTIzMV9TUEJBMV9CQVNFX0FERFJfVklSVCwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKE1YQzkxMjMxX1NQQkExX0JBU0VfQUREUiksCi0JCS5sZW5ndGgJCT0gTVhDOTEyMzFfU1BCQTFfU0laRSwKLQkJLnR5cGUJCT0gTVRfREVWSUNFLAotCX0sIHsKLQkJLnZpcnR1YWwJPSBNWEM5MTIzMV9BSVBTMl9CQVNFX0FERFJfVklSVCwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKE1YQzkxMjMxX0FJUFMyX0JBU0VfQUREUiksCi0JCS5sZW5ndGgJCT0gTVhDOTEyMzFfQUlQUzJfU0laRSwKLQkJLnR5cGUJCT0gTVRfREVWSUNFLAotCX0sCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIG14YzkxMjMxX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0geworCWlteF9tYXBfZW50cnkoTVhDOTEyMzEsIEwyQ0MsIE1UX0RFVklDRSksCisJaW14X21hcF9lbnRyeShNWEM5MTIzMSwgWF9NRU1DLCBNVF9ERVZJQ0UpLAorCWlteF9tYXBfZW50cnkoTVhDOTEyMzEsIFJPTVAsIE1UX0RFVklDRSksCisJaW14X21hcF9lbnRyeShNWEM5MTIzMSwgQVZJQywgTVRfREVWSUNFKSwKKwlpbXhfbWFwX2VudHJ5KE1YQzkxMjMxLCBBSVBTMSwgTVRfREVWSUNFKSwKKwlpbXhfbWFwX2VudHJ5KE1YQzkxMjMxLCBTUEJBMCwgTVRfREVWSUNFKSwKKwlpbXhfbWFwX2VudHJ5KE1YQzkxMjMxLCBTUEJBMSwgTVRfREVWSUNFKSwKKwlpbXhfbWFwX2VudHJ5KE1YQzkxMjMxLCBBSVBTMiwgTVRfREVWSUNFKSwKIH07CiAKIC8qCkBAIC04MCw3ICs0Nyw3IEBACiB7CiAJbXhjX3NldF9jcHVfdHlwZShNWENfQ1BVX01YQzkxMjMxKTsKIAotCWlvdGFibGVfaW5pdChteGNfaW9fZGVzYywgQVJSQVlfU0laRShteGNfaW9fZGVzYykpOworCWlvdGFibGVfaW5pdChteGM5MTIzMV9pb19kZXNjLCBBUlJBWV9TSVpFKG14YzkxMjMxX2lvX2Rlc2MpKTsKIH0KIAogaW50IG14YzkxMjMxX3JlZ2lzdGVyX2dwaW9zKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teHMvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtbXhzL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRhYzdiNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXhzL0tjb25maWcKQEAgLTAsMCArMSwzNCBAQAoraWYgQVJDSF9NWFMKKworc291cmNlICJhcmNoL2FybS9tYWNoLW14cy9kZXZpY2VzL0tjb25maWciCisKK2NvbmZpZyBTT0NfSU1YMjMKKwlib29sCisJc2VsZWN0IENQVV9BUk05MjZUCisKK2NvbmZpZyBTT0NfSU1YMjgKKwlib29sCisJc2VsZWN0IENQVV9BUk05MjZUCisKK2NvbW1lbnQgIk1YUyBwbGF0Zm9ybXM6IgorCitjb25maWcgTUFDSF9NWDIzRVZLCisJYm9vbCAiU3VwcG9ydCBNWDIzRVZLIFBsYXRmb3JtIgorCXNlbGVjdCBTT0NfSU1YMjMKKwlzZWxlY3QgTVhTX0hBVkVfUExBVEZPUk1fRFVBUlQKKwlkZWZhdWx0IHkKKwloZWxwCisJICBJbmNsdWRlIHN1cHBvcnQgZm9yIE1YMjNFVksgcGxhdGZvcm0uIFRoaXMgaW5jbHVkZXMgc3BlY2lmaWMKKwkgIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgYm9hcmQgYW5kIGl0cyBwZXJpcGhlcmFscy4KKworY29uZmlnIE1BQ0hfTVgyOEVWSworCWJvb2wgIlN1cHBvcnQgTVgyOEVWSyBQbGF0Zm9ybSIKKwlzZWxlY3QgU09DX0lNWDI4CisJc2VsZWN0IE1YU19IQVZFX1BMQVRGT1JNX0RVQVJUCisJc2VsZWN0IE1YU19IQVZFX1BMQVRGT1JNX0ZFQworCWRlZmF1bHQgeQorCWhlbHAKKwkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgTVgyOEVWSyBwbGF0Zm9ybS4gVGhpcyBpbmNsdWRlcyBzcGVjaWZpYworCSAgY29uZmlndXJhdGlvbnMgZm9yIHRoZSBib2FyZCBhbmQgaXRzIHBlcmlwaGVyYWxzLgorCitlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teHMvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLW14cy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWQzZjljCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teHMvTWFrZWZpbGUKQEAgLTAsMCArMSwxMCBAQAorIyBDb21tb24gc3VwcG9ydAorb2JqLXkgOj0gY2xvY2subyBkZXZpY2VzLm8gZ3Bpby5vIGljb2xsLm8gaW9tdXgubyBzeXN0ZW0ubyB0aW1lci5vCisKK29iai0kKENPTkZJR19TT0NfSU1YMjMpICs9IGNsb2NrLW14MjMubyBtbS1teDIzLm8KK29iai0kKENPTkZJR19TT0NfSU1YMjgpICs9IGNsb2NrLW14MjgubyBtbS1teDI4Lm8KKworb2JqLSQoQ09ORklHX01BQ0hfTVgyM0VWSykgKz0gbWFjaC1teDIzZXZrLm8KK29iai0kKENPTkZJR19NQUNIX01YMjhFVkspICs9IG1hY2gtbXgyOGV2ay5vCisKK29iai15ICs9IGRldmljZXMvCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14cy9NYWtlZmlsZS5ib290IGIvYXJjaC9hcm0vbWFjaC1teHMvTWFrZWZpbGUuYm9vdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjU0MWUwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teHMvTWFrZWZpbGUuYm9vdApAQCAtMCwwICsxIEBACit6cmVsYWRkci15IDo9IDB4NDAwMDgwMDAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXhzL2Nsb2NrLW14MjMuYyBiL2FyY2gvYXJtL21hY2gtbXhzL2Nsb2NrLW14MjMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjVhMTlhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teHMvY2xvY2stbXgyMy5jCkBAIC0wLDAgKzEsNTI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CisKKyNpbmNsdWRlIDxhc20vY2xrZGV2Lmg+CisjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CisKKyNpbmNsdWRlIDxtYWNoL214MjMuaD4KKyNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgorI2luY2x1ZGUgPG1hY2gvY2xvY2suaD4KKworI2luY2x1ZGUgInJlZ3MtY2xrY3RybC1teDIzLmgiCisKKyNkZWZpbmUgQ0xLQ1RSTF9CQVNFX0FERFIJTVgyM19JT19BRERSRVNTKE1YMjNfQ0xLQ1RSTF9CQVNFX0FERFIpCisjZGVmaW5lIERJR0NUUkxfQkFTRV9BRERSCU1YMjNfSU9fQUREUkVTUyhNWDIzX0RJR0NUTF9CQVNFX0FERFIpCisKKyNkZWZpbmUgUEFSRU5UX1JBVEVfU0hJRlQJOAorCitzdGF0aWMgaW50IF9yYXdfY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJdTMyIHJlZzsKKworCWlmIChjbGstPmVuYWJsZV9yZWcpIHsKKwkJcmVnID0gX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKKwkJcmVnICY9IH4oMSA8PCBjbGstPmVuYWJsZV9zaGlmdCk7CisJCV9fcmF3X3dyaXRlbChyZWcsIGNsay0+ZW5hYmxlX3JlZyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9yYXdfY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQoreworCXUzMiByZWc7CisKKwlpZiAoY2xrLT5lbmFibGVfcmVnKSB7CisJCXJlZyA9IF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7CisJCXJlZyB8PSAxIDw8IGNsay0+ZW5hYmxlX3NoaWZ0OworCQlfX3Jhd193cml0ZWwocmVnLCBjbGstPmVuYWJsZV9yZWcpOworCX0KK30KKworLyoKKyAqIHJlZl94dGFsX2NsaworICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyByZWZfeHRhbF9jbGtfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiAyNDAwMDAwMDsKK30KKworc3RhdGljIHN0cnVjdCBjbGsgcmVmX3h0YWxfY2xrID0geworCS5nZXRfcmF0ZSA9IHJlZl94dGFsX2Nsa19nZXRfcmF0ZSwKK307CisKKy8qCisgKiBwbGxfY2xrCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIHBsbF9jbGtfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiA0ODAwMDAwMDA7Cit9CisKK3N0YXRpYyBpbnQgcGxsX2Nsa19lbmFibGUoc3RydWN0IGNsayAqY2xrKQoreworCV9fcmF3X3dyaXRlbChCTV9DTEtDVFJMX1BMTENUUkwwX1BPV0VSIHwKKwkJCUJNX0NMS0NUUkxfUExMQ1RSTDBfRU5fVVNCX0NMS1MsCisJCQlDTEtDVFJMX0JBU0VfQUREUiArIEhXX0NMS0NUUkxfUExMQ1RSTDBfU0VUKTsKKworCS8qIE9ubHkgYSAxMHVzIGRlbGF5IGlzIG5lZWQuIFBMTENUUkwxIExPQ0sgYml0ZmllZCBpcyBvbmx5IGEgdGltZXIKKwkgKiBhbmQgaXMgaW5jb3JyZWN0IChleGNlc3NpdmUpLiBQZXIgZGVmaW5pdGlvbiBvZiB0aGUgUExMQ1RSTDAKKwkgKiBQT1dFUiBmaWVsZCwgd2FpdGluZyBhdCBsZWFzdCAxMHVzLgorCSAqLworCXVkZWxheSgxMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcGxsX2Nsa19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlfX3Jhd193cml0ZWwoQk1fQ0xLQ1RSTF9QTExDVFJMMF9QT1dFUiB8CisJCQlCTV9DTEtDVFJMX1BMTENUUkwwX0VOX1VTQl9DTEtTLAorCQkJQ0xLQ1RSTF9CQVNFX0FERFIgKyBIV19DTEtDVFJMX1BMTENUUkwwX0NMUik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHBsbF9jbGsgPSB7CisJIC5nZXRfcmF0ZSA9IHBsbF9jbGtfZ2V0X3JhdGUsCisJIC5lbmFibGUgPSBwbGxfY2xrX2VuYWJsZSwKKwkgLmRpc2FibGUgPSBwbGxfY2xrX2Rpc2FibGUsCisJIC5wYXJlbnQgPSAmcmVmX3h0YWxfY2xrLAorfTsKKworLyoKKyAqIHJlZl9jbGsKKyAqLworI2RlZmluZSBfQ0xLX0dFVF9SQVRFX1JFRihuYW1lLCBzciwgc3MpCQkJCQlcCitzdGF0aWMgdW5zaWduZWQgbG9uZyBuYW1lIyNfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQkJCVwKK3sJCQkJCQkJCQlcCisJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZTsJCQkJCVwKKwl1MzIgcmVnLCBkaXY7CQkJCQkJCVwKKwkJCQkJCQkJCVwKKwlyZWcgPSBfX3Jhd19yZWFkbChDTEtDVFJMX0JBU0VfQUREUiArIEhXX0NMS0NUUkxfIyNzcik7CQlcCisJZGl2ID0gKHJlZyA+PiBCUF9DTEtDVFJMXyMjc3IjI18jI3NzIyNGUkFDKSAmIDB4M2Y7CQlcCisJcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOwkJCVwKKwkJCQkJCQkJCVwKKwlyZXR1cm4gU0hfRElWKChwYXJlbnRfcmF0ZSA+PiBQQVJFTlRfUkFURV9TSElGVCkgKiAxOCwJCVwKKwkJCWRpdiwgUEFSRU5UX1JBVEVfU0hJRlQpOwkJCVwKK30KKworX0NMS19HRVRfUkFURV9SRUYocmVmX2NwdV9jbGssIEZSQUMsIENQVSkKK19DTEtfR0VUX1JBVEVfUkVGKHJlZl9lbWlfY2xrLCBGUkFDLCBFTUkpCitfQ0xLX0dFVF9SQVRFX1JFRihyZWZfcGl4X2NsaywgRlJBQywgUElYKQorX0NMS19HRVRfUkFURV9SRUYocmVmX2lvX2NsaywgRlJBQywgSU8pCisKKyNkZWZpbmUgX0RFRklORV9DTE9DS19SRUYobmFtZSwgZXIsIGVzKQkJCQkJXAorCXN0YXRpYyBzdHJ1Y3QgY2xrIG5hbWUgPSB7CQkJCQlcCisJCS5lbmFibGVfcmVnCT0gQ0xLQ1RSTF9CQVNFX0FERFIgKyBIV19DTEtDVFJMXyMjZXIsCVwKKwkJLmVuYWJsZV9zaGlmdAk9IEJQX0NMS0NUUkxfIyNlciMjX0NMS0dBVEUjI2VzLAlcCisJCS5nZXRfcmF0ZQk9IG5hbWUjI19nZXRfcmF0ZSwJCQlcCisJCS5lbmFibGUJCT0gX3Jhd19jbGtfZW5hYmxlLAkJCVwKKwkJLmRpc2FibGUJPSBfcmF3X2Nsa19kaXNhYmxlLAkJCVwKKwkJLnBhcmVudAkJPSAmcGxsX2NsaywJCQkJXAorCX0KKworX0RFRklORV9DTE9DS19SRUYocmVmX2NwdV9jbGssIEZSQUMsIENQVSk7CitfREVGSU5FX0NMT0NLX1JFRihyZWZfZW1pX2NsaywgRlJBQywgRU1JKTsKK19ERUZJTkVfQ0xPQ0tfUkVGKHJlZl9waXhfY2xrLCBGUkFDLCBQSVgpOworX0RFRklORV9DTE9DS19SRUYocmVmX2lvX2NsaywgRlJBQywgSU8pOworCisvKgorICogR2VuZXJhbCBjbG9ja3MKKyAqCisgKiBjbGtfZ2V0X3JhdGUKKyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgcnRjX2Nsa19nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCit7CisJLyogcmVmX3h0YWxfY2xrIGlzIGltcGxlbWVudGVkIGFzIHRoZSBvbmx5IHBhcmVudCAqLworCXJldHVybiBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpIC8gNzY4OworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBjbGszMmtfY2xrX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gY2xrLT5wYXJlbnQtPmdldF9yYXRlKGNsay0+cGFyZW50KSAvIDc1MDsKK30KKworI2RlZmluZSBfQ0xLX0dFVF9SQVRFKG5hbWUsIHJzKQkJCQkJCVwKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG5hbWUjI19nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCQkJXAorewkJCQkJCQkJCVwKKwl1MzIgcmVnLCBkaXY7CQkJCQkJCVwKKwkJCQkJCQkJCVwKKwlyZWcgPSBfX3Jhd19yZWFkbChDTEtDVFJMX0JBU0VfQUREUiArIEhXX0NMS0NUUkxfIyNycyk7CQlcCisJCQkJCQkJCQlcCisJaWYgKGNsay0+cGFyZW50ID09ICZyZWZfeHRhbF9jbGspCQkJCVwKKwkJZGl2ID0gKHJlZyAmIEJNX0NMS0NUUkxfIyNycyMjX0RJVl9YVEFMKSA+PgkJXAorCQkJQlBfQ0xLQ1RSTF8jI3JzIyNfRElWX1hUQUw7CQkJXAorCWVsc2UJCQkJCQkJCVwKKwkJZGl2ID0gKHJlZyAmIEJNX0NMS0NUUkxfIyNycyMjX0RJVl8jI3JzKSA+PgkJXAorCQkJQlBfQ0xLQ1RSTF8jI3JzIyNfRElWXyMjcnM7CQkJXAorCQkJCQkJCQkJXAorCWlmICghZGl2KQkJCQkJCQlcCisJCXJldHVybiAtRUlOVkFMOwkJCQkJCVwKKwkJCQkJCQkJCVwKKwlyZXR1cm4gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KSAvIGRpdjsJCQkJXAorfQorCitfQ0xLX0dFVF9SQVRFKGNwdV9jbGssIENQVSkKK19DTEtfR0VUX1JBVEUoZW1pX2NsaywgRU1JKQorCisjZGVmaW5lIF9DTEtfR0VUX1JBVEUxKG5hbWUsIHJzKQkJCQkJXAorc3RhdGljIHVuc2lnbmVkIGxvbmcgbmFtZSMjX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykJCQlcCit7CQkJCQkJCQkJXAorCXUzMiByZWcsIGRpdjsJCQkJCQkJXAorCQkJCQkJCQkJXAorCXJlZyA9IF9fcmF3X3JlYWRsKENMS0NUUkxfQkFTRV9BRERSICsgSFdfQ0xLQ1RSTF8jI3JzKTsJCVwKKwlkaXYgPSAocmVnICYgQk1fQ0xLQ1RSTF8jI3JzIyNfRElWKSA+PiBCUF9DTEtDVFJMXyMjcnMjI19ESVY7CVwKKwkJCQkJCQkJCVwKKwlpZiAoIWRpdikJCQkJCQkJXAorCQlyZXR1cm4gLUVJTlZBTDsJCQkJCQlcCisJCQkJCQkJCQlcCisJcmV0dXJuIGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCkgLyBkaXY7CQkJCVwKK30KKworX0NMS19HRVRfUkFURTEoaGJ1c19jbGssIEhCVVMpCitfQ0xLX0dFVF9SQVRFMSh4YnVzX2NsaywgWEJVUykKK19DTEtfR0VUX1JBVEUxKHNzcF9jbGssIFNTUCkKK19DTEtfR0VUX1JBVEUxKGdwbWlfY2xrLCBHUE1JKQorX0NMS19HRVRfUkFURTEobGNkaWZfY2xrLCBQSVgpCisKKyNkZWZpbmUgX0NMS19HRVRfUkFURV9TVFVCKG5hbWUpCQkJCQlcCitzdGF0aWMgdW5zaWduZWQgbG9uZyBuYW1lIyNfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQkJCVwKK3sJCQkJCQkJCQlcCisJcmV0dXJuIGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CQkJCVwKK30KKworX0NMS19HRVRfUkFURV9TVFVCKHVhcnRfY2xrKQorX0NMS19HRVRfUkFURV9TVFVCKGF1ZGlvX2NsaykKK19DTEtfR0VUX1JBVEVfU1RVQihwd21fY2xrKQorCisvKgorICogY2xrX3NldF9yYXRlCisgKi8KK3N0YXRpYyBpbnQgY3B1X2Nsa19zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwl1MzIgcmVnLCBibV9idXN5LCBkaXZfbWF4LCBkLCBmLCBkaXYsIGZyYWM7CisJdW5zaWduZWQgbG9uZyBkaWZmLCBwYXJlbnRfcmF0ZSwgY2FsY19yYXRlOworCWludCBpOworCisJcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCisJaWYgKGNsay0+cGFyZW50ID09ICZyZWZfeHRhbF9jbGspIHsKKwkJZGl2X21heCA9IEJNX0NMS0NUUkxfQ1BVX0RJVl9YVEFMID4+IEJQX0NMS0NUUkxfQ1BVX0RJVl9YVEFMOworCQlibV9idXN5ID0gQk1fQ0xLQ1RSTF9DUFVfQlVTWV9SRUZfWFRBTDsKKwkJZGl2ID0gRElWX1JPVU5EX1VQKHBhcmVudF9yYXRlLCByYXRlKTsKKwkJaWYgKGRpdiA9PSAwIHx8IGRpdiA+IGRpdl9tYXgpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9IGVsc2UgeworCQlkaXZfbWF4ID0gQk1fQ0xLQ1RSTF9DUFVfRElWX0NQVSA+PiBCUF9DTEtDVFJMX0NQVV9ESVZfQ1BVOworCQlibV9idXN5ID0gQk1fQ0xLQ1RSTF9DUFVfQlVTWV9SRUZfQ1BVOworCQlyYXRlID4+PSBQQVJFTlRfUkFURV9TSElGVDsKKwkJcGFyZW50X3JhdGUgPj49IFBBUkVOVF9SQVRFX1NISUZUOworCQlkaWZmID0gcGFyZW50X3JhdGU7CisJCWRpdiA9IGZyYWMgPSAxOworCQlmb3IgKGQgPSAxOyBkIDw9IGRpdl9tYXg7IGQrKykgeworCQkJZiA9IHBhcmVudF9yYXRlICogMTggLyBkIC8gcmF0ZTsKKwkJCWlmICgocGFyZW50X3JhdGUgKiAxOCAvIGQpICUgcmF0ZSkKKwkJCQlmKys7CisJCQlpZiAoZiA8IDE4IHx8IGYgPiAzNSkKKwkJCQljb250aW51ZTsKKworCQkJY2FsY19yYXRlID0gcGFyZW50X3JhdGUgKiAxOCAvIGYgLyBkOworCQkJaWYgKGNhbGNfcmF0ZSA+IHJhdGUpCisJCQkJY29udGludWU7CisKKwkJCWlmIChyYXRlIC0gY2FsY19yYXRlIDwgZGlmZikgeworCQkJCWZyYWMgPSBmOworCQkJCWRpdiA9IGQ7CisJCQkJZGlmZiA9IHJhdGUgLSBjYWxjX3JhdGU7CisJCQl9CisKKwkJCWlmIChkaWZmID09IDApCisJCQkJYnJlYWs7CisJCX0KKworCQlpZiAoZGlmZiA9PSBwYXJlbnRfcmF0ZSkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCXJlZyA9IF9fcmF3X3JlYWRsKENMS0NUUkxfQkFTRV9BRERSICsgSFdfQ0xLQ1RSTF9GUkFDKTsKKwkJcmVnICY9IH5CTV9DTEtDVFJMX0ZSQUNfQ1BVRlJBQzsKKwkJcmVnIHw9IGZyYWM7CisJCV9fcmF3X3dyaXRlbChyZWcsIENMS0NUUkxfQkFTRV9BRERSICsgSFdfQ0xLQ1RSTF9GUkFDKTsKKwl9CisKKwlyZWcgPSBfX3Jhd19yZWFkbChDTEtDVFJMX0JBU0VfQUREUiArIEhXX0NMS0NUUkxfQ1BVKTsKKwlyZWcgJj0gfkJNX0NMS0NUUkxfQ1BVX0RJVl9DUFU7CisJcmVnIHw9IGRpdiA8PCBCUF9DTEtDVFJMX0NQVV9ESVZfQ1BVOworCV9fcmF3X3dyaXRlbChyZWcsIENMS0NUUkxfQkFTRV9BRERSICsgSFdfQ0xLQ1RSTF9DUFUpOworCisJZm9yIChpID0gMTAwMDA7IGk7IGktLSkKKwkJaWYgKCEoX19yYXdfcmVhZGwoQ0xLQ1RSTF9CQVNFX0FERFIgKworCQkJCQlIV19DTEtDVFJMX0NQVSkgJiBibV9idXN5KSkKKwkJCWJyZWFrOworCWlmICghaSkJeworCQlwcl9lcnIoIiVzOiBkaXZpZGVyIHdyaXRpbmcgdGltZW91dFxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBfQ0xLX1NFVF9SQVRFKG5hbWUsIGRyKQkJCQkJCVwKK3N0YXRpYyBpbnQgbmFtZSMjX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQkJXAorewkJCQkJCQkJCVwKKwl1MzIgcmVnLCBkaXZfbWF4LCBkaXY7CQkJCQkJXAorCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGU7CQkJCQlcCisJaW50IGk7CQkJCQkJCQlcCisJCQkJCQkJCQlcCisJcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOwkJCVwKKwlkaXZfbWF4ID0gQk1fQ0xLQ1RSTF8jI2RyIyNfRElWID4+IEJQX0NMS0NUUkxfIyNkciMjX0RJVjsJXAorCQkJCQkJCQkJXAorCWRpdiA9IERJVl9ST1VORF9VUChwYXJlbnRfcmF0ZSwgcmF0ZSk7CQkJCVwKKwlpZiAoZGl2ID09IDAgfHwgZGl2ID4gZGl2X21heCkJCQkJCVwKKwkJcmV0dXJuIC1FSU5WQUw7CQkJCQkJXAorCQkJCQkJCQkJXAorCXJlZyA9IF9fcmF3X3JlYWRsKENMS0NUUkxfQkFTRV9BRERSICsgSFdfQ0xLQ1RSTF8jI2RyKTsJCVwKKwlyZWcgJj0gfkJNX0NMS0NUUkxfIyNkciMjX0RJVjsJCQkJCVwKKwlyZWcgfD0gZGl2IDw8IEJQX0NMS0NUUkxfIyNkciMjX0RJVjsJCQkJXAorCWlmIChyZWcgfCAoMSA8PCBjbGstPmVuYWJsZV9zaGlmdCkpIHsJCQkJXAorCQlwcl9lcnIoIiVzOiBjbG9jayBpcyBnYXRlZFxuIiwgX19mdW5jX18pOwkJXAorCQlyZXR1cm4gLUVJTlZBTDsJCQkJCQlcCisJfQkJCQkJCQkJXAorCV9fcmF3X3dyaXRlbChyZWcsIENMS0NUUkxfQkFTRV9BRERSICsgSFdfQ0xLQ1RSTF8jI2RyKTsJCVwKKwkJCQkJCQkJCVwKKwlmb3IgKGkgPSAxMDAwMDsgaTsgaS0tKQkJCQkJCVwKKwkJaWYgKCEoX19yYXdfcmVhZGwoQ0xLQ1RSTF9CQVNFX0FERFIgKwkJCVwKKwkJCUhXX0NMS0NUUkxfIyNkcikgJiBCTV9DTEtDVFJMXyMjZHIjI19CVVNZKSkJXAorCQkJYnJlYWs7CQkJCQkJXAorCWlmICghaSkJewkJCQkJCQlcCisJCXByX2VycigiJXM6IGRpdmlkZXIgd3JpdGluZyB0aW1lb3V0XG4iLCBfX2Z1bmNfXyk7CVwKKwkJcmV0dXJuIC1FVElNRURPVVQ7CQkJCQlcCisJfQkJCQkJCQkJXAorCQkJCQkJCQkJXAorCXJldHVybiAwOwkJCQkJCQlcCit9CisKK19DTEtfU0VUX1JBVEUoeGJ1c19jbGssIFhCVVMpCitfQ0xLX1NFVF9SQVRFKHNzcF9jbGssIFNTUCkKK19DTEtfU0VUX1JBVEUoZ3BtaV9jbGssIEdQTUkpCitfQ0xLX1NFVF9SQVRFKGxjZGlmX2NsaywgUElYKQorCisjZGVmaW5lIF9DTEtfU0VUX1JBVEVfU1RVQihuYW1lKQkJCQkJXAorc3RhdGljIGludCBuYW1lIyNfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCQlcCit7CQkJCQkJCQkJXAorCXJldHVybiAtRUlOVkFMOwkJCQkJCQlcCit9CisKK19DTEtfU0VUX1JBVEVfU1RVQihlbWlfY2xrKQorX0NMS19TRVRfUkFURV9TVFVCKHVhcnRfY2xrKQorX0NMS19TRVRfUkFURV9TVFVCKGF1ZGlvX2NsaykKK19DTEtfU0VUX1JBVEVfU1RVQihwd21fY2xrKQorX0NMS19TRVRfUkFURV9TVFVCKGNsazMya19jbGspCisKKy8qCisgKiBjbGtfc2V0X3BhcmVudAorICovCisjZGVmaW5lIF9DTEtfU0VUX1BBUkVOVChuYW1lLCBiaXQpCQkJCQlcCitzdGF0aWMgaW50IG5hbWUjI19zZXRfcGFyZW50KHN0cnVjdCBjbGsgKmNsaywgc3RydWN0IGNsayAqcGFyZW50KQlcCit7CQkJCQkJCQkJXAorCWlmIChwYXJlbnQgIT0gY2xrLT5wYXJlbnQpIHsJCQkJCVwKKwkJX19yYXdfd3JpdGVsKEJNX0NMS0NUUkxfQ0xLU0VRX0JZUEFTU18jI2JpdCwJCVwKKwkJCSBIV19DTEtDVFJMX0NMS1NFUV9UT0cpOwkJCVwKKwkJY2xrLT5wYXJlbnQgPSBwYXJlbnQ7CQkJCQlcCisJfQkJCQkJCQkJXAorCQkJCQkJCQkJXAorCXJldHVybiAwOwkJCQkJCQlcCit9CisKK19DTEtfU0VUX1BBUkVOVChjcHVfY2xrLCBDUFUpCitfQ0xLX1NFVF9QQVJFTlQoZW1pX2NsaywgRU1JKQorX0NMS19TRVRfUEFSRU5UKHNzcF9jbGssIFNTUCkKK19DTEtfU0VUX1BBUkVOVChncG1pX2NsaywgR1BNSSkKK19DTEtfU0VUX1BBUkVOVChsY2RpZl9jbGssIFBJWCkKKworI2RlZmluZSBfQ0xLX1NFVF9QQVJFTlRfU1RVQihuYW1lKQkJCQkJXAorc3RhdGljIGludCBuYW1lIyNfc2V0X3BhcmVudChzdHJ1Y3QgY2xrICpjbGssIHN0cnVjdCBjbGsgKnBhcmVudCkJXAorewkJCQkJCQkJCVwKKwlpZiAocGFyZW50ICE9IGNsay0+cGFyZW50KQkJCQkJXAorCQlyZXR1cm4gLUVJTlZBTDsJCQkJCQlcCisJZWxzZQkJCQkJCQkJXAorCQlyZXR1cm4gMDsJCQkJCQlcCit9CisKK19DTEtfU0VUX1BBUkVOVF9TVFVCKHVhcnRfY2xrKQorX0NMS19TRVRfUEFSRU5UX1NUVUIoYXVkaW9fY2xrKQorX0NMS19TRVRfUEFSRU5UX1NUVUIocHdtX2NsaykKK19DTEtfU0VUX1BBUkVOVF9TVFVCKGNsazMya19jbGspCisKKy8qCisgKiBjbGsgZGVmaW5pdGlvbgorICovCitzdGF0aWMgc3RydWN0IGNsayBjcHVfY2xrID0geworCS5nZXRfcmF0ZSA9IGNwdV9jbGtfZ2V0X3JhdGUsCisJLnNldF9yYXRlID0gY3B1X2Nsa19zZXRfcmF0ZSwKKwkuc2V0X3BhcmVudCA9IGNwdV9jbGtfc2V0X3BhcmVudCwKKwkucGFyZW50ID0gJnJlZl9jcHVfY2xrLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgaGJ1c19jbGsgPSB7CisJLmdldF9yYXRlID0gaGJ1c19jbGtfZ2V0X3JhdGUsCisJLnBhcmVudCA9ICZjcHVfY2xrLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgeGJ1c19jbGsgPSB7CisJLmdldF9yYXRlID0geGJ1c19jbGtfZ2V0X3JhdGUsCisJLnNldF9yYXRlID0geGJ1c19jbGtfc2V0X3JhdGUsCisJLnBhcmVudCA9ICZyZWZfeHRhbF9jbGssCit9OworCitzdGF0aWMgc3RydWN0IGNsayBydGNfY2xrID0geworCS5nZXRfcmF0ZSA9IHJ0Y19jbGtfZ2V0X3JhdGUsCisJLnBhcmVudCA9ICZyZWZfeHRhbF9jbGssCit9OworCisvKiB1c2JfY2xrIGdhdGUgaXMgY29udHJvbGxlZCBpbiBESUdDVFJMIG90aGVyIHRoYW4gQ0xLQ1RSTCAqLworc3RhdGljIHN0cnVjdCBjbGsgdXNiX2NsayA9IHsKKwkuZW5hYmxlX3JlZyA9IERJR0NUUkxfQkFTRV9BRERSLAorCS5lbmFibGVfc2hpZnQgPSAyLAorCS5lbmFibGUgPSBfcmF3X2Nsa19lbmFibGUsCisJLmRpc2FibGUgPSBfcmF3X2Nsa19kaXNhYmxlLAorCS5wYXJlbnQgPSAmcGxsX2NsaywKK307CisKKyNkZWZpbmUgX0RFRklORV9DTE9DSyhuYW1lLCBlciwgZXMsIHApCQkJCQlcCisJc3RhdGljIHN0cnVjdCBjbGsgbmFtZSA9IHsJCQkJCVwKKwkJLmVuYWJsZV9yZWcJPSBDTEtDVFJMX0JBU0VfQUREUiArIEhXX0NMS0NUUkxfIyNlciwJXAorCQkuZW5hYmxlX3NoaWZ0CT0gQlBfQ0xLQ1RSTF8jI2VyIyNfIyNlcywJCVwKKwkJLmdldF9yYXRlCT0gbmFtZSMjX2dldF9yYXRlLAkJCVwKKwkJLnNldF9yYXRlCT0gbmFtZSMjX3NldF9yYXRlLAkJCVwKKwkJLnNldF9wYXJlbnQJPSBuYW1lIyNfc2V0X3BhcmVudCwJCQlcCisJCS5lbmFibGUJCT0gX3Jhd19jbGtfZW5hYmxlLAkJCVwKKwkJLmRpc2FibGUJPSBfcmF3X2Nsa19kaXNhYmxlLAkJCVwKKwkJLnBhcmVudAkJPSBwLAkJCQkJXAorCX0KKworX0RFRklORV9DTE9DSyhlbWlfY2xrLCBFTUksIENMS0dBVEUsICZyZWZfeHRhbF9jbGspOworX0RFRklORV9DTE9DSyhzc3BfY2xrLCBTU1AsIENMS0dBVEUsICZyZWZfeHRhbF9jbGspOworX0RFRklORV9DTE9DSyhncG1pX2NsaywgR1BNSSwgQ0xLR0FURSwgJnJlZl94dGFsX2Nsayk7CitfREVGSU5FX0NMT0NLKGxjZGlmX2NsaywgUElYLCBDTEtHQVRFLCAmcmVmX3h0YWxfY2xrKTsKK19ERUZJTkVfQ0xPQ0sodWFydF9jbGssIFhUQUwsIFVBUlRfQ0xLX0dBVEUsICZyZWZfeHRhbF9jbGspOworX0RFRklORV9DTE9DSyhhdWRpb19jbGssIFhUQUwsIEZJTFRfQ0xLMjRNX0dBVEUsICZyZWZfeHRhbF9jbGspOworX0RFRklORV9DTE9DSyhwd21fY2xrLCBYVEFMLCBQV01fQ0xLMjRNX0dBVEUsICZyZWZfeHRhbF9jbGspOworX0RFRklORV9DTE9DSyhjbGszMmtfY2xrLCBYVEFMLCBUSU1ST1RfQ0xLMzJLX0dBVEUsICZyZWZfeHRhbF9jbGspOworCisjZGVmaW5lIF9SRUdJU1RFUl9DTE9DSyhkLCBuLCBjKSBcCisJeyBcCisJCS5kZXZfaWQgPSBkLCBcCisJCS5jb25faWQgPSBuLCBcCisJCS5jbGsgPSAmYywgXAorCX0sCisKK3N0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCBsb29rdXBzW10gPSB7CisJX1JFR0lTVEVSX0NMT0NLKCJteHMtZHVhcnQuMCIsIE5VTEwsIHVhcnRfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygicnRjIiwgTlVMTCwgcnRjX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImhjbGsiLCBoYnVzX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInhjbGsiLCB4YnVzX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInVzYiIsIHVzYl9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJhdWRpbyIsIGF1ZGlvX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInB3bSIsIHB3bV9jbGspCit9OworCitzdGF0aWMgaW50IGNsa19taXNjX2luaXQodm9pZCkKK3sKKwl1MzIgcmVnOworCWludCBpOworCisJLyogRml4IHVwIHBhcmVudCBwZXIgcmVnaXN0ZXIgc2V0dGluZyAqLworCXJlZyA9IF9fcmF3X3JlYWRsKENMS0NUUkxfQkFTRV9BRERSICsgSFdfQ0xLQ1RSTF9DTEtTRVEpOworCWNwdV9jbGsucGFyZW50ID0gKHJlZyAmIEJNX0NMS0NUUkxfQ0xLU0VRX0JZUEFTU19DUFUpID8KKwkJCSZyZWZfeHRhbF9jbGsgOiAmcmVmX2NwdV9jbGs7CisJZW1pX2Nsay5wYXJlbnQgPSAocmVnICYgQk1fQ0xLQ1RSTF9DTEtTRVFfQllQQVNTX0VNSSkgPworCQkJJnJlZl94dGFsX2NsayA6ICZyZWZfZW1pX2NsazsKKwlzc3BfY2xrLnBhcmVudCA9IChyZWcgJiBCTV9DTEtDVFJMX0NMS1NFUV9CWVBBU1NfU1NQKSA/CisJCQkmcmVmX3h0YWxfY2xrIDogJnJlZl9pb19jbGs7CisJZ3BtaV9jbGsucGFyZW50ID0gKHJlZyAmIEJNX0NMS0NUUkxfQ0xLU0VRX0JZUEFTU19HUE1JKSA/CisJCQkmcmVmX3h0YWxfY2xrIDogJnJlZl9pb19jbGs7CisJbGNkaWZfY2xrLnBhcmVudCA9IChyZWcgJiBCTV9DTEtDVFJMX0NMS1NFUV9CWVBBU1NfUElYKSA/CisJCQkmcmVmX3h0YWxfY2xrIDogJnJlZl9waXhfY2xrOworCisJLyogVXNlIGludCBkaXYgb3ZlciBmcmFjIHdoZW4gYm90aCBhcmUgYXZhaWxhYmxlICovCisJX19yYXdfd3JpdGVsKEJNX0NMS0NUUkxfQ1BVX0RJVl9YVEFMX0ZSQUNfRU4sCisJCQlDTEtDVFJMX0JBU0VfQUREUiArIEhXX0NMS0NUUkxfQ1BVX0NMUik7CisJX19yYXdfd3JpdGVsKEJNX0NMS0NUUkxfQ1BVX0RJVl9DUFVfRlJBQ19FTiwKKwkJCUNMS0NUUkxfQkFTRV9BRERSICsgSFdfQ0xLQ1RSTF9DUFVfQ0xSKTsKKwlfX3Jhd193cml0ZWwoQk1fQ0xLQ1RSTF9IQlVTX0RJVl9GUkFDX0VOLAorCQkJQ0xLQ1RSTF9CQVNFX0FERFIgKyBIV19DTEtDVFJMX0hCVVNfQ0xSKTsKKworCXJlZyA9IF9fcmF3X3JlYWRsKENMS0NUUkxfQkFTRV9BRERSICsgSFdfQ0xLQ1RSTF9YQlVTKTsKKwlyZWcgJj0gfkJNX0NMS0NUUkxfWEJVU19ESVZfRlJBQ19FTjsKKwlfX3Jhd193cml0ZWwocmVnLCBDTEtDVFJMX0JBU0VfQUREUiArIEhXX0NMS0NUUkxfWEJVUyk7CisKKwlyZWcgPSBfX3Jhd19yZWFkbChDTEtDVFJMX0JBU0VfQUREUiArIEhXX0NMS0NUUkxfU1NQKTsKKwlyZWcgJj0gfkJNX0NMS0NUUkxfU1NQX0RJVl9GUkFDX0VOOworCV9fcmF3X3dyaXRlbChyZWcsIENMS0NUUkxfQkFTRV9BRERSICsgSFdfQ0xLQ1RSTF9TU1ApOworCisJcmVnID0gX19yYXdfcmVhZGwoQ0xLQ1RSTF9CQVNFX0FERFIgKyBIV19DTEtDVFJMX0dQTUkpOworCXJlZyAmPSB+Qk1fQ0xLQ1RSTF9HUE1JX0RJVl9GUkFDX0VOOworCV9fcmF3X3dyaXRlbChyZWcsIENMS0NUUkxfQkFTRV9BRERSICsgSFdfQ0xLQ1RSTF9HUE1JKTsKKworCXJlZyA9IF9fcmF3X3JlYWRsKENMS0NUUkxfQkFTRV9BRERSICsgSFdfQ0xLQ1RSTF9QSVgpOworCXJlZyAmPSB+Qk1fQ0xLQ1RSTF9QSVhfRElWX0ZSQUNfRU47CisJX19yYXdfd3JpdGVsKHJlZywgQ0xLQ1RSTF9CQVNFX0FERFIgKyBIV19DTEtDVFJMX1BJWCk7CisKKwkvKgorCSAqIFNldCBzYWZlIGhidXMgY2xvY2sgZGl2aWRlci4gQSBkaXZpZGVyIG9mIDMgZW5zdXJlIHRoYXQKKwkgKiB0aGUgVmRkZCB2b2x0YWdlIHJlcXVpcmVkIGZvciB0aGUgY3B1IGNsb2NrIGlzIHN1ZmZpY2llbnRseQorCSAqIGhpZ2ggZm9yIHRoZSBoYnVzIGNsb2NrLgorCSAqLworCXJlZyA9IF9fcmF3X3JlYWRsKENMS0NUUkxfQkFTRV9BRERSICsgSFdfQ0xLQ1RSTF9IQlVTKTsKKwlyZWcgJj0gQk1fQ0xLQ1RSTF9IQlVTX0RJVjsKKwlyZWcgfD0gMyA8PCBCUF9DTEtDVFJMX0hCVVNfRElWOworCV9fcmF3X3dyaXRlbChyZWcsIENMS0NUUkxfQkFTRV9BRERSICsgSFdfQ0xLQ1RSTF9IQlVTKTsKKworCWZvciAoaSA9IDEwMDAwOyBpOyBpLS0pCisJCWlmICghKF9fcmF3X3JlYWRsKENMS0NUUkxfQkFTRV9BRERSICsKKwkJCUhXX0NMS0NUUkxfSEJVUykgJiBCTV9DTEtDVFJMX0hCVVNfQlVTWSkpCisJCQlicmVhazsKKwlpZiAoIWkpIHsKKwkJcHJfZXJyKCIlczogZGl2aWRlciB3cml0aW5nIHRpbWVvdXRcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisJfQorCisJLyogR2F0ZSBvZmYgY3B1IGNsb2NrIGluIFdGSSBmb3IgcG93ZXIgc2F2aW5nICovCisJX19yYXdfd3JpdGVsKEJNX0NMS0NUUkxfQ1BVX0lOVEVSUlVQVF9XQUlULAorCQkJQ0xLQ1RSTF9CQVNFX0FERFIgKyBIV19DTEtDVFJMX0NQVV9TRVQpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBfX2luaXQgbXgyM19jbG9ja3NfaW5pdCh2b2lkKQoreworCWNsa19taXNjX2luaXQoKTsKKworCWNsa2Rldl9hZGRfdGFibGUobG9va3VwcywgQVJSQVlfU0laRShsb29rdXBzKSk7CisKKwlteHNfdGltZXJfaW5pdCgmY2xrMzJrX2NsaywgTVgyM19JTlRfVElNRVIwKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teHMvY2xvY2stbXgyOC5jIGIvYXJjaC9hcm0vbWFjaC1teHMvY2xvY2stbXgyOC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0ZTIxMDMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW14cy9jbG9jay1teDI4LmMKQEAgLTAsMCArMSw3MzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKworI2luY2x1ZGUgPGFzbS9jbGtkZXYuaD4KKyNpbmNsdWRlIDxhc20vZGl2NjQuaD4KKworI2luY2x1ZGUgPG1hY2gvbXgyOC5oPgorI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CisjaW5jbHVkZSA8bWFjaC9jbG9jay5oPgorCisjaW5jbHVkZSAicmVncy1jbGtjdHJsLW14MjguaCIKKworI2RlZmluZSBDTEtDVFJMX0JBU0VfQUREUglNWDI4X0lPX0FERFJFU1MoTVgyOF9DTEtDVFJMX0JBU0VfQUREUikKKyNkZWZpbmUgRElHQ1RSTF9CQVNFX0FERFIJTVgyOF9JT19BRERSRVNTKE1YMjhfRElHQ1RMX0JBU0VfQUREUikKKworI2RlZmluZSBQQVJFTlRfUkFURV9TSElGVAk4CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHBsbDJfY2xrOworc3RhdGljIHN0cnVjdCBjbGsgY3B1X2NsazsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGVtaV9jbGs7CitzdGF0aWMgc3RydWN0IGNsayBzYWlmMF9jbGs7CitzdGF0aWMgc3RydWN0IGNsayBzYWlmMV9jbGs7CitzdGF0aWMgc3RydWN0IGNsayBjbGszMmtfY2xrOworCitzdGF0aWMgaW50IF9yYXdfY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJdTMyIHJlZzsKKworCWlmIChjbGstPmVuYWJsZV9yZWcpIHsKKwkJcmVnID0gX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKKwkJcmVnICY9IH4oMSA8PCBjbGstPmVuYWJsZV9zaGlmdCk7CisJCV9fcmF3X3dyaXRlbChyZWcsIGNsay0+ZW5hYmxlX3JlZyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9yYXdfY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQoreworCXUzMiByZWc7CisKKwlpZiAoY2xrLT5lbmFibGVfcmVnKSB7CisJCXJlZyA9IF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7CisJCXJlZyB8PSAxIDw8IGNsay0+ZW5hYmxlX3NoaWZ0OworCQlfX3Jhd193cml0ZWwocmVnLCBjbGstPmVuYWJsZV9yZWcpOworCX0KK30KKworLyoKKyAqIHJlZl94dGFsX2NsaworICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyByZWZfeHRhbF9jbGtfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiAyNDAwMDAwMDsKK30KKworc3RhdGljIHN0cnVjdCBjbGsgcmVmX3h0YWxfY2xrID0geworCS5nZXRfcmF0ZSA9IHJlZl94dGFsX2Nsa19nZXRfcmF0ZSwKK307CisKKy8qCisgKiBwbGxfY2xrCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIHBsbDBfY2xrX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gNDgwMDAwMDAwOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBwbGwxX2Nsa19nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIDQ4MDAwMDAwMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgcGxsMl9jbGtfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiA1MDAwMDAwMDsKK30KKworI2RlZmluZSBfQ0xLX0VOQUJMRV9QTEwobmFtZSwgciwgZykJCQkJCVwKK3N0YXRpYyBpbnQgbmFtZSMjX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCQkJCVwKK3sJCQkJCQkJCQlcCisJX19yYXdfd3JpdGVsKEJNX0NMS0NUUkxfIyNyIyNDVFJMMF9QT1dFUiwJCQlcCisJCSAgICAgQ0xLQ1RSTF9CQVNFX0FERFIgKyBIV19DTEtDVFJMXyMjciMjQ1RSTDBfU0VUKTsJXAorCXVkZWxheSgxMCk7CQkJCQkJCVwKKwkJCQkJCQkJCVwKKwlpZiAoY2xrID09ICZwbGwyX2NsaykJCQkJCQlcCisJCV9fcmF3X3dyaXRlbChCTV9DTEtDVFJMXyMjciMjQ1RSTDBfIyNnLAkJCVwKKwkJCUNMS0NUUkxfQkFTRV9BRERSICsgSFdfQ0xLQ1RSTF8jI3IjI0NUUkwwX0NMUik7CVwKKwllbHNlCQkJCQkJCQlcCisJCV9fcmF3X3dyaXRlbChCTV9DTEtDVFJMXyMjciMjQ1RSTDBfIyNnLAkJCVwKKwkJCUNMS0NUUkxfQkFTRV9BRERSICsgSFdfQ0xLQ1RSTF8jI3IjI0NUUkwwX1NFVCk7CVwKKwkJCQkJCQkJCVwKKwlyZXR1cm4gMDsJCQkJCQkJXAorfQorCitfQ0xLX0VOQUJMRV9QTEwocGxsMF9jbGssIFBMTDAsIEVOX1VTQl9DTEtTKQorX0NMS19FTkFCTEVfUExMKHBsbDFfY2xrLCBQTEwxLCBFTl9VU0JfQ0xLUykKK19DTEtfRU5BQkxFX1BMTChwbGwyX2NsaywgUExMMiwgQ0xLR0FURSkKKworI2RlZmluZSBfQ0xLX0RJU0FCTEVfUExMKG5hbWUsIHIsIGcpCQkJCQlcCitzdGF0aWMgdm9pZCBuYW1lIyNfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCQkJCVwKK3sJCQkJCQkJCQlcCisJX19yYXdfd3JpdGVsKEJNX0NMS0NUUkxfIyNyIyNDVFJMMF9QT1dFUiwJCQlcCisJCSAgICAgQ0xLQ1RSTF9CQVNFX0FERFIgKyBIV19DTEtDVFJMXyMjciMjQ1RSTDBfQ0xSKTsJXAorCQkJCQkJCQkJXAorCWlmIChjbGsgPT0gJnBsbDJfY2xrKQkJCQkJCVwKKwkJX19yYXdfd3JpdGVsKEJNX0NMS0NUUkxfIyNyIyNDVFJMMF8jI2csCQkJXAorCQkJQ0xLQ1RSTF9CQVNFX0FERFIgKyBIV19DTEtDVFJMXyMjciMjQ1RSTDBfU0VUKTsJXAorCWVsc2UJCQkJCQkJCVwKKwkJX19yYXdfd3JpdGVsKEJNX0NMS0NUUkxfIyNyIyNDVFJMMF8jI2csCQkJXAorCQkJQ0xLQ1RSTF9CQVNFX0FERFIgKyBIV19DTEtDVFJMXyMjciMjQ1RSTDBfQ0xSKTsJXAorCQkJCQkJCQkJXAorfQorCitfQ0xLX0RJU0FCTEVfUExMKHBsbDBfY2xrLCBQTEwwLCBFTl9VU0JfQ0xLUykKK19DTEtfRElTQUJMRV9QTEwocGxsMV9jbGssIFBMTDEsIEVOX1VTQl9DTEtTKQorX0NMS19ESVNBQkxFX1BMTChwbGwyX2NsaywgUExMMiwgQ0xLR0FURSkKKworI2RlZmluZSBfREVGSU5FX0NMT0NLX1BMTChuYW1lKQkJCQkJCVwKKwlzdGF0aWMgc3RydWN0IGNsayBuYW1lID0gewkJCQkJXAorCQkuZ2V0X3JhdGUJPSBuYW1lIyNfZ2V0X3JhdGUsCQkJXAorCQkuZW5hYmxlCQk9IG5hbWUjI19lbmFibGUsCQkJXAorCQkuZGlzYWJsZQk9IG5hbWUjI19kaXNhYmxlLAkJCVwKKwkJLnBhcmVudAkJPSAmcmVmX3h0YWxfY2xrLAkJCVwKKwl9CisKK19ERUZJTkVfQ0xPQ0tfUExMKHBsbDBfY2xrKTsKK19ERUZJTkVfQ0xPQ0tfUExMKHBsbDFfY2xrKTsKK19ERUZJTkVfQ0xPQ0tfUExMKHBsbDJfY2xrKTsKKworLyoKKyAqIHJlZl9jbGsKKyAqLworI2RlZmluZSBfQ0xLX0dFVF9SQVRFX1JFRihuYW1lLCBzciwgc3MpCQkJCQlcCitzdGF0aWMgdW5zaWduZWQgbG9uZyBuYW1lIyNfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQkJCVwKK3sJCQkJCQkJCQlcCisJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZTsJCQkJCVwKKwl1MzIgcmVnLCBkaXY7CQkJCQkJCVwKKwkJCQkJCQkJCVwKKwlyZWcgPSBfX3Jhd19yZWFkbChDTEtDVFJMX0JBU0VfQUREUiArIEhXX0NMS0NUUkxfIyNzcik7CQlcCisJZGl2ID0gKHJlZyA+PiBCUF9DTEtDVFJMXyMjc3IjI18jI3NzIyNGUkFDKSAmIDB4M2Y7CQlcCisJcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOwkJCVwKKwkJCQkJCQkJCVwKKwlyZXR1cm4gU0hfRElWKChwYXJlbnRfcmF0ZSA+PiBQQVJFTlRfUkFURV9TSElGVCkgKiAxOCwJCVwKKwkJCWRpdiwgUEFSRU5UX1JBVEVfU0hJRlQpOwkJCVwKK30KKworX0NMS19HRVRfUkFURV9SRUYocmVmX2NwdV9jbGssIEZSQUMwLCBDUFUpCitfQ0xLX0dFVF9SQVRFX1JFRihyZWZfZW1pX2NsaywgRlJBQzAsIEVNSSkKK19DTEtfR0VUX1JBVEVfUkVGKHJlZl9pbzBfY2xrLCBGUkFDMCwgSU8wKQorX0NMS19HRVRfUkFURV9SRUYocmVmX2lvMV9jbGssIEZSQUMwLCBJTzEpCitfQ0xLX0dFVF9SQVRFX1JFRihyZWZfcGl4X2NsaywgRlJBQzEsIFBJWCkKK19DTEtfR0VUX1JBVEVfUkVGKHJlZl9ncG1pX2NsaywgRlJBQzEsIEdQTUkpCisKKyNkZWZpbmUgX0RFRklORV9DTE9DS19SRUYobmFtZSwgZXIsIGVzKQkJCQkJXAorCXN0YXRpYyBzdHJ1Y3QgY2xrIG5hbWUgPSB7CQkJCQlcCisJCS5lbmFibGVfcmVnCT0gQ0xLQ1RSTF9CQVNFX0FERFIgKyBIV19DTEtDVFJMXyMjZXIsCVwKKwkJLmVuYWJsZV9zaGlmdAk9IEJQX0NMS0NUUkxfIyNlciMjX0NMS0dBVEUjI2VzLAlcCisJCS5nZXRfcmF0ZQk9IG5hbWUjI19nZXRfcmF0ZSwJCQlcCisJCS5lbmFibGUJCT0gX3Jhd19jbGtfZW5hYmxlLAkJCVwKKwkJLmRpc2FibGUJPSBfcmF3X2Nsa19kaXNhYmxlLAkJCVwKKwkJLnBhcmVudAkJPSAmcGxsMF9jbGssCQkJCVwKKwl9CisKK19ERUZJTkVfQ0xPQ0tfUkVGKHJlZl9jcHVfY2xrLCBGUkFDMCwgQ1BVKTsKK19ERUZJTkVfQ0xPQ0tfUkVGKHJlZl9lbWlfY2xrLCBGUkFDMCwgRU1JKTsKK19ERUZJTkVfQ0xPQ0tfUkVGKHJlZl9pbzBfY2xrLCBGUkFDMCwgSU8wKTsKK19ERUZJTkVfQ0xPQ0tfUkVGKHJlZl9pbzFfY2xrLCBGUkFDMCwgSU8xKTsKK19ERUZJTkVfQ0xPQ0tfUkVGKHJlZl9waXhfY2xrLCBGUkFDMSwgUElYKTsKK19ERUZJTkVfQ0xPQ0tfUkVGKHJlZl9ncG1pX2NsaywgRlJBQzEsIEdQTUkpOworCisvKgorICogR2VuZXJhbCBjbG9ja3MKKyAqCisgKiBjbGtfZ2V0X3JhdGUKKyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgbHJhZGNfY2xrX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KSAvIDE2OworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBydGNfY2xrX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwkvKiByZWZfeHRhbF9jbGsgaXMgaW1wbGVtZW50ZWQgYXMgdGhlIG9ubHkgcGFyZW50ICovCisJcmV0dXJuIGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCkgLyA3Njg7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNsazMya19jbGtfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiBjbGstPnBhcmVudC0+Z2V0X3JhdGUoY2xrLT5wYXJlbnQpIC8gNzUwOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzcGRpZl9jbGtfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpIC8gNDsKK30KKworI2RlZmluZSBfQ0xLX0dFVF9SQVRFKG5hbWUsIHJzKQkJCQkJCVwKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG5hbWUjI19nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCQkJXAorewkJCQkJCQkJCVwKKwl1MzIgcmVnLCBkaXY7CQkJCQkJCVwKKwkJCQkJCQkJCVwKKwlyZWcgPSBfX3Jhd19yZWFkbChDTEtDVFJMX0JBU0VfQUREUiArIEhXX0NMS0NUUkxfIyNycyk7CQlcCisJCQkJCQkJCQlcCisJaWYgKGNsay0+cGFyZW50ID09ICZyZWZfeHRhbF9jbGspCQkJCVwKKwkJZGl2ID0gKHJlZyAmIEJNX0NMS0NUUkxfIyNycyMjX0RJVl9YVEFMKSA+PgkJXAorCQkJQlBfQ0xLQ1RSTF8jI3JzIyNfRElWX1hUQUw7CQkJXAorCWVsc2UJCQkJCQkJCVwKKwkJZGl2ID0gKHJlZyAmIEJNX0NMS0NUUkxfIyNycyMjX0RJVl8jI3JzKSA+PgkJXAorCQkJQlBfQ0xLQ1RSTF8jI3JzIyNfRElWXyMjcnM7CQkJXAorCQkJCQkJCQkJXAorCWlmICghZGl2KQkJCQkJCQlcCisJCXJldHVybiAtRUlOVkFMOwkJCQkJCVwKKwkJCQkJCQkJCVwKKwlyZXR1cm4gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KSAvIGRpdjsJCQkJXAorfQorCitfQ0xLX0dFVF9SQVRFKGNwdV9jbGssIENQVSkKK19DTEtfR0VUX1JBVEUoZW1pX2NsaywgRU1JKQorCisjZGVmaW5lIF9DTEtfR0VUX1JBVEUxKG5hbWUsIHJzKQkJCQkJXAorc3RhdGljIHVuc2lnbmVkIGxvbmcgbmFtZSMjX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykJCQlcCit7CQkJCQkJCQkJXAorCXUzMiByZWcsIGRpdjsJCQkJCQkJXAorCQkJCQkJCQkJXAorCXJlZyA9IF9fcmF3X3JlYWRsKENMS0NUUkxfQkFTRV9BRERSICsgSFdfQ0xLQ1RSTF8jI3JzKTsJCVwKKwlkaXYgPSAocmVnICYgQk1fQ0xLQ1RSTF8jI3JzIyNfRElWKSA+PiBCUF9DTEtDVFJMXyMjcnMjI19ESVY7CVwKKwkJCQkJCQkJCVwKKwlpZiAoIWRpdikJCQkJCQkJXAorCQlyZXR1cm4gLUVJTlZBTDsJCQkJCQlcCisJCQkJCQkJCQlcCisJaWYgKGNsayA9PSAmc2FpZjBfY2xrIHx8IGNsayA9PSAmc2FpZjFfY2xrKQkJCVwKKwkJcmV0dXJuIGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCkgPj4gMTYgKiBkaXY7CQlcCisJZWxzZQkJCQkJCQkJXAorCQlyZXR1cm4gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KSAvIGRpdjsJCQlcCit9CisKK19DTEtfR0VUX1JBVEUxKGhidXNfY2xrLCBIQlVTKQorX0NMS19HRVRfUkFURTEoeGJ1c19jbGssIFhCVVMpCitfQ0xLX0dFVF9SQVRFMShzc3AwX2NsaywgU1NQMCkKK19DTEtfR0VUX1JBVEUxKHNzcDFfY2xrLCBTU1AxKQorX0NMS19HRVRfUkFURTEoc3NwMl9jbGssIFNTUDIpCitfQ0xLX0dFVF9SQVRFMShzc3AzX2NsaywgU1NQMykKK19DTEtfR0VUX1JBVEUxKGdwbWlfY2xrLCBHUE1JKQorX0NMS19HRVRfUkFURTEobGNkaWZfY2xrLCBESVNfTENESUYpCitfQ0xLX0dFVF9SQVRFMShzYWlmMF9jbGssIFNBSUYwKQorX0NMS19HRVRfUkFURTEoc2FpZjFfY2xrLCBTQUlGMSkKKworI2RlZmluZSBfQ0xLX0dFVF9SQVRFX1NUVUIobmFtZSkJCQkJCVwKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG5hbWUjI19nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCQkJXAorewkJCQkJCQkJCVwKKwlyZXR1cm4gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsJCQkJXAorfQorCitfQ0xLX0dFVF9SQVRFX1NUVUIodWFydF9jbGspCitfQ0xLX0dFVF9SQVRFX1NUVUIocHdtX2NsaykKK19DTEtfR0VUX1JBVEVfU1RVQihjYW4wX2NsaykKK19DTEtfR0VUX1JBVEVfU1RVQihjYW4xX2NsaykKK19DTEtfR0VUX1JBVEVfU1RVQihmZWNfY2xrKQorCisvKgorICogY2xrX3NldF9yYXRlCisgKi8KKy8qIGZvb2wgY29tcGlsZXIgKi8KKyNkZWZpbmUgQk1fQ0xLQ1RSTF9DUFVfRElWCTAKKyNkZWZpbmUgQlBfQ0xLQ1RSTF9DUFVfRElWCTAKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9DUFVfQlVTWQkwCisKKyNkZWZpbmUgX0NMS19TRVRfUkFURShuYW1lLCBkciwgZnIsIGZzKQkJCQkJXAorc3RhdGljIGludCBuYW1lIyNfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCQlcCit7CQkJCQkJCQkJXAorCXUzMiByZWcsIGJtX2J1c3ksIGRpdl9tYXgsIGQsIGYsIGRpdiwgZnJhYzsJCQlcCisJdW5zaWduZWQgbG9uZyBkaWZmLCBwYXJlbnRfcmF0ZSwgY2FsY19yYXRlOwkJCVwKKwlpbnQgaTsJCQkJCQkJCVwKKwkJCQkJCQkJCVwKKwlwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CQkJXAorCWRpdl9tYXggPSBCTV9DTEtDVFJMXyMjZHIjI19ESVYgPj4gQlBfQ0xLQ1RSTF8jI2RyIyNfRElWOwlcCisJYm1fYnVzeSA9IEJNX0NMS0NUUkxfIyNkciMjX0JVU1k7CQkJCVwKKwkJCQkJCQkJCVwKKwlpZiAoY2xrLT5wYXJlbnQgPT0gJnJlZl94dGFsX2NsaykgewkJCQlcCisJCWRpdiA9IERJVl9ST1VORF9VUChwYXJlbnRfcmF0ZSwgcmF0ZSk7CQkJXAorCQlpZiAoY2xrID09ICZjcHVfY2xrKSB7CQkJCQlcCisJCQlkaXZfbWF4ID0gQk1fQ0xLQ1RSTF9DUFVfRElWX1hUQUwgPj4JCVwKKwkJCQlCUF9DTEtDVFJMX0NQVV9ESVZfWFRBTDsJCVwKKwkJCWJtX2J1c3kgPSBCTV9DTEtDVFJMX0NQVV9CVVNZX1JFRl9YVEFMOwkJXAorCQl9CQkJCQkJCVwKKwkJaWYgKGRpdiA9PSAwIHx8IGRpdiA+IGRpdl9tYXgpCQkJCVwKKwkJCXJldHVybiAtRUlOVkFMOwkJCQkJXAorCX0gZWxzZSB7CQkJCQkJCVwKKwkJcmF0ZSA+Pj0gUEFSRU5UX1JBVEVfU0hJRlQ7CQkJCVwKKwkJcGFyZW50X3JhdGUgPj49IFBBUkVOVF9SQVRFX1NISUZUOwkJCVwKKwkJZGlmZiA9IHBhcmVudF9yYXRlOwkJCQkJXAorCQlkaXYgPSBmcmFjID0gMTsJCQkJCQlcCisJCWlmIChjbGsgPT0gJmNwdV9jbGspIHsJCQkJCVwKKwkJCWRpdl9tYXggPSBCTV9DTEtDVFJMX0NQVV9ESVZfQ1BVID4+CQlcCisJCQkJQlBfQ0xLQ1RSTF9DUFVfRElWX0NQVTsJCQlcCisJCQlibV9idXN5ID0gQk1fQ0xLQ1RSTF9DUFVfQlVTWV9SRUZfQ1BVOwkJXAorCQl9CQkJCQkJCVwKKwkJZm9yIChkID0gMTsgZCA8PSBkaXZfbWF4OyBkKyspIHsJCQlcCisJCQlmID0gcGFyZW50X3JhdGUgKiAxOCAvIGQgLyByYXRlOwkJXAorCQkJaWYgKChwYXJlbnRfcmF0ZSAqIDE4IC8gZCkgJSByYXRlKQkJXAorCQkJCWYrKzsJCQkJCVwKKwkJCWlmIChmIDwgMTggfHwgZiA+IDM1KQkJCQlcCisJCQkJY29udGludWU7CQkJCVwKKwkJCQkJCQkJCVwKKwkJCWNhbGNfcmF0ZSA9IHBhcmVudF9yYXRlICogMTggLyBmIC8gZDsJCVwKKwkJCWlmIChjYWxjX3JhdGUgPiByYXRlKQkJCQlcCisJCQkJY29udGludWU7CQkJCVwKKwkJCQkJCQkJCVwKKwkJCWlmIChyYXRlIC0gY2FsY19yYXRlIDwgZGlmZikgewkJCVwKKwkJCQlmcmFjID0gZjsJCQkJXAorCQkJCWRpdiA9IGQ7CQkJCVwKKwkJCQlkaWZmID0gcmF0ZSAtIGNhbGNfcmF0ZTsJCVwKKwkJCX0JCQkJCQlcCisJCQkJCQkJCQlcCisJCQlpZiAoZGlmZiA9PSAwKQkJCQkJXAorCQkJCWJyZWFrOwkJCQkJXAorCQl9CQkJCQkJCVwKKwkJCQkJCQkJCVwKKwkJaWYgKGRpZmYgPT0gcGFyZW50X3JhdGUpCQkJCVwKKwkJCXJldHVybiAtRUlOVkFMOwkJCQkJXAorCQkJCQkJCQkJXAorCQlyZWcgPSBfX3Jhd19yZWFkbChDTEtDVFJMX0JBU0VfQUREUiArIEhXX0NMS0NUUkxfIyNmcik7CVwKKwkJcmVnICY9IH5CTV9DTEtDVFJMXyMjZnIjI18jI2ZzIyNGUkFDOwkJCVwKKwkJcmVnIHw9IGZyYWM7CQkJCQkJXAorCQlfX3Jhd193cml0ZWwocmVnLCBDTEtDVFJMX0JBU0VfQUREUiArIEhXX0NMS0NUUkxfIyNmcik7CVwKKwl9CQkJCQkJCQlcCisJCQkJCQkJCQlcCisJcmVnID0gX19yYXdfcmVhZGwoQ0xLQ1RSTF9CQVNFX0FERFIgKyBIV19DTEtDVFJMXyMjZHIpOwkJXAorCWlmIChjbGsgPT0gJmNwdV9jbGspIHsJCQkJCQlcCisJCXJlZyAmPSB+Qk1fQ0xLQ1RSTF9DUFVfRElWX0NQVTsJCQkJXAorCQlyZWcgfD0gZGl2IDw8IEJQX0NMS0NUUkxfQ1BVX0RJVl9DUFU7CQkJXAorCX0gZWxzZSB7CQkJCQkJCVwKKwkJcmVnICY9IH5CTV9DTEtDVFJMXyMjZHIjI19ESVY7CQkJCVwKKwkJcmVnIHw9IGRpdiA8PCBCUF9DTEtDVFJMXyMjZHIjI19ESVY7CQkJXAorCQlpZiAocmVnIHwgKDEgPDwgY2xrLT5lbmFibGVfc2hpZnQpKSB7CQkJXAorCQkJcHJfZXJyKCIlczogY2xvY2sgaXMgZ2F0ZWRcbiIsIF9fZnVuY19fKTsJXAorCQkJcmV0dXJuIC1FSU5WQUw7CQkJCQlcCisJCX0JCQkJCQkJXAorCX0JCQkJCQkJCVwKKwlfX3Jhd193cml0ZWwocmVnLCBDTEtDVFJMX0JBU0VfQUREUiArIEhXX0NMS0NUUkxfQ1BVKTsJCVwKKwkJCQkJCQkJCVwKKwlmb3IgKGkgPSAxMDAwMDsgaTsgaS0tKQkJCQkJCVwKKwkJaWYgKCEoX19yYXdfcmVhZGwoQ0xLQ1RSTF9CQVNFX0FERFIgKwkJCVwKKwkJCUhXX0NMS0NUUkxfIyNkcikgJiBibV9idXN5KSkJCQlcCisJCQlicmVhazsJCQkJCQlcCisJaWYgKCFpKQl7CQkJCQkJCVwKKwkJcHJfZXJyKCIlczogZGl2aWRlciB3cml0aW5nIHRpbWVvdXRcbiIsIF9fZnVuY19fKTsJXAorCQlyZXR1cm4gLUVUSU1FRE9VVDsJCQkJCVwKKwl9CQkJCQkJCQlcCisJCQkJCQkJCQlcCisJcmV0dXJuIDA7CQkJCQkJCVwKK30KKworX0NMS19TRVRfUkFURShjcHVfY2xrLCBDUFUsIEZSQUMwLCBDUFUpCitfQ0xLX1NFVF9SQVRFKHNzcDBfY2xrLCBTU1AwLCBGUkFDMCwgSU8wKQorX0NMS19TRVRfUkFURShzc3AxX2NsaywgU1NQMSwgRlJBQzAsIElPMCkKK19DTEtfU0VUX1JBVEUoc3NwMl9jbGssIFNTUDIsIEZSQUMwLCBJTzEpCitfQ0xLX1NFVF9SQVRFKHNzcDNfY2xrLCBTU1AzLCBGUkFDMCwgSU8xKQorX0NMS19TRVRfUkFURShsY2RpZl9jbGssIERJU19MQ0RJRiwgRlJBQzEsIFBJWCkKK19DTEtfU0VUX1JBVEUoZ3BtaV9jbGssIEdQTUksIEZSQUMxLCBHUE1JKQorCisjZGVmaW5lIF9DTEtfU0VUX1JBVEUxKG5hbWUsIGRyKQkJCQkJXAorc3RhdGljIGludCBuYW1lIyNfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCQlcCit7CQkJCQkJCQkJXAorCXUzMiByZWcsIGRpdl9tYXgsIGRpdjsJCQkJCQlcCisJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZTsJCQkJCVwKKwlpbnQgaTsJCQkJCQkJCVwKKwkJCQkJCQkJCVwKKwlwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CQkJXAorCWRpdl9tYXggPSBCTV9DTEtDVFJMXyMjZHIjI19ESVYgPj4gQlBfQ0xLQ1RSTF8jI2RyIyNfRElWOwlcCisJCQkJCQkJCQlcCisJZGl2ID0gRElWX1JPVU5EX1VQKHBhcmVudF9yYXRlLCByYXRlKTsJCQkJXAorCWlmIChkaXYgPT0gMCB8fCBkaXYgPiBkaXZfbWF4KQkJCQkJXAorCQlyZXR1cm4gLUVJTlZBTDsJCQkJCQlcCisJCQkJCQkJCQlcCisJcmVnID0gX19yYXdfcmVhZGwoQ0xLQ1RSTF9CQVNFX0FERFIgKyBIV19DTEtDVFJMXyMjZHIpOwkJXAorCXJlZyAmPSB+Qk1fQ0xLQ1RSTF8jI2RyIyNfRElWOwkJCQkJXAorCXJlZyB8PSBkaXYgPDwgQlBfQ0xLQ1RSTF8jI2RyIyNfRElWOwkJCQlcCisJaWYgKHJlZyB8ICgxIDw8IGNsay0+ZW5hYmxlX3NoaWZ0KSkgewkJCQlcCisJCXByX2VycigiJXM6IGNsb2NrIGlzIGdhdGVkXG4iLCBfX2Z1bmNfXyk7CQlcCisJCXJldHVybiAtRUlOVkFMOwkJCQkJCVwKKwl9CQkJCQkJCQlcCisJX19yYXdfd3JpdGVsKHJlZywgQ0xLQ1RSTF9CQVNFX0FERFIgKyBIV19DTEtDVFJMXyMjZHIpOwkJXAorCQkJCQkJCQkJXAorCWZvciAoaSA9IDEwMDAwOyBpOyBpLS0pCQkJCQkJXAorCQlpZiAoIShfX3Jhd19yZWFkbChDTEtDVFJMX0JBU0VfQUREUiArCQkJXAorCQkJSFdfQ0xLQ1RSTF8jI2RyKSAmIEJNX0NMS0NUUkxfIyNkciMjX0JVU1kpKQlcCisJCQlicmVhazsJCQkJCQlcCisJaWYgKCFpKQl7CQkJCQkJCVwKKwkJcHJfZXJyKCIlczogZGl2aWRlciB3cml0aW5nIHRpbWVvdXRcbiIsIF9fZnVuY19fKTsJXAorCQlyZXR1cm4gLUVUSU1FRE9VVDsJCQkJCVwKKwl9CQkJCQkJCQlcCisJCQkJCQkJCQlcCisJcmV0dXJuIDA7CQkJCQkJCVwKK30KKworX0NMS19TRVRfUkFURTEoeGJ1c19jbGssIFhCVVMpCisKKy8qIHNhaWYgY2xvY2sgdXNlcyAxNiBiaXRzIGZyYWMgZGl2ICovCisjZGVmaW5lIF9DTEtfU0VUX1JBVEVfU0FJRihuYW1lLCBycykJCQkJCVwKK3N0YXRpYyBpbnQgbmFtZSMjX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQkJXAorewkJCQkJCQkJCVwKKwl1MTYgZGl2OwkJCQkJCQlcCisJdTMyIHJlZzsJCQkJCQkJXAorCXU2NCBscmF0ZTsJCQkJCQkJXAorCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGU7CQkJCQlcCisJaW50IGk7CQkJCQkJCQlcCisJCQkJCQkJCQlcCisJcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOwkJCVwKKwlpZiAocmF0ZSA+IHBhcmVudF9yYXRlKQkJCQkJCVwKKwkJcmV0dXJuIC1FSU5WQUw7CQkJCQkJXAorCQkJCQkJCQkJXAorCWxyYXRlID0gKHU2NClyYXRlIDw8IDE2OwkJCQkJXAorCWRvX2RpdihscmF0ZSwgcGFyZW50X3JhdGUpOwkJCQkJXAorCWRpdiA9ICh1MTYpbHJhdGU7CQkJCQkJXAorCQkJCQkJCQkJXAorCWlmICghZGl2KQkJCQkJCQlcCisJCXJldHVybiAtRUlOVkFMOwkJCQkJCVwKKwkJCQkJCQkJCVwKKwlyZWcgPSBfX3Jhd19yZWFkbChDTEtDVFJMX0JBU0VfQUREUiArIEhXX0NMS0NUUkxfIyNycyk7CQlcCisJcmVnICY9IH5CTV9DTEtDVFJMXyMjcnMjI19ESVY7CQkJCQlcCisJcmVnIHw9IGRpdiA8PCBCUF9DTEtDVFJMXyMjcnMjI19ESVY7CQkJCVwKKwlfX3Jhd193cml0ZWwocmVnLCBDTEtDVFJMX0JBU0VfQUREUiArIEhXX0NMS0NUUkxfIyNycyk7CQlcCisJCQkJCQkJCQlcCisJZm9yIChpID0gMTAwMDA7IGk7IGktLSkJCQkJCQlcCisJCWlmICghKF9fcmF3X3JlYWRsKENMS0NUUkxfQkFTRV9BRERSICsJCQlcCisJCQlIV19DTEtDVFJMXyMjcnMpICYgQk1fQ0xLQ1RSTF8jI3JzIyNfQlVTWSkpCVwKKwkJCWJyZWFrOwkJCQkJCVwKKwlpZiAoIWkpIHsJCQkJCQkJXAorCQlwcl9lcnIoIiVzOiBkaXZpZGVyIHdyaXRpbmcgdGltZW91dFxuIiwgX19mdW5jX18pOwlcCisJCXJldHVybiAtRVRJTUVET1VUOwkJCQkJXAorCX0JCQkJCQkJCVwKKwkJCQkJCQkJCVwKKwlyZXR1cm4gMDsJCQkJCQkJXAorfQorCitfQ0xLX1NFVF9SQVRFX1NBSUYoc2FpZjBfY2xrLCBTQUlGMCkKK19DTEtfU0VUX1JBVEVfU0FJRihzYWlmMV9jbGssIFNBSUYxKQorCisjZGVmaW5lIF9DTEtfU0VUX1JBVEVfU1RVQihuYW1lKQkJCQkJXAorc3RhdGljIGludCBuYW1lIyNfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCQlcCit7CQkJCQkJCQkJXAorCXJldHVybiAtRUlOVkFMOwkJCQkJCQlcCit9CisKK19DTEtfU0VUX1JBVEVfU1RVQihlbWlfY2xrKQorX0NMS19TRVRfUkFURV9TVFVCKHVhcnRfY2xrKQorX0NMS19TRVRfUkFURV9TVFVCKHB3bV9jbGspCitfQ0xLX1NFVF9SQVRFX1NUVUIoc3BkaWZfY2xrKQorX0NMS19TRVRfUkFURV9TVFVCKGNsazMya19jbGspCitfQ0xLX1NFVF9SQVRFX1NUVUIoY2FuMF9jbGspCitfQ0xLX1NFVF9SQVRFX1NUVUIoY2FuMV9jbGspCitfQ0xLX1NFVF9SQVRFX1NUVUIoZmVjX2NsaykKKworLyoKKyAqIGNsa19zZXRfcGFyZW50CisgKi8KKyNkZWZpbmUgX0NMS19TRVRfUEFSRU5UKG5hbWUsIGJpdCkJCQkJCVwKK3N0YXRpYyBpbnQgbmFtZSMjX3NldF9wYXJlbnQoc3RydWN0IGNsayAqY2xrLCBzdHJ1Y3QgY2xrICpwYXJlbnQpCVwKK3sJCQkJCQkJCQlcCisJaWYgKHBhcmVudCAhPSBjbGstPnBhcmVudCkgewkJCQkJXAorCQlfX3Jhd193cml0ZWwoQk1fQ0xLQ1RSTF9DTEtTRVFfQllQQVNTXyMjYml0LAkJXAorCQkJIEhXX0NMS0NUUkxfQ0xLU0VRX1RPRyk7CQkJXAorCQljbGstPnBhcmVudCA9IHBhcmVudDsJCQkJCVwKKwl9CQkJCQkJCQlcCisJCQkJCQkJCQlcCisJcmV0dXJuIDA7CQkJCQkJCVwKK30KKworX0NMS19TRVRfUEFSRU5UKGNwdV9jbGssIENQVSkKK19DTEtfU0VUX1BBUkVOVChlbWlfY2xrLCBFTUkpCitfQ0xLX1NFVF9QQVJFTlQoc3NwMF9jbGssIFNTUDApCitfQ0xLX1NFVF9QQVJFTlQoc3NwMV9jbGssIFNTUDEpCitfQ0xLX1NFVF9QQVJFTlQoc3NwMl9jbGssIFNTUDIpCitfQ0xLX1NFVF9QQVJFTlQoc3NwM19jbGssIFNTUDMpCitfQ0xLX1NFVF9QQVJFTlQobGNkaWZfY2xrLCBESVNfTENESUYpCitfQ0xLX1NFVF9QQVJFTlQoZ3BtaV9jbGssIEdQTUkpCitfQ0xLX1NFVF9QQVJFTlQoc2FpZjBfY2xrLCBTQUlGMCkKK19DTEtfU0VUX1BBUkVOVChzYWlmMV9jbGssIFNBSUYxKQorCisjZGVmaW5lIF9DTEtfU0VUX1BBUkVOVF9TVFVCKG5hbWUpCQkJCQlcCitzdGF0aWMgaW50IG5hbWUjI19zZXRfcGFyZW50KHN0cnVjdCBjbGsgKmNsaywgc3RydWN0IGNsayAqcGFyZW50KQlcCit7CQkJCQkJCQkJXAorCWlmIChwYXJlbnQgIT0gY2xrLT5wYXJlbnQpCQkJCQlcCisJCXJldHVybiAtRUlOVkFMOwkJCQkJCVwKKwllbHNlCQkJCQkJCQlcCisJCXJldHVybiAwOwkJCQkJCVwKK30KKworX0NMS19TRVRfUEFSRU5UX1NUVUIocHdtX2NsaykKK19DTEtfU0VUX1BBUkVOVF9TVFVCKHVhcnRfY2xrKQorX0NMS19TRVRfUEFSRU5UX1NUVUIoY2xrMzJrX2NsaykKK19DTEtfU0VUX1BBUkVOVF9TVFVCKHNwZGlmX2NsaykKK19DTEtfU0VUX1BBUkVOVF9TVFVCKGZlY19jbGspCitfQ0xLX1NFVF9QQVJFTlRfU1RVQihjYW4wX2NsaykKK19DTEtfU0VUX1BBUkVOVF9TVFVCKGNhbjFfY2xrKQorCisvKgorICogY2xrIGRlZmluaXRpb24KKyAqLworc3RhdGljIHN0cnVjdCBjbGsgY3B1X2NsayA9IHsKKwkuZ2V0X3JhdGUgPSBjcHVfY2xrX2dldF9yYXRlLAorCS5zZXRfcmF0ZSA9IGNwdV9jbGtfc2V0X3JhdGUsCisJLnNldF9wYXJlbnQgPSBjcHVfY2xrX3NldF9wYXJlbnQsCisJLnBhcmVudCA9ICZyZWZfY3B1X2NsaywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGhidXNfY2xrID0geworCS5nZXRfcmF0ZSA9IGhidXNfY2xrX2dldF9yYXRlLAorCS5wYXJlbnQgPSAmY3B1X2NsaywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHhidXNfY2xrID0geworCS5nZXRfcmF0ZSA9IHhidXNfY2xrX2dldF9yYXRlLAorCS5zZXRfcmF0ZSA9IHhidXNfY2xrX3NldF9yYXRlLAorCS5wYXJlbnQgPSAmcmVmX3h0YWxfY2xrLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbHJhZGNfY2xrID0geworCS5nZXRfcmF0ZSA9IGxyYWRjX2Nsa19nZXRfcmF0ZSwKKwkucGFyZW50ID0gJmNsazMya19jbGssCit9OworCitzdGF0aWMgc3RydWN0IGNsayBydGNfY2xrID0geworCS5nZXRfcmF0ZSA9IHJ0Y19jbGtfZ2V0X3JhdGUsCisJLnBhcmVudCA9ICZyZWZfeHRhbF9jbGssCit9OworCisvKiB1c2JfY2xrIGdhdGUgaXMgY29udHJvbGxlZCBpbiBESUdDVFJMIG90aGVyIHRoYW4gQ0xLQ1RSTCAqLworc3RhdGljIHN0cnVjdCBjbGsgdXNiMF9jbGsgPSB7CisJLmVuYWJsZV9yZWcgPSBESUdDVFJMX0JBU0VfQUREUiwKKwkuZW5hYmxlX3NoaWZ0ID0gMiwKKwkuZW5hYmxlID0gX3Jhd19jbGtfZW5hYmxlLAorCS5kaXNhYmxlID0gX3Jhd19jbGtfZGlzYWJsZSwKKwkucGFyZW50ID0gJnBsbDBfY2xrLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdXNiMV9jbGsgPSB7CisJLmVuYWJsZV9yZWcgPSBESUdDVFJMX0JBU0VfQUREUiwKKwkuZW5hYmxlX3NoaWZ0ID0gMTYsCisJLmVuYWJsZSA9IF9yYXdfY2xrX2VuYWJsZSwKKwkuZGlzYWJsZSA9IF9yYXdfY2xrX2Rpc2FibGUsCisJLnBhcmVudCA9ICZwbGwxX2NsaywKK307CisKKyNkZWZpbmUgX0RFRklORV9DTE9DSyhuYW1lLCBlciwgZXMsIHApCQkJCQlcCisJc3RhdGljIHN0cnVjdCBjbGsgbmFtZSA9IHsJCQkJCVwKKwkJLmVuYWJsZV9yZWcJPSBDTEtDVFJMX0JBU0VfQUREUiArIEhXX0NMS0NUUkxfIyNlciwJXAorCQkuZW5hYmxlX3NoaWZ0CT0gQlBfQ0xLQ1RSTF8jI2VyIyNfIyNlcywJCVwKKwkJLmdldF9yYXRlCT0gbmFtZSMjX2dldF9yYXRlLAkJCVwKKwkJLnNldF9yYXRlCT0gbmFtZSMjX3NldF9yYXRlLAkJCVwKKwkJLnNldF9wYXJlbnQJPSBuYW1lIyNfc2V0X3BhcmVudCwJCQlcCisJCS5lbmFibGUJCT0gX3Jhd19jbGtfZW5hYmxlLAkJCVwKKwkJLmRpc2FibGUJPSBfcmF3X2Nsa19kaXNhYmxlLAkJCVwKKwkJLnBhcmVudAkJPSBwLAkJCQkJXAorCX0KKworX0RFRklORV9DTE9DSyhlbWlfY2xrLCBFTUksIENMS0dBVEUsICZyZWZfeHRhbF9jbGspOworX0RFRklORV9DTE9DSyhzc3AwX2NsaywgU1NQMCwgQ0xLR0FURSwgJnJlZl94dGFsX2Nsayk7CitfREVGSU5FX0NMT0NLKHNzcDFfY2xrLCBTU1AxLCBDTEtHQVRFLCAmcmVmX3h0YWxfY2xrKTsKK19ERUZJTkVfQ0xPQ0soc3NwMl9jbGssIFNTUDIsIENMS0dBVEUsICZyZWZfeHRhbF9jbGspOworX0RFRklORV9DTE9DSyhzc3AzX2NsaywgU1NQMywgQ0xLR0FURSwgJnJlZl94dGFsX2Nsayk7CitfREVGSU5FX0NMT0NLKGxjZGlmX2NsaywgRElTX0xDRElGLCBDTEtHQVRFLCAmcmVmX3h0YWxfY2xrKTsKK19ERUZJTkVfQ0xPQ0soZ3BtaV9jbGssIEdQTUksIENMS0dBVEUsICZyZWZfeHRhbF9jbGspOworX0RFRklORV9DTE9DSyhzYWlmMF9jbGssIFNBSUYwLCBDTEtHQVRFLCAmcmVmX3h0YWxfY2xrKTsKK19ERUZJTkVfQ0xPQ0soc2FpZjFfY2xrLCBTQUlGMSwgQ0xLR0FURSwgJnJlZl94dGFsX2Nsayk7CitfREVGSU5FX0NMT0NLKGNhbjBfY2xrLCBGTEVYQ0FOLCBTVE9QX0NBTjAsICZyZWZfeHRhbF9jbGspOworX0RFRklORV9DTE9DSyhjYW4xX2NsaywgRkxFWENBTiwgU1RPUF9DQU4xLCAmcmVmX3h0YWxfY2xrKTsKK19ERUZJTkVfQ0xPQ0socHdtX2NsaywgWFRBTCwgUFdNX0NMSzI0TV9HQVRFLCAmcmVmX3h0YWxfY2xrKTsKK19ERUZJTkVfQ0xPQ0sodWFydF9jbGssIFhUQUwsIFVBUlRfQ0xLX0dBVEUsICZyZWZfeHRhbF9jbGspOworX0RFRklORV9DTE9DSyhjbGszMmtfY2xrLCBYVEFMLCBUSU1ST1RfQ0xLMzJLX0dBVEUsICZyZWZfeHRhbF9jbGspOworX0RFRklORV9DTE9DSyhzcGRpZl9jbGssIFNQRElGLCBDTEtHQVRFLCAmcGxsMF9jbGspOworX0RFRklORV9DTE9DSyhmZWNfY2xrLCBFTkVULCBESVNBQkxFLCAmaGJ1c19jbGspOworCisjZGVmaW5lIF9SRUdJU1RFUl9DTE9DSyhkLCBuLCBjKSBcCisJeyBcCisJCS5kZXZfaWQgPSBkLCBcCisJCS5jb25faWQgPSBuLCBcCisJCS5jbGsgPSAmYywgXAorCX0sCisKK3N0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCBsb29rdXBzW10gPSB7CisJX1JFR0lTVEVSX0NMT0NLKCJteHMtZHVhcnQuMCIsIE5VTEwsIHVhcnRfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiZmVjLjAiLCBOVUxMLCBmZWNfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygicnRjIiwgTlVMTCwgcnRjX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soInBsbDIiLCBOVUxMLCBwbGwyX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImhjbGsiLCBoYnVzX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInhjbGsiLCB4YnVzX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImNhbjAiLCBjYW4wX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImNhbjEiLCBjYW4xX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInVzYjAiLCB1c2IwX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInVzYjEiLCB1c2IxX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInB3bSIsIHB3bV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJscmFkYyIsIGxyYWRjX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInNwZGlmIiwgc3BkaWZfY2xrKQorfTsKKworc3RhdGljIGludCBjbGtfbWlzY19pbml0KHZvaWQpCit7CisJdTMyIHJlZzsKKwlpbnQgaTsKKworCS8qIEZpeCB1cCBwYXJlbnQgcGVyIHJlZ2lzdGVyIHNldHRpbmcgKi8KKwlyZWcgPSBfX3Jhd19yZWFkbChDTEtDVFJMX0JBU0VfQUREUiArIEhXX0NMS0NUUkxfQ0xLU0VRKTsKKwljcHVfY2xrLnBhcmVudCA9IChyZWcgJiBCTV9DTEtDVFJMX0NMS1NFUV9CWVBBU1NfQ1BVKSA/CisJCQkmcmVmX3h0YWxfY2xrIDogJnJlZl9jcHVfY2xrOworCWVtaV9jbGsucGFyZW50ID0gKHJlZyAmIEJNX0NMS0NUUkxfQ0xLU0VRX0JZUEFTU19FTUkpID8KKwkJCSZyZWZfeHRhbF9jbGsgOiAmcmVmX2VtaV9jbGs7CisJc3NwMF9jbGsucGFyZW50ID0gKHJlZyAmIEJNX0NMS0NUUkxfQ0xLU0VRX0JZUEFTU19TU1AwKSA/CisJCQkmcmVmX3h0YWxfY2xrIDogJnJlZl9pbzBfY2xrOworCXNzcDFfY2xrLnBhcmVudCA9IChyZWcgJiBCTV9DTEtDVFJMX0NMS1NFUV9CWVBBU1NfU1NQMSkgPworCQkJJnJlZl94dGFsX2NsayA6ICZyZWZfaW8wX2NsazsKKwlzc3AyX2Nsay5wYXJlbnQgPSAocmVnICYgQk1fQ0xLQ1RSTF9DTEtTRVFfQllQQVNTX1NTUDIpID8KKwkJCSZyZWZfeHRhbF9jbGsgOiAmcmVmX2lvMV9jbGs7CisJc3NwM19jbGsucGFyZW50ID0gKHJlZyAmIEJNX0NMS0NUUkxfQ0xLU0VRX0JZUEFTU19TU1AzKSA/CisJCQkmcmVmX3h0YWxfY2xrIDogJnJlZl9pbzFfY2xrOworCWxjZGlmX2Nsay5wYXJlbnQgPSAocmVnICYgQk1fQ0xLQ1RSTF9DTEtTRVFfQllQQVNTX0RJU19MQ0RJRikgPworCQkJJnJlZl94dGFsX2NsayA6ICZyZWZfcGl4X2NsazsKKwlncG1pX2Nsay5wYXJlbnQgPSAocmVnICYgQk1fQ0xLQ1RSTF9DTEtTRVFfQllQQVNTX0dQTUkpID8KKwkJCSZyZWZfeHRhbF9jbGsgOiAmcmVmX2dwbWlfY2xrOworCXNhaWYwX2Nsay5wYXJlbnQgPSAocmVnICYgQk1fQ0xLQ1RSTF9DTEtTRVFfQllQQVNTX1NBSUYwKSA/CisJCQkmcmVmX3h0YWxfY2xrIDogJnBsbDBfY2xrOworCXNhaWYxX2Nsay5wYXJlbnQgPSAocmVnICYgQk1fQ0xLQ1RSTF9DTEtTRVFfQllQQVNTX1NBSUYxKSA/CisJCQkmcmVmX3h0YWxfY2xrIDogJnBsbDBfY2xrOworCisJLyogVXNlIGludCBkaXYgb3ZlciBmcmFjIHdoZW4gYm90aCBhcmUgYXZhaWxhYmxlICovCisJX19yYXdfd3JpdGVsKEJNX0NMS0NUUkxfQ1BVX0RJVl9YVEFMX0ZSQUNfRU4sCisJCQlDTEtDVFJMX0JBU0VfQUREUiArIEhXX0NMS0NUUkxfQ1BVX0NMUik7CisJX19yYXdfd3JpdGVsKEJNX0NMS0NUUkxfQ1BVX0RJVl9DUFVfRlJBQ19FTiwKKwkJCUNMS0NUUkxfQkFTRV9BRERSICsgSFdfQ0xLQ1RSTF9DUFVfQ0xSKTsKKwlfX3Jhd193cml0ZWwoQk1fQ0xLQ1RSTF9IQlVTX0RJVl9GUkFDX0VOLAorCQkJQ0xLQ1RSTF9CQVNFX0FERFIgKyBIV19DTEtDVFJMX0hCVVNfQ0xSKTsKKworCXJlZyA9IF9fcmF3X3JlYWRsKENMS0NUUkxfQkFTRV9BRERSICsgSFdfQ0xLQ1RSTF9YQlVTKTsKKwlyZWcgJj0gfkJNX0NMS0NUUkxfWEJVU19ESVZfRlJBQ19FTjsKKwlfX3Jhd193cml0ZWwocmVnLCBDTEtDVFJMX0JBU0VfQUREUiArIEhXX0NMS0NUUkxfWEJVUyk7CisKKwlyZWcgPSBfX3Jhd19yZWFkbChDTEtDVFJMX0JBU0VfQUREUiArIEhXX0NMS0NUUkxfU1NQMCk7CisJcmVnICY9IH5CTV9DTEtDVFJMX1NTUDBfRElWX0ZSQUNfRU47CisJX19yYXdfd3JpdGVsKHJlZywgQ0xLQ1RSTF9CQVNFX0FERFIgKyBIV19DTEtDVFJMX1NTUDApOworCisJcmVnID0gX19yYXdfcmVhZGwoQ0xLQ1RSTF9CQVNFX0FERFIgKyBIV19DTEtDVFJMX1NTUDEpOworCXJlZyAmPSB+Qk1fQ0xLQ1RSTF9TU1AxX0RJVl9GUkFDX0VOOworCV9fcmF3X3dyaXRlbChyZWcsIENMS0NUUkxfQkFTRV9BRERSICsgSFdfQ0xLQ1RSTF9TU1AxKTsKKworCXJlZyA9IF9fcmF3X3JlYWRsKENMS0NUUkxfQkFTRV9BRERSICsgSFdfQ0xLQ1RSTF9TU1AyKTsKKwlyZWcgJj0gfkJNX0NMS0NUUkxfU1NQMl9ESVZfRlJBQ19FTjsKKwlfX3Jhd193cml0ZWwocmVnLCBDTEtDVFJMX0JBU0VfQUREUiArIEhXX0NMS0NUUkxfU1NQMik7CisKKwlyZWcgPSBfX3Jhd19yZWFkbChDTEtDVFJMX0JBU0VfQUREUiArIEhXX0NMS0NUUkxfU1NQMyk7CisJcmVnICY9IH5CTV9DTEtDVFJMX1NTUDNfRElWX0ZSQUNfRU47CisJX19yYXdfd3JpdGVsKHJlZywgQ0xLQ1RSTF9CQVNFX0FERFIgKyBIV19DTEtDVFJMX1NTUDMpOworCisJcmVnID0gX19yYXdfcmVhZGwoQ0xLQ1RSTF9CQVNFX0FERFIgKyBIV19DTEtDVFJMX0dQTUkpOworCXJlZyAmPSB+Qk1fQ0xLQ1RSTF9HUE1JX0RJVl9GUkFDX0VOOworCV9fcmF3X3dyaXRlbChyZWcsIENMS0NUUkxfQkFTRV9BRERSICsgSFdfQ0xLQ1RSTF9HUE1JKTsKKworCXJlZyA9IF9fcmF3X3JlYWRsKENMS0NUUkxfQkFTRV9BRERSICsgSFdfQ0xLQ1RSTF9ESVNfTENESUYpOworCXJlZyAmPSB+Qk1fQ0xLQ1RSTF9ESVNfTENESUZfRElWX0ZSQUNfRU47CisJX19yYXdfd3JpdGVsKHJlZywgQ0xLQ1RSTF9CQVNFX0FERFIgKyBIV19DTEtDVFJMX0RJU19MQ0RJRik7CisKKwkvKiBTQUlGIGhhcyB0byB1c2UgZnJhYyBkaXYgZm9yIGZ1bmN0aW9uYWwgb3BlcmF0aW9uICovCisJcmVnID0gX19yYXdfcmVhZGwoQ0xLQ1RSTF9CQVNFX0FERFIgKyBIV19DTEtDVFJMX1NBSUYwKTsKKwlyZWcgJj0gfkJNX0NMS0NUUkxfU0FJRjBfRElWX0ZSQUNfRU47CisJX19yYXdfd3JpdGVsKHJlZywgQ0xLQ1RSTF9CQVNFX0FERFIgKyBIV19DTEtDVFJMX1NBSUYwKTsKKworCXJlZyA9IF9fcmF3X3JlYWRsKENMS0NUUkxfQkFTRV9BRERSICsgSFdfQ0xLQ1RSTF9TQUlGMSk7CisJcmVnICY9IH5CTV9DTEtDVFJMX1NBSUYxX0RJVl9GUkFDX0VOOworCV9fcmF3X3dyaXRlbChyZWcsIENMS0NUUkxfQkFTRV9BRERSICsgSFdfQ0xLQ1RSTF9TQUlGMSk7CisKKwkvKgorCSAqIFNldCBzYWZlIGhidXMgY2xvY2sgZGl2aWRlci4gQSBkaXZpZGVyIG9mIDMgZW5zdXJlIHRoYXQKKwkgKiB0aGUgVmRkZCB2b2x0YWdlIHJlcXVpcmVkIGZvciB0aGUgY3B1IGNsb2NrIGlzIHN1ZmZpY2llbnRseQorCSAqIGhpZ2ggZm9yIHRoZSBoYnVzIGNsb2NrLgorCSAqLworCXJlZyA9IF9fcmF3X3JlYWRsKENMS0NUUkxfQkFTRV9BRERSICsgSFdfQ0xLQ1RSTF9IQlVTKTsKKwlyZWcgJj0gQk1fQ0xLQ1RSTF9IQlVTX0RJVjsKKwlyZWcgfD0gMyA8PCBCUF9DTEtDVFJMX0hCVVNfRElWOworCV9fcmF3X3dyaXRlbChyZWcsIENMS0NUUkxfQkFTRV9BRERSICsgSFdfQ0xLQ1RSTF9IQlVTKTsKKworCWZvciAoaSA9IDEwMDAwOyBpOyBpLS0pCisJCWlmICghKF9fcmF3X3JlYWRsKENMS0NUUkxfQkFTRV9BRERSICsKKwkJCUhXX0NMS0NUUkxfSEJVUykgJiBCTV9DTEtDVFJMX0hCVVNfQVNNX0JVU1kpKQorCQkJYnJlYWs7CisJaWYgKCFpKSB7CisJCXByX2VycigiJXM6IGRpdmlkZXIgd3JpdGluZyB0aW1lb3V0XG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRVRJTUVET1VUOworCX0KKworCS8qIEdhdGUgb2ZmIGNwdSBjbG9jayBpbiBXRkkgZm9yIHBvd2VyIHNhdmluZyAqLworCV9fcmF3X3dyaXRlbChCTV9DTEtDVFJMX0NQVV9JTlRFUlJVUFRfV0FJVCwKKwkJCUNMS0NUUkxfQkFTRV9BRERSICsgSFdfQ0xLQ1RSTF9DUFVfU0VUKTsKKworCS8qIEV4dHJhIGZlYyBjbG9jayBzZXR0aW5nICovCisJcmVnID0gX19yYXdfcmVhZGwoQ0xLQ1RSTF9CQVNFX0FERFIgKyBIV19DTEtDVFJMX0VORVQpOworCXJlZyAmPSB+Qk1fQ0xLQ1RSTF9FTkVUX1NMRUVQOworCXJlZyB8PSBCTV9DTEtDVFJMX0VORVRfQ0xLX09VVF9FTjsKKwlfX3Jhd193cml0ZWwocmVnLCBDTEtDVFJMX0JBU0VfQUREUiArIEhXX0NMS0NUUkxfRU5FVCk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IF9faW5pdCBteDI4X2Nsb2Nrc19pbml0KHZvaWQpCit7CisJY2xrX21pc2NfaW5pdCgpOworCisJY2xrZGV2X2FkZF90YWJsZShsb29rdXBzLCBBUlJBWV9TSVpFKGxvb2t1cHMpKTsKKworCW14c190aW1lcl9pbml0KCZjbGszMmtfY2xrLCBNWDI4X0lOVF9USU1FUjApOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14cy9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1teHMvY2xvY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lN2QyMjY5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teHMvY2xvY2suYwpAQCAtMCwwICsxLDIwMCBAQAorLyoKKyAqIEJhc2VkIG9uIGFyY2gvYXJtL3BsYXQtb21hcC9jbG9jay5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwNSBOb2tpYSBjb3Jwb3JhdGlvbgorICogV3JpdHRlbiBieSBUdXVra2EgVGlra2FuZW4gPHR1dWtrYS50aWtrYW5lbkBlbGVrdHJvYml0LmNvbT4KKyAqIE1vZGlmaWVkIGZvciBvbWFwIHNoYXJlZCBjbG9jayBmcmFtZXdvcmsgYnkgVG9ueSBMaW5kZ3JlbiA8dG9ueUBhdG9taWRlLmNvbT4KKyAqIENvcHlyaWdodCAyMDA3IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwOCBKdWVyZ2VuIEJlaXNlcnQsIGtlcm5lbEBwZW5ndXRyb25peC5kZQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAorICogTUEgIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisvKiAjZGVmaW5lIERFQlVHICovCisKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKworI2luY2x1ZGUgPG1hY2gvY2xvY2suaD4KKworc3RhdGljIExJU1RfSEVBRChjbG9ja3MpOworc3RhdGljIERFRklORV9NVVRFWChjbG9ja3NfbXV0ZXgpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFN0YW5kYXJkIGNsb2NrIGZ1bmN0aW9ucyBkZWZpbmVkIGluIGluY2x1ZGUvbGludXgvY2xrLmgKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkIF9fY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQoreworCWlmIChjbGsgPT0gTlVMTCB8fCBJU19FUlIoY2xrKSkKKwkJcmV0dXJuOworCVdBUk5fT04oIWNsay0+dXNlY291bnQpOworCisJaWYgKCEoLS1jbGstPnVzZWNvdW50KSkgeworCQlpZiAoY2xrLT5kaXNhYmxlKQorCQkJY2xrLT5kaXNhYmxlKGNsayk7CisJCV9fY2xrX2Rpc2FibGUoY2xrLT5wYXJlbnQpOworCQlfX2Nsa19kaXNhYmxlKGNsay0+c2Vjb25kYXJ5KTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgX19jbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpZiAoY2xrID09IE5VTEwgfHwgSVNfRVJSKGNsaykpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGNsay0+dXNlY291bnQrKyA9PSAwKSB7CisJCV9fY2xrX2VuYWJsZShjbGstPnBhcmVudCk7CisJCV9fY2xrX2VuYWJsZShjbGstPnNlY29uZGFyeSk7CisKKwkJaWYgKGNsay0+ZW5hYmxlKQorCQkJY2xrLT5lbmFibGUoY2xrKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gaW5jcmVtZW50cyB0aGUgcmVmZXJlbmNlIGNvdW50IG9uIHRoZSBjbG9jayBhbmQgZW5hYmxlcyB0aGUKKyAqIGNsb2NrIGlmIG5vdCBhbHJlYWR5IGVuYWJsZWQuIFRoZSBwYXJlbnQgY2xvY2sgdHJlZSBpcyByZWN1cnNpdmVseSBlbmFibGVkCisgKi8KK2ludCBjbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpbnQgcmV0ID0gMDsKKworCWlmIChjbGsgPT0gTlVMTCB8fCBJU19FUlIoY2xrKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZjbG9ja3NfbXV0ZXgpOworCXJldCA9IF9fY2xrX2VuYWJsZShjbGspOworCW11dGV4X3VubG9jaygmY2xvY2tzX211dGV4KTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19lbmFibGUpOworCisvKiBUaGlzIGZ1bmN0aW9uIGRlY3JlbWVudHMgdGhlIHJlZmVyZW5jZSBjb3VudCBvbiB0aGUgY2xvY2sgYW5kIGRpc2FibGVzCisgKiB0aGUgY2xvY2sgd2hlbiByZWZlcmVuY2UgY291bnQgaXMgMC4gVGhlIHBhcmVudCBjbG9jayB0cmVlIGlzCisgKiByZWN1cnNpdmVseSBkaXNhYmxlZAorICovCit2b2lkIGNsa19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpZiAoY2xrID09IE5VTEwgfHwgSVNfRVJSKGNsaykpCisJCXJldHVybjsKKworCW11dGV4X2xvY2soJmNsb2Nrc19tdXRleCk7CisJX19jbGtfZGlzYWJsZShjbGspOworCW11dGV4X3VubG9jaygmY2xvY2tzX211dGV4KTsKK30KK0VYUE9SVF9TWU1CT0woY2xrX2Rpc2FibGUpOworCisvKiBSZXRyaWV2ZSB0aGUgKmN1cnJlbnQqIGNsb2NrIHJhdGUuIElmIHRoZSBjbG9jayBpdHNlbGYKKyAqIGRvZXMgbm90IHByb3ZpZGUgYSBzcGVjaWFsIGNhbGN1bGF0aW9uIHJvdXRpbmUsIGFzaworICogaXRzIHBhcmVudCBhbmQgc28gb24sIHVudGlsIG9uZSBpcyBhYmxlIHRvIHJldHVybgorICogYSB2YWxpZCBjbG9jayByYXRlCisgKi8KK3Vuc2lnbmVkIGxvbmcgY2xrX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpZiAoY2xrID09IE5VTEwgfHwgSVNfRVJSKGNsaykpCisJCXJldHVybiAwVUw7CisKKwlpZiAoY2xrLT5nZXRfcmF0ZSkKKwkJcmV0dXJuIGNsay0+Z2V0X3JhdGUoY2xrKTsKKworCXJldHVybiBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOworfQorRVhQT1JUX1NZTUJPTChjbGtfZ2V0X3JhdGUpOworCisvKiBSb3VuZCB0aGUgcmVxdWVzdGVkIGNsb2NrIHJhdGUgdG8gdGhlIG5lYXJlc3Qgc3VwcG9ydGVkCisgKiByYXRlIHRoYXQgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSByZXF1ZXN0ZWQgcmF0ZS4KKyAqIFRoaXMgaXMgZGVwZW5kZW50IG9uIHRoZSBjbG9jaydzIGN1cnJlbnQgcGFyZW50LgorICovCitsb25nIGNsa19yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCWlmIChjbGsgPT0gTlVMTCB8fCBJU19FUlIoY2xrKSB8fCAhY2xrLT5yb3VuZF9yYXRlKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBjbGstPnJvdW5kX3JhdGUoY2xrLCByYXRlKTsKK30KK0VYUE9SVF9TWU1CT0woY2xrX3JvdW5kX3JhdGUpOworCisvKiBTZXQgdGhlIGNsb2NrIHRvIHRoZSByZXF1ZXN0ZWQgY2xvY2sgcmF0ZS4gVGhlIHJhdGUgbXVzdAorICogbWF0Y2ggYSBzdXBwb3J0ZWQgcmF0ZSBleGFjdGx5IGJhc2VkIG9uIHdoYXQgY2xrX3JvdW5kX3JhdGUgcmV0dXJucworICovCitpbnQgY2xrX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCWludCByZXQgPSAtRUlOVkFMOworCisJaWYgKGNsayA9PSBOVUxMIHx8IElTX0VSUihjbGspIHx8IGNsay0+c2V0X3JhdGUgPT0gTlVMTCB8fCByYXRlID09IDApCisJCXJldHVybiByZXQ7CisKKwltdXRleF9sb2NrKCZjbG9ja3NfbXV0ZXgpOworCXJldCA9IGNsay0+c2V0X3JhdGUoY2xrLCByYXRlKTsKKwltdXRleF91bmxvY2soJmNsb2Nrc19tdXRleCk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChjbGtfc2V0X3JhdGUpOworCisvKiBTZXQgdGhlIGNsb2NrJ3MgcGFyZW50IHRvIGFub3RoZXIgY2xvY2sgc291cmNlICovCitpbnQgY2xrX3NldF9wYXJlbnQoc3RydWN0IGNsayAqY2xrLCBzdHJ1Y3QgY2xrICpwYXJlbnQpCit7CisJaW50IHJldCA9IC1FSU5WQUw7CisJc3RydWN0IGNsayAqb2xkOworCisJaWYgKGNsayA9PSBOVUxMIHx8IElTX0VSUihjbGspIHx8IHBhcmVudCA9PSBOVUxMIHx8CisJICAgIElTX0VSUihwYXJlbnQpIHx8IGNsay0+c2V0X3BhcmVudCA9PSBOVUxMKQorCQlyZXR1cm4gcmV0OworCisJaWYgKGNsay0+dXNlY291bnQpCisJCWNsa19lbmFibGUocGFyZW50KTsKKworCW11dGV4X2xvY2soJmNsb2Nrc19tdXRleCk7CisJcmV0ID0gY2xrLT5zZXRfcGFyZW50KGNsaywgcGFyZW50KTsKKwlpZiAocmV0ID09IDApIHsKKwkJb2xkID0gY2xrLT5wYXJlbnQ7CisJCWNsay0+cGFyZW50ID0gcGFyZW50OworCX0gZWxzZSB7CisJCW9sZCA9IHBhcmVudDsKKwl9CisJbXV0ZXhfdW5sb2NrKCZjbG9ja3NfbXV0ZXgpOworCisJaWYgKGNsay0+dXNlY291bnQpCisJCWNsa19kaXNhYmxlKG9sZCk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChjbGtfc2V0X3BhcmVudCk7CisKKy8qIFJldHJpZXZlIHRoZSBjbG9jaydzIHBhcmVudCBjbG9jayBzb3VyY2UgKi8KK3N0cnVjdCBjbGsgKmNsa19nZXRfcGFyZW50KHN0cnVjdCBjbGsgKmNsaykKK3sKKwlzdHJ1Y3QgY2xrICpyZXQgPSBOVUxMOworCisJaWYgKGNsayA9PSBOVUxMIHx8IElTX0VSUihjbGspKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIGNsay0+cGFyZW50OworfQorRVhQT1JUX1NZTUJPTChjbGtfZ2V0X3BhcmVudCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14cy9kZXZpY2VzLW14MjMuaCBiL2FyY2gvYXJtL21hY2gtbXhzL2RldmljZXMtbXgyMy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwZjQ5ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW14cy9kZXZpY2VzLW14MjMuaApAQCAtMCwwICsxLDE2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFBlbmd1dHJvbml4CisgKiBVd2UgS2xlaW5lLUtvZW5pZyA8dS5rbGVpbmUta29lbmlnQHBlbmd1dHJvbml4LmRlPgorICoKKyAqIENvcHlyaWdodCAyMDEwIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPG1hY2gvbXgyMy5oPgorI2luY2x1ZGUgPG1hY2gvZGV2aWNlcy1jb21tb24uaD4KKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBteHNfZHVhcnRfZGF0YSBteDIzX2R1YXJ0X2RhdGEgX19pbml0Y29uc3Q7CisjZGVmaW5lIG14MjNfYWRkX2R1YXJ0KCkgXAorCW14c19hZGRfZHVhcnQoJm14MjNfZHVhcnRfZGF0YSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXhzL2RldmljZXMtbXgyOC5oIGIvYXJjaC9hcm0vbWFjaC1teHMvZGV2aWNlcy1teDI4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBiNzM2YwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXhzL2RldmljZXMtbXgyOC5oCkBAIC0wLDAgKzEsMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgUGVuZ3V0cm9uaXgKKyAqIFV3ZSBLbGVpbmUtS29lbmlnIDx1LmtsZWluZS1rb2VuaWdAcGVuZ3V0cm9uaXguZGU+CisgKgorICogQ29weXJpZ2h0IDIwMTAgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgorICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bWFjaC9teDI4Lmg+CisjaW5jbHVkZSA8bWFjaC9kZXZpY2VzLWNvbW1vbi5oPgorCitleHRlcm4gY29uc3Qgc3RydWN0IG14c19kdWFydF9kYXRhIG14MjhfZHVhcnRfZGF0YSBfX2luaXRjb25zdDsKKyNkZWZpbmUgbXgyOF9hZGRfZHVhcnQoKSBcCisJbXhzX2FkZF9kdWFydCgmbXgyOF9kdWFydF9kYXRhKQorCitleHRlcm4gY29uc3Qgc3RydWN0IG14c19mZWNfZGF0YSBteDI4X2ZlY19kYXRhW10gX19pbml0Y29uc3Q7CisjZGVmaW5lIG14MjhfYWRkX2ZlYyhpZCwgcGRhdGEpIFwKKwlteHNfYWRkX2ZlYygmbXgyOF9mZWNfZGF0YVtpZF0sIHBkYXRhKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teHMvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1teHMvZGV2aWNlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiNjBmMDIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW14cy9kZXZpY2VzLmMKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA4IFNhc2NoYSBIYXVlciwga2VybmVsQHBlbmd1dHJvbml4LmRlCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKl9faW5pdCBteHNfYWRkX3BsYXRmb3JtX2RldmljZV9kbWFtYXNrKAorCQljb25zdCBjaGFyICpuYW1lLCBpbnQgaWQsCisJCWNvbnN0IHN0cnVjdCByZXNvdXJjZSAqcmVzLCB1bnNpZ25lZCBpbnQgbnVtX3Jlc291cmNlcywKKwkJY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemVfZGF0YSwgdTY0IGRtYW1hc2spCit7CisJaW50IHJldCA9IC1FTk9NRU07CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKworCXBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MobmFtZSwgaWQpOworCWlmICghcGRldikKKwkJZ290byBlcnI7CisKKwlpZiAoZG1hbWFzaykgeworCQkvKgorCQkgKiBUaGlzIG1lbW9yeSBpc24ndCBmcmVlZCB3aGVuIHRoZSBkZXZpY2UgaXMgcHV0LAorCQkgKiBJIGRvbid0IGhhdmUgYSBuaWNlIGlkZWEgZm9yIHRoYXQgdGhvdWdoLiAgQ29uY2VwdHVhbGx5CisJCSAqIGRtYV9tYXNrIGluIHN0cnVjdCBkZXZpY2Ugc2hvdWxkIG5vdCBiZSBhIHBvaW50ZXIuCisJCSAqIFNlZSBodHRwOi8vdGhyZWFkLmdtYW5lLm9yZy9nbWFuZS5saW51eC5rZXJuZWwucGNpLzkwODEKKwkJICovCisJCXBkZXYtPmRldi5kbWFfbWFzayA9CisJCQlrbWFsbG9jKHNpemVvZigqcGRldi0+ZGV2LmRtYV9tYXNrKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghcGRldi0+ZGV2LmRtYV9tYXNrKQorCQkJLyogcmV0IGlzIHN0aWxsIC1FTk9NRU07ICovCisJCQlnb3RvIGVycjsKKworCQkqcGRldi0+ZGV2LmRtYV9tYXNrID0gZG1hbWFzazsKKwkJcGRldi0+ZGV2LmNvaGVyZW50X2RtYV9tYXNrID0gZG1hbWFzazsKKwl9CisKKwlpZiAocmVzKSB7CisJCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGRfcmVzb3VyY2VzKHBkZXYsIHJlcywgbnVtX3Jlc291cmNlcyk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycjsKKwl9CisKKwlpZiAoZGF0YSkgeworCQlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX2RhdGEocGRldiwgZGF0YSwgc2l6ZV9kYXRhKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyOworCX0KKworCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQocGRldik7CisJaWYgKHJldCkgeworZXJyOgorCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkZXYpOworCQlyZXR1cm4gRVJSX1BUUihyZXQpOworCX0KKworCXJldHVybiBwZGV2OworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teHMvZGV2aWNlcy9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1teHMvZGV2aWNlcy9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzNWEyZGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW14cy9kZXZpY2VzL0tjb25maWcKQEAgLTAsMCArMSw1IEBACitjb25maWcgTVhTX0hBVkVfUExBVEZPUk1fRFVBUlQKKwlib29sCisKK2NvbmZpZyBNWFNfSEFWRV9QTEFURk9STV9GRUMKKwlib29sCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14cy9kZXZpY2VzL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1teHMvZGV2aWNlcy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjUyNjZhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teHMvZGV2aWNlcy9NYWtlZmlsZQpAQCAtMCwwICsxLDIgQEAKK29iai0kKENPTkZJR19NWFNfSEFWRV9QTEFURk9STV9EVUFSVCkgKz0gcGxhdGZvcm0tZHVhcnQubworb2JqLSQoQ09ORklHX01YU19IQVZFX1BMQVRGT1JNX0ZFQykgKz0gcGxhdGZvcm0tZmVjLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXhzL2RldmljZXMvcGxhdGZvcm0tZHVhcnQuYyBiL2FyY2gvYXJtL21hY2gtbXhzL2RldmljZXMvcGxhdGZvcm0tZHVhcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmUwZGY1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teHMvZGV2aWNlcy9wbGF0Zm9ybS1kdWFydC5jCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBQZW5ndXRyb25peAorICogVXdlIEtsZWluZS1Lb2VuaWcgPHUua2xlaW5lLWtvZW5pZ0BwZW5ndXRyb25peC5kZT4KKyAqCisgKiBDb3B5cmlnaHQgMjAxMCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxtYWNoL214MjMuaD4KKyNpbmNsdWRlIDxtYWNoL214MjguaD4KKyNpbmNsdWRlIDxtYWNoL2RldmljZXMtY29tbW9uLmg+CisKKyNkZWZpbmUgbXhzX2R1YXJ0X2RhdGFfZW50cnkoc29jKQkJCQkJXAorCXsJCQkJCQkJCVwKKwkJLmlvYmFzZSA9IHNvYyAjIyBfRFVBUlRfQkFTRV9BRERSLAkJCVwKKwkJLmlycSA9IHNvYyAjIyBfSU5UX0RVQVJULAkJCQlcCisJfQorCisjaWZkZWYgQ09ORklHX1NPQ19JTVgyMworY29uc3Qgc3RydWN0IG14c19kdWFydF9kYXRhIG14MjNfZHVhcnRfZGF0YSBfX2luaXRjb25zdCA9CisJbXhzX2R1YXJ0X2RhdGFfZW50cnkoTVgyMyk7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19TT0NfSU1YMjgKK2NvbnN0IHN0cnVjdCBteHNfZHVhcnRfZGF0YSBteDI4X2R1YXJ0X2RhdGEgX19pbml0Y29uc3QgPQorCW14c19kdWFydF9kYXRhX2VudHJ5KE1YMjgpOworI2VuZGlmCisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKl9faW5pdCBteHNfYWRkX2R1YXJ0KAorCQljb25zdCBzdHJ1Y3QgbXhzX2R1YXJ0X2RhdGEgKmRhdGEpCit7CisJc3RydWN0IHJlc291cmNlIHJlc1tdID0geworCQl7CisJCQkuc3RhcnQgPSBkYXRhLT5pb2Jhc2UsCisJCQkuZW5kID0gZGF0YS0+aW9iYXNlICsgU1pfOEsgLSAxLAorCQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJCX0sIHsKKwkJCS5zdGFydCA9IGRhdGEtPmlycSwKKwkJCS5lbmQgPSBkYXRhLT5pcnEsCisJCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwkJfSwKKwl9OworCisJcmV0dXJuIG14c19hZGRfcGxhdGZvcm1fZGV2aWNlKCJteHMtZHVhcnQiLCAwLCByZXMsIEFSUkFZX1NJWkUocmVzKSwKKwkJCQkJTlVMTCwgMCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14cy9kZXZpY2VzL3BsYXRmb3JtLWZlYy5jIGIvYXJjaC9hcm0vbWFjaC1teHMvZGV2aWNlcy9wbGF0Zm9ybS1mZWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDgxNjhjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teHMvZGV2aWNlcy9wbGF0Zm9ybS1mZWMuYwpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFBlbmd1dHJvbml4CisgKiBVd2UgS2xlaW5lLUtvZW5pZyA8dS5rbGVpbmUta29lbmlnQHBlbmd1dHJvbml4LmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KKyNpbmNsdWRlIDxtYWNoL214MjguaD4KKyNpbmNsdWRlIDxtYWNoL2RldmljZXMtY29tbW9uLmg+CisKKyNkZWZpbmUgbXhzX2ZlY19kYXRhX2VudHJ5X3NpbmdsZShzb2MsIF9pZCkJCQkJXAorCXsJCQkJCQkJCVwKKwkJLmlkID0gX2lkLAkJCQkJCVwKKwkJLmlvYmFzZSA9IHNvYyAjIyBfRU5FVF9NQUMgIyMgX2lkICMjIF9CQVNFX0FERFIsCVwKKwkJLmlycSA9IHNvYyAjIyBfSU5UX0VORVRfTUFDICMjIF9pZCwJCQlcCisJfQorCisjZGVmaW5lIG14c19mZWNfZGF0YV9lbnRyeShzb2MsIF9pZCkJCQkJCVwKKwlbX2lkXSA9IG14c19mZWNfZGF0YV9lbnRyeV9zaW5nbGUoc29jLCBfaWQpCisKKyNpZmRlZiBDT05GSUdfU09DX0lNWDI4Citjb25zdCBzdHJ1Y3QgbXhzX2ZlY19kYXRhIG14MjhfZmVjX2RhdGFbXSBfX2luaXRjb25zdCA9IHsKKyNkZWZpbmUgbXgyOF9mZWNfZGF0YV9lbnRyeShfaWQpCQkJCQlcCisJbXhzX2ZlY19kYXRhX2VudHJ5KE1YMjgsIF9pZCkKKwlteDI4X2ZlY19kYXRhX2VudHJ5KDApLAorCW14MjhfZmVjX2RhdGFfZW50cnkoMSksCit9OworI2VuZGlmCisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKl9faW5pdCBteHNfYWRkX2ZlYygKKwkJY29uc3Qgc3RydWN0IG14c19mZWNfZGF0YSAqZGF0YSwKKwkJY29uc3Qgc3RydWN0IGZlY19wbGF0Zm9ybV9kYXRhICpwZGF0YSkKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgcmVzW10gPSB7CisJCXsKKwkJCS5zdGFydCA9IGRhdGEtPmlvYmFzZSwKKwkJCS5lbmQgPSBkYXRhLT5pb2Jhc2UgKyBTWl8xNksgLSAxLAorCQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJCX0sIHsKKwkJCS5zdGFydCA9IGRhdGEtPmlycSwKKwkJCS5lbmQgPSBkYXRhLT5pcnEsCisJCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwkJfSwKKwl9OworCisJcmV0dXJuIG14c19hZGRfcGxhdGZvcm1fZGV2aWNlKCJmZWMiLCBkYXRhLT5pZCwKKwkJCXJlcywgQVJSQVlfU0laRShyZXMpLCBwZGF0YSwgc2l6ZW9mKCpwZGF0YSkpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teHMvZ3Bpby5jIGIvYXJjaC9hcm0vbWFjaC1teHMvZ3Bpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3YWQ3YTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW14cy9ncGlvLmMKQEAgLTAsMCArMSwzMjUgQEAKKy8qCisgKiBNWEMgR1BJTyBzdXBwb3J0LiAoYykgMjAwOCBEYW5pZWwgTWFjayA8ZGFuaWVsQGNhaWFxLmRlPgorICogQ29weXJpZ2h0IDIwMDggSnVlcmdlbiBCZWlzZXJ0LCBrZXJuZWxAcGVuZ3V0cm9uaXguZGUKKyAqCisgKiBCYXNlZCBvbiBjb2RlIGZyb20gRnJlZXNjYWxlLAorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTAgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKKyAqIE1BICAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxtYWNoL214MjMuaD4KKyNpbmNsdWRlIDxtYWNoL214MjguaD4KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9idWcuaD4KKworI2luY2x1ZGUgImdwaW8uaCIKKworc3RhdGljIHN0cnVjdCBteHNfZ3Bpb19wb3J0ICpteHNfZ3Bpb19wb3J0czsKK3N0YXRpYyBpbnQgZ3Bpb190YWJsZV9zaXplOworCisjZGVmaW5lIFBJTkNUUkxfRE9VVChuKQkJKChjcHVfaXNfbXgyMygpID8gMHgwNTAwIDogMHgwNzAwKSArIChuKSAqIDB4MTApCisjZGVmaW5lIFBJTkNUUkxfRElOKG4pCQkoKGNwdV9pc19teDIzKCkgPyAweDA2MDAgOiAweDA5MDApICsgKG4pICogMHgxMCkKKyNkZWZpbmUgUElOQ1RSTF9ET0UobikJCSgoY3B1X2lzX214MjMoKSA/IDB4MDcwMCA6IDB4MGIwMCkgKyAobikgKiAweDEwKQorI2RlZmluZSBQSU5DVFJMX1BJTjJJUlEobikJKChjcHVfaXNfbXgyMygpID8gMHgwODAwIDogMHgxMDAwKSArIChuKSAqIDB4MTApCisjZGVmaW5lIFBJTkNUUkxfSVJRRU4obikJKChjcHVfaXNfbXgyMygpID8gMHgwOTAwIDogMHgxMTAwKSArIChuKSAqIDB4MTApCisjZGVmaW5lIFBJTkNUUkxfSVJRTEVWKG4pCSgoY3B1X2lzX214MjMoKSA/IDB4MGEwMCA6IDB4MTIwMCkgKyAobikgKiAweDEwKQorI2RlZmluZSBQSU5DVFJMX0lSUVBPTChuKQkoKGNwdV9pc19teDIzKCkgPyAweDBiMDAgOiAweDEzMDApICsgKG4pICogMHgxMCkKKyNkZWZpbmUgUElOQ1RSTF9JUlFTVEFUKG4pCSgoY3B1X2lzX214MjMoKSA/IDB4MGMwMCA6IDB4MTQwMCkgKyAobikgKiAweDEwKQorCisjZGVmaW5lIEdQSU9fSU5UX0ZBTExfRURHRQkweDAKKyNkZWZpbmUgR1BJT19JTlRfTE9XX0xFVgkweDEKKyNkZWZpbmUgR1BJT19JTlRfUklTRV9FREdFCTB4MgorI2RlZmluZSBHUElPX0lOVF9ISUdIX0xFVgkweDMKKyNkZWZpbmUgR1BJT19JTlRfTEVWX01BU0sJKDEgPDwgMCkKKyNkZWZpbmUgR1BJT19JTlRfUE9MX01BU0sJKDEgPDwgMSkKKworLyogTm90ZTogVGhpcyBkcml2ZXIgYXNzdW1lcyAzMiBHUElPcyBhcmUgaGFuZGxlZCBpbiBvbmUgcmVnaXN0ZXIgKi8KKworc3RhdGljIHZvaWQgY2xlYXJfZ3Bpb19pcnFzdGF0dXMoc3RydWN0IG14c19ncGlvX3BvcnQgKnBvcnQsIHUzMiBpbmRleCkKK3sKKwlfX214c19jbHJsKDEgPDwgaW5kZXgsIHBvcnQtPmJhc2UgKyBQSU5DVFJMX0lSUVNUQVQocG9ydC0+aWQpKTsKK30KKworc3RhdGljIHZvaWQgc2V0X2dwaW9faXJxZW5hYmxlKHN0cnVjdCBteHNfZ3Bpb19wb3J0ICpwb3J0LCB1MzIgaW5kZXgsCisJCQkJaW50IGVuYWJsZSkKK3sKKwlpZiAoZW5hYmxlKSB7CisJCV9fbXhzX3NldGwoMSA8PCBpbmRleCwgcG9ydC0+YmFzZSArIFBJTkNUUkxfSVJRRU4ocG9ydC0+aWQpKTsKKwkJX19teHNfc2V0bCgxIDw8IGluZGV4LCBwb3J0LT5iYXNlICsgUElOQ1RSTF9QSU4ySVJRKHBvcnQtPmlkKSk7CisJfSBlbHNlIHsKKwkJX19teHNfY2xybCgxIDw8IGluZGV4LCBwb3J0LT5iYXNlICsgUElOQ1RSTF9JUlFFTihwb3J0LT5pZCkpOworCX0KK30KKworc3RhdGljIHZvaWQgbXhzX2dwaW9fYWNrX2lycSh1MzIgaXJxKQoreworCXUzMiBncGlvID0gaXJxX3RvX2dwaW8oaXJxKTsKKwljbGVhcl9ncGlvX2lycXN0YXR1cygmbXhzX2dwaW9fcG9ydHNbZ3BpbyAvIDMyXSwgZ3BpbyAmIDB4MWYpOworfQorCitzdGF0aWMgdm9pZCBteHNfZ3Bpb19tYXNrX2lycSh1MzIgaXJxKQoreworCXUzMiBncGlvID0gaXJxX3RvX2dwaW8oaXJxKTsKKwlzZXRfZ3Bpb19pcnFlbmFibGUoJm14c19ncGlvX3BvcnRzW2dwaW8gLyAzMl0sIGdwaW8gJiAweDFmLCAwKTsKK30KKworc3RhdGljIHZvaWQgbXhzX2dwaW9fdW5tYXNrX2lycSh1MzIgaXJxKQoreworCXUzMiBncGlvID0gaXJxX3RvX2dwaW8oaXJxKTsKKwlzZXRfZ3Bpb19pcnFlbmFibGUoJm14c19ncGlvX3BvcnRzW2dwaW8gLyAzMl0sIGdwaW8gJiAweDFmLCAxKTsKK30KKworc3RhdGljIGludCBteHNfZ3Bpb19nZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KTsKKworc3RhdGljIGludCBteHNfZ3Bpb19zZXRfaXJxX3R5cGUodTMyIGlycSwgdTMyIHR5cGUpCit7CisJdTMyIGdwaW8gPSBpcnFfdG9fZ3BpbyhpcnEpOworCXUzMiBwaW5fbWFzayA9IDEgPDwgKGdwaW8gJiAzMSk7CisJc3RydWN0IG14c19ncGlvX3BvcnQgKnBvcnQgPSAmbXhzX2dwaW9fcG9ydHNbZ3BpbyAvIDMyXTsKKwl2b2lkIF9faW9tZW0gKnBpbl9hZGRyOworCWludCBlZGdlOworCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBJUlFfVFlQRV9FREdFX1JJU0lORzoKKwkJZWRnZSA9IEdQSU9fSU5UX1JJU0VfRURHRTsKKwkJYnJlYWs7CisJY2FzZSBJUlFfVFlQRV9FREdFX0ZBTExJTkc6CisJCWVkZ2UgPSBHUElPX0lOVF9GQUxMX0VER0U7CisJCWJyZWFrOworCWNhc2UgSVJRX1RZUEVfTEVWRUxfTE9XOgorCQllZGdlID0gR1BJT19JTlRfTE9XX0xFVjsKKwkJYnJlYWs7CisJY2FzZSBJUlFfVFlQRV9MRVZFTF9ISUdIOgorCQllZGdlID0gR1BJT19JTlRfSElHSF9MRVY7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIHNldCBsZXZlbCBvciBlZGdlICovCisJcGluX2FkZHIgPSBwb3J0LT5iYXNlICsgUElOQ1RSTF9JUlFMRVYocG9ydC0+aWQpOworCWlmIChlZGdlICYgR1BJT19JTlRfTEVWX01BU0spCisJCV9fbXhzX3NldGwocGluX21hc2ssIHBpbl9hZGRyKTsKKwllbHNlCisJCV9fbXhzX2NscmwocGluX21hc2ssIHBpbl9hZGRyKTsKKworCS8qIHNldCBwb2xhcml0eSAqLworCXBpbl9hZGRyID0gcG9ydC0+YmFzZSArIFBJTkNUUkxfSVJRUE9MKHBvcnQtPmlkKTsKKwlpZiAoZWRnZSAmIEdQSU9fSU5UX1BPTF9NQVNLKQorCQlfX214c19zZXRsKHBpbl9tYXNrLCBwaW5fYWRkcik7CisJZWxzZQorCQlfX214c19jbHJsKHBpbl9tYXNrLCBwaW5fYWRkcik7CisKKwljbGVhcl9ncGlvX2lycXN0YXR1cyhwb3J0LCBncGlvICYgMHgxZik7CisKKwlyZXR1cm4gMDsKK30KKworLyogTVhTIGhhcyBvbmUgaW50ZXJydXB0ICpwZXIqIGdwaW8gcG9ydCAqLworc3RhdGljIHZvaWQgbXhzX2dwaW9faXJxX2hhbmRsZXIodTMyIGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQoreworCXUzMiBpcnFfc3RhdDsKKwlzdHJ1Y3QgbXhzX2dwaW9fcG9ydCAqcG9ydCA9IChzdHJ1Y3QgbXhzX2dwaW9fcG9ydCAqKWdldF9pcnFfZGF0YShpcnEpOworCXUzMiBncGlvX2lycV9ub19iYXNlID0gcG9ydC0+dmlydHVhbF9pcnFfc3RhcnQ7CisKKwlpcnFfc3RhdCA9IF9fcmF3X3JlYWRsKHBvcnQtPmJhc2UgKyBQSU5DVFJMX0lSUVNUQVQocG9ydC0+aWQpKSAmCisJCQlfX3Jhd19yZWFkbChwb3J0LT5iYXNlICsgUElOQ1RSTF9JUlFFTihwb3J0LT5pZCkpOworCisJd2hpbGUgKGlycV9zdGF0ICE9IDApIHsKKwkJaW50IGlycW9mZnNldCA9IGZscyhpcnFfc3RhdCkgLSAxOworCQlnZW5lcmljX2hhbmRsZV9pcnEoZ3Bpb19pcnFfbm9fYmFzZSArIGlycW9mZnNldCk7CisJCWlycV9zdGF0ICY9IH4oMSA8PCBpcnFvZmZzZXQpOworCX0KK30KKworLyoKKyAqIFNldCBpbnRlcnJ1cHQgbnVtYmVyICJpcnEiIGluIHRoZSBHUElPIGFzIGEgd2FrZS11cCBzb3VyY2UuCisgKiBXaGlsZSBzeXN0ZW0gaXMgcnVubmluZywgYWxsIHJlZ2lzdGVyZWQgR1BJTyBpbnRlcnJ1cHRzIG5lZWQgdG8gaGF2ZQorICogd2FrZS11cCBlbmFibGVkLiBXaGVuIHN5c3RlbSBpcyBzdXNwZW5kZWQsIG9ubHkgc2VsZWN0ZWQgR1BJTyBpbnRlcnJ1cHRzCisgKiBuZWVkIHRvIGhhdmUgd2FrZS11cCBlbmFibGVkLgorICogQHBhcmFtICBpcnEgICAgICAgICAgaW50ZXJydXB0IHNvdXJjZSBudW1iZXIKKyAqIEBwYXJhbSAgZW5hYmxlICAgICAgIGVuYWJsZSBhcyB3YWtlLXVwIGlmIGVxdWFsIHRvIG5vbi16ZXJvCisgKiBAcmV0dXJuICAgICAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIG9uIHN1Y2Nlc3MuCisgKi8KK3N0YXRpYyBpbnQgbXhzX2dwaW9fc2V0X3dha2VfaXJxKHUzMiBpcnEsIHUzMiBlbmFibGUpCit7CisJdTMyIGdwaW8gPSBpcnFfdG9fZ3BpbyhpcnEpOworCXUzMiBncGlvX2lkeCA9IGdwaW8gJiAweDFmOworCXN0cnVjdCBteHNfZ3Bpb19wb3J0ICpwb3J0ID0gJm14c19ncGlvX3BvcnRzW2dwaW8gLyAzMl07CisKKwlpZiAoZW5hYmxlKSB7CisJCWlmIChwb3J0LT5pcnFfaGlnaCAmJiAoZ3Bpb19pZHggPj0gMTYpKQorCQkJZW5hYmxlX2lycV93YWtlKHBvcnQtPmlycV9oaWdoKTsKKwkJZWxzZQorCQkJZW5hYmxlX2lycV93YWtlKHBvcnQtPmlycSk7CisJfSBlbHNlIHsKKwkJaWYgKHBvcnQtPmlycV9oaWdoICYmIChncGlvX2lkeCA+PSAxNikpCisJCQlkaXNhYmxlX2lycV93YWtlKHBvcnQtPmlycV9oaWdoKTsKKwkJZWxzZQorCQkJZGlzYWJsZV9pcnFfd2FrZShwb3J0LT5pcnEpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIGdwaW9faXJxX2NoaXAgPSB7CisJLmFjayA9IG14c19ncGlvX2Fja19pcnEsCisJLm1hc2sgPSBteHNfZ3Bpb19tYXNrX2lycSwKKwkudW5tYXNrID0gbXhzX2dwaW9fdW5tYXNrX2lycSwKKwkuc2V0X3R5cGUgPSBteHNfZ3Bpb19zZXRfaXJxX3R5cGUsCisJLnNldF93YWtlID0gbXhzX2dwaW9fc2V0X3dha2VfaXJxLAorfTsKKworc3RhdGljIHZvaWQgbXhzX3NldF9ncGlvX2RpcmVjdGlvbihzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQsCisJCQkJaW50IGRpcikKK3sKKwlzdHJ1Y3QgbXhzX2dwaW9fcG9ydCAqcG9ydCA9CisJCWNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgbXhzX2dwaW9fcG9ydCwgY2hpcCk7CisJdm9pZCBfX2lvbWVtICpwaW5fYWRkciA9IHBvcnQtPmJhc2UgKyBQSU5DVFJMX0RPRShwb3J0LT5pZCk7CisKKwlpZiAoZGlyKQorCQlfX214c19zZXRsKDEgPDwgb2Zmc2V0LCBwaW5fYWRkcik7CisJZWxzZQorCQlfX214c19jbHJsKDEgPDwgb2Zmc2V0LCBwaW5fYWRkcik7Cit9CisKK3N0YXRpYyBpbnQgbXhzX2dwaW9fZ2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKK3sKKwlzdHJ1Y3QgbXhzX2dwaW9fcG9ydCAqcG9ydCA9CisJCWNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgbXhzX2dwaW9fcG9ydCwgY2hpcCk7CisKKwlyZXR1cm4gKF9fcmF3X3JlYWRsKHBvcnQtPmJhc2UgKyBQSU5DVFJMX0RJTihwb3J0LT5pZCkpID4+IG9mZnNldCkgJiAxOworfQorCitzdGF0aWMgdm9pZCBteHNfZ3Bpb19zZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsdWUpCit7CisJc3RydWN0IG14c19ncGlvX3BvcnQgKnBvcnQgPQorCQljb250YWluZXJfb2YoY2hpcCwgc3RydWN0IG14c19ncGlvX3BvcnQsIGNoaXApOworCXZvaWQgX19pb21lbSAqcGluX2FkZHIgPSBwb3J0LT5iYXNlICsgUElOQ1RSTF9ET1VUKHBvcnQtPmlkKTsKKworCWlmICh2YWx1ZSkKKwkJX19teHNfc2V0bCgxIDw8IG9mZnNldCwgcGluX2FkZHIpOworCWVsc2UKKwkJX19teHNfY2xybCgxIDw8IG9mZnNldCwgcGluX2FkZHIpOworfQorCitzdGF0aWMgaW50IG14c19ncGlvX3RvX2lycShzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCit7CisJc3RydWN0IG14c19ncGlvX3BvcnQgKnBvcnQgPQorCQljb250YWluZXJfb2YoY2hpcCwgc3RydWN0IG14c19ncGlvX3BvcnQsIGNoaXApOworCisJcmV0dXJuIHBvcnQtPnZpcnR1YWxfaXJxX3N0YXJ0ICsgb2Zmc2V0OworfQorCitzdGF0aWMgaW50IG14c19ncGlvX2RpcmVjdGlvbl9pbnB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCit7CisJbXhzX3NldF9ncGlvX2RpcmVjdGlvbihjaGlwLCBvZmZzZXQsIDApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG14c19ncGlvX2RpcmVjdGlvbl9vdXRwdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwKKwkJCQkgICAgIHVuc2lnbmVkIG9mZnNldCwgaW50IHZhbHVlKQoreworCW14c19ncGlvX3NldChjaGlwLCBvZmZzZXQsIHZhbHVlKTsKKwlteHNfc2V0X2dwaW9fZGlyZWN0aW9uKGNoaXAsIG9mZnNldCwgMSk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBfX2luaXQgbXhzX2dwaW9faW5pdChzdHJ1Y3QgbXhzX2dwaW9fcG9ydCAqcG9ydCwgaW50IGNudCkKK3sKKwlpbnQgaSwgajsKKworCS8qIHNhdmUgZm9yIGxvY2FsIHVzYWdlICovCisJbXhzX2dwaW9fcG9ydHMgPSBwb3J0OworCWdwaW9fdGFibGVfc2l6ZSA9IGNudDsKKworCXByX2luZm8oIk1YUyBHUElPIGhhcmR3YXJlXG4iKTsKKworCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKykgeworCQkvKiBkaXNhYmxlIHRoZSBpbnRlcnJ1cHQgYW5kIGNsZWFyIHRoZSBzdGF0dXMgKi8KKwkJX19yYXdfd3JpdGVsKDAsIHBvcnRbaV0uYmFzZSArIFBJTkNUUkxfUElOMklSUShpKSk7CisJCV9fcmF3X3dyaXRlbCgwLCBwb3J0W2ldLmJhc2UgKyBQSU5DVFJMX0lSUUVOKGkpKTsKKworCQkvKiBjbGVhciBhZGRyZXNzIGhhcyB0byBiZSB1c2VkIHRvIGNsZWFyIElSUVNUQVQgYml0cyAqLworCQlfX214c19jbHJsKH4wVSwgcG9ydFtpXS5iYXNlICsgUElOQ1RSTF9JUlFTVEFUKGkpKTsKKworCQlmb3IgKGogPSBwb3J0W2ldLnZpcnR1YWxfaXJxX3N0YXJ0OworCQkJaiA8IHBvcnRbaV0udmlydHVhbF9pcnFfc3RhcnQgKyAzMjsgaisrKSB7CisJCQlzZXRfaXJxX2NoaXAoaiwgJmdwaW9faXJxX2NoaXApOworCQkJc2V0X2lycV9oYW5kbGVyKGosIGhhbmRsZV9sZXZlbF9pcnEpOworCQkJc2V0X2lycV9mbGFncyhqLCBJUlFGX1ZBTElEKTsKKwkJfQorCisJCS8qIHNldHVwIG9uZSBoYW5kbGVyIGZvciBlYWNoIGVudHJ5ICovCisJCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKHBvcnRbaV0uaXJxLCBteHNfZ3Bpb19pcnFfaGFuZGxlcik7CisJCXNldF9pcnFfZGF0YShwb3J0W2ldLmlycSwgJnBvcnRbaV0pOworCisJCS8qIHJlZ2lzdGVyIGdwaW8gY2hpcCAqLworCQlwb3J0W2ldLmNoaXAuZGlyZWN0aW9uX2lucHV0ID0gbXhzX2dwaW9fZGlyZWN0aW9uX2lucHV0OworCQlwb3J0W2ldLmNoaXAuZGlyZWN0aW9uX291dHB1dCA9IG14c19ncGlvX2RpcmVjdGlvbl9vdXRwdXQ7CisJCXBvcnRbaV0uY2hpcC5nZXQgPSBteHNfZ3Bpb19nZXQ7CisJCXBvcnRbaV0uY2hpcC5zZXQgPSBteHNfZ3Bpb19zZXQ7CisJCXBvcnRbaV0uY2hpcC50b19pcnEgPSBteHNfZ3Bpb190b19pcnE7CisJCXBvcnRbaV0uY2hpcC5iYXNlID0gaSAqIDMyOworCQlwb3J0W2ldLmNoaXAubmdwaW8gPSAzMjsKKworCQkvKiBpdHMgYSBzZXJpb3VzIGNvbmZpZ3VyYXRpb24gYnVnIHdoZW4gaXQgZmFpbHMgKi8KKwkJQlVHX09OKGdwaW9jaGlwX2FkZCgmcG9ydFtpXS5jaGlwKSA8IDApOworCX0KKworCXJldHVybiAwOworfQorCisjZGVmaW5lIERFRklORV9NWFNfR1BJT19QT1JUKHNvYywgX2lkKQkJCQkJXAorCXsJCQkJCQkJCVwKKwkJLmNoaXAubGFiZWwgPSAiZ3Bpby0iICNfaWQsCQkJCVwKKwkJLmlkID0gX2lkLAkJCQkJCVwKKwkJLmlycSA9IHNvYyAjIyBfSU5UX0dQSU8gIyMgX2lkLAkJCQlcCisJCS5iYXNlID0gc29jICMjIF9JT19BRERSRVNTKAkJCQlcCisJCQkJc29jICMjIF9QSU5DVFJMICMjIF9CQVNFX0FERFIpLAkJXAorCQkudmlydHVhbF9pcnFfc3RhcnQgPSBNWFNfR1BJT19JUlFfU1RBUlQgKyAoX2lkKSAqIDMyLAlcCisJfQorCisjZGVmaW5lIERFRklORV9SRUdJU1RFUl9GVU5DVElPTihwcmVmaXgpCQkJCVwKK2ludCBfX2luaXQgcHJlZml4ICMjIF9yZWdpc3Rlcl9ncGlvcyh2b2lkKQkJCQlcCit7CQkJCQkJCQkJXAorCXJldHVybiBteHNfZ3Bpb19pbml0KHByZWZpeCAjIyBfZ3Bpb19wb3J0cywJCQlcCisJCQlBUlJBWV9TSVpFKHByZWZpeCAjIyBfZ3Bpb19wb3J0cykpOwkJXAorfQorCisjaWZkZWYgQ09ORklHX1NPQ19JTVgyMworc3RhdGljIHN0cnVjdCBteHNfZ3Bpb19wb3J0IG14MjNfZ3Bpb19wb3J0c1tdID0geworCURFRklORV9NWFNfR1BJT19QT1JUKE1YMjMsIDApLAorCURFRklORV9NWFNfR1BJT19QT1JUKE1YMjMsIDEpLAorCURFRklORV9NWFNfR1BJT19QT1JUKE1YMjMsIDIpLAorfTsKK0RFRklORV9SRUdJU1RFUl9GVU5DVElPTihteDIzKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfU09DX0lNWDI4CitzdGF0aWMgc3RydWN0IG14c19ncGlvX3BvcnQgbXgyOF9ncGlvX3BvcnRzW10gPSB7CisJREVGSU5FX01YU19HUElPX1BPUlQoTVgyOCwgMCksCisJREVGSU5FX01YU19HUElPX1BPUlQoTVgyOCwgMSksCisJREVGSU5FX01YU19HUElPX1BPUlQoTVgyOCwgMiksCisJREVGSU5FX01YU19HUElPX1BPUlQoTVgyOCwgMyksCisJREVGSU5FX01YU19HUElPX1BPUlQoTVgyOCwgNCksCit9OworREVGSU5FX1JFR0lTVEVSX0ZVTkNUSU9OKG14MjgpCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXhzL2dwaW8uaCBiL2FyY2gvYXJtL21hY2gtbXhzL2dwaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDViYjA2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teHMvZ3Bpby5oCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMDggSnVlcmdlbiBCZWlzZXJ0LCBrZXJuZWxAcGVuZ3V0cm9uaXguZGUKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKKyAqIE1BICAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBfX01YU19HUElPX0hfXworI2RlZmluZSBfX01YU19HUElPX0hfXworCitzdHJ1Y3QgbXhzX2dwaW9fcG9ydCB7CisJdm9pZCBfX2lvbWVtICpiYXNlOworCWludCBpZDsKKwlpbnQgaXJxOworCWludCBpcnFfaGlnaDsKKwlpbnQgdmlydHVhbF9pcnFfc3RhcnQ7CisJc3RydWN0IGdwaW9fY2hpcCBjaGlwOworfTsKKworaW50IG14c19ncGlvX2luaXQoc3RydWN0IG14c19ncGlvX3BvcnQqLCBpbnQpOworCisjZW5kaWYgLyogX19NWFNfR1BJT19IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXhzL2ljb2xsLmMgYi9hcmNoL2FybS9tYWNoLW14cy9pY29sbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkZDQzYmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW14cy9pY29sbC5jCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8bWFjaC9teHMuaD4KKyNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgorCisjZGVmaW5lIEhXX0lDT0xMX1ZFQ1RPUgkJCQkweDAwMDAKKyNkZWZpbmUgSFdfSUNPTExfTEVWRUxBQ0sJCQkweDAwMTAKKyNkZWZpbmUgSFdfSUNPTExfQ1RSTAkJCQkweDAwMjAKKyNkZWZpbmUgSFdfSUNPTExfSU5URVJSVVBUbl9TRVQobikJCSgweDAxMjQgKyAobikgKiAweDEwKQorI2RlZmluZSBIV19JQ09MTF9JTlRFUlJVUFRuX0NMUihuKQkJKDB4MDEyOCArIChuKSAqIDB4MTApCisjZGVmaW5lIEJNX0lDT0xMX0lOVEVSUlVQVG5fRU5BQkxFCQkweDAwMDAwMDA0CisjZGVmaW5lIEJWX0lDT0xMX0xFVkVMQUNLX0lSUUxFVkVMQUNLX19MRVZFTDAJMHgxCisKK3N0YXRpYyB2b2lkIF9faW9tZW0gKmljb2xsX2Jhc2UgPSBNWFNfSU9fQUREUkVTUyhNWFNfSUNPTExfQkFTRV9BRERSKTsKKworc3RhdGljIHZvaWQgaWNvbGxfYWNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCS8qCisJICogVGhlIEludGVycnVwdCBDb2xsZWN0b3IgaXMgYWJsZSB0byBwcmlvcml0aXplIGlycXMuCisJICogQ3VycmVudGx5IG9ubHkgbGV2ZWwgMCBpcyB1c2VkLiBTbyBhY2tpbmcgY2FuIHVzZQorCSAqIEJWX0lDT0xMX0xFVkVMQUNLX0lSUUxFVkVMQUNLX19MRVZFTDAgdW5jb25kaXRpb25hbGx5LgorCSAqLworCV9fcmF3X3dyaXRlbChCVl9JQ09MTF9MRVZFTEFDS19JUlFMRVZFTEFDS19fTEVWRUwwLAorCQkJaWNvbGxfYmFzZSArIEhXX0lDT0xMX0xFVkVMQUNLKTsKK30KKworc3RhdGljIHZvaWQgaWNvbGxfbWFza19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlfX3Jhd193cml0ZWwoQk1fSUNPTExfSU5URVJSVVBUbl9FTkFCTEUsCisJCQlpY29sbF9iYXNlICsgSFdfSUNPTExfSU5URVJSVVBUbl9DTFIoaXJxKSk7Cit9CisKK3N0YXRpYyB2b2lkIGljb2xsX3VubWFza19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlfX3Jhd193cml0ZWwoQk1fSUNPTExfSU5URVJSVVBUbl9FTkFCTEUsCisJCQlpY29sbF9iYXNlICsgSFdfSUNPTExfSU5URVJSVVBUbl9TRVQoaXJxKSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbXhzX2ljb2xsX2NoaXAgPSB7CisJLmFjayA9IGljb2xsX2Fja19pcnEsCisJLm1hc2sgPSBpY29sbF9tYXNrX2lycSwKKwkudW5tYXNrID0gaWNvbGxfdW5tYXNrX2lycSwKK307CisKK3ZvaWQgX19pbml0IGljb2xsX2luaXRfaXJxKHZvaWQpCit7CisJaW50IGk7CisKKwkvKgorCSAqIEludGVycnVwdCBDb2xsZWN0b3IgcmVzZXQsIHdoaWNoIGluaXRpYWxpemVzIHRoZSBwcmlvcml0eQorCSAqIGZvciBlYWNoIGlycSB0byBsZXZlbCAwLgorCSAqLworCW14c19yZXNldF9ibG9jayhpY29sbF9iYXNlICsgSFdfSUNPTExfQ1RSTCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTVhTX0lOVEVSTkFMX0lSUVM7IGkrKykgeworCQlzZXRfaXJxX2NoaXAoaSwgJm14c19pY29sbF9jaGlwKTsKKwkJc2V0X2lycV9oYW5kbGVyKGksIGhhbmRsZV9sZXZlbF9pcnEpOworCQlzZXRfaXJxX2ZsYWdzKGksIElSUUZfVkFMSUQpOworCX0KK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXhzL2luY2x1ZGUvbWFjaC9jbGtkZXYuaCBiL2FyY2gvYXJtL21hY2gtbXhzL2luY2x1ZGUvbWFjaC9jbGtkZXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYThmMmUzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teHMvaW5jbHVkZS9tYWNoL2Nsa2Rldi5oCkBAIC0wLDAgKzEsNyBAQAorI2lmbmRlZiBfX01BQ0hfTVhTX0NMS0RFVl9IX18KKyNkZWZpbmUgX19NQUNIX01YU19DTEtERVZfSF9fCisKKyNkZWZpbmUgX19jbGtfZ2V0KGNsaykgKHsgMTsgfSkKKyNkZWZpbmUgX19jbGtfcHV0KGNsaykgZG8geyB9IHdoaWxlICgwKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXhzL2luY2x1ZGUvbWFjaC9jbG9jay5oIGIvYXJjaC9hcm0vbWFjaC1teHMvaW5jbHVkZS9tYWNoL2Nsb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQxZTI3NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXhzL2luY2x1ZGUvbWFjaC9jbG9jay5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNS0yMDA3IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwOCBKdWVyZ2VuIEJlaXNlcnQsIGtlcm5lbEBwZW5ndXRyb25peC5kZQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAorICogTUEgIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIF9fTUFDSF9NWFNfQ0xPQ0tfSF9fCisjZGVmaW5lIF9fTUFDSF9NWFNfQ0xPQ0tfSF9fCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorCitzdHJ1Y3QgbW9kdWxlOworCitzdHJ1Y3QgY2xrIHsKKwlpbnQgaWQ7CisJLyogU291cmNlIGNsb2NrIHRoaXMgY2xrIGRlcGVuZHMgb24gKi8KKwlzdHJ1Y3QgY2xrICpwYXJlbnQ7CisJLyogU2Vjb25kYXJ5IGNsb2NrIHRvIGVuYWJsZS9kaXNhYmxlIHdpdGggdGhpcyBjbG9jayAqLworCXN0cnVjdCBjbGsgKnNlY29uZGFyeTsKKwkvKiBSZWZlcmVuY2UgY291bnQgb2YgY2xvY2sgZW5hYmxlL2Rpc2FibGUgKi8KKwlfX3M4IHVzZWNvdW50OworCS8qIFJlZ2lzdGVyIGJpdCBwb3NpdGlvbiBmb3IgY2xvY2sncyBlbmFibGUvZGlzYWJsZSBjb250cm9sLiAqLworCXU4IGVuYWJsZV9zaGlmdDsKKwkvKiBSZWdpc3RlciBhZGRyZXNzIGZvciBjbG9jaydzIGVuYWJsZS9kaXNhYmxlIGNvbnRyb2wuICovCisJdm9pZCBfX2lvbWVtICplbmFibGVfcmVnOworCXUzMiBmbGFnczsKKwkvKiBnZXQgdGhlIGN1cnJlbnQgY2xvY2sgcmF0ZSAoYWx3YXlzIGEgZnJlc2ggdmFsdWUpICovCisJdW5zaWduZWQgbG9uZyAoKmdldF9yYXRlKSAoc3RydWN0IGNsayAqKTsKKwkvKiBGdW5jdGlvbiBwdHIgdG8gc2V0IHRoZSBjbG9jayB0byBhIG5ldyByYXRlLiBUaGUgcmF0ZSBtdXN0IG1hdGNoIGEKKwkgICBzdXBwb3J0ZWQgcmF0ZSByZXR1cm5lZCBmcm9tIHJvdW5kX3JhdGUuIExlYXZlIGJsYW5rIGlmIGNsb2NrIGlzIG5vdAorCSAgIHByb2dyYW1tYWJsZSAqLworCWludCAoKnNldF9yYXRlKSAoc3RydWN0IGNsayAqLCB1bnNpZ25lZCBsb25nKTsKKwkvKiBGdW5jdGlvbiBwdHIgdG8gcm91bmQgdGhlIHJlcXVlc3RlZCBjbG9jayByYXRlIHRvIHRoZSBuZWFyZXN0CisJICAgc3VwcG9ydGVkIHJhdGUgdGhhdCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHJlcXVlc3RlZCByYXRlLiAqLworCXVuc2lnbmVkIGxvbmcgKCpyb3VuZF9yYXRlKSAoc3RydWN0IGNsayAqLCB1bnNpZ25lZCBsb25nKTsKKwkvKiBGdW5jdGlvbiBwdHIgdG8gZW5hYmxlIHRoZSBjbG9jay4gTGVhdmUgYmxhbmsgaWYgY2xvY2sgY2FuIG5vdAorCSAgIGJlIGdhdGVkLiAqLworCWludCAoKmVuYWJsZSkgKHN0cnVjdCBjbGsgKik7CisJLyogRnVuY3Rpb24gcHRyIHRvIGRpc2FibGUgdGhlIGNsb2NrLiBMZWF2ZSBibGFuayBpZiBjbG9jayBjYW4gbm90CisJICAgYmUgZ2F0ZWQuICovCisJdm9pZCAoKmRpc2FibGUpIChzdHJ1Y3QgY2xrICopOworCS8qIEZ1bmN0aW9uIHB0ciB0byBzZXQgdGhlIHBhcmVudCBjbG9jayBvZiB0aGUgY2xvY2suICovCisJaW50ICgqc2V0X3BhcmVudCkgKHN0cnVjdCBjbGsgKiwgc3RydWN0IGNsayAqKTsKK307CisKK2ludCBjbGtfcmVnaXN0ZXIoc3RydWN0IGNsayAqY2xrKTsKK3ZvaWQgY2xrX3VucmVnaXN0ZXIoc3RydWN0IGNsayAqY2xrKTsKKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworI2VuZGlmIC8qIF9fTUFDSF9NWFNfQ0xPQ0tfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14cy9pbmNsdWRlL21hY2gvY29tbW9uLmggYi9hcmNoL2FybS9tYWNoLW14cy9pbmNsdWRlL21hY2gvY29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTkxMzNlYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXhzL2luY2x1ZGUvbWFjaC9jb21tb24uaApAQCAtMCwwICsxLDMxIEBACisvKgorICogQ29weXJpZ2h0IDIwMDQtMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICovCisKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19NQUNIX01YU19DT01NT05fSF9fCisjZGVmaW5lIF9fTUFDSF9NWFNfQ09NTU9OX0hfXworCitzdHJ1Y3QgY2xrOworCitleHRlcm4gaW50IG14c19yZXNldF9ibG9jayh2b2lkIF9faW9tZW0gKik7CitleHRlcm4gdm9pZCBteHNfdGltZXJfaW5pdChzdHJ1Y3QgY2xrICosIGludCk7CisKK2V4dGVybiBpbnQgbXgyM19yZWdpc3Rlcl9ncGlvcyh2b2lkKTsKK2V4dGVybiBpbnQgbXgyM19jbG9ja3NfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIG14MjNfbWFwX2lvKHZvaWQpOworZXh0ZXJuIHZvaWQgbXgyM19pbml0X2lycSh2b2lkKTsKKworZXh0ZXJuIGludCBteDI4X3JlZ2lzdGVyX2dwaW9zKHZvaWQpOworZXh0ZXJuIGludCBteDI4X2Nsb2Nrc19pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgbXgyOF9tYXBfaW8odm9pZCk7CitleHRlcm4gdm9pZCBteDI4X2luaXRfaXJxKHZvaWQpOworCitleHRlcm4gdm9pZCBpY29sbF9pbml0X2lycSh2b2lkKTsKKworI2VuZGlmIC8qIF9fTUFDSF9NWFNfQ09NTU9OX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teHMvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLW14cy9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTY1MGExCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teHMvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTAsMCArMSwzOCBAQAorLyogYXJjaC9hcm0vbWFjaC1teHMvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKyAqCisgKiBEZWJ1Z2dpbmcgbWFjcm8gaW5jbHVkZSBoZWFkZXIKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk0LTE5OTkgUnVzc2VsbCBLaW5nCisgKiAgTW92ZWQgZnJvbSBsaW51eC9hcmNoL2FybS9rZXJuZWwvZGVidWcuUyBieSBCZW4gRG9va3MKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bWFjaC9teDIzLmg+CisjaW5jbHVkZSA8bWFjaC9teDI4Lmg+CisKKyNpZmRlZiBDT05GSUdfU09DX0lNWDIzCisjaWZkZWYgVUFSVF9QQUREUgorI2Vycm9yICJDT05GSUdfREVCVUdfTEwgaXMgaW5jb21wYXRpYmxlIHdpdGggbXVsdGlwbGUgYXJjaHMiCisjZW5kaWYKKyNkZWZpbmUgVUFSVF9QQUREUglNWDIzX0RVQVJUX0JBU0VfQUREUgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfU09DX0lNWDI4CisjaWZkZWYgVUFSVF9QQUREUgorI2Vycm9yICJDT05GSUdfREVCVUdfTEwgaXMgaW5jb21wYXRpYmxlIHdpdGggbXVsdGlwbGUgYXJjaHMiCisjZW5kaWYKKyNkZWZpbmUgVUFSVF9QQUREUglNWDI4X0RVQVJUX0JBU0VfQUREUgorI2VuZGlmCisKKyNkZWZpbmUgVUFSVF9WQUREUglNWFNfSU9fQUREUkVTUyhVQVJUX1BBRERSKQorCisJCS5tYWNybwlhZGRydWFydCwgcnAsIHJ2CisJCWxkcglccnAsID1VQVJUX1BBRERSCUAgcGh5c2ljYWwKKwkJbGRyCVxydiwgPVVBUlRfVkFERFIJQCB2aXJ0dWFsCisJCS5lbmRtCisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvZGVidWctcGwwMXguUz4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXhzL2luY2x1ZGUvbWFjaC9kZXZpY2VzLWNvbW1vbi5oIGIvYXJjaC9hcm0vbWFjaC1teHMvaW5jbHVkZS9tYWNoL2RldmljZXMtY29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RhNDhkNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXhzL2luY2x1ZGUvbWFjaC9kZXZpY2VzLWNvbW1vbi5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBQZW5ndXRyb25peAorICogVXdlIEtsZWluZS1Lb2VuaWcgPHUua2xlaW5lLWtvZW5pZ0BwZW5ndXRyb25peC5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgorICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpteHNfYWRkX3BsYXRmb3JtX2RldmljZV9kbWFtYXNrKAorCQljb25zdCBjaGFyICpuYW1lLCBpbnQgaWQsCisJCWNvbnN0IHN0cnVjdCByZXNvdXJjZSAqcmVzLCB1bnNpZ25lZCBpbnQgbnVtX3Jlc291cmNlcywKKwkJY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemVfZGF0YSwgdTY0IGRtYW1hc2spOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm14c19hZGRfcGxhdGZvcm1fZGV2aWNlKAorCQljb25zdCBjaGFyICpuYW1lLCBpbnQgaWQsCisJCWNvbnN0IHN0cnVjdCByZXNvdXJjZSAqcmVzLCB1bnNpZ25lZCBpbnQgbnVtX3Jlc291cmNlcywKKwkJY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemVfZGF0YSkKK3sKKwlyZXR1cm4gbXhzX2FkZF9wbGF0Zm9ybV9kZXZpY2VfZG1hbWFzaygKKwkJCW5hbWUsIGlkLCByZXMsIG51bV9yZXNvdXJjZXMsIGRhdGEsIHNpemVfZGF0YSwgMCk7Cit9CisKKy8qIGR1YXJ0ICovCitzdHJ1Y3QgbXhzX2R1YXJ0X2RhdGEgeworCXJlc291cmNlX3NpemVfdCBpb2Jhc2U7CisJcmVzb3VyY2Vfc2l6ZV90IGlvc2l6ZTsKKwlyZXNvdXJjZV9zaXplX3QgaXJxOworfTsKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKl9faW5pdCBteHNfYWRkX2R1YXJ0KAorCQljb25zdCBzdHJ1Y3QgbXhzX2R1YXJ0X2RhdGEgKmRhdGEpOworCisvKiBmZWMgKi8KKyNpbmNsdWRlIDxsaW51eC9mZWMuaD4KK3N0cnVjdCBteHNfZmVjX2RhdGEgeworCWludCBpZDsKKwlyZXNvdXJjZV9zaXplX3QgaW9iYXNlOworCXJlc291cmNlX3NpemVfdCBpb3NpemU7CisJcmVzb3VyY2Vfc2l6ZV90IGlycTsKK307CitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpfX2luaXQgbXhzX2FkZF9mZWMoCisJCWNvbnN0IHN0cnVjdCBteHNfZmVjX2RhdGEgKmRhdGEsCisJCWNvbnN0IHN0cnVjdCBmZWNfcGxhdGZvcm1fZGF0YSAqcGRhdGEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teHMvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLW14cy9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjBkYTEyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teHMvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIExvdy1sZXZlbCBJUlEgaGVscGVyIG1hY3JvcyBmb3IgRnJlZXNjYWxlIE1YUy1iYXNlZAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bWFjaC9teHMuaD4KKworI2RlZmluZSBNWFNfSUNPTExfVkJBU0UJCU1YU19JT19BRERSRVNTKE1YU19JQ09MTF9CQVNFX0FERFIpCisjZGVmaW5lIEhXX0lDT0xMX1NUQVRfT0ZGU0VUCTB4NzAKKworCS5tYWNybwlkaXNhYmxlX2ZpcQorCS5lbmRtCisKKwkubWFjcm8JZ2V0X2lycW5yX2FuZF9iYXNlLCBpcnFuciwgaXJxc3RhdCwgYmFzZSwgdG1wCisJbGRyCVxpcnFuciwgW1xiYXNlLCAjSFdfSUNPTExfU1RBVF9PRkZTRVRdCisJY21wCVxpcnFuciwgIzB4N0YKKwlzdHJuZQlcaXJxbnIsIFtcYmFzZV0KKwltb3ZlcXMJXGlycW5yLCAjMAorCS5lbmRtCisKKwkubWFjcm8gIGdldF9pcnFucl9wcmVhbWJsZSwgYmFzZSwgdG1wCisJbGRyCVxiYXNlLCA9TVhTX0lDT0xMX1ZCQVNFCisJLmVuZG0KKworCS5tYWNybyAgYXJjaF9yZXRfdG9fdXNlciwgdG1wMSwgdG1wMgorCS5lbmRtCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14cy9pbmNsdWRlL21hY2gvZ3Bpby5oIGIvYXJjaC9hcm0vbWFjaC1teHMvaW5jbHVkZS9tYWNoL2dwaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjhjY2NjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teHMvaW5jbHVkZS9tYWNoL2dwaW8uaApAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IDIwMDcgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDA4IEp1ZXJnZW4gQmVpc2VydCwga2VybmVsQHBlbmd1dHJvbml4LmRlCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sCisgKiBNQSAgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgX19NQUNIX01YU19HUElPX0hfXworI2RlZmluZSBfX01BQ0hfTVhTX0dQSU9fSF9fCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9ncGlvLmg+CisKKyNkZWZpbmUgTVhTX0dQSU9fTlIoYmFuaywgbnIpCSgoYmFuaykgKiAzMiArIChucikpCisKKy8qIHVzZSBncGlvbGliIGRpc3BhdGNoZXJzICovCisjZGVmaW5lIGdwaW9fZ2V0X3ZhbHVlCQlfX2dwaW9fZ2V0X3ZhbHVlCisjZGVmaW5lIGdwaW9fc2V0X3ZhbHVlCQlfX2dwaW9fc2V0X3ZhbHVlCisjZGVmaW5lIGdwaW9fY2Fuc2xlZXAJCV9fZ3Bpb19jYW5zbGVlcAorI2RlZmluZSBncGlvX3RvX2lycQkJX19ncGlvX3RvX2lycQorCisjZGVmaW5lIGlycV90b19ncGlvKGlycSkJKChpcnEpIC0gTVhTX0dQSU9fSVJRX1NUQVJUKQorCisjZW5kaWYgLyogX19NQUNIX01YU19HUElPX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teHMvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmggYi9hcmNoL2FybS9tYWNoLW14cy9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2U4OWEwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teHMvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKQEAgLTAsMCArMSwyOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDcgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDA4IEp1ZXJnZW4gQmVpc2VydCwga2VybmVsQHBlbmd1dHJvbml4LmRlCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sCisgKiBNQSAgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgX19NQUNIX01YU19IQVJEV0FSRV9IX18KKyNkZWZpbmUgX19NQUNIX01YU19IQVJEV0FSRV9IX18KKworI2lmZGVmIF9fQVNTRU1CTEVSX18KKyNkZWZpbmUgSU9NRU0oYWRkcikJKGFkZHIpCisjZWxzZQorI2RlZmluZSBJT01FTShhZGRyKQkoKHZvaWQgX19mb3JjZSBfX2lvbWVtICopKGFkZHIpKQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX01BQ0hfTVhTX0hBUkRXQVJFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teHMvaW5jbHVkZS9tYWNoL2lvLmggYi9hcmNoL2FybS9tYWNoLW14cy9pbmNsdWRlL21hY2gvaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODliNzIyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teHMvaW5jbHVkZS9tYWNoL2lvLmgKQEAgLTAsMCArMSwyMiBAQAorLyoKKyAqICBDb3B5cmlnaHQgMjAwNC0yMDA3IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKi8KKworLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfX01BQ0hfTVhTX0lPX0hfXworI2RlZmluZSBfX01BQ0hfTVhTX0lPX0hfXworCisvKiBBbGxvdyBJTyBzcGFjZSB0byBiZSBhbnl3aGVyZSBpbiB0aGUgbWVtb3J5ICovCisjZGVmaW5lIElPX1NQQUNFX0xJTUlUIDB4ZmZmZmZmZmYKKworLyogaW8gYWRkcmVzcyBtYXBwaW5nIG1hY3JvICovCisjZGVmaW5lIF9faW8oYSkJCV9fdHlwZXNhZmVfaW8oYSkKKworI2RlZmluZSBfX21lbV9wY2koYSkJKGEpCisKKyNlbmRpZiAvKiBfX01BQ0hfTVhTX0lPX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teHMvaW5jbHVkZS9tYWNoL2lvbXV4LW14MjMuaCBiL2FyY2gvYXJtL21hY2gtbXhzL2luY2x1ZGUvbWFjaC9pb211eC1teDIzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRlNWRkOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXhzL2luY2x1ZGUvbWFjaC9pb211eC1teDIzLmgKQEAgLTAsMCArMSwzNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBBbWl0IEt1Y2hlcmlhIDxhbWl0Lmt1Y2hlcmlhQGNhbm9uaWNhbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqCisgKiBUaGUgY29kZSBjb250YWluZWQgaGVyZWluIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIFZlcnNpb24gMiBvciBsYXRlciBhdCB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczoKKyAqCisgKiBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2dwbC1saWNlbnNlLmh0bWwKKyAqIGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9ncGwuaHRtbAorICovCisKKyNpZm5kZWYgX19NQUNIX0lPTVVYX01YMjNfSF9fCisjZGVmaW5lIF9fTUFDSF9JT01VWF9NWDIzX0hfXworCisjaW5jbHVkZSA8bWFjaC9pb211eC5oPgorCisvKgorICogVGhlIG5hbWluZyBjb252ZW50aW9uIGZvciB0aGUgcGFkIG1vZGVzIGlzIE1YMjNfUEFEXzxwYWRuYW1lPl9fPHBhZG1vZGU+CisgKiBJZiA8cGFkbmFtZT4gb3IgPHBhZG1vZGU+IHJlZmVycyB0byBhIEdQSU8sIGl0IGlzIG5hbWVkIEdQSU9fPHVuaXQ+XzxudW0+CisgKiBTZWUgYWxzbyBpb211eC5oCisgKgorICoJCQkJCQkJCQlCQU5LCVBJTglNVVgKKyAqLworLyogTVVYU0VMXzAgKi8KKyNkZWZpbmUgTVgyM19QQURfR1BNSV9EMDBfX0dQTUlfRDAwCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsICAwLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjNfUEFEX0dQTUlfRDAxX19HUE1JX0QwMQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAgMSwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDIzX1BBRF9HUE1JX0QwMl9fR1BNSV9EMDIJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgIDIsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyM19QQURfR1BNSV9EMDNfX0dQTUlfRDAzCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsICAzLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjNfUEFEX0dQTUlfRDA0X19HUE1JX0QwNAkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAgNCwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDIzX1BBRF9HUE1JX0QwNV9fR1BNSV9EMDUJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgIDUsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyM19QQURfR1BNSV9EMDZfX0dQTUlfRDA2CQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsICA2LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjNfUEFEX0dQTUlfRDA3X19HUE1JX0QwNwkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAgNywgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDIzX1BBRF9HUE1JX0QwOF9fR1BNSV9EMDgJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgIDgsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyM19QQURfR1BNSV9EMDlfX0dQTUlfRDA5CQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsICA5LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjNfUEFEX0dQTUlfRDEwX19HUE1JX0QxMAkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAxMCwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDIzX1BBRF9HUE1JX0QxMV9fR1BNSV9EMTEJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMTEsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyM19QQURfR1BNSV9EMTJfX0dQTUlfRDEyCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDEyLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjNfUEFEX0dQTUlfRDEzX19HUE1JX0QxMwkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAxMywgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDIzX1BBRF9HUE1JX0QxNF9fR1BNSV9EMTQJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMTQsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyM19QQURfR1BNSV9EMTVfX0dQTUlfRDE1CQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDE1LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjNfUEFEX0dQTUlfQ0xFX19HUE1JX0NMRQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAxNiwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDIzX1BBRF9HUE1JX0FMRV9fR1BNSV9BTEUJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMTcsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyM19QQURfR1BNSV9DRTJOX19HUE1JX0NFMk4JCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMTgsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyM19QQURfR1BNSV9SRFkwX19HUE1JX1JEWTAJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMTksIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyM19QQURfR1BNSV9SRFkxX19HUE1JX1JEWTEJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMjAsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyM19QQURfR1BNSV9SRFkyX19HUE1JX1JEWTIJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMjEsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyM19QQURfR1BNSV9SRFkzX19HUE1JX1JEWTMJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMjIsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyM19QQURfR1BNSV9XUE5fX0dQTUlfV1BOCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDIzLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjNfUEFEX0dQTUlfV1JOX19HUE1JX1dSTgkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAyNCwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDIzX1BBRF9HUE1JX1JETl9fR1BNSV9SRE4JCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMjUsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyM19QQURfQVVBUlQxX0NUU19fQVVBUlQxX0NUUwkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAyNiwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDIzX1BBRF9BVUFSVDFfUlRTX19BVUFSVDFfUlRTCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDI3LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjNfUEFEX0FVQVJUMV9SWF9fQVVBUlQxX1JYCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDI4LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjNfUEFEX0FVQVJUMV9UWF9fQVVBUlQxX1RYCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDI5LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjNfUEFEX0kyQ19TQ0xfX0kyQ19TQ0wJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMzAsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyM19QQURfSTJDX1NEQV9fSTJDX1NEQQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAzMSwgUEFEX01VWFNFTF8wKQorCisjZGVmaW5lIE1YMjNfUEFEX0xDRF9EMDBfX0xDRF9EMDAJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgIDAsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyM19QQURfTENEX0QwMV9fTENEX0QwMQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAgMSwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDIzX1BBRF9MQ0RfRDAyX19MQ0RfRDAyCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsICAyLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjNfUEFEX0xDRF9EMDNfX0xDRF9EMDMJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgIDMsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyM19QQURfTENEX0QwNF9fTENEX0QwNAkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAgNCwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDIzX1BBRF9MQ0RfRDA1X19MQ0RfRDA1CQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsICA1LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjNfUEFEX0xDRF9EMDZfX0xDRF9EMDYJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgIDYsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyM19QQURfTENEX0QwN19fTENEX0QwNwkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAgNywgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDIzX1BBRF9MQ0RfRDA4X19MQ0RfRDA4CQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsICA4LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjNfUEFEX0xDRF9EMDlfX0xDRF9EMDkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgIDksIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyM19QQURfTENEX0QxMF9fTENEX0QxMAkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAxMCwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDIzX1BBRF9MQ0RfRDExX19MQ0RfRDExCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDExLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjNfUEFEX0xDRF9EMTJfX0xDRF9EMTIJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMTIsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyM19QQURfTENEX0QxM19fTENEX0QxMwkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAxMywgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDIzX1BBRF9MQ0RfRDE0X19MQ0RfRDE0CQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDE0LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjNfUEFEX0xDRF9EMTVfX0xDRF9EMTUJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMTUsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyM19QQURfTENEX0QxNl9fTENEX0QxNgkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAxNiwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDIzX1BBRF9MQ0RfRDE3X19MQ0RfRDE3CQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDE3LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjNfUEFEX0xDRF9SRVNFVF9fTENEX1JFU0VUCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDE4LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjNfUEFEX0xDRF9SU19fTENEX1JTCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAxOSwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDIzX1BBRF9MQ0RfV1JfX0xDRF9XUgkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMjAsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyM19QQURfTENEX0NTX19MQ0RfQ1MJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDIxLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjNfUEFEX0xDRF9ET1RDS19fTENEX0RPVENLCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDIyLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjNfUEFEX0xDRF9FTkFCTEVfX0xDRF9FTkFCTEUJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMjMsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyM19QQURfTENEX0hTWU5DX19MQ0RfSFNZTkMJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMjQsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyM19QQURfTENEX1ZTWU5DX19MQ0RfVlNZTkMJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMjUsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyM19QQURfUFdNMF9fUFdNMAkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMjYsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyM19QQURfUFdNMV9fUFdNMQkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMjcsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyM19QQURfUFdNMl9fUFdNMgkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMjgsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyM19QQURfUFdNM19fUFdNMwkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMjksIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyM19QQURfUFdNNF9fUFdNNAkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMzAsIFBBRF9NVVhTRUxfMCkKKworI2RlZmluZSBNWDIzX1BBRF9TU1AxX0NNRF9fU1NQMV9DTUQJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgIDAsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyM19QQURfU1NQMV9ERVRFQ1RfX1NTUDFfREVURUNUCU1YU19JT01VWF9QQURfTkFLRUQoMiwgIDEsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyM19QQURfU1NQMV9EQVRBMF9fU1NQMV9EQVRBMAkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAgMiwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDIzX1BBRF9TU1AxX0RBVEExX19TU1AxX0RBVEExCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsICAzLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjNfUEFEX1NTUDFfREFUQTJfX1NTUDFfREFUQTIJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgIDQsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyM19QQURfU1NQMV9EQVRBM19fU1NQMV9EQVRBMwkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAgNSwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDIzX1BBRF9TU1AxX1NDS19fU1NQMV9TQ0sJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgIDYsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyM19QQURfUk9UQVJZQV9fUk9UQVJZQQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAgNywgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDIzX1BBRF9ST1RBUllCX19ST1RBUllCCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsICA4LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjNfUEFEX0VNSV9BMDBfX0VNSV9BMDAJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgIDksIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyM19QQURfRU1JX0EwMV9fRU1JX0EwMQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAxMCwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDIzX1BBRF9FTUlfQTAyX19FTUlfQTAyCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDExLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjNfUEFEX0VNSV9BMDNfX0VNSV9BMDMJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMTIsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyM19QQURfRU1JX0EwNF9fRU1JX0EwNAkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAxMywgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDIzX1BBRF9FTUlfQTA1X19FTUlfQTA1CQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDE0LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjNfUEFEX0VNSV9BMDZfX0VNSV9BMDYJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMTUsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyM19QQURfRU1JX0EwN19fRU1JX0EwNwkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAxNiwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDIzX1BBRF9FTUlfQTA4X19FTUlfQTA4CQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDE3LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjNfUEFEX0VNSV9BMDlfX0VNSV9BMDkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMTgsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyM19QQURfRU1JX0ExMF9fRU1JX0ExMAkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAxOSwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDIzX1BBRF9FTUlfQTExX19FTUlfQTExCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDIwLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjNfUEFEX0VNSV9BMTJfX0VNSV9BMTIJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMjEsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyM19QQURfRU1JX0JBMF9fRU1JX0JBMAkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAyMiwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDIzX1BBRF9FTUlfQkExX19FTUlfQkExCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDIzLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjNfUEFEX0VNSV9DQVNOX19FTUlfQ0FTTgkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAyNCwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDIzX1BBRF9FTUlfQ0UwTl9fRU1JX0NFME4JCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMjUsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyM19QQURfRU1JX0NFMU5fX0VNSV9DRTFOCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDI2LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjNfUEFEX0dQTUlfQ0UxTl9fR1BNSV9DRTFOCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDI3LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjNfUEFEX0dQTUlfQ0UwTl9fR1BNSV9DRTBOCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDI4LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjNfUEFEX0VNSV9DS0VfX0VNSV9DS0UJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMjksIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyM19QQURfRU1JX1JBU05fX0VNSV9SQVNOCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDMwLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjNfUEFEX0VNSV9XRU5fX0VNSV9XRU4JCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMzEsIFBBRF9NVVhTRUxfMCkKKworI2RlZmluZSBNWDIzX1BBRF9FTUlfRDAwX19FTUlfRDAwCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsICAwLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjNfUEFEX0VNSV9EMDFfX0VNSV9EMDEJCU1YU19JT01VWF9QQURfTkFLRUQoMywgIDEsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyM19QQURfRU1JX0QwMl9fRU1JX0QwMgkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAgMiwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDIzX1BBRF9FTUlfRDAzX19FTUlfRDAzCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsICAzLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjNfUEFEX0VNSV9EMDRfX0VNSV9EMDQJCU1YU19JT01VWF9QQURfTkFLRUQoMywgIDQsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyM19QQURfRU1JX0QwNV9fRU1JX0QwNQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAgNSwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDIzX1BBRF9FTUlfRDA2X19FTUlfRDA2CQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsICA2LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjNfUEFEX0VNSV9EMDdfX0VNSV9EMDcJCU1YU19JT01VWF9QQURfTkFLRUQoMywgIDcsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyM19QQURfRU1JX0QwOF9fRU1JX0QwOAkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAgOCwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDIzX1BBRF9FTUlfRDA5X19FTUlfRDA5CQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsICA5LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjNfUEFEX0VNSV9EMTBfX0VNSV9EMTAJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMTAsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyM19QQURfRU1JX0QxMV9fRU1JX0QxMQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAxMSwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDIzX1BBRF9FTUlfRDEyX19FTUlfRDEyCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDEyLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjNfUEFEX0VNSV9EMTNfX0VNSV9EMTMJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMTMsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyM19QQURfRU1JX0QxNF9fRU1JX0QxNAkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAxNCwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDIzX1BBRF9FTUlfRDE1X19FTUlfRDE1CQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDE1LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjNfUEFEX0VNSV9EUU0wX19FTUlfRFFNMAkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAxNiwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDIzX1BBRF9FTUlfRFFNMV9fRU1JX0RRTTEJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMTcsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyM19QQURfRU1JX0RRUzBfX0VNSV9EUVMwCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDE4LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjNfUEFEX0VNSV9EUVMxX19FTUlfRFFTMQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAxOSwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDIzX1BBRF9FTUlfQ0xLX19FTUlfQ0xLCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDIwLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjNfUEFEX0VNSV9DTEtOX19FTUlfQ0xLTgkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAyMSwgUEFEX01VWFNFTF8wKQorCisvKiBNVVhTRUxfMSAqLworI2RlZmluZSBNWDIzX1BBRF9HUE1JX0QwMF9fTENEX0Q4CQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsICAwLCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjNfUEFEX0dQTUlfRDAxX19MQ0RfRDkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgIDEsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyM19QQURfR1BNSV9EMDJfX0xDRF9EMTAJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgIDIsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyM19QQURfR1BNSV9EMDNfX0xDRF9EMTEJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgIDMsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyM19QQURfR1BNSV9EMDRfX0xDRF9EMTIJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgIDQsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyM19QQURfR1BNSV9EMDVfX0xDRF9EMTMJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgIDUsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyM19QQURfR1BNSV9EMDZfX0xDRF9EMTQJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgIDYsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyM19QQURfR1BNSV9EMDdfX0xDRF9EMTUJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgIDcsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyM19QQURfR1BNSV9EMDhfX0xDRF9EMTgJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgIDgsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyM19QQURfR1BNSV9EMDlfX0xDRF9EMTkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgIDksIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyM19QQURfR1BNSV9EMTBfX0xDRF9EMjAJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMTAsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyM19QQURfR1BNSV9EMTFfX0xDRF9EMjEJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMTEsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyM19QQURfR1BNSV9EMTJfX0xDRF9EMjIJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMTIsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyM19QQURfR1BNSV9EMTNfX0xDRF9EMjMJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMTMsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyM19QQURfR1BNSV9EMTRfX0FVQVJUMl9SWAkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAxNCwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDIzX1BBRF9HUE1JX0QxNV9fQVVBUlQyX1RYCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDE1LCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjNfUEFEX0dQTUlfQ0xFX19MQ0RfRDE2CQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDE2LCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjNfUEFEX0dQTUlfQUxFX19MQ0RfRDE3CQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDE3LCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjNfUEFEX0dQTUlfQ0UyTl9fQVRBX0EyCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDE4LCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjNfUEFEX0FVQVJUMV9SVFNfX0lSX0NMSwkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAyNywgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDIzX1BBRF9BVUFSVDFfUlhfX0lSX1JYCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDI4LCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjNfUEFEX0FVQVJUMV9UWF9fSVJfVFgJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMjksIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyM19QQURfSTJDX1NDTF9fR1BNSV9SRFkyCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDMwLCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjNfUEFEX0kyQ19TREFfX0dQTUlfQ0UyTgkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAzMSwgUEFEX01VWFNFTF8xKQorCisjZGVmaW5lIE1YMjNfUEFEX0xDRF9EMDBfX0VUTV9EQTgJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgIDAsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyM19QQURfTENEX0QwMV9fRVRNX0RBOQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAgMSwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDIzX1BBRF9MQ0RfRDAyX19FVE1fREExMAkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAgMiwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDIzX1BBRF9MQ0RfRDAzX19FVE1fREExMQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAgMywgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDIzX1BBRF9MQ0RfRDA0X19FVE1fREExMgkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAgNCwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDIzX1BBRF9MQ0RfRDA1X19FVE1fREExMwkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAgNSwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDIzX1BBRF9MQ0RfRDA2X19FVE1fREExNAkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAgNiwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDIzX1BBRF9MQ0RfRDA3X19FVE1fREExNQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAgNywgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDIzX1BBRF9MQ0RfRDA4X19FVE1fREEwCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsICA4LCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjNfUEFEX0xDRF9EMDlfX0VUTV9EQTEJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgIDksIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyM19QQURfTENEX0QxMF9fRVRNX0RBMgkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAxMCwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDIzX1BBRF9MQ0RfRDExX19FVE1fREEzCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDExLCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjNfUEFEX0xDRF9EMTJfX0VUTV9EQTQJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMTIsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyM19QQURfTENEX0QxM19fRVRNX0RBNQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAxMywgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDIzX1BBRF9MQ0RfRDE0X19FVE1fREE2CQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDE0LCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjNfUEFEX0xDRF9EMTVfX0VUTV9EQTcJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMTUsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyM19QQURfTENEX1JFU0VUX19FVE1fVENUTAkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAxOCwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDIzX1BBRF9MQ0RfUlNfX0VUTV9UQ0xLCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDE5LCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjNfUEFEX0xDRF9ET1RDS19fR1BNSV9SRFkzCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDIyLCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjNfUEFEX0xDRF9FTkFCTEVfX0kyQ19TQ0wJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMjMsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyM19QQURfTENEX0hTWU5DX19JMkNfU0RBCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDI0LCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjNfUEFEX0xDRF9WU1lOQ19fTENEX0JVU1kJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMjUsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyM19QQURfUFdNMF9fUk9UQVJZQQkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMjYsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyM19QQURfUFdNMV9fUk9UQVJZQgkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMjcsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyM19QQURfUFdNMl9fR1BNSV9SRFkzCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDI4LCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjNfUEFEX1BXTTNfX0VUTV9UQ1RMCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAyOSwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDIzX1BBRF9QV000X19FVE1fVENMSwkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMzAsIFBBRF9NVVhTRUxfMSkKKworI2RlZmluZSBNWDIzX1BBRF9TU1AxX0RFVEVDVF9fR1BNSV9DRTNOCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsICAxLCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjNfUEFEX1NTUDFfREFUQTFfX0kyQ19TQ0wJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgIDMsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyM19QQURfU1NQMV9EQVRBMl9fSTJDX1NEQQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAgNCwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDIzX1BBRF9ST1RBUllBX19BVUFSVDJfUlRTCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsICA3LCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjNfUEFEX1JPVEFSWUJfX0FVQVJUMl9DVFMJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgIDgsIFBBRF9NVVhTRUxfMSkKKworLyogTVVYU0VMXzIgKi8KKyNkZWZpbmUgTVgyM19QQURfR1BNSV9EMDBfX1NTUDJfREFUQTAJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgIDAsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyM19QQURfR1BNSV9EMDFfX1NTUDJfREFUQTEJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgIDEsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyM19QQURfR1BNSV9EMDJfX1NTUDJfREFUQTIJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgIDIsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyM19QQURfR1BNSV9EMDNfX1NTUDJfREFUQTMJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgIDMsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyM19QQURfR1BNSV9EMDRfX1NTUDJfREFUQTQJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgIDQsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyM19QQURfR1BNSV9EMDVfX1NTUDJfREFUQTUJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgIDUsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyM19QQURfR1BNSV9EMDZfX1NTUDJfREFUQTYJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgIDYsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyM19QQURfR1BNSV9EMDdfX1NTUDJfREFUQTcJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgIDcsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyM19QQURfR1BNSV9EMDhfX1NTUDFfREFUQTQJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgIDgsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyM19QQURfR1BNSV9EMDlfX1NTUDFfREFUQTUJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgIDksIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyM19QQURfR1BNSV9EMTBfX1NTUDFfREFUQTYJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMTAsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyM19QQURfR1BNSV9EMTFfX1NTUDFfREFUQTcJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMTEsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyM19QQURfR1BNSV9EMTVfX0dQTUlfQ0UzTgkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAxNSwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDIzX1BBRF9HUE1JX1JEWTBfX1NTUDJfREVURUNUCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDE5LCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjNfUEFEX0dQTUlfUkRZMV9fU1NQMl9DTUQJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMjAsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyM19QQURfR1BNSV9XUk5fX1NTUDJfU0NLCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDI0LCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjNfUEFEX0FVQVJUMV9DVFNfX1NTUDFfREFUQTQJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMjYsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyM19QQURfQVVBUlQxX1JUU19fU1NQMV9EQVRBNQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAyNywgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDIzX1BBRF9BVUFSVDFfUlhfX1NTUDFfREFUQTYJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMjgsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyM19QQURfQVVBUlQxX1RYX19TU1AxX0RBVEE3CQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDI5LCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjNfUEFEX0kyQ19TQ0xfX0FVQVJUMV9UWAkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAzMCwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDIzX1BBRF9JMkNfU0RBX19BVUFSVDFfUlgJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMzEsIFBBRF9NVVhTRUxfMikKKworI2RlZmluZSBNWDIzX1BBRF9MQ0RfRDA4X19TQUlGMl9TREFUQTAJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgIDgsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyM19QQURfTENEX0QwOV9fU0FJRjFfU0RBVEEwCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsICA5LCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjNfUEFEX0xDRF9EMTBfX1NBSUZfTUNMS19CSVRDTEsJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAxMCwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDIzX1BBRF9MQ0RfRDExX19TQUlGX0xSQ0xLCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDExLCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjNfUEFEX0xDRF9EMTJfX1NBSUYyX1NEQVRBMQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAxMiwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDIzX1BBRF9MQ0RfRDEzX19TQUlGMl9TREFUQTIJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMTMsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyM19QQURfTENEX0QxNF9fU0FJRjFfU0RBVEEyCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDE0LCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjNfUEFEX0xDRF9EMTVfX1NBSUYxX1NEQVRBMQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAxNSwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDIzX1BBRF9MQ0RfRDE2X19TQUlGX0FMVF9CSVRDTEsJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAxNiwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDIzX1BBRF9MQ0RfUkVTRVRfX0dQTUlfQ0UzTgkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAxOCwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDIzX1BBRF9QV00wX19EVUFSVF9SWAkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMjYsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyM19QQURfUFdNMV9fRFVBUlRfVFgJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDI3LCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjNfUEFEX1BXTTNfX0FVQVJUMV9DVFMJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMjksIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyM19QQURfUFdNNF9fQVVBUlQxX1JUUwkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAzMCwgUEFEX01VWFNFTF8yKQorCisjZGVmaW5lIE1YMjNfUEFEX1NTUDFfQ01EX19KVEFHX1RETwkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAgMCwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDIzX1BBRF9TU1AxX0RFVEVDVF9fVVNCX09UR19JRAlNWFNfSU9NVVhfUEFEX05BS0VEKDIsICAxLCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjNfUEFEX1NTUDFfREFUQTBfX0pUQUdfVERJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsICAyLCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjNfUEFEX1NTUDFfREFUQTFfX0pUQUdfVENMSwkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAgMywgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDIzX1BBRF9TU1AxX0RBVEEyX19KVEFHX1JUQ0sJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgIDQsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyM19QQURfU1NQMV9EQVRBM19fSlRBR19UTVMJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgIDUsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyM19QQURfU1NQMV9TQ0tfX0pUQUdfVFJTVAkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAgNiwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDIzX1BBRF9ST1RBUllBX19TUERJRgkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgIDcsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyM19QQURfUk9UQVJZQl9fR1BNSV9DRTNOCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsICA4LCBQQURfTVVYU0VMXzIpCisKKy8qIE1VWFNFTF9HUElPICovCisjZGVmaW5lIE1YMjNfUEFEX0dQTUlfRDAwX19HUE9fMF8wCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsICAwLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjNfUEFEX0dQTUlfRDAxX19HUE9fMF8xCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsICAxLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjNfUEFEX0dQTUlfRDAyX19HUE9fMF8yCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsICAyLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjNfUEFEX0dQTUlfRDAzX19HUE9fMF8zCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsICAzLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjNfUEFEX0dQTUlfRDA0X19HUE9fMF80CQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsICA0LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjNfUEFEX0dQTUlfRDA1X19HUE9fMF81CQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsICA1LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjNfUEFEX0dQTUlfRDA2X19HUE9fMF82CQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsICA2LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjNfUEFEX0dQTUlfRDA3X19HUE9fMF83CQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsICA3LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjNfUEFEX0dQTUlfRDA4X19HUE9fMF84CQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsICA4LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjNfUEFEX0dQTUlfRDA5X19HUE9fMF85CQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsICA5LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjNfUEFEX0dQTUlfRDEwX19HUE9fMF8xMAkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAxMCwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDIzX1BBRF9HUE1JX0QxMV9fR1BPXzBfMTEJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMTEsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyM19QQURfR1BNSV9EMTJfX0dQT18wXzEyCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDEyLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjNfUEFEX0dQTUlfRDEzX19HUE9fMF8xMwkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAxMywgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDIzX1BBRF9HUE1JX0QxNF9fR1BPXzBfMTQJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMTQsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyM19QQURfR1BNSV9EMTVfX0dQT18wXzE1CQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDE1LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjNfUEFEX0dQTUlfQ0xFX19HUE9fMF8xNgkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAxNiwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDIzX1BBRF9HUE1JX0FMRV9fR1BPXzBfMTcJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMTcsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyM19QQURfR1BNSV9DRTJOX19HUE9fMF8xOAkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAxOCwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDIzX1BBRF9HUE1JX1JEWTBfX0dQT18wXzE5CQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDE5LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjNfUEFEX0dQTUlfUkRZMV9fR1BPXzBfMjAJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMjAsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyM19QQURfR1BNSV9SRFkyX19HUE9fMF8yMQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAyMSwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDIzX1BBRF9HUE1JX1JEWTNfX0dQT18wXzIyCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDIyLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjNfUEFEX0dQTUlfV1BOX19HUE9fMF8yMwkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAyMywgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDIzX1BBRF9HUE1JX1dSTl9fR1BPXzBfMjQJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMjQsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyM19QQURfR1BNSV9SRE5fX0dQT18wXzI1CQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDI1LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjNfUEFEX0FVQVJUMV9DVFNfX0dQT18wXzI2CQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDI2LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjNfUEFEX0FVQVJUMV9SVFNfX0dQT18wXzI3CQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDI3LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjNfUEFEX0FVQVJUMV9SWF9fR1BPXzBfMjgJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMjgsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyM19QQURfQVVBUlQxX1RYX19HUE9fMF8yOQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAyOSwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDIzX1BBRF9JMkNfU0NMX19HUE9fMF8zMAkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAzMCwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDIzX1BBRF9JMkNfU0RBX19HUE9fMF8zMQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAzMSwgUEFEX01VWFNFTF9HUElPKQorCisjZGVmaW5lIE1YMjNfUEFEX0xDRF9EMDBfX0dQT18xXzAJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgIDAsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyM19QQURfTENEX0QwMV9fR1BPXzFfMQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAgMSwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDIzX1BBRF9MQ0RfRDAyX19HUE9fMV8yCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsICAyLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjNfUEFEX0xDRF9EMDNfX0dQT18xXzMJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgIDMsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyM19QQURfTENEX0QwNF9fR1BPXzFfNAkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAgNCwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDIzX1BBRF9MQ0RfRDA1X19HUE9fMV81CQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsICA1LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjNfUEFEX0xDRF9EMDZfX0dQT18xXzYJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgIDYsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyM19QQURfTENEX0QwN19fR1BPXzFfNwkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAgNywgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDIzX1BBRF9MQ0RfRDA4X19HUE9fMV84CQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsICA4LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjNfUEFEX0xDRF9EMDlfX0dQT18xXzkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgIDksIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyM19QQURfTENEX0QxMF9fR1BPXzFfMTAJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMTAsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyM19QQURfTENEX0QxMV9fR1BPXzFfMTEJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMTEsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyM19QQURfTENEX0QxMl9fR1BPXzFfMTIJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMTIsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyM19QQURfTENEX0QxM19fR1BPXzFfMTMJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMTMsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyM19QQURfTENEX0QxNF9fR1BPXzFfMTQJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMTQsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyM19QQURfTENEX0QxNV9fR1BPXzFfMTUJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMTUsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyM19QQURfTENEX0QxNl9fR1BPXzFfMTYJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMTYsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyM19QQURfTENEX0QxN19fR1BPXzFfMTcJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMTcsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyM19QQURfTENEX1JFU0VUX19HUE9fMV8xOAkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAxOCwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDIzX1BBRF9MQ0RfUlNfX0dQT18xXzE5CQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDE5LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjNfUEFEX0xDRF9XUl9fR1BPXzFfMjAJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMjAsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyM19QQURfTENEX0NTX19HUE9fMV8yMQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAyMSwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDIzX1BBRF9MQ0RfRE9UQ0tfX0dQT18xXzIyCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDIyLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjNfUEFEX0xDRF9FTkFCTEVfX0dQT18xXzIzCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDIzLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjNfUEFEX0xDRF9IU1lOQ19fR1BPXzFfMjQJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMjQsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyM19QQURfTENEX1ZTWU5DX19HUE9fMV8yNQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAyNSwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDIzX1BBRF9QV00wX19HUE9fMV8yNgkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMjYsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyM19QQURfUFdNMV9fR1BPXzFfMjcJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDI3LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjNfUEFEX1BXTTJfX0dQT18xXzI4CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAyOCwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDIzX1BBRF9QV00zX19HUE9fMV8yOQkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMjksIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyM19QQURfUFdNNF9fR1BPXzFfMzAJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDMwLCBQQURfTVVYU0VMX0dQSU8pCisKKyNkZWZpbmUgTVgyM19QQURfU1NQMV9DTURfX0dQT18yXzAJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgIDAsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyM19QQURfU1NQMV9ERVRFQ1RfX0dQT18yXzEJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgIDEsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyM19QQURfU1NQMV9EQVRBMF9fR1BPXzJfMgkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAgMiwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDIzX1BBRF9TU1AxX0RBVEExX19HUE9fMl8zCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsICAzLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjNfUEFEX1NTUDFfREFUQTJfX0dQT18yXzQJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgIDQsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyM19QQURfU1NQMV9EQVRBM19fR1BPXzJfNQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAgNSwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDIzX1BBRF9TU1AxX1NDS19fR1BPXzJfNgkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAgNiwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDIzX1BBRF9ST1RBUllBX19HUE9fMl83CQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsICA3LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjNfUEFEX1JPVEFSWUJfX0dQT18yXzgJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgIDgsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyM19QQURfRU1JX0EwMF9fR1BPXzJfOQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAgOSwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDIzX1BBRF9FTUlfQTAxX19HUE9fMl8xMAkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAxMCwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDIzX1BBRF9FTUlfQTAyX19HUE9fMl8xMQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAxMSwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDIzX1BBRF9FTUlfQTAzX19HUE9fMl8xMgkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAxMiwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDIzX1BBRF9FTUlfQTA0X19HUE9fMl8xMwkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAxMywgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDIzX1BBRF9FTUlfQTA1X19HUE9fMl8xNAkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAxNCwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDIzX1BBRF9FTUlfQTA2X19HUE9fMl8xNQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAxNSwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDIzX1BBRF9FTUlfQTA3X19HUE9fMl8xNgkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAxNiwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDIzX1BBRF9FTUlfQTA4X19HUE9fMl8xNwkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAxNywgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDIzX1BBRF9FTUlfQTA5X19HUE9fMl8xOAkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAxOCwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDIzX1BBRF9FTUlfQTEwX19HUE9fMl8xOQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAxOSwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDIzX1BBRF9FTUlfQTExX19HUE9fMl8yMAkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAyMCwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDIzX1BBRF9FTUlfQTEyX19HUE9fMl8yMQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAyMSwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDIzX1BBRF9FTUlfQkEwX19HUE9fMl8yMgkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAyMiwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDIzX1BBRF9FTUlfQkExX19HUE9fMl8yMwkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAyMywgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDIzX1BBRF9FTUlfQ0FTTl9fR1BPXzJfMjQJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMjQsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyM19QQURfRU1JX0NFME5fX0dQT18yXzI1CQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDI1LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjNfUEFEX0VNSV9DRTFOX19HUE9fMl8yNgkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAyNiwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDIzX1BBRF9HUE1JX0NFMU5fX0dQT18yXzI3CQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDI3LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjNfUEFEX0dQTUlfQ0UwTl9fR1BPXzJfMjgJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMjgsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyM19QQURfRU1JX0NLRV9fR1BPXzJfMjkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMjksIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyM19QQURfRU1JX1JBU05fX0dQT18yXzMwCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDMwLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjNfUEFEX0VNSV9XRU5fX0dQT18yXzMxCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDMxLCBQQURfTVVYU0VMX0dQSU8pCisKKyNlbmRpZiAvKiBfX01BQ0hfSU9NVVhfTVgyM19IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXhzL2luY2x1ZGUvbWFjaC9pb211eC1teDI4LmggYi9hcmNoL2FybS9tYWNoLW14cy9pbmNsdWRlL21hY2gvaW9tdXgtbXgyOC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1MGZlZmQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW14cy9pbmNsdWRlL21hY2gvaW9tdXgtbXgyOC5oCkBAIC0wLDAgKzEsNTM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgQW1pdCBLdWNoZXJpYSA8YW1pdC5rdWNoZXJpYUBjYW5vbmljYWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDEwIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKgorICogVGhlIGNvZGUgY29udGFpbmVkIGhlcmVpbiBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBWZXJzaW9uIDIgb3IgbGF0ZXIgYXQgdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6CisgKgorICogaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ncGwtbGljZW5zZS5odG1sCisgKiBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwKKyAqLworCisjaWZuZGVmIF9fTUFDSF9JT01VWF9NWDI4X0hfXworI2RlZmluZSBfX01BQ0hfSU9NVVhfTVgyOF9IX18KKworI2luY2x1ZGUgPG1hY2gvaW9tdXguaD4KKworLyoKKyAqIFRoZSBuYW1pbmcgY29udmVudGlvbiBmb3IgdGhlIHBhZCBtb2RlcyBpcyBNWDI4X1BBRF88cGFkbmFtZT5fXzxwYWRtb2RlPgorICogSWYgPHBhZG5hbWU+IG9yIDxwYWRtb2RlPiByZWZlcnMgdG8gYSBHUElPLCBpdCBpcyBuYW1lZCBHUElPXzx1bml0Pl88bnVtPgorICogU2VlIGFsc28gaW9tdXguaAorICoKKyAqCQkJCQkJCQkJQkFOSwlQSU4JTVVYCisgKi8KKy8qIE1VWFNFTF8wICovCisjZGVmaW5lIE1YMjhfUEFEX0dQTUlfRDAwX19HUE1JX0QwCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAgMCwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9HUE1JX0QwMV9fR1BNSV9EMQkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgIDEsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfR1BNSV9EMDJfX0dQTUlfRDIJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsICAyLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0dQTUlfRDAzX19HUE1JX0QzCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAgMywgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9HUE1JX0QwNF9fR1BNSV9ENAkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgIDQsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfR1BNSV9EMDVfX0dQTUlfRDUJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsICA1LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0dQTUlfRDA2X19HUE1JX0Q2CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAgNiwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9HUE1JX0QwN19fR1BNSV9ENwkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgIDcsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfR1BNSV9DRTBOX19HUE1JX0NFME4JCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDE2LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0dQTUlfQ0UxTl9fR1BNSV9DRTFOCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAxNywgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9HUE1JX0NFMk5fX0dQTUlfQ0UyTgkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMTgsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfR1BNSV9DRTNOX19HUE1JX0NFM04JCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDE5LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0dQTUlfUkRZMF9fR1BNSV9SRUFEWTAJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDIwLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0dQTUlfUkRZMV9fR1BNSV9SRUFEWTEJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDIxLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0dQTUlfUkRZMl9fR1BNSV9SRUFEWTIJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDIyLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0dQTUlfUkRZM19fR1BNSV9SRUFEWTMJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDIzLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0dQTUlfUkROX19HUE1JX1JETgkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMjQsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfR1BNSV9XUk5fX0dQTUlfV1JOCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAyNSwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9HUE1JX0FMRV9fR1BNSV9BTEUJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDI2LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0dQTUlfQ0xFX19HUE1JX0NMRQkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMjcsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfR1BNSV9SRVNFVE5fX0dQTUlfUkVTRVROCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDI4LCBQQURfTVVYU0VMXzApCisKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QwMF9fTENEX0QwCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAgMCwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDAxX19MQ0RfRDEJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsICAxLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMDJfX0xDRF9EMgkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgIDIsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QwM19fTENEX0QzCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAgMywgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDA0X19MQ0RfRDQJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsICA0LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMDVfX0xDRF9ENQkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgIDUsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QwNl9fTENEX0Q2CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAgNiwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDA3X19MQ0RfRDcJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsICA3LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMDhfX0xDRF9EOAkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgIDgsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QwOV9fTENEX0Q5CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAgOSwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDEwX19MQ0RfRDEwCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAxMCwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDExX19MQ0RfRDExCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAxMSwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDEyX19MQ0RfRDEyCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAxMiwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDEzX19MQ0RfRDEzCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAxMywgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDE0X19MQ0RfRDE0CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAxNCwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDE1X19MQ0RfRDE1CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAxNSwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDE2X19MQ0RfRDE2CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAxNiwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDE3X19MQ0RfRDE3CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAxNywgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDE4X19MQ0RfRDE4CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAxOCwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDE5X19MQ0RfRDE5CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAxOSwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDIwX19MQ0RfRDIwCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAyMCwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDIxX19MQ0RfRDIxCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAyMSwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDIyX19MQ0RfRDIyCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAyMiwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDIzX19MQ0RfRDIzCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAyMywgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfUkRfRV9fTENEX1JEX0UJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDI0LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9XUl9SV05fX0xDRF9XUl9SV04JCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDI1LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9SU19fTENEX1JTCQkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMjYsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfTENEX0NTX19MQ0RfQ1MJCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAyNywgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfVlNZTkNfX0xDRF9WU1lOQwkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMjgsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfTENEX0hTWU5DX19MQ0RfSFNZTkMJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDI5LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9ET1RDTEtfX0xDRF9ET1RDTEsJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDMwLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9FTkFCTEVfX0xDRF9FTkFCTEUJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDMxLCBQQURfTVVYU0VMXzApCisKKyNkZWZpbmUgTVgyOF9QQURfU1NQMF9EQVRBMF9fU1NQMF9EMAkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgIDAsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfU1NQMF9EQVRBMV9fU1NQMF9EMQkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgIDEsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfU1NQMF9EQVRBMl9fU1NQMF9EMgkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgIDIsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfU1NQMF9EQVRBM19fU1NQMF9EMwkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgIDMsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfU1NQMF9EQVRBNF9fU1NQMF9ENAkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgIDQsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfU1NQMF9EQVRBNV9fU1NQMF9ENQkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgIDUsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfU1NQMF9EQVRBNl9fU1NQMF9ENgkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgIDYsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfU1NQMF9EQVRBN19fU1NQMF9ENwkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgIDcsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfU1NQMF9DTURfX1NTUDBfQ01ECQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAgOCwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9TU1AwX0RFVEVDVF9fU1NQMF9DQVJEX0RFVEVDVAkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAgOSwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9TU1AwX1NDS19fU1NQMF9TQ0sJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDEwLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX1NTUDFfU0NLX19TU1AxX1NDSwkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMTIsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfU1NQMV9DTURfX1NTUDFfQ01ECQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAxMywgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9TU1AxX0RBVEEwX19TU1AxX0QwCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAxNCwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9TU1AxX0RBVEEzX19TU1AxX0QzCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAxNSwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9TU1AyX1NDS19fU1NQMl9TQ0sJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDE2LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX1NTUDJfTU9TSV9fU1NQMl9DTUQJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDE3LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX1NTUDJfTUlTT19fU1NQMl9EMAkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMTgsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfU1NQMl9TUzBfX1NTUDJfRDMJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDE5LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX1NTUDJfU1MxX19TU1AyX0Q0CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAyMCwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9TU1AyX1NTMl9fU1NQMl9ENQkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMjEsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfU1NQM19TQ0tfX1NTUDNfU0NLCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAyNCwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9TU1AzX01PU0lfX1NTUDNfQ01ECQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAyNSwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9TU1AzX01JU09fX1NTUDNfRDAJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDI2LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX1NTUDNfU1MwX19TU1AzX0QzCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAyNywgUEFEX01VWFNFTF8wKQorCisjZGVmaW5lIE1YMjhfUEFEX0FVQVJUMF9SWF9fQVVBUlQwX1JYCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAgMCwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9BVUFSVDBfVFhfX0FVQVJUMF9UWAkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgIDEsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfQVVBUlQwX0NUU19fQVVBUlQwX0NUUwkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgIDIsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfQVVBUlQwX1JUU19fQVVBUlQwX1JUUwkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgIDMsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfQVVBUlQxX1JYX19BVUFSVDFfUlgJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsICA0LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0FVQVJUMV9UWF9fQVVBUlQxX1RYCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAgNSwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9BVUFSVDFfQ1RTX19BVUFSVDFfQ1RTCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAgNiwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9BVUFSVDFfUlRTX19BVUFSVDFfUlRTCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAgNywgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9BVUFSVDJfUlhfX0FVQVJUMl9SWAkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgIDgsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfQVVBUlQyX1RYX19BVUFSVDJfVFgJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsICA5LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0FVQVJUMl9DVFNfX0FVQVJUMl9DVFMJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDEwLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0FVQVJUMl9SVFNfX0FVQVJUMl9SVFMJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDExLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0FVQVJUM19SWF9fQVVBUlQzX1JYCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAxMiwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9BVUFSVDNfVFhfX0FVQVJUM19UWAkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMTMsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfQVVBUlQzX0NUU19fQVVBUlQzX0NUUwkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMTQsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfQVVBUlQzX1JUU19fQVVBUlQzX1JUUwkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMTUsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfUFdNMF9fUFdNXzAJCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAxNiwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9QV00xX19QV01fMQkJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDE3LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX1BXTTJfX1BXTV8yCQkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMTgsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfU0FJRjBfTUNMS19fU0FJRjBfTUNMSwkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMjAsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfU0FJRjBfTFJDTEtfX1NBSUYwX0xSQ0xLCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDIxLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX1NBSUYwX0JJVENMS19fU0FJRjBfQklUQ0xLCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDIyLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX1NBSUYwX1NEQVRBMF9fU0FJRjBfU0RBVEEwCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDIzLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0kyQzBfU0NMX19JMkMwX1NDTAkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMjQsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfSTJDMF9TREFfX0kyQzBfU0RBCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAyNSwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9TQUlGMV9TREFUQTBfX1NBSUYxX1NEQVRBMAkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAyNiwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9TUERJRl9fU1BESUZfVFgJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDI3LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX1BXTTNfX1BXTV8zCQkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMjgsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfUFdNNF9fUFdNXzQJCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAyOSwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfUkVTRVRfX0xDRF9SRVNFVAkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMzAsIFBBRF9NVVhTRUxfMCkKKworI2RlZmluZSBNWDI4X1BBRF9FTkVUMF9NRENfX0VORVQwX01EQwkJCU1YU19JT01VWF9QQURfTkFLRUQoNCwgIDAsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfRU5FVDBfTURJT19fRU5FVDBfTURJTwkJCU1YU19JT01VWF9QQURfTkFLRUQoNCwgIDEsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfRU5FVDBfUlhfRU5fX0VORVQwX1JYX0VOCQlNWFNfSU9NVVhfUEFEX05BS0VEKDQsICAyLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0VORVQwX1JYRDBfX0VORVQwX1JYRDAJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDQsICAzLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0VORVQwX1JYRDFfX0VORVQwX1JYRDEJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDQsICA0LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0VORVQwX1RYX0NMS19fRU5FVDBfVFhfQ0xLCQlNWFNfSU9NVVhfUEFEX05BS0VEKDQsICA1LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0VORVQwX1RYX0VOX19FTkVUMF9UWF9FTgkJTVhTX0lPTVVYX1BBRF9OQUtFRCg0LCAgNiwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9FTkVUMF9UWEQwX19FTkVUMF9UWEQwCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg0LCAgNywgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9FTkVUMF9UWEQxX19FTkVUMF9UWEQxCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg0LCAgOCwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9FTkVUMF9SWEQyX19FTkVUMF9SWEQyCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg0LCAgOSwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9FTkVUMF9SWEQzX19FTkVUMF9SWEQzCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg0LCAxMCwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9FTkVUMF9UWEQyX19FTkVUMF9UWEQyCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg0LCAxMSwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9FTkVUMF9UWEQzX19FTkVUMF9UWEQzCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg0LCAxMiwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9FTkVUMF9SWF9DTEtfX0VORVQwX1JYX0NMSwkJTVhTX0lPTVVYX1BBRF9OQUtFRCg0LCAxMywgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9FTkVUMF9DT0xfX0VORVQwX0NPTAkJCU1YU19JT01VWF9QQURfTkFLRUQoNCwgMTQsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfRU5FVDBfQ1JTX19FTkVUMF9DUlMJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDQsIDE1LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0VORVRfQ0xLX19DTEtDVFJMX0VORVQJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDQsIDE2LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0pUQUdfUlRDS19fSlRBR19SVENLCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg0LCAyMCwgUEFEX01VWFNFTF8wKQorCisjZGVmaW5lIE1YMjhfUEFEX0VNSV9EMDBfX0VNSV9EQVRBMAkJCU1YU19JT01VWF9QQURfTkFLRUQoNSwgIDAsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfRU1JX0QwMV9fRU1JX0RBVEExCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg1LCAgMSwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9FTUlfRDAyX19FTUlfREFUQTIJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDUsICAyLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0VNSV9EMDNfX0VNSV9EQVRBMwkJCU1YU19JT01VWF9QQURfTkFLRUQoNSwgIDMsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfRU1JX0QwNF9fRU1JX0RBVEE0CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg1LCAgNCwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9FTUlfRDA1X19FTUlfREFUQTUJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDUsICA1LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0VNSV9EMDZfX0VNSV9EQVRBNgkJCU1YU19JT01VWF9QQURfTkFLRUQoNSwgIDYsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfRU1JX0QwN19fRU1JX0RBVEE3CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg1LCAgNywgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9FTUlfRDA4X19FTUlfREFUQTgJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDUsICA4LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0VNSV9EMDlfX0VNSV9EQVRBOQkJCU1YU19JT01VWF9QQURfTkFLRUQoNSwgIDksIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfRU1JX0QxMF9fRU1JX0RBVEExMAkJCU1YU19JT01VWF9QQURfTkFLRUQoNSwgMTAsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfRU1JX0QxMV9fRU1JX0RBVEExMQkJCU1YU19JT01VWF9QQURfTkFLRUQoNSwgMTEsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfRU1JX0QxMl9fRU1JX0RBVEExMgkJCU1YU19JT01VWF9QQURfTkFLRUQoNSwgMTIsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfRU1JX0QxM19fRU1JX0RBVEExMwkJCU1YU19JT01VWF9QQURfTkFLRUQoNSwgMTMsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfRU1JX0QxNF9fRU1JX0RBVEExNAkJCU1YU19JT01VWF9QQURfTkFLRUQoNSwgMTQsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfRU1JX0QxNV9fRU1JX0RBVEExNQkJCU1YU19JT01VWF9QQURfTkFLRUQoNSwgMTUsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfRU1JX09EVDBfX0VNSV9PRFQwCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg1LCAxNiwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9FTUlfRFFNMF9fRU1JX0RRTTAJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDUsIDE3LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0VNSV9PRFQxX19FTUlfT0RUMQkJCU1YU19JT01VWF9QQURfTkFLRUQoNSwgMTgsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfRU1JX0RRTTFfX0VNSV9EUU0xCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg1LCAxOSwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9FTUlfRERSX09QRU5fRkJfX0VNSV9ERFJfT1BFTl9GRUVEQkFDSwlNWFNfSU9NVVhfUEFEX05BS0VEKDUsIDIwLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0VNSV9DTEtfX0VNSV9DTEsJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDUsIDIxLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0VNSV9EUVMwX19FTUlfRFFTMAkJCU1YU19JT01VWF9QQURfTkFLRUQoNSwgMjIsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfRU1JX0RRUzFfX0VNSV9EUVMxCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg1LCAyMywgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9FTUlfRERSX09QRU5fX0VNSV9ERFJfT1BFTgkJTVhTX0lPTVVYX1BBRF9OQUtFRCg1LCAyNiwgUEFEX01VWFNFTF8wKQorCisjZGVmaW5lIE1YMjhfUEFEX0VNSV9BMDBfX0VNSV9BRERSMAkJCU1YU19JT01VWF9QQURfTkFLRUQoNiwgIDAsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfRU1JX0EwMV9fRU1JX0FERFIxCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg2LCAgMSwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9FTUlfQTAyX19FTUlfQUREUjIJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDYsICAyLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0VNSV9BMDNfX0VNSV9BRERSMwkJCU1YU19JT01VWF9QQURfTkFLRUQoNiwgIDMsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfRU1JX0EwNF9fRU1JX0FERFI0CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg2LCAgNCwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9FTUlfQTA1X19FTUlfQUREUjUJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDYsICA1LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0VNSV9BMDZfX0VNSV9BRERSNgkJCU1YU19JT01VWF9QQURfTkFLRUQoNiwgIDYsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfRU1JX0EwN19fRU1JX0FERFI3CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg2LCAgNywgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9FTUlfQTA4X19FTUlfQUREUjgJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDYsICA4LCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0VNSV9BMDlfX0VNSV9BRERSOQkJCU1YU19JT01VWF9QQURfTkFLRUQoNiwgIDksIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfRU1JX0ExMF9fRU1JX0FERFIxMAkJCU1YU19JT01VWF9QQURfTkFLRUQoNiwgMTAsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfRU1JX0ExMV9fRU1JX0FERFIxMQkJCU1YU19JT01VWF9QQURfTkFLRUQoNiwgMTEsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfRU1JX0ExMl9fRU1JX0FERFIxMgkJCU1YU19JT01VWF9QQURfTkFLRUQoNiwgMTIsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfRU1JX0ExM19fRU1JX0FERFIxMwkJCU1YU19JT01VWF9QQURfTkFLRUQoNiwgMTMsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfRU1JX0ExNF9fRU1JX0FERFIxNAkJCU1YU19JT01VWF9QQURfTkFLRUQoNiwgMTQsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfRU1JX0JBMF9fRU1JX0JBMAkJCU1YU19JT01VWF9QQURfTkFLRUQoNiwgMTYsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfRU1JX0JBMV9fRU1JX0JBMQkJCU1YU19JT01VWF9QQURfTkFLRUQoNiwgMTcsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfRU1JX0JBMl9fRU1JX0JBMgkJCU1YU19JT01VWF9QQURfTkFLRUQoNiwgMTgsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfRU1JX0NBU05fX0VNSV9DQVNOCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg2LCAxOSwgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9FTUlfUkFTTl9fRU1JX1JBU04JCQlNWFNfSU9NVVhfUEFEX05BS0VEKDYsIDIwLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0VNSV9XRU5fX0VNSV9XRU4JCQlNWFNfSU9NVVhfUEFEX05BS0VEKDYsIDIxLCBQQURfTVVYU0VMXzApCisjZGVmaW5lIE1YMjhfUEFEX0VNSV9DRTBOX19FTUlfQ0UwTgkJCU1YU19JT01VWF9QQURfTkFLRUQoNiwgMjIsIFBBRF9NVVhTRUxfMCkKKyNkZWZpbmUgTVgyOF9QQURfRU1JX0NFMU5fX0VNSV9DRTFOCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg2LCAyMywgUEFEX01VWFNFTF8wKQorI2RlZmluZSBNWDI4X1BBRF9FTUlfQ0tFX19FTUlfQ0tFCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg2LCAyNCwgUEFEX01VWFNFTF8wKQorCisvKiBNVVhTRUxfMSAqLworI2RlZmluZSBNWDI4X1BBRF9HUE1JX0QwMF9fU1NQMV9EMAkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgIDAsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfR1BNSV9EMDFfX1NTUDFfRDEJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsICAxLCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX0dQTUlfRDAyX19TU1AxX0QyCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAgMiwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9HUE1JX0QwM19fU1NQMV9EMwkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgIDMsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfR1BNSV9EMDRfX1NTUDFfRDQJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsICA0LCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX0dQTUlfRDA1X19TU1AxX0Q1CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAgNSwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9HUE1JX0QwNl9fU1NQMV9ENgkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgIDYsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfR1BNSV9EMDdfX1NTUDFfRDcJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsICA3LCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX0dQTUlfQ0UwTl9fU1NQM19EMAkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMTYsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfR1BNSV9DRTFOX19TU1AzX0QzCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAxNywgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9HUE1JX0NFMk5fX0NBTjFfVFgJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDE4LCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX0dQTUlfQ0UzTl9fQ0FOMV9SWAkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMTksIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfR1BNSV9SRFkwX19TU1AxX0NBUkRfREVURUNUCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDIwLCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX0dQTUlfUkRZMV9fU1NQMV9DTUQJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDIxLCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX0dQTUlfUkRZMl9fQ0FOMF9UWAkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMjIsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfR1BNSV9SRFkzX19DQU4wX1JYCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAyMywgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9HUE1JX1JETl9fU1NQM19TQ0sJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDI0LCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX0dQTUlfV1JOX19TU1AxX1NDSwkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMjUsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfR1BNSV9BTEVfX1NTUDNfRDEJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDI2LCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX0dQTUlfQ0xFX19TU1AzX0QyCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAyNywgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9HUE1JX1JFU0VUTl9fU1NQM19DTUQJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDI4LCBQQURfTVVYU0VMXzEpCisKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QwM19fRVRNX0RBOAkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgIDMsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QwNF9fRVRNX0RBOQkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgIDQsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QwOF9fRVRNX0RBMwkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgIDgsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QwOV9fRVRNX0RBNAkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgIDksIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QyMF9fRU5FVDFfMTU4OF9FVkVOVDJfT1VUCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDIwLCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMjFfX0VORVQxXzE1ODhfRVZFTlQyX0lOCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDIxLCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMjJfX0VORVQxXzE1ODhfRVZFTlQzX09VVAkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAyMiwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDIzX19FTkVUMV8xNTg4X0VWRU5UM19JTgkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAyMywgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfUkRfRV9fTENEX1ZTWU5DCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAyNCwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfV1JfUldOX19MQ0RfSFNZTkMJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDI1LCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9SU19fTENEX0RPVENMSwkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMjYsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfTENEX0NTX19MQ0RfRU5BQkxFCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAyNywgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfVlNZTkNfX1NBSUYxX1NEQVRBMAkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAyOCwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfSFNZTkNfX1NBSUYxX1NEQVRBMQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAyOSwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRE9UQ0xLX19TQUlGMV9NQ0xLCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAzMCwgUEFEX01VWFNFTF8xKQorCisjZGVmaW5lIE1YMjhfUEFEX1NTUDBfREFUQTRfX1NTUDJfRDAJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsICA0LCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX1NTUDBfREFUQTVfX1NTUDJfRDMJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsICA1LCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX1NTUDBfREFUQTZfX1NTUDJfQ01ECQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAgNiwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9TU1AwX0RBVEE3X19TU1AyX1NDSwkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgIDcsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfU1NQMV9TQ0tfX1NTUDJfRDEJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDEyLCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX1NTUDFfQ01EX19TU1AyX0QyCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAxMywgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9TU1AxX0RBVEEwX19TU1AyX0Q2CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAxNCwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9TU1AxX0RBVEEzX19TU1AyX0Q3CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAxNSwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9TU1AyX1NDS19fQVVBUlQyX1JYCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAxNiwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9TU1AyX01PU0lfX0FVQVJUMl9UWAkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMTcsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfU1NQMl9NSVNPX19BVUFSVDNfUlgJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDE4LCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX1NTUDJfU1MwX19BVUFSVDNfVFgJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDE5LCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX1NTUDJfU1MxX19TU1AyX0QxCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAyMCwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9TU1AyX1NTMl9fU1NQMl9EMgkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMjEsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfU1NQM19TQ0tfX0FVQVJUNF9UWAkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMjQsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfU1NQM19NT1NJX19BVUFSVDRfUlgJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDI1LCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX1NTUDNfTUlTT19fQVVBUlQ0X1JUUwkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMjYsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfU1NQM19TUzBfX0FVQVJUNF9DVFMJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDI3LCBQQURfTVVYU0VMXzEpCisKKyNkZWZpbmUgTVgyOF9QQURfQVVBUlQwX1JYX19JMkMwX1NDTAkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgIDAsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfQVVBUlQwX1RYX19JMkMwX1NEQQkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgIDEsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfQVVBUlQwX0NUU19fQVVBUlQ0X1JYCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAgMiwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9BVUFSVDBfUlRTX19BVUFSVDRfVFgJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsICAzLCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX0FVQVJUMV9SWF9fU1NQMl9DQVJEX0RFVEVDVAkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAgNCwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9BVUFSVDFfVFhfX1NTUDNfQ0FSRF9ERVRFQ1QJCU1YU19JT01VWF9QQURfTkFLRUQoMywgIDUsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfQVVBUlQxX0NUU19fVVNCMF9PVkVSQ1VSUkVOVAkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAgNiwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9BVUFSVDFfUlRTX19VU0IwX0lECQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAgNywgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9BVUFSVDJfUlhfX1NTUDNfRDEJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsICA4LCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX0FVQVJUMl9UWF9fU1NQM19EMgkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgIDksIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfQVVBUlQyX0NUU19fSTJDMV9TQ0wJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDEwLCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX0FVQVJUMl9SVFNfX0kyQzFfU0RBCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAxMSwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9BVUFSVDNfUlhfX0NBTjBfVFgJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDEyLCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX0FVQVJUM19UWF9fQ0FOMF9SWAkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMTMsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfQVVBUlQzX0NUU19fQ0FOMV9UWAkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMTQsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfQVVBUlQzX1JUU19fQ0FOMV9SWAkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMTUsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfUFdNMF9fSTJDMV9TQ0wJCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAxNiwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9QV00xX19JMkMxX1NEQQkJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDE3LCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX1BXTTJfX1VTQjBfSUQJCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAxOCwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9TQUlGMF9NQ0xLX19QV01fMwkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMjAsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfU0FJRjBfTFJDTEtfX1BXTV80CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAyMSwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9TQUlGMF9CSVRDTEtfX1BXTV81CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAyMiwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9TQUlGMF9TREFUQTBfX1BXTV82CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAyMywgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9JMkMwX1NDTF9fVElNUk9UX1JPVEFSWUEJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMjQsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfSTJDMF9TREFfX1RJTVJPVF9ST1RBUllCCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDI1LCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX1NBSUYxX1NEQVRBMF9fUFdNXzcJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDI2LCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9SRVNFVF9fTENEX1ZTWU5DCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAzMCwgUEFEX01VWFNFTF8xKQorCisjZGVmaW5lIE1YMjhfUEFEX0VORVQwX01EQ19fR1BNSV9DRTROCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg0LCAgMCwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9FTkVUMF9NRElPX19HUE1JX0NFNU4JCQlNWFNfSU9NVVhfUEFEX05BS0VEKDQsICAxLCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX0VORVQwX1JYX0VOX19HUE1JX0NFNk4JCQlNWFNfSU9NVVhfUEFEX05BS0VEKDQsICAyLCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX0VORVQwX1JYRDBfX0dQTUlfQ0U3TgkJCU1YU19JT01VWF9QQURfTkFLRUQoNCwgIDMsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfRU5FVDBfUlhEMV9fR1BNSV9SRUFEWTQJCU1YU19JT01VWF9QQURfTkFLRUQoNCwgIDQsIFBBRF9NVVhTRUxfMSkKKyNkZWZpbmUgTVgyOF9QQURfRU5FVDBfVFhfQ0xLX19IU0FEQ19UUklHR0VSCQlNWFNfSU9NVVhfUEFEX05BS0VEKDQsICA1LCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX0VORVQwX1RYX0VOX19HUE1JX1JFQURZNQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg0LCAgNiwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9FTkVUMF9UWEQwX19HUE1JX1JFQURZNgkJTVhTX0lPTVVYX1BBRF9OQUtFRCg0LCAgNywgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9FTkVUMF9UWEQxX19HUE1JX1JFQURZNwkJTVhTX0lPTVVYX1BBRF9OQUtFRCg0LCAgOCwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9FTkVUMF9SWEQyX19FTkVUMV9SWEQwCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg0LCAgOSwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9FTkVUMF9SWEQzX19FTkVUMV9SWEQxCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg0LCAxMCwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9FTkVUMF9UWEQyX19FTkVUMV9UWEQwCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg0LCAxMSwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9FTkVUMF9UWEQzX19FTkVUMV9UWEQxCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg0LCAxMiwgUEFEX01VWFNFTF8xKQorI2RlZmluZSBNWDI4X1BBRF9FTkVUMF9SWF9DTEtfX0VORVQwX1JYX0VSCQlNWFNfSU9NVVhfUEFEX05BS0VEKDQsIDEzLCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX0VORVQwX0NPTF9fRU5FVDFfVFhfRU4JCQlNWFNfSU9NVVhfUEFEX05BS0VEKDQsIDE0LCBQQURfTVVYU0VMXzEpCisjZGVmaW5lIE1YMjhfUEFEX0VORVQwX0NSU19fRU5FVDFfUlhfRU4JCQlNWFNfSU9NVVhfUEFEX05BS0VEKDQsIDE1LCBQQURfTVVYU0VMXzEpCisKKy8qIE1VWFNFTF8yICovCisjZGVmaW5lIE1YMjhfUEFEX0dQTUlfQ0UyTl9fRU5FVDBfUlhfRVIJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDE4LCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX0dQTUlfQ0UzTl9fU0FJRjFfTUNMSwkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMTksIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfR1BNSV9SRFkwX19VU0IwX0lECQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAyMCwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9HUE1JX1JEWTJfX0VORVQwX1RYX0VSCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAyMiwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9HUE1JX1JEWTNfX0hTQURDX1RSSUdHRVIJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMjMsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfR1BNSV9BTEVfX1NTUDNfRDQJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDI2LCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX0dQTUlfQ0xFX19TU1AzX0Q1CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAyNywgUEFEX01VWFNFTF8yKQorCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMDBfX0VUTV9EQTAJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsICAwLCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMDFfX0VUTV9EQTEJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsICAxLCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMDJfX0VUTV9EQTIJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsICAyLCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMDNfX0VUTV9EQTMJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsICAzLCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMDRfX0VUTV9EQTQJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsICA0LCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMDVfX0VUTV9EQTUJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsICA1LCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMDZfX0VUTV9EQTYJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsICA2LCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMDdfX0VUTV9EQTcJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsICA3LCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMDhfX0VUTV9EQTgJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsICA4LCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMDlfX0VUTV9EQTkJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsICA5LCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMTBfX0VUTV9EQTEwCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAxMCwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDExX19FVE1fREExMQkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMTEsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QxMl9fRVRNX0RBMTIJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDEyLCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMTNfX0VUTV9EQTEzCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAxMywgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDE0X19FVE1fREExNAkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMTQsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QxNV9fRVRNX0RBMTUJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDE1LCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMTZfX0VUTV9EQTcJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDE2LCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMTdfX0VUTV9EQTYJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDE3LCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMThfX0VUTV9EQTUJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDE4LCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMTlfX0VUTV9EQTQJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDE5LCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMjBfX0VUTV9EQTMJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDIwLCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMjFfX0VUTV9EQTIJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDIxLCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMjJfX0VUTV9EQTEJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDIyLCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMjNfX0VUTV9EQTAJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDIzLCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9SRF9FX19FVE1fVENUTAkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMjQsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfTENEX1dSX1JXTl9fRVRNX1RDTEsJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDI1LCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9IU1lOQ19fRVRNX1RDVEwJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDI5LCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9ET1RDTEtfX0VUTV9UQ0xLCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAzMCwgUEFEX01VWFNFTF8yKQorCisjZGVmaW5lIE1YMjhfUEFEX1NTUDFfU0NLX19FTkVUMF8xNTg4X0VWRU5UMl9PVVQJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAxMiwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9TU1AxX0NNRF9fRU5FVDBfMTU4OF9FVkVOVDJfSU4JCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMTMsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfU1NQMV9EQVRBMF9fRU5FVDBfMTU4OF9FVkVOVDNfT1VUCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMTQsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfU1NQMV9EQVRBM19fRU5FVDBfMTU4OF9FVkVOVDNfSU4JTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAxNSwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9TU1AyX1NDS19fU0FJRjBfU0RBVEExCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAxNiwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9TU1AyX01PU0lfX1NBSUYwX1NEQVRBMgkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAxNywgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9TU1AyX01JU09fX1NBSUYxX1NEQVRBMQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAxOCwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9TU1AyX1NTMF9fU0FJRjFfU0RBVEEyCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAxOSwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9TU1AyX1NTMV9fVVNCMV9PVkVSQ1VSUkVOVAkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAyMCwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9TU1AyX1NTMl9fVVNCMF9PVkVSQ1VSUkVOVAkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAyMSwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9TU1AzX1NDS19fRU5FVDFfMTU4OF9FVkVOVDBfT1VUCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMjQsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfU1NQM19NT1NJX19FTkVUMV8xNTg4X0VWRU5UMF9JTglNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDI1LCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX1NTUDNfTUlTT19fRU5FVDFfMTU4OF9FVkVOVDFfT1VUCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMjYsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfU1NQM19TUzBfX0VORVQxXzE1ODhfRVZFTlQxX0lOCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDI3LCBQQURfTVVYU0VMXzIpCisKKyNkZWZpbmUgTVgyOF9QQURfQVVBUlQwX1JYX19EVUFSVF9DVFMJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsICAwLCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX0FVQVJUMF9UWF9fRFVBUlRfUlRTCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAgMSwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9BVUFSVDBfQ1RTX19EVUFSVF9SWAkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgIDIsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfQVVBUlQwX1JUU19fRFVBUlRfVFgJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsICAzLCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX0FVQVJUMV9SWF9fUFdNXzAJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsICA0LCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX0FVQVJUMV9UWF9fUFdNXzEJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsICA1LCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX0FVQVJUMV9DVFNfX1RJTVJPVF9ST1RBUllBCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsICA2LCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX0FVQVJUMV9SVFNfX1RJTVJPVF9ST1RBUllCCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsICA3LCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX0FVQVJUMl9SWF9fU1NQM19ENAkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgIDgsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfQVVBUlQyX1RYX19TU1AzX0Q1CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAgOSwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9BVUFSVDJfQ1RTX19TQUlGMV9CSVRDTEsJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMTAsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfQVVBUlQyX1JUU19fU0FJRjFfTFJDTEsJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMTEsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfQVVBUlQzX1JYX19FTkVUMF8xNTg4X0VWRU5UMF9PVVQJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAxMiwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9BVUFSVDNfVFhfX0VORVQwXzE1ODhfRVZFTlQwX0lOCU1YU19JT01VWF9QQURfTkFLRUQoMywgMTMsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfQVVBUlQzX0NUU19fRU5FVDBfMTU4OF9FVkVOVDFfT1VUCU1YU19JT01VWF9QQURfTkFLRUQoMywgMTQsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfQVVBUlQzX1JUU19fRU5FVDBfMTU4OF9FVkVOVDFfSU4JTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAxNSwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9QV00wX19EVUFSVF9SWAkJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDE2LCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX1BXTTFfX0RVQVJUX1RYCQkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMTcsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfUFdNMl9fVVNCMV9PVkVSQ1VSUkVOVAkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMTgsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfU0FJRjBfTUNMS19fQVVBUlQ0X0NUUwkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMjAsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfU0FJRjBfTFJDTEtfX0FVQVJUNF9SVFMJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMjEsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfU0FJRjBfQklUQ0xLX19BVUFSVDRfUlgJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMjIsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfU0FJRjBfU0RBVEEwX19BVUFSVDRfVFgJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMjMsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfSTJDMF9TQ0xfX0RVQVJUX1JYCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAyNCwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9JMkMwX1NEQV9fRFVBUlRfVFgJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDI1LCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX1NBSUYxX1NEQVRBMF9fU0FJRjBfU0RBVEExCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDI2LCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX1NQRElGX19FTkVUMV9SWF9FUgkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMjcsIFBBRF9NVVhTRUxfMikKKworI2RlZmluZSBNWDI4X1BBRF9FTkVUMF9NRENfX1NBSUYwX1NEQVRBMQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg0LCAgMCwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9FTkVUMF9NRElPX19TQUlGMF9TREFUQTIJCU1YU19JT01VWF9QQURfTkFLRUQoNCwgIDEsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfRU5FVDBfUlhfRU5fX1NBSUYxX1NEQVRBMQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg0LCAgMiwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9FTkVUMF9SWEQwX19TQUlGMV9TREFUQTIJCU1YU19JT01VWF9QQURfTkFLRUQoNCwgIDMsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfRU5FVDBfVFhfQ0xLX19FTkVUMF8xNTg4X0VWRU5UMl9PVVQJTVhTX0lPTVVYX1BBRF9OQUtFRCg0LCAgNSwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9FTkVUMF9SWEQyX19FTkVUMF8xNTg4X0VWRU5UMF9PVVQJTVhTX0lPTVVYX1BBRF9OQUtFRCg0LCAgOSwgUEFEX01VWFNFTF8yKQorI2RlZmluZSBNWDI4X1BBRF9FTkVUMF9SWEQzX19FTkVUMF8xNTg4X0VWRU5UMF9JTglNWFNfSU9NVVhfUEFEX05BS0VEKDQsIDEwLCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX0VORVQwX1RYRDJfX0VORVQwXzE1ODhfRVZFTlQxX09VVAlNWFNfSU9NVVhfUEFEX05BS0VEKDQsIDExLCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX0VORVQwX1RYRDNfX0VORVQwXzE1ODhfRVZFTlQxX0lOCU1YU19JT01VWF9QQURfTkFLRUQoNCwgMTIsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfRU5FVDBfUlhfQ0xLX19FTkVUMF8xNTg4X0VWRU5UMl9JTglNWFNfSU9NVVhfUEFEX05BS0VEKDQsIDEzLCBQQURfTVVYU0VMXzIpCisjZGVmaW5lIE1YMjhfUEFEX0VORVQwX0NPTF9fRU5FVDBfMTU4OF9FVkVOVDNfT1VUCU1YU19JT01VWF9QQURfTkFLRUQoNCwgMTQsIFBBRF9NVVhTRUxfMikKKyNkZWZpbmUgTVgyOF9QQURfRU5FVDBfQ1JTX19FTkVUMF8xNTg4X0VWRU5UM19JTglNWFNfSU9NVVhfUEFEX05BS0VEKDQsIDE1LCBQQURfTVVYU0VMXzIpCisKKy8qIE1VWFNFTF9HUElPICovCisjZGVmaW5lIE1YMjhfUEFEX0dQTUlfRDAwX19HUElPXzBfMAkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgIDAsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfR1BNSV9EMDFfX0dQSU9fMF8xCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAgMSwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9HUE1JX0QwMl9fR1BJT18wXzIJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsICAyLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0dQTUlfRDAzX19HUElPXzBfMwkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgIDMsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfR1BNSV9EMDRfX0dQSU9fMF80CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAgNCwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9HUE1JX0QwNV9fR1BJT18wXzUJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsICA1LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0dQTUlfRDA2X19HUElPXzBfNgkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgIDYsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfR1BNSV9EMDdfX0dQSU9fMF83CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAgNywgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9HUE1JX0NFME5fX0dQSU9fMF8xNgkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMTYsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfR1BNSV9DRTFOX19HUElPXzBfMTcJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDE3LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0dQTUlfQ0UyTl9fR1BJT18wXzE4CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAxOCwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9HUE1JX0NFM05fX0dQSU9fMF8xOQkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMTksIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfR1BNSV9SRFkwX19HUElPXzBfMjAJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDIwLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0dQTUlfUkRZMV9fR1BJT18wXzIxCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgwLCAyMSwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9HUE1JX1JEWTJfX0dQSU9fMF8yMgkJCU1YU19JT01VWF9QQURfTkFLRUQoMCwgMjIsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfR1BNSV9SRFkzX19HUElPXzBfMjMJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDIzLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0dQTUlfUkROX19HUElPXzBfMjQJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDI0LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0dQTUlfV1JOX19HUElPXzBfMjUJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDI1LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0dQTUlfQUxFX19HUElPXzBfMjYJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDI2LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0dQTUlfQ0xFX19HUElPXzBfMjcJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDI3LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0dQTUlfUkVTRVROX19HUElPXzBfMjgJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDAsIDI4LCBQQURfTVVYU0VMX0dQSU8pCisKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QwMF9fR1BJT18xXzAJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsICAwLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMDFfX0dQSU9fMV8xCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAgMSwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDAyX19HUElPXzFfMgkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgIDIsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QwM19fR1BJT18xXzMJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsICAzLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMDRfX0dQSU9fMV80CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAgNCwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDA1X19HUElPXzFfNQkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgIDUsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QwNl9fR1BJT18xXzYJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsICA2LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMDdfX0dQSU9fMV83CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAgNywgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDA4X19HUElPXzFfOAkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgIDgsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QwOV9fR1BJT18xXzkJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsICA5LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMTBfX0dQSU9fMV8xMAkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMTAsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QxMV9fR1BJT18xXzExCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAxMSwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDEyX19HUElPXzFfMTIJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDEyLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMTNfX0dQSU9fMV8xMwkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMTMsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QxNF9fR1BJT18xXzE0CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAxNCwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDE1X19HUElPXzFfMTUJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDE1LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMTZfX0dQSU9fMV8xNgkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMTYsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QxN19fR1BJT18xXzE3CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAxNywgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDE4X19HUElPXzFfMTgJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDE4LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMTlfX0dQSU9fMV8xOQkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMTksIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QyMF9fR1BJT18xXzIwCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAyMCwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRDIxX19HUElPXzFfMjEJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDIxLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9EMjJfX0dQSU9fMV8yMgkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMjIsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfTENEX0QyM19fR1BJT18xXzIzCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAyMywgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfUkRfRV9fR1BJT18xXzI0CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAyNCwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfV1JfUldOX19HUElPXzFfMjUJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDI1LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9SU19fR1BJT18xXzI2CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAyNiwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfQ1NfX0dQSU9fMV8yNwkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMjcsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfTENEX1ZTWU5DX19HUElPXzFfMjgJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDI4LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9IU1lOQ19fR1BJT18xXzI5CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgxLCAyOSwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfRE9UQ0xLX19HUElPXzFfMzAJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDEsIDMwLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0xDRF9FTkFCTEVfX0dQSU9fMV8zMQkJCU1YU19JT01VWF9QQURfTkFLRUQoMSwgMzEsIFBBRF9NVVhTRUxfR1BJTykKKworI2RlZmluZSBNWDI4X1BBRF9TU1AwX0RBVEEwX19HUElPXzJfMAkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgIDAsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfU1NQMF9EQVRBMV9fR1BJT18yXzEJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsICAxLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX1NTUDBfREFUQTJfX0dQSU9fMl8yCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAgMiwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9TU1AwX0RBVEEzX19HUElPXzJfMwkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgIDMsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfU1NQMF9EQVRBNF9fR1BJT18yXzQJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsICA0LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX1NTUDBfREFUQTVfX0dQSU9fMl81CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAgNSwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9TU1AwX0RBVEE2X19HUElPXzJfNgkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgIDYsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfU1NQMF9EQVRBN19fR1BJT18yXzcJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsICA3LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX1NTUDBfQ01EX19HUElPXzJfOAkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgIDgsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfU1NQMF9ERVRFQ1RfX0dQSU9fMl85CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAgOSwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9TU1AwX1NDS19fR1BJT18yXzEwCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAxMCwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9TU1AxX1NDS19fR1BJT18yXzEyCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAxMiwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9TU1AxX0NNRF9fR1BJT18yXzEzCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAxMywgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9TU1AxX0RBVEEwX19HUElPXzJfMTQJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDE0LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX1NTUDFfREFUQTNfX0dQSU9fMl8xNQkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMTUsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfU1NQMl9TQ0tfX0dQSU9fMl8xNgkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMTYsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfU1NQMl9NT1NJX19HUElPXzJfMTcJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDE3LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX1NTUDJfTUlTT19fR1BJT18yXzE4CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAxOCwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9TU1AyX1NTMF9fR1BJT18yXzE5CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAxOSwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9TU1AyX1NTMV9fR1BJT18yXzIwCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAyMCwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9TU1AyX1NTMl9fR1BJT18yXzIxCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAyMSwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9TU1AzX1NDS19fR1BJT18yXzI0CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgyLCAyNCwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9TU1AzX01PU0lfX0dQSU9fMl8yNQkJCU1YU19JT01VWF9QQURfTkFLRUQoMiwgMjUsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfU1NQM19NSVNPX19HUElPXzJfMjYJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDI2LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX1NTUDNfU1MwX19HUElPXzJfMjcJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDIsIDI3LCBQQURfTVVYU0VMX0dQSU8pCisKKyNkZWZpbmUgTVgyOF9QQURfQVVBUlQwX1JYX19HUElPXzNfMAkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgIDAsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfQVVBUlQwX1RYX19HUElPXzNfMQkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgIDEsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfQVVBUlQwX0NUU19fR1BJT18zXzIJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsICAyLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0FVQVJUMF9SVFNfX0dQSU9fM18zCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAgMywgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9BVUFSVDFfUlhfX0dQSU9fM180CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAgNCwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9BVUFSVDFfVFhfX0dQSU9fM181CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAgNSwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9BVUFSVDFfQ1RTX19HUElPXzNfNgkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgIDYsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfQVVBUlQxX1JUU19fR1BJT18zXzcJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsICA3LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0FVQVJUMl9SWF9fR1BJT18zXzgJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsICA4LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0FVQVJUMl9UWF9fR1BJT18zXzkJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsICA5LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0FVQVJUMl9DVFNfX0dQSU9fM18xMAkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMTAsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfQVVBUlQyX1JUU19fR1BJT18zXzExCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAxMSwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9BVUFSVDNfUlhfX0dQSU9fM18xMgkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMTIsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfQVVBUlQzX1RYX19HUElPXzNfMTMJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDEzLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0FVQVJUM19DVFNfX0dQSU9fM18xNAkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMTQsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfQVVBUlQzX1JUU19fR1BJT18zXzE1CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAxNSwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9QV00wX19HUElPXzNfMTYJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDE2LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX1BXTTFfX0dQSU9fM18xNwkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMTcsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfUFdNMl9fR1BJT18zXzE4CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAxOCwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9TQUlGMF9NQ0xLX19HUElPXzNfMjAJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDIwLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX1NBSUYwX0xSQ0xLX19HUElPXzNfMjEJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDIxLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX1NBSUYwX0JJVENMS19fR1BJT18zXzIyCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDIyLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX1NBSUYwX1NEQVRBMF9fR1BJT18zXzIzCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDIzLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0kyQzBfU0NMX19HUElPXzNfMjQJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDI0LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0kyQzBfU0RBX19HUElPXzNfMjUJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDI1LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX1NBSUYxX1NEQVRBMF9fR1BJT18zXzI2CQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDI2LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX1NQRElGX19HUElPXzNfMjcJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDMsIDI3LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX1BXTTNfX0dQSU9fM18yOAkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMjgsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfUFdNNF9fR1BJT18zXzI5CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCgzLCAyOSwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9MQ0RfUkVTRVRfX0dQSU9fM18zMAkJCU1YU19JT01VWF9QQURfTkFLRUQoMywgMzAsIFBBRF9NVVhTRUxfR1BJTykKKworI2RlZmluZSBNWDI4X1BBRF9FTkVUMF9NRENfX0dQSU9fNF8wCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg0LCAgMCwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9FTkVUMF9NRElPX19HUElPXzRfMQkJCU1YU19JT01VWF9QQURfTkFLRUQoNCwgIDEsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfRU5FVDBfUlhfRU5fX0dQSU9fNF8yCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg0LCAgMiwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9FTkVUMF9SWEQwX19HUElPXzRfMwkJCU1YU19JT01VWF9QQURfTkFLRUQoNCwgIDMsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfRU5FVDBfUlhEMV9fR1BJT180XzQJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDQsICA0LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0VORVQwX1RYX0NMS19fR1BJT180XzUJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDQsICA1LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0VORVQwX1RYX0VOX19HUElPXzRfNgkJCU1YU19JT01VWF9QQURfTkFLRUQoNCwgIDYsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfRU5FVDBfVFhEMF9fR1BJT180XzcJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDQsICA3LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0VORVQwX1RYRDFfX0dQSU9fNF84CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg0LCAgOCwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9FTkVUMF9SWEQyX19HUElPXzRfOQkJCU1YU19JT01VWF9QQURfTkFLRUQoNCwgIDksIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfRU5FVDBfUlhEM19fR1BJT180XzEwCQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg0LCAxMCwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9FTkVUMF9UWEQyX19HUElPXzRfMTEJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDQsIDExLCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0VORVQwX1RYRDNfX0dQSU9fNF8xMgkJCU1YU19JT01VWF9QQURfTkFLRUQoNCwgMTIsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfRU5FVDBfUlhfQ0xLX19HUElPXzRfMTMJCU1YU19JT01VWF9QQURfTkFLRUQoNCwgMTMsIFBBRF9NVVhTRUxfR1BJTykKKyNkZWZpbmUgTVgyOF9QQURfRU5FVDBfQ09MX19HUElPXzRfMTQJCQlNWFNfSU9NVVhfUEFEX05BS0VEKDQsIDE0LCBQQURfTVVYU0VMX0dQSU8pCisjZGVmaW5lIE1YMjhfUEFEX0VORVQwX0NSU19fR1BJT180XzE1CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg0LCAxNSwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9FTkVUX0NMS19fR1BJT180XzE2CQkJTVhTX0lPTVVYX1BBRF9OQUtFRCg0LCAxNiwgUEFEX01VWFNFTF9HUElPKQorI2RlZmluZSBNWDI4X1BBRF9KVEFHX1JUQ0tfX0dQSU9fNF8yMAkJCU1YU19JT01VWF9QQURfTkFLRUQoNCwgMjAsIFBBRF9NVVhTRUxfR1BJTykKKworI2VuZGlmIC8qIF9fTUFDSF9JT01VWF9NWDI4X0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teHMvaW5jbHVkZS9tYWNoL2lvbXV4LmggYi9hcmNoL2FybS9tYWNoLW14cy9pbmNsdWRlL21hY2gvaW9tdXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTU1OGUzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teHMvaW5jbHVkZS9tYWNoL2lvbXV4LmgKQEAgLTAsMCArMSwxNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgYnkgSmFuIFdlaXR6ZWwgUGh5dGVjIE1lc3N0ZWNobmlrIEdtYkgsCisgKgkJCTxhcm1saW51eEBwaHl0ZWMuZGU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKKyAqIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIF9fTUFDSF9NWFNfSU9NVVhfSF9fCisjZGVmaW5lIF9fTUFDSF9NWFNfSU9NVVhfSF9fCisKKy8qCisgKiBJT01VWC9QQUQgQml0IGZpZWxkIGRlZmluaXRpb25zCisgKgorICogUEFEX0JBTks6CQkgMC4uMgkoMykKKyAqIFBBRF9QSU46CQkgMy4uNwkoNSkKKyAqIFBBRF9NVVhTRUw6CQkgOC4uOQkoMikKKyAqIFBBRF9NQToJCTEwLi4xMQkoMikKKyAqIFBBRF9NQV9WQUxJRDoJMTIJKDEpCisgKiBQQURfVk9MOgkJMTMJKDEpCisgKiBQQURfVk9MX1ZBTElEOgkxNAkoMSkKKyAqIFBBRF9QVUxMOgkJMTUJKDEpCisgKiBQQURfUFVMTF9WQUxJRDoJMTYJKDEpCisgKiBSRVNFUlZFRDoJCTE3Li4zMQkoMTUpCisgKi8KK3R5cGVkZWYgdTMyIGlvbXV4X2NmZ190OworCisjZGVmaW5lIE1YU19QQURfQkFOS19TSElGVAkwCisjZGVmaW5lIE1YU19QQURfQkFOS19NQVNLCSgoaW9tdXhfY2ZnX3QpMHg3IDw8IE1YU19QQURfQkFOS19TSElGVCkKKyNkZWZpbmUgTVhTX1BBRF9QSU5fU0hJRlQJMworI2RlZmluZSBNWFNfUEFEX1BJTl9NQVNLCSgoaW9tdXhfY2ZnX3QpMHgxZiA8PCBNWFNfUEFEX1BJTl9TSElGVCkKKyNkZWZpbmUgTVhTX1BBRF9NVVhTRUxfU0hJRlQJOAorI2RlZmluZSBNWFNfUEFEX01VWFNFTF9NQVNLCSgoaW9tdXhfY2ZnX3QpMHgzIDw8IE1YU19QQURfTVVYU0VMX1NISUZUKQorI2RlZmluZSBNWFNfUEFEX01BX1NISUZUCTEwCisjZGVmaW5lIE1YU19QQURfTUFfTUFTSwkJKChpb211eF9jZmdfdCkweDMgPDwgTVhTX1BBRF9NQV9TSElGVCkKKyNkZWZpbmUgTVhTX1BBRF9NQV9WQUxJRF9TSElGVAkxMgorI2RlZmluZSBNWFNfUEFEX01BX1ZBTElEX01BU0sJKChpb211eF9jZmdfdCkweDEgPDwgTVhTX1BBRF9NQV9WQUxJRF9TSElGVCkKKyNkZWZpbmUgTVhTX1BBRF9WT0xfU0hJRlQJMTMKKyNkZWZpbmUgTVhTX1BBRF9WT0xfTUFTSwkoKGlvbXV4X2NmZ190KTB4MSA8PCBNWFNfUEFEX1ZPTF9TSElGVCkKKyNkZWZpbmUgTVhTX1BBRF9WT0xfVkFMSURfU0hJRlQJMTQKKyNkZWZpbmUgTVhTX1BBRF9WT0xfVkFMSURfTUFTSwkoKGlvbXV4X2NmZ190KTB4MSA8PCBNWFNfUEFEX1ZPTF9WQUxJRF9TSElGVCkKKyNkZWZpbmUgTVhTX1BBRF9QVUxMX1NISUZUCTE1CisjZGVmaW5lIE1YU19QQURfUFVMTF9NQVNLCSgoaW9tdXhfY2ZnX3QpMHgxIDw8IE1YU19QQURfUFVMTF9TSElGVCkKKyNkZWZpbmUgTVhTX1BBRF9QVUxMX1ZBTElEX1NISUZUIDE2CisjZGVmaW5lIE1YU19QQURfUFVMTF9WQUxJRF9NQVNLCSgoaW9tdXhfY2ZnX3QpMHgxIDw8IE1YU19QQURfUFVMTF9WQUxJRF9TSElGVCkKKworI2RlZmluZSBQQURfTVVYU0VMXzAJCTAKKyNkZWZpbmUgUEFEX01VWFNFTF8xCQkxCisjZGVmaW5lIFBBRF9NVVhTRUxfMgkJMgorI2RlZmluZSBQQURfTVVYU0VMX0dQSU8JCTMKKworI2RlZmluZSBQQURfNE1BCQkJMAorI2RlZmluZSBQQURfOE1BCQkJMQorI2RlZmluZSBQQURfMTJNQQkJMgorI2RlZmluZSBQQURfMTZNQQkJMworCisjZGVmaW5lIFBBRF8xVjgJCQkwCisjZGVmaW5lIFBBRF8zVjMJCQkxCisKKyNkZWZpbmUgUEFEX05PUFVMTAkJMAorI2RlZmluZSBQQURfUFVMTFVQCQkxCisKKyNkZWZpbmUgTVhTX1BBRF80TUEJKChQQURfNE1BIDw8IE1YU19QQURfTUFfU0hJRlQpIHwgXAorCQkJCQlNWFNfUEFEX01BX1ZBTElEX01BU0spCisjZGVmaW5lIE1YU19QQURfOE1BCSgoUEFEXzhNQSA8PCBNWFNfUEFEX01BX1NISUZUKSB8IFwKKwkJCQkJTVhTX1BBRF9NQV9WQUxJRF9NQVNLKQorI2RlZmluZSBNWFNfUEFEXzEyTUEJKChQQURfMTJNQSA8PCBNWFNfUEFEX01BX1NISUZUKSB8IFwKKwkJCQkJTVhTX1BBRF9NQV9WQUxJRF9NQVNLKQorI2RlZmluZSBNWFNfUEFEXzE2TUEJKChQQURfMTZNQSA8PCBNWFNfUEFEX01BX1NISUZUKSB8IFwKKwkJCQkJTVhTX1BBRF9NQV9WQUxJRF9NQVNLKQorCisjZGVmaW5lIE1YU19QQURfMVY4CSgoUEFEXzFWOCA8PCBNWFNfUEFEX1ZPTF9TSElGVCkgfCBcCisJCQkJCU1YU19QQURfVk9MX1ZBTElEX01BU0spCisjZGVmaW5lIE1YU19QQURfM1YzCSgoUEFEXzNWMyA8PCBNWFNfUEFEX1ZPTF9TSElGVCkgfCBcCisJCQkJCU1YU19QQURfVk9MX1ZBTElEX01BU0spCisKKyNkZWZpbmUgTVhTX1BBRF9OT1BVTEwJKChQQURfTk9QVUxMIDw8IE1YU19QQURfUFVMTF9TSElGVCkgfCBcCisJCQkJCU1YU19QQURfUFVMTF9WQUxJRF9NQVNLKQorI2RlZmluZSBNWFNfUEFEX1BVTExVUAkoKFBBRF9QVUxMVVAgPDwgTVhTX1BBRF9QVUxMX1NISUZUKSB8IFwKKwkJCQkJTVhTX1BBRF9QVUxMX1ZBTElEX01BU0spCisKKyNkZWZpbmUgTVhTX0lPTVVYX1BBRChfYmFuaywgX3BpbiwgX211eHNlbCwgX21hLCBfdm9sLCBfcHVsbCkJCVwKKwkJKCgoaW9tdXhfY2ZnX3QpKF9iYW5rKSA8PCBNWFNfUEFEX0JBTktfU0hJRlQpIHwJCVwKKwkJKChpb211eF9jZmdfdCkoX3BpbikgPDwgTVhTX1BBRF9QSU5fU0hJRlQpIHwJCVwKKwkJKChpb211eF9jZmdfdCkoX211eHNlbCkgPDwgTVhTX1BBRF9NVVhTRUxfU0hJRlQpIHwJXAorCQkoKGlvbXV4X2NmZ190KShfbWEpIDw8IE1YU19QQURfTUFfU0hJRlQpIHwJCVwKKwkJKChpb211eF9jZmdfdCkoX3ZvbCkgPDwgTVhTX1BBRF9WT0xfU0hJRlQpIHwJCVwKKwkJKChpb211eF9jZmdfdCkoX3B1bGwpIDw8IE1YU19QQURfUFVMTF9TSElGVCkpCisKKy8qCisgKiBBIHBhZCBiZWNvbWVzIG5ha2VkLCB3aGVuIG5vbmUgb2YgbUEsIHZvbCBvciBwdWxsCisgKiB2YWxpZGl0eSBiaXRzIGlzIHNldC4KKyAqLworI2RlZmluZSBNWFNfSU9NVVhfUEFEX05BS0VEKF9iYW5rLCBfcGluLCBfbXV4c2VsKSBcCisJCU1YU19JT01VWF9QQUQoX2JhbmssIF9waW4sIF9tdXhzZWwsIDAsIDAsIDApCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IFBBRF9CQU5LKGlvbXV4X2NmZ190IHBhZCkKK3sKKwlyZXR1cm4gKHBhZCAmIE1YU19QQURfQkFOS19NQVNLKSA+PiBNWFNfUEFEX0JBTktfU0hJRlQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IFBBRF9QSU4oaW9tdXhfY2ZnX3QgcGFkKQoreworCXJldHVybiAocGFkICYgTVhTX1BBRF9QSU5fTUFTSykgPj4gTVhTX1BBRF9QSU5fU0hJRlQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IFBBRF9NVVhTRUwoaW9tdXhfY2ZnX3QgcGFkKQoreworCXJldHVybiAocGFkICYgTVhTX1BBRF9NVVhTRUxfTUFTSykgPj4gTVhTX1BBRF9NVVhTRUxfU0hJRlQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IFBBRF9NQShpb211eF9jZmdfdCBwYWQpCit7CisJcmV0dXJuIChwYWQgJiBNWFNfUEFEX01BX01BU0spID4+IE1YU19QQURfTUFfU0hJRlQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IFBBRF9NQV9WQUxJRChpb211eF9jZmdfdCBwYWQpCit7CisJcmV0dXJuIChwYWQgJiBNWFNfUEFEX01BX1ZBTElEX01BU0spID4+IE1YU19QQURfTUFfVkFMSURfU0hJRlQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IFBBRF9WT0woaW9tdXhfY2ZnX3QgcGFkKQoreworCXJldHVybiAocGFkICYgTVhTX1BBRF9WT0xfTUFTSykgPj4gTVhTX1BBRF9WT0xfU0hJRlQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IFBBRF9WT0xfVkFMSUQoaW9tdXhfY2ZnX3QgcGFkKQoreworCXJldHVybiAocGFkICYgTVhTX1BBRF9WT0xfVkFMSURfTUFTSykgPj4gTVhTX1BBRF9WT0xfVkFMSURfU0hJRlQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IFBBRF9QVUxMKGlvbXV4X2NmZ190IHBhZCkKK3sKKwlyZXR1cm4gKHBhZCAmIE1YU19QQURfUFVMTF9NQVNLKSA+PiBNWFNfUEFEX1BVTExfU0hJRlQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IFBBRF9QVUxMX1ZBTElEKGlvbXV4X2NmZ190IHBhZCkKK3sKKwlyZXR1cm4gKHBhZCAmIE1YU19QQURfUFVMTF9WQUxJRF9NQVNLKSA+PiBNWFNfUEFEX1BVTExfVkFMSURfU0hJRlQ7Cit9CisKKy8qCisgKiBjb25maWd1cmVzIGEgc2luZ2xlIHBhZCBpbiB0aGUgaW9tdXhlcgorICovCitpbnQgbXhzX2lvbXV4X3NldHVwX3BhZChpb211eF9jZmdfdCBwYWQpOworCisvKgorICogY29uZmlndXJlcyBtdWx0aXBsZSBwYWRzCisgKiBjb252ZW5pZW50IHdheSB0byBjYWxsIHRoZSBhYm92ZSBmdW5jdGlvbiB3aXRoIHRhYmxlcworICovCitpbnQgbXhzX2lvbXV4X3NldHVwX211bHRpcGxlX3BhZHMoY29uc3QgaW9tdXhfY2ZnX3QgKnBhZF9saXN0LCB1bnNpZ25lZCBjb3VudCk7CisKKyNlbmRpZiAvKiBfX01BQ0hfTVhTX0lPTVVYX0hfXyovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14cy9pbmNsdWRlL21hY2gvaXJxcy5oIGIvYXJjaC9hcm0vbWFjaC1teHMvaW5jbHVkZS9tYWNoL2lycXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzcxMDM5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teHMvaW5jbHVkZS9tYWNoL2lycXMuaApAQCAtMCwwICsxLDMyIEBACisvKgorICogIENvcHlyaWdodCAyMDA0LTIwMDcgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9fTUFDSF9NWFNfSVJRU19IX18KKyNkZWZpbmUgX19NQUNIX01YU19JUlFTX0hfXworCisjZGVmaW5lIE1YU19JTlRFUk5BTF9JUlFTCTEyOAorCisjZGVmaW5lIE1YU19HUElPX0lSUV9TVEFSVAlNWFNfSU5URVJOQUxfSVJRUworCisvKiB0aGUgbWF4aW11bSBmb3IgTVhTLWJhc2VkICovCisjZGVmaW5lIE1YU19HUElPX0lSUVMJCSgzMiAqIDUpCisKKy8qCisgKiBUaGUgbmV4dCAxNiBpbnRlcnJ1cHRzIGFyZSBmb3IgYm9hcmQgc3BlY2lmaWMgcHVycG9zZXMuICBTaW5jZQorICogdGhlIGtlcm5lbCBjYW4gb25seSBydW4gb24gb25lIG1hY2hpbmUgYXQgYSB0aW1lLCB3ZSBjYW4gcmUtdXNlCisgKiB0aGVzZS4gIElmIHlvdSBuZWVkIG1vcmUsIGluY3JlYXNlIE1YU19CT0FSRF9JUlFTLCBidXQga2VlcCBpdAorICogd2l0aGluIHNlbnNpYmxlIGxpbWl0cy4KKyAqLworI2RlZmluZSBNWFNfQk9BUkRfSVJRX1NUQVJUCShNWFNfR1BJT19JUlFfU1RBUlQgKyBNWFNfR1BJT19JUlFTKQorI2RlZmluZSBNWFNfQk9BUkRfSVJRUwkJMTYKKworI2RlZmluZSBOUl9JUlFTCQkJKE1YU19CT0FSRF9JUlFfU1RBUlQgKyBNWFNfQk9BUkRfSVJRUykKKworI2VuZGlmIC8qIF9fTUFDSF9NWFNfSVJRU19IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXhzL2luY2x1ZGUvbWFjaC9tZW1vcnkuaCBiL2FyY2gvYXJtL21hY2gtbXhzL2luY2x1ZGUvbWFjaC9tZW1vcnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTQyMGE1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teHMvaW5jbHVkZS9tYWNoL21lbW9yeS5oCkBAIC0wLDAgKzEsMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKi8KKworI2lmbmRlZiBfX01BQ0hfTVhTX01FTU9SWV9IX18KKyNkZWZpbmUgX19NQUNIX01YU19NRU1PUllfSF9fCisKKyNkZWZpbmUgUEhZU19PRkZTRVQJCVVMKDB4NDAwMDAwMDApCisKKyNlbmRpZiAvKiBfX01BQ0hfTVhTX01FTU9SWV9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXhzL2luY2x1ZGUvbWFjaC9teDIzLmggYi9hcmNoL2FybS9tYWNoLW14cy9pbmNsdWRlL21hY2gvbXgyMy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllZGQwMmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW14cy9pbmNsdWRlL21hY2gvbXgyMy5oCkBAIC0wLDAgKzEsMTQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICovCisKKyNpZm5kZWYgX19NQUNIX01YMjNfSF9fCisjZGVmaW5lIF9fTUFDSF9NWDIzX0hfXworCisjaW5jbHVkZSA8bWFjaC9teHMuaD4KKworLyoKKyAqIE9DUkFNCisgKi8KKyNkZWZpbmUgTVgyM19PQ1JBTV9CQVNFX0FERFIJCTB4MDAwMDAwMDAKKyNkZWZpbmUgTVgyM19PQ1JBTV9TSVpFCQkJU1pfMzJLCisKKy8qCisgKiBJTworICovCisjZGVmaW5lIE1YMjNfSU9fQkFTRV9BRERSCQkweDgwMDAwMDAwCisjZGVmaW5lIE1YMjNfSU9fU0laRQkJCVNaXzFNCisKKyNkZWZpbmUgTVgyM19JQ09MTF9CQVNFX0FERFIJCShNWDIzX0lPX0JBU0VfQUREUiArIDB4MDAwMDAwKQorI2RlZmluZSBNWDIzX0FQQkhfRE1BX0JBU0VfQUREUgkJKE1YMjNfSU9fQkFTRV9BRERSICsgMHgwMDQwMDApCisjZGVmaW5lIE1YMjNfQkNIX0JBU0VfQUREUgkJKE1YMjNfSU9fQkFTRV9BRERSICsgMHgwMGEwMDApCisjZGVmaW5lIE1YMjNfR1BNSV9CQVNFX0FERFIJCShNWDIzX0lPX0JBU0VfQUREUiArIDB4MDBjMDAwKQorI2RlZmluZSBNWDIzX1NTUDFfQkFTRV9BRERSCQkoTVgyM19JT19CQVNFX0FERFIgKyAweDAxMDAwMCkKKyNkZWZpbmUgTVgyM19QSU5DVFJMX0JBU0VfQUREUgkJKE1YMjNfSU9fQkFTRV9BRERSICsgMHgwMTgwMDApCisjZGVmaW5lIE1YMjNfRElHQ1RMX0JBU0VfQUREUgkJKE1YMjNfSU9fQkFTRV9BRERSICsgMHgwMWMwMDApCisjZGVmaW5lIE1YMjNfRVRNX0JBU0VfQUREUgkJKE1YMjNfSU9fQkFTRV9BRERSICsgMHgwMjAwMDApCisjZGVmaW5lIE1YMjNfQVBCWF9ETUFfQkFTRV9BRERSCQkoTVgyM19JT19CQVNFX0FERFIgKyAweDAyNDAwMCkKKyNkZWZpbmUgTVgyM19EQ1BfQkFTRV9BRERSCQkoTVgyM19JT19CQVNFX0FERFIgKyAweDAyODAwMCkKKyNkZWZpbmUgTVgyM19QWFBfQkFTRV9BRERSCQkoTVgyM19JT19CQVNFX0FERFIgKyAweDAyYTAwMCkKKyNkZWZpbmUgTVgyM19PQ09UUF9CQVNFX0FERFIJCShNWDIzX0lPX0JBU0VfQUREUiArIDB4MDJjMDAwKQorI2RlZmluZSBNWDIzX0FYSV9BSEIwX0JBU0VfQUREUgkJKE1YMjNfSU9fQkFTRV9BRERSICsgMHgwMmUwMDApCisjZGVmaW5lIE1YMjNfTENESUZfQkFTRV9BRERSCQkoTVgyM19JT19CQVNFX0FERFIgKyAweDAzMDAwMCkKKyNkZWZpbmUgTVgyM19TU1AyX0JBU0VfQUREUgkJKE1YMjNfSU9fQkFTRV9BRERSICsgMHgwMzQwMDApCisjZGVmaW5lIE1YMjNfVFZFTkNfQkFTRV9BRERSCQkoTVgyM19JT19CQVNFX0FERFIgKyAweDAzODAwMCkKKyNkZWZpbmUgTVgyM19DTEtDVFJMX0JBU0VfQUREUgkJKE1YMjNfSU9fQkFTRV9BRERSICsgMHgwNDAwMDApCisjZGVmaW5lIE1YMjNfU0FJRjBfQkFTRV9BRERSCQkoTVgyM19JT19CQVNFX0FERFIgKyAweDA0MjAwMCkKKyNkZWZpbmUgTVgyM19QT1dFUl9CQVNFX0FERFIJCShNWDIzX0lPX0JBU0VfQUREUiArIDB4MDQ0MDAwKQorI2RlZmluZSBNWDIzX1NBSUYxX0JBU0VfQUREUgkJKE1YMjNfSU9fQkFTRV9BRERSICsgMHgwNDYwMDApCisjZGVmaW5lIE1YMjNfQVVESU9PVVRfQkFTRV9BRERSCQkoTVgyM19JT19CQVNFX0FERFIgKyAweDA0ODAwMCkKKyNkZWZpbmUgTVgyM19BVURJT0lOX0JBU0VfQUREUgkJKE1YMjNfSU9fQkFTRV9BRERSICsgMHgwNGMwMDApCisjZGVmaW5lIE1YMjNfTFJBRENfQkFTRV9BRERSCQkoTVgyM19JT19CQVNFX0FERFIgKyAweDA1MDAwMCkKKyNkZWZpbmUgTVgyM19TUERJRl9CQVNFX0FERFIJCShNWDIzX0lPX0JBU0VfQUREUiArIDB4MDU0MDAwKQorI2RlZmluZSBNWDIzX0kyQzBfQkFTRV9BRERSCQkoTVgyM19JT19CQVNFX0FERFIgKyAweDA1ODAwMCkKKyNkZWZpbmUgTVgyM19SVENfQkFTRV9BRERSCQkoTVgyM19JT19CQVNFX0FERFIgKyAweDA1YzAwMCkKKyNkZWZpbmUgTVgyM19QV01fQkFTRV9BRERSCQkoTVgyM19JT19CQVNFX0FERFIgKyAweDA2NDAwMCkKKyNkZWZpbmUgTVgyM19USU1ST1RfQkFTRV9BRERSCQkoTVgyM19JT19CQVNFX0FERFIgKyAweDA2ODAwMCkKKyNkZWZpbmUgTVgyM19BVUFSVDFfQkFTRV9BRERSCQkoTVgyM19JT19CQVNFX0FERFIgKyAweDA2YzAwMCkKKyNkZWZpbmUgTVgyM19BVUFSVDJfQkFTRV9BRERSCQkoTVgyM19JT19CQVNFX0FERFIgKyAweDA2ZTAwMCkKKyNkZWZpbmUgTVgyM19EVUFSVF9CQVNFX0FERFIJCShNWDIzX0lPX0JBU0VfQUREUiArIDB4MDcwMDAwKQorI2RlZmluZSBNWDIzX1VTQlBIWV9CQVNFX0FERFIJCShNWDIzX0lPX0JBU0VfQUREUiArIDB4MDdjMDAwKQorI2RlZmluZSBNWDIzX1VTQkNUUkxfQkFTRV9BRERSCQkoTVgyM19JT19CQVNFX0FERFIgKyAweDA4MDAwMCkKKyNkZWZpbmUgTVgyM19EUkFNX0JBU0VfQUREUgkJKE1YMjNfSU9fQkFTRV9BRERSICsgMHgwZTAwMDApCisKKyNkZWZpbmUgTVgyM19JT19QMlYoeCkJCQlNWFNfSU9fUDJWKHgpCisjZGVmaW5lIE1YMjNfSU9fQUREUkVTUyh4KQkJSU9NRU0oTVgyM19JT19QMlYoeCkpCisKKy8qCisgKiBJUlEKKyAqLworI2RlZmluZSBNWDIzX0lOVF9EVUFSVAkJCTAKKyNkZWZpbmUgTVgyM19JTlRfQ09NTVNfUlgJCTEKKyNkZWZpbmUgTVgyM19JTlRfQ09NTVNfVFgJCTEKKyNkZWZpbmUgTVgyM19JTlRfU1NQMl9FUlJPUgkJMgorI2RlZmluZSBNWDIzX0lOVF9WREQ1VgkJCTMKKyNkZWZpbmUgTVgyM19JTlRfSEVBRFBIT05FX1NIT1JUCTQKKyNkZWZpbmUgTVgyM19JTlRfREFDX0RNQQkJNQorI2RlZmluZSBNWDIzX0lOVF9EQUNfRVJST1IJCTYKKyNkZWZpbmUgTVgyM19JTlRfQURDX0RNQQkJNworI2RlZmluZSBNWDIzX0lOVF9BRENfRVJST1IJCTgKKyNkZWZpbmUgTVgyM19JTlRfU1BESUZfRE1BCQk5CisjZGVmaW5lIE1YMjNfSU5UX1NBSUYyX0RNQQkJOQorI2RlZmluZSBNWDIzX0lOVF9TUERJRl9FUlJPUgkJMTAKKyNkZWZpbmUgTVgyM19JTlRfU0FJRjFfSVJRCQkxMAorI2RlZmluZSBNWDIzX0lOVF9TQUlGMl9JUlEJCTEwCisjZGVmaW5lIE1YMjNfSU5UX1VTQl9DVFJMCQkxMQorI2RlZmluZSBNWDIzX0lOVF9VU0JfV0FLRVVQCQkxMgorI2RlZmluZSBNWDIzX0lOVF9HUE1JX0RNQQkJMTMKKyNkZWZpbmUgTVgyM19JTlRfU1NQMV9ETUEJCTE0CisjZGVmaW5lIE1YMjNfSU5UX1NTUF9FUlJPUgkJMTUKKyNkZWZpbmUgTVgyM19JTlRfR1BJTzAJCQkxNgorI2RlZmluZSBNWDIzX0lOVF9HUElPMQkJCTE3CisjZGVmaW5lIE1YMjNfSU5UX0dQSU8yCQkJMTgKKyNkZWZpbmUgTVgyM19JTlRfU0FJRjFfRE1BCQkxOQorI2RlZmluZSBNWDIzX0lOVF9TU1AyX0RNQQkJMjAKKyNkZWZpbmUgTVgyM19JTlRfRUNDOF9JUlEJCTIxCisjZGVmaW5lIE1YMjNfSU5UX1JUQ19BTEFSTQkJMjIKKyNkZWZpbmUgTVgyM19JTlRfVUFSVEFQUF9UWF9ETUEJCTIzCisjZGVmaW5lIE1YMjNfSU5UX1VBUlRBUFBfSU5URVJOQUwJMjQKKyNkZWZpbmUgTVgyM19JTlRfVUFSVEFQUF9SWF9ETUEJCTI1CisjZGVmaW5lIE1YMjNfSU5UX0kyQ19ETUEJCTI2CisjZGVmaW5lIE1YMjNfSU5UX0kyQ19FUlJPUgkJMjcKKyNkZWZpbmUgTVgyM19JTlRfVElNRVIwCQkJMjgKKyNkZWZpbmUgTVgyM19JTlRfVElNRVIxCQkJMjkKKyNkZWZpbmUgTVgyM19JTlRfVElNRVIyCQkJMzAKKyNkZWZpbmUgTVgyM19JTlRfVElNRVIzCQkJMzEKKyNkZWZpbmUgTVgyM19JTlRfQkFUVF9CUk5PVVQJCTMyCisjZGVmaW5lIE1YMjNfSU5UX1ZERERfQlJOT1VUCQkzMworI2RlZmluZSBNWDIzX0lOVF9WRERJT19CUk5PVVQJCTM0CisjZGVmaW5lIE1YMjNfSU5UX1ZERDE4X0JSTk9VVAkJMzUKKyNkZWZpbmUgTVgyM19JTlRfVE9VQ0hfREVURUNUCQkzNgorI2RlZmluZSBNWDIzX0lOVF9MUkFEQ19DSDAJCTM3CisjZGVmaW5lIE1YMjNfSU5UX0xSQURDX0NIMQkJMzgKKyNkZWZpbmUgTVgyM19JTlRfTFJBRENfQ0gyCQkzOQorI2RlZmluZSBNWDIzX0lOVF9MUkFEQ19DSDMJCTQwCisjZGVmaW5lIE1YMjNfSU5UX0xSQURDX0NINAkJNDEKKyNkZWZpbmUgTVgyM19JTlRfTFJBRENfQ0g1CQk0MgorI2RlZmluZSBNWDIzX0lOVF9MUkFEQ19DSDYJCTQzCisjZGVmaW5lIE1YMjNfSU5UX0xSQURDX0NINwkJNDQKKyNkZWZpbmUgTVgyM19JTlRfTENESUZfRE1BCQk0NQorI2RlZmluZSBNWDIzX0lOVF9MQ0RJRl9FUlJPUgkJNDYKKyNkZWZpbmUgTVgyM19JTlRfRElHQ1RMX0RFQlVHX1RSQVAJNDcKKyNkZWZpbmUgTVgyM19JTlRfUlRDXzFNU0VDCQk0OAorI2RlZmluZSBNWDIzX0lOVF9EUklfRE1BCQk0OQorI2RlZmluZSBNWDIzX0lOVF9EUklfQVRURU5USU9OCQk1MAorI2RlZmluZSBNWDIzX0lOVF9HUE1JX0FUVEVOVElPTgkJNTEKKyNkZWZpbmUgTVgyM19JTlRfSVIJCQk1MgorI2RlZmluZSBNWDIzX0lOVF9EQ1BfVk1JCQk1MworI2RlZmluZSBNWDIzX0lOVF9EQ1AJCQk1NAorI2RlZmluZSBNWDIzX0lOVF9CQ0gJCQk1NgorI2RlZmluZSBNWDIzX0lOVF9QWFAJCQk1NworI2RlZmluZSBNWDIzX0lOVF9VQVJUQVBQMl9UWF9ETUEJNTgKKyNkZWZpbmUgTVgyM19JTlRfVUFSVEFQUDJfSU5URVJOQUwJNTkKKyNkZWZpbmUgTVgyM19JTlRfVUFSVEFQUDJfUlhfRE1BCTYwCisjZGVmaW5lIE1YMjNfSU5UX1ZEQUNfREVURUNUCQk2MQorI2RlZmluZSBNWDIzX0lOVF9WREQ1Vl9EUk9PUAkJNjQKKyNkZWZpbmUgTVgyM19JTlRfRENEQzRQMl9CTwkJNjUKKworI2VuZGlmIC8qIF9fTUFDSF9NWDIzX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teHMvaW5jbHVkZS9tYWNoL214MjguaCBiL2FyY2gvYXJtL21hY2gtbXhzL2luY2x1ZGUvbWFjaC9teDI4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDcxNjc0NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXhzL2luY2x1ZGUvbWFjaC9teDI4LmgKQEAgLTAsMCArMSwxODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKi8KKworI2lmbmRlZiBfX01BQ0hfTVgyOF9IX18KKyNkZWZpbmUgX19NQUNIX01YMjhfSF9fCisKKyNpbmNsdWRlIDxtYWNoL214cy5oPgorCisvKgorICogT0NSQU0KKyAqLworI2RlZmluZSBNWDI4X09DUkFNX0JBU0VfQUREUgkJMHgwMDAwMDAwMAorI2RlZmluZSBNWDI4X09DUkFNX1NJWkUJCQlTWl8xMjhLCisKKy8qCisgKiBJTworICovCisjZGVmaW5lIE1YMjhfSU9fQkFTRV9BRERSCQkweDgwMDAwMDAwCisjZGVmaW5lIE1YMjhfSU9fU0laRQkJCVNaXzFNCisKKyNkZWZpbmUgTVgyOF9JQ09MTF9CQVNFX0FERFIJCShNWDI4X0lPX0JBU0VfQUREUiArIDB4MDAwMDAwKQorI2RlZmluZSBNWDI4X0hTQURDX0JBU0VfQUREUgkJKE1YMjhfSU9fQkFTRV9BRERSICsgMHgwMDIwMDApCisjZGVmaW5lIE1YMjhfQVBCSF9ETUFfQkFTRV9BRERSCQkoTVgyOF9JT19CQVNFX0FERFIgKyAweDAwNDAwMCkKKyNkZWZpbmUgTVgyOF9QRVJGTU9OX0JBU0VfQUREUgkJKE1YMjhfSU9fQkFTRV9BRERSICsgMHgwMDYwMDApCisjZGVmaW5lIE1YMjhfQkNIX0JBU0VfQUREUgkJKE1YMjhfSU9fQkFTRV9BRERSICsgMHgwMGEwMDApCisjZGVmaW5lIE1YMjhfR1BNSV9CQVNFX0FERFIJCShNWDI4X0lPX0JBU0VfQUREUiArIDB4MDBjMDAwKQorI2RlZmluZSBNWDI4X1NTUDBfQkFTRV9BRERSCQkoTVgyOF9JT19CQVNFX0FERFIgKyAweDAxMDAwMCkKKyNkZWZpbmUgTVgyOF9TU1AxX0JBU0VfQUREUgkJKE1YMjhfSU9fQkFTRV9BRERSICsgMHgwMTIwMDApCisjZGVmaW5lIE1YMjhfU1NQMl9CQVNFX0FERFIJCShNWDI4X0lPX0JBU0VfQUREUiArIDB4MDE0MDAwKQorI2RlZmluZSBNWDI4X1NTUDNfQkFTRV9BRERSCQkoTVgyOF9JT19CQVNFX0FERFIgKyAweDAxNjAwMCkKKyNkZWZpbmUgTVgyOF9QSU5DVFJMX0JBU0VfQUREUgkJKE1YMjhfSU9fQkFTRV9BRERSICsgMHgwMTgwMDApCisjZGVmaW5lIE1YMjhfRElHQ1RMX0JBU0VfQUREUgkJKE1YMjhfSU9fQkFTRV9BRERSICsgMHgwMWMwMDApCisjZGVmaW5lIE1YMjhfRVRNX0JBU0VfQUREUgkJKE1YMjhfSU9fQkFTRV9BRERSICsgMHgwMjIwMDApCisjZGVmaW5lIE1YMjhfQVBCWF9ETUFfQkFTRV9BRERSCQkoTVgyOF9JT19CQVNFX0FERFIgKyAweDAyNDAwMCkKKyNkZWZpbmUgTVgyOF9EQ1BfQkFTRV9BRERSCQkoTVgyOF9JT19CQVNFX0FERFIgKyAweDAyODAwMCkKKyNkZWZpbmUgTVgyOF9QWFBfQkFTRV9BRERSCQkoTVgyOF9JT19CQVNFX0FERFIgKyAweDAyYTAwMCkKKyNkZWZpbmUgTVgyOF9PQ09UUF9CQVNFX0FERFIJCShNWDI4X0lPX0JBU0VfQUREUiArIDB4MDJjMDAwKQorI2RlZmluZSBNWDI4X0FYSV9BSEIwX0JBU0VfQUREUgkJKE1YMjhfSU9fQkFTRV9BRERSICsgMHgwMmUwMDApCisjZGVmaW5lIE1YMjhfTENESUZfQkFTRV9BRERSCQkoTVgyOF9JT19CQVNFX0FERFIgKyAweDAzMDAwMCkKKyNkZWZpbmUgTVgyOF9DQU4wX0JBU0VfQUREUgkJKE1YMjhfSU9fQkFTRV9BRERSICsgMHgwMzIwMDApCisjZGVmaW5lIE1YMjhfQ0FOMV9CQVNFX0FERFIJCShNWDI4X0lPX0JBU0VfQUREUiArIDB4MDM0MDAwKQorI2RlZmluZSBNWDI4X1NJTURCR19CQVNFX0FERFIJCShNWDI4X0lPX0JBU0VfQUREUiArIDB4MDNjMDAwKQorI2RlZmluZSBNWDI4X1NJTUdQTUlTRUxfQkFTRV9BRERSCShNWDI4X0lPX0JBU0VfQUREUiArIDB4MDNjMjAwKQorI2RlZmluZSBNWDI4X1NJTVNTUFNFTF9CQVNFX0FERFIJKE1YMjhfSU9fQkFTRV9BRERSICsgMHgwM2MzMDApCisjZGVmaW5lIE1YMjhfU0lNTUVNU0VMX0JBU0VfQUREUgkoTVgyOF9JT19CQVNFX0FERFIgKyAweDAzYzQwMCkKKyNkZWZpbmUgTVgyOF9HUElPTU9OX0JBU0VfQUREUgkJKE1YMjhfSU9fQkFTRV9BRERSICsgMHgwM2M1MDApCisjZGVmaW5lIE1YMjhfU0lNRU5FVF9CQVNFX0FERFIJCShNWDI4X0lPX0JBU0VfQUREUiArIDB4MDNjNzAwKQorI2RlZmluZSBNWDI4X0FSTUpUQUdfQkFTRV9BRERSCQkoTVgyOF9JT19CQVNFX0FERFIgKyAweDAzYzgwMCkKKyNkZWZpbmUgTVgyOF9DTEtDVFJMX0JBU0VfQUREUgkJKE1YMjhfSU9fQkFTRV9BRERSICsgMHgwNDAwMDApCisjZGVmaW5lIE1YMjhfU0FJRjBfQkFTRV9BRERSCQkoTVgyOF9JT19CQVNFX0FERFIgKyAweDA0MjAwMCkKKyNkZWZpbmUgTVgyOF9QT1dFUl9CQVNFX0FERFIJCShNWDI4X0lPX0JBU0VfQUREUiArIDB4MDQ0MDAwKQorI2RlZmluZSBNWDI4X1NBSUYxX0JBU0VfQUREUgkJKE1YMjhfSU9fQkFTRV9BRERSICsgMHgwNDYwMDApCisjZGVmaW5lIE1YMjhfTFJBRENfQkFTRV9BRERSCQkoTVgyOF9JT19CQVNFX0FERFIgKyAweDA1MDAwMCkKKyNkZWZpbmUgTVgyOF9TUERJRl9CQVNFX0FERFIJCShNWDI4X0lPX0JBU0VfQUREUiArIDB4MDU0MDAwKQorI2RlZmluZSBNWDI4X1JUQ19CQVNFX0FERFIJCShNWDI4X0lPX0JBU0VfQUREUiArIDB4MDU2MDAwKQorI2RlZmluZSBNWDI4X0kyQzBfQkFTRV9BRERSCQkoTVgyOF9JT19CQVNFX0FERFIgKyAweDA1ODAwMCkKKyNkZWZpbmUgTVgyOF9JMkMxX0JBU0VfQUREUgkJKE1YMjhfSU9fQkFTRV9BRERSICsgMHgwNWEwMDApCisjZGVmaW5lIE1YMjhfUFdNX0JBU0VfQUREUgkJKE1YMjhfSU9fQkFTRV9BRERSICsgMHgwNjQwMDApCisjZGVmaW5lIE1YMjhfVElNUk9UX0JBU0VfQUREUgkJKE1YMjhfSU9fQkFTRV9BRERSICsgMHgwNjgwMDApCisjZGVmaW5lIE1YMjhfQVVBUlQwX0JBU0VfQUREUgkJKE1YMjhfSU9fQkFTRV9BRERSICsgMHgwNmEwMDApCisjZGVmaW5lIE1YMjhfQVVBUlQxX0JBU0VfQUREUgkJKE1YMjhfSU9fQkFTRV9BRERSICsgMHgwNmMwMDApCisjZGVmaW5lIE1YMjhfQVVBUlQyX0JBU0VfQUREUgkJKE1YMjhfSU9fQkFTRV9BRERSICsgMHgwNmUwMDApCisjZGVmaW5lIE1YMjhfQVVBUlQzX0JBU0VfQUREUgkJKE1YMjhfSU9fQkFTRV9BRERSICsgMHgwNzAwMDApCisjZGVmaW5lIE1YMjhfQVVBUlQ0X0JBU0VfQUREUgkJKE1YMjhfSU9fQkFTRV9BRERSICsgMHgwNzIwMDApCisjZGVmaW5lIE1YMjhfRFVBUlRfQkFTRV9BRERSCQkoTVgyOF9JT19CQVNFX0FERFIgKyAweDA3NDAwMCkKKyNkZWZpbmUgTVgyOF9VU0JQSFkwX0JBU0VfQUREUgkJKE1YMjhfSU9fQkFTRV9BRERSICsgMHgwN0MwMDApCisjZGVmaW5lIE1YMjhfVVNCUEhZMV9CQVNFX0FERFIJCShNWDI4X0lPX0JBU0VfQUREUiArIDB4MDdlMDAwKQorI2RlZmluZSBNWDI4X1VTQkNUUkwwX0JBU0VfQUREUgkJKE1YMjhfSU9fQkFTRV9BRERSICsgMHgwODAwMDApCisjZGVmaW5lIE1YMjhfVVNCQ1RSTDFfQkFTRV9BRERSCQkoTVgyOF9JT19CQVNFX0FERFIgKyAweDA5MDAwMCkKKyNkZWZpbmUgTVgyOF9ERkxQVF9CQVNFX0FERFIJCShNWDI4X0lPX0JBU0VfQUREUiArIDB4MGMwMDAwKQorI2RlZmluZSBNWDI4X0RSQU1fQkFTRV9BRERSCQkoTVgyOF9JT19CQVNFX0FERFIgKyAweDBlMDAwMCkKKyNkZWZpbmUgTVgyOF9FTkVUX01BQzBfQkFTRV9BRERSCShNWDI4X0lPX0JBU0VfQUREUiArIDB4MGYwMDAwKQorI2RlZmluZSBNWDI4X0VORVRfTUFDMV9CQVNFX0FERFIJKE1YMjhfSU9fQkFTRV9BRERSICsgMHgwZjQwMDApCisKKyNkZWZpbmUgTVgyOF9JT19QMlYoeCkJCQlNWFNfSU9fUDJWKHgpCisjZGVmaW5lIE1YMjhfSU9fQUREUkVTUyh4KQkJSU9NRU0oTVgyOF9JT19QMlYoeCkpCisKKy8qCisgKiBJUlEKKyAqLworI2RlZmluZSBNWDI4X0lOVF9CQVRUX0JSTk9VVAkJMAorI2RlZmluZSBNWDI4X0lOVF9WREREX0JSTk9VVAkJMQorI2RlZmluZSBNWDI4X0lOVF9WRERJT19CUk5PVVQJCTIKKyNkZWZpbmUgTVgyOF9JTlRfVkREQV9CUk5PVVQJCTMKKyNkZWZpbmUgTVgyOF9JTlRfVkRENVZfRFJPT1AJCTQKKyNkZWZpbmUgTVgyOF9JTlRfRENEQzRQMl9CUk5PVVQJCTUKKyNkZWZpbmUgTVgyOF9JTlRfVkRENVYJCQk2CisjZGVmaW5lIE1YMjhfSU5UX0NBTjAJCQk4CisjZGVmaW5lIE1YMjhfSU5UX0NBTjEJCQk5CisjZGVmaW5lIE1YMjhfSU5UX0xSQURDX1RPVUNICQkxMAorI2RlZmluZSBNWDI4X0lOVF9IU0FEQwkJCTEzCisjZGVmaW5lIE1YMjhfSU5UX0lSQURDX1RIUkVTSDAJCTE0CisjZGVmaW5lIE1YMjhfSU5UX0lSQURDX1RIUkVTSDEJCTE1CisjZGVmaW5lIE1YMjhfSU5UX0xSQURDX0NIMAkJMTYKKyNkZWZpbmUgTVgyOF9JTlRfTFJBRENfQ0gxCQkxNworI2RlZmluZSBNWDI4X0lOVF9MUkFEQ19DSDIJCTE4CisjZGVmaW5lIE1YMjhfSU5UX0xSQURDX0NIMwkJMTkKKyNkZWZpbmUgTVgyOF9JTlRfTFJBRENfQ0g0CQkyMAorI2RlZmluZSBNWDI4X0lOVF9MUkFEQ19DSDUJCTIxCisjZGVmaW5lIE1YMjhfSU5UX0xSQURDX0NINgkJMjIKKyNkZWZpbmUgTVgyOF9JTlRfTFJBRENfQ0g3CQkyMworI2RlZmluZSBNWDI4X0lOVF9MUkFEQ19CVVRUT04wCQkyNAorI2RlZmluZSBNWDI4X0lOVF9MUkFEQ19CVVRUT04xCQkyNQorI2RlZmluZSBNWDI4X0lOVF9QRVJGTU9OCQkyNworI2RlZmluZSBNWDI4X0lOVF9SVENfMU1TRUMJCTI4CisjZGVmaW5lIE1YMjhfSU5UX1JUQ19BTEFSTQkJMjkKKyNkZWZpbmUgTVgyOF9JTlRfQ09NTVMJCQkzMQorI2RlZmluZSBNWDI4X0lOVF9FTUlfRVJSCQkzMgorI2RlZmluZSBNWDI4X0lOVF9MQ0RJRgkJCTM4CisjZGVmaW5lIE1YMjhfSU5UX1BYUAkJCTM5CisjZGVmaW5lIE1YMjhfSU5UX0JDSAkJCTQxCisjZGVmaW5lIE1YMjhfSU5UX0dQTUkJCQk0MgorI2RlZmluZSBNWDI4X0lOVF9TUERJRl9FUlJPUgkJNDUKKyNkZWZpbmUgTVgyOF9JTlRfRFVBUlQJCQk0NworI2RlZmluZSBNWDI4X0lOVF9USU1FUjAJCQk0OAorI2RlZmluZSBNWDI4X0lOVF9USU1FUjEJCQk0OQorI2RlZmluZSBNWDI4X0lOVF9USU1FUjIJCQk1MAorI2RlZmluZSBNWDI4X0lOVF9USU1FUjMJCQk1MQorI2RlZmluZSBNWDI4X0lOVF9EQ1BfVk1JCQk1MgorI2RlZmluZSBNWDI4X0lOVF9EQ1AJCQk1MworI2RlZmluZSBNWDI4X0lOVF9EQ1BfU0VDVVJFCQk1NAorI2RlZmluZSBNWDI4X0lOVF9TQUlGMQkJCTU4CisjZGVmaW5lIE1YMjhfSU5UX1NBSUYwCQkJNTkKKyNkZWZpbmUgTVgyOF9JTlRfU1BESUZfRE1BCQk2NgorI2RlZmluZSBNWDI4X0lOVF9JMkMwX0RNQQkJNjgKKyNkZWZpbmUgTVgyOF9JTlRfSTJDMV9ETUEJCTY5CisjZGVmaW5lIE1YMjhfSU5UX0FVQVJUMF9SWF9ETUEJCTcwCisjZGVmaW5lIE1YMjhfSU5UX0FVQVJUMF9UWF9ETUEJCTcxCisjZGVmaW5lIE1YMjhfSU5UX0FVQVJUMV9SWF9ETUEJCTcyCisjZGVmaW5lIE1YMjhfSU5UX0FVQVJUMV9UWF9ETUEJCTczCisjZGVmaW5lIE1YMjhfSU5UX0FVQVJUMl9SWF9ETUEJCTc0CisjZGVmaW5lIE1YMjhfSU5UX0FVQVJUMl9UWF9ETUEJCTc1CisjZGVmaW5lIE1YMjhfSU5UX0FVQVJUM19SWF9ETUEJCTc2CisjZGVmaW5lIE1YMjhfSU5UX0FVQVJUM19UWF9ETUEJCTc3CisjZGVmaW5lIE1YMjhfSU5UX0FVQVJUNF9SWF9ETUEJCTc4CisjZGVmaW5lIE1YMjhfSU5UX0FVQVJUNF9UWF9ETUEJCTc5CisjZGVmaW5lIE1YMjhfSU5UX1NBSUYwX0RNQQkJODAKKyNkZWZpbmUgTVgyOF9JTlRfU0FJRjFfRE1BCQk4MQorI2RlZmluZSBNWDI4X0lOVF9TU1AwX0RNQQkJODIKKyNkZWZpbmUgTVgyOF9JTlRfU1NQMV9ETUEJCTgzCisjZGVmaW5lIE1YMjhfSU5UX1NTUDJfRE1BCQk4NAorI2RlZmluZSBNWDI4X0lOVF9TU1AzX0RNQQkJODUKKyNkZWZpbmUgTVgyOF9JTlRfTENESUZfRE1BCQk4NgorI2RlZmluZSBNWDI4X0lOVF9IU0FEQ19ETUEJCTg3CisjZGVmaW5lIE1YMjhfSU5UX0dQTUlfRE1BCQk4OAorI2RlZmluZSBNWDI4X0lOVF9ESUdDVExfREVCVUdfVFJBUAk4OQorI2RlZmluZSBNWDI4X0lOVF9VU0IxCQkJOTIKKyNkZWZpbmUgTVgyOF9JTlRfVVNCMAkJCTkzCisjZGVmaW5lIE1YMjhfSU5UX1VTQjFfV0FLRVVQCQk5NAorI2RlZmluZSBNWDI4X0lOVF9VU0IwX1dBS0VVUAkJOTUKKyNkZWZpbmUgTVgyOF9JTlRfU1NQMAkJCTk2CisjZGVmaW5lIE1YMjhfSU5UX1NTUDEJCQk5NworI2RlZmluZSBNWDI4X0lOVF9TU1AyCQkJOTgKKyNkZWZpbmUgTVgyOF9JTlRfU1NQMwkJCTk5CisjZGVmaW5lIE1YMjhfSU5UX0VORVRfU1dJCQkxMDAKKyNkZWZpbmUgTVgyOF9JTlRfRU5FVF9NQUMwCQkxMDEKKyNkZWZpbmUgTVgyOF9JTlRfRU5FVF9NQUMxCQkxMDIKKyNkZWZpbmUgTVgyOF9JTlRfRU5FVF9NQUMwXzE1ODgJCTEwMworI2RlZmluZSBNWDI4X0lOVF9FTkVUX01BQzFfMTU4OAkJMTA0CisjZGVmaW5lIE1YMjhfSU5UX0kyQzFfRVJST1IJCTExMAorI2RlZmluZSBNWDI4X0lOVF9JMkMwX0VSUk9SCQkxMTEKKyNkZWZpbmUgTVgyOF9JTlRfQVVBUlQwCQkJMTEyCisjZGVmaW5lIE1YMjhfSU5UX0FVQVJUMQkJCTExMworI2RlZmluZSBNWDI4X0lOVF9BVUFSVDIJCQkxMTQKKyNkZWZpbmUgTVgyOF9JTlRfQVVBUlQzCQkJMTE1CisjZGVmaW5lIE1YMjhfSU5UX0FVQVJUNAkJCTExNgorI2RlZmluZSBNWDI4X0lOVF9HUElPNAkJCTEyMworI2RlZmluZSBNWDI4X0lOVF9HUElPMwkJCTEyNAorI2RlZmluZSBNWDI4X0lOVF9HUElPMgkJCTEyNQorI2RlZmluZSBNWDI4X0lOVF9HUElPMQkJCTEyNgorI2RlZmluZSBNWDI4X0lOVF9HUElPMAkJCTEyNworCisjZW5kaWYgLyogX19NQUNIX01YMjhfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14cy9pbmNsdWRlL21hY2gvbXhzLmggYi9hcmNoL2FybS9tYWNoLW14cy9pbmNsdWRlL21hY2gvbXhzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE4NmMwOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXhzL2luY2x1ZGUvbWFjaC9teHMuaApAQCAtMCwwICsxLDEwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqLworCisjaWZuZGVmIF9fTUFDSF9NWFNfSF9fCisjZGVmaW5lIF9fTUFDSF9NWFNfSF9fCisKKyNpZm5kZWYgX19BU1NFTUJMRVJfXworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKworLyoKKyAqIE1YUyBDUFUgdHlwZXMKKyAqLworI2RlZmluZSBjcHVfaXNfbXgyMygpCQkobWFjaGluZV9pc19teDIzZXZrKCkpCisjZGVmaW5lIGNwdV9pc19teDI4KCkJCShtYWNoaW5lX2lzX214MjhldmsoKSkKKworLyoKKyAqIElPIGFkZHJlc3NlcyBjb21tb24gdG8gTVhTLWJhc2VkCisgKi8KKyNkZWZpbmUgTVhTX0lPX0JBU0VfQUREUgkJMHg4MDAwMDAwMAorI2RlZmluZSBNWFNfSU9fU0laRQkJCVNaXzFNCisKKyNkZWZpbmUgTVhTX0lDT0xMX0JBU0VfQUREUgkJKE1YU19JT19CQVNFX0FERFIgKyAweDAwMDAwMCkKKyNkZWZpbmUgTVhTX0FQQkhfRE1BX0JBU0VfQUREUgkJKE1YU19JT19CQVNFX0FERFIgKyAweDAwNDAwMCkKKyNkZWZpbmUgTVhTX0JDSF9CQVNFX0FERFIJCShNWFNfSU9fQkFTRV9BRERSICsgMHgwMGEwMDApCisjZGVmaW5lIE1YU19HUE1JX0JBU0VfQUREUgkJKE1YU19JT19CQVNFX0FERFIgKyAweDAwYzAwMCkKKyNkZWZpbmUgTVhTX1BJTkNUUkxfQkFTRV9BRERSCQkoTVhTX0lPX0JBU0VfQUREUiArIDB4MDE4MDAwKQorI2RlZmluZSBNWFNfRElHQ1RMX0JBU0VfQUREUgkJKE1YU19JT19CQVNFX0FERFIgKyAweDAxYzAwMCkKKyNkZWZpbmUgTVhTX0FQQlhfRE1BX0JBU0VfQUREUgkJKE1YU19JT19CQVNFX0FERFIgKyAweDAyNDAwMCkKKyNkZWZpbmUgTVhTX0RDUF9CQVNFX0FERFIJCShNWFNfSU9fQkFTRV9BRERSICsgMHgwMjgwMDApCisjZGVmaW5lIE1YU19QWFBfQkFTRV9BRERSCQkoTVhTX0lPX0JBU0VfQUREUiArIDB4MDJhMDAwKQorI2RlZmluZSBNWFNfT0NPVFBfQkFTRV9BRERSCQkoTVhTX0lPX0JBU0VfQUREUiArIDB4MDJjMDAwKQorI2RlZmluZSBNWFNfQVhJX0FIQjBfQkFTRV9BRERSCQkoTVhTX0lPX0JBU0VfQUREUiArIDB4MDJlMDAwKQorI2RlZmluZSBNWFNfTENESUZfQkFTRV9BRERSCQkoTVhTX0lPX0JBU0VfQUREUiArIDB4MDMwMDAwKQorI2RlZmluZSBNWFNfQ0xLQ1RSTF9CQVNFX0FERFIJCShNWFNfSU9fQkFTRV9BRERSICsgMHgwNDAwMDApCisjZGVmaW5lIE1YU19TQUlGMF9CQVNFX0FERFIJCShNWFNfSU9fQkFTRV9BRERSICsgMHgwNDIwMDApCisjZGVmaW5lIE1YU19QT1dFUl9CQVNFX0FERFIJCShNWFNfSU9fQkFTRV9BRERSICsgMHgwNDQwMDApCisjZGVmaW5lIE1YU19TQUlGMV9CQVNFX0FERFIJCShNWFNfSU9fQkFTRV9BRERSICsgMHgwNDYwMDApCisjZGVmaW5lIE1YU19MUkFEQ19CQVNFX0FERFIJCShNWFNfSU9fQkFTRV9BRERSICsgMHgwNTAwMDApCisjZGVmaW5lIE1YU19TUERJRl9CQVNFX0FERFIJCShNWFNfSU9fQkFTRV9BRERSICsgMHgwNTQwMDApCisjZGVmaW5lIE1YU19JMkMwX0JBU0VfQUREUgkJKE1YU19JT19CQVNFX0FERFIgKyAweDA1ODAwMCkKKyNkZWZpbmUgTVhTX1BXTV9CQVNFX0FERFIJCShNWFNfSU9fQkFTRV9BRERSICsgMHgwNjQwMDApCisjZGVmaW5lIE1YU19USU1ST1RfQkFTRV9BRERSCQkoTVhTX0lPX0JBU0VfQUREUiArIDB4MDY4MDAwKQorI2RlZmluZSBNWFNfQVVBUlQxX0JBU0VfQUREUgkJKE1YU19JT19CQVNFX0FERFIgKyAweDA2YzAwMCkKKyNkZWZpbmUgTVhTX0FVQVJUMl9CQVNFX0FERFIJCShNWFNfSU9fQkFTRV9BRERSICsgMHgwNmUwMDApCisjZGVmaW5lIE1YU19EUkFNX0JBU0VfQUREUgkJKE1YU19JT19CQVNFX0FERFIgKyAweDBlMDAwMCkKKworLyoKKyAqIEl0IG1hcHMgdGhlIHdob2xlIGFkZHJlc3Mgc3BhY2UgdG8gWzB4ZjQwMDAwMDAsIDB4ZjUwZmZmZmZdLgorICoKKyAqCU9DUkFNCTB4MDAwMDAwMDArMHgwMjAwMDAJLT4JMHhmNDAwMDAwMCsweDAyMDAwMAorICoJSU8JMHg4MDAwMDAwMCsweDEwMDAwMAktPgkweGY1MDAwMDAwKzB4MTAwMDAwCisgKi8KKyNkZWZpbmUgTVhTX0lPX1AyVih4KQkoMHhmNDAwMDAwMCArCQkJCQlcCisJCQkoKCh4KSAmIDB4ODAwMDAwMDApID4+IDcpICsJCQlcCisJCQkoKCh4KSAmIDB4MDAwZmZmZmYpKSkKKworI2RlZmluZSBNWFNfSU9fQUREUkVTUyh4KQlJT01FTShNWFNfSU9fUDJWKHgpKQorCisjZGVmaW5lIG14c19tYXBfZW50cnkoc29jLCBuYW1lLCBfdHlwZSkJewkJCQlcCisJLnZpcnR1YWwgPSBzb2MgIyMgX0lPX1AyVihzb2MgIyMgXyAjIyBuYW1lICMjIF9CQVNFX0FERFIpLAlcCisJLnBmbiA9IF9fcGh5c190b19wZm4oc29jICMjIF8gIyMgbmFtZSAjIyBfQkFTRV9BRERSKSwJCVwKKwkubGVuZ3RoID0gc29jICMjIF8gIyMgbmFtZSAjIyBfU0laRSwJCQkJXAorCS50eXBlID0gX3R5cGUsCQkJCQkJCVwKK30KKworI2RlZmluZSBNWFNfU0VUX0FERFIJCTB4NAorI2RlZmluZSBNWFNfQ0xSX0FERFIJCTB4OAorI2RlZmluZSBNWFNfVE9HX0FERFIJCTB4YworCisjaWZuZGVmIF9fQVNTRU1CTEVSX18KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX214c19zZXRsKHUzMiBtYXNrLCB2b2lkIF9faW9tZW0gKnJlZykKK3sKKwlfX3Jhd193cml0ZWwobWFzaywgcmVnICsgTVhTX1NFVF9BRERSKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fbXhzX2NscmwodTMyIG1hc2ssIHZvaWQgX19pb21lbSAqcmVnKQoreworCV9fcmF3X3dyaXRlbChtYXNrLCByZWcgKyBNWFNfQ0xSX0FERFIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19teHNfdG9nbCh1MzIgbWFzaywgdm9pZCBfX2lvbWVtICpyZWcpCit7CisJX19yYXdfd3JpdGVsKG1hc2ssIHJlZyArIE1YU19UT0dfQUREUik7Cit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9fTUFDSF9NWFNfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14cy9pbmNsdWRlL21hY2gvc3lzdGVtLmggYi9hcmNoL2FybS9tYWNoLW14cy9pbmNsdWRlL21hY2gvc3lzdGVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU0MjgyMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXhzL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaApAQCAtMCwwICsxLDI3IEBACisvKgorICogIENvcHlyaWdodCAoQykgMTk5OSBBUk0gTGltaXRlZAorICogIENvcHlyaWdodCAoQykgMjAwMCBEZWVwIEJsdWUgU29sdXRpb25zIEx0ZAorICogIENvcHlyaWdodCAyMDA0LTIwMDggRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX01BQ0hfTVhTX1NZU1RFTV9IX18KKyNkZWZpbmUgX19NQUNIX01YU19TWVNURU1fSF9fCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2lkbGUodm9pZCkKK3sKKwljcHVfZG9faWRsZSgpOworfQorCit2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpOworCisjZW5kaWYgLyogX19NQUNIX01YU19TWVNURU1fSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14cy9pbmNsdWRlL21hY2gvdGltZXguaCBiL2FyY2gvYXJtL21hY2gtbXhzL2luY2x1ZGUvbWFjaC90aW1leC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczNGNlODkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW14cy9pbmNsdWRlL21hY2gvdGltZXguaApAQCAtMCwwICsxLDIxIEBACisvKgorICogIENvcHlyaWdodCAoQykgMTk5OSBBUk0gTGltaXRlZAorICogQ29weXJpZ2h0IDIwMDQtMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fTUFDSF9NWFNfVElNRVhfSF9fCisjZGVmaW5lIF9fTUFDSF9NWFNfVElNRVhfSF9fCisKKyNkZWZpbmUgQ0xPQ0tfVElDS19SQVRFCQkzMjAwMAkvKiAzMksgKi8KKworI2VuZGlmIC8qIF9fTUFDSF9NWFNfVElNRVhfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14cy9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oIGIvYXJjaC9hcm0vbWFjaC1teHMvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDA1ZTc2ZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXhzL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqICBhcmNoL2FybS9tYWNoLW14cy9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5OSBBUk0gTGltaXRlZAorICogIENvcHlyaWdodCAoQykgU2hhbmUgTmF5IChzaGFuZUBtaW5pcmwuY29tKQorICogIENvcHlyaWdodCAyMDEwIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9fTUFDSF9NWFNfVU5DT01QUkVTU19IX18KKyNkZWZpbmUgX19NQUNIX01YU19VTkNPTVBSRVNTX0hfXworCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgbXhzX2R1YXJ0X2Jhc2U7CisKKyNkZWZpbmUgTVhTX0RVQVJUKHgpCSgqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikobXhzX2R1YXJ0X2Jhc2UgKyAoeCkpKQorCisjZGVmaW5lIE1YU19EVUFSVF9EUgkJMHgwMAorI2RlZmluZSBNWFNfRFVBUlRfRlIJCTB4MTgKKyNkZWZpbmUgTVhTX0RVQVJUX0ZSX1RYRkUJKDEgPDwgNykKKyNkZWZpbmUgTVhTX0RVQVJUX0NSCQkweDMwCisjZGVmaW5lIE1YU19EVUFSVF9DUl9VQVJURU4JKDEgPDwgMCkKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgY29kZSBhc3N1bWVzIHRoZSBzZXJpYWwgcG9ydCBoYXMgYWxyZWFkeSBiZWVuCisgKiBpbml0aWFsaXplZCBieSB0aGUgYm9vdGxvYWRlci4gSWYgaXQncyBub3QsIHRoZSBvdXRwdXQgaXMKKyAqIHNpbXBseSBkaXNjYXJkZWQuCisgKi8KKworc3RhdGljIHZvaWQgcHV0YyhpbnQgY2gpCit7CisJaWYgKCFteHNfZHVhcnRfYmFzZSkKKwkJcmV0dXJuOworCWlmICghKE1YU19EVUFSVChNWFNfRFVBUlRfQ1IpICYgTVhTX0RVQVJUX0NSX1VBUlRFTikpCisJCXJldHVybjsKKworCXdoaWxlICghKE1YU19EVUFSVChNWFNfRFVBUlRfRlIpICYgTVhTX0RVQVJUX0ZSX1RYRkUpKQorCQliYXJyaWVyKCk7CisKKwlNWFNfRFVBUlQoTVhTX0RVQVJUX0RSKSA9IGNoOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2godm9pZCkKK3sKK30KKworI2RlZmluZSBNWDIzX0RVQVJUX0JBU0VfQUREUgkweDgwMDcwMDAwCisjZGVmaW5lIE1YMjhfRFVBUlRfQkFTRV9BRERSCTB4ODAwNzQwMDAKKworc3RhdGljIGlubGluZSB2b2lkIF9fYXJjaF9kZWNvbXBfc2V0dXAodW5zaWduZWQgbG9uZyBhcmNoX2lkKQoreworCXN3aXRjaCAoYXJjaF9pZCkgeworCWNhc2UgTUFDSF9UWVBFX01YMjNFVks6CisJCW14c19kdWFydF9iYXNlID0gTVgyM19EVUFSVF9CQVNFX0FERFI7CisJCWJyZWFrOworCWNhc2UgTUFDSF9UWVBFX01YMjhFVks6CisJCW14c19kdWFydF9iYXNlID0gTVgyOF9EVUFSVF9CQVNFX0FERFI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworI2RlZmluZSBhcmNoX2RlY29tcF9zZXR1cCgpCV9fYXJjaF9kZWNvbXBfc2V0dXAoYXJjaF9pZCkKKyNkZWZpbmUgYXJjaF9kZWNvbXBfd2RvZygpCisKKyNlbmRpZiAvKiBfX01BQ0hfTVhTX1VOQ09NUFJFU1NfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14cy9pbmNsdWRlL21hY2gvdm1hbGxvYy5oIGIvYXJjaC9hcm0vbWFjaC1teHMvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDNiMDE2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teHMvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaApAQCAtMCwwICsxLDIyIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwMCBSdXNzZWxsIEtpbmcuCisgKiAgQ29weXJpZ2h0IDIwMDQtMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fTUFDSF9NWFNfVk1BTExPQ19IX18KKyNkZWZpbmUgX19NQUNIX01YU19WTUFMTE9DX0hfXworCisvKiB2bWFsbG9jIGVuZGluZyBhZGRyZXNzICovCisjZGVmaW5lIFZNQUxMT0NfRU5EICAgICAgIDB4ZjQwMDAwMDBVTAorCisjZW5kaWYgLyogX19NQUNIX01YU19WTUFMTE9DX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teHMvaW9tdXguYyBiL2FyY2gvYXJtL21hY2gtbXhzL2lvbXV4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU4MDRlMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXhzL2lvbXV4LmMKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA2LDIwMTAgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBieSBTYXNjaGEgSGF1ZXIgPGtlcm5lbEBwZW5ndXRyb25peC5kZT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBieSBKYW4gV2VpdHplbCBQaHl0ZWMgTWVzc3RlY2huaWsgR21iSCwKKyAqICAgICAgICAgICAgICAgICAgICAgICA8YXJtbGludXhAcGh5dGVjLmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAorICogTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKworI2luY2x1ZGUgPG1hY2gvbXhzLmg+CisjaW5jbHVkZSA8bWFjaC9pb211eC5oPgorCisvKgorICogY29uZmlndXJlcyBhIHNpbmdsZSBwYWQgaW4gdGhlIGlvbXV4ZXIKKyAqLworaW50IG14c19pb211eF9zZXR1cF9wYWQoaW9tdXhfY2ZnX3QgcGFkKQoreworCXUzMiByZWcsIG9mcywgYnAsIGJtOworCXZvaWQgX19pb21lbSAqaW9tdXhfYmFzZSA9IE1YU19JT19BRERSRVNTKE1YU19QSU5DVFJMX0JBU0VfQUREUik7CisKKwkvKiBtdXhzZWwgKi8KKwlvZnMgPSAweDEwMDsKKwlvZnMgKz0gUEFEX0JBTksocGFkKSAqIDB4MjAgKyBQQURfUElOKHBhZCkgLyAxNiAqIDB4MTA7CisJYnAgPSBQQURfUElOKHBhZCkgJSAxNiAqIDI7CisJYm0gPSAweDMgPDwgYnA7CisJcmVnID0gX19yYXdfcmVhZGwoaW9tdXhfYmFzZSArIG9mcyk7CisJcmVnICY9IH5ibTsKKwlyZWcgfD0gUEFEX01VWFNFTChwYWQpIDw8IGJwOworCV9fcmF3X3dyaXRlbChyZWcsIGlvbXV4X2Jhc2UgKyBvZnMpOworCisJLyogZHJpdmUgKi8KKwlvZnMgPSBjcHVfaXNfbXgyMygpID8gMHgyMDAgOiAweDMwMDsKKwlvZnMgKz0gUEFEX0JBTksocGFkKSAqIDB4NDAgKyBQQURfUElOKHBhZCkgLyA4ICogMHgxMDsKKwkvKiBtQSAqLworCWlmIChQQURfTUFfVkFMSUQocGFkKSkgeworCQlicCA9IFBBRF9QSU4ocGFkKSAlIDggKiA0OworCQlibSA9IDB4MyA8PCBicDsKKwkJcmVnID0gX19yYXdfcmVhZGwoaW9tdXhfYmFzZSArIG9mcyk7CisJCXJlZyAmPSB+Ym07CisJCXJlZyB8PSBQQURfTUEocGFkKSA8PCBicDsKKwkJX19yYXdfd3JpdGVsKHJlZywgaW9tdXhfYmFzZSArIG9mcyk7CisJfQorCS8qIHZvbCAqLworCWlmIChQQURfVk9MX1ZBTElEKHBhZCkpIHsKKwkJYnAgPSBQQURfUElOKHBhZCkgJSA4ICogNCArIDI7CisJCWlmIChQQURfVk9MKHBhZCkpCisJCQlfX214c19zZXRsKDEgPDwgYnAsIGlvbXV4X2Jhc2UgKyBvZnMpOworCQllbHNlCisJCQlfX214c19jbHJsKDEgPDwgYnAsIGlvbXV4X2Jhc2UgKyBvZnMpOworCX0KKworCS8qIHB1bGwgKi8KKwlpZiAoUEFEX1BVTExfVkFMSUQocGFkKSkgeworCQlvZnMgPSBjcHVfaXNfbXgyMygpID8gMHg0MDAgOiAweDYwMDsKKwkJb2ZzICs9IFBBRF9CQU5LKHBhZCkgKiAweDEwOworCQlicCA9IFBBRF9QSU4ocGFkKTsKKwkJaWYgKFBBRF9QVUxMKHBhZCkpCisJCQlfX214c19zZXRsKDEgPDwgYnAsIGlvbXV4X2Jhc2UgKyBvZnMpOworCQllbHNlCisJCQlfX214c19jbHJsKDEgPDwgYnAsIGlvbXV4X2Jhc2UgKyBvZnMpOworCX0KKworCXJldHVybiAwOworfQorCitpbnQgbXhzX2lvbXV4X3NldHVwX211bHRpcGxlX3BhZHMoY29uc3QgaW9tdXhfY2ZnX3QgKnBhZF9saXN0LCB1bnNpZ25lZCBjb3VudCkKK3sKKwljb25zdCBpb211eF9jZmdfdCAqcCA9IHBhZF9saXN0OworCWludCBpOworCWludCByZXQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlyZXQgPSBteHNfaW9tdXhfc2V0dXBfcGFkKCpwKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJCXArKzsKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXhzL21hY2gtbXgyM2V2ay5jIGIvYXJjaC9hcm0vbWFjaC1teHMvbWFjaC1teDIzZXZrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWEwNjQwMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXhzL21hY2gtbXgyM2V2ay5jCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CisKKyNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgorI2luY2x1ZGUgPG1hY2gvaW9tdXgtbXgyMy5oPgorCisjaW5jbHVkZSAiZGV2aWNlcy1teDIzLmgiCisKK3N0YXRpYyBjb25zdCBpb211eF9jZmdfdCBteDIzZXZrX3BhZHNbXSBfX2luaXRjb25zdCA9IHsKKwkvKiBkdWFydCAqLworCU1YMjNfUEFEX1BXTTBfX0RVQVJUX1JYIHwgTVhTX1BBRF80TUEsCisJTVgyM19QQURfUFdNMV9fRFVBUlRfVFggfCBNWFNfUEFEXzRNQSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBteDIzZXZrX2luaXQodm9pZCkKK3sKKwlteHNfaW9tdXhfc2V0dXBfbXVsdGlwbGVfcGFkcyhteDIzZXZrX3BhZHMsIEFSUkFZX1NJWkUobXgyM2V2a19wYWRzKSk7CisKKwlteDIzX2FkZF9kdWFydCgpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgbXgyM2V2a190aW1lcl9pbml0KHZvaWQpCit7CisJbXgyM19jbG9ja3NfaW5pdCgpOworfQorCitzdGF0aWMgc3RydWN0IHN5c190aW1lciBteDIzZXZrX3RpbWVyID0geworCS5pbml0CT0gbXgyM2V2a190aW1lcl9pbml0LAorfTsKKworTUFDSElORV9TVEFSVChNWDIzRVZLLCAiRnJlZXNjYWxlIE1YMjMgRVZLIikKKwkvKiBNYWludGFpbmVyOiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiAqLworCS5tYXBfaW8JCT0gbXgyM19tYXBfaW8sCisJLmluaXRfaXJxCT0gbXgyM19pbml0X2lycSwKKwkuaW5pdF9tYWNoaW5lCT0gbXgyM2V2a19pbml0LAorCS50aW1lcgkJPSAmbXgyM2V2a190aW1lciwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14cy9tYWNoLW14MjhldmsuYyBiL2FyY2gvYXJtL21hY2gtbXhzL21hY2gtbXgyOGV2ay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxNjJlOTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW14cy9tYWNoLW14MjhldmsuYwpAQCAtMCwwICsxLDEzOCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKworI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CisjaW5jbHVkZSA8bWFjaC9pb211eC1teDI4Lmg+CisKKyNpbmNsdWRlICJkZXZpY2VzLW14MjguaCIKKyNpbmNsdWRlICJncGlvLmgiCisKKyNkZWZpbmUgTVgyOEVWS19GRUNfUEhZX1BPV0VSCU1YU19HUElPX05SKDIsIDE1KQorI2RlZmluZSBNWDI4RVZLX0ZFQ19QSFlfUkVTRVQJTVhTX0dQSU9fTlIoNCwgMTMpCisKK3N0YXRpYyBjb25zdCBpb211eF9jZmdfdCBteDI4ZXZrX3BhZHNbXSBfX2luaXRjb25zdCA9IHsKKwkvKiBkdWFydCAqLworCU1YMjhfUEFEX1BXTTBfX0RVQVJUX1JYIHwKKwkJKE1YU19QQURfNE1BIHwgTVhTX1BBRF8zVjMgfCBNWFNfUEFEX05PUFVMTCksCisJTVgyOF9QQURfUFdNMV9fRFVBUlRfVFggfAorCQkoTVhTX1BBRF80TUEgfCBNWFNfUEFEXzNWMyB8IE1YU19QQURfTk9QVUxMKSwKKworCS8qIGZlYzAgKi8KKwlNWDI4X1BBRF9FTkVUMF9NRENfX0VORVQwX01EQyB8CisJCShNWFNfUEFEXzhNQSB8IE1YU19QQURfM1YzIHwgTVhTX1BBRF9QVUxMVVApLAorCU1YMjhfUEFEX0VORVQwX01ESU9fX0VORVQwX01ESU8gfAorCQkoTVhTX1BBRF84TUEgfCBNWFNfUEFEXzNWMyB8IE1YU19QQURfUFVMTFVQKSwKKwlNWDI4X1BBRF9FTkVUMF9SWF9FTl9fRU5FVDBfUlhfRU4gfAorCQkoTVhTX1BBRF84TUEgfCBNWFNfUEFEXzNWMyB8IE1YU19QQURfUFVMTFVQKSwKKwlNWDI4X1BBRF9FTkVUMF9SWEQwX19FTkVUMF9SWEQwIHwKKwkJKE1YU19QQURfOE1BIHwgTVhTX1BBRF8zVjMgfCBNWFNfUEFEX1BVTExVUCksCisJTVgyOF9QQURfRU5FVDBfUlhEMV9fRU5FVDBfUlhEMSB8CisJCShNWFNfUEFEXzhNQSB8IE1YU19QQURfM1YzIHwgTVhTX1BBRF9QVUxMVVApLAorCU1YMjhfUEFEX0VORVQwX1RYX0VOX19FTkVUMF9UWF9FTiB8CisJCShNWFNfUEFEXzhNQSB8IE1YU19QQURfM1YzIHwgTVhTX1BBRF9QVUxMVVApLAorCU1YMjhfUEFEX0VORVQwX1RYRDBfX0VORVQwX1RYRDAgfAorCQkoTVhTX1BBRF84TUEgfCBNWFNfUEFEXzNWMyB8IE1YU19QQURfUFVMTFVQKSwKKwlNWDI4X1BBRF9FTkVUMF9UWEQxX19FTkVUMF9UWEQxIHwKKwkJKE1YU19QQURfOE1BIHwgTVhTX1BBRF8zVjMgfCBNWFNfUEFEX1BVTExVUCksCisJTVgyOF9QQURfRU5FVF9DTEtfX0NMS0NUUkxfRU5FVCB8CisJCShNWFNfUEFEXzhNQSB8IE1YU19QQURfM1YzIHwgTVhTX1BBRF9QVUxMVVApLAorCS8qIHBoeSBwb3dlciBsaW5lICovCisJTVgyOF9QQURfU1NQMV9EQVRBM19fR1BJT18yXzE1IHwKKwkJKE1YU19QQURfNE1BIHwgTVhTX1BBRF8zVjMgfCBNWFNfUEFEX05PUFVMTCksCisJLyogcGh5IHJlc2V0IGxpbmUgKi8KKwlNWDI4X1BBRF9FTkVUMF9SWF9DTEtfX0dQSU9fNF8xMyB8CisJCShNWFNfUEFEXzRNQSB8IE1YU19QQURfM1YzIHwgTVhTX1BBRF9OT1BVTEwpLAorfTsKKworLyogZmVjICovCitzdGF0aWMgdm9pZCBfX2luaXQgbXgyOGV2a19mZWNfcmVzZXQodm9pZCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBjbGsgKmNsazsKKworCS8qIEVuYWJsZSBmZWMgcGh5IGNsb2NrICovCisJY2xrID0gY2xrX2dldF9zeXMoInBsbDIiLCBOVUxMKTsKKwlpZiAoIUlTX0VSUihjbGspKQorCQljbGtfZW5hYmxlKGNsayk7CisKKwkvKiBQb3dlciB1cCBmZWMgcGh5ICovCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KE1YMjhFVktfRkVDX1BIWV9QT1dFUiwgImZlYy1waHktcG93ZXIiKTsKKwlpZiAocmV0KSB7CisJCXByX2VycigiRmFpbGVkIHRvIHJlcXVlc3QgZ3BpbyBmZWMtcGh5LSVzOiAlZFxuIiwgInBvd2VyIiwgcmV0KTsKKwkJcmV0dXJuOworCX0KKworCXJldCA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChNWDI4RVZLX0ZFQ19QSFlfUE9XRVIsIDApOworCWlmIChyZXQpIHsKKwkJcHJfZXJyKCJGYWlsZWQgdG8gZHJpdmUgZ3BpbyBmZWMtcGh5LSVzOiAlZFxuIiwgInBvd2VyIiwgcmV0KTsKKwkJcmV0dXJuOworCX0KKworCS8qIFJlc2V0IGZlYyBwaHkgKi8KKwlyZXQgPSBncGlvX3JlcXVlc3QoTVgyOEVWS19GRUNfUEhZX1JFU0VULCAiZmVjLXBoeS1yZXNldCIpOworCWlmIChyZXQpIHsKKwkJcHJfZXJyKCJGYWlsZWQgdG8gcmVxdWVzdCBncGlvIGZlYy1waHktJXM6ICVkXG4iLCAicmVzZXQiLCByZXQpOworCQlyZXR1cm47CisJfQorCisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KE1YMjhFVktfRkVDX1BIWV9SRVNFVCwgMCk7CisJaWYgKHJldCkgeworCQlwcl9lcnIoIkZhaWxlZCB0byBkcml2ZSBncGlvIGZlYy1waHktJXM6ICVkXG4iLCAicmVzZXQiLCByZXQpOworCQlyZXR1cm47CisJfQorCisJbWRlbGF5KDEpOworCWdwaW9fc2V0X3ZhbHVlKE1YMjhFVktfRkVDX1BIWV9SRVNFVCwgMSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmVjX3BsYXRmb3JtX2RhdGEgbXgyOF9mZWNfcGRhdGEgX19pbml0Y29uc3QgPSB7CisJLnBoeSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IG14MjhldmtfaW5pdCh2b2lkKQoreworCW14c19pb211eF9zZXR1cF9tdWx0aXBsZV9wYWRzKG14MjhldmtfcGFkcywgQVJSQVlfU0laRShteDI4ZXZrX3BhZHMpKTsKKworCW14MjhfYWRkX2R1YXJ0KCk7CisKKwlteDI4ZXZrX2ZlY19yZXNldCgpOworCW14MjhfYWRkX2ZlYygwLCAmbXgyOF9mZWNfcGRhdGEpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgbXgyOGV2a190aW1lcl9pbml0KHZvaWQpCit7CisJbXgyOF9jbG9ja3NfaW5pdCgpOworfQorCitzdGF0aWMgc3RydWN0IHN5c190aW1lciBteDI4ZXZrX3RpbWVyID0geworCS5pbml0CT0gbXgyOGV2a190aW1lcl9pbml0LAorfTsKKworTUFDSElORV9TVEFSVChNWDI4RVZLLCAiRnJlZXNjYWxlIE1YMjggRVZLIikKKwkvKiBNYWludGFpbmVyOiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiAqLworCS5tYXBfaW8JCT0gbXgyOF9tYXBfaW8sCisJLmluaXRfaXJxCT0gbXgyOF9pbml0X2lycSwKKwkuaW5pdF9tYWNoaW5lCT0gbXgyOGV2a19pbml0LAorCS50aW1lcgkJPSAmbXgyOGV2a190aW1lciwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14cy9tbS1teDIzLmMgYi9hcmNoL2FybS9tYWNoLW14cy9tbS1teDIzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE0OGNkNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXhzL21tLW14MjMuYwpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IDIwMDgtMjAxMCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoZSBjb2RlIGNvbnRhaW5lZCBoZXJlaW4gaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIFZlcnNpb24gMiBvciBsYXRlciBhdCB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczoKKyAqCisgKiBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2dwbC1saWNlbnNlLmh0bWwKKyAqIGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9ncGwuaHRtbAorICoKKyAqIENyZWF0ZSBzdGF0aWMgbWFwcGluZyBiZXR3ZWVuIHBoeXNpY2FsIHRvIHZpcnR1YWwgbWVtb3J5LgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorCisjaW5jbHVkZSA8bWFjaC9teDIzLmg+CisjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KKyNpbmNsdWRlIDxtYWNoL2lvbXV4Lmg+CisKKy8qCisgKiBEZWZpbmUgdGhlIE1YMjMgbWVtb3J5IG1hcC4KKyAqLworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBteDIzX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0geworCW14c19tYXBfZW50cnkoTVgyMywgT0NSQU0sIE1UX0RFVklDRSksCisJbXhzX21hcF9lbnRyeShNWDIzLCBJTywgTVRfREVWSUNFKSwKK307CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBtZW1vcnkgbWFwLiBJdCBpcyBjYWxsZWQgZHVyaW5nIHRoZQorICogc3lzdGVtIHN0YXJ0dXAgdG8gY3JlYXRlIHN0YXRpYyBwaHlzaWNhbCB0byB2aXJ0dWFsIG1lbW9yeSBtYXBwaW5ncworICogZm9yIHRoZSBJTyBtb2R1bGVzLgorICovCit2b2lkIF9faW5pdCBteDIzX21hcF9pbyh2b2lkKQoreworCWlvdGFibGVfaW5pdChteDIzX2lvX2Rlc2MsIEFSUkFZX1NJWkUobXgyM19pb19kZXNjKSk7Cit9CisKK3ZvaWQgX19pbml0IG14MjNfaW5pdF9pcnEodm9pZCkKK3sKKwlpY29sbF9pbml0X2lycSgpOworCW14MjNfcmVnaXN0ZXJfZ3Bpb3MoKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXhzL21tLW14MjguYyBiL2FyY2gvYXJtL21hY2gtbXhzL21tLW14MjguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTRjZWEzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teHMvbW0tbXgyOC5jCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOC0yMDEwIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhlIGNvZGUgY29udGFpbmVkIGhlcmVpbiBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogVmVyc2lvbiAyIG9yIGxhdGVyIGF0IHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOgorICoKKyAqIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvZ3BsLWxpY2Vuc2UuaHRtbAorICogaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2dwbC5odG1sCisgKgorICogQ3JlYXRlIHN0YXRpYyBtYXBwaW5nIGJldHdlZW4gcGh5c2ljYWwgdG8gdmlydHVhbCBtZW1vcnkuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisKKyNpbmNsdWRlIDxtYWNoL214MjguaD4KKyNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgorI2luY2x1ZGUgPG1hY2gvaW9tdXguaD4KKworLyoKKyAqIERlZmluZSB0aGUgTVgyOCBtZW1vcnkgbWFwLgorICovCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIG14MjhfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJbXhzX21hcF9lbnRyeShNWDI4LCBPQ1JBTSwgTVRfREVWSUNFKSwKKwlteHNfbWFwX2VudHJ5KE1YMjgsIElPLCBNVF9ERVZJQ0UpLAorfTsKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIG1lbW9yeSBtYXAuIEl0IGlzIGNhbGxlZCBkdXJpbmcgdGhlCisgKiBzeXN0ZW0gc3RhcnR1cCB0byBjcmVhdGUgc3RhdGljIHBoeXNpY2FsIHRvIHZpcnR1YWwgbWVtb3J5IG1hcHBpbmdzCisgKiBmb3IgdGhlIElPIG1vZHVsZXMuCisgKi8KK3ZvaWQgX19pbml0IG14MjhfbWFwX2lvKHZvaWQpCit7CisJaW90YWJsZV9pbml0KG14MjhfaW9fZGVzYywgQVJSQVlfU0laRShteDI4X2lvX2Rlc2MpKTsKK30KKwordm9pZCBfX2luaXQgbXgyOF9pbml0X2lycSh2b2lkKQoreworCWljb2xsX2luaXRfaXJxKCk7CisJbXgyOF9yZWdpc3Rlcl9ncGlvcygpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teHMvcmVncy1jbGtjdHJsLW14MjMuaCBiL2FyY2gvYXJtL21hY2gtbXhzL3JlZ3MtY2xrY3RybC1teDIzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJjMDQ3NAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXhzL3JlZ3MtY2xrY3RybC1teDIzLmgKQEAgLTAsMCArMSw0NTUgQEAKKy8qCisgKiBGcmVlc2NhbGUgQ0xLQ1RSTCBSZWdpc3RlciBEZWZpbml0aW9ucworICoKKyAqIENvcHlyaWdodCAyMDA4IEVtYmVkZGVkIEFsbGV5IFNvbHV0aW9ucywgSW5jIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwOC0yMDEwIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKgorICogVGhpcyBmaWxlIGlzIGNyZWF0ZWQgYnkgeG1sIGZpbGUuIERvbid0IEVkaXQgaXQuCisgKgorICogWG1sIFJldmlzaW9uOiAxLjQ4CisgKiBUZW1wbGF0ZSByZXZpc2lvbjogMjYxOTUKKyAqLworCisjaWZuZGVmIF9fUkVHU19DTEtDVFJMX01YMjNfSF9fCisjZGVmaW5lIF9fUkVHU19DTEtDVFJMX01YMjNfSF9fCisKKworI2RlZmluZSBIV19DTEtDVFJMX1BMTENUUkwwCSgweDAwMDAwMDAwKQorI2RlZmluZSBIV19DTEtDVFJMX1BMTENUUkwwX1NFVAkoMHgwMDAwMDAwNCkKKyNkZWZpbmUgSFdfQ0xLQ1RSTF9QTExDVFJMMF9DTFIJKDB4MDAwMDAwMDgpCisjZGVmaW5lIEhXX0NMS0NUUkxfUExMQ1RSTDBfVE9HCSgweDAwMDAwMDBjKQorCisjZGVmaW5lIEJQX0NMS0NUUkxfUExMQ1RSTDBfUlNSVkQ2CTMwCisjZGVmaW5lIEJNX0NMS0NUUkxfUExMQ1RSTDBfUlNSVkQ2CTB4QzAwMDAwMDAKKyNkZWZpbmUgQkZfQ0xLQ1RSTF9QTExDVFJMMF9SU1JWRDYodikgXAorCQkoKCh2KSA8PCAzMCkgJiBCTV9DTEtDVFJMX1BMTENUUkwwX1JTUlZENikKKyNkZWZpbmUgQlBfQ0xLQ1RSTF9QTExDVFJMMF9MRlJfU0VMCTI4CisjZGVmaW5lIEJNX0NMS0NUUkxfUExMQ1RSTDBfTEZSX1NFTAkweDMwMDAwMDAwCisjZGVmaW5lIEJGX0NMS0NUUkxfUExMQ1RSTDBfTEZSX1NFTCh2KSAgXAorCQkoKCh2KSA8PCAyOCkgJiBCTV9DTEtDVFJMX1BMTENUUkwwX0xGUl9TRUwpCisjZGVmaW5lIEJWX0NMS0NUUkxfUExMQ1RSTDBfTEZSX1NFTF9fREVGQVVMVCAgIDB4MAorI2RlZmluZSBCVl9DTEtDVFJMX1BMTENUUkwwX0xGUl9TRUxfX1RJTUVTXzIgICAweDEKKyNkZWZpbmUgQlZfQ0xLQ1RSTF9QTExDVFJMMF9MRlJfU0VMX19USU1FU18wNSAgMHgyCisjZGVmaW5lIEJWX0NMS0NUUkxfUExMQ1RSTDBfTEZSX1NFTF9fVU5ERUZJTkVEIDB4MworI2RlZmluZSBCUF9DTEtDVFJMX1BMTENUUkwwX1JTUlZENQkyNgorI2RlZmluZSBCTV9DTEtDVFJMX1BMTENUUkwwX1JTUlZENQkweDBDMDAwMDAwCisjZGVmaW5lIEJGX0NMS0NUUkxfUExMQ1RSTDBfUlNSVkQ1KHYpICBcCisJCSgoKHYpIDw8IDI2KSAmIEJNX0NMS0NUUkxfUExMQ1RSTDBfUlNSVkQ1KQorI2RlZmluZSBCUF9DTEtDVFJMX1BMTENUUkwwX0NQX1NFTAkyNAorI2RlZmluZSBCTV9DTEtDVFJMX1BMTENUUkwwX0NQX1NFTAkweDAzMDAwMDAwCisjZGVmaW5lIEJGX0NMS0NUUkxfUExMQ1RSTDBfQ1BfU0VMKHYpICBcCisJCSgoKHYpIDw8IDI0KSAmIEJNX0NMS0NUUkxfUExMQ1RSTDBfQ1BfU0VMKQorI2RlZmluZSBCVl9DTEtDVFJMX1BMTENUUkwwX0NQX1NFTF9fREVGQVVMVCAgIDB4MAorI2RlZmluZSBCVl9DTEtDVFJMX1BMTENUUkwwX0NQX1NFTF9fVElNRVNfMiAgIDB4MQorI2RlZmluZSBCVl9DTEtDVFJMX1BMTENUUkwwX0NQX1NFTF9fVElNRVNfMDUgIDB4MgorI2RlZmluZSBCVl9DTEtDVFJMX1BMTENUUkwwX0NQX1NFTF9fVU5ERUZJTkVEIDB4MworI2RlZmluZSBCUF9DTEtDVFJMX1BMTENUUkwwX1JTUlZENAkyMgorI2RlZmluZSBCTV9DTEtDVFJMX1BMTENUUkwwX1JTUlZENAkweDAwQzAwMDAwCisjZGVmaW5lIEJGX0NMS0NUUkxfUExMQ1RSTDBfUlNSVkQ0KHYpICBcCisJCSgoKHYpIDw8IDIyKSAmIEJNX0NMS0NUUkxfUExMQ1RSTDBfUlNSVkQ0KQorI2RlZmluZSBCUF9DTEtDVFJMX1BMTENUUkwwX0RJVl9TRUwJMjAKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9QTExDVFJMMF9ESVZfU0VMCTB4MDAzMDAwMDAKKyNkZWZpbmUgQkZfQ0xLQ1RSTF9QTExDVFJMMF9ESVZfU0VMKHYpICBcCisJCSgoKHYpIDw8IDIwKSAmIEJNX0NMS0NUUkxfUExMQ1RSTDBfRElWX1NFTCkKKyNkZWZpbmUgQlZfQ0xLQ1RSTF9QTExDVFJMMF9ESVZfU0VMX19ERUZBVUxUICAgMHgwCisjZGVmaW5lIEJWX0NMS0NUUkxfUExMQ1RSTDBfRElWX1NFTF9fTE9XRVIgICAgIDB4MQorI2RlZmluZSBCVl9DTEtDVFJMX1BMTENUUkwwX0RJVl9TRUxfX0xPV0VTVCAgICAweDIKKyNkZWZpbmUgQlZfQ0xLQ1RSTF9QTExDVFJMMF9ESVZfU0VMX19VTkRFRklORUQgMHgzCisjZGVmaW5lIEJNX0NMS0NUUkxfUExMQ1RSTDBfUlNSVkQzCTB4MDAwODAwMDAKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9QTExDVFJMMF9FTl9VU0JfQ0xLUwkweDAwMDQwMDAwCisjZGVmaW5lIEJNX0NMS0NUUkxfUExMQ1RSTDBfUlNSVkQyCTB4MDAwMjAwMDAKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9QTExDVFJMMF9QT1dFUgkweDAwMDEwMDAwCisjZGVmaW5lIEJQX0NMS0NUUkxfUExMQ1RSTDBfUlNSVkQxCTAKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9QTExDVFJMMF9SU1JWRDEJMHgwMDAwRkZGRgorI2RlZmluZSBCRl9DTEtDVFJMX1BMTENUUkwwX1JTUlZEMSh2KSAgXAorCQkoKCh2KSA8PCAwKSAmIEJNX0NMS0NUUkxfUExMQ1RSTDBfUlNSVkQxKQorCisjZGVmaW5lIEhXX0NMS0NUUkxfUExMQ1RSTDEJKDB4MDAwMDAwMTApCisKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9QTExDVFJMMV9MT0NLCTB4ODAwMDAwMDAKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9QTExDVFJMMV9GT1JDRV9MT0NLCTB4NDAwMDAwMDAKKyNkZWZpbmUgQlBfQ0xLQ1RSTF9QTExDVFJMMV9SU1JWRDEJMTYKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9QTExDVFJMMV9SU1JWRDEJMHgzRkZGMDAwMAorI2RlZmluZSBCRl9DTEtDVFJMX1BMTENUUkwxX1JTUlZEMSh2KSAgXAorCQkoKCh2KSA8PCAxNikgJiBCTV9DTEtDVFJMX1BMTENUUkwxX1JTUlZEMSkKKyNkZWZpbmUgQlBfQ0xLQ1RSTF9QTExDVFJMMV9MT0NLX0NPVU5UCTAKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9QTExDVFJMMV9MT0NLX0NPVU5UCTB4MDAwMEZGRkYKKyNkZWZpbmUgQkZfQ0xLQ1RSTF9QTExDVFJMMV9MT0NLX0NPVU5UKHYpICBcCisJCSgoKHYpIDw8IDApICYgQk1fQ0xLQ1RSTF9QTExDVFJMMV9MT0NLX0NPVU5UKQorCisjZGVmaW5lIEhXX0NMS0NUUkxfQ1BVCSgweDAwMDAwMDIwKQorI2RlZmluZSBIV19DTEtDVFJMX0NQVV9TRVQJKDB4MDAwMDAwMjQpCisjZGVmaW5lIEhXX0NMS0NUUkxfQ1BVX0NMUgkoMHgwMDAwMDAyOCkKKyNkZWZpbmUgSFdfQ0xLQ1RSTF9DUFVfVE9HCSgweDAwMDAwMDJjKQorCisjZGVmaW5lIEJQX0NMS0NUUkxfQ1BVX1JTUlZENQkzMAorI2RlZmluZSBCTV9DTEtDVFJMX0NQVV9SU1JWRDUJMHhDMDAwMDAwMAorI2RlZmluZSBCRl9DTEtDVFJMX0NQVV9SU1JWRDUodikgXAorCQkoKCh2KSA8PCAzMCkgJiBCTV9DTEtDVFJMX0NQVV9SU1JWRDUpCisjZGVmaW5lIEJNX0NMS0NUUkxfQ1BVX0JVU1lfUkVGX1hUQUwJMHgyMDAwMDAwMAorI2RlZmluZSBCTV9DTEtDVFJMX0NQVV9CVVNZX1JFRl9DUFUJMHgxMDAwMDAwMAorI2RlZmluZSBCTV9DTEtDVFJMX0NQVV9SU1JWRDQJMHgwODAwMDAwMAorI2RlZmluZSBCTV9DTEtDVFJMX0NQVV9ESVZfWFRBTF9GUkFDX0VOCTB4MDQwMDAwMDAKKyNkZWZpbmUgQlBfQ0xLQ1RSTF9DUFVfRElWX1hUQUwJMTYKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9DUFVfRElWX1hUQUwJMHgwM0ZGMDAwMAorI2RlZmluZSBCRl9DTEtDVFJMX0NQVV9ESVZfWFRBTCh2KSAgXAorCQkoKCh2KSA8PCAxNikgJiBCTV9DTEtDVFJMX0NQVV9ESVZfWFRBTCkKKyNkZWZpbmUgQlBfQ0xLQ1RSTF9DUFVfUlNSVkQzCTEzCisjZGVmaW5lIEJNX0NMS0NUUkxfQ1BVX1JTUlZEMwkweDAwMDBFMDAwCisjZGVmaW5lIEJGX0NMS0NUUkxfQ1BVX1JTUlZEMyh2KSAgXAorCQkoKCh2KSA8PCAxMykgJiBCTV9DTEtDVFJMX0NQVV9SU1JWRDMpCisjZGVmaW5lIEJNX0NMS0NUUkxfQ1BVX0lOVEVSUlVQVF9XQUlUCTB4MDAwMDEwMDAKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9DUFVfUlNSVkQyCTB4MDAwMDA4MDAKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9DUFVfRElWX0NQVV9GUkFDX0VOCTB4MDAwMDA0MDAKKyNkZWZpbmUgQlBfQ0xLQ1RSTF9DUFVfUlNSVkQxCTYKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9DUFVfUlNSVkQxCTB4MDAwMDAzQzAKKyNkZWZpbmUgQkZfQ0xLQ1RSTF9DUFVfUlNSVkQxKHYpICBcCisJCSgoKHYpIDw8IDYpICYgQk1fQ0xLQ1RSTF9DUFVfUlNSVkQxKQorI2RlZmluZSBCUF9DTEtDVFJMX0NQVV9ESVZfQ1BVCTAKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9DUFVfRElWX0NQVQkweDAwMDAwMDNGCisjZGVmaW5lIEJGX0NMS0NUUkxfQ1BVX0RJVl9DUFUodikgIFwKKwkJKCgodikgPDwgMCkgJiBCTV9DTEtDVFJMX0NQVV9ESVZfQ1BVKQorCisjZGVmaW5lIEhXX0NMS0NUUkxfSEJVUwkoMHgwMDAwMDAzMCkKKyNkZWZpbmUgSFdfQ0xLQ1RSTF9IQlVTX1NFVAkoMHgwMDAwMDAzNCkKKyNkZWZpbmUgSFdfQ0xLQ1RSTF9IQlVTX0NMUgkoMHgwMDAwMDAzOCkKKyNkZWZpbmUgSFdfQ0xLQ1RSTF9IQlVTX1RPRwkoMHgwMDAwMDAzYykKKworI2RlZmluZSBCUF9DTEtDVFJMX0hCVVNfUlNSVkQ0CTMwCisjZGVmaW5lIEJNX0NMS0NUUkxfSEJVU19SU1JWRDQJMHhDMDAwMDAwMAorI2RlZmluZSBCRl9DTEtDVFJMX0hCVVNfUlNSVkQ0KHYpIFwKKwkJKCgodikgPDwgMzApICYgQk1fQ0xLQ1RSTF9IQlVTX1JTUlZENCkKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9IQlVTX0JVU1kJMHgyMDAwMDAwMAorI2RlZmluZSBCTV9DTEtDVFJMX0hCVVNfRENQX0FTX0VOQUJMRQkweDEwMDAwMDAwCisjZGVmaW5lIEJNX0NMS0NUUkxfSEJVU19QWFBfQVNfRU5BQkxFCTB4MDgwMDAwMDAKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9IQlVTX0FQQkhETUFfQVNfRU5BQkxFCTB4MDQwMDAwMDAKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9IQlVTX0FQQlhETUFfQVNfRU5BQkxFCTB4MDIwMDAwMDAKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9IQlVTX1RSQUZGSUNfSkFNX0FTX0VOQUJMRQkweDAxMDAwMDAwCisjZGVmaW5lIEJNX0NMS0NUUkxfSEJVU19UUkFGRklDX0FTX0VOQUJMRQkweDAwODAwMDAwCisjZGVmaW5lIEJNX0NMS0NUUkxfSEJVU19DUFVfREFUQV9BU19FTkFCTEUJMHgwMDQwMDAwMAorI2RlZmluZSBCTV9DTEtDVFJMX0hCVVNfQ1BVX0lOU1RSX0FTX0VOQUJMRQkweDAwMjAwMDAwCisjZGVmaW5lIEJNX0NMS0NUUkxfSEJVU19BVVRPX1NMT1dfTU9ERQkweDAwMTAwMDAwCisjZGVmaW5lIEJNX0NMS0NUUkxfSEJVU19SU1JWRDIJMHgwMDA4MDAwMAorI2RlZmluZSBCUF9DTEtDVFJMX0hCVVNfU0xPV19ESVYJMTYKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9IQlVTX1NMT1dfRElWCTB4MDAwNzAwMDAKKyNkZWZpbmUgQkZfQ0xLQ1RSTF9IQlVTX1NMT1dfRElWKHYpICBcCisJCSgoKHYpIDw8IDE2KSAmIEJNX0NMS0NUUkxfSEJVU19TTE9XX0RJVikKKyNkZWZpbmUgQlZfQ0xLQ1RSTF9IQlVTX1NMT1dfRElWX19CWTEgIDB4MAorI2RlZmluZSBCVl9DTEtDVFJMX0hCVVNfU0xPV19ESVZfX0JZMiAgMHgxCisjZGVmaW5lIEJWX0NMS0NUUkxfSEJVU19TTE9XX0RJVl9fQlk0ICAweDIKKyNkZWZpbmUgQlZfQ0xLQ1RSTF9IQlVTX1NMT1dfRElWX19CWTggIDB4MworI2RlZmluZSBCVl9DTEtDVFJMX0hCVVNfU0xPV19ESVZfX0JZMTYgMHg0CisjZGVmaW5lIEJWX0NMS0NUUkxfSEJVU19TTE9XX0RJVl9fQlkzMiAweDUKKyNkZWZpbmUgQlBfQ0xLQ1RSTF9IQlVTX1JTUlZEMQk2CisjZGVmaW5lIEJNX0NMS0NUUkxfSEJVU19SU1JWRDEJMHgwMDAwRkZDMAorI2RlZmluZSBCRl9DTEtDVFJMX0hCVVNfUlNSVkQxKHYpICBcCisJCSgoKHYpIDw8IDYpICYgQk1fQ0xLQ1RSTF9IQlVTX1JTUlZEMSkKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9IQlVTX0RJVl9GUkFDX0VOCTB4MDAwMDAwMjAKKyNkZWZpbmUgQlBfQ0xLQ1RSTF9IQlVTX0RJVgkwCisjZGVmaW5lIEJNX0NMS0NUUkxfSEJVU19ESVYJMHgwMDAwMDAxRgorI2RlZmluZSBCRl9DTEtDVFJMX0hCVVNfRElWKHYpICBcCisJCSgoKHYpIDw8IDApICYgQk1fQ0xLQ1RSTF9IQlVTX0RJVikKKworI2RlZmluZSBIV19DTEtDVFJMX1hCVVMJKDB4MDAwMDAwNDApCisKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9YQlVTX0JVU1kJMHg4MDAwMDAwMAorI2RlZmluZSBCUF9DTEtDVFJMX1hCVVNfUlNSVkQxCTExCisjZGVmaW5lIEJNX0NMS0NUUkxfWEJVU19SU1JWRDEJMHg3RkZGRjgwMAorI2RlZmluZSBCRl9DTEtDVFJMX1hCVVNfUlNSVkQxKHYpICBcCisJCSgoKHYpIDw8IDExKSAmIEJNX0NMS0NUUkxfWEJVU19SU1JWRDEpCisjZGVmaW5lIEJNX0NMS0NUUkxfWEJVU19ESVZfRlJBQ19FTgkweDAwMDAwNDAwCisjZGVmaW5lIEJQX0NMS0NUUkxfWEJVU19ESVYJMAorI2RlZmluZSBCTV9DTEtDVFJMX1hCVVNfRElWCTB4MDAwMDAzRkYKKyNkZWZpbmUgQkZfQ0xLQ1RSTF9YQlVTX0RJVih2KSAgXAorCQkoKCh2KSA8PCAwKSAmIEJNX0NMS0NUUkxfWEJVU19ESVYpCisKKyNkZWZpbmUgSFdfQ0xLQ1RSTF9YVEFMCSgweDAwMDAwMDUwKQorI2RlZmluZSBIV19DTEtDVFJMX1hUQUxfU0VUCSgweDAwMDAwMDU0KQorI2RlZmluZSBIV19DTEtDVFJMX1hUQUxfQ0xSCSgweDAwMDAwMDU4KQorI2RlZmluZSBIV19DTEtDVFJMX1hUQUxfVE9HCSgweDAwMDAwMDVjKQorCisjZGVmaW5lIEJQX0NMS0NUUkxfWFRBTF9VQVJUX0NMS19HQVRFCTMxCisjZGVmaW5lIEJNX0NMS0NUUkxfWFRBTF9VQVJUX0NMS19HQVRFCTB4ODAwMDAwMDAKKyNkZWZpbmUgQlBfQ0xLQ1RSTF9YVEFMX0ZJTFRfQ0xLMjRNX0dBVEUJMzAKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9YVEFMX0ZJTFRfQ0xLMjRNX0dBVEUJMHg0MDAwMDAwMAorI2RlZmluZSBCUF9DTEtDVFJMX1hUQUxfUFdNX0NMSzI0TV9HQVRFCTI5CisjZGVmaW5lIEJNX0NMS0NUUkxfWFRBTF9QV01fQ0xLMjRNX0dBVEUJMHgyMDAwMDAwMAorI2RlZmluZSBCTV9DTEtDVFJMX1hUQUxfRFJJX0NMSzI0TV9HQVRFCTB4MTAwMDAwMDAKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9YVEFMX0RJR0NUUkxfQ0xLMU1fR0FURQkweDA4MDAwMDAwCisjZGVmaW5lIEJQX0NMS0NUUkxfWFRBTF9USU1ST1RfQ0xLMzJLX0dBVEUJMjYKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9YVEFMX1RJTVJPVF9DTEszMktfR0FURQkweDA0MDAwMDAwCisjZGVmaW5lIEJQX0NMS0NUUkxfWFRBTF9SU1JWRDEJMgorI2RlZmluZSBCTV9DTEtDVFJMX1hUQUxfUlNSVkQxCTB4MDNGRkZGRkMKKyNkZWZpbmUgQkZfQ0xLQ1RSTF9YVEFMX1JTUlZEMSh2KSAgXAorCQkoKCh2KSA8PCAyKSAmIEJNX0NMS0NUUkxfWFRBTF9SU1JWRDEpCisjZGVmaW5lIEJQX0NMS0NUUkxfWFRBTF9ESVZfVUFSVAkwCisjZGVmaW5lIEJNX0NMS0NUUkxfWFRBTF9ESVZfVUFSVAkweDAwMDAwMDAzCisjZGVmaW5lIEJGX0NMS0NUUkxfWFRBTF9ESVZfVUFSVCh2KSAgXAorCQkoKCh2KSA8PCAwKSAmIEJNX0NMS0NUUkxfWFRBTF9ESVZfVUFSVCkKKworI2RlZmluZSBIV19DTEtDVFJMX1BJWAkoMHgwMDAwMDA2MCkKKworI2RlZmluZSBCUF9DTEtDVFJMX1BJWF9DTEtHQVRFCTMxCisjZGVmaW5lIEJNX0NMS0NUUkxfUElYX0NMS0dBVEUJMHg4MDAwMDAwMAorI2RlZmluZSBCTV9DTEtDVFJMX1BJWF9SU1JWRDIJMHg0MDAwMDAwMAorI2RlZmluZSBCTV9DTEtDVFJMX1BJWF9CVVNZCTB4MjAwMDAwMDAKKyNkZWZpbmUgQlBfQ0xLQ1RSTF9QSVhfUlNSVkQxCTEzCisjZGVmaW5lIEJNX0NMS0NUUkxfUElYX1JTUlZEMQkweDFGRkZFMDAwCisjZGVmaW5lIEJGX0NMS0NUUkxfUElYX1JTUlZEMSh2KSAgXAorCQkoKCh2KSA8PCAxMykgJiBCTV9DTEtDVFJMX1BJWF9SU1JWRDEpCisjZGVmaW5lIEJNX0NMS0NUUkxfUElYX0RJVl9GUkFDX0VOCTB4MDAwMDEwMDAKKyNkZWZpbmUgQlBfQ0xLQ1RSTF9QSVhfRElWCTAKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9QSVhfRElWCTB4MDAwMDBGRkYKKyNkZWZpbmUgQkZfQ0xLQ1RSTF9QSVhfRElWKHYpICBcCisJCSgoKHYpIDw8IDApICYgQk1fQ0xLQ1RSTF9QSVhfRElWKQorCisjZGVmaW5lIEhXX0NMS0NUUkxfU1NQCSgweDAwMDAwMDcwKQorCisjZGVmaW5lIEJQX0NMS0NUUkxfU1NQX0NMS0dBVEUJMzEKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9TU1BfQ0xLR0FURQkweDgwMDAwMDAwCisjZGVmaW5lIEJNX0NMS0NUUkxfU1NQX1JTUlZEMgkweDQwMDAwMDAwCisjZGVmaW5lIEJNX0NMS0NUUkxfU1NQX0JVU1kJMHgyMDAwMDAwMAorI2RlZmluZSBCUF9DTEtDVFJMX1NTUF9SU1JWRDEJMTAKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9TU1BfUlNSVkQxCTB4MUZGRkZDMDAKKyNkZWZpbmUgQkZfQ0xLQ1RSTF9TU1BfUlNSVkQxKHYpICBcCisJCSgoKHYpIDw8IDEwKSAmIEJNX0NMS0NUUkxfU1NQX1JTUlZEMSkKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9TU1BfRElWX0ZSQUNfRU4JMHgwMDAwMDIwMAorI2RlZmluZSBCUF9DTEtDVFJMX1NTUF9ESVYJMAorI2RlZmluZSBCTV9DTEtDVFJMX1NTUF9ESVYJMHgwMDAwMDFGRgorI2RlZmluZSBCRl9DTEtDVFJMX1NTUF9ESVYodikgIFwKKwkJKCgodikgPDwgMCkgJiBCTV9DTEtDVFJMX1NTUF9ESVYpCisKKyNkZWZpbmUgSFdfQ0xLQ1RSTF9HUE1JCSgweDAwMDAwMDgwKQorCisjZGVmaW5lIEJQX0NMS0NUUkxfR1BNSV9DTEtHQVRFCTMxCisjZGVmaW5lIEJNX0NMS0NUUkxfR1BNSV9DTEtHQVRFCTB4ODAwMDAwMDAKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9HUE1JX1JTUlZEMgkweDQwMDAwMDAwCisjZGVmaW5lIEJNX0NMS0NUUkxfR1BNSV9CVVNZCTB4MjAwMDAwMDAKKyNkZWZpbmUgQlBfQ0xLQ1RSTF9HUE1JX1JTUlZEMQkxMQorI2RlZmluZSBCTV9DTEtDVFJMX0dQTUlfUlNSVkQxCTB4MUZGRkY4MDAKKyNkZWZpbmUgQkZfQ0xLQ1RSTF9HUE1JX1JTUlZEMSh2KSAgXAorCQkoKCh2KSA8PCAxMSkgJiBCTV9DTEtDVFJMX0dQTUlfUlNSVkQxKQorI2RlZmluZSBCTV9DTEtDVFJMX0dQTUlfRElWX0ZSQUNfRU4JMHgwMDAwMDQwMAorI2RlZmluZSBCUF9DTEtDVFJMX0dQTUlfRElWCTAKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9HUE1JX0RJVgkweDAwMDAwM0ZGCisjZGVmaW5lIEJGX0NMS0NUUkxfR1BNSV9ESVYodikgIFwKKwkJKCgodikgPDwgMCkgJiBCTV9DTEtDVFJMX0dQTUlfRElWKQorCisjZGVmaW5lIEhXX0NMS0NUUkxfU1BESUYJKDB4MDAwMDAwOTApCisKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9TUERJRl9DTEtHQVRFCTB4ODAwMDAwMDAKKyNkZWZpbmUgQlBfQ0xLQ1RSTF9TUERJRl9SU1JWRAkwCisjZGVmaW5lIEJNX0NMS0NUUkxfU1BESUZfUlNSVkQJMHg3RkZGRkZGRgorI2RlZmluZSBCRl9DTEtDVFJMX1NQRElGX1JTUlZEKHYpICBcCisJCSgoKHYpIDw8IDApICYgQk1fQ0xLQ1RSTF9TUERJRl9SU1JWRCkKKworI2RlZmluZSBIV19DTEtDVFJMX0VNSQkoMHgwMDAwMDBhMCkKKworI2RlZmluZSBCUF9DTEtDVFJMX0VNSV9DTEtHQVRFCTMxCisjZGVmaW5lIEJNX0NMS0NUUkxfRU1JX0NMS0dBVEUJMHg4MDAwMDAwMAorI2RlZmluZSBCTV9DTEtDVFJMX0VNSV9TWU5DX01PREVfRU4JMHg0MDAwMDAwMAorI2RlZmluZSBCTV9DTEtDVFJMX0VNSV9CVVNZX1JFRl9YVEFMCTB4MjAwMDAwMDAKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9FTUlfQlVTWV9SRUZfRU1JCTB4MTAwMDAwMDAKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9FTUlfQlVTWV9SRUZfQ1BVCTB4MDgwMDAwMDAKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9FTUlfQlVTWV9TWU5DX01PREUJMHgwNDAwMDAwMAorI2RlZmluZSBCUF9DTEtDVFJMX0VNSV9SU1JWRDMJMTgKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9FTUlfUlNSVkQzCTB4MDNGQzAwMDAKKyNkZWZpbmUgQkZfQ0xLQ1RSTF9FTUlfUlNSVkQzKHYpICBcCisJCSgoKHYpIDw8IDE4KSAmIEJNX0NMS0NUUkxfRU1JX1JTUlZEMykKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9FTUlfQlVTWV9EQ0NfUkVTWU5DCTB4MDAwMjAwMDAKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9FTUlfRENDX1JFU1lOQ19FTkFCTEUJMHgwMDAxMDAwMAorI2RlZmluZSBCUF9DTEtDVFJMX0VNSV9SU1JWRDIJMTIKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9FTUlfUlNSVkQyCTB4MDAwMEYwMDAKKyNkZWZpbmUgQkZfQ0xLQ1RSTF9FTUlfUlNSVkQyKHYpICBcCisJCSgoKHYpIDw8IDEyKSAmIEJNX0NMS0NUUkxfRU1JX1JTUlZEMikKKyNkZWZpbmUgQlBfQ0xLQ1RSTF9FTUlfRElWX1hUQUwJOAorI2RlZmluZSBCTV9DTEtDVFJMX0VNSV9ESVZfWFRBTAkweDAwMDAwRjAwCisjZGVmaW5lIEJGX0NMS0NUUkxfRU1JX0RJVl9YVEFMKHYpICBcCisJCSgoKHYpIDw8IDgpICYgQk1fQ0xLQ1RSTF9FTUlfRElWX1hUQUwpCisjZGVmaW5lIEJQX0NMS0NUUkxfRU1JX1JTUlZEMQk2CisjZGVmaW5lIEJNX0NMS0NUUkxfRU1JX1JTUlZEMQkweDAwMDAwMEMwCisjZGVmaW5lIEJGX0NMS0NUUkxfRU1JX1JTUlZEMSh2KSAgXAorCQkoKCh2KSA8PCA2KSAmIEJNX0NMS0NUUkxfRU1JX1JTUlZEMSkKKyNkZWZpbmUgQlBfQ0xLQ1RSTF9FTUlfRElWX0VNSQkwCisjZGVmaW5lIEJNX0NMS0NUUkxfRU1JX0RJVl9FTUkJMHgwMDAwMDAzRgorI2RlZmluZSBCRl9DTEtDVFJMX0VNSV9ESVZfRU1JKHYpICBcCisJCSgoKHYpIDw8IDApICYgQk1fQ0xLQ1RSTF9FTUlfRElWX0VNSSkKKworI2RlZmluZSBIV19DTEtDVFJMX0lSCSgweDAwMDAwMGIwKQorCisjZGVmaW5lIEJNX0NMS0NUUkxfSVJfQ0xLR0FURQkweDgwMDAwMDAwCisjZGVmaW5lIEJNX0NMS0NUUkxfSVJfUlNSVkQzCTB4NDAwMDAwMDAKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9JUl9BVVRPX0RJVgkweDIwMDAwMDAwCisjZGVmaW5lIEJNX0NMS0NUUkxfSVJfSVJfQlVTWQkweDEwMDAwMDAwCisjZGVmaW5lIEJNX0NMS0NUUkxfSVJfSVJPVl9CVVNZCTB4MDgwMDAwMDAKKyNkZWZpbmUgQlBfQ0xLQ1RSTF9JUl9SU1JWRDIJMjUKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9JUl9SU1JWRDIJMHgwNjAwMDAwMAorI2RlZmluZSBCRl9DTEtDVFJMX0lSX1JTUlZEMih2KSAgXAorCQkoKCh2KSA8PCAyNSkgJiBCTV9DTEtDVFJMX0lSX1JTUlZEMikKKyNkZWZpbmUgQlBfQ0xLQ1RSTF9JUl9JUk9WX0RJVgkxNgorI2RlZmluZSBCTV9DTEtDVFJMX0lSX0lST1ZfRElWCTB4MDFGRjAwMDAKKyNkZWZpbmUgQkZfQ0xLQ1RSTF9JUl9JUk9WX0RJVih2KSAgXAorCQkoKCh2KSA8PCAxNikgJiBCTV9DTEtDVFJMX0lSX0lST1ZfRElWKQorI2RlZmluZSBCUF9DTEtDVFJMX0lSX1JTUlZEMQkxMAorI2RlZmluZSBCTV9DTEtDVFJMX0lSX1JTUlZEMQkweDAwMDBGQzAwCisjZGVmaW5lIEJGX0NMS0NUUkxfSVJfUlNSVkQxKHYpICBcCisJCSgoKHYpIDw8IDEwKSAmIEJNX0NMS0NUUkxfSVJfUlNSVkQxKQorI2RlZmluZSBCUF9DTEtDVFJMX0lSX0lSX0RJVgkwCisjZGVmaW5lIEJNX0NMS0NUUkxfSVJfSVJfRElWCTB4MDAwMDAzRkYKKyNkZWZpbmUgQkZfQ0xLQ1RSTF9JUl9JUl9ESVYodikgIFwKKwkJKCgodikgPDwgMCkgJiBCTV9DTEtDVFJMX0lSX0lSX0RJVikKKworI2RlZmluZSBIV19DTEtDVFJMX1NBSUYJKDB4MDAwMDAwYzApCisKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9TQUlGX0NMS0dBVEUJMHg4MDAwMDAwMAorI2RlZmluZSBCTV9DTEtDVFJMX1NBSUZfUlNSVkQyCTB4NDAwMDAwMDAKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9TQUlGX0JVU1kJMHgyMDAwMDAwMAorI2RlZmluZSBCUF9DTEtDVFJMX1NBSUZfUlNSVkQxCTE3CisjZGVmaW5lIEJNX0NMS0NUUkxfU0FJRl9SU1JWRDEJMHgxRkZFMDAwMAorI2RlZmluZSBCRl9DTEtDVFJMX1NBSUZfUlNSVkQxKHYpICBcCisJCSgoKHYpIDw8IDE3KSAmIEJNX0NMS0NUUkxfU0FJRl9SU1JWRDEpCisjZGVmaW5lIEJNX0NMS0NUUkxfU0FJRl9ESVZfRlJBQ19FTgkweDAwMDEwMDAwCisjZGVmaW5lIEJQX0NMS0NUUkxfU0FJRl9ESVYJMAorI2RlZmluZSBCTV9DTEtDVFJMX1NBSUZfRElWCTB4MDAwMEZGRkYKKyNkZWZpbmUgQkZfQ0xLQ1RSTF9TQUlGX0RJVih2KSAgXAorCQkoKCh2KSA8PCAwKSAmIEJNX0NMS0NUUkxfU0FJRl9ESVYpCisKKyNkZWZpbmUgSFdfQ0xLQ1RSTF9UVgkoMHgwMDAwMDBkMCkKKworI2RlZmluZSBCTV9DTEtDVFJMX1RWX0NMS19UVjEwOE1fR0FURQkweDgwMDAwMDAwCisjZGVmaW5lIEJNX0NMS0NUUkxfVFZfQ0xLX1RWX0dBVEUJMHg0MDAwMDAwMAorI2RlZmluZSBCUF9DTEtDVFJMX1RWX1JTUlZECTAKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9UVl9SU1JWRAkweDNGRkZGRkZGCisjZGVmaW5lIEJGX0NMS0NUUkxfVFZfUlNSVkQodikgIFwKKwkJKCgodikgPDwgMCkgJiBCTV9DTEtDVFJMX1RWX1JTUlZEKQorCisjZGVmaW5lIEhXX0NMS0NUUkxfRVRNCSgweDAwMDAwMGUwKQorCisjZGVmaW5lIEJNX0NMS0NUUkxfRVRNX0NMS0dBVEUJMHg4MDAwMDAwMAorI2RlZmluZSBCTV9DTEtDVFJMX0VUTV9SU1JWRDIJMHg0MDAwMDAwMAorI2RlZmluZSBCTV9DTEtDVFJMX0VUTV9CVVNZCTB4MjAwMDAwMDAKKyNkZWZpbmUgQlBfQ0xLQ1RSTF9FVE1fUlNSVkQxCTcKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9FVE1fUlNSVkQxCTB4MUZGRkZGODAKKyNkZWZpbmUgQkZfQ0xLQ1RSTF9FVE1fUlNSVkQxKHYpICBcCisJCSgoKHYpIDw8IDcpICYgQk1fQ0xLQ1RSTF9FVE1fUlNSVkQxKQorI2RlZmluZSBCTV9DTEtDVFJMX0VUTV9ESVZfRlJBQ19FTgkweDAwMDAwMDQwCisjZGVmaW5lIEJQX0NMS0NUUkxfRVRNX0RJVgkwCisjZGVmaW5lIEJNX0NMS0NUUkxfRVRNX0RJVgkweDAwMDAwMDNGCisjZGVmaW5lIEJGX0NMS0NUUkxfRVRNX0RJVih2KSAgXAorCQkoKCh2KSA8PCAwKSAmIEJNX0NMS0NUUkxfRVRNX0RJVikKKworI2RlZmluZSBIV19DTEtDVFJMX0ZSQUMJKDB4MDAwMDAwZjApCisjZGVmaW5lIEhXX0NMS0NUUkxfRlJBQ19TRVQJKDB4MDAwMDAwZjQpCisjZGVmaW5lIEhXX0NMS0NUUkxfRlJBQ19DTFIJKDB4MDAwMDAwZjgpCisjZGVmaW5lIEhXX0NMS0NUUkxfRlJBQ19UT0cJKDB4MDAwMDAwZmMpCisKKyNkZWZpbmUgQlBfQ0xLQ1RSTF9GUkFDX0NMS0dBVEVJTwkzMQorI2RlZmluZSBCTV9DTEtDVFJMX0ZSQUNfQ0xLR0FURUlPCTB4ODAwMDAwMDAKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9GUkFDX0lPX1NUQUJMRQkweDQwMDAwMDAwCisjZGVmaW5lIEJQX0NMS0NUUkxfRlJBQ19JT0ZSQUMJMjQKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9GUkFDX0lPRlJBQwkweDNGMDAwMDAwCisjZGVmaW5lIEJGX0NMS0NUUkxfRlJBQ19JT0ZSQUModikgIFwKKwkJKCgodikgPDwgMjQpICYgQk1fQ0xLQ1RSTF9GUkFDX0lPRlJBQykKKyNkZWZpbmUgQlBfQ0xLQ1RSTF9GUkFDX0NMS0dBVEVQSVgJMjMKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9GUkFDX0NMS0dBVEVQSVgJMHgwMDgwMDAwMAorI2RlZmluZSBCTV9DTEtDVFJMX0ZSQUNfUElYX1NUQUJMRQkweDAwNDAwMDAwCisjZGVmaW5lIEJQX0NMS0NUUkxfRlJBQ19QSVhGUkFDCTE2CisjZGVmaW5lIEJNX0NMS0NUUkxfRlJBQ19QSVhGUkFDCTB4MDAzRjAwMDAKKyNkZWZpbmUgQkZfQ0xLQ1RSTF9GUkFDX1BJWEZSQUModikgIFwKKwkJKCgodikgPDwgMTYpICYgQk1fQ0xLQ1RSTF9GUkFDX1BJWEZSQUMpCisjZGVmaW5lIEJQX0NMS0NUUkxfRlJBQ19DTEtHQVRFRU1JCTE1CisjZGVmaW5lIEJNX0NMS0NUUkxfRlJBQ19DTEtHQVRFRU1JCTB4MDAwMDgwMDAKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9GUkFDX0VNSV9TVEFCTEUJMHgwMDAwNDAwMAorI2RlZmluZSBCUF9DTEtDVFJMX0ZSQUNfRU1JRlJBQwk4CisjZGVmaW5lIEJNX0NMS0NUUkxfRlJBQ19FTUlGUkFDCTB4MDAwMDNGMDAKKyNkZWZpbmUgQkZfQ0xLQ1RSTF9GUkFDX0VNSUZSQUModikgIFwKKwkJKCgodikgPDwgOCkgJiBCTV9DTEtDVFJMX0ZSQUNfRU1JRlJBQykKKyNkZWZpbmUgQlBfQ0xLQ1RSTF9GUkFDX0NMS0dBVEVDUFUJNworI2RlZmluZSBCTV9DTEtDVFJMX0ZSQUNfQ0xLR0FURUNQVQkweDAwMDAwMDgwCisjZGVmaW5lIEJNX0NMS0NUUkxfRlJBQ19DUFVfU1RBQkxFCTB4MDAwMDAwNDAKKyNkZWZpbmUgQlBfQ0xLQ1RSTF9GUkFDX0NQVUZSQUMJMAorI2RlZmluZSBCTV9DTEtDVFJMX0ZSQUNfQ1BVRlJBQwkweDAwMDAwMDNGCisjZGVmaW5lIEJGX0NMS0NUUkxfRlJBQ19DUFVGUkFDKHYpICBcCisJCSgoKHYpIDw8IDApICYgQk1fQ0xLQ1RSTF9GUkFDX0NQVUZSQUMpCisKKyNkZWZpbmUgSFdfQ0xLQ1RSTF9GUkFDMQkoMHgwMDAwMDEwMCkKKyNkZWZpbmUgSFdfQ0xLQ1RSTF9GUkFDMV9TRVQJKDB4MDAwMDAxMDQpCisjZGVmaW5lIEhXX0NMS0NUUkxfRlJBQzFfQ0xSCSgweDAwMDAwMTA4KQorI2RlZmluZSBIV19DTEtDVFJMX0ZSQUMxX1RPRwkoMHgwMDAwMDEwYykKKworI2RlZmluZSBCTV9DTEtDVFJMX0ZSQUMxX0NMS0dBVEVWSUQJMHg4MDAwMDAwMAorI2RlZmluZSBCTV9DTEtDVFJMX0ZSQUMxX1ZJRF9TVEFCTEUJMHg0MDAwMDAwMAorI2RlZmluZSBCUF9DTEtDVFJMX0ZSQUMxX1JTUlZEMQkwCisjZGVmaW5lIEJNX0NMS0NUUkxfRlJBQzFfUlNSVkQxCTB4M0ZGRkZGRkYKKyNkZWZpbmUgQkZfQ0xLQ1RSTF9GUkFDMV9SU1JWRDEodikgIFwKKwkJKCgodikgPDwgMCkgJiBCTV9DTEtDVFJMX0ZSQUMxX1JTUlZEMSkKKworI2RlZmluZSBIV19DTEtDVFJMX0NMS1NFUQkoMHgwMDAwMDExMCkKKyNkZWZpbmUgSFdfQ0xLQ1RSTF9DTEtTRVFfU0VUCSgweDAwMDAwMTE0KQorI2RlZmluZSBIV19DTEtDVFJMX0NMS1NFUV9DTFIJKDB4MDAwMDAxMTgpCisjZGVmaW5lIEhXX0NMS0NUUkxfQ0xLU0VRX1RPRwkoMHgwMDAwMDExYykKKworI2RlZmluZSBCUF9DTEtDVFJMX0NMS1NFUV9SU1JWRDEJOQorI2RlZmluZSBCTV9DTEtDVFJMX0NMS1NFUV9SU1JWRDEJMHhGRkZGRkUwMAorI2RlZmluZSBCRl9DTEtDVFJMX0NMS1NFUV9SU1JWRDEodikgXAorCQkoKCh2KSA8PCA5KSAmIEJNX0NMS0NUUkxfQ0xLU0VRX1JTUlZEMSkKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9DTEtTRVFfQllQQVNTX0VUTQkweDAwMDAwMTAwCisjZGVmaW5lIEJNX0NMS0NUUkxfQ0xLU0VRX0JZUEFTU19DUFUJMHgwMDAwMDA4MAorI2RlZmluZSBCTV9DTEtDVFJMX0NMS1NFUV9CWVBBU1NfRU1JCTB4MDAwMDAwNDAKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9DTEtTRVFfQllQQVNTX1NTUAkweDAwMDAwMDIwCisjZGVmaW5lIEJNX0NMS0NUUkxfQ0xLU0VRX0JZUEFTU19HUE1JCTB4MDAwMDAwMTAKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9DTEtTRVFfQllQQVNTX0lSCTB4MDAwMDAwMDgKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9DTEtTRVFfUlNSVkQwCTB4MDAwMDAwMDQKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9DTEtTRVFfQllQQVNTX1BJWAkweDAwMDAwMDAyCisjZGVmaW5lIEJNX0NMS0NUUkxfQ0xLU0VRX0JZUEFTU19TQUlGCTB4MDAwMDAwMDEKKworI2RlZmluZSBIV19DTEtDVFJMX1JFU0VUCSgweDAwMDAwMTIwKQorCisjZGVmaW5lIEJQX0NMS0NUUkxfUkVTRVRfUlNSVkQJMgorI2RlZmluZSBCTV9DTEtDVFJMX1JFU0VUX1JTUlZECTB4RkZGRkZGRkMKKyNkZWZpbmUgQkZfQ0xLQ1RSTF9SRVNFVF9SU1JWRCh2KSBcCisJCSgoKHYpIDw8IDIpICYgQk1fQ0xLQ1RSTF9SRVNFVF9SU1JWRCkKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9SRVNFVF9DSElQCTB4MDAwMDAwMDIKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9SRVNFVF9ESUcJMHgwMDAwMDAwMQorCisjZGVmaW5lIEhXX0NMS0NUUkxfU1RBVFVTCSgweDAwMDAwMTMwKQorCisjZGVmaW5lIEJQX0NMS0NUUkxfU1RBVFVTX0NQVV9MSU1JVAkzMAorI2RlZmluZSBCTV9DTEtDVFJMX1NUQVRVU19DUFVfTElNSVQJMHhDMDAwMDAwMAorI2RlZmluZSBCRl9DTEtDVFJMX1NUQVRVU19DUFVfTElNSVQodikgXAorCQkoKCh2KSA8PCAzMCkgJiBCTV9DTEtDVFJMX1NUQVRVU19DUFVfTElNSVQpCisjZGVmaW5lIEJQX0NMS0NUUkxfU1RBVFVTX1JTUlZECTAKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9TVEFUVVNfUlNSVkQJMHgzRkZGRkZGRgorI2RlZmluZSBCRl9DTEtDVFJMX1NUQVRVU19SU1JWRCh2KSAgXAorCQkoKCh2KSA8PCAwKSAmIEJNX0NMS0NUUkxfU1RBVFVTX1JTUlZEKQorCisjZGVmaW5lIEhXX0NMS0NUUkxfVkVSU0lPTgkoMHgwMDAwMDE0MCkKKworI2RlZmluZSBCUF9DTEtDVFJMX1ZFUlNJT05fTUFKT1IJMjQKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9WRVJTSU9OX01BSk9SCTB4RkYwMDAwMDAKKyNkZWZpbmUgQkZfQ0xLQ1RSTF9WRVJTSU9OX01BSk9SKHYpIFwKKwkJKCgodikgPDwgMjQpICYgQk1fQ0xLQ1RSTF9WRVJTSU9OX01BSk9SKQorI2RlZmluZSBCUF9DTEtDVFJMX1ZFUlNJT05fTUlOT1IJMTYKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9WRVJTSU9OX01JTk9SCTB4MDBGRjAwMDAKKyNkZWZpbmUgQkZfQ0xLQ1RSTF9WRVJTSU9OX01JTk9SKHYpICBcCisJCSgoKHYpIDw8IDE2KSAmIEJNX0NMS0NUUkxfVkVSU0lPTl9NSU5PUikKKyNkZWZpbmUgQlBfQ0xLQ1RSTF9WRVJTSU9OX1NURVAJMAorI2RlZmluZSBCTV9DTEtDVFJMX1ZFUlNJT05fU1RFUAkweDAwMDBGRkZGCisjZGVmaW5lIEJGX0NMS0NUUkxfVkVSU0lPTl9TVEVQKHYpICBcCisJCSgoKHYpIDw8IDApICYgQk1fQ0xLQ1RSTF9WRVJTSU9OX1NURVApCisKKyNlbmRpZiAvKiBfX1JFR1NfQ0xLQ1RSTF9NWDIzX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teHMvcmVncy1jbGtjdHJsLW14MjguaCBiL2FyY2gvYXJtL21hY2gtbXhzL3JlZ3MtY2xrY3RybC1teDI4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjYxZGYxOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXhzL3JlZ3MtY2xrY3RybC1teDI4LmgKQEAgLTAsMCArMSw2NjMgQEAKKy8qCisgKiBGcmVlc2NhbGUgQ0xLQ1RSTCBSZWdpc3RlciBEZWZpbml0aW9ucworICoKKyAqIENvcHlyaWdodCAyMDA5LTIwMTAgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqCisgKiBUaGlzIGZpbGUgaXMgY3JlYXRlZCBieSB4bWwgZmlsZS4gRG9uJ3QgRWRpdCBpdC4KKyAqCisgKiBYbWwgUmV2aXNpb246IDEuNDgKKyAqIFRlbXBsYXRlIHJldmlzaW9uOiAyNjE5NQorICovCisKKyNpZm5kZWYgX19SRUdTX0NMS0NUUkxfTVgyOF9IX18KKyNkZWZpbmUgX19SRUdTX0NMS0NUUkxfTVgyOF9IX18KKworI2RlZmluZSBIV19DTEtDVFJMX1BMTDBDVFJMMAkoMHgwMDAwMDAwMCkKKyNkZWZpbmUgSFdfQ0xLQ1RSTF9QTEwwQ1RSTDBfU0VUCSgweDAwMDAwMDA0KQorI2RlZmluZSBIV19DTEtDVFJMX1BMTDBDVFJMMF9DTFIJKDB4MDAwMDAwMDgpCisjZGVmaW5lIEhXX0NMS0NUUkxfUExMMENUUkwwX1RPRwkoMHgwMDAwMDAwYykKKworI2RlZmluZSBCUF9DTEtDVFJMX1BMTDBDVFJMMF9SU1JWRDYJMzAKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9QTEwwQ1RSTDBfUlNSVkQ2CTB4QzAwMDAwMDAKKyNkZWZpbmUgQkZfQ0xLQ1RSTF9QTEwwQ1RSTDBfUlNSVkQ2KHYpIFwKKwkJKCgodikgPDwgMzApICYgQk1fQ0xLQ1RSTF9QTEwwQ1RSTDBfUlNSVkQ2KQorI2RlZmluZSBCUF9DTEtDVFJMX1BMTDBDVFJMMF9MRlJfU0VMCTI4CisjZGVmaW5lIEJNX0NMS0NUUkxfUExMMENUUkwwX0xGUl9TRUwJMHgzMDAwMDAwMAorI2RlZmluZSBCRl9DTEtDVFJMX1BMTDBDVFJMMF9MRlJfU0VMKHYpICBcCisJCSgoKHYpIDw8IDI4KSAmIEJNX0NMS0NUUkxfUExMMENUUkwwX0xGUl9TRUwpCisjZGVmaW5lIEJWX0NMS0NUUkxfUExMMENUUkwwX0xGUl9TRUxfX0RFRkFVTFQgICAweDAKKyNkZWZpbmUgQlZfQ0xLQ1RSTF9QTEwwQ1RSTDBfTEZSX1NFTF9fVElNRVNfMiAgIDB4MQorI2RlZmluZSBCVl9DTEtDVFJMX1BMTDBDVFJMMF9MRlJfU0VMX19USU1FU18wNSAgMHgyCisjZGVmaW5lIEJWX0NMS0NUUkxfUExMMENUUkwwX0xGUl9TRUxfX1VOREVGSU5FRCAweDMKKyNkZWZpbmUgQlBfQ0xLQ1RSTF9QTEwwQ1RSTDBfUlNSVkQ1CTI2CisjZGVmaW5lIEJNX0NMS0NUUkxfUExMMENUUkwwX1JTUlZENQkweDBDMDAwMDAwCisjZGVmaW5lIEJGX0NMS0NUUkxfUExMMENUUkwwX1JTUlZENSh2KSAgXAorCQkoKCh2KSA8PCAyNikgJiBCTV9DTEtDVFJMX1BMTDBDVFJMMF9SU1JWRDUpCisjZGVmaW5lIEJQX0NMS0NUUkxfUExMMENUUkwwX0NQX1NFTAkyNAorI2RlZmluZSBCTV9DTEtDVFJMX1BMTDBDVFJMMF9DUF9TRUwJMHgwMzAwMDAwMAorI2RlZmluZSBCRl9DTEtDVFJMX1BMTDBDVFJMMF9DUF9TRUwodikgIFwKKwkJKCgodikgPDwgMjQpICYgQk1fQ0xLQ1RSTF9QTEwwQ1RSTDBfQ1BfU0VMKQorI2RlZmluZSBCVl9DTEtDVFJMX1BMTDBDVFJMMF9DUF9TRUxfX0RFRkFVTFQgICAweDAKKyNkZWZpbmUgQlZfQ0xLQ1RSTF9QTEwwQ1RSTDBfQ1BfU0VMX19USU1FU18yICAgMHgxCisjZGVmaW5lIEJWX0NMS0NUUkxfUExMMENUUkwwX0NQX1NFTF9fVElNRVNfMDUgIDB4MgorI2RlZmluZSBCVl9DTEtDVFJMX1BMTDBDVFJMMF9DUF9TRUxfX1VOREVGSU5FRCAweDMKKyNkZWZpbmUgQlBfQ0xLQ1RSTF9QTEwwQ1RSTDBfUlNSVkQ0CTIyCisjZGVmaW5lIEJNX0NMS0NUUkxfUExMMENUUkwwX1JTUlZENAkweDAwQzAwMDAwCisjZGVmaW5lIEJGX0NMS0NUUkxfUExMMENUUkwwX1JTUlZENCh2KSAgXAorCQkoKCh2KSA8PCAyMikgJiBCTV9DTEtDVFJMX1BMTDBDVFJMMF9SU1JWRDQpCisjZGVmaW5lIEJQX0NMS0NUUkxfUExMMENUUkwwX0RJVl9TRUwJMjAKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9QTEwwQ1RSTDBfRElWX1NFTAkweDAwMzAwMDAwCisjZGVmaW5lIEJGX0NMS0NUUkxfUExMMENUUkwwX0RJVl9TRUwodikgIFwKKwkJKCgodikgPDwgMjApICYgQk1fQ0xLQ1RSTF9QTEwwQ1RSTDBfRElWX1NFTCkKKyNkZWZpbmUgQlZfQ0xLQ1RSTF9QTEwwQ1RSTDBfRElWX1NFTF9fREVGQVVMVCAgIDB4MAorI2RlZmluZSBCVl9DTEtDVFJMX1BMTDBDVFJMMF9ESVZfU0VMX19MT1dFUiAgICAgMHgxCisjZGVmaW5lIEJWX0NMS0NUUkxfUExMMENUUkwwX0RJVl9TRUxfX0xPV0VTVCAgICAweDIKKyNkZWZpbmUgQlZfQ0xLQ1RSTF9QTEwwQ1RSTDBfRElWX1NFTF9fVU5ERUZJTkVEIDB4MworI2RlZmluZSBCTV9DTEtDVFJMX1BMTDBDVFJMMF9SU1JWRDMJMHgwMDA4MDAwMAorI2RlZmluZSBCTV9DTEtDVFJMX1BMTDBDVFJMMF9FTl9VU0JfQ0xLUwkweDAwMDQwMDAwCisjZGVmaW5lIEJNX0NMS0NUUkxfUExMMENUUkwwX1BPV0VSCTB4MDAwMjAwMDAKKyNkZWZpbmUgQlBfQ0xLQ1RSTF9QTEwwQ1RSTDBfUlNSVkQxCTAKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9QTEwwQ1RSTDBfUlNSVkQxCTB4MDAwMUZGRkYKKyNkZWZpbmUgQkZfQ0xLQ1RSTF9QTEwwQ1RSTDBfUlNSVkQxKHYpICBcCisJCSgoKHYpIDw8IDApICYgQk1fQ0xLQ1RSTF9QTEwwQ1RSTDBfUlNSVkQxKQorCisjZGVmaW5lIEhXX0NMS0NUUkxfUExMMENUUkwxCSgweDAwMDAwMDEwKQorCisjZGVmaW5lIEJNX0NMS0NUUkxfUExMMENUUkwxX0xPQ0sJMHg4MDAwMDAwMAorI2RlZmluZSBCTV9DTEtDVFJMX1BMTDBDVFJMMV9GT1JDRV9MT0NLCTB4NDAwMDAwMDAKKyNkZWZpbmUgQlBfQ0xLQ1RSTF9QTEwwQ1RSTDFfUlNSVkQxCTE2CisjZGVmaW5lIEJNX0NMS0NUUkxfUExMMENUUkwxX1JTUlZEMQkweDNGRkYwMDAwCisjZGVmaW5lIEJGX0NMS0NUUkxfUExMMENUUkwxX1JTUlZEMSh2KSAgXAorCQkoKCh2KSA8PCAxNikgJiBCTV9DTEtDVFJMX1BMTDBDVFJMMV9SU1JWRDEpCisjZGVmaW5lIEJQX0NMS0NUUkxfUExMMENUUkwxX0xPQ0tfQ09VTlQJMAorI2RlZmluZSBCTV9DTEtDVFJMX1BMTDBDVFJMMV9MT0NLX0NPVU5UCTB4MDAwMEZGRkYKKyNkZWZpbmUgQkZfQ0xLQ1RSTF9QTEwwQ1RSTDFfTE9DS19DT1VOVCh2KSAgXAorCQkoKCh2KSA8PCAwKSAmIEJNX0NMS0NUUkxfUExMMENUUkwxX0xPQ0tfQ09VTlQpCisKKyNkZWZpbmUgSFdfQ0xLQ1RSTF9QTEwxQ1RSTDAJKDB4MDAwMDAwMjApCisjZGVmaW5lIEhXX0NMS0NUUkxfUExMMUNUUkwwX1NFVAkoMHgwMDAwMDAyNCkKKyNkZWZpbmUgSFdfQ0xLQ1RSTF9QTEwxQ1RSTDBfQ0xSCSgweDAwMDAwMDI4KQorI2RlZmluZSBIV19DTEtDVFJMX1BMTDFDVFJMMF9UT0cJKDB4MDAwMDAwMmMpCisKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9QTEwxQ1RSTDBfQ0xLR0FURUVNSQkweDgwMDAwMDAwCisjZGVmaW5lIEJNX0NMS0NUUkxfUExMMUNUUkwwX1JTUlZENgkweDQwMDAwMDAwCisjZGVmaW5lIEJQX0NMS0NUUkxfUExMMUNUUkwwX0xGUl9TRUwJMjgKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9QTEwxQ1RSTDBfTEZSX1NFTAkweDMwMDAwMDAwCisjZGVmaW5lIEJGX0NMS0NUUkxfUExMMUNUUkwwX0xGUl9TRUwodikgIFwKKwkJKCgodikgPDwgMjgpICYgQk1fQ0xLQ1RSTF9QTEwxQ1RSTDBfTEZSX1NFTCkKKyNkZWZpbmUgQlZfQ0xLQ1RSTF9QTEwxQ1RSTDBfTEZSX1NFTF9fREVGQVVMVCAgIDB4MAorI2RlZmluZSBCVl9DTEtDVFJMX1BMTDFDVFJMMF9MRlJfU0VMX19USU1FU18yICAgMHgxCisjZGVmaW5lIEJWX0NMS0NUUkxfUExMMUNUUkwwX0xGUl9TRUxfX1RJTUVTXzA1ICAweDIKKyNkZWZpbmUgQlZfQ0xLQ1RSTF9QTEwxQ1RSTDBfTEZSX1NFTF9fVU5ERUZJTkVEIDB4MworI2RlZmluZSBCUF9DTEtDVFJMX1BMTDFDVFJMMF9SU1JWRDUJMjYKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9QTEwxQ1RSTDBfUlNSVkQ1CTB4MEMwMDAwMDAKKyNkZWZpbmUgQkZfQ0xLQ1RSTF9QTEwxQ1RSTDBfUlNSVkQ1KHYpICBcCisJCSgoKHYpIDw8IDI2KSAmIEJNX0NMS0NUUkxfUExMMUNUUkwwX1JTUlZENSkKKyNkZWZpbmUgQlBfQ0xLQ1RSTF9QTEwxQ1RSTDBfQ1BfU0VMCTI0CisjZGVmaW5lIEJNX0NMS0NUUkxfUExMMUNUUkwwX0NQX1NFTAkweDAzMDAwMDAwCisjZGVmaW5lIEJGX0NMS0NUUkxfUExMMUNUUkwwX0NQX1NFTCh2KSAgXAorCQkoKCh2KSA8PCAyNCkgJiBCTV9DTEtDVFJMX1BMTDFDVFJMMF9DUF9TRUwpCisjZGVmaW5lIEJWX0NMS0NUUkxfUExMMUNUUkwwX0NQX1NFTF9fREVGQVVMVCAgIDB4MAorI2RlZmluZSBCVl9DTEtDVFJMX1BMTDFDVFJMMF9DUF9TRUxfX1RJTUVTXzIgICAweDEKKyNkZWZpbmUgQlZfQ0xLQ1RSTF9QTEwxQ1RSTDBfQ1BfU0VMX19USU1FU18wNSAgMHgyCisjZGVmaW5lIEJWX0NMS0NUUkxfUExMMUNUUkwwX0NQX1NFTF9fVU5ERUZJTkVEIDB4MworI2RlZmluZSBCUF9DTEtDVFJMX1BMTDFDVFJMMF9SU1JWRDQJMjIKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9QTEwxQ1RSTDBfUlNSVkQ0CTB4MDBDMDAwMDAKKyNkZWZpbmUgQkZfQ0xLQ1RSTF9QTEwxQ1RSTDBfUlNSVkQ0KHYpICBcCisJCSgoKHYpIDw8IDIyKSAmIEJNX0NMS0NUUkxfUExMMUNUUkwwX1JTUlZENCkKKyNkZWZpbmUgQlBfQ0xLQ1RSTF9QTEwxQ1RSTDBfRElWX1NFTAkyMAorI2RlZmluZSBCTV9DTEtDVFJMX1BMTDFDVFJMMF9ESVZfU0VMCTB4MDAzMDAwMDAKKyNkZWZpbmUgQkZfQ0xLQ1RSTF9QTEwxQ1RSTDBfRElWX1NFTCh2KSAgXAorCQkoKCh2KSA8PCAyMCkgJiBCTV9DTEtDVFJMX1BMTDFDVFJMMF9ESVZfU0VMKQorI2RlZmluZSBCVl9DTEtDVFJMX1BMTDFDVFJMMF9ESVZfU0VMX19ERUZBVUxUICAgMHgwCisjZGVmaW5lIEJWX0NMS0NUUkxfUExMMUNUUkwwX0RJVl9TRUxfX0xPV0VSICAgICAweDEKKyNkZWZpbmUgQlZfQ0xLQ1RSTF9QTEwxQ1RSTDBfRElWX1NFTF9fTE9XRVNUICAgIDB4MgorI2RlZmluZSBCVl9DTEtDVFJMX1BMTDFDVFJMMF9ESVZfU0VMX19VTkRFRklORUQgMHgzCisjZGVmaW5lIEJNX0NMS0NUUkxfUExMMUNUUkwwX1JTUlZEMwkweDAwMDgwMDAwCisjZGVmaW5lIEJNX0NMS0NUUkxfUExMMUNUUkwwX0VOX1VTQl9DTEtTCTB4MDAwNDAwMDAKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9QTEwxQ1RSTDBfUE9XRVIJMHgwMDAyMDAwMAorI2RlZmluZSBCUF9DTEtDVFJMX1BMTDFDVFJMMF9SU1JWRDEJMAorI2RlZmluZSBCTV9DTEtDVFJMX1BMTDFDVFJMMF9SU1JWRDEJMHgwMDAxRkZGRgorI2RlZmluZSBCRl9DTEtDVFJMX1BMTDFDVFJMMF9SU1JWRDEodikgIFwKKwkJKCgodikgPDwgMCkgJiBCTV9DTEtDVFJMX1BMTDFDVFJMMF9SU1JWRDEpCisKKyNkZWZpbmUgSFdfQ0xLQ1RSTF9QTEwxQ1RSTDEJKDB4MDAwMDAwMzApCisKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9QTEwxQ1RSTDFfTE9DSwkweDgwMDAwMDAwCisjZGVmaW5lIEJNX0NMS0NUUkxfUExMMUNUUkwxX0ZPUkNFX0xPQ0sJMHg0MDAwMDAwMAorI2RlZmluZSBCUF9DTEtDVFJMX1BMTDFDVFJMMV9SU1JWRDEJMTYKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9QTEwxQ1RSTDFfUlNSVkQxCTB4M0ZGRjAwMDAKKyNkZWZpbmUgQkZfQ0xLQ1RSTF9QTEwxQ1RSTDFfUlNSVkQxKHYpICBcCisJCSgoKHYpIDw8IDE2KSAmIEJNX0NMS0NUUkxfUExMMUNUUkwxX1JTUlZEMSkKKyNkZWZpbmUgQlBfQ0xLQ1RSTF9QTEwxQ1RSTDFfTE9DS19DT1VOVAkwCisjZGVmaW5lIEJNX0NMS0NUUkxfUExMMUNUUkwxX0xPQ0tfQ09VTlQJMHgwMDAwRkZGRgorI2RlZmluZSBCRl9DTEtDVFJMX1BMTDFDVFJMMV9MT0NLX0NPVU5UKHYpICBcCisJCSgoKHYpIDw8IDApICYgQk1fQ0xLQ1RSTF9QTEwxQ1RSTDFfTE9DS19DT1VOVCkKKworI2RlZmluZSBIV19DTEtDVFJMX1BMTDJDVFJMMAkoMHgwMDAwMDA0MCkKKyNkZWZpbmUgSFdfQ0xLQ1RSTF9QTEwyQ1RSTDBfU0VUCSgweDAwMDAwMDQ0KQorI2RlZmluZSBIV19DTEtDVFJMX1BMTDJDVFJMMF9DTFIJKDB4MDAwMDAwNDgpCisjZGVmaW5lIEhXX0NMS0NUUkxfUExMMkNUUkwwX1RPRwkoMHgwMDAwMDA0YykKKworI2RlZmluZSBCTV9DTEtDVFJMX1BMTDJDVFJMMF9DTEtHQVRFCTB4ODAwMDAwMDAKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9QTEwyQ1RSTDBfUlNSVkQzCTB4NDAwMDAwMDAKKyNkZWZpbmUgQlBfQ0xLQ1RSTF9QTEwyQ1RSTDBfTEZSX1NFTAkyOAorI2RlZmluZSBCTV9DTEtDVFJMX1BMTDJDVFJMMF9MRlJfU0VMCTB4MzAwMDAwMDAKKyNkZWZpbmUgQkZfQ0xLQ1RSTF9QTEwyQ1RSTDBfTEZSX1NFTCh2KSAgXAorCQkoKCh2KSA8PCAyOCkgJiBCTV9DTEtDVFJMX1BMTDJDVFJMMF9MRlJfU0VMKQorI2RlZmluZSBCTV9DTEtDVFJMX1BMTDJDVFJMMF9SU1JWRDIJMHgwODAwMDAwMAorI2RlZmluZSBCTV9DTEtDVFJMX1BMTDJDVFJMMF9IT0xEX1JJTkdfT0ZGX0IJMHgwNDAwMDAwMAorI2RlZmluZSBCUF9DTEtDVFJMX1BMTDJDVFJMMF9DUF9TRUwJMjQKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9QTEwyQ1RSTDBfQ1BfU0VMCTB4MDMwMDAwMDAKKyNkZWZpbmUgQkZfQ0xLQ1RSTF9QTEwyQ1RSTDBfQ1BfU0VMKHYpICBcCisJCSgoKHYpIDw8IDI0KSAmIEJNX0NMS0NUUkxfUExMMkNUUkwwX0NQX1NFTCkKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9QTEwyQ1RSTDBfUE9XRVIJMHgwMDgwMDAwMAorI2RlZmluZSBCUF9DTEtDVFJMX1BMTDJDVFJMMF9SU1JWRDEJMAorI2RlZmluZSBCTV9DTEtDVFJMX1BMTDJDVFJMMF9SU1JWRDEJMHgwMDdGRkZGRgorI2RlZmluZSBCRl9DTEtDVFJMX1BMTDJDVFJMMF9SU1JWRDEodikgIFwKKwkJKCgodikgPDwgMCkgJiBCTV9DTEtDVFJMX1BMTDJDVFJMMF9SU1JWRDEpCisKKyNkZWZpbmUgSFdfQ0xLQ1RSTF9DUFUJKDB4MDAwMDAwNTApCisjZGVmaW5lIEhXX0NMS0NUUkxfQ1BVX1NFVAkoMHgwMDAwMDA1NCkKKyNkZWZpbmUgSFdfQ0xLQ1RSTF9DUFVfQ0xSCSgweDAwMDAwMDU4KQorI2RlZmluZSBIV19DTEtDVFJMX0NQVV9UT0cJKDB4MDAwMDAwNWMpCisKKyNkZWZpbmUgQlBfQ0xLQ1RSTF9DUFVfUlNSVkQ1CTMwCisjZGVmaW5lIEJNX0NMS0NUUkxfQ1BVX1JTUlZENQkweEMwMDAwMDAwCisjZGVmaW5lIEJGX0NMS0NUUkxfQ1BVX1JTUlZENSh2KSBcCisJCSgoKHYpIDw8IDMwKSAmIEJNX0NMS0NUUkxfQ1BVX1JTUlZENSkKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9DUFVfQlVTWV9SRUZfWFRBTAkweDIwMDAwMDAwCisjZGVmaW5lIEJNX0NMS0NUUkxfQ1BVX0JVU1lfUkVGX0NQVQkweDEwMDAwMDAwCisjZGVmaW5lIEJNX0NMS0NUUkxfQ1BVX1JTUlZENAkweDA4MDAwMDAwCisjZGVmaW5lIEJNX0NMS0NUUkxfQ1BVX0RJVl9YVEFMX0ZSQUNfRU4JMHgwNDAwMDAwMAorI2RlZmluZSBCUF9DTEtDVFJMX0NQVV9ESVZfWFRBTAkxNgorI2RlZmluZSBCTV9DTEtDVFJMX0NQVV9ESVZfWFRBTAkweDAzRkYwMDAwCisjZGVmaW5lIEJGX0NMS0NUUkxfQ1BVX0RJVl9YVEFMKHYpICBcCisJCSgoKHYpIDw8IDE2KSAmIEJNX0NMS0NUUkxfQ1BVX0RJVl9YVEFMKQorI2RlZmluZSBCUF9DTEtDVFJMX0NQVV9SU1JWRDMJMTMKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9DUFVfUlNSVkQzCTB4MDAwMEUwMDAKKyNkZWZpbmUgQkZfQ0xLQ1RSTF9DUFVfUlNSVkQzKHYpICBcCisJCSgoKHYpIDw8IDEzKSAmIEJNX0NMS0NUUkxfQ1BVX1JTUlZEMykKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9DUFVfSU5URVJSVVBUX1dBSVQJMHgwMDAwMTAwMAorI2RlZmluZSBCTV9DTEtDVFJMX0NQVV9SU1JWRDIJMHgwMDAwMDgwMAorI2RlZmluZSBCTV9DTEtDVFJMX0NQVV9ESVZfQ1BVX0ZSQUNfRU4JMHgwMDAwMDQwMAorI2RlZmluZSBCUF9DTEtDVFJMX0NQVV9SU1JWRDEJNgorI2RlZmluZSBCTV9DTEtDVFJMX0NQVV9SU1JWRDEJMHgwMDAwMDNDMAorI2RlZmluZSBCRl9DTEtDVFJMX0NQVV9SU1JWRDEodikgIFwKKwkJKCgodikgPDwgNikgJiBCTV9DTEtDVFJMX0NQVV9SU1JWRDEpCisjZGVmaW5lIEJQX0NMS0NUUkxfQ1BVX0RJVl9DUFUJMAorI2RlZmluZSBCTV9DTEtDVFJMX0NQVV9ESVZfQ1BVCTB4MDAwMDAwM0YKKyNkZWZpbmUgQkZfQ0xLQ1RSTF9DUFVfRElWX0NQVSh2KSAgXAorCQkoKCh2KSA8PCAwKSAmIEJNX0NMS0NUUkxfQ1BVX0RJVl9DUFUpCisKKyNkZWZpbmUgSFdfQ0xLQ1RSTF9IQlVTCSgweDAwMDAwMDYwKQorI2RlZmluZSBIV19DTEtDVFJMX0hCVVNfU0VUCSgweDAwMDAwMDY0KQorI2RlZmluZSBIV19DTEtDVFJMX0hCVVNfQ0xSCSgweDAwMDAwMDY4KQorI2RlZmluZSBIV19DTEtDVFJMX0hCVVNfVE9HCSgweDAwMDAwMDZjKQorCisjZGVmaW5lIEJNX0NMS0NUUkxfSEJVU19BU01fQlVTWQkweDgwMDAwMDAwCisjZGVmaW5lIEJNX0NMS0NUUkxfSEJVU19EQ1BfQVNfRU5BQkxFCTB4NDAwMDAwMDAKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9IQlVTX1BYUF9BU19FTkFCTEUJMHgyMDAwMDAwMAorI2RlZmluZSBCTV9DTEtDVFJMX0hCVVNfUlNSVkQyCTB4MTAwMDAwMDAKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9IQlVTX0FTTV9FTUlQT1JUX0FTX0VOQUJMRQkweDA4MDAwMDAwCisjZGVmaW5lIEJNX0NMS0NUUkxfSEJVU19BUEJIRE1BX0FTX0VOQUJMRQkweDA0MDAwMDAwCisjZGVmaW5lIEJNX0NMS0NUUkxfSEJVU19BUEJYRE1BX0FTX0VOQUJMRQkweDAyMDAwMDAwCisjZGVmaW5lIEJNX0NMS0NUUkxfSEJVU19UUkFGRklDX0pBTV9BU19FTkFCTEUJMHgwMTAwMDAwMAorI2RlZmluZSBCTV9DTEtDVFJMX0hCVVNfVFJBRkZJQ19BU19FTkFCTEUJMHgwMDgwMDAwMAorI2RlZmluZSBCTV9DTEtDVFJMX0hCVVNfQ1BVX0RBVEFfQVNfRU5BQkxFCTB4MDA0MDAwMDAKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9IQlVTX0NQVV9JTlNUUl9BU19FTkFCTEUJMHgwMDIwMDAwMAorI2RlZmluZSBCTV9DTEtDVFJMX0hCVVNfQVNNX0VOQUJMRQkweDAwMTAwMDAwCisjZGVmaW5lIEJNX0NMS0NUUkxfSEJVU19BVVRPX0NMRUFSX0RJVl9FTkFCTEUJMHgwMDA4MDAwMAorI2RlZmluZSBCUF9DTEtDVFJMX0hCVVNfU0xPV19ESVYJMTYKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9IQlVTX1NMT1dfRElWCTB4MDAwNzAwMDAKKyNkZWZpbmUgQkZfQ0xLQ1RSTF9IQlVTX1NMT1dfRElWKHYpICBcCisJCSgoKHYpIDw8IDE2KSAmIEJNX0NMS0NUUkxfSEJVU19TTE9XX0RJVikKKyNkZWZpbmUgQlZfQ0xLQ1RSTF9IQlVTX1NMT1dfRElWX19CWTEgIDB4MAorI2RlZmluZSBCVl9DTEtDVFJMX0hCVVNfU0xPV19ESVZfX0JZMiAgMHgxCisjZGVmaW5lIEJWX0NMS0NUUkxfSEJVU19TTE9XX0RJVl9fQlk0ICAweDIKKyNkZWZpbmUgQlZfQ0xLQ1RSTF9IQlVTX1NMT1dfRElWX19CWTggIDB4MworI2RlZmluZSBCVl9DTEtDVFJMX0hCVVNfU0xPV19ESVZfX0JZMTYgMHg0CisjZGVmaW5lIEJWX0NMS0NUUkxfSEJVU19TTE9XX0RJVl9fQlkzMiAweDUKKyNkZWZpbmUgQlBfQ0xLQ1RSTF9IQlVTX1JTUlZEMQk2CisjZGVmaW5lIEJNX0NMS0NUUkxfSEJVU19SU1JWRDEJMHgwMDAwRkZDMAorI2RlZmluZSBCRl9DTEtDVFJMX0hCVVNfUlNSVkQxKHYpICBcCisJCSgoKHYpIDw8IDYpICYgQk1fQ0xLQ1RSTF9IQlVTX1JTUlZEMSkKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9IQlVTX0RJVl9GUkFDX0VOCTB4MDAwMDAwMjAKKyNkZWZpbmUgQlBfQ0xLQ1RSTF9IQlVTX0RJVgkwCisjZGVmaW5lIEJNX0NMS0NUUkxfSEJVU19ESVYJMHgwMDAwMDAxRgorI2RlZmluZSBCRl9DTEtDVFJMX0hCVVNfRElWKHYpICBcCisJCSgoKHYpIDw8IDApICYgQk1fQ0xLQ1RSTF9IQlVTX0RJVikKKworI2RlZmluZSBIV19DTEtDVFJMX1hCVVMJKDB4MDAwMDAwNzApCisKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9YQlVTX0JVU1kJMHg4MDAwMDAwMAorI2RlZmluZSBCUF9DTEtDVFJMX1hCVVNfUlNSVkQxCTEyCisjZGVmaW5lIEJNX0NMS0NUUkxfWEJVU19SU1JWRDEJMHg3RkZGRjAwMAorI2RlZmluZSBCRl9DTEtDVFJMX1hCVVNfUlNSVkQxKHYpICBcCisJCSgoKHYpIDw8IDEyKSAmIEJNX0NMS0NUUkxfWEJVU19SU1JWRDEpCisjZGVmaW5lIEJNX0NMS0NUUkxfWEJVU19BVVRPX0NMRUFSX0RJVl9FTkFCTEUJMHgwMDAwMDgwMAorI2RlZmluZSBCTV9DTEtDVFJMX1hCVVNfRElWX0ZSQUNfRU4JMHgwMDAwMDQwMAorI2RlZmluZSBCUF9DTEtDVFJMX1hCVVNfRElWCTAKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9YQlVTX0RJVgkweDAwMDAwM0ZGCisjZGVmaW5lIEJGX0NMS0NUUkxfWEJVU19ESVYodikgIFwKKwkJKCgodikgPDwgMCkgJiBCTV9DTEtDVFJMX1hCVVNfRElWKQorCisjZGVmaW5lIEhXX0NMS0NUUkxfWFRBTAkoMHgwMDAwMDA4MCkKKyNkZWZpbmUgSFdfQ0xLQ1RSTF9YVEFMX1NFVAkoMHgwMDAwMDA4NCkKKyNkZWZpbmUgSFdfQ0xLQ1RSTF9YVEFMX0NMUgkoMHgwMDAwMDA4OCkKKyNkZWZpbmUgSFdfQ0xLQ1RSTF9YVEFMX1RPRwkoMHgwMDAwMDA4YykKKworI2RlZmluZSBCUF9DTEtDVFJMX1hUQUxfVUFSVF9DTEtfR0FURQkzMQorI2RlZmluZSBCTV9DTEtDVFJMX1hUQUxfVUFSVF9DTEtfR0FURQkweDgwMDAwMDAwCisjZGVmaW5lIEJNX0NMS0NUUkxfWFRBTF9SU1JWRDMJMHg0MDAwMDAwMAorI2RlZmluZSBCUF9DTEtDVFJMX1hUQUxfUFdNX0NMSzI0TV9HQVRFCTI5CisjZGVmaW5lIEJNX0NMS0NUUkxfWFRBTF9QV01fQ0xLMjRNX0dBVEUJMHgyMDAwMDAwMAorI2RlZmluZSBCUF9DTEtDVFJMX1hUQUxfUlNSVkQyCTI3CisjZGVmaW5lIEJNX0NMS0NUUkxfWFRBTF9SU1JWRDIJMHgxODAwMDAwMAorI2RlZmluZSBCRl9DTEtDVFJMX1hUQUxfUlNSVkQyKHYpICBcCisJCSgoKHYpIDw8IDI3KSAmIEJNX0NMS0NUUkxfWFRBTF9SU1JWRDIpCisjZGVmaW5lIEJQX0NMS0NUUkxfWFRBTF9USU1ST1RfQ0xLMzJLX0dBVEUJMjYKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9YVEFMX1RJTVJPVF9DTEszMktfR0FURQkweDA0MDAwMDAwCisjZGVmaW5lIEJQX0NMS0NUUkxfWFRBTF9SU1JWRDEJMgorI2RlZmluZSBCTV9DTEtDVFJMX1hUQUxfUlNSVkQxCTB4MDNGRkZGRkMKKyNkZWZpbmUgQkZfQ0xLQ1RSTF9YVEFMX1JTUlZEMSh2KSAgXAorCQkoKCh2KSA8PCAyKSAmIEJNX0NMS0NUUkxfWFRBTF9SU1JWRDEpCisjZGVmaW5lIEJQX0NMS0NUUkxfWFRBTF9ESVZfVUFSVAkwCisjZGVmaW5lIEJNX0NMS0NUUkxfWFRBTF9ESVZfVUFSVAkweDAwMDAwMDAzCisjZGVmaW5lIEJGX0NMS0NUUkxfWFRBTF9ESVZfVUFSVCh2KSAgXAorCQkoKCh2KSA8PCAwKSAmIEJNX0NMS0NUUkxfWFRBTF9ESVZfVUFSVCkKKworI2RlZmluZSBIV19DTEtDVFJMX1NTUDAJKDB4MDAwMDAwOTApCisKKyNkZWZpbmUgQlBfQ0xLQ1RSTF9TU1AwX0NMS0dBVEUJMzEKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9TU1AwX0NMS0dBVEUJMHg4MDAwMDAwMAorI2RlZmluZSBCTV9DTEtDVFJMX1NTUDBfUlNSVkQyCTB4NDAwMDAwMDAKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9TU1AwX0JVU1kJMHgyMDAwMDAwMAorI2RlZmluZSBCUF9DTEtDVFJMX1NTUDBfUlNSVkQxCTEwCisjZGVmaW5lIEJNX0NMS0NUUkxfU1NQMF9SU1JWRDEJMHgxRkZGRkMwMAorI2RlZmluZSBCRl9DTEtDVFJMX1NTUDBfUlNSVkQxKHYpICBcCisJCSgoKHYpIDw8IDEwKSAmIEJNX0NMS0NUUkxfU1NQMF9SU1JWRDEpCisjZGVmaW5lIEJNX0NMS0NUUkxfU1NQMF9ESVZfRlJBQ19FTgkweDAwMDAwMjAwCisjZGVmaW5lIEJQX0NMS0NUUkxfU1NQMF9ESVYJMAorI2RlZmluZSBCTV9DTEtDVFJMX1NTUDBfRElWCTB4MDAwMDAxRkYKKyNkZWZpbmUgQkZfQ0xLQ1RSTF9TU1AwX0RJVih2KSAgXAorCQkoKCh2KSA8PCAwKSAmIEJNX0NMS0NUUkxfU1NQMF9ESVYpCisKKyNkZWZpbmUgSFdfQ0xLQ1RSTF9TU1AxCSgweDAwMDAwMGEwKQorCisjZGVmaW5lIEJQX0NMS0NUUkxfU1NQMV9DTEtHQVRFCTMxCisjZGVmaW5lIEJNX0NMS0NUUkxfU1NQMV9DTEtHQVRFCTB4ODAwMDAwMDAKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9TU1AxX1JTUlZEMgkweDQwMDAwMDAwCisjZGVmaW5lIEJNX0NMS0NUUkxfU1NQMV9CVVNZCTB4MjAwMDAwMDAKKyNkZWZpbmUgQlBfQ0xLQ1RSTF9TU1AxX1JTUlZEMQkxMAorI2RlZmluZSBCTV9DTEtDVFJMX1NTUDFfUlNSVkQxCTB4MUZGRkZDMDAKKyNkZWZpbmUgQkZfQ0xLQ1RSTF9TU1AxX1JTUlZEMSh2KSAgXAorCQkoKCh2KSA8PCAxMCkgJiBCTV9DTEtDVFJMX1NTUDFfUlNSVkQxKQorI2RlZmluZSBCTV9DTEtDVFJMX1NTUDFfRElWX0ZSQUNfRU4JMHgwMDAwMDIwMAorI2RlZmluZSBCUF9DTEtDVFJMX1NTUDFfRElWCTAKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9TU1AxX0RJVgkweDAwMDAwMUZGCisjZGVmaW5lIEJGX0NMS0NUUkxfU1NQMV9ESVYodikgIFwKKwkJKCgodikgPDwgMCkgJiBCTV9DTEtDVFJMX1NTUDFfRElWKQorCisjZGVmaW5lIEhXX0NMS0NUUkxfU1NQMgkoMHgwMDAwMDBiMCkKKworI2RlZmluZSBCUF9DTEtDVFJMX1NTUDJfQ0xLR0FURQkzMQorI2RlZmluZSBCTV9DTEtDVFJMX1NTUDJfQ0xLR0FURQkweDgwMDAwMDAwCisjZGVmaW5lIEJNX0NMS0NUUkxfU1NQMl9SU1JWRDIJMHg0MDAwMDAwMAorI2RlZmluZSBCTV9DTEtDVFJMX1NTUDJfQlVTWQkweDIwMDAwMDAwCisjZGVmaW5lIEJQX0NMS0NUUkxfU1NQMl9SU1JWRDEJMTAKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9TU1AyX1JTUlZEMQkweDFGRkZGQzAwCisjZGVmaW5lIEJGX0NMS0NUUkxfU1NQMl9SU1JWRDEodikgIFwKKwkJKCgodikgPDwgMTApICYgQk1fQ0xLQ1RSTF9TU1AyX1JTUlZEMSkKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9TU1AyX0RJVl9GUkFDX0VOCTB4MDAwMDAyMDAKKyNkZWZpbmUgQlBfQ0xLQ1RSTF9TU1AyX0RJVgkwCisjZGVmaW5lIEJNX0NMS0NUUkxfU1NQMl9ESVYJMHgwMDAwMDFGRgorI2RlZmluZSBCRl9DTEtDVFJMX1NTUDJfRElWKHYpICBcCisJCSgoKHYpIDw8IDApICYgQk1fQ0xLQ1RSTF9TU1AyX0RJVikKKworI2RlZmluZSBIV19DTEtDVFJMX1NTUDMJKDB4MDAwMDAwYzApCisKKyNkZWZpbmUgQlBfQ0xLQ1RSTF9TU1AzX0NMS0dBVEUJMzEKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9TU1AzX0NMS0dBVEUJMHg4MDAwMDAwMAorI2RlZmluZSBCTV9DTEtDVFJMX1NTUDNfUlNSVkQyCTB4NDAwMDAwMDAKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9TU1AzX0JVU1kJMHgyMDAwMDAwMAorI2RlZmluZSBCUF9DTEtDVFJMX1NTUDNfUlNSVkQxCTEwCisjZGVmaW5lIEJNX0NMS0NUUkxfU1NQM19SU1JWRDEJMHgxRkZGRkMwMAorI2RlZmluZSBCRl9DTEtDVFJMX1NTUDNfUlNSVkQxKHYpICBcCisJCSgoKHYpIDw8IDEwKSAmIEJNX0NMS0NUUkxfU1NQM19SU1JWRDEpCisjZGVmaW5lIEJNX0NMS0NUUkxfU1NQM19ESVZfRlJBQ19FTgkweDAwMDAwMjAwCisjZGVmaW5lIEJQX0NMS0NUUkxfU1NQM19ESVYJMAorI2RlZmluZSBCTV9DTEtDVFJMX1NTUDNfRElWCTB4MDAwMDAxRkYKKyNkZWZpbmUgQkZfQ0xLQ1RSTF9TU1AzX0RJVih2KSAgXAorCQkoKCh2KSA8PCAwKSAmIEJNX0NMS0NUUkxfU1NQM19ESVYpCisKKyNkZWZpbmUgSFdfQ0xLQ1RSTF9HUE1JCSgweDAwMDAwMGQwKQorCisjZGVmaW5lIEJQX0NMS0NUUkxfR1BNSV9DTEtHQVRFCTMxCisjZGVmaW5lIEJNX0NMS0NUUkxfR1BNSV9DTEtHQVRFCTB4ODAwMDAwMDAKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9HUE1JX1JTUlZEMgkweDQwMDAwMDAwCisjZGVmaW5lIEJNX0NMS0NUUkxfR1BNSV9CVVNZCTB4MjAwMDAwMDAKKyNkZWZpbmUgQlBfQ0xLQ1RSTF9HUE1JX1JTUlZEMQkxMQorI2RlZmluZSBCTV9DTEtDVFJMX0dQTUlfUlNSVkQxCTB4MUZGRkY4MDAKKyNkZWZpbmUgQkZfQ0xLQ1RSTF9HUE1JX1JTUlZEMSh2KSAgXAorCQkoKCh2KSA8PCAxMSkgJiBCTV9DTEtDVFJMX0dQTUlfUlNSVkQxKQorI2RlZmluZSBCTV9DTEtDVFJMX0dQTUlfRElWX0ZSQUNfRU4JMHgwMDAwMDQwMAorI2RlZmluZSBCUF9DTEtDVFJMX0dQTUlfRElWCTAKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9HUE1JX0RJVgkweDAwMDAwM0ZGCisjZGVmaW5lIEJGX0NMS0NUUkxfR1BNSV9ESVYodikgIFwKKwkJKCgodikgPDwgMCkgJiBCTV9DTEtDVFJMX0dQTUlfRElWKQorCisjZGVmaW5lIEhXX0NMS0NUUkxfU1BESUYJKDB4MDAwMDAwZTApCisKKyNkZWZpbmUgQlBfQ0xLQ1RSTF9TUERJRl9DTEtHQVRFCTMxCisjZGVmaW5lIEJNX0NMS0NUUkxfU1BESUZfQ0xLR0FURQkweDgwMDAwMDAwCisjZGVmaW5lIEJQX0NMS0NUUkxfU1BESUZfUlNSVkQJMAorI2RlZmluZSBCTV9DTEtDVFJMX1NQRElGX1JTUlZECTB4N0ZGRkZGRkYKKyNkZWZpbmUgQkZfQ0xLQ1RSTF9TUERJRl9SU1JWRCh2KSAgXAorCQkoKCh2KSA8PCAwKSAmIEJNX0NMS0NUUkxfU1BESUZfUlNSVkQpCisKKyNkZWZpbmUgSFdfQ0xLQ1RSTF9FTUkJKDB4MDAwMDAwZjApCisKKyNkZWZpbmUgQlBfQ0xLQ1RSTF9FTUlfQ0xLR0FURQkzMQorI2RlZmluZSBCTV9DTEtDVFJMX0VNSV9DTEtHQVRFCTB4ODAwMDAwMDAKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9FTUlfU1lOQ19NT0RFX0VOCTB4NDAwMDAwMDAKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9FTUlfQlVTWV9SRUZfWFRBTAkweDIwMDAwMDAwCisjZGVmaW5lIEJNX0NMS0NUUkxfRU1JX0JVU1lfUkVGX0VNSQkweDEwMDAwMDAwCisjZGVmaW5lIEJNX0NMS0NUUkxfRU1JX0JVU1lfUkVGX0NQVQkweDA4MDAwMDAwCisjZGVmaW5lIEJNX0NMS0NUUkxfRU1JX0JVU1lfU1lOQ19NT0RFCTB4MDQwMDAwMDAKKyNkZWZpbmUgQlBfQ0xLQ1RSTF9FTUlfUlNSVkQzCTE4CisjZGVmaW5lIEJNX0NMS0NUUkxfRU1JX1JTUlZEMwkweDAzRkMwMDAwCisjZGVmaW5lIEJGX0NMS0NUUkxfRU1JX1JTUlZEMyh2KSAgXAorCQkoKCh2KSA8PCAxOCkgJiBCTV9DTEtDVFJMX0VNSV9SU1JWRDMpCisjZGVmaW5lIEJNX0NMS0NUUkxfRU1JX0JVU1lfRENDX1JFU1lOQwkweDAwMDIwMDAwCisjZGVmaW5lIEJNX0NMS0NUUkxfRU1JX0RDQ19SRVNZTkNfRU5BQkxFCTB4MDAwMTAwMDAKKyNkZWZpbmUgQlBfQ0xLQ1RSTF9FTUlfUlNSVkQyCTEyCisjZGVmaW5lIEJNX0NMS0NUUkxfRU1JX1JTUlZEMgkweDAwMDBGMDAwCisjZGVmaW5lIEJGX0NMS0NUUkxfRU1JX1JTUlZEMih2KSAgXAorCQkoKCh2KSA8PCAxMikgJiBCTV9DTEtDVFJMX0VNSV9SU1JWRDIpCisjZGVmaW5lIEJQX0NMS0NUUkxfRU1JX0RJVl9YVEFMCTgKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9FTUlfRElWX1hUQUwJMHgwMDAwMEYwMAorI2RlZmluZSBCRl9DTEtDVFJMX0VNSV9ESVZfWFRBTCh2KSAgXAorCQkoKCh2KSA8PCA4KSAmIEJNX0NMS0NUUkxfRU1JX0RJVl9YVEFMKQorI2RlZmluZSBCUF9DTEtDVFJMX0VNSV9SU1JWRDEJNgorI2RlZmluZSBCTV9DTEtDVFJMX0VNSV9SU1JWRDEJMHgwMDAwMDBDMAorI2RlZmluZSBCRl9DTEtDVFJMX0VNSV9SU1JWRDEodikgIFwKKwkJKCgodikgPDwgNikgJiBCTV9DTEtDVFJMX0VNSV9SU1JWRDEpCisjZGVmaW5lIEJQX0NMS0NUUkxfRU1JX0RJVl9FTUkJMAorI2RlZmluZSBCTV9DTEtDVFJMX0VNSV9ESVZfRU1JCTB4MDAwMDAwM0YKKyNkZWZpbmUgQkZfQ0xLQ1RSTF9FTUlfRElWX0VNSSh2KSAgXAorCQkoKCh2KSA8PCAwKSAmIEJNX0NMS0NUUkxfRU1JX0RJVl9FTUkpCisKKyNkZWZpbmUgSFdfQ0xLQ1RSTF9TQUlGMAkoMHgwMDAwMDEwMCkKKworI2RlZmluZSBCUF9DTEtDVFJMX1NBSUYwX0NMS0dBVEUJMzEKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9TQUlGMF9DTEtHQVRFCTB4ODAwMDAwMDAKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9TQUlGMF9SU1JWRDIJMHg0MDAwMDAwMAorI2RlZmluZSBCTV9DTEtDVFJMX1NBSUYwX0JVU1kJMHgyMDAwMDAwMAorI2RlZmluZSBCUF9DTEtDVFJMX1NBSUYwX1JTUlZEMQkxNworI2RlZmluZSBCTV9DTEtDVFJMX1NBSUYwX1JTUlZEMQkweDFGRkUwMDAwCisjZGVmaW5lIEJGX0NMS0NUUkxfU0FJRjBfUlNSVkQxKHYpICBcCisJCSgoKHYpIDw8IDE3KSAmIEJNX0NMS0NUUkxfU0FJRjBfUlNSVkQxKQorI2RlZmluZSBCTV9DTEtDVFJMX1NBSUYwX0RJVl9GUkFDX0VOCTB4MDAwMTAwMDAKKyNkZWZpbmUgQlBfQ0xLQ1RSTF9TQUlGMF9ESVYJMAorI2RlZmluZSBCTV9DTEtDVFJMX1NBSUYwX0RJVgkweDAwMDBGRkZGCisjZGVmaW5lIEJGX0NMS0NUUkxfU0FJRjBfRElWKHYpICBcCisJCSgoKHYpIDw8IDApICYgQk1fQ0xLQ1RSTF9TQUlGMF9ESVYpCisKKyNkZWZpbmUgSFdfQ0xLQ1RSTF9TQUlGMQkoMHgwMDAwMDExMCkKKworI2RlZmluZSBCUF9DTEtDVFJMX1NBSUYxX0NMS0dBVEUJMzEKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9TQUlGMV9DTEtHQVRFCTB4ODAwMDAwMDAKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9TQUlGMV9SU1JWRDIJMHg0MDAwMDAwMAorI2RlZmluZSBCTV9DTEtDVFJMX1NBSUYxX0JVU1kJMHgyMDAwMDAwMAorI2RlZmluZSBCUF9DTEtDVFJMX1NBSUYxX1JTUlZEMQkxNworI2RlZmluZSBCTV9DTEtDVFJMX1NBSUYxX1JTUlZEMQkweDFGRkUwMDAwCisjZGVmaW5lIEJGX0NMS0NUUkxfU0FJRjFfUlNSVkQxKHYpICBcCisJCSgoKHYpIDw8IDE3KSAmIEJNX0NMS0NUUkxfU0FJRjFfUlNSVkQxKQorI2RlZmluZSBCTV9DTEtDVFJMX1NBSUYxX0RJVl9GUkFDX0VOCTB4MDAwMTAwMDAKKyNkZWZpbmUgQlBfQ0xLQ1RSTF9TQUlGMV9ESVYJMAorI2RlZmluZSBCTV9DTEtDVFJMX1NBSUYxX0RJVgkweDAwMDBGRkZGCisjZGVmaW5lIEJGX0NMS0NUUkxfU0FJRjFfRElWKHYpICBcCisJCSgoKHYpIDw8IDApICYgQk1fQ0xLQ1RSTF9TQUlGMV9ESVYpCisKKyNkZWZpbmUgSFdfQ0xLQ1RSTF9ESVNfTENESUYJKDB4MDAwMDAxMjApCisKKyNkZWZpbmUgQlBfQ0xLQ1RSTF9ESVNfTENESUZfQ0xLR0FURQkzMQorI2RlZmluZSBCTV9DTEtDVFJMX0RJU19MQ0RJRl9DTEtHQVRFCTB4ODAwMDAwMDAKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9ESVNfTENESUZfUlNSVkQyCTB4NDAwMDAwMDAKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9ESVNfTENESUZfQlVTWQkweDIwMDAwMDAwCisjZGVmaW5lIEJQX0NMS0NUUkxfRElTX0xDRElGX1JTUlZEMQkxNAorI2RlZmluZSBCTV9DTEtDVFJMX0RJU19MQ0RJRl9SU1JWRDEJMHgxRkZGQzAwMAorI2RlZmluZSBCRl9DTEtDVFJMX0RJU19MQ0RJRl9SU1JWRDEodikgIFwKKwkJKCgodikgPDwgMTQpICYgQk1fQ0xLQ1RSTF9ESVNfTENESUZfUlNSVkQxKQorI2RlZmluZSBCTV9DTEtDVFJMX0RJU19MQ0RJRl9ESVZfRlJBQ19FTgkweDAwMDAyMDAwCisjZGVmaW5lIEJQX0NMS0NUUkxfRElTX0xDRElGX0RJVgkwCisjZGVmaW5lIEJNX0NMS0NUUkxfRElTX0xDRElGX0RJVgkweDAwMDAxRkZGCisjZGVmaW5lIEJGX0NMS0NUUkxfRElTX0xDRElGX0RJVih2KSAgXAorCQkoKCh2KSA8PCAwKSAmIEJNX0NMS0NUUkxfRElTX0xDRElGX0RJVikKKworI2RlZmluZSBIV19DTEtDVFJMX0VUTQkoMHgwMDAwMDEzMCkKKworI2RlZmluZSBCTV9DTEtDVFJMX0VUTV9DTEtHQVRFCTB4ODAwMDAwMDAKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9FVE1fUlNSVkQyCTB4NDAwMDAwMDAKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9FVE1fQlVTWQkweDIwMDAwMDAwCisjZGVmaW5lIEJQX0NMS0NUUkxfRVRNX1JTUlZEMQk4CisjZGVmaW5lIEJNX0NMS0NUUkxfRVRNX1JTUlZEMQkweDFGRkZGRjAwCisjZGVmaW5lIEJGX0NMS0NUUkxfRVRNX1JTUlZEMSh2KSAgXAorCQkoKCh2KSA8PCA4KSAmIEJNX0NMS0NUUkxfRVRNX1JTUlZEMSkKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9FVE1fRElWX0ZSQUNfRU4JMHgwMDAwMDA4MAorI2RlZmluZSBCUF9DTEtDVFJMX0VUTV9ESVYJMAorI2RlZmluZSBCTV9DTEtDVFJMX0VUTV9ESVYJMHgwMDAwMDA3RgorI2RlZmluZSBCRl9DTEtDVFJMX0VUTV9ESVYodikgIFwKKwkJKCgodikgPDwgMCkgJiBCTV9DTEtDVFJMX0VUTV9ESVYpCisKKyNkZWZpbmUgSFdfQ0xLQ1RSTF9FTkVUCSgweDAwMDAwMTQwKQorCisjZGVmaW5lIEJNX0NMS0NUUkxfRU5FVF9TTEVFUAkweDgwMDAwMDAwCisjZGVmaW5lIEJQX0NMS0NUUkxfRU5FVF9ESVNBQkxFCTMwCisjZGVmaW5lIEJNX0NMS0NUUkxfRU5FVF9ESVNBQkxFCTB4NDAwMDAwMDAKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9FTkVUX1NUQVRVUwkweDIwMDAwMDAwCisjZGVmaW5lIEJNX0NMS0NUUkxfRU5FVF9SU1JWRDEJMHgxMDAwMDAwMAorI2RlZmluZSBCTV9DTEtDVFJMX0VORVRfQlVTWV9USU1FCTB4MDgwMDAwMDAKKyNkZWZpbmUgQlBfQ0xLQ1RSTF9FTkVUX0RJVl9USU1FCTIxCisjZGVmaW5lIEJNX0NMS0NUUkxfRU5FVF9ESVZfVElNRQkweDA3RTAwMDAwCisjZGVmaW5lIEJGX0NMS0NUUkxfRU5FVF9ESVZfVElNRSh2KSAgXAorCQkoKCh2KSA8PCAyMSkgJiBCTV9DTEtDVFJMX0VORVRfRElWX1RJTUUpCisjZGVmaW5lIEJNX0NMS0NUUkxfRU5FVF9CVVNZCTB4MDgwMDAwMDAKKyNkZWZpbmUgQlBfQ0xLQ1RSTF9FTkVUX0RJVgkyMQorI2RlZmluZSBCTV9DTEtDVFJMX0VORVRfRElWCTB4MDdFMDAwMDAKKyNkZWZpbmUgQkZfQ0xLQ1RSTF9FTkVUX0RJVih2KSAgXAorCQkoKCh2KSA8PCAyMSkgJiBCTV9DTEtDVFJMX0VORVRfRElWKQorI2RlZmluZSBCUF9DTEtDVFJMX0VORVRfVElNRV9TRUwJMTkKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9FTkVUX1RJTUVfU0VMCTB4MDAxODAwMDAKKyNkZWZpbmUgQkZfQ0xLQ1RSTF9FTkVUX1RJTUVfU0VMKHYpICBcCisJCSgoKHYpIDw8IDE5KSAmIEJNX0NMS0NUUkxfRU5FVF9USU1FX1NFTCkKKyNkZWZpbmUgQlZfQ0xLQ1RSTF9FTkVUX1RJTUVfU0VMX19YVEFMICAgICAgMHgwCisjZGVmaW5lIEJWX0NMS0NUUkxfRU5FVF9USU1FX1NFTF9fUExMICAgICAgIDB4MQorI2RlZmluZSBCVl9DTEtDVFJMX0VORVRfVElNRV9TRUxfX1JNSUlfQ0xLICAweDIKKyNkZWZpbmUgQlZfQ0xLQ1RSTF9FTkVUX1RJTUVfU0VMX19VTkRFRklORUQgMHgzCisjZGVmaW5lIEJNX0NMS0NUUkxfRU5FVF9DTEtfT1VUX0VOCTB4MDAwNDAwMDAKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9FTkVUX1JFU0VUX0JZX1NXX0NISVAJMHgwMDAyMDAwMAorI2RlZmluZSBCTV9DTEtDVFJMX0VORVRfUkVTRVRfQllfU1cJMHgwMDAxMDAwMAorI2RlZmluZSBCUF9DTEtDVFJMX0VORVRfUlNSVkQwCTAKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9FTkVUX1JTUlZEMAkweDAwMDBGRkZGCisjZGVmaW5lIEJGX0NMS0NUUkxfRU5FVF9SU1JWRDAodikgIFwKKwkJKCgodikgPDwgMCkgJiBCTV9DTEtDVFJMX0VORVRfUlNSVkQwKQorCisjZGVmaW5lIEhXX0NMS0NUUkxfSFNBREMJKDB4MDAwMDAxNTApCisKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9IU0FEQ19SU1JWRDIJMHg4MDAwMDAwMAorI2RlZmluZSBCTV9DTEtDVFJMX0hTQURDX1JFU0VUQgkweDQwMDAwMDAwCisjZGVmaW5lIEJQX0NMS0NUUkxfSFNBRENfRlJFUURJVgkyOAorI2RlZmluZSBCTV9DTEtDVFJMX0hTQURDX0ZSRVFESVYJMHgzMDAwMDAwMAorI2RlZmluZSBCRl9DTEtDVFJMX0hTQURDX0ZSRVFESVYodikgIFwKKwkJKCgodikgPDwgMjgpICYgQk1fQ0xLQ1RSTF9IU0FEQ19GUkVRRElWKQorI2RlZmluZSBCUF9DTEtDVFJMX0hTQURDX1JTUlZEMQkwCisjZGVmaW5lIEJNX0NMS0NUUkxfSFNBRENfUlNSVkQxCTB4MEZGRkZGRkYKKyNkZWZpbmUgQkZfQ0xLQ1RSTF9IU0FEQ19SU1JWRDEodikgIFwKKwkJKCgodikgPDwgMCkgJiBCTV9DTEtDVFJMX0hTQURDX1JTUlZEMSkKKworI2RlZmluZSBIV19DTEtDVFJMX0ZMRVhDQU4JKDB4MDAwMDAxNjApCisKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9GTEVYQ0FOX1JTUlZEMgkweDgwMDAwMDAwCisjZGVmaW5lIEJQX0NMS0NUUkxfRkxFWENBTl9TVE9QX0NBTjAJMzAKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9GTEVYQ0FOX1NUT1BfQ0FOMAkweDQwMDAwMDAwCisjZGVmaW5lIEJNX0NMS0NUUkxfRkxFWENBTl9DQU4wX1NUQVRVUwkweDIwMDAwMDAwCisjZGVmaW5lIEJQX0NMS0NUUkxfRkxFWENBTl9TVE9QX0NBTjEJMjgKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9GTEVYQ0FOX1NUT1BfQ0FOMQkweDEwMDAwMDAwCisjZGVmaW5lIEJNX0NMS0NUUkxfRkxFWENBTl9DQU4xX1NUQVRVUwkweDA4MDAwMDAwCisjZGVmaW5lIEJQX0NMS0NUUkxfRkxFWENBTl9SU1JWRDEJMAorI2RlZmluZSBCTV9DTEtDVFJMX0ZMRVhDQU5fUlNSVkQxCTB4MDdGRkZGRkYKKyNkZWZpbmUgQkZfQ0xLQ1RSTF9GTEVYQ0FOX1JTUlZEMSh2KSAgXAorCQkoKCh2KSA8PCAwKSAmIEJNX0NMS0NUUkxfRkxFWENBTl9SU1JWRDEpCisKKyNkZWZpbmUgSFdfQ0xLQ1RSTF9GUkFDMAkoMHgwMDAwMDFiMCkKKyNkZWZpbmUgSFdfQ0xLQ1RSTF9GUkFDMF9TRVQJKDB4MDAwMDAxYjQpCisjZGVmaW5lIEhXX0NMS0NUUkxfRlJBQzBfQ0xSCSgweDAwMDAwMWI4KQorI2RlZmluZSBIV19DTEtDVFJMX0ZSQUMwX1RPRwkoMHgwMDAwMDFiYykKKworI2RlZmluZSBCUF9DTEtDVFJMX0ZSQUMwX0NMS0dBVEVJTzAJMzEKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9GUkFDMF9DTEtHQVRFSU8wCTB4ODAwMDAwMDAKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9GUkFDMF9JTzBfU1RBQkxFCTB4NDAwMDAwMDAKKyNkZWZpbmUgQlBfQ0xLQ1RSTF9GUkFDMF9JTzBGUkFDCTI0CisjZGVmaW5lIEJNX0NMS0NUUkxfRlJBQzBfSU8wRlJBQwkweDNGMDAwMDAwCisjZGVmaW5lIEJGX0NMS0NUUkxfRlJBQzBfSU8wRlJBQyh2KSAgXAorCQkoKCh2KSA8PCAyNCkgJiBCTV9DTEtDVFJMX0ZSQUMwX0lPMEZSQUMpCisjZGVmaW5lIEJQX0NMS0NUUkxfRlJBQzBfQ0xLR0FURUlPMQkyMworI2RlZmluZSBCTV9DTEtDVFJMX0ZSQUMwX0NMS0dBVEVJTzEJMHgwMDgwMDAwMAorI2RlZmluZSBCTV9DTEtDVFJMX0ZSQUMwX0lPMV9TVEFCTEUJMHgwMDQwMDAwMAorI2RlZmluZSBCUF9DTEtDVFJMX0ZSQUMwX0lPMUZSQUMJMTYKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9GUkFDMF9JTzFGUkFDCTB4MDAzRjAwMDAKKyNkZWZpbmUgQkZfQ0xLQ1RSTF9GUkFDMF9JTzFGUkFDKHYpICBcCisJCSgoKHYpIDw8IDE2KSAmIEJNX0NMS0NUUkxfRlJBQzBfSU8xRlJBQykKKyNkZWZpbmUgQlBfQ0xLQ1RSTF9GUkFDMF9DTEtHQVRFRU1JCTE1CisjZGVmaW5lIEJNX0NMS0NUUkxfRlJBQzBfQ0xLR0FURUVNSQkweDAwMDA4MDAwCisjZGVmaW5lIEJNX0NMS0NUUkxfRlJBQzBfRU1JX1NUQUJMRQkweDAwMDA0MDAwCisjZGVmaW5lIEJQX0NMS0NUUkxfRlJBQzBfRU1JRlJBQwk4CisjZGVmaW5lIEJNX0NMS0NUUkxfRlJBQzBfRU1JRlJBQwkweDAwMDAzRjAwCisjZGVmaW5lIEJGX0NMS0NUUkxfRlJBQzBfRU1JRlJBQyh2KSAgXAorCQkoKCh2KSA8PCA4KSAmIEJNX0NMS0NUUkxfRlJBQzBfRU1JRlJBQykKKyNkZWZpbmUgQlBfQ0xLQ1RSTF9GUkFDMF9DTEtHQVRFQ1BVCTcKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9GUkFDMF9DTEtHQVRFQ1BVCTB4MDAwMDAwODAKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9GUkFDMF9DUFVfU1RBQkxFCTB4MDAwMDAwNDAKKyNkZWZpbmUgQlBfQ0xLQ1RSTF9GUkFDMF9DUFVGUkFDCTAKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9GUkFDMF9DUFVGUkFDCTB4MDAwMDAwM0YKKyNkZWZpbmUgQkZfQ0xLQ1RSTF9GUkFDMF9DUFVGUkFDKHYpICBcCisJCSgoKHYpIDw8IDApICYgQk1fQ0xLQ1RSTF9GUkFDMF9DUFVGUkFDKQorCisjZGVmaW5lIEhXX0NMS0NUUkxfRlJBQzEJKDB4MDAwMDAxYzApCisjZGVmaW5lIEhXX0NMS0NUUkxfRlJBQzFfU0VUCSgweDAwMDAwMWM0KQorI2RlZmluZSBIV19DTEtDVFJMX0ZSQUMxX0NMUgkoMHgwMDAwMDFjOCkKKyNkZWZpbmUgSFdfQ0xLQ1RSTF9GUkFDMV9UT0cJKDB4MDAwMDAxY2MpCisKKyNkZWZpbmUgQlBfQ0xLQ1RSTF9GUkFDMV9SU1JWRDIJMjQKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9GUkFDMV9SU1JWRDIJMHhGRjAwMDAwMAorI2RlZmluZSBCRl9DTEtDVFJMX0ZSQUMxX1JTUlZEMih2KSBcCisJCSgoKHYpIDw8IDI0KSAmIEJNX0NMS0NUUkxfRlJBQzFfUlNSVkQyKQorI2RlZmluZSBCUF9DTEtDVFJMX0ZSQUMxX0NMS0dBVEVHUE1JCTIzCisjZGVmaW5lIEJNX0NMS0NUUkxfRlJBQzFfQ0xLR0FURUdQTUkJMHgwMDgwMDAwMAorI2RlZmluZSBCTV9DTEtDVFJMX0ZSQUMxX0dQTUlfU1RBQkxFCTB4MDA0MDAwMDAKKyNkZWZpbmUgQlBfQ0xLQ1RSTF9GUkFDMV9HUE1JRlJBQwkxNgorI2RlZmluZSBCTV9DTEtDVFJMX0ZSQUMxX0dQTUlGUkFDCTB4MDAzRjAwMDAKKyNkZWZpbmUgQkZfQ0xLQ1RSTF9GUkFDMV9HUE1JRlJBQyh2KSAgXAorCQkoKCh2KSA8PCAxNikgJiBCTV9DTEtDVFJMX0ZSQUMxX0dQTUlGUkFDKQorI2RlZmluZSBCUF9DTEtDVFJMX0ZSQUMxX0NMS0dBVEVIU0FEQwkxNQorI2RlZmluZSBCTV9DTEtDVFJMX0ZSQUMxX0NMS0dBVEVIU0FEQwkweDAwMDA4MDAwCisjZGVmaW5lIEJNX0NMS0NUUkxfRlJBQzFfSFNBRENfU1RBQkxFCTB4MDAwMDQwMDAKKyNkZWZpbmUgQlBfQ0xLQ1RSTF9GUkFDMV9IU0FEQ0ZSQUMJOAorI2RlZmluZSBCTV9DTEtDVFJMX0ZSQUMxX0hTQURDRlJBQwkweDAwMDAzRjAwCisjZGVmaW5lIEJGX0NMS0NUUkxfRlJBQzFfSFNBRENGUkFDKHYpICBcCisJCSgoKHYpIDw8IDgpICYgQk1fQ0xLQ1RSTF9GUkFDMV9IU0FEQ0ZSQUMpCisjZGVmaW5lIEJQX0NMS0NUUkxfRlJBQzFfQ0xLR0FURVBJWAk3CisjZGVmaW5lIEJNX0NMS0NUUkxfRlJBQzFfQ0xLR0FURVBJWAkweDAwMDAwMDgwCisjZGVmaW5lIEJNX0NMS0NUUkxfRlJBQzFfUElYX1NUQUJMRQkweDAwMDAwMDQwCisjZGVmaW5lIEJQX0NMS0NUUkxfRlJBQzFfUElYRlJBQwkwCisjZGVmaW5lIEJNX0NMS0NUUkxfRlJBQzFfUElYRlJBQwkweDAwMDAwMDNGCisjZGVmaW5lIEJGX0NMS0NUUkxfRlJBQzFfUElYRlJBQyh2KSAgXAorCQkoKCh2KSA8PCAwKSAmIEJNX0NMS0NUUkxfRlJBQzFfUElYRlJBQykKKworI2RlZmluZSBIV19DTEtDVFJMX0NMS1NFUQkoMHgwMDAwMDFkMCkKKyNkZWZpbmUgSFdfQ0xLQ1RSTF9DTEtTRVFfU0VUCSgweDAwMDAwMWQ0KQorI2RlZmluZSBIV19DTEtDVFJMX0NMS1NFUV9DTFIJKDB4MDAwMDAxZDgpCisjZGVmaW5lIEhXX0NMS0NUUkxfQ0xLU0VRX1RPRwkoMHgwMDAwMDFkYykKKworI2RlZmluZSBCUF9DTEtDVFJMX0NMS1NFUV9SU1JWRDAJMTkKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9DTEtTRVFfUlNSVkQwCTB4RkZGODAwMDAKKyNkZWZpbmUgQkZfQ0xLQ1RSTF9DTEtTRVFfUlNSVkQwKHYpIFwKKwkJKCgodikgPDwgMTkpICYgQk1fQ0xLQ1RSTF9DTEtTRVFfUlNSVkQwKQorI2RlZmluZSBCTV9DTEtDVFJMX0NMS1NFUV9CWVBBU1NfQ1BVCTB4MDAwNDAwMDAKKyNkZWZpbmUgQlBfQ0xLQ1RSTF9DTEtTRVFfUlNSVkQxCTE1CisjZGVmaW5lIEJNX0NMS0NUUkxfQ0xLU0VRX1JTUlZEMQkweDAwMDM4MDAwCisjZGVmaW5lIEJGX0NMS0NUUkxfQ0xLU0VRX1JTUlZEMSh2KSAgXAorCQkoKCh2KSA8PCAxNSkgJiBCTV9DTEtDVFJMX0NMS1NFUV9SU1JWRDEpCisjZGVmaW5lIEJNX0NMS0NUUkxfQ0xLU0VRX0JZUEFTU19ESVNfTENESUYJMHgwMDAwNDAwMAorI2RlZmluZSBCVl9DTEtDVFJMX0NMS1NFUV9CWVBBU1NfRElTX0xDRElGX19CWVBBU1MgMHgxCisjZGVmaW5lIEJWX0NMS0NUUkxfQ0xLU0VRX0JZUEFTU19ESVNfTENESUZfX1BGRCAgICAweDAKKyNkZWZpbmUgQlBfQ0xLQ1RSTF9DTEtTRVFfUlNSVkQyCTkKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9DTEtTRVFfUlNSVkQyCTB4MDAwMDNFMDAKKyNkZWZpbmUgQkZfQ0xLQ1RSTF9DTEtTRVFfUlNSVkQyKHYpICBcCisJCSgoKHYpIDw8IDkpICYgQk1fQ0xLQ1RSTF9DTEtTRVFfUlNSVkQyKQorI2RlZmluZSBCTV9DTEtDVFJMX0NMS1NFUV9CWVBBU1NfRVRNCTB4MDAwMDAxMDAKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9DTEtTRVFfQllQQVNTX0VNSQkweDAwMDAwMDgwCisjZGVmaW5lIEJNX0NMS0NUUkxfQ0xLU0VRX0JZUEFTU19TU1AzCTB4MDAwMDAwNDAKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9DTEtTRVFfQllQQVNTX1NTUDIJMHgwMDAwMDAyMAorI2RlZmluZSBCTV9DTEtDVFJMX0NMS1NFUV9CWVBBU1NfU1NQMQkweDAwMDAwMDEwCisjZGVmaW5lIEJNX0NMS0NUUkxfQ0xLU0VRX0JZUEFTU19TU1AwCTB4MDAwMDAwMDgKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9DTEtTRVFfQllQQVNTX0dQTUkJMHgwMDAwMDAwNAorI2RlZmluZSBCTV9DTEtDVFJMX0NMS1NFUV9CWVBBU1NfU0FJRjEJMHgwMDAwMDAwMgorI2RlZmluZSBCTV9DTEtDVFJMX0NMS1NFUV9CWVBBU1NfU0FJRjAJMHgwMDAwMDAwMQorCisjZGVmaW5lIEhXX0NMS0NUUkxfUkVTRVQJKDB4MDAwMDAxZTApCisKKyNkZWZpbmUgQlBfQ0xLQ1RSTF9SRVNFVF9SU1JWRAk2CisjZGVmaW5lIEJNX0NMS0NUUkxfUkVTRVRfUlNSVkQJMHhGRkZGRkZDMAorI2RlZmluZSBCRl9DTEtDVFJMX1JFU0VUX1JTUlZEKHYpIFwKKwkJKCgodikgPDwgNikgJiBCTV9DTEtDVFJMX1JFU0VUX1JTUlZEKQorI2RlZmluZSBCTV9DTEtDVFJMX1JFU0VUX1dET0dfUE9SX0RJU0FCTEUJMHgwMDAwMDAyMAorI2RlZmluZSBCTV9DTEtDVFJMX1JFU0VUX0VYVEVSTkFMX1JFU0VUX0VOQUJMRQkweDAwMDAwMDEwCisjZGVmaW5lIEJNX0NMS0NUUkxfUkVTRVRfVEhFUk1BTF9SRVNFVF9FTkFCTEUJMHgwMDAwMDAwOAorI2RlZmluZSBCTV9DTEtDVFJMX1JFU0VUX1RIRVJNQUxfUkVTRVRfREVGQVVMVAkweDAwMDAwMDA0CisjZGVmaW5lIEJNX0NMS0NUUkxfUkVTRVRfQ0hJUAkweDAwMDAwMDAyCisjZGVmaW5lIEJNX0NMS0NUUkxfUkVTRVRfRElHCTB4MDAwMDAwMDEKKworI2RlZmluZSBIV19DTEtDVFJMX1NUQVRVUwkoMHgwMDAwMDFmMCkKKworI2RlZmluZSBCUF9DTEtDVFJMX1NUQVRVU19DUFVfTElNSVQJMzAKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9TVEFUVVNfQ1BVX0xJTUlUCTB4QzAwMDAwMDAKKyNkZWZpbmUgQkZfQ0xLQ1RSTF9TVEFUVVNfQ1BVX0xJTUlUKHYpIFwKKwkJKCgodikgPDwgMzApICYgQk1fQ0xLQ1RSTF9TVEFUVVNfQ1BVX0xJTUlUKQorI2RlZmluZSBCUF9DTEtDVFJMX1NUQVRVU19SU1JWRAkwCisjZGVmaW5lIEJNX0NMS0NUUkxfU1RBVFVTX1JTUlZECTB4M0ZGRkZGRkYKKyNkZWZpbmUgQkZfQ0xLQ1RSTF9TVEFUVVNfUlNSVkQodikgIFwKKwkJKCgodikgPDwgMCkgJiBCTV9DTEtDVFJMX1NUQVRVU19SU1JWRCkKKworI2RlZmluZSBIV19DTEtDVFJMX1ZFUlNJT04JKDB4MDAwMDAyMDApCisKKyNkZWZpbmUgQlBfQ0xLQ1RSTF9WRVJTSU9OX01BSk9SCTI0CisjZGVmaW5lIEJNX0NMS0NUUkxfVkVSU0lPTl9NQUpPUgkweEZGMDAwMDAwCisjZGVmaW5lIEJGX0NMS0NUUkxfVkVSU0lPTl9NQUpPUih2KSBcCisJCSgoKHYpIDw8IDI0KSAmIEJNX0NMS0NUUkxfVkVSU0lPTl9NQUpPUikKKyNkZWZpbmUgQlBfQ0xLQ1RSTF9WRVJTSU9OX01JTk9SCTE2CisjZGVmaW5lIEJNX0NMS0NUUkxfVkVSU0lPTl9NSU5PUgkweDAwRkYwMDAwCisjZGVmaW5lIEJGX0NMS0NUUkxfVkVSU0lPTl9NSU5PUih2KSAgXAorCQkoKCh2KSA8PCAxNikgJiBCTV9DTEtDVFJMX1ZFUlNJT05fTUlOT1IpCisjZGVmaW5lIEJQX0NMS0NUUkxfVkVSU0lPTl9TVEVQCTAKKyNkZWZpbmUgQk1fQ0xLQ1RSTF9WRVJTSU9OX1NURVAJMHgwMDAwRkZGRgorI2RlZmluZSBCRl9DTEtDVFJMX1ZFUlNJT05fU1RFUCh2KSAgXAorCQkoKCh2KSA8PCAwKSAmIEJNX0NMS0NUUkxfVkVSU0lPTl9TVEVQKQorCisjZW5kaWYgLyogX19SRUdTX0NMS0NUUkxfTVgyOF9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXhzL3N5c3RlbS5jIGIvYXJjaC9hcm0vbWFjaC1teHMvc3lzdGVtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM0M2Q3ZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXhzL3N5c3RlbS5jCkBAIC0wLDAgKzEsMTM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5IEFSTSBMaW1pdGVkCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgRGVlcCBCbHVlIFNvbHV0aW9ucyBMdGQKKyAqIENvcHlyaWdodCAyMDA2LTIwMDcsMjAxMCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMDggSnVlcmdlbiBCZWlzZXJ0LCBrZXJuZWxAcGVuZ3V0cm9uaXguZGUKKyAqIENvcHlyaWdodCAyMDA5IElseWEgWWFub2ssIEVtY3JhZnQgU3lzdGVtcyBMdGQsIHlhbm9rQGVtY3JhZnQuY29tCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSA8YXNtL3Byb2MtZm5zLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorCisjaW5jbHVkZSA8bWFjaC9teHMuaD4KKyNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgorCisjZGVmaW5lIE1YMjNfQ0xLQ1RSTF9SRVNFVF9PRkZTRVQJMHgxMjAKKyNkZWZpbmUgTVgyOF9DTEtDVFJMX1JFU0VUX09GRlNFVAkweDFlMAorI2RlZmluZSBNWFNfQ0xLQ1RSTF9SRVNFVF9DSElQCQkoMSA8PCAxKQorCisjZGVmaW5lIE1YU19NT0RVTEVfQ0xLR0FURQkJKDEgPDwgMzApCisjZGVmaW5lIE1YU19NT0RVTEVfU0ZUUlNUCQkoMSA8PCAzMSkKKworc3RhdGljIHZvaWQgX19pb21lbSAqbXhzX2Nsa2N0cmxfcmVzZXRfYWRkcjsKKworLyoKKyAqIFJlc2V0IHRoZSBzeXN0ZW0uIEl0IGlzIGNhbGxlZCBieSBtYWNoaW5lX3Jlc3RhcnQoKS4KKyAqLwordm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSwgY29uc3QgY2hhciAqY21kKQoreworCS8qIHJlc2V0IHRoZSBjaGlwICovCisJX19teHNfc2V0bChNWFNfQ0xLQ1RSTF9SRVNFVF9DSElQLCBteHNfY2xrY3RybF9yZXNldF9hZGRyKTsKKworCXByX2VycigiRmFpbGVkIHRvIGFzc2VydCB0aGUgY2hpcCByZXNldFxuIik7CisKKwkvKiBEZWxheSB0byBhbGxvdyB0aGUgc2VyaWFsIHBvcnQgdG8gc2hvdyB0aGUgbWVzc2FnZSAqLworCW1kZWxheSg1MCk7CisKKwkvKiBXZSdsbCB0YWtlIGEganVtcCB0aHJvdWdoIHplcm8gYXMgYSBwb29yIHNlY29uZCAqLworCWNwdV9yZXNldCgwKTsKK30KKworc3RhdGljIGludCBfX2luaXQgbXhzX2FyY2hfcmVzZXRfaW5pdCh2b2lkKQoreworCXN0cnVjdCBjbGsgKmNsazsKKworCW14c19jbGtjdHJsX3Jlc2V0X2FkZHIgPSBNWFNfSU9fQUREUkVTUyhNWFNfQ0xLQ1RSTF9CQVNFX0FERFIpICsKKwkJCQkoY3B1X2lzX214MjMoKSA/IE1YMjNfQ0xLQ1RSTF9SRVNFVF9PRkZTRVQgOgorCQkJCQkJIE1YMjhfQ0xLQ1RSTF9SRVNFVF9PRkZTRVQpOworCisJY2xrID0gY2xrX2dldF9zeXMoInJ0YyIsIE5VTEwpOworCWlmICghSVNfRVJSKGNsaykpCisJCWNsa19lbmFibGUoY2xrKTsKKworCXJldHVybiAwOworfQorY29yZV9pbml0Y2FsbChteHNfYXJjaF9yZXNldF9pbml0KTsKKworLyoKKyAqIENsZWFyIHRoZSBiaXQgYW5kIHBvbGwgaXQgY2xlYXJlZC4gIFRoaXMgaXMgdXN1YWxseSBjYWxsZWQgd2l0aAorICogYSByZXNldCBhZGRyZXNzIGFuZCBtYXNrIGJlaW5nIGVpdGhlciBTRlRSU1QoYml0IDMxKSBvciBDTEtHQVRFCisgKiAoYml0IDMwKS4KKyAqLworc3RhdGljIGludCBjbGVhcl9wb2xsX2JpdCh2b2lkIF9faW9tZW0gKmFkZHIsIHUzMiBtYXNrKQoreworCWludCB0aW1lb3V0ID0gMHg0MDA7CisKKwkvKiBjbGVhciB0aGUgYml0ICovCisJX19teHNfY2xybChtYXNrLCBhZGRyKTsKKworCS8qCisJICogU0ZUUlNUIG5lZWRzIDMgR1BNSSBjbG9ja3MgdG8gc2V0dGxlLCB0aGUgcmVmZXJlbmNlIG1hbnVhbAorCSAqIHJlY29tbWVuZHMgdG8gd2FpdCAxdXMuCisJICovCisJdWRlbGF5KDEpOworCisJLyogcG9sbCB0aGUgYml0IGJlY29taW5nIGNsZWFyICovCisJd2hpbGUgKChfX3Jhd19yZWFkbChhZGRyKSAmIG1hc2spICYmIC0tdGltZW91dCkKKwkJLyogbm90aGluZyAqLzsKKworCXJldHVybiAhdGltZW91dDsKK30KKworaW50IG14c19yZXNldF9ibG9jayh2b2lkIF9faW9tZW0gKnJlc2V0X2FkZHIpCit7CisJaW50IHJldDsKKwlpbnQgdGltZW91dCA9IDB4NDAwOworCisJLyogY2xlYXIgYW5kIHBvbGwgU0ZUUlNUICovCisJcmV0ID0gY2xlYXJfcG9sbF9iaXQocmVzZXRfYWRkciwgTVhTX01PRFVMRV9TRlRSU1QpOworCWlmICh1bmxpa2VseShyZXQpKQorCQlnb3RvIGVycm9yOworCisJLyogY2xlYXIgQ0xLR0FURSAqLworCV9fbXhzX2NscmwoTVhTX01PRFVMRV9DTEtHQVRFLCByZXNldF9hZGRyKTsKKworCS8qIHNldCBTRlRSU1QgdG8gcmVzZXQgdGhlIGJsb2NrICovCisJX19teHNfc2V0bChNWFNfTU9EVUxFX1NGVFJTVCwgcmVzZXRfYWRkcik7CisJdWRlbGF5KDEpOworCisJLyogcG9sbCBDTEtHQVRFIGJlY29taW5nIHNldCAqLworCXdoaWxlICgoIShfX3Jhd19yZWFkbChyZXNldF9hZGRyKSAmIE1YU19NT0RVTEVfQ0xLR0FURSkpICYmIC0tdGltZW91dCkKKwkJLyogbm90aGluZyAqLzsKKwlpZiAodW5saWtlbHkoIXRpbWVvdXQpKQorCQlnb3RvIGVycm9yOworCisJLyogY2xlYXIgYW5kIHBvbGwgU0ZUUlNUICovCisJcmV0ID0gY2xlYXJfcG9sbF9iaXQocmVzZXRfYWRkciwgTVhTX01PRFVMRV9TRlRSU1QpOworCWlmICh1bmxpa2VseShyZXQpKQorCQlnb3RvIGVycm9yOworCisJLyogY2xlYXIgYW5kIHBvbGwgQ0xLR0FURSAqLworCXJldCA9IGNsZWFyX3BvbGxfYml0KHJlc2V0X2FkZHIsIE1YU19NT0RVTEVfQ0xLR0FURSk7CisJaWYgKHVubGlrZWx5KHJldCkpCisJCWdvdG8gZXJyb3I7CisKKwlyZXR1cm4gMDsKKworZXJyb3I6CisJcHJfZXJyKCIlcyglcCk6IG1vZHVsZSByZXNldCB0aW1lb3V0XG4iLCBfX2Z1bmNfXywgcmVzZXRfYWRkcik7CisJcmV0dXJuIC1FVElNRURPVVQ7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14cy90aW1lci5jIGIvYXJjaC9hcm0vbWFjaC1teHMvdGltZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzY0N2YzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teHMvdGltZXIuYwpAQCAtMCwwICsxLDI5NiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMSBEZWVwIEJsdWUgU29sdXRpb25zCisgKiAgQ29weXJpZ2h0IChDKSAyMDAyIFNoYW5lIE5heSAoc2hhbmVAbWluaXJsLmNvbSkKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwNyBQYXZlbCBQaXNhIChwcGlzYUBwaWtyb24uY29tKQorICogIENvcHlyaWdodCAoQykgMjAwOCBKdWVyZ2VuIEJlaXNlcnQgKGtlcm5lbEBwZW5ndXRyb25peC5kZSkKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKKyAqIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvY2xvY2tjaGlwcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorI2luY2x1ZGUgPG1hY2gvbXhzLmg+CisjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KKworLyoKKyAqIFRoZXJlIGFyZSAyIHZlcnNpb25zIG9mIHRoZSB0aW1yb3Qgb24gRnJlZXNjYWxlIE1YUy1iYXNlZCBTb0NzLgorICogVGhlIHYxIG9uIE1YMjMgb25seSBnZXRzIDE2IGJpdHMgY291bnRlciwgd2hpbGUgdjIgb24gTVgyOAorICogZXh0ZW5kcyB0aGUgY291bnRlciB0byAzMiBiaXRzLgorICoKKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiB1c2VzIHR3byB0aW1lcnMsIG9uZSBmb3IgY2xvY2tfZXZlbnQgYW5kCisgKiBhbm90aGVyIGZvciBjbG9ja3NvdXJjZS4gTVgyOCB1c2VzIHRpbXJvdCAwIGFuZCAxLCB3aGlsZSBNWDIzCisgKiB1c2VzIDAgYW5kIDIuCisgKi8KKworI2RlZmluZSBNWDIzX1RJTVJPVF9WRVJTSU9OX09GRlNFVAkweDBhMAorI2RlZmluZSBNWDI4X1RJTVJPVF9WRVJTSU9OX09GRlNFVAkweDEyMAorI2RlZmluZSBCUF9USU1ST1RfTUFKT1JfVkVSU0lPTgkJMjQKKyNkZWZpbmUgQlZfVElNUk9UX1ZFUlNJT05fMQkJMHgwMQorI2RlZmluZSBCVl9USU1ST1RfVkVSU0lPTl8yCQkweDAyCisjZGVmaW5lIHRpbXJvdF9pc192MSgpCSh0aW1yb3RfbWFqb3JfdmVyc2lvbiA9PSBCVl9USU1ST1RfVkVSU0lPTl8xKQorCisvKgorICogVGhlcmUgYXJlIDQgcmVnaXN0ZXJzIGZvciBlYWNoIHRpbXJvdHYyIGluc3RhbmNlLCBhbmQgMiByZWdpc3RlcnMKKyAqIGZvciBlYWNoIHRpbXJvdHYxLiBTbyBhZGRyZXNzIHN0ZXAgMHg0MCBpbiBtYWNyb3MgYmVsb3cgc3RyaWRlcworICogb25lIGluc3RhbmNlIG9mIHRpbXJvdHYyIHdoaWxlIHR3byBpbnN0YW5jZXMgb2YgdGltcm90djEuCisgKgorICogQXMgdGhlIHJlc3VsdCwgSFdfVElNUk9UX1hYWG4oMSkgZGVmaW5lcyB0aGUgYWRkcmVzcyBvZiB0aW1yb3QxCisgKiBvbiBNWDI4IHdoaWxlIHRpbXJvdDIgb24gTVgyMy4KKyAqLworLyogY29tbW9uIGJldHdlZW4gdjEgYW5kIHYyICovCisjZGVmaW5lIEhXX1RJTVJPVF9ST1RDVFJMCQkweDAwCisjZGVmaW5lIEhXX1RJTVJPVF9USU1DVFJMbihuKQkJKDB4MjAgKyAobikgKiAweDQwKQorLyogdjEgb25seSAqLworI2RlZmluZSBIV19USU1ST1RfVElNQ09VTlRuKG4pCQkoMHgzMCArIChuKSAqIDB4NDApCisvKiB2MiBvbmx5ICovCisjZGVmaW5lIEhXX1RJTVJPVF9SVU5OSU5HX0NPVU5UbihuKQkoMHgzMCArIChuKSAqIDB4NDApCisjZGVmaW5lIEhXX1RJTVJPVF9GSVhFRF9DT1VOVG4obikJKDB4NDAgKyAobikgKiAweDQwKQorCisjZGVmaW5lIEJNX1RJTVJPVF9USU1DVFJMbl9SRUxPQUQJKDEgPDwgNikKKyNkZWZpbmUgQk1fVElNUk9UX1RJTUNUUkxuX1VQREFURQkoMSA8PCA3KQorI2RlZmluZSBCTV9USU1ST1RfVElNQ1RSTG5fSVJRX0VOCSgxIDw8IDE0KQorI2RlZmluZSBCTV9USU1ST1RfVElNQ1RSTG5fSVJRCQkoMSA8PCAxNSkKKyNkZWZpbmUgQlBfVElNUk9UX1RJTUNUUkxuX1NFTEVDVAkwCisjZGVmaW5lIEJWX1RJTVJPVHYxX1RJTUNUUkxuX1NFTEVDVF9fMzJLSFpfWFRBTAkweDgKKyNkZWZpbmUgQlZfVElNUk9UdjJfVElNQ1RSTG5fU0VMRUNUX18zMktIWl9YVEFMCTB4YgorCitzdGF0aWMgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSBteHNfY2xvY2tldmVudF9kZXZpY2U7CitzdGF0aWMgZW51bSBjbG9ja19ldmVudF9tb2RlIG14c19jbG9ja2V2ZW50X21vZGUgPSBDTE9DS19FVlRfTU9ERV9VTlVTRUQ7CisKK3N0YXRpYyB2b2lkIF9faW9tZW0gKm14c190aW1yb3RfYmFzZSA9IE1YU19JT19BRERSRVNTKE1YU19USU1ST1RfQkFTRV9BRERSKTsKK3N0YXRpYyB1MzIgdGltcm90X21ham9yX3ZlcnNpb247CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0aW1yb3RfaXJxX2Rpc2FibGUodm9pZCkKK3sKKwlfX214c19jbHJsKEJNX1RJTVJPVF9USU1DVFJMbl9JUlFfRU4sCisJCQlteHNfdGltcm90X2Jhc2UgKyBIV19USU1ST1RfVElNQ1RSTG4oMCkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdGltcm90X2lycV9lbmFibGUodm9pZCkKK3sKKwlfX214c19zZXRsKEJNX1RJTVJPVF9USU1DVFJMbl9JUlFfRU4sCisJCQlteHNfdGltcm90X2Jhc2UgKyBIV19USU1ST1RfVElNQ1RSTG4oMCkpOworfQorCitzdGF0aWMgdm9pZCB0aW1yb3RfaXJxX2Fja25vd2xlZGdlKHZvaWQpCit7CisJX19teHNfY2xybChCTV9USU1ST1RfVElNQ1RSTG5fSVJRLAorCQkJbXhzX3RpbXJvdF9iYXNlICsgSFdfVElNUk9UX1RJTUNUUkxuKDApKTsKK30KKworc3RhdGljIGN5Y2xlX3QgdGltcm90djFfZ2V0X2N5Y2xlcyhzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKQoreworCXJldHVybiB+KChfX3Jhd19yZWFkbChteHNfdGltcm90X2Jhc2UgKyBIV19USU1ST1RfVElNQ09VTlRuKDEpKQorCQkJJiAweGZmZmYwMDAwKSA+PiAxNik7Cit9CisKK3N0YXRpYyBjeWNsZV90IHRpbXJvdHYyX2dldF9jeWNsZXMoc3RydWN0IGNsb2Nrc291cmNlICpjcykKK3sKKwlyZXR1cm4gfl9fcmF3X3JlYWRsKG14c190aW1yb3RfYmFzZSArIEhXX1RJTVJPVF9SVU5OSU5HX0NPVU5UbigxKSk7Cit9CisKK3N0YXRpYyBpbnQgdGltcm90djFfc2V0X25leHRfZXZlbnQodW5zaWduZWQgbG9uZyBldnQsCisJCQkJCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmRldikKK3sKKwkvKiB0aW1yb3QgZGVjcmVtZW50cyB0aGUgY291bnQgKi8KKwlfX3Jhd193cml0ZWwoZXZ0LCBteHNfdGltcm90X2Jhc2UgKyBIV19USU1ST1RfVElNQ09VTlRuKDApKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRpbXJvdHYyX3NldF9uZXh0X2V2ZW50KHVuc2lnbmVkIGxvbmcgZXZ0LAorCQkJCQlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpkZXYpCit7CisJLyogdGltcm90IGRlY3JlbWVudHMgdGhlIGNvdW50ICovCisJX19yYXdfd3JpdGVsKGV2dCwgbXhzX3RpbXJvdF9iYXNlICsgSFdfVElNUk9UX0ZJWEVEX0NPVU5UbigwKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlycXJldHVybl90IG14c190aW1lcl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCA9IGRldl9pZDsKKworCXRpbXJvdF9pcnFfYWNrbm93bGVkZ2UoKTsKKwlldnQtPmV2ZW50X2hhbmRsZXIoZXZ0KTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gbXhzX3RpbWVyX2lycSA9IHsKKwkubmFtZQkJPSAiTVhTIFRpbWVyIFRpY2siLAorCS5kZXZfaWQJCT0gJm14c19jbG9ja2V2ZW50X2RldmljZSwKKwkuZmxhZ3MJCT0gSVJRRl9USU1FUiB8IElSUUZfSVJRUE9MTCwKKwkuaGFuZGxlcgk9IG14c190aW1lcl9pbnRlcnJ1cHQsCit9OworCisjaWZkZWYgREVCVUcKK3N0YXRpYyBjb25zdCBjaGFyICpjbG9ja19ldmVudF9tb2RlX2xhYmVsW10gY29uc3QgPSB7CisJW0NMT0NLX0VWVF9NT0RFX1BFUklPRElDXSA9ICJDTE9DS19FVlRfTU9ERV9QRVJJT0RJQyIsCisJW0NMT0NLX0VWVF9NT0RFX09ORVNIT1RdICA9ICJDTE9DS19FVlRfTU9ERV9PTkVTSE9UIiwKKwlbQ0xPQ0tfRVZUX01PREVfU0hVVERPV05dID0gIkNMT0NLX0VWVF9NT0RFX1NIVVRET1dOIiwKKwlbQ0xPQ0tfRVZUX01PREVfVU5VU0VEXSAgID0gIkNMT0NLX0VWVF9NT0RFX1VOVVNFRCIKK307CisjZW5kaWYgLyogREVCVUcgKi8KKworc3RhdGljIHZvaWQgbXhzX3NldF9tb2RlKGVudW0gY2xvY2tfZXZlbnRfbW9kZSBtb2RlLAorCQkJCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCkKK3sKKwkvKiBEaXNhYmxlIGludGVycnVwdCBpbiB0aW1lciBtb2R1bGUgKi8KKwl0aW1yb3RfaXJxX2Rpc2FibGUoKTsKKworCWlmIChtb2RlICE9IG14c19jbG9ja2V2ZW50X21vZGUpIHsKKwkJLyogU2V0IGV2ZW50IHRpbWUgaW50byB0aGUgZnVydGhlc3QgZnV0dXJlICovCisJCWlmICh0aW1yb3RfaXNfdjEoKSkKKwkJCV9fcmF3X3dyaXRlbCgweGZmZmYsCisJCQkJbXhzX3RpbXJvdF9iYXNlICsgSFdfVElNUk9UX1RJTUNPVU5UbigxKSk7CisJCWVsc2UKKwkJCV9fcmF3X3dyaXRlbCgweGZmZmZmZmZmLAorCQkJCW14c190aW1yb3RfYmFzZSArIEhXX1RJTVJPVF9GSVhFRF9DT1VOVG4oMSkpOworCisJCS8qIENsZWFyIHBlbmRpbmcgaW50ZXJydXB0ICovCisJCXRpbXJvdF9pcnFfYWNrbm93bGVkZ2UoKTsKKwl9CisKKyNpZmRlZiBERUJVRworCXByX2luZm8oIiVzOiBjaGFuZ2luZyBtb2RlIGZyb20gJXMgdG8gJXNcbiIsIF9fZnVuY19fLAorCQljbG9ja19ldmVudF9tb2RlX2xhYmVsW214c19jbG9ja2V2ZW50X21vZGVdLAorCQljbG9ja19ldmVudF9tb2RlX2xhYmVsW21vZGVdKTsKKyNlbmRpZiAvKiBERUJVRyAqLworCisJLyogUmVtZW1iZXIgdGltZXIgbW9kZSAqLworCW14c19jbG9ja2V2ZW50X21vZGUgPSBtb2RlOworCisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBDTE9DS19FVlRfTU9ERV9QRVJJT0RJQzoKKwkJcHJfZXJyKCIlczogUGVyaW9kaWMgbW9kZSBpcyBub3QgaW1wbGVtZW50ZWRcbiIsIF9fZnVuY19fKTsKKwkJYnJlYWs7CisJY2FzZSBDTE9DS19FVlRfTU9ERV9PTkVTSE9UOgorCQl0aW1yb3RfaXJxX2VuYWJsZSgpOworCQlicmVhazsKKwljYXNlIENMT0NLX0VWVF9NT0RFX1NIVVRET1dOOgorCWNhc2UgQ0xPQ0tfRVZUX01PREVfVU5VU0VEOgorCWNhc2UgQ0xPQ0tfRVZUX01PREVfUkVTVU1FOgorCQkvKiBMZWZ0IGV2ZW50IHNvdXJjZXMgZGlzYWJsZWQsIG5vIG1vcmUgaW50ZXJydXB0cyBhcHBlYXIgKi8KKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSBteHNfY2xvY2tldmVudF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gIm14c190aW1yb3QiLAorCS5mZWF0dXJlcwk9IENMT0NLX0VWVF9GRUFUX09ORVNIT1QsCisJLnNoaWZ0CQk9IDMyLAorCS5zZXRfbW9kZQk9IG14c19zZXRfbW9kZSwKKwkuc2V0X25leHRfZXZlbnQJPSB0aW1yb3R2Ml9zZXRfbmV4dF9ldmVudCwKKwkucmF0aW5nCQk9IDIwMCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG14c19jbG9ja2V2ZW50X2luaXQoc3RydWN0IGNsayAqdGltZXJfY2xrKQoreworCXVuc2lnbmVkIGludCBjID0gY2xrX2dldF9yYXRlKHRpbWVyX2Nsayk7CisKKwlteHNfY2xvY2tldmVudF9kZXZpY2UubXVsdCA9CisJCWRpdl9zYyhjLCBOU0VDX1BFUl9TRUMsIG14c19jbG9ja2V2ZW50X2RldmljZS5zaGlmdCk7CisJbXhzX2Nsb2NrZXZlbnRfZGV2aWNlLmNwdW1hc2sgPSBjcHVtYXNrX29mKDApOworCWlmICh0aW1yb3RfaXNfdjEoKSkgeworCQlteHNfY2xvY2tldmVudF9kZXZpY2Uuc2V0X25leHRfZXZlbnQgPSB0aW1yb3R2MV9zZXRfbmV4dF9ldmVudDsKKwkJbXhzX2Nsb2NrZXZlbnRfZGV2aWNlLm1heF9kZWx0YV9ucyA9CisJCQljbG9ja2V2ZW50X2RlbHRhMm5zKDB4ZmZmZSwgJm14c19jbG9ja2V2ZW50X2RldmljZSk7CisJCW14c19jbG9ja2V2ZW50X2RldmljZS5taW5fZGVsdGFfbnMgPQorCQkJY2xvY2tldmVudF9kZWx0YTJucygweGYsICZteHNfY2xvY2tldmVudF9kZXZpY2UpOworCX0gZWxzZSB7CisJCW14c19jbG9ja2V2ZW50X2RldmljZS5tYXhfZGVsdGFfbnMgPQorCQkJY2xvY2tldmVudF9kZWx0YTJucygweGZmZmZmZmZlLCAmbXhzX2Nsb2NrZXZlbnRfZGV2aWNlKTsKKwkJbXhzX2Nsb2NrZXZlbnRfZGV2aWNlLm1pbl9kZWx0YV9ucyA9CisJCQljbG9ja2V2ZW50X2RlbHRhMm5zKDB4ZiwgJm14c19jbG9ja2V2ZW50X2RldmljZSk7CisJfQorCisJY2xvY2tldmVudHNfcmVnaXN0ZXJfZGV2aWNlKCZteHNfY2xvY2tldmVudF9kZXZpY2UpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tzb3VyY2UgY2xvY2tzb3VyY2VfbXhzID0geworCS5uYW1lCQk9ICJteHNfdGltZXIiLAorCS5yYXRpbmcJCT0gMjAwLAorCS5yZWFkCQk9IHRpbXJvdHYyX2dldF9jeWNsZXMsCisJLm1hc2sJCT0gQ0xPQ0tTT1VSQ0VfTUFTSygzMiksCisJLmZsYWdzCQk9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbXhzX2Nsb2Nrc291cmNlX2luaXQoc3RydWN0IGNsayAqdGltZXJfY2xrKQoreworCXVuc2lnbmVkIGludCBjID0gY2xrX2dldF9yYXRlKHRpbWVyX2Nsayk7CisKKwlpZiAodGltcm90X2lzX3YxKCkpIHsKKwkJY2xvY2tzb3VyY2VfbXhzLnJlYWQgPSB0aW1yb3R2MV9nZXRfY3ljbGVzOworCQljbG9ja3NvdXJjZV9teHMubWFzayA9IENMT0NLU09VUkNFX01BU0soMTYpOworCX0KKworCWNsb2Nrc291cmNlX3JlZ2lzdGVyX2h6KCZjbG9ja3NvdXJjZV9teHMsIGMpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgX19pbml0IG14c190aW1lcl9pbml0KHN0cnVjdCBjbGsgKnRpbWVyX2NsaywgaW50IGlycSkKK3sKKwljbGtfZW5hYmxlKHRpbWVyX2Nsayk7CisKKwkvKgorCSAqIEluaXRpYWxpemUgdGltZXJzIHRvIGEga25vd24gc3RhdGUKKwkgKi8KKwlteHNfcmVzZXRfYmxvY2sobXhzX3RpbXJvdF9iYXNlICsgSFdfVElNUk9UX1JPVENUUkwpOworCisJLyogZ2V0IHRpbXJvdCB2ZXJzaW9uICovCisJdGltcm90X21ham9yX3ZlcnNpb24gPSBfX3Jhd19yZWFkbChteHNfdGltcm90X2Jhc2UgKworCQkJCShjcHVfaXNfbXgyMygpID8gTVgyM19USU1ST1RfVkVSU0lPTl9PRkZTRVQgOgorCQkJCQkJTVgyOF9USU1ST1RfVkVSU0lPTl9PRkZTRVQpKTsKKwl0aW1yb3RfbWFqb3JfdmVyc2lvbiA+Pj0gQlBfVElNUk9UX01BSk9SX1ZFUlNJT047CisKKwkvKiBvbmUgZm9yIGNsb2NrX2V2ZW50ICovCisJX19yYXdfd3JpdGVsKCh0aW1yb3RfaXNfdjEoKSA/CisJCQlCVl9USU1ST1R2MV9USU1DVFJMbl9TRUxFQ1RfXzMyS0haX1hUQUwgOgorCQkJQlZfVElNUk9UdjJfVElNQ1RSTG5fU0VMRUNUX18zMktIWl9YVEFMKSB8CisJCQlCTV9USU1ST1RfVElNQ1RSTG5fVVBEQVRFIHwKKwkJCUJNX1RJTVJPVF9USU1DVFJMbl9JUlFfRU4sCisJCQlteHNfdGltcm90X2Jhc2UgKyBIV19USU1ST1RfVElNQ1RSTG4oMCkpOworCisJLyogYW5vdGhlciBmb3IgY2xvY2tzb3VyY2UgKi8KKwlfX3Jhd193cml0ZWwoKHRpbXJvdF9pc192MSgpID8KKwkJCUJWX1RJTVJPVHYxX1RJTUNUUkxuX1NFTEVDVF9fMzJLSFpfWFRBTCA6CisJCQlCVl9USU1ST1R2Ml9USU1DVFJMbl9TRUxFQ1RfXzMyS0haX1hUQUwpIHwKKwkJCUJNX1RJTVJPVF9USU1DVFJMbl9SRUxPQUQsCisJCQlteHNfdGltcm90X2Jhc2UgKyBIV19USU1ST1RfVElNQ1RSTG4oMSkpOworCisJLyogc2V0IGNsb2Nrc291cmNlIHRpbWVyIGZpeGVkIGNvdW50IHRvIHRoZSBtYXhpbXVtICovCisJaWYgKHRpbXJvdF9pc192MSgpKQorCQlfX3Jhd193cml0ZWwoMHhmZmZmLAorCQkJbXhzX3RpbXJvdF9iYXNlICsgSFdfVElNUk9UX1RJTUNPVU5UbigxKSk7CisJZWxzZQorCQlfX3Jhd193cml0ZWwoMHhmZmZmZmZmZiwKKwkJCW14c190aW1yb3RfYmFzZSArIEhXX1RJTVJPVF9GSVhFRF9DT1VOVG4oMSkpOworCisJLyogaW5pdCBhbmQgcmVnaXN0ZXIgdGhlIHRpbWVyIHRvIHRoZSBmcmFtZXdvcmsgKi8KKwlteHNfY2xvY2tzb3VyY2VfaW5pdCh0aW1lcl9jbGspOworCW14c19jbG9ja2V2ZW50X2luaXQodGltZXJfY2xrKTsKKworCS8qIE1ha2UgaXJxcyBoYXBwZW4gKi8KKwlzZXR1cF9pcnEoaXJxLCAmbXhzX3RpbWVyX2lycSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW5ldHgvdGltZS5jIGIvYXJjaC9hcm0vbWFjaC1uZXR4L3RpbWUuYwppbmRleCA4MjgwMWRiLi5mMTJmMjJkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW5ldHgvdGltZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtbmV0eC90aW1lLmMKQEAgLTExNCw3ICsxMTQsNiBAQAogCS5yYXRpbmcJCT0gMjAwLAogCS5yZWFkCQk9IG5ldHhfZ2V0X2N5Y2xlcywKIAkubWFzawkJPSBDTE9DS1NPVVJDRV9NQVNLKDMyKSwKLQkuc2hpZnQJCT0gMjAsCiAJLmZsYWdzCQk9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTLAogfTsKIApAQCAtMTUxLDkgKzE1MCw3IEBACiAJd3JpdGVsKE5FVFhfR1BJT19DT1VOVEVSX0NUUkxfUlVOLAogCQkJTkVUWF9HUElPX0NPVU5URVJfQ1RSTChUSU1FUl9DTE9DS1NPVVJDRSkpOwogCi0JY2xvY2tzb3VyY2VfbmV0eC5tdWx0ID0KLQkJY2xvY2tzb3VyY2VfaHoybXVsdChDTE9DS19USUNLX1JBVEUsIGNsb2Nrc291cmNlX25ldHguc2hpZnQpOwotCWNsb2Nrc291cmNlX3JlZ2lzdGVyKCZjbG9ja3NvdXJjZV9uZXR4KTsKKwljbG9ja3NvdXJjZV9yZWdpc3Rlcl9oeigmY2xvY2tzb3VyY2VfbmV0eCwgQ0xPQ0tfVElDS19SQVRFKTsKIAogCW5ldHhfY2xvY2tldmVudC5tdWx0ID0gZGl2X3NjKENMT0NLX1RJQ0tfUkFURSwgTlNFQ19QRVJfU0VDLAogCQkJbmV0eF9jbG9ja2V2ZW50LnNoaWZ0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbm9tYWRpay9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2Nsb2NrLmMKaW5kZXggODlmNzkzYS4uNDhhNTlmMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2Nsb2NrLmMKQEAgLTcsNyArNyw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KLSNpbmNsdWRlIDxhc20vY2xrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvY2xrZGV2Lmg+CiAjaW5jbHVkZSAiY2xvY2suaCIKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbnM5eHh4L3RpbWUtbnM5MzYwLmMgYi9hcmNoL2FybS9tYWNoLW5zOXh4eC90aW1lLW5zOTM2MC5jCmluZGV4IDc3MjgxMjYuLjljYTMyZjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbnM5eHh4L3RpbWUtbnM5MzYwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1uczl4eHgvdGltZS1uczkzNjAuYwpAQCAtMzUsNyArMzUsNiBAQAogCS5yYXRpbmcJPSAzMDAsCiAJLnJlYWQJPSBuczkzNjBfY2xvY2tzb3VyY2VfcmVhZCwKIAkubWFzawk9IENMT0NLU09VUkNFX01BU0soMzIpLAotCS5zaGlmdAk9IDIwLAogCS5mbGFncwk9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTLAogfTsKIApAQCAtMTQ4LDEwICsxNDcsNyBAQAogCiAJX19yYXdfd3JpdGVsKHRjLCBTWVNfVEMoVElNRVJfQ0xPQ0tTT1VSQ0UpKTsKIAotCW5zOTM2MF9jbG9ja3NvdXJjZS5tdWx0ID0gY2xvY2tzb3VyY2VfaHoybXVsdChuczkzNjBfY3B1Y2xvY2soKSwKLQkJCW5zOTM2MF9jbG9ja3NvdXJjZS5zaGlmdCk7Ci0KLQljbG9ja3NvdXJjZV9yZWdpc3RlcigmbnM5MzYwX2Nsb2Nrc291cmNlKTsKKwljbG9ja3NvdXJjZV9yZWdpc3Rlcl9oeigmbnM5MzYwX2Nsb2Nrc291cmNlLCBuczkzNjBfY3B1Y2xvY2soKSk7CiAKIAlsYXRjaCA9IFNIX0RJVihuczkzNjBfY3B1Y2xvY2soKSwgSFosIDApOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW51YzkzeC9jbG9jay5oIGIvYXJjaC9hcm0vbWFjaC1udWM5M3gvY2xvY2suaAppbmRleCAxOGU1MWJlLi40ZGUxZjFkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW51YzkzeC9jbG9jay5oCisrKyBiL2FyY2gvYXJtL21hY2gtbnVjOTN4L2Nsb2NrLmgKQEAgLTEwLDcgKzEwLDcgQEAKICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCiAgKi8KIAotI2luY2x1ZGUgPGFzbS9jbGtkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGtkZXYuaD4KIAogdm9pZCBudWM5M3hfY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGssIGludCBlbmFibGUpOwogdm9pZCBjbGtzX3JlZ2lzdGVyKHN0cnVjdCBjbGtfbG9va3VwICpjbGtzLCBzaXplX3QgbnVtKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtb21hcDEvS2NvbmZpZwppbmRleCA1ZjY0OTYzLi44ZDJmMmRhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9LY29uZmlnCkBAIC0xNTIsMjAgKzE1MiwxMSBAQAogY29uZmlnIE1BQ0hfQU1TX0RFTFRBCiAJYm9vbCAiQW1zdHJhZCBFMyAoRGVsdGEpIgogCWRlcGVuZHMgb24gQVJDSF9PTUFQMSAmJiBBUkNIX09NQVAxNVhYCisJc2VsZWN0IEZJUQogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIHRoZSBBbXN0cmFkIEUzIChjb2RlbmFtZSBEZWx0YSkgdmlkZW9waG9uZS4gU2F5IFkgaGVyZQogCSAgaWYgeW91IGhhdmUgc3VjaCBhIGRldmljZS4KIAotY29uZmlnIEFNU19ERUxUQV9GSVEKLQlib29sICJGYXN0IEludGVycnVwdCBSZXF1ZXN0IChGSVEpIHN1cHBvcnQgZm9yIHRoZSBFMyIKLQlkZXBlbmRzIG9uIE1BQ0hfQU1TX0RFTFRBCi0Jc2VsZWN0IEZJUQotCWhlbHAKLQkgIFByb3ZpZGUgYSBGSVEgaGFuZGxlciBmb3IgdGhlIEUzLgotCSAgVGhpcyBhbGxvd3MgZm9yIGZhc3QgaGFuZGxpbmcgb2YgaW50ZXJydXB0cyBnZW5lcmF0ZWQKLQkgIGJ5IHRoZSBjbG9jayBsaW5lIG9mIHRoZSBFMyBtYWlsYm9hcmQgKG9yIGEgUFMvMiBrZXlib2FyZCkKLQkgIGNvbm5lY3RlZCB0byB0aGUgR1BJTyBiYXNlZCBleHRlcm5hbCBrZXlib2FyZCBwb3J0LgotCiBjb25maWcgTUFDSF9PTUFQX0dFTkVSSUMKIAlib29sICJHZW5lcmljIE9NQVAgYm9hcmQiCiAJZGVwZW5kcyBvbiBBUkNIX09NQVAxICYmIChBUkNIX09NQVAxNVhYIHx8IEFSQ0hfT01BUDE2WFgpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9NYWtlZmlsZQppbmRleCA5YTMwNGQ4Li42ZWUxOTUwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvTWFrZWZpbGUKQEAgLTMsNyArMyw3IEBACiAjCiAKICMgQ29tbW9uIHN1cHBvcnQKLW9iai15IDo9IGlvLm8gaWQubyBzcmFtLm8gaXJxLm8gbXV4Lm8gZmxhc2gubyBzZXJpYWwubyBkZXZpY2VzLm8KK29iai15IDo9IGlvLm8gaWQubyBzcmFtLm8gaXJxLm8gbXV4Lm8gZmxhc2gubyBzZXJpYWwubyBkZXZpY2VzLm8gZG1hLm8KIG9iai15ICs9IGNsb2NrLm8gY2xvY2tfZGF0YS5vIG9wcF9kYXRhLm8KIAogb2JqLSQoQ09ORklHX09NQVBfTUNCU1ApICs9IG1jYnNwLm8KQEAgLTM5LDggKzM5LDggQEAKIG9iai0kKENPTkZJR19NQUNIX09NQVBfUEFMTVo3MSkJCSs9IGJvYXJkLXBhbG16NzEubwogb2JqLSQoQ09ORklHX01BQ0hfT01BUF9QQUxNVFQpCQkrPSBib2FyZC1wYWxtdHQubwogb2JqLSQoQ09ORklHX01BQ0hfTk9LSUE3NzApCQkrPSBib2FyZC1ub2tpYTc3MC5vCi1vYmotJChDT05GSUdfTUFDSF9BTVNfREVMVEEpCQkrPSBib2FyZC1hbXMtZGVsdGEubwotb2JqLSQoQ09ORklHX0FNU19ERUxUQV9GSVEpCQkrPSBhbXMtZGVsdGEtZmlxLm8gYW1zLWRlbHRhLWZpcS1oYW5kbGVyLm8KK29iai0kKENPTkZJR19NQUNIX0FNU19ERUxUQSkJCSs9IGJvYXJkLWFtcy1kZWx0YS5vIGFtcy1kZWx0YS1maXEubyBcCisJCQkJCSAgIGFtcy1kZWx0YS1maXEtaGFuZGxlci5vCiBvYmotJChDT05GSUdfTUFDSF9TWDEpCQkJKz0gYm9hcmQtc3gxLm8gYm9hcmQtc3gxLW1tYy5vCiBvYmotJChDT05GSUdfTUFDSF9IRVJBTEQpCQkrPSBib2FyZC1odGNoZXJhbGQubwogCkBAIC00OSw2ICs0OSwxMiBAQAogb2JqLSQoQ09ORklHX01BQ0hfT01BUF9JTk5PVkFUT1IpCSs9IGZwZ2EubwogZW5kaWYKIAorIyBHUElPCitvYmotJChDT05GSUdfQVJDSF9PTUFQNzMwKQkJKz0gZ3Bpbzd4eC5vCitvYmotJChDT05GSUdfQVJDSF9PTUFQODUwKQkJKz0gZ3Bpbzd4eC5vCitvYmotJChDT05GSUdfQVJDSF9PTUFQMTVYWCkJCSs9IGdwaW8xNXh4Lm8KK29iai0kKENPTkZJR19BUkNIX09NQVAxNlhYKQkJKz0gZ3BpbzE2eHgubworCiAjIExFRHMgc3VwcG9ydAogbGVkLSQoQ09ORklHX01BQ0hfT01BUF9IMikJCSs9IGxlZHMtaDJwMi1kZWJ1Zy5vCiBsZWQtJChDT05GSUdfTUFDSF9PTUFQX0gzKQkJKz0gbGVkcy1oMnAyLWRlYnVnLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtYW1zLWRlbHRhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWFtcy1kZWx0YS5jCmluZGV4IDFkNDE2M2IuLmJkMDQ5NWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtYW1zLWRlbHRhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1hbXMtZGVsdGEuYwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KIAorI2luY2x1ZGUgPHBsYXQvaW8uaD4KICNpbmNsdWRlIDxwbGF0L2JvYXJkLWFtcy1kZWx0YS5oPgogI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgogI2luY2x1ZGUgPHBsYXQva2V5cGFkLmg+CkBAIC00Miw4NCArNDMsODIgQEAKIHN0YXRpYyB1OCBhbXNfZGVsdGFfbGF0Y2gxX3JlZzsKIHN0YXRpYyB1MTYgYW1zX2RlbHRhX2xhdGNoMl9yZWc7CiAKLXN0YXRpYyBpbnQgYW1zX2RlbHRhX2tleW1hcFtdID0geworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBhbXNfZGVsdGFfa2V5bWFwW10gPSB7CiAJS0VZKDAsIDAsIEtFWV9GMSksCQkvKiBBZHZlcnQgICAgKi8KIAotCUtFWSgzLCAwLCBLRVlfQ09GRkVFKSwJCS8qIEdhbWVzICAgICAqLwotCUtFWSgyLCAwLCBLRVlfUVVFU1RJT04pLAkvKiBEaXJlY3RvcnkgKi8KLQlLRVkoMywgMiwgS0VZX0NPTk5FQ1QpLAkJLyogSW50ZXJuZXQgICovCi0JS0VZKDIsIDEsIEtFWV9TSE9QKSwJCS8qIFNlcnZpY2VzICAqLworCUtFWSgwLCAzLCBLRVlfQ09GRkVFKSwJCS8qIEdhbWVzICAgICAqLworCUtFWSgwLCAyLCBLRVlfUVVFU1RJT04pLAkvKiBEaXJlY3RvcnkgKi8KKwlLRVkoMiwgMywgS0VZX0NPTk5FQ1QpLAkJLyogSW50ZXJuZXQgICovCisJS0VZKDEsIDIsIEtFWV9TSE9QKSwJCS8qIFNlcnZpY2VzICAqLwogCUtFWSgxLCAxLCBLRVlfUEhPTkUpLAkJLyogVm9pY2VNYWlsICovCiAKLQlLRVkoMSwgMCwgS0VZX0RFTEVURSksCQkvKiBEZWxldGUgICAgKi8KKwlLRVkoMCwgMSwgS0VZX0RFTEVURSksCQkvKiBEZWxldGUgICAgKi8KIAlLRVkoMiwgMiwgS0VZX1BMQVkpLAkJLyogUGxheSAgICAgICovCi0JS0VZKDAsIDEsIEtFWV9QQUdFVVApLAkJLyogVXAgICAgICAgICovCi0JS0VZKDMsIDEsIEtFWV9QQUdFRE9XTiksCS8qIERvd24gICAgICAqLwotCUtFWSgwLCAyLCBLRVlfRU1BSUwpLAkJLyogUmVhZEVtYWlsICovCi0JS0VZKDEsIDIsIEtFWV9TVE9QKSwJCS8qIFN0b3AgICAgICAqLworCUtFWSgxLCAwLCBLRVlfUEFHRVVQKSwJCS8qIFVwICAgICAgICAqLworCUtFWSgxLCAzLCBLRVlfUEFHRURPV04pLAkvKiBEb3duICAgICAgKi8KKwlLRVkoMiwgMCwgS0VZX0VNQUlMKSwJCS8qIFJlYWRFbWFpbCAqLworCUtFWSgyLCAxLCBLRVlfU1RPUCksCQkvKiBTdG9wICAgICAgKi8KIAogCS8qIE51bWVyaWMga2V5cGFkIHBvcnRpb24gKi8KLQlLRVkoNywgMCwgS0VZX0tQMSksCi0JS0VZKDYsIDAsIEtFWV9LUDIpLAotCUtFWSg1LCAwLCBLRVlfS1AzKSwKLQlLRVkoNywgMSwgS0VZX0tQNCksCi0JS0VZKDYsIDEsIEtFWV9LUDUpLAotCUtFWSg1LCAxLCBLRVlfS1A2KSwKLQlLRVkoNywgMiwgS0VZX0tQNyksCi0JS0VZKDYsIDIsIEtFWV9LUDgpLAotCUtFWSg1LCAyLCBLRVlfS1A5KSwKLQlLRVkoNiwgMywgS0VZX0tQMCksCi0JS0VZKDcsIDMsIEtFWV9LUEFTVEVSSVNLKSwKLQlLRVkoNSwgMywgS0VZX0tQRE9UKSwJCS8qICMga2V5ICAgICAqLwotCUtFWSgyLCA3LCBLRVlfTlVNTE9DSyksCQkvKiBNdXRlICAgICAgKi8KLQlLRVkoMSwgNywgS0VZX0tQTUlOVVMpLAkJLyogUmVjYWxsICAgICovCi0JS0VZKDEsIDYsIEtFWV9LUFBMVVMpLAkJLyogUmVkaWFsICAgICovCi0JS0VZKDYsIDcsIEtFWV9LUFNMQVNIKSwJCS8qIEhhbmRzZnJlZSAqLwotCUtFWSgwLCA2LCBLRVlfRU5URVIpLAkJLyogVmlkZW8gICAgICovCisJS0VZKDAsIDcsIEtFWV9LUDEpLAorCUtFWSgwLCA2LCBLRVlfS1AyKSwKKwlLRVkoMCwgNSwgS0VZX0tQMyksCisJS0VZKDEsIDcsIEtFWV9LUDQpLAorCUtFWSgxLCA2LCBLRVlfS1A1KSwKKwlLRVkoMSwgNSwgS0VZX0tQNiksCisJS0VZKDIsIDcsIEtFWV9LUDcpLAorCUtFWSgyLCA2LCBLRVlfS1A4KSwKKwlLRVkoMiwgNSwgS0VZX0tQOSksCisJS0VZKDMsIDYsIEtFWV9LUDApLAorCUtFWSgzLCA3LCBLRVlfS1BBU1RFUklTSyksCisJS0VZKDMsIDUsIEtFWV9LUERPVCksCQkvKiAjIGtleSAgICAgKi8KKwlLRVkoNywgMiwgS0VZX05VTUxPQ0spLAkJLyogTXV0ZSAgICAgICovCisJS0VZKDcsIDEsIEtFWV9LUE1JTlVTKSwJCS8qIFJlY2FsbCAgICAqLworCUtFWSg2LCAxLCBLRVlfS1BQTFVTKSwJCS8qIFJlZGlhbCAgICAqLworCUtFWSg3LCA2LCBLRVlfS1BTTEFTSCksCQkvKiBIYW5kc2ZyZWUgKi8KKwlLRVkoNiwgMCwgS0VZX0VOVEVSKSwJCS8qIFZpZGVvICAgICAqLwogCi0JS0VZKDQsIDcsIEtFWV9DQU1FUkEpLAkJLyogUGhvdG8gICAgICovCisJS0VZKDcsIDQsIEtFWV9DQU1FUkEpLAkJLyogUGhvdG8gICAgICovCiAKLQlLRVkoNCwgMCwgS0VZX0YyKSwJCS8qIEhvbWUgICAgICAqLwotCUtFWSg0LCAxLCBLRVlfRjMpLAkJLyogT2ZmaWNlICAgICovCi0JS0VZKDQsIDIsIEtFWV9GNCksCQkvKiBNb2JpbGUgICAgKi8KKwlLRVkoMCwgNCwgS0VZX0YyKSwJCS8qIEhvbWUgICAgICAqLworCUtFWSgxLCA0LCBLRVlfRjMpLAkJLyogT2ZmaWNlICAgICovCisJS0VZKDIsIDQsIEtFWV9GNCksCQkvKiBNb2JpbGUgICAgKi8KIAlLRVkoNywgNywgS0VZX0Y1KSwJCS8qIFNNUyAgICAgICAqLwotCUtFWSg1LCA3LCBLRVlfRjYpLAkJLyogRW1haWwgICAgICovCisJS0VZKDcsIDUsIEtFWV9GNiksCQkvKiBFbWFpbCAgICAgKi8KIAogCS8qIFFXRVJUWSBwb3J0aW9uIG9mIGtleXBhZCAqLwotCUtFWSg0LCAzLCBLRVlfUSksCisJS0VZKDMsIDQsIEtFWV9RKSwKIAlLRVkoMywgMywgS0VZX1cpLAotCUtFWSgyLCAzLCBLRVlfRSksCi0JS0VZKDEsIDMsIEtFWV9SKSwKLQlLRVkoMCwgMywgS0VZX1QpLAotCUtFWSg3LCA0LCBLRVlfWSksCi0JS0VZKDYsIDQsIEtFWV9VKSwKLQlLRVkoNSwgNCwgS0VZX0kpLAorCUtFWSgzLCAyLCBLRVlfRSksCisJS0VZKDMsIDEsIEtFWV9SKSwKKwlLRVkoMywgMCwgS0VZX1QpLAorCUtFWSg0LCA3LCBLRVlfWSksCisJS0VZKDQsIDYsIEtFWV9VKSwKKwlLRVkoNCwgNSwgS0VZX0kpLAogCUtFWSg0LCA0LCBLRVlfTyksCi0JS0VZKDMsIDQsIEtFWV9QKSwKKwlLRVkoNCwgMywgS0VZX1ApLAogCi0JS0VZKDIsIDQsIEtFWV9BKSwKLQlLRVkoMSwgNCwgS0VZX1MpLAotCUtFWSgwLCA0LCBLRVlfRCksCi0JS0VZKDcsIDUsIEtFWV9GKSwKLQlLRVkoNiwgNSwgS0VZX0cpLAorCUtFWSg0LCAyLCBLRVlfQSksCisJS0VZKDQsIDEsIEtFWV9TKSwKKwlLRVkoNCwgMCwgS0VZX0QpLAorCUtFWSg1LCA3LCBLRVlfRiksCisJS0VZKDUsIDYsIEtFWV9HKSwKIAlLRVkoNSwgNSwgS0VZX0gpLAotCUtFWSg0LCA1LCBLRVlfSiksCi0JS0VZKDMsIDUsIEtFWV9LKSwKLQlLRVkoMiwgNSwgS0VZX0wpLAorCUtFWSg1LCA0LCBLRVlfSiksCisJS0VZKDUsIDMsIEtFWV9LKSwKKwlLRVkoNSwgMiwgS0VZX0wpLAogCi0JS0VZKDEsIDUsIEtFWV9aKSwKLQlLRVkoMCwgNSwgS0VZX1gpLAotCUtFWSg3LCA2LCBLRVlfQyksCisJS0VZKDUsIDEsIEtFWV9aKSwKKwlLRVkoNSwgMCwgS0VZX1gpLAorCUtFWSg2LCA3LCBLRVlfQyksCiAJS0VZKDYsIDYsIEtFWV9WKSwKLQlLRVkoNSwgNiwgS0VZX0IpLAotCUtFWSg0LCA2LCBLRVlfTiksCi0JS0VZKDMsIDYsIEtFWV9NKSwKLQlLRVkoMiwgNiwgS0VZX1NQQUNFKSwKKwlLRVkoNiwgNSwgS0VZX0IpLAorCUtFWSg2LCA0LCBLRVlfTiksCisJS0VZKDYsIDMsIEtFWV9NKSwKKwlLRVkoNiwgMiwgS0VZX1NQQUNFKSwKIAotCUtFWSgwLCA3LCBLRVlfTEVGVFNISUZUKSwJLyogVm9sIHVwICAgICovCi0JS0VZKDMsIDcsIEtFWV9MRUZUQ1RSTCksCS8qIFZvbCBkb3duICAqLwotCi0JMAorCUtFWSg3LCAwLCBLRVlfTEVGVFNISUZUKSwJLyogVm9sIHVwICAgICovCisJS0VZKDcsIDMsIEtFWV9MRUZUQ1RSTCksCS8qIFZvbCBkb3duICAqLwogfTsKIAogdm9pZCBhbXNfZGVsdGFfbGF0Y2gxX3dyaXRlKHU4IG1hc2ssIHU4IHZhbHVlKQpAQCAtMTQwLDcgKzEzOSw2IEBACiB7CiAJb21hcDFfaW5pdF9jb21tb25faHcoKTsKIAlvbWFwX2luaXRfaXJxKCk7Ci0Jb21hcF9ncGlvX2luaXQoKTsKIH0KIAogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBhbXNfZGVsdGFfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CkBAIC0xODksMTEgKzE4NywxNSBAQAogCX0sCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG1hdHJpeF9rZXltYXBfZGF0YSBhbXNfZGVsdGFfa2V5bWFwX2RhdGEgPSB7CisJLmtleW1hcAkJPSBhbXNfZGVsdGFfa2V5bWFwLAorCS5rZXltYXBfc2l6ZQk9IEFSUkFZX1NJWkUoYW1zX2RlbHRhX2tleW1hcCksCit9OworCiBzdGF0aWMgc3RydWN0IG9tYXBfa3BfcGxhdGZvcm1fZGF0YSBhbXNfZGVsdGFfa3BfZGF0YSA9IHsKIAkucm93cwkJPSA4LAogCS5jb2xzCQk9IDgsCi0JLmtleW1hcCAJPSBhbXNfZGVsdGFfa2V5bWFwLAotCS5rZXltYXBzaXplCT0gQVJSQVlfU0laRShhbXNfZGVsdGFfa2V5bWFwKSwKKwkua2V5bWFwX2RhdGEJPSAmYW1zX2RlbHRhX2tleW1hcF9kYXRhLAogCS5kZWxheQkJPSA5LAogfTsKIApAQCAtMzA3LDE2ICszMDksMTQgQEAKICNlbmRpZgogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGFtc19kZWx0YV9kZXZpY2VzLCBBUlJBWV9TSVpFKGFtc19kZWx0YV9kZXZpY2VzKSk7CiAKLSNpZmRlZiBDT05GSUdfQU1TX0RFTFRBX0ZJUQogCWFtc19kZWx0YV9pbml0X2ZpcSgpOwotI2VuZGlmCiAKIAlvbWFwX3dyaXRldyhvbWFwX3JlYWR3KEFSTV9SU1RDVDEpIHwgMHgwMDA0LCBBUk1fUlNUQ1QxKTsKIH0KIAogc3RhdGljIHN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCBhbXNfZGVsdGFfbW9kZW1fcG9ydHNbXSA9IHsKIAl7Ci0JCS5tZW1iYXNlCT0gKHZvaWQgKikgQU1TX0RFTFRBX01PREVNX1ZJUlQsCisJCS5tZW1iYXNlCT0gSU9NRU0oQU1TX0RFTFRBX01PREVNX1ZJUlQpLAogCQkubWFwYmFzZQk9IEFNU19ERUxUQV9NT0RFTV9QSFlTLAogCQkuaXJxCQk9IC1FSU5WQUwsIC8qIGNoYW5nZWQgbGF0ZXIgKi8KIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLApAQCAtMzQwLDYgKzM0MCw5IEBACiB7CiAJaW50IGVycjsKIAorCWlmICghbWFjaGluZV9pc19hbXNfZGVsdGEoKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAlvbWFwX2NmZ19yZWcoTTE0XzE1MTBfR1BJTzIpOwogCWFtc19kZWx0YV9tb2RlbV9wb3J0c1swXS5pcnEgPQogCQkJZ3Bpb190b19pcnEoQU1TX0RFTFRBX0dQSU9fUElOX01PREVNX0lSUSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWZzYW1wbGUuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtZnNhbXBsZS5jCmluZGV4IDE0OWZkZDMuLjBlZmI5ZGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtZnNhbXBsZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtZnNhbXBsZS5jCkBAIC02OSwzNiArNjksMzUgQEAKICNkZWZpbmUgZnNhbXBsZV9jcGxkX2NsZWFyKGJpdCkgXAogICAgIGZzYW1wbGVfY3BsZF93cml0ZSgweGYwIHwgKChiaXQpICYgMTUpLCBGU0FNUExFX0NQTERfU0VUX0NMUikKIAotc3RhdGljIGludCBmc2FtcGxlX2tleW1hcFtdID0gewotCUtFWSgwLDAsS0VZX1VQKSwKLQlLRVkoMCwxLEtFWV9SSUdIVCksCi0JS0VZKDAsMixLRVlfTEVGVCksCi0JS0VZKDAsMyxLRVlfRE9XTiksCi0JS0VZKDAsNCxLRVlfRU5URVIpLAotCUtFWSgxLDAsS0VZX0YxMCksCi0JS0VZKDEsMSxLRVlfU0VORCksCi0JS0VZKDEsMixLRVlfRU5EKSwKLQlLRVkoMSwzLEtFWV9WT0xVTUVET1dOKSwKLQlLRVkoMSw0LEtFWV9WT0xVTUVVUCksCi0JS0VZKDEsNSxLRVlfUkVDT1JEKSwKLQlLRVkoMiwwLEtFWV9GOSksCi0JS0VZKDIsMSxLRVlfMyksCi0JS0VZKDIsMixLRVlfNiksCi0JS0VZKDIsMyxLRVlfOSksCi0JS0VZKDIsNCxLRVlfS1BET1QpLAotCUtFWSgzLDAsS0VZX0JBQ0spLAotCUtFWSgzLDEsS0VZXzIpLAotCUtFWSgzLDIsS0VZXzUpLAotCUtFWSgzLDMsS0VZXzgpLAotCUtFWSgzLDQsS0VZXzApLAotCUtFWSgzLDUsS0VZX0tQU0xBU0gpLAotCUtFWSg0LDAsS0VZX0hPTUUpLAotCUtFWSg0LDEsS0VZXzEpLAotCUtFWSg0LDIsS0VZXzQpLAotCUtFWSg0LDMsS0VZXzcpLAotCUtFWSg0LDQsS0VZX0tQQVNURVJJU0spLAotCUtFWSg0LDUsS0VZX1BPV0VSKSwKLQkwCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGZzYW1wbGVfa2V5bWFwW10gPSB7CisJS0VZKDAsIDAsIEtFWV9VUCksCisJS0VZKDEsIDAsIEtFWV9SSUdIVCksCisJS0VZKDIsIDAsIEtFWV9MRUZUKSwKKwlLRVkoMywgMCwgS0VZX0RPV04pLAorCUtFWSg0LCAwLCBLRVlfRU5URVIpLAorCUtFWSgwLCAxLCBLRVlfRjEwKSwKKwlLRVkoMSwgMSwgS0VZX1NFTkQpLAorCUtFWSgyLCAxLCBLRVlfRU5EKSwKKwlLRVkoMywgMSwgS0VZX1ZPTFVNRURPV04pLAorCUtFWSg0LCAxLCBLRVlfVk9MVU1FVVApLAorCUtFWSg1LCAxLCBLRVlfUkVDT1JEKSwKKwlLRVkoMCwgMiwgS0VZX0Y5KSwKKwlLRVkoMSwgMiwgS0VZXzMpLAorCUtFWSgyLCAyLCBLRVlfNiksCisJS0VZKDMsIDIsIEtFWV85KSwKKwlLRVkoNCwgMiwgS0VZX0tQRE9UKSwKKwlLRVkoMCwgMywgS0VZX0JBQ0spLAorCUtFWSgxLCAzLCBLRVlfMiksCisJS0VZKDIsIDMsIEtFWV81KSwKKwlLRVkoMywgMywgS0VZXzgpLAorCUtFWSg0LCAzLCBLRVlfMCksCisJS0VZKDUsIDMsIEtFWV9LUFNMQVNIKSwKKwlLRVkoMCwgNCwgS0VZX0hPTUUpLAorCUtFWSgxLCA0LCBLRVlfMSksCisJS0VZKDIsIDQsIEtFWV80KSwKKwlLRVkoMywgNCwgS0VZXzcpLAorCUtFWSg0LCA0LCBLRVlfS1BBU1RFUklTSyksCisJS0VZKDUsIDQsIEtFWV9QT1dFUiksCiB9OwogCiBzdGF0aWMgc3RydWN0IHNtYzkxeF9wbGF0ZGF0YSBzbWM5MXhfaW5mbyA9IHsKQEAgLTEyMCw2ICsxMTksMTUgQEAKIAl9LAogfTsKIAorc3RhdGljIHZvaWQgX19pbml0IGZzYW1wbGVfaW5pdF9zbWM5MXgodm9pZCkKK3sKKwlmcGdhX3dyaXRlKDEsIEgyUDJfREJHX0ZQR0FfTEFOX1JFU0VUKTsKKwltZGVsYXkoNTApOworCWZwZ2Ffd3JpdGUoZnBnYV9yZWFkKEgyUDJfREJHX0ZQR0FfTEFOX1JFU0VUKSAmIH4xLAorCQkgICBIMlAyX0RCR19GUEdBX0xBTl9SRVNFVCk7CisJbWRlbGF5KDUwKTsKK30KKwogc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIG5vcl9wYXJ0aXRpb25zW10gPSB7CiAJLyogYm9vdGxvYWRlciAoVS1Cb290LCBldGMpIGluIGZpcnN0IHNlY3RvciAqLwogCXsKQEAgLTI0NCwxMSArMjUyLDE1IEBACiAJfSwKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWF0cml4X2tleW1hcF9kYXRhIGZzYW1wbGVfa2V5bWFwX2RhdGEgPSB7CisJLmtleW1hcAkJPSBmc2FtcGxlX2tleW1hcCwKKwkua2V5bWFwX3NpemUJPSBBUlJBWV9TSVpFKGZzYW1wbGVfa2V5bWFwKSwKK307CisKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9rcF9wbGF0Zm9ybV9kYXRhIGtwX2RhdGEgPSB7CiAJLnJvd3MJCT0gOCwKIAkuY29scwkJPSA4LAotCS5rZXltYXAJCT0gZnNhbXBsZV9rZXltYXAsCi0JLmtleW1hcHNpemUJPSBBUlJBWV9TSVpFKGZzYW1wbGVfa2V5bWFwKSwKKwkua2V5bWFwX2RhdGEJPSAmZnNhbXBsZV9rZXltYXBfZGF0YSwKIAkuZGVsYXkJCT0gNCwKIH07CiAKQEAgLTI4NSw2ICsyOTcsOCBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9mc2FtcGxlX2luaXQodm9pZCkKIHsKKwlmc2FtcGxlX2luaXRfc21jOTF4KCk7CisKIAlpZiAoZ3Bpb19yZXF1ZXN0KEZTQU1QTEVfTkFORF9SQl9HUElPX1BJTiwgIk5BTkQgcmVhZHkiKSA8IDApCiAJCUJVRygpOwogCWdwaW9fZGlyZWN0aW9uX2lucHV0KEZTQU1QTEVfTkFORF9SQl9HUElPX1BJTik7CkBAIC0zMTIsMjEgKzMyNiwxMCBAQAogCW9tYXBfcmVnaXN0ZXJfaTJjX2J1cygxLCAxMDAsIE5VTEwsIDApOwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgZnNhbXBsZV9pbml0X3NtYzkxeCh2b2lkKQotewotCWZwZ2Ffd3JpdGUoMSwgSDJQMl9EQkdfRlBHQV9MQU5fUkVTRVQpOwotCW1kZWxheSg1MCk7Ci0JZnBnYV93cml0ZShmcGdhX3JlYWQoSDJQMl9EQkdfRlBHQV9MQU5fUkVTRVQpICYgfjEsCi0JCSAgIEgyUDJfREJHX0ZQR0FfTEFOX1JFU0VUKTsKLQltZGVsYXkoNTApOwotfQotCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9mc2FtcGxlX2luaXRfaXJxKHZvaWQpCiB7CiAJb21hcDFfaW5pdF9jb21tb25faHcoKTsKIAlvbWFwX2luaXRfaXJxKCk7Ci0Jb21hcF9ncGlvX2luaXQoKTsKLQlmc2FtcGxlX2luaXRfc21jOTF4KCk7CiB9CiAKIC8qIE9ubHkgRlBHQSBuZWVkcyB0byBiZSBtYXBwZWQgaGVyZS4gQWxsIG90aGVycyBhcmUgZG9uZSB3aXRoIGlvcmVtYXAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDIuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDIuYwppbmRleCAxOTdhZGI0Li4yOGI4NGFhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMi5jCkBAIC01Miw0MyArNTIsNDIgQEAKIC8qIEF0IE9NQVAxNjEwIElubm92YXRvciB0aGUgRXRoZXJuZXQgaXMgZGlyZWN0bHkgY29ubmVjdGVkIHRvIENTMSAqLwogI2RlZmluZSBPTUFQMTYxMF9FVEhSX1NUQVJUCQkweDA0MDAwMzAwCiAKLXN0YXRpYyBpbnQgaDJfa2V5bWFwW10gPSB7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGgyX2tleW1hcFtdID0gewogCUtFWSgwLCAwLCBLRVlfTEVGVCksCi0JS0VZKDAsIDEsIEtFWV9SSUdIVCksCi0JS0VZKDAsIDIsIEtFWV8zKSwKLQlLRVkoMCwgMywgS0VZX0YxMCksCi0JS0VZKDAsIDQsIEtFWV9GNSksCi0JS0VZKDAsIDUsIEtFWV85KSwKLQlLRVkoMSwgMCwgS0VZX0RPV04pLAorCUtFWSgxLCAwLCBLRVlfUklHSFQpLAorCUtFWSgyLCAwLCBLRVlfMyksCisJS0VZKDMsIDAsIEtFWV9GMTApLAorCUtFWSg0LCAwLCBLRVlfRjUpLAorCUtFWSg1LCAwLCBLRVlfOSksCisJS0VZKDAsIDEsIEtFWV9ET1dOKSwKIAlLRVkoMSwgMSwgS0VZX1VQKSwKLQlLRVkoMSwgMiwgS0VZXzIpLAotCUtFWSgxLCAzLCBLRVlfRjkpLAotCUtFWSgxLCA0LCBLRVlfRjcpLAotCUtFWSgxLCA1LCBLRVlfMCksCi0JS0VZKDIsIDAsIEtFWV9FTlRFUiksCi0JS0VZKDIsIDEsIEtFWV82KSwKKwlLRVkoMiwgMSwgS0VZXzIpLAorCUtFWSgzLCAxLCBLRVlfRjkpLAorCUtFWSg0LCAxLCBLRVlfRjcpLAorCUtFWSg1LCAxLCBLRVlfMCksCisJS0VZKDAsIDIsIEtFWV9FTlRFUiksCisJS0VZKDEsIDIsIEtFWV82KSwKIAlLRVkoMiwgMiwgS0VZXzEpLAotCUtFWSgyLCAzLCBLRVlfRjIpLAotCUtFWSgyLCA0LCBLRVlfRjYpLAotCUtFWSgyLCA1LCBLRVlfSE9NRSksCi0JS0VZKDMsIDAsIEtFWV84KSwKLQlLRVkoMywgMSwgS0VZXzUpLAotCUtFWSgzLCAyLCBLRVlfRjEyKSwKKwlLRVkoMywgMiwgS0VZX0YyKSwKKwlLRVkoNCwgMiwgS0VZX0Y2KSwKKwlLRVkoNSwgMiwgS0VZX0hPTUUpLAorCUtFWSgwLCAzLCBLRVlfOCksCisJS0VZKDEsIDMsIEtFWV81KSwKKwlLRVkoMiwgMywgS0VZX0YxMiksCiAJS0VZKDMsIDMsIEtFWV9GMyksCi0JS0VZKDMsIDQsIEtFWV9GOCksCi0JS0VZKDMsIDUsIEtFWV9FTkQpLAotCUtFWSg0LCAwLCBLRVlfNyksCi0JS0VZKDQsIDEsIEtFWV80KSwKLQlLRVkoNCwgMiwgS0VZX0YxMSksCi0JS0VZKDQsIDMsIEtFWV9GMSksCisJS0VZKDQsIDMsIEtFWV9GOCksCisJS0VZKDUsIDMsIEtFWV9FTkQpLAorCUtFWSgwLCA0LCBLRVlfNyksCisJS0VZKDEsIDQsIEtFWV80KSwKKwlLRVkoMiwgNCwgS0VZX0YxMSksCisJS0VZKDMsIDQsIEtFWV9GMSksCiAJS0VZKDQsIDQsIEtFWV9GNCksCi0JS0VZKDQsIDUsIEtFWV9FU0MpLAotCUtFWSg1LCAwLCBLRVlfRjEzKSwKLQlLRVkoNSwgMSwgS0VZX0YxNCksCi0JS0VZKDUsIDIsIEtFWV9GMTUpLAotCUtFWSg1LCAzLCBLRVlfRjE2KSwKLQlLRVkoNSwgNCwgS0VZX1NMRUVQKSwKLQkwCisJS0VZKDUsIDQsIEtFWV9FU0MpLAorCUtFWSgwLCA1LCBLRVlfRjEzKSwKKwlLRVkoMSwgNSwgS0VZX0YxNCksCisJS0VZKDIsIDUsIEtFWV9GMTUpLAorCUtFWSgzLCA1LCBLRVlfRjE2KSwKKwlLRVkoNCwgNSwgS0VZX1NMRUVQKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBoMl9ub3JfcGFydGl0aW9uc1tdID0gewpAQCAtMjcwLDE0ICsyNjksMTggQEAKIAl9LAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBtYXRyaXhfa2V5bWFwX2RhdGEgaDJfa2V5bWFwX2RhdGEgPSB7CisJLmtleW1hcAkJPSBoMl9rZXltYXAsCisJLmtleW1hcF9zaXplCT0gQVJSQVlfU0laRShoMl9rZXltYXApLAorfTsKKwogc3RhdGljIHN0cnVjdCBvbWFwX2twX3BsYXRmb3JtX2RhdGEgaDJfa3BfZGF0YSA9IHsKIAkucm93cwkJPSA4LAogCS5jb2xzCQk9IDgsCi0JLmtleW1hcAkJPSBoMl9rZXltYXAsCi0JLmtleW1hcHNpemUJPSBBUlJBWV9TSVpFKGgyX2tleW1hcCksCi0JLnJlcAkJPSAxLAorCS5rZXltYXBfZGF0YQk9ICZoMl9rZXltYXBfZGF0YSwKKwkucmVwCQk9IHRydWUsCiAJLmRlbGF5CQk9IDksCi0JLmRib3VuY2UJPSAxLAorCS5kYm91bmNlCT0gdHJ1ZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGgyX2twX2RldmljZSA9IHsKQEAgLTM3NCw4ICszNzcsNiBAQAogewogCW9tYXAxX2luaXRfY29tbW9uX2h3KCk7CiAJb21hcF9pbml0X2lycSgpOwotCW9tYXBfZ3Bpb19pbml0KCk7Ci0JaDJfaW5pdF9zbWM5MXgoKTsKIH0KIAogc3RhdGljIHN0cnVjdCBvbWFwX3VzYl9jb25maWcgaDJfdXNiX2NvbmZpZyBfX2luaXRkYXRhID0gewpAQCAtNDAzLDYgKzQwNCw4IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBoMl9pbml0KHZvaWQpCiB7CisJaDJfaW5pdF9zbWM5MXgoKTsKKwogCS8qIEhlcmUgd2UgYXNzdW1lIHRoZSBOT1IgYm9vdCBjb25maWc6ICBOT1Igb24gQ1MzIChwb3NzaWJseSBzd2FwcGVkCiAJICogdG8gYWRkcmVzcyAwIGJ5IGEgZGlwIHN3aXRjaCksIE5BTkQgb24gQ1MyQi4gIFRoZSBOQU5EIGRyaXZlciB3aWxsCiAJICogbm90aWNlIHdoZXRoZXIgYSBOQU5EIGNoaXAgaXMgZW5hYmxlZCBhdCBwcm9iZSB0aW1lLgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMy5jCmluZGV4IDkxMjZlM2UuLmRiYzhiOGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgzLmMKQEAgLTU2LDQzICs1Niw0MiBAQAogCiAjZGVmaW5lIEgzX1RTX0dQSU8JNDgKIAotc3RhdGljIGludCBoM19rZXltYXBbXSA9IHsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgaDNfa2V5bWFwW10gPSB7CiAJS0VZKDAsIDAsIEtFWV9MRUZUKSwKLQlLRVkoMCwgMSwgS0VZX1JJR0hUKSwKLQlLRVkoMCwgMiwgS0VZXzMpLAotCUtFWSgwLCAzLCBLRVlfRjEwKSwKLQlLRVkoMCwgNCwgS0VZX0Y1KSwKLQlLRVkoMCwgNSwgS0VZXzkpLAotCUtFWSgxLCAwLCBLRVlfRE9XTiksCisJS0VZKDEsIDAsIEtFWV9SSUdIVCksCisJS0VZKDIsIDAsIEtFWV8zKSwKKwlLRVkoMywgMCwgS0VZX0YxMCksCisJS0VZKDQsIDAsIEtFWV9GNSksCisJS0VZKDUsIDAsIEtFWV85KSwKKwlLRVkoMCwgMSwgS0VZX0RPV04pLAogCUtFWSgxLCAxLCBLRVlfVVApLAotCUtFWSgxLCAyLCBLRVlfMiksCi0JS0VZKDEsIDMsIEtFWV9GOSksCi0JS0VZKDEsIDQsIEtFWV9GNyksCi0JS0VZKDEsIDUsIEtFWV8wKSwKLQlLRVkoMiwgMCwgS0VZX0VOVEVSKSwKLQlLRVkoMiwgMSwgS0VZXzYpLAorCUtFWSgyLCAxLCBLRVlfMiksCisJS0VZKDMsIDEsIEtFWV9GOSksCisJS0VZKDQsIDEsIEtFWV9GNyksCisJS0VZKDUsIDEsIEtFWV8wKSwKKwlLRVkoMCwgMiwgS0VZX0VOVEVSKSwKKwlLRVkoMSwgMiwgS0VZXzYpLAogCUtFWSgyLCAyLCBLRVlfMSksCi0JS0VZKDIsIDMsIEtFWV9GMiksCi0JS0VZKDIsIDQsIEtFWV9GNiksCi0JS0VZKDIsIDUsIEtFWV9IT01FKSwKLQlLRVkoMywgMCwgS0VZXzgpLAotCUtFWSgzLCAxLCBLRVlfNSksCi0JS0VZKDMsIDIsIEtFWV9GMTIpLAorCUtFWSgzLCAyLCBLRVlfRjIpLAorCUtFWSg0LCAyLCBLRVlfRjYpLAorCUtFWSg1LCAyLCBLRVlfSE9NRSksCisJS0VZKDAsIDMsIEtFWV84KSwKKwlLRVkoMSwgMywgS0VZXzUpLAorCUtFWSgyLCAzLCBLRVlfRjEyKSwKIAlLRVkoMywgMywgS0VZX0YzKSwKLQlLRVkoMywgNCwgS0VZX0Y4KSwKLQlLRVkoMywgNSwgS0VZX0VORCksCi0JS0VZKDQsIDAsIEtFWV83KSwKLQlLRVkoNCwgMSwgS0VZXzQpLAotCUtFWSg0LCAyLCBLRVlfRjExKSwKLQlLRVkoNCwgMywgS0VZX0YxKSwKKwlLRVkoNCwgMywgS0VZX0Y4KSwKKwlLRVkoNSwgMywgS0VZX0VORCksCisJS0VZKDAsIDQsIEtFWV83KSwKKwlLRVkoMSwgNCwgS0VZXzQpLAorCUtFWSgyLCA0LCBLRVlfRjExKSwKKwlLRVkoMywgNCwgS0VZX0YxKSwKIAlLRVkoNCwgNCwgS0VZX0Y0KSwKLQlLRVkoNCwgNSwgS0VZX0VTQyksCi0JS0VZKDUsIDAsIEtFWV9GMTMpLAotCUtFWSg1LCAxLCBLRVlfRjE0KSwKLQlLRVkoNSwgMiwgS0VZX0YxNSksCi0JS0VZKDUsIDMsIEtFWV9GMTYpLAotCUtFWSg1LCA0LCBLRVlfU0xFRVApLAotCTAKKwlLRVkoNSwgNCwgS0VZX0VTQyksCisJS0VZKDAsIDUsIEtFWV9GMTMpLAorCUtFWSgxLCA1LCBLRVlfRjE0KSwKKwlLRVkoMiwgNSwgS0VZX0YxNSksCisJS0VZKDMsIDUsIEtFWV9GMTYpLAorCUtFWSg0LCA1LCBLRVlfU0xFRVApLAogfTsKIAogCkBAIC0yNjQsNiArMjYzLDE1IEBACiAJLnJlc291cmNlCT0gc21jOTF4X3Jlc291cmNlcywKIH07CiAKK3N0YXRpYyB2b2lkIF9faW5pdCBoM19pbml0X3NtYzkxeCh2b2lkKQoreworCW9tYXBfY2ZnX3JlZyhXMTVfMTcxMF9HUElPNDApOworCWlmIChncGlvX3JlcXVlc3QoNDAsICJTTUM5MXggaXJxIikgPCAwKSB7CisJCXByaW50aygiRXJyb3IgcmVxdWVzdGluZyBncGlvIDQwIGZvciBzbWM5MXggaXJxXG4iKTsKKwkJcmV0dXJuOworCX0KK30KKwogI2RlZmluZSBHUFRJTUVSX0JBU0UJCTB4RkZGQjE0MDAKICNkZWZpbmUgR1BUSU1FUl9SRUdTKHgpCSgweEZGRkIxNDAwICsgKHggKiAweDgwMCkpCiAjZGVmaW5lIEdQVElNRVJfUkVHU19TSVpFCTB4NDYKQEAgLTI5NiwxNCArMzA0LDE4IEBACiAJfSwKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWF0cml4X2tleW1hcF9kYXRhIGgzX2tleW1hcF9kYXRhID0geworCS5rZXltYXAJCT0gaDNfa2V5bWFwLAorCS5rZXltYXBfc2l6ZQk9IEFSUkFZX1NJWkUoaDNfa2V5bWFwKSwKK307CisKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9rcF9wbGF0Zm9ybV9kYXRhIGgzX2twX2RhdGEgPSB7CiAJLnJvd3MJCT0gOCwKIAkuY29scwkJPSA4LAotCS5rZXltYXAJCT0gaDNfa2V5bWFwLAotCS5rZXltYXBzaXplCT0gQVJSQVlfU0laRShoM19rZXltYXApLAotCS5yZXAJCT0gMSwKKwkua2V5bWFwX2RhdGEJPSAmaDNfa2V5bWFwX2RhdGEsCisJLnJlcAkJPSB0cnVlLAogCS5kZWxheQkJPSA5LAotCS5kYm91bmNlCT0gMSwKKwkuZGJvdW5jZQk9IHRydWUsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBoM19rcF9kZXZpY2UgPSB7CkBAIC0zNzYsNiArMzg4LDggQEAKIAogc3RhdGljIHZvaWQgX19pbml0IGgzX2luaXQodm9pZCkKIHsKKwloM19pbml0X3NtYzkxeCgpOworCiAJLyogSGVyZSB3ZSBhc3N1bWUgdGhlIE5PUiBib290IGNvbmZpZzogIE5PUiBvbiBDUzMgKHBvc3NpYmx5IHN3YXBwZWQKIAkgKiB0byBhZGRyZXNzIDAgYnkgYSBkaXAgc3dpdGNoKSwgTkFORCBvbiBDUzJCLiAgVGhlIE5BTkQgZHJpdmVyIHdpbGwKIAkgKiBub3RpY2Ugd2hldGhlciBhIE5BTkQgY2hpcCBpcyBlbmFibGVkIGF0IHByb2JlIHRpbWUuCkBAIC00MjIsMjEgKzQzNiwxMCBAQAogCWgzX21tY19pbml0KCk7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBoM19pbml0X3NtYzkxeCh2b2lkKQotewotCW9tYXBfY2ZnX3JlZyhXMTVfMTcxMF9HUElPNDApOwotCWlmIChncGlvX3JlcXVlc3QoNDAsICJTTUM5MXggaXJxIikgPCAwKSB7Ci0JCXByaW50aygiRXJyb3IgcmVxdWVzdGluZyBncGlvIDQwIGZvciBzbWM5MXggaXJxXG4iKTsKLQkJcmV0dXJuOwotCX0KLX0KLQogc3RhdGljIHZvaWQgX19pbml0IGgzX2luaXRfaXJxKHZvaWQpCiB7CiAJb21hcDFfaW5pdF9jb21tb25faHcoKTsKIAlvbWFwX2luaXRfaXJxKCk7Ci0Jb21hcF9ncGlvX2luaXQoKTsKLQloM19pbml0X3NtYzkxeCgpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgaDNfbWFwX2lvKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWh0Y2hlcmFsZC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1odGNoZXJhbGQuYwppbmRleCAwNzFhZjNlLi5mMmM1YzU4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWh0Y2hlcmFsZC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaHRjaGVyYWxkLmMKQEAgLTE4MCw2NCArMTgwLDY4IEBACiAKIC8qIEtleWJvYXJkIGRlZmluaXRpb24gKi8KIAotc3RhdGljIGludCBodGNfaGVyYWxkX2tleW1hcFtdID0geworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBodGNfaGVyYWxkX2tleW1hcFtdID0gewogCUtFWSgwLCAwLCBLRVlfUkVDT1JEKSwgLyogTWFpbCBidXR0b24gKi8KLQlLRVkoMCwgMSwgS0VZX0NBTUVSQSksIC8qIENhbWVyYSAqLwotCUtFWSgwLCAyLCBLRVlfUEhPTkUpLCAvKiBTZW5kIGtleSAqLwotCUtFWSgwLCAzLCBLRVlfVk9MVU1FVVApLCAvKiBWb2x1bWUgdXAgKi8KLQlLRVkoMCwgNCwgS0VZX0YyKSwgIC8qIFJpZ2h0IGJhciAobGFuZHNjYXBlKSAqLwotCUtFWSgwLCA1LCBLRVlfTUFJTCksIC8qIFdpbiBrZXkgKHBvcnRyYWl0KSAqLwotCUtFWSgwLCA2LCBLRVlfRElSRUNUT1JZKSwgLyogUmlnaHQgYmFyIChwcm90cmFpdCkgKi8KLQlLRVkoMSwgMCwgS0VZX0xFRlRDVFJMKSwgLyogV2luZG93cyBrZXkgKi8KKwlLRVkoMSwgMCwgS0VZX0NBTUVSQSksIC8qIENhbWVyYSAqLworCUtFWSgyLCAwLCBLRVlfUEhPTkUpLCAvKiBTZW5kIGtleSAqLworCUtFWSgzLCAwLCBLRVlfVk9MVU1FVVApLCAvKiBWb2x1bWUgdXAgKi8KKwlLRVkoNCwgMCwgS0VZX0YyKSwgIC8qIFJpZ2h0IGJhciAobGFuZHNjYXBlKSAqLworCUtFWSg1LCAwLCBLRVlfTUFJTCksIC8qIFdpbiBrZXkgKHBvcnRyYWl0KSAqLworCUtFWSg2LCAwLCBLRVlfRElSRUNUT1JZKSwgLyogUmlnaHQgYmFyIChwcm90cmFpdCkgKi8KKwlLRVkoMCwgMSwgS0VZX0xFRlRDVFJMKSwgLyogV2luZG93cyBrZXkgKi8KIAlLRVkoMSwgMSwgS0VZX0NPTU1BKSwKLQlLRVkoMSwgMiwgS0VZX00pLAotCUtFWSgxLCAzLCBLRVlfSyksCi0JS0VZKDEsIDQsIEtFWV9TTEFTSCksIC8qIE9LIGtleSAqLwotCUtFWSgxLCA1LCBLRVlfSSksCi0JS0VZKDEsIDYsIEtFWV9VKSwKLQlLRVkoMiwgMCwgS0VZX0xFRlRBTFQpLAotCUtFWSgyLCAxLCBLRVlfVEFCKSwKKwlLRVkoMiwgMSwgS0VZX00pLAorCUtFWSgzLCAxLCBLRVlfSyksCisJS0VZKDQsIDEsIEtFWV9TTEFTSCksIC8qIE9LIGtleSAqLworCUtFWSg1LCAxLCBLRVlfSSksCisJS0VZKDYsIDEsIEtFWV9VKSwKKwlLRVkoMCwgMiwgS0VZX0xFRlRBTFQpLAorCUtFWSgxLCAyLCBLRVlfVEFCKSwKIAlLRVkoMiwgMiwgS0VZX04pLAotCUtFWSgyLCAzLCBLRVlfSiksCi0JS0VZKDIsIDQsIEtFWV9FTlRFUiksCi0JS0VZKDIsIDUsIEtFWV9IKSwKLQlLRVkoMiwgNiwgS0VZX1kpLAotCUtFWSgzLCAwLCBLRVlfU1BBQ0UpLAotCUtFWSgzLCAxLCBLRVlfTCksCi0JS0VZKDMsIDIsIEtFWV9CKSwKKwlLRVkoMywgMiwgS0VZX0opLAorCUtFWSg0LCAyLCBLRVlfRU5URVIpLAorCUtFWSg1LCAyLCBLRVlfSCksCisJS0VZKDYsIDIsIEtFWV9ZKSwKKwlLRVkoMCwgMywgS0VZX1NQQUNFKSwKKwlLRVkoMSwgMywgS0VZX0wpLAorCUtFWSgyLCAzLCBLRVlfQiksCiAJS0VZKDMsIDMsIEtFWV9WKSwKLQlLRVkoMywgNCwgS0VZX0JBQ0tTUEFDRSksCi0JS0VZKDMsIDUsIEtFWV9HKSwKLQlLRVkoMywgNiwgS0VZX1QpLAotCUtFWSg0LCAwLCBLRVlfQ0FQU0xPQ0spLCAvKiBTaGlmdCAqLwotCUtFWSg0LCAxLCBLRVlfQyksCi0JS0VZKDQsIDIsIEtFWV9GKSwKLQlLRVkoNCwgMywgS0VZX1IpLAorCUtFWSg0LCAzLCBLRVlfQkFDS1NQQUNFKSwKKwlLRVkoNSwgMywgS0VZX0cpLAorCUtFWSg2LCAzLCBLRVlfVCksCisJS0VZKDAsIDQsIEtFWV9DQVBTTE9DSyksIC8qIFNoaWZ0ICovCisJS0VZKDEsIDQsIEtFWV9DKSwKKwlLRVkoMiwgNCwgS0VZX0YpLAorCUtFWSgzLCA0LCBLRVlfUiksCiAJS0VZKDQsIDQsIEtFWV9PKSwKLQlLRVkoNCwgNSwgS0VZX0UpLAotCUtFWSg0LCA2LCBLRVlfRCksCi0JS0VZKDUsIDAsIEtFWV9YKSwKLQlLRVkoNSwgMSwgS0VZX1opLAotCUtFWSg1LCAyLCBLRVlfUyksCi0JS0VZKDUsIDMsIEtFWV9XKSwKLQlLRVkoNSwgNCwgS0VZX1ApLAorCUtFWSg1LCA0LCBLRVlfRSksCisJS0VZKDYsIDQsIEtFWV9EKSwKKwlLRVkoMCwgNSwgS0VZX1gpLAorCUtFWSgxLCA1LCBLRVlfWiksCisJS0VZKDIsIDUsIEtFWV9TKSwKKwlLRVkoMywgNSwgS0VZX1cpLAorCUtFWSg0LCA1LCBLRVlfUCksCiAJS0VZKDUsIDUsIEtFWV9RKSwKLQlLRVkoNSwgNiwgS0VZX0EpLAotCUtFWSg2LCAwLCBLRVlfQ09OTkVDVCksIC8qIFZvaWNlIGJ1dHRvbiAqLwotCUtFWSg2LCAyLCBLRVlfQ0FOQ0VMKSwgLyogRW5kIGtleSAqLwotCUtFWSg2LCAzLCBLRVlfVk9MVU1FRE9XTiksIC8qIFZvbHVtZSBkb3duICovCi0JS0VZKDYsIDQsIEtFWV9GMSksIC8qIExlZnQgYmFyIChsYW5kc2NhcGUpICovCi0JS0VZKDYsIDUsIEtFWV9XV1cpLCAvKiBPSyBidXR0b24gKHBvcnRyYWl0KSAqLworCUtFWSg2LCA1LCBLRVlfQSksCisJS0VZKDAsIDYsIEtFWV9DT05ORUNUKSwgLyogVm9pY2UgYnV0dG9uICovCisJS0VZKDIsIDYsIEtFWV9DQU5DRUwpLCAvKiBFbmQga2V5ICovCisJS0VZKDMsIDYsIEtFWV9WT0xVTUVET1dOKSwgLyogVm9sdW1lIGRvd24gKi8KKwlLRVkoNCwgNiwgS0VZX0YxKSwgLyogTGVmdCBiYXIgKGxhbmRzY2FwZSkgKi8KKwlLRVkoNSwgNiwgS0VZX1dXVyksIC8qIE9LIGJ1dHRvbiAocG9ydHJhaXQpICovCiAJS0VZKDYsIDYsIEtFWV9DQUxFTkRBUiksIC8qIExlZnQgYmFyIChwb3J0cmFpdCkgKi8KLQkwCiB9OwogCi1zdHJ1Y3Qgb21hcF9rcF9wbGF0Zm9ybV9kYXRhIGh0Y2hlcmFsZF9rcF9kYXRhID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBtYXRyaXhfa2V5bWFwX2RhdGEgaHRjX2hlcmFsZF9rZXltYXBfZGF0YSA9IHsKKwkua2V5bWFwCQk9IGh0Y19oZXJhbGRfa2V5bWFwLAorCS5rZXltYXBfc2l6ZQk9IEFSUkFZX1NJWkUoaHRjX2hlcmFsZF9rZXltYXApLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2twX3BsYXRmb3JtX2RhdGEgaHRjaGVyYWxkX2twX2RhdGEgPSB7CiAJLnJvd3MJPSA3LAogCS5jb2xzCT0gNywKIAkuZGVsYXkgPSAyMCwKLQkucmVwID0gMSwKLQkua2V5bWFwID0gaHRjX2hlcmFsZF9rZXltYXAsCisJLnJlcCA9IHRydWUsCisJLmtleW1hcF9kYXRhID0gJmh0Y19oZXJhbGRfa2V5bWFwX2RhdGEsCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGtwX3Jlc291cmNlc1tdID0gewpAQCAtMjc4LDcgKzI4Miw3IEBACiBzdGF0aWMgc3RydWN0IGdwaW9fa2V5c19wbGF0Zm9ybV9kYXRhIGhlcmFsZF9ncGlvX2tleXNfZGF0YSA9IHsKIAkuYnV0dG9ucwk9IGhlcmFsZF9ncGlvX2tleXNfdGFibGUsCiAJLm5idXR0b25zCT0gQVJSQVlfU0laRShoZXJhbGRfZ3Bpb19rZXlzX3RhYmxlKSwKLQkucmVwCQk9IDEsCisJLnJlcAkJPSB0cnVlLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaGVyYWxkX2dwaW9rZXlzX2RldmljZSA9IHsKQEAgLTQzOSw3ICs0NDMsNyBAQAogCS5rZWVwX3ZyZWZfb24JCT0gMSwKIAkueF9wbGF0ZV9vaG1zCQk9IDQ5NiwKIAkuZ3Bpb19wZW5kb3duCQk9IEhUQ0hFUkFMRF9HUElPX1RTLAotCS5wcmVzc3VyZV9tYXgJCT0gMTAwMDAwLAorCS5wcmVzc3VyZV9tYXgJCT0gMTAwMDAsCiAJLnByZXNzdXJlX21pbgkJPSA1MDAwLAogCS54X21pbgkJCT0gNTI4LAogCS54X21heAkJCT0gMzc2MCwKQEAgLTU3Nyw4ICs1ODEsNiBAQAogCXByaW50ayhLRVJOX0lORk8gIkhUQyBIZXJhbGQgaW5pdC5cbiIpOwogCiAJLyogRG8gYm9hcmQgaW5pdGlhbGl6YXRpb24gYmVmb3JlIHdlIHJlZ2lzdGVyIGFsbCB0aGUgZGV2aWNlcyAqLwotCW9tYXBfZ3Bpb19pbml0KCk7Ci0KIAlvbWFwX2JvYXJkX2NvbmZpZyA9IGh0Y2hlcmFsZF9jb25maWc7CiAJb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUoaHRjaGVyYWxkX2NvbmZpZyk7CiAJcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWlubm92YXRvci5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1pbm5vdmF0b3IuYwppbmRleCBkYzJiODZmLi5hMzZlNjc0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWlubm92YXRvci5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaW5ub3ZhdG9yLmMKQEAgLTQ0LDE3ICs0NCwxNiBAQAogLyogQXQgT01BUDE2MTAgSW5ub3ZhdG9yIHRoZSBFdGhlcm5ldCBpcyBkaXJlY3RseSBjb25uZWN0ZWQgdG8gQ1MxICovCiAjZGVmaW5lIElOTk9WQVRPUjE2MTBfRVRIUl9TVEFSVAkweDA0MDAwMzAwCiAKLXN0YXRpYyBpbnQgaW5ub3ZhdG9yX2tleW1hcFtdID0geworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBpbm5vdmF0b3Jfa2V5bWFwW10gPSB7CiAJS0VZKDAsIDAsIEtFWV9GMSksCi0JS0VZKDAsIDMsIEtFWV9ET1dOKSwKKwlLRVkoMywgMCwgS0VZX0RPV04pLAogCUtFWSgxLCAxLCBLRVlfRjIpLAotCUtFWSgxLCAyLCBLRVlfUklHSFQpLAotCUtFWSgyLCAwLCBLRVlfRjMpLAotCUtFWSgyLCAxLCBLRVlfRjQpLAorCUtFWSgyLCAxLCBLRVlfUklHSFQpLAorCUtFWSgwLCAyLCBLRVlfRjMpLAorCUtFWSgxLCAyLCBLRVlfRjQpLAogCUtFWSgyLCAyLCBLRVlfVVApLAotCUtFWSgzLCAyLCBLRVlfRU5URVIpLAorCUtFWSgyLCAzLCBLRVlfRU5URVIpLAogCUtFWSgzLCAzLCBLRVlfTEVGVCksCi0JMAogfTsKIAogc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGlubm92YXRvcl9wYXJ0aXRpb25zW10gPSB7CkBAIC0xMjYsMTEgKzEyNSwxNSBAQAogCX0sCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG1hdHJpeF9rZXltYXBfZGF0YSBpbm5vdmF0b3Jfa2V5bWFwX2RhdGEgPSB7CisJLmtleW1hcAkJPSBpbm5vdmF0b3Jfa2V5bWFwLAorCS5rZXltYXBfc2l6ZQk9IEFSUkFZX1NJWkUoaW5ub3ZhdG9yX2tleW1hcCksCit9OworCiBzdGF0aWMgc3RydWN0IG9tYXBfa3BfcGxhdGZvcm1fZGF0YSBpbm5vdmF0b3Jfa3BfZGF0YSA9IHsKIAkucm93cwkJPSA4LAogCS5jb2xzCQk9IDgsCi0JLmtleW1hcAkJPSBpbm5vdmF0b3Jfa2V5bWFwLAotCS5rZXltYXBzaXplCT0gQVJSQVlfU0laRShpbm5vdmF0b3Jfa2V5bWFwKSwKKwkua2V5bWFwX2RhdGEJPSAmaW5ub3ZhdG9yX2tleW1hcF9kYXRhLAogCS5kZWxheQkJPSA0LAogfTsKIApAQCAtMjkwLDEzICsyOTMsNiBAQAogewogCW9tYXAxX2luaXRfY29tbW9uX2h3KCk7CiAJb21hcF9pbml0X2lycSgpOwotCW9tYXBfZ3Bpb19pbml0KCk7Ci0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1WFgKLQlpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKLQkJb21hcDE1MTBfZnBnYV9pbml0X2lycSgpOwotCX0KLSNlbmRpZgotCWlubm92YXRvcl9pbml0X3NtYzkxeCgpOwogfQogCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1WFgKQEAgLTM4Nyw2ICszODMsMTAgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IGlubm92YXRvcl9pbml0KHZvaWQpCiB7CisJaWYgKGNwdV9pc19vbWFwMTUxMCgpKQorCQlvbWFwMTUxMF9mcGdhX2luaXRfaXJxKCk7CisJaW5ub3ZhdG9yX2luaXRfc21jOTF4KCk7CisKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAogCWlmIChjcHVfaXNfb21hcDE1MTAoKSkgewogCQl1bnNpZ25lZCBjaGFyIHJlZzsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtbm9raWE3NzAuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtbm9raWE3NzAuYwppbmRleCBhYTgzNzViLi5kMjFmMDlkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLW5va2lhNzcwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1ub2tpYTc3MC5jCkBAIC01NCwxOSArNTQsMTggQEAKIAlvbWFwX2luaXRfaXJxKCk7CiB9CiAKLXN0YXRpYyBpbnQgbm9raWE3NzBfa2V5bWFwW10gPSB7Ci0JS0VZKDAsIDEsIEdST1VQXzAgfCBLRVlfVVApLAotCUtFWSgwLCAyLCBHUk9VUF8xIHwgS0VZX0Y1KSwKLQlLRVkoMSwgMCwgR1JPVVBfMCB8IEtFWV9MRUZUKSwKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbm9raWE3NzBfa2V5bWFwW10gPSB7CisJS0VZKDEsIDAsIEdST1VQXzAgfCBLRVlfVVApLAorCUtFWSgyLCAwLCBHUk9VUF8xIHwgS0VZX0Y1KSwKKwlLRVkoMCwgMSwgR1JPVVBfMCB8IEtFWV9MRUZUKSwKIAlLRVkoMSwgMSwgR1JPVVBfMCB8IEtFWV9FTlRFUiksCi0JS0VZKDEsIDIsIEdST1VQXzAgfCBLRVlfUklHSFQpLAotCUtFWSgyLCAwLCBHUk9VUF8xIHwgS0VZX0VTQyksCi0JS0VZKDIsIDEsIEdST1VQXzAgfCBLRVlfRE9XTiksCisJS0VZKDIsIDEsIEdST1VQXzAgfCBLRVlfUklHSFQpLAorCUtFWSgwLCAyLCBHUk9VUF8xIHwgS0VZX0VTQyksCisJS0VZKDEsIDIsIEdST1VQXzAgfCBLRVlfRE9XTiksCiAJS0VZKDIsIDIsIEdST1VQXzEgfCBLRVlfRjQpLAotCUtFWSgzLCAwLCBHUk9VUF8yIHwgS0VZX0Y3KSwKLQlLRVkoMywgMSwgR1JPVVBfMiB8IEtFWV9GOCksCi0JS0VZKDMsIDIsIEdST1VQXzIgfCBLRVlfRjYpLAotCTAKKwlLRVkoMCwgMywgR1JPVVBfMiB8IEtFWV9GNyksCisJS0VZKDEsIDMsIEdST1VQXzIgfCBLRVlfRjgpLAorCUtFWSgyLCAzLCBHUk9VUF8yIHwgS0VZX0Y2KSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugbm9raWE3NzBfa3BfcmVzb3VyY2VzW10gPSB7CkBAIC03NywxMSArNzYsMTUgQEAKIAl9LAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBtYXRyaXhfa2V5bWFwX2RhdGEgbm9raWE3NzBfa2V5bWFwX2RhdGEgPSB7CisJLmtleW1hcAkJPSBub2tpYTc3MF9rZXltYXAsCisJLmtleW1hcF9zaXplCT0gQVJSQVlfU0laRShub2tpYTc3MF9rZXltYXApLAorfTsKKwogc3RhdGljIHN0cnVjdCBvbWFwX2twX3BsYXRmb3JtX2RhdGEgbm9raWE3NzBfa3BfZGF0YSA9IHsKIAkucm93cwkJPSA4LAogCS5jb2xzCQk9IDgsCi0JLmtleW1hcAkJPSBub2tpYTc3MF9rZXltYXAsCi0JLmtleW1hcHNpemUJPSBBUlJBWV9TSVpFKG5va2lhNzcwX2tleW1hcCksCisJLmtleW1hcF9kYXRhCT0gJm5va2lhNzcwX2tleW1hcF9kYXRhLAogCS5kZWxheQkJPSA0LAogfTsKIApAQCAtMjQ2LDcgKzI0OSw2IEBACiAJcGxhdGZvcm1fYWRkX2RldmljZXMobm9raWE3NzBfZGV2aWNlcywgQVJSQVlfU0laRShub2tpYTc3MF9kZXZpY2VzKSk7CiAJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8obm9raWE3NzBfc3BpX2JvYXJkX2luZm8sCiAJCQkJQVJSQVlfU0laRShub2tpYTc3MF9zcGlfYm9hcmRfaW5mbykpOwotCW9tYXBfZ3Bpb19pbml0KCk7CiAJb21hcF9zZXJpYWxfaW5pdCgpOwogCW9tYXBfcmVnaXN0ZXJfaTJjX2J1cygxLCAxMDAsIE5VTEwsIDApOwogCWh3YTc0Ml9kZXZfaW5pdCgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1vc2suYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtb3NrLmMKaW5kZXggZTlkZDc5MS4uN2M1ZTIxMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1vc2suYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLW9zay5jCkBAIC0yODMsOSArMjgzLDYgQEAKIHsKIAlvbWFwMV9pbml0X2NvbW1vbl9odygpOwogCW9tYXBfaW5pdF9pcnEoKTsKLQlvbWFwX2dwaW9faW5pdCgpOwotCW9za19pbml0X3NtYzkxeCgpOwotCW9za19pbml0X2NmKCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF91c2JfY29uZmlnIG9za191c2JfY29uZmlnIF9faW5pdGRhdGEgPSB7CkBAIC0zNDEsMjUgKzMzOCwyOCBAQAogCSAqLwogfTsKIAotc3RhdGljIGNvbnN0IGludCBvc2tfa2V5bWFwW10gPSB7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG9za19rZXltYXBbXSA9IHsKIAkvKiBLRVkoY29sLCByb3csIGNvZGUpICovCiAJS0VZKDAsIDAsIEtFWV9GMSksCQkvKiBTVzQgKi8KLQlLRVkoMCwgMywgS0VZX1VQKSwJCS8qIChzdzIvdXApICovCisJS0VZKDMsIDAsIEtFWV9VUCksCQkvKiAoc3cyL3VwKSAqLwogCUtFWSgxLCAxLCBLRVlfTEVGVENUUkwpLAkvKiBTVzUgKi8KLQlLRVkoMSwgMiwgS0VZX0xFRlQpLAkJLyogKHN3Mi9sZWZ0KSAqLwotCUtFWSgyLCAwLCBLRVlfU1BBQ0UpLAkJLyogU1czICovCi0JS0VZKDIsIDEsIEtFWV9FU0MpLAkJLyogU1c2ICovCisJS0VZKDIsIDEsIEtFWV9MRUZUKSwJCS8qIChzdzIvbGVmdCkgKi8KKwlLRVkoMCwgMiwgS0VZX1NQQUNFKSwJCS8qIFNXMyAqLworCUtFWSgxLCAyLCBLRVlfRVNDKSwJCS8qIFNXNiAqLwogCUtFWSgyLCAyLCBLRVlfRE9XTiksCQkvKiAoc3cyL2Rvd24pICovCi0JS0VZKDMsIDIsIEtFWV9FTlRFUiksCQkvKiAoc3cyL3NlbGVjdCkgKi8KKwlLRVkoMiwgMywgS0VZX0VOVEVSKSwJCS8qIChzdzIvc2VsZWN0KSAqLwogCUtFWSgzLCAzLCBLRVlfUklHSFQpLAkJLyogKHN3Mi9yaWdodCkgKi8KLQkwCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG1hdHJpeF9rZXltYXBfZGF0YSBvc2tfa2V5bWFwX2RhdGEgPSB7CisJLmtleW1hcAkJPSBvc2tfa2V5bWFwLAorCS5rZXltYXBfc2l6ZQk9IEFSUkFZX1NJWkUob3NrX2tleW1hcCksCiB9OwogCiBzdGF0aWMgc3RydWN0IG9tYXBfa3BfcGxhdGZvcm1fZGF0YSBvc2tfa3BfZGF0YSA9IHsKIAkucm93cwkJPSA4LAogCS5jb2xzCQk9IDgsCi0JLmtleW1hcAkJPSAoaW50ICopIG9za19rZXltYXAsCi0JLmtleW1hcHNpemUJPSBBUlJBWV9TSVpFKG9za19rZXltYXApLAorCS5rZXltYXBfZGF0YQk9ICZvc2tfa2V5bWFwX2RhdGEsCiAJLmRlbGF5CQk9IDksCiB9OwogCkBAIC01NDEsNiArNTQxLDkgQEAKIHsKIAl1MzIgbDsKIAorCW9za19pbml0X3NtYzkxeCgpOworCW9za19pbml0X2NmKCk7CisKIAkvKiBXb3JrYXJvdW5kIGZvciB3cm9uZyBDUzMgKE5PUiBmbGFzaCkgdGltaW5nCiAJICogVGhlcmUgYXJlIHNvbWUgVS1Cb290IHZlcnNpb25zIG91dCB0aGVyZSB3aGljaCBjb25maWd1cmUKIAkgKiB3cm9uZyBDUzMgbWVtb3J5IHRpbWluZ3MuIFRoaXMgbWFpbmx5IGxlYWRzIHRvIENSQwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtdGUuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGFsbXRlLmMKaW5kZXggZjMyNzM4Yi4uZmI1MWNlNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtdGUuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG10ZS5jCkBAIC02MywyOCArNjMsMzEgQEAKIHsKIAlvbWFwMV9pbml0X2NvbW1vbl9odygpOwogCW9tYXBfaW5pdF9pcnEoKTsKLQlvbWFwX2dwaW9faW5pdCgpOwogfQogCi1zdGF0aWMgY29uc3QgaW50IHBhbG10ZV9rZXltYXBbXSA9IHsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgcGFsbXRlX2tleW1hcFtdID0gewogCUtFWSgwLCAwLCBLRVlfRjEpLAkJLyogQ2FsZW5kYXIgKi8KLQlLRVkoMCwgMSwgS0VZX0YyKSwJCS8qIENvbnRhY3RzICovCi0JS0VZKDAsIDIsIEtFWV9GMyksCQkvKiBUYXNrcyBMaXN0ICovCi0JS0VZKDAsIDMsIEtFWV9GNCksCQkvKiBOb3RlIFBhZCAqLwotCUtFWSgwLCA0LCBLRVlfUE9XRVIpLAotCUtFWSgxLCAwLCBLRVlfTEVGVCksCisJS0VZKDEsIDAsIEtFWV9GMiksCQkvKiBDb250YWN0cyAqLworCUtFWSgyLCAwLCBLRVlfRjMpLAkJLyogVGFza3MgTGlzdCAqLworCUtFWSgzLCAwLCBLRVlfRjQpLAkJLyogTm90ZSBQYWQgKi8KKwlLRVkoNCwgMCwgS0VZX1BPV0VSKSwKKwlLRVkoMCwgMSwgS0VZX0xFRlQpLAogCUtFWSgxLCAxLCBLRVlfRE9XTiksCi0JS0VZKDEsIDIsIEtFWV9VUCksCi0JS0VZKDEsIDMsIEtFWV9SSUdIVCksCi0JS0VZKDEsIDQsIEtFWV9FTlRFUiksCi0JMCwKKwlLRVkoMiwgMSwgS0VZX1VQKSwKKwlLRVkoMywgMSwgS0VZX1JJR0hUKSwKKwlLRVkoNCwgMSwgS0VZX0VOVEVSKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWF0cml4X2tleW1hcF9kYXRhIHBhbG10ZV9rZXltYXBfZGF0YSA9IHsKKwkua2V5bWFwCQk9IHBhbG10ZV9rZXltYXAsCisJLmtleW1hcF9zaXplCT0gQVJSQVlfU0laRShwYWxtdGVfa2V5bWFwKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9rcF9wbGF0Zm9ybV9kYXRhIHBhbG10ZV9rcF9kYXRhID0gewogCS5yb3dzCT0gOCwKIAkuY29scwk9IDgsCi0JLmtleW1hcCA9IChpbnQgKikgcGFsbXRlX2tleW1hcCwKLQkucmVwCT0gMSwKKwkua2V5bWFwX2RhdGEgPSAmcGFsbXRlX2tleW1hcF9kYXRhLAorCS5yZXAJPSB0cnVlLAogCS5kZWxheQk9IDEyLAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtdHQuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGFsbXR0LmMKaW5kZXggZWQxNDAwYS4uZjA0ZjJkMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtdHQuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG10dC5jCkBAIC01MSwxOSArNTEsMTggQEAKICNkZWZpbmUgUEFMTVRUX01NQ19XUF9HUElPCTgKICNkZWZpbmUgUEFMTVRUX0hEUV9HUElPCQkxMQogCi1zdGF0aWMgaW50IHBhbG10dF9rZXltYXBbXSA9IHsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgcGFsbXR0X2tleW1hcFtdID0gewogCUtFWSgwLCAwLCBLRVlfRVNDKSwKLQlLRVkoMCwgMSwgS0VZX1NQQUNFKSwKLQlLRVkoMCwgMiwgS0VZX0xFRlRDVFJMKSwKLQlLRVkoMCwgMywgS0VZX1RBQiksCi0JS0VZKDAsIDQsIEtFWV9FTlRFUiksCi0JS0VZKDEsIDAsIEtFWV9MRUZUKSwKKwlLRVkoMSwgMCwgS0VZX1NQQUNFKSwKKwlLRVkoMiwgMCwgS0VZX0xFRlRDVFJMKSwKKwlLRVkoMywgMCwgS0VZX1RBQiksCisJS0VZKDQsIDAsIEtFWV9FTlRFUiksCisJS0VZKDAsIDEsIEtFWV9MRUZUKSwKIAlLRVkoMSwgMSwgS0VZX0RPV04pLAotCUtFWSgxLCAyLCBLRVlfVVApLAotCUtFWSgxLCAzLCBLRVlfUklHSFQpLAotCUtFWSgyLCAwLCBLRVlfU0xFRVApLAotCUtFWSgyLCA0LCBLRVlfWSksCi0JMAorCUtFWSgyLCAxLCBLRVlfVVApLAorCUtFWSgzLCAxLCBLRVlfUklHSFQpLAorCUtFWSgwLCAyLCBLRVlfU0xFRVApLAorCUtFWSg0LCAyLCBLRVlfWSksCiB9OwogCiBzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gcGFsbXR0X3BhcnRpdGlvbnNbXSA9IHsKQEAgLTEzNiwxMCArMTM1LDE1IEBACiAJfSwKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWF0cml4X2tleW1hcF9kYXRhIHBhbG10dF9rZXltYXBfZGF0YSA9IHsKKwkua2V5bWFwCQk9IHBhbG10dF9rZXltYXAsCisJLmtleW1hcF9zaXplCT0gQVJSQVlfU0laRShwYWxtdHRfa2V5bWFwKSwKK307CisKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9rcF9wbGF0Zm9ybV9kYXRhIHBhbG10dF9rcF9kYXRhID0gewogCS5yb3dzCT0gNiwKIAkuY29scwk9IDMsCi0JLmtleW1hcCA9IHBhbG10dF9rZXltYXAsCisJLmtleW1hcF9kYXRhID0gJnBhbG10dF9rZXltYXBfZGF0YSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBhbG10dF9rcF9kZXZpY2UgPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG16NzEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGFsbXo3MS5jCmluZGV4IGQ3YTI0NWMuLmQ3YmJiZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGFsbXo3MS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGFsbXo3MS5jCkBAIC02MiwyOSArNjIsMzIgQEAKIHsKIAlvbWFwMV9pbml0X2NvbW1vbl9odygpOwogCW9tYXBfaW5pdF9pcnEoKTsKLQlvbWFwX2dwaW9faW5pdCgpOwogfQogCi1zdGF0aWMgaW50IHBhbG16NzFfa2V5bWFwW10gPSB7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHBhbG16NzFfa2V5bWFwW10gPSB7CiAJS0VZKDAsIDAsIEtFWV9GMSksCi0JS0VZKDAsIDEsIEtFWV9GMiksCi0JS0VZKDAsIDIsIEtFWV9GMyksCi0JS0VZKDAsIDMsIEtFWV9GNCksCi0JS0VZKDAsIDQsIEtFWV9QT1dFUiksCi0JS0VZKDEsIDAsIEtFWV9MRUZUKSwKKwlLRVkoMSwgMCwgS0VZX0YyKSwKKwlLRVkoMiwgMCwgS0VZX0YzKSwKKwlLRVkoMywgMCwgS0VZX0Y0KSwKKwlLRVkoNCwgMCwgS0VZX1BPV0VSKSwKKwlLRVkoMCwgMSwgS0VZX0xFRlQpLAogCUtFWSgxLCAxLCBLRVlfRE9XTiksCi0JS0VZKDEsIDIsIEtFWV9VUCksCi0JS0VZKDEsIDMsIEtFWV9SSUdIVCksCi0JS0VZKDEsIDQsIEtFWV9FTlRFUiksCi0JS0VZKDIsIDAsIEtFWV9DQU1FUkEpLAotCTAsCisJS0VZKDIsIDEsIEtFWV9VUCksCisJS0VZKDMsIDEsIEtFWV9SSUdIVCksCisJS0VZKDQsIDEsIEtFWV9FTlRFUiksCisJS0VZKDAsIDIsIEtFWV9DQU1FUkEpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBtYXRyaXhfa2V5bWFwX2RhdGEgcGFsbXo3MV9rZXltYXBfZGF0YSA9IHsKKwkua2V5bWFwCQk9IHBhbG16NzFfa2V5bWFwLAorCS5rZXltYXBfc2l6ZQk9IEFSUkFZX1NJWkUocGFsbXo3MV9rZXltYXApLAogfTsKIAogc3RhdGljIHN0cnVjdCBvbWFwX2twX3BsYXRmb3JtX2RhdGEgcGFsbXo3MV9rcF9kYXRhID0gewogCS5yb3dzCT0gOCwKIAkuY29scwk9IDgsCi0JLmtleW1hcAk9IHBhbG16NzFfa2V5bWFwLAotCS5yZXAJPSAxLAorCS5rZXltYXBfZGF0YQk9ICZwYWxtejcxX2tleW1hcF9kYXRhLAorCS5yZXAJPSB0cnVlLAogCS5kZWxheQk9IDgwLAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wZXJzZXVzMi5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wZXJzZXVzMi5jCmluZGV4IGE4ZDE2YTIuLjNjOGVlODQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGVyc2V1czIuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBlcnNldXMyLmMKQEAgLTM2LDM2ICszNiwzNSBAQAogI2luY2x1ZGUgPHBsYXQvY29tbW9uLmg+CiAjaW5jbHVkZSA8cGxhdC9ib2FyZC5oPgogCi1zdGF0aWMgaW50IHAyX2tleW1hcFtdID0gewotCUtFWSgwLDAsS0VZX1VQKSwKLQlLRVkoMCwxLEtFWV9SSUdIVCksCi0JS0VZKDAsMixLRVlfTEVGVCksCi0JS0VZKDAsMyxLRVlfRE9XTiksCi0JS0VZKDAsNCxLRVlfRU5URVIpLAotCUtFWSgxLDAsS0VZX0YxMCksCi0JS0VZKDEsMSxLRVlfU0VORCksCi0JS0VZKDEsMixLRVlfRU5EKSwKLQlLRVkoMSwzLEtFWV9WT0xVTUVET1dOKSwKLQlLRVkoMSw0LEtFWV9WT0xVTUVVUCksCi0JS0VZKDEsNSxLRVlfUkVDT1JEKSwKLQlLRVkoMiwwLEtFWV9GOSksCi0JS0VZKDIsMSxLRVlfMyksCi0JS0VZKDIsMixLRVlfNiksCi0JS0VZKDIsMyxLRVlfOSksCi0JS0VZKDIsNCxLRVlfS1BET1QpLAotCUtFWSgzLDAsS0VZX0JBQ0spLAotCUtFWSgzLDEsS0VZXzIpLAotCUtFWSgzLDIsS0VZXzUpLAotCUtFWSgzLDMsS0VZXzgpLAotCUtFWSgzLDQsS0VZXzApLAotCUtFWSgzLDUsS0VZX0tQU0xBU0gpLAotCUtFWSg0LDAsS0VZX0hPTUUpLAotCUtFWSg0LDEsS0VZXzEpLAotCUtFWSg0LDIsS0VZXzQpLAotCUtFWSg0LDMsS0VZXzcpLAotCUtFWSg0LDQsS0VZX0tQQVNURVJJU0spLAotCUtFWSg0LDUsS0VZX1BPV0VSKSwKLQkwCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHAyX2tleW1hcFtdID0geworCUtFWSgwLCAwLCBLRVlfVVApLAorCUtFWSgxLCAwLCBLRVlfUklHSFQpLAorCUtFWSgyLCAwLCBLRVlfTEVGVCksCisJS0VZKDMsIDAsIEtFWV9ET1dOKSwKKwlLRVkoNCwgMCwgS0VZX0VOVEVSKSwKKwlLRVkoMCwgMSwgS0VZX0YxMCksCisJS0VZKDEsIDEsIEtFWV9TRU5EKSwKKwlLRVkoMiwgMSwgS0VZX0VORCksCisJS0VZKDMsIDEsIEtFWV9WT0xVTUVET1dOKSwKKwlLRVkoNCwgMSwgS0VZX1ZPTFVNRVVQKSwKKwlLRVkoNSwgMSwgS0VZX1JFQ09SRCksCisJS0VZKDAsIDIsIEtFWV9GOSksCisJS0VZKDEsIDIsIEtFWV8zKSwKKwlLRVkoMiwgMiwgS0VZXzYpLAorCUtFWSgzLCAyLCBLRVlfOSksCisJS0VZKDQsIDIsIEtFWV9LUERPVCksCisJS0VZKDAsIDMsIEtFWV9CQUNLKSwKKwlLRVkoMSwgMywgS0VZXzIpLAorCUtFWSgyLCAzLCBLRVlfNSksCisJS0VZKDMsIDMsIEtFWV84KSwKKwlLRVkoNCwgMywgS0VZXzApLAorCUtFWSg1LCAzLCBLRVlfS1BTTEFTSCksCisJS0VZKDAsIDQsIEtFWV9IT01FKSwKKwlLRVkoMSwgNCwgS0VZXzEpLAorCUtFWSgyLCA0LCBLRVlfNCksCisJS0VZKDMsIDQsIEtFWV83KSwKKwlLRVkoNCwgNCwgS0VZX0tQQVNURVJJU0spLAorCUtFWSg1LCA0LCBLRVlfUE9XRVIpLAogfTsKIAogc3RhdGljIHN0cnVjdCBzbWM5MXhfcGxhdGRhdGEgc21jOTF4X2luZm8gPSB7CkBAIC0yMTEsMTMgKzIxMCwxNyBAQAogCX0sCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG1hdHJpeF9rZXltYXBfZGF0YSBwMl9rZXltYXBfZGF0YSA9IHsKKwkua2V5bWFwCQk9IHAyX2tleW1hcCwKKwkua2V5bWFwX3NpemUJPSBBUlJBWV9TSVpFKHAyX2tleW1hcCksCit9OworCiBzdGF0aWMgc3RydWN0IG9tYXBfa3BfcGxhdGZvcm1fZGF0YSBrcF9kYXRhID0gewogCS5yb3dzCQk9IDgsCiAJLmNvbHMJCT0gOCwKLQkua2V5bWFwCQk9IHAyX2tleW1hcCwKLQkua2V5bWFwc2l6ZQk9IEFSUkFZX1NJWkUocDJfa2V5bWFwKSwKKwkua2V5bWFwX2RhdGEJPSAmcDJfa2V5bWFwX2RhdGEsCiAJLmRlbGF5CQk9IDQsCi0JLmRib3VuY2UJPSAxLAorCS5kYm91bmNlCT0gdHJ1ZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGtwX2RldmljZSA9IHsKQEAgLTI1MSw4ICsyNTQsMTkgQEAKIAl7IE9NQVBfVEFHX0xDRCwJCSZwZXJzZXVzMl9sY2RfY29uZmlnIH0sCiB9OwogCitzdGF0aWMgdm9pZCBfX2luaXQgcGVyc2V1czJfaW5pdF9zbWM5MXgodm9pZCkKK3sKKwlmcGdhX3dyaXRlKDEsIEgyUDJfREJHX0ZQR0FfTEFOX1JFU0VUKTsKKwltZGVsYXkoNTApOworCWZwZ2Ffd3JpdGUoZnBnYV9yZWFkKEgyUDJfREJHX0ZQR0FfTEFOX1JFU0VUKSAmIH4xLAorCQkgICBIMlAyX0RCR19GUEdBX0xBTl9SRVNFVCk7CisJbWRlbGF5KDUwKTsKK30KKwogc3RhdGljIHZvaWQgX19pbml0IG9tYXBfcGVyc2V1czJfaW5pdCh2b2lkKQogeworCXBlcnNldXMyX2luaXRfc21jOTF4KCk7CisKIAlpZiAoZ3Bpb19yZXF1ZXN0KFAyX05BTkRfUkJfR1BJT19QSU4sICJOQU5EIHJlYWR5IikgPCAwKQogCQlCVUcoKTsKIAlncGlvX2RpcmVjdGlvbl9pbnB1dChQMl9OQU5EX1JCX0dQSU9fUElOKTsKQEAgLTI4MCwyMSArMjk0LDEwIEBACiAJb21hcF9yZWdpc3Rlcl9pMmNfYnVzKDEsIDEwMCwgTlVMTCwgMCk7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBwZXJzZXVzMl9pbml0X3NtYzkxeCh2b2lkKQotewotCWZwZ2Ffd3JpdGUoMSwgSDJQMl9EQkdfRlBHQV9MQU5fUkVTRVQpOwotCW1kZWxheSg1MCk7Ci0JZnBnYV93cml0ZShmcGdhX3JlYWQoSDJQMl9EQkdfRlBHQV9MQU5fUkVTRVQpICYgfjEsCi0JCSAgIEgyUDJfREJHX0ZQR0FfTEFOX1JFU0VUKTsKLQltZGVsYXkoNTApOwotfQotCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9wZXJzZXVzMl9pbml0X2lycSh2b2lkKQogewogCW9tYXAxX2luaXRfY29tbW9uX2h3KCk7CiAJb21hcF9pbml0X2lycSgpOwotCW9tYXBfZ3Bpb19pbml0KCk7Ci0JcGVyc2V1czJfaW5pdF9zbWM5MXgoKTsKIH0KIC8qIE9ubHkgRlBHQSBuZWVkcyB0byBiZSBtYXBwZWQgaGVyZS4gQWxsIG90aGVycyBhcmUgZG9uZSB3aXRoIGlvcmVtYXAgKi8KIHN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2Mgb21hcF9wZXJzZXVzMl9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtc3gxLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXN4MS5jCmluZGV4IGQyNWY1OWUuLmQ0MWZlMmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtc3gxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1zeDEuYwpAQCAtMTY0LDM2ICsxNjQsMzUgQEAKIAogLyotLS0tLS0tLS0tLSBLZXlwYWQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBpbnQgc3gxX2tleW1hcFtdID0gewotCUtFWSg1LCAzLCBHUk9VUF8wIHwgMTE3KSwgLyogY2FtZXJhIFF0OjpLZXlfRjE3ICovCi0JS0VZKDAsIDQsIEdST1VQXzAgfCAxMTQpLCAvKiB2b2ljZSBtZW1vIFF0OjpLZXlfRjE0ICovCi0JS0VZKDEsIDQsIEdST1VQXzIgfCAxMTQpLCAvKiB2b2ljZSBtZW1vICovCi0JS0VZKDIsIDQsIEdST1VQXzMgfCAxMTQpLCAvKiB2b2ljZSBtZW1vICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHN4MV9rZXltYXBbXSA9IHsKKwlLRVkoMywgNSwgR1JPVVBfMCB8IDExNyksIC8qIGNhbWVyYSBRdDo6S2V5X0YxNyAqLworCUtFWSg0LCAwLCBHUk9VUF8wIHwgMTE0KSwgLyogdm9pY2UgbWVtbyBRdDo6S2V5X0YxNCAqLworCUtFWSg0LCAxLCBHUk9VUF8yIHwgMTE0KSwgLyogdm9pY2UgbWVtbyAqLworCUtFWSg0LCAyLCBHUk9VUF8zIHwgMTE0KSwgLyogdm9pY2UgbWVtbyAqLwogCUtFWSgwLCAwLCBHUk9VUF8xIHwgS0VZX0YxMiksCS8qIHJlZCBidXR0b24gUXQ6OktleV9IYW5ndXAgKi8KLQlLRVkoNCwgMywgR1JPVVBfMSB8IEtFWV9MRUZUKSwKLQlLRVkoMiwgMywgR1JPVVBfMSB8IEtFWV9ET1dOKSwKLQlLRVkoMSwgMywgR1JPVVBfMSB8IEtFWV9SSUdIVCksCi0JS0VZKDAsIDMsIEdST1VQXzEgfCBLRVlfVVApLAorCUtFWSgzLCA0LCBHUk9VUF8xIHwgS0VZX0xFRlQpLAorCUtFWSgzLCAyLCBHUk9VUF8xIHwgS0VZX0RPV04pLAorCUtFWSgzLCAxLCBHUk9VUF8xIHwgS0VZX1JJR0hUKSwKKwlLRVkoMywgMCwgR1JPVVBfMSB8IEtFWV9VUCksCiAJS0VZKDMsIDMsIEdST1VQXzEgfCBLRVlfUE9XRVIpLCAvKiBqb3lzdGljayBwcmVzcyBvciBRdDo6S2V5X1NlbGVjdCAqLwotCUtFWSg1LCAwLCBHUk9VUF8xIHwgS0VZXzEpLAotCUtFWSg0LCAwLCBHUk9VUF8xIHwgS0VZXzIpLAotCUtFWSgzLCAwLCBHUk9VUF8xIHwgS0VZXzMpLAotCUtFWSgzLCA0LCBHUk9VUF8xIHwgS0VZXzQpLAorCUtFWSgwLCA1LCBHUk9VUF8xIHwgS0VZXzEpLAorCUtFWSgwLCA0LCBHUk9VUF8xIHwgS0VZXzIpLAorCUtFWSgwLCAzLCBHUk9VUF8xIHwgS0VZXzMpLAorCUtFWSg0LCAzLCBHUk9VUF8xIHwgS0VZXzQpLAogCUtFWSg0LCA0LCBHUk9VUF8xIHwgS0VZXzUpLAotCUtFWSg1LCA0LCBHUk9VUF8xIHwgS0VZX0tQQVNURVJJU0spLC8qICIqIiAqLwotCUtFWSg0LCAxLCBHUk9VUF8xIHwgS0VZXzYpLAotCUtFWSg1LCAxLCBHUk9VUF8xIHwgS0VZXzcpLAotCUtFWSgzLCAxLCBHUk9VUF8xIHwgS0VZXzgpLAotCUtFWSgzLCAyLCBHUk9VUF8xIHwgS0VZXzkpLAotCUtFWSg1LCAyLCBHUk9VUF8xIHwgS0VZXzApLAotCUtFWSg0LCAyLCBHUk9VUF8xIHwgMTEzKSwJLyogIyBGMTMgVG9nZ2xlIGlucHV0IG1ldGhvZCBRdDo6S2V5X0YxMyAqLwotCUtFWSgwLCAxLCBHUk9VUF8xIHwgS0VZX0YxMSksCS8qIGdyZWVuIGJ1dHRvbiBRdDo6S2V5X0NhbGwgKi8KLQlLRVkoMSwgMiwgR1JPVVBfMSB8IEtFWV9ZRU4pLAkvKiBsZWZ0IHNvZnQgUXQ6OktleV9Db250ZXh0MSAqLworCUtFWSg0LCA1LCBHUk9VUF8xIHwgS0VZX0tQQVNURVJJU0spLC8qICIqIiAqLworCUtFWSgxLCA0LCBHUk9VUF8xIHwgS0VZXzYpLAorCUtFWSgxLCA1LCBHUk9VUF8xIHwgS0VZXzcpLAorCUtFWSgxLCAzLCBHUk9VUF8xIHwgS0VZXzgpLAorCUtFWSgyLCAzLCBHUk9VUF8xIHwgS0VZXzkpLAorCUtFWSgyLCA1LCBHUk9VUF8xIHwgS0VZXzApLAorCUtFWSgyLCA0LCBHUk9VUF8xIHwgMTEzKSwgLyogIyBGMTMgVG9nZ2xlIGlucHV0IG1ldGhvZCBRdDo6S2V5X0YxMyAqLworCUtFWSgxLCAwLCBHUk9VUF8xIHwgS0VZX0YxMSksCS8qIGdyZWVuIGJ1dHRvbiBRdDo6S2V5X0NhbGwgKi8KKwlLRVkoMiwgMSwgR1JPVVBfMSB8IEtFWV9ZRU4pLAkvKiBsZWZ0IHNvZnQgUXQ6OktleV9Db250ZXh0MSAqLwogCUtFWSgyLCAyLCBHUk9VUF8xIHwgS0VZX0Y4KSwJLyogcmlnaHQgc29mdCBRdDo6S2V5X0JhY2sgKi8KLQlLRVkoMiwgMSwgR1JPVVBfMSB8IEtFWV9MRUZUU0hJRlQpLCAvKiBzaGlmdCAqLworCUtFWSgxLCAyLCBHUk9VUF8xIHwgS0VZX0xFRlRTSElGVCksIC8qIHNoaWZ0ICovCiAJS0VZKDEsIDEsIEdST1VQXzEgfCBLRVlfQkFDS1NQQUNFKSwgLyogQyAoY2xlYXIpICovCi0JS0VZKDAsIDIsIEdST1VQXzEgfCBLRVlfRjcpLAkvKiBtZW51IFF0OjpLZXlfTWVudSAqLwotCTAKKwlLRVkoMiwgMCwgR1JPVVBfMSB8IEtFWV9GNyksCS8qIG1lbnUgUXQ6OktleV9NZW51ICovCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHN4MV9rcF9yZXNvdXJjZXNbXSA9IHsKQEAgLTIwNCwxMSArMjAzLDE1IEBACiAJfSwKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWF0cml4X2tleW1hcF9kYXRhIHN4MV9rZXltYXBfZGF0YSA9IHsKKwkua2V5bWFwCQk9IHN4MV9rZXltYXAsCisJLmtleW1hcF9zaXplCT0gQVJSQVlfU0laRShzeDFfa2V5bWFwKSwKK307CisKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9rcF9wbGF0Zm9ybV9kYXRhIHN4MV9rcF9kYXRhID0gewogCS5yb3dzCQk9IDYsCiAJLmNvbHMJCT0gNiwKLQkua2V5bWFwCT0gc3gxX2tleW1hcCwKLQkua2V5bWFwc2l6ZSA9IEFSUkFZX1NJWkUoc3gxX2tleW1hcCksCisJLmtleW1hcF9kYXRhCT0gJnN4MV9rZXltYXBfZGF0YSwKIAkuZGVsYXkJPSA4MCwKIH07CiAKQEAgLTQwOSw3ICs0MTIsNiBAQAogewogCW9tYXAxX2luaXRfY29tbW9uX2h3KCk7CiAJb21hcF9pbml0X2lycSgpOwotCW9tYXBfZ3Bpb19pbml0KCk7CiB9CiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXZvaWNlYmx1ZS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC12b2ljZWJsdWUuYwppbmRleCBmNTk5MmMyLi44MTVhNjljIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXZvaWNlYmx1ZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtdm9pY2VibHVlLmMKQEAgLTgzLDYgKzgzLDkgQEAKIAogc3RhdGljIGludCBfX2luaXQgZXh0X3VhcnRfaW5pdCh2b2lkKQogeworCWlmICghbWFjaGluZV9pc192b2ljZWJsdWUoKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAlyZXR1cm4gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZzZXJpYWxfZGV2aWNlKTsKIH0KIGFyY2hfaW5pdGNhbGwoZXh0X3VhcnRfaW5pdCk7CkBAIC0xNTgsNyArMTYxLDYgQEAKIHsKIAlvbWFwMV9pbml0X2NvbW1vbl9odygpOwogCW9tYXBfaW5pdF9pcnEoKTsKLQlvbWFwX2dwaW9faW5pdCgpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgdm9pY2VibHVlX2luaXQodm9pZCkKQEAgLTIzNiw2ICsyMzgsOSBAQAogCiBzdGF0aWMgaW50IF9faW5pdCB2b2ljZWJsdWVfc2V0dXAodm9pZCkKIHsKKwlpZiAoIW1hY2hpbmVfaXNfdm9pY2VibHVlKCkpCisJCXJldHVybiAtRU5PREVWOworCiAJLyogU2V0dXAgcGFuaWMgbm90aWZpZXIgKi8KIAlhdG9taWNfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJnBhbmljX25vdGlmaWVyX2xpc3QsICZwYW5pY19ibG9jayk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvY2xvY2suYwppbmRleCBiOGM3ZmI5Li44NGVmNzA0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9jbG9jay5jCkBAIC0xNyw5ICsxNyw5IEBACiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9jbGtkZXYuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL2Nsa2Rldi5oPgogCiAjaW5jbHVkZSA8cGxhdC9jcHUuaD4KICNpbmNsdWRlIDxwbGF0L3VzYi5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9jbG9ja19kYXRhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2Nsb2NrX2RhdGEuYwppbmRleCBhZjU0MTE0Li45MjQwMGI5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2Nsb2NrX2RhdGEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2Nsb2NrX2RhdGEuYwpAQCAtMTQzLDcgKzE0Myw3IEBACiAgKiBhY3RpdmF0aW9uLiAgWyBHUElPIGNvZGUgZm9yIDE1MTAgXQogICovCiBzdGF0aWMgc3RydWN0IGNsayBhcm1fZ3Bpb19jayA9IHsKLQkubmFtZQkJPSAiYXJtX2dwaW9fY2siLAorCS5uYW1lCQk9ICJpY2siLAogCS5vcHMJCT0gJmNsa29wc19nZW5lcmljLAogCS5wYXJlbnQJCT0gJmNrX2RwbGwxLAogCS5mbGFncwkJPSBFTkFCTEVfT05fSU5JVCwKQEAgLTY4NCw3ICs2ODQsNyBAQAogCUNMSyhOVUxMLAkiY2tfc29zc2kiLAkmc29zc2lfY2ssCUNLXzE2WFgpLAogCUNMSyhOVUxMLAkiYXJtX2NrIiwJJmFybV9jaywJQ0tfMTZYWCB8IENLXzE1MTAgfCBDS18zMTApLAogCUNMSyhOVUxMLAkiYXJtcGVyX2NrIiwJJmFybXBlcl9jay5jbGssCUNLXzE2WFggfCBDS18xNTEwIHwgQ0tfMzEwKSwKLQlDTEsoTlVMTCwJImFybV9ncGlvX2NrIiwJJmFybV9ncGlvX2NrLAlDS18xNTEwIHwgQ0tfMzEwKSwKKwlDTEsoIm9tYXBfZ3Bpby4wIiwgImljayIsCSZhcm1fZ3Bpb19jaywJQ0tfMTUxMCB8IENLXzMxMCksCiAJQ0xLKE5VTEwsCSJhcm14b3JfY2siLAkmYXJteG9yX2NrLmNsaywJQ0tfMTZYWCB8IENLXzE1MTAgfCBDS18zMTAgfCBDS183WFgpLAogCUNMSyhOVUxMLAkiYXJtdGltX2NrIiwJJmFybXRpbV9jay5jbGssCUNLXzE2WFggfCBDS18xNTEwIHwgQ0tfMzEwKSwKIAlDTEsoIm9tYXBfd2R0IiwJImZjayIsCQkmYXJtd2R0X2NrLmNsaywJQ0tfMTZYWCB8IENLXzE1MTAgfCBDS18zMTApLApAQCAtNzM2LDkgKzczNiw5IEBACiAJQ0xLKCJtbWNpLW9tYXAuMSIsICJpY2siLAkmYXJtcGVyX2NrLmNsaywJQ0tfMTZYWCksCiAJLyogVmlydHVhbCBjbG9ja3MgKi8KIAlDTEsoTlVMTCwJIm1wdSIsCQkmdmlydHVhbF9ja19tcHUsIENLXzE2WFggfCBDS18xNTEwIHwgQ0tfMzEwKSwKLQlDTEsoImkyY19vbWFwLjEiLCAiZmNrIiwJJmkyY19mY2ssCUNLXzE2WFggfCBDS18xNTEwIHwgQ0tfMzEwIHwgQ0tfN1hYKSwKLQlDTEsoImkyY19vbWFwLjEiLCAiaWNrIiwJJmkyY19pY2ssCUNLXzE2WFgpLAotCUNMSygiaTJjX29tYXAuMSIsICJpY2siLAkmZHVtbXlfY2ssCUNLXzE1MTAgfCBDS18zMTAgfCBDS183WFgpLAorCUNMSygib21hcF9pMmMuMSIsICJmY2siLAkmaTJjX2ZjaywJQ0tfMTZYWCB8IENLXzE1MTAgfCBDS18zMTAgfCBDS183WFgpLAorCUNMSygib21hcF9pMmMuMSIsICJpY2siLAkmaTJjX2ljaywJQ0tfMTZYWCksCisJQ0xLKCJvbWFwX2kyYy4xIiwgImljayIsCSZkdW1teV9jaywJQ0tfMTUxMCB8IENLXzMxMCB8IENLXzdYWCksCiAJQ0xLKCJvbWFwMV9zcGkxMDBrLjEiLCAiZmNrIiwJJmR1bW15X2NrLAlDS183WFgpLAogCUNMSygib21hcDFfc3BpMTAway4xIiwgImljayIsCSZkdW1teV9jaywJQ0tfN1hYKSwKIAlDTEsoIm9tYXAxX3NwaTEwMGsuMiIsICJmY2siLAkmZHVtbXlfY2ssCUNLXzdYWCksCkBAIC04MjMsMTIgKzgyMywxMCBAQAogCQkJY3J5c3RhbF90eXBlID0gaW5mby0+c3lzdGVtX2Nsb2NrX3R5cGU7CiAJfQogCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNzMwKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA4NTApCi0JY2tfcmVmLnJhdGUgPSAxMzAwMDAwMDsKLSNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE2WFgpCi0JaWYgKGNyeXN0YWxfdHlwZSA9PSAyKQorCWlmIChjcHVfaXNfb21hcDd4eCgpKQorCQlja19yZWYucmF0ZSA9IDEzMDAwMDAwOworCWlmIChjcHVfaXNfb21hcDE2eHgoKSAmJiBjcnlzdGFsX3R5cGUgPT0gMikKIAkJY2tfcmVmLnJhdGUgPSAxOTIwMDAwMDsKLSNlbmRpZgogCiAJcHJfaW5mbygiQ2xvY2tzOiBBUk1fU1lTU1Q6IDB4JTA0eCBEUExMX0NUTDogMHglMDR4IEFSTV9DS0NUTDogIgogCQkiMHglMDR4XG4iLCBvbWFwX3JlYWR3KEFSTV9TWVNTVCksIG9tYXBfcmVhZHcoRFBMTF9DVEwpLApAQCAtODgzLDEwICs4ODEsMTEgQEAKIAkgICAgICAgY2tfZHBsbDEucmF0ZSAvIDEwMDAwMDAsIChja19kcGxsMS5yYXRlIC8gMTAwMDAwKSAlIDEwLAogCSAgICAgICBhcm1fY2sucmF0ZSAvIDEwMDAwMDAsIChhcm1fY2sucmF0ZSAvIDEwMDAwMCkgJSAxMCk7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19NQUNIX09NQVBfUEVSU0VVUzIpIHx8IGRlZmluZWQoQ09ORklHX01BQ0hfT01BUF9GU0FNUExFKQotCS8qIFNlbGVjdCBzbGljZXIgb3V0cHV0IGFzIE9NQVAgaW5wdXQgY2xvY2sgKi8KLQlvbWFwX3dyaXRldyhvbWFwX3JlYWR3KE9NQVA3WFhfUENDX1VQTERfQ1RSTCkgJiB+MHgxLCBPTUFQN1hYX1BDQ19VUExEX0NUUkwpOwotI2VuZGlmCisJaWYgKG1hY2hpbmVfaXNfb21hcF9wZXJzZXVzMigpIHx8IG1hY2hpbmVfaXNfb21hcF9mc2FtcGxlKCkpIHsKKwkJLyogU2VsZWN0IHNsaWNlciBvdXRwdXQgYXMgT01BUCBpbnB1dCBjbG9jayAqLworCQlvbWFwX3dyaXRldyhvbWFwX3JlYWR3KE9NQVA3WFhfUENDX1VQTERfQ1RSTCkgJiB+MHgxLAorCQkJCU9NQVA3WFhfUENDX1VQTERfQ1RSTCk7CisJfQogCiAJLyogQW1zdHJhZCBEZWx0YSB3YW50cyBCQ0xLIGhpZ2ggd2hlbiBpbmFjdGl2ZSAqLwogCWlmIChtYWNoaW5lX2lzX2Ftc19kZWx0YSgpKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2RldmljZXMuYwppbmRleCBlN2Y5ZWU2Li5iMGY0YzIzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2RldmljZXMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2RldmljZXMuYwpAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgogCisjaW5jbHVkZSA8bWFjaC9jYW1lcmEuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAKQEAgLTI4Nyw2ICsyODgsOSBAQAogICovCiBzdGF0aWMgaW50IF9faW5pdCBvbWFwMV9pbml0X2RldmljZXModm9pZCkKIHsKKwlpZiAoIWNwdV9jbGFzc19pc19vbWFwMSgpKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCS8qIHBsZWFzZSBrZWVwIHRoZXNlIGNhbGxzLCBhbmQgdGhlaXIgaW1wbGVtZW50YXRpb25zIGFib3ZlLAogCSAqIGluIGFscGhhYmV0aWNhbCBvcmRlciBzbyB0aGV5J3JlIGVhc2llciB0byBzb3J0IHRocm91Z2guCiAJICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2RtYS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9kbWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODU1OTM0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9kbWEuYwpAQCAtMCwwICsxLDM5MCBAQAorLyoKKyAqIE9NQVAxL09NQVA3eHggLSBzcGVjaWZpYyBETUEgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbgorICogQXV0aG9yOiBKdWhhIFlyasO2bMOkIDxqdWhhLnlyam9sYUBub2tpYS5jb20+CisgKiBETUEgY2hhbm5lbCBsaW5raW5nIGZvciAxNjEwIGJ5IFNhbXVlbCBPcnRpeiA8c2FtdWVsLm9ydGl6QG5va2lhLmNvbT4KKyAqIEdyYXBoaWNzIERNQSBhbmQgTENEIERNQSBncmFwaGljcyB0cmFuZm9ybWF0aW9ucworICogYnkgSW1yZSBEZWFrIDxpbXJlLmRlYWtAbm9raWEuY29tPgorICogT01BUDIvMyBzdXBwb3J0IENvcHlyaWdodCAoQykgMjAwNC0yMDA3IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKiBTb21lIGZ1bmN0aW9ucyBiYXNlZCBvbiBlYXJsaWVyIGRtYS1vbWFwLmMgQ29weXJpZ2h0IChDKSAyMDAxIFJpZGdlUnVuLCBJbmMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZCAtIGh0dHA6Ly93d3cudGkuY29tLworICogQ29udmVydGVkIERNQSBsaWJyYXJ5IGludG8gcGxhdGZvcm0gZHJpdmVyCisgKiAgICAgICAgICAgICAgICAgICAtIEcsIE1hbmp1bmF0aCBLb25kYWlhaCA8bWFuanVna0B0aS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorCisjaW5jbHVkZSA8cGxhdC9kbWEuaD4KKyNpbmNsdWRlIDxwbGF0L3RjLmg+CisjaW5jbHVkZSA8cGxhdC9pcnFzLmg+CisKKyNkZWZpbmUgT01BUDFfRE1BX0JBU0UJCQkoMHhmZmZlZDgwMCkKKyNkZWZpbmUgT01BUDFfTE9HSUNBTF9ETUFfQ0hfQ09VTlQJMTcKKyNkZWZpbmUgT01BUDFfRE1BX1NUUklERQkJMHg0MAorCitzdGF0aWMgdTMyIGVycmF0YTsKK3N0YXRpYyB1MzIgZW5hYmxlXzE1MTBfbW9kZTsKK3N0YXRpYyB1OCBkbWFfc3RyaWRlOworc3RhdGljIGVudW0gb21hcF9yZWdfb2Zmc2V0cyBkbWFfY29tbW9uX2NoX3N0YXJ0LCBkbWFfY29tbW9uX2NoX2VuZDsKKworc3RhdGljIHUxNiByZWdfbWFwW10gPSB7CisJW0dDUl0JCT0gMHg0MDAsCisJW0dTQ1JdCQk9IDB4NDA0LAorCVtHUlNUMV0JCT0gMHg0MDgsCisJW0hXX0lEXQkJPSAweDQ0MiwKKwlbUENIMl9JRF0JPSAweDQ0NCwKKwlbUENIMF9JRF0JPSAweDQ0NiwKKwlbUENIMV9JRF0JPSAweDQ0OCwKKwlbUENIR19JRF0JPSAweDQ0YSwKKwlbUENIRF9JRF0JPSAweDQ0YywKKwlbQ0FQU18wXQk9IDB4NDRlLAorCVtDQVBTXzFdCT0gMHg0NTIsCisJW0NBUFNfMl0JPSAweDQ1NiwKKwlbQ0FQU18zXQk9IDB4NDU4LAorCVtDQVBTXzRdCT0gMHg0NWEsCisJW1BDSDJfU1JdCT0gMHg0NjAsCisJW1BDSDBfU1JdCT0gMHg0ODAsCisJW1BDSDFfU1JdCT0gMHg0ODIsCisJW1BDSERfU1JdCT0gMHg0YzAsCisKKwkvKiBDb21tb24gUmVnaXN0ZXJzICovCisJW0NTRFBdCQk9IDB4MDAsCisJW0NDUl0JCT0gMHgwMiwKKwlbQ0lDUl0JCT0gMHgwNCwKKwlbQ1NSXQkJPSAweDA2LAorCVtDRU5dCQk9IDB4MTAsCisJW0NGTl0JCT0gMHgxMiwKKwlbQ1NGSV0JCT0gMHgxNCwKKwlbQ1NFSV0JCT0gMHgxNiwKKwlbQ1BDXQkJPSAweDE4LAkvKiAxNXh4IG9ubHkgKi8KKwlbQ1NBQ10JCT0gMHgxOCwKKwlbQ0RBQ10JCT0gMHgxYSwKKwlbQ0RFSV0JCT0gMHgxYywKKwlbQ0RGSV0JCT0gMHgxZSwKKwlbQ0xOS19DVFJMXQk9IDB4MjgsCisKKwkvKiBDaGFubmVsIHNwZWNpZmljIHJlZ2lzdGVyIG9mZnNldHMgKi8KKwlbQ1NTQV0JCT0gMHgwOCwKKwlbQ0RTQV0JCT0gMHgwYywKKwlbQ09MT1JdCQk9IDB4MjAsCisJW0NDUjJdCQk9IDB4MjQsCisJW0xDSF9DVFJMXQk9IDB4MmEsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHJlc1tdIF9faW5pdGRhdGEgPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBPTUFQMV9ETUFfQkFTRSwKKwkJLmVuZAk9IE9NQVAxX0RNQV9CQVNFICsgU1pfMksgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLm5hbWUgICA9ICIwIiwKKwkJLnN0YXJ0ICA9IElOVF9ETUFfQ0gwXzYsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCVsyXSA9IHsKKwkJLm5hbWUgICA9ICIxIiwKKwkJLnN0YXJ0ICA9IElOVF9ETUFfQ0gxXzcsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCVszXSA9IHsKKwkJLm5hbWUgICA9ICIyIiwKKwkJLnN0YXJ0ICA9IElOVF9ETUFfQ0gyXzgsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCVs0XSA9IHsKKwkJLm5hbWUgICA9ICIzIiwKKwkJLnN0YXJ0ICA9IElOVF9ETUFfQ0gzLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwlbNV0gPSB7CisJCS5uYW1lICAgPSAiNCIsCisJCS5zdGFydCAgPSBJTlRfRE1BX0NINCwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJWzZdID0geworCQkubmFtZSAgID0gIjUiLAorCQkuc3RhcnQgID0gSU5UX0RNQV9DSDUsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCS8qIEhhbmRsZWQgaW4gbGNkX2RtYS5jICovCisJWzddID0geworCQkubmFtZSAgID0gIjYiLAorCQkuc3RhcnQgID0gSU5UXzE2MTBfRE1BX0NINiwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJLyogaXJxJ3MgZm9yIG9tYXAxNnh4IGFuZCBvbWFwN3h4ICovCisJWzhdID0geworCQkubmFtZSAgID0gIjciLAorCQkuc3RhcnQgID0gSU5UXzE2MTBfRE1BX0NINywKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJWzldID0geworCQkubmFtZSAgID0gIjgiLAorCQkuc3RhcnQgID0gSU5UXzE2MTBfRE1BX0NIOCwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJWzEwXSA9IHsKKwkJLm5hbWUgID0gIjkiLAorCQkuc3RhcnQgPSBJTlRfMTYxMF9ETUFfQ0g5LAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCVsxMV0gPSB7CisJCS5uYW1lICA9ICIxMCIsCisJCS5zdGFydCA9IElOVF8xNjEwX0RNQV9DSDEwLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCVsxMl0gPSB7CisJCS5uYW1lICA9ICIxMSIsCisJCS5zdGFydCA9IElOVF8xNjEwX0RNQV9DSDExLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCVsxM10gPSB7CisJCS5uYW1lICA9ICIxMiIsCisJCS5zdGFydCA9IElOVF8xNjEwX0RNQV9DSDEyLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCVsxNF0gPSB7CisJCS5uYW1lICA9ICIxMyIsCisJCS5zdGFydCA9IElOVF8xNjEwX0RNQV9DSDEzLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCVsxNV0gPSB7CisJCS5uYW1lICA9ICIxNCIsCisJCS5zdGFydCA9IElOVF8xNjEwX0RNQV9DSDE0LAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCVsxNl0gPSB7CisJCS5uYW1lICA9ICIxNSIsCisJCS5zdGFydCA9IElOVF8xNjEwX0RNQV9DSDE1LAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCVsxN10gPSB7CisJCS5uYW1lICA9ICIxNiIsCisJCS5zdGFydCA9IElOVF9ETUFfTENELAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHZvaWQgX19pb21lbSAqZG1hX2Jhc2U7CitzdGF0aWMgaW5saW5lIHZvaWQgZG1hX3dyaXRlKHUzMiB2YWwsIGludCByZWcsIGludCBsY2gpCit7CisJdTggIHN0cmlkZTsKKwl1MzIgb2Zmc2V0OworCisJc3RyaWRlID0gKHJlZyA+PSBkbWFfY29tbW9uX2NoX3N0YXJ0KSA/IGRtYV9zdHJpZGUgOiAwOworCW9mZnNldCA9IHJlZ19tYXBbcmVnXSArIChzdHJpZGUgKiBsY2gpOworCisJX19yYXdfd3JpdGV3KHZhbCwgZG1hX2Jhc2UgKyBvZmZzZXQpOworCWlmICgocmVnID4gQ0xOS19DVFJMICYmIHJlZyA8IENDRU4pIHx8CisJCQkocmVnID4gUENIRF9JRCAmJiByZWcgPCBDQVBTXzIpKSB7CisJCXUzMiBvZmZzZXQyID0gcmVnX21hcFtyZWddICsgMiArIChzdHJpZGUgKiBsY2gpOworCQlfX3Jhd193cml0ZXcodmFsID4+IDE2LCBkbWFfYmFzZSArIG9mZnNldDIpOworCX0KK30KKworc3RhdGljIGlubGluZSB1MzIgZG1hX3JlYWQoaW50IHJlZywgaW50IGxjaCkKK3sKKwl1OCBzdHJpZGU7CisJdTMyIG9mZnNldCwgdmFsOworCisJc3RyaWRlID0gKHJlZyA+PSBkbWFfY29tbW9uX2NoX3N0YXJ0KSA/IGRtYV9zdHJpZGUgOiAwOworCW9mZnNldCA9IHJlZ19tYXBbcmVnXSArIChzdHJpZGUgKiBsY2gpOworCisJdmFsID0gX19yYXdfcmVhZHcoZG1hX2Jhc2UgKyBvZmZzZXQpOworCWlmICgocmVnID4gQ0xOS19DVFJMICYmIHJlZyA8IENDRU4pIHx8CisJCQkocmVnID4gUENIRF9JRCAmJiByZWcgPCBDQVBTXzIpKSB7CisJCXUxNiB1cHBlcjsKKwkJdTMyIG9mZnNldDIgPSByZWdfbWFwW3JlZ10gKyAyICsgKHN0cmlkZSAqIGxjaCk7CisJCXVwcGVyID0gX19yYXdfcmVhZHcoZG1hX2Jhc2UgKyBvZmZzZXQyKTsKKwkJdmFsIHw9ICh1cHBlciA8PCAxNik7CisJfQorCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXAxX2NsZWFyX2xjaF9yZWdzKGludCBsY2gpCit7CisJaW50IGkgPSBkbWFfY29tbW9uX2NoX3N0YXJ0OworCisJZm9yICg7IGkgPD0gZG1hX2NvbW1vbl9jaF9lbmQ7IGkgKz0gMSkKKwkJZG1hX3dyaXRlKDAsIGksIGxjaCk7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXAxX2NsZWFyX2RtYShpbnQgbGNoKQoreworCXUzMiBsOworCisJbCA9IGRtYV9yZWFkKENDUiwgbGNoKTsKKwlsICY9IH5PTUFQX0RNQV9DQ1JfRU47CisJZG1hX3dyaXRlKGwsIENDUiwgbGNoKTsKKworCS8qIENsZWFyIHBlbmRpbmcgaW50ZXJydXB0cyAqLworCWwgPSBkbWFfcmVhZChDU1IsIGxjaCk7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXAxX3Nob3dfZG1hX2NhcHModm9pZCkKK3sKKwlpZiAoZW5hYmxlXzE1MTBfbW9kZSkgeworCQlwcmludGsoS0VSTl9JTkZPICJETUEgc3VwcG9ydCBmb3IgT01BUDE1eHggaW5pdGlhbGl6ZWRcbiIpOworCX0gZWxzZSB7CisJCXUxNiB3OworCQlwcmludGsoS0VSTl9JTkZPICJPTUFQIERNQSBoYXJkd2FyZSB2ZXJzaW9uICVkXG4iLAorCQkJCQkJCWRtYV9yZWFkKEhXX0lELCAwKSk7CisJCXByaW50ayhLRVJOX0lORk8gIkRNQSBjYXBhYmlsaXRpZXM6ICUwOHg6JTA4eDolMDR4OiUwNHg6JTA0eFxuIiwKKwkJCWRtYV9yZWFkKENBUFNfMCwgMCksIGRtYV9yZWFkKENBUFNfMSwgMCksCisJCQlkbWFfcmVhZChDQVBTXzIsIDApLCBkbWFfcmVhZChDQVBTXzMsIDApLAorCQkJZG1hX3JlYWQoQ0FQU180LCAwKSk7CisKKwkJLyogRGlzYWJsZSBPTUFQIDMuMC8zLjEgY29tcGF0aWJpbGl0eSBtb2RlLiAqLworCQl3ID0gZG1hX3JlYWQoR1NDUiwgMCk7CisJCXcgfD0gMSA8PCAzOworCQlkbWFfd3JpdGUodywgR1NDUiwgMCk7CisJfQorCXJldHVybjsKK30KKworc3RhdGljIHUzMiBjb25maWd1cmVfZG1hX2VycmF0YSh2b2lkKQoreworCisJLyoKKwkgKiBFcnJhdHVtIDMuMi8zLjM6IHNvbWV0aW1lcyAwIGlzIHJldHVybmVkIGlmIENTQUMvQ0RBQyBpcworCSAqIHJlYWQgYmVmb3JlIHRoZSBETUEgY29udHJvbGxlciBmaW5pc2hlZCBkaXNhYmxpbmcgdGhlIGNoYW5uZWwuCisJICovCisJaWYgKCFjcHVfaXNfb21hcDE1eHgoKSkKKwkJU0VUX0RNQV9FUlJBVEEoRE1BX0VSUkFUQV8zXzMpOworCisJcmV0dXJuIGVycmF0YTsKK30KKworc3RhdGljIGludCBfX2luaXQgb21hcDFfc3lzdGVtX2RtYV9pbml0KHZvaWQpCit7CisJc3RydWN0IG9tYXBfc3lzdGVtX2RtYV9wbGF0X2luZm8JKnA7CisJc3RydWN0IG9tYXBfZG1hX2Rldl9hdHRyCQkqZDsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCQkJKnBkZXY7CisJaW50IHJldDsKKworCXBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoIm9tYXBfZG1hX3N5c3RlbSIsIDApOworCWlmICghcGRldikgeworCQlwcl9lcnIoIiVzOiBVbmFibGUgdG8gZGV2aWNlIGFsbG9jIGZvciBkbWFcbiIsCisJCQlfX2Z1bmNfXyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWRtYV9iYXNlID0gaW9yZW1hcChyZXNbMF0uc3RhcnQsIHJlc291cmNlX3NpemUoJnJlc1swXSkpOworCWlmICghZG1hX2Jhc2UpIHsKKwkJcHJfZXJyKCIlczogVW5hYmxlIHRvIGlvcmVtYXBcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9yZXNvdXJjZXMocGRldiwgcmVzLCBBUlJBWV9TSVpFKHJlcykpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiJXM6IFVuYWJsZSB0byBhZGQgcmVzb3VyY2VzIGZvciAlcyVkXG4iLAorCQkJX19mdW5jX18sIHBkZXYtPm5hbWUsIHBkZXYtPmlkKTsKKwkJZ290byBleGl0X2RldmljZV9kZWw7CisJfQorCisJcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBvbWFwX3N5c3RlbV9kbWFfcGxhdF9pbmZvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIiVzOiBVbmFibGUgdG8gYWxsb2NhdGUgJ3AnIGZvciAlc1xuIiwKKwkJCV9fZnVuY19fLCBwZGV2LT5uYW1lKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBleGl0X2RldmljZV9wdXQ7CisJfQorCisJZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBvbWFwX2RtYV9kZXZfYXR0ciksIEdGUF9LRVJORUwpOworCWlmICghZCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICIlczogVW5hYmxlIHRvIGFsbG9jYXRlICdkJyBmb3IgJXNcbiIsCisJCQlfX2Z1bmNfXywgcGRldi0+bmFtZSk7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXhpdF9yZWxlYXNlX3A7CisJfQorCisJZC0+bGNoX2NvdW50CQk9IE9NQVAxX0xPR0lDQUxfRE1BX0NIX0NPVU5UOworCisJLyogVmFsaWQgYXR0cmlidXRlcyBmb3Igb21hcDEgcGx1cyBwcm9jZXNzb3JzICovCisJaWYgKGNwdV9pc19vbWFwMTV4eCgpKQorCQlkLT5kZXZfY2FwcyA9IEVOQUJMRV8xNTEwX01PREU7CisJZW5hYmxlXzE1MTBfbW9kZSA9IGQtPmRldl9jYXBzICYgRU5BQkxFXzE1MTBfTU9ERTsKKworCWQtPmRldl9jYXBzCQl8PSBTUkNfUE9SVDsKKwlkLT5kZXZfY2FwcwkJfD0gRFNUX1BPUlQ7CisJZC0+ZGV2X2NhcHMJCXw9IFNSQ19JTkRFWDsKKwlkLT5kZXZfY2FwcwkJfD0gRFNUX0lOREVYOworCWQtPmRldl9jYXBzCQl8PSBJU19CVVJTVF9PTkxZNDsKKwlkLT5kZXZfY2FwcwkJfD0gQ0xFQVJfQ1NSX09OX1JFQUQ7CisJZC0+ZGV2X2NhcHMJCXw9IElTX1dPUkRfMTY7CisKKworCWQtPmNoYW4gPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgb21hcF9kbWFfbGNoKSAqCisJCQkJCShkLT5sY2hfY291bnQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWQtPmNoYW4pIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiJXM6IE1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCIKKwkJCQkJImZvciBkLT5jaGFuISEhXG4iLCBfX2Z1bmNfXyk7CisJCWdvdG8gZXhpdF9yZWxlYXNlX2Q7CisJfQorCisJaWYgKGNwdV9pc19vbWFwMTV4eCgpKQorCQlkLT5jaGFuX2NvdW50ID0gOTsKKwllbHNlIGlmIChjcHVfaXNfb21hcDE2eHgoKSB8fCBjcHVfaXNfb21hcDd4eCgpKSB7CisJCWlmICghKGQtPmRldl9jYXBzICYgRU5BQkxFXzE1MTBfTU9ERSkpCisJCQlkLT5jaGFuX2NvdW50ID0gMTY7CisJCWVsc2UKKwkJCWQtPmNoYW5fY291bnQgPSA5OworCX0KKworCXAtPmRtYV9hdHRyID0gZDsKKworCXAtPnNob3dfZG1hX2NhcHMJPSBvbWFwMV9zaG93X2RtYV9jYXBzOworCXAtPmNsZWFyX2xjaF9yZWdzCT0gb21hcDFfY2xlYXJfbGNoX3JlZ3M7CisJcC0+Y2xlYXJfZG1hCQk9IG9tYXAxX2NsZWFyX2RtYTsKKwlwLT5kbWFfd3JpdGUJCT0gZG1hX3dyaXRlOworCXAtPmRtYV9yZWFkCQk9IGRtYV9yZWFkOworCXAtPmRpc2FibGVfaXJxX2xjaAk9IE5VTEw7CisKKwlwLT5lcnJhdGEgPSBjb25maWd1cmVfZG1hX2VycmF0YSgpOworCisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9kYXRhKHBkZXYsIHAsIHNpemVvZigqcCkpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiJXM6IFVuYWJsZSB0byBhZGQgcmVzb3VyY2VzIGZvciAlcyVkXG4iLAorCQkJX19mdW5jX18sIHBkZXYtPm5hbWUsIHBkZXYtPmlkKTsKKwkJZ290byBleGl0X3JlbGVhc2VfY2hhbjsKKwl9CisKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHBkZXYpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiJXM6IFVuYWJsZSB0byBhZGQgcmVzb3VyY2VzIGZvciAlcyVkXG4iLAorCQkJX19mdW5jX18sIHBkZXYtPm5hbWUsIHBkZXYtPmlkKTsKKwkJZ290byBleGl0X3JlbGVhc2VfY2hhbjsKKwl9CisKKwlkbWFfc3RyaWRlCQk9IE9NQVAxX0RNQV9TVFJJREU7CisJZG1hX2NvbW1vbl9jaF9zdGFydAk9IENQQzsKKwlkbWFfY29tbW9uX2NoX2VuZAk9IENPTE9SOworCisJcmV0dXJuIHJldDsKKworZXhpdF9yZWxlYXNlX2NoYW46CisJa2ZyZWUoZC0+Y2hhbik7CitleGl0X3JlbGVhc2VfZDoKKwlrZnJlZShkKTsKK2V4aXRfcmVsZWFzZV9wOgorCWtmcmVlKHApOworZXhpdF9kZXZpY2VfcHV0OgorCXBsYXRmb3JtX2RldmljZV9wdXQocGRldik7CitleGl0X2RldmljZV9kZWw6CisJcGxhdGZvcm1fZGV2aWNlX2RlbChwZGV2KTsKKworCXJldHVybiByZXQ7Cit9CithcmNoX2luaXRjYWxsKG9tYXAxX3N5c3RlbV9kbWFfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2ZsYXNoLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2ZsYXNoLmMKaW5kZXggMGIwN2E3OC4uYWNkMTYxNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9mbGFzaC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvZmxhc2guYwpAQCAtMTEsNiArMTEsNyBAQAogCiAjaW5jbHVkZSA8cGxhdC9pby5oPgogI2luY2x1ZGUgPHBsYXQvdGMuaD4KKyNpbmNsdWRlIDxwbGF0L2ZsYXNoLmg+CiAKIHZvaWQgb21hcDFfc2V0X3ZwcChzdHJ1Y3QgbWFwX2luZm8gKm1hcCwgaW50IGVuYWJsZSkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvZnBnYS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9mcGdhLmMKaW5kZXggNWNmY2UxNi4uODc4MGU3NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9mcGdhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9mcGdhLmMKQEAgLTE0Myw3ICsxNDMsNyBAQAogICovCiB2b2lkIG9tYXAxNTEwX2ZwZ2FfaW5pdF9pcnEodm9pZCkKIHsKLQlpbnQgaTsKKwlpbnQgaSwgcmVzOwogCiAJX19yYXdfd3JpdGViKDAsIE9NQVAxNTEwX0ZQR0FfSU1SX0xPKTsKIAlfX3Jhd193cml0ZWIoMCwgT01BUDE1MTBfRlBHQV9JTVJfSEkpOwpAQCAtMTc3LDEwICsxNzcsMTIgQEAKIAkgKiBOT1RFOiBGb3IgZ2VuZXJhbCBHUElPL01QVUlPIGFjY2VzcyBhbmQgaW50ZXJydXB0cywgcGxlYXNlIHNlZQogCSAqIGdwaW8uW2NoXQogCSAqLwotCWdwaW9fcmVxdWVzdCgxMywgIkZQR0EgaXJxIik7CisJcmVzID0gZ3Bpb19yZXF1ZXN0KDEzLCAiRlBHQSBpcnEiKTsKKwlpZiAocmVzKSB7CisJCXByX2VycigiJXMgZmFpbGVkIHRvIGdldCBncGlvXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CiAJZ3Bpb19kaXJlY3Rpb25faW5wdXQoMTMpOwogCXNldF9pcnFfdHlwZShncGlvX3RvX2lycSgxMyksIElSUV9UWVBFX0VER0VfUklTSU5HKTsKIAlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihPTUFQMTUxMF9JTlRfRlBHQSwgaW5ub3ZhdG9yX2ZwZ2FfSVJRX2RlbXV4KTsKIH0KLQotRVhQT1JUX1NZTUJPTChvbWFwMTUxMF9mcGdhX2luaXRfaXJxKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvZ3BpbzE1eHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvZ3BpbzE1eHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGM0YjA0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ncGlvMTV4eC5jCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBPTUFQMTV4eCBzcGVjaWZpYyBncGlvIGluaXQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkIC0gaHR0cDovL3d3dy50aS5jb20vCisgKgorICogQXV0aG9yOgorICoJQ2hhcnVsYXRoYSBWIDxjaGFydUB0aS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHZlcnNpb24gMi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgImFzIGlzIiBXSVRIT1VUIEFOWSBXQVJSQU5UWSBvZiBhbnkKKyAqIGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkKKyAqIG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKworI2RlZmluZSBPTUFQMV9NUFVJT19WQkFTRQkJT01BUDFfTVBVSU9fQkFTRQorI2RlZmluZSBPTUFQMTUxMF9HUElPX0JBU0UJCTB4RkZGQ0UwMDAKKworLyogZ3BpbzEgKi8KK3N0YXRpYyBzdHJ1Y3QgX19pbml0ZGF0YSByZXNvdXJjZSBvbWFwMTV4eF9tcHVfZ3Bpb19yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAk9IE9NQVAxX01QVUlPX1ZCQVNFLAorCQkuZW5kCT0gT01BUDFfTVBVSU9fVkJBU0UgKyBTWl8ySyAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJPSBJTlRfTVBVSU8sCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IF9faW5pdGRhdGEgb21hcF9ncGlvX3BsYXRmb3JtX2RhdGEgb21hcDE1eHhfbXB1X2dwaW9fY29uZmlnID0geworCS52aXJ0dWFsX2lycV9zdGFydAk9IElIX01QVUlPX0JBU0UsCisJLmJhbmtfdHlwZQkJPSBNRVRIT0RfTVBVSU8sCisJLmJhbmtfd2lkdGgJCT0gMTYsCisJLmJhbmtfc3RyaWRlCQk9IDEsCit9OworCitzdGF0aWMgc3RydWN0IF9faW5pdGRhdGEgcGxhdGZvcm1fZGV2aWNlIG9tYXAxNXh4X21wdV9ncGlvID0geworCS5uYW1lICAgICAgICAgICA9ICJvbWFwX2dwaW8iLAorCS5pZCAgICAgICAgICAgICA9IDAsCisJLmRldiAgICAgICAgICAgID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZvbWFwMTV4eF9tcHVfZ3Bpb19jb25maWcsCisJfSwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUob21hcDE1eHhfbXB1X2dwaW9fcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UgPSBvbWFwMTV4eF9tcHVfZ3Bpb19yZXNvdXJjZXMsCit9OworCisvKiBncGlvMiAqLworc3RhdGljIHN0cnVjdCBfX2luaXRkYXRhIHJlc291cmNlIG9tYXAxNXh4X2dwaW9fcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSBPTUFQMTUxMF9HUElPX0JBU0UsCisJCS5lbmQJPSBPTUFQMTUxMF9HUElPX0JBU0UgKyBTWl8ySyAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJPSBJTlRfR1BJT19CQU5LMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgX19pbml0ZGF0YSBvbWFwX2dwaW9fcGxhdGZvcm1fZGF0YSBvbWFwMTV4eF9ncGlvX2NvbmZpZyA9IHsKKwkudmlydHVhbF9pcnFfc3RhcnQJPSBJSF9HUElPX0JBU0UsCisJLmJhbmtfdHlwZQkJPSBNRVRIT0RfR1BJT18xNTEwLAorCS5iYW5rX3dpZHRoCQk9IDE2LAorfTsKKworc3RhdGljIHN0cnVjdCBfX2luaXRkYXRhIHBsYXRmb3JtX2RldmljZSBvbWFwMTV4eF9ncGlvID0geworCS5uYW1lICAgICAgICAgICA9ICJvbWFwX2dwaW8iLAorCS5pZCAgICAgICAgICAgICA9IDEsCisJLmRldiAgICAgICAgICAgID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZvbWFwMTV4eF9ncGlvX2NvbmZpZywKKwl9LAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShvbWFwMTV4eF9ncGlvX3Jlc291cmNlcyksCisJLnJlc291cmNlID0gb21hcDE1eHhfZ3Bpb19yZXNvdXJjZXMsCit9OworCisvKgorICogb21hcDE1eHhfZ3Bpb19pbml0IG5lZWRzIHRvIGJlIGRvbmUgYmVmb3JlCisgKiBtYWNoaW5lX2luaXQgZnVuY3Rpb25zIGFjY2VzcyBncGlvIEFQSXMuCisgKiBIZW5jZSBvbWFwMTV4eF9ncGlvX2luaXQgaXMgYSBwb3N0Y29yZV9pbml0Y2FsbC4KKyAqLworc3RhdGljIGludCBfX2luaXQgb21hcDE1eHhfZ3Bpb19pbml0KHZvaWQpCit7CisJaWYgKCFjcHVfaXNfb21hcDE1eHgoKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm9tYXAxNXh4X21wdV9ncGlvKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm9tYXAxNXh4X2dwaW8pOworCisJZ3Bpb19iYW5rX2NvdW50ID0gMjsKKwlyZXR1cm4gMDsKK30KK3Bvc3Rjb3JlX2luaXRjYWxsKG9tYXAxNXh4X2dwaW9faW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2dwaW8xNnh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2dwaW8xNnh4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRkMGQ0YwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvZ3BpbzE2eHguYwpAQCAtMCwwICsxLDIwMCBAQAorLyoKKyAqIE9NQVAxNnh4IHNwZWNpZmljIGdwaW8gaW5pdAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQgLSBodHRwOi8vd3d3LnRpLmNvbS8KKyAqCisgKiBBdXRob3I6CisgKglDaGFydWxhdGhhIFYgPGNoYXJ1QHRpLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gdmVyc2lvbiAyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCAiYXMgaXMiIFdJVEhPVVQgQU5ZIFdBUlJBTlRZIG9mIGFueQorICoga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQ7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eQorICogb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorCisjZGVmaW5lIE9NQVAxNjEwX0dQSU8xX0JBU0UJCTB4ZmZmYmU0MDAKKyNkZWZpbmUgT01BUDE2MTBfR1BJTzJfQkFTRQkJMHhmZmZiZWMwMAorI2RlZmluZSBPTUFQMTYxMF9HUElPM19CQVNFCQkweGZmZmJiNDAwCisjZGVmaW5lIE9NQVAxNjEwX0dQSU80X0JBU0UJCTB4ZmZmYmJjMDAKKyNkZWZpbmUgT01BUDFfTVBVSU9fVkJBU0UJCU9NQVAxX01QVUlPX0JBU0UKKworLyogbXB1IGdwaW8gKi8KK3N0YXRpYyBzdHJ1Y3QgX19pbml0ZGF0YSByZXNvdXJjZSBvbWFwMTZ4eF9tcHVfZ3Bpb19yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAk9IE9NQVAxX01QVUlPX1ZCQVNFLAorCQkuZW5kCT0gT01BUDFfTVBVSU9fVkJBU0UgKyBTWl8ySyAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJPSBJTlRfTVBVSU8sCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IF9faW5pdGRhdGEgb21hcF9ncGlvX3BsYXRmb3JtX2RhdGEgb21hcDE2eHhfbXB1X2dwaW9fY29uZmlnID0geworCS52aXJ0dWFsX2lycV9zdGFydAk9IElIX01QVUlPX0JBU0UsCisJLmJhbmtfdHlwZQkJPSBNRVRIT0RfTVBVSU8sCisJLmJhbmtfd2lkdGgJCT0gMTYsCisJLmJhbmtfc3RyaWRlCQk9IDEsCit9OworCitzdGF0aWMgc3RydWN0IF9faW5pdGRhdGEgcGxhdGZvcm1fZGV2aWNlIG9tYXAxNnh4X21wdV9ncGlvID0geworCS5uYW1lICAgICAgICAgICA9ICJvbWFwX2dwaW8iLAorCS5pZCAgICAgICAgICAgICA9IDAsCisJLmRldiAgICAgICAgICAgID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZvbWFwMTZ4eF9tcHVfZ3Bpb19jb25maWcsCisJfSwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUob21hcDE2eHhfbXB1X2dwaW9fcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UgPSBvbWFwMTZ4eF9tcHVfZ3Bpb19yZXNvdXJjZXMsCit9OworCisvKiBncGlvMSAqLworc3RhdGljIHN0cnVjdCBfX2luaXRkYXRhIHJlc291cmNlIG9tYXAxNnh4X2dwaW8xX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CT0gT01BUDE2MTBfR1BJTzFfQkFTRSwKKwkJLmVuZAk9IE9NQVAxNjEwX0dQSU8xX0JBU0UgKyBTWl8ySyAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJPSBJTlRfR1BJT19CQU5LMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgX19pbml0ZGF0YSBvbWFwX2dwaW9fcGxhdGZvcm1fZGF0YSBvbWFwMTZ4eF9ncGlvMV9jb25maWcgPSB7CisJLnZpcnR1YWxfaXJxX3N0YXJ0CT0gSUhfR1BJT19CQVNFLAorCS5iYW5rX3R5cGUJCT0gTUVUSE9EX0dQSU9fMTYxMCwKKwkuYmFua193aWR0aAkJPSAxNiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgX19pbml0ZGF0YSBwbGF0Zm9ybV9kZXZpY2Ugb21hcDE2eHhfZ3BpbzEgPSB7CisJLm5hbWUgICAgICAgICAgID0gIm9tYXBfZ3BpbyIsCisJLmlkICAgICAgICAgICAgID0gMSwKKwkuZGV2ICAgICAgICAgICAgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJm9tYXAxNnh4X2dwaW8xX2NvbmZpZywKKwl9LAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShvbWFwMTZ4eF9ncGlvMV9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSA9IG9tYXAxNnh4X2dwaW8xX3Jlc291cmNlcywKK307CisKKy8qIGdwaW8yICovCitzdGF0aWMgc3RydWN0IF9faW5pdGRhdGEgcmVzb3VyY2Ugb21hcDE2eHhfZ3BpbzJfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSBPTUFQMTYxMF9HUElPMl9CQVNFLAorCQkuZW5kCT0gT01BUDE2MTBfR1BJTzJfQkFTRSArIFNaXzJLIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAk9IElOVF8xNjEwX0dQSU9fQkFOSzIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IF9faW5pdGRhdGEgb21hcF9ncGlvX3BsYXRmb3JtX2RhdGEgb21hcDE2eHhfZ3BpbzJfY29uZmlnID0geworCS52aXJ0dWFsX2lycV9zdGFydAk9IElIX0dQSU9fQkFTRSArIDE2LAorCS5iYW5rX3R5cGUJCT0gTUVUSE9EX0dQSU9fMTYxMCwKKwkuYmFua193aWR0aAkJPSAxNiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgX19pbml0ZGF0YSBwbGF0Zm9ybV9kZXZpY2Ugb21hcDE2eHhfZ3BpbzIgPSB7CisJLm5hbWUgICAgICAgICAgID0gIm9tYXBfZ3BpbyIsCisJLmlkICAgICAgICAgICAgID0gMiwKKwkuZGV2ICAgICAgICAgICAgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJm9tYXAxNnh4X2dwaW8yX2NvbmZpZywKKwl9LAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShvbWFwMTZ4eF9ncGlvMl9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSA9IG9tYXAxNnh4X2dwaW8yX3Jlc291cmNlcywKK307CisKKy8qIGdwaW8zICovCitzdGF0aWMgc3RydWN0IF9faW5pdGRhdGEgcmVzb3VyY2Ugb21hcDE2eHhfZ3BpbzNfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSBPTUFQMTYxMF9HUElPM19CQVNFLAorCQkuZW5kCT0gT01BUDE2MTBfR1BJTzNfQkFTRSArIFNaXzJLIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAk9IElOVF8xNjEwX0dQSU9fQkFOSzMsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IF9faW5pdGRhdGEgb21hcF9ncGlvX3BsYXRmb3JtX2RhdGEgb21hcDE2eHhfZ3BpbzNfY29uZmlnID0geworCS52aXJ0dWFsX2lycV9zdGFydAk9IElIX0dQSU9fQkFTRSArIDMyLAorCS5iYW5rX3R5cGUJCT0gTUVUSE9EX0dQSU9fMTYxMCwKKwkuYmFua193aWR0aAkJPSAxNiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgX19pbml0ZGF0YSBwbGF0Zm9ybV9kZXZpY2Ugb21hcDE2eHhfZ3BpbzMgPSB7CisJLm5hbWUgICAgICAgICAgID0gIm9tYXBfZ3BpbyIsCisJLmlkICAgICAgICAgICAgID0gMywKKwkuZGV2ICAgICAgICAgICAgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJm9tYXAxNnh4X2dwaW8zX2NvbmZpZywKKwl9LAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShvbWFwMTZ4eF9ncGlvM19yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSA9IG9tYXAxNnh4X2dwaW8zX3Jlc291cmNlcywKK307CisKKy8qIGdwaW80ICovCitzdGF0aWMgc3RydWN0IF9faW5pdGRhdGEgcmVzb3VyY2Ugb21hcDE2eHhfZ3BpbzRfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSBPTUFQMTYxMF9HUElPNF9CQVNFLAorCQkuZW5kCT0gT01BUDE2MTBfR1BJTzRfQkFTRSArIFNaXzJLIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAk9IElOVF8xNjEwX0dQSU9fQkFOSzQsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IF9faW5pdGRhdGEgb21hcF9ncGlvX3BsYXRmb3JtX2RhdGEgb21hcDE2eHhfZ3BpbzRfY29uZmlnID0geworCS52aXJ0dWFsX2lycV9zdGFydAk9IElIX0dQSU9fQkFTRSArIDQ4LAorCS5iYW5rX3R5cGUJCT0gTUVUSE9EX0dQSU9fMTYxMCwKKwkuYmFua193aWR0aAkJPSAxNiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgX19pbml0ZGF0YSBwbGF0Zm9ybV9kZXZpY2Ugb21hcDE2eHhfZ3BpbzQgPSB7CisJLm5hbWUgICAgICAgICAgID0gIm9tYXBfZ3BpbyIsCisJLmlkICAgICAgICAgICAgID0gNCwKKwkuZGV2ICAgICAgICAgICAgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJm9tYXAxNnh4X2dwaW80X2NvbmZpZywKKwl9LAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShvbWFwMTZ4eF9ncGlvNF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSA9IG9tYXAxNnh4X2dwaW80X3Jlc291cmNlcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgX19pbml0ZGF0YSBwbGF0Zm9ybV9kZXZpY2UgKiBvbWFwMTZ4eF9ncGlvX2RldltdID0geworCSZvbWFwMTZ4eF9tcHVfZ3BpbywKKwkmb21hcDE2eHhfZ3BpbzEsCisJJm9tYXAxNnh4X2dwaW8yLAorCSZvbWFwMTZ4eF9ncGlvMywKKwkmb21hcDE2eHhfZ3BpbzQsCit9OworCisvKgorICogb21hcDE2eHhfZ3Bpb19pbml0IG5lZWRzIHRvIGJlIGRvbmUgYmVmb3JlCisgKiBtYWNoaW5lX2luaXQgZnVuY3Rpb25zIGFjY2VzcyBncGlvIEFQSXMuCisgKiBIZW5jZSBvbWFwMTZ4eF9ncGlvX2luaXQgaXMgYSBwb3N0Y29yZV9pbml0Y2FsbC4KKyAqLworc3RhdGljIGludCBfX2luaXQgb21hcDE2eHhfZ3Bpb19pbml0KHZvaWQpCit7CisJaW50IGk7CisKKwlpZiAoIWNwdV9pc19vbWFwMTZ4eCgpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG9tYXAxNnh4X2dwaW9fZGV2KTsgaSsrKQorCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIob21hcDE2eHhfZ3Bpb19kZXZbaV0pOworCisJZ3Bpb19iYW5rX2NvdW50ID0gQVJSQVlfU0laRShvbWFwMTZ4eF9ncGlvX2Rldik7CisKKwlyZXR1cm4gMDsKK30KK3Bvc3Rjb3JlX2luaXRjYWxsKG9tYXAxNnh4X2dwaW9faW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2dwaW83eHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvZ3Bpbzd4eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyMDRjOGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2dwaW83eHguYwpAQCAtMCwwICsxLDI2MiBAQAorLyoKKyAqIE9NQVA3eHggc3BlY2lmaWMgZ3BpbyBpbml0CisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZCAtIGh0dHA6Ly93d3cudGkuY29tLworICoKKyAqIEF1dGhvcjoKKyAqCUNoYXJ1bGF0aGEgViA8Y2hhcnVAdGkuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiB2ZXJzaW9uIDIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkICJhcyBpcyIgV0lUSE9VVCBBTlkgV0FSUkFOVFkgb2YgYW55CisgKiBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZDsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5CisgKiBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisKKyNkZWZpbmUgT01BUDdYWF9HUElPMV9CQVNFCQkweGZmZmJjMDAwCisjZGVmaW5lIE9NQVA3WFhfR1BJTzJfQkFTRQkJMHhmZmZiYzgwMAorI2RlZmluZSBPTUFQN1hYX0dQSU8zX0JBU0UJCTB4ZmZmYmQwMDAKKyNkZWZpbmUgT01BUDdYWF9HUElPNF9CQVNFCQkweGZmZmJkODAwCisjZGVmaW5lIE9NQVA3WFhfR1BJTzVfQkFTRQkJMHhmZmZiZTAwMAorI2RlZmluZSBPTUFQN1hYX0dQSU82X0JBU0UJCTB4ZmZmYmU4MDAKKyNkZWZpbmUgT01BUDFfTVBVSU9fVkJBU0UJCU9NQVAxX01QVUlPX0JBU0UKKworLyogbXB1IGdwaW8gKi8KK3N0YXRpYyBzdHJ1Y3QgX19pbml0ZGF0YSByZXNvdXJjZSBvbWFwN3h4X21wdV9ncGlvX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CT0gT01BUDFfTVBVSU9fVkJBU0UsCisJCS5lbmQJPSBPTUFQMV9NUFVJT19WQkFTRSArIFNaXzJLIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAk9IElOVF83WFhfTVBVSU8sCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IF9faW5pdGRhdGEgb21hcF9ncGlvX3BsYXRmb3JtX2RhdGEgb21hcDd4eF9tcHVfZ3Bpb19jb25maWcgPSB7CisJLnZpcnR1YWxfaXJxX3N0YXJ0CT0gSUhfTVBVSU9fQkFTRSwKKwkuYmFua190eXBlCQk9IE1FVEhPRF9NUFVJTywKKwkuYmFua193aWR0aAkJPSAzMiwKKwkuYmFua19zdHJpZGUJCT0gMiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgX19pbml0ZGF0YSBwbGF0Zm9ybV9kZXZpY2Ugb21hcDd4eF9tcHVfZ3BpbyA9IHsKKwkubmFtZSAgICAgICAgICAgPSAib21hcF9ncGlvIiwKKwkuaWQgICAgICAgICAgICAgPSAwLAorCS5kZXYgICAgICAgICAgICA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmb21hcDd4eF9tcHVfZ3Bpb19jb25maWcsCisJfSwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUob21hcDd4eF9tcHVfZ3Bpb19yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSA9IG9tYXA3eHhfbXB1X2dwaW9fcmVzb3VyY2VzLAorfTsKKworLyogZ3BpbzEgKi8KK3N0YXRpYyBzdHJ1Y3QgX19pbml0ZGF0YSByZXNvdXJjZSBvbWFwN3h4X2dwaW8xX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CT0gT01BUDdYWF9HUElPMV9CQVNFLAorCQkuZW5kCT0gT01BUDdYWF9HUElPMV9CQVNFICsgU1pfMksgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CT0gSU5UXzdYWF9HUElPX0JBTksxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBfX2luaXRkYXRhIG9tYXBfZ3Bpb19wbGF0Zm9ybV9kYXRhIG9tYXA3eHhfZ3BpbzFfY29uZmlnID0geworCS52aXJ0dWFsX2lycV9zdGFydAk9IElIX0dQSU9fQkFTRSwKKwkuYmFua190eXBlCQk9IE1FVEhPRF9HUElPXzdYWCwKKwkuYmFua193aWR0aAkJPSAzMiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgX19pbml0ZGF0YSBwbGF0Zm9ybV9kZXZpY2Ugb21hcDd4eF9ncGlvMSA9IHsKKwkubmFtZSAgICAgICAgICAgPSAib21hcF9ncGlvIiwKKwkuaWQgICAgICAgICAgICAgPSAxLAorCS5kZXYgICAgICAgICAgICA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmb21hcDd4eF9ncGlvMV9jb25maWcsCisJfSwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUob21hcDd4eF9ncGlvMV9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSA9IG9tYXA3eHhfZ3BpbzFfcmVzb3VyY2VzLAorfTsKKworLyogZ3BpbzIgKi8KK3N0YXRpYyBzdHJ1Y3QgX19pbml0ZGF0YSByZXNvdXJjZSBvbWFwN3h4X2dwaW8yX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CT0gT01BUDdYWF9HUElPMl9CQVNFLAorCQkuZW5kCT0gT01BUDdYWF9HUElPMl9CQVNFICsgU1pfMksgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CT0gSU5UXzdYWF9HUElPX0JBTksyLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBfX2luaXRkYXRhIG9tYXBfZ3Bpb19wbGF0Zm9ybV9kYXRhIG9tYXA3eHhfZ3BpbzJfY29uZmlnID0geworCS52aXJ0dWFsX2lycV9zdGFydAk9IElIX0dQSU9fQkFTRSArIDMyLAorCS5iYW5rX3R5cGUJCT0gTUVUSE9EX0dQSU9fN1hYLAorCS5iYW5rX3dpZHRoCQk9IDMyLAorfTsKKworc3RhdGljIHN0cnVjdCBfX2luaXRkYXRhIHBsYXRmb3JtX2RldmljZSBvbWFwN3h4X2dwaW8yID0geworCS5uYW1lICAgICAgICAgICA9ICJvbWFwX2dwaW8iLAorCS5pZCAgICAgICAgICAgICA9IDIsCisJLmRldiAgICAgICAgICAgID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZvbWFwN3h4X2dwaW8yX2NvbmZpZywKKwl9LAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShvbWFwN3h4X2dwaW8yX3Jlc291cmNlcyksCisJLnJlc291cmNlID0gb21hcDd4eF9ncGlvMl9yZXNvdXJjZXMsCit9OworCisvKiBncGlvMyAqLworc3RhdGljIHN0cnVjdCBfX2luaXRkYXRhIHJlc291cmNlIG9tYXA3eHhfZ3BpbzNfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSBPTUFQN1hYX0dQSU8zX0JBU0UsCisJCS5lbmQJPSBPTUFQN1hYX0dQSU8zX0JBU0UgKyBTWl8ySyAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJPSBJTlRfN1hYX0dQSU9fQkFOSzMsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IF9faW5pdGRhdGEgb21hcF9ncGlvX3BsYXRmb3JtX2RhdGEgb21hcDd4eF9ncGlvM19jb25maWcgPSB7CisJLnZpcnR1YWxfaXJxX3N0YXJ0CT0gSUhfR1BJT19CQVNFICsgNjQsCisJLmJhbmtfdHlwZQkJPSBNRVRIT0RfR1BJT183WFgsCisJLmJhbmtfd2lkdGgJCT0gMzIsCit9OworCitzdGF0aWMgc3RydWN0IF9faW5pdGRhdGEgcGxhdGZvcm1fZGV2aWNlIG9tYXA3eHhfZ3BpbzMgPSB7CisJLm5hbWUgICAgICAgICAgID0gIm9tYXBfZ3BpbyIsCisJLmlkICAgICAgICAgICAgID0gMywKKwkuZGV2ICAgICAgICAgICAgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJm9tYXA3eHhfZ3BpbzNfY29uZmlnLAorCX0sCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKG9tYXA3eHhfZ3BpbzNfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UgPSBvbWFwN3h4X2dwaW8zX3Jlc291cmNlcywKK307CisKKy8qIGdwaW80ICovCitzdGF0aWMgc3RydWN0IF9faW5pdGRhdGEgcmVzb3VyY2Ugb21hcDd4eF9ncGlvNF9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAk9IE9NQVA3WFhfR1BJTzRfQkFTRSwKKwkJLmVuZAk9IE9NQVA3WFhfR1BJTzRfQkFTRSArIFNaXzJLIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAk9IElOVF83WFhfR1BJT19CQU5LNCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgX19pbml0ZGF0YSBvbWFwX2dwaW9fcGxhdGZvcm1fZGF0YSBvbWFwN3h4X2dwaW80X2NvbmZpZyA9IHsKKwkudmlydHVhbF9pcnFfc3RhcnQJPSBJSF9HUElPX0JBU0UgKyA5NiwKKwkuYmFua190eXBlCQk9IE1FVEhPRF9HUElPXzdYWCwKKwkuYmFua193aWR0aAkJPSAzMiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgX19pbml0ZGF0YSBwbGF0Zm9ybV9kZXZpY2Ugb21hcDd4eF9ncGlvNCA9IHsKKwkubmFtZSAgICAgICAgICAgPSAib21hcF9ncGlvIiwKKwkuaWQgICAgICAgICAgICAgPSA0LAorCS5kZXYgICAgICAgICAgICA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmb21hcDd4eF9ncGlvNF9jb25maWcsCisJfSwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUob21hcDd4eF9ncGlvNF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSA9IG9tYXA3eHhfZ3BpbzRfcmVzb3VyY2VzLAorfTsKKworLyogZ3BpbzUgKi8KK3N0YXRpYyBzdHJ1Y3QgX19pbml0ZGF0YSByZXNvdXJjZSBvbWFwN3h4X2dwaW81X3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CT0gT01BUDdYWF9HUElPNV9CQVNFLAorCQkuZW5kCT0gT01BUDdYWF9HUElPNV9CQVNFICsgU1pfMksgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CT0gSU5UXzdYWF9HUElPX0JBTks1LAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBfX2luaXRkYXRhIG9tYXBfZ3Bpb19wbGF0Zm9ybV9kYXRhIG9tYXA3eHhfZ3BpbzVfY29uZmlnID0geworCS52aXJ0dWFsX2lycV9zdGFydAk9IElIX0dQSU9fQkFTRSArIDEyOCwKKwkuYmFua190eXBlCQk9IE1FVEhPRF9HUElPXzdYWCwKKwkuYmFua193aWR0aAkJPSAzMiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgX19pbml0ZGF0YSBwbGF0Zm9ybV9kZXZpY2Ugb21hcDd4eF9ncGlvNSA9IHsKKwkubmFtZSAgICAgICAgICAgPSAib21hcF9ncGlvIiwKKwkuaWQgICAgICAgICAgICAgPSA1LAorCS5kZXYgICAgICAgICAgICA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmb21hcDd4eF9ncGlvNV9jb25maWcsCisJfSwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUob21hcDd4eF9ncGlvNV9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSA9IG9tYXA3eHhfZ3BpbzVfcmVzb3VyY2VzLAorfTsKKworLyogZ3BpbzYgKi8KK3N0YXRpYyBzdHJ1Y3QgX19pbml0ZGF0YSByZXNvdXJjZSBvbWFwN3h4X2dwaW82X3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CT0gT01BUDdYWF9HUElPNl9CQVNFLAorCQkuZW5kCT0gT01BUDdYWF9HUElPNl9CQVNFICsgU1pfMksgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CT0gSU5UXzdYWF9HUElPX0JBTks2LAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBfX2luaXRkYXRhIG9tYXBfZ3Bpb19wbGF0Zm9ybV9kYXRhIG9tYXA3eHhfZ3BpbzZfY29uZmlnID0geworCS52aXJ0dWFsX2lycV9zdGFydAk9IElIX0dQSU9fQkFTRSArIDE2MCwKKwkuYmFua190eXBlCQk9IE1FVEhPRF9HUElPXzdYWCwKKwkuYmFua193aWR0aAkJPSAzMiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgX19pbml0ZGF0YSBwbGF0Zm9ybV9kZXZpY2Ugb21hcDd4eF9ncGlvNiA9IHsKKwkubmFtZSAgICAgICAgICAgPSAib21hcF9ncGlvIiwKKwkuaWQgICAgICAgICAgICAgPSA2LAorCS5kZXYgICAgICAgICAgICA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmb21hcDd4eF9ncGlvNl9jb25maWcsCisJfSwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUob21hcDd4eF9ncGlvNl9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSA9IG9tYXA3eHhfZ3BpbzZfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHN0cnVjdCBfX2luaXRkYXRhIHBsYXRmb3JtX2RldmljZSAqIG9tYXA3eHhfZ3Bpb19kZXZbXSA9IHsKKwkmb21hcDd4eF9tcHVfZ3BpbywKKwkmb21hcDd4eF9ncGlvMSwKKwkmb21hcDd4eF9ncGlvMiwKKwkmb21hcDd4eF9ncGlvMywKKwkmb21hcDd4eF9ncGlvNCwKKwkmb21hcDd4eF9ncGlvNSwKKwkmb21hcDd4eF9ncGlvNiwKK307CisKKy8qCisgKiBvbWFwN3h4X2dwaW9faW5pdCBuZWVkcyB0byBiZSBkb25lIGJlZm9yZQorICogbWFjaGluZV9pbml0IGZ1bmN0aW9ucyBhY2Nlc3MgZ3BpbyBBUElzLgorICogSGVuY2Ugb21hcDd4eF9ncGlvX2luaXQgaXMgYSBwb3N0Y29yZV9pbml0Y2FsbC4KKyAqLworc3RhdGljIGludCBfX2luaXQgb21hcDd4eF9ncGlvX2luaXQodm9pZCkKK3sKKwlpbnQgaTsKKworCWlmICghY3B1X2lzX29tYXA3eHgoKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShvbWFwN3h4X2dwaW9fZGV2KTsgaSsrKQorCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIob21hcDd4eF9ncGlvX2RldltpXSk7CisKKwlncGlvX2JhbmtfY291bnQgPSBBUlJBWV9TSVpFKG9tYXA3eHhfZ3Bpb19kZXYpOworCisJcmV0dXJuIDA7Cit9Citwb3N0Y29yZV9pbml0Y2FsbChvbWFwN3h4X2dwaW9faW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUwppbmRleCBkZjkwNjBlLi5jOWJlNmQ0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKQEAgLTE0LDE4ICsxNCwxNyBAQAogI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9naWMuaD4KIAotI2lmIChkZWZpbmVkKENPTkZJR19BUkNIX09NQVA3MzApfHxkZWZpbmVkKENPTkZJR19BUkNIX09NQVA4NTApKSAmJiBcCi0JKGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE1WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE2WFgpKQotI2Vycm9yICJGSVhNRTogT01BUDdYWCBkb2Vzbid0IHN1cHBvcnQgbXVsdGlwbGUtT01BUCIKLSNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDczMCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQODUwKQotI2RlZmluZSBJTlRfSUgyX0lSUQkJSU5UXzdYWF9JSDJfSVJRCi0jZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNVhYKQotI2RlZmluZSBJTlRfSUgyX0lSUQkJSU5UXzE1MTBfSUgyX0lSUQotI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTZYWCkKLSNkZWZpbmUgSU5UX0lIMl9JUlEJCUlOVF8xNjEwX0lIMl9JUlEKLSNlbHNlCi0jd2FybmluZyAiSUgyIElSUSBkZWZhdWx0ZWQiCi0jZGVmaW5lIElOVF9JSDJfSVJRCQlJTlRfMTUxMF9JSDJfSVJRCisvKgorICogV2UgdXNlIF9fZ2x1ZSB0byBhdm9pZCBlcnJvcnMgd2l0aCBtdWx0aXBsZSBkZWZpbml0aW9ucyBvZgorICogLmdsb2JsIG9tYXBfaXJxX2ZsYWdzIGFzIGl0J3MgaW5jbHVkZWQgZnJvbSBlbnRyeS1hcm12LlMgYnV0IG5vdAorICogZnJvbSBlbnRyeS1jb21tb24uUy4KKyAqLworI2lmZGVmIF9fZ2x1ZQorCQkucHVzaHNlY3Rpb24gLmRhdGEKKwkJLmdsb2JsCW9tYXBfaXJxX2ZsYWdzCitvbWFwX2lycV9mbGFnczoKKwkJLndvcmQJMAorCQkucG9wc2VjdGlvbgogI2VuZGlmCiAKICAJCS5tYWNybwlkaXNhYmxlX2ZpcQpAQCAtNDcsOSArNDYsMTEgQEAKIAkJYmVxCTE1MTBmCiAKIAkJbGRyCVxpcnFuciwgW1xiYXNlLCAjSVJRX1NJUl9GSVFfUkVHX09GRlNFVF0KKwkJbGRyCVx0bXAsID1vbWFwX2lycV9mbGFncwlAIGlycSBmbGFncyBhZGRyZXNzCisJCWxkcglcdG1wLCBbXHRtcCwgIzBdCUAgaXJxIGZsYWdzIHZhbHVlCiAJCWNtcAlcaXJxbnIsICMwCiAJCWxkcmVxCVxpcnFuciwgW1xiYXNlLCAjSVJRX1NJUl9JUlFfUkVHX09GRlNFVF0KLQkJY21wZXEJXGlycW5yLCAjSU5UX0lIMl9JUlEKKwkJY21wZXEJXGlycW5yLCBcdG1wCiAJCWxkcmVxCVxiYXNlLCA9T01BUDFfSU9fQUREUkVTUyhPTUFQX0lIMl9CQVNFKQogCQlsZHJlcQlcaXJxbnIsIFtcYmFzZSwgI0lSUV9TSVJfSVJRX1JFR19PRkZTRVRdCiAJCWFkZGVxcwlcaXJxbnIsIFxpcnFuciwgIzMyCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2lvLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2lvLmMKaW5kZXggMGNlM2ZlYy4uODcwODg2YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9pby5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvaW8uYwpAQCAtMTQyLDMgKzE0Miw0MiBAQAogCW9tYXAxX211eF9pbml0KCk7CiB9CiAKKy8qCisgKiBOT1RFOiBQbGVhc2UgdXNlIGlvcmVtYXAgKyBfX3Jhd19yZWFkL3dyaXRlIHdoZXJlIHBvc3NpYmxlIGluc3RlYWQgb2YgdGhlc2UKKyAqLworCit1OCBvbWFwX3JlYWRiKHUzMiBwYSkKK3sKKwlyZXR1cm4gX19yYXdfcmVhZGIoT01BUDFfSU9fQUREUkVTUyhwYSkpOworfQorRVhQT1JUX1NZTUJPTChvbWFwX3JlYWRiKTsKKwordTE2IG9tYXBfcmVhZHcodTMyIHBhKQoreworCXJldHVybiBfX3Jhd19yZWFkdyhPTUFQMV9JT19BRERSRVNTKHBhKSk7Cit9CitFWFBPUlRfU1lNQk9MKG9tYXBfcmVhZHcpOworCit1MzIgb21hcF9yZWFkbCh1MzIgcGEpCit7CisJcmV0dXJuIF9fcmF3X3JlYWRsKE9NQVAxX0lPX0FERFJFU1MocGEpKTsKK30KK0VYUE9SVF9TWU1CT0wob21hcF9yZWFkbCk7CisKK3ZvaWQgb21hcF93cml0ZWIodTggdiwgdTMyIHBhKQoreworCV9fcmF3X3dyaXRlYih2LCBPTUFQMV9JT19BRERSRVNTKHBhKSk7Cit9CitFWFBPUlRfU1lNQk9MKG9tYXBfd3JpdGViKTsKKwordm9pZCBvbWFwX3dyaXRldyh1MTYgdiwgdTMyIHBhKQoreworCV9fcmF3X3dyaXRldyh2LCBPTUFQMV9JT19BRERSRVNTKHBhKSk7Cit9CitFWFBPUlRfU1lNQk9MKG9tYXBfd3JpdGV3KTsKKwordm9pZCBvbWFwX3dyaXRlbCh1MzIgdiwgdTMyIHBhKQoreworCV9fcmF3X3dyaXRlbCh2LCBPTUFQMV9JT19BRERSRVNTKHBhKSk7Cit9CitFWFBPUlRfU1lNQk9MKG9tYXBfd3JpdGVsKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvaXJxLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2lycS5jCmluZGV4IGRiOTEzYzMuLjZiZGRiYzggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvaXJxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9pcnEuYwpAQCAtMTc2LDI2ICsxNzYsMzEgQEAKIAogdm9pZCBfX2luaXQgb21hcF9pbml0X2lycSh2b2lkKQogeworCWV4dGVybiB1bnNpZ25lZCBpbnQgb21hcF9pcnFfZmxhZ3M7CiAJaW50IGksIGo7CiAKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA3MzApIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDg1MCkKIAlpZiAoY3B1X2lzX29tYXA3eHgoKSkgeworCQlvbWFwX2lycV9mbGFncyA9IElOVF83WFhfSUgyX0lSUTsKIAkJaXJxX2JhbmtzID0gb21hcDd4eF9pcnFfYmFua3M7CiAJCWlycV9iYW5rX2NvdW50ID0gQVJSQVlfU0laRShvbWFwN3h4X2lycV9iYW5rcyk7CiAJfQogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1WFgKIAlpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKKwkJb21hcF9pcnFfZmxhZ3MgPSBJTlRfMTUxMF9JSDJfSVJROwogCQlpcnFfYmFua3MgPSBvbWFwMTUxMF9pcnFfYmFua3M7CiAJCWlycV9iYW5rX2NvdW50ID0gQVJSQVlfU0laRShvbWFwMTUxMF9pcnFfYmFua3MpOwogCX0KIAlpZiAoY3B1X2lzX29tYXAzMTAoKSkgeworCQlvbWFwX2lycV9mbGFncyA9IElOVF8xNTEwX0lIMl9JUlE7CiAJCWlycV9iYW5rcyA9IG9tYXAzMTBfaXJxX2JhbmtzOwogCQlpcnFfYmFua19jb3VudCA9IEFSUkFZX1NJWkUob21hcDMxMF9pcnFfYmFua3MpOwogCX0KICNlbmRpZgogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE2WFgpCiAJaWYgKGNwdV9pc19vbWFwMTZ4eCgpKSB7CisJCW9tYXBfaXJxX2ZsYWdzID0gSU5UXzE1MTBfSUgyX0lSUTsKIAkJaXJxX2JhbmtzID0gb21hcDE2MTBfaXJxX2JhbmtzOwogCQlpcnFfYmFua19jb3VudCA9IEFSUkFZX1NJWkUob21hcDE2MTBfaXJxX2JhbmtzKTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2xjZF9kbWEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvbGNkX2RtYS5jCmluZGV4IDNiZTExYWYuLmM5MDg4ZDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvbGNkX2RtYS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvbGNkX2RtYS5jCkBAIC00MjQsNiArNDI0LDkgQEAKIHsKIAlpbnQgcjsKIAorCWlmICghY3B1X2NsYXNzX2lzX29tYXAxKCkpCisJCXJldHVybiAtRU5PREVWOworCiAJaWYgKGNwdV9pc19vbWFwMTZ4eCgpKSB7CiAJCXUxNiB3OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2xlZHMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvbGVkcy5jCmluZGV4IDI3N2YzNTYuLjIyZWIxMWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvbGVkcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvbGVkcy5jCkBAIC0xNyw2ICsxNyw5IEBACiBzdGF0aWMgaW50IF9faW5pdAogb21hcF9sZWRzX2luaXQodm9pZCkKIHsKKwlpZiAoIWNwdV9jbGFzc19pc19vbWFwMSgpKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCWlmIChtYWNoaW5lX2lzX29tYXBfaW5ub3ZhdG9yKCkpCiAJCWxlZHNfZXZlbnQgPSBpbm5vdmF0b3JfbGVkc19ldmVudDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9tYWlsYm94LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL21haWxib3guYwppbmRleCAxYTg1YTQyLi5jMGUxZjQ4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL21haWxib3guYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL21haWxib3guYwpAQCAtMTMzLDE5ICsxMzMsMTggQEAKIAl9LAogfTsKIAotc3RydWN0IG9tYXBfbWJveCBtYm94X2RzcF9pbmZvID0geworc3RhdGljIHN0cnVjdCBvbWFwX21ib3ggbWJveF9kc3BfaW5mbyA9IHsKIAkubmFtZQk9ICJkc3AiLAogCS5vcHMJPSAmb21hcDFfbWJveF9vcHMsCiAJLnByaXYJPSAmb21hcDFfbWJveF9kc3BfcHJpdiwKIH07CiAKLXN0cnVjdCBvbWFwX21ib3ggKm9tYXAxX21ib3hlc1tdID0geyAmbWJveF9kc3BfaW5mbywgTlVMTCB9Oworc3RhdGljIHN0cnVjdCBvbWFwX21ib3ggKm9tYXAxX21ib3hlc1tdID0geyAmbWJveF9kc3BfaW5mbywgTlVMTCB9OwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBvbWFwMV9tYm94X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHJlc291cmNlICptZW07CiAJaW50IHJldDsKLQlpbnQgaTsKIAlzdHJ1Y3Qgb21hcF9tYm94ICoqbGlzdDsKIAogCWxpc3QgPSBvbWFwMV9tYm94ZXM7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL21jYnNwLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL21jYnNwLmMKaW5kZXggYjNhNzk2YS4uODIwOTczNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9tY2JzcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvbWNic3AuYwpAQCAtMTc0LDggKzE3NCwxMSBAQAogI2RlZmluZSBPTUFQMTZYWF9NQ0JTUF9SRUdfTlVNCQkwCiAjZW5kaWYKIAotaW50IF9faW5pdCBvbWFwMV9tY2JzcF9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBvbWFwMV9tY2JzcF9pbml0KHZvaWQpCiB7CisJaWYgKCFjcHVfY2xhc3NfaXNfb21hcDEoKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAlpZiAoY3B1X2lzX29tYXA3eHgoKSkgewogCQlvbWFwX21jYnNwX2NvdW50ID0gT01BUDdYWF9NQ0JTUF9QREFUQV9TWjsKIAkJb21hcF9tY2JzcF9jYWNoZV9zaXplID0gT01BUDdYWF9NQ0JTUF9SRUdfTlVNICogc2l6ZW9mKHUxNik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL211eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9tdXguYwppbmRleCA3ODM1YWRkLi41ZmRlZjdhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL211eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvbXV4LmMKQEAgLTM0Myw3ICszNDMsNyBAQAogI2RlZmluZSBPTUFQMVhYWF9QSU5TX1NaCTAKICNlbmRpZgkvKiBDT05GSUdfQVJDSF9PTUFQMTVYWCB8fCBDT05GSUdfQVJDSF9PTUFQMTZYWCAqLwogCi1pbnQgX19pbml0X29yX21vZHVsZSBvbWFwMV9jZmdfcmVnKGNvbnN0IHN0cnVjdCBwaW5fY29uZmlnICpjZmcpCitzdGF0aWMgaW50IF9faW5pdF9vcl9tb2R1bGUgb21hcDFfY2ZnX3JlZyhjb25zdCBzdHJ1Y3QgcGluX2NvbmZpZyAqY2ZnKQogewogCXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobXV4X3NwaW5fbG9jayk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvcG0uYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvcG0uYwppbmRleCBiMWQzZjlmLi4wY2NhMjNhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL3BtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9wbS5jCkBAIC02NjEsNiArNjYxLDkgQEAKIAlpbnQgZXJyb3I7CiAjZW5kaWYKIAorCWlmICghY3B1X2NsYXNzX2lzX29tYXAxKCkpCisJCXJldHVybiAtRU5PREVWOworCiAJcHJpbnRrKCJQb3dlciBNYW5hZ2VtZW50IGZvciBUSSBPTUFQLlxuIik7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9wbV9idXMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvcG1fYnVzLmMKaW5kZXggOGI2NjM5Mi4uNjU4OGMyMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9wbV9idXMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL3BtX2J1cy5jCkBAIC00OCw3ICs0OCw2IEBACiAKIHN0YXRpYyBpbnQgb21hcDFfcG1fcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogewotCWludCByZXQgPSAwOwogCXN0cnVjdCBjbGsgKmljbGssICpmY2xrOwogCiAJZGV2X2RiZyhkZXYsICIlc1xuIiwgX19mdW5jX18pOwpAQCAtNzMsNiArNzIsOSBAQAogCWNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzICpwbTsKIAlzdHJ1Y3QgZGV2X3BtX29wcyAqb21hcF9wbTsKIAorCWlmICghY3B1X2NsYXNzX2lzX29tYXAxKCkpCisJCXJldHVybiAtRU5PREVWOworCiAJcG0gPSBwbGF0Zm9ybV9idXNfZ2V0X3BtX29wcygpOwogCWlmICghcG0pIHsKIAkJcHJfZXJyKCIlczogdW5hYmxlIHRvIGdldCBkZXZfcG1fb3BzIGZyb20gcGxhdGZvcm1fYnVzXG4iLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9zZXJpYWwuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvc2VyaWFsLmMKaW5kZXggYjc4ZDA3NC4uNTUwY2E5ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9zZXJpYWwuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL3NlcmlhbC5jCkBAIC0yNyw2ICsyNyw4IEBACiAjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CiAjaW5jbHVkZSA8cGxhdC9mcGdhLmg+CiAKKyNpbmNsdWRlICJwbS5oIgorCiBzdGF0aWMgc3RydWN0IGNsayAqIHVhcnQxX2NrOwogc3RhdGljIHN0cnVjdCBjbGsgKiB1YXJ0Ml9jazsKIHN0YXRpYyBzdHJ1Y3QgY2xrICogdWFydDNfY2s7CkBAIC01Miw5ICs1NCwxMSBAQAogICovCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9zZXJpYWxfcmVzZXQoc3RydWN0IHBsYXRfc2VyaWFsODI1MF9wb3J0ICpwKQogewotCW9tYXBfc2VyaWFsX291dHAocCwgVUFSVF9PTUFQX01EUjEsIDB4MDcpOwkvKiBkaXNhYmxlIFVBUlQgKi8KKwlvbWFwX3NlcmlhbF9vdXRwKHAsIFVBUlRfT01BUF9NRFIxLAorCQkJVUFSVF9PTUFQX01EUjFfRElTQUJMRSk7CS8qIGRpc2FibGUgVUFSVCAqLwogCW9tYXBfc2VyaWFsX291dHAocCwgVUFSVF9PTUFQX1NDUiwgMHgwOCk7CS8qIFRYIHdhdGVybWFyayAqLwotCW9tYXBfc2VyaWFsX291dHAocCwgVUFSVF9PTUFQX01EUjEsIDB4MDApOwkvKiBlbmFibGUgVUFSVCAqLworCW9tYXBfc2VyaWFsX291dHAocCwgVUFSVF9PTUFQX01EUjEsCisJCQlVQVJUX09NQVBfTURSMV8xNlhfTU9ERSk7CS8qIGVuYWJsZSBVQVJUICovCiAKIAlpZiAoIWNwdV9pc19vbWFwMTV4eCgpKSB7CiAJCW9tYXBfc2VyaWFsX291dHAocCwgVUFSVF9PTUFQX1NZU0MsIDB4MDEpOwpAQCAtMjU0LDYgKzI1OCw5IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IG9tYXBfaW5pdCh2b2lkKQogeworCWlmICghY3B1X2NsYXNzX2lzX29tYXAxKCkpCisJCXJldHVybiAtRU5PREVWOworCiAJcmV0dXJuIHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmc2VyaWFsX2RldmljZSk7CiB9CiBhcmNoX2luaXRjYWxsKG9tYXBfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL3RpbWUuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvdGltZS5jCmluZGV4IDFiZTZhMjEuLmVkN2E2MWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvdGltZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvdGltZS5jCkBAIC01Miw2ICs1Miw3IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgogCisjaW5jbHVkZSA8cGxhdC9jb21tb24uaD4KIAogI2RlZmluZSBPTUFQX01QVV9USU1FUl9CQVNFCQlPTUFQX01QVV9USU1FUjFfQkFTRQogI2RlZmluZSBPTUFQX01QVV9USU1FUl9PRkZTRVQJCTB4MTAwCkBAIC0yMDgsNyArMjA5LDYgQEAKIAkucmF0aW5nCQk9IDMwMCwKIAkucmVhZAkJPSBtcHVfcmVhZCwKIAkubWFzawkJPSBDTE9DS1NPVVJDRV9NQVNLKDMyKSwKLQkuc2hpZnQJCT0gMjQsCiAJLmZsYWdzCQk9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTLAogfTsKIApAQCAtMjE3LDEzICsyMTcsMTAgQEAKIAlzdGF0aWMgY2hhciBlcnJbXSBfX2luaXRkYXRhID0gS0VSTl9FUlIKIAkJCSIlczogY2FuJ3QgcmVnaXN0ZXIgY2xvY2tzb3VyY2UhXG4iOwogCi0JY2xvY2tzb3VyY2VfbXB1Lm11bHQKLQkJPSBjbG9ja3NvdXJjZV9raHoybXVsdChyYXRlLzEwMDAsIGNsb2Nrc291cmNlX21wdS5zaGlmdCk7Ci0KIAlzZXR1cF9pcnEoSU5UX1RJTUVSMiwgJm9tYXBfbXB1X3RpbWVyMl9pcnEpOwogCW9tYXBfbXB1X3RpbWVyX3N0YXJ0KDEsIH4wLCAxKTsKIAotCWlmIChjbG9ja3NvdXJjZV9yZWdpc3RlcigmY2xvY2tzb3VyY2VfbXB1KSkKKwlpZiAoY2xvY2tzb3VyY2VfcmVnaXN0ZXJfaHooJmNsb2Nrc291cmNlX21wdSwgcmF0ZSkpCiAJCXByaW50ayhlcnIsIGNsb2Nrc291cmNlX21wdS5uYW1lKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9LY29uZmlnCmluZGV4IGFiNzg0YmYuLjFhMmNmNjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL0tjb25maWcKQEAgLTE1LDcgKzE1LDcgQEAKIAlzZWxlY3QgU0VSSUFMX09NQVBfQ09OU09MRQogCXNlbGVjdCBJMkMKIAlzZWxlY3QgSTJDX09NQVAKLQlzZWxlY3QgTUZECisJc2VsZWN0IE1GRF9TVVBQT1JUCiAJc2VsZWN0IE1FTkVMQVVTIGlmIEFSQ0hfT01BUDIKIAlzZWxlY3QgVFdMNDAzMF9DT1JFIGlmIEFSQ0hfT01BUDMgfHwgQVJDSF9PTUFQNAogCXNlbGVjdCBUV0w0MDMwX1BPV0VSIGlmIEFSQ0hfT01BUDMgfHwgQVJDSF9PTUFQNApAQCAtMzUsNiArMzUsOCBAQAogCXNlbGVjdCBDUFVfVjcKIAlzZWxlY3QgVVNCX0FSQ0hfSEFTX0VIQ0kKIAlzZWxlY3QgQVJNX0wxX0NBQ0hFX1NISUZUXzYgaWYgIUFSQ0hfT01BUDQKKwlzZWxlY3QgQVJDSF9IQVNfT1BQCisJc2VsZWN0IFBNX09QUCBpZiBQTQogCiBjb25maWcgQVJDSF9PTUFQNAogCWJvb2wgIlRJIE9NQVA0IgpAQCAtNDQsNiArNDYsOSBAQAogCXNlbGVjdCBBUk1fR0lDCiAJc2VsZWN0IFBMMzEwX0VSUkFUQV81ODgzNjkKIAlzZWxlY3QgQVJNX0VSUkFUQV83MjA3ODkKKwlzZWxlY3QgQVJDSF9IQVNfT1BQCisJc2VsZWN0IFBNX09QUCBpZiBQTQorCXNlbGVjdCBVU0JfQVJDSF9IQVNfRUhDSQogCiBjb21tZW50ICJPTUFQIENvcmUgVHlwZSIKIAlkZXBlbmRzIG9uIEFSQ0hfT01BUDIKQEAgLTg1LDYgKzkwLDEyIEBACiBjb25maWcgT01BUF9QQUNLQUdFX0NCUAogICAgICAgIGJvb2wKIAorY29uZmlnIE9NQVBfUEFDS0FHRV9DQkwKKyAgICAgICBib29sCisKK2NvbmZpZyBPTUFQX1BBQ0tBR0VfQ0JTCisgICAgICAgYm9vbAorCiBjb21tZW50ICJPTUFQIEJvYXJkIFR5cGUiCiAJZGVwZW5kcyBvbiBBUkNIX09NQVAyUExVUwogCkBAIC0xMjgsNyArMTM5LDYgQEAKIAlkZXBlbmRzIG9uIEFSQ0hfT01BUDMKIAlkZWZhdWx0IHkKIAlzZWxlY3QgT01BUF9QQUNLQUdFX0NVUwotCXNlbGVjdCBPTUFQX01VWAogCiBjb25maWcgTUFDSF9PTUFQX0xEUAogCWJvb2wgIk9NQVAzIExEUCBib2FyZCIKQEAgLTE3NCwxMSArMTg0LDE3IEBACiAJZGVmYXVsdCB5CiAJc2VsZWN0IE9NQVBfUEFDS0FHRV9DQkIKIAorY29uZmlnIE1BQ0hfQ1JBTkVCT0FSRAorCWJvb2wgIkFNMzUxNy8wNSBDUkFORSBib2FyZCIKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDMKKwlzZWxlY3QgT01BUF9QQUNLQUdFX0NCQgorCiBjb25maWcgTUFDSF9PTUFQM19QQU5ET1JBCiAJYm9vbCAiT01BUDMgUGFuZG9yYSIKIAlkZXBlbmRzIG9uIEFSQ0hfT01BUDMKIAlkZWZhdWx0IHkKIAlzZWxlY3QgT01BUF9QQUNLQUdFX0NCQgorCXNlbGVjdCBSRUdVTEFUT1JfRklYRURfVk9MVEFHRQogCiBjb25maWcgTUFDSF9PTUFQM19UT1VDSEJPT0sKIAlib29sICJPTUFQMyBUb3VjaCBCb29rIgpAQCAtMjEwLDYgKzIyNiwxMiBAQAogCXNlbGVjdCBNQUNIX05PS0lBX044MTAKIAlzZWxlY3QgTUFDSF9OT0tJQV9OODEwX1dJTUFYCiAKK2NvbmZpZyBNQUNIX05PS0lBX1JNNjgwCisJYm9vbCAiTm9raWEgUk0tNjgwIGJvYXJkIgorCWRlcGVuZHMgb24gQVJDSF9PTUFQMworCWRlZmF1bHQgeQorCXNlbGVjdCBPTUFQX1BBQ0tBR0VfQ0JCCisKIGNvbmZpZyBNQUNIX05PS0lBX1JYNTEKIAlib29sICJOb2tpYSBSWC01MSBib2FyZCIKIAlkZXBlbmRzIG9uIEFSQ0hfT01BUDMKQEAgLTIyNCw2ICsyNDYsNyBAQAogCXNlbGVjdCBTRVJJQUxfODI1MAogCXNlbGVjdCBTRVJJQUxfQ09SRV9DT05TT0xFCiAJc2VsZWN0IFNFUklBTF84MjUwX0NPTlNPTEUKKwlzZWxlY3QgUkVHVUxBVE9SX0ZJWEVEX1ZPTFRBR0UKIAogY29uZmlnIE1BQ0hfT01BUF9aT09NMwogCWJvb2wgIk9NQVAzNjMwIFpvb20zIGJvYXJkIgpAQCAtMjMzLDIwICsyNTYsMTkgQEAKIAlzZWxlY3QgU0VSSUFMXzgyNTAKIAlzZWxlY3QgU0VSSUFMX0NPUkVfQ09OU09MRQogCXNlbGVjdCBTRVJJQUxfODI1MF9DT05TT0xFCisJc2VsZWN0IFJFR1VMQVRPUl9GSVhFRF9WT0xUQUdFCiAKIGNvbmZpZyBNQUNIX0NNX1QzNQogCWJvb2wgIkNvbXB1TGFiIENNLVQzNSBtb2R1bGUiCiAJZGVwZW5kcyBvbiBBUkNIX09NQVAzCiAJZGVmYXVsdCB5CiAJc2VsZWN0IE9NQVBfUEFDS0FHRV9DVVMKLQlzZWxlY3QgT01BUF9NVVgKIAogY29uZmlnIE1BQ0hfQ01fVDM1MTcKIAlib29sICJDb21wdUxhYiBDTS1UMzUxNyBtb2R1bGUiCiAJZGVwZW5kcyBvbiBBUkNIX09NQVAzCiAJZGVmYXVsdCB5CiAJc2VsZWN0IE9NQVBfUEFDS0FHRV9DQkIKLQlzZWxlY3QgT01BUF9NVVgKIAogY29uZmlnIE1BQ0hfSUdFUDAwMjAKIAlib29sICJJR0VQIHYyIGJvYXJkIgpAQCAtMjY1LDcgKzI4Nyw2IEBACiAJZGVwZW5kcyBvbiBBUkNIX09NQVAzCiAJZGVmYXVsdCB5CiAJc2VsZWN0IE9NQVBfUEFDS0FHRV9DVVMKLQlzZWxlY3QgT01BUF9NVVgKIAogY29uZmlnIE1BQ0hfT01BUF8zNjMwU0RQCiAJYm9vbCAiT01BUDM2MzAgU0RQIGJvYXJkIgpAQCAtMjc3LDExICsyOTgsMTUgQEAKIAlib29sICJPTUFQIDQ0MzAgU0RQIGJvYXJkIgogCWRlZmF1bHQgeQogCWRlcGVuZHMgb24gQVJDSF9PTUFQNAorCXNlbGVjdCBPTUFQX1BBQ0tBR0VfQ0JMCisJc2VsZWN0IE9NQVBfUEFDS0FHRV9DQlMKIAogY29uZmlnIE1BQ0hfT01BUDRfUEFOREEKIAlib29sICJPTUFQNCBQYW5kYSBCb2FyZCIKIAlkZWZhdWx0IHkKIAlkZXBlbmRzIG9uIEFSQ0hfT01BUDQKKwlzZWxlY3QgT01BUF9QQUNLQUdFX0NCTAorCXNlbGVjdCBPTUFQX1BBQ0tBR0VfQ0JTCiAKIGNvbmZpZyBPTUFQM19FTVUKIAlib29sICJPTUFQMyBkZWJ1Z2dpbmcgcGVyaXBoZXJhbHMiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9NYWtlZmlsZQppbmRleCA2MGU1MWJjLi5jZDczMzJmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvTWFrZWZpbGUKQEAgLTQsMzAgKzQsMzEgQEAKIAogIyBDb21tb24gc3VwcG9ydAogb2JqLXkgOj0gaWQubyBpby5vIGNvbnRyb2wubyBtdXgubyBkZXZpY2VzLm8gc2VyaWFsLm8gZ3BtYy5vIHRpbWVyLWdwLm8gcG0ubyBcCi0JIGNvbW1vbi5vCisJIGNvbW1vbi5vIGdwaW8ubyBkbWEubyB3ZF90aW1lci5vCiAKLW9tYXAtMi0zLWNvbW1vbgkJCQk9IGlycS5vIHNkcmMubyBwcm0yeHh4XzN4eHgubworb21hcC0yLTMtY29tbW9uCQkJCT0gaXJxLm8gc2RyYy5vCiBod21vZC1jb21tb24JCQkJPSBvbWFwX2h3bW9kLm8gXAogCQkJCQkgIG9tYXBfaHdtb2RfY29tbW9uX2RhdGEubwotcHJjbS1jb21tb24JCQkJPSBwcmNtLm8gcG93ZXJkb21haW4ubwogY2xvY2stY29tbW9uCQkJCT0gY2xvY2subyBjbG9ja19jb21tb25fZGF0YS5vIFwKLQkJCQkJICBjbG9ja2RvbWFpbi5vIGNsa3RfZHBsbC5vIFwKLQkJCQkJICBjbGt0X2Nsa3NlbC5vCisJCQkJCSAgY2xrdF9kcGxsLm8gY2xrdF9jbGtzZWwubwogCi1vYmotJChDT05GSUdfQVJDSF9PTUFQMikgKz0gJChvbWFwLTItMy1jb21tb24pICQocHJjbS1jb21tb24pICQoaHdtb2QtY29tbW9uKQotb2JqLSQoQ09ORklHX0FSQ0hfT01BUDMpICs9ICQob21hcC0yLTMtY29tbW9uKSAkKHByY20tY29tbW9uKSAkKGh3bW9kLWNvbW1vbikKLW9iai0kKENPTkZJR19BUkNIX09NQVA0KSArPSAkKHByY20tY29tbW9uKSBwcm00NHh4Lm8gJChod21vZC1jb21tb24pCitvYmotJChDT05GSUdfQVJDSF9PTUFQMikgKz0gJChvbWFwLTItMy1jb21tb24pICQoaHdtb2QtY29tbW9uKQorb2JqLSQoQ09ORklHX0FSQ0hfT01BUDMpICs9ICQob21hcC0yLTMtY29tbW9uKSAkKGh3bW9kLWNvbW1vbikKK29iai0kKENPTkZJR19BUkNIX09NQVA0KSArPSBwcm00NHh4Lm8gJChod21vZC1jb21tb24pCiAKIG9iai0kKENPTkZJR19PTUFQX01DQlNQKSArPSBtY2JzcC5vCiAKK29iai0kKENPTkZJR19UV0w0MDMwX0NPUkUpICs9IG9tYXBfdHdsLm8KKwogIyBTTVAgc3VwcG9ydCBPTkxZIGF2YWlsYWJsZSBmb3IgT01BUDQKIG9iai0kKENPTkZJR19TTVApCQkJKz0gb21hcC1zbXAubyBvbWFwLWhlYWRzbXAubwogb2JqLSQoQ09ORklHX0xPQ0FMX1RJTUVSUykJCSs9IHRpbWVyLW1wdS5vCiBvYmotJChDT05GSUdfSE9UUExVR19DUFUpCQkrPSBvbWFwLWhvdHBsdWcubwogb2JqLSQoQ09ORklHX0FSQ0hfT01BUDQpCQkrPSBvbWFwNDR4eC1zbWMubyBvbWFwNC1jb21tb24ubwogCi1BRkxBR1Nfb21hcC1oZWFkc21wLm8JCQk6PS1XYSwtbWFyY2g9YXJtdjctYQotQUZMQUdTX29tYXA0NHh4LXNtYy5vCQkJOj0tV2EsLW1hcmNoPWFybXY3LWEKK3BsdXNfc2VjIDo9ICQoY2FsbCBhcy1pbnN0ciwuYXJjaF9leHRlbnNpb24gc2VjLCtzZWMpCitBRkxBR1Nfb21hcC1oZWFkc21wLm8JCQk6PS1XYSwtbWFyY2g9YXJtdjctYSQocGx1c19zZWMpCitBRkxBR1Nfb21hcDQ0eHgtc21jLm8JCQk6PS1XYSwtbWFyY2g9YXJtdjctYSQocGx1c19zZWMpCiAKICMgRnVuY3Rpb25zIGxvYWRlZCB0byBTUkFNCiBvYmotJChDT05GSUdfQVJDSF9PTUFQMjQyMCkJCSs9IHNyYW0yNDJ4Lm8KQEAgLTQyLDE4ICs0MywyOSBAQAogb2JqLSQoQ09ORklHX0FSQ0hfT01BUDI0MjApCQkrPSBtdXgyNDIwLm8KIG9iai0kKENPTkZJR19BUkNIX09NQVAyNDMwKQkJKz0gbXV4MjQzMC5vCiBvYmotJChDT05GSUdfQVJDSF9PTUFQMykJCSs9IG11eDM0eHgubworb2JqLSQoQ09ORklHX0FSQ0hfT01BUDQpCQkrPSBtdXg0NHh4Lm8KIAogIyBTTVMvU0RSQwogb2JqLSQoQ09ORklHX0FSQ0hfT01BUDIpCQkrPSBzZHJjMnh4eC5vCiAjIG9iai0kKENPTkZJR19BUkNIX09NQVAzKQkJKz0gc2RyYzN4eHgubwogCisjIE9QUCB0YWJsZSBpbml0aWFsaXphdGlvbgoraWZlcSAoJChDT05GSUdfUE1fT1BQKSx5KQorb2JqLXkJCQkJCSs9IG9wcC5vCitvYmotJChDT05GSUdfQVJDSF9PTUFQMykJCSs9IG9wcDN4eHhfZGF0YS5vCitvYmotJChDT05GSUdfQVJDSF9PTUFQNCkJCSs9IG9wcDR4eHhfZGF0YS5vCitlbmRpZgorCiAjIFBvd2VyIE1hbmFnZW1lbnQKIGlmZXEgKCQoQ09ORklHX1BNKSx5KQogb2JqLSQoQ09ORklHX0FSQ0hfT01BUDIpCQkrPSBwbTI0eHgubwotb2JqLSQoQ09ORklHX0FSQ0hfT01BUDIpCQkrPSBzbGVlcDI0eHgubyBwbV9idXMubwotb2JqLSQoQ09ORklHX0FSQ0hfT01BUDMpCQkrPSBwbTM0eHgubyBzbGVlcDM0eHgubyBjcHVpZGxlMzR4eC5vIHBtX2J1cy5vCi1vYmotJChDT05GSUdfQVJDSF9PTUFQNCkJCSs9IHBtNDR4eC5vIHBtX2J1cy5vCitvYmotJChDT05GSUdfQVJDSF9PTUFQMikJCSs9IHNsZWVwMjR4eC5vIHBtX2J1cy5vIHZvbHRhZ2Uubworb2JqLSQoQ09ORklHX0FSQ0hfT01BUDMpCQkrPSBwbTM0eHgubyBzbGVlcDM0eHgubyB2b2x0YWdlLm8gXAorCQkJCQkgICBjcHVpZGxlMzR4eC5vIHBtX2J1cy5vCitvYmotJChDT05GSUdfQVJDSF9PTUFQNCkJCSs9IHBtNDR4eC5vIHZvbHRhZ2UubyBwbV9idXMubwogb2JqLSQoQ09ORklHX1BNX0RFQlVHKQkJCSs9IHBtLWRlYnVnLm8KK29iai0kKENPTkZJR19PTUFQX1NNQVJUUkVGTEVYKSAgICAgICAgICArPSBzcl9kZXZpY2UubyBzbWFydHJlZmxleC5vCitvYmotJChDT05GSUdfT01BUF9TTUFSVFJFRkxFWF9DTEFTUzMpCSs9IHNtYXJ0cmVmbGV4LWNsYXNzMy5vCiAKIEFGTEFHU19zbGVlcDI0eHgubwkJCTo9LVdhLC1tYXJjaD1hcm12NgogQUZMQUdTX3NsZWVwMzR4eC5vCQkJOj0tV2EsLW1hcmNoPWFybXY3LWEKQEAgLTY1LDEwICs3NywzNiBAQAogZW5kaWYKIAogIyBQUkNNCi1vYmotJChDT05GSUdfQVJDSF9PTUFQMikJCSs9IGNtLm8KLW9iai0kKENPTkZJR19BUkNIX09NQVAzKQkJKz0gY20ubwotb2JqLSQoQ09ORklHX0FSQ0hfT01BUDQpCQkrPSBjbTR4eHgubworb2JqLSQoQ09ORklHX0FSQ0hfT01BUDIpCQkrPSBwcmNtLm8gY20yeHh4XzN4eHgubyBwcm0yeHh4XzN4eHgubworb2JqLSQoQ09ORklHX0FSQ0hfT01BUDMpCQkrPSBwcmNtLm8gY20yeHh4XzN4eHgubyBwcm0yeHh4XzN4eHgubworIyBYWFggVGhlIHByZXNlbmNlIG9mIGNtMnh4eF8zeHh4Lm8gb24gdGhlIGxpbmUgYmVsb3cgaXMgdGVtcG9yYXJ5IGFuZAorIyB3aWxsIGJlIHJlbW92ZWQgb25jZSB0aGUgT01BUDQgcGFydCBvZiB0aGUgY29kZWJhc2UgaXMgY29udmVydGVkIHRvCisjIHVzZSBPTUFQNC1zcGVjaWZpYyBQUkNNIGZ1bmN0aW9ucy4KK29iai0kKENPTkZJR19BUkNIX09NQVA0KQkJKz0gcHJjbS5vIGNtMnh4eF8zeHh4Lm8gY21pbnN0NDR4eC5vIFwKKwkJCQkJICAgY200NHh4Lm8gcHJjbV9tcHU0NHh4Lm8gXAorCQkJCQkgICBwcm1pbnN0NDR4eC5vCiAKKyMgT01BUCBwb3dlcmRvbWFpbiBmcmFtZXdvcmsKK3Bvd2VyZG9tYWluLWNvbW1vbgkJCSs9IHBvd2VyZG9tYWluLm8gcG93ZXJkb21haW4tY29tbW9uLm8KK29iai0kKENPTkZJR19BUkNIX09NQVAyKQkJKz0gJChwb3dlcmRvbWFpbi1jb21tb24pIFwKKwkJCQkJICAgcG93ZXJkb21haW4yeHh4XzN4eHgubyBcCisJCQkJCSAgIHBvd2VyZG9tYWluczJ4eHhfZGF0YS5vIFwKKwkJCQkJICAgcG93ZXJkb21haW5zMnh4eF8zeHh4X2RhdGEubworb2JqLSQoQ09ORklHX0FSQ0hfT01BUDMpCQkrPSAkKHBvd2VyZG9tYWluLWNvbW1vbikgXAorCQkJCQkgICBwb3dlcmRvbWFpbjJ4eHhfM3h4eC5vIFwKKwkJCQkJICAgcG93ZXJkb21haW5zM3h4eF9kYXRhLm8gXAorCQkJCQkgICBwb3dlcmRvbWFpbnMyeHh4XzN4eHhfZGF0YS5vCitvYmotJChDT05GSUdfQVJDSF9PTUFQNCkJCSs9ICQocG93ZXJkb21haW4tY29tbW9uKSBcCisJCQkJCSAgIHBvd2VyZG9tYWluNDR4eC5vIFwKKwkJCQkJICAgcG93ZXJkb21haW5zNDR4eF9kYXRhLm8KKworIyBQUkNNIGNsb2NrZG9tYWluIGNvbnRyb2wKK29iai0kKENPTkZJR19BUkNIX09NQVAyKQkJKz0gY2xvY2tkb21haW4ubyBcCisJCQkJCSAgIGNsb2NrZG9tYWluczJ4eHhfM3h4eF9kYXRhLm8KK29iai0kKENPTkZJR19BUkNIX09NQVAzKQkJKz0gY2xvY2tkb21haW4ubyBcCisJCQkJCSAgIGNsb2NrZG9tYWluczJ4eHhfM3h4eF9kYXRhLm8KK29iai0kKENPTkZJR19BUkNIX09NQVA0KQkJKz0gY2xvY2tkb21haW4ubyBcCisJCQkJCSAgIGNsb2NrZG9tYWluczQ0eHhfZGF0YS5vCiAjIENsb2NrIGZyYW1ld29yawogb2JqLSQoQ09ORklHX0FSQ0hfT01BUDIpCQkrPSAkKGNsb2NrLWNvbW1vbikgY2xvY2syeHh4Lm8gXAogCQkJCQkgICBjbGt0Mnh4eF9zeXMubyBcCkBAIC0xMzksMTcgKzE3NywyMCBAQAogCQkJCQkgICBoc21tYy5vIFwKIAkJCQkJICAgYm9hcmQtZmxhc2gubwogb2JqLSQoQ09ORklHX01BQ0hfTk9LSUFfTjhYMCkJCSs9IGJvYXJkLW44eDAubworb2JqLSQoQ09ORklHX01BQ0hfTk9LSUFfUk02ODApCQkrPSBib2FyZC1ybTY4MC5vIFwKKwkJCQkJICAgc2RyYW0tbm9raWEubyBcCisJCQkJCSAgIGhzbW1jLm8KIG9iai0kKENPTkZJR19NQUNIX05PS0lBX1JYNTEpCQkrPSBib2FyZC1yeDUxLm8gXAotCQkJCQkgICBib2FyZC1yeDUxLXNkcmFtLm8gXAorCQkJCQkgICBzZHJhbS1ub2tpYS5vIFwKIAkJCQkJICAgYm9hcmQtcng1MS1wZXJpcGhlcmFscy5vIFwKIAkJCQkJICAgYm9hcmQtcng1MS12aWRlby5vIFwKIAkJCQkJICAgaHNtbWMubwotb2JqLSQoQ09ORklHX01BQ0hfT01BUF9aT09NMikJCSs9IGJvYXJkLXpvb20yLm8gXAorb2JqLSQoQ09ORklHX01BQ0hfT01BUF9aT09NMikJCSs9IGJvYXJkLXpvb20ubyBcCiAJCQkJCSAgIGJvYXJkLXpvb20tcGVyaXBoZXJhbHMubyBcCiAJCQkJCSAgIGJvYXJkLWZsYXNoLm8gXAogCQkJCQkgICBoc21tYy5vIFwKIAkJCQkJICAgYm9hcmQtem9vbS1kZWJ1Z2JvYXJkLm8KLW9iai0kKENPTkZJR19NQUNIX09NQVBfWk9PTTMpCQkrPSBib2FyZC16b29tMy5vIFwKK29iai0kKENPTkZJR19NQUNIX09NQVBfWk9PTTMpCQkrPSBib2FyZC16b29tLm8gXAogCQkJCQkgICBib2FyZC16b29tLXBlcmlwaGVyYWxzLm8gXAogCQkJCQkgICBib2FyZC1mbGFzaC5vIFwKIAkJCQkJICAgaHNtbWMubyBcCkBAIC0xNjgsMTIgKzIwOSwxNiBAQAogb2JqLSQoQ09ORklHX01BQ0hfT01BUDNfVE9VQ0hCT09LKQkrPSBib2FyZC1vbWFwM3RvdWNoYm9vay5vIFwKIAkJCQkJICAgaHNtbWMubwogb2JqLSQoQ09ORklHX01BQ0hfT01BUF80NDMwU0RQKQkJKz0gYm9hcmQtNDQzMHNkcC5vIFwKLQkJCQkJICAgaHNtbWMubworCQkJCQkgICBoc21tYy5vIFwKKwkJCQkJICAgb21hcF9waHlfaW50ZXJuYWwubwogb2JqLSQoQ09ORklHX01BQ0hfT01BUDRfUEFOREEpCQkrPSBib2FyZC1vbWFwNHBhbmRhLm8gXAotCQkJCQkgICBoc21tYy5vCisJCQkJCSAgIGhzbW1jLm8gXAorCQkJCQkgICBvbWFwX3BoeV9pbnRlcm5hbC5vCiAKIG9iai0kKENPTkZJR19NQUNIX09NQVAzNTE3RVZNKQkJKz0gYm9hcmQtYW0zNTE3ZXZtLm8KIAorb2JqLSQoQ09ORklHX01BQ0hfQ1JBTkVCT0FSRCkJCSs9IGJvYXJkLWFtMzUxN2NyYW5lLm8KKwogb2JqLSQoQ09ORklHX01BQ0hfU0JDMzUzMCkJCSs9IGJvYXJkLW9tYXAzc3RhbGtlci5vIFwKIAkJCQkJICAgaHNtbWMubwogIyBQbGF0Zm9ybSBzcGVjaWZpYyBkZXZpY2UgaW5pdCBjb2RlCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTI0MzBzZHAuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtMjQzMHNkcC5jCmluZGV4IGI1MjdmOGQuLmUwNjYxNzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtMjQzMHNkcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtMjQzMHNkcC5jCkBAIC0xMzUsNyArMTM1LDcgQEAKIAogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfa2VybmVsIHNkcDI0MzBfY29uZmlnW10gPSB7CitzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2tlcm5lbCBzZHAyNDMwX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7CiAJe09NQVBfVEFHX0xDRCwgJnNkcDI0MzBfbGNkX2NvbmZpZ30sCiB9OwogCkBAIC0xNDMsOSArMTQzLDkgQEAKIHsKIAlvbWFwX2JvYXJkX2NvbmZpZyA9IHNkcDI0MzBfY29uZmlnOwogCW9tYXBfYm9hcmRfY29uZmlnX3NpemUgPSBBUlJBWV9TSVpFKHNkcDI0MzBfY29uZmlnKTsKLQlvbWFwMl9pbml0X2NvbW1vbl9odyhOVUxMLCBOVUxMKTsKKwlvbWFwMl9pbml0X2NvbW1vbl9pbmZyYXN0cnVjdHVyZSgpOworCW9tYXAyX2luaXRfY29tbW9uX2RldmljZXMoTlVMTCwgTlVMTCk7CiAJb21hcF9pbml0X2lycSgpOwotCW9tYXBfZ3Bpb19pbml0KCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9ncGlvX3BsYXRmb3JtX2RhdGEgc2RwMjQzMF9ncGlvX2RhdGEgPSB7CkBAIC0yMTgsOCArMjE4LDYgQEAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9tdXggYm9hcmRfbXV4W10gX19pbml0ZGF0YSA9IHsKIAl7IC5yZWdfb2Zmc2V0ID0gT01BUF9NVVhfVEVSTUlOQVRPUiB9LAogfTsKLSNlbHNlCi0jZGVmaW5lIGJvYXJkX211eAlOVUxMCiAjZW5kaWYKIAogc3RhdGljIHZvaWQgX19pbml0IG9tYXBfMjQzMHNkcF9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTM0MzBzZHAuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtMzQzMHNkcC5jCmluZGV4IDRlMzc0MmMuLjNiMzllZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtMzQzMHNkcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtMzQzMHNkcC5jCkBAIC0zMjYsOSArMzI2LDkgQEAKIAlvbWFwX2JvYXJkX2NvbmZpZyA9IHNkcDM0MzBfY29uZmlnOwogCW9tYXBfYm9hcmRfY29uZmlnX3NpemUgPSBBUlJBWV9TSVpFKHNkcDM0MzBfY29uZmlnKTsKIAlvbWFwM19wbV9pbml0X2NwdWlkbGUob21hcDNfY3B1aWRsZV9wYXJhbXNfdGFibGUpOwotCW9tYXAyX2luaXRfY29tbW9uX2h3KGh5YjE4bTUxMjE2MGFmNl9zZHJjX3BhcmFtcywgTlVMTCk7CisJb21hcDJfaW5pdF9jb21tb25faW5mcmFzdHJ1Y3R1cmUoKTsKKwlvbWFwMl9pbml0X2NvbW1vbl9kZXZpY2VzKGh5YjE4bTUxMjE2MGFmNl9zZHJjX3BhcmFtcywgTlVMTCk7CiAJb21hcF9pbml0X2lycSgpOwotCW9tYXBfZ3Bpb19pbml0KCk7CiB9CiAKIHN0YXRpYyBpbnQgc2RwMzQzMF9iYXR0X3RhYmxlW10gPSB7CkBAIC02NjMsOCArNjYzLDYgQEAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9tdXggYm9hcmRfbXV4W10gX19pbml0ZGF0YSA9IHsKIAl7IC5yZWdfb2Zmc2V0ID0gT01BUF9NVVhfVEVSTUlOQVRPUiB9LAogfTsKLSNlbHNlCi0jZGVmaW5lIGJvYXJkX211eAlOVUxMCiAjZW5kaWYKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtMzYzMHNkcC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0zNjMwc2RwLmMKaW5kZXggYmJjZjU4MC4uNWQ0MWRiZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0zNjMwc2RwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0zNjMwc2RwLmMKQEAgLTczLDE4ICs3MywxNiBAQAogewogCW9tYXBfYm9hcmRfY29uZmlnID0gc2RwX2NvbmZpZzsKIAlvbWFwX2JvYXJkX2NvbmZpZ19zaXplID0gQVJSQVlfU0laRShzZHBfY29uZmlnKTsKLQlvbWFwMl9pbml0X2NvbW1vbl9odyhoOG1ieDAwdTBtZXIwZW1fc2RyY19wYXJhbXMsCi0JCQloOG1ieDAwdTBtZXIwZW1fc2RyY19wYXJhbXMpOworCW9tYXAyX2luaXRfY29tbW9uX2luZnJhc3RydWN0dXJlKCk7CisJb21hcDJfaW5pdF9jb21tb25fZGV2aWNlcyhoOG1ieDAwdTBtZXIwZW1fc2RyY19wYXJhbXMsCisJCQkJICBoOG1ieDAwdTBtZXIwZW1fc2RyY19wYXJhbXMpOwogCW9tYXBfaW5pdF9pcnEoKTsKLQlvbWFwX2dwaW9faW5pdCgpOwogfQogCiAjaWZkZWYgQ09ORklHX09NQVBfTVVYCiBzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfbXV4IGJvYXJkX211eFtdIF9faW5pdGRhdGEgPSB7CiAJeyAucmVnX29mZnNldCA9IE9NQVBfTVVYX1RFUk1JTkFUT1IgfSwKIH07Ci0jZWxzZQotI2RlZmluZSBib2FyZF9tdXgJTlVMTAogI2VuZGlmCiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTQ0MzBzZHAuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtNDQzMHNkcC5jCmluZGV4IGRmNWE0MjUuLmE3MGJkZjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtNDQzMHNkcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtNDQzMHNkcC5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+CiAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL21hY2hpbmUuaD4KICNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisjaW5jbHVkZSA8bGludXgvbGVkc19wd20uaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL29tYXA0LWNvbW1vbi5oPgpAQCAtMzUsNiArMzYsNyBAQAogI2luY2x1ZGUgPHBsYXQvdXNiLmg+CiAjaW5jbHVkZSA8cGxhdC9tbWMuaD4KIAorI2luY2x1ZGUgIm11eC5oIgogI2luY2x1ZGUgImhzbW1jLmgiCiAjaW5jbHVkZSAidGltZXItZ3AuaCIKICNpbmNsdWRlICJjb250cm9sLmgiCkBAIC00Miw2ICs0NCw3IEBACiAjZGVmaW5lIEVUSF9LUzg4NTFfSVJRCQkJMzQKICNkZWZpbmUgRVRIX0tTODg1MV9QT1dFUl9PTgkJNDgKICNkZWZpbmUgRVRIX0tTODg1MV9RVUFSVAkJMTM4CisjZGVmaW5lIE9NQVA0U0RQX01ETV9QV1JfRU5fR1BJTwkxNTcKICNkZWZpbmUgT01BUDRfU0ZINzc0MV9TRU5TT1JfT1VUUFVUX0dQSU8JMTg0CiAjZGVmaW5lIE9NQVA0X1NGSDc3NDFfRU5BQkxFX0dQSU8JCTE4OAogCkBAIC05Niw2ICs5OSwyOCBAQAogCS5udW1fbGVkcwk9IEFSUkFZX1NJWkUoc2RwNDQzMF9ncGlvX2xlZHMpLAogfTsKIAorc3RhdGljIHN0cnVjdCBsZWRfcHdtIHNkcDQ0MzBfcHdtX2xlZHNbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJvbWFwNDpncmVlbjpjaHJnIiwKKwkJLnB3bV9pZAkJPSAxLAorCQkubWF4X2JyaWdodG5lc3MJPSAyNTUsCisJCS5wd21fcGVyaW9kX25zCT0gNzgxMjUwMCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBsZWRfcHdtX3BsYXRmb3JtX2RhdGEgc2RwNDQzMF9wd21fZGF0YSA9IHsKKwkubnVtX2xlZHMJPSBBUlJBWV9TSVpFKHNkcDQ0MzBfcHdtX2xlZHMpLAorCS5sZWRzCQk9IHNkcDQ0MzBfcHdtX2xlZHMsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzZHA0NDMwX2xlZHNfcHdtID0geworCS5uYW1lCT0gImxlZHNfcHdtIiwKKwkuaWQJPSAtMSwKKwkuZGV2CT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZzZHA0NDMwX3B3bV9kYXRhLAorCX0sCit9OworCiBzdGF0aWMgaW50IG9tYXBfcHJveF9hY3RpdmF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJZ3Bpb19zZXRfdmFsdWUoT01BUDRfU0ZINzc0MV9FTkFCTEVfR1BJTyAsIDEpOwpAQCAtMjAzLDYgKzIyOCw3IEBACiAJJnNkcDQ0MzBfbGNkX2RldmljZSwKIAkmc2RwNDQzMF9ncGlvX2tleXNfZGV2aWNlLAogCSZzZHA0NDMwX2xlZHNfZ3BpbywKKwkmc2RwNDQzMF9sZWRzX3B3bSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9sY2RfY29uZmlnIHNkcDQ0MzBfbGNkX2NvbmZpZyBfX2luaXRkYXRhID0gewpAQCAtMjE3LDIwICsyNDMsMzcgQEAKIHsKIAlvbWFwX2JvYXJkX2NvbmZpZyA9IHNkcDQ0MzBfY29uZmlnOwogCW9tYXBfYm9hcmRfY29uZmlnX3NpemUgPSBBUlJBWV9TSVpFKHNkcDQ0MzBfY29uZmlnKTsKLQlvbWFwMl9pbml0X2NvbW1vbl9odyhOVUxMLCBOVUxMKTsKKwlvbWFwMl9pbml0X2NvbW1vbl9pbmZyYXN0cnVjdHVyZSgpOworCW9tYXAyX2luaXRfY29tbW9uX2RldmljZXMoTlVMTCwgTlVMTCk7CiAjaWZkZWYgQ09ORklHX09NQVBfMzJLX1RJTUVSCiAJb21hcDJfZ3BfY2xvY2tldmVudF9zZXRfZ3B0aW1lcigxKTsKICNlbmRpZgogCWdpY19pbml0X2lycSgpOwotCW9tYXBfZ3Bpb19pbml0KCk7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZWhjaV9oY2Rfb21hcF9wbGF0Zm9ybV9kYXRhIGVoY2lfcGRhdGEgX19pbml0Y29uc3QgPSB7CisJLnBvcnRfbW9kZVswXQk9IEVIQ0lfSENEX09NQVBfTU9ERV9QSFksCisJLnBvcnRfbW9kZVsxXQk9IEVIQ0lfSENEX09NQVBfTU9ERV9VTktOT1dOLAorCS5wb3J0X21vZGVbMl0JPSBFSENJX0hDRF9PTUFQX01PREVfVU5LTk9XTiwKKwkucGh5X3Jlc2V0CT0gZmFsc2UsCisJLnJlc2V0X2dwaW9fcG9ydFswXSAgPSAtRUlOVkFMLAorCS5yZXNldF9ncGlvX3BvcnRbMV0gID0gLUVJTlZBTCwKKwkucmVzZXRfZ3Bpb19wb3J0WzJdICA9IC1FSU5WQUwsCit9OworCiBzdGF0aWMgc3RydWN0IG9tYXBfbXVzYl9ib2FyZF9kYXRhIG11c2JfYm9hcmRfZGF0YSA9IHsKIAkuaW50ZXJmYWNlX3R5cGUJCT0gTVVTQl9JTlRFUkZBQ0VfVVRNSSwKLQkubW9kZQkJCT0gTVVTQl9QRVJJUEhFUkFMLAorCS5tb2RlCQkJPSBNVVNCX09URywKIAkucG93ZXIJCQk9IDEwMCwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgdHdsNDAzMF91c2JfZGF0YSBvbWFwNF91c2JwaHlfZGF0YSA9IHsKKwkucGh5X2luaXQJPSBvbWFwNDQzMF9waHlfaW5pdCwKKwkucGh5X2V4aXQJPSBvbWFwNDQzMF9waHlfZXhpdCwKKwkucGh5X3Bvd2VyCT0gb21hcDQ0MzBfcGh5X3Bvd2VyLAorCS5waHlfc2V0X2Nsb2NrCT0gb21hcDQ0MzBfcGh5X3NldF9jbGssCit9OworCiBzdGF0aWMgc3RydWN0IG9tYXAyX2hzbW1jX2luZm8gbW1jW10gPSB7CiAJewogCQkubW1jCQk9IDEsCkBAIC00NTAsNiArNDkzLDcgQEAKIAkudmF1eDEJCT0gJnNkcDQ0MzBfdmF1eDEsCiAJLnZhdXgyCQk9ICZzZHA0NDMwX3ZhdXgyLAogCS52YXV4MwkJPSAmc2RwNDQzMF92YXV4MywKKwkudXNiCQk9ICZvbWFwNF91c2JwaHlfZGF0YQogfTsKIAogc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIHNkcDQ0MzBfaTJjX2JvYXJkaW5mb1tdID0gewpAQCAtNDY0LDYgKzUwOCw5IEBACiAJewogCQlJMkNfQk9BUkRfSU5GTygidG1wMTA1IiwgMHg0OCksCiAJfSwKKwl7CisJCUkyQ19CT0FSRF9JTkZPKCJiaDE3ODAiLCAweDI5KSwKKwl9LAogfTsKIHN0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBzZHA0NDMwX2kyY180X2JvYXJkaW5mb1tdID0gewogCXsKQEAgLTUwNSwyMCArNTUyLDM3IEBACiAJfQogfQogCisjaWZkZWYgQ09ORklHX09NQVBfTVVYCitzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfbXV4IGJvYXJkX211eFtdIF9faW5pdGRhdGEgPSB7CisJeyAucmVnX29mZnNldCA9IE9NQVBfTVVYX1RFUk1JTkFUT1IgfSwKK307CisjZWxzZQorI2RlZmluZSBib2FyZF9tdXgJTlVMTAorI2VuZGlmCisKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwXzQ0MzBzZHBfaW5pdCh2b2lkKQogewogCWludCBzdGF0dXM7CisJaW50IHBhY2thZ2UgPSBPTUFQX1BBQ0tBR0VfQ0JTOworCisJaWYgKG9tYXBfcmV2KCkgPT0gT01BUDQ0MzBfUkVWX0VTMV8wKQorCQlwYWNrYWdlID0gT01BUF9QQUNLQUdFX0NCTDsKKwlvbWFwNF9tdXhfaW5pdChib2FyZF9tdXgsIHBhY2thZ2UpOwogCiAJb21hcDRfaTJjX2luaXQoKTsKIAlvbWFwX3NmaDc3NDFwcm94X2luaXQoKTsKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhzZHA0NDMwX2RldmljZXMsIEFSUkFZX1NJWkUoc2RwNDQzMF9kZXZpY2VzKSk7CiAJb21hcF9zZXJpYWxfaW5pdCgpOwogCW9tYXA0X3R3bDYwMzBfaHNtbWNfaW5pdChtbWMpOwotCS8qIE9NQVA0IFNEUCB1c2VzIGludGVybmFsIHRyYW5zY2VpdmVyIHNvIHJlZ2lzdGVyIG5vcCB0cmFuc2NlaXZlciAqLwotCXVzYl9ub3BfeGNlaXZfcmVnaXN0ZXIoKTsKLQkvKiBGSVhNRTogYWxsb3cgbXVsdGktb21hcCB0byBib290IHVudGlsIG11c2IgaXMgdXBkYXRlZCBmb3Igb21hcDQgKi8KLQlpZiAoIWNwdV9pc19vbWFwNDR4eCgpKQotCQl1c2JfbXVzYl9pbml0KCZtdXNiX2JvYXJkX2RhdGEpOworCisJLyogUG93ZXIgb24gdGhlIFVMUEkgUEhZICovCisJaWYgKGdwaW9faXNfdmFsaWQoT01BUDRTRFBfTURNX1BXUl9FTl9HUElPKSkgeworCQkvKiBGSVhNRTogQXNzdW1lcyBwYWQgaXMgYWxyZWFkeSBtdXhlZCBmb3IgR1BJTyBtb2RlICovCisJCWdwaW9fcmVxdWVzdChPTUFQNFNEUF9NRE1fUFdSX0VOX0dQSU8sICJVU0JCMSBQSFkgVk1ETV8zVjMiKTsKKwkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KE9NQVA0U0RQX01ETV9QV1JfRU5fR1BJTywgMSk7CisJfQorCXVzYl9laGNpX2luaXQoJmVoY2lfcGRhdGEpOworCXVzYl9tdXNiX2luaXQoJm11c2JfYm9hcmRfZGF0YSk7CiAKIAlzdGF0dXMgPSBvbWFwX2V0aGVybmV0X2luaXQoKTsKIAlpZiAoc3RhdHVzKSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWFtMzUxN2NyYW5lLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWFtMzUxN2NyYW5lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFhY2I1YQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtYW0zNTE3Y3JhbmUuYwpAQCAtMCwwICsxLDExNiBAQAorLyoKKyAqIFN1cHBvcnQgZm9yIEFNMzUxNy8wNSBDcmFuZWJvYXJkCisgKiBodHRwOi8vd3d3Lm1pc3RyYWxzb2x1dGlvbnMuY29tL3Byb2R1Y3RzL2NyYW5lYm9hcmQucGhwCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIE1pc3RyYWwgU29sdXRpb25zIFB2dCBMdGQuIDx3d3cubWlzdHJhbHNvbHV0aW9ucy5jb20+CisgKiBBdXRob3I6IFIuU3JpbmF0aCA8c3JpbmF0aEBtaXN0cmFsc29sdXRpb25zLmNvbT4KKyAqCisgKiBCYXNlZCBvbiBtYWNoLW9tYXAyL2JvYXJkLWFtMzUxN2V2bS5jCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiB2ZXJzaW9uIDIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkICJhcyBpcyIgV0lUSE9VVCBBTlkgV0FSUkFOVFkgb2YgYW55IGtpbmQsCisgKiB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZDsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorCisjaW5jbHVkZSA8cGxhdC9ib2FyZC5oPgorI2luY2x1ZGUgPHBsYXQvY29tbW9uLmg+CisjaW5jbHVkZSA8cGxhdC91c2IuaD4KKworI2luY2x1ZGUgIm11eC5oIgorI2luY2x1ZGUgImNvbnRyb2wuaCIKKworI2RlZmluZSBHUElPX1VTQl9QT1dFUgkJMzUKKyNkZWZpbmUgR1BJT19VU0JfTlJFU0VUCQkzOAorCisKKy8qIEJvYXJkIGluaXRpYWxpemF0aW9uICovCitzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2tlcm5lbCBhbTM1MTdfY3JhbmVfY29uZmlnW10gX19pbml0ZGF0YSA9IHsKK307CisKKyNpZmRlZiBDT05GSUdfT01BUF9NVVgKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9tdXggYm9hcmRfbXV4W10gX19pbml0ZGF0YSA9IHsKKwl7IC5yZWdfb2Zmc2V0ID0gT01BUF9NVVhfVEVSTUlOQVRPUiB9LAorfTsKKyNlbHNlCisjZGVmaW5lIGJvYXJkX211eAlOVUxMCisjZW5kaWYKKworc3RhdGljIHZvaWQgX19pbml0IGFtMzUxN19jcmFuZV9pbml0X2lycSh2b2lkKQoreworCW9tYXBfYm9hcmRfY29uZmlnID0gYW0zNTE3X2NyYW5lX2NvbmZpZzsKKwlvbWFwX2JvYXJkX2NvbmZpZ19zaXplID0gQVJSQVlfU0laRShhbTM1MTdfY3JhbmVfY29uZmlnKTsKKworCW9tYXAyX2luaXRfY29tbW9uX2luZnJhc3RydWN0dXJlKCk7CisJb21hcDJfaW5pdF9jb21tb25fZGV2aWNlcyhOVUxMLCBOVUxMKTsKKwlvbWFwX2luaXRfaXJxKCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZWhjaV9oY2Rfb21hcF9wbGF0Zm9ybV9kYXRhIGVoY2lfcGRhdGEgX19pbml0ZGF0YSA9IHsKKwkucG9ydF9tb2RlWzBdID0gRUhDSV9IQ0RfT01BUF9NT0RFX1BIWSwKKwkucG9ydF9tb2RlWzFdID0gRUhDSV9IQ0RfT01BUF9NT0RFX1VOS05PV04sCisJLnBvcnRfbW9kZVsyXSA9IEVIQ0lfSENEX09NQVBfTU9ERV9VTktOT1dOLAorCisJLnBoeV9yZXNldCAgPSB0cnVlLAorCS5yZXNldF9ncGlvX3BvcnRbMF0gID0gR1BJT19VU0JfTlJFU0VULAorCS5yZXNldF9ncGlvX3BvcnRbMV0gID0gLUVJTlZBTCwKKwkucmVzZXRfZ3Bpb19wb3J0WzJdICA9IC1FSU5WQUwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBhbTM1MTdfY3JhbmVfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlvbWFwM19tdXhfaW5pdChib2FyZF9tdXgsIE9NQVBfUEFDS0FHRV9DQkIpOworCW9tYXBfc2VyaWFsX2luaXQoKTsKKworCS8qIENvbmZpZ3VyZSBHUElPIGZvciBFSENJIHBvcnQgKi8KKwlpZiAob21hcF9tdXhfaW5pdF9ncGlvKEdQSU9fVVNCX05SRVNFVCwgT01BUF9QSU5fT1VUUFVUKSkgeworCQlwcl9lcnIoIkNhbiBub3QgY29uZmlndXJlIG11eCBmb3IgR1BJT19VU0JfTlJFU0VUICVkXG4iLAorCQkJR1BJT19VU0JfTlJFU0VUKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChvbWFwX211eF9pbml0X2dwaW8oR1BJT19VU0JfUE9XRVIsIE9NQVBfUElOX09VVFBVVCkpIHsKKwkJcHJfZXJyKCJDYW4gbm90IGNvbmZpZ3VyZSBtdXggZm9yIEdQSU9fVVNCX1BPV0VSICVkXG4iLAorCQkJR1BJT19VU0JfUE9XRVIpOworCQlyZXR1cm47CisJfQorCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KEdQSU9fVVNCX1BPV0VSLCAidXNiX2VoY2lfZW5hYmxlIik7CisJaWYgKHJldCA8IDApIHsKKwkJcHJfZXJyKCJDYW4gbm90IHJlcXVlc3QgR1BJTyAlZFxuIiwgR1BJT19VU0JfUE9XRVIpOworCQlyZXR1cm47CisJfQorCisJcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fVVNCX1BPV0VSLCAxKTsKKwlpZiAocmV0IDwgMCkgeworCQlncGlvX2ZyZWUoR1BJT19VU0JfUE9XRVIpOworCQlwcl9lcnIoIlVuYWJsZSB0byBpbml0aWFsaXplIEVIQ0kgcG93ZXJcbiIpOworCQlyZXR1cm47CisJfQorCisJdXNiX2VoY2lfaW5pdCgmZWhjaV9wZGF0YSk7Cit9CisKK01BQ0hJTkVfU1RBUlQoQ1JBTkVCT0FSRCwgIkFNMzUxNy8wNSBDUkFORUJPQVJEIikKKwkuYm9vdF9wYXJhbXMJPSAweDgwMDAwMTAwLAorCS5tYXBfaW8JCT0gb21hcDNfbWFwX2lvLAorCS5yZXNlcnZlCT0gb21hcF9yZXNlcnZlLAorCS5pbml0X2lycQk9IGFtMzUxN19jcmFuZV9pbml0X2lycSwKKwkuaW5pdF9tYWNoaW5lCT0gYW0zNTE3X2NyYW5lX2luaXQsCisJLnRpbWVyCQk9ICZvbWFwX3RpbWVyLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtYW0zNTE3ZXZtLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWFtMzUxN2V2bS5jCmluZGV4IDA3Mzk5NTAuLmJjMTU2MjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtYW0zNTE3ZXZtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1hbTM1MTdldm0uYwpAQCAtMzg5LDEwICszODksOSBAQAogewogCW9tYXBfYm9hcmRfY29uZmlnID0gYW0zNTE3X2V2bV9jb25maWc7CiAJb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUoYW0zNTE3X2V2bV9jb25maWcpOwotCi0Jb21hcDJfaW5pdF9jb21tb25faHcoTlVMTCwgTlVMTCk7CisJb21hcDJfaW5pdF9jb21tb25faW5mcmFzdHJ1Y3R1cmUoKTsKKwlvbWFwMl9pbml0X2NvbW1vbl9kZXZpY2VzKE5VTEwsIE5VTEwpOwogCW9tYXBfaW5pdF9pcnEoKTsKLQlvbWFwX2dwaW9faW5pdCgpOwogfQogCiBzdGF0aWMgc3RydWN0IG9tYXBfbXVzYl9ib2FyZF9kYXRhIG11c2JfYm9hcmRfZGF0YSA9IHsKQEAgLTQ0Miw4ICs0NDEsNiBAQAogCU9NQVAzX01VWChTQUQyRF9NQ0FEMjMsIE9NQVBfTVVYX01PREUwIHwgT01BUF9QSU5fSU5QVVRfUFVMTERPV04pLAogCXsgLnJlZ19vZmZzZXQgPSBPTUFQX01VWF9URVJNSU5BVE9SIH0sCiB9OwotI2Vsc2UKLSNkZWZpbmUgYm9hcmRfbXV4CU5VTEwKICNlbmRpZgogCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtYXBvbGxvbi5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1hcG9sbG9uLmMKaW5kZXggMmM2ZGIxYS4uOWY1NWI2OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1hcG9sbG9uLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1hcG9sbG9uLmMKQEAgLTI3MCw3ICsyNzAsNyBAQAogCS5jdHJsX25hbWUJPSAiaW50ZXJuYWwiLAogfTsKIAotc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX2NvbmZpZ19rZXJuZWwgYXBvbGxvbl9jb25maWdbXSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfa2VybmVsIGFwb2xsb25fY29uZmlnW10gX19pbml0ZGF0YSA9IHsKIAl7IE9NQVBfVEFHX0xDRCwJCSZhcG9sbG9uX2xjZF9jb25maWcgfSwKIH07CiAKQEAgLTI3OCwxMCArMjc4LDkgQEAKIHsKIAlvbWFwX2JvYXJkX2NvbmZpZyA9IGFwb2xsb25fY29uZmlnOwogCW9tYXBfYm9hcmRfY29uZmlnX3NpemUgPSBBUlJBWV9TSVpFKGFwb2xsb25fY29uZmlnKTsKLQlvbWFwMl9pbml0X2NvbW1vbl9odyhOVUxMLCBOVUxMKTsKKwlvbWFwMl9pbml0X2NvbW1vbl9pbmZyYXN0cnVjdHVyZSgpOworCW9tYXAyX2luaXRfY29tbW9uX2RldmljZXMoTlVMTCwgTlVMTCk7CiAJb21hcF9pbml0X2lycSgpOwotCW9tYXBfZ3Bpb19pbml0KCk7Ci0JYXBvbGxvbl9pbml0X3NtYzkxeCgpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgYXBvbGxvbl9sZWRfaW5pdCh2b2lkKQpAQCAtMzE0LDggKzMxMyw2IEBACiBzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfbXV4IGJvYXJkX211eFtdIF9faW5pdGRhdGEgPSB7CiAJeyAucmVnX29mZnNldCA9IE9NQVBfTVVYX1RFUk1JTkFUT1IgfSwKIH07Ci0jZWxzZQotI2RlZmluZSBib2FyZF9tdXgJTlVMTAogI2VuZGlmCiAKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwX2Fwb2xsb25faW5pdCh2b2lkKQpAQCAtMzI0LDYgKzMyMSw3IEBACiAKIAlvbWFwMjQyMF9tdXhfaW5pdChib2FyZF9tdXgsIE9NQVBfUEFDS0FHRV9aQUMpOwogCisJYXBvbGxvbl9pbml0X3NtYzkxeCgpOwogCWFwb2xsb25fbGVkX2luaXQoKTsKIAlhcG9sbG9uX2ZsYXNoX2luaXQoKTsKIAlhcG9sbG9uX3VzYl9pbml0KCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWNtLXQzNS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1jbS10MzUuYwppbmRleCA2M2Y3NjRlLi40ODZhM2RlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWNtLXQzNS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtY20tdDM1LmMKQEAgLTYwMCw4ICs2MDAsOCBAQAogCS5wb3J0X21vZGVbMl0gPSBFSENJX0hDRF9PTUFQX01PREVfVU5LTk9XTiwKIAogCS5waHlfcmVzZXQgID0gdHJ1ZSwKLQkucmVzZXRfZ3Bpb19wb3J0WzBdICA9IC1FSU5WQUwsCi0JLnJlc2V0X2dwaW9fcG9ydFsxXSAgPSAtRUlOVkFMLAorCS5yZXNldF9ncGlvX3BvcnRbMF0gID0gT01BUF9NQVhfR1BJT19MSU5FUyArIDYsCisJLnJlc2V0X2dwaW9fcG9ydFsxXSAgPSBPTUFQX01BWF9HUElPX0xJTkVTICsgNywKIAkucmVzZXRfZ3Bpb19wb3J0WzJdICA9IC1FSU5WQUwKIH07CiAKQEAgLTYzMCwxMiArNjMwLDYgQEAKIAljbV90MzVfdm1tYzFfc3VwcGx5LmRldiA9IG1tY1swXS5kZXY7CiAJY21fdDM1X3ZzaW1fc3VwcGx5LmRldiA9IG1tY1swXS5kZXY7CiAKLQkvKiBzZXR1cCBVU0Igd2l0aCBwcm9wZXIgUEhZIHJlc2V0IEdQSU9zICovCi0JZWhjaV9wZGF0YS5yZXNldF9ncGlvX3BvcnRbMF0gPSBncGlvICsgNjsKLQllaGNpX3BkYXRhLnJlc2V0X2dwaW9fcG9ydFsxXSA9IGdwaW8gKyA3OwotCi0JdXNiX2VoY2lfaW5pdCgmZWhjaV9wZGF0YSk7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtNjgzLDEwICs2NzcsMTAgQEAKIAlvbWFwX2JvYXJkX2NvbmZpZyA9IGNtX3QzNV9jb25maWc7CiAJb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUoY21fdDM1X2NvbmZpZyk7CiAKLQlvbWFwMl9pbml0X2NvbW1vbl9odyhtdDQ2aDMybTMybGY2X3NkcmNfcGFyYW1zLAorCW9tYXAyX2luaXRfY29tbW9uX2luZnJhc3RydWN0dXJlKCk7CisJb21hcDJfaW5pdF9jb21tb25fZGV2aWNlcyhtdDQ2aDMybTMybGY2X3NkcmNfcGFyYW1zLAogCQkJICAgICBtdDQ2aDMybTMybGY2X3NkcmNfcGFyYW1zKTsKIAlvbWFwX2luaXRfaXJxKCk7Ci0Jb21hcF9ncGlvX2luaXQoKTsKIH0KIAogc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX211eCBib2FyZF9tdXhbXSBfX2luaXRkYXRhID0gewpAQCAtODA1LDYgKzc5OSw3IEBACiAJY21fdDM1X2luaXRfZGlzcGxheSgpOwogCiAJdXNiX211c2JfaW5pdCgmbXVzYl9ib2FyZF9kYXRhKTsKKwl1c2JfZWhjaV9pbml0KCZlaGNpX3BkYXRhKTsKIH0KIAogTUFDSElORV9TVEFSVChDTV9UMzUsICJDb21wdWxhYiBDTS1UMzUiKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1jbS10MzUxNy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1jbS10MzUxNy5jCmluZGV4IDFkZDMwM2UuLjViMGM3NzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtY20tdDM1MTcuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWNtLXQzNTE3LmMKQEAgLTI0OCw5ICsyNDgsOSBAQAogCW9tYXBfYm9hcmRfY29uZmlnID0gY21fdDM1MTdfY29uZmlnOwogCW9tYXBfYm9hcmRfY29uZmlnX3NpemUgPSBBUlJBWV9TSVpFKGNtX3QzNTE3X2NvbmZpZyk7CiAKLQlvbWFwMl9pbml0X2NvbW1vbl9odyhOVUxMLCBOVUxMKTsKKwlvbWFwMl9pbml0X2NvbW1vbl9pbmZyYXN0cnVjdHVyZSgpOworCW9tYXAyX2luaXRfY29tbW9uX2RldmljZXMoTlVMTCwgTlVMTCk7CiAJb21hcF9pbml0X2lycSgpOwotCW9tYXBfZ3Bpb19pbml0KCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9tdXggYm9hcmRfbXV4W10gX19pbml0ZGF0YSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtZGV2a2l0ODAwMC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1kZXZraXQ4MDAwLmMKaW5kZXggNTNhYzc2Mi4uNDUxZTdmZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1kZXZraXQ4MDAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1kZXZraXQ4MDAwLmMKQEAgLTExOCwyNyArMTE4LDI3IEBACiAJdHdsX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9MRUQsIDB4MCwgMHgwKTsKIAogCWlmIChncGlvX2lzX3ZhbGlkKGRzc2Rldi0+cmVzZXRfZ3BpbykpCi0JCWdwaW9fc2V0X3ZhbHVlKGRzc2Rldi0+cmVzZXRfZ3BpbywgMSk7CisJCWdwaW9fc2V0X3ZhbHVlX2NhbnNsZWVwKGRzc2Rldi0+cmVzZXRfZ3BpbywgMSk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGRldmtpdDgwMDBfcGFuZWxfZGlzYWJsZV9sY2Qoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQogewogCWlmIChncGlvX2lzX3ZhbGlkKGRzc2Rldi0+cmVzZXRfZ3BpbykpCi0JCWdwaW9fc2V0X3ZhbHVlKGRzc2Rldi0+cmVzZXRfZ3BpbywgMCk7CisJCWdwaW9fc2V0X3ZhbHVlX2NhbnNsZWVwKGRzc2Rldi0+cmVzZXRfZ3BpbywgMCk7CiB9CiAKIHN0YXRpYyBpbnQgZGV2a2l0ODAwMF9wYW5lbF9lbmFibGVfZHZpKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKIHsKIAlpZiAoZ3Bpb19pc192YWxpZChkc3NkZXYtPnJlc2V0X2dwaW8pKQotCQlncGlvX3NldF92YWx1ZShkc3NkZXYtPnJlc2V0X2dwaW8sIDEpOworCQlncGlvX3NldF92YWx1ZV9jYW5zbGVlcChkc3NkZXYtPnJlc2V0X2dwaW8sIDEpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBkZXZraXQ4MDAwX3BhbmVsX2Rpc2FibGVfZHZpKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKIHsKIAlpZiAoZ3Bpb19pc192YWxpZChkc3NkZXYtPnJlc2V0X2dwaW8pKQotCQlncGlvX3NldF92YWx1ZShkc3NkZXYtPnJlc2V0X2dwaW8sIDApOworCQlncGlvX3NldF92YWx1ZV9jYW5zbGVlcChkc3NkZXYtPnJlc2V0X2dwaW8sIDApOwogfQogCiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgZGV2a2l0ODAwMF92bW1jMV9zdXBwbHkgPQpAQCAtNDQ0LDEzICs0NDQsMTMgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IGRldmtpdDgwMDBfaW5pdF9pcnEodm9pZCkKIHsKLQlvbWFwMl9pbml0X2NvbW1vbl9odyhtdDQ2aDMybTMybGY2X3NkcmNfcGFyYW1zLAotCQkJICAgICBtdDQ2aDMybTMybGY2X3NkcmNfcGFyYW1zKTsKKwlvbWFwMl9pbml0X2NvbW1vbl9pbmZyYXN0cnVjdHVyZSgpOworCW9tYXAyX2luaXRfY29tbW9uX2RldmljZXMobXQ0NmgzMm0zMmxmNl9zZHJjX3BhcmFtcywKKwkJCQkgIG10NDZoMzJtMzJsZjZfc2RyY19wYXJhbXMpOwogCW9tYXBfaW5pdF9pcnEoKTsKICNpZmRlZiBDT05GSUdfT01BUF8zMktfVElNRVIKIAlvbWFwMl9ncF9jbG9ja2V2ZW50X3NldF9ncHRpbWVyKDEyKTsKICNlbmRpZgotCW9tYXBfZ3Bpb19pbml0KCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBkZXZraXQ4MDAwX2Fkczc4NDZfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1nZW5lcmljLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWdlbmVyaWMuYwppbmRleCBiMWMyYzlhLi4wZTNkODFlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWdlbmVyaWMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWdlbmVyaWMuYwpAQCAtMzcsNyArMzcsOCBAQAogewogCW9tYXBfYm9hcmRfY29uZmlnID0gZ2VuZXJpY19jb25maWc7CiAJb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUoZ2VuZXJpY19jb25maWcpOwotCW9tYXAyX2luaXRfY29tbW9uX2h3KE5VTEwsIE5VTEwpOworCW9tYXAyX2luaXRfY29tbW9uX2luZnJhc3RydWN0dXJlKCk7CisJb21hcDJfaW5pdF9jb21tb25fZGV2aWNlcyhOVUxMLCBOVUxMKTsKIAlvbWFwX2luaXRfaXJxKCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtaDQuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtaDQuYwppbmRleCA5Mjk5OTNiLi4yNWNjOWRhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWg0LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1oNC5jCkBAIC01MSwzOCArNTEsMzcgQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgcm93X2dwaW9zWzZdID0geyA4OCwgODksIDEyNCwgMTEsIDYsIDk2IH07CiBzdGF0aWMgdW5zaWduZWQgaW50IGNvbF9ncGlvc1s3XSA9IHsgOTAsIDkxLCAxMDAsIDM2LCAxMiwgOTcsIDk4IH07CiAKLXN0YXRpYyBpbnQgaDRfa2V5bWFwW10gPSB7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGg0X2tleW1hcFtdID0gewogCUtFWSgwLCAwLCBLRVlfTEVGVCksCi0JS0VZKDAsIDEsIEtFWV9SSUdIVCksCi0JS0VZKDAsIDIsIEtFWV9BKSwKLQlLRVkoMCwgMywgS0VZX0IpLAotCUtFWSgwLCA0LCBLRVlfQyksCi0JS0VZKDEsIDAsIEtFWV9ET1dOKSwKKwlLRVkoMSwgMCwgS0VZX1JJR0hUKSwKKwlLRVkoMiwgMCwgS0VZX0EpLAorCUtFWSgzLCAwLCBLRVlfQiksCisJS0VZKDQsIDAsIEtFWV9DKSwKKwlLRVkoMCwgMSwgS0VZX0RPV04pLAogCUtFWSgxLCAxLCBLRVlfVVApLAotCUtFWSgxLCAyLCBLRVlfRSksCi0JS0VZKDEsIDMsIEtFWV9GKSwKLQlLRVkoMSwgNCwgS0VZX0cpLAotCUtFWSgyLCAwLCBLRVlfRU5URVIpLAotCUtFWSgyLCAxLCBLRVlfSSksCisJS0VZKDIsIDEsIEtFWV9FKSwKKwlLRVkoMywgMSwgS0VZX0YpLAorCUtFWSg0LCAxLCBLRVlfRyksCisJS0VZKDAsIDIsIEtFWV9FTlRFUiksCisJS0VZKDEsIDIsIEtFWV9JKSwKIAlLRVkoMiwgMiwgS0VZX0opLAotCUtFWSgyLCAzLCBLRVlfSyksCi0JS0VZKDIsIDQsIEtFWV8zKSwKLQlLRVkoMywgMCwgS0VZX00pLAotCUtFWSgzLCAxLCBLRVlfTiksCi0JS0VZKDMsIDIsIEtFWV9PKSwKKwlLRVkoMywgMiwgS0VZX0spLAorCUtFWSg0LCAyLCBLRVlfMyksCisJS0VZKDAsIDMsIEtFWV9NKSwKKwlLRVkoMSwgMywgS0VZX04pLAorCUtFWSgyLCAzLCBLRVlfTyksCiAJS0VZKDMsIDMsIEtFWV9QKSwKLQlLRVkoMywgNCwgS0VZX1EpLAotCUtFWSg0LCAwLCBLRVlfUiksCi0JS0VZKDQsIDEsIEtFWV80KSwKLQlLRVkoNCwgMiwgS0VZX1QpLAotCUtFWSg0LCAzLCBLRVlfVSksCisJS0VZKDQsIDMsIEtFWV9RKSwKKwlLRVkoMCwgNCwgS0VZX1IpLAorCUtFWSgxLCA0LCBLRVlfNCksCisJS0VZKDIsIDQsIEtFWV9UKSwKKwlLRVkoMywgNCwgS0VZX1UpLAogCUtFWSg0LCA0LCBLRVlfRU5URVIpLAotCUtFWSg1LCAwLCBLRVlfViksCi0JS0VZKDUsIDEsIEtFWV9XKSwKLQlLRVkoNSwgMiwgS0VZX0wpLAotCUtFWSg1LCAzLCBLRVlfUyksCi0JS0VZKDUsIDQsIEtFWV9FTlRFUiksCi0JMAorCUtFWSgwLCA1LCBLRVlfViksCisJS0VZKDEsIDUsIEtFWV9XKSwKKwlLRVkoMiwgNSwgS0VZX0wpLAorCUtFWSgzLCA1LCBLRVlfUyksCisJS0VZKDQsIDUsIEtFWV9FTlRFUiksCiB9OwogCiBzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gaDRfcGFydGl0aW9uc1tdID0gewpAQCAtMTM2LDEyICsxMzUsMTYgQEAKIAkucmVzb3VyY2UJPSAmaDRfZmxhc2hfcmVzb3VyY2UsCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG1hdHJpeF9rZXltYXBfZGF0YSBoNF9rZXltYXBfZGF0YSA9IHsKKwkua2V5bWFwCQk9IGg0X2tleW1hcCwKKwkua2V5bWFwX3NpemUJPSBBUlJBWV9TSVpFKGg0X2tleW1hcCksCit9OworCiBzdGF0aWMgc3RydWN0IG9tYXBfa3BfcGxhdGZvcm1fZGF0YSBoNF9rcF9kYXRhID0gewogCS5yb3dzCQk9IDYsCiAJLmNvbHMJCT0gNywKLQkua2V5bWFwIAk9IGg0X2tleW1hcCwKLQkua2V5bWFwc2l6ZSAJPSBBUlJBWV9TSVpFKGg0X2tleW1hcCksCi0JLnJlcAkJPSAxLAorCS5rZXltYXBfZGF0YQk9ICZoNF9rZXltYXBfZGF0YSwKKwkucmVwCQk9IHRydWUsCiAJLnJvd19ncGlvcyAJPSByb3dfZ3Bpb3MsCiAJLmNvbF9ncGlvcyAJPSBjb2xfZ3Bpb3MsCiB9OwpAQCAtMjgzLDcgKzI4Niw3IEBACiAJLmhtY19tb2RlCT0gMHgwMCwJCS8qIDA6ZGV2fG90ZyAxOmRpc2FibGUgMjpkaXNhYmxlICovCiB9OwogCi1zdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2tlcm5lbCBoNF9jb25maWdbXSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfa2VybmVsIGg0X2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7CiAJeyBPTUFQX1RBR19MQ0QsCQkmaDRfbGNkX2NvbmZpZyB9LAogfTsKIApAQCAtMjkxLDkgKzI5NCw5IEBACiB7CiAJb21hcF9ib2FyZF9jb25maWcgPSBoNF9jb25maWc7CiAJb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUoaDRfY29uZmlnKTsKLQlvbWFwMl9pbml0X2NvbW1vbl9odyhOVUxMLCBOVUxMKTsKKwlvbWFwMl9pbml0X2NvbW1vbl9pbmZyYXN0cnVjdHVyZSgpOworCW9tYXAyX2luaXRfY29tbW9uX2RldmljZXMoTlVMTCwgTlVMTCk7CiAJb21hcF9pbml0X2lycSgpOwotCW9tYXBfZ3Bpb19pbml0KCk7CiAJaDRfaW5pdF9mbGFzaCgpOwogfQogCkBAIC0zMjEsOCArMzI0LDYgQEAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9tdXggYm9hcmRfbXV4W10gX19pbml0ZGF0YSA9IHsKIAl7IC5yZWdfb2Zmc2V0ID0gT01BUF9NVVhfVEVSTUlOQVRPUiB9LAogfTsKLSNlbHNlCi0jZGVmaW5lIGJvYXJkX211eAlOVUxMCiAjZW5kaWYKIAogc3RhdGljIHZvaWQgX19pbml0IG9tYXBfaDRfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1pZ2VwMDAyMC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1pZ2VwMDAyMC5jCmluZGV4IDVlMDM1YTUuLjBhZmEzMDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtaWdlcDAwMjAuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWlnZXAwMDIwLmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2ZpeGVkLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjL3R3bC5oPgogI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+CiAKQEAgLTEzNiwxNiArMTM3LDkgQEAKIAl9LAogfTsKIAotc3RhdGljIGludCBpZ2VwMl9vbmVuYW5kX3NldHVwKHZvaWQgX19pb21lbSAqb25lbmFuZF9iYXNlLCBpbnQgZnJlcSkKLXsKLSAgICAgICAvKiBub3RoaW5nIGlzIHJlcXVpcmVkIHRvIGJlIHNldHVwIGZvciBvbmVuYW5kIGFzIG9mIG5vdyAqLwotICAgICAgIHJldHVybiAwOwotfQotCiBzdGF0aWMgc3RydWN0IG9tYXBfb25lbmFuZF9wbGF0Zm9ybV9kYXRhIGlnZXAyX29uZW5hbmRfZGF0YSA9IHsKIAkucGFydHMgPSBpZ2VwMl9vbmVuYW5kX3BhcnRpdGlvbnMsCiAJLm5yX3BhcnRzID0gQVJSQVlfU0laRShpZ2VwMl9vbmVuYW5kX3BhcnRpdGlvbnMpLAotCS5vbmVuYW5kX3NldHVwID0gaWdlcDJfb25lbmFuZF9zZXR1cCwKIAkuZG1hX2NoYW5uZWwJPSAtMSwJLyogZGlzYWJsZSBETUEgaW4gT01BUCBPbmVOQU5EIGRyaXZlciAqLwogfTsKIApAQCAtMTU5LDM1ICsxNTMsMzQgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IGlnZXAyX2ZsYXNoX2luaXQodm9pZCkKIHsKLQl1OAkJY3MgPSAwOwotCXU4CQlvbmVuYW5kY3MgPSBHUE1DX0NTX05VTSArIDE7CisJdTggY3MgPSAwOworCXU4IG9uZW5hbmRjcyA9IEdQTUNfQ1NfTlVNICsgMTsKIAotCXdoaWxlIChjcyA8IEdQTUNfQ1NfTlVNKSB7Ci0JCXUzMiByZXQgPSAwOworCWZvciAoY3MgPSAwOyBjcyA8IEdQTUNfQ1NfTlVNOyBjcysrKSB7CisJCXUzMiByZXQ7CiAJCXJldCA9IGdwbWNfY3NfcmVhZF9yZWcoY3MsIEdQTUNfQ1NfQ09ORklHMSk7CiAKIAkJLyogQ2hlY2sgaWYgTkFORC9vbmVOQU5EIGlzIGNvbmZpZ3VyZWQgKi8KIAkJaWYgKChyZXQgJiAweEMwMCkgPT0gMHg4MDApCiAJCQkvKiBOQU5EIGZvdW5kICovCi0JCQlwcl9lcnIoIklHRVAgdjI6IFVuc3VwcG9ydGVkIE5BTkQgZm91bmRcbiIpOworCQkJcHJfZXJyKCJJR0VQMjogVW5zdXBwb3J0ZWQgTkFORCBmb3VuZFxuIik7CiAJCWVsc2UgewogCQkJcmV0ID0gZ3BtY19jc19yZWFkX3JlZyhjcywgR1BNQ19DU19DT05GSUc3KTsKIAkJCWlmICgocmV0ICYgMHgzRikgPT0gKE9ORU5BTkRfTUFQID4+IDI0KSkKIAkJCQkvKiBPTkVOQU5EIGZvdW5kICovCiAJCQkJb25lbmFuZGNzID0gY3M7CiAJCX0KLQkJY3MrKzsKIAl9CisKIAlpZiAob25lbmFuZGNzID4gR1BNQ19DU19OVU0pIHsKLQkJcHJfZXJyKCJJR0VQIHYyOiBVbmFibGUgdG8gZmluZCBjb25maWd1cmF0aW9uIGluIEdQTUNcbiIpOworCQlwcl9lcnIoIklHRVAyOiBVbmFibGUgdG8gZmluZCBjb25maWd1cmF0aW9uIGluIEdQTUNcbiIpOwogCQlyZXR1cm47CiAJfQogCi0JaWYgKG9uZW5hbmRjcyA8IEdQTUNfQ1NfTlVNKSB7Ci0JCWlnZXAyX29uZW5hbmRfZGF0YS5jcyA9IG9uZW5hbmRjczsKLQkJaWYgKHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmaWdlcDJfb25lbmFuZF9kZXZpY2UpIDwgMCkKLQkJCXByX2VycigiSUdFUCB2MjogVW5hYmxlIHRvIHJlZ2lzdGVyIE9uZU5BTkQgZGV2aWNlXG4iKTsKLQl9CisJaWdlcDJfb25lbmFuZF9kYXRhLmNzID0gb25lbmFuZGNzOworCisJaWYgKHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmaWdlcDJfb25lbmFuZF9kZXZpY2UpIDwgMCkKKwkJcHJfZXJyKCJJR0VQMjogVW5hYmxlIHRvIHJlZ2lzdGVyIE9uZU5BTkQgZGV2aWNlXG4iKTsKIH0KIAogI2Vsc2UKQEAgLTI1NCwxMiArMjQ3LDggQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgaWdlcDJfaW5pdF9zbXNjOTExeCh2b2lkKSB7IH0KICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2tlcm5lbCBpZ2VwMl9jb25maWdbXSBfX2luaXRkYXRhID0gewotfTsKLQotc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IGlnZXAyX3ZtbWMxX3N1cHBseSA9IHsKLQkuc3VwcGx5CQk9ICJ2bW1jIiwKLX07CitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgaWdlcDJfdm1tYzFfc3VwcGx5ID0KKwlSRUdVTEFUT1JfU1VQUExZKCJ2bW1jIiwgIm1tY2ktb21hcC1ocy4wIik7CiAKIC8qIFZNTUMxIGZvciBPTUFQIFZERF9NTUMxIChpL28pIGFuZCBNTUMxIGNhcmQgKi8KIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBpZ2VwMl92bW1jMSA9IHsKQEAgLTI3Niw2ICsyNjUsNTIgQEAKIAkuY29uc3VtZXJfc3VwcGxpZXMgICAgICA9ICZpZ2VwMl92bW1jMV9zdXBwbHksCiB9OwogCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgaWdlcDJfdmlvX3N1cHBseSA9CisJUkVHVUxBVE9SX1NVUFBMWSgidm1tY19hdXgiLCAibW1jaS1vbWFwLWhzLjEiKTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGlnZXAyX3ZpbyA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5taW5fdVYJCQk9IDE4MDAwMDAsCisJCS5tYXhfdVYJCQk9IDE4MDAwMDAsCisJCS5hcHBseV91VgkJPSAxLAorCQkudmFsaWRfbW9kZXNfbWFzawk9IFJFR1VMQVRPUl9NT0RFX05PUk1BTAorCQkJCQl8IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlksCisJCS52YWxpZF9vcHNfbWFzawkJPSBSRUdVTEFUT1JfQ0hBTkdFX1ZPTFRBR0UKKwkJCQkJfCBSRUdVTEFUT1JfQ0hBTkdFX01PREUKKwkJCQkJfCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwl9LAorCS5udW1fY29uc3VtZXJfc3VwcGxpZXMgID0gMSwKKwkuY29uc3VtZXJfc3VwcGxpZXMgICAgICA9ICZpZ2VwMl92aW9fc3VwcGx5LAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IGlnZXAyX3ZtbWMyX3N1cHBseSA9CisJUkVHVUxBVE9SX1NVUFBMWSgidm1tYyIsICJtbWNpLW9tYXAtaHMuMSIpOworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgaWdlcDJfdm1tYzIgPSB7CisJLmNvbnN0cmFpbnRzCQk9IHsKKwkJLnZhbGlkX21vZGVzX21hc2sJPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwsCisJCS5hbHdheXNfb24JCT0gMSwKKwl9LAorCS5udW1fY29uc3VtZXJfc3VwcGxpZXMJPSAxLAorCS5jb25zdW1lcl9zdXBwbGllcwk9ICZpZ2VwMl92bW1jMl9zdXBwbHksCit9OworCitzdGF0aWMgc3RydWN0IGZpeGVkX3ZvbHRhZ2VfY29uZmlnIGlnZXAyX3Z3bGFuID0geworCS5zdXBwbHlfbmFtZQkJPSAidndsYW4iLAorCS5taWNyb3ZvbHRzCQk9IDMzMDAwMDAsCisJLmdwaW8JCQk9IC1FSU5WQUwsCisJLmVuYWJsZWRfYXRfYm9vdAk9IDEsCisJLmluaXRfZGF0YQkJPSAmaWdlcDJfdm1tYzIsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBpZ2VwMl92d2xhbl9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInJlZy1maXhlZC12b2x0YWdlIiwKKwkuaWQJCT0gMCwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YQk9ICZpZ2VwMl92d2xhbiwKKwl9LAorfTsKKwogc3RhdGljIHN0cnVjdCBvbWFwMl9oc21tY19pbmZvIG1tY1tdID0gewogCXsKIAkJLm1tYwkJPSAxLApAQCAtMzE3LDYgKzM1Miw3IEBACiAJCS5uYW1lCQkJPSAiZ3Bpby1sZWQ6Z3JlZW46ZDEiLAogCQkuZGVmYXVsdF90cmlnZ2VyCT0gImhlYXJ0YmVhdCIsCiAJCS5ncGlvCQkJPSAtRUlOVkFMLCAvKiBnZXRzIHJlcGxhY2VkICovCisJCS5hY3RpdmVfbG93CQk9IDEsCiAJfSwKIH07CiAKQEAgLTM0MiwyNCArMzc4LDIxIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgaWdlcDJfbGVkc19pbml0KHZvaWQpCiB7CiAJaWYgKChncGlvX3JlcXVlc3QoSUdFUDJfR1BJT19MRUQwX1JFRCwgImdwaW8tbGVkOnJlZDpkMCIpID09IDApICYmCi0JICAgIChncGlvX2RpcmVjdGlvbl9vdXRwdXQoSUdFUDJfR1BJT19MRUQwX1JFRCwgMSkgPT0gMCkpIHsKKwkgICAgKGdwaW9fZGlyZWN0aW9uX291dHB1dChJR0VQMl9HUElPX0xFRDBfUkVELCAwKSA9PSAwKSkKIAkJZ3Bpb19leHBvcnQoSUdFUDJfR1BJT19MRUQwX1JFRCwgMCk7Ci0JCWdwaW9fc2V0X3ZhbHVlKElHRVAyX0dQSU9fTEVEMF9SRUQsIDApOwotCX0gZWxzZQorCWVsc2UKIAkJcHJfd2FybmluZygiSUdFUCB2MjogQ291bGQgbm90IG9idGFpbiBncGlvIEdQSU9fTEVEMF9SRURcbiIpOwogCiAJaWYgKChncGlvX3JlcXVlc3QoSUdFUDJfR1BJT19MRUQwX0dSRUVOLCAiZ3Bpby1sZWQ6Z3JlZW46ZDAiKSA9PSAwKSAmJgotCSAgICAoZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KElHRVAyX0dQSU9fTEVEMF9HUkVFTiwgMSkgPT0gMCkpIHsKKwkgICAgKGdwaW9fZGlyZWN0aW9uX291dHB1dChJR0VQMl9HUElPX0xFRDBfR1JFRU4sIDApID09IDApKQogCQlncGlvX2V4cG9ydChJR0VQMl9HUElPX0xFRDBfR1JFRU4sIDApOwotCQlncGlvX3NldF92YWx1ZShJR0VQMl9HUElPX0xFRDBfR1JFRU4sIDApOwotCX0gZWxzZQorCWVsc2UKIAkJcHJfd2FybmluZygiSUdFUCB2MjogQ291bGQgbm90IG9idGFpbiBncGlvIEdQSU9fTEVEMF9HUkVFTlxuIik7CiAKIAlpZiAoKGdwaW9fcmVxdWVzdChJR0VQMl9HUElPX0xFRDFfUkVELCAiZ3Bpby1sZWQ6cmVkOmQxIikgPT0gMCkgJiYKLQkgICAgKGdwaW9fZGlyZWN0aW9uX291dHB1dChJR0VQMl9HUElPX0xFRDFfUkVELCAxKSA9PSAwKSkgeworCSAgICAoZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KElHRVAyX0dQSU9fTEVEMV9SRUQsIDApID09IDApKQogCQlncGlvX2V4cG9ydChJR0VQMl9HUElPX0xFRDFfUkVELCAwKTsKLQkJZ3Bpb19zZXRfdmFsdWUoSUdFUDJfR1BJT19MRUQxX1JFRCwgMCk7Ci0JfSBlbHNlCisJZWxzZQogCQlwcl93YXJuaW5nKCJJR0VQIHYyOiBDb3VsZCBub3Qgb2J0YWluIGdwaW8gR1BJT19MRUQxX1JFRFxuIik7CiAKIH0KQEAgLTM3MywxMiArNDA2LDYgQEAKIAlvbWFwMl9oc21tY19pbml0KG1tYyk7CiAKIAkvKgotCSAqIGxpbmsgcmVndWxhdG9ycyB0byBNTUMgYWRhcHRlcnMgLi4uIHdlICJrbm93IiB0aGUKLQkgKiByZWd1bGF0b3JzIHdpbGwgYmUgc2V0IHVwIG9ubHkgKmFmdGVyKiB3ZSByZXR1cm4uCi0JICovCi0JaWdlcDJfdm1tYzFfc3VwcGx5LmRldiA9IG1tY1swXS5kZXY7Ci0KLQkvKgogCSAqIFJFVklTSVQ6IG5lZWQgZWhjaS1vbWFwIGhvb2tzIGZvciBleHRlcm5hbCBWQlVTCiAJICogcG93ZXIgc3dpdGNoIGFuZCBvdmVyY3VycmVudCBkZXRlY3QKIAkgKi8KQEAgLTM5NywxMCArNDI0LDkgQEAKIAkvKiBUV0w0MDMwX0dQSU9fTUFYICsgMSA9PSBsZWRCIChvdXQsIGFjdGl2ZSBsb3cgTEVEKSAqLwogI2lmICFkZWZpbmVkKENPTkZJR19MRURTX0dQSU8pICYmICFkZWZpbmVkKENPTkZJR19MRURTX0dQSU9fTU9EVUxFKQogCWlmICgoZ3Bpb19yZXF1ZXN0KGdwaW8rVFdMNDAzMF9HUElPX01BWCsxLCAiZ3Bpby1sZWQ6Z3JlZW46ZDEiKSA9PSAwKQotCSAgICAmJiAoZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGdwaW8gKyBUV0w0MDMwX0dQSU9fTUFYICsgMSwgMSkgPT0gMCkpIHsKKwkgICAgJiYgKGdwaW9fZGlyZWN0aW9uX291dHB1dChncGlvICsgVFdMNDAzMF9HUElPX01BWCArIDEsIDEpID09IDApKQogCQlncGlvX2V4cG9ydChncGlvICsgVFdMNDAzMF9HUElPX01BWCArIDEsIDApOwotCQlncGlvX3NldF92YWx1ZShncGlvICsgVFdMNDAzMF9HUElPX01BWCArIDEsIDApOwotCX0gZWxzZQorCWVsc2UKIAkJcHJfd2FybmluZygiSUdFUCB2MjogQ291bGQgbm90IG9idGFpbiBncGlvIEdQSU9fTEVEMV9HUkVFTlxuIik7CiAjZWxzZQogCWlnZXAyX2dwaW9fbGVkc1szXS5ncGlvID0gZ3BpbyArIFRXTDQwMzBfR1BJT19NQVggKyAxOwpAQCAtNDg5LDE1ICs1MTUsMTUgQEAKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmlnZXAyX2RldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZpZ2VwMl9kc3NfZGV2aWNlLAorCSZpZ2VwMl92d2xhbl9kZXZpY2UsCiB9OwogCiBzdGF0aWMgdm9pZCBfX2luaXQgaWdlcDJfaW5pdF9pcnEodm9pZCkKIHsKLQlvbWFwX2JvYXJkX2NvbmZpZyA9IGlnZXAyX2NvbmZpZzsKLQlvbWFwX2JvYXJkX2NvbmZpZ19zaXplID0gQVJSQVlfU0laRShpZ2VwMl9jb25maWcpOwotCW9tYXAyX2luaXRfY29tbW9uX2h3KG02NWt4eHh4YW1fc2RyY19wYXJhbXMsIG02NWt4eHh4YW1fc2RyY19wYXJhbXMpOworCW9tYXAyX2luaXRfY29tbW9uX2luZnJhc3RydWN0dXJlKCk7CisJb21hcDJfaW5pdF9jb21tb25fZGV2aWNlcyhtNjVreHh4eGFtX3NkcmNfcGFyYW1zLAorCQkJCSAgbTY1a3h4eHhhbV9zZHJjX3BhcmFtcyk7CiAJb21hcF9pbml0X2lycSgpOwotCW9tYXBfZ3Bpb19pbml0KCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9jb2RlY19hdWRpb19kYXRhIGlnZXAyX2F1ZGlvX2RhdGEgPSB7CkBAIC01MTksNyArNTQ1LDcgQEAKIAkuZ3BpbwkJPSAmaWdlcDJfdHdsNDAzMF9ncGlvX3BkYXRhLAogCS52bW1jMSAgICAgICAgICA9ICZpZ2VwMl92bW1jMSwKIAkudnBsbDIJCT0gJmlnZXAyX3ZwbGwyLAotCisJLnZpbwkJPSAmaWdlcDJfdmlvLAogfTsKIAogc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIGlnZXAyX2kyYzFfYm9hcmRpbmZvW10gPSB7CkBAIC01NzcsOCArNjAzLDYgQEAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9tdXggYm9hcmRfbXV4W10gX19pbml0ZGF0YSA9IHsKIAl7IC5yZWdfb2Zmc2V0ID0gT01BUF9NVVhfVEVSTUlOQVRPUiB9LAogfTsKLSNlbHNlCi0jZGVmaW5lIGJvYXJkX211eAlOVUxMCiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX0xJQkVSVEFTX1NESU8pIHx8IGRlZmluZWQoQ09ORklHX0xJQkVSVEFTX1NESU9fTU9EVUxFKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1pZ2VwMDAzMC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1pZ2VwMDAzMC5jCmluZGV4IDIyYjBiMjUuLmJjY2NkNjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtaWdlcDAwMzAuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWlnZXAwMDMwLmMKQEAgLTI4OSw5ICsyODksMTAgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IGlnZXAzX2luaXRfaXJxKHZvaWQpCiB7Ci0Jb21hcDJfaW5pdF9jb21tb25faHcobTY1a3h4eHhhbV9zZHJjX3BhcmFtcywgbTY1a3h4eHhhbV9zZHJjX3BhcmFtcyk7CisJb21hcDJfaW5pdF9jb21tb25faW5mcmFzdHJ1Y3R1cmUoKTsKKwlvbWFwMl9pbml0X2NvbW1vbl9kZXZpY2VzKG02NWt4eHh4YW1fc2RyY19wYXJhbXMsCisJCQkJICBtNjVreHh4eGFtX3NkcmNfcGFyYW1zKTsKIAlvbWFwX2luaXRfaXJxKCk7Ci0Jb21hcF9ncGlvX2luaXQoKTsKIH0KIAogc3RhdGljIHN0cnVjdCB0d2w0MDMwX3BsYXRmb3JtX2RhdGEgaWdlcDNfdHdsNDAzMF9wZGF0YSA9IHsKQEAgLTM2Niw4ICszNjcsNiBAQAogc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX211eCBib2FyZF9tdXhbXSBfX2luaXRkYXRhID0gewogCXsgLnJlZ19vZmZzZXQgPSBPTUFQX01VWF9URVJNSU5BVE9SIH0sCiB9OwotI2Vsc2UKLSNkZWZpbmUgYm9hcmRfbXV4CU5VTEwKICNlbmRpZgogCiBzdGF0aWMgdm9pZCBfX2luaXQgaWdlcDNfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1sZHAuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtbGRwLmMKaW5kZXggMDAxZmQ5Ny4uZTVkYzc0OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1sZHAuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWxkcC5jCkBAIC0yOTIsMTAgKzI5Miw5IEBACiB7CiAJb21hcF9ib2FyZF9jb25maWcgPSBsZHBfY29uZmlnOwogCW9tYXBfYm9hcmRfY29uZmlnX3NpemUgPSBBUlJBWV9TSVpFKGxkcF9jb25maWcpOwotCW9tYXAyX2luaXRfY29tbW9uX2h3KE5VTEwsIE5VTEwpOworCW9tYXAyX2luaXRfY29tbW9uX2luZnJhc3RydWN0dXJlKCk7CisJb21hcDJfaW5pdF9jb21tb25fZGV2aWNlcyhOVUxMLCBOVUxMKTsKIAlvbWFwX2luaXRfaXJxKCk7Ci0Jb21hcF9ncGlvX2luaXQoKTsKLQlsZHBfaW5pdF9zbXNjOTExeCgpOwogfQogCiBzdGF0aWMgc3RydWN0IHR3bDQwMzBfdXNiX2RhdGEgbGRwX3VzYl9kYXRhID0gewpAQCAtMzgxLDggKzM4MCw2IEBACiBzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfbXV4IGJvYXJkX211eFtdIF9faW5pdGRhdGEgPSB7CiAJeyAucmVnX29mZnNldCA9IE9NQVBfTVVYX1RFUk1JTkFUT1IgfSwKIH07Ci0jZWxzZQotI2RlZmluZSBib2FyZF9tdXgJTlVMTAogI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9tdXNiX2JvYXJkX2RhdGEgbXVzYl9ib2FyZF9kYXRhID0gewpAQCAtNDI2LDYgKzQyMyw3IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9sZHBfaW5pdCh2b2lkKQogewogCW9tYXAzX211eF9pbml0KGJvYXJkX211eCwgT01BUF9QQUNLQUdFX0NCQik7CisJbGRwX2luaXRfc21zYzkxMXgoKTsKIAlvbWFwX2kyY19pbml0KCk7CiAJcGxhdGZvcm1fYWRkX2RldmljZXMobGRwX2RldmljZXMsIEFSUkFZX1NJWkUobGRwX2RldmljZXMpKTsKIAl0c19ncGlvID0gNTQ7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW44eDAuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtbjh4MC5jCmluZGV4IGU4MjNjNzAuLmYzOTY3NTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtbjh4MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtbjh4MC5jCkBAIC00Niw4ICs0Niw3IEBACiAjZGVmaW5lIFRVU0I2MDEwX0dQSU9fRU5BQkxFCTAKICNkZWZpbmUgVFVTQjYwMTBfRE1BQ0hBTgkweDNmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19VU0JfVFVTQjYwMTApIHx8IFwKLQlkZWZpbmVkKENPTkZJR19VU0JfVFVTQjYwMTBfTU9EVUxFKQorI2lmZGVmIENPTkZJR19VU0JfTVVTQl9UVVNCNjAxMAogLyoKICAqIEVuYWJsZSBvciBkaXNhYmxlIHBvd2VyIHRvIFRVU0I2MDEwLiBXaGVuIGVuYWJsaW5nLCB0dXJuIG9uIDMuMyBWIGFuZAogICogMS41IFYgdm9sdGFnZSByZWd1bGF0b3JzIG9mIFBNIGNvbXBhbmlvbiBjaGlwLiBDb21wYW5pb24gY2hpcCB3aWxsIHRoZW4KQEAgLTEzNCw3ICsxMzMsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgbjh4MF91c2JfaW5pdCh2b2lkKSB7fQogCi0jZW5kaWYgLypDT05GSUdfVVNCX1RVU0I2MDEwICovCisjZW5kaWYgLypDT05GSUdfVVNCX01VU0JfVFVTQjYwMTAgKi8KIAogCiBzdGF0aWMgc3RydWN0IG9tYXAyX21jc3BpX2RldmljZV9jb25maWcgcDU0c3BpX21jc3BpX2NvbmZpZyA9IHsKQEAgLTE4NCwyMyArMTgzLDE1IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgb21hcF9vbmVuYW5kX3BsYXRmb3JtX2RhdGEgYm9hcmRfb25lbmFuZF9kYXRhID0gewotCS5jcwkJPSAwLAotCS5ncGlvX2lycQk9IDI2LAotCS5wYXJ0cwkJPSBvbmVuYW5kX3BhcnRpdGlvbnMsCi0JLm5yX3BhcnRzCT0gQVJSQVlfU0laRShvbmVuYW5kX3BhcnRpdGlvbnMpLAotCS5mbGFncwkJPSBPTkVOQU5EX1NZTkNfUkVBRCwKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9vbmVuYW5kX3BsYXRmb3JtX2RhdGEgYm9hcmRfb25lbmFuZF9kYXRhW10gPSB7CisJeworCQkuY3MJCT0gMCwKKwkJLmdwaW9faXJxCT0gMjYsCisJCS5wYXJ0cwkJPSBvbmVuYW5kX3BhcnRpdGlvbnMsCisJCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUob25lbmFuZF9wYXJ0aXRpb25zKSwKKwkJLmZsYWdzCQk9IE9ORU5BTkRfU1lOQ19SRUFELAorCX0KIH07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBuOHgwX29uZW5hbmRfaW5pdCh2b2lkKQotewotCWdwbWNfb25lbmFuZF9pbml0KCZib2FyZF9vbmVuYW5kX2RhdGEpOwotfQotCi0jZWxzZQotCi1zdGF0aWMgdm9pZCBfX2luaXQgbjh4MF9vbmVuYW5kX2luaXQodm9pZCkge30KLQogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19NRU5FTEFVUykgJiYJCQkJCQlcCkBAIC02MzksOSArNjMwLDkgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IG44eDBfaW5pdF9pcnEodm9pZCkKIHsKLQlvbWFwMl9pbml0X2NvbW1vbl9odyhOVUxMLCBOVUxMKTsKKwlvbWFwMl9pbml0X2NvbW1vbl9pbmZyYXN0cnVjdHVyZSgpOworCW9tYXAyX2luaXRfY29tbW9uX2RldmljZXMoTlVMTCwgTlVMTCk7CiAJb21hcF9pbml0X2lycSgpOwotCW9tYXBfZ3Bpb19pbml0KCk7CiB9CiAKICNpZmRlZiBDT05GSUdfT01BUF9NVVgKQEAgLTY1Myw4ICs2NDQsNDMgQEAKIAlPTUFQMjQyMF9NVVgoRUFDX0FDX0RPVVQsIE9NQVBfTVVYX01PREUxIHwgT01BUF9QSU5fT1VUUFVUKSwKIAl7IC5yZWdfb2Zmc2V0ID0gT01BUF9NVVhfVEVSTUlOQVRPUiB9LAogfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2RldmljZV9wYWQgc2VyaWFsMl9wYWRzW10gX19pbml0ZGF0YSA9IHsKKwl7CisJCS5uYW1lCT0gInVhcnQzX3J4X2lycngudWFydDNfcnhfaXJyeCIsCisJCS5mbGFncwk9IE9NQVBfREVWSUNFX1BBRF9SRU1VWCB8IE9NQVBfREVWSUNFX1BBRF9XQUtFVVAsCisJCS5lbmFibGUJPSBPTUFQX01VWF9NT0RFMCwKKwkJLmlkbGUJPSBPTUFQX01VWF9NT0RFMwkvKiBNdXggYXMgR1BJTyBmb3IgaWRsZSAqLworCX0sCit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgYm9hcmRfc2VyaWFsX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3Qgb21hcF9ib2FyZF9kYXRhIGJkYXRhOworCisJYmRhdGEuZmxhZ3MgPSAwOworCWJkYXRhLnBhZHMgPSBOVUxMOworCWJkYXRhLnBhZHNfY250ID0gMDsKKworCWJkYXRhLmlkID0gMDsKKwlvbWFwX3NlcmlhbF9pbml0X3BvcnQoJmJkYXRhKTsKKworCWJkYXRhLmlkID0gMTsKKwlvbWFwX3NlcmlhbF9pbml0X3BvcnQoJmJkYXRhKTsKKworCWJkYXRhLmlkID0gMjsKKwliZGF0YS5wYWRzID0gc2VyaWFsMl9wYWRzOworCWJkYXRhLnBhZHNfY250ID0gQVJSQVlfU0laRShzZXJpYWwyX3BhZHMpOworCW9tYXBfc2VyaWFsX2luaXRfcG9ydCgmYmRhdGEpOworfQorCiAjZWxzZQotI2RlZmluZSBib2FyZF9tdXgJTlVMTAorCitzdGF0aWMgaW5saW5lIHZvaWQgYm9hcmRfc2VyaWFsX2luaXQodm9pZCkKK3sKKwlvbWFwX3NlcmlhbF9pbml0KCk7Cit9CisKICNlbmRpZgogCiBzdGF0aWMgdm9pZCBfX2luaXQgbjh4MF9pbml0X21hY2hpbmUodm9pZCkKQEAgLTY2OSw5ICs2OTUsOCBAQAogCWlmIChtYWNoaW5lX2lzX25va2lhX244MTAoKSkKIAkJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMiwgbjgxMF9pMmNfYm9hcmRfaW5mb18yLAogCQkJCQlBUlJBWV9TSVpFKG44MTBfaTJjX2JvYXJkX2luZm9fMikpOwotCi0Jb21hcF9zZXJpYWxfaW5pdCgpOwotCW44eDBfb25lbmFuZF9pbml0KCk7CisJYm9hcmRfc2VyaWFsX2luaXQoKTsKKwlncG1jX29uZW5hbmRfaW5pdChib2FyZF9vbmVuYW5kX2RhdGEpOwogCW44eDBfbW1jX2luaXQoKTsKIAluOHgwX3VzYl9pbml0KCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzYmVhZ2xlLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzYmVhZ2xlLmMKaW5kZXggMTRmNDIyNC4uNmMxMjc2MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM2JlYWdsZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNiZWFnbGUuYwpAQCAtNDg0LDEzICs0ODQsMTMgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IG9tYXAzX2JlYWdsZV9pbml0X2lycSh2b2lkKQogewotCW9tYXAyX2luaXRfY29tbW9uX2h3KG10NDZoMzJtMzJsZjZfc2RyY19wYXJhbXMsCi0JCQkgICAgIG10NDZoMzJtMzJsZjZfc2RyY19wYXJhbXMpOworCW9tYXAyX2luaXRfY29tbW9uX2luZnJhc3RydWN0dXJlKCk7CisJb21hcDJfaW5pdF9jb21tb25fZGV2aWNlcyhtdDQ2aDMybTMybGY2X3NkcmNfcGFyYW1zLAorCQkJCSAgbXQ0NmgzMm0zMmxmNl9zZHJjX3BhcmFtcyk7CiAJb21hcF9pbml0X2lycSgpOwogI2lmZGVmIENPTkZJR19PTUFQXzMyS19USU1FUgogCW9tYXAyX2dwX2Nsb2NrZXZlbnRfc2V0X2dwdGltZXIoMTIpOwogI2VuZGlmCi0Jb21hcF9ncGlvX2luaXQoKTsKIH0KIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9tYXAzX2JlYWdsZV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKQEAgLTU0OCw4ICs1NDgsNiBAQAogc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX211eCBib2FyZF9tdXhbXSBfX2luaXRkYXRhID0gewogCXsgLnJlZ19vZmZzZXQgPSBPTUFQX01VWF9URVJNSU5BVE9SIH0sCiB9OwotI2Vsc2UKLSNkZWZpbmUgYm9hcmRfbXV4CU5VTEwKICNlbmRpZgogCiBzdGF0aWMgc3RydWN0IG9tYXBfbXVzYl9ib2FyZF9kYXRhIG11c2JfYm9hcmRfZGF0YSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNldm0uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNldm0uYwppbmRleCBiMDQzNjVjLi4zZGU4ZDliIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzZXZtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM2V2bS5jCkBAIC02MjMsOSArNjIzLDkgQEAKIHsKIAlvbWFwX2JvYXJkX2NvbmZpZyA9IG9tYXAzX2V2bV9jb25maWc7CiAJb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUob21hcDNfZXZtX2NvbmZpZyk7Ci0Jb21hcDJfaW5pdF9jb21tb25faHcobXQ0NmgzMm0zMmxmNl9zZHJjX3BhcmFtcywgTlVMTCk7CisJb21hcDJfaW5pdF9jb21tb25faW5mcmFzdHJ1Y3R1cmUoKTsKKwlvbWFwMl9pbml0X2NvbW1vbl9kZXZpY2VzKG10NDZoMzJtMzJsZjZfc2RyY19wYXJhbXMsIE5VTEwpOwogCW9tYXBfaW5pdF9pcnEoKTsKLQlvbWFwX2dwaW9faW5pdCgpOwogfQogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb21hcDNfZXZtX2RldmljZXNbXSBfX2luaXRkYXRhID0gewpAQCAtNjU0LDggKzY1NCw2IEBACiAJCQkJT01BUF9QSU5fT0ZGX0lOUFVUX1BVTExVUCB8IE9NQVBfUElOX09GRl9PVVRQVVRfTE9XKSwKIAl7IC5yZWdfb2Zmc2V0ID0gT01BUF9NVVhfVEVSTUlOQVRPUiB9LAogfTsKLSNlbHNlCi0jZGVmaW5lIGJvYXJkX211eAlOVUxMCiAjZW5kaWYKIAogc3RhdGljIHN0cnVjdCBvbWFwX211c2JfYm9hcmRfZGF0YSBtdXNiX2JvYXJkX2RhdGEgPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzbG9naWMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNsb2dpYy5jCmluZGV4IDVmN2QyYzEuLjE1ZTRiMDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNsb2dpYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNsb2dpYy5jCkBAIC0xOTcsMTcgKzE5NywxNSBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcDNsb2dpY19pbml0X2lycSh2b2lkKQogewotCW9tYXAyX2luaXRfY29tbW9uX2h3KE5VTEwsIE5VTEwpOworCW9tYXAyX2luaXRfY29tbW9uX2luZnJhc3RydWN0dXJlKCk7CisJb21hcDJfaW5pdF9jb21tb25fZGV2aWNlcyhOVUxMLCBOVUxMKTsKIAlvbWFwX2luaXRfaXJxKCk7Ci0Jb21hcF9ncGlvX2luaXQoKTsKIH0KIAogI2lmZGVmIENPTkZJR19PTUFQX01VWAogc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX211eCBib2FyZF9tdXhbXSBfX2luaXRkYXRhID0gewogCXsgLnJlZ19vZmZzZXQgPSBPTUFQX01VWF9URVJNSU5BVE9SIH0sCiB9OwotI2Vsc2UKLSNkZWZpbmUgYm9hcmRfbXV4ICAgICAgIE5VTEwKICNlbmRpZgogCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcDNsb2dpY19pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzcGFuZG9yYS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM3BhbmRvcmEuYwppbmRleCA4OWVkMWJlLi4wYjM0YmVkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzcGFuZG9yYS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNwYW5kb3JhLmMKQEAgLTI5Myw3ICsyOTMsNyBAQAogCX0sCiAJewogCQkubW1jCQk9IDMsCi0JCS5jYXBzCQk9IE1NQ19DQVBfNF9CSVRfREFUQSwKKwkJLmNhcHMJCT0gTU1DX0NBUF80X0JJVF9EQVRBIHwgTU1DX0NBUF9QT1dFUl9PRkZfQ0FSRCwKIAkJLmdwaW9fY2QJPSAtRUlOVkFMLAogCQkuZ3Bpb193cAk9IC1FSU5WQUwsCiAJCS5pbml0X2NhcmQJPSBwYW5kb3JhX3dsMTI1MV9pbml0X2NhcmQsCkBAIC02MzYsMzcgKzYzNiwxOSBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcDNwYW5kb3JhX2luaXRfaXJxKHZvaWQpCiB7Ci0Jb21hcDJfaW5pdF9jb21tb25faHcobXQ0NmgzMm0zMmxmNl9zZHJjX3BhcmFtcywKLQkJCSAgICAgbXQ0NmgzMm0zMmxmNl9zZHJjX3BhcmFtcyk7CisJb21hcDJfaW5pdF9jb21tb25faW5mcmFzdHJ1Y3R1cmUoKTsKKwlvbWFwMl9pbml0X2NvbW1vbl9kZXZpY2VzKG10NDZoMzJtMzJsZjZfc2RyY19wYXJhbXMsCisJCQkJICBtdDQ2aDMybTMybGY2X3NkcmNfcGFyYW1zKTsKIAlvbWFwX2luaXRfaXJxKCk7Ci0Jb21hcF9ncGlvX2luaXQoKTsKIH0KIAotc3RhdGljIHZvaWQgcGFuZG9yYV93bDEyNTFfc2V0X3Bvd2VyKGJvb2wgZW5hYmxlKQorc3RhdGljIHZvaWQgX19pbml0IHBhbmRvcmFfd2wxMjUxX2luaXQodm9pZCkKIHsKLQkvKgotCSAqIEtlZXAgcG93ZXIgYWx3YXlzIG9uIHVudGlsIHdsMTI1MV9zZGlvIGRyaXZlciBsZWFybnMgdG8gcmUtaW5pdAotCSAqIHRoZSBjaGlwIGFmdGVyIHBvd2VyaW5nIGl0IGRvd24gYW5kIGJhY2sgdXAuCi0JICovCi19Ci0KLXN0YXRpYyBzdHJ1Y3Qgd2wxMnh4X3BsYXRmb3JtX2RhdGEgcGFuZG9yYV93bDEyNTFfcGRhdGEgPSB7Ci0JLnNldF9wb3dlcgk9IHBhbmRvcmFfd2wxMjUxX3NldF9wb3dlciwKLQkudXNlX2VlcHJvbQk9IHRydWUsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBwYW5kb3JhX3dsMTI1MV9kYXRhID0gewotCS5uYW1lICAgICAgICAgICA9ICJ3bDEyNTFfZGF0YSIsCi0JLmlkICAgICAgICAgICAgID0gLTEsCi0JLmRldgkJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJnBhbmRvcmFfd2wxMjUxX3BkYXRhLAotCX0sCi19OwotCi1zdGF0aWMgdm9pZCBwYW5kb3JhX3dsMTI1MV9pbml0KHZvaWQpCi17CisJc3RydWN0IHdsMTJ4eF9wbGF0Zm9ybV9kYXRhIHBhbmRvcmFfd2wxMjUxX3BkYXRhOwogCWludCByZXQ7CiAKKwltZW1zZXQoJnBhbmRvcmFfd2wxMjUxX3BkYXRhLCAwLCBzaXplb2YocGFuZG9yYV93bDEyNTFfcGRhdGEpKTsKKwogCXJldCA9IGdwaW9fcmVxdWVzdChQQU5ET1JBX1dJRklfSVJRX0dQSU8sICJ3bDEyNTEgaXJxIik7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZmFpbDsKQEAgLTY3OSw2ICs2NjEsMTEgQEAKIAlpZiAocGFuZG9yYV93bDEyNTFfcGRhdGEuaXJxIDwgMCkKIAkJZ290byBmYWlsX2lycTsKIAorCXBhbmRvcmFfd2wxMjUxX3BkYXRhLnVzZV9lZXByb20gPSB0cnVlOworCXJldCA9IHdsMTJ4eF9zZXRfcGxhdGZvcm1fZGF0YSgmcGFuZG9yYV93bDEyNTFfcGRhdGEpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGZhaWxfaXJxOworCiAJcmV0dXJuOwogCiBmYWlsX2lycToKQEAgLTY5MSw3ICs2NzgsNiBAQAogCSZwYW5kb3JhX2xlZHNfZ3BpbywKIAkmcGFuZG9yYV9rZXlzX2dwaW8sCiAJJnBhbmRvcmFfZHNzX2RldmljZSwKLQkmcGFuZG9yYV93bDEyNTFfZGF0YSwKIAkmcGFuZG9yYV92d2xhbl9kZXZpY2UsCiB9OwogCkBAIC03MTEsOCArNjk3LDYgQEAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9tdXggYm9hcmRfbXV4W10gX19pbml0ZGF0YSA9IHsKIAl7IC5yZWdfb2Zmc2V0ID0gT01BUF9NVVhfVEVSTUlOQVRPUiB9LAogfTsKLSNlbHNlCi0jZGVmaW5lIGJvYXJkX211eAlOVUxMCiAjZW5kaWYKIAogc3RhdGljIHN0cnVjdCBvbWFwX211c2JfYm9hcmRfZGF0YSBtdXNiX2JvYXJkX2RhdGEgPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzc3RhbGtlci5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM3N0YWxrZXIuYwppbmRleCBmMjUyNzIxLi45ZGY5ZDkzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzc3RhbGtlci5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNzdGFsa2VyLmMKQEAgLTU4NCwxMiArNTg0LDEyIEBACiB7CiAJb21hcF9ib2FyZF9jb25maWcgPSBvbWFwM19zdGFsa2VyX2NvbmZpZzsKIAlvbWFwX2JvYXJkX2NvbmZpZ19zaXplID0gQVJSQVlfU0laRShvbWFwM19zdGFsa2VyX2NvbmZpZyk7Ci0Jb21hcDJfaW5pdF9jb21tb25faHcobXQ0NmgzMm0zMmxmNl9zZHJjX3BhcmFtcywgTlVMTCk7CisJb21hcDJfaW5pdF9jb21tb25faW5mcmFzdHJ1Y3R1cmUoKTsKKwlvbWFwMl9pbml0X2NvbW1vbl9kZXZpY2VzKG10NDZoMzJtMzJsZjZfc2RyY19wYXJhbXMsIE5VTEwpOwogCW9tYXBfaW5pdF9pcnEoKTsKICNpZmRlZiBDT05GSUdfT01BUF8zMktfVElNRVIKIAlvbWFwMl9ncF9jbG9ja2V2ZW50X3NldF9ncHRpbWVyKDEyKTsKICNlbmRpZgotCW9tYXBfZ3Bpb19pbml0KCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvbWFwM19zdGFsa2VyX2RldmljZXNbXSBfX2luaXRkYXRhID0gewpAQCAtNjE2LDggKzYxNiw2IEBACiAJCSAgT01BUF9QSU5fT0ZGX0lOUFVUX1BVTExVUCB8IE9NQVBfUElOX09GRl9XQUtFVVBFTkFCTEUpLAogCXsucmVnX29mZnNldCA9IE9NQVBfTVVYX1RFUk1JTkFUT1J9LAogfTsKLSNlbHNlCi0jZGVmaW5lIGJvYXJkX211eAlOVUxMCiAjZW5kaWYKIAogc3RhdGljIHN0cnVjdCBvbWFwX211c2JfYm9hcmRfZGF0YSBtdXNiX2JvYXJkX2RhdGEgPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzdG91Y2hib29rLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzdG91Y2hib29rLmMKaW5kZXggNDExMDRiYi4uZGIxZjc0ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM3RvdWNoYm9vay5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDN0b3VjaGJvb2suYwpAQCAtNDEzLDggKzQxMyw2IEBACiBzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfbXV4IGJvYXJkX211eFtdIF9faW5pdGRhdGEgPSB7CiAJeyAucmVnX29mZnNldCA9IE9NQVBfTVVYX1RFUk1JTkFUT1IgfSwKIH07Ci0jZWxzZQotI2RlZmluZSBib2FyZF9tdXgJTlVMTAogI2VuZGlmCiAKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwM190b3VjaGJvb2tfaW5pdF9pcnEodm9pZCkKQEAgLTQyMiwxMyArNDIwLDEzIEBACiAJb21hcDNfbXV4X2luaXQoYm9hcmRfbXV4LCBPTUFQX1BBQ0tBR0VfQ0JCKTsKIAlvbWFwX2JvYXJkX2NvbmZpZyA9IG9tYXAzX3RvdWNoYm9va19jb25maWc7CiAJb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUob21hcDNfdG91Y2hib29rX2NvbmZpZyk7Ci0Jb21hcDJfaW5pdF9jb21tb25faHcobXQ0NmgzMm0zMmxmNl9zZHJjX3BhcmFtcywKLQkJCSAgICAgbXQ0NmgzMm0zMmxmNl9zZHJjX3BhcmFtcyk7CisJb21hcDJfaW5pdF9jb21tb25faW5mcmFzdHJ1Y3R1cmUoKTsKKwlvbWFwMl9pbml0X2NvbW1vbl9kZXZpY2VzKG10NDZoMzJtMzJsZjZfc2RyY19wYXJhbXMsCisJCQkJICBtdDQ2aDMybTMybGY2X3NkcmNfcGFyYW1zKTsKIAlvbWFwX2luaXRfaXJxKCk7CiAjaWZkZWYgQ09ORklHX09NQVBfMzJLX1RJTUVSCiAJb21hcDJfZ3BfY2xvY2tldmVudF9zZXRfZ3B0aW1lcigxMik7CiAjZW5kaWYKLQlvbWFwX2dwaW9faW5pdCgpOwogfQogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb21hcDNfdG91Y2hib29rX2RldmljZXNbXSBfX2luaXRkYXRhID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwNHBhbmRhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXA0cGFuZGEuYwppbmRleCAxZWNkMGE2Yy4uMzA5NGUyMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwNHBhbmRhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwNHBhbmRhLmMKQEAgLTQwLDYgKzQwLDcgQEAKIAogI2luY2x1ZGUgImhzbW1jLmgiCiAjaW5jbHVkZSAiY29udHJvbC5oIgorI2luY2x1ZGUgIm11eC5oIgogCiAjZGVmaW5lIEdQSU9fSFVCX1BPV0VSCQkxCiAjZGVmaW5lIEdQSU9fSFVCX05SRVNFVAkJNjIKQEAgLTc2LDkgKzc3LDkgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IG9tYXA0X3BhbmRhX2luaXRfaXJxKHZvaWQpCiB7Ci0Jb21hcDJfaW5pdF9jb21tb25faHcoTlVMTCwgTlVMTCk7CisJb21hcDJfaW5pdF9jb21tb25faW5mcmFzdHJ1Y3R1cmUoKTsKKwlvbWFwMl9pbml0X2NvbW1vbl9kZXZpY2VzKE5VTEwsIE5VTEwpOwogCWdpY19pbml0X2lycSgpOwotCW9tYXBfZ3Bpb19pbml0KCk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZWhjaV9oY2Rfb21hcF9wbGF0Zm9ybV9kYXRhIGVoY2lfcGRhdGEgX19pbml0Y29uc3QgPSB7CkBAIC0xMzMsMTUgKzEzNCwyMyBAQAogCiBzdGF0aWMgc3RydWN0IG9tYXBfbXVzYl9ib2FyZF9kYXRhIG11c2JfYm9hcmRfZGF0YSA9IHsKIAkuaW50ZXJmYWNlX3R5cGUJCT0gTVVTQl9JTlRFUkZBQ0VfVVRNSSwKLQkubW9kZQkJCT0gTVVTQl9QRVJJUEhFUkFMLAorCS5tb2RlCQkJPSBNVVNCX09URywKIAkucG93ZXIJCQk9IDEwMCwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgdHdsNDAzMF91c2JfZGF0YSBvbWFwNF91c2JwaHlfZGF0YSA9IHsKKwkucGh5X2luaXQJPSBvbWFwNDQzMF9waHlfaW5pdCwKKwkucGh5X2V4aXQJPSBvbWFwNDQzMF9waHlfZXhpdCwKKwkucGh5X3Bvd2VyCT0gb21hcDQ0MzBfcGh5X3Bvd2VyLAorCS5waHlfc2V0X2Nsb2NrCT0gb21hcDQ0MzBfcGh5X3NldF9jbGssCit9OworCiBzdGF0aWMgc3RydWN0IG9tYXAyX2hzbW1jX2luZm8gbW1jW10gPSB7CiAJewogCQkubW1jCQk9IDEsCiAJCS5jYXBzCQk9IE1NQ19DQVBfNF9CSVRfREFUQSB8IE1NQ19DQVBfOF9CSVRfREFUQSwKIAkJLmdwaW9fd3AJPSAtRUlOVkFMLAorCQkuZ3Bpb19jZAk9IC1FSU5WQUwsCiAJfSwKIAl7fQkvKiBUZXJtaW5hdG9yICovCiB9OwpAQCAtMzQ1LDYgKzM1NCw3IEBACiAJLnZhdXgxCQk9ICZvbWFwNF9wYW5kYV92YXV4MSwKIAkudmF1eDIJCT0gJm9tYXA0X3BhbmRhX3ZhdXgyLAogCS52YXV4MwkJPSAmb21hcDRfcGFuZGFfdmF1eDMsCisJLnVzYgkJPSAmb21hcDRfdXNicGh5X2RhdGEsCiB9OwogCiBzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgb21hcDRfcGFuZGFfaTJjX2JvYXJkaW5mb1tdID0gewpAQCAtMzY4LDggKzM3OCwyMyBAQAogCW9tYXBfcmVnaXN0ZXJfaTJjX2J1cyg0LCA0MDAsIE5VTEwsIDApOwogCXJldHVybiAwOwogfQorCisjaWZkZWYgQ09ORklHX09NQVBfTVVYCitzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfbXV4IGJvYXJkX211eFtdIF9faW5pdGRhdGEgPSB7CisJeyAucmVnX29mZnNldCA9IE9NQVBfTVVYX1RFUk1JTkFUT1IgfSwKK307CisjZWxzZQorI2RlZmluZSBib2FyZF9tdXgJTlVMTAorI2VuZGlmCisKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwNF9wYW5kYV9pbml0KHZvaWQpCiB7CisJaW50IHBhY2thZ2UgPSBPTUFQX1BBQ0tBR0VfQ0JTOworCisJaWYgKG9tYXBfcmV2KCkgPT0gT01BUDQ0MzBfUkVWX0VTMV8wKQorCQlwYWNrYWdlID0gT01BUF9QQUNLQUdFX0NCTDsKKwlvbWFwNF9tdXhfaW5pdChib2FyZF9tdXgsIHBhY2thZ2UpOworCiAJb21hcDRfcGFuZGFfaTJjX2luaXQoKTsKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhwYW5kYV9kZXZpY2VzLCBBUlJBWV9TSVpFKHBhbmRhX2RldmljZXMpKTsKIAlvbWFwX3NlcmlhbF9pbml0KCk7CkBAIC0zNzcsOSArNDAyLDcgQEAKIAkvKiBPTUFQNCBQYW5kYSB1c2VzIGludGVybmFsIHRyYW5zY2VpdmVyIHNvIHJlZ2lzdGVyIG5vcCB0cmFuc2NlaXZlciAqLwogCXVzYl9ub3BfeGNlaXZfcmVnaXN0ZXIoKTsKIAlvbWFwNF9laGNpX2luaXQoKTsKLQkvKiBGSVhNRTogYWxsb3cgbXVsdGktb21hcCB0byBib290IHVudGlsIG11c2IgaXMgdXBkYXRlZCBmb3Igb21hcDQgKi8KLQlpZiAoIWNwdV9pc19vbWFwNDR4eCgpKQotCQl1c2JfbXVzYl9pbml0KCZtdXNiX2JvYXJkX2RhdGEpOworCXVzYl9tdXNiX2luaXQoJm11c2JfYm9hcmRfZGF0YSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwNF9wYW5kYV9tYXBfaW8odm9pZCkKQEAgLTM5MSw2ICs0MTQsNyBAQAogTUFDSElORV9TVEFSVChPTUFQNF9QQU5EQSwgIk9NQVA0IFBhbmRhIGJvYXJkIikKIAkvKiBNYWludGFpbmVyOiBEYXZpZCBBbmRlcnMgLSBUZXhhcyBJbnN0cnVtZW50cyBJbmMgKi8KIAkuYm9vdF9wYXJhbXMJPSAweDgwMDAwMTAwLAorCS5yZXNlcnZlCT0gb21hcF9yZXNlcnZlLAogCS5tYXBfaW8JCT0gb21hcDRfcGFuZGFfbWFwX2lvLAogCS5pbml0X2lycQk9IG9tYXA0X3BhbmRhX2luaXRfaXJxLAogCS5pbml0X21hY2hpbmUJPSBvbWFwNF9wYW5kYV9pbml0LApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vdmVyby5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vdmVyby5jCmluZGV4IDcwNTNiYzAuLmNiMjZlNWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb3Zlcm8uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW92ZXJvLmMKQEAgLTQxMywxMCArNDEzLDEwIEBACiB7CiAJb21hcF9ib2FyZF9jb25maWcgPSBvdmVyb19jb25maWc7CiAJb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUob3Zlcm9fY29uZmlnKTsKLQlvbWFwMl9pbml0X2NvbW1vbl9odyhtdDQ2aDMybTMybGY2X3NkcmNfcGFyYW1zLAotCQkJICAgICBtdDQ2aDMybTMybGY2X3NkcmNfcGFyYW1zKTsKKwlvbWFwMl9pbml0X2NvbW1vbl9pbmZyYXN0cnVjdHVyZSgpOworCW9tYXAyX2luaXRfY29tbW9uX2RldmljZXMobXQ0NmgzMm0zMmxmNl9zZHJjX3BhcmFtcywKKwkJCQkgIG10NDZoMzJtMzJsZjZfc2RyY19wYXJhbXMpOwogCW9tYXBfaW5pdF9pcnEoKTsKLQlvbWFwX2dwaW9faW5pdCgpOwogfQogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb3Zlcm9fZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CkBAIC00MzgsOCArNDM4LDYgQEAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9tdXggYm9hcmRfbXV4W10gX19pbml0ZGF0YSA9IHsKIAl7IC5yZWdfb2Zmc2V0ID0gT01BUF9NVVhfVEVSTUlOQVRPUiB9LAogfTsKLSNlbHNlCi0jZGVmaW5lIGJvYXJkX211eAlOVUxMCiAjZW5kaWYKIAogc3RhdGljIHN0cnVjdCBvbWFwX211c2JfYm9hcmRfZGF0YSBtdXNiX2JvYXJkX2RhdGEgPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJtNjgwLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJtNjgwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I3N2JlNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcm02ODAuYwpAQCAtMCwwICsxLDE4NyBAQAorLyoKKyAqIEJvYXJkIHN1cHBvcnQgZmlsZSBmb3IgTm9raWEgUk0tNjgwLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMvdHdsLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2ZpeGVkLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL21hY2hpbmUuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorCisjaW5jbHVkZSA8cGxhdC9pMmMuaD4KKyNpbmNsdWRlIDxwbGF0L21tYy5oPgorI2luY2x1ZGUgPHBsYXQvdXNiLmg+CisjaW5jbHVkZSA8cGxhdC9ncG1jLmg+CisjaW5jbHVkZSA8cGxhdC9jb21tb24uaD4KKyNpbmNsdWRlIDxwbGF0L29uZW5hbmQuaD4KKworI2luY2x1ZGUgIm11eC5oIgorI2luY2x1ZGUgImhzbW1jLmgiCisjaW5jbHVkZSAic2RyYW0tbm9raWEuaCIKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IHJtNjgwX3ZlbW1jX2NvbnN1bWVyc1tdID0geworCVJFR1VMQVRPUl9TVVBQTFkoInZtbWMiLCAibW1jaS1vbWFwLWhzLjEiKSwKK307CisKKy8qIEZpeGVkIHJlZ3VsYXRvciBmb3IgaW50ZXJuYWwgZU1NQyAqLworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHJtNjgwX3ZlbW1jID0geworCS5jb25zdHJhaW50cyA9CXsKKwkJLm5hbWUJCQk9ICJybTY4MF92ZW1tYyIsCisJCS5taW5fdVYJCQk9IDI5MDAwMDAsCisJCS5tYXhfdVYJCQk9IDI5MDAwMDAsCisJCS5hcHBseV91VgkJPSAxLAorCQkudmFsaWRfbW9kZXNfbWFzawk9IFJFR1VMQVRPUl9NT0RFX05PUk1BTAorCQkJCQl8IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlksCisJCS52YWxpZF9vcHNfbWFzawkJPSBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUworCQkJCQl8IFJFR1VMQVRPUl9DSEFOR0VfTU9ERSwKKwl9LAorCS5udW1fY29uc3VtZXJfc3VwcGxpZXMJCT0gQVJSQVlfU0laRShybTY4MF92ZW1tY19jb25zdW1lcnMpLAorCS5jb25zdW1lcl9zdXBwbGllcwkJPSBybTY4MF92ZW1tY19jb25zdW1lcnMsCit9OworCitzdGF0aWMgc3RydWN0IGZpeGVkX3ZvbHRhZ2VfY29uZmlnIHJtNjgwX3ZlbW1jX2NvbmZpZyA9IHsKKwkuc3VwcGx5X25hbWUJCT0gIlZFTU1DIiwKKwkubWljcm92b2x0cwkJPSAyOTAwMDAwLAorCS5ncGlvCQkJPSAxNTcsCisJLnN0YXJ0dXBfZGVsYXkJCT0gMTUwLAorCS5lbmFibGVfaGlnaAkJPSAxLAorCS5pbml0X2RhdGEJCT0gJnJtNjgwX3ZlbW1jLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugcm02ODBfdmVtbWNfZGV2aWNlID0geworCS5uYW1lCQkJPSAicmVnLWZpeGVkLXZvbHRhZ2UiLAorCS5kZXYJCQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmcm02ODBfdmVtbWNfY29uZmlnLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcm02ODBfcGVyaXBoZXJhbHNfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJnJtNjgwX3ZlbW1jX2RldmljZSwKK307CisKKy8qIFRXTCAqLworc3RhdGljIHN0cnVjdCB0d2w0MDMwX2dwaW9fcGxhdGZvcm1fZGF0YSBybTY4MF9ncGlvX2RhdGEgPSB7CisJLmdwaW9fYmFzZQkJPSBPTUFQX01BWF9HUElPX0xJTkVTLAorCS5pcnFfYmFzZQkJPSBUV0w0MDMwX0dQSU9fSVJRX0JBU0UsCisJLmlycV9lbmQJCT0gVFdMNDAzMF9HUElPX0lSUV9FTkQsCisJLnB1bGx1cHMJCT0gQklUKDApLAorCS5wdWxsZG93bnMJCT0gQklUKDEpIHwgQklUKDIpIHwgQklUKDgpIHwgQklUKDE1KSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdHdsNDAzMF91c2JfZGF0YSBybTY4MF91c2JfZGF0YSA9IHsKKwkudXNiX21vZGUJCT0gVDJfVVNCX01PREVfVUxQSSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9wbGF0Zm9ybV9kYXRhIHJtNjgwX3R3bF9kYXRhID0geworCS5pcnFfYmFzZQkJPSBUV0w0MDMwX0lSUV9CQVNFLAorCS5pcnFfZW5kCQk9IFRXTDQwMzBfSVJRX0VORCwKKwkuZ3BpbwkJCT0gJnJtNjgwX2dwaW9fZGF0YSwKKwkudXNiCQkJPSAmcm02ODBfdXNiX2RhdGEsCisJLyogYWRkIHJlc3Qgb2YgdGhlIGNoaWxkcmVuIGhlcmUgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBybTY4MF90d2xfaTJjX2JvYXJkX2luZm9bXSA9IHsKKwl7CisJCUkyQ19CT0FSRF9JTkZPKCJ0d2w1MDMxIiwgMHg0OCksCisJCS5mbGFncwkJPSBJMkNfQ0xJRU5UX1dBS0UsCisJCS5pcnEJCT0gSU5UXzM0WFhfU1lTX05JUlEsCisJCS5wbGF0Zm9ybV9kYXRhCT0gJnJtNjgwX3R3bF9kYXRhLAorCX0sCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgcm02ODBfaTJjX2luaXQodm9pZCkKK3sKKwlvbWFwX3JlZ2lzdGVyX2kyY19idXMoMSwgMjkwMCwgcm02ODBfdHdsX2kyY19ib2FyZF9pbmZvLAorCQkJCUFSUkFZX1NJWkUocm02ODBfdHdsX2kyY19ib2FyZF9pbmZvKSk7CisJb21hcF9yZWdpc3Rlcl9pMmNfYnVzKDIsIDQwMCwgTlVMTCwgMCk7CisJb21hcF9yZWdpc3Rlcl9pMmNfYnVzKDMsIDQwMCwgTlVMTCwgMCk7Cit9CisKKyNpZiBkZWZpbmVkKENPTkZJR19NVERfT05FTkFORF9PTUFQMikgfHwgXAorCWRlZmluZWQoQ09ORklHX01URF9PTkVOQU5EX09NQVAyX01PRFVMRSkKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9vbmVuYW5kX3BsYXRmb3JtX2RhdGEgYm9hcmRfb25lbmFuZF9kYXRhW10gPSB7CisJeworCQkuZ3Bpb19pcnEJPSA2NSwKKwkJLmZsYWdzCQk9IE9ORU5BTkRfU1lOQ19SRUFEV1JJVEUsCisJfQorfTsKKyNlbmRpZgorCisvKiBlTU1DICovCitzdGF0aWMgc3RydWN0IG9tYXAyX2hzbW1jX2luZm8gbW1jW10gX19pbml0ZGF0YSA9IHsKKwl7CisJCS5uYW1lCQk9ICJpbnRlcm5hbCIsCisJCS5tbWMJCT0gMiwKKwkJLmNhcHMJCT0gTU1DX0NBUF80X0JJVF9EQVRBIHwgTU1DX0NBUF9NTUNfSElHSFNQRUVELAorCQkuZ3Bpb19jZAk9IC1FSU5WQUwsCisJCS5ncGlvX3dwCT0gLUVJTlZBTCwKKwl9LAorCXsgLyogVGVybWluYXRvciAqLyB9Cit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgcm02ODBfcGVyaXBoZXJhbHNfaW5pdCh2b2lkKQoreworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHJtNjgwX3BlcmlwaGVyYWxzX2RldmljZXMsCisJCQkJQVJSQVlfU0laRShybTY4MF9wZXJpcGhlcmFsc19kZXZpY2VzKSk7CisJcm02ODBfaTJjX2luaXQoKTsKKwlncG1jX29uZW5hbmRfaW5pdChib2FyZF9vbmVuYW5kX2RhdGEpOworCW9tYXAyX2hzbW1jX2luaXQobW1jKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IHJtNjgwX2luaXRfaXJxKHZvaWQpCit7CisJc3RydWN0IG9tYXBfc2RyY19wYXJhbXMgKnNkcmNfcGFyYW1zOworCisJb21hcDJfaW5pdF9jb21tb25faW5mcmFzdHJ1Y3R1cmUoKTsKKwlzZHJjX3BhcmFtcyA9IG5va2lhX2dldF9zZHJhbV90aW1pbmdzKCk7CisJb21hcDJfaW5pdF9jb21tb25fZGV2aWNlcyhzZHJjX3BhcmFtcywgc2RyY19wYXJhbXMpOworCW9tYXBfaW5pdF9pcnEoKTsKK30KKworI2lmZGVmIENPTkZJR19PTUFQX01VWAorc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX211eCBib2FyZF9tdXhbXSBfX2luaXRkYXRhID0geworCXsgLnJlZ19vZmZzZXQgPSBPTUFQX01VWF9URVJNSU5BVE9SIH0sCit9OworI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9tdXNiX2JvYXJkX2RhdGEgcm02ODBfbXVzYl9kYXRhID0geworCS5pbnRlcmZhY2VfdHlwZQk9IE1VU0JfSU5URVJGQUNFX1VMUEksCisJLm1vZGUJCT0gTVVTQl9QRVJJUEhFUkFMLAorCS5wb3dlcgkJPSAxMDAsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgcm02ODBfaW5pdCh2b2lkKQoreworCW9tYXAzX211eF9pbml0KGJvYXJkX211eCwgT01BUF9QQUNLQUdFX0NCQik7CisJb21hcF9zZXJpYWxfaW5pdCgpOworCXVzYl9tdXNiX2luaXQoJnJtNjgwX211c2JfZGF0YSk7CisJcm02ODBfcGVyaXBoZXJhbHNfaW5pdCgpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgcm02ODBfbWFwX2lvKHZvaWQpCit7CisJb21hcDJfc2V0X2dsb2JhbHNfM3h4eCgpOworCW9tYXAzNHh4X21hcF9jb21tb25faW8oKTsKK30KKworTUFDSElORV9TVEFSVChOT0tJQV9STTY4MCwgIk5va2lhIFJNLTY4MCBib2FyZCIpCisJLmJvb3RfcGFyYW1zCT0gMHg4MDAwMDEwMCwKKwkubWFwX2lvCQk9IHJtNjgwX21hcF9pbywKKwkucmVzZXJ2ZQk9IG9tYXBfcmVzZXJ2ZSwKKwkuaW5pdF9pcnEJPSBybTY4MF9pbml0X2lycSwKKwkuaW5pdF9tYWNoaW5lCT0gcm02ODBfaW5pdCwKKwkudGltZXIJCT0gJm9tYXBfdGltZXIsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1yeDUxLXBlcmlwaGVyYWxzLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEtcGVyaXBoZXJhbHMuYwppbmRleCAzZmVjNGQ2Li5lNzVlMjQwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEtcGVyaXBoZXJhbHMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEtcGVyaXBoZXJhbHMuYwpAQCAtMjMsNyArMjMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvX2tleXMuaD4KICNpbmNsdWRlIDxsaW51eC9tbWMvaG9zdC5oPgotI2luY2x1ZGUgPHNvdW5kL3RsdjMyMGFpYzN4Lmg+CiAKICNpbmNsdWRlIDxwbGF0L21jc3BpLmg+CiAjaW5jbHVkZSA8cGxhdC9ib2FyZC5oPgpAQCAtMjkzLDYgKzI5Miw4IEBACiAJeyAucmVnX29mZnNldCA9IE9NQVBfTVVYX1RFUk1JTkFUT1IgfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9tdXhfcGFydGl0aW9uICpwYXJ0aXRpb247CisKIC8qCiAgKiBDdXJyZW50IGZsb3dzIHRvIGVNTUMgd2hlbiBlTU1DIGlzIG9mZiBhbmQgdGhlIGRhdGEgbGluZXMgYXJlIHB1bGxlZCB1cCwKICAqIHNvIHB1bGwgdGhlbSBkb3duLiBOLkIuIHdlIHB1bGwgOCBsaW5lcyBiZWNhdXNlIHdlIGFyZSB1c2luZyA4IGxpbmVzLgpAQCAtMzAwLDkgKzMwMSw5IEBACiBzdGF0aWMgdm9pZCByeDUxX21tYzJfcmVtdXgoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc2xvdCwgaW50IHBvd2VyX29uKQogewogCWlmIChwb3dlcl9vbikKLQkJb21hcF9tdXhfd3JpdGVfYXJyYXkocng1MV9tbWMyX29uX211eCk7CisJCW9tYXBfbXV4X3dyaXRlX2FycmF5KHBhcnRpdGlvbiwgcng1MV9tbWMyX29uX211eCk7CiAJZWxzZQotCQlvbWFwX211eF93cml0ZV9hcnJheShyeDUxX21tYzJfb2ZmX211eCk7CisJCW9tYXBfbXV4X3dyaXRlX2FycmF5KHBhcnRpdGlvbiwgcng1MV9tbWMyX29mZl9tdXgpOwogfQogCiBzdGF0aWMgc3RydWN0IG9tYXAyX2hzbW1jX2luZm8gbW1jW10gX19pbml0ZGF0YSA9IHsKQEAgLTM0Miw2ICszNDMsOCBAQAogCS8qIHRsdjMyMGFpYzN4IGFuYWxvZyBzdXBwbGllcyAqLwogCVJFR1VMQVRPUl9TVVBQTFkoIkFWREQiLCAiMi0wMDE4IiksCiAJUkVHVUxBVE9SX1NVUFBMWSgiRFJWREQiLCAiMi0wMDE4IiksCisJUkVHVUxBVE9SX1NVUFBMWSgiQVZERCIsICIyLTAwMTkiKSwKKwlSRUdVTEFUT1JfU1VQUExZKCJEUlZERCIsICIyLTAwMTkiKSwKIAkvKiB0cGE2MTMwYTIgKi8KIAlSRUdVTEFUT1JfU1VQUExZKCJWZGQiLCAiMi0wMDYwIiksCiAJLyogS2VlcCB2bW1jIGFzIGxhc3QgaXRlbS4gSXQgaXMgbm90IGl0ZXJhdGVkIGZvciBuZXdlciBib2FyZHMgKi8KQEAgLTM1MiwxOSArMzU1LDE2IEBACiAJLyogdGx2MzIwYWljM3ggZGlnaXRhbCBzdXBwbGllcyAqLwogCVJFR1VMQVRPUl9TVVBQTFkoIklPVkREIiwgIjItMDAxOCIpLAogCVJFR1VMQVRPUl9TVVBQTFkoIkRWREQiLCAiMi0wMDE4IiksCisJUkVHVUxBVE9SX1NVUFBMWSgiSU9WREQiLCAiMi0wMDE5IiksCisJUkVHVUxBVE9SX1NVUFBMWSgiRFZERCIsICIyLTAwMTkiKSwKIH07CiAKLSNpZiBkZWZpbmVkKENPTkZJR19GQl9PTUFQMikgfHwgZGVmaW5lZChDT05GSUdfRkJfT01BUDJfTU9EVUxFKQotZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugcng1MV9kaXNwbGF5X2RldmljZTsKLSNlbmRpZgotCiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgcng1MV92YXV4MV9jb25zdW1lcnNbXSA9IHsKLSNpZiBkZWZpbmVkKENPTkZJR19GQl9PTUFQMikgfHwgZGVmaW5lZChDT05GSUdfRkJfT01BUDJfTU9EVUxFKQotCXsKLQkJLnN1cHBseQk9ICJ2ZGRzX3NkaSIsCi0JCS5kZXYJPSAmcng1MV9kaXNwbGF5X2RldmljZS5kZXYsCi0JfSwKLSNlbmRpZgorCVJFR1VMQVRPUl9TVVBQTFkoInZkZHNfc2RpIiwgIm9tYXBkc3MiKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSByeDUxX3ZkYWNfc3VwcGx5W10gPSB7CisJUkVHVUxBVE9SX1NVUFBMWSgidmRkYV9kYWMiLCAib21hcGRzcyIpLAogfTsKIAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHJ4NTFfdmF1eDEgPSB7CkBAIC00ODQsMTQgKzQ4NCwxNyBAQAogCiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgcng1MV92ZGFjID0gewogCS5jb25zdHJhaW50cyA9IHsKKwkJLm5hbWUJCQk9ICJWREFDIiwKIAkJLm1pbl91VgkJCT0gMTgwMDAwMCwKIAkJLm1heF91VgkJCT0gMTgwMDAwMCwKKwkJLmFwcGx5X3VWCQk9IHRydWUsCiAJCS52YWxpZF9tb2Rlc19tYXNrCT0gUkVHVUxBVE9SX01PREVfTk9STUFMCiAJCQkJCXwgUkVHVUxBVE9SX01PREVfU1RBTkRCWSwKLQkJLnZhbGlkX29wc19tYXNrCQk9IFJFR1VMQVRPUl9DSEFOR0VfVk9MVEFHRQotCQkJCQl8IFJFR1VMQVRPUl9DSEFOR0VfTU9ERQorCQkudmFsaWRfb3BzX21hc2sJCT0gUkVHVUxBVE9SX0NIQU5HRV9NT0RFCiAJCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCiAJfSwKKwkubnVtX2NvbnN1bWVyX3N1cHBsaWVzCT0gMSwKKwkuY29uc3VtZXJfc3VwcGxpZXMJPSByeDUxX3ZkYWNfc3VwcGx5LAogfTsKIAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHJ4NTFfdmlvID0gewpAQCAtNzE3LDcgKzcyMCw3IEBACiAJLnZpbwkJCT0gJnJ4NTFfdmlvLAogfTsKIAotc3RhdGljIHN0cnVjdCB0cGE2MTMwYTJfcGxhdGZvcm1fZGF0YSByeDUxX3RwYTYxMzBhMl9kYXRhIF9faW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IHRwYTYxMzBhMl9wbGF0Zm9ybV9kYXRhIHJ4NTFfdHBhNjEzMGEyX2RhdGEgX19pbml0ZGF0YV9vcl9tb2R1bGUgPSB7CiAJLmlkCQkJPSBUUEE2MTMwQTIsCiAJLnBvd2VyX2dwaW8JCT0gOTgsCiB9OwpAQCAtNzQyLDExICs3NDUsMTkgQEAKIAkuZ3Bpb19yZXNldCA9IDYwLAogfTsKIAorc3RhdGljIHN0cnVjdCBhaWMzeF9wZGF0YSByeDUxX2FpYzN4X2RhdGEyID0geworCS5ncGlvX3Jlc2V0ID0gNjAsCit9OworCiBzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgcng1MV9wZXJpcGhlcmFsc19pMmNfYm9hcmRfaW5mb18yW10gPSB7CiAJewogCQlJMkNfQk9BUkRfSU5GTygidGx2MzIwYWljM3giLCAweDE4KSwKIAkJLnBsYXRmb3JtX2RhdGEgPSAmcng1MV9haWMzeF9kYXRhLAogCX0sCisJeworCQlJMkNfQk9BUkRfSU5GTygidGx2MzIwYWljM3giLCAweDE5KSwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmcng1MV9haWMzeF9kYXRhMiwKKwl9LAogI2lmIGRlZmluZWQoQ09ORklHX1NFTlNPUlNfVFNMMjU2MykgfHwgZGVmaW5lZChDT05GSUdfU0VOU09SU19UU0wyNTYzX01PRFVMRSkKIAl7CiAJCUkyQ19CT0FSRF9JTkZPKCJ0c2wyNTYzIiwgMHgyOSksCkBAIC04MTUsMjUgKzgyNiwxNSBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IG9tYXBfb25lbmFuZF9wbGF0Zm9ybV9kYXRhIGJvYXJkX29uZW5hbmRfZGF0YSA9IHsKLQkuY3MJCT0gMCwKLQkuZ3Bpb19pcnEJPSA2NSwKLQkucGFydHMJCT0gb25lbmFuZF9wYXJ0aXRpb25zLAotCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUob25lbmFuZF9wYXJ0aXRpb25zKSwKLQkuZmxhZ3MJCT0gT05FTkFORF9TWU5DX1JFQURXUklURSwKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9vbmVuYW5kX3BsYXRmb3JtX2RhdGEgYm9hcmRfb25lbmFuZF9kYXRhW10gPSB7CisJeworCQkuY3MJCT0gMCwKKwkJLmdwaW9faXJxCT0gNjUsCisJCS5wYXJ0cwkJPSBvbmVuYW5kX3BhcnRpdGlvbnMsCisJCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUob25lbmFuZF9wYXJ0aXRpb25zKSwKKwkJLmZsYWdzCQk9IE9ORU5BTkRfU1lOQ19SRUFEV1JJVEUsCisJfQogfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGJvYXJkX29uZW5hbmRfaW5pdCh2b2lkKQotewotCWdwbWNfb25lbmFuZF9pbml0KCZib2FyZF9vbmVuYW5kX2RhdGEpOwotfQotCi0jZWxzZQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYm9hcmRfb25lbmFuZF9pbml0KHZvaWQpCi17Ci19Ci0KICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfU01DOTFYKSB8fCBkZWZpbmVkKENPTkZJR19TTUM5MVhfTU9EVUxFKQpAQCAtOTE2LDEzICs5MTcsMTcgQEAKIHZvaWQgX19pbml0IHJ4NTFfcGVyaXBoZXJhbHNfaW5pdCh2b2lkKQogewogCXJ4NTFfaTJjX2luaXQoKTsKLQlib2FyZF9vbmVuYW5kX2luaXQoKTsKKwlncG1jX29uZW5hbmRfaW5pdChib2FyZF9vbmVuYW5kX2RhdGEpOwogCWJvYXJkX3NtYzkxeF9pbml0KCk7CiAJcng1MV9hZGRfZ3Bpb19rZXlzKCk7CiAJcng1MV9pbml0X3dsMTI1MSgpOwogCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKHJ4NTFfcGVyaXBoZXJhbHNfc3BpX2JvYXJkX2luZm8sCiAJCQkJQVJSQVlfU0laRShyeDUxX3BlcmlwaGVyYWxzX3NwaV9ib2FyZF9pbmZvKSk7Ci0Jb21hcDJfaHNtbWNfaW5pdChtbWMpOworCisJcGFydGl0aW9uID0gb21hcF9tdXhfZ2V0KCJjb3JlIik7CisJaWYgKHBhcnRpdGlvbikKKwkJb21hcDJfaHNtbWNfaW5pdChtbWMpOworCiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZyeDUxX2NoYXJnZXJfZGV2aWNlKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1yeDUxLXNkcmFtLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEtc2RyYW0uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQzYjJjNS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEtc2RyYW0uYworKysgL2Rldi9udWxsCkBAIC0xLDIyMSArMCwwIEBACi0vKgotICogU0RSQyByZWdpc3RlciB2YWx1ZXMgZm9yIFJYNTEKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24KLSAqCi0gKiBMYXVyaSBMZXVra3VuZW4gPGxhdXJpLmxldWtrdW5lbkBub2tpYS5jb20+Ci0gKgotICogT3JpZ2luYWwgY29kZSBieSBKdWhhIFlyam9sYSA8anVoYS55cmpvbGFAc29saWRib290LmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnIuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotCi0jaW5jbHVkZSA8cGxhdC9pby5oPgotI2luY2x1ZGUgPHBsYXQvY29tbW9uLmg+Ci0jaW5jbHVkZSA8cGxhdC9jbG9jay5oPgotI2luY2x1ZGUgPHBsYXQvc2RyYy5oPgotCi0KLS8qIEluIHBpY29zZWNvbmRzLCBleGNlcHQgZm9yIHRSRUYgKG5zKSwgdFhQLCB0Q0tFLCB0V1RSIChjbGtzKSAqLwotc3RydWN0IHNkcmFtX3RpbWluZ3MgewotCXUzMiBjYXNsOwotCXUzMiB0REFMOwotCXUzMiB0RFBMOwotCXUzMiB0UlJEOwotCXUzMiB0UkNEOwotCXUzMiB0UlA7Ci0JdTMyIHRSQVM7Ci0JdTMyIHRSQzsKLQl1MzIgdFJGQzsKLQl1MzIgdFhTUjsKLQotCXUzMiB0UkVGOyAvKiBpbiBucyAqLwotCi0JdTMyIHRYUDsKLQl1MzIgdENLRTsKLQl1MzIgdFdUUjsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9zZHJjX3BhcmFtcyByeDUxX3NkcmNfcGFyYW1zWzRdOwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNkcmFtX3RpbWluZ3Mgcng1MV90aW1pbmdzW10gPSB7Ci0JewotCQkuY2FzbCA9IDMsCi0JCS50REFMID0gMzMwMDAsCi0JCS50RFBMID0gMTUwMDAsCi0JCS50UlJEID0gMTIwMDAsCi0JCS50UkNEID0gMjI1MDAsCi0JCS50UlAgPSAxODAwMCwKLQkJLnRSQVMgPSA0MjAwMCwKLQkJLnRSQyA9IDY2MDAwLAotCQkudFJGQyA9IDEzODAwMCwKLQkJLnRYU1IgPSAyMDAwMDAsCi0KLQkJLnRSRUYgPSA3ODAwLAotCi0JCS50WFAgPSAyLAotCQkudENLRSA9IDIsCi0JCS50V1RSID0gMgotCX0sCi19OwotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBzZHJjX2dldF9mY2xrX3BlcmlvZChsb25nIHJhdGUpCi17Ci0JLyogSW4gcGljb3NlY29uZHMgKi8KLQlyZXR1cm4gMTAwMDAwMDAwMCAvIHJhdGU7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgc2RyY19wc190b190aWNrcyh1bnNpZ25lZCBpbnQgdGltZV9wcywgbG9uZyByYXRlKQotewotCXVuc2lnbmVkIGxvbmcgdGlja19wczsKLQotCS8qIENhbGN1bGF0ZSBpbiBwaWNvc2VjcyB0byB5aWVsZCBtb3JlIGV4YWN0IHJlc3VsdHMgKi8KLQl0aWNrX3BzID0gc2RyY19nZXRfZmNsa19wZXJpb2QocmF0ZSk7Ci0KLQlyZXR1cm4gKHRpbWVfcHMgKyB0aWNrX3BzIC0gMSkgLyB0aWNrX3BzOwotfQotI3VuZGVmIERFQlVHCi0jaWZkZWYgREVCVUcKLXN0YXRpYyBpbnQgc2V0X3NkcmNfdGltaW5nX3JlZ3ZhbCh1MzIgKnJlZ3ZhbCwgaW50IHN0X2JpdCwgaW50IGVuZF9iaXQsCi0JCQkJaW50IHRpY2tzLCBsb25nIHJhdGUsIGNvbnN0IGNoYXIgKm5hbWUpCi0jZWxzZQotc3RhdGljIGludCBzZXRfc2RyY190aW1pbmdfcmVndmFsKHUzMiAqcmVndmFsLCBpbnQgc3RfYml0LCBpbnQgZW5kX2JpdCwKLQkJCSAgICAgICBpbnQgdGlja3MpCi0jZW5kaWYKLXsKLQlpbnQgbWFzaywgbnJfYml0czsKLQotCW5yX2JpdHMgPSBlbmRfYml0IC0gc3RfYml0ICsgMTsKLQlpZiAodGlja3MgPj0gMSA8PCBucl9iaXRzKQotCQlyZXR1cm4gLTE7Ci0JbWFzayA9ICgxIDw8IG5yX2JpdHMpIC0gMTsKLQkqcmVndmFsICY9IH4obWFzayA8PCBzdF9iaXQpOwotCSpyZWd2YWwgfD0gdGlja3MgPDwgc3RfYml0OwotI2lmZGVmIERFQlVHCi0JcHJpbnRrKEtFUk5fSU5GTyAiU0RSQyAlczogJWkgdGlja3MgJWkgbnNcbiIsIG5hbWUsIHRpY2tzLAotCQkJKHVuc2lnbmVkIGludClzZHJjX2dldF9mY2xrX3BlcmlvZChyYXRlKSAqIHRpY2tzIC8KLQkJCTEwMDApOwotI2VuZGlmCi0KLQlyZXR1cm4gMDsKLX0KLQotI2lmZGVmIERFQlVHCi0jZGVmaW5lIFNEUkNfU0VUX09ORShyZWcsIHN0LCBlbmQsIGZpZWxkLCByYXRlKSBcCi0JaWYgKHNldF9zZHJjX3RpbWluZ19yZWd2YWwoKHJlZyksIChzdCksIChlbmQpLCBcCi0JCQlyeDUxX3RpbWluZ3MtPmZpZWxkLCAocmF0ZSksICNmaWVsZCkgPCAwKSBcCi0JCWVyciA9IC0xOwotI2Vsc2UKLSNkZWZpbmUgU0RSQ19TRVRfT05FKHJlZywgc3QsIGVuZCwgZmllbGQsIHJhdGUpIFwKLQlpZiAoc2V0X3NkcmNfdGltaW5nX3JlZ3ZhbCgocmVnKSwgKHN0KSwgKGVuZCksIFwKLQkJCXJ4NTFfdGltaW5ncy0+ZmllbGQpIDwgMCkgXAotCQllcnIgPSAtMTsKLSNlbmRpZgotCi0jaWZkZWYgREVCVUcKLXN0YXRpYyBpbnQgc2V0X3NkcmNfdGltaW5nX3JlZ3ZhbF9wcyh1MzIgKnJlZ3ZhbCwgaW50IHN0X2JpdCwgaW50IGVuZF9iaXQsCi0JCQkJaW50IHRpbWUsIGxvbmcgcmF0ZSwgY29uc3QgY2hhciAqbmFtZSkKLSNlbHNlCi1zdGF0aWMgaW50IHNldF9zZHJjX3RpbWluZ19yZWd2YWxfcHModTMyICpyZWd2YWwsIGludCBzdF9iaXQsIGludCBlbmRfYml0LAotCQkJCWludCB0aW1lLCBsb25nIHJhdGUpCi0jZW5kaWYKLXsKLQlpbnQgdGlja3MsIHJldDsKLQlyZXQgPSAwOwotCi0JaWYgKHRpbWUgPT0gMCkKLQkJdGlja3MgPSAwOwotCWVsc2UKLQkJdGlja3MgPSBzZHJjX3BzX3RvX3RpY2tzKHRpbWUsIHJhdGUpOwotCi0jaWZkZWYgREVCVUcKLQlyZXQgPSBzZXRfc2RyY190aW1pbmdfcmVndmFsKHJlZ3ZhbCwgc3RfYml0LCBlbmRfYml0LCB0aWNrcywKLQkJCQkgICAgIHJhdGUsIG5hbWUpOwotI2Vsc2UKLQlyZXQgPSBzZXRfc2RyY190aW1pbmdfcmVndmFsKHJlZ3ZhbCwgc3RfYml0LCBlbmRfYml0LCB0aWNrcyk7Ci0jZW5kaWYKLQotCXJldHVybiByZXQ7Ci19Ci0KLSNpZmRlZiBERUJVRwotI2RlZmluZSBTRFJDX1NFVF9PTkVfUFMocmVnLCBzdCwgZW5kLCBmaWVsZCwgcmF0ZSkgXAotCWlmIChzZXRfc2RyY190aW1pbmdfcmVndmFsX3BzKChyZWcpLCAoc3QpLCAoZW5kKSwgXAotCQkJcng1MV90aW1pbmdzLT5maWVsZCwgXAotCQkJKHJhdGUpLCAjZmllbGQpIDwgMCkgXAotCQllcnIgPSAtMTsKLQotI2Vsc2UKLSNkZWZpbmUgU0RSQ19TRVRfT05FX1BTKHJlZywgc3QsIGVuZCwgZmllbGQsIHJhdGUpIFwKLQlpZiAoc2V0X3NkcmNfdGltaW5nX3JlZ3ZhbF9wcygocmVnKSwgKHN0KSwgKGVuZCksIFwKLQkJCXJ4NTFfdGltaW5ncy0+ZmllbGQsIChyYXRlKSkgPCAwKSBcCi0JCWVyciA9IC0xOwotI2VuZGlmCi0KLXN0YXRpYyBpbnQgc2RyY190aW1pbmdzKGludCBpZCwgbG9uZyByYXRlKQotewotCXUzMiB0aWNrc19wZXJfbXM7Ci0JdTMyIHJmciwgbDsKLQl1MzIgYWN0aW1fY3RybGEgPSAwLCBhY3RpbV9jdHJsYiA9IDA7Ci0JdTMyIHJmcl9jdHJsOwotCWludCBlcnIgPSAwOwotCWxvbmcgbDNfcmF0ZSA9IHJhdGUgLyAxMDAwOwotCi0JU0RSQ19TRVRfT05FX1BTKCZhY3RpbV9jdHJsYSwgIDAsICA0LCB0REFMLCBsM19yYXRlKTsKLQlTRFJDX1NFVF9PTkVfUFMoJmFjdGltX2N0cmxhLCAgNiwgIDgsIHREUEwsIGwzX3JhdGUpOwotCVNEUkNfU0VUX09ORV9QUygmYWN0aW1fY3RybGEsICA5LCAxMSwgdFJSRCwgbDNfcmF0ZSk7Ci0JU0RSQ19TRVRfT05FX1BTKCZhY3RpbV9jdHJsYSwgMTIsIDE0LCB0UkNELCBsM19yYXRlKTsKLQlTRFJDX1NFVF9PTkVfUFMoJmFjdGltX2N0cmxhLCAxNSwgMTcsIHRSUCwgbDNfcmF0ZSk7Ci0JU0RSQ19TRVRfT05FX1BTKCZhY3RpbV9jdHJsYSwgMTgsIDIxLCB0UkFTLCBsM19yYXRlKTsKLQlTRFJDX1NFVF9PTkVfUFMoJmFjdGltX2N0cmxhLCAyMiwgMjYsIHRSQywgbDNfcmF0ZSk7Ci0JU0RSQ19TRVRfT05FX1BTKCZhY3RpbV9jdHJsYSwgMjcsIDMxLCB0UkZDLCBsM19yYXRlKTsKLQotCVNEUkNfU0VUX09ORV9QUygmYWN0aW1fY3RybGIsICAwLCAgNywgdFhTUiwgbDNfcmF0ZSk7Ci0KLQlTRFJDX1NFVF9PTkUoJmFjdGltX2N0cmxiLCAgOCwgMTAsIHRYUCwgbDNfcmF0ZSk7Ci0JU0RSQ19TRVRfT05FKCZhY3RpbV9jdHJsYiwgMTIsIDE0LCB0Q0tFLCBsM19yYXRlKTsKLQlTRFJDX1NFVF9PTkUoJmFjdGltX2N0cmxiLCAxNiwgMTcsIHRXVFIsIGwzX3JhdGUpOwotCi0JdGlja3NfcGVyX21zID0gbDNfcmF0ZTsKLQlyZnIgPSByeDUxX3RpbWluZ3NbMF0udFJFRiAqIHRpY2tzX3Blcl9tcyAvIDEwMDAwMDA7Ci0JaWYgKHJmciA+IDY1NTM1ICsgNTApCi0JCXJmciA9IDY1NTM1OwotCWVsc2UKLQkJcmZyIC09IDUwOwotCi0jaWZkZWYgREVCVUcKLQlwcmludGsoS0VSTl9JTkZPICJTRFJDIHRSRUY6ICVpIHRpY2tzXG4iLCByZnIpOwotI2VuZGlmCi0KLQlsID0gcmZyIDw8IDg7Ci0JcmZyX2N0cmwgPSBsIHwgMHgxOyAvKiBhdXRvcmVmcmVzaCwgcmVsb2FkIGNvdW50ZXIgd2l0aCAxeEFSQ1YgKi8KLQotCXJ4NTFfc2RyY19wYXJhbXNbaWRdLnJhdGUgPSByYXRlOwotCXJ4NTFfc2RyY19wYXJhbXNbaWRdLmFjdGltX2N0cmxhID0gYWN0aW1fY3RybGE7Ci0Jcng1MV9zZHJjX3BhcmFtc1tpZF0uYWN0aW1fY3RybGIgPSBhY3RpbV9jdHJsYjsKLQlyeDUxX3NkcmNfcGFyYW1zW2lkXS5yZnJfY3RybCA9IHJmcl9jdHJsOwotCXJ4NTFfc2RyY19wYXJhbXNbaWRdLm1yID0gMHgzMjsKLQotCXJ4NTFfc2RyY19wYXJhbXNbaWQgKyAxXS5yYXRlID0gMDsKLQotCXJldHVybiBlcnI7Ci19Ci0KLXN0cnVjdCBvbWFwX3NkcmNfcGFyYW1zICpyeDUxX2dldF9zZHJhbV90aW1pbmdzKHZvaWQpCi17Ci0JaW50IGVycjsKLQotCWVyciA9IHNkcmNfdGltaW5ncygwLCA0MTUwMDAwMCk7Ci0JZXJyIHw9IHNkcmNfdGltaW5ncygxLCA4MzAwMDAwMCk7Ci0JZXJyIHw9IHNkcmNfdGltaW5ncygyLCAxNjYwMDAwMDApOwotCi0JcmV0dXJuICZyeDUxX3NkcmNfcGFyYW1zWzBdOwotfQotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEtdmlkZW8uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS12aWRlby5jCmluZGV4IDg1NTAzZmUuLmFjZDY3MDAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS12aWRlby5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS12aWRlby5jCkBAIC0xNCw3ICsxNCw2IEBACiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgotCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxwbGF0L2Rpc3BsYXkuaD4KICNpbmNsdWRlIDxwbGF0L3ZyYW0uaD4KQEAgLTQ5LDggKzQ4LDE2IEBACiAJLnBsYXRmb3JtX2Rpc2FibGUJPSByeDUxX2xjZF9kaXNhYmxlLAogfTsKIAorc3RhdGljIHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgIHJ4NTFfdHZfZGV2aWNlID0geworCS5uYW1lCQkJPSAidHYiLAorCS50eXBlCQkJPSBPTUFQX0RJU1BMQVlfVFlQRV9WRU5DLAorCS5kcml2ZXJfbmFtZQkJPSAidmVuYyIsCisJLnBoeS52ZW5jLnR5cGUJICAgICAgICA9IE9NQVBfRFNTX1ZFTkNfVFlQRV9DT01QT1NJVEUsCit9OworCiBzdGF0aWMgc3RydWN0IG9tYXBfZHNzX2RldmljZSAqcng1MV9kc3NfZGV2aWNlc1tdID0gewogCSZyeDUxX2xjZF9kZXZpY2UsCisJJnJ4NTFfdHZfZGV2aWNlLAogfTsKIAogc3RhdGljIHN0cnVjdCBvbWFwX2Rzc19ib2FyZF9pbmZvIHJ4NTFfZHNzX2JvYXJkX2luZm8gPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS5jCmluZGV4IDM2ZjJjZjQuLmY1M2ZjNTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS5jCkBAIC0zMiwxMCArMzIsMTAgQEAKIAogI2luY2x1ZGUgIm11eC5oIgogI2luY2x1ZGUgInBtLmgiCisjaW5jbHVkZSAic2RyYW0tbm9raWEuaCIKIAogI2RlZmluZSBSWDUxX0dQSU9fU0xFRVBfSU5EIDE2MgogCi1zdHJ1Y3Qgb21hcF9zZHJjX3BhcmFtcyAqcng1MV9nZXRfc2RyYW1fdGltaW5ncyh2b2lkKTsKIGV4dGVybiB2b2lkIHJ4NTFfdmlkZW9fbWVtX2luaXQodm9pZCk7CiAKIHN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgZ3Bpb19sZWRzW10gPSB7CkBAIC0xMDUsMTAgKzEwNSwxMCBAQAogCW9tYXBfYm9hcmRfY29uZmlnID0gcng1MV9jb25maWc7CiAJb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUocng1MV9jb25maWcpOwogCW9tYXAzX3BtX2luaXRfY3B1aWRsZShyeDUxX2NwdWlkbGVfcGFyYW1zKTsKLQlzZHJjX3BhcmFtcyA9IHJ4NTFfZ2V0X3NkcmFtX3RpbWluZ3MoKTsKLQlvbWFwMl9pbml0X2NvbW1vbl9odyhzZHJjX3BhcmFtcywgc2RyY19wYXJhbXMpOworCW9tYXAyX2luaXRfY29tbW9uX2luZnJhc3RydWN0dXJlKCk7CisJc2RyY19wYXJhbXMgPSBub2tpYV9nZXRfc2RyYW1fdGltaW5ncygpOworCW9tYXAyX2luaXRfY29tbW9uX2RldmljZXMoc2RyY19wYXJhbXMsIHNkcmNfcGFyYW1zKTsKIAlvbWFwX2luaXRfaXJxKCk7Ci0Jb21hcF9ncGlvX2luaXQoKTsKIH0KIAogZXh0ZXJuIHZvaWQgX19pbml0IHJ4NTFfcGVyaXBoZXJhbHNfaW5pdCh2b2lkKTsKQEAgLTExNyw4ICsxMTcsNiBAQAogc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX211eCBib2FyZF9tdXhbXSBfX2luaXRkYXRhID0gewogCXsgLnJlZ19vZmZzZXQgPSBPTUFQX01VWF9URVJNSU5BVE9SIH0sCiB9OwotI2Vsc2UKLSNkZWZpbmUgYm9hcmRfbXV4CU5VTEwKICNlbmRpZgogCiBzdGF0aWMgc3RydWN0IG9tYXBfbXVzYl9ib2FyZF9kYXRhIG11c2JfYm9hcmRfZGF0YSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtem9vbS1wZXJpcGhlcmFscy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC16b29tLXBlcmlwaGVyYWxzLmMKaW5kZXggOWRiOTIwMy4uM2ZiZDBlZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC16b29tLXBlcmlwaGVyYWxzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC16b29tLXBlcmlwaGVyYWxzLmMKQEAgLTE5Niw3ICsxOTYsNyBAQAogCS5ib2FyZF9yZWZfY2xvY2sgPSAxLAogfTsKIAotc3RhdGljIHN0cnVjdCBvbWFwMl9oc21tY19pbmZvIG1tY1tdIF9faW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IG9tYXAyX2hzbW1jX2luZm8gbW1jW10gPSB7CiAJewogCQkubmFtZQkJPSAiZXh0ZXJuYWwiLAogCQkubW1jCQk9IDEsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXpvb20uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtem9vbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwNDFjNTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXpvb20uYwpAQCAtMCwwICsxLDE1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFRleGFzIEluc3RydW1lbnRzIEluYy4KKyAqIE1pa2tlbCBDaHJpc3RlbnNlbiA8bWxjQHRpLmNvbT4KKyAqIEZlbGlwZSBCYWxiaSA8YmFsYmlAdGkuY29tPgorICoKKyAqIE1vZGlmaWVkIGZyb20gbWFjaC1vbWFwMi9ib2FyZC1sZHAuYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMvdHdsLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKworI2luY2x1ZGUgPHBsYXQvY29tbW9uLmg+CisjaW5jbHVkZSA8cGxhdC9ib2FyZC5oPgorI2luY2x1ZGUgPHBsYXQvdXNiLmg+CisKKyNpbmNsdWRlIDxtYWNoL2JvYXJkLXpvb20uaD4KKworI2luY2x1ZGUgImJvYXJkLWZsYXNoLmgiCisjaW5jbHVkZSAibXV4LmgiCisjaW5jbHVkZSAic2RyYW0tbWljcm9uLW10NDZoMzJtMzJsZi02LmgiCisjaW5jbHVkZSAic2RyYW0taHluaXgtaDhtYngwMHUwbWVyLTBlbS5oIgorCisjZGVmaW5lIFpPT00zX0VIQ0lfUkVTRVRfR1BJTwkJNjQKKworc3RhdGljIHZvaWQgX19pbml0IG9tYXBfem9vbV9pbml0X2lycSh2b2lkKQoreworCW9tYXAyX2luaXRfY29tbW9uX2luZnJhc3RydWN0dXJlKCk7CisJaWYgKG1hY2hpbmVfaXNfb21hcF96b29tMigpKQorCQlvbWFwMl9pbml0X2NvbW1vbl9kZXZpY2VzKG10NDZoMzJtMzJsZjZfc2RyY19wYXJhbXMsCisJCQkJCSAgbXQ0NmgzMm0zMmxmNl9zZHJjX3BhcmFtcyk7CisJZWxzZSBpZiAobWFjaGluZV9pc19vbWFwX3pvb20zKCkpCisJCW9tYXAyX2luaXRfY29tbW9uX2RldmljZXMoaDhtYngwMHUwbWVyMGVtX3NkcmNfcGFyYW1zLAorCQkJCQkgIGg4bWJ4MDB1MG1lcjBlbV9zZHJjX3BhcmFtcyk7CisKKwlvbWFwX2luaXRfaXJxKCk7Cit9CisKKyNpZmRlZiBDT05GSUdfT01BUF9NVVgKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9tdXggYm9hcmRfbXV4W10gX19pbml0ZGF0YSA9IHsKKwkvKiBXTEFOIElSUSAtIEdQSU8gMTYyICovCisJT01BUDNfTVVYKE1DQlNQMV9DTEtYLCBPTUFQX01VWF9NT0RFNCB8IE9NQVBfUElOX0lOUFVUX1BVTExVUCksCisJLyogV0xBTiBQT1dFUiBFTkFCTEUgLSBHUElPIDEwMSAqLworCU9NQVAzX01VWChDQU1fRDIsIE9NQVBfTVVYX01PREU0IHwgT01BUF9QSU5fT1VUUFVUKSwKKwkvKiBXTEFOIFNESU86IE1NQzMgQ01EICovCisJT01BUDNfTVVYKE1DU1BJMV9DUzEsIE9NQVBfTVVYX01PREUzIHwgT01BUF9QSU5fSU5QVVRfUFVMTFVQKSwKKwkvKiBXTEFOIFNESU86IE1NQzMgQ0xLICovCisJT01BUDNfTVVYKEVUS19DTEssIE9NQVBfTVVYX01PREUyIHwgT01BUF9QSU5fSU5QVVRfUFVMTFVQKSwKKwkvKiBXTEFOIFNESU86IE1NQzMgREFUWzAtM10gKi8KKwlPTUFQM19NVVgoRVRLX0QzLCBPTUFQX01VWF9NT0RFMiB8IE9NQVBfUElOX0lOUFVUX1BVTExVUCksCisJT01BUDNfTVVYKEVUS19ENCwgT01BUF9NVVhfTU9ERTIgfCBPTUFQX1BJTl9JTlBVVF9QVUxMVVApLAorCU9NQVAzX01VWChFVEtfRDUsIE9NQVBfTVVYX01PREUyIHwgT01BUF9QSU5fSU5QVVRfUFVMTFVQKSwKKwlPTUFQM19NVVgoRVRLX0Q2LCBPTUFQX01VWF9NT0RFMiB8IE9NQVBfUElOX0lOUFVUX1BVTExVUCksCisJeyAucmVnX29mZnNldCA9IE9NQVBfTVVYX1RFUk1JTkFUT1IgfSwKK307CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHpvb21fbmFuZF9wYXJ0aXRpb25zW10gPSB7CisJLyogQWxsIHRoZSBwYXJ0aXRpb24gc2l6ZXMgYXJlIGxpc3RlZCBpbiB0ZXJtcyBvZiBOQU5EIGJsb2NrIHNpemUgKi8KKwl7CisJCS5uYW1lCQk9ICJYLUxvYWRlci1OQU5EIiwKKwkJLm9mZnNldAkJPSAwLAorCQkuc2l6ZQkJPSA0ICogKDY0ICogMjA0OCksCS8qIDUxMktCLCAweDgwMDAwICovCisJCS5tYXNrX2ZsYWdzCT0gTVREX1dSSVRFQUJMRSwJLyogZm9yY2UgcmVhZC1vbmx5ICovCisJfSwKKwl7CisJCS5uYW1lCQk9ICJVLUJvb3QtTkFORCIsCisJCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAkvKiBPZmZzZXQgPSAweDgwMDAwICovCisJCS5zaXplCQk9IDEwICogKDY0ICogMjA0OCksCS8qIDEuMjVNQiwgMHgxNDAwMDAgKi8KKwkJLm1hc2tfZmxhZ3MJPSBNVERfV1JJVEVBQkxFLAkvKiBmb3JjZSByZWFkLW9ubHkgKi8KKwl9LAorCXsKKwkJLm5hbWUJCT0gIkJvb3QgRW52LU5BTkQiLAorCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwgICAvKiBPZmZzZXQgPSAweDFjMDAwMCAqLworCQkuc2l6ZQkJPSAyICogKDY0ICogMjA0OCksCS8qIDI1NktCLCAweDQwMDAwICovCisJfSwKKwl7CisJCS5uYW1lCQk9ICJLZXJuZWwtTkFORCIsCisJCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAkvKiBPZmZzZXQgPSAweDAyMDAwMDAqLworCQkuc2l6ZQkJPSAyNDAgKiAoNjQgKiAyMDQ4KSwJLyogMzBNLCAweDFFMDAwMDAgKi8KKwl9LAorCXsKKwkJLm5hbWUJCT0gInN5c3RlbSIsCisJCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAkvKiBPZmZzZXQgPSAweDIwMDAwMDAgKi8KKwkJLnNpemUJCT0gMzMyOCAqICg2NCAqIDIwNDgpLAkvKiA0MTZNLCAweDFBMDAwMDAwICovCisJfSwKKwl7CisJCS5uYW1lCQk9ICJ1c2VyZGF0YSIsCisJCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAkvKiBPZmZzZXQgPSAweDFDMDAwMDAwKi8KKwkJLnNpemUJCT0gMjU2ICogKDY0ICogMjA0OCksCS8qIDMyTSwgMHgyMDAwMDAwICovCisJfSwKKwl7CisJCS5uYW1lCQk9ICJjYWNoZSIsCisJCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAkvKiBPZmZzZXQgPSAweDFFMDAwMDAwKi8KKwkJLnNpemUJCT0gMjU2ICogKDY0ICogMjA0OCksCS8qIDMyTSwgMHgyMDAwMDAwICovCisJfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZWhjaV9oY2Rfb21hcF9wbGF0Zm9ybV9kYXRhIGVoY2lfcGRhdGEgX19pbml0Y29uc3QgPSB7CisJLnBvcnRfbW9kZVswXQkJPSBFSENJX0hDRF9PTUFQX01PREVfVU5LTk9XTiwKKwkucG9ydF9tb2RlWzFdCQk9IEVIQ0lfSENEX09NQVBfTU9ERV9QSFksCisJLnBvcnRfbW9kZVsyXQkJPSBFSENJX0hDRF9PTUFQX01PREVfVU5LTk9XTiwKKwkucGh5X3Jlc2V0CQk9IHRydWUsCisJLnJlc2V0X2dwaW9fcG9ydFswXQk9IC1FSU5WQUwsCisJLnJlc2V0X2dwaW9fcG9ydFsxXQk9IFpPT00zX0VIQ0lfUkVTRVRfR1BJTywKKwkucmVzZXRfZ3Bpb19wb3J0WzJdCT0gLUVJTlZBTCwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBvbWFwX3pvb21faW5pdCh2b2lkKQoreworCWlmIChtYWNoaW5lX2lzX29tYXBfem9vbTIoKSkgeworCQlvbWFwM19tdXhfaW5pdChib2FyZF9tdXgsIE9NQVBfUEFDS0FHRV9DQkIpOworCX0gZWxzZSBpZiAobWFjaGluZV9pc19vbWFwX3pvb20zKCkpIHsKKwkJb21hcDNfbXV4X2luaXQoYm9hcmRfbXV4LCBPTUFQX1BBQ0tBR0VfQ0JQKTsKKwkJb21hcF9tdXhfaW5pdF9ncGlvKFpPT00zX0VIQ0lfUkVTRVRfR1BJTywgT01BUF9QSU5fT1VUUFVUKTsKKwkJdXNiX2VoY2lfaW5pdCgmZWhjaV9wZGF0YSk7CisJfQorCisJYm9hcmRfbmFuZF9pbml0KHpvb21fbmFuZF9wYXJ0aXRpb25zLAorCQkJQVJSQVlfU0laRSh6b29tX25hbmRfcGFydGl0aW9ucyksIFpPT01fTkFORF9DUyk7CisJem9vbV9kZWJ1Z2JvYXJkX2luaXQoKTsKKwl6b29tX3BlcmlwaGVyYWxzX2luaXQoKTsKK30KKworTUFDSElORV9TVEFSVChPTUFQX1pPT00yLCAiT01BUCBab29tMiBib2FyZCIpCisJLmJvb3RfcGFyYW1zCT0gMHg4MDAwMDEwMCwKKwkubWFwX2lvCQk9IG9tYXAzX21hcF9pbywKKwkucmVzZXJ2ZQk9IG9tYXBfcmVzZXJ2ZSwKKwkuaW5pdF9pcnEJPSBvbWFwX3pvb21faW5pdF9pcnEsCisJLmluaXRfbWFjaGluZQk9IG9tYXBfem9vbV9pbml0LAorCS50aW1lcgkJPSAmb21hcF90aW1lciwKK01BQ0hJTkVfRU5ECisKK01BQ0hJTkVfU1RBUlQoT01BUF9aT09NMywgIk9NQVAgWm9vbTMgYm9hcmQiKQorCS5ib290X3BhcmFtcwk9IDB4ODAwMDAxMDAsCisJLm1hcF9pbwkJPSBvbWFwM19tYXBfaW8sCisJLnJlc2VydmUJPSBvbWFwX3Jlc2VydmUsCisJLmluaXRfaXJxCT0gb21hcF96b29tX2luaXRfaXJxLAorCS5pbml0X21hY2hpbmUJPSBvbWFwX3pvb21faW5pdCwKKwkudGltZXIJCT0gJm9tYXBfdGltZXIsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC16b29tMi5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC16b29tMi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTkyYTlmLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtem9vbTIuYworKysgL2Rldi9udWxsCkBAIC0xLDExNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IFRleGFzIEluc3RydW1lbnRzIEluYy4KLSAqIE1pa2tlbCBDaHJpc3RlbnNlbiA8bWxjQHRpLmNvbT4KLSAqCi0gKiBNb2RpZmllZCBmcm9tIG1hY2gtb21hcDIvYm9hcmQtbGRwLmMKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjL3R3bC5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0KLSNpbmNsdWRlIDxwbGF0L2NvbW1vbi5oPgotI2luY2x1ZGUgPHBsYXQvYm9hcmQuaD4KLQotI2luY2x1ZGUgPG1hY2gvYm9hcmQtem9vbS5oPgotCi0jaW5jbHVkZSAiYm9hcmQtZmxhc2guaCIKLSNpbmNsdWRlICJtdXguaCIKLSNpbmNsdWRlICJzZHJhbS1taWNyb24tbXQ0NmgzMm0zMmxmLTYuaCIKLQotc3RhdGljIHZvaWQgX19pbml0IG9tYXBfem9vbTJfaW5pdF9pcnEodm9pZCkKLXsKLQlvbWFwMl9pbml0X2NvbW1vbl9odyhtdDQ2aDMybTMybGY2X3NkcmNfcGFyYW1zLAotCQkJCSBtdDQ2aDMybTMybGY2X3NkcmNfcGFyYW1zKTsKLQlvbWFwX2luaXRfaXJxKCk7Ci0Jb21hcF9ncGlvX2luaXQoKTsKLX0KLQotI2lmZGVmIENPTkZJR19PTUFQX01VWAotc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX211eCBib2FyZF9tdXhbXSBfX2luaXRkYXRhID0gewotCS8qIFdMQU4gSVJRIC0gR1BJTyAxNjIgKi8KLQlPTUFQM19NVVgoTUNCU1AxX0NMS1gsIE9NQVBfTVVYX01PREU0IHwgT01BUF9QSU5fSU5QVVRfUFVMTFVQKSwKLQkvKiBXTEFOIFBPV0VSIEVOQUJMRSAtIEdQSU8gMTAxICovCi0JT01BUDNfTVVYKENBTV9EMiwgT01BUF9NVVhfTU9ERTQgfCBPTUFQX1BJTl9PVVRQVVQpLAotCS8qIFdMQU4gU0RJTzogTU1DMyBDTUQgKi8KLQlPTUFQM19NVVgoTUNTUEkxX0NTMSwgT01BUF9NVVhfTU9ERTMgfCBPTUFQX1BJTl9JTlBVVF9QVUxMVVApLAotCS8qIFdMQU4gU0RJTzogTU1DMyBDTEsgKi8KLQlPTUFQM19NVVgoRVRLX0NMSywgT01BUF9NVVhfTU9ERTIgfCBPTUFQX1BJTl9JTlBVVF9QVUxMVVApLAotCS8qIFdMQU4gU0RJTzogTU1DMyBEQVRbMC0zXSAqLwotCU9NQVAzX01VWChFVEtfRDMsIE9NQVBfTVVYX01PREUyIHwgT01BUF9QSU5fSU5QVVRfUFVMTFVQKSwKLQlPTUFQM19NVVgoRVRLX0Q0LCBPTUFQX01VWF9NT0RFMiB8IE9NQVBfUElOX0lOUFVUX1BVTExVUCksCi0JT01BUDNfTVVYKEVUS19ENSwgT01BUF9NVVhfTU9ERTIgfCBPTUFQX1BJTl9JTlBVVF9QVUxMVVApLAotCU9NQVAzX01VWChFVEtfRDYsIE9NQVBfTVVYX01PREUyIHwgT01BUF9QSU5fSU5QVVRfUFVMTFVQKSwKLQl7IC5yZWdfb2Zmc2V0ID0gT01BUF9NVVhfVEVSTUlOQVRPUiB9LAotfTsKLSNlbHNlCi0jZGVmaW5lIGJvYXJkX211eAlOVUxMCi0jZW5kaWYKLQotc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHpvb21fbmFuZF9wYXJ0aXRpb25zW10gPSB7Ci0JLyogQWxsIHRoZSBwYXJ0aXRpb24gc2l6ZXMgYXJlIGxpc3RlZCBpbiB0ZXJtcyBvZiBOQU5EIGJsb2NrIHNpemUgKi8KLQl7Ci0JCS5uYW1lCQk9ICJYLUxvYWRlci1OQU5EIiwKLQkJLm9mZnNldAkJPSAwLAotCQkuc2l6ZQkJPSA0ICogKDY0ICogMjA0OCksCS8qIDUxMktCLCAweDgwMDAwICovCi0JCS5tYXNrX2ZsYWdzCT0gTVREX1dSSVRFQUJMRSwJLyogZm9yY2UgcmVhZC1vbmx5ICovCi0JfSwKLQl7Ci0JCS5uYW1lCQk9ICJVLUJvb3QtTkFORCIsCi0JCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAkvKiBPZmZzZXQgPSAweDgwMDAwICovCi0JCS5zaXplCQk9IDEwICogKDY0ICogMjA0OCksCS8qIDEuMjVNQiwgMHgxNDAwMDAgKi8KLQkJLm1hc2tfZmxhZ3MJPSBNVERfV1JJVEVBQkxFLAkvKiBmb3JjZSByZWFkLW9ubHkgKi8KLQl9LAotCXsKLQkJLm5hbWUJCT0gIkJvb3QgRW52LU5BTkQiLAotCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwgICAvKiBPZmZzZXQgPSAweDFjMDAwMCAqLwotCQkuc2l6ZQkJPSAyICogKDY0ICogMjA0OCksCS8qIDI1NktCLCAweDQwMDAwICovCi0JfSwKLQl7Ci0JCS5uYW1lCQk9ICJLZXJuZWwtTkFORCIsCi0JCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAkvKiBPZmZzZXQgPSAweDAyMDAwMDAqLwotCQkuc2l6ZQkJPSAyNDAgKiAoNjQgKiAyMDQ4KSwJLyogMzBNLCAweDFFMDAwMDAgKi8KLQl9LAotCXsKLQkJLm5hbWUJCT0gInN5c3RlbSIsCi0JCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAkvKiBPZmZzZXQgPSAweDIwMDAwMDAgKi8KLQkJLnNpemUJCT0gMzMyOCAqICg2NCAqIDIwNDgpLAkvKiA0MTZNLCAweDFBMDAwMDAwICovCi0JfSwKLQl7Ci0JCS5uYW1lCQk9ICJ1c2VyZGF0YSIsCi0JCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAkvKiBPZmZzZXQgPSAweDFDMDAwMDAwKi8KLQkJLnNpemUJCT0gMjU2ICogKDY0ICogMjA0OCksCS8qIDMyTSwgMHgyMDAwMDAwICovCi0JfSwKLQl7Ci0JCS5uYW1lCQk9ICJjYWNoZSIsCi0JCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAkvKiBPZmZzZXQgPSAweDFFMDAwMDAwKi8KLQkJLnNpemUJCT0gMjU2ICogKDY0ICogMjA0OCksCS8qIDMyTSwgMHgyMDAwMDAwICovCi0JfSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBvbWFwX3pvb20yX2luaXQodm9pZCkKLXsKLQlvbWFwM19tdXhfaW5pdChib2FyZF9tdXgsIE9NQVBfUEFDS0FHRV9DQkIpOwotCXpvb21fcGVyaXBoZXJhbHNfaW5pdCgpOwotCWJvYXJkX25hbmRfaW5pdCh6b29tX25hbmRfcGFydGl0aW9ucywKLQkJCUFSUkFZX1NJWkUoem9vbV9uYW5kX3BhcnRpdGlvbnMpLCBaT09NX05BTkRfQ1MpOwotCXpvb21fZGVidWdib2FyZF9pbml0KCk7Ci19Ci0KLU1BQ0hJTkVfU1RBUlQoT01BUF9aT09NMiwgIk9NQVAgWm9vbTIgYm9hcmQiKQotCS5ib290X3BhcmFtcwk9IDB4ODAwMDAxMDAsCi0JLm1hcF9pbwkJPSBvbWFwM19tYXBfaW8sCi0JLnJlc2VydmUJPSBvbWFwX3Jlc2VydmUsCi0JLmluaXRfaXJxCT0gb21hcF96b29tMl9pbml0X2lycSwKLQkuaW5pdF9tYWNoaW5lCT0gb21hcF96b29tMl9pbml0LAotCS50aW1lcgkJPSAmb21hcF90aW1lciwKLU1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXpvb20zLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXpvb20zLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhZGRlMTIuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC16b29tMy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTMzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGV4YXMgSW5zdHJ1bWVudHMgSW5jLgotICoKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLQotI2luY2x1ZGUgPG1hY2gvYm9hcmQtem9vbS5oPgotCi0jaW5jbHVkZSA8cGxhdC9jb21tb24uaD4KLSNpbmNsdWRlIDxwbGF0L2JvYXJkLmg+Ci0jaW5jbHVkZSA8cGxhdC91c2IuaD4KLQotI2luY2x1ZGUgImJvYXJkLWZsYXNoLmgiCi0jaW5jbHVkZSAibXV4LmgiCi0jaW5jbHVkZSAic2RyYW0taHluaXgtaDhtYngwMHUwbWVyLTBlbS5oIgotCi1zdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2tlcm5lbCB6b29tX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7Ci19OwotCi1zdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gem9vbV9uYW5kX3BhcnRpdGlvbnNbXSA9IHsKLQkvKiBBbGwgdGhlIHBhcnRpdGlvbiBzaXplcyBhcmUgbGlzdGVkIGluIHRlcm1zIG9mIE5BTkQgYmxvY2sgc2l6ZSAqLwotCXsKLQkJLm5hbWUJCT0gIlgtTG9hZGVyLU5BTkQiLAotCQkub2Zmc2V0CQk9IDAsCi0JCS5zaXplCQk9IDQgKiAoNjQgKiAyMDQ4KSwJLyogNTEyS0IsIDB4ODAwMDAgKi8KLQkJLm1hc2tfZmxhZ3MJPSBNVERfV1JJVEVBQkxFLAkvKiBmb3JjZSByZWFkLW9ubHkgKi8KLQl9LAotCXsKLQkJLm5hbWUJCT0gIlUtQm9vdC1OQU5EIiwKLQkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCS8qIE9mZnNldCA9IDB4ODAwMDAgKi8KLQkJLnNpemUJCT0gMTAgKiAoNjQgKiAyMDQ4KSwJLyogMS4yNU1CLCAweDE0MDAwMCAqLwotCQkubWFza19mbGFncwk9IE1URF9XUklURUFCTEUsCS8qIGZvcmNlIHJlYWQtb25seSAqLwotCX0sCi0JewotCQkubmFtZQkJPSAiQm9vdCBFbnYtTkFORCIsCi0JCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELCAgIC8qIE9mZnNldCA9IDB4MWMwMDAwICovCi0JCS5zaXplCQk9IDIgKiAoNjQgKiAyMDQ4KSwJLyogMjU2S0IsIDB4NDAwMDAgKi8KLQl9LAotCXsKLQkJLm5hbWUJCT0gIktlcm5lbC1OQU5EIiwKLQkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCS8qIE9mZnNldCA9IDB4MDIwMDAwMCovCi0JCS5zaXplCQk9IDI0MCAqICg2NCAqIDIwNDgpLAkvKiAzME0sIDB4MUUwMDAwMCAqLwotCX0sCi0JewotCQkubmFtZQkJPSAic3lzdGVtIiwKLQkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCS8qIE9mZnNldCA9IDB4MjAwMDAwMCAqLwotCQkuc2l6ZQkJPSAzMzI4ICogKDY0ICogMjA0OCksCS8qIDQxNk0sIDB4MUEwMDAwMDAgKi8KLQl9LAotCXsKLQkJLm5hbWUJCT0gInVzZXJkYXRhIiwKLQkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCS8qIE9mZnNldCA9IDB4MUMwMDAwMDAqLwotCQkuc2l6ZQkJPSAyNTYgKiAoNjQgKiAyMDQ4KSwJLyogMzJNLCAweDIwMDAwMDAgKi8KLQl9LAotCXsKLQkJLm5hbWUJCT0gImNhY2hlIiwKLQkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCS8qIE9mZnNldCA9IDB4MUUwMDAwMDAqLwotCQkuc2l6ZQkJPSAyNTYgKiAoNjQgKiAyMDQ4KSwJLyogMzJNLCAweDIwMDAwMDAgKi8KLQl9LAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IG9tYXBfem9vbV9pbml0X2lycSh2b2lkKQotewotCW9tYXBfYm9hcmRfY29uZmlnID0gem9vbV9jb25maWc7Ci0Jb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUoem9vbV9jb25maWcpOwotCW9tYXAyX2luaXRfY29tbW9uX2h3KGg4bWJ4MDB1MG1lcjBlbV9zZHJjX3BhcmFtcywKLQkJCWg4bWJ4MDB1MG1lcjBlbV9zZHJjX3BhcmFtcyk7Ci0Jb21hcF9pbml0X2lycSgpOwotCW9tYXBfZ3Bpb19pbml0KCk7Ci19Ci0KLSNpZmRlZiBDT05GSUdfT01BUF9NVVgKLXN0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9tdXggYm9hcmRfbXV4W10gX19pbml0ZGF0YSA9IHsKLQkvKiBXTEFOIElSUSAtIEdQSU8gMTYyICovCi0JT01BUDNfTVVYKE1DQlNQMV9DTEtYLCBPTUFQX01VWF9NT0RFNCB8IE9NQVBfUElOX0lOUFVUX1BVTExVUCksCi0JLyogV0xBTiBQT1dFUiBFTkFCTEUgLSBHUElPIDEwMSAqLwotCU9NQVAzX01VWChDQU1fRDIsIE9NQVBfTVVYX01PREU0IHwgT01BUF9QSU5fT1VUUFVUKSwKLQkvKiBXTEFOIFNESU86IE1NQzMgQ01EICovCi0JT01BUDNfTVVYKE1DU1BJMV9DUzEsIE9NQVBfTVVYX01PREUzIHwgT01BUF9QSU5fSU5QVVRfUFVMTFVQKSwKLQkvKiBXTEFOIFNESU86IE1NQzMgQ0xLICovCi0JT01BUDNfTVVYKEVUS19DTEssIE9NQVBfTVVYX01PREUyIHwgT01BUF9QSU5fSU5QVVRfUFVMTFVQKSwKLQkvKiBXTEFOIFNESU86IE1NQzMgREFUWzAtM10gKi8KLQlPTUFQM19NVVgoRVRLX0QzLCBPTUFQX01VWF9NT0RFMiB8IE9NQVBfUElOX0lOUFVUX1BVTExVUCksCi0JT01BUDNfTVVYKEVUS19ENCwgT01BUF9NVVhfTU9ERTIgfCBPTUFQX1BJTl9JTlBVVF9QVUxMVVApLAotCU9NQVAzX01VWChFVEtfRDUsIE9NQVBfTVVYX01PREUyIHwgT01BUF9QSU5fSU5QVVRfUFVMTFVQKSwKLQlPTUFQM19NVVgoRVRLX0Q2LCBPTUFQX01VWF9NT0RFMiB8IE9NQVBfUElOX0lOUFVUX1BVTExVUCksCi0JeyAucmVnX29mZnNldCA9IE9NQVBfTVVYX1RFUk1JTkFUT1IgfSwKLX07Ci0jZWxzZQotI2RlZmluZSBib2FyZF9tdXgJTlVMTAotI2VuZGlmCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZWhjaV9oY2Rfb21hcF9wbGF0Zm9ybV9kYXRhIGVoY2lfcGRhdGEgX19pbml0Y29uc3QgPSB7Ci0JLnBvcnRfbW9kZVswXQkJPSBFSENJX0hDRF9PTUFQX01PREVfVU5LTk9XTiwKLQkucG9ydF9tb2RlWzFdCQk9IEVIQ0lfSENEX09NQVBfTU9ERV9QSFksCi0JLnBvcnRfbW9kZVsyXQkJPSBFSENJX0hDRF9PTUFQX01PREVfVU5LTk9XTiwKLQkucGh5X3Jlc2V0CQk9IHRydWUsCi0JLnJlc2V0X2dwaW9fcG9ydFswXQk9IC1FSU5WQUwsCi0JLnJlc2V0X2dwaW9fcG9ydFsxXQk9IDY0LAotCS5yZXNldF9ncGlvX3BvcnRbMl0JPSAtRUlOVkFMLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IG9tYXBfem9vbV9pbml0KHZvaWQpCi17Ci0Jb21hcDNfbXV4X2luaXQoYm9hcmRfbXV4LCBPTUFQX1BBQ0tBR0VfQ0JQKTsKLQl6b29tX3BlcmlwaGVyYWxzX2luaXQoKTsKLQlib2FyZF9uYW5kX2luaXQoem9vbV9uYW5kX3BhcnRpdGlvbnMsCi0JCQkgQVJSQVlfU0laRSh6b29tX25hbmRfcGFydGl0aW9ucyksIFpPT01fTkFORF9DUyk7Ci0Jem9vbV9kZWJ1Z2JvYXJkX2luaXQoKTsKLQotCW9tYXBfbXV4X2luaXRfZ3Bpbyg2NCwgT01BUF9QSU5fT1VUUFVUKTsKLQl1c2JfZWhjaV9pbml0KCZlaGNpX3BkYXRhKTsKLX0KLQotTUFDSElORV9TVEFSVChPTUFQX1pPT00zLCAiT01BUCBab29tMyBib2FyZCIpCi0JLmJvb3RfcGFyYW1zCT0gMHg4MDAwMDEwMCwKLQkubWFwX2lvCQk9IG9tYXAzX21hcF9pbywKLQkucmVzZXJ2ZQk9IG9tYXBfcmVzZXJ2ZSwKLQkuaW5pdF9pcnEJPSBvbWFwX3pvb21faW5pdF9pcnEsCi0JLmluaXRfbWFjaGluZQk9IG9tYXBfem9vbV9pbml0LAotCS50aW1lcgkJPSAmb21hcF90aW1lciwKLU1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3QyeHh4X2FwbGwuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfYXBsbC5jCmluZGV4IDY2ZTAxYWMuLmY1MWNmZmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfYXBsbC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfYXBsbC5jCkBAIC0yNiw3ICsyNiw3IEBACiAKICNpbmNsdWRlICJjbG9jay5oIgogI2luY2x1ZGUgImNsb2NrMnh4eC5oIgotI2luY2x1ZGUgImNtLmgiCisjaW5jbHVkZSAiY20yeHh4XzN4eHguaCIKICNpbmNsdWRlICJjbS1yZWdiaXRzLTI0eHguaCIKIAogLyogQ01fQ0xLRU5fUExMLkVOX3s1NCw5Nn1NX1BMTCBvcHRpb25zICgyNFhYKSAqLwpAQCAtNDksMTQgKzQ5LDE0IEBACiAKIAlhcGxsX21hc2sgPSBFTl9BUExMX0xPQ0tFRCA8PCBjbGstPmVuYWJsZV9iaXQ7CiAKLQljdmFsID0gY21fcmVhZF9tb2RfcmVnKFBMTF9NT0QsIENNX0NMS0VOKTsKKwljdmFsID0gb21hcDJfY21fcmVhZF9tb2RfcmVnKFBMTF9NT0QsIENNX0NMS0VOKTsKIAogCWlmICgoY3ZhbCAmIGFwbGxfbWFzaykgPT0gYXBsbF9tYXNrKQogCQlyZXR1cm4gMDsgICAvKiBhcGxsIGFscmVhZHkgZW5hYmxlZCAqLwogCiAJY3ZhbCAmPSB+YXBsbF9tYXNrOwogCWN2YWwgfD0gYXBsbF9tYXNrOwotCWNtX3dyaXRlX21vZF9yZWcoY3ZhbCwgUExMX01PRCwgQ01fQ0xLRU4pOworCW9tYXAyX2NtX3dyaXRlX21vZF9yZWcoY3ZhbCwgUExMX01PRCwgQ01fQ0xLRU4pOwogCiAJb21hcDJfY21fd2FpdF9pZGxlc3QoY21faWRsZXN0X3BsbCwgc3RhdHVzX21hc2ssCiAJCQkgICAgIE9NQVAyNFhYX0NNX0lETEVTVF9WQUwsIGNsay0+bmFtZSk7CkBAIC04Myw5ICs4Myw5IEBACiB7CiAJdTMyIGN2YWw7CiAKLQljdmFsID0gY21fcmVhZF9tb2RfcmVnKFBMTF9NT0QsIENNX0NMS0VOKTsKKwljdmFsID0gb21hcDJfY21fcmVhZF9tb2RfcmVnKFBMTF9NT0QsIENNX0NMS0VOKTsKIAljdmFsICY9IH4oRU5fQVBMTF9MT0NLRUQgPDwgY2xrLT5lbmFibGVfYml0KTsKLQljbV93cml0ZV9tb2RfcmVnKGN2YWwsIFBMTF9NT0QsIENNX0NMS0VOKTsKKwlvbWFwMl9jbV93cml0ZV9tb2RfcmVnKGN2YWwsIFBMTF9NT0QsIENNX0NMS0VOKTsKIH0KIAogLyogUHVibGljIGRhdGEgKi8KQEAgLTEwNiw3ICsxMDYsNyBAQAogewogCXUzMiBhcGxscywgc3JhdGUgPSAwOwogCi0JYXBsbHMgPSBjbV9yZWFkX21vZF9yZWcoUExMX01PRCwgQ01fQ0xLU0VMMSk7CisJYXBsbHMgPSBvbWFwMl9jbV9yZWFkX21vZF9yZWcoUExMX01PRCwgQ01fQ0xLU0VMMSk7CiAJYXBsbHMgJj0gT01BUDI0WFhfQVBMTFNfQ0xLSU5fTUFTSzsKIAlhcGxscyA+Pj0gT01BUDI0WFhfQVBMTFNfQ0xLSU5fU0hJRlQ7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfZHBsbGNvcmUuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfZHBsbGNvcmUuYwppbmRleCAwMTkwNDg0My4uNGFlNDM5MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0Mnh4eF9kcGxsY29yZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfZHBsbGNvcmUuYwpAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUgImNsb2NrLmgiCiAjaW5jbHVkZSAiY2xvY2syeHh4LmgiCiAjaW5jbHVkZSAib3BwMnh4eC5oIgotI2luY2x1ZGUgImNtLmgiCisjaW5jbHVkZSAiY20yeHh4XzN4eHguaCIKICNpbmNsdWRlICJjbS1yZWdiaXRzLTI0eHguaCIKIAogLyogI2RlZmluZSBET1dOX1ZBUklBQkxFX0RQTEwgMSAqLwkJLyogRXhwZXJpbWVudGFsICovCkBAIC01NCw3ICs1NCw3IEBACiAKIAljb3JlX2NsayA9IG9tYXAyX2dldF9kcGxsX3JhdGUoY2xrKTsKIAotCXYgPSBjbV9yZWFkX21vZF9yZWcoUExMX01PRCwgQ01fQ0xLU0VMMik7CisJdiA9IG9tYXAyX2NtX3JlYWRfbW9kX3JlZyhQTExfTU9ELCBDTV9DTEtTRUwyKTsKIAl2ICY9IE9NQVAyNFhYX0NPUkVfQ0xLX1NSQ19NQVNLOwogCiAJaWYgKHYgPT0gQ09SRV9DTEtfU1JDXzMySykKQEAgLTczLDcgKzczLDcgQEAKIHsKIAl1MzIgaGlnaCwgbG93LCBjb3JlX2Nsa19zcmM7CiAKLQljb3JlX2Nsa19zcmMgPSBjbV9yZWFkX21vZF9yZWcoUExMX01PRCwgQ01fQ0xLU0VMMik7CisJY29yZV9jbGtfc3JjID0gb21hcDJfY21fcmVhZF9tb2RfcmVnKFBMTF9NT0QsIENNX0NMS1NFTDIpOwogCWNvcmVfY2xrX3NyYyAmPSBPTUFQMjRYWF9DT1JFX0NMS19TUkNfTUFTSzsKIAogCWlmIChjb3JlX2Nsa19zcmMgPT0gQ09SRV9DTEtfU1JDX0RQTEwpIHsJLyogRFBMTCBjbG9ja291dCAqLwpAQCAtMTExLDcgKzExMSw3IEBACiAJY29uc3Qgc3RydWN0IGRwbGxfZGF0YSAqZGQ7CiAKIAljdXJfcmF0ZSA9IG9tYXAyeHh4X2Nsa19nZXRfY29yZV9yYXRlKGRjbGspOwotCW11bHQgPSBjbV9yZWFkX21vZF9yZWcoUExMX01PRCwgQ01fQ0xLU0VMMik7CisJbXVsdCA9IG9tYXAyX2NtX3JlYWRfbW9kX3JlZyhQTExfTU9ELCBDTV9DTEtTRUwyKTsKIAltdWx0ICY9IE9NQVAyNFhYX0NPUkVfQ0xLX1NSQ19NQVNLOwogCiAJaWYgKChyYXRlID09IChjdXJfcmF0ZSAvIDIpKSAmJiAobXVsdCA9PSAyKSkgewpAQCAtMTM2LDcgKzEzNiw3IEBACiAJCXRtcHNldC5jbV9jbGtzZWwxX3BsbCAmPSB+KGRkLT5tdWx0X21hc2sgfAogCQkJCQkgICBkZC0+ZGl2MV9tYXNrKTsKIAkJZGl2ID0gKChjdXJyX3ByY21fc2V0LT54dGFsX3NwZWVkIC8gMTAwMDAwMCkgLSAxKTsKLQkJdG1wc2V0LmNtX2Nsa3NlbDJfcGxsID0gY21fcmVhZF9tb2RfcmVnKFBMTF9NT0QsIENNX0NMS1NFTDIpOworCQl0bXBzZXQuY21fY2xrc2VsMl9wbGwgPSBvbWFwMl9jbV9yZWFkX21vZF9yZWcoUExMX01PRCwgQ01fQ0xLU0VMMik7CiAJCXRtcHNldC5jbV9jbGtzZWwyX3BsbCAmPSB+T01BUDI0WFhfQ09SRV9DTEtfU1JDX01BU0s7CiAJCWlmIChyYXRlID4gbG93KSB7CiAJCQl0bXBzZXQuY21fY2xrc2VsMl9wbGwgfD0gQ09SRV9DTEtfU1JDX0RQTExfWDI7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3QyeHh4X29zYy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0Mnh4eF9vc2MuYwppbmRleCAyMTY3YmU4Li5kZjdiODA1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3QyeHh4X29zYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfb3NjLmMKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2luY2x1ZGUgImNsb2NrLmgiCiAjaW5jbHVkZSAiY2xvY2syeHh4LmgiCi0jaW5jbHVkZSAicHJtLmgiCisjaW5jbHVkZSAicHJtMnh4eF8zeHh4LmgiCiAjaW5jbHVkZSAicHJtLXJlZ2JpdHMtMjR4eC5oIgogCiBzdGF0aWMgaW50IG9tYXAyX2VuYWJsZV9vc2NfY2soc3RydWN0IGNsayAqY2xrKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0Mnh4eF9zeXMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfc3lzLmMKaW5kZXggODIyYjVhNy4uODY5M2NmZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0Mnh4eF9zeXMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3QyeHh4X3N5cy5jCkBAIC0yNiw3ICsyNiw3IEBACiAKICNpbmNsdWRlICJjbG9jay5oIgogI2luY2x1ZGUgImNsb2NrMnh4eC5oIgotI2luY2x1ZGUgInBybS5oIgorI2luY2x1ZGUgInBybTJ4eHhfM3h4eC5oIgogI2luY2x1ZGUgInBybS1yZWdiaXRzLTI0eHguaCIKIAogdm9pZCBfX2lvbWVtICpwcmNtX2Nsa3NyY19jdHJsOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0Mnh4eF92aXJ0X3ByY21fc2V0LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3QyeHh4X3ZpcnRfcHJjbV9zZXQuYwppbmRleCBhZWY2MjkxLi4zOWY5ZDVhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3QyeHh4X3ZpcnRfcHJjbV9zZXQuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3QyeHh4X3ZpcnRfcHJjbV9zZXQuYwpAQCAtNDAsNyArNDAsNyBAQAogI2luY2x1ZGUgImNsb2NrLmgiCiAjaW5jbHVkZSAiY2xvY2syeHh4LmgiCiAjaW5jbHVkZSAib3BwMnh4eC5oIgotI2luY2x1ZGUgImNtLmgiCisjaW5jbHVkZSAiY20yeHh4XzN4eHguaCIKICNpbmNsdWRlICJjbS1yZWdiaXRzLTI0eHguaCIKIAogY29uc3Qgc3RydWN0IHByY21fY29uZmlnICpjdXJyX3ByY21fc2V0OwpAQCAtMTMzLDIxICsxMzMsMjEgQEAKIAkJCWRvbmVfcmF0ZSA9IENPUkVfQ0xLX1NSQ19EUExMOwogCiAJCS8qIE1QVSBkaXZpZGVyICovCi0JCWNtX3dyaXRlX21vZF9yZWcocHJjbS0+Y21fY2xrc2VsX21wdSwgTVBVX01PRCwgQ01fQ0xLU0VMKTsKKwkJb21hcDJfY21fd3JpdGVfbW9kX3JlZyhwcmNtLT5jbV9jbGtzZWxfbXB1LCBNUFVfTU9ELCBDTV9DTEtTRUwpOwogCiAJCS8qIGRzcCArIGl2YTEgZGl2KDI0MjApLCBpdmEyLjEoMjQzMCkgKi8KLQkJY21fd3JpdGVfbW9kX3JlZyhwcmNtLT5jbV9jbGtzZWxfZHNwLAorCQlvbWFwMl9jbV93cml0ZV9tb2RfcmVnKHByY20tPmNtX2Nsa3NlbF9kc3AsCiAJCQkJIE9NQVAyNFhYX0RTUF9NT0QsIENNX0NMS1NFTCk7CiAKLQkJY21fd3JpdGVfbW9kX3JlZyhwcmNtLT5jbV9jbGtzZWxfZ2Z4LCBHRlhfTU9ELCBDTV9DTEtTRUwpOworCQlvbWFwMl9jbV93cml0ZV9tb2RfcmVnKHByY20tPmNtX2Nsa3NlbF9nZngsIEdGWF9NT0QsIENNX0NMS1NFTCk7CiAKIAkJLyogTWFqb3Igc3Vic3lzdGVtIGRpdmlkZXJzICovCi0JCXRtcCA9IGNtX3JlYWRfbW9kX3JlZyhDT1JFX01PRCwgQ01fQ0xLU0VMMSkgJiBPTUFQMjRYWF9DTEtTRUxfRFNTMl9NQVNLOwotCQljbV93cml0ZV9tb2RfcmVnKHByY20tPmNtX2Nsa3NlbDFfY29yZSB8IHRtcCwgQ09SRV9NT0QsCisJCXRtcCA9IG9tYXAyX2NtX3JlYWRfbW9kX3JlZyhDT1JFX01PRCwgQ01fQ0xLU0VMMSkgJiBPTUFQMjRYWF9DTEtTRUxfRFNTMl9NQVNLOworCQlvbWFwMl9jbV93cml0ZV9tb2RfcmVnKHByY20tPmNtX2Nsa3NlbDFfY29yZSB8IHRtcCwgQ09SRV9NT0QsCiAJCQkJIENNX0NMS1NFTDEpOwogCiAJCWlmIChjcHVfaXNfb21hcDI0MzAoKSkKLQkJCWNtX3dyaXRlX21vZF9yZWcocHJjbS0+Y21fY2xrc2VsX21kbSwKKwkJCW9tYXAyX2NtX3dyaXRlX21vZF9yZWcocHJjbS0+Y21fY2xrc2VsX21kbSwKIAkJCQkJIE9NQVAyNDMwX01ETV9NT0QsIENNX0NMS1NFTCk7CiAKIAkJLyogeDIgdG8gZW50ZXIgb21hcDJ4eHhfc2RyY19pbml0X3BhcmFtcygpICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3RfZHBsbC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0X2RwbGwuYwppbmRleCA2Y2U1MTJlLi4zMzczOTJjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3RfZHBsbC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xrdF9kcGxsLmMKQEAgLTI0LDcgKzI0LDYgQEAKICNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CiAKICNpbmNsdWRlICJjbG9jay5oIgotI2luY2x1ZGUgImNtLmgiCiAjaW5jbHVkZSAiY20tcmVnYml0cy0yNHh4LmgiCiAjaW5jbHVkZSAiY20tcmVnYml0cy0zNHh4LmgiCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2suYwppbmRleCBiNWJhYmY1Li4yYTJmMTUyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jay5jCkBAIC0yNCwxNCArMjQsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KIAogI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KLSNpbmNsdWRlIDxwbGF0L2Nsb2NrZG9tYWluLmg+CisjaW5jbHVkZSAiY2xvY2tkb21haW4uaCIKICNpbmNsdWRlIDxwbGF0L2NwdS5oPgogI2luY2x1ZGUgPHBsYXQvcHJjbS5oPgogCiAjaW5jbHVkZSAiY2xvY2suaCIKLSNpbmNsdWRlICJwcm0uaCIKLSNpbmNsdWRlICJwcm0tcmVnYml0cy0yNHh4LmgiCi0jaW5jbHVkZSAiY20uaCIKKyNpbmNsdWRlICJjbTJ4eHhfM3h4eC5oIgogI2luY2x1ZGUgImNtLXJlZ2JpdHMtMjR4eC5oIgogI2luY2x1ZGUgImNtLXJlZ2JpdHMtMzR4eC5oIgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmgKaW5kZXggYTUzNWM3YS4uODk2NTg0ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jay5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2suaApAQCAtNDksNyArNDksNiBAQAogCiAvKiBEUExMIFR5cGUgYW5kIERDTyBTZWxlY3Rpb24gRmxhZ3MgKi8KICNkZWZpbmUgRFBMTF9KX1RZUEUJCTB4MQotI2RlZmluZSBEUExMX05PX0RDT19TRUwJCTB4MgogCiBpbnQgb21hcDJfY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspOwogdm9pZCBvbWFwMl9jbGtfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazI0MjBfZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazI0MjBfZGF0YS5jCmluZGV4IDIxZjg1NjIuLjBhOTkyYmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2syNDIwX2RhdGEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMjQyMF9kYXRhLmMKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlICJjbG9jay5oIgogI2luY2x1ZGUgImNsb2NrMnh4eC5oIgogI2luY2x1ZGUgIm9wcDJ4eHguaCIKLSNpbmNsdWRlICJwcm0uaCIKLSNpbmNsdWRlICJjbS5oIgorI2luY2x1ZGUgImNtMnh4eF8zeHh4LmgiCisjaW5jbHVkZSAicHJtMnh4eF8zeHh4LmgiCiAjaW5jbHVkZSAicHJtLXJlZ2JpdHMtMjR4eC5oIgogI2luY2x1ZGUgImNtLXJlZ2JpdHMtMjR4eC5oIgogI2luY2x1ZGUgInNkcmMuaCIKQEAgLTgxMiw3ICs4MTIsNyBAQAogCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwxKSwKIAkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtTRUxfRFNTMl9NQVNLLAogCS5jbGtzZWwJCT0gZHNzMl9mY2tfY2xrc2VsLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGRzc181NG1fZmNrID0gewkvKiBBbHQgY2xrIHVzZWQgaW4gcG93ZXIgbWFuYWdlbWVudCAqLwpAQCAtMTg2MiwxMCArMTg2MiwxMCBAQAogCUNMSyhOVUxMLAkiZWFjX2ZjayIsCSZlYWNfZmNrLAlDS18yNDJYKSwKIAlDTEsoIm9tYXBfaGRxLjAiLCAiaWNrIiwJJmhkcV9pY2ssCUNLXzI0MlgpLAogCUNMSygib21hcF9oZHEuMSIsICJmY2siLAkmaGRxX2ZjaywJQ0tfMjQyWCksCi0JQ0xLKCJpMmNfb21hcC4xIiwgImljayIsCSZpMmMxX2ljaywJQ0tfMjQyWCksCi0JQ0xLKCJpMmNfb21hcC4xIiwgImZjayIsCSZpMmMxX2ZjaywJQ0tfMjQyWCksCi0JQ0xLKCJpMmNfb21hcC4yIiwgImljayIsCSZpMmMyX2ljaywJQ0tfMjQyWCksCi0JQ0xLKCJpMmNfb21hcC4yIiwgImZjayIsCSZpMmMyX2ZjaywJQ0tfMjQyWCksCisJQ0xLKCJvbWFwX2kyYy4xIiwgImljayIsCSZpMmMxX2ljaywJQ0tfMjQyWCksCisJQ0xLKCJvbWFwX2kyYy4xIiwgImZjayIsCSZpMmMxX2ZjaywJQ0tfMjQyWCksCisJQ0xLKCJvbWFwX2kyYy4yIiwgImljayIsCSZpMmMyX2ljaywJQ0tfMjQyWCksCisJQ0xLKCJvbWFwX2kyYy4yIiwgImZjayIsCSZpMmMyX2ZjaywJQ0tfMjQyWCksCiAJQ0xLKE5VTEwsCSJncG1jX2ZjayIsCSZncG1jX2ZjaywJQ0tfMjQyWCksCiAJQ0xLKE5VTEwsCSJzZG1hX2ZjayIsCSZzZG1hX2ZjaywJQ0tfMjQyWCksCiAJQ0xLKE5VTEwsCSJzZG1hX2ljayIsCSZzZG1hX2ljaywJQ0tfMjQyWCksCkBAIC0xODc3LDcgKzE4NzcsNyBAQAogCUNMSygib21hcC1hZXMiLAkiaWNrIiwJJmFlc19pY2ssCUNLXzI0MlgpLAogCUNMSyhOVUxMLAkicGthX2ljayIsCSZwa2FfaWNrLAlDS18yNDJYKSwKIAlDTEsoTlVMTCwJInVzYl9mY2siLAkmdXNiX2ZjaywJQ0tfMjQyWCksCi0JQ0xLKCJtdXNiX2hkcmMiLAkiZmNrIiwJJm9zY19jaywJQ0tfMjQyWCksCisJQ0xLKCJtdXNiLWhkcmMiLAkiZmNrIiwJJm9zY19jaywJQ0tfMjQyWCksCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazI0MzAuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2syNDMwLmMKaW5kZXggNDRkMGNjYy4uZDg3YmM5YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazI0MzAuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMjQzMC5jCkBAIC0yNSw3ICsyNSw3IEBACiAKICNpbmNsdWRlICJjbG9jay5oIgogI2luY2x1ZGUgImNsb2NrMnh4eC5oIgotI2luY2x1ZGUgImNtLmgiCisjaW5jbHVkZSAiY20yeHh4XzN4eHguaCIKICNpbmNsdWRlICJjbS1yZWdiaXRzLTI0eHguaCIKIAogLyoqCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMjQzMF9kYXRhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMjQzMF9kYXRhLmMKaW5kZXggZTMyYWZjYi4uYzA0N2RjZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazI0MzBfZGF0YS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2syNDMwX2RhdGEuYwpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgImNsb2NrLmgiCiAjaW5jbHVkZSAiY2xvY2syeHh4LmgiCiAjaW5jbHVkZSAib3BwMnh4eC5oIgotI2luY2x1ZGUgInBybS5oIgotI2luY2x1ZGUgImNtLmgiCisjaW5jbHVkZSAiY20yeHh4XzN4eHguaCIKKyNpbmNsdWRlICJwcm0yeHh4XzN4eHguaCIKICNpbmNsdWRlICJwcm0tcmVnYml0cy0yNHh4LmgiCiAjaW5jbHVkZSAiY20tcmVnYml0cy0yNHh4LmgiCiAjaW5jbHVkZSAic2RyYy5oIgpAQCAtODAwLDcgKzgwMCw3IEBACiAJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTDEpLAogCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9EU1MyX01BU0ssCiAJLmNsa3NlbAkJPSBkc3MyX2Zja19jbGtzZWwsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZHNzXzU0bV9mY2sgPSB7CS8qIEFsdCBjbGsgdXNlZCBpbiBwb3dlciBtYW5hZ2VtZW50ICovCkBAIC0xOTY5LDEwICsxOTY5LDEwIEBACiAJQ0xLKE5VTEwsCSJmYWNfZmNrIiwJJmZhY19mY2ssCUNLXzI0M1gpLAogCUNMSygib21hcF9oZHEuMCIsICJpY2siLAkmaGRxX2ljaywJQ0tfMjQzWCksCiAJQ0xLKCJvbWFwX2hkcS4xIiwgImZjayIsCSZoZHFfZmNrLAlDS18yNDNYKSwKLQlDTEsoImkyY19vbWFwLjEiLCAiaWNrIiwJJmkyYzFfaWNrLAlDS18yNDNYKSwKLQlDTEsoImkyY19vbWFwLjEiLCAiZmNrIiwJJmkyY2hzMV9mY2ssCUNLXzI0M1gpLAotCUNMSygiaTJjX29tYXAuMiIsICJpY2siLAkmaTJjMl9pY2ssCUNLXzI0M1gpLAotCUNMSygiaTJjX29tYXAuMiIsICJmY2siLAkmaTJjaHMyX2ZjaywJQ0tfMjQzWCksCisJQ0xLKCJvbWFwX2kyYy4xIiwgImljayIsCSZpMmMxX2ljaywJQ0tfMjQzWCksCisJQ0xLKCJvbWFwX2kyYy4xIiwgImZjayIsCSZpMmNoczFfZmNrLAlDS18yNDNYKSwKKwlDTEsoIm9tYXBfaTJjLjIiLCAiaWNrIiwJJmkyYzJfaWNrLAlDS18yNDNYKSwKKwlDTEsoIm9tYXBfaTJjLjIiLCAiZmNrIiwJJmkyY2hzMl9mY2ssCUNLXzI0M1gpLAogCUNMSyhOVUxMLAkiZ3BtY19mY2siLAkmZ3BtY19mY2ssCUNLXzI0M1gpLAogCUNMSyhOVUxMLAkic2RtYV9mY2siLAkmc2RtYV9mY2ssCUNLXzI0M1gpLAogCUNMSyhOVUxMLAkic2RtYV9pY2siLAkmc2RtYV9pY2ssCUNLXzI0M1gpLApAQCAtMTk4Myw3ICsxOTgzLDcgQEAKIAlDTEsoIm9tYXAtYWVzIiwJImljayIsCSZhZXNfaWNrLAlDS18yNDNYKSwKIAlDTEsoTlVMTCwJInBrYV9pY2siLAkmcGthX2ljaywJQ0tfMjQzWCksCiAJQ0xLKE5VTEwsCSJ1c2JfZmNrIiwJJnVzYl9mY2ssCUNLXzI0M1gpLAotCUNMSygibXVzYl9oZHJjIiwJImljayIsCSZ1c2Joc19pY2ssCUNLXzI0M1gpLAorCUNMSygibXVzYi1vbWFwMjQzMCIsCSJpY2siLAkmdXNiaHNfaWNrLAlDS18yNDNYKSwKIAlDTEsoIm1tY2ktb21hcC1ocy4wIiwgImljayIsCSZtbWNoczFfaWNrLAlDS18yNDNYKSwKIAlDTEsoIm1tY2ktb21hcC1ocy4wIiwgImZjayIsCSZtbWNoczFfZmNrLAlDS18yNDNYKSwKIAlDTEsoIm1tY2ktb21hcC1ocy4xIiwgImljayIsCSZtbWNoczJfaWNrLAlDS18yNDNYKSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szNHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMzR4eC5jCmluZGV4IDZmZWJkNWYuLjI4N2FiYzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szNHh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazM0eHguYwpAQCAtMjUsNyArMjUsNyBAQAogCiAjaW5jbHVkZSAiY2xvY2suaCIKICNpbmNsdWRlICJjbG9jazM0eHguaCIKLSNpbmNsdWRlICJjbS5oIgorI2luY2x1ZGUgImNtMnh4eF8zeHh4LmgiCiAjaW5jbHVkZSAiY20tcmVnYml0cy0zNHh4LmgiCiAKIC8qKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazM1MTcuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szNTE3LmMKaW5kZXggYjQ5NmE5My4uNzQxMTZhMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazM1MTcuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMzUxNy5jCkBAIC0yNSw3ICsyNSw3IEBACiAKICNpbmNsdWRlICJjbG9jay5oIgogI2luY2x1ZGUgImNsb2NrMzUxNy5oIgotI2luY2x1ZGUgImNtLmgiCisjaW5jbHVkZSAiY20yeHh4XzN4eHguaCIKICNpbmNsdWRlICJjbS1yZWdiaXRzLTM0eHguaCIKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szeHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrM3h4eC5jCmluZGV4IGE0NDdjNGQuLmU5ZjY2YjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szeHh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazN4eHguYwpAQCAtMjUsOSArMjUsOSBAQAogCiAjaW5jbHVkZSAiY2xvY2suaCIKICNpbmNsdWRlICJjbG9jazN4eHguaCIKLSNpbmNsdWRlICJwcm0uaCIKKyNpbmNsdWRlICJwcm0yeHh4XzN4eHguaCIKICNpbmNsdWRlICJwcm0tcmVnYml0cy0zNHh4LmgiCi0jaW5jbHVkZSAiY20uaCIKKyNpbmNsdWRlICJjbTJ4eHhfM3h4eC5oIgogI2luY2x1ZGUgImNtLXJlZ2JpdHMtMzR4eC5oIgogCiAvKgpAQCAtOTQsNyArOTQsNyBAQAogCiAJcmV0ID0gb21hcDJfY2xrX3N3aXRjaF9tcHVyYXRlX2F0X2Jvb3QoImRwbGwxX2NrIik7CiAJaWYgKCFyZXQpCi0JCW9tYXAyX2Nsa19wcmludF9uZXdfcmF0ZXMoIm9zY19zeXNfY2siLCAiYXJtX2ZjayIsICJjb3JlX2NrIik7CisJCW9tYXAyX2Nsa19wcmludF9uZXdfcmF0ZXMoIm9zY19zeXNfY2siLCAiY29yZV9jayIsICJhcm1fZmNrIik7CiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazN4eHhfZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazN4eHhfZGF0YS5jCmluZGV4IGQ4NWVjZDUuLmQzYWIxYzllIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrM3h4eF9kYXRhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazN4eHhfZGF0YS5jCkBAIC0yOCw5ICsyOCw5IEBACiAjaW5jbHVkZSAiY2xvY2szNnh4LmgiCiAjaW5jbHVkZSAiY2xvY2szNTE3LmgiCiAKLSNpbmNsdWRlICJjbS5oIgorI2luY2x1ZGUgImNtMnh4eF8zeHh4LmgiCiAjaW5jbHVkZSAiY20tcmVnYml0cy0zNHh4LmgiCi0jaW5jbHVkZSAicHJtLmgiCisjaW5jbHVkZSAicHJtMnh4eF8zeHh4LmgiCiAjaW5jbHVkZSAicHJtLXJlZ2JpdHMtMzR4eC5oIgogI2luY2x1ZGUgImNvbnRyb2wuaCIKIApAQCAtMTIwLDcgKzEyMCw3IEBACiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIG9zY19zeXNfMTZfOG1fcmF0ZXNbXSA9IHsKLQl7IC5kaXYgPSAxLCAudmFsID0gNSwgLmZsYWdzID0gUkFURV9JTl8zNDMwRVMyUExVUyB9LAorCXsgLmRpdiA9IDEsIC52YWwgPSA1LCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzJQTFVTXzM2WFggfSwKIAl7IC5kaXYgPSAwIH0KIH07CiAKQEAgLTQ1MiwzNSArNDUyLDM1IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGRpdjMxX2RwbGwzX3JhdGVzW10gPSB7CiAJeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fM1hYWCB9LAogCXsgLmRpdiA9IDIsIC52YWwgPSAyLCAuZmxhZ3MgPSBSQVRFX0lOXzNYWFggfSwKLQl7IC5kaXYgPSAzLCAudmFsID0gMywgLmZsYWdzID0gUkFURV9JTl8zNDMwRVMyUExVUyB9LAotCXsgLmRpdiA9IDQsIC52YWwgPSA0LCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzJQTFVTIH0sCi0JeyAuZGl2ID0gNSwgLnZhbCA9IDUsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMlBMVVMgfSwKLQl7IC5kaXYgPSA2LCAudmFsID0gNiwgLmZsYWdzID0gUkFURV9JTl8zNDMwRVMyUExVUyB9LAotCXsgLmRpdiA9IDcsIC52YWwgPSA3LCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzJQTFVTIH0sCi0JeyAuZGl2ID0gOCwgLnZhbCA9IDgsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMlBMVVMgfSwKLQl7IC5kaXYgPSA5LCAudmFsID0gOSwgLmZsYWdzID0gUkFURV9JTl8zNDMwRVMyUExVUyB9LAotCXsgLmRpdiA9IDEwLCAudmFsID0gMTAsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMlBMVVMgfSwKLQl7IC5kaXYgPSAxMSwgLnZhbCA9IDExLCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzJQTFVTIH0sCi0JeyAuZGl2ID0gMTIsIC52YWwgPSAxMiwgLmZsYWdzID0gUkFURV9JTl8zNDMwRVMyUExVUyB9LAotCXsgLmRpdiA9IDEzLCAudmFsID0gMTMsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMlBMVVMgfSwKLQl7IC5kaXYgPSAxNCwgLnZhbCA9IDE0LCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzJQTFVTIH0sCi0JeyAuZGl2ID0gMTUsIC52YWwgPSAxNSwgLmZsYWdzID0gUkFURV9JTl8zNDMwRVMyUExVUyB9LAotCXsgLmRpdiA9IDE2LCAudmFsID0gMTYsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMlBMVVMgfSwKLQl7IC5kaXYgPSAxNywgLnZhbCA9IDE3LCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzJQTFVTIH0sCi0JeyAuZGl2ID0gMTgsIC52YWwgPSAxOCwgLmZsYWdzID0gUkFURV9JTl8zNDMwRVMyUExVUyB9LAotCXsgLmRpdiA9IDE5LCAudmFsID0gMTksIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMlBMVVMgfSwKLQl7IC5kaXYgPSAyMCwgLnZhbCA9IDIwLCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzJQTFVTIH0sCi0JeyAuZGl2ID0gMjEsIC52YWwgPSAyMSwgLmZsYWdzID0gUkFURV9JTl8zNDMwRVMyUExVUyB9LAotCXsgLmRpdiA9IDIyLCAudmFsID0gMjIsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMlBMVVMgfSwKLQl7IC5kaXYgPSAyMywgLnZhbCA9IDIzLCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzJQTFVTIH0sCi0JeyAuZGl2ID0gMjQsIC52YWwgPSAyNCwgLmZsYWdzID0gUkFURV9JTl8zNDMwRVMyUExVUyB9LAotCXsgLmRpdiA9IDI1LCAudmFsID0gMjUsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMlBMVVMgfSwKLQl7IC5kaXYgPSAyNiwgLnZhbCA9IDI2LCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzJQTFVTIH0sCi0JeyAuZGl2ID0gMjcsIC52YWwgPSAyNywgLmZsYWdzID0gUkFURV9JTl8zNDMwRVMyUExVUyB9LAotCXsgLmRpdiA9IDI4LCAudmFsID0gMjgsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMlBMVVMgfSwKLQl7IC5kaXYgPSAyOSwgLnZhbCA9IDI5LCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzJQTFVTIH0sCi0JeyAuZGl2ID0gMzAsIC52YWwgPSAzMCwgLmZsYWdzID0gUkFURV9JTl8zNDMwRVMyUExVUyB9LAotCXsgLmRpdiA9IDMxLCAudmFsID0gMzEsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMlBMVVMgfSwKKwl7IC5kaXYgPSAzLCAudmFsID0gMywgLmZsYWdzID0gUkFURV9JTl8zNDMwRVMyUExVU18zNlhYIH0sCisJeyAuZGl2ID0gNCwgLnZhbCA9IDQsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMlBMVVNfMzZYWCB9LAorCXsgLmRpdiA9IDUsIC52YWwgPSA1LCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzJQTFVTXzM2WFggfSwKKwl7IC5kaXYgPSA2LCAudmFsID0gNiwgLmZsYWdzID0gUkFURV9JTl8zNDMwRVMyUExVU18zNlhYIH0sCisJeyAuZGl2ID0gNywgLnZhbCA9IDcsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMlBMVVNfMzZYWCB9LAorCXsgLmRpdiA9IDgsIC52YWwgPSA4LCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzJQTFVTXzM2WFggfSwKKwl7IC5kaXYgPSA5LCAudmFsID0gOSwgLmZsYWdzID0gUkFURV9JTl8zNDMwRVMyUExVU18zNlhYIH0sCisJeyAuZGl2ID0gMTAsIC52YWwgPSAxMCwgLmZsYWdzID0gUkFURV9JTl8zNDMwRVMyUExVU18zNlhYIH0sCisJeyAuZGl2ID0gMTEsIC52YWwgPSAxMSwgLmZsYWdzID0gUkFURV9JTl8zNDMwRVMyUExVU18zNlhYIH0sCisJeyAuZGl2ID0gMTIsIC52YWwgPSAxMiwgLmZsYWdzID0gUkFURV9JTl8zNDMwRVMyUExVU18zNlhYIH0sCisJeyAuZGl2ID0gMTMsIC52YWwgPSAxMywgLmZsYWdzID0gUkFURV9JTl8zNDMwRVMyUExVU18zNlhYIH0sCisJeyAuZGl2ID0gMTQsIC52YWwgPSAxNCwgLmZsYWdzID0gUkFURV9JTl8zNDMwRVMyUExVU18zNlhYIH0sCisJeyAuZGl2ID0gMTUsIC52YWwgPSAxNSwgLmZsYWdzID0gUkFURV9JTl8zNDMwRVMyUExVU18zNlhYIH0sCisJeyAuZGl2ID0gMTYsIC52YWwgPSAxNiwgLmZsYWdzID0gUkFURV9JTl8zNDMwRVMyUExVU18zNlhYIH0sCisJeyAuZGl2ID0gMTcsIC52YWwgPSAxNywgLmZsYWdzID0gUkFURV9JTl8zNDMwRVMyUExVU18zNlhYIH0sCisJeyAuZGl2ID0gMTgsIC52YWwgPSAxOCwgLmZsYWdzID0gUkFURV9JTl8zNDMwRVMyUExVU18zNlhYIH0sCisJeyAuZGl2ID0gMTksIC52YWwgPSAxOSwgLmZsYWdzID0gUkFURV9JTl8zNDMwRVMyUExVU18zNlhYIH0sCisJeyAuZGl2ID0gMjAsIC52YWwgPSAyMCwgLmZsYWdzID0gUkFURV9JTl8zNDMwRVMyUExVU18zNlhYIH0sCisJeyAuZGl2ID0gMjEsIC52YWwgPSAyMSwgLmZsYWdzID0gUkFURV9JTl8zNDMwRVMyUExVU18zNlhYIH0sCisJeyAuZGl2ID0gMjIsIC52YWwgPSAyMiwgLmZsYWdzID0gUkFURV9JTl8zNDMwRVMyUExVU18zNlhYIH0sCisJeyAuZGl2ID0gMjMsIC52YWwgPSAyMywgLmZsYWdzID0gUkFURV9JTl8zNDMwRVMyUExVU18zNlhYIH0sCisJeyAuZGl2ID0gMjQsIC52YWwgPSAyNCwgLmZsYWdzID0gUkFURV9JTl8zNDMwRVMyUExVU18zNlhYIH0sCisJeyAuZGl2ID0gMjUsIC52YWwgPSAyNSwgLmZsYWdzID0gUkFURV9JTl8zNDMwRVMyUExVU18zNlhYIH0sCisJeyAuZGl2ID0gMjYsIC52YWwgPSAyNiwgLmZsYWdzID0gUkFURV9JTl8zNDMwRVMyUExVU18zNlhYIH0sCisJeyAuZGl2ID0gMjcsIC52YWwgPSAyNywgLmZsYWdzID0gUkFURV9JTl8zNDMwRVMyUExVU18zNlhYIH0sCisJeyAuZGl2ID0gMjgsIC52YWwgPSAyOCwgLmZsYWdzID0gUkFURV9JTl8zNDMwRVMyUExVU18zNlhYIH0sCisJeyAuZGl2ID0gMjksIC52YWwgPSAyOSwgLmZsYWdzID0gUkFURV9JTl8zNDMwRVMyUExVU18zNlhYIH0sCisJeyAuZGl2ID0gMzAsIC52YWwgPSAzMCwgLmZsYWdzID0gUkFURV9JTl8zNDMwRVMyUExVU18zNlhYIH0sCisJeyAuZGl2ID0gMzEsIC52YWwgPSAzMSwgLmZsYWdzID0gUkFURV9JTl8zNDMwRVMyUExVU18zNlhYIH0sCiAJeyAuZGl2ID0gMCB9LAogfTsKIApAQCAtNjAyLDYgKzYwMiw4IEBACiAJLmF1dG9pZGxlX21hc2sJPSBPTUFQMzQzMF9BVVRPX1BFUklQSF9EUExMX01BU0ssCiAJLmlkbGVzdF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fSURMRVNUKSwKIAkuaWRsZXN0X21hc2sJPSBPTUFQMzQzMF9TVF9QRVJJUEhfQ0xLX01BU0ssCisJLmRjb19tYXNrCT0gT01BUDM2MzBfUEVSSVBIX0RQTExfRENPX1NFTF9NQVNLLAorCS5zZGRpdl9tYXNrCT0gT01BUDM2MzBfUEVSSVBIX0RQTExfU0RfRElWX01BU0ssCiAJLm1heF9tdWx0aXBsaWVyID0gT01BUDM2MzBfTUFYX0pUWVBFX0RQTExfTVVMVCwKIAkubWluX2RpdmlkZXIJPSAxLAogCS5tYXhfZGl2aWRlcgk9IE9NQVAzX01BWF9EUExMX0RJViwKQEAgLTE1NTgsNiArMTU2MCw3IEBACiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUNTUEk0X1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBtY3NwaTNfZmNrID0gewpAQCAtMTU2Nyw2ICsxNTcwLDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ1NQSTNfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpMl9mY2sgPSB7CkBAIC0xNTc2LDYgKzE1ODAsNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01DU1BJMl9TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgbWNzcGkxX2ZjayA9IHsKQEAgLTE1ODUsNiArMTU5MCw3IEBACiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUNTUEkxX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayB1YXJ0Ml9mY2sgPSB7CkBAIC0zMDQ0LDYgKzMwNTAsNyBAQAogCS5wYXJlbnQJCT0gJnN5c19jaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1NSMV9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMzA1NCw2ICszMDYxLDcgQEAKIAkucGFyZW50CQk9ICZzeXNfY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9TUjJfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTMyMDEsNyArMzIwOSw3IEBACiAJQ0xLKE5VTEwsCSJvbWFwXzMya19mY2siLAkmb21hcF8zMmtfZmNrLAlDS18zWFhYKSwKIAlDTEsoTlVMTCwJInZpcnRfMTJtX2NrIiwJJnZpcnRfMTJtX2NrLAlDS18zWFhYKSwKIAlDTEsoTlVMTCwJInZpcnRfMTNtX2NrIiwJJnZpcnRfMTNtX2NrLAlDS18zWFhYKSwKLQlDTEsoTlVMTCwJInZpcnRfMTZfOG1fY2siLCAmdmlydF8xNl84bV9jaywgQ0tfMzQzMEVTMiB8IENLX0FNMzVYWCksCisJQ0xLKE5VTEwsCSJ2aXJ0XzE2XzhtX2NrIiwgJnZpcnRfMTZfOG1fY2ssIENLXzM0MzBFUzJQTFVTIHwgQ0tfQU0zNVhYICB8IENLXzM2WFgpLAogCUNMSyhOVUxMLAkidmlydF8xOV8ybV9jayIsICZ2aXJ0XzE5XzJtX2NrLCBDS18zWFhYKSwKIAlDTEsoTlVMTCwJInZpcnRfMjZtX2NrIiwJJnZpcnRfMjZtX2NrLAlDS18zWFhYKSwKIAlDTEsoTlVMTCwJInZpcnRfMzhfNG1fY2siLCAmdmlydF8zOF80bV9jaywgQ0tfM1hYWCksCkBAIC0zMjE4LDggKzMyMjYsOCBAQAogCUNMSyhOVUxMLAkiZHBsbDFfY2siLAkmZHBsbDFfY2ssCUNLXzNYWFgpLAogCUNMSyhOVUxMLAkiZHBsbDFfeDJfY2siLAkmZHBsbDFfeDJfY2ssCUNLXzNYWFgpLAogCUNMSyhOVUxMLAkiZHBsbDFfeDJtMl9jayIsICZkcGxsMV94Mm0yX2NrLCBDS18zWFhYKSwKLQlDTEsoTlVMTCwJImRwbGwyX2NrIiwJJmRwbGwyX2NrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJImRwbGwyX20yX2NrIiwJJmRwbGwyX20yX2NrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImRwbGwyX2NrIiwJJmRwbGwyX2NrLAlDS18zNFhYIHwgQ0tfMzZYWCksCisJQ0xLKE5VTEwsCSJkcGxsMl9tMl9jayIsCSZkcGxsMl9tMl9jaywJQ0tfMzRYWCB8IENLXzM2WFgpLAogCUNMSyhOVUxMLAkiZHBsbDNfY2siLAkmZHBsbDNfY2ssCUNLXzNYWFgpLAogCUNMSyhOVUxMLAkiY29yZV9jayIsCSZjb3JlX2NrLAlDS18zWFhYKSwKIAlDTEsoTlVMTCwJImRwbGwzX3gyX2NrIiwJJmRwbGwzX3gyX2NrLAlDS18zWFhYKSwKQEAgLTMyNDgsOCArMzI1Niw4IEBACiAJQ0xLKE5VTEwsCSJkcGxsNF9tNl9jayIsCSZkcGxsNF9tNl9jaywJQ0tfM1hYWCksCiAJQ0xLKE5VTEwsCSJkcGxsNF9tNngyX2NrIiwgJmRwbGw0X202eDJfY2ssIENLXzNYWFgpLAogCUNMSygiZXRiIiwJImVtdV9wZXJfYWx3b25fY2siLCAmZW11X3Blcl9hbHdvbl9jaywgQ0tfM1hYWCksCi0JQ0xLKE5VTEwsCSJkcGxsNV9jayIsCSZkcGxsNV9jaywJQ0tfMzQzMEVTMiB8IENLX0FNMzVYWCksCi0JQ0xLKE5VTEwsCSJkcGxsNV9tMl9jayIsCSZkcGxsNV9tMl9jaywJQ0tfMzQzMEVTMiB8IENLX0FNMzVYWCksCisJQ0xLKE5VTEwsCSJkcGxsNV9jayIsCSZkcGxsNV9jaywJQ0tfMzQzMEVTMlBMVVMgfCBDS19BTTM1WFggfCBDS18zNlhYKSwKKwlDTEsoTlVMTCwJImRwbGw1X20yX2NrIiwJJmRwbGw1X20yX2NrLAlDS18zNDMwRVMyUExVUyB8IENLX0FNMzVYWCB8IENLXzM2WFgpLAogCUNMSyhOVUxMLAkiY2xrb3V0Ml9zcmNfY2siLCAmY2xrb3V0Ml9zcmNfY2ssIENLXzNYWFgpLAogCUNMSyhOVUxMLAkic3lzX2Nsa291dDIiLAkmc3lzX2Nsa291dDIsCUNLXzNYWFgpLAogCUNMSyhOVUxMLAkiY29yZXgyX2ZjayIsCSZjb3JleDJfZmNrLAlDS18zWFhYKSwKQEAgLTMyNTcsOCArMzI2NSw4IEBACiAJQ0xLKE5VTEwsCSJtcHVfY2siLAkmbXB1X2NrLAlDS18zWFhYKSwKIAlDTEsoTlVMTCwJImFybV9mY2siLAkmYXJtX2ZjaywJQ0tfM1hYWCksCiAJQ0xLKCJldGIiLAkiZW11X21wdV9hbHdvbl9jayIsICZlbXVfbXB1X2Fsd29uX2NrLCBDS18zWFhYKSwKLQlDTEsoTlVMTCwJImRwbGwyX2ZjayIsCSZkcGxsMl9mY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkiaXZhMl9jayIsCSZpdmEyX2NrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImRwbGwyX2ZjayIsCSZkcGxsMl9mY2ssCUNLXzM0WFggfCBDS18zNlhYKSwKKwlDTEsoTlVMTCwJIml2YTJfY2siLAkmaXZhMl9jaywJQ0tfMzRYWCB8IENLXzM2WFgpLAogCUNMSyhOVUxMLAkibDNfaWNrIiwJJmwzX2ljaywJQ0tfM1hYWCksCiAJQ0xLKE5VTEwsCSJsNF9pY2siLAkmbDRfaWNrLAlDS18zWFhYKSwKIAlDTEsoTlVMTCwJInJtX2ljayIsCSZybV9pY2ssCUNLXzNYWFgpLApAQCAtMzI2NywyNyArMzI3NSwyOCBAQAogCUNMSyhOVUxMLAkiZ2Z4X2wzX2ljayIsCSZnZnhfbDNfaWNrLAlDS18zNDMwRVMxKSwKIAlDTEsoTlVMTCwJImdmeF9jZzFfY2siLAkmZ2Z4X2NnMV9jaywJQ0tfMzQzMEVTMSksCiAJQ0xLKE5VTEwsCSJnZnhfY2cyX2NrIiwJJmdmeF9jZzJfY2ssCUNLXzM0MzBFUzEpLAotCUNMSyhOVUxMLAkic2d4X2ZjayIsCSZzZ3hfZmNrLAlDS18zNDMwRVMyIHwgQ0tfMzUxNyksCi0JQ0xLKE5VTEwsCSJzZ3hfaWNrIiwJJnNneF9pY2ssCUNLXzM0MzBFUzIgfCBDS18zNTE3KSwKKwlDTEsoTlVMTCwJInNneF9mY2siLAkmc2d4X2ZjaywJQ0tfMzQzMEVTMlBMVVMgfCBDS18zNTE3IHwgQ0tfMzZYWCksCisJQ0xLKE5VTEwsCSJzZ3hfaWNrIiwJJnNneF9pY2ssCUNLXzM0MzBFUzJQTFVTIHwgQ0tfMzUxNyB8IENLXzM2WFgpLAogCUNMSyhOVUxMLAkiZDJkXzI2bV9mY2siLAkmZDJkXzI2bV9mY2ssCUNLXzM0MzBFUzEpLAotCUNMSyhOVUxMLAkibW9kZW1fZmNrIiwJJm1vZGVtX2ZjaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJzYWQyZF9pY2siLAkmc2FkMmRfaWNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJIm1hZDJkX2ljayIsCSZtYWQyZF9pY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkibW9kZW1fZmNrIiwJJm1vZGVtX2ZjaywJQ0tfMzRYWCB8IENLXzM2WFgpLAorCUNMSyhOVUxMLAkic2FkMmRfaWNrIiwJJnNhZDJkX2ljaywJQ0tfMzRYWCB8IENLXzM2WFgpLAorCUNMSyhOVUxMLAkibWFkMmRfaWNrIiwJJm1hZDJkX2ljaywJQ0tfMzRYWCB8IENLXzM2WFgpLAogCUNMSyhOVUxMLAkiZ3B0MTBfZmNrIiwJJmdwdDEwX2ZjaywJQ0tfM1hYWCksCiAJQ0xLKE5VTEwsCSJncHQxMV9mY2siLAkmZ3B0MTFfZmNrLAlDS18zWFhYKSwKLQlDTEsoTlVMTCwJImNwZWZ1c2VfZmNrIiwJJmNwZWZ1c2VfZmNrLAlDS18zNDMwRVMyIHwgQ0tfQU0zNVhYKSwKLQlDTEsoTlVMTCwJInRzX2ZjayIsCSZ0c19mY2ssCUNLXzM0MzBFUzIgfCBDS19BTTM1WFgpLAotCUNMSyhOVUxMLAkidXNidGxsX2ZjayIsCSZ1c2J0bGxfZmNrLAlDS18zNDMwRVMyIHwgQ0tfQU0zNVhYKSwKKwlDTEsoTlVMTCwJImNwZWZ1c2VfZmNrIiwJJmNwZWZ1c2VfZmNrLAlDS18zNDMwRVMyUExVUyB8IENLX0FNMzVYWCB8IENLXzM2WFgpLAorCUNMSyhOVUxMLAkidHNfZmNrIiwJJnRzX2ZjaywJQ0tfMzQzMEVTMlBMVVMgfCBDS19BTTM1WFggfCBDS18zNlhYKSwKKwlDTEsoTlVMTCwJInVzYnRsbF9mY2siLAkmdXNidGxsX2ZjaywJQ0tfMzQzMEVTMlBMVVMgfCBDS19BTTM1WFggfCBDS18zNlhYKSwKKwlDTEsoImVoY2ktb21hcC4wIiwJInVzYnRsbF9mY2siLAkmdXNidGxsX2ZjaywJQ0tfMzQzMEVTMiB8IENLX0FNMzVYWCksCiAJQ0xLKCJvbWFwLW1jYnNwLjEiLAkicHJjbV9mY2siLAkmY29yZV85Nm1fZmNrLAlDS18zWFhYKSwKIAlDTEsoIm9tYXAtbWNic3AuNSIsCSJwcmNtX2ZjayIsCSZjb3JlXzk2bV9mY2ssCUNLXzNYWFgpLAogCUNMSyhOVUxMLAkiY29yZV85Nm1fZmNrIiwJJmNvcmVfOTZtX2ZjaywJQ0tfM1hYWCksCi0JQ0xLKCJtbWNpLW9tYXAtaHMuMiIsCSJmY2siLAkmbW1jaHMzX2ZjaywJQ0tfMzQzMEVTMiB8IENLX0FNMzVYWCksCisJQ0xLKCJtbWNpLW9tYXAtaHMuMiIsCSJmY2siLAkmbW1jaHMzX2ZjaywJQ0tfMzQzMEVTMlBMVVMgfCBDS19BTTM1WFggfCBDS18zNlhYKSwKIAlDTEsoIm1tY2ktb21hcC1ocy4xIiwJImZjayIsCSZtbWNoczJfZmNrLAlDS18zWFhYKSwKLQlDTEsoTlVMTCwJIm1zcHJvX2ZjayIsCSZtc3Byb19mY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkibXNwcm9fZmNrIiwJJm1zcHJvX2ZjaywJQ0tfMzRYWCB8IENLXzM2WFgpLAogCUNMSygibW1jaS1vbWFwLWhzLjAiLAkiZmNrIiwJJm1tY2hzMV9mY2ssCUNLXzNYWFgpLAotCUNMSygiaTJjX29tYXAuMyIsICJmY2siLAkmaTJjM19mY2ssCUNLXzNYWFgpLAotCUNMSygiaTJjX29tYXAuMiIsICJmY2siLAkmaTJjMl9mY2ssCUNLXzNYWFgpLAotCUNMSygiaTJjX29tYXAuMSIsICJmY2siLAkmaTJjMV9mY2ssCUNLXzNYWFgpLAorCUNMSygib21hcF9pMmMuMyIsICJmY2siLAkmaTJjM19mY2ssCUNLXzNYWFgpLAorCUNMSygib21hcF9pMmMuMiIsICJmY2siLAkmaTJjMl9mY2ssCUNLXzNYWFgpLAorCUNMSygib21hcF9pMmMuMSIsICJmY2siLAkmaTJjMV9mY2ssCUNLXzNYWFgpLAogCUNMSygib21hcC1tY2JzcC41IiwgImZjayIsCSZtY2JzcDVfZmNrLAlDS18zWFhYKSwKIAlDTEsoIm9tYXAtbWNic3AuMSIsICJmY2siLAkmbWNic3AxX2ZjaywJQ0tfM1hYWCksCiAJQ0xLKE5VTEwsCSJjb3JlXzQ4bV9mY2siLAkmY29yZV80OG1fZmNrLAlDS18zWFhYKSwKQEAgLTMzMDEsMzQgKzMzMTAsMzUgQEAKIAlDTEsoTlVMTCwJImNvcmVfMTJtX2ZjayIsCSZjb3JlXzEybV9mY2ssCUNLXzNYWFgpLAogCUNMSygib21hcF9oZHEuMCIsICJmY2siLAkmaGRxX2ZjaywJQ0tfM1hYWCksCiAJQ0xLKE5VTEwsCSJzc2lfc3NyX2ZjayIsCSZzc2lfc3NyX2Zja18zNDMwZXMxLAlDS18zNDMwRVMxKSwKLQlDTEsoTlVMTCwJInNzaV9zc3JfZmNrIiwJJnNzaV9zc3JfZmNrXzM0MzBlczIsCUNLXzM0MzBFUzIpLAorCUNMSyhOVUxMLAkic3NpX3Nzcl9mY2siLAkmc3NpX3Nzcl9mY2tfMzQzMGVzMiwJQ0tfMzQzMEVTMlBMVVMgfCBDS18zNlhYKSwKIAlDTEsoTlVMTCwJInNzaV9zc3RfZmNrIiwJJnNzaV9zc3RfZmNrXzM0MzBlczEsCUNLXzM0MzBFUzEpLAotCUNMSyhOVUxMLAkic3NpX3NzdF9mY2siLAkmc3NpX3NzdF9mY2tfMzQzMGVzMiwJQ0tfMzQzMEVTMiksCisJQ0xLKE5VTEwsCSJzc2lfc3N0X2ZjayIsCSZzc2lfc3N0X2Zja18zNDMwZXMyLAlDS18zNDMwRVMyUExVUyB8IENLXzM2WFgpLAogCUNMSyhOVUxMLAkiY29yZV9sM19pY2siLAkmY29yZV9sM19pY2ssCUNLXzNYWFgpLAotCUNMSygibXVzYl9oZHJjIiwJImljayIsCSZoc290Z3VzYl9pY2tfMzQzMGVzMSwJQ0tfMzQzMEVTMSksCi0JQ0xLKCJtdXNiX2hkcmMiLAkiaWNrIiwJJmhzb3RndXNiX2lja18zNDMwZXMyLAlDS18zNDMwRVMyKSwKKwlDTEsoIm11c2Itb21hcDI0MzAiLAkiaWNrIiwJJmhzb3RndXNiX2lja18zNDMwZXMxLAlDS18zNDMwRVMxKSwKKwlDTEsoIm11c2Itb21hcDI0MzAiLAkiaWNrIiwJJmhzb3RndXNiX2lja18zNDMwZXMyLAlDS18zNDMwRVMyUExVUyB8IENLXzM2WFgpLAogCUNMSyhOVUxMLAkic2RyY19pY2siLAkmc2RyY19pY2ssCUNLXzNYWFgpLAogCUNMSyhOVUxMLAkiZ3BtY19mY2siLAkmZ3BtY19mY2ssCUNLXzNYWFgpLAotCUNMSyhOVUxMLAkic2VjdXJpdHlfbDNfaWNrIiwgJnNlY3VyaXR5X2wzX2ljaywgQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJwa2FfaWNrIiwJJnBrYV9pY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkic2VjdXJpdHlfbDNfaWNrIiwgJnNlY3VyaXR5X2wzX2ljaywgQ0tfMzRYWCB8IENLXzM2WFgpLAorCUNMSyhOVUxMLAkicGthX2ljayIsCSZwa2FfaWNrLAlDS18zNFhYIHwgQ0tfMzZYWCksCiAJQ0xLKE5VTEwsCSJjb3JlX2w0X2ljayIsCSZjb3JlX2w0X2ljaywJQ0tfM1hYWCksCi0JQ0xLKE5VTEwsCSJ1c2J0bGxfaWNrIiwJJnVzYnRsbF9pY2ssCUNLXzM0MzBFUzIgfCBDS19BTTM1WFgpLAotCUNMSygibW1jaS1vbWFwLWhzLjIiLAkiaWNrIiwJJm1tY2hzM19pY2ssCUNLXzM0MzBFUzIgfCBDS19BTTM1WFgpLAotCUNMSyhOVUxMLAkiaWNyX2ljayIsCSZpY3JfaWNrLAlDS18zNDNYKSwKLQlDTEsoIm9tYXAtYWVzIiwJImljayIsCSZhZXMyX2ljaywJQ0tfMzQzWCksCi0JQ0xLKCJvbWFwLXNoYW0iLAkiaWNrIiwJJnNoYTEyX2ljaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJkZXMyX2ljayIsCSZkZXMyX2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJ1c2J0bGxfaWNrIiwJJnVzYnRsbF9pY2ssCUNLXzM0MzBFUzJQTFVTIHwgQ0tfQU0zNVhYIHwgQ0tfMzZYWCksCisJQ0xLKCJlaGNpLW9tYXAuMCIsCSJ1c2J0bGxfaWNrIiwJJnVzYnRsbF9pY2ssCUNLXzM0MzBFUzJQTFVTIHwgQ0tfQU0zNVhYIHwgQ0tfMzZYWCksCisJQ0xLKCJtbWNpLW9tYXAtaHMuMiIsCSJpY2siLAkmbW1jaHMzX2ljaywJQ0tfMzQzMEVTMlBMVVMgfCBDS19BTTM1WFggfCBDS18zNlhYKSwKKwlDTEsoTlVMTCwJImljcl9pY2siLAkmaWNyX2ljaywJQ0tfMzRYWCB8IENLXzM2WFgpLAorCUNMSygib21hcC1hZXMiLAkiaWNrIiwJJmFlczJfaWNrLAlDS18zNFhYIHwgQ0tfMzZYWCksCisJQ0xLKCJvbWFwLXNoYW0iLAkiaWNrIiwJJnNoYTEyX2ljaywJQ0tfMzRYWCB8IENLXzM2WFgpLAorCUNMSyhOVUxMLAkiZGVzMl9pY2siLAkmZGVzMl9pY2ssCUNLXzM0WFggfCBDS18zNlhYKSwKIAlDTEsoIm1tY2ktb21hcC1ocy4xIiwJImljayIsCSZtbWNoczJfaWNrLAlDS18zWFhYKSwKIAlDTEsoIm1tY2ktb21hcC1ocy4wIiwJImljayIsCSZtbWNoczFfaWNrLAlDS18zWFhYKSwKLQlDTEsoTlVMTCwJIm1zcHJvX2ljayIsCSZtc3Byb19pY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkibXNwcm9faWNrIiwJJm1zcHJvX2ljaywJQ0tfMzRYWCB8IENLXzM2WFgpLAogCUNMSygib21hcF9oZHEuMCIsICJpY2siLAkmaGRxX2ljaywJQ0tfM1hYWCksCiAJQ0xLKCJvbWFwMl9tY3NwaS40IiwgImljayIsCSZtY3NwaTRfaWNrLAlDS18zWFhYKSwKIAlDTEsoIm9tYXAyX21jc3BpLjMiLCAiaWNrIiwJJm1jc3BpM19pY2ssCUNLXzNYWFgpLAogCUNMSygib21hcDJfbWNzcGkuMiIsICJpY2siLAkmbWNzcGkyX2ljaywJQ0tfM1hYWCksCiAJQ0xLKCJvbWFwMl9tY3NwaS4xIiwgImljayIsCSZtY3NwaTFfaWNrLAlDS18zWFhYKSwKLQlDTEsoImkyY19vbWFwLjMiLCAiaWNrIiwJJmkyYzNfaWNrLAlDS18zWFhYKSwKLQlDTEsoImkyY19vbWFwLjIiLCAiaWNrIiwJJmkyYzJfaWNrLAlDS18zWFhYKSwKLQlDTEsoImkyY19vbWFwLjEiLCAiaWNrIiwJJmkyYzFfaWNrLAlDS18zWFhYKSwKKwlDTEsoIm9tYXBfaTJjLjMiLCAiaWNrIiwJJmkyYzNfaWNrLAlDS18zWFhYKSwKKwlDTEsoIm9tYXBfaTJjLjIiLCAiaWNrIiwJJmkyYzJfaWNrLAlDS18zWFhYKSwKKwlDTEsoIm9tYXBfaTJjLjEiLCAiaWNrIiwJJmkyYzFfaWNrLAlDS18zWFhYKSwKIAlDTEsoTlVMTCwJInVhcnQyX2ljayIsCSZ1YXJ0Ml9pY2ssCUNLXzNYWFgpLAogCUNMSyhOVUxMLAkidWFydDFfaWNrIiwJJnVhcnQxX2ljaywJQ0tfM1hYWCksCiAJQ0xLKE5VTEwsCSJncHQxMV9pY2siLAkmZ3B0MTFfaWNrLAlDS18zWFhYKSwKQEAgLTMzMzYsMzcgKzMzNDYsNDAgQEAKIAlDTEsoIm9tYXAtbWNic3AuNSIsICJpY2siLAkmbWNic3A1X2ljaywJQ0tfM1hYWCksCiAJQ0xLKCJvbWFwLW1jYnNwLjEiLCAiaWNrIiwJJm1jYnNwMV9pY2ssCUNLXzNYWFgpLAogCUNMSyhOVUxMLAkiZmFjX2ljayIsCSZmYWNfaWNrLAlDS18zNDMwRVMxKSwKLQlDTEsoTlVMTCwJIm1haWxib3hlc19pY2siLCAmbWFpbGJveGVzX2ljaywgQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJtYWlsYm94ZXNfaWNrIiwgJm1haWxib3hlc19pY2ssIENLXzM0WFggfCBDS18zNlhYKSwKIAlDTEsoTlVMTCwJIm9tYXBjdHJsX2ljayIsCSZvbWFwY3RybF9pY2ssCUNLXzNYWFgpLAotCUNMSyhOVUxMLAkic3NpX2w0X2ljayIsCSZzc2lfbDRfaWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJInNzaV9sNF9pY2siLAkmc3NpX2w0X2ljaywJQ0tfMzRYWCB8IENLXzM2WFgpLAogCUNMSyhOVUxMLAkic3NpX2ljayIsCSZzc2lfaWNrXzM0MzBlczEsCUNLXzM0MzBFUzEpLAotCUNMSyhOVUxMLAkic3NpX2ljayIsCSZzc2lfaWNrXzM0MzBlczIsCUNLXzM0MzBFUzIpLAorCUNMSyhOVUxMLAkic3NpX2ljayIsCSZzc2lfaWNrXzM0MzBlczIsCUNLXzM0MzBFUzJQTFVTIHwgQ0tfMzZYWCksCiAJQ0xLKE5VTEwsCSJ1c2JfbDRfaWNrIiwJJnVzYl9sNF9pY2ssCUNLXzM0MzBFUzEpLAotCUNMSyhOVUxMLAkic2VjdXJpdHlfbDRfaWNrMiIsICZzZWN1cml0eV9sNF9pY2syLCBDS18zNDNYKSwKLQlDTEsoTlVMTCwJImFlczFfaWNrIiwJJmFlczFfaWNrLAlDS18zNDNYKSwKLQlDTEsoIm9tYXBfcm5nIiwJImljayIsCQkmcm5nX2ljaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJzaGExMV9pY2siLAkmc2hhMTFfaWNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJImRlczFfaWNrIiwJJmRlczFfaWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJInNlY3VyaXR5X2w0X2ljazIiLCAmc2VjdXJpdHlfbDRfaWNrMiwgQ0tfMzRYWCB8IENLXzM2WFgpLAorCUNMSyhOVUxMLAkiYWVzMV9pY2siLAkmYWVzMV9pY2ssCUNLXzM0WFggfCBDS18zNlhYKSwKKwlDTEsoIm9tYXBfcm5nIiwJImljayIsCQkmcm5nX2ljaywJQ0tfMzRYWCB8IENLXzM2WFgpLAorCUNMSyhOVUxMLAkic2hhMTFfaWNrIiwJJnNoYTExX2ljaywJQ0tfMzRYWCB8IENLXzM2WFgpLAorCUNMSyhOVUxMLAkiZGVzMV9pY2siLAkmZGVzMV9pY2ssCUNLXzM0WFggfCBDS18zNlhYKSwKIAlDTEsoIm9tYXBkc3MiLAkiZHNzMV9mY2siLAkmZHNzMV9hbHdvbl9mY2tfMzQzMGVzMSwgQ0tfMzQzMEVTMSksCi0JQ0xLKCJvbWFwZHNzIiwJImRzczFfZmNrIiwJJmRzczFfYWx3b25fZmNrXzM0MzBlczIsIENLXzM0MzBFUzIgfCBDS19BTTM1WFgpLAorCUNMSygib21hcGRzcyIsCSJkc3MxX2ZjayIsCSZkc3MxX2Fsd29uX2Zja18zNDMwZXMyLCBDS18zNDMwRVMyUExVUyB8IENLX0FNMzVYWCB8IENLXzM2WFgpLAogCUNMSygib21hcGRzcyIsCSJ0dl9mY2siLAkmZHNzX3R2X2ZjaywJQ0tfM1hYWCksCiAJQ0xLKCJvbWFwZHNzIiwJInZpZGVvX2ZjayIsCSZkc3NfOTZtX2ZjaywJQ0tfM1hYWCksCiAJQ0xLKCJvbWFwZHNzIiwJImRzczJfZmNrIiwJJmRzczJfYWx3b25fZmNrLCBDS18zWFhYKSwKIAlDTEsoIm9tYXBkc3MiLAkiaWNrIiwJCSZkc3NfaWNrXzM0MzBlczEsCUNLXzM0MzBFUzEpLAotCUNMSygib21hcGRzcyIsCSJpY2siLAkJJmRzc19pY2tfMzQzMGVzMiwJQ0tfMzQzMEVTMiB8IENLX0FNMzVYWCksCi0JQ0xLKE5VTEwsCSJjYW1fbWNsayIsCSZjYW1fbWNsaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJjYW1faWNrIiwJJmNhbV9pY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkiY3NpMl85Nm1fZmNrIiwJJmNzaTJfOTZtX2ZjaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJ1c2Job3N0XzEyMG1fZmNrIiwgJnVzYmhvc3RfMTIwbV9mY2ssIENLXzM0MzBFUzIgfCBDS19BTTM1WFgpLAotCUNMSyhOVUxMLAkidXNiaG9zdF80OG1fZmNrIiwgJnVzYmhvc3RfNDhtX2ZjaywgQ0tfMzQzMEVTMiB8IENLX0FNMzVYWCksCi0JQ0xLKE5VTEwsCSJ1c2Job3N0X2ljayIsCSZ1c2Job3N0X2ljaywJQ0tfMzQzMEVTMiB8IENLX0FNMzVYWCksCi0JQ0xLKE5VTEwsCSJ1c2ltX2ZjayIsCSZ1c2ltX2ZjaywJQ0tfMzQzMEVTMiksCisJQ0xLKCJvbWFwZHNzIiwJImljayIsCQkmZHNzX2lja18zNDMwZXMyLAlDS18zNDMwRVMyUExVUyB8IENLX0FNMzVYWCB8IENLXzM2WFgpLAorCUNMSyhOVUxMLAkiY2FtX21jbGsiLAkmY2FtX21jbGssCUNLXzM0WFggfCBDS18zNlhYKSwKKwlDTEsoTlVMTCwJImNhbV9pY2siLAkmY2FtX2ljaywJQ0tfMzRYWCB8IENLXzM2WFgpLAorCUNMSyhOVUxMLAkiY3NpMl85Nm1fZmNrIiwJJmNzaTJfOTZtX2ZjaywJQ0tfMzRYWCB8IENLXzM2WFgpLAorCUNMSyhOVUxMLAkidXNiaG9zdF8xMjBtX2ZjayIsICZ1c2Job3N0XzEyMG1fZmNrLCBDS18zNDMwRVMyUExVUyB8IENLX0FNMzVYWCB8IENLXzM2WFgpLAorCUNMSygiZWhjaS1vbWFwLjAiLAkiaHNfZmNrIiwgJnVzYmhvc3RfMTIwbV9mY2ssIENLXzM0MzBFUzJQTFVTIHwgQ0tfQU0zNVhYIHwgQ0tfMzZYWCksCisJQ0xLKE5VTEwsCSJ1c2Job3N0XzQ4bV9mY2siLCAmdXNiaG9zdF80OG1fZmNrLCBDS18zNDMwRVMyUExVUyB8IENLX0FNMzVYWCB8IENLXzM2WFgpLAorCUNMSygiZWhjaS1vbWFwLjAiLAkiZnNfZmNrIiwgJnVzYmhvc3RfNDhtX2ZjaywgQ0tfMzQzMEVTMlBMVVMgfCBDS19BTTM1WFggfCBDS18zNlhYKSwKKwlDTEsoTlVMTCwJInVzYmhvc3RfaWNrIiwJJnVzYmhvc3RfaWNrLAlDS18zNDMwRVMyUExVUyB8IENLX0FNMzVYWCB8IENLXzM2WFgpLAorCUNMSygiZWhjaS1vbWFwLjAiLAkidXNiaG9zdF9pY2siLAkmdXNiaG9zdF9pY2ssCUNLXzM0MzBFUzJQTFVTIHwgQ0tfQU0zNVhYIHwgQ0tfMzZYWCksCisJQ0xLKE5VTEwsCSJ1c2ltX2ZjayIsCSZ1c2ltX2ZjaywJQ0tfMzQzMEVTMlBMVVMgfCBDS18zNlhYKSwKIAlDTEsoTlVMTCwJImdwdDFfZmNrIiwJJmdwdDFfZmNrLAlDS18zWFhYKSwKIAlDTEsoTlVMTCwJIndrdXBfMzJrX2ZjayIsCSZ3a3VwXzMya19mY2ssCUNLXzNYWFgpLAogCUNMSyhOVUxMLAkiZ3BpbzFfZGJjayIsCSZncGlvMV9kYmNrLAlDS18zWFhYKSwKIAlDTEsoIm9tYXBfd2R0IiwJImZjayIsCQkmd2R0Ml9mY2ssCUNLXzNYWFgpLAotCUNMSyhOVUxMLAkid2t1cF9sNF9pY2siLAkmd2t1cF9sNF9pY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkidXNpbV9pY2siLAkmdXNpbV9pY2ssCUNLXzM0MzBFUzIpLAorCUNMSyhOVUxMLAkid2t1cF9sNF9pY2siLAkmd2t1cF9sNF9pY2ssCUNLXzM0WFggfCBDS18zNlhYKSwKKwlDTEsoTlVMTCwJInVzaW1faWNrIiwJJnVzaW1faWNrLAlDS18zNDMwRVMyUExVUyB8IENLXzM2WFgpLAogCUNMSygib21hcF93ZHQiLAkiaWNrIiwJCSZ3ZHQyX2ljaywJQ0tfM1hYWCksCiAJQ0xLKE5VTEwsCSJ3ZHQxX2ljayIsCSZ3ZHQxX2ljaywJQ0tfM1hYWCksCiAJQ0xLKE5VTEwsCSJncGlvMV9pY2siLAkmZ3BpbzFfaWNrLAlDS18zWFhYKSwKQEAgLTM0MjQsOSArMzQzNyw5IEBACiAJQ0xLKE5VTEwsCSJhdGNsa19mY2siLAkmYXRjbGtfZmNrLAlDS18zWFhYKSwKIAlDTEsoTlVMTCwJInRyYWNlY2xrX3NyY19mY2siLCAmdHJhY2VjbGtfc3JjX2ZjaywgQ0tfM1hYWCksCiAJQ0xLKE5VTEwsCSJ0cmFjZWNsa19mY2siLAkmdHJhY2VjbGtfZmNrLAlDS18zWFhYKSwKLQlDTEsoTlVMTCwJInNyMV9mY2siLAkmc3IxX2ZjaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJzcjJfZmNrIiwJJnNyMl9mY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkic3JfbDRfaWNrIiwJJnNyX2w0X2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJzcjFfZmNrIiwJJnNyMV9mY2ssCUNLXzM0WFggfCBDS18zNlhYKSwKKwlDTEsoTlVMTCwJInNyMl9mY2siLAkmc3IyX2ZjaywJQ0tfMzRYWCB8IENLXzM2WFgpLAorCUNMSyhOVUxMLAkic3JfbDRfaWNrIiwJJnNyX2w0X2ljaywJQ0tfMzRYWCB8IENLXzM2WFgpLAogCUNMSyhOVUxMLAkic2VjdXJlXzMya19mY2siLCAmc2VjdXJlXzMya19mY2ssIENLXzNYWFgpLAogCUNMSyhOVUxMLAkiZ3B0MTJfZmNrIiwJJmdwdDEyX2ZjaywJQ0tfM1hYWCksCiAJQ0xLKE5VTEwsCSJ3ZHQxX2ZjayIsCSZ3ZHQxX2ZjaywJQ0tfM1hYWCksCkBAIC0zNDM3LDggKzM0NTAsOCBAQAogCUNMSygiZGF2aW5jaV9lbWFjIiwJInBoeV9jbGsiLAkmZW1hY19mY2ssCUNLX0FNMzVYWCksCiAJQ0xLKCJ2cGZlLWNhcHR1cmUiLAkibWFzdGVyIiwJJnZwZmVfaWNrLAlDS19BTTM1WFgpLAogCUNMSygidnBmZS1jYXB0dXJlIiwJInNsYXZlIiwJJnZwZmVfZmNrLAlDS19BTTM1WFgpLAotCUNMSygibXVzYl9oZHJjIiwJImljayIsCQkmaHNvdGd1c2JfaWNrX2FtMzV4eCwJQ0tfQU0zNVhYKSwKLQlDTEsoIm11c2JfaGRyYyIsCSJmY2siLAkJJmhzb3RndXNiX2Zja19hbTM1eHgsCUNLX0FNMzVYWCksCisJQ0xLKCJtdXNiLWFtMzV4IiwJImljayIsCQkmaHNvdGd1c2JfaWNrX2FtMzV4eCwJQ0tfQU0zNVhYKSwKKwlDTEsoIm11c2ItYW0zNXgiLAkiZmNrIiwJCSZoc290Z3VzYl9mY2tfYW0zNXh4LAlDS19BTTM1WFgpLAogCUNMSyhOVUxMLAkiaGVjY19jayIsCSZoZWNjX2NrLAlDS19BTTM1WFgpLAogCUNMSyhOVUxMLAkidWFydDRfaWNrIiwJJnVhcnQ0X2lja19hbTM1eHgsCUNLX0FNMzVYWCksCiB9OwpAQCAtMzQ0NywzOCArMzQ2MCwzNyBAQAogaW50IF9faW5pdCBvbWFwM3h4eF9jbGtfaW5pdCh2b2lkKQogewogCXN0cnVjdCBvbWFwX2NsayAqYzsKLQl1MzIgY3B1X2Nsa2ZsZyA9IENLXzNYWFg7CisJdTMyIGNwdV9jbGtmbGcgPSAwOwogCiAJaWYgKGNwdV9pc19vbWFwMzUxNygpKSB7Ci0JCWNwdV9tYXNrID0gUkFURV9JTl8zWFhYIHwgUkFURV9JTl8zNDMwRVMyUExVUzsKLQkJY3B1X2Nsa2ZsZyB8PSBDS18zNTE3OworCQljcHVfbWFzayA9IFJBVEVfSU5fMzRYWDsKKwkJY3B1X2Nsa2ZsZyA9IENLXzM1MTc7CiAJfSBlbHNlIGlmIChjcHVfaXNfb21hcDM1MDUoKSkgewotCQljcHVfbWFzayA9IFJBVEVfSU5fM1hYWCB8IFJBVEVfSU5fMzQzMEVTMlBMVVM7Ci0JCWNwdV9jbGtmbGcgfD0gQ0tfMzUwNTsKKwkJY3B1X21hc2sgPSBSQVRFX0lOXzM0WFg7CisJCWNwdV9jbGtmbGcgPSBDS18zNTA1OworCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAzNjMwKCkpIHsKKwkJY3B1X21hc2sgPSAoUkFURV9JTl8zNFhYIHwgUkFURV9JTl8zNlhYKTsKKwkJY3B1X2Nsa2ZsZyA9IENLXzM2WFg7CiAJfSBlbHNlIGlmIChjcHVfaXNfb21hcDM0eHgoKSkgewotCQljcHVfbWFzayA9IFJBVEVfSU5fM1hYWDsKLQkJY3B1X2Nsa2ZsZyB8PSBDS18zNDNYOwotCi0JCS8qCi0JCSAqIFVwZGF0ZSB0aGlzIGlmIHRoZXJlIGFyZSBmdXJ0aGVyIGNsb2NrIGNoYW5nZXMgYmV0d2VlbiBFUzIKLQkJICogYW5kIHByb2R1Y3Rpb24gcGFydHMKLQkJICovCiAJCWlmIChvbWFwX3JldigpID09IE9NQVAzNDMwX1JFVl9FUzFfMCkgewotCQkJLyogTm8gMzQzMEVTMS1vbmx5IHJhdGVzIGV4aXN0LCBzbyBubyBSQVRFX0lOXzM0MzBFUzEgKi8KLQkJCWNwdV9jbGtmbGcgfD0gQ0tfMzQzMEVTMTsKKwkJCWNwdV9tYXNrID0gUkFURV9JTl8zNDMwRVMxOworCQkJY3B1X2Nsa2ZsZyA9IENLXzM0MzBFUzE7CiAJCX0gZWxzZSB7Ci0JCQljcHVfbWFzayB8PSBSQVRFX0lOXzM0MzBFUzJQTFVTOwotCQkJY3B1X2Nsa2ZsZyB8PSBDS18zNDMwRVMyOworCQkJLyoKKwkJCSAqIEFzc3VtZSB0aGF0IGFueXRoaW5nIHRoYXQgd2UgaGF2ZW4ndCBtYXRjaGVkIHlldAorCQkJICogaGFzIDM0MzBFUzItdHlwZSBjbG9ja3MuCisJCQkgKi8KKwkJCWNwdV9tYXNrID0gUkFURV9JTl8zNDMwRVMyUExVUzsKKwkJCWNwdV9jbGtmbGcgPSBDS18zNDMwRVMyUExVUzsKIAkJfQorCX0gZWxzZSB7CisJCVdBUk4oMSwgImNsb2NrOiBjb3VsZCBub3QgaWRlbnRpZnkgT01BUDMgdmFyaWFudFxuIik7CiAJfQogCiAJaWYgKG9tYXAzX2hhc18xOTJtaHpfY2xrKCkpCiAJCW9tYXBfOTZtX2Fsd29uX2ZjayA9IG9tYXBfOTZtX2Fsd29uX2Zja18zNjMwOwogCiAJaWYgKGNwdV9pc19vbWFwMzYzMCgpKSB7Ci0JCWNwdV9tYXNrIHw9IFJBVEVfSU5fMzZYWDsKLQkJY3B1X2Nsa2ZsZyB8PSBDS18zNlhYOwotCiAJCS8qCiAJCSAqIFhYWCBUaGlzIHR5cGUgb2YgZHluYW1pYyByZXdyaXRpbmcgb2YgdGhlIGNsb2NrIHRyZWUgaXMKIAkJICogZGVwcmVjYXRlZCBhbmQgc2hvdWxkIGJlIHJldmlzZWQgc29vbi4KQEAgLTM1MjUsMTAgKzM1MzcsOSBAQAogCiAJcmVjYWxjdWxhdGVfcm9vdF9jbG9ja3MoKTsKIAotCXByaW50ayhLRVJOX0lORk8gIkNsb2NraW5nIHJhdGUgKENyeXN0YWwvQ29yZS9NUFUpOiAiCi0JICAgICAgICIlbGQuJTAxbGQvJWxkLyVsZCBNSHpcbiIsCi0JICAgICAgIChvc2Nfc3lzX2NrLnJhdGUgLyAxMDAwMDAwKSwgKG9zY19zeXNfY2sucmF0ZSAvIDEwMDAwMCkgJSAxMCwKLQkgICAgICAgKGNvcmVfY2sucmF0ZSAvIDEwMDAwMDApLCAoYXJtX2Zjay5yYXRlIC8gMTAwMDAwMCkpOworCXByX2luZm8oIkNsb2NraW5nIHJhdGUgKENyeXN0YWwvQ29yZS9NUFUpOiAlbGQuJTAxbGQvJWxkLyVsZCBNSHpcbiIsCisJCShvc2Nfc3lzX2NrLnJhdGUgLyAxMDAwMDAwKSwgKG9zY19zeXNfY2sucmF0ZSAvIDEwMDAwMCkgJSAxMCwKKwkJKGNvcmVfY2sucmF0ZSAvIDEwMDAwMDApLCAoYXJtX2Zjay5yYXRlIC8gMTAwMDAwMCkpOwogCiAJLyoKIAkgKiBPbmx5IGVuYWJsZSB0aG9zZSBjbG9ja3Mgd2Ugd2lsbCBuZWVkLCBsZXQgdGhlIGRyaXZlcnMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2s0NHh4X2RhdGEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2s0NHh4X2RhdGEuYwppbmRleCAxNTk5ODM2Li5lOGNiMzJmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrNDR4eF9kYXRhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazQ0eHhfZGF0YS5jCkBAIC0zMCwxMSArMzAsMTggQEAKIAogI2luY2x1ZGUgImNsb2NrLmgiCiAjaW5jbHVkZSAiY2xvY2s0NHh4LmgiCi0jaW5jbHVkZSAiY20uaCIKKyNpbmNsdWRlICJjbTFfNDR4eC5oIgorI2luY2x1ZGUgImNtMl80NHh4LmgiCiAjaW5jbHVkZSAiY20tcmVnYml0cy00NHh4LmgiCi0jaW5jbHVkZSAicHJtLmgiCisjaW5jbHVkZSAicHJtNDR4eC5oIgorI2luY2x1ZGUgInBybTQ0eHguaCIKICNpbmNsdWRlICJwcm0tcmVnYml0cy00NHh4LmgiCiAjaW5jbHVkZSAiY29udHJvbC5oIgorI2luY2x1ZGUgInNjcm00NHh4LmgiCisKKy8qIE9NQVA0IG1vZHVsZW1vZGUgY29udHJvbCAqLworI2RlZmluZSBPTUFQNDQzMF9NT0RVTEVNT0RFX0hXQ1RSTAkJCTAKKyNkZWZpbmUgT01BUDQ0MzBfTU9EVUxFTU9ERV9TV0NUUkwJCQkxCiAKIC8qIFJvb3QgY2xvY2tzICovCiAKQEAgLTQ3LDcgKzU0LDkgQEAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHBhZF9jbGtzX2NrID0gewogCS5uYW1lCQk9ICJwYWRfY2xrc19jayIsCiAJLnJhdGUJCT0gMTIwMDAwMDAsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLm9wcyAgICAgICAgICAgID0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5lbmFibGVfcmVnICAgICA9IE9NQVA0NDMwX0NNX0NMS1NFTF9BQkUsCisJLmVuYWJsZV9iaXQgICAgID0gT01BUDQ0MzBfUEFEX0NMS1NfR0FURV9TSElGVCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHBhZF9zbGltYnVzX2NvcmVfY2xrc19jayA9IHsKQEAgLTY1LDcgKzc0LDkgQEAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHNsaW1idXNfY2xrID0gewogCS5uYW1lCQk9ICJzbGltYnVzX2NsayIsCiAJLnJhdGUJCT0gMTIwMDAwMDAsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLm9wcyAgICAgICAgICAgID0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5lbmFibGVfcmVnICAgICA9IE9NQVA0NDMwX0NNX0NMS1NFTF9BQkUsCisJLmVuYWJsZV9iaXQgICAgID0gT01BUDQ0MzBfU0xJTUJVU19DTEtfR0FURV9TSElGVCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHN5c18zMmtfY2sgPSB7CkBAIC0yNjUsMTggKzI3Niw3MSBAQAogCS5zZXRfcmF0ZQk9ICZvbWFwM19ub25jb3JlX2RwbGxfc2V0X3JhdGUsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayBkcGxsX2FiZV9tMngyX2NrID0gewotCS5uYW1lCQk9ICJkcGxsX2FiZV9tMngyX2NrIiwKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRwbGxfYWJlX3gyX2NrID0geworCS5uYW1lCQk9ICJkcGxsX2FiZV94Ml9jayIsCiAJLnBhcmVudAkJPSAmZHBsbF9hYmVfY2ssCiAJLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKKwkucmVjYWxjCQk9ICZvbWFwM19jbGtvdXR4Ml9yZWNhbGMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGRpdjMxXzF0bzMxX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fNDQzMCB9LAorCXsgLmRpdiA9IDIsIC52YWwgPSAyLCAuZmxhZ3MgPSBSQVRFX0lOXzQ0MzAgfSwKKwl7IC5kaXYgPSAzLCAudmFsID0gMywgLmZsYWdzID0gUkFURV9JTl80NDMwIH0sCisJeyAuZGl2ID0gNCwgLnZhbCA9IDQsIC5mbGFncyA9IFJBVEVfSU5fNDQzMCB9LAorCXsgLmRpdiA9IDUsIC52YWwgPSA1LCAuZmxhZ3MgPSBSQVRFX0lOXzQ0MzAgfSwKKwl7IC5kaXYgPSA2LCAudmFsID0gNiwgLmZsYWdzID0gUkFURV9JTl80NDMwIH0sCisJeyAuZGl2ID0gNywgLnZhbCA9IDcsIC5mbGFncyA9IFJBVEVfSU5fNDQzMCB9LAorCXsgLmRpdiA9IDgsIC52YWwgPSA4LCAuZmxhZ3MgPSBSQVRFX0lOXzQ0MzAgfSwKKwl7IC5kaXYgPSA5LCAudmFsID0gOSwgLmZsYWdzID0gUkFURV9JTl80NDMwIH0sCisJeyAuZGl2ID0gMTAsIC52YWwgPSAxMCwgLmZsYWdzID0gUkFURV9JTl80NDMwIH0sCisJeyAuZGl2ID0gMTEsIC52YWwgPSAxMSwgLmZsYWdzID0gUkFURV9JTl80NDMwIH0sCisJeyAuZGl2ID0gMTIsIC52YWwgPSAxMiwgLmZsYWdzID0gUkFURV9JTl80NDMwIH0sCisJeyAuZGl2ID0gMTMsIC52YWwgPSAxMywgLmZsYWdzID0gUkFURV9JTl80NDMwIH0sCisJeyAuZGl2ID0gMTQsIC52YWwgPSAxNCwgLmZsYWdzID0gUkFURV9JTl80NDMwIH0sCisJeyAuZGl2ID0gMTUsIC52YWwgPSAxNSwgLmZsYWdzID0gUkFURV9JTl80NDMwIH0sCisJeyAuZGl2ID0gMTYsIC52YWwgPSAxNiwgLmZsYWdzID0gUkFURV9JTl80NDMwIH0sCisJeyAuZGl2ID0gMTcsIC52YWwgPSAxNywgLmZsYWdzID0gUkFURV9JTl80NDMwIH0sCisJeyAuZGl2ID0gMTgsIC52YWwgPSAxOCwgLmZsYWdzID0gUkFURV9JTl80NDMwIH0sCisJeyAuZGl2ID0gMTksIC52YWwgPSAxOSwgLmZsYWdzID0gUkFURV9JTl80NDMwIH0sCisJeyAuZGl2ID0gMjAsIC52YWwgPSAyMCwgLmZsYWdzID0gUkFURV9JTl80NDMwIH0sCisJeyAuZGl2ID0gMjEsIC52YWwgPSAyMSwgLmZsYWdzID0gUkFURV9JTl80NDMwIH0sCisJeyAuZGl2ID0gMjIsIC52YWwgPSAyMiwgLmZsYWdzID0gUkFURV9JTl80NDMwIH0sCisJeyAuZGl2ID0gMjMsIC52YWwgPSAyMywgLmZsYWdzID0gUkFURV9JTl80NDMwIH0sCisJeyAuZGl2ID0gMjQsIC52YWwgPSAyNCwgLmZsYWdzID0gUkFURV9JTl80NDMwIH0sCisJeyAuZGl2ID0gMjUsIC52YWwgPSAyNSwgLmZsYWdzID0gUkFURV9JTl80NDMwIH0sCisJeyAuZGl2ID0gMjYsIC52YWwgPSAyNiwgLmZsYWdzID0gUkFURV9JTl80NDMwIH0sCisJeyAuZGl2ID0gMjcsIC52YWwgPSAyNywgLmZsYWdzID0gUkFURV9JTl80NDMwIH0sCisJeyAuZGl2ID0gMjgsIC52YWwgPSAyOCwgLmZsYWdzID0gUkFURV9JTl80NDMwIH0sCisJeyAuZGl2ID0gMjksIC52YWwgPSAyOSwgLmZsYWdzID0gUkFURV9JTl80NDMwIH0sCisJeyAuZGl2ID0gMzAsIC52YWwgPSAzMCwgLmZsYWdzID0gUkFURV9JTl80NDMwIH0sCisJeyAuZGl2ID0gMzEsIC52YWwgPSAzMSwgLmZsYWdzID0gUkFURV9JTl80NDMwIH0sCisJeyAuZGl2ID0gMCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZHBsbF9hYmVfbTJ4Ml9kaXZbXSA9IHsKKwl7IC5wYXJlbnQgPSAmZHBsbF9hYmVfeDJfY2ssIC5yYXRlcyA9IGRpdjMxXzF0bzMxX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZHBsbF9hYmVfbTJ4Ml9jayA9IHsKKwkubmFtZQkJPSAiZHBsbF9hYmVfbTJ4Ml9jayIsCisJLnBhcmVudAkJPSAmZHBsbF9hYmVfeDJfY2ssCisJLmNsa3NlbAkJPSBkcGxsX2FiZV9tMngyX2RpdiwKKwkuY2xrc2VsX3JlZwk9IE9NQVA0NDMwX0NNX0RJVl9NMl9EUExMX0FCRSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQNDQzMF9EUExMX0NMS09VVF9ESVZfTUFTSywKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBhYmVfMjRtX2ZjbGsgPSB7CiAJLm5hbWUJCT0gImFiZV8yNG1fZmNsayIsCiAJLnBhcmVudAkJPSAmZHBsbF9hYmVfbTJ4Ml9jaywKIAkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorCS5maXhlZF9kaXYJPSA4LAorCS5yZWNhbGMJCT0gJm9tYXBfZml4ZWRfZGl2aXNvcl9yZWNhbGMsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGRpdjNfMXRvNF9yYXRlc1tdID0gewpAQCAtMzI2LDUwICszOTAsMTAgQEAKIAkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlLAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBkaXYzMV8xdG8zMV9yYXRlc1tdID0gewotCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzQ0MzAgfSwKLQl7IC5kaXYgPSAyLCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl80NDMwIH0sCi0JeyAuZGl2ID0gMywgLnZhbCA9IDMsIC5mbGFncyA9IFJBVEVfSU5fNDQzMCB9LAotCXsgLmRpdiA9IDQsIC52YWwgPSA0LCAuZmxhZ3MgPSBSQVRFX0lOXzQ0MzAgfSwKLQl7IC5kaXYgPSA1LCAudmFsID0gNSwgLmZsYWdzID0gUkFURV9JTl80NDMwIH0sCi0JeyAuZGl2ID0gNiwgLnZhbCA9IDYsIC5mbGFncyA9IFJBVEVfSU5fNDQzMCB9LAotCXsgLmRpdiA9IDcsIC52YWwgPSA3LCAuZmxhZ3MgPSBSQVRFX0lOXzQ0MzAgfSwKLQl7IC5kaXYgPSA4LCAudmFsID0gOCwgLmZsYWdzID0gUkFURV9JTl80NDMwIH0sCi0JeyAuZGl2ID0gOSwgLnZhbCA9IDksIC5mbGFncyA9IFJBVEVfSU5fNDQzMCB9LAotCXsgLmRpdiA9IDEwLCAudmFsID0gMTAsIC5mbGFncyA9IFJBVEVfSU5fNDQzMCB9LAotCXsgLmRpdiA9IDExLCAudmFsID0gMTEsIC5mbGFncyA9IFJBVEVfSU5fNDQzMCB9LAotCXsgLmRpdiA9IDEyLCAudmFsID0gMTIsIC5mbGFncyA9IFJBVEVfSU5fNDQzMCB9LAotCXsgLmRpdiA9IDEzLCAudmFsID0gMTMsIC5mbGFncyA9IFJBVEVfSU5fNDQzMCB9LAotCXsgLmRpdiA9IDE0LCAudmFsID0gMTQsIC5mbGFncyA9IFJBVEVfSU5fNDQzMCB9LAotCXsgLmRpdiA9IDE1LCAudmFsID0gMTUsIC5mbGFncyA9IFJBVEVfSU5fNDQzMCB9LAotCXsgLmRpdiA9IDE2LCAudmFsID0gMTYsIC5mbGFncyA9IFJBVEVfSU5fNDQzMCB9LAotCXsgLmRpdiA9IDE3LCAudmFsID0gMTcsIC5mbGFncyA9IFJBVEVfSU5fNDQzMCB9LAotCXsgLmRpdiA9IDE4LCAudmFsID0gMTgsIC5mbGFncyA9IFJBVEVfSU5fNDQzMCB9LAotCXsgLmRpdiA9IDE5LCAudmFsID0gMTksIC5mbGFncyA9IFJBVEVfSU5fNDQzMCB9LAotCXsgLmRpdiA9IDIwLCAudmFsID0gMjAsIC5mbGFncyA9IFJBVEVfSU5fNDQzMCB9LAotCXsgLmRpdiA9IDIxLCAudmFsID0gMjEsIC5mbGFncyA9IFJBVEVfSU5fNDQzMCB9LAotCXsgLmRpdiA9IDIyLCAudmFsID0gMjIsIC5mbGFncyA9IFJBVEVfSU5fNDQzMCB9LAotCXsgLmRpdiA9IDIzLCAudmFsID0gMjMsIC5mbGFncyA9IFJBVEVfSU5fNDQzMCB9LAotCXsgLmRpdiA9IDI0LCAudmFsID0gMjQsIC5mbGFncyA9IFJBVEVfSU5fNDQzMCB9LAotCXsgLmRpdiA9IDI1LCAudmFsID0gMjUsIC5mbGFncyA9IFJBVEVfSU5fNDQzMCB9LAotCXsgLmRpdiA9IDI2LCAudmFsID0gMjYsIC5mbGFncyA9IFJBVEVfSU5fNDQzMCB9LAotCXsgLmRpdiA9IDI3LCAudmFsID0gMjcsIC5mbGFncyA9IFJBVEVfSU5fNDQzMCB9LAotCXsgLmRpdiA9IDI4LCAudmFsID0gMjgsIC5mbGFncyA9IFJBVEVfSU5fNDQzMCB9LAotCXsgLmRpdiA9IDI5LCAudmFsID0gMjksIC5mbGFncyA9IFJBVEVfSU5fNDQzMCB9LAotCXsgLmRpdiA9IDMwLCAudmFsID0gMzAsIC5mbGFncyA9IFJBVEVfSU5fNDQzMCB9LAotCXsgLmRpdiA9IDMxLCAudmFsID0gMzEsIC5mbGFncyA9IFJBVEVfSU5fNDQzMCB9LAotCXsgLmRpdiA9IDAgfSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGRwbGxfYWJlX20zX2RpdltdID0gewotCXsgLnBhcmVudCA9ICZkcGxsX2FiZV9jaywgLnJhdGVzID0gZGl2MzFfMXRvMzFfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSBOVUxMIH0sCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBkcGxsX2FiZV9tM19jayA9IHsKLQkubmFtZQkJPSAiZHBsbF9hYmVfbTNfY2siLAotCS5wYXJlbnQJCT0gJmRwbGxfYWJlX2NrLAotCS5jbGtzZWwJCT0gZHBsbF9hYmVfbTNfZGl2LAorc3RhdGljIHN0cnVjdCBjbGsgZHBsbF9hYmVfbTN4Ml9jayA9IHsKKwkubmFtZQkJPSAiZHBsbF9hYmVfbTN4Ml9jayIsCisJLnBhcmVudAkJPSAmZHBsbF9hYmVfeDJfY2ssCisJLmNsa3NlbAkJPSBkcGxsX2FiZV9tMngyX2RpdiwKIAkuY2xrc2VsX3JlZwk9IE9NQVA0NDMwX0NNX0RJVl9NM19EUExMX0FCRSwKIAkuY2xrc2VsX21hc2sJPSBPTUFQNDQzMF9EUExMX0NMS09VVEhJRl9ESVZfTUFTSywKIAkub3BzCQk9ICZjbGtvcHNfbnVsbCwKQEAgLTM4MCw3ICs0MDQsNyBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBjb3JlX2hzZF9ieXBfY2xrX211eF9zZWxbXSA9IHsKIAl7IC5wYXJlbnQgPSAmc3lzX2Nsa2luX2NrLCAucmF0ZXMgPSBkaXZfMV8wX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gJmRwbGxfYWJlX20zX2NrLCAucmF0ZXMgPSBkaXZfMV8xX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJmRwbGxfYWJlX20zeDJfY2ssIC5yYXRlcyA9IGRpdl8xXzFfcmF0ZXMgfSwKIAl7IC5wYXJlbnQgPSBOVUxMIH0sCiB9OwogCkBAIC00MjQsMTUgKzQ0OCwyMiBAQAogCS5yZWNhbGMJCT0gJm9tYXAzX2RwbGxfcmVjYWxjLAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZHBsbF9jb3JlX202X2RpdltdID0gewotCXsgLnBhcmVudCA9ICZkcGxsX2NvcmVfY2ssIC5yYXRlcyA9IGRpdjMxXzF0bzMxX3JhdGVzIH0sCitzdGF0aWMgc3RydWN0IGNsayBkcGxsX2NvcmVfeDJfY2sgPSB7CisJLm5hbWUJCT0gImRwbGxfY29yZV94Ml9jayIsCisJLnBhcmVudAkJPSAmZHBsbF9jb3JlX2NrLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5yZWNhbGMJCT0gJm9tYXAzX2Nsa291dHgyX3JlY2FsYywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGRwbGxfY29yZV9tNngyX2RpdltdID0geworCXsgLnBhcmVudCA9ICZkcGxsX2NvcmVfeDJfY2ssIC5yYXRlcyA9IGRpdjMxXzF0bzMxX3JhdGVzIH0sCiAJeyAucGFyZW50ID0gTlVMTCB9LAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGsgZHBsbF9jb3JlX202X2NrID0gewotCS5uYW1lCQk9ICJkcGxsX2NvcmVfbTZfY2siLAotCS5wYXJlbnQJCT0gJmRwbGxfY29yZV9jaywKLQkuY2xrc2VsCQk9IGRwbGxfY29yZV9tNl9kaXYsCitzdGF0aWMgc3RydWN0IGNsayBkcGxsX2NvcmVfbTZ4Ml9jayA9IHsKKwkubmFtZQkJPSAiZHBsbF9jb3JlX202eDJfY2siLAorCS5wYXJlbnQJCT0gJmRwbGxfY29yZV94Ml9jaywKKwkuY2xrc2VsCQk9IGRwbGxfY29yZV9tNngyX2RpdiwKIAkuY2xrc2VsX3JlZwk9IE9NQVA0NDMwX0NNX0RJVl9NNl9EUExMX0NPUkUsCiAJLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfSFNESVZJREVSX0NMS09VVDNfRElWX01BU0ssCiAJLm9wcwkJPSAmY2xrb3BzX251bGwsCkBAIC00NDMsNyArNDc0LDcgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZGJnY2xrX211eF9zZWxbXSA9IHsKIAl7IC5wYXJlbnQgPSAmc3lzX2Nsa2luX2NrLCAucmF0ZXMgPSBkaXZfMV8wX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gJmRwbGxfY29yZV9tNl9jaywgLnJhdGVzID0gZGl2XzFfMV9yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZkcGxsX2NvcmVfbTZ4Ml9jaywgLnJhdGVzID0gZGl2XzFfMV9yYXRlcyB9LAogCXsgLnBhcmVudCA9IE5VTEwgfSwKIH07CiAKQEAgLTQ1NCwxMCArNDg1LDE1IEBACiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGRwbGxfY29yZV9tMl9kaXZbXSA9IHsKKwl7IC5wYXJlbnQgPSAmZHBsbF9jb3JlX2NrLCAucmF0ZXMgPSBkaXYzMV8xdG8zMV9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGxfY29yZV9tMl9jayA9IHsKIAkubmFtZQkJPSAiZHBsbF9jb3JlX20yX2NrIiwKIAkucGFyZW50CQk9ICZkcGxsX2NvcmVfY2ssCi0JLmNsa3NlbAkJPSBkcGxsX2NvcmVfbTZfZGl2LAorCS5jbGtzZWwJCT0gZHBsbF9jb3JlX20yX2RpdiwKIAkuY2xrc2VsX3JlZwk9IE9NQVA0NDMwX0NNX0RJVl9NMl9EUExMX0NPUkUsCiAJLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfRFBMTF9DTEtPVVRfRElWX01BU0ssCiAJLm9wcwkJPSAmY2xrb3BzX251bGwsCkBAIC00NzAsMTMgKzUwNiwxNCBAQAogCS5uYW1lCQk9ICJkZHJwaHlfY2siLAogCS5wYXJlbnQJCT0gJmRwbGxfY29yZV9tMl9jaywKIAkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorCS5maXhlZF9kaXYJPSAyLAorCS5yZWNhbGMJCT0gJm9tYXBfZml4ZWRfZGl2aXNvcl9yZWNhbGMsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayBkcGxsX2NvcmVfbTVfY2sgPSB7Ci0JLm5hbWUJCT0gImRwbGxfY29yZV9tNV9jayIsCi0JLnBhcmVudAkJPSAmZHBsbF9jb3JlX2NrLAotCS5jbGtzZWwJCT0gZHBsbF9jb3JlX202X2RpdiwKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRwbGxfY29yZV9tNXgyX2NrID0geworCS5uYW1lCQk9ICJkcGxsX2NvcmVfbTV4Ml9jayIsCisJLnBhcmVudAkJPSAmZHBsbF9jb3JlX3gyX2NrLAorCS5jbGtzZWwJCT0gZHBsbF9jb3JlX202eDJfZGl2LAogCS5jbGtzZWxfcmVnCT0gT01BUDQ0MzBfQ01fRElWX001X0RQTExfQ09SRSwKIAkuY2xrc2VsX21hc2sJPSBPTUFQNDQzMF9IU0RJVklERVJfQ0xLT1VUMl9ESVZfTUFTSywKIAkub3BzCQk9ICZjbGtvcHNfbnVsbCwKQEAgLTQ4NiwxMyArNTIzLDEzIEBACiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkaXZfY29yZV9kaXZbXSA9IHsKLQl7IC5wYXJlbnQgPSAmZHBsbF9jb3JlX201X2NrLCAucmF0ZXMgPSBkaXYyXzF0bzJfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmZHBsbF9jb3JlX201eDJfY2ssIC5yYXRlcyA9IGRpdjJfMXRvMl9yYXRlcyB9LAogCXsgLnBhcmVudCA9IE5VTEwgfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGRpdl9jb3JlX2NrID0gewogCS5uYW1lCQk9ICJkaXZfY29yZV9jayIsCi0JLnBhcmVudAkJPSAmZHBsbF9jb3JlX201X2NrLAorCS5wYXJlbnQJCT0gJmRwbGxfY29yZV9tNXgyX2NrLAogCS5jbGtzZWwJCT0gZGl2X2NvcmVfZGl2LAogCS5jbGtzZWxfcmVnCT0gT01BUDQ0MzBfQ01fQ0xLU0VMX0NPUkUsCiAJLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfQ0xLU0VMX0NPUkVfTUFTSywKQEAgLTUxMSwxMyArNTQ4LDEzIEBACiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkaXZfaXZhX2hzX2Nsa19kaXZbXSA9IHsKLQl7IC5wYXJlbnQgPSAmZHBsbF9jb3JlX201X2NrLCAucmF0ZXMgPSBkaXY0XzF0bzhfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmZHBsbF9jb3JlX201eDJfY2ssIC5yYXRlcyA9IGRpdjRfMXRvOF9yYXRlcyB9LAogCXsgLnBhcmVudCA9IE5VTEwgfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGRpdl9pdmFfaHNfY2xrID0gewogCS5uYW1lCQk9ICJkaXZfaXZhX2hzX2NsayIsCi0JLnBhcmVudAkJPSAmZHBsbF9jb3JlX201X2NrLAorCS5wYXJlbnQJCT0gJmRwbGxfY29yZV9tNXgyX2NrLAogCS5jbGtzZWwJCT0gZGl2X2l2YV9oc19jbGtfZGl2LAogCS5jbGtzZWxfcmVnCT0gT01BUDQ0MzBfQ01fQllQQ0xLX0RQTExfSVZBLAogCS5jbGtzZWxfbWFzawk9IE9NQVA0NDMwX0NMS1NFTF8wXzFfTUFTSywKQEAgLTUyOSw3ICs1NjYsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBkaXZfbXB1X2hzX2NsayA9IHsKIAkubmFtZQkJPSAiZGl2X21wdV9oc19jbGsiLAotCS5wYXJlbnQJCT0gJmRwbGxfY29yZV9tNV9jaywKKwkucGFyZW50CQk9ICZkcGxsX2NvcmVfbTV4Ml9jaywKIAkuY2xrc2VsCQk9IGRpdl9pdmFfaHNfY2xrX2RpdiwKIAkuY2xrc2VsX3JlZwk9IE9NQVA0NDMwX0NNX0JZUENMS19EUExMX01QVSwKIAkuY2xrc2VsX21hc2sJPSBPTUFQNDQzMF9DTEtTRUxfMF8xX01BU0ssCkBAIC01MzksMTAgKzU3NiwxMCBAQAogCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayBkcGxsX2NvcmVfbTRfY2sgPSB7Ci0JLm5hbWUJCT0gImRwbGxfY29yZV9tNF9jayIsCi0JLnBhcmVudAkJPSAmZHBsbF9jb3JlX2NrLAotCS5jbGtzZWwJCT0gZHBsbF9jb3JlX202X2RpdiwKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRwbGxfY29yZV9tNHgyX2NrID0geworCS5uYW1lCQk9ICJkcGxsX2NvcmVfbTR4Ml9jayIsCisJLnBhcmVudAkJPSAmZHBsbF9jb3JlX3gyX2NrLAorCS5jbGtzZWwJCT0gZHBsbF9jb3JlX202eDJfZGl2LAogCS5jbGtzZWxfcmVnCT0gT01BUDQ0MzBfQ01fRElWX000X0RQTExfQ09SRSwKIAkuY2xrc2VsX21hc2sJPSBPTUFQNDQzMF9IU0RJVklERVJfQ0xLT1VUMV9ESVZfTUFTSywKIAkub3BzCQk9ICZjbGtvcHNfbnVsbCwKQEAgLTU1MywxNSArNTkwLDIxIEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGRsbF9jbGtfZGl2X2NrID0gewogCS5uYW1lCQk9ICJkbGxfY2xrX2Rpdl9jayIsCi0JLnBhcmVudAkJPSAmZHBsbF9jb3JlX200X2NrLAorCS5wYXJlbnQJCT0gJmRwbGxfY29yZV9tNHgyX2NrLAogCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCisJLmZpeGVkX2Rpdgk9IDIsCisJLnJlY2FsYwkJPSAmb21hcF9maXhlZF9kaXZpc29yX3JlY2FsYywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGRwbGxfYWJlX20yX2RpdltdID0geworCXsgLnBhcmVudCA9ICZkcGxsX2FiZV9jaywgLnJhdGVzID0gZGl2MzFfMXRvMzFfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0sCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBkcGxsX2FiZV9tMl9jayA9IHsKIAkubmFtZQkJPSAiZHBsbF9hYmVfbTJfY2siLAogCS5wYXJlbnQJCT0gJmRwbGxfYWJlX2NrLAotCS5jbGtzZWwJCT0gZHBsbF9hYmVfbTNfZGl2LAorCS5jbGtzZWwJCT0gZHBsbF9hYmVfbTJfZGl2LAogCS5jbGtzZWxfcmVnCT0gT01BUDQ0MzBfQ01fRElWX00yX0RQTExfQUJFLAogCS5jbGtzZWxfbWFzawk9IE9NQVA0NDMwX0RQTExfQ0xLT1VUX0RJVl9NQVNLLAogCS5vcHMJCT0gJmNsa29wc19udWxsLApAQCAtNTcwLDIyICs2MTMsMjQgQEAKIAkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlLAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGsgZHBsbF9jb3JlX20zX2NrID0gewotCS5uYW1lCQk9ICJkcGxsX2NvcmVfbTNfY2siLAotCS5wYXJlbnQJCT0gJmRwbGxfY29yZV9jaywKLQkuY2xrc2VsCQk9IGRwbGxfY29yZV9tNl9kaXYsCitzdGF0aWMgc3RydWN0IGNsayBkcGxsX2NvcmVfbTN4Ml9jayA9IHsKKwkubmFtZQkJPSAiZHBsbF9jb3JlX20zeDJfY2siLAorCS5wYXJlbnQJCT0gJmRwbGxfY29yZV94Ml9jaywKKwkuY2xrc2VsCQk9IGRwbGxfY29yZV9tNngyX2RpdiwKIAkuY2xrc2VsX3JlZwk9IE9NQVA0NDMwX0NNX0RJVl9NM19EUExMX0NPUkUsCiAJLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfRFBMTF9DTEtPVVRISUZfRElWX01BU0ssCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTV9ESVZfTTNfRFBMTF9DT1JFLAorCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfRFBMTF9DTEtPVVRISUZfR0FURV9DVFJMX1NISUZULAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiAJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCiAJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGxfY29yZV9tN19jayA9IHsKLQkubmFtZQkJPSAiZHBsbF9jb3JlX203X2NrIiwKLQkucGFyZW50CQk9ICZkcGxsX2NvcmVfY2ssCi0JLmNsa3NlbAkJPSBkcGxsX2NvcmVfbTZfZGl2LAorc3RhdGljIHN0cnVjdCBjbGsgZHBsbF9jb3JlX203eDJfY2sgPSB7CisJLm5hbWUJCT0gImRwbGxfY29yZV9tN3gyX2NrIiwKKwkucGFyZW50CQk9ICZkcGxsX2NvcmVfeDJfY2ssCisJLmNsa3NlbAkJPSBkcGxsX2NvcmVfbTZ4Ml9kaXYsCiAJLmNsa3NlbF9yZWcJPSBPTUFQNDQzMF9DTV9ESVZfTTdfRFBMTF9DT1JFLAogCS5jbGtzZWxfbWFzawk9IE9NQVA0NDMwX0hTRElWSURFUl9DTEtPVVQ0X0RJVl9NQVNLLAogCS5vcHMJCT0gJmNsa29wc19udWxsLApAQCAtNjAzLDggKzY0OCwxMiBAQAogc3RhdGljIHN0cnVjdCBjbGsgaXZhX2hzZF9ieXBfY2xrX211eF9jayA9IHsKIAkubmFtZQkJPSAiaXZhX2hzZF9ieXBfY2xrX211eF9jayIsCiAJLnBhcmVudAkJPSAmc3lzX2Nsa2luX2NrLAorCS5jbGtzZWwJCT0gaXZhX2hzZF9ieXBfY2xrX211eF9zZWwsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVA0NDMwX0NNX0NMS1NFTF9EUExMX0lWQSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQNDQzMF9EUExMX0JZUF9DTEtTRUxfTUFTSywKIAkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiB9OwogCiAvKiBEUExMX0lWQSAqLwpAQCAtNjM4LDE1ICs2ODcsMjIgQEAKIAkuc2V0X3JhdGUJPSAmb21hcDNfbm9uY29yZV9kcGxsX3NldF9yYXRlLAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZHBsbF9pdmFfbTRfZGl2W10gPSB7Ci0JeyAucGFyZW50ID0gJmRwbGxfaXZhX2NrLCAucmF0ZXMgPSBkaXYzMV8xdG8zMV9yYXRlcyB9LAorc3RhdGljIHN0cnVjdCBjbGsgZHBsbF9pdmFfeDJfY2sgPSB7CisJLm5hbWUJCT0gImRwbGxfaXZhX3gyX2NrIiwKKwkucGFyZW50CQk9ICZkcGxsX2l2YV9jaywKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucmVjYWxjCQk9ICZvbWFwM19jbGtvdXR4Ml9yZWNhbGMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkcGxsX2l2YV9tNHgyX2RpdltdID0geworCXsgLnBhcmVudCA9ICZkcGxsX2l2YV94Ml9jaywgLnJhdGVzID0gZGl2MzFfMXRvMzFfcmF0ZXMgfSwKIAl7IC5wYXJlbnQgPSBOVUxMIH0sCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayBkcGxsX2l2YV9tNF9jayA9IHsKLQkubmFtZQkJPSAiZHBsbF9pdmFfbTRfY2siLAotCS5wYXJlbnQJCT0gJmRwbGxfaXZhX2NrLAotCS5jbGtzZWwJCT0gZHBsbF9pdmFfbTRfZGl2LAorc3RhdGljIHN0cnVjdCBjbGsgZHBsbF9pdmFfbTR4Ml9jayA9IHsKKwkubmFtZQkJPSAiZHBsbF9pdmFfbTR4Ml9jayIsCisJLnBhcmVudAkJPSAmZHBsbF9pdmFfeDJfY2ssCisJLmNsa3NlbAkJPSBkcGxsX2l2YV9tNHgyX2RpdiwKIAkuY2xrc2VsX3JlZwk9IE9NQVA0NDMwX0NNX0RJVl9NNF9EUExMX0lWQSwKIAkuY2xrc2VsX21hc2sJPSBPTUFQNDQzMF9IU0RJVklERVJfQ0xLT1VUMV9ESVZfTUFTSywKIAkub3BzCQk9ICZjbGtvcHNfbnVsbCwKQEAgLTY1NSwxMCArNzExLDEwIEBACiAJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGxfaXZhX201X2NrID0gewotCS5uYW1lCQk9ICJkcGxsX2l2YV9tNV9jayIsCi0JLnBhcmVudAkJPSAmZHBsbF9pdmFfY2ssCi0JLmNsa3NlbAkJPSBkcGxsX2l2YV9tNF9kaXYsCitzdGF0aWMgc3RydWN0IGNsayBkcGxsX2l2YV9tNXgyX2NrID0geworCS5uYW1lCQk9ICJkcGxsX2l2YV9tNXgyX2NrIiwKKwkucGFyZW50CQk9ICZkcGxsX2l2YV94Ml9jaywKKwkuY2xrc2VsCQk9IGRwbGxfaXZhX200eDJfZGl2LAogCS5jbGtzZWxfcmVnCT0gT01BUDQ0MzBfQ01fRElWX001X0RQTExfSVZBLAogCS5jbGtzZWxfbWFzawk9IE9NQVA0NDMwX0hTRElWSURFUl9DTEtPVVQyX0RJVl9NQVNLLAogCS5vcHMJCT0gJmNsa29wc19udWxsLApAQCAtNzE3LDkgKzc3MywxMCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBwZXJfaHNfY2xrX2Rpdl9jayA9IHsKIAkubmFtZQkJPSAicGVyX2hzX2Nsa19kaXZfY2siLAotCS5wYXJlbnQJCT0gJmRwbGxfYWJlX20zX2NrLAorCS5wYXJlbnQJCT0gJmRwbGxfYWJlX20zeDJfY2ssCiAJLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKKwkuZml4ZWRfZGl2CT0gMiwKKwkucmVjYWxjCQk9ICZvbWFwX2ZpeGVkX2Rpdmlzb3JfcmVjYWxjLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgcGVyX2hzZF9ieXBfY2xrX211eF9zZWxbXSA9IHsKQEAgLTc4NywyOSArODQ0LDQ4IEBACiAJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGxfcGVyX20yeDJfY2sgPSB7Ci0JLm5hbWUJCT0gImRwbGxfcGVyX20yeDJfY2siLAorc3RhdGljIHN0cnVjdCBjbGsgZHBsbF9wZXJfeDJfY2sgPSB7CisJLm5hbWUJCT0gImRwbGxfcGVyX3gyX2NrIiwKIAkucGFyZW50CQk9ICZkcGxsX3Blcl9jaywKIAkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorCS5yZWNhbGMJCT0gJm9tYXAzX2Nsa291dHgyX3JlY2FsYywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGxfcGVyX20zX2NrID0gewotCS5uYW1lCQk9ICJkcGxsX3Blcl9tM19jayIsCi0JLnBhcmVudAkJPSAmZHBsbF9wZXJfY2ssCi0JLmNsa3NlbAkJPSBkcGxsX3Blcl9tMl9kaXYsCi0JLmNsa3NlbF9yZWcJPSBPTUFQNDQzMF9DTV9ESVZfTTNfRFBMTF9QRVIsCi0JLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfRFBMTF9DTEtPVVRISUZfRElWX01BU0ssCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkcGxsX3Blcl9tMngyX2RpdltdID0geworCXsgLnBhcmVudCA9ICZkcGxsX3Blcl94Ml9jaywgLnJhdGVzID0gZGl2MzFfMXRvMzFfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0sCit9OworCitzdGF0aWMgc3RydWN0IGNsayBkcGxsX3Blcl9tMngyX2NrID0geworCS5uYW1lCQk9ICJkcGxsX3Blcl9tMngyX2NrIiwKKwkucGFyZW50CQk9ICZkcGxsX3Blcl94Ml9jaywKKwkuY2xrc2VsCQk9IGRwbGxfcGVyX20yeDJfZGl2LAorCS5jbGtzZWxfcmVnCT0gT01BUDQ0MzBfQ01fRElWX00yX0RQTExfUEVSLAorCS5jbGtzZWxfbWFzawk9IE9NQVA0NDMwX0RQTExfQ0xLT1VUX0RJVl9NQVNLLAogCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiAJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCiAJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGxfcGVyX200X2NrID0gewotCS5uYW1lCQk9ICJkcGxsX3Blcl9tNF9jayIsCi0JLnBhcmVudAkJPSAmZHBsbF9wZXJfY2ssCi0JLmNsa3NlbAkJPSBkcGxsX3Blcl9tMl9kaXYsCitzdGF0aWMgc3RydWN0IGNsayBkcGxsX3Blcl9tM3gyX2NrID0geworCS5uYW1lCQk9ICJkcGxsX3Blcl9tM3gyX2NrIiwKKwkucGFyZW50CQk9ICZkcGxsX3Blcl94Ml9jaywKKwkuY2xrc2VsCQk9IGRwbGxfcGVyX20yeDJfZGl2LAorCS5jbGtzZWxfcmVnCT0gT01BUDQ0MzBfQ01fRElWX00zX0RQTExfUEVSLAorCS5jbGtzZWxfbWFzawk9IE9NQVA0NDMwX0RQTExfQ0xLT1VUSElGX0RJVl9NQVNLLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fRElWX00zX0RQTExfUEVSLAorCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfRFBMTF9DTEtPVVRISUZfR0FURV9DVFJMX1NISUZULAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCisJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRwbGxfcGVyX200eDJfY2sgPSB7CisJLm5hbWUJCT0gImRwbGxfcGVyX200eDJfY2siLAorCS5wYXJlbnQJCT0gJmRwbGxfcGVyX3gyX2NrLAorCS5jbGtzZWwJCT0gZHBsbF9wZXJfbTJ4Ml9kaXYsCiAJLmNsa3NlbF9yZWcJPSBPTUFQNDQzMF9DTV9ESVZfTTRfRFBMTF9QRVIsCiAJLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfSFNESVZJREVSX0NMS09VVDFfRElWX01BU0ssCiAJLm9wcwkJPSAmY2xrb3BzX251bGwsCkBAIC04MTgsMTAgKzg5NCwxMCBAQAogCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayBkcGxsX3Blcl9tNV9jayA9IHsKLQkubmFtZQkJPSAiZHBsbF9wZXJfbTVfY2siLAotCS5wYXJlbnQJCT0gJmRwbGxfcGVyX2NrLAotCS5jbGtzZWwJCT0gZHBsbF9wZXJfbTJfZGl2LAorc3RhdGljIHN0cnVjdCBjbGsgZHBsbF9wZXJfbTV4Ml9jayA9IHsKKwkubmFtZQkJPSAiZHBsbF9wZXJfbTV4Ml9jayIsCisJLnBhcmVudAkJPSAmZHBsbF9wZXJfeDJfY2ssCisJLmNsa3NlbAkJPSBkcGxsX3Blcl9tMngyX2RpdiwKIAkuY2xrc2VsX3JlZwk9IE9NQVA0NDMwX0NNX0RJVl9NNV9EUExMX1BFUiwKIAkuY2xrc2VsX21hc2sJPSBPTUFQNDQzMF9IU0RJVklERVJfQ0xLT1VUMl9ESVZfTUFTSywKIAkub3BzCQk9ICZjbGtvcHNfbnVsbCwKQEAgLTgzMCwxMCArOTA2LDEwIEBACiAJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGxfcGVyX202X2NrID0gewotCS5uYW1lCQk9ICJkcGxsX3Blcl9tNl9jayIsCi0JLnBhcmVudAkJPSAmZHBsbF9wZXJfY2ssCi0JLmNsa3NlbAkJPSBkcGxsX3Blcl9tMl9kaXYsCitzdGF0aWMgc3RydWN0IGNsayBkcGxsX3Blcl9tNngyX2NrID0geworCS5uYW1lCQk9ICJkcGxsX3Blcl9tNngyX2NrIiwKKwkucGFyZW50CQk9ICZkcGxsX3Blcl94Ml9jaywKKwkuY2xrc2VsCQk9IGRwbGxfcGVyX20yeDJfZGl2LAogCS5jbGtzZWxfcmVnCT0gT01BUDQ0MzBfQ01fRElWX002X0RQTExfUEVSLAogCS5jbGtzZWxfbWFzawk9IE9NQVA0NDMwX0hTRElWSURFUl9DTEtPVVQzX0RJVl9NQVNLLAogCS5vcHMJCT0gJmNsa29wc19udWxsLApAQCAtODQyLDEwICs5MTgsMTAgQEAKIAkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlLAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGsgZHBsbF9wZXJfbTdfY2sgPSB7Ci0JLm5hbWUJCT0gImRwbGxfcGVyX203X2NrIiwKLQkucGFyZW50CQk9ICZkcGxsX3Blcl9jaywKLQkuY2xrc2VsCQk9IGRwbGxfcGVyX20yX2RpdiwKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRwbGxfcGVyX203eDJfY2sgPSB7CisJLm5hbWUJCT0gImRwbGxfcGVyX203eDJfY2siLAorCS5wYXJlbnQJCT0gJmRwbGxfcGVyX3gyX2NrLAorCS5jbGtzZWwJCT0gZHBsbF9wZXJfbTJ4Ml9kaXYsCiAJLmNsa3NlbF9yZWcJPSBPTUFQNDQzMF9DTV9ESVZfTTdfRFBMTF9QRVIsCiAJLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfSFNESVZJREVSX0NMS09VVDRfRElWX01BU0ssCiAJLm9wcwkJPSAmY2xrb3BzX251bGwsCkBAIC04NjgsNiArOTQ0LDcgQEAKIAkuZW5hYmxlX21hc2sJPSBPTUFQNDQzMF9EUExMX0VOX01BU0ssCiAJLmF1dG9pZGxlX21hc2sJPSBPTUFQNDQzMF9BVVRPX0RQTExfTU9ERV9NQVNLLAogCS5pZGxlc3RfbWFzawk9IE9NQVA0NDMwX1NUX0RQTExfQ0xLX01BU0ssCisJLnNkZGl2X21hc2sJPSBPTUFQNDQzMF9EUExMX1NEX0RJVl9NQVNLLAogCS5tYXhfbXVsdGlwbGllcgk9IE9NQVA0NDMwX01BWF9EUExMX01VTFQsCiAJLm1heF9kaXZpZGVyCT0gT01BUDQ0MzBfTUFYX0RQTExfRElWLAogCS5taW5fZGl2aWRlcgk9IDEsCkBAIC04ODUsMTQgKzk2MiwyMSBAQAogCS5zZXRfcmF0ZQk9ICZvbWFwM19ub25jb3JlX2RwbGxfc2V0X3JhdGUsCiB9OwogCitzdGF0aWMgc3RydWN0IGNsayBkcGxsX3VuaXByb194Ml9jayA9IHsKKwkubmFtZQkJPSAiZHBsbF91bmlwcm9feDJfY2siLAorCS5wYXJlbnQJCT0gJmRwbGxfdW5pcHJvX2NrLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5yZWNhbGMJCT0gJm9tYXAzX2Nsa291dHgyX3JlY2FsYywKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGRwbGxfdW5pcHJvX20yeDJfZGl2W10gPSB7Ci0JeyAucGFyZW50ID0gJmRwbGxfdW5pcHJvX2NrLCAucmF0ZXMgPSBkaXYzMV8xdG8zMV9yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZkcGxsX3VuaXByb194Ml9jaywgLnJhdGVzID0gZGl2MzFfMXRvMzFfcmF0ZXMgfSwKIAl7IC5wYXJlbnQgPSBOVUxMIH0sCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBkcGxsX3VuaXByb19tMngyX2NrID0gewogCS5uYW1lCQk9ICJkcGxsX3VuaXByb19tMngyX2NrIiwKLQkucGFyZW50CQk9ICZkcGxsX3VuaXByb19jaywKKwkucGFyZW50CQk9ICZkcGxsX3VuaXByb194Ml9jaywKIAkuY2xrc2VsCQk9IGRwbGxfdW5pcHJvX20yeDJfZGl2LAogCS5jbGtzZWxfcmVnCT0gT01BUDQ0MzBfQ01fRElWX00yX0RQTExfVU5JUFJPLAogCS5jbGtzZWxfbWFzawk9IE9NQVA0NDMwX0RQTExfQ0xLT1VUX0RJVl9NQVNLLApAQCAtOTA0LDE2ICs5ODgsMTcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgdXNiX2hzX2Nsa19kaXZfY2sgPSB7CiAJLm5hbWUJCT0gInVzYl9oc19jbGtfZGl2X2NrIiwKLQkucGFyZW50CQk9ICZkcGxsX2FiZV9tM19jaywKKwkucGFyZW50CQk9ICZkcGxsX2FiZV9tM3gyX2NrLAogCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCisJLmZpeGVkX2Rpdgk9IDMsCisJLnJlY2FsYwkJPSAmb21hcF9maXhlZF9kaXZpc29yX3JlY2FsYywKIH07CiAKIC8qIERQTExfVVNCICovCiBzdGF0aWMgc3RydWN0IGRwbGxfZGF0YSBkcGxsX3VzYl9kZCA9IHsKIAkubXVsdF9kaXYxX3JlZwk9IE9NQVA0NDMwX0NNX0NMS1NFTF9EUExMX1VTQiwKIAkuY2xrX2J5cGFzcwk9ICZ1c2JfaHNfY2xrX2Rpdl9jaywKLQkuZmxhZ3MJCT0gRFBMTF9KX1RZUEUgfCBEUExMX05PX0RDT19TRUwsCisJLmZsYWdzCQk9IERQTExfSl9UWVBFLAogCS5jbGtfcmVmCT0gJnN5c19jbGtpbl9jaywKIAkuY29udHJvbF9yZWcJPSBPTUFQNDQzMF9DTV9DTEtNT0RFX0RQTExfVVNCLAogCS5tb2RlcwkJPSAoMSA8PCBEUExMX0xPV19QT1dFUl9CWVBBU1MpIHwgKDEgPDwgRFBMTF9MT0NLRUQpLApAQCAtOTY3LDcgKzEwNTIsNyBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkdWNhdGlfY2xrX211eF9zZWxbXSA9IHsKIAl7IC5wYXJlbnQgPSAmZGl2X2NvcmVfY2ssIC5yYXRlcyA9IGRpdl8xXzBfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSAmZHBsbF9wZXJfbTZfY2ssIC5yYXRlcyA9IGRpdl8xXzFfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmZHBsbF9wZXJfbTZ4Ml9jaywgLnJhdGVzID0gZGl2XzFfMV9yYXRlcyB9LAogCXsgLnBhcmVudCA9IE5VTEwgfSwKIH07CiAKQEAgLTk4NiwyMSArMTA3MSwyNCBAQAogCS5uYW1lCQk9ICJmdW5jXzEybV9mY2xrIiwKIAkucGFyZW50CQk9ICZkcGxsX3Blcl9tMngyX2NrLAogCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCisJLmZpeGVkX2Rpdgk9IDE2LAorCS5yZWNhbGMJCT0gJm9tYXBfZml4ZWRfZGl2aXNvcl9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBmdW5jXzI0bV9jbGsgPSB7CiAJLm5hbWUJCT0gImZ1bmNfMjRtX2NsayIsCiAJLnBhcmVudAkJPSAmZHBsbF9wZXJfbTJfY2ssCiAJLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKKwkuZml4ZWRfZGl2CT0gNCwKKwkucmVjYWxjCQk9ICZvbWFwX2ZpeGVkX2Rpdmlzb3JfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZnVuY18yNG1jX2ZjbGsgPSB7CiAJLm5hbWUJCT0gImZ1bmNfMjRtY19mY2xrIiwKIAkucGFyZW50CQk9ICZkcGxsX3Blcl9tMngyX2NrLAogCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCisJLmZpeGVkX2Rpdgk9IDgsCisJLnJlY2FsYwkJPSAmb21hcF9maXhlZF9kaXZpc29yX3JlY2FsYywKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgZGl2Ml80dG84X3JhdGVzW10gPSB7CkBAIC0xMDMwLDcgKzExMTgsOCBAQAogCS5uYW1lCQk9ICJmdW5jXzQ4bWNfZmNsayIsCiAJLnBhcmVudAkJPSAmZHBsbF9wZXJfbTJ4Ml9jaywKIAkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorCS5maXhlZF9kaXYJPSA0LAorCS5yZWNhbGMJCT0gJm9tYXBfZml4ZWRfZGl2aXNvcl9yZWNhbGMsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGRpdjJfMnRvNF9yYXRlc1tdID0gewpAQCAtMTA0MCwxMyArMTEyOSwxMyBAQAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZnVuY182NG1fZmNsa19kaXZbXSA9IHsKLQl7IC5wYXJlbnQgPSAmZHBsbF9wZXJfbTRfY2ssIC5yYXRlcyA9IGRpdjJfMnRvNF9yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZkcGxsX3Blcl9tNHgyX2NrLCAucmF0ZXMgPSBkaXYyXzJ0bzRfcmF0ZXMgfSwKIAl7IC5wYXJlbnQgPSBOVUxMIH0sCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBmdW5jXzY0bV9mY2xrID0gewogCS5uYW1lCQk9ICJmdW5jXzY0bV9mY2xrIiwKLQkucGFyZW50CQk9ICZkcGxsX3Blcl9tNF9jaywKKwkucGFyZW50CQk9ICZkcGxsX3Blcl9tNHgyX2NrLAogCS5jbGtzZWwJCT0gZnVuY182NG1fZmNsa19kaXYsCiAJLmNsa3NlbF9yZWcJPSBPTUFQNDQzMF9DTV9TQ0FMRV9GQ0xLLAogCS5jbGtzZWxfbWFzawk9IE9NQVA0NDMwX1NDQUxFX0ZDTEtfTUFTSywKQEAgLTExNDcsNyArMTIzNiw4IEBACiAJLm5hbWUJCT0gImxwX2Nsa19kaXZfY2siLAogCS5wYXJlbnQJCT0gJmRwbGxfYWJlX20yeDJfY2ssCiAJLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKKwkuZml4ZWRfZGl2CT0gMTYsCisJLnJlY2FsYwkJPSAmb21hcF9maXhlZF9kaXZpc29yX3JlY2FsYywKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGw0X3drdXBfY2xrX211eF9zZWxbXSA9IHsKQEAgLTEyMTUsMTIgKzEzMDUsMTMgQEAKIAkubmFtZQkJPSAicGVyX2FiZV8yNG1fZmNsayIsCiAJLnBhcmVudAkJPSAmZHBsbF9hYmVfbTJfY2ssCiAJLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKKwkuZml4ZWRfZGl2CT0gNCwKKwkucmVjYWxjCQk9ICZvbWFwX2ZpeGVkX2Rpdmlzb3JfcmVjYWxjLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgcG1kX3N0bV9jbG9ja19tdXhfc2VsW10gPSB7CiAJeyAucGFyZW50ID0gJnN5c19jbGtpbl9jaywgLnJhdGVzID0gZGl2XzFfMF9yYXRlcyB9LAotCXsgLnBhcmVudCA9ICZkcGxsX2NvcmVfbTZfY2ssIC5yYXRlcyA9IGRpdl8xXzFfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmZHBsbF9jb3JlX202eDJfY2ssIC5yYXRlcyA9IGRpdl8xXzFfcmF0ZXMgfSwKIAl7IC5wYXJlbnQgPSAmdGllX2xvd19jbG9ja19jaywgLnJhdGVzID0gZGl2XzFfMl9yYXRlcyB9LAogCXsgLnBhcmVudCA9IE5VTEwgfSwKIH07CkBAIC0xMzU0LDcgKzE0NDUsNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fVEVTTEFfVEVTTEFfQ0xLQ1RSTCwKIAkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfSFdDVFJMLAogCS5jbGtkbV9uYW1lCT0gInRlc2xhX2Nsa2RtIiwKLQkucGFyZW50CQk9ICZkcGxsX2l2YV9tNF9jaywKKwkucGFyZW50CQk9ICZkcGxsX2l2YV9tNHgyX2NrLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0xMzg0LDcgKzE0NzUsNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fRFNTX0RTU19DTEtDVFJMLAogCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfT1BURkNMS0VOX0RTU0NMS19TSElGVCwKIAkuY2xrZG1fbmFtZQk9ICJsM19kc3NfY2xrZG0iLAotCS5wYXJlbnQJCT0gJmRwbGxfcGVyX201X2NrLAorCS5wYXJlbnQJCT0gJmRwbGxfcGVyX201eDJfY2ssCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTE0NDEsMTQgKzE1MzIsMTQgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGZkaWZfZmNsa19kaXZbXSA9IHsKLQl7IC5wYXJlbnQgPSAmZHBsbF9wZXJfbTRfY2ssIC5yYXRlcyA9IGRpdjNfMXRvNF9yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZkcGxsX3Blcl9tNHgyX2NrLCAucmF0ZXMgPSBkaXYzXzF0bzRfcmF0ZXMgfSwKIAl7IC5wYXJlbnQgPSBOVUxMIH0sCiB9OwogCiAvKiBNZXJnZWQgZmRpZl9mY2xrIGludG8gZmRpZiAqLwogc3RhdGljIHN0cnVjdCBjbGsgZmRpZl9mY2sgPSB7CiAJLm5hbWUJCT0gImZkaWZfZmNrIiwKLQkucGFyZW50CQk9ICZkcGxsX3Blcl9tNF9jaywKKwkucGFyZW50CQk9ICZkcGxsX3Blcl9tNHgyX2NrLAogCS5jbGtzZWwJCT0gZmRpZl9mY2xrX2RpdiwKIAkuY2xrc2VsX3JlZwk9IE9NQVA0NDMwX0NNX0NBTV9GRElGX0NMS0NUUkwsCiAJLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfQ0xLU0VMX0ZDTEtfTUFTSywKQEAgLTE2MDIsMTUgKzE2OTMsMTUgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIHNneF9jbGtfbXV4X3NlbFtdID0gewotCXsgLnBhcmVudCA9ICZkcGxsX2NvcmVfbTdfY2ssIC5yYXRlcyA9IGRpdl8xXzBfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSAmZHBsbF9wZXJfbTdfY2ssIC5yYXRlcyA9IGRpdl8xXzFfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmZHBsbF9jb3JlX203eDJfY2ssIC5yYXRlcyA9IGRpdl8xXzBfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmZHBsbF9wZXJfbTd4Ml9jaywgLnJhdGVzID0gZGl2XzFfMV9yYXRlcyB9LAogCXsgLnBhcmVudCA9IE5VTEwgfSwKIH07CiAKIC8qIE1lcmdlZCBzZ3hfY2xrX211eCBpbnRvIGdwdSAqLwogc3RhdGljIHN0cnVjdCBjbGsgZ3B1X2ZjayA9IHsKIAkubmFtZQkJPSAiZ3B1X2ZjayIsCi0JLnBhcmVudAkJPSAmZHBsbF9jb3JlX203X2NrLAorCS5wYXJlbnQJCT0gJmRwbGxfY29yZV9tN3gyX2NrLAogCS5jbGtzZWwJCT0gc2d4X2Nsa19tdXhfc2VsLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCiAJLmNsa3NlbF9yZWcJPSBPTUFQNDQzMF9DTV9HRlhfR0ZYX0NMS0NUUkwsCkBAIC0xNzI5LDcgKzE4MjAsNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fSVZBSERfSVZBSERfQ0xLQ1RSTCwKIAkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfSFdDVFJMLAogCS5jbGtkbV9uYW1lCT0gIml2YWhkX2Nsa2RtIiwKLQkucGFyZW50CQk9ICZkcGxsX2l2YV9tNV9jaywKKwkucGFyZW50CQk9ICZkcGxsX2l2YV9tNXgyX2NrLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0xNzQ5LDYgKzE4NDAsNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fTDNJTlNUUl9MM19JTlNUUl9DTEtDVFJMLAogCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9IV0NUUkwsCiAJLmNsa2RtX25hbWUJPSAibDNfaW5zdHJfY2xrZG0iLAorCS5mbGFncwkJPSBFTkFCTEVfT05fSU5JVCwKIAkucGFyZW50CQk9ICZsM19kaXZfY2ssCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CkBAIC0xNzU5LDYgKzE4NTEsNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fTDNJTlNUUl9MM18zX0NMS0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX0hXQ1RSTCwKIAkuY2xrZG1fbmFtZQk9ICJsM19pbnN0cl9jbGtkbSIsCisJLmZsYWdzCQk9IEVOQUJMRV9PTl9JTklULAogCS5wYXJlbnQJCT0gJmwzX2Rpdl9jaywKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKQEAgLTIwNjMsNiArMjE1Niw3IEBACiAJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTV9MM0lOU1RSX09DUF9XUDFfQ0xLQ1RSTCwKIAkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfSFdDVFJMLAogCS5jbGtkbV9uYW1lCT0gImwzX2luc3RyX2Nsa2RtIiwKKwkuZmxhZ3MJCT0gRU5BQkxFX09OX0lOSVQsCiAJLnBhcmVudAkJPSAmbDNfZGl2X2NrLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwpAQCAtMjA5Myw3ICsyMTg3LDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX0lWQUhEX1NMMl9DTEtDVFJMLAogCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9IV0NUUkwsCiAJLmNsa2RtX25hbWUJPSAiaXZhaGRfY2xrZG0iLAotCS5wYXJlbnQJCT0gJmRwbGxfaXZhX201X2NrLAorCS5wYXJlbnQJCT0gJmRwbGxfaXZhX201eDJfY2ssCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTI0MzgsMzYgKzI1MzIsNiBAQAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayB1c2JfaG9zdF9oc191dG1pX3AzX2NsayA9IHsKLQkubmFtZQkJPSAidXNiX2hvc3RfaHNfdXRtaV9wM19jbGsiLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAotCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fTDNJTklUX1VTQl9IT1NUX0NMS0NUUkwsCi0JLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9PUFRGQ0xLRU5fVVRNSV9QM19DTEtfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAibDNfaW5pdF9jbGtkbSIsCi0JLnBhcmVudAkJPSAmaW5pdF82MG1fZmNsaywKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdXNiX2hvc3RfaHNfaHNpYzYwbV9wMV9jbGsgPSB7Ci0JLm5hbWUJCT0gInVzYl9ob3N0X2hzX2hzaWM2MG1fcDFfY2xrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKLQkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX0wzSU5JVF9VU0JfSE9TVF9DTEtDVFJMLAotCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfT1BURkNMS0VOX0hTSUM2ME1fUDFfQ0xLX1NISUZULAotCS5jbGtkbV9uYW1lCT0gImwzX2luaXRfY2xrZG0iLAotCS5wYXJlbnQJCT0gJmluaXRfNjBtX2ZjbGssCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHVzYl9ob3N0X2hzX2hzaWM2MG1fcDJfY2xrID0gewotCS5uYW1lCQk9ICJ1c2JfaG9zdF9oc19oc2ljNjBtX3AyX2NsayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCi0JLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTV9MM0lOSVRfVVNCX0hPU1RfQ0xLQ1RSTCwKLQkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX09QVEZDTEtFTl9IU0lDNjBNX1AyX0NMS19TSElGVCwKLQkuY2xrZG1fbmFtZQk9ICJsM19pbml0X2Nsa2RtIiwKLQkucGFyZW50CQk9ICZpbml0XzYwbV9mY2xrLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCB1dG1pX3AxX2dmY2xrX3NlbFtdID0gewogCXsgLnBhcmVudCA9ICZpbml0XzYwbV9mY2xrLCAucmF0ZXMgPSBkaXZfMV8wX3JhdGVzIH0sCiAJeyAucGFyZW50ID0gJnhjbGs2MG1oc3AxX2NrLCAucmF0ZXMgPSBkaXZfMV8xX3JhdGVzIH0sCkBAIC0yNTIyLDYgKzI1ODYsMTYgQEAKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAorc3RhdGljIHN0cnVjdCBjbGsgdXNiX2hvc3RfaHNfdXRtaV9wM19jbGsgPSB7CisJLm5hbWUJCT0gInVzYl9ob3N0X2hzX3V0bWlfcDNfY2xrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKKwkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX0wzSU5JVF9VU0JfSE9TVF9DTEtDVFJMLAorCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfT1BURkNMS0VOX1VUTUlfUDNfQ0xLX1NISUZULAorCS5jbGtkbV9uYW1lCT0gImwzX2luaXRfY2xrZG0iLAorCS5wYXJlbnQJCT0gJmluaXRfNjBtX2ZjbGssCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKIHN0YXRpYyBzdHJ1Y3QgY2xrIHVzYl9ob3N0X2hzX2hzaWM0ODBtX3AxX2NsayA9IHsKIAkubmFtZQkJPSAidXNiX2hvc3RfaHNfaHNpYzQ4MG1fcDFfY2xrIiwKIAkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKQEAgLTI1MzIsNiArMjYwNiwyNiBAQAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCitzdGF0aWMgc3RydWN0IGNsayB1c2JfaG9zdF9oc19oc2ljNjBtX3AxX2NsayA9IHsKKwkubmFtZQkJPSAidXNiX2hvc3RfaHNfaHNpYzYwbV9wMV9jbGsiLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fTDNJTklUX1VTQl9IT1NUX0NMS0NUUkwsCisJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9PUFRGQ0xLRU5fSFNJQzYwTV9QMV9DTEtfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAibDNfaW5pdF9jbGtkbSIsCisJLnBhcmVudAkJPSAmaW5pdF82MG1fZmNsaywKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdXNiX2hvc3RfaHNfaHNpYzYwbV9wMl9jbGsgPSB7CisJLm5hbWUJCT0gInVzYl9ob3N0X2hzX2hzaWM2MG1fcDJfY2xrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKKwkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX0wzSU5JVF9VU0JfSE9TVF9DTEtDVFJMLAorCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfT1BURkNMS0VOX0hTSUM2ME1fUDJfQ0xLX1NISUZULAorCS5jbGtkbV9uYW1lCT0gImwzX2luaXRfY2xrZG0iLAorCS5wYXJlbnQJCT0gJmluaXRfNjBtX2ZjbGssCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKIHN0YXRpYyBzdHJ1Y3QgY2xrIHVzYl9ob3N0X2hzX2hzaWM0ODBtX3AyX2NsayA9IHsKIAkubmFtZQkJPSAidXNiX2hvc3RfaHNfaHNpYzQ4MG1fcDJfY2xrIiwKIAkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKQEAgLTI2NTYsMTMgKzI3NTAsMTMgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIHVzaW1fZmNsa19kaXZbXSA9IHsKLQl7IC5wYXJlbnQgPSAmZHBsbF9wZXJfbTRfY2ssIC5yYXRlcyA9IGRpdjJfMTR0bzE4X3JhdGVzIH0sCisJeyAucGFyZW50ID0gJmRwbGxfcGVyX200eDJfY2ssIC5yYXRlcyA9IGRpdjJfMTR0bzE4X3JhdGVzIH0sCiAJeyAucGFyZW50ID0gTlVMTCB9LAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgdXNpbV9jayA9IHsKIAkubmFtZQkJPSAidXNpbV9jayIsCi0JLnBhcmVudAkJPSAmZHBsbF9wZXJfbTRfY2ssCisJLnBhcmVudAkJPSAmZHBsbF9wZXJfbTR4Ml9jaywKIAkuY2xrc2VsCQk9IHVzaW1fZmNsa19kaXYsCiAJLmNsa3NlbF9yZWcJPSBPTUFQNDQzMF9DTV9XS1VQX1VTSU1fQ0xLQ1RSTCwKIAkuY2xrc2VsX21hc2sJPSBPTUFQNDQzMF9DTEtTRUxfRElWX01BU0ssCkBAIC0yNzQ3LDYgKzI4NDEsMTY4IEBACiAJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZSwKIH07CiAKKy8qIFNDUk0gYXV4IGNsayBub2RlcyAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBhdXhjbGtfc2VsW10gPSB7CisJeyAucGFyZW50ID0gJnN5c19jbGtpbl9jaywgLnJhdGVzID0gZGl2XzFfMF9yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZkcGxsX2NvcmVfbTN4Ml9jaywgLnJhdGVzID0gZGl2XzFfMV9yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZkcGxsX3Blcl9tM3gyX2NrLCAucmF0ZXMgPSBkaXZfMV8yX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgYXV4Y2xrMF9jayA9IHsKKwkubmFtZQkJPSAiYXV4Y2xrMF9jayIsCisJLnBhcmVudAkJPSAmc3lzX2Nsa2luX2NrLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLmNsa3NlbAkJPSBhdXhjbGtfc2VsLAorCS5jbGtzZWxfcmVnCT0gT01BUDRfU0NSTV9BVVhDTEswLAorCS5jbGtzZWxfbWFzawk9IE9NQVA0X1NSQ1NFTEVDVF9NQVNLLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCisJLmVuYWJsZV9yZWcJPSBPTUFQNF9TQ1JNX0FVWENMSzAsCisJLmVuYWJsZV9iaXQJPSBPTUFQNF9FTkFCTEVfU0hJRlQsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBhdXhjbGsxX2NrID0geworCS5uYW1lCQk9ICJhdXhjbGsxX2NrIiwKKwkucGFyZW50CQk9ICZzeXNfY2xraW5fY2ssCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKKwkuY2xrc2VsCQk9IGF1eGNsa19zZWwsCisJLmNsa3NlbF9yZWcJPSBPTUFQNF9TQ1JNX0FVWENMSzEsCisJLmNsa3NlbF9tYXNrCT0gT01BUDRfU1JDU0VMRUNUX01BU0ssCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKKwkuZW5hYmxlX3JlZwk9IE9NQVA0X1NDUk1fQVVYQ0xLMSwKKwkuZW5hYmxlX2JpdAk9IE9NQVA0X0VOQUJMRV9TSElGVCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGF1eGNsazJfY2sgPSB7CisJLm5hbWUJCT0gImF1eGNsazJfY2siLAorCS5wYXJlbnQJCT0gJnN5c19jbGtpbl9jaywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5jbGtzZWwJCT0gYXV4Y2xrX3NlbCwKKwkuY2xrc2VsX3JlZwk9IE9NQVA0X1NDUk1fQVVYQ0xLMiwKKwkuY2xrc2VsX21hc2sJPSBPTUFQNF9TUkNTRUxFQ1RfTUFTSywKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorCS5lbmFibGVfcmVnCT0gT01BUDRfU0NSTV9BVVhDTEsyLAorCS5lbmFibGVfYml0CT0gT01BUDRfRU5BQkxFX1NISUZULAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGF1eGNsazNfY2sgPSB7CisJLm5hbWUJCT0gImF1eGNsazNfY2siLAorCS5wYXJlbnQJCT0gJnN5c19jbGtpbl9jaywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5jbGtzZWwJCT0gYXV4Y2xrX3NlbCwKKwkuY2xrc2VsX3JlZwk9IE9NQVA0X1NDUk1fQVVYQ0xLMywKKwkuY2xrc2VsX21hc2sJPSBPTUFQNF9TUkNTRUxFQ1RfTUFTSywKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorCS5lbmFibGVfcmVnCT0gT01BUDRfU0NSTV9BVVhDTEszLAorCS5lbmFibGVfYml0CT0gT01BUDRfRU5BQkxFX1NISUZULAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgYXV4Y2xrNF9jayA9IHsKKwkubmFtZQkJPSAiYXV4Y2xrNF9jayIsCisJLnBhcmVudAkJPSAmc3lzX2Nsa2luX2NrLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLmNsa3NlbAkJPSBhdXhjbGtfc2VsLAorCS5jbGtzZWxfcmVnCT0gT01BUDRfU0NSTV9BVVhDTEs0LAorCS5jbGtzZWxfbWFzawk9IE9NQVA0X1NSQ1NFTEVDVF9NQVNLLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCisJLmVuYWJsZV9yZWcJPSBPTUFQNF9TQ1JNX0FVWENMSzQsCisJLmVuYWJsZV9iaXQJPSBPTUFQNF9FTkFCTEVfU0hJRlQsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBhdXhjbGs1X2NrID0geworCS5uYW1lCQk9ICJhdXhjbGs1X2NrIiwKKwkucGFyZW50CQk9ICZzeXNfY2xraW5fY2ssCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKKwkuY2xrc2VsCQk9IGF1eGNsa19zZWwsCisJLmNsa3NlbF9yZWcJPSBPTUFQNF9TQ1JNX0FVWENMSzUsCisJLmNsa3NlbF9tYXNrCT0gT01BUDRfU1JDU0VMRUNUX01BU0ssCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKKwkuZW5hYmxlX3JlZwk9IE9NQVA0X1NDUk1fQVVYQ0xLNSwKKwkuZW5hYmxlX2JpdAk9IE9NQVA0X0VOQUJMRV9TSElGVCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGF1eGNsa3JlcV9zZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmYXV4Y2xrMF9jaywgLnJhdGVzID0gZGl2XzFfMF9yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZhdXhjbGsxX2NrLCAucmF0ZXMgPSBkaXZfMV8xX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJmF1eGNsazJfY2ssIC5yYXRlcyA9IGRpdl8xXzJfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmYXV4Y2xrM19jaywgLnJhdGVzID0gZGl2XzFfM19yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZhdXhjbGs0X2NrLCAucmF0ZXMgPSBkaXZfMV80X3JhdGVzIH0sCisJeyAucGFyZW50ID0gJmF1eGNsazVfY2ssIC5yYXRlcyA9IGRpdl8xXzVfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0sCit9OworCitzdGF0aWMgc3RydWN0IGNsayBhdXhjbGtyZXEwX2NrID0geworCS5uYW1lCQk9ICJhdXhjbGtyZXEwX2NrIiwKKwkucGFyZW50CQk9ICZhdXhjbGswX2NrLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLmNsa3NlbCAgICAgICAgID0gYXV4Y2xrcmVxX3NlbCwKKwkuY2xrc2VsX3JlZwk9IE9NQVA0X1NDUk1fQVVYQ0xLUkVRMCwKKwkuY2xrc2VsX21hc2sJPSBPTUFQNF9NQVBQSU5HX01BU0ssCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGF1eGNsa3JlcTFfY2sgPSB7CisJLm5hbWUJCT0gImF1eGNsa3JlcTFfY2siLAorCS5wYXJlbnQJCT0gJmF1eGNsazFfY2ssCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkuY2xrc2VsICAgICAgICAgPSBhdXhjbGtyZXFfc2VsLAorCS5jbGtzZWxfcmVnCT0gT01BUDRfU0NSTV9BVVhDTEtSRVExLAorCS5jbGtzZWxfbWFzawk9IE9NQVA0X01BUFBJTkdfTUFTSywKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgYXV4Y2xrcmVxMl9jayA9IHsKKwkubmFtZQkJPSAiYXV4Y2xrcmVxMl9jayIsCisJLnBhcmVudAkJPSAmYXV4Y2xrMl9jaywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5jbGtzZWwgICAgICAgICA9IGF1eGNsa3JlcV9zZWwsCisJLmNsa3NlbF9yZWcJPSBPTUFQNF9TQ1JNX0FVWENMS1JFUTIsCisJLmNsa3NlbF9tYXNrCT0gT01BUDRfTUFQUElOR19NQVNLLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBhdXhjbGtyZXEzX2NrID0geworCS5uYW1lCQk9ICJhdXhjbGtyZXEzX2NrIiwKKwkucGFyZW50CQk9ICZhdXhjbGszX2NrLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLmNsa3NlbCAgICAgICAgID0gYXV4Y2xrcmVxX3NlbCwKKwkuY2xrc2VsX3JlZwk9IE9NQVA0X1NDUk1fQVVYQ0xLUkVRMywKKwkuY2xrc2VsX21hc2sJPSBPTUFQNF9NQVBQSU5HX01BU0ssCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGF1eGNsa3JlcTRfY2sgPSB7CisJLm5hbWUJCT0gImF1eGNsa3JlcTRfY2siLAorCS5wYXJlbnQJCT0gJmF1eGNsazRfY2ssCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkuY2xrc2VsICAgICAgICAgPSBhdXhjbGtyZXFfc2VsLAorCS5jbGtzZWxfcmVnCT0gT01BUDRfU0NSTV9BVVhDTEtSRVE0LAorCS5jbGtzZWxfbWFzawk9IE9NQVA0X01BUFBJTkdfTUFTSywKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgYXV4Y2xrcmVxNV9jayA9IHsKKwkubmFtZQkJPSAiYXV4Y2xrcmVxNV9jayIsCisJLnBhcmVudAkJPSAmYXV4Y2xrNV9jaywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5jbGtzZWwgICAgICAgICA9IGF1eGNsa3JlcV9zZWwsCisJLmNsa3NlbF9yZWcJPSBPTUFQNF9TQ1JNX0FVWENMS1JFUTUsCisJLmNsa3NlbF9tYXNrCT0gT01BUDRfTUFQUElOR19NQVNLLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCiAvKgogICogY2xrZGV2CiAgKi8KQEAgLTI3NzQsNDMgKzMwMzAsNDggQEAKIAlDTEsoTlVMTCwJImFiZV9kcGxsX2J5cGFzc19jbGtfbXV4X2NrIiwJJmFiZV9kcGxsX2J5cGFzc19jbGtfbXV4X2NrLAlDS180NDNYKSwKIAlDTEsoTlVMTCwJImFiZV9kcGxsX3JlZmNsa19tdXhfY2siLAkmYWJlX2RwbGxfcmVmY2xrX211eF9jaywJQ0tfNDQzWCksCiAJQ0xLKE5VTEwsCSJkcGxsX2FiZV9jayIsCQkJJmRwbGxfYWJlX2NrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImRwbGxfYWJlX3gyX2NrIiwJCSZkcGxsX2FiZV94Ml9jaywJQ0tfNDQzWCksCiAJQ0xLKE5VTEwsCSJkcGxsX2FiZV9tMngyX2NrIiwJCSZkcGxsX2FiZV9tMngyX2NrLAlDS180NDNYKSwKIAlDTEsoTlVMTCwJImFiZV8yNG1fZmNsayIsCQkJJmFiZV8yNG1fZmNsaywJQ0tfNDQzWCksCiAJQ0xLKE5VTEwsCSJhYmVfY2xrIiwJCQkmYWJlX2NsaywJQ0tfNDQzWCksCiAJQ0xLKE5VTEwsCSJhZXNzX2ZjbGsiLAkJCSZhZXNzX2ZjbGssCUNLXzQ0M1gpLAotCUNMSyhOVUxMLAkiZHBsbF9hYmVfbTNfY2siLAkJJmRwbGxfYWJlX20zX2NrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImRwbGxfYWJlX20zeDJfY2siLAkJJmRwbGxfYWJlX20zeDJfY2ssCUNLXzQ0M1gpLAogCUNMSyhOVUxMLAkiY29yZV9oc2RfYnlwX2Nsa19tdXhfY2siLAkmY29yZV9oc2RfYnlwX2Nsa19tdXhfY2ssCUNLXzQ0M1gpLAogCUNMSyhOVUxMLAkiZHBsbF9jb3JlX2NrIiwJCQkmZHBsbF9jb3JlX2NrLAlDS180NDNYKSwKLQlDTEsoTlVMTCwJImRwbGxfY29yZV9tNl9jayIsCQkmZHBsbF9jb3JlX202X2NrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImRwbGxfY29yZV94Ml9jayIsCQkmZHBsbF9jb3JlX3gyX2NrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImRwbGxfY29yZV9tNngyX2NrIiwJCSZkcGxsX2NvcmVfbTZ4Ml9jaywJQ0tfNDQzWCksCiAJQ0xLKE5VTEwsCSJkYmdjbGtfbXV4X2NrIiwJCSZkYmdjbGtfbXV4X2NrLAlDS180NDNYKSwKIAlDTEsoTlVMTCwJImRwbGxfY29yZV9tMl9jayIsCQkmZHBsbF9jb3JlX20yX2NrLAlDS180NDNYKSwKIAlDTEsoTlVMTCwJImRkcnBoeV9jayIsCQkJJmRkcnBoeV9jaywJQ0tfNDQzWCksCi0JQ0xLKE5VTEwsCSJkcGxsX2NvcmVfbTVfY2siLAkJJmRwbGxfY29yZV9tNV9jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJkcGxsX2NvcmVfbTV4Ml9jayIsCQkmZHBsbF9jb3JlX201eDJfY2ssCUNLXzQ0M1gpLAogCUNMSyhOVUxMLAkiZGl2X2NvcmVfY2siLAkJCSZkaXZfY29yZV9jaywJQ0tfNDQzWCksCiAJQ0xLKE5VTEwsCSJkaXZfaXZhX2hzX2NsayIsCQkmZGl2X2l2YV9oc19jbGssCUNLXzQ0M1gpLAogCUNMSyhOVUxMLAkiZGl2X21wdV9oc19jbGsiLAkJJmRpdl9tcHVfaHNfY2xrLAlDS180NDNYKSwKLQlDTEsoTlVMTCwJImRwbGxfY29yZV9tNF9jayIsCQkmZHBsbF9jb3JlX200X2NrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImRwbGxfY29yZV9tNHgyX2NrIiwJCSZkcGxsX2NvcmVfbTR4Ml9jaywJQ0tfNDQzWCksCiAJQ0xLKE5VTEwsCSJkbGxfY2xrX2Rpdl9jayIsCQkmZGxsX2Nsa19kaXZfY2ssCUNLXzQ0M1gpLAogCUNMSyhOVUxMLAkiZHBsbF9hYmVfbTJfY2siLAkJJmRwbGxfYWJlX20yX2NrLAlDS180NDNYKSwKLQlDTEsoTlVMTCwJImRwbGxfY29yZV9tM19jayIsCQkmZHBsbF9jb3JlX20zX2NrLAlDS180NDNYKSwKLQlDTEsoTlVMTCwJImRwbGxfY29yZV9tN19jayIsCQkmZHBsbF9jb3JlX203X2NrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImRwbGxfY29yZV9tM3gyX2NrIiwJCSZkcGxsX2NvcmVfbTN4Ml9jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJkcGxsX2NvcmVfbTd4Ml9jayIsCQkmZHBsbF9jb3JlX203eDJfY2ssCUNLXzQ0M1gpLAogCUNMSyhOVUxMLAkiaXZhX2hzZF9ieXBfY2xrX211eF9jayIsCSZpdmFfaHNkX2J5cF9jbGtfbXV4X2NrLAlDS180NDNYKSwKIAlDTEsoTlVMTCwJImRwbGxfaXZhX2NrIiwJCQkmZHBsbF9pdmFfY2ssCUNLXzQ0M1gpLAotCUNMSyhOVUxMLAkiZHBsbF9pdmFfbTRfY2siLAkJJmRwbGxfaXZhX200X2NrLAlDS180NDNYKSwKLQlDTEsoTlVMTCwJImRwbGxfaXZhX201X2NrIiwJCSZkcGxsX2l2YV9tNV9jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJkcGxsX2l2YV94Ml9jayIsCQkmZHBsbF9pdmFfeDJfY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkiZHBsbF9pdmFfbTR4Ml9jayIsCQkmZHBsbF9pdmFfbTR4Ml9jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJkcGxsX2l2YV9tNXgyX2NrIiwJCSZkcGxsX2l2YV9tNXgyX2NrLAlDS180NDNYKSwKIAlDTEsoTlVMTCwJImRwbGxfbXB1X2NrIiwJCQkmZHBsbF9tcHVfY2ssCUNLXzQ0M1gpLAogCUNMSyhOVUxMLAkiZHBsbF9tcHVfbTJfY2siLAkJJmRwbGxfbXB1X20yX2NrLAlDS180NDNYKSwKIAlDTEsoTlVMTCwJInBlcl9oc19jbGtfZGl2X2NrIiwJCSZwZXJfaHNfY2xrX2Rpdl9jaywJQ0tfNDQzWCksCiAJQ0xLKE5VTEwsCSJwZXJfaHNkX2J5cF9jbGtfbXV4X2NrIiwJJnBlcl9oc2RfYnlwX2Nsa19tdXhfY2ssCUNLXzQ0M1gpLAogCUNMSyhOVUxMLAkiZHBsbF9wZXJfY2siLAkJCSZkcGxsX3Blcl9jaywJQ0tfNDQzWCksCiAJQ0xLKE5VTEwsCSJkcGxsX3Blcl9tMl9jayIsCQkmZHBsbF9wZXJfbTJfY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkiZHBsbF9wZXJfeDJfY2siLAkJJmRwbGxfcGVyX3gyX2NrLAlDS180NDNYKSwKIAlDTEsoTlVMTCwJImRwbGxfcGVyX20yeDJfY2siLAkJJmRwbGxfcGVyX20yeDJfY2ssCUNLXzQ0M1gpLAotCUNMSyhOVUxMLAkiZHBsbF9wZXJfbTNfY2siLAkJJmRwbGxfcGVyX20zX2NrLAlDS180NDNYKSwKLQlDTEsoTlVMTCwJImRwbGxfcGVyX200X2NrIiwJCSZkcGxsX3Blcl9tNF9jaywJQ0tfNDQzWCksCi0JQ0xLKE5VTEwsCSJkcGxsX3Blcl9tNV9jayIsCQkmZHBsbF9wZXJfbTVfY2ssCUNLXzQ0M1gpLAotCUNMSyhOVUxMLAkiZHBsbF9wZXJfbTZfY2siLAkJJmRwbGxfcGVyX202X2NrLAlDS180NDNYKSwKLQlDTEsoTlVMTCwJImRwbGxfcGVyX203X2NrIiwJCSZkcGxsX3Blcl9tN19jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJkcGxsX3Blcl9tM3gyX2NrIiwJCSZkcGxsX3Blcl9tM3gyX2NrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImRwbGxfcGVyX200eDJfY2siLAkJJmRwbGxfcGVyX200eDJfY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkiZHBsbF9wZXJfbTV4Ml9jayIsCQkmZHBsbF9wZXJfbTV4Ml9jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJkcGxsX3Blcl9tNngyX2NrIiwJCSZkcGxsX3Blcl9tNngyX2NrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImRwbGxfcGVyX203eDJfY2siLAkJJmRwbGxfcGVyX203eDJfY2ssCUNLXzQ0M1gpLAogCUNMSyhOVUxMLAkiZHBsbF91bmlwcm9fY2siLAkJJmRwbGxfdW5pcHJvX2NrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImRwbGxfdW5pcHJvX3gyX2NrIiwJCSZkcGxsX3VuaXByb194Ml9jaywJQ0tfNDQzWCksCiAJQ0xLKE5VTEwsCSJkcGxsX3VuaXByb19tMngyX2NrIiwJCSZkcGxsX3VuaXByb19tMngyX2NrLAlDS180NDNYKSwKIAlDTEsoTlVMTCwJInVzYl9oc19jbGtfZGl2X2NrIiwJCSZ1c2JfaHNfY2xrX2Rpdl9jaywJQ0tfNDQzWCksCiAJQ0xLKE5VTEwsCSJkcGxsX3VzYl9jayIsCQkJJmRwbGxfdXNiX2NrLAlDS180NDNYKSwKQEAgLTI4NTYsMjYgKzMxMTcsMjYgQEAKIAlDTEsoTlVMTCwJImVtaWYyX2ZjayIsCQkJJmVtaWYyX2ZjaywJQ0tfNDQzWCksCiAJQ0xLKE5VTEwsCSJmZGlmX2ZjayIsCQkJJmZkaWZfZmNrLAlDS180NDNYKSwKIAlDTEsoTlVMTCwJImZwa2FfZmNrIiwJCQkmZnBrYV9mY2ssCUNLXzQ0M1gpLAotCUNMSyhOVUxMLAkiZ3BpbzFfZGJjayIsCQkJJmdwaW8xX2RiY2xrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImdwaW8xX2RiY2xrIiwJCQkmZ3BpbzFfZGJjbGssCUNLXzQ0M1gpLAogCUNMSyhOVUxMLAkiZ3BpbzFfaWNrIiwJCQkmZ3BpbzFfaWNrLAlDS180NDNYKSwKLQlDTEsoTlVMTCwJImdwaW8yX2RiY2siLAkJCSZncGlvMl9kYmNsaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJncGlvMl9kYmNsayIsCQkJJmdwaW8yX2RiY2xrLAlDS180NDNYKSwKIAlDTEsoTlVMTCwJImdwaW8yX2ljayIsCQkJJmdwaW8yX2ljaywJQ0tfNDQzWCksCi0JQ0xLKE5VTEwsCSJncGlvM19kYmNrIiwJCQkmZ3BpbzNfZGJjbGssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkiZ3BpbzNfZGJjbGsiLAkJCSZncGlvM19kYmNsaywJQ0tfNDQzWCksCiAJQ0xLKE5VTEwsCSJncGlvM19pY2siLAkJCSZncGlvM19pY2ssCUNLXzQ0M1gpLAotCUNMSyhOVUxMLAkiZ3BpbzRfZGJjayIsCQkJJmdwaW80X2RiY2xrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImdwaW80X2RiY2xrIiwJCQkmZ3BpbzRfZGJjbGssCUNLXzQ0M1gpLAogCUNMSyhOVUxMLAkiZ3BpbzRfaWNrIiwJCQkmZ3BpbzRfaWNrLAlDS180NDNYKSwKLQlDTEsoTlVMTCwJImdwaW81X2RiY2siLAkJCSZncGlvNV9kYmNsaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJncGlvNV9kYmNsayIsCQkJJmdwaW81X2RiY2xrLAlDS180NDNYKSwKIAlDTEsoTlVMTCwJImdwaW81X2ljayIsCQkJJmdwaW81X2ljaywJQ0tfNDQzWCksCi0JQ0xLKE5VTEwsCSJncGlvNl9kYmNrIiwJCQkmZ3BpbzZfZGJjbGssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkiZ3BpbzZfZGJjbGsiLAkJCSZncGlvNl9kYmNsaywJQ0tfNDQzWCksCiAJQ0xLKE5VTEwsCSJncGlvNl9pY2siLAkJCSZncGlvNl9pY2ssCUNLXzQ0M1gpLAogCUNMSyhOVUxMLAkiZ3BtY19pY2siLAkJCSZncG1jX2ljaywJQ0tfNDQzWCksCiAJQ0xLKE5VTEwsCSJncHVfZmNrIiwJCQkmZ3B1X2ZjaywJQ0tfNDQzWCksCiAJQ0xLKCJvbWFwMl9oZHEuMCIsCSJmY2siLAkJCQkmaGRxMXdfZmNrLAlDS180NDNYKSwKIAlDTEsoTlVMTCwJImhzaV9mY2siLAkJCSZoc2lfZmNrLAlDS180NDNYKSwKLQlDTEsoImkyY19vbWFwLjEiLAkiZmNrIiwJCQkJJmkyYzFfZmNrLAlDS180NDNYKSwKLQlDTEsoImkyY19vbWFwLjIiLAkiZmNrIiwJCQkJJmkyYzJfZmNrLAlDS180NDNYKSwKLQlDTEsoImkyY19vbWFwLjMiLAkiZmNrIiwJCQkJJmkyYzNfZmNrLAlDS180NDNYKSwKLQlDTEsoImkyY19vbWFwLjQiLAkiZmNrIiwJCQkJJmkyYzRfZmNrLAlDS180NDNYKSwKKwlDTEsoIm9tYXBfaTJjLjEiLAkiZmNrIiwJCQkJJmkyYzFfZmNrLAlDS180NDNYKSwKKwlDTEsoIm9tYXBfaTJjLjIiLAkiZmNrIiwJCQkJJmkyYzJfZmNrLAlDS180NDNYKSwKKwlDTEsoIm9tYXBfaTJjLjMiLAkiZmNrIiwJCQkJJmkyYzNfZmNrLAlDS180NDNYKSwKKwlDTEsoIm9tYXBfaTJjLjQiLAkiZmNrIiwJCQkJJmkyYzRfZmNrLAlDS180NDNYKSwKIAlDTEsoTlVMTCwJImlwdV9mY2siLAkJCSZpcHVfZmNrLAlDS180NDNYKSwKIAlDTEsoTlVMTCwJImlzc19jdHJsY2xrIiwJCQkmaXNzX2N0cmxjbGssCUNLXzQ0M1gpLAogCUNMSyhOVUxMLAkiaXNzX2ZjayIsCQkJJmlzc19mY2ssCUNLXzQ0M1gpLApAQCAtMjkzNywyOSArMzE5OCwzNSBAQAogCUNMSyhOVUxMLAkidWFydDNfZmNrIiwJCQkmdWFydDNfZmNrLAlDS180NDNYKSwKIAlDTEsoTlVMTCwJInVhcnQ0X2ZjayIsCQkJJnVhcnQ0X2ZjaywJQ0tfNDQzWCksCiAJQ0xLKE5VTEwsCSJ1c2JfaG9zdF9mc19mY2siLAkJJnVzYl9ob3N0X2ZzX2ZjaywJQ0tfNDQzWCksCi0JQ0xLKE5VTEwsCSJ1c2JfaG9zdF9oc191dG1pX3AzX2NsayIsCSZ1c2JfaG9zdF9oc191dG1pX3AzX2NsaywJQ0tfNDQzWCksCi0JQ0xLKE5VTEwsCSJ1c2JfaG9zdF9oc19oc2ljNjBtX3AxX2NsayIsCSZ1c2JfaG9zdF9oc19oc2ljNjBtX3AxX2NsaywJQ0tfNDQzWCksCi0JQ0xLKE5VTEwsCSJ1c2JfaG9zdF9oc19oc2ljNjBtX3AyX2NsayIsCSZ1c2JfaG9zdF9oc19oc2ljNjBtX3AyX2NsaywJQ0tfNDQzWCksCisJQ0xLKCJlaGNpLW9tYXAuMCIsCSJmc19mY2siLAkJJnVzYl9ob3N0X2ZzX2ZjaywJQ0tfNDQzWCksCiAJQ0xLKE5VTEwsCSJ1dG1pX3AxX2dmY2xrIiwJCSZ1dG1pX3AxX2dmY2xrLAlDS180NDNYKSwKIAlDTEsoTlVMTCwJInVzYl9ob3N0X2hzX3V0bWlfcDFfY2xrIiwJJnVzYl9ob3N0X2hzX3V0bWlfcDFfY2xrLAlDS180NDNYKSwKIAlDTEsoTlVMTCwJInV0bWlfcDJfZ2ZjbGsiLAkJJnV0bWlfcDJfZ2ZjbGssCUNLXzQ0M1gpLAogCUNMSyhOVUxMLAkidXNiX2hvc3RfaHNfdXRtaV9wMl9jbGsiLAkmdXNiX2hvc3RfaHNfdXRtaV9wMl9jbGssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkidXNiX2hvc3RfaHNfdXRtaV9wM19jbGsiLAkmdXNiX2hvc3RfaHNfdXRtaV9wM19jbGssCUNLXzQ0M1gpLAogCUNMSyhOVUxMLAkidXNiX2hvc3RfaHNfaHNpYzQ4MG1fcDFfY2xrIiwJJnVzYl9ob3N0X2hzX2hzaWM0ODBtX3AxX2NsaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJ1c2JfaG9zdF9oc19oc2ljNjBtX3AxX2NsayIsCSZ1c2JfaG9zdF9oc19oc2ljNjBtX3AxX2NsaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJ1c2JfaG9zdF9oc19oc2ljNjBtX3AyX2NsayIsCSZ1c2JfaG9zdF9oc19oc2ljNjBtX3AyX2NsaywJQ0tfNDQzWCksCiAJQ0xLKE5VTEwsCSJ1c2JfaG9zdF9oc19oc2ljNDgwbV9wMl9jbGsiLAkmdXNiX2hvc3RfaHNfaHNpYzQ4MG1fcDJfY2xrLAlDS180NDNYKSwKIAlDTEsoTlVMTCwJInVzYl9ob3N0X2hzX2Z1bmM0OG1jbGsiLAkmdXNiX2hvc3RfaHNfZnVuYzQ4bWNsaywJQ0tfNDQzWCksCiAJQ0xLKE5VTEwsCSJ1c2JfaG9zdF9oc19mY2siLAkJJnVzYl9ob3N0X2hzX2ZjaywJQ0tfNDQzWCksCisJQ0xLKCJlaGNpLW9tYXAuMCIsCSJoc19mY2siLAkJJnVzYl9ob3N0X2hzX2ZjaywJQ0tfNDQzWCksCisJQ0xLKCJlaGNpLW9tYXAuMCIsCSJ1c2Job3N0X2ljayIsCQkmZHVtbXlfY2ssCQlDS180NDNYKSwKIAlDTEsoTlVMTCwJIm90Z182MG1fZ2ZjbGsiLAkJJm90Z182MG1fZ2ZjbGssCUNLXzQ0M1gpLAogCUNMSyhOVUxMLAkidXNiX290Z19oc194Y2xrIiwJCSZ1c2Jfb3RnX2hzX3hjbGssCUNLXzQ0M1gpLAotCUNMSygibXVzYl9oZHJjIiwJImljayIsCQkJCSZ1c2Jfb3RnX2hzX2ljaywJQ0tfNDQzWCksCisJQ0xLKCJtdXNiLW9tYXAyNDMwIiwJImljayIsCQkJCSZ1c2Jfb3RnX2hzX2ljaywJQ0tfNDQzWCksCiAJQ0xLKE5VTEwsCSJ1c2JfcGh5X2NtX2NsazMyayIsCQkmdXNiX3BoeV9jbV9jbGszMmssCUNLXzQ0M1gpLAogCUNMSyhOVUxMLAkidXNiX3RsbF9oc191c2JfY2gyX2NsayIsCSZ1c2JfdGxsX2hzX3VzYl9jaDJfY2xrLAlDS180NDNYKSwKIAlDTEsoTlVMTCwJInVzYl90bGxfaHNfdXNiX2NoMF9jbGsiLAkmdXNiX3RsbF9oc191c2JfY2gwX2NsaywJQ0tfNDQzWCksCiAJQ0xLKE5VTEwsCSJ1c2JfdGxsX2hzX3VzYl9jaDFfY2xrIiwJJnVzYl90bGxfaHNfdXNiX2NoMV9jbGssCUNLXzQ0M1gpLAogCUNMSyhOVUxMLAkidXNiX3RsbF9oc19pY2siLAkJJnVzYl90bGxfaHNfaWNrLAlDS180NDNYKSwKKwlDTEsoImVoY2ktb21hcC4wIiwJInVzYnRsbF9pY2siLAkJJnVzYl90bGxfaHNfaWNrLAlDS180NDNYKSwKKwlDTEsoImVoY2ktb21hcC4wIiwJInVzYnRsbF9mY2siLAkJJmR1bW15X2NrLAlDS180NDNYKSwKIAlDTEsoTlVMTCwJInVzaW1fY2siLAkJCSZ1c2ltX2NrLAlDS180NDNYKSwKIAlDTEsoTlVMTCwJInVzaW1fZmNsayIsCQkJJnVzaW1fZmNsaywJQ0tfNDQzWCksCiAJQ0xLKE5VTEwsCSJ1c2ltX2ZjayIsCQkJJnVzaW1fZmNrLAlDS180NDNYKSwKIAlDTEsoIm9tYXBfd2R0IiwJImZjayIsCQkJCSZ3ZF90aW1lcjJfZmNrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJIm1haWxib3hlc19pY2siLAkJJmR1bW15X2NrLAlDS180NDNYKSwKIAlDTEsoTlVMTCwJIndkX3RpbWVyM19mY2siLAkJJndkX3RpbWVyM19mY2ssCUNLXzQ0M1gpLAogCUNMSyhOVUxMLAkic3RtX2Nsa19kaXZfY2siLAkJJnN0bV9jbGtfZGl2X2NrLAlDS180NDNYKSwKIAlDTEsoTlVMTCwJInRyYWNlX2Nsa19kaXZfY2siLAkJJnRyYWNlX2Nsa19kaXZfY2ssCUNLXzQ0M1gpLApAQCAtMjk3NSwxMCArMzI0MiwxMCBAQAogCUNMSyhOVUxMLAkiZ3B0OV9pY2siLAkJCSZkdW1teV9jaywJQ0tfNDQzWCksCiAJQ0xLKE5VTEwsCSJncHQxMF9pY2siLAkJCSZkdW1teV9jaywJQ0tfNDQzWCksCiAJQ0xLKE5VTEwsCSJncHQxMV9pY2siLAkJCSZkdW1teV9jaywJQ0tfNDQzWCksCi0JQ0xLKCJpMmNfb21hcC4xIiwJImljayIsCQkJCSZkdW1teV9jaywJQ0tfNDQzWCksCi0JQ0xLKCJpMmNfb21hcC4yIiwJImljayIsCQkJCSZkdW1teV9jaywJQ0tfNDQzWCksCi0JQ0xLKCJpMmNfb21hcC4zIiwJImljayIsCQkJCSZkdW1teV9jaywJQ0tfNDQzWCksCi0JQ0xLKCJpMmNfb21hcC40IiwJImljayIsCQkJCSZkdW1teV9jaywJQ0tfNDQzWCksCisJQ0xLKCJvbWFwX2kyYy4xIiwJImljayIsCQkJCSZkdW1teV9jaywJQ0tfNDQzWCksCisJQ0xLKCJvbWFwX2kyYy4yIiwJImljayIsCQkJCSZkdW1teV9jaywJQ0tfNDQzWCksCisJQ0xLKCJvbWFwX2kyYy4zIiwJImljayIsCQkJCSZkdW1teV9jaywJQ0tfNDQzWCksCisJQ0xLKCJvbWFwX2kyYy40IiwJImljayIsCQkJCSZkdW1teV9jaywJQ0tfNDQzWCksCiAJQ0xLKCJtbWNpLW9tYXAtaHMuMCIsCSJpY2siLAkJCQkmZHVtbXlfY2ssCUNLXzQ0M1gpLAogCUNMSygibW1jaS1vbWFwLWhzLjEiLAkiaWNrIiwJCQkJJmR1bW15X2NrLAlDS180NDNYKSwKIAlDTEsoIm1tY2ktb21hcC1ocy4yIiwJImljayIsCQkJCSZkdW1teV9jaywJQ0tfNDQzWCksCkBAIC0yOTk3LDYgKzMyNjQsMTggQEAKIAlDTEsoTlVMTCwJInVhcnQzX2ljayIsCQkJJmR1bW15X2NrLAlDS180NDNYKSwKIAlDTEsoTlVMTCwJInVhcnQ0X2ljayIsCQkJJmR1bW15X2NrLAlDS180NDNYKSwKIAlDTEsoIm9tYXBfd2R0IiwJImljayIsCQkJCSZkdW1teV9jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJhdXhjbGswX2NrIiwJCQkmYXV4Y2xrMF9jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJhdXhjbGsxX2NrIiwJCQkmYXV4Y2xrMV9jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJhdXhjbGsyX2NrIiwJCQkmYXV4Y2xrMl9jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJhdXhjbGszX2NrIiwJCQkmYXV4Y2xrM19jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJhdXhjbGs0X2NrIiwJCQkmYXV4Y2xrNF9jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJhdXhjbGs1X2NrIiwJCQkmYXV4Y2xrNV9jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJhdXhjbGtyZXEwX2NrIiwJCSZhdXhjbGtyZXEwX2NrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImF1eGNsa3JlcTFfY2siLAkJJmF1eGNsa3JlcTFfY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkiYXV4Y2xrcmVxMl9jayIsCQkmYXV4Y2xrcmVxMl9jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJhdXhjbGtyZXEzX2NrIiwJCSZhdXhjbGtyZXEzX2NrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImF1eGNsa3JlcTRfY2siLAkJJmF1eGNsa3JlcTRfY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkiYXV4Y2xrcmVxNV9jayIsCQkmYXV4Y2xrcmVxNV9jaywJQ0tfNDQzWCksCiB9OwogCiBpbnQgX19pbml0IG9tYXA0eHh4X2Nsa19pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWluLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWluLmMKaW5kZXggNmZiNjFiMS4uZTIwYjk4NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbi5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW4uYwpAQCAtMTMsNyArMTMsNiBAQAogICovCiAjdW5kZWYgREVCVUcKIAotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KQEAgLTI3LDEzICsyNiwxNiBAQAogCiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAKLSNpbmNsdWRlICJwcm0uaCIKKyNpbmNsdWRlICJwcm0yeHh4XzN4eHguaCIKICNpbmNsdWRlICJwcm0tcmVnYml0cy0yNHh4LmgiCi0jaW5jbHVkZSAiY20uaCIKKyNpbmNsdWRlICJjbTJ4eHhfM3h4eC5oIgorI2luY2x1ZGUgImNtLXJlZ2JpdHMtMjR4eC5oIgorI2luY2x1ZGUgImNtaW5zdDQ0eHguaCIKKyNpbmNsdWRlICJwcmNtNDR4eC5oIgogCiAjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgotI2luY2x1ZGUgPHBsYXQvcG93ZXJkb21haW4uaD4KLSNpbmNsdWRlIDxwbGF0L2Nsb2NrZG9tYWluLmg+CisjaW5jbHVkZSAicG93ZXJkb21haW4uaCIKKyNpbmNsdWRlICJjbG9ja2RvbWFpbi5oIgogI2luY2x1ZGUgPHBsYXQvcHJjbS5oPgogCiAvKiBjbGtkbV9saXN0IGNvbnRhaW5zIGFsbCByZWdpc3RlcmVkIHN0cnVjdCBjbG9ja2RvbWFpbnMgKi8KQEAgLTE0MSw2ICsxNDMsOSBAQAogICogY2xvY2tkb21haW4gaXMgaW4gaGFyZHdhcmUtc3VwZXJ2aXNlZCBtb2RlLglNZWFudCB0byBiZSBjYWxsZWQKICAqIG9uY2UgYXQgY2xvY2tkb21haW4gbGF5ZXIgaW5pdGlhbGl6YXRpb24sIHNpbmNlIHRoZXNlIHNob3VsZCByZW1haW4KICAqIGZpeGVkIGZvciBhIHBhcnRpY3VsYXIgYXJjaGl0ZWN0dXJlLiAgTm8gcmV0dXJuIHZhbHVlLgorICoKKyAqIFhYWCBhdXRvZGVwcyBhcmUgZGVwcmVjYXRlZCBhbmQgc2hvdWxkIGJlIHJlbW92ZWQgYXQgdGhlIGVhcmxpZXN0CisgKiBvcHBvcnR1bml0eQogICovCiBzdGF0aWMgdm9pZCBfYXV0b2RlcF9sb29rdXAoc3RydWN0IGNsa2RtX2F1dG9kZXAgKmF1dG9kZXApCiB7CkBAIC0xNjgsNiArMTczLDkgQEAKICAqIEFkZCB0aGUgImF1dG9kZXAiIHNsZWVwICYgd2FrZXVwIGRlcGVuZGVuY2llcyB0byBjbG9ja2RvbWFpbiAnY2xrZG0nCiAgKiBpbiBoYXJkd2FyZS1zdXBlcnZpc2VkIG1vZGUuICBNZWFudCB0byBiZSBjYWxsZWQgZnJvbSBjbG9jayBmcmFtZXdvcmsKICAqIHdoZW4gYSBjbG9jayBpbnNpZGUgY2xvY2tkb21haW4gJ2Nsa2RtJyBpcyBlbmFibGVkLglObyByZXR1cm4gdmFsdWUuCisgKgorICogWFhYIGF1dG9kZXBzIGFyZSBkZXByZWNhdGVkIGFuZCBzaG91bGQgYmUgcmVtb3ZlZCBhdCB0aGUgZWFybGllc3QKKyAqIG9wcG9ydHVuaXR5CiAgKi8KIHN0YXRpYyB2b2lkIF9jbGtkbV9hZGRfYXV0b2RlcHMoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSkKIHsKQEAgLTE5OSw2ICsyMDcsOSBAQAogICogUmVtb3ZlIHRoZSAiYXV0b2RlcCIgc2xlZXAgJiB3YWtldXAgZGVwZW5kZW5jaWVzIGZyb20gY2xvY2tkb21haW4gJ2Nsa2RtJwogICogaW4gaGFyZHdhcmUtc3VwZXJ2aXNlZCBtb2RlLiAgTWVhbnQgdG8gYmUgY2FsbGVkIGZyb20gY2xvY2sgZnJhbWV3b3JrCiAgKiB3aGVuIGEgY2xvY2sgaW5zaWRlIGNsb2NrZG9tYWluICdjbGtkbScgaXMgZGlzYWJsZWQuICBObyByZXR1cm4gdmFsdWUuCisgKgorICogWFhYIGF1dG9kZXBzIGFyZSBkZXByZWNhdGVkIGFuZCBzaG91bGQgYmUgcmVtb3ZlZCBhdCB0aGUgZWFybGllc3QKKyAqIG9wcG9ydHVuaXR5CiAgKi8KIHN0YXRpYyB2b2lkIF9jbGtkbV9kZWxfYXV0b2RlcHMoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSkKIHsKQEAgLTIyMywzOSArMjM0LDU2IEBACiAJfQogfQogCi0vKgotICogX29tYXAyX2Nsa2RtX3NldF9od3N1cCAtIHNldCB0aGUgaHdzdXAgaWRsZSB0cmFuc2l0aW9uIGJpdAorLyoqCisgKiBfZW5hYmxlX2h3c3VwIC0gcGxhY2UgYSBjbG9ja2RvbWFpbiBpbnRvIGhhcmR3YXJlLXN1cGVydmlzZWQgaWRsZQogICogQGNsa2RtOiBzdHJ1Y3QgY2xvY2tkb21haW4gKgotICogQGVuYWJsZTogaW50IDAgdG8gZGlzYWJsZSwgMSB0byBlbmFibGUKICAqCi0gKiBJbnRlcm5hbCBoZWxwZXIgZm9yIGFjdHVhbGx5IHN3aXRjaGluZyB0aGUgYml0IHRoYXQgY29udHJvbHMgaHdzdXAKLSAqIGlkbGUgdHJhbnNpdGlvbnMgZm9yIGNsa2RtLgorICogUGxhY2UgdGhlIGNsb2NrZG9tYWluIGludG8gaGFyZHdhcmUtc3VwZXJ2aXNlZCBpZGxlIG1vZGUuICBObyByZXR1cm4KKyAqIHZhbHVlLgorICoKKyAqIFhYWCBTaG91bGQgdGhpcyByZXR1cm4gYW4gZXJyb3IgaWYgdGhlIGNsb2NrZG9tYWluIGRvZXMgbm90IHN1cHBvcnQKKyAqIGhhcmR3YXJlLXN1cGVydmlzZWQgaWRsZSBtb2RlPwogICovCi1zdGF0aWMgdm9pZCBfb21hcDJfY2xrZG1fc2V0X2h3c3VwKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0sIGludCBlbmFibGUpCitzdGF0aWMgdm9pZCBfZW5hYmxlX2h3c3VwKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pCiB7Ci0JdTMyIGJpdHMsIHY7Ci0KLQlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKLQkJaWYgKGVuYWJsZSkKLQkJCWJpdHMgPSBPTUFQMjRYWF9DTEtTVENUUkxfRU5BQkxFX0FVVE87Ci0JCWVsc2UKLQkJCWJpdHMgPSBPTUFQMjRYWF9DTEtTVENUUkxfRElTQUJMRV9BVVRPOwotCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAzNHh4KCkgfHwgY3B1X2lzX29tYXA0NHh4KCkpIHsKLQkJaWYgKGVuYWJsZSkKLQkJCWJpdHMgPSBPTUFQMzRYWF9DTEtTVENUUkxfRU5BQkxFX0FVVE87Ci0JCWVsc2UKLQkJCWJpdHMgPSBPTUFQMzRYWF9DTEtTVENUUkxfRElTQUJMRV9BVVRPOwotCX0gZWxzZSB7CisJaWYgKGNwdV9pc19vbWFwMjR4eCgpKQorCQlvbWFwMnh4eF9jbV9jbGtkbV9lbmFibGVfaHdzdXAoY2xrZG0tPnB3cmRtLnB0ci0+cHJjbV9vZmZzLAorCQkJCQkgICAgICAgY2xrZG0tPmNsa3RyY3RybF9tYXNrKTsKKwllbHNlIGlmIChjcHVfaXNfb21hcDM0eHgoKSkKKwkJb21hcDN4eHhfY21fY2xrZG1fZW5hYmxlX2h3c3VwKGNsa2RtLT5wd3JkbS5wdHItPnByY21fb2ZmcywKKwkJCQkJICAgICAgIGNsa2RtLT5jbGt0cmN0cmxfbWFzayk7CisJZWxzZSBpZiAoY3B1X2lzX29tYXA0NHh4KCkpCisJCXJldHVybiBvbWFwNF9jbWluc3RfY2xrZG1fZW5hYmxlX2h3c3VwKGNsa2RtLT5wcmNtX3BhcnRpdGlvbiwKKwkJCQkJCSAgICAgICBjbGtkbS0+Y21faW5zdCwKKwkJCQkJCSAgICAgICBjbGtkbS0+Y2xrZG1fb2Zmcyk7CisJZWxzZQogCQlCVUcoKTsKLQl9Cit9CiAKLQliaXRzID0gYml0cyA8PCBfX2ZmcyhjbGtkbS0+Y2xrdHJjdHJsX21hc2spOwotCi0JdiA9IF9fcmF3X3JlYWRsKGNsa2RtLT5jbGtzdGN0cmxfcmVnKTsKLQl2ICY9IH4oY2xrZG0tPmNsa3RyY3RybF9tYXNrKTsKLQl2IHw9IGJpdHM7Ci0JX19yYXdfd3JpdGVsKHYsIGNsa2RtLT5jbGtzdGN0cmxfcmVnKTsKLQorLyoqCisgKiBfZGlzYWJsZV9od3N1cCAtIHBsYWNlIGEgY2xvY2tkb21haW4gaW50byBzb2Z0d2FyZS1zdXBlcnZpc2VkIGlkbGUKKyAqIEBjbGtkbTogc3RydWN0IGNsb2NrZG9tYWluICoKKyAqCisgKiBQbGFjZSB0aGUgY2xvY2tkb21haW4gQGNsa2RtIGludG8gc29mdHdhcmUtc3VwZXJ2aXNlZCBpZGxlIG1vZGUuCisgKiBObyByZXR1cm4gdmFsdWUuCisgKgorICogWFhYIFNob3VsZCB0aGlzIHJldHVybiBhbiBlcnJvciBpZiB0aGUgY2xvY2tkb21haW4gZG9lcyBub3Qgc3VwcG9ydAorICogc29mdHdhcmUtc3VwZXJ2aXNlZCBpZGxlIG1vZGU/CisgKi8KK3N0YXRpYyB2b2lkIF9kaXNhYmxlX2h3c3VwKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pCit7CisJaWYgKGNwdV9pc19vbWFwMjR4eCgpKQorCQlvbWFwMnh4eF9jbV9jbGtkbV9kaXNhYmxlX2h3c3VwKGNsa2RtLT5wd3JkbS5wdHItPnByY21fb2ZmcywKKwkJCQkJCWNsa2RtLT5jbGt0cmN0cmxfbWFzayk7CisJZWxzZSBpZiAoY3B1X2lzX29tYXAzNHh4KCkpCisJCW9tYXAzeHh4X2NtX2Nsa2RtX2Rpc2FibGVfaHdzdXAoY2xrZG0tPnB3cmRtLnB0ci0+cHJjbV9vZmZzLAorCQkJCQkJY2xrZG0tPmNsa3RyY3RybF9tYXNrKTsKKwllbHNlIGlmIChjcHVfaXNfb21hcDQ0eHgoKSkKKwkJcmV0dXJuIG9tYXA0X2NtaW5zdF9jbGtkbV9kaXNhYmxlX2h3c3VwKGNsa2RtLT5wcmNtX3BhcnRpdGlvbiwKKwkJCQkJCQljbGtkbS0+Y21faW5zdCwKKwkJCQkJCQljbGtkbS0+Y2xrZG1fb2Zmcyk7CisJZWxzZQorCQlCVUcoKTsKIH0KIAogLyogUHVibGljIGZ1bmN0aW9ucyAqLwpAQCAtNDA5LDcgKzQzNyw3IEBACiAJCXByX2RlYnVnKCJjbG9ja2RvbWFpbjogaGFyZHdhcmUgd2lsbCB3YWtlIHVwICVzIHdoZW4gJXMgd2FrZXMgIgogCQkJICJ1cFxuIiwgY2xrZG0xLT5uYW1lLCBjbGtkbTItPm5hbWUpOwogCi0JCXBybV9zZXRfbW9kX3JlZ19iaXRzKCgxIDw8IGNsa2RtMi0+ZGVwX2JpdCksCisJCW9tYXAyX3BybV9zZXRfbW9kX3JlZ19iaXRzKCgxIDw8IGNsa2RtMi0+ZGVwX2JpdCksCiAJCQkJICAgICBjbGtkbTEtPnB3cmRtLnB0ci0+cHJjbV9vZmZzLCBQTV9XS0RFUCk7CiAJfQogCkBAIC00NDQsNyArNDcyLDcgQEAKIAkJcHJfZGVidWcoImNsb2NrZG9tYWluOiBoYXJkd2FyZSB3aWxsIG5vIGxvbmdlciB3YWtlIHVwICVzICIKIAkJCSAiYWZ0ZXIgJXMgd2FrZXMgdXBcbiIsIGNsa2RtMS0+bmFtZSwgY2xrZG0yLT5uYW1lKTsKIAotCQlwcm1fY2xlYXJfbW9kX3JlZ19iaXRzKCgxIDw8IGNsa2RtMi0+ZGVwX2JpdCksCisJCW9tYXAyX3BybV9jbGVhcl9tb2RfcmVnX2JpdHMoKDEgPDwgY2xrZG0yLT5kZXBfYml0KSwKIAkJCQkgICAgICAgY2xrZG0xLT5wd3JkbS5wdHItPnByY21fb2ZmcywgUE1fV0tERVApOwogCX0KIApAQCAtNDgwLDcgKzUwOCw3IEBACiAJfQogCiAJLyogWFhYIEl0J3MgZmFzdGVyIHRvIHJldHVybiB0aGUgYXRvbWljIHdrZGVwX3VzZWNvdW50ICovCi0JcmV0dXJuIHBybV9yZWFkX21vZF9iaXRzX3NoaWZ0KGNsa2RtMS0+cHdyZG0ucHRyLT5wcmNtX29mZnMsIFBNX1dLREVQLAorCXJldHVybiBvbWFwMl9wcm1fcmVhZF9tb2RfYml0c19zaGlmdChjbGtkbTEtPnB3cmRtLnB0ci0+cHJjbV9vZmZzLCBQTV9XS0RFUCwKIAkJCQkgICAgICAgKDEgPDwgY2xrZG0yLT5kZXBfYml0KSk7CiB9CiAKQEAgLTUxNCw3ICs1NDIsNyBAQAogCQlhdG9taWNfc2V0KCZjZC0+d2tkZXBfdXNlY291bnQsIDApOwogCX0KIAotCXBybV9jbGVhcl9tb2RfcmVnX2JpdHMobWFzaywgY2xrZG0tPnB3cmRtLnB0ci0+cHJjbV9vZmZzLCBQTV9XS0RFUCk7CisJb21hcDJfcHJtX2NsZWFyX21vZF9yZWdfYml0cyhtYXNrLCBjbGtkbS0+cHdyZG0ucHRyLT5wcmNtX29mZnMsIFBNX1dLREVQKTsKIAogCXJldHVybiAwOwogfQpAQCAtNTUzLDcgKzU4MSw3IEBACiAJCXByX2RlYnVnKCJjbG9ja2RvbWFpbjogd2lsbCBwcmV2ZW50ICVzIGZyb20gc2xlZXBpbmcgaWYgJXMgIgogCQkJICJpcyBhY3RpdmVcbiIsIGNsa2RtMS0+bmFtZSwgY2xrZG0yLT5uYW1lKTsKIAotCQljbV9zZXRfbW9kX3JlZ19iaXRzKCgxIDw8IGNsa2RtMi0+ZGVwX2JpdCksCisJCW9tYXAyX2NtX3NldF9tb2RfcmVnX2JpdHMoKDEgPDwgY2xrZG0yLT5kZXBfYml0KSwKIAkJCQkgICAgY2xrZG0xLT5wd3JkbS5wdHItPnByY21fb2ZmcywKIAkJCQkgICAgT01BUDM0MzBfQ01fU0xFRVBERVApOwogCX0KQEAgLTU5Niw3ICs2MjQsNyBAQAogCQkJICJzbGVlcGluZyBpZiAlcyBpcyBhY3RpdmVcbiIsIGNsa2RtMS0+bmFtZSwKIAkJCSBjbGtkbTItPm5hbWUpOwogCi0JCWNtX2NsZWFyX21vZF9yZWdfYml0cygoMSA8PCBjbGtkbTItPmRlcF9iaXQpLAorCQlvbWFwMl9jbV9jbGVhcl9tb2RfcmVnX2JpdHMoKDEgPDwgY2xrZG0yLT5kZXBfYml0KSwKIAkJCQkgICAgICBjbGtkbTEtPnB3cmRtLnB0ci0+cHJjbV9vZmZzLAogCQkJCSAgICAgIE9NQVAzNDMwX0NNX1NMRUVQREVQKTsKIAl9CkBAIC02MzksNyArNjY3LDcgQEAKIAl9CiAKIAkvKiBYWFggSXQncyBmYXN0ZXIgdG8gcmV0dXJuIHRoZSBhdG9taWMgc2xlZXBkZXBfdXNlY291bnQgKi8KLQlyZXR1cm4gcHJtX3JlYWRfbW9kX2JpdHNfc2hpZnQoY2xrZG0xLT5wd3JkbS5wdHItPnByY21fb2ZmcywKKwlyZXR1cm4gb21hcDJfcHJtX3JlYWRfbW9kX2JpdHNfc2hpZnQoY2xrZG0xLT5wd3JkbS5wdHItPnByY21fb2ZmcywKIAkJCQkgICAgICAgT01BUDM0MzBfQ01fU0xFRVBERVAsCiAJCQkJICAgICAgICgxIDw8IGNsa2RtMi0+ZGVwX2JpdCkpOwogfQpAQCAtNjc3LDM1ICs3MDUsMTMgQEAKIAkJYXRvbWljX3NldCgmY2QtPnNsZWVwZGVwX3VzZWNvdW50LCAwKTsKIAl9CiAKLQlwcm1fY2xlYXJfbW9kX3JlZ19iaXRzKG1hc2ssIGNsa2RtLT5wd3JkbS5wdHItPnByY21fb2ZmcywKKwlvbWFwMl9wcm1fY2xlYXJfbW9kX3JlZ19iaXRzKG1hc2ssIGNsa2RtLT5wd3JkbS5wdHItPnByY21fb2ZmcywKIAkJCSAgICAgICBPTUFQMzQzMF9DTV9TTEVFUERFUCk7CiAKIAlyZXR1cm4gMDsKIH0KIAogLyoqCi0gKiBvbWFwMl9jbGtkbV9jbGt0cmN0cmxfcmVhZCAtIHJlYWQgdGhlIGNsa2RtJ3MgY3VycmVudCBzdGF0ZSB0cmFuc2l0aW9uIG1vZGUKLSAqIEBjbGtkbTogc3RydWN0IGNsa2RtICogb2YgYSBjbG9ja2RvbWFpbgotICoKLSAqIFJldHVybiB0aGUgY2xvY2tkb21haW4gQGNsa2RtIGN1cnJlbnQgc3RhdGUgdHJhbnNpdGlvbiBtb2RlIGZyb20gdGhlCi0gKiBjb3JyZXNwb25kaW5nIGRvbWFpbiBDTV9DTEtTVENUUkwgcmVnaXN0ZXIuCVJldHVybnMgLUVJTlZBTCBpZiBAY2xrZG0KLSAqIGlzIE5VTEwgb3IgdGhlIGN1cnJlbnQgbW9kZSB1cG9uIHN1Y2Nlc3MuCi0gKi8KLXN0YXRpYyBpbnQgb21hcDJfY2xrZG1fY2xrdHJjdHJsX3JlYWQoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSkKLXsKLQl1MzIgdjsKLQotCWlmICghY2xrZG0pCi0JCXJldHVybiAtRUlOVkFMOwotCi0JdiA9IF9fcmF3X3JlYWRsKGNsa2RtLT5jbGtzdGN0cmxfcmVnKTsKLQl2ICY9IGNsa2RtLT5jbGt0cmN0cmxfbWFzazsKLQl2ID4+PSBfX2ZmcyhjbGtkbS0+Y2xrdHJjdHJsX21hc2spOwotCi0JcmV0dXJuIHY7Ci19Ci0KLS8qKgogICogb21hcDJfY2xrZG1fc2xlZXAgLSBmb3JjZSBjbG9ja2RvbWFpbiBzbGVlcCB0cmFuc2l0aW9uCiAgKiBAY2xrZG06IHN0cnVjdCBjbG9ja2RvbWFpbiAqCiAgKgpAQCAtNzI5LDE4ICs3MzUsMTkgQEAKIAogCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgewogCi0JCWNtX3NldF9tb2RfcmVnX2JpdHMoT01BUDI0WFhfRk9SQ0VTVEFURV9NQVNLLAorCQlvbWFwMl9jbV9zZXRfbW9kX3JlZ19iaXRzKE9NQVAyNFhYX0ZPUkNFU1RBVEVfTUFTSywKIAkJCSAgICBjbGtkbS0+cHdyZG0ucHRyLT5wcmNtX29mZnMsIE9NQVAyX1BNX1BXU1RDVFJMKTsKIAotCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAzNHh4KCkgfHwgY3B1X2lzX29tYXA0NHh4KCkpIHsKKwl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMzR4eCgpKSB7CiAKLQkJdTMyIGJpdHMgPSAoT01BUDM0WFhfQ0xLU1RDVFJMX0ZPUkNFX1NMRUVQIDw8Ci0JCQkgX19mZnMoY2xrZG0tPmNsa3RyY3RybF9tYXNrKSk7CisJCW9tYXAzeHh4X2NtX2Nsa2RtX2ZvcmNlX3NsZWVwKGNsa2RtLT5wd3JkbS5wdHItPnByY21fb2ZmcywKKwkJCQkJICAgICAgY2xrZG0tPmNsa3RyY3RybF9tYXNrKTsKIAotCQl1MzIgdiA9IF9fcmF3X3JlYWRsKGNsa2RtLT5jbGtzdGN0cmxfcmVnKTsKLQkJdiAmPSB+KGNsa2RtLT5jbGt0cmN0cmxfbWFzayk7Ci0JCXYgfD0gYml0czsKLQkJX19yYXdfd3JpdGVsKHYsIGNsa2RtLT5jbGtzdGN0cmxfcmVnKTsKKwl9IGVsc2UgaWYgKGNwdV9pc19vbWFwNDR4eCgpKSB7CisKKwkJb21hcDRfY21pbnN0X2Nsa2RtX2ZvcmNlX3NsZWVwKGNsa2RtLT5wcmNtX3BhcnRpdGlvbiwKKwkJCQkJICAgICAgIGNsa2RtLT5jbV9pbnN0LAorCQkJCQkgICAgICAgY2xrZG0tPmNsa2RtX29mZnMpOwogCiAJfSBlbHNlIHsKIAkJQlVHKCk7CkBAIC03NzMsMTggKzc4MCwxOSBAQAogCiAJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CiAKLQkJY21fY2xlYXJfbW9kX3JlZ19iaXRzKE9NQVAyNFhYX0ZPUkNFU1RBVEVfTUFTSywKKwkJb21hcDJfY21fY2xlYXJfbW9kX3JlZ19iaXRzKE9NQVAyNFhYX0ZPUkNFU1RBVEVfTUFTSywKIAkJCSAgICAgIGNsa2RtLT5wd3JkbS5wdHItPnByY21fb2ZmcywgT01BUDJfUE1fUFdTVENUUkwpOwogCi0JfSBlbHNlIGlmIChjcHVfaXNfb21hcDM0eHgoKSB8fCBjcHVfaXNfb21hcDQ0eHgoKSkgeworCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAzNHh4KCkpIHsKIAotCQl1MzIgYml0cyA9IChPTUFQMzRYWF9DTEtTVENUUkxfRk9SQ0VfV0FLRVVQIDw8Ci0JCQkgX19mZnMoY2xrZG0tPmNsa3RyY3RybF9tYXNrKSk7CisJCW9tYXAzeHh4X2NtX2Nsa2RtX2ZvcmNlX3dha2V1cChjbGtkbS0+cHdyZG0ucHRyLT5wcmNtX29mZnMsCisJCQkJCSAgICAgICBjbGtkbS0+Y2xrdHJjdHJsX21hc2spOwogCi0JCXUzMiB2ID0gX19yYXdfcmVhZGwoY2xrZG0tPmNsa3N0Y3RybF9yZWcpOwotCQl2ICY9IH4oY2xrZG0tPmNsa3RyY3RybF9tYXNrKTsKLQkJdiB8PSBiaXRzOwotCQlfX3Jhd193cml0ZWwodiwgY2xrZG0tPmNsa3N0Y3RybF9yZWcpOworCX0gZWxzZSBpZiAoY3B1X2lzX29tYXA0NHh4KCkpIHsKKworCQlvbWFwNF9jbWluc3RfY2xrZG1fZm9yY2Vfd2FrZXVwKGNsa2RtLT5wcmNtX3BhcnRpdGlvbiwKKwkJCQkJCWNsa2RtLT5jbV9pbnN0LAorCQkJCQkJY2xrZG0tPmNsa2RtX29mZnMpOwogCiAJfSBlbHNlIHsKIAkJQlVHKCk7CkBAIC04MjksNyArODM3LDcgQEAKIAkJCV9jbGtkbV9hZGRfYXV0b2RlcHMoY2xrZG0pOwogCX0KIAotCV9vbWFwMl9jbGtkbV9zZXRfaHdzdXAoY2xrZG0sIDEpOworCV9lbmFibGVfaHdzdXAoY2xrZG0pOwogCiAJcHdyZG1fY2xrZG1fc3RhdGVfc3dpdGNoKGNsa2RtKTsKIH0KQEAgLTg1Nyw3ICs4NjUsNyBAQAogCXByX2RlYnVnKCJjbG9ja2RvbWFpbjogZGlzYWJsaW5nIGF1dG9tYXRpYyBpZGxlIHRyYW5zaXRpb25zIGZvciAlc1xuIiwKIAkJIGNsa2RtLT5uYW1lKTsKIAotCV9vbWFwMl9jbGtkbV9zZXRfaHdzdXAoY2xrZG0sIDApOworCV9kaXNhYmxlX2h3c3VwKGNsa2RtKTsKIAogCS8qCiAJICogWFhYIFRoaXMgc2hvdWxkIGJlIHJlbW92ZWQgb25jZSBUSSBhZGRzIHdha2V1cC9zbGVlcApAQCAtODkxLDcgKzg5OSw3IEBACiAgKi8KIGludCBvbWFwMl9jbGtkbV9jbGtfZW5hYmxlKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0sIHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgdjsKKwlib29sIGh3c3VwID0gZmFsc2U7CiAKIAkvKgogCSAqIFhYWCBSZXdyaXRlIHRoaXMgY29kZSB0byBtYWludGFpbiBhIGxpc3Qgb2YgZW5hYmxlZApAQCAtOTA5LDE3ICs5MTcsMjcgQEAKIAlwcl9kZWJ1ZygiY2xvY2tkb21haW46IGNsa2RtICVzOiBjbGsgJXMgbm93IGVuYWJsZWRcbiIsIGNsa2RtLT5uYW1lLAogCQkgY2xrLT5uYW1lKTsKIAotCWlmICghY2xrZG0tPmNsa3N0Y3RybF9yZWcpCi0JCXJldHVybiAwOworCWlmIChjcHVfaXNfb21hcDI0eHgoKSB8fCBjcHVfaXNfb21hcDM0eHgoKSkgewogCi0JdiA9IG9tYXAyX2Nsa2RtX2Nsa3RyY3RybF9yZWFkKGNsa2RtKTsKKwkJaWYgKCFjbGtkbS0+Y2xrdHJjdHJsX21hc2spCisJCQlyZXR1cm4gMDsKIAotCWlmICgoY3B1X2lzX29tYXAzNHh4KCkgJiYgdiA9PSBPTUFQMzRYWF9DTEtTVENUUkxfRU5BQkxFX0FVVE8pIHx8Ci0JICAgIChjcHVfaXNfb21hcDI0eHgoKSAmJiB2ID09IE9NQVAyNFhYX0NMS1NUQ1RSTF9FTkFCTEVfQVVUTykpIHsKKwkJaHdzdXAgPSBvbWFwMl9jbV9pc19jbGtkbV9pbl9od3N1cChjbGtkbS0+cHdyZG0ucHRyLT5wcmNtX29mZnMsCisJCQkJCQkgICBjbGtkbS0+Y2xrdHJjdHJsX21hc2spOworCisJfSBlbHNlIGlmIChjcHVfaXNfb21hcDQ0eHgoKSkgeworCisJCWh3c3VwID0gb21hcDRfY21pbnN0X2lzX2Nsa2RtX2luX2h3c3VwKGNsa2RtLT5wcmNtX3BhcnRpdGlvbiwKKwkJCQkJCSAgICAgICBjbGtkbS0+Y21faW5zdCwKKwkJCQkJCSAgICAgICBjbGtkbS0+Y2xrZG1fb2Zmcyk7CisKKwl9CisKKwlpZiAoaHdzdXApIHsKIAkJLyogRGlzYWJsZSBIVyB0cmFuc2l0aW9ucyB3aGVuIHdlIGFyZSBjaGFuZ2luZyBkZXBzICovCi0JCV9vbWFwMl9jbGtkbV9zZXRfaHdzdXAoY2xrZG0sIDApOworCQlfZGlzYWJsZV9od3N1cChjbGtkbSk7CiAJCV9jbGtkbV9hZGRfYXV0b2RlcHMoY2xrZG0pOwotCQlfb21hcDJfY2xrZG1fc2V0X2h3c3VwKGNsa2RtLCAxKTsKKwkJX2VuYWJsZV9od3N1cChjbGtkbSk7CiAJfSBlbHNlIHsKIAkJb21hcDJfY2xrZG1fd2FrZXVwKGNsa2RtKTsKIAl9CkBAIC05NDYsNyArOTY0LDcgQEAKICAqLwogaW50IG9tYXAyX2Nsa2RtX2Nsa19kaXNhYmxlKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0sIHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgdjsKKwlib29sIGh3c3VwID0gZmFsc2U7CiAKIAkvKgogCSAqIFhYWCBSZXdyaXRlIHRoaXMgY29kZSB0byBtYWludGFpbiBhIGxpc3Qgb2YgZW5hYmxlZApAQCAtOTcxLDE3ICs5ODksMjcgQEAKIAlwcl9kZWJ1ZygiY2xvY2tkb21haW46IGNsa2RtICVzOiBjbGsgJXMgbm93IGRpc2FibGVkXG4iLCBjbGtkbS0+bmFtZSwKIAkJIGNsay0+bmFtZSk7CiAKLQlpZiAoIWNsa2RtLT5jbGtzdGN0cmxfcmVnKQotCQlyZXR1cm4gMDsKKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkgfHwgY3B1X2lzX29tYXAzNHh4KCkpIHsKIAotCXYgPSBvbWFwMl9jbGtkbV9jbGt0cmN0cmxfcmVhZChjbGtkbSk7CisJCWlmICghY2xrZG0tPmNsa3RyY3RybF9tYXNrKQorCQkJcmV0dXJuIDA7CiAKLQlpZiAoKGNwdV9pc19vbWFwMzR4eCgpICYmIHYgPT0gT01BUDM0WFhfQ0xLU1RDVFJMX0VOQUJMRV9BVVRPKSB8fAotCSAgICAoY3B1X2lzX29tYXAyNHh4KCkgJiYgdiA9PSBPTUFQMjRYWF9DTEtTVENUUkxfRU5BQkxFX0FVVE8pKSB7CisJCWh3c3VwID0gb21hcDJfY21faXNfY2xrZG1faW5faHdzdXAoY2xrZG0tPnB3cmRtLnB0ci0+cHJjbV9vZmZzLAorCQkJCQkJICAgY2xrZG0tPmNsa3RyY3RybF9tYXNrKTsKKworCX0gZWxzZSBpZiAoY3B1X2lzX29tYXA0NHh4KCkpIHsKKworCQlod3N1cCA9IG9tYXA0X2NtaW5zdF9pc19jbGtkbV9pbl9od3N1cChjbGtkbS0+cHJjbV9wYXJ0aXRpb24sCisJCQkJCQkgICAgICAgY2xrZG0tPmNtX2luc3QsCisJCQkJCQkgICAgICAgY2xrZG0tPmNsa2RtX29mZnMpOworCisJfQorCisJaWYgKGh3c3VwKSB7CiAJCS8qIERpc2FibGUgSFcgdHJhbnNpdGlvbnMgd2hlbiB3ZSBhcmUgY2hhbmdpbmcgZGVwcyAqLwotCQlfb21hcDJfY2xrZG1fc2V0X2h3c3VwKGNsa2RtLCAwKTsKKwkJX2Rpc2FibGVfaHdzdXAoY2xrZG0pOwogCQlfY2xrZG1fZGVsX2F1dG9kZXBzKGNsa2RtKTsKLQkJX29tYXAyX2Nsa2RtX3NldF9od3N1cChjbGtkbSwgMSk7CisJCV9lbmFibGVfaHdzdXAoY2xrZG0pOwogCX0gZWxzZSB7CiAJCW9tYXAyX2Nsa2RtX3NsZWVwKGNsa2RtKTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWluLmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGUzZmFhMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW4uaApAQCAtMCwwICsxLDE0OSBAQAorLyoKKyAqIGFyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvY2xvY2tkb21haW4uaAorICoKKyAqIE9NQVAyLzMgY2xvY2tkb21haW4gZnJhbWV3b3JrIGZ1bmN0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTAgTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBQYXVsIFdhbG1zbGV5CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9DTE9DS0RPTUFJTl9ICisjZGVmaW5lIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9DTE9DS0RPTUFJTl9ICisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNpbmNsdWRlICJwb3dlcmRvbWFpbi5oIgorI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgorCisvKiBDbG9ja2RvbWFpbiBjYXBhYmlsaXR5IGZsYWdzICovCisjZGVmaW5lIENMS0RNX0NBTl9GT1JDRV9TTEVFUAkJCSgxIDw8IDApCisjZGVmaW5lIENMS0RNX0NBTl9GT1JDRV9XQUtFVVAJCQkoMSA8PCAxKQorI2RlZmluZSBDTEtETV9DQU5fRU5BQkxFX0FVVE8JCQkoMSA8PCAyKQorI2RlZmluZSBDTEtETV9DQU5fRElTQUJMRV9BVVRPCQkJKDEgPDwgMykKKworI2RlZmluZSBDTEtETV9DQU5fSFdTVVAJCShDTEtETV9DQU5fRU5BQkxFX0FVVE8gfCBDTEtETV9DQU5fRElTQUJMRV9BVVRPKQorI2RlZmluZSBDTEtETV9DQU5fU1dTVVAJCShDTEtETV9DQU5fRk9SQ0VfU0xFRVAgfCBDTEtETV9DQU5fRk9SQ0VfV0FLRVVQKQorI2RlZmluZSBDTEtETV9DQU5fSFdTVVBfU1dTVVAJKENMS0RNX0NBTl9TV1NVUCB8IENMS0RNX0NBTl9IV1NVUCkKKworLyoqCisgKiBzdHJ1Y3QgY2xrZG1fYXV0b2RlcCAtIGNsa2RtIGRlcHMgdG8gYWRkIHdoZW4gZW50ZXJpbmcvZXhpdGluZyBod3N1cCBtb2RlCisgKiBAY2xrZG06IGNsb2NrZG9tYWluIHRvIGFkZCB3a2RlcCtzbGVlcGRlcCBvbiAtIHNldCBuYW1lIG1lbWJlciBvbmx5CisgKiBAb21hcF9jaGlwOiBPTUFQIGNoaXAgdHlwZXMgdGhhdCB0aGlzIGF1dG9kZXAgaXMgdmFsaWQgb24KKyAqCisgKiBBIGNsb2NrZG9tYWluIHRoYXQgc2hvdWxkIGhhdmUgd2tkZXBzIGFuZCBzbGVlcGRlcHMgYWRkZWQgd2hlbiBhCisgKiBjbG9ja2RvbWFpbiBzaG91bGQgc3RheSBhY3RpdmUgaW4gaHdzdXAgbW9kZTsgYW5kIGNvbnZlcnNlbHksCisgKiByZW1vdmVkIHdoZW4gdGhlIGNsb2NrZG9tYWluIHNob3VsZCBiZSBhbGxvd2VkIHRvIGdvIGluYWN0aXZlIGluCisgKiBod3N1cCBtb2RlLgorICoKKyAqIEF1dG9kZXBzIGFyZSBkZXByZWNhdGVkIGFuZCBzaG91bGQgYmUgcmVtb3ZlZCBhZnRlcgorICogb21hcF9od21vZC1iYXNlZCBmaW5lLWdyYWluZWQgbW9kdWxlIGlkbGUgY29udHJvbCBpcyBhZGRlZC4KKyAqLworc3RydWN0IGNsa2RtX2F1dG9kZXAgeworCXVuaW9uIHsKKwkJY29uc3QgY2hhciAqbmFtZTsKKwkJc3RydWN0IGNsb2NrZG9tYWluICpwdHI7CisJfSBjbGtkbTsKKwljb25zdCBzdHJ1Y3Qgb21hcF9jaGlwX2lkIG9tYXBfY2hpcDsKK307CisKKy8qKgorICogc3RydWN0IGNsa2RtX2RlcCAtIGVuY29kZSBkZXBlbmRlbmNpZXMgYmV0d2VlbiBjbG9ja2RvbWFpbnMKKyAqIEBjbGtkbV9uYW1lOiBjbG9ja2RvbWFpbiBuYW1lCisgKiBAY2xrZG06IHBvaW50ZXIgdG8gdGhlIHN0cnVjdCBjbG9ja2RvbWFpbiBvZiBAY2xrZG1fbmFtZQorICogQG9tYXBfY2hpcDogT01BUCBjaGlwIHR5cGVzIHRoYXQgdGhpcyBkZXBlbmRlbmN5IGlzIHZhbGlkIG9uCisgKiBAd2tkZXBfdXNlY291bnQ6IE51bWJlciBvZiB3YWtldXAgZGVwZW5kZW5jaWVzIGNhdXNpbmcgdGhpcyBjbGtkbSB0byB3YWtlCisgKiBAc2xlZXBkZXBfdXNlY291bnQ6IE51bWJlciBvZiBzbGVlcCBkZXBzIHRoYXQgY291bGQgcHJldmVudCBjbGtkbSBmcm9tIGlkbGUKKyAqCisgKiBTdGF0aWNhbGx5IGRlZmluZWQuICBAY2xrZG0gaXMgcmVzb2x2ZWQgZnJvbSBAY2xrZG1fbmFtZSBhdCBydW50aW1lIGFuZAorICogc2hvdWxkIG5vdCBiZSBwcmUtaW5pdGlhbGl6ZWQuCisgKgorICogWFhYIFNob3VsZCBhbHNvIGluY2x1ZGUgaGFyZHdhcmUgKGZpeGVkKSBkZXBlbmRlbmNpZXMuCisgKi8KK3N0cnVjdCBjbGtkbV9kZXAgeworCWNvbnN0IGNoYXIgKmNsa2RtX25hbWU7CisJc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbTsKKwlhdG9taWNfdCB3a2RlcF91c2Vjb3VudDsKKwlhdG9taWNfdCBzbGVlcGRlcF91c2Vjb3VudDsKKwljb25zdCBzdHJ1Y3Qgb21hcF9jaGlwX2lkIG9tYXBfY2hpcDsKK307CisKKy8qKgorICogc3RydWN0IGNsb2NrZG9tYWluIC0gT01BUCBjbG9ja2RvbWFpbgorICogQG5hbWU6IGNsb2NrZG9tYWluIG5hbWUKKyAqIEBwd3JkbTogcG93ZXJkb21haW4gY29udGFpbmluZyB0aGlzIGNsb2NrZG9tYWluCisgKiBAY2xrdHJjdHJsX3JlZzogQ0xLU1RDVFJMIHJlZyBmb3IgdGhlIGdpdmVuIGNsb2NrIGRvbWFpbgorICogQGNsa3RyY3RybF9tYXNrOiBDTEtUUkNUUkwvQVVUT1NUQVRFIGZpZWxkIG1hc2sgaW4gQ01fQ0xLU1RDVFJMIHJlZworICogQGZsYWdzOiBDbG9ja2RvbWFpbiBjYXBhYmlsaXR5IGZsYWdzCisgKiBAZGVwX2JpdDogQml0IHNoaWZ0IG9mIHRoaXMgY2xvY2tkb21haW4ncyBQTV9XS0RFUC9DTV9TTEVFUERFUCBiaXQKKyAqIEBwcmNtX3BhcnRpdGlvbjogKE9NQVA0IG9ubHkpIFBSQ00gcGFydGl0aW9uIElEIGZvciB0aGlzIGNsa2RtJ3MgcmVnaXN0ZXJzCisgKiBAY21faW5zdDogKE9NQVA0IG9ubHkpIENNIGluc3RhbmNlIHJlZ2lzdGVyIG9mZnNldAorICogQGNsa2RtX29mZnM6IChPTUFQNCBvbmx5KSBDTSBjbG9ja2RvbWFpbiByZWdpc3RlciBvZmZzZXQKKyAqIEB3a2RlcF9zcmNzOiBDbG9ja2RvbWFpbnMgdGhhdCBjYW4gYmUgdG9sZCB0byB3YWtlIHRoaXMgcG93ZXJkb21haW4gdXAKKyAqIEBzbGVlcGRlcF9zcmNzOiBDbG9ja2RvbWFpbnMgdGhhdCBjYW4gYmUgdG9sZCB0byBrZWVwIHRoaXMgY2xrZG0gZnJvbSBpbmFjdAorICogQG9tYXBfY2hpcDogT01BUCBjaGlwIHR5cGVzIHRoYXQgdGhpcyBjbG9ja2RvbWFpbiBpcyB2YWxpZCBvbgorICogQHVzZWNvdW50OiBVc2Vjb3VudCB0cmFja2luZworICogQG5vZGU6IGxpc3RfaGVhZCB0byBsaW5rIGFsbCBjbG9ja2RvbWFpbnMgdG9nZXRoZXIKKyAqCisgKiBAcHJjbV9wYXJ0aXRpb24gc2hvdWxkIGJlIGEgbWFjcm8gZnJvbSBtYWNoLW9tYXAyL3ByY200NHh4LmggKE9NQVA0IG9ubHkpCisgKiBAY21faW5zdCBzaG91bGQgYmUgYSBtYWNybyBlbmRpbmcgaW4gX0lOU1QgZnJvbSB0aGUgT01BUDQgQ00gaW5zdGFuY2UKKyAqICAgICBkZWZpbml0aW9ucyAoT01BUDQgb25seSkKKyAqIEBjbGtkbV9vZmZzIHNob3VsZCBiZSBhIG1hY3JvIGVuZGluZyBpbiBfQ0RPRkZTIGZyb20gdGhlIE9NQVA0IENNIGluc3RhbmNlCisgKiAgICAgZGVmaW5pdGlvbnMgKE9NQVA0IG9ubHkpCisgKi8KK3N0cnVjdCBjbG9ja2RvbWFpbiB7CisJY29uc3QgY2hhciAqbmFtZTsKKwl1bmlvbiB7CisJCWNvbnN0IGNoYXIgKm5hbWU7CisJCXN0cnVjdCBwb3dlcmRvbWFpbiAqcHRyOworCX0gcHdyZG07CisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMikgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykKKwljb25zdCB1MTYgY2xrdHJjdHJsX21hc2s7CisjZW5kaWYKKwljb25zdCB1OCBmbGFnczsKKwljb25zdCB1OCBkZXBfYml0OworCWNvbnN0IHU4IHByY21fcGFydGl0aW9uOworCWNvbnN0IHMxNiBjbV9pbnN0OworCWNvbnN0IHUxNiBjbGtkbV9vZmZzOworCXN0cnVjdCBjbGtkbV9kZXAgKndrZGVwX3NyY3M7CisJc3RydWN0IGNsa2RtX2RlcCAqc2xlZXBkZXBfc3JjczsKKwljb25zdCBzdHJ1Y3Qgb21hcF9jaGlwX2lkIG9tYXBfY2hpcDsKKwlhdG9taWNfdCB1c2Vjb3VudDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7Cit9OworCit2b2lkIGNsa2RtX2luaXQoc3RydWN0IGNsb2NrZG9tYWluICoqY2xrZG1zLCBzdHJ1Y3QgY2xrZG1fYXV0b2RlcCAqYXV0b2RlcHMpOworc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbV9sb29rdXAoY29uc3QgY2hhciAqbmFtZSk7CisKK2ludCBjbGtkbV9mb3JfZWFjaChpbnQgKCpmbikoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSwgdm9pZCAqdXNlciksCisJCQl2b2lkICp1c2VyKTsKK3N0cnVjdCBwb3dlcmRvbWFpbiAqY2xrZG1fZ2V0X3B3cmRtKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pOworCitpbnQgY2xrZG1fYWRkX3drZGVwKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0xLCBzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtMik7CitpbnQgY2xrZG1fZGVsX3drZGVwKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0xLCBzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtMik7CitpbnQgY2xrZG1fcmVhZF93a2RlcChzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtMSwgc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbTIpOworaW50IGNsa2RtX2NsZWFyX2FsbF93a2RlcHMoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSk7CitpbnQgY2xrZG1fYWRkX3NsZWVwZGVwKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0xLCBzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtMik7CitpbnQgY2xrZG1fZGVsX3NsZWVwZGVwKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0xLCBzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtMik7CitpbnQgY2xrZG1fcmVhZF9zbGVlcGRlcChzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtMSwgc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbTIpOworaW50IGNsa2RtX2NsZWFyX2FsbF9zbGVlcGRlcHMoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSk7CisKK3ZvaWQgb21hcDJfY2xrZG1fYWxsb3dfaWRsZShzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKTsKK3ZvaWQgb21hcDJfY2xrZG1fZGVueV9pZGxlKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pOworCitpbnQgb21hcDJfY2xrZG1fd2FrZXVwKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pOworaW50IG9tYXAyX2Nsa2RtX3NsZWVwKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pOworCitpbnQgb21hcDJfY2xrZG1fY2xrX2VuYWJsZShzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtLCBzdHJ1Y3QgY2xrICpjbGspOworaW50IG9tYXAyX2Nsa2RtX2Nsa19kaXNhYmxlKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0sIHN0cnVjdCBjbGsgKmNsayk7CisKK2V4dGVybiB2b2lkIF9faW5pdCBvbWFwMl9jbG9ja2RvbWFpbnNfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIF9faW5pdCBvbWFwNDR4eF9jbG9ja2RvbWFpbnNfaW5pdCh2b2lkKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWlucy5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbnMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGZjMTlmZi4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWlucy5oCisrKyAvZGV2L251bGwKQEAgLTEsOTM3ICswLDAgQEAKLS8qCi0gKiBPTUFQMi8zIGNsb2NrZG9tYWlucwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgotICoKLSAqIFdyaXR0ZW4gYnkgUGF1bCBXYWxtc2xleSBhbmQgSm91bmkgSMO2Z2FuZGVyCi0gKgotICogVGhpcyBmaWxlIGNvbnRhaW5zIGNsb2NrZG9tYWlucyBhbmQgY2xvY2tkb21haW4gd2FrZXVwL3NsZWVwCi0gKiBkZXBlbmRlbmNpZXMgZm9yIHRoZSBPTUFQMi8zIGNoaXBzLiAgU29tZSBub3RlczoKLSAqCi0gKiBBIHVzZWZ1bCB2YWxpZGF0aW9uIHJ1bGUgZm9yIHN0cnVjdCBjbG9ja2RvbWFpbjogQW55IGNsb2NrZG9tYWluCi0gKiByZWZlcmVuY2VkIGJ5IGEgd2tkZXBfc3JjcyBvciBzbGVlcGRlcF9zcmNzIGFycmF5IG11c3QgaGF2ZSBhCi0gKiBkZXBfYml0IGFzc2lnbmVkLiAgU28gd2tkZXBfc3Jjcy9zbGVlcGRlcF9zcmNzIGFyZSByZWFsbHkganVzdAotICogc29mdHdhcmUtY29udHJvbGxhYmxlIGRlcGVuZGVuY2llcy4gIE5vbi1zb2Z0d2FyZS1jb250cm9sbGFibGUKLSAqIGRlcGVuZGVuY2llcyBkbyBleGlzdCwgYnV0IHRoZXkgYXJlIG5vdCBlbmNvZGVkIGJlbG93ICh5ZXQpLgotICoKLSAqIDI0eHggZG9lcyBub3Qgc3VwcG9ydCBwcm9ncmFtbWFibGUgc2xlZXAgZGVwZW5kZW5jaWVzIChTTEVFUERFUCkKLSAqCi0gKiBUaGUgb3Zlcmx5LXNwZWNpZmljIGRlcF9iaXQgbmFtZXMgYXJlIGR1ZSB0byBhIGJpdCBuYW1lIGNvbGxpc2lvbgotICogd2l0aCBDTV9GQ0xLRU5fe0RTUCxJVkEyfS4gIFRoZSBEU1AvSVZBMiBQTV9XS0RFUCBhbmQgQ01fU0xFRVBERVAgc2hpZnQKLSAqIHZhbHVlIGFyZSB0aGUgc2FtZSBmb3IgYWxsIHBvd2VyZG9tYWluczogMgotICoKLSAqIFhYWCBzaG91bGQgZGVwX2JpdCBiZSBhIG1hc2ssIHNvIHdlIGNhbiB0ZXN0IHRvIHNlZSBpZiBpdCBpcyAwIGFzIGEKLSAqIHNhbml0eSBjaGVjaz8KLSAqIFhYWCBlbmNvZGUgaGFyZHdhcmUgZml4ZWQgd2FrZXVwIGRlcGVuZGVuY2llcyAtLSBlc3AuIGZvciAzNDMwIENPUkUKLSAqLwotCi0vKgotICogVG8tRG8gTGlzdAotICogLT4gUG9ydCB0aGUgU2xlZXAvV2FrZXVwIGRlcGVuZGVuY2llcyBmb3IgdGhlIGRvbWFpbnMKLSAqICAgIGZyb20gdGhlIFBvd2VyIGRvbWFpbiBmcmFtZXdvcmsKLSAqLwotCi0jaWZuZGVmIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9DTE9DS0RPTUFJTlNfSAotI2RlZmluZSBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfQ0xPQ0tET01BSU5TX0gKLQotI2luY2x1ZGUgPHBsYXQvY2xvY2tkb21haW4uaD4KLSNpbmNsdWRlICJjbS5oIgotI2luY2x1ZGUgInBybS5oIgotCi0vKgotICogQ2xvY2tkb21haW4gZGVwZW5kZW5jaWVzIGZvciB3a2RlcHMvc2xlZXBkZXBzCi0gKgotICogWFhYIEhhcmR3YXJlIGRlcGVuZGVuY2llcyAoZS5nLiwgZGVwZW5kZW5jaWVzIHRoYXQgY2Fubm90IGJlCi0gKiBjaGFuZ2VkIGluIHNvZnR3YXJlKSBhcmUgbm90IGluY2x1ZGVkIGhlcmUgeWV0LCBidXQgc2hvdWxkIGJlLgotICovCi0KLS8qIE9NQVAyLzMtY29tbW9uIHdha2V1cCBkZXBlbmRlbmNpZXMgKi8KLQotLyoKLSAqIDI0MjAvMjQzMCBQTV9XS0RFUF9HRlg6IENPUkUsIE1QVSwgV0tVUAotICogMzQzMEVTMSBQTV9XS0RFUF9HRlg6IGFkZHMgSVZBMiwgcmVtb3ZlcyBDT1JFCi0gKiAzNDMwRVMyIFBNX1dLREVQX1NHWDogYWRkcyBJVkEyLCByZW1vdmVzIENPUkUKLSAqIFRoZXNlIGNhbiBzaGFyZSBkYXRhIHNpbmNlIHRoZXkgd2lsbCBuZXZlciBiZSBwcmVzZW50IHNpbXVsdGFuZW91c2x5Ci0gKiBvbiB0aGUgc2FtZSBkZXZpY2UuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrZG1fZGVwIGdmeF9zZ3hfd2tkZXBzW10gPSB7Ci0JewotCQkuY2xrZG1fbmFtZSA9ICJjb3JlX2wzX2Nsa2RtIiwKLQkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFgpCi0JfSwKLQl7Ci0JCS5jbGtkbV9uYW1lID0gImNvcmVfbDRfY2xrZG0iLAotCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCkKLQl9LAotCXsKLQkJLmNsa2RtX25hbWUgPSAiaXZhMl9jbGtkbSIsCi0JCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQotCX0sCi0JewotCQkuY2xrZG1fbmFtZSA9ICJtcHVfY2xrZG0iLAotCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCB8Ci0JCQkJCSAgICBDSElQX0lTX09NQVAzNDMwKQotCX0sCi0JewotCQkuY2xrZG1fbmFtZSA9ICJ3a3VwX2Nsa2RtIiwKLQkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFggfAotCQkJCQkgICAgQ0hJUF9JU19PTUFQMzQzMCkKLQl9LAotCXsgTlVMTCB9LAotfTsKLQotCi0vKiAyNFhYLXNwZWNpZmljIHBvc3NpYmxlIGRlcGVuZGVuY2llcyAqLwotCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDIKLQotLyogV2FrZXVwIGRlcGVuZGVuY3kgc291cmNlIGFycmF5cyAqLwotCi0vKiAyNDIwLzI0MzAgUE1fV0tERVBfRFNQOiBDT1JFLCBNUFUsIFdLVVAgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrZG1fZGVwIGRzcF8yNHh4X3drZGVwc1tdID0gewotCXsKLQkJLmNsa2RtX25hbWUgPSAiY29yZV9sM19jbGtkbSIsCi0JCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYKQotCX0sCi0JewotCQkuY2xrZG1fbmFtZSA9ICJjb3JlX2w0X2Nsa2RtIiwKLQkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFgpCi0JfSwKLQl7Ci0JCS5jbGtkbV9uYW1lID0gIm1wdV9jbGtkbSIsCi0JCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYKQotCX0sCi0JewotCQkuY2xrZG1fbmFtZSA9ICJ3a3VwX2Nsa2RtIiwKLQkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFgpCi0JfSwKLQl7IE5VTEwgfSwKLX07Ci0KLS8qCi0gKiAyNDIwIFBNX1dLREVQX01QVTogQ09SRSwgRFNQLCBXS1VQCi0gKiAyNDMwIGFkZHMgTURNCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrZG1fZGVwIG1wdV8yNHh4X3drZGVwc1tdID0gewotCXsKLQkJLmNsa2RtX25hbWUgPSAiY29yZV9sM19jbGtkbSIsCi0JCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYKQotCX0sCi0JewotCQkuY2xrZG1fbmFtZSA9ICJjb3JlX2w0X2Nsa2RtIiwKLQkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFgpCi0JfSwKLQl7Ci0JCS5jbGtkbV9uYW1lID0gImRzcF9jbGtkbSIsCi0JCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYKQotCX0sCi0JewotCQkuY2xrZG1fbmFtZSA9ICJ3a3VwX2Nsa2RtIiwKLQkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFgpCi0JfSwKLQl7Ci0JCS5jbGtkbV9uYW1lID0gIm1kbV9jbGtkbSIsCi0JCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDMwKQotCX0sCi0JeyBOVUxMIH0sCi19OwotCi0vKgotICogMjQyMCBQTV9XS0RFUF9DT1JFOiBEU1AsIEdGWCwgTVBVLCBXS1VQCi0gKiAyNDMwIGFkZHMgTURNCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrZG1fZGVwIGNvcmVfMjR4eF93a2RlcHNbXSA9IHsKLQl7Ci0JCS5jbGtkbV9uYW1lID0gImRzcF9jbGtkbSIsCi0JCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYKQotCX0sCi0JewotCQkuY2xrZG1fbmFtZSA9ICJnZnhfY2xrZG0iLAotCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCkKLQl9LAotCXsKLQkJLmNsa2RtX25hbWUgPSAibXB1X2Nsa2RtIiwKLQkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFgpCi0JfSwKLQl7Ci0JCS5jbGtkbV9uYW1lID0gIndrdXBfY2xrZG0iLAotCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCkKLQl9LAotCXsKLQkJLmNsa2RtX25hbWUgPSAibWRtX2Nsa2RtIiwKLQkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MzApCi0JfSwKLQl7IE5VTEwgfSwKLX07Ci0KLSNlbmRpZgotCi0KLS8qIDI0MzAtc3BlY2lmaWMgcG9zc2libGUgd2FrZXVwIGRlcGVuZGVuY2llcyAqLwotCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDI0MzAKLQotLyogMjQzMCBQTV9XS0RFUF9NRE06IENPUkUsIE1QVSwgV0tVUCAqLwotc3RhdGljIHN0cnVjdCBjbGtkbV9kZXAgbWRtXzI0MzBfd2tkZXBzW10gPSB7Ci0JewotCQkuY2xrZG1fbmFtZSA9ICJjb3JlX2wzX2Nsa2RtIiwKLQkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFgpCi0JfSwKLQl7Ci0JCS5jbGtkbV9uYW1lID0gImNvcmVfbDRfY2xrZG0iLAotCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCkKLQl9LAotCXsKLQkJLmNsa2RtX25hbWUgPSAibXB1X2Nsa2RtIiwKLQkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFgpCi0JfSwKLQl7Ci0JCS5jbGtkbV9uYW1lID0gIndrdXBfY2xrZG0iLAotCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCkKLQl9LAotCXsgTlVMTCB9LAotfTsKLQotI2VuZGlmIC8qIENPTkZJR19BUkNIX09NQVAyNDMwICovCi0KLQotLyogT01BUDMtc3BlY2lmaWMgcG9zc2libGUgZGVwZW5kZW5jaWVzICovCi0KLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMwotCi0vKiAzNDMwOiBQTV9XS0RFUF9QRVI6IENPUkUsIElWQTIsIE1QVSwgV0tVUCAqLwotc3RhdGljIHN0cnVjdCBjbGtkbV9kZXAgcGVyX3drZGVwc1tdID0gewotCXsKLQkJLmNsa2RtX25hbWUgPSAiY29yZV9sM19jbGtkbSIsCi0JCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQotCX0sCi0JewotCQkuY2xrZG1fbmFtZSA9ICJjb3JlX2w0X2Nsa2RtIiwKLQkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCi0JfSwKLQl7Ci0JCS5jbGtkbV9uYW1lID0gIml2YTJfY2xrZG0iLAotCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKLQl9LAotCXsKLQkJLmNsa2RtX25hbWUgPSAibXB1X2Nsa2RtIiwKLQkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCi0JfSwKLQl7Ci0JCS5jbGtkbV9uYW1lID0gIndrdXBfY2xrZG0iLAotCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKLQl9LAotCXsgTlVMTCB9LAotfTsKLQotLyogMzQzMEVTMjogUE1fV0tERVBfVVNCSE9TVDogQ09SRSwgSVZBMiwgTVBVLCBXS1VQICovCi1zdGF0aWMgc3RydWN0IGNsa2RtX2RlcCB1c2Job3N0X3drZGVwc1tdID0gewotCXsKLQkJLmNsa2RtX25hbWUgPSAiY29yZV9sM19jbGtkbSIsCi0JCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQotCX0sCi0JewotCQkuY2xrZG1fbmFtZSA9ICJjb3JlX2w0X2Nsa2RtIiwKLQkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCi0JfSwKLQl7Ci0JCS5jbGtkbV9uYW1lID0gIml2YTJfY2xrZG0iLAotCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKLQl9LAotCXsKLQkJLmNsa2RtX25hbWUgPSAibXB1X2Nsa2RtIiwKLQkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCi0JfSwKLQl7Ci0JCS5jbGtkbV9uYW1lID0gIndrdXBfY2xrZG0iLAotCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKLQl9LAotCXsgTlVMTCB9LAotfTsKLQotLyogMzQzMCBQTV9XS0RFUF9NUFU6IENPUkUsIElWQTIsIERTUywgUEVSICovCi1zdGF0aWMgc3RydWN0IGNsa2RtX2RlcCBtcHVfM3h4eF93a2RlcHNbXSA9IHsKLQl7Ci0JCS5jbGtkbV9uYW1lID0gImNvcmVfbDNfY2xrZG0iLAotCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKLQl9LAotCXsKLQkJLmNsa2RtX25hbWUgPSAiY29yZV9sNF9jbGtkbSIsCi0JCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQotCX0sCi0JewotCQkuY2xrZG1fbmFtZSA9ICJpdmEyX2Nsa2RtIiwKLQkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCi0JfSwKLQl7Ci0JCS5jbGtkbV9uYW1lID0gImRzc19jbGtkbSIsCi0JCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQotCX0sCi0JewotCQkuY2xrZG1fbmFtZSA9ICJwZXJfY2xrZG0iLAotCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKLQl9LAotCXsgTlVMTCB9LAotfTsKLQotLyogMzQzMCBQTV9XS0RFUF9JVkEyOiBDT1JFLCBNUFUsIFdLVVAsIERTUywgUEVSICovCi1zdGF0aWMgc3RydWN0IGNsa2RtX2RlcCBpdmEyX3drZGVwc1tdID0gewotCXsKLQkJLmNsa2RtX25hbWUgPSAiY29yZV9sM19jbGtkbSIsCi0JCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQotCX0sCi0JewotCQkuY2xrZG1fbmFtZSA9ICJjb3JlX2w0X2Nsa2RtIiwKLQkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCi0JfSwKLQl7Ci0JCS5jbGtkbV9uYW1lID0gIm1wdV9jbGtkbSIsCi0JCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQotCX0sCi0JewotCQkuY2xrZG1fbmFtZSA9ICJ3a3VwX2Nsa2RtIiwKLQkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCi0JfSwKLQl7Ci0JCS5jbGtkbV9uYW1lID0gImRzc19jbGtkbSIsCi0JCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQotCX0sCi0JewotCQkuY2xrZG1fbmFtZSA9ICJwZXJfY2xrZG0iLAotCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKLQl9LAotCXsgTlVMTCB9LAotfTsKLQotCi0vKiAzNDMwIFBNX1dLREVQX0NBTTogSVZBMiwgTVBVLCBXS1VQICovCi1zdGF0aWMgc3RydWN0IGNsa2RtX2RlcCBjYW1fd2tkZXBzW10gPSB7Ci0JewotCQkuY2xrZG1fbmFtZSA9ICJpdmEyX2Nsa2RtIiwKLQkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCi0JfSwKLQl7Ci0JCS5jbGtkbV9uYW1lID0gIm1wdV9jbGtkbSIsCi0JCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQotCX0sCi0JewotCQkuY2xrZG1fbmFtZSA9ICJ3a3VwX2Nsa2RtIiwKLQkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCi0JfSwKLQl7IE5VTEwgfSwKLX07Ci0KLS8qIDM0MzAgUE1fV0tERVBfRFNTOiBJVkEyLCBNUFUsIFdLVVAgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrZG1fZGVwIGRzc193a2RlcHNbXSA9IHsKLQl7Ci0JCS5jbGtkbV9uYW1lID0gIml2YTJfY2xrZG0iLAotCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKLQl9LAotCXsKLQkJLmNsa2RtX25hbWUgPSAibXB1X2Nsa2RtIiwKLQkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCi0JfSwKLQl7Ci0JCS5jbGtkbV9uYW1lID0gIndrdXBfY2xrZG0iLAotCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKLQl9LAotCXsgTlVMTCB9LAotfTsKLQotLyogMzQzMDogUE1fV0tERVBfTkVPTjogTVBVICovCi1zdGF0aWMgc3RydWN0IGNsa2RtX2RlcCBuZW9uX3drZGVwc1tdID0gewotCXsKLQkJLmNsa2RtX25hbWUgPSAibXB1X2Nsa2RtIiwKLQkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCi0JfSwKLQl7IE5VTEwgfSwKLX07Ci0KLQotLyogU2xlZXAgZGVwZW5kZW5jeSBzb3VyY2UgYXJyYXlzIGZvciBPTUFQMy1zcGVjaWZpYyBjbGtkbXMgKi8KLQotLyogMzQzMDogQ01fU0xFRVBERVBfRFNTOiBNUFUsIElWQSAqLwotc3RhdGljIHN0cnVjdCBjbGtkbV9kZXAgZHNzX3NsZWVwZGVwc1tdID0gewotCXsKLQkJLmNsa2RtX25hbWUgPSAibXB1X2Nsa2RtIiwKLQkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCi0JfSwKLQl7Ci0JCS5jbGtkbV9uYW1lID0gIml2YTJfY2xrZG0iLAotCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKLQl9LAotCXsgTlVMTCB9LAotfTsKLQotLyogMzQzMDogQ01fU0xFRVBERVBfUEVSOiBNUFUsIElWQSAqLwotc3RhdGljIHN0cnVjdCBjbGtkbV9kZXAgcGVyX3NsZWVwZGVwc1tdID0gewotCXsKLQkJLmNsa2RtX25hbWUgPSAibXB1X2Nsa2RtIiwKLQkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCi0JfSwKLQl7Ci0JCS5jbGtkbV9uYW1lID0gIml2YTJfY2xrZG0iLAotCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKLQl9LAotCXsgTlVMTCB9LAotfTsKLQotLyogMzQzMEVTMjogQ01fU0xFRVBERVBfVVNCSE9TVDogTVBVLCBJVkEgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrZG1fZGVwIHVzYmhvc3Rfc2xlZXBkZXBzW10gPSB7Ci0JewotCQkuY2xrZG1fbmFtZSA9ICJtcHVfY2xrZG0iLAotCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKLQl9LAotCXsKLQkJLmNsa2RtX25hbWUgPSAiaXZhMl9jbGtkbSIsCi0JCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQotCX0sCi0JeyBOVUxMIH0sCi19OwotCi0vKiAzNDMwOiBDTV9TTEVFUERFUF9DQU06IE1QVSAqLwotc3RhdGljIHN0cnVjdCBjbGtkbV9kZXAgY2FtX3NsZWVwZGVwc1tdID0gewotCXsKLQkJLmNsa2RtX25hbWUgPSAibXB1X2Nsa2RtIiwKLQkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCi0JfSwKLQl7IE5VTEwgfSwKLX07Ci0KLS8qCi0gKiAzNDMwRVMxOiBDTV9TTEVFUERFUF9HRlg6IE1QVQotICogMzQzMEVTMjogQ01fU0xFRVBERVBfU0dYOiBNUFUKLSAqIFRoZXNlIGNhbiBzaGFyZSBkYXRhIHNpbmNlIHRoZXkgd2lsbCBuZXZlciBiZSBwcmVzZW50IHNpbXVsdGFuZW91c2x5Ci0gKiBvbiB0aGUgc2FtZSBkZXZpY2UuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrZG1fZGVwIGdmeF9zZ3hfc2xlZXBkZXBzW10gPSB7Ci0JewotCQkuY2xrZG1fbmFtZSA9ICJtcHVfY2xrZG0iLAotCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKLQl9LAotCXsgTlVMTCB9LAotfTsKLQotI2VuZGlmIC8qIENPTkZJR19BUkNIX09NQVAzICovCi0KLQotLyoKLSAqIE9NQVAyLzMtY29tbW9uIGNsb2NrZG9tYWlucwotICoKLSAqIEV2ZW4gdGhvdWdoIHRoZSAyNDIwIGhhcyBhIHNpbmdsZSBQUkNNIG1vZHVsZSBmcm9tIHRoZQotICogaW50ZXJjb25uZWN0J3MgcGVyc3BlY3RpdmUsIGludGVybmFsbHkgaXQgZG9lcyBhcHBlYXIgdG8gaGF2ZQotICogc2VwYXJhdGUgUFJNIGFuZCBDTSBjbG9ja2RvbWFpbnMuICBUaGUgdXN1YWwgdGVzdCBjYXNlIGlzCi0gKiBzeXNfY2xrb3V0L3N5c19jbGtvdXQyLgotICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKQotCi0vKiBUaGlzIGlzIGFuIGltcGxpY2l0IGNsb2NrZG9tYWluIC0gaXQgaXMgbmV2ZXIgZGVmaW5lZCBhcyBzdWNoIGluIFRSTSAqLwotc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiB3a3VwX2Nsa2RtID0gewotCS5uYW1lCQk9ICJ3a3VwX2Nsa2RtIiwKLQkucHdyZG0JCT0geyAubmFtZSA9ICJ3a3VwX3B3cmRtIiB9LAotCS5kZXBfYml0CT0gT01BUF9FTl9XS1VQX1NISUZULAotCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYIHwgQ0hJUF9JU19PTUFQMzQzMCksCi19OwotCi1zdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIHBybV9jbGtkbSA9IHsKLQkubmFtZQkJPSAicHJtX2Nsa2RtIiwKLQkucHdyZG0JCT0geyAubmFtZSA9ICJ3a3VwX3B3cmRtIiB9LAotCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYIHwgQ0hJUF9JU19PTUFQMzQzMCksCi19OwotCi1zdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGNtX2Nsa2RtID0gewotCS5uYW1lCQk9ICJjbV9jbGtkbSIsCi0JLnB3cmRtCQk9IHsgLm5hbWUgPSAiY29yZV9wd3JkbSIgfSwKLQkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCB8IENISVBfSVNfT01BUDM0MzApLAotfTsKLQotI2VuZGlmCi0KLS8qCi0gKiAyNDIwLW9ubHkgY2xvY2tkb21haW5zCi0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0MjApCi0KLXN0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gbXB1XzI0MjBfY2xrZG0gPSB7Ci0JLm5hbWUJCT0gIm1wdV9jbGtkbSIsCi0JLnB3cmRtCQk9IHsgLm5hbWUgPSAibXB1X3B3cmRtIiB9LAotCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVAsCi0JLmNsa3N0Y3RybF9yZWcgID0gT01BUDI0MjBfQ01fUkVHQUREUihNUFVfTU9ELCBPTUFQMl9DTV9DTEtTVENUUkwpLAotCS53a2RlcF9zcmNzCT0gbXB1XzI0eHhfd2tkZXBzLAotCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAyNFhYX0FVVE9TVEFURV9NUFVfTUFTSywKLQkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQyMCksCi19OwotCi1zdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGl2YTFfMjQyMF9jbGtkbSA9IHsKLQkubmFtZQkJPSAiaXZhMV9jbGtkbSIsCi0JLnB3cmRtCQk9IHsgLm5hbWUgPSAiZHNwX3B3cmRtIiB9LAotCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCi0JLmNsa3N0Y3RybF9yZWcgID0gT01BUDI0MjBfQ01fUkVHQUREUihPTUFQMjRYWF9EU1BfTU9ELAotCQkJCQkJIE9NQVAyX0NNX0NMS1NUQ1RSTCksCi0JLmRlcF9iaXQJPSBPTUFQMjRYWF9QTV9XS0RFUF9NUFVfRU5fRFNQX1NISUZULAotCS53a2RlcF9zcmNzCT0gZHNwXzI0eHhfd2tkZXBzLAotCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAyNDIwX0FVVE9TVEFURV9JVkFfTUFTSywKLQkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQyMCksCi19OwotCi1zdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGRzcF8yNDIwX2Nsa2RtID0gewotCS5uYW1lCQk9ICJkc3BfY2xrZG0iLAotCS5wd3JkbQkJPSB7IC5uYW1lID0gImRzcF9wd3JkbSIgfSwKLQkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQX1NXU1VQLAotCS5jbGtzdGN0cmxfcmVnICA9IE9NQVAyNDIwX0NNX1JFR0FERFIoT01BUDI0WFhfRFNQX01PRCwKLQkJCQkJCSBPTUFQMl9DTV9DTEtTVENUUkwpLAotCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAyNFhYX0FVVE9TVEFURV9EU1BfTUFTSywKLQkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQyMCksCi19OwotCi1zdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGdmeF8yNDIwX2Nsa2RtID0gewotCS5uYW1lCQk9ICJnZnhfY2xrZG0iLAotCS5wd3JkbQkJPSB7IC5uYW1lID0gImdmeF9wd3JkbSIgfSwKLQkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQX1NXU1VQLAotCS5jbGtzdGN0cmxfcmVnICA9IE9NQVAyNDIwX0NNX1JFR0FERFIoR0ZYX01PRCwgT01BUDJfQ01fQ0xLU1RDVFJMKSwKLQkud2tkZXBfc3Jjcwk9IGdmeF9zZ3hfd2tkZXBzLAotCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAyNFhYX0FVVE9TVEFURV9HRlhfTUFTSywKLQkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQyMCksCi19OwotCi1zdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGNvcmVfbDNfMjQyMF9jbGtkbSA9IHsKLQkubmFtZQkJPSAiY29yZV9sM19jbGtkbSIsCi0JLnB3cmRtCQk9IHsgLm5hbWUgPSAiY29yZV9wd3JkbSIgfSwKLQkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQLAotCS5jbGtzdGN0cmxfcmVnICA9IE9NQVAyNDIwX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyX0NNX0NMS1NUQ1RSTCksCi0JLndrZGVwX3NyY3MJPSBjb3JlXzI0eHhfd2tkZXBzLAotCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAyNFhYX0FVVE9TVEFURV9MM19NQVNLLAotCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDIwKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gY29yZV9sNF8yNDIwX2Nsa2RtID0gewotCS5uYW1lCQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkucHdyZG0JCT0geyAubmFtZSA9ICJjb3JlX3B3cmRtIiB9LAotCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVAsCi0JLmNsa3N0Y3RybF9yZWcgID0gT01BUDI0MjBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDJfQ01fQ0xLU1RDVFJMKSwKLQkud2tkZXBfc3Jjcwk9IGNvcmVfMjR4eF93a2RlcHMsCi0JLmNsa3RyY3RybF9tYXNrID0gT01BUDI0WFhfQVVUT1NUQVRFX0w0X01BU0ssCi0JLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MjApLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBkc3NfMjQyMF9jbGtkbSA9IHsKLQkubmFtZQkJPSAiZHNzX2Nsa2RtIiwKLQkucHdyZG0JCT0geyAubmFtZSA9ICJjb3JlX3B3cmRtIiB9LAotCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVAsCi0JLmNsa3N0Y3RybF9yZWcgID0gT01BUDI0MjBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDJfQ01fQ0xLU1RDVFJMKSwKLQkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMjRYWF9BVVRPU1RBVEVfRFNTX01BU0ssCi0JLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MjApLAotfTsKLQotI2VuZGlmICAgLyogQ09ORklHX0FSQ0hfT01BUDI0MjAgKi8KLQotCi0vKgotICogMjQzMC1vbmx5IGNsb2NrZG9tYWlucwotICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNDMwKQotCi1zdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIG1wdV8yNDMwX2Nsa2RtID0gewotCS5uYW1lCQk9ICJtcHVfY2xrZG0iLAotCS5wd3JkbQkJPSB7IC5uYW1lID0gIm1wdV9wd3JkbSIgfSwKLQkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQX1NXU1VQLAotCS5jbGtzdGN0cmxfcmVnICA9IE9NQVAyNDMwX0NNX1JFR0FERFIoTVBVX01PRCwKLQkJCQkJCSBPTUFQMl9DTV9DTEtTVENUUkwpLAotCS53a2RlcF9zcmNzCT0gbXB1XzI0eHhfd2tkZXBzLAotCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAyNFhYX0FVVE9TVEFURV9NUFVfTUFTSywKLQkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQzMCksCi19OwotCi0vKiBBbm90aGVyIGNhc2Ugb2YgYml0IG5hbWUgY29sbGlzaW9ucyBiZXR3ZWVuIHNldmVyYWwgcmVnaXN0ZXJzOiBFTl9NRE0gKi8KLXN0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gbWRtX2Nsa2RtID0gewotCS5uYW1lCQk9ICJtZG1fY2xrZG0iLAotCS5wd3JkbQkJPSB7IC5uYW1lID0gIm1kbV9wd3JkbSIgfSwKLQkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQX1NXU1VQLAotCS5jbGtzdGN0cmxfcmVnICA9IE9NQVAyNDMwX0NNX1JFR0FERFIoT01BUDI0MzBfTURNX01PRCwKLQkJCQkJCSBPTUFQMl9DTV9DTEtTVENUUkwpLAotCS5kZXBfYml0CT0gT01BUDI0MzBfUE1fV0tERVBfTVBVX0VOX01ETV9TSElGVCwKLQkud2tkZXBfc3Jjcwk9IG1kbV8yNDMwX3drZGVwcywKLQkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMjQzMF9BVVRPU1RBVEVfTURNX01BU0ssCi0JLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MzApLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBkc3BfMjQzMF9jbGtkbSA9IHsKLQkubmFtZQkJPSAiZHNwX2Nsa2RtIiwKLQkucHdyZG0JCT0geyAubmFtZSA9ICJkc3BfcHdyZG0iIH0sCi0JLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUF9TV1NVUCwKLQkuY2xrc3RjdHJsX3JlZyAgPSBPTUFQMjQzMF9DTV9SRUdBRERSKE9NQVAyNFhYX0RTUF9NT0QsCi0JCQkJCQkgT01BUDJfQ01fQ0xLU1RDVFJMKSwKLQkuZGVwX2JpdAk9IE9NQVAyNFhYX1BNX1dLREVQX01QVV9FTl9EU1BfU0hJRlQsCi0JLndrZGVwX3NyY3MJPSBkc3BfMjR4eF93a2RlcHMsCi0JLmNsa3RyY3RybF9tYXNrID0gT01BUDI0WFhfQVVUT1NUQVRFX0RTUF9NQVNLLAotCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDMwKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gZ2Z4XzI0MzBfY2xrZG0gPSB7Ci0JLm5hbWUJCT0gImdmeF9jbGtkbSIsCi0JLnB3cmRtCQk9IHsgLm5hbWUgPSAiZ2Z4X3B3cmRtIiB9LAotCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCi0JLmNsa3N0Y3RybF9yZWcgID0gT01BUDI0MzBfQ01fUkVHQUREUihHRlhfTU9ELCBPTUFQMl9DTV9DTEtTVENUUkwpLAotCS53a2RlcF9zcmNzCT0gZ2Z4X3NneF93a2RlcHMsCi0JLmNsa3RyY3RybF9tYXNrID0gT01BUDI0WFhfQVVUT1NUQVRFX0dGWF9NQVNLLAotCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDMwKSwKLX07Ci0KLS8qCi0gKiBYWFggYWRkIHVzZWNvdW50aW5nIGZvciBjbGtkbSBkZXBlbmRlbmNpZXMsIG90aGVyd2lzZSB0aGUgcHJlc2VuY2UKLSAqIG9mIGEgc2luZ2xlIGRlcCBiaXQgZm9yIGNvcmVfbDNfMjR4eF9jbGtkbSBhbmQgY29yZV9sNF8yNHh4X2Nsa2RtCi0gKiBjb3VsZCBjYXVzZSB0cm91YmxlCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gY29yZV9sM18yNDMwX2Nsa2RtID0gewotCS5uYW1lCQk9ICJjb3JlX2wzX2Nsa2RtIiwKLQkucHdyZG0JCT0geyAubmFtZSA9ICJjb3JlX3B3cmRtIiB9LAotCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVAsCi0JLmNsa3N0Y3RybF9yZWcgID0gT01BUDI0MzBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDJfQ01fQ0xLU1RDVFJMKSwKLQkuZGVwX2JpdAk9IE9NQVAyNFhYX0VOX0NPUkVfU0hJRlQsCi0JLndrZGVwX3NyY3MJPSBjb3JlXzI0eHhfd2tkZXBzLAotCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAyNFhYX0FVVE9TVEFURV9MM19NQVNLLAotCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDMwKSwKLX07Ci0KLS8qCi0gKiBYWFggYWRkIHVzZWNvdW50aW5nIGZvciBjbGtkbSBkZXBlbmRlbmNpZXMsIG90aGVyd2lzZSB0aGUgcHJlc2VuY2UKLSAqIG9mIGEgc2luZ2xlIGRlcCBiaXQgZm9yIGNvcmVfbDNfMjR4eF9jbGtkbSBhbmQgY29yZV9sNF8yNHh4X2Nsa2RtCi0gKiBjb3VsZCBjYXVzZSB0cm91YmxlCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gY29yZV9sNF8yNDMwX2Nsa2RtID0gewotCS5uYW1lCQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkucHdyZG0JCT0geyAubmFtZSA9ICJjb3JlX3B3cmRtIiB9LAotCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVAsCi0JLmNsa3N0Y3RybF9yZWcgID0gT01BUDI0MzBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDJfQ01fQ0xLU1RDVFJMKSwKLQkuZGVwX2JpdAk9IE9NQVAyNFhYX0VOX0NPUkVfU0hJRlQsCi0JLndrZGVwX3NyY3MJPSBjb3JlXzI0eHhfd2tkZXBzLAotCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAyNFhYX0FVVE9TVEFURV9MNF9NQVNLLAotCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDMwKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gZHNzXzI0MzBfY2xrZG0gPSB7Ci0JLm5hbWUJCT0gImRzc19jbGtkbSIsCi0JLnB3cmRtCQk9IHsgLm5hbWUgPSAiY29yZV9wd3JkbSIgfSwKLQkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQLAotCS5jbGtzdGN0cmxfcmVnICA9IE9NQVAyNDMwX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyX0NNX0NMS1NUQ1RSTCksCi0JLmNsa3RyY3RybF9tYXNrID0gT01BUDI0WFhfQVVUT1NUQVRFX0RTU19NQVNLLAotCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDMwKSwKLX07Ci0KLSNlbmRpZiAgICAvKiBDT05GSUdfQVJDSF9PTUFQMjQzMCAqLwotCi0KLS8qCi0gKiBPTUFQMyBjbG9ja2RvbWFpbnMKLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykKLQotc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBtcHVfM3h4eF9jbGtkbSA9IHsKLQkubmFtZQkJPSAibXB1X2Nsa2RtIiwKLQkucHdyZG0JCT0geyAubmFtZSA9ICJtcHVfcHdyZG0iIH0sCi0JLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUCB8IENMS0RNX0NBTl9GT1JDRV9XQUtFVVAsCi0JLmNsa3N0Y3RybF9yZWcJPSBPTUFQMzRYWF9DTV9SRUdBRERSKE1QVV9NT0QsIE9NQVAyX0NNX0NMS1NUQ1RSTCksCi0JLmRlcF9iaXQJPSBPTUFQMzQzMF9FTl9NUFVfU0hJRlQsCi0JLndrZGVwX3NyY3MJPSBtcHVfM3h4eF93a2RlcHMsCi0JLmNsa3RyY3RybF9tYXNrID0gT01BUDM0MzBfQ0xLVFJDVFJMX01QVV9NQVNLLAotCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gbmVvbl9jbGtkbSA9IHsKLQkubmFtZQkJPSAibmVvbl9jbGtkbSIsCi0JLnB3cmRtCQk9IHsgLm5hbWUgPSAibmVvbl9wd3JkbSIgfSwKLQkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQX1NXU1VQLAotCS5jbGtzdGN0cmxfcmVnCT0gT01BUDM0WFhfQ01fUkVHQUREUihPTUFQMzQzMF9ORU9OX01PRCwKLQkJCQkJCSBPTUFQMl9DTV9DTEtTVENUUkwpLAotCS53a2RlcF9zcmNzCT0gbmVvbl93a2RlcHMsCi0JLmNsa3RyY3RybF9tYXNrID0gT01BUDM0MzBfQ0xLVFJDVFJMX05FT05fTUFTSywKLQkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCi19OwotCi1zdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGl2YTJfY2xrZG0gPSB7Ci0JLm5hbWUJCT0gIml2YTJfY2xrZG0iLAotCS5wd3JkbQkJPSB7IC5uYW1lID0gIml2YTJfcHdyZG0iIH0sCi0JLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUF9TV1NVUCwKLQkuY2xrc3RjdHJsX3JlZwk9IE9NQVAzNFhYX0NNX1JFR0FERFIoT01BUDM0MzBfSVZBMl9NT0QsCi0JCQkJCQkgT01BUDJfQ01fQ0xLU1RDVFJMKSwKLQkuZGVwX2JpdAk9IE9NQVAzNDMwX1BNX1dLREVQX01QVV9FTl9JVkEyX1NISUZULAotCS53a2RlcF9zcmNzCT0gaXZhMl93a2RlcHMsCi0JLmNsa3RyY3RybF9tYXNrID0gT01BUDM0MzBfQ0xLVFJDVFJMX0lWQTJfTUFTSywKLQkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCi19OwotCi1zdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGdmeF8zNDMwZXMxX2Nsa2RtID0gewotCS5uYW1lCQk9ICJnZnhfY2xrZG0iLAotCS5wd3JkbQkJPSB7IC5uYW1lID0gImdmeF9wd3JkbSIgfSwKLQkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQX1NXU1VQLAotCS5jbGtzdGN0cmxfcmVnCT0gT01BUDM0WFhfQ01fUkVHQUREUihHRlhfTU9ELCBPTUFQMl9DTV9DTEtTVENUUkwpLAotCS53a2RlcF9zcmNzCT0gZ2Z4X3NneF93a2RlcHMsCi0JLnNsZWVwZGVwX3NyY3MJPSBnZnhfc2d4X3NsZWVwZGVwcywKLQkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMzQzMEVTMV9DTEtUUkNUUkxfR0ZYX01BU0ssCi0JLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzBFUzEpLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBzZ3hfY2xrZG0gPSB7Ci0JLm5hbWUJCT0gInNneF9jbGtkbSIsCi0JLnB3cmRtCQk9IHsgLm5hbWUgPSAic2d4X3B3cmRtIiB9LAotCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCi0JLmNsa3N0Y3RybF9yZWcJPSBPTUFQMzRYWF9DTV9SRUdBRERSKE9NQVAzNDMwRVMyX1NHWF9NT0QsCi0JCQkJCQkgT01BUDJfQ01fQ0xLU1RDVFJMKSwKLQkud2tkZXBfc3Jjcwk9IGdmeF9zZ3hfd2tkZXBzLAotCS5zbGVlcGRlcF9zcmNzCT0gZ2Z4X3NneF9zbGVlcGRlcHMsCi0JLmNsa3RyY3RybF9tYXNrID0gT01BUDM0MzBFUzJfQ0xLVFJDVFJMX1NHWF9NQVNLLAotCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0dFX09NQVAzNDMwRVMyKSwKLX07Ci0KLS8qCi0gKiBUaGUgZGllLXRvLWRpZSBjbG9ja2RvbWFpbiB3YXMgZG9jdW1lbnRlZCBpbiB0aGUgMzR4eCBFUzEgVFJNLCBidXQKLSAqIHRoZW4gdGhhdCBpbmZvcm1hdGlvbiB3YXMgcmVtb3ZlZCBmcm9tIHRoZSAzNHh4IEVTMisgVFJNLiAgSXQgaXMKLSAqIHVuY2xlYXIgd2hldGhlciB0aGUgY29yZSBpcyBzdGlsbCB0aGVyZSwgYnV0IHRoZSBjbG9ja2RvbWFpbiBsb2dpYwotICogaXMgdGhlcmUsIGFuZCBtdXN0IGJlIHByb2dyYW1tZWQgdG8gYW4gYXBwcm9wcmlhdGUgc3RhdGUgaWYgdGhlCi0gKiBDT1JFIGNsb2NrZG9tYWluIGlzIHRvIGJlY29tZSBpbmFjdGl2ZS4KLSAqLwotc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBkMmRfY2xrZG0gPSB7Ci0JLm5hbWUJCT0gImQyZF9jbGtkbSIsCi0JLnB3cmRtCQk9IHsgLm5hbWUgPSAiY29yZV9wd3JkbSIgfSwKLQkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQX1NXU1VQLAotCS5jbGtzdGN0cmxfcmVnCT0gT01BUDM0WFhfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDJfQ01fQ0xLU1RDVFJMKSwKLQkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMzQzMEVTMV9DTEtUUkNUUkxfRDJEX01BU0ssCi0JLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLAotfTsKLQotLyoKLSAqIFhYWCBhZGQgdXNlY291bnRpbmcgZm9yIGNsa2RtIGRlcGVuZGVuY2llcywgb3RoZXJ3aXNlIHRoZSBwcmVzZW5jZQotICogb2YgYSBzaW5nbGUgZGVwIGJpdCBmb3IgY29yZV9sM18zeHh4X2Nsa2RtIGFuZCBjb3JlX2w0XzN4eHhfY2xrZG0KLSAqIGNvdWxkIGNhdXNlIHRyb3VibGUKLSAqLwotc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBjb3JlX2wzXzN4eHhfY2xrZG0gPSB7Ci0JLm5hbWUJCT0gImNvcmVfbDNfY2xrZG0iLAotCS5wd3JkbQkJPSB7IC5uYW1lID0gImNvcmVfcHdyZG0iIH0sCi0JLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUCwKLQkuY2xrc3RjdHJsX3JlZwk9IE9NQVAzNFhYX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyX0NNX0NMS1NUQ1RSTCksCi0JLmRlcF9iaXQJPSBPTUFQMzQzMF9FTl9DT1JFX1NISUZULAotCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAzNDMwX0NMS1RSQ1RSTF9MM19NQVNLLAotCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKLX07Ci0KLS8qCi0gKiBYWFggYWRkIHVzZWNvdW50aW5nIGZvciBjbGtkbSBkZXBlbmRlbmNpZXMsIG90aGVyd2lzZSB0aGUgcHJlc2VuY2UKLSAqIG9mIGEgc2luZ2xlIGRlcCBiaXQgZm9yIGNvcmVfbDNfM3h4eF9jbGtkbSBhbmQgY29yZV9sNF8zeHh4X2Nsa2RtCi0gKiBjb3VsZCBjYXVzZSB0cm91YmxlCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gY29yZV9sNF8zeHh4X2Nsa2RtID0gewotCS5uYW1lCQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkucHdyZG0JCT0geyAubmFtZSA9ICJjb3JlX3B3cmRtIiB9LAotCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVAsCi0JLmNsa3N0Y3RybF9yZWcJPSBPTUFQMzRYWF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMl9DTV9DTEtTVENUUkwpLAotCS5kZXBfYml0CT0gT01BUDM0MzBfRU5fQ09SRV9TSElGVCwKLQkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMzQzMF9DTEtUUkNUUkxfTDRfTUFTSywKLQkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCi19OwotCi0vKiBBbm90aGVyIGNhc2Ugb2YgYml0IG5hbWUgY29sbGlzaW9ucyBiZXR3ZWVuIHNldmVyYWwgcmVnaXN0ZXJzOiBFTl9EU1MgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gZHNzXzN4eHhfY2xrZG0gPSB7Ci0JLm5hbWUJCT0gImRzc19jbGtkbSIsCi0JLnB3cmRtCQk9IHsgLm5hbWUgPSAiZHNzX3B3cmRtIiB9LAotCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCi0JLmNsa3N0Y3RybF9yZWcJPSBPTUFQMzRYWF9DTV9SRUdBRERSKE9NQVAzNDMwX0RTU19NT0QsCi0JCQkJCQkgT01BUDJfQ01fQ0xLU1RDVFJMKSwKLQkuZGVwX2JpdAk9IE9NQVAzNDMwX1BNX1dLREVQX01QVV9FTl9EU1NfU0hJRlQsCi0JLndrZGVwX3NyY3MJPSBkc3Nfd2tkZXBzLAotCS5zbGVlcGRlcF9zcmNzCT0gZHNzX3NsZWVwZGVwcywKLQkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMzQzMF9DTEtUUkNUUkxfRFNTX01BU0ssCi0JLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBjYW1fY2xrZG0gPSB7Ci0JLm5hbWUJCT0gImNhbV9jbGtkbSIsCi0JLnB3cmRtCQk9IHsgLm5hbWUgPSAiY2FtX3B3cmRtIiB9LAotCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCi0JLmNsa3N0Y3RybF9yZWcJPSBPTUFQMzRYWF9DTV9SRUdBRERSKE9NQVAzNDMwX0NBTV9NT0QsCi0JCQkJCQkgT01BUDJfQ01fQ0xLU1RDVFJMKSwKLQkud2tkZXBfc3Jjcwk9IGNhbV93a2RlcHMsCi0JLnNsZWVwZGVwX3NyY3MJPSBjYW1fc2xlZXBkZXBzLAotCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAzNDMwX0NMS1RSQ1RSTF9DQU1fTUFTSywKLQkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCi19OwotCi1zdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIHVzYmhvc3RfY2xrZG0gPSB7Ci0JLm5hbWUJCT0gInVzYmhvc3RfY2xrZG0iLAotCS5wd3JkbQkJPSB7IC5uYW1lID0gInVzYmhvc3RfcHdyZG0iIH0sCi0JLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUF9TV1NVUCwKLQkuY2xrc3RjdHJsX3JlZwk9IE9NQVAzNFhYX0NNX1JFR0FERFIoT01BUDM0MzBFUzJfVVNCSE9TVF9NT0QsCi0JCQkJCQkgT01BUDJfQ01fQ0xLU1RDVFJMKSwKLQkud2tkZXBfc3Jjcwk9IHVzYmhvc3Rfd2tkZXBzLAotCS5zbGVlcGRlcF9zcmNzCT0gdXNiaG9zdF9zbGVlcGRlcHMsCi0JLmNsa3RyY3RybF9tYXNrID0gT01BUDM0MzBFUzJfQ0xLVFJDVFJMX1VTQkhPU1RfTUFTSywKLQkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9HRV9PTUFQMzQzMEVTMiksCi19OwotCi1zdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIHBlcl9jbGtkbSA9IHsKLQkubmFtZQkJPSAicGVyX2Nsa2RtIiwKLQkucHdyZG0JCT0geyAubmFtZSA9ICJwZXJfcHdyZG0iIH0sCi0JLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUF9TV1NVUCwKLQkuY2xrc3RjdHJsX3JlZwk9IE9NQVAzNFhYX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwKLQkJCQkJCSBPTUFQMl9DTV9DTEtTVENUUkwpLAotCS5kZXBfYml0CT0gT01BUDM0MzBfRU5fUEVSX1NISUZULAotCS53a2RlcF9zcmNzCT0gcGVyX3drZGVwcywKLQkuc2xlZXBkZXBfc3Jjcwk9IHBlcl9zbGVlcGRlcHMsCi0JLmNsa3RyY3RybF9tYXNrID0gT01BUDM0MzBfQ0xLVFJDVFJMX1BFUl9NQVNLLAotCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKLX07Ci0KLS8qCi0gKiBEaXNhYmxlIGh3IHN1cGVydmlzZWQgbW9kZSBmb3IgZW11X2Nsa2RtLCBiZWNhdXNlIGVtdV9wd3JkbSBpcwotICogc3dpdGNoZWQgb2YgZXZlbiBpZiBzZHRpIGlzIGluIHVzZQotICovCi1zdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGVtdV9jbGtkbSA9IHsKLQkubmFtZQkJPSAiZW11X2Nsa2RtIiwKLQkucHdyZG0JCT0geyAubmFtZSA9ICJlbXVfcHdyZG0iIH0sCi0JLmZsYWdzCQk9IC8qIENMS0RNX0NBTl9FTkFCTEVfQVVUTyB8ICAqL0NMS0RNX0NBTl9TV1NVUCwKLQkuY2xrc3RjdHJsX3JlZwk9IE9NQVAzNFhYX0NNX1JFR0FERFIoT01BUDM0MzBfRU1VX01PRCwKLQkJCQkJCSBPTUFQMl9DTV9DTEtTVENUUkwpLAotCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAzNDMwX0NMS1RSQ1RSTF9FTVVfTUFTSywKLQkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCi19OwotCi1zdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGRwbGwxX2Nsa2RtID0gewotCS5uYW1lCQk9ICJkcGxsMV9jbGtkbSIsCi0JLnB3cmRtCQk9IHsgLm5hbWUgPSAiZHBsbDFfcHdyZG0iIH0sCi0JLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBkcGxsMl9jbGtkbSA9IHsKLQkubmFtZQkJPSAiZHBsbDJfY2xrZG0iLAotCS5wd3JkbQkJPSB7IC5uYW1lID0gImRwbGwyX3B3cmRtIiB9LAotCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gZHBsbDNfY2xrZG0gPSB7Ci0JLm5hbWUJCT0gImRwbGwzX2Nsa2RtIiwKLQkucHdyZG0JCT0geyAubmFtZSA9ICJkcGxsM19wd3JkbSIgfSwKLQkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCi19OwotCi1zdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGRwbGw0X2Nsa2RtID0gewotCS5uYW1lCQk9ICJkcGxsNF9jbGtkbSIsCi0JLnB3cmRtCQk9IHsgLm5hbWUgPSAiZHBsbDRfcHdyZG0iIH0sCi0JLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBkcGxsNV9jbGtkbSA9IHsKLQkubmFtZQkJPSAiZHBsbDVfY2xrZG0iLAotCS5wd3JkbQkJPSB7IC5uYW1lID0gImRwbGw1X3B3cmRtIiB9LAotCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0dFX09NQVAzNDMwRVMyKSwKLX07Ci0KLSNlbmRpZiAgIC8qIENPTkZJR19BUkNIX09NQVAzICovCi0KLSNpbmNsdWRlICJjbG9ja2RvbWFpbnM0NHh4LmgiCi0KLS8qCi0gKiBDbG9ja2RvbWFpbiBod3N1cCBkZXBlbmRlbmNpZXMgKE9NQVAzIG9ubHkpCi0gKi8KLQotc3RhdGljIHN0cnVjdCBjbGtkbV9hdXRvZGVwIGNsa2RtX2F1dG9kZXBzW10gPSB7Ci0JewotCQkuY2xrZG0JICAgPSB7IC5uYW1lID0gIm1wdV9jbGtkbSIgfSwKLQkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCi0JfSwKLQl7Ci0JCS5jbGtkbQkgICA9IHsgLm5hbWUgPSAiaXZhMl9jbGtkbSIgfSwKLQkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCi0JfSwKLQl7Ci0JCS5jbGtkbQkgICA9IHsgLm5hbWUgPSBOVUxMIH0sCi0JfQotfTsKLQotLyoKLSAqIExpc3Qgb2YgY2xvY2tkb21haW4gcG9pbnRlcnMgcGVyIHBsYXRmb3JtCi0gKi8KLQotc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xvY2tkb21haW5zX29tYXBbXSA9IHsKLQotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDIpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpCi0JJndrdXBfY2xrZG0sCi0JJmNtX2Nsa2RtLAotCSZwcm1fY2xrZG0sCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNDIwCi0JJm1wdV8yNDIwX2Nsa2RtLAotCSZpdmExXzI0MjBfY2xrZG0sCi0JJmRzcF8yNDIwX2Nsa2RtLAotCSZnZnhfMjQyMF9jbGtkbSwKLQkmY29yZV9sM18yNDIwX2Nsa2RtLAotCSZjb3JlX2w0XzI0MjBfY2xrZG0sCi0JJmRzc18yNDIwX2Nsa2RtLAotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMjQzMAotCSZtcHVfMjQzMF9jbGtkbSwKLQkmbWRtX2Nsa2RtLAotCSZkc3BfMjQzMF9jbGtkbSwKLQkmZ2Z4XzI0MzBfY2xrZG0sCi0JJmNvcmVfbDNfMjQzMF9jbGtkbSwKLQkmY29yZV9sNF8yNDMwX2Nsa2RtLAotCSZkc3NfMjQzMF9jbGtkbSwKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDMKLQkmbXB1XzN4eHhfY2xrZG0sCi0JJm5lb25fY2xrZG0sCi0JJml2YTJfY2xrZG0sCi0JJmdmeF8zNDMwZXMxX2Nsa2RtLAotCSZzZ3hfY2xrZG0sCi0JJmQyZF9jbGtkbSwKLQkmY29yZV9sM18zeHh4X2Nsa2RtLAotCSZjb3JlX2w0XzN4eHhfY2xrZG0sCi0JJmRzc18zeHh4X2Nsa2RtLAotCSZjYW1fY2xrZG0sCi0JJnVzYmhvc3RfY2xrZG0sCi0JJnBlcl9jbGtkbSwKLQkmZW11X2Nsa2RtLAotCSZkcGxsMV9jbGtkbSwKLQkmZHBsbDJfY2xrZG0sCi0JJmRwbGwzX2Nsa2RtLAotCSZkcGxsNF9jbGtkbSwKLQkmZHBsbDVfY2xrZG0sCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19BUkNIX09NQVA0Ci0JJmw0X2NlZnVzZV80NHh4X2Nsa2RtLAotCSZsNF9jZmdfNDR4eF9jbGtkbSwKLQkmdGVzbGFfNDR4eF9jbGtkbSwKLQkmbDNfZ2Z4XzQ0eHhfY2xrZG0sCi0JJml2YWhkXzQ0eHhfY2xrZG0sCi0JJmw0X3NlY3VyZV80NHh4X2Nsa2RtLAotCSZsNF9wZXJfNDR4eF9jbGtkbSwKLQkmYWJlXzQ0eHhfY2xrZG0sCi0JJmwzX2luc3RyXzQ0eHhfY2xrZG0sCi0JJmwzX2luaXRfNDR4eF9jbGtkbSwKLQkmbXB1c3NfNDR4eF9jbGtkbSwKLQkmbXB1MF80NHh4X2Nsa2RtLAotCSZtcHUxXzQ0eHhfY2xrZG0sCi0JJmwzX2VtaWZfNDR4eF9jbGtkbSwKLQkmbDRfYW9fNDR4eF9jbGtkbSwKLQkmZHVjYXRpXzQ0eHhfY2xrZG0sCi0JJmwzXzJfNDR4eF9jbGtkbSwKLQkmbDNfMV80NHh4X2Nsa2RtLAotCSZsM19kMmRfNDR4eF9jbGtkbSwKLQkmaXNzXzQ0eHhfY2xrZG0sCi0JJmwzX2Rzc180NHh4X2Nsa2RtLAotCSZsNF93a3VwXzQ0eHhfY2xrZG0sCi0JJmVtdV9zeXNfNDR4eF9jbGtkbSwKLQkmbDNfZG1hXzQ0eHhfY2xrZG0sCi0jZW5kaWYKLQotCU5VTEwsCi19OwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW5zMnh4eF8zeHh4X2RhdGEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW5zMnh4eF8zeHh4X2RhdGEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGE3MTMzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbnMyeHh4XzN4eHhfZGF0YS5jCkBAIC0wLDAgKzEsODYwIEBACisvKgorICogT01BUDIvMyBjbG9ja2RvbWFpbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTAgTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBQYXVsIFdhbG1zbGV5LCBKb3VuaSBIw7ZnYW5kZXIKKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgY2xvY2tkb21haW5zIGFuZCBjbG9ja2RvbWFpbiB3YWtldXAvc2xlZXAKKyAqIGRlcGVuZGVuY2llcyBmb3IgdGhlIE9NQVAyLzMgY2hpcHMuICBTb21lIG5vdGVzOgorICoKKyAqIEEgdXNlZnVsIHZhbGlkYXRpb24gcnVsZSBmb3Igc3RydWN0IGNsb2NrZG9tYWluOiBBbnkgY2xvY2tkb21haW4KKyAqIHJlZmVyZW5jZWQgYnkgYSB3a2RlcF9zcmNzIG9yIHNsZWVwZGVwX3NyY3MgYXJyYXkgbXVzdCBoYXZlIGEKKyAqIGRlcF9iaXQgYXNzaWduZWQuICBTbyB3a2RlcF9zcmNzL3NsZWVwZGVwX3NyY3MgYXJlIHJlYWxseSBqdXN0CisgKiBzb2Z0d2FyZS1jb250cm9sbGFibGUgZGVwZW5kZW5jaWVzLiAgTm9uLXNvZnR3YXJlLWNvbnRyb2xsYWJsZQorICogZGVwZW5kZW5jaWVzIGRvIGV4aXN0LCBidXQgdGhleSBhcmUgbm90IGVuY29kZWQgYmVsb3cgKHlldCkuCisgKgorICogMjR4eCBkb2VzIG5vdCBzdXBwb3J0IHByb2dyYW1tYWJsZSBzbGVlcCBkZXBlbmRlbmNpZXMgKFNMRUVQREVQKQorICoKKyAqIFRoZSBvdmVybHktc3BlY2lmaWMgZGVwX2JpdCBuYW1lcyBhcmUgZHVlIHRvIGEgYml0IG5hbWUgY29sbGlzaW9uCisgKiB3aXRoIENNX0ZDTEtFTl97RFNQLElWQTJ9LiAgVGhlIERTUC9JVkEyIFBNX1dLREVQIGFuZCBDTV9TTEVFUERFUCBzaGlmdAorICogdmFsdWUgYXJlIHRoZSBzYW1lIGZvciBhbGwgcG93ZXJkb21haW5zOiAyCisgKgorICogWFhYIHNob3VsZCBkZXBfYml0IGJlIGEgbWFzaywgc28gd2UgY2FuIHRlc3QgdG8gc2VlIGlmIGl0IGlzIDAgYXMgYQorICogc2FuaXR5IGNoZWNrPworICogWFhYIGVuY29kZSBoYXJkd2FyZSBmaXhlZCB3YWtldXAgZGVwZW5kZW5jaWVzIC0tIGVzcC4gZm9yIDM0MzAgQ09SRQorICovCisKKy8qCisgKiBUby1EbyBMaXN0CisgKiAtPiBQb3J0IHRoZSBTbGVlcC9XYWtldXAgZGVwZW5kZW5jaWVzIGZvciB0aGUgZG9tYWlucworICogICAgZnJvbSB0aGUgUG93ZXIgZG9tYWluIGZyYW1ld29yaworICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSAiY2xvY2tkb21haW4uaCIKKyNpbmNsdWRlICJwcm0yeHh4XzN4eHguaCIKKyNpbmNsdWRlICJjbTJ4eHhfM3h4eC5oIgorI2luY2x1ZGUgImNtLXJlZ2JpdHMtMjR4eC5oIgorI2luY2x1ZGUgImNtLXJlZ2JpdHMtMzR4eC5oIgorI2luY2x1ZGUgImNtLXJlZ2JpdHMtNDR4eC5oIgorI2luY2x1ZGUgInBybS1yZWdiaXRzLTI0eHguaCIKKyNpbmNsdWRlICJwcm0tcmVnYml0cy0zNHh4LmgiCisKKy8qCisgKiBDbG9ja2RvbWFpbiBkZXBlbmRlbmNpZXMgZm9yIHdrZGVwcy9zbGVlcGRlcHMKKyAqCisgKiBYWFggSGFyZHdhcmUgZGVwZW5kZW5jaWVzIChlLmcuLCBkZXBlbmRlbmNpZXMgdGhhdCBjYW5ub3QgYmUKKyAqIGNoYW5nZWQgaW4gc29mdHdhcmUpIGFyZSBub3QgaW5jbHVkZWQgaGVyZSB5ZXQsIGJ1dCBzaG91bGQgYmUuCisgKi8KKworLyogT01BUDIvMy1jb21tb24gd2FrZXVwIGRlcGVuZGVuY2llcyAqLworCisvKgorICogMjQyMC8yNDMwIFBNX1dLREVQX0dGWDogQ09SRSwgTVBVLCBXS1VQCisgKiAzNDMwRVMxIFBNX1dLREVQX0dGWDogYWRkcyBJVkEyLCByZW1vdmVzIENPUkUKKyAqIDM0MzBFUzIgUE1fV0tERVBfU0dYOiBhZGRzIElWQTIsIHJlbW92ZXMgQ09SRQorICogVGhlc2UgY2FuIHNoYXJlIGRhdGEgc2luY2UgdGhleSB3aWxsIG5ldmVyIGJlIHByZXNlbnQgc2ltdWx0YW5lb3VzbHkKKyAqIG9uIHRoZSBzYW1lIGRldmljZS4KKyAqLworc3RhdGljIHN0cnVjdCBjbGtkbV9kZXAgZ2Z4X3NneF93a2RlcHNbXSA9IHsKKwl7CisJCS5jbGtkbV9uYW1lID0gImNvcmVfbDNfY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCkKKwl9LAorCXsKKwkJLmNsa2RtX25hbWUgPSAiY29yZV9sNF9jbGtkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYKQorCX0sCisJeworCQkuY2xrZG1fbmFtZSA9ICJpdmEyX2Nsa2RtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCisJfSwKKwl7CisJCS5jbGtkbV9uYW1lID0gIm1wdV9jbGtkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYIHwKKwkJCQkJICAgIENISVBfSVNfT01BUDM0MzApCisJfSwKKwl7CisJCS5jbGtkbV9uYW1lID0gIndrdXBfY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCB8CisJCQkJCSAgICBDSElQX0lTX09NQVAzNDMwKQorCX0sCisJeyBOVUxMIH0sCit9OworCisKKy8qIDI0WFgtc3BlY2lmaWMgcG9zc2libGUgZGVwZW5kZW5jaWVzICovCisKKy8qIFdha2V1cCBkZXBlbmRlbmN5IHNvdXJjZSBhcnJheXMgKi8KKworLyogMjQyMC8yNDMwIFBNX1dLREVQX0RTUDogQ09SRSwgTVBVLCBXS1VQICovCitzdGF0aWMgc3RydWN0IGNsa2RtX2RlcCBkc3BfMjR4eF93a2RlcHNbXSA9IHsKKwl7CisJCS5jbGtkbV9uYW1lID0gImNvcmVfbDNfY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCkKKwl9LAorCXsKKwkJLmNsa2RtX25hbWUgPSAiY29yZV9sNF9jbGtkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYKQorCX0sCisJeworCQkuY2xrZG1fbmFtZSA9ICJtcHVfY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCkKKwl9LAorCXsKKwkJLmNsa2RtX25hbWUgPSAid2t1cF9jbGtkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYKQorCX0sCisJeyBOVUxMIH0sCit9OworCisvKgorICogMjQyMCBQTV9XS0RFUF9NUFU6IENPUkUsIERTUCwgV0tVUAorICogMjQzMCBhZGRzIE1ETQorICovCitzdGF0aWMgc3RydWN0IGNsa2RtX2RlcCBtcHVfMjR4eF93a2RlcHNbXSA9IHsKKwl7CisJCS5jbGtkbV9uYW1lID0gImNvcmVfbDNfY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCkKKwl9LAorCXsKKwkJLmNsa2RtX25hbWUgPSAiY29yZV9sNF9jbGtkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYKQorCX0sCisJeworCQkuY2xrZG1fbmFtZSA9ICJkc3BfY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCkKKwl9LAorCXsKKwkJLmNsa2RtX25hbWUgPSAid2t1cF9jbGtkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYKQorCX0sCisJeworCQkuY2xrZG1fbmFtZSA9ICJtZG1fY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQzMCkKKwl9LAorCXsgTlVMTCB9LAorfTsKKworLyoKKyAqIDI0MjAgUE1fV0tERVBfQ09SRTogRFNQLCBHRlgsIE1QVSwgV0tVUAorICogMjQzMCBhZGRzIE1ETQorICovCitzdGF0aWMgc3RydWN0IGNsa2RtX2RlcCBjb3JlXzI0eHhfd2tkZXBzW10gPSB7CisJeworCQkuY2xrZG1fbmFtZSA9ICJkc3BfY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCkKKwl9LAorCXsKKwkJLmNsa2RtX25hbWUgPSAiZ2Z4X2Nsa2RtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFgpCisJfSwKKwl7CisJCS5jbGtkbV9uYW1lID0gIm1wdV9jbGtkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYKQorCX0sCisJeworCQkuY2xrZG1fbmFtZSA9ICJ3a3VwX2Nsa2RtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFgpCisJfSwKKwl7CisJCS5jbGtkbV9uYW1lID0gIm1kbV9jbGtkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDMwKQorCX0sCisJeyBOVUxMIH0sCit9OworCisKKy8qIDI0MzAtc3BlY2lmaWMgcG9zc2libGUgd2FrZXVwIGRlcGVuZGVuY2llcyAqLworCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDI0MzAKKworLyogMjQzMCBQTV9XS0RFUF9NRE06IENPUkUsIE1QVSwgV0tVUCAqLworc3RhdGljIHN0cnVjdCBjbGtkbV9kZXAgbWRtXzI0MzBfd2tkZXBzW10gPSB7CisJeworCQkuY2xrZG1fbmFtZSA9ICJjb3JlX2wzX2Nsa2RtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFgpCisJfSwKKwl7CisJCS5jbGtkbV9uYW1lID0gImNvcmVfbDRfY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCkKKwl9LAorCXsKKwkJLmNsa2RtX25hbWUgPSAibXB1X2Nsa2RtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFgpCisJfSwKKwl7CisJCS5jbGtkbV9uYW1lID0gIndrdXBfY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCkKKwl9LAorCXsgTlVMTCB9LAorfTsKKworI2VuZGlmIC8qIENPTkZJR19BUkNIX09NQVAyNDMwICovCisKKworLyogT01BUDMtc3BlY2lmaWMgcG9zc2libGUgZGVwZW5kZW5jaWVzICovCisKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMworCisvKiAzNDMwOiBQTV9XS0RFUF9QRVI6IENPUkUsIElWQTIsIE1QVSwgV0tVUCAqLworc3RhdGljIHN0cnVjdCBjbGtkbV9kZXAgcGVyX3drZGVwc1tdID0geworCXsKKwkJLmNsa2RtX25hbWUgPSAiY29yZV9sM19jbGtkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQorCX0sCisJeworCQkuY2xrZG1fbmFtZSA9ICJjb3JlX2w0X2Nsa2RtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCisJfSwKKwl7CisJCS5jbGtkbV9uYW1lID0gIml2YTJfY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKKwl9LAorCXsKKwkJLmNsa2RtX25hbWUgPSAibXB1X2Nsa2RtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCisJfSwKKwl7CisJCS5jbGtkbV9uYW1lID0gIndrdXBfY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKKwl9LAorCXsgTlVMTCB9LAorfTsKKworLyogMzQzMEVTMjogUE1fV0tERVBfVVNCSE9TVDogQ09SRSwgSVZBMiwgTVBVLCBXS1VQICovCitzdGF0aWMgc3RydWN0IGNsa2RtX2RlcCB1c2Job3N0X3drZGVwc1tdID0geworCXsKKwkJLmNsa2RtX25hbWUgPSAiY29yZV9sM19jbGtkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQorCX0sCisJeworCQkuY2xrZG1fbmFtZSA9ICJjb3JlX2w0X2Nsa2RtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCisJfSwKKwl7CisJCS5jbGtkbV9uYW1lID0gIml2YTJfY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKKwl9LAorCXsKKwkJLmNsa2RtX25hbWUgPSAibXB1X2Nsa2RtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCisJfSwKKwl7CisJCS5jbGtkbV9uYW1lID0gIndrdXBfY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKKwl9LAorCXsgTlVMTCB9LAorfTsKKworLyogMzQzMCBQTV9XS0RFUF9NUFU6IENPUkUsIElWQTIsIERTUywgUEVSICovCitzdGF0aWMgc3RydWN0IGNsa2RtX2RlcCBtcHVfM3h4eF93a2RlcHNbXSA9IHsKKwl7CisJCS5jbGtkbV9uYW1lID0gImNvcmVfbDNfY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKKwl9LAorCXsKKwkJLmNsa2RtX25hbWUgPSAiY29yZV9sNF9jbGtkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQorCX0sCisJeworCQkuY2xrZG1fbmFtZSA9ICJpdmEyX2Nsa2RtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCisJfSwKKwl7CisJCS5jbGtkbV9uYW1lID0gImRzc19jbGtkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQorCX0sCisJeworCQkuY2xrZG1fbmFtZSA9ICJwZXJfY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKKwl9LAorCXsgTlVMTCB9LAorfTsKKworLyogMzQzMCBQTV9XS0RFUF9JVkEyOiBDT1JFLCBNUFUsIFdLVVAsIERTUywgUEVSICovCitzdGF0aWMgc3RydWN0IGNsa2RtX2RlcCBpdmEyX3drZGVwc1tdID0geworCXsKKwkJLmNsa2RtX25hbWUgPSAiY29yZV9sM19jbGtkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQorCX0sCisJeworCQkuY2xrZG1fbmFtZSA9ICJjb3JlX2w0X2Nsa2RtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCisJfSwKKwl7CisJCS5jbGtkbV9uYW1lID0gIm1wdV9jbGtkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQorCX0sCisJeworCQkuY2xrZG1fbmFtZSA9ICJ3a3VwX2Nsa2RtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCisJfSwKKwl7CisJCS5jbGtkbV9uYW1lID0gImRzc19jbGtkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQorCX0sCisJeworCQkuY2xrZG1fbmFtZSA9ICJwZXJfY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKKwl9LAorCXsgTlVMTCB9LAorfTsKKworCisvKiAzNDMwIFBNX1dLREVQX0NBTTogSVZBMiwgTVBVLCBXS1VQICovCitzdGF0aWMgc3RydWN0IGNsa2RtX2RlcCBjYW1fd2tkZXBzW10gPSB7CisJeworCQkuY2xrZG1fbmFtZSA9ICJpdmEyX2Nsa2RtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCisJfSwKKwl7CisJCS5jbGtkbV9uYW1lID0gIm1wdV9jbGtkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQorCX0sCisJeworCQkuY2xrZG1fbmFtZSA9ICJ3a3VwX2Nsa2RtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCisJfSwKKwl7IE5VTEwgfSwKK307CisKKy8qIDM0MzAgUE1fV0tERVBfRFNTOiBJVkEyLCBNUFUsIFdLVVAgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrZG1fZGVwIGRzc193a2RlcHNbXSA9IHsKKwl7CisJCS5jbGtkbV9uYW1lID0gIml2YTJfY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKKwl9LAorCXsKKwkJLmNsa2RtX25hbWUgPSAibXB1X2Nsa2RtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCisJfSwKKwl7CisJCS5jbGtkbV9uYW1lID0gIndrdXBfY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKKwl9LAorCXsgTlVMTCB9LAorfTsKKworLyogMzQzMDogUE1fV0tERVBfTkVPTjogTVBVICovCitzdGF0aWMgc3RydWN0IGNsa2RtX2RlcCBuZW9uX3drZGVwc1tdID0geworCXsKKwkJLmNsa2RtX25hbWUgPSAibXB1X2Nsa2RtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCisJfSwKKwl7IE5VTEwgfSwKK307CisKKworLyogU2xlZXAgZGVwZW5kZW5jeSBzb3VyY2UgYXJyYXlzIGZvciBPTUFQMy1zcGVjaWZpYyBjbGtkbXMgKi8KKworLyogMzQzMDogQ01fU0xFRVBERVBfRFNTOiBNUFUsIElWQSAqLworc3RhdGljIHN0cnVjdCBjbGtkbV9kZXAgZHNzX3NsZWVwZGVwc1tdID0geworCXsKKwkJLmNsa2RtX25hbWUgPSAibXB1X2Nsa2RtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCisJfSwKKwl7CisJCS5jbGtkbV9uYW1lID0gIml2YTJfY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKKwl9LAorCXsgTlVMTCB9LAorfTsKKworLyogMzQzMDogQ01fU0xFRVBERVBfUEVSOiBNUFUsIElWQSAqLworc3RhdGljIHN0cnVjdCBjbGtkbV9kZXAgcGVyX3NsZWVwZGVwc1tdID0geworCXsKKwkJLmNsa2RtX25hbWUgPSAibXB1X2Nsa2RtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCisJfSwKKwl7CisJCS5jbGtkbV9uYW1lID0gIml2YTJfY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKKwl9LAorCXsgTlVMTCB9LAorfTsKKworLyogMzQzMEVTMjogQ01fU0xFRVBERVBfVVNCSE9TVDogTVBVLCBJVkEgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrZG1fZGVwIHVzYmhvc3Rfc2xlZXBkZXBzW10gPSB7CisJeworCQkuY2xrZG1fbmFtZSA9ICJtcHVfY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKKwl9LAorCXsKKwkJLmNsa2RtX25hbWUgPSAiaXZhMl9jbGtkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQorCX0sCisJeyBOVUxMIH0sCit9OworCisvKiAzNDMwOiBDTV9TTEVFUERFUF9DQU06IE1QVSAqLworc3RhdGljIHN0cnVjdCBjbGtkbV9kZXAgY2FtX3NsZWVwZGVwc1tdID0geworCXsKKwkJLmNsa2RtX25hbWUgPSAibXB1X2Nsa2RtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCisJfSwKKwl7IE5VTEwgfSwKK307CisKKy8qCisgKiAzNDMwRVMxOiBDTV9TTEVFUERFUF9HRlg6IE1QVQorICogMzQzMEVTMjogQ01fU0xFRVBERVBfU0dYOiBNUFUKKyAqIFRoZXNlIGNhbiBzaGFyZSBkYXRhIHNpbmNlIHRoZXkgd2lsbCBuZXZlciBiZSBwcmVzZW50IHNpbXVsdGFuZW91c2x5CisgKiBvbiB0aGUgc2FtZSBkZXZpY2UuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrZG1fZGVwIGdmeF9zZ3hfc2xlZXBkZXBzW10gPSB7CisJeworCQkuY2xrZG1fbmFtZSA9ICJtcHVfY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKKwl9LAorCXsgTlVMTCB9LAorfTsKKworI2VuZGlmIC8qIENPTkZJR19BUkNIX09NQVAzICovCisKKworLyoKKyAqIE9NQVAyLzMtY29tbW9uIGNsb2NrZG9tYWlucworICoKKyAqIEV2ZW4gdGhvdWdoIHRoZSAyNDIwIGhhcyBhIHNpbmdsZSBQUkNNIG1vZHVsZSBmcm9tIHRoZQorICogaW50ZXJjb25uZWN0J3MgcGVyc3BlY3RpdmUsIGludGVybmFsbHkgaXQgZG9lcyBhcHBlYXIgdG8gaGF2ZQorICogc2VwYXJhdGUgUFJNIGFuZCBDTSBjbG9ja2RvbWFpbnMuICBUaGUgdXN1YWwgdGVzdCBjYXNlIGlzCisgKiBzeXNfY2xrb3V0L3N5c19jbGtvdXQyLgorICovCisKKy8qIFRoaXMgaXMgYW4gaW1wbGljaXQgY2xvY2tkb21haW4gLSBpdCBpcyBuZXZlciBkZWZpbmVkIGFzIHN1Y2ggaW4gVFJNICovCitzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIHdrdXBfY2xrZG0gPSB7CisJLm5hbWUJCT0gIndrdXBfY2xrZG0iLAorCS5wd3JkbQkJPSB7IC5uYW1lID0gIndrdXBfcHdyZG0iIH0sCisJLmRlcF9iaXQJPSBPTUFQX0VOX1dLVVBfU0hJRlQsCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFggfCBDSElQX0lTX09NQVAzNDMwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gcHJtX2Nsa2RtID0geworCS5uYW1lCQk9ICJwcm1fY2xrZG0iLAorCS5wd3JkbQkJPSB7IC5uYW1lID0gIndrdXBfcHdyZG0iIH0sCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFggfCBDSElQX0lTX09NQVAzNDMwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gY21fY2xrZG0gPSB7CisJLm5hbWUJCT0gImNtX2Nsa2RtIiwKKwkucHdyZG0JCT0geyAubmFtZSA9ICJjb3JlX3B3cmRtIiB9LAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYIHwgQ0hJUF9JU19PTUFQMzQzMCksCit9OworCisvKgorICogMjQyMC1vbmx5IGNsb2NrZG9tYWlucworICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNDIwKQorCitzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIG1wdV8yNDIwX2Nsa2RtID0geworCS5uYW1lCQk9ICJtcHVfY2xrZG0iLAorCS5wd3JkbQkJPSB7IC5uYW1lID0gIm1wdV9wd3JkbSIgfSwKKwkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQLAorCS53a2RlcF9zcmNzCT0gbXB1XzI0eHhfd2tkZXBzLAorCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAyNFhYX0FVVE9TVEFURV9NUFVfTUFTSywKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQyMCksCit9OworCitzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGl2YTFfMjQyMF9jbGtkbSA9IHsKKwkubmFtZQkJPSAiaXZhMV9jbGtkbSIsCisJLnB3cmRtCQk9IHsgLm5hbWUgPSAiZHNwX3B3cmRtIiB9LAorCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCisJLmRlcF9iaXQJPSBPTUFQMjRYWF9QTV9XS0RFUF9NUFVfRU5fRFNQX1NISUZULAorCS53a2RlcF9zcmNzCT0gZHNwXzI0eHhfd2tkZXBzLAorCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAyNDIwX0FVVE9TVEFURV9JVkFfTUFTSywKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQyMCksCit9OworCitzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGRzcF8yNDIwX2Nsa2RtID0geworCS5uYW1lCQk9ICJkc3BfY2xrZG0iLAorCS5wd3JkbQkJPSB7IC5uYW1lID0gImRzcF9wd3JkbSIgfSwKKwkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQX1NXU1VQLAorCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAyNFhYX0FVVE9TVEFURV9EU1BfTUFTSywKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQyMCksCit9OworCitzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGdmeF8yNDIwX2Nsa2RtID0geworCS5uYW1lCQk9ICJnZnhfY2xrZG0iLAorCS5wd3JkbQkJPSB7IC5uYW1lID0gImdmeF9wd3JkbSIgfSwKKwkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQX1NXU1VQLAorCS53a2RlcF9zcmNzCT0gZ2Z4X3NneF93a2RlcHMsCisJLmNsa3RyY3RybF9tYXNrID0gT01BUDI0WFhfQVVUT1NUQVRFX0dGWF9NQVNLLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDIwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gY29yZV9sM18yNDIwX2Nsa2RtID0geworCS5uYW1lCQk9ICJjb3JlX2wzX2Nsa2RtIiwKKwkucHdyZG0JCT0geyAubmFtZSA9ICJjb3JlX3B3cmRtIiB9LAorCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVAsCisJLndrZGVwX3NyY3MJPSBjb3JlXzI0eHhfd2tkZXBzLAorCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAyNFhYX0FVVE9TVEFURV9MM19NQVNLLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDIwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gY29yZV9sNF8yNDIwX2Nsa2RtID0geworCS5uYW1lCQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkucHdyZG0JCT0geyAubmFtZSA9ICJjb3JlX3B3cmRtIiB9LAorCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVAsCisJLndrZGVwX3NyY3MJPSBjb3JlXzI0eHhfd2tkZXBzLAorCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAyNFhYX0FVVE9TVEFURV9MNF9NQVNLLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDIwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gZHNzXzI0MjBfY2xrZG0gPSB7CisJLm5hbWUJCT0gImRzc19jbGtkbSIsCisJLnB3cmRtCQk9IHsgLm5hbWUgPSAiY29yZV9wd3JkbSIgfSwKKwkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQLAorCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAyNFhYX0FVVE9TVEFURV9EU1NfTUFTSywKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQyMCksCit9OworCisjZW5kaWYgICAvKiBDT05GSUdfQVJDSF9PTUFQMjQyMCAqLworCisKKy8qCisgKiAyNDMwLW9ubHkgY2xvY2tkb21haW5zCisgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0MzApCisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gbXB1XzI0MzBfY2xrZG0gPSB7CisJLm5hbWUJCT0gIm1wdV9jbGtkbSIsCisJLnB3cmRtCQk9IHsgLm5hbWUgPSAibXB1X3B3cmRtIiB9LAorCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCisJLndrZGVwX3NyY3MJPSBtcHVfMjR4eF93a2RlcHMsCisJLmNsa3RyY3RybF9tYXNrID0gT01BUDI0WFhfQVVUT1NUQVRFX01QVV9NQVNLLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDMwKSwKK307CisKKy8qIEFub3RoZXIgY2FzZSBvZiBiaXQgbmFtZSBjb2xsaXNpb25zIGJldHdlZW4gc2V2ZXJhbCByZWdpc3RlcnM6IEVOX01ETSAqLworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBtZG1fY2xrZG0gPSB7CisJLm5hbWUJCT0gIm1kbV9jbGtkbSIsCisJLnB3cmRtCQk9IHsgLm5hbWUgPSAibWRtX3B3cmRtIiB9LAorCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCisJLmRlcF9iaXQJPSBPTUFQMjQzMF9QTV9XS0RFUF9NUFVfRU5fTURNX1NISUZULAorCS53a2RlcF9zcmNzCT0gbWRtXzI0MzBfd2tkZXBzLAorCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAyNDMwX0FVVE9TVEFURV9NRE1fTUFTSywKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQzMCksCit9OworCitzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGRzcF8yNDMwX2Nsa2RtID0geworCS5uYW1lCQk9ICJkc3BfY2xrZG0iLAorCS5wd3JkbQkJPSB7IC5uYW1lID0gImRzcF9wd3JkbSIgfSwKKwkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQX1NXU1VQLAorCS5kZXBfYml0CT0gT01BUDI0WFhfUE1fV0tERVBfTVBVX0VOX0RTUF9TSElGVCwKKwkud2tkZXBfc3Jjcwk9IGRzcF8yNHh4X3drZGVwcywKKwkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMjRYWF9BVVRPU1RBVEVfRFNQX01BU0ssCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MzApLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBnZnhfMjQzMF9jbGtkbSA9IHsKKwkubmFtZQkJPSAiZ2Z4X2Nsa2RtIiwKKwkucHdyZG0JCT0geyAubmFtZSA9ICJnZnhfcHdyZG0iIH0sCisJLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUF9TV1NVUCwKKwkud2tkZXBfc3Jjcwk9IGdmeF9zZ3hfd2tkZXBzLAorCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAyNFhYX0FVVE9TVEFURV9HRlhfTUFTSywKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQzMCksCit9OworCisvKgorICogWFhYIGFkZCB1c2Vjb3VudGluZyBmb3IgY2xrZG0gZGVwZW5kZW5jaWVzLCBvdGhlcndpc2UgdGhlIHByZXNlbmNlCisgKiBvZiBhIHNpbmdsZSBkZXAgYml0IGZvciBjb3JlX2wzXzI0eHhfY2xrZG0gYW5kIGNvcmVfbDRfMjR4eF9jbGtkbQorICogY291bGQgY2F1c2UgdHJvdWJsZQorICovCitzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGNvcmVfbDNfMjQzMF9jbGtkbSA9IHsKKwkubmFtZQkJPSAiY29yZV9sM19jbGtkbSIsCisJLnB3cmRtCQk9IHsgLm5hbWUgPSAiY29yZV9wd3JkbSIgfSwKKwkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQLAorCS5kZXBfYml0CT0gT01BUDI0WFhfRU5fQ09SRV9TSElGVCwKKwkud2tkZXBfc3Jjcwk9IGNvcmVfMjR4eF93a2RlcHMsCisJLmNsa3RyY3RybF9tYXNrID0gT01BUDI0WFhfQVVUT1NUQVRFX0wzX01BU0ssCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MzApLAorfTsKKworLyoKKyAqIFhYWCBhZGQgdXNlY291bnRpbmcgZm9yIGNsa2RtIGRlcGVuZGVuY2llcywgb3RoZXJ3aXNlIHRoZSBwcmVzZW5jZQorICogb2YgYSBzaW5nbGUgZGVwIGJpdCBmb3IgY29yZV9sM18yNHh4X2Nsa2RtIGFuZCBjb3JlX2w0XzI0eHhfY2xrZG0KKyAqIGNvdWxkIGNhdXNlIHRyb3VibGUKKyAqLworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBjb3JlX2w0XzI0MzBfY2xrZG0gPSB7CisJLm5hbWUJCT0gImNvcmVfbDRfY2xrZG0iLAorCS5wd3JkbQkJPSB7IC5uYW1lID0gImNvcmVfcHdyZG0iIH0sCisJLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUCwKKwkuZGVwX2JpdAk9IE9NQVAyNFhYX0VOX0NPUkVfU0hJRlQsCisJLndrZGVwX3NyY3MJPSBjb3JlXzI0eHhfd2tkZXBzLAorCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAyNFhYX0FVVE9TVEFURV9MNF9NQVNLLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDMwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gZHNzXzI0MzBfY2xrZG0gPSB7CisJLm5hbWUJCT0gImRzc19jbGtkbSIsCisJLnB3cmRtCQk9IHsgLm5hbWUgPSAiY29yZV9wd3JkbSIgfSwKKwkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQLAorCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAyNFhYX0FVVE9TVEFURV9EU1NfTUFTSywKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQzMCksCit9OworCisjZW5kaWYgICAgLyogQ09ORklHX0FSQ0hfT01BUDI0MzAgKi8KKworCisvKgorICogT01BUDMgY2xvY2tkb21haW5zCisgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpCisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gbXB1XzN4eHhfY2xrZG0gPSB7CisJLm5hbWUJCT0gIm1wdV9jbGtkbSIsCisJLnB3cmRtCQk9IHsgLm5hbWUgPSAibXB1X3B3cmRtIiB9LAorCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVAgfCBDTEtETV9DQU5fRk9SQ0VfV0FLRVVQLAorCS5kZXBfYml0CT0gT01BUDM0MzBfRU5fTVBVX1NISUZULAorCS53a2RlcF9zcmNzCT0gbXB1XzN4eHhfd2tkZXBzLAorCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAzNDMwX0NMS1RSQ1RSTF9NUFVfTUFTSywKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCit9OworCitzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIG5lb25fY2xrZG0gPSB7CisJLm5hbWUJCT0gIm5lb25fY2xrZG0iLAorCS5wd3JkbQkJPSB7IC5uYW1lID0gIm5lb25fcHdyZG0iIH0sCisJLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUF9TV1NVUCwKKwkud2tkZXBfc3Jjcwk9IG5lb25fd2tkZXBzLAorCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAzNDMwX0NMS1RSQ1RSTF9ORU9OX01BU0ssCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBpdmEyX2Nsa2RtID0geworCS5uYW1lCQk9ICJpdmEyX2Nsa2RtIiwKKwkucHdyZG0JCT0geyAubmFtZSA9ICJpdmEyX3B3cmRtIiB9LAorCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCisJLmRlcF9iaXQJPSBPTUFQMzQzMF9QTV9XS0RFUF9NUFVfRU5fSVZBMl9TSElGVCwKKwkud2tkZXBfc3Jjcwk9IGl2YTJfd2tkZXBzLAorCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAzNDMwX0NMS1RSQ1RSTF9JVkEyX01BU0ssCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBnZnhfMzQzMGVzMV9jbGtkbSA9IHsKKwkubmFtZQkJPSAiZ2Z4X2Nsa2RtIiwKKwkucHdyZG0JCT0geyAubmFtZSA9ICJnZnhfcHdyZG0iIH0sCisJLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUF9TV1NVUCwKKwkud2tkZXBfc3Jjcwk9IGdmeF9zZ3hfd2tkZXBzLAorCS5zbGVlcGRlcF9zcmNzCT0gZ2Z4X3NneF9zbGVlcGRlcHMsCisJLmNsa3RyY3RybF9tYXNrID0gT01BUDM0MzBFUzFfQ0xLVFJDVFJMX0dGWF9NQVNLLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwRVMxKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gc2d4X2Nsa2RtID0geworCS5uYW1lCQk9ICJzZ3hfY2xrZG0iLAorCS5wd3JkbQkJPSB7IC5uYW1lID0gInNneF9wd3JkbSIgfSwKKwkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQX1NXU1VQLAorCS53a2RlcF9zcmNzCT0gZ2Z4X3NneF93a2RlcHMsCisJLnNsZWVwZGVwX3NyY3MJPSBnZnhfc2d4X3NsZWVwZGVwcywKKwkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMzQzMEVTMl9DTEtUUkNUUkxfU0dYX01BU0ssCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfR0VfT01BUDM0MzBFUzIpLAorfTsKKworLyoKKyAqIFRoZSBkaWUtdG8tZGllIGNsb2NrZG9tYWluIHdhcyBkb2N1bWVudGVkIGluIHRoZSAzNHh4IEVTMSBUUk0sIGJ1dAorICogdGhlbiB0aGF0IGluZm9ybWF0aW9uIHdhcyByZW1vdmVkIGZyb20gdGhlIDM0eHggRVMyKyBUUk0uICBJdCBpcworICogdW5jbGVhciB3aGV0aGVyIHRoZSBjb3JlIGlzIHN0aWxsIHRoZXJlLCBidXQgdGhlIGNsb2NrZG9tYWluIGxvZ2ljCisgKiBpcyB0aGVyZSwgYW5kIG11c3QgYmUgcHJvZ3JhbW1lZCB0byBhbiBhcHByb3ByaWF0ZSBzdGF0ZSBpZiB0aGUKKyAqIENPUkUgY2xvY2tkb21haW4gaXMgdG8gYmVjb21lIGluYWN0aXZlLgorICovCitzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGQyZF9jbGtkbSA9IHsKKwkubmFtZQkJPSAiZDJkX2Nsa2RtIiwKKwkucHdyZG0JCT0geyAubmFtZSA9ICJjb3JlX3B3cmRtIiB9LAorCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCisJLmNsa3RyY3RybF9tYXNrID0gT01BUDM0MzBFUzFfQ0xLVFJDVFJMX0QyRF9NQVNLLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKK307CisKKy8qCisgKiBYWFggYWRkIHVzZWNvdW50aW5nIGZvciBjbGtkbSBkZXBlbmRlbmNpZXMsIG90aGVyd2lzZSB0aGUgcHJlc2VuY2UKKyAqIG9mIGEgc2luZ2xlIGRlcCBiaXQgZm9yIGNvcmVfbDNfM3h4eF9jbGtkbSBhbmQgY29yZV9sNF8zeHh4X2Nsa2RtCisgKiBjb3VsZCBjYXVzZSB0cm91YmxlCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gY29yZV9sM18zeHh4X2Nsa2RtID0geworCS5uYW1lCQk9ICJjb3JlX2wzX2Nsa2RtIiwKKwkucHdyZG0JCT0geyAubmFtZSA9ICJjb3JlX3B3cmRtIiB9LAorCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVAsCisJLmRlcF9iaXQJPSBPTUFQMzQzMF9FTl9DT1JFX1NISUZULAorCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAzNDMwX0NMS1RSQ1RSTF9MM19NQVNLLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKK307CisKKy8qCisgKiBYWFggYWRkIHVzZWNvdW50aW5nIGZvciBjbGtkbSBkZXBlbmRlbmNpZXMsIG90aGVyd2lzZSB0aGUgcHJlc2VuY2UKKyAqIG9mIGEgc2luZ2xlIGRlcCBiaXQgZm9yIGNvcmVfbDNfM3h4eF9jbGtkbSBhbmQgY29yZV9sNF8zeHh4X2Nsa2RtCisgKiBjb3VsZCBjYXVzZSB0cm91YmxlCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gY29yZV9sNF8zeHh4X2Nsa2RtID0geworCS5uYW1lCQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkucHdyZG0JCT0geyAubmFtZSA9ICJjb3JlX3B3cmRtIiB9LAorCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVAsCisJLmRlcF9iaXQJPSBPTUFQMzQzMF9FTl9DT1JFX1NISUZULAorCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAzNDMwX0NMS1RSQ1RSTF9MNF9NQVNLLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKK307CisKKy8qIEFub3RoZXIgY2FzZSBvZiBiaXQgbmFtZSBjb2xsaXNpb25zIGJldHdlZW4gc2V2ZXJhbCByZWdpc3RlcnM6IEVOX0RTUyAqLworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBkc3NfM3h4eF9jbGtkbSA9IHsKKwkubmFtZQkJPSAiZHNzX2Nsa2RtIiwKKwkucHdyZG0JCT0geyAubmFtZSA9ICJkc3NfcHdyZG0iIH0sCisJLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUF9TV1NVUCwKKwkuZGVwX2JpdAk9IE9NQVAzNDMwX1BNX1dLREVQX01QVV9FTl9EU1NfU0hJRlQsCisJLndrZGVwX3NyY3MJPSBkc3Nfd2tkZXBzLAorCS5zbGVlcGRlcF9zcmNzCT0gZHNzX3NsZWVwZGVwcywKKwkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMzQzMF9DTEtUUkNUUkxfRFNTX01BU0ssCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBjYW1fY2xrZG0gPSB7CisJLm5hbWUJCT0gImNhbV9jbGtkbSIsCisJLnB3cmRtCQk9IHsgLm5hbWUgPSAiY2FtX3B3cmRtIiB9LAorCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCisJLndrZGVwX3NyY3MJPSBjYW1fd2tkZXBzLAorCS5zbGVlcGRlcF9zcmNzCT0gY2FtX3NsZWVwZGVwcywKKwkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMzQzMF9DTEtUUkNUUkxfQ0FNX01BU0ssCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiB1c2Job3N0X2Nsa2RtID0geworCS5uYW1lCQk9ICJ1c2Job3N0X2Nsa2RtIiwKKwkucHdyZG0JCT0geyAubmFtZSA9ICJ1c2Job3N0X3B3cmRtIiB9LAorCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCisJLndrZGVwX3NyY3MJPSB1c2Job3N0X3drZGVwcywKKwkuc2xlZXBkZXBfc3Jjcwk9IHVzYmhvc3Rfc2xlZXBkZXBzLAorCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAzNDMwRVMyX0NMS1RSQ1RSTF9VU0JIT1NUX01BU0ssCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfR0VfT01BUDM0MzBFUzIpLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBwZXJfY2xrZG0gPSB7CisJLm5hbWUJCT0gInBlcl9jbGtkbSIsCisJLnB3cmRtCQk9IHsgLm5hbWUgPSAicGVyX3B3cmRtIiB9LAorCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCisJLmRlcF9iaXQJPSBPTUFQMzQzMF9FTl9QRVJfU0hJRlQsCisJLndrZGVwX3NyY3MJPSBwZXJfd2tkZXBzLAorCS5zbGVlcGRlcF9zcmNzCT0gcGVyX3NsZWVwZGVwcywKKwkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMzQzMF9DTEtUUkNUUkxfUEVSX01BU0ssCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLAorfTsKKworLyoKKyAqIERpc2FibGUgaHcgc3VwZXJ2aXNlZCBtb2RlIGZvciBlbXVfY2xrZG0sIGJlY2F1c2UgZW11X3B3cmRtIGlzCisgKiBzd2l0Y2hlZCBvZiBldmVuIGlmIHNkdGkgaXMgaW4gdXNlCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gZW11X2Nsa2RtID0geworCS5uYW1lCQk9ICJlbXVfY2xrZG0iLAorCS5wd3JkbQkJPSB7IC5uYW1lID0gImVtdV9wd3JkbSIgfSwKKwkuZmxhZ3MJCT0gLyogQ0xLRE1fQ0FOX0VOQUJMRV9BVVRPIHwgICovQ0xLRE1fQ0FOX1NXU1VQLAorCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAzNDMwX0NMS1RSQ1RSTF9FTVVfTUFTSywKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCit9OworCitzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGRwbGwxX2Nsa2RtID0geworCS5uYW1lCQk9ICJkcGxsMV9jbGtkbSIsCisJLnB3cmRtCQk9IHsgLm5hbWUgPSAiZHBsbDFfcHdyZG0iIH0sCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBkcGxsMl9jbGtkbSA9IHsKKwkubmFtZQkJPSAiZHBsbDJfY2xrZG0iLAorCS5wd3JkbQkJPSB7IC5uYW1lID0gImRwbGwyX3B3cmRtIiB9LAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gZHBsbDNfY2xrZG0gPSB7CisJLm5hbWUJCT0gImRwbGwzX2Nsa2RtIiwKKwkucHdyZG0JCT0geyAubmFtZSA9ICJkcGxsM19wd3JkbSIgfSwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCit9OworCitzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGRwbGw0X2Nsa2RtID0geworCS5uYW1lCQk9ICJkcGxsNF9jbGtkbSIsCisJLnB3cmRtCQk9IHsgLm5hbWUgPSAiZHBsbDRfcHdyZG0iIH0sCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBkcGxsNV9jbGtkbSA9IHsKKwkubmFtZQkJPSAiZHBsbDVfY2xrZG0iLAorCS5wd3JkbQkJPSB7IC5uYW1lID0gImRwbGw1X3B3cmRtIiB9LAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0dFX09NQVAzNDMwRVMyKSwKK307CisKKyNlbmRpZiAgIC8qIENPTkZJR19BUkNIX09NQVAzICovCisKKy8qCisgKiBDbG9ja2RvbWFpbiBod3N1cCBkZXBlbmRlbmNpZXMgKE9NQVAzIG9ubHkpCisgKi8KKworc3RhdGljIHN0cnVjdCBjbGtkbV9hdXRvZGVwIGNsa2RtX2F1dG9kZXBzW10gPSB7CisJeworCQkuY2xrZG0JICAgPSB7IC5uYW1lID0gIm1wdV9jbGtkbSIgfSwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCisJfSwKKwl7CisJCS5jbGtkbQkgICA9IHsgLm5hbWUgPSAiaXZhMl9jbGtkbSIgfSwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCisJfSwKKwl7CisJCS5jbGtkbQkgICA9IHsgLm5hbWUgPSBOVUxMIH0sCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xvY2tkb21haW5zX29tYXAyW10gX19pbml0ZGF0YSA9IHsKKwkmd2t1cF9jbGtkbSwKKwkmY21fY2xrZG0sCisJJnBybV9jbGtkbSwKKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNDIwCisJJm1wdV8yNDIwX2Nsa2RtLAorCSZpdmExXzI0MjBfY2xrZG0sCisJJmRzcF8yNDIwX2Nsa2RtLAorCSZnZnhfMjQyMF9jbGtkbSwKKwkmY29yZV9sM18yNDIwX2Nsa2RtLAorCSZjb3JlX2w0XzI0MjBfY2xrZG0sCisJJmRzc18yNDIwX2Nsa2RtLAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMjQzMAorCSZtcHVfMjQzMF9jbGtkbSwKKwkmbWRtX2Nsa2RtLAorCSZkc3BfMjQzMF9jbGtkbSwKKwkmZ2Z4XzI0MzBfY2xrZG0sCisJJmNvcmVfbDNfMjQzMF9jbGtkbSwKKwkmY29yZV9sNF8yNDMwX2Nsa2RtLAorCSZkc3NfMjQzMF9jbGtkbSwKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDMKKwkmbXB1XzN4eHhfY2xrZG0sCisJJm5lb25fY2xrZG0sCisJJml2YTJfY2xrZG0sCisJJmdmeF8zNDMwZXMxX2Nsa2RtLAorCSZzZ3hfY2xrZG0sCisJJmQyZF9jbGtkbSwKKwkmY29yZV9sM18zeHh4X2Nsa2RtLAorCSZjb3JlX2w0XzN4eHhfY2xrZG0sCisJJmRzc18zeHh4X2Nsa2RtLAorCSZjYW1fY2xrZG0sCisJJnVzYmhvc3RfY2xrZG0sCisJJnBlcl9jbGtkbSwKKwkmZW11X2Nsa2RtLAorCSZkcGxsMV9jbGtkbSwKKwkmZHBsbDJfY2xrZG0sCisJJmRwbGwzX2Nsa2RtLAorCSZkcGxsNF9jbGtkbSwKKwkmZHBsbDVfY2xrZG0sCisjZW5kaWYKKwlOVUxMLAorfTsKKwordm9pZCBfX2luaXQgb21hcDJfY2xvY2tkb21haW5zX2luaXQodm9pZCkKK3sKKwljbGtkbV9pbml0KGNsb2NrZG9tYWluc19vbWFwMiwgY2xrZG1fYXV0b2RlcHMpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbnM0NHh4LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWluczQ0eHguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2U1YmEwZi4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWluczQ0eHguaAorKysgL2Rldi9udWxsCkBAIC0xLDI1MCArMCwwIEBACi0vKgotICogT01BUDQgQ2xvY2sgZG9tYWlucyBmcmFtZXdvcmsKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgotICoKLSAqIEFiaGlqaXQgUGFnYXJlIChhYmhpaml0cGFnYXJlQHRpLmNvbSkKLSAqIEJlbm9pdCBDb3Vzc29uIChiLWNvdXNzb25AdGkuY29tKQotICoKLSAqIFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHRoZSBPTUFQIGhhcmR3YXJlIGRhdGFiYXNlcy4KLSAqIFdlIHJlc3BlY3RmdWxseSBhc2sgdGhhdCBhbnkgbW9kaWZpY2F0aW9ucyB0byB0aGlzIGZpbGUgYmUgY29vcmRpbmF0ZWQKLSAqIHdpdGggdGhlIHB1YmxpYyBsaW51eC1vbWFwQHZnZXIua2VybmVsLm9yZyBtYWlsaW5nIGxpc3QgYW5kIHRoZQotICogYXV0aG9ycyBhYm92ZSB0byBlbnN1cmUgdGhhdCB0aGUgYXV0b2dlbmVyYXRpb24gc2NyaXB0cyBhcmUga2VwdAotICogdXAtdG8tZGF0ZSB3aXRoIHRoZSBmaWxlIGNvbnRlbnRzLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLQotLyoKLSAqIFRvLURvIExpc3QKLSAqIC0+IFBvcHVsYXRlIHRoZSBTbGVlcC9XYWtldXAgZGVwZW5kZW5jaWVzIGZvciB0aGUgZG9tYWlucwotICovCi0KLSNpZm5kZWYgX19BUkNIX0FSTV9NQUNIX09NQVAyX0NMT0NLRE9NQUlOUzQ0WFhfSAotI2RlZmluZSBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfQ0xPQ0tET01BSU5TNDRYWF9ICi0KLSNpbmNsdWRlIDxwbGF0L2Nsb2NrZG9tYWluLmg+Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQotCi1zdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGw0X2NlZnVzZV80NHh4X2Nsa2RtID0gewotCS5uYW1lCQkgID0gImw0X2NlZnVzZV9jbGtkbSIsCi0JLnB3cmRtCQkgID0geyAubmFtZSA9ICJjZWZ1c2VfcHdyZG0iIH0sCi0JLmNsa3N0Y3RybF9yZWcJICA9IE9NQVA0NDMwX0NNX0NFRlVTRV9DTEtTVENUUkwsCi0JLmNsa3RyY3RybF9tYXNrCSAgPSBPTUFQNDQzMF9DTEtUUkNUUkxfTUFTSywKLQkuZmxhZ3MJCSAgPSBDTEtETV9DQU5fRk9SQ0VfV0FLRVVQIHwgQ0xLRE1fQ0FOX0hXU1VQLAotCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBsNF9jZmdfNDR4eF9jbGtkbSA9IHsKLQkubmFtZQkJICA9ICJsNF9jZmdfY2xrZG0iLAotCS5wd3JkbQkJICA9IHsgLm5hbWUgPSAiY29yZV9wd3JkbSIgfSwKLQkuY2xrc3RjdHJsX3JlZwkgID0gT01BUDQ0MzBfQ01fTDRDRkdfQ0xLU1RDVFJMLAotCS5jbGt0cmN0cmxfbWFzawkgID0gT01BUDQ0MzBfQ0xLVFJDVFJMX01BU0ssCi0JLmZsYWdzCQkgID0gQ0xLRE1fQ0FOX0hXU1VQLAotCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiB0ZXNsYV80NHh4X2Nsa2RtID0gewotCS5uYW1lCQkgID0gInRlc2xhX2Nsa2RtIiwKLQkucHdyZG0JCSAgPSB7IC5uYW1lID0gInRlc2xhX3B3cmRtIiB9LAotCS5jbGtzdGN0cmxfcmVnCSAgPSBPTUFQNDQzMF9DTV9URVNMQV9DTEtTVENUUkwsCi0JLmNsa3RyY3RybF9tYXNrCSAgPSBPTUFQNDQzMF9DTEtUUkNUUkxfTUFTSywKLQkuZmxhZ3MJCSAgPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCi0JLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCi19OwotCi1zdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGwzX2dmeF80NHh4X2Nsa2RtID0gewotCS5uYW1lCQkgID0gImwzX2dmeF9jbGtkbSIsCi0JLnB3cmRtCQkgID0geyAubmFtZSA9ICJnZnhfcHdyZG0iIH0sCi0JLmNsa3N0Y3RybF9yZWcJICA9IE9NQVA0NDMwX0NNX0dGWF9DTEtTVENUUkwsCi0JLmNsa3RyY3RybF9tYXNrCSAgPSBPTUFQNDQzMF9DTEtUUkNUUkxfTUFTSywKLQkuZmxhZ3MJCSAgPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCi0JLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCi19OwotCi1zdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGl2YWhkXzQ0eHhfY2xrZG0gPSB7Ci0JLm5hbWUJCSAgPSAiaXZhaGRfY2xrZG0iLAotCS5wd3JkbQkJICA9IHsgLm5hbWUgPSAiaXZhaGRfcHdyZG0iIH0sCi0JLmNsa3N0Y3RybF9yZWcJICA9IE9NQVA0NDMwX0NNX0lWQUhEX0NMS1NUQ1RSTCwKLQkuY2xrdHJjdHJsX21hc2sJICA9IE9NQVA0NDMwX0NMS1RSQ1RSTF9NQVNLLAotCS5mbGFncwkJICA9IENMS0RNX0NBTl9IV1NVUF9TV1NVUCwKLQkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gbDRfc2VjdXJlXzQ0eHhfY2xrZG0gPSB7Ci0JLm5hbWUJCSAgPSAibDRfc2VjdXJlX2Nsa2RtIiwKLQkucHdyZG0JCSAgPSB7IC5uYW1lID0gImw0cGVyX3B3cmRtIiB9LAotCS5jbGtzdGN0cmxfcmVnCSAgPSBPTUFQNDQzMF9DTV9MNFNFQ19DTEtTVENUUkwsCi0JLmNsa3RyY3RybF9tYXNrCSAgPSBPTUFQNDQzMF9DTEtUUkNUUkxfTUFTSywKLQkuZmxhZ3MJCSAgPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCi0JLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCi19OwotCi1zdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGw0X3Blcl80NHh4X2Nsa2RtID0gewotCS5uYW1lCQkgID0gImw0X3Blcl9jbGtkbSIsCi0JLnB3cmRtCQkgID0geyAubmFtZSA9ICJsNHBlcl9wd3JkbSIgfSwKLQkuY2xrc3RjdHJsX3JlZwkgID0gT01BUDQ0MzBfQ01fTDRQRVJfQ0xLU1RDVFJMLAotCS5jbGt0cmN0cmxfbWFzawkgID0gT01BUDQ0MzBfQ0xLVFJDVFJMX01BU0ssCi0JLmZsYWdzCQkgID0gQ0xLRE1fQ0FOX0hXU1VQX1NXU1VQLAotCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBhYmVfNDR4eF9jbGtkbSA9IHsKLQkubmFtZQkJICA9ICJhYmVfY2xrZG0iLAotCS5wd3JkbQkJICA9IHsgLm5hbWUgPSAiYWJlX3B3cmRtIiB9LAotCS5jbGtzdGN0cmxfcmVnCSAgPSBPTUFQNDQzMF9DTTFfQUJFX0NMS1NUQ1RSTCwKLQkuY2xrdHJjdHJsX21hc2sJICA9IE9NQVA0NDMwX0NMS1RSQ1RSTF9NQVNLLAotCS5mbGFncwkJICA9IENMS0RNX0NBTl9IV1NVUF9TV1NVUCwKLQkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gbDNfaW5zdHJfNDR4eF9jbGtkbSA9IHsKLQkubmFtZQkJICA9ICJsM19pbnN0cl9jbGtkbSIsCi0JLnB3cmRtCQkgID0geyAubmFtZSA9ICJjb3JlX3B3cmRtIiB9LAotCS5jbGtzdGN0cmxfcmVnCSAgPSBPTUFQNDQzMF9DTV9MM0lOU1RSX0NMS1NUQ1RSTCwKLQkuY2xrdHJjdHJsX21hc2sJICA9IE9NQVA0NDMwX0NMS1RSQ1RSTF9NQVNLLAotCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBsM19pbml0XzQ0eHhfY2xrZG0gPSB7Ci0JLm5hbWUJCSAgPSAibDNfaW5pdF9jbGtkbSIsCi0JLnB3cmRtCQkgID0geyAubmFtZSA9ICJsM2luaXRfcHdyZG0iIH0sCi0JLmNsa3N0Y3RybF9yZWcJICA9IE9NQVA0NDMwX0NNX0wzSU5JVF9DTEtTVENUUkwsCi0JLmNsa3RyY3RybF9tYXNrCSAgPSBPTUFQNDQzMF9DTEtUUkNUUkxfTUFTSywKLQkuZmxhZ3MJCSAgPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCi0JLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCi19OwotCi1zdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIG1wdXNzXzQ0eHhfY2xrZG0gPSB7Ci0JLm5hbWUJCSAgPSAibXB1c3NfY2xrZG0iLAotCS5wd3JkbQkJICA9IHsgLm5hbWUgPSAibXB1X3B3cmRtIiB9LAotCS5jbGtzdGN0cmxfcmVnCSAgPSBPTUFQNDQzMF9DTV9NUFVfQ0xLU1RDVFJMLAotCS5jbGt0cmN0cmxfbWFzawkgID0gT01BUDQ0MzBfQ0xLVFJDVFJMX01BU0ssCi0JLmZsYWdzCQkgID0gQ0xLRE1fQ0FOX0ZPUkNFX1dBS0VVUCB8IENMS0RNX0NBTl9IV1NVUCwKLQkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gbXB1MF80NHh4X2Nsa2RtID0gewotCS5uYW1lCQkgID0gIm1wdTBfY2xrZG0iLAotCS5wd3JkbQkJICA9IHsgLm5hbWUgPSAiY3B1MF9wd3JkbSIgfSwKLQkuY2xrc3RjdHJsX3JlZwkgID0gT01BUDQ0MzBfQ01fQ1BVMF9DTEtTVENUUkwsCi0JLmNsa3RyY3RybF9tYXNrCSAgPSBPTUFQNDQzMF9DTEtUUkNUUkxfTUFTSywKLQkuZmxhZ3MJCSAgPSBDTEtETV9DQU5fRk9SQ0VfV0FLRVVQIHwgQ0xLRE1fQ0FOX0hXU1VQLAotCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBtcHUxXzQ0eHhfY2xrZG0gPSB7Ci0JLm5hbWUJCSAgPSAibXB1MV9jbGtkbSIsCi0JLnB3cmRtCQkgID0geyAubmFtZSA9ICJjcHUxX3B3cmRtIiB9LAotCS5jbGtzdGN0cmxfcmVnCSAgPSBPTUFQNDQzMF9DTV9DUFUxX0NMS1NUQ1RSTCwKLQkuY2xrdHJjdHJsX21hc2sJICA9IE9NQVA0NDMwX0NMS1RSQ1RSTF9NQVNLLAotCS5mbGFncwkJICA9IENMS0RNX0NBTl9GT1JDRV9XQUtFVVAgfCBDTEtETV9DQU5fSFdTVVAsCi0JLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCi19OwotCi1zdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGwzX2VtaWZfNDR4eF9jbGtkbSA9IHsKLQkubmFtZQkJICA9ICJsM19lbWlmX2Nsa2RtIiwKLQkucHdyZG0JCSAgPSB7IC5uYW1lID0gImNvcmVfcHdyZG0iIH0sCi0JLmNsa3N0Y3RybF9yZWcJICA9IE9NQVA0NDMwX0NNX01FTUlGX0NMS1NUQ1RSTCwKLQkuY2xrdHJjdHJsX21hc2sJICA9IE9NQVA0NDMwX0NMS1RSQ1RSTF9NQVNLLAotCS5mbGFncwkJICA9IENMS0RNX0NBTl9GT1JDRV9XQUtFVVAgfCBDTEtETV9DQU5fSFdTVVAsCi0JLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCi19OwotCi1zdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGw0X2FvXzQ0eHhfY2xrZG0gPSB7Ci0JLm5hbWUJCSAgPSAibDRfYW9fY2xrZG0iLAotCS5wd3JkbQkJICA9IHsgLm5hbWUgPSAiYWx3YXlzX29uX2NvcmVfcHdyZG0iIH0sCi0JLmNsa3N0Y3RybF9yZWcJICA9IE9NQVA0NDMwX0NNX0FMV09OX0NMS1NUQ1RSTCwKLQkuY2xrdHJjdHJsX21hc2sJICA9IE9NQVA0NDMwX0NMS1RSQ1RSTF9NQVNLLAotCS5mbGFncwkJICA9IENMS0RNX0NBTl9GT1JDRV9XQUtFVVAgfCBDTEtETV9DQU5fSFdTVVAsCi0JLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCi19OwotCi1zdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGR1Y2F0aV80NHh4X2Nsa2RtID0gewotCS5uYW1lCQkgID0gImR1Y2F0aV9jbGtkbSIsCi0JLnB3cmRtCQkgID0geyAubmFtZSA9ICJjb3JlX3B3cmRtIiB9LAotCS5jbGtzdGN0cmxfcmVnCSAgPSBPTUFQNDQzMF9DTV9EVUNBVElfQ0xLU1RDVFJMLAotCS5jbGt0cmN0cmxfbWFzawkgID0gT01BUDQ0MzBfQ0xLVFJDVFJMX01BU0ssCi0JLmZsYWdzCQkgID0gQ0xLRE1fQ0FOX0hXU1VQX1NXU1VQLAotCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBsM18yXzQ0eHhfY2xrZG0gPSB7Ci0JLm5hbWUJCSAgPSAibDNfMl9jbGtkbSIsCi0JLnB3cmRtCQkgID0geyAubmFtZSA9ICJjb3JlX3B3cmRtIiB9LAotCS5jbGtzdGN0cmxfcmVnCSAgPSBPTUFQNDQzMF9DTV9MM18yX0NMS1NUQ1RSTCwKLQkuY2xrdHJjdHJsX21hc2sJICA9IE9NQVA0NDMwX0NMS1RSQ1RSTF9NQVNLLAotCS5mbGFncwkJICA9IENMS0RNX0NBTl9IV1NVUCwKLQkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gbDNfMV80NHh4X2Nsa2RtID0gewotCS5uYW1lCQkgID0gImwzXzFfY2xrZG0iLAotCS5wd3JkbQkJICA9IHsgLm5hbWUgPSAiY29yZV9wd3JkbSIgfSwKLQkuY2xrc3RjdHJsX3JlZwkgID0gT01BUDQ0MzBfQ01fTDNfMV9DTEtTVENUUkwsCi0JLmNsa3RyY3RybF9tYXNrCSAgPSBPTUFQNDQzMF9DTEtUUkNUUkxfTUFTSywKLQkuZmxhZ3MJCSAgPSBDTEtETV9DQU5fSFdTVVAsCi0JLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCi19OwotCi1zdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGwzX2QyZF80NHh4X2Nsa2RtID0gewotCS5uYW1lCQkgID0gImwzX2QyZF9jbGtkbSIsCi0JLnB3cmRtCQkgID0geyAubmFtZSA9ICJjb3JlX3B3cmRtIiB9LAotCS5jbGtzdGN0cmxfcmVnCSAgPSBPTUFQNDQzMF9DTV9EMkRfQ0xLU1RDVFJMLAotCS5jbGt0cmN0cmxfbWFzawkgID0gT01BUDQ0MzBfQ0xLVFJDVFJMX01BU0ssCi0JLmZsYWdzCQkgID0gQ0xLRE1fQ0FOX0ZPUkNFX1dBS0VVUCB8IENMS0RNX0NBTl9IV1NVUCwKLQkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gaXNzXzQ0eHhfY2xrZG0gPSB7Ci0JLm5hbWUJCSAgPSAiaXNzX2Nsa2RtIiwKLQkucHdyZG0JCSAgPSB7IC5uYW1lID0gImNhbV9wd3JkbSIgfSwKLQkuY2xrc3RjdHJsX3JlZwkgID0gT01BUDQ0MzBfQ01fQ0FNX0NMS1NUQ1RSTCwKLQkuY2xrdHJjdHJsX21hc2sJICA9IE9NQVA0NDMwX0NMS1RSQ1RSTF9NQVNLLAotCS5mbGFncwkJICA9IENMS0RNX0NBTl9IV1NVUF9TV1NVUCwKLQkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gbDNfZHNzXzQ0eHhfY2xrZG0gPSB7Ci0JLm5hbWUJCSAgPSAibDNfZHNzX2Nsa2RtIiwKLQkucHdyZG0JCSAgPSB7IC5uYW1lID0gImRzc19wd3JkbSIgfSwKLQkuY2xrc3RjdHJsX3JlZwkgID0gT01BUDQ0MzBfQ01fRFNTX0NMS1NUQ1RSTCwKLQkuY2xrdHJjdHJsX21hc2sJICA9IE9NQVA0NDMwX0NMS1RSQ1RSTF9NQVNLLAotCS5mbGFncwkJICA9IENMS0RNX0NBTl9IV1NVUF9TV1NVUCwKLQkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gbDRfd2t1cF80NHh4X2Nsa2RtID0gewotCS5uYW1lCQkgID0gImw0X3drdXBfY2xrZG0iLAotCS5wd3JkbQkJICA9IHsgLm5hbWUgPSAid2t1cF9wd3JkbSIgfSwKLQkuY2xrc3RjdHJsX3JlZwkgID0gT01BUDQ0MzBfQ01fV0tVUF9DTEtTVENUUkwsCi0JLmNsa3RyY3RybF9tYXNrCSAgPSBPTUFQNDQzMF9DTEtUUkNUUkxfTUFTSywKLQkuZmxhZ3MJCSAgPSBDTEtETV9DQU5fSFdTVVAsCi0JLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCi19OwotCi1zdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGVtdV9zeXNfNDR4eF9jbGtkbSA9IHsKLQkubmFtZQkJICA9ICJlbXVfc3lzX2Nsa2RtIiwKLQkucHdyZG0JCSAgPSB7IC5uYW1lID0gImVtdV9wd3JkbSIgfSwKLQkuY2xrc3RjdHJsX3JlZwkgID0gT01BUDQ0MzBfQ01fRU1VX0NMS1NUQ1RSTCwKLQkuY2xrdHJjdHJsX21hc2sJICA9IE9NQVA0NDMwX0NMS1RSQ1RSTF9NQVNLLAotCS5mbGFncwkJICA9IENMS0RNX0NBTl9IV1NVUCwKLQkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gbDNfZG1hXzQ0eHhfY2xrZG0gPSB7Ci0JLm5hbWUJCSAgPSAibDNfZG1hX2Nsa2RtIiwKLQkucHdyZG0JCSAgPSB7IC5uYW1lID0gImNvcmVfcHdyZG0iIH0sCi0JLmNsa3N0Y3RybF9yZWcJICA9IE9NQVA0NDMwX0NNX1NETUFfQ0xLU1RDVFJMLAotCS5jbGt0cmN0cmxfbWFzawkgID0gT01BUDQ0MzBfQ0xLVFJDVFJMX01BU0ssCi0JLmZsYWdzCQkgID0gQ0xLRE1fQ0FOX0ZPUkNFX1dBS0VVUCB8IENMS0RNX0NBTl9IV1NVUCwKLQkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKLX07Ci0KLSNlbmRpZgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW5zNDR4eF9kYXRhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWluczQ0eHhfZGF0YS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxOTIwZmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWluczQ0eHhfZGF0YS5jCkBAIC0wLDAgKzEsMzExIEBACisvKgorICogT01BUDQgQ2xvY2sgZG9tYWlucyBmcmFtZXdvcmsKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIEFiaGlqaXQgUGFnYXJlIChhYmhpaml0cGFnYXJlQHRpLmNvbSkKKyAqIEJlbm9pdCBDb3Vzc29uIChiLWNvdXNzb25AdGkuY29tKQorICoKKyAqIFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHRoZSBPTUFQIGhhcmR3YXJlIGRhdGFiYXNlcy4KKyAqIFdlIHJlc3BlY3RmdWxseSBhc2sgdGhhdCBhbnkgbW9kaWZpY2F0aW9ucyB0byB0aGlzIGZpbGUgYmUgY29vcmRpbmF0ZWQKKyAqIHdpdGggdGhlIHB1YmxpYyBsaW51eC1vbWFwQHZnZXIua2VybmVsLm9yZyBtYWlsaW5nIGxpc3QgYW5kIHRoZQorICogYXV0aG9ycyBhYm92ZSB0byBlbnN1cmUgdGhhdCB0aGUgYXV0b2dlbmVyYXRpb24gc2NyaXB0cyBhcmUga2VwdAorICogdXAtdG8tZGF0ZSB3aXRoIHRoZSBmaWxlIGNvbnRlbnRzLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworLyoKKyAqIFRvLURvIExpc3QKKyAqIC0+IFBvcHVsYXRlIHRoZSBTbGVlcC9XYWtldXAgZGVwZW5kZW5jaWVzIGZvciB0aGUgZG9tYWlucworICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSAiY2xvY2tkb21haW4uaCIKKyNpbmNsdWRlICJjbTFfNDR4eC5oIgorI2luY2x1ZGUgImNtMl80NHh4LmgiCisKKyNpbmNsdWRlICJjbTFfNDR4eC5oIgorI2luY2x1ZGUgImNtMl80NHh4LmgiCisjaW5jbHVkZSAiY20tcmVnYml0cy00NHh4LmgiCisjaW5jbHVkZSAicHJtNDR4eC5oIgorI2luY2x1ZGUgInByY200NHh4LmgiCisjaW5jbHVkZSAicHJjbV9tcHU0NHh4LmgiCisKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBsNF9jZWZ1c2VfNDR4eF9jbGtkbSA9IHsKKwkubmFtZQkJICA9ICJsNF9jZWZ1c2VfY2xrZG0iLAorCS5wd3JkbQkJICA9IHsgLm5hbWUgPSAiY2VmdXNlX3B3cmRtIiB9LAorCS5wcmNtX3BhcnRpdGlvbgkgID0gT01BUDQ0MzBfQ00yX1BBUlRJVElPTiwKKwkuY21faW5zdAkgID0gT01BUDQ0MzBfQ00yX0NFRlVTRV9JTlNULAorCS5jbGtkbV9vZmZzCSAgPSBPTUFQNDQzMF9DTTJfQ0VGVVNFX0NFRlVTRV9DRE9GRlMsCisJLmZsYWdzCQkgID0gQ0xLRE1fQ0FOX0ZPUkNFX1dBS0VVUCB8IENMS0RNX0NBTl9IV1NVUCwKKwkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gbDRfY2ZnXzQ0eHhfY2xrZG0gPSB7CisJLm5hbWUJCSAgPSAibDRfY2ZnX2Nsa2RtIiwKKwkucHdyZG0JCSAgPSB7IC5uYW1lID0gImNvcmVfcHdyZG0iIH0sCisJLnByY21fcGFydGl0aW9uCSAgPSBPTUFQNDQzMF9DTTJfUEFSVElUSU9OLAorCS5jbV9pbnN0CSAgPSBPTUFQNDQzMF9DTTJfQ09SRV9JTlNULAorCS5jbGtkbV9vZmZzCSAgPSBPTUFQNDQzMF9DTTJfQ09SRV9MNENGR19DRE9GRlMsCisJLmZsYWdzCQkgID0gQ0xLRE1fQ0FOX0hXU1VQLAorCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiB0ZXNsYV80NHh4X2Nsa2RtID0geworCS5uYW1lCQkgID0gInRlc2xhX2Nsa2RtIiwKKwkucHdyZG0JCSAgPSB7IC5uYW1lID0gInRlc2xhX3B3cmRtIiB9LAorCS5wcmNtX3BhcnRpdGlvbgkgID0gT01BUDQ0MzBfQ00xX1BBUlRJVElPTiwKKwkuY21faW5zdAkgID0gT01BUDQ0MzBfQ00xX1RFU0xBX0lOU1QsCisJLmNsa2RtX29mZnMJICA9IE9NQVA0NDMwX0NNMV9URVNMQV9URVNMQV9DRE9GRlMsCisJLmZsYWdzCQkgID0gQ0xLRE1fQ0FOX0hXU1VQX1NXU1VQLAorCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBsM19nZnhfNDR4eF9jbGtkbSA9IHsKKwkubmFtZQkJICA9ICJsM19nZnhfY2xrZG0iLAorCS5wd3JkbQkJICA9IHsgLm5hbWUgPSAiZ2Z4X3B3cmRtIiB9LAorCS5wcmNtX3BhcnRpdGlvbgkgID0gT01BUDQ0MzBfQ00yX1BBUlRJVElPTiwKKwkuY21faW5zdAkgID0gT01BUDQ0MzBfQ00yX0dGWF9JTlNULAorCS5jbGtkbV9vZmZzCSAgPSBPTUFQNDQzMF9DTTJfR0ZYX0dGWF9DRE9GRlMsCisJLmZsYWdzCQkgID0gQ0xLRE1fQ0FOX0hXU1VQX1NXU1VQLAorCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBpdmFoZF80NHh4X2Nsa2RtID0geworCS5uYW1lCQkgID0gIml2YWhkX2Nsa2RtIiwKKwkucHdyZG0JCSAgPSB7IC5uYW1lID0gIml2YWhkX3B3cmRtIiB9LAorCS5wcmNtX3BhcnRpdGlvbgkgID0gT01BUDQ0MzBfQ00yX1BBUlRJVElPTiwKKwkuY21faW5zdAkgID0gT01BUDQ0MzBfQ00yX0lWQUhEX0lOU1QsCisJLmNsa2RtX29mZnMJICA9IE9NQVA0NDMwX0NNMl9JVkFIRF9JVkFIRF9DRE9GRlMsCisJLmZsYWdzCQkgID0gQ0xLRE1fQ0FOX0hXU1VQX1NXU1VQLAorCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBsNF9zZWN1cmVfNDR4eF9jbGtkbSA9IHsKKwkubmFtZQkJICA9ICJsNF9zZWN1cmVfY2xrZG0iLAorCS5wd3JkbQkJICA9IHsgLm5hbWUgPSAibDRwZXJfcHdyZG0iIH0sCisJLnByY21fcGFydGl0aW9uCSAgPSBPTUFQNDQzMF9DTTJfUEFSVElUSU9OLAorCS5jbV9pbnN0CSAgPSBPTUFQNDQzMF9DTTJfTDRQRVJfSU5TVCwKKwkuY2xrZG1fb2ZmcwkgID0gT01BUDQ0MzBfQ00yX0w0UEVSX0w0U0VDX0NET0ZGUywKKwkuZmxhZ3MJCSAgPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCisJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCit9OworCitzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGw0X3Blcl80NHh4X2Nsa2RtID0geworCS5uYW1lCQkgID0gImw0X3Blcl9jbGtkbSIsCisJLnB3cmRtCQkgID0geyAubmFtZSA9ICJsNHBlcl9wd3JkbSIgfSwKKwkucHJjbV9wYXJ0aXRpb24JICA9IE9NQVA0NDMwX0NNMl9QQVJUSVRJT04sCisJLmNtX2luc3QJICA9IE9NQVA0NDMwX0NNMl9MNFBFUl9JTlNULAorCS5jbGtkbV9vZmZzCSAgPSBPTUFQNDQzMF9DTTJfTDRQRVJfTDRQRVJfQ0RPRkZTLAorCS5mbGFncwkJICA9IENMS0RNX0NBTl9IV1NVUF9TV1NVUCwKKwkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gYWJlXzQ0eHhfY2xrZG0gPSB7CisJLm5hbWUJCSAgPSAiYWJlX2Nsa2RtIiwKKwkucHdyZG0JCSAgPSB7IC5uYW1lID0gImFiZV9wd3JkbSIgfSwKKwkucHJjbV9wYXJ0aXRpb24JICA9IE9NQVA0NDMwX0NNMV9QQVJUSVRJT04sCisJLmNtX2luc3QJICA9IE9NQVA0NDMwX0NNMV9BQkVfSU5TVCwKKwkuY2xrZG1fb2ZmcwkgID0gT01BUDQ0MzBfQ00xX0FCRV9BQkVfQ0RPRkZTLAorCS5mbGFncwkJICA9IENMS0RNX0NBTl9IV1NVUF9TV1NVUCwKKwkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gbDNfaW5zdHJfNDR4eF9jbGtkbSA9IHsKKwkubmFtZQkJICA9ICJsM19pbnN0cl9jbGtkbSIsCisJLnB3cmRtCQkgID0geyAubmFtZSA9ICJjb3JlX3B3cmRtIiB9LAorCS5wcmNtX3BhcnRpdGlvbgkgID0gT01BUDQ0MzBfQ00yX1BBUlRJVElPTiwKKwkuY21faW5zdAkgID0gT01BUDQ0MzBfQ00yX0NPUkVfSU5TVCwKKwkuY2xrZG1fb2ZmcwkgID0gT01BUDQ0MzBfQ00yX0NPUkVfTDNJTlNUUl9DRE9GRlMsCisJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCit9OworCitzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGwzX2luaXRfNDR4eF9jbGtkbSA9IHsKKwkubmFtZQkJICA9ICJsM19pbml0X2Nsa2RtIiwKKwkucHdyZG0JCSAgPSB7IC5uYW1lID0gImwzaW5pdF9wd3JkbSIgfSwKKwkucHJjbV9wYXJ0aXRpb24JICA9IE9NQVA0NDMwX0NNMl9QQVJUSVRJT04sCisJLmNtX2luc3QJICA9IE9NQVA0NDMwX0NNMl9MM0lOSVRfSU5TVCwKKwkuY2xrZG1fb2ZmcwkgID0gT01BUDQ0MzBfQ00yX0wzSU5JVF9MM0lOSVRfQ0RPRkZTLAorCS5mbGFncwkJICA9IENMS0RNX0NBTl9IV1NVUF9TV1NVUCwKKwkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gbXB1c3NfNDR4eF9jbGtkbSA9IHsKKwkubmFtZQkJICA9ICJtcHVzc19jbGtkbSIsCisJLnB3cmRtCQkgID0geyAubmFtZSA9ICJtcHVfcHdyZG0iIH0sCisJLnByY21fcGFydGl0aW9uCSAgPSBPTUFQNDQzMF9DTTFfUEFSVElUSU9OLAorCS5jbV9pbnN0CSAgPSBPTUFQNDQzMF9DTTFfTVBVX0lOU1QsCisJLmNsa2RtX29mZnMJICA9IE9NQVA0NDMwX0NNMV9NUFVfTVBVX0NET0ZGUywKKwkuZmxhZ3MJCSAgPSBDTEtETV9DQU5fRk9SQ0VfV0FLRVVQIHwgQ0xLRE1fQ0FOX0hXU1VQLAorCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBtcHUwXzQ0eHhfY2xrZG0gPSB7CisJLm5hbWUJCSAgPSAibXB1MF9jbGtkbSIsCisJLnB3cmRtCQkgID0geyAubmFtZSA9ICJjcHUwX3B3cmRtIiB9LAorCS5wcmNtX3BhcnRpdGlvbgkgID0gT01BUDQ0MzBfUFJDTV9NUFVfUEFSVElUSU9OLAorCS5jbV9pbnN0CSAgPSBPTUFQNDQzMF9QUkNNX01QVV9DUFUwX0lOU1QsCisJLmNsa2RtX29mZnMJICA9IE9NQVA0NDMwX1BSQ01fTVBVX0NQVTBfTVBVX0NET0ZGUywKKwkuZmxhZ3MJCSAgPSBDTEtETV9DQU5fRk9SQ0VfV0FLRVVQIHwgQ0xLRE1fQ0FOX0hXU1VQLAorCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBtcHUxXzQ0eHhfY2xrZG0gPSB7CisJLm5hbWUJCSAgPSAibXB1MV9jbGtkbSIsCisJLnB3cmRtCQkgID0geyAubmFtZSA9ICJjcHUxX3B3cmRtIiB9LAorCS5wcmNtX3BhcnRpdGlvbgkgID0gT01BUDQ0MzBfUFJDTV9NUFVfUEFSVElUSU9OLAorCS5jbV9pbnN0CSAgPSBPTUFQNDQzMF9QUkNNX01QVV9DUFUxX0lOU1QsCisJLmNsa2RtX29mZnMJICA9IE9NQVA0NDMwX1BSQ01fTVBVX0NQVTFfTVBVX0NET0ZGUywKKwkuZmxhZ3MJCSAgPSBDTEtETV9DQU5fRk9SQ0VfV0FLRVVQIHwgQ0xLRE1fQ0FOX0hXU1VQLAorCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBsM19lbWlmXzQ0eHhfY2xrZG0gPSB7CisJLm5hbWUJCSAgPSAibDNfZW1pZl9jbGtkbSIsCisJLnB3cmRtCQkgID0geyAubmFtZSA9ICJjb3JlX3B3cmRtIiB9LAorCS5wcmNtX3BhcnRpdGlvbgkgID0gT01BUDQ0MzBfQ00yX1BBUlRJVElPTiwKKwkuY21faW5zdAkgID0gT01BUDQ0MzBfQ00yX0NPUkVfSU5TVCwKKwkuY2xrZG1fb2ZmcwkgID0gT01BUDQ0MzBfQ00yX0NPUkVfTUVNSUZfQ0RPRkZTLAorCS5mbGFncwkJICA9IENMS0RNX0NBTl9GT1JDRV9XQUtFVVAgfCBDTEtETV9DQU5fSFdTVVAsCisJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCit9OworCitzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGw0X2FvXzQ0eHhfY2xrZG0gPSB7CisJLm5hbWUJCSAgPSAibDRfYW9fY2xrZG0iLAorCS5wd3JkbQkJICA9IHsgLm5hbWUgPSAiYWx3YXlzX29uX2NvcmVfcHdyZG0iIH0sCisJLnByY21fcGFydGl0aW9uCSAgPSBPTUFQNDQzMF9DTTJfUEFSVElUSU9OLAorCS5jbV9pbnN0CSAgPSBPTUFQNDQzMF9DTTJfQUxXQVlTX09OX0lOU1QsCisJLmNsa2RtX29mZnMJICA9IE9NQVA0NDMwX0NNMl9BTFdBWVNfT05fQUxXT05fQ0RPRkZTLAorCS5mbGFncwkJICA9IENMS0RNX0NBTl9GT1JDRV9XQUtFVVAgfCBDTEtETV9DQU5fSFdTVVAsCisJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCit9OworCitzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGR1Y2F0aV80NHh4X2Nsa2RtID0geworCS5uYW1lCQkgID0gImR1Y2F0aV9jbGtkbSIsCisJLnB3cmRtCQkgID0geyAubmFtZSA9ICJjb3JlX3B3cmRtIiB9LAorCS5wcmNtX3BhcnRpdGlvbgkgID0gT01BUDQ0MzBfQ00yX1BBUlRJVElPTiwKKwkuY21faW5zdAkgID0gT01BUDQ0MzBfQ00yX0NPUkVfSU5TVCwKKwkuY2xrZG1fb2ZmcwkgID0gT01BUDQ0MzBfQ00yX0NPUkVfRFVDQVRJX0NET0ZGUywKKwkuZmxhZ3MJCSAgPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCisJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCit9OworCitzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGwzXzJfNDR4eF9jbGtkbSA9IHsKKwkubmFtZQkJICA9ICJsM18yX2Nsa2RtIiwKKwkucHdyZG0JCSAgPSB7IC5uYW1lID0gImNvcmVfcHdyZG0iIH0sCisJLnByY21fcGFydGl0aW9uCSAgPSBPTUFQNDQzMF9DTTJfUEFSVElUSU9OLAorCS5jbV9pbnN0CSAgPSBPTUFQNDQzMF9DTTJfQ09SRV9JTlNULAorCS5jbGtkbV9vZmZzCSAgPSBPTUFQNDQzMF9DTTJfQ09SRV9MM18yX0NET0ZGUywKKwkuZmxhZ3MJCSAgPSBDTEtETV9DQU5fSFdTVVAsCisJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCit9OworCitzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGwzXzFfNDR4eF9jbGtkbSA9IHsKKwkubmFtZQkJICA9ICJsM18xX2Nsa2RtIiwKKwkucHdyZG0JCSAgPSB7IC5uYW1lID0gImNvcmVfcHdyZG0iIH0sCisJLnByY21fcGFydGl0aW9uCSAgPSBPTUFQNDQzMF9DTTJfUEFSVElUSU9OLAorCS5jbV9pbnN0CSAgPSBPTUFQNDQzMF9DTTJfQ09SRV9JTlNULAorCS5jbGtkbV9vZmZzCSAgPSBPTUFQNDQzMF9DTTJfQ09SRV9MM18xX0NET0ZGUywKKwkuZmxhZ3MJCSAgPSBDTEtETV9DQU5fSFdTVVAsCisJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCit9OworCitzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGwzX2QyZF80NHh4X2Nsa2RtID0geworCS5uYW1lCQkgID0gImwzX2QyZF9jbGtkbSIsCisJLnB3cmRtCQkgID0geyAubmFtZSA9ICJjb3JlX3B3cmRtIiB9LAorCS5wcmNtX3BhcnRpdGlvbgkgID0gT01BUDQ0MzBfQ00yX1BBUlRJVElPTiwKKwkuY21faW5zdAkgID0gT01BUDQ0MzBfQ00yX0NPUkVfSU5TVCwKKwkuY2xrZG1fb2ZmcwkgID0gT01BUDQ0MzBfQ00yX0NPUkVfRDJEX0NET0ZGUywKKwkuZmxhZ3MJCSAgPSBDTEtETV9DQU5fRk9SQ0VfV0FLRVVQIHwgQ0xLRE1fQ0FOX0hXU1VQLAorCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBpc3NfNDR4eF9jbGtkbSA9IHsKKwkubmFtZQkJICA9ICJpc3NfY2xrZG0iLAorCS5wd3JkbQkJICA9IHsgLm5hbWUgPSAiY2FtX3B3cmRtIiB9LAorCS5wcmNtX3BhcnRpdGlvbgkgID0gT01BUDQ0MzBfQ00yX1BBUlRJVElPTiwKKwkuY21faW5zdAkgID0gT01BUDQ0MzBfQ00yX0NBTV9JTlNULAorCS5jbGtkbV9vZmZzCSAgPSBPTUFQNDQzMF9DTTJfQ0FNX0NBTV9DRE9GRlMsCisJLmZsYWdzCQkgID0gQ0xLRE1fQ0FOX0hXU1VQX1NXU1VQLAorCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBsM19kc3NfNDR4eF9jbGtkbSA9IHsKKwkubmFtZQkJICA9ICJsM19kc3NfY2xrZG0iLAorCS5wd3JkbQkJICA9IHsgLm5hbWUgPSAiZHNzX3B3cmRtIiB9LAorCS5wcmNtX3BhcnRpdGlvbgkgID0gT01BUDQ0MzBfQ00yX1BBUlRJVElPTiwKKwkuY21faW5zdAkgID0gT01BUDQ0MzBfQ00yX0RTU19JTlNULAorCS5jbGtkbV9vZmZzCSAgPSBPTUFQNDQzMF9DTTJfRFNTX0RTU19DRE9GRlMsCisJLmZsYWdzCQkgID0gQ0xLRE1fQ0FOX0hXU1VQX1NXU1VQLAorCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBsNF93a3VwXzQ0eHhfY2xrZG0gPSB7CisJLm5hbWUJCSAgPSAibDRfd2t1cF9jbGtkbSIsCisJLnB3cmRtCQkgID0geyAubmFtZSA9ICJ3a3VwX3B3cmRtIiB9LAorCS5wcmNtX3BhcnRpdGlvbgkgID0gT01BUDQ0MzBfUFJNX1BBUlRJVElPTiwKKwkuY21faW5zdAkgID0gT01BUDQ0MzBfUFJNX1dLVVBfQ01fSU5TVCwKKwkuY2xrZG1fb2ZmcwkgID0gT01BUDQ0MzBfUFJNX1dLVVBfQ01fV0tVUF9DRE9GRlMsCisJLmZsYWdzCQkgID0gQ0xLRE1fQ0FOX0hXU1VQLAorCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBlbXVfc3lzXzQ0eHhfY2xrZG0gPSB7CisJLm5hbWUJCSAgPSAiZW11X3N5c19jbGtkbSIsCisJLnB3cmRtCQkgID0geyAubmFtZSA9ICJlbXVfcHdyZG0iIH0sCisJLnByY21fcGFydGl0aW9uCSAgPSBPTUFQNDQzMF9QUk1fUEFSVElUSU9OLAorCS5jbV9pbnN0CSAgPSBPTUFQNDQzMF9QUk1fRU1VX0NNX0lOU1QsCisJLmNsa2RtX29mZnMJICA9IE9NQVA0NDMwX1BSTV9FTVVfQ01fRU1VX0NET0ZGUywKKwkuZmxhZ3MJCSAgPSBDTEtETV9DQU5fSFdTVVAsCisJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCit9OworCitzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGwzX2RtYV80NHh4X2Nsa2RtID0geworCS5uYW1lCQkgID0gImwzX2RtYV9jbGtkbSIsCisJLnB3cmRtCQkgID0geyAubmFtZSA9ICJjb3JlX3B3cmRtIiB9LAorCS5wcmNtX3BhcnRpdGlvbgkgID0gT01BUDQ0MzBfQ00yX1BBUlRJVElPTiwKKwkuY21faW5zdAkgID0gT01BUDQ0MzBfQ00yX0NPUkVfSU5TVCwKKwkuY2xrZG1fb2ZmcwkgID0gT01BUDQ0MzBfQ00yX0NPUkVfU0RNQV9DRE9GRlMsCisJLmZsYWdzCQkgID0gQ0xLRE1fQ0FOX0ZPUkNFX1dBS0VVUCB8IENMS0RNX0NBTl9IV1NVUCwKKwkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gKmNsb2NrZG9tYWluc19vbWFwNDR4eFtdIF9faW5pdGRhdGEgPSB7CisJJmw0X2NlZnVzZV80NHh4X2Nsa2RtLAorCSZsNF9jZmdfNDR4eF9jbGtkbSwKKwkmdGVzbGFfNDR4eF9jbGtkbSwKKwkmbDNfZ2Z4XzQ0eHhfY2xrZG0sCisJJml2YWhkXzQ0eHhfY2xrZG0sCisJJmw0X3NlY3VyZV80NHh4X2Nsa2RtLAorCSZsNF9wZXJfNDR4eF9jbGtkbSwKKwkmYWJlXzQ0eHhfY2xrZG0sCisJJmwzX2luc3RyXzQ0eHhfY2xrZG0sCisJJmwzX2luaXRfNDR4eF9jbGtkbSwKKwkmbXB1c3NfNDR4eF9jbGtkbSwKKwkmbXB1MF80NHh4X2Nsa2RtLAorCSZtcHUxXzQ0eHhfY2xrZG0sCisJJmwzX2VtaWZfNDR4eF9jbGtkbSwKKwkmbDRfYW9fNDR4eF9jbGtkbSwKKwkmZHVjYXRpXzQ0eHhfY2xrZG0sCisJJmwzXzJfNDR4eF9jbGtkbSwKKwkmbDNfMV80NHh4X2Nsa2RtLAorCSZsM19kMmRfNDR4eF9jbGtkbSwKKwkmaXNzXzQ0eHhfY2xrZG0sCisJJmwzX2Rzc180NHh4X2Nsa2RtLAorCSZsNF93a3VwXzQ0eHhfY2xrZG0sCisJJmVtdV9zeXNfNDR4eF9jbGtkbSwKKwkmbDNfZG1hXzQ0eHhfY2xrZG0sCisJTlVMTCwKK307CisKK3ZvaWQgX19pbml0IG9tYXA0NHh4X2Nsb2NrZG9tYWluc19pbml0KHZvaWQpCit7CisJY2xrZG1faW5pdChjbG9ja2RvbWFpbnNfb21hcDQ0eHgsIE5VTEwpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbS1yZWdiaXRzLTI0eHguaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvY20tcmVnYml0cy0yNHh4LmgKaW5kZXggZGE1MWNjMy4uZDcwNjYwZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbS1yZWdiaXRzLTI0eHguaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtLXJlZ2JpdHMtMjR4eC5oCkBAIC0xNCw4ICsxNCw2IEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCi0jaW5jbHVkZSAiY20uaCIKLQogLyogQml0cyBzaGFyZWQgYmV0d2VlbiByZWdpc3RlcnMgKi8KIAogLyogQ01fRkNMS0VOMV9DT1JFIGFuZCBDTV9JQ0xLRU4xX0NPUkUgc2hhcmVkIGJpdHMgKi8KQEAgLTEyNiw4ICsxMjQsMTIgQEAKICNkZWZpbmUgT01BUDI0WFhfU1RfSERRX01BU0sJCQkJKDEgPDwgMjMpCiAjZGVmaW5lIE9NQVAyNDIwX1NUX0kyQzJfU0hJRlQJCQkJMjAKICNkZWZpbmUgT01BUDI0MjBfU1RfSTJDMl9NQVNLCQkJCSgxIDw8IDIwKQorI2RlZmluZSBPTUFQMjQzMF9TVF9JMkNIUzFfU0hJRlQJCQkxOQorI2RlZmluZSBPTUFQMjQzMF9TVF9JMkNIUzFfTUFTSwkJCQkoMSA8PCAxOSkKICNkZWZpbmUgT01BUDI0MjBfU1RfSTJDMV9TSElGVAkJCQkxOQogI2RlZmluZSBPTUFQMjQyMF9TVF9JMkMxX01BU0sJCQkJKDEgPDwgMTkpCisjZGVmaW5lIE9NQVAyNDMwX1NUX0kyQ0hTMl9TSElGVAkJCTIwCisjZGVmaW5lIE9NQVAyNDMwX1NUX0kyQ0hTMl9NQVNLCQkJCSgxIDw8IDIwKQogI2RlZmluZSBPTUFQMjRYWF9TVF9NQ0JTUDJfU0hJRlQJCQkxNgogI2RlZmluZSBPTUFQMjRYWF9TVF9NQ0JTUDJfTUFTSwkJCQkoMSA8PCAxNikKICNkZWZpbmUgT01BUDI0WFhfU1RfTUNCU1AxX1NISUZUCQkJMTUKQEAgLTQzMiw0ICs0MzQsOSBAQAogI2RlZmluZSBPTUFQMjQzMF9BVVRPU1RBVEVfTURNX1NISUZUCQkJMAogI2RlZmluZSBPTUFQMjQzMF9BVVRPU1RBVEVfTURNX01BU0sJCQkoMSA8PCAwKQogCisvKiBPTUFQMjRYWCBDTV9DTEtTVENUUkxfKi5BVVRPU1RBVEVfKiByZWdpc3RlciBiaXQgdmFsdWVzICovCisjZGVmaW5lIE9NQVAyNFhYX0NMS1NUQ1RSTF9ESVNBQkxFX0FVVE8JCTB4MAorI2RlZmluZSBPTUFQMjRYWF9DTEtTVENUUkxfRU5BQkxFX0FVVE8JCTB4MQorCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbS1yZWdiaXRzLTM0eHguaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvY20tcmVnYml0cy0zNHh4LmgKaW5kZXggNGY5NTlhNy4uYjkxMjc1OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbS1yZWdiaXRzLTM0eHguaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtLXJlZ2JpdHMtMzR4eC5oCkBAIC0xNCw4ICsxNCw2IEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCi0jaW5jbHVkZSAiY20uaCIKLQogLyogQml0cyBzaGFyZWQgYmV0d2VlbiByZWdpc3RlcnMgKi8KIAogLyogQ01fRkNMS0VOMV9DT1JFIGFuZCBDTV9JQ0xLRU4xX0NPUkUgc2hhcmVkIGJpdHMgKi8KQEAgLTgwMCw0ICs3OTgsMTUgQEAKICNkZWZpbmUgT01BUDM0MzBFUzJfQ0xLQUNUSVZJVFlfVVNCSE9TVF9TSElGVAkJMAogI2RlZmluZSBPTUFQMzQzMEVTMl9DTEtBQ1RJVklUWV9VU0JIT1NUX01BU0sJCSgxIDw8IDApCiAKKy8qCisgKgorICovCisKKy8qIE9NQVAzWFhYIENNX0NMS1NUQ1RSTF8qLkNMS1RSQ1RSTF8qIHJlZ2lzdGVyIGJpdCB2YWx1ZXMgKi8KKyNkZWZpbmUgT01BUDM0WFhfQ0xLU1RDVFJMX0RJU0FCTEVfQVVUTwkJMHgwCisjZGVmaW5lIE9NQVAzNFhYX0NMS1NUQ1RSTF9GT1JDRV9TTEVFUAkJMHgxCisjZGVmaW5lIE9NQVAzNFhYX0NMS1NUQ1RSTF9GT1JDRV9XQUtFVVAJCTB4MgorI2RlZmluZSBPTUFQMzRYWF9DTEtTVENUUkxfRU5BQkxFX0FVVE8JCTB4MworCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbS1yZWdiaXRzLTQ0eHguaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvY20tcmVnYml0cy00NHh4LmgKaW5kZXggMGI3MmJlNC4uOWQ0N2EwNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbS1yZWdiaXRzLTQ0eHguaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtLXJlZ2JpdHMtNDR4eC5oCkBAIC0yMiw5ICsyMiw2IEBACiAjaWZuZGVmIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9DTV9SRUdCSVRTXzQ0WFhfSAogI2RlZmluZSBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfQ01fUkVHQklUU180NFhYX0gKIAotI2luY2x1ZGUgImNtLmgiCi0KLQogLyoKICAqIFVzZWQgYnkgQ01fTDNfMV9EWU5BTUlDREVQLCBDTV9MM18xX0RZTkFNSUNERVBfUkVTVE9SRSwgQ01fTVBVX0RZTkFNSUNERVAsCiAgKiBDTV9URVNMQV9EWU5BTUlDREVQCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyMWMzYjYuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbS5jCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoKLSAqIE9NQVAyLzMgQ00gbW9kdWxlIGZ1bmN0aW9ucwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgotICogUGF1bCBXYWxtc2xleQotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0KLSNpbmNsdWRlIDxhc20vYXRvbWljLmg+Ci0KLSNpbmNsdWRlIDxwbGF0L2NvbW1vbi5oPgotCi0jaW5jbHVkZSAiY20uaCIKLSNpbmNsdWRlICJjbS1yZWdiaXRzLTI0eHguaCIKLSNpbmNsdWRlICJjbS1yZWdiaXRzLTM0eHguaCIKLQotc3RhdGljIGNvbnN0IHU4IGNtX2lkbGVzdF9vZmZzW10gPSB7Ci0JQ01fSURMRVNUMSwgQ01fSURMRVNUMiwgT01BUDI0MzBfQ01fSURMRVNUMwotfTsKLQotLyoqCi0gKiBvbWFwMl9jbV93YWl0X2lkbGVzdF9yZWFkeSAtIHdhaXQgZm9yIGEgbW9kdWxlIHRvIGxlYXZlIGlkbGUgb3Igc3RhbmRieQotICogQHByY21fbW9kOiBQUkNNIG1vZHVsZSBvZmZzZXQKLSAqIEBpZGxlc3RfaWQ6IENNX0lETEVTVHggcmVnaXN0ZXIgSUQgKGkuZS4sIHggPSAxLCAyLCAzKQotICogQGlkbGVzdF9zaGlmdDogc2hpZnQgb2YgdGhlIGJpdCBpbiB0aGUgQ01fSURMRVNUKiByZWdpc3RlciB0byBjaGVjawotICoKLSAqIFhYWCBkb2N1bWVudAotICovCi1pbnQgb21hcDJfY21fd2FpdF9tb2R1bGVfcmVhZHkoczE2IHByY21fbW9kLCB1OCBpZGxlc3RfaWQsIHU4IGlkbGVzdF9zaGlmdCkKLXsKLQlpbnQgZW5hID0gMCwgaSA9IDA7Ci0JdTggY21faWRsZXN0X3JlZzsKLQl1MzIgbWFzazsKLQotCWlmICghaWRsZXN0X2lkIHx8IChpZGxlc3RfaWQgPiBBUlJBWV9TSVpFKGNtX2lkbGVzdF9vZmZzKSkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JY21faWRsZXN0X3JlZyA9IGNtX2lkbGVzdF9vZmZzW2lkbGVzdF9pZCAtIDFdOwotCi0JbWFzayA9IDEgPDwgaWRsZXN0X3NoaWZ0OwotCi0JaWYgKGNwdV9pc19vbWFwMjR4eCgpKQotCQllbmEgPSBtYXNrOwotCWVsc2UgaWYgKGNwdV9pc19vbWFwMzR4eCgpKQotCQllbmEgPSAwOwotCWVsc2UKLQkJQlVHKCk7Ci0KLQkvKiBYWFggc2hvdWxkIGJlIE9NQVAyIENNICovCi0Jb21hcF90ZXN0X3RpbWVvdXQoKChjbV9yZWFkX21vZF9yZWcocHJjbV9tb2QsIGNtX2lkbGVzdF9yZWcpICYgbWFzaykgPT0gZW5hKSwKLQkJCSAgTUFYX01PRFVMRV9SRUFEWV9USU1FLCBpKTsKLQotCXJldHVybiAoaSA8IE1BWF9NT0RVTEVfUkVBRFlfVElNRSkgPyAwIDogLUVCVVNZOwotfQotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtLmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtLmgKaW5kZXggYTAyY2EzMC4uYTdiYzA5NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbS5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY20uaApAQCAtMSw4ICsxLDUgQEAKLSNpZm5kZWYgX19BUkNIX0FTTV9NQUNIX09NQVAyX0NNX0gKLSNkZWZpbmUgX19BUkNIX0FTTV9NQUNIX09NQVAyX0NNX0gKLQogLyoKLSAqIE9NQVAyLzMgQ2xvY2sgTWFuYWdlbWVudCAoQ00pIHJlZ2lzdGVyIGRlZmluaXRpb25zCisgKiBPTUFQMisgQ2xvY2sgTWFuYWdlbWVudCBwcm90b3R5cGVzCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KICAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IE5va2lhIENvcnBvcmF0aW9uCkBAIC0xMywxMzYgKzEwLDggQEAKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwotCi0jaW5jbHVkZSAicHJjbS1jb21tb24uaCIKLQotI2RlZmluZSBPTUFQMjQyMF9DTV9SRUdBRERSKG1vZHVsZSwgcmVnKQkJCQlcCi0JCQlPTUFQMl9MNF9JT19BRERSRVNTKE9NQVAyNDIwX0NNX0JBU0UgKyAobW9kdWxlKSArIChyZWcpKQotI2RlZmluZSBPTUFQMjQzMF9DTV9SRUdBRERSKG1vZHVsZSwgcmVnKQkJCQlcCi0JCQlPTUFQMl9MNF9JT19BRERSRVNTKE9NQVAyNDMwX0NNX0JBU0UgKyAobW9kdWxlKSArIChyZWcpKQotI2RlZmluZSBPTUFQMzRYWF9DTV9SRUdBRERSKG1vZHVsZSwgcmVnKQkJCQlcCi0JCQlPTUFQMl9MNF9JT19BRERSRVNTKE9NQVAzNDMwX0NNX0JBU0UgKyAobW9kdWxlKSArIChyZWcpKQotI2RlZmluZSBPTUFQNDRYWF9DTTFfUkVHQUREUihtb2R1bGUsIHJlZykJCQkJXAotCQkJT01BUDJfTDRfSU9fQUREUkVTUyhPTUFQNDQzMF9DTTFfQkFTRSArIChtb2R1bGUpICsgKHJlZykpCi0jZGVmaW5lIE9NQVA0NFhYX0NNMl9SRUdBRERSKG1vZHVsZSwgcmVnKQkJCQlcCi0JCQlPTUFQMl9MNF9JT19BRERSRVNTKE9NQVA0NDMwX0NNMl9CQVNFICsgKG1vZHVsZSkgKyAocmVnKSkKLQotI2luY2x1ZGUgImNtNDR4eC5oIgotCi0vKgotICogQXJjaGl0ZWN0dXJlLXNwZWNpZmljIGdsb2JhbCBDTSByZWdpc3RlcnMKLSAqIFVzZSBjbV97cmVhZCx3cml0ZX1fcmVnKCkgd2l0aCB0aGVzZSByZWdpc3RlcnMuCi0gKiBUaGVzZSByZWdpc3RlcnMgYXBwZWFyIG9uY2UgcGVyIENNIG1vZHVsZS4KLSAqLwotCi0jZGVmaW5lIE9NQVAzNDMwX0NNX1JFVklTSU9OCQlPTUFQMzRYWF9DTV9SRUdBRERSKE9DUF9NT0QsIDB4MDAwMCkKLSNkZWZpbmUgT01BUDM0MzBfQ01fU1lTQ09ORklHCQlPTUFQMzRYWF9DTV9SRUdBRERSKE9DUF9NT0QsIDB4MDAxMCkKLSNkZWZpbmUgT01BUDM0MzBfQ01fUE9MQ1RSTAkJT01BUDM0WFhfQ01fUkVHQUREUihPQ1BfTU9ELCAweDAwOWMpCi0KLSNkZWZpbmUgT01BUDNfQ01fQ0xLT1VUX0NUUkxfT0ZGU0VUCTB4MDA3MAotI2RlZmluZSBPTUFQMzQzMF9DTV9DTEtPVVRfQ1RSTAkJT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0NDUl9NT0QsIDB4MDA3MCkKLQotLyoKLSAqIE1vZHVsZSBzcGVjaWZpYyBDTSByZWdpc3RlcnMgZnJvbSBDTV9CQVNFICsgZG9tYWluIG9mZnNldAotICogVXNlIGNtX3tyZWFkLHdyaXRlfV9tb2RfcmVnKCkgd2l0aCB0aGVzZSByZWdpc3RlcnMuCi0gKiBUaGVzZSByZWdpc3RlciBvZmZzZXRzIGdlbmVyYWxseSBhcHBlYXIgaW4gbW9yZSB0aGFuIG9uZSBQUkNNIHN1Ym1vZHVsZS4KLSAqLwotCi0vKiBDb21tb24gYmV0d2VlbiAyNHh4IGFuZCAzNHh4ICovCi0KLSNkZWZpbmUgQ01fRkNMS0VOCQkJCQkweDAwMDAKLSNkZWZpbmUgQ01fRkNMS0VOMQkJCQkJQ01fRkNMS0VOCi0jZGVmaW5lIENNX0NMS0VOCQkJCQlDTV9GQ0xLRU4KLSNkZWZpbmUgQ01fSUNMS0VOCQkJCQkweDAwMTAKLSNkZWZpbmUgQ01fSUNMS0VOMQkJCQkJQ01fSUNMS0VOCi0jZGVmaW5lIENNX0lDTEtFTjIJCQkJCTB4MDAxNAotI2RlZmluZSBDTV9JQ0xLRU4zCQkJCQkweDAwMTgKLSNkZWZpbmUgQ01fSURMRVNUCQkJCQkweDAwMjAKLSNkZWZpbmUgQ01fSURMRVNUMQkJCQkJQ01fSURMRVNUCi0jZGVmaW5lIENNX0lETEVTVDIJCQkJCTB4MDAyNAotI2RlZmluZSBDTV9BVVRPSURMRQkJCQkJMHgwMDMwCi0jZGVmaW5lIENNX0FVVE9JRExFMQkJCQkJQ01fQVVUT0lETEUKLSNkZWZpbmUgQ01fQVVUT0lETEUyCQkJCQkweDAwMzQKLSNkZWZpbmUgQ01fQVVUT0lETEUzCQkJCQkweDAwMzgKLSNkZWZpbmUgQ01fQ0xLU0VMCQkJCQkweDAwNDAKLSNkZWZpbmUgQ01fQ0xLU0VMMQkJCQkJQ01fQ0xLU0VMCi0jZGVmaW5lIENNX0NMS1NFTDIJCQkJCTB4MDA0NAotI2RlZmluZSBPTUFQMl9DTV9DTEtTVENUUkwJCQkJMHgwMDQ4Ci0jZGVmaW5lIE9NQVA0X0NNX0NMS1NUQ1RSTAkJCQkweDAwMDAKLQotCi0vKiBBcmNoaXRlY3R1cmUtc3BlY2lmaWMgcmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgT01BUDI0WFhfQ01fRkNMS0VOMgkJCQkweDAwMDQKLSNkZWZpbmUgT01BUDI0WFhfQ01fSUNMS0VONAkJCQkweDAwMWMKLSNkZWZpbmUgT01BUDI0WFhfQ01fQVVUT0lETEU0CQkJCTB4MDAzYwotCi0jZGVmaW5lIE9NQVAyNDMwX0NNX0lETEVTVDMJCQkJMHgwMDI4Ci0KLSNkZWZpbmUgT01BUDM0MzBfQ01fQ0xLRU5fUExMCQkJCTB4MDAwNAotI2RlZmluZSBPTUFQMzQzMEVTMl9DTV9DTEtFTjIJCQkJMHgwMDA0Ci0jZGVmaW5lIE9NQVAzNDMwRVMyX0NNX0ZDTEtFTjMJCQkJMHgwMDA4Ci0jZGVmaW5lIE9NQVAzNDMwX0NNX0lETEVTVF9QTEwJCQkJQ01fSURMRVNUMgotI2RlZmluZSBPTUFQMzQzMF9DTV9BVVRPSURMRV9QTEwJCQlDTV9BVVRPSURMRTIKLSNkZWZpbmUgT01BUDM0MzBFUzJfQ01fQVVUT0lETEUyX1BMTAkJCUNNX0FVVE9JRExFMgotI2RlZmluZSBPTUFQMzQzMF9DTV9DTEtTRUwxCQkJCUNNX0NMS1NFTAotI2RlZmluZSBPTUFQMzQzMF9DTV9DTEtTRUwxX1BMTAkJCQlDTV9DTEtTRUwKLSNkZWZpbmUgT01BUDM0MzBfQ01fQ0xLU0VMMl9QTEwJCQkJQ01fQ0xLU0VMMgotI2RlZmluZSBPTUFQMzQzMF9DTV9TTEVFUERFUAkJCQlDTV9DTEtTRUwyCi0jZGVmaW5lIE9NQVAzNDMwX0NNX0NMS1NFTDMJCQkJT01BUDJfQ01fQ0xLU1RDVFJMCi0jZGVmaW5lIE9NQVAzNDMwX0NNX0NMS1NUU1QJCQkJMHgwMDRjCi0jZGVmaW5lIE9NQVAzNDMwRVMyX0NNX0NMS1NFTDQJCQkJMHgwMDRjCi0jZGVmaW5lIE9NQVAzNDMwRVMyX0NNX0NMS1NFTDUJCQkJMHgwMDUwCi0jZGVmaW5lIE9NQVAzNDMwX0NNX0NMS1NFTDJfRU1VCQkJCTB4MDA1MAotI2RlZmluZSBPTUFQMzQzMF9DTV9DTEtTRUwzX0VNVQkJCQkweDAwNTQKLQotLyogQ00yLkNFRlVTRV9DTTIgcmVnaXN0ZXIgb2Zmc2V0cyAqLwotCi0vKiBPTUFQNCBtb2R1bGVtb2RlIGNvbnRyb2wgKi8KLSNkZWZpbmUgT01BUDQ0MzBfTU9EVUxFTU9ERV9IV0NUUkwJCQkwCi0jZGVmaW5lIE9NQVA0NDMwX01PRFVMRU1PREVfU1dDVFJMCQkJMQotCi0vKiBDbG9jayBtYW5hZ2VtZW50IGRvbWFpbiByZWdpc3RlciBnZXQvc2V0ICovCi0KLSNpZm5kZWYgX19BU1NFTUJMRVJfXwotCi1leHRlcm4gdTMyIGNtX3JlYWRfbW9kX3JlZyhzMTYgbW9kdWxlLCB1MTYgaWR4KTsKLWV4dGVybiB2b2lkIGNtX3dyaXRlX21vZF9yZWcodTMyIHZhbCwgczE2IG1vZHVsZSwgdTE2IGlkeCk7Ci1leHRlcm4gdTMyIGNtX3Jtd19tb2RfcmVnX2JpdHModTMyIG1hc2ssIHUzMiBiaXRzLCBzMTYgbW9kdWxlLCBzMTYgaWR4KTsKLQotZXh0ZXJuIGludCBvbWFwMl9jbV93YWl0X21vZHVsZV9yZWFkeShzMTYgcHJjbV9tb2QsIHU4IGlkbGVzdF9pZCwKLQkJCQkgICAgICB1OCBpZGxlc3Rfc2hpZnQpOwotZXh0ZXJuIGludCBvbWFwNF9jbV93YWl0X21vZHVsZV9yZWFkeSh2b2lkIF9faW9tZW0gKmNsa2N0cmxfcmVnKTsKLQotc3RhdGljIGlubGluZSB1MzIgY21fc2V0X21vZF9yZWdfYml0cyh1MzIgYml0cywgczE2IG1vZHVsZSwgczE2IGlkeCkKLXsKLQlyZXR1cm4gY21fcm13X21vZF9yZWdfYml0cyhiaXRzLCBiaXRzLCBtb2R1bGUsIGlkeCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTMyIGNtX2NsZWFyX21vZF9yZWdfYml0cyh1MzIgYml0cywgczE2IG1vZHVsZSwgczE2IGlkeCkKLXsKLQlyZXR1cm4gY21fcm13X21vZF9yZWdfYml0cyhiaXRzLCAweDAsIG1vZHVsZSwgaWR4KTsKLX0KLQotI2VuZGlmCi0KLS8qIENNIHJlZ2lzdGVyIGJpdHMgc2hhcmVkIGJldHdlZW4gMjRYWCBhbmQgMzQzMCAqLwotCi0vKiBDTV9DTEtTRUxfR0ZYICovCi0jZGVmaW5lIE9NQVBfQ0xLU0VMX0dGWF9TSElGVAkJCQkwCi0jZGVmaW5lIE9NQVBfQ0xLU0VMX0dGWF9NQVNLCQkJCSgweDcgPDwgMCkKLQotLyogQ01fSUNMS0VOX0dGWCAqLwotI2RlZmluZSBPTUFQX0VOX0dGWF9TSElGVAkJCQkwCi0jZGVmaW5lIE9NQVBfRU5fR0ZYX01BU0sJCQkJKDEgPDwgMCkKLQotLyogQ01fSURMRVNUX0dGWCAqLwotI2RlZmluZSBPTUFQX1NUX0dGWF9NQVNLCQkJCSgxIDw8IDApCi0KLQotLyogQ01fSURMRVNUIGluZGljYXRvciAqLwotI2RlZmluZSBPTUFQMjRYWF9DTV9JRExFU1RfVkFMCQkwCi0jZGVmaW5lIE9NQVAzNFhYX0NNX0lETEVTVF9WQUwJCTEKKyNpZm5kZWYgX19BUkNIX0FTTV9NQUNIX09NQVAyX0NNX0gKKyNkZWZpbmUgX19BUkNIX0FTTV9NQUNIX09NQVAyX0NNX0gKIAogLyoKICAqIE1BWF9NT0RVTEVfUkVBRFlfVElNRTogbWF4IGR1cmF0aW9uIGluIG1pY3Jvc2Vjb25kcyB0byB3YWl0IGZvciB0aGUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY20xXzQ0eHguaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvY20xXzQ0eHguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmQ3YTU2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTFfNDR4eC5oCkBAIC0wLDAgKzEsMjYxIEBACisvKgorICogT01BUDQ0eHggQ00xIGluc3RhbmNlIG9mZnNldCBtYWNyb3MKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBQYXVsIFdhbG1zbGV5IChwYXVsQHB3c2FuLmNvbSkKKyAqIFJhamVuZHJhIE5heWFrIChybmF5YWtAdGkuY29tKQorICogQmVub2l0IENvdXNzb24gKGItY291c3NvbkB0aS5jb20pCisgKgorICogVGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdGhlIE9NQVAgaGFyZHdhcmUgZGF0YWJhc2VzLgorICogV2UgcmVzcGVjdGZ1bGx5IGFzayB0aGF0IGFueSBtb2RpZmljYXRpb25zIHRvIHRoaXMgZmlsZSBiZSBjb29yZGluYXRlZAorICogd2l0aCB0aGUgcHVibGljIGxpbnV4LW9tYXBAdmdlci5rZXJuZWwub3JnIG1haWxpbmcgbGlzdCBhbmQgdGhlCisgKiBhdXRob3JzIGFib3ZlIHRvIGVuc3VyZSB0aGF0IHRoZSBhdXRvZ2VuZXJhdGlvbiBzY3JpcHRzIGFyZSBrZXB0CisgKiB1cC10by1kYXRlIHdpdGggdGhlIGZpbGUgY29udGVudHMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBYWFggVGhpcyBmaWxlIG5lZWRzIHRvIGJlIHVwZGF0ZWQgdG8gYWxpZ24gb24gb25lIG9mICJPTUFQNCIsICJPTUFQNDRYWCIsCisgKiAgICAgb3IgIk9NQVA0NDMwIi4KKyAqLworCisjaWZuZGVmIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9DTTFfNDRYWF9ICisjZGVmaW5lIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9DTTFfNDRYWF9ICisKKy8qIENNMSBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgT01BUDQ0MzBfQ00xX0JBU0UJCTB4NGEwMDQwMDAKKworI2RlZmluZSBPTUFQNDRYWF9DTTFfUkVHQUREUihpbnN0LCByZWcpCQkJCVwKKwlPTUFQMl9MNF9JT19BRERSRVNTKE9NQVA0NDMwX0NNMV9CQVNFICsgKGluc3QpICsgKHJlZykpCisKKy8qIENNMSBpbnN0YW5jZXMgKi8KKyNkZWZpbmUgT01BUDQ0MzBfQ00xX09DUF9TT0NLRVRfSU5TVAkweDAwMDAKKyNkZWZpbmUgT01BUDQ0MzBfQ00xX0NLR0VOX0lOU1QJCTB4MDEwMAorI2RlZmluZSBPTUFQNDQzMF9DTTFfTVBVX0lOU1QJCTB4MDMwMAorI2RlZmluZSBPTUFQNDQzMF9DTTFfVEVTTEFfSU5TVAkJMHgwNDAwCisjZGVmaW5lIE9NQVA0NDMwX0NNMV9BQkVfSU5TVAkJMHgwNTAwCisjZGVmaW5lIE9NQVA0NDMwX0NNMV9SRVNUT1JFX0lOU1QJMHgwZTAwCisjZGVmaW5lIE9NQVA0NDMwX0NNMV9JTlNUUl9JTlNUCQkweDBmMDAKKworLyogQ00xIGNsb2NrZG9tYWluIHJlZ2lzdGVyIG9mZnNldHMgKGZyb20gaW5zdGFuY2Ugc3RhcnQpICovCisjZGVmaW5lIE9NQVA0NDMwX0NNMV9BQkVfQUJFX0NET0ZGUwkJMHgwMDAwCisjZGVmaW5lIE9NQVA0NDMwX0NNMV9NUFVfTVBVX0NET0ZGUwkJMHgwMDAwCisjZGVmaW5lIE9NQVA0NDMwX0NNMV9URVNMQV9URVNMQV9DRE9GRlMJCTB4MDAwMAorCisvKiBDTTEgKi8KKworLyogQ00xLk9DUF9TT0NLRVRfQ00xIHJlZ2lzdGVyIG9mZnNldHMgKi8KKyNkZWZpbmUgT01BUDRfUkVWSVNJT05fQ00xX09GRlNFVAkJCTB4MDAwMAorI2RlZmluZSBPTUFQNDQzMF9SRVZJU0lPTl9DTTEJCQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX09DUF9TT0NLRVRfSU5TVCwgMHgwMDAwKQorI2RlZmluZSBPTUFQNF9DTV9DTTFfUFJPRklMSU5HX0NMS0NUUkxfT0ZGU0VUCQkweDAwNDAKKyNkZWZpbmUgT01BUDQ0MzBfQ01fQ00xX1BST0ZJTElOR19DTEtDVFJMCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfT0NQX1NPQ0tFVF9JTlNULCAweDAwNDApCisKKy8qIENNMS5DS0dFTl9DTTEgcmVnaXN0ZXIgb2Zmc2V0cyAqLworI2RlZmluZSBPTUFQNF9DTV9DTEtTRUxfQ09SRV9PRkZTRVQJCQkweDAwMDAKKyNkZWZpbmUgT01BUDQ0MzBfQ01fQ0xLU0VMX0NPUkUJCQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0NLR0VOX0lOU1QsIDB4MDAwMCkKKyNkZWZpbmUgT01BUDRfQ01fQ0xLU0VMX0FCRV9PRkZTRVQJCQkweDAwMDgKKyNkZWZpbmUgT01BUDQ0MzBfQ01fQ0xLU0VMX0FCRQkJCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQ0tHRU5fSU5TVCwgMHgwMDA4KQorI2RlZmluZSBPTUFQNF9DTV9ETExfQ1RSTF9PRkZTRVQJCQkweDAwMTAKKyNkZWZpbmUgT01BUDQ0MzBfQ01fRExMX0NUUkwJCQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0NLR0VOX0lOU1QsIDB4MDAxMCkKKyNkZWZpbmUgT01BUDRfQ01fQ0xLTU9ERV9EUExMX0NPUkVfT0ZGU0VUCQkweDAwMjAKKyNkZWZpbmUgT01BUDQ0MzBfQ01fQ0xLTU9ERV9EUExMX0NPUkUJCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQ0tHRU5fSU5TVCwgMHgwMDIwKQorI2RlZmluZSBPTUFQNF9DTV9JRExFU1RfRFBMTF9DT1JFX09GRlNFVAkJMHgwMDI0CisjZGVmaW5lIE9NQVA0NDMwX0NNX0lETEVTVF9EUExMX0NPUkUJCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQ0tHRU5fSU5TVCwgMHgwMDI0KQorI2RlZmluZSBPTUFQNF9DTV9BVVRPSURMRV9EUExMX0NPUkVfT0ZGU0VUCQkweDAwMjgKKyNkZWZpbmUgT01BUDQ0MzBfQ01fQVVUT0lETEVfRFBMTF9DT1JFCQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0NLR0VOX0lOU1QsIDB4MDAyOCkKKyNkZWZpbmUgT01BUDRfQ01fQ0xLU0VMX0RQTExfQ09SRV9PRkZTRVQJCTB4MDAyYworI2RlZmluZSBPTUFQNDQzMF9DTV9DTEtTRUxfRFBMTF9DT1JFCQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0NLR0VOX0lOU1QsIDB4MDAyYykKKyNkZWZpbmUgT01BUDRfQ01fRElWX00yX0RQTExfQ09SRV9PRkZTRVQJCTB4MDAzMAorI2RlZmluZSBPTUFQNDQzMF9DTV9ESVZfTTJfRFBMTF9DT1JFCQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0NLR0VOX0lOU1QsIDB4MDAzMCkKKyNkZWZpbmUgT01BUDRfQ01fRElWX00zX0RQTExfQ09SRV9PRkZTRVQJCTB4MDAzNAorI2RlZmluZSBPTUFQNDQzMF9DTV9ESVZfTTNfRFBMTF9DT1JFCQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0NLR0VOX0lOU1QsIDB4MDAzNCkKKyNkZWZpbmUgT01BUDRfQ01fRElWX000X0RQTExfQ09SRV9PRkZTRVQJCTB4MDAzOAorI2RlZmluZSBPTUFQNDQzMF9DTV9ESVZfTTRfRFBMTF9DT1JFCQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0NLR0VOX0lOU1QsIDB4MDAzOCkKKyNkZWZpbmUgT01BUDRfQ01fRElWX001X0RQTExfQ09SRV9PRkZTRVQJCTB4MDAzYworI2RlZmluZSBPTUFQNDQzMF9DTV9ESVZfTTVfRFBMTF9DT1JFCQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0NLR0VOX0lOU1QsIDB4MDAzYykKKyNkZWZpbmUgT01BUDRfQ01fRElWX002X0RQTExfQ09SRV9PRkZTRVQJCTB4MDA0MAorI2RlZmluZSBPTUFQNDQzMF9DTV9ESVZfTTZfRFBMTF9DT1JFCQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0NLR0VOX0lOU1QsIDB4MDA0MCkKKyNkZWZpbmUgT01BUDRfQ01fRElWX003X0RQTExfQ09SRV9PRkZTRVQJCTB4MDA0NAorI2RlZmluZSBPTUFQNDQzMF9DTV9ESVZfTTdfRFBMTF9DT1JFCQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0NLR0VOX0lOU1QsIDB4MDA0NCkKKyNkZWZpbmUgT01BUDRfQ01fU1NDX0RFTFRBTVNURVBfRFBMTF9DT1JFX09GRlNFVAkweDAwNDgKKyNkZWZpbmUgT01BUDQ0MzBfQ01fU1NDX0RFTFRBTVNURVBfRFBMTF9DT1JFCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQ0tHRU5fSU5TVCwgMHgwMDQ4KQorI2RlZmluZSBPTUFQNF9DTV9TU0NfSU5TVEZSRVFESVZfRFBMTF9DT1JFX09GRlNFVAkweDAwNGMKKyNkZWZpbmUgT01BUDQ0MzBfQ01fU1NDX0lOU1RGUkVRRElWX0RQTExfQ09SRQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0NLR0VOX0lOU1QsIDB4MDA0YykKKyNkZWZpbmUgT01BUDRfQ01fRU1VX09WRVJSSURFX0RQTExfQ09SRV9PRkZTRVQJCTB4MDA1MAorI2RlZmluZSBPTUFQNDQzMF9DTV9FTVVfT1ZFUlJJREVfRFBMTF9DT1JFCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQ0tHRU5fSU5TVCwgMHgwMDUwKQorI2RlZmluZSBPTUFQNF9DTV9DTEtNT0RFX0RQTExfTVBVX09GRlNFVAkJMHgwMDYwCisjZGVmaW5lIE9NQVA0NDMwX0NNX0NMS01PREVfRFBMTF9NUFUJCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQ0tHRU5fSU5TVCwgMHgwMDYwKQorI2RlZmluZSBPTUFQNF9DTV9JRExFU1RfRFBMTF9NUFVfT0ZGU0VUCQkJMHgwMDY0CisjZGVmaW5lIE9NQVA0NDMwX0NNX0lETEVTVF9EUExMX01QVQkJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9DS0dFTl9JTlNULCAweDAwNjQpCisjZGVmaW5lIE9NQVA0X0NNX0FVVE9JRExFX0RQTExfTVBVX09GRlNFVAkJMHgwMDY4CisjZGVmaW5lIE9NQVA0NDMwX0NNX0FVVE9JRExFX0RQTExfTVBVCQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0NLR0VOX0lOU1QsIDB4MDA2OCkKKyNkZWZpbmUgT01BUDRfQ01fQ0xLU0VMX0RQTExfTVBVX09GRlNFVAkJCTB4MDA2YworI2RlZmluZSBPTUFQNDQzMF9DTV9DTEtTRUxfRFBMTF9NUFUJCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQ0tHRU5fSU5TVCwgMHgwMDZjKQorI2RlZmluZSBPTUFQNF9DTV9ESVZfTTJfRFBMTF9NUFVfT0ZGU0VUCQkJMHgwMDcwCisjZGVmaW5lIE9NQVA0NDMwX0NNX0RJVl9NMl9EUExMX01QVQkJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9DS0dFTl9JTlNULCAweDAwNzApCisjZGVmaW5lIE9NQVA0X0NNX1NTQ19ERUxUQU1TVEVQX0RQTExfTVBVX09GRlNFVAkJMHgwMDg4CisjZGVmaW5lIE9NQVA0NDMwX0NNX1NTQ19ERUxUQU1TVEVQX0RQTExfTVBVCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQ0tHRU5fSU5TVCwgMHgwMDg4KQorI2RlZmluZSBPTUFQNF9DTV9TU0NfSU5TVEZSRVFESVZfRFBMTF9NUFVfT0ZGU0VUCQkweDAwOGMKKyNkZWZpbmUgT01BUDQ0MzBfQ01fU1NDX0lOU1RGUkVRRElWX0RQTExfTVBVCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQ0tHRU5fSU5TVCwgMHgwMDhjKQorI2RlZmluZSBPTUFQNF9DTV9CWVBDTEtfRFBMTF9NUFVfT0ZGU0VUCQkJMHgwMDljCisjZGVmaW5lIE9NQVA0NDMwX0NNX0JZUENMS19EUExMX01QVQkJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9DS0dFTl9JTlNULCAweDAwOWMpCisjZGVmaW5lIE9NQVA0X0NNX0NMS01PREVfRFBMTF9JVkFfT0ZGU0VUCQkweDAwYTAKKyNkZWZpbmUgT01BUDQ0MzBfQ01fQ0xLTU9ERV9EUExMX0lWQQkJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9DS0dFTl9JTlNULCAweDAwYTApCisjZGVmaW5lIE9NQVA0X0NNX0lETEVTVF9EUExMX0lWQV9PRkZTRVQJCQkweDAwYTQKKyNkZWZpbmUgT01BUDQ0MzBfQ01fSURMRVNUX0RQTExfSVZBCQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0NLR0VOX0lOU1QsIDB4MDBhNCkKKyNkZWZpbmUgT01BUDRfQ01fQVVUT0lETEVfRFBMTF9JVkFfT0ZGU0VUCQkweDAwYTgKKyNkZWZpbmUgT01BUDQ0MzBfQ01fQVVUT0lETEVfRFBMTF9JVkEJCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQ0tHRU5fSU5TVCwgMHgwMGE4KQorI2RlZmluZSBPTUFQNF9DTV9DTEtTRUxfRFBMTF9JVkFfT0ZGU0VUCQkJMHgwMGFjCisjZGVmaW5lIE9NQVA0NDMwX0NNX0NMS1NFTF9EUExMX0lWQQkJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9DS0dFTl9JTlNULCAweDAwYWMpCisjZGVmaW5lIE9NQVA0X0NNX0RJVl9NNF9EUExMX0lWQV9PRkZTRVQJCQkweDAwYjgKKyNkZWZpbmUgT01BUDQ0MzBfQ01fRElWX000X0RQTExfSVZBCQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0NLR0VOX0lOU1QsIDB4MDBiOCkKKyNkZWZpbmUgT01BUDRfQ01fRElWX001X0RQTExfSVZBX09GRlNFVAkJCTB4MDBiYworI2RlZmluZSBPTUFQNDQzMF9DTV9ESVZfTTVfRFBMTF9JVkEJCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQ0tHRU5fSU5TVCwgMHgwMGJjKQorI2RlZmluZSBPTUFQNF9DTV9TU0NfREVMVEFNU1RFUF9EUExMX0lWQV9PRkZTRVQJCTB4MDBjOAorI2RlZmluZSBPTUFQNDQzMF9DTV9TU0NfREVMVEFNU1RFUF9EUExMX0lWQQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0NLR0VOX0lOU1QsIDB4MDBjOCkKKyNkZWZpbmUgT01BUDRfQ01fU1NDX0lOU1RGUkVRRElWX0RQTExfSVZBX09GRlNFVAkJMHgwMGNjCisjZGVmaW5lIE9NQVA0NDMwX0NNX1NTQ19JTlNURlJFUURJVl9EUExMX0lWQQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0NLR0VOX0lOU1QsIDB4MDBjYykKKyNkZWZpbmUgT01BUDRfQ01fQllQQ0xLX0RQTExfSVZBX09GRlNFVAkJCTB4MDBkYworI2RlZmluZSBPTUFQNDQzMF9DTV9CWVBDTEtfRFBMTF9JVkEJCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQ0tHRU5fSU5TVCwgMHgwMGRjKQorI2RlZmluZSBPTUFQNF9DTV9DTEtNT0RFX0RQTExfQUJFX09GRlNFVAkJMHgwMGUwCisjZGVmaW5lIE9NQVA0NDMwX0NNX0NMS01PREVfRFBMTF9BQkUJCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQ0tHRU5fSU5TVCwgMHgwMGUwKQorI2RlZmluZSBPTUFQNF9DTV9JRExFU1RfRFBMTF9BQkVfT0ZGU0VUCQkJMHgwMGU0CisjZGVmaW5lIE9NQVA0NDMwX0NNX0lETEVTVF9EUExMX0FCRQkJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9DS0dFTl9JTlNULCAweDAwZTQpCisjZGVmaW5lIE9NQVA0X0NNX0FVVE9JRExFX0RQTExfQUJFX09GRlNFVAkJMHgwMGU4CisjZGVmaW5lIE9NQVA0NDMwX0NNX0FVVE9JRExFX0RQTExfQUJFCQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0NLR0VOX0lOU1QsIDB4MDBlOCkKKyNkZWZpbmUgT01BUDRfQ01fQ0xLU0VMX0RQTExfQUJFX09GRlNFVAkJCTB4MDBlYworI2RlZmluZSBPTUFQNDQzMF9DTV9DTEtTRUxfRFBMTF9BQkUJCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQ0tHRU5fSU5TVCwgMHgwMGVjKQorI2RlZmluZSBPTUFQNF9DTV9ESVZfTTJfRFBMTF9BQkVfT0ZGU0VUCQkJMHgwMGYwCisjZGVmaW5lIE9NQVA0NDMwX0NNX0RJVl9NMl9EUExMX0FCRQkJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9DS0dFTl9JTlNULCAweDAwZjApCisjZGVmaW5lIE9NQVA0X0NNX0RJVl9NM19EUExMX0FCRV9PRkZTRVQJCQkweDAwZjQKKyNkZWZpbmUgT01BUDQ0MzBfQ01fRElWX00zX0RQTExfQUJFCQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0NLR0VOX0lOU1QsIDB4MDBmNCkKKyNkZWZpbmUgT01BUDRfQ01fU1NDX0RFTFRBTVNURVBfRFBMTF9BQkVfT0ZGU0VUCQkweDAxMDgKKyNkZWZpbmUgT01BUDQ0MzBfQ01fU1NDX0RFTFRBTVNURVBfRFBMTF9BQkUJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9DS0dFTl9JTlNULCAweDAxMDgpCisjZGVmaW5lIE9NQVA0X0NNX1NTQ19JTlNURlJFUURJVl9EUExMX0FCRV9PRkZTRVQJCTB4MDEwYworI2RlZmluZSBPTUFQNDQzMF9DTV9TU0NfSU5TVEZSRVFESVZfRFBMTF9BQkUJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9DS0dFTl9JTlNULCAweDAxMGMpCisjZGVmaW5lIE9NQVA0X0NNX0NMS01PREVfRFBMTF9ERFJQSFlfT0ZGU0VUCQkweDAxMjAKKyNkZWZpbmUgT01BUDQ0MzBfQ01fQ0xLTU9ERV9EUExMX0REUlBIWQkJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9DS0dFTl9JTlNULCAweDAxMjApCisjZGVmaW5lIE9NQVA0X0NNX0lETEVTVF9EUExMX0REUlBIWV9PRkZTRVQJCTB4MDEyNAorI2RlZmluZSBPTUFQNDQzMF9DTV9JRExFU1RfRFBMTF9ERFJQSFkJCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQ0tHRU5fSU5TVCwgMHgwMTI0KQorI2RlZmluZSBPTUFQNF9DTV9BVVRPSURMRV9EUExMX0REUlBIWV9PRkZTRVQJCTB4MDEyOAorI2RlZmluZSBPTUFQNDQzMF9DTV9BVVRPSURMRV9EUExMX0REUlBIWQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0NLR0VOX0lOU1QsIDB4MDEyOCkKKyNkZWZpbmUgT01BUDRfQ01fQ0xLU0VMX0RQTExfRERSUEhZX09GRlNFVAkJMHgwMTJjCisjZGVmaW5lIE9NQVA0NDMwX0NNX0NMS1NFTF9EUExMX0REUlBIWQkJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9DS0dFTl9JTlNULCAweDAxMmMpCisjZGVmaW5lIE9NQVA0X0NNX0RJVl9NMl9EUExMX0REUlBIWV9PRkZTRVQJCTB4MDEzMAorI2RlZmluZSBPTUFQNDQzMF9DTV9ESVZfTTJfRFBMTF9ERFJQSFkJCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQ0tHRU5fSU5TVCwgMHgwMTMwKQorI2RlZmluZSBPTUFQNF9DTV9ESVZfTTRfRFBMTF9ERFJQSFlfT0ZGU0VUCQkweDAxMzgKKyNkZWZpbmUgT01BUDQ0MzBfQ01fRElWX000X0RQTExfRERSUEhZCQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0NLR0VOX0lOU1QsIDB4MDEzOCkKKyNkZWZpbmUgT01BUDRfQ01fRElWX001X0RQTExfRERSUEhZX09GRlNFVAkJMHgwMTNjCisjZGVmaW5lIE9NQVA0NDMwX0NNX0RJVl9NNV9EUExMX0REUlBIWQkJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9DS0dFTl9JTlNULCAweDAxM2MpCisjZGVmaW5lIE9NQVA0X0NNX0RJVl9NNl9EUExMX0REUlBIWV9PRkZTRVQJCTB4MDE0MAorI2RlZmluZSBPTUFQNDQzMF9DTV9ESVZfTTZfRFBMTF9ERFJQSFkJCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQ0tHRU5fSU5TVCwgMHgwMTQwKQorI2RlZmluZSBPTUFQNF9DTV9TU0NfREVMVEFNU1RFUF9EUExMX0REUlBIWV9PRkZTRVQJMHgwMTQ4CisjZGVmaW5lIE9NQVA0NDMwX0NNX1NTQ19ERUxUQU1TVEVQX0RQTExfRERSUEhZCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQ0tHRU5fSU5TVCwgMHgwMTQ4KQorI2RlZmluZSBPTUFQNF9DTV9TU0NfSU5TVEZSRVFESVZfRFBMTF9ERFJQSFlfT0ZGU0VUCTB4MDE0YworI2RlZmluZSBPTUFQNDQzMF9DTV9TU0NfSU5TVEZSRVFESVZfRFBMTF9ERFJQSFkJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9DS0dFTl9JTlNULCAweDAxNGMpCisjZGVmaW5lIE9NQVA0X0NNX1NIQURPV19GUkVRX0NPTkZJRzFfT0ZGU0VUCQkweDAxNjAKKyNkZWZpbmUgT01BUDQ0MzBfQ01fU0hBRE9XX0ZSRVFfQ09ORklHMQkJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9DS0dFTl9JTlNULCAweDAxNjApCisjZGVmaW5lIE9NQVA0X0NNX1NIQURPV19GUkVRX0NPTkZJRzJfT0ZGU0VUCQkweDAxNjQKKyNkZWZpbmUgT01BUDQ0MzBfQ01fU0hBRE9XX0ZSRVFfQ09ORklHMgkJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9DS0dFTl9JTlNULCAweDAxNjQpCisjZGVmaW5lIE9NQVA0X0NNX0RZTl9ERVBfUFJFU0NBTF9PRkZTRVQJCQkweDAxNzAKKyNkZWZpbmUgT01BUDQ0MzBfQ01fRFlOX0RFUF9QUkVTQ0FMCQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0NLR0VOX0lOU1QsIDB4MDE3MCkKKyNkZWZpbmUgT01BUDRfQ01fUkVTVE9SRV9TVF9PRkZTRVQJCQkweDAxODAKKyNkZWZpbmUgT01BUDQ0MzBfQ01fUkVTVE9SRV9TVAkJCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQ0tHRU5fSU5TVCwgMHgwMTgwKQorCisvKiBDTTEuTVBVX0NNMSByZWdpc3RlciBvZmZzZXRzICovCisjZGVmaW5lIE9NQVA0X0NNX01QVV9DTEtTVENUUkxfT0ZGU0VUCQkJMHgwMDAwCisjZGVmaW5lIE9NQVA0NDMwX0NNX01QVV9DTEtTVENUUkwJCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfTVBVX0lOU1QsIDB4MDAwMCkKKyNkZWZpbmUgT01BUDRfQ01fTVBVX1NUQVRJQ0RFUF9PRkZTRVQJCQkweDAwMDQKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTVBVX1NUQVRJQ0RFUAkJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9NUFVfSU5TVCwgMHgwMDA0KQorI2RlZmluZSBPTUFQNF9DTV9NUFVfRFlOQU1JQ0RFUF9PRkZTRVQJCQkweDAwMDgKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTVBVX0RZTkFNSUNERVAJCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfTVBVX0lOU1QsIDB4MDAwOCkKKyNkZWZpbmUgT01BUDRfQ01fTVBVX01QVV9DTEtDVFJMX09GRlNFVAkJCTB4MDAyMAorI2RlZmluZSBPTUFQNDQzMF9DTV9NUFVfTVBVX0NMS0NUUkwJCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfTVBVX0lOU1QsIDB4MDAyMCkKKworLyogQ00xLlRFU0xBX0NNMSByZWdpc3RlciBvZmZzZXRzICovCisjZGVmaW5lIE9NQVA0X0NNX1RFU0xBX0NMS1NUQ1RSTF9PRkZTRVQJCQkweDAwMDAKKyNkZWZpbmUgT01BUDQ0MzBfQ01fVEVTTEFfQ0xLU1RDVFJMCQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX1RFU0xBX0lOU1QsIDB4MDAwMCkKKyNkZWZpbmUgT01BUDRfQ01fVEVTTEFfU1RBVElDREVQX09GRlNFVAkJCTB4MDAwNAorI2RlZmluZSBPTUFQNDQzMF9DTV9URVNMQV9TVEFUSUNERVAJCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfVEVTTEFfSU5TVCwgMHgwMDA0KQorI2RlZmluZSBPTUFQNF9DTV9URVNMQV9EWU5BTUlDREVQX09GRlNFVAkJMHgwMDA4CisjZGVmaW5lIE9NQVA0NDMwX0NNX1RFU0xBX0RZTkFNSUNERVAJCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfVEVTTEFfSU5TVCwgMHgwMDA4KQorI2RlZmluZSBPTUFQNF9DTV9URVNMQV9URVNMQV9DTEtDVFJMX09GRlNFVAkJMHgwMDIwCisjZGVmaW5lIE9NQVA0NDMwX0NNX1RFU0xBX1RFU0xBX0NMS0NUUkwJCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfVEVTTEFfSU5TVCwgMHgwMDIwKQorCisvKiBDTTEuQUJFX0NNMSByZWdpc3RlciBvZmZzZXRzICovCisjZGVmaW5lIE9NQVA0X0NNMV9BQkVfQ0xLU1RDVFJMX09GRlNFVAkJCTB4MDAwMAorI2RlZmluZSBPTUFQNDQzMF9DTTFfQUJFX0NMS1NUQ1RSTAkJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9BQkVfSU5TVCwgMHgwMDAwKQorI2RlZmluZSBPTUFQNF9DTTFfQUJFX0w0QUJFX0NMS0NUUkxfT0ZGU0VUCQkweDAwMjAKKyNkZWZpbmUgT01BUDQ0MzBfQ00xX0FCRV9MNEFCRV9DTEtDVFJMCQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0FCRV9JTlNULCAweDAwMjApCisjZGVmaW5lIE9NQVA0X0NNMV9BQkVfQUVTU19DTEtDVFJMX09GRlNFVAkJMHgwMDI4CisjZGVmaW5lIE9NQVA0NDMwX0NNMV9BQkVfQUVTU19DTEtDVFJMCQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0FCRV9JTlNULCAweDAwMjgpCisjZGVmaW5lIE9NQVA0X0NNMV9BQkVfUERNX0NMS0NUUkxfT0ZGU0VUCQkweDAwMzAKKyNkZWZpbmUgT01BUDQ0MzBfQ00xX0FCRV9QRE1fQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9BQkVfSU5TVCwgMHgwMDMwKQorI2RlZmluZSBPTUFQNF9DTTFfQUJFX0RNSUNfQ0xLQ1RSTF9PRkZTRVQJCTB4MDAzOAorI2RlZmluZSBPTUFQNDQzMF9DTTFfQUJFX0RNSUNfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9BQkVfSU5TVCwgMHgwMDM4KQorI2RlZmluZSBPTUFQNF9DTTFfQUJFX01DQVNQX0NMS0NUUkxfT0ZGU0VUCQkweDAwNDAKKyNkZWZpbmUgT01BUDQ0MzBfQ00xX0FCRV9NQ0FTUF9DTEtDVFJMCQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0FCRV9JTlNULCAweDAwNDApCisjZGVmaW5lIE9NQVA0X0NNMV9BQkVfTUNCU1AxX0NMS0NUUkxfT0ZGU0VUCQkweDAwNDgKKyNkZWZpbmUgT01BUDQ0MzBfQ00xX0FCRV9NQ0JTUDFfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9BQkVfSU5TVCwgMHgwMDQ4KQorI2RlZmluZSBPTUFQNF9DTTFfQUJFX01DQlNQMl9DTEtDVFJMX09GRlNFVAkJMHgwMDUwCisjZGVmaW5lIE9NQVA0NDMwX0NNMV9BQkVfTUNCU1AyX0NMS0NUUkwJCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQUJFX0lOU1QsIDB4MDA1MCkKKyNkZWZpbmUgT01BUDRfQ00xX0FCRV9NQ0JTUDNfQ0xLQ1RSTF9PRkZTRVQJCTB4MDA1OAorI2RlZmluZSBPTUFQNDQzMF9DTTFfQUJFX01DQlNQM19DTEtDVFJMCQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0FCRV9JTlNULCAweDAwNTgpCisjZGVmaW5lIE9NQVA0X0NNMV9BQkVfU0xJTUJVU19DTEtDVFJMX09GRlNFVAkJMHgwMDYwCisjZGVmaW5lIE9NQVA0NDMwX0NNMV9BQkVfU0xJTUJVU19DTEtDVFJMCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQUJFX0lOU1QsIDB4MDA2MCkKKyNkZWZpbmUgT01BUDRfQ00xX0FCRV9USU1FUjVfQ0xLQ1RSTF9PRkZTRVQJCTB4MDA2OAorI2RlZmluZSBPTUFQNDQzMF9DTTFfQUJFX1RJTUVSNV9DTEtDVFJMCQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0FCRV9JTlNULCAweDAwNjgpCisjZGVmaW5lIE9NQVA0X0NNMV9BQkVfVElNRVI2X0NMS0NUUkxfT0ZGU0VUCQkweDAwNzAKKyNkZWZpbmUgT01BUDQ0MzBfQ00xX0FCRV9USU1FUjZfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9BQkVfSU5TVCwgMHgwMDcwKQorI2RlZmluZSBPTUFQNF9DTTFfQUJFX1RJTUVSN19DTEtDVFJMX09GRlNFVAkJMHgwMDc4CisjZGVmaW5lIE9NQVA0NDMwX0NNMV9BQkVfVElNRVI3X0NMS0NUUkwJCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQUJFX0lOU1QsIDB4MDA3OCkKKyNkZWZpbmUgT01BUDRfQ00xX0FCRV9USU1FUjhfQ0xLQ1RSTF9PRkZTRVQJCTB4MDA4MAorI2RlZmluZSBPTUFQNDQzMF9DTTFfQUJFX1RJTUVSOF9DTEtDVFJMCQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0FCRV9JTlNULCAweDAwODApCisjZGVmaW5lIE9NQVA0X0NNMV9BQkVfV0RUM19DTEtDVFJMX09GRlNFVAkJMHgwMDg4CisjZGVmaW5lIE9NQVA0NDMwX0NNMV9BQkVfV0RUM19DTEtDVFJMCQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0FCRV9JTlNULCAweDAwODgpCisKKy8qIENNMS5SRVNUT1JFX0NNMSByZWdpc3RlciBvZmZzZXRzICovCisjZGVmaW5lIE9NQVA0X0NNX0NMS1NFTF9DT1JFX1JFU1RPUkVfT0ZGU0VUCQkweDAwMDAKKyNkZWZpbmUgT01BUDQ0MzBfQ01fQ0xLU0VMX0NPUkVfUkVTVE9SRQkJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9SRVNUT1JFX0lOU1QsIDB4MDAwMCkKKyNkZWZpbmUgT01BUDRfQ01fRElWX00yX0RQTExfQ09SRV9SRVNUT1JFX09GRlNFVAkweDAwMDQKKyNkZWZpbmUgT01BUDQ0MzBfQ01fRElWX00yX0RQTExfQ09SRV9SRVNUT1JFCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfUkVTVE9SRV9JTlNULCAweDAwMDQpCisjZGVmaW5lIE9NQVA0X0NNX0RJVl9NM19EUExMX0NPUkVfUkVTVE9SRV9PRkZTRVQJMHgwMDA4CisjZGVmaW5lIE9NQVA0NDMwX0NNX0RJVl9NM19EUExMX0NPUkVfUkVTVE9SRQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX1JFU1RPUkVfSU5TVCwgMHgwMDA4KQorI2RlZmluZSBPTUFQNF9DTV9ESVZfTTRfRFBMTF9DT1JFX1JFU1RPUkVfT0ZGU0VUCTB4MDAwYworI2RlZmluZSBPTUFQNDQzMF9DTV9ESVZfTTRfRFBMTF9DT1JFX1JFU1RPUkUJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9SRVNUT1JFX0lOU1QsIDB4MDAwYykKKyNkZWZpbmUgT01BUDRfQ01fRElWX001X0RQTExfQ09SRV9SRVNUT1JFX09GRlNFVAkweDAwMTAKKyNkZWZpbmUgT01BUDQ0MzBfQ01fRElWX001X0RQTExfQ09SRV9SRVNUT1JFCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfUkVTVE9SRV9JTlNULCAweDAwMTApCisjZGVmaW5lIE9NQVA0X0NNX0RJVl9NNl9EUExMX0NPUkVfUkVTVE9SRV9PRkZTRVQJMHgwMDE0CisjZGVmaW5lIE9NQVA0NDMwX0NNX0RJVl9NNl9EUExMX0NPUkVfUkVTVE9SRQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX1JFU1RPUkVfSU5TVCwgMHgwMDE0KQorI2RlZmluZSBPTUFQNF9DTV9ESVZfTTdfRFBMTF9DT1JFX1JFU1RPUkVfT0ZGU0VUCTB4MDAxOAorI2RlZmluZSBPTUFQNDQzMF9DTV9ESVZfTTdfRFBMTF9DT1JFX1JFU1RPUkUJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9SRVNUT1JFX0lOU1QsIDB4MDAxOCkKKyNkZWZpbmUgT01BUDRfQ01fQ0xLU0VMX0RQTExfQ09SRV9SRVNUT1JFX09GRlNFVAkweDAwMWMKKyNkZWZpbmUgT01BUDQ0MzBfQ01fQ0xLU0VMX0RQTExfQ09SRV9SRVNUT1JFCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfUkVTVE9SRV9JTlNULCAweDAwMWMpCisjZGVmaW5lIE9NQVA0X0NNX1NTQ19ERUxUQU1TVEVQX0RQTExfQ09SRV9SRVNUT1JFX09GRlNFVAkweDAwMjAKKyNkZWZpbmUgT01BUDQ0MzBfQ01fU1NDX0RFTFRBTVNURVBfRFBMTF9DT1JFX1JFU1RPUkUJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX1JFU1RPUkVfSU5TVCwgMHgwMDIwKQorI2RlZmluZSBPTUFQNF9DTV9TU0NfSU5TVEZSRVFESVZfRFBMTF9DT1JFX1JFU1RPUkVfT0ZGU0VUCTB4MDAyNAorI2RlZmluZSBPTUFQNDQzMF9DTV9TU0NfSU5TVEZSRVFESVZfRFBMTF9DT1JFX1JFU1RPUkUJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX1JFU1RPUkVfSU5TVCwgMHgwMDI0KQorI2RlZmluZSBPTUFQNF9DTV9DTEtNT0RFX0RQTExfQ09SRV9SRVNUT1JFX09GRlNFVAkweDAwMjgKKyNkZWZpbmUgT01BUDQ0MzBfQ01fQ0xLTU9ERV9EUExMX0NPUkVfUkVTVE9SRQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX1JFU1RPUkVfSU5TVCwgMHgwMDI4KQorI2RlZmluZSBPTUFQNF9DTV9TSEFET1dfRlJFUV9DT05GSUcyX1JFU1RPUkVfT0ZGU0VUCTB4MDAyYworI2RlZmluZSBPTUFQNDQzMF9DTV9TSEFET1dfRlJFUV9DT05GSUcyX1JFU1RPUkUJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9SRVNUT1JFX0lOU1QsIDB4MDAyYykKKyNkZWZpbmUgT01BUDRfQ01fU0hBRE9XX0ZSRVFfQ09ORklHMV9SRVNUT1JFX09GRlNFVAkweDAwMzAKKyNkZWZpbmUgT01BUDQ0MzBfQ01fU0hBRE9XX0ZSRVFfQ09ORklHMV9SRVNUT1JFCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfUkVTVE9SRV9JTlNULCAweDAwMzApCisjZGVmaW5lIE9NQVA0X0NNX0FVVE9JRExFX0RQTExfQ09SRV9SRVNUT1JFX09GRlNFVAkweDAwMzQKKyNkZWZpbmUgT01BUDQ0MzBfQ01fQVVUT0lETEVfRFBMTF9DT1JFX1JFU1RPUkUJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9SRVNUT1JFX0lOU1QsIDB4MDAzNCkKKyNkZWZpbmUgT01BUDRfQ01fTVBVX0NMS1NUQ1RSTF9SRVNUT1JFX09GRlNFVAkJMHgwMDM4CisjZGVmaW5lIE9NQVA0NDMwX0NNX01QVV9DTEtTVENUUkxfUkVTVE9SRQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX1JFU1RPUkVfSU5TVCwgMHgwMDM4KQorI2RlZmluZSBPTUFQNF9DTV9DTTFfUFJPRklMSU5HX0NMS0NUUkxfUkVTVE9SRV9PRkZTRVQJMHgwMDNjCisjZGVmaW5lIE9NQVA0NDMwX0NNX0NNMV9QUk9GSUxJTkdfQ0xLQ1RSTF9SRVNUT1JFCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9SRVNUT1JFX0lOU1QsIDB4MDAzYykKKyNkZWZpbmUgT01BUDRfQ01fRFlOX0RFUF9QUkVTQ0FMX1JFU1RPUkVfT0ZGU0VUCQkweDAwNDAKKyNkZWZpbmUgT01BUDQ0MzBfQ01fRFlOX0RFUF9QUkVTQ0FMX1JFU1RPUkUJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9SRVNUT1JFX0lOU1QsIDB4MDA0MCkKKworLyogRnVuY3Rpb24gcHJvdG90eXBlcyAqLworZXh0ZXJuIHUzMiBvbWFwNF9jbTFfcmVhZF9pbnN0X3JlZyhzMTYgaW5zdCwgdTE2IGlkeCk7CitleHRlcm4gdm9pZCBvbWFwNF9jbTFfd3JpdGVfaW5zdF9yZWcodTMyIHZhbCwgczE2IGluc3QsIHUxNiBpZHgpOworZXh0ZXJuIHUzMiBvbWFwNF9jbTFfcm13X2luc3RfcmVnX2JpdHModTMyIG1hc2ssIHUzMiBiaXRzLCBzMTYgaW5zdCwgczE2IGlkeCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTJfNDR4eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTJfNDR4eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhNDc0NTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtMl80NHh4LmgKQEAgLTAsMCArMSw1MDggQEAKKy8qCisgKiBPTUFQNDR4eCBDTTIgaW5zdGFuY2Ugb2Zmc2V0IG1hY3JvcworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIFBhdWwgV2FsbXNsZXkgKHBhdWxAcHdzYW4uY29tKQorICogUmFqZW5kcmEgTmF5YWsgKHJuYXlha0B0aS5jb20pCisgKiBCZW5vaXQgQ291c3NvbiAoYi1jb3Vzc29uQHRpLmNvbSkKKyAqCisgKiBUaGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0aGUgT01BUCBoYXJkd2FyZSBkYXRhYmFzZXMuCisgKiBXZSByZXNwZWN0ZnVsbHkgYXNrIHRoYXQgYW55IG1vZGlmaWNhdGlvbnMgdG8gdGhpcyBmaWxlIGJlIGNvb3JkaW5hdGVkCisgKiB3aXRoIHRoZSBwdWJsaWMgbGludXgtb21hcEB2Z2VyLmtlcm5lbC5vcmcgbWFpbGluZyBsaXN0IGFuZCB0aGUKKyAqIGF1dGhvcnMgYWJvdmUgdG8gZW5zdXJlIHRoYXQgdGhlIGF1dG9nZW5lcmF0aW9uIHNjcmlwdHMgYXJlIGtlcHQKKyAqIHVwLXRvLWRhdGUgd2l0aCB0aGUgZmlsZSBjb250ZW50cy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFhYWCBUaGlzIGZpbGUgbmVlZHMgdG8gYmUgdXBkYXRlZCB0byBhbGlnbiBvbiBvbmUgb2YgIk9NQVA0IiwgIk9NQVA0NFhYIiwKKyAqICAgICBvciAiT01BUDQ0MzAiLgorICovCisKKyNpZm5kZWYgX19BUkNIX0FSTV9NQUNIX09NQVAyX0NNMl80NFhYX0gKKyNkZWZpbmUgX19BUkNIX0FSTV9NQUNIX09NQVAyX0NNMl80NFhYX0gKKworLyogQ00yIGJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBPTUFQNDQzMF9DTTJfQkFTRQkJMHg0YTAwODAwMAorCisjZGVmaW5lIE9NQVA0NFhYX0NNMl9SRUdBRERSKGluc3QsIHJlZykJCQkJXAorCU9NQVAyX0w0X0lPX0FERFJFU1MoT01BUDQ0MzBfQ00yX0JBU0UgKyAoaW5zdCkgKyAocmVnKSkKKworLyogQ00yIGluc3RhbmNlcyAqLworI2RlZmluZSBPTUFQNDQzMF9DTTJfT0NQX1NPQ0tFVF9JTlNUCTB4MDAwMAorI2RlZmluZSBPTUFQNDQzMF9DTTJfQ0tHRU5fSU5TVAkJMHgwMTAwCisjZGVmaW5lIE9NQVA0NDMwX0NNMl9BTFdBWVNfT05fSU5TVAkweDA2MDAKKyNkZWZpbmUgT01BUDQ0MzBfQ00yX0NPUkVfSU5TVAkJMHgwNzAwCisjZGVmaW5lIE9NQVA0NDMwX0NNMl9JVkFIRF9JTlNUCQkweDBmMDAKKyNkZWZpbmUgT01BUDQ0MzBfQ00yX0NBTV9JTlNUCQkweDEwMDAKKyNkZWZpbmUgT01BUDQ0MzBfQ00yX0RTU19JTlNUCQkweDExMDAKKyNkZWZpbmUgT01BUDQ0MzBfQ00yX0dGWF9JTlNUCQkweDEyMDAKKyNkZWZpbmUgT01BUDQ0MzBfQ00yX0wzSU5JVF9JTlNUCQkweDEzMDAKKyNkZWZpbmUgT01BUDQ0MzBfQ00yX0w0UEVSX0lOU1QJCTB4MTQwMAorI2RlZmluZSBPTUFQNDQzMF9DTTJfQ0VGVVNFX0lOU1QJCTB4MTYwMAorI2RlZmluZSBPTUFQNDQzMF9DTTJfUkVTVE9SRV9JTlNUCTB4MWUwMAorI2RlZmluZSBPTUFQNDQzMF9DTTJfSU5TVFJfSU5TVAkJMHgxZjAwCisKKy8qIENNMiBjbG9ja2RvbWFpbiByZWdpc3RlciBvZmZzZXRzIChmcm9tIGluc3RhbmNlIHN0YXJ0KSAqLworI2RlZmluZSBPTUFQNDQzMF9DTTJfQUxXQVlTX09OX0FMV09OX0NET0ZGUwkweDAwMDAKKyNkZWZpbmUgT01BUDQ0MzBfQ00yX0NPUkVfTDNfMV9DRE9GRlMJCTB4MDAwMAorI2RlZmluZSBPTUFQNDQzMF9DTTJfQ09SRV9MM18yX0NET0ZGUwkJMHgwMTAwCisjZGVmaW5lIE9NQVA0NDMwX0NNMl9DT1JFX0RVQ0FUSV9DRE9GRlMJCTB4MDIwMAorI2RlZmluZSBPTUFQNDQzMF9DTTJfQ09SRV9TRE1BX0NET0ZGUwkJMHgwMzAwCisjZGVmaW5lIE9NQVA0NDMwX0NNMl9DT1JFX01FTUlGX0NET0ZGUwkJMHgwNDAwCisjZGVmaW5lIE9NQVA0NDMwX0NNMl9DT1JFX0QyRF9DRE9GRlMJCTB4MDUwMAorI2RlZmluZSBPTUFQNDQzMF9DTTJfQ09SRV9MNENGR19DRE9GRlMJCTB4MDYwMAorI2RlZmluZSBPTUFQNDQzMF9DTTJfQ09SRV9MM0lOU1RSX0NET0ZGUwkweDA3MDAKKyNkZWZpbmUgT01BUDQ0MzBfQ00yX0lWQUhEX0lWQUhEX0NET0ZGUwkJMHgwMDAwCisjZGVmaW5lIE9NQVA0NDMwX0NNMl9DQU1fQ0FNX0NET0ZGUwkJMHgwMDAwCisjZGVmaW5lIE9NQVA0NDMwX0NNMl9EU1NfRFNTX0NET0ZGUwkJMHgwMDAwCisjZGVmaW5lIE9NQVA0NDMwX0NNMl9HRlhfR0ZYX0NET0ZGUwkJMHgwMDAwCisjZGVmaW5lIE9NQVA0NDMwX0NNMl9MM0lOSVRfTDNJTklUX0NET0ZGUwkweDAwMDAKKyNkZWZpbmUgT01BUDQ0MzBfQ00yX0w0UEVSX0w0UEVSX0NET0ZGUwkJMHgwMDAwCisjZGVmaW5lIE9NQVA0NDMwX0NNMl9MNFBFUl9MNFNFQ19DRE9GRlMJCTB4MDE4MAorI2RlZmluZSBPTUFQNDQzMF9DTTJfQ0VGVVNFX0NFRlVTRV9DRE9GRlMJMHgwMDAwCisKKworLyogQ00yICovCisKKy8qIENNMi5PQ1BfU09DS0VUX0NNMiByZWdpc3RlciBvZmZzZXRzICovCisjZGVmaW5lIE9NQVA0X1JFVklTSU9OX0NNMl9PRkZTRVQJCQkweDAwMDAKKyNkZWZpbmUgT01BUDQ0MzBfUkVWSVNJT05fQ00yCQkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9PQ1BfU09DS0VUX0lOU1QsIDB4MDAwMCkKKyNkZWZpbmUgT01BUDRfQ01fQ00yX1BST0ZJTElOR19DTEtDVFJMX09GRlNFVAkJMHgwMDQwCisjZGVmaW5lIE9NQVA0NDMwX0NNX0NNMl9QUk9GSUxJTkdfQ0xLQ1RSTAkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX09DUF9TT0NLRVRfSU5TVCwgMHgwMDQwKQorCisvKiBDTTIuQ0tHRU5fQ00yIHJlZ2lzdGVyIG9mZnNldHMgKi8KKyNkZWZpbmUgT01BUDRfQ01fQ0xLU0VMX0RVQ0FUSV9JU1NfUk9PVF9PRkZTRVQJCTB4MDAwMAorI2RlZmluZSBPTUFQNDQzMF9DTV9DTEtTRUxfRFVDQVRJX0lTU19ST09UCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ0tHRU5fSU5TVCwgMHgwMDAwKQorI2RlZmluZSBPTUFQNF9DTV9DTEtTRUxfVVNCXzYwTUhaX09GRlNFVAkJMHgwMDA0CisjZGVmaW5lIE9NQVA0NDMwX0NNX0NMS1NFTF9VU0JfNjBNSFoJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ0tHRU5fSU5TVCwgMHgwMDA0KQorI2RlZmluZSBPTUFQNF9DTV9TQ0FMRV9GQ0xLX09GRlNFVAkJCTB4MDAwOAorI2RlZmluZSBPTUFQNDQzMF9DTV9TQ0FMRV9GQ0xLCQkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DS0dFTl9JTlNULCAweDAwMDgpCisjZGVmaW5lIE9NQVA0X0NNX0NPUkVfRFZGU19QRVJGMV9PRkZTRVQJCQkweDAwMTAKKyNkZWZpbmUgT01BUDQ0MzBfQ01fQ09SRV9EVkZTX1BFUkYxCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NLR0VOX0lOU1QsIDB4MDAxMCkKKyNkZWZpbmUgT01BUDRfQ01fQ09SRV9EVkZTX1BFUkYyX09GRlNFVAkJCTB4MDAxNAorI2RlZmluZSBPTUFQNDQzMF9DTV9DT1JFX0RWRlNfUEVSRjIJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ0tHRU5fSU5TVCwgMHgwMDE0KQorI2RlZmluZSBPTUFQNF9DTV9DT1JFX0RWRlNfUEVSRjNfT0ZGU0VUCQkJMHgwMDE4CisjZGVmaW5lIE9NQVA0NDMwX0NNX0NPUkVfRFZGU19QRVJGMwkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DS0dFTl9JTlNULCAweDAwMTgpCisjZGVmaW5lIE9NQVA0X0NNX0NPUkVfRFZGU19QRVJGNF9PRkZTRVQJCQkweDAwMWMKKyNkZWZpbmUgT01BUDQ0MzBfQ01fQ09SRV9EVkZTX1BFUkY0CQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NLR0VOX0lOU1QsIDB4MDAxYykKKyNkZWZpbmUgT01BUDRfQ01fQ09SRV9EVkZTX0NVUlJFTlRfT0ZGU0VUCQkweDAwMjQKKyNkZWZpbmUgT01BUDQ0MzBfQ01fQ09SRV9EVkZTX0NVUlJFTlQJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ0tHRU5fSU5TVCwgMHgwMDI0KQorI2RlZmluZSBPTUFQNF9DTV9JVkFfRFZGU19QRVJGX1RFU0xBX09GRlNFVAkJMHgwMDI4CisjZGVmaW5lIE9NQVA0NDMwX0NNX0lWQV9EVkZTX1BFUkZfVEVTTEEJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ0tHRU5fSU5TVCwgMHgwMDI4KQorI2RlZmluZSBPTUFQNF9DTV9JVkFfRFZGU19QRVJGX0lWQUhEX09GRlNFVAkJMHgwMDJjCisjZGVmaW5lIE9NQVA0NDMwX0NNX0lWQV9EVkZTX1BFUkZfSVZBSEQJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ0tHRU5fSU5TVCwgMHgwMDJjKQorI2RlZmluZSBPTUFQNF9DTV9JVkFfRFZGU19QRVJGX0FCRV9PRkZTRVQJCTB4MDAzMAorI2RlZmluZSBPTUFQNDQzMF9DTV9JVkFfRFZGU19QRVJGX0FCRQkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DS0dFTl9JTlNULCAweDAwMzApCisjZGVmaW5lIE9NQVA0X0NNX0lWQV9EVkZTX0NVUlJFTlRfT0ZGU0VUCQkweDAwMzgKKyNkZWZpbmUgT01BUDQ0MzBfQ01fSVZBX0RWRlNfQ1VSUkVOVAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DS0dFTl9JTlNULCAweDAwMzgpCisjZGVmaW5lIE9NQVA0X0NNX0NMS01PREVfRFBMTF9QRVJfT0ZGU0VUCQkweDAwNDAKKyNkZWZpbmUgT01BUDQ0MzBfQ01fQ0xLTU9ERV9EUExMX1BFUgkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DS0dFTl9JTlNULCAweDAwNDApCisjZGVmaW5lIE9NQVA0X0NNX0lETEVTVF9EUExMX1BFUl9PRkZTRVQJCQkweDAwNDQKKyNkZWZpbmUgT01BUDQ0MzBfQ01fSURMRVNUX0RQTExfUEVSCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NLR0VOX0lOU1QsIDB4MDA0NCkKKyNkZWZpbmUgT01BUDRfQ01fQVVUT0lETEVfRFBMTF9QRVJfT0ZGU0VUCQkweDAwNDgKKyNkZWZpbmUgT01BUDQ0MzBfQ01fQVVUT0lETEVfRFBMTF9QRVIJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ0tHRU5fSU5TVCwgMHgwMDQ4KQorI2RlZmluZSBPTUFQNF9DTV9DTEtTRUxfRFBMTF9QRVJfT0ZGU0VUCQkJMHgwMDRjCisjZGVmaW5lIE9NQVA0NDMwX0NNX0NMS1NFTF9EUExMX1BFUgkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DS0dFTl9JTlNULCAweDAwNGMpCisjZGVmaW5lIE9NQVA0X0NNX0RJVl9NMl9EUExMX1BFUl9PRkZTRVQJCQkweDAwNTAKKyNkZWZpbmUgT01BUDQ0MzBfQ01fRElWX00yX0RQTExfUEVSCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NLR0VOX0lOU1QsIDB4MDA1MCkKKyNkZWZpbmUgT01BUDRfQ01fRElWX00zX0RQTExfUEVSX09GRlNFVAkJCTB4MDA1NAorI2RlZmluZSBPTUFQNDQzMF9DTV9ESVZfTTNfRFBMTF9QRVIJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ0tHRU5fSU5TVCwgMHgwMDU0KQorI2RlZmluZSBPTUFQNF9DTV9ESVZfTTRfRFBMTF9QRVJfT0ZGU0VUCQkJMHgwMDU4CisjZGVmaW5lIE9NQVA0NDMwX0NNX0RJVl9NNF9EUExMX1BFUgkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DS0dFTl9JTlNULCAweDAwNTgpCisjZGVmaW5lIE9NQVA0X0NNX0RJVl9NNV9EUExMX1BFUl9PRkZTRVQJCQkweDAwNWMKKyNkZWZpbmUgT01BUDQ0MzBfQ01fRElWX001X0RQTExfUEVSCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NLR0VOX0lOU1QsIDB4MDA1YykKKyNkZWZpbmUgT01BUDRfQ01fRElWX002X0RQTExfUEVSX09GRlNFVAkJCTB4MDA2MAorI2RlZmluZSBPTUFQNDQzMF9DTV9ESVZfTTZfRFBMTF9QRVIJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ0tHRU5fSU5TVCwgMHgwMDYwKQorI2RlZmluZSBPTUFQNF9DTV9ESVZfTTdfRFBMTF9QRVJfT0ZGU0VUCQkJMHgwMDY0CisjZGVmaW5lIE9NQVA0NDMwX0NNX0RJVl9NN19EUExMX1BFUgkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DS0dFTl9JTlNULCAweDAwNjQpCisjZGVmaW5lIE9NQVA0X0NNX1NTQ19ERUxUQU1TVEVQX0RQTExfUEVSX09GRlNFVAkJMHgwMDY4CisjZGVmaW5lIE9NQVA0NDMwX0NNX1NTQ19ERUxUQU1TVEVQX0RQTExfUEVSCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ0tHRU5fSU5TVCwgMHgwMDY4KQorI2RlZmluZSBPTUFQNF9DTV9TU0NfSU5TVEZSRVFESVZfRFBMTF9QRVJfT0ZGU0VUCQkweDAwNmMKKyNkZWZpbmUgT01BUDQ0MzBfQ01fU1NDX0lOU1RGUkVRRElWX0RQTExfUEVSCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ0tHRU5fSU5TVCwgMHgwMDZjKQorI2RlZmluZSBPTUFQNF9DTV9DTEtNT0RFX0RQTExfVVNCX09GRlNFVAkJMHgwMDgwCisjZGVmaW5lIE9NQVA0NDMwX0NNX0NMS01PREVfRFBMTF9VU0IJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ0tHRU5fSU5TVCwgMHgwMDgwKQorI2RlZmluZSBPTUFQNF9DTV9JRExFU1RfRFBMTF9VU0JfT0ZGU0VUCQkJMHgwMDg0CisjZGVmaW5lIE9NQVA0NDMwX0NNX0lETEVTVF9EUExMX1VTQgkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DS0dFTl9JTlNULCAweDAwODQpCisjZGVmaW5lIE9NQVA0X0NNX0FVVE9JRExFX0RQTExfVVNCX09GRlNFVAkJMHgwMDg4CisjZGVmaW5lIE9NQVA0NDMwX0NNX0FVVE9JRExFX0RQTExfVVNCCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NLR0VOX0lOU1QsIDB4MDA4OCkKKyNkZWZpbmUgT01BUDRfQ01fQ0xLU0VMX0RQTExfVVNCX09GRlNFVAkJCTB4MDA4YworI2RlZmluZSBPTUFQNDQzMF9DTV9DTEtTRUxfRFBMTF9VU0IJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ0tHRU5fSU5TVCwgMHgwMDhjKQorI2RlZmluZSBPTUFQNF9DTV9ESVZfTTJfRFBMTF9VU0JfT0ZGU0VUCQkJMHgwMDkwCisjZGVmaW5lIE9NQVA0NDMwX0NNX0RJVl9NMl9EUExMX1VTQgkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DS0dFTl9JTlNULCAweDAwOTApCisjZGVmaW5lIE9NQVA0X0NNX1NTQ19ERUxUQU1TVEVQX0RQTExfVVNCX09GRlNFVAkJMHgwMGE4CisjZGVmaW5lIE9NQVA0NDMwX0NNX1NTQ19ERUxUQU1TVEVQX0RQTExfVVNCCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ0tHRU5fSU5TVCwgMHgwMGE4KQorI2RlZmluZSBPTUFQNF9DTV9TU0NfSU5TVEZSRVFESVZfRFBMTF9VU0JfT0ZGU0VUCQkweDAwYWMKKyNkZWZpbmUgT01BUDQ0MzBfQ01fU1NDX0lOU1RGUkVRRElWX0RQTExfVVNCCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ0tHRU5fSU5TVCwgMHgwMGFjKQorI2RlZmluZSBPTUFQNF9DTV9DTEtEQ09MRE9fRFBMTF9VU0JfT0ZGU0VUCQkweDAwYjQKKyNkZWZpbmUgT01BUDQ0MzBfQ01fQ0xLRENPTERPX0RQTExfVVNCCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NLR0VOX0lOU1QsIDB4MDBiNCkKKyNkZWZpbmUgT01BUDRfQ01fQ0xLTU9ERV9EUExMX1VOSVBST19PRkZTRVQJCTB4MDBjMAorI2RlZmluZSBPTUFQNDQzMF9DTV9DTEtNT0RFX0RQTExfVU5JUFJPCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NLR0VOX0lOU1QsIDB4MDBjMCkKKyNkZWZpbmUgT01BUDRfQ01fSURMRVNUX0RQTExfVU5JUFJPX09GRlNFVAkJMHgwMGM0CisjZGVmaW5lIE9NQVA0NDMwX0NNX0lETEVTVF9EUExMX1VOSVBSTwkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DS0dFTl9JTlNULCAweDAwYzQpCisjZGVmaW5lIE9NQVA0X0NNX0FVVE9JRExFX0RQTExfVU5JUFJPX09GRlNFVAkJMHgwMGM4CisjZGVmaW5lIE9NQVA0NDMwX0NNX0FVVE9JRExFX0RQTExfVU5JUFJPCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ0tHRU5fSU5TVCwgMHgwMGM4KQorI2RlZmluZSBPTUFQNF9DTV9DTEtTRUxfRFBMTF9VTklQUk9fT0ZGU0VUCQkweDAwY2MKKyNkZWZpbmUgT01BUDQ0MzBfQ01fQ0xLU0VMX0RQTExfVU5JUFJPCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NLR0VOX0lOU1QsIDB4MDBjYykKKyNkZWZpbmUgT01BUDRfQ01fRElWX00yX0RQTExfVU5JUFJPX09GRlNFVAkJMHgwMGQwCisjZGVmaW5lIE9NQVA0NDMwX0NNX0RJVl9NMl9EUExMX1VOSVBSTwkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DS0dFTl9JTlNULCAweDAwZDApCisjZGVmaW5lIE9NQVA0X0NNX1NTQ19ERUxUQU1TVEVQX0RQTExfVU5JUFJPX09GRlNFVAkweDAwZTgKKyNkZWZpbmUgT01BUDQ0MzBfQ01fU1NDX0RFTFRBTVNURVBfRFBMTF9VTklQUk8JCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DS0dFTl9JTlNULCAweDAwZTgpCisjZGVmaW5lIE9NQVA0X0NNX1NTQ19JTlNURlJFUURJVl9EUExMX1VOSVBST19PRkZTRVQJMHgwMGVjCisjZGVmaW5lIE9NQVA0NDMwX0NNX1NTQ19JTlNURlJFUURJVl9EUExMX1VOSVBSTwkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NLR0VOX0lOU1QsIDB4MDBlYykKKworLyogQ00yLkFMV0FZU19PTl9DTTIgcmVnaXN0ZXIgb2Zmc2V0cyAqLworI2RlZmluZSBPTUFQNF9DTV9BTFdPTl9DTEtTVENUUkxfT0ZGU0VUCQkJMHgwMDAwCisjZGVmaW5lIE9NQVA0NDMwX0NNX0FMV09OX0NMS1NUQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9BTFdBWVNfT05fSU5TVCwgMHgwMDAwKQorI2RlZmluZSBPTUFQNF9DTV9BTFdPTl9NRE1JTlRDX0NMS0NUUkxfT0ZGU0VUCQkweDAwMjAKKyNkZWZpbmUgT01BUDQ0MzBfQ01fQUxXT05fTURNSU5UQ19DTEtDVFJMCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQUxXQVlTX09OX0lOU1QsIDB4MDAyMCkKKyNkZWZpbmUgT01BUDRfQ01fQUxXT05fU1JfTVBVX0NMS0NUUkxfT0ZGU0VUCQkweDAwMjgKKyNkZWZpbmUgT01BUDQ0MzBfQ01fQUxXT05fU1JfTVBVX0NMS0NUUkwJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9BTFdBWVNfT05fSU5TVCwgMHgwMDI4KQorI2RlZmluZSBPTUFQNF9DTV9BTFdPTl9TUl9JVkFfQ0xLQ1RSTF9PRkZTRVQJCTB4MDAzMAorI2RlZmluZSBPTUFQNDQzMF9DTV9BTFdPTl9TUl9JVkFfQ0xLQ1RSTAkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0FMV0FZU19PTl9JTlNULCAweDAwMzApCisjZGVmaW5lIE9NQVA0X0NNX0FMV09OX1NSX0NPUkVfQ0xLQ1RSTF9PRkZTRVQJCTB4MDAzOAorI2RlZmluZSBPTUFQNDQzMF9DTV9BTFdPTl9TUl9DT1JFX0NMS0NUUkwJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9BTFdBWVNfT05fSU5TVCwgMHgwMDM4KQorI2RlZmluZSBPTUFQNF9DTV9BTFdPTl9VU0JQSFlfQ0xLQ1RSTF9PRkZTRVQJCTB4MDA0MAorI2RlZmluZSBPTUFQNDQzMF9DTV9BTFdPTl9VU0JQSFlfQ0xLQ1RSTAkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0FMV0FZU19PTl9JTlNULCAweDAwNDApCisKKy8qIENNMi5DT1JFX0NNMiByZWdpc3RlciBvZmZzZXRzICovCisjZGVmaW5lIE9NQVA0X0NNX0wzXzFfQ0xLU1RDVFJMX09GRlNFVAkJCTB4MDAwMAorI2RlZmluZSBPTUFQNDQzMF9DTV9MM18xX0NMS1NUQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DT1JFX0lOU1QsIDB4MDAwMCkKKyNkZWZpbmUgT01BUDRfQ01fTDNfMV9EWU5BTUlDREVQX09GRlNFVAkJCTB4MDAwOAorI2RlZmluZSBPTUFQNDQzMF9DTV9MM18xX0RZTkFNSUNERVAJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ09SRV9JTlNULCAweDAwMDgpCisjZGVmaW5lIE9NQVA0X0NNX0wzXzFfTDNfMV9DTEtDVFJMX09GRlNFVAkJMHgwMDIwCisjZGVmaW5lIE9NQVA0NDMwX0NNX0wzXzFfTDNfMV9DTEtDVFJMCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NPUkVfSU5TVCwgMHgwMDIwKQorI2RlZmluZSBPTUFQNF9DTV9MM18yX0NMS1NUQ1RSTF9PRkZTRVQJCQkweDAxMDAKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDNfMl9DTEtTVENUUkwJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ09SRV9JTlNULCAweDAxMDApCisjZGVmaW5lIE9NQVA0X0NNX0wzXzJfRFlOQU1JQ0RFUF9PRkZTRVQJCQkweDAxMDgKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDNfMl9EWU5BTUlDREVQCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NPUkVfSU5TVCwgMHgwMTA4KQorI2RlZmluZSBPTUFQNF9DTV9MM18yX0wzXzJfQ0xLQ1RSTF9PRkZTRVQJCTB4MDEyMAorI2RlZmluZSBPTUFQNDQzMF9DTV9MM18yX0wzXzJfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DT1JFX0lOU1QsIDB4MDEyMCkKKyNkZWZpbmUgT01BUDRfQ01fTDNfMl9HUE1DX0NMS0NUUkxfT0ZGU0VUCQkweDAxMjgKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDNfMl9HUE1DX0NMS0NUUkwJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ09SRV9JTlNULCAweDAxMjgpCisjZGVmaW5lIE9NQVA0X0NNX0wzXzJfT0NNQ19SQU1fQ0xLQ1RSTF9PRkZTRVQJCTB4MDEzMAorI2RlZmluZSBPTUFQNDQzMF9DTV9MM18yX09DTUNfUkFNX0NMS0NUUkwJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DT1JFX0lOU1QsIDB4MDEzMCkKKyNkZWZpbmUgT01BUDRfQ01fRFVDQVRJX0NMS1NUQ1RSTF9PRkZTRVQJCTB4MDIwMAorI2RlZmluZSBPTUFQNDQzMF9DTV9EVUNBVElfQ0xLU1RDVFJMCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NPUkVfSU5TVCwgMHgwMjAwKQorI2RlZmluZSBPTUFQNF9DTV9EVUNBVElfU1RBVElDREVQX09GRlNFVAkJMHgwMjA0CisjZGVmaW5lIE9NQVA0NDMwX0NNX0RVQ0FUSV9TVEFUSUNERVAJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ09SRV9JTlNULCAweDAyMDQpCisjZGVmaW5lIE9NQVA0X0NNX0RVQ0FUSV9EWU5BTUlDREVQX09GRlNFVAkJMHgwMjA4CisjZGVmaW5lIE9NQVA0NDMwX0NNX0RVQ0FUSV9EWU5BTUlDREVQCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NPUkVfSU5TVCwgMHgwMjA4KQorI2RlZmluZSBPTUFQNF9DTV9EVUNBVElfRFVDQVRJX0NMS0NUUkxfT0ZGU0VUCQkweDAyMjAKKyNkZWZpbmUgT01BUDQ0MzBfQ01fRFVDQVRJX0RVQ0FUSV9DTEtDVFJMCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ09SRV9JTlNULCAweDAyMjApCisjZGVmaW5lIE9NQVA0X0NNX1NETUFfQ0xLU1RDVFJMX09GRlNFVAkJCTB4MDMwMAorI2RlZmluZSBPTUFQNDQzMF9DTV9TRE1BX0NMS1NUQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DT1JFX0lOU1QsIDB4MDMwMCkKKyNkZWZpbmUgT01BUDRfQ01fU0RNQV9TVEFUSUNERVBfT0ZGU0VUCQkJMHgwMzA0CisjZGVmaW5lIE9NQVA0NDMwX0NNX1NETUFfU1RBVElDREVQCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NPUkVfSU5TVCwgMHgwMzA0KQorI2RlZmluZSBPTUFQNF9DTV9TRE1BX0RZTkFNSUNERVBfT0ZGU0VUCQkJMHgwMzA4CisjZGVmaW5lIE9NQVA0NDMwX0NNX1NETUFfRFlOQU1JQ0RFUAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DT1JFX0lOU1QsIDB4MDMwOCkKKyNkZWZpbmUgT01BUDRfQ01fU0RNQV9TRE1BX0NMS0NUUkxfT0ZGU0VUCQkweDAzMjAKKyNkZWZpbmUgT01BUDQ0MzBfQ01fU0RNQV9TRE1BX0NMS0NUUkwJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ09SRV9JTlNULCAweDAzMjApCisjZGVmaW5lIE9NQVA0X0NNX01FTUlGX0NMS1NUQ1RSTF9PRkZTRVQJCQkweDA0MDAKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTUVNSUZfQ0xLU1RDVFJMCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NPUkVfSU5TVCwgMHgwNDAwKQorI2RlZmluZSBPTUFQNF9DTV9NRU1JRl9ETU1fQ0xLQ1RSTF9PRkZTRVQJCTB4MDQyMAorI2RlZmluZSBPTUFQNDQzMF9DTV9NRU1JRl9ETU1fQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DT1JFX0lOU1QsIDB4MDQyMCkKKyNkZWZpbmUgT01BUDRfQ01fTUVNSUZfRU1JRl9GV19DTEtDVFJMX09GRlNFVAkJMHgwNDI4CisjZGVmaW5lIE9NQVA0NDMwX0NNX01FTUlGX0VNSUZfRldfQ0xLQ1RSTAkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NPUkVfSU5TVCwgMHgwNDI4KQorI2RlZmluZSBPTUFQNF9DTV9NRU1JRl9FTUlGXzFfQ0xLQ1RSTF9PRkZTRVQJCTB4MDQzMAorI2RlZmluZSBPTUFQNDQzMF9DTV9NRU1JRl9FTUlGXzFfQ0xLQ1RSTAkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NPUkVfSU5TVCwgMHgwNDMwKQorI2RlZmluZSBPTUFQNF9DTV9NRU1JRl9FTUlGXzJfQ0xLQ1RSTF9PRkZTRVQJCTB4MDQzOAorI2RlZmluZSBPTUFQNDQzMF9DTV9NRU1JRl9FTUlGXzJfQ0xLQ1RSTAkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NPUkVfSU5TVCwgMHgwNDM4KQorI2RlZmluZSBPTUFQNF9DTV9NRU1JRl9ETExfQ0xLQ1RSTF9PRkZTRVQJCTB4MDQ0MAorI2RlZmluZSBPTUFQNDQzMF9DTV9NRU1JRl9ETExfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DT1JFX0lOU1QsIDB4MDQ0MCkKKyNkZWZpbmUgT01BUDRfQ01fTUVNSUZfRU1JRl9IMV9DTEtDVFJMX09GRlNFVAkJMHgwNDUwCisjZGVmaW5lIE9NQVA0NDMwX0NNX01FTUlGX0VNSUZfSDFfQ0xLQ1RSTAkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NPUkVfSU5TVCwgMHgwNDUwKQorI2RlZmluZSBPTUFQNF9DTV9NRU1JRl9FTUlGX0gyX0NMS0NUUkxfT0ZGU0VUCQkweDA0NTgKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTUVNSUZfRU1JRl9IMl9DTEtDVFJMCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ09SRV9JTlNULCAweDA0NTgpCisjZGVmaW5lIE9NQVA0X0NNX01FTUlGX0RMTF9IX0NMS0NUUkxfT0ZGU0VUCQkweDA0NjAKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTUVNSUZfRExMX0hfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DT1JFX0lOU1QsIDB4MDQ2MCkKKyNkZWZpbmUgT01BUDRfQ01fRDJEX0NMS1NUQ1RSTF9PRkZTRVQJCQkweDA1MDAKKyNkZWZpbmUgT01BUDQ0MzBfQ01fRDJEX0NMS1NUQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DT1JFX0lOU1QsIDB4MDUwMCkKKyNkZWZpbmUgT01BUDRfQ01fRDJEX1NUQVRJQ0RFUF9PRkZTRVQJCQkweDA1MDQKKyNkZWZpbmUgT01BUDQ0MzBfQ01fRDJEX1NUQVRJQ0RFUAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DT1JFX0lOU1QsIDB4MDUwNCkKKyNkZWZpbmUgT01BUDRfQ01fRDJEX0RZTkFNSUNERVBfT0ZGU0VUCQkJMHgwNTA4CisjZGVmaW5lIE9NQVA0NDMwX0NNX0QyRF9EWU5BTUlDREVQCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NPUkVfSU5TVCwgMHgwNTA4KQorI2RlZmluZSBPTUFQNF9DTV9EMkRfU0FEMkRfQ0xLQ1RSTF9PRkZTRVQJCTB4MDUyMAorI2RlZmluZSBPTUFQNDQzMF9DTV9EMkRfU0FEMkRfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DT1JFX0lOU1QsIDB4MDUyMCkKKyNkZWZpbmUgT01BUDRfQ01fRDJEX0lOU1RFTV9JQ1JfQ0xLQ1RSTF9PRkZTRVQJCTB4MDUyOAorI2RlZmluZSBPTUFQNDQzMF9DTV9EMkRfSU5TVEVNX0lDUl9DTEtDVFJMCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ09SRV9JTlNULCAweDA1MjgpCisjZGVmaW5lIE9NQVA0X0NNX0QyRF9TQUQyRF9GV19DTEtDVFJMX09GRlNFVAkJMHgwNTMwCisjZGVmaW5lIE9NQVA0NDMwX0NNX0QyRF9TQUQyRF9GV19DTEtDVFJMCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ09SRV9JTlNULCAweDA1MzApCisjZGVmaW5lIE9NQVA0X0NNX0w0Q0ZHX0NMS1NUQ1RSTF9PRkZTRVQJCQkweDA2MDAKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDRDRkdfQ0xLU1RDVFJMCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NPUkVfSU5TVCwgMHgwNjAwKQorI2RlZmluZSBPTUFQNF9DTV9MNENGR19EWU5BTUlDREVQX09GRlNFVAkJMHgwNjA4CisjZGVmaW5lIE9NQVA0NDMwX0NNX0w0Q0ZHX0RZTkFNSUNERVAJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ09SRV9JTlNULCAweDA2MDgpCisjZGVmaW5lIE9NQVA0X0NNX0w0Q0ZHX0w0X0NGR19DTEtDVFJMX09GRlNFVAkJMHgwNjIwCisjZGVmaW5lIE9NQVA0NDMwX0NNX0w0Q0ZHX0w0X0NGR19DTEtDVFJMCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ09SRV9JTlNULCAweDA2MjApCisjZGVmaW5lIE9NQVA0X0NNX0w0Q0ZHX0hXX1NFTV9DTEtDVFJMX09GRlNFVAkJMHgwNjI4CisjZGVmaW5lIE9NQVA0NDMwX0NNX0w0Q0ZHX0hXX1NFTV9DTEtDVFJMCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ09SRV9JTlNULCAweDA2MjgpCisjZGVmaW5lIE9NQVA0X0NNX0w0Q0ZHX01BSUxCT1hfQ0xLQ1RSTF9PRkZTRVQJCTB4MDYzMAorI2RlZmluZSBPTUFQNDQzMF9DTV9MNENGR19NQUlMQk9YX0NMS0NUUkwJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DT1JFX0lOU1QsIDB4MDYzMCkKKyNkZWZpbmUgT01BUDRfQ01fTDRDRkdfU0FSX1JPTV9DTEtDVFJMX09GRlNFVAkJMHgwNjM4CisjZGVmaW5lIE9NQVA0NDMwX0NNX0w0Q0ZHX1NBUl9ST01fQ0xLQ1RSTAkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NPUkVfSU5TVCwgMHgwNjM4KQorI2RlZmluZSBPTUFQNF9DTV9MM0lOU1RSX0NMS1NUQ1RSTF9PRkZTRVQJCTB4MDcwMAorI2RlZmluZSBPTUFQNDQzMF9DTV9MM0lOU1RSX0NMS1NUQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DT1JFX0lOU1QsIDB4MDcwMCkKKyNkZWZpbmUgT01BUDRfQ01fTDNJTlNUUl9MM18zX0NMS0NUUkxfT0ZGU0VUCQkweDA3MjAKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDNJTlNUUl9MM18zX0NMS0NUUkwJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DT1JFX0lOU1QsIDB4MDcyMCkKKyNkZWZpbmUgT01BUDRfQ01fTDNJTlNUUl9MM19JTlNUUl9DTEtDVFJMX09GRlNFVAkweDA3MjgKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDNJTlNUUl9MM19JTlNUUl9DTEtDVFJMCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ09SRV9JTlNULCAweDA3MjgpCisjZGVmaW5lIE9NQVA0X0NNX0wzSU5TVFJfT0NQX1dQMV9DTEtDVFJMX09GRlNFVAkJMHgwNzQwCisjZGVmaW5lIE9NQVA0NDMwX0NNX0wzSU5TVFJfT0NQX1dQMV9DTEtDVFJMCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ09SRV9JTlNULCAweDA3NDApCisKKy8qIENNMi5JVkFIRF9DTTIgcmVnaXN0ZXIgb2Zmc2V0cyAqLworI2RlZmluZSBPTUFQNF9DTV9JVkFIRF9DTEtTVENUUkxfT0ZGU0VUCQkJMHgwMDAwCisjZGVmaW5lIE9NQVA0NDMwX0NNX0lWQUhEX0NMS1NUQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9JVkFIRF9JTlNULCAweDAwMDApCisjZGVmaW5lIE9NQVA0X0NNX0lWQUhEX1NUQVRJQ0RFUF9PRkZTRVQJCQkweDAwMDQKKyNkZWZpbmUgT01BUDQ0MzBfQ01fSVZBSERfU1RBVElDREVQCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0lWQUhEX0lOU1QsIDB4MDAwNCkKKyNkZWZpbmUgT01BUDRfQ01fSVZBSERfRFlOQU1JQ0RFUF9PRkZTRVQJCTB4MDAwOAorI2RlZmluZSBPTUFQNDQzMF9DTV9JVkFIRF9EWU5BTUlDREVQCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0lWQUhEX0lOU1QsIDB4MDAwOCkKKyNkZWZpbmUgT01BUDRfQ01fSVZBSERfSVZBSERfQ0xLQ1RSTF9PRkZTRVQJCTB4MDAyMAorI2RlZmluZSBPTUFQNDQzMF9DTV9JVkFIRF9JVkFIRF9DTEtDVFJMCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0lWQUhEX0lOU1QsIDB4MDAyMCkKKyNkZWZpbmUgT01BUDRfQ01fSVZBSERfU0wyX0NMS0NUUkxfT0ZGU0VUCQkweDAwMjgKKyNkZWZpbmUgT01BUDQ0MzBfQ01fSVZBSERfU0wyX0NMS0NUUkwJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfSVZBSERfSU5TVCwgMHgwMDI4KQorCisvKiBDTTIuQ0FNX0NNMiByZWdpc3RlciBvZmZzZXRzICovCisjZGVmaW5lIE9NQVA0X0NNX0NBTV9DTEtTVENUUkxfT0ZGU0VUCQkJMHgwMDAwCisjZGVmaW5lIE9NQVA0NDMwX0NNX0NBTV9DTEtTVENUUkwJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ0FNX0lOU1QsIDB4MDAwMCkKKyNkZWZpbmUgT01BUDRfQ01fQ0FNX1NUQVRJQ0RFUF9PRkZTRVQJCQkweDAwMDQKKyNkZWZpbmUgT01BUDQ0MzBfQ01fQ0FNX1NUQVRJQ0RFUAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DQU1fSU5TVCwgMHgwMDA0KQorI2RlZmluZSBPTUFQNF9DTV9DQU1fRFlOQU1JQ0RFUF9PRkZTRVQJCQkweDAwMDgKKyNkZWZpbmUgT01BUDQ0MzBfQ01fQ0FNX0RZTkFNSUNERVAJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ0FNX0lOU1QsIDB4MDAwOCkKKyNkZWZpbmUgT01BUDRfQ01fQ0FNX0lTU19DTEtDVFJMX09GRlNFVAkJCTB4MDAyMAorI2RlZmluZSBPTUFQNDQzMF9DTV9DQU1fSVNTX0NMS0NUUkwJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ0FNX0lOU1QsIDB4MDAyMCkKKyNkZWZpbmUgT01BUDRfQ01fQ0FNX0ZESUZfQ0xLQ1RSTF9PRkZTRVQJCTB4MDAyOAorI2RlZmluZSBPTUFQNDQzMF9DTV9DQU1fRkRJRl9DTEtDVFJMCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NBTV9JTlNULCAweDAwMjgpCisKKy8qIENNMi5EU1NfQ00yIHJlZ2lzdGVyIG9mZnNldHMgKi8KKyNkZWZpbmUgT01BUDRfQ01fRFNTX0NMS1NUQ1RSTF9PRkZTRVQJCQkweDAwMDAKKyNkZWZpbmUgT01BUDQ0MzBfQ01fRFNTX0NMS1NUQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9EU1NfSU5TVCwgMHgwMDAwKQorI2RlZmluZSBPTUFQNF9DTV9EU1NfU1RBVElDREVQX09GRlNFVAkJCTB4MDAwNAorI2RlZmluZSBPTUFQNDQzMF9DTV9EU1NfU1RBVElDREVQCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0RTU19JTlNULCAweDAwMDQpCisjZGVmaW5lIE9NQVA0X0NNX0RTU19EWU5BTUlDREVQX09GRlNFVAkJCTB4MDAwOAorI2RlZmluZSBPTUFQNDQzMF9DTV9EU1NfRFlOQU1JQ0RFUAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9EU1NfSU5TVCwgMHgwMDA4KQorI2RlZmluZSBPTUFQNF9DTV9EU1NfRFNTX0NMS0NUUkxfT0ZGU0VUCQkJMHgwMDIwCisjZGVmaW5lIE9NQVA0NDMwX0NNX0RTU19EU1NfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9EU1NfSU5TVCwgMHgwMDIwKQorI2RlZmluZSBPTUFQNF9DTV9EU1NfREVJU1NfQ0xLQ1RSTF9PRkZTRVQJCTB4MDAyOAorI2RlZmluZSBPTUFQNDQzMF9DTV9EU1NfREVJU1NfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9EU1NfSU5TVCwgMHgwMDI4KQorCisvKiBDTTIuR0ZYX0NNMiByZWdpc3RlciBvZmZzZXRzICovCisjZGVmaW5lIE9NQVA0X0NNX0dGWF9DTEtTVENUUkxfT0ZGU0VUCQkJMHgwMDAwCisjZGVmaW5lIE9NQVA0NDMwX0NNX0dGWF9DTEtTVENUUkwJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfR0ZYX0lOU1QsIDB4MDAwMCkKKyNkZWZpbmUgT01BUDRfQ01fR0ZYX1NUQVRJQ0RFUF9PRkZTRVQJCQkweDAwMDQKKyNkZWZpbmUgT01BUDQ0MzBfQ01fR0ZYX1NUQVRJQ0RFUAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9HRlhfSU5TVCwgMHgwMDA0KQorI2RlZmluZSBPTUFQNF9DTV9HRlhfRFlOQU1JQ0RFUF9PRkZTRVQJCQkweDAwMDgKKyNkZWZpbmUgT01BUDQ0MzBfQ01fR0ZYX0RZTkFNSUNERVAJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfR0ZYX0lOU1QsIDB4MDAwOCkKKyNkZWZpbmUgT01BUDRfQ01fR0ZYX0dGWF9DTEtDVFJMX09GRlNFVAkJCTB4MDAyMAorI2RlZmluZSBPTUFQNDQzMF9DTV9HRlhfR0ZYX0NMS0NUUkwJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfR0ZYX0lOU1QsIDB4MDAyMCkKKworLyogQ00yLkwzSU5JVF9DTTIgcmVnaXN0ZXIgb2Zmc2V0cyAqLworI2RlZmluZSBPTUFQNF9DTV9MM0lOSVRfQ0xLU1RDVFJMX09GRlNFVAkJMHgwMDAwCisjZGVmaW5lIE9NQVA0NDMwX0NNX0wzSU5JVF9DTEtTVENUUkwJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDNJTklUX0lOU1QsIDB4MDAwMCkKKyNkZWZpbmUgT01BUDRfQ01fTDNJTklUX1NUQVRJQ0RFUF9PRkZTRVQJCTB4MDAwNAorI2RlZmluZSBPTUFQNDQzMF9DTV9MM0lOSVRfU1RBVElDREVQCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0wzSU5JVF9JTlNULCAweDAwMDQpCisjZGVmaW5lIE9NQVA0X0NNX0wzSU5JVF9EWU5BTUlDREVQX09GRlNFVAkJMHgwMDA4CisjZGVmaW5lIE9NQVA0NDMwX0NNX0wzSU5JVF9EWU5BTUlDREVQCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0wzSU5JVF9JTlNULCAweDAwMDgpCisjZGVmaW5lIE9NQVA0X0NNX0wzSU5JVF9NTUMxX0NMS0NUUkxfT0ZGU0VUCQkweDAwMjgKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDNJTklUX01NQzFfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MM0lOSVRfSU5TVCwgMHgwMDI4KQorI2RlZmluZSBPTUFQNF9DTV9MM0lOSVRfTU1DMl9DTEtDVFJMX09GRlNFVAkJMHgwMDMwCisjZGVmaW5lIE9NQVA0NDMwX0NNX0wzSU5JVF9NTUMyX0NMS0NUUkwJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDNJTklUX0lOU1QsIDB4MDAzMCkKKyNkZWZpbmUgT01BUDRfQ01fTDNJTklUX0hTSV9DTEtDVFJMX09GRlNFVAkJMHgwMDM4CisjZGVmaW5lIE9NQVA0NDMwX0NNX0wzSU5JVF9IU0lfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MM0lOSVRfSU5TVCwgMHgwMDM4KQorI2RlZmluZSBPTUFQNF9DTV9MM0lOSVRfVU5JUFJPMV9DTEtDVFJMX09GRlNFVAkJMHgwMDQwCisjZGVmaW5lIE9NQVA0NDMwX0NNX0wzSU5JVF9VTklQUk8xX0NMS0NUUkwJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MM0lOSVRfSU5TVCwgMHgwMDQwKQorI2RlZmluZSBPTUFQNF9DTV9MM0lOSVRfVVNCX0hPU1RfQ0xLQ1RSTF9PRkZTRVQJCTB4MDA1OAorI2RlZmluZSBPTUFQNDQzMF9DTV9MM0lOSVRfVVNCX0hPU1RfQ0xLQ1RSTAkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0wzSU5JVF9JTlNULCAweDAwNTgpCisjZGVmaW5lIE9NQVA0X0NNX0wzSU5JVF9VU0JfT1RHX0NMS0NUUkxfT0ZGU0VUCQkweDAwNjAKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDNJTklUX1VTQl9PVEdfQ0xLQ1RSTAkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0wzSU5JVF9JTlNULCAweDAwNjApCisjZGVmaW5lIE9NQVA0X0NNX0wzSU5JVF9VU0JfVExMX0NMS0NUUkxfT0ZGU0VUCQkweDAwNjgKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDNJTklUX1VTQl9UTExfQ0xLQ1RSTAkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0wzSU5JVF9JTlNULCAweDAwNjgpCisjZGVmaW5lIE9NQVA0X0NNX0wzSU5JVF9QMTUwMF9DTEtDVFJMX09GRlNFVAkJMHgwMDc4CisjZGVmaW5lIE9NQVA0NDMwX0NNX0wzSU5JVF9QMTUwMF9DTEtDVFJMCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDNJTklUX0lOU1QsIDB4MDA3OCkKKyNkZWZpbmUgT01BUDRfQ01fTDNJTklUX0VNQUNfQ0xLQ1RSTF9PRkZTRVQJCTB4MDA4MAorI2RlZmluZSBPTUFQNDQzMF9DTV9MM0lOSVRfRU1BQ19DTEtDVFJMCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0wzSU5JVF9JTlNULCAweDAwODApCisjZGVmaW5lIE9NQVA0X0NNX0wzSU5JVF9TQVRBX0NMS0NUUkxfT0ZGU0VUCQkweDAwODgKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDNJTklUX1NBVEFfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MM0lOSVRfSU5TVCwgMHgwMDg4KQorI2RlZmluZSBPTUFQNF9DTV9MM0lOSVRfVFBQU1NfQ0xLQ1RSTF9PRkZTRVQJCTB4MDA5MAorI2RlZmluZSBPTUFQNDQzMF9DTV9MM0lOSVRfVFBQU1NfQ0xLQ1RSTAkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0wzSU5JVF9JTlNULCAweDAwOTApCisjZGVmaW5lIE9NQVA0X0NNX0wzSU5JVF9QQ0lFU1NfQ0xLQ1RSTF9PRkZTRVQJCTB4MDA5OAorI2RlZmluZSBPTUFQNDQzMF9DTV9MM0lOSVRfUENJRVNTX0NMS0NUUkwJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MM0lOSVRfSU5TVCwgMHgwMDk4KQorI2RlZmluZSBPTUFQNF9DTV9MM0lOSVRfQ0NQVFhfQ0xLQ1RSTF9PRkZTRVQJCTB4MDBhOAorI2RlZmluZSBPTUFQNDQzMF9DTV9MM0lOSVRfQ0NQVFhfQ0xLQ1RSTAkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0wzSU5JVF9JTlNULCAweDAwYTgpCisjZGVmaW5lIE9NQVA0X0NNX0wzSU5JVF9YSFBJX0NMS0NUUkxfT0ZGU0VUCQkweDAwYzAKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDNJTklUX1hIUElfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MM0lOSVRfSU5TVCwgMHgwMGMwKQorI2RlZmluZSBPTUFQNF9DTV9MM0lOSVRfTU1DNl9DTEtDVFJMX09GRlNFVAkJMHgwMGM4CisjZGVmaW5lIE9NQVA0NDMwX0NNX0wzSU5JVF9NTUM2X0NMS0NUUkwJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDNJTklUX0lOU1QsIDB4MDBjOCkKKyNkZWZpbmUgT01BUDRfQ01fTDNJTklUX1VTQl9IT1NUX0ZTX0NMS0NUUkxfT0ZGU0VUCTB4MDBkMAorI2RlZmluZSBPTUFQNDQzMF9DTV9MM0lOSVRfVVNCX0hPU1RfRlNfQ0xLQ1RSTAkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0wzSU5JVF9JTlNULCAweDAwZDApCisjZGVmaW5lIE9NQVA0X0NNX0wzSU5JVF9VU0JQSFlPQ1AyU0NQX0NMS0NUUkxfT0ZGU0VUCTB4MDBlMAorI2RlZmluZSBPTUFQNDQzMF9DTV9MM0lOSVRfVVNCUEhZT0NQMlNDUF9DTEtDVFJMCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MM0lOSVRfSU5TVCwgMHgwMGUwKQorCisvKiBDTTIuTDRQRVJfQ00yIHJlZ2lzdGVyIG9mZnNldHMgKi8KKyNkZWZpbmUgT01BUDRfQ01fTDRQRVJfQ0xLU1RDVFJMX09GRlNFVAkJCTB4MDAwMAorI2RlZmluZSBPTUFQNDQzMF9DTV9MNFBFUl9DTEtTVENUUkwJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDRQRVJfSU5TVCwgMHgwMDAwKQorI2RlZmluZSBPTUFQNF9DTV9MNFBFUl9EWU5BTUlDREVQX09GRlNFVAkJMHgwMDA4CisjZGVmaW5lIE9NQVA0NDMwX0NNX0w0UEVSX0RZTkFNSUNERVAJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDRQRVJfSU5TVCwgMHgwMDA4KQorI2RlZmluZSBPTUFQNF9DTV9MNFBFUl9BRENfQ0xLQ1RSTF9PRkZTRVQJCTB4MDAyMAorI2RlZmluZSBPTUFQNDQzMF9DTV9MNFBFUl9BRENfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MNFBFUl9JTlNULCAweDAwMjApCisjZGVmaW5lIE9NQVA0X0NNX0w0UEVSX0RNVElNRVIxMF9DTEtDVFJMX09GRlNFVAkJMHgwMDI4CisjZGVmaW5lIE9NQVA0NDMwX0NNX0w0UEVSX0RNVElNRVIxMF9DTEtDVFJMCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDRQRVJfSU5TVCwgMHgwMDI4KQorI2RlZmluZSBPTUFQNF9DTV9MNFBFUl9ETVRJTUVSMTFfQ0xLQ1RSTF9PRkZTRVQJCTB4MDAzMAorI2RlZmluZSBPTUFQNDQzMF9DTV9MNFBFUl9ETVRJTUVSMTFfQ0xLQ1RSTAkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0w0UEVSX0lOU1QsIDB4MDAzMCkKKyNkZWZpbmUgT01BUDRfQ01fTDRQRVJfRE1USU1FUjJfQ0xLQ1RSTF9PRkZTRVQJCTB4MDAzOAorI2RlZmluZSBPTUFQNDQzMF9DTV9MNFBFUl9ETVRJTUVSMl9DTEtDVFJMCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDRQRVJfSU5TVCwgMHgwMDM4KQorI2RlZmluZSBPTUFQNF9DTV9MNFBFUl9ETVRJTUVSM19DTEtDVFJMX09GRlNFVAkJMHgwMDQwCisjZGVmaW5lIE9NQVA0NDMwX0NNX0w0UEVSX0RNVElNRVIzX0NMS0NUUkwJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MNFBFUl9JTlNULCAweDAwNDApCisjZGVmaW5lIE9NQVA0X0NNX0w0UEVSX0RNVElNRVI0X0NMS0NUUkxfT0ZGU0VUCQkweDAwNDgKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDRQRVJfRE1USU1FUjRfQ0xLQ1RSTAkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0w0UEVSX0lOU1QsIDB4MDA0OCkKKyNkZWZpbmUgT01BUDRfQ01fTDRQRVJfRE1USU1FUjlfQ0xLQ1RSTF9PRkZTRVQJCTB4MDA1MAorI2RlZmluZSBPTUFQNDQzMF9DTV9MNFBFUl9ETVRJTUVSOV9DTEtDVFJMCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDRQRVJfSU5TVCwgMHgwMDUwKQorI2RlZmluZSBPTUFQNF9DTV9MNFBFUl9FTE1fQ0xLQ1RSTF9PRkZTRVQJCTB4MDA1OAorI2RlZmluZSBPTUFQNDQzMF9DTV9MNFBFUl9FTE1fQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MNFBFUl9JTlNULCAweDAwNTgpCisjZGVmaW5lIE9NQVA0X0NNX0w0UEVSX0dQSU8yX0NMS0NUUkxfT0ZGU0VUCQkweDAwNjAKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDRQRVJfR1BJTzJfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MNFBFUl9JTlNULCAweDAwNjApCisjZGVmaW5lIE9NQVA0X0NNX0w0UEVSX0dQSU8zX0NMS0NUUkxfT0ZGU0VUCQkweDAwNjgKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDRQRVJfR1BJTzNfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MNFBFUl9JTlNULCAweDAwNjgpCisjZGVmaW5lIE9NQVA0X0NNX0w0UEVSX0dQSU80X0NMS0NUUkxfT0ZGU0VUCQkweDAwNzAKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDRQRVJfR1BJTzRfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MNFBFUl9JTlNULCAweDAwNzApCisjZGVmaW5lIE9NQVA0X0NNX0w0UEVSX0dQSU81X0NMS0NUUkxfT0ZGU0VUCQkweDAwNzgKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDRQRVJfR1BJTzVfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MNFBFUl9JTlNULCAweDAwNzgpCisjZGVmaW5lIE9NQVA0X0NNX0w0UEVSX0dQSU82X0NMS0NUUkxfT0ZGU0VUCQkweDAwODAKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDRQRVJfR1BJTzZfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MNFBFUl9JTlNULCAweDAwODApCisjZGVmaW5lIE9NQVA0X0NNX0w0UEVSX0hEUTFXX0NMS0NUUkxfT0ZGU0VUCQkweDAwODgKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDRQRVJfSERRMVdfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MNFBFUl9JTlNULCAweDAwODgpCisjZGVmaW5lIE9NQVA0X0NNX0w0UEVSX0hFQ0MxX0NMS0NUUkxfT0ZGU0VUCQkweDAwOTAKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDRQRVJfSEVDQzFfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MNFBFUl9JTlNULCAweDAwOTApCisjZGVmaW5lIE9NQVA0X0NNX0w0UEVSX0hFQ0MyX0NMS0NUUkxfT0ZGU0VUCQkweDAwOTgKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDRQRVJfSEVDQzJfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MNFBFUl9JTlNULCAweDAwOTgpCisjZGVmaW5lIE9NQVA0X0NNX0w0UEVSX0kyQzFfQ0xLQ1RSTF9PRkZTRVQJCTB4MDBhMAorI2RlZmluZSBPTUFQNDQzMF9DTV9MNFBFUl9JMkMxX0NMS0NUUkwJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDRQRVJfSU5TVCwgMHgwMGEwKQorI2RlZmluZSBPTUFQNF9DTV9MNFBFUl9JMkMyX0NMS0NUUkxfT0ZGU0VUCQkweDAwYTgKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDRQRVJfSTJDMl9DTEtDVFJMCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0w0UEVSX0lOU1QsIDB4MDBhOCkKKyNkZWZpbmUgT01BUDRfQ01fTDRQRVJfSTJDM19DTEtDVFJMX09GRlNFVAkJMHgwMGIwCisjZGVmaW5lIE9NQVA0NDMwX0NNX0w0UEVSX0kyQzNfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MNFBFUl9JTlNULCAweDAwYjApCisjZGVmaW5lIE9NQVA0X0NNX0w0UEVSX0kyQzRfQ0xLQ1RSTF9PRkZTRVQJCTB4MDBiOAorI2RlZmluZSBPTUFQNDQzMF9DTV9MNFBFUl9JMkM0X0NMS0NUUkwJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDRQRVJfSU5TVCwgMHgwMGI4KQorI2RlZmluZSBPTUFQNF9DTV9MNFBFUl9MNFBFUl9DTEtDVFJMX09GRlNFVAkJMHgwMGMwCisjZGVmaW5lIE9NQVA0NDMwX0NNX0w0UEVSX0w0UEVSX0NMS0NUUkwJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDRQRVJfSU5TVCwgMHgwMGMwKQorI2RlZmluZSBPTUFQNF9DTV9MNFBFUl9NQ0FTUDJfQ0xLQ1RSTF9PRkZTRVQJCTB4MDBkMAorI2RlZmluZSBPTUFQNDQzMF9DTV9MNFBFUl9NQ0FTUDJfQ0xLQ1RSTAkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0w0UEVSX0lOU1QsIDB4MDBkMCkKKyNkZWZpbmUgT01BUDRfQ01fTDRQRVJfTUNBU1AzX0NMS0NUUkxfT0ZGU0VUCQkweDAwZDgKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDRQRVJfTUNBU1AzX0NMS0NUUkwJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MNFBFUl9JTlNULCAweDAwZDgpCisjZGVmaW5lIE9NQVA0X0NNX0w0UEVSX01DQlNQNF9DTEtDVFJMX09GRlNFVAkJMHgwMGUwCisjZGVmaW5lIE9NQVA0NDMwX0NNX0w0UEVSX01DQlNQNF9DTEtDVFJMCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDRQRVJfSU5TVCwgMHgwMGUwKQorI2RlZmluZSBPTUFQNF9DTV9MNFBFUl9NR0FURV9DTEtDVFJMX09GRlNFVAkJMHgwMGU4CisjZGVmaW5lIE9NQVA0NDMwX0NNX0w0UEVSX01HQVRFX0NMS0NUUkwJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDRQRVJfSU5TVCwgMHgwMGU4KQorI2RlZmluZSBPTUFQNF9DTV9MNFBFUl9NQ1NQSTFfQ0xLQ1RSTF9PRkZTRVQJCTB4MDBmMAorI2RlZmluZSBPTUFQNDQzMF9DTV9MNFBFUl9NQ1NQSTFfQ0xLQ1RSTAkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0w0UEVSX0lOU1QsIDB4MDBmMCkKKyNkZWZpbmUgT01BUDRfQ01fTDRQRVJfTUNTUEkyX0NMS0NUUkxfT0ZGU0VUCQkweDAwZjgKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDRQRVJfTUNTUEkyX0NMS0NUUkwJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MNFBFUl9JTlNULCAweDAwZjgpCisjZGVmaW5lIE9NQVA0X0NNX0w0UEVSX01DU1BJM19DTEtDVFJMX09GRlNFVAkJMHgwMTAwCisjZGVmaW5lIE9NQVA0NDMwX0NNX0w0UEVSX01DU1BJM19DTEtDVFJMCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDRQRVJfSU5TVCwgMHgwMTAwKQorI2RlZmluZSBPTUFQNF9DTV9MNFBFUl9NQ1NQSTRfQ0xLQ1RSTF9PRkZTRVQJCTB4MDEwOAorI2RlZmluZSBPTUFQNDQzMF9DTV9MNFBFUl9NQ1NQSTRfQ0xLQ1RSTAkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0w0UEVSX0lOU1QsIDB4MDEwOCkKKyNkZWZpbmUgT01BUDRfQ01fTDRQRVJfTU1DU0QzX0NMS0NUUkxfT0ZGU0VUCQkweDAxMjAKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDRQRVJfTU1DU0QzX0NMS0NUUkwJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MNFBFUl9JTlNULCAweDAxMjApCisjZGVmaW5lIE9NQVA0X0NNX0w0UEVSX01NQ1NENF9DTEtDVFJMX09GRlNFVAkJMHgwMTI4CisjZGVmaW5lIE9NQVA0NDMwX0NNX0w0UEVSX01NQ1NENF9DTEtDVFJMCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDRQRVJfSU5TVCwgMHgwMTI4KQorI2RlZmluZSBPTUFQNF9DTV9MNFBFUl9NU1BST0hHX0NMS0NUUkxfT0ZGU0VUCQkweDAxMzAKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDRQRVJfTVNQUk9IR19DTEtDVFJMCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDRQRVJfSU5TVCwgMHgwMTMwKQorI2RlZmluZSBPTUFQNF9DTV9MNFBFUl9TTElNQlVTMl9DTEtDVFJMX09GRlNFVAkJMHgwMTM4CisjZGVmaW5lIE9NQVA0NDMwX0NNX0w0UEVSX1NMSU1CVVMyX0NMS0NUUkwJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MNFBFUl9JTlNULCAweDAxMzgpCisjZGVmaW5lIE9NQVA0X0NNX0w0UEVSX1VBUlQxX0NMS0NUUkxfT0ZGU0VUCQkweDAxNDAKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDRQRVJfVUFSVDFfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MNFBFUl9JTlNULCAweDAxNDApCisjZGVmaW5lIE9NQVA0X0NNX0w0UEVSX1VBUlQyX0NMS0NUUkxfT0ZGU0VUCQkweDAxNDgKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDRQRVJfVUFSVDJfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MNFBFUl9JTlNULCAweDAxNDgpCisjZGVmaW5lIE9NQVA0X0NNX0w0UEVSX1VBUlQzX0NMS0NUUkxfT0ZGU0VUCQkweDAxNTAKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDRQRVJfVUFSVDNfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MNFBFUl9JTlNULCAweDAxNTApCisjZGVmaW5lIE9NQVA0X0NNX0w0UEVSX1VBUlQ0X0NMS0NUUkxfT0ZGU0VUCQkweDAxNTgKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDRQRVJfVUFSVDRfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MNFBFUl9JTlNULCAweDAxNTgpCisjZGVmaW5lIE9NQVA0X0NNX0w0UEVSX01NQ1NENV9DTEtDVFJMX09GRlNFVAkJMHgwMTYwCisjZGVmaW5lIE9NQVA0NDMwX0NNX0w0UEVSX01NQ1NENV9DTEtDVFJMCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDRQRVJfSU5TVCwgMHgwMTYwKQorI2RlZmluZSBPTUFQNF9DTV9MNFBFUl9JMkM1X0NMS0NUUkxfT0ZGU0VUCQkweDAxNjgKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDRQRVJfSTJDNV9DTEtDVFJMCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0w0UEVSX0lOU1QsIDB4MDE2OCkKKyNkZWZpbmUgT01BUDRfQ01fTDRTRUNfQ0xLU1RDVFJMX09GRlNFVAkJCTB4MDE4MAorI2RlZmluZSBPTUFQNDQzMF9DTV9MNFNFQ19DTEtTVENUUkwJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDRQRVJfSU5TVCwgMHgwMTgwKQorI2RlZmluZSBPTUFQNF9DTV9MNFNFQ19TVEFUSUNERVBfT0ZGU0VUCQkJMHgwMTg0CisjZGVmaW5lIE9NQVA0NDMwX0NNX0w0U0VDX1NUQVRJQ0RFUAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MNFBFUl9JTlNULCAweDAxODQpCisjZGVmaW5lIE9NQVA0X0NNX0w0U0VDX0RZTkFNSUNERVBfT0ZGU0VUCQkweDAxODgKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDRTRUNfRFlOQU1JQ0RFUAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MNFBFUl9JTlNULCAweDAxODgpCisjZGVmaW5lIE9NQVA0X0NNX0w0U0VDX0FFUzFfQ0xLQ1RSTF9PRkZTRVQJCTB4MDFhMAorI2RlZmluZSBPTUFQNDQzMF9DTV9MNFNFQ19BRVMxX0NMS0NUUkwJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDRQRVJfSU5TVCwgMHgwMWEwKQorI2RlZmluZSBPTUFQNF9DTV9MNFNFQ19BRVMyX0NMS0NUUkxfT0ZGU0VUCQkweDAxYTgKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDRTRUNfQUVTMl9DTEtDVFJMCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0w0UEVSX0lOU1QsIDB4MDFhOCkKKyNkZWZpbmUgT01BUDRfQ01fTDRTRUNfREVTM0RFU19DTEtDVFJMX09GRlNFVAkJMHgwMWIwCisjZGVmaW5lIE9NQVA0NDMwX0NNX0w0U0VDX0RFUzNERVNfQ0xLQ1RSTAkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0w0UEVSX0lOU1QsIDB4MDFiMCkKKyNkZWZpbmUgT01BUDRfQ01fTDRTRUNfUEtBRUlQMjlfQ0xLQ1RSTF9PRkZTRVQJCTB4MDFiOAorI2RlZmluZSBPTUFQNDQzMF9DTV9MNFNFQ19QS0FFSVAyOV9DTEtDVFJMCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDRQRVJfSU5TVCwgMHgwMWI4KQorI2RlZmluZSBPTUFQNF9DTV9MNFNFQ19STkdfQ0xLQ1RSTF9PRkZTRVQJCTB4MDFjMAorI2RlZmluZSBPTUFQNDQzMF9DTV9MNFNFQ19STkdfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MNFBFUl9JTlNULCAweDAxYzApCisjZGVmaW5lIE9NQVA0X0NNX0w0U0VDX1NIQTJNRDUxX0NMS0NUUkxfT0ZGU0VUCQkweDAxYzgKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDRTRUNfU0hBMk1ENTFfQ0xLQ1RSTAkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0w0UEVSX0lOU1QsIDB4MDFjOCkKKyNkZWZpbmUgT01BUDRfQ01fTDRTRUNfQ1JZUFRPRE1BX0NMS0NUUkxfT0ZGU0VUCQkweDAxZDgKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDRTRUNfQ1JZUFRPRE1BX0NMS0NUUkwJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MNFBFUl9JTlNULCAweDAxZDgpCisKKy8qIENNMi5DRUZVU0VfQ00yIHJlZ2lzdGVyIG9mZnNldHMgKi8KKyNkZWZpbmUgT01BUDRfQ01fQ0VGVVNFX0NMS1NUQ1RSTF9PRkZTRVQJCTB4MDAwMAorI2RlZmluZSBPTUFQNDQzMF9DTV9DRUZVU0VfQ0xLU1RDVFJMCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NFRlVTRV9JTlNULCAweDAwMDApCisjZGVmaW5lIE9NQVA0X0NNX0NFRlVTRV9DRUZVU0VfQ0xLQ1RSTF9PRkZTRVQJCTB4MDAyMAorI2RlZmluZSBPTUFQNDQzMF9DTV9DRUZVU0VfQ0VGVVNFX0NMS0NUUkwJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DRUZVU0VfSU5TVCwgMHgwMDIwKQorCisvKiBDTTIuUkVTVE9SRV9DTTIgcmVnaXN0ZXIgb2Zmc2V0cyAqLworI2RlZmluZSBPTUFQNF9DTV9MM18xX0NMS1NUQ1RSTF9SRVNUT1JFX09GRlNFVAkJMHgwMDAwCisjZGVmaW5lIE9NQVA0NDMwX0NNX0wzXzFfQ0xLU1RDVFJMX1JFU1RPUkUJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9SRVNUT1JFX0lOU1QsIDB4MDAwMCkKKyNkZWZpbmUgT01BUDRfQ01fTDNfMl9DTEtTVENUUkxfUkVTVE9SRV9PRkZTRVQJCTB4MDAwNAorI2RlZmluZSBPTUFQNDQzMF9DTV9MM18yX0NMS1NUQ1RSTF9SRVNUT1JFCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfUkVTVE9SRV9JTlNULCAweDAwMDQpCisjZGVmaW5lIE9NQVA0X0NNX0w0Q0ZHX0NMS1NUQ1RSTF9SRVNUT1JFX09GRlNFVAkJMHgwMDA4CisjZGVmaW5lIE9NQVA0NDMwX0NNX0w0Q0ZHX0NMS1NUQ1RSTF9SRVNUT1JFCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfUkVTVE9SRV9JTlNULCAweDAwMDgpCisjZGVmaW5lIE9NQVA0X0NNX01FTUlGX0NMS1NUQ1RSTF9SRVNUT1JFX09GRlNFVAkJMHgwMDBjCisjZGVmaW5lIE9NQVA0NDMwX0NNX01FTUlGX0NMS1NUQ1RSTF9SRVNUT1JFCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfUkVTVE9SRV9JTlNULCAweDAwMGMpCisjZGVmaW5lIE9NQVA0X0NNX0w0UEVSX0NMS1NUQ1RSTF9SRVNUT1JFX09GRlNFVAkJMHgwMDEwCisjZGVmaW5lIE9NQVA0NDMwX0NNX0w0UEVSX0NMS1NUQ1RSTF9SRVNUT1JFCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfUkVTVE9SRV9JTlNULCAweDAwMTApCisjZGVmaW5lIE9NQVA0X0NNX0wzSU5JVF9DTEtTVENUUkxfUkVTVE9SRV9PRkZTRVQJMHgwMDE0CisjZGVmaW5lIE9NQVA0NDMwX0NNX0wzSU5JVF9DTEtTVENUUkxfUkVTVE9SRQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX1JFU1RPUkVfSU5TVCwgMHgwMDE0KQorI2RlZmluZSBPTUFQNF9DTV9MM0lOU1RSX0wzXzNfQ0xLQ1RSTF9SRVNUT1JFX09GRlNFVAkweDAwMTgKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDNJTlNUUl9MM18zX0NMS0NUUkxfUkVTVE9SRQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfUkVTVE9SRV9JTlNULCAweDAwMTgpCisjZGVmaW5lIE9NQVA0X0NNX0wzSU5TVFJfTDNfSU5TVFJfQ0xLQ1RSTF9SRVNUT1JFX09GRlNFVAkweDAwMWMKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDNJTlNUUl9MM19JTlNUUl9DTEtDVFJMX1JFU1RPUkUJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX1JFU1RPUkVfSU5TVCwgMHgwMDFjKQorI2RlZmluZSBPTUFQNF9DTV9MM0lOU1RSX09DUF9XUDFfQ0xLQ1RSTF9SRVNUT1JFX09GRlNFVAkweDAwMjAKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDNJTlNUUl9PQ1BfV1AxX0NMS0NUUkxfUkVTVE9SRQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfUkVTVE9SRV9JTlNULCAweDAwMjApCisjZGVmaW5lIE9NQVA0X0NNX0NNMl9QUk9GSUxJTkdfQ0xLQ1RSTF9SRVNUT1JFX09GRlNFVAkweDAwMjQKKyNkZWZpbmUgT01BUDQ0MzBfQ01fQ00yX1BST0ZJTElOR19DTEtDVFJMX1JFU1RPUkUJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX1JFU1RPUkVfSU5TVCwgMHgwMDI0KQorI2RlZmluZSBPTUFQNF9DTV9EMkRfU1RBVElDREVQX1JFU1RPUkVfT0ZGU0VUCQkweDAwMjgKKyNkZWZpbmUgT01BUDQ0MzBfQ01fRDJEX1NUQVRJQ0RFUF9SRVNUT1JFCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfUkVTVE9SRV9JTlNULCAweDAwMjgpCisjZGVmaW5lIE9NQVA0X0NNX0wzXzFfRFlOQU1JQ0RFUF9SRVNUT1JFX09GRlNFVAkJMHgwMDJjCisjZGVmaW5lIE9NQVA0NDMwX0NNX0wzXzFfRFlOQU1JQ0RFUF9SRVNUT1JFCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfUkVTVE9SRV9JTlNULCAweDAwMmMpCisjZGVmaW5lIE9NQVA0X0NNX0wzXzJfRFlOQU1JQ0RFUF9SRVNUT1JFX09GRlNFVAkJMHgwMDMwCisjZGVmaW5lIE9NQVA0NDMwX0NNX0wzXzJfRFlOQU1JQ0RFUF9SRVNUT1JFCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfUkVTVE9SRV9JTlNULCAweDAwMzApCisjZGVmaW5lIE9NQVA0X0NNX0QyRF9EWU5BTUlDREVQX1JFU1RPUkVfT0ZGU0VUCQkweDAwMzQKKyNkZWZpbmUgT01BUDQ0MzBfQ01fRDJEX0RZTkFNSUNERVBfUkVTVE9SRQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX1JFU1RPUkVfSU5TVCwgMHgwMDM0KQorI2RlZmluZSBPTUFQNF9DTV9MNENGR19EWU5BTUlDREVQX1JFU1RPUkVfT0ZGU0VUCTB4MDAzOAorI2RlZmluZSBPTUFQNDQzMF9DTV9MNENGR19EWU5BTUlDREVQX1JFU1RPUkUJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9SRVNUT1JFX0lOU1QsIDB4MDAzOCkKKyNkZWZpbmUgT01BUDRfQ01fTDRQRVJfRFlOQU1JQ0RFUF9SRVNUT1JFX09GRlNFVAkweDAwM2MKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDRQRVJfRFlOQU1JQ0RFUF9SRVNUT1JFCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfUkVTVE9SRV9JTlNULCAweDAwM2MpCisjZGVmaW5lIE9NQVA0X0NNX0w0UEVSX0dQSU8yX0NMS0NUUkxfUkVTVE9SRV9PRkZTRVQJMHgwMDQwCisjZGVmaW5lIE9NQVA0NDMwX0NNX0w0UEVSX0dQSU8yX0NMS0NUUkxfUkVTVE9SRQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX1JFU1RPUkVfSU5TVCwgMHgwMDQwKQorI2RlZmluZSBPTUFQNF9DTV9MNFBFUl9HUElPM19DTEtDVFJMX1JFU1RPUkVfT0ZGU0VUCTB4MDA0NAorI2RlZmluZSBPTUFQNDQzMF9DTV9MNFBFUl9HUElPM19DTEtDVFJMX1JFU1RPUkUJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9SRVNUT1JFX0lOU1QsIDB4MDA0NCkKKyNkZWZpbmUgT01BUDRfQ01fTDRQRVJfR1BJTzRfQ0xLQ1RSTF9SRVNUT1JFX09GRlNFVAkweDAwNDgKKyNkZWZpbmUgT01BUDQ0MzBfQ01fTDRQRVJfR1BJTzRfQ0xLQ1RSTF9SRVNUT1JFCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfUkVTVE9SRV9JTlNULCAweDAwNDgpCisjZGVmaW5lIE9NQVA0X0NNX0w0UEVSX0dQSU81X0NMS0NUUkxfUkVTVE9SRV9PRkZTRVQJMHgwMDRjCisjZGVmaW5lIE9NQVA0NDMwX0NNX0w0UEVSX0dQSU81X0NMS0NUUkxfUkVTVE9SRQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX1JFU1RPUkVfSU5TVCwgMHgwMDRjKQorI2RlZmluZSBPTUFQNF9DTV9MNFBFUl9HUElPNl9DTEtDVFJMX1JFU1RPUkVfT0ZGU0VUCTB4MDA1MAorI2RlZmluZSBPTUFQNDQzMF9DTV9MNFBFUl9HUElPNl9DTEtDVFJMX1JFU1RPUkUJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9SRVNUT1JFX0lOU1QsIDB4MDA1MCkKKyNkZWZpbmUgT01BUDRfQ01fTDNJTklUX1VTQl9IT1NUX0NMS0NUUkxfUkVTVE9SRV9PRkZTRVQJMHgwMDU0CisjZGVmaW5lIE9NQVA0NDMwX0NNX0wzSU5JVF9VU0JfSE9TVF9DTEtDVFJMX1JFU1RPUkUJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX1JFU1RPUkVfSU5TVCwgMHgwMDU0KQorI2RlZmluZSBPTUFQNF9DTV9MM0lOSVRfVVNCX1RMTF9DTEtDVFJMX1JFU1RPUkVfT0ZGU0VUCTB4MDA1OAorI2RlZmluZSBPTUFQNDQzMF9DTV9MM0lOSVRfVVNCX1RMTF9DTEtDVFJMX1JFU1RPUkUJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX1JFU1RPUkVfSU5TVCwgMHgwMDU4KQorI2RlZmluZSBPTUFQNF9DTV9TRE1BX1NUQVRJQ0RFUF9SRVNUT1JFX09GRlNFVAkJMHgwMDVjCisjZGVmaW5lIE9NQVA0NDMwX0NNX1NETUFfU1RBVElDREVQX1JFU1RPUkUJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9SRVNUT1JFX0lOU1QsIDB4MDA1YykKKworLyogRnVuY3Rpb24gcHJvdG90eXBlcyAqLworZXh0ZXJuIHUzMiBvbWFwNF9jbTJfcmVhZF9pbnN0X3JlZyhzMTYgaW5zdCwgdTE2IGlkeCk7CitleHRlcm4gdm9pZCBvbWFwNF9jbTJfd3JpdGVfaW5zdF9yZWcodTMyIHZhbCwgczE2IGluc3QsIHUxNiBpZHgpOworZXh0ZXJuIHUzMiBvbWFwNF9jbTJfcm13X2luc3RfcmVnX2JpdHModTMyIG1hc2ssIHUzMiBiaXRzLCBzMTYgaW5zdCwgczE2IGlkeCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTJ4eHhfM3h4eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTJ4eHhfM3h4eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2OTU0YWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtMnh4eF8zeHh4LmMKQEAgLTAsMCArMSw0NzEgQEAKKy8qCisgKiBPTUFQMi8zIENNIG1vZHVsZSBmdW5jdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24KKyAqIFBhdWwgV2FsbXNsZXkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8cGxhdC9jb21tb24uaD4KKworI2luY2x1ZGUgImNtLmgiCisjaW5jbHVkZSAiY20yeHh4XzN4eHguaCIKKyNpbmNsdWRlICJjbS1yZWdiaXRzLTI0eHguaCIKKyNpbmNsdWRlICJjbS1yZWdiaXRzLTM0eHguaCIKKworc3RhdGljIGNvbnN0IHU4IGNtX2lkbGVzdF9vZmZzW10gPSB7CisJQ01fSURMRVNUMSwgQ01fSURMRVNUMiwgT01BUDI0MzBfQ01fSURMRVNUMworfTsKKwordTMyIG9tYXAyX2NtX3JlYWRfbW9kX3JlZyhzMTYgbW9kdWxlLCB1MTYgaWR4KQoreworCXJldHVybiBfX3Jhd19yZWFkbChjbV9iYXNlICsgbW9kdWxlICsgaWR4KTsKK30KKwordm9pZCBvbWFwMl9jbV93cml0ZV9tb2RfcmVnKHUzMiB2YWwsIHMxNiBtb2R1bGUsIHUxNiBpZHgpCit7CisJX19yYXdfd3JpdGVsKHZhbCwgY21fYmFzZSArIG1vZHVsZSArIGlkeCk7Cit9CisKKy8qIFJlYWQtbW9kaWZ5LXdyaXRlIGEgcmVnaXN0ZXIgaW4gYSBDTSBtb2R1bGUuIENhbGxlciBtdXN0IGxvY2sgKi8KK3UzMiBvbWFwMl9jbV9ybXdfbW9kX3JlZ19iaXRzKHUzMiBtYXNrLCB1MzIgYml0cywgczE2IG1vZHVsZSwgczE2IGlkeCkKK3sKKwl1MzIgdjsKKworCXYgPSBvbWFwMl9jbV9yZWFkX21vZF9yZWcobW9kdWxlLCBpZHgpOworCXYgJj0gfm1hc2s7CisJdiB8PSBiaXRzOworCW9tYXAyX2NtX3dyaXRlX21vZF9yZWcodiwgbW9kdWxlLCBpZHgpOworCisJcmV0dXJuIHY7Cit9CisKK3UzMiBvbWFwMl9jbV9zZXRfbW9kX3JlZ19iaXRzKHUzMiBiaXRzLCBzMTYgbW9kdWxlLCBzMTYgaWR4KQoreworCXJldHVybiBvbWFwMl9jbV9ybXdfbW9kX3JlZ19iaXRzKGJpdHMsIGJpdHMsIG1vZHVsZSwgaWR4KTsKK30KKwordTMyIG9tYXAyX2NtX2NsZWFyX21vZF9yZWdfYml0cyh1MzIgYml0cywgczE2IG1vZHVsZSwgczE2IGlkeCkKK3sKKwlyZXR1cm4gb21hcDJfY21fcm13X21vZF9yZWdfYml0cyhiaXRzLCAweDAsIG1vZHVsZSwgaWR4KTsKK30KKworLyoKKyAqCisgKi8KKworc3RhdGljIHZvaWQgX3dyaXRlX2Nsa3RyY3RybCh1OCBjLCBzMTYgbW9kdWxlLCB1MzIgbWFzaykKK3sKKwl1MzIgdjsKKworCXYgPSBvbWFwMl9jbV9yZWFkX21vZF9yZWcobW9kdWxlLCBPTUFQMl9DTV9DTEtTVENUUkwpOworCXYgJj0gfm1hc2s7CisJdiB8PSBjIDw8IF9fZmZzKG1hc2spOworCW9tYXAyX2NtX3dyaXRlX21vZF9yZWcodiwgbW9kdWxlLCBPTUFQMl9DTV9DTEtTVENUUkwpOworfQorCitib29sIG9tYXAyX2NtX2lzX2Nsa2RtX2luX2h3c3VwKHMxNiBtb2R1bGUsIHUzMiBtYXNrKQoreworCXUzMiB2OworCWJvb2wgcmV0ID0gMDsKKworCUJVR19PTighY3B1X2lzX29tYXAyNHh4KCkgJiYgIWNwdV9pc19vbWFwMzR4eCgpKTsKKworCXYgPSBvbWFwMl9jbV9yZWFkX21vZF9yZWcobW9kdWxlLCBPTUFQMl9DTV9DTEtTVENUUkwpOworCXYgJj0gbWFzazsKKwl2ID4+PSBfX2ZmcyhtYXNrKTsKKworCWlmIChjcHVfaXNfb21hcDI0eHgoKSkKKwkJcmV0ID0gKHYgPT0gT01BUDI0WFhfQ0xLU1RDVFJMX0VOQUJMRV9BVVRPKSA/IDEgOiAwOworCWVsc2UKKwkJcmV0ID0gKHYgPT0gT01BUDM0WFhfQ0xLU1RDVFJMX0VOQUJMRV9BVVRPKSA/IDEgOiAwOworCisJcmV0dXJuIHJldDsKK30KKwordm9pZCBvbWFwMnh4eF9jbV9jbGtkbV9lbmFibGVfaHdzdXAoczE2IG1vZHVsZSwgdTMyIG1hc2spCit7CisJX3dyaXRlX2Nsa3RyY3RybChPTUFQMjRYWF9DTEtTVENUUkxfRU5BQkxFX0FVVE8sIG1vZHVsZSwgbWFzayk7Cit9CisKK3ZvaWQgb21hcDJ4eHhfY21fY2xrZG1fZGlzYWJsZV9od3N1cChzMTYgbW9kdWxlLCB1MzIgbWFzaykKK3sKKwlfd3JpdGVfY2xrdHJjdHJsKE9NQVAyNFhYX0NMS1NUQ1RSTF9ESVNBQkxFX0FVVE8sIG1vZHVsZSwgbWFzayk7Cit9CisKK3ZvaWQgb21hcDN4eHhfY21fY2xrZG1fZW5hYmxlX2h3c3VwKHMxNiBtb2R1bGUsIHUzMiBtYXNrKQoreworCV93cml0ZV9jbGt0cmN0cmwoT01BUDM0WFhfQ0xLU1RDVFJMX0VOQUJMRV9BVVRPLCBtb2R1bGUsIG1hc2spOworfQorCit2b2lkIG9tYXAzeHh4X2NtX2Nsa2RtX2Rpc2FibGVfaHdzdXAoczE2IG1vZHVsZSwgdTMyIG1hc2spCit7CisJX3dyaXRlX2Nsa3RyY3RybChPTUFQMzRYWF9DTEtTVENUUkxfRElTQUJMRV9BVVRPLCBtb2R1bGUsIG1hc2spOworfQorCit2b2lkIG9tYXAzeHh4X2NtX2Nsa2RtX2ZvcmNlX3NsZWVwKHMxNiBtb2R1bGUsIHUzMiBtYXNrKQoreworCV93cml0ZV9jbGt0cmN0cmwoT01BUDM0WFhfQ0xLU1RDVFJMX0ZPUkNFX1NMRUVQLCBtb2R1bGUsIG1hc2spOworfQorCit2b2lkIG9tYXAzeHh4X2NtX2Nsa2RtX2ZvcmNlX3dha2V1cChzMTYgbW9kdWxlLCB1MzIgbWFzaykKK3sKKwlfd3JpdGVfY2xrdHJjdHJsKE9NQVAzNFhYX0NMS1NUQ1RSTF9GT1JDRV9XQUtFVVAsIG1vZHVsZSwgbWFzayk7Cit9CisKKworLyoKKyAqCisgKi8KKworLyoqCisgKiBvbWFwMl9jbV93YWl0X2lkbGVzdF9yZWFkeSAtIHdhaXQgZm9yIGEgbW9kdWxlIHRvIGxlYXZlIGlkbGUgb3Igc3RhbmRieQorICogQHByY21fbW9kOiBQUkNNIG1vZHVsZSBvZmZzZXQKKyAqIEBpZGxlc3RfaWQ6IENNX0lETEVTVHggcmVnaXN0ZXIgSUQgKGkuZS4sIHggPSAxLCAyLCAzKQorICogQGlkbGVzdF9zaGlmdDogc2hpZnQgb2YgdGhlIGJpdCBpbiB0aGUgQ01fSURMRVNUKiByZWdpc3RlciB0byBjaGVjaworICoKKyAqIFhYWCBkb2N1bWVudAorICovCitpbnQgb21hcDJfY21fd2FpdF9tb2R1bGVfcmVhZHkoczE2IHByY21fbW9kLCB1OCBpZGxlc3RfaWQsIHU4IGlkbGVzdF9zaGlmdCkKK3sKKwlpbnQgZW5hID0gMCwgaSA9IDA7CisJdTggY21faWRsZXN0X3JlZzsKKwl1MzIgbWFzazsKKworCWlmICghaWRsZXN0X2lkIHx8IChpZGxlc3RfaWQgPiBBUlJBWV9TSVpFKGNtX2lkbGVzdF9vZmZzKSkpCisJCXJldHVybiAtRUlOVkFMOworCisJY21faWRsZXN0X3JlZyA9IGNtX2lkbGVzdF9vZmZzW2lkbGVzdF9pZCAtIDFdOworCisJbWFzayA9IDEgPDwgaWRsZXN0X3NoaWZ0OworCisJaWYgKGNwdV9pc19vbWFwMjR4eCgpKQorCQllbmEgPSBtYXNrOworCWVsc2UgaWYgKGNwdV9pc19vbWFwMzR4eCgpKQorCQllbmEgPSAwOworCWVsc2UKKwkJQlVHKCk7CisKKwlvbWFwX3Rlc3RfdGltZW91dCgoKG9tYXAyX2NtX3JlYWRfbW9kX3JlZyhwcmNtX21vZCwgY21faWRsZXN0X3JlZykgJiBtYXNrKSA9PSBlbmEpLAorCQkJICBNQVhfTU9EVUxFX1JFQURZX1RJTUUsIGkpOworCisJcmV0dXJuIChpIDwgTUFYX01PRFVMRV9SRUFEWV9USU1FKSA/IDAgOiAtRUJVU1k7Cit9CisKKy8qCisgKiBDb250ZXh0IHNhdmUvcmVzdG9yZSBjb2RlIC0gT01BUDMgb25seQorICovCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDMKK3N0cnVjdCBvbWFwM19jbV9yZWdzIHsKKwl1MzIgaXZhMl9jbV9jbGtzZWwxOworCXUzMiBpdmEyX2NtX2Nsa3NlbDI7CisJdTMyIGNtX3N5c2NvbmZpZzsKKwl1MzIgc2d4X2NtX2Nsa3NlbDsKKwl1MzIgZHNzX2NtX2Nsa3NlbDsKKwl1MzIgY2FtX2NtX2Nsa3NlbDsKKwl1MzIgcGVyX2NtX2Nsa3NlbDsKKwl1MzIgZW11X2NtX2Nsa3NlbDsKKwl1MzIgZW11X2NtX2Nsa3N0Y3RybDsKKwl1MzIgcGxsX2NtX2F1dG9pZGxlMjsKKwl1MzIgcGxsX2NtX2Nsa3NlbDQ7CisJdTMyIHBsbF9jbV9jbGtzZWw1OworCXUzMiBwbGxfY21fY2xrZW4yOworCXUzMiBjbV9wb2xjdHJsOworCXUzMiBpdmEyX2NtX2ZjbGtlbjsKKwl1MzIgaXZhMl9jbV9jbGtlbl9wbGw7CisJdTMyIGNvcmVfY21fZmNsa2VuMTsKKwl1MzIgY29yZV9jbV9mY2xrZW4zOworCXUzMiBzZ3hfY21fZmNsa2VuOworCXUzMiB3a3VwX2NtX2ZjbGtlbjsKKwl1MzIgZHNzX2NtX2ZjbGtlbjsKKwl1MzIgY2FtX2NtX2ZjbGtlbjsKKwl1MzIgcGVyX2NtX2ZjbGtlbjsKKwl1MzIgdXNiaG9zdF9jbV9mY2xrZW47CisJdTMyIGNvcmVfY21faWNsa2VuMTsKKwl1MzIgY29yZV9jbV9pY2xrZW4yOworCXUzMiBjb3JlX2NtX2ljbGtlbjM7CisJdTMyIHNneF9jbV9pY2xrZW47CisJdTMyIHdrdXBfY21faWNsa2VuOworCXUzMiBkc3NfY21faWNsa2VuOworCXUzMiBjYW1fY21faWNsa2VuOworCXUzMiBwZXJfY21faWNsa2VuOworCXUzMiB1c2Job3N0X2NtX2ljbGtlbjsKKwl1MzIgaXZhMl9jbV9hdXRvaWRsZTI7CisJdTMyIG1wdV9jbV9hdXRvaWRsZTI7CisJdTMyIGl2YTJfY21fY2xrc3RjdHJsOworCXUzMiBtcHVfY21fY2xrc3RjdHJsOworCXUzMiBjb3JlX2NtX2Nsa3N0Y3RybDsKKwl1MzIgc2d4X2NtX2Nsa3N0Y3RybDsKKwl1MzIgZHNzX2NtX2Nsa3N0Y3RybDsKKwl1MzIgY2FtX2NtX2Nsa3N0Y3RybDsKKwl1MzIgcGVyX2NtX2Nsa3N0Y3RybDsKKwl1MzIgbmVvbl9jbV9jbGtzdGN0cmw7CisJdTMyIHVzYmhvc3RfY21fY2xrc3RjdHJsOworCXUzMiBjb3JlX2NtX2F1dG9pZGxlMTsKKwl1MzIgY29yZV9jbV9hdXRvaWRsZTI7CisJdTMyIGNvcmVfY21fYXV0b2lkbGUzOworCXUzMiB3a3VwX2NtX2F1dG9pZGxlOworCXUzMiBkc3NfY21fYXV0b2lkbGU7CisJdTMyIGNhbV9jbV9hdXRvaWRsZTsKKwl1MzIgcGVyX2NtX2F1dG9pZGxlOworCXUzMiB1c2Job3N0X2NtX2F1dG9pZGxlOworCXUzMiBzZ3hfY21fc2xlZXBkZXA7CisJdTMyIGRzc19jbV9zbGVlcGRlcDsKKwl1MzIgY2FtX2NtX3NsZWVwZGVwOworCXUzMiBwZXJfY21fc2xlZXBkZXA7CisJdTMyIHVzYmhvc3RfY21fc2xlZXBkZXA7CisJdTMyIGNtX2Nsa291dF9jdHJsOworfTsKKworc3RhdGljIHN0cnVjdCBvbWFwM19jbV9yZWdzIGNtX2NvbnRleHQ7CisKK3ZvaWQgb21hcDNfY21fc2F2ZV9jb250ZXh0KHZvaWQpCit7CisJY21fY29udGV4dC5pdmEyX2NtX2Nsa3NlbDEgPQorCQlvbWFwMl9jbV9yZWFkX21vZF9yZWcoT01BUDM0MzBfSVZBMl9NT0QsIENNX0NMS1NFTDEpOworCWNtX2NvbnRleHQuaXZhMl9jbV9jbGtzZWwyID0KKwkJb21hcDJfY21fcmVhZF9tb2RfcmVnKE9NQVAzNDMwX0lWQTJfTU9ELCBDTV9DTEtTRUwyKTsKKwljbV9jb250ZXh0LmNtX3N5c2NvbmZpZyA9IF9fcmF3X3JlYWRsKE9NQVAzNDMwX0NNX1NZU0NPTkZJRyk7CisJY21fY29udGV4dC5zZ3hfY21fY2xrc2VsID0KKwkJb21hcDJfY21fcmVhZF9tb2RfcmVnKE9NQVAzNDMwRVMyX1NHWF9NT0QsIENNX0NMS1NFTCk7CisJY21fY29udGV4dC5kc3NfY21fY2xrc2VsID0KKwkJb21hcDJfY21fcmVhZF9tb2RfcmVnKE9NQVAzNDMwX0RTU19NT0QsIENNX0NMS1NFTCk7CisJY21fY29udGV4dC5jYW1fY21fY2xrc2VsID0KKwkJb21hcDJfY21fcmVhZF9tb2RfcmVnKE9NQVAzNDMwX0NBTV9NT0QsIENNX0NMS1NFTCk7CisJY21fY29udGV4dC5wZXJfY21fY2xrc2VsID0KKwkJb21hcDJfY21fcmVhZF9tb2RfcmVnKE9NQVAzNDMwX1BFUl9NT0QsIENNX0NMS1NFTCk7CisJY21fY29udGV4dC5lbXVfY21fY2xrc2VsID0KKwkJb21hcDJfY21fcmVhZF9tb2RfcmVnKE9NQVAzNDMwX0VNVV9NT0QsIENNX0NMS1NFTDEpOworCWNtX2NvbnRleHQuZW11X2NtX2Nsa3N0Y3RybCA9CisJCW9tYXAyX2NtX3JlYWRfbW9kX3JlZyhPTUFQMzQzMF9FTVVfTU9ELCBPTUFQMl9DTV9DTEtTVENUUkwpOworCWNtX2NvbnRleHQucGxsX2NtX2F1dG9pZGxlMiA9CisJCW9tYXAyX2NtX3JlYWRfbW9kX3JlZyhQTExfTU9ELCBDTV9BVVRPSURMRTIpOworCWNtX2NvbnRleHQucGxsX2NtX2Nsa3NlbDQgPQorCQlvbWFwMl9jbV9yZWFkX21vZF9yZWcoUExMX01PRCwgT01BUDM0MzBFUzJfQ01fQ0xLU0VMNCk7CisJY21fY29udGV4dC5wbGxfY21fY2xrc2VsNSA9CisJCW9tYXAyX2NtX3JlYWRfbW9kX3JlZyhQTExfTU9ELCBPTUFQMzQzMEVTMl9DTV9DTEtTRUw1KTsKKwljbV9jb250ZXh0LnBsbF9jbV9jbGtlbjIgPQorCQlvbWFwMl9jbV9yZWFkX21vZF9yZWcoUExMX01PRCwgT01BUDM0MzBFUzJfQ01fQ0xLRU4yKTsKKwljbV9jb250ZXh0LmNtX3BvbGN0cmwgPSBfX3Jhd19yZWFkbChPTUFQMzQzMF9DTV9QT0xDVFJMKTsKKwljbV9jb250ZXh0Lml2YTJfY21fZmNsa2VuID0KKwkJb21hcDJfY21fcmVhZF9tb2RfcmVnKE9NQVAzNDMwX0lWQTJfTU9ELCBDTV9GQ0xLRU4pOworCWNtX2NvbnRleHQuaXZhMl9jbV9jbGtlbl9wbGwgPQorCQlvbWFwMl9jbV9yZWFkX21vZF9yZWcoT01BUDM0MzBfSVZBMl9NT0QsIE9NQVAzNDMwX0NNX0NMS0VOX1BMTCk7CisJY21fY29udGV4dC5jb3JlX2NtX2ZjbGtlbjEgPQorCQlvbWFwMl9jbV9yZWFkX21vZF9yZWcoQ09SRV9NT0QsIENNX0ZDTEtFTjEpOworCWNtX2NvbnRleHQuY29yZV9jbV9mY2xrZW4zID0KKwkJb21hcDJfY21fcmVhZF9tb2RfcmVnKENPUkVfTU9ELCBPTUFQMzQzMEVTMl9DTV9GQ0xLRU4zKTsKKwljbV9jb250ZXh0LnNneF9jbV9mY2xrZW4gPQorCQlvbWFwMl9jbV9yZWFkX21vZF9yZWcoT01BUDM0MzBFUzJfU0dYX01PRCwgQ01fRkNMS0VOKTsKKwljbV9jb250ZXh0LndrdXBfY21fZmNsa2VuID0KKwkJb21hcDJfY21fcmVhZF9tb2RfcmVnKFdLVVBfTU9ELCBDTV9GQ0xLRU4pOworCWNtX2NvbnRleHQuZHNzX2NtX2ZjbGtlbiA9CisJCW9tYXAyX2NtX3JlYWRfbW9kX3JlZyhPTUFQMzQzMF9EU1NfTU9ELCBDTV9GQ0xLRU4pOworCWNtX2NvbnRleHQuY2FtX2NtX2ZjbGtlbiA9CisJCW9tYXAyX2NtX3JlYWRfbW9kX3JlZyhPTUFQMzQzMF9DQU1fTU9ELCBDTV9GQ0xLRU4pOworCWNtX2NvbnRleHQucGVyX2NtX2ZjbGtlbiA9CisJCW9tYXAyX2NtX3JlYWRfbW9kX3JlZyhPTUFQMzQzMF9QRVJfTU9ELCBDTV9GQ0xLRU4pOworCWNtX2NvbnRleHQudXNiaG9zdF9jbV9mY2xrZW4gPQorCQlvbWFwMl9jbV9yZWFkX21vZF9yZWcoT01BUDM0MzBFUzJfVVNCSE9TVF9NT0QsIENNX0ZDTEtFTik7CisJY21fY29udGV4dC5jb3JlX2NtX2ljbGtlbjEgPQorCQlvbWFwMl9jbV9yZWFkX21vZF9yZWcoQ09SRV9NT0QsIENNX0lDTEtFTjEpOworCWNtX2NvbnRleHQuY29yZV9jbV9pY2xrZW4yID0KKwkJb21hcDJfY21fcmVhZF9tb2RfcmVnKENPUkVfTU9ELCBDTV9JQ0xLRU4yKTsKKwljbV9jb250ZXh0LmNvcmVfY21faWNsa2VuMyA9CisJCW9tYXAyX2NtX3JlYWRfbW9kX3JlZyhDT1JFX01PRCwgQ01fSUNMS0VOMyk7CisJY21fY29udGV4dC5zZ3hfY21faWNsa2VuID0KKwkJb21hcDJfY21fcmVhZF9tb2RfcmVnKE9NQVAzNDMwRVMyX1NHWF9NT0QsIENNX0lDTEtFTik7CisJY21fY29udGV4dC53a3VwX2NtX2ljbGtlbiA9CisJCW9tYXAyX2NtX3JlYWRfbW9kX3JlZyhXS1VQX01PRCwgQ01fSUNMS0VOKTsKKwljbV9jb250ZXh0LmRzc19jbV9pY2xrZW4gPQorCQlvbWFwMl9jbV9yZWFkX21vZF9yZWcoT01BUDM0MzBfRFNTX01PRCwgQ01fSUNMS0VOKTsKKwljbV9jb250ZXh0LmNhbV9jbV9pY2xrZW4gPQorCQlvbWFwMl9jbV9yZWFkX21vZF9yZWcoT01BUDM0MzBfQ0FNX01PRCwgQ01fSUNMS0VOKTsKKwljbV9jb250ZXh0LnBlcl9jbV9pY2xrZW4gPQorCQlvbWFwMl9jbV9yZWFkX21vZF9yZWcoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKTsKKwljbV9jb250ZXh0LnVzYmhvc3RfY21faWNsa2VuID0KKwkJb21hcDJfY21fcmVhZF9tb2RfcmVnKE9NQVAzNDMwRVMyX1VTQkhPU1RfTU9ELCBDTV9JQ0xLRU4pOworCWNtX2NvbnRleHQuaXZhMl9jbV9hdXRvaWRsZTIgPQorCQlvbWFwMl9jbV9yZWFkX21vZF9yZWcoT01BUDM0MzBfSVZBMl9NT0QsIENNX0FVVE9JRExFMik7CisJY21fY29udGV4dC5tcHVfY21fYXV0b2lkbGUyID0KKwkJb21hcDJfY21fcmVhZF9tb2RfcmVnKE1QVV9NT0QsIENNX0FVVE9JRExFMik7CisJY21fY29udGV4dC5pdmEyX2NtX2Nsa3N0Y3RybCA9CisJCW9tYXAyX2NtX3JlYWRfbW9kX3JlZyhPTUFQMzQzMF9JVkEyX01PRCwgT01BUDJfQ01fQ0xLU1RDVFJMKTsKKwljbV9jb250ZXh0Lm1wdV9jbV9jbGtzdGN0cmwgPQorCQlvbWFwMl9jbV9yZWFkX21vZF9yZWcoTVBVX01PRCwgT01BUDJfQ01fQ0xLU1RDVFJMKTsKKwljbV9jb250ZXh0LmNvcmVfY21fY2xrc3RjdHJsID0KKwkJb21hcDJfY21fcmVhZF9tb2RfcmVnKENPUkVfTU9ELCBPTUFQMl9DTV9DTEtTVENUUkwpOworCWNtX2NvbnRleHQuc2d4X2NtX2Nsa3N0Y3RybCA9CisJCW9tYXAyX2NtX3JlYWRfbW9kX3JlZyhPTUFQMzQzMEVTMl9TR1hfTU9ELCBPTUFQMl9DTV9DTEtTVENUUkwpOworCWNtX2NvbnRleHQuZHNzX2NtX2Nsa3N0Y3RybCA9CisJCW9tYXAyX2NtX3JlYWRfbW9kX3JlZyhPTUFQMzQzMF9EU1NfTU9ELCBPTUFQMl9DTV9DTEtTVENUUkwpOworCWNtX2NvbnRleHQuY2FtX2NtX2Nsa3N0Y3RybCA9CisJCW9tYXAyX2NtX3JlYWRfbW9kX3JlZyhPTUFQMzQzMF9DQU1fTU9ELCBPTUFQMl9DTV9DTEtTVENUUkwpOworCWNtX2NvbnRleHQucGVyX2NtX2Nsa3N0Y3RybCA9CisJCW9tYXAyX2NtX3JlYWRfbW9kX3JlZyhPTUFQMzQzMF9QRVJfTU9ELCBPTUFQMl9DTV9DTEtTVENUUkwpOworCWNtX2NvbnRleHQubmVvbl9jbV9jbGtzdGN0cmwgPQorCQlvbWFwMl9jbV9yZWFkX21vZF9yZWcoT01BUDM0MzBfTkVPTl9NT0QsIE9NQVAyX0NNX0NMS1NUQ1RSTCk7CisJY21fY29udGV4dC51c2Job3N0X2NtX2Nsa3N0Y3RybCA9CisJCW9tYXAyX2NtX3JlYWRfbW9kX3JlZyhPTUFQMzQzMEVTMl9VU0JIT1NUX01PRCwKKwkJCQkgICAgICBPTUFQMl9DTV9DTEtTVENUUkwpOworCWNtX2NvbnRleHQuY29yZV9jbV9hdXRvaWRsZTEgPQorCQlvbWFwMl9jbV9yZWFkX21vZF9yZWcoQ09SRV9NT0QsIENNX0FVVE9JRExFMSk7CisJY21fY29udGV4dC5jb3JlX2NtX2F1dG9pZGxlMiA9CisJCW9tYXAyX2NtX3JlYWRfbW9kX3JlZyhDT1JFX01PRCwgQ01fQVVUT0lETEUyKTsKKwljbV9jb250ZXh0LmNvcmVfY21fYXV0b2lkbGUzID0KKwkJb21hcDJfY21fcmVhZF9tb2RfcmVnKENPUkVfTU9ELCBDTV9BVVRPSURMRTMpOworCWNtX2NvbnRleHQud2t1cF9jbV9hdXRvaWRsZSA9CisJCW9tYXAyX2NtX3JlYWRfbW9kX3JlZyhXS1VQX01PRCwgQ01fQVVUT0lETEUpOworCWNtX2NvbnRleHQuZHNzX2NtX2F1dG9pZGxlID0KKwkJb21hcDJfY21fcmVhZF9tb2RfcmVnKE9NQVAzNDMwX0RTU19NT0QsIENNX0FVVE9JRExFKTsKKwljbV9jb250ZXh0LmNhbV9jbV9hdXRvaWRsZSA9CisJCW9tYXAyX2NtX3JlYWRfbW9kX3JlZyhPTUFQMzQzMF9DQU1fTU9ELCBDTV9BVVRPSURMRSk7CisJY21fY29udGV4dC5wZXJfY21fYXV0b2lkbGUgPQorCQlvbWFwMl9jbV9yZWFkX21vZF9yZWcoT01BUDM0MzBfUEVSX01PRCwgQ01fQVVUT0lETEUpOworCWNtX2NvbnRleHQudXNiaG9zdF9jbV9hdXRvaWRsZSA9CisJCW9tYXAyX2NtX3JlYWRfbW9kX3JlZyhPTUFQMzQzMEVTMl9VU0JIT1NUX01PRCwgQ01fQVVUT0lETEUpOworCWNtX2NvbnRleHQuc2d4X2NtX3NsZWVwZGVwID0KKwkJb21hcDJfY21fcmVhZF9tb2RfcmVnKE9NQVAzNDMwRVMyX1NHWF9NT0QsCisJCQkJICAgICAgT01BUDM0MzBfQ01fU0xFRVBERVApOworCWNtX2NvbnRleHQuZHNzX2NtX3NsZWVwZGVwID0KKwkJb21hcDJfY21fcmVhZF9tb2RfcmVnKE9NQVAzNDMwX0RTU19NT0QsIE9NQVAzNDMwX0NNX1NMRUVQREVQKTsKKwljbV9jb250ZXh0LmNhbV9jbV9zbGVlcGRlcCA9CisJCW9tYXAyX2NtX3JlYWRfbW9kX3JlZyhPTUFQMzQzMF9DQU1fTU9ELCBPTUFQMzQzMF9DTV9TTEVFUERFUCk7CisJY21fY29udGV4dC5wZXJfY21fc2xlZXBkZXAgPQorCQlvbWFwMl9jbV9yZWFkX21vZF9yZWcoT01BUDM0MzBfUEVSX01PRCwgT01BUDM0MzBfQ01fU0xFRVBERVApOworCWNtX2NvbnRleHQudXNiaG9zdF9jbV9zbGVlcGRlcCA9CisJCW9tYXAyX2NtX3JlYWRfbW9kX3JlZyhPTUFQMzQzMEVTMl9VU0JIT1NUX01PRCwKKwkJCQkgICAgICBPTUFQMzQzMF9DTV9TTEVFUERFUCk7CisJY21fY29udGV4dC5jbV9jbGtvdXRfY3RybCA9CisJCW9tYXAyX2NtX3JlYWRfbW9kX3JlZyhPTUFQMzQzMF9DQ1JfTU9ELAorCQkJCSAgICAgIE9NQVAzX0NNX0NMS09VVF9DVFJMX09GRlNFVCk7Cit9CisKK3ZvaWQgb21hcDNfY21fcmVzdG9yZV9jb250ZXh0KHZvaWQpCit7CisJb21hcDJfY21fd3JpdGVfbW9kX3JlZyhjbV9jb250ZXh0Lml2YTJfY21fY2xrc2VsMSwgT01BUDM0MzBfSVZBMl9NT0QsCisJCQkgICAgICAgQ01fQ0xLU0VMMSk7CisJb21hcDJfY21fd3JpdGVfbW9kX3JlZyhjbV9jb250ZXh0Lml2YTJfY21fY2xrc2VsMiwgT01BUDM0MzBfSVZBMl9NT0QsCisJCQkgICAgICAgQ01fQ0xLU0VMMik7CisJX19yYXdfd3JpdGVsKGNtX2NvbnRleHQuY21fc3lzY29uZmlnLCBPTUFQMzQzMF9DTV9TWVNDT05GSUcpOworCW9tYXAyX2NtX3dyaXRlX21vZF9yZWcoY21fY29udGV4dC5zZ3hfY21fY2xrc2VsLCBPTUFQMzQzMEVTMl9TR1hfTU9ELAorCQkJICAgICAgIENNX0NMS1NFTCk7CisJb21hcDJfY21fd3JpdGVfbW9kX3JlZyhjbV9jb250ZXh0LmRzc19jbV9jbGtzZWwsIE9NQVAzNDMwX0RTU19NT0QsCisJCQkgICAgICAgQ01fQ0xLU0VMKTsKKwlvbWFwMl9jbV93cml0ZV9tb2RfcmVnKGNtX2NvbnRleHQuY2FtX2NtX2Nsa3NlbCwgT01BUDM0MzBfQ0FNX01PRCwKKwkJCSAgICAgICBDTV9DTEtTRUwpOworCW9tYXAyX2NtX3dyaXRlX21vZF9yZWcoY21fY29udGV4dC5wZXJfY21fY2xrc2VsLCBPTUFQMzQzMF9QRVJfTU9ELAorCQkJICAgICAgIENNX0NMS1NFTCk7CisJb21hcDJfY21fd3JpdGVfbW9kX3JlZyhjbV9jb250ZXh0LmVtdV9jbV9jbGtzZWwsIE9NQVAzNDMwX0VNVV9NT0QsCisJCQkgICAgICAgQ01fQ0xLU0VMMSk7CisJb21hcDJfY21fd3JpdGVfbW9kX3JlZyhjbV9jb250ZXh0LmVtdV9jbV9jbGtzdGN0cmwsIE9NQVAzNDMwX0VNVV9NT0QsCisJCQkgICAgICAgT01BUDJfQ01fQ0xLU1RDVFJMKTsKKwlvbWFwMl9jbV93cml0ZV9tb2RfcmVnKGNtX2NvbnRleHQucGxsX2NtX2F1dG9pZGxlMiwgUExMX01PRCwKKwkJCSAgICAgICBDTV9BVVRPSURMRTIpOworCW9tYXAyX2NtX3dyaXRlX21vZF9yZWcoY21fY29udGV4dC5wbGxfY21fY2xrc2VsNCwgUExMX01PRCwKKwkJCSAgICAgICBPTUFQMzQzMEVTMl9DTV9DTEtTRUw0KTsKKwlvbWFwMl9jbV93cml0ZV9tb2RfcmVnKGNtX2NvbnRleHQucGxsX2NtX2Nsa3NlbDUsIFBMTF9NT0QsCisJCQkgICAgICAgT01BUDM0MzBFUzJfQ01fQ0xLU0VMNSk7CisJb21hcDJfY21fd3JpdGVfbW9kX3JlZyhjbV9jb250ZXh0LnBsbF9jbV9jbGtlbjIsIFBMTF9NT0QsCisJCQkgICAgICAgT01BUDM0MzBFUzJfQ01fQ0xLRU4yKTsKKwlfX3Jhd193cml0ZWwoY21fY29udGV4dC5jbV9wb2xjdHJsLCBPTUFQMzQzMF9DTV9QT0xDVFJMKTsKKwlvbWFwMl9jbV93cml0ZV9tb2RfcmVnKGNtX2NvbnRleHQuaXZhMl9jbV9mY2xrZW4sIE9NQVAzNDMwX0lWQTJfTU9ELAorCQkJICAgICAgIENNX0ZDTEtFTik7CisJb21hcDJfY21fd3JpdGVfbW9kX3JlZyhjbV9jb250ZXh0Lml2YTJfY21fY2xrZW5fcGxsLCBPTUFQMzQzMF9JVkEyX01PRCwKKwkJCSAgICAgICBPTUFQMzQzMF9DTV9DTEtFTl9QTEwpOworCW9tYXAyX2NtX3dyaXRlX21vZF9yZWcoY21fY29udGV4dC5jb3JlX2NtX2ZjbGtlbjEsIENPUkVfTU9ELAorCQkJICAgICAgIENNX0ZDTEtFTjEpOworCW9tYXAyX2NtX3dyaXRlX21vZF9yZWcoY21fY29udGV4dC5jb3JlX2NtX2ZjbGtlbjMsIENPUkVfTU9ELAorCQkJICAgICAgIE9NQVAzNDMwRVMyX0NNX0ZDTEtFTjMpOworCW9tYXAyX2NtX3dyaXRlX21vZF9yZWcoY21fY29udGV4dC5zZ3hfY21fZmNsa2VuLCBPTUFQMzQzMEVTMl9TR1hfTU9ELAorCQkJICAgICAgIENNX0ZDTEtFTik7CisJb21hcDJfY21fd3JpdGVfbW9kX3JlZyhjbV9jb250ZXh0LndrdXBfY21fZmNsa2VuLCBXS1VQX01PRCwgQ01fRkNMS0VOKTsKKwlvbWFwMl9jbV93cml0ZV9tb2RfcmVnKGNtX2NvbnRleHQuZHNzX2NtX2ZjbGtlbiwgT01BUDM0MzBfRFNTX01PRCwKKwkJCSAgICAgICBDTV9GQ0xLRU4pOworCW9tYXAyX2NtX3dyaXRlX21vZF9yZWcoY21fY29udGV4dC5jYW1fY21fZmNsa2VuLCBPTUFQMzQzMF9DQU1fTU9ELAorCQkJICAgICAgIENNX0ZDTEtFTik7CisJb21hcDJfY21fd3JpdGVfbW9kX3JlZyhjbV9jb250ZXh0LnBlcl9jbV9mY2xrZW4sIE9NQVAzNDMwX1BFUl9NT0QsCisJCQkgICAgICAgQ01fRkNMS0VOKTsKKwlvbWFwMl9jbV93cml0ZV9tb2RfcmVnKGNtX2NvbnRleHQudXNiaG9zdF9jbV9mY2xrZW4sCisJCQkgICAgICAgT01BUDM0MzBFUzJfVVNCSE9TVF9NT0QsIENNX0ZDTEtFTik7CisJb21hcDJfY21fd3JpdGVfbW9kX3JlZyhjbV9jb250ZXh0LmNvcmVfY21faWNsa2VuMSwgQ09SRV9NT0QsCisJCQkgICAgICAgQ01fSUNMS0VOMSk7CisJb21hcDJfY21fd3JpdGVfbW9kX3JlZyhjbV9jb250ZXh0LmNvcmVfY21faWNsa2VuMiwgQ09SRV9NT0QsCisJCQkgICAgICAgQ01fSUNMS0VOMik7CisJb21hcDJfY21fd3JpdGVfbW9kX3JlZyhjbV9jb250ZXh0LmNvcmVfY21faWNsa2VuMywgQ09SRV9NT0QsCisJCQkgICAgICAgQ01fSUNMS0VOMyk7CisJb21hcDJfY21fd3JpdGVfbW9kX3JlZyhjbV9jb250ZXh0LnNneF9jbV9pY2xrZW4sIE9NQVAzNDMwRVMyX1NHWF9NT0QsCisJCQkgICAgICAgQ01fSUNMS0VOKTsKKwlvbWFwMl9jbV93cml0ZV9tb2RfcmVnKGNtX2NvbnRleHQud2t1cF9jbV9pY2xrZW4sIFdLVVBfTU9ELCBDTV9JQ0xLRU4pOworCW9tYXAyX2NtX3dyaXRlX21vZF9yZWcoY21fY29udGV4dC5kc3NfY21faWNsa2VuLCBPTUFQMzQzMF9EU1NfTU9ELAorCQkJICAgICAgIENNX0lDTEtFTik7CisJb21hcDJfY21fd3JpdGVfbW9kX3JlZyhjbV9jb250ZXh0LmNhbV9jbV9pY2xrZW4sIE9NQVAzNDMwX0NBTV9NT0QsCisJCQkgICAgICAgQ01fSUNMS0VOKTsKKwlvbWFwMl9jbV93cml0ZV9tb2RfcmVnKGNtX2NvbnRleHQucGVyX2NtX2ljbGtlbiwgT01BUDM0MzBfUEVSX01PRCwKKwkJCSAgICAgICBDTV9JQ0xLRU4pOworCW9tYXAyX2NtX3dyaXRlX21vZF9yZWcoY21fY29udGV4dC51c2Job3N0X2NtX2ljbGtlbiwKKwkJCSAgICAgICBPTUFQMzQzMEVTMl9VU0JIT1NUX01PRCwgQ01fSUNMS0VOKTsKKwlvbWFwMl9jbV93cml0ZV9tb2RfcmVnKGNtX2NvbnRleHQuaXZhMl9jbV9hdXRvaWRsZTIsIE9NQVAzNDMwX0lWQTJfTU9ELAorCQkJICAgICAgIENNX0FVVE9JRExFMik7CisJb21hcDJfY21fd3JpdGVfbW9kX3JlZyhjbV9jb250ZXh0Lm1wdV9jbV9hdXRvaWRsZTIsIE1QVV9NT0QsCisJCQkgICAgICAgQ01fQVVUT0lETEUyKTsKKwlvbWFwMl9jbV93cml0ZV9tb2RfcmVnKGNtX2NvbnRleHQuaXZhMl9jbV9jbGtzdGN0cmwsIE9NQVAzNDMwX0lWQTJfTU9ELAorCQkJICAgICAgIE9NQVAyX0NNX0NMS1NUQ1RSTCk7CisJb21hcDJfY21fd3JpdGVfbW9kX3JlZyhjbV9jb250ZXh0Lm1wdV9jbV9jbGtzdGN0cmwsIE1QVV9NT0QsCisJCQkgICAgICAgT01BUDJfQ01fQ0xLU1RDVFJMKTsKKwlvbWFwMl9jbV93cml0ZV9tb2RfcmVnKGNtX2NvbnRleHQuY29yZV9jbV9jbGtzdGN0cmwsIENPUkVfTU9ELAorCQkJICAgICAgIE9NQVAyX0NNX0NMS1NUQ1RSTCk7CisJb21hcDJfY21fd3JpdGVfbW9kX3JlZyhjbV9jb250ZXh0LnNneF9jbV9jbGtzdGN0cmwsIE9NQVAzNDMwRVMyX1NHWF9NT0QsCisJCQkgICAgICAgT01BUDJfQ01fQ0xLU1RDVFJMKTsKKwlvbWFwMl9jbV93cml0ZV9tb2RfcmVnKGNtX2NvbnRleHQuZHNzX2NtX2Nsa3N0Y3RybCwgT01BUDM0MzBfRFNTX01PRCwKKwkJCSAgICAgICBPTUFQMl9DTV9DTEtTVENUUkwpOworCW9tYXAyX2NtX3dyaXRlX21vZF9yZWcoY21fY29udGV4dC5jYW1fY21fY2xrc3RjdHJsLCBPTUFQMzQzMF9DQU1fTU9ELAorCQkJICAgICAgIE9NQVAyX0NNX0NMS1NUQ1RSTCk7CisJb21hcDJfY21fd3JpdGVfbW9kX3JlZyhjbV9jb250ZXh0LnBlcl9jbV9jbGtzdGN0cmwsIE9NQVAzNDMwX1BFUl9NT0QsCisJCQkgICAgICAgT01BUDJfQ01fQ0xLU1RDVFJMKTsKKwlvbWFwMl9jbV93cml0ZV9tb2RfcmVnKGNtX2NvbnRleHQubmVvbl9jbV9jbGtzdGN0cmwsIE9NQVAzNDMwX05FT05fTU9ELAorCQkJICAgICAgIE9NQVAyX0NNX0NMS1NUQ1RSTCk7CisJb21hcDJfY21fd3JpdGVfbW9kX3JlZyhjbV9jb250ZXh0LnVzYmhvc3RfY21fY2xrc3RjdHJsLAorCQkJICAgICAgIE9NQVAzNDMwRVMyX1VTQkhPU1RfTU9ELCBPTUFQMl9DTV9DTEtTVENUUkwpOworCW9tYXAyX2NtX3dyaXRlX21vZF9yZWcoY21fY29udGV4dC5jb3JlX2NtX2F1dG9pZGxlMSwgQ09SRV9NT0QsCisJCQkgICAgICAgQ01fQVVUT0lETEUxKTsKKwlvbWFwMl9jbV93cml0ZV9tb2RfcmVnKGNtX2NvbnRleHQuY29yZV9jbV9hdXRvaWRsZTIsIENPUkVfTU9ELAorCQkJICAgICAgIENNX0FVVE9JRExFMik7CisJb21hcDJfY21fd3JpdGVfbW9kX3JlZyhjbV9jb250ZXh0LmNvcmVfY21fYXV0b2lkbGUzLCBDT1JFX01PRCwKKwkJCSAgICAgICBDTV9BVVRPSURMRTMpOworCW9tYXAyX2NtX3dyaXRlX21vZF9yZWcoY21fY29udGV4dC53a3VwX2NtX2F1dG9pZGxlLCBXS1VQX01PRCwKKwkJCSAgICAgICBDTV9BVVRPSURMRSk7CisJb21hcDJfY21fd3JpdGVfbW9kX3JlZyhjbV9jb250ZXh0LmRzc19jbV9hdXRvaWRsZSwgT01BUDM0MzBfRFNTX01PRCwKKwkJCSAgICAgICBDTV9BVVRPSURMRSk7CisJb21hcDJfY21fd3JpdGVfbW9kX3JlZyhjbV9jb250ZXh0LmNhbV9jbV9hdXRvaWRsZSwgT01BUDM0MzBfQ0FNX01PRCwKKwkJCSAgICAgICBDTV9BVVRPSURMRSk7CisJb21hcDJfY21fd3JpdGVfbW9kX3JlZyhjbV9jb250ZXh0LnBlcl9jbV9hdXRvaWRsZSwgT01BUDM0MzBfUEVSX01PRCwKKwkJCSAgICAgICBDTV9BVVRPSURMRSk7CisJb21hcDJfY21fd3JpdGVfbW9kX3JlZyhjbV9jb250ZXh0LnVzYmhvc3RfY21fYXV0b2lkbGUsCisJCQkgICAgICAgT01BUDM0MzBFUzJfVVNCSE9TVF9NT0QsIENNX0FVVE9JRExFKTsKKwlvbWFwMl9jbV93cml0ZV9tb2RfcmVnKGNtX2NvbnRleHQuc2d4X2NtX3NsZWVwZGVwLCBPTUFQMzQzMEVTMl9TR1hfTU9ELAorCQkJICAgICAgIE9NQVAzNDMwX0NNX1NMRUVQREVQKTsKKwlvbWFwMl9jbV93cml0ZV9tb2RfcmVnKGNtX2NvbnRleHQuZHNzX2NtX3NsZWVwZGVwLCBPTUFQMzQzMF9EU1NfTU9ELAorCQkJICAgICAgIE9NQVAzNDMwX0NNX1NMRUVQREVQKTsKKwlvbWFwMl9jbV93cml0ZV9tb2RfcmVnKGNtX2NvbnRleHQuY2FtX2NtX3NsZWVwZGVwLCBPTUFQMzQzMF9DQU1fTU9ELAorCQkJICAgICAgIE9NQVAzNDMwX0NNX1NMRUVQREVQKTsKKwlvbWFwMl9jbV93cml0ZV9tb2RfcmVnKGNtX2NvbnRleHQucGVyX2NtX3NsZWVwZGVwLCBPTUFQMzQzMF9QRVJfTU9ELAorCQkJICAgICAgIE9NQVAzNDMwX0NNX1NMRUVQREVQKTsKKwlvbWFwMl9jbV93cml0ZV9tb2RfcmVnKGNtX2NvbnRleHQudXNiaG9zdF9jbV9zbGVlcGRlcCwKKwkJCSAgICAgICBPTUFQMzQzMEVTMl9VU0JIT1NUX01PRCwgT01BUDM0MzBfQ01fU0xFRVBERVApOworCW9tYXAyX2NtX3dyaXRlX21vZF9yZWcoY21fY29udGV4dC5jbV9jbGtvdXRfY3RybCwgT01BUDM0MzBfQ0NSX01PRCwKKwkJCSAgICAgICBPTUFQM19DTV9DTEtPVVRfQ1RSTF9PRkZTRVQpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtMnh4eF8zeHh4LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtMnh4eF8zeHh4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU5ZWE1YgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY20yeHh4XzN4eHguaApAQCAtMCwwICsxLDE0NyBAQAorLyoKKyAqIE9NQVAyLzMgQ2xvY2sgTWFuYWdlbWVudCAoQ00pIHJlZ2lzdGVyIGRlZmluaXRpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDEwIE5va2lhIENvcnBvcmF0aW9uCisgKiBQYXVsIFdhbG1zbGV5CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGUgQ00gaGFyZHdhcmUgbW9kdWxlcyBvbiB0aGUgT01BUDIvMyBhcmUgcXVpdGUgc2ltaWxhciB0byBlYWNoCisgKiBvdGhlci4gIFRoZSBDTSBtb2R1bGVzL2luc3RhbmNlcyBvbiBPTUFQNCBhcmUgcXVpdGUgZGlmZmVyZW50LCBzbworICogdGhleSBhcmUgaGFuZGxlZCBpbiBhIHNlcGFyYXRlIGZpbGUuCisgKi8KKyNpZm5kZWYgX19BUkNIX0FTTV9NQUNIX09NQVAyX0NNMlhYWF8zWFhYX0gKKyNkZWZpbmUgX19BUkNIX0FTTV9NQUNIX09NQVAyX0NNMlhYWF8zWFhYX0gKKworI2luY2x1ZGUgInByY20tY29tbW9uLmgiCisKKyNkZWZpbmUgT01BUDI0MjBfQ01fUkVHQUREUihtb2R1bGUsIHJlZykJCQkJXAorCQkJT01BUDJfTDRfSU9fQUREUkVTUyhPTUFQMjQyMF9DTV9CQVNFICsgKG1vZHVsZSkgKyAocmVnKSkKKyNkZWZpbmUgT01BUDI0MzBfQ01fUkVHQUREUihtb2R1bGUsIHJlZykJCQkJXAorCQkJT01BUDJfTDRfSU9fQUREUkVTUyhPTUFQMjQzMF9DTV9CQVNFICsgKG1vZHVsZSkgKyAocmVnKSkKKyNkZWZpbmUgT01BUDM0WFhfQ01fUkVHQUREUihtb2R1bGUsIHJlZykJCQkJXAorCQkJT01BUDJfTDRfSU9fQUREUkVTUyhPTUFQMzQzMF9DTV9CQVNFICsgKG1vZHVsZSkgKyAocmVnKSkKKworCisvKgorICogT01BUDMtc3BlY2lmaWMgZ2xvYmFsIENNIHJlZ2lzdGVycworICogVXNlIGNtX3tyZWFkLHdyaXRlfV9yZWcoKSB3aXRoIHRoZXNlIHJlZ2lzdGVycy4KKyAqIFRoZXNlIHJlZ2lzdGVycyBhcHBlYXIgb25jZSBwZXIgQ00gbW9kdWxlLgorICovCisKKyNkZWZpbmUgT01BUDM0MzBfQ01fUkVWSVNJT04JCU9NQVAzNFhYX0NNX1JFR0FERFIoT0NQX01PRCwgMHgwMDAwKQorI2RlZmluZSBPTUFQMzQzMF9DTV9TWVNDT05GSUcJCU9NQVAzNFhYX0NNX1JFR0FERFIoT0NQX01PRCwgMHgwMDEwKQorI2RlZmluZSBPTUFQMzQzMF9DTV9QT0xDVFJMCQlPTUFQMzRYWF9DTV9SRUdBRERSKE9DUF9NT0QsIDB4MDA5YykKKworI2RlZmluZSBPTUFQM19DTV9DTEtPVVRfQ1RSTF9PRkZTRVQJMHgwMDcwCisjZGVmaW5lIE9NQVAzNDMwX0NNX0NMS09VVF9DVFJMCQlPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfQ0NSX01PRCwgMHgwMDcwKQorCisvKgorICogTW9kdWxlIHNwZWNpZmljIENNIHJlZ2lzdGVyIG9mZnNldHMgZnJvbSBDTV9CQVNFICsgZG9tYWluIG9mZnNldAorICogVXNlIGNtX3tyZWFkLHdyaXRlfV9tb2RfcmVnKCkgd2l0aCB0aGVzZSByZWdpc3RlcnMuCisgKiBUaGVzZSByZWdpc3RlciBvZmZzZXRzIGdlbmVyYWxseSBhcHBlYXIgaW4gbW9yZSB0aGFuIG9uZSBQUkNNIHN1Ym1vZHVsZS4KKyAqLworCisvKiBDb21tb24gYmV0d2VlbiBPTUFQMiBhbmQgT01BUDMgKi8KKworI2RlZmluZSBDTV9GQ0xLRU4JCQkJCTB4MDAwMAorI2RlZmluZSBDTV9GQ0xLRU4xCQkJCQlDTV9GQ0xLRU4KKyNkZWZpbmUgQ01fQ0xLRU4JCQkJCUNNX0ZDTEtFTgorI2RlZmluZSBDTV9JQ0xLRU4JCQkJCTB4MDAxMAorI2RlZmluZSBDTV9JQ0xLRU4xCQkJCQlDTV9JQ0xLRU4KKyNkZWZpbmUgQ01fSUNMS0VOMgkJCQkJMHgwMDE0CisjZGVmaW5lIENNX0lDTEtFTjMJCQkJCTB4MDAxOAorI2RlZmluZSBDTV9JRExFU1QJCQkJCTB4MDAyMAorI2RlZmluZSBDTV9JRExFU1QxCQkJCQlDTV9JRExFU1QKKyNkZWZpbmUgQ01fSURMRVNUMgkJCQkJMHgwMDI0CisjZGVmaW5lIENNX0FVVE9JRExFCQkJCQkweDAwMzAKKyNkZWZpbmUgQ01fQVVUT0lETEUxCQkJCQlDTV9BVVRPSURMRQorI2RlZmluZSBDTV9BVVRPSURMRTIJCQkJCTB4MDAzNAorI2RlZmluZSBDTV9BVVRPSURMRTMJCQkJCTB4MDAzOAorI2RlZmluZSBDTV9DTEtTRUwJCQkJCTB4MDA0MAorI2RlZmluZSBDTV9DTEtTRUwxCQkJCQlDTV9DTEtTRUwKKyNkZWZpbmUgQ01fQ0xLU0VMMgkJCQkJMHgwMDQ0CisjZGVmaW5lIE9NQVAyX0NNX0NMS1NUQ1RSTAkJCQkweDAwNDgKKworLyogT01BUDItc3BlY2lmaWMgcmVnaXN0ZXIgb2Zmc2V0cyAqLworCisjZGVmaW5lIE9NQVAyNFhYX0NNX0ZDTEtFTjIJCQkJMHgwMDA0CisjZGVmaW5lIE9NQVAyNFhYX0NNX0lDTEtFTjQJCQkJMHgwMDFjCisjZGVmaW5lIE9NQVAyNFhYX0NNX0FVVE9JRExFNAkJCQkweDAwM2MKKworI2RlZmluZSBPTUFQMjQzMF9DTV9JRExFU1QzCQkJCTB4MDAyOAorCisvKiBPTUFQMy1zcGVjaWZpYyByZWdpc3RlciBvZmZzZXRzICovCisKKyNkZWZpbmUgT01BUDM0MzBfQ01fQ0xLRU5fUExMCQkJCTB4MDAwNAorI2RlZmluZSBPTUFQMzQzMEVTMl9DTV9DTEtFTjIJCQkJMHgwMDA0CisjZGVmaW5lIE9NQVAzNDMwRVMyX0NNX0ZDTEtFTjMJCQkJMHgwMDA4CisjZGVmaW5lIE9NQVAzNDMwX0NNX0lETEVTVF9QTEwJCQkJQ01fSURMRVNUMgorI2RlZmluZSBPTUFQMzQzMF9DTV9BVVRPSURMRV9QTEwJCQlDTV9BVVRPSURMRTIKKyNkZWZpbmUgT01BUDM0MzBFUzJfQ01fQVVUT0lETEUyX1BMTAkJCUNNX0FVVE9JRExFMgorI2RlZmluZSBPTUFQMzQzMF9DTV9DTEtTRUwxCQkJCUNNX0NMS1NFTAorI2RlZmluZSBPTUFQMzQzMF9DTV9DTEtTRUwxX1BMTAkJCQlDTV9DTEtTRUwKKyNkZWZpbmUgT01BUDM0MzBfQ01fQ0xLU0VMMl9QTEwJCQkJQ01fQ0xLU0VMMgorI2RlZmluZSBPTUFQMzQzMF9DTV9TTEVFUERFUAkJCQlDTV9DTEtTRUwyCisjZGVmaW5lIE9NQVAzNDMwX0NNX0NMS1NFTDMJCQkJT01BUDJfQ01fQ0xLU1RDVFJMCisjZGVmaW5lIE9NQVAzNDMwX0NNX0NMS1NUU1QJCQkJMHgwMDRjCisjZGVmaW5lIE9NQVAzNDMwRVMyX0NNX0NMS1NFTDQJCQkJMHgwMDRjCisjZGVmaW5lIE9NQVAzNDMwRVMyX0NNX0NMS1NFTDUJCQkJMHgwMDUwCisjZGVmaW5lIE9NQVAzNDMwX0NNX0NMS1NFTDJfRU1VCQkJCTB4MDA1MAorI2RlZmluZSBPTUFQMzQzMF9DTV9DTEtTRUwzX0VNVQkJCQkweDAwNTQKKworCisvKiBDTV9JRExFU1QgYml0IGZpZWxkIHZhbHVlcyB0byBpbmRpY2F0ZSBkZWFzc2VydGVkIElkbGVSZXEgKi8KKworI2RlZmluZSBPTUFQMjRYWF9DTV9JRExFU1RfVkFMCQkJCTAKKyNkZWZpbmUgT01BUDM0WFhfQ01fSURMRVNUX1ZBTAkJCQkxCisKKworLyogQ2xvY2sgbWFuYWdlbWVudCBkb21haW4gcmVnaXN0ZXIgZ2V0L3NldCAqLworCisjaWZuZGVmIF9fQVNTRU1CTEVSX18KKworZXh0ZXJuIHUzMiBvbWFwMl9jbV9yZWFkX21vZF9yZWcoczE2IG1vZHVsZSwgdTE2IGlkeCk7CitleHRlcm4gdm9pZCBvbWFwMl9jbV93cml0ZV9tb2RfcmVnKHUzMiB2YWwsIHMxNiBtb2R1bGUsIHUxNiBpZHgpOworZXh0ZXJuIHUzMiBvbWFwMl9jbV9ybXdfbW9kX3JlZ19iaXRzKHUzMiBtYXNrLCB1MzIgYml0cywgczE2IG1vZHVsZSwgczE2IGlkeCk7CisKK2V4dGVybiBpbnQgb21hcDJfY21fd2FpdF9tb2R1bGVfcmVhZHkoczE2IHByY21fbW9kLCB1OCBpZGxlc3RfaWQsCisJCQkJICAgICAgdTggaWRsZXN0X3NoaWZ0KTsKK2V4dGVybiB1MzIgb21hcDJfY21fc2V0X21vZF9yZWdfYml0cyh1MzIgYml0cywgczE2IG1vZHVsZSwgczE2IGlkeCk7CitleHRlcm4gdTMyIG9tYXAyX2NtX2NsZWFyX21vZF9yZWdfYml0cyh1MzIgYml0cywgczE2IG1vZHVsZSwgczE2IGlkeCk7CisKK2V4dGVybiBib29sIG9tYXAyX2NtX2lzX2Nsa2RtX2luX2h3c3VwKHMxNiBtb2R1bGUsIHUzMiBtYXNrKTsKK2V4dGVybiB2b2lkIG9tYXAyeHh4X2NtX2Nsa2RtX2VuYWJsZV9od3N1cChzMTYgbW9kdWxlLCB1MzIgbWFzayk7CitleHRlcm4gdm9pZCBvbWFwMnh4eF9jbV9jbGtkbV9kaXNhYmxlX2h3c3VwKHMxNiBtb2R1bGUsIHUzMiBtYXNrKTsKKworZXh0ZXJuIHZvaWQgb21hcDN4eHhfY21fY2xrZG1fZW5hYmxlX2h3c3VwKHMxNiBtb2R1bGUsIHUzMiBtYXNrKTsKK2V4dGVybiB2b2lkIG9tYXAzeHh4X2NtX2Nsa2RtX2Rpc2FibGVfaHdzdXAoczE2IG1vZHVsZSwgdTMyIG1hc2spOworZXh0ZXJuIHZvaWQgb21hcDN4eHhfY21fY2xrZG1fZm9yY2Vfc2xlZXAoczE2IG1vZHVsZSwgdTMyIG1hc2spOworZXh0ZXJuIHZvaWQgb21hcDN4eHhfY21fY2xrZG1fZm9yY2Vfd2FrZXVwKHMxNiBtb2R1bGUsIHUzMiBtYXNrKTsKKworI2VuZGlmCisKKy8qIENNIHJlZ2lzdGVyIGJpdHMgc2hhcmVkIGJldHdlZW4gMjRYWCBhbmQgMzQzMCAqLworCisvKiBDTV9DTEtTRUxfR0ZYICovCisjZGVmaW5lIE9NQVBfQ0xLU0VMX0dGWF9TSElGVAkJCQkwCisjZGVmaW5lIE9NQVBfQ0xLU0VMX0dGWF9NQVNLCQkJCSgweDcgPDwgMCkKKworLyogQ01fSUNMS0VOX0dGWCAqLworI2RlZmluZSBPTUFQX0VOX0dGWF9TSElGVAkJCQkwCisjZGVmaW5lIE9NQVBfRU5fR0ZYX01BU0sJCQkJKDEgPDwgMCkKKworLyogQ01fSURMRVNUX0dGWCAqLworI2RlZmluZSBPTUFQX1NUX0dGWF9NQVNLCQkJCSgxIDw8IDApCisKKworLyogRnVuY3Rpb24gcHJvdG90eXBlcyAqLworIyBpZm5kZWYgX19BU1NFTUJMRVJfXworZXh0ZXJuIHZvaWQgb21hcDNfY21fc2F2ZV9jb250ZXh0KHZvaWQpOworZXh0ZXJuIHZvaWQgb21hcDNfY21fcmVzdG9yZV9jb250ZXh0KHZvaWQpOworIyBlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY200NHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtNDR4eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5NmY1M2UKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtNDR4eC5jCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBPTUFQNCBDTTEsIENNMiBtb2R1bGUgbG93LWxldmVsIGZ1bmN0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgorICogUGF1bCBXYWxtc2xleQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhlc2UgZnVuY3Rpb25zIGFyZSBpbnRlbmRlZCB0byBiZSB1c2VkIG9ubHkgYnkgdGhlIGNtaW5zdDQ0eHguYyBmaWxlLgorICogWFhYIFBlcmhhcHMgd2Ugc2hvdWxkIGp1c3QgbW92ZSB0aGVtIHRoZXJlIGFuZCBtYWtlIHRoZW0gc3RhdGljLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPHBsYXQvY29tbW9uLmg+CisKKyNpbmNsdWRlICJjbS5oIgorI2luY2x1ZGUgImNtMV80NHh4LmgiCisjaW5jbHVkZSAiY20yXzQ0eHguaCIKKyNpbmNsdWRlICJjbS1yZWdiaXRzLTQ0eHguaCIKKworLyogQ00xIGhhcmR3YXJlIG1vZHVsZSBsb3ctbGV2ZWwgZnVuY3Rpb25zICovCisKKy8qIFJlYWQgYSByZWdpc3RlciBpbiBDTTEgKi8KK3UzMiBvbWFwNF9jbTFfcmVhZF9pbnN0X3JlZyhzMTYgaW5zdCwgdTE2IHJlZykKK3sKKwlyZXR1cm4gX19yYXdfcmVhZGwoT01BUDQ0WFhfQ00xX1JFR0FERFIoaW5zdCwgcmVnKSk7Cit9CisKKy8qIFdyaXRlIGludG8gYSByZWdpc3RlciBpbiBDTTEgKi8KK3ZvaWQgb21hcDRfY20xX3dyaXRlX2luc3RfcmVnKHUzMiB2YWwsIHMxNiBpbnN0LCB1MTYgcmVnKQoreworCV9fcmF3X3dyaXRlbCh2YWwsIE9NQVA0NFhYX0NNMV9SRUdBRERSKGluc3QsIHJlZykpOworfQorCisvKiBSZWFkIGEgcmVnaXN0ZXIgaW4gQ00yICovCit1MzIgb21hcDRfY20yX3JlYWRfaW5zdF9yZWcoczE2IGluc3QsIHUxNiByZWcpCit7CisJcmV0dXJuIF9fcmF3X3JlYWRsKE9NQVA0NFhYX0NNMl9SRUdBRERSKGluc3QsIHJlZykpOworfQorCisvKiBXcml0ZSBpbnRvIGEgcmVnaXN0ZXIgaW4gQ00yICovCit2b2lkIG9tYXA0X2NtMl93cml0ZV9pbnN0X3JlZyh1MzIgdmFsLCBzMTYgaW5zdCwgdTE2IHJlZykKK3sKKwlfX3Jhd193cml0ZWwodmFsLCBPTUFQNDRYWF9DTTJfUkVHQUREUihpbnN0LCByZWcpKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY200NHh4LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtNDR4eC5oCmluZGV4IDNjMzVhODcuLjQ4ZmMzZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY200NHh4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTQ0eHguaApAQCAtMSw2NjcgKzEsMzEgQEAKIC8qCi0gKiBPTUFQNDR4eCBDTTEgJiBDTTIgaW5zdGFuY2Ugb2Zmc2V0IG1hY3JvcworICogT01BUDQgQ2xvY2sgTWFuYWdlbWVudCAoQ00pIGRlZmluaXRpb25zCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIE5va2lhIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgTm9raWEgQ29ycG9yYXRpb24KICAqCi0gKiBQYXVsIFdhbG1zbGV5IChwYXVsQHB3c2FuLmNvbSkKLSAqIFJhamVuZHJhIE5heWFrIChybmF5YWtAdGkuY29tKQotICogQmVub2l0IENvdXNzb24gKGItY291c3NvbkB0aS5jb20pCi0gKgotICogVGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdGhlIE9NQVAgaGFyZHdhcmUgZGF0YWJhc2VzLgotICogV2UgcmVzcGVjdGZ1bGx5IGFzayB0aGF0IGFueSBtb2RpZmljYXRpb25zIHRvIHRoaXMgZmlsZSBiZSBjb29yZGluYXRlZAotICogd2l0aCB0aGUgcHVibGljIGxpbnV4LW9tYXBAdmdlci5rZXJuZWwub3JnIG1haWxpbmcgbGlzdCBhbmQgdGhlCi0gKiBhdXRob3JzIGFib3ZlIHRvIGVuc3VyZSB0aGF0IHRoZSBhdXRvZ2VuZXJhdGlvbiBzY3JpcHRzIGFyZSBrZXB0Ci0gKiB1cC10by1kYXRlIHdpdGggdGhlIGZpbGUgY29udGVudHMuCisgKiBXcml0dGVuIGJ5IFBhdWwgV2FsbXNsZXkKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIE9NQVA0IGhhcyB0d28gc2VwYXJhdGUgQ00gYmxvY2tzLCBDTTEgYW5kIENNMi4gIFRoaXMgZmlsZSBjb250YWlucworICogbWFjcm9zIGFuZCBmdW5jdGlvbiBwcm90b3R5cGVzIHRoYXQgYXJlIGFwcGxpY2FibGUgdG8gYm90aC4KICAqLwotCi0jaWZuZGVmIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9DTTQ0WFhfSAotI2RlZmluZSBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfQ000NFhYX0gKKyNpZm5kZWYgX19BUkNIX0FTTV9NQUNIX09NQVAyX0NNNDRYWF9ICisjZGVmaW5lIF9fQVJDSF9BU01fTUFDSF9PTUFQMl9DTTQ0WFhfSAogCiAKLS8qIENNMSAqLworI2luY2x1ZGUgInByY20tY29tbW9uLmgiCisjaW5jbHVkZSAiY20uaCIKIAotLyogQ00xLk9DUF9TT0NLRVRfQ00xIHJlZ2lzdGVyIG9mZnNldHMgKi8KLSNkZWZpbmUgT01BUDRfUkVWSVNJT05fQ00xX09GRlNFVAkJCTB4MDAwMAotI2RlZmluZSBPTUFQNDQzMF9SRVZJU0lPTl9DTTEJCQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX09DUF9TT0NLRVRfTU9ELCAweDAwMDApCi0jZGVmaW5lIE9NQVA0X0NNX0NNMV9QUk9GSUxJTkdfQ0xLQ1RSTF9PRkZTRVQJCTB4MDA0MAotI2RlZmluZSBPTUFQNDQzMF9DTV9DTTFfUFJPRklMSU5HX0NMS0NUUkwJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9PQ1BfU09DS0VUX01PRCwgMHgwMDQwKQorI2RlZmluZSBPTUFQNF9DTV9DTEtTVENUUkwJCQkJMHgwMDAwCiAKLS8qIENNMS5DS0dFTl9DTTEgcmVnaXN0ZXIgb2Zmc2V0cyAqLwotI2RlZmluZSBPTUFQNF9DTV9DTEtTRUxfQ09SRV9PRkZTRVQJCQkweDAwMDAKLSNkZWZpbmUgT01BUDQ0MzBfQ01fQ0xLU0VMX0NPUkUJCQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0NLR0VOX01PRCwgMHgwMDAwKQotI2RlZmluZSBPTUFQNF9DTV9DTEtTRUxfQUJFX09GRlNFVAkJCTB4MDAwOAotI2RlZmluZSBPTUFQNDQzMF9DTV9DTEtTRUxfQUJFCQkJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9DS0dFTl9NT0QsIDB4MDAwOCkKLSNkZWZpbmUgT01BUDRfQ01fRExMX0NUUkxfT0ZGU0VUCQkJMHgwMDEwCi0jZGVmaW5lIE9NQVA0NDMwX0NNX0RMTF9DVFJMCQkJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9DS0dFTl9NT0QsIDB4MDAxMCkKLSNkZWZpbmUgT01BUDRfQ01fQ0xLTU9ERV9EUExMX0NPUkVfT0ZGU0VUCQkweDAwMjAKLSNkZWZpbmUgT01BUDQ0MzBfQ01fQ0xLTU9ERV9EUExMX0NPUkUJCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQ0tHRU5fTU9ELCAweDAwMjApCi0jZGVmaW5lIE9NQVA0X0NNX0lETEVTVF9EUExMX0NPUkVfT0ZGU0VUCQkweDAwMjQKLSNkZWZpbmUgT01BUDQ0MzBfQ01fSURMRVNUX0RQTExfQ09SRQkJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9DS0dFTl9NT0QsIDB4MDAyNCkKLSNkZWZpbmUgT01BUDRfQ01fQVVUT0lETEVfRFBMTF9DT1JFX09GRlNFVAkJMHgwMDI4Ci0jZGVmaW5lIE9NQVA0NDMwX0NNX0FVVE9JRExFX0RQTExfQ09SRQkJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9DS0dFTl9NT0QsIDB4MDAyOCkKLSNkZWZpbmUgT01BUDRfQ01fQ0xLU0VMX0RQTExfQ09SRV9PRkZTRVQJCTB4MDAyYwotI2RlZmluZSBPTUFQNDQzMF9DTV9DTEtTRUxfRFBMTF9DT1JFCQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0NLR0VOX01PRCwgMHgwMDJjKQotI2RlZmluZSBPTUFQNF9DTV9ESVZfTTJfRFBMTF9DT1JFX09GRlNFVAkJMHgwMDMwCi0jZGVmaW5lIE9NQVA0NDMwX0NNX0RJVl9NMl9EUExMX0NPUkUJCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQ0tHRU5fTU9ELCAweDAwMzApCi0jZGVmaW5lIE9NQVA0X0NNX0RJVl9NM19EUExMX0NPUkVfT0ZGU0VUCQkweDAwMzQKLSNkZWZpbmUgT01BUDQ0MzBfQ01fRElWX00zX0RQTExfQ09SRQkJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9DS0dFTl9NT0QsIDB4MDAzNCkKLSNkZWZpbmUgT01BUDRfQ01fRElWX000X0RQTExfQ09SRV9PRkZTRVQJCTB4MDAzOAotI2RlZmluZSBPTUFQNDQzMF9DTV9ESVZfTTRfRFBMTF9DT1JFCQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0NLR0VOX01PRCwgMHgwMDM4KQotI2RlZmluZSBPTUFQNF9DTV9ESVZfTTVfRFBMTF9DT1JFX09GRlNFVAkJMHgwMDNjCi0jZGVmaW5lIE9NQVA0NDMwX0NNX0RJVl9NNV9EUExMX0NPUkUJCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQ0tHRU5fTU9ELCAweDAwM2MpCi0jZGVmaW5lIE9NQVA0X0NNX0RJVl9NNl9EUExMX0NPUkVfT0ZGU0VUCQkweDAwNDAKLSNkZWZpbmUgT01BUDQ0MzBfQ01fRElWX002X0RQTExfQ09SRQkJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9DS0dFTl9NT0QsIDB4MDA0MCkKLSNkZWZpbmUgT01BUDRfQ01fRElWX003X0RQTExfQ09SRV9PRkZTRVQJCTB4MDA0NAotI2RlZmluZSBPTUFQNDQzMF9DTV9ESVZfTTdfRFBMTF9DT1JFCQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0NLR0VOX01PRCwgMHgwMDQ0KQotI2RlZmluZSBPTUFQNF9DTV9TU0NfREVMVEFNU1RFUF9EUExMX0NPUkVfT0ZGU0VUCTB4MDA0OAotI2RlZmluZSBPTUFQNDQzMF9DTV9TU0NfREVMVEFNU1RFUF9EUExMX0NPUkUJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9DS0dFTl9NT0QsIDB4MDA0OCkKLSNkZWZpbmUgT01BUDRfQ01fU1NDX01PREZSRVFESVZfRFBMTF9DT1JFX09GRlNFVAkweDAwNGMKLSNkZWZpbmUgT01BUDQ0MzBfQ01fU1NDX01PREZSRVFESVZfRFBMTF9DT1JFCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQ0tHRU5fTU9ELCAweDAwNGMpCi0jZGVmaW5lIE9NQVA0X0NNX0VNVV9PVkVSUklERV9EUExMX0NPUkVfT0ZGU0VUCQkweDAwNTAKLSNkZWZpbmUgT01BUDQ0MzBfQ01fRU1VX09WRVJSSURFX0RQTExfQ09SRQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0NLR0VOX01PRCwgMHgwMDUwKQotI2RlZmluZSBPTUFQNF9DTV9DTEtNT0RFX0RQTExfTVBVX09GRlNFVAkJMHgwMDYwCi0jZGVmaW5lIE9NQVA0NDMwX0NNX0NMS01PREVfRFBMTF9NUFUJCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQ0tHRU5fTU9ELCAweDAwNjApCi0jZGVmaW5lIE9NQVA0X0NNX0lETEVTVF9EUExMX01QVV9PRkZTRVQJCQkweDAwNjQKLSNkZWZpbmUgT01BUDQ0MzBfQ01fSURMRVNUX0RQTExfTVBVCQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0NLR0VOX01PRCwgMHgwMDY0KQotI2RlZmluZSBPTUFQNF9DTV9BVVRPSURMRV9EUExMX01QVV9PRkZTRVQJCTB4MDA2OAotI2RlZmluZSBPTUFQNDQzMF9DTV9BVVRPSURMRV9EUExMX01QVQkJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9DS0dFTl9NT0QsIDB4MDA2OCkKLSNkZWZpbmUgT01BUDRfQ01fQ0xLU0VMX0RQTExfTVBVX09GRlNFVAkJCTB4MDA2YwotI2RlZmluZSBPTUFQNDQzMF9DTV9DTEtTRUxfRFBMTF9NUFUJCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQ0tHRU5fTU9ELCAweDAwNmMpCi0jZGVmaW5lIE9NQVA0X0NNX0RJVl9NMl9EUExMX01QVV9PRkZTRVQJCQkweDAwNzAKLSNkZWZpbmUgT01BUDQ0MzBfQ01fRElWX00yX0RQTExfTVBVCQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0NLR0VOX01PRCwgMHgwMDcwKQotI2RlZmluZSBPTUFQNF9DTV9TU0NfREVMVEFNU1RFUF9EUExMX01QVV9PRkZTRVQJCTB4MDA4OAotI2RlZmluZSBPTUFQNDQzMF9DTV9TU0NfREVMVEFNU1RFUF9EUExMX01QVQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0NLR0VOX01PRCwgMHgwMDg4KQotI2RlZmluZSBPTUFQNF9DTV9TU0NfTU9ERlJFUURJVl9EUExMX01QVV9PRkZTRVQJCTB4MDA4YwotI2RlZmluZSBPTUFQNDQzMF9DTV9TU0NfTU9ERlJFUURJVl9EUExMX01QVQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0NLR0VOX01PRCwgMHgwMDhjKQotI2RlZmluZSBPTUFQNF9DTV9CWVBDTEtfRFBMTF9NUFVfT0ZGU0VUCQkJMHgwMDljCi0jZGVmaW5lIE9NQVA0NDMwX0NNX0JZUENMS19EUExMX01QVQkJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9DS0dFTl9NT0QsIDB4MDA5YykKLSNkZWZpbmUgT01BUDRfQ01fQ0xLTU9ERV9EUExMX0lWQV9PRkZTRVQJCTB4MDBhMAotI2RlZmluZSBPTUFQNDQzMF9DTV9DTEtNT0RFX0RQTExfSVZBCQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0NLR0VOX01PRCwgMHgwMGEwKQotI2RlZmluZSBPTUFQNF9DTV9JRExFU1RfRFBMTF9JVkFfT0ZGU0VUCQkJMHgwMGE0Ci0jZGVmaW5lIE9NQVA0NDMwX0NNX0lETEVTVF9EUExMX0lWQQkJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9DS0dFTl9NT0QsIDB4MDBhNCkKLSNkZWZpbmUgT01BUDRfQ01fQVVUT0lETEVfRFBMTF9JVkFfT0ZGU0VUCQkweDAwYTgKLSNkZWZpbmUgT01BUDQ0MzBfQ01fQVVUT0lETEVfRFBMTF9JVkEJCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQ0tHRU5fTU9ELCAweDAwYTgpCi0jZGVmaW5lIE9NQVA0X0NNX0NMS1NFTF9EUExMX0lWQV9PRkZTRVQJCQkweDAwYWMKLSNkZWZpbmUgT01BUDQ0MzBfQ01fQ0xLU0VMX0RQTExfSVZBCQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0NLR0VOX01PRCwgMHgwMGFjKQotI2RlZmluZSBPTUFQNF9DTV9ESVZfTTRfRFBMTF9JVkFfT0ZGU0VUCQkJMHgwMGI4Ci0jZGVmaW5lIE9NQVA0NDMwX0NNX0RJVl9NNF9EUExMX0lWQQkJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9DS0dFTl9NT0QsIDB4MDBiOCkKLSNkZWZpbmUgT01BUDRfQ01fRElWX001X0RQTExfSVZBX09GRlNFVAkJCTB4MDBiYwotI2RlZmluZSBPTUFQNDQzMF9DTV9ESVZfTTVfRFBMTF9JVkEJCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQ0tHRU5fTU9ELCAweDAwYmMpCi0jZGVmaW5lIE9NQVA0X0NNX1NTQ19ERUxUQU1TVEVQX0RQTExfSVZBX09GRlNFVAkJMHgwMGM4Ci0jZGVmaW5lIE9NQVA0NDMwX0NNX1NTQ19ERUxUQU1TVEVQX0RQTExfSVZBCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQ0tHRU5fTU9ELCAweDAwYzgpCi0jZGVmaW5lIE9NQVA0X0NNX1NTQ19NT0RGUkVRRElWX0RQTExfSVZBX09GRlNFVAkJMHgwMGNjCi0jZGVmaW5lIE9NQVA0NDMwX0NNX1NTQ19NT0RGUkVRRElWX0RQTExfSVZBCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQ0tHRU5fTU9ELCAweDAwY2MpCi0jZGVmaW5lIE9NQVA0X0NNX0JZUENMS19EUExMX0lWQV9PRkZTRVQJCQkweDAwZGMKLSNkZWZpbmUgT01BUDQ0MzBfQ01fQllQQ0xLX0RQTExfSVZBCQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0NLR0VOX01PRCwgMHgwMGRjKQotI2RlZmluZSBPTUFQNF9DTV9DTEtNT0RFX0RQTExfQUJFX09GRlNFVAkJMHgwMGUwCi0jZGVmaW5lIE9NQVA0NDMwX0NNX0NMS01PREVfRFBMTF9BQkUJCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQ0tHRU5fTU9ELCAweDAwZTApCi0jZGVmaW5lIE9NQVA0X0NNX0lETEVTVF9EUExMX0FCRV9PRkZTRVQJCQkweDAwZTQKLSNkZWZpbmUgT01BUDQ0MzBfQ01fSURMRVNUX0RQTExfQUJFCQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0NLR0VOX01PRCwgMHgwMGU0KQotI2RlZmluZSBPTUFQNF9DTV9BVVRPSURMRV9EUExMX0FCRV9PRkZTRVQJCTB4MDBlOAotI2RlZmluZSBPTUFQNDQzMF9DTV9BVVRPSURMRV9EUExMX0FCRQkJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9DS0dFTl9NT0QsIDB4MDBlOCkKLSNkZWZpbmUgT01BUDRfQ01fQ0xLU0VMX0RQTExfQUJFX09GRlNFVAkJCTB4MDBlYwotI2RlZmluZSBPTUFQNDQzMF9DTV9DTEtTRUxfRFBMTF9BQkUJCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQ0tHRU5fTU9ELCAweDAwZWMpCi0jZGVmaW5lIE9NQVA0X0NNX0RJVl9NMl9EUExMX0FCRV9PRkZTRVQJCQkweDAwZjAKLSNkZWZpbmUgT01BUDQ0MzBfQ01fRElWX00yX0RQTExfQUJFCQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0NLR0VOX01PRCwgMHgwMGYwKQotI2RlZmluZSBPTUFQNF9DTV9ESVZfTTNfRFBMTF9BQkVfT0ZGU0VUCQkJMHgwMGY0Ci0jZGVmaW5lIE9NQVA0NDMwX0NNX0RJVl9NM19EUExMX0FCRQkJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9DS0dFTl9NT0QsIDB4MDBmNCkKLSNkZWZpbmUgT01BUDRfQ01fU1NDX0RFTFRBTVNURVBfRFBMTF9BQkVfT0ZGU0VUCQkweDAxMDgKLSNkZWZpbmUgT01BUDQ0MzBfQ01fU1NDX0RFTFRBTVNURVBfRFBMTF9BQkUJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9DS0dFTl9NT0QsIDB4MDEwOCkKLSNkZWZpbmUgT01BUDRfQ01fU1NDX01PREZSRVFESVZfRFBMTF9BQkVfT0ZGU0VUCQkweDAxMGMKLSNkZWZpbmUgT01BUDQ0MzBfQ01fU1NDX01PREZSRVFESVZfRFBMTF9BQkUJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9DS0dFTl9NT0QsIDB4MDEwYykKLSNkZWZpbmUgT01BUDRfQ01fQ0xLTU9ERV9EUExMX0REUlBIWV9PRkZTRVQJCTB4MDEyMAotI2RlZmluZSBPTUFQNDQzMF9DTV9DTEtNT0RFX0RQTExfRERSUEhZCQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0NLR0VOX01PRCwgMHgwMTIwKQotI2RlZmluZSBPTUFQNF9DTV9JRExFU1RfRFBMTF9ERFJQSFlfT0ZGU0VUCQkweDAxMjQKLSNkZWZpbmUgT01BUDQ0MzBfQ01fSURMRVNUX0RQTExfRERSUEhZCQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0NLR0VOX01PRCwgMHgwMTI0KQotI2RlZmluZSBPTUFQNF9DTV9BVVRPSURMRV9EUExMX0REUlBIWV9PRkZTRVQJCTB4MDEyOAotI2RlZmluZSBPTUFQNDQzMF9DTV9BVVRPSURMRV9EUExMX0REUlBIWQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0NLR0VOX01PRCwgMHgwMTI4KQotI2RlZmluZSBPTUFQNF9DTV9DTEtTRUxfRFBMTF9ERFJQSFlfT0ZGU0VUCQkweDAxMmMKLSNkZWZpbmUgT01BUDQ0MzBfQ01fQ0xLU0VMX0RQTExfRERSUEhZCQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0NLR0VOX01PRCwgMHgwMTJjKQotI2RlZmluZSBPTUFQNF9DTV9ESVZfTTJfRFBMTF9ERFJQSFlfT0ZGU0VUCQkweDAxMzAKLSNkZWZpbmUgT01BUDQ0MzBfQ01fRElWX00yX0RQTExfRERSUEhZCQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0NLR0VOX01PRCwgMHgwMTMwKQotI2RlZmluZSBPTUFQNF9DTV9ESVZfTTRfRFBMTF9ERFJQSFlfT0ZGU0VUCQkweDAxMzgKLSNkZWZpbmUgT01BUDQ0MzBfQ01fRElWX000X0RQTExfRERSUEhZCQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0NLR0VOX01PRCwgMHgwMTM4KQotI2RlZmluZSBPTUFQNF9DTV9ESVZfTTVfRFBMTF9ERFJQSFlfT0ZGU0VUCQkweDAxM2MKLSNkZWZpbmUgT01BUDQ0MzBfQ01fRElWX001X0RQTExfRERSUEhZCQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0NLR0VOX01PRCwgMHgwMTNjKQotI2RlZmluZSBPTUFQNF9DTV9ESVZfTTZfRFBMTF9ERFJQSFlfT0ZGU0VUCQkweDAxNDAKLSNkZWZpbmUgT01BUDQ0MzBfQ01fRElWX002X0RQTExfRERSUEhZCQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0NLR0VOX01PRCwgMHgwMTQwKQotI2RlZmluZSBPTUFQNF9DTV9TU0NfREVMVEFNU1RFUF9EUExMX0REUlBIWV9PRkZTRVQJMHgwMTQ4Ci0jZGVmaW5lIE9NQVA0NDMwX0NNX1NTQ19ERUxUQU1TVEVQX0RQTExfRERSUEhZCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQ0tHRU5fTU9ELCAweDAxNDgpCi0jZGVmaW5lIE9NQVA0X0NNX1NTQ19NT0RGUkVRRElWX0RQTExfRERSUEhZX09GRlNFVAkweDAxNGMKLSNkZWZpbmUgT01BUDQ0MzBfQ01fU1NDX01PREZSRVFESVZfRFBMTF9ERFJQSFkJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9DS0dFTl9NT0QsIDB4MDE0YykKLSNkZWZpbmUgT01BUDRfQ01fU0hBRE9XX0ZSRVFfQ09ORklHMV9PRkZTRVQJCTB4MDE2MAotI2RlZmluZSBPTUFQNDQzMF9DTV9TSEFET1dfRlJFUV9DT05GSUcxCQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0NLR0VOX01PRCwgMHgwMTYwKQotI2RlZmluZSBPTUFQNF9DTV9TSEFET1dfRlJFUV9DT05GSUcyX09GRlNFVAkJMHgwMTY0Ci0jZGVmaW5lIE9NQVA0NDMwX0NNX1NIQURPV19GUkVRX0NPTkZJRzIJCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQ0tHRU5fTU9ELCAweDAxNjQpCi0jZGVmaW5lIE9NQVA0X0NNX0RZTl9ERVBfUFJFU0NBTF9PRkZTRVQJCQkweDAxNzAKLSNkZWZpbmUgT01BUDQ0MzBfQ01fRFlOX0RFUF9QUkVTQ0FMCQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0NLR0VOX01PRCwgMHgwMTcwKQotI2RlZmluZSBPTUFQNF9DTV9SRVNUT1JFX1NUX09GRlNFVAkJCTB4MDE4MAotI2RlZmluZSBPTUFQNDQzMF9DTV9SRVNUT1JFX1NUCQkJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9DS0dFTl9NT0QsIDB4MDE4MCkKKy8qIEZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KKyMgaWZuZGVmIF9fQVNTRU1CTEVSX18KIAotLyogQ00xLk1QVV9DTTEgcmVnaXN0ZXIgb2Zmc2V0cyAqLwotI2RlZmluZSBPTUFQNF9DTV9NUFVfQ0xLU1RDVFJMX09GRlNFVAkJCTB4MDAwMAotI2RlZmluZSBPTUFQNDQzMF9DTV9NUFVfQ0xLU1RDVFJMCQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX01QVV9NT0QsIDB4MDAwMCkKLSNkZWZpbmUgT01BUDRfQ01fTVBVX1NUQVRJQ0RFUF9PRkZTRVQJCQkweDAwMDQKLSNkZWZpbmUgT01BUDQ0MzBfQ01fTVBVX1NUQVRJQ0RFUAkJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9NUFVfTU9ELCAweDAwMDQpCi0jZGVmaW5lIE9NQVA0X0NNX01QVV9EWU5BTUlDREVQX09GRlNFVAkJCTB4MDAwOAotI2RlZmluZSBPTUFQNDQzMF9DTV9NUFVfRFlOQU1JQ0RFUAkJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9NUFVfTU9ELCAweDAwMDgpCi0jZGVmaW5lIE9NQVA0X0NNX01QVV9NUFVfQ0xLQ1RSTF9PRkZTRVQJCQkweDAwMjAKLSNkZWZpbmUgT01BUDQ0MzBfQ01fTVBVX01QVV9DTEtDVFJMCQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX01QVV9NT0QsIDB4MDAyMCkKK2V4dGVybiBpbnQgb21hcDRfY21fd2FpdF9tb2R1bGVfcmVhZHkodm9pZCBfX2lvbWVtICpjbGtjdHJsX3JlZyk7CiAKLS8qIENNMS5URVNMQV9DTTEgcmVnaXN0ZXIgb2Zmc2V0cyAqLwotI2RlZmluZSBPTUFQNF9DTV9URVNMQV9DTEtTVENUUkxfT0ZGU0VUCQkJMHgwMDAwCi0jZGVmaW5lIE9NQVA0NDMwX0NNX1RFU0xBX0NMS1NUQ1RSTAkJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9URVNMQV9NT0QsIDB4MDAwMCkKLSNkZWZpbmUgT01BUDRfQ01fVEVTTEFfU1RBVElDREVQX09GRlNFVAkJCTB4MDAwNAotI2RlZmluZSBPTUFQNDQzMF9DTV9URVNMQV9TVEFUSUNERVAJCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfVEVTTEFfTU9ELCAweDAwMDQpCi0jZGVmaW5lIE9NQVA0X0NNX1RFU0xBX0RZTkFNSUNERVBfT0ZGU0VUCQkweDAwMDgKLSNkZWZpbmUgT01BUDQ0MzBfQ01fVEVTTEFfRFlOQU1JQ0RFUAkJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9URVNMQV9NT0QsIDB4MDAwOCkKLSNkZWZpbmUgT01BUDRfQ01fVEVTTEFfVEVTTEFfQ0xLQ1RSTF9PRkZTRVQJCTB4MDAyMAotI2RlZmluZSBPTUFQNDQzMF9DTV9URVNMQV9URVNMQV9DTEtDVFJMCQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX1RFU0xBX01PRCwgMHgwMDIwKQotCi0vKiBDTTEuQUJFX0NNMSByZWdpc3RlciBvZmZzZXRzICovCi0jZGVmaW5lIE9NQVA0X0NNMV9BQkVfQ0xLU1RDVFJMX09GRlNFVAkJCTB4MDAwMAotI2RlZmluZSBPTUFQNDQzMF9DTTFfQUJFX0NMS1NUQ1RSTAkJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9BQkVfTU9ELCAweDAwMDApCi0jZGVmaW5lIE9NQVA0X0NNMV9BQkVfTDRBQkVfQ0xLQ1RSTF9PRkZTRVQJCTB4MDAyMAotI2RlZmluZSBPTUFQNDQzMF9DTTFfQUJFX0w0QUJFX0NMS0NUUkwJCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQUJFX01PRCwgMHgwMDIwKQotI2RlZmluZSBPTUFQNF9DTTFfQUJFX0FFU1NfQ0xLQ1RSTF9PRkZTRVQJCTB4MDAyOAotI2RlZmluZSBPTUFQNDQzMF9DTTFfQUJFX0FFU1NfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9BQkVfTU9ELCAweDAwMjgpCi0jZGVmaW5lIE9NQVA0X0NNMV9BQkVfUERNX0NMS0NUUkxfT0ZGU0VUCQkweDAwMzAKLSNkZWZpbmUgT01BUDQ0MzBfQ00xX0FCRV9QRE1fQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9BQkVfTU9ELCAweDAwMzApCi0jZGVmaW5lIE9NQVA0X0NNMV9BQkVfRE1JQ19DTEtDVFJMX09GRlNFVAkJMHgwMDM4Ci0jZGVmaW5lIE9NQVA0NDMwX0NNMV9BQkVfRE1JQ19DTEtDVFJMCQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX0FCRV9NT0QsIDB4MDAzOCkKLSNkZWZpbmUgT01BUDRfQ00xX0FCRV9NQ0FTUF9DTEtDVFJMX09GRlNFVAkJMHgwMDQwCi0jZGVmaW5lIE9NQVA0NDMwX0NNMV9BQkVfTUNBU1BfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9BQkVfTU9ELCAweDAwNDApCi0jZGVmaW5lIE9NQVA0X0NNMV9BQkVfTUNCU1AxX0NMS0NUUkxfT0ZGU0VUCQkweDAwNDgKLSNkZWZpbmUgT01BUDQ0MzBfQ00xX0FCRV9NQ0JTUDFfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9BQkVfTU9ELCAweDAwNDgpCi0jZGVmaW5lIE9NQVA0X0NNMV9BQkVfTUNCU1AyX0NMS0NUUkxfT0ZGU0VUCQkweDAwNTAKLSNkZWZpbmUgT01BUDQ0MzBfQ00xX0FCRV9NQ0JTUDJfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9BQkVfTU9ELCAweDAwNTApCi0jZGVmaW5lIE9NQVA0X0NNMV9BQkVfTUNCU1AzX0NMS0NUUkxfT0ZGU0VUCQkweDAwNTgKLSNkZWZpbmUgT01BUDQ0MzBfQ00xX0FCRV9NQ0JTUDNfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9BQkVfTU9ELCAweDAwNTgpCi0jZGVmaW5lIE9NQVA0X0NNMV9BQkVfU0xJTUJVU19DTEtDVFJMX09GRlNFVAkJMHgwMDYwCi0jZGVmaW5lIE9NQVA0NDMwX0NNMV9BQkVfU0xJTUJVU19DTEtDVFJMCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQUJFX01PRCwgMHgwMDYwKQotI2RlZmluZSBPTUFQNF9DTTFfQUJFX1RJTUVSNV9DTEtDVFJMX09GRlNFVAkJMHgwMDY4Ci0jZGVmaW5lIE9NQVA0NDMwX0NNMV9BQkVfVElNRVI1X0NMS0NUUkwJCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQUJFX01PRCwgMHgwMDY4KQotI2RlZmluZSBPTUFQNF9DTTFfQUJFX1RJTUVSNl9DTEtDVFJMX09GRlNFVAkJMHgwMDcwCi0jZGVmaW5lIE9NQVA0NDMwX0NNMV9BQkVfVElNRVI2X0NMS0NUUkwJCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQUJFX01PRCwgMHgwMDcwKQotI2RlZmluZSBPTUFQNF9DTTFfQUJFX1RJTUVSN19DTEtDVFJMX09GRlNFVAkJMHgwMDc4Ci0jZGVmaW5lIE9NQVA0NDMwX0NNMV9BQkVfVElNRVI3X0NMS0NUUkwJCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQUJFX01PRCwgMHgwMDc4KQotI2RlZmluZSBPTUFQNF9DTTFfQUJFX1RJTUVSOF9DTEtDVFJMX09GRlNFVAkJMHgwMDgwCi0jZGVmaW5lIE9NQVA0NDMwX0NNMV9BQkVfVElNRVI4X0NMS0NUUkwJCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfQUJFX01PRCwgMHgwMDgwKQotI2RlZmluZSBPTUFQNF9DTTFfQUJFX1dEVDNfQ0xLQ1RSTF9PRkZTRVQJCTB4MDA4OAotI2RlZmluZSBPTUFQNDQzMF9DTTFfQUJFX1dEVDNfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9BQkVfTU9ELCAweDAwODgpCi0KLS8qIENNMS5SRVNUT1JFX0NNMSByZWdpc3RlciBvZmZzZXRzICovCi0jZGVmaW5lIE9NQVA0X0NNX0NMS1NFTF9DT1JFX1JFU1RPUkVfT0ZGU0VUCQkweDAwMDAKLSNkZWZpbmUgT01BUDQ0MzBfQ01fQ0xLU0VMX0NPUkVfUkVTVE9SRQkJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9SRVNUT1JFX01PRCwgMHgwMDAwKQotI2RlZmluZSBPTUFQNF9DTV9ESVZfTTJfRFBMTF9DT1JFX1JFU1RPUkVfT0ZGU0VUCTB4MDAwNAotI2RlZmluZSBPTUFQNDQzMF9DTV9ESVZfTTJfRFBMTF9DT1JFX1JFU1RPUkUJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9SRVNUT1JFX01PRCwgMHgwMDA0KQotI2RlZmluZSBPTUFQNF9DTV9ESVZfTTNfRFBMTF9DT1JFX1JFU1RPUkVfT0ZGU0VUCTB4MDAwOAotI2RlZmluZSBPTUFQNDQzMF9DTV9ESVZfTTNfRFBMTF9DT1JFX1JFU1RPUkUJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9SRVNUT1JFX01PRCwgMHgwMDA4KQotI2RlZmluZSBPTUFQNF9DTV9ESVZfTTRfRFBMTF9DT1JFX1JFU1RPUkVfT0ZGU0VUCTB4MDAwYwotI2RlZmluZSBPTUFQNDQzMF9DTV9ESVZfTTRfRFBMTF9DT1JFX1JFU1RPUkUJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9SRVNUT1JFX01PRCwgMHgwMDBjKQotI2RlZmluZSBPTUFQNF9DTV9ESVZfTTVfRFBMTF9DT1JFX1JFU1RPUkVfT0ZGU0VUCTB4MDAxMAotI2RlZmluZSBPTUFQNDQzMF9DTV9ESVZfTTVfRFBMTF9DT1JFX1JFU1RPUkUJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9SRVNUT1JFX01PRCwgMHgwMDEwKQotI2RlZmluZSBPTUFQNF9DTV9ESVZfTTZfRFBMTF9DT1JFX1JFU1RPUkVfT0ZGU0VUCTB4MDAxNAotI2RlZmluZSBPTUFQNDQzMF9DTV9ESVZfTTZfRFBMTF9DT1JFX1JFU1RPUkUJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9SRVNUT1JFX01PRCwgMHgwMDE0KQotI2RlZmluZSBPTUFQNF9DTV9ESVZfTTdfRFBMTF9DT1JFX1JFU1RPUkVfT0ZGU0VUCTB4MDAxOAotI2RlZmluZSBPTUFQNDQzMF9DTV9ESVZfTTdfRFBMTF9DT1JFX1JFU1RPUkUJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9SRVNUT1JFX01PRCwgMHgwMDE4KQotI2RlZmluZSBPTUFQNF9DTV9DTEtTRUxfRFBMTF9DT1JFX1JFU1RPUkVfT0ZGU0VUCTB4MDAxYwotI2RlZmluZSBPTUFQNDQzMF9DTV9DTEtTRUxfRFBMTF9DT1JFX1JFU1RPUkUJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9SRVNUT1JFX01PRCwgMHgwMDFjKQotI2RlZmluZSBPTUFQNF9DTV9TU0NfREVMVEFNU1RFUF9EUExMX0NPUkVfUkVTVE9SRV9PRkZTRVQJMHgwMDIwCi0jZGVmaW5lIE9NQVA0NDMwX0NNX1NTQ19ERUxUQU1TVEVQX0RQTExfQ09SRV9SRVNUT1JFCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9SRVNUT1JFX01PRCwgMHgwMDIwKQotI2RlZmluZSBPTUFQNF9DTV9TU0NfTU9ERlJFUURJVl9EUExMX0NPUkVfUkVTVE9SRV9PRkZTRVQJMHgwMDI0Ci0jZGVmaW5lIE9NQVA0NDMwX0NNX1NTQ19NT0RGUkVRRElWX0RQTExfQ09SRV9SRVNUT1JFCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9SRVNUT1JFX01PRCwgMHgwMDI0KQotI2RlZmluZSBPTUFQNF9DTV9DTEtNT0RFX0RQTExfQ09SRV9SRVNUT1JFX09GRlNFVAkweDAwMjgKLSNkZWZpbmUgT01BUDQ0MzBfQ01fQ0xLTU9ERV9EUExMX0NPUkVfUkVTVE9SRQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX1JFU1RPUkVfTU9ELCAweDAwMjgpCi0jZGVmaW5lIE9NQVA0X0NNX1NIQURPV19GUkVRX0NPTkZJRzJfUkVTVE9SRV9PRkZTRVQJMHgwMDJjCi0jZGVmaW5lIE9NQVA0NDMwX0NNX1NIQURPV19GUkVRX0NPTkZJRzJfUkVTVE9SRQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX1JFU1RPUkVfTU9ELCAweDAwMmMpCi0jZGVmaW5lIE9NQVA0X0NNX1NIQURPV19GUkVRX0NPTkZJRzFfUkVTVE9SRV9PRkZTRVQJMHgwMDMwCi0jZGVmaW5lIE9NQVA0NDMwX0NNX1NIQURPV19GUkVRX0NPTkZJRzFfUkVTVE9SRQkJT01BUDQ0WFhfQ00xX1JFR0FERFIoT01BUDQ0MzBfQ00xX1JFU1RPUkVfTU9ELCAweDAwMzApCi0jZGVmaW5lIE9NQVA0X0NNX0FVVE9JRExFX0RQTExfQ09SRV9SRVNUT1JFX09GRlNFVAkweDAwMzQKLSNkZWZpbmUgT01BUDQ0MzBfQ01fQVVUT0lETEVfRFBMTF9DT1JFX1JFU1RPUkUJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9SRVNUT1JFX01PRCwgMHgwMDM0KQotI2RlZmluZSBPTUFQNF9DTV9NUFVfQ0xLU1RDVFJMX1JFU1RPUkVfT0ZGU0VUCQkweDAwMzgKLSNkZWZpbmUgT01BUDQ0MzBfQ01fTVBVX0NMS1NUQ1RSTF9SRVNUT1JFCQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfUkVTVE9SRV9NT0QsIDB4MDAzOCkKLSNkZWZpbmUgT01BUDRfQ01fQ00xX1BST0ZJTElOR19DTEtDVFJMX1JFU1RPUkVfT0ZGU0VUCTB4MDAzYwotI2RlZmluZSBPTUFQNDQzMF9DTV9DTTFfUFJPRklMSU5HX0NMS0NUUkxfUkVTVE9SRQlPTUFQNDRYWF9DTTFfUkVHQUREUihPTUFQNDQzMF9DTTFfUkVTVE9SRV9NT0QsIDB4MDAzYykKLSNkZWZpbmUgT01BUDRfQ01fRFlOX0RFUF9QUkVTQ0FMX1JFU1RPUkVfT0ZGU0VUCQkweDAwNDAKLSNkZWZpbmUgT01BUDQ0MzBfQ01fRFlOX0RFUF9QUkVTQ0FMX1JFU1RPUkUJCU9NQVA0NFhYX0NNMV9SRUdBRERSKE9NQVA0NDMwX0NNMV9SRVNUT1JFX01PRCwgMHgwMDQwKQotCi0vKiBDTTIgKi8KLQotLyogQ00yLk9DUF9TT0NLRVRfQ00yIHJlZ2lzdGVyIG9mZnNldHMgKi8KLSNkZWZpbmUgT01BUDRfUkVWSVNJT05fQ00yX09GRlNFVAkJCTB4MDAwMAotI2RlZmluZSBPTUFQNDQzMF9SRVZJU0lPTl9DTTIJCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX09DUF9TT0NLRVRfTU9ELCAweDAwMDApCi0jZGVmaW5lIE9NQVA0X0NNX0NNMl9QUk9GSUxJTkdfQ0xLQ1RSTF9PRkZTRVQJCTB4MDA0MAotI2RlZmluZSBPTUFQNDQzMF9DTV9DTTJfUFJPRklMSU5HX0NMS0NUUkwJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9PQ1BfU09DS0VUX01PRCwgMHgwMDQwKQotCi0vKiBDTTIuQ0tHRU5fQ00yIHJlZ2lzdGVyIG9mZnNldHMgKi8KLSNkZWZpbmUgT01BUDRfQ01fQ0xLU0VMX0RVQ0FUSV9JU1NfUk9PVF9PRkZTRVQJCTB4MDAwMAotI2RlZmluZSBPTUFQNDQzMF9DTV9DTEtTRUxfRFVDQVRJX0lTU19ST09UCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ0tHRU5fTU9ELCAweDAwMDApCi0jZGVmaW5lIE9NQVA0X0NNX0NMS1NFTF9VU0JfNjBNSFpfT0ZGU0VUCQkweDAwMDQKLSNkZWZpbmUgT01BUDQ0MzBfQ01fQ0xLU0VMX1VTQl82ME1IWgkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DS0dFTl9NT0QsIDB4MDAwNCkKLSNkZWZpbmUgT01BUDRfQ01fU0NBTEVfRkNMS19PRkZTRVQJCQkweDAwMDgKLSNkZWZpbmUgT01BUDQ0MzBfQ01fU0NBTEVfRkNMSwkJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ0tHRU5fTU9ELCAweDAwMDgpCi0jZGVmaW5lIE9NQVA0X0NNX0NPUkVfRFZGU19QRVJGMV9PRkZTRVQJCQkweDAwMTAKLSNkZWZpbmUgT01BUDQ0MzBfQ01fQ09SRV9EVkZTX1BFUkYxCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NLR0VOX01PRCwgMHgwMDEwKQotI2RlZmluZSBPTUFQNF9DTV9DT1JFX0RWRlNfUEVSRjJfT0ZGU0VUCQkJMHgwMDE0Ci0jZGVmaW5lIE9NQVA0NDMwX0NNX0NPUkVfRFZGU19QRVJGMgkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DS0dFTl9NT0QsIDB4MDAxNCkKLSNkZWZpbmUgT01BUDRfQ01fQ09SRV9EVkZTX1BFUkYzX09GRlNFVAkJCTB4MDAxOAotI2RlZmluZSBPTUFQNDQzMF9DTV9DT1JFX0RWRlNfUEVSRjMJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ0tHRU5fTU9ELCAweDAwMTgpCi0jZGVmaW5lIE9NQVA0X0NNX0NPUkVfRFZGU19QRVJGNF9PRkZTRVQJCQkweDAwMWMKLSNkZWZpbmUgT01BUDQ0MzBfQ01fQ09SRV9EVkZTX1BFUkY0CQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NLR0VOX01PRCwgMHgwMDFjKQotI2RlZmluZSBPTUFQNF9DTV9DT1JFX0RWRlNfQ1VSUkVOVF9PRkZTRVQJCTB4MDAyNAotI2RlZmluZSBPTUFQNDQzMF9DTV9DT1JFX0RWRlNfQ1VSUkVOVAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DS0dFTl9NT0QsIDB4MDAyNCkKLSNkZWZpbmUgT01BUDRfQ01fSVZBX0RWRlNfUEVSRl9URVNMQV9PRkZTRVQJCTB4MDAyOAotI2RlZmluZSBPTUFQNDQzMF9DTV9JVkFfRFZGU19QRVJGX1RFU0xBCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NLR0VOX01PRCwgMHgwMDI4KQotI2RlZmluZSBPTUFQNF9DTV9JVkFfRFZGU19QRVJGX0lWQUhEX09GRlNFVAkJMHgwMDJjCi0jZGVmaW5lIE9NQVA0NDMwX0NNX0lWQV9EVkZTX1BFUkZfSVZBSEQJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ0tHRU5fTU9ELCAweDAwMmMpCi0jZGVmaW5lIE9NQVA0X0NNX0lWQV9EVkZTX1BFUkZfQUJFX09GRlNFVAkJMHgwMDMwCi0jZGVmaW5lIE9NQVA0NDMwX0NNX0lWQV9EVkZTX1BFUkZfQUJFCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NLR0VOX01PRCwgMHgwMDMwKQotI2RlZmluZSBPTUFQNF9DTV9JVkFfRFZGU19DVVJSRU5UX09GRlNFVAkJMHgwMDM4Ci0jZGVmaW5lIE9NQVA0NDMwX0NNX0lWQV9EVkZTX0NVUlJFTlQJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ0tHRU5fTU9ELCAweDAwMzgpCi0jZGVmaW5lIE9NQVA0X0NNX0NMS01PREVfRFBMTF9QRVJfT0ZGU0VUCQkweDAwNDAKLSNkZWZpbmUgT01BUDQ0MzBfQ01fQ0xLTU9ERV9EUExMX1BFUgkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DS0dFTl9NT0QsIDB4MDA0MCkKLSNkZWZpbmUgT01BUDRfQ01fSURMRVNUX0RQTExfUEVSX09GRlNFVAkJCTB4MDA0NAotI2RlZmluZSBPTUFQNDQzMF9DTV9JRExFU1RfRFBMTF9QRVIJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ0tHRU5fTU9ELCAweDAwNDQpCi0jZGVmaW5lIE9NQVA0X0NNX0FVVE9JRExFX0RQTExfUEVSX09GRlNFVAkJMHgwMDQ4Ci0jZGVmaW5lIE9NQVA0NDMwX0NNX0FVVE9JRExFX0RQTExfUEVSCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NLR0VOX01PRCwgMHgwMDQ4KQotI2RlZmluZSBPTUFQNF9DTV9DTEtTRUxfRFBMTF9QRVJfT0ZGU0VUCQkJMHgwMDRjCi0jZGVmaW5lIE9NQVA0NDMwX0NNX0NMS1NFTF9EUExMX1BFUgkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DS0dFTl9NT0QsIDB4MDA0YykKLSNkZWZpbmUgT01BUDRfQ01fRElWX00yX0RQTExfUEVSX09GRlNFVAkJCTB4MDA1MAotI2RlZmluZSBPTUFQNDQzMF9DTV9ESVZfTTJfRFBMTF9QRVIJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ0tHRU5fTU9ELCAweDAwNTApCi0jZGVmaW5lIE9NQVA0X0NNX0RJVl9NM19EUExMX1BFUl9PRkZTRVQJCQkweDAwNTQKLSNkZWZpbmUgT01BUDQ0MzBfQ01fRElWX00zX0RQTExfUEVSCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NLR0VOX01PRCwgMHgwMDU0KQotI2RlZmluZSBPTUFQNF9DTV9ESVZfTTRfRFBMTF9QRVJfT0ZGU0VUCQkJMHgwMDU4Ci0jZGVmaW5lIE9NQVA0NDMwX0NNX0RJVl9NNF9EUExMX1BFUgkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DS0dFTl9NT0QsIDB4MDA1OCkKLSNkZWZpbmUgT01BUDRfQ01fRElWX001X0RQTExfUEVSX09GRlNFVAkJCTB4MDA1YwotI2RlZmluZSBPTUFQNDQzMF9DTV9ESVZfTTVfRFBMTF9QRVIJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ0tHRU5fTU9ELCAweDAwNWMpCi0jZGVmaW5lIE9NQVA0X0NNX0RJVl9NNl9EUExMX1BFUl9PRkZTRVQJCQkweDAwNjAKLSNkZWZpbmUgT01BUDQ0MzBfQ01fRElWX002X0RQTExfUEVSCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NLR0VOX01PRCwgMHgwMDYwKQotI2RlZmluZSBPTUFQNF9DTV9ESVZfTTdfRFBMTF9QRVJfT0ZGU0VUCQkJMHgwMDY0Ci0jZGVmaW5lIE9NQVA0NDMwX0NNX0RJVl9NN19EUExMX1BFUgkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DS0dFTl9NT0QsIDB4MDA2NCkKLSNkZWZpbmUgT01BUDRfQ01fU1NDX0RFTFRBTVNURVBfRFBMTF9QRVJfT0ZGU0VUCQkweDAwNjgKLSNkZWZpbmUgT01BUDQ0MzBfQ01fU1NDX0RFTFRBTVNURVBfRFBMTF9QRVIJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DS0dFTl9NT0QsIDB4MDA2OCkKLSNkZWZpbmUgT01BUDRfQ01fU1NDX01PREZSRVFESVZfRFBMTF9QRVJfT0ZGU0VUCQkweDAwNmMKLSNkZWZpbmUgT01BUDQ0MzBfQ01fU1NDX01PREZSRVFESVZfRFBMTF9QRVIJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DS0dFTl9NT0QsIDB4MDA2YykKLSNkZWZpbmUgT01BUDRfQ01fQ0xLTU9ERV9EUExMX1VTQl9PRkZTRVQJCTB4MDA4MAotI2RlZmluZSBPTUFQNDQzMF9DTV9DTEtNT0RFX0RQTExfVVNCCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NLR0VOX01PRCwgMHgwMDgwKQotI2RlZmluZSBPTUFQNF9DTV9JRExFU1RfRFBMTF9VU0JfT0ZGU0VUCQkJMHgwMDg0Ci0jZGVmaW5lIE9NQVA0NDMwX0NNX0lETEVTVF9EUExMX1VTQgkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DS0dFTl9NT0QsIDB4MDA4NCkKLSNkZWZpbmUgT01BUDRfQ01fQVVUT0lETEVfRFBMTF9VU0JfT0ZGU0VUCQkweDAwODgKLSNkZWZpbmUgT01BUDQ0MzBfQ01fQVVUT0lETEVfRFBMTF9VU0IJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ0tHRU5fTU9ELCAweDAwODgpCi0jZGVmaW5lIE9NQVA0X0NNX0NMS1NFTF9EUExMX1VTQl9PRkZTRVQJCQkweDAwOGMKLSNkZWZpbmUgT01BUDQ0MzBfQ01fQ0xLU0VMX0RQTExfVVNCCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NLR0VOX01PRCwgMHgwMDhjKQotI2RlZmluZSBPTUFQNF9DTV9ESVZfTTJfRFBMTF9VU0JfT0ZGU0VUCQkJMHgwMDkwCi0jZGVmaW5lIE9NQVA0NDMwX0NNX0RJVl9NMl9EUExMX1VTQgkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DS0dFTl9NT0QsIDB4MDA5MCkKLSNkZWZpbmUgT01BUDRfQ01fU1NDX0RFTFRBTVNURVBfRFBMTF9VU0JfT0ZGU0VUCQkweDAwYTgKLSNkZWZpbmUgT01BUDQ0MzBfQ01fU1NDX0RFTFRBTVNURVBfRFBMTF9VU0IJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DS0dFTl9NT0QsIDB4MDBhOCkKLSNkZWZpbmUgT01BUDRfQ01fU1NDX01PREZSRVFESVZfRFBMTF9VU0JfT0ZGU0VUCQkweDAwYWMKLSNkZWZpbmUgT01BUDQ0MzBfQ01fU1NDX01PREZSRVFESVZfRFBMTF9VU0IJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DS0dFTl9NT0QsIDB4MDBhYykKLSNkZWZpbmUgT01BUDRfQ01fQ0xLRENPTERPX0RQTExfVVNCX09GRlNFVAkJMHgwMGI0Ci0jZGVmaW5lIE9NQVA0NDMwX0NNX0NMS0RDT0xET19EUExMX1VTQgkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DS0dFTl9NT0QsIDB4MDBiNCkKLSNkZWZpbmUgT01BUDRfQ01fQ0xLTU9ERV9EUExMX1VOSVBST19PRkZTRVQJCTB4MDBjMAotI2RlZmluZSBPTUFQNDQzMF9DTV9DTEtNT0RFX0RQTExfVU5JUFJPCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NLR0VOX01PRCwgMHgwMGMwKQotI2RlZmluZSBPTUFQNF9DTV9JRExFU1RfRFBMTF9VTklQUk9fT0ZGU0VUCQkweDAwYzQKLSNkZWZpbmUgT01BUDQ0MzBfQ01fSURMRVNUX0RQTExfVU5JUFJPCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NLR0VOX01PRCwgMHgwMGM0KQotI2RlZmluZSBPTUFQNF9DTV9BVVRPSURMRV9EUExMX1VOSVBST19PRkZTRVQJCTB4MDBjOAotI2RlZmluZSBPTUFQNDQzMF9DTV9BVVRPSURMRV9EUExMX1VOSVBSTwkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NLR0VOX01PRCwgMHgwMGM4KQotI2RlZmluZSBPTUFQNF9DTV9DTEtTRUxfRFBMTF9VTklQUk9fT0ZGU0VUCQkweDAwY2MKLSNkZWZpbmUgT01BUDQ0MzBfQ01fQ0xLU0VMX0RQTExfVU5JUFJPCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NLR0VOX01PRCwgMHgwMGNjKQotI2RlZmluZSBPTUFQNF9DTV9ESVZfTTJfRFBMTF9VTklQUk9fT0ZGU0VUCQkweDAwZDAKLSNkZWZpbmUgT01BUDQ0MzBfQ01fRElWX00yX0RQTExfVU5JUFJPCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NLR0VOX01PRCwgMHgwMGQwKQotI2RlZmluZSBPTUFQNF9DTV9TU0NfREVMVEFNU1RFUF9EUExMX1VOSVBST19PRkZTRVQJMHgwMGU4Ci0jZGVmaW5lIE9NQVA0NDMwX0NNX1NTQ19ERUxUQU1TVEVQX0RQTExfVU5JUFJPCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ0tHRU5fTU9ELCAweDAwZTgpCi0jZGVmaW5lIE9NQVA0X0NNX1NTQ19NT0RGUkVRRElWX0RQTExfVU5JUFJPX09GRlNFVAkweDAwZWMKLSNkZWZpbmUgT01BUDQ0MzBfQ01fU1NDX01PREZSRVFESVZfRFBMTF9VTklQUk8JCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DS0dFTl9NT0QsIDB4MDBlYykKLQotLyogQ00yLkFMV0FZU19PTl9DTTIgcmVnaXN0ZXIgb2Zmc2V0cyAqLwotI2RlZmluZSBPTUFQNF9DTV9BTFdPTl9DTEtTVENUUkxfT0ZGU0VUCQkJMHgwMDAwCi0jZGVmaW5lIE9NQVA0NDMwX0NNX0FMV09OX0NMS1NUQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9BTFdBWVNfT05fTU9ELCAweDAwMDApCi0jZGVmaW5lIE9NQVA0X0NNX0FMV09OX01ETUlOVENfQ0xLQ1RSTF9PRkZTRVQJCTB4MDAyMAotI2RlZmluZSBPTUFQNDQzMF9DTV9BTFdPTl9NRE1JTlRDX0NMS0NUUkwJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9BTFdBWVNfT05fTU9ELCAweDAwMjApCi0jZGVmaW5lIE9NQVA0X0NNX0FMV09OX1NSX01QVV9DTEtDVFJMX09GRlNFVAkJMHgwMDI4Ci0jZGVmaW5lIE9NQVA0NDMwX0NNX0FMV09OX1NSX01QVV9DTEtDVFJMCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQUxXQVlTX09OX01PRCwgMHgwMDI4KQotI2RlZmluZSBPTUFQNF9DTV9BTFdPTl9TUl9JVkFfQ0xLQ1RSTF9PRkZTRVQJCTB4MDAzMAotI2RlZmluZSBPTUFQNDQzMF9DTV9BTFdPTl9TUl9JVkFfQ0xLQ1RSTAkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0FMV0FZU19PTl9NT0QsIDB4MDAzMCkKLSNkZWZpbmUgT01BUDRfQ01fQUxXT05fU1JfQ09SRV9DTEtDVFJMX09GRlNFVAkJMHgwMDM4Ci0jZGVmaW5lIE9NQVA0NDMwX0NNX0FMV09OX1NSX0NPUkVfQ0xLQ1RSTAkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0FMV0FZU19PTl9NT0QsIDB4MDAzOCkKLSNkZWZpbmUgT01BUDRfQ01fQUxXT05fVVNCUEhZX0NMS0NUUkxfT0ZGU0VUCQkweDAwNDAKLSNkZWZpbmUgT01BUDQ0MzBfQ01fQUxXT05fVVNCUEhZX0NMS0NUUkwJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9BTFdBWVNfT05fTU9ELCAweDAwNDApCi0KLS8qIENNMi5DT1JFX0NNMiByZWdpc3RlciBvZmZzZXRzICovCi0jZGVmaW5lIE9NQVA0X0NNX0wzXzFfQ0xLU1RDVFJMX09GRlNFVAkJCTB4MDAwMAotI2RlZmluZSBPTUFQNDQzMF9DTV9MM18xX0NMS1NUQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DT1JFX01PRCwgMHgwMDAwKQotI2RlZmluZSBPTUFQNF9DTV9MM18xX0RZTkFNSUNERVBfT0ZGU0VUCQkJMHgwMDA4Ci0jZGVmaW5lIE9NQVA0NDMwX0NNX0wzXzFfRFlOQU1JQ0RFUAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DT1JFX01PRCwgMHgwMDA4KQotI2RlZmluZSBPTUFQNF9DTV9MM18xX0wzXzFfQ0xLQ1RSTF9PRkZTRVQJCTB4MDAyMAotI2RlZmluZSBPTUFQNDQzMF9DTV9MM18xX0wzXzFfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DT1JFX01PRCwgMHgwMDIwKQotI2RlZmluZSBPTUFQNF9DTV9MM18yX0NMS1NUQ1RSTF9PRkZTRVQJCQkweDAxMDAKLSNkZWZpbmUgT01BUDQ0MzBfQ01fTDNfMl9DTEtTVENUUkwJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ09SRV9NT0QsIDB4MDEwMCkKLSNkZWZpbmUgT01BUDRfQ01fTDNfMl9EWU5BTUlDREVQX09GRlNFVAkJCTB4MDEwOAotI2RlZmluZSBPTUFQNDQzMF9DTV9MM18yX0RZTkFNSUNERVAJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ09SRV9NT0QsIDB4MDEwOCkKLSNkZWZpbmUgT01BUDRfQ01fTDNfMl9MM18yX0NMS0NUUkxfT0ZGU0VUCQkweDAxMjAKLSNkZWZpbmUgT01BUDQ0MzBfQ01fTDNfMl9MM18yX0NMS0NUUkwJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ09SRV9NT0QsIDB4MDEyMCkKLSNkZWZpbmUgT01BUDRfQ01fTDNfMl9HUE1DX0NMS0NUUkxfT0ZGU0VUCQkweDAxMjgKLSNkZWZpbmUgT01BUDQ0MzBfQ01fTDNfMl9HUE1DX0NMS0NUUkwJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ09SRV9NT0QsIDB4MDEyOCkKLSNkZWZpbmUgT01BUDRfQ01fTDNfMl9PQ01DX1JBTV9DTEtDVFJMX09GRlNFVAkJMHgwMTMwCi0jZGVmaW5lIE9NQVA0NDMwX0NNX0wzXzJfT0NNQ19SQU1fQ0xLQ1RSTAkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NPUkVfTU9ELCAweDAxMzApCi0jZGVmaW5lIE9NQVA0X0NNX0RVQ0FUSV9DTEtTVENUUkxfT0ZGU0VUCQkweDAyMDAKLSNkZWZpbmUgT01BUDQ0MzBfQ01fRFVDQVRJX0NMS1NUQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DT1JFX01PRCwgMHgwMjAwKQotI2RlZmluZSBPTUFQNF9DTV9EVUNBVElfU1RBVElDREVQX09GRlNFVAkJMHgwMjA0Ci0jZGVmaW5lIE9NQVA0NDMwX0NNX0RVQ0FUSV9TVEFUSUNERVAJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ09SRV9NT0QsIDB4MDIwNCkKLSNkZWZpbmUgT01BUDRfQ01fRFVDQVRJX0RZTkFNSUNERVBfT0ZGU0VUCQkweDAyMDgKLSNkZWZpbmUgT01BUDQ0MzBfQ01fRFVDQVRJX0RZTkFNSUNERVAJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ09SRV9NT0QsIDB4MDIwOCkKLSNkZWZpbmUgT01BUDRfQ01fRFVDQVRJX0RVQ0FUSV9DTEtDVFJMX09GRlNFVAkJMHgwMjIwCi0jZGVmaW5lIE9NQVA0NDMwX0NNX0RVQ0FUSV9EVUNBVElfQ0xLQ1RSTAkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NPUkVfTU9ELCAweDAyMjApCi0jZGVmaW5lIE9NQVA0X0NNX1NETUFfQ0xLU1RDVFJMX09GRlNFVAkJCTB4MDMwMAotI2RlZmluZSBPTUFQNDQzMF9DTV9TRE1BX0NMS1NUQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DT1JFX01PRCwgMHgwMzAwKQotI2RlZmluZSBPTUFQNF9DTV9TRE1BX1NUQVRJQ0RFUF9PRkZTRVQJCQkweDAzMDQKLSNkZWZpbmUgT01BUDQ0MzBfQ01fU0RNQV9TVEFUSUNERVAJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ09SRV9NT0QsIDB4MDMwNCkKLSNkZWZpbmUgT01BUDRfQ01fU0RNQV9EWU5BTUlDREVQX09GRlNFVAkJCTB4MDMwOAotI2RlZmluZSBPTUFQNDQzMF9DTV9TRE1BX0RZTkFNSUNERVAJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ09SRV9NT0QsIDB4MDMwOCkKLSNkZWZpbmUgT01BUDRfQ01fU0RNQV9TRE1BX0NMS0NUUkxfT0ZGU0VUCQkweDAzMjAKLSNkZWZpbmUgT01BUDQ0MzBfQ01fU0RNQV9TRE1BX0NMS0NUUkwJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ09SRV9NT0QsIDB4MDMyMCkKLSNkZWZpbmUgT01BUDRfQ01fTUVNSUZfQ0xLU1RDVFJMX09GRlNFVAkJCTB4MDQwMAotI2RlZmluZSBPTUFQNDQzMF9DTV9NRU1JRl9DTEtTVENUUkwJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ09SRV9NT0QsIDB4MDQwMCkKLSNkZWZpbmUgT01BUDRfQ01fTUVNSUZfRE1NX0NMS0NUUkxfT0ZGU0VUCQkweDA0MjAKLSNkZWZpbmUgT01BUDQ0MzBfQ01fTUVNSUZfRE1NX0NMS0NUUkwJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ09SRV9NT0QsIDB4MDQyMCkKLSNkZWZpbmUgT01BUDRfQ01fTUVNSUZfRU1JRl9GV19DTEtDVFJMX09GRlNFVAkJMHgwNDI4Ci0jZGVmaW5lIE9NQVA0NDMwX0NNX01FTUlGX0VNSUZfRldfQ0xLQ1RSTAkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NPUkVfTU9ELCAweDA0MjgpCi0jZGVmaW5lIE9NQVA0X0NNX01FTUlGX0VNSUZfMV9DTEtDVFJMX09GRlNFVAkJMHgwNDMwCi0jZGVmaW5lIE9NQVA0NDMwX0NNX01FTUlGX0VNSUZfMV9DTEtDVFJMCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ09SRV9NT0QsIDB4MDQzMCkKLSNkZWZpbmUgT01BUDRfQ01fTUVNSUZfRU1JRl8yX0NMS0NUUkxfT0ZGU0VUCQkweDA0MzgKLSNkZWZpbmUgT01BUDQ0MzBfQ01fTUVNSUZfRU1JRl8yX0NMS0NUUkwJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DT1JFX01PRCwgMHgwNDM4KQotI2RlZmluZSBPTUFQNF9DTV9NRU1JRl9ETExfQ0xLQ1RSTF9PRkZTRVQJCTB4MDQ0MAotI2RlZmluZSBPTUFQNDQzMF9DTV9NRU1JRl9ETExfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DT1JFX01PRCwgMHgwNDQwKQotI2RlZmluZSBPTUFQNF9DTV9NRU1JRl9FTUlGX0gxX0NMS0NUUkxfT0ZGU0VUCQkweDA0NTAKLSNkZWZpbmUgT01BUDQ0MzBfQ01fTUVNSUZfRU1JRl9IMV9DTEtDVFJMCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ09SRV9NT0QsIDB4MDQ1MCkKLSNkZWZpbmUgT01BUDRfQ01fTUVNSUZfRU1JRl9IMl9DTEtDVFJMX09GRlNFVAkJMHgwNDU4Ci0jZGVmaW5lIE9NQVA0NDMwX0NNX01FTUlGX0VNSUZfSDJfQ0xLQ1RSTAkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NPUkVfTU9ELCAweDA0NTgpCi0jZGVmaW5lIE9NQVA0X0NNX01FTUlGX0RMTF9IX0NMS0NUUkxfT0ZGU0VUCQkweDA0NjAKLSNkZWZpbmUgT01BUDQ0MzBfQ01fTUVNSUZfRExMX0hfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DT1JFX01PRCwgMHgwNDYwKQotI2RlZmluZSBPTUFQNF9DTV9EMkRfQ0xLU1RDVFJMX09GRlNFVAkJCTB4MDUwMAotI2RlZmluZSBPTUFQNDQzMF9DTV9EMkRfQ0xLU1RDVFJMCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NPUkVfTU9ELCAweDA1MDApCi0jZGVmaW5lIE9NQVA0X0NNX0QyRF9TVEFUSUNERVBfT0ZGU0VUCQkJMHgwNTA0Ci0jZGVmaW5lIE9NQVA0NDMwX0NNX0QyRF9TVEFUSUNERVAJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ09SRV9NT0QsIDB4MDUwNCkKLSNkZWZpbmUgT01BUDRfQ01fRDJEX0RZTkFNSUNERVBfT0ZGU0VUCQkJMHgwNTA4Ci0jZGVmaW5lIE9NQVA0NDMwX0NNX0QyRF9EWU5BTUlDREVQCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NPUkVfTU9ELCAweDA1MDgpCi0jZGVmaW5lIE9NQVA0X0NNX0QyRF9TQUQyRF9DTEtDVFJMX09GRlNFVAkJMHgwNTIwCi0jZGVmaW5lIE9NQVA0NDMwX0NNX0QyRF9TQUQyRF9DTEtDVFJMCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NPUkVfTU9ELCAweDA1MjApCi0jZGVmaW5lIE9NQVA0X0NNX0QyRF9NT0RFTV9JQ1JfQ0xLQ1RSTF9PRkZTRVQJCTB4MDUyOAotI2RlZmluZSBPTUFQNDQzMF9DTV9EMkRfTU9ERU1fSUNSX0NMS0NUUkwJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DT1JFX01PRCwgMHgwNTI4KQotI2RlZmluZSBPTUFQNF9DTV9EMkRfU0FEMkRfRldfQ0xLQ1RSTF9PRkZTRVQJCTB4MDUzMAotI2RlZmluZSBPTUFQNDQzMF9DTV9EMkRfU0FEMkRfRldfQ0xLQ1RSTAkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NPUkVfTU9ELCAweDA1MzApCi0jZGVmaW5lIE9NQVA0X0NNX0w0Q0ZHX0NMS1NUQ1RSTF9PRkZTRVQJCQkweDA2MDAKLSNkZWZpbmUgT01BUDQ0MzBfQ01fTDRDRkdfQ0xLU1RDVFJMCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NPUkVfTU9ELCAweDA2MDApCi0jZGVmaW5lIE9NQVA0X0NNX0w0Q0ZHX0RZTkFNSUNERVBfT0ZGU0VUCQkweDA2MDgKLSNkZWZpbmUgT01BUDQ0MzBfQ01fTDRDRkdfRFlOQU1JQ0RFUAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DT1JFX01PRCwgMHgwNjA4KQotI2RlZmluZSBPTUFQNF9DTV9MNENGR19MNF9DRkdfQ0xLQ1RSTF9PRkZTRVQJCTB4MDYyMAotI2RlZmluZSBPTUFQNDQzMF9DTV9MNENGR19MNF9DRkdfQ0xLQ1RSTAkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NPUkVfTU9ELCAweDA2MjApCi0jZGVmaW5lIE9NQVA0X0NNX0w0Q0ZHX0hXX1NFTV9DTEtDVFJMX09GRlNFVAkJMHgwNjI4Ci0jZGVmaW5lIE9NQVA0NDMwX0NNX0w0Q0ZHX0hXX1NFTV9DTEtDVFJMCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ09SRV9NT0QsIDB4MDYyOCkKLSNkZWZpbmUgT01BUDRfQ01fTDRDRkdfTUFJTEJPWF9DTEtDVFJMX09GRlNFVAkJMHgwNjMwCi0jZGVmaW5lIE9NQVA0NDMwX0NNX0w0Q0ZHX01BSUxCT1hfQ0xLQ1RSTAkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NPUkVfTU9ELCAweDA2MzApCi0jZGVmaW5lIE9NQVA0X0NNX0w0Q0ZHX1NBUl9ST01fQ0xLQ1RSTF9PRkZTRVQJCTB4MDYzOAotI2RlZmluZSBPTUFQNDQzMF9DTV9MNENGR19TQVJfUk9NX0NMS0NUUkwJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DT1JFX01PRCwgMHgwNjM4KQotI2RlZmluZSBPTUFQNF9DTV9MM0lOU1RSX0NMS1NUQ1RSTF9PRkZTRVQJCTB4MDcwMAotI2RlZmluZSBPTUFQNDQzMF9DTV9MM0lOU1RSX0NMS1NUQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9DT1JFX01PRCwgMHgwNzAwKQotI2RlZmluZSBPTUFQNF9DTV9MM0lOU1RSX0wzXzNfQ0xLQ1RSTF9PRkZTRVQJCTB4MDcyMAotI2RlZmluZSBPTUFQNDQzMF9DTV9MM0lOU1RSX0wzXzNfQ0xLQ1RSTAkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NPUkVfTU9ELCAweDA3MjApCi0jZGVmaW5lIE9NQVA0X0NNX0wzSU5TVFJfTDNfSU5TVFJfQ0xLQ1RSTF9PRkZTRVQJMHgwNzI4Ci0jZGVmaW5lIE9NQVA0NDMwX0NNX0wzSU5TVFJfTDNfSU5TVFJfQ0xLQ1RSTAkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NPUkVfTU9ELCAweDA3MjgpCi0jZGVmaW5lIE9NQVA0X0NNX0wzSU5TVFJfT0NQX1dQMV9DTEtDVFJMX09GRlNFVAkJMHgwNzQwCi0jZGVmaW5lIE9NQVA0NDMwX0NNX0wzSU5TVFJfT0NQX1dQMV9DTEtDVFJMCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ09SRV9NT0QsIDB4MDc0MCkKLQotLyogQ00yLklWQUhEX0NNMiByZWdpc3RlciBvZmZzZXRzICovCi0jZGVmaW5lIE9NQVA0X0NNX0lWQUhEX0NMS1NUQ1RSTF9PRkZTRVQJCQkweDAwMDAKLSNkZWZpbmUgT01BUDQ0MzBfQ01fSVZBSERfQ0xLU1RDVFJMCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0lWQUhEX01PRCwgMHgwMDAwKQotI2RlZmluZSBPTUFQNF9DTV9JVkFIRF9TVEFUSUNERVBfT0ZGU0VUCQkJMHgwMDA0Ci0jZGVmaW5lIE9NQVA0NDMwX0NNX0lWQUhEX1NUQVRJQ0RFUAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9JVkFIRF9NT0QsIDB4MDAwNCkKLSNkZWZpbmUgT01BUDRfQ01fSVZBSERfRFlOQU1JQ0RFUF9PRkZTRVQJCTB4MDAwOAotI2RlZmluZSBPTUFQNDQzMF9DTV9JVkFIRF9EWU5BTUlDREVQCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0lWQUhEX01PRCwgMHgwMDA4KQotI2RlZmluZSBPTUFQNF9DTV9JVkFIRF9JVkFIRF9DTEtDVFJMX09GRlNFVAkJMHgwMDIwCi0jZGVmaW5lIE9NQVA0NDMwX0NNX0lWQUhEX0lWQUhEX0NMS0NUUkwJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfSVZBSERfTU9ELCAweDAwMjApCi0jZGVmaW5lIE9NQVA0X0NNX0lWQUhEX1NMMl9DTEtDVFJMX09GRlNFVAkJMHgwMDI4Ci0jZGVmaW5lIE9NQVA0NDMwX0NNX0lWQUhEX1NMMl9DTEtDVFJMCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0lWQUhEX01PRCwgMHgwMDI4KQotCi0vKiBDTTIuQ0FNX0NNMiByZWdpc3RlciBvZmZzZXRzICovCi0jZGVmaW5lIE9NQVA0X0NNX0NBTV9DTEtTVENUUkxfT0ZGU0VUCQkJMHgwMDAwCi0jZGVmaW5lIE9NQVA0NDMwX0NNX0NBTV9DTEtTVENUUkwJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ0FNX01PRCwgMHgwMDAwKQotI2RlZmluZSBPTUFQNF9DTV9DQU1fU1RBVElDREVQX09GRlNFVAkJCTB4MDAwNAotI2RlZmluZSBPTUFQNDQzMF9DTV9DQU1fU1RBVElDREVQCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NBTV9NT0QsIDB4MDAwNCkKLSNkZWZpbmUgT01BUDRfQ01fQ0FNX0RZTkFNSUNERVBfT0ZGU0VUCQkJMHgwMDA4Ci0jZGVmaW5lIE9NQVA0NDMwX0NNX0NBTV9EWU5BTUlDREVQCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0NBTV9NT0QsIDB4MDAwOCkKLSNkZWZpbmUgT01BUDRfQ01fQ0FNX0lTU19DTEtDVFJMX09GRlNFVAkJCTB4MDAyMAotI2RlZmluZSBPTUFQNDQzMF9DTV9DQU1fSVNTX0NMS0NUUkwJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ0FNX01PRCwgMHgwMDIwKQotI2RlZmluZSBPTUFQNF9DTV9DQU1fRkRJRl9DTEtDVFJMX09GRlNFVAkJMHgwMDI4Ci0jZGVmaW5lIE9NQVA0NDMwX0NNX0NBTV9GRElGX0NMS0NUUkwJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ0FNX01PRCwgMHgwMDI4KQotCi0vKiBDTTIuRFNTX0NNMiByZWdpc3RlciBvZmZzZXRzICovCi0jZGVmaW5lIE9NQVA0X0NNX0RTU19DTEtTVENUUkxfT0ZGU0VUCQkJMHgwMDAwCi0jZGVmaW5lIE9NQVA0NDMwX0NNX0RTU19DTEtTVENUUkwJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfRFNTX01PRCwgMHgwMDAwKQotI2RlZmluZSBPTUFQNF9DTV9EU1NfU1RBVElDREVQX09GRlNFVAkJCTB4MDAwNAotI2RlZmluZSBPTUFQNDQzMF9DTV9EU1NfU1RBVElDREVQCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0RTU19NT0QsIDB4MDAwNCkKLSNkZWZpbmUgT01BUDRfQ01fRFNTX0RZTkFNSUNERVBfT0ZGU0VUCQkJMHgwMDA4Ci0jZGVmaW5lIE9NQVA0NDMwX0NNX0RTU19EWU5BTUlDREVQCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0RTU19NT0QsIDB4MDAwOCkKLSNkZWZpbmUgT01BUDRfQ01fRFNTX0RTU19DTEtDVFJMX09GRlNFVAkJCTB4MDAyMAotI2RlZmluZSBPTUFQNDQzMF9DTV9EU1NfRFNTX0NMS0NUUkwJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfRFNTX01PRCwgMHgwMDIwKQotI2RlZmluZSBPTUFQNF9DTV9EU1NfREVJU1NfQ0xLQ1RSTF9PRkZTRVQJCTB4MDAyOAotI2RlZmluZSBPTUFQNDQzMF9DTV9EU1NfREVJU1NfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9EU1NfTU9ELCAweDAwMjgpCi0KLS8qIENNMi5HRlhfQ00yIHJlZ2lzdGVyIG9mZnNldHMgKi8KLSNkZWZpbmUgT01BUDRfQ01fR0ZYX0NMS1NUQ1RSTF9PRkZTRVQJCQkweDAwMDAKLSNkZWZpbmUgT01BUDQ0MzBfQ01fR0ZYX0NMS1NUQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9HRlhfTU9ELCAweDAwMDApCi0jZGVmaW5lIE9NQVA0X0NNX0dGWF9TVEFUSUNERVBfT0ZGU0VUCQkJMHgwMDA0Ci0jZGVmaW5lIE9NQVA0NDMwX0NNX0dGWF9TVEFUSUNERVAJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfR0ZYX01PRCwgMHgwMDA0KQotI2RlZmluZSBPTUFQNF9DTV9HRlhfRFlOQU1JQ0RFUF9PRkZTRVQJCQkweDAwMDgKLSNkZWZpbmUgT01BUDQ0MzBfQ01fR0ZYX0RZTkFNSUNERVAJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfR0ZYX01PRCwgMHgwMDA4KQotI2RlZmluZSBPTUFQNF9DTV9HRlhfR0ZYX0NMS0NUUkxfT0ZGU0VUCQkJMHgwMDIwCi0jZGVmaW5lIE9NQVA0NDMwX0NNX0dGWF9HRlhfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9HRlhfTU9ELCAweDAwMjApCi0KLS8qIENNMi5MM0lOSVRfQ00yIHJlZ2lzdGVyIG9mZnNldHMgKi8KLSNkZWZpbmUgT01BUDRfQ01fTDNJTklUX0NMS1NUQ1RSTF9PRkZTRVQJCTB4MDAwMAotI2RlZmluZSBPTUFQNDQzMF9DTV9MM0lOSVRfQ0xLU1RDVFJMCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0wzSU5JVF9NT0QsIDB4MDAwMCkKLSNkZWZpbmUgT01BUDRfQ01fTDNJTklUX1NUQVRJQ0RFUF9PRkZTRVQJCTB4MDAwNAotI2RlZmluZSBPTUFQNDQzMF9DTV9MM0lOSVRfU1RBVElDREVQCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0wzSU5JVF9NT0QsIDB4MDAwNCkKLSNkZWZpbmUgT01BUDRfQ01fTDNJTklUX0RZTkFNSUNERVBfT0ZGU0VUCQkweDAwMDgKLSNkZWZpbmUgT01BUDQ0MzBfQ01fTDNJTklUX0RZTkFNSUNERVAJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDNJTklUX01PRCwgMHgwMDA4KQotI2RlZmluZSBPTUFQNF9DTV9MM0lOSVRfTU1DMV9DTEtDVFJMX09GRlNFVAkJMHgwMDI4Ci0jZGVmaW5lIE9NQVA0NDMwX0NNX0wzSU5JVF9NTUMxX0NMS0NUUkwJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDNJTklUX01PRCwgMHgwMDI4KQotI2RlZmluZSBPTUFQNF9DTV9MM0lOSVRfTU1DMl9DTEtDVFJMX09GRlNFVAkJMHgwMDMwCi0jZGVmaW5lIE9NQVA0NDMwX0NNX0wzSU5JVF9NTUMyX0NMS0NUUkwJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDNJTklUX01PRCwgMHgwMDMwKQotI2RlZmluZSBPTUFQNF9DTV9MM0lOSVRfSFNJX0NMS0NUUkxfT0ZGU0VUCQkweDAwMzgKLSNkZWZpbmUgT01BUDQ0MzBfQ01fTDNJTklUX0hTSV9DTEtDVFJMCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0wzSU5JVF9NT0QsIDB4MDAzOCkKLSNkZWZpbmUgT01BUDRfQ01fTDNJTklUX1VOSVBSTzFfQ0xLQ1RSTF9PRkZTRVQJCTB4MDA0MAotI2RlZmluZSBPTUFQNDQzMF9DTV9MM0lOSVRfVU5JUFJPMV9DTEtDVFJMCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDNJTklUX01PRCwgMHgwMDQwKQotI2RlZmluZSBPTUFQNF9DTV9MM0lOSVRfVVNCX0hPU1RfQ0xLQ1RSTF9PRkZTRVQJCTB4MDA1OAotI2RlZmluZSBPTUFQNDQzMF9DTV9MM0lOSVRfVVNCX0hPU1RfQ0xLQ1RSTAkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0wzSU5JVF9NT0QsIDB4MDA1OCkKLSNkZWZpbmUgT01BUDRfQ01fTDNJTklUX1VTQl9PVEdfQ0xLQ1RSTF9PRkZTRVQJCTB4MDA2MAotI2RlZmluZSBPTUFQNDQzMF9DTV9MM0lOSVRfVVNCX09UR19DTEtDVFJMCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDNJTklUX01PRCwgMHgwMDYwKQotI2RlZmluZSBPTUFQNF9DTV9MM0lOSVRfVVNCX1RMTF9DTEtDVFJMX09GRlNFVAkJMHgwMDY4Ci0jZGVmaW5lIE9NQVA0NDMwX0NNX0wzSU5JVF9VU0JfVExMX0NMS0NUUkwJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MM0lOSVRfTU9ELCAweDAwNjgpCi0jZGVmaW5lIE9NQVA0X0NNX0wzSU5JVF9QMTUwMF9DTEtDVFJMX09GRlNFVAkJMHgwMDc4Ci0jZGVmaW5lIE9NQVA0NDMwX0NNX0wzSU5JVF9QMTUwMF9DTEtDVFJMCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDNJTklUX01PRCwgMHgwMDc4KQotI2RlZmluZSBPTUFQNF9DTV9MM0lOSVRfRU1BQ19DTEtDVFJMX09GRlNFVAkJMHgwMDgwCi0jZGVmaW5lIE9NQVA0NDMwX0NNX0wzSU5JVF9FTUFDX0NMS0NUUkwJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDNJTklUX01PRCwgMHgwMDgwKQotI2RlZmluZSBPTUFQNF9DTV9MM0lOSVRfU0FUQV9DTEtDVFJMX09GRlNFVAkJMHgwMDg4Ci0jZGVmaW5lIE9NQVA0NDMwX0NNX0wzSU5JVF9TQVRBX0NMS0NUUkwJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDNJTklUX01PRCwgMHgwMDg4KQotI2RlZmluZSBPTUFQNF9DTV9MM0lOSVRfVFBQU1NfQ0xLQ1RSTF9PRkZTRVQJCTB4MDA5MAotI2RlZmluZSBPTUFQNDQzMF9DTV9MM0lOSVRfVFBQU1NfQ0xLQ1RSTAkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0wzSU5JVF9NT0QsIDB4MDA5MCkKLSNkZWZpbmUgT01BUDRfQ01fTDNJTklUX1BDSUVTU19DTEtDVFJMX09GRlNFVAkJMHgwMDk4Ci0jZGVmaW5lIE9NQVA0NDMwX0NNX0wzSU5JVF9QQ0lFU1NfQ0xLQ1RSTAkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0wzSU5JVF9NT0QsIDB4MDA5OCkKLSNkZWZpbmUgT01BUDRfQ01fTDNJTklUX0NDUFRYX0NMS0NUUkxfT0ZGU0VUCQkweDAwYTgKLSNkZWZpbmUgT01BUDQ0MzBfQ01fTDNJTklUX0NDUFRYX0NMS0NUUkwJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MM0lOSVRfTU9ELCAweDAwYTgpCi0jZGVmaW5lIE9NQVA0X0NNX0wzSU5JVF9YSFBJX0NMS0NUUkxfT0ZGU0VUCQkweDAwYzAKLSNkZWZpbmUgT01BUDQ0MzBfQ01fTDNJTklUX1hIUElfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MM0lOSVRfTU9ELCAweDAwYzApCi0jZGVmaW5lIE9NQVA0X0NNX0wzSU5JVF9NTUM2X0NMS0NUUkxfT0ZGU0VUCQkweDAwYzgKLSNkZWZpbmUgT01BUDQ0MzBfQ01fTDNJTklUX01NQzZfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MM0lOSVRfTU9ELCAweDAwYzgpCi0jZGVmaW5lIE9NQVA0X0NNX0wzSU5JVF9VU0JfSE9TVF9GU19DTEtDVFJMX09GRlNFVAkweDAwZDAKLSNkZWZpbmUgT01BUDQ0MzBfQ01fTDNJTklUX1VTQl9IT1NUX0ZTX0NMS0NUUkwJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MM0lOSVRfTU9ELCAweDAwZDApCi0jZGVmaW5lIE9NQVA0X0NNX0wzSU5JVF9VU0JQSFlPQ1AyU0NQX0NMS0NUUkxfT0ZGU0VUCTB4MDBlMAotI2RlZmluZSBPTUFQNDQzMF9DTV9MM0lOSVRfVVNCUEhZT0NQMlNDUF9DTEtDVFJMCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MM0lOSVRfTU9ELCAweDAwZTApCi0KLS8qIENNMi5MNFBFUl9DTTIgcmVnaXN0ZXIgb2Zmc2V0cyAqLwotI2RlZmluZSBPTUFQNF9DTV9MNFBFUl9DTEtTVENUUkxfT0ZGU0VUCQkJMHgwMDAwCi0jZGVmaW5lIE9NQVA0NDMwX0NNX0w0UEVSX0NMS1NUQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MNFBFUl9NT0QsIDB4MDAwMCkKLSNkZWZpbmUgT01BUDRfQ01fTDRQRVJfRFlOQU1JQ0RFUF9PRkZTRVQJCTB4MDAwOAotI2RlZmluZSBPTUFQNDQzMF9DTV9MNFBFUl9EWU5BTUlDREVQCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0w0UEVSX01PRCwgMHgwMDA4KQotI2RlZmluZSBPTUFQNF9DTV9MNFBFUl9BRENfQ0xLQ1RSTF9PRkZTRVQJCTB4MDAyMAotI2RlZmluZSBPTUFQNDQzMF9DTV9MNFBFUl9BRENfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MNFBFUl9NT0QsIDB4MDAyMCkKLSNkZWZpbmUgT01BUDRfQ01fTDRQRVJfRE1USU1FUjEwX0NMS0NUUkxfT0ZGU0VUCQkweDAwMjgKLSNkZWZpbmUgT01BUDQ0MzBfQ01fTDRQRVJfRE1USU1FUjEwX0NMS0NUUkwJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MNFBFUl9NT0QsIDB4MDAyOCkKLSNkZWZpbmUgT01BUDRfQ01fTDRQRVJfRE1USU1FUjExX0NMS0NUUkxfT0ZGU0VUCQkweDAwMzAKLSNkZWZpbmUgT01BUDQ0MzBfQ01fTDRQRVJfRE1USU1FUjExX0NMS0NUUkwJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MNFBFUl9NT0QsIDB4MDAzMCkKLSNkZWZpbmUgT01BUDRfQ01fTDRQRVJfRE1USU1FUjJfQ0xLQ1RSTF9PRkZTRVQJCTB4MDAzOAotI2RlZmluZSBPTUFQNDQzMF9DTV9MNFBFUl9ETVRJTUVSMl9DTEtDVFJMCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDRQRVJfTU9ELCAweDAwMzgpCi0jZGVmaW5lIE9NQVA0X0NNX0w0UEVSX0RNVElNRVIzX0NMS0NUUkxfT0ZGU0VUCQkweDAwNDAKLSNkZWZpbmUgT01BUDQ0MzBfQ01fTDRQRVJfRE1USU1FUjNfQ0xLQ1RSTAkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0w0UEVSX01PRCwgMHgwMDQwKQotI2RlZmluZSBPTUFQNF9DTV9MNFBFUl9ETVRJTUVSNF9DTEtDVFJMX09GRlNFVAkJMHgwMDQ4Ci0jZGVmaW5lIE9NQVA0NDMwX0NNX0w0UEVSX0RNVElNRVI0X0NMS0NUUkwJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MNFBFUl9NT0QsIDB4MDA0OCkKLSNkZWZpbmUgT01BUDRfQ01fTDRQRVJfRE1USU1FUjlfQ0xLQ1RSTF9PRkZTRVQJCTB4MDA1MAotI2RlZmluZSBPTUFQNDQzMF9DTV9MNFBFUl9ETVRJTUVSOV9DTEtDVFJMCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDRQRVJfTU9ELCAweDAwNTApCi0jZGVmaW5lIE9NQVA0X0NNX0w0UEVSX0VMTV9DTEtDVFJMX09GRlNFVAkJMHgwMDU4Ci0jZGVmaW5lIE9NQVA0NDMwX0NNX0w0UEVSX0VMTV9DTEtDVFJMCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0w0UEVSX01PRCwgMHgwMDU4KQotI2RlZmluZSBPTUFQNF9DTV9MNFBFUl9HUElPMl9DTEtDVFJMX09GRlNFVAkJMHgwMDYwCi0jZGVmaW5lIE9NQVA0NDMwX0NNX0w0UEVSX0dQSU8yX0NMS0NUUkwJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDRQRVJfTU9ELCAweDAwNjApCi0jZGVmaW5lIE9NQVA0X0NNX0w0UEVSX0dQSU8zX0NMS0NUUkxfT0ZGU0VUCQkweDAwNjgKLSNkZWZpbmUgT01BUDQ0MzBfQ01fTDRQRVJfR1BJTzNfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MNFBFUl9NT0QsIDB4MDA2OCkKLSNkZWZpbmUgT01BUDRfQ01fTDRQRVJfR1BJTzRfQ0xLQ1RSTF9PRkZTRVQJCTB4MDA3MAotI2RlZmluZSBPTUFQNDQzMF9DTV9MNFBFUl9HUElPNF9DTEtDVFJMCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0w0UEVSX01PRCwgMHgwMDcwKQotI2RlZmluZSBPTUFQNF9DTV9MNFBFUl9HUElPNV9DTEtDVFJMX09GRlNFVAkJMHgwMDc4Ci0jZGVmaW5lIE9NQVA0NDMwX0NNX0w0UEVSX0dQSU81X0NMS0NUUkwJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDRQRVJfTU9ELCAweDAwNzgpCi0jZGVmaW5lIE9NQVA0X0NNX0w0UEVSX0dQSU82X0NMS0NUUkxfT0ZGU0VUCQkweDAwODAKLSNkZWZpbmUgT01BUDQ0MzBfQ01fTDRQRVJfR1BJTzZfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MNFBFUl9NT0QsIDB4MDA4MCkKLSNkZWZpbmUgT01BUDRfQ01fTDRQRVJfSERRMVdfQ0xLQ1RSTF9PRkZTRVQJCTB4MDA4OAotI2RlZmluZSBPTUFQNDQzMF9DTV9MNFBFUl9IRFExV19DTEtDVFJMCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0w0UEVSX01PRCwgMHgwMDg4KQotI2RlZmluZSBPTUFQNF9DTV9MNFBFUl9IRUNDMV9DTEtDVFJMX09GRlNFVAkJMHgwMDkwCi0jZGVmaW5lIE9NQVA0NDMwX0NNX0w0UEVSX0hFQ0MxX0NMS0NUUkwJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDRQRVJfTU9ELCAweDAwOTApCi0jZGVmaW5lIE9NQVA0X0NNX0w0UEVSX0hFQ0MyX0NMS0NUUkxfT0ZGU0VUCQkweDAwOTgKLSNkZWZpbmUgT01BUDQ0MzBfQ01fTDRQRVJfSEVDQzJfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MNFBFUl9NT0QsIDB4MDA5OCkKLSNkZWZpbmUgT01BUDRfQ01fTDRQRVJfSTJDMV9DTEtDVFJMX09GRlNFVAkJMHgwMGEwCi0jZGVmaW5lIE9NQVA0NDMwX0NNX0w0UEVSX0kyQzFfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MNFBFUl9NT0QsIDB4MDBhMCkKLSNkZWZpbmUgT01BUDRfQ01fTDRQRVJfSTJDMl9DTEtDVFJMX09GRlNFVAkJMHgwMGE4Ci0jZGVmaW5lIE9NQVA0NDMwX0NNX0w0UEVSX0kyQzJfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MNFBFUl9NT0QsIDB4MDBhOCkKLSNkZWZpbmUgT01BUDRfQ01fTDRQRVJfSTJDM19DTEtDVFJMX09GRlNFVAkJMHgwMGIwCi0jZGVmaW5lIE9NQVA0NDMwX0NNX0w0UEVSX0kyQzNfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MNFBFUl9NT0QsIDB4MDBiMCkKLSNkZWZpbmUgT01BUDRfQ01fTDRQRVJfSTJDNF9DTEtDVFJMX09GRlNFVAkJMHgwMGI4Ci0jZGVmaW5lIE9NQVA0NDMwX0NNX0w0UEVSX0kyQzRfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MNFBFUl9NT0QsIDB4MDBiOCkKLSNkZWZpbmUgT01BUDRfQ01fTDRQRVJfTDRQRVJfQ0xLQ1RSTF9PRkZTRVQJCTB4MDBjMAotI2RlZmluZSBPTUFQNDQzMF9DTV9MNFBFUl9MNFBFUl9DTEtDVFJMCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0w0UEVSX01PRCwgMHgwMGMwKQotI2RlZmluZSBPTUFQNF9DTV9MNFBFUl9NQ0FTUDJfQ0xLQ1RSTF9PRkZTRVQJCTB4MDBkMAotI2RlZmluZSBPTUFQNDQzMF9DTV9MNFBFUl9NQ0FTUDJfQ0xLQ1RSTAkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0w0UEVSX01PRCwgMHgwMGQwKQotI2RlZmluZSBPTUFQNF9DTV9MNFBFUl9NQ0FTUDNfQ0xLQ1RSTF9PRkZTRVQJCTB4MDBkOAotI2RlZmluZSBPTUFQNDQzMF9DTV9MNFBFUl9NQ0FTUDNfQ0xLQ1RSTAkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0w0UEVSX01PRCwgMHgwMGQ4KQotI2RlZmluZSBPTUFQNF9DTV9MNFBFUl9NQ0JTUDRfQ0xLQ1RSTF9PRkZTRVQJCTB4MDBlMAotI2RlZmluZSBPTUFQNDQzMF9DTV9MNFBFUl9NQ0JTUDRfQ0xLQ1RSTAkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0w0UEVSX01PRCwgMHgwMGUwKQotI2RlZmluZSBPTUFQNF9DTV9MNFBFUl9NR0FURV9DTEtDVFJMX09GRlNFVAkJMHgwMGU4Ci0jZGVmaW5lIE9NQVA0NDMwX0NNX0w0UEVSX01HQVRFX0NMS0NUUkwJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDRQRVJfTU9ELCAweDAwZTgpCi0jZGVmaW5lIE9NQVA0X0NNX0w0UEVSX01DU1BJMV9DTEtDVFJMX09GRlNFVAkJMHgwMGYwCi0jZGVmaW5lIE9NQVA0NDMwX0NNX0w0UEVSX01DU1BJMV9DTEtDVFJMCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDRQRVJfTU9ELCAweDAwZjApCi0jZGVmaW5lIE9NQVA0X0NNX0w0UEVSX01DU1BJMl9DTEtDVFJMX09GRlNFVAkJMHgwMGY4Ci0jZGVmaW5lIE9NQVA0NDMwX0NNX0w0UEVSX01DU1BJMl9DTEtDVFJMCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDRQRVJfTU9ELCAweDAwZjgpCi0jZGVmaW5lIE9NQVA0X0NNX0w0UEVSX01DU1BJM19DTEtDVFJMX09GRlNFVAkJMHgwMTAwCi0jZGVmaW5lIE9NQVA0NDMwX0NNX0w0UEVSX01DU1BJM19DTEtDVFJMCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDRQRVJfTU9ELCAweDAxMDApCi0jZGVmaW5lIE9NQVA0X0NNX0w0UEVSX01DU1BJNF9DTEtDVFJMX09GRlNFVAkJMHgwMTA4Ci0jZGVmaW5lIE9NQVA0NDMwX0NNX0w0UEVSX01DU1BJNF9DTEtDVFJMCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDRQRVJfTU9ELCAweDAxMDgpCi0jZGVmaW5lIE9NQVA0X0NNX0w0UEVSX01NQ1NEM19DTEtDVFJMX09GRlNFVAkJMHgwMTIwCi0jZGVmaW5lIE9NQVA0NDMwX0NNX0w0UEVSX01NQ1NEM19DTEtDVFJMCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDRQRVJfTU9ELCAweDAxMjApCi0jZGVmaW5lIE9NQVA0X0NNX0w0UEVSX01NQ1NENF9DTEtDVFJMX09GRlNFVAkJMHgwMTI4Ci0jZGVmaW5lIE9NQVA0NDMwX0NNX0w0UEVSX01NQ1NENF9DTEtDVFJMCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDRQRVJfTU9ELCAweDAxMjgpCi0jZGVmaW5lIE9NQVA0X0NNX0w0UEVSX01TUFJPSEdfQ0xLQ1RSTF9PRkZTRVQJCTB4MDEzMAotI2RlZmluZSBPTUFQNDQzMF9DTV9MNFBFUl9NU1BST0hHX0NMS0NUUkwJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MNFBFUl9NT0QsIDB4MDEzMCkKLSNkZWZpbmUgT01BUDRfQ01fTDRQRVJfU0xJTUJVUzJfQ0xLQ1RSTF9PRkZTRVQJCTB4MDEzOAotI2RlZmluZSBPTUFQNDQzMF9DTV9MNFBFUl9TTElNQlVTMl9DTEtDVFJMCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDRQRVJfTU9ELCAweDAxMzgpCi0jZGVmaW5lIE9NQVA0X0NNX0w0UEVSX1VBUlQxX0NMS0NUUkxfT0ZGU0VUCQkweDAxNDAKLSNkZWZpbmUgT01BUDQ0MzBfQ01fTDRQRVJfVUFSVDFfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MNFBFUl9NT0QsIDB4MDE0MCkKLSNkZWZpbmUgT01BUDRfQ01fTDRQRVJfVUFSVDJfQ0xLQ1RSTF9PRkZTRVQJCTB4MDE0OAotI2RlZmluZSBPTUFQNDQzMF9DTV9MNFBFUl9VQVJUMl9DTEtDVFJMCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0w0UEVSX01PRCwgMHgwMTQ4KQotI2RlZmluZSBPTUFQNF9DTV9MNFBFUl9VQVJUM19DTEtDVFJMX09GRlNFVAkJMHgwMTUwCi0jZGVmaW5lIE9NQVA0NDMwX0NNX0w0UEVSX1VBUlQzX0NMS0NUUkwJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDRQRVJfTU9ELCAweDAxNTApCi0jZGVmaW5lIE9NQVA0X0NNX0w0UEVSX1VBUlQ0X0NMS0NUUkxfT0ZGU0VUCQkweDAxNTgKLSNkZWZpbmUgT01BUDQ0MzBfQ01fTDRQRVJfVUFSVDRfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MNFBFUl9NT0QsIDB4MDE1OCkKLSNkZWZpbmUgT01BUDRfQ01fTDRQRVJfTU1DU0Q1X0NMS0NUUkxfT0ZGU0VUCQkweDAxNjAKLSNkZWZpbmUgT01BUDQ0MzBfQ01fTDRQRVJfTU1DU0Q1X0NMS0NUUkwJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MNFBFUl9NT0QsIDB4MDE2MCkKLSNkZWZpbmUgT01BUDRfQ01fTDRQRVJfSTJDNV9DTEtDVFJMX09GRlNFVAkJMHgwMTY4Ci0jZGVmaW5lIE9NQVA0NDMwX0NNX0w0UEVSX0kyQzVfQ0xLQ1RSTAkJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MNFBFUl9NT0QsIDB4MDE2OCkKLSNkZWZpbmUgT01BUDRfQ01fTDRTRUNfQ0xLU1RDVFJMX09GRlNFVAkJCTB4MDE4MAotI2RlZmluZSBPTUFQNDQzMF9DTV9MNFNFQ19DTEtTVENUUkwJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDRQRVJfTU9ELCAweDAxODApCi0jZGVmaW5lIE9NQVA0X0NNX0w0U0VDX1NUQVRJQ0RFUF9PRkZTRVQJCQkweDAxODQKLSNkZWZpbmUgT01BUDQ0MzBfQ01fTDRTRUNfU1RBVElDREVQCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0w0UEVSX01PRCwgMHgwMTg0KQotI2RlZmluZSBPTUFQNF9DTV9MNFNFQ19EWU5BTUlDREVQX09GRlNFVAkJMHgwMTg4Ci0jZGVmaW5lIE9NQVA0NDMwX0NNX0w0U0VDX0RZTkFNSUNERVAJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDRQRVJfTU9ELCAweDAxODgpCi0jZGVmaW5lIE9NQVA0X0NNX0w0U0VDX0FFUzFfQ0xLQ1RSTF9PRkZTRVQJCTB4MDFhMAotI2RlZmluZSBPTUFQNDQzMF9DTV9MNFNFQ19BRVMxX0NMS0NUUkwJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDRQRVJfTU9ELCAweDAxYTApCi0jZGVmaW5lIE9NQVA0X0NNX0w0U0VDX0FFUzJfQ0xLQ1RSTF9PRkZTRVQJCTB4MDFhOAotI2RlZmluZSBPTUFQNDQzMF9DTV9MNFNFQ19BRVMyX0NMS0NUUkwJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDRQRVJfTU9ELCAweDAxYTgpCi0jZGVmaW5lIE9NQVA0X0NNX0w0U0VDX0RFUzNERVNfQ0xLQ1RSTF9PRkZTRVQJCTB4MDFiMAotI2RlZmluZSBPTUFQNDQzMF9DTV9MNFNFQ19ERVMzREVTX0NMS0NUUkwJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MNFBFUl9NT0QsIDB4MDFiMCkKLSNkZWZpbmUgT01BUDRfQ01fTDRTRUNfUEtBRUlQMjlfQ0xLQ1RSTF9PRkZTRVQJCTB4MDFiOAotI2RlZmluZSBPTUFQNDQzMF9DTV9MNFNFQ19QS0FFSVAyOV9DTEtDVFJMCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfTDRQRVJfTU9ELCAweDAxYjgpCi0jZGVmaW5lIE9NQVA0X0NNX0w0U0VDX1JOR19DTEtDVFJMX09GRlNFVAkJMHgwMWMwCi0jZGVmaW5lIE9NQVA0NDMwX0NNX0w0U0VDX1JOR19DTEtDVFJMCQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX0w0UEVSX01PRCwgMHgwMWMwKQotI2RlZmluZSBPTUFQNF9DTV9MNFNFQ19TSEEyTUQ1MV9DTEtDVFJMX09GRlNFVAkJMHgwMWM4Ci0jZGVmaW5lIE9NQVA0NDMwX0NNX0w0U0VDX1NIQTJNRDUxX0NMS0NUUkwJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MNFBFUl9NT0QsIDB4MDFjOCkKLSNkZWZpbmUgT01BUDRfQ01fTDRTRUNfQ1JZUFRPRE1BX0NMS0NUUkxfT0ZGU0VUCQkweDAxZDgKLSNkZWZpbmUgT01BUDQ0MzBfQ01fTDRTRUNfQ1JZUFRPRE1BX0NMS0NUUkwJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9MNFBFUl9NT0QsIDB4MDFkOCkKLQotLyogQ00yLkNFRlVTRV9DTTIgcmVnaXN0ZXIgb2Zmc2V0cyAqLwotI2RlZmluZSBPTUFQNF9DTV9DRUZVU0VfQ0xLU1RDVFJMX09GRlNFVAkJMHgwMDAwCi0jZGVmaW5lIE9NQVA0NDMwX0NNX0NFRlVTRV9DTEtTVENUUkwJCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ0VGVVNFX01PRCwgMHgwMDAwKQotI2RlZmluZSBPTUFQNF9DTV9DRUZVU0VfQ0VGVVNFX0NMS0NUUkxfT0ZGU0VUCQkweDAwMjAKLSNkZWZpbmUgT01BUDQ0MzBfQ01fQ0VGVVNFX0NFRlVTRV9DTEtDVFJMCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfQ0VGVVNFX01PRCwgMHgwMDIwKQotCi0vKiBDTTIuUkVTVE9SRV9DTTIgcmVnaXN0ZXIgb2Zmc2V0cyAqLwotI2RlZmluZSBPTUFQNF9DTV9MM18xX0NMS1NUQ1RSTF9SRVNUT1JFX09GRlNFVAkJMHgwMDAwCi0jZGVmaW5lIE9NQVA0NDMwX0NNX0wzXzFfQ0xLU1RDVFJMX1JFU1RPUkUJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9SRVNUT1JFX01PRCwgMHgwMDAwKQotI2RlZmluZSBPTUFQNF9DTV9MM18yX0NMS1NUQ1RSTF9SRVNUT1JFX09GRlNFVAkJMHgwMDA0Ci0jZGVmaW5lIE9NQVA0NDMwX0NNX0wzXzJfQ0xLU1RDVFJMX1JFU1RPUkUJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9SRVNUT1JFX01PRCwgMHgwMDA0KQotI2RlZmluZSBPTUFQNF9DTV9MNENGR19DTEtTVENUUkxfUkVTVE9SRV9PRkZTRVQJCTB4MDAwOAotI2RlZmluZSBPTUFQNDQzMF9DTV9MNENGR19DTEtTVENUUkxfUkVTVE9SRQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX1JFU1RPUkVfTU9ELCAweDAwMDgpCi0jZGVmaW5lIE9NQVA0X0NNX01FTUlGX0NMS1NUQ1RSTF9SRVNUT1JFX09GRlNFVAkJMHgwMDBjCi0jZGVmaW5lIE9NQVA0NDMwX0NNX01FTUlGX0NMS1NUQ1RSTF9SRVNUT1JFCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfUkVTVE9SRV9NT0QsIDB4MDAwYykKLSNkZWZpbmUgT01BUDRfQ01fTDRQRVJfQ0xLU1RDVFJMX1JFU1RPUkVfT0ZGU0VUCQkweDAwMTAKLSNkZWZpbmUgT01BUDQ0MzBfQ01fTDRQRVJfQ0xLU1RDVFJMX1JFU1RPUkUJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9SRVNUT1JFX01PRCwgMHgwMDEwKQotI2RlZmluZSBPTUFQNF9DTV9MM0lOSVRfQ0xLU1RDVFJMX1JFU1RPUkVfT0ZGU0VUCTB4MDAxNAotI2RlZmluZSBPTUFQNDQzMF9DTV9MM0lOSVRfQ0xLU1RDVFJMX1JFU1RPUkUJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9SRVNUT1JFX01PRCwgMHgwMDE0KQotI2RlZmluZSBPTUFQNF9DTV9MM0lOU1RSX0wzXzNfQ0xLQ1RSTF9SRVNUT1JFX09GRlNFVAkweDAwMTgKLSNkZWZpbmUgT01BUDQ0MzBfQ01fTDNJTlNUUl9MM18zX0NMS0NUUkxfUkVTVE9SRQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfUkVTVE9SRV9NT0QsIDB4MDAxOCkKLSNkZWZpbmUgT01BUDRfQ01fTDNJTlNUUl9MM19JTlNUUl9DTEtDVFJMX1JFU1RPUkVfT0ZGU0VUCTB4MDAxYwotI2RlZmluZSBPTUFQNDQzMF9DTV9MM0lOU1RSX0wzX0lOU1RSX0NMS0NUUkxfUkVTVE9SRQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfUkVTVE9SRV9NT0QsIDB4MDAxYykKLSNkZWZpbmUgT01BUDRfQ01fTDNJTlNUUl9PQ1BfV1AxX0NMS0NUUkxfUkVTVE9SRV9PRkZTRVQJMHgwMDIwCi0jZGVmaW5lIE9NQVA0NDMwX0NNX0wzSU5TVFJfT0NQX1dQMV9DTEtDVFJMX1JFU1RPUkUJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX1JFU1RPUkVfTU9ELCAweDAwMjApCi0jZGVmaW5lIE9NQVA0X0NNX0NNMl9QUk9GSUxJTkdfQ0xLQ1RSTF9SRVNUT1JFX09GRlNFVAkweDAwMjQKLSNkZWZpbmUgT01BUDQ0MzBfQ01fQ00yX1BST0ZJTElOR19DTEtDVFJMX1JFU1RPUkUJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX1JFU1RPUkVfTU9ELCAweDAwMjQpCi0jZGVmaW5lIE9NQVA0X0NNX0QyRF9TVEFUSUNERVBfUkVTVE9SRV9PRkZTRVQJCTB4MDAyOAotI2RlZmluZSBPTUFQNDQzMF9DTV9EMkRfU1RBVElDREVQX1JFU1RPUkUJCU9NQVA0NFhYX0NNMl9SRUdBRERSKE9NQVA0NDMwX0NNMl9SRVNUT1JFX01PRCwgMHgwMDI4KQotI2RlZmluZSBPTUFQNF9DTV9MM18xX0RZTkFNSUNERVBfUkVTVE9SRV9PRkZTRVQJCTB4MDAyYwotI2RlZmluZSBPTUFQNDQzMF9DTV9MM18xX0RZTkFNSUNERVBfUkVTVE9SRQkJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX1JFU1RPUkVfTU9ELCAweDAwMmMpCi0jZGVmaW5lIE9NQVA0X0NNX0wzXzJfRFlOQU1JQ0RFUF9SRVNUT1JFX09GRlNFVAkJMHgwMDMwCi0jZGVmaW5lIE9NQVA0NDMwX0NNX0wzXzJfRFlOQU1JQ0RFUF9SRVNUT1JFCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfUkVTVE9SRV9NT0QsIDB4MDAzMCkKLSNkZWZpbmUgT01BUDRfQ01fRDJEX0RZTkFNSUNERVBfUkVTVE9SRV9PRkZTRVQJCTB4MDAzNAotI2RlZmluZSBPTUFQNDQzMF9DTV9EMkRfRFlOQU1JQ0RFUF9SRVNUT1JFCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfUkVTVE9SRV9NT0QsIDB4MDAzNCkKLSNkZWZpbmUgT01BUDRfQ01fTDRDRkdfRFlOQU1JQ0RFUF9SRVNUT1JFX09GRlNFVAkweDAwMzgKLSNkZWZpbmUgT01BUDQ0MzBfQ01fTDRDRkdfRFlOQU1JQ0RFUF9SRVNUT1JFCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfUkVTVE9SRV9NT0QsIDB4MDAzOCkKLSNkZWZpbmUgT01BUDRfQ01fTDRQRVJfRFlOQU1JQ0RFUF9SRVNUT1JFX09GRlNFVAkweDAwM2MKLSNkZWZpbmUgT01BUDQ0MzBfQ01fTDRQRVJfRFlOQU1JQ0RFUF9SRVNUT1JFCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfUkVTVE9SRV9NT0QsIDB4MDAzYykKLSNkZWZpbmUgT01BUDRfQ01fTDRQRVJfR1BJTzJfQ0xLQ1RSTF9SRVNUT1JFX09GRlNFVAkweDAwNDAKLSNkZWZpbmUgT01BUDQ0MzBfQ01fTDRQRVJfR1BJTzJfQ0xLQ1RSTF9SRVNUT1JFCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfUkVTVE9SRV9NT0QsIDB4MDA0MCkKLSNkZWZpbmUgT01BUDRfQ01fTDRQRVJfR1BJTzNfQ0xLQ1RSTF9SRVNUT1JFX09GRlNFVAkweDAwNDQKLSNkZWZpbmUgT01BUDQ0MzBfQ01fTDRQRVJfR1BJTzNfQ0xLQ1RSTF9SRVNUT1JFCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfUkVTVE9SRV9NT0QsIDB4MDA0NCkKLSNkZWZpbmUgT01BUDRfQ01fTDRQRVJfR1BJTzRfQ0xLQ1RSTF9SRVNUT1JFX09GRlNFVAkweDAwNDgKLSNkZWZpbmUgT01BUDQ0MzBfQ01fTDRQRVJfR1BJTzRfQ0xLQ1RSTF9SRVNUT1JFCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfUkVTVE9SRV9NT0QsIDB4MDA0OCkKLSNkZWZpbmUgT01BUDRfQ01fTDRQRVJfR1BJTzVfQ0xLQ1RSTF9SRVNUT1JFX09GRlNFVAkweDAwNGMKLSNkZWZpbmUgT01BUDQ0MzBfQ01fTDRQRVJfR1BJTzVfQ0xLQ1RSTF9SRVNUT1JFCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfUkVTVE9SRV9NT0QsIDB4MDA0YykKLSNkZWZpbmUgT01BUDRfQ01fTDRQRVJfR1BJTzZfQ0xLQ1RSTF9SRVNUT1JFX09GRlNFVAkweDAwNTAKLSNkZWZpbmUgT01BUDQ0MzBfQ01fTDRQRVJfR1BJTzZfQ0xLQ1RSTF9SRVNUT1JFCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfUkVTVE9SRV9NT0QsIDB4MDA1MCkKLSNkZWZpbmUgT01BUDRfQ01fTDNJTklUX1VTQl9IT1NUX0NMS0NUUkxfUkVTVE9SRV9PRkZTRVQJMHgwMDU0Ci0jZGVmaW5lIE9NQVA0NDMwX0NNX0wzSU5JVF9VU0JfSE9TVF9DTEtDVFJMX1JFU1RPUkUJT01BUDQ0WFhfQ00yX1JFR0FERFIoT01BUDQ0MzBfQ00yX1JFU1RPUkVfTU9ELCAweDAwNTQpCi0jZGVmaW5lIE9NQVA0X0NNX0wzSU5JVF9VU0JfVExMX0NMS0NUUkxfUkVTVE9SRV9PRkZTRVQJMHgwMDU4Ci0jZGVmaW5lIE9NQVA0NDMwX0NNX0wzSU5JVF9VU0JfVExMX0NMS0NUUkxfUkVTVE9SRQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfUkVTVE9SRV9NT0QsIDB4MDA1OCkKLSNkZWZpbmUgT01BUDRfQ01fU0RNQV9TVEFUSUNERVBfUkVTVE9SRV9PRkZTRVQJCTB4MDA1YwotI2RlZmluZSBPTUFQNDQzMF9DTV9TRE1BX1NUQVRJQ0RFUF9SRVNUT1JFCQlPTUFQNDRYWF9DTTJfUkVHQUREUihPTUFQNDQzMF9DTTJfUkVTVE9SRV9NT0QsIDB4MDA1YykKKyMgZW5kaWYKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTR4eHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY200eHh4LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4YTY2MGEuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTR4eHguYworKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLS8qCi0gKiBPTUFQNCBDTSBtb2R1bGUgZnVuY3Rpb25zCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uCi0gKiBQYXVsIFdhbG1zbGV5Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJyLmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLQotI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KLQotI2luY2x1ZGUgPHBsYXQvY29tbW9uLmg+Ci0KLSNpbmNsdWRlICJjbS5oIgotI2luY2x1ZGUgImNtLXJlZ2JpdHMtNDR4eC5oIgotCi0vKioKLSAqIG9tYXA0X2NtX3dhaXRfbW9kdWxlX3JlYWR5IC0gd2FpdCBmb3IgYSBtb2R1bGUgdG8gYmUgaW4gJ2Z1bmMnIHN0YXRlCi0gKiBAY2xrY3RybF9yZWc6IENMS0NUUkwgbW9kdWxlIGFkZHJlc3MKLSAqCi0gKiBXYWl0IGZvciB0aGUgbW9kdWxlIElETEVTVCB0byBiZSBmdW5jdGlvbmFsLiBJZiB0aGUgaWRsZSBzdGF0ZSBpcyBpbiBhbnkKLSAqIHRoZSBub24gZnVuY3Rpb25hbCBzdGF0ZSAodHJhbnMsIGlkbGUgb3IgZGlzYWJsZWQpLCBtb2R1bGUgYW5kIHRodXMgdGhlCi0gKiBzeXNjb25maWcgY2Fubm90IGJlIGFjY2Vzc2VkIGFuZCB3aWxsIHByb2JhYmx5IGxlYWQgdG8gYW4gImltcHJlY2lzZQotICogZXh0ZXJuYWwgYWJvcnQiCi0gKgotICogTW9kdWxlIGlkbGUgc3RhdGU6Ci0gKiAgIDB4MCBmdW5jOiAgICAgTW9kdWxlIGlzIGZ1bGx5IGZ1bmN0aW9uYWwsIGluY2x1ZGluZyBPQ1AKLSAqICAgMHgxIHRyYW5zOiAgICBNb2R1bGUgaXMgcGVyZm9ybWluZyB0cmFuc2l0aW9uOiB3YWtldXAsIG9yIHNsZWVwLCBvciBzbGVlcAotICogICAgICAgICAgICAgICAgIGFib3J0aW9uCi0gKiAgIDB4MiBpZGxlOiAgICAgTW9kdWxlIGlzIGluIElkbGUgbW9kZSAob25seSBPQ1AgcGFydCkuIEl0IGlzIGZ1bmN0aW9uYWwgaWYKLSAqICAgICAgICAgICAgICAgICB1c2luZyBzZXBhcmF0ZSBmdW5jdGlvbmFsIGNsb2NrCi0gKiAgIDB4MyBkaXNhYmxlZDogTW9kdWxlIGlzIGRpc2FibGVkIGFuZCBjYW5ub3QgYmUgYWNjZXNzZWQKLSAqCi0gKi8KLWludCBvbWFwNF9jbV93YWl0X21vZHVsZV9yZWFkeSh2b2lkIF9faW9tZW0gKmNsa2N0cmxfcmVnKQotewotCWludCBpID0gMDsKLQotCWlmICghY2xrY3RybF9yZWcpCi0JCXJldHVybiAwOwotCi0Jb21hcF90ZXN0X3RpbWVvdXQoKAotCQkoKF9fcmF3X3JlYWRsKGNsa2N0cmxfcmVnKSAmIE9NQVA0NDMwX0lETEVTVF9NQVNLKSA9PSAwKSB8fAotCQkgKCgoX19yYXdfcmVhZGwoY2xrY3RybF9yZWcpICYgT01BUDQ0MzBfSURMRVNUX01BU0spID4+Ci0JCSAgT01BUDQ0MzBfSURMRVNUX1NISUZUKSA9PSAweDIpKSwKLQkJTUFYX01PRFVMRV9SRUFEWV9USU1FLCBpKTsKLQotCXJldHVybiAoaSA8IE1BWF9NT0RVTEVfUkVBRFlfVElNRSkgPyAwIDogLUVCVVNZOwotfQotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtaW5zdDQ0eHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY21pbnN0NDR4eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwNGJiYmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtaW5zdDQ0eHguYwpAQCAtMCwwICsxLDIxNCBAQAorLyoKKyAqIE9NQVA0IENNIGluc3RhbmNlIGZ1bmN0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgorICogUGF1bCBXYWxtc2xleQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBpcyBuZWVkZWQgc2luY2UgQ00gaW5zdGFuY2VzIGNhbiBiZSBpbiB0aGUgUFJNLCBQUkNNX01QVSwgQ00xLAorICogb3IgQ00yIGhhcmR3YXJlIG1vZHVsZXMuICBGb3IgZXhhbXBsZSwgdGhlIEVNVV9DTSBDTSBpbnN0YW5jZSBpcyBpbgorICogdGhlIFBSTSBoYXJkd2FyZSBtb2R1bGUuICBXaGF0IGEgbWVzcy4uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPHBsYXQvY29tbW9uLmg+CisKKyNpbmNsdWRlICJjbS5oIgorI2luY2x1ZGUgImNtMV80NHh4LmgiCisjaW5jbHVkZSAiY20yXzQ0eHguaCIKKyNpbmNsdWRlICJjbTQ0eHguaCIKKyNpbmNsdWRlICJjbWluc3Q0NHh4LmgiCisjaW5jbHVkZSAiY20tcmVnYml0cy0zNHh4LmgiCisjaW5jbHVkZSAiY20tcmVnYml0cy00NHh4LmgiCisjaW5jbHVkZSAicHJjbTQ0eHguaCIKKyNpbmNsdWRlICJwcm00NHh4LmgiCisjaW5jbHVkZSAicHJjbV9tcHU0NHh4LmgiCisKK3N0YXRpYyB1MzIgX2NtX2Jhc2VzW09NQVA0X01BWF9QUkNNX1BBUlRJVElPTlNdID0geworCVtPTUFQNDQzMF9JTlZBTElEX1BSQ01fUEFSVElUSU9OXQk9IDAsCisJW09NQVA0NDMwX1BSTV9QQVJUSVRJT05dCQk9IE9NQVA0NDMwX1BSTV9CQVNFLAorCVtPTUFQNDQzMF9DTTFfUEFSVElUSU9OXQkJPSBPTUFQNDQzMF9DTTFfQkFTRSwKKwlbT01BUDQ0MzBfQ00yX1BBUlRJVElPTl0JCT0gT01BUDQ0MzBfQ00yX0JBU0UsCisJW09NQVA0NDMwX1NDUk1fUEFSVElUSU9OXQkJPSAwLAorCVtPTUFQNDQzMF9QUkNNX01QVV9QQVJUSVRJT05dCQk9IE9NQVA0NDMwX1BSQ01fTVBVX0JBU0UsCit9OworCisvKiBSZWFkIGEgcmVnaXN0ZXIgaW4gYSBDTSBpbnN0YW5jZSAqLwordTMyIG9tYXA0X2NtaW5zdF9yZWFkX2luc3RfcmVnKHU4IHBhcnQsIHMxNiBpbnN0LCB1MTYgaWR4KQoreworCUJVR19PTihwYXJ0ID49IE9NQVA0X01BWF9QUkNNX1BBUlRJVElPTlMgfHwKKwkgICAgICAgcGFydCA9PSBPTUFQNDQzMF9JTlZBTElEX1BSQ01fUEFSVElUSU9OIHx8CisJICAgICAgICFfY21fYmFzZXNbcGFydF0pOworCXJldHVybiBfX3Jhd19yZWFkbChPTUFQMl9MNF9JT19BRERSRVNTKF9jbV9iYXNlc1twYXJ0XSArIGluc3QgKyBpZHgpKTsKK30KKworLyogV3JpdGUgaW50byBhIHJlZ2lzdGVyIGluIGEgQ00gaW5zdGFuY2UgKi8KK3ZvaWQgb21hcDRfY21pbnN0X3dyaXRlX2luc3RfcmVnKHUzMiB2YWwsIHU4IHBhcnQsIHMxNiBpbnN0LCB1MTYgaWR4KQoreworCUJVR19PTihwYXJ0ID49IE9NQVA0X01BWF9QUkNNX1BBUlRJVElPTlMgfHwKKwkgICAgICAgcGFydCA9PSBPTUFQNDQzMF9JTlZBTElEX1BSQ01fUEFSVElUSU9OIHx8CisJICAgICAgICFfY21fYmFzZXNbcGFydF0pOworCV9fcmF3X3dyaXRlbCh2YWwsIE9NQVAyX0w0X0lPX0FERFJFU1MoX2NtX2Jhc2VzW3BhcnRdICsgaW5zdCArIGlkeCkpOworfQorCisvKiBSZWFkLW1vZGlmeS13cml0ZSBhIHJlZ2lzdGVyIGluIENNMS4gQ2FsbGVyIG11c3QgbG9jayAqLwordTMyIG9tYXA0X2NtaW5zdF9ybXdfaW5zdF9yZWdfYml0cyh1MzIgbWFzaywgdTMyIGJpdHMsIHU4IHBhcnQsIHMxNiBpbnN0LAorCQkJCSAgIHMxNiBpZHgpCit7CisJdTMyIHY7CisKKwl2ID0gb21hcDRfY21pbnN0X3JlYWRfaW5zdF9yZWcocGFydCwgaW5zdCwgaWR4KTsKKwl2ICY9IH5tYXNrOworCXYgfD0gYml0czsKKwlvbWFwNF9jbWluc3Rfd3JpdGVfaW5zdF9yZWcodiwgcGFydCwgaW5zdCwgaWR4KTsKKworCXJldHVybiB2OworfQorCisvKgorICoKKyAqLworCisvKioKKyAqIF9jbGt0cmN0cmxfd3JpdGUgLSB3cml0ZSBAYyB0byBhIENNX0NMS1NUQ1RSTC5DTEtUUkNUUkwgcmVnaXN0ZXIgYml0ZmllbGQKKyAqIEBjOiBDTEtUUkNUUkwgcmVnaXN0ZXIgYml0ZmllbGQgKExTQiA9IGJpdCAwLCBpLmUuLCB1bnNoaWZ0ZWQpCisgKiBAcGFydDogUFJDTSBwYXJ0aXRpb24gSUQgdGhhdCB0aGUgQ01fQ0xLU1RDVFJMIHJlZ2lzdGVyIGV4aXN0cyBpbgorICogQGluc3Q6IENNIGluc3RhbmNlIHJlZ2lzdGVyIG9mZnNldCAoKl9JTlNUIG1hY3JvKQorICogQGNkb2ZmczogQ2xvY2tkb21haW4gcmVnaXN0ZXIgb2Zmc2V0ICgqX0NET0ZGUyBtYWNybykKKyAqCisgKiBAYyBtdXN0IGJlIHRoZSB1bnNoaWZ0ZWQgdmFsdWUgZm9yIENMS1RSQ1RSTCAtIGkuZS4sIHRoaXMgZnVuY3Rpb24KKyAqIHdpbGwgaGFuZGxlIHRoZSBzaGlmdCBpdHNlbGYuCisgKi8KK3N0YXRpYyB2b2lkIF9jbGt0cmN0cmxfd3JpdGUodTggYywgdTggcGFydCwgczE2IGluc3QsIHUxNiBjZG9mZnMpCit7CisJdTMyIHY7CisKKwl2ID0gb21hcDRfY21pbnN0X3JlYWRfaW5zdF9yZWcocGFydCwgaW5zdCwgY2RvZmZzICsgT01BUDRfQ01fQ0xLU1RDVFJMKTsKKwl2ICY9IH5PTUFQNDQzMF9DTEtUUkNUUkxfTUFTSzsKKwl2IHw9IGMgPDwgT01BUDQ0MzBfQ0xLVFJDVFJMX1NISUZUOworCW9tYXA0X2NtaW5zdF93cml0ZV9pbnN0X3JlZyh2LCBwYXJ0LCBpbnN0LCBjZG9mZnMgKyBPTUFQNF9DTV9DTEtTVENUUkwpOworfQorCisvKioKKyAqIG9tYXA0X2NtaW5zdF9pc19jbGtkbV9pbl9od3N1cCAtIGlzIGEgY2xvY2tkb21haW4gaW4gaHdzdXAgaWRsZSBtb2RlPworICogQHBhcnQ6IFBSQ00gcGFydGl0aW9uIElEIHRoYXQgdGhlIENNX0NMS1NUQ1RSTCByZWdpc3RlciBleGlzdHMgaW4KKyAqIEBpbnN0OiBDTSBpbnN0YW5jZSByZWdpc3RlciBvZmZzZXQgKCpfSU5TVCBtYWNybykKKyAqIEBjZG9mZnM6IENsb2NrZG9tYWluIHJlZ2lzdGVyIG9mZnNldCAoKl9DRE9GRlMgbWFjcm8pCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBjbG9ja2RvbWFpbiByZWZlcnJlZCB0byBieSAoQHBhcnQsIEBpbnN0LCBAY2RvZmZzKQorICogaXMgaW4gaGFyZHdhcmUtc3VwZXJ2aXNlZCBpZGxlIG1vZGUsIG9yIDAgb3RoZXJ3aXNlLgorICovCitib29sIG9tYXA0X2NtaW5zdF9pc19jbGtkbV9pbl9od3N1cCh1OCBwYXJ0LCBzMTYgaW5zdCwgdTE2IGNkb2ZmcykKK3sKKwl1MzIgdjsKKworCXYgPSBvbWFwNF9jbWluc3RfcmVhZF9pbnN0X3JlZyhwYXJ0LCBpbnN0LCBjZG9mZnMgKyBPTUFQNF9DTV9DTEtTVENUUkwpOworCXYgJj0gT01BUDQ0MzBfQ0xLVFJDVFJMX01BU0s7CisJdiA+Pj0gT01BUDQ0MzBfQ0xLVFJDVFJMX1NISUZUOworCisJcmV0dXJuICh2ID09IE9NQVAzNFhYX0NMS1NUQ1RSTF9FTkFCTEVfQVVUTykgPyB0cnVlIDogZmFsc2U7Cit9CisKKy8qKgorICogb21hcDRfY21pbnN0X2Nsa2RtX2VuYWJsZV9od3N1cCAtIHB1dCBhIGNsb2NrZG9tYWluIGluIGh3c3VwLWlkbGUgbW9kZQorICogQHBhcnQ6IFBSQ00gcGFydGl0aW9uIElEIHRoYXQgdGhlIGNsb2NrZG9tYWluIHJlZ2lzdGVycyBleGlzdCBpbgorICogQGluc3Q6IENNIGluc3RhbmNlIHJlZ2lzdGVyIG9mZnNldCAoKl9JTlNUIG1hY3JvKQorICogQGNkb2ZmczogQ2xvY2tkb21haW4gcmVnaXN0ZXIgb2Zmc2V0ICgqX0NET0ZGUyBtYWNybykKKyAqCisgKiBQdXQgYSBjbG9ja2RvbWFpbiByZWZlcnJlZCB0byBieSAoQHBhcnQsIEBpbnN0LCBAY2RvZmZzKSBpbnRvCisgKiBoYXJkd2FyZS1zdXBlcnZpc2VkIGlkbGUgbW9kZS4gIE5vIHJldHVybiB2YWx1ZS4KKyAqLwordm9pZCBvbWFwNF9jbWluc3RfY2xrZG1fZW5hYmxlX2h3c3VwKHU4IHBhcnQsIHMxNiBpbnN0LCB1MTYgY2RvZmZzKQoreworCV9jbGt0cmN0cmxfd3JpdGUoT01BUDM0WFhfQ0xLU1RDVFJMX0VOQUJMRV9BVVRPLCBwYXJ0LCBpbnN0LCBjZG9mZnMpOworfQorCisvKioKKyAqIG9tYXA0X2NtaW5zdF9jbGtkbV9kaXNhYmxlX2h3c3VwIC0gcHV0IGEgY2xvY2tkb21haW4gaW4gc3dzdXAtaWRsZSBtb2RlCisgKiBAcGFydDogUFJDTSBwYXJ0aXRpb24gSUQgdGhhdCB0aGUgY2xvY2tkb21haW4gcmVnaXN0ZXJzIGV4aXN0IGluCisgKiBAaW5zdDogQ00gaW5zdGFuY2UgcmVnaXN0ZXIgb2Zmc2V0ICgqX0lOU1QgbWFjcm8pCisgKiBAY2RvZmZzOiBDbG9ja2RvbWFpbiByZWdpc3RlciBvZmZzZXQgKCpfQ0RPRkZTIG1hY3JvKQorICoKKyAqIFB1dCBhIGNsb2NrZG9tYWluIHJlZmVycmVkIHRvIGJ5IChAcGFydCwgQGluc3QsIEBjZG9mZnMpIGludG8KKyAqIHNvZnR3YXJlLXN1cGVydmlzZWQgaWRsZSBtb2RlLCBpLmUuLCBjb250cm9sbGVkIG1hbnVhbGx5IGJ5IHRoZQorICogTGludXggT01BUCBjbG9ja2RvbWFpbiBjb2RlLiAgTm8gcmV0dXJuIHZhbHVlLgorICovCit2b2lkIG9tYXA0X2NtaW5zdF9jbGtkbV9kaXNhYmxlX2h3c3VwKHU4IHBhcnQsIHMxNiBpbnN0LCB1MTYgY2RvZmZzKQoreworCV9jbGt0cmN0cmxfd3JpdGUoT01BUDM0WFhfQ0xLU1RDVFJMX0RJU0FCTEVfQVVUTywgcGFydCwgaW5zdCwgY2RvZmZzKTsKK30KKworLyoqCisgKiBvbWFwNF9jbWluc3RfY2xrZG1fZm9yY2Vfc2xlZXAgLSB0cnkgdG8gcHV0IGEgY2xvY2tkb21haW4gaW50byBpZGxlCisgKiBAcGFydDogUFJDTSBwYXJ0aXRpb24gSUQgdGhhdCB0aGUgY2xvY2tkb21haW4gcmVnaXN0ZXJzIGV4aXN0IGluCisgKiBAaW5zdDogQ00gaW5zdGFuY2UgcmVnaXN0ZXIgb2Zmc2V0ICgqX0lOU1QgbWFjcm8pCisgKiBAY2RvZmZzOiBDbG9ja2RvbWFpbiByZWdpc3RlciBvZmZzZXQgKCpfQ0RPRkZTIG1hY3JvKQorICoKKyAqIFB1dCBhIGNsb2NrZG9tYWluIHJlZmVycmVkIHRvIGJ5IChAcGFydCwgQGluc3QsIEBjZG9mZnMpIGludG8gaWRsZQorICogTm8gcmV0dXJuIHZhbHVlLgorICovCit2b2lkIG9tYXA0X2NtaW5zdF9jbGtkbV9mb3JjZV9zbGVlcCh1OCBwYXJ0LCBzMTYgaW5zdCwgdTE2IGNkb2ZmcykKK3sKKwlfY2xrdHJjdHJsX3dyaXRlKE9NQVAzNFhYX0NMS1NUQ1RSTF9GT1JDRV9TTEVFUCwgcGFydCwgaW5zdCwgY2RvZmZzKTsKK30KKworLyoqCisgKiBvbWFwNF9jbWluc3RfY2xrZG1fZm9yY2Vfc2xlZXAgLSB0cnkgdG8gdGFrZSBhIGNsb2NrZG9tYWluIG91dCBvZiBpZGxlCisgKiBAcGFydDogUFJDTSBwYXJ0aXRpb24gSUQgdGhhdCB0aGUgY2xvY2tkb21haW4gcmVnaXN0ZXJzIGV4aXN0IGluCisgKiBAaW5zdDogQ00gaW5zdGFuY2UgcmVnaXN0ZXIgb2Zmc2V0ICgqX0lOU1QgbWFjcm8pCisgKiBAY2RvZmZzOiBDbG9ja2RvbWFpbiByZWdpc3RlciBvZmZzZXQgKCpfQ0RPRkZTIG1hY3JvKQorICoKKyAqIFRha2UgYSBjbG9ja2RvbWFpbiByZWZlcnJlZCB0byBieSAoQHBhcnQsIEBpbnN0LCBAY2RvZmZzKSBvdXQgb2YgaWRsZSwKKyAqIHdha2luZyBpdCB1cC4gIE5vIHJldHVybiB2YWx1ZS4KKyAqLwordm9pZCBvbWFwNF9jbWluc3RfY2xrZG1fZm9yY2Vfd2FrZXVwKHU4IHBhcnQsIHMxNiBpbnN0LCB1MTYgY2RvZmZzKQoreworCV9jbGt0cmN0cmxfd3JpdGUoT01BUDM0WFhfQ0xLU1RDVFJMX0ZPUkNFX1dBS0VVUCwgcGFydCwgaW5zdCwgY2RvZmZzKTsKK30KKworLyoKKyAqCisgKi8KKworLyoqCisgKiBvbWFwNF9jbV93YWl0X21vZHVsZV9yZWFkeSAtIHdhaXQgZm9yIGEgbW9kdWxlIHRvIGJlIGluICdmdW5jJyBzdGF0ZQorICogQGNsa2N0cmxfcmVnOiBDTEtDVFJMIG1vZHVsZSBhZGRyZXNzCisgKgorICogV2FpdCBmb3IgdGhlIG1vZHVsZSBJRExFU1QgdG8gYmUgZnVuY3Rpb25hbC4gSWYgdGhlIGlkbGUgc3RhdGUgaXMgaW4gYW55CisgKiB0aGUgbm9uIGZ1bmN0aW9uYWwgc3RhdGUgKHRyYW5zLCBpZGxlIG9yIGRpc2FibGVkKSwgbW9kdWxlIGFuZCB0aHVzIHRoZQorICogc3lzY29uZmlnIGNhbm5vdCBiZSBhY2Nlc3NlZCBhbmQgd2lsbCBwcm9iYWJseSBsZWFkIHRvIGFuICJpbXByZWNpc2UKKyAqIGV4dGVybmFsIGFib3J0IgorICoKKyAqIE1vZHVsZSBpZGxlIHN0YXRlOgorICogICAweDAgZnVuYzogICAgIE1vZHVsZSBpcyBmdWxseSBmdW5jdGlvbmFsLCBpbmNsdWRpbmcgT0NQCisgKiAgIDB4MSB0cmFuczogICAgTW9kdWxlIGlzIHBlcmZvcm1pbmcgdHJhbnNpdGlvbjogd2FrZXVwLCBvciBzbGVlcCwgb3Igc2xlZXAKKyAqICAgICAgICAgICAgICAgICBhYm9ydGlvbgorICogICAweDIgaWRsZTogICAgIE1vZHVsZSBpcyBpbiBJZGxlIG1vZGUgKG9ubHkgT0NQIHBhcnQpLiBJdCBpcyBmdW5jdGlvbmFsIGlmCisgKiAgICAgICAgICAgICAgICAgdXNpbmcgc2VwYXJhdGUgZnVuY3Rpb25hbCBjbG9jaworICogICAweDMgZGlzYWJsZWQ6IE1vZHVsZSBpcyBkaXNhYmxlZCBhbmQgY2Fubm90IGJlIGFjY2Vzc2VkCisgKgorICovCitpbnQgb21hcDRfY21fd2FpdF9tb2R1bGVfcmVhZHkodm9pZCBfX2lvbWVtICpjbGtjdHJsX3JlZykKK3sKKwlpbnQgaSA9IDA7CisKKwlpZiAoIWNsa2N0cmxfcmVnKQorCQlyZXR1cm4gMDsKKworCW9tYXBfdGVzdF90aW1lb3V0KCgKKwkJKChfX3Jhd19yZWFkbChjbGtjdHJsX3JlZykgJiBPTUFQNDQzMF9JRExFU1RfTUFTSykgPT0gMCkgfHwKKwkJICgoKF9fcmF3X3JlYWRsKGNsa2N0cmxfcmVnKSAmIE9NQVA0NDMwX0lETEVTVF9NQVNLKSA+PgorCQkgIE9NQVA0NDMwX0lETEVTVF9TSElGVCkgPT0gMHgyKSksCisJCU1BWF9NT0RVTEVfUkVBRFlfVElNRSwgaSk7CisKKwlyZXR1cm4gKGkgPCBNQVhfTU9EVUxFX1JFQURZX1RJTUUpID8gMCA6IC1FQlVTWTsKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbWluc3Q0NHh4LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtaW5zdDQ0eHguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmFiZDBhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbWluc3Q0NHh4LmgKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIE9NQVA0IENsb2NrIE1hbmFnZW1lbnQgKENNKSBmdW5jdGlvbiBwcm90b3R5cGVzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uCisgKiBQYXVsIFdhbG1zbGV5CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2lmbmRlZiBfX0FSQ0hfQVNNX01BQ0hfT01BUDJfQ01JTlNUNDRYWF9ICisjZGVmaW5lIF9fQVJDSF9BU01fTUFDSF9PTUFQMl9DTUlOU1Q0NFhYX0gKKworZXh0ZXJuIGJvb2wgb21hcDRfY21pbnN0X2lzX2Nsa2RtX2luX2h3c3VwKHU4IHBhcnQsIHMxNiBpbnN0LCB1MTYgY2RvZmZzKTsKK2V4dGVybiB2b2lkIG9tYXA0X2NtaW5zdF9jbGtkbV9lbmFibGVfaHdzdXAodTggcGFydCwgczE2IGluc3QsIHUxNiBjZG9mZnMpOworZXh0ZXJuIHZvaWQgb21hcDRfY21pbnN0X2Nsa2RtX2Rpc2FibGVfaHdzdXAodTggcGFydCwgczE2IGluc3QsIHUxNiBjZG9mZnMpOworZXh0ZXJuIHZvaWQgb21hcDRfY21pbnN0X2Nsa2RtX2ZvcmNlX3NsZWVwKHU4IHBhcnQsIHMxNiBpbnN0LCB1MTYgY2RvZmZzKTsKK2V4dGVybiB2b2lkIG9tYXA0X2NtaW5zdF9jbGtkbV9mb3JjZV93YWtldXAodTggcGFydCwgczE2IGluc3QsIHUxNiBjZG9mZnMpOworCisvKgorICogSW4gYW4gaWRlYWwgd29ybGQsIHdlIHdvdWxkIG5vdCBleHBvcnQgdGhlc2UgbG93LWxldmVsIGZ1bmN0aW9ucywKKyAqIGJ1dCB0aGlzIHdpbGwgcHJvYmFibHkgdGFrZSBzb21lIHRpbWUgdG8gZml4IHByb3Blcmx5CisgKi8KK2V4dGVybiB1MzIgb21hcDRfY21pbnN0X3JlYWRfaW5zdF9yZWcodTggcGFydCwgczE2IGluc3QsIHUxNiBpZHgpOworZXh0ZXJuIHZvaWQgb21hcDRfY21pbnN0X3dyaXRlX2luc3RfcmVnKHUzMiB2YWwsIHU4IHBhcnQsIHMxNiBpbnN0LCB1MTYgaWR4KTsKK2V4dGVybiB1MzIgb21hcDRfY21pbnN0X3Jtd19pbnN0X3JlZ19iaXRzKHUzMiBtYXNrLCB1MzIgYml0cywgdTggcGFydCwKKwkJCQkJICAgczE2IGluc3QsIHMxNiBpZHgpOworCitleHRlcm4gaW50IG9tYXA0X2NtX3dhaXRfbW9kdWxlX3JlYWR5KHZvaWQgX19pb21lbSAqY2xrY3RybF9yZWcpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY29udHJvbC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jb250cm9sLmMKaW5kZXggMWZhMzI5NC4uNjk1Mjc5NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jb250cm9sLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jb250cm9sLmMKQEAgLTIwLDEyICsyMCwxNiBAQAogCiAjaW5jbHVkZSAiY20tcmVnYml0cy0zNHh4LmgiCiAjaW5jbHVkZSAicHJtLXJlZ2JpdHMtMzR4eC5oIgotI2luY2x1ZGUgImNtLmgiCi0jaW5jbHVkZSAicHJtLmgiCisjaW5jbHVkZSAicHJtMnh4eF8zeHh4LmgiCisjaW5jbHVkZSAiY20yeHh4XzN4eHguaCIKICNpbmNsdWRlICJzZHJjLmgiCiAjaW5jbHVkZSAicG0uaCIKICNpbmNsdWRlICJjb250cm9sLmgiCiAKKy8qIFVzZWQgYnkgb21hcDNfY3RybF9zYXZlX3BhZGNvbmYoKSAqLworI2RlZmluZSBTVEFSVF9QQURDT05GX1NBVkUJCTB4MgorI2RlZmluZSBQQURDT05GX1NBVkVfRE9ORQkJMHgxCisKIHN0YXRpYyB2b2lkIF9faW9tZW0gKm9tYXAyX2N0cmxfYmFzZTsKIHN0YXRpYyB2b2lkIF9faW9tZW0gKm9tYXA0X2N0cmxfcGFkX2Jhc2U7CiAKQEAgLTEzNCw2ICsxMzgsNyBAQAogCXUzMiBzcmFtbGRvNDsKIAl1MzIgc3JhbWxkbzU7CiAJdTMyIGNzaTsKKwl1MzIgcGFkY29uZl9zeXNfbmlycTsKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcDNfY29udHJvbF9yZWdzIGNvbnRyb2xfY29udGV4dDsKQEAgLTIwOSw2ICsyMTQsMzcgQEAKIAlfX3Jhd193cml0ZWwodmFsLCBPTUFQNF9DVFJMX1BBRF9SRUdBRERSKG9mZnNldCkpOwogfQogCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDMKKworLyoqCisgKiBvbWFwM19jdHJsX3dyaXRlX2Jvb3RfbW9kZSAtIHNldCBzY3JhdGNocGFkIGJvb3QgbW9kZSBmb3IgdGhlIG5leHQgYm9vdAorICogQGJvb3Rtb2RlOiA4LWJpdCB2YWx1ZSB0byBwYXNzIHRvIHNvbWUgYm9vdCBjb2RlCisgKgorICogU2V0IHRoZSBib290bW9kZSBpbiB0aGUgc2NyYXRjaHBhZCBSQU0uICBUaGlzIGlzIHVzZWQgYWZ0ZXIgdGhlCisgKiBzeXN0ZW0gcmVzdGFydHMuICBOb3Qgc3VyZSB3aGF0IGFjdHVhbGx5IHVzZXMgdGhpcyAtIGl0IG1heSBiZSB0aGUKKyAqIGJvb3Rsb2FkZXIsIHJhdGhlciB0aGFuIHRoZSBib290IFJPTSAtIGNvbnRyYXJ5IHRvIHRoZSBwcmVzZXJ2ZWQKKyAqIGNvbW1lbnQgYmVsb3cuICBObyByZXR1cm4gdmFsdWUuCisgKi8KK3ZvaWQgb21hcDNfY3RybF93cml0ZV9ib290X21vZGUodTggYm9vdG1vZGUpCit7CisJdTMyIGw7CisKKwlsID0gKCdCJyA8PCAyNCkgfCAoJ00nIDw8IDE2KSB8IGJvb3Rtb2RlOworCisJLyoKKwkgKiBSZXNlcnZlIHRoZSBmaXJzdCB3b3JkIGluIHNjcmF0Y2hwYWQgZm9yIGNvbW11bmljYXRpbmcKKwkgKiB3aXRoIHRoZSBib290IFJPTS4gQSBwb2ludGVyIHRvIGEgZGF0YSBzdHJ1Y3R1cmUKKwkgKiBkZXNjcmliaW5nIHRoZSBib290IHByb2Nlc3MgY2FuIGJlIHN0b3JlZCB0aGVyZSwKKwkgKiBjZi4gT01BUDM0eHggVFJNLCBJbml0aWFsaXphdGlvbiAvIFNvZnR3YXJlIEJvb3RpbmcKKwkgKiBDb25maWd1cmF0aW9uLgorCSAqCisJICogWFhYIFRoaXMgc2hvdWxkIHVzZSBzb21lIG9tYXBfY3RybF93cml0ZWwoKS10eXBlIGZ1bmN0aW9uCisJICovCisJX19yYXdfd3JpdGVsKGwsIE9NQVAyX0w0X0lPX0FERFJFU1MoT01BUDM0M1hfU0NSQVRDSFBBRCArIDQpKTsKK30KKworI2VuZGlmCisKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKSAmJiBkZWZpbmVkKENPTkZJR19QTSkKIC8qCiAgKiBDbGVhcnMgdGhlIHNjcmF0Y2hwYWQgY29udGVudHMgaW4gY2FzZSBvZiBjb2xkIGJvb3QtCkBAIC0yMjAsMTMgKzI1NiwxMyBAQAogCXZvaWQgX19pb21lbSAqdl9hZGRyOwogCXUzMiBvZmZzZXQgPSAwOwogCXZfYWRkciA9IE9NQVAyX0w0X0lPX0FERFJFU1MoT01BUDM0M1hfU0NSQVRDSFBBRF9ST00pOwotCWlmIChwcm1fcmVhZF9tb2RfcmVnKE9NQVAzNDMwX0dSX01PRCwgT01BUDNfUFJNX1JTVFNUX09GRlNFVCkgJgorCWlmIChvbWFwMl9wcm1fcmVhZF9tb2RfcmVnKE9NQVAzNDMwX0dSX01PRCwgT01BUDNfUFJNX1JTVFNUX09GRlNFVCkgJgogCSAgICBPTUFQMzQzMF9HTE9CQUxfQ09MRF9SU1RfTUFTSykgewogCQlmb3IgKCA7IG9mZnNldCA8PSBtYXhfb2Zmc2V0OyBvZmZzZXQgKz0gMHg0KQogCQkJX19yYXdfd3JpdGVsKDB4MCwgKHZfYWRkciArIG9mZnNldCkpOwotCQlwcm1fc2V0X21vZF9yZWdfYml0cyhPTUFQMzQzMF9HTE9CQUxfQ09MRF9SU1RfTUFTSywKLQkJCQkgICAgIE9NQVAzNDMwX0dSX01PRCwKLQkJCQkgICAgIE9NQVAzX1BSTV9SU1RTVF9PRkZTRVQpOworCQlvbWFwMl9wcm1fc2V0X21vZF9yZWdfYml0cyhPTUFQMzQzMF9HTE9CQUxfQ09MRF9SU1RfTUFTSywKKwkJCQkJICAgT01BUDM0MzBfR1JfTU9ELAorCQkJCQkgICBPTUFQM19QUk1fUlNUU1RfT0ZGU0VUKTsKIAl9CiB9CiAKQEAgLTIzOSw5ICsyNzUsMTkgQEAKIAlzdHJ1Y3Qgb21hcDNfc2NyYXRjaHBhZF9wcmNtX2Jsb2NrIHByY21fYmxvY2tfY29udGVudHM7CiAJc3RydWN0IG9tYXAzX3NjcmF0Y2hwYWRfc2RyY19ibG9jayBzZHJjX2Jsb2NrX2NvbnRlbnRzOwogCi0JLyogUG9wdWxhdGUgdGhlIFNjcmF0Y2hwYWQgY29udGVudHMgKi8KKwkvKgorCSAqIFBvcHVsYXRlIHRoZSBTY3JhdGNocGFkIGNvbnRlbnRzCisJICoKKwkgKiBUaGUgImdldF8qcmVzdG9yZV9wb2ludGVyIiBmdW5jdGlvbnMgYXJlIHVzZWQgdG8gcHJvdmlkZSBhCisJICogcGh5c2ljYWwgcmVzdG9yZSBhZGRyZXNzIHdoZXJlIHRoZSBST00gY29kZSBqdW1wcyB3aGlsZSB3YWtpbmcKKwkgKiB1cCBmcm9tIE1QVSBPRkYvT1NXUiBzdGF0ZS4KKwkgKiBUaGUgcmVzdG9yZSBwb2ludGVyIGlzIHN0b3JlZCBpbnRvIHRoZSBzY3JhdGNocGFkLgorCSAqLwogCXNjcmF0Y2hwYWRfY29udGVudHMuYm9vdF9jb25maWdfcHRyID0gMHgwOwotCWlmIChvbWFwX3JldigpICE9IE9NQVAzNDMwX1JFVl9FUzNfMCAmJgorCWlmIChjcHVfaXNfb21hcDM2MzAoKSkKKwkJc2NyYXRjaHBhZF9jb250ZW50cy5wdWJsaWNfcmVzdG9yZV9wdHIgPQorCQkJdmlydF90b19waHlzKGdldF9vbWFwMzYzMF9yZXN0b3JlX3BvaW50ZXIoKSk7CisJZWxzZSBpZiAob21hcF9yZXYoKSAhPSBPTUFQMzQzMF9SRVZfRVMzXzAgJiYKIAkJCQkJb21hcF9yZXYoKSAhPSBPTUFQMzQzMF9SRVZfRVMzXzEpCiAJCXNjcmF0Y2hwYWRfY29udGVudHMucHVibGljX3Jlc3RvcmVfcHRyID0KIAkJCXZpcnRfdG9fcGh5cyhnZXRfcmVzdG9yZV9wb2ludGVyKCkpOwpAQCAtMjU4LDMyICszMDQsMzQgQEAKIAlzY3JhdGNocGFkX2NvbnRlbnRzLnNkcmNfYmxvY2tfb2Zmc2V0ID0gMHg2NDsKIAogCS8qIFBvcHVsYXRlIHRoZSBQUkNNIGJsb2NrIGNvbnRlbnRzICovCi0JcHJjbV9ibG9ja19jb250ZW50cy5wcm1fY2xrc3JjX2N0cmwgPSBwcm1fcmVhZF9tb2RfcmVnKE9NQVAzNDMwX0dSX01PRCwKLQkJCU9NQVAzX1BSTV9DTEtTUkNfQ1RSTF9PRkZTRVQpOwotCXByY21fYmxvY2tfY29udGVudHMucHJtX2Nsa3NlbCA9IHBybV9yZWFkX21vZF9yZWcoT01BUDM0MzBfQ0NSX01PRCwKLQkJCU9NQVAzX1BSTV9DTEtTRUxfT0ZGU0VUKTsKKwlwcmNtX2Jsb2NrX2NvbnRlbnRzLnBybV9jbGtzcmNfY3RybCA9CisJCW9tYXAyX3BybV9yZWFkX21vZF9yZWcoT01BUDM0MzBfR1JfTU9ELAorCQkJCSAgICAgICBPTUFQM19QUk1fQ0xLU1JDX0NUUkxfT0ZGU0VUKTsKKwlwcmNtX2Jsb2NrX2NvbnRlbnRzLnBybV9jbGtzZWwgPQorCQlvbWFwMl9wcm1fcmVhZF9tb2RfcmVnKE9NQVAzNDMwX0NDUl9NT0QsCisJCQkJICAgICAgIE9NQVAzX1BSTV9DTEtTRUxfT0ZGU0VUKTsKIAlwcmNtX2Jsb2NrX2NvbnRlbnRzLmNtX2Nsa3NlbF9jb3JlID0KLQkJCWNtX3JlYWRfbW9kX3JlZyhDT1JFX01PRCwgQ01fQ0xLU0VMKTsKKwkJCW9tYXAyX2NtX3JlYWRfbW9kX3JlZyhDT1JFX01PRCwgQ01fQ0xLU0VMKTsKIAlwcmNtX2Jsb2NrX2NvbnRlbnRzLmNtX2Nsa3NlbF93a3VwID0KLQkJCWNtX3JlYWRfbW9kX3JlZyhXS1VQX01PRCwgQ01fQ0xLU0VMKTsKKwkJCW9tYXAyX2NtX3JlYWRfbW9kX3JlZyhXS1VQX01PRCwgQ01fQ0xLU0VMKTsKIAlwcmNtX2Jsb2NrX2NvbnRlbnRzLmNtX2Nsa2VuX3BsbCA9Ci0JCQljbV9yZWFkX21vZF9yZWcoUExMX01PRCwgQ01fQ0xLRU4pOworCQkJb21hcDJfY21fcmVhZF9tb2RfcmVnKFBMTF9NT0QsIENNX0NMS0VOKTsKIAlwcmNtX2Jsb2NrX2NvbnRlbnRzLmNtX2F1dG9pZGxlX3BsbCA9Ci0JCQljbV9yZWFkX21vZF9yZWcoUExMX01PRCwgT01BUDM0MzBfQ01fQVVUT0lETEVfUExMKTsKKwkJCW9tYXAyX2NtX3JlYWRfbW9kX3JlZyhQTExfTU9ELCBPTUFQMzQzMF9DTV9BVVRPSURMRV9QTEwpOwogCXByY21fYmxvY2tfY29udGVudHMuY21fY2xrc2VsMV9wbGwgPQotCQkJY21fcmVhZF9tb2RfcmVnKFBMTF9NT0QsIE9NQVAzNDMwX0NNX0NMS1NFTDFfUExMKTsKKwkJCW9tYXAyX2NtX3JlYWRfbW9kX3JlZyhQTExfTU9ELCBPTUFQMzQzMF9DTV9DTEtTRUwxX1BMTCk7CiAJcHJjbV9ibG9ja19jb250ZW50cy5jbV9jbGtzZWwyX3BsbCA9Ci0JCQljbV9yZWFkX21vZF9yZWcoUExMX01PRCwgT01BUDM0MzBfQ01fQ0xLU0VMMl9QTEwpOworCQkJb21hcDJfY21fcmVhZF9tb2RfcmVnKFBMTF9NT0QsIE9NQVAzNDMwX0NNX0NMS1NFTDJfUExMKTsKIAlwcmNtX2Jsb2NrX2NvbnRlbnRzLmNtX2Nsa3NlbDNfcGxsID0KLQkJCWNtX3JlYWRfbW9kX3JlZyhQTExfTU9ELCBPTUFQMzQzMF9DTV9DTEtTRUwzKTsKKwkJCW9tYXAyX2NtX3JlYWRfbW9kX3JlZyhQTExfTU9ELCBPTUFQMzQzMF9DTV9DTEtTRUwzKTsKIAlwcmNtX2Jsb2NrX2NvbnRlbnRzLmNtX2Nsa2VuX3BsbF9tcHUgPQotCQkJY21fcmVhZF9tb2RfcmVnKE1QVV9NT0QsIE9NQVAzNDMwX0NNX0NMS0VOX1BMTCk7CisJCQlvbWFwMl9jbV9yZWFkX21vZF9yZWcoTVBVX01PRCwgT01BUDM0MzBfQ01fQ0xLRU5fUExMKTsKIAlwcmNtX2Jsb2NrX2NvbnRlbnRzLmNtX2F1dG9pZGxlX3BsbF9tcHUgPQotCQkJY21fcmVhZF9tb2RfcmVnKE1QVV9NT0QsIE9NQVAzNDMwX0NNX0FVVE9JRExFX1BMTCk7CisJCQlvbWFwMl9jbV9yZWFkX21vZF9yZWcoTVBVX01PRCwgT01BUDM0MzBfQ01fQVVUT0lETEVfUExMKTsKIAlwcmNtX2Jsb2NrX2NvbnRlbnRzLmNtX2Nsa3NlbDFfcGxsX21wdSA9Ci0JCQljbV9yZWFkX21vZF9yZWcoTVBVX01PRCwgT01BUDM0MzBfQ01fQ0xLU0VMMV9QTEwpOworCQkJb21hcDJfY21fcmVhZF9tb2RfcmVnKE1QVV9NT0QsIE9NQVAzNDMwX0NNX0NMS1NFTDFfUExMKTsKIAlwcmNtX2Jsb2NrX2NvbnRlbnRzLmNtX2Nsa3NlbDJfcGxsX21wdSA9Ci0JCQljbV9yZWFkX21vZF9yZWcoTVBVX01PRCwgT01BUDM0MzBfQ01fQ0xLU0VMMl9QTEwpOworCQkJb21hcDJfY21fcmVhZF9tb2RfcmVnKE1QVV9NT0QsIE9NQVAzNDMwX0NNX0NMS1NFTDJfUExMKTsKIAlwcmNtX2Jsb2NrX2NvbnRlbnRzLnByY21fYmxvY2tfc2l6ZSA9IDB4MDsKIAogCS8qIFBvcHVsYXRlIHRoZSBTRFJDIGJsb2NrIGNvbnRlbnRzICovCkBAIC00MTYsNiArNDY0LDggQEAKIAljb250cm9sX2NvbnRleHQuc3JhbWxkbzQgPSBvbWFwX2N0cmxfcmVhZGwoT01BUDM0M1hfQ09OVFJPTF9TUkFNTERPNCk7CiAJY29udHJvbF9jb250ZXh0LnNyYW1sZG81ID0gb21hcF9jdHJsX3JlYWRsKE9NQVAzNDNYX0NPTlRST0xfU1JBTUxETzUpOwogCWNvbnRyb2xfY29udGV4dC5jc2kgPSBvbWFwX2N0cmxfcmVhZGwoT01BUDM0M1hfQ09OVFJPTF9DU0kpOworCWNvbnRyb2xfY29udGV4dC5wYWRjb25mX3N5c19uaXJxID0KKwkJb21hcF9jdHJsX3JlYWRsKE9NQVAzNDNYX0NPTlRST0xfUEFEQ09ORl9TWVNOSVJRKTsKIAlyZXR1cm47CiB9CiAKQEAgLTQ3Miw2ICs1MjIsNDMgQEAKIAlvbWFwX2N0cmxfd3JpdGVsKGNvbnRyb2xfY29udGV4dC5zcmFtbGRvNCwgT01BUDM0M1hfQ09OVFJPTF9TUkFNTERPNCk7CiAJb21hcF9jdHJsX3dyaXRlbChjb250cm9sX2NvbnRleHQuc3JhbWxkbzUsIE9NQVAzNDNYX0NPTlRST0xfU1JBTUxETzUpOwogCW9tYXBfY3RybF93cml0ZWwoY29udHJvbF9jb250ZXh0LmNzaSwgT01BUDM0M1hfQ09OVFJPTF9DU0kpOworCW9tYXBfY3RybF93cml0ZWwoY29udHJvbF9jb250ZXh0LnBhZGNvbmZfc3lzX25pcnEsCisJCQkgT01BUDM0M1hfQ09OVFJPTF9QQURDT05GX1NZU05JUlEpOwogCXJldHVybjsKIH0KKwordm9pZCBvbWFwMzYzMF9jdHJsX2Rpc2FibGVfcnRhKHZvaWQpCit7CisJaWYgKCFjcHVfaXNfb21hcDM2MzAoKSkKKwkJcmV0dXJuOworCW9tYXBfY3RybF93cml0ZWwoT01BUDM2WFhfUlRBX0RJU0FCTEUsIE9NQVAzNlhYX0NPTlRST0xfTUVNX1JUQV9DVFJMKTsKK30KKworLyoqCisgKiBvbWFwM19jdHJsX3NhdmVfcGFkY29uZiAtIHNhdmUgcGFkY29uZiByZWdpc3RlcnMgdG8gc2NyYXRjaHBhZCBSQU0KKyAqCisgKiBUZWxsIHRoZSBTQ00gdG8gc3RhcnQgc2F2aW5nIHRoZSBwYWRjb25mIHJlZ2lzdGVycywgdGhlbiB3YWl0IGZvcgorICogdGhlIHByb2Nlc3MgdG8gY29tcGxldGUuICBSZXR1cm5zIDAgdW5jb25kaXRpb25hbGx5LCBhbHRob3VnaCBpdAorICogc2hvdWxkIGFsc28gZXZlbnR1YWxseSBiZSBhYmxlIHRvIHJldHVybiAtRVRJTUVET1VULCBpZiB0aGUgc2F2ZQorICogZG9lcyBub3QgY29tcGxldGUuCisgKgorICogWFhYIFRoaXMgZnVuY3Rpb24gaXMgbWlzc2luZyBhIHRpbWVvdXQuICBXaGF0IHNob3VsZCBpdCBiZT8KKyAqLworaW50IG9tYXAzX2N0cmxfc2F2ZV9wYWRjb25mKHZvaWQpCit7CisJdTMyIGNwbzsKKworCS8qIFNhdmUgdGhlIHBhZGNvbmYgcmVnaXN0ZXJzICovCisJY3BvID0gb21hcF9jdHJsX3JlYWRsKE9NQVAzNDNYX0NPTlRST0xfUEFEQ09ORl9PRkYpOworCWNwbyB8PSBTVEFSVF9QQURDT05GX1NBVkU7CisJb21hcF9jdHJsX3dyaXRlbChjcG8sIE9NQVAzNDNYX0NPTlRST0xfUEFEQ09ORl9PRkYpOworCisJLyogd2FpdCBmb3IgdGhlIHNhdmUgdG8gY29tcGxldGUgKi8KKwl3aGlsZSAoIShvbWFwX2N0cmxfcmVhZGwoT01BUDM0M1hfQ09OVFJPTF9HRU5FUkFMX1BVUlBPU0VfU1RBVFVTKQorCQkgJiBQQURDT05GX1NBVkVfRE9ORSkpCisJCXVkZWxheSgxKTsKKworCXJldHVybiAwOworfQorCiAjZW5kaWYgLyogQ09ORklHX0FSQ0hfT01BUDMgJiYgQ09ORklHX1BNICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NvbnRyb2wuaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvY29udHJvbC5oCmluZGV4IGI2YzZiN2MuLmYwNjI5YWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY29udHJvbC5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY29udHJvbC5oCkBAIC0xNDgsNiArMTQ4LDE1IEBACiAjZGVmaW5lIE9NQVAzNDNYX0NPTlRST0xfVEVTVF9LRVlfMTEJKE9NQVAyX0NPTlRST0xfR0VORVJBTCArIDB4MDBmNCkKICNkZWZpbmUgT01BUDM0M1hfQ09OVFJPTF9URVNUX0tFWV8xMgkoT01BUDJfQ09OVFJPTF9HRU5FUkFMICsgMHgwMGY4KQogI2RlZmluZSBPTUFQMzQzWF9DT05UUk9MX1RFU1RfS0VZXzEzCShPTUFQMl9DT05UUk9MX0dFTkVSQUwgKyAweDAwZmMpCisjZGVmaW5lIE9NQVAzNDNYX0NPTlRST0xfRlVTRV9PUFAxX1ZERDEgKE9NQVAyX0NPTlRST0xfR0VORVJBTCArIDB4MDExMCkKKyNkZWZpbmUgT01BUDM0M1hfQ09OVFJPTF9GVVNFX09QUDJfVkREMSAoT01BUDJfQ09OVFJPTF9HRU5FUkFMICsgMHgwMTE0KQorI2RlZmluZSBPTUFQMzQzWF9DT05UUk9MX0ZVU0VfT1BQM19WREQxIChPTUFQMl9DT05UUk9MX0dFTkVSQUwgKyAweDAxMTgpCisjZGVmaW5lIE9NQVAzNDNYX0NPTlRST0xfRlVTRV9PUFA0X1ZERDEgKE9NQVAyX0NPTlRST0xfR0VORVJBTCArIDB4MDExYykKKyNkZWZpbmUgT01BUDM0M1hfQ09OVFJPTF9GVVNFX09QUDVfVkREMSAoT01BUDJfQ09OVFJPTF9HRU5FUkFMICsgMHgwMTIwKQorI2RlZmluZSBPTUFQMzQzWF9DT05UUk9MX0ZVU0VfT1BQMV9WREQyIChPTUFQMl9DT05UUk9MX0dFTkVSQUwgKyAweDAxMjQpCisjZGVmaW5lIE9NQVAzNDNYX0NPTlRST0xfRlVTRV9PUFAyX1ZERDIgKE9NQVAyX0NPTlRST0xfR0VORVJBTCArIDB4MDEyOCkKKyNkZWZpbmUgT01BUDM0M1hfQ09OVFJPTF9GVVNFX09QUDNfVkREMiAoT01BUDJfQ09OVFJPTF9HRU5FUkFMICsgMHgwMTJjKQorI2RlZmluZSBPTUFQMzQzWF9DT05UUk9MX0ZVU0VfU1IgICAgICAgIChPTUFQMl9DT05UUk9MX0dFTkVSQUwgKyAweDAxMzApCiAjZGVmaW5lIE9NQVAzNDNYX0NPTlRST0xfSVZBMl9CT09UQUREUgkoT01BUDJfQ09OVFJPTF9HRU5FUkFMICsgMHgwMTkwKQogI2RlZmluZSBPTUFQMzQzWF9DT05UUk9MX0lWQTJfQk9PVE1PRAkoT01BUDJfQ09OVFJPTF9HRU5FUkFMICsgMHgwMTk0KQogI2RlZmluZSBPTUFQMzQzWF9DT05UUk9MX0RFQk9CUyhpKQkoT01BUDJfQ09OVFJPTF9HRU5FUkFMICsgMHgwMUIwIFwKQEAgLTE2NCw2ICsxNzMsMjYgQEAKICNkZWZpbmUgT01BUDM0M1hfQ09OVFJPTF9TUkFNTERPNQkoT01BUDJfQ09OVFJPTF9HRU5FUkFMICsgMHgwMkMwKQogI2RlZmluZSBPTUFQMzQzWF9DT05UUk9MX0NTSQkJKE9NQVAyX0NPTlRST0xfR0VORVJBTCArIDB4MDJDNCkKIAorLyogT01BUDM2MzAgb25seSBDT05UUk9MX0dFTkVSQUwgcmVnaXN0ZXIgb2Zmc2V0cyAqLworI2RlZmluZSBPTUFQMzYzMF9DT05UUk9MX0ZVU0VfT1BQMUdfVkREMSAgICAgICAgKE9NQVAyX0NPTlRST0xfR0VORVJBTCArIDB4MDExMCkKKyNkZWZpbmUgT01BUDM2MzBfQ09OVFJPTF9GVVNFX09QUDUwX1ZERDEgICAgICAgIChPTUFQMl9DT05UUk9MX0dFTkVSQUwgKyAweDAxMTQpCisjZGVmaW5lIE9NQVAzNjMwX0NPTlRST0xfRlVTRV9PUFAxMDBfVkREMSAgICAgICAoT01BUDJfQ09OVFJPTF9HRU5FUkFMICsgMHgwMTE4KQorI2RlZmluZSBPTUFQMzYzMF9DT05UUk9MX0ZVU0VfT1BQMTIwX1ZERDEgICAgICAgKE9NQVAyX0NPTlRST0xfR0VORVJBTCArIDB4MDEyMCkKKyNkZWZpbmUgT01BUDM2MzBfQ09OVFJPTF9GVVNFX09QUDUwX1ZERDIgICAgICAgIChPTUFQMl9DT05UUk9MX0dFTkVSQUwgKyAweDAxMjgpCisjZGVmaW5lIE9NQVAzNjMwX0NPTlRST0xfRlVTRV9PUFAxMDBfVkREMiAgICAgICAoT01BUDJfQ09OVFJPTF9HRU5FUkFMICsgMHgwMTJDKQorCisvKiBPTUFQNDR4eCBjb250cm9sIGVmdXNlIG9mZnNldHMgKi8KKyNkZWZpbmUgT01BUDQ0WFhfQ09OVFJPTF9GVVNFX0lWQV9PUFA1MAkJMHgyMkMKKyNkZWZpbmUgT01BUDQ0WFhfQ09OVFJPTF9GVVNFX0lWQV9PUFAxMDAJMHgyMkYKKyNkZWZpbmUgT01BUDQ0WFhfQ09OVFJPTF9GVVNFX0lWQV9PUFBUVVJCTwkweDIzMgorI2RlZmluZSBPTUFQNDRYWF9DT05UUk9MX0ZVU0VfSVZBX09QUE5JVFJPCTB4MjM1CisjZGVmaW5lIE9NQVA0NFhYX0NPTlRST0xfRlVTRV9NUFVfT1BQNTAJCTB4MjQwCisjZGVmaW5lIE9NQVA0NFhYX0NPTlRST0xfRlVTRV9NUFVfT1BQMTAwCTB4MjQzCisjZGVmaW5lIE9NQVA0NFhYX0NPTlRST0xfRlVTRV9NUFVfT1BQVFVSQk8JMHgyNDYKKyNkZWZpbmUgT01BUDQ0WFhfQ09OVFJPTF9GVVNFX01QVV9PUFBOSVRSTwkweDI0OQorI2RlZmluZSBPTUFQNDRYWF9DT05UUk9MX0ZVU0VfQ09SRV9PUFA1MAkweDI1NAorI2RlZmluZSBPTUFQNDRYWF9DT05UUk9MX0ZVU0VfQ09SRV9PUFAxMDAJMHgyNTcKKwogLyogQU0zNVhYIG9ubHkgQ09OVFJPTF9HRU5FUkFMIHJlZ2lzdGVyIG9mZnNldHMgKi8KICNkZWZpbmUgQU0zNVhYX0NPTlRST0xfTVNVU1BFTkRNVVhfNiAgICAoT01BUDJfQ09OVFJPTF9HRU5FUkFMICsgMHgwMDM4KQogI2RlZmluZSBBTTM1WFhfQ09OVFJPTF9ERVZDT05GMiAgICAgICAgIChPTUFQMl9DT05UUk9MX0dFTkVSQUwgKyAweDAzMTApCkBAIC0yMDQsNiArMjMzLDEwIEBACiAjZGVmaW5lIE9NQVAzNDNYX0NPTlRST0xfV0tVUF9ERUJPQlMzIChPTUFQMzQzWF9DT05UUk9MX0dFTkVSQUxfV0tVUCArIDB4MDE0KQogI2RlZmluZSBPTUFQMzQzWF9DT05UUk9MX1dLVVBfREVCT0JTNCAoT01BUDM0M1hfQ09OVFJPTF9HRU5FUkFMX1dLVVAgKyAweDAxOCkKIAorLyogMzZ4eC1vbmx5IFJUQSAtIFJldGVudGlvbiB0aWxsIEFjY2Vzc3MgY29udHJvbCByZWdpc3RlcnMgYW5kIGJpdHMgKi8KKyNkZWZpbmUgT01BUDM2WFhfQ09OVFJPTF9NRU1fUlRBX0NUUkwJMHg0MEMKKyNkZWZpbmUgT01BUDM2WFhfUlRBX0RJU0FCTEUJCTB4MAorCiAvKiAzNHh4IEQyRCBpZGxlLXJlbGF0ZWQgcGlucywgaGFuZGxlZCBieSBQTSBjb3JlICovCiAjZGVmaW5lIE9NQVAzX1BBRENPTkZfU0FEMkRfTVNUQU5EQlkgICAweDI1MAogI2RlZmluZSBPTUFQM19QQURDT05GX1NBRDJEX0lETEVBQ0sgICAgMHgyNTQKQEAgLTI3MCw2ICszMDMsOCBAQAogI2RlZmluZSBPTUFQMzQzWF9TQ1JBVENIUEFEX1JPTQkJKE9NQVAzNDNYX0NUUkxfQkFTRSArIDB4ODYwKQogI2RlZmluZSBPTUFQMzQzWF9TQ1JBVENIUEFECQkoT01BUDM0M1hfQ1RSTF9CQVNFICsgMHg5MTApCiAjZGVmaW5lIE9NQVAzNDNYX1NDUkFUQ0hQQURfUk9NX09GRlNFVAkweDE5QworI2RlZmluZSBPTUFQMzQzWF9TQ1JBVENIUEFEX1JFR0FERFIocmVnKQlPTUFQMl9MNF9JT19BRERSRVNTKFwKKwkJCQkJCU9NQVAzNDNYX1NDUkFUQ0hQQUQgKyByZWcpCiAKIC8qIEFNMzVYWF9DT05UUk9MX0lQU1NfQ0xLX0NUUkwgYml0cyAqLwogI2RlZmluZSBBTTM1WFhfVVNCT1RHX1ZCVVNQX0NMS19TSElGVCAgIDAKQEAgLTMwOSw3ICszNDQsNyBAQAogI2RlZmluZQkJRkVBVF9TR1hfTk9ORQkJMgogCiAjZGVmaW5lIE9NQVAzX0lWQV9TSElGVAkJCTEyCi0jZGVmaW5lIE9NQVAzX0lWQV9NQVNLCQkJKDEgPDwgT01BUDNfU0dYX1NISUZUKQorI2RlZmluZSBPTUFQM19JVkFfTUFTSwkJCSgxIDw8IE9NQVAzX0lWQV9TSElGVCkKICNkZWZpbmUJCUZFQVRfSVZBCQkwCiAjZGVmaW5lCQlGRUFUX0lWQV9OT05FCQkxCiAKQEAgLTM0NywxMCArMzgyLDEzIEBACiBleHRlcm4gdm9pZCBvbWFwM19jbGVhcl9zY3JhdGNocGFkX2NvbnRlbnRzKHZvaWQpOwogZXh0ZXJuIHUzMiAqZ2V0X3Jlc3RvcmVfcG9pbnRlcih2b2lkKTsKIGV4dGVybiB1MzIgKmdldF9lczNfcmVzdG9yZV9wb2ludGVyKHZvaWQpOworZXh0ZXJuIHUzMiAqZ2V0X29tYXAzNjMwX3Jlc3RvcmVfcG9pbnRlcih2b2lkKTsKIGV4dGVybiB1MzIgb21hcDNfYXJtX2NvbnRleHRbMTI4XTsKIGV4dGVybiB2b2lkIG9tYXAzX2NvbnRyb2xfc2F2ZV9jb250ZXh0KHZvaWQpOwogZXh0ZXJuIHZvaWQgb21hcDNfY29udHJvbF9yZXN0b3JlX2NvbnRleHQodm9pZCk7Ci0KK2V4dGVybiB2b2lkIG9tYXAzX2N0cmxfd3JpdGVfYm9vdF9tb2RlKHU4IGJvb3Rtb2RlKTsKK2V4dGVybiB2b2lkIG9tYXAzNjMwX2N0cmxfZGlzYWJsZV9ydGEodm9pZCk7CitleHRlcm4gaW50IG9tYXAzX2N0cmxfc2F2ZV9wYWRjb25mKHZvaWQpOwogI2Vsc2UKICNkZWZpbmUgb21hcF9jdHJsX2Jhc2VfZ2V0KCkJCTAKICNkZWZpbmUgb21hcF9jdHJsX3JlYWRiKHgpCQkwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NwdWlkbGUzNHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NwdWlkbGUzNHh4LmMKaW5kZXggMGQ1MGI0NS4uZjNlMDQzZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jcHVpZGxlMzR4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY3B1aWRsZTM0eHguYwpAQCAtMjcsOCArMjcsOCBAQAogCiAjaW5jbHVkZSA8cGxhdC9wcmNtLmg+CiAjaW5jbHVkZSA8cGxhdC9pcnFzLmg+Ci0jaW5jbHVkZSA8cGxhdC9wb3dlcmRvbWFpbi5oPgotI2luY2x1ZGUgPHBsYXQvY2xvY2tkb21haW4uaD4KKyNpbmNsdWRlICJwb3dlcmRvbWFpbi5oIgorI2luY2x1ZGUgImNsb2NrZG9tYWluLmgiCiAjaW5jbHVkZSA8cGxhdC9zZXJpYWwuaD4KIAogI2luY2x1ZGUgInBtLmgiCkBAIC0yOTMsMjUgKzI5MywyNiBAQAogREVGSU5FX1BFUl9DUFUoc3RydWN0IGNwdWlkbGVfZGV2aWNlLCBvbWFwM19pZGxlX2Rldik7CiAKIC8qKgotICogb21hcDNfY3B1aWRsZV91cGRhdGVfc3RhdGVzIC0gVXBkYXRlIHRoZSBjcHVpZGxlIHN0YXRlcy4KKyAqIG9tYXAzX2NwdWlkbGVfdXBkYXRlX3N0YXRlcygpIC0gVXBkYXRlIHRoZSBjcHVpZGxlIHN0YXRlcworICogQG1wdV9kZWVwZXN0X3N0YXRlOglFbmFibGUgc3RhdGVzIHVwdG8gYW5kIGluY2x1ZGluZyB0aGlzIGZvciBtcHUgZG9tYWluCisgKiBAY29yZV9kZWVwZXN0X3N0YXRlOglFbmFibGUgc3RhdGVzIHVwdG8gYW5kIGluY2x1ZGluZyB0aGlzIGZvciBjb3JlIGRvbWFpbgogICoKLSAqIEN1cnJlbnRseSwgdGhpcyBmdW5jdGlvbiB0b2dnbGVzIHRoZSB2YWxpZGl0eSBvZiBpZGxlIHN0YXRlcyBiYXNlZCB1cG9uCi0gKiB0aGUgZmxhZyAnZW5hYmxlX29mZl9tb2RlJy4gV2hlbiB0aGUgZmxhZyBpcyBzZXQgYWxsIHN0YXRlcyBhcmUgdmFsaWQuCi0gKiBFbHNlLCBzdGF0ZXMgbGVhZGluZyB0byBPRkYgc3RhdGUgc2V0IHRvIGJlIGludmFsaWQuCisgKiBUaGlzIGdvZXMgdGhyb3VnaCB0aGUgbGlzdCBvZiBzdGF0ZXMgYXZhaWxhYmxlIGFuZCBlbmFibGVzIGFuZCBkaXNhYmxlcyB0aGUKKyAqIHZhbGlkaXR5IG9mIEMgc3RhdGVzIGJhc2VkIG9uIGRlZXBlc3Qgc3RhdGUgdGhhdCBjYW4gYmUgYWNoaWV2ZWQgZm9yIHRoZQorICogdmFyaWFibGUgZG9tYWluCiAgKi8KLXZvaWQgb21hcDNfY3B1aWRsZV91cGRhdGVfc3RhdGVzKHZvaWQpCit2b2lkIG9tYXAzX2NwdWlkbGVfdXBkYXRlX3N0YXRlcyh1MzIgbXB1X2RlZXBlc3Rfc3RhdGUsIHUzMiBjb3JlX2RlZXBlc3Rfc3RhdGUpCiB7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSBPTUFQM19TVEFURV9DMTsgaSA8IE9NQVAzX01BWF9TVEFURVM7IGkrKykgewogCQlzdHJ1Y3Qgb21hcDNfcHJvY2Vzc29yX2N4ICpjeCA9ICZvbWFwM19wb3dlcl9zdGF0ZXNbaV07CiAKLQkJaWYgKGVuYWJsZV9vZmZfbW9kZSkgeworCQlpZiAoKGN4LT5tcHVfc3RhdGUgPj0gbXB1X2RlZXBlc3Rfc3RhdGUpICYmCisJCSAgICAoY3gtPmNvcmVfc3RhdGUgPj0gY29yZV9kZWVwZXN0X3N0YXRlKSkgewogCQkJY3gtPnZhbGlkID0gMTsKIAkJfSBlbHNlIHsKLQkJCWlmICgoY3gtPm1wdV9zdGF0ZSA9PSBQV1JETV9QT1dFUl9PRkYpIHx8Ci0JCQkJKGN4LT5jb3JlX3N0YXRlCT09IFBXUkRNX1BPV0VSX09GRikpCi0JCQkJY3gtPnZhbGlkID0gMDsKKwkJCWN4LT52YWxpZCA9IDA7CiAJCX0KIAl9CiB9CkBAIC00NTIsNiArNDUzLDE4IEBACiAJb21hcDNfcG93ZXJfc3RhdGVzW09NQVAzX1NUQVRFX0M3XS5jb3JlX3N0YXRlID0gUFdSRE1fUE9XRVJfT0ZGOwogCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DN10uZmxhZ3MgPSBDUFVJRExFX0ZMQUdfVElNRV9WQUxJRCB8CiAJCQkJQ1BVSURMRV9GTEFHX0NIRUNLX0JNOworCisJLyoKKwkgKiBFcnJhdHVtIGk1ODM6IGltcGxlbWVudGF0aW9uIGZvciBFUyByZXYgPCBFczEuMiBvbiAzNjMwLiBXZSBjYW5ub3QKKwkgKiBlbmFibGUgT0ZGIG1vZGUgaW4gYSBzdGFibGUgZm9ybSBmb3IgcHJldmlvdXMgcmV2aXNpb25zLgorCSAqIHdlIGRpc2FibGUgQzcgc3RhdGUgYXMgYSByZXN1bHQuCisJICovCisJaWYgKElTX1BNMzRYWF9FUlJBVFVNKFBNX1NEUkNfV0FLRVVQX0VSUkFUVU1faTU4MykpIHsKKwkJb21hcDNfcG93ZXJfc3RhdGVzW09NQVAzX1NUQVRFX0M3XS52YWxpZCA9IDA7CisJCWNwdWlkbGVfcGFyYW1zX3RhYmxlW09NQVAzX1NUQVRFX0M3XS52YWxpZCA9IDA7CisJCVdBUk5fT05DRSgxLCAiJXM6IGNvcmUgb2ZmIHN0YXRlIEM3IGRpc2FibGVkIGR1ZSB0byBpNTgzXG4iLAorCQkJCV9fZnVuY19fKTsKKwl9CiB9CiAKIHN0cnVjdCBjcHVpZGxlX2RyaXZlciBvbWFwM19pZGxlX2RyaXZlciA9IHsKQEAgLTUwNCw3ICs1MTcsMTAgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJZGV2LT5zdGF0ZV9jb3VudCA9IGNvdW50OwogCi0Jb21hcDNfY3B1aWRsZV91cGRhdGVfc3RhdGVzKCk7CisJaWYgKGVuYWJsZV9vZmZfbW9kZSkKKwkJb21hcDNfY3B1aWRsZV91cGRhdGVfc3RhdGVzKFBXUkRNX1BPV0VSX09GRiwgUFdSRE1fUE9XRVJfT0ZGKTsKKwllbHNlCisJCW9tYXAzX2NwdWlkbGVfdXBkYXRlX3N0YXRlcyhQV1JETV9QT1dFUl9SRVQsIFBXUkRNX1BPV0VSX1JFVCk7CiAKIAlpZiAoY3B1aWRsZV9yZWdpc3Rlcl9kZXZpY2UoZGV2KSkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDUFVpZGxlIHJlZ2lzdGVyIGRldmljZSBmYWlsZWRcbiIsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2RldmljZXMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvZGV2aWNlcy5jCmluZGV4IDVhMGMxNDguLjM4MWY0ZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvZGV2aWNlcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvZGV2aWNlcy5jCkBAIC02MzgsNiArNjM4LDcgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwX2hzbW1jX3Jlc2V0KHZvaWQpCiB7CiAJdTMyIGksIG5yX2NvbnRyb2xsZXJzOworCXN0cnVjdCBjbGsgKmljbGssICpmY2xrOwogCiAJaWYgKGNwdV9pc19vbWFwMjQyeCgpKQogCQlyZXR1cm47CkBAIC02NDcsNyArNjQ4LDYgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBucl9jb250cm9sbGVyczsgaSsrKSB7CiAJCXUzMiB2LCBiYXNlID0gMDsKLQkJc3RydWN0IGNsayAqaWNsaywgKmZjbGs7CiAJCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZkdW1teV9wZGV2LmRldjsKIAogCQlzd2l0Y2ggKGkpIHsKQEAgLTY3OCwxOSArNjc4LDE2IEBACiAJCWR1bW15X3BkZXYuaWQgPSBpOwogCQlkZXZfc2V0X25hbWUoJmR1bW15X3BkZXYuZGV2LCAibW1jaS1vbWFwLWhzLiVkIiwgaSk7CiAJCWljbGsgPSBjbGtfZ2V0KGRldiwgImljayIpOwotCQlpZiAoaWNsayAmJiBjbGtfZW5hYmxlKGljbGspKQotCQkJaWNsayA9IE5VTEw7CisJCWlmIChJU19FUlIoaWNsaykpCisJCQlnb3RvIGVycjE7CisJCWlmIChjbGtfZW5hYmxlKGljbGspKQorCQkJZ290byBlcnIyOwogCiAJCWZjbGsgPSBjbGtfZ2V0KGRldiwgImZjayIpOwotCQlpZiAoZmNsayAmJiBjbGtfZW5hYmxlKGZjbGspKQotCQkJZmNsayA9IE5VTEw7Ci0KLQkJaWYgKCFpY2xrIHx8ICFmY2xrKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkgICAgICAgIiVzOiBVbmFibGUgdG8gZW5hYmxlIGNsb2NrcyBmb3IgTU1DJWQsICIKLQkJCSAgICAgICAiY2Fubm90IHJlc2V0LlxuIiwgIF9fZnVuY19fLCBpKTsKLQkJCWJyZWFrOwotCQl9CisJCWlmIChJU19FUlIoZmNsaykpCisJCQlnb3RvIGVycjM7CisJCWlmIChjbGtfZW5hYmxlKGZjbGspKQorCQkJZ290byBlcnI0OwogCiAJCW9tYXBfd3JpdGVsKE1NQ0hTX1NZU0NPTkZJR19TV1JFU0VULCBiYXNlICsgTU1DSFNfU1lTQ09ORklHKTsKIAkJdiA9IG9tYXBfcmVhZGwoYmFzZSArIE1NQ0hTX1NZU1NUQVRVUyk7CkBAIC02OTgsMTUgKzY5NSwyMiBAQAogCQkJIE1NQ0hTX1NZU1NUQVRVU19SRVNFVERPTkUpKQogCQkJY3B1X3JlbGF4KCk7CiAKLQkJaWYgKGZjbGspIHsKLQkJCWNsa19kaXNhYmxlKGZjbGspOwotCQkJY2xrX3B1dChmY2xrKTsKLQkJfQotCQlpZiAoaWNsaykgewotCQkJY2xrX2Rpc2FibGUoaWNsayk7Ci0JCQljbGtfcHV0KGljbGspOwotCQl9CisJCWNsa19kaXNhYmxlKGZjbGspOworCQljbGtfcHV0KGZjbGspOworCQljbGtfZGlzYWJsZShpY2xrKTsKKwkJY2xrX3B1dChpY2xrKTsKIAl9CisJcmV0dXJuOworCitlcnI0OgorCWNsa19wdXQoZmNsayk7CitlcnIzOgorCWNsa19kaXNhYmxlKGljbGspOworZXJyMjoKKwljbGtfcHV0KGljbGspOworZXJyMToKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogVW5hYmxlIHRvIGVuYWJsZSBjbG9ja3MgZm9yIE1NQyVkLCAiCisJCQkgICAgImNhbm5vdCByZXNldC5cbiIsICBfX2Z1bmNfXywgaSk7CiB9CiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIG9tYXBfaHNtbWNfcmVzZXQodm9pZCkge30KQEAgLTk1MSw3MiArOTU1LDEyIEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLS8qCi0gKiBJbm9yZGVyIHRvIGF2b2lkIGFueSBhc3N1bXB0aW9ucyBmcm9tIGJvb3Rsb2FkZXIgcmVnYXJkaW5nIFdEVAotICogc2V0dGluZ3MsIFdEVCBtb2R1bGUgaXMgcmVzZXQgZHVyaW5nIGluaXQuIFRoaXMgZW5hYmxlcyB0aGUgd2F0Y2hkb2cKLSAqIHRpbWVyLiBIZW5jZSBpdCBpcyByZXF1aXJlZCB0byBkaXNhYmxlIHRoZSB3YXRjaGRvZyBhZnRlciB0aGUgV0RUIHJlc2V0Ci0gKiBkdXJpbmcgaW5pdC4gT3RoZXJ3aXNlIHRoZSBzeXN0ZW0gd291bGQgcmVib290IGFzIHBlciB0aGUgZGVmYXVsdAotICogd2F0Y2hkb2cgdGltZXIgcmVnaXN0ZXJzIHNldHRpbmdzLgotICovCi0jZGVmaW5lIE9NQVBfV0RUX1dQUwkoMHgzNCkKLSNkZWZpbmUgT01BUF9XRFRfU1BSCSgweDQ4KQotCi1zdGF0aWMgaW50IG9tYXAyX2Rpc2FibGVfd2R0KHN0cnVjdCBvbWFwX2h3bW9kICpvaCwgdm9pZCAqdW51c2VkKQotewotCXZvaWQgX19pb21lbSAqYmFzZTsKLQlpbnQgcmV0OwotCi0JaWYgKCFvaCkgewotCQlwcl9lcnIoIiVzOiBDb3VsZCBub3QgbG9vayB1cCB3ZHRpbWVyX2h3bW9kXG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWJhc2UgPSBvbWFwX2h3bW9kX2dldF9tcHVfcnRfdmEob2gpOwotCWlmICghYmFzZSkgewotCQlwcl9lcnIoIiVzOiBDb3VsZCBub3QgZ2V0IHRoZSBiYXNlIGFkZHJlc3MgZm9yICVzXG4iLAotCQkJCW9oLT5uYW1lLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qIEVuYWJsZSB0aGUgY2xvY2tzIGJlZm9yZSBhY2Nlc3NpbmcgdGhlIFdEVCByZWdpc3RlcnMgKi8KLQlyZXQgPSBvbWFwX2h3bW9kX2VuYWJsZShvaCk7Ci0JaWYgKHJldCkgewotCQlwcl9lcnIoIiVzOiBDb3VsZCBub3QgZW5hYmxlIGNsb2NrcyBmb3IgJXNcbiIsCi0JCQkJb2gtPm5hbWUsIF9fZnVuY19fKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQkvKiBzZXF1ZW5jZSByZXF1aXJlZCB0byBkaXNhYmxlIHdhdGNoZG9nICovCi0JX19yYXdfd3JpdGVsKDB4QUFBQSwgYmFzZSArIE9NQVBfV0RUX1NQUik7Ci0Jd2hpbGUgKF9fcmF3X3JlYWRsKGJhc2UgKyBPTUFQX1dEVF9XUFMpICYgMHgxMCkKLQkJY3B1X3JlbGF4KCk7Ci0KLQlfX3Jhd193cml0ZWwoMHg1NTU1LCBiYXNlICsgT01BUF9XRFRfU1BSKTsKLQl3aGlsZSAoX19yYXdfcmVhZGwoYmFzZSArIE9NQVBfV0RUX1dQUykgJiAweDEwKQotCQljcHVfcmVsYXgoKTsKLQotCXJldCA9IG9tYXBfaHdtb2RfaWRsZShvaCk7Ci0JaWYgKHJldCkKLQkJcHJfZXJyKCIlczogQ291bGQgbm90IGRpc2FibGUgY2xvY2tzIGZvciAlc1xuIiwKLQkJCQlvaC0+bmFtZSwgX19mdW5jX18pOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0IG9tYXBfZGlzYWJsZV93ZHQodm9pZCkKLXsKLQlpZiAoY3B1X2NsYXNzX2lzX29tYXAyKCkpCi0JCW9tYXBfaHdtb2RfZm9yX2VhY2hfYnlfY2xhc3MoIndkX3RpbWVyIiwKLQkJCQkJCW9tYXAyX2Rpc2FibGVfd2R0LCBOVUxMKTsKLQlyZXR1cm47Ci19Ci0KIHN0YXRpYyBpbnQgX19pbml0IG9tYXAyX2luaXRfZGV2aWNlcyh2b2lkKQogewotCS8qIHBsZWFzZSBrZWVwIHRoZXNlIGNhbGxzLCBhbmQgdGhlaXIgaW1wbGVtZW50YXRpb25zIGFib3ZlLAorCS8qCisJICogcGxlYXNlIGtlZXAgdGhlc2UgY2FsbHMsIGFuZCB0aGVpciBpbXBsZW1lbnRhdGlvbnMgYWJvdmUsCiAJICogaW4gYWxwaGFiZXRpY2FsIG9yZGVyIHNvIHRoZXkncmUgZWFzaWVyIHRvIHNvcnQgdGhyb3VnaC4KIAkgKi8KLQlvbWFwX2Rpc2FibGVfd2R0KCk7CiAJb21hcF9oc21tY19yZXNldCgpOwogCW9tYXBfaW5pdF9hdWRpbygpOwogCW9tYXBfaW5pdF9jYW1lcmEoKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvZG1hLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2RtYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyZjE1ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2RtYS5jCkBAIC0wLDAgKzEsMjk3IEBACisvKgorICogT01BUDIrIERNQSBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA4IE5va2lhIENvcnBvcmF0aW9uCisgKiBBdXRob3I6IEp1aGEgWXJqw7Zsw6QgPGp1aGEueXJqb2xhQG5va2lhLmNvbT4KKyAqIERNQSBjaGFubmVsIGxpbmtpbmcgZm9yIDE2MTAgYnkgU2FtdWVsIE9ydGl6IDxzYW11ZWwub3J0aXpAbm9raWEuY29tPgorICogR3JhcGhpY3MgRE1BIGFuZCBMQ0QgRE1BIGdyYXBoaWNzIHRyYW5mb3JtYXRpb25zCisgKiBieSBJbXJlIERlYWsgPGltcmUuZGVha0Bub2tpYS5jb20+CisgKiBPTUFQMi8zIHN1cHBvcnQgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIFNvbWUgZnVuY3Rpb25zIGJhc2VkIG9uIGVhcmxpZXIgZG1hLW9tYXAuYyBDb3B5cmlnaHQgKEMpIDIwMDEgUmlkZ2VSdW4sIEluYy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGV4YXMgSW5zdHJ1bWVudHMKKyAqIEFkZGVkIE9NQVA0IHN1cHBvcnQgLSBTYW50b3NoIFNoaWxpbWthciA8c2FudG9zaC5zaGlsaW1rYXJAdGkuY29tPgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQgLSBodHRwOi8vd3d3LnRpLmNvbS8KKyAqIENvbnZlcnRlZCBETUEgbGlicmFyeSBpbnRvIHBsYXRmb3JtIGRyaXZlcgorICoJLSBHLCBNYW5qdW5hdGggS29uZGFpYWggPG1hbmp1Z2tAdGkuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKworI2luY2x1ZGUgPHBsYXQvb21hcF9od21vZC5oPgorI2luY2x1ZGUgPHBsYXQvb21hcF9kZXZpY2UuaD4KKyNpbmNsdWRlIDxwbGF0L2RtYS5oPgorCisjZGVmaW5lIE9NQVAyX0RNQV9TVFJJREUJMHg2MAorCitzdGF0aWMgdTMyIGVycmF0YTsKK3N0YXRpYyB1OCBkbWFfc3RyaWRlOworCitzdGF0aWMgc3RydWN0IG9tYXBfZG1hX2Rldl9hdHRyICpkOworCitzdGF0aWMgZW51bSBvbWFwX3JlZ19vZmZzZXRzIGRtYV9jb21tb25fY2hfc3RhcnQsIGRtYV9jb21tb25fY2hfZW5kOworCitzdGF0aWMgdTE2IHJlZ19tYXBbXSA9IHsKKwlbUkVWSVNJT05dCQk9IDB4MDAsCisJW0dDUl0JCQk9IDB4NzgsCisJW0lSUVNUQVRVU19MMF0JCT0gMHgwOCwKKwlbSVJRU1RBVFVTX0wxXQkJPSAweDBjLAorCVtJUlFTVEFUVVNfTDJdCQk9IDB4MTAsCisJW0lSUVNUQVRVU19MM10JCT0gMHgxNCwKKwlbSVJRRU5BQkxFX0wwXQkJPSAweDE4LAorCVtJUlFFTkFCTEVfTDFdCQk9IDB4MWMsCisJW0lSUUVOQUJMRV9MMl0JCT0gMHgyMCwKKwlbSVJRRU5BQkxFX0wzXQkJPSAweDI0LAorCVtTWVNTVEFUVVNdCQk9IDB4MjgsCisJW09DUF9TWVNDT05GSUddCQk9IDB4MmMsCisJW0NBUFNfMF0JCT0gMHg2NCwKKwlbQ0FQU18yXQkJPSAweDZjLAorCVtDQVBTXzNdCQk9IDB4NzAsCisJW0NBUFNfNF0JCT0gMHg3NCwKKworCS8qIENvbW1vbiByZWdpc3RlciBvZmZzZXRzICovCisJW0NDUl0JCQk9IDB4ODAsCisJW0NMTktfQ1RSTF0JCT0gMHg4NCwKKwlbQ0lDUl0JCQk9IDB4ODgsCisJW0NTUl0JCQk9IDB4OGMsCisJW0NTRFBdCQkJPSAweDkwLAorCVtDRU5dCQkJPSAweDk0LAorCVtDRk5dCQkJPSAweDk4LAorCVtDU0VJXQkJCT0gMHhhNCwKKwlbQ1NGSV0JCQk9IDB4YTgsCisJW0NERUldCQkJPSAweGFjLAorCVtDREZJXQkJCT0gMHhiMCwKKwlbQ1NBQ10JCQk9IDB4YjQsCisJW0NEQUNdCQkJPSAweGI4LAorCisJLyogQ2hhbm5lbCBzcGVjaWZpYyByZWdpc3RlciBvZmZzZXRzICovCisJW0NTU0FdCQkJPSAweDljLAorCVtDRFNBXQkJCT0gMHhhMCwKKwlbQ0NFTl0JCQk9IDB4YmMsCisJW0NDRk5dCQkJPSAweGMwLAorCVtDT0xPUl0JCQk9IDB4YzQsCisKKwkvKiBPTUFQNCBzcGVjaWZpYyByZWdpc3RlcnMgKi8KKwlbQ0RQXQkJCT0gMHhkMCwKKwlbQ05EUF0JCQk9IDB4ZDQsCisJW0NDRE5dCQkJPSAweGQ4LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2RldmljZV9wbV9sYXRlbmN5IG9tYXAyX2RtYV9sYXRlbmN5W10gPSB7CisJeworCQkuZGVhY3RpdmF0ZV9mdW5jID0gb21hcF9kZXZpY2VfaWRsZV9od21vZHMsCisJCS5hY3RpdmF0ZV9mdW5jCSA9IG9tYXBfZGV2aWNlX2VuYWJsZV9od21vZHMsCisJCS5mbGFncwkJID0gT01BUF9ERVZJQ0VfTEFURU5DWV9BVVRPX0FESlVTVCwKKwl9LAorfTsKKworc3RhdGljIHZvaWQgX19pb21lbSAqZG1hX2Jhc2U7CitzdGF0aWMgaW5saW5lIHZvaWQgZG1hX3dyaXRlKHUzMiB2YWwsIGludCByZWcsIGludCBsY2gpCit7CisJdTggIHN0cmlkZTsKKwl1MzIgb2Zmc2V0OworCisJc3RyaWRlID0gKHJlZyA+PSBkbWFfY29tbW9uX2NoX3N0YXJ0KSA/IGRtYV9zdHJpZGUgOiAwOworCW9mZnNldCA9IHJlZ19tYXBbcmVnXSArIChzdHJpZGUgKiBsY2gpOworCV9fcmF3X3dyaXRlbCh2YWwsIGRtYV9iYXNlICsgb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSB1MzIgZG1hX3JlYWQoaW50IHJlZywgaW50IGxjaCkKK3sKKwl1OCBzdHJpZGU7CisJdTMyIG9mZnNldCwgdmFsOworCisJc3RyaWRlID0gKHJlZyA+PSBkbWFfY29tbW9uX2NoX3N0YXJ0KSA/IGRtYV9zdHJpZGUgOiAwOworCW9mZnNldCA9IHJlZ19tYXBbcmVnXSArIChzdHJpZGUgKiBsY2gpOworCXZhbCA9IF9fcmF3X3JlYWRsKGRtYV9iYXNlICsgb2Zmc2V0KTsKKwlyZXR1cm4gdmFsOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcDJfZGlzYWJsZV9pcnFfbGNoKGludCBsY2gpCit7CisJdTMyIHZhbDsKKworCXZhbCA9IGRtYV9yZWFkKElSUUVOQUJMRV9MMCwgbGNoKTsKKwl2YWwgJj0gfigxIDw8IGxjaCk7CisJZG1hX3dyaXRlKHZhbCwgSVJRRU5BQkxFX0wwLCBsY2gpOworfQorCitzdGF0aWMgdm9pZCBvbWFwMl9jbGVhcl9kbWEoaW50IGxjaCkKK3sKKwlpbnQgaSA9IGRtYV9jb21tb25fY2hfc3RhcnQ7CisKKwlmb3IgKDsgaSA8PSBkbWFfY29tbW9uX2NoX2VuZDsgaSArPSAxKQorCQlkbWFfd3JpdGUoMCwgaSwgbGNoKTsKK30KKworc3RhdGljIHZvaWQgb21hcDJfc2hvd19kbWFfY2Fwcyh2b2lkKQoreworCXU4IHJldmlzaW9uID0gZG1hX3JlYWQoUkVWSVNJT04sIDApICYgMHhmZjsKKwlwcmludGsoS0VSTl9JTkZPICJPTUFQIERNQSBoYXJkd2FyZSByZXZpc2lvbiAlZC4lZFxuIiwKKwkJCQlyZXZpc2lvbiA+PiA0LCByZXZpc2lvbiAmIDB4Zik7CisJcmV0dXJuOworfQorCitzdGF0aWMgdTMyIGNvbmZpZ3VyZV9kbWFfZXJyYXRhKHZvaWQpCit7CisKKwkvKgorCSAqIEVycmF0YSBhcHBsaWNhYmxlIGZvciBPTUFQMjQzMEVTMS4wIGFuZCBhbGwgb21hcDI0MjAKKwkgKgorCSAqIEkuCisJICogRXJyYXR1bSBJRDogTm90IEF2YWlsYWJsZQorCSAqIEludGVyIEZyYW1lIERNQSBidWZmZXJpbmcgaXNzdWUgRE1BIHdpbGwgd3JvbmdseQorCSAqIGJ1ZmZlciBlbGVtZW50cyBpZiBwYWNraW5nIGFuZCBidXJzdGluZyBpcyBlbmFibGVkLiBUaGlzIG1pZ2h0CisJICogcmVzdWx0IGluIGRhdGEgZ2V0cyBzdGFsbGVkIGluIEZJRk8gYXQgdGhlIGVuZCBvZiB0aGUgYmxvY2suCisJICogV29ya2Fyb3VuZDogRE1BIGNoYW5uZWxzIG11c3QgaGF2ZSBCVUZGRVJJTkdfRElTQUJMRUQgYml0IHNldCB0bworCSAqIGd1YXJhbnRlZSBubyBkYXRhIHdpbGwgc3RheSBpbiB0aGUgRE1BIEZJRk8gaW4gY2FzZSBpbnRlciBmcmFtZQorCSAqIGJ1ZmZlcmluZyBvY2N1cnMKKwkgKgorCSAqIElJLgorCSAqIEVycmF0dW0gSUQ6IE5vdCBBdmFpbGFibGUKKwkgKiBETUEgbWF5IGhhbmcgd2hlbiBzZXZlcmFsIGNoYW5uZWxzIGFyZSB1c2VkIGluIHBhcmFsbGVsCisJICogSW4gdGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9uLCBETUEgY2hhbm5lbCBoYW5naW5nIGNhbiBvY2N1cjoKKwkgKiBhLiBDaGFubmVsIGksIGhhcmR3YXJlIHN5bmNocm9uaXplZCwgaXMgZW5hYmxlZAorCSAqIGIuIEFub3RoZXIgY2hhbm5lbCAoQ2hhbm5lbCB4KSwgc29mdHdhcmUgc3luY2hyb25pemVkLCBpcyBlbmFibGVkLgorCSAqIGMuIENoYW5uZWwgaSBpcyBkaXNhYmxlZCBiZWZvcmUgZW5kIG9mIHRyYW5zZmVyCisJICogZC4gQ2hhbm5lbCBpIGlzIHJlZW5hYmxlZC4KKwkgKiBlLiBTdGVwcyAxIHRvIDQgYXJlIHJlcGVhdGVkIGEgY2VydGFpbiBudW1iZXIgb2YgdGltZXMuCisJICogZi4gQSB0aGlyZCBjaGFubmVsIChDaGFubmVsIHkpLCBzb2Z0d2FyZSBzeW5jaHJvbml6ZWQsIGlzIGVuYWJsZWQuCisJICogQ2hhbm5lbCB4IGFuZCBDaGFubmVsIHkgbWF5IGhhbmcgaW1tZWRpYXRlbHkgYWZ0ZXIgc3RlcCAnZicuCisJICogV29ya2Fyb3VuZDoKKwkgKiBGb3IgYW55IGNoYW5uZWwgdXNlZCAtIG1ha2Ugc3VyZSBOZXh0TENIX0lEIGlzIHNldCB0byB0aGUgdmFsdWUgai4KKwkgKi8KKwlpZiAoY3B1X2lzX29tYXAyNDIwKCkgfHwgKGNwdV9pc19vbWFwMjQzMCgpICYmCisJCQkJKG9tYXBfdHlwZSgpID09IE9NQVAyNDMwX1JFVl9FUzFfMCkpKSB7CisKKwkJU0VUX0RNQV9FUlJBVEEoRE1BX0VSUkFUQV9JRlJBTUVfQlVGRkVSSU5HKTsKKwkJU0VUX0RNQV9FUlJBVEEoRE1BX0VSUkFUQV9QQVJBTExFTF9DSEFOTkVMUyk7CisJfQorCisJLyoKKwkgKiBFcnJhdHVtIElEOiBpMzc4OiBPTUFQMis6IHNETUEgQ2hhbm5lbCBpcyBub3QgZGlzYWJsZWQKKwkgKiBhZnRlciBhIHRyYW5zYWN0aW9uIGVycm9yLgorCSAqIFdvcmthcm91bmQ6IFNXIHNob3VsZCBleHBsaWNpdGVseSBkaXNhYmxlIHRoZSBjaGFubmVsLgorCSAqLworCWlmIChjcHVfY2xhc3NfaXNfb21hcDIoKSkKKwkJU0VUX0RNQV9FUlJBVEEoRE1BX0VSUkFUQV9pMzc4KTsKKworCS8qCisJICogRXJyYXR1bSBJRDogaTU0MTogc0RNQSBGSUZPIGRyYWluaW5nIGRvZXMgbm90IGZpbmlzaAorCSAqIElmIHNETUEgY2hhbm5lbCBpcyBkaXNhYmxlZCBvbiB0aGUgZmx5LCBzRE1BIGVudGVycyBzdGFuZGJ5IGV2ZW4KKwkgKiB0aHJvdWdoIEZJRk8gRHJhaW4gaXMgc3RpbGwgaW4gcHJvZ3Jlc3MKKwkgKiBXb3JrYXJvdW5kOiBQdXQgc0RNQSBpbiBOb1N0YW5kYnkgbW9yZSBiZWZvcmUgYSBsb2dpY2FsIGNoYW5uZWwgaXMKKwkgKiBkaXNhYmxlZCwgdGhlbiBwdXQgaXQgYmFjayB0byBTbWFydFN0YW5kYnkgcmlnaHQgYWZ0ZXIgdGhlIGNoYW5uZWwKKwkgKiBmaW5pc2hlcyBGSUZPIGRyYWluaW5nLgorCSAqLworCWlmIChjcHVfaXNfb21hcDM0eHgoKSkKKwkJU0VUX0RNQV9FUlJBVEEoRE1BX0VSUkFUQV9pNTQxKTsKKworCS8qCisJICogRXJyYXR1bSBJRDogaTg4IDogU3BlY2lhbCBwcm9ncmFtbWluZyBtb2RlbCBuZWVkZWQgdG8gZGlzYWJsZSBETUEKKwkgKiBiZWZvcmUgZW5kIG9mIGJsb2NrLgorCSAqIFdvcmthcm91bmQ6IHNvZnR3YXJlIG11c3QgZW5zdXJlIHRoYXQgdGhlIERNQSBpcyBjb25maWd1cmVkIGluIE5vCisJICogU3RhbmRieSBtb2RlKERNQXhfT0NQX1NZU0NPTkZJRy5NSURMRU1PREUgPSAiMDEiKQorCSAqLworCWlmIChvbWFwX3R5cGUoKSA9PSBPTUFQMzQzMF9SRVZfRVMxXzApCisJCVNFVF9ETUFfRVJSQVRBKERNQV9FUlJBVEFfaTg4KTsKKworCS8qCisJICogRXJyYXR1bSAzLjIvMy4zOiBzb21ldGltZXMgMCBpcyByZXR1cm5lZCBpZiBDU0FDL0NEQUMgaXMKKwkgKiByZWFkIGJlZm9yZSB0aGUgRE1BIGNvbnRyb2xsZXIgZmluaXNoZWQgZGlzYWJsaW5nIHRoZSBjaGFubmVsLgorCSAqLworCVNFVF9ETUFfRVJSQVRBKERNQV9FUlJBVEFfM18zKTsKKworCS8qCisJICogRXJyYXR1bSBJRDogTm90IEF2YWlsYWJsZQorCSAqIEEgYnVnIGluIFJPTSBjb2RlIGxlYXZlcyBJUlEgc3RhdHVzIGZvciBjaGFubmVscyAwIGFuZCAxIHVuY2xlYXJlZAorCSAqIGFmdGVyIHNlY3VyZSBzcmFtIGNvbnRleHQgc2F2ZSBhbmQgcmVzdG9yZS4KKwkgKiBXb3JrIGFyb3VuZDogSGVuY2Ugd2UgbmVlZCB0byBtYW51YWxseSBjbGVhciB0aG9zZSBJUlFzIHRvIGF2b2lkCisJICogc3B1cmlvdXMgaW50ZXJydXB0cy4gVGhpcyBhZmZlY3RzIG9ubHkgc2VjdXJlIGRldmljZXMuCisJICovCisJaWYgKGNwdV9pc19vbWFwMzR4eCgpICYmIChvbWFwX3R5cGUoKSAhPSBPTUFQMl9ERVZJQ0VfVFlQRV9HUCkpCisJCVNFVF9ETUFfRVJSQVRBKERNQV9ST01DT0RFX0JVRyk7CisKKwlyZXR1cm4gZXJyYXRhOworfQorCisvKiBPbmUgdGltZSBpbml0aWFsaXphdGlvbnMgKi8KK3N0YXRpYyBpbnQgX19pbml0IG9tYXAyX3N5c3RlbV9kbWFfaW5pdF9kZXYoc3RydWN0IG9tYXBfaHdtb2QgKm9oLCB2b2lkICp1bnVzZWQpCit7CisJc3RydWN0IG9tYXBfZGV2aWNlCQkJKm9kOworCXN0cnVjdCBvbWFwX3N5c3RlbV9kbWFfcGxhdF9pbmZvCSpwOworCXN0cnVjdCByZXNvdXJjZQkJCQkqbWVtOworCWNoYXIJCQkJCSpuYW1lID0gIm9tYXBfZG1hX3N5c3RlbSI7CisKKwlkbWFfc3RyaWRlCQk9IE9NQVAyX0RNQV9TVFJJREU7CisJZG1hX2NvbW1vbl9jaF9zdGFydAk9IENTRFA7CisJaWYgKGNwdV9pc19vbWFwMzYzMCgpIHx8IGNwdV9pc19vbWFwNDQzMCgpKQorCQlkbWFfY29tbW9uX2NoX2VuZCA9IENDRE47CisJZWxzZQorCQlkbWFfY29tbW9uX2NoX2VuZCA9IENDRk47CisKKwlwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG9tYXBfc3lzdGVtX2RtYV9wbGF0X2luZm8pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXApIHsKKwkJcHJfZXJyKCIlczogVW5hYmxlIHRvIGFsbG9jYXRlIHBkYXRhIGZvciAlczolc1xuIiwKKwkJCV9fZnVuY19fLCBuYW1lLCBvaC0+bmFtZSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXAtPmRtYV9hdHRyCQk9IChzdHJ1Y3Qgb21hcF9kbWFfZGV2X2F0dHIgKilvaC0+ZGV2X2F0dHI7CisJcC0+ZGlzYWJsZV9pcnFfbGNoCT0gb21hcDJfZGlzYWJsZV9pcnFfbGNoOworCXAtPnNob3dfZG1hX2NhcHMJPSBvbWFwMl9zaG93X2RtYV9jYXBzOworCXAtPmNsZWFyX2RtYQkJPSBvbWFwMl9jbGVhcl9kbWE7CisJcC0+ZG1hX3dyaXRlCQk9IGRtYV93cml0ZTsKKwlwLT5kbWFfcmVhZAkJPSBkbWFfcmVhZDsKKworCXAtPmNsZWFyX2xjaF9yZWdzCT0gTlVMTDsKKworCXAtPmVycmF0YQkJPSBjb25maWd1cmVfZG1hX2VycmF0YSgpOworCisJb2QgPSBvbWFwX2RldmljZV9idWlsZChuYW1lLCAwLCBvaCwgcCwgc2l6ZW9mKCpwKSwKKwkJCW9tYXAyX2RtYV9sYXRlbmN5LCBBUlJBWV9TSVpFKG9tYXAyX2RtYV9sYXRlbmN5KSwgMCk7CisJa2ZyZWUocCk7CisJaWYgKElTX0VSUihvZCkpIHsKKwkJcHJfZXJyKCIlczogQ2FudCBidWlsZCBvbWFwX2RldmljZSBmb3IgJXM6JXMuXG4iLAorCQkJX19mdW5jX18sIG5hbWUsIG9oLT5uYW1lKTsKKwkJcmV0dXJuIElTX0VSUihvZCk7CisJfQorCisJbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKCZvZC0+cGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghbWVtKSB7CisJCWRldl9lcnIoJm9kLT5wZGV2LmRldiwgIiVzOiBubyBtZW0gcmVzb3VyY2VcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWRtYV9iYXNlID0gaW9yZW1hcChtZW0tPnN0YXJ0LCByZXNvdXJjZV9zaXplKG1lbSkpOworCWlmICghZG1hX2Jhc2UpIHsKKwkJZGV2X2Vycigmb2QtPnBkZXYuZGV2LCAiJXM6IGlvcmVtYXAgZmFpbFxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlkID0gb2gtPmRldl9hdHRyOworCWQtPmNoYW4gPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgb21hcF9kbWFfbGNoKSAqCisJCQkJCShkLT5sY2hfY291bnQpLCBHRlBfS0VSTkVMKTsKKworCWlmICghZC0+Y2hhbikgeworCQlkZXZfZXJyKCZvZC0+cGRldi5kZXYsICIlczoga3phbGxvYyBmYWlsXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2luaXQgb21hcDJfc3lzdGVtX2RtYV9pbml0KHZvaWQpCit7CisJcmV0dXJuIG9tYXBfaHdtb2RfZm9yX2VhY2hfYnlfY2xhc3MoImRtYSIsCisJCQlvbWFwMl9zeXN0ZW1fZG1hX2luaXRfZGV2LCBOVUxMKTsKK30KK2FyY2hfaW5pdGNhbGwob21hcDJfc3lzdGVtX2RtYV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvZHBsbDN4eHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvZHBsbDN4eHguYwppbmRleCBlZDhkMzMwLi5mNzcwMjJiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2RwbGwzeHh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9kcGxsM3h4eC5jCkBAIC0yNiwxNSArMjYsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsa2Rldi5oPgogCiAjaW5jbHVkZSA8cGxhdC9jcHUuaD4KICNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL2Nsa2Rldi5oPgogCiAjaW5jbHVkZSAiY2xvY2suaCIKLSNpbmNsdWRlICJwcm0uaCIKLSNpbmNsdWRlICJwcm0tcmVnYml0cy0zNHh4LmgiCi0jaW5jbHVkZSAiY20uaCIKKyNpbmNsdWRlICJjbTJ4eHhfM3h4eC5oIgogI2luY2x1ZGUgImNtLXJlZ2JpdHMtMzR4eC5oIgogCiAvKiBDTV9BVVRPSURMRV9QTEwqLkFVVE9fKiBiaXQgdmFsdWVzICovCkBAIC0yMjUsOSArMjIzLDMzIEBACiB9CiAKIC8qKgotICogbG9va3VwX2Rjb19zZGRpdiAtICBTZXQgai10eXBlIERQTEw0IGNvbXBlbnNhdGlvbiB2YXJpYWJsZXMKKyAqIF9sb29rdXBfZGNvIC0gTG9va3VwIERDTyB1c2VkIGJ5IGotdHlwZSBEUExMCiAgKiBAY2xrOiBwb2ludGVyIHRvIGEgRFBMTCBzdHJ1Y3QgY2xrCiAgKiBAZGNvOiBkaWdpdGFsIGNvbnRyb2wgb3NjaWxsYXRvciBzZWxlY3RvcgorICogQG06IERQTEwgbXVsdGlwbGllciB0byBzZXQKKyAqIEBuOiBEUExMIGRpdmlkZXIgdG8gc2V0CisgKgorICogU2VlIDM2eHggVFJNIHNlY3Rpb24gMy41LjMuMy4zLjIgIlR5cGUgQiBEUExMIChMb3ctSml0dGVyKSIKKyAqCisgKiBYWFggVGhpcyBjb2RlIGlzIG5vdCBuZWVkZWQgZm9yIDM0MzAvQU0zNXh4OyBjYW4gaXQgYmUgb3B0aW1pemVkCisgKiBvdXQgaW4gbm9uLW11bHRpLU9NQVAgYnVpbGRzIGZvciB0aG9zZSBjaGlwcz8KKyAqLworc3RhdGljIHZvaWQgX2xvb2t1cF9kY28oc3RydWN0IGNsayAqY2xrLCB1OCAqZGNvLCB1MTYgbSwgdTggbikKK3sKKwl1bnNpZ25lZCBsb25nIGZpbnQsIGNsa2lucDsgLyogd2F0Y2ggb3V0IGZvciBvdmVyZmxvdyAqLworCisJY2xraW5wID0gY2xrLT5wYXJlbnQtPnJhdGU7CisJZmludCA9IChjbGtpbnAgLyBuKSAqIG07CisKKwlpZiAoZmludCA8IDEwMDAwMDAwMDApCisJCSpkY28gPSAyOworCWVsc2UKKwkJKmRjbyA9IDQ7Cit9CisKKy8qKgorICogX2xvb2t1cF9zZGRpdiAtIENhbGN1bGF0ZSBzaWdtYSBkZWx0YSBkaXZpZGVyIGZvciBqLXR5cGUgRFBMTAorICogQGNsazogcG9pbnRlciB0byBhIERQTEwgc3RydWN0IGNsawogICogQHNkX2RpdjogdGFyZ2V0IHNpZ21hLWRlbHRhIGRpdmlkZXIKICAqIEBtOiBEUExMIG11bHRpcGxpZXIgdG8gc2V0CiAgKiBAbjogRFBMTCBkaXZpZGVyIHRvIHNldApAQCAtMjM3LDE5ICsyNTksMTMgQEAKICAqIFhYWCBUaGlzIGNvZGUgaXMgbm90IG5lZWRlZCBmb3IgMzQzMC9BTTM1eHg7IGNhbiBpdCBiZSBvcHRpbWl6ZWQKICAqIG91dCBpbiBub24tbXVsdGktT01BUCBidWlsZHMgZm9yIHRob3NlIGNoaXBzPwogICovCi1zdGF0aWMgdm9pZCBsb29rdXBfZGNvX3NkZGl2KHN0cnVjdCBjbGsgKmNsaywgdTggKmRjbywgdTggKnNkX2RpdiwgdTE2IG0sCi0JCQkgICAgIHU4IG4pCitzdGF0aWMgdm9pZCBfbG9va3VwX3NkZGl2KHN0cnVjdCBjbGsgKmNsaywgdTggKnNkX2RpdiwgdTE2IG0sIHU4IG4pCiB7Ci0JdW5zaWduZWQgbG9uZyBmaW50LCBjbGtpbnAsIHNkOyAvKiB3YXRjaCBvdXQgZm9yIG92ZXJmbG93ICovCisJdW5zaWduZWQgbG9uZyBjbGtpbnAsIHNkOyAvKiB3YXRjaCBvdXQgZm9yIG92ZXJmbG93ICovCiAJaW50IG1vZDEsIG1vZDI7CiAKIAljbGtpbnAgPSBjbGstPnBhcmVudC0+cmF0ZTsKLQlmaW50ID0gKGNsa2lucCAvIG4pICogbTsKIAotCWlmIChmaW50IDwgMTAwMDAwMDAwMCkKLQkJKmRjbyA9IDI7Ci0JZWxzZQotCQkqZGNvID0gNDsKIAkvKgogCSAqIHRhcmdldCBzaWdtYS1kZWx0YSB0byBuZWFyIDI1ME1IegogCSAqIHNkID0gY2VpbFsobS8obisxKSkgKiAoY2xraW5wX01IeiAvIDI1MCldCkBAIC0yNzgsNiArMjk0LDcgQEAKIHN0YXRpYyBpbnQgb21hcDNfbm9uY29yZV9kcGxsX3Byb2dyYW0oc3RydWN0IGNsayAqY2xrLCB1MTYgbSwgdTggbiwgdTE2IGZyZXFzZWwpCiB7CiAJc3RydWN0IGRwbGxfZGF0YSAqZGQgPSBjbGstPmRwbGxfZGF0YTsKKwl1OCBkY28sIHNkX2RpdjsKIAl1MzIgdjsKIAogCS8qIDM0MzAgRVMyIFRSTTogNC43LjYuOSBEUExMIFByb2dyYW1taW5nIFNlcXVlbmNlICovCkBAIC0zMDAsMTggKzMxNywxNiBAQAogCXYgfD0gbSA8PCBfX2ZmcyhkZC0+bXVsdF9tYXNrKTsKIAl2IHw9IChuIC0gMSkgPDwgX19mZnMoZGQtPmRpdjFfbWFzayk7CiAKLQkvKgotCSAqIFhYWCBUaGlzIGNvZGUgaXMgbm90IG5lZWRlZCBmb3IgMzQzMC9BTTM1WFg7IGNhbiBpdCBiZSBvcHRpbWl6ZWQKLQkgKiBvdXQgaW4gbm9uLW11bHRpLU9NQVAgYnVpbGRzIGZvciB0aG9zZSBjaGlwcz8KLQkgKi8KLQlpZiAoKGRkLT5mbGFncyAmIERQTExfSl9UWVBFKSAmJiAhKGRkLT5mbGFncyAmIERQTExfTk9fRENPX1NFTCkpIHsKLQkJdTggZGNvLCBzZF9kaXY7Ci0JCWxvb2t1cF9kY29fc2RkaXYoY2xrLCAmZGNvLCAmc2RfZGl2LCBtLCBuKTsKLQkJLyogWFhYIFRoaXMgcHJvYmFibHkgd2lsbCBuZWVkIHJldmlzaW9uIGZvciBPTUFQNCAqLwotCQl2ICY9IH4oT01BUDM2MzBfUEVSSVBIX0RQTExfRENPX1NFTF9NQVNLCi0JCQl8IE9NQVAzNjMwX1BFUklQSF9EUExMX1NEX0RJVl9NQVNLKTsKLQkJdiB8PSBkY28gPDwgX19mZnMoT01BUDM2MzBfUEVSSVBIX0RQTExfRENPX1NFTF9NQVNLKTsKLQkJdiB8PSBzZF9kaXYgPDwgX19mZnMoT01BUDM2MzBfUEVSSVBIX0RQTExfU0RfRElWX01BU0spOworCS8qIENvbmZpZ3VyZSBkY28gYW5kIHNkX2RpdiBmb3IgZHBsbHMgdGhhdCBoYXZlIHRoZXNlIGZpZWxkcyAqLworCWlmIChkZC0+ZGNvX21hc2spIHsKKwkJX2xvb2t1cF9kY28oY2xrLCAmZGNvLCBtLCBuKTsKKwkJdiAmPSB+KGRkLT5kY29fbWFzayk7CisJCXYgfD0gZGNvIDw8IF9fZmZzKGRkLT5kY29fbWFzayk7CisJfQorCWlmIChkZC0+c2RkaXZfbWFzaykgeworCQlfbG9va3VwX3NkZGl2KGNsaywgJnNkX2RpdiwgbSwgbik7CisJCXYgJj0gfihkZC0+c2RkaXZfbWFzayk7CisJCXYgfD0gc2RfZGl2IDw8IF9fZmZzKGRkLT5zZGRpdl9tYXNrKTsKIAl9CiAKIAlfX3Jhd193cml0ZWwodiwgZGQtPm11bHRfZGl2MV9yZWcpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9kc3AuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvZHNwLmMKaW5kZXggNmZlZWVhZS4uOTExY2QyZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9kc3AuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2RzcC5jCkBAIC0xMSw5ICsxMSwxNiBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAorLyoKKyAqIFhYWCBUaGUgZnVuY3Rpb24gcG9pbnRlcnMgdG8gdGhlIFBSTS9DTSBmdW5jdGlvbnMgYXJlIGluY29ycmVjdCBhbmQKKyAqIHNob3VsZCBiZSByZW1vdmVkLiAgTm8gZGV2aWNlIGRyaXZlciBzaG91bGQgYmUgY2hhbmdpbmcgUFJNL0NNIGJpdHMKKyAqIGRpcmVjdGx5OyB0aGF0J3MgYSBsYXllcmluZyB2aW9sYXRpb24gLS0gdGhvc2UgYml0cyBhcmUgdGhlIHJlc3BvbnNpYmlsaXR5CisgKiBvZiB0aGUgT01BUCBQTSBjb3JlIGNvZGUuCisgKi8KKwogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgInBybS5oIgotI2luY2x1ZGUgImNtLmgiCisjaW5jbHVkZSAiY20yeHh4XzN4eHguaCIKKyNpbmNsdWRlICJwcm0yeHh4XzN4eHguaCIKICNpZmRlZiBDT05GSUdfQlJJREdFX0RWRlMKICNpbmNsdWRlIDxwbGF0L29tYXAtcG0uaD4KICNlbmRpZgpAQCAtMzEsMTIgKzM4LDEyIEBACiAJLmNwdV9zZXRfZnJlcSA9IG9tYXBfcG1fY3B1X3NldF9mcmVxLAogCS5jcHVfZ2V0X2ZyZXEgPSBvbWFwX3BtX2NwdV9nZXRfZnJlcSwKICNlbmRpZgotCS5kc3BfcHJtX3JlYWQgPSBwcm1fcmVhZF9tb2RfcmVnLAotCS5kc3BfcHJtX3dyaXRlID0gcHJtX3dyaXRlX21vZF9yZWcsCi0JLmRzcF9wcm1fcm13X2JpdHMgPSBwcm1fcm13X21vZF9yZWdfYml0cywKLQkuZHNwX2NtX3JlYWQgPSBjbV9yZWFkX21vZF9yZWcsCi0JLmRzcF9jbV93cml0ZSA9IGNtX3dyaXRlX21vZF9yZWcsCi0JLmRzcF9jbV9ybXdfYml0cyA9IGNtX3Jtd19tb2RfcmVnX2JpdHMsCisJLmRzcF9wcm1fcmVhZCA9IG9tYXAyX3BybV9yZWFkX21vZF9yZWcsCisJLmRzcF9wcm1fd3JpdGUgPSBvbWFwMl9wcm1fd3JpdGVfbW9kX3JlZywKKwkuZHNwX3BybV9ybXdfYml0cyA9IG9tYXAyX3BybV9ybXdfbW9kX3JlZ19iaXRzLAorCS5kc3BfY21fcmVhZCA9IG9tYXAyX2NtX3JlYWRfbW9kX3JlZywKKwkuZHNwX2NtX3dyaXRlID0gb21hcDJfY21fd3JpdGVfbW9kX3JlZywKKwkuZHNwX2NtX3Jtd19iaXRzID0gb21hcDJfY21fcm13X21vZF9yZWdfYml0cywKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IG9tYXBfZHNwX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvZ3Bpby5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDEzZGUxOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvZ3Bpby5jCkBAIC0wLDAgKzEsMTA0IEBACisvKgorICogT01BUDIrIHNwZWNpZmljIGdwaW8gaW5pdGlhbGl6YXRpb24KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkIC0gaHR0cDovL3d3dy50aS5jb20vCisgKgorICogQXV0aG9yOgorICoJQ2hhcnVsYXRoYSBWIDxjaGFydUB0aS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHZlcnNpb24gMi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgImFzIGlzIiBXSVRIT1VUIEFOWSBXQVJSQU5UWSBvZiBhbnkKKyAqIGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkKKyAqIG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisKKyNpbmNsdWRlIDxwbGF0L29tYXBfaHdtb2QuaD4KKyNpbmNsdWRlIDxwbGF0L29tYXBfZGV2aWNlLmg+CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9kZXZpY2VfcG1fbGF0ZW5jeSBvbWFwX2dwaW9fbGF0ZW5jeVtdID0geworCVswXSA9IHsKKwkJLmRlYWN0aXZhdGVfZnVuYyA9IG9tYXBfZGV2aWNlX2lkbGVfaHdtb2RzLAorCQkuYWN0aXZhdGVfZnVuYyAgID0gb21hcF9kZXZpY2VfZW5hYmxlX2h3bW9kcywKKwkJLmZsYWdzCQkgPSBPTUFQX0RFVklDRV9MQVRFTkNZX0FVVE9fQURKVVNULAorCX0sCit9OworCitzdGF0aWMgaW50IG9tYXAyX2dwaW9fZGV2X2luaXQoc3RydWN0IG9tYXBfaHdtb2QgKm9oLCB2b2lkICp1bnVzZWQpCit7CisJc3RydWN0IG9tYXBfZGV2aWNlICpvZDsKKwlzdHJ1Y3Qgb21hcF9ncGlvX3BsYXRmb3JtX2RhdGEgKnBkYXRhOworCXN0cnVjdCBvbWFwX2dwaW9fZGV2X2F0dHIgKmRldl9hdHRyOworCWNoYXIgKm5hbWUgPSAib21hcF9ncGlvIjsKKwlpbnQgaWQ7CisKKwkvKgorCSAqIGV4dHJhY3QgdGhlIGRldmljZSBpZCBmcm9tIG5hbWUgZmllbGQgYXZhaWxhYmxlIGluIHRoZQorCSAqIGh3bW9kIGRhdGFiYXNlIGFuZCB1c2UgdGhlIHNhbWUgZm9yIGNvbnN0cnVjdGluZyBpZHMgZm9yCisJICogZ3BpbyBkZXZpY2VzLgorCSAqIENBVVRJT046IE1ha2Ugc3VyZSB0aGUgbmFtZSBpbiB0aGUgaHdtb2QgZGF0YWJhc2UgZG9lcworCSAqIG5vdCBjaGFuZ2UuIElmIGNoYW5nZWQsIG1ha2UgY29ycmVzcG9uZGluZyBjaGFuZ2UgaGVyZQorCSAqIG9yIG1ha2UgdXNlIG9mIHN0YXRpYyB2YXJpYWJsZSBtZWNoYW5pc20gdG8gaGFuZGxlIHRoaXMuCisJICovCisJc3NjYW5mKG9oLT5uYW1lLCAiZ3BpbyVkIiwgJmlkKTsKKworCXBkYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG9tYXBfZ3Bpb19wbGF0Zm9ybV9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwZGF0YSkgeworCQlwcl9lcnIoImdwaW8lZDogTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkXG4iLCBpZCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWRldl9hdHRyID0gKHN0cnVjdCBvbWFwX2dwaW9fZGV2X2F0dHIgKilvaC0+ZGV2X2F0dHI7CisJcGRhdGEtPmJhbmtfd2lkdGggPSBkZXZfYXR0ci0+YmFua193aWR0aDsKKwlwZGF0YS0+ZGJja19mbGFnID0gZGV2X2F0dHItPmRiY2tfZmxhZzsKKwlwZGF0YS0+dmlydHVhbF9pcnFfc3RhcnQgPSBJSF9HUElPX0JBU0UgKyAzMiAqIChpZCAtIDEpOworCisJc3dpdGNoIChvaC0+Y2xhc3MtPnJldikgeworCWNhc2UgMDoKKwljYXNlIDE6CisJCXBkYXRhLT5iYW5rX3R5cGUgPSBNRVRIT0RfR1BJT18yNFhYOworCQlicmVhazsKKwljYXNlIDI6CisJCXBkYXRhLT5iYW5rX3R5cGUgPSBNRVRIT0RfR1BJT180NFhYOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlXQVJOKDEsICJJbnZhbGlkIGdwaW8gYmFua190eXBlXG4iKTsKKwkJa2ZyZWUocGRhdGEpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlvZCA9IG9tYXBfZGV2aWNlX2J1aWxkKG5hbWUsIGlkIC0gMSwgb2gsIHBkYXRhLAorCQkJCXNpemVvZigqcGRhdGEpLAlvbWFwX2dwaW9fbGF0ZW5jeSwKKwkJCQlBUlJBWV9TSVpFKG9tYXBfZ3Bpb19sYXRlbmN5KSwKKwkJCQlmYWxzZSk7CisJa2ZyZWUocGRhdGEpOworCisJaWYgKElTX0VSUihvZCkpIHsKKwkJV0FSTigxLCAiQ2FudCBidWlsZCBvbWFwX2RldmljZSBmb3IgJXM6JXMuXG4iLAorCQkJCQluYW1lLCBvaC0+bmFtZSk7CisJCXJldHVybiBQVFJfRVJSKG9kKTsKKwl9CisKKwlncGlvX2JhbmtfY291bnQrKzsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIGdwaW9faW5pdCBuZWVkcyB0byBiZSBkb25lIGJlZm9yZQorICogbWFjaGluZV9pbml0IGZ1bmN0aW9ucyBhY2Nlc3MgZ3BpbyBBUElzLgorICogSGVuY2UgZ3Bpb19pbml0IGlzIGEgcG9zdGNvcmVfaW5pdGNhbGwuCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IG9tYXAyX2dwaW9faW5pdCh2b2lkKQoreworCXJldHVybiBvbWFwX2h3bW9kX2Zvcl9lYWNoX2J5X2NsYXNzKCJncGlvIiwgb21hcDJfZ3Bpb19kZXZfaW5pdCwKKwkJCQkJCU5VTEwpOworfQorcG9zdGNvcmVfaW5pdGNhbGwob21hcDJfZ3Bpb19pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy1uYW5kLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2dwbWMtbmFuZC5jCmluZGV4IDcyMjIwOTYuLjJiYjI5YzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy1uYW5kLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLW5hbmQuYwpAQCAtNDEsNyArNDEsNyBAQAogCQlyZXR1cm4gMDsKIAogCW1lbXNldCgmdCwgMCwgc2l6ZW9mKHQpKTsKLQl0LnN5bmNfY2xrID0gZ3BtY19yb3VuZF9uc190b190aWNrcyhncG1jX25hbmRfZGF0YS0+Z3BtY190LT5zeW5jX2Nsayk7CisJdC5zeW5jX2NsayA9IGdwbWNfbmFuZF9kYXRhLT5ncG1jX3QtPnN5bmNfY2xrOwogCXQuY3Nfb24gPSBncG1jX3JvdW5kX25zX3RvX3RpY2tzKGdwbWNfbmFuZF9kYXRhLT5ncG1jX3QtPmNzX29uKTsKIAl0LmFkdl9vbiA9IGdwbWNfcm91bmRfbnNfdG9fdGlja3MoZ3BtY19uYW5kX2RhdGEtPmdwbWNfdC0+YWR2X29uKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLW9uZW5hbmQuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy1vbmVuYW5kLmMKaW5kZXggN2JiNjkyMi4uM2E3ZDI1ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLW9uZW5hbmQuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2dwbWMtb25lbmFuZC5jCkBAIC0xNzMsOCArMTczLDE3IEBACiAJfQogCiAJc3dpdGNoIChmcmVxKSB7CisJY2FzZSAxMDQ6CisJCW1pbl9ncG1jX2Nsa19wZXJpb2QgPSA5NjAwOyAvKiAxMDQgTUh6ICovCisJCXRfY2VzICAgPSAzOworCQl0X2F2ZHMgID0gNDsKKwkJdF9hdmRoICA9IDI7CisJCXRfYWNoICAgPSAzOworCQl0X2FhdmRoID0gNjsKKwkJdF9yZHlvICA9IDk7CisJCWJyZWFrOwogCWNhc2UgODM6Ci0JCW1pbl9ncG1jX2Nsa19wZXJpb2QgPSAxMjsgLyogODMgTUh6ICovCisJCW1pbl9ncG1jX2Nsa19wZXJpb2QgPSAxMjAwMDsgLyogODMgTUh6ICovCiAJCXRfY2VzICAgPSA1OwogCQl0X2F2ZHMgID0gNDsKIAkJdF9hdmRoICA9IDI7CkBAIC0xODMsNyArMTkyLDcgQEAKIAkJdF9yZHlvICA9IDk7CiAJCWJyZWFrOwogCWNhc2UgNjY6Ci0JCW1pbl9ncG1jX2Nsa19wZXJpb2QgPSAxNTsgLyogNjYgTUh6ICovCisJCW1pbl9ncG1jX2Nsa19wZXJpb2QgPSAxNTAwMDsgLyogNjYgTUh6ICovCiAJCXRfY2VzICAgPSA2OwogCQl0X2F2ZHMgID0gNTsKIAkJdF9hdmRoICA9IDI7CkBAIC0xOTIsNyArMjAxLDcgQEAKIAkJdF9yZHlvICA9IDExOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQltaW5fZ3BtY19jbGtfcGVyaW9kID0gMTg7IC8qIDU0IE1IeiAqLworCQltaW5fZ3BtY19jbGtfcGVyaW9kID0gMTg1MDA7IC8qIDU0IE1IeiAqLwogCQl0X2NlcyAgID0gNzsKIAkJdF9hdmRzICA9IDc7CiAJCXRfYXZkaCAgPSA3OwpAQCAtMjcxLDggKzI4MCw4IEBACiAJCXQud3JfY3ljbGUgID0gdC5yZF9jeWNsZTsKIAkJaWYgKGNwdV9pc19vbWFwMzR4eCgpKSB7CiAJCQl0LndyX2RhdGFfbXV4X2J1cyA9IGdwbWNfdGlja3NfdG9fbnMoZmNsa19vZmZzZXQgKwotCQkJCQlncG1jX25zX3RvX3RpY2tzKG1pbl9ncG1jX2Nsa19wZXJpb2QgKwotCQkJCQl0X3JkeW8pKTsKKwkJCQkJZ3BtY19wc190b190aWNrcyhtaW5fZ3BtY19jbGtfcGVyaW9kICsKKwkJCQkJdF9yZHlvICogMTAwMCkpOwogCQkJdC53cl9hY2Nlc3MgPSB0LmFjY2VzczsKIAkJfQogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2dwbWMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy5jCmluZGV4IGY0NjkzM2IuLjFiN2IzZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy5jCkBAIC0xNjgsNiArMTY4LDE2IEBACiAJcmV0dXJuICh0aW1lX25zICogMTAwMCArIHRpY2tfcHMgLSAxKSAvIHRpY2tfcHM7CiB9CiAKK3Vuc2lnbmVkIGludCBncG1jX3BzX3RvX3RpY2tzKHVuc2lnbmVkIGludCB0aW1lX3BzKQoreworCXVuc2lnbmVkIGxvbmcgdGlja19wczsKKworCS8qIENhbGN1bGF0ZSBpbiBwaWNvc2VjcyB0byB5aWVsZCBtb3JlIGV4YWN0IHJlc3VsdHMgKi8KKwl0aWNrX3BzID0gZ3BtY19nZXRfZmNsa19wZXJpb2QoKTsKKworCXJldHVybiAodGltZV9wcyArIHRpY2tfcHMgLSAxKSAvIHRpY2tfcHM7Cit9CisKIHVuc2lnbmVkIGludCBncG1jX3RpY2tzX3RvX25zKHVuc2lnbmVkIGludCB0aWNrcykKIHsKIAlyZXR1cm4gdGlja3MgKiBncG1jX2dldF9mY2xrX3BlcmlvZCgpIC8gMTAwMDsKQEAgLTIzNSw3ICsyNDUsNyBAQAogCWludCBkaXY7CiAJdTMyIGw7CiAKLQlsID0gc3luY19jbGsgKiAxMDAwICsgKGdwbWNfZ2V0X2ZjbGtfcGVyaW9kKCkgLSAxKTsKKwlsID0gc3luY19jbGsgKyAoZ3BtY19nZXRfZmNsa19wZXJpb2QoKSAtIDEpOwogCWRpdiA9IGwgLyBncG1jX2dldF9mY2xrX3BlcmlvZCgpOwogCWlmIChkaXYgPiA0KQogCQlyZXR1cm4gLTE7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUwppbmRleCAwNmU2NGUxLi5iZWZhMzIxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKQEAgLTM4LDQxICszOCwyNyBAQAogICovCiAKICNpZmRlZiBNVUxUSV9PTUFQMgotCQkucHVzaHNlY3Rpb24gLmRhdGEKLW9tYXBfaXJxX2Jhc2U6CS53b3JkCTAKLQkJLnBvcHNlY3Rpb24KIAotCQkvKiBDb25maWd1cmUgdGhlIGludGVycnVwdCBiYXNlIG9uIHRoZSBmaXJzdCBpbnRlcnJ1cHQgKi8KKy8qCisgKiBXZSB1c2UgX19nbHVlIHRvIGF2b2lkIGVycm9ycyB3aXRoIG11bHRpcGxlIGRlZmluaXRpb25zIG9mCisgKiAuZ2xvYmwgb21hcF9pcnFfYmFzZSBhcyBpdCdzIGluY2x1ZGVkIGZyb20gZW50cnktYXJtdi5TIGJ1dCBub3QKKyAqIGZyb20gZW50cnktY29tbW9uLlMuCisgKi8KKyNpZmRlZiBfX2dsdWUKKwkJLnB1c2hzZWN0aW9uIC5kYXRhCisJCS5nbG9ibAlvbWFwX2lycV9iYXNlCitvbWFwX2lycV9iYXNlOgorCQkud29yZAkwCisJCS5wb3BzZWN0aW9uCisjZW5kaWYKKworCQkvKgorCQkgKiBDb25maWd1cmUgdGhlIGludGVycnVwdCBiYXNlIG9uIHRoZSBmaXJzdCBpbnRlcnJ1cHQuCisJCSAqIFNlZSBhbHNvIG9tYXBfaXJxX2Jhc2VfaW5pdCBmb3Igc2V0dGluZyBvbWFwX2lycV9iYXNlLgorCQkgKi8KIAkJLm1hY3JvICBnZXRfaXJxbnJfcHJlYW1ibGUsIGJhc2UsIHRtcAotOToKIAkJbGRyCVxiYXNlLCA9b21hcF9pcnFfYmFzZQlAIGlycSBiYXNlIGFkZHJlc3MKIAkJbGRyCVxiYXNlLCBbXGJhc2UsICMwXQlAIGlycSBiYXNlIHZhbHVlCi0JCWNtcAlcYmFzZSwgIzAJCUAgYWxyZWFkeSBjb25maWd1cmVkPwotCQlibmUJOTk5N2YJCQlAIG5vdGhpbmcgdG8gZG8KLQotCQltcmMJcDE1LCAwLCBcdG1wLCBjMCwgYzAsIDAJQCBnZXQgcHJvY2Vzc29yIHJldmlzaW9uCi0JCWFuZAlcdG1wLCBcdG1wLCAjMHgwMDBmMDAwMAlAIG9ubHkgY2hlY2sgYXJjaGl0ZWN0dXJlCi0JCWNtcAlcdG1wLCAjMHgwMDA3MDAwMAlAIGlzIHY2PwotCQliZXEJMjQwMGYJCQlAIGZvdW5kIHY2IHNvIGl0J3Mgb21hcDI0eHgKLQkJbXJjCXAxNSwgMCwgXHRtcCwgYzAsIGMwLCAwCUAgZ2V0IHByb2Nlc3NvciByZXZpc2lvbgotCQlhbmQJXHRtcCwgXHRtcCwgIzB4MDAwMDAwZjAJQCBjaGVjayBjb3J0ZXggOCBvciA5Ci0JCWNtcAlcdG1wLCAjMHgwMDAwMDA4MAlAIGNvcnRleCBBLTg/Ci0JCWJlcQkzNDAwZgkJCUAgZm91bmQgQS04IHNvIGl0J3Mgb21hcDM0eHgKLQkJY21wCVx0bXAsICMweDAwMDAwMDkwCUAgY29ydGV4IEEtOT8KLQkJYmVxCTQ0MDBmCQkJQCBmb3VuZCBBLTkgc28gaXQncyBvbWFwNDR4eAotMjQwMDoJCWxkcglcYmFzZSwgPU9NQVAyX0lSUV9CQVNFCi0JCWxkcglcdG1wLCA9b21hcF9pcnFfYmFzZQotCQlzdHIJXGJhc2UsIFtcdG1wLCAjMF0KLQkJYgk5YgotMzQwMDoJCWxkcglcYmFzZSwgPU9NQVAzX0lSUV9CQVNFCi0JCWxkcglcdG1wLCA9b21hcF9pcnFfYmFzZQotCQlzdHIJXGJhc2UsIFtcdG1wLCAjMF0KLQkJYgk5YgotNDQwMDoJCWxkcglcYmFzZSwgPU9NQVA0X0lSUV9CQVNFCi0JCWxkcglcdG1wLCA9b21hcF9pcnFfYmFzZQotCQlzdHIJXGJhc2UsIFtcdG1wLCAjMF0KLQkJYgk5YgotOTk5NzoKIAkJLmVuZG0KIAogCQkvKiBDaGVjayB0aGUgcGVuZGluZyBpbnRlcnJ1cHRzLiBOb3RlIHRoYXQgYmFzZSBhbHJlYWR5IHNldCAqLwpAQCAtMTA1LDYgKzkxLDM1IEBACiA5OTk5OgogCQkuZW5kbQogCisjaWZkZWYgQ09ORklHX1NNUAorCQkvKiBXZSBhc3N1bWUgdGhhdCBpcnFzdGF0ICh0aGUgcmF3IHZhbHVlIG9mIHRoZSBJUlEgYWNrbm93bGVkZ2UKKwkJICogcmVnaXN0ZXIpIGlzIHByZXNlcnZlZCBmcm9tIHRoZSBtYWNybyBhYm92ZS4KKwkJICogSWYgdGhlcmUgaXMgYW4gSVBJLCB3ZSBpbW1lZGlhdGVseSBzaWduYWwgZW5kIG9mIGludGVycnVwdAorCQkgKiBvbiB0aGUgY29udHJvbGxlciwgc2luY2UgdGhpcyByZXF1aXJlcyB0aGUgb3JpZ2luYWwgaXJxc3RhdAorCQkgKiB2YWx1ZSB3aGljaCB3ZSB3b24ndCBlYXNpbHkgYmUgYWJsZSB0byByZWNyZWF0ZSBsYXRlci4KKwkJICovCisKKwkJLm1hY3JvIHRlc3RfZm9yX2lwaSwgaXJxbnIsIGlycXN0YXQsIGJhc2UsIHRtcAorCQliaWMJXGlycW5yLCBcaXJxc3RhdCwgIzB4MWMwMAorCQljbXAJXGlycW5yLCAjMTYKKwkJaXQJY2MKKwkJc3RyY2MJXGlycXN0YXQsIFtcYmFzZSwgI0dJQ19DUFVfRU9JXQorCQlpdAljcworCQljbXBjcwlcaXJxbnIsIFxpcnFucgorCQkuZW5kbQorCisJCS8qIEFzIGFib3ZlLCB0aGlzIGFzc3VtZXMgdGhhdCBpcnFzdGF0IGFuZCBiYXNlIGFyZSBwcmVzZXJ2ZWQgKi8KKworCQkubWFjcm8gdGVzdF9mb3JfbHRpcnEsIGlycW5yLCBpcnFzdGF0LCBiYXNlLCB0bXAKKwkJYmljCVxpcnFuciwgXGlycXN0YXQsICMweDFjMDAKKwkJbW92IAlcdG1wLCAjMAorCQljbXAJXGlycW5yLCAjMjkKKwkJaXR0CWVxCisJCW1vdmVxCVx0bXAsICMxCisJCXN0cmVxCVxpcnFzdGF0LCBbXGJhc2UsICNHSUNfQ1BVX0VPSV0KKwkJY21wCVx0bXAsICMwCisJCS5lbmRtCisjZW5kaWYJLyogQ09ORklHX1NNUCAqLwogCiAjZWxzZQkvKiBNVUxUSV9PTUFQMiAqLwogCkBAIC0xNDEsNzQgKzE1NiwxNiBAQAogCiAKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQNAorI2RlZmluZSBIQVZFX0dFVF9JUlFOUl9QUkVBTUJMRQorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9lbnRyeS1tYWNyby1naWMuUz4KIAogCQkubWFjcm8gIGdldF9pcnFucl9wcmVhbWJsZSwgYmFzZSwgdG1wCiAJCWxkciAgICAgXGJhc2UsID1PTUFQNF9JUlFfQkFTRQogCQkuZW5kbQogCi0JCS8qCi0JCSAqIFRoZSBpbnRlcnJ1cHQgbnVtYmVyaW5nIHNjaGVtZSBpcyBkZWZpbmVkIGluIHRoZQotCQkgKiBpbnRlcnJ1cHQgY29udHJvbGxlciBzcGVjLiAgVG8gd2l0OgotCQkgKgotCQkgKiBJbnRlcnJ1cHRzIDAtMTUgYXJlIElQSQotCQkgKiAxNi0yOCBhcmUgcmVzZXJ2ZWQKLQkJICogMjktMzEgYXJlIGxvY2FsLiAgV2UgYWxsb3cgMzAgdG8gYmUgdXNlZCBmb3IgdGhlIHdhdGNoZG9nLgotCQkgKiAzMi0xMDIwIGFyZSBnbG9iYWwKLQkJICogMTAyMS0xMDIyIGFyZSByZXNlcnZlZAotCQkgKiAxMDIzIGlzICJzcHVyaW91cyIgKG5vIGludGVycnVwdCkKLQkJICoKLQkJICogRm9yIG5vdywgd2UgaWdub3JlIGFsbCBsb2NhbCBpbnRlcnJ1cHRzIHNvIG9ubHkgcmV0dXJuIGFuCi0JCSAqIGludGVycnVwdCBpZiBpdCdzIGJldHdlZW4gMzAgYW5kIDEwMjAuICBUaGUgdGVzdF9mb3JfaXBpCi0JCSAqIHJvdXRpbmUgYmVsb3cgd2lsbCBwaWNrIHVwIG9uIElQSXMuCi0JCSAqIEEgc2ltcGxlIHJlYWQgZnJvbSB0aGUgY29udHJvbGxlciB3aWxsIHRlbGwgdXMgdGhlIG51bWJlcgotCQkgKiBvZiB0aGUgaGlnaGVzdCBwcmlvcml0eSBlbmFibGVkIGludGVycnVwdC4KLQkJICogV2UgdGhlbiBqdXN0IG5lZWQgdG8gY2hlY2sgd2hldGhlciBpdCBpcyBpbiB0aGUKLQkJICogdmFsaWQgcmFuZ2UgZm9yIGFuIElSUSAoMzAtMTAyMCBpbmNsdXNpdmUpLgotCQkgKi8KLQkJLm1hY3JvICBnZXRfaXJxbnJfYW5kX2Jhc2UsIGlycW5yLCBpcnFzdGF0LCBiYXNlLCB0bXAKLQkJbGRyICAgICBcaXJxc3RhdCwgW1xiYXNlLCAjR0lDX0NQVV9JTlRBQ0tdCi0KLQkJbGRyICAgICBcdG1wLCA9MTAyMQotCi0JCWJpYyAgICAgXGlycW5yLCBcaXJxc3RhdCwgIzB4MWMwMAotCi0JCWNtcCAgICAgXGlycW5yLCAjMjkKLQkJY21wY2MgICBcaXJxbnIsIFxpcnFucgotCQljbXBuZSAgIFxpcnFuciwgXHRtcAotCQljbXBjcyAgIFxpcnFuciwgXGlycW5yCi0JCS5lbmRtCiAjZW5kaWYKKwogI2VuZGlmCS8qIE1VTFRJX09NQVAyICovCiAKLSNpZmRlZiBDT05GSUdfU01QCi0JCS8qIFdlIGFzc3VtZSB0aGF0IGlycXN0YXQgKHRoZSByYXcgdmFsdWUgb2YgdGhlIElSUSBhY2tub3dsZWRnZQotCQkgKiByZWdpc3RlcikgaXMgcHJlc2VydmVkIGZyb20gdGhlIG1hY3JvIGFib3ZlLgotCQkgKiBJZiB0aGVyZSBpcyBhbiBJUEksIHdlIGltbWVkaWF0ZWx5IHNpZ25hbCBlbmQgb2YgaW50ZXJydXB0Ci0JCSAqIG9uIHRoZSBjb250cm9sbGVyLCBzaW5jZSB0aGlzIHJlcXVpcmVzIHRoZSBvcmlnaW5hbCBpcnFzdGF0Ci0JCSAqIHZhbHVlIHdoaWNoIHdlIHdvbid0IGVhc2lseSBiZSBhYmxlIHRvIHJlY3JlYXRlIGxhdGVyLgotCQkgKi8KLQotCQkubWFjcm8gdGVzdF9mb3JfaXBpLCBpcnFuciwgaXJxc3RhdCwgYmFzZSwgdG1wCi0JCWJpYwlcaXJxbnIsIFxpcnFzdGF0LCAjMHgxYzAwCi0JCWNtcAlcaXJxbnIsICMxNgotCQlpdAljYwotCQlzdHJjYwlcaXJxc3RhdCwgW1xiYXNlLCAjR0lDX0NQVV9FT0ldCi0JCWl0CWNzCi0JCWNtcGNzCVxpcnFuciwgXGlycW5yCi0JCS5lbmRtCi0KLQkJLyogQXMgYWJvdmUsIHRoaXMgYXNzdW1lcyB0aGF0IGlycXN0YXQgYW5kIGJhc2UgYXJlIHByZXNlcnZlZCAqLwotCi0JCS5tYWNybyB0ZXN0X2Zvcl9sdGlycSwgaXJxbnIsIGlycXN0YXQsIGJhc2UsIHRtcAotCQliaWMJXGlycW5yLCBcaXJxc3RhdCwgIzB4MWMwMAotCQltb3YgCVx0bXAsICMwCi0JCWNtcAlcaXJxbnIsICMyOQotCQlpdHQJZXEKLQkJbW92ZXEJXHRtcCwgIzEKLQkJc3RyZXEJXGlycXN0YXQsIFtcYmFzZSwgI0dJQ19DUFVfRU9JXQotCQljbXAJXHRtcCwgIzAKLQkJLmVuZG0KLSNlbmRpZgkvKiBDT05GSUdfU01QICovCi0KIAkJLm1hY3JvCWlycV9wcmlvX3RhYmxlCiAJCS5lbmRtCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2luY2x1ZGUvbWFjaC9vbWFwNC1jb21tb24uaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvaW5jbHVkZS9tYWNoL29tYXA0LWNvbW1vbi5oCmluZGV4IDI3NDRkZmUuLjViMDI3MGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvaW5jbHVkZS9tYWNoL29tYXA0LWNvbW1vbi5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaW5jbHVkZS9tYWNoL29tYXA0LWNvbW1vbi5oCkBAIC0yNCw3ICsyNCw2IEBACiBleHRlcm4gdm9pZCBfX2lvbWVtICpsMmNhY2hlX2Jhc2U7CiAjZW5kaWYKIAotZXh0ZXJuIHZvaWQgX19pb21lbSAqZ2ljX2NwdV9iYXNlX2FkZHI7CiBleHRlcm4gdm9pZCBfX2lvbWVtICpnaWNfZGlzdF9iYXNlX2FkZHI7CiAKIGV4dGVybiB2b2lkIF9faW5pdCBnaWNfaW5pdF9pcnEodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2lvLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2lvLmMKaW5kZXggYTE5MzliMS4uZTY2Njg3YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pby5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaW8uYwpAQCAtMzksMTMgKzM5LDExIEBACiAjaW5jbHVkZSAiaW8uaCIKIAogI2luY2x1ZGUgPHBsYXQvb21hcC1wbS5oPgotI2luY2x1ZGUgPHBsYXQvcG93ZXJkb21haW4uaD4KLSNpbmNsdWRlICJwb3dlcmRvbWFpbnMuaCIKKyNpbmNsdWRlICJwb3dlcmRvbWFpbi5oIgogCi0jaW5jbHVkZSA8cGxhdC9jbG9ja2RvbWFpbi5oPgotI2luY2x1ZGUgImNsb2NrZG9tYWlucy5oIgotCisjaW5jbHVkZSAiY2xvY2tkb21haW4uaCIKICNpbmNsdWRlIDxwbGF0L29tYXBfaHdtb2QuaD4KKyNpbmNsdWRlIDxwbGF0L211bHRpLmg+CiAKIC8qCiAgKiBUaGUgbWFjaGluZSBzcGVjaWZpYyBjb2RlIG1heSBwcm92aWRlIHRoZSBleHRyYSBtYXBwaW5nIGJlc2lkZXMgdGhlCkBAIC0zMTEsMjQgKzMwOSw4MSBAQAogCXJldHVybiB2OwogfQogCi12b2lkIF9faW5pdCBvbWFwMl9pbml0X2NvbW1vbl9odyhzdHJ1Y3Qgb21hcF9zZHJjX3BhcmFtcyAqc2RyY19jczAsCi0JCQkJIHN0cnVjdCBvbWFwX3NkcmNfcGFyYW1zICpzZHJjX2NzMSkKK3N0YXRpYyBpbnQgX3NldF9od21vZF9wb3N0c2V0dXBfc3RhdGUoc3RydWN0IG9tYXBfaHdtb2QgKm9oLCB2b2lkICpkYXRhKQogewotCXU4IHNraXBfc2V0dXBfaWRsZSA9IDA7CisJcmV0dXJuIG9tYXBfaHdtb2Rfc2V0X3Bvc3RzZXR1cF9zdGF0ZShvaCwgKih1OCAqKWRhdGEpOworfQogCi0JcHdyZG1faW5pdChwb3dlcmRvbWFpbnNfb21hcCk7Ci0JY2xrZG1faW5pdChjbG9ja2RvbWFpbnNfb21hcCwgY2xrZG1fYXV0b2RlcHMpOwotCWlmIChjcHVfaXNfb21hcDI0MngoKSkKLQkJb21hcDI0MjBfaHdtb2RfaW5pdCgpOwotCWVsc2UgaWYgKGNwdV9pc19vbWFwMjQzeCgpKQotCQlvbWFwMjQzMF9od21vZF9pbml0KCk7CisvKgorICogSW5pdGlhbGl6ZSBhc21faXJxX2Jhc2UgZm9yIGVudHJ5LW1hY3JvLlMKKyAqLworc3RhdGljIGlubGluZSB2b2lkIG9tYXBfaXJxX2Jhc2VfaW5pdCh2b2lkKQoreworCWV4dGVybiB2b2lkIF9faW9tZW0gKm9tYXBfaXJxX2Jhc2U7CisKKyNpZmRlZiBNVUxUSV9PTUFQMgorCWlmIChjcHVfaXNfb21hcDI0eHgoKSkKKwkJb21hcF9pcnFfYmFzZSA9IE9NQVAyX0w0X0lPX0FERFJFU1MoT01BUDI0WFhfSUNfQkFTRSk7CiAJZWxzZSBpZiAoY3B1X2lzX29tYXAzNHh4KCkpCi0JCW9tYXAzeHh4X2h3bW9kX2luaXQoKTsKKwkJb21hcF9pcnFfYmFzZSA9IE9NQVAyX0w0X0lPX0FERFJFU1MoT01BUDM0WFhfSUNfQkFTRSk7CiAJZWxzZSBpZiAoY3B1X2lzX29tYXA0NHh4KCkpCi0JCW9tYXA0NHh4X2h3bW9kX2luaXQoKTsKKwkJb21hcF9pcnFfYmFzZSA9IE9NQVAyX0w0X0lPX0FERFJFU1MoT01BUDQ0WFhfR0lDX0NQVV9CQVNFKTsKKwllbHNlCisJCXByX2VycigiQ291bGQgbm90IGluaXRpYWxpemUgb21hcF9pcnFfYmFzZVxuIik7CisjZW5kaWYKK30KIAotCS8qIFRoZSBPUFAgdGFibGVzIGhhdmUgdG8gYmUgcmVnaXN0ZXJlZCBiZWZvcmUgYSBjbGsgaW5pdCAqLwotCW9tYXBfcG1faWZfZWFybHlfaW5pdChtcHVfb3BwcywgZHNwX29wcHMsIGwzX29wcHMpOwordm9pZCBfX2luaXQgb21hcDJfaW5pdF9jb21tb25faW5mcmFzdHJ1Y3R1cmUodm9pZCkKK3sKKwl1OCBwb3N0c2V0dXBfc3RhdGU7CisKKwlpZiAoY3B1X2lzX29tYXAyNDJ4KCkpIHsKKwkJb21hcDJ4eHhfcG93ZXJkb21haW5zX2luaXQoKTsKKwkJb21hcDJfY2xvY2tkb21haW5zX2luaXQoKTsKKwkJb21hcDI0MjBfaHdtb2RfaW5pdCgpOworCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAyNDN4KCkpIHsKKwkJb21hcDJ4eHhfcG93ZXJkb21haW5zX2luaXQoKTsKKwkJb21hcDJfY2xvY2tkb21haW5zX2luaXQoKTsKKwkJb21hcDI0MzBfaHdtb2RfaW5pdCgpOworCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAzNHh4KCkpIHsKKwkJb21hcDN4eHhfcG93ZXJkb21haW5zX2luaXQoKTsKKwkJb21hcDJfY2xvY2tkb21haW5zX2luaXQoKTsKKwkJb21hcDN4eHhfaHdtb2RfaW5pdCgpOworCX0gZWxzZSBpZiAoY3B1X2lzX29tYXA0NHh4KCkpIHsKKwkJb21hcDQ0eHhfcG93ZXJkb21haW5zX2luaXQoKTsKKwkJb21hcDQ0eHhfY2xvY2tkb21haW5zX2luaXQoKTsKKwkJb21hcDQ0eHhfaHdtb2RfaW5pdCgpOworCX0gZWxzZSB7CisJCXByX2VycigiQ291bGQgbm90IGluaXQgaHdtb2QgZGF0YSAtIHVua25vd24gU29DXG4iKTsKKyAgICAgICAgfQorCisJLyogU2V0IHRoZSBkZWZhdWx0IHBvc3RzZXR1cCBzdGF0ZSBmb3IgYWxsIGh3bW9kcyAqLworI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCisJcG9zdHNldHVwX3N0YXRlID0gX0hXTU9EX1NUQVRFX0lETEU7CisjZWxzZQorCXBvc3RzZXR1cF9zdGF0ZSA9IF9IV01PRF9TVEFURV9FTkFCTEVEOworI2VuZGlmCisJb21hcF9od21vZF9mb3JfZWFjaChfc2V0X2h3bW9kX3Bvc3RzZXR1cF9zdGF0ZSwgJnBvc3RzZXR1cF9zdGF0ZSk7CisKKwkvKgorCSAqIFNldCB0aGUgZGVmYXVsdCBwb3N0c2V0dXAgc3RhdGUgZm9yIHVudXN1YWwgbW9kdWxlcyAobGlrZQorCSAqIE1QVSBXRFQpLgorCSAqCisJICogVGhlIHBvc3RzZXR1cF9zdGF0ZSBpcyBub3QgYWN0dWFsbHkgdXNlZCB1bnRpbAorCSAqIG9tYXBfaHdtb2RfbGF0ZV9pbml0KCksIHNvIGJvYXJkcyB0aGF0IGRlc2lyZSBmdWxsIHdhdGNoZG9nCisJICogY292ZXJhZ2Ugb2Yga2VybmVsIGluaXRpYWxpemF0aW9uIGNhbiByZXByb2dyYW0gdGhlCisJICogcG9zdHNldHVwX3N0YXRlIGJldHdlZW4gdGhlIGNhbGxzIHRvCisJICogb21hcDJfaW5pdF9jb21tb25faW5mcmEoKSBhbmQgb21hcDJfaW5pdF9jb21tb25fZGV2aWNlcygpLgorCSAqCisJICogWFhYIGlkZWFsbHkgd2UgY291bGQgZGV0ZWN0IHdoZXRoZXIgdGhlIE1QVSBXRFQgd2FzIGN1cnJlbnRseQorCSAqIGVuYWJsZWQgaGVyZSBhbmQgbWFrZSB0aGlzIGNvbmRpdGlvbmFsCisJICovCisJcG9zdHNldHVwX3N0YXRlID0gX0hXTU9EX1NUQVRFX0RJU0FCTEVEOworCW9tYXBfaHdtb2RfZm9yX2VhY2hfYnlfY2xhc3MoIndkX3RpbWVyIiwKKwkJCQkgICAgIF9zZXRfaHdtb2RfcG9zdHNldHVwX3N0YXRlLAorCQkJCSAgICAgJnBvc3RzZXR1cF9zdGF0ZSk7CisKKwlvbWFwX3BtX2lmX2Vhcmx5X2luaXQoKTsKIAogCWlmIChjcHVfaXNfb21hcDI0MjAoKSkKIAkJb21hcDI0MjBfY2xrX2luaXQoKTsKQEAgLTMzOSwxNyArMzk0LDYxIEBACiAJZWxzZSBpZiAoY3B1X2lzX29tYXA0NHh4KCkpCiAJCW9tYXA0eHh4X2Nsa19pbml0KCk7CiAJZWxzZQotCQlwcl9lcnIoIkNvdWxkIG5vdCBpbml0IGNsb2NrIGZyYW1ld29yayAtIHVua25vd24gQ1BVXG4iKTsKKwkJcHJfZXJyKCJDb3VsZCBub3QgaW5pdCBjbG9jayBmcmFtZXdvcmsgLSB1bmtub3duIFNvQ1xuIik7Cit9CiAKK3ZvaWQgX19pbml0IG9tYXAyX2luaXRfY29tbW9uX2RldmljZXMoc3RydWN0IG9tYXBfc2RyY19wYXJhbXMgKnNkcmNfY3MwLAorCQkJCSAgICAgIHN0cnVjdCBvbWFwX3NkcmNfcGFyYW1zICpzZHJjX2NzMSkKK3sKIAlvbWFwX3NlcmlhbF9lYXJseV9pbml0KCk7CiAKLSNpZm5kZWYgQ09ORklHX1BNX1JVTlRJTUUKLQlza2lwX3NldHVwX2lkbGUgPSAxOwotI2VuZGlmCi0Jb21hcF9od21vZF9sYXRlX2luaXQoc2tpcF9zZXR1cF9pZGxlKTsKKwlvbWFwX2h3bW9kX2xhdGVfaW5pdCgpOworCiAJaWYgKGNwdV9pc19vbWFwMjR4eCgpIHx8IGNwdV9pc19vbWFwMzR4eCgpKSB7CiAJCW9tYXAyX3NkcmNfaW5pdChzZHJjX2NzMCwgc2RyY19jczEpOwogCQlfb21hcDJfaW5pdF9yZXByb2dyYW1fc2RyYygpOwogCX0KIAlncG1jX2luaXQoKTsKKworCW9tYXBfaXJxX2Jhc2VfaW5pdCgpOwogfQorCisvKgorICogTk9URTogUGxlYXNlIHVzZSBpb3JlbWFwICsgX19yYXdfcmVhZC93cml0ZSB3aGVyZSBwb3NzaWJsZSBpbnN0ZWFkIG9mIHRoZXNlCisgKi8KKwordTggb21hcF9yZWFkYih1MzIgcGEpCit7CisJcmV0dXJuIF9fcmF3X3JlYWRiKE9NQVAyX0w0X0lPX0FERFJFU1MocGEpKTsKK30KK0VYUE9SVF9TWU1CT0wob21hcF9yZWFkYik7CisKK3UxNiBvbWFwX3JlYWR3KHUzMiBwYSkKK3sKKwlyZXR1cm4gX19yYXdfcmVhZHcoT01BUDJfTDRfSU9fQUREUkVTUyhwYSkpOworfQorRVhQT1JUX1NZTUJPTChvbWFwX3JlYWR3KTsKKwordTMyIG9tYXBfcmVhZGwodTMyIHBhKQoreworCXJldHVybiBfX3Jhd19yZWFkbChPTUFQMl9MNF9JT19BRERSRVNTKHBhKSk7Cit9CitFWFBPUlRfU1lNQk9MKG9tYXBfcmVhZGwpOworCit2b2lkIG9tYXBfd3JpdGViKHU4IHYsIHUzMiBwYSkKK3sKKwlfX3Jhd193cml0ZWIodiwgT01BUDJfTDRfSU9fQUREUkVTUyhwYSkpOworfQorRVhQT1JUX1NZTUJPTChvbWFwX3dyaXRlYik7CisKK3ZvaWQgb21hcF93cml0ZXcodTE2IHYsIHUzMiBwYSkKK3sKKwlfX3Jhd193cml0ZXcodiwgT01BUDJfTDRfSU9fQUREUkVTUyhwYSkpOworfQorRVhQT1JUX1NZTUJPTChvbWFwX3dyaXRldyk7CisKK3ZvaWQgb21hcF93cml0ZWwodTMyIHYsIHUzMiBwYSkKK3sKKwlfX3Jhd193cml0ZWwodiwgT01BUDJfTDRfSU9fQUREUkVTUyhwYSkpOworfQorRVhQT1JUX1NZTUJPTChvbWFwX3dyaXRlbCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2lycS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pcnEuYwppbmRleCAzMmVlYWJlLi44NWJmOGNhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2lycS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaXJxLmMKQEAgLTI4NCw3ICsyODQsMTAgQEAKIAogdm9pZCBvbWFwM19pbnRjX3ByZXBhcmVfaWRsZSh2b2lkKQogewotCS8qIERpc2FibGUgYXV0b2lkbGUgYXMgaXQgY2FuIHN0YWxsIGludGVycnVwdCBjb250cm9sbGVyICovCisJLyoKKwkgKiBEaXNhYmxlIGF1dG9pZGxlIGFzIGl0IGNhbiBzdGFsbCBpbnRlcnJ1cHQgY29udHJvbGxlciwKKwkgKiBjZi4gZXJyYXRhIElEIGk1NDAgZm9yIDM0MzAgKGFsbCByZXZpc2lvbnMgdXAgdG8gMy4xLngpCisJICovCiAJaW50Y19iYW5rX3dyaXRlX3JlZygwLCAmaXJxX2JhbmtzWzBdLCBJTlRDX1NZU0NPTkZJRyk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvbWFpbGJveC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tYWlsYm94LmMKaW5kZXggNDBkZGVjYS4uMzk0NDEzZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tYWlsYm94LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tYWlsYm94LmMKQEAgLTI4MSw3ICsyODEsNyBAQAogCiAvKiBGSVhNRTogdGhlIGZvbGxvd2luZyBzdHJ1Y3RzIHNob3VsZCBiZSBmaWxsZWQgYXV0b21hdGljYWxseSBieSB0aGUgdXNlciBpZCAqLwogCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzQzMCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjQyMCkKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyKQogLyogRFNQICovCiBzdGF0aWMgc3RydWN0IG9tYXBfbWJveDJfcHJpdiBvbWFwMl9tYm94X2RzcF9wcml2ID0gewogCS50eF9maWZvID0gewpAQCAtMzA2LDcgKzMwNiw3IEBACiB9OwogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNDMwKQorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpCiBzdHJ1Y3Qgb21hcF9tYm94ICpvbWFwM19tYm94ZXNbXSA9IHsgJm1ib3hfZHNwX2luZm8sIE5VTEwgfTsKICNlbmRpZgogCkBAIC0zOTQsMTUgKzM5NCwxOSBAQAogCiAJaWYgKGZhbHNlKQogCQk7Ci0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzQzMCkKLQllbHNlIGlmIChjcHVfaXNfb21hcDM0MzAoKSkgeworI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpCisJZWxzZSBpZiAoY3B1X2lzX29tYXAzNHh4KCkpIHsKIAkJbGlzdCA9IG9tYXAzX21ib3hlczsKIAogCQlsaXN0WzBdLT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxX2J5bmFtZShwZGV2LCAiZHNwIik7CiAJfQogI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjQyMCkKLQllbHNlIGlmIChjcHVfaXNfb21hcDI0MjAoKSkgeworI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDIpCisJZWxzZSBpZiAoY3B1X2lzX29tYXAyNDMwKCkpIHsKKwkJbGlzdCA9IG9tYXAyX21ib3hlczsKKworCQlsaXN0WzBdLT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxX2J5bmFtZShwZGV2LCAiZHNwIik7CisJfSBlbHNlIGlmIChjcHVfaXNfb21hcDI0MjAoKSkgewogCQlsaXN0ID0gb21hcDJfbWJveGVzOwogCiAJCWxpc3RbMF0tPmlycSA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKHBkZXYsICJkc3AiKTsKQEAgLTQzMiw5ICs0MzYsOCBAQAogCQlpb3VubWFwKG1ib3hfYmFzZSk7CiAJCXJldHVybiByZXQ7CiAJfQotCXJldHVybiAwOwogCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBfX2RldmV4aXQgb21hcDJfbWJveF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5jCmluZGV4IDA3NDUzNmEuLjE3YmQ2MzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguYwpAQCAtMSw5ICsxLDkgQEAKIC8qCiAgKiBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5jCiAgKgotICogT01BUDIgYW5kIE9NQVAzIHBpbiBtdWx0aXBsZXhpbmcgY29uZmlndXJhdGlvbnMKKyAqIE9NQVAyLCBPTUFQMyBhbmQgT01BUDQgcGluIG11bHRpcGxleGluZyBjb25maWd1cmF0aW9ucwogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNCAtIDIwMDggVGV4YXMgSW5zdHJ1bWVudHMgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAxMCBUZXhhcyBJbnN0cnVtZW50cyBJbmMuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA4IE5va2lhIENvcnBvcmF0aW9uCiAgKgogICogV3JpdHRlbiBieSBUb255IExpbmRncmVuCkBAIC0zNSw2NSArMzUsNzkgQEAKIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIAorI2luY2x1ZGUgPHBsYXQvb21hcF9od21vZC5oPgorCiAjaW5jbHVkZSAiY29udHJvbC5oIgogI2luY2x1ZGUgIm11eC5oIgogCiAjZGVmaW5lIE9NQVBfTVVYX0JBU0VfT0ZGU0VUCQkweDMwCS8qIE9mZnNldCBmcm9tIENUUkxfQkFTRSAqLwogI2RlZmluZSBPTUFQX01VWF9CQVNFX1NaCQkweDVjYQotI2RlZmluZSBNVVhBQkxFX0dQSU9fTU9ERTMJCUJJVCgwKQogCiBzdHJ1Y3Qgb21hcF9tdXhfZW50cnkgewogCXN0cnVjdCBvbWFwX211eAkJbXV4OwogCXN0cnVjdCBsaXN0X2hlYWQJbm9kZTsKIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIG11eF9waHlzOwotc3RhdGljIHZvaWQgX19pb21lbSAqbXV4X2Jhc2U7Ci1zdGF0aWMgdTggb21hcF9tdXhfZmxhZ3M7CitzdGF0aWMgTElTVF9IRUFEKG11eF9wYXJ0aXRpb25zKTsKK3N0YXRpYyBERUZJTkVfTVVURVgobXV4bW9kZV9tdXRleCk7CiAKLXUxNiBvbWFwX211eF9yZWFkKHUxNiByZWcpCitzdHJ1Y3Qgb21hcF9tdXhfcGFydGl0aW9uICpvbWFwX211eF9nZXQoY29uc3QgY2hhciAqbmFtZSkKIHsKLQlpZiAoY3B1X2lzX29tYXAyNHh4KCkpCi0JCXJldHVybiBfX3Jhd19yZWFkYihtdXhfYmFzZSArIHJlZyk7Ci0JZWxzZQotCQlyZXR1cm4gX19yYXdfcmVhZHcobXV4X2Jhc2UgKyByZWcpOworCXN0cnVjdCBvbWFwX211eF9wYXJ0aXRpb24gKnBhcnRpdGlvbjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocGFydGl0aW9uLCAmbXV4X3BhcnRpdGlvbnMsIG5vZGUpIHsKKwkJaWYgKCFzdHJjbXAobmFtZSwgcGFydGl0aW9uLT5uYW1lKSkKKwkJCXJldHVybiBwYXJ0aXRpb247CisJfQorCisJcmV0dXJuIE5VTEw7CiB9CiAKLXZvaWQgb21hcF9tdXhfd3JpdGUodTE2IHZhbCwgdTE2IHJlZykKK3UxNiBvbWFwX211eF9yZWFkKHN0cnVjdCBvbWFwX211eF9wYXJ0aXRpb24gKnBhcnRpdGlvbiwgdTE2IHJlZykKIHsKLQlpZiAoY3B1X2lzX29tYXAyNHh4KCkpCi0JCV9fcmF3X3dyaXRlYih2YWwsIG11eF9iYXNlICsgcmVnKTsKKwlpZiAocGFydGl0aW9uLT5mbGFncyAmIE9NQVBfTVVYX1JFR184QklUKQorCQlyZXR1cm4gX19yYXdfcmVhZGIocGFydGl0aW9uLT5iYXNlICsgcmVnKTsKIAllbHNlCi0JCV9fcmF3X3dyaXRldyh2YWwsIG11eF9iYXNlICsgcmVnKTsKKwkJcmV0dXJuIF9fcmF3X3JlYWR3KHBhcnRpdGlvbi0+YmFzZSArIHJlZyk7CiB9CiAKLXZvaWQgb21hcF9tdXhfd3JpdGVfYXJyYXkoc3RydWN0IG9tYXBfYm9hcmRfbXV4ICpib2FyZF9tdXgpCit2b2lkIG9tYXBfbXV4X3dyaXRlKHN0cnVjdCBvbWFwX211eF9wYXJ0aXRpb24gKnBhcnRpdGlvbiwgdTE2IHZhbCwKKwkJCSAgIHUxNiByZWcpCiB7Ci0Jd2hpbGUgKGJvYXJkX211eC0+cmVnX29mZnNldCAhPSAgT01BUF9NVVhfVEVSTUlOQVRPUikgewotCQlvbWFwX211eF93cml0ZShib2FyZF9tdXgtPnZhbHVlLCBib2FyZF9tdXgtPnJlZ19vZmZzZXQpOworCWlmIChwYXJ0aXRpb24tPmZsYWdzICYgT01BUF9NVVhfUkVHXzhCSVQpCisJCV9fcmF3X3dyaXRlYih2YWwsIHBhcnRpdGlvbi0+YmFzZSArIHJlZyk7CisJZWxzZQorCQlfX3Jhd193cml0ZXcodmFsLCBwYXJ0aXRpb24tPmJhc2UgKyByZWcpOworfQorCit2b2lkIG9tYXBfbXV4X3dyaXRlX2FycmF5KHN0cnVjdCBvbWFwX211eF9wYXJ0aXRpb24gKnBhcnRpdGlvbiwKKwkJCQkgc3RydWN0IG9tYXBfYm9hcmRfbXV4ICpib2FyZF9tdXgpCit7CisJd2hpbGUgKGJvYXJkX211eC0+cmVnX29mZnNldCAhPSBPTUFQX01VWF9URVJNSU5BVE9SKSB7CisJCW9tYXBfbXV4X3dyaXRlKHBhcnRpdGlvbiwgYm9hcmRfbXV4LT52YWx1ZSwKKwkJCSAgICAgICBib2FyZF9tdXgtPnJlZ19vZmZzZXQpOwogCQlib2FyZF9tdXgrKzsKIAl9CiB9CiAKLXN0YXRpYyBMSVNUX0hFQUQobXV4bW9kZXMpOwotc3RhdGljIERFRklORV9NVVRFWChtdXhtb2RlX211dGV4KTsKLQogI2lmZGVmIENPTkZJR19PTUFQX01VWAogCiBzdGF0aWMgY2hhciAqb21hcF9tdXhfb3B0aW9uczsKIAotaW50IF9faW5pdCBvbWFwX211eF9pbml0X2dwaW8oaW50IGdwaW8sIGludCB2YWwpCitzdGF0aWMgaW50IF9faW5pdCBfb21hcF9tdXhfaW5pdF9ncGlvKHN0cnVjdCBvbWFwX211eF9wYXJ0aXRpb24gKnBhcnRpdGlvbiwKKwkJCQkgICAgICBpbnQgZ3BpbywgaW50IHZhbCkKIHsKIAlzdHJ1Y3Qgb21hcF9tdXhfZW50cnkgKmU7CiAJc3RydWN0IG9tYXBfbXV4ICpncGlvX211eCA9IE5VTEw7CiAJdTE2IG9sZF9tb2RlOwogCXUxNiBtdXhfbW9kZTsKIAlpbnQgZm91bmQgPSAwOworCXN0cnVjdCBsaXN0X2hlYWQgKm11eG1vZGVzID0gJnBhcnRpdGlvbi0+bXV4bW9kZXM7CiAKIAlpZiAoIWdwaW8pCiAJCXJldHVybiAtRUlOVkFMOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShlLCAmbXV4bW9kZXMsIG5vZGUpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGUsIG11eG1vZGVzLCBub2RlKSB7CiAJCXN0cnVjdCBvbWFwX211eCAqbSA9ICZlLT5tdXg7CiAJCWlmIChncGlvID09IG0tPmdwaW8pIHsKIAkJCWdwaW9fbXV4ID0gbTsKQEAgLTEwMiwzNCArMTE2LDUyIEBACiAJfQogCiAJaWYgKGZvdW5kID09IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJtdXg6IENvdWxkIG5vdCBzZXQgZ3BpbyVpXG4iLCBncGlvKTsKKwkJcHJfZXJyKCIlczogQ291bGQgbm90IHNldCBncGlvJWlcbiIsIF9fZnVuY19fLCBncGlvKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJaWYgKGZvdW5kID4gMSkgewotCQlwcmludGsoS0VSTl9JTkZPICJtdXg6IE11bHRpcGxlIGdwaW8gcGF0aHMgKCVkKSBmb3IgZ3BpbyVpXG4iLAotCQkJCWZvdW5kLCBncGlvKTsKKwkJcHJfaW5mbygiJXM6IE11bHRpcGxlIGdwaW8gcGF0aHMgKCVkKSBmb3IgZ3BpbyVpXG4iLCBfX2Z1bmNfXywKKwkJCWZvdW5kLCBncGlvKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0Jb2xkX21vZGUgPSBvbWFwX211eF9yZWFkKGdwaW9fbXV4LT5yZWdfb2Zmc2V0KTsKKwlvbGRfbW9kZSA9IG9tYXBfbXV4X3JlYWQocGFydGl0aW9uLCBncGlvX211eC0+cmVnX29mZnNldCk7CiAJbXV4X21vZGUgPSB2YWwgJiB+KE9NQVBfTVVYX05SX01PREVTIC0gMSk7Ci0JaWYgKG9tYXBfbXV4X2ZsYWdzICYgTVVYQUJMRV9HUElPX01PREUzKQorCWlmIChwYXJ0aXRpb24tPmZsYWdzICYgT01BUF9NVVhfR1BJT19JTl9NT0RFMykKIAkJbXV4X21vZGUgfD0gT01BUF9NVVhfTU9ERTM7CiAJZWxzZQogCQltdXhfbW9kZSB8PSBPTUFQX01VWF9NT0RFNDsKLQlwcmludGsoS0VSTl9ERUJVRyAibXV4OiBTZXR0aW5nIHNpZ25hbCAlcy5ncGlvJWkgMHglMDR4IC0+IDB4JTA0eFxuIiwKLQkJCWdwaW9fbXV4LT5tdXhuYW1lc1swXSwgZ3Bpbywgb2xkX21vZGUsIG11eF9tb2RlKTsKLQlvbWFwX211eF93cml0ZShtdXhfbW9kZSwgZ3Bpb19tdXgtPnJlZ19vZmZzZXQpOworCXByX2RlYnVnKCIlczogU2V0dGluZyBzaWduYWwgJXMuZ3BpbyVpIDB4JTA0eCAtPiAweCUwNHhcbiIsIF9fZnVuY19fLAorCQkgZ3Bpb19tdXgtPm11eG5hbWVzWzBdLCBncGlvLCBvbGRfbW9kZSwgbXV4X21vZGUpOworCW9tYXBfbXV4X3dyaXRlKHBhcnRpdGlvbiwgbXV4X21vZGUsIGdwaW9fbXV4LT5yZWdfb2Zmc2V0KTsKIAogCXJldHVybiAwOwogfQogCi1pbnQgX19pbml0IG9tYXBfbXV4X2luaXRfc2lnbmFsKGNvbnN0IGNoYXIgKm11eG5hbWUsIGludCB2YWwpCitpbnQgX19pbml0IG9tYXBfbXV4X2luaXRfZ3BpbyhpbnQgZ3BpbywgaW50IHZhbCkKIHsKKwlzdHJ1Y3Qgb21hcF9tdXhfcGFydGl0aW9uICpwYXJ0aXRpb247CisJaW50IHJldDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocGFydGl0aW9uLCAmbXV4X3BhcnRpdGlvbnMsIG5vZGUpIHsKKwkJcmV0ID0gX29tYXBfbXV4X2luaXRfZ3BpbyhwYXJ0aXRpb24sIGdwaW8sIHZhbCk7CisJCWlmICghcmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworc3RhdGljIGludCBfX2luaXQgX29tYXBfbXV4X2dldF9ieV9uYW1lKHN0cnVjdCBvbWFwX211eF9wYXJ0aXRpb24gKnBhcnRpdGlvbiwKKwkJCQkJY29uc3QgY2hhciAqbXV4bmFtZSwKKwkJCQkJc3RydWN0IG9tYXBfbXV4ICoqZm91bmRfbXV4KQoreworCXN0cnVjdCBvbWFwX211eCAqbXV4ID0gTlVMTDsKIAlzdHJ1Y3Qgb21hcF9tdXhfZW50cnkgKmU7CiAJY29uc3QgY2hhciAqbW9kZV9uYW1lOwotCWludCBmb3VuZCA9IDAsIG1vZGUwX2xlbiA9IDA7CisJaW50IGZvdW5kID0gMCwgZm91bmRfbW9kZSwgbW9kZTBfbGVuID0gMDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICptdXhtb2RlcyA9ICZwYXJ0aXRpb24tPm11eG1vZGVzOwogCiAJbW9kZV9uYW1lID0gc3RyY2hyKG11eG5hbWUsICcuJyk7CiAJaWYgKG1vZGVfbmFtZSkgewpAQCAtMTM5LDUxICsxNzEsMjAwIEBACiAJCW1vZGVfbmFtZSA9IG11eG5hbWU7CiAJfQogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShlLCAmbXV4bW9kZXMsIG5vZGUpIHsKLQkJc3RydWN0IG9tYXBfbXV4ICptID0gJmUtPm11eDsKLQkJY2hhciAqbTBfZW50cnkgPSBtLT5tdXhuYW1lc1swXTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGUsIG11eG1vZGVzLCBub2RlKSB7CisJCWNoYXIgKm0wX2VudHJ5OwogCQlpbnQgaTsKIAorCQltdXggPSAmZS0+bXV4OworCQltMF9lbnRyeSA9IG11eC0+bXV4bmFtZXNbMF07CisKIAkJLyogRmlyc3QgY2hlY2sgZm9yIGZ1bGwgbmFtZSBpbiBtb2RlMC5tdXhtb2RlIGZvcm1hdCAqLwogCQlpZiAobW9kZTBfbGVuICYmIHN0cm5jbXAobXV4bmFtZSwgbTBfZW50cnksIG1vZGUwX2xlbikpCiAJCQljb250aW51ZTsKIAogCQkvKiBUaGVuIGNoZWNrIGZvciBtdXhtb2RlIG9ubHkgKi8KIAkJZm9yIChpID0gMDsgaSA8IE9NQVBfTVVYX05SX01PREVTOyBpKyspIHsKLQkJCWNoYXIgKm1vZGVfY3VyID0gbS0+bXV4bmFtZXNbaV07CisJCQljaGFyICptb2RlX2N1ciA9IG11eC0+bXV4bmFtZXNbaV07CiAKIAkJCWlmICghbW9kZV9jdXIpCiAJCQkJY29udGludWU7CiAKIAkJCWlmICghc3RyY21wKG1vZGVfbmFtZSwgbW9kZV9jdXIpKSB7Ci0JCQkJdTE2IG9sZF9tb2RlOwotCQkJCXUxNiBtdXhfbW9kZTsKLQotCQkJCW9sZF9tb2RlID0gb21hcF9tdXhfcmVhZChtLT5yZWdfb2Zmc2V0KTsKLQkJCQltdXhfbW9kZSA9IHZhbCB8IGk7Ci0JCQkJcHJpbnRrKEtFUk5fREVCVUcgIm11eDogU2V0dGluZyBzaWduYWwgIgotCQkJCQkiJXMuJXMgMHglMDR4IC0+IDB4JTA0eFxuIiwKLQkJCQkJbTBfZW50cnksIG11eG5hbWUsIG9sZF9tb2RlLCBtdXhfbW9kZSk7Ci0JCQkJb21hcF9tdXhfd3JpdGUobXV4X21vZGUsIG0tPnJlZ19vZmZzZXQpOworCQkJCSpmb3VuZF9tdXggPSBtdXg7CiAJCQkJZm91bmQrKzsKKwkJCQlmb3VuZF9tb2RlID0gaTsKIAkJCX0KIAkJfQogCX0KIAotCWlmIChmb3VuZCA9PSAxKQotCQlyZXR1cm4gMDsKKwlpZiAoZm91bmQgPT0gMSkgeworCQlyZXR1cm4gZm91bmRfbW9kZTsKKwl9CiAKIAlpZiAoZm91bmQgPiAxKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAibXV4OiBNdWx0aXBsZSBzaWduYWwgcGF0aHMgKCVpKSBmb3IgJXNcbiIsCi0JCQkJZm91bmQsIG11eG5hbWUpOworCQlwcl9lcnIoIiVzOiBNdWx0aXBsZSBzaWduYWwgcGF0aHMgKCVpKSBmb3IgJXNcbiIsIF9fZnVuY19fLAorCQkgICAgICAgZm91bmQsIG11eG5hbWUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlwcmludGsoS0VSTl9FUlIgIm11eDogQ291bGQgbm90IHNldCBzaWduYWwgJXNcbiIsIG11eG5hbWUpOworCXByX2VycigiJXM6IENvdWxkIG5vdCBmaW5kIHNpZ25hbCAlc1xuIiwgX19mdW5jX18sIG11eG5hbWUpOwogCiAJcmV0dXJuIC1FTk9ERVY7CiB9CiAKK3N0YXRpYyBpbnQgX19pbml0CitvbWFwX211eF9nZXRfYnlfbmFtZShjb25zdCBjaGFyICptdXhuYW1lLAorCQkJc3RydWN0IG9tYXBfbXV4X3BhcnRpdGlvbiAqKmZvdW5kX3BhcnRpdGlvbiwKKwkJCXN0cnVjdCBvbWFwX211eCAqKmZvdW5kX211eCkKK3sKKwlzdHJ1Y3Qgb21hcF9tdXhfcGFydGl0aW9uICpwYXJ0aXRpb247CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBhcnRpdGlvbiwgJm11eF9wYXJ0aXRpb25zLCBub2RlKSB7CisJCXN0cnVjdCBvbWFwX211eCAqbXV4ID0gTlVMTDsKKwkJaW50IG11eF9tb2RlID0gX29tYXBfbXV4X2dldF9ieV9uYW1lKHBhcnRpdGlvbiwgbXV4bmFtZSwgJm11eCk7CisJCWlmIChtdXhfbW9kZSA8IDApCisJCQljb250aW51ZTsKKworCQkqZm91bmRfcGFydGl0aW9uID0gcGFydGl0aW9uOworCQkqZm91bmRfbXV4ID0gbXV4OworCisJCXJldHVybiBtdXhfbW9kZTsKKwl9CisKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworaW50IF9faW5pdCBvbWFwX211eF9pbml0X3NpZ25hbChjb25zdCBjaGFyICptdXhuYW1lLCBpbnQgdmFsKQoreworCXN0cnVjdCBvbWFwX211eF9wYXJ0aXRpb24gKnBhcnRpdGlvbiA9IE5VTEw7CisJc3RydWN0IG9tYXBfbXV4ICptdXggPSBOVUxMOworCXUxNiBvbGRfbW9kZTsKKwlpbnQgbXV4X21vZGU7CisKKwltdXhfbW9kZSA9IG9tYXBfbXV4X2dldF9ieV9uYW1lKG11eG5hbWUsICZwYXJ0aXRpb24sICZtdXgpOworCWlmIChtdXhfbW9kZSA8IDApCisJCXJldHVybiBtdXhfbW9kZTsKKworCW9sZF9tb2RlID0gb21hcF9tdXhfcmVhZChwYXJ0aXRpb24sIG11eC0+cmVnX29mZnNldCk7CisJbXV4X21vZGUgfD0gdmFsOworCXByX2RlYnVnKCIlczogU2V0dGluZyBzaWduYWwgJXMgMHglMDR4IC0+IDB4JTA0eFxuIiwKKwkJCSBfX2Z1bmNfXywgbXV4bmFtZSwgb2xkX21vZGUsIG11eF9tb2RlKTsKKwlvbWFwX211eF93cml0ZShwYXJ0aXRpb24sIG11eF9tb2RlLCBtdXgtPnJlZ19vZmZzZXQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBvbWFwX2h3bW9kX211eF9pbmZvICogX19pbml0CitvbWFwX2h3bW9kX211eF9pbml0KHN0cnVjdCBvbWFwX2RldmljZV9wYWQgKmJwYWRzLCBpbnQgbnJfcGFkcykKK3sKKwlzdHJ1Y3Qgb21hcF9od21vZF9tdXhfaW5mbyAqaG11eDsKKwlpbnQgaTsKKworCWlmICghYnBhZHMgfHwgbnJfcGFkcyA8IDEpCisJCXJldHVybiBOVUxMOworCisJaG11eCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBvbWFwX2h3bW9kX211eF9pbmZvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFobXV4KQorCQlnb3RvIGVycjE7CisKKwlobXV4LT5ucl9wYWRzID0gbnJfcGFkczsKKworCWhtdXgtPnBhZHMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgb21hcF9kZXZpY2VfcGFkKSAqCisJCQkJbnJfcGFkcywgR0ZQX0tFUk5FTCk7CisJaWYgKCFobXV4LT5wYWRzKQorCQlnb3RvIGVycjI7CisKKwlmb3IgKGkgPSAwOyBpIDwgaG11eC0+bnJfcGFkczsgaSsrKSB7CisJCXN0cnVjdCBvbWFwX211eF9wYXJ0aXRpb24gKnBhcnRpdGlvbjsKKwkJc3RydWN0IG9tYXBfZGV2aWNlX3BhZCAqYnBhZCA9ICZicGFkc1tpXSwgKnBhZCA9ICZobXV4LT5wYWRzW2ldOworCQlzdHJ1Y3Qgb21hcF9tdXggKm11eDsKKwkJaW50IG11eF9tb2RlOworCisJCW11eF9tb2RlID0gb21hcF9tdXhfZ2V0X2J5X25hbWUoYnBhZC0+bmFtZSwgJnBhcnRpdGlvbiwgJm11eCk7CisJCWlmIChtdXhfbW9kZSA8IDApCisJCQlnb3RvIGVycjM7CisJCWlmICghcGFkLT5wYXJ0aXRpb24pCisJCQlwYWQtPnBhcnRpdGlvbiA9IHBhcnRpdGlvbjsKKwkJaWYgKCFwYWQtPm11eCkKKwkJCXBhZC0+bXV4ID0gbXV4OworCisJCXBhZC0+bmFtZSA9IGt6YWxsb2Moc3RybGVuKGJwYWQtPm5hbWUpICsgMSwgR0ZQX0tFUk5FTCk7CisJCWlmICghcGFkLT5uYW1lKSB7CisJCQlpbnQgajsKKworCQkJZm9yIChqID0gaSAtIDE7IGogPj0gMDsgai0tKQorCQkJCWtmcmVlKGhtdXgtPnBhZHNbal0ubmFtZSk7CisJCQlnb3RvIGVycjM7CisJCX0KKwkJc3RyY3B5KHBhZC0+bmFtZSwgYnBhZC0+bmFtZSk7CisKKwkJcGFkLT5mbGFncyA9IGJwYWQtPmZsYWdzOworCQlwYWQtPmVuYWJsZSA9IGJwYWQtPmVuYWJsZTsKKwkJcGFkLT5pZGxlID0gYnBhZC0+aWRsZTsKKwkJcGFkLT5vZmYgPSBicGFkLT5vZmY7CisJCXByX2RlYnVnKCIlczogSW5pdGlhbGl6ZWQgJXNcbiIsIF9fZnVuY19fLCBwYWQtPm5hbWUpOworCX0KKworCXJldHVybiBobXV4OworCitlcnIzOgorCWtmcmVlKGhtdXgtPnBhZHMpOworZXJyMjoKKwlrZnJlZShobXV4KTsKK2VycjE6CisJcHJfZXJyKCIlczogQ291bGQgbm90IGFsbG9jYXRlIGRldmljZSBtdXggZW50cnlcbiIsIF9fZnVuY19fKTsKKworCXJldHVybiBOVUxMOworfQorCisvKiBBc3N1bWVzIHRoZSBjYWxsaW5nIGZ1bmN0aW9uIHRha2VzIGNhcmUgb2YgbG9ja2luZyAqLwordm9pZCBvbWFwX2h3bW9kX211eChzdHJ1Y3Qgb21hcF9od21vZF9tdXhfaW5mbyAqaG11eCwgdTggc3RhdGUpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaG11eC0+bnJfcGFkczsgaSsrKSB7CisJCXN0cnVjdCBvbWFwX2RldmljZV9wYWQgKnBhZCA9ICZobXV4LT5wYWRzW2ldOworCQlpbnQgZmxhZ3MsIHZhbCA9IC1FSU5WQUw7CisKKwkJZmxhZ3MgPSBwYWQtPmZsYWdzOworCisJCXN3aXRjaCAoc3RhdGUpIHsKKwkJY2FzZSBfSFdNT0RfU1RBVEVfRU5BQkxFRDoKKwkJCWlmIChmbGFncyAmIE9NQVBfREVWSUNFX1BBRF9FTkFCTEVEKQorCQkJCWJyZWFrOworCQkJZmxhZ3MgfD0gT01BUF9ERVZJQ0VfUEFEX0VOQUJMRUQ7CisJCQl2YWwgPSBwYWQtPmVuYWJsZTsKKwkJCXByX2RlYnVnKCIlczogRW5hYmxpbmcgJXMgJXhcbiIsIF9fZnVuY19fLAorCQkJCQlwYWQtPm5hbWUsIHZhbCk7CisJCQlicmVhazsKKwkJY2FzZSBfSFdNT0RfU1RBVEVfSURMRToKKwkJCWlmICghKGZsYWdzICYgT01BUF9ERVZJQ0VfUEFEX1JFTVVYKSkKKwkJCQlicmVhazsKKwkJCWZsYWdzICY9IH5PTUFQX0RFVklDRV9QQURfRU5BQkxFRDsKKwkJCXZhbCA9IHBhZC0+aWRsZTsKKwkJCXByX2RlYnVnKCIlczogSWRsaW5nICVzICV4XG4iLCBfX2Z1bmNfXywKKwkJCQkJcGFkLT5uYW1lLCB2YWwpOworCQkJYnJlYWs7CisJCWNhc2UgX0hXTU9EX1NUQVRFX0RJU0FCTEVEOgorCQlkZWZhdWx0OgorCQkJLyogVXNlIHNhZmUgbW9kZSB1bmxlc3MgT01BUF9ERVZJQ0VfUEFEX1JFTVVYICovCisJCQlpZiAoZmxhZ3MgJiBPTUFQX0RFVklDRV9QQURfUkVNVVgpCisJCQkJdmFsID0gcGFkLT5vZmY7CisJCQllbHNlCisJCQkJdmFsID0gT01BUF9NVVhfTU9ERTc7CisJCQlmbGFncyAmPSB+T01BUF9ERVZJQ0VfUEFEX0VOQUJMRUQ7CisJCQlwcl9kZWJ1ZygiJXM6IERpc2FibGluZyAlcyAleFxuIiwgX19mdW5jX18sCisJCQkJCXBhZC0+bmFtZSwgdmFsKTsKKwkJfTsKKworCQlpZiAodmFsID49IDApIHsKKwkJCW9tYXBfbXV4X3dyaXRlKHBhZC0+cGFydGl0aW9uLCB2YWwsCisJCQkJCXBhZC0+bXV4LT5yZWdfb2Zmc2V0KTsKKwkJCXBhZC0+ZmxhZ3MgPSBmbGFnczsKKwkJfQorCX0KK30KKwogI2lmZGVmIENPTkZJR19ERUJVR19GUwogCiAjZGVmaW5lIE9NQVBfTVVYX01BWF9OUl9GTEFHUwkxMApAQCAtMjQ4LDEzICs0MjksMTUgQEAKIAl9IHdoaWxlIChpLS0gPiAwKTsKIH0KIAotI2RlZmluZSBPTUFQX01VWF9ERUZOQU1FX0xFTgkxNgorI2RlZmluZSBPTUFQX01VWF9ERUZOQU1FX0xFTgkzMgogCiBzdGF0aWMgaW50IG9tYXBfbXV4X2RiZ19ib2FyZF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdW51c2VkKQogeworCXN0cnVjdCBvbWFwX211eF9wYXJ0aXRpb24gKnBhcnRpdGlvbiA9IHMtPnByaXZhdGU7CiAJc3RydWN0IG9tYXBfbXV4X2VudHJ5ICplOworCXU4IG9tYXBfZ2VuID0gb21hcF9yZXYoKSA+PiAyODsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkoZSwgJm11eG1vZGVzLCBub2RlKSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShlLCAmcGFydGl0aW9uLT5tdXhtb2Rlcywgbm9kZSkgewogCQlzdHJ1Y3Qgb21hcF9tdXggKm0gPSAmZS0+bXV4OwogCQljaGFyIG0wX2RlZltPTUFQX01VWF9ERUZOQU1FX0xFTl07CiAJCWNoYXIgKm0wX25hbWUgPSBtLT5tdXhuYW1lc1swXTsKQEAgLTI3MiwxMSArNDU1LDE2IEBACiAJCQl9CiAJCQltMF9kZWZbaV0gPSB0b3VwcGVyKG0wX25hbWVbaV0pOwogCQl9Ci0JCXZhbCA9IG9tYXBfbXV4X3JlYWQobS0+cmVnX29mZnNldCk7CisJCXZhbCA9IG9tYXBfbXV4X3JlYWQocGFydGl0aW9uLCBtLT5yZWdfb2Zmc2V0KTsKIAkJbW9kZSA9IHZhbCAmIE9NQVBfTVVYX01PREU3OworCQlpZiAobW9kZSAhPSAwKQorCQkJc2VxX3ByaW50ZihzLCAiLyogJXMgKi9cbiIsIG0tPm11eG5hbWVzW21vZGVdKTsKIAotCQlzZXFfcHJpbnRmKHMsICJPTUFQJWlfTVVYKCVzLCAiLAotCQkJCQljcHVfaXNfb21hcDM0eHgoKSA/IDMgOiAwLCBtMF9kZWYpOworCQkvKgorCQkgKiBYWFg6IE1pZ2h0IGJlIHJldmlzaXRlZCB0byBzdXBwb3J0IGRpZmZlcmVuY2VzIGFjY3Jvc3MKKwkJICogc2FtZSBPTUFQIGdlbmVyYXRpb24uCisJCSAqLworCQlzZXFfcHJpbnRmKHMsICJPTUFQJWRfTVVYKCVzLCAiLCBvbWFwX2dlbiwgbTBfZGVmKTsKIAkJb21hcF9tdXhfZGVjb2RlKHMsIHZhbCk7CiAJCXNlcV9wcmludGYocywgIiksXG4iKTsKIAl9CkBAIC0yODYsNyArNDc0LDcgQEAKIAogc3RhdGljIGludCBvbWFwX211eF9kYmdfYm9hcmRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgb21hcF9tdXhfZGJnX2JvYXJkX3Nob3csICZpbm9kZS0+aV9wcml2YXRlKTsKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgb21hcF9tdXhfZGJnX2JvYXJkX3Nob3csIGlub2RlLT5pX3ByaXZhdGUpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBvbWFwX211eF9kYmdfYm9hcmRfZm9wcyA9IHsKQEAgLTI5NiwxOSArNDg0LDQzIEBACiAJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9tdXhfcGFydGl0aW9uICpvbWFwX211eF9nZXRfcGFydGl0aW9uKHN0cnVjdCBvbWFwX211eCAqbXV4KQoreworCXN0cnVjdCBvbWFwX211eF9wYXJ0aXRpb24gKnBhcnRpdGlvbjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocGFydGl0aW9uLCAmbXV4X3BhcnRpdGlvbnMsIG5vZGUpIHsKKwkJc3RydWN0IGxpc3RfaGVhZCAqbXV4bW9kZXMgPSAmcGFydGl0aW9uLT5tdXhtb2RlczsKKwkJc3RydWN0IG9tYXBfbXV4X2VudHJ5ICplOworCisJCWxpc3RfZm9yX2VhY2hfZW50cnkoZSwgbXV4bW9kZXMsIG5vZGUpIHsKKwkJCXN0cnVjdCBvbWFwX211eCAqbSA9ICZlLT5tdXg7CisKKwkJCWlmIChtID09IG11eCkKKwkJCQlyZXR1cm4gcGFydGl0aW9uOworCQl9CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKIHN0YXRpYyBpbnQgb21hcF9tdXhfZGJnX3NpZ25hbF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdW51c2VkKQogewogCXN0cnVjdCBvbWFwX211eCAqbSA9IHMtPnByaXZhdGU7CisJc3RydWN0IG9tYXBfbXV4X3BhcnRpdGlvbiAqcGFydGl0aW9uOwogCWNvbnN0IGNoYXIgKm5vbmUgPSAiTkEiOwogCXUxNiB2YWw7CiAJaW50IG1vZGU7CiAKLQl2YWwgPSBvbWFwX211eF9yZWFkKG0tPnJlZ19vZmZzZXQpOworCXBhcnRpdGlvbiA9IG9tYXBfbXV4X2dldF9wYXJ0aXRpb24obSk7CisJaWYgKCFwYXJ0aXRpb24pCisJCXJldHVybiAwOworCisJdmFsID0gb21hcF9tdXhfcmVhZChwYXJ0aXRpb24sIG0tPnJlZ19vZmZzZXQpOwogCW1vZGUgPSB2YWwgJiBPTUFQX01VWF9NT0RFNzsKIAotCXNlcV9wcmludGYocywgIm5hbWU6ICVzLiVzICgweCUwOGx4LzB4JTAzeCA9IDB4JTA0eCksIGIgJXMsIHQgJXNcbiIsCisJc2VxX3ByaW50ZihzLCAibmFtZTogJXMuJXMgKDB4JTA4eC8weCUwM3ggPSAweCUwNHgpLCBiICVzLCB0ICVzXG4iLAogCQkJbS0+bXV4bmFtZXNbMF0sIG0tPm11eG5hbWVzW21vZGVdLAotCQkJbXV4X3BoeXMgKyBtLT5yZWdfb2Zmc2V0LCBtLT5yZWdfb2Zmc2V0LCB2YWwsCisJCQlwYXJ0aXRpb24tPnBoeXMgKyBtLT5yZWdfb2Zmc2V0LCBtLT5yZWdfb2Zmc2V0LCB2YWwsCiAJCQltLT5iYWxsc1swXSA/IG0tPmJhbGxzWzBdIDogbm9uZSwKIAkJCW0tPmJhbGxzWzFdID8gbS0+YmFsbHNbMV0gOiBub25lKTsKIAlzZXFfcHJpbnRmKHMsICJtb2RlOiAiKTsKQEAgLTMzMCwxNCArNTQyLDE1IEBACiAjZGVmaW5lIE9NQVBfTVVYX01BWF9BUkdfQ0hBUiAgNwogCiBzdGF0aWMgc3NpemVfdCBvbWFwX211eF9kYmdfc2lnbmFsX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAotCQkJCQkJY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAotCQkJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCisJCQkJCSBjb25zdCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCisJCQkJCSBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKIAljaGFyIGJ1ZltPTUFQX01VWF9NQVhfQVJHX0NIQVJdOwogCXN0cnVjdCBzZXFfZmlsZSAqc2VxZjsKIAlzdHJ1Y3Qgb21hcF9tdXggKm07CiAJdW5zaWduZWQgbG9uZyB2YWw7CiAJaW50IGJ1Zl9zaXplLCByZXQ7CisJc3RydWN0IG9tYXBfbXV4X3BhcnRpdGlvbiAqcGFydGl0aW9uOwogCiAJaWYgKGNvdW50ID4gT01BUF9NVVhfTUFYX0FSR19DSEFSKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTM1OCw3ICs1NzEsMTEgQEAKIAlzZXFmID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCW0gPSBzZXFmLT5wcml2YXRlOwogCi0Jb21hcF9tdXhfd3JpdGUoKHUxNil2YWwsIG0tPnJlZ19vZmZzZXQpOworCXBhcnRpdGlvbiA9IG9tYXBfbXV4X2dldF9wYXJ0aXRpb24obSk7CisJaWYgKCFwYXJ0aXRpb24pCisJCXJldHVybiAtRU5PREVWOworCisJb21hcF9tdXhfd3JpdGUocGFydGl0aW9uLCAodTE2KXZhbCwgbS0+cmVnX29mZnNldCk7CiAJKnBwb3MgKz0gY291bnQ7CiAKIAlyZXR1cm4gY291bnQ7CkBAIC0zNzksMjIgKzU5NiwzOCBAQAogCiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbXV4X2RiZ19kaXI7CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBvbWFwX211eF9kYmdfaW5pdCh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IG9tYXBfbXV4X2RiZ19jcmVhdGVfZW50cnkoCisJCQkJc3RydWN0IG9tYXBfbXV4X3BhcnRpdGlvbiAqcGFydGl0aW9uLAorCQkJCXN0cnVjdCBkZW50cnkgKm11eF9kYmdfZGlyKQogewogCXN0cnVjdCBvbWFwX211eF9lbnRyeSAqZTsKIAorCWxpc3RfZm9yX2VhY2hfZW50cnkoZSwgJnBhcnRpdGlvbi0+bXV4bW9kZXMsIG5vZGUpIHsKKwkJc3RydWN0IG9tYXBfbXV4ICptID0gJmUtPm11eDsKKworCQkodm9pZClkZWJ1Z2ZzX2NyZWF0ZV9maWxlKG0tPm11eG5hbWVzWzBdLCBTX0lXVUdPLCBtdXhfZGJnX2RpciwKKwkJCQkJICBtLCAmb21hcF9tdXhfZGJnX3NpZ25hbF9mb3BzKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBvbWFwX211eF9kYmdfaW5pdCh2b2lkKQoreworCXN0cnVjdCBvbWFwX211eF9wYXJ0aXRpb24gKnBhcnRpdGlvbjsKKwlzdGF0aWMgc3RydWN0IGRlbnRyeSAqbXV4X2RiZ19ib2FyZF9kaXI7CisKIAltdXhfZGJnX2RpciA9IGRlYnVnZnNfY3JlYXRlX2Rpcigib21hcF9tdXgiLCBOVUxMKTsKIAlpZiAoIW11eF9kYmdfZGlyKQogCQlyZXR1cm47CiAKLQkodm9pZClkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJib2FyZCIsIFNfSVJVR08sIG11eF9kYmdfZGlyLAotCQkJCQlOVUxMLCAmb21hcF9tdXhfZGJnX2JvYXJkX2ZvcHMpOworCW11eF9kYmdfYm9hcmRfZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKCJib2FyZCIsIG11eF9kYmdfZGlyKTsKKwlpZiAoIW11eF9kYmdfYm9hcmRfZGlyKQorCQlyZXR1cm47CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGUsICZtdXhtb2Rlcywgbm9kZSkgewotCQlzdHJ1Y3Qgb21hcF9tdXggKm0gPSAmZS0+bXV4OwotCi0JCSh2b2lkKWRlYnVnZnNfY3JlYXRlX2ZpbGUobS0+bXV4bmFtZXNbMF0sIFNfSVdVR08sIG11eF9kYmdfZGlyLAotCQkJCQltLCAmb21hcF9tdXhfZGJnX3NpZ25hbF9mb3BzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBhcnRpdGlvbiwgJm11eF9wYXJ0aXRpb25zLCBub2RlKSB7CisJCW9tYXBfbXV4X2RiZ19jcmVhdGVfZW50cnkocGFydGl0aW9uLCBtdXhfZGJnX2Rpcik7CisJCSh2b2lkKWRlYnVnZnNfY3JlYXRlX2ZpbGUocGFydGl0aW9uLT5uYW1lLCBTX0lSVUdPLAorCQkJCQkgIG11eF9kYmdfYm9hcmRfZGlyLCBwYXJ0aXRpb24sCisJCQkJCSAgJm9tYXBfbXV4X2RiZ19ib2FyZF9mb3BzKTsKIAl9CiB9CiAKQEAgLTQyMSwyMyArNjU0LDI1IEBACiAvKiBGcmVlIGFsbCBkYXRhIGV4Y2VwdCBmb3IgR1BJTyBwaW5zIHVubGVzcyBDT05GSUdfREVCVUdfRlMgaXMgc2V0ICovCiBzdGF0aWMgaW50IF9faW5pdCBvbWFwX211eF9sYXRlX2luaXQodm9pZCkKIHsKLQlzdHJ1Y3Qgb21hcF9tdXhfZW50cnkgKmUsICp0bXA7CisJc3RydWN0IG9tYXBfbXV4X3BhcnRpdGlvbiAqcGFydGl0aW9uOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGUsIHRtcCwgJm11eG1vZGVzLCBub2RlKSB7Ci0JCXN0cnVjdCBvbWFwX211eCAqbSA9ICZlLT5tdXg7Ci0JCXUxNiBtb2RlID0gb21hcF9tdXhfcmVhZChtLT5yZWdfb2Zmc2V0KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBhcnRpdGlvbiwgJm11eF9wYXJ0aXRpb25zLCBub2RlKSB7CisJCXN0cnVjdCBvbWFwX211eF9lbnRyeSAqZSwgKnRtcDsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGUsIHRtcCwgJnBhcnRpdGlvbi0+bXV4bW9kZXMsIG5vZGUpIHsKKwkJCXN0cnVjdCBvbWFwX211eCAqbSA9ICZlLT5tdXg7CisJCQl1MTYgbW9kZSA9IG9tYXBfbXV4X3JlYWQocGFydGl0aW9uLCBtLT5yZWdfb2Zmc2V0KTsKIAotCQlpZiAoT01BUF9NT0RFX0dQSU8obW9kZSkpCi0JCQljb250aW51ZTsKKwkJCWlmIChPTUFQX01PREVfR1BJTyhtb2RlKSkKKwkJCQljb250aW51ZTsKIAogI2lmbmRlZiBDT05GSUdfREVCVUdfRlMKLQkJbXV0ZXhfbG9jaygmbXV4bW9kZV9tdXRleCk7Ci0JCWxpc3RfZGVsKCZlLT5ub2RlKTsKLQkJbXV0ZXhfdW5sb2NrKCZtdXhtb2RlX211dGV4KTsKLQkJb21hcF9tdXhfZnJlZV9uYW1lcyhtKTsKLQkJa2ZyZWUobSk7CisJCQltdXRleF9sb2NrKCZtdXhtb2RlX211dGV4KTsKKwkJCWxpc3RfZGVsKCZlLT5ub2RlKTsKKwkJCW11dGV4X3VubG9jaygmbXV4bW9kZV9tdXRleCk7CisJCQlvbWFwX211eF9mcmVlX25hbWVzKG0pOworCQkJa2ZyZWUobSk7CiAjZW5kaWYKLQorCQl9CiAJfQogCiAJb21hcF9tdXhfZGJnX2luaXQoKTsKQEAgLTQ2Miw4ICs2OTcsOCBAQAogCQkJcysrOwogCQl9CiAJCWlmICghZm91bmQpCi0JCQlwcmludGsoS0VSTl9FUlIgIm11eDogVW5rbm93biBlbnRyeSBvZmZzZXQgMHgleFxuIiwKLQkJCQkJcC0+cmVnX29mZnNldCk7CisJCQlwcl9lcnIoIiVzOiBVbmtub3duIGVudHJ5IG9mZnNldCAweCV4XG4iLCBfX2Z1bmNfXywKKwkJCSAgICAgICBwLT5yZWdfb2Zmc2V0KTsKIAkJcCsrOwogCX0KIH0KQEAgLTQ4Nyw4ICs3MjIsOCBAQAogCQkJcysrOwogCQl9CiAJCWlmICghZm91bmQpCi0JCQlwcmludGsoS0VSTl9FUlIgIm11eDogVW5rbm93biBiYWxsIG9mZnNldCAweCV4XG4iLAotCQkJCQliLT5yZWdfb2Zmc2V0KTsKKwkJCXByX2VycigiJXM6IFVua25vd24gYmFsbCBvZmZzZXQgMHgleFxuIiwgX19mdW5jX18sCisJCQkgICAgICAgYi0+cmVnX29mZnNldCk7CiAJCWIrKzsKIAl9CiB9CkBAIC01NTQsNyArNzg5LDcgQEAKIH0KIAogc3RhdGljIGludCBfX2luaXQgb21hcF9tdXhfY29weV9uYW1lcyhzdHJ1Y3Qgb21hcF9tdXggKnNyYywKLQkJCQkJc3RydWN0IG9tYXBfbXV4ICpkc3QpCisJCQkJICAgICAgc3RydWN0IG9tYXBfbXV4ICpkc3QpCiB7CiAJaW50IGk7CiAKQEAgLTU5Miw1MSArODI3LDYzIEBACiAKICNlbmRpZgkvKiBDT05GSUdfT01BUF9NVVggKi8KIAotc3RhdGljIHUxNiBvbWFwX211eF9nZXRfYnlfZ3BpbyhpbnQgZ3BpbykKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9tdXggKm9tYXBfbXV4X2dldF9ieV9ncGlvKAorCQkJCXN0cnVjdCBvbWFwX211eF9wYXJ0aXRpb24gKnBhcnRpdGlvbiwKKwkJCQlpbnQgZ3BpbykKIHsKIAlzdHJ1Y3Qgb21hcF9tdXhfZW50cnkgKmU7Ci0JdTE2IG9mZnNldCA9IE9NQVBfTVVYX1RFUk1JTkFUT1I7CisJc3RydWN0IG9tYXBfbXV4ICpyZXQgPSBOVUxMOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShlLCAmbXV4bW9kZXMsIG5vZGUpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGUsICZwYXJ0aXRpb24tPm11eG1vZGVzLCBub2RlKSB7CiAJCXN0cnVjdCBvbWFwX211eCAqbSA9ICZlLT5tdXg7CiAJCWlmIChtLT5ncGlvID09IGdwaW8pIHsKLQkJCW9mZnNldCA9IG0tPnJlZ19vZmZzZXQ7CisJCQlyZXQgPSBtOwogCQkJYnJlYWs7CiAJCX0KIAl9CiAKLQlyZXR1cm4gb2Zmc2V0OworCXJldHVybiByZXQ7CiB9CiAKIC8qIE5lZWRlZCBmb3IgZHluYW1pYyBtdXhpbmcgb2YgR1BJTyBwaW5zIGZvciBvZmYtaWRsZSAqLwogdTE2IG9tYXBfbXV4X2dldF9ncGlvKGludCBncGlvKQogewotCXUxNiBvZmZzZXQ7CisJc3RydWN0IG9tYXBfbXV4X3BhcnRpdGlvbiAqcGFydGl0aW9uOworCXN0cnVjdCBvbWFwX211eCAqbTsKIAotCW9mZnNldCA9IG9tYXBfbXV4X2dldF9ieV9ncGlvKGdwaW8pOwotCWlmIChvZmZzZXQgPT0gT01BUF9NVVhfVEVSTUlOQVRPUikgewotCQlwcmludGsoS0VSTl9FUlIgIm11eDogQ291bGQgbm90IGdldCBncGlvJWlcbiIsIGdwaW8pOwotCQlyZXR1cm4gb2Zmc2V0OworCWxpc3RfZm9yX2VhY2hfZW50cnkocGFydGl0aW9uLCAmbXV4X3BhcnRpdGlvbnMsIG5vZGUpIHsKKwkJbSA9IG9tYXBfbXV4X2dldF9ieV9ncGlvKHBhcnRpdGlvbiwgZ3Bpbyk7CisJCWlmIChtKQorCQkJcmV0dXJuIG9tYXBfbXV4X3JlYWQocGFydGl0aW9uLCBtLT5yZWdfb2Zmc2V0KTsKIAl9CiAKLQlyZXR1cm4gb21hcF9tdXhfcmVhZChvZmZzZXQpOworCWlmICghbSB8fCBtLT5yZWdfb2Zmc2V0ID09IE9NQVBfTVVYX1RFUk1JTkFUT1IpCisJCXByX2VycigiJXM6IENvdWxkIG5vdCBnZXQgZ3BpbyVpXG4iLCBfX2Z1bmNfXywgZ3Bpbyk7CisKKwlyZXR1cm4gT01BUF9NVVhfVEVSTUlOQVRPUjsKIH0KIAogLyogTmVlZGVkIGZvciBkeW5hbWljIG11eGluZyBvZiBHUElPIHBpbnMgZm9yIG9mZi1pZGxlICovCiB2b2lkIG9tYXBfbXV4X3NldF9ncGlvKHUxNiB2YWwsIGludCBncGlvKQogewotCXUxNiBvZmZzZXQ7CisJc3RydWN0IG9tYXBfbXV4X3BhcnRpdGlvbiAqcGFydGl0aW9uOworCXN0cnVjdCBvbWFwX211eCAqbSA9IE5VTEw7CiAKLQlvZmZzZXQgPSBvbWFwX211eF9nZXRfYnlfZ3BpbyhncGlvKTsKLQlpZiAob2Zmc2V0ID09IE9NQVBfTVVYX1RFUk1JTkFUT1IpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJtdXg6IENvdWxkIG5vdCBzZXQgZ3BpbyVpXG4iLCBncGlvKTsKLQkJcmV0dXJuOworCWxpc3RfZm9yX2VhY2hfZW50cnkocGFydGl0aW9uLCAmbXV4X3BhcnRpdGlvbnMsIG5vZGUpIHsKKwkJbSA9IG9tYXBfbXV4X2dldF9ieV9ncGlvKHBhcnRpdGlvbiwgZ3Bpbyk7CisJCWlmIChtKSB7CisJCQlvbWFwX211eF93cml0ZShwYXJ0aXRpb24sIHZhbCwgbS0+cmVnX29mZnNldCk7CisJCQlyZXR1cm47CisJCX0KIAl9CiAKLQlvbWFwX211eF93cml0ZSh2YWwsIG9mZnNldCk7CisJaWYgKCFtIHx8IG0tPnJlZ19vZmZzZXQgPT0gT01BUF9NVVhfVEVSTUlOQVRPUikKKwkJcHJfZXJyKCIlczogQ291bGQgbm90IHNldCBncGlvJWlcbiIsIF9fZnVuY19fLCBncGlvKTsKIH0KIAotc3RhdGljIHN0cnVjdCBvbWFwX211eCAqIF9faW5pdCBvbWFwX211eF9saXN0X2FkZChzdHJ1Y3Qgb21hcF9tdXggKnNyYykKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9tdXggKiBfX2luaXQgb21hcF9tdXhfbGlzdF9hZGQoCisJCQkJCXN0cnVjdCBvbWFwX211eF9wYXJ0aXRpb24gKnBhcnRpdGlvbiwKKwkJCQkJc3RydWN0IG9tYXBfbXV4ICpzcmMpCiB7CiAJc3RydWN0IG9tYXBfbXV4X2VudHJ5ICplbnRyeTsKIAlzdHJ1Y3Qgb21hcF9tdXggKm07CkBAIC02NTYsNyArOTAzLDcgQEAKICNlbmRpZgogCiAJbXV0ZXhfbG9jaygmbXV4bW9kZV9tdXRleCk7Ci0JbGlzdF9hZGRfdGFpbCgmZW50cnktPm5vZGUsICZtdXhtb2Rlcyk7CisJbGlzdF9hZGRfdGFpbCgmZW50cnktPm5vZGUsICZwYXJ0aXRpb24tPm11eG1vZGVzKTsKIAltdXRleF91bmxvY2soJm11eG1vZGVfbXV0ZXgpOwogCiAJcmV0dXJuIG07CkBAIC02NjcsNyArOTE0LDggQEAKICAqIHRoZSBHUElPIHRvIG11eCBvZmZzZXQgbWFwcGluZyB0aGF0IGlzIG5lZWRlZCBmb3IgZHluYW1pYyBtdXhpbmcKICAqIG9mIEdQSU8gcGlucyBmb3Igb2ZmLWlkbGUuCiAgKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBvbWFwX211eF9pbml0X2xpc3Qoc3RydWN0IG9tYXBfbXV4ICpzdXBlcnNldCkKK3N0YXRpYyB2b2lkIF9faW5pdCBvbWFwX211eF9pbml0X2xpc3Qoc3RydWN0IG9tYXBfbXV4X3BhcnRpdGlvbiAqcGFydGl0aW9uLAorCQkJCSAgICAgIHN0cnVjdCBvbWFwX211eCAqc3VwZXJzZXQpCiB7CiAJd2hpbGUgKHN1cGVyc2V0LT5yZWdfb2Zmc2V0ICE9ICBPTUFQX01VWF9URVJNSU5BVE9SKSB7CiAJCXN0cnVjdCBvbWFwX211eCAqZW50cnk7CkBAIC02NzksMTUgKzkyNywxNiBAQAogCQl9CiAjZWxzZQogCQkvKiBTa2lwIHBpbnMgdGhhdCBhcmUgbm90IG11eGVkIGFzIEdQSU8gYnkgYm9vdGxvYWRlciAqLwotCQlpZiAoIU9NQVBfTU9ERV9HUElPKG9tYXBfbXV4X3JlYWQoc3VwZXJzZXQtPnJlZ19vZmZzZXQpKSkgeworCQlpZiAoIU9NQVBfTU9ERV9HUElPKG9tYXBfbXV4X3JlYWQocGFydGl0aW9uLAorCQkJCSAgICBzdXBlcnNldC0+cmVnX29mZnNldCkpKSB7CiAJCQlzdXBlcnNldCsrOwogCQkJY29udGludWU7CiAJCX0KICNlbmRpZgogCi0JCWVudHJ5ID0gb21hcF9tdXhfbGlzdF9hZGQoc3VwZXJzZXQpOworCQllbnRyeSA9IG9tYXBfbXV4X2xpc3RfYWRkKHBhcnRpdGlvbiwgc3VwZXJzZXQpOwogCQlpZiAoIWVudHJ5KSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIm11eDogQ291bGQgbm90IGFkZCBlbnRyeVxuIik7CisJCQlwcl9lcnIoIiVzOiBDb3VsZCBub3QgYWRkIGVudHJ5XG4iLCBfX2Z1bmNfXyk7CiAJCQlyZXR1cm47CiAJCX0KIAkJc3VwZXJzZXQrKzsKQEAgLTcwNiwxMCArOTU1LDExIEBACiAJCW9tYXBfbXV4X3BhY2thZ2VfaW5pdF9iYWxscyhwYWNrYWdlX2JhbGxzLCBzdXBlcnNldCk7CiB9CiAKLXN0YXRpYyB2b2lkIG9tYXBfbXV4X2luaXRfc2lnbmFscyhzdHJ1Y3Qgb21hcF9ib2FyZF9tdXggKmJvYXJkX211eCkKK3N0YXRpYyB2b2lkIG9tYXBfbXV4X2luaXRfc2lnbmFscyhzdHJ1Y3Qgb21hcF9tdXhfcGFydGl0aW9uICpwYXJ0aXRpb24sCisJCQkJICBzdHJ1Y3Qgb21hcF9ib2FyZF9tdXggKmJvYXJkX211eCkKIHsKIAlvbWFwX211eF9zZXRfY21kbGluZV9zaWduYWxzKCk7Ci0Jb21hcF9tdXhfd3JpdGVfYXJyYXkoYm9hcmRfbXV4KTsKKwlvbWFwX211eF93cml0ZV9hcnJheShwYXJ0aXRpb24sIGJvYXJkX211eCk7CiB9CiAKICNlbHNlCkBAIC03MjAsMzQgKzk3MCw0OSBAQAogewogfQogCi1zdGF0aWMgdm9pZCBvbWFwX211eF9pbml0X3NpZ25hbHMoc3RydWN0IG9tYXBfYm9hcmRfbXV4ICpib2FyZF9tdXgpCitzdGF0aWMgdm9pZCBvbWFwX211eF9pbml0X3NpZ25hbHMoc3RydWN0IG9tYXBfbXV4X3BhcnRpdGlvbiAqcGFydGl0aW9uLAorCQkJCSAgc3RydWN0IG9tYXBfYm9hcmRfbXV4ICpib2FyZF9tdXgpCiB7CiB9CiAKICNlbmRpZgogCi1pbnQgX19pbml0IG9tYXBfbXV4X2luaXQodTMyIG11eF9wYmFzZSwgdTMyIG11eF9zaXplLAotCQkJCXN0cnVjdCBvbWFwX211eCAqc3VwZXJzZXQsCi0JCQkJc3RydWN0IG9tYXBfbXV4ICpwYWNrYWdlX3N1YnNldCwKLQkJCQlzdHJ1Y3Qgb21hcF9ib2FyZF9tdXggKmJvYXJkX211eCwKLQkJCQlzdHJ1Y3Qgb21hcF9iYWxsICpwYWNrYWdlX2JhbGxzKQotewotCWlmIChtdXhfYmFzZSkKLQkJcmV0dXJuIC1FQlVTWTsKK3N0YXRpYyB1MzIgbXV4X3BhcnRpdGlvbnNfY250OwogCi0JbXV4X3BoeXMgPSBtdXhfcGJhc2U7Ci0JbXV4X2Jhc2UgPSBpb3JlbWFwKG11eF9wYmFzZSwgbXV4X3NpemUpOwotCWlmICghbXV4X2Jhc2UpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJtdXg6IENvdWxkIG5vdCBpb3JlbWFwXG4iKTsKK2ludCBfX2luaXQgb21hcF9tdXhfaW5pdChjb25zdCBjaGFyICpuYW1lLCB1MzIgZmxhZ3MsCisJCQkgdTMyIG11eF9wYmFzZSwgdTMyIG11eF9zaXplLAorCQkJIHN0cnVjdCBvbWFwX211eCAqc3VwZXJzZXQsCisJCQkgc3RydWN0IG9tYXBfbXV4ICpwYWNrYWdlX3N1YnNldCwKKwkJCSBzdHJ1Y3Qgb21hcF9ib2FyZF9tdXggKmJvYXJkX211eCwKKwkJCSBzdHJ1Y3Qgb21hcF9iYWxsICpwYWNrYWdlX2JhbGxzKQoreworCXN0cnVjdCBvbWFwX211eF9wYXJ0aXRpb24gKnBhcnRpdGlvbjsKKworCXBhcnRpdGlvbiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBvbWFwX211eF9wYXJ0aXRpb24pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBhcnRpdGlvbikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwYXJ0aXRpb24tPm5hbWUgPSBuYW1lOworCXBhcnRpdGlvbi0+ZmxhZ3MgPSBmbGFnczsKKwlwYXJ0aXRpb24tPnNpemUgPSBtdXhfc2l6ZTsKKwlwYXJ0aXRpb24tPnBoeXMgPSBtdXhfcGJhc2U7CisJcGFydGl0aW9uLT5iYXNlID0gaW9yZW1hcChtdXhfcGJhc2UsIG11eF9zaXplKTsKKwlpZiAoIXBhcnRpdGlvbi0+YmFzZSkgeworCQlwcl9lcnIoIiVzOiBDb3VsZCBub3QgaW9yZW1hcCBtdXggcGFydGl0aW9uIGF0IDB4JTA4eFxuIiwKKwkJCV9fZnVuY19fLCBwYXJ0aXRpb24tPnBoeXMpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlpZiAoY3B1X2lzX29tYXAyNHh4KCkpCi0JCW9tYXBfbXV4X2ZsYWdzID0gTVVYQUJMRV9HUElPX01PREUzOworCUlOSVRfTElTVF9IRUFEKCZwYXJ0aXRpb24tPm11eG1vZGVzKTsKKworCWxpc3RfYWRkX3RhaWwoJnBhcnRpdGlvbi0+bm9kZSwgJm11eF9wYXJ0aXRpb25zKTsKKwltdXhfcGFydGl0aW9uc19jbnQrKzsKKwlwcl9pbmZvKCIlczogQWRkIHBhcnRpdGlvbjogIyVkOiAlcywgZmxhZ3M6ICV4XG4iLCBfX2Z1bmNfXywKKwkJbXV4X3BhcnRpdGlvbnNfY250LCBwYXJ0aXRpb24tPm5hbWUsIHBhcnRpdGlvbi0+ZmxhZ3MpOwogCiAJb21hcF9tdXhfaW5pdF9wYWNrYWdlKHN1cGVyc2V0LCBwYWNrYWdlX3N1YnNldCwgcGFja2FnZV9iYWxscyk7Ci0Jb21hcF9tdXhfaW5pdF9saXN0KHN1cGVyc2V0KTsKLQlvbWFwX211eF9pbml0X3NpZ25hbHMoYm9hcmRfbXV4KTsKKwlvbWFwX211eF9pbml0X2xpc3QocGFydGl0aW9uLCBzdXBlcnNldCk7CisJb21hcF9tdXhfaW5pdF9zaWduYWxzKHBhcnRpdGlvbiwgYm9hcmRfbXV4KTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmgKaW5kZXggMzUwYzA0Zi4uYTRhYjE3YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5oCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYQotICogQ29weXJpZ2h0IChDKSAyMDA5IFRleGFzIEluc3RydW1lbnRzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBUZXhhcyBJbnN0cnVtZW50cwogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwpAQCAtMTAsNiArMTAsNyBAQAogI2luY2x1ZGUgIm11eDI0MjAuaCIKICNpbmNsdWRlICJtdXgyNDMwLmgiCiAjaW5jbHVkZSAibXV4MzR4eC5oIgorI2luY2x1ZGUgIm11eDQ0eHguaCIKIAogI2RlZmluZSBPTUFQX01VWF9URVJNSU5BVE9SCTB4ZmZmZgogCkBAIC0zNyw2ICszOCw5IEBACiAjZGVmaW5lIE9NQVBfT0ZGX1BVTExfVVAJCSgxIDw8IDEzKQogI2RlZmluZSBPTUFQX1dBS0VVUF9FTgkJCSgxIDw8IDE0KQogCisvKiA0NHh4IHNwZWNpZmljIG11eCBiaXQgZGVmaW5lcyAqLworI2RlZmluZSBPTUFQX1dBS0VVUF9FVkVOVAkJKDEgPDwgMTUpCisKIC8qIEFjdGl2ZSBwaW4gc3RhdGVzICovCiAjZGVmaW5lIE9NQVBfUElOX09VVFBVVAkJCTAKICNkZWZpbmUgT01BUF9QSU5fSU5QVVQJCQlPTUFQX0lOUFVUX0VOCkBAIC01Niw4ICs2MCwxMCBAQAogCiAjZGVmaW5lIE9NQVBfTU9ERV9HUElPKHgpCSgoKHgpICYgT01BUF9NVVhfTU9ERTcpID09IE9NQVBfTVVYX01PREU0KQogCi0vKiBGbGFncyBmb3Igb21hcF9tdXhfaW5pdCAqLworLyogRmxhZ3MgZm9yIG9tYXBYX211eF9pbml0ICovCiAjZGVmaW5lIE9NQVBfUEFDS0FHRV9NQVNLCQkweGZmZmYKKyNkZWZpbmUgT01BUF9QQUNLQUdFX0NCUwkJOAkJLyogNTQ3LXBpbiAwLjQwIDAuNDAgKi8KKyNkZWZpbmUgT01BUF9QQUNLQUdFX0NCTAkJNwkJLyogNTQ3LXBpbiAwLjQwIDAuNDAgKi8KICNkZWZpbmUgT01BUF9QQUNLQUdFX0NCUAkJNgkJLyogNTE1LXBpbiAwLjQwIDAuNTAgKi8KICNkZWZpbmUgT01BUF9QQUNLQUdFX0NVUwkJNQkJLyogNDIzLXBpbiAwLjY1ICovCiAjZGVmaW5lIE9NQVBfUEFDS0FHRV9DQkIJCTQJCS8qIDUxNS1waW4gMC40MCAwLjUwICovCkBAIC02NiwxNCArNzIsNjEgQEAKICNkZWZpbmUgT01BUF9QQUNLQUdFX1pBRgkJMQkJLyogMjQyMCA0NDctcGluIFNJUCAqLwogCiAKLSNkZWZpbmUgT01BUF9NVVhfTlJfTU9ERVMJOAkJCS8qIEF2YWlsYWJsZSBtb2RlcyAqLwotI2RlZmluZSBPTUFQX01VWF9OUl9TSURFUwkyCQkJLyogQm90dG9tICYgdG9wICovCisjZGVmaW5lIE9NQVBfTVVYX05SX01PREVTCQk4CQkvKiBBdmFpbGFibGUgbW9kZXMgKi8KKyNkZWZpbmUgT01BUF9NVVhfTlJfU0lERVMJCTIJCS8qIEJvdHRvbSAmIHRvcCAqLworCisvKgorICogb21hcF9tdXhfaW5pdCBmbGFncyBkZWZpbml0aW9uOgorICoKKyAqIE9NQVBfTVVYX1JFR184QklUOiBFbnN1cmUgdGhhdCBhY2Nlc3MgdG8gcGFkY29uZiBpcyBkb25lIGluIDggYml0cy4KKyAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDE2IGJpdHMuCisgKiBPTUFQX01VWF9HUElPX0lOX01PREUzOiBUaGUgR1BJTyBpcyBzZWxlY3RlZCBpbiBtb2RlMy4KKyAqIFRoZSBkZWZhdWx0IGlzIG1vZGU0LgorICovCisjZGVmaW5lIE9NQVBfTVVYX1JFR184QklUCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQX01VWF9HUElPX0lOX01PREUzCQkoMSA8PCAxKQorCisvKioKKyAqIHN0cnVjdCBvbWFwX2JvYXJkX2RhdGEgLSBib2FyZCBzcGVjaWZpYyBkZXZpY2UgZGF0YQorICogQGlkOiBpbnN0YW5jZSBpZAorICogQGZsYWdzOiBhZGRpdGlvbmFsIGZsYWdzIGZvciBwbGF0Zm9ybSBpbml0IGNvZGUKKyAqIEBwYWRzOiBhcnJheSBvZiBkZXZpY2Ugc3BlY2lmaWMgcGFkcworICogQHBhZHNfY250OiBBUlJBWV9TSVpFKCkgb2YgcGFkcworICovCitzdHJ1Y3Qgb21hcF9ib2FyZF9kYXRhIHsKKwlpbnQJCQlpZDsKKwl1MzIJCQlmbGFnczsKKwlzdHJ1Y3Qgb21hcF9kZXZpY2VfcGFkCSpwYWRzOworCWludAkJCXBhZHNfY250OworfTsKKworLyoqCisgKiBzdHJ1Y3QgbXV4X3BhcnRpdGlvbiAtIGNvbnRhaW4gcGFydGl0aW9uIHJlbGF0ZWQgaW5mb3JtYXRpb24KKyAqIEBuYW1lOiBuYW1lIG9mIHRoZSBjdXJyZW50IHBhcnRpdGlvbgorICogQGZsYWdzOiBmbGFncyBzcGVjaWZpYyB0byB0aGlzIHBhcnRpdGlvbgorICogQHBoeXM6IHBoeXNpY2FsIGFkZHJlc3MKKyAqIEBzaXplOiBwYXJ0aXRpb24gc2l6ZQorICogQGJhc2U6IHZpcnR1YWwgYWRkcmVzcyBhZnRlciBpb3JlbWFwCisgKiBAbXV4bW9kZXM6IGxpc3Qgb2Ygbm9kZXMgdGhhdCBiZWxvbmcgdG8gYSBwYXJ0aXRpb24KKyAqIEBub2RlOiBsaXN0IG5vZGUgZm9yIHRoZSBwYXJ0aXRpb25zIGxpbmtlZCBsaXN0CisgKi8KK3N0cnVjdCBvbWFwX211eF9wYXJ0aXRpb24geworCWNvbnN0IGNoYXIJCSpuYW1lOworCXUzMgkJCWZsYWdzOworCXUzMgkJCXBoeXM7CisJdTMyCQkJc2l6ZTsKKwl2b2lkIF9faW9tZW0JCSpiYXNlOworCXN0cnVjdCBsaXN0X2hlYWQJbXV4bW9kZXM7CisJc3RydWN0IGxpc3RfaGVhZAlub2RlOworfTsKIAogLyoqCiAgKiBzdHJ1Y3Qgb21hcF9tdXggLSBkYXRhIGZvciBvbWFwIG11eCByZWdpc3RlciBvZmZzZXQgYW5kIGl0J3MgdmFsdWUKICAqIEByZWdfb2Zmc2V0OgltdXggcmVnaXN0ZXIgb2Zmc2V0IGZyb20gdGhlIG11eCBiYXNlCiAgKiBAZ3BpbzoJR1BJTyBudW1iZXIKICAqIEBtdXhuYW1lczoJYXZhaWxhYmxlIHNpZ25hbCBtb2RlcyBmb3IgYSBiYWxsCisgKiBAYmFsbHM6CWF2YWlsYWJsZSBiYWxscyBvbiB0aGUgcGFja2FnZQorICogQHBhcnRpdGlvbjoJbXV4IHBhcnRpdGlvbgogICovCiBzdHJ1Y3Qgb21hcF9tdXggewogCXUxNglyZWdfb2Zmc2V0OwpAQCAtMTA2LDYgKzE1OSwzNCBAQAogCXUxNgl2YWx1ZTsKIH07CiAKKyNkZWZpbmUgT01BUF9ERVZJQ0VfUEFEX0VOQUJMRUQJCUJJVCg3KQkvKiBOb3QgbmVlZGVkIGZvciBib2FyZC0qLmMgKi8KKyNkZWZpbmUgT01BUF9ERVZJQ0VfUEFEX1JFTVVYCQlCSVQoMSkJLyogRHluYW1pY2FsbHkgcmVtdXggYSBwYWQsCisJCQkJCQkgICBuZWVkcyBlbmFibGUsIGlkbGUgYW5kIG9mZgorCQkJCQkJICAgdmFsdWVzICovCisjZGVmaW5lIE9NQVBfREVWSUNFX1BBRF9XQUtFVVAJCUJJVCgwKQkvKiBQYWQgaXMgd2FrZS11cCBjYXBhYmxlICovCisKKy8qKgorICogc3RydWN0IG9tYXBfZGV2aWNlX3BhZCAtIGRldmljZSBzcGVjaWZpYyBwYWQgY29uZmlndXJhdGlvbgorICogQG5hbWU6CQlzaWduYWwgbmFtZQorICogQGZsYWdzOgkJcGFkIHNwZWNpZmljIHJ1bnRpbWUgZmxhZ3MKKyAqIEBlbmFibGU6CQlydW50aW1lIHZhbHVlIGZvciBhIHBhZAorICogQGlkbGU6CQlpZGxlIHZhbHVlIGZvciBhIHBhZAorICogQG9mZjoJCW9mZiB2YWx1ZSBmb3IgYSBwYWQsIGRlZmF1bHRzIHRvIHNhZmUgbW9kZQorICogQHBhcnRpdGlvbjoJCW11eCBwYXJ0aXRpb24KKyAqIEBtdXg6CQltdXggcmVnaXN0ZXIKKyAqLworc3RydWN0IG9tYXBfZGV2aWNlX3BhZCB7CisJY2hhcgkJCQkqbmFtZTsKKwl1OAkJCQlmbGFnczsKKwl1MTYJCQkJZW5hYmxlOworCXUxNgkJCQlpZGxlOworCXUxNgkJCQlvZmY7CisJc3RydWN0IG9tYXBfbXV4X3BhcnRpdGlvbgkqcGFydGl0aW9uOworCXN0cnVjdCBvbWFwX211eAkJCSptdXg7Cit9OworCitzdHJ1Y3Qgb21hcF9od21vZF9tdXhfaW5mbzsKKwogI2lmIGRlZmluZWQoQ09ORklHX09NQVBfTVVYKQogCiAvKioKQEAgLTEyMiw2ICsyMDMsMjMgQEAKICAqLwogaW50IG9tYXBfbXV4X2luaXRfc2lnbmFsKGNvbnN0IGNoYXIgKm11eG5hbWUsIGludCB2YWwpOwogCisvKioKKyAqIG9tYXBfaHdtb2RfbXV4X2luaXQgLSBpbml0aWFsaXplIGh3bW9kIHNwZWNpZmljIG11eCBkYXRhCisgKiBAYnBhZHM6CQlCb2FyZCBzcGVjaWZpYyBkZXZpY2Ugc2lnbmFsIG5hbWVzCisgKiBAbnJfcGFkczoJCU51bWJlciBvZiBzaWduYWwgbmFtZXMgZm9yIHRoZSBkZXZpY2UKKyAqLworZXh0ZXJuIHN0cnVjdCBvbWFwX2h3bW9kX211eF9pbmZvICoKK29tYXBfaHdtb2RfbXV4X2luaXQoc3RydWN0IG9tYXBfZGV2aWNlX3BhZCAqYnBhZHMsIGludCBucl9wYWRzKTsKKworLyoqCisgKiBvbWFwX2h3bW9kX211eCAtIG9tYXAgaHdtb2Qgc3BlY2lmaWMgcGluIG11eGluZworICogQGhtdXg6CQlQYWRzIGZvciBhIGh3bW9kCisgKiBAc3RhdGU6CQlEZXNpcmVkIF9IV01PRF9TVEFURQorICoKKyAqIENhbGxlZCBvbmx5IGZyb20gb21hcF9od21vZC5jLCBkbyBub3QgdXNlLgorICovCit2b2lkIG9tYXBfaHdtb2RfbXV4KHN0cnVjdCBvbWFwX2h3bW9kX211eF9pbmZvICpobXV4LCB1OCBzdGF0ZSk7CisKICNlbHNlCiAKIHN0YXRpYyBpbmxpbmUgaW50IG9tYXBfbXV4X2luaXRfZ3BpbyhpbnQgZ3BpbywgaW50IHZhbCkKQEAgLTEzMyw2ICsyMzEsMTggQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGlubGluZSBzdHJ1Y3Qgb21hcF9od21vZF9tdXhfaW5mbyAqCitvbWFwX2h3bW9kX211eF9pbml0KHN0cnVjdCBvbWFwX2RldmljZV9wYWQgKmJwYWRzLCBpbnQgbnJfcGFkcykKK3sKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG9tYXBfaHdtb2RfbXV4KHN0cnVjdCBvbWFwX2h3bW9kX211eF9pbmZvICpobXV4LCB1OCBzdGF0ZSkKK3sKK30KKworc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX211eCAqYm9hcmRfbXV4IF9faW5pdGRhdGEgX19tYXliZV91bnVzZWQ7CisKICNlbmRpZgogCiAvKioKQEAgLTE1MSwyOCArMjYxLDM5IEBACiB2b2lkIG9tYXBfbXV4X3NldF9ncGlvKHUxNiB2YWwsIGludCBncGlvKTsKIAogLyoqCisgKiBvbWFwX211eF9nZXQoKSAtIGdldCBhIG11eCBwYXJ0aXRpb24gYnkgbmFtZQorICogQG5hbWU6CQlOYW1lIG9mIHRoZSBtdXggcGFydGl0aW9uCisgKgorICovCitzdHJ1Y3Qgb21hcF9tdXhfcGFydGl0aW9uICpvbWFwX211eF9nZXQoY29uc3QgY2hhciAqbmFtZSk7CisKKy8qKgogICogb21hcF9tdXhfcmVhZCgpIC0gcmVhZCBtdXggcmVnaXN0ZXIKKyAqIEBwYXJ0aXRpb246CQlNdXggcGFydGl0aW9uCiAgKiBAbXV4X29mZnNldDoJCU9mZnNldCBvZiB0aGUgbXV4IHJlZ2lzdGVyCiAgKgogICovCi11MTYgb21hcF9tdXhfcmVhZCh1MTYgbXV4X29mZnNldCk7Cit1MTYgb21hcF9tdXhfcmVhZChzdHJ1Y3Qgb21hcF9tdXhfcGFydGl0aW9uICpwLCB1MTYgbXV4X29mZnNldCk7CiAKIC8qKgogICogb21hcF9tdXhfd3JpdGUoKSAtIHdyaXRlIG11eCByZWdpc3RlcgorICogQHBhcnRpdGlvbjoJCU11eCBwYXJ0aXRpb24KICAqIEB2YWw6CQlOZXcgbXV4IHJlZ2lzdGVyIHZhbHVlCiAgKiBAbXV4X29mZnNldDoJCU9mZnNldCBvZiB0aGUgbXV4IHJlZ2lzdGVyCiAgKgogICogVGhpcyBzaG91bGQgYmUgb25seSBuZWVkZWQgZm9yIGR5bmFtaWMgcmVtdXhpbmcgb2Ygbm9uLWdwaW8gc2lnbmFscy4KICAqLwotdm9pZCBvbWFwX211eF93cml0ZSh1MTYgdmFsLCB1MTYgbXV4X29mZnNldCk7Cit2b2lkIG9tYXBfbXV4X3dyaXRlKHN0cnVjdCBvbWFwX211eF9wYXJ0aXRpb24gKnAsIHUxNiB2YWwsIHUxNiBtdXhfb2Zmc2V0KTsKIAogLyoqCiAgKiBvbWFwX211eF93cml0ZV9hcnJheSgpIC0gd3JpdGUgYW4gYXJyYXkgb2YgbXV4IHJlZ2lzdGVycworICogQHBhcnRpdGlvbjoJCU11eCBwYXJ0aXRpb24KICAqIEBib2FyZF9tdXg6CQlBcnJheSBvZiBtdXggcmVnaXN0ZXJzIHRlcm1pbmF0ZWQgYnkgTUFQX01VWF9URVJNSU5BVE9SCiAgKgogICogVGhpcyBzaG91bGQgYmUgb25seSBuZWVkZWQgZm9yIGR5bmFtaWMgcmVtdXhpbmcgb2Ygbm9uLWdwaW8gc2lnbmFscy4KICAqLwotdm9pZCBvbWFwX211eF93cml0ZV9hcnJheShzdHJ1Y3Qgb21hcF9ib2FyZF9tdXggKmJvYXJkX211eCk7Cit2b2lkIG9tYXBfbXV4X3dyaXRlX2FycmF5KHN0cnVjdCBvbWFwX211eF9wYXJ0aXRpb24gKnAsCisJCQkgIHN0cnVjdCBvbWFwX2JvYXJkX211eCAqYm9hcmRfbXV4KTsKIAogLyoqCiAgKiBvbWFwMjQyMF9tdXhfaW5pdCgpIC0gaW5pdGlhbGl6ZSBtdXggc3lzdGVtIHdpdGggYm9hcmQgc3BlY2lmaWMgc2V0CkBAIC0xOTYsMTAgKzMxNywxOSBAQAogaW50IG9tYXAzX211eF9pbml0KHN0cnVjdCBvbWFwX2JvYXJkX211eCAqYm9hcmRfbXV4LCBpbnQgZmxhZ3MpOwogCiAvKioKKyAqIG9tYXA0X211eF9pbml0KCkgLSBpbml0aWFsaXplIG11eCBzeXN0ZW0gd2l0aCBib2FyZCBzcGVjaWZpYyBzZXQKKyAqIEBib2FyZF9tdXg6CQlCb2FyZCBzcGVjaWZpYyBtdXggdGFibGUKKyAqIEBmbGFnczoJCU9NQVAgcGFja2FnZSB0eXBlIHVzZWQgZm9yIHRoZSBib2FyZAorICovCitpbnQgb21hcDRfbXV4X2luaXQoc3RydWN0IG9tYXBfYm9hcmRfbXV4ICpib2FyZF9tdXgsIGludCBmbGFncyk7CisKKy8qKgogICogb21hcF9tdXhfaW5pdCAtIHByaXZhdGUgbXV4IGluaXQgZnVuY3Rpb24sIGRvIG5vdCBjYWxsCiAgKi8KLWludCBvbWFwX211eF9pbml0KHUzMiBtdXhfcGJhc2UsIHUzMiBtdXhfc2l6ZSwKLQkJCQlzdHJ1Y3Qgb21hcF9tdXggKnN1cGVyc2V0LAotCQkJCXN0cnVjdCBvbWFwX211eCAqcGFja2FnZV9zdWJzZXQsCi0JCQkJc3RydWN0IG9tYXBfYm9hcmRfbXV4ICpib2FyZF9tdXgsCi0JCQkJc3RydWN0IG9tYXBfYmFsbCAqcGFja2FnZV9iYWxscyk7CitpbnQgb21hcF9tdXhfaW5pdChjb25zdCBjaGFyICpuYW1lLCB1MzIgZmxhZ3MsCisJCSAgdTMyIG11eF9wYmFzZSwgdTMyIG11eF9zaXplLAorCQkgIHN0cnVjdCBvbWFwX211eCAqc3VwZXJzZXQsCisJCSAgc3RydWN0IG9tYXBfbXV4ICpwYWNrYWdlX3N1YnNldCwKKwkJICBzdHJ1Y3Qgb21hcF9ib2FyZF9tdXggKmJvYXJkX211eCwKKwkJICBzdHJ1Y3Qgb21hcF9iYWxsICpwYWNrYWdlX2JhbGxzKTsKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXgyNDIwLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL211eDI0MjAuYwppbmRleCA0MTRhZjU0Li5jZjZkZTA5NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXgyNDIwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXgyNDIwLmMKQEAgLTY3OCwxMSArNjc4LDEzIEBACiAJY2FzZSBPTUFQX1BBQ0tBR0VfWkFGOgogCQkvKiBSRVZJU0lUOiBQbGVhc2UgYWRkIGRhdGEgKi8KIAlkZWZhdWx0OgotCQlwcl93YXJuaW5nKCJtdXg6IE5vIGJhbGwgZGF0YSBhdmFpbGFibGUgZm9yIG9tYXAyNDIwIHBhY2thZ2VcbiIpOworCQlwcl93YXJuaW5nKCIlczogTm8gYmFsbCBkYXRhIGF2YWlsYWJsZSBmb3Igb21hcDI0MjAgcGFja2FnZVxuIiwKKwkJCQlfX2Z1bmNfXyk7CiAJfQogCi0JcmV0dXJuIG9tYXBfbXV4X2luaXQoT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX01VWF9QQkFTRSwKKwlyZXR1cm4gb21hcF9tdXhfaW5pdCgiY29yZSIsIE9NQVBfTVVYX1JFR184QklUIHwgT01BUF9NVVhfR1BJT19JTl9NT0RFMywKKwkJCSAgICAgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX01VWF9QQkFTRSwKIAkJCSAgICAgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX01VWF9TSVpFLAotCQkJCW9tYXAyNDIwX211eG1vZGVzLCBOVUxMLCBib2FyZF9zdWJzZXQsCi0JCQkJcGFja2FnZV9iYWxscyk7CisJCQkgICAgIG9tYXAyNDIwX211eG1vZGVzLCBOVUxMLCBib2FyZF9zdWJzZXQsCisJCQkgICAgIHBhY2thZ2VfYmFsbHMpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXgyNDMwLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL211eDI0MzAuYwppbmRleCA4NGQyYzVhLi40MTg1ZjkyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL211eDI0MzAuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL211eDI0MzAuYwpAQCAtNzgxLDExICs3ODEsMTMgQEAKIAkJcGFja2FnZV9iYWxscyA9IG9tYXAyNDMwX3BvcF9iYWxsOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlwcl93YXJuaW5nKCJtdXg6IE5vIGJhbGwgZGF0YSBhdmFpbGFibGUgZm9yIG9tYXAyNDIwIHBhY2thZ2VcbiIpOworCQlwcl93YXJuaW5nKCIlczogTm8gYmFsbCBkYXRhIGF2YWlsYWJsZSBmb3Igb21hcDI0MjAgcGFja2FnZVxuIiwKKwkJCQlfX2Z1bmNfXyk7CiAJfQogCi0JcmV0dXJuIG9tYXBfbXV4X2luaXQoT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX01VWF9QQkFTRSwKKwlyZXR1cm4gb21hcF9tdXhfaW5pdCgiY29yZSIsIE9NQVBfTVVYX1JFR184QklUIHwgT01BUF9NVVhfR1BJT19JTl9NT0RFMywKKwkJCSAgICAgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX01VWF9QQkFTRSwKIAkJCSAgICAgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX01VWF9TSVpFLAotCQkJCW9tYXAyNDMwX211eG1vZGVzLCBOVUxMLCBib2FyZF9zdWJzZXQsCi0JCQkJcGFja2FnZV9iYWxscyk7CisJCQkgICAgIG9tYXAyNDMwX211eG1vZGVzLCBOVUxMLCBib2FyZF9zdWJzZXQsCisJCQkgICAgIHBhY2thZ2VfYmFsbHMpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXgzNHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL211eDM0eHguYwppbmRleCA1NzRlNTRlLi40NDBjOThlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL211eDM0eHguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL211eDM0eHguYwpAQCAtMjA0OSwxMiArMjA0OSwxMyBAQAogCQlwYWNrYWdlX2JhbGxzID0gb21hcDM2eHhfY2JwX2JhbGw7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0VSUiAibXV4OiBVbmtub3duIG9tYXAgcGFja2FnZSwgbXV4IGRpc2FibGVkXG4iKTsKKwkJcHJfZXJyKCIlcyBVbmtub3duIG9tYXAgcGFja2FnZSwgbXV4IGRpc2FibGVkXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXJldHVybiBvbWFwX211eF9pbml0KE9NQVAzX0NPTlRST0xfUEFEQ09ORl9NVVhfUEJBU0UsCisJcmV0dXJuIG9tYXBfbXV4X2luaXQoImNvcmUiLCAwLAorCQkJICAgICBPTUFQM19DT05UUk9MX1BBRENPTkZfTVVYX1BCQVNFLAogCQkJICAgICBPTUFQM19DT05UUk9MX1BBRENPTkZfTVVYX1NJWkUsCi0JCQkJb21hcDNfbXV4bW9kZXMsIHBhY2thZ2Vfc3Vic2V0LCBib2FyZF9zdWJzZXQsCi0JCQkJcGFja2FnZV9iYWxscyk7CisJCQkgICAgIG9tYXAzX211eG1vZGVzLCBwYWNrYWdlX3N1YnNldCwgYm9hcmRfc3Vic2V0LAorCQkJICAgICBwYWNrYWdlX2JhbGxzKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4NDR4eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXg0NHh4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTgwZjExZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4NDR4eC5jCkBAIC0wLDAgKzEsMTYyNSBAQAorLyoKKyAqIE9NQVA0NHh4IEVTMS4wIHBpbiBtdXggZGVmaW5pdGlvbgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIEJlbm9pdCBDb3Vzc29uIChiLWNvdXNzb25AdGkuY29tKQorICoKKyAqIC0gQmFzZWQgb24gbXV4MzR4eC5jIGRvbmUgYnkgVG9ueSBMaW5kZ3JlbiA8dG9ueUBhdG9taWRlLmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0aGUgT01BUCBoYXJkd2FyZSBkYXRhYmFzZXMuCisgKiBXZSByZXNwZWN0ZnVsbHkgYXNrIHRoYXQgYW55IG1vZGlmaWNhdGlvbnMgdG8gdGhpcyBmaWxlIGJlIGNvb3JkaW5hdGVkCisgKiB3aXRoIHRoZSBwdWJsaWMgbGludXgtb21hcEB2Z2VyLmtlcm5lbC5vcmcgbWFpbGluZyBsaXN0IGFuZCB0aGUKKyAqIGF1dGhvcnMgYWJvdmUgdG8gZW5zdXJlIHRoYXQgdGhlIGF1dG9nZW5lcmF0aW9uIHNjcmlwdHMgYXJlIGtlcHQKKyAqIHVwLXRvLWRhdGUgd2l0aCB0aGUgZmlsZSBjb250ZW50cy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSAibXV4LmgiCisKKyNpZmRlZiBDT05GSUdfT01BUF9NVVgKKworI2RlZmluZSBfT01BUDRfTVVYRU5UUlkoTTAsIGcsIG0wLCBtMSwgbTIsIG0zLCBtNCwgbTUsIG02LCBtNykJXAorewkJCQkJCQkJCVwKKwkucmVnX29mZnNldAk9IChPTUFQNF9DVFJMX01PRFVMRV9QQURfIyNNMCMjX09GRlNFVCksCVwKKwkuZ3BpbwkJPSAoZyksCQkJCQkJXAorCS5tdXhuYW1lcwk9IHsgbTAsIG0xLCBtMiwgbTMsIG00LCBtNSwgbTYsIG03IH0sCQlcCit9CisKKyNlbHNlCisKKyNkZWZpbmUgX09NQVA0X01VWEVOVFJZKE0wLCBnLCBtMCwgbTEsIG0yLCBtMywgbTQsIG01LCBtNiwgbTcpCVwKK3sJCQkJCQkJCQlcCisJLnJlZ19vZmZzZXQJPSAoT01BUDRfQ1RSTF9NT0RVTEVfUEFEXyMjTTAjI19PRkZTRVQpLAlcCisJLmdwaW8JCT0gKGcpLAkJCQkJCVwKK30KKworI2VuZGlmCisKKyNkZWZpbmUgX09NQVA0X0JBTExFTlRSWShNMCwgYmIsIGJ0KQkJCQlcCit7CQkJCQkJCQkJXAorCS5yZWdfb2Zmc2V0CT0gKE9NQVA0X0NUUkxfTU9EVUxFX1BBRF8jI00wIyNfT0ZGU0VUKSwJXAorCS5iYWxscwkJPSB7IGJiLCBidCB9LAkJCQkJXAorfQorCisvKgorICogU3VwZXJzZXQgb2YgYWxsIG11eCBtb2RlcyBmb3Igb21hcDQgRVMxLjAKKyAqLworc3RhdGljIHN0cnVjdCBvbWFwX211eCBfX2luaXRkYXRhIG9tYXA0X2NvcmVfbXV4bW9kZXNbXSA9IHsKKwlfT01BUDRfTVVYRU5UUlkoR1BNQ19BRDAsIDAsICJncG1jX2FkMCIsICJzZG1tYzJfZGF0MCIsIE5VTEwsIE5VTEwsCisJCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDRfTVVYRU5UUlkoR1BNQ19BRDEsIDAsICJncG1jX2FkMSIsICJzZG1tYzJfZGF0MSIsIE5VTEwsIE5VTEwsCisJCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDRfTVVYRU5UUlkoR1BNQ19BRDIsIDAsICJncG1jX2FkMiIsICJzZG1tYzJfZGF0MiIsIE5VTEwsIE5VTEwsCisJCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDRfTVVYRU5UUlkoR1BNQ19BRDMsIDAsICJncG1jX2FkMyIsICJzZG1tYzJfZGF0MyIsIE5VTEwsIE5VTEwsCisJCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDRfTVVYRU5UUlkoR1BNQ19BRDQsIDAsICJncG1jX2FkNCIsICJzZG1tYzJfZGF0NCIsCisJCQkic2RtbWMyX2Rpcl9kYXQwIiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVA0X01VWEVOVFJZKEdQTUNfQUQ1LCAwLCAiZ3BtY19hZDUiLCAic2RtbWMyX2RhdDUiLAorCQkJInNkbW1jMl9kaXJfZGF0MSIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpLAorCV9PTUFQNF9NVVhFTlRSWShHUE1DX0FENiwgMCwgImdwbWNfYWQ2IiwgInNkbW1jMl9kYXQ2IiwKKwkJCSJzZG1tYzJfZGlyX2NtZCIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpLAorCV9PTUFQNF9NVVhFTlRSWShHUE1DX0FENywgMCwgImdwbWNfYWQ3IiwgInNkbW1jMl9kYXQ3IiwKKwkJCSJzZG1tYzJfY2xrX2ZkYmsiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDRfTVVYRU5UUlkoR1BNQ19BRDgsIDMyLCAiZ3BtY19hZDgiLCAia3BkX3JvdzAiLCAiYzJjX2RhdGExNSIsCisJCQkiZ3Bpb18zMiIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpLAorCV9PTUFQNF9NVVhFTlRSWShHUE1DX0FEOSwgMzMsICJncG1jX2FkOSIsICJrcGRfcm93MSIsICJjMmNfZGF0YTE0IiwKKwkJCSJncGlvXzMzIiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVA0X01VWEVOVFJZKEdQTUNfQUQxMCwgMzQsICJncG1jX2FkMTAiLCAia3BkX3JvdzIiLCAiYzJjX2RhdGExMyIsCisJCQkiZ3Bpb18zNCIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpLAorCV9PTUFQNF9NVVhFTlRSWShHUE1DX0FEMTEsIDM1LCAiZ3BtY19hZDExIiwgImtwZF9yb3czIiwgImMyY19kYXRhMTIiLAorCQkJImdwaW9fMzUiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDRfTVVYRU5UUlkoR1BNQ19BRDEyLCAzNiwgImdwbWNfYWQxMiIsICJrcGRfY29sMCIsICJjMmNfZGF0YTExIiwKKwkJCSJncGlvXzM2IiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVA0X01VWEVOVFJZKEdQTUNfQUQxMywgMzcsICJncG1jX2FkMTMiLCAia3BkX2NvbDEiLCAiYzJjX2RhdGExMCIsCisJCQkiZ3Bpb18zNyIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpLAorCV9PTUFQNF9NVVhFTlRSWShHUE1DX0FEMTQsIDM4LCAiZ3BtY19hZDE0IiwgImtwZF9jb2wyIiwgImMyY19kYXRhOSIsCisJCQkiZ3Bpb18zOCIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpLAorCV9PTUFQNF9NVVhFTlRSWShHUE1DX0FEMTUsIDM5LCAiZ3BtY19hZDE1IiwgImtwZF9jb2wzIiwgImMyY19kYXRhOCIsCisJCQkiZ3Bpb18zOSIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpLAorCV9PTUFQNF9NVVhFTlRSWShHUE1DX0ExNiwgNDAsICJncG1jX2ExNiIsICJrcGRfcm93NCIsICJjMmNfZGF0YWluMCIsCisJCQkiZ3Bpb180MCIsICJ2ZW5jXzY1Nl9kYXRhMCIsIE5VTEwsIE5VTEwsIE5VTEwpLAorCV9PTUFQNF9NVVhFTlRSWShHUE1DX0ExNywgNDEsICJncG1jX2ExNyIsICJrcGRfcm93NSIsICJjMmNfZGF0YWluMSIsCisJCQkiZ3Bpb180MSIsICJ2ZW5jXzY1Nl9kYXRhMSIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoR1BNQ19BMTgsIDQyLCAiZ3BtY19hMTgiLCAia3BkX3JvdzYiLCAiYzJjX2RhdGFpbjIiLAorCQkJImdwaW9fNDIiLCAidmVuY182NTZfZGF0YTIiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKEdQTUNfQTE5LCA0MywgImdwbWNfYTE5IiwgImtwZF9yb3c3IiwgImMyY19kYXRhaW4zIiwKKwkJCSJncGlvXzQzIiwgInZlbmNfNjU2X2RhdGEzIiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShHUE1DX0EyMCwgNDQsICJncG1jX2EyMCIsICJrcGRfY29sNCIsICJjMmNfZGF0YWluNCIsCisJCQkiZ3Bpb180NCIsICJ2ZW5jXzY1Nl9kYXRhNCIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoR1BNQ19BMjEsIDQ1LCAiZ3BtY19hMjEiLCAia3BkX2NvbDUiLCAiYzJjX2RhdGFpbjUiLAorCQkJImdwaW9fNDUiLCAidmVuY182NTZfZGF0YTUiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKEdQTUNfQTIyLCA0NiwgImdwbWNfYTIyIiwgImtwZF9jb2w2IiwgImMyY19kYXRhaW42IiwKKwkJCSJncGlvXzQ2IiwgInZlbmNfNjU2X2RhdGE2IiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShHUE1DX0EyMywgNDcsICJncG1jX2EyMyIsICJrcGRfY29sNyIsICJjMmNfZGF0YWluNyIsCisJCQkiZ3Bpb180NyIsICJ2ZW5jXzY1Nl9kYXRhNyIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoR1BNQ19BMjQsIDQ4LCAiZ3BtY19hMjQiLCBOVUxMLCAiYzJjX2Nsa291dDAiLAorCQkJImdwaW9fNDgiLCBOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKEdQTUNfQTI1LCA0OSwgImdwbWNfYTI1IiwgTlVMTCwgImMyY19jbGtvdXQxIiwKKwkJCSJncGlvXzQ5IiwgTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShHUE1DX05DUzAsIDUwLCAiZ3BtY19uY3MwIiwgTlVMTCwgTlVMTCwgImdwaW9fNTAiLAorCQkJInN5c19uZG1hcmVxMCIsIE5VTEwsIE5VTEwsIE5VTEwpLAorCV9PTUFQNF9NVVhFTlRSWShHUE1DX05DUzEsIDUxLCAiZ3BtY19uY3MxIiwgTlVMTCwgImMyY19kYXRhb3V0NiIsCisJCQkiZ3Bpb181MSIsIE5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoR1BNQ19OQ1MyLCA1MiwgImdwbWNfbmNzMiIsIE5VTEwsICJjMmNfZGF0YW91dDciLAorCQkJImdwaW9fNTIiLCBOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKEdQTUNfTkNTMywgNTMsICJncG1jX25jczMiLCAiZ3BtY19kaXIiLAorCQkJImMyY19kYXRhb3V0NCIsICJncGlvXzUzIiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJCSJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoR1BNQ19OV1AsIDU0LCAiZ3BtY19ud3AiLCAiZHNpMV90ZTAiLCBOVUxMLCAiZ3Bpb181NCIsCisJCQkic3lzX25kbWFyZXExIiwgTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVA0X01VWEVOVFJZKEdQTUNfQ0xLLCA1NSwgImdwbWNfY2xrIiwgTlVMTCwgTlVMTCwgImdwaW9fNTUiLAorCQkJInN5c19uZG1hcmVxMiIsIE5VTEwsIE5VTEwsIE5VTEwpLAorCV9PTUFQNF9NVVhFTlRSWShHUE1DX05BRFZfQUxFLCA1NiwgImdwbWNfbmFkdl9hbGUiLCAiZHNpMV90ZTEiLCBOVUxMLAorCQkJImdwaW9fNTYiLCAic3lzX25kbWFyZXEzIiwgTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVA0X01VWEVOVFJZKEdQTUNfTk9FLCAwLCAiZ3BtY19ub2UiLCAic2RtbWMyX2NsayIsIE5VTEwsIE5VTEwsCisJCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDRfTVVYRU5UUlkoR1BNQ19OV0UsIDAsICJncG1jX253ZSIsICJzZG1tYzJfY21kIiwgTlVMTCwgTlVMTCwKKwkJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpLAorCV9PTUFQNF9NVVhFTlRSWShHUE1DX05CRTBfQ0xFLCA1OSwgImdwbWNfbmJlMF9jbGUiLCAiZHNpMl90ZTAiLCBOVUxMLAorCQkJImdwaW9fNTkiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDRfTVVYRU5UUlkoR1BNQ19OQkUxLCA2MCwgImdwbWNfbmJlMSIsIE5VTEwsICJjMmNfZGF0YW91dDUiLAorCQkJImdwaW9fNjAiLCBOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKEdQTUNfV0FJVDAsIDYxLCAiZ3BtY193YWl0MCIsICJkc2kyX3RlMSIsIE5VTEwsCisJCQkiZ3Bpb182MSIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpLAorCV9PTUFQNF9NVVhFTlRSWShHUE1DX1dBSVQxLCA2MiwgImdwbWNfd2FpdDEiLCBOVUxMLCAiYzJjX2RhdGFvdXQyIiwKKwkJCSJncGlvXzYyIiwgTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShDMkNfREFUQTExLCAxMDAsICJjMmNfZGF0YTExIiwgInVzYmMxX2ljdXNiX3R4ZW4iLAorCQkJImMyY19kYXRhb3V0MyIsICJncGlvXzEwMCIsICJzeXNfbmRtYXJlcTAiLCBOVUxMLAorCQkJTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShDMkNfREFUQTEyLCAxMDEsICJjMmNfZGF0YTEyIiwgImRzaTFfdGUwIiwKKwkJCSJjMmNfY2xraW4wIiwgImdwaW9fMTAxIiwgInN5c19uZG1hcmVxMSIsIE5VTEwsIE5VTEwsCisJCQkic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKEMyQ19EQVRBMTMsIDEwMiwgImMyY19kYXRhMTMiLCAiZHNpMV90ZTEiLAorCQkJImMyY19jbGtpbjEiLCAiZ3Bpb18xMDIiLCAic3lzX25kbWFyZXEyIiwgTlVMTCwgTlVMTCwKKwkJCSJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoQzJDX0RBVEExNCwgMTAzLCAiYzJjX2RhdGExNCIsICJkc2kyX3RlMCIsCisJCQkiYzJjX2RhdGFvdXQwIiwgImdwaW9fMTAzIiwgInN5c19uZG1hcmVxMyIsIE5VTEwsCisJCQlOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKEMyQ19EQVRBMTUsIDEwNCwgImMyY19kYXRhMTUiLCAiZHNpMl90ZTEiLAorCQkJImMyY19kYXRhb3V0MSIsICJncGlvXzEwNCIsIE5VTEwsIE5VTEwsIE5VTEwsCisJCQkic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKEhETUlfSFBELCA2MywgImhkbWlfaHBkIiwgTlVMTCwgTlVMTCwgImdwaW9fNjMiLCBOVUxMLAorCQkJTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShIRE1JX0NFQywgNjQsICJoZG1pX2NlYyIsIE5VTEwsIE5VTEwsICJncGlvXzY0IiwgTlVMTCwKKwkJCU5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoSERNSV9ERENfU0NMLCA2NSwgImhkbWlfZGRjX3NjbCIsIE5VTEwsIE5VTEwsCisJCQkiZ3Bpb182NSIsIE5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoSERNSV9ERENfU0RBLCA2NiwgImhkbWlfZGRjX3NkYSIsIE5VTEwsIE5VTEwsCisJCQkiZ3Bpb182NiIsIE5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoQ1NJMjFfRFgwLCAwLCAiY3NpMjFfZHgwIiwgTlVMTCwgTlVMTCwgImdwaV82NyIsIE5VTEwsCisJCQlOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKENTSTIxX0RZMCwgMCwgImNzaTIxX2R5MCIsIE5VTEwsIE5VTEwsICJncGlfNjgiLCBOVUxMLAorCQkJTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShDU0kyMV9EWDEsIDAsICJjc2kyMV9keDEiLCBOVUxMLCBOVUxMLCAiZ3BpXzY5IiwgTlVMTCwKKwkJCU5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoQ1NJMjFfRFkxLCAwLCAiY3NpMjFfZHkxIiwgTlVMTCwgTlVMTCwgImdwaV83MCIsIE5VTEwsCisJCQlOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKENTSTIxX0RYMiwgMCwgImNzaTIxX2R4MiIsIE5VTEwsIE5VTEwsICJncGlfNzEiLCBOVUxMLAorCQkJTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShDU0kyMV9EWTIsIDAsICJjc2kyMV9keTIiLCBOVUxMLCBOVUxMLCAiZ3BpXzcyIiwgTlVMTCwKKwkJCU5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoQ1NJMjFfRFgzLCAwLCAiY3NpMjFfZHgzIiwgTlVMTCwgTlVMTCwgImdwaV83MyIsIE5VTEwsCisJCQlOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKENTSTIxX0RZMywgMCwgImNzaTIxX2R5MyIsIE5VTEwsIE5VTEwsICJncGlfNzQiLCBOVUxMLAorCQkJTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShDU0kyMV9EWDQsIDAsICJjc2kyMV9keDQiLCBOVUxMLCBOVUxMLCAiZ3BpXzc1IiwgTlVMTCwKKwkJCU5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoQ1NJMjFfRFk0LCAwLCAiY3NpMjFfZHk0IiwgTlVMTCwgTlVMTCwgImdwaV83NiIsIE5VTEwsCisJCQlOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKENTSTIyX0RYMCwgMCwgImNzaTIyX2R4MCIsIE5VTEwsIE5VTEwsICJncGlfNzciLCBOVUxMLAorCQkJTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShDU0kyMl9EWTAsIDAsICJjc2kyMl9keTAiLCBOVUxMLCBOVUxMLCAiZ3BpXzc4IiwgTlVMTCwKKwkJCU5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoQ1NJMjJfRFgxLCAwLCAiY3NpMjJfZHgxIiwgTlVMTCwgTlVMTCwgImdwaV83OSIsIE5VTEwsCisJCQlOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKENTSTIyX0RZMSwgMCwgImNzaTIyX2R5MSIsIE5VTEwsIE5VTEwsICJncGlfODAiLCBOVUxMLAorCQkJTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShDQU1fU0hVVFRFUiwgODEsICJjYW1fc2h1dHRlciIsIE5VTEwsIE5VTEwsICJncGlvXzgxIiwKKwkJCU5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoQ0FNX1NUUk9CRSwgODIsICJjYW1fc3Ryb2JlIiwgTlVMTCwgTlVMTCwgImdwaW9fODIiLAorCQkJTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShDQU1fR0xPQkFMUkVTRVQsIDgzLCAiY2FtX2dsb2JhbHJlc2V0IiwgTlVMTCwgTlVMTCwKKwkJCSJncGlvXzgzIiwgTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShVU0JCMV9VTFBJVExMX0NMSywgODQsICJ1c2JiMV91bHBpdGxsX2NsayIsCisJCQkiaHNpMV9jYXdha2UiLCBOVUxMLCAiZ3Bpb184NCIsICJ1c2JiMV91bHBpcGh5X2NsayIsCisJCQlOVUxMLCAiaHdfZGJnMjAiLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKFVTQkIxX1VMUElUTExfU1RQLCA4NSwgInVzYmIxX3VscGl0bGxfc3RwIiwKKwkJCSJoc2kxX2NhZGF0YSIsICJtY2JzcDRfY2xrciIsICJncGlvXzg1IiwKKwkJCSJ1c2JiMV91bHBpcGh5X3N0cCIsICJ1c2JiMV9tbV9yeGRwIiwgImh3X2RiZzIxIiwKKwkJCSJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoVVNCQjFfVUxQSVRMTF9ESVIsIDg2LCAidXNiYjFfdWxwaXRsbF9kaXIiLAorCQkJImhzaTFfY2FmbGFnIiwgIm1jYnNwNF9mc3IiLCAiZ3Bpb184NiIsCisJCQkidXNiYjFfdWxwaXBoeV9kaXIiLCBOVUxMLCAiaHdfZGJnMjIiLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKFVTQkIxX1VMUElUTExfTlhULCA4NywgInVzYmIxX3VscGl0bGxfbnh0IiwKKwkJCSJoc2kxX2FjcmVhZHkiLCAibWNic3A0X2ZzeCIsICJncGlvXzg3IiwKKwkJCSJ1c2JiMV91bHBpcGh5X254dCIsICJ1c2JiMV9tbV9yeGRtIiwgImh3X2RiZzIzIiwKKwkJCSJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoVVNCQjFfVUxQSVRMTF9EQVQwLCA4OCwgInVzYmIxX3VscGl0bGxfZGF0MCIsCisJCQkiaHNpMV9hY3dha2UiLCAibWNic3A0X2Nsa3giLCAiZ3Bpb184OCIsCisJCQkidXNiYjFfdWxwaXBoeV9kYXQwIiwgInVzYmIxX21tX3J4cmN2IiwgImh3X2RiZzI0IiwKKwkJCSJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoVVNCQjFfVUxQSVRMTF9EQVQxLCA4OSwgInVzYmIxX3VscGl0bGxfZGF0MSIsCisJCQkiaHNpMV9hY2RhdGEiLCAibWNic3A0X2R4IiwgImdwaW9fODkiLAorCQkJInVzYmIxX3VscGlwaHlfZGF0MSIsICJ1c2JiMV9tbV90eHNlMCIsICJod19kYmcyNSIsCisJCQkic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKFVTQkIxX1VMUElUTExfREFUMiwgOTAsICJ1c2JiMV91bHBpdGxsX2RhdDIiLAorCQkJImhzaTFfYWNmbGFnIiwgIm1jYnNwNF9kciIsICJncGlvXzkwIiwKKwkJCSJ1c2JiMV91bHBpcGh5X2RhdDIiLCAidXNiYjFfbW1fdHhkYXQiLCAiaHdfZGJnMjYiLAorCQkJInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShVU0JCMV9VTFBJVExMX0RBVDMsIDkxLCAidXNiYjFfdWxwaXRsbF9kYXQzIiwKKwkJCSJoc2kxX2NhcmVhZHkiLCBOVUxMLCAiZ3Bpb185MSIsICJ1c2JiMV91bHBpcGh5X2RhdDMiLAorCQkJInVzYmIxX21tX3R4ZW4iLCAiaHdfZGJnMjciLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKFVTQkIxX1VMUElUTExfREFUNCwgOTIsICJ1c2JiMV91bHBpdGxsX2RhdDQiLAorCQkJImRtdGltZXI4X3B3bV9ldnQiLCAiYWJlX21jYnNwM19kciIsICJncGlvXzkyIiwKKwkJCSJ1c2JiMV91bHBpcGh5X2RhdDQiLCBOVUxMLCAiaHdfZGJnMjgiLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKFVTQkIxX1VMUElUTExfREFUNSwgOTMsICJ1c2JiMV91bHBpdGxsX2RhdDUiLAorCQkJImRtdGltZXI5X3B3bV9ldnQiLCAiYWJlX21jYnNwM19keCIsICJncGlvXzkzIiwKKwkJCSJ1c2JiMV91bHBpcGh5X2RhdDUiLCBOVUxMLCAiaHdfZGJnMjkiLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKFVTQkIxX1VMUElUTExfREFUNiwgOTQsICJ1c2JiMV91bHBpdGxsX2RhdDYiLAorCQkJImRtdGltZXIxMF9wd21fZXZ0IiwgImFiZV9tY2JzcDNfY2xreCIsICJncGlvXzk0IiwKKwkJCSJ1c2JiMV91bHBpcGh5X2RhdDYiLCAiYWJlX2RtaWNfZGluMyIsICJod19kYmczMCIsCisJCQkic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKFVTQkIxX1VMUElUTExfREFUNywgOTUsICJ1c2JiMV91bHBpdGxsX2RhdDciLAorCQkJImRtdGltZXIxMV9wd21fZXZ0IiwgImFiZV9tY2JzcDNfZnN4IiwgImdwaW9fOTUiLAorCQkJInVzYmIxX3VscGlwaHlfZGF0NyIsICJhYmVfZG1pY19jbGszIiwgImh3X2RiZzMxIiwKKwkJCSJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoVVNCQjFfSFNJQ19EQVRBLCA5NiwgInVzYmIxX2hzaWNfZGF0YSIsIE5VTEwsIE5VTEwsCisJCQkiZ3Bpb185NiIsIE5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoVVNCQjFfSFNJQ19TVFJPQkUsIDk3LCAidXNiYjFfaHNpY19zdHJvYmUiLCBOVUxMLAorCQkJTlVMTCwgImdwaW9fOTciLCBOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKFVTQkMxX0lDVVNCX0RQLCA5OCwgInVzYmMxX2ljdXNiX2RwIiwgTlVMTCwgTlVMTCwKKwkJCSJncGlvXzk4IiwgTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShVU0JDMV9JQ1VTQl9ETSwgOTksICJ1c2JjMV9pY3VzYl9kbSIsIE5VTEwsIE5VTEwsCisJCQkiZ3Bpb185OSIsIE5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoU0RNTUMxX0NMSywgMTAwLCAic2RtbWMxX2NsayIsIE5VTEwsICJkcG1fZW11MTkiLAorCQkJImdwaW9fMTAwIiwgTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShTRE1NQzFfQ01ELCAxMDEsICJzZG1tYzFfY21kIiwgTlVMTCwgInVhcnQxX3J4IiwKKwkJCSJncGlvXzEwMSIsIE5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoU0RNTUMxX0RBVDAsIDEwMiwgInNkbW1jMV9kYXQwIiwgTlVMTCwgImRwbV9lbXUxOCIsCisJCQkiZ3Bpb18xMDIiLCBOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKFNETU1DMV9EQVQxLCAxMDMsICJzZG1tYzFfZGF0MSIsIE5VTEwsICJkcG1fZW11MTciLAorCQkJImdwaW9fMTAzIiwgTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShTRE1NQzFfREFUMiwgMTA0LCAic2RtbWMxX2RhdDIiLCBOVUxMLCAiZHBtX2VtdTE2IiwKKwkJCSJncGlvXzEwNCIsICJqdGFnX3Rtc190bXNjIiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShTRE1NQzFfREFUMywgMTA1LCAic2RtbWMxX2RhdDMiLCBOVUxMLCAiZHBtX2VtdTE1IiwKKwkJCSJncGlvXzEwNSIsICJqdGFnX3RjayIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoU0RNTUMxX0RBVDQsIDEwNiwgInNkbW1jMV9kYXQ0IiwgTlVMTCwgTlVMTCwKKwkJCSJncGlvXzEwNiIsIE5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoU0RNTUMxX0RBVDUsIDEwNywgInNkbW1jMV9kYXQ1IiwgTlVMTCwgTlVMTCwKKwkJCSJncGlvXzEwNyIsIE5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoU0RNTUMxX0RBVDYsIDEwOCwgInNkbW1jMV9kYXQ2IiwgTlVMTCwgTlVMTCwKKwkJCSJncGlvXzEwOCIsIE5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoU0RNTUMxX0RBVDcsIDEwOSwgInNkbW1jMV9kYXQ3IiwgTlVMTCwgTlVMTCwKKwkJCSJncGlvXzEwOSIsIE5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoQUJFX01DQlNQMl9DTEtYLCAxMTAsICJhYmVfbWNic3AyX2Nsa3giLCAibWNzcGkyX2NsayIsCisJCQkiYWJlX21jYXNwX2FoY2xreCIsICJncGlvXzExMCIsICJ1c2JiMl9tbV9yeGRtIiwKKwkJCU5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoQUJFX01DQlNQMl9EUiwgMTExLCAiYWJlX21jYnNwMl9kciIsICJtY3NwaTJfc29taSIsCisJCQkiYWJlX21jYXNwX2F4ciIsICJncGlvXzExMSIsICJ1c2JiMl9tbV9yeGRwIiwgTlVMTCwKKwkJCU5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoQUJFX01DQlNQMl9EWCwgMTEyLCAiYWJlX21jYnNwMl9keCIsICJtY3NwaTJfc2ltbyIsCisJCQkiYWJlX21jYXNwX2FtdXRlIiwgImdwaW9fMTEyIiwgInVzYmIyX21tX3J4cmN2IiwgTlVMTCwKKwkJCU5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoQUJFX01DQlNQMl9GU1gsIDExMywgImFiZV9tY2JzcDJfZnN4IiwgIm1jc3BpMl9jczAiLAorCQkJImFiZV9tY2FzcF9hZnN4IiwgImdwaW9fMTEzIiwgInVzYmIyX21tX3R4ZW4iLCBOVUxMLAorCQkJTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShBQkVfTUNCU1AxX0NMS1gsIDExNCwgImFiZV9tY2JzcDFfY2xreCIsCisJCQkiYWJlX3NsaW1idXMxX2Nsb2NrIiwgTlVMTCwgImdwaW9fMTE0IiwgTlVMTCwgTlVMTCwKKwkJCU5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoQUJFX01DQlNQMV9EUiwgMTE1LCAiYWJlX21jYnNwMV9kciIsCisJCQkiYWJlX3NsaW1idXMxX2RhdGEiLCBOVUxMLCAiZ3Bpb18xMTUiLCBOVUxMLCBOVUxMLAorCQkJTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShBQkVfTUNCU1AxX0RYLCAxMTYsICJhYmVfbWNic3AxX2R4IiwgInNkbW1jM19kYXQyIiwKKwkJCSJhYmVfbWNhc3BfYWNsa3giLCAiZ3Bpb18xMTYiLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkJInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShBQkVfTUNCU1AxX0ZTWCwgMTE3LCAiYWJlX21jYnNwMV9mc3giLCAic2RtbWMzX2RhdDMiLAorCQkJImFiZV9tY2FzcF9hbXV0ZWluIiwgImdwaW9fMTE3IiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJCSJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoQUJFX1BETV9VTF9EQVRBLCAwLCAiYWJlX3BkbV91bF9kYXRhIiwKKwkJCSJhYmVfbWNic3AzX2RyIiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJCSJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoQUJFX1BETV9ETF9EQVRBLCAwLCAiYWJlX3BkbV9kbF9kYXRhIiwKKwkJCSJhYmVfbWNic3AzX2R4IiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJCSJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoQUJFX1BETV9GUkFNRSwgMCwgImFiZV9wZG1fZnJhbWUiLCAiYWJlX21jYnNwM19jbGt4IiwKKwkJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoQUJFX1BETV9MQl9DTEssIDAsICJhYmVfcGRtX2xiX2NsayIsICJhYmVfbWNic3AzX2ZzeCIsCisJCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKEFCRV9DTEtTLCAxMTgsICJhYmVfY2xrcyIsIE5VTEwsIE5VTEwsICJncGlvXzExOCIsCisJCQlOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKEFCRV9ETUlDX0NMSzEsIDExOSwgImFiZV9kbWljX2NsazEiLCBOVUxMLCBOVUxMLAorCQkJImdwaW9fMTE5IiwgInVzYmIyX21tX3R4c2UwIiwgTlVMTCwgTlVMTCwKKwkJCSJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoQUJFX0RNSUNfRElOMSwgMTIwLCAiYWJlX2RtaWNfZGluMSIsIE5VTEwsIE5VTEwsCisJCQkiZ3Bpb18xMjAiLCAidXNiYjJfbW1fdHhkYXQiLCBOVUxMLCBOVUxMLAorCQkJInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShBQkVfRE1JQ19ESU4yLCAxMjEsICJhYmVfZG1pY19kaW4yIiwgInNsaW1idXMyX2Nsb2NrIiwKKwkJCU5VTEwsICJncGlvXzEyMSIsIE5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoQUJFX0RNSUNfRElOMywgMTIyLCAiYWJlX2RtaWNfZGluMyIsICJzbGltYnVzMl9kYXRhIiwKKwkJCSJhYmVfZG1pY19jbGsyIiwgImdwaW9fMTIyIiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJCSJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoVUFSVDJfQ1RTLCAxMjMsICJ1YXJ0Ml9jdHMiLCAic2RtbWMzX2NsayIsIE5VTEwsCisJCQkiZ3Bpb18xMjMiLCBOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKFVBUlQyX1JUUywgMTI0LCAidWFydDJfcnRzIiwgInNkbW1jM19jbWQiLCBOVUxMLAorCQkJImdwaW9fMTI0IiwgTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShVQVJUMl9SWCwgMTI1LCAidWFydDJfcngiLCAic2RtbWMzX2RhdDAiLCBOVUxMLAorCQkJImdwaW9fMTI1IiwgTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShVQVJUMl9UWCwgMTI2LCAidWFydDJfdHgiLCAic2RtbWMzX2RhdDEiLCBOVUxMLAorCQkJImdwaW9fMTI2IiwgTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShIRFFfU0lPLCAxMjcsICJoZHFfc2lvIiwgImkyYzNfc2NjYiIsICJpMmMyX3NjY2IiLAorCQkJImdwaW9fMTI3IiwgTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShJMkMxX1NDTCwgMCwgImkyYzFfc2NsIiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJCU5VTEwsIE5VTEwpLAorCV9PTUFQNF9NVVhFTlRSWShJMkMxX1NEQSwgMCwgImkyYzFfc2RhIiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJCU5VTEwsIE5VTEwpLAorCV9PTUFQNF9NVVhFTlRSWShJMkMyX1NDTCwgMTI4LCAiaTJjMl9zY2wiLCAidWFydDFfcngiLCBOVUxMLAorCQkJImdwaW9fMTI4IiwgTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShJMkMyX1NEQSwgMTI5LCAiaTJjMl9zZGEiLCAidWFydDFfdHgiLCBOVUxMLAorCQkJImdwaW9fMTI5IiwgTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShJMkMzX1NDTCwgMTMwLCAiaTJjM19zY2wiLCBOVUxMLCBOVUxMLCAiZ3Bpb18xMzAiLAorCQkJTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShJMkMzX1NEQSwgMTMxLCAiaTJjM19zZGEiLCBOVUxMLCBOVUxMLCAiZ3Bpb18xMzEiLAorCQkJTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShJMkM0X1NDTCwgMTMyLCAiaTJjNF9zY2wiLCBOVUxMLCBOVUxMLCAiZ3Bpb18xMzIiLAorCQkJTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShJMkM0X1NEQSwgMTMzLCAiaTJjNF9zZGEiLCBOVUxMLCBOVUxMLCAiZ3Bpb18xMzMiLAorCQkJTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShNQ1NQSTFfQ0xLLCAxMzQsICJtY3NwaTFfY2xrIiwgTlVMTCwgTlVMTCwgImdwaW9fMTM0IiwKKwkJCU5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoTUNTUEkxX1NPTUksIDEzNSwgIm1jc3BpMV9zb21pIiwgTlVMTCwgTlVMTCwKKwkJCSJncGlvXzEzNSIsIE5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoTUNTUEkxX1NJTU8sIDEzNiwgIm1jc3BpMV9zaW1vIiwgTlVMTCwgTlVMTCwKKwkJCSJncGlvXzEzNiIsIE5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoTUNTUEkxX0NTMCwgMTM3LCAibWNzcGkxX2NzMCIsIE5VTEwsIE5VTEwsICJncGlvXzEzNyIsCisJCQlOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKE1DU1BJMV9DUzEsIDEzOCwgIm1jc3BpMV9jczEiLCAidWFydDFfcngiLCBOVUxMLAorCQkJImdwaW9fMTM4IiwgTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShNQ1NQSTFfQ1MyLCAxMzksICJtY3NwaTFfY3MyIiwgInVhcnQxX2N0cyIsCisJCQkic2xpbWJ1czJfY2xvY2siLCAiZ3Bpb18xMzkiLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkJInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShNQ1NQSTFfQ1MzLCAxNDAsICJtY3NwaTFfY3MzIiwgInVhcnQxX3J0cyIsCisJCQkic2xpbWJ1czJfZGF0YSIsICJncGlvXzE0MCIsIE5VTEwsIE5VTEwsIE5VTEwsCisJCQkic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKFVBUlQzX0NUU19SQ1RYLCAxNDEsICJ1YXJ0M19jdHNfcmN0eCIsICJ1YXJ0MV90eCIsCisJCQlOVUxMLCAiZ3Bpb18xNDEiLCBOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKFVBUlQzX1JUU19TRCwgMTQyLCAidWFydDNfcnRzX3NkIiwgTlVMTCwgTlVMTCwKKwkJCSJncGlvXzE0MiIsIE5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoVUFSVDNfUlhfSVJSWCwgMTQzLCAidWFydDNfcnhfaXJyeCIsCisJCQkiZG10aW1lcjhfcHdtX2V2dCIsIE5VTEwsICJncGlvXzE0MyIsIE5VTEwsIE5VTEwsCisJCQlOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKFVBUlQzX1RYX0lSVFgsIDE0NCwgInVhcnQzX3R4X2lydHgiLAorCQkJImRtdGltZXI5X3B3bV9ldnQiLCBOVUxMLCAiZ3Bpb18xNDQiLCBOVUxMLCBOVUxMLAorCQkJTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShTRE1NQzVfQ0xLLCAxNDUsICJzZG1tYzVfY2xrIiwgIm1jc3BpMl9jbGsiLAorCQkJInVzYmMxX2ljdXNiX2RwIiwgImdwaW9fMTQ1IiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJCSJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoU0RNTUM1X0NNRCwgMTQ2LCAic2RtbWM1X2NtZCIsICJtY3NwaTJfc2ltbyIsCisJCQkidXNiYzFfaWN1c2JfZG0iLCAiZ3Bpb18xNDYiLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkJInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShTRE1NQzVfREFUMCwgMTQ3LCAic2RtbWM1X2RhdDAiLCAibWNzcGkyX3NvbWkiLAorCQkJInVzYmMxX2ljdXNiX3JjdiIsICJncGlvXzE0NyIsIE5VTEwsIE5VTEwsIE5VTEwsCisJCQkic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKFNETU1DNV9EQVQxLCAxNDgsICJzZG1tYzVfZGF0MSIsIE5VTEwsCisJCQkidXNiYzFfaWN1c2JfdHhlbiIsICJncGlvXzE0OCIsIE5VTEwsIE5VTEwsIE5VTEwsCisJCQkic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKFNETU1DNV9EQVQyLCAxNDksICJzZG1tYzVfZGF0MiIsICJtY3NwaTJfY3MxIiwgTlVMTCwKKwkJCSJncGlvXzE0OSIsIE5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoU0RNTUM1X0RBVDMsIDE1MCwgInNkbW1jNV9kYXQzIiwgIm1jc3BpMl9jczAiLCBOVUxMLAorCQkJImdwaW9fMTUwIiwgTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShNQ1NQSTRfQ0xLLCAxNTEsICJtY3NwaTRfY2xrIiwgInNkbW1jNF9jbGsiLCBOVUxMLAorCQkJImdwaW9fMTUxIiwgTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShNQ1NQSTRfU0lNTywgMTUyLCAibWNzcGk0X3NpbW8iLCAic2RtbWM0X2NtZCIsIE5VTEwsCisJCQkiZ3Bpb18xNTIiLCBOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKE1DU1BJNF9TT01JLCAxNTMsICJtY3NwaTRfc29taSIsICJzZG1tYzRfZGF0MCIsIE5VTEwsCisJCQkiZ3Bpb18xNTMiLCBOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKE1DU1BJNF9DUzAsIDE1NCwgIm1jc3BpNF9jczAiLCAic2RtbWM0X2RhdDMiLCBOVUxMLAorCQkJImdwaW9fMTU0IiwgTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShVQVJUNF9SWCwgMTU1LCAidWFydDRfcngiLCAic2RtbWM0X2RhdDIiLCBOVUxMLAorCQkJImdwaW9fMTU1IiwgTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShVQVJUNF9UWCwgMTU2LCAidWFydDRfdHgiLCAic2RtbWM0X2RhdDEiLCBOVUxMLAorCQkJImdwaW9fMTU2IiwgTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShVU0JCMl9VTFBJVExMX0NMSywgMTU3LCAidXNiYjJfdWxwaXRsbF9jbGsiLAorCQkJInVzYmIyX3VscGlwaHlfY2xrIiwgInNkbW1jNF9jbWQiLCAiZ3Bpb18xNTciLAorCQkJImhzaTJfY2F3YWtlIiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShVU0JCMl9VTFBJVExMX1NUUCwgMTU4LCAidXNiYjJfdWxwaXRsbF9zdHAiLAorCQkJInVzYmIyX3VscGlwaHlfc3RwIiwgInNkbW1jNF9jbGsiLCAiZ3Bpb18xNTgiLAorCQkJImhzaTJfY2FkYXRhIiwgImRpc3BjMl9kYXRhMjMiLCBOVUxMLCAicmVzZXJ2ZWQiKSwKKwlfT01BUDRfTVVYRU5UUlkoVVNCQjJfVUxQSVRMTF9ESVIsIDE1OSwgInVzYmIyX3VscGl0bGxfZGlyIiwKKwkJCSJ1c2JiMl91bHBpcGh5X2RpciIsICJzZG1tYzRfZGF0MCIsICJncGlvXzE1OSIsCisJCQkiaHNpMl9jYWZsYWciLCAiZGlzcGMyX2RhdGEyMiIsIE5VTEwsICJyZXNlcnZlZCIpLAorCV9PTUFQNF9NVVhFTlRSWShVU0JCMl9VTFBJVExMX05YVCwgMTYwLCAidXNiYjJfdWxwaXRsbF9ueHQiLAorCQkJInVzYmIyX3VscGlwaHlfbnh0IiwgInNkbW1jNF9kYXQxIiwgImdwaW9fMTYwIiwKKwkJCSJoc2kyX2FjcmVhZHkiLCAiZGlzcGMyX2RhdGEyMSIsIE5VTEwsICJyZXNlcnZlZCIpLAorCV9PTUFQNF9NVVhFTlRSWShVU0JCMl9VTFBJVExMX0RBVDAsIDE2MSwgInVzYmIyX3VscGl0bGxfZGF0MCIsCisJCQkidXNiYjJfdWxwaXBoeV9kYXQwIiwgInNkbW1jNF9kYXQyIiwgImdwaW9fMTYxIiwKKwkJCSJoc2kyX2Fjd2FrZSIsICJkaXNwYzJfZGF0YTIwIiwgTlVMTCwgInJlc2VydmVkIiksCisJX09NQVA0X01VWEVOVFJZKFVTQkIyX1VMUElUTExfREFUMSwgMTYyLCAidXNiYjJfdWxwaXRsbF9kYXQxIiwKKwkJCSJ1c2JiMl91bHBpcGh5X2RhdDEiLCAic2RtbWM0X2RhdDMiLCAiZ3Bpb18xNjIiLAorCQkJImhzaTJfYWNkYXRhIiwgImRpc3BjMl9kYXRhMTkiLCBOVUxMLCAicmVzZXJ2ZWQiKSwKKwlfT01BUDRfTVVYRU5UUlkoVVNCQjJfVUxQSVRMTF9EQVQyLCAxNjMsICJ1c2JiMl91bHBpdGxsX2RhdDIiLAorCQkJInVzYmIyX3VscGlwaHlfZGF0MiIsICJzZG1tYzNfZGF0MiIsICJncGlvXzE2MyIsCisJCQkiaHNpMl9hY2ZsYWciLCAiZGlzcGMyX2RhdGExOCIsIE5VTEwsICJyZXNlcnZlZCIpLAorCV9PTUFQNF9NVVhFTlRSWShVU0JCMl9VTFBJVExMX0RBVDMsIDE2NCwgInVzYmIyX3VscGl0bGxfZGF0MyIsCisJCQkidXNiYjJfdWxwaXBoeV9kYXQzIiwgInNkbW1jM19kYXQxIiwgImdwaW9fMTY0IiwKKwkJCSJoc2kyX2NhcmVhZHkiLCAiZGlzcGMyX2RhdGExNSIsIE5VTEwsICJyZXNlcnZlZCIpLAorCV9PTUFQNF9NVVhFTlRSWShVU0JCMl9VTFBJVExMX0RBVDQsIDE2NSwgInVzYmIyX3VscGl0bGxfZGF0NCIsCisJCQkidXNiYjJfdWxwaXBoeV9kYXQ0IiwgInNkbW1jM19kYXQwIiwgImdwaW9fMTY1IiwKKwkJCSJtY3NwaTNfc29taSIsICJkaXNwYzJfZGF0YTE0IiwgTlVMTCwgInJlc2VydmVkIiksCisJX09NQVA0X01VWEVOVFJZKFVTQkIyX1VMUElUTExfREFUNSwgMTY2LCAidXNiYjJfdWxwaXRsbF9kYXQ1IiwKKwkJCSJ1c2JiMl91bHBpcGh5X2RhdDUiLCAic2RtbWMzX2RhdDMiLCAiZ3Bpb18xNjYiLAorCQkJIm1jc3BpM19jczAiLCAiZGlzcGMyX2RhdGExMyIsIE5VTEwsICJyZXNlcnZlZCIpLAorCV9PTUFQNF9NVVhFTlRSWShVU0JCMl9VTFBJVExMX0RBVDYsIDE2NywgInVzYmIyX3VscGl0bGxfZGF0NiIsCisJCQkidXNiYjJfdWxwaXBoeV9kYXQ2IiwgInNkbW1jM19jbWQiLCAiZ3Bpb18xNjciLAorCQkJIm1jc3BpM19zaW1vIiwgImRpc3BjMl9kYXRhMTIiLCBOVUxMLCAicmVzZXJ2ZWQiKSwKKwlfT01BUDRfTVVYRU5UUlkoVVNCQjJfVUxQSVRMTF9EQVQ3LCAxNjgsICJ1c2JiMl91bHBpdGxsX2RhdDciLAorCQkJInVzYmIyX3VscGlwaHlfZGF0NyIsICJzZG1tYzNfY2xrIiwgImdwaW9fMTY4IiwKKwkJCSJtY3NwaTNfY2xrIiwgImRpc3BjMl9kYXRhMTEiLCBOVUxMLCAicmVzZXJ2ZWQiKSwKKwlfT01BUDRfTVVYRU5UUlkoVVNCQjJfSFNJQ19EQVRBLCAxNjksICJ1c2JiMl9oc2ljX2RhdGEiLCBOVUxMLCBOVUxMLAorCQkJImdwaW9fMTY5IiwgTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShVU0JCMl9IU0lDX1NUUk9CRSwgMTcwLCAidXNiYjJfaHNpY19zdHJvYmUiLCBOVUxMLAorCQkJTlVMTCwgImdwaW9fMTcwIiwgTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShVTklQUk9fVFgwLCAxNzEsICJ1bmlwcm9fdHgwIiwgImtwZF9jb2wwIiwgTlVMTCwKKwkJCSJncGlvXzE3MSIsIE5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoVU5JUFJPX1RZMCwgMTcyLCAidW5pcHJvX3R5MCIsICJrcGRfY29sMSIsIE5VTEwsCisJCQkiZ3Bpb18xNzIiLCBOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKFVOSVBST19UWDEsIDE3MywgInVuaXByb190eDEiLCAia3BkX2NvbDIiLCBOVUxMLAorCQkJImdwaW9fMTczIiwgTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShVTklQUk9fVFkxLCAxNzQsICJ1bmlwcm9fdHkxIiwgImtwZF9jb2wzIiwgTlVMTCwKKwkJCSJncGlvXzE3NCIsIE5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoVU5JUFJPX1RYMiwgMCwgInVuaXByb190eDIiLCAia3BkX2NvbDQiLCBOVUxMLAorCQkJImdwaW9fMCIsIE5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoVU5JUFJPX1RZMiwgMSwgInVuaXByb190eTIiLCAia3BkX2NvbDUiLCBOVUxMLAorCQkJImdwaW9fMSIsIE5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoVU5JUFJPX1JYMCwgMCwgInVuaXByb19yeDAiLCAia3BkX3JvdzAiLCBOVUxMLAorCQkJImdwaV8xNzUiLCBOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKFVOSVBST19SWTAsIDAsICJ1bmlwcm9fcnkwIiwgImtwZF9yb3cxIiwgTlVMTCwKKwkJCSJncGlfMTc2IiwgTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShVTklQUk9fUlgxLCAwLCAidW5pcHJvX3J4MSIsICJrcGRfcm93MiIsIE5VTEwsCisJCQkiZ3BpXzE3NyIsIE5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoVU5JUFJPX1JZMSwgMCwgInVuaXByb19yeTEiLCAia3BkX3JvdzMiLCBOVUxMLAorCQkJImdwaV8xNzgiLCBOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKFVOSVBST19SWDIsIDAsICJ1bmlwcm9fcngyIiwgImtwZF9yb3c0IiwgTlVMTCwKKwkJCSJncGlfMiIsIE5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoVU5JUFJPX1JZMiwgMCwgInVuaXByb19yeTIiLCAia3BkX3JvdzUiLCBOVUxMLAorCQkJImdwaV8zIiwgTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShVU0JBMF9PVEdfQ0UsIDAsICJ1c2JhMF9vdGdfY2UiLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVA0X01VWEVOVFJZKFVTQkEwX09UR19EUCwgMTc5LCAidXNiYTBfb3RnX2RwIiwgInVhcnQzX3J4X2lycngiLAorCQkJInVhcnQyX3J4IiwgImdwaW9fMTc5IiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJCSJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoVVNCQTBfT1RHX0RNLCAxODAsICJ1c2JhMF9vdGdfZG0iLCAidWFydDNfdHhfaXJ0eCIsCisJCQkidWFydDJfdHgiLCAiZ3Bpb18xODAiLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkJInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShGUkVGX0NMSzFfT1VULCAxODEsICJmcmVmX2NsazFfb3V0IiwgTlVMTCwgTlVMTCwKKwkJCSJncGlvXzE4MSIsIE5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoRlJFRl9DTEsyX09VVCwgMTgyLCAiZnJlZl9jbGsyX291dCIsIE5VTEwsIE5VTEwsCisJCQkiZ3Bpb18xODIiLCBOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKFNZU19OSVJRMSwgMCwgInN5c19uaXJxMSIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCisJCQlOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKFNZU19OSVJRMiwgMTgzLCAic3lzX25pcnEyIiwgTlVMTCwgTlVMTCwgImdwaW9fMTgzIiwKKwkJCU5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoU1lTX0JPT1QwLCAxODQsICJzeXNfYm9vdDAiLCBOVUxMLCBOVUxMLCAiZ3Bpb18xODQiLAorCQkJTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShTWVNfQk9PVDEsIDE4NSwgInN5c19ib290MSIsIE5VTEwsIE5VTEwsICJncGlvXzE4NSIsCisJCQlOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKFNZU19CT09UMiwgMTg2LCAic3lzX2Jvb3QyIiwgTlVMTCwgTlVMTCwgImdwaW9fMTg2IiwKKwkJCU5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoU1lTX0JPT1QzLCAxODcsICJzeXNfYm9vdDMiLCBOVUxMLCBOVUxMLCAiZ3Bpb18xODciLAorCQkJTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShTWVNfQk9PVDQsIDE4OCwgInN5c19ib290NCIsIE5VTEwsIE5VTEwsICJncGlvXzE4OCIsCisJCQlOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKFNZU19CT09UNSwgMTg5LCAic3lzX2Jvb3Q1IiwgTlVMTCwgTlVMTCwgImdwaW9fMTg5IiwKKwkJCU5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoRFBNX0VNVTAsIDExLCAiZHBtX2VtdTAiLCBOVUxMLCBOVUxMLCAiZ3Bpb18xMSIsIE5VTEwsCisJCQlOVUxMLCAiaHdfZGJnMCIsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoRFBNX0VNVTEsIDEyLCAiZHBtX2VtdTEiLCBOVUxMLCBOVUxMLCAiZ3Bpb18xMiIsIE5VTEwsCisJCQlOVUxMLCAiaHdfZGJnMSIsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoRFBNX0VNVTIsIDEzLCAiZHBtX2VtdTIiLCAidXNiYTBfdWxwaXBoeV9jbGsiLCBOVUxMLAorCQkJImdwaW9fMTMiLCBOVUxMLCAiZGlzcGMyX2ZpZCIsICJod19kYmcyIiwgInJlc2VydmVkIiksCisJX09NQVA0X01VWEVOVFJZKERQTV9FTVUzLCAxNCwgImRwbV9lbXUzIiwgInVzYmEwX3VscGlwaHlfc3RwIiwgTlVMTCwKKwkJCSJncGlvXzE0IiwgTlVMTCwgImRpc3BjMl9kYXRhMTAiLCAiaHdfZGJnMyIsCisJCQkicmVzZXJ2ZWQiKSwKKwlfT01BUDRfTVVYRU5UUlkoRFBNX0VNVTQsIDE1LCAiZHBtX2VtdTQiLCAidXNiYTBfdWxwaXBoeV9kaXIiLCBOVUxMLAorCQkJImdwaW9fMTUiLCBOVUxMLCAiZGlzcGMyX2RhdGE5IiwgImh3X2RiZzQiLAorCQkJInJlc2VydmVkIiksCisJX09NQVA0X01VWEVOVFJZKERQTV9FTVU1LCAxNiwgImRwbV9lbXU1IiwgInVzYmEwX3VscGlwaHlfbnh0IiwgTlVMTCwKKwkJCSJncGlvXzE2IiwgInJmYmlfdGVfdnN5bmMwIiwgImRpc3BjMl9kYXRhMTYiLAorCQkJImh3X2RiZzUiLCAicmVzZXJ2ZWQiKSwKKwlfT01BUDRfTVVYRU5UUlkoRFBNX0VNVTYsIDE3LCAiZHBtX2VtdTYiLCAidXNiYTBfdWxwaXBoeV9kYXQwIiwKKwkJCSJ1YXJ0M190eF9pcnR4IiwgImdwaW9fMTciLCAicmZiaV9oc3luYzAiLAorCQkJImRpc3BjMl9kYXRhMTciLCAiaHdfZGJnNiIsICJyZXNlcnZlZCIpLAorCV9PTUFQNF9NVVhFTlRSWShEUE1fRU1VNywgMTgsICJkcG1fZW11NyIsICJ1c2JhMF91bHBpcGh5X2RhdDEiLAorCQkJInVhcnQzX3J4X2lycngiLCAiZ3Bpb18xOCIsICJyZmJpX2NzMCIsCisJCQkiZGlzcGMyX2hzeW5jIiwgImh3X2RiZzciLCAicmVzZXJ2ZWQiKSwKKwlfT01BUDRfTVVYRU5UUlkoRFBNX0VNVTgsIDE5LCAiZHBtX2VtdTgiLCAidXNiYTBfdWxwaXBoeV9kYXQyIiwKKwkJCSJ1YXJ0M19ydHNfc2QiLCAiZ3Bpb18xOSIsICJyZmJpX3JlIiwgImRpc3BjMl9wY2xrIiwKKwkJCSJod19kYmc4IiwgInJlc2VydmVkIiksCisJX09NQVA0X01VWEVOVFJZKERQTV9FTVU5LCAyMCwgImRwbV9lbXU5IiwgInVzYmEwX3VscGlwaHlfZGF0MyIsCisJCQkidWFydDNfY3RzX3JjdHgiLCAiZ3Bpb18yMCIsICJyZmJpX3dlIiwKKwkJCSJkaXNwYzJfdnN5bmMiLCAiaHdfZGJnOSIsICJyZXNlcnZlZCIpLAorCV9PTUFQNF9NVVhFTlRSWShEUE1fRU1VMTAsIDIxLCAiZHBtX2VtdTEwIiwgInVzYmEwX3VscGlwaHlfZGF0NCIsCisJCQlOVUxMLCAiZ3Bpb18yMSIsICJyZmJpX2EwIiwgImRpc3BjMl9kZSIsICJod19kYmcxMCIsCisJCQkicmVzZXJ2ZWQiKSwKKwlfT01BUDRfTVVYRU5UUlkoRFBNX0VNVTExLCAyMiwgImRwbV9lbXUxMSIsICJ1c2JhMF91bHBpcGh5X2RhdDUiLAorCQkJTlVMTCwgImdwaW9fMjIiLCAicmZiaV9kYXRhOCIsICJkaXNwYzJfZGF0YTgiLAorCQkJImh3X2RiZzExIiwgInJlc2VydmVkIiksCisJX09NQVA0X01VWEVOVFJZKERQTV9FTVUxMiwgMjMsICJkcG1fZW11MTIiLCAidXNiYTBfdWxwaXBoeV9kYXQ2IiwKKwkJCU5VTEwsICJncGlvXzIzIiwgInJmYmlfZGF0YTciLCAiZGlzcGMyX2RhdGE3IiwKKwkJCSJod19kYmcxMiIsICJyZXNlcnZlZCIpLAorCV9PTUFQNF9NVVhFTlRSWShEUE1fRU1VMTMsIDI0LCAiZHBtX2VtdTEzIiwgInVzYmEwX3VscGlwaHlfZGF0NyIsCisJCQlOVUxMLCAiZ3Bpb18yNCIsICJyZmJpX2RhdGE2IiwgImRpc3BjMl9kYXRhNiIsCisJCQkiaHdfZGJnMTMiLCAicmVzZXJ2ZWQiKSwKKwlfT01BUDRfTVVYRU5UUlkoRFBNX0VNVTE0LCAyNSwgImRwbV9lbXUxNCIsICJzeXNfZHJtX21zZWN1cmUiLAorCQkJInVhcnQxX3J4IiwgImdwaW9fMjUiLCAicmZiaV9kYXRhNSIsICJkaXNwYzJfZGF0YTUiLAorCQkJImh3X2RiZzE0IiwgInJlc2VydmVkIiksCisJX09NQVA0X01VWEVOVFJZKERQTV9FTVUxNSwgMjYsICJkcG1fZW11MTUiLCAic3lzX3NlY3VyZV9pbmRpY2F0b3IiLAorCQkJTlVMTCwgImdwaW9fMjYiLCAicmZiaV9kYXRhNCIsICJkaXNwYzJfZGF0YTQiLAorCQkJImh3X2RiZzE1IiwgInJlc2VydmVkIiksCisJX09NQVA0X01VWEVOVFJZKERQTV9FTVUxNiwgMjcsICJkcG1fZW11MTYiLCAiZG10aW1lcjhfcHdtX2V2dCIsCisJCQkiZHNpMV90ZTAiLCAiZ3Bpb18yNyIsICJyZmJpX2RhdGEzIiwgImRpc3BjMl9kYXRhMyIsCisJCQkiaHdfZGJnMTYiLCAicmVzZXJ2ZWQiKSwKKwlfT01BUDRfTVVYRU5UUlkoRFBNX0VNVTE3LCAyOCwgImRwbV9lbXUxNyIsICJkbXRpbWVyOV9wd21fZXZ0IiwKKwkJCSJkc2kxX3RlMSIsICJncGlvXzI4IiwgInJmYmlfZGF0YTIiLCAiZGlzcGMyX2RhdGEyIiwKKwkJCSJod19kYmcxNyIsICJyZXNlcnZlZCIpLAorCV9PTUFQNF9NVVhFTlRSWShEUE1fRU1VMTgsIDE5MCwgImRwbV9lbXUxOCIsICJkbXRpbWVyMTBfcHdtX2V2dCIsCisJCQkiZHNpMl90ZTAiLCAiZ3Bpb18xOTAiLCAicmZiaV9kYXRhMSIsICJkaXNwYzJfZGF0YTEiLAorCQkJImh3X2RiZzE4IiwgInJlc2VydmVkIiksCisJX09NQVA0X01VWEVOVFJZKERQTV9FTVUxOSwgMTkxLCAiZHBtX2VtdTE5IiwgImRtdGltZXIxMV9wd21fZXZ0IiwKKwkJCSJkc2kyX3RlMSIsICJncGlvXzE5MSIsICJyZmJpX2RhdGEwIiwgImRpc3BjMl9kYXRhMCIsCisJCQkiaHdfZGJnMTkiLCAicmVzZXJ2ZWQiKSwKKwl7IC5yZWdfb2Zmc2V0ID0gT01BUF9NVVhfVEVSTUlOQVRPUiB9LAorfTsKKworLyoKKyAqIEJhbGxzIGZvciA0NFhYIENCTCBwYWNrYWdlCisgKiA1NDctcGluIENCTCBFUzEuMCBTLUZQR0EtTjU0NywgMC40MG1tIEJhbGwgUGl0Y2ggKFRvcCksCisgKgkJCQkgIDAuNDBtbSBCYWxsIFBpdGNoIChCb3R0b20pCisgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19PTUFQX01VWCkgJiYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpCQlcCisJCSYmIGRlZmluZWQoQ09ORklHX09NQVBfUEFDS0FHRV9DQkwpCitzdHJ1Y3Qgb21hcF9iYWxsIF9faW5pdGRhdGEgb21hcDRfY29yZV9jYmxfYmFsbFtdID0geworCV9PTUFQNF9CQUxMRU5UUlkoR1BNQ19BRDAsICJjMTIiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKEdQTUNfQUQxLCAiZDEyIiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShHUE1DX0FEMiwgImMxMyIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoR1BNQ19BRDMsICJkMTMiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKEdQTUNfQUQ0LCAiYzE1IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShHUE1DX0FENSwgImQxNSIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoR1BNQ19BRDYsICJhMTYiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKEdQTUNfQUQ3LCAiYjE2IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShHUE1DX0FEOCwgImMxNiIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoR1BNQ19BRDksICJkMTYiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKEdQTUNfQUQxMCwgImMxNyIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoR1BNQ19BRDExLCAiZDE3IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShHUE1DX0FEMTIsICJjMTgiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKEdQTUNfQUQxMywgImQxOCIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoR1BNQ19BRDE0LCAiYzE5IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShHUE1DX0FEMTUsICJkMTkiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKEdQTUNfQTE2LCAiYjE3IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShHUE1DX0ExNywgImExOCIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoR1BNQ19BMTgsICJiMTgiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKEdQTUNfQTE5LCAiYTE5IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShHUE1DX0EyMCwgImIxOSIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoR1BNQ19BMjEsICJiMjAiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKEdQTUNfQTIyLCAiYTIxIiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShHUE1DX0EyMywgImIyMSIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoR1BNQ19BMjQsICJjMjAiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKEdQTUNfQTI1LCAiZDIwIiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShHUE1DX05DUzAsICJiMjUiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKEdQTUNfTkNTMSwgImMyMSIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoR1BNQ19OQ1MyLCAiZDIxIiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShHUE1DX05DUzMsICJjMjIiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKEdQTUNfTldQLCAiYzI1IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShHUE1DX0NMSywgImIyMiIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoR1BNQ19OQURWX0FMRSwgImQyNSIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoR1BNQ19OT0UsICJiMTEiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKEdQTUNfTldFLCAiYjEyIiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShHUE1DX05CRTBfQ0xFLCAiYzIzIiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShHUE1DX05CRTEsICJkMjIiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKEdQTUNfV0FJVDAsICJiMjYiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKEdQTUNfV0FJVDEsICJiMjMiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKEMyQ19EQVRBMTEsICJkMjMiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKEMyQ19EQVRBMTIsICJhMjQiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKEMyQ19EQVRBMTMsICJiMjQiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKEMyQ19EQVRBMTQsICJjMjQiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKEMyQ19EQVRBMTUsICJkMjQiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKEhETUlfSFBELCAiYjkiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKEhETUlfQ0VDLCAiYjEwIiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShIRE1JX0REQ19TQ0wsICJhOCIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoSERNSV9ERENfU0RBLCAiYjgiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKENTSTIxX0RYMCwgInIyNiIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoQ1NJMjFfRFkwLCAicjI1IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShDU0kyMV9EWDEsICJ0MjYiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKENTSTIxX0RZMSwgInQyNSIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoQ1NJMjFfRFgyLCAidTI2IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShDU0kyMV9EWTIsICJ1MjUiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKENTSTIxX0RYMywgInYyNiIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoQ1NJMjFfRFkzLCAidjI1IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShDU0kyMV9EWDQsICJ3MjYiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKENTSTIxX0RZNCwgIncyNSIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoQ1NJMjJfRFgwLCAibTI2IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShDU0kyMl9EWTAsICJtMjUiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKENTSTIyX0RYMSwgIm4yNiIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoQ1NJMjJfRFkxLCAibjI1IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShDQU1fU0hVVFRFUiwgInQyNyIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoQ0FNX1NUUk9CRSwgInUyNyIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoQ0FNX0dMT0JBTFJFU0VULCAidjI3IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShVU0JCMV9VTFBJVExMX0NMSywgImFlMTgiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKFVTQkIxX1VMUElUTExfU1RQLCAiYWcxOSIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoVVNCQjFfVUxQSVRMTF9ESVIsICJhZjE5IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShVU0JCMV9VTFBJVExMX05YVCwgImFlMTkiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKFVTQkIxX1VMUElUTExfREFUMCwgImFmMTgiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKFVTQkIxX1VMUElUTExfREFUMSwgImFnMTgiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKFVTQkIxX1VMUElUTExfREFUMiwgImFlMTciLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKFVTQkIxX1VMUElUTExfREFUMywgImFmMTciLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKFVTQkIxX1VMUElUTExfREFUNCwgImFoMTciLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKFVTQkIxX1VMUElUTExfREFUNSwgImFlMTYiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKFVTQkIxX1VMUElUTExfREFUNiwgImFmMTYiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKFVTQkIxX1VMUElUTExfREFUNywgImFnMTYiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKFVTQkIxX0hTSUNfREFUQSwgImFmMTQiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKFVTQkIxX0hTSUNfU1RST0JFLCAiYWUxNCIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoVVNCQzFfSUNVU0JfRFAsICJoMiIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoVVNCQzFfSUNVU0JfRE0sICJoMyIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoU0RNTUMxX0NMSywgImQyIiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShTRE1NQzFfQ01ELCAiZTMiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKFNETU1DMV9EQVQwLCAiZTQiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKFNETU1DMV9EQVQxLCAiZTIiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKFNETU1DMV9EQVQyLCAiZTEiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKFNETU1DMV9EQVQzLCAiZjQiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKFNETU1DMV9EQVQ0LCAiZjMiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKFNETU1DMV9EQVQ1LCAiZjEiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKFNETU1DMV9EQVQ2LCAiZzQiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKFNETU1DMV9EQVQ3LCAiZzMiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKEFCRV9NQ0JTUDJfQ0xLWCwgImFkMjciLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKEFCRV9NQ0JTUDJfRFIsICJhZDI2IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShBQkVfTUNCU1AyX0RYLCAiYWQyNSIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoQUJFX01DQlNQMl9GU1gsICJhYzI4IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShBQkVfTUNCU1AxX0NMS1gsICJhYzI2IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShBQkVfTUNCU1AxX0RSLCAiYWMyNSIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoQUJFX01DQlNQMV9EWCwgImFiMjUiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKEFCRV9NQ0JTUDFfRlNYLCAiYWMyNyIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoQUJFX1BETV9VTF9EQVRBLCAiYWcyNSIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoQUJFX1BETV9ETF9EQVRBLCAiYWYyNSIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoQUJFX1BETV9GUkFNRSwgImFlMjUiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKEFCRV9QRE1fTEJfQ0xLLCAiYWYyNiIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoQUJFX0NMS1MsICJhaDI2IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShBQkVfRE1JQ19DTEsxLCAiYWUyNCIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoQUJFX0RNSUNfRElOMSwgImFmMjQiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKEFCRV9ETUlDX0RJTjIsICJhZzI0IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShBQkVfRE1JQ19ESU4zLCAiYWgyNCIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoVUFSVDJfQ1RTLCAiYWIyNiIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoVUFSVDJfUlRTLCAiYWIyNyIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoVUFSVDJfUlgsICJhYTI1IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShVQVJUMl9UWCwgImFhMjYiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKEhEUV9TSU8sICJhYTI3IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShJMkMxX1NDTCwgImFlMjgiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKEkyQzFfU0RBLCAiYWUyNiIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoSTJDMl9TQ0wsICJjMjYiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKEkyQzJfU0RBLCAiZDI2IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShJMkMzX1NDTCwgIncyNyIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoSTJDM19TREEsICJ5MjciLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKEkyQzRfU0NMLCAiYWcyMSIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoSTJDNF9TREEsICJhaDIyIiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShNQ1NQSTFfQ0xLLCAiYWYyMiIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoTUNTUEkxX1NPTUksICJhZTIyIiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShNQ1NQSTFfU0lNTywgImFnMjIiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKE1DU1BJMV9DUzAsICJhZTIzIiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShNQ1NQSTFfQ1MxLCAiYWYyMyIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoTUNTUEkxX0NTMiwgImFnMjMiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKE1DU1BJMV9DUzMsICJhaDIzIiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShVQVJUM19DVFNfUkNUWCwgImYyNyIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoVUFSVDNfUlRTX1NELCAiZjI4IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShVQVJUM19SWF9JUlJYLCAiZzI3IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShVQVJUM19UWF9JUlRYLCAiZzI4IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShTRE1NQzVfQ0xLLCAiYWU1IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShTRE1NQzVfQ01ELCAiYWY1IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShTRE1NQzVfREFUMCwgImFlNCIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoU0RNTUM1X0RBVDEsICJhZjQiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKFNETU1DNV9EQVQyLCAiYWczIiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShTRE1NQzVfREFUMywgImFmMyIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoTUNTUEk0X0NMSywgImFlMjEiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKE1DU1BJNF9TSU1PLCAiYWYyMCIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoTUNTUEk0X1NPTUksICJhZjIxIiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShNQ1NQSTRfQ1MwLCAiYWUyMCIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoVUFSVDRfUlgsICJhZzIwIiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShVQVJUNF9UWCwgImFoMTkiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKFVTQkIyX1VMUElUTExfQ0xLLCAiYWcxMiIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoVVNCQjJfVUxQSVRMTF9TVFAsICJhZjEyIiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShVU0JCMl9VTFBJVExMX0RJUiwgImFlMTIiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKFVTQkIyX1VMUElUTExfTlhULCAiYWcxMyIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoVVNCQjJfVUxQSVRMTF9EQVQwLCAiYWUxMSIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoVVNCQjJfVUxQSVRMTF9EQVQxLCAiYWYxMSIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoVVNCQjJfVUxQSVRMTF9EQVQyLCAiYWcxMSIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoVVNCQjJfVUxQSVRMTF9EQVQzLCAiYWgxMSIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoVVNCQjJfVUxQSVRMTF9EQVQ0LCAiYWUxMCIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoVVNCQjJfVUxQSVRMTF9EQVQ1LCAiYWYxMCIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoVVNCQjJfVUxQSVRMTF9EQVQ2LCAiYWcxMCIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoVVNCQjJfVUxQSVRMTF9EQVQ3LCAiYWU5IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShVU0JCMl9IU0lDX0RBVEEsICJhZjEzIiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShVU0JCMl9IU0lDX1NUUk9CRSwgImFlMTMiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKFVOSVBST19UWDAsICJnMjYiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKFVOSVBST19UWTAsICJnMjUiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKFVOSVBST19UWDEsICJoMjYiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKFVOSVBST19UWTEsICJoMjUiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKFVOSVBST19UWDIsICJqMjciLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKFVOSVBST19UWTIsICJoMjciLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKFVOSVBST19SWDAsICJqMjYiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKFVOSVBST19SWTAsICJqMjUiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKFVOSVBST19SWDEsICJrMjYiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKFVOSVBST19SWTEsICJrMjUiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKFVOSVBST19SWDIsICJsMjciLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKFVOSVBST19SWTIsICJrMjciLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKFVTQkEwX09UR19DRSwgImMzIiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShVU0JBMF9PVEdfRFAsICJiNSIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoVVNCQTBfT1RHX0RNLCAiYjQiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKEZSRUZfQ0xLMV9PVVQsICJhYTI4IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShGUkVGX0NMSzJfT1VULCAieTI4IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShTWVNfTklSUTEsICJhZTYiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKFNZU19OSVJRMiwgImFmNiIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoU1lTX0JPT1QwLCAiZjI2IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShTWVNfQk9PVDEsICJlMjciLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKFNZU19CT09UMiwgImUyNiIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoU1lTX0JPT1QzLCAiZTI1IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShTWVNfQk9PVDQsICJkMjgiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKFNZU19CT09UNSwgImQyNyIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoRFBNX0VNVTAsICJtMiIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoRFBNX0VNVTEsICJuMiIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoRFBNX0VNVTIsICJwMiIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoRFBNX0VNVTMsICJ2MSIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoRFBNX0VNVTQsICJ2MiIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoRFBNX0VNVTUsICJ3MSIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoRFBNX0VNVTYsICJ3MiIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoRFBNX0VNVTcsICJ3MyIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoRFBNX0VNVTgsICJ3NCIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoRFBNX0VNVTksICJ5MiIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoRFBNX0VNVTEwLCAieTMiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKERQTV9FTVUxMSwgInk0IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShEUE1fRU1VMTIsICJhYTEiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKERQTV9FTVUxMywgImFhMiIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoRFBNX0VNVTE0LCAiYWEzIiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShEUE1fRU1VMTUsICJhYTQiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKERQTV9FTVUxNiwgImFiMiIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoRFBNX0VNVTE3LCAiYWIzIiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShEUE1fRU1VMTgsICJhYjQiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKERQTV9FTVUxOSwgImFjNCIsIE5VTEwpLAorCXsgLnJlZ19vZmZzZXQgPSBPTUFQX01VWF9URVJNSU5BVE9SIH0sCit9OworI2Vsc2UKKyNkZWZpbmUgb21hcDRfY29yZV9jYmxfYmFsbCAgTlVMTAorI2VuZGlmCisKKy8qCisgKiBTdXBlcnNldCBvZiBhbGwgbXV4IG1vZGVzIGZvciBvbWFwNCBFUzIuMAorICovCitzdGF0aWMgc3RydWN0IG9tYXBfbXV4IF9faW5pdGRhdGEgb21hcDRfZXMyX2NvcmVfbXV4bW9kZXNbXSA9IHsKKwlfT01BUDRfTVVYRU5UUlkoR1BNQ19BRDAsIDAsICJncG1jX2FkMCIsICJzZG1tYzJfZGF0MCIsIE5VTEwsIE5VTEwsCisJCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDRfTVVYRU5UUlkoR1BNQ19BRDEsIDAsICJncG1jX2FkMSIsICJzZG1tYzJfZGF0MSIsIE5VTEwsIE5VTEwsCisJCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDRfTVVYRU5UUlkoR1BNQ19BRDIsIDAsICJncG1jX2FkMiIsICJzZG1tYzJfZGF0MiIsIE5VTEwsIE5VTEwsCisJCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDRfTVVYRU5UUlkoR1BNQ19BRDMsIDAsICJncG1jX2FkMyIsICJzZG1tYzJfZGF0MyIsIE5VTEwsIE5VTEwsCisJCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDRfTVVYRU5UUlkoR1BNQ19BRDQsIDAsICJncG1jX2FkNCIsICJzZG1tYzJfZGF0NCIsCisJCQkic2RtbWMyX2Rpcl9kYXQwIiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVA0X01VWEVOVFJZKEdQTUNfQUQ1LCAwLCAiZ3BtY19hZDUiLCAic2RtbWMyX2RhdDUiLAorCQkJInNkbW1jMl9kaXJfZGF0MSIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpLAorCV9PTUFQNF9NVVhFTlRSWShHUE1DX0FENiwgMCwgImdwbWNfYWQ2IiwgInNkbW1jMl9kYXQ2IiwKKwkJCSJzZG1tYzJfZGlyX2NtZCIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpLAorCV9PTUFQNF9NVVhFTlRSWShHUE1DX0FENywgMCwgImdwbWNfYWQ3IiwgInNkbW1jMl9kYXQ3IiwKKwkJCSJzZG1tYzJfY2xrX2ZkYmsiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDRfTVVYRU5UUlkoR1BNQ19BRDgsIDMyLCAiZ3BtY19hZDgiLCAia3BkX3JvdzAiLCAiYzJjX2RhdGExNSIsCisJCQkiZ3Bpb18zMiIsIE5VTEwsICJzZG1tYzFfZGF0MCIsIE5VTEwsIE5VTEwpLAorCV9PTUFQNF9NVVhFTlRSWShHUE1DX0FEOSwgMzMsICJncG1jX2FkOSIsICJrcGRfcm93MSIsICJjMmNfZGF0YTE0IiwKKwkJCSJncGlvXzMzIiwgTlVMTCwgInNkbW1jMV9kYXQxIiwgTlVMTCwgTlVMTCksCisJX09NQVA0X01VWEVOVFJZKEdQTUNfQUQxMCwgMzQsICJncG1jX2FkMTAiLCAia3BkX3JvdzIiLCAiYzJjX2RhdGExMyIsCisJCQkiZ3Bpb18zNCIsIE5VTEwsICJzZG1tYzFfZGF0MiIsIE5VTEwsIE5VTEwpLAorCV9PTUFQNF9NVVhFTlRSWShHUE1DX0FEMTEsIDM1LCAiZ3BtY19hZDExIiwgImtwZF9yb3czIiwgImMyY19kYXRhMTIiLAorCQkJImdwaW9fMzUiLCBOVUxMLCAic2RtbWMxX2RhdDMiLCBOVUxMLCBOVUxMKSwKKwlfT01BUDRfTVVYRU5UUlkoR1BNQ19BRDEyLCAzNiwgImdwbWNfYWQxMiIsICJrcGRfY29sMCIsICJjMmNfZGF0YTExIiwKKwkJCSJncGlvXzM2IiwgTlVMTCwgInNkbW1jMV9kYXQ0IiwgTlVMTCwgTlVMTCksCisJX09NQVA0X01VWEVOVFJZKEdQTUNfQUQxMywgMzcsICJncG1jX2FkMTMiLCAia3BkX2NvbDEiLCAiYzJjX2RhdGExMCIsCisJCQkiZ3Bpb18zNyIsIE5VTEwsICJzZG1tYzFfZGF0NSIsIE5VTEwsIE5VTEwpLAorCV9PTUFQNF9NVVhFTlRSWShHUE1DX0FEMTQsIDM4LCAiZ3BtY19hZDE0IiwgImtwZF9jb2wyIiwgImMyY19kYXRhOSIsCisJCQkiZ3Bpb18zOCIsIE5VTEwsICJzZG1tYzFfZGF0NiIsIE5VTEwsIE5VTEwpLAorCV9PTUFQNF9NVVhFTlRSWShHUE1DX0FEMTUsIDM5LCAiZ3BtY19hZDE1IiwgImtwZF9jb2wzIiwgImMyY19kYXRhOCIsCisJCQkiZ3Bpb18zOSIsIE5VTEwsICJzZG1tYzFfZGF0NyIsIE5VTEwsIE5VTEwpLAorCV9PTUFQNF9NVVhFTlRSWShHUE1DX0ExNiwgNDAsICJncG1jX2ExNiIsICJrcGRfcm93NCIsICJjMmNfZGF0YWluMCIsCisJCQkiZ3Bpb180MCIsICJ2ZW5jXzY1Nl9kYXRhMCIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoR1BNQ19BMTcsIDQxLCAiZ3BtY19hMTciLCAia3BkX3JvdzUiLCAiYzJjX2RhdGFpbjEiLAorCQkJImdwaW9fNDEiLCAidmVuY182NTZfZGF0YTEiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKEdQTUNfQTE4LCA0MiwgImdwbWNfYTE4IiwgImtwZF9yb3c2IiwgImMyY19kYXRhaW4yIiwKKwkJCSJncGlvXzQyIiwgInZlbmNfNjU2X2RhdGEyIiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShHUE1DX0ExOSwgNDMsICJncG1jX2ExOSIsICJrcGRfcm93NyIsICJjMmNfZGF0YWluMyIsCisJCQkiZ3Bpb180MyIsICJ2ZW5jXzY1Nl9kYXRhMyIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoR1BNQ19BMjAsIDQ0LCAiZ3BtY19hMjAiLCAia3BkX2NvbDQiLCAiYzJjX2RhdGFpbjQiLAorCQkJImdwaW9fNDQiLCAidmVuY182NTZfZGF0YTQiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKEdQTUNfQTIxLCA0NSwgImdwbWNfYTIxIiwgImtwZF9jb2w1IiwgImMyY19kYXRhaW41IiwKKwkJCSJncGlvXzQ1IiwgInZlbmNfNjU2X2RhdGE1IiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShHUE1DX0EyMiwgNDYsICJncG1jX2EyMiIsICJrcGRfY29sNiIsICJjMmNfZGF0YWluNiIsCisJCQkiZ3Bpb180NiIsICJ2ZW5jXzY1Nl9kYXRhNiIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoR1BNQ19BMjMsIDQ3LCAiZ3BtY19hMjMiLCAia3BkX2NvbDciLCAiYzJjX2RhdGFpbjciLAorCQkJImdwaW9fNDciLCAidmVuY182NTZfZGF0YTciLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKEdQTUNfQTI0LCA0OCwgImdwbWNfYTI0IiwgImtwZF9jb2w4IiwgImMyY19jbGtvdXQwIiwKKwkJCSJncGlvXzQ4IiwgTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShHUE1DX0EyNSwgNDksICJncG1jX2EyNSIsIE5VTEwsICJjMmNfY2xrb3V0MSIsCisJCQkiZ3Bpb180OSIsIE5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoR1BNQ19OQ1MwLCA1MCwgImdwbWNfbmNzMCIsIE5VTEwsIE5VTEwsICJncGlvXzUwIiwKKwkJCSJzeXNfbmRtYXJlcTAiLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDRfTVVYRU5UUlkoR1BNQ19OQ1MxLCA1MSwgImdwbWNfbmNzMSIsIE5VTEwsICJjMmNfZGF0YW91dDYiLAorCQkJImdwaW9fNTEiLCBOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKEdQTUNfTkNTMiwgNTIsICJncG1jX25jczIiLCAia3BkX3JvdzgiLAorCQkJImMyY19kYXRhb3V0NyIsICJncGlvXzUyIiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJCSJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoR1BNQ19OQ1MzLCA1MywgImdwbWNfbmNzMyIsICJncG1jX2RpciIsCisJCQkiYzJjX2RhdGFvdXQ0IiwgImdwaW9fNTMiLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkJInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShHUE1DX05XUCwgNTQsICJncG1jX253cCIsICJkc2kxX3RlMCIsIE5VTEwsICJncGlvXzU0IiwKKwkJCSJzeXNfbmRtYXJlcTEiLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDRfTVVYRU5UUlkoR1BNQ19DTEssIDU1LCAiZ3BtY19jbGsiLCBOVUxMLCBOVUxMLCAiZ3Bpb181NSIsCisJCQkic3lzX25kbWFyZXEyIiwgInNkbW1jMV9jbWQiLCBOVUxMLCBOVUxMKSwKKwlfT01BUDRfTVVYRU5UUlkoR1BNQ19OQURWX0FMRSwgNTYsICJncG1jX25hZHZfYWxlIiwgImRzaTFfdGUxIiwgTlVMTCwKKwkJCSJncGlvXzU2IiwgInN5c19uZG1hcmVxMyIsICJzZG1tYzFfY2xrIiwgTlVMTCwgTlVMTCksCisJX09NQVA0X01VWEVOVFJZKEdQTUNfTk9FLCAwLCAiZ3BtY19ub2UiLCAic2RtbWMyX2NsayIsIE5VTEwsIE5VTEwsCisJCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDRfTVVYRU5UUlkoR1BNQ19OV0UsIDAsICJncG1jX253ZSIsICJzZG1tYzJfY21kIiwgTlVMTCwgTlVMTCwKKwkJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpLAorCV9PTUFQNF9NVVhFTlRSWShHUE1DX05CRTBfQ0xFLCA1OSwgImdwbWNfbmJlMF9jbGUiLCAiZHNpMl90ZTAiLCBOVUxMLAorCQkJImdwaW9fNTkiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDRfTVVYRU5UUlkoR1BNQ19OQkUxLCA2MCwgImdwbWNfbmJlMSIsIE5VTEwsICJjMmNfZGF0YW91dDUiLAorCQkJImdwaW9fNjAiLCBOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKEdQTUNfV0FJVDAsIDYxLCAiZ3BtY193YWl0MCIsICJkc2kyX3RlMSIsIE5VTEwsCisJCQkiZ3Bpb182MSIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpLAorCV9PTUFQNF9NVVhFTlRSWShHUE1DX1dBSVQxLCA2MiwgImdwbWNfd2FpdDEiLCBOVUxMLCAiYzJjX2RhdGFvdXQyIiwKKwkJCSJncGlvXzYyIiwgTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShHUE1DX1dBSVQyLCAxMDAsICJncG1jX3dhaXQyIiwgInVzYmMxX2ljdXNiX3R4ZW4iLAorCQkJImMyY19kYXRhb3V0MyIsICJncGlvXzEwMCIsICJzeXNfbmRtYXJlcTAiLCBOVUxMLAorCQkJTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShHUE1DX05DUzQsIDEwMSwgImdwbWNfbmNzNCIsICJkc2kxX3RlMCIsICJjMmNfY2xraW4wIiwKKwkJCSJncGlvXzEwMSIsICJzeXNfbmRtYXJlcTEiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKEdQTUNfTkNTNSwgMTAyLCAiZ3BtY19uY3M1IiwgImRzaTFfdGUxIiwgImMyY19jbGtpbjEiLAorCQkJImdwaW9fMTAyIiwgInN5c19uZG1hcmVxMiIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoR1BNQ19OQ1M2LCAxMDMsICJncG1jX25jczYiLCAiZHNpMl90ZTAiLAorCQkJImMyY19kYXRhb3V0MCIsICJncGlvXzEwMyIsICJzeXNfbmRtYXJlcTMiLCBOVUxMLAorCQkJTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShHUE1DX05DUzcsIDEwNCwgImdwbWNfbmNzNyIsICJkc2kyX3RlMSIsCisJCQkiYzJjX2RhdGFvdXQxIiwgImdwaW9fMTA0IiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJCSJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoSERNSV9IUEQsIDYzLCAiaGRtaV9ocGQiLCBOVUxMLCBOVUxMLCAiZ3Bpb182MyIsIE5VTEwsCisJCQlOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKEhETUlfQ0VDLCA2NCwgImhkbWlfY2VjIiwgTlVMTCwgTlVMTCwgImdwaW9fNjQiLCBOVUxMLAorCQkJTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShIRE1JX0REQ19TQ0wsIDY1LCAiaGRtaV9kZGNfc2NsIiwgTlVMTCwgTlVMTCwKKwkJCSJncGlvXzY1IiwgTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShIRE1JX0REQ19TREEsIDY2LCAiaGRtaV9kZGNfc2RhIiwgTlVMTCwgTlVMTCwKKwkJCSJncGlvXzY2IiwgTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShDU0kyMV9EWDAsIDAsICJjc2kyMV9keDAiLCBOVUxMLCBOVUxMLCAiZ3BpXzY3IiwgTlVMTCwKKwkJCU5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoQ1NJMjFfRFkwLCAwLCAiY3NpMjFfZHkwIiwgTlVMTCwgTlVMTCwgImdwaV82OCIsIE5VTEwsCisJCQlOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKENTSTIxX0RYMSwgMCwgImNzaTIxX2R4MSIsIE5VTEwsIE5VTEwsICJncGlfNjkiLCBOVUxMLAorCQkJTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShDU0kyMV9EWTEsIDAsICJjc2kyMV9keTEiLCBOVUxMLCBOVUxMLCAiZ3BpXzcwIiwgTlVMTCwKKwkJCU5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoQ1NJMjFfRFgyLCAwLCAiY3NpMjFfZHgyIiwgTlVMTCwgTlVMTCwgImdwaV83MSIsIE5VTEwsCisJCQlOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKENTSTIxX0RZMiwgMCwgImNzaTIxX2R5MiIsIE5VTEwsIE5VTEwsICJncGlfNzIiLCBOVUxMLAorCQkJTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShDU0kyMV9EWDMsIDAsICJjc2kyMV9keDMiLCBOVUxMLCBOVUxMLCAiZ3BpXzczIiwgTlVMTCwKKwkJCU5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoQ1NJMjFfRFkzLCAwLCAiY3NpMjFfZHkzIiwgTlVMTCwgTlVMTCwgImdwaV83NCIsIE5VTEwsCisJCQlOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKENTSTIxX0RYNCwgMCwgImNzaTIxX2R4NCIsIE5VTEwsIE5VTEwsICJncGlfNzUiLCBOVUxMLAorCQkJTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShDU0kyMV9EWTQsIDAsICJjc2kyMV9keTQiLCBOVUxMLCBOVUxMLCAiZ3BpXzc2IiwgTlVMTCwKKwkJCU5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoQ1NJMjJfRFgwLCAwLCAiY3NpMjJfZHgwIiwgTlVMTCwgTlVMTCwgImdwaV83NyIsIE5VTEwsCisJCQlOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKENTSTIyX0RZMCwgMCwgImNzaTIyX2R5MCIsIE5VTEwsIE5VTEwsICJncGlfNzgiLCBOVUxMLAorCQkJTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShDU0kyMl9EWDEsIDAsICJjc2kyMl9keDEiLCBOVUxMLCBOVUxMLCAiZ3BpXzc5IiwgTlVMTCwKKwkJCU5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoQ1NJMjJfRFkxLCAwLCAiY3NpMjJfZHkxIiwgTlVMTCwgTlVMTCwgImdwaV84MCIsIE5VTEwsCisJCQlOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKENBTV9TSFVUVEVSLCA4MSwgImNhbV9zaHV0dGVyIiwgTlVMTCwgTlVMTCwgImdwaW9fODEiLAorCQkJTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShDQU1fU1RST0JFLCA4MiwgImNhbV9zdHJvYmUiLCBOVUxMLCBOVUxMLCAiZ3Bpb184MiIsCisJCQlOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKENBTV9HTE9CQUxSRVNFVCwgODMsICJjYW1fZ2xvYmFscmVzZXQiLCBOVUxMLCBOVUxMLAorCQkJImdwaW9fODMiLCBOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKFVTQkIxX1VMUElUTExfQ0xLLCA4NCwgInVzYmIxX3VscGl0bGxfY2xrIiwKKwkJCSJoc2kxX2Nhd2FrZSIsIE5VTEwsICJncGlvXzg0IiwgInVzYmIxX3VscGlwaHlfY2xrIiwKKwkJCU5VTEwsICJod19kYmcyMCIsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoVVNCQjFfVUxQSVRMTF9TVFAsIDg1LCAidXNiYjFfdWxwaXRsbF9zdHAiLAorCQkJImhzaTFfY2FkYXRhIiwgIm1jYnNwNF9jbGtyIiwgImdwaW9fODUiLAorCQkJInVzYmIxX3VscGlwaHlfc3RwIiwgInVzYmIxX21tX3J4ZHAiLCAiaHdfZGJnMjEiLAorCQkJInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShVU0JCMV9VTFBJVExMX0RJUiwgODYsICJ1c2JiMV91bHBpdGxsX2RpciIsCisJCQkiaHNpMV9jYWZsYWciLCAibWNic3A0X2ZzciIsICJncGlvXzg2IiwKKwkJCSJ1c2JiMV91bHBpcGh5X2RpciIsIE5VTEwsICJod19kYmcyMiIsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoVVNCQjFfVUxQSVRMTF9OWFQsIDg3LCAidXNiYjFfdWxwaXRsbF9ueHQiLAorCQkJImhzaTFfYWNyZWFkeSIsICJtY2JzcDRfZnN4IiwgImdwaW9fODciLAorCQkJInVzYmIxX3VscGlwaHlfbnh0IiwgInVzYmIxX21tX3J4ZG0iLCAiaHdfZGJnMjMiLAorCQkJInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShVU0JCMV9VTFBJVExMX0RBVDAsIDg4LCAidXNiYjFfdWxwaXRsbF9kYXQwIiwKKwkJCSJoc2kxX2Fjd2FrZSIsICJtY2JzcDRfY2xreCIsICJncGlvXzg4IiwKKwkJCSJ1c2JiMV91bHBpcGh5X2RhdDAiLCAidXNiYjFfbW1fdHhlbiIsICJod19kYmcyNCIsCisJCQkic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKFVTQkIxX1VMUElUTExfREFUMSwgODksICJ1c2JiMV91bHBpdGxsX2RhdDEiLAorCQkJImhzaTFfYWNkYXRhIiwgIm1jYnNwNF9keCIsICJncGlvXzg5IiwKKwkJCSJ1c2JiMV91bHBpcGh5X2RhdDEiLCAidXNiYjFfbW1fdHhkYXQiLCAiaHdfZGJnMjUiLAorCQkJInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShVU0JCMV9VTFBJVExMX0RBVDIsIDkwLCAidXNiYjFfdWxwaXRsbF9kYXQyIiwKKwkJCSJoc2kxX2FjZmxhZyIsICJtY2JzcDRfZHIiLCAiZ3Bpb185MCIsCisJCQkidXNiYjFfdWxwaXBoeV9kYXQyIiwgInVzYmIxX21tX3R4c2UwIiwgImh3X2RiZzI2IiwKKwkJCSJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoVVNCQjFfVUxQSVRMTF9EQVQzLCA5MSwgInVzYmIxX3VscGl0bGxfZGF0MyIsCisJCQkiaHNpMV9jYXJlYWR5IiwgTlVMTCwgImdwaW9fOTEiLCAidXNiYjFfdWxwaXBoeV9kYXQzIiwKKwkJCSJ1c2JiMV9tbV9yeHJjdiIsICJod19kYmcyNyIsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoVVNCQjFfVUxQSVRMTF9EQVQ0LCA5MiwgInVzYmIxX3VscGl0bGxfZGF0NCIsCisJCQkiZG10aW1lcjhfcHdtX2V2dCIsICJhYmVfbWNic3AzX2RyIiwgImdwaW9fOTIiLAorCQkJInVzYmIxX3VscGlwaHlfZGF0NCIsIE5VTEwsICJod19kYmcyOCIsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoVVNCQjFfVUxQSVRMTF9EQVQ1LCA5MywgInVzYmIxX3VscGl0bGxfZGF0NSIsCisJCQkiZG10aW1lcjlfcHdtX2V2dCIsICJhYmVfbWNic3AzX2R4IiwgImdwaW9fOTMiLAorCQkJInVzYmIxX3VscGlwaHlfZGF0NSIsIE5VTEwsICJod19kYmcyOSIsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoVVNCQjFfVUxQSVRMTF9EQVQ2LCA5NCwgInVzYmIxX3VscGl0bGxfZGF0NiIsCisJCQkiZG10aW1lcjEwX3B3bV9ldnQiLCAiYWJlX21jYnNwM19jbGt4IiwgImdwaW9fOTQiLAorCQkJInVzYmIxX3VscGlwaHlfZGF0NiIsICJhYmVfZG1pY19kaW4zIiwgImh3X2RiZzMwIiwKKwkJCSJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoVVNCQjFfVUxQSVRMTF9EQVQ3LCA5NSwgInVzYmIxX3VscGl0bGxfZGF0NyIsCisJCQkiZG10aW1lcjExX3B3bV9ldnQiLCAiYWJlX21jYnNwM19mc3giLCAiZ3Bpb185NSIsCisJCQkidXNiYjFfdWxwaXBoeV9kYXQ3IiwgImFiZV9kbWljX2NsazMiLCAiaHdfZGJnMzEiLAorCQkJInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShVU0JCMV9IU0lDX0RBVEEsIDk2LCAidXNiYjFfaHNpY19kYXRhIiwgTlVMTCwgTlVMTCwKKwkJCSJncGlvXzk2IiwgTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShVU0JCMV9IU0lDX1NUUk9CRSwgOTcsICJ1c2JiMV9oc2ljX3N0cm9iZSIsIE5VTEwsCisJCQlOVUxMLCAiZ3Bpb185NyIsIE5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoVVNCQzFfSUNVU0JfRFAsIDk4LCAidXNiYzFfaWN1c2JfZHAiLCBOVUxMLCBOVUxMLAorCQkJImdwaW9fOTgiLCBOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKFVTQkMxX0lDVVNCX0RNLCA5OSwgInVzYmMxX2ljdXNiX2RtIiwgTlVMTCwgTlVMTCwKKwkJCSJncGlvXzk5IiwgTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShTRE1NQzFfQ0xLLCAxMDAsICJzZG1tYzFfY2xrIiwgTlVMTCwgImRwbV9lbXUxOSIsCisJCQkiZ3Bpb18xMDAiLCBOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKFNETU1DMV9DTUQsIDEwMSwgInNkbW1jMV9jbWQiLCBOVUxMLCAidWFydDFfcngiLAorCQkJImdwaW9fMTAxIiwgTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShTRE1NQzFfREFUMCwgMTAyLCAic2RtbWMxX2RhdDAiLCBOVUxMLCAiZHBtX2VtdTE4IiwKKwkJCSJncGlvXzEwMiIsIE5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoU0RNTUMxX0RBVDEsIDEwMywgInNkbW1jMV9kYXQxIiwgTlVMTCwgImRwbV9lbXUxNyIsCisJCQkiZ3Bpb18xMDMiLCBOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKFNETU1DMV9EQVQyLCAxMDQsICJzZG1tYzFfZGF0MiIsIE5VTEwsICJkcG1fZW11MTYiLAorCQkJImdwaW9fMTA0IiwgImp0YWdfdG1zX3Rtc2MiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKFNETU1DMV9EQVQzLCAxMDUsICJzZG1tYzFfZGF0MyIsIE5VTEwsICJkcG1fZW11MTUiLAorCQkJImdwaW9fMTA1IiwgImp0YWdfdGNrIiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShTRE1NQzFfREFUNCwgMTA2LCAic2RtbWMxX2RhdDQiLCBOVUxMLCBOVUxMLAorCQkJImdwaW9fMTA2IiwgTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShTRE1NQzFfREFUNSwgMTA3LCAic2RtbWMxX2RhdDUiLCBOVUxMLCBOVUxMLAorCQkJImdwaW9fMTA3IiwgTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShTRE1NQzFfREFUNiwgMTA4LCAic2RtbWMxX2RhdDYiLCBOVUxMLCBOVUxMLAorCQkJImdwaW9fMTA4IiwgTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShTRE1NQzFfREFUNywgMTA5LCAic2RtbWMxX2RhdDciLCBOVUxMLCBOVUxMLAorCQkJImdwaW9fMTA5IiwgTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShBQkVfTUNCU1AyX0NMS1gsIDExMCwgImFiZV9tY2JzcDJfY2xreCIsICJtY3NwaTJfY2xrIiwKKwkJCSJhYmVfbWNhc3BfYWhjbGt4IiwgImdwaW9fMTEwIiwgInVzYmIyX21tX3J4ZG0iLAorCQkJTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShBQkVfTUNCU1AyX0RSLCAxMTEsICJhYmVfbWNic3AyX2RyIiwgIm1jc3BpMl9zb21pIiwKKwkJCSJhYmVfbWNhc3BfYXhyIiwgImdwaW9fMTExIiwgInVzYmIyX21tX3J4ZHAiLCBOVUxMLAorCQkJTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShBQkVfTUNCU1AyX0RYLCAxMTIsICJhYmVfbWNic3AyX2R4IiwgIm1jc3BpMl9zaW1vIiwKKwkJCSJhYmVfbWNhc3BfYW11dGUiLCAiZ3Bpb18xMTIiLCAidXNiYjJfbW1fcnhyY3YiLCBOVUxMLAorCQkJTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShBQkVfTUNCU1AyX0ZTWCwgMTEzLCAiYWJlX21jYnNwMl9mc3giLCAibWNzcGkyX2NzMCIsCisJCQkiYWJlX21jYXNwX2Fmc3giLCAiZ3Bpb18xMTMiLCAidXNiYjJfbW1fdHhlbiIsIE5VTEwsCisJCQlOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKEFCRV9NQ0JTUDFfQ0xLWCwgMTE0LCAiYWJlX21jYnNwMV9jbGt4IiwKKwkJCSJhYmVfc2xpbWJ1czFfY2xvY2siLCBOVUxMLCAiZ3Bpb18xMTQiLCBOVUxMLCBOVUxMLAorCQkJTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShBQkVfTUNCU1AxX0RSLCAxMTUsICJhYmVfbWNic3AxX2RyIiwKKwkJCSJhYmVfc2xpbWJ1czFfZGF0YSIsIE5VTEwsICJncGlvXzExNSIsIE5VTEwsIE5VTEwsCisJCQlOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKEFCRV9NQ0JTUDFfRFgsIDExNiwgImFiZV9tY2JzcDFfZHgiLCAic2RtbWMzX2RhdDIiLAorCQkJImFiZV9tY2FzcF9hY2xreCIsICJncGlvXzExNiIsIE5VTEwsIE5VTEwsIE5VTEwsCisJCQkic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKEFCRV9NQ0JTUDFfRlNYLCAxMTcsICJhYmVfbWNic3AxX2ZzeCIsICJzZG1tYzNfZGF0MyIsCisJCQkiYWJlX21jYXNwX2FtdXRlaW4iLCAiZ3Bpb18xMTciLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkJInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShBQkVfUERNX1VMX0RBVEEsIDAsICJhYmVfcGRtX3VsX2RhdGEiLAorCQkJImFiZV9tY2JzcDNfZHIiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkJInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShBQkVfUERNX0RMX0RBVEEsIDAsICJhYmVfcGRtX2RsX2RhdGEiLAorCQkJImFiZV9tY2JzcDNfZHgiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkJInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShBQkVfUERNX0ZSQU1FLCAwLCAiYWJlX3BkbV9mcmFtZSIsICJhYmVfbWNic3AzX2Nsa3giLAorCQkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShBQkVfUERNX0xCX0NMSywgMCwgImFiZV9wZG1fbGJfY2xrIiwgImFiZV9tY2JzcDNfZnN4IiwKKwkJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoQUJFX0NMS1MsIDExOCwgImFiZV9jbGtzIiwgTlVMTCwgTlVMTCwgImdwaW9fMTE4IiwKKwkJCU5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoQUJFX0RNSUNfQ0xLMSwgMTE5LCAiYWJlX2RtaWNfY2xrMSIsIE5VTEwsIE5VTEwsCisJCQkiZ3Bpb18xMTkiLCAidXNiYjJfbW1fdHhzZTAiLCAidWFydDRfY3RzIiwgTlVMTCwKKwkJCSJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoQUJFX0RNSUNfRElOMSwgMTIwLCAiYWJlX2RtaWNfZGluMSIsIE5VTEwsIE5VTEwsCisJCQkiZ3Bpb18xMjAiLCAidXNiYjJfbW1fdHhkYXQiLCAidWFydDRfcnRzIiwgTlVMTCwKKwkJCSJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoQUJFX0RNSUNfRElOMiwgMTIxLCAiYWJlX2RtaWNfZGluMiIsICJzbGltYnVzMl9jbG9jayIsCisJCQkiYWJlX21jYXNwX2F4ciIsICJncGlvXzEyMSIsIE5VTEwsCisJCQkiZG10aW1lcjExX3B3bV9ldnQiLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKEFCRV9ETUlDX0RJTjMsIDEyMiwgImFiZV9kbWljX2RpbjMiLCAic2xpbWJ1czJfZGF0YSIsCisJCQkiYWJlX2RtaWNfY2xrMiIsICJncGlvXzEyMiIsIE5VTEwsICJkbXRpbWVyOV9wd21fZXZ0IiwKKwkJCU5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoVUFSVDJfQ1RTLCAxMjMsICJ1YXJ0Ml9jdHMiLCAic2RtbWMzX2NsayIsIE5VTEwsCisJCQkiZ3Bpb18xMjMiLCBOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKFVBUlQyX1JUUywgMTI0LCAidWFydDJfcnRzIiwgInNkbW1jM19jbWQiLCBOVUxMLAorCQkJImdwaW9fMTI0IiwgTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShVQVJUMl9SWCwgMTI1LCAidWFydDJfcngiLCAic2RtbWMzX2RhdDAiLCBOVUxMLAorCQkJImdwaW9fMTI1IiwgTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShVQVJUMl9UWCwgMTI2LCAidWFydDJfdHgiLCAic2RtbWMzX2RhdDEiLCBOVUxMLAorCQkJImdwaW9fMTI2IiwgTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShIRFFfU0lPLCAxMjcsICJoZHFfc2lvIiwgImkyYzNfc2NjYiIsICJpMmMyX3NjY2IiLAorCQkJImdwaW9fMTI3IiwgTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShJMkMxX1NDTCwgMCwgImkyYzFfc2NsIiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJCU5VTEwsIE5VTEwpLAorCV9PTUFQNF9NVVhFTlRSWShJMkMxX1NEQSwgMCwgImkyYzFfc2RhIiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJCU5VTEwsIE5VTEwpLAorCV9PTUFQNF9NVVhFTlRSWShJMkMyX1NDTCwgMTI4LCAiaTJjMl9zY2wiLCAidWFydDFfcngiLCBOVUxMLAorCQkJImdwaW9fMTI4IiwgTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShJMkMyX1NEQSwgMTI5LCAiaTJjMl9zZGEiLCAidWFydDFfdHgiLCBOVUxMLAorCQkJImdwaW9fMTI5IiwgTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShJMkMzX1NDTCwgMTMwLCAiaTJjM19zY2wiLCBOVUxMLCBOVUxMLCAiZ3Bpb18xMzAiLAorCQkJTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShJMkMzX1NEQSwgMTMxLCAiaTJjM19zZGEiLCBOVUxMLCBOVUxMLCAiZ3Bpb18xMzEiLAorCQkJTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShJMkM0X1NDTCwgMTMyLCAiaTJjNF9zY2wiLCBOVUxMLCBOVUxMLCAiZ3Bpb18xMzIiLAorCQkJTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShJMkM0X1NEQSwgMTMzLCAiaTJjNF9zZGEiLCBOVUxMLCBOVUxMLCAiZ3Bpb18xMzMiLAorCQkJTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShNQ1NQSTFfQ0xLLCAxMzQsICJtY3NwaTFfY2xrIiwgTlVMTCwgTlVMTCwgImdwaW9fMTM0IiwKKwkJCU5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoTUNTUEkxX1NPTUksIDEzNSwgIm1jc3BpMV9zb21pIiwgTlVMTCwgTlVMTCwKKwkJCSJncGlvXzEzNSIsIE5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoTUNTUEkxX1NJTU8sIDEzNiwgIm1jc3BpMV9zaW1vIiwgTlVMTCwgTlVMTCwKKwkJCSJncGlvXzEzNiIsIE5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoTUNTUEkxX0NTMCwgMTM3LCAibWNzcGkxX2NzMCIsIE5VTEwsIE5VTEwsICJncGlvXzEzNyIsCisJCQlOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKE1DU1BJMV9DUzEsIDEzOCwgIm1jc3BpMV9jczEiLCAidWFydDFfcngiLCBOVUxMLAorCQkJImdwaW9fMTM4IiwgTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShNQ1NQSTFfQ1MyLCAxMzksICJtY3NwaTFfY3MyIiwgInVhcnQxX2N0cyIsCisJCQkic2xpbWJ1czJfY2xvY2siLCAiZ3Bpb18xMzkiLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkJInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShNQ1NQSTFfQ1MzLCAxNDAsICJtY3NwaTFfY3MzIiwgInVhcnQxX3J0cyIsCisJCQkic2xpbWJ1czJfZGF0YSIsICJncGlvXzE0MCIsIE5VTEwsIE5VTEwsIE5VTEwsCisJCQkic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKFVBUlQzX0NUU19SQ1RYLCAxNDEsICJ1YXJ0M19jdHNfcmN0eCIsICJ1YXJ0MV90eCIsCisJCQlOVUxMLCAiZ3Bpb18xNDEiLCBOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKFVBUlQzX1JUU19TRCwgMTQyLCAidWFydDNfcnRzX3NkIiwgTlVMTCwgTlVMTCwKKwkJCSJncGlvXzE0MiIsIE5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoVUFSVDNfUlhfSVJSWCwgMTQzLCAidWFydDNfcnhfaXJyeCIsCisJCQkiZG10aW1lcjhfcHdtX2V2dCIsIE5VTEwsICJncGlvXzE0MyIsIE5VTEwsIE5VTEwsCisJCQlOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKFVBUlQzX1RYX0lSVFgsIDE0NCwgInVhcnQzX3R4X2lydHgiLAorCQkJImRtdGltZXI5X3B3bV9ldnQiLCBOVUxMLCAiZ3Bpb18xNDQiLCBOVUxMLCBOVUxMLAorCQkJTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShTRE1NQzVfQ0xLLCAxNDUsICJzZG1tYzVfY2xrIiwgIm1jc3BpMl9jbGsiLAorCQkJInVzYmMxX2ljdXNiX2RwIiwgImdwaW9fMTQ1IiwgTlVMTCwgInNkbW1jMl9jbGsiLAorCQkJTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShTRE1NQzVfQ01ELCAxNDYsICJzZG1tYzVfY21kIiwgIm1jc3BpMl9zaW1vIiwKKwkJCSJ1c2JjMV9pY3VzYl9kbSIsICJncGlvXzE0NiIsIE5VTEwsICJzZG1tYzJfY21kIiwKKwkJCU5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoU0RNTUM1X0RBVDAsIDE0NywgInNkbW1jNV9kYXQwIiwgIm1jc3BpMl9zb21pIiwKKwkJCSJ1c2JjMV9pY3VzYl9yY3YiLCAiZ3Bpb18xNDciLCBOVUxMLCAic2RtbWMyX2RhdDAiLAorCQkJTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShTRE1NQzVfREFUMSwgMTQ4LCAic2RtbWM1X2RhdDEiLCBOVUxMLAorCQkJInVzYmMxX2ljdXNiX3R4ZW4iLCAiZ3Bpb18xNDgiLCBOVUxMLCAic2RtbWMyX2RhdDEiLAorCQkJTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShTRE1NQzVfREFUMiwgMTQ5LCAic2RtbWM1X2RhdDIiLCAibWNzcGkyX2NzMSIsIE5VTEwsCisJCQkiZ3Bpb18xNDkiLCBOVUxMLCAic2RtbWMyX2RhdDIiLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKFNETU1DNV9EQVQzLCAxNTAsICJzZG1tYzVfZGF0MyIsICJtY3NwaTJfY3MwIiwgTlVMTCwKKwkJCSJncGlvXzE1MCIsIE5VTEwsICJzZG1tYzJfZGF0MyIsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoTUNTUEk0X0NMSywgMTUxLCAibWNzcGk0X2NsayIsICJzZG1tYzRfY2xrIiwKKwkJCSJrcGRfY29sNiIsICJncGlvXzE1MSIsIE5VTEwsIE5VTEwsIE5VTEwsCisJCQkic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKE1DU1BJNF9TSU1PLCAxNTIsICJtY3NwaTRfc2ltbyIsICJzZG1tYzRfY21kIiwKKwkJCSJrcGRfY29sNyIsICJncGlvXzE1MiIsIE5VTEwsIE5VTEwsIE5VTEwsCisJCQkic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKE1DU1BJNF9TT01JLCAxNTMsICJtY3NwaTRfc29taSIsICJzZG1tYzRfZGF0MCIsCisJCQkia3BkX3JvdzYiLCAiZ3Bpb18xNTMiLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkJInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShNQ1NQSTRfQ1MwLCAxNTQsICJtY3NwaTRfY3MwIiwgInNkbW1jNF9kYXQzIiwKKwkJCSJrcGRfcm93NyIsICJncGlvXzE1NCIsIE5VTEwsIE5VTEwsIE5VTEwsCisJCQkic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKFVBUlQ0X1JYLCAxNTUsICJ1YXJ0NF9yeCIsICJzZG1tYzRfZGF0MiIsICJrcGRfcm93OCIsCisJCQkiZ3Bpb18xNTUiLCBOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKFVBUlQ0X1RYLCAxNTYsICJ1YXJ0NF90eCIsICJzZG1tYzRfZGF0MSIsICJrcGRfY29sOCIsCisJCQkiZ3Bpb18xNTYiLCBOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKFVTQkIyX1VMUElUTExfQ0xLLCAxNTcsICJ1c2JiMl91bHBpdGxsX2NsayIsCisJCQkidXNiYjJfdWxwaXBoeV9jbGsiLCAic2RtbWM0X2NtZCIsICJncGlvXzE1NyIsCisJCQkiaHNpMl9jYXdha2UiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKFVTQkIyX1VMUElUTExfU1RQLCAxNTgsICJ1c2JiMl91bHBpdGxsX3N0cCIsCisJCQkidXNiYjJfdWxwaXBoeV9zdHAiLCAic2RtbWM0X2NsayIsICJncGlvXzE1OCIsCisJCQkiaHNpMl9jYWRhdGEiLCAiZGlzcGMyX2RhdGEyMyIsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoVVNCQjJfVUxQSVRMTF9ESVIsIDE1OSwgInVzYmIyX3VscGl0bGxfZGlyIiwKKwkJCSJ1c2JiMl91bHBpcGh5X2RpciIsICJzZG1tYzRfZGF0MCIsICJncGlvXzE1OSIsCisJCQkiaHNpMl9jYWZsYWciLCAiZGlzcGMyX2RhdGEyMiIsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoVVNCQjJfVUxQSVRMTF9OWFQsIDE2MCwgInVzYmIyX3VscGl0bGxfbnh0IiwKKwkJCSJ1c2JiMl91bHBpcGh5X254dCIsICJzZG1tYzRfZGF0MSIsICJncGlvXzE2MCIsCisJCQkiaHNpMl9hY3JlYWR5IiwgImRpc3BjMl9kYXRhMjEiLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKFVTQkIyX1VMUElUTExfREFUMCwgMTYxLCAidXNiYjJfdWxwaXRsbF9kYXQwIiwKKwkJCSJ1c2JiMl91bHBpcGh5X2RhdDAiLCAic2RtbWM0X2RhdDIiLCAiZ3Bpb18xNjEiLAorCQkJImhzaTJfYWN3YWtlIiwgImRpc3BjMl9kYXRhMjAiLCAidXNiYjJfbW1fdHhlbiIsCisJCQkic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKFVTQkIyX1VMUElUTExfREFUMSwgMTYyLCAidXNiYjJfdWxwaXRsbF9kYXQxIiwKKwkJCSJ1c2JiMl91bHBpcGh5X2RhdDEiLCAic2RtbWM0X2RhdDMiLCAiZ3Bpb18xNjIiLAorCQkJImhzaTJfYWNkYXRhIiwgImRpc3BjMl9kYXRhMTkiLCAidXNiYjJfbW1fdHhkYXQiLAorCQkJInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShVU0JCMl9VTFBJVExMX0RBVDIsIDE2MywgInVzYmIyX3VscGl0bGxfZGF0MiIsCisJCQkidXNiYjJfdWxwaXBoeV9kYXQyIiwgInNkbW1jM19kYXQyIiwgImdwaW9fMTYzIiwKKwkJCSJoc2kyX2FjZmxhZyIsICJkaXNwYzJfZGF0YTE4IiwgInVzYmIyX21tX3R4c2UwIiwKKwkJCSJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoVVNCQjJfVUxQSVRMTF9EQVQzLCAxNjQsICJ1c2JiMl91bHBpdGxsX2RhdDMiLAorCQkJInVzYmIyX3VscGlwaHlfZGF0MyIsICJzZG1tYzNfZGF0MSIsICJncGlvXzE2NCIsCisJCQkiaHNpMl9jYXJlYWR5IiwgImRpc3BjMl9kYXRhMTUiLCAicmZiaV9kYXRhMTUiLAorCQkJInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShVU0JCMl9VTFBJVExMX0RBVDQsIDE2NSwgInVzYmIyX3VscGl0bGxfZGF0NCIsCisJCQkidXNiYjJfdWxwaXBoeV9kYXQ0IiwgInNkbW1jM19kYXQwIiwgImdwaW9fMTY1IiwKKwkJCSJtY3NwaTNfc29taSIsICJkaXNwYzJfZGF0YTE0IiwgInJmYmlfZGF0YTE0IiwKKwkJCSJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoVVNCQjJfVUxQSVRMTF9EQVQ1LCAxNjYsICJ1c2JiMl91bHBpdGxsX2RhdDUiLAorCQkJInVzYmIyX3VscGlwaHlfZGF0NSIsICJzZG1tYzNfZGF0MyIsICJncGlvXzE2NiIsCisJCQkibWNzcGkzX2NzMCIsICJkaXNwYzJfZGF0YTEzIiwgInJmYmlfZGF0YTEzIiwKKwkJCSJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoVVNCQjJfVUxQSVRMTF9EQVQ2LCAxNjcsICJ1c2JiMl91bHBpdGxsX2RhdDYiLAorCQkJInVzYmIyX3VscGlwaHlfZGF0NiIsICJzZG1tYzNfY21kIiwgImdwaW9fMTY3IiwKKwkJCSJtY3NwaTNfc2ltbyIsICJkaXNwYzJfZGF0YTEyIiwgInJmYmlfZGF0YTEyIiwKKwkJCSJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoVVNCQjJfVUxQSVRMTF9EQVQ3LCAxNjgsICJ1c2JiMl91bHBpdGxsX2RhdDciLAorCQkJInVzYmIyX3VscGlwaHlfZGF0NyIsICJzZG1tYzNfY2xrIiwgImdwaW9fMTY4IiwKKwkJCSJtY3NwaTNfY2xrIiwgImRpc3BjMl9kYXRhMTEiLCAicmZiaV9kYXRhMTEiLAorCQkJInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShVU0JCMl9IU0lDX0RBVEEsIDE2OSwgInVzYmIyX2hzaWNfZGF0YSIsIE5VTEwsIE5VTEwsCisJCQkiZ3Bpb18xNjkiLCBOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKFVTQkIyX0hTSUNfU1RST0JFLCAxNzAsICJ1c2JiMl9oc2ljX3N0cm9iZSIsIE5VTEwsCisJCQlOVUxMLCAiZ3Bpb18xNzAiLCBOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKEtQRF9DT0wzLCAxNzEsICJrcGRfY29sMyIsICJrcGRfY29sMCIsIE5VTEwsCisJCQkiZ3Bpb18xNzEiLCBOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKEtQRF9DT0w0LCAxNzIsICJrcGRfY29sNCIsICJrcGRfY29sMSIsIE5VTEwsCisJCQkiZ3Bpb18xNzIiLCBOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKEtQRF9DT0w1LCAxNzMsICJrcGRfY29sNSIsICJrcGRfY29sMiIsIE5VTEwsCisJCQkiZ3Bpb18xNzMiLCBOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKEtQRF9DT0wwLCAxNzQsICJrcGRfY29sMCIsICJrcGRfY29sMyIsIE5VTEwsCisJCQkiZ3Bpb18xNzQiLCBOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKEtQRF9DT0wxLCAwLCAia3BkX2NvbDEiLCAia3BkX2NvbDQiLCBOVUxMLCAiZ3Bpb18wIiwKKwkJCU5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoS1BEX0NPTDIsIDEsICJrcGRfY29sMiIsICJrcGRfY29sNSIsIE5VTEwsICJncGlvXzEiLAorCQkJTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShLUERfUk9XMywgMTc1LCAia3BkX3JvdzMiLCAia3BkX3JvdzAiLCBOVUxMLAorCQkJImdwaW9fMTc1IiwgTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShLUERfUk9XNCwgMTc2LCAia3BkX3JvdzQiLCAia3BkX3JvdzEiLCBOVUxMLAorCQkJImdwaW9fMTc2IiwgTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShLUERfUk9XNSwgMTc3LCAia3BkX3JvdzUiLCAia3BkX3JvdzIiLCBOVUxMLAorCQkJImdwaW9fMTc3IiwgTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShLUERfUk9XMCwgMTc4LCAia3BkX3JvdzAiLCAia3BkX3JvdzMiLCBOVUxMLAorCQkJImdwaW9fMTc4IiwgTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShLUERfUk9XMSwgMiwgImtwZF9yb3cxIiwgImtwZF9yb3c0IiwgTlVMTCwgImdwaW9fMiIsCisJCQlOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKEtQRF9ST1cyLCAzLCAia3BkX3JvdzIiLCAia3BkX3JvdzUiLCBOVUxMLCAiZ3Bpb18zIiwKKwkJCU5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoVVNCQTBfT1RHX0NFLCAwLCAidXNiYTBfb3RnX2NlIiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpLAorCV9PTUFQNF9NVVhFTlRSWShVU0JBMF9PVEdfRFAsIDAsICJ1c2JhMF9vdGdfZHAiLCAidWFydDNfcnhfaXJyeCIsCisJCQkidWFydDJfcngiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKFVTQkEwX09UR19ETSwgMCwgInVzYmEwX290Z19kbSIsICJ1YXJ0M190eF9pcnR4IiwKKwkJCSJ1YXJ0Ml90eCIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoRlJFRl9DTEsxX09VVCwgMTgxLCAiZnJlZl9jbGsxX291dCIsIE5VTEwsIE5VTEwsCisJCQkiZ3Bpb18xODEiLCBOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKEZSRUZfQ0xLMl9PVVQsIDE4MiwgImZyZWZfY2xrMl9vdXQiLCBOVUxMLCBOVUxMLAorCQkJImdwaW9fMTgyIiwgTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShTWVNfTklSUTEsIDAsICJzeXNfbmlycTEiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkJTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShTWVNfTklSUTIsIDE4MywgInN5c19uaXJxMiIsIE5VTEwsIE5VTEwsICJncGlvXzE4MyIsCisJCQlOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKFNZU19CT09UMCwgMTg0LCAic3lzX2Jvb3QwIiwgTlVMTCwgTlVMTCwgImdwaW9fMTg0IiwKKwkJCU5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoU1lTX0JPT1QxLCAxODUsICJzeXNfYm9vdDEiLCBOVUxMLCBOVUxMLCAiZ3Bpb18xODUiLAorCQkJTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShTWVNfQk9PVDIsIDE4NiwgInN5c19ib290MiIsIE5VTEwsIE5VTEwsICJncGlvXzE4NiIsCisJCQlOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKFNZU19CT09UMywgMTg3LCAic3lzX2Jvb3QzIiwgTlVMTCwgTlVMTCwgImdwaW9fMTg3IiwKKwkJCU5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoU1lTX0JPT1Q0LCAxODgsICJzeXNfYm9vdDQiLCBOVUxMLCBOVUxMLCAiZ3Bpb18xODgiLAorCQkJTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShTWVNfQk9PVDUsIDE4OSwgInN5c19ib290NSIsIE5VTEwsIE5VTEwsICJncGlvXzE4OSIsCisJCQlOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKERQTV9FTVUwLCAxMSwgImRwbV9lbXUwIiwgTlVMTCwgTlVMTCwgImdwaW9fMTEiLCBOVUxMLAorCQkJTlVMTCwgImh3X2RiZzAiLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKERQTV9FTVUxLCAxMiwgImRwbV9lbXUxIiwgTlVMTCwgTlVMTCwgImdwaW9fMTIiLCBOVUxMLAorCQkJTlVMTCwgImh3X2RiZzEiLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKERQTV9FTVUyLCAxMywgImRwbV9lbXUyIiwgInVzYmEwX3VscGlwaHlfY2xrIiwgTlVMTCwKKwkJCSJncGlvXzEzIiwgTlVMTCwgImRpc3BjMl9maWQiLCAiaHdfZGJnMiIsCisJCQkic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKERQTV9FTVUzLCAxNCwgImRwbV9lbXUzIiwgInVzYmEwX3VscGlwaHlfc3RwIiwgTlVMTCwKKwkJCSJncGlvXzE0IiwgInJmYmlfZGF0YTEwIiwgImRpc3BjMl9kYXRhMTAiLCAiaHdfZGJnMyIsCisJCQkic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKERQTV9FTVU0LCAxNSwgImRwbV9lbXU0IiwgInVzYmEwX3VscGlwaHlfZGlyIiwgTlVMTCwKKwkJCSJncGlvXzE1IiwgInJmYmlfZGF0YTkiLCAiZGlzcGMyX2RhdGE5IiwgImh3X2RiZzQiLAorCQkJInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShEUE1fRU1VNSwgMTYsICJkcG1fZW11NSIsICJ1c2JhMF91bHBpcGh5X254dCIsIE5VTEwsCisJCQkiZ3Bpb18xNiIsICJyZmJpX3RlX3ZzeW5jMCIsICJkaXNwYzJfZGF0YTE2IiwKKwkJCSJod19kYmc1IiwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShEUE1fRU1VNiwgMTcsICJkcG1fZW11NiIsICJ1c2JhMF91bHBpcGh5X2RhdDAiLAorCQkJInVhcnQzX3R4X2lydHgiLCAiZ3Bpb18xNyIsICJyZmJpX2hzeW5jMCIsCisJCQkiZGlzcGMyX2RhdGExNyIsICJod19kYmc2IiwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShEUE1fRU1VNywgMTgsICJkcG1fZW11NyIsICJ1c2JhMF91bHBpcGh5X2RhdDEiLAorCQkJInVhcnQzX3J4X2lycngiLCAiZ3Bpb18xOCIsICJyZmJpX2NzMCIsCisJCQkiZGlzcGMyX2hzeW5jIiwgImh3X2RiZzciLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKERQTV9FTVU4LCAxOSwgImRwbV9lbXU4IiwgInVzYmEwX3VscGlwaHlfZGF0MiIsCisJCQkidWFydDNfcnRzX3NkIiwgImdwaW9fMTkiLCAicmZiaV9yZSIsICJkaXNwYzJfcGNsayIsCisJCQkiaHdfZGJnOCIsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoRFBNX0VNVTksIDIwLCAiZHBtX2VtdTkiLCAidXNiYTBfdWxwaXBoeV9kYXQzIiwKKwkJCSJ1YXJ0M19jdHNfcmN0eCIsICJncGlvXzIwIiwgInJmYmlfd2UiLAorCQkJImRpc3BjMl92c3luYyIsICJod19kYmc5IiwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShEUE1fRU1VMTAsIDIxLCAiZHBtX2VtdTEwIiwgInVzYmEwX3VscGlwaHlfZGF0NCIsCisJCQlOVUxMLCAiZ3Bpb18yMSIsICJyZmJpX2EwIiwgImRpc3BjMl9kZSIsICJod19kYmcxMCIsCisJCQkic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKERQTV9FTVUxMSwgMjIsICJkcG1fZW11MTEiLCAidXNiYTBfdWxwaXBoeV9kYXQ1IiwKKwkJCU5VTEwsICJncGlvXzIyIiwgInJmYmlfZGF0YTgiLCAiZGlzcGMyX2RhdGE4IiwKKwkJCSJod19kYmcxMSIsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoRFBNX0VNVTEyLCAyMywgImRwbV9lbXUxMiIsICJ1c2JhMF91bHBpcGh5X2RhdDYiLAorCQkJTlVMTCwgImdwaW9fMjMiLCAicmZiaV9kYXRhNyIsICJkaXNwYzJfZGF0YTciLAorCQkJImh3X2RiZzEyIiwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShEUE1fRU1VMTMsIDI0LCAiZHBtX2VtdTEzIiwgInVzYmEwX3VscGlwaHlfZGF0NyIsCisJCQlOVUxMLCAiZ3Bpb18yNCIsICJyZmJpX2RhdGE2IiwgImRpc3BjMl9kYXRhNiIsCisJCQkiaHdfZGJnMTMiLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKERQTV9FTVUxNCwgMjUsICJkcG1fZW11MTQiLCAic3lzX2RybV9tc2VjdXJlIiwKKwkJCSJ1YXJ0MV9yeCIsICJncGlvXzI1IiwgInJmYmlfZGF0YTUiLCAiZGlzcGMyX2RhdGE1IiwKKwkJCSJod19kYmcxNCIsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoRFBNX0VNVTE1LCAyNiwgImRwbV9lbXUxNSIsICJzeXNfc2VjdXJlX2luZGljYXRvciIsCisJCQlOVUxMLCAiZ3Bpb18yNiIsICJyZmJpX2RhdGE0IiwgImRpc3BjMl9kYXRhNCIsCisJCQkiaHdfZGJnMTUiLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKERQTV9FTVUxNiwgMjcsICJkcG1fZW11MTYiLCAiZG10aW1lcjhfcHdtX2V2dCIsCisJCQkiZHNpMV90ZTAiLCAiZ3Bpb18yNyIsICJyZmJpX2RhdGEzIiwgImRpc3BjMl9kYXRhMyIsCisJCQkiaHdfZGJnMTYiLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKERQTV9FTVUxNywgMjgsICJkcG1fZW11MTciLCAiZG10aW1lcjlfcHdtX2V2dCIsCisJCQkiZHNpMV90ZTEiLCAiZ3Bpb18yOCIsICJyZmJpX2RhdGEyIiwgImRpc3BjMl9kYXRhMiIsCisJCQkiaHdfZGJnMTciLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKERQTV9FTVUxOCwgMTkwLCAiZHBtX2VtdTE4IiwgImRtdGltZXIxMF9wd21fZXZ0IiwKKwkJCSJkc2kyX3RlMCIsICJncGlvXzE5MCIsICJyZmJpX2RhdGExIiwgImRpc3BjMl9kYXRhMSIsCisJCQkiaHdfZGJnMTgiLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKERQTV9FTVUxOSwgMTkxLCAiZHBtX2VtdTE5IiwgImRtdGltZXIxMV9wd21fZXZ0IiwKKwkJCSJkc2kyX3RlMSIsICJncGlvXzE5MSIsICJyZmJpX2RhdGEwIiwgImRpc3BjMl9kYXRhMCIsCisJCQkiaHdfZGJnMTkiLCAic2FmZV9tb2RlIiksCisJeyAucmVnX29mZnNldCA9IE9NQVBfTVVYX1RFUk1JTkFUT1IgfSwKK307CisKKy8qCisgKiBCYWxscyBmb3IgNDRYWCBDQlMgcGFja2FnZQorICogNTQ3LXBpbiBDQkwgRVMyLjAgUy1GUEdBLU41NDcsIDAuNDBtbSBCYWxsIFBpdGNoIChUb3ApLAorICoJCQkJICAwLjQwbW0gQmFsbCBQaXRjaCAoQm90dG9tKQorICovCisjaWYgZGVmaW5lZChDT05GSUdfT01BUF9NVVgpICYmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKQkJXAorCQkmJiBkZWZpbmVkKENPTkZJR19PTUFQX1BBQ0tBR0VfQ0JTKQorc3RydWN0IG9tYXBfYmFsbCBfX2luaXRkYXRhIG9tYXA0X2NvcmVfY2JzX2JhbGxbXSA9IHsKKwlfT01BUDRfQkFMTEVOVFJZKEdQTUNfQUQwLCAiYzEyIiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShHUE1DX0FEMSwgImQxMiIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoR1BNQ19BRDIsICJjMTMiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKEdQTUNfQUQzLCAiZDEzIiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShHUE1DX0FENCwgImMxNSIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoR1BNQ19BRDUsICJkMTUiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKEdQTUNfQUQ2LCAiYTE2IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShHUE1DX0FENywgImIxNiIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoR1BNQ19BRDgsICJjMTYiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKEdQTUNfQUQ5LCAiZDE2IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShHUE1DX0FEMTAsICJjMTciLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKEdQTUNfQUQxMSwgImQxNyIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoR1BNQ19BRDEyLCAiYzE4IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShHUE1DX0FEMTMsICJkMTgiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKEdQTUNfQUQxNCwgImMxOSIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoR1BNQ19BRDE1LCAiZDE5IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShHUE1DX0ExNiwgImIxNyIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoR1BNQ19BMTcsICJhMTgiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKEdQTUNfQTE4LCAiYjE4IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShHUE1DX0ExOSwgImExOSIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoR1BNQ19BMjAsICJiMTkiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKEdQTUNfQTIxLCAiYjIwIiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShHUE1DX0EyMiwgImEyMSIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoR1BNQ19BMjMsICJiMjEiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKEdQTUNfQTI0LCAiYzIwIiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShHUE1DX0EyNSwgImQyMCIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoR1BNQ19OQ1MwLCAiYjI1IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShHUE1DX05DUzEsICJjMjEiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKEdQTUNfTkNTMiwgImQyMSIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoR1BNQ19OQ1MzLCAiYzIyIiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShHUE1DX05XUCwgImMyNSIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoR1BNQ19DTEssICJiMjIiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKEdQTUNfTkFEVl9BTEUsICJkMjUiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKEdQTUNfTk9FLCAiYjExIiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShHUE1DX05XRSwgImIxMiIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoR1BNQ19OQkUwX0NMRSwgImMyMyIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoR1BNQ19OQkUxLCAiZDIyIiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShHUE1DX1dBSVQwLCAiYjI2IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShHUE1DX1dBSVQxLCAiYjIzIiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShHUE1DX1dBSVQyLCAiZDIzIiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShHUE1DX05DUzQsICJhMjQiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKEdQTUNfTkNTNSwgImIyNCIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoR1BNQ19OQ1M2LCAiYzI0IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShHUE1DX05DUzcsICJkMjQiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKEhETUlfSFBELCAiYjkiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKEhETUlfQ0VDLCAiYjEwIiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShIRE1JX0REQ19TQ0wsICJhOCIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoSERNSV9ERENfU0RBLCAiYjgiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKENTSTIxX0RYMCwgInIyNiIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoQ1NJMjFfRFkwLCAicjI1IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShDU0kyMV9EWDEsICJ0MjYiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKENTSTIxX0RZMSwgInQyNSIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoQ1NJMjFfRFgyLCAidTI2IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShDU0kyMV9EWTIsICJ1MjUiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKENTSTIxX0RYMywgInYyNiIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoQ1NJMjFfRFkzLCAidjI1IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShDU0kyMV9EWDQsICJ3MjYiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKENTSTIxX0RZNCwgIncyNSIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoQ1NJMjJfRFgwLCAibTI2IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShDU0kyMl9EWTAsICJtMjUiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKENTSTIyX0RYMSwgIm4yNiIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoQ1NJMjJfRFkxLCAibjI1IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShDQU1fU0hVVFRFUiwgInQyNyIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoQ0FNX1NUUk9CRSwgInUyNyIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoQ0FNX0dMT0JBTFJFU0VULCAidjI3IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShVU0JCMV9VTFBJVExMX0NMSywgImFlMTgiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKFVTQkIxX1VMUElUTExfU1RQLCAiYWcxOSIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoVVNCQjFfVUxQSVRMTF9ESVIsICJhZjE5IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShVU0JCMV9VTFBJVExMX05YVCwgImFlMTkiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKFVTQkIxX1VMUElUTExfREFUMCwgImFmMTgiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKFVTQkIxX1VMUElUTExfREFUMSwgImFnMTgiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKFVTQkIxX1VMUElUTExfREFUMiwgImFlMTciLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKFVTQkIxX1VMUElUTExfREFUMywgImFmMTciLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKFVTQkIxX1VMUElUTExfREFUNCwgImFoMTciLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKFVTQkIxX1VMUElUTExfREFUNSwgImFlMTYiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKFVTQkIxX1VMUElUTExfREFUNiwgImFmMTYiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKFVTQkIxX1VMUElUTExfREFUNywgImFnMTYiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKFVTQkIxX0hTSUNfREFUQSwgImFmMTQiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKFVTQkIxX0hTSUNfU1RST0JFLCAiYWUxNCIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoVVNCQzFfSUNVU0JfRFAsICJoMiIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoVVNCQzFfSUNVU0JfRE0sICJoMyIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoU0RNTUMxX0NMSywgImQyIiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShTRE1NQzFfQ01ELCAiZTMiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKFNETU1DMV9EQVQwLCAiZTQiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKFNETU1DMV9EQVQxLCAiZTIiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKFNETU1DMV9EQVQyLCAiZTEiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKFNETU1DMV9EQVQzLCAiZjQiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKFNETU1DMV9EQVQ0LCAiZjMiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKFNETU1DMV9EQVQ1LCAiZjEiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKFNETU1DMV9EQVQ2LCAiZzQiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKFNETU1DMV9EQVQ3LCAiZzMiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKEFCRV9NQ0JTUDJfQ0xLWCwgImFkMjciLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKEFCRV9NQ0JTUDJfRFIsICJhZDI2IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShBQkVfTUNCU1AyX0RYLCAiYWQyNSIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoQUJFX01DQlNQMl9GU1gsICJhYzI4IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShBQkVfTUNCU1AxX0NMS1gsICJhYzI2IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShBQkVfTUNCU1AxX0RSLCAiYWMyNSIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoQUJFX01DQlNQMV9EWCwgImFiMjUiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKEFCRV9NQ0JTUDFfRlNYLCAiYWMyNyIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoQUJFX1BETV9VTF9EQVRBLCAiYWcyNSIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoQUJFX1BETV9ETF9EQVRBLCAiYWYyNSIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoQUJFX1BETV9GUkFNRSwgImFlMjUiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKEFCRV9QRE1fTEJfQ0xLLCAiYWYyNiIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoQUJFX0NMS1MsICJhaDI2IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShBQkVfRE1JQ19DTEsxLCAiYWUyNCIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoQUJFX0RNSUNfRElOMSwgImFmMjQiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKEFCRV9ETUlDX0RJTjIsICJhZzI0IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShBQkVfRE1JQ19ESU4zLCAiYWgyNCIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoVUFSVDJfQ1RTLCAiYWIyNiIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoVUFSVDJfUlRTLCAiYWIyNyIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoVUFSVDJfUlgsICJhYTI1IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShVQVJUMl9UWCwgImFhMjYiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKEhEUV9TSU8sICJhYTI3IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShJMkMxX1NDTCwgImFlMjgiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKEkyQzFfU0RBLCAiYWUyNiIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoSTJDMl9TQ0wsICJjMjYiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKEkyQzJfU0RBLCAiZDI2IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShJMkMzX1NDTCwgIncyNyIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoSTJDM19TREEsICJ5MjciLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKEkyQzRfU0NMLCAiYWcyMSIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoSTJDNF9TREEsICJhaDIyIiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShNQ1NQSTFfQ0xLLCAiYWYyMiIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoTUNTUEkxX1NPTUksICJhZTIyIiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShNQ1NQSTFfU0lNTywgImFnMjIiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKE1DU1BJMV9DUzAsICJhZTIzIiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShNQ1NQSTFfQ1MxLCAiYWYyMyIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoTUNTUEkxX0NTMiwgImFnMjMiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKE1DU1BJMV9DUzMsICJhaDIzIiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShVQVJUM19DVFNfUkNUWCwgImYyNyIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoVUFSVDNfUlRTX1NELCAiZjI4IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShVQVJUM19SWF9JUlJYLCAiZzI3IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShVQVJUM19UWF9JUlRYLCAiZzI4IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShTRE1NQzVfQ0xLLCAiYWU1IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShTRE1NQzVfQ01ELCAiYWY1IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShTRE1NQzVfREFUMCwgImFlNCIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoU0RNTUM1X0RBVDEsICJhZjQiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKFNETU1DNV9EQVQyLCAiYWczIiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShTRE1NQzVfREFUMywgImFmMyIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoTUNTUEk0X0NMSywgImFlMjEiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKE1DU1BJNF9TSU1PLCAiYWYyMCIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoTUNTUEk0X1NPTUksICJhZjIxIiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShNQ1NQSTRfQ1MwLCAiYWUyMCIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoVUFSVDRfUlgsICJhZzIwIiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShVQVJUNF9UWCwgImFoMTkiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKFVTQkIyX1VMUElUTExfQ0xLLCAiYWcxMiIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoVVNCQjJfVUxQSVRMTF9TVFAsICJhZjEyIiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShVU0JCMl9VTFBJVExMX0RJUiwgImFlMTIiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKFVTQkIyX1VMUElUTExfTlhULCAiYWcxMyIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoVVNCQjJfVUxQSVRMTF9EQVQwLCAiYWUxMSIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoVVNCQjJfVUxQSVRMTF9EQVQxLCAiYWYxMSIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoVVNCQjJfVUxQSVRMTF9EQVQyLCAiYWcxMSIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoVVNCQjJfVUxQSVRMTF9EQVQzLCAiYWgxMSIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoVVNCQjJfVUxQSVRMTF9EQVQ0LCAiYWUxMCIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoVVNCQjJfVUxQSVRMTF9EQVQ1LCAiYWYxMCIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoVVNCQjJfVUxQSVRMTF9EQVQ2LCAiYWcxMCIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoVVNCQjJfVUxQSVRMTF9EQVQ3LCAiYWU5IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShVU0JCMl9IU0lDX0RBVEEsICJhZjEzIiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShVU0JCMl9IU0lDX1NUUk9CRSwgImFlMTMiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKEtQRF9DT0wzLCAiZzI2IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShLUERfQ09MNCwgImcyNSIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoS1BEX0NPTDUsICJoMjYiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKEtQRF9DT0wwLCAiaDI1IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShLUERfQ09MMSwgImoyNyIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoS1BEX0NPTDIsICJoMjciLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKEtQRF9ST1czLCAiajI2IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShLUERfUk9XNCwgImoyNSIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoS1BEX1JPVzUsICJrMjYiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKEtQRF9ST1cwLCAiazI1IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShLUERfUk9XMSwgImwyNyIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoS1BEX1JPVzIsICJrMjciLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKFVTQkEwX09UR19DRSwgImMzIiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShVU0JBMF9PVEdfRFAsICJiNSIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoVVNCQTBfT1RHX0RNLCAiYjQiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKEZSRUZfQ0xLMV9PVVQsICJhYTI4IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShGUkVGX0NMSzJfT1VULCAieTI4IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShTWVNfTklSUTEsICJhZTYiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKFNZU19OSVJRMiwgImFmNiIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoU1lTX0JPT1QwLCAiZjI2IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShTWVNfQk9PVDEsICJlMjciLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKFNZU19CT09UMiwgImUyNiIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoU1lTX0JPT1QzLCAiZTI1IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShTWVNfQk9PVDQsICJkMjgiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKFNZU19CT09UNSwgImQyNyIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoRFBNX0VNVTAsICJtMiIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoRFBNX0VNVTEsICJuMiIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoRFBNX0VNVTIsICJwMiIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoRFBNX0VNVTMsICJ2MSIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoRFBNX0VNVTQsICJ2MiIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoRFBNX0VNVTUsICJ3MSIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoRFBNX0VNVTYsICJ3MiIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoRFBNX0VNVTcsICJ3MyIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoRFBNX0VNVTgsICJ3NCIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoRFBNX0VNVTksICJ5MiIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoRFBNX0VNVTEwLCAieTMiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKERQTV9FTVUxMSwgInk0IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShEUE1fRU1VMTIsICJhYTEiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKERQTV9FTVUxMywgImFhMiIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoRFBNX0VNVTE0LCAiYWEzIiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShEUE1fRU1VMTUsICJhYTQiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKERQTV9FTVUxNiwgImFiMiIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoRFBNX0VNVTE3LCAiYWIzIiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShEUE1fRU1VMTgsICJhYjQiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKERQTV9FTVUxOSwgImFjNCIsIE5VTEwpLAorCXsgLnJlZ19vZmZzZXQgPSBPTUFQX01VWF9URVJNSU5BVE9SIH0sCit9OworI2Vsc2UKKyNkZWZpbmUgb21hcDRfY29yZV9jYnNfYmFsbCAgTlVMTAorI2VuZGlmCisKKy8qCisgKiBTdXBlcnNldCBvZiBhbGwgbXV4IG1vZGVzIGZvciBvbWFwNAorICovCitzdGF0aWMgc3RydWN0IG9tYXBfbXV4IF9faW5pdGRhdGEgb21hcDRfd2t1cF9tdXhtb2Rlc1tdID0geworCV9PTUFQNF9NVVhFTlRSWShTSU1fSU8sIDAsICJzaW1faW8iLCBOVUxMLCBOVUxMLCAiZ3Bpb193azAiLCBOVUxMLAorCQkJTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShTSU1fQ0xLLCAxLCAic2ltX2NsayIsIE5VTEwsIE5VTEwsICJncGlvX3drMSIsIE5VTEwsCisJCQlOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKFNJTV9SRVNFVCwgMiwgInNpbV9yZXNldCIsIE5VTEwsIE5VTEwsICJncGlvX3drMiIsCisJCQlOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKFNJTV9DRCwgMywgInNpbV9jZCIsIE5VTEwsIE5VTEwsICJncGlvX3drMyIsIE5VTEwsCisJCQlOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKFNJTV9QV1JDVFJMLCA0LCAic2ltX3B3cmN0cmwiLCBOVUxMLCBOVUxMLCAiZ3Bpb193azQiLAorCQkJTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShTUl9TQ0wsIDAsICJzcl9zY2wiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkJTlVMTCwgTlVMTCksCisJX09NQVA0X01VWEVOVFJZKFNSX1NEQSwgMCwgInNyX3NkYSIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCisJCQlOVUxMLCBOVUxMKSwKKwlfT01BUDRfTVVYRU5UUlkoRlJFRl9YVEFMX0lOLCAwLCAiZnJlZl94dGFsX2luIiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJCSJjMmNfd2FrZXJlcWluIiwgTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVA0X01VWEVOVFJZKEZSRUZfU0xJQ0VSX0lOLCAwLCAiZnJlZl9zbGljZXJfaW4iLCBOVUxMLCBOVUxMLAorCQkJImdwaV93azUiLCAiYzJjX3dha2VyZXFpbiIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoRlJFRl9DTEtfSU9SRVEsIDAsICJmcmVmX2Nsa19pb3JlcSIsIE5VTEwsIE5VTEwsIE5VTEwsCisJCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDRfTVVYRU5UUlkoRlJFRl9DTEswX09VVCwgNiwgImZyZWZfY2xrMF9vdXQiLCAiZnJlZl9jbGsxX3JlcSIsCisJCQkic3lzX2RybV9tc2VjdXJlIiwgImdwaW9fd2s2IiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJCSJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoRlJFRl9DTEszX1JFUSwgMzAsICJmcmVmX2NsazNfcmVxIiwgImZyZWZfY2xrMV9yZXEiLAorCQkJInN5c19kcm1fbXNlY3VyZSIsICJncGlvX3drMzAiLCAiYzJjX3dha2VyZXFpbiIsIE5VTEwsCisJCQlOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVA0X01VWEVOVFJZKEZSRUZfQ0xLM19PVVQsIDMxLCAiZnJlZl9jbGszX291dCIsICJmcmVmX2NsazJfcmVxIiwKKwkJCSJzeXNfc2VjdXJlX2luZGljYXRvciIsICJncGlvX3drMzEiLCAiYzJjX3dha2VyZXFvdXQiLAorCQkJTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShGUkVGX0NMSzRfUkVRLCA3LCAiZnJlZl9jbGs0X3JlcSIsICJmcmVmX2NsazVfb3V0IiwKKwkJCU5VTEwsICJncGlvX3drNyIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpLAorCV9PTUFQNF9NVVhFTlRSWShGUkVGX0NMSzRfT1VULCA4LCAiZnJlZl9jbGs0X291dCIsIE5VTEwsIE5VTEwsCisJCQkiZ3Bpb193azgiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDRfTVVYRU5UUlkoU1lTXzMySywgMCwgInN5c18zMmsiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkJTlVMTCwgTlVMTCksCisJX09NQVA0X01VWEVOVFJZKFNZU19OUkVTUFdST04sIDAsICJzeXNfbnJlc3B3cm9uIiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpLAorCV9PTUFQNF9NVVhFTlRSWShTWVNfTlJFU1dBUk0sIDAsICJzeXNfbnJlc3dhcm0iLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVA0X01VWEVOVFJZKFNZU19QV1JfUkVRLCAwLCAic3lzX3B3cl9yZXEiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkJTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVA0X01VWEVOVFJZKFNZU19QV1JPTl9SRVNFVF9PVVQsIDI5LCAic3lzX3B3cm9uX3Jlc2V0X291dCIsIE5VTEwsCisJCQlOVUxMLCAiZ3Bpb193azI5IiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVA0X01VWEVOVFJZKFNZU19CT09UNiwgOSwgInN5c19ib290NiIsICJkcG1fZW11MTgiLCBOVUxMLAorCQkJImdwaW9fd2s5IiwgImMyY193YWtlcmVxb3V0IiwgTlVMTCwgTlVMTCwKKwkJCSJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoU1lTX0JPT1Q3LCAxMCwgInN5c19ib290NyIsICJkcG1fZW11MTkiLCBOVUxMLAorCQkJImdwaW9fd2sxMCIsIE5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoSlRBR19OVFJTVCwgMCwgImp0YWdfbnRyc3QiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkJTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVA0X01VWEVOVFJZKEpUQUdfVENLLCAwLCAianRhZ190Y2siLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkJTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQNF9NVVhFTlRSWShKVEFHX1JUQ0ssIDAsICJqdGFnX3J0Y2siLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkJTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVA0X01VWEVOVFJZKEpUQUdfVE1TX1RNU0MsIDAsICJqdGFnX3Rtc190bXNjIiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJCU5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDRfTVVYRU5UUlkoSlRBR19UREksIDAsICJqdGFnX3RkaSIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCisJCQlOVUxMLCBOVUxMKSwKKwlfT01BUDRfTVVYRU5UUlkoSlRBR19URE8sIDAsICJqdGFnX3RkbyIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCisJCQlOVUxMLCBOVUxMKSwKKwl7IC5yZWdfb2Zmc2V0ID0gT01BUF9NVVhfVEVSTUlOQVRPUiB9LAorfTsKKworLyoKKyAqIEJhbGxzIGZvciA0NFhYIENCTCAmIENCUyBwYWNrYWdlIC0gd2FrZXVwIHBhcnRpdGlvbgorICogNTQ3LXBpbiBDQkwgRVMxLjAgUy1GUEdBLU41NDcsIDAuNDBtbSBCYWxsIFBpdGNoIChUb3ApLAorICoJCQkJICAwLjQwbW0gQmFsbCBQaXRjaCAoQm90dG9tKQorICovCisjaWYgZGVmaW5lZChDT05GSUdfT01BUF9NVVgpICYmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKQkJXAorCQkmJiBkZWZpbmVkKENPTkZJR19PTUFQX1BBQ0tBR0VfQ0JMKQorc3RydWN0IG9tYXBfYmFsbCBfX2luaXRkYXRhIG9tYXA0X3drdXBfY2JsX2Nic19iYWxsW10gPSB7CisJX09NQVA0X0JBTExFTlRSWShTSU1fSU8sICJoNCIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoU0lNX0NMSywgImoyIiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShTSU1fUkVTRVQsICJnMiIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoU0lNX0NELCAiajEiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKFNJTV9QV1JDVFJMLCAiazEiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKFNSX1NDTCwgImFnOSIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoU1JfU0RBLCAiYWY5IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShGUkVGX1hUQUxfSU4sICJhaDYiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKEZSRUZfU0xJQ0VSX0lOLCAiYWc4IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShGUkVGX0NMS19JT1JFUSwgImFkMSIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoRlJFRl9DTEswX09VVCwgImFkMiIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoRlJFRl9DTEszX1JFUSwgImFkMyIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoRlJFRl9DTEszX09VVCwgImFkNCIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoRlJFRl9DTEs0X1JFUSwgImFjMiIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoRlJFRl9DTEs0X09VVCwgImFjMyIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoU1lTXzMySywgImFnNyIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoU1lTX05SRVNQV1JPTiwgImFlNyIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoU1lTX05SRVNXQVJNLCAiYWY3IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShTWVNfUFdSX1JFUSwgImFoNyIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoU1lTX1BXUk9OX1JFU0VUX09VVCwgImFnNiIsIE5VTEwpLAorCV9PTUFQNF9CQUxMRU5UUlkoU1lTX0JPT1Q2LCAiYWY4IiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShTWVNfQk9PVDcsICJhZTgiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKEpUQUdfTlRSU1QsICJhaDIiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKEpUQUdfVENLLCAiYWcxIiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShKVEFHX1JUQ0ssICJhZTMiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKEpUQUdfVE1TX1RNU0MsICJhaDEiLCBOVUxMKSwKKwlfT01BUDRfQkFMTEVOVFJZKEpUQUdfVERJLCAiYWUxIiwgTlVMTCksCisJX09NQVA0X0JBTExFTlRSWShKVEFHX1RETywgImFlMiIsIE5VTEwpLAorCXsgLnJlZ19vZmZzZXQgPSBPTUFQX01VWF9URVJNSU5BVE9SIH0sCit9OworI2Vsc2UKKyNkZWZpbmUgb21hcDRfd2t1cF9jYmxfY2JzX2JhbGwgIE5VTEwKKyNlbmRpZgorCitpbnQgX19pbml0IG9tYXA0X211eF9pbml0KHN0cnVjdCBvbWFwX2JvYXJkX211eCAqYm9hcmRfc3Vic2V0LCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IG9tYXBfYmFsbCAqcGFja2FnZV9iYWxsc19jb3JlOworCXN0cnVjdCBvbWFwX2JhbGwgKnBhY2thZ2VfYmFsbHNfd2t1cCA9IG9tYXA0X3drdXBfY2JsX2Nic19iYWxsOworCXN0cnVjdCBvbWFwX211eCAqY29yZV9tdXhtb2RlczsKKwlpbnQgcmV0OworCisJc3dpdGNoIChmbGFncyAmIE9NQVBfUEFDS0FHRV9NQVNLKSB7CisJY2FzZSBPTUFQX1BBQ0tBR0VfQ0JMOgorCQlwcl9kZWJ1ZygiJXM6IE9NQVA0NDMwIEVTMS4wIC0+IE9NQVBfUEFDS0FHRV9DQkxcbiIsIF9fZnVuY19fKTsKKwkJcGFja2FnZV9iYWxsc19jb3JlID0gb21hcDRfY29yZV9jYmxfYmFsbDsKKwkJY29yZV9tdXhtb2RlcyA9IG9tYXA0X2NvcmVfbXV4bW9kZXM7CisJCWJyZWFrOworCWNhc2UgT01BUF9QQUNLQUdFX0NCUzoKKwkJcHJfZGVidWcoIiVzOiBPTUFQNDQzMCBFUzIuWCAtPiBPTUFQX1BBQ0tBR0VfQ0JTXG4iLCBfX2Z1bmNfXyk7CisJCXBhY2thZ2VfYmFsbHNfY29yZSA9IG9tYXA0X2NvcmVfY2JzX2JhbGw7CisJCWNvcmVfbXV4bW9kZXMgPSBvbWFwNF9lczJfY29yZV9tdXhtb2RlczsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJfZXJyKCIlczogVW5rbm93biBvbWFwIHBhY2thZ2UsIG11eCBkaXNhYmxlZFxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXQgPSBvbWFwX211eF9pbml0KCJjb3JlIiwKKwkJCSAgICBPTUFQX01VWF9HUElPX0lOX01PREUzLAorCQkJICAgIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9DT1JFX01VWF9QQkFTRSwKKwkJCSAgICBPTUFQNF9DVFJMX01PRFVMRV9QQURfQ09SRV9NVVhfU0laRSwKKwkJCSAgICBjb3JlX211eG1vZGVzLCBOVUxMLCBib2FyZF9zdWJzZXQsCisJCQkgICAgcGFja2FnZV9iYWxsc19jb3JlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gb21hcF9tdXhfaW5pdCgid2t1cCIsCisJCQkgICAgT01BUF9NVVhfR1BJT19JTl9NT0RFMywKKwkJCSAgICBPTUFQNF9DVFJMX01PRFVMRV9QQURfV0tVUF9NVVhfUEJBU0UsCisJCQkgICAgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX1dLVVBfTVVYX1NJWkUsCisJCQkgICAgb21hcDRfd2t1cF9tdXhtb2RlcywgTlVMTCwgYm9hcmRfc3Vic2V0LAorCQkJICAgIHBhY2thZ2VfYmFsbHNfd2t1cCk7CisKKwlyZXR1cm4gcmV0OworfQorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL211eDQ0eHguaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4NDR4eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2MzUwMjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL211eDQ0eHguaApAQCAtMCwwICsxLDI5OCBAQAorLyoKKyAqIE9NQVA0NHh4IE1VWCByZWdpc3RlcnMgYW5kIGJpdGZpZWxkcworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogQmVub2l0IENvdXNzb24gKGItY291c3NvbkB0aS5jb20pCisgKgorICogVGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdGhlIE9NQVAgaGFyZHdhcmUgZGF0YWJhc2VzLgorICogV2UgcmVzcGVjdGZ1bGx5IGFzayB0aGF0IGFueSBtb2RpZmljYXRpb25zIHRvIHRoaXMgZmlsZSBiZSBjb29yZGluYXRlZAorICogd2l0aCB0aGUgcHVibGljIGxpbnV4LW9tYXBAdmdlci5rZXJuZWwub3JnIG1haWxpbmcgbGlzdCBhbmQgdGhlCisgKiBhdXRob3JzIGFib3ZlIHRvIGVuc3VyZSB0aGF0IHRoZSBhdXRvZ2VuZXJhdGlvbiBzY3JpcHRzIGFyZSBrZXB0CisgKiB1cC10by1kYXRlIHdpdGggdGhlIGZpbGUgY29udGVudHMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9NVVhfNDRYWF9ICisjZGVmaW5lIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9NVVhfNDRYWF9ICisKKyNkZWZpbmUgT01BUDRfTVVYKE0wLCBtdXhfdmFsdWUpCQkJCQlcCit7CQkJCQkJCQkJXAorCS5yZWdfb2Zmc2V0CT0gKE9NQVA0X0NUUkxfTU9EVUxFX1BBRF8jI00wIyNfT0ZGU0VUKSwJXAorCS52YWx1ZQkJPSAobXV4X3ZhbHVlKSwJCQkJCVwKK30KKworLyogY3RybF9tb2R1bGVfcGFkX2NvcmUgYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9DT1JFX01VWF9QQkFTRQkJCTB4NGExMDAwMDAKKworLyogY3RybF9tb2R1bGVfcGFkX2NvcmUgcmVnaXN0ZXJzIG9mZnNldCAqLworI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfR1BNQ19BRDBfT0ZGU0VUCQkJMHgwMDQwCisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9HUE1DX0FEMV9PRkZTRVQJCQkweDAwNDIKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX0dQTUNfQUQyX09GRlNFVAkJCTB4MDA0NAorI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfR1BNQ19BRDNfT0ZGU0VUCQkJMHgwMDQ2CisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9HUE1DX0FENF9PRkZTRVQJCQkweDAwNDgKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX0dQTUNfQUQ1X09GRlNFVAkJCTB4MDA0YQorI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfR1BNQ19BRDZfT0ZGU0VUCQkJMHgwMDRjCisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9HUE1DX0FEN19PRkZTRVQJCQkweDAwNGUKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX0dQTUNfQUQ4X09GRlNFVAkJCTB4MDA1MAorI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfR1BNQ19BRDlfT0ZGU0VUCQkJMHgwMDUyCisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9HUE1DX0FEMTBfT0ZGU0VUCQkJMHgwMDU0CisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9HUE1DX0FEMTFfT0ZGU0VUCQkJMHgwMDU2CisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9HUE1DX0FEMTJfT0ZGU0VUCQkJMHgwMDU4CisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9HUE1DX0FEMTNfT0ZGU0VUCQkJMHgwMDVhCisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9HUE1DX0FEMTRfT0ZGU0VUCQkJMHgwMDVjCisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9HUE1DX0FEMTVfT0ZGU0VUCQkJMHgwMDVlCisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9HUE1DX0ExNl9PRkZTRVQJCQkweDAwNjAKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX0dQTUNfQTE3X09GRlNFVAkJCTB4MDA2MgorI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfR1BNQ19BMThfT0ZGU0VUCQkJMHgwMDY0CisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9HUE1DX0ExOV9PRkZTRVQJCQkweDAwNjYKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX0dQTUNfQTIwX09GRlNFVAkJCTB4MDA2OAorI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfR1BNQ19BMjFfT0ZGU0VUCQkJMHgwMDZhCisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9HUE1DX0EyMl9PRkZTRVQJCQkweDAwNmMKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX0dQTUNfQTIzX09GRlNFVAkJCTB4MDA2ZQorI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfR1BNQ19BMjRfT0ZGU0VUCQkJMHgwMDcwCisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9HUE1DX0EyNV9PRkZTRVQJCQkweDAwNzIKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX0dQTUNfTkNTMF9PRkZTRVQJCQkweDAwNzQKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX0dQTUNfTkNTMV9PRkZTRVQJCQkweDAwNzYKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX0dQTUNfTkNTMl9PRkZTRVQJCQkweDAwNzgKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX0dQTUNfTkNTM19PRkZTRVQJCQkweDAwN2EKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX0dQTUNfTldQX09GRlNFVAkJCTB4MDA3YworI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfR1BNQ19DTEtfT0ZGU0VUCQkJMHgwMDdlCisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9HUE1DX05BRFZfQUxFX09GRlNFVAkJMHgwMDgwCisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9HUE1DX05PRV9PRkZTRVQJCQkweDAwODIKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX0dQTUNfTldFX09GRlNFVAkJCTB4MDA4NAorI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfR1BNQ19OQkUwX0NMRV9PRkZTRVQJCTB4MDA4NgorI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfR1BNQ19OQkUxX09GRlNFVAkJCTB4MDA4OAorI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfR1BNQ19XQUlUMF9PRkZTRVQJCQkweDAwOGEKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX0dQTUNfV0FJVDFfT0ZGU0VUCQkJMHgwMDhjCisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9DMkNfREFUQTExX09GRlNFVAkJCTB4MDA4ZQorI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfQzJDX0RBVEExMl9PRkZTRVQJCQkweDAwOTAKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX0MyQ19EQVRBMTNfT0ZGU0VUCQkJMHgwMDkyCisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9DMkNfREFUQTE0X09GRlNFVAkJCTB4MDA5NAorI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfQzJDX0RBVEExNV9PRkZTRVQJCQkweDAwOTYKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX0hETUlfSFBEX09GRlNFVAkJCTB4MDA5OAorI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfSERNSV9DRUNfT0ZGU0VUCQkJMHgwMDlhCisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9IRE1JX0REQ19TQ0xfT0ZGU0VUCQkweDAwOWMKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX0hETUlfRERDX1NEQV9PRkZTRVQJCTB4MDA5ZQorI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfQ1NJMjFfRFgwX09GRlNFVAkJCTB4MDBhMAorI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfQ1NJMjFfRFkwX09GRlNFVAkJCTB4MDBhMgorI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfQ1NJMjFfRFgxX09GRlNFVAkJCTB4MDBhNAorI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfQ1NJMjFfRFkxX09GRlNFVAkJCTB4MDBhNgorI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfQ1NJMjFfRFgyX09GRlNFVAkJCTB4MDBhOAorI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfQ1NJMjFfRFkyX09GRlNFVAkJCTB4MDBhYQorI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfQ1NJMjFfRFgzX09GRlNFVAkJCTB4MDBhYworI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfQ1NJMjFfRFkzX09GRlNFVAkJCTB4MDBhZQorI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfQ1NJMjFfRFg0X09GRlNFVAkJCTB4MDBiMAorI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfQ1NJMjFfRFk0X09GRlNFVAkJCTB4MDBiMgorI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfQ1NJMjJfRFgwX09GRlNFVAkJCTB4MDBiNAorI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfQ1NJMjJfRFkwX09GRlNFVAkJCTB4MDBiNgorI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfQ1NJMjJfRFgxX09GRlNFVAkJCTB4MDBiOAorI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfQ1NJMjJfRFkxX09GRlNFVAkJCTB4MDBiYQorI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfQ0FNX1NIVVRURVJfT0ZGU0VUCQkweDAwYmMKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX0NBTV9TVFJPQkVfT0ZGU0VUCQkJMHgwMGJlCisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9DQU1fR0xPQkFMUkVTRVRfT0ZGU0VUCQkweDAwYzAKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX1VTQkIxX1VMUElUTExfQ0xLX09GRlNFVAkJMHgwMGMyCisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9VU0JCMV9VTFBJVExMX1NUUF9PRkZTRVQJCTB4MDBjNAorI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfVVNCQjFfVUxQSVRMTF9ESVJfT0ZGU0VUCQkweDAwYzYKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX1VTQkIxX1VMUElUTExfTlhUX09GRlNFVAkJMHgwMGM4CisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9VU0JCMV9VTFBJVExMX0RBVDBfT0ZGU0VUCQkweDAwY2EKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX1VTQkIxX1VMUElUTExfREFUMV9PRkZTRVQJCTB4MDBjYworI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfVVNCQjFfVUxQSVRMTF9EQVQyX09GRlNFVAkJMHgwMGNlCisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9VU0JCMV9VTFBJVExMX0RBVDNfT0ZGU0VUCQkweDAwZDAKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX1VTQkIxX1VMUElUTExfREFUNF9PRkZTRVQJCTB4MDBkMgorI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfVVNCQjFfVUxQSVRMTF9EQVQ1X09GRlNFVAkJMHgwMGQ0CisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9VU0JCMV9VTFBJVExMX0RBVDZfT0ZGU0VUCQkweDAwZDYKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX1VTQkIxX1VMUElUTExfREFUN19PRkZTRVQJCTB4MDBkOAorI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfVVNCQjFfSFNJQ19EQVRBX09GRlNFVAkJMHgwMGRhCisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9VU0JCMV9IU0lDX1NUUk9CRV9PRkZTRVQJCTB4MDBkYworI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfVVNCQzFfSUNVU0JfRFBfT0ZGU0VUCQkweDAwZGUKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX1VTQkMxX0lDVVNCX0RNX09GRlNFVAkJMHgwMGUwCisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9TRE1NQzFfQ0xLX09GRlNFVAkJCTB4MDBlMgorI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfU0RNTUMxX0NNRF9PRkZTRVQJCQkweDAwZTQKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX1NETU1DMV9EQVQwX09GRlNFVAkJMHgwMGU2CisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9TRE1NQzFfREFUMV9PRkZTRVQJCTB4MDBlOAorI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfU0RNTUMxX0RBVDJfT0ZGU0VUCQkweDAwZWEKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX1NETU1DMV9EQVQzX09GRlNFVAkJMHgwMGVjCisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9TRE1NQzFfREFUNF9PRkZTRVQJCTB4MDBlZQorI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfU0RNTUMxX0RBVDVfT0ZGU0VUCQkweDAwZjAKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX1NETU1DMV9EQVQ2X09GRlNFVAkJMHgwMGYyCisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9TRE1NQzFfREFUN19PRkZTRVQJCTB4MDBmNAorI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfQUJFX01DQlNQMl9DTEtYX09GRlNFVAkJMHgwMGY2CisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9BQkVfTUNCU1AyX0RSX09GRlNFVAkJMHgwMGY4CisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9BQkVfTUNCU1AyX0RYX09GRlNFVAkJMHgwMGZhCisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9BQkVfTUNCU1AyX0ZTWF9PRkZTRVQJCTB4MDBmYworI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfQUJFX01DQlNQMV9DTEtYX09GRlNFVAkJMHgwMGZlCisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9BQkVfTUNCU1AxX0RSX09GRlNFVAkJMHgwMTAwCisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9BQkVfTUNCU1AxX0RYX09GRlNFVAkJMHgwMTAyCisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9BQkVfTUNCU1AxX0ZTWF9PRkZTRVQJCTB4MDEwNAorI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfQUJFX1BETV9VTF9EQVRBX09GRlNFVAkJMHgwMTA2CisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9BQkVfUERNX0RMX0RBVEFfT0ZGU0VUCQkweDAxMDgKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX0FCRV9QRE1fRlJBTUVfT0ZGU0VUCQkweDAxMGEKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX0FCRV9QRE1fTEJfQ0xLX09GRlNFVAkJMHgwMTBjCisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9BQkVfQ0xLU19PRkZTRVQJCQkweDAxMGUKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX0FCRV9ETUlDX0NMSzFfT0ZGU0VUCQkweDAxMTAKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX0FCRV9ETUlDX0RJTjFfT0ZGU0VUCQkweDAxMTIKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX0FCRV9ETUlDX0RJTjJfT0ZGU0VUCQkweDAxMTQKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX0FCRV9ETUlDX0RJTjNfT0ZGU0VUCQkweDAxMTYKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX1VBUlQyX0NUU19PRkZTRVQJCQkweDAxMTgKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX1VBUlQyX1JUU19PRkZTRVQJCQkweDAxMWEKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX1VBUlQyX1JYX09GRlNFVAkJCTB4MDExYworI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfVUFSVDJfVFhfT0ZGU0VUCQkJMHgwMTFlCisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9IRFFfU0lPX09GRlNFVAkJCTB4MDEyMAorI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfSTJDMV9TQ0xfT0ZGU0VUCQkJMHgwMTIyCisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9JMkMxX1NEQV9PRkZTRVQJCQkweDAxMjQKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX0kyQzJfU0NMX09GRlNFVAkJCTB4MDEyNgorI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfSTJDMl9TREFfT0ZGU0VUCQkJMHgwMTI4CisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9JMkMzX1NDTF9PRkZTRVQJCQkweDAxMmEKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX0kyQzNfU0RBX09GRlNFVAkJCTB4MDEyYworI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfSTJDNF9TQ0xfT0ZGU0VUCQkJMHgwMTJlCisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9JMkM0X1NEQV9PRkZTRVQJCQkweDAxMzAKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX01DU1BJMV9DTEtfT0ZGU0VUCQkJMHgwMTMyCisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9NQ1NQSTFfU09NSV9PRkZTRVQJCTB4MDEzNAorI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfTUNTUEkxX1NJTU9fT0ZGU0VUCQkweDAxMzYKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX01DU1BJMV9DUzBfT0ZGU0VUCQkJMHgwMTM4CisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9NQ1NQSTFfQ1MxX09GRlNFVAkJCTB4MDEzYQorI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfTUNTUEkxX0NTMl9PRkZTRVQJCQkweDAxM2MKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX01DU1BJMV9DUzNfT0ZGU0VUCQkJMHgwMTNlCisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9VQVJUM19DVFNfUkNUWF9PRkZTRVQJCTB4MDE0MAorI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfVUFSVDNfUlRTX1NEX09GRlNFVAkJMHgwMTQyCisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9VQVJUM19SWF9JUlJYX09GRlNFVAkJMHgwMTQ0CisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9VQVJUM19UWF9JUlRYX09GRlNFVAkJMHgwMTQ2CisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9TRE1NQzVfQ0xLX09GRlNFVAkJCTB4MDE0OAorI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfU0RNTUM1X0NNRF9PRkZTRVQJCQkweDAxNGEKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX1NETU1DNV9EQVQwX09GRlNFVAkJMHgwMTRjCisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9TRE1NQzVfREFUMV9PRkZTRVQJCTB4MDE0ZQorI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfU0RNTUM1X0RBVDJfT0ZGU0VUCQkweDAxNTAKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX1NETU1DNV9EQVQzX09GRlNFVAkJMHgwMTUyCisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9NQ1NQSTRfQ0xLX09GRlNFVAkJCTB4MDE1NAorI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfTUNTUEk0X1NJTU9fT0ZGU0VUCQkweDAxNTYKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX01DU1BJNF9TT01JX09GRlNFVAkJMHgwMTU4CisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9NQ1NQSTRfQ1MwX09GRlNFVAkJCTB4MDE1YQorI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfVUFSVDRfUlhfT0ZGU0VUCQkJMHgwMTVjCisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9VQVJUNF9UWF9PRkZTRVQJCQkweDAxNWUKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX1VTQkIyX1VMUElUTExfQ0xLX09GRlNFVAkJMHgwMTYwCisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9VU0JCMl9VTFBJVExMX1NUUF9PRkZTRVQJCTB4MDE2MgorI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfVVNCQjJfVUxQSVRMTF9ESVJfT0ZGU0VUCQkweDAxNjQKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX1VTQkIyX1VMUElUTExfTlhUX09GRlNFVAkJMHgwMTY2CisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9VU0JCMl9VTFBJVExMX0RBVDBfT0ZGU0VUCQkweDAxNjgKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX1VTQkIyX1VMUElUTExfREFUMV9PRkZTRVQJCTB4MDE2YQorI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfVVNCQjJfVUxQSVRMTF9EQVQyX09GRlNFVAkJMHgwMTZjCisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9VU0JCMl9VTFBJVExMX0RBVDNfT0ZGU0VUCQkweDAxNmUKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX1VTQkIyX1VMUElUTExfREFUNF9PRkZTRVQJCTB4MDE3MAorI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfVVNCQjJfVUxQSVRMTF9EQVQ1X09GRlNFVAkJMHgwMTcyCisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9VU0JCMl9VTFBJVExMX0RBVDZfT0ZGU0VUCQkweDAxNzQKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX1VTQkIyX1VMUElUTExfREFUN19PRkZTRVQJCTB4MDE3NgorI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfVVNCQjJfSFNJQ19EQVRBX09GRlNFVAkJMHgwMTc4CisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9VU0JCMl9IU0lDX1NUUk9CRV9PRkZTRVQJCTB4MDE3YQorI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfVU5JUFJPX1RYMF9PRkZTRVQJCQkweDAxN2MKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX1VOSVBST19UWTBfT0ZGU0VUCQkJMHgwMTdlCisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9VTklQUk9fVFgxX09GRlNFVAkJCTB4MDE4MAorI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfVU5JUFJPX1RZMV9PRkZTRVQJCQkweDAxODIKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX1VOSVBST19UWDJfT0ZGU0VUCQkJMHgwMTg0CisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9VTklQUk9fVFkyX09GRlNFVAkJCTB4MDE4NgorI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfVU5JUFJPX1JYMF9PRkZTRVQJCQkweDAxODgKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX1VOSVBST19SWTBfT0ZGU0VUCQkJMHgwMThhCisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9VTklQUk9fUlgxX09GRlNFVAkJCTB4MDE4YworI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfVU5JUFJPX1JZMV9PRkZTRVQJCQkweDAxOGUKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX1VOSVBST19SWDJfT0ZGU0VUCQkJMHgwMTkwCisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9VTklQUk9fUlkyX09GRlNFVAkJCTB4MDE5MgorI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfVVNCQTBfT1RHX0NFX09GRlNFVAkJMHgwMTk0CisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9VU0JBMF9PVEdfRFBfT0ZGU0VUCQkweDAxOTYKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX1VTQkEwX09UR19ETV9PRkZTRVQJCTB4MDE5OAorI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfRlJFRl9DTEsxX09VVF9PRkZTRVQJCTB4MDE5YQorI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfRlJFRl9DTEsyX09VVF9PRkZTRVQJCTB4MDE5YworI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfU1lTX05JUlExX09GRlNFVAkJCTB4MDE5ZQorI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfU1lTX05JUlEyX09GRlNFVAkJCTB4MDFhMAorI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfU1lTX0JPT1QwX09GRlNFVAkJCTB4MDFhMgorI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfU1lTX0JPT1QxX09GRlNFVAkJCTB4MDFhNAorI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfU1lTX0JPT1QyX09GRlNFVAkJCTB4MDFhNgorI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfU1lTX0JPT1QzX09GRlNFVAkJCTB4MDFhOAorI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfU1lTX0JPT1Q0X09GRlNFVAkJCTB4MDFhYQorI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfU1lTX0JPT1Q1X09GRlNFVAkJCTB4MDFhYworI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfRFBNX0VNVTBfT0ZGU0VUCQkJMHgwMWFlCisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9EUE1fRU1VMV9PRkZTRVQJCQkweDAxYjAKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX0RQTV9FTVUyX09GRlNFVAkJCTB4MDFiMgorI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfRFBNX0VNVTNfT0ZGU0VUCQkJMHgwMWI0CisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9EUE1fRU1VNF9PRkZTRVQJCQkweDAxYjYKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX0RQTV9FTVU1X09GRlNFVAkJCTB4MDFiOAorI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfRFBNX0VNVTZfT0ZGU0VUCQkJMHgwMWJhCisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9EUE1fRU1VN19PRkZTRVQJCQkweDAxYmMKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX0RQTV9FTVU4X09GRlNFVAkJCTB4MDFiZQorI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfRFBNX0VNVTlfT0ZGU0VUCQkJMHgwMWMwCisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9EUE1fRU1VMTBfT0ZGU0VUCQkJMHgwMWMyCisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9EUE1fRU1VMTFfT0ZGU0VUCQkJMHgwMWM0CisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9EUE1fRU1VMTJfT0ZGU0VUCQkJMHgwMWM2CisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9EUE1fRU1VMTNfT0ZGU0VUCQkJMHgwMWM4CisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9EUE1fRU1VMTRfT0ZGU0VUCQkJMHgwMWNhCisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9EUE1fRU1VMTVfT0ZGU0VUCQkJMHgwMWNjCisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9EUE1fRU1VMTZfT0ZGU0VUCQkJMHgwMWNlCisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9EUE1fRU1VMTdfT0ZGU0VUCQkJMHgwMWQwCisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9EUE1fRU1VMThfT0ZGU0VUCQkJMHgwMWQyCisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9EUE1fRU1VMTlfT0ZGU0VUCQkJMHgwMWQ0CisKKy8qIEVTMi4wIG9ubHkgKi8KKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX0dQTUNfV0FJVDJfT0ZGU0VUCQkJMHgwMDhlCisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9HUE1DX05DUzRfT0ZGU0VUCQkJMHgwMDkwCisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9HUE1DX05DUzVfT0ZGU0VUCQkJMHgwMDkyCisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9HUE1DX05DUzZfT0ZGU0VUCQkJMHgwMDk0CisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9HUE1DX05DUzdfT0ZGU0VUCQkJMHgwMDk2CisKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX0tQRF9DT0wzX09GRlNFVAkJCTB4MDE3YworI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfS1BEX0NPTDRfT0ZGU0VUCQkJMHgwMTdlCisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9LUERfQ09MNV9PRkZTRVQJCQkweDAxODAKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX0tQRF9DT0wwX09GRlNFVAkJCTB4MDE4MgorI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfS1BEX0NPTDFfT0ZGU0VUCQkJMHgwMTg0CisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9LUERfQ09MMl9PRkZTRVQJCQkweDAxODYKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX0tQRF9ST1czX09GRlNFVAkJCTB4MDE4OAorI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfS1BEX1JPVzRfT0ZGU0VUCQkJMHgwMThhCisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9LUERfUk9XNV9PRkZTRVQJCQkweDAxOGMKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX0tQRF9ST1cwX09GRlNFVAkJCTB4MDE4ZQorI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfS1BEX1JPVzFfT0ZGU0VUCQkJMHgwMTkwCisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9LUERfUk9XMl9PRkZTRVQJCQkweDAxOTIKKworCisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9DT1JFX01VWF9TSVpFCQkJXAorCQkoT01BUDRfQ1RSTF9NT0RVTEVfUEFEX0RQTV9FTVUxOV9PRkZTRVQJCVwKKwkJIC0gT01BUDRfQ1RSTF9NT0RVTEVfUEFEX0dQTUNfQUQwX09GRlNFVCArIDIpCisKKy8qIGN0cmxfbW9kdWxlX3BhZF93a3VwIGJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfV0tVUF9NVVhfUEJBU0UJCQkweDRhMzFlMDAwCisKKy8qIGN0cmxfbW9kdWxlX3BhZF93a3VwIHJlZ2lzdGVycyBvZmZzZXQgKi8KKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX1NJTV9JT19PRkZTRVQJCQkweDAwNDAKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX1NJTV9DTEtfT0ZGU0VUCQkJMHgwMDQyCisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9TSU1fUkVTRVRfT0ZGU0VUCQkJMHgwMDQ0CisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9TSU1fQ0RfT0ZGU0VUCQkJMHgwMDQ2CisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9TSU1fUFdSQ1RSTF9PRkZTRVQJCTB4MDA0OAorI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfU1JfU0NMX09GRlNFVAkJCTB4MDA0YQorI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfU1JfU0RBX09GRlNFVAkJCTB4MDA0YworI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfRlJFRl9YVEFMX0lOX09GRlNFVAkJMHgwMDRlCisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9GUkVGX1NMSUNFUl9JTl9PRkZTRVQJCTB4MDA1MAorI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfRlJFRl9DTEtfSU9SRVFfT0ZGU0VUCQkweDAwNTIKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX0ZSRUZfQ0xLMF9PVVRfT0ZGU0VUCQkweDAwNTQKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX0ZSRUZfQ0xLM19SRVFfT0ZGU0VUCQkweDAwNTYKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX0ZSRUZfQ0xLM19PVVRfT0ZGU0VUCQkweDAwNTgKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX0ZSRUZfQ0xLNF9SRVFfT0ZGU0VUCQkweDAwNWEKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX0ZSRUZfQ0xLNF9PVVRfT0ZGU0VUCQkweDAwNWMKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX1NZU18zMktfT0ZGU0VUCQkJMHgwMDVlCisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9TWVNfTlJFU1BXUk9OX09GRlNFVAkJMHgwMDYwCisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9TWVNfTlJFU1dBUk1fT0ZGU0VUCQkweDAwNjIKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX1NZU19QV1JfUkVRX09GRlNFVAkJMHgwMDY0CisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9TWVNfUFdST05fUkVTRVRfT1VUX09GRlNFVAkweDAwNjYKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX1NZU19CT09UNl9PRkZTRVQJCQkweDAwNjgKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX1NZU19CT09UN19PRkZTRVQJCQkweDAwNmEKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX0pUQUdfTlRSU1RfT0ZGU0VUCQkJMHgwMDZjCisjZGVmaW5lIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9KVEFHX1RDS19PRkZTRVQJCQkweDAwNmUKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX0pUQUdfUlRDS19PRkZTRVQJCQkweDAwNzAKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX0pUQUdfVE1TX1RNU0NfT0ZGU0VUCQkweDAwNzIKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX0pUQUdfVERJX09GRlNFVAkJCTB4MDA3NAorI2RlZmluZSBPTUFQNF9DVFJMX01PRFVMRV9QQURfSlRBR19URE9fT0ZGU0VUCQkJMHgwMDc2CisKKyNkZWZpbmUgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX1dLVVBfTVVYX1NJWkUJCQlcCisJCShPTUFQNF9DVFJMX01PRFVMRV9QQURfSlRBR19URE9fT0ZGU0VUCQlcCisJCSAtIE9NQVA0X0NUUkxfTU9EVUxFX1BBRF9TSU1fSU9fT0ZGU0VUICsgMikKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXAtaG90cGx1Zy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwLWhvdHBsdWcuYwppbmRleCA2Y2VlNDU2Li40OTc2YjkzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXAtaG90cGx1Zy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcC1ob3RwbHVnLmMKQEAgLTE3LDE2ICsxNywxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogCiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KICNpbmNsdWRlIDxtYWNoL29tYXA0LWNvbW1vbi5oPgogCi1zdGF0aWMgREVDTEFSRV9DT01QTEVUSU9OKGNwdV9raWxsZWQpOwotCiBpbnQgcGxhdGZvcm1fY3B1X2tpbGwodW5zaWduZWQgaW50IGNwdSkKIHsKLQlyZXR1cm4gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZjcHVfa2lsbGVkLCA1MDAwKTsKKwlyZXR1cm4gMTsKIH0KIAogLyoKQEAgLTM1LDE1ICszMiw2IEBACiAgKi8KIHZvaWQgcGxhdGZvcm1fY3B1X2RpZSh1bnNpZ25lZCBpbnQgY3B1KQogewotCXVuc2lnbmVkIGludCB0aGlzX2NwdSA9IGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpOwotCi0JaWYgKGNwdSAhPSB0aGlzX2NwdSkgewotCQlwcl9jcml0KCJwbGF0Zm9ybV9jcHVfZGllIHJ1bm5pbmcgb24gJXUsIHNob3VsZCBiZSAldVxuIiwKLQkJCSAgIHRoaXNfY3B1LCBjcHUpOwotCQlCVUcoKTsKLQl9Ci0JcHJfbm90aWNlKCJDUFUldTogc2h1dGRvd25cbiIsIGNwdSk7Ci0JY29tcGxldGUoJmNwdV9raWxsZWQpOwogCWZsdXNoX2NhY2hlX2FsbCgpOwogCWRzYigpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXAtaW9tbXUuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcC1pb21tdS5jCmluZGV4IGY1YTFhYWQuLjNmYzVkYzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcC1pb21tdS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcC1pb21tdS5jCkBAIC0zMyw5ICszMywxMSBAQAogCQkJLm5hbWUgPSAiaXNwIiwKIAkJCS5ucl90bGJfZW50cmllcyA9IDgsCiAJCQkuY2xrX25hbWUgPSAiY2FtX2ljayIsCisJCQkuZGFfc3RhcnQgPSAweDAsCisJCQkuZGFfZW5kID0gMHhGRkZGRjAwMCwKIAkJfSwKIAl9LAotI2lmIGRlZmluZWQoQ09ORklHX01QVV9CUklER0VfSU9NTVUpCisjaWYgZGVmaW5lZChDT05GSUdfT01BUF9JT01NVV9JVkEyKQogCXsKIAkJLmJhc2UgPSAweDVkMDAwMDAwLAogCQkuaXJxID0gMjgsCkBAIC00Myw2ICs0NSw4IEBACiAJCQkubmFtZSA9ICJpdmEyIiwKIAkJCS5ucl90bGJfZW50cmllcyA9IDMyLAogCQkJLmNsa19uYW1lID0gIml2YTJfY2siLAorCQkJLmRhX3N0YXJ0ID0gMHgxMTAwMDAwMCwKKwkJCS5kYV9lbmQgPSAweEZGRkZGMDAwLAogCQl9LAogCX0sCiAjZW5kaWYKQEAgLTY0LDYgKzY4LDggQEAKIAkJCS5uYW1lID0gImR1Y2F0aSIsCiAJCQkubnJfdGxiX2VudHJpZXMgPSAzMiwKIAkJCS5jbGtfbmFtZSA9ICJkdWNhdGlfaWNrIiwKKwkJCS5kYV9zdGFydCA9IDB4MCwKKwkJCS5kYV9lbmQgPSAweEZGRkZGMDAwLAogCQl9LAogCX0sCiAjaWYgZGVmaW5lZChDT05GSUdfTVBVX1RFU0xBX0lPTU1VKQpAQCAtNzQsNiArODAsOCBAQAogCQkJLm5hbWUgPSAidGVzbGEiLAogCQkJLm5yX3RsYl9lbnRyaWVzID0gMzIsCiAJCQkuY2xrX25hbWUgPSAidGVzbGFfaWNrIiwKKwkJCS5kYV9zdGFydCA9IDB4MCwKKwkJCS5kYV9lbmQgPSAweEZGRkZGMDAwLAogCQl9LAogCX0sCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcC1zbXAuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcC1zbXAuYwppbmRleCA5ZTlmNzBlLi5iNjZjZmU4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXAtc21wLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwLXNtcC5jCkBAIC0yMSw3ICsyMSw2IEBACiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+Ci0jaW5jbHVkZSA8YXNtL2xvY2FsdGltZXIuaD4KICNpbmNsdWRlIDxhc20vc21wX3NjdS5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL29tYXA0LWNvbW1vbi5oPgpAQCAtMjksMjggKzI4LDE2IEBACiAvKiBTQ1UgYmFzZSBhZGRyZXNzICovCiBzdGF0aWMgdm9pZCBfX2lvbWVtICpzY3VfYmFzZTsKIAotLyoKLSAqIFVzZSBTQ1UgY29uZmlnIHJlZ2lzdGVyIHRvIGNvdW50IG51bWJlciBvZiBjb3JlcwotICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnZXRfY29yZV9jb3VudCh2b2lkKQotewotCWlmIChzY3VfYmFzZSkKLQkJcmV0dXJuIHNjdV9nZXRfY29yZV9jb3VudChzY3VfYmFzZSk7Ci0JcmV0dXJuIDE7Ci19Ci0KIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soYm9vdF9sb2NrKTsKIAogdm9pZCBfX2NwdWluaXQgcGxhdGZvcm1fc2Vjb25kYXJ5X2luaXQodW5zaWduZWQgaW50IGNwdSkKIHsKLQl0cmFjZV9oYXJkaXJxc19vZmYoKTsKLQogCS8qCiAJICogSWYgYW55IGludGVycnVwdHMgYXJlIGFscmVhZHkgZW5hYmxlZCBmb3IgdGhlIHByaW1hcnkKIAkgKiBjb3JlIChlLmcuIHRpbWVyIGlycSksIHRoZW4gdGhleSB3aWxsIG5vdCBoYXZlIGJlZW4gZW5hYmxlZAogCSAqIGZvciB1czogZG8gc28KIAkgKi8KLQlnaWNfY3B1X2luaXQoMCwgZ2ljX2NwdV9iYXNlX2FkZHIpOworCWdpY19zZWNvbmRhcnlfaW5pdCgwKTsKIAogCS8qCiAJICogU3luY2hyb25pc2Ugd2l0aCB0aGUgYm9vdCB0aHJlYWQuCkBAIC03Niw3ICs2Myw3IEBACiAJb21hcF9tb2RpZnlfYXV4Y29yZWJvb3QwKDB4MjAwLCAweGZmZmZmZGZmKTsKIAlmbHVzaF9jYWNoZV9hbGwoKTsKIAlzbXBfd21iKCk7Ci0Jc21wX2Nyb3NzX2NhbGwoY3B1bWFza19vZihjcHUpKTsKKwlzbXBfY3Jvc3NfY2FsbChjcHVtYXNrX29mKGNwdSksIDEpOwogCiAJLyoKIAkgKiBOb3cgdGhlIHNlY29uZGFyeSBjb3JlIGlzIHN0YXJ0aW5nIHVwIGxldCBpdCBydW4gaXRzCkBAIC0xMTgsMjUgKzEwNSw5IEBACiAJc2N1X2Jhc2UgPSBpb3JlbWFwKE9NQVA0NFhYX1NDVV9CQVNFLCBTWl8yNTYpOwogCUJVR19PTighc2N1X2Jhc2UpOwogCi0JbmNvcmVzID0gZ2V0X2NvcmVfY291bnQoKTsKLQotCWZvciAoaSA9IDA7IGkgPCBuY29yZXM7IGkrKykKLQkJc2V0X2NwdV9wb3NzaWJsZShpLCB0cnVlKTsKLX0KLQotdm9pZCBfX2luaXQgc21wX3ByZXBhcmVfY3B1cyh1bnNpZ25lZCBpbnQgbWF4X2NwdXMpCi17Ci0JdW5zaWduZWQgaW50IG5jb3JlcyA9IGdldF9jb3JlX2NvdW50KCk7Ci0JdW5zaWduZWQgaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQlpbnQgaTsKKwluY29yZXMgPSBzY3VfZ2V0X2NvcmVfY291bnQoc2N1X2Jhc2UpOwogCiAJLyogc2FuaXR5IGNoZWNrICovCi0JaWYgKG5jb3JlcyA9PSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgIk9NQVA0OiBzdHJhbmdlIGNvcmUgY291bnQgb2YgMD8gRGVmYXVsdCB0byAxXG4iKTsKLQkJbmNvcmVzID0gMTsKLQl9Ci0KIAlpZiAobmNvcmVzID4gTlJfQ1BVUykgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCSAgICAgICAiT01BUDQ6IG5vLiBvZiBjb3JlcyAoJWQpIGdyZWF0ZXIgdGhhbiBjb25maWd1cmVkICIKQEAgLTE0NCwxMyArMTE1LDE0IEBACiAJCSAgICAgICBuY29yZXMsIE5SX0NQVVMpOwogCQluY29yZXMgPSBOUl9DUFVTOwogCX0KLQlzbXBfc3RvcmVfY3B1X2luZm8oY3B1KTsKIAotCS8qCi0JICogYXJlIHdlIHRyeWluZyB0byBib290IG1vcmUgY29yZXMgdGhhbiBleGlzdD8KLQkgKi8KLQlpZiAobWF4X2NwdXMgPiBuY29yZXMpCi0JCW1heF9jcHVzID0gbmNvcmVzOworCWZvciAoaSA9IDA7IGkgPCBuY29yZXM7IGkrKykKKwkJc2V0X2NwdV9wb3NzaWJsZShpLCB0cnVlKTsKK30KKwordm9pZCBfX2luaXQgcGxhdGZvcm1fc21wX3ByZXBhcmVfY3B1cyh1bnNpZ25lZCBpbnQgbWF4X2NwdXMpCit7CisJaW50IGk7CiAKIAkvKgogCSAqIEluaXRpYWxpc2UgdGhlIHByZXNlbnQgbWFwLCB3aGljaCBkZXNjcmliZXMgdGhlIHNldCBvZiBDUFVzCkBAIC0xNTksMTggKzEzMSwxMCBAQAogCWZvciAoaSA9IDA7IGkgPCBtYXhfY3B1czsgaSsrKQogCQlzZXRfY3B1X3ByZXNlbnQoaSwgdHJ1ZSk7CiAKLQlpZiAobWF4X2NwdXMgPiAxKSB7Ci0JCS8qCi0JCSAqIEVuYWJsZSB0aGUgbG9jYWwgdGltZXIgb3IgYnJvYWRjYXN0IGRldmljZSBmb3IgdGhlCi0JCSAqIGJvb3QgQ1BVLCBidXQgb25seSBpZiB3ZSBoYXZlIG1vcmUgdGhhbiBvbmUgQ1BVLgotCQkgKi8KLQkJcGVyY3B1X3RpbWVyX3NldHVwKCk7Ci0KLQkJLyoKLQkJICogSW5pdGlhbGlzZSB0aGUgU0NVIGFuZCB3YWtlIHVwIHRoZSBzZWNvbmRhcnkgY29yZSB1c2luZwotCQkgKiB3YWtldXBfc2Vjb25kYXJ5KCkuCi0JCSAqLwotCQlzY3VfZW5hYmxlKHNjdV9iYXNlKTsKLQkJd2FrZXVwX3NlY29uZGFyeSgpOwotCX0KKwkvKgorCSAqIEluaXRpYWxpc2UgdGhlIFNDVSBhbmQgd2FrZSB1cCB0aGUgc2Vjb25kYXJ5IGNvcmUgdXNpbmcKKwkgKiB3YWtldXBfc2Vjb25kYXJ5KCkuCisJICovCisJc2N1X2VuYWJsZShzY3VfYmFzZSk7CisJd2FrZXVwX3NlY29uZGFyeSgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwNC1jb21tb24uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcDQtY29tbW9uLmMKaW5kZXggMmY4OTU1NS4uMTkyNjg2NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwNC1jb21tb24uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXA0LWNvbW1vbi5jCkBAIC0yNiwyMSArMjYsMjIgQEAKIHZvaWQgX19pb21lbSAqbDJjYWNoZV9iYXNlOwogI2VuZGlmCiAKLXZvaWQgX19pb21lbSAqZ2ljX2NwdV9iYXNlX2FkZHI7CiB2b2lkIF9faW9tZW0gKmdpY19kaXN0X2Jhc2VfYWRkcjsKIAogCiB2b2lkIF9faW5pdCBnaWNfaW5pdF9pcnEodm9pZCkKIHsKKwl2b2lkIF9faW9tZW0gKmdpY19jcHVfYmFzZTsKKwogCS8qIFN0YXRpYyBtYXBwaW5nLCBuZXZlciByZWxlYXNlZCAqLwogCWdpY19kaXN0X2Jhc2VfYWRkciA9IGlvcmVtYXAoT01BUDQ0WFhfR0lDX0RJU1RfQkFTRSwgU1pfNEspOwogCUJVR19PTighZ2ljX2Rpc3RfYmFzZV9hZGRyKTsKLQlnaWNfZGlzdF9pbml0KDAsIGdpY19kaXN0X2Jhc2VfYWRkciwgMjkpOwogCiAJLyogU3RhdGljIG1hcHBpbmcsIG5ldmVyIHJlbGVhc2VkICovCi0JZ2ljX2NwdV9iYXNlX2FkZHIgPSBpb3JlbWFwKE9NQVA0NFhYX0dJQ19DUFVfQkFTRSwgU1pfNTEyKTsKLQlCVUdfT04oIWdpY19jcHVfYmFzZV9hZGRyKTsKLQlnaWNfY3B1X2luaXQoMCwgZ2ljX2NwdV9iYXNlX2FkZHIpOworCWdpY19jcHVfYmFzZSA9IGlvcmVtYXAoT01BUDQ0WFhfR0lDX0NQVV9CQVNFLCBTWl81MTIpOworCUJVR19PTighZ2ljX2NwdV9iYXNlKTsKKworCWdpY19pbml0KDAsIDI5LCBnaWNfZGlzdF9iYXNlX2FkZHIsIGdpY19jcHVfYmFzZSk7CiB9CiAKICNpZmRlZiBDT05GSUdfQ0FDSEVfTDJYMApAQCAtNTMsNiArNTQsOCBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBvbWFwX2wyX2NhY2hlX2luaXQodm9pZCkKIHsKKwl1MzIgYXV4X2N0cmwgPSAwOworCiAJLyoKIAkgKiBUbyBhdm9pZCBjb2RlIHJ1bm5pbmcgb24gb3RoZXIgT01BUHMgaW4KIAkgKiBtdWx0aS1vbWFwIGJ1aWxkcwpAQCAtNjQsMTggKzY3LDMyIEBACiAJbDJjYWNoZV9iYXNlID0gaW9yZW1hcChPTUFQNDRYWF9MMkNBQ0hFX0JBU0UsIFNaXzRLKTsKIAlCVUdfT04oIWwyY2FjaGVfYmFzZSk7CiAKLQkvKiBFbmFibGUgUEwzMTAgTDIgQ2FjaGUgY29udHJvbGxlciAqLwotCW9tYXBfc21jMSgweDEwMiwgMHgxKTsKLQogCS8qCiAJICogMTYtd2F5IGFzc29jaWF0aXZpdHksIHBhcml0eSBkaXNhYmxlZAogCSAqIFdheSBzaXplIC0gMzJLQiAoZXMxLjApCiAJICogV2F5IHNpemUgLSA2NEtCIChlczIuMCArKQogCSAqLwotCWlmIChvbWFwX3JldigpID09IE9NQVA0NDMwX1JFVl9FUzFfMCkKLQkJbDJ4MF9pbml0KGwyY2FjaGVfYmFzZSwgMHgwZTA1MDAwMCwgMHhjMDAwMGZmZik7Ci0JZWxzZQotCQlsMngwX2luaXQobDJjYWNoZV9iYXNlLCAweDBlMDcwMDAwLCAweGMwMDAwZmZmKTsKKwlhdXhfY3RybCA9ICgoMSA8PCBMMlgwX0FVWF9DVFJMX0FTU09DSUFUSVZJVFlfU0hJRlQpIHwKKwkJCSgweDEgPDwgMjUpIHwKKwkJCSgweDEgPDwgTDJYMF9BVVhfQ1RSTF9OU19MT0NLRE9XTl9TSElGVCkgfAorCQkJKDB4MSA8PCBMMlgwX0FVWF9DVFJMX05TX0lOVF9DVFJMX1NISUZUKSk7CisKKwlpZiAob21hcF9yZXYoKSA9PSBPTUFQNDQzMF9SRVZfRVMxXzApIHsKKwkJYXV4X2N0cmwgfD0gMHgyIDw8IEwyWDBfQVVYX0NUUkxfV0FZX1NJWkVfU0hJRlQ7CisJfSBlbHNlIHsKKwkJYXV4X2N0cmwgfD0gKCgweDMgPDwgTDJYMF9BVVhfQ1RSTF9XQVlfU0laRV9TSElGVCkgfAorCQkJKDEgPDwgTDJYMF9BVVhfQ1RSTF9TSEFSRV9PVkVSUklERV9TSElGVCkgfAorCQkJKDEgPDwgTDJYMF9BVVhfQ1RSTF9EQVRBX1BSRUZFVENIX1NISUZUKSB8CisJCQkoMSA8PCBMMlgwX0FVWF9DVFJMX0lOU1RSX1BSRUZFVENIX1NISUZUKSB8CisJCQkoMSA8PCBMMlgwX0FVWF9DVFJMX0VBUkxZX0JSRVNQX1NISUZUKSk7CisJfQorCWlmIChvbWFwX3JldigpICE9IE9NQVA0NDMwX1JFVl9FUzFfMCkKKwkJb21hcF9zbWMxKDB4MTA5LCBhdXhfY3RybCk7CisKKwkvKiBFbmFibGUgUEwzMTAgTDIgQ2FjaGUgY29udHJvbGxlciAqLworCW9tYXBfc21jMSgweDEwMiwgMHgxKTsKKworCWwyeDBfaW5pdChsMmNhY2hlX2Jhc2UsIGF1eF9jdHJsLCBMMlgwX0FVWF9DVFJMX01BU0spOwogCiAJLyoKIAkgKiBPdmVycmlkZSBkZWZhdWx0IG91dGVyX2NhY2hlLmRpc2FibGUgd2l0aCBhIE9NQVA0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jCmluZGV4IDVhMzA2NTguLmUyODJlMzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jCkBAIC0xMTYsNyArMTE2LDYgQEAKICAqIC0gT3BlbiBDb3JlIFByb3RvY29sIFNwZWNpZmljYXRpb24gMi4yCiAgKgogICogVG8gZG86Ci0gKiAtIHBpbiBtdXggaGFuZGxpbmcKICAqIC0gaGFuZGxlIElPIG1hcHBpbmcKICAqIC0gYnVzIHRocm91Z2hwdXQgJiBtb2R1bGUgbGF0ZW5jeSBtZWFzdXJlbWVudCBjb2RlCiAgKgpAQCAtMTM1LDE3ICsxMzQsMjEgQEAKICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogCiAjaW5jbHVkZSA8cGxhdC9jb21tb24uaD4KICNpbmNsdWRlIDxwbGF0L2NwdS5oPgotI2luY2x1ZGUgPHBsYXQvY2xvY2tkb21haW4uaD4KLSNpbmNsdWRlIDxwbGF0L3Bvd2VyZG9tYWluLmg+CisjaW5jbHVkZSAiY2xvY2tkb21haW4uaCIKKyNpbmNsdWRlICJwb3dlcmRvbWFpbi5oIgogI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KICNpbmNsdWRlIDxwbGF0L29tYXBfaHdtb2QuaD4KICNpbmNsdWRlIDxwbGF0L3ByY20uaD4KIAotI2luY2x1ZGUgImNtLmgiCi0jaW5jbHVkZSAicHJtLmgiCisjaW5jbHVkZSAiY20yeHh4XzN4eHguaCIKKyNpbmNsdWRlICJjbTQ0eHguaCIKKyNpbmNsdWRlICJwcm0yeHh4XzN4eHguaCIKKyNpbmNsdWRlICJwcm00NHh4LmgiCisjaW5jbHVkZSAibXV4LmgiCiAKIC8qIE1heGltdW0gbWljcm9zZWNvbmRzIHRvIHdhaXQgZm9yIE9NQVAgbW9kdWxlIHRvIHNvZnRyZXNldCAqLwogI2RlZmluZSBNQVhfTU9EVUxFX1NPRlRSRVNFVF9XQUlUCTEwMDAwCkBAIC0xNTYsOCArMTU5LDYgQEAKIC8qIG9tYXBfaHdtb2RfbGlzdCBjb250YWlucyBhbGwgcmVnaXN0ZXJlZCBzdHJ1Y3Qgb21hcF9od21vZHMgKi8KIHN0YXRpYyBMSVNUX0hFQUQob21hcF9od21vZF9saXN0KTsKIAotc3RhdGljIERFRklORV9NVVRFWChvbWFwX2h3bW9kX211dGV4KTsKLQogLyogbXB1X29oOiB1c2VkIHRvIGFkZC9yZW1vdmUgTVBVIGluaXRpYXRvciBmcm9tIHNsZWVwZGVwIGxpc3QgKi8KIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCAqbXB1X29oOwogCkBAIC0yMDksMTAgKzIxMCw5IEBACiAKIAkvKiBYWFggZW5zdXJlIG1vZHVsZSBpbnRlcmZhY2UgY2xvY2sgaXMgdXAgKi8KIAotCWlmIChvaC0+X3N5c2NfY2FjaGUgIT0gdikgewotCQlvaC0+X3N5c2NfY2FjaGUgPSB2OwotCQlvbWFwX2h3bW9kX3dyaXRlKHYsIG9oLCBvaC0+Y2xhc3MtPnN5c2MtPnN5c2Nfb2Zmcyk7Ci0JfQorCS8qIE1vZHVsZSBtaWdodCBoYXZlIGxvc3QgY29udGV4dCwgYWx3YXlzIHVwZGF0ZSBjYWNoZSBhbmQgcmVnaXN0ZXIgKi8KKwlvaC0+X3N5c2NfY2FjaGUgPSB2OworCW9tYXBfaHdtb2Rfd3JpdGUodiwgb2gsIG9oLT5jbGFzcy0+c3lzYy0+c3lzY19vZmZzKTsKIH0KIAogLyoqCkBAIC0zODgsMTIgKzM4OCwxMyBAQAogICogQWxsb3cgdGhlIGhhcmR3YXJlIG1vZHVsZSBAb2ggdG8gc2VuZCB3YWtldXBzLiAgUmV0dXJucyAtRUlOVkFMCiAgKiB1cG9uIGVycm9yIG9yIDAgdXBvbiBzdWNjZXNzLgogICovCi1zdGF0aWMgaW50IF9lbmFibGVfd2FrZXVwKHN0cnVjdCBvbWFwX2h3bW9kICpvaCkKK3N0YXRpYyBpbnQgX2VuYWJsZV93YWtldXAoc3RydWN0IG9tYXBfaHdtb2QgKm9oLCB1MzIgKnYpCiB7Ci0JdTMyIHYsIHdha2V1cF9tYXNrOworCXUzMiB3YWtldXBfbWFzazsKIAogCWlmICghb2gtPmNsYXNzLT5zeXNjIHx8Ci0JICAgICEob2gtPmNsYXNzLT5zeXNjLT5zeXNjX2ZsYWdzICYgU1lTQ19IQVNfRU5BV0FLRVVQKSkKKwkgICAgISgob2gtPmNsYXNzLT5zeXNjLT5zeXNjX2ZsYWdzICYgU1lTQ19IQVNfRU5BV0FLRVVQKSB8fAorCSAgICAgIChvaC0+Y2xhc3MtPnN5c2MtPmlkbGVtb2RlcyAmIFNJRExFX1NNQVJUX1dLVVApKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoIW9oLT5jbGFzcy0+c3lzYy0+c3lzY19maWVsZHMpIHsKQEAgLTQwMyw5ICs0MDQsMTAgQEAKIAogCXdha2V1cF9tYXNrID0gKDB4MSA8PCBvaC0+Y2xhc3MtPnN5c2MtPnN5c2NfZmllbGRzLT5lbndrdXBfc2hpZnQpOwogCi0JdiA9IG9oLT5fc3lzY19jYWNoZTsKLQl2IHw9IHdha2V1cF9tYXNrOwotCV93cml0ZV9zeXNjb25maWcodiwgb2gpOworCSp2IHw9IHdha2V1cF9tYXNrOworCisJaWYgKG9oLT5jbGFzcy0+c3lzYy0+aWRsZW1vZGVzICYgU0lETEVfU01BUlRfV0tVUCkKKwkJX3NldF9zbGF2ZV9pZGxlbW9kZShvaCwgSFdNT0RfSURMRU1PREVfU01BUlRfV0tVUCwgdik7CiAKIAkvKiBYWFggdGVzdCBwd3JkbV9nZXRfd2tlbiBmb3IgdGhpcyBod21vZCdzIHN1YnN5c3RlbSAqLwogCkBAIC00MjEsMTIgKzQyMywxMyBAQAogICogUHJldmVudCB0aGUgaGFyZHdhcmUgbW9kdWxlIEBvaCB0byBzZW5kIHdha2V1cHMuICBSZXR1cm5zIC1FSU5WQUwKICAqIHVwb24gZXJyb3Igb3IgMCB1cG9uIHN1Y2Nlc3MuCiAgKi8KLXN0YXRpYyBpbnQgX2Rpc2FibGVfd2FrZXVwKHN0cnVjdCBvbWFwX2h3bW9kICpvaCkKK3N0YXRpYyBpbnQgX2Rpc2FibGVfd2FrZXVwKHN0cnVjdCBvbWFwX2h3bW9kICpvaCwgdTMyICp2KQogewotCXUzMiB2LCB3YWtldXBfbWFzazsKKwl1MzIgd2FrZXVwX21hc2s7CiAKIAlpZiAoIW9oLT5jbGFzcy0+c3lzYyB8fAotCSAgICAhKG9oLT5jbGFzcy0+c3lzYy0+c3lzY19mbGFncyAmIFNZU0NfSEFTX0VOQVdBS0VVUCkpCisJICAgICEoKG9oLT5jbGFzcy0+c3lzYy0+c3lzY19mbGFncyAmIFNZU0NfSEFTX0VOQVdBS0VVUCkgfHwKKwkgICAgICAob2gtPmNsYXNzLT5zeXNjLT5pZGxlbW9kZXMgJiBTSURMRV9TTUFSVF9XS1VQKSkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKCFvaC0+Y2xhc3MtPnN5c2MtPnN5c2NfZmllbGRzKSB7CkBAIC00MzYsOSArNDM5LDEwIEBACiAKIAl3YWtldXBfbWFzayA9ICgweDEgPDwgb2gtPmNsYXNzLT5zeXNjLT5zeXNjX2ZpZWxkcy0+ZW53a3VwX3NoaWZ0KTsKIAotCXYgPSBvaC0+X3N5c2NfY2FjaGU7Ci0JdiAmPSB+d2FrZXVwX21hc2s7Ci0JX3dyaXRlX3N5c2NvbmZpZyh2LCBvaCk7CisJKnYgJj0gfndha2V1cF9tYXNrOworCisJaWYgKG9oLT5jbGFzcy0+c3lzYy0+aWRsZW1vZGVzICYgU0lETEVfU01BUlRfV0tVUCkKKwkJX3NldF9zbGF2ZV9pZGxlbW9kZShvaCwgSFdNT0RfSURMRU1PREVfU01BUlQsIHYpOwogCiAJLyogWFhYIHRlc3QgcHdyZG1fZ2V0X3drZW4gZm9yIHRoaXMgaHdtb2QncyBzdWJzeXN0ZW0gKi8KIApAQCAtNjc1LDcgKzY3OSw3IEBACiAgKiBSZXR1cm5zIHRoZSBhcnJheSBpbmRleCBvZiB0aGUgT0NQIHNsYXZlIHBvcnQgdGhhdCB0aGUgTVBVCiAgKiBhZGRyZXNzZXMgdGhlIGRldmljZSBvbiwgb3IgLUVJTlZBTCB1cG9uIGVycm9yIG9yIG5vdCBmb3VuZC4KICAqLwotc3RhdGljIGludCBfZmluZF9tcHVfcG9ydF9pbmRleChzdHJ1Y3Qgb21hcF9od21vZCAqb2gpCitzdGF0aWMgaW50IF9faW5pdCBfZmluZF9tcHVfcG9ydF9pbmRleChzdHJ1Y3Qgb21hcF9od21vZCAqb2gpCiB7CiAJaW50IGk7CiAJaW50IGZvdW5kID0gMDsKQEAgLTcwOSw3ICs3MTMsNyBAQAogICogUmV0dXJuIHRoZSB2aXJ0dWFsIGFkZHJlc3Mgb2YgdGhlIGJhc2Ugb2YgdGhlIHJlZ2lzdGVyIHRhcmdldCBvZgogICogZGV2aWNlIEBvaCwgb3IgTlVMTCBvbiBlcnJvci4KICAqLwotc3RhdGljIHZvaWQgX19pb21lbSAqX2ZpbmRfbXB1X3J0X2Jhc2Uoc3RydWN0IG9tYXBfaHdtb2QgKm9oLCB1OCBpbmRleCkKK3N0YXRpYyB2b2lkIF9faW9tZW0gKiBfX2luaXQgX2ZpbmRfbXB1X3J0X2Jhc2Uoc3RydWN0IG9tYXBfaHdtb2QgKm9oLCB1OCBpbmRleCkKIHsKIAlzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9zOwogCXN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2UgKm1lbTsKQEAgLTc4NiwxMSArNzkwLDExIEBACiAJICAgIChzZiAmIFNZU0NfSEFTX0NMT0NLQUNUSVZJVFkpKQogCQlfc2V0X2Nsb2NrYWN0aXZpdHkob2gsIG9oLT5jbGFzcy0+c3lzYy0+Y2xvY2thY3QsICZ2KTsKIAotCV93cml0ZV9zeXNjb25maWcodiwgb2gpOwotCiAJLyogSWYgc2xhdmUgaXMgaW4gU01BUlRJRExFLCBhbHNvIGVuYWJsZSB3YWtldXAgKi8KIAlpZiAoKHNmICYgU1lTQ19IQVNfU0lETEVNT0RFKSAmJiAhKG9oLT5mbGFncyAmIEhXTU9EX1NXU1VQX1NJRExFKSkKLQkJX2VuYWJsZV93YWtldXAob2gpOworCQlfZW5hYmxlX3dha2V1cChvaCwgJnYpOworCisJX3dyaXRlX3N5c2NvbmZpZyh2LCBvaCk7CiAKIAkvKgogCSAqIFNldCB0aGUgYXV0b2lkbGUgYml0IG9ubHkgYWZ0ZXIgc2V0dGluZyB0aGUgc21hcnRpZGxlIGJpdApAQCAtODM2LDYgKzg0MCwxMCBAQAogCQlfc2V0X21hc3Rlcl9zdGFuZGJ5bW9kZShvaCwgaWRsZW1vZGUsICZ2KTsKIAl9CiAKKwkvKiBJZiBzbGF2ZSBpcyBpbiBTTUFSVElETEUsIGFsc28gZW5hYmxlIHdha2V1cCAqLworCWlmICgoc2YgJiBTWVNDX0hBU19TSURMRU1PREUpICYmICEob2gtPmZsYWdzICYgSFdNT0RfU1dTVVBfU0lETEUpKQorCQlfZW5hYmxlX3dha2V1cChvaCwgJnYpOworCiAJX3dyaXRlX3N5c2NvbmZpZyh2LCBvaCk7CiB9CiAKQEAgLTg3NCw3ICs4ODIsNiBAQAogICogQG5hbWU6IGZpbmQgYW4gb21hcF9od21vZCBieSBuYW1lCiAgKgogICogUmV0dXJuIGEgcG9pbnRlciB0byBhbiBvbWFwX2h3bW9kIGJ5IG5hbWUsIG9yIE5VTEwgaWYgbm90IGZvdW5kLgotICogQ2FsbGVyIG11c3QgaG9sZCBvbWFwX2h3bW9kX211dGV4LgogICovCiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2QgKl9sb29rdXAoY29uc3QgY2hhciAqbmFtZSkKIHsKQEAgLTEwODksNyArMTA5Niw3IEBACiB9CiAKIC8qKgotICogX3Jlc2V0IC0gcmVzZXQgYW4gb21hcF9od21vZAorICogX29jcF9zb2Z0cmVzZXQgLSByZXNldCBhbiBvbWFwX2h3bW9kIHZpYSB0aGUgT0NQX1NZU0NPTkZJRyBiaXQKICAqIEBvaDogc3RydWN0IG9tYXBfaHdtb2QgKgogICoKICAqIFJlc2V0cyBhbiBvbWFwX2h3bW9kIEBvaCB2aWEgdGhlIE9DUF9TWVNDT05GSUcgYml0LiAgaHdtb2QgbXVzdCBiZQpAQCAtMTA5OCwxMiArMTEwNSwxMyBAQAogICogdGhlIG1vZHVsZSBkaWQgbm90IHJlc2V0IGluIHRpbWUsIG9yIDAgdXBvbiBzdWNjZXNzLgogICoKICAqIEluIE9NQVAzIGEgc3BlY2lmaWMgU1lTU1RBVFVTIHJlZ2lzdGVyIGlzIHVzZWQgdG8gZ2V0IHRoZSByZXNldCBzdGF0dXMuCi0gKiBTdGFydGluZyBpbiBPTUFQNCwgc29tZSBJUHMgZG9lcyBub3QgaGF2ZSBTWVNTVEFUVVMgcmVnaXN0ZXIgYW5kIGluc3RlYWQKKyAqIFN0YXJ0aW5nIGluIE9NQVA0LCBzb21lIElQcyBkbyBub3QgaGF2ZSBTWVNTVEFUVVMgcmVnaXN0ZXJzIGFuZCBpbnN0ZWFkCiAgKiB1c2UgdGhlIFNZU0NPTkZJRyBzb2Z0cmVzZXQgYml0IHRvIHByb3ZpZGUgdGhlIHN0YXR1cy4KICAqCi0gKiBOb3RlIHRoYXQgc29tZSBJUCBsaWtlIE1jQlNQIGRvZXMgaGF2ZSBhIHJlc2V0IGNvbnRyb2wgYnV0IG5vIHJlc2V0IHN0YXR1cy4KKyAqIE5vdGUgdGhhdCBzb21lIElQIGxpa2UgTWNCU1AgZG8gaGF2ZSByZXNldCBjb250cm9sIGJ1dCBkb24ndCBoYXZlCisgKiByZXNldCBzdGF0dXMuCiAgKi8KLXN0YXRpYyBpbnQgX3Jlc2V0KHN0cnVjdCBvbWFwX2h3bW9kICpvaCkKK3N0YXRpYyBpbnQgX29jcF9zb2Z0cmVzZXQoc3RydWN0IG9tYXBfaHdtb2QgKm9oKQogewogCXUzMiB2OwogCWludCBjID0gMDsKQEAgLTExMjQsNyArMTEzMiw3IEBACiAJaWYgKG9oLT5mbGFncyAmIEhXTU9EX0NPTlRST0xfT1BUX0NMS1NfSU5fUkVTRVQpCiAJCV9lbmFibGVfb3B0aW9uYWxfY2xvY2tzKG9oKTsKIAotCXByX2RlYnVnKCJvbWFwX2h3bW9kOiAlczogcmVzZXR0aW5nXG4iLCBvaC0+bmFtZSk7CisJcHJfZGVidWcoIm9tYXBfaHdtb2Q6ICVzOiByZXNldHRpbmcgdmlhIE9DUCBTT0ZUUkVTRVRcbiIsIG9oLT5uYW1lKTsKIAogCXYgPSBvaC0+X3N5c2NfY2FjaGU7CiAJcmV0ID0gX3NldF9zb2Z0cmVzZXQob2gsICZ2KTsKQEAgLTExNjQsMTcgKzExNzIsNDEgQEAKIH0KIAogLyoqCi0gKiBfb21hcF9od21vZF9lbmFibGUgLSBlbmFibGUgYW4gb21hcF9od21vZAorICogX3Jlc2V0IC0gcmVzZXQgYW4gb21hcF9od21vZAorICogQG9oOiBzdHJ1Y3Qgb21hcF9od21vZCAqCisgKgorICogUmVzZXRzIGFuIG9tYXBfaHdtb2QgQG9oLiAgVGhlIGRlZmF1bHQgc29mdHdhcmUgcmVzZXQgbWVjaGFuaXNtIGZvcgorICogbW9zdCBPTUFQIElQIGJsb2NrcyBpcyB0cmlnZ2VyZWQgdmlhIHRoZSBPQ1BfU1lTQ09ORklHLlNPRlRSRVNFVAorICogYml0LiAgSG93ZXZlciwgc29tZSBod21vZHMgY2Fubm90IGJlIHJlc2V0IHZpYSB0aGlzIG1ldGhvZDogc29tZQorICogYXJlIG5vdCB0YXJnZXRzIGFuZCB0aGVyZWZvcmUgaGF2ZSBubyBPQ1AgaGVhZGVyIHJlZ2lzdGVycyB0bworICogYWNjZXNzOyBvdGhlcnMgKGxpa2UgdGhlIElWQSkgaGF2ZSBpZGlvc3luY3JhdGljIHJlc2V0IHNlcXVlbmNlcy4KKyAqIFNvIGZvciB0aGVzZSByZWxhdGl2ZWx5IHJhcmUgY2FzZXMsIGN1c3RvbSByZXNldCBjb2RlIGNhbiBiZQorICogc3VwcGxpZWQgaW4gdGhlIHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzIC5yZXNldCBmdW5jdGlvbiBwb2ludGVyLgorICogUGFzc2VzIGFsb25nIHRoZSByZXR1cm4gdmFsdWUgZnJvbSBlaXRoZXIgX3Jlc2V0KCkgb3IgdGhlIGN1c3RvbQorICogcmVzZXQgZnVuY3Rpb24gLSB0aGVzZSBtdXN0IHJldHVybiAtRUlOVkFMIGlmIHRoZSBod21vZCBjYW5ub3QgYmUKKyAqIHJlc2V0IHRoaXMgd2F5IG9yIGlmIHRoZSBod21vZCBpcyBpbiB0aGUgd3Jvbmcgc3RhdGUsIC1FVElNRURPVVQgaWYKKyAqIHRoZSBtb2R1bGUgZGlkIG5vdCByZXNldCBpbiB0aW1lLCBvciAwIHVwb24gc3VjY2Vzcy4KKyAqLworc3RhdGljIGludCBfcmVzZXQoc3RydWN0IG9tYXBfaHdtb2QgKm9oKQoreworCWludCByZXQ7CisKKwlwcl9kZWJ1Zygib21hcF9od21vZDogJXM6IHJlc2V0dGluZ1xuIiwgb2gtPm5hbWUpOworCisJcmV0ID0gKG9oLT5jbGFzcy0+cmVzZXQpID8gb2gtPmNsYXNzLT5yZXNldChvaCkgOiBfb2NwX3NvZnRyZXNldChvaCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIF9lbmFibGUgLSBlbmFibGUgYW4gb21hcF9od21vZAogICogQG9oOiBzdHJ1Y3Qgb21hcF9od21vZCAqCiAgKgogICogRW5hYmxlcyBhbiBvbWFwX2h3bW9kIEBvaCBzdWNoIHRoYXQgdGhlIE1QVSBjYW4gYWNjZXNzIHRoZSBod21vZCdzCi0gKiByZWdpc3RlciB0YXJnZXQuICAoVGhpcyBmdW5jdGlvbiBoYXMgYSBmdWxsIG5hbWUgLS0KLSAqIF9vbWFwX2h3bW9kX2VuYWJsZSgpIHJhdGhlciB0aGFuIHNpbXBseSBfZW5hYmxlKCkgLS0gYmVjYXVzZSBpdCBpcwotICogY3VycmVudGx5IHJlcXVpcmVkIGJ5IHRoZSBwbTM0eHguYyBpZGxlIGxvb3AuKSAgUmV0dXJucyAtRUlOVkFMIGlmCi0gKiB0aGUgaHdtb2QgaXMgaW4gdGhlIHdyb25nIHN0YXRlIG9yIHBhc3NlcyBhbG9uZyB0aGUgcmV0dXJuIHZhbHVlIG9mCi0gKiBfd2FpdF90YXJnZXRfcmVhZHkoKS4KKyAqIHJlZ2lzdGVyIHRhcmdldC4gIFJldHVybnMgLUVJTlZBTCBpZiB0aGUgaHdtb2QgaXMgaW4gdGhlIHdyb25nCisgKiBzdGF0ZSBvciBwYXNzZXMgYWxvbmcgdGhlIHJldHVybiB2YWx1ZSBvZiBfd2FpdF90YXJnZXRfcmVhZHkoKS4KICAqLwotaW50IF9vbWFwX2h3bW9kX2VuYWJsZShzdHJ1Y3Qgb21hcF9od21vZCAqb2gpCitzdGF0aWMgaW50IF9lbmFibGUoc3RydWN0IG9tYXBfaHdtb2QgKm9oKQogewogCWludCByOwogCkBAIC0xMTk3LDcgKzEyMjksOSBAQAogCSAgICAgb2gtPl9zdGF0ZSA9PSBfSFdNT0RfU1RBVEVfRElTQUJMRUQpICYmIG9oLT5yc3RfbGluZXNfY250ID09IDEpCiAJCV9kZWFzc2VydF9oYXJkcmVzZXQob2gsIG9oLT5yc3RfbGluZXNbMF0ubmFtZSk7CiAKLQkvKiBYWFggbXV4IGJhbGxzICovCisJLyogTXV4IHBpbnMgZm9yIGRldmljZSBydW50aW1lIGlmIHBvcHVsYXRlZCAqLworCWlmIChvaC0+bXV4KQorCQlvbWFwX2h3bW9kX211eChvaC0+bXV4LCBfSFdNT0RfU1RBVEVfRU5BQkxFRCk7CiAKIAlfYWRkX2luaXRpYXRvcl9kZXAob2gsIG1wdV9vaCk7CiAJX2VuYWJsZV9jbG9ja3Mob2gpOwpAQCAtMTIxMyw2ICsxMjQ3LDcgQEAKIAkJCV9lbmFibGVfc3lzYyhvaCk7CiAJCX0KIAl9IGVsc2UgeworCQlfZGlzYWJsZV9jbG9ja3Mob2gpOwogCQlwcl9kZWJ1Zygib21hcF9od21vZDogJXM6IF93YWl0X3RhcmdldF9yZWFkeTogJWRcbiIsCiAJCQkgb2gtPm5hbWUsIHIpOwogCX0KQEAgLTEyMjEsMTYgKzEyNTYsMTQgQEAKIH0KIAogLyoqCi0gKiBfb21hcF9od21vZF9pZGxlIC0gaWRsZSBhbiBvbWFwX2h3bW9kCisgKiBfaWRsZSAtIGlkbGUgYW4gb21hcF9od21vZAogICogQG9oOiBzdHJ1Y3Qgb21hcF9od21vZCAqCiAgKgogICogSWRsZXMgYW4gb21hcF9od21vZCBAb2guICBUaGlzIHNob3VsZCBiZSBjYWxsZWQgb25jZSB0aGUgaHdtb2QgaGFzCi0gKiBubyBmdXJ0aGVyIHdvcmsuICAoVGhpcyBmdW5jdGlvbiBoYXMgYSBmdWxsIG5hbWUgLS0KLSAqIF9vbWFwX2h3bW9kX2lkbGUoKSByYXRoZXIgdGhhbiBzaW1wbHkgX2lkbGUoKSAtLSBiZWNhdXNlIGl0IGlzCi0gKiBjdXJyZW50bHkgcmVxdWlyZWQgYnkgdGhlIHBtMzR4eC5jIGlkbGUgbG9vcC4pICBSZXR1cm5zIC1FSU5WQUwgaWYKLSAqIHRoZSBod21vZCBpcyBpbiB0aGUgd3Jvbmcgc3RhdGUgb3IgcmV0dXJucyAwLgorICogbm8gZnVydGhlciB3b3JrLiAgUmV0dXJucyAtRUlOVkFMIGlmIHRoZSBod21vZCBpcyBpbiB0aGUgd3JvbmcKKyAqIHN0YXRlIG9yIHJldHVybnMgMC4KICAqLwotaW50IF9vbWFwX2h3bW9kX2lkbGUoc3RydWN0IG9tYXBfaHdtb2QgKm9oKQorc3RhdGljIGludCBfaWRsZShzdHJ1Y3Qgb21hcF9od21vZCAqb2gpCiB7CiAJaWYgKG9oLT5fc3RhdGUgIT0gX0hXTU9EX1NUQVRFX0VOQUJMRUQpIHsKIAkJV0FSTigxLCAib21hcF9od21vZDogJXM6IGlkbGUgc3RhdGUgY2FuIG9ubHkgYmUgZW50ZXJlZCBmcm9tICIKQEAgLTEyNDUsNiArMTI3OCwxMCBAQAogCV9kZWxfaW5pdGlhdG9yX2RlcChvaCwgbXB1X29oKTsKIAlfZGlzYWJsZV9jbG9ja3Mob2gpOwogCisJLyogTXV4IHBpbnMgZm9yIGRldmljZSBpZGxlIGlmIHBvcHVsYXRlZCAqLworCWlmIChvaC0+bXV4KQorCQlvbWFwX2h3bW9kX211eChvaC0+bXV4LCBfSFdNT0RfU1RBVEVfSURMRSk7CisKIAlvaC0+X3N0YXRlID0gX0hXTU9EX1NUQVRFX0lETEU7CiAKIAlyZXR1cm4gMDsKQEAgLTEyNjEsNiArMTI5OCw5IEBACiAgKi8KIHN0YXRpYyBpbnQgX3NodXRkb3duKHN0cnVjdCBvbWFwX2h3bW9kICpvaCkKIHsKKwlpbnQgcmV0OworCXU4IHByZXZfc3RhdGU7CisKIAlpZiAob2gtPl9zdGF0ZSAhPSBfSFdNT0RfU1RBVEVfSURMRSAmJgogCSAgICBvaC0+X3N0YXRlICE9IF9IV01PRF9TVEFURV9FTkFCTEVEKSB7CiAJCVdBUk4oMSwgIm9tYXBfaHdtb2Q6ICVzOiBkaXNhYmxlZCBzdGF0ZSBjYW4gb25seSBiZSBlbnRlcmVkICIKQEAgLTEyNzAsNiArMTMxMCwxOCBAQAogCiAJcHJfZGVidWcoIm9tYXBfaHdtb2Q6ICVzOiBkaXNhYmxpbmdcbiIsIG9oLT5uYW1lKTsKIAorCWlmIChvaC0+Y2xhc3MtPnByZV9zaHV0ZG93bikgeworCQlwcmV2X3N0YXRlID0gb2gtPl9zdGF0ZTsKKwkJaWYgKG9oLT5fc3RhdGUgPT0gX0hXTU9EX1NUQVRFX0lETEUpCisJCQlfZW5hYmxlKG9oKTsKKwkJcmV0ID0gb2gtPmNsYXNzLT5wcmVfc2h1dGRvd24ob2gpOworCQlpZiAocmV0KSB7CisJCQlpZiAocHJldl9zdGF0ZSA9PSBfSFdNT0RfU1RBVEVfSURMRSkKKwkJCQlfaWRsZShvaCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCiAJaWYgKG9oLT5jbGFzcy0+c3lzYykKIAkJX3NodXRkb3duX3N5c2Mob2gpOwogCkBAIC0xMjg4LDcgKzEzNDAsOSBAQAogCX0KIAkvKiBYWFggU2hvdWxkIHRoaXMgY29kZSBhbHNvIGZvcmNlLWRpc2FibGUgdGhlIG9wdGlvbmFsIGNsb2Nrcz8gKi8KIAotCS8qIFhYWCBtdXggYW55IGFzc29jaWF0ZWQgYmFsbHMgdG8gc2FmZSBtb2RlICovCisJLyogTXV4IHBpbnMgdG8gc2FmZSBtb2RlIG9yIHVzZSBwb3B1bGF0ZWQgb2ZmIG1vZGUgdmFsdWVzICovCisJaWYgKG9oLT5tdXgpCisJCW9tYXBfaHdtb2RfbXV4KG9oLT5tdXgsIF9IV01PRF9TVEFURV9ESVNBQkxFRCk7CiAKIAlvaC0+X3N0YXRlID0gX0hXTU9EX1NUQVRFX0RJU0FCTEVEOwogCkBAIC0xMjk4LDIzICsxMzUyLDE1IEBACiAvKioKICAqIF9zZXR1cCAtIGRvIGluaXRpYWwgY29uZmlndXJhdGlvbiBvZiBvbWFwX2h3bW9kCiAgKiBAb2g6IHN0cnVjdCBvbWFwX2h3bW9kICoKLSAqIEBza2lwX3NldHVwX2lkbGVfcDogZG8gbm90IGlkbGUgaHdtb2RzIGF0IHRoZSBlbmQgb2YgdGhlIGZuIGlmIDEKICAqCiAgKiBXcml0ZXMgdGhlIENMT0NLQUNUSVZJVFkgYml0cyBAY2xvY2thY3QgdG8gdGhlIGh3bW9kIEBvaAotICogT0NQX1NZU0NPTkZJRyByZWdpc3Rlci4gIEBza2lwX3NldHVwX2lkbGUgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBvbgotICogYSBzeXN0ZW0gdGhhdCB3aWxsIG5vdCBjYWxsIG9tYXBfaHdtb2RfZW5hYmxlKCkgdG8gZW5hYmxlIGRldmljZXMKLSAqIChlLmcuLCBhIHN5c3RlbSB3aXRob3V0IFBNIHJ1bnRpbWUpLiAgUmV0dXJucyAtRUlOVkFMIGlmIHRoZSBod21vZAotICogaXMgaW4gdGhlIHdyb25nIHN0YXRlIG9yIHJldHVybnMgMC4KKyAqIE9DUF9TWVNDT05GSUcgcmVnaXN0ZXIuICBSZXR1cm5zIC1FSU5WQUwgaWYgdGhlIGh3bW9kIGlzIGluIHRoZQorICogd3Jvbmcgc3RhdGUgb3IgcmV0dXJucyAwLgogICovCiBzdGF0aWMgaW50IF9zZXR1cChzdHJ1Y3Qgb21hcF9od21vZCAqb2gsIHZvaWQgKmRhdGEpCiB7CiAJaW50IGksIHI7Ci0JdTggc2tpcF9zZXR1cF9pZGxlOwotCi0JaWYgKCFvaCB8fCAhZGF0YSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlza2lwX3NldHVwX2lkbGUgPSAqKHU4ICopZGF0YTsKKwl1OCBwb3N0c2V0dXBfc3RhdGU7CiAKIAkvKiBTZXQgaWNsayBhdXRvaWRsZSBtb2RlICovCiAJaWYgKG9oLT5zbGF2ZXNfY250ID4gMCkgewpAQCAtMTMzNCw3ICsxMzgwLDYgQEAKIAkJfQogCX0KIAotCW11dGV4X2luaXQoJm9oLT5fbXV0ZXgpOwogCW9oLT5fc3RhdGUgPSBfSFdNT0RfU1RBVEVfSU5JVElBTElaRUQ7CiAKIAkvKgpAQCAtMTM0Nyw3ICsxMzkyLDcgQEAKIAlpZiAoKG9oLT5mbGFncyAmIEhXTU9EX0lOSVRfTk9fUkVTRVQpICYmIG9oLT5yc3RfbGluZXNfY250ID09IDEpCiAJCXJldHVybiAwOwogCi0JciA9IF9vbWFwX2h3bW9kX2VuYWJsZShvaCk7CisJciA9IF9lbmFibGUob2gpOwogCWlmIChyKSB7CiAJCXByX3dhcm5pbmcoIm9tYXBfaHdtb2Q6ICVzOiBjYW5ub3QgYmUgZW5hYmxlZCAoJWQpXG4iLAogCQkJICAgb2gtPm5hbWUsIG9oLT5fc3RhdGUpOwpAQCAtMTM1OSw3ICsxNDA0LDcgQEAKIAogCQkvKgogCQkgKiBPQ1BfU1lTQ09ORklHIGJpdHMgbmVlZCB0byBiZSByZXByb2dyYW1tZWQgYWZ0ZXIgYSBzb2Z0cmVzZXQuCi0JCSAqIFRoZSBfb21hcF9od21vZF9lbmFibGUoKSBmdW5jdGlvbiBzaG91bGQgYmUgc3BsaXQgdG8KKwkJICogVGhlIF9lbmFibGUoKSBmdW5jdGlvbiBzaG91bGQgYmUgc3BsaXQgdG8KIAkJICogYXZvaWQgdGhlIHJld3JpdGUgb2YgdGhlIE9DUF9TWVNDT05GSUcgcmVnaXN0ZXIuCiAJCSAqLwogCQlpZiAob2gtPmNsYXNzLT5zeXNjKSB7CkBAIC0xMzY4LDEyICsxNDEzLDc3IEBACiAJCX0KIAl9CiAKLQlpZiAoIShvaC0+ZmxhZ3MgJiBIV01PRF9JTklUX05PX0lETEUpICYmICFza2lwX3NldHVwX2lkbGUpCi0JCV9vbWFwX2h3bW9kX2lkbGUob2gpOworCXBvc3RzZXR1cF9zdGF0ZSA9IG9oLT5fcG9zdHNldHVwX3N0YXRlOworCWlmIChwb3N0c2V0dXBfc3RhdGUgPT0gX0hXTU9EX1NUQVRFX1VOS05PV04pCisJCXBvc3RzZXR1cF9zdGF0ZSA9IF9IV01PRF9TVEFURV9FTkFCTEVEOworCisJLyoKKwkgKiBYWFggSFdNT0RfSU5JVF9OT19JRExFIGRvZXMgbm90IGJlbG9uZyBpbiBod21vZCBkYXRhIC0KKwkgKiBpdCBzaG91bGQgYmUgc2V0IGJ5IHRoZSBjb3JlIGNvZGUgYXMgYSBydW50aW1lIGZsYWcgZHVyaW5nIHN0YXJ0dXAKKwkgKi8KKwlpZiAoKG9oLT5mbGFncyAmIEhXTU9EX0lOSVRfTk9fSURMRSkgJiYKKwkgICAgKHBvc3RzZXR1cF9zdGF0ZSA9PSBfSFdNT0RfU1RBVEVfSURMRSkpCisJCXBvc3RzZXR1cF9zdGF0ZSA9IF9IV01PRF9TVEFURV9FTkFCTEVEOworCisJaWYgKHBvc3RzZXR1cF9zdGF0ZSA9PSBfSFdNT0RfU1RBVEVfSURMRSkKKwkJX2lkbGUob2gpOworCWVsc2UgaWYgKHBvc3RzZXR1cF9zdGF0ZSA9PSBfSFdNT0RfU1RBVEVfRElTQUJMRUQpCisJCV9zaHV0ZG93bihvaCk7CisJZWxzZSBpZiAocG9zdHNldHVwX3N0YXRlICE9IF9IV01PRF9TVEFURV9FTkFCTEVEKQorCQlXQVJOKDEsICJod21vZDogJXM6IHVua25vd24gcG9zdHNldHVwIHN0YXRlICVkISBkZWZhdWx0aW5nIHRvIGVuYWJsZWRcbiIsCisJCSAgICAgb2gtPm5hbWUsIHBvc3RzZXR1cF9zdGF0ZSk7CiAKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKiBfcmVnaXN0ZXIgLSByZWdpc3RlciBhIHN0cnVjdCBvbWFwX2h3bW9kCisgKiBAb2g6IHN0cnVjdCBvbWFwX2h3bW9kICoKKyAqCisgKiBSZWdpc3RlcnMgdGhlIG9tYXBfaHdtb2QgQG9oLiAgUmV0dXJucyAtRUVYSVNUIGlmIGFuIG9tYXBfaHdtb2QKKyAqIGFscmVhZHkgaGFzIGJlZW4gcmVnaXN0ZXJlZCBieSB0aGUgc2FtZSBuYW1lOyAtRUlOVkFMIGlmIHRoZQorICogb21hcF9od21vZCBpcyBpbiB0aGUgd3Jvbmcgc3RhdGUsIGlmIEBvaCBpcyBOVUxMLCBpZiB0aGUKKyAqIG9tYXBfaHdtb2QncyBjbGFzcyBmaWVsZCBpcyBOVUxMOyBpZiB0aGUgb21hcF9od21vZCBpcyBtaXNzaW5nIGEKKyAqIG5hbWUsIG9yIGlmIHRoZSBvbWFwX2h3bW9kJ3MgY2xhc3MgaXMgbWlzc2luZyBhIG5hbWU7IG9yIDAgdXBvbgorICogc3VjY2Vzcy4KKyAqCisgKiBYWFggVGhlIGRhdGEgc2hvdWxkIGJlIGNvcGllZCBpbnRvIGJvb3RtZW0sIHNvIHRoZSBvcmlnaW5hbCBkYXRhCisgKiBzaG91bGQgYmUgbWFya2VkIF9faW5pdGRhdGEgYW5kIGZyZWVkIGFmdGVyIGluaXQuICBUaGlzIHdvdWxkIGFsbG93CisgKiB1bm5lZWRlZCBvbWFwX2h3bW9kcyB0byBiZSBmcmVlZCBvbiBtdWx0aS1PTUFQIGNvbmZpZ3VyYXRpb25zLiAgTm90ZQorICogdGhhdCB0aGUgY29weSBwcm9jZXNzIHdvdWxkIGJlIHJlbGF0aXZlbHkgY29tcGxleCBkdWUgdG8gdGhlIGxhcmdlIG51bWJlcgorICogb2Ygc3Vic3RydWN0dXJlcy4KKyAqLworc3RhdGljIGludCBfX2luaXQgX3JlZ2lzdGVyKHN0cnVjdCBvbWFwX2h3bW9kICpvaCkKK3sKKwlpbnQgcmV0LCBtc19pZDsKKworCWlmICghb2ggfHwgIW9oLT5uYW1lIHx8ICFvaC0+Y2xhc3MgfHwgIW9oLT5jbGFzcy0+bmFtZSB8fAorCSAgICAob2gtPl9zdGF0ZSAhPSBfSFdNT0RfU1RBVEVfVU5LTk9XTikpCisJCXJldHVybiAtRUlOVkFMOworCisJcHJfZGVidWcoIm9tYXBfaHdtb2Q6ICVzOiByZWdpc3RlcmluZ1xuIiwgb2gtPm5hbWUpOworCisJaWYgKF9sb29rdXAob2gtPm5hbWUpKQorCQlyZXR1cm4gLUVFWElTVDsKKworCW1zX2lkID0gX2ZpbmRfbXB1X3BvcnRfaW5kZXgob2gpOworCWlmICghSVNfRVJSX1ZBTFVFKG1zX2lkKSkgeworCQlvaC0+X21wdV9wb3J0X2luZGV4ID0gbXNfaWQ7CisJCW9oLT5fbXB1X3J0X3ZhID0gX2ZpbmRfbXB1X3J0X2Jhc2Uob2gsIG9oLT5fbXB1X3BvcnRfaW5kZXgpOworCX0gZWxzZSB7CisJCW9oLT5faW50X2ZsYWdzIHw9IF9IV01PRF9OT19NUFVfUE9SVDsKKwl9CisKKwlsaXN0X2FkZF90YWlsKCZvaC0+bm9kZSwgJm9tYXBfaHdtb2RfbGlzdCk7CisKKwlzcGluX2xvY2tfaW5pdCgmb2gtPl9sb2NrKTsKKworCW9oLT5fc3RhdGUgPSBfSFdNT0RfU1RBVEVfUkVHSVNURVJFRDsKKworCXJldCA9IDA7CisKKwlyZXR1cm4gcmV0OworfQogCiAKIC8qIFB1YmxpYyBmdW5jdGlvbnMgKi8KQEAgLTE0MjcsNTkgKzE1MzcsNiBAQAogfQogCiAvKioKLSAqIG9tYXBfaHdtb2RfcmVnaXN0ZXIgLSByZWdpc3RlciBhIHN0cnVjdCBvbWFwX2h3bW9kCi0gKiBAb2g6IHN0cnVjdCBvbWFwX2h3bW9kICoKLSAqCi0gKiBSZWdpc3RlcnMgdGhlIG9tYXBfaHdtb2QgQG9oLiAgUmV0dXJucyAtRUVYSVNUIGlmIGFuIG9tYXBfaHdtb2QKLSAqIGFscmVhZHkgaGFzIGJlZW4gcmVnaXN0ZXJlZCBieSB0aGUgc2FtZSBuYW1lOyAtRUlOVkFMIGlmIHRoZQotICogb21hcF9od21vZCBpcyBpbiB0aGUgd3Jvbmcgc3RhdGUsIGlmIEBvaCBpcyBOVUxMLCBpZiB0aGUKLSAqIG9tYXBfaHdtb2QncyBjbGFzcyBmaWVsZCBpcyBOVUxMOyBpZiB0aGUgb21hcF9od21vZCBpcyBtaXNzaW5nIGEKLSAqIG5hbWUsIG9yIGlmIHRoZSBvbWFwX2h3bW9kJ3MgY2xhc3MgaXMgbWlzc2luZyBhIG5hbWU7IG9yIDAgdXBvbgotICogc3VjY2Vzcy4KLSAqCi0gKiBYWFggVGhlIGRhdGEgc2hvdWxkIGJlIGNvcGllZCBpbnRvIGJvb3RtZW0sIHNvIHRoZSBvcmlnaW5hbCBkYXRhCi0gKiBzaG91bGQgYmUgbWFya2VkIF9faW5pdGRhdGEgYW5kIGZyZWVkIGFmdGVyIGluaXQuICBUaGlzIHdvdWxkIGFsbG93Ci0gKiB1bm5lZWRlZCBvbWFwX2h3bW9kcyB0byBiZSBmcmVlZCBvbiBtdWx0aS1PTUFQIGNvbmZpZ3VyYXRpb25zLiAgTm90ZQotICogdGhhdCB0aGUgY29weSBwcm9jZXNzIHdvdWxkIGJlIHJlbGF0aXZlbHkgY29tcGxleCBkdWUgdG8gdGhlIGxhcmdlIG51bWJlcgotICogb2Ygc3Vic3RydWN0dXJlcy4KLSAqLwotaW50IG9tYXBfaHdtb2RfcmVnaXN0ZXIoc3RydWN0IG9tYXBfaHdtb2QgKm9oKQotewotCWludCByZXQsIG1zX2lkOwotCi0JaWYgKCFvaCB8fCAhb2gtPm5hbWUgfHwgIW9oLT5jbGFzcyB8fCAhb2gtPmNsYXNzLT5uYW1lIHx8Ci0JICAgIChvaC0+X3N0YXRlICE9IF9IV01PRF9TVEFURV9VTktOT1dOKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQltdXRleF9sb2NrKCZvbWFwX2h3bW9kX211dGV4KTsKLQotCXByX2RlYnVnKCJvbWFwX2h3bW9kOiAlczogcmVnaXN0ZXJpbmdcbiIsIG9oLT5uYW1lKTsKLQotCWlmIChfbG9va3VwKG9oLT5uYW1lKSkgewotCQlyZXQgPSAtRUVYSVNUOwotCQlnb3RvIG9ocl91bmxvY2s7Ci0JfQotCi0JbXNfaWQgPSBfZmluZF9tcHVfcG9ydF9pbmRleChvaCk7Ci0JaWYgKCFJU19FUlJfVkFMVUUobXNfaWQpKSB7Ci0JCW9oLT5fbXB1X3BvcnRfaW5kZXggPSBtc19pZDsKLQkJb2gtPl9tcHVfcnRfdmEgPSBfZmluZF9tcHVfcnRfYmFzZShvaCwgb2gtPl9tcHVfcG9ydF9pbmRleCk7Ci0JfSBlbHNlIHsKLQkJb2gtPl9pbnRfZmxhZ3MgfD0gX0hXTU9EX05PX01QVV9QT1JUOwotCX0KLQotCWxpc3RfYWRkX3RhaWwoJm9oLT5ub2RlLCAmb21hcF9od21vZF9saXN0KTsKLQotCW9oLT5fc3RhdGUgPSBfSFdNT0RfU1RBVEVfUkVHSVNURVJFRDsKLQotCXJldCA9IDA7Ci0KLW9ocl91bmxvY2s6Ci0JbXV0ZXhfdW5sb2NrKCZvbWFwX2h3bW9kX211dGV4KTsKLQlyZXR1cm4gcmV0OwotfQotCi0vKioKICAqIG9tYXBfaHdtb2RfbG9va3VwIC0gbG9vayB1cCBhIHJlZ2lzdGVyZWQgb21hcF9od21vZCBieSBuYW1lCiAgKiBAbmFtZTogbmFtZSBvZiB0aGUgb21hcF9od21vZCB0byBsb29rIHVwCiAgKgpAQCAtMTQ5Myw5ICsxNTUwLDcgQEAKIAlpZiAoIW5hbWUpCiAJCXJldHVybiBOVUxMOwogCi0JbXV0ZXhfbG9jaygmb21hcF9od21vZF9tdXRleCk7CiAJb2ggPSBfbG9va3VwKG5hbWUpOwotCW11dGV4X3VubG9jaygmb21hcF9od21vZF9tdXRleCk7CiAKIAlyZXR1cm4gb2g7CiB9CkBAIC0xNTIxLDEzICsxNTc2LDExIEBACiAJaWYgKCFmbikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQltdXRleF9sb2NrKCZvbWFwX2h3bW9kX211dGV4KTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRlbXBfb2gsICZvbWFwX2h3bW9kX2xpc3QsIG5vZGUpIHsKIAkJcmV0ID0gKCpmbikodGVtcF9vaCwgZGF0YSk7CiAJCWlmIChyZXQpCiAJCQlicmVhazsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZvbWFwX2h3bW9kX211dGV4KTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xNTQyLDcgKzE1OTUsNyBAQAogICogbGlzdGVkIGluIEBvaHMgdGhhdCBhcmUgdmFsaWQgZm9yIHRoaXMgY2hpcC4gIFJldHVybnMgLUVJTlZBTCBpZgogICogb21hcF9od21vZF9pbml0KCkgaGFzIGFscmVhZHkgYmVlbiBjYWxsZWQgb3IgMCBvdGhlcndpc2UuCiAgKi8KLWludCBvbWFwX2h3bW9kX2luaXQoc3RydWN0IG9tYXBfaHdtb2QgKipvaHMpCitpbnQgX19pbml0IG9tYXBfaHdtb2RfaW5pdChzdHJ1Y3Qgb21hcF9od21vZCAqKm9ocykKIHsKIAlzdHJ1Y3Qgb21hcF9od21vZCAqb2g7CiAJaW50IHI7CkBAIC0xNTU4LDggKzE2MTEsOCBAQAogCW9oID0gKm9oczsKIAl3aGlsZSAob2gpIHsKIAkJaWYgKG9tYXBfY2hpcF9pcyhvaC0+b21hcF9jaGlwKSkgewotCQkJciA9IG9tYXBfaHdtb2RfcmVnaXN0ZXIob2gpOwotCQkJV0FSTihyLCAib21hcF9od21vZDogJXM6IG9tYXBfaHdtb2RfcmVnaXN0ZXIgcmV0dXJuZWQgIgorCQkJciA9IF9yZWdpc3RlcihvaCk7CisJCQlXQVJOKHIsICJvbWFwX2h3bW9kOiAlczogX3JlZ2lzdGVyIHJldHVybmVkICIKIAkJCSAgICAgIiVkXG4iLCBvaC0+bmFtZSwgcik7CiAJCX0KIAkJb2ggPSAqKytvaHM7CkBAIC0xNTcwLDEzICsxNjIzLDEyIEBACiAKIC8qKgogICogb21hcF9od21vZF9sYXRlX2luaXQgLSBkbyBzb21lIHBvc3QtY2xvY2sgZnJhbWV3b3JrIGluaXRpYWxpemF0aW9uCi0gKiBAc2tpcF9zZXR1cF9pZGxlOiBpZiAxLCBkbyBub3QgaWRsZSBod21vZHMgaW4gX3NldHVwKCkKICAqCiAgKiBNdXN0IGJlIGNhbGxlZCBhZnRlciBvbWFwMl9jbGtfaW5pdCgpLiAgUmVzb2x2ZXMgdGhlIHN0cnVjdCBjbGsgbmFtZXMKICAqIHRvIHN0cnVjdCBjbGsgcG9pbnRlcnMgZm9yIGVhY2ggcmVnaXN0ZXJlZCBvbWFwX2h3bW9kLiAgQWxzbyBjYWxscwogICogX3NldHVwKCkgb24gZWFjaCBod21vZC4gIFJldHVybnMgMC4KICAqLwotaW50IG9tYXBfaHdtb2RfbGF0ZV9pbml0KHU4IHNraXBfc2V0dXBfaWRsZSkKK2ludCBvbWFwX2h3bW9kX2xhdGVfaW5pdCh2b2lkKQogewogCWludCByOwogCkBAIC0xNTg4LDM2ICsxNjQwLDcgQEAKIAlXQVJOKCFtcHVfb2gsICJvbWFwX2h3bW9kOiBjb3VsZCBub3QgZmluZCBNUFUgaW5pdGlhdG9yIGh3bW9kICVzXG4iLAogCSAgICAgTVBVX0lOSVRJQVRPUl9OQU1FKTsKIAotCWlmIChza2lwX3NldHVwX2lkbGUpCi0JCXByX2RlYnVnKCJvbWFwX2h3bW9kOiB3aWxsIGxlYXZlIGh3bW9kcyBlbmFibGVkIGR1cmluZyBzZXR1cFxuIik7Ci0KLQlvbWFwX2h3bW9kX2Zvcl9lYWNoKF9zZXR1cCwgJnNraXBfc2V0dXBfaWRsZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBvbWFwX2h3bW9kX3VucmVnaXN0ZXIgLSB1bnJlZ2lzdGVyIGFuIG9tYXBfaHdtb2QKLSAqIEBvaDogc3RydWN0IG9tYXBfaHdtb2QgKgotICoKLSAqIFVucmVnaXN0ZXJzIGEgcHJldmlvdXNseS1yZWdpc3RlcmVkIG9tYXBfaHdtb2QgQG9oLiAgVGhlcmUncyBwcm9iYWJseQotICogbm8gdXNlIGNhc2UgZm9yIHRoaXMsIHNvIGl0IGlzIGxpa2VseSB0byBiZSByZW1vdmVkIGluIGEgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBYWFggRnJlZSBhbGwgb2YgdGhlIGJvb3RtZW0tYWxsb2NhdGVkIHN0cnVjdHVyZXMgaGVyZSB3aGVuIHRoYXQgaXMKLSAqIGltcGxlbWVudGVkLiAgTWFrZSBpdCBjbGVhciB0aGF0IGNvcmUgY29kZSBpcyB0aGUgb25seSBjb2RlIHRoYXQgaXMKLSAqIGV4cGVjdGVkIHRvIHVucmVnaXN0ZXIgbW9kdWxlcy4KLSAqLwotaW50IG9tYXBfaHdtb2RfdW5yZWdpc3RlcihzdHJ1Y3Qgb21hcF9od21vZCAqb2gpCi17Ci0JaWYgKCFvaCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlwcl9kZWJ1Zygib21hcF9od21vZDogJXM6IHVucmVnaXN0ZXJpbmdcbiIsIG9oLT5uYW1lKTsKLQotCW11dGV4X2xvY2soJm9tYXBfaHdtb2RfbXV0ZXgpOwotCWlvdW5tYXAob2gtPl9tcHVfcnRfdmEpOwotCWxpc3RfZGVsKCZvaC0+bm9kZSk7Ci0JbXV0ZXhfdW5sb2NrKCZvbWFwX2h3bW9kX211dGV4KTsKKwlvbWFwX2h3bW9kX2Zvcl9lYWNoKF9zZXR1cCwgTlVMTCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE2MzIsMTggKzE2NTUsMTggQEAKIGludCBvbWFwX2h3bW9kX2VuYWJsZShzdHJ1Y3Qgb21hcF9od21vZCAqb2gpCiB7CiAJaW50IHI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmICghb2gpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JbXV0ZXhfbG9jaygmb2gtPl9tdXRleCk7Ci0JciA9IF9vbWFwX2h3bW9kX2VuYWJsZShvaCk7Ci0JbXV0ZXhfdW5sb2NrKCZvaC0+X211dGV4KTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmb2gtPl9sb2NrLCBmbGFncyk7CisJciA9IF9lbmFibGUob2gpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9oLT5fbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIHI7CiB9CiAKLQogLyoqCiAgKiBvbWFwX2h3bW9kX2lkbGUgLSBpZGxlIGFuIG9tYXBfaHdtb2QKICAqIEBvaDogc3RydWN0IG9tYXBfaHdtb2QgKgpAQCAtMTY1MywxMiArMTY3NiwxNCBAQAogICovCiBpbnQgb21hcF9od21vZF9pZGxlKHN0cnVjdCBvbWFwX2h3bW9kICpvaCkKIHsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCiAJaWYgKCFvaCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQltdXRleF9sb2NrKCZvaC0+X211dGV4KTsKLQlfb21hcF9od21vZF9pZGxlKG9oKTsKLQltdXRleF91bmxvY2soJm9oLT5fbXV0ZXgpOworCXNwaW5fbG9ja19pcnFzYXZlKCZvaC0+X2xvY2ssIGZsYWdzKTsKKwlfaWRsZShvaCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb2gtPl9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE2NzMsMTIgKzE2OTgsMTQgQEAKICAqLwogaW50IG9tYXBfaHdtb2Rfc2h1dGRvd24oc3RydWN0IG9tYXBfaHdtb2QgKm9oKQogeworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKIAlpZiAoIW9oKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCW11dGV4X2xvY2soJm9oLT5fbXV0ZXgpOworCXNwaW5fbG9ja19pcnFzYXZlKCZvaC0+X2xvY2ssIGZsYWdzKTsKIAlfc2h1dGRvd24ob2gpOwotCW11dGV4X3VubG9jaygmb2gtPl9tdXRleCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb2gtPl9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE2OTEsOSArMTcxOCwxMSBAQAogICovCiBpbnQgb21hcF9od21vZF9lbmFibGVfY2xvY2tzKHN0cnVjdCBvbWFwX2h3bW9kICpvaCkKIHsKLQltdXRleF9sb2NrKCZvaC0+X211dGV4KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm9oLT5fbG9jaywgZmxhZ3MpOwogCV9lbmFibGVfY2xvY2tzKG9oKTsKLQltdXRleF91bmxvY2soJm9oLT5fbXV0ZXgpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9oLT5fbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNzA2LDkgKzE3MzUsMTEgQEAKICAqLwogaW50IG9tYXBfaHdtb2RfZGlzYWJsZV9jbG9ja3Moc3RydWN0IG9tYXBfaHdtb2QgKm9oKQogewotCW11dGV4X2xvY2soJm9oLT5fbXV0ZXgpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmb2gtPl9sb2NrLCBmbGFncyk7CiAJX2Rpc2FibGVfY2xvY2tzKG9oKTsKLQltdXRleF91bmxvY2soJm9oLT5fbXV0ZXgpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9oLT5fbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNzUyLDEzICsxNzgzLDE0IEBACiBpbnQgb21hcF9od21vZF9yZXNldChzdHJ1Y3Qgb21hcF9od21vZCAqb2gpCiB7CiAJaW50IHI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmICghb2gpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JbXV0ZXhfbG9jaygmb2gtPl9tdXRleCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJm9oLT5fbG9jaywgZmxhZ3MpOwogCXIgPSBfcmVzZXQob2gpOwotCW11dGV4X3VubG9jaygmb2gtPl9tdXRleCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb2gtPl9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gcjsKIH0KQEAgLTE5NTUsMTMgKzE5ODcsMTggQEAKICAqLwogaW50IG9tYXBfaHdtb2RfZW5hYmxlX3dha2V1cChzdHJ1Y3Qgb21hcF9od21vZCAqb2gpCiB7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgdjsKKwogCWlmICghb2gtPmNsYXNzLT5zeXNjIHx8CiAJICAgICEob2gtPmNsYXNzLT5zeXNjLT5zeXNjX2ZsYWdzICYgU1lTQ19IQVNfRU5BV0FLRVVQKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQltdXRleF9sb2NrKCZvaC0+X211dGV4KTsKLQlfZW5hYmxlX3dha2V1cChvaCk7Ci0JbXV0ZXhfdW5sb2NrKCZvaC0+X211dGV4KTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmb2gtPl9sb2NrLCBmbGFncyk7CisJdiA9IG9oLT5fc3lzY19jYWNoZTsKKwlfZW5hYmxlX3dha2V1cChvaCwgJnYpOworCV93cml0ZV9zeXNjb25maWcodiwgb2gpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9oLT5fbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xOTgwLDEzICsyMDE3LDE4IEBACiAgKi8KIGludCBvbWFwX2h3bW9kX2Rpc2FibGVfd2FrZXVwKHN0cnVjdCBvbWFwX2h3bW9kICpvaCkKIHsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiB2OworCiAJaWYgKCFvaC0+Y2xhc3MtPnN5c2MgfHwKIAkgICAgIShvaC0+Y2xhc3MtPnN5c2MtPnN5c2NfZmxhZ3MgJiBTWVNDX0hBU19FTkFXQUtFVVApKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCW11dGV4X2xvY2soJm9oLT5fbXV0ZXgpOwotCV9kaXNhYmxlX3dha2V1cChvaCk7Ci0JbXV0ZXhfdW5sb2NrKCZvaC0+X211dGV4KTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmb2gtPl9sb2NrLCBmbGFncyk7CisJdiA9IG9oLT5fc3lzY19jYWNoZTsKKwlfZGlzYWJsZV93YWtldXAob2gsICZ2KTsKKwlfd3JpdGVfc3lzY29uZmlnKHYsIG9oKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvaC0+X2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjAwNiwxMyArMjA0OCwxNCBAQAogaW50IG9tYXBfaHdtb2RfYXNzZXJ0X2hhcmRyZXNldChzdHJ1Y3Qgb21hcF9od21vZCAqb2gsIGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJaW50IHJldDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKCFvaCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQltdXRleF9sb2NrKCZvaC0+X211dGV4KTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmb2gtPl9sb2NrLCBmbGFncyk7CiAJcmV0ID0gX2Fzc2VydF9oYXJkcmVzZXQob2gsIG5hbWUpOwotCW11dGV4X3VubG9jaygmb2gtPl9tdXRleCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb2gtPl9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjAzMiwxMyArMjA3NSwxNCBAQAogaW50IG9tYXBfaHdtb2RfZGVhc3NlcnRfaGFyZHJlc2V0KHN0cnVjdCBvbWFwX2h3bW9kICpvaCwgY29uc3QgY2hhciAqbmFtZSkKIHsKIAlpbnQgcmV0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoIW9oKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCW11dGV4X2xvY2soJm9oLT5fbXV0ZXgpOworCXNwaW5fbG9ja19pcnFzYXZlKCZvaC0+X2xvY2ssIGZsYWdzKTsKIAlyZXQgPSBfZGVhc3NlcnRfaGFyZHJlc2V0KG9oLCBuYW1lKTsKLQltdXRleF91bmxvY2soJm9oLT5fbXV0ZXgpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9oLT5fbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTIwNTcsMTMgKzIxMDEsMTQgQEAKIGludCBvbWFwX2h3bW9kX3JlYWRfaGFyZHJlc2V0KHN0cnVjdCBvbWFwX2h3bW9kICpvaCwgY29uc3QgY2hhciAqbmFtZSkKIHsKIAlpbnQgcmV0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoIW9oKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCW11dGV4X2xvY2soJm9oLT5fbXV0ZXgpOworCXNwaW5fbG9ja19pcnFzYXZlKCZvaC0+X2xvY2ssIGZsYWdzKTsKIAlyZXQgPSBfcmVhZF9oYXJkcmVzZXQob2gsIG5hbWUpOwotCW11dGV4X3VubG9jaygmb2gtPl9tdXRleCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb2gtPl9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjA3NSw5ICsyMTIwLDggQEAKICAqIEBmbjogY2FsbGJhY2sgZnVuY3Rpb24gcG9pbnRlciB0byBjYWxsIGZvciBlYWNoIGh3bW9kIGluIGNsYXNzIEBjbGFzc25hbWUKICAqIEB1c2VyOiBhcmJpdHJhcnkgY29udGV4dCBkYXRhIHRvIHBhc3MgdG8gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uCiAgKgotICogRm9yIGVhY2ggb21hcF9od21vZCBvZiBjbGFzcyBAY2xhc3NuYW1lLCBjYWxsIEBmbi4gIFRha2VzCi0gKiBvbWFwX2h3bW9kX211dGV4IHRvIHByZXZlbnQgdGhlIGh3bW9kIGxpc3QgZnJvbSBjaGFuZ2luZyBkdXJpbmcgdGhlCi0gKiBpdGVyYXRpb24uICBJZiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gcmV0dXJucyBzb21ldGhpbmcgb3RoZXIgdGhhbgorICogRm9yIGVhY2ggb21hcF9od21vZCBvZiBjbGFzcyBAY2xhc3NuYW1lLCBjYWxsIEBmbi4KKyAqIElmIHRoZSBjYWxsYmFjayBmdW5jdGlvbiByZXR1cm5zIHNvbWV0aGluZyBvdGhlciB0aGFuCiAgKiB6ZXJvLCB0aGUgaXRlcmF0b3IgaXMgdGVybWluYXRlZCwgYW5kIHRoZSBjYWxsYmFjayBmdW5jdGlvbidzIHJldHVybgogICogdmFsdWUgaXMgcGFzc2VkIGJhY2sgdG8gdGhlIGNhbGxlci4gIFJldHVybnMgMCB1cG9uIHN1Y2Nlc3MsIC1FSU5WQUwKICAqIGlmIEBjbGFzc25hbWUgb3IgQGZuIGFyZSBOVUxMLCBvciBwYXNzZXMgYmFjayB0aGUgZXJyb3IgY29kZSBmcm9tIEBmbi4KQEAgLTIwOTYsOCArMjE0MCw2IEBACiAJcHJfZGVidWcoIm9tYXBfaHdtb2Q6ICVzOiBsb29raW5nIGZvciBtb2R1bGVzIG9mIGNsYXNzICVzXG4iLAogCQkgX19mdW5jX18sIGNsYXNzbmFtZSk7CiAKLQltdXRleF9sb2NrKCZvbWFwX2h3bW9kX211dGV4KTsKLQogCWxpc3RfZm9yX2VhY2hfZW50cnkodGVtcF9vaCwgJm9tYXBfaHdtb2RfbGlzdCwgbm9kZSkgewogCQlpZiAoIXN0cmNtcCh0ZW1wX29oLT5jbGFzcy0+bmFtZSwgY2xhc3NuYW1lKSkgewogCQkJcHJfZGVidWcoIm9tYXBfaHdtb2Q6ICVzOiAlczogY2FsbGluZyBjYWxsYmFjayBmblxuIiwKQEAgLTIxMDgsOCArMjE1MCw2IEBACiAJCX0KIAl9CiAKLQltdXRleF91bmxvY2soJm9tYXBfaHdtb2RfbXV0ZXgpOwotCiAJaWYgKHJldCkKIAkJcHJfZGVidWcoIm9tYXBfaHdtb2Q6ICVzOiBpdGVyYXRvciB0ZXJtaW5hdGVkIGVhcmx5OiAlZFxuIiwKIAkJCSBfX2Z1bmNfXywgcmV0KTsKQEAgLTIxMTcsMyArMjE1Nyw2NCBAQAogCXJldHVybiByZXQ7CiB9CiAKKy8qKgorICogb21hcF9od21vZF9zZXRfcG9zdHNldHVwX3N0YXRlIC0gc2V0IHRoZSBwb3N0LV9zZXR1cCgpIHN0YXRlIGZvciB0aGlzIGh3bW9kCisgKiBAb2g6IHN0cnVjdCBvbWFwX2h3bW9kICoKKyAqIEBzdGF0ZTogc3RhdGUgdGhhdCBfc2V0dXAoKSBzaG91bGQgbGVhdmUgdGhlIGh3bW9kIGluCisgKgorICogU2V0cyB0aGUgaHdtb2Qgc3RhdGUgdGhhdCBAb2ggd2lsbCBlbnRlciBhdCB0aGUgZW5kIG9mIF9zZXR1cCgpIChjYWxsZWQgYnkKKyAqIG9tYXBfaHdtb2RfbGF0ZV9pbml0KCkpLiAgT25seSB2YWxpZCB0byBjYWxsIGJldHdlZW4gY2FsbHMgdG8KKyAqIG9tYXBfaHdtb2RfaW5pdCgpIGFuZCBvbWFwX2h3bW9kX2xhdGVfaW5pdCgpLiAgUmV0dXJucyAwIHVwb24gc3VjY2VzcyBvcgorICogLUVJTlZBTCBpZiB0aGVyZSBpcyBhIHByb2JsZW0gd2l0aCB0aGUgYXJndW1lbnRzIG9yIGlmIHRoZSBod21vZCBpcworICogaW4gdGhlIHdyb25nIHN0YXRlLgorICovCitpbnQgb21hcF9od21vZF9zZXRfcG9zdHNldHVwX3N0YXRlKHN0cnVjdCBvbWFwX2h3bW9kICpvaCwgdTggc3RhdGUpCit7CisJaW50IHJldDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCFvaCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoc3RhdGUgIT0gX0hXTU9EX1NUQVRFX0RJU0FCTEVEICYmCisJICAgIHN0YXRlICE9IF9IV01PRF9TVEFURV9FTkFCTEVEICYmCisJICAgIHN0YXRlICE9IF9IV01PRF9TVEFURV9JRExFKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZvaC0+X2xvY2ssIGZsYWdzKTsKKworCWlmIChvaC0+X3N0YXRlICE9IF9IV01PRF9TVEFURV9SRUdJU1RFUkVEKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb2hzcHNfdW5sb2NrOworCX0KKworCW9oLT5fcG9zdHNldHVwX3N0YXRlID0gc3RhdGU7CisJcmV0ID0gMDsKKworb2hzcHNfdW5sb2NrOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9oLT5fbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBvbWFwX2h3bW9kX2dldF9jb250ZXh0X2xvc3NfY291bnQgLSBnZXQgbG9zdCBjb250ZXh0IGNvdW50CisgKiBAb2g6IHN0cnVjdCBvbWFwX2h3bW9kICoKKyAqCisgKiBRdWVyeSB0aGUgcG93ZXJkb21haW4gb2Ygb2YgQG9oIHRvIGdldCB0aGUgY29udGV4dCBsb3NzCisgKiBjb3VudCBmb3IgdGhpcyBkZXZpY2UuCisgKgorICogUmV0dXJucyB0aGUgY29udGV4dCBsb3NzIGNvdW50IG9mIHRoZSBwb3dlcmRvbWFpbiBhc3NvY2F0ZWQgd2l0aCBAb2gKKyAqIHVwb24gc3VjY2Vzcywgb3IgemVybyBpZiBubyBwb3dlcmRvbWFpbiBleGlzdHMgZm9yIEBvaC4KKyAqLwordTMyIG9tYXBfaHdtb2RfZ2V0X2NvbnRleHRfbG9zc19jb3VudChzdHJ1Y3Qgb21hcF9od21vZCAqb2gpCit7CisJc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbTsKKwlpbnQgcmV0ID0gMDsKKworCXB3cmRtID0gb21hcF9od21vZF9nZXRfcHdyZG0ob2gpOworCWlmIChwd3JkbSkKKwkJcmV0ID0gcHdyZG1fZ2V0X2NvbnRleHRfbG9zc19jb3VudChwd3JkbSk7CisKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzI0MjBfZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzI0MjBfZGF0YS5jCmluZGV4IGFkZjZlMzYuLmI4NWM2MzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF8yNDIwX2RhdGEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfMjQyMF9kYXRhLmMKQEAgLTE2LDExICsxNiwxNCBAQAogI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAjaW5jbHVkZSA8cGxhdC9kbWEuaD4KICNpbmNsdWRlIDxwbGF0L3NlcmlhbC5oPgorI2luY2x1ZGUgPHBsYXQvaTJjLmg+CisjaW5jbHVkZSA8cGxhdC9ncGlvLmg+CiAKICNpbmNsdWRlICJvbWFwX2h3bW9kX2NvbW1vbl9kYXRhLmgiCiAKLSNpbmNsdWRlICJwcm0tcmVnYml0cy0yNHh4LmgiCiAjaW5jbHVkZSAiY20tcmVnYml0cy0yNHh4LmgiCisjaW5jbHVkZSAicHJtLXJlZ2JpdHMtMjR4eC5oIgorI2luY2x1ZGUgIndkX3RpbWVyLmgiCiAKIC8qCiAgKiBPTUFQMjQyMCBoYXJkd2FyZSBtb2R1bGUgaW50ZWdyYXRpb24gZGF0YQpAQCAtMzYsNiArMzksMTEgQEAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQyMF9sM19tYWluX2h3bW9kOwogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDIwX2w0X2NvcmVfaHdtb2Q7CiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MjBfd2RfdGltZXIyX2h3bW9kOworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDIwX2dwaW8xX2h3bW9kOworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDIwX2dwaW8yX2h3bW9kOworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDIwX2dwaW8zX2h3bW9kOworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDIwX2dwaW80X2h3bW9kOworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDIwX2RtYV9zeXN0ZW1faHdtb2Q7CiAKIC8qIEwzIC0+IEw0X0NPUkUgaW50ZXJmYWNlICovCiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAyNDIwX2wzX21haW5fX2w0X2NvcmUgPSB7CkBAIC03Nyw2ICs4NSw4IEBACiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MjBfdWFydDFfaHdtb2Q7CiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MjBfdWFydDJfaHdtb2Q7CiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MjBfdWFydDNfaHdtb2Q7CitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MjBfaTJjMV9od21vZDsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQyMF9pMmMyX2h3bW9kOwogCiAvKiBMNF9DT1JFIC0+IEw0X1dLVVAgaW50ZXJmYWNlICovCiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAyNDIwX2w0X2NvcmVfX2w0X3drdXAgPSB7CkBAIC0xMzksNiArMTQ5LDQ1IEBACiAJLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKIH07CiAKKy8qIEkyQyBJUCBibG9jayBhZGRyZXNzIHNwYWNlIGxlbmd0aCAoaW4gYnl0ZXMpICovCisjZGVmaW5lIE9NQVAyX0kyQ19BU19MRU4JCTEyOAorCisvKiBMNCBDT1JFIC0+IEkyQzEgaW50ZXJmYWNlICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwMjQyMF9pMmMxX2FkZHJfc3BhY2VbXSA9IHsKKwl7CisJCS5wYV9zdGFydAk9IDB4NDgwNzAwMDAsCisJCS5wYV9lbmQJCT0gMHg0ODA3MDAwMCArIE9NQVAyX0kyQ19BU19MRU4gLSAxLAorCQkuZmxhZ3MJCT0gQUREUl9UWVBFX1JULAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAyNDIwX2w0X2NvcmVfX2kyYzEgPSB7CisJLm1hc3RlcgkJPSAmb21hcDI0MjBfbDRfY29yZV9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXAyNDIwX2kyYzFfaHdtb2QsCisJLmNsawkJPSAiaTJjMV9pY2siLAorCS5hZGRyCQk9IG9tYXAyNDIwX2kyYzFfYWRkcl9zcGFjZSwKKwkuYWRkcl9jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDIwX2kyYzFfYWRkcl9zcGFjZSksCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKK307CisKKy8qIEw0IENPUkUgLT4gSTJDMiBpbnRlcmZhY2UgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9hZGRyX3NwYWNlIG9tYXAyNDIwX2kyYzJfYWRkcl9zcGFjZVtdID0geworCXsKKwkJLnBhX3N0YXJ0CT0gMHg0ODA3MjAwMCwKKwkJLnBhX2VuZAkJPSAweDQ4MDcyMDAwICsgT01BUDJfSTJDX0FTX0xFTiAtIDEsCisJCS5mbGFncwkJPSBBRERSX1RZUEVfUlQsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDI0MjBfbDRfY29yZV9faTJjMiA9IHsKKwkubWFzdGVyCQk9ICZvbWFwMjQyMF9sNF9jb3JlX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDI0MjBfaTJjMl9od21vZCwKKwkuY2xrCQk9ICJpMmMyX2ljayIsCisJLmFkZHIJCT0gb21hcDI0MjBfaTJjMl9hZGRyX3NwYWNlLAorCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MjBfaTJjMl9hZGRyX3NwYWNlKSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKwogLyogU2xhdmUgaW50ZXJmYWNlcyBvbiB0aGUgTDRfQ09SRSBpbnRlcmNvbm5lY3QgKi8KIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAyNDIwX2w0X2NvcmVfc2xhdmVzW10gPSB7CiAJJm9tYXAyNDIwX2wzX21haW5fX2w0X2NvcmUsCkBAIC0xNTAsNiArMTk5LDggQEAKIAkmb21hcDJfbDRfY29yZV9fdWFydDEsCiAJJm9tYXAyX2w0X2NvcmVfX3VhcnQyLAogCSZvbWFwMl9sNF9jb3JlX191YXJ0MywKKwkmb21hcDI0MjBfbDRfY29yZV9faTJjMSwKKwkmb21hcDI0MjBfbDRfY29yZV9faTJjMgogfTsKIAogLyogTDQgQ09SRSAqLwpAQCAtMjYyLDggKzMxMyw5IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfY2xhc3Mgb21hcDI0MjBfd2RfdGltZXJfaHdtb2RfY2xhc3MgPSB7Ci0JLm5hbWUgPSAid2RfdGltZXIiLAotCS5zeXNjID0gJm9tYXAyNDIwX3dkX3RpbWVyX3N5c2MsCisJLm5hbWUJCT0gIndkX3RpbWVyIiwKKwkuc3lzYwkJPSAmb21hcDI0MjBfd2RfdGltZXJfc3lzYywKKwkucHJlX3NodXRkb3duCT0gJm9tYXAyX3dkX3RpbWVyX2Rpc2FibGUKIH07CiAKIC8qIHdkX3RpbWVyMiAqLwpAQCAtNDE4LDYgKzQ3MCw0MDAgQEAKIAkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQyMCksCiB9OwogCisvKiBJMkMgY29tbW9uICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfY2xhc3Nfc3lzY29uZmlnIGkyY19zeXNjID0geworCS5yZXZfb2Zmcwk9IDB4MDAsCisJLnN5c2Nfb2Zmcwk9IDB4MjAsCisJLnN5c3Nfb2Zmcwk9IDB4MTAsCisJLnN5c2NfZmxhZ3MJPSBTWVNDX0hBU19TT0ZUUkVTRVQsCisJLnN5c2NfZmllbGRzCT0gJm9tYXBfaHdtb2Rfc3lzY190eXBlMSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzcyBpMmNfY2xhc3MgPSB7CisJLm5hbWUJCT0gImkyYyIsCisJLnN5c2MJCT0gJmkyY19zeXNjLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2kyY19kZXZfYXR0ciBpMmNfZGV2X2F0dHI7CisKKy8qIEkyQzEgKi8KKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2lycV9pbmZvIGkyYzFfbXB1X2lycXNbXSA9IHsKKwl7IC5pcnEgPSBJTlRfMjRYWF9JMkMxX0lSUSwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9kbWFfaW5mbyBpMmMxX3NkbWFfcmVxc1tdID0geworCXsgLm5hbWUgPSAidHgiLCAuZG1hX3JlcSA9IE9NQVAyNFhYX0RNQV9JMkMxX1RYIH0sCisJeyAubmFtZSA9ICJyeCIsIC5kbWFfcmVxID0gT01BUDI0WFhfRE1BX0kyQzFfUlggfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAyNDIwX2kyYzFfc2xhdmVzW10gPSB7CisJJm9tYXAyNDIwX2w0X2NvcmVfX2kyYzEsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MjBfaTJjMV9od21vZCA9IHsKKwkubmFtZQkJPSAiaTJjMSIsCisJLm1wdV9pcnFzCT0gaTJjMV9tcHVfaXJxcywKKwkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShpMmMxX21wdV9pcnFzKSwKKwkuc2RtYV9yZXFzCT0gaTJjMV9zZG1hX3JlcXMsCisJLnNkbWFfcmVxc19jbnQJPSBBUlJBWV9TSVpFKGkyYzFfc2RtYV9yZXFzKSwKKwkubWFpbl9jbGsJPSAiaTJjMV9mY2siLAorCS5wcmNtCQk9IHsKKwkJLm9tYXAyID0geworCQkJLm1vZHVsZV9vZmZzID0gQ09SRV9NT0QsCisJCQkucHJjbV9yZWdfaWQgPSAxLAorCQkJLm1vZHVsZV9iaXQgPSBPTUFQMjQyMF9FTl9JMkMxX1NISUZULAorCQkJLmlkbGVzdF9yZWdfaWQgPSAxLAorCQkJLmlkbGVzdF9pZGxlX2JpdCA9IE9NQVAyNDIwX1NUX0kyQzFfU0hJRlQsCisJCX0sCisJfSwKKwkuc2xhdmVzCQk9IG9tYXAyNDIwX2kyYzFfc2xhdmVzLAorCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwMjQyMF9pMmMxX3NsYXZlcyksCisJLmNsYXNzCQk9ICZpMmNfY2xhc3MsCisJLmRldl9hdHRyCT0gJmkyY19kZXZfYXR0ciwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQyMCksCisJLmZsYWdzCQk9IEhXTU9EXzE2QklUX1JFRywKK307CisKKy8qIEkyQzIgKi8KKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2lycV9pbmZvIGkyYzJfbXB1X2lycXNbXSA9IHsKKwl7IC5pcnEgPSBJTlRfMjRYWF9JMkMyX0lSUSwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9kbWFfaW5mbyBpMmMyX3NkbWFfcmVxc1tdID0geworCXsgLm5hbWUgPSAidHgiLCAuZG1hX3JlcSA9IE9NQVAyNFhYX0RNQV9JMkMyX1RYIH0sCisJeyAubmFtZSA9ICJyeCIsIC5kbWFfcmVxID0gT01BUDI0WFhfRE1BX0kyQzJfUlggfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAyNDIwX2kyYzJfc2xhdmVzW10gPSB7CisJJm9tYXAyNDIwX2w0X2NvcmVfX2kyYzIsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MjBfaTJjMl9od21vZCA9IHsKKwkubmFtZQkJPSAiaTJjMiIsCisJLm1wdV9pcnFzCT0gaTJjMl9tcHVfaXJxcywKKwkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShpMmMyX21wdV9pcnFzKSwKKwkuc2RtYV9yZXFzCT0gaTJjMl9zZG1hX3JlcXMsCisJLnNkbWFfcmVxc19jbnQJPSBBUlJBWV9TSVpFKGkyYzJfc2RtYV9yZXFzKSwKKwkubWFpbl9jbGsJPSAiaTJjMl9mY2siLAorCS5wcmNtCQk9IHsKKwkJLm9tYXAyID0geworCQkJLm1vZHVsZV9vZmZzID0gQ09SRV9NT0QsCisJCQkucHJjbV9yZWdfaWQgPSAxLAorCQkJLm1vZHVsZV9iaXQgPSBPTUFQMjQyMF9FTl9JMkMyX1NISUZULAorCQkJLmlkbGVzdF9yZWdfaWQgPSAxLAorCQkJLmlkbGVzdF9pZGxlX2JpdCA9IE9NQVAyNDIwX1NUX0kyQzJfU0hJRlQsCisJCX0sCisJfSwKKwkuc2xhdmVzCQk9IG9tYXAyNDIwX2kyYzJfc2xhdmVzLAorCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwMjQyMF9pMmMyX3NsYXZlcyksCisJLmNsYXNzCQk9ICZpMmNfY2xhc3MsCisJLmRldl9hdHRyCT0gJmkyY19kZXZfYXR0ciwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQyMCksCisJLmZsYWdzCQk9IEhXTU9EXzE2QklUX1JFRywKK307CisKKy8qIGw0X3drdXAgLT4gZ3BpbzEgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9hZGRyX3NwYWNlIG9tYXAyNDIwX2dwaW8xX2FkZHJfc3BhY2VbXSA9IHsKKwl7CisJCS5wYV9zdGFydAk9IDB4NDgwMTgwMDAsCisJCS5wYV9lbmQJCT0gMHg0ODAxODFmZiwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAyNDIwX2w0X3drdXBfX2dwaW8xID0geworCS5tYXN0ZXIJCT0gJm9tYXAyNDIwX2w0X3drdXBfaHdtb2QsCisJLnNsYXZlCQk9ICZvbWFwMjQyMF9ncGlvMV9od21vZCwKKwkuY2xrCQk9ICJncGlvc19pY2siLAorCS5hZGRyCQk9IG9tYXAyNDIwX2dwaW8xX2FkZHJfc3BhY2UsCisJLmFkZHJfY250CT0gQVJSQVlfU0laRShvbWFwMjQyMF9ncGlvMV9hZGRyX3NwYWNlKSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyogbDRfd2t1cCAtPiBncGlvMiAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDI0MjBfZ3BpbzJfYWRkcl9zcGFjZVtdID0geworCXsKKwkJLnBhX3N0YXJ0CT0gMHg0ODAxYTAwMCwKKwkJLnBhX2VuZAkJPSAweDQ4MDFhMWZmLAorCQkuZmxhZ3MJCT0gQUREUl9UWVBFX1JUCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDI0MjBfbDRfd2t1cF9fZ3BpbzIgPSB7CisJLm1hc3RlcgkJPSAmb21hcDI0MjBfbDRfd2t1cF9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXAyNDIwX2dwaW8yX2h3bW9kLAorCS5jbGsJCT0gImdwaW9zX2ljayIsCisJLmFkZHIJCT0gb21hcDI0MjBfZ3BpbzJfYWRkcl9zcGFjZSwKKwkuYWRkcl9jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDIwX2dwaW8yX2FkZHJfc3BhY2UpLAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCit9OworCisvKiBsNF93a3VwIC0+IGdwaW8zICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwMjQyMF9ncGlvM19hZGRyX3NwYWNlW10gPSB7CisJeworCQkucGFfc3RhcnQJPSAweDQ4MDFjMDAwLAorCQkucGFfZW5kCQk9IDB4NDgwMWMxZmYsCisJCS5mbGFncwkJPSBBRERSX1RZUEVfUlQKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwMjQyMF9sNF93a3VwX19ncGlvMyA9IHsKKwkubWFzdGVyCQk9ICZvbWFwMjQyMF9sNF93a3VwX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDI0MjBfZ3BpbzNfaHdtb2QsCisJLmNsawkJPSAiZ3Bpb3NfaWNrIiwKKwkuYWRkcgkJPSBvbWFwMjQyMF9ncGlvM19hZGRyX3NwYWNlLAorCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MjBfZ3BpbzNfYWRkcl9zcGFjZSksCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKK307CisKKy8qIGw0X3drdXAgLT4gZ3BpbzQgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9hZGRyX3NwYWNlIG9tYXAyNDIwX2dwaW80X2FkZHJfc3BhY2VbXSA9IHsKKwl7CisJCS5wYV9zdGFydAk9IDB4NDgwMWUwMDAsCisJCS5wYV9lbmQJCT0gMHg0ODAxZTFmZiwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAyNDIwX2w0X3drdXBfX2dwaW80ID0geworCS5tYXN0ZXIJCT0gJm9tYXAyNDIwX2w0X3drdXBfaHdtb2QsCisJLnNsYXZlCQk9ICZvbWFwMjQyMF9ncGlvNF9od21vZCwKKwkuY2xrCQk9ICJncGlvc19pY2siLAorCS5hZGRyCQk9IG9tYXAyNDIwX2dwaW80X2FkZHJfc3BhY2UsCisJLmFkZHJfY250CT0gQVJSQVlfU0laRShvbWFwMjQyMF9ncGlvNF9hZGRyX3NwYWNlKSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyogZ3BpbyBkZXZfYXR0ciAqLworc3RhdGljIHN0cnVjdCBvbWFwX2dwaW9fZGV2X2F0dHIgZ3Bpb19kZXZfYXR0ciA9IHsKKwkuYmFua193aWR0aCA9IDMyLAorCS5kYmNrX2ZsYWcgPSBmYWxzZSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzc19zeXNjb25maWcgb21hcDI0MnhfZ3Bpb19zeXNjID0geworCS5yZXZfb2Zmcwk9IDB4MDAwMCwKKwkuc3lzY19vZmZzCT0gMHgwMDEwLAorCS5zeXNzX29mZnMJPSAweDAwMTQsCisJLnN5c2NfZmxhZ3MJPSAoU1lTQ19IQVNfRU5BV0FLRVVQIHwgU1lTQ19IQVNfU0lETEVNT0RFIHwKKwkJCSAgIFNZU0NfSEFTX1NPRlRSRVNFVCB8IFNZU0NfSEFTX0FVVE9JRExFKSwKKwkuaWRsZW1vZGVzCT0gKFNJRExFX0ZPUkNFIHwgU0lETEVfTk8gfCBTSURMRV9TTUFSVCksCisJLnN5c2NfZmllbGRzICAgID0gJm9tYXBfaHdtb2Rfc3lzY190eXBlMSwKK307CisKKy8qCisgKiAnZ3BpbycgY2xhc3MKKyAqIGdlbmVyYWwgcHVycG9zZSBpbyBtb2R1bGUKKyAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzIG9tYXAyNDJ4X2dwaW9faHdtb2RfY2xhc3MgPSB7CisJLm5hbWUgPSAiZ3BpbyIsCisJLnN5c2MgPSAmb21hcDI0MnhfZ3Bpb19zeXNjLAorCS5yZXYgPSAwLAorfTsKKworLyogZ3BpbzEgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9pcnFfaW5mbyBvbWFwMjQyeF9ncGlvMV9pcnFzW10gPSB7CisJeyAuaXJxID0gMjkgfSwgLyogSU5UXzI0WFhfR1BJT19CQU5LMSAqLworfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDI0MjBfZ3BpbzFfc2xhdmVzW10gPSB7CisJJm9tYXAyNDIwX2w0X3drdXBfX2dwaW8xLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDIwX2dwaW8xX2h3bW9kID0geworCS5uYW1lCQk9ICJncGlvMSIsCisJLm1wdV9pcnFzCT0gb21hcDI0MnhfZ3BpbzFfaXJxcywKKwkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwMjQyeF9ncGlvMV9pcnFzKSwKKwkubWFpbl9jbGsJPSAiZ3Bpb3NfZmNrIiwKKwkucHJjbQkJPSB7CisJCS5vbWFwMiA9IHsKKwkJCS5wcmNtX3JlZ19pZCA9IDEsCisJCQkubW9kdWxlX2JpdCA9IE9NQVAyNFhYX0VOX0dQSU9TX1NISUZULAorCQkJLm1vZHVsZV9vZmZzID0gV0tVUF9NT0QsCisJCQkuaWRsZXN0X3JlZ19pZCA9IDEsCisJCQkuaWRsZXN0X2lkbGVfYml0ID0gT01BUDI0WFhfU1RfR1BJT1NfU0hJRlQsCisJCX0sCisJfSwKKwkuc2xhdmVzCQk9IG9tYXAyNDIwX2dwaW8xX3NsYXZlcywKKwkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MjBfZ3BpbzFfc2xhdmVzKSwKKwkuY2xhc3MJCT0gJm9tYXAyNDJ4X2dwaW9faHdtb2RfY2xhc3MsCisJLmRldl9hdHRyCT0gJmdwaW9fZGV2X2F0dHIsCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MjApLAorfTsKKworLyogZ3BpbzIgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9pcnFfaW5mbyBvbWFwMjQyeF9ncGlvMl9pcnFzW10gPSB7CisJeyAuaXJxID0gMzAgfSwgLyogSU5UXzI0WFhfR1BJT19CQU5LMiAqLworfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDI0MjBfZ3BpbzJfc2xhdmVzW10gPSB7CisJJm9tYXAyNDIwX2w0X3drdXBfX2dwaW8yLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDIwX2dwaW8yX2h3bW9kID0geworCS5uYW1lCQk9ICJncGlvMiIsCisJLm1wdV9pcnFzCT0gb21hcDI0MnhfZ3BpbzJfaXJxcywKKwkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwMjQyeF9ncGlvMl9pcnFzKSwKKwkubWFpbl9jbGsJPSAiZ3Bpb3NfZmNrIiwKKwkucHJjbQkJPSB7CisJCS5vbWFwMiA9IHsKKwkJCS5wcmNtX3JlZ19pZCA9IDEsCisJCQkubW9kdWxlX2JpdCA9IE9NQVAyNFhYX0VOX0dQSU9TX1NISUZULAorCQkJLm1vZHVsZV9vZmZzID0gV0tVUF9NT0QsCisJCQkuaWRsZXN0X3JlZ19pZCA9IDEsCisJCQkuaWRsZXN0X2lkbGVfYml0ID0gT01BUDI0WFhfU1RfR1BJT1NfU0hJRlQsCisJCX0sCisJfSwKKwkuc2xhdmVzCQk9IG9tYXAyNDIwX2dwaW8yX3NsYXZlcywKKwkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MjBfZ3BpbzJfc2xhdmVzKSwKKwkuY2xhc3MJCT0gJm9tYXAyNDJ4X2dwaW9faHdtb2RfY2xhc3MsCisJLmRldl9hdHRyCT0gJmdwaW9fZGV2X2F0dHIsCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MjApLAorfTsKKworLyogZ3BpbzMgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9pcnFfaW5mbyBvbWFwMjQyeF9ncGlvM19pcnFzW10gPSB7CisJeyAuaXJxID0gMzEgfSwgLyogSU5UXzI0WFhfR1BJT19CQU5LMyAqLworfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDI0MjBfZ3BpbzNfc2xhdmVzW10gPSB7CisJJm9tYXAyNDIwX2w0X3drdXBfX2dwaW8zLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDIwX2dwaW8zX2h3bW9kID0geworCS5uYW1lCQk9ICJncGlvMyIsCisJLm1wdV9pcnFzCT0gb21hcDI0MnhfZ3BpbzNfaXJxcywKKwkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwMjQyeF9ncGlvM19pcnFzKSwKKwkubWFpbl9jbGsJPSAiZ3Bpb3NfZmNrIiwKKwkucHJjbQkJPSB7CisJCS5vbWFwMiA9IHsKKwkJCS5wcmNtX3JlZ19pZCA9IDEsCisJCQkubW9kdWxlX2JpdCA9IE9NQVAyNFhYX0VOX0dQSU9TX1NISUZULAorCQkJLm1vZHVsZV9vZmZzID0gV0tVUF9NT0QsCisJCQkuaWRsZXN0X3JlZ19pZCA9IDEsCisJCQkuaWRsZXN0X2lkbGVfYml0ID0gT01BUDI0WFhfU1RfR1BJT1NfU0hJRlQsCisJCX0sCisJfSwKKwkuc2xhdmVzCQk9IG9tYXAyNDIwX2dwaW8zX3NsYXZlcywKKwkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MjBfZ3BpbzNfc2xhdmVzKSwKKwkuY2xhc3MJCT0gJm9tYXAyNDJ4X2dwaW9faHdtb2RfY2xhc3MsCisJLmRldl9hdHRyCT0gJmdwaW9fZGV2X2F0dHIsCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MjApLAorfTsKKworLyogZ3BpbzQgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9pcnFfaW5mbyBvbWFwMjQyeF9ncGlvNF9pcnFzW10gPSB7CisJeyAuaXJxID0gMzIgfSwgLyogSU5UXzI0WFhfR1BJT19CQU5LNCAqLworfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDI0MjBfZ3BpbzRfc2xhdmVzW10gPSB7CisJJm9tYXAyNDIwX2w0X3drdXBfX2dwaW80LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDIwX2dwaW80X2h3bW9kID0geworCS5uYW1lCQk9ICJncGlvNCIsCisJLm1wdV9pcnFzCT0gb21hcDI0MnhfZ3BpbzRfaXJxcywKKwkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwMjQyeF9ncGlvNF9pcnFzKSwKKwkubWFpbl9jbGsJPSAiZ3Bpb3NfZmNrIiwKKwkucHJjbQkJPSB7CisJCS5vbWFwMiA9IHsKKwkJCS5wcmNtX3JlZ19pZCA9IDEsCisJCQkubW9kdWxlX2JpdCA9IE9NQVAyNFhYX0VOX0dQSU9TX1NISUZULAorCQkJLm1vZHVsZV9vZmZzID0gV0tVUF9NT0QsCisJCQkuaWRsZXN0X3JlZ19pZCA9IDEsCisJCQkuaWRsZXN0X2lkbGVfYml0ID0gT01BUDI0WFhfU1RfR1BJT1NfU0hJRlQsCisJCX0sCisJfSwKKwkuc2xhdmVzCQk9IG9tYXAyNDIwX2dwaW80X3NsYXZlcywKKwkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MjBfZ3BpbzRfc2xhdmVzKSwKKwkuY2xhc3MJCT0gJm9tYXAyNDJ4X2dwaW9faHdtb2RfY2xhc3MsCisJLmRldl9hdHRyCT0gJmdwaW9fZGV2X2F0dHIsCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MjApLAorfTsKKworLyogc3lzdGVtIGRtYSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzX3N5c2NvbmZpZyBvbWFwMjQyMF9kbWFfc3lzYyA9IHsKKwkucmV2X29mZnMJPSAweDAwMDAsCisJLnN5c2Nfb2Zmcwk9IDB4MDAyYywKKwkuc3lzc19vZmZzCT0gMHgwMDI4LAorCS5zeXNjX2ZsYWdzCT0gKFNZU0NfSEFTX1NPRlRSRVNFVCB8IFNZU0NfSEFTX01JRExFTU9ERSB8CisJCQkgICBTWVNDX0hBU19DTE9DS0FDVElWSVRZIHwgU1lTQ19IQVNfRU1VRlJFRSB8CisJCQkgICBTWVNDX0hBU19BVVRPSURMRSksCisJLmlkbGVtb2Rlcwk9IChNU1RBTkRCWV9GT1JDRSB8IE1TVEFOREJZX05PIHwgTVNUQU5EQllfU01BUlQpLAorCS5zeXNjX2ZpZWxkcwk9ICZvbWFwX2h3bW9kX3N5c2NfdHlwZTEsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfY2xhc3Mgb21hcDI0MjBfZG1hX2h3bW9kX2NsYXNzID0geworCS5uYW1lID0gImRtYSIsCisJLnN5c2MgPSAmb21hcDI0MjBfZG1hX3N5c2MsCit9OworCisvKiBkbWEgYXR0cmlidXRlcyAqLworc3RhdGljIHN0cnVjdCBvbWFwX2RtYV9kZXZfYXR0ciBkbWFfZGV2X2F0dHIgPSB7CisJLmRldl9jYXBzICA9IFJFU0VSVkVfQ0hBTk5FTCB8IERNQV9MSU5LRURfTENIIHwgR0xPQkFMX1BSSU9SSVRZIHwKKwkJCQkJCUlTX0NTU0FfMzIgfCBJU19DRFNBXzMyLAorCS5sY2hfY291bnQgPSAzMiwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9pcnFfaW5mbyBvbWFwMjQyMF9kbWFfc3lzdGVtX2lycXNbXSA9IHsKKwl7IC5uYW1lID0gIjAiLCAuaXJxID0gMTIgfSwgLyogSU5UXzI0WFhfU0RNQV9JUlEwICovCisJeyAubmFtZSA9ICIxIiwgLmlycSA9IDEzIH0sIC8qIElOVF8yNFhYX1NETUFfSVJRMSAqLworCXsgLm5hbWUgPSAiMiIsIC5pcnEgPSAxNCB9LCAvKiBJTlRfMjRYWF9TRE1BX0lSUTIgKi8KKwl7IC5uYW1lID0gIjMiLCAuaXJxID0gMTUgfSwgLyogSU5UXzI0WFhfU0RNQV9JUlEzICovCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwMjQyMF9kbWFfc3lzdGVtX2FkZHJzW10gPSB7CisJeworCQkucGFfc3RhcnQJPSAweDQ4MDU2MDAwLAorCQkucGFfZW5kCQk9IDB4NGEwNTYwZmYsCisJCS5mbGFncwkJPSBBRERSX1RZUEVfUlQKKwl9LAorfTsKKworLyogZG1hX3N5c3RlbSAtPiBMMyAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwMjQyMF9kbWFfc3lzdGVtX19sMyA9IHsKKwkubWFzdGVyCQk9ICZvbWFwMjQyMF9kbWFfc3lzdGVtX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDI0MjBfbDNfbWFpbl9od21vZCwKKwkuY2xrCQk9ICJjb3JlX2wzX2NrIiwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyogZG1hX3N5c3RlbSBtYXN0ZXIgcG9ydHMgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAyNDIwX2RtYV9zeXN0ZW1fbWFzdGVyc1tdID0geworCSZvbWFwMjQyMF9kbWFfc3lzdGVtX19sMywKK307CisKKy8qIGw0X2NvcmUgLT4gZG1hX3N5c3RlbSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwMjQyMF9sNF9jb3JlX19kbWFfc3lzdGVtID0geworCS5tYXN0ZXIJCT0gJm9tYXAyNDIwX2w0X2NvcmVfaHdtb2QsCisJLnNsYXZlCQk9ICZvbWFwMjQyMF9kbWFfc3lzdGVtX2h3bW9kLAorCS5jbGsJCT0gInNkbWFfaWNrIiwKKwkuYWRkcgkJPSBvbWFwMjQyMF9kbWFfc3lzdGVtX2FkZHJzLAorCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MjBfZG1hX3N5c3RlbV9hZGRycyksCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKK307CisKKy8qIGRtYV9zeXN0ZW0gc2xhdmUgcG9ydHMgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAyNDIwX2RtYV9zeXN0ZW1fc2xhdmVzW10gPSB7CisJJm9tYXAyNDIwX2w0X2NvcmVfX2RtYV9zeXN0ZW0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MjBfZG1hX3N5c3RlbV9od21vZCA9IHsKKwkubmFtZQkJPSAiZG1hIiwKKwkuY2xhc3MJCT0gJm9tYXAyNDIwX2RtYV9od21vZF9jbGFzcywKKwkubXB1X2lycXMJPSBvbWFwMjQyMF9kbWFfc3lzdGVtX2lycXMsCisJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MjBfZG1hX3N5c3RlbV9pcnFzKSwKKwkubWFpbl9jbGsJPSAiY29yZV9sM19jayIsCisJLnNsYXZlcwkJPSBvbWFwMjQyMF9kbWFfc3lzdGVtX3NsYXZlcywKKwkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MjBfZG1hX3N5c3RlbV9zbGF2ZXMpLAorCS5tYXN0ZXJzCT0gb21hcDI0MjBfZG1hX3N5c3RlbV9tYXN0ZXJzLAorCS5tYXN0ZXJzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MjBfZG1hX3N5c3RlbV9tYXN0ZXJzKSwKKwkuZGV2X2F0dHIJPSAmZG1hX2Rldl9hdHRyLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDIwKSwKKwkuZmxhZ3MJCT0gSFdNT0RfTk9fSURMRVNULAorfTsKKwogc3RhdGljIF9faW5pdGRhdGEgc3RydWN0IG9tYXBfaHdtb2QgKm9tYXAyNDIwX2h3bW9kc1tdID0gewogCSZvbWFwMjQyMF9sM19tYWluX2h3bW9kLAogCSZvbWFwMjQyMF9sNF9jb3JlX2h3bW9kLApAQCAtNDI4LDYgKzg3NCwxNyBAQAogCSZvbWFwMjQyMF91YXJ0MV9od21vZCwKIAkmb21hcDI0MjBfdWFydDJfaHdtb2QsCiAJJm9tYXAyNDIwX3VhcnQzX2h3bW9kLAorCSZvbWFwMjQyMF9pMmMxX2h3bW9kLAorCSZvbWFwMjQyMF9pMmMyX2h3bW9kLAorCisJLyogZ3BpbyBjbGFzcyAqLworCSZvbWFwMjQyMF9ncGlvMV9od21vZCwKKwkmb21hcDI0MjBfZ3BpbzJfaHdtb2QsCisJJm9tYXAyNDIwX2dwaW8zX2h3bW9kLAorCSZvbWFwMjQyMF9ncGlvNF9od21vZCwKKworCS8qIGRtYV9zeXN0ZW0gY2xhc3MqLworCSZvbWFwMjQyMF9kbWFfc3lzdGVtX2h3bW9kLAogCU5VTEwsCiB9OwogCkBAIC00MzUsNSArODkyLDMgQEAKIHsKIAlyZXR1cm4gb21hcF9od21vZF9pbml0KG9tYXAyNDIwX2h3bW9kcyk7CiB9Ci0KLQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzI0MzBfZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzI0MzBfZGF0YS5jCmluZGV4IDEyZDkzOWUuLjhlY2ZiY2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF8yNDMwX2RhdGEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfMjQzMF9kYXRhLmMKQEAgLTE2LDExICsxNiwxNCBAQAogI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAjaW5jbHVkZSA8cGxhdC9kbWEuaD4KICNpbmNsdWRlIDxwbGF0L3NlcmlhbC5oPgorI2luY2x1ZGUgPHBsYXQvaTJjLmg+CisjaW5jbHVkZSA8cGxhdC9ncGlvLmg+CiAKICNpbmNsdWRlICJvbWFwX2h3bW9kX2NvbW1vbl9kYXRhLmgiCiAKICNpbmNsdWRlICJwcm0tcmVnYml0cy0yNHh4LmgiCiAjaW5jbHVkZSAiY20tcmVnYml0cy0yNHh4LmgiCisjaW5jbHVkZSAid2RfdGltZXIuaCIKIAogLyoKICAqIE9NQVAyNDMwIGhhcmR3YXJlIG1vZHVsZSBpbnRlZ3JhdGlvbiBkYXRhCkBAIC0zNiw2ICszOSwxMiBAQAogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDMwX2wzX21haW5faHdtb2Q7CiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MzBfbDRfY29yZV9od21vZDsKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQzMF93ZF90aW1lcjJfaHdtb2Q7CitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MzBfZ3BpbzFfaHdtb2Q7CitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MzBfZ3BpbzJfaHdtb2Q7CitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MzBfZ3BpbzNfaHdtb2Q7CitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MzBfZ3BpbzRfaHdtb2Q7CitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MzBfZ3BpbzVfaHdtb2Q7CitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MzBfZG1hX3N5c3RlbV9od21vZDsKIAogLyogTDMgLT4gTDRfQ09SRSBpbnRlcmZhY2UgKi8KIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDI0MzBfbDNfbWFpbl9fbDRfY29yZSA9IHsKQEAgLTc3LDYgKzg2LDQ3IEBACiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MzBfdWFydDFfaHdtb2Q7CiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MzBfdWFydDJfaHdtb2Q7CiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MzBfdWFydDNfaHdtb2Q7CitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MzBfaTJjMV9od21vZDsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQzMF9pMmMyX2h3bW9kOworCisvKiBJMkMgSVAgYmxvY2sgYWRkcmVzcyBzcGFjZSBsZW5ndGggKGluIGJ5dGVzKSAqLworI2RlZmluZSBPTUFQMl9JMkNfQVNfTEVOCQkxMjgKKworLyogTDQgQ09SRSAtPiBJMkMxIGludGVyZmFjZSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDI0MzBfaTJjMV9hZGRyX3NwYWNlW10gPSB7CisJeworCQkucGFfc3RhcnQJPSAweDQ4MDcwMDAwLAorCQkucGFfZW5kCQk9IDB4NDgwNzAwMDAgKyBPTUFQMl9JMkNfQVNfTEVOIC0gMSwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwMjQzMF9sNF9jb3JlX19pMmMxID0geworCS5tYXN0ZXIJCT0gJm9tYXAyNDMwX2w0X2NvcmVfaHdtb2QsCisJLnNsYXZlCQk9ICZvbWFwMjQzMF9pMmMxX2h3bW9kLAorCS5jbGsJCT0gImkyYzFfaWNrIiwKKwkuYWRkcgkJPSBvbWFwMjQzMF9pMmMxX2FkZHJfc3BhY2UsCisJLmFkZHJfY250CT0gQVJSQVlfU0laRShvbWFwMjQzMF9pMmMxX2FkZHJfc3BhY2UpLAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCit9OworCisvKiBMNCBDT1JFIC0+IEkyQzIgaW50ZXJmYWNlICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwMjQzMF9pMmMyX2FkZHJfc3BhY2VbXSA9IHsKKwl7CisJCS5wYV9zdGFydAk9IDB4NDgwNzIwMDAsCisJCS5wYV9lbmQJCT0gMHg0ODA3MjAwMCArIE9NQVAyX0kyQ19BU19MRU4gLSAxLAorCQkuZmxhZ3MJCT0gQUREUl9UWVBFX1JULAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAyNDMwX2w0X2NvcmVfX2kyYzIgPSB7CisJLm1hc3RlcgkJPSAmb21hcDI0MzBfbDRfY29yZV9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXAyNDMwX2kyYzJfaHdtb2QsCisJLmNsawkJPSAiaTJjMl9pY2siLAorCS5hZGRyCQk9IG9tYXAyNDMwX2kyYzJfYWRkcl9zcGFjZSwKKwkuYWRkcl9jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDMwX2kyYzJfYWRkcl9zcGFjZSksCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKK307CiAKIC8qIEw0X0NPUkUgLT4gTDRfV0tVUCBpbnRlcmZhY2UgKi8KIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDI0MzBfbDRfY29yZV9fbDRfd2t1cCA9IHsKQEAgLTI2Miw4ICszMTIsOSBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzIG9tYXAyNDMwX3dkX3RpbWVyX2h3bW9kX2NsYXNzID0gewotCS5uYW1lID0gIndkX3RpbWVyIiwKLQkuc3lzYyA9ICZvbWFwMjQzMF93ZF90aW1lcl9zeXNjLAorCS5uYW1lCQk9ICJ3ZF90aW1lciIsCisJLnN5c2MJCT0gJm9tYXAyNDMwX3dkX3RpbWVyX3N5c2MsCisJLnByZV9zaHV0ZG93bgk9ICZvbWFwMl93ZF90aW1lcl9kaXNhYmxlCiB9OwogCiAvKiB3ZF90aW1lcjIgKi8KQEAgLTQxOCw2ICs0NjksNDU2IEBACiAJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MzApLAogfTsKIAorLyogSTJDIGNvbW1vbiAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzX3N5c2NvbmZpZyBpMmNfc3lzYyA9IHsKKwkucmV2X29mZnMJPSAweDAwLAorCS5zeXNjX29mZnMJPSAweDIwLAorCS5zeXNzX29mZnMJPSAweDEwLAorCS5zeXNjX2ZsYWdzCT0gKFNZU0NfSEFTX1NPRlRSRVNFVCB8IFNZU0NfSEFTX0FVVE9JRExFKSwKKwkuc3lzY19maWVsZHMJPSAmb21hcF9od21vZF9zeXNjX3R5cGUxLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzIGkyY19jbGFzcyA9IHsKKwkubmFtZQkJPSAiaTJjIiwKKwkuc3lzYwkJPSAmaTJjX3N5c2MsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaTJjX2Rldl9hdHRyIGkyY19kZXZfYXR0ciA9IHsKKwkuZmlmb19kZXB0aAk9IDgsIC8qIGJ5dGVzICovCit9OworCisvKiBJMkMxICovCisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9pcnFfaW5mbyBpMmMxX21wdV9pcnFzW10gPSB7CisJeyAuaXJxID0gSU5UXzI0WFhfSTJDMV9JUlEsIH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfZG1hX2luZm8gaTJjMV9zZG1hX3JlcXNbXSA9IHsKKwl7IC5uYW1lID0gInR4IiwgLmRtYV9yZXEgPSBPTUFQMjRYWF9ETUFfSTJDMV9UWCB9LAorCXsgLm5hbWUgPSAicngiLCAuZG1hX3JlcSA9IE9NQVAyNFhYX0RNQV9JMkMxX1JYIH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwMjQzMF9pMmMxX3NsYXZlc1tdID0geworCSZvbWFwMjQzMF9sNF9jb3JlX19pMmMxLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDMwX2kyYzFfaHdtb2QgPSB7CisJLm5hbWUJCT0gImkyYzEiLAorCS5tcHVfaXJxcwk9IGkyYzFfbXB1X2lycXMsCisJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUoaTJjMV9tcHVfaXJxcyksCisJLnNkbWFfcmVxcwk9IGkyYzFfc2RtYV9yZXFzLAorCS5zZG1hX3JlcXNfY250CT0gQVJSQVlfU0laRShpMmMxX3NkbWFfcmVxcyksCisJLm1haW5fY2xrCT0gImkyY2hzMV9mY2siLAorCS5wcmNtCQk9IHsKKwkJLm9tYXAyID0geworCQkJLyoKKwkJCSAqIE5PVEU6IFRoZSBDTV9GQ0xLRU4qIGFuZCBDTV9JQ0xLRU4qIGZvcgorCQkJICogSTJDSFMgSVAncyBkbyBub3QgZm9sbG93IHRoZSB1c3VhbCBwYXR0ZXJuLgorCQkJICogcHJjbV9yZWdfaWQgYWxvbmUgY2Fubm90IGJlIHVzZWQgdG8gcHJvZ3JhbQorCQkJICogdGhlIGljbGsgYW5kIGZjbGsuIE5lZWRzIHRvIGJlIGhhbmRsZWQgdXNpbmcKKwkJCSAqIGFkZGl0b25hbCBmbGFncyB3aGVuIGNsayBoYW5kbGluZyBpcyBtb3ZlZAorCQkJICogdG8gaHdtb2QgZnJhbWV3b3JrLgorCQkJICovCisJCQkubW9kdWxlX29mZnMgPSBDT1JFX01PRCwKKwkJCS5wcmNtX3JlZ19pZCA9IDEsCisJCQkubW9kdWxlX2JpdCA9IE9NQVAyNDMwX0VOX0kyQ0hTMV9TSElGVCwKKwkJCS5pZGxlc3RfcmVnX2lkID0gMSwKKwkJCS5pZGxlc3RfaWRsZV9iaXQgPSBPTUFQMjQzMF9TVF9JMkNIUzFfU0hJRlQsCisJCX0sCisJfSwKKwkuc2xhdmVzCQk9IG9tYXAyNDMwX2kyYzFfc2xhdmVzLAorCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwMjQzMF9pMmMxX3NsYXZlcyksCisJLmNsYXNzCQk9ICZpMmNfY2xhc3MsCisJLmRldl9hdHRyCT0gJmkyY19kZXZfYXR0ciwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQzMCksCit9OworCisvKiBJMkMyICovCisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9pcnFfaW5mbyBpMmMyX21wdV9pcnFzW10gPSB7CisJeyAuaXJxID0gSU5UXzI0WFhfSTJDMl9JUlEsIH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfZG1hX2luZm8gaTJjMl9zZG1hX3JlcXNbXSA9IHsKKwl7IC5uYW1lID0gInR4IiwgLmRtYV9yZXEgPSBPTUFQMjRYWF9ETUFfSTJDMl9UWCB9LAorCXsgLm5hbWUgPSAicngiLCAuZG1hX3JlcSA9IE9NQVAyNFhYX0RNQV9JMkMyX1JYIH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwMjQzMF9pMmMyX3NsYXZlc1tdID0geworCSZvbWFwMjQzMF9sNF9jb3JlX19pMmMyLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDMwX2kyYzJfaHdtb2QgPSB7CisJLm5hbWUJCT0gImkyYzIiLAorCS5tcHVfaXJxcwk9IGkyYzJfbXB1X2lycXMsCisJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUoaTJjMl9tcHVfaXJxcyksCisJLnNkbWFfcmVxcwk9IGkyYzJfc2RtYV9yZXFzLAorCS5zZG1hX3JlcXNfY250CT0gQVJSQVlfU0laRShpMmMyX3NkbWFfcmVxcyksCisJLm1haW5fY2xrCT0gImkyY2hzMl9mY2siLAorCS5wcmNtCQk9IHsKKwkJLm9tYXAyID0geworCQkJLm1vZHVsZV9vZmZzID0gQ09SRV9NT0QsCisJCQkucHJjbV9yZWdfaWQgPSAxLAorCQkJLm1vZHVsZV9iaXQgPSBPTUFQMjQzMF9FTl9JMkNIUzJfU0hJRlQsCisJCQkuaWRsZXN0X3JlZ19pZCA9IDEsCisJCQkuaWRsZXN0X2lkbGVfYml0ID0gT01BUDI0MzBfU1RfSTJDSFMyX1NISUZULAorCQl9LAorCX0sCisJLnNsYXZlcwkJPSBvbWFwMjQzMF9pMmMyX3NsYXZlcywKKwkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MzBfaTJjMl9zbGF2ZXMpLAorCS5jbGFzcwkJPSAmaTJjX2NsYXNzLAorCS5kZXZfYXR0cgk9ICZpMmNfZGV2X2F0dHIsCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MzApLAorfTsKKworLyogbDRfd2t1cCAtPiBncGlvMSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDI0MzBfZ3BpbzFfYWRkcl9zcGFjZVtdID0geworCXsKKwkJLnBhX3N0YXJ0CT0gMHg0OTAwQzAwMCwKKwkJLnBhX2VuZAkJPSAweDQ5MDBDMWZmLAorCQkuZmxhZ3MJCT0gQUREUl9UWVBFX1JUCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDI0MzBfbDRfd2t1cF9fZ3BpbzEgPSB7CisJLm1hc3RlcgkJPSAmb21hcDI0MzBfbDRfd2t1cF9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXAyNDMwX2dwaW8xX2h3bW9kLAorCS5jbGsJCT0gImdwaW9zX2ljayIsCisJLmFkZHIJCT0gb21hcDI0MzBfZ3BpbzFfYWRkcl9zcGFjZSwKKwkuYWRkcl9jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDMwX2dwaW8xX2FkZHJfc3BhY2UpLAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCit9OworCisvKiBsNF93a3VwIC0+IGdwaW8yICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwMjQzMF9ncGlvMl9hZGRyX3NwYWNlW10gPSB7CisJeworCQkucGFfc3RhcnQJPSAweDQ5MDBFMDAwLAorCQkucGFfZW5kCQk9IDB4NDkwMEUxZmYsCisJCS5mbGFncwkJPSBBRERSX1RZUEVfUlQKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwMjQzMF9sNF93a3VwX19ncGlvMiA9IHsKKwkubWFzdGVyCQk9ICZvbWFwMjQzMF9sNF93a3VwX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDI0MzBfZ3BpbzJfaHdtb2QsCisJLmNsawkJPSAiZ3Bpb3NfaWNrIiwKKwkuYWRkcgkJPSBvbWFwMjQzMF9ncGlvMl9hZGRyX3NwYWNlLAorCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MzBfZ3BpbzJfYWRkcl9zcGFjZSksCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKK307CisKKy8qIGw0X3drdXAgLT4gZ3BpbzMgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9hZGRyX3NwYWNlIG9tYXAyNDMwX2dwaW8zX2FkZHJfc3BhY2VbXSA9IHsKKwl7CisJCS5wYV9zdGFydAk9IDB4NDkwMTAwMDAsCisJCS5wYV9lbmQJCT0gMHg0OTAxMDFmZiwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAyNDMwX2w0X3drdXBfX2dwaW8zID0geworCS5tYXN0ZXIJCT0gJm9tYXAyNDMwX2w0X3drdXBfaHdtb2QsCisJLnNsYXZlCQk9ICZvbWFwMjQzMF9ncGlvM19od21vZCwKKwkuY2xrCQk9ICJncGlvc19pY2siLAorCS5hZGRyCQk9IG9tYXAyNDMwX2dwaW8zX2FkZHJfc3BhY2UsCisJLmFkZHJfY250CT0gQVJSQVlfU0laRShvbWFwMjQzMF9ncGlvM19hZGRyX3NwYWNlKSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyogbDRfd2t1cCAtPiBncGlvNCAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDI0MzBfZ3BpbzRfYWRkcl9zcGFjZVtdID0geworCXsKKwkJLnBhX3N0YXJ0CT0gMHg0OTAxMjAwMCwKKwkJLnBhX2VuZAkJPSAweDQ5MDEyMWZmLAorCQkuZmxhZ3MJCT0gQUREUl9UWVBFX1JUCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDI0MzBfbDRfd2t1cF9fZ3BpbzQgPSB7CisJLm1hc3RlcgkJPSAmb21hcDI0MzBfbDRfd2t1cF9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXAyNDMwX2dwaW80X2h3bW9kLAorCS5jbGsJCT0gImdwaW9zX2ljayIsCisJLmFkZHIJCT0gb21hcDI0MzBfZ3BpbzRfYWRkcl9zcGFjZSwKKwkuYWRkcl9jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDMwX2dwaW80X2FkZHJfc3BhY2UpLAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCit9OworCisvKiBsNF9jb3JlIC0+IGdwaW81ICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwMjQzMF9ncGlvNV9hZGRyX3NwYWNlW10gPSB7CisJeworCQkucGFfc3RhcnQJPSAweDQ4MEI2MDAwLAorCQkucGFfZW5kCQk9IDB4NDgwQjYxZmYsCisJCS5mbGFncwkJPSBBRERSX1RZUEVfUlQKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwMjQzMF9sNF9jb3JlX19ncGlvNSA9IHsKKwkubWFzdGVyCQk9ICZvbWFwMjQzMF9sNF9jb3JlX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDI0MzBfZ3BpbzVfaHdtb2QsCisJLmNsawkJPSAiZ3BpbzVfaWNrIiwKKwkuYWRkcgkJPSBvbWFwMjQzMF9ncGlvNV9hZGRyX3NwYWNlLAorCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MzBfZ3BpbzVfYWRkcl9zcGFjZSksCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKK307CisKKy8qIGdwaW8gZGV2X2F0dHIgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9ncGlvX2Rldl9hdHRyIGdwaW9fZGV2X2F0dHIgPSB7CisJLmJhbmtfd2lkdGggPSAzMiwKKwkuZGJja19mbGFnID0gZmFsc2UsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfY2xhc3Nfc3lzY29uZmlnIG9tYXAyNDN4X2dwaW9fc3lzYyA9IHsKKwkucmV2X29mZnMJPSAweDAwMDAsCisJLnN5c2Nfb2Zmcwk9IDB4MDAxMCwKKwkuc3lzc19vZmZzCT0gMHgwMDE0LAorCS5zeXNjX2ZsYWdzCT0gKFNZU0NfSEFTX0VOQVdBS0VVUCB8IFNZU0NfSEFTX1NJRExFTU9ERSB8CisJCQkgICBTWVNDX0hBU19TT0ZUUkVTRVQgfCBTWVNDX0hBU19BVVRPSURMRSksCisJLmlkbGVtb2Rlcwk9IChTSURMRV9GT1JDRSB8IFNJRExFX05PIHwgU0lETEVfU01BUlQpLAorCS5zeXNjX2ZpZWxkcyAgICA9ICZvbWFwX2h3bW9kX3N5c2NfdHlwZTEsCit9OworCisvKgorICogJ2dwaW8nIGNsYXNzCisgKiBnZW5lcmFsIHB1cnBvc2UgaW8gbW9kdWxlCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzcyBvbWFwMjQzeF9ncGlvX2h3bW9kX2NsYXNzID0geworCS5uYW1lID0gImdwaW8iLAorCS5zeXNjID0gJm9tYXAyNDN4X2dwaW9fc3lzYywKKwkucmV2ID0gMCwKK307CisKKy8qIGdwaW8xICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfaXJxX2luZm8gb21hcDI0M3hfZ3BpbzFfaXJxc1tdID0geworCXsgLmlycSA9IDI5IH0sIC8qIElOVF8yNFhYX0dQSU9fQkFOSzEgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAyNDMwX2dwaW8xX3NsYXZlc1tdID0geworCSZvbWFwMjQzMF9sNF93a3VwX19ncGlvMSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQzMF9ncGlvMV9od21vZCA9IHsKKwkubmFtZQkJPSAiZ3BpbzEiLAorCS5tcHVfaXJxcwk9IG9tYXAyNDN4X2dwaW8xX2lycXMsCisJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0M3hfZ3BpbzFfaXJxcyksCisJLm1haW5fY2xrCT0gImdwaW9zX2ZjayIsCisJLnByY20JCT0geworCQkub21hcDIgPSB7CisJCQkucHJjbV9yZWdfaWQgPSAxLAorCQkJLm1vZHVsZV9iaXQgPSBPTUFQMjRYWF9FTl9HUElPU19TSElGVCwKKwkJCS5tb2R1bGVfb2ZmcyA9IFdLVVBfTU9ELAorCQkJLmlkbGVzdF9yZWdfaWQgPSAxLAorCQkJLmlkbGVzdF9pZGxlX2JpdCA9IE9NQVAyNFhYX0VOX0dQSU9TX1NISUZULAorCQl9LAorCX0sCisJLnNsYXZlcwkJPSBvbWFwMjQzMF9ncGlvMV9zbGF2ZXMsCisJLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDMwX2dwaW8xX3NsYXZlcyksCisJLmNsYXNzCQk9ICZvbWFwMjQzeF9ncGlvX2h3bW9kX2NsYXNzLAorCS5kZXZfYXR0cgk9ICZncGlvX2Rldl9hdHRyLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDMwKSwKK307CisKKy8qIGdwaW8yICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfaXJxX2luZm8gb21hcDI0M3hfZ3BpbzJfaXJxc1tdID0geworCXsgLmlycSA9IDMwIH0sIC8qIElOVF8yNFhYX0dQSU9fQkFOSzIgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAyNDMwX2dwaW8yX3NsYXZlc1tdID0geworCSZvbWFwMjQzMF9sNF93a3VwX19ncGlvMiwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQzMF9ncGlvMl9od21vZCA9IHsKKwkubmFtZQkJPSAiZ3BpbzIiLAorCS5tcHVfaXJxcwk9IG9tYXAyNDN4X2dwaW8yX2lycXMsCisJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0M3hfZ3BpbzJfaXJxcyksCisJLm1haW5fY2xrCT0gImdwaW9zX2ZjayIsCisJLnByY20JCT0geworCQkub21hcDIgPSB7CisJCQkucHJjbV9yZWdfaWQgPSAxLAorCQkJLm1vZHVsZV9iaXQgPSBPTUFQMjRYWF9FTl9HUElPU19TSElGVCwKKwkJCS5tb2R1bGVfb2ZmcyA9IFdLVVBfTU9ELAorCQkJLmlkbGVzdF9yZWdfaWQgPSAxLAorCQkJLmlkbGVzdF9pZGxlX2JpdCA9IE9NQVAyNFhYX1NUX0dQSU9TX1NISUZULAorCQl9LAorCX0sCisJLnNsYXZlcwkJPSBvbWFwMjQzMF9ncGlvMl9zbGF2ZXMsCisJLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDMwX2dwaW8yX3NsYXZlcyksCisJLmNsYXNzCQk9ICZvbWFwMjQzeF9ncGlvX2h3bW9kX2NsYXNzLAorCS5kZXZfYXR0cgk9ICZncGlvX2Rldl9hdHRyLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDMwKSwKK307CisKKy8qIGdwaW8zICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfaXJxX2luZm8gb21hcDI0M3hfZ3BpbzNfaXJxc1tdID0geworCXsgLmlycSA9IDMxIH0sIC8qIElOVF8yNFhYX0dQSU9fQkFOSzMgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAyNDMwX2dwaW8zX3NsYXZlc1tdID0geworCSZvbWFwMjQzMF9sNF93a3VwX19ncGlvMywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQzMF9ncGlvM19od21vZCA9IHsKKwkubmFtZQkJPSAiZ3BpbzMiLAorCS5tcHVfaXJxcwk9IG9tYXAyNDN4X2dwaW8zX2lycXMsCisJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0M3hfZ3BpbzNfaXJxcyksCisJLm1haW5fY2xrCT0gImdwaW9zX2ZjayIsCisJLnByY20JCT0geworCQkub21hcDIgPSB7CisJCQkucHJjbV9yZWdfaWQgPSAxLAorCQkJLm1vZHVsZV9iaXQgPSBPTUFQMjRYWF9FTl9HUElPU19TSElGVCwKKwkJCS5tb2R1bGVfb2ZmcyA9IFdLVVBfTU9ELAorCQkJLmlkbGVzdF9yZWdfaWQgPSAxLAorCQkJLmlkbGVzdF9pZGxlX2JpdCA9IE9NQVAyNFhYX1NUX0dQSU9TX1NISUZULAorCQl9LAorCX0sCisJLnNsYXZlcwkJPSBvbWFwMjQzMF9ncGlvM19zbGF2ZXMsCisJLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDMwX2dwaW8zX3NsYXZlcyksCisJLmNsYXNzCQk9ICZvbWFwMjQzeF9ncGlvX2h3bW9kX2NsYXNzLAorCS5kZXZfYXR0cgk9ICZncGlvX2Rldl9hdHRyLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDMwKSwKK307CisKKy8qIGdwaW80ICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfaXJxX2luZm8gb21hcDI0M3hfZ3BpbzRfaXJxc1tdID0geworCXsgLmlycSA9IDMyIH0sIC8qIElOVF8yNFhYX0dQSU9fQkFOSzQgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAyNDMwX2dwaW80X3NsYXZlc1tdID0geworCSZvbWFwMjQzMF9sNF93a3VwX19ncGlvNCwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQzMF9ncGlvNF9od21vZCA9IHsKKwkubmFtZQkJPSAiZ3BpbzQiLAorCS5tcHVfaXJxcwk9IG9tYXAyNDN4X2dwaW80X2lycXMsCisJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0M3hfZ3BpbzRfaXJxcyksCisJLm1haW5fY2xrCT0gImdwaW9zX2ZjayIsCisJLnByY20JCT0geworCQkub21hcDIgPSB7CisJCQkucHJjbV9yZWdfaWQgPSAxLAorCQkJLm1vZHVsZV9iaXQgPSBPTUFQMjRYWF9FTl9HUElPU19TSElGVCwKKwkJCS5tb2R1bGVfb2ZmcyA9IFdLVVBfTU9ELAorCQkJLmlkbGVzdF9yZWdfaWQgPSAxLAorCQkJLmlkbGVzdF9pZGxlX2JpdCA9IE9NQVAyNFhYX1NUX0dQSU9TX1NISUZULAorCQl9LAorCX0sCisJLnNsYXZlcwkJPSBvbWFwMjQzMF9ncGlvNF9zbGF2ZXMsCisJLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDMwX2dwaW80X3NsYXZlcyksCisJLmNsYXNzCQk9ICZvbWFwMjQzeF9ncGlvX2h3bW9kX2NsYXNzLAorCS5kZXZfYXR0cgk9ICZncGlvX2Rldl9hdHRyLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDMwKSwKK307CisKKy8qIGdwaW81ICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfaXJxX2luZm8gb21hcDI0M3hfZ3BpbzVfaXJxc1tdID0geworCXsgLmlycSA9IDMzIH0sIC8qIElOVF8yNFhYX0dQSU9fQkFOSzUgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAyNDMwX2dwaW81X3NsYXZlc1tdID0geworCSZvbWFwMjQzMF9sNF9jb3JlX19ncGlvNSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQzMF9ncGlvNV9od21vZCA9IHsKKwkubmFtZQkJPSAiZ3BpbzUiLAorCS5tcHVfaXJxcwk9IG9tYXAyNDN4X2dwaW81X2lycXMsCisJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0M3hfZ3BpbzVfaXJxcyksCisJLm1haW5fY2xrCT0gImdwaW81X2ZjayIsCisJLnByY20JCT0geworCQkub21hcDIgPSB7CisJCQkucHJjbV9yZWdfaWQgPSAyLAorCQkJLm1vZHVsZV9iaXQgPSBPTUFQMjQzMF9FTl9HUElPNV9TSElGVCwKKwkJCS5tb2R1bGVfb2ZmcyA9IENPUkVfTU9ELAorCQkJLmlkbGVzdF9yZWdfaWQgPSAyLAorCQkJLmlkbGVzdF9pZGxlX2JpdCA9IE9NQVAyNDMwX1NUX0dQSU81X1NISUZULAorCQl9LAorCX0sCisJLnNsYXZlcwkJPSBvbWFwMjQzMF9ncGlvNV9zbGF2ZXMsCisJLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDMwX2dwaW81X3NsYXZlcyksCisJLmNsYXNzCQk9ICZvbWFwMjQzeF9ncGlvX2h3bW9kX2NsYXNzLAorCS5kZXZfYXR0cgk9ICZncGlvX2Rldl9hdHRyLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDMwKSwKK307CisKKy8qIGRtYV9zeXN0ZW0gKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzc19zeXNjb25maWcgb21hcDI0MzBfZG1hX3N5c2MgPSB7CisJLnJldl9vZmZzCT0gMHgwMDAwLAorCS5zeXNjX29mZnMJPSAweDAwMmMsCisJLnN5c3Nfb2Zmcwk9IDB4MDAyOCwKKwkuc3lzY19mbGFncwk9IChTWVNDX0hBU19TT0ZUUkVTRVQgfCBTWVNDX0hBU19NSURMRU1PREUgfAorCQkJICAgU1lTQ19IQVNfQ0xPQ0tBQ1RJVklUWSB8IFNZU0NfSEFTX0VNVUZSRUUgfAorCQkJICAgU1lTQ19IQVNfQVVUT0lETEUpLAorCS5pZGxlbW9kZXMJPSAoTVNUQU5EQllfRk9SQ0UgfCBNU1RBTkRCWV9OTyB8IE1TVEFOREJZX1NNQVJUKSwKKwkuc3lzY19maWVsZHMJPSAmb21hcF9od21vZF9zeXNjX3R5cGUxLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzIG9tYXAyNDMwX2RtYV9od21vZF9jbGFzcyA9IHsKKwkubmFtZSA9ICJkbWEiLAorCS5zeXNjID0gJm9tYXAyNDMwX2RtYV9zeXNjLAorfTsKKworLyogZG1hIGF0dHJpYnV0ZXMgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9kbWFfZGV2X2F0dHIgZG1hX2Rldl9hdHRyID0geworCS5kZXZfY2FwcyAgPSBSRVNFUlZFX0NIQU5ORUwgfCBETUFfTElOS0VEX0xDSCB8IEdMT0JBTF9QUklPUklUWSB8CisJCQkJSVNfQ1NTQV8zMiB8IElTX0NEU0FfMzIgfCBJU19SV19QUklPUklUWSwKKwkubGNoX2NvdW50ID0gMzIsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfaXJxX2luZm8gb21hcDI0MzBfZG1hX3N5c3RlbV9pcnFzW10gPSB7CisJeyAubmFtZSA9ICIwIiwgLmlycSA9IDEyIH0sIC8qIElOVF8yNFhYX1NETUFfSVJRMCAqLworCXsgLm5hbWUgPSAiMSIsIC5pcnEgPSAxMyB9LCAvKiBJTlRfMjRYWF9TRE1BX0lSUTEgKi8KKwl7IC5uYW1lID0gIjIiLCAuaXJxID0gMTQgfSwgLyogSU5UXzI0WFhfU0RNQV9JUlEyICovCisJeyAubmFtZSA9ICIzIiwgLmlycSA9IDE1IH0sIC8qIElOVF8yNFhYX1NETUFfSVJRMyAqLworfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDI0MzBfZG1hX3N5c3RlbV9hZGRyc1tdID0geworCXsKKwkJLnBhX3N0YXJ0CT0gMHg0ODA1NjAwMCwKKwkJLnBhX2VuZAkJPSAweDRhMDU2MGZmLAorCQkuZmxhZ3MJCT0gQUREUl9UWVBFX1JUCisJfSwKK307CisKKy8qIGRtYV9zeXN0ZW0gLT4gTDMgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDI0MzBfZG1hX3N5c3RlbV9fbDMgPSB7CisJLm1hc3RlcgkJPSAmb21hcDI0MzBfZG1hX3N5c3RlbV9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXAyNDMwX2wzX21haW5faHdtb2QsCisJLmNsawkJPSAiY29yZV9sM19jayIsCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKK307CisKKy8qIGRtYV9zeXN0ZW0gbWFzdGVyIHBvcnRzICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwMjQzMF9kbWFfc3lzdGVtX21hc3RlcnNbXSA9IHsKKwkmb21hcDI0MzBfZG1hX3N5c3RlbV9fbDMsCit9OworCisvKiBsNF9jb3JlIC0+IGRtYV9zeXN0ZW0gKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDI0MzBfbDRfY29yZV9fZG1hX3N5c3RlbSA9IHsKKwkubWFzdGVyCQk9ICZvbWFwMjQzMF9sNF9jb3JlX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDI0MzBfZG1hX3N5c3RlbV9od21vZCwKKwkuY2xrCQk9ICJzZG1hX2ljayIsCisJLmFkZHIJCT0gb21hcDI0MzBfZG1hX3N5c3RlbV9hZGRycywKKwkuYWRkcl9jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDMwX2RtYV9zeXN0ZW1fYWRkcnMpLAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCit9OworCisvKiBkbWFfc3lzdGVtIHNsYXZlIHBvcnRzICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwMjQzMF9kbWFfc3lzdGVtX3NsYXZlc1tdID0geworCSZvbWFwMjQzMF9sNF9jb3JlX19kbWFfc3lzdGVtLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDMwX2RtYV9zeXN0ZW1faHdtb2QgPSB7CisJLm5hbWUJCT0gImRtYSIsCisJLmNsYXNzCQk9ICZvbWFwMjQzMF9kbWFfaHdtb2RfY2xhc3MsCisJLm1wdV9pcnFzCT0gb21hcDI0MzBfZG1hX3N5c3RlbV9pcnFzLAorCS5tcHVfaXJxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDMwX2RtYV9zeXN0ZW1faXJxcyksCisJLm1haW5fY2xrCT0gImNvcmVfbDNfY2siLAorCS5zbGF2ZXMJCT0gb21hcDI0MzBfZG1hX3N5c3RlbV9zbGF2ZXMsCisJLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDMwX2RtYV9zeXN0ZW1fc2xhdmVzKSwKKwkubWFzdGVycwk9IG9tYXAyNDMwX2RtYV9zeXN0ZW1fbWFzdGVycywKKwkubWFzdGVyc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDMwX2RtYV9zeXN0ZW1fbWFzdGVycyksCisJLmRldl9hdHRyCT0gJmRtYV9kZXZfYXR0ciwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQzMCksCisJLmZsYWdzCQk9IEhXTU9EX05PX0lETEVTVCwKK307CisKIHN0YXRpYyBfX2luaXRkYXRhIHN0cnVjdCBvbWFwX2h3bW9kICpvbWFwMjQzMF9od21vZHNbXSA9IHsKIAkmb21hcDI0MzBfbDNfbWFpbl9od21vZCwKIAkmb21hcDI0MzBfbDRfY29yZV9od21vZCwKQEAgLTQyOCw2ICs5MjksMTggQEAKIAkmb21hcDI0MzBfdWFydDFfaHdtb2QsCiAJJm9tYXAyNDMwX3VhcnQyX2h3bW9kLAogCSZvbWFwMjQzMF91YXJ0M19od21vZCwKKwkmb21hcDI0MzBfaTJjMV9od21vZCwKKwkmb21hcDI0MzBfaTJjMl9od21vZCwKKworCS8qIGdwaW8gY2xhc3MgKi8KKwkmb21hcDI0MzBfZ3BpbzFfaHdtb2QsCisJJm9tYXAyNDMwX2dwaW8yX2h3bW9kLAorCSZvbWFwMjQzMF9ncGlvM19od21vZCwKKwkmb21hcDI0MzBfZ3BpbzRfaHdtb2QsCisJJm9tYXAyNDMwX2dwaW81X2h3bW9kLAorCisJLyogZG1hX3N5c3RlbSBjbGFzcyovCisJJm9tYXAyNDMwX2RtYV9zeXN0ZW1faHdtb2QsCiAJTlVMTCwKIH07CiAKQEAgLTQzNSw1ICs5NDgsMyBAQAogewogCXJldHVybiBvbWFwX2h3bW9kX2luaXQob21hcDI0MzBfaHdtb2RzKTsKIH0KLQotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfM3h4eF9kYXRhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfM3h4eF9kYXRhLmMKaW5kZXggY2I5N2VjZi4uOGQ4MTgxMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzN4eHhfZGF0YS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF8zeHh4X2RhdGEuYwpAQCAtMTgsMTEgKzE4LDE2IEBACiAjaW5jbHVkZSA8cGxhdC9jcHUuaD4KICNpbmNsdWRlIDxwbGF0L2RtYS5oPgogI2luY2x1ZGUgPHBsYXQvc2VyaWFsLmg+CisjaW5jbHVkZSA8cGxhdC9sNF8zeHh4Lmg+CisjaW5jbHVkZSA8cGxhdC9pMmMuaD4KKyNpbmNsdWRlIDxwbGF0L2dwaW8uaD4KKyNpbmNsdWRlIDxwbGF0L3NtYXJ0cmVmbGV4Lmg+CiAKICNpbmNsdWRlICJvbWFwX2h3bW9kX2NvbW1vbl9kYXRhLmgiCiAKICNpbmNsdWRlICJwcm0tcmVnYml0cy0zNHh4LmgiCiAjaW5jbHVkZSAiY20tcmVnYml0cy0zNHh4LmgiCisjaW5jbHVkZSAid2RfdGltZXIuaCIKIAogLyoKICAqIE9NQVAzeHh4IGhhcmR3YXJlIG1vZHVsZSBpbnRlZ3JhdGlvbiBkYXRhCkBAIC0zOSw2ICs0NCwxOSBAQAogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAzeHh4X2w0X2NvcmVfaHdtb2Q7CiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDN4eHhfbDRfcGVyX2h3bW9kOwogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAzeHh4X3dkX3RpbWVyMl9od21vZDsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwM3h4eF9pMmMxX2h3bW9kOworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAzeHh4X2kyYzJfaHdtb2Q7CitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDN4eHhfaTJjM19od21vZDsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwM3h4eF9ncGlvMV9od21vZDsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwM3h4eF9ncGlvMl9od21vZDsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwM3h4eF9ncGlvM19od21vZDsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwM3h4eF9ncGlvNF9od21vZDsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwM3h4eF9ncGlvNV9od21vZDsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwM3h4eF9ncGlvNl9od21vZDsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMzR4eF9zcjFfaHdtb2Q7CitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDM0eHhfc3IyX2h3bW9kOworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDN4eHhfZG1hX3N5c3RlbV9od21vZDsKIAogLyogTDMgLT4gTDRfQ09SRSBpbnRlcmZhY2UgKi8KIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDN4eHhfbDNfbWFpbl9fbDRfY29yZSA9IHsKQEAgLTE2OSw5ICsxODcsMTI1IEBACiAJLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKIH07CiAKKy8qIEkyQyBJUCBibG9jayBhZGRyZXNzIHNwYWNlIGxlbmd0aCAoaW4gYnl0ZXMpICovCisjZGVmaW5lIE9NQVAyX0kyQ19BU19MRU4JCTEyOAorCisvKiBMNCBDT1JFIC0+IEkyQzEgaW50ZXJmYWNlICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwM3h4eF9pMmMxX2FkZHJfc3BhY2VbXSA9IHsKKwl7CisJCS5wYV9zdGFydAk9IDB4NDgwNzAwMDAsCisJCS5wYV9lbmQJCT0gMHg0ODA3MDAwMCArIE9NQVAyX0kyQ19BU19MRU4gLSAxLAorCQkuZmxhZ3MJCT0gQUREUl9UWVBFX1JULAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAzX2w0X2NvcmVfX2kyYzEgPSB7CisJLm1hc3RlcgkJPSAmb21hcDN4eHhfbDRfY29yZV9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXAzeHh4X2kyYzFfaHdtb2QsCisJLmNsawkJPSAiaTJjMV9pY2siLAorCS5hZGRyCQk9IG9tYXAzeHh4X2kyYzFfYWRkcl9zcGFjZSwKKwkuYWRkcl9jbnQJPSBBUlJBWV9TSVpFKG9tYXAzeHh4X2kyYzFfYWRkcl9zcGFjZSksCisJLmZ3ID0geworCQkub21hcDIgPSB7CisJCQkubDRfZndfcmVnaW9uICA9IE9NQVAzX0w0X0NPUkVfRldfSTJDMV9SRUdJT04sCisJCQkubDRfcHJvdF9ncm91cCA9IDcsCisJCQkuZmxhZ3MJPSBPTUFQX0ZJUkVXQUxMX0w0LAorCQl9CisJfSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyogTDQgQ09SRSAtPiBJMkMyIGludGVyZmFjZSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDN4eHhfaTJjMl9hZGRyX3NwYWNlW10gPSB7CisJeworCQkucGFfc3RhcnQJPSAweDQ4MDcyMDAwLAorCQkucGFfZW5kCQk9IDB4NDgwNzIwMDAgKyBPTUFQMl9JMkNfQVNfTEVOIC0gMSwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwM19sNF9jb3JlX19pMmMyID0geworCS5tYXN0ZXIJCT0gJm9tYXAzeHh4X2w0X2NvcmVfaHdtb2QsCisJLnNsYXZlCQk9ICZvbWFwM3h4eF9pMmMyX2h3bW9kLAorCS5jbGsJCT0gImkyYzJfaWNrIiwKKwkuYWRkcgkJPSBvbWFwM3h4eF9pMmMyX2FkZHJfc3BhY2UsCisJLmFkZHJfY250CT0gQVJSQVlfU0laRShvbWFwM3h4eF9pMmMyX2FkZHJfc3BhY2UpLAorCS5mdyA9IHsKKwkJLm9tYXAyID0geworCQkJLmw0X2Z3X3JlZ2lvbiAgPSBPTUFQM19MNF9DT1JFX0ZXX0kyQzJfUkVHSU9OLAorCQkJLmw0X3Byb3RfZ3JvdXAgPSA3LAorCQkJLmZsYWdzID0gT01BUF9GSVJFV0FMTF9MNCwKKwkJfQorCX0sCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKK307CisKKy8qIEw0IENPUkUgLT4gSTJDMyBpbnRlcmZhY2UgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9hZGRyX3NwYWNlIG9tYXAzeHh4X2kyYzNfYWRkcl9zcGFjZVtdID0geworCXsKKwkJLnBhX3N0YXJ0CT0gMHg0ODA2MDAwMCwKKwkJLnBhX2VuZAkJPSAweDQ4MDYwMDAwICsgT01BUDJfSTJDX0FTX0xFTiAtIDEsCisJCS5mbGFncwkJPSBBRERSX1RZUEVfUlQsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDNfbDRfY29yZV9faTJjMyA9IHsKKwkubWFzdGVyCQk9ICZvbWFwM3h4eF9sNF9jb3JlX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDN4eHhfaTJjM19od21vZCwKKwkuY2xrCQk9ICJpMmMzX2ljayIsCisJLmFkZHIJCT0gb21hcDN4eHhfaTJjM19hZGRyX3NwYWNlLAorCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDN4eHhfaTJjM19hZGRyX3NwYWNlKSwKKwkuZncgPSB7CisJCS5vbWFwMiA9IHsKKwkJCS5sNF9md19yZWdpb24gID0gT01BUDNfTDRfQ09SRV9GV19JMkMzX1JFR0lPTiwKKwkJCS5sNF9wcm90X2dyb3VwID0gNywKKwkJCS5mbGFncyA9IE9NQVBfRklSRVdBTExfTDQsCisJCX0KKwl9LAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCit9OworCisvKiBMNCBDT1JFIC0+IFNSMSBpbnRlcmZhY2UgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9hZGRyX3NwYWNlIG9tYXAzX3NyMV9hZGRyX3NwYWNlW10gPSB7CisJeworCQkucGFfc3RhcnQJPSBPTUFQMzRYWF9TUjFfQkFTRSwKKwkJLnBhX2VuZAkJPSBPTUFQMzRYWF9TUjFfQkFTRSArIFNaXzFLIC0gMSwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwM19sNF9jb3JlX19zcjEgPSB7CisJLm1hc3RlcgkJPSAmb21hcDN4eHhfbDRfY29yZV9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXAzNHh4X3NyMV9od21vZCwKKwkuY2xrCQk9ICJzcl9sNF9pY2siLAorCS5hZGRyCQk9IG9tYXAzX3NyMV9hZGRyX3NwYWNlLAorCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDNfc3IxX2FkZHJfc3BhY2UpLAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSwKK307CisKKy8qIEw0IENPUkUgLT4gU1IxIGludGVyZmFjZSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDNfc3IyX2FkZHJfc3BhY2VbXSA9IHsKKwl7CisJCS5wYV9zdGFydAk9IE9NQVAzNFhYX1NSMl9CQVNFLAorCQkucGFfZW5kCQk9IE9NQVAzNFhYX1NSMl9CQVNFICsgU1pfMUsgLSAxLAorCQkuZmxhZ3MJCT0gQUREUl9UWVBFX1JULAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAzX2w0X2NvcmVfX3NyMiA9IHsKKwkubWFzdGVyCQk9ICZvbWFwM3h4eF9sNF9jb3JlX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDM0eHhfc3IyX2h3bW9kLAorCS5jbGsJCT0gInNyX2w0X2ljayIsCisJLmFkZHIJCT0gb21hcDNfc3IyX2FkZHJfc3BhY2UsCisJLmFkZHJfY250CT0gQVJSQVlfU0laRShvbWFwM19zcjJfYWRkcl9zcGFjZSksCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVLAorfTsKKwogLyogU2xhdmUgaW50ZXJmYWNlcyBvbiB0aGUgTDRfQ09SRSBpbnRlcmNvbm5lY3QgKi8KIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAzeHh4X2w0X2NvcmVfc2xhdmVzW10gPSB7CiAJJm9tYXAzeHh4X2wzX21haW5fX2w0X2NvcmUsCisJJm9tYXAzX2w0X2NvcmVfX3NyMSwKKwkmb21hcDNfbDRfY29yZV9fc3IyLAogfTsKIAogLyogTWFzdGVyIGludGVyZmFjZXMgb24gdGhlIEw0X0NPUkUgaW50ZXJjb25uZWN0ICovCkBAIC0xNzksNiArMzEzLDkgQEAKIAkmb21hcDN4eHhfbDRfY29yZV9fbDRfd2t1cCwKIAkmb21hcDNfbDRfY29yZV9fdWFydDEsCiAJJm9tYXAzX2w0X2NvcmVfX3VhcnQyLAorCSZvbWFwM19sNF9jb3JlX19pMmMxLAorCSZvbWFwM19sNF9jb3JlX19pMmMyLAorCSZvbWFwM19sNF9jb3JlX19pMmMzLAogfTsKIAogLyogTDQgQ09SRSAqLwpAQCAtMzE1LDkgKzQ1MiwyMiBAQAogCS5zeXNjX2ZpZWxkcyAgICA9ICZvbWFwX2h3bW9kX3N5c2NfdHlwZTEsCiB9OwogCisvKiBJMkMgY29tbW9uICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfY2xhc3Nfc3lzY29uZmlnIGkyY19zeXNjID0geworCS5yZXZfb2Zmcwk9IDB4MDAsCisJLnN5c2Nfb2Zmcwk9IDB4MjAsCisJLnN5c3Nfb2Zmcwk9IDB4MTAsCisJLnN5c2NfZmxhZ3MJPSAoU1lTQ19IQVNfQ0xPQ0tBQ1RJVklUWSB8IFNZU0NfSEFTX1NJRExFTU9ERSB8CisJCQkgICBTWVNDX0hBU19FTkFXQUtFVVAgfCBTWVNDX0hBU19TT0ZUUkVTRVQgfAorCQkJICAgU1lTQ19IQVNfQVVUT0lETEUpLAorCS5pZGxlbW9kZXMJPSAoU0lETEVfRk9SQ0UgfCBTSURMRV9OTyB8IFNJRExFX1NNQVJUKSwKKwkuc3lzY19maWVsZHMgICAgPSAmb21hcF9od21vZF9zeXNjX3R5cGUxLAorfTsKKwogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzIG9tYXAzeHh4X3dkX3RpbWVyX2h3bW9kX2NsYXNzID0gewotCS5uYW1lID0gIndkX3RpbWVyIiwKLQkuc3lzYyA9ICZvbWFwM3h4eF93ZF90aW1lcl9zeXNjLAorCS5uYW1lCQk9ICJ3ZF90aW1lciIsCisJLnN5c2MJCT0gJm9tYXAzeHh4X3dkX3RpbWVyX3N5c2MsCisJLnByZV9zaHV0ZG93bgk9ICZvbWFwMl93ZF90aW1lcl9kaXNhYmxlCiB9OwogCiAvKiB3ZF90aW1lcjIgKi8KQEAgLTUwOSw2ICs2NTksNzAzIEBACiAJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM2MzBFUzEpLAogfTsKIAorc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzIGkyY19jbGFzcyA9IHsKKwkubmFtZSA9ICJpMmMiLAorCS5zeXNjID0gJmkyY19zeXNjLAorfTsKKworLyogSTJDMSAqLworCitzdGF0aWMgc3RydWN0IG9tYXBfaTJjX2Rldl9hdHRyIGkyYzFfZGV2X2F0dHIgPSB7CisJLmZpZm9fZGVwdGgJPSA4LCAvKiBieXRlcyAqLworfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2lycV9pbmZvIGkyYzFfbXB1X2lycXNbXSA9IHsKKwl7IC5pcnEgPSBJTlRfMjRYWF9JMkMxX0lSUSwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9kbWFfaW5mbyBpMmMxX3NkbWFfcmVxc1tdID0geworCXsgLm5hbWUgPSAidHgiLCAuZG1hX3JlcSA9IE9NQVAyNFhYX0RNQV9JMkMxX1RYIH0sCisJeyAubmFtZSA9ICJyeCIsIC5kbWFfcmVxID0gT01BUDI0WFhfRE1BX0kyQzFfUlggfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAzeHh4X2kyYzFfc2xhdmVzW10gPSB7CisJJm9tYXAzX2w0X2NvcmVfX2kyYzEsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDN4eHhfaTJjMV9od21vZCA9IHsKKwkubmFtZQkJPSAiaTJjMSIsCisJLm1wdV9pcnFzCT0gaTJjMV9tcHVfaXJxcywKKwkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShpMmMxX21wdV9pcnFzKSwKKwkuc2RtYV9yZXFzCT0gaTJjMV9zZG1hX3JlcXMsCisJLnNkbWFfcmVxc19jbnQJPSBBUlJBWV9TSVpFKGkyYzFfc2RtYV9yZXFzKSwKKwkubWFpbl9jbGsJPSAiaTJjMV9mY2siLAorCS5wcmNtCQk9IHsKKwkJLm9tYXAyID0geworCQkJLm1vZHVsZV9vZmZzID0gQ09SRV9NT0QsCisJCQkucHJjbV9yZWdfaWQgPSAxLAorCQkJLm1vZHVsZV9iaXQgPSBPTUFQMzQzMF9FTl9JMkMxX1NISUZULAorCQkJLmlkbGVzdF9yZWdfaWQgPSAxLAorCQkJLmlkbGVzdF9pZGxlX2JpdCA9IE9NQVAzNDMwX1NUX0kyQzFfU0hJRlQsCisJCX0sCisJfSwKKwkuc2xhdmVzCQk9IG9tYXAzeHh4X2kyYzFfc2xhdmVzLAorCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwM3h4eF9pMmMxX3NsYXZlcyksCisJLmNsYXNzCQk9ICZpMmNfY2xhc3MsCisJLmRldl9hdHRyCT0gJmkyYzFfZGV2X2F0dHIsCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLAorfTsKKworLyogSTJDMiAqLworCitzdGF0aWMgc3RydWN0IG9tYXBfaTJjX2Rldl9hdHRyIGkyYzJfZGV2X2F0dHIgPSB7CisJLmZpZm9fZGVwdGgJPSA4LCAvKiBieXRlcyAqLworfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2lycV9pbmZvIGkyYzJfbXB1X2lycXNbXSA9IHsKKwl7IC5pcnEgPSBJTlRfMjRYWF9JMkMyX0lSUSwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9kbWFfaW5mbyBpMmMyX3NkbWFfcmVxc1tdID0geworCXsgLm5hbWUgPSAidHgiLCAuZG1hX3JlcSA9IE9NQVAyNFhYX0RNQV9JMkMyX1RYIH0sCisJeyAubmFtZSA9ICJyeCIsIC5kbWFfcmVxID0gT01BUDI0WFhfRE1BX0kyQzJfUlggfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAzeHh4X2kyYzJfc2xhdmVzW10gPSB7CisJJm9tYXAzX2w0X2NvcmVfX2kyYzIsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDN4eHhfaTJjMl9od21vZCA9IHsKKwkubmFtZQkJPSAiaTJjMiIsCisJLm1wdV9pcnFzCT0gaTJjMl9tcHVfaXJxcywKKwkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShpMmMyX21wdV9pcnFzKSwKKwkuc2RtYV9yZXFzCT0gaTJjMl9zZG1hX3JlcXMsCisJLnNkbWFfcmVxc19jbnQJPSBBUlJBWV9TSVpFKGkyYzJfc2RtYV9yZXFzKSwKKwkubWFpbl9jbGsJPSAiaTJjMl9mY2siLAorCS5wcmNtCQk9IHsKKwkJLm9tYXAyID0geworCQkJLm1vZHVsZV9vZmZzID0gQ09SRV9NT0QsCisJCQkucHJjbV9yZWdfaWQgPSAxLAorCQkJLm1vZHVsZV9iaXQgPSBPTUFQMzQzMF9FTl9JMkMyX1NISUZULAorCQkJLmlkbGVzdF9yZWdfaWQgPSAxLAorCQkJLmlkbGVzdF9pZGxlX2JpdCA9IE9NQVAzNDMwX1NUX0kyQzJfU0hJRlQsCisJCX0sCisJfSwKKwkuc2xhdmVzCQk9IG9tYXAzeHh4X2kyYzJfc2xhdmVzLAorCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwM3h4eF9pMmMyX3NsYXZlcyksCisJLmNsYXNzCQk9ICZpMmNfY2xhc3MsCisJLmRldl9hdHRyCT0gJmkyYzJfZGV2X2F0dHIsCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLAorfTsKKworLyogSTJDMyAqLworCitzdGF0aWMgc3RydWN0IG9tYXBfaTJjX2Rldl9hdHRyIGkyYzNfZGV2X2F0dHIgPSB7CisJLmZpZm9fZGVwdGgJPSA2NCwgLyogYnl0ZXMgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9pcnFfaW5mbyBpMmMzX21wdV9pcnFzW10gPSB7CisJeyAuaXJxID0gSU5UXzM0WFhfSTJDM19JUlEsIH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfZG1hX2luZm8gaTJjM19zZG1hX3JlcXNbXSA9IHsKKwl7IC5uYW1lID0gInR4IiwgLmRtYV9yZXEgPSBPTUFQMzRYWF9ETUFfSTJDM19UWCB9LAorCXsgLm5hbWUgPSAicngiLCAuZG1hX3JlcSA9IE9NQVAzNFhYX0RNQV9JMkMzX1JYIH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwM3h4eF9pMmMzX3NsYXZlc1tdID0geworCSZvbWFwM19sNF9jb3JlX19pMmMzLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAzeHh4X2kyYzNfaHdtb2QgPSB7CisJLm5hbWUJCT0gImkyYzMiLAorCS5tcHVfaXJxcwk9IGkyYzNfbXB1X2lycXMsCisJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUoaTJjM19tcHVfaXJxcyksCisJLnNkbWFfcmVxcwk9IGkyYzNfc2RtYV9yZXFzLAorCS5zZG1hX3JlcXNfY250CT0gQVJSQVlfU0laRShpMmMzX3NkbWFfcmVxcyksCisJLm1haW5fY2xrCT0gImkyYzNfZmNrIiwKKwkucHJjbQkJPSB7CisJCS5vbWFwMiA9IHsKKwkJCS5tb2R1bGVfb2ZmcyA9IENPUkVfTU9ELAorCQkJLnByY21fcmVnX2lkID0gMSwKKwkJCS5tb2R1bGVfYml0ID0gT01BUDM0MzBfRU5fSTJDM19TSElGVCwKKwkJCS5pZGxlc3RfcmVnX2lkID0gMSwKKwkJCS5pZGxlc3RfaWRsZV9iaXQgPSBPTUFQMzQzMF9TVF9JMkMzX1NISUZULAorCQl9LAorCX0sCisJLnNsYXZlcwkJPSBvbWFwM3h4eF9pMmMzX3NsYXZlcywKKwkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDN4eHhfaTJjM19zbGF2ZXMpLAorCS5jbGFzcwkJPSAmaTJjX2NsYXNzLAorCS5kZXZfYXR0cgk9ICZpMmMzX2Rldl9hdHRyLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKK307CisKKy8qIGw0X3drdXAgLT4gZ3BpbzEgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9hZGRyX3NwYWNlIG9tYXAzeHh4X2dwaW8xX2FkZHJzW10gPSB7CisJeworCQkucGFfc3RhcnQJPSAweDQ4MzEwMDAwLAorCQkucGFfZW5kCQk9IDB4NDgzMTAxZmYsCisJCS5mbGFncwkJPSBBRERSX1RZUEVfUlQKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwM3h4eF9sNF93a3VwX19ncGlvMSA9IHsKKwkubWFzdGVyCQk9ICZvbWFwM3h4eF9sNF93a3VwX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDN4eHhfZ3BpbzFfaHdtb2QsCisJLmFkZHIJCT0gb21hcDN4eHhfZ3BpbzFfYWRkcnMsCisJLmFkZHJfY250CT0gQVJSQVlfU0laRShvbWFwM3h4eF9ncGlvMV9hZGRycyksCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKK307CisKKy8qIGw0X3BlciAtPiBncGlvMiAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDN4eHhfZ3BpbzJfYWRkcnNbXSA9IHsKKwl7CisJCS5wYV9zdGFydAk9IDB4NDkwNTAwMDAsCisJCS5wYV9lbmQJCT0gMHg0OTA1MDFmZiwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAzeHh4X2w0X3Blcl9fZ3BpbzIgPSB7CisJLm1hc3RlcgkJPSAmb21hcDN4eHhfbDRfcGVyX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDN4eHhfZ3BpbzJfaHdtb2QsCisJLmFkZHIJCT0gb21hcDN4eHhfZ3BpbzJfYWRkcnMsCisJLmFkZHJfY250CT0gQVJSQVlfU0laRShvbWFwM3h4eF9ncGlvMl9hZGRycyksCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKK307CisKKy8qIGw0X3BlciAtPiBncGlvMyAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDN4eHhfZ3BpbzNfYWRkcnNbXSA9IHsKKwl7CisJCS5wYV9zdGFydAk9IDB4NDkwNTIwMDAsCisJCS5wYV9lbmQJCT0gMHg0OTA1MjFmZiwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAzeHh4X2w0X3Blcl9fZ3BpbzMgPSB7CisJLm1hc3RlcgkJPSAmb21hcDN4eHhfbDRfcGVyX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDN4eHhfZ3BpbzNfaHdtb2QsCisJLmFkZHIJCT0gb21hcDN4eHhfZ3BpbzNfYWRkcnMsCisJLmFkZHJfY250CT0gQVJSQVlfU0laRShvbWFwM3h4eF9ncGlvM19hZGRycyksCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKK307CisKKy8qIGw0X3BlciAtPiBncGlvNCAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDN4eHhfZ3BpbzRfYWRkcnNbXSA9IHsKKwl7CisJCS5wYV9zdGFydAk9IDB4NDkwNTQwMDAsCisJCS5wYV9lbmQJCT0gMHg0OTA1NDFmZiwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAzeHh4X2w0X3Blcl9fZ3BpbzQgPSB7CisJLm1hc3RlcgkJPSAmb21hcDN4eHhfbDRfcGVyX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDN4eHhfZ3BpbzRfaHdtb2QsCisJLmFkZHIJCT0gb21hcDN4eHhfZ3BpbzRfYWRkcnMsCisJLmFkZHJfY250CT0gQVJSQVlfU0laRShvbWFwM3h4eF9ncGlvNF9hZGRycyksCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKK307CisKKy8qIGw0X3BlciAtPiBncGlvNSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDN4eHhfZ3BpbzVfYWRkcnNbXSA9IHsKKwl7CisJCS5wYV9zdGFydAk9IDB4NDkwNTYwMDAsCisJCS5wYV9lbmQJCT0gMHg0OTA1NjFmZiwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAzeHh4X2w0X3Blcl9fZ3BpbzUgPSB7CisJLm1hc3RlcgkJPSAmb21hcDN4eHhfbDRfcGVyX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDN4eHhfZ3BpbzVfaHdtb2QsCisJLmFkZHIJCT0gb21hcDN4eHhfZ3BpbzVfYWRkcnMsCisJLmFkZHJfY250CT0gQVJSQVlfU0laRShvbWFwM3h4eF9ncGlvNV9hZGRycyksCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKK307CisKKy8qIGw0X3BlciAtPiBncGlvNiAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDN4eHhfZ3BpbzZfYWRkcnNbXSA9IHsKKwl7CisJCS5wYV9zdGFydAk9IDB4NDkwNTgwMDAsCisJCS5wYV9lbmQJCT0gMHg0OTA1ODFmZiwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAzeHh4X2w0X3Blcl9fZ3BpbzYgPSB7CisJLm1hc3RlcgkJPSAmb21hcDN4eHhfbDRfcGVyX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDN4eHhfZ3BpbzZfaHdtb2QsCisJLmFkZHIJCT0gb21hcDN4eHhfZ3BpbzZfYWRkcnMsCisJLmFkZHJfY250CT0gQVJSQVlfU0laRShvbWFwM3h4eF9ncGlvNl9hZGRycyksCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKK307CisKKy8qCisgKiAnZ3BpbycgY2xhc3MKKyAqIGdlbmVyYWwgcHVycG9zZSBpbyBtb2R1bGUKKyAqLworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfY2xhc3Nfc3lzY29uZmlnIG9tYXAzeHh4X2dwaW9fc3lzYyA9IHsKKwkucmV2X29mZnMJPSAweDAwMDAsCisJLnN5c2Nfb2Zmcwk9IDB4MDAxMCwKKwkuc3lzc19vZmZzCT0gMHgwMDE0LAorCS5zeXNjX2ZsYWdzCT0gKFNZU0NfSEFTX0VOQVdBS0VVUCB8IFNZU0NfSEFTX1NJRExFTU9ERSB8CisJCQkgICBTWVNDX0hBU19TT0ZUUkVTRVQgfCBTWVNDX0hBU19BVVRPSURMRSksCisJLmlkbGVtb2Rlcwk9IChTSURMRV9GT1JDRSB8IFNJRExFX05PIHwgU0lETEVfU01BUlQpLAorCS5zeXNjX2ZpZWxkcyAgICA9ICZvbWFwX2h3bW9kX3N5c2NfdHlwZTEsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfY2xhc3Mgb21hcDN4eHhfZ3Bpb19od21vZF9jbGFzcyA9IHsKKwkubmFtZSA9ICJncGlvIiwKKwkuc3lzYyA9ICZvbWFwM3h4eF9ncGlvX3N5c2MsCisJLnJldiA9IDEsCit9OworCisvKiBncGlvX2Rldl9hdHRyKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9ncGlvX2Rldl9hdHRyIGdwaW9fZGV2X2F0dHIgPSB7CisJLmJhbmtfd2lkdGggPSAzMiwKKwkuZGJja19mbGFnID0gdHJ1ZSwKK307CisKKy8qIGdwaW8xICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfaXJxX2luZm8gb21hcDN4eHhfZ3BpbzFfaXJxc1tdID0geworCXsgLmlycSA9IDI5IH0sIC8qIElOVF8zNFhYX0dQSU9fQkFOSzEgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vcHRfY2xrIGdwaW8xX29wdF9jbGtzW10gPSB7CisJeyAucm9sZSA9ICJkYmNsayIsIC5jbGsgPSAiZ3BpbzFfZGJjayIsIH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwM3h4eF9ncGlvMV9zbGF2ZXNbXSA9IHsKKwkmb21hcDN4eHhfbDRfd2t1cF9fZ3BpbzEsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDN4eHhfZ3BpbzFfaHdtb2QgPSB7CisJLm5hbWUJCT0gImdwaW8xIiwKKwkubXB1X2lycXMJPSBvbWFwM3h4eF9ncGlvMV9pcnFzLAorCS5tcHVfaXJxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAzeHh4X2dwaW8xX2lycXMpLAorCS5tYWluX2Nsawk9ICJncGlvMV9pY2siLAorCS5vcHRfY2xrcwk9IGdwaW8xX29wdF9jbGtzLAorCS5vcHRfY2xrc19jbnQJPSBBUlJBWV9TSVpFKGdwaW8xX29wdF9jbGtzKSwKKwkucHJjbQkJPSB7CisJCS5vbWFwMiA9IHsKKwkJCS5wcmNtX3JlZ19pZCA9IDEsCisJCQkubW9kdWxlX2JpdCA9IE9NQVAzNDMwX0VOX0dQSU8xX1NISUZULAorCQkJLm1vZHVsZV9vZmZzID0gV0tVUF9NT0QsCisJCQkuaWRsZXN0X3JlZ19pZCA9IDEsCisJCQkuaWRsZXN0X2lkbGVfYml0ID0gT01BUDM0MzBfU1RfR1BJTzFfU0hJRlQsCisJCX0sCisJfSwKKwkuc2xhdmVzCQk9IG9tYXAzeHh4X2dwaW8xX3NsYXZlcywKKwkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDN4eHhfZ3BpbzFfc2xhdmVzKSwKKwkuY2xhc3MJCT0gJm9tYXAzeHh4X2dwaW9faHdtb2RfY2xhc3MsCisJLmRldl9hdHRyCT0gJmdwaW9fZGV2X2F0dHIsCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLAorfTsKKworLyogZ3BpbzIgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9pcnFfaW5mbyBvbWFwM3h4eF9ncGlvMl9pcnFzW10gPSB7CisJeyAuaXJxID0gMzAgfSwgLyogSU5UXzM0WFhfR1BJT19CQU5LMiAqLworfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29wdF9jbGsgZ3BpbzJfb3B0X2Nsa3NbXSA9IHsKKwl7IC5yb2xlID0gImRiY2xrIiwgLmNsayA9ICJncGlvMl9kYmNrIiwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAzeHh4X2dwaW8yX3NsYXZlc1tdID0geworCSZvbWFwM3h4eF9sNF9wZXJfX2dwaW8yLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAzeHh4X2dwaW8yX2h3bW9kID0geworCS5uYW1lCQk9ICJncGlvMiIsCisJLm1wdV9pcnFzCT0gb21hcDN4eHhfZ3BpbzJfaXJxcywKKwkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwM3h4eF9ncGlvMl9pcnFzKSwKKwkubWFpbl9jbGsJPSAiZ3BpbzJfaWNrIiwKKwkub3B0X2Nsa3MJPSBncGlvMl9vcHRfY2xrcywKKwkub3B0X2Nsa3NfY250CT0gQVJSQVlfU0laRShncGlvMl9vcHRfY2xrcyksCisJLnByY20JCT0geworCQkub21hcDIgPSB7CisJCQkucHJjbV9yZWdfaWQgPSAxLAorCQkJLm1vZHVsZV9iaXQgPSBPTUFQMzQzMF9FTl9HUElPMl9TSElGVCwKKwkJCS5tb2R1bGVfb2ZmcyA9IE9NQVAzNDMwX1BFUl9NT0QsCisJCQkuaWRsZXN0X3JlZ19pZCA9IDEsCisJCQkuaWRsZXN0X2lkbGVfYml0ID0gT01BUDM0MzBfU1RfR1BJTzJfU0hJRlQsCisJCX0sCisJfSwKKwkuc2xhdmVzCQk9IG9tYXAzeHh4X2dwaW8yX3NsYXZlcywKKwkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDN4eHhfZ3BpbzJfc2xhdmVzKSwKKwkuY2xhc3MJCT0gJm9tYXAzeHh4X2dwaW9faHdtb2RfY2xhc3MsCisJLmRldl9hdHRyCT0gJmdwaW9fZGV2X2F0dHIsCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLAorfTsKKworLyogZ3BpbzMgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9pcnFfaW5mbyBvbWFwM3h4eF9ncGlvM19pcnFzW10gPSB7CisJeyAuaXJxID0gMzEgfSwgLyogSU5UXzM0WFhfR1BJT19CQU5LMyAqLworfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29wdF9jbGsgZ3BpbzNfb3B0X2Nsa3NbXSA9IHsKKwl7IC5yb2xlID0gImRiY2xrIiwgLmNsayA9ICJncGlvM19kYmNrIiwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAzeHh4X2dwaW8zX3NsYXZlc1tdID0geworCSZvbWFwM3h4eF9sNF9wZXJfX2dwaW8zLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAzeHh4X2dwaW8zX2h3bW9kID0geworCS5uYW1lCQk9ICJncGlvMyIsCisJLm1wdV9pcnFzCT0gb21hcDN4eHhfZ3BpbzNfaXJxcywKKwkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwM3h4eF9ncGlvM19pcnFzKSwKKwkubWFpbl9jbGsJPSAiZ3BpbzNfaWNrIiwKKwkub3B0X2Nsa3MJPSBncGlvM19vcHRfY2xrcywKKwkub3B0X2Nsa3NfY250CT0gQVJSQVlfU0laRShncGlvM19vcHRfY2xrcyksCisJLnByY20JCT0geworCQkub21hcDIgPSB7CisJCQkucHJjbV9yZWdfaWQgPSAxLAorCQkJLm1vZHVsZV9iaXQgPSBPTUFQMzQzMF9FTl9HUElPM19TSElGVCwKKwkJCS5tb2R1bGVfb2ZmcyA9IE9NQVAzNDMwX1BFUl9NT0QsCisJCQkuaWRsZXN0X3JlZ19pZCA9IDEsCisJCQkuaWRsZXN0X2lkbGVfYml0ID0gT01BUDM0MzBfU1RfR1BJTzNfU0hJRlQsCisJCX0sCisJfSwKKwkuc2xhdmVzCQk9IG9tYXAzeHh4X2dwaW8zX3NsYXZlcywKKwkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDN4eHhfZ3BpbzNfc2xhdmVzKSwKKwkuY2xhc3MJCT0gJm9tYXAzeHh4X2dwaW9faHdtb2RfY2xhc3MsCisJLmRldl9hdHRyCT0gJmdwaW9fZGV2X2F0dHIsCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLAorfTsKKworLyogZ3BpbzQgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9pcnFfaW5mbyBvbWFwM3h4eF9ncGlvNF9pcnFzW10gPSB7CisJeyAuaXJxID0gMzIgfSwgLyogSU5UXzM0WFhfR1BJT19CQU5LNCAqLworfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29wdF9jbGsgZ3BpbzRfb3B0X2Nsa3NbXSA9IHsKKwl7IC5yb2xlID0gImRiY2xrIiwgLmNsayA9ICJncGlvNF9kYmNrIiwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAzeHh4X2dwaW80X3NsYXZlc1tdID0geworCSZvbWFwM3h4eF9sNF9wZXJfX2dwaW80LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAzeHh4X2dwaW80X2h3bW9kID0geworCS5uYW1lCQk9ICJncGlvNCIsCisJLm1wdV9pcnFzCT0gb21hcDN4eHhfZ3BpbzRfaXJxcywKKwkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwM3h4eF9ncGlvNF9pcnFzKSwKKwkubWFpbl9jbGsJPSAiZ3BpbzRfaWNrIiwKKwkub3B0X2Nsa3MJPSBncGlvNF9vcHRfY2xrcywKKwkub3B0X2Nsa3NfY250CT0gQVJSQVlfU0laRShncGlvNF9vcHRfY2xrcyksCisJLnByY20JCT0geworCQkub21hcDIgPSB7CisJCQkucHJjbV9yZWdfaWQgPSAxLAorCQkJLm1vZHVsZV9iaXQgPSBPTUFQMzQzMF9FTl9HUElPNF9TSElGVCwKKwkJCS5tb2R1bGVfb2ZmcyA9IE9NQVAzNDMwX1BFUl9NT0QsCisJCQkuaWRsZXN0X3JlZ19pZCA9IDEsCisJCQkuaWRsZXN0X2lkbGVfYml0ID0gT01BUDM0MzBfU1RfR1BJTzRfU0hJRlQsCisJCX0sCisJfSwKKwkuc2xhdmVzCQk9IG9tYXAzeHh4X2dwaW80X3NsYXZlcywKKwkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDN4eHhfZ3BpbzRfc2xhdmVzKSwKKwkuY2xhc3MJCT0gJm9tYXAzeHh4X2dwaW9faHdtb2RfY2xhc3MsCisJLmRldl9hdHRyCT0gJmdwaW9fZGV2X2F0dHIsCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLAorfTsKKworLyogZ3BpbzUgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9pcnFfaW5mbyBvbWFwM3h4eF9ncGlvNV9pcnFzW10gPSB7CisJeyAuaXJxID0gMzMgfSwgLyogSU5UXzM0WFhfR1BJT19CQU5LNSAqLworfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29wdF9jbGsgZ3BpbzVfb3B0X2Nsa3NbXSA9IHsKKwl7IC5yb2xlID0gImRiY2xrIiwgLmNsayA9ICJncGlvNV9kYmNrIiwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAzeHh4X2dwaW81X3NsYXZlc1tdID0geworCSZvbWFwM3h4eF9sNF9wZXJfX2dwaW81LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAzeHh4X2dwaW81X2h3bW9kID0geworCS5uYW1lCQk9ICJncGlvNSIsCisJLm1wdV9pcnFzCT0gb21hcDN4eHhfZ3BpbzVfaXJxcywKKwkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwM3h4eF9ncGlvNV9pcnFzKSwKKwkubWFpbl9jbGsJPSAiZ3BpbzVfaWNrIiwKKwkub3B0X2Nsa3MJPSBncGlvNV9vcHRfY2xrcywKKwkub3B0X2Nsa3NfY250CT0gQVJSQVlfU0laRShncGlvNV9vcHRfY2xrcyksCisJLnByY20JCT0geworCQkub21hcDIgPSB7CisJCQkucHJjbV9yZWdfaWQgPSAxLAorCQkJLm1vZHVsZV9iaXQgPSBPTUFQMzQzMF9FTl9HUElPNV9TSElGVCwKKwkJCS5tb2R1bGVfb2ZmcyA9IE9NQVAzNDMwX1BFUl9NT0QsCisJCQkuaWRsZXN0X3JlZ19pZCA9IDEsCisJCQkuaWRsZXN0X2lkbGVfYml0ID0gT01BUDM0MzBfU1RfR1BJTzVfU0hJRlQsCisJCX0sCisJfSwKKwkuc2xhdmVzCQk9IG9tYXAzeHh4X2dwaW81X3NsYXZlcywKKwkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDN4eHhfZ3BpbzVfc2xhdmVzKSwKKwkuY2xhc3MJCT0gJm9tYXAzeHh4X2dwaW9faHdtb2RfY2xhc3MsCisJLmRldl9hdHRyCT0gJmdwaW9fZGV2X2F0dHIsCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLAorfTsKKworLyogZ3BpbzYgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9pcnFfaW5mbyBvbWFwM3h4eF9ncGlvNl9pcnFzW10gPSB7CisJeyAuaXJxID0gMzQgfSwgLyogSU5UXzM0WFhfR1BJT19CQU5LNiAqLworfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29wdF9jbGsgZ3BpbzZfb3B0X2Nsa3NbXSA9IHsKKwl7IC5yb2xlID0gImRiY2xrIiwgLmNsayA9ICJncGlvNl9kYmNrIiwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAzeHh4X2dwaW82X3NsYXZlc1tdID0geworCSZvbWFwM3h4eF9sNF9wZXJfX2dwaW82LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAzeHh4X2dwaW82X2h3bW9kID0geworCS5uYW1lCQk9ICJncGlvNiIsCisJLm1wdV9pcnFzCT0gb21hcDN4eHhfZ3BpbzZfaXJxcywKKwkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwM3h4eF9ncGlvNl9pcnFzKSwKKwkubWFpbl9jbGsJPSAiZ3BpbzZfaWNrIiwKKwkub3B0X2Nsa3MJPSBncGlvNl9vcHRfY2xrcywKKwkub3B0X2Nsa3NfY250CT0gQVJSQVlfU0laRShncGlvNl9vcHRfY2xrcyksCisJLnByY20JCT0geworCQkub21hcDIgPSB7CisJCQkucHJjbV9yZWdfaWQgPSAxLAorCQkJLm1vZHVsZV9iaXQgPSBPTUFQMzQzMF9FTl9HUElPNl9TSElGVCwKKwkJCS5tb2R1bGVfb2ZmcyA9IE9NQVAzNDMwX1BFUl9NT0QsCisJCQkuaWRsZXN0X3JlZ19pZCA9IDEsCisJCQkuaWRsZXN0X2lkbGVfYml0ID0gT01BUDM0MzBfU1RfR1BJTzZfU0hJRlQsCisJCX0sCisJfSwKKwkuc2xhdmVzCQk9IG9tYXAzeHh4X2dwaW82X3NsYXZlcywKKwkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDN4eHhfZ3BpbzZfc2xhdmVzKSwKKwkuY2xhc3MJCT0gJm9tYXAzeHh4X2dwaW9faHdtb2RfY2xhc3MsCisJLmRldl9hdHRyCT0gJmdwaW9fZGV2X2F0dHIsCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLAorfTsKKworLyogZG1hX3N5c3RlbSAtPiBMMyAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwM3h4eF9kbWFfc3lzdGVtX19sMyA9IHsKKwkubWFzdGVyCQk9ICZvbWFwM3h4eF9kbWFfc3lzdGVtX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDN4eHhfbDNfbWFpbl9od21vZCwKKwkuY2xrCQk9ICJjb3JlX2wzX2ljayIsCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKK307CisKKy8qIGRtYSBhdHRyaWJ1dGVzICovCitzdGF0aWMgc3RydWN0IG9tYXBfZG1hX2Rldl9hdHRyIGRtYV9kZXZfYXR0ciA9IHsKKwkuZGV2X2NhcHMgID0gUkVTRVJWRV9DSEFOTkVMIHwgRE1BX0xJTktFRF9MQ0ggfCBHTE9CQUxfUFJJT1JJVFkgfAorCQkJCUlTX0NTU0FfMzIgfCBJU19DRFNBXzMyIHwgSVNfUldfUFJJT1JJVFksCisJLmxjaF9jb3VudCA9IDMyLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzX3N5c2NvbmZpZyBvbWFwM3h4eF9kbWFfc3lzYyA9IHsKKwkucmV2X29mZnMJPSAweDAwMDAsCisJLnN5c2Nfb2Zmcwk9IDB4MDAyYywKKwkuc3lzc19vZmZzCT0gMHgwMDI4LAorCS5zeXNjX2ZsYWdzCT0gKFNZU0NfSEFTX1NJRExFTU9ERSB8IFNZU0NfSEFTX1NPRlRSRVNFVCB8CisJCQkgICBTWVNDX0hBU19NSURMRU1PREUgfCBTWVNDX0hBU19DTE9DS0FDVElWSVRZIHwKKwkJCSAgIFNZU0NfSEFTX0VNVUZSRUUgfCBTWVNDX0hBU19BVVRPSURMRSksCisJLmlkbGVtb2Rlcwk9IChTSURMRV9GT1JDRSB8IFNJRExFX05PIHwgU0lETEVfU01BUlQgfAorCQkJICAgTVNUQU5EQllfRk9SQ0UgfCBNU1RBTkRCWV9OTyB8IE1TVEFOREJZX1NNQVJUKSwKKwkuc3lzY19maWVsZHMJPSAmb21hcF9od21vZF9zeXNjX3R5cGUxLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzIG9tYXAzeHh4X2RtYV9od21vZF9jbGFzcyA9IHsKKwkubmFtZSA9ICJkbWEiLAorCS5zeXNjID0gJm9tYXAzeHh4X2RtYV9zeXNjLAorfTsKKworLyogZG1hX3N5c3RlbSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2lycV9pbmZvIG9tYXAzeHh4X2RtYV9zeXN0ZW1faXJxc1tdID0geworCXsgLm5hbWUgPSAiMCIsIC5pcnEgPSAxMiB9LCAvKiBJTlRfMjRYWF9TRE1BX0lSUTAgKi8KKwl7IC5uYW1lID0gIjEiLCAuaXJxID0gMTMgfSwgLyogSU5UXzI0WFhfU0RNQV9JUlExICovCisJeyAubmFtZSA9ICIyIiwgLmlycSA9IDE0IH0sIC8qIElOVF8yNFhYX1NETUFfSVJRMiAqLworCXsgLm5hbWUgPSAiMyIsIC5pcnEgPSAxNSB9LCAvKiBJTlRfMjRYWF9TRE1BX0lSUTMgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9hZGRyX3NwYWNlIG9tYXAzeHh4X2RtYV9zeXN0ZW1fYWRkcnNbXSA9IHsKKwl7CisJCS5wYV9zdGFydAk9IDB4NDgwNTYwMDAsCisJCS5wYV9lbmQJCT0gMHg0YTA1NjBmZiwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVAorCX0sCit9OworCisvKiBkbWFfc3lzdGVtIG1hc3RlciBwb3J0cyAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDN4eHhfZG1hX3N5c3RlbV9tYXN0ZXJzW10gPSB7CisJJm9tYXAzeHh4X2RtYV9zeXN0ZW1fX2wzLAorfTsKKworLyogbDRfY2ZnIC0+IGRtYV9zeXN0ZW0gKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDN4eHhfbDRfY29yZV9fZG1hX3N5c3RlbSA9IHsKKwkubWFzdGVyCQk9ICZvbWFwM3h4eF9sNF9jb3JlX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDN4eHhfZG1hX3N5c3RlbV9od21vZCwKKwkuY2xrCQk9ICJjb3JlX2w0X2ljayIsCisJLmFkZHIJCT0gb21hcDN4eHhfZG1hX3N5c3RlbV9hZGRycywKKwkuYWRkcl9jbnQJPSBBUlJBWV9TSVpFKG9tYXAzeHh4X2RtYV9zeXN0ZW1fYWRkcnMpLAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCit9OworCisvKiBkbWFfc3lzdGVtIHNsYXZlIHBvcnRzICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwM3h4eF9kbWFfc3lzdGVtX3NsYXZlc1tdID0geworCSZvbWFwM3h4eF9sNF9jb3JlX19kbWFfc3lzdGVtLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAzeHh4X2RtYV9zeXN0ZW1faHdtb2QgPSB7CisJLm5hbWUJCT0gImRtYSIsCisJLmNsYXNzCQk9ICZvbWFwM3h4eF9kbWFfaHdtb2RfY2xhc3MsCisJLm1wdV9pcnFzCT0gb21hcDN4eHhfZG1hX3N5c3RlbV9pcnFzLAorCS5tcHVfaXJxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAzeHh4X2RtYV9zeXN0ZW1faXJxcyksCisJLm1haW5fY2xrCT0gImNvcmVfbDNfaWNrIiwKKwkucHJjbSA9IHsKKwkJLm9tYXAyID0geworCQkJLm1vZHVsZV9vZmZzCQk9IENPUkVfTU9ELAorCQkJLnByY21fcmVnX2lkCQk9IDEsCisJCQkubW9kdWxlX2JpdAkJPSBPTUFQMzQzMF9TVF9TRE1BX1NISUZULAorCQkJLmlkbGVzdF9yZWdfaWQJCT0gMSwKKwkJCS5pZGxlc3RfaWRsZV9iaXQJPSBPTUFQMzQzMF9TVF9TRE1BX1NISUZULAorCQl9LAorCX0sCisJLnNsYXZlcwkJPSBvbWFwM3h4eF9kbWFfc3lzdGVtX3NsYXZlcywKKwkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDN4eHhfZG1hX3N5c3RlbV9zbGF2ZXMpLAorCS5tYXN0ZXJzCT0gb21hcDN4eHhfZG1hX3N5c3RlbV9tYXN0ZXJzLAorCS5tYXN0ZXJzX2NudAk9IEFSUkFZX1NJWkUob21hcDN4eHhfZG1hX3N5c3RlbV9tYXN0ZXJzKSwKKwkuZGV2X2F0dHIJPSAmZG1hX2Rldl9hdHRyLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKKwkuZmxhZ3MJCT0gSFdNT0RfTk9fSURMRVNULAorfTsKKworLyogU1IgY29tbW9uICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfc3lzY19maWVsZHMgb21hcDM0eHhfc3Jfc3lzY19maWVsZHMgPSB7CisJLmNsa2FjdF9zaGlmdAk9IDIwLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzX3N5c2NvbmZpZyBvbWFwMzR4eF9zcl9zeXNjID0geworCS5zeXNjX29mZnMJPSAweDI0LAorCS5zeXNjX2ZsYWdzCT0gKFNZU0NfSEFTX0NMT0NLQUNUSVZJVFkgfCBTWVNDX05PX0NBQ0hFKSwKKwkuY2xvY2thY3QJPSBDTE9DS0FDVF9URVNUX0lDTEssCisJLnN5c2NfZmllbGRzCT0gJm9tYXAzNHh4X3NyX3N5c2NfZmllbGRzLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzIG9tYXAzNHh4X3NtYXJ0cmVmbGV4X2h3bW9kX2NsYXNzID0geworCS5uYW1lID0gInNtYXJ0cmVmbGV4IiwKKwkuc3lzYyA9ICZvbWFwMzR4eF9zcl9zeXNjLAorCS5yZXYgID0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9zeXNjX2ZpZWxkcyBvbWFwMzZ4eF9zcl9zeXNjX2ZpZWxkcyA9IHsKKwkuc2lkbGVfc2hpZnQJPSAyNCwKKwkuZW53a3VwX3NoaWZ0CT0gMjYKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzc19zeXNjb25maWcgb21hcDM2eHhfc3Jfc3lzYyA9IHsKKwkuc3lzY19vZmZzCT0gMHgzOCwKKwkuaWRsZW1vZGVzCT0gKFNJRExFX0ZPUkNFIHwgU0lETEVfTk8gfCBTSURMRV9TTUFSVCksCisJLnN5c2NfZmxhZ3MJPSAoU1lTQ19IQVNfU0lETEVNT0RFIHwgU1lTQ19IQVNfRU5BV0FLRVVQIHwKKwkJCVNZU0NfTk9fQ0FDSEUpLAorCS5zeXNjX2ZpZWxkcwk9ICZvbWFwMzZ4eF9zcl9zeXNjX2ZpZWxkcywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzcyBvbWFwMzZ4eF9zbWFydHJlZmxleF9od21vZF9jbGFzcyA9IHsKKwkubmFtZSA9ICJzbWFydHJlZmxleCIsCisJLnN5c2MgPSAmb21hcDM2eHhfc3Jfc3lzYywKKwkucmV2ICA9IDIsCit9OworCisvKiBTUjEgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAzX3NyMV9zbGF2ZXNbXSA9IHsKKwkmb21hcDNfbDRfY29yZV9fc3IxLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAzNHh4X3NyMV9od21vZCA9IHsKKwkubmFtZQkJPSAic3IxX2h3bW9kIiwKKwkuY2xhc3MJCT0gJm9tYXAzNHh4X3NtYXJ0cmVmbGV4X2h3bW9kX2NsYXNzLAorCS5tYWluX2Nsawk9ICJzcjFfZmNrIiwKKwkudmRkX25hbWUJPSAibXB1IiwKKwkucHJjbQkJPSB7CisJCS5vbWFwMiA9IHsKKwkJCS5wcmNtX3JlZ19pZCA9IDEsCisJCQkubW9kdWxlX2JpdCA9IE9NQVAzNDMwX0VOX1NSMV9TSElGVCwKKwkJCS5tb2R1bGVfb2ZmcyA9IFdLVVBfTU9ELAorCQkJLmlkbGVzdF9yZWdfaWQgPSAxLAorCQkJLmlkbGVzdF9pZGxlX2JpdCA9IE9NQVAzNDMwX0VOX1NSMV9TSElGVCwKKwkJfSwKKwl9LAorCS5zbGF2ZXMJCT0gb21hcDNfc3IxX3NsYXZlcywKKwkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDNfc3IxX3NsYXZlcyksCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzBFUzIgfAorCQkJCQlDSElQX0lTX09NQVAzNDMwRVMzXzAgfAorCQkJCQlDSElQX0lTX09NQVAzNDMwRVMzXzEpLAorCS5mbGFncwkJPSBIV01PRF9TRVRfREVGQVVMVF9DTE9DS0FDVCwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMzZ4eF9zcjFfaHdtb2QgPSB7CisJLm5hbWUJCT0gInNyMV9od21vZCIsCisJLmNsYXNzCQk9ICZvbWFwMzZ4eF9zbWFydHJlZmxleF9od21vZF9jbGFzcywKKwkubWFpbl9jbGsJPSAic3IxX2ZjayIsCisJLnZkZF9uYW1lCT0gIm1wdSIsCisJLnByY20JCT0geworCQkub21hcDIgPSB7CisJCQkucHJjbV9yZWdfaWQgPSAxLAorCQkJLm1vZHVsZV9iaXQgPSBPTUFQMzQzMF9FTl9TUjFfU0hJRlQsCisJCQkubW9kdWxlX29mZnMgPSBXS1VQX01PRCwKKwkJCS5pZGxlc3RfcmVnX2lkID0gMSwKKwkJCS5pZGxlc3RfaWRsZV9iaXQgPSBPTUFQMzQzMF9FTl9TUjFfU0hJRlQsCisJCX0sCisJfSwKKwkuc2xhdmVzCQk9IG9tYXAzX3NyMV9zbGF2ZXMsCisJLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAzX3NyMV9zbGF2ZXMpLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNjMwRVMxKSwKK307CisKKy8qIFNSMiAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDNfc3IyX3NsYXZlc1tdID0geworCSZvbWFwM19sNF9jb3JlX19zcjIsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDM0eHhfc3IyX2h3bW9kID0geworCS5uYW1lCQk9ICJzcjJfaHdtb2QiLAorCS5jbGFzcwkJPSAmb21hcDM0eHhfc21hcnRyZWZsZXhfaHdtb2RfY2xhc3MsCisJLm1haW5fY2xrCT0gInNyMl9mY2siLAorCS52ZGRfbmFtZQk9ICJjb3JlIiwKKwkucHJjbQkJPSB7CisJCS5vbWFwMiA9IHsKKwkJCS5wcmNtX3JlZ19pZCA9IDEsCisJCQkubW9kdWxlX2JpdCA9IE9NQVAzNDMwX0VOX1NSMl9TSElGVCwKKwkJCS5tb2R1bGVfb2ZmcyA9IFdLVVBfTU9ELAorCQkJLmlkbGVzdF9yZWdfaWQgPSAxLAorCQkJLmlkbGVzdF9pZGxlX2JpdCA9IE9NQVAzNDMwX0VOX1NSMl9TSElGVCwKKwkJfSwKKwl9LAorCS5zbGF2ZXMJCT0gb21hcDNfc3IyX3NsYXZlcywKKwkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDNfc3IyX3NsYXZlcyksCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzBFUzIgfAorCQkJCQlDSElQX0lTX09NQVAzNDMwRVMzXzAgfAorCQkJCQlDSElQX0lTX09NQVAzNDMwRVMzXzEpLAorCS5mbGFncwkJPSBIV01PRF9TRVRfREVGQVVMVF9DTE9DS0FDVCwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMzZ4eF9zcjJfaHdtb2QgPSB7CisJLm5hbWUJCT0gInNyMl9od21vZCIsCisJLmNsYXNzCQk9ICZvbWFwMzZ4eF9zbWFydHJlZmxleF9od21vZF9jbGFzcywKKwkubWFpbl9jbGsJPSAic3IyX2ZjayIsCisJLnZkZF9uYW1lCT0gImNvcmUiLAorCS5wcmNtCQk9IHsKKwkJLm9tYXAyID0geworCQkJLnByY21fcmVnX2lkID0gMSwKKwkJCS5tb2R1bGVfYml0ID0gT01BUDM0MzBfRU5fU1IyX1NISUZULAorCQkJLm1vZHVsZV9vZmZzID0gV0tVUF9NT0QsCisJCQkuaWRsZXN0X3JlZ19pZCA9IDEsCisJCQkuaWRsZXN0X2lkbGVfYml0ID0gT01BUDM0MzBfRU5fU1IyX1NISUZULAorCQl9LAorCX0sCisJLnNsYXZlcwkJPSBvbWFwM19zcjJfc2xhdmVzLAorCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwM19zcjJfc2xhdmVzKSwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzYzMEVTMSksCit9OworCiBzdGF0aWMgX19pbml0ZGF0YSBzdHJ1Y3Qgb21hcF9od21vZCAqb21hcDN4eHhfaHdtb2RzW10gPSB7CiAJJm9tYXAzeHh4X2wzX21haW5faHdtb2QsCiAJJm9tYXAzeHh4X2w0X2NvcmVfaHdtb2QsCkBAIC01MjEsNiArMTM2OCwyNSBAQAogCSZvbWFwM3h4eF91YXJ0Ml9od21vZCwKIAkmb21hcDN4eHhfdWFydDNfaHdtb2QsCiAJJm9tYXAzeHh4X3VhcnQ0X2h3bW9kLAorCSZvbWFwM3h4eF9pMmMxX2h3bW9kLAorCSZvbWFwM3h4eF9pMmMyX2h3bW9kLAorCSZvbWFwM3h4eF9pMmMzX2h3bW9kLAorCSZvbWFwMzR4eF9zcjFfaHdtb2QsCisJJm9tYXAzNHh4X3NyMl9od21vZCwKKwkmb21hcDM2eHhfc3IxX2h3bW9kLAorCSZvbWFwMzZ4eF9zcjJfaHdtb2QsCisKKworCS8qIGdwaW8gY2xhc3MgKi8KKwkmb21hcDN4eHhfZ3BpbzFfaHdtb2QsCisJJm9tYXAzeHh4X2dwaW8yX2h3bW9kLAorCSZvbWFwM3h4eF9ncGlvM19od21vZCwKKwkmb21hcDN4eHhfZ3BpbzRfaHdtb2QsCisJJm9tYXAzeHh4X2dwaW81X2h3bW9kLAorCSZvbWFwM3h4eF9ncGlvNl9od21vZCwKKworCS8qIGRtYV9zeXN0ZW0gY2xhc3MqLworCSZvbWFwM3h4eF9kbWFfc3lzdGVtX2h3bW9kLAogCU5VTEwsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfNDR4eF9kYXRhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfNDR4eF9kYXRhLmMKaW5kZXggNzI3NGRiNGQuLmMyODA2YmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF80NHh4X2RhdGEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfNDR4eF9kYXRhLmMKQEAgLTIyLDExICsyMiwxNiBAQAogCiAjaW5jbHVkZSA8cGxhdC9vbWFwX2h3bW9kLmg+CiAjaW5jbHVkZSA8cGxhdC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L2dwaW8uaD4KKyNpbmNsdWRlIDxwbGF0L2RtYS5oPgogCiAjaW5jbHVkZSAib21hcF9od21vZF9jb21tb25fZGF0YS5oIgogCi0jaW5jbHVkZSAiY20uaCIKKyNpbmNsdWRlICJjbTFfNDR4eC5oIgorI2luY2x1ZGUgImNtMl80NHh4LmgiCisjaW5jbHVkZSAicHJtNDR4eC5oIgogI2luY2x1ZGUgInBybS1yZWdiaXRzLTQ0eHguaCIKKyNpbmNsdWRlICJ3ZF90aW1lci5oIgogCiAvKiBCYXNlIG9mZnNldCBmb3IgYWxsIE9NQVA0IGludGVycnVwdHMgZXh0ZXJuYWwgdG8gTVBVU1MgKi8KICNkZWZpbmUgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVAkzMgpAQCAtMzUsOCArNDAsMTEgQEAKICNkZWZpbmUgT01BUDQ0WFhfRE1BX1JFUV9TVEFSVCAgMQogCiAvKiBCYWNrd2FyZCByZWZlcmVuY2VzIChJUHMgd2l0aCBCdXMgTWFzdGVyIGNhcGFiaWxpdHkpICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDQ0eHhfZG1hX3N5c3RlbV9od21vZDsKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwNDR4eF9kbW1faHdtb2Q7CitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDQ0eHhfZHNwX2h3bW9kOwogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXA0NHh4X2VtaWZfZndfaHdtb2Q7CitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDQ0eHhfaXZhX2h3bW9kOwogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXA0NHh4X2wzX2luc3RyX2h3bW9kOwogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXA0NHh4X2wzX21haW5fMV9od21vZDsKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwNDR4eF9sM19tYWluXzJfaHdtb2Q7CkBAIC01OCw3ICs2Niw3IEBACiAgKiBpbnN0YW5jZShzKTogZG1tCiAgKi8KIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzcyBvbWFwNDR4eF9kbW1faHdtb2RfY2xhc3MgPSB7Ci0JLm5hbWUgPSAiZG1tIiwKKwkubmFtZQk9ICJkbW0iLAogfTsKIAogLyogZG1tIGludGVyZmFjZSBkYXRhICovCkBAIC02Nyw3ICs3NSwxNSBAQAogCS5tYXN0ZXIJCT0gJm9tYXA0NHh4X2wzX21haW5fMV9od21vZCwKIAkuc2xhdmUJCT0gJm9tYXA0NHh4X2RtbV9od21vZCwKIAkuY2xrCQk9ICJsM19kaXZfY2siLAotCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCisJLnVzZXIJCT0gT0NQX1VTRVJfU0RNQSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9hZGRyX3NwYWNlIG9tYXA0NHh4X2RtbV9hZGRyc1tdID0geworCXsKKwkJLnBhX3N0YXJ0CT0gMHg0ZTAwMDAwMCwKKwkJLnBhX2VuZAkJPSAweDRlMDAwN2ZmLAorCQkuZmxhZ3MJCT0gQUREUl9UWVBFX1JUCisJfSwKIH07CiAKIC8qIG1wdSAtPiBkbW0gKi8KQEAgLTc1LDcgKzkxLDkgQEAKIAkubWFzdGVyCQk9ICZvbWFwNDR4eF9tcHVfaHdtb2QsCiAJLnNsYXZlCQk9ICZvbWFwNDR4eF9kbW1faHdtb2QsCiAJLmNsawkJPSAibDNfZGl2X2NrIiwKLQkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorCS5hZGRyCQk9IG9tYXA0NHh4X2RtbV9hZGRycywKKwkuYWRkcl9jbnQJPSBBUlJBWV9TSVpFKG9tYXA0NHh4X2RtbV9hZGRycyksCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVLAogfTsKIAogLyogZG1tIHNsYXZlIHBvcnRzICovCkBAIC0xMDMsNyArMTIxLDcgQEAKICAqIGluc3RhbmNlKHMpOiBlbWlmX2Z3CiAgKi8KIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzcyBvbWFwNDR4eF9lbWlmX2Z3X2h3bW9kX2NsYXNzID0gewotCS5uYW1lID0gImVtaWZfZnciLAorCS5uYW1lCT0gImVtaWZfZnciLAogfTsKIAogLyogZW1pZl9mdyBpbnRlcmZhY2UgZGF0YSAqLwpAQCAtMTE1LDEyICsxMzMsMjIgQEAKIAkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAogfTsKIAorc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDQ0eHhfZW1pZl9md19hZGRyc1tdID0geworCXsKKwkJLnBhX3N0YXJ0CT0gMHg0YTIwYzAwMCwKKwkJLnBhX2VuZAkJPSAweDRhMjBjMGZmLAorCQkuZmxhZ3MJCT0gQUREUl9UWVBFX1JUCisJfSwKK307CisKIC8qIGw0X2NmZyAtPiBlbWlmX2Z3ICovCiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXA0NHh4X2w0X2NmZ19fZW1pZl9mdyA9IHsKIAkubWFzdGVyCQk9ICZvbWFwNDR4eF9sNF9jZmdfaHdtb2QsCiAJLnNsYXZlCQk9ICZvbWFwNDR4eF9lbWlmX2Z3X2h3bW9kLAogCS5jbGsJCT0gImw0X2Rpdl9jayIsCi0JLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKKwkuYWRkcgkJPSBvbWFwNDR4eF9lbWlmX2Z3X2FkZHJzLAorCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfZW1pZl9md19hZGRycyksCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVLAogfTsKIAogLyogZW1pZl9mdyBzbGF2ZSBwb3J0cyAqLwpAQCAtMTQyLDEwICsxNzAsMTggQEAKICAqIGluc3RhbmNlKHMpOiBsM19pbnN0ciwgbDNfbWFpbl8xLCBsM19tYWluXzIsIGwzX21haW5fMwogICovCiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfY2xhc3Mgb21hcDQ0eHhfbDNfaHdtb2RfY2xhc3MgPSB7Ci0JLm5hbWUgPSAibDMiLAorCS5uYW1lCT0gImwzIiwKIH07CiAKIC8qIGwzX2luc3RyIGludGVyZmFjZSBkYXRhICovCisvKiBpdmEgLT4gbDNfaW5zdHIgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDQ0eHhfaXZhX19sM19pbnN0ciA9IHsKKwkubWFzdGVyCQk9ICZvbWFwNDR4eF9pdmFfaHdtb2QsCisJLnNsYXZlCQk9ICZvbWFwNDR4eF9sM19pbnN0cl9od21vZCwKKwkuY2xrCQk9ICJsM19kaXZfY2siLAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCit9OworCiAvKiBsM19tYWluXzMgLT4gbDNfaW5zdHIgKi8KIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDQ0eHhfbDNfbWFpbl8zX19sM19pbnN0ciA9IHsKIAkubWFzdGVyCQk9ICZvbWFwNDR4eF9sM19tYWluXzNfaHdtb2QsCkBAIC0xNTYsNiArMTkyLDcgQEAKIAogLyogbDNfaW5zdHIgc2xhdmUgcG9ydHMgKi8KIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXA0NHh4X2wzX2luc3RyX3NsYXZlc1tdID0geworCSZvbWFwNDR4eF9pdmFfX2wzX2luc3RyLAogCSZvbWFwNDR4eF9sM19tYWluXzNfX2wzX2luc3RyLAogfTsKIApAQCAtMTY3LDYgKzIwNCwxNSBAQAogCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKIH07CiAKKy8qIGwzX21haW5fMSBpbnRlcmZhY2UgZGF0YSAqLworLyogZHNwIC0+IGwzX21haW5fMSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwNDR4eF9kc3BfX2wzX21haW5fMSA9IHsKKwkubWFzdGVyCQk9ICZvbWFwNDR4eF9kc3BfaHdtb2QsCisJLnNsYXZlCQk9ICZvbWFwNDR4eF9sM19tYWluXzFfaHdtb2QsCisJLmNsawkJPSAibDNfZGl2X2NrIiwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKwogLyogbDNfbWFpbl8yIC0+IGwzX21haW5fMSAqLwogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwNDR4eF9sM19tYWluXzJfX2wzX21haW5fMSA9IHsKIAkubWFzdGVyCQk9ICZvbWFwNDR4eF9sM19tYWluXzJfaHdtb2QsCkBAIC0xOTMsNiArMjM5LDcgQEAKIAogLyogbDNfbWFpbl8xIHNsYXZlIHBvcnRzICovCiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwNDR4eF9sM19tYWluXzFfc2xhdmVzW10gPSB7CisJJm9tYXA0NHh4X2RzcF9fbDNfbWFpbl8xLAogCSZvbWFwNDR4eF9sM19tYWluXzJfX2wzX21haW5fMSwKIAkmb21hcDQ0eHhfbDRfY2ZnX19sM19tYWluXzEsCiAJJm9tYXA0NHh4X21wdV9fbDNfbWFpbl8xLApAQCAtMjA3LDYgKzI1NCwyMiBAQAogfTsKIAogLyogbDNfbWFpbl8yIGludGVyZmFjZSBkYXRhICovCisvKiBkbWFfc3lzdGVtIC0+IGwzX21haW5fMiAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwNDR4eF9kbWFfc3lzdGVtX19sM19tYWluXzIgPSB7CisJLm1hc3RlcgkJPSAmb21hcDQ0eHhfZG1hX3N5c3RlbV9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXA0NHh4X2wzX21haW5fMl9od21vZCwKKwkuY2xrCQk9ICJsM19kaXZfY2siLAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCit9OworCisvKiBpdmEgLT4gbDNfbWFpbl8yICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXA0NHh4X2l2YV9fbDNfbWFpbl8yID0geworCS5tYXN0ZXIJCT0gJm9tYXA0NHh4X2l2YV9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXA0NHh4X2wzX21haW5fMl9od21vZCwKKwkuY2xrCQk9ICJsM19kaXZfY2siLAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCit9OworCiAvKiBsM19tYWluXzEgLT4gbDNfbWFpbl8yICovCiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXA0NHh4X2wzX21haW5fMV9fbDNfbWFpbl8yID0gewogCS5tYXN0ZXIJCT0gJm9tYXA0NHh4X2wzX21haW5fMV9od21vZCwKQEAgLTIyNSw2ICsyODgsOCBAQAogCiAvKiBsM19tYWluXzIgc2xhdmUgcG9ydHMgKi8KIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXA0NHh4X2wzX21haW5fMl9zbGF2ZXNbXSA9IHsKKwkmb21hcDQ0eHhfZG1hX3N5c3RlbV9fbDNfbWFpbl8yLAorCSZvbWFwNDR4eF9pdmFfX2wzX21haW5fMiwKIAkmb21hcDQ0eHhfbDNfbWFpbl8xX19sM19tYWluXzIsCiAJJm9tYXA0NHh4X2w0X2NmZ19fbDNfbWFpbl8yLAogfTsKQEAgLTI4MiwxMCArMzQ3LDE4IEBACiAgKiBpbnN0YW5jZShzKTogbDRfYWJlLCBsNF9jZmcsIGw0X3BlciwgbDRfd2t1cAogICovCiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfY2xhc3Mgb21hcDQ0eHhfbDRfaHdtb2RfY2xhc3MgPSB7Ci0JLm5hbWUgPSAibDQiLAorCS5uYW1lCT0gImw0IiwKIH07CiAKIC8qIGw0X2FiZSBpbnRlcmZhY2UgZGF0YSAqLworLyogZHNwIC0+IGw0X2FiZSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwNDR4eF9kc3BfX2w0X2FiZSA9IHsKKwkubWFzdGVyCQk9ICZvbWFwNDR4eF9kc3BfaHdtb2QsCisJLnNsYXZlCQk9ICZvbWFwNDR4eF9sNF9hYmVfaHdtb2QsCisJLmNsawkJPSAib2NwX2FiZV9pY2xrIiwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKwogLyogbDNfbWFpbl8xIC0+IGw0X2FiZSAqLwogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwNDR4eF9sM19tYWluXzFfX2w0X2FiZSA9IHsKIAkubWFzdGVyCQk9ICZvbWFwNDR4eF9sM19tYWluXzFfaHdtb2QsCkBAIC0zMDQsNiArMzc3LDcgQEAKIAogLyogbDRfYWJlIHNsYXZlIHBvcnRzICovCiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwNDR4eF9sNF9hYmVfc2xhdmVzW10gPSB7CisJJm9tYXA0NHh4X2RzcF9fbDRfYWJlLAogCSZvbWFwNDR4eF9sM19tYWluXzFfX2w0X2FiZSwKIAkmb21hcDQ0eHhfbXB1X19sNF9hYmUsCiB9OwpAQCAtMzg3LDcgKzQ2MSw3IEBACiAgKiBpbnN0YW5jZShzKTogbXB1X3ByaXZhdGUKICAqLwogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzIG9tYXA0NHh4X21wdV9idXNfaHdtb2RfY2xhc3MgPSB7Ci0JLm5hbWUgPSAibXB1X2J1cyIsCisJLm5hbWUJPSAibXB1X2J1cyIsCiB9OwogCiAvKiBtcHVfcHJpdmF0ZSBpbnRlcmZhY2UgZGF0YSAqLwpAQCAtNDEzLDEyICs0ODcsOTYwIEBACiB9OwogCiAvKgorICogTW9kdWxlcyBvbWFwX2h3bW9kIHN0cnVjdHVyZXMKKyAqCisgKiBUaGUgZm9sbG93aW5nIElQcyBhcmUgZXhjbHVkZWQgZm9yIHRoZSBtb21lbnQgYmVjYXVzZToKKyAqIC0gVGhleSBkbyBub3QgbmVlZCBhbiBleHBsaWNpdCBTVyBjb250cm9sIHVzaW5nIG9tYXBfaHdtb2QgQVBJLgorICogLSBUaGV5IHN0aWxsIG5lZWQgdG8gYmUgdmFsaWRhdGVkIHdpdGggdGhlIGRyaXZlcgorICogICBwcm9wZXJseSBhZGFwdGVkIHRvIG9tYXBfaHdtb2QgLyBvbWFwX2RldmljZQorICoKKyAqICBhZXNzCisgKiAgYmFuZGdhcAorICogIGMyYworICogIGMyY190YXJnZXRfZncKKyAqICBjbV9jb3JlCisgKiAgY21fY29yZV9hb24KKyAqICBjb3VudGVyXzMyaworICogIGN0cmxfbW9kdWxlX2NvcmUKKyAqICBjdHJsX21vZHVsZV9wYWRfY29yZQorICogIGN0cmxfbW9kdWxlX3BhZF93a3VwCisgKiAgY3RybF9tb2R1bGVfd2t1cAorICogIGRlYnVnc3MKKyAqICBkbWljCisgKiAgZHNzCisgKiAgZHNzX2Rpc3BjCisgKiAgZHNzX2RzaTEKKyAqICBkc3NfZHNpMgorICogIGRzc19oZG1pCisgKiAgZHNzX3JmYmkKKyAqICBkc3NfdmVuYworICogIGVmdXNlX2N0cmxfY3VzdAorICogIGVmdXNlX2N0cmxfc3RkCisgKiAgZWxtCisgKiAgZW1pZjEKKyAqICBlbWlmMgorICogIGZkaWYKKyAqICBncG1jCisgKiAgZ3B1CisgKiAgaGRxMXcKKyAqICBoc2kKKyAqICBpcHUKKyAqICBpc3MKKyAqICBrYmQKKyAqICBtYWlsYm94CisgKiAgbWNhc3AKKyAqICBtY2JzcDEKKyAqICBtY2JzcDIKKyAqICBtY2JzcDMKKyAqICBtY2JzcDQKKyAqICBtY3BkbQorICogIG1jc3BpMQorICogIG1jc3BpMgorICogIG1jc3BpMworICogIG1jc3BpNAorICogIG1tYzEKKyAqICBtbWMyCisgKiAgbW1jMworICogIG1tYzQKKyAqICBtbWM1CisgKiAgbXB1X2MwCisgKiAgbXB1X2MxCisgKiAgb2NtY19yYW0KKyAqICBvY3Ayc2NwX3VzYl9waHkKKyAqICBvY3Bfd3Bfbm9jCisgKiAgcHJjbQorICogIHByY21fbXB1CisgKiAgcHJtCisgKiAgc2NybQorICogIHNsMmlmCisgKiAgc2xpbWJ1czEKKyAqICBzbGltYnVzMgorICogIHNwaW5sb2NrCisgKiAgdGltZXIxCisgKiAgdGltZXIxMAorICogIHRpbWVyMTEKKyAqICB0aW1lcjIKKyAqICB0aW1lcjMKKyAqICB0aW1lcjQKKyAqICB0aW1lcjUKKyAqICB0aW1lcjYKKyAqICB0aW1lcjcKKyAqICB0aW1lcjgKKyAqICB0aW1lcjkKKyAqICB1c2JfaG9zdF9mcworICogIHVzYl9ob3N0X2hzCisgKiAgdXNiX290Z19ocworICogIHVzYl9waHlfY20KKyAqICB1c2JfdGxsX2hzCisgKiAgdXNpbQorICovCisKKy8qCisgKiAnZG1hJyBjbGFzcworICogZG1hIGNvbnRyb2xsZXIgZm9yIGRhdGEgZXhjaGFuZ2UgYmV0d2VlbiBtZW1vcnkgdG8gbWVtb3J5IChpLmUuIGludGVybmFsIG9yCisgKiBleHRlcm5hbCBtZW1vcnkpIGFuZCBncCBwZXJpcGhlcmFscyB0byBtZW1vcnkgb3IgbWVtb3J5IHRvIGdwIHBlcmlwaGVyYWxzCisgKi8KKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzX3N5c2NvbmZpZyBvbWFwNDR4eF9kbWFfc3lzYyA9IHsKKwkucmV2X29mZnMJPSAweDAwMDAsCisJLnN5c2Nfb2Zmcwk9IDB4MDAyYywKKwkuc3lzc19vZmZzCT0gMHgwMDI4LAorCS5zeXNjX2ZsYWdzCT0gKFNZU0NfSEFTX0FVVE9JRExFIHwgU1lTQ19IQVNfQ0xPQ0tBQ1RJVklUWSB8CisJCQkgICBTWVNDX0hBU19FTVVGUkVFIHwgU1lTQ19IQVNfTUlETEVNT0RFIHwKKwkJCSAgIFNZU0NfSEFTX1NJRExFTU9ERSB8IFNZU0NfSEFTX1NPRlRSRVNFVCB8CisJCQkgICBTWVNTX0hBU19SRVNFVF9TVEFUVVMpLAorCS5pZGxlbW9kZXMJPSAoU0lETEVfRk9SQ0UgfCBTSURMRV9OTyB8IFNJRExFX1NNQVJUIHwKKwkJCSAgIE1TVEFOREJZX0ZPUkNFIHwgTVNUQU5EQllfTk8gfCBNU1RBTkRCWV9TTUFSVCksCisJLnN5c2NfZmllbGRzCT0gJm9tYXBfaHdtb2Rfc3lzY190eXBlMSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzcyBvbWFwNDR4eF9kbWFfaHdtb2RfY2xhc3MgPSB7CisJLm5hbWUJPSAiZG1hIiwKKwkuc3lzYwk9ICZvbWFwNDR4eF9kbWFfc3lzYywKK307CisKKy8qIGRtYSBkZXZfYXR0ciAqLworc3RhdGljIHN0cnVjdCBvbWFwX2RtYV9kZXZfYXR0ciBkbWFfZGV2X2F0dHIgPSB7CisJLmRldl9jYXBzCT0gUkVTRVJWRV9DSEFOTkVMIHwgRE1BX0xJTktFRF9MQ0ggfCBHTE9CQUxfUFJJT1JJVFkgfAorCQkJICBJU19DU1NBXzMyIHwgSVNfQ0RTQV8zMiB8IElTX1JXX1BSSU9SSVRZLAorCS5sY2hfY291bnQJPSAzMiwKK307CisKKy8qIGRtYV9zeXN0ZW0gKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9pcnFfaW5mbyBvbWFwNDR4eF9kbWFfc3lzdGVtX2lycXNbXSA9IHsKKwl7IC5uYW1lID0gIjAiLCAuaXJxID0gMTIgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUIH0sCisJeyAubmFtZSA9ICIxIiwgLmlycSA9IDEzICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCB9LAorCXsgLm5hbWUgPSAiMiIsIC5pcnEgPSAxNCArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQgfSwKKwl7IC5uYW1lID0gIjMiLCAuaXJxID0gMTUgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUIH0sCit9OworCisvKiBkbWFfc3lzdGVtIG1hc3RlciBwb3J0cyAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDQ0eHhfZG1hX3N5c3RlbV9tYXN0ZXJzW10gPSB7CisJJm9tYXA0NHh4X2RtYV9zeXN0ZW1fX2wzX21haW5fMiwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9hZGRyX3NwYWNlIG9tYXA0NHh4X2RtYV9zeXN0ZW1fYWRkcnNbXSA9IHsKKwl7CisJCS5wYV9zdGFydAk9IDB4NGEwNTYwMDAsCisJCS5wYV9lbmQJCT0gMHg0YTA1NjBmZiwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVAorCX0sCit9OworCisvKiBsNF9jZmcgLT4gZG1hX3N5c3RlbSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwNDR4eF9sNF9jZmdfX2RtYV9zeXN0ZW0gPSB7CisJLm1hc3RlcgkJPSAmb21hcDQ0eHhfbDRfY2ZnX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDQ0eHhfZG1hX3N5c3RlbV9od21vZCwKKwkuY2xrCQk9ICJsNF9kaXZfY2siLAorCS5hZGRyCQk9IG9tYXA0NHh4X2RtYV9zeXN0ZW1fYWRkcnMsCisJLmFkZHJfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF9kbWFfc3lzdGVtX2FkZHJzKSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyogZG1hX3N5c3RlbSBzbGF2ZSBwb3J0cyAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDQ0eHhfZG1hX3N5c3RlbV9zbGF2ZXNbXSA9IHsKKwkmb21hcDQ0eHhfbDRfY2ZnX19kbWFfc3lzdGVtLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXA0NHh4X2RtYV9zeXN0ZW1faHdtb2QgPSB7CisJLm5hbWUJCT0gImRtYV9zeXN0ZW0iLAorCS5jbGFzcwkJPSAmb21hcDQ0eHhfZG1hX2h3bW9kX2NsYXNzLAorCS5tcHVfaXJxcwk9IG9tYXA0NHh4X2RtYV9zeXN0ZW1faXJxcywKKwkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF9kbWFfc3lzdGVtX2lycXMpLAorCS5tYWluX2Nsawk9ICJsM19kaXZfY2siLAorCS5wcmNtID0geworCQkub21hcDQgPSB7CisJCQkuY2xrY3RybF9yZWcgPSBPTUFQNDQzMF9DTV9TRE1BX1NETUFfQ0xLQ1RSTCwKKwkJfSwKKwl9LAorCS5kZXZfYXR0cgk9ICZkbWFfZGV2X2F0dHIsCisJLnNsYXZlcwkJPSBvbWFwNDR4eF9kbWFfc3lzdGVtX3NsYXZlcywKKwkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfZG1hX3N5c3RlbV9zbGF2ZXMpLAorCS5tYXN0ZXJzCT0gb21hcDQ0eHhfZG1hX3N5c3RlbV9tYXN0ZXJzLAorCS5tYXN0ZXJzX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfZG1hX3N5c3RlbV9tYXN0ZXJzKSwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCit9OworCisvKgorICogJ2RzcCcgY2xhc3MKKyAqIGRzcCBzdWItc3lzdGVtCisgKi8KKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzIG9tYXA0NHh4X2RzcF9od21vZF9jbGFzcyA9IHsKKwkubmFtZQk9ICJkc3AiLAorfTsKKworLyogZHNwICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfaXJxX2luZm8gb21hcDQ0eHhfZHNwX2lycXNbXSA9IHsKKwl7IC5pcnEgPSAyOCArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9yc3RfaW5mbyBvbWFwNDR4eF9kc3BfcmVzZXRzW10gPSB7CisJeyAubmFtZSA9ICJtbXVfY2FjaGUiLCAucnN0X3NoaWZ0ID0gMSB9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX3JzdF9pbmZvIG9tYXA0NHh4X2RzcF9jMF9yZXNldHNbXSA9IHsKKwl7IC5uYW1lID0gImRzcCIsIC5yc3Rfc2hpZnQgPSAwIH0sCit9OworCisvKiBkc3AgLT4gaXZhICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXA0NHh4X2RzcF9faXZhID0geworCS5tYXN0ZXIJCT0gJm9tYXA0NHh4X2RzcF9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXA0NHh4X2l2YV9od21vZCwKKwkuY2xrCQk9ICJkcGxsX2l2YV9tNXgyX2NrIiwKK307CisKKy8qIGRzcCBtYXN0ZXIgcG9ydHMgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXA0NHh4X2RzcF9tYXN0ZXJzW10gPSB7CisJJm9tYXA0NHh4X2RzcF9fbDNfbWFpbl8xLAorCSZvbWFwNDR4eF9kc3BfX2w0X2FiZSwKKwkmb21hcDQ0eHhfZHNwX19pdmEsCit9OworCisvKiBsNF9jZmcgLT4gZHNwICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXA0NHh4X2w0X2NmZ19fZHNwID0geworCS5tYXN0ZXIJCT0gJm9tYXA0NHh4X2w0X2NmZ19od21vZCwKKwkuc2xhdmUJCT0gJm9tYXA0NHh4X2RzcF9od21vZCwKKwkuY2xrCQk9ICJsNF9kaXZfY2siLAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCit9OworCisvKiBkc3Agc2xhdmUgcG9ydHMgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXA0NHh4X2RzcF9zbGF2ZXNbXSA9IHsKKwkmb21hcDQ0eHhfbDRfY2ZnX19kc3AsCit9OworCisvKiBQc2V1ZG8gaHdtb2QgZm9yIHJlc2V0IGNvbnRyb2wgcHVycG9zZSBvbmx5ICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDQ0eHhfZHNwX2MwX2h3bW9kID0geworCS5uYW1lCQk9ICJkc3BfYzAiLAorCS5jbGFzcwkJPSAmb21hcDQ0eHhfZHNwX2h3bW9kX2NsYXNzLAorCS5mbGFncwkJPSBIV01PRF9JTklUX05PX1JFU0VULAorCS5yc3RfbGluZXMJPSBvbWFwNDR4eF9kc3BfYzBfcmVzZXRzLAorCS5yc3RfbGluZXNfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF9kc3BfYzBfcmVzZXRzKSwKKwkucHJjbSA9IHsKKwkJLm9tYXA0ID0geworCQkJLnJzdGN0cmxfcmVnID0gT01BUDQ0MzBfUk1fVEVTTEFfUlNUQ1RSTCwKKwkJfSwKKwl9LAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwNDR4eF9kc3BfaHdtb2QgPSB7CisJLm5hbWUJCT0gImRzcCIsCisJLmNsYXNzCQk9ICZvbWFwNDR4eF9kc3BfaHdtb2RfY2xhc3MsCisJLm1wdV9pcnFzCT0gb21hcDQ0eHhfZHNwX2lycXMsCisJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfZHNwX2lycXMpLAorCS5yc3RfbGluZXMJPSBvbWFwNDR4eF9kc3BfcmVzZXRzLAorCS5yc3RfbGluZXNfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF9kc3BfcmVzZXRzKSwKKwkubWFpbl9jbGsJPSAiZHNwX2ZjayIsCisJLnByY20gPSB7CisJCS5vbWFwNCA9IHsKKwkJCS5jbGtjdHJsX3JlZyA9IE9NQVA0NDMwX0NNX1RFU0xBX1RFU0xBX0NMS0NUUkwsCisJCQkucnN0Y3RybF9yZWcgPSBPTUFQNDQzMF9STV9URVNMQV9SU1RDVFJMLAorCQl9LAorCX0sCisJLnNsYXZlcwkJPSBvbWFwNDR4eF9kc3Bfc2xhdmVzLAorCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF9kc3Bfc2xhdmVzKSwKKwkubWFzdGVycwk9IG9tYXA0NHh4X2RzcF9tYXN0ZXJzLAorCS5tYXN0ZXJzX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfZHNwX21hc3RlcnMpLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKK307CisKKy8qCisgKiAnZ3BpbycgY2xhc3MKKyAqIGdlbmVyYWwgcHVycG9zZSBpbyBtb2R1bGUKKyAqLworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfY2xhc3Nfc3lzY29uZmlnIG9tYXA0NHh4X2dwaW9fc3lzYyA9IHsKKwkucmV2X29mZnMJPSAweDAwMDAsCisJLnN5c2Nfb2Zmcwk9IDB4MDAxMCwKKwkuc3lzc19vZmZzCT0gMHgwMTE0LAorCS5zeXNjX2ZsYWdzCT0gKFNZU0NfSEFTX0FVVE9JRExFIHwgU1lTQ19IQVNfRU5BV0FLRVVQIHwKKwkJCSAgIFNZU0NfSEFTX1NJRExFTU9ERSB8IFNZU0NfSEFTX1NPRlRSRVNFVCB8CisJCQkgICBTWVNTX0hBU19SRVNFVF9TVEFUVVMpLAorCS5pZGxlbW9kZXMJPSAoU0lETEVfRk9SQ0UgfCBTSURMRV9OTyB8IFNJRExFX1NNQVJUIHwKKwkJCSAgIFNJRExFX1NNQVJUX1dLVVApLAorCS5zeXNjX2ZpZWxkcwk9ICZvbWFwX2h3bW9kX3N5c2NfdHlwZTEsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfY2xhc3Mgb21hcDQ0eHhfZ3Bpb19od21vZF9jbGFzcyA9IHsKKwkubmFtZQk9ICJncGlvIiwKKwkuc3lzYwk9ICZvbWFwNDR4eF9ncGlvX3N5c2MsCisJLnJldgk9IDIsCit9OworCisvKiBncGlvIGRldl9hdHRyICovCitzdGF0aWMgc3RydWN0IG9tYXBfZ3Bpb19kZXZfYXR0ciBncGlvX2Rldl9hdHRyID0geworCS5iYW5rX3dpZHRoCT0gMzIsCisJLmRiY2tfZmxhZwk9IHRydWUsCit9OworCisvKiBncGlvMSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXA0NHh4X2dwaW8xX2h3bW9kOworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2lycV9pbmZvIG9tYXA0NHh4X2dwaW8xX2lycXNbXSA9IHsKKwl7IC5pcnEgPSAyOSArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9hZGRyX3NwYWNlIG9tYXA0NHh4X2dwaW8xX2FkZHJzW10gPSB7CisJeworCQkucGFfc3RhcnQJPSAweDRhMzEwMDAwLAorCQkucGFfZW5kCQk9IDB4NGEzMTAxZmYsCisJCS5mbGFncwkJPSBBRERSX1RZUEVfUlQKKwl9LAorfTsKKworLyogbDRfd2t1cCAtPiBncGlvMSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwNDR4eF9sNF93a3VwX19ncGlvMSA9IHsKKwkubWFzdGVyCQk9ICZvbWFwNDR4eF9sNF93a3VwX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDQ0eHhfZ3BpbzFfaHdtb2QsCisJLmNsawkJPSAibDRfd2t1cF9jbGtfbXV4X2NrIiwKKwkuYWRkcgkJPSBvbWFwNDR4eF9ncGlvMV9hZGRycywKKwkuYWRkcl9jbnQJPSBBUlJBWV9TSVpFKG9tYXA0NHh4X2dwaW8xX2FkZHJzKSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyogZ3BpbzEgc2xhdmUgcG9ydHMgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXA0NHh4X2dwaW8xX3NsYXZlc1tdID0geworCSZvbWFwNDR4eF9sNF93a3VwX19ncGlvMSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vcHRfY2xrIGdwaW8xX29wdF9jbGtzW10gPSB7CisJeyAucm9sZSA9ICJkYmNsayIsIC5jbGsgPSAiZ3BpbzFfZGJjbGsiIH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDQ0eHhfZ3BpbzFfaHdtb2QgPSB7CisJLm5hbWUJCT0gImdwaW8xIiwKKwkuY2xhc3MJCT0gJm9tYXA0NHh4X2dwaW9faHdtb2RfY2xhc3MsCisJLm1wdV9pcnFzCT0gb21hcDQ0eHhfZ3BpbzFfaXJxcywKKwkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF9ncGlvMV9pcnFzKSwKKwkubWFpbl9jbGsJPSAiZ3BpbzFfaWNrIiwKKwkucHJjbSA9IHsKKwkJLm9tYXA0ID0geworCQkJLmNsa2N0cmxfcmVnID0gT01BUDQ0MzBfQ01fV0tVUF9HUElPMV9DTEtDVFJMLAorCQl9LAorCX0sCisJLm9wdF9jbGtzCT0gZ3BpbzFfb3B0X2Nsa3MsCisJLm9wdF9jbGtzX2NudAk9IEFSUkFZX1NJWkUoZ3BpbzFfb3B0X2Nsa3MpLAorCS5kZXZfYXR0cgk9ICZncGlvX2Rldl9hdHRyLAorCS5zbGF2ZXMJCT0gb21hcDQ0eHhfZ3BpbzFfc2xhdmVzLAorCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF9ncGlvMV9zbGF2ZXMpLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKK307CisKKy8qIGdwaW8yICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDQ0eHhfZ3BpbzJfaHdtb2Q7CitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfaXJxX2luZm8gb21hcDQ0eHhfZ3BpbzJfaXJxc1tdID0geworCXsgLmlycSA9IDMwICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDQ0eHhfZ3BpbzJfYWRkcnNbXSA9IHsKKwl7CisJCS5wYV9zdGFydAk9IDB4NDgwNTUwMDAsCisJCS5wYV9lbmQJCT0gMHg0ODA1NTFmZiwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVAorCX0sCit9OworCisvKiBsNF9wZXIgLT4gZ3BpbzIgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDQ0eHhfbDRfcGVyX19ncGlvMiA9IHsKKwkubWFzdGVyCQk9ICZvbWFwNDR4eF9sNF9wZXJfaHdtb2QsCisJLnNsYXZlCQk9ICZvbWFwNDR4eF9ncGlvMl9od21vZCwKKwkuY2xrCQk9ICJsNF9kaXZfY2siLAorCS5hZGRyCQk9IG9tYXA0NHh4X2dwaW8yX2FkZHJzLAorCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfZ3BpbzJfYWRkcnMpLAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCit9OworCisvKiBncGlvMiBzbGF2ZSBwb3J0cyAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDQ0eHhfZ3BpbzJfc2xhdmVzW10gPSB7CisJJm9tYXA0NHh4X2w0X3Blcl9fZ3BpbzIsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb3B0X2NsayBncGlvMl9vcHRfY2xrc1tdID0geworCXsgLnJvbGUgPSAiZGJjbGsiLCAuY2xrID0gImdwaW8yX2RiY2xrIiB9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXA0NHh4X2dwaW8yX2h3bW9kID0geworCS5uYW1lCQk9ICJncGlvMiIsCisJLmNsYXNzCQk9ICZvbWFwNDR4eF9ncGlvX2h3bW9kX2NsYXNzLAorCS5mbGFncwkJPSBIV01PRF9DT05UUk9MX09QVF9DTEtTX0lOX1JFU0VULAorCS5tcHVfaXJxcwk9IG9tYXA0NHh4X2dwaW8yX2lycXMsCisJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfZ3BpbzJfaXJxcyksCisJLm1haW5fY2xrCT0gImdwaW8yX2ljayIsCisJLnByY20gPSB7CisJCS5vbWFwNCA9IHsKKwkJCS5jbGtjdHJsX3JlZyA9IE9NQVA0NDMwX0NNX0w0UEVSX0dQSU8yX0NMS0NUUkwsCisJCX0sCisJfSwKKwkub3B0X2Nsa3MJPSBncGlvMl9vcHRfY2xrcywKKwkub3B0X2Nsa3NfY250CT0gQVJSQVlfU0laRShncGlvMl9vcHRfY2xrcyksCisJLmRldl9hdHRyCT0gJmdwaW9fZGV2X2F0dHIsCisJLnNsYXZlcwkJPSBvbWFwNDR4eF9ncGlvMl9zbGF2ZXMsCisJLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXA0NHh4X2dwaW8yX3NsYXZlcyksCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAorfTsKKworLyogZ3BpbzMgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwNDR4eF9ncGlvM19od21vZDsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9pcnFfaW5mbyBvbWFwNDR4eF9ncGlvM19pcnFzW10gPSB7CisJeyAuaXJxID0gMzEgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUIH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwNDR4eF9ncGlvM19hZGRyc1tdID0geworCXsKKwkJLnBhX3N0YXJ0CT0gMHg0ODA1NzAwMCwKKwkJLnBhX2VuZAkJPSAweDQ4MDU3MWZmLAorCQkuZmxhZ3MJCT0gQUREUl9UWVBFX1JUCisJfSwKK307CisKKy8qIGw0X3BlciAtPiBncGlvMyAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwNDR4eF9sNF9wZXJfX2dwaW8zID0geworCS5tYXN0ZXIJCT0gJm9tYXA0NHh4X2w0X3Blcl9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXA0NHh4X2dwaW8zX2h3bW9kLAorCS5jbGsJCT0gImw0X2Rpdl9jayIsCisJLmFkZHIJCT0gb21hcDQ0eHhfZ3BpbzNfYWRkcnMsCisJLmFkZHJfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF9ncGlvM19hZGRycyksCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKK307CisKKy8qIGdwaW8zIHNsYXZlIHBvcnRzICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwNDR4eF9ncGlvM19zbGF2ZXNbXSA9IHsKKwkmb21hcDQ0eHhfbDRfcGVyX19ncGlvMywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vcHRfY2xrIGdwaW8zX29wdF9jbGtzW10gPSB7CisJeyAucm9sZSA9ICJkYmNsayIsIC5jbGsgPSAiZ3BpbzNfZGJjbGsiIH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDQ0eHhfZ3BpbzNfaHdtb2QgPSB7CisJLm5hbWUJCT0gImdwaW8zIiwKKwkuY2xhc3MJCT0gJm9tYXA0NHh4X2dwaW9faHdtb2RfY2xhc3MsCisJLmZsYWdzCQk9IEhXTU9EX0NPTlRST0xfT1BUX0NMS1NfSU5fUkVTRVQsCisJLm1wdV9pcnFzCT0gb21hcDQ0eHhfZ3BpbzNfaXJxcywKKwkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF9ncGlvM19pcnFzKSwKKwkubWFpbl9jbGsJPSAiZ3BpbzNfaWNrIiwKKwkucHJjbSA9IHsKKwkJLm9tYXA0ID0geworCQkJLmNsa2N0cmxfcmVnID0gT01BUDQ0MzBfQ01fTDRQRVJfR1BJTzNfQ0xLQ1RSTCwKKwkJfSwKKwl9LAorCS5vcHRfY2xrcwk9IGdwaW8zX29wdF9jbGtzLAorCS5vcHRfY2xrc19jbnQJPSBBUlJBWV9TSVpFKGdwaW8zX29wdF9jbGtzKSwKKwkuZGV2X2F0dHIJPSAmZ3Bpb19kZXZfYXR0ciwKKwkuc2xhdmVzCQk9IG9tYXA0NHh4X2dwaW8zX3NsYXZlcywKKwkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfZ3BpbzNfc2xhdmVzKSwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCit9OworCisvKiBncGlvNCAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXA0NHh4X2dwaW80X2h3bW9kOworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2lycV9pbmZvIG9tYXA0NHh4X2dwaW80X2lycXNbXSA9IHsKKwl7IC5pcnEgPSAzMiArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9hZGRyX3NwYWNlIG9tYXA0NHh4X2dwaW80X2FkZHJzW10gPSB7CisJeworCQkucGFfc3RhcnQJPSAweDQ4MDU5MDAwLAorCQkucGFfZW5kCQk9IDB4NDgwNTkxZmYsCisJCS5mbGFncwkJPSBBRERSX1RZUEVfUlQKKwl9LAorfTsKKworLyogbDRfcGVyIC0+IGdwaW80ICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXA0NHh4X2w0X3Blcl9fZ3BpbzQgPSB7CisJLm1hc3RlcgkJPSAmb21hcDQ0eHhfbDRfcGVyX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDQ0eHhfZ3BpbzRfaHdtb2QsCisJLmNsawkJPSAibDRfZGl2X2NrIiwKKwkuYWRkcgkJPSBvbWFwNDR4eF9ncGlvNF9hZGRycywKKwkuYWRkcl9jbnQJPSBBUlJBWV9TSVpFKG9tYXA0NHh4X2dwaW80X2FkZHJzKSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyogZ3BpbzQgc2xhdmUgcG9ydHMgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXA0NHh4X2dwaW80X3NsYXZlc1tdID0geworCSZvbWFwNDR4eF9sNF9wZXJfX2dwaW80LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29wdF9jbGsgZ3BpbzRfb3B0X2Nsa3NbXSA9IHsKKwl7IC5yb2xlID0gImRiY2xrIiwgLmNsayA9ICJncGlvNF9kYmNsayIgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwNDR4eF9ncGlvNF9od21vZCA9IHsKKwkubmFtZQkJPSAiZ3BpbzQiLAorCS5jbGFzcwkJPSAmb21hcDQ0eHhfZ3Bpb19od21vZF9jbGFzcywKKwkuZmxhZ3MJCT0gSFdNT0RfQ09OVFJPTF9PUFRfQ0xLU19JTl9SRVNFVCwKKwkubXB1X2lycXMJPSBvbWFwNDR4eF9ncGlvNF9pcnFzLAorCS5tcHVfaXJxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXA0NHh4X2dwaW80X2lycXMpLAorCS5tYWluX2Nsawk9ICJncGlvNF9pY2siLAorCS5wcmNtID0geworCQkub21hcDQgPSB7CisJCQkuY2xrY3RybF9yZWcgPSBPTUFQNDQzMF9DTV9MNFBFUl9HUElPNF9DTEtDVFJMLAorCQl9LAorCX0sCisJLm9wdF9jbGtzCT0gZ3BpbzRfb3B0X2Nsa3MsCisJLm9wdF9jbGtzX2NudAk9IEFSUkFZX1NJWkUoZ3BpbzRfb3B0X2Nsa3MpLAorCS5kZXZfYXR0cgk9ICZncGlvX2Rldl9hdHRyLAorCS5zbGF2ZXMJCT0gb21hcDQ0eHhfZ3BpbzRfc2xhdmVzLAorCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF9ncGlvNF9zbGF2ZXMpLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKK307CisKKy8qIGdwaW81ICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDQ0eHhfZ3BpbzVfaHdtb2Q7CitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfaXJxX2luZm8gb21hcDQ0eHhfZ3BpbzVfaXJxc1tdID0geworCXsgLmlycSA9IDMzICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDQ0eHhfZ3BpbzVfYWRkcnNbXSA9IHsKKwl7CisJCS5wYV9zdGFydAk9IDB4NDgwNWIwMDAsCisJCS5wYV9lbmQJCT0gMHg0ODA1YjFmZiwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVAorCX0sCit9OworCisvKiBsNF9wZXIgLT4gZ3BpbzUgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDQ0eHhfbDRfcGVyX19ncGlvNSA9IHsKKwkubWFzdGVyCQk9ICZvbWFwNDR4eF9sNF9wZXJfaHdtb2QsCisJLnNsYXZlCQk9ICZvbWFwNDR4eF9ncGlvNV9od21vZCwKKwkuY2xrCQk9ICJsNF9kaXZfY2siLAorCS5hZGRyCQk9IG9tYXA0NHh4X2dwaW81X2FkZHJzLAorCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfZ3BpbzVfYWRkcnMpLAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCit9OworCisvKiBncGlvNSBzbGF2ZSBwb3J0cyAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDQ0eHhfZ3BpbzVfc2xhdmVzW10gPSB7CisJJm9tYXA0NHh4X2w0X3Blcl9fZ3BpbzUsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb3B0X2NsayBncGlvNV9vcHRfY2xrc1tdID0geworCXsgLnJvbGUgPSAiZGJjbGsiLCAuY2xrID0gImdwaW81X2RiY2xrIiB9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXA0NHh4X2dwaW81X2h3bW9kID0geworCS5uYW1lCQk9ICJncGlvNSIsCisJLmNsYXNzCQk9ICZvbWFwNDR4eF9ncGlvX2h3bW9kX2NsYXNzLAorCS5mbGFncwkJPSBIV01PRF9DT05UUk9MX09QVF9DTEtTX0lOX1JFU0VULAorCS5tcHVfaXJxcwk9IG9tYXA0NHh4X2dwaW81X2lycXMsCisJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfZ3BpbzVfaXJxcyksCisJLm1haW5fY2xrCT0gImdwaW81X2ljayIsCisJLnByY20gPSB7CisJCS5vbWFwNCA9IHsKKwkJCS5jbGtjdHJsX3JlZyA9IE9NQVA0NDMwX0NNX0w0UEVSX0dQSU81X0NMS0NUUkwsCisJCX0sCisJfSwKKwkub3B0X2Nsa3MJPSBncGlvNV9vcHRfY2xrcywKKwkub3B0X2Nsa3NfY250CT0gQVJSQVlfU0laRShncGlvNV9vcHRfY2xrcyksCisJLmRldl9hdHRyCT0gJmdwaW9fZGV2X2F0dHIsCisJLnNsYXZlcwkJPSBvbWFwNDR4eF9ncGlvNV9zbGF2ZXMsCisJLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXA0NHh4X2dwaW81X3NsYXZlcyksCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAorfTsKKworLyogZ3BpbzYgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwNDR4eF9ncGlvNl9od21vZDsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9pcnFfaW5mbyBvbWFwNDR4eF9ncGlvNl9pcnFzW10gPSB7CisJeyAuaXJxID0gMzQgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUIH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwNDR4eF9ncGlvNl9hZGRyc1tdID0geworCXsKKwkJLnBhX3N0YXJ0CT0gMHg0ODA1ZDAwMCwKKwkJLnBhX2VuZAkJPSAweDQ4MDVkMWZmLAorCQkuZmxhZ3MJCT0gQUREUl9UWVBFX1JUCisJfSwKK307CisKKy8qIGw0X3BlciAtPiBncGlvNiAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwNDR4eF9sNF9wZXJfX2dwaW82ID0geworCS5tYXN0ZXIJCT0gJm9tYXA0NHh4X2w0X3Blcl9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXA0NHh4X2dwaW82X2h3bW9kLAorCS5jbGsJCT0gImw0X2Rpdl9jayIsCisJLmFkZHIJCT0gb21hcDQ0eHhfZ3BpbzZfYWRkcnMsCisJLmFkZHJfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF9ncGlvNl9hZGRycyksCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKK307CisKKy8qIGdwaW82IHNsYXZlIHBvcnRzICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwNDR4eF9ncGlvNl9zbGF2ZXNbXSA9IHsKKwkmb21hcDQ0eHhfbDRfcGVyX19ncGlvNiwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vcHRfY2xrIGdwaW82X29wdF9jbGtzW10gPSB7CisJeyAucm9sZSA9ICJkYmNsayIsIC5jbGsgPSAiZ3BpbzZfZGJjbGsiIH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDQ0eHhfZ3BpbzZfaHdtb2QgPSB7CisJLm5hbWUJCT0gImdwaW82IiwKKwkuY2xhc3MJCT0gJm9tYXA0NHh4X2dwaW9faHdtb2RfY2xhc3MsCisJLmZsYWdzCQk9IEhXTU9EX0NPTlRST0xfT1BUX0NMS1NfSU5fUkVTRVQsCisJLm1wdV9pcnFzCT0gb21hcDQ0eHhfZ3BpbzZfaXJxcywKKwkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF9ncGlvNl9pcnFzKSwKKwkubWFpbl9jbGsJPSAiZ3BpbzZfaWNrIiwKKwkucHJjbSA9IHsKKwkJLm9tYXA0ID0geworCQkJLmNsa2N0cmxfcmVnID0gT01BUDQ0MzBfQ01fTDRQRVJfR1BJTzZfQ0xLQ1RSTCwKKwkJfSwKKwl9LAorCS5vcHRfY2xrcwk9IGdwaW82X29wdF9jbGtzLAorCS5vcHRfY2xrc19jbnQJPSBBUlJBWV9TSVpFKGdwaW82X29wdF9jbGtzKSwKKwkuZGV2X2F0dHIJPSAmZ3Bpb19kZXZfYXR0ciwKKwkuc2xhdmVzCQk9IG9tYXA0NHh4X2dwaW82X3NsYXZlcywKKwkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfZ3BpbzZfc2xhdmVzKSwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCit9OworCisvKgorICogJ2kyYycgY2xhc3MKKyAqIG11bHRpbWFzdGVyIGhpZ2gtc3BlZWQgaTJjIGNvbnRyb2xsZXIKKyAqLworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfY2xhc3Nfc3lzY29uZmlnIG9tYXA0NHh4X2kyY19zeXNjID0geworCS5zeXNjX29mZnMJPSAweDAwMTAsCisJLnN5c3Nfb2Zmcwk9IDB4MDA5MCwKKwkuc3lzY19mbGFncwk9IChTWVNDX0hBU19BVVRPSURMRSB8IFNZU0NfSEFTX0NMT0NLQUNUSVZJVFkgfAorCQkJICAgU1lTQ19IQVNfRU5BV0FLRVVQIHwgU1lTQ19IQVNfU0lETEVNT0RFIHwKKwkJCSAgIFNZU0NfSEFTX1NPRlRSRVNFVCB8IFNZU1NfSEFTX1JFU0VUX1NUQVRVUyksCisJLmlkbGVtb2Rlcwk9IChTSURMRV9GT1JDRSB8IFNJRExFX05PIHwgU0lETEVfU01BUlQgfAorCQkJICAgU0lETEVfU01BUlRfV0tVUCksCisJLnN5c2NfZmllbGRzCT0gJm9tYXBfaHdtb2Rfc3lzY190eXBlMSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzcyBvbWFwNDR4eF9pMmNfaHdtb2RfY2xhc3MgPSB7CisJLm5hbWUJPSAiaTJjIiwKKwkuc3lzYwk9ICZvbWFwNDR4eF9pMmNfc3lzYywKK307CisKKy8qIGkyYzEgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwNDR4eF9pMmMxX2h3bW9kOworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2lycV9pbmZvIG9tYXA0NHh4X2kyYzFfaXJxc1tdID0geworCXsgLmlycSA9IDU2ICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2RtYV9pbmZvIG9tYXA0NHh4X2kyYzFfc2RtYV9yZXFzW10gPSB7CisJeyAubmFtZSA9ICJ0eCIsIC5kbWFfcmVxID0gMjYgKyBPTUFQNDRYWF9ETUFfUkVRX1NUQVJUIH0sCisJeyAubmFtZSA9ICJyeCIsIC5kbWFfcmVxID0gMjcgKyBPTUFQNDRYWF9ETUFfUkVRX1NUQVJUIH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwNDR4eF9pMmMxX2FkZHJzW10gPSB7CisJeworCQkucGFfc3RhcnQJPSAweDQ4MDcwMDAwLAorCQkucGFfZW5kCQk9IDB4NDgwNzAwZmYsCisJCS5mbGFncwkJPSBBRERSX1RZUEVfUlQKKwl9LAorfTsKKworLyogbDRfcGVyIC0+IGkyYzEgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDQ0eHhfbDRfcGVyX19pMmMxID0geworCS5tYXN0ZXIJCT0gJm9tYXA0NHh4X2w0X3Blcl9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXA0NHh4X2kyYzFfaHdtb2QsCisJLmNsawkJPSAibDRfZGl2X2NrIiwKKwkuYWRkcgkJPSBvbWFwNDR4eF9pMmMxX2FkZHJzLAorCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfaTJjMV9hZGRycyksCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKK307CisKKy8qIGkyYzEgc2xhdmUgcG9ydHMgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXA0NHh4X2kyYzFfc2xhdmVzW10gPSB7CisJJm9tYXA0NHh4X2w0X3Blcl9faTJjMSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwNDR4eF9pMmMxX2h3bW9kID0geworCS5uYW1lCQk9ICJpMmMxIiwKKwkuY2xhc3MJCT0gJm9tYXA0NHh4X2kyY19od21vZF9jbGFzcywKKwkuZmxhZ3MJCT0gSFdNT0RfSU5JVF9OT19SRVNFVCwKKwkubXB1X2lycXMJPSBvbWFwNDR4eF9pMmMxX2lycXMsCisJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfaTJjMV9pcnFzKSwKKwkuc2RtYV9yZXFzCT0gb21hcDQ0eHhfaTJjMV9zZG1hX3JlcXMsCisJLnNkbWFfcmVxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXA0NHh4X2kyYzFfc2RtYV9yZXFzKSwKKwkubWFpbl9jbGsJPSAiaTJjMV9mY2siLAorCS5wcmNtID0geworCQkub21hcDQgPSB7CisJCQkuY2xrY3RybF9yZWcgPSBPTUFQNDQzMF9DTV9MNFBFUl9JMkMxX0NMS0NUUkwsCisJCX0sCisJfSwKKwkuc2xhdmVzCQk9IG9tYXA0NHh4X2kyYzFfc2xhdmVzLAorCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF9pMmMxX3NsYXZlcyksCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAorfTsKKworLyogaTJjMiAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXA0NHh4X2kyYzJfaHdtb2Q7CitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfaXJxX2luZm8gb21hcDQ0eHhfaTJjMl9pcnFzW10gPSB7CisJeyAuaXJxID0gNTcgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUIH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfZG1hX2luZm8gb21hcDQ0eHhfaTJjMl9zZG1hX3JlcXNbXSA9IHsKKwl7IC5uYW1lID0gInR4IiwgLmRtYV9yZXEgPSAyOCArIE9NQVA0NFhYX0RNQV9SRVFfU1RBUlQgfSwKKwl7IC5uYW1lID0gInJ4IiwgLmRtYV9yZXEgPSAyOSArIE9NQVA0NFhYX0RNQV9SRVFfU1RBUlQgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9hZGRyX3NwYWNlIG9tYXA0NHh4X2kyYzJfYWRkcnNbXSA9IHsKKwl7CisJCS5wYV9zdGFydAk9IDB4NDgwNzIwMDAsCisJCS5wYV9lbmQJCT0gMHg0ODA3MjBmZiwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVAorCX0sCit9OworCisvKiBsNF9wZXIgLT4gaTJjMiAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwNDR4eF9sNF9wZXJfX2kyYzIgPSB7CisJLm1hc3RlcgkJPSAmb21hcDQ0eHhfbDRfcGVyX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDQ0eHhfaTJjMl9od21vZCwKKwkuY2xrCQk9ICJsNF9kaXZfY2siLAorCS5hZGRyCQk9IG9tYXA0NHh4X2kyYzJfYWRkcnMsCisJLmFkZHJfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF9pMmMyX2FkZHJzKSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyogaTJjMiBzbGF2ZSBwb3J0cyAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDQ0eHhfaTJjMl9zbGF2ZXNbXSA9IHsKKwkmb21hcDQ0eHhfbDRfcGVyX19pMmMyLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXA0NHh4X2kyYzJfaHdtb2QgPSB7CisJLm5hbWUJCT0gImkyYzIiLAorCS5jbGFzcwkJPSAmb21hcDQ0eHhfaTJjX2h3bW9kX2NsYXNzLAorCS5mbGFncwkJPSBIV01PRF9JTklUX05PX1JFU0VULAorCS5tcHVfaXJxcwk9IG9tYXA0NHh4X2kyYzJfaXJxcywKKwkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF9pMmMyX2lycXMpLAorCS5zZG1hX3JlcXMJPSBvbWFwNDR4eF9pMmMyX3NkbWFfcmVxcywKKwkuc2RtYV9yZXFzX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfaTJjMl9zZG1hX3JlcXMpLAorCS5tYWluX2Nsawk9ICJpMmMyX2ZjayIsCisJLnByY20gPSB7CisJCS5vbWFwNCA9IHsKKwkJCS5jbGtjdHJsX3JlZyA9IE9NQVA0NDMwX0NNX0w0UEVSX0kyQzJfQ0xLQ1RSTCwKKwkJfSwKKwl9LAorCS5zbGF2ZXMJCT0gb21hcDQ0eHhfaTJjMl9zbGF2ZXMsCisJLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXA0NHh4X2kyYzJfc2xhdmVzKSwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCit9OworCisvKiBpMmMzICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDQ0eHhfaTJjM19od21vZDsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9pcnFfaW5mbyBvbWFwNDR4eF9pMmMzX2lycXNbXSA9IHsKKwl7IC5pcnEgPSA2MSArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9kbWFfaW5mbyBvbWFwNDR4eF9pMmMzX3NkbWFfcmVxc1tdID0geworCXsgLm5hbWUgPSAidHgiLCAuZG1hX3JlcSA9IDI0ICsgT01BUDQ0WFhfRE1BX1JFUV9TVEFSVCB9LAorCXsgLm5hbWUgPSAicngiLCAuZG1hX3JlcSA9IDI1ICsgT01BUDQ0WFhfRE1BX1JFUV9TVEFSVCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDQ0eHhfaTJjM19hZGRyc1tdID0geworCXsKKwkJLnBhX3N0YXJ0CT0gMHg0ODA2MDAwMCwKKwkJLnBhX2VuZAkJPSAweDQ4MDYwMGZmLAorCQkuZmxhZ3MJCT0gQUREUl9UWVBFX1JUCisJfSwKK307CisKKy8qIGw0X3BlciAtPiBpMmMzICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXA0NHh4X2w0X3Blcl9faTJjMyA9IHsKKwkubWFzdGVyCQk9ICZvbWFwNDR4eF9sNF9wZXJfaHdtb2QsCisJLnNsYXZlCQk9ICZvbWFwNDR4eF9pMmMzX2h3bW9kLAorCS5jbGsJCT0gImw0X2Rpdl9jayIsCisJLmFkZHIJCT0gb21hcDQ0eHhfaTJjM19hZGRycywKKwkuYWRkcl9jbnQJPSBBUlJBWV9TSVpFKG9tYXA0NHh4X2kyYzNfYWRkcnMpLAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCit9OworCisvKiBpMmMzIHNsYXZlIHBvcnRzICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwNDR4eF9pMmMzX3NsYXZlc1tdID0geworCSZvbWFwNDR4eF9sNF9wZXJfX2kyYzMsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDQ0eHhfaTJjM19od21vZCA9IHsKKwkubmFtZQkJPSAiaTJjMyIsCisJLmNsYXNzCQk9ICZvbWFwNDR4eF9pMmNfaHdtb2RfY2xhc3MsCisJLmZsYWdzCQk9IEhXTU9EX0lOSVRfTk9fUkVTRVQsCisJLm1wdV9pcnFzCT0gb21hcDQ0eHhfaTJjM19pcnFzLAorCS5tcHVfaXJxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXA0NHh4X2kyYzNfaXJxcyksCisJLnNkbWFfcmVxcwk9IG9tYXA0NHh4X2kyYzNfc2RtYV9yZXFzLAorCS5zZG1hX3JlcXNfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF9pMmMzX3NkbWFfcmVxcyksCisJLm1haW5fY2xrCT0gImkyYzNfZmNrIiwKKwkucHJjbSA9IHsKKwkJLm9tYXA0ID0geworCQkJLmNsa2N0cmxfcmVnID0gT01BUDQ0MzBfQ01fTDRQRVJfSTJDM19DTEtDVFJMLAorCQl9LAorCX0sCisJLnNsYXZlcwkJPSBvbWFwNDR4eF9pMmMzX3NsYXZlcywKKwkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfaTJjM19zbGF2ZXMpLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKK307CisKKy8qIGkyYzQgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwNDR4eF9pMmM0X2h3bW9kOworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2lycV9pbmZvIG9tYXA0NHh4X2kyYzRfaXJxc1tdID0geworCXsgLmlycSA9IDYyICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2RtYV9pbmZvIG9tYXA0NHh4X2kyYzRfc2RtYV9yZXFzW10gPSB7CisJeyAubmFtZSA9ICJ0eCIsIC5kbWFfcmVxID0gMTIzICsgT01BUDQ0WFhfRE1BX1JFUV9TVEFSVCB9LAorCXsgLm5hbWUgPSAicngiLCAuZG1hX3JlcSA9IDEyNCArIE9NQVA0NFhYX0RNQV9SRVFfU1RBUlQgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9hZGRyX3NwYWNlIG9tYXA0NHh4X2kyYzRfYWRkcnNbXSA9IHsKKwl7CisJCS5wYV9zdGFydAk9IDB4NDgzNTAwMDAsCisJCS5wYV9lbmQJCT0gMHg0ODM1MDBmZiwKKwkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVAorCX0sCit9OworCisvKiBsNF9wZXIgLT4gaTJjNCAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwNDR4eF9sNF9wZXJfX2kyYzQgPSB7CisJLm1hc3RlcgkJPSAmb21hcDQ0eHhfbDRfcGVyX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDQ0eHhfaTJjNF9od21vZCwKKwkuY2xrCQk9ICJsNF9kaXZfY2siLAorCS5hZGRyCQk9IG9tYXA0NHh4X2kyYzRfYWRkcnMsCisJLmFkZHJfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF9pMmM0X2FkZHJzKSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyogaTJjNCBzbGF2ZSBwb3J0cyAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDQ0eHhfaTJjNF9zbGF2ZXNbXSA9IHsKKwkmb21hcDQ0eHhfbDRfcGVyX19pMmM0LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXA0NHh4X2kyYzRfaHdtb2QgPSB7CisJLm5hbWUJCT0gImkyYzQiLAorCS5jbGFzcwkJPSAmb21hcDQ0eHhfaTJjX2h3bW9kX2NsYXNzLAorCS5mbGFncwkJPSBIV01PRF9JTklUX05PX1JFU0VULAorCS5tcHVfaXJxcwk9IG9tYXA0NHh4X2kyYzRfaXJxcywKKwkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF9pMmM0X2lycXMpLAorCS5zZG1hX3JlcXMJPSBvbWFwNDR4eF9pMmM0X3NkbWFfcmVxcywKKwkuc2RtYV9yZXFzX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfaTJjNF9zZG1hX3JlcXMpLAorCS5tYWluX2Nsawk9ICJpMmM0X2ZjayIsCisJLnByY20gPSB7CisJCS5vbWFwNCA9IHsKKwkJCS5jbGtjdHJsX3JlZyA9IE9NQVA0NDMwX0NNX0w0UEVSX0kyQzRfQ0xLQ1RSTCwKKwkJfSwKKwl9LAorCS5zbGF2ZXMJCT0gb21hcDQ0eHhfaTJjNF9zbGF2ZXMsCisJLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXA0NHh4X2kyYzRfc2xhdmVzKSwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCit9OworCisvKgorICogJ2l2YScgY2xhc3MKKyAqIG11bHRpLXN0YW5kYXJkIHZpZGVvIGVuY29kZXIvZGVjb2RlciBoYXJkd2FyZSBhY2NlbGVyYXRvcgorICovCisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzcyBvbWFwNDR4eF9pdmFfaHdtb2RfY2xhc3MgPSB7CisJLm5hbWUJPSAiaXZhIiwKK307CisKKy8qIGl2YSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2lycV9pbmZvIG9tYXA0NHh4X2l2YV9pcnFzW10gPSB7CisJeyAubmFtZSA9ICJzeW5jXzEiLCAuaXJxID0gMTAzICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCB9LAorCXsgLm5hbWUgPSAic3luY18wIiwgLmlycSA9IDEwNCArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQgfSwKKwl7IC5uYW1lID0gIm1haWxib3hfMCIsIC5pcnEgPSAxMDcgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUIH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfcnN0X2luZm8gb21hcDQ0eHhfaXZhX3Jlc2V0c1tdID0geworCXsgLm5hbWUgPSAibG9naWMiLCAucnN0X3NoaWZ0ID0gMiB9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX3JzdF9pbmZvIG9tYXA0NHh4X2l2YV9zZXEwX3Jlc2V0c1tdID0geworCXsgLm5hbWUgPSAic2VxMCIsIC5yc3Rfc2hpZnQgPSAwIH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfcnN0X2luZm8gb21hcDQ0eHhfaXZhX3NlcTFfcmVzZXRzW10gPSB7CisJeyAubmFtZSA9ICJzZXExIiwgLnJzdF9zaGlmdCA9IDEgfSwKK307CisKKy8qIGl2YSBtYXN0ZXIgcG9ydHMgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXA0NHh4X2l2YV9tYXN0ZXJzW10gPSB7CisJJm9tYXA0NHh4X2l2YV9fbDNfbWFpbl8yLAorCSZvbWFwNDR4eF9pdmFfX2wzX2luc3RyLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDQ0eHhfaXZhX2FkZHJzW10gPSB7CisJeworCQkucGFfc3RhcnQJPSAweDVhMDAwMDAwLAorCQkucGFfZW5kCQk9IDB4NWEwN2ZmZmYsCisJCS5mbGFncwkJPSBBRERSX1RZUEVfUlQKKwl9LAorfTsKKworLyogbDNfbWFpbl8yIC0+IGl2YSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwNDR4eF9sM19tYWluXzJfX2l2YSA9IHsKKwkubWFzdGVyCQk9ICZvbWFwNDR4eF9sM19tYWluXzJfaHdtb2QsCisJLnNsYXZlCQk9ICZvbWFwNDR4eF9pdmFfaHdtb2QsCisJLmNsawkJPSAibDNfZGl2X2NrIiwKKwkuYWRkcgkJPSBvbWFwNDR4eF9pdmFfYWRkcnMsCisJLmFkZHJfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF9pdmFfYWRkcnMpLAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSwKK307CisKKy8qIGl2YSBzbGF2ZSBwb3J0cyAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDQ0eHhfaXZhX3NsYXZlc1tdID0geworCSZvbWFwNDR4eF9kc3BfX2l2YSwKKwkmb21hcDQ0eHhfbDNfbWFpbl8yX19pdmEsCit9OworCisvKiBQc2V1ZG8gaHdtb2QgZm9yIHJlc2V0IGNvbnRyb2wgcHVycG9zZSBvbmx5ICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDQ0eHhfaXZhX3NlcTBfaHdtb2QgPSB7CisJLm5hbWUJCT0gIml2YV9zZXEwIiwKKwkuY2xhc3MJCT0gJm9tYXA0NHh4X2l2YV9od21vZF9jbGFzcywKKwkuZmxhZ3MJCT0gSFdNT0RfSU5JVF9OT19SRVNFVCwKKwkucnN0X2xpbmVzCT0gb21hcDQ0eHhfaXZhX3NlcTBfcmVzZXRzLAorCS5yc3RfbGluZXNfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF9pdmFfc2VxMF9yZXNldHMpLAorCS5wcmNtID0geworCQkub21hcDQgPSB7CisJCQkucnN0Y3RybF9yZWcgPSBPTUFQNDQzMF9STV9JVkFIRF9SU1RDVFJMLAorCQl9LAorCX0sCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAorfTsKKworLyogUHNldWRvIGh3bW9kIGZvciByZXNldCBjb250cm9sIHB1cnBvc2Ugb25seSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXA0NHh4X2l2YV9zZXExX2h3bW9kID0geworCS5uYW1lCQk9ICJpdmFfc2VxMSIsCisJLmNsYXNzCQk9ICZvbWFwNDR4eF9pdmFfaHdtb2RfY2xhc3MsCisJLmZsYWdzCQk9IEhXTU9EX0lOSVRfTk9fUkVTRVQsCisJLnJzdF9saW5lcwk9IG9tYXA0NHh4X2l2YV9zZXExX3Jlc2V0cywKKwkucnN0X2xpbmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfaXZhX3NlcTFfcmVzZXRzKSwKKwkucHJjbSA9IHsKKwkJLm9tYXA0ID0geworCQkJLnJzdGN0cmxfcmVnID0gT01BUDQ0MzBfUk1fSVZBSERfUlNUQ1RSTCwKKwkJfSwKKwl9LAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwNDR4eF9pdmFfaHdtb2QgPSB7CisJLm5hbWUJCT0gIml2YSIsCisJLmNsYXNzCQk9ICZvbWFwNDR4eF9pdmFfaHdtb2RfY2xhc3MsCisJLm1wdV9pcnFzCT0gb21hcDQ0eHhfaXZhX2lycXMsCisJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfaXZhX2lycXMpLAorCS5yc3RfbGluZXMJPSBvbWFwNDR4eF9pdmFfcmVzZXRzLAorCS5yc3RfbGluZXNfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF9pdmFfcmVzZXRzKSwKKwkubWFpbl9jbGsJPSAiaXZhX2ZjayIsCisJLnByY20gPSB7CisJCS5vbWFwNCA9IHsKKwkJCS5jbGtjdHJsX3JlZyA9IE9NQVA0NDMwX0NNX0lWQUhEX0lWQUhEX0NMS0NUUkwsCisJCQkucnN0Y3RybF9yZWcgPSBPTUFQNDQzMF9STV9JVkFIRF9SU1RDVFJMLAorCQl9LAorCX0sCisJLnNsYXZlcwkJPSBvbWFwNDR4eF9pdmFfc2xhdmVzLAorCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF9pdmFfc2xhdmVzKSwKKwkubWFzdGVycwk9IG9tYXA0NHh4X2l2YV9tYXN0ZXJzLAorCS5tYXN0ZXJzX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfaXZhX21hc3RlcnMpLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKK307CisKKy8qCiAgKiAnbXB1JyBjbGFzcwogICogbXB1IHN1Yi1zeXN0ZW0KICAqLwogCiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfY2xhc3Mgb21hcDQ0eHhfbXB1X2h3bW9kX2NsYXNzID0gewotCS5uYW1lID0gIm1wdSIsCisJLm5hbWUJPSAibXB1IiwKIH07CiAKIC8qIG1wdSAqLwpAQCAtNDUzLDE5ICsxNDc1LDE2NyBAQAogfTsKIAogLyoKLSAqICd3ZF90aW1lcicgY2xhc3MKLSAqIDMyLWJpdCB3YXRjaGRvZyB1cHdhcmQgY291bnRlciB0aGF0IGdlbmVyYXRlcyBhIHB1bHNlIG9uIHRoZSByZXNldCBwaW4gb24KLSAqIG92ZXJmbG93IGNvbmRpdGlvbgorICogJ3NtYXJ0cmVmbGV4JyBjbGFzcworICogc21hcnRyZWZsZXggbW9kdWxlIChtb25pdG9yIHNpbGljb24gcGVyZm9ybWFuY2UgYW5kIG91dHB1dHMgYSBtZWFzdXJlIG9mCisgKiBwZXJmb3JtYW5jZSBlcnJvcikKICAqLwogCi1zdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfY2xhc3Nfc3lzY29uZmlnIG9tYXA0NHh4X3dkX3RpbWVyX3N5c2MgPSB7Ci0JLnJldl9vZmZzCT0gMHgwMDAwLAotCS5zeXNjX29mZnMJPSAweDAwMTAsCi0JLnN5c3Nfb2Zmcwk9IDB4MDAxNCwKLQkuc3lzY19mbGFncwk9IChTWVNDX0hBU19TSURMRU1PREUgfCBTWVNDX0hBU19FTVVGUkVFIHwKLQkJCSAgIFNZU0NfSEFTX1NPRlRSRVNFVCksCi0JLmlkbGVtb2Rlcwk9IChTSURMRV9GT1JDRSB8IFNJRExFX05PIHwgU0lETEVfU01BUlQpLAotCS5zeXNjX2ZpZWxkcwk9ICZvbWFwX2h3bW9kX3N5c2NfdHlwZTEsCisvKiBUaGUgSVAgaXMgbm90IGNvbXBsaWFudCB0byB0eXBlMSAvIHR5cGUyIHNjaGVtZSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX3N5c2NfZmllbGRzIG9tYXBfaHdtb2Rfc3lzY190eXBlX3NtYXJ0cmVmbGV4ID0geworCS5zaWRsZV9zaGlmdAk9IDI0LAorCS5lbndrdXBfc2hpZnQJPSAyNiwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzc19zeXNjb25maWcgb21hcDQ0eHhfc21hcnRyZWZsZXhfc3lzYyA9IHsKKwkuc3lzY19vZmZzCT0gMHgwMDM4LAorCS5zeXNjX2ZsYWdzCT0gKFNZU0NfSEFTX0VOQVdBS0VVUCB8IFNZU0NfSEFTX1NJRExFTU9ERSksCisJLmlkbGVtb2Rlcwk9IChTSURMRV9GT1JDRSB8IFNJRExFX05PIHwgU0lETEVfU01BUlQgfAorCQkJICAgU0lETEVfU01BUlRfV0tVUCksCisJLnN5c2NfZmllbGRzCT0gJm9tYXBfaHdtb2Rfc3lzY190eXBlX3NtYXJ0cmVmbGV4LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzIG9tYXA0NHh4X3NtYXJ0cmVmbGV4X2h3bW9kX2NsYXNzID0geworCS5uYW1lCT0gInNtYXJ0cmVmbGV4IiwKKwkuc3lzYwk9ICZvbWFwNDR4eF9zbWFydHJlZmxleF9zeXNjLAorCS5yZXYJPSAyLAorfTsKKworLyogc21hcnRyZWZsZXhfY29yZSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXA0NHh4X3NtYXJ0cmVmbGV4X2NvcmVfaHdtb2Q7CitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfaXJxX2luZm8gb21hcDQ0eHhfc21hcnRyZWZsZXhfY29yZV9pcnFzW10gPSB7CisJeyAuaXJxID0gMTkgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUIH0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwNDR4eF9zbWFydHJlZmxleF9jb3JlX2FkZHJzW10gPSB7CisJeworCQkucGFfc3RhcnQJPSAweDRhMGRkMDAwLAorCQkucGFfZW5kCQk9IDB4NGEwZGQwM2YsCisJCS5mbGFncwkJPSBBRERSX1RZUEVfUlQKKwl9LAorfTsKKworLyogbDRfY2ZnIC0+IHNtYXJ0cmVmbGV4X2NvcmUgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDQ0eHhfbDRfY2ZnX19zbWFydHJlZmxleF9jb3JlID0geworCS5tYXN0ZXIJCT0gJm9tYXA0NHh4X2w0X2NmZ19od21vZCwKKwkuc2xhdmUJCT0gJm9tYXA0NHh4X3NtYXJ0cmVmbGV4X2NvcmVfaHdtb2QsCisJLmNsawkJPSAibDRfZGl2X2NrIiwKKwkuYWRkcgkJPSBvbWFwNDR4eF9zbWFydHJlZmxleF9jb3JlX2FkZHJzLAorCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfc21hcnRyZWZsZXhfY29yZV9hZGRycyksCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKK307CisKKy8qIHNtYXJ0cmVmbGV4X2NvcmUgc2xhdmUgcG9ydHMgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXA0NHh4X3NtYXJ0cmVmbGV4X2NvcmVfc2xhdmVzW10gPSB7CisJJm9tYXA0NHh4X2w0X2NmZ19fc21hcnRyZWZsZXhfY29yZSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwNDR4eF9zbWFydHJlZmxleF9jb3JlX2h3bW9kID0geworCS5uYW1lCQk9ICJzbWFydHJlZmxleF9jb3JlIiwKKwkuY2xhc3MJCT0gJm9tYXA0NHh4X3NtYXJ0cmVmbGV4X2h3bW9kX2NsYXNzLAorCS5tcHVfaXJxcwk9IG9tYXA0NHh4X3NtYXJ0cmVmbGV4X2NvcmVfaXJxcywKKwkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF9zbWFydHJlZmxleF9jb3JlX2lycXMpLAorCS5tYWluX2Nsawk9ICJzbWFydHJlZmxleF9jb3JlX2ZjayIsCisJLnZkZF9uYW1lCT0gImNvcmUiLAorCS5wcmNtID0geworCQkub21hcDQgPSB7CisJCQkuY2xrY3RybF9yZWcgPSBPTUFQNDQzMF9DTV9BTFdPTl9TUl9DT1JFX0NMS0NUUkwsCisJCX0sCisJfSwKKwkuc2xhdmVzCQk9IG9tYXA0NHh4X3NtYXJ0cmVmbGV4X2NvcmVfc2xhdmVzLAorCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF9zbWFydHJlZmxleF9jb3JlX3NsYXZlcyksCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAorfTsKKworLyogc21hcnRyZWZsZXhfaXZhICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDQ0eHhfc21hcnRyZWZsZXhfaXZhX2h3bW9kOworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2lycV9pbmZvIG9tYXA0NHh4X3NtYXJ0cmVmbGV4X2l2YV9pcnFzW10gPSB7CisJeyAuaXJxID0gMTAyICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDQ0eHhfc21hcnRyZWZsZXhfaXZhX2FkZHJzW10gPSB7CisJeworCQkucGFfc3RhcnQJPSAweDRhMGRiMDAwLAorCQkucGFfZW5kCQk9IDB4NGEwZGIwM2YsCisJCS5mbGFncwkJPSBBRERSX1RZUEVfUlQKKwl9LAorfTsKKworLyogbDRfY2ZnIC0+IHNtYXJ0cmVmbGV4X2l2YSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwNDR4eF9sNF9jZmdfX3NtYXJ0cmVmbGV4X2l2YSA9IHsKKwkubWFzdGVyCQk9ICZvbWFwNDR4eF9sNF9jZmdfaHdtb2QsCisJLnNsYXZlCQk9ICZvbWFwNDR4eF9zbWFydHJlZmxleF9pdmFfaHdtb2QsCisJLmNsawkJPSAibDRfZGl2X2NrIiwKKwkuYWRkcgkJPSBvbWFwNDR4eF9zbWFydHJlZmxleF9pdmFfYWRkcnMsCisJLmFkZHJfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF9zbWFydHJlZmxleF9pdmFfYWRkcnMpLAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCit9OworCisvKiBzbWFydHJlZmxleF9pdmEgc2xhdmUgcG9ydHMgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXA0NHh4X3NtYXJ0cmVmbGV4X2l2YV9zbGF2ZXNbXSA9IHsKKwkmb21hcDQ0eHhfbDRfY2ZnX19zbWFydHJlZmxleF9pdmEsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDQ0eHhfc21hcnRyZWZsZXhfaXZhX2h3bW9kID0geworCS5uYW1lCQk9ICJzbWFydHJlZmxleF9pdmEiLAorCS5jbGFzcwkJPSAmb21hcDQ0eHhfc21hcnRyZWZsZXhfaHdtb2RfY2xhc3MsCisJLm1wdV9pcnFzCT0gb21hcDQ0eHhfc21hcnRyZWZsZXhfaXZhX2lycXMsCisJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfc21hcnRyZWZsZXhfaXZhX2lycXMpLAorCS5tYWluX2Nsawk9ICJzbWFydHJlZmxleF9pdmFfZmNrIiwKKwkudmRkX25hbWUJPSAiaXZhIiwKKwkucHJjbSA9IHsKKwkJLm9tYXA0ID0geworCQkJLmNsa2N0cmxfcmVnID0gT01BUDQ0MzBfQ01fQUxXT05fU1JfSVZBX0NMS0NUUkwsCisJCX0sCisJfSwKKwkuc2xhdmVzCQk9IG9tYXA0NHh4X3NtYXJ0cmVmbGV4X2l2YV9zbGF2ZXMsCisJLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXA0NHh4X3NtYXJ0cmVmbGV4X2l2YV9zbGF2ZXMpLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKK307CisKKy8qIHNtYXJ0cmVmbGV4X21wdSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXA0NHh4X3NtYXJ0cmVmbGV4X21wdV9od21vZDsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9pcnFfaW5mbyBvbWFwNDR4eF9zbWFydHJlZmxleF9tcHVfaXJxc1tdID0geworCXsgLmlycSA9IDE4ICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDQ0eHhfc21hcnRyZWZsZXhfbXB1X2FkZHJzW10gPSB7CisJeworCQkucGFfc3RhcnQJPSAweDRhMGQ5MDAwLAorCQkucGFfZW5kCQk9IDB4NGEwZDkwM2YsCisJCS5mbGFncwkJPSBBRERSX1RZUEVfUlQKKwl9LAorfTsKKworLyogbDRfY2ZnIC0+IHNtYXJ0cmVmbGV4X21wdSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwNDR4eF9sNF9jZmdfX3NtYXJ0cmVmbGV4X21wdSA9IHsKKwkubWFzdGVyCQk9ICZvbWFwNDR4eF9sNF9jZmdfaHdtb2QsCisJLnNsYXZlCQk9ICZvbWFwNDR4eF9zbWFydHJlZmxleF9tcHVfaHdtb2QsCisJLmNsawkJPSAibDRfZGl2X2NrIiwKKwkuYWRkcgkJPSBvbWFwNDR4eF9zbWFydHJlZmxleF9tcHVfYWRkcnMsCisJLmFkZHJfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF9zbWFydHJlZmxleF9tcHVfYWRkcnMpLAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCit9OworCisvKiBzbWFydHJlZmxleF9tcHUgc2xhdmUgcG9ydHMgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXA0NHh4X3NtYXJ0cmVmbGV4X21wdV9zbGF2ZXNbXSA9IHsKKwkmb21hcDQ0eHhfbDRfY2ZnX19zbWFydHJlZmxleF9tcHUsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDQ0eHhfc21hcnRyZWZsZXhfbXB1X2h3bW9kID0geworCS5uYW1lCQk9ICJzbWFydHJlZmxleF9tcHUiLAorCS5jbGFzcwkJPSAmb21hcDQ0eHhfc21hcnRyZWZsZXhfaHdtb2RfY2xhc3MsCisJLm1wdV9pcnFzCT0gb21hcDQ0eHhfc21hcnRyZWZsZXhfbXB1X2lycXMsCisJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfc21hcnRyZWZsZXhfbXB1X2lycXMpLAorCS5tYWluX2Nsawk9ICJzbWFydHJlZmxleF9tcHVfZmNrIiwKKwkudmRkX25hbWUJPSAibXB1IiwKKwkucHJjbSA9IHsKKwkJLm9tYXA0ID0geworCQkJLmNsa2N0cmxfcmVnID0gT01BUDQ0MzBfQ01fQUxXT05fU1JfTVBVX0NMS0NUUkwsCisJCX0sCisJfSwKKwkuc2xhdmVzCQk9IG9tYXA0NHh4X3NtYXJ0cmVmbGV4X21wdV9zbGF2ZXMsCisJLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXA0NHh4X3NtYXJ0cmVmbGV4X21wdV9zbGF2ZXMpLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKIH07CiAKIC8qCkBAIC00NzcsMzQgKzE2NDcsMTcgQEAKIAkucmV2X29mZnMJPSAweDAwNTAsCiAJLnN5c2Nfb2Zmcwk9IDB4MDA1NCwKIAkuc3lzc19vZmZzCT0gMHgwMDU4LAotCS5zeXNjX2ZsYWdzCT0gKFNZU0NfSEFTX0VOQVdBS0VVUCB8IFNZU0NfSEFTX1NJRExFTU9ERSB8Ci0JCQkgICBTWVNDX0hBU19TT0ZUUkVTRVQgfCBTWVNDX0hBU19BVVRPSURMRSksCi0JLmlkbGVtb2Rlcwk9IChTSURMRV9GT1JDRSB8IFNJRExFX05PIHwgU0lETEVfU01BUlQpLAorCS5zeXNjX2ZsYWdzCT0gKFNZU0NfSEFTX0FVVE9JRExFIHwgU1lTQ19IQVNfRU5BV0FLRVVQIHwKKwkJCSAgIFNZU0NfSEFTX1NJRExFTU9ERSB8IFNZU0NfSEFTX1NPRlRSRVNFVCB8CisJCQkgICBTWVNTX0hBU19SRVNFVF9TVEFUVVMpLAorCS5pZGxlbW9kZXMJPSAoU0lETEVfRk9SQ0UgfCBTSURMRV9OTyB8IFNJRExFX1NNQVJUIHwKKwkJCSAgIFNJRExFX1NNQVJUX1dLVVApLAogCS5zeXNjX2ZpZWxkcwk9ICZvbWFwX2h3bW9kX3N5c2NfdHlwZTEsCiB9OwogCi1zdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfY2xhc3Mgb21hcDQ0eHhfd2RfdGltZXJfaHdtb2RfY2xhc3MgPSB7Ci0JLm5hbWUgPSAid2RfdGltZXIiLAotCS5zeXNjID0gJm9tYXA0NHh4X3dkX3RpbWVyX3N5c2MsCi19OwotCi0vKiB3ZF90aW1lcjIgKi8KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwNDR4eF93ZF90aW1lcjJfaHdtb2Q7Ci1zdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfaXJxX2luZm8gb21hcDQ0eHhfd2RfdGltZXIyX2lycXNbXSA9IHsKLQl7IC5pcnEgPSA4MCArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQgfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9hZGRyX3NwYWNlIG9tYXA0NHh4X3dkX3RpbWVyMl9hZGRyc1tdID0gewotCXsKLQkJLnBhX3N0YXJ0CT0gMHg0YTMxNDAwMCwKLQkJLnBhX2VuZAkJPSAweDRhMzE0MDdmLAotCQkuZmxhZ3MJCT0gQUREUl9UWVBFX1JUCi0JfSwKLX07Ci0KIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzcyBvbWFwNDR4eF91YXJ0X2h3bW9kX2NsYXNzID0gewotCS5uYW1lID0gInVhcnQiLAotCS5zeXNjID0gJm9tYXA0NHh4X3VhcnRfc3lzYywKKwkubmFtZQk9ICJ1YXJ0IiwKKwkuc3lzYwk9ICZvbWFwNDR4eF91YXJ0X3N5c2MsCiB9OwogCiAvKiB1YXJ0MSAqLwpAQCAtNTc4LDUxICsxNzMxLDYgQEAKIAl9LAogfTsKIAotLyogbDRfd2t1cCAtPiB3ZF90aW1lcjIgKi8KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDQ0eHhfbDRfd2t1cF9fd2RfdGltZXIyID0gewotCS5tYXN0ZXIJCT0gJm9tYXA0NHh4X2w0X3drdXBfaHdtb2QsCi0JLnNsYXZlCQk9ICZvbWFwNDR4eF93ZF90aW1lcjJfaHdtb2QsCi0JLmNsawkJPSAibDRfd2t1cF9jbGtfbXV4X2NrIiwKLQkuYWRkcgkJPSBvbWFwNDR4eF93ZF90aW1lcjJfYWRkcnMsCi0JLmFkZHJfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF93ZF90aW1lcjJfYWRkcnMpLAotCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCi19OwotCi0vKiB3ZF90aW1lcjIgc2xhdmUgcG9ydHMgKi8KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXA0NHh4X3dkX3RpbWVyMl9zbGF2ZXNbXSA9IHsKLQkmb21hcDQ0eHhfbDRfd2t1cF9fd2RfdGltZXIyLAotfTsKLQotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXA0NHh4X3dkX3RpbWVyMl9od21vZCA9IHsKLQkubmFtZQkJPSAid2RfdGltZXIyIiwKLQkuY2xhc3MJCT0gJm9tYXA0NHh4X3dkX3RpbWVyX2h3bW9kX2NsYXNzLAotCS5tcHVfaXJxcwk9IG9tYXA0NHh4X3dkX3RpbWVyMl9pcnFzLAotCS5tcHVfaXJxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXA0NHh4X3dkX3RpbWVyMl9pcnFzKSwKLQkubWFpbl9jbGsJPSAid2RfdGltZXIyX2ZjayIsCi0JLnByY20gPSB7Ci0JCS5vbWFwNCA9IHsKLQkJCS5jbGtjdHJsX3JlZyA9IE9NQVA0NDMwX0NNX1dLVVBfV0RUMl9DTEtDVFJMLAotCQl9LAotCX0sCi0JLnNsYXZlcwkJPSBvbWFwNDR4eF93ZF90aW1lcjJfc2xhdmVzLAotCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF93ZF90aW1lcjJfc2xhdmVzKSwKLQkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCi19OwotCi0vKiB3ZF90aW1lcjMgKi8KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwNDR4eF93ZF90aW1lcjNfaHdtb2Q7Ci1zdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfaXJxX2luZm8gb21hcDQ0eHhfd2RfdGltZXIzX2lycXNbXSA9IHsKLQl7IC5pcnEgPSAzNiArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQgfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9hZGRyX3NwYWNlIG9tYXA0NHh4X3dkX3RpbWVyM19hZGRyc1tdID0gewotCXsKLQkJLnBhX3N0YXJ0CT0gMHg0MDEzMDAwMCwKLQkJLnBhX2VuZAkJPSAweDQwMTMwMDdmLAotCQkuZmxhZ3MJCT0gQUREUl9UWVBFX1JUCi0JfSwKLX07Ci0KIC8qIGw0X3BlciAtPiB1YXJ0MiAqLwogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwNDR4eF9sNF9wZXJfX3VhcnQyID0gewogCS5tYXN0ZXIJCT0gJm9tYXA0NHh4X2w0X3Blcl9od21vZCwKQEAgLTY3NSwyNSArMTc4Myw2IEBACiAJfSwKIH07CiAKLS8qIGw0X2FiZSAtPiB3ZF90aW1lcjMgKi8KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDQ0eHhfbDRfYWJlX193ZF90aW1lcjMgPSB7Ci0JLm1hc3RlcgkJPSAmb21hcDQ0eHhfbDRfYWJlX2h3bW9kLAotCS5zbGF2ZQkJPSAmb21hcDQ0eHhfd2RfdGltZXIzX2h3bW9kLAotCS5jbGsJCT0gIm9jcF9hYmVfaWNsayIsCi0JLmFkZHIJCT0gb21hcDQ0eHhfd2RfdGltZXIzX2FkZHJzLAotCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfd2RfdGltZXIzX2FkZHJzKSwKLQkudXNlcgkJPSBPQ1BfVVNFUl9NUFUsCi19OwotCi0vKiBsNF9hYmUgLT4gd2RfdGltZXIzIChkbWEpICovCi1zdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwNDR4eF93ZF90aW1lcjNfZG1hX2FkZHJzW10gPSB7Ci0JewotCQkucGFfc3RhcnQJPSAweDQ5MDMwMDAwLAotCQkucGFfZW5kCQk9IDB4NDkwMzAwN2YsCi0JCS5mbGFncwkJPSBBRERSX1RZUEVfUlQKLQl9LAotfTsKLQogLyogbDRfcGVyIC0+IHVhcnQzICovCiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXA0NHh4X2w0X3Blcl9fdWFydDMgPSB7CiAJLm1hc3RlcgkJPSAmb21hcDQ0eHhfbDRfcGVyX2h3bW9kLApAQCAtNzQ3LDM3ICsxODM2LDYgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwNDR4eF9sNF9hYmVfX3dkX3RpbWVyM19kbWEgPSB7Ci0JLm1hc3RlcgkJPSAmb21hcDQ0eHhfbDRfYWJlX2h3bW9kLAotCS5zbGF2ZQkJPSAmb21hcDQ0eHhfd2RfdGltZXIzX2h3bW9kLAotCS5jbGsJCT0gIm9jcF9hYmVfaWNsayIsCi0JLmFkZHIJCT0gb21hcDQ0eHhfd2RfdGltZXIzX2RtYV9hZGRycywKLQkuYWRkcl9jbnQJPSBBUlJBWV9TSVpFKG9tYXA0NHh4X3dkX3RpbWVyM19kbWFfYWRkcnMpLAotCS51c2VyCQk9IE9DUF9VU0VSX1NETUEsCi19OwotCi0vKiB3ZF90aW1lcjMgc2xhdmUgcG9ydHMgKi8KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXA0NHh4X3dkX3RpbWVyM19zbGF2ZXNbXSA9IHsKLQkmb21hcDQ0eHhfbDRfYWJlX193ZF90aW1lcjMsCi0JJm9tYXA0NHh4X2w0X2FiZV9fd2RfdGltZXIzX2RtYSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwNDR4eF93ZF90aW1lcjNfaHdtb2QgPSB7Ci0JLm5hbWUJCT0gIndkX3RpbWVyMyIsCi0JLmNsYXNzCQk9ICZvbWFwNDR4eF93ZF90aW1lcl9od21vZF9jbGFzcywKLQkubXB1X2lycXMJPSBvbWFwNDR4eF93ZF90aW1lcjNfaXJxcywKLQkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF93ZF90aW1lcjNfaXJxcyksCi0JLm1haW5fY2xrCT0gIndkX3RpbWVyM19mY2siLAotCS5wcmNtID0gewotCQkub21hcDQgPSB7Ci0JCQkuY2xrY3RybF9yZWcgPSBPTUFQNDQzMF9DTTFfQUJFX1dEVDNfQ0xLQ1RSTCwKLQkJfSwKLQl9LAotCS5zbGF2ZXMJCT0gb21hcDQ0eHhfd2RfdGltZXIzX3NsYXZlcywKLQkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfd2RfdGltZXIzX3NsYXZlcyksCi0JLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAotfTsKLQogLyogbDRfcGVyIC0+IHVhcnQ0ICovCiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXA0NHh4X2w0X3Blcl9fdWFydDQgPSB7CiAJLm1hc3RlcgkJPSAmb21hcDQ0eHhfbDRfcGVyX2h3bW9kLApAQCAtODExLDM1ICsxODY5LDIwNSBAQAogCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKIH07CiAKKy8qCisgKiAnd2RfdGltZXInIGNsYXNzCisgKiAzMi1iaXQgd2F0Y2hkb2cgdXB3YXJkIGNvdW50ZXIgdGhhdCBnZW5lcmF0ZXMgYSBwdWxzZSBvbiB0aGUgcmVzZXQgcGluIG9uCisgKiBvdmVyZmxvdyBjb25kaXRpb24KKyAqLworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfY2xhc3Nfc3lzY29uZmlnIG9tYXA0NHh4X3dkX3RpbWVyX3N5c2MgPSB7CisJLnJldl9vZmZzCT0gMHgwMDAwLAorCS5zeXNjX29mZnMJPSAweDAwMTAsCisJLnN5c3Nfb2Zmcwk9IDB4MDAxNCwKKwkuc3lzY19mbGFncwk9IChTWVNDX0hBU19FTVVGUkVFIHwgU1lTQ19IQVNfU0lETEVNT0RFIHwKKwkJCSAgIFNZU0NfSEFTX1NPRlRSRVNFVCB8IFNZU1NfSEFTX1JFU0VUX1NUQVRVUyksCisJLmlkbGVtb2Rlcwk9IChTSURMRV9GT1JDRSB8IFNJRExFX05PIHwgU0lETEVfU01BUlQgfAorCQkJICAgU0lETEVfU01BUlRfV0tVUCksCisJLnN5c2NfZmllbGRzCT0gJm9tYXBfaHdtb2Rfc3lzY190eXBlMSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzcyBvbWFwNDR4eF93ZF90aW1lcl9od21vZF9jbGFzcyA9IHsKKwkubmFtZQkJPSAid2RfdGltZXIiLAorCS5zeXNjCQk9ICZvbWFwNDR4eF93ZF90aW1lcl9zeXNjLAorCS5wcmVfc2h1dGRvd24JPSAmb21hcDJfd2RfdGltZXJfZGlzYWJsZSwKK307CisKKy8qIHdkX3RpbWVyMiAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXA0NHh4X3dkX3RpbWVyMl9od21vZDsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9pcnFfaW5mbyBvbWFwNDR4eF93ZF90aW1lcjJfaXJxc1tdID0geworCXsgLmlycSA9IDgwICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDQ0eHhfd2RfdGltZXIyX2FkZHJzW10gPSB7CisJeworCQkucGFfc3RhcnQJPSAweDRhMzE0MDAwLAorCQkucGFfZW5kCQk9IDB4NGEzMTQwN2YsCisJCS5mbGFncwkJPSBBRERSX1RZUEVfUlQKKwl9LAorfTsKKworLyogbDRfd2t1cCAtPiB3ZF90aW1lcjIgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDQ0eHhfbDRfd2t1cF9fd2RfdGltZXIyID0geworCS5tYXN0ZXIJCT0gJm9tYXA0NHh4X2w0X3drdXBfaHdtb2QsCisJLnNsYXZlCQk9ICZvbWFwNDR4eF93ZF90aW1lcjJfaHdtb2QsCisJLmNsawkJPSAibDRfd2t1cF9jbGtfbXV4X2NrIiwKKwkuYWRkcgkJPSBvbWFwNDR4eF93ZF90aW1lcjJfYWRkcnMsCisJLmFkZHJfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF93ZF90aW1lcjJfYWRkcnMpLAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCit9OworCisvKiB3ZF90aW1lcjIgc2xhdmUgcG9ydHMgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXA0NHh4X3dkX3RpbWVyMl9zbGF2ZXNbXSA9IHsKKwkmb21hcDQ0eHhfbDRfd2t1cF9fd2RfdGltZXIyLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXA0NHh4X3dkX3RpbWVyMl9od21vZCA9IHsKKwkubmFtZQkJPSAid2RfdGltZXIyIiwKKwkuY2xhc3MJCT0gJm9tYXA0NHh4X3dkX3RpbWVyX2h3bW9kX2NsYXNzLAorCS5tcHVfaXJxcwk9IG9tYXA0NHh4X3dkX3RpbWVyMl9pcnFzLAorCS5tcHVfaXJxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXA0NHh4X3dkX3RpbWVyMl9pcnFzKSwKKwkubWFpbl9jbGsJPSAid2RfdGltZXIyX2ZjayIsCisJLnByY20gPSB7CisJCS5vbWFwNCA9IHsKKwkJCS5jbGtjdHJsX3JlZyA9IE9NQVA0NDMwX0NNX1dLVVBfV0RUMl9DTEtDVFJMLAorCQl9LAorCX0sCisJLnNsYXZlcwkJPSBvbWFwNDR4eF93ZF90aW1lcjJfc2xhdmVzLAorCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF93ZF90aW1lcjJfc2xhdmVzKSwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCit9OworCisvKiB3ZF90aW1lcjMgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwNDR4eF93ZF90aW1lcjNfaHdtb2Q7CitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfaXJxX2luZm8gb21hcDQ0eHhfd2RfdGltZXIzX2lycXNbXSA9IHsKKwl7IC5pcnEgPSAzNiArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9hZGRyX3NwYWNlIG9tYXA0NHh4X3dkX3RpbWVyM19hZGRyc1tdID0geworCXsKKwkJLnBhX3N0YXJ0CT0gMHg0MDEzMDAwMCwKKwkJLnBhX2VuZAkJPSAweDQwMTMwMDdmLAorCQkuZmxhZ3MJCT0gQUREUl9UWVBFX1JUCisJfSwKK307CisKKy8qIGw0X2FiZSAtPiB3ZF90aW1lcjMgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDQ0eHhfbDRfYWJlX193ZF90aW1lcjMgPSB7CisJLm1hc3RlcgkJPSAmb21hcDQ0eHhfbDRfYWJlX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDQ0eHhfd2RfdGltZXIzX2h3bW9kLAorCS5jbGsJCT0gIm9jcF9hYmVfaWNsayIsCisJLmFkZHIJCT0gb21hcDQ0eHhfd2RfdGltZXIzX2FkZHJzLAorCS5hZGRyX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfd2RfdGltZXIzX2FkZHJzKSwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwNDR4eF93ZF90aW1lcjNfZG1hX2FkZHJzW10gPSB7CisJeworCQkucGFfc3RhcnQJPSAweDQ5MDMwMDAwLAorCQkucGFfZW5kCQk9IDB4NDkwMzAwN2YsCisJCS5mbGFncwkJPSBBRERSX1RZUEVfUlQKKwl9LAorfTsKKworLyogbDRfYWJlIC0+IHdkX3RpbWVyMyAoZG1hKSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwNDR4eF9sNF9hYmVfX3dkX3RpbWVyM19kbWEgPSB7CisJLm1hc3RlcgkJPSAmb21hcDQ0eHhfbDRfYWJlX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDQ0eHhfd2RfdGltZXIzX2h3bW9kLAorCS5jbGsJCT0gIm9jcF9hYmVfaWNsayIsCisJLmFkZHIJCT0gb21hcDQ0eHhfd2RfdGltZXIzX2RtYV9hZGRycywKKwkuYWRkcl9jbnQJPSBBUlJBWV9TSVpFKG9tYXA0NHh4X3dkX3RpbWVyM19kbWFfYWRkcnMpLAorCS51c2VyCQk9IE9DUF9VU0VSX1NETUEsCit9OworCisvKiB3ZF90aW1lcjMgc2xhdmUgcG9ydHMgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXA0NHh4X3dkX3RpbWVyM19zbGF2ZXNbXSA9IHsKKwkmb21hcDQ0eHhfbDRfYWJlX193ZF90aW1lcjMsCisJJm9tYXA0NHh4X2w0X2FiZV9fd2RfdGltZXIzX2RtYSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwNDR4eF93ZF90aW1lcjNfaHdtb2QgPSB7CisJLm5hbWUJCT0gIndkX3RpbWVyMyIsCisJLmNsYXNzCQk9ICZvbWFwNDR4eF93ZF90aW1lcl9od21vZF9jbGFzcywKKwkubXB1X2lycXMJPSBvbWFwNDR4eF93ZF90aW1lcjNfaXJxcywKKwkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwNDR4eF93ZF90aW1lcjNfaXJxcyksCisJLm1haW5fY2xrCT0gIndkX3RpbWVyM19mY2siLAorCS5wcmNtID0geworCQkub21hcDQgPSB7CisJCQkuY2xrY3RybF9yZWcgPSBPTUFQNDQzMF9DTTFfQUJFX1dEVDNfQ0xLQ1RSTCwKKwkJfSwKKwl9LAorCS5zbGF2ZXMJCT0gb21hcDQ0eHhfd2RfdGltZXIzX3NsYXZlcywKKwkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDQ0eHhfd2RfdGltZXIzX3NsYXZlcyksCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAorfTsKKwogc3RhdGljIF9faW5pdGRhdGEgc3RydWN0IG9tYXBfaHdtb2QgKm9tYXA0NHh4X2h3bW9kc1tdID0geworCiAJLyogZG1tIGNsYXNzICovCiAJJm9tYXA0NHh4X2RtbV9od21vZCwKKwogCS8qIGVtaWZfZncgY2xhc3MgKi8KIAkmb21hcDQ0eHhfZW1pZl9md19od21vZCwKKwogCS8qIGwzIGNsYXNzICovCiAJJm9tYXA0NHh4X2wzX2luc3RyX2h3bW9kLAogCSZvbWFwNDR4eF9sM19tYWluXzFfaHdtb2QsCiAJJm9tYXA0NHh4X2wzX21haW5fMl9od21vZCwKIAkmb21hcDQ0eHhfbDNfbWFpbl8zX2h3bW9kLAorCiAJLyogbDQgY2xhc3MgKi8KIAkmb21hcDQ0eHhfbDRfYWJlX2h3bW9kLAogCSZvbWFwNDR4eF9sNF9jZmdfaHdtb2QsCiAJJm9tYXA0NHh4X2w0X3Blcl9od21vZCwKIAkmb21hcDQ0eHhfbDRfd2t1cF9od21vZCwKKwogCS8qIG1wdV9idXMgY2xhc3MgKi8KIAkmb21hcDQ0eHhfbXB1X3ByaXZhdGVfaHdtb2QsCiAKKwkvKiBkbWEgY2xhc3MgKi8KKwkmb21hcDQ0eHhfZG1hX3N5c3RlbV9od21vZCwKKworCS8qIGRzcCBjbGFzcyAqLworCSZvbWFwNDR4eF9kc3BfaHdtb2QsCisJJm9tYXA0NHh4X2RzcF9jMF9od21vZCwKKworCS8qIGdwaW8gY2xhc3MgKi8KKwkmb21hcDQ0eHhfZ3BpbzFfaHdtb2QsCisJJm9tYXA0NHh4X2dwaW8yX2h3bW9kLAorCSZvbWFwNDR4eF9ncGlvM19od21vZCwKKwkmb21hcDQ0eHhfZ3BpbzRfaHdtb2QsCisJJm9tYXA0NHh4X2dwaW81X2h3bW9kLAorCSZvbWFwNDR4eF9ncGlvNl9od21vZCwKKworCS8qIGkyYyBjbGFzcyAqLworCSZvbWFwNDR4eF9pMmMxX2h3bW9kLAorCSZvbWFwNDR4eF9pMmMyX2h3bW9kLAorCSZvbWFwNDR4eF9pMmMzX2h3bW9kLAorCSZvbWFwNDR4eF9pMmM0X2h3bW9kLAorCisJLyogaXZhIGNsYXNzICovCisJJm9tYXA0NHh4X2l2YV9od21vZCwKKwkmb21hcDQ0eHhfaXZhX3NlcTBfaHdtb2QsCisJJm9tYXA0NHh4X2l2YV9zZXExX2h3bW9kLAorCiAJLyogbXB1IGNsYXNzICovCiAJJm9tYXA0NHh4X21wdV9od21vZCwKLQkvKiB3ZF90aW1lciBjbGFzcyAqLwotCSZvbWFwNDR4eF93ZF90aW1lcjJfaHdtb2QsCi0JJm9tYXA0NHh4X3dkX3RpbWVyM19od21vZCwKKworCS8qIHNtYXJ0cmVmbGV4IGNsYXNzICovCisJJm9tYXA0NHh4X3NtYXJ0cmVmbGV4X2NvcmVfaHdtb2QsCisJJm9tYXA0NHh4X3NtYXJ0cmVmbGV4X2l2YV9od21vZCwKKwkmb21hcDQ0eHhfc21hcnRyZWZsZXhfbXB1X2h3bW9kLAogCiAJLyogdWFydCBjbGFzcyAqLwogCSZvbWFwNDR4eF91YXJ0MV9od21vZCwKIAkmb21hcDQ0eHhfdWFydDJfaHdtb2QsCiAJJm9tYXA0NHh4X3VhcnQzX2h3bW9kLAogCSZvbWFwNDR4eF91YXJ0NF9od21vZCwKKworCS8qIHdkX3RpbWVyIGNsYXNzICovCisJJm9tYXA0NHh4X3dkX3RpbWVyMl9od21vZCwKKwkmb21hcDQ0eHhfd2RfdGltZXIzX2h3bW9kLAorCiAJTlVMTCwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9vcHBfZGF0YS5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX29wcF9kYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZhYzI3ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9vcHBfZGF0YS5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBPTUFQIFNvQyBzcGVjaWZpYyBPUFAgRGF0YSBoZWxwZXJzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkIC0gaHR0cDovL3d3dy50aS5jb20vCisgKglOaXNoYW50aCBNZW5vbgorICoJS2V2aW4gSGlsbWFuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24uCisgKiAgICAgIEVkdWFyZG8gVmFsZW50aW4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCAiYXMgaXMiIFdJVEhPVVQgQU5ZIFdBUlJBTlRZIG9mIGFueQorICoga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQ7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eQorICogb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfT01BUF9PUFBfREFUQV9ICisjZGVmaW5lIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9PTUFQX09QUF9EQVRBX0gKKworI2luY2x1ZGUgPHBsYXQvb21hcF9od21vZC5oPgorCisvKgorICogKkJJRyBGQVQgV0FSTklORyo6CisgKiBVU0UgdGhlIGZvbGxvd2luZyBPTkxZIGluIG9wcCBkYXRhIGluaXRpYWxpemF0aW9uIGNvbW1vbiB0byBhbiBTb0MuCisgKiBETyBOT1QgVVNFIHRoZXNlIGluIGJvYXJkIGZpbGVzL3BtIGNvcmUgZXRjLgorICovCisKKy8qKgorICogc3RydWN0IG9tYXBfb3BwX2RlZiAtIE9NQVAgT1BQIERlZmluaXRpb24KKyAqIEBod21vZF9uYW1lOglOYW1lIG9mIHRoZSBod21vZCBmb3IgdGhpcyBkb21haW4KKyAqIEBmcmVxOglGcmVxdWVuY3kgaW4gaGVydHogY29ycmVzcG9uZGluZyB0byB0aGlzIE9QUAorICogQHVfdm9sdDoJTm9taW5hbCB2b2x0YWdlIGluIG1pY3Jvdm9sdHMgY29ycmVzcG9uZGluZyB0byB0aGlzIE9QUAorICogQGRlZmF1bHRfYXZhaWxhYmxlOglUcnVlL2ZhbHNlIC0gaXMgdGhpcyBPUFAgYXZhaWxhYmxlIGJ5IGRlZmF1bHQKKyAqCisgKiBPTUFQIFNPQ3MgaGF2ZSBhIHN0YW5kYXJkIHNldCBvZiB0dXBsZXMgY29uc2lzdGluZyBvZiBmcmVxdWVuY3kgYW5kIHZvbHRhZ2UKKyAqIHBhaXJzIHRoYXQgdGhlIGRldmljZSB3aWxsIHN1cHBvcnQgcGVyIHZvbHRhZ2UgZG9tYWluLiBUaGlzIGlzIGNhbGxlZAorICogT3BlcmF0aW5nIFBvaW50cyBvciBPUFAuIFRoZSBhY3R1YWwgZGVmaW5pdGlvbnMgb2YgT01BUCBPcGVyYXRpbmcgUG9pbnRzCisgKiB2YXJpZXMgb3ZlciBzaWxpY29uIHdpdGhpbiB0aGUgc2FtZSBmYW1pbHkgb2YgZGV2aWNlcy4gRm9yIGEgc3BlY2lmaWMKKyAqIGRvbWFpbiwgeW91IGNhbiBoYXZlIGEgc2V0IG9mIHtmcmVxdWVuY3ksIHZvbHRhZ2V9IHBhaXJzIGFuZCB0aGlzIGlzIGRlbm90ZWQKKyAqIGJ5IGFuIGFycmF5IG9mIG9tYXBfb3BwX2RlZi4gQXMgdGhlIGtlcm5lbCBib290cyBhbmQgbW9yZSBpbmZvcm1hdGlvbiBpcworICogYXZhaWxhYmxlLCBhIHNldCBvZiB0aGVzZSBhcmUgYWN0aXZhdGVkIGJhc2VkIG9uIHRoZSBwcmVjaXNlIG5hdHVyZSBvZgorICogZGV2aWNlIHRoZSBrZXJuZWwgYm9vdHMgdXAgb24uIEl0IGlzIGludGVyZXN0aW5nIHRvIHJlbWVtYmVyIHRoYXQgZWFjaCBJUAorICogd2hpY2ggYmVsb25ncyB0byBhIHZvbHRhZ2UgZG9tYWluIG1heSBkZWZpbmUgdGhlaXIgb3duIHNldCBvZiBPUFBzIG9uIHRvcAorICogb2YgdGhpcyAtIGJ1dCB0aGlzIGlzIGhhbmRsZWQgYnkgdGhlIGFwcHJvcHJpYXRlIGRyaXZlci4KKyAqLworc3RydWN0IG9tYXBfb3BwX2RlZiB7CisJY2hhciAqaHdtb2RfbmFtZTsKKworCXVuc2lnbmVkIGxvbmcgZnJlcTsKKwl1bnNpZ25lZCBsb25nIHVfdm9sdDsKKworCWJvb2wgZGVmYXVsdF9hdmFpbGFibGU7Cit9OworCisvKgorICogSW5pdGlhbGl6YXRpb24gd3JhcHBlciB1c2VkIHRvIGRlZmluZSBhbiBPUFAgZm9yIE9NQVAgdmFyaWFudHMuCisgKi8KKyNkZWZpbmUgT1BQX0lOSVRJQUxJWkVSKF9od21vZF9uYW1lLCBfZW5hYmxlZCwgX2ZyZXEsIF91dikJXAorewkJCQkJCQkJXAorCS5od21vZF9uYW1lCT0gX2h3bW9kX25hbWUsCQkJCVwKKwkuZGVmYXVsdF9hdmFpbGFibGUJPSBfZW5hYmxlZCwJCQlcCisJLmZyZXEJCT0gX2ZyZXEsCQkJCVwKKwkudV92b2x0CQk9IF91diwJCQkJCVwKK30KKworLyogVXNlIHRoaXMgdG8gaW5pdGlhbGl6ZSB0aGUgZGVmYXVsdCB0YWJsZSAqLworZXh0ZXJuIGludCBfX2luaXQgb21hcF9pbml0X29wcF90YWJsZShzdHJ1Y3Qgb21hcF9vcHBfZGVmICpvcHBfZGVmLAorCQl1MzIgb3BwX2RlZl9zaXplKTsKKworI2VuZGlmCQkvKiBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfT01BUF9PUFBfREFUQV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfcGh5X2ludGVybmFsLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfcGh5X2ludGVybmFsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ1MjUyYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9waHlfaW50ZXJuYWwuYwpAQCAtMCwwICsxLDE0OSBAQAorLyoKKyAgKiBUaGlzIGZpbGUgY29uZmlndXJlcyB0aGUgaW50ZXJuYWwgVVNCIFBIWSBpbiBPTUFQNDQzMC4gVXNlZAorICAqIHdpdGggVFdMNjAzMCB0cmFuc2NlaXZlciBhbmQgTVVTQiBvbiBPTUFQNDQzMC4KKyAgKgorICAqIENvcHlyaWdodCAoQykgMjAxMCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQgLSBodHRwOi8vd3d3LnRpLmNvbQorICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgICoKKyAgKiBBdXRob3I6IEhlbWEgSEsgPGhlbWFoa0B0aS5jb20+CisgICoKKyAgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAqCisgICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICAqCisgICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKworI2luY2x1ZGUgPHBsYXQvdXNiLmg+CisKKy8qIE9NQVAgY29udHJvbCBtb2R1bGUgcmVnaXN0ZXIgZm9yIFVUTUkgUEhZICovCisjZGVmaW5lIENPTlRST0xfREVWX0NPTkYJCTB4MzAwCisjZGVmaW5lIFBIWV9QRAkJCQkweDEKKworI2RlZmluZSBVU0JPVEdIU19DT05UUk9MCQkweDMzYworI2RlZmluZQlBVkFMSUQJCQkJQklUKDApCisjZGVmaW5lCUJWQUxJRAkJCQlCSVQoMSkKKyNkZWZpbmUJVkJVU1ZBTElECQkJQklUKDIpCisjZGVmaW5lCVNFU1NFTkQJCQkJQklUKDMpCisjZGVmaW5lCUlERElHCQkJCUJJVCg0KQorCitzdGF0aWMgc3RydWN0IGNsayAqcGh5Y2xrLCAqY2xrNDhtLCAqY2xrMzJrOworc3RhdGljIHZvaWQgX19pb21lbSAqY3RybF9iYXNlOworCitpbnQgb21hcDQ0MzBfcGh5X2luaXQoc3RydWN0IGRldmljZSAqZGV2KQoreworCWN0cmxfYmFzZSA9IGlvcmVtYXAoT01BUDQ0M1hfU0NNX0JBU0UsIFNaXzFLKTsKKwlpZiAoIWN0cmxfYmFzZSkgeworCQlkZXZfZXJyKGRldiwgImNvbnRyb2wgbW9kdWxlIGlvcmVtYXAgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCS8qIFBvd2VyIGRvd24gdGhlIHBoeSAqLworCV9fcmF3X3dyaXRlbChQSFlfUEQsIGN0cmxfYmFzZSArIENPTlRST0xfREVWX0NPTkYpOworCXBoeWNsayA9IGNsa19nZXQoZGV2LCAib2NwMnNjcF91c2JfcGh5X2ljayIpOworCisJaWYgKElTX0VSUihwaHljbGspKSB7CisJCWRldl9lcnIoZGV2LCAiY2Fubm90IGNsa19nZXQgb2NwMnNjcF91c2JfcGh5X2lja1xuIik7CisJCWlvdW5tYXAoY3RybF9iYXNlKTsKKwkJcmV0dXJuIFBUUl9FUlIocGh5Y2xrKTsKKwl9CisKKwljbGs0OG0gPSBjbGtfZ2V0KGRldiwgIm9jcDJzY3BfdXNiX3BoeV9waHlfNDhtIik7CisJaWYgKElTX0VSUihjbGs0OG0pKSB7CisJCWRldl9lcnIoZGV2LCAiY2Fubm90IGNsa19nZXQgb2NwMnNjcF91c2JfcGh5X3BoeV80OG1cbiIpOworCQljbGtfcHV0KHBoeWNsayk7CisJCWlvdW5tYXAoY3RybF9iYXNlKTsKKwkJcmV0dXJuIFBUUl9FUlIoY2xrNDhtKTsKKwl9CisKKwljbGszMmsgPSBjbGtfZ2V0KGRldiwgInVzYl9waHlfY21fY2xrMzJrIik7CisJaWYgKElTX0VSUihjbGszMmspKSB7CisJCWRldl9lcnIoZGV2LCAiY2Fubm90IGNsa19nZXQgdXNiX3BoeV9jbV9jbGszMmtcbiIpOworCQljbGtfcHV0KHBoeWNsayk7CisJCWNsa19wdXQoY2xrNDhtKTsKKwkJaW91bm1hcChjdHJsX2Jhc2UpOworCQlyZXR1cm4gUFRSX0VSUihjbGszMmspOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IG9tYXA0NDMwX3BoeV9zZXRfY2xrKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IG9uKQoreworCXN0YXRpYyBpbnQgc3RhdGU7CisKKwlpZiAob24gJiYgIXN0YXRlKSB7CisJCS8qIEVuYWJsZSB0aGUgcGh5IGNsb2NrcyAqLworCQljbGtfZW5hYmxlKHBoeWNsayk7CisJCWNsa19lbmFibGUoY2xrNDhtKTsKKwkJY2xrX2VuYWJsZShjbGszMmspOworCQlzdGF0ZSA9IDE7CisJfSBlbHNlIGlmIChzdGF0ZSkgeworCQkvKiBEaXNhYmxlIHRoZSBwaHkgY2xvY2tzICovCisJCWNsa19kaXNhYmxlKHBoeWNsayk7CisJCWNsa19kaXNhYmxlKGNsazQ4bSk7CisJCWNsa19kaXNhYmxlKGNsazMyayk7CisJCXN0YXRlID0gMDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCBvbWFwNDQzMF9waHlfcG93ZXIoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgSUQsIGludCBvbikKK3sKKwlpZiAob24pIHsKKwkJLyogZW5hYmxlZCB0aGUgY2xvY2tzICovCisJCW9tYXA0NDMwX3BoeV9zZXRfY2xrKGRldiwgMSk7CisJCS8qIHBvd2VyIG9uIHRoZSBwaHkgKi8KKwkJaWYgKF9fcmF3X3JlYWRsKGN0cmxfYmFzZSArIENPTlRST0xfREVWX0NPTkYpICYgUEhZX1BEKSB7CisJCQlfX3Jhd193cml0ZWwoflBIWV9QRCwgY3RybF9iYXNlICsgQ09OVFJPTF9ERVZfQ09ORik7CisJCQltZGVsYXkoMjAwKTsKKwkJfQorCQlpZiAoSUQpCisJCQkvKiBlbmFibGUgVkJVUyB2YWxpZCwgSURESUcgZ3JvdW5nICovCisJCQlfX3Jhd193cml0ZWwoQVZBTElEIHwgVkJVU1ZBTElELCBjdHJsX2Jhc2UgKworCQkJCQkJCVVTQk9UR0hTX0NPTlRST0wpOworCQllbHNlCisJCQkvKgorCQkJICogRW5hYmxlIFZCVVMgVmFsaWQsIEFWYWxpZCBhbmQgSURESUcKKwkJCSAqIGhpZ2ggaW1wZWRlbmNlCisJCQkgKi8KKwkJCV9fcmF3X3dyaXRlbChJRERJRyB8IEFWQUxJRCB8IFZCVVNWQUxJRCwKKwkJCQkJCWN0cmxfYmFzZSArIFVTQk9UR0hTX0NPTlRST0wpOworCX0gZWxzZSB7CisJCS8qIEVuYWJsZSBzZXNzaW9uIEVORCBhbmQgSURJRyB0byBoaWdoIGltcGVkZW5jZS4gKi8KKwkJX19yYXdfd3JpdGVsKFNFU1NFTkQgfCBJRERJRywgY3RybF9iYXNlICsKKwkJCQkJVVNCT1RHSFNfQ09OVFJPTCk7CisJCS8qIERpc2FibGUgdGhlIGNsb2NrcyAqLworCQlvbWFwNDQzMF9waHlfc2V0X2NsayhkZXYsIDApOworCQkvKiBQb3dlciBkb3duIHRoZSBwaHkgKi8KKwkJX19yYXdfd3JpdGVsKFBIWV9QRCwgY3RybF9iYXNlICsgQ09OVFJPTF9ERVZfQ09ORik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCBvbWFwNDQzMF9waHlfZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaWYgKGN0cmxfYmFzZSkKKwkJaW91bm1hcChjdHJsX2Jhc2UpOworCWlmIChwaHljbGspCisJCWNsa19wdXQocGh5Y2xrKTsKKwlpZiAoY2xrNDhtKQorCQljbGtfcHV0KGNsazQ4bSk7CisJaWYgKGNsazMyaykKKwkJY2xrX3B1dChjbGszMmspOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfdHdsLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfdHdsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTVmOGM2YwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF90d2wuYwpAQCAtMCwwICsxLDI3NyBAQAorLyoqCisgKiBPTUFQIGFuZCBUV0wgUE1JQyBzcGVjaWZpYyBpbnRpYWxpemF0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkLgorICogVGhhcmEgR29waW5hdGgKKyAqIENvcHlyaWdodCAoQykgMjAwOSBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQuCisgKiBOaXNoYW50aCBNZW5vbgorICogQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uCisgKiBQYXVsIFdhbG1zbGV5CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMvdHdsLmg+CisKKyNpbmNsdWRlIDxwbGF0L3ZvbHRhZ2UuaD4KKworI2RlZmluZSBPTUFQM19TUkkyQ19TTEFWRV9BRERSCQkweDEyCisjZGVmaW5lIE9NQVAzX1ZERF9NUFVfU1JfQ09OVFJPTF9SRUcJMHgwMAorI2RlZmluZSBPTUFQM19WRERfQ09SRV9TUl9DT05UUk9MX1JFRwkweDAxCisjZGVmaW5lIE9NQVAzX1ZQX0NPTkZJR19FUlJPUk9GRlNFVAkweDAwCisjZGVmaW5lIE9NQVAzX1ZQX1ZTVEVQTUlOX1ZTVEVQTUlOCTB4MQorI2RlZmluZSBPTUFQM19WUF9WU1RFUE1BWF9WU1RFUE1BWAkweDA0CisjZGVmaW5lIE9NQVAzX1ZQX1ZMSU1JVFRPX1RJTUVPVVRfVVMJMjAwCisKKyNkZWZpbmUgT01BUDM0MzBfVlAxX1ZMSU1JVFRPX1ZERE1JTgkweDE0CisjZGVmaW5lIE9NQVAzNDMwX1ZQMV9WTElNSVRUT19WRERNQVgJMHg0MgorI2RlZmluZSBPTUFQMzQzMF9WUDJfVkxJTUlUVE9fVkRETUlOCTB4MTgKKyNkZWZpbmUgT01BUDM0MzBfVlAyX1ZMSU1JVFRPX1ZERE1BWAkweDJjCisKKyNkZWZpbmUgT01BUDM2MzBfVlAxX1ZMSU1JVFRPX1ZERE1JTgkweDE4CisjZGVmaW5lIE9NQVAzNjMwX1ZQMV9WTElNSVRUT19WRERNQVgJMHgzYworI2RlZmluZSBPTUFQMzYzMF9WUDJfVkxJTUlUVE9fVkRETUlOCTB4MTgKKyNkZWZpbmUgT01BUDM2MzBfVlAyX1ZMSU1JVFRPX1ZERE1BWAkweDMwCisKKyNkZWZpbmUgT01BUDRfU1JJMkNfU0xBVkVfQUREUgkJMHgxMgorI2RlZmluZSBPTUFQNF9WRERfTVBVX1NSX1ZPTFRfUkVHCTB4NTUKKyNkZWZpbmUgT01BUDRfVkREX0lWQV9TUl9WT0xUX1JFRwkweDVCCisjZGVmaW5lIE9NQVA0X1ZERF9DT1JFX1NSX1ZPTFRfUkVHCTB4NjEKKworI2RlZmluZSBPTUFQNF9WUF9DT05GSUdfRVJST1JPRkZTRVQJMHgwMAorI2RlZmluZSBPTUFQNF9WUF9WU1RFUE1JTl9WU1RFUE1JTgkweDAxCisjZGVmaW5lIE9NQVA0X1ZQX1ZTVEVQTUFYX1ZTVEVQTUFYCTB4MDQKKyNkZWZpbmUgT01BUDRfVlBfVkxJTUlUVE9fVElNRU9VVF9VUwkyMDAKKworI2RlZmluZSBPTUFQNF9WUF9NUFVfVkxJTUlUVE9fVkRETUlOCTB4QQorI2RlZmluZSBPTUFQNF9WUF9NUFVfVkxJTUlUVE9fVkRETUFYCTB4MzkKKyNkZWZpbmUgT01BUDRfVlBfSVZBX1ZMSU1JVFRPX1ZERE1JTgkweEEKKyNkZWZpbmUgT01BUDRfVlBfSVZBX1ZMSU1JVFRPX1ZERE1BWAkweDJECisjZGVmaW5lIE9NQVA0X1ZQX0NPUkVfVkxJTUlUVE9fVkRETUlOCTB4QQorI2RlZmluZSBPTUFQNF9WUF9DT1JFX1ZMSU1JVFRPX1ZERE1BWAkweDI4CisKK3N0YXRpYyBib29sIGlzX29mZnNldF92YWxpZDsKK3N0YXRpYyB1OCBzbXBzX29mZnNldDsKKworI2RlZmluZSBSRUdfU01QU19PRkZTRVQgICAgICAgICAweEUwCisKK3Vuc2lnbmVkIGxvbmcgdHdsNDAzMF92c2VsX3RvX3V2KGNvbnN0IHU4IHZzZWwpCit7CisJcmV0dXJuICgoKHZzZWwgKiAxMjUpICsgNjAwMCkpICogMTAwOworfQorCit1OCB0d2w0MDMwX3V2X3RvX3ZzZWwodW5zaWduZWQgbG9uZyB1dikKK3sKKwlyZXR1cm4gRElWX1JPVU5EX1VQKHV2IC0gNjAwMDAwLCAxMjUwMCk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgdHdsNjAzMF92c2VsX3RvX3V2KGNvbnN0IHU4IHZzZWwpCit7CisJLyoKKwkgKiBJbiBUV0w2MDMwIGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgU01QU19PRkZTRVQKKwkgKiBlZnVzZSByZWdpc3RlciB0aGUgdm9sdGFnZSByYW5nZSBzdXBwb3J0ZWQgaW4KKwkgKiBzdGFuZGFyZCBtb2RlIGNhbiBiZSBlaXRoZXIgYmV0d2VlbiAwLjZWIC0gMS4zViBvcgorCSAqIDAuN1YgLSAxLjRWLiBJbiBUV0w2MDMwIEVTMS4wIFNNUFNfT0ZGU0VUIGVmdXNlCisJICogaXMgcHJvZ3JhbW1lZCB0byBhbGwgMCdzIHdoZXJlIGFzIHN0YXJ0aW5nIGZyb20KKwkgKiBUV0w2MDMwIEVTMS4xIHRoZSBlZnVzZSBpcyBwcm9ncmFtbWVkIHRvIDEKKwkgKi8KKwlpZiAoIWlzX29mZnNldF92YWxpZCkgeworCQl0d2xfaTJjX3JlYWRfdTgoVFdMNjAzMF9NT0RVTEVfSUQwLCAmc21wc19vZmZzZXQsCisJCQkJUkVHX1NNUFNfT0ZGU0VUKTsKKwkJaXNfb2Zmc2V0X3ZhbGlkID0gdHJ1ZTsKKwl9CisKKwkvKgorCSAqIFRoZXJlIGlzIG5vIHNwZWNpZmljIGZvcm11bGEgZm9yIHZvbHRhZ2UgdG8gdnNlbAorCSAqIGNvbnZlcnNpb24gYWJvdmUgMS4zVi4gVGhlcmUgYXJlIHNwZWNpYWwgaGFyZGNvZGVkCisJICogdmFsdWVzIGZvciB2b2x0YWdlcyBhYm92ZSAxLjNWLiBDdXJyZW50bHkgd2UgYXJlCisJICogaGFyZGNvZGluZyBvbmx5IGZvciAxLjM1IFYgd2hpY2ggaXMgdXNlZCBmb3IgMUdIIE9QUCBmb3IKKwkgKiBPTUFQNDQzMC4KKwkgKi8KKwlpZiAodnNlbCA9PSAweDNBKQorCQlyZXR1cm4gMTM1MDAwMDsKKworCWlmIChzbXBzX29mZnNldCAmIDB4OCkKKwkJcmV0dXJuICgoKCh2c2VsIC0gMSkgKiAxMjUpICsgNzAwMCkpICogMTAwOworCWVsc2UKKwkJcmV0dXJuICgoKCh2c2VsIC0gMSkgKiAxMjUpICsgNjAwMCkpICogMTAwOworfQorCit1OCB0d2w2MDMwX3V2X3RvX3ZzZWwodW5zaWduZWQgbG9uZyB1dikKK3sKKwkvKgorCSAqIEluIFRXTDYwMzAgZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZiBTTVBTX09GRlNFVAorCSAqIGVmdXNlIHJlZ2lzdGVyIHRoZSB2b2x0YWdlIHJhbmdlIHN1cHBvcnRlZCBpbgorCSAqIHN0YW5kYXJkIG1vZGUgY2FuIGJlIGVpdGhlciBiZXR3ZWVuIDAuNlYgLSAxLjNWIG9yCisJICogMC43ViAtIDEuNFYuIEluIFRXTDYwMzAgRVMxLjAgU01QU19PRkZTRVQgZWZ1c2UKKwkgKiBpcyBwcm9ncmFtbWVkIHRvIGFsbCAwJ3Mgd2hlcmUgYXMgc3RhcnRpbmcgZnJvbQorCSAqIFRXTDYwMzAgRVMxLjEgdGhlIGVmdXNlIGlzIHByb2dyYW1tZWQgdG8gMQorCSAqLworCWlmICghaXNfb2Zmc2V0X3ZhbGlkKSB7CisJCXR3bF9pMmNfcmVhZF91OChUV0w2MDMwX01PRFVMRV9JRDAsICZzbXBzX29mZnNldCwKKwkJCQlSRUdfU01QU19PRkZTRVQpOworCQlpc19vZmZzZXRfdmFsaWQgPSB0cnVlOworCX0KKworCS8qCisJICogVGhlcmUgaXMgbm8gc3BlY2lmaWMgZm9ybXVsYSBmb3Igdm9sdGFnZSB0byB2c2VsCisJICogY29udmVyc2lvbiBhYm92ZSAxLjNWLiBUaGVyZSBhcmUgc3BlY2lhbCBoYXJkY29kZWQKKwkgKiB2YWx1ZXMgZm9yIHZvbHRhZ2VzIGFib3ZlIDEuM1YuIEN1cnJlbnRseSB3ZSBhcmUKKwkgKiBoYXJkY29kaW5nIG9ubHkgZm9yIDEuMzUgViB3aGljaCBpcyB1c2VkIGZvciAxR0ggT1BQIGZvcgorCSAqIE9NQVA0NDMwLgorCSAqLworCWlmICh1diA9PSAxMzUwMDAwKQorCQlyZXR1cm4gMHgzQTsKKworCWlmIChzbXBzX29mZnNldCAmIDB4OCkKKwkJcmV0dXJuIERJVl9ST1VORF9VUCh1diAtIDcwMDAwMCwgMTI1MDApICsgMTsKKwllbHNlCisJCXJldHVybiBESVZfUk9VTkRfVVAodXYgLSA2MDAwMDAsIDEyNTAwKSArIDE7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF92b2x0X3BtaWNfaW5mbyBvbWFwM19tcHVfdm9sdF9pbmZvID0geworCS5zbGV3X3JhdGUJCT0gNDAwMCwKKwkuc3RlcF9zaXplCQk9IDEyNTAwLAorCS5vbl92b2x0CQk9IDEyMDAwMDAsCisJLm9ubHBfdm9sdAkJPSAxMDAwMDAwLAorCS5yZXRfdm9sdAkJPSA5NzUwMDAsCisJLm9mZl92b2x0CQk9IDYwMDAwMCwKKwkudm9sdF9zZXR1cF90aW1lCT0gMHhmZmYsCisJLnZwX2Vycm9yb2Zmc2V0CQk9IE9NQVAzX1ZQX0NPTkZJR19FUlJPUk9GRlNFVCwKKwkudnBfdnN0ZXBtaW4JCT0gT01BUDNfVlBfVlNURVBNSU5fVlNURVBNSU4sCisJLnZwX3ZzdGVwbWF4CQk9IE9NQVAzX1ZQX1ZTVEVQTUFYX1ZTVEVQTUFYLAorCS52cF92ZGRtaW4JCT0gT01BUDM0MzBfVlAxX1ZMSU1JVFRPX1ZERE1JTiwKKwkudnBfdmRkbWF4CQk9IE9NQVAzNDMwX1ZQMV9WTElNSVRUT19WRERNQVgsCisJLnZwX3RpbWVvdXRfdXMJCT0gT01BUDNfVlBfVkxJTUlUVE9fVElNRU9VVF9VUywKKwkuaTJjX3NsYXZlX2FkZHIJCT0gT01BUDNfU1JJMkNfU0xBVkVfQUREUiwKKwkucG1pY19yZWcJCT0gT01BUDNfVkREX01QVV9TUl9DT05UUk9MX1JFRywKKwkudnNlbF90b191dgkJPSB0d2w0MDMwX3ZzZWxfdG9fdXYsCisJLnV2X3RvX3ZzZWwJCT0gdHdsNDAzMF91dl90b192c2VsLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX3ZvbHRfcG1pY19pbmZvIG9tYXAzX2NvcmVfdm9sdF9pbmZvID0geworCS5zbGV3X3JhdGUJCT0gNDAwMCwKKwkuc3RlcF9zaXplCQk9IDEyNTAwLAorCS5vbl92b2x0ICAgICAgICAgICAgICAgID0gMTIwMDAwMCwKKwkub25scF92b2x0ICAgICAgICAgICAgICA9IDEwMDAwMDAsCisJLnJldF92b2x0ICAgICAgICAgICAgICAgPSA5NzUwMDAsCisJLm9mZl92b2x0ICAgICAgICAgICAgICAgPSA2MDAwMDAsCisJLnZvbHRfc2V0dXBfdGltZSAgICAgICAgPSAweGZmZiwKKwkudnBfZXJyb3JvZmZzZXQJCT0gT01BUDNfVlBfQ09ORklHX0VSUk9ST0ZGU0VULAorCS52cF92c3RlcG1pbgkJPSBPTUFQM19WUF9WU1RFUE1JTl9WU1RFUE1JTiwKKwkudnBfdnN0ZXBtYXgJCT0gT01BUDNfVlBfVlNURVBNQVhfVlNURVBNQVgsCisJLnZwX3ZkZG1pbgkJPSBPTUFQMzQzMF9WUDJfVkxJTUlUVE9fVkRETUlOLAorCS52cF92ZGRtYXgJCT0gT01BUDM0MzBfVlAyX1ZMSU1JVFRPX1ZERE1BWCwKKwkudnBfdGltZW91dF91cwkJPSBPTUFQM19WUF9WTElNSVRUT19USU1FT1VUX1VTLAorCS5pMmNfc2xhdmVfYWRkcgkJPSBPTUFQM19TUkkyQ19TTEFWRV9BRERSLAorCS5wbWljX3JlZwkJPSBPTUFQM19WRERfQ09SRV9TUl9DT05UUk9MX1JFRywKKwkudnNlbF90b191dgkJPSB0d2w0MDMwX3ZzZWxfdG9fdXYsCisJLnV2X3RvX3ZzZWwJCT0gdHdsNDAzMF91dl90b192c2VsLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX3ZvbHRfcG1pY19pbmZvIG9tYXA0X21wdV92b2x0X2luZm8gPSB7CisJLnNsZXdfcmF0ZQkJPSA0MDAwLAorCS5zdGVwX3NpemUJCT0gMTI1MDAsCisJLm9uX3ZvbHQJCT0gMTM1MDAwMCwKKwkub25scF92b2x0CQk9IDEzNTAwMDAsCisJLnJldF92b2x0CQk9IDgzNzUwMCwKKwkub2ZmX3ZvbHQJCT0gNjAwMDAwLAorCS52b2x0X3NldHVwX3RpbWUJPSAwLAorCS52cF9lcnJvcm9mZnNldAkJPSBPTUFQNF9WUF9DT05GSUdfRVJST1JPRkZTRVQsCisJLnZwX3ZzdGVwbWluCQk9IE9NQVA0X1ZQX1ZTVEVQTUlOX1ZTVEVQTUlOLAorCS52cF92c3RlcG1heAkJPSBPTUFQNF9WUF9WU1RFUE1BWF9WU1RFUE1BWCwKKwkudnBfdmRkbWluCQk9IE9NQVA0X1ZQX01QVV9WTElNSVRUT19WRERNSU4sCisJLnZwX3ZkZG1heAkJPSBPTUFQNF9WUF9NUFVfVkxJTUlUVE9fVkRETUFYLAorCS52cF90aW1lb3V0X3VzCQk9IE9NQVA0X1ZQX1ZMSU1JVFRPX1RJTUVPVVRfVVMsCisJLmkyY19zbGF2ZV9hZGRyCQk9IE9NQVA0X1NSSTJDX1NMQVZFX0FERFIsCisJLnBtaWNfcmVnCQk9IE9NQVA0X1ZERF9NUFVfU1JfVk9MVF9SRUcsCisJLnZzZWxfdG9fdXYJCT0gdHdsNjAzMF92c2VsX3RvX3V2LAorCS51dl90b192c2VsCQk9IHR3bDYwMzBfdXZfdG9fdnNlbCwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF92b2x0X3BtaWNfaW5mbyBvbWFwNF9pdmFfdm9sdF9pbmZvID0geworCS5zbGV3X3JhdGUJCT0gNDAwMCwKKwkuc3RlcF9zaXplCQk9IDEyNTAwLAorCS5vbl92b2x0CQk9IDExMDAwMDAsCisJLm9ubHBfdm9sdAkJPSAxMTAwMDAwLAorCS5yZXRfdm9sdAkJPSA4Mzc1MDAsCisJLm9mZl92b2x0CQk9IDYwMDAwMCwKKwkudm9sdF9zZXR1cF90aW1lCT0gMCwKKwkudnBfZXJyb3JvZmZzZXQJCT0gT01BUDRfVlBfQ09ORklHX0VSUk9ST0ZGU0VULAorCS52cF92c3RlcG1pbgkJPSBPTUFQNF9WUF9WU1RFUE1JTl9WU1RFUE1JTiwKKwkudnBfdnN0ZXBtYXgJCT0gT01BUDRfVlBfVlNURVBNQVhfVlNURVBNQVgsCisJLnZwX3ZkZG1pbgkJPSBPTUFQNF9WUF9JVkFfVkxJTUlUVE9fVkRETUlOLAorCS52cF92ZGRtYXgJCT0gT01BUDRfVlBfSVZBX1ZMSU1JVFRPX1ZERE1BWCwKKwkudnBfdGltZW91dF91cwkJPSBPTUFQNF9WUF9WTElNSVRUT19USU1FT1VUX1VTLAorCS5pMmNfc2xhdmVfYWRkcgkJPSBPTUFQNF9TUkkyQ19TTEFWRV9BRERSLAorCS5wbWljX3JlZwkJPSBPTUFQNF9WRERfSVZBX1NSX1ZPTFRfUkVHLAorCS52c2VsX3RvX3V2CQk9IHR3bDYwMzBfdnNlbF90b191diwKKwkudXZfdG9fdnNlbAkJPSB0d2w2MDMwX3V2X3RvX3ZzZWwsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfdm9sdF9wbWljX2luZm8gb21hcDRfY29yZV92b2x0X2luZm8gPSB7CisJLnNsZXdfcmF0ZQkJPSA0MDAwLAorCS5zdGVwX3NpemUJCT0gMTI1MDAsCisJLm9uX3ZvbHQJCT0gMTEwMDAwMCwKKwkub25scF92b2x0CQk9IDExMDAwMDAsCisJLnJldF92b2x0CQk9IDgzNzUwMCwKKwkub2ZmX3ZvbHQJCT0gNjAwMDAwLAorCS52b2x0X3NldHVwX3RpbWUJPSAwLAorCS52cF9lcnJvcm9mZnNldAkJPSBPTUFQNF9WUF9DT05GSUdfRVJST1JPRkZTRVQsCisJLnZwX3ZzdGVwbWluCQk9IE9NQVA0X1ZQX1ZTVEVQTUlOX1ZTVEVQTUlOLAorCS52cF92c3RlcG1heAkJPSBPTUFQNF9WUF9WU1RFUE1BWF9WU1RFUE1BWCwKKwkudnBfdmRkbWluCQk9IE9NQVA0X1ZQX0NPUkVfVkxJTUlUVE9fVkRETUlOLAorCS52cF92ZGRtYXgJCT0gT01BUDRfVlBfQ09SRV9WTElNSVRUT19WRERNQVgsCisJLnZwX3RpbWVvdXRfdXMJCT0gT01BUDRfVlBfVkxJTUlUVE9fVElNRU9VVF9VUywKKwkuaTJjX3NsYXZlX2FkZHIJCT0gT01BUDRfU1JJMkNfU0xBVkVfQUREUiwKKwkucG1pY19yZWcJCT0gT01BUDRfVkREX0NPUkVfU1JfVk9MVF9SRUcsCisJLnZzZWxfdG9fdXYJCT0gdHdsNjAzMF92c2VsX3RvX3V2LAorCS51dl90b192c2VsCQk9IHR3bDYwMzBfdXZfdG9fdnNlbCwKK307CisKK2ludCBfX2luaXQgb21hcDRfdHdsX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3Qgdm9sdGFnZWRvbWFpbiAqdm9sdGRtOworCisJaWYgKCFjcHVfaXNfb21hcDQ0eHgoKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwl2b2x0ZG0gPSBvbWFwX3ZvbHRhZ2VfZG9tYWluX2xvb2t1cCgibXB1Iik7CisJb21hcF92b2x0YWdlX3JlZ2lzdGVyX3BtaWModm9sdGRtLCAmb21hcDRfbXB1X3ZvbHRfaW5mbyk7CisKKwl2b2x0ZG0gPSBvbWFwX3ZvbHRhZ2VfZG9tYWluX2xvb2t1cCgiaXZhIik7CisJb21hcF92b2x0YWdlX3JlZ2lzdGVyX3BtaWModm9sdGRtLCAmb21hcDRfaXZhX3ZvbHRfaW5mbyk7CisKKwl2b2x0ZG0gPSBvbWFwX3ZvbHRhZ2VfZG9tYWluX2xvb2t1cCgiY29yZSIpOworCW9tYXBfdm9sdGFnZV9yZWdpc3Rlcl9wbWljKHZvbHRkbSwgJm9tYXA0X2NvcmVfdm9sdF9pbmZvKTsKKworCXJldHVybiAwOworfQorCitpbnQgX19pbml0IG9tYXAzX3R3bF9pbml0KHZvaWQpCit7CisJc3RydWN0IHZvbHRhZ2Vkb21haW4gKnZvbHRkbTsKKworCWlmICghY3B1X2lzX29tYXAzNHh4KCkpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKGNwdV9pc19vbWFwMzYzMCgpKSB7CisJCW9tYXAzX21wdV92b2x0X2luZm8udnBfdmRkbWluID0gT01BUDM2MzBfVlAxX1ZMSU1JVFRPX1ZERE1JTjsKKwkJb21hcDNfbXB1X3ZvbHRfaW5mby52cF92ZGRtYXggPSBPTUFQMzYzMF9WUDFfVkxJTUlUVE9fVkRETUFYOworCQlvbWFwM19jb3JlX3ZvbHRfaW5mby52cF92ZGRtaW4gPSBPTUFQMzYzMF9WUDJfVkxJTUlUVE9fVkRETUlOOworCQlvbWFwM19jb3JlX3ZvbHRfaW5mby52cF92ZGRtYXggPSBPTUFQMzYzMF9WUDJfVkxJTUlUVE9fVkRETUFYOworCX0KKworCXZvbHRkbSA9IG9tYXBfdm9sdGFnZV9kb21haW5fbG9va3VwKCJtcHUiKTsKKwlvbWFwX3ZvbHRhZ2VfcmVnaXN0ZXJfcG1pYyh2b2x0ZG0sICZvbWFwM19tcHVfdm9sdF9pbmZvKTsKKworCXZvbHRkbSA9IG9tYXBfdm9sdGFnZV9kb21haW5fbG9va3VwKCJjb3JlIik7CisJb21hcF92b2x0YWdlX3JlZ2lzdGVyX3BtaWModm9sdGRtLCAmb21hcDNfY29yZV92b2x0X2luZm8pOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL29wcC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vcHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjhiMzViCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vcHAuYwpAQCAtMCwwICsxLDkzIEBACisvKgorICogT01BUCBTb0Mgc3BlY2lmaWMgT1BQIHdyYXBwZXIgZnVuY3Rpb24KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQgLSBodHRwOi8vd3d3LnRpLmNvbS8KKyAqCU5pc2hhbnRoIE1lbm9uCisgKglLZXZpbiBIaWxtYW4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbi4KKyAqICAgICAgRWR1YXJkbyBWYWxlbnRpbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkICJhcyBpcyIgV0lUSE9VVCBBTlkgV0FSUkFOVFkgb2YgYW55CisgKiBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZDsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5CisgKiBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvb3BwLmg+CisKKyNpbmNsdWRlIDxwbGF0L29tYXBfZGV2aWNlLmg+CisKKyNpbmNsdWRlICJvbWFwX29wcF9kYXRhLmgiCisKKy8qIFRlbXAgdmFyaWFibGUgdG8gYWxsb3cgbXVsdGlwbGUgY2FsbHMgKi8KK3N0YXRpYyB1OCBfX2luaXRkYXRhIG9tYXBfdGFibGVfaW5pdDsKKworLyoqCisgKiBvbWFwX2luaXRfb3BwX3RhYmxlKCkgLSBJbml0aWFsaXplIG9wcCB0YWJsZSBhcyBwZXIgdGhlIENQVSB0eXBlCisgKiBAb3BwX2RlZjoJCW9wcCBkZWZhdWx0IGxpc3QgZm9yIHRoaXMgc2lsaWNvbgorICogQG9wcF9kZWZfc2l6ZToJbnVtYmVyIG9mIG9wcCBlbnRyaWVzIGZvciB0aGlzIHNpbGljb24KKyAqCisgKiBSZWdpc3RlciB0aGUgaW5pdGlhbCBPUFAgdGFibGUgd2l0aCB0aGUgT1BQIGxpYnJhcnkgYmFzZWQgb24gdGhlIENQVQorICogdHlwZS4gVGhpcyBpcyBtZWFudCB0byBiZSB1c2VkIG9ubHkgYnkgU29DIHNwZWNpZmljIHJlZ2lzdHJhdGlvbi4KKyAqLworaW50IF9faW5pdCBvbWFwX2luaXRfb3BwX3RhYmxlKHN0cnVjdCBvbWFwX29wcF9kZWYgKm9wcF9kZWYsCisJCXUzMiBvcHBfZGVmX3NpemUpCit7CisJaW50IGksIHI7CisKKwlpZiAoIW9wcF9kZWYgfHwgIW9wcF9kZWZfc2l6ZSkgeworCQlwcl9lcnIoIiVzOiBpbnZhbGlkIHBhcmFtcyFcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyoKKwkgKiBJbml0aWFsaXplIG9ubHkgaWYgbm90IGFscmVhZHkgaW5pdGlhbGl6ZWQgZXZlbiBpZiB0aGUgcHJldmlvdXMKKwkgKiBjYWxsIGZhaWxlZCwgYmVjYXVzZSwgbm8gcmVhc29uIHdlJ2Qgc3VjY2VlZCBhZ2Fpbi4KKwkgKi8KKwlpZiAob21hcF90YWJsZV9pbml0KQorCQlyZXR1cm4gLUVFWElTVDsKKwlvbWFwX3RhYmxlX2luaXQgPSAxOworCisJLyogTGV0cyBub3cgcmVnaXN0ZXIgd2l0aCBPUFAgbGlicmFyeSAqLworCWZvciAoaSA9IDA7IGkgPCBvcHBfZGVmX3NpemU7IGkrKykgeworCQlzdHJ1Y3Qgb21hcF9od21vZCAqb2g7CisJCXN0cnVjdCBkZXZpY2UgKmRldjsKKworCQlpZiAoIW9wcF9kZWYtPmh3bW9kX25hbWUpIHsKKwkJCXByX2VycigiJXM6IE5VTEwgbmFtZSBvZiBvbWFwX2h3bW9kLCBmYWlsaW5nIFslZF0uXG4iLAorCQkJCV9fZnVuY19fLCBpKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCW9oID0gb21hcF9od21vZF9sb29rdXAob3BwX2RlZi0+aHdtb2RfbmFtZSk7CisJCWlmICghb2ggfHwgIW9oLT5vZCkgeworCQkJcHJfd2FybigiJXM6IG5vIGh3bW9kIG9yIG9kZXYgZm9yICVzLCBbJWRdICIKKwkJCQkiY2Fubm90IGFkZCBPUFBzLlxuIiwgX19mdW5jX18sCisJCQkJb3BwX2RlZi0+aHdtb2RfbmFtZSwgaSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlkZXYgPSAmb2gtPm9kLT5wZGV2LmRldjsKKworCQlyID0gb3BwX2FkZChkZXYsIG9wcF9kZWYtPmZyZXEsIG9wcF9kZWYtPnVfdm9sdCk7CisJCWlmIChyKSB7CisJCQlkZXZfZXJyKGRldiwgIiVzOiBhZGQgT1BQICVsZCBmYWlsZWQgZm9yICVzIFslZF0gIgorCQkJCSJyZXN1bHQ9JWRcbiIsCisJCQkgICAgICAgX19mdW5jX18sIG9wcF9kZWYtPmZyZXEsCisJCQkgICAgICAgb3BwX2RlZi0+aHdtb2RfbmFtZSwgaSwgcik7CisJCX0gZWxzZSB7CisJCQlpZiAoIW9wcF9kZWYtPmRlZmF1bHRfYXZhaWxhYmxlKQorCQkJCXIgPSBvcHBfZGlzYWJsZShkZXYsIG9wcF9kZWYtPmZyZXEpOworCQkJaWYgKHIpCisJCQkJZGV2X2VycihkZXYsICIlczogZGlzYWJsZSAlbGQgZmFpbGVkIGZvciAlcyAiCisJCQkJCSJbJWRdIHJlc3VsdD0lZFxuIiwKKwkJCQkJX19mdW5jX18sIG9wcF9kZWYtPmZyZXEsCisJCQkJCW9wcF9kZWYtPmh3bW9kX25hbWUsIGksIHIpOworCQl9CisJCW9wcF9kZWYrKzsKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvb3BwM3h4eF9kYXRhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29wcDN4eHhfZGF0YS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0ODZmY2UKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29wcDN4eHhfZGF0YS5jCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogT01BUDMgT1BQIHRhYmxlIGRlZmluaXRpb25zLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZCAtIGh0dHA6Ly93d3cudGkuY29tLworICoJTmlzaGFudGggTWVub24KKyAqCUtldmluIEhpbG1hbgorICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uLgorICogICAgICBFZHVhcmRvIFZhbGVudGluCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgImFzIGlzIiBXSVRIT1VUIEFOWSBXQVJSQU5UWSBvZiBhbnkKKyAqIGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkKKyAqIG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CisKKyNpbmNsdWRlICJvbWFwX29wcF9kYXRhLmgiCisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9vcHBfZGVmIF9faW5pdGRhdGEgb21hcDM0eHhfb3BwX2RlZl9saXN0W10gPSB7CisJLyogTVBVIE9QUDEgKi8KKwlPUFBfSU5JVElBTElaRVIoIm1wdSIsIHRydWUsIDEyNTAwMDAwMCwgOTc1MDAwKSwKKwkvKiBNUFUgT1BQMiAqLworCU9QUF9JTklUSUFMSVpFUigibXB1IiwgdHJ1ZSwgMjUwMDAwMDAwLCAxMDc1MDAwKSwKKwkvKiBNUFUgT1BQMyAqLworCU9QUF9JTklUSUFMSVpFUigibXB1IiwgdHJ1ZSwgNTAwMDAwMDAwLCAxMjAwMDAwKSwKKwkvKiBNUFUgT1BQNCAqLworCU9QUF9JTklUSUFMSVpFUigibXB1IiwgdHJ1ZSwgNTUwMDAwMDAwLCAxMjcwMDAwKSwKKwkvKiBNUFUgT1BQNSAqLworCU9QUF9JTklUSUFMSVpFUigibXB1IiwgdHJ1ZSwgNjAwMDAwMDAwLCAxMzUwMDAwKSwKKworCS8qCisJICogTDMgT1BQMSAtIDQxLjUgTUh6IGlzIGRpc2FibGVkIGJlY2F1c2U6IFRoZSB2b2x0YWdlIGZvciB0aGF0IE9QUCBpcworCSAqIGFsbW9zdCB0aGUgc2FtZSB0aGFuIHRoZSBvbmUgYXQgODNNSHogdGh1cyBwcm92aWRpbmcgdmVyeSBsaXR0bGUKKwkgKiBnYWluIGZvciB0aGUgcG93ZXIgcG9pbnQgb2Ygdmlldy4gSW4gdGVybSBvZiBlbmVyZ3kgaXQgd2lsbCBldmVuCisJICogaW5jcmVhc2UgdGhlIGNvbnN1bXB0aW9uIGR1ZSB0byB0aGUgdmVyeSBuZWdhdGl2ZSBwZXJmb3JtYW5jZQorCSAqIGltcGFjdCB0aGF0IGZyZXF1ZW5jeSB3aWxsIGRvIHRvIHRoZSBNUFUgYW5kIHRoZSB3aG9sZSBzeXN0ZW0gaW4KKwkgKiBnZW5lcmFsLgorCSAqLworCU9QUF9JTklUSUFMSVpFUigibDNfbWFpbiIsIGZhbHNlLCA0MTUwMDAwMCwgOTc1MDAwKSwKKwkvKiBMMyBPUFAyICovCisJT1BQX0lOSVRJQUxJWkVSKCJsM19tYWluIiwgdHJ1ZSwgODMwMDAwMDAsIDEwNTAwMDApLAorCS8qIEwzIE9QUDMgKi8KKwlPUFBfSU5JVElBTElaRVIoImwzX21haW4iLCB0cnVlLCAxNjYwMDAwMDAsIDExNTAwMDApLAorCisJLyogRFNQIE9QUDEgKi8KKwlPUFBfSU5JVElBTElaRVIoIml2YSIsIHRydWUsIDkwMDAwMDAwLCA5NzUwMDApLAorCS8qIERTUCBPUFAyICovCisJT1BQX0lOSVRJQUxJWkVSKCJpdmEiLCB0cnVlLCAxODAwMDAwMDAsIDEwNzUwMDApLAorCS8qIERTUCBPUFAzICovCisJT1BQX0lOSVRJQUxJWkVSKCJpdmEiLCB0cnVlLCAzNjAwMDAwMDAsIDEyMDAwMDApLAorCS8qIERTUCBPUFA0ICovCisJT1BQX0lOSVRJQUxJWkVSKCJpdmEiLCB0cnVlLCA0MDAwMDAwMDAsIDEyNzAwMDApLAorCS8qIERTUCBPUFA1ICovCisJT1BQX0lOSVRJQUxJWkVSKCJpdmEiLCB0cnVlLCA0MzAwMDAwMDAsIDEzNTAwMDApLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX29wcF9kZWYgX19pbml0ZGF0YSBvbWFwMzZ4eF9vcHBfZGVmX2xpc3RbXSA9IHsKKwkvKiBNUFUgT1BQMSAtIE9QUDUwICovCisJT1BQX0lOSVRJQUxJWkVSKCJtcHUiLCB0cnVlLCAgMzAwMDAwMDAwLCAxMDEyNTAwKSwKKwkvKiBNUFUgT1BQMiAtIE9QUDEwMCAqLworCU9QUF9JTklUSUFMSVpFUigibXB1IiwgdHJ1ZSwgIDYwMDAwMDAwMCwgMTIwMDAwMCksCisJLyogTVBVIE9QUDMgLSBPUFAtVHVyYm8gKi8KKwlPUFBfSU5JVElBTElaRVIoIm1wdSIsIGZhbHNlLCA4MDAwMDAwMDAsIDEzMjUwMDApLAorCS8qIE1QVSBPUFA0IC0gT1BQLVNCICovCisJT1BQX0lOSVRJQUxJWkVSKCJtcHUiLCBmYWxzZSwgMTAwMDAwMDAwMCwgMTM3NTAwMCksCisKKwkvKiBMMyBPUFAxIC0gT1BQNTAgKi8KKwlPUFBfSU5JVElBTElaRVIoImwzX21haW4iLCB0cnVlLCAxMDAwMDAwMDAsIDEwMDAwMDApLAorCS8qIEwzIE9QUDIgLSBPUFAxMDAsIE9QUC1UdXJibywgT1BQLVNCICovCisJT1BQX0lOSVRJQUxJWkVSKCJsM19tYWluIiwgdHJ1ZSwgMjAwMDAwMDAwLCAxMjAwMDAwKSwKKworCS8qIERTUCBPUFAxIC0gT1BQNTAgKi8KKwlPUFBfSU5JVElBTElaRVIoIml2YSIsIHRydWUsICAyNjAwMDAwMDAsIDEwMTI1MDApLAorCS8qIERTUCBPUFAyIC0gT1BQMTAwICovCisJT1BQX0lOSVRJQUxJWkVSKCJpdmEiLCB0cnVlLCAgNTIwMDAwMDAwLCAxMjAwMDAwKSwKKwkvKiBEU1AgT1BQMyAtIE9QUC1UdXJibyAqLworCU9QUF9JTklUSUFMSVpFUigiaXZhIiwgZmFsc2UsIDY2MDAwMDAwMCwgMTMyNTAwMCksCisJLyogRFNQIE9QUDQgLSBPUFAtU0IgKi8KKwlPUFBfSU5JVElBTElaRVIoIml2YSIsIGZhbHNlLCA4MDAwMDAwMDAsIDEzNzUwMDApLAorfTsKKworLyoqCisgKiBvbWFwM19vcHBfaW5pdCgpIC0gaW5pdGlhbGl6ZSBvbWFwMyBvcHAgdGFibGUKKyAqLworc3RhdGljIGludCBfX2luaXQgb21hcDNfb3BwX2luaXQodm9pZCkKK3sKKwlpbnQgciA9IC1FTk9ERVY7CisKKwlpZiAoIWNwdV9pc19vbWFwMzR4eCgpKQorCQlyZXR1cm4gcjsKKworCWlmIChjcHVfaXNfb21hcDM2MzAoKSkKKwkJciA9IG9tYXBfaW5pdF9vcHBfdGFibGUob21hcDM2eHhfb3BwX2RlZl9saXN0LAorCQkJQVJSQVlfU0laRShvbWFwMzZ4eF9vcHBfZGVmX2xpc3QpKTsKKwllbHNlCisJCXIgPSBvbWFwX2luaXRfb3BwX3RhYmxlKG9tYXAzNHh4X29wcF9kZWZfbGlzdCwKKwkJCUFSUkFZX1NJWkUob21hcDM0eHhfb3BwX2RlZl9saXN0KSk7CisKKwlyZXR1cm4gcjsKK30KK2RldmljZV9pbml0Y2FsbChvbWFwM19vcHBfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL29wcDR4eHhfZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vcHA0eHh4X2RhdGEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTFmYTU2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vcHA0eHh4X2RhdGEuYwpAQCAtMCwwICsxLDU3IEBACisvKgorICogT01BUDQgT1BQIHRhYmxlIGRlZmluaXRpb25zLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQgLSBodHRwOi8vd3d3LnRpLmNvbS8KKyAqCU5pc2hhbnRoIE1lbm9uCisgKglLZXZpbiBIaWxtYW4KKyAqCVRoYXJhIEdvcGluYXRoCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24uCisgKiAgICAgIEVkdWFyZG8gVmFsZW50aW4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCAiYXMgaXMiIFdJVEhPVVQgQU5ZIFdBUlJBTlRZIG9mIGFueQorICoga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQ7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eQorICogb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KKworI2luY2x1ZGUgIm9tYXBfb3BwX2RhdGEuaCIKKworc3RhdGljIHN0cnVjdCBvbWFwX29wcF9kZWYgX19pbml0ZGF0YSBvbWFwNDR4eF9vcHBfZGVmX2xpc3RbXSA9IHsKKwkvKiBNUFUgT1BQMSAtIE9QUDUwICovCisJT1BQX0lOSVRJQUxJWkVSKCJtcHUiLCB0cnVlLCAzMDAwMDAwMDAsIDExMDAwMDApLAorCS8qIE1QVSBPUFAyIC0gT1BQMTAwICovCisJT1BQX0lOSVRJQUxJWkVSKCJtcHUiLCB0cnVlLCA2MDAwMDAwMDAsIDEyMDAwMDApLAorCS8qIE1QVSBPUFAzIC0gT1BQLVR1cmJvICovCisJT1BQX0lOSVRJQUxJWkVSKCJtcHUiLCBmYWxzZSwgODAwMDAwMDAwLCAxMjYwMDAwKSwKKwkvKiBNUFUgT1BQNCAtIE9QUC1TQiAqLworCU9QUF9JTklUSUFMSVpFUigibXB1IiwgZmFsc2UsIDEwMDgwMDAwMDAsIDEzNTAwMDApLAorCS8qIEwzIE9QUDEgLSBPUFA1MCAqLworCU9QUF9JTklUSUFMSVpFUigibDNfbWFpbl8xIiwgdHJ1ZSwgMTAwMDAwMDAwLCA5MzAwMDApLAorCS8qIEwzIE9QUDIgLSBPUFAxMDAsIE9QUC1UdXJibywgT1BQLVNCICovCisJT1BQX0lOSVRJQUxJWkVSKCJsM19tYWluXzEiLCB0cnVlLCAyMDAwMDAwMDAsIDExMDAwMDApLAorCS8qIFRPRE86IGFkZCBJVkEsIERTUCwgYWVzcywgZmRpZiwgZ3B1ICovCit9OworCisvKioKKyAqIG9tYXA0X29wcF9pbml0KCkgLSBpbml0aWFsaXplIG9tYXA0IG9wcCB0YWJsZQorICovCitzdGF0aWMgaW50IF9faW5pdCBvbWFwNF9vcHBfaW5pdCh2b2lkKQoreworCWludCByID0gLUVOT0RFVjsKKworCWlmICghY3B1X2lzX29tYXA0NHh4KCkpCisJCXJldHVybiByOworCisJciA9IG9tYXBfaW5pdF9vcHBfdGFibGUob21hcDQ0eHhfb3BwX2RlZl9saXN0LAorCQkJQVJSQVlfU0laRShvbWFwNDR4eF9vcHBfZGVmX2xpc3QpKTsKKworCXJldHVybiByOworfQorZGV2aWNlX2luaXRjYWxsKG9tYXA0X29wcF9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG0tZGVidWcuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG0tZGVidWcuYwppbmRleCBhOGFmYjYxLi4xMjVmNTY1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BtLWRlYnVnLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbS1kZWJ1Zy5jCkBAIC0yOSwxMiArMjksMTMgQEAKIAogI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KICNpbmNsdWRlIDxwbGF0L2JvYXJkLmg+Ci0jaW5jbHVkZSA8cGxhdC9wb3dlcmRvbWFpbi5oPgotI2luY2x1ZGUgPHBsYXQvY2xvY2tkb21haW4uaD4KKyNpbmNsdWRlICJwb3dlcmRvbWFpbi5oIgorI2luY2x1ZGUgImNsb2NrZG9tYWluLmgiCiAjaW5jbHVkZSA8cGxhdC9kbXRpbWVyLmg+CisjaW5jbHVkZSA8cGxhdC9vbWFwLXBtLmg+CiAKLSNpbmNsdWRlICJwcm0uaCIKLSNpbmNsdWRlICJjbS5oIgorI2luY2x1ZGUgImNtMnh4eF8zeHh4LmgiCisjaW5jbHVkZSAicHJtMnh4eF8zeHh4LmgiCiAjaW5jbHVkZSAicG0uaCIKIAogaW50IG9tYXAyX3BtX2RlYnVnOwpAQCAtNDUsMTAgKzQ2LDEwIEBACiAKICNkZWZpbmUgRFVNUF9QUk1fTU9EX1JFRyhtb2QsIHJlZykgICAgXAogCXJlZ3NbcmVnX2NvdW50XS5uYW1lID0gI21vZCAiLiIgI3JlZzsgXAotCXJlZ3NbcmVnX2NvdW50KytdLnZhbCA9IHBybV9yZWFkX21vZF9yZWcobW9kLCByZWcpCisJcmVnc1tyZWdfY291bnQrK10udmFsID0gb21hcDJfcHJtX3JlYWRfbW9kX3JlZyhtb2QsIHJlZykKICNkZWZpbmUgRFVNUF9DTV9NT0RfUkVHKG1vZCwgcmVnKSAgICAgXAogCXJlZ3NbcmVnX2NvdW50XS5uYW1lID0gI21vZCAiLiIgI3JlZzsgXAotCXJlZ3NbcmVnX2NvdW50KytdLnZhbCA9IGNtX3JlYWRfbW9kX3JlZyhtb2QsIHJlZykKKwlyZWdzW3JlZ19jb3VudCsrXS52YWwgPSBvbWFwMl9jbV9yZWFkX21vZF9yZWcobW9kLCByZWcpCiAjZGVmaW5lIERVTVBfUFJNX1JFRyhyZWcpIFwKIAlyZWdzW3JlZ19jb3VudF0ubmFtZSA9ICNyZWc7IFwKIAlyZWdzW3JlZ19jb3VudCsrXS52YWwgPSBfX3Jhd19yZWFkbChyZWcpCkBAIC0zMjgsMTAgKzMyOSwxMCBAQAogCQlmb3IgKGogPSBwbV9kYmdfcmVnX21vZHVsZXNbaV0ubG93OwogCQkJaiA8PSBwbV9kYmdfcmVnX21vZHVsZXNbaV0uaGlnaDsgaiArPSA0KSB7CiAJCQlpZiAocG1fZGJnX3JlZ19tb2R1bGVzW2ldLnR5cGUgPT0gTU9EX0NNKQotCQkJCXZhbCA9IGNtX3JlYWRfbW9kX3JlZygKKwkJCQl2YWwgPSBvbWFwMl9jbV9yZWFkX21vZF9yZWcoCiAJCQkJCXBtX2RiZ19yZWdfbW9kdWxlc1tpXS5vZmZzZXQsIGopOwogCQkJZWxzZQotCQkJCXZhbCA9IHBybV9yZWFkX21vZF9yZWcoCisJCQkJdmFsID0gb21hcDJfcHJtX3JlYWRfbW9kX3JlZygKIAkJCQkJcG1fZGJnX3JlZ19tb2R1bGVzW2ldLm9mZnNldCwgaik7CiAJCQkqKHB0cisrKSA9IHZhbDsKIAkJfQpAQCAtNTgxLDYgKzU4MiwxMCBAQAogCSpvcHRpb24gPSB2YWw7CiAKIAlpZiAob3B0aW9uID09ICZlbmFibGVfb2ZmX21vZGUpIHsKKwkJaWYgKHZhbCkKKwkJCW9tYXBfcG1fZW5hYmxlX29mZl9tb2RlKCk7CisJCWVsc2UKKwkJCW9tYXBfcG1fZGlzYWJsZV9vZmZfbW9kZSgpOwogCQlpZiAoY3B1X2lzX29tYXAzNHh4KCkpCiAJCQlvbWFwM19wbV9vZmZfbW9kZV9lbmFibGUodmFsKTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BtLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BtLmMKaW5kZXggNTljYTAzYi4uZDVhMTAyYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG0uYwpAQCAtMTMsMTMgKzEzLDE2IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvb3BwLmg+CiAKICNpbmNsdWRlIDxwbGF0L29tYXAtcG0uaD4KICNpbmNsdWRlIDxwbGF0L29tYXBfZGV2aWNlLmg+CiAjaW5jbHVkZSA8cGxhdC9jb21tb24uaD4KKyNpbmNsdWRlIDxwbGF0L3ZvbHRhZ2UuaD4KIAotI2luY2x1ZGUgPHBsYXQvcG93ZXJkb21haW4uaD4KLSNpbmNsdWRlIDxwbGF0L2Nsb2NrZG9tYWluLmg+CisjaW5jbHVkZSAicG93ZXJkb21haW4uaCIKKyNpbmNsdWRlICJjbG9ja2RvbWFpbi5oIgorI2luY2x1ZGUgInBtLmgiCiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9kZXZpY2VfcG1fbGF0ZW5jeSAqcG1fbGF0czsKIApAQCAtODksMTAgKzkyLDEzIEBACiAJfQogfQogCisvKiBUeXBlcyBvZiBzbGVlcF9zd2l0Y2ggdXNlZCBpbiBvbWFwX3NldF9wd3JkbV9zdGF0ZSAqLworI2RlZmluZSBGT1JDRVdBS0VVUF9TV0lUQ0gJMAorI2RlZmluZSBMT1dQT1dFUlNUQVRFX1NXSVRDSAkxCisKIC8qCiAgKiBUaGlzIHNldHMgcHdyZG0gc3RhdGUgKG90aGVyIHRoYW4gbXB1ICYgY29yZS4gQ3VycmVudGx5IG9ubHkgT04gJgotICogUkVUIGFyZSBzdXBwb3J0ZWQuIEZ1bmN0aW9uIGlzIGFzc3VtaW5nIHRoYXQgY2xrZG0gZG9lc24ndCBoYXZlCi0gKiBod19zdXAgbW9kZSBlbmFibGVkLgorICogUkVUIGFyZSBzdXBwb3J0ZWQuCiAgKi8KIGludCBvbWFwX3NldF9wd3JkbV9zdGF0ZShzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCB1MzIgc3RhdGUpCiB7CkBAIC0xMTQsOSArMTIwLDE0IEBACiAJCXJldHVybiByZXQ7CiAKIAlpZiAocHdyZG1fcmVhZF9wd3JzdChwd3JkbSkgPCBQV1JETV9QT1dFUl9PTikgewotCQlvbWFwMl9jbGtkbV93YWtldXAocHdyZG0tPnB3cmRtX2Nsa2Rtc1swXSk7Ci0JCXNsZWVwX3N3aXRjaCA9IDE7Ci0JCXB3cmRtX3dhaXRfdHJhbnNpdGlvbihwd3JkbSk7CisJCWlmICgocHdyZG1fcmVhZF9wd3JzdChwd3JkbSkgPiBzdGF0ZSkgJiYKKwkJCShwd3JkbS0+ZmxhZ3MgJiBQV1JETV9IQVNfTE9XUE9XRVJTVEFURUNIQU5HRSkpIHsKKwkJCXNsZWVwX3N3aXRjaCA9IExPV1BPV0VSU1RBVEVfU1dJVENIOworCQl9IGVsc2UgeworCQkJb21hcDJfY2xrZG1fd2FrZXVwKHB3cmRtLT5wd3JkbV9jbGtkbXNbMF0pOworCQkJcHdyZG1fd2FpdF90cmFuc2l0aW9uKHB3cmRtKTsKKwkJCXNsZWVwX3N3aXRjaCA9IEZPUkNFV0FLRVVQX1NXSVRDSDsKKwkJfQogCX0KIAogCXJldCA9IHB3cmRtX3NldF9uZXh0X3B3cnN0KHB3cmRtLCBzdGF0ZSk7CkBAIC0xMjYsMTYgKzEzNywxMDYgQEAKIAkJZ290byBlcnI7CiAJfQogCi0JaWYgKHNsZWVwX3N3aXRjaCkgewotCQlvbWFwMl9jbGtkbV9hbGxvd19pZGxlKHB3cmRtLT5wd3JkbV9jbGtkbXNbMF0pOwotCQlwd3JkbV93YWl0X3RyYW5zaXRpb24ocHdyZG0pOwotCQlwd3JkbV9zdGF0ZV9zd2l0Y2gocHdyZG0pOworCXN3aXRjaCAoc2xlZXBfc3dpdGNoKSB7CisJY2FzZSBGT1JDRVdBS0VVUF9TV0lUQ0g6CisJCWlmIChwd3JkbS0+cHdyZG1fY2xrZG1zWzBdLT5mbGFncyAmIENMS0RNX0NBTl9FTkFCTEVfQVVUTykKKwkJCW9tYXAyX2Nsa2RtX2FsbG93X2lkbGUocHdyZG0tPnB3cmRtX2Nsa2Rtc1swXSk7CisJCWVsc2UKKwkJCW9tYXAyX2Nsa2RtX3NsZWVwKHB3cmRtLT5wd3JkbV9jbGtkbXNbMF0pOworCQlicmVhazsKKwljYXNlIExPV1BPV0VSU1RBVEVfU1dJVENIOgorCQlwd3JkbV9zZXRfbG93cHdyc3RjaGFuZ2UocHdyZG0pOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gcmV0OwogCX0KIAorCXB3cmRtX3dhaXRfdHJhbnNpdGlvbihwd3JkbSk7CisJcHdyZG1fc3RhdGVfc3dpdGNoKHB3cmRtKTsKIGVycjoKIAlyZXR1cm4gcmV0OwogfQogCisvKgorICogVGhpcyBBUEkgaXMgdG8gYmUgY2FsbGVkIGR1cmluZyBpbml0IHRvIHB1dCB0aGUgdmFyaW91cyB2b2x0YWdlCisgKiBkb21haW5zIHRvIHRoZSB2b2x0YWdlIGFzIHBlciB0aGUgb3BwIHRhYmxlLiBUeXBpY2FsbHkgd2UgYm9vdCB1cAorICogYXQgdGhlIG5vbWluYWwgdm9sdGFnZS4gU28gdGhpcyBmdW5jdGlvbiBmaW5kcyBvdXQgdGhlIHJhdGUgb2YKKyAqIHRoZSBjbG9jayBhc3NvY2lhdGVkIHdpdGggdGhlIHZvbHRhZ2UgZG9tYWluLCBmaW5kcyBvdXQgdGhlIGNvcnJlY3QKKyAqIG9wcCBlbnRyeSBhbmQgcHV0cyB0aGUgdm9sdGFnZSBkb21haW4gdG8gdGhlIHZvbHRhZ2Ugc3BlY2lmaWVzCisgKiBpbiB0aGUgb3BwIGVudHJ5CisgKi8KK3N0YXRpYyBpbnQgX19pbml0IG9tYXAyX3NldF9pbml0X3ZvbHRhZ2UoY2hhciAqdmRkX25hbWUsIGNoYXIgKmNsa19uYW1lLAorCQkJCQkJc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCB2b2x0YWdlZG9tYWluICp2b2x0ZG07CisJc3RydWN0IGNsayAqY2xrOworCXN0cnVjdCBvcHAgKm9wcDsKKwl1bnNpZ25lZCBsb25nIGZyZXEsIGJvb3R1cF92b2x0OworCisJaWYgKCF2ZGRfbmFtZSB8fCAhY2xrX25hbWUgfHwgIWRldikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBJbnZhbGlkIHBhcmFtZXRlcnMhXG4iLCBfX2Z1bmNfXyk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwl2b2x0ZG0gPSBvbWFwX3ZvbHRhZ2VfZG9tYWluX2xvb2t1cCh2ZGRfbmFtZSk7CisJaWYgKElTX0VSUih2b2x0ZG0pKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IFVuYWJsZSB0byBnZXQgdmRkIHBvaW50ZXIgZm9yIHZkZF8lc1xuIiwKKwkJCV9fZnVuY19fLCB2ZGRfbmFtZSk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwljbGsgPSAgY2xrX2dldChOVUxMLCBjbGtfbmFtZSk7CisJaWYgKElTX0VSUihjbGspKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHVuYWJsZSB0byBnZXQgY2xrICVzXG4iLAorCQkJX19mdW5jX18sIGNsa19uYW1lKTsKKwkJZ290byBleGl0OworCX0KKworCWZyZXEgPSBjbGstPnJhdGU7CisJY2xrX3B1dChjbGspOworCisJb3BwID0gb3BwX2ZpbmRfZnJlcV9jZWlsKGRldiwgJmZyZXEpOworCWlmIChJU19FUlIob3BwKSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmFibGUgdG8gZmluZCBib290IHVwIE9QUCBmb3IgdmRkXyVzXG4iLAorCQkJX19mdW5jX18sIHZkZF9uYW1lKTsKKwkJZ290byBleGl0OworCX0KKworCWJvb3R1cF92b2x0ID0gb3BwX2dldF92b2x0YWdlKG9wcCk7CisJaWYgKCFib290dXBfdm9sdCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmFibGUgdG8gZmluZCB2b2x0YWdlIGNvcnJlc3BvbmRpbmciCisJCQkidG8gdGhlIGJvb3R1cCBPUFAgZm9yIHZkZF8lc1xuIiwgX19mdW5jX18sIHZkZF9uYW1lKTsKKwkJZ290byBleGl0OworCX0KKworCW9tYXBfdm9sdGFnZV9zY2FsZV92ZGQodm9sdGRtLCBib290dXBfdm9sdCk7CisJcmV0dXJuIDA7CisKK2V4aXQ6CisJcHJpbnRrKEtFUk5fRVJSICIlczogVW5hYmxlIHRvIHB1dCB2ZGRfJXMgdG8gaXRzIGluaXQgdm9sdGFnZVxuXG4iLAorCQlfX2Z1bmNfXywgdmRkX25hbWUpOworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgb21hcDNfaW5pdF92b2x0YWdlcyh2b2lkKQoreworCWlmICghY3B1X2lzX29tYXAzNHh4KCkpCisJCXJldHVybjsKKworCW9tYXAyX3NldF9pbml0X3ZvbHRhZ2UoIm1wdSIsICJkcGxsMV9jayIsIG1wdV9kZXYpOworCW9tYXAyX3NldF9pbml0X3ZvbHRhZ2UoImNvcmUiLCAibDNfaWNrIiwgbDNfZGV2KTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IG9tYXA0X2luaXRfdm9sdGFnZXModm9pZCkKK3sKKwlpZiAoIWNwdV9pc19vbWFwNDR4eCgpKQorCQlyZXR1cm47CisKKwlvbWFwMl9zZXRfaW5pdF92b2x0YWdlKCJtcHUiLCAiZHBsbF9tcHVfY2siLCBtcHVfZGV2KTsKKwlvbWFwMl9zZXRfaW5pdF92b2x0YWdlKCJjb3JlIiwgImwzX2Rpdl9jayIsIGwzX2Rldik7CisJb21hcDJfc2V0X2luaXRfdm9sdGFnZSgiaXZhIiwgImRwbGxfaXZhX201eDJfY2siLCBpdmFfZGV2KTsKK30KKwogc3RhdGljIGludCBfX2luaXQgb21hcDJfY29tbW9uX3BtX2luaXQodm9pZCkKIHsKIAlvbWFwMl9pbml0X3Byb2Nlc3Nvcl9kZXZpY2VzKCk7CkBAIC0xNDMsNSArMjQ0LDI0IEBACiAKIAlyZXR1cm4gMDsKIH0KLWRldmljZV9pbml0Y2FsbChvbWFwMl9jb21tb25fcG1faW5pdCk7Citwb3N0Y29yZV9pbml0Y2FsbChvbWFwMl9jb21tb25fcG1faW5pdCk7CiAKK3N0YXRpYyBpbnQgX19pbml0IG9tYXAyX2NvbW1vbl9wbV9sYXRlX2luaXQodm9pZCkKK3sKKwkvKiBJbml0IHRoZSBPTUFQIFRXTCBwYXJhbWV0ZXJzICovCisJb21hcDNfdHdsX2luaXQoKTsKKwlvbWFwNF90d2xfaW5pdCgpOworCisJLyogSW5pdCB0aGUgdm9sdGFnZSBsYXllciAqLworCW9tYXBfdm9sdGFnZV9sYXRlX2luaXQoKTsKKworCS8qIEluaXRpYWxpemUgdGhlIHZvbHRhZ2VzICovCisJb21hcDNfaW5pdF92b2x0YWdlcygpOworCW9tYXA0X2luaXRfdm9sdGFnZXMoKTsKKworCS8qIFNtYXJ0cmVmbGV4IGRldmljZSBpbml0ICovCisJb21hcF9kZXZpbml0X3NtYXJ0cmVmbGV4KCk7CisKKwlyZXR1cm4gMDsKK30KK2xhdGVfaW5pdGNhbGwob21hcDJfY29tbW9uX3BtX2xhdGVfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BtLmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BtLmgKaW5kZXggMGQ3NWJmZC4uMWMxYjBhYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbS5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG0uaApAQCAtMTEsNyArMTEsOSBAQAogI2lmbmRlZiBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfUE1fSAogI2RlZmluZSBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfUE1fSAogCi0jaW5jbHVkZSA8cGxhdC9wb3dlcmRvbWFpbi5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorCisjaW5jbHVkZSAicG93ZXJkb21haW4uaCIKIAogZXh0ZXJuIHZvaWQgKm9tYXAzX3NlY3VyZV9yYW1fc3RvcmFnZTsKIGV4dGVybiB2b2lkIG9tYXAzX3BtX29mZl9tb2RlX2VuYWJsZShpbnQpOwpAQCAtMjAsNiArMjIsMjAgQEAKIGV4dGVybiBpbnQgb21hcF9zZXRfcHdyZG1fc3RhdGUoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgdTMyIHN0YXRlKTsKIGV4dGVybiBpbnQgb21hcDNfaWRsZV9pbml0KHZvaWQpOwogCisjaWYgZGVmaW5lZChDT05GSUdfUE1fT1BQKQorZXh0ZXJuIGludCBvbWFwM19vcHBfaW5pdCh2b2lkKTsKK2V4dGVybiBpbnQgb21hcDRfb3BwX2luaXQodm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgb21hcDNfb3BwX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gLUVJTlZBTDsKK30KK3N0YXRpYyBpbmxpbmUgaW50IG9tYXA0X29wcF9pbml0KHZvaWQpCit7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisjZW5kaWYKKwogc3RydWN0IGNwdWlkbGVfcGFyYW1zIHsKIAl1OCAgdmFsaWQ7CiAJdTMyIHNsZWVwX2xhdGVuY3k7CkBAIC01OCw3ICs3NCw3IEBACiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9JRExFKQotZXh0ZXJuIHZvaWQgb21hcDNfY3B1aWRsZV91cGRhdGVfc3RhdGVzKHZvaWQpOworZXh0ZXJuIHZvaWQgb21hcDNfY3B1aWRsZV91cGRhdGVfc3RhdGVzKHUzMiwgdTMyKTsKICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfUE1fREVCVUcpICYmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKQpAQCAtODAsOSArOTYsNDYgQEAKIGV4dGVybiB2b2lkIG9tYXAzX3NhdmVfc2NyYXRjaHBhZF9jb250ZW50cyh2b2lkKTsKIAogZXh0ZXJuIHVuc2lnbmVkIGludCBvbWFwMjR4eF9pZGxlX2xvb3Bfc3VzcGVuZF9zejsKLWV4dGVybiB1bnNpZ25lZCBpbnQgb21hcDM0eHhfc3VzcGVuZF9zejsKIGV4dGVybiB1bnNpZ25lZCBpbnQgc2F2ZV9zZWN1cmVfcmFtX2NvbnRleHRfc3o7CiBleHRlcm4gdW5zaWduZWQgaW50IG9tYXAyNHh4X2NwdV9zdXNwZW5kX3N6OwogZXh0ZXJuIHVuc2lnbmVkIGludCBvbWFwMzR4eF9jcHVfc3VzcGVuZF9zejsKIAorI2RlZmluZSBQTV9SVEFfRVJSQVRVTV9pNjA4CQkoMSA8PCAwKQorI2RlZmluZSBQTV9TRFJDX1dBS0VVUF9FUlJBVFVNX2k1ODMJKDEgPDwgMSkKKworI2lmIGRlZmluZWQoQ09ORklHX1BNKSAmJiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKQorZXh0ZXJuIHUxNiBwbTM0eHhfZXJyYXRhOworI2RlZmluZSBJU19QTTM0WFhfRVJSQVRVTShpZCkJCShwbTM0eHhfZXJyYXRhICYgKGlkKSkKK2V4dGVybiB2b2lkIGVuYWJsZV9vbWFwMzYzMF90b2dnbGVfbDJfb25fcmVzdG9yZSh2b2lkKTsKKyNlbHNlCisjZGVmaW5lIElTX1BNMzRYWF9FUlJBVFVNKGlkKQkJMAorc3RhdGljIGlubGluZSB2b2lkIGVuYWJsZV9vbWFwMzYzMF90b2dnbGVfbDJfb25fcmVzdG9yZSh2b2lkKSB7IH0KKyNlbmRpZgkJLyogZGVmaW5lZChDT05GSUdfUE0pICYmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpICovCisKKyNpZmRlZiBDT05GSUdfT01BUF9TTUFSVFJFRkxFWAorZXh0ZXJuIGludCBvbWFwX2RldmluaXRfc21hcnRyZWZsZXgodm9pZCk7CitleHRlcm4gdm9pZCBvbWFwX2VuYWJsZV9zbWFydHJlZmxleF9vbl9pbml0KHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IG9tYXBfZGV2aW5pdF9zbWFydHJlZmxleCh2b2lkKQoreworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcF9lbmFibGVfc21hcnRyZWZsZXhfb25faW5pdCh2b2lkKSB7fQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVFdMNDAzMF9DT1JFCitleHRlcm4gaW50IG9tYXAzX3R3bF9pbml0KHZvaWQpOworZXh0ZXJuIGludCBvbWFwNF90d2xfaW5pdCh2b2lkKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBvbWFwM190d2xfaW5pdCh2b2lkKQoreworCXJldHVybiAtRUlOVkFMOworfQorc3RhdGljIGlubGluZSBpbnQgb21hcDRfdHdsX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gLUVJTlZBTDsKK30KKyNlbmRpZgorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG0yNHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BtMjR4eC5jCmluZGV4IGFhZWVhNDkuLmRhYzJkMWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG0yNHh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTI0eHguYwpAQCAtNDIsMTYgKzQyLDE2IEBACiAjaW5jbHVkZSA8cGxhdC9kbWEuaD4KICNpbmNsdWRlIDxwbGF0L2JvYXJkLmg+CiAKLSNpbmNsdWRlICJwcm0uaCIKKyNpbmNsdWRlICJwcm0yeHh4XzN4eHguaCIKICNpbmNsdWRlICJwcm0tcmVnYml0cy0yNHh4LmgiCi0jaW5jbHVkZSAiY20uaCIKKyNpbmNsdWRlICJjbTJ4eHhfM3h4eC5oIgogI2luY2x1ZGUgImNtLXJlZ2JpdHMtMjR4eC5oIgogI2luY2x1ZGUgInNkcmMuaCIKICNpbmNsdWRlICJwbS5oIgogI2luY2x1ZGUgImNvbnRyb2wuaCIKIAotI2luY2x1ZGUgPHBsYXQvcG93ZXJkb21haW4uaD4KLSNpbmNsdWRlIDxwbGF0L2Nsb2NrZG9tYWluLmg+CisjaW5jbHVkZSAicG93ZXJkb21haW4uaCIKKyNpbmNsdWRlICJjbG9ja2RvbWFpbi5oIgogCiAjaWZkZWYgQ09ORklHX1NVU1BFTkQKIHN0YXRpYyBzdXNwZW5kX3N0YXRlX3Qgc3VzcGVuZF9zdGF0ZSA9IFBNX1NVU1BFTkRfT047CkBAIC03OSw4ICs3OSw4IEBACiB7CiAJdTMyIGYxLCBmMjsKIAotCWYxID0gY21fcmVhZF9tb2RfcmVnKENPUkVfTU9ELCBDTV9GQ0xLRU4xKTsKLQlmMiA9IGNtX3JlYWRfbW9kX3JlZyhDT1JFX01PRCwgT01BUDI0WFhfQ01fRkNMS0VOMik7CisJZjEgPSBvbWFwMl9jbV9yZWFkX21vZF9yZWcoQ09SRV9NT0QsIENNX0ZDTEtFTjEpOworCWYyID0gb21hcDJfY21fcmVhZF9tb2RfcmVnKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKTsKIAogCS8qIElnbm9yZSBVQVJUIGNsb2Nrcy4gIFRoZXNlIGFyZSBoYW5kbGVkIGJ5IFVBUlQgY29yZSAoc2VyaWFsLmMpICovCiAJZjEgJj0gfihPTUFQMjRYWF9FTl9VQVJUMV9NQVNLIHwgT01BUDI0WFhfRU5fVUFSVDJfTUFTSyk7CkBAIC0xMDUsOSArMTA1LDkgQEAKIAogCS8qIENsZWFyIG9sZCB3YWtlLXVwIGV2ZW50cyAqLwogCS8qIFJFVklTSVQ6IFRoZXNlIHdyaXRlIHRvIHJlc2VydmVkIGJpdHM/ICovCi0JcHJtX3dyaXRlX21vZF9yZWcoMHhmZmZmZmZmZiwgQ09SRV9NT0QsIFBNX1dLU1QxKTsKLQlwcm1fd3JpdGVfbW9kX3JlZygweGZmZmZmZmZmLCBDT1JFX01PRCwgT01BUDI0WFhfUE1fV0tTVDIpOwotCXBybV93cml0ZV9tb2RfcmVnKDB4ZmZmZmZmZmYsIFdLVVBfTU9ELCBQTV9XS1NUKTsKKwlvbWFwMl9wcm1fd3JpdGVfbW9kX3JlZygweGZmZmZmZmZmLCBDT1JFX01PRCwgUE1fV0tTVDEpOworCW9tYXAyX3BybV93cml0ZV9tb2RfcmVnKDB4ZmZmZmZmZmYsIENPUkVfTU9ELCBPTUFQMjRYWF9QTV9XS1NUMik7CisJb21hcDJfcHJtX3dyaXRlX21vZF9yZWcoMHhmZmZmZmZmZiwgV0tVUF9NT0QsIFBNX1dLU1QpOwogCiAJLyoKIAkgKiBTZXQgTVBVIHBvd2VyZG9tYWluJ3MgbmV4dCBwb3dlciBzdGF0ZSB0byBSRVRFTlRJT047CkBAIC0xMjAsNyArMTIwLDcgQEAKIAlsID0gb21hcF9jdHJsX3JlYWRsKE9NQVAyX0NPTlRST0xfREVWQ09ORjApIHwgT01BUDI0WFhfVVNCU1RBTkRCWUNUUkw7CiAJb21hcF9jdHJsX3dyaXRlbChsLCBPTUFQMl9DT05UUk9MX0RFVkNPTkYwKTsKIAotCW9tYXAyX2dwaW9fcHJlcGFyZV9mb3JfaWRsZShQV1JETV9QT1dFUl9SRVQpOworCW9tYXAyX2dwaW9fcHJlcGFyZV9mb3JfaWRsZSgwKTsKIAogCWlmIChvbWFwMl9wbV9kZWJ1ZykgewogCQlvbWFwMl9wbV9kdW1wKDAsIDAsIDApOwpAQCAtMTY3LDMwICsxNjcsMzAgQEAKIAljbGtfZW5hYmxlKG9zY19jayk7CiAKIAkvKiBjbGVhciBDT1JFIHdha2UtdXAgZXZlbnRzICovCi0JcHJtX3dyaXRlX21vZF9yZWcoMHhmZmZmZmZmZiwgQ09SRV9NT0QsIFBNX1dLU1QxKTsKLQlwcm1fd3JpdGVfbW9kX3JlZygweGZmZmZmZmZmLCBDT1JFX01PRCwgT01BUDI0WFhfUE1fV0tTVDIpOworCW9tYXAyX3BybV93cml0ZV9tb2RfcmVnKDB4ZmZmZmZmZmYsIENPUkVfTU9ELCBQTV9XS1NUMSk7CisJb21hcDJfcHJtX3dyaXRlX21vZF9yZWcoMHhmZmZmZmZmZiwgQ09SRV9NT0QsIE9NQVAyNFhYX1BNX1dLU1QyKTsKIAogCS8qIHdha2V1cCBkb21haW4gZXZlbnRzIC0gYml0IDE6IEdQVDEsIGJpdDUgR1BJTyAqLwotCXBybV9jbGVhcl9tb2RfcmVnX2JpdHMoMHg0IHwgMHgxLCBXS1VQX01PRCwgUE1fV0tTVCk7CisJb21hcDJfcHJtX2NsZWFyX21vZF9yZWdfYml0cygweDQgfCAweDEsIFdLVVBfTU9ELCBQTV9XS1NUKTsKIAogCS8qIE1QVSBkb21haW4gd2FrZSBldmVudHMgKi8KLQlsID0gcHJtX3JlYWRfbW9kX3JlZyhPQ1BfTU9ELCBPTUFQMl9QUkNNX0lSUVNUQVRVU19NUFVfT0ZGU0VUKTsKKwlsID0gb21hcDJfcHJtX3JlYWRfbW9kX3JlZyhPQ1BfTU9ELCBPTUFQMl9QUkNNX0lSUVNUQVRVU19NUFVfT0ZGU0VUKTsKIAlpZiAobCAmIDB4MDEpCi0JCXBybV93cml0ZV9tb2RfcmVnKDB4MDEsIE9DUF9NT0QsCisJCW9tYXAyX3BybV93cml0ZV9tb2RfcmVnKDB4MDEsIE9DUF9NT0QsCiAJCQkJICBPTUFQMl9QUkNNX0lSUVNUQVRVU19NUFVfT0ZGU0VUKTsKIAlpZiAobCAmIDB4MjApCi0JCXBybV93cml0ZV9tb2RfcmVnKDB4MjAsIE9DUF9NT0QsCisJCW9tYXAyX3BybV93cml0ZV9tb2RfcmVnKDB4MjAsIE9DUF9NT0QsCiAJCQkJICBPTUFQMl9QUkNNX0lSUVNUQVRVU19NUFVfT0ZGU0VUKTsKIAogCS8qIE1hc2sgZnV0dXJlIFBSQ00tdG8tTVBVIGludGVycnVwdHMgKi8KLQlwcm1fd3JpdGVfbW9kX3JlZygweDAsIE9DUF9NT0QsIE9NQVAyX1BSQ01fSVJRU1RBVFVTX01QVV9PRkZTRVQpOworCW9tYXAyX3BybV93cml0ZV9tb2RfcmVnKDB4MCwgT0NQX01PRCwgT01BUDJfUFJDTV9JUlFTVEFUVVNfTVBVX09GRlNFVCk7CiB9CiAKIHN0YXRpYyBpbnQgb21hcDJfaTJjX2FjdGl2ZSh2b2lkKQogewogCXUzMiBsOwogCi0JbCA9IGNtX3JlYWRfbW9kX3JlZyhDT1JFX01PRCwgQ01fRkNMS0VOMSk7CisJbCA9IG9tYXAyX2NtX3JlYWRfbW9kX3JlZyhDT1JFX01PRCwgQ01fRkNMS0VOMSk7CiAJcmV0dXJuIGwgJiAoT01BUDI0MjBfRU5fSTJDMl9NQVNLIHwgT01BUDI0MjBfRU5fSTJDMV9NQVNLKTsKIH0KIApAQCAtMjAxLDEzICsyMDEsMTMgQEAKIAl1MzIgbDsKIAogCS8qIENoZWNrIGZvciBNTUMsIFVBUlQyLCBVQVJUMSwgTWNTUEkyLCBNY1NQSTEgYW5kIERTUzEuICovCi0JbCA9IGNtX3JlYWRfbW9kX3JlZyhDT1JFX01PRCwgQ01fRkNMS0VOMSk7CisJbCA9IG9tYXAyX2NtX3JlYWRfbW9kX3JlZyhDT1JFX01PRCwgQ01fRkNMS0VOMSk7CiAJaWYgKGwgJiAoT01BUDI0MjBfRU5fTU1DX01BU0sgfCBPTUFQMjRYWF9FTl9VQVJUMl9NQVNLIHwKIAkJIE9NQVAyNFhYX0VOX1VBUlQxX01BU0sgfCBPTUFQMjRYWF9FTl9NQ1NQSTJfTUFTSyB8CiAJCSBPTUFQMjRYWF9FTl9NQ1NQSTFfTUFTSyB8IE9NQVAyNFhYX0VOX0RTUzFfTUFTSykpCiAJCXJldHVybiAwOwogCS8qIENoZWNrIGZvciBVQVJUMy4gKi8KLQlsID0gY21fcmVhZF9tb2RfcmVnKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKTsKKwlsID0gb21hcDJfY21fcmVhZF9tb2RfcmVnKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKTsKIAlpZiAobCAmIE9NQVAyNFhYX0VOX1VBUlQzX01BU0spCiAJCXJldHVybiAwOwogCWlmIChzdGlfY29uc29sZV9lbmFibGVkKQpAQCAtMjMwLDE4ICsyMzAsMTggQEAKIAkgKiBpdCBpcyBpbiByZXRlbnRpb24gbW9kZS4gKi8KIAlpZiAob21hcDJfYWxsb3dfbXB1X3JldGVudGlvbigpKSB7CiAJCS8qIFJFVklTSVQ6IFRoZXNlIHdyaXRlIHRvIHJlc2VydmVkIGJpdHM/ICovCi0JCXBybV93cml0ZV9tb2RfcmVnKDB4ZmZmZmZmZmYsIENPUkVfTU9ELCBQTV9XS1NUMSk7Ci0JCXBybV93cml0ZV9tb2RfcmVnKDB4ZmZmZmZmZmYsIENPUkVfTU9ELCBPTUFQMjRYWF9QTV9XS1NUMik7Ci0JCXBybV93cml0ZV9tb2RfcmVnKDB4ZmZmZmZmZmYsIFdLVVBfTU9ELCBQTV9XS1NUKTsKKwkJb21hcDJfcHJtX3dyaXRlX21vZF9yZWcoMHhmZmZmZmZmZiwgQ09SRV9NT0QsIFBNX1dLU1QxKTsKKwkJb21hcDJfcHJtX3dyaXRlX21vZF9yZWcoMHhmZmZmZmZmZiwgQ09SRV9NT0QsIE9NQVAyNFhYX1BNX1dLU1QyKTsKKwkJb21hcDJfcHJtX3dyaXRlX21vZF9yZWcoMHhmZmZmZmZmZiwgV0tVUF9NT0QsIFBNX1dLU1QpOwogCiAJCS8qIFRyeSB0byBlbnRlciBNUFUgcmV0ZW50aW9uICovCi0JCXBybV93cml0ZV9tb2RfcmVnKCgweDAxIDw8IE9NQVBfUE9XRVJTVEFURV9TSElGVCkgfAorCQlvbWFwMl9wcm1fd3JpdGVfbW9kX3JlZygoMHgwMSA8PCBPTUFQX1BPV0VSU1RBVEVfU0hJRlQpIHwKIAkJCQkgIE9NQVBfTE9HSUNSRVRTVEFURV9NQVNLLAogCQkJCSAgTVBVX01PRCwgT01BUDJfUE1fUFdTVENUUkwpOwogCX0gZWxzZSB7CiAJCS8qIEJsb2NrIE1QVSByZXRlbnRpb24gKi8KIAotCQlwcm1fd3JpdGVfbW9kX3JlZyhPTUFQX0xPR0lDUkVUU1RBVEVfTUFTSywgTVBVX01PRCwKKwkJb21hcDJfcHJtX3dyaXRlX21vZF9yZWcoT01BUF9MT0dJQ1JFVFNUQVRFX01BU0ssIE1QVV9NT0QsCiAJCQkJCQkgT01BUDJfUE1fUFdTVENUUkwpOwogCQlvbmx5X2lkbGUgPSAxOwogCX0KQEAgLTI5OSwxNiArMjk5LDExIEBACiAJbG9jYWxfaXJxX2VuYWJsZSgpOwogfQogCisjaWZkZWYgQ09ORklHX1NVU1BFTkQKIHN0YXRpYyBpbnQgb21hcDJfcG1fYmVnaW4oc3VzcGVuZF9zdGF0ZV90IHN0YXRlKQogewotCXN1c3BlbmRfc3RhdGUgPSBzdGF0ZTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBvbWFwMl9wbV9wcmVwYXJlKHZvaWQpCi17Ci0JLyogV2UgY2Fubm90IHNsZWVwIGluIGlkbGUgdW50aWwgd2UgaGF2ZSByZXN1bWVkICovCiAJZGlzYWJsZV9obHQoKTsKKwlzdXNwZW5kX3N0YXRlID0gc3RhdGU7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMxNiw5ICszMTEsOSBAQAogewogCXUzMiB3a2VuX3drdXAsIG1pcjE7CiAKLQl3a2VuX3drdXAgPSBwcm1fcmVhZF9tb2RfcmVnKFdLVVBfTU9ELCBQTV9XS0VOKTsKKwl3a2VuX3drdXAgPSBvbWFwMl9wcm1fcmVhZF9tb2RfcmVnKFdLVVBfTU9ELCBQTV9XS0VOKTsKIAl3a2VuX3drdXAgJj0gfk9NQVAyNFhYX0VOX0dQVDFfTUFTSzsKLQlwcm1fd3JpdGVfbW9kX3JlZyh3a2VuX3drdXAsIFdLVVBfTU9ELCBQTV9XS0VOKTsKKwlvbWFwMl9wcm1fd3JpdGVfbW9kX3JlZyh3a2VuX3drdXAsIFdLVVBfTU9ELCBQTV9XS0VOKTsKIAogCS8qIE1hc2sgR1BUMSAqLwogCW1pcjEgPSBvbWFwX3JlYWRsKDB4NDgwZmUwYTQpOwpAQCAtMzI4LDcgKzMyMyw3IEBACiAJb21hcDJfZW50ZXJfZnVsbF9yZXRlbnRpb24oKTsKIAogCW9tYXBfd3JpdGVsKG1pcjEsIDB4NDgwZmUwYTQpOwotCXBybV93cml0ZV9tb2RfcmVnKHdrZW5fd2t1cCwgV0tVUF9NT0QsIFBNX1dLRU4pOworCW9tYXAyX3BybV93cml0ZV9tb2RfcmVnKHdrZW5fd2t1cCwgV0tVUF9NT0QsIFBNX1dLRU4pOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zNDksMjQgKzM0NCwyMSBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIG9tYXAyX3BtX2ZpbmlzaCh2b2lkKQotewotCWVuYWJsZV9obHQoKTsKLX0KLQogc3RhdGljIHZvaWQgb21hcDJfcG1fZW5kKHZvaWQpCiB7CiAJc3VzcGVuZF9zdGF0ZSA9IFBNX1NVU1BFTkRfT047CisJZW5hYmxlX2hsdCgpOwogfQogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX3N1c3BlbmRfb3BzIG9tYXBfcG1fb3BzID0gewogCS5iZWdpbgkJPSBvbWFwMl9wbV9iZWdpbiwKLQkucHJlcGFyZQk9IG9tYXAyX3BtX3ByZXBhcmUsCiAJLmVudGVyCQk9IG9tYXAyX3BtX2VudGVyLAotCS5maW5pc2gJCT0gb21hcDJfcG1fZmluaXNoLAogCS5lbmQJCT0gb21hcDJfcG1fZW5kLAogCS52YWxpZAkJPSBzdXNwZW5kX3ZhbGlkX29ubHlfbWVtLAogfTsKKyNlbHNlCitzdGF0aWMgY29uc3Qgc3RydWN0IHBsYXRmb3JtX3N1c3BlbmRfb3BzIF9faW5pdGRhdGEgb21hcF9wbV9vcHM7CisjZW5kaWYgLyogQ09ORklHX1NVU1BFTkQgKi8KIAogLyogWFhYIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIHNoYXJlYWJsZSBiZXR3ZWVuIE9NQVAyeHh4IGFuZCBPTUFQMyAqLwogc3RhdGljIGludCBfX2luaXQgY2xrZG1zX3NldHVwKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0sIHZvaWQgKnVudXNlZCkKQEAgLTM4OCw3ICszODAsNyBAQAogCXN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG07CiAKIAkvKiBFbmFibGUgYXV0b2lkbGUgKi8KLQlwcm1fd3JpdGVfbW9kX3JlZyhPTUFQMjRYWF9BVVRPSURMRV9NQVNLLCBPQ1BfTU9ELAorCW9tYXAyX3BybV93cml0ZV9tb2RfcmVnKE9NQVAyNFhYX0FVVE9JRExFX01BU0ssIE9DUF9NT0QsCiAJCQkgIE9NQVAyX1BSQ01fU1lTQ09ORklHX09GRlNFVCk7CiAKIAkvKgpAQCAtNDI3LDg3ICs0MTksODcgQEAKIAljbGtkbV9hZGRfd2tkZXAobXB1X2Nsa2RtLCB3a3VwX2Nsa2RtKTsKIAogCS8qIEVuYWJsZSBjbG9jayBhdXRvaWRsZSBmb3IgYWxsIGRvbWFpbnMgKi8KLQljbV93cml0ZV9tb2RfcmVnKE9NQVAyNFhYX0FVVE9fQ0FNX01BU0sgfAotCQkJIE9NQVAyNFhYX0FVVE9fTUFJTEJPWEVTX01BU0sgfAotCQkJIE9NQVAyNFhYX0FVVE9fV0RUNF9NQVNLIHwKLQkJCSBPTUFQMjQyMF9BVVRPX1dEVDNfTUFTSyB8Ci0JCQkgT01BUDI0WFhfQVVUT19NU1BST19NQVNLIHwKLQkJCSBPTUFQMjQyMF9BVVRPX01NQ19NQVNLIHwKLQkJCSBPTUFQMjRYWF9BVVRPX0ZBQ19NQVNLIHwKLQkJCSBPTUFQMjQyMF9BVVRPX0VBQ19NQVNLIHwKLQkJCSBPTUFQMjRYWF9BVVRPX0hEUV9NQVNLIHwKLQkJCSBPTUFQMjRYWF9BVVRPX1VBUlQyX01BU0sgfAotCQkJIE9NQVAyNFhYX0FVVE9fVUFSVDFfTUFTSyB8Ci0JCQkgT01BUDI0WFhfQVVUT19JMkMyX01BU0sgfAotCQkJIE9NQVAyNFhYX0FVVE9fSTJDMV9NQVNLIHwKLQkJCSBPTUFQMjRYWF9BVVRPX01DU1BJMl9NQVNLIHwKLQkJCSBPTUFQMjRYWF9BVVRPX01DU1BJMV9NQVNLIHwKLQkJCSBPTUFQMjRYWF9BVVRPX01DQlNQMl9NQVNLIHwKLQkJCSBPTUFQMjRYWF9BVVRPX01DQlNQMV9NQVNLIHwKLQkJCSBPTUFQMjRYWF9BVVRPX0dQVDEyX01BU0sgfAotCQkJIE9NQVAyNFhYX0FVVE9fR1BUMTFfTUFTSyB8Ci0JCQkgT01BUDI0WFhfQVVUT19HUFQxMF9NQVNLIHwKLQkJCSBPTUFQMjRYWF9BVVRPX0dQVDlfTUFTSyB8Ci0JCQkgT01BUDI0WFhfQVVUT19HUFQ4X01BU0sgfAotCQkJIE9NQVAyNFhYX0FVVE9fR1BUN19NQVNLIHwKLQkJCSBPTUFQMjRYWF9BVVRPX0dQVDZfTUFTSyB8Ci0JCQkgT01BUDI0WFhfQVVUT19HUFQ1X01BU0sgfAotCQkJIE9NQVAyNFhYX0FVVE9fR1BUNF9NQVNLIHwKLQkJCSBPTUFQMjRYWF9BVVRPX0dQVDNfTUFTSyB8Ci0JCQkgT01BUDI0WFhfQVVUT19HUFQyX01BU0sgfAotCQkJIE9NQVAyNDIwX0FVVE9fVkxZTlFfTUFTSyB8Ci0JCQkgT01BUDI0WFhfQVVUT19EU1NfTUFTSywKLQkJCSBDT1JFX01PRCwgQ01fQVVUT0lETEUxKTsKLQljbV93cml0ZV9tb2RfcmVnKE9NQVAyNFhYX0FVVE9fVUFSVDNfTUFTSyB8Ci0JCQkgT01BUDI0WFhfQVVUT19TU0lfTUFTSyB8Ci0JCQkgT01BUDI0WFhfQVVUT19VU0JfTUFTSywKLQkJCSBDT1JFX01PRCwgQ01fQVVUT0lETEUyKTsKLQljbV93cml0ZV9tb2RfcmVnKE9NQVAyNFhYX0FVVE9fU0RSQ19NQVNLIHwKLQkJCSBPTUFQMjRYWF9BVVRPX0dQTUNfTUFTSyB8Ci0JCQkgT01BUDI0WFhfQVVUT19TRE1BX01BU0ssCi0JCQkgQ09SRV9NT0QsIENNX0FVVE9JRExFMyk7Ci0JY21fd3JpdGVfbW9kX3JlZyhPTUFQMjRYWF9BVVRPX1BLQV9NQVNLIHwKLQkJCSBPTUFQMjRYWF9BVVRPX0FFU19NQVNLIHwKLQkJCSBPTUFQMjRYWF9BVVRPX1JOR19NQVNLIHwKLQkJCSBPTUFQMjRYWF9BVVRPX1NIQV9NQVNLIHwKLQkJCSBPTUFQMjRYWF9BVVRPX0RFU19NQVNLLAotCQkJIENPUkVfTU9ELCBPTUFQMjRYWF9DTV9BVVRPSURMRTQpOworCW9tYXAyX2NtX3dyaXRlX21vZF9yZWcoT01BUDI0WFhfQVVUT19DQU1fTUFTSyB8CisJCQkgICAgICAgT01BUDI0WFhfQVVUT19NQUlMQk9YRVNfTUFTSyB8CisJCQkgICAgICAgT01BUDI0WFhfQVVUT19XRFQ0X01BU0sgfAorCQkJICAgICAgIE9NQVAyNDIwX0FVVE9fV0RUM19NQVNLIHwKKwkJCSAgICAgICBPTUFQMjRYWF9BVVRPX01TUFJPX01BU0sgfAorCQkJICAgICAgIE9NQVAyNDIwX0FVVE9fTU1DX01BU0sgfAorCQkJICAgICAgIE9NQVAyNFhYX0FVVE9fRkFDX01BU0sgfAorCQkJICAgICAgIE9NQVAyNDIwX0FVVE9fRUFDX01BU0sgfAorCQkJICAgICAgIE9NQVAyNFhYX0FVVE9fSERRX01BU0sgfAorCQkJICAgICAgIE9NQVAyNFhYX0FVVE9fVUFSVDJfTUFTSyB8CisJCQkgICAgICAgT01BUDI0WFhfQVVUT19VQVJUMV9NQVNLIHwKKwkJCSAgICAgICBPTUFQMjRYWF9BVVRPX0kyQzJfTUFTSyB8CisJCQkgICAgICAgT01BUDI0WFhfQVVUT19JMkMxX01BU0sgfAorCQkJICAgICAgIE9NQVAyNFhYX0FVVE9fTUNTUEkyX01BU0sgfAorCQkJICAgICAgIE9NQVAyNFhYX0FVVE9fTUNTUEkxX01BU0sgfAorCQkJICAgICAgIE9NQVAyNFhYX0FVVE9fTUNCU1AyX01BU0sgfAorCQkJICAgICAgIE9NQVAyNFhYX0FVVE9fTUNCU1AxX01BU0sgfAorCQkJICAgICAgIE9NQVAyNFhYX0FVVE9fR1BUMTJfTUFTSyB8CisJCQkgICAgICAgT01BUDI0WFhfQVVUT19HUFQxMV9NQVNLIHwKKwkJCSAgICAgICBPTUFQMjRYWF9BVVRPX0dQVDEwX01BU0sgfAorCQkJICAgICAgIE9NQVAyNFhYX0FVVE9fR1BUOV9NQVNLIHwKKwkJCSAgICAgICBPTUFQMjRYWF9BVVRPX0dQVDhfTUFTSyB8CisJCQkgICAgICAgT01BUDI0WFhfQVVUT19HUFQ3X01BU0sgfAorCQkJICAgICAgIE9NQVAyNFhYX0FVVE9fR1BUNl9NQVNLIHwKKwkJCSAgICAgICBPTUFQMjRYWF9BVVRPX0dQVDVfTUFTSyB8CisJCQkgICAgICAgT01BUDI0WFhfQVVUT19HUFQ0X01BU0sgfAorCQkJICAgICAgIE9NQVAyNFhYX0FVVE9fR1BUM19NQVNLIHwKKwkJCSAgICAgICBPTUFQMjRYWF9BVVRPX0dQVDJfTUFTSyB8CisJCQkgICAgICAgT01BUDI0MjBfQVVUT19WTFlOUV9NQVNLIHwKKwkJCSAgICAgICBPTUFQMjRYWF9BVVRPX0RTU19NQVNLLAorCQkJICAgICAgIENPUkVfTU9ELCBDTV9BVVRPSURMRTEpOworCW9tYXAyX2NtX3dyaXRlX21vZF9yZWcoT01BUDI0WFhfQVVUT19VQVJUM19NQVNLIHwKKwkJCSAgICAgICBPTUFQMjRYWF9BVVRPX1NTSV9NQVNLIHwKKwkJCSAgICAgICBPTUFQMjRYWF9BVVRPX1VTQl9NQVNLLAorCQkJICAgICAgIENPUkVfTU9ELCBDTV9BVVRPSURMRTIpOworCW9tYXAyX2NtX3dyaXRlX21vZF9yZWcoT01BUDI0WFhfQVVUT19TRFJDX01BU0sgfAorCQkJICAgICAgIE9NQVAyNFhYX0FVVE9fR1BNQ19NQVNLIHwKKwkJCSAgICAgICBPTUFQMjRYWF9BVVRPX1NETUFfTUFTSywKKwkJCSAgICAgICBDT1JFX01PRCwgQ01fQVVUT0lETEUzKTsKKwlvbWFwMl9jbV93cml0ZV9tb2RfcmVnKE9NQVAyNFhYX0FVVE9fUEtBX01BU0sgfAorCQkJICAgICAgIE9NQVAyNFhYX0FVVE9fQUVTX01BU0sgfAorCQkJICAgICAgIE9NQVAyNFhYX0FVVE9fUk5HX01BU0sgfAorCQkJICAgICAgIE9NQVAyNFhYX0FVVE9fU0hBX01BU0sgfAorCQkJICAgICAgIE9NQVAyNFhYX0FVVE9fREVTX01BU0ssCisJCQkgICAgICAgQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0FVVE9JRExFNCk7CiAKLQljbV93cml0ZV9tb2RfcmVnKE9NQVAyNDIwX0FVVE9fRFNQX0lQSV9NQVNLLCBPTUFQMjRYWF9EU1BfTU9ELAotCQkJIENNX0FVVE9JRExFKTsKKwlvbWFwMl9jbV93cml0ZV9tb2RfcmVnKE9NQVAyNDIwX0FVVE9fRFNQX0lQSV9NQVNLLCBPTUFQMjRYWF9EU1BfTU9ELAorCQkJICAgICAgIENNX0FVVE9JRExFKTsKIAogCS8qIFB1dCBEUExMIGFuZCBib3RoIEFQTExzIGludG8gYXV0b2lkbGUgbW9kZSAqLwotCWNtX3dyaXRlX21vZF9yZWcoKDB4MDMgPDwgT01BUDI0WFhfQVVUT19EUExMX1NISUZUKSB8Ci0JCQkgKDB4MDMgPDwgT01BUDI0WFhfQVVUT185Nk1fU0hJRlQpIHwKLQkJCSAoMHgwMyA8PCBPTUFQMjRYWF9BVVRPXzU0TV9TSElGVCksCi0JCQkgUExMX01PRCwgQ01fQVVUT0lETEUpOworCW9tYXAyX2NtX3dyaXRlX21vZF9yZWcoKDB4MDMgPDwgT01BUDI0WFhfQVVUT19EUExMX1NISUZUKSB8CisJCQkgICAgICAgKDB4MDMgPDwgT01BUDI0WFhfQVVUT185Nk1fU0hJRlQpIHwKKwkJCSAgICAgICAoMHgwMyA8PCBPTUFQMjRYWF9BVVRPXzU0TV9TSElGVCksCisJCQkgICAgICAgUExMX01PRCwgQ01fQVVUT0lETEUpOwogCi0JY21fd3JpdGVfbW9kX3JlZyhPTUFQMjRYWF9BVVRPX09NQVBDVFJMX01BU0sgfAotCQkJIE9NQVAyNFhYX0FVVE9fV0RUMV9NQVNLIHwKLQkJCSBPTUFQMjRYWF9BVVRPX01QVV9XRFRfTUFTSyB8Ci0JCQkgT01BUDI0WFhfQVVUT19HUElPU19NQVNLIHwKLQkJCSBPTUFQMjRYWF9BVVRPXzMyS1NZTkNfTUFTSyB8Ci0JCQkgT01BUDI0WFhfQVVUT19HUFQxX01BU0ssCi0JCQkgV0tVUF9NT0QsIENNX0FVVE9JRExFKTsKKwlvbWFwMl9jbV93cml0ZV9tb2RfcmVnKE9NQVAyNFhYX0FVVE9fT01BUENUUkxfTUFTSyB8CisJCQkgICAgICAgT01BUDI0WFhfQVVUT19XRFQxX01BU0sgfAorCQkJICAgICAgIE9NQVAyNFhYX0FVVE9fTVBVX1dEVF9NQVNLIHwKKwkJCSAgICAgICBPTUFQMjRYWF9BVVRPX0dQSU9TX01BU0sgfAorCQkJICAgICAgIE9NQVAyNFhYX0FVVE9fMzJLU1lOQ19NQVNLIHwKKwkJCSAgICAgICBPTUFQMjRYWF9BVVRPX0dQVDFfTUFTSywKKwkJCSAgICAgICBXS1VQX01PRCwgQ01fQVVUT0lETEUpOwogCiAJLyogUkVWSVNJVDogQ29uZmlndXJlIG51bWJlciBvZiAzMiBrSHogY2xvY2sgY3ljbGVzIGZvciBzeXNfY2xrCiAJICogc3RhYmlsaXNhdGlvbiAqLwotCXBybV93cml0ZV9tb2RfcmVnKDE1IDw8IE9NQVBfU0VUVVBfVElNRV9TSElGVCwgT01BUDI0WFhfR1JfTU9ELAotCQkJICBPTUFQMl9QUkNNX0NMS1NTRVRVUF9PRkZTRVQpOworCW9tYXAyX3BybV93cml0ZV9tb2RfcmVnKDE1IDw8IE9NQVBfU0VUVVBfVElNRV9TSElGVCwgT01BUDI0WFhfR1JfTU9ELAorCQkJCU9NQVAyX1BSQ01fQ0xLU1NFVFVQX09GRlNFVCk7CiAKIAkvKiBDb25maWd1cmUgYXV0b21hdGljIHZvbHRhZ2UgdHJhbnNpdGlvbiAqLwotCXBybV93cml0ZV9tb2RfcmVnKDIgPDwgT01BUF9TRVRVUF9USU1FX1NISUZULCBPTUFQMjRYWF9HUl9NT0QsCi0JCQkgIE9NQVAyX1BSQ01fVk9MVFNFVFVQX09GRlNFVCk7Ci0JcHJtX3dyaXRlX21vZF9yZWcoT01BUDI0WFhfQVVUT19FWFRWT0xUX01BU0sgfAotCQkJICAoMHgxIDw8IE9NQVAyNFhYX1NFVE9GRl9MRVZFTF9TSElGVCkgfAotCQkJICBPTUFQMjRYWF9NRU1SRVRDVFJMX01BU0sgfAotCQkJICAoMHgxIDw8IE9NQVAyNFhYX1NFVFJFVF9MRVZFTF9TSElGVCkgfAotCQkJICAoMHgwIDw8IE9NQVAyNFhYX1ZPTFRfTEVWRUxfU0hJRlQpLAotCQkJICBPTUFQMjRYWF9HUl9NT0QsIE9NQVAyX1BSQ01fVk9MVENUUkxfT0ZGU0VUKTsKKwlvbWFwMl9wcm1fd3JpdGVfbW9kX3JlZygyIDw8IE9NQVBfU0VUVVBfVElNRV9TSElGVCwgT01BUDI0WFhfR1JfTU9ELAorCQkJCU9NQVAyX1BSQ01fVk9MVFNFVFVQX09GRlNFVCk7CisJb21hcDJfcHJtX3dyaXRlX21vZF9yZWcoT01BUDI0WFhfQVVUT19FWFRWT0xUX01BU0sgfAorCQkJCSgweDEgPDwgT01BUDI0WFhfU0VUT0ZGX0xFVkVMX1NISUZUKSB8CisJCQkJT01BUDI0WFhfTUVNUkVUQ1RSTF9NQVNLIHwKKwkJCQkoMHgxIDw8IE9NQVAyNFhYX1NFVFJFVF9MRVZFTF9TSElGVCkgfAorCQkJCSgweDAgPDwgT01BUDI0WFhfVk9MVF9MRVZFTF9TSElGVCksCisJCQkJT01BUDI0WFhfR1JfTU9ELCBPTUFQMl9QUkNNX1ZPTFRDVFJMX09GRlNFVCk7CiAKIAkvKiBFbmFibGUgd2FrZS11cCBldmVudHMgKi8KLQlwcm1fd3JpdGVfbW9kX3JlZyhPTUFQMjRYWF9FTl9HUElPU19NQVNLIHwgT01BUDI0WFhfRU5fR1BUMV9NQVNLLAotCQkJICBXS1VQX01PRCwgUE1fV0tFTik7CisJb21hcDJfcHJtX3dyaXRlX21vZF9yZWcoT01BUDI0WFhfRU5fR1BJT1NfTUFTSyB8IE9NQVAyNFhYX0VOX0dQVDFfTUFTSywKKwkJCQlXS1VQX01PRCwgUE1fV0tFTik7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IG9tYXAyX3BtX2luaXQodm9pZCkKQEAgLTUxOCw3ICs1MTAsNyBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAogCXByaW50ayhLRVJOX0lORk8gIlBvd2VyIE1hbmFnZW1lbnQgZm9yIE9NQVAyIGluaXRpYWxpemluZ1xuIik7Ci0JbCA9IHBybV9yZWFkX21vZF9yZWcoT0NQX01PRCwgT01BUDJfUFJDTV9SRVZJU0lPTl9PRkZTRVQpOworCWwgPSBvbWFwMl9wcm1fcmVhZF9tb2RfcmVnKE9DUF9NT0QsIE9NQVAyX1BSQ01fUkVWSVNJT05fT0ZGU0VUKTsKIAlwcmludGsoS0VSTl9JTkZPICJQUkNNIHJldmlzaW9uICVkLiVkXG4iLCAobCA+PiA0KSAmIDB4MGYsIGwgJiAweDBmKTsKIAogCS8qIExvb2sgdXAgaW1wb3J0YW50IHBvd2VyZG9tYWlucyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTM0eHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG0zNHh4LmMKaW5kZXggNjQ4YjhjNS4uNWIzMjNmMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTM0eHguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzR4eC5jCkBAIC0zMSw4ICszMSw4IEBACiAjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgogCiAjaW5jbHVkZSA8cGxhdC9zcmFtLmg+Ci0jaW5jbHVkZSA8cGxhdC9jbG9ja2RvbWFpbi5oPgotI2luY2x1ZGUgPHBsYXQvcG93ZXJkb21haW4uaD4KKyNpbmNsdWRlICJjbG9ja2RvbWFpbi5oIgorI2luY2x1ZGUgInBvd2VyZG9tYWluLmgiCiAjaW5jbHVkZSA8cGxhdC9zZXJpYWwuaD4KICNpbmNsdWRlIDxwbGF0L3NkcmMuaD4KICNpbmNsdWRlIDxwbGF0L3ByY20uaD4KQEAgLTQxLDExICs0MSwxMSBAQAogCiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAKLSNpbmNsdWRlICJjbS5oIgorI2luY2x1ZGUgImNtMnh4eF8zeHh4LmgiCiAjaW5jbHVkZSAiY20tcmVnYml0cy0zNHh4LmgiCiAjaW5jbHVkZSAicHJtLXJlZ2JpdHMtMzR4eC5oIgogCi0jaW5jbHVkZSAicHJtLmgiCisjaW5jbHVkZSAicHJtMnh4eF8zeHh4LmgiCiAjaW5jbHVkZSAicG0uaCIKICNpbmNsdWRlICJzZHJjLmgiCiAjaW5jbHVkZSAiY29udHJvbC5oIgpAQCAtNjgsNiArNjgsOSBAQAogI2RlZmluZSBPTUFQMzQzWF9UQUJMRV9WQUxVRV9PRkZTRVQJICAgMHhjMAogI2RlZmluZSBPTUFQMzQzWF9DT05UUk9MX1JFR19WQUxVRV9PRkZTRVQgIDB4YzgKIAorLyogcG0zNHh4IGVycmF0YSBkZWZpbmVkIGluIHBtLmggKi8KK3UxNiBwbTM0eHhfZXJyYXRhOworCiBzdHJ1Y3QgcG93ZXJfc3RhdGUgewogCXN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG07CiAJdTMyIG5leHRfc3RhdGU7CkBAIC0xMDIsMTIgKzEwNSwxMiBAQAogCWludCB0aW1lb3V0ID0gMDsKIAogCWlmIChvbWFwX3JldigpID49IE9NQVAzNDMwX1JFVl9FUzNfMSkgewotCQlwcm1fc2V0X21vZF9yZWdfYml0cyhPTUFQMzQzMF9FTl9JT19DSEFJTl9NQVNLLCBXS1VQX01PRCwKKwkJb21hcDJfcHJtX3NldF9tb2RfcmVnX2JpdHMoT01BUDM0MzBfRU5fSU9fQ0hBSU5fTUFTSywgV0tVUF9NT0QsCiAJCQkJICAgICBQTV9XS0VOKTsKIAkJLyogRG8gYSByZWFkYmFjayB0byBhc3N1cmUgd3JpdGUgaGFzIGJlZW4gZG9uZSAqLwotCQlwcm1fcmVhZF9tb2RfcmVnKFdLVVBfTU9ELCBQTV9XS0VOKTsKKwkJb21hcDJfcHJtX3JlYWRfbW9kX3JlZyhXS1VQX01PRCwgUE1fV0tFTik7CiAKLQkJd2hpbGUgKCEocHJtX3JlYWRfbW9kX3JlZyhXS1VQX01PRCwgUE1fV0tFTikgJgorCQl3aGlsZSAoIShvbWFwMl9wcm1fcmVhZF9tb2RfcmVnKFdLVVBfTU9ELCBQTV9XS0VOKSAmCiAJCQkgT01BUDM0MzBfU1RfSU9fQ0hBSU5fTUFTSykpIHsKIAkJCXRpbWVvdXQrKzsKIAkJCWlmICh0aW1lb3V0ID4gMTAwMCkgewpAQCAtMTE1LDcgKzExOCw3IEBACiAJCQkJICAgICAgICJhY3RpdmF0aW9uIGZhaWxlZC5cbiIpOwogCQkJCXJldHVybjsKIAkJCX0KLQkJCXBybV9zZXRfbW9kX3JlZ19iaXRzKE9NQVAzNDMwX1NUX0lPX0NIQUlOX01BU0ssCisJCQlvbWFwMl9wcm1fc2V0X21vZF9yZWdfYml0cyhPTUFQMzQzMF9TVF9JT19DSEFJTl9NQVNLLAogCQkJCQkgICAgIFdLVVBfTU9ELCBQTV9XS0VOKTsKIAkJfQogCX0KQEAgLTEyNCwyNiArMTI3LDE3IEBACiBzdGF0aWMgdm9pZCBvbWFwM19kaXNhYmxlX2lvX2NoYWluKHZvaWQpCiB7CiAJaWYgKG9tYXBfcmV2KCkgPj0gT01BUDM0MzBfUkVWX0VTM18xKQotCQlwcm1fY2xlYXJfbW9kX3JlZ19iaXRzKE9NQVAzNDMwX0VOX0lPX0NIQUlOX01BU0ssIFdLVVBfTU9ELAorCQlvbWFwMl9wcm1fY2xlYXJfbW9kX3JlZ19iaXRzKE9NQVAzNDMwX0VOX0lPX0NIQUlOX01BU0ssIFdLVVBfTU9ELAogCQkJCSAgICAgICBQTV9XS0VOKTsKIH0KIAogc3RhdGljIHZvaWQgb21hcDNfY29yZV9zYXZlX2NvbnRleHQodm9pZCkKIHsKLQl1MzIgY29udHJvbF9wYWRjb25mX29mZjsKLQotCS8qIFNhdmUgdGhlIHBhZGNvbmYgcmVnaXN0ZXJzICovCi0JY29udHJvbF9wYWRjb25mX29mZiA9IG9tYXBfY3RybF9yZWFkbChPTUFQMzQzWF9DT05UUk9MX1BBRENPTkZfT0ZGKTsKLQljb250cm9sX3BhZGNvbmZfb2ZmIHw9IFNUQVJUX1BBRENPTkZfU0FWRTsKLQlvbWFwX2N0cmxfd3JpdGVsKGNvbnRyb2xfcGFkY29uZl9vZmYsIE9NQVAzNDNYX0NPTlRST0xfUEFEQ09ORl9PRkYpOwotCS8qIHdhaXQgZm9yIHRoZSBzYXZlIHRvIGNvbXBsZXRlICovCi0Jd2hpbGUgKCEob21hcF9jdHJsX3JlYWRsKE9NQVAzNDNYX0NPTlRST0xfR0VORVJBTF9QVVJQT1NFX1NUQVRVUykKLQkJCSYgUEFEQ09ORl9TQVZFX0RPTkUpKQotCQl1ZGVsYXkoMSk7CisJb21hcDNfY3RybF9zYXZlX3BhZGNvbmYoKTsKIAogCS8qCiAJICogRm9yY2Ugd3JpdGUgbGFzdCBwYWQgaW50byBtZW1vcnksIGFzIHRoaXMgY2FuIGZhaWwgaW4gc29tZQotCSAqIGNhc2VzIGFjY29yZGluZyB0byBlcnJhdGFzIDEuMTU3LCAxLjE4NQorCSAqIGNhc2VzIGFjY29yZGluZyB0byBlcnJhdGEgMS4xNTcsIDEuMTg1CiAJICovCiAJb21hcF9jdHJsX3dyaXRlbChvbWFwX2N0cmxfcmVhZGwoT01BUDM0M1hfUEFEQ09ORl9FVEtfRDE0KSwKIAkJT01BUDM0M1hfQ09OVFJPTF9NRU1fV0tVUCArIDB4MmEwKTsKQEAgLTIxOCwyNyArMjEyLDI3IEBACiAJCU9NQVAzNDMwRVMyX1BNX01QVUdSUFNFTDMgOiBPTUFQMzQzMF9QTV9NUFVHUlBTRUw7CiAJaW50IGMgPSAwOwogCi0Jd2tzdCA9IHBybV9yZWFkX21vZF9yZWcobW9kdWxlLCB3a3N0X29mZik7Ci0Jd2tzdCAmPSBwcm1fcmVhZF9tb2RfcmVnKG1vZHVsZSwgZ3Jwc2VsX29mZik7CisJd2tzdCA9IG9tYXAyX3BybV9yZWFkX21vZF9yZWcobW9kdWxlLCB3a3N0X29mZik7CisJd2tzdCAmPSBvbWFwMl9wcm1fcmVhZF9tb2RfcmVnKG1vZHVsZSwgZ3Jwc2VsX29mZik7CiAJaWYgKHdrc3QpIHsKLQkJaWNsayA9IGNtX3JlYWRfbW9kX3JlZyhtb2R1bGUsIGljbGtfb2ZmKTsKLQkJZmNsayA9IGNtX3JlYWRfbW9kX3JlZyhtb2R1bGUsIGZjbGtfb2ZmKTsKKwkJaWNsayA9IG9tYXAyX2NtX3JlYWRfbW9kX3JlZyhtb2R1bGUsIGljbGtfb2ZmKTsKKwkJZmNsayA9IG9tYXAyX2NtX3JlYWRfbW9kX3JlZyhtb2R1bGUsIGZjbGtfb2ZmKTsKIAkJd2hpbGUgKHdrc3QpIHsKIAkJCWNsa2VuID0gd2tzdDsKLQkJCWNtX3NldF9tb2RfcmVnX2JpdHMoY2xrZW4sIG1vZHVsZSwgaWNsa19vZmYpOworCQkJb21hcDJfY21fc2V0X21vZF9yZWdfYml0cyhjbGtlbiwgbW9kdWxlLCBpY2xrX29mZik7CiAJCQkvKgogCQkJICogRm9yIFVTQkhPU1QsIHdlIGRvbid0IGtub3cgd2hldGhlciBIT1NUMSBvcgogCQkJICogSE9TVDIgd29rZSB1cyB1cCwgc28gZW5hYmxlIGJvdGggZi1jbG9ja3MKIAkJCSAqLwogCQkJaWYgKG1vZHVsZSA9PSBPTUFQMzQzMEVTMl9VU0JIT1NUX01PRCkKIAkJCQljbGtlbiB8PSAxIDw8IE9NQVAzNDMwRVMyX0VOX1VTQkhPU1QyX1NISUZUOwotCQkJY21fc2V0X21vZF9yZWdfYml0cyhjbGtlbiwgbW9kdWxlLCBmY2xrX29mZik7Ci0JCQlwcm1fd3JpdGVfbW9kX3JlZyh3a3N0LCBtb2R1bGUsIHdrc3Rfb2ZmKTsKLQkJCXdrc3QgPSBwcm1fcmVhZF9tb2RfcmVnKG1vZHVsZSwgd2tzdF9vZmYpOworCQkJb21hcDJfY21fc2V0X21vZF9yZWdfYml0cyhjbGtlbiwgbW9kdWxlLCBmY2xrX29mZik7CisJCQlvbWFwMl9wcm1fd3JpdGVfbW9kX3JlZyh3a3N0LCBtb2R1bGUsIHdrc3Rfb2ZmKTsKKwkJCXdrc3QgPSBvbWFwMl9wcm1fcmVhZF9tb2RfcmVnKG1vZHVsZSwgd2tzdF9vZmYpOwogCQkJYysrOwogCQl9Ci0JCWNtX3dyaXRlX21vZF9yZWcoaWNsaywgbW9kdWxlLCBpY2xrX29mZik7Ci0JCWNtX3dyaXRlX21vZF9yZWcoZmNsaywgbW9kdWxlLCBmY2xrX29mZik7CisJCW9tYXAyX2NtX3dyaXRlX21vZF9yZWcoaWNsaywgbW9kdWxlLCBpY2xrX29mZik7CisJCW9tYXAyX2NtX3dyaXRlX21vZF9yZWcoZmNsaywgbW9kdWxlLCBmY2xrX29mZik7CiAJfQogCiAJcmV0dXJuIGM7CkBAIC0yODEsOSArMjc1LDkgQEAKIAl1MzIgaXJxZW5hYmxlX21wdSwgaXJxc3RhdHVzX21wdTsKIAlpbnQgYyA9IDA7CiAKLQlpcnFlbmFibGVfbXB1ID0gcHJtX3JlYWRfbW9kX3JlZyhPQ1BfTU9ELAorCWlycWVuYWJsZV9tcHUgPSBvbWFwMl9wcm1fcmVhZF9tb2RfcmVnKE9DUF9NT0QsCiAJCQkJCSBPTUFQM19QUk1fSVJRRU5BQkxFX01QVV9PRkZTRVQpOwotCWlycXN0YXR1c19tcHUgPSBwcm1fcmVhZF9tb2RfcmVnKE9DUF9NT0QsCisJaXJxc3RhdHVzX21wdSA9IG9tYXAyX3BybV9yZWFkX21vZF9yZWcoT0NQX01PRCwKIAkJCQkJIE9NQVAzX1BSTV9JUlFTVEFUVVNfTVBVX09GRlNFVCk7CiAJaXJxc3RhdHVzX21wdSAmPSBpcnFlbmFibGVfbXB1OwogCkBAIC0zMDQsMTAgKzI5OCwxMCBAQAogCQkJICAgICAibm8gY29kZSB0byBoYW5kbGUgaXQgKCUwOHgpXG4iLCBpcnFzdGF0dXNfbXB1KTsKIAkJfQogCi0JCXBybV93cml0ZV9tb2RfcmVnKGlycXN0YXR1c19tcHUsIE9DUF9NT0QsCisJCW9tYXAyX3BybV93cml0ZV9tb2RfcmVnKGlycXN0YXR1c19tcHUsIE9DUF9NT0QsCiAJCQkJCU9NQVAzX1BSTV9JUlFTVEFUVVNfTVBVX09GRlNFVCk7CiAKLQkJaXJxc3RhdHVzX21wdSA9IHBybV9yZWFkX21vZF9yZWcoT0NQX01PRCwKKwkJaXJxc3RhdHVzX21wdSA9IG9tYXAyX3BybV9yZWFkX21vZF9yZWcoT0NQX01PRCwKIAkJCQkJT01BUDNfUFJNX0lSUVNUQVRVU19NUFVfT0ZGU0VUKTsKIAkJaXJxc3RhdHVzX21wdSAmPSBpcnFlbmFibGVfbXB1OwogCkBAIC0zNTcsNiArMzUxLDcgQEAKIAlpbnQgbXB1X25leHRfc3RhdGUgPSBQV1JETV9QT1dFUl9PTjsKIAlpbnQgcGVyX25leHRfc3RhdGUgPSBQV1JETV9QT1dFUl9PTjsKIAlpbnQgY29yZV9uZXh0X3N0YXRlID0gUFdSRE1fUE9XRVJfT047CisJaW50IHBlcl9nb2luZ19vZmY7CiAJaW50IGNvcmVfcHJldl9zdGF0ZSwgcGVyX3ByZXZfc3RhdGU7CiAJdTMyIHNkcmNfcHdyID0gMDsKIApAQCAtMzk1LDcgKzM5MCw3IEBACiAJaWYgKG9tYXAzX2hhc19pb193YWtldXAoKSAmJgogCSAgICAocGVyX25leHRfc3RhdGUgPCBQV1JETV9QT1dFUl9PTiB8fAogCSAgICAgY29yZV9uZXh0X3N0YXRlIDwgUFdSRE1fUE9XRVJfT04pKSB7Ci0JCXBybV9zZXRfbW9kX3JlZ19iaXRzKE9NQVAzNDMwX0VOX0lPX01BU0ssIFdLVVBfTU9ELCBQTV9XS0VOKTsKKwkJb21hcDJfcHJtX3NldF9tb2RfcmVnX2JpdHMoT01BUDM0MzBfRU5fSU9fTUFTSywgV0tVUF9NT0QsIFBNX1dLRU4pOwogCQlvbWFwM19lbmFibGVfaW9fY2hhaW4oKTsKIAl9CiAKQEAgLTQwOCw5ICs0MDMsMTAgQEAKIAogCS8qIFBFUiAqLwogCWlmIChwZXJfbmV4dF9zdGF0ZSA8IFBXUkRNX1BPV0VSX09OKSB7CisJCXBlcl9nb2luZ19vZmYgPSAocGVyX25leHRfc3RhdGUgPT0gUFdSRE1fUE9XRVJfT0ZGKSA/IDEgOiAwOwogCQlvbWFwX3VhcnRfcHJlcGFyZV9pZGxlKDIpOwogCQlvbWFwX3VhcnRfcHJlcGFyZV9pZGxlKDMpOwotCQlvbWFwMl9ncGlvX3ByZXBhcmVfZm9yX2lkbGUocGVyX25leHRfc3RhdGUpOworCQlvbWFwMl9ncGlvX3ByZXBhcmVfZm9yX2lkbGUocGVyX2dvaW5nX29mZik7CiAJCWlmIChwZXJfbmV4dF9zdGF0ZSA9PSBQV1JETV9QT1dFUl9PRkYpCiAJCQkJb21hcDNfcGVyX3NhdmVfY29udGV4dCgpOwogCX0KQEAgLTQyMSw3ICs0MTcsNyBAQAogCQlvbWFwX3VhcnRfcHJlcGFyZV9pZGxlKDEpOwogCQlpZiAoY29yZV9uZXh0X3N0YXRlID09IFBXUkRNX1BPV0VSX09GRikgewogCQkJb21hcDNfY29yZV9zYXZlX2NvbnRleHQoKTsKLQkJCW9tYXAzX3ByY21fc2F2ZV9jb250ZXh0KCk7CisJCQlvbWFwM19jbV9zYXZlX2NvbnRleHQoKTsKIAkJfQogCX0KIApAQCAtNDMwLDcgKzQyNiw3IEBACiAJLyoKIAkqIE9uIEVNVS9IUyBkZXZpY2VzIFJPTSBjb2RlIHJlc3RvcmVzIGEgU1JEQyB2YWx1ZQogCSogZnJvbSBzY3JhdGNocGFkIHdoaWNoIGhhcyBhdXRvbWF0aWMgc2VsZiByZWZyZXNoIG9uIHRpbWVvdXQKLQkqIG9mIEFVVE9fQ05UID0gMSBlbmFibGVkLiBUaGlzIHRha2VzIGNhcmUgb2YgZXJyYXRhIDEuMTQyLgorCSogb2YgQVVUT19DTlQgPSAxIGVuYWJsZWQuIFRoaXMgdGFrZXMgY2FyZSBvZiBlcnJhdHVtIElEIGk0NDMuCiAJKiBIZW5jZSBzdG9yZS9yZXN0b3JlIHRoZSBTRFJDX1BPV0VSIHJlZ2lzdGVyIGhlcmUuCiAJKi8KIAlpZiAob21hcF9yZXYoKSA+PSBPTUFQMzQzMF9SRVZfRVMzXzAgJiYKQEAgLTQ2MSwxNCArNDU3LDE0IEBACiAJCWNvcmVfcHJldl9zdGF0ZSA9IHB3cmRtX3JlYWRfcHJldl9wd3JzdChjb3JlX3B3cmRtKTsKIAkJaWYgKGNvcmVfcHJldl9zdGF0ZSA9PSBQV1JETV9QT1dFUl9PRkYpIHsKIAkJCW9tYXAzX2NvcmVfcmVzdG9yZV9jb250ZXh0KCk7Ci0JCQlvbWFwM19wcmNtX3Jlc3RvcmVfY29udGV4dCgpOworCQkJb21hcDNfY21fcmVzdG9yZV9jb250ZXh0KCk7CiAJCQlvbWFwM19zcmFtX3Jlc3RvcmVfY29udGV4dCgpOwogCQkJb21hcDJfc21zX3Jlc3RvcmVfY29udGV4dCgpOwogCQl9CiAJCW9tYXBfdWFydF9yZXN1bWVfaWRsZSgwKTsKIAkJb21hcF91YXJ0X3Jlc3VtZV9pZGxlKDEpOwogCQlpZiAoY29yZV9uZXh0X3N0YXRlID09IFBXUkRNX1BPV0VSX09GRikKLQkJCXBybV9jbGVhcl9tb2RfcmVnX2JpdHMoT01BUDM0MzBfQVVUT19PRkZfTUFTSywKKwkJCW9tYXAyX3BybV9jbGVhcl9tb2RfcmVnX2JpdHMoT01BUDM0MzBfQVVUT19PRkZfTUFTSywKIAkJCQkJICAgICAgIE9NQVAzNDMwX0dSX01PRCwKIAkJCQkJICAgICAgIE9NQVAzX1BSTV9WT0xUQ1RSTF9PRkZTRVQpOwogCX0KQEAgLTQ5Miw3ICs0ODgsOCBAQAogCWlmIChvbWFwM19oYXNfaW9fd2FrZXVwKCkgJiYKIAkgICAgKHBlcl9uZXh0X3N0YXRlIDwgUFdSRE1fUE9XRVJfT04gfHwKIAkgICAgIGNvcmVfbmV4dF9zdGF0ZSA8IFBXUkRNX1BPV0VSX09OKSkgewotCQlwcm1fY2xlYXJfbW9kX3JlZ19iaXRzKE9NQVAzNDMwX0VOX0lPX01BU0ssIFdLVVBfTU9ELCBQTV9XS0VOKTsKKwkJb21hcDJfcHJtX2NsZWFyX21vZF9yZWdfYml0cyhPTUFQMzQzMF9FTl9JT19NQVNLLCBXS1VQX01PRCwKKwkJCQkJICAgICBQTV9XS0VOKTsKIAkJb21hcDNfZGlzYWJsZV9pb19jaGFpbigpOwogCX0KIApAQCAtNTI5LDEyICs1MjYsNiBAQAogfQogCiAjaWZkZWYgQ09ORklHX1NVU1BFTkQKLXN0YXRpYyBpbnQgb21hcDNfcG1fcHJlcGFyZSh2b2lkKQotewotCWRpc2FibGVfaGx0KCk7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgb21hcDNfcG1fc3VzcGVuZCh2b2lkKQogewogCXN0cnVjdCBwb3dlcl9zdGF0ZSAqcHdyc3Q7CkBAIC01OTcsMTQgKzU4OCwxMCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIG9tYXAzX3BtX2ZpbmlzaCh2b2lkKQotewotCWVuYWJsZV9obHQoKTsKLX0KLQogLyogSG9va3MgdG8gZW5hYmxlIC8gZGlzYWJsZSBVQVJUIGludGVycnVwdHMgZHVyaW5nIHN1c3BlbmQgKi8KIHN0YXRpYyBpbnQgb21hcDNfcG1fYmVnaW4oc3VzcGVuZF9zdGF0ZV90IHN0YXRlKQogeworCWRpc2FibGVfaGx0KCk7CiAJc3VzcGVuZF9zdGF0ZSA9IHN0YXRlOwogCW9tYXBfdWFydF9lbmFibGVfaXJxcygwKTsKIAlyZXR1cm4gMDsKQEAgLTYxNCwxNSArNjAxLDE0IEBACiB7CiAJc3VzcGVuZF9zdGF0ZSA9IFBNX1NVU1BFTkRfT047CiAJb21hcF91YXJ0X2VuYWJsZV9pcnFzKDEpOworCWVuYWJsZV9obHQoKTsKIAlyZXR1cm47CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fc3VzcGVuZF9vcHMgb21hcF9wbV9vcHMgPSB7CiAJLmJlZ2luCQk9IG9tYXAzX3BtX2JlZ2luLAogCS5lbmQJCT0gb21hcDNfcG1fZW5kLAotCS5wcmVwYXJlCT0gb21hcDNfcG1fcHJlcGFyZSwKIAkuZW50ZXIJCT0gb21hcDNfcG1fZW50ZXIsCi0JLmZpbmlzaAkJPSBvbWFwM19wbV9maW5pc2gsCiAJLnZhbGlkCQk9IHN1c3BlbmRfdmFsaWRfb25seV9tZW0sCiB9OwogI2VuZGlmIC8qIENPTkZJR19TVVNQRU5EICovCkBAIC02NDEsMjEgKzYyNywyMSBAQAogc3RhdGljIHZvaWQgX19pbml0IG9tYXAzX2l2YV9pZGxlKHZvaWQpCiB7CiAJLyogZW5zdXJlIElWQTIgY2xvY2sgaXMgZGlzYWJsZWQgKi8KLQljbV93cml0ZV9tb2RfcmVnKDAsIE9NQVAzNDMwX0lWQTJfTU9ELCBDTV9GQ0xLRU4pOworCW9tYXAyX2NtX3dyaXRlX21vZF9yZWcoMCwgT01BUDM0MzBfSVZBMl9NT0QsIENNX0ZDTEtFTik7CiAKIAkvKiBpZiBubyBjbG9jayBhY3Rpdml0eSwgbm90aGluZyBlbHNlIHRvIGRvICovCi0JaWYgKCEoY21fcmVhZF9tb2RfcmVnKE9NQVAzNDMwX0lWQTJfTU9ELCBPTUFQMzQzMF9DTV9DTEtTVFNUKSAmCisJaWYgKCEob21hcDJfY21fcmVhZF9tb2RfcmVnKE9NQVAzNDMwX0lWQTJfTU9ELCBPTUFQMzQzMF9DTV9DTEtTVFNUKSAmCiAJICAgICAgT01BUDM0MzBfQ0xLQUNUSVZJVFlfSVZBMl9NQVNLKSkKIAkJcmV0dXJuOwogCiAJLyogUmVzZXQgSVZBMiAqLwotCXBybV93cml0ZV9tb2RfcmVnKE9NQVAzNDMwX1JTVDFfSVZBMl9NQVNLIHwKKwlvbWFwMl9wcm1fd3JpdGVfbW9kX3JlZyhPTUFQMzQzMF9SU1QxX0lWQTJfTUFTSyB8CiAJCQkgIE9NQVAzNDMwX1JTVDJfSVZBMl9NQVNLIHwKIAkJCSAgT01BUDM0MzBfUlNUM19JVkEyX01BU0ssCiAJCQkgIE9NQVAzNDMwX0lWQTJfTU9ELCBPTUFQMl9STV9SU1RDVFJMKTsKIAogCS8qIEVuYWJsZSBJVkEyIGNsb2NrICovCi0JY21fd3JpdGVfbW9kX3JlZyhPTUFQMzQzMF9DTV9GQ0xLRU5fSVZBMl9FTl9JVkEyX01BU0ssCisJb21hcDJfY21fd3JpdGVfbW9kX3JlZyhPTUFQMzQzMF9DTV9GQ0xLRU5fSVZBMl9FTl9JVkEyX01BU0ssCiAJCQkgT01BUDM0MzBfSVZBMl9NT0QsIENNX0ZDTEtFTik7CiAKIAkvKiBTZXQgSVZBMiBib290IG1vZGUgdG8gJ2lkbGUnICovCkBAIC02NjMsMTMgKzY0OSwxMyBAQAogCQkJIE9NQVAzNDNYX0NPTlRST0xfSVZBMl9CT09UTU9EKTsKIAogCS8qIFVuLXJlc2V0IElWQTIgKi8KLQlwcm1fd3JpdGVfbW9kX3JlZygwLCBPTUFQMzQzMF9JVkEyX01PRCwgT01BUDJfUk1fUlNUQ1RSTCk7CisJb21hcDJfcHJtX3dyaXRlX21vZF9yZWcoMCwgT01BUDM0MzBfSVZBMl9NT0QsIE9NQVAyX1JNX1JTVENUUkwpOwogCiAJLyogRGlzYWJsZSBJVkEyIGNsb2NrICovCi0JY21fd3JpdGVfbW9kX3JlZygwLCBPTUFQMzQzMF9JVkEyX01PRCwgQ01fRkNMS0VOKTsKKwlvbWFwMl9jbV93cml0ZV9tb2RfcmVnKDAsIE9NQVAzNDMwX0lWQTJfTU9ELCBDTV9GQ0xLRU4pOwogCiAJLyogUmVzZXQgSVZBMiAqLwotCXBybV93cml0ZV9tb2RfcmVnKE9NQVAzNDMwX1JTVDFfSVZBMl9NQVNLIHwKKwlvbWFwMl9wcm1fd3JpdGVfbW9kX3JlZyhPTUFQMzQzMF9SU1QxX0lWQTJfTUFTSyB8CiAJCQkgIE9NQVAzNDMwX1JTVDJfSVZBMl9NQVNLIHwKIAkJCSAgT01BUDM0MzBfUlNUM19JVkEyX01BU0ssCiAJCQkgIE9NQVAzNDMwX0lWQTJfTU9ELCBPTUFQMl9STV9SU1RDVFJMKTsKQEAgLTY5MywxMCArNjc5LDEwIEBACiAJb21hcF9jdHJsX3dyaXRldyhwYWRjb25mLCBPTUFQM19QQURDT05GX1NBRDJEX0lETEVBQ0spOwogCiAJLyogcmVzZXQgbW9kZW0gKi8KLQlwcm1fd3JpdGVfbW9kX3JlZyhPTUFQMzQzMF9STV9SU1RDVFJMX0NPUkVfTU9ERU1fU1dfUlNUUFdST05fTUFTSyB8CisJb21hcDJfcHJtX3dyaXRlX21vZF9yZWcoT01BUDM0MzBfUk1fUlNUQ1RSTF9DT1JFX01PREVNX1NXX1JTVFBXUk9OX01BU0sgfAogCQkJICBPTUFQMzQzMF9STV9SU1RDVFJMX0NPUkVfTU9ERU1fU1dfUlNUX01BU0ssCiAJCQkgIENPUkVfTU9ELCBPTUFQMl9STV9SU1RDVFJMKTsKLQlwcm1fd3JpdGVfbW9kX3JlZygwLCBDT1JFX01PRCwgT01BUDJfUk1fUlNUQ1RSTCk7CisJb21hcDJfcHJtX3dyaXRlX21vZF9yZWcoMCwgQ09SRV9NT0QsIE9NQVAyX1JNX1JTVENUUkwpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgcHJjbV9zZXR1cF9yZWdzKHZvaWQpCkBAIC03MTEsMjMgKzY5NywyMyBAQAogCiAJLyogWFhYIFJlc2V0IGFsbCB3a2RlcHMuIFRoaXMgc2hvdWxkIGJlIGRvbmUgd2hlbiBpbml0aWFsaXppbmcKIAkgKiBwb3dlcmRvbWFpbnMgKi8KLQlwcm1fd3JpdGVfbW9kX3JlZygwLCBPTUFQMzQzMF9JVkEyX01PRCwgUE1fV0tERVApOwotCXBybV93cml0ZV9tb2RfcmVnKDAsIE1QVV9NT0QsIFBNX1dLREVQKTsKLQlwcm1fd3JpdGVfbW9kX3JlZygwLCBPTUFQMzQzMF9EU1NfTU9ELCBQTV9XS0RFUCk7Ci0JcHJtX3dyaXRlX21vZF9yZWcoMCwgT01BUDM0MzBfTkVPTl9NT0QsIFBNX1dLREVQKTsKLQlwcm1fd3JpdGVfbW9kX3JlZygwLCBPTUFQMzQzMF9DQU1fTU9ELCBQTV9XS0RFUCk7Ci0JcHJtX3dyaXRlX21vZF9yZWcoMCwgT01BUDM0MzBfUEVSX01PRCwgUE1fV0tERVApOworCW9tYXAyX3BybV93cml0ZV9tb2RfcmVnKDAsIE9NQVAzNDMwX0lWQTJfTU9ELCBQTV9XS0RFUCk7CisJb21hcDJfcHJtX3dyaXRlX21vZF9yZWcoMCwgTVBVX01PRCwgUE1fV0tERVApOworCW9tYXAyX3BybV93cml0ZV9tb2RfcmVnKDAsIE9NQVAzNDMwX0RTU19NT0QsIFBNX1dLREVQKTsKKwlvbWFwMl9wcm1fd3JpdGVfbW9kX3JlZygwLCBPTUFQMzQzMF9ORU9OX01PRCwgUE1fV0tERVApOworCW9tYXAyX3BybV93cml0ZV9tb2RfcmVnKDAsIE9NQVAzNDMwX0NBTV9NT0QsIFBNX1dLREVQKTsKKwlvbWFwMl9wcm1fd3JpdGVfbW9kX3JlZygwLCBPTUFQMzQzMF9QRVJfTU9ELCBQTV9XS0RFUCk7CiAJaWYgKG9tYXBfcmV2KCkgPiBPTUFQMzQzMF9SRVZfRVMxXzApIHsKLQkJcHJtX3dyaXRlX21vZF9yZWcoMCwgT01BUDM0MzBFUzJfU0dYX01PRCwgUE1fV0tERVApOwotCQlwcm1fd3JpdGVfbW9kX3JlZygwLCBPTUFQMzQzMEVTMl9VU0JIT1NUX01PRCwgUE1fV0tERVApOworCQlvbWFwMl9wcm1fd3JpdGVfbW9kX3JlZygwLCBPTUFQMzQzMEVTMl9TR1hfTU9ELCBQTV9XS0RFUCk7CisJCW9tYXAyX3BybV93cml0ZV9tb2RfcmVnKDAsIE9NQVAzNDMwRVMyX1VTQkhPU1RfTU9ELCBQTV9XS0RFUCk7CiAJfSBlbHNlCi0JCXBybV93cml0ZV9tb2RfcmVnKDAsIEdGWF9NT0QsIFBNX1dLREVQKTsKKwkJb21hcDJfcHJtX3dyaXRlX21vZF9yZWcoMCwgR0ZYX01PRCwgUE1fV0tERVApOwogCiAJLyoKIAkgKiBFbmFibGUgaW50ZXJmYWNlIGNsb2NrIGF1dG9pZGxlIGZvciBhbGwgbW9kdWxlcy4KIAkgKiBOb3RlIHRoYXQgaW4gdGhlIGxvbmcgcnVuIHRoaXMgc2hvdWxkIGJlIGRvbmUgYnkgY2xvY2tmdwogCSAqLwotCWNtX3dyaXRlX21vZF9yZWcoCisJb21hcDJfY21fd3JpdGVfbW9kX3JlZygKIAkJT01BUDM0MzBfQVVUT19NT0RFTV9NQVNLIHwKIAkJT01BUDM0MzBFUzJfQVVUT19NTUMzX01BU0sgfAogCQlPTUFQMzQzMEVTMl9BVVRPX0lDUl9NQVNLIHwKQEAgLTc2MCw3ICs3NDYsNyBAQAogCQlPTUFQMzQzMF9BVVRPX1NTSV9NQVNLLAogCQlDT1JFX01PRCwgQ01fQVVUT0lETEUxKTsKIAotCWNtX3dyaXRlX21vZF9yZWcoCisJb21hcDJfY21fd3JpdGVfbW9kX3JlZygKIAkJT01BUDM0MzBfQVVUT19QS0FfTUFTSyB8CiAJCU9NQVAzNDMwX0FVVE9fQUVTMV9NQVNLIHwKIAkJT01BUDM0MzBfQVVUT19STkdfTUFTSyB8CkBAIC03NjksMTMgKzc1NSwxMyBAQAogCQlDT1JFX01PRCwgQ01fQVVUT0lETEUyKTsKIAogCWlmIChvbWFwX3JldigpID4gT01BUDM0MzBfUkVWX0VTMV8wKSB7Ci0JCWNtX3dyaXRlX21vZF9yZWcoCisJCW9tYXAyX2NtX3dyaXRlX21vZF9yZWcoCiAJCQlPTUFQMzQzMF9BVVRPX01BRDJEX01BU0sgfAogCQkJT01BUDM0MzBFUzJfQVVUT19VU0JUTExfTUFTSywKIAkJCUNPUkVfTU9ELCBDTV9BVVRPSURMRTMpOwogCX0KIAotCWNtX3dyaXRlX21vZF9yZWcoCisJb21hcDJfY21fd3JpdGVfbW9kX3JlZygKIAkJT01BUDM0MzBfQVVUT19XRFQyX01BU0sgfAogCQlPTUFQMzQzMF9BVVRPX1dEVDFfTUFTSyB8CiAJCU9NQVAzNDMwX0FVVE9fR1BJTzFfTUFTSyB8CkBAIC03ODQsMTcgKzc3MCwxNyBAQAogCQlPTUFQMzQzMF9BVVRPX0dQVDFfTUFTSywKIAkJV0tVUF9NT0QsIENNX0FVVE9JRExFKTsKIAotCWNtX3dyaXRlX21vZF9yZWcoCisJb21hcDJfY21fd3JpdGVfbW9kX3JlZygKIAkJT01BUDM0MzBfQVVUT19EU1NfTUFTSywKIAkJT01BUDM0MzBfRFNTX01PRCwKIAkJQ01fQVVUT0lETEUpOwogCi0JY21fd3JpdGVfbW9kX3JlZygKKwlvbWFwMl9jbV93cml0ZV9tb2RfcmVnKAogCQlPTUFQMzQzMF9BVVRPX0NBTV9NQVNLLAogCQlPTUFQMzQzMF9DQU1fTU9ELAogCQlDTV9BVVRPSURMRSk7CiAKLQljbV93cml0ZV9tb2RfcmVnKAorCW9tYXAyX2NtX3dyaXRlX21vZF9yZWcoCiAJCW9tYXAzNjMwX2F1dG9fdWFydDRfbWFzayB8CiAJCU9NQVAzNDMwX0FVVE9fR1BJTzZfTUFTSyB8CiAJCU9NQVAzNDMwX0FVVE9fR1BJTzVfTUFTSyB8CkBAIC04MTgsNyArODA0LDcgQEAKIAkJQ01fQVVUT0lETEUpOwogCiAJaWYgKG9tYXBfcmV2KCkgPiBPTUFQMzQzMF9SRVZfRVMxXzApIHsKLQkJY21fd3JpdGVfbW9kX3JlZygKKwkJb21hcDJfY21fd3JpdGVfbW9kX3JlZygKIAkJCU9NQVAzNDMwRVMyX0FVVE9fVVNCSE9TVF9NQVNLLAogCQkJT01BUDM0MzBFUzJfVVNCSE9TVF9NT0QsCiAJCQlDTV9BVVRPSURMRSk7CkBAIC04MzAsMTYgKzgxNiwxNiBAQAogCSAqIFNldCBhbGwgcGxscyB0byBhdXRvaWRsZS4gVGhpcyBpcyBuZWVkZWQgdW50aWwgYXV0b2lkbGUgaXMKIAkgKiBlbmFibGVkIGJ5IGNsb2NrZncKIAkgKi8KLQljbV93cml0ZV9tb2RfcmVnKDEgPDwgT01BUDM0MzBfQVVUT19JVkEyX0RQTExfU0hJRlQsCisJb21hcDJfY21fd3JpdGVfbW9kX3JlZygxIDw8IE9NQVAzNDMwX0FVVE9fSVZBMl9EUExMX1NISUZULAogCQkJIE9NQVAzNDMwX0lWQTJfTU9ELCBDTV9BVVRPSURMRTIpOwotCWNtX3dyaXRlX21vZF9yZWcoMSA8PCBPTUFQMzQzMF9BVVRPX01QVV9EUExMX1NISUZULAorCW9tYXAyX2NtX3dyaXRlX21vZF9yZWcoMSA8PCBPTUFQMzQzMF9BVVRPX01QVV9EUExMX1NISUZULAogCQkJIE1QVV9NT0QsCiAJCQkgQ01fQVVUT0lETEUyKTsKLQljbV93cml0ZV9tb2RfcmVnKCgxIDw8IE9NQVAzNDMwX0FVVE9fUEVSSVBIX0RQTExfU0hJRlQpIHwKKwlvbWFwMl9jbV93cml0ZV9tb2RfcmVnKCgxIDw8IE9NQVAzNDMwX0FVVE9fUEVSSVBIX0RQTExfU0hJRlQpIHwKIAkJCSAoMSA8PCBPTUFQMzQzMF9BVVRPX0NPUkVfRFBMTF9TSElGVCksCiAJCQkgUExMX01PRCwKIAkJCSBDTV9BVVRPSURMRSk7Ci0JY21fd3JpdGVfbW9kX3JlZygxIDw8IE9NQVAzNDMwRVMyX0FVVE9fUEVSSVBIMl9EUExMX1NISUZULAorCW9tYXAyX2NtX3dyaXRlX21vZF9yZWcoMSA8PCBPTUFQMzQzMEVTMl9BVVRPX1BFUklQSDJfRFBMTF9TSElGVCwKIAkJCSBQTExfTU9ELAogCQkJIENNX0FVVE9JRExFMik7CiAKQEAgLTg0OCwzMSArODM0LDMxIEBACiAJICogc3lzX2Nsa3JlcS4gSW4gdGhlIGxvbmcgcnVuIGNsb2NrIGZyYW1ld29yayBzaG91bGQKIAkgKiB0YWtlIGNhcmUgb2YgdGhpcy4KIAkgKi8KLQlwcm1fcm13X21vZF9yZWdfYml0cyhPTUFQX0FVVE9FWFRDTEtNT0RFX01BU0ssCisJb21hcDJfcHJtX3Jtd19tb2RfcmVnX2JpdHMoT01BUF9BVVRPRVhUQ0xLTU9ERV9NQVNLLAogCQkJICAgICAxIDw8IE9NQVBfQVVUT0VYVENMS01PREVfU0hJRlQsCiAJCQkgICAgIE9NQVAzNDMwX0dSX01PRCwKIAkJCSAgICAgT01BUDNfUFJNX0NMS1NSQ19DVFJMX09GRlNFVCk7CiAKIAkvKiBzZXR1cCB3YWt1cCBzb3VyY2UgKi8KLQlwcm1fd3JpdGVfbW9kX3JlZyhPTUFQMzQzMF9FTl9JT19NQVNLIHwgT01BUDM0MzBfRU5fR1BJTzFfTUFTSyB8CisJb21hcDJfcHJtX3dyaXRlX21vZF9yZWcoT01BUDM0MzBfRU5fSU9fTUFTSyB8IE9NQVAzNDMwX0VOX0dQSU8xX01BU0sgfAogCQkJICBPTUFQMzQzMF9FTl9HUFQxX01BU0sgfCBPTUFQMzQzMF9FTl9HUFQxMl9NQVNLLAogCQkJICBXS1VQX01PRCwgUE1fV0tFTik7CiAJLyogTm8gbmVlZCB0byB3cml0ZSBFTl9JTywgdGhhdCBpcyBhbHdheXMgZW5hYmxlZCAqLwotCXBybV93cml0ZV9tb2RfcmVnKE9NQVAzNDMwX0dSUFNFTF9HUElPMV9NQVNLIHwKKwlvbWFwMl9wcm1fd3JpdGVfbW9kX3JlZyhPTUFQMzQzMF9HUlBTRUxfR1BJTzFfTUFTSyB8CiAJCQkgIE9NQVAzNDMwX0dSUFNFTF9HUFQxX01BU0sgfAogCQkJICBPTUFQMzQzMF9HUlBTRUxfR1BUMTJfTUFTSywKIAkJCSAgV0tVUF9NT0QsIE9NQVAzNDMwX1BNX01QVUdSUFNFTCk7CiAJLyogRm9yIHNvbWUgcmVhc29uIElPIGRvZXNuJ3QgZ2VuZXJhdGUgd2FrZXVwIGV2ZW50IGV2ZW4gaWYKIAkgKiBpdCBpcyBzZWxlY3RlZCB0byBtcHUgd2FrZXVwIGdvdXAgKi8KLQlwcm1fd3JpdGVfbW9kX3JlZyhPTUFQMzQzMF9JT19FTl9NQVNLIHwgT01BUDM0MzBfV0tVUF9FTl9NQVNLLAorCW9tYXAyX3BybV93cml0ZV9tb2RfcmVnKE9NQVAzNDMwX0lPX0VOX01BU0sgfCBPTUFQMzQzMF9XS1VQX0VOX01BU0ssCiAJCQkgIE9DUF9NT0QsIE9NQVAzX1BSTV9JUlFFTkFCTEVfTVBVX09GRlNFVCk7CiAKIAkvKiBFbmFibGUgUE1fV0tFTiB0byBzdXBwb3J0IERTUyBMUFIgKi8KLQlwcm1fd3JpdGVfbW9kX3JlZyhPTUFQMzQzMF9QTV9XS0VOX0RTU19FTl9EU1NfTUFTSywKKwlvbWFwMl9wcm1fd3JpdGVfbW9kX3JlZyhPTUFQMzQzMF9QTV9XS0VOX0RTU19FTl9EU1NfTUFTSywKIAkJCQlPTUFQMzQzMF9EU1NfTU9ELCBQTV9XS0VOKTsKIAogCS8qIEVuYWJsZSB3YWtldXBzIGluIFBFUiAqLwotCXBybV93cml0ZV9tb2RfcmVnKG9tYXAzNjMwX2VuX3VhcnQ0X21hc2sgfAorCW9tYXAyX3BybV93cml0ZV9tb2RfcmVnKG9tYXAzNjMwX2VuX3VhcnQ0X21hc2sgfAogCQkJICBPTUFQMzQzMF9FTl9HUElPMl9NQVNLIHwgT01BUDM0MzBfRU5fR1BJTzNfTUFTSyB8CiAJCQkgIE9NQVAzNDMwX0VOX0dQSU80X01BU0sgfCBPTUFQMzQzMF9FTl9HUElPNV9NQVNLIHwKIAkJCSAgT01BUDM0MzBfRU5fR1BJTzZfTUFTSyB8IE9NQVAzNDMwX0VOX1VBUlQzX01BU0sgfApAQCAtODgwLDcgKzg2Niw3IEBACiAJCQkgIE9NQVAzNDMwX0VOX01DQlNQNF9NQVNLLAogCQkJICBPTUFQMzQzMF9QRVJfTU9ELCBQTV9XS0VOKTsKIAkvKiBhbmQgYWxsb3cgdGhlbSB0byB3YWtlIHVwIE1QVSAqLwotCXBybV93cml0ZV9tb2RfcmVnKG9tYXAzNjMwX2dycHNlbF91YXJ0NF9tYXNrIHwKKwlvbWFwMl9wcm1fd3JpdGVfbW9kX3JlZyhvbWFwMzYzMF9ncnBzZWxfdWFydDRfbWFzayB8CiAJCQkgIE9NQVAzNDMwX0dSUFNFTF9HUElPMl9NQVNLIHwKIAkJCSAgT01BUDM0MzBfR1JQU0VMX0dQSU8zX01BU0sgfAogCQkJICBPTUFQMzQzMF9HUlBTRUxfR1BJTzRfTUFTSyB8CkBAIC04OTMsMjIgKzg3OSwyMiBAQAogCQkJICBPTUFQMzQzMF9QRVJfTU9ELCBPTUFQMzQzMF9QTV9NUFVHUlBTRUwpOwogCiAJLyogRG9uJ3QgYXR0YWNoIElWQSBpbnRlcnJ1cHRzICovCi0JcHJtX3dyaXRlX21vZF9yZWcoMCwgV0tVUF9NT0QsIE9NQVAzNDMwX1BNX0lWQUdSUFNFTCk7Ci0JcHJtX3dyaXRlX21vZF9yZWcoMCwgQ09SRV9NT0QsIE9NQVAzNDMwX1BNX0lWQUdSUFNFTDEpOwotCXBybV93cml0ZV9tb2RfcmVnKDAsIENPUkVfTU9ELCBPTUFQMzQzMEVTMl9QTV9JVkFHUlBTRUwzKTsKLQlwcm1fd3JpdGVfbW9kX3JlZygwLCBPTUFQMzQzMF9QRVJfTU9ELCBPTUFQMzQzMF9QTV9JVkFHUlBTRUwpOworCW9tYXAyX3BybV93cml0ZV9tb2RfcmVnKDAsIFdLVVBfTU9ELCBPTUFQMzQzMF9QTV9JVkFHUlBTRUwpOworCW9tYXAyX3BybV93cml0ZV9tb2RfcmVnKDAsIENPUkVfTU9ELCBPTUFQMzQzMF9QTV9JVkFHUlBTRUwxKTsKKwlvbWFwMl9wcm1fd3JpdGVfbW9kX3JlZygwLCBDT1JFX01PRCwgT01BUDM0MzBFUzJfUE1fSVZBR1JQU0VMMyk7CisJb21hcDJfcHJtX3dyaXRlX21vZF9yZWcoMCwgT01BUDM0MzBfUEVSX01PRCwgT01BUDM0MzBfUE1fSVZBR1JQU0VMKTsKIAogCS8qIENsZWFyIGFueSBwZW5kaW5nICdyZXNldCcgZmxhZ3MgKi8KLQlwcm1fd3JpdGVfbW9kX3JlZygweGZmZmZmZmZmLCBNUFVfTU9ELCBPTUFQMl9STV9SU1RTVCk7Ci0JcHJtX3dyaXRlX21vZF9yZWcoMHhmZmZmZmZmZiwgQ09SRV9NT0QsIE9NQVAyX1JNX1JTVFNUKTsKLQlwcm1fd3JpdGVfbW9kX3JlZygweGZmZmZmZmZmLCBPTUFQMzQzMF9QRVJfTU9ELCBPTUFQMl9STV9SU1RTVCk7Ci0JcHJtX3dyaXRlX21vZF9yZWcoMHhmZmZmZmZmZiwgT01BUDM0MzBfRU1VX01PRCwgT01BUDJfUk1fUlNUU1QpOwotCXBybV93cml0ZV9tb2RfcmVnKDB4ZmZmZmZmZmYsIE9NQVAzNDMwX05FT05fTU9ELCBPTUFQMl9STV9SU1RTVCk7Ci0JcHJtX3dyaXRlX21vZF9yZWcoMHhmZmZmZmZmZiwgT01BUDM0MzBfRFNTX01PRCwgT01BUDJfUk1fUlNUU1QpOwotCXBybV93cml0ZV9tb2RfcmVnKDB4ZmZmZmZmZmYsIE9NQVAzNDMwRVMyX1VTQkhPU1RfTU9ELCBPTUFQMl9STV9SU1RTVCk7CisJb21hcDJfcHJtX3dyaXRlX21vZF9yZWcoMHhmZmZmZmZmZiwgTVBVX01PRCwgT01BUDJfUk1fUlNUU1QpOworCW9tYXAyX3BybV93cml0ZV9tb2RfcmVnKDB4ZmZmZmZmZmYsIENPUkVfTU9ELCBPTUFQMl9STV9SU1RTVCk7CisJb21hcDJfcHJtX3dyaXRlX21vZF9yZWcoMHhmZmZmZmZmZiwgT01BUDM0MzBfUEVSX01PRCwgT01BUDJfUk1fUlNUU1QpOworCW9tYXAyX3BybV93cml0ZV9tb2RfcmVnKDB4ZmZmZmZmZmYsIE9NQVAzNDMwX0VNVV9NT0QsIE9NQVAyX1JNX1JTVFNUKTsKKwlvbWFwMl9wcm1fd3JpdGVfbW9kX3JlZygweGZmZmZmZmZmLCBPTUFQMzQzMF9ORU9OX01PRCwgT01BUDJfUk1fUlNUU1QpOworCW9tYXAyX3BybV93cml0ZV9tb2RfcmVnKDB4ZmZmZmZmZmYsIE9NQVAzNDMwX0RTU19NT0QsIE9NQVAyX1JNX1JTVFNUKTsKKwlvbWFwMl9wcm1fd3JpdGVfbW9kX3JlZygweGZmZmZmZmZmLCBPTUFQMzQzMEVTMl9VU0JIT1NUX01PRCwgT01BUDJfUk1fUlNUU1QpOwogCiAJLyogQ2xlYXIgYW55IHBlbmRpbmcgUFJDTSBpbnRlcnJ1cHRzICovCi0JcHJtX3dyaXRlX21vZF9yZWcoMCwgT0NQX01PRCwgT01BUDNfUFJNX0lSUVNUQVRVU19NUFVfT0ZGU0VUKTsKKwlvbWFwMl9wcm1fd3JpdGVfbW9kX3JlZygwLCBPQ1BfTU9ELCBPTUFQM19QUk1fSVJRU1RBVFVTX01QVV9PRkZTRVQpOwogCiAJb21hcDNfaXZhX2lkbGUoKTsKIAlvbWFwM19kMmRfaWRsZSgpOwpAQCAtOTI1LDEyICs5MTEsMjkgQEAKIAkJc3RhdGUgPSBQV1JETV9QT1dFUl9SRVQ7CiAKICNpZmRlZiBDT05GSUdfQ1BVX0lETEUKLQlvbWFwM19jcHVpZGxlX3VwZGF0ZV9zdGF0ZXMoKTsKKwkvKgorCSAqIEVycmF0dW0gaTU4MzogaW1wbGVtZW50YXRpb24gZm9yIEVTIHJldiA8IEVzMS4yIG9uIDM2MzAuIFdlIGNhbm5vdAorCSAqIGVuYWJsZSBPRkYgbW9kZSBpbiBhIHN0YWJsZSBmb3JtIGZvciBwcmV2aW91cyByZXZpc2lvbnMsIHJlc3RyaWN0CisJICogaW5zdGVhZCB0byBSRVQKKwkgKi8KKwlpZiAoSVNfUE0zNFhYX0VSUkFUVU0oUE1fU0RSQ19XQUtFVVBfRVJSQVRVTV9pNTgzKSkKKwkJb21hcDNfY3B1aWRsZV91cGRhdGVfc3RhdGVzKHN0YXRlLCBQV1JETV9QT1dFUl9SRVQpOworCWVsc2UKKwkJb21hcDNfY3B1aWRsZV91cGRhdGVfc3RhdGVzKHN0YXRlLCBzdGF0ZSk7CiAjZW5kaWYKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkocHdyc3QsICZwd3JzdF9saXN0LCBub2RlKSB7Ci0JCXB3cnN0LT5uZXh0X3N0YXRlID0gc3RhdGU7Ci0JCW9tYXBfc2V0X3B3cmRtX3N0YXRlKHB3cnN0LT5wd3JkbSwgc3RhdGUpOworCQlpZiAoSVNfUE0zNFhYX0VSUkFUVU0oUE1fU0RSQ19XQUtFVVBfRVJSQVRVTV9pNTgzKSAmJgorCQkJCXB3cnN0LT5wd3JkbSA9PSBjb3JlX3B3cmRtICYmCisJCQkJc3RhdGUgPT0gUFdSRE1fUE9XRVJfT0ZGKSB7CisJCQlwd3JzdC0+bmV4dF9zdGF0ZSA9IFBXUkRNX1BPV0VSX1JFVDsKKwkJCVdBUk5fT05DRSgxLAorCQkJCSIlczogQ29yZSBPRkYgZGlzYWJsZWQgZHVlIHRvIGVycmF0YSBpNTgzXG4iLAorCQkJCV9fZnVuY19fKTsKKwkJfSBlbHNlIHsKKwkJCXB3cnN0LT5uZXh0X3N0YXRlID0gc3RhdGU7CisJCX0KKwkJb21hcF9zZXRfcHdyZG1fc3RhdGUocHdyc3QtPnB3cmRtLCBwd3JzdC0+bmV4dF9zdGF0ZSk7CiAJfQogfQogCkBAIC0xMDAyLDYgKzEwMDUsMTcgQEAKIAkJCQlzYXZlX3NlY3VyZV9yYW1fY29udGV4dF9zeik7CiB9CiAKK3N0YXRpYyB2b2lkIF9faW5pdCBwbV9lcnJhdGFfY29uZmlndXJlKHZvaWQpCit7CisJaWYgKGNwdV9pc19vbWFwMzYzMCgpKSB7CisJCXBtMzR4eF9lcnJhdGEgfD0gUE1fUlRBX0VSUkFUVU1faTYwODsKKwkJLyogRW5hYmxlIHRoZSBsMiBjYWNoZSB0b2dnbGluZyBpbiBzbGVlcCBsb2dpYyAqLworCQllbmFibGVfb21hcDM2MzBfdG9nZ2xlX2wyX29uX3Jlc3RvcmUoKTsKKwkJaWYgKG9tYXBfcmV2KCkgPCBPTUFQMzYzMF9SRVZfRVMxXzIpCisJCQlwbTM0eHhfZXJyYXRhIHw9IFBNX1NEUkNfV0FLRVVQX0VSUkFUVU1faTU4MzsKKwl9Cit9CisKIHN0YXRpYyBpbnQgX19pbml0IG9tYXAzX3BtX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3QgcG93ZXJfc3RhdGUgKnB3cnN0LCAqdG1wOwpAQCAtMTAxMSw2ICsxMDI1LDggQEAKIAlpZiAoIWNwdV9pc19vbWFwMzR4eCgpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAorCXBtX2VycmF0YV9jb25maWd1cmUoKTsKKwogCXByaW50ayhLRVJOX0VSUiAiUG93ZXIgTWFuYWdlbWVudCBmb3IgVEkgT01BUDMuXG4iKTsKIAogCS8qIFhYWCBwcmNtX3NldHVwX3JlZ3MgbmVlZHMgdG8gYmUgYmVmb3JlIGVuYWJsaW5nIGh3CkBAIC0xMDU4LDYgKzEwNzQsMTQgQEAKIAlwbV9pZGxlID0gb21hcDNfcG1faWRsZTsKIAlvbWFwM19pZGxlX2luaXQoKTsKIAorCS8qCisJICogUlRBIGlzIGRpc2FibGVkIGR1cmluZyBpbml0aWFsaXphdGlvbiBhcyBwZXIgZXJyYXR1bSBpNjA4CisJICogaXQgaXMgc2FmZXIgdG8gZGlzYWJsZSBSVEEgYnkgdGhlIGJvb3Rsb2FkZXIsIGJ1dCB3ZSB3b3VsZCBsaWtlCisJICogdG8gYmUgZG91Ymx5IHN1cmUgaGVyZSBhbmQgcHJldmVudCBhbnkgbWlzaGFwcy4KKwkgKi8KKwlpZiAoSVNfUE0zNFhYX0VSUkFUVU0oUE1fUlRBX0VSUkFUVU1faTYwOCkpCisJCW9tYXAzNjMwX2N0cmxfZGlzYWJsZV9ydGEoKTsKKwogCWNsa2RtX2FkZF93a2RlcChuZW9uX2Nsa2RtLCBtcHVfY2xrZG0pOwogCWlmIChvbWFwX3R5cGUoKSAhPSBPTUFQMl9ERVZJQ0VfVFlQRV9HUCkgewogCQlvbWFwM19zZWN1cmVfcmFtX3N0b3JhZ2UgPQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTQ0eHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG00NHh4LmMKaW5kZXggNTQ1NDRiNC4uZTlmNDg2MmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG00NHh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTQ0eHguYwpAQCAtMTYsNyArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAotI2luY2x1ZGUgPHBsYXQvcG93ZXJkb21haW4uaD4KKyNpbmNsdWRlICJwb3dlcmRvbWFpbi5oIgogI2luY2x1ZGUgPG1hY2gvb21hcDQtY29tbW9uLmg+CiAKIHN0cnVjdCBwb3dlcl9zdGF0ZSB7CkBAIC0zMSwxMiArMzEsNiBAQAogc3RhdGljIExJU1RfSEVBRChwd3JzdF9saXN0KTsKIAogI2lmZGVmIENPTkZJR19TVVNQRU5ECi1zdGF0aWMgaW50IG9tYXA0X3BtX3ByZXBhcmUodm9pZCkKLXsKLQlkaXNhYmxlX2hsdCgpOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IG9tYXA0X3BtX3N1c3BlbmQodm9pZCkKIHsKIAlkb193ZmkoKTsKQEAgLTU5LDI4ICs1MywyMiBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIG9tYXA0X3BtX2ZpbmlzaCh2b2lkKQotewotCWVuYWJsZV9obHQoKTsKLQlyZXR1cm47Ci19Ci0KIHN0YXRpYyBpbnQgb21hcDRfcG1fYmVnaW4oc3VzcGVuZF9zdGF0ZV90IHN0YXRlKQogeworCWRpc2FibGVfaGx0KCk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIG9tYXA0X3BtX2VuZCh2b2lkKQogeworCWVuYWJsZV9obHQoKTsKIAlyZXR1cm47CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fc3VzcGVuZF9vcHMgb21hcF9wbV9vcHMgPSB7CiAJLmJlZ2luCQk9IG9tYXA0X3BtX2JlZ2luLAogCS5lbmQJCT0gb21hcDRfcG1fZW5kLAotCS5wcmVwYXJlCT0gb21hcDRfcG1fcHJlcGFyZSwKIAkuZW50ZXIJCT0gb21hcDRfcG1fZW50ZXIsCi0JLmZpbmlzaAkJPSBvbWFwNF9wbV9maW5pc2gsCiAJLnZhbGlkCQk9IHN1c3BlbmRfdmFsaWRfb25seV9tZW0sCiB9OwogI2VuZGlmIC8qIENPTkZJR19TVVNQRU5EICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3Bvd2VyZG9tYWluLWNvbW1vbi5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbi1jb21tb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzFmY2NkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbi1jb21tb24uYwpAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAyL3Bvd2VyZG9tYWluLWNvbW1vbi5jCisgKiAgQ29udGFpbnMgY29tbW9uIHBvd2VyZG9tYWluIGZyYW1ld29yayBmdW5jdGlvbnMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uCisgKgorICogRGVyaXZlZCBmcm9tIG1hY2gtb21hcDIvcG93ZXJkb21haW4uYyB3cml0dGVuIGJ5IFBhdWwgV2FsbXNsZXkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgInBtLmgiCisjaW5jbHVkZSAiY20uaCIKKyNpbmNsdWRlICJjbS1yZWdiaXRzLTM0eHguaCIKKyNpbmNsdWRlICJjbS1yZWdiaXRzLTQ0eHguaCIKKyNpbmNsdWRlICJwcm0tcmVnYml0cy0zNHh4LmgiCisjaW5jbHVkZSAicHJtLXJlZ2JpdHMtNDR4eC5oIgorCisvKgorICogT01BUDMgYW5kIE9NQVA0IHNwZWNpZmljIHJlZ2lzdGVyIGJpdCBpbml0aWFsaXNhdGlvbnMKKyAqIE5vdGljZSB0aGF0IHRoZSBuYW1lcyBoZXJlIGFyZSBub3QgYWNjb3JkaW5nIHRvIGVhY2ggcG93ZXIKKyAqIGRvbWFpbiBidXQgdGhlIGJpdCBtYXBwaW5nIHVzZWQgYXBwbGllcyB0byBhbGwgb2YgdGhlbQorICovCisvKiBPTUFQMyBhbmQgT01BUDQgTWVtb3J5IE9uc3RhdGUgTWFza3MgKGNvbW1vbiBhY3Jvc3MgYWxsIHBvd2VyIGRvbWFpbnMpICovCisjZGVmaW5lIE9NQVBfTUVNMF9PTlNUQVRFX01BU0sgT01BUDM0MzBfU0hBUkVETDFDQUNIRUZMQVRPTlNUQVRFX01BU0sKKyNkZWZpbmUgT01BUF9NRU0xX09OU1RBVEVfTUFTSyBPTUFQMzQzMF9MMUZMQVRNRU1PTlNUQVRFX01BU0sKKyNkZWZpbmUgT01BUF9NRU0yX09OU1RBVEVfTUFTSyBPTUFQMzQzMF9TSEFSRURMMkNBQ0hFRkxBVE9OU1RBVEVfTUFTSworI2RlZmluZSBPTUFQX01FTTNfT05TVEFURV9NQVNLIE9NQVAzNDMwX0wyRkxBVE1FTU9OU1RBVEVfTUFTSworI2RlZmluZSBPTUFQX01FTTRfT05TVEFURV9NQVNLIE9NQVA0NDMwX09DUF9OUkVUX0JBTktfT05TVEFURV9NQVNLCisKKy8qIE9NQVAzIGFuZCBPTUFQNCBNZW1vcnkgUmV0c3RhdGUgTWFza3MgKGNvbW1vbiBhY3Jvc3MgYWxsIHBvd2VyIGRvbWFpbnMpICovCisjZGVmaW5lIE9NQVBfTUVNMF9SRVRTVEFURV9NQVNLIE9NQVAzNDMwX1NIQVJFREwxQ0FDSEVGTEFUUkVUU1RBVEVfTUFTSworI2RlZmluZSBPTUFQX01FTTFfUkVUU1RBVEVfTUFTSyBPTUFQMzQzMF9MMUZMQVRNRU1SRVRTVEFURV9NQVNLCisjZGVmaW5lIE9NQVBfTUVNMl9SRVRTVEFURV9NQVNLIE9NQVAzNDMwX1NIQVJFREwyQ0FDSEVGTEFUUkVUU1RBVEVfTUFTSworI2RlZmluZSBPTUFQX01FTTNfUkVUU1RBVEVfTUFTSyBPTUFQMzQzMF9MMkZMQVRNRU1SRVRTVEFURV9NQVNLCisjZGVmaW5lIE9NQVBfTUVNNF9SRVRTVEFURV9NQVNLIE9NQVA0NDMwX09DUF9OUkVUX0JBTktfUkVUU1RBVEVfTUFTSworCisvKiBPTUFQMyBhbmQgT01BUDQgTWVtb3J5IFN0YXR1cyBiaXRzICovCisjZGVmaW5lIE9NQVBfTUVNMF9TVEFURVNUX01BU0sgT01BUDM0MzBfU0hBUkVETDFDQUNIRUZMQVRTVEFURVNUX01BU0sKKyNkZWZpbmUgT01BUF9NRU0xX1NUQVRFU1RfTUFTSyBPTUFQMzQzMF9MMUZMQVRNRU1TVEFURVNUX01BU0sKKyNkZWZpbmUgT01BUF9NRU0yX1NUQVRFU1RfTUFTSyBPTUFQMzQzMF9TSEFSRURMMkNBQ0hFRkxBVFNUQVRFU1RfTUFTSworI2RlZmluZSBPTUFQX01FTTNfU1RBVEVTVF9NQVNLIE9NQVAzNDMwX0wyRkxBVE1FTVNUQVRFU1RfTUFTSworI2RlZmluZSBPTUFQX01FTTRfU1RBVEVTVF9NQVNLIE9NQVA0NDMwX09DUF9OUkVUX0JBTktfU1RBVEVTVF9NQVNLCisKKy8qIENvbW1vbiBJbnRlcm5hbCBmdW5jdGlvbnMgdXNlZCBhY3Jvc3MgT01BUCByZXYncyovCit1MzIgb21hcDJfcHdyZG1fZ2V0X21lbV9iYW5rX29uc3RhdGVfbWFzayh1OCBiYW5rKQoreworCXN3aXRjaCAoYmFuaykgeworCWNhc2UgMDoKKwkJcmV0dXJuIE9NQVBfTUVNMF9PTlNUQVRFX01BU0s7CisJY2FzZSAxOgorCQlyZXR1cm4gT01BUF9NRU0xX09OU1RBVEVfTUFTSzsKKwljYXNlIDI6CisJCXJldHVybiBPTUFQX01FTTJfT05TVEFURV9NQVNLOworCWNhc2UgMzoKKwkJcmV0dXJuIE9NQVBfTUVNM19PTlNUQVRFX01BU0s7CisJY2FzZSA0OgorCQlyZXR1cm4gT01BUF9NRU00X09OU1RBVEVfTUFTSzsKKwlkZWZhdWx0OgorCQlXQVJOX09OKDEpOyAvKiBzaG91bGQgbmV2ZXIgaGFwcGVuICovCisJCXJldHVybiAtRUVYSVNUOworCX0KKwlyZXR1cm4gMDsKK30KKwordTMyIG9tYXAyX3B3cmRtX2dldF9tZW1fYmFua19yZXRzdF9tYXNrKHU4IGJhbmspCit7CisJc3dpdGNoIChiYW5rKSB7CisJY2FzZSAwOgorCQlyZXR1cm4gT01BUF9NRU0wX1JFVFNUQVRFX01BU0s7CisJY2FzZSAxOgorCQlyZXR1cm4gT01BUF9NRU0xX1JFVFNUQVRFX01BU0s7CisJY2FzZSAyOgorCQlyZXR1cm4gT01BUF9NRU0yX1JFVFNUQVRFX01BU0s7CisJY2FzZSAzOgorCQlyZXR1cm4gT01BUF9NRU0zX1JFVFNUQVRFX01BU0s7CisJY2FzZSA0OgorCQlyZXR1cm4gT01BUF9NRU00X1JFVFNUQVRFX01BU0s7CisJZGVmYXVsdDoKKwkJV0FSTl9PTigxKTsgLyogc2hvdWxkIG5ldmVyIGhhcHBlbiAqLworCQlyZXR1cm4gLUVFWElTVDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3UzMiBvbWFwMl9wd3JkbV9nZXRfbWVtX2Jhbmtfc3RzdF9tYXNrKHU4IGJhbmspCit7CisJc3dpdGNoIChiYW5rKSB7CisJY2FzZSAwOgorCQlyZXR1cm4gT01BUF9NRU0wX1NUQVRFU1RfTUFTSzsKKwljYXNlIDE6CisJCXJldHVybiBPTUFQX01FTTFfU1RBVEVTVF9NQVNLOworCWNhc2UgMjoKKwkJcmV0dXJuIE9NQVBfTUVNMl9TVEFURVNUX01BU0s7CisJY2FzZSAzOgorCQlyZXR1cm4gT01BUF9NRU0zX1NUQVRFU1RfTUFTSzsKKwljYXNlIDQ6CisJCXJldHVybiBPTUFQX01FTTRfU1RBVEVTVF9NQVNLOworCWRlZmF1bHQ6CisJCVdBUk5fT04oMSk7IC8qIHNob3VsZCBuZXZlciBoYXBwZW4gKi8KKwkJcmV0dXJuIC1FRVhJU1Q7CisJfQorCXJldHVybiAwOworfQorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3Bvd2VyZG9tYWluLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3Bvd2VyZG9tYWluLmMKaW5kZXggNjUyN2VjMy4uZWFlZDBkZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbi5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW4uYwpAQCAtMTUsMjcgKzE1LDE5IEBACiAjdW5kZWYgREVCVUcKIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0KLSNpbmNsdWRlIDxhc20vYXRvbWljLmg+Ci0KLSNpbmNsdWRlICJjbS5oIgotI2luY2x1ZGUgImNtLXJlZ2JpdHMtMzR4eC5oIgotI2luY2x1ZGUgImNtLXJlZ2JpdHMtNDR4eC5oIgotI2luY2x1ZGUgInBybS5oIgotI2luY2x1ZGUgInBybS1yZWdiaXRzLTM0eHguaCIKLSNpbmNsdWRlICJwcm0tcmVnYml0cy00NHh4LmgiCisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSAiY20yeHh4XzN4eHguaCIKKyNpbmNsdWRlICJwcmNtNDR4eC5oIgorI2luY2x1ZGUgImNtNDR4eC5oIgorI2luY2x1ZGUgInBybTJ4eHhfM3h4eC5oIgorI2luY2x1ZGUgInBybTQ0eHguaCIKIAogI2luY2x1ZGUgPHBsYXQvY3B1Lmg+Ci0jaW5jbHVkZSA8cGxhdC9wb3dlcmRvbWFpbi5oPgotI2luY2x1ZGUgPHBsYXQvY2xvY2tkb21haW4uaD4KKyNpbmNsdWRlICJwb3dlcmRvbWFpbi5oIgorI2luY2x1ZGUgImNsb2NrZG9tYWluLmgiCiAjaW5jbHVkZSA8cGxhdC9wcmNtLmg+CiAKICNpbmNsdWRlICJwbS5oIgpAQCAtNDUsNDEgKzM3LDEyIEBACiAJUFdSRE1fU1RBVEVfUFJFViwKIH07CiAKLS8qIFZhcmlhYmxlIGhvbGRpbmcgdmFsdWUgb2YgdGhlIENQVSBkZXBlbmRlbnQgUFdSU1RDVFJMIFJlZ2lzdGVyIE9mZnNldCAqLwotc3RhdGljIHUxNiBwd3JzdGN0cmxfcmVnX29mZnM7Ci0KLS8qIFZhcmlhYmxlIGhvbGRpbmcgdmFsdWUgb2YgdGhlIENQVSBkZXBlbmRlbnQgUFdSU1RTVCBSZWdpc3RlciBPZmZzZXQgKi8KLXN0YXRpYyB1MTYgcHdyc3RzdF9yZWdfb2ZmczsKLQotLyogT01BUDMgYW5kIE9NQVA0IHNwZWNpZmljIHJlZ2lzdGVyIGJpdCBpbml0aWFsaXNhdGlvbnMKLSAqIE5vdGljZSB0aGF0IHRoZSBuYW1lcyBoZXJlIGFyZSBub3QgYWNjb3JkaW5nIHRvIGVhY2ggcG93ZXIKLSAqIGRvbWFpbiBidXQgdGhlIGJpdCBtYXBwaW5nIHVzZWQgYXBwbGllcyB0byBhbGwgb2YgdGhlbQotICovCi0KLS8qIE9NQVAzIGFuZCBPTUFQNCBNZW1vcnkgT25zdGF0ZSBNYXNrcyAoY29tbW9uIGFjcm9zcyBhbGwgcG93ZXIgZG9tYWlucykgKi8KLSNkZWZpbmUgT01BUF9NRU0wX09OU1RBVEVfTUFTSyBPTUFQMzQzMF9TSEFSRURMMUNBQ0hFRkxBVE9OU1RBVEVfTUFTSwotI2RlZmluZSBPTUFQX01FTTFfT05TVEFURV9NQVNLIE9NQVAzNDMwX0wxRkxBVE1FTU9OU1RBVEVfTUFTSwotI2RlZmluZSBPTUFQX01FTTJfT05TVEFURV9NQVNLIE9NQVAzNDMwX1NIQVJFREwyQ0FDSEVGTEFUT05TVEFURV9NQVNLCi0jZGVmaW5lIE9NQVBfTUVNM19PTlNUQVRFX01BU0sgT01BUDM0MzBfTDJGTEFUTUVNT05TVEFURV9NQVNLCi0jZGVmaW5lIE9NQVBfTUVNNF9PTlNUQVRFX01BU0sgT01BUDQ0MzBfT0NQX05SRVRfQkFOS19PTlNUQVRFX01BU0sKLQotLyogT01BUDMgYW5kIE9NQVA0IE1lbW9yeSBSZXRzdGF0ZSBNYXNrcyAoY29tbW9uIGFjcm9zcyBhbGwgcG93ZXIgZG9tYWlucykgKi8KLSNkZWZpbmUgT01BUF9NRU0wX1JFVFNUQVRFX01BU0sgT01BUDM0MzBfU0hBUkVETDFDQUNIRUZMQVRSRVRTVEFURV9NQVNLCi0jZGVmaW5lIE9NQVBfTUVNMV9SRVRTVEFURV9NQVNLIE9NQVAzNDMwX0wxRkxBVE1FTVJFVFNUQVRFX01BU0sKLSNkZWZpbmUgT01BUF9NRU0yX1JFVFNUQVRFX01BU0sgT01BUDM0MzBfU0hBUkVETDJDQUNIRUZMQVRSRVRTVEFURV9NQVNLCi0jZGVmaW5lIE9NQVBfTUVNM19SRVRTVEFURV9NQVNLIE9NQVAzNDMwX0wyRkxBVE1FTVJFVFNUQVRFX01BU0sKLSNkZWZpbmUgT01BUF9NRU00X1JFVFNUQVRFX01BU0sgT01BUDQ0MzBfT0NQX05SRVRfQkFOS19SRVRTVEFURV9NQVNLCi0KLS8qIE9NQVAzIGFuZCBPTUFQNCBNZW1vcnkgU3RhdHVzIGJpdHMgKi8KLSNkZWZpbmUgT01BUF9NRU0wX1NUQVRFU1RfTUFTSyBPTUFQMzQzMF9TSEFSRURMMUNBQ0hFRkxBVFNUQVRFU1RfTUFTSwotI2RlZmluZSBPTUFQX01FTTFfU1RBVEVTVF9NQVNLIE9NQVAzNDMwX0wxRkxBVE1FTVNUQVRFU1RfTUFTSwotI2RlZmluZSBPTUFQX01FTTJfU1RBVEVTVF9NQVNLIE9NQVAzNDMwX1NIQVJFREwyQ0FDSEVGTEFUU1RBVEVTVF9NQVNLCi0jZGVmaW5lIE9NQVBfTUVNM19TVEFURVNUX01BU0sgT01BUDM0MzBfTDJGTEFUTUVNU1RBVEVTVF9NQVNLCi0jZGVmaW5lIE9NQVBfTUVNNF9TVEFURVNUX01BU0sgT01BUDQ0MzBfT0NQX05SRVRfQkFOS19TVEFURVNUX01BU0sKIAogLyogcHdyZG1fbGlzdCBjb250YWlucyBhbGwgcmVnaXN0ZXJlZCBzdHJ1Y3QgcG93ZXJkb21haW5zICovCiBzdGF0aWMgTElTVF9IRUFEKHB3cmRtX2xpc3QpOwogCitzdGF0aWMgc3RydWN0IHB3cmRtX29wcyAqYXJjaF9wd3JkbTsKKwogLyogUHJpdmF0ZSBmdW5jdGlvbnMgKi8KIAogc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiAqX3B3cmRtX2xvb2t1cChjb25zdCBjaGFyICpuYW1lKQpAQCAtMTEwLDEyICs3MywxOSBAQAogewogCWludCBpOwogCi0JaWYgKCFwd3JkbSkKKwlpZiAoIXB3cmRtIHx8ICFwd3JkbS0+bmFtZSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoIW9tYXBfY2hpcF9pcyhwd3JkbS0+b21hcF9jaGlwKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwlpZiAoY3B1X2lzX29tYXA0NHh4KCkgJiYKKwkgICAgcHdyZG0tPnByY21fcGFydGl0aW9uID09IE9NQVA0NDMwX0lOVkFMSURfUFJDTV9QQVJUSVRJT04pIHsKKwkJcHJfZXJyKCJwb3dlcmRvbWFpbjogJXM6IG1pc3NpbmcgT01BUDQgUFJDTSBwYXJ0aXRpb24gSURcbiIsCisJCSAgICAgICBwd3JkbS0+bmFtZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwogCWlmIChfcHdyZG1fbG9va3VwKHB3cmRtLT5uYW1lKSkKIAkJcmV0dXJuIC1FRVhJU1Q7CiAKQEAgLTIxMSw2ICsxODEsNyBAQAogLyoqCiAgKiBwd3JkbV9pbml0IC0gc2V0IHVwIHRoZSBwb3dlcmRvbWFpbiBsYXllcgogICogQHB3cmRtX2xpc3Q6IGFycmF5IG9mIHN0cnVjdCBwb3dlcmRvbWFpbiBwb2ludGVycyB0byByZWdpc3RlcgorICogQGN1c3RvbV9mdW5jczogZnVuYyBwb2ludGVycyBmb3IgYXJjaCBzcGVjZmljIGltcGxlbWVudGF0aW9ucwogICoKICAqIExvb3AgdGhyb3VnaCB0aGUgYXJyYXkgb2YgcG93ZXJkb21haW5zIEBwd3JkbV9saXN0LCByZWdpc3RlcmluZyBhbGwKICAqIHRoYXQgYXJlIGF2YWlsYWJsZSBvbiB0aGUgY3VycmVudCBDUFUuIElmIHB3cmRtX2xpc3QgaXMgc3VwcGxpZWQKQEAgLTIxOCwyMSArMTg5LDE0IEBACiAgKiByZWdpc3RlcmVkLiAgTm8gcmV0dXJuIHZhbHVlLiAgWFhYIHB3cmRtX2xpc3QgaXMgbm90IHJlYWxseSBhCiAgKiAibGlzdCI7IGl0IGlzIGFuIGFycmF5LiAgUmVuYW1lIGFwcHJvcHJpYXRlbHkuCiAgKi8KLXZvaWQgcHdyZG1faW5pdChzdHJ1Y3QgcG93ZXJkb21haW4gKipwd3JkbV9saXN0KQordm9pZCBwd3JkbV9pbml0KHN0cnVjdCBwb3dlcmRvbWFpbiAqKnB3cmRtX2xpc3QsIHN0cnVjdCBwd3JkbV9vcHMgKmN1c3RvbV9mdW5jcykKIHsKIAlzdHJ1Y3QgcG93ZXJkb21haW4gKipwID0gTlVMTDsKIAotCWlmIChjcHVfaXNfb21hcDI0eHgoKSB8fCBjcHVfaXNfb21hcDM0eHgoKSkgewotCQlwd3JzdGN0cmxfcmVnX29mZnMgPSBPTUFQMl9QTV9QV1NUQ1RSTDsKLQkJcHdyc3RzdF9yZWdfb2ZmcyA9IE9NQVAyX1BNX1BXU1RTVDsKLQl9IGVsc2UgaWYgKGNwdV9pc19vbWFwNDR4eCgpKSB7Ci0JCXB3cnN0Y3RybF9yZWdfb2ZmcyA9IE9NQVA0X1BNX1BXU1RDVFJMOwotCQlwd3JzdHN0X3JlZ19vZmZzID0gT01BUDRfUE1fUFdTVFNUOwotCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiUG93ZXIgRG9tYWluIHN0cnVjdCBub3Qgc3VwcG9ydGVkIGZvciAiIFwKLQkJCQkJCQkidGhpcyBDUFVcbiIpOwotCQlyZXR1cm47Ci0JfQorCWlmICghY3VzdG9tX2Z1bmNzKQorCQlXQVJOKDEsICJwb3dlcmRvbWFpbjogTm8gY3VzdG9tIHB3cmRtIGZ1bmN0aW9ucyByZWdpc3RlcmVkXG4iKTsKKwllbHNlCisJCWFyY2hfcHdyZG0gPSBjdXN0b21fZnVuY3M7CiAKIAlpZiAocHdyZG1fbGlzdCkgewogCQlmb3IgKHAgPSBwd3JkbV9saXN0OyAqcDsgcCsrKQpAQCAtNDMxLDYgKzM5NSw4IEBACiAgKi8KIGludCBwd3JkbV9zZXRfbmV4dF9wd3JzdChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCB1OCBwd3JzdCkKIHsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKwogCWlmICghcHdyZG0pCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC00NDAsMTEgKzQwNiwxMCBAQAogCXByX2RlYnVnKCJwb3dlcmRvbWFpbjogc2V0dGluZyBuZXh0IHBvd2Vyc3RhdGUgZm9yICVzIHRvICUweFxuIiwKIAkJIHB3cmRtLT5uYW1lLCBwd3JzdCk7CiAKLQlwcm1fcm13X21vZF9yZWdfYml0cyhPTUFQX1BPV0VSU1RBVEVfTUFTSywKLQkJCSAgICAgKHB3cnN0IDw8IE9NQVBfUE9XRVJTVEFURV9TSElGVCksCi0JCQkgICAgIHB3cmRtLT5wcmNtX29mZnMsIHB3cnN0Y3RybF9yZWdfb2Zmcyk7CisJaWYgKGFyY2hfcHdyZG0gJiYgYXJjaF9wd3JkbS0+cHdyZG1fc2V0X25leHRfcHdyc3QpCisJCXJldCA9IGFyY2hfcHdyZG0tPnB3cmRtX3NldF9uZXh0X3B3cnN0KHB3cmRtLCBwd3JzdCk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiAvKioKQEAgLTQ1NywxMSArNDIyLDE1IEBACiAgKi8KIGludCBwd3JkbV9yZWFkX25leHRfcHdyc3Qoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSkKIHsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKwogCWlmICghcHdyZG0pCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcmV0dXJuIHBybV9yZWFkX21vZF9iaXRzX3NoaWZ0KHB3cmRtLT5wcmNtX29mZnMsCi0JCQkJIHB3cnN0Y3RybF9yZWdfb2ZmcywgT01BUF9QT1dFUlNUQVRFX01BU0spOworCWlmIChhcmNoX3B3cmRtICYmIGFyY2hfcHdyZG0tPnB3cmRtX3JlYWRfbmV4dF9wd3JzdCkKKwkJcmV0ID0gYXJjaF9wd3JkbS0+cHdyZG1fcmVhZF9uZXh0X3B3cnN0KHB3cmRtKTsKKworCXJldHVybiByZXQ7CiB9CiAKIC8qKgpAQCAtNDc0LDExICs0NDMsMTUgQEAKICAqLwogaW50IHB3cmRtX3JlYWRfcHdyc3Qoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSkKIHsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKwogCWlmICghcHdyZG0pCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcmV0dXJuIHBybV9yZWFkX21vZF9iaXRzX3NoaWZ0KHB3cmRtLT5wcmNtX29mZnMsCi0JCQkJIHB3cnN0c3RfcmVnX29mZnMsIE9NQVBfUE9XRVJTVEFURVNUX01BU0spOworCWlmIChhcmNoX3B3cmRtICYmIGFyY2hfcHdyZG0tPnB3cmRtX3JlYWRfcHdyc3QpCisJCXJldCA9IGFyY2hfcHdyZG0tPnB3cmRtX3JlYWRfcHdyc3QocHdyZG0pOworCisJcmV0dXJuIHJldDsKIH0KIAogLyoqCkBAIC00OTEsMTEgKzQ2NCwxNSBAQAogICovCiBpbnQgcHdyZG1fcmVhZF9wcmV2X3B3cnN0KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pCiB7CisJaW50IHJldCA9IC1FSU5WQUw7CisKIAlpZiAoIXB3cmRtKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJldHVybiBwcm1fcmVhZF9tb2RfYml0c19zaGlmdChwd3JkbS0+cHJjbV9vZmZzLCBPTUFQMzQzMF9QTV9QUkVQV1NUU1QsCi0JCQkJCU9NQVAzNDMwX0xBU1RQT1dFUlNUQVRFRU5URVJFRF9NQVNLKTsKKwlpZiAoYXJjaF9wd3JkbSAmJiBhcmNoX3B3cmRtLT5wd3JkbV9yZWFkX3ByZXZfcHdyc3QpCisJCXJldCA9IGFyY2hfcHdyZG0tPnB3cmRtX3JlYWRfcHJldl9wd3JzdChwd3JkbSk7CisKKwlyZXR1cm4gcmV0OwogfQogCiAvKioKQEAgLTUxMSw3ICs0ODgsNyBAQAogICovCiBpbnQgcHdyZG1fc2V0X2xvZ2ljX3JldHN0KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0sIHU4IHB3cnN0KQogewotCXUzMiB2OworCWludCByZXQgPSAtRUlOVkFMOwogCiAJaWYgKCFwd3JkbSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC01MjIsMTcgKzQ5OSwxMCBAQAogCXByX2RlYnVnKCJwb3dlcmRvbWFpbjogc2V0dGluZyBuZXh0IGxvZ2ljIHBvd2Vyc3RhdGUgZm9yICVzIHRvICUweFxuIiwKIAkJIHB3cmRtLT5uYW1lLCBwd3JzdCk7CiAKLQkvKgotCSAqIFRoZSByZWdpc3RlciBiaXQgbmFtZXMgYmVsb3cgbWF5IG5vdCBjb3JyZXNwb25kIHRvIHRoZQotCSAqIGFjdHVhbCBuYW1lcyBvZiB0aGUgYml0cyBpbiBlYWNoIHBvd2VyZG9tYWluJ3MgcmVnaXN0ZXIsCi0JICogYnV0IHRoZSB0eXBlIG9mIHZhbHVlIHJldHVybmVkIGlzIHRoZSBzYW1lIGZvciBlYWNoCi0JICogcG93ZXJkb21haW4uCi0JICovCi0JdiA9IHB3cnN0IDw8IF9fZmZzKE9NQVAzNDMwX0xPR0lDTDFDQUNIRVJFVFNUQVRFX01BU0spOwotCXBybV9ybXdfbW9kX3JlZ19iaXRzKE9NQVAzNDMwX0xPR0lDTDFDQUNIRVJFVFNUQVRFX01BU0ssIHYsCi0JCQkgICAgIHB3cmRtLT5wcmNtX29mZnMsIHB3cnN0Y3RybF9yZWdfb2Zmcyk7CisJaWYgKGFyY2hfcHdyZG0gJiYgYXJjaF9wd3JkbS0+cHdyZG1fc2V0X2xvZ2ljX3JldHN0KQorCQlyZXQgPSBhcmNoX3B3cmRtLT5wd3JkbV9zZXRfbG9naWNfcmV0c3QocHdyZG0sIHB3cnN0KTsKIAotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIC8qKgpAQCAtNTUyLDcgKzUyMiw3IEBACiAgKi8KIGludCBwd3JkbV9zZXRfbWVtX29uc3Qoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgdTggYmFuaywgdTggcHdyc3QpCiB7Ci0JdTMyIG07CisJaW50IHJldCA9IC1FSU5WQUw7CiAKIAlpZiAoIXB3cmRtKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTU2NiwzNyArNTM2LDEwIEBACiAJcHJfZGVidWcoInBvd2VyZG9tYWluOiBzZXR0aW5nIG5leHQgbWVtb3J5IHBvd2Vyc3RhdGUgZm9yIGRvbWFpbiAlcyAiCiAJCSAiYmFuayAlMHggd2hpbGUgcHdyZG0tT04gdG8gJTB4XG4iLCBwd3JkbS0+bmFtZSwgYmFuaywgcHdyc3QpOwogCi0JLyoKLQkgKiBUaGUgcmVnaXN0ZXIgYml0IG5hbWVzIGJlbG93IG1heSBub3QgY29ycmVzcG9uZCB0byB0aGUKLQkgKiBhY3R1YWwgbmFtZXMgb2YgdGhlIGJpdHMgaW4gZWFjaCBwb3dlcmRvbWFpbidzIHJlZ2lzdGVyLAotCSAqIGJ1dCB0aGUgdHlwZSBvZiB2YWx1ZSByZXR1cm5lZCBpcyB0aGUgc2FtZSBmb3IgZWFjaAotCSAqIHBvd2VyZG9tYWluLgotCSAqLwotCXN3aXRjaCAoYmFuaykgewotCWNhc2UgMDoKLQkJbSA9IE9NQVBfTUVNMF9PTlNUQVRFX01BU0s7Ci0JCWJyZWFrOwotCWNhc2UgMToKLQkJbSA9IE9NQVBfTUVNMV9PTlNUQVRFX01BU0s7Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJbSA9IE9NQVBfTUVNMl9PTlNUQVRFX01BU0s7Ci0JCWJyZWFrOwotCWNhc2UgMzoKLQkJbSA9IE9NQVBfTUVNM19PTlNUQVRFX01BU0s7Ci0JCWJyZWFrOwotCWNhc2UgNDoKLQkJbSA9IE9NQVBfTUVNNF9PTlNUQVRFX01BU0s7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCVdBUk5fT04oMSk7IC8qIHNob3VsZCBuZXZlciBoYXBwZW4gKi8KLQkJcmV0dXJuIC1FRVhJU1Q7Ci0JfQorCWlmIChhcmNoX3B3cmRtICYmIGFyY2hfcHdyZG0tPnB3cmRtX3NldF9tZW1fb25zdCkKKwkJcmV0ID0gYXJjaF9wd3JkbS0+cHdyZG1fc2V0X21lbV9vbnN0KHB3cmRtLCBiYW5rLCBwd3JzdCk7CiAKLQlwcm1fcm13X21vZF9yZWdfYml0cyhtLCAocHdyc3QgPDwgX19mZnMobSkpLAotCQkJICAgICBwd3JkbS0+cHJjbV9vZmZzLCBwd3JzdGN0cmxfcmVnX29mZnMpOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogLyoqCkBAIC02MTcsNyArNTYwLDcgQEAKICAqLwogaW50IHB3cmRtX3NldF9tZW1fcmV0c3Qoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgdTggYmFuaywgdTggcHdyc3QpCiB7Ci0JdTMyIG07CisJaW50IHJldCA9IC1FSU5WQUw7CiAKIAlpZiAoIXB3cmRtKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTYzMSwzNyArNTc0LDEwIEBACiAJcHJfZGVidWcoInBvd2VyZG9tYWluOiBzZXR0aW5nIG5leHQgbWVtb3J5IHBvd2Vyc3RhdGUgZm9yIGRvbWFpbiAlcyAiCiAJCSAiYmFuayAlMHggd2hpbGUgcHdyZG0tUkVUIHRvICUweFxuIiwgcHdyZG0tPm5hbWUsIGJhbmssIHB3cnN0KTsKIAotCS8qCi0JICogVGhlIHJlZ2lzdGVyIGJpdCBuYW1lcyBiZWxvdyBtYXkgbm90IGNvcnJlc3BvbmQgdG8gdGhlCi0JICogYWN0dWFsIG5hbWVzIG9mIHRoZSBiaXRzIGluIGVhY2ggcG93ZXJkb21haW4ncyByZWdpc3RlciwKLQkgKiBidXQgdGhlIHR5cGUgb2YgdmFsdWUgcmV0dXJuZWQgaXMgdGhlIHNhbWUgZm9yIGVhY2gKLQkgKiBwb3dlcmRvbWFpbi4KLQkgKi8KLQlzd2l0Y2ggKGJhbmspIHsKLQljYXNlIDA6Ci0JCW0gPSBPTUFQX01FTTBfUkVUU1RBVEVfTUFTSzsKLQkJYnJlYWs7Ci0JY2FzZSAxOgotCQltID0gT01BUF9NRU0xX1JFVFNUQVRFX01BU0s7Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJbSA9IE9NQVBfTUVNMl9SRVRTVEFURV9NQVNLOwotCQlicmVhazsKLQljYXNlIDM6Ci0JCW0gPSBPTUFQX01FTTNfUkVUU1RBVEVfTUFTSzsKLQkJYnJlYWs7Ci0JY2FzZSA0OgotCQltID0gT01BUF9NRU00X1JFVFNUQVRFX01BU0s7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCVdBUk5fT04oMSk7IC8qIHNob3VsZCBuZXZlciBoYXBwZW4gKi8KLQkJcmV0dXJuIC1FRVhJU1Q7Ci0JfQorCWlmIChhcmNoX3B3cmRtICYmIGFyY2hfcHdyZG0tPnB3cmRtX3NldF9tZW1fcmV0c3QpCisJCXJldCA9IGFyY2hfcHdyZG0tPnB3cmRtX3NldF9tZW1fcmV0c3QocHdyZG0sIGJhbmssIHB3cnN0KTsKIAotCXBybV9ybXdfbW9kX3JlZ19iaXRzKG0sIChwd3JzdCA8PCBfX2ZmcyhtKSksIHB3cmRtLT5wcmNtX29mZnMsCi0JCQkgICAgIHB3cnN0Y3RybF9yZWdfb2Zmcyk7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiAvKioKQEAgLTY3NSwxMSArNTkxLDE1IEBACiAgKi8KIGludCBwd3JkbV9yZWFkX2xvZ2ljX3B3cnN0KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pCiB7CisJaW50IHJldCA9IC1FSU5WQUw7CisKIAlpZiAoIXB3cmRtKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJldHVybiBwcm1fcmVhZF9tb2RfYml0c19zaGlmdChwd3JkbS0+cHJjbV9vZmZzLCBwd3JzdHN0X3JlZ19vZmZzLAotCQkJCSAgICAgICBPTUFQMzQzMF9MT0dJQ1NUQVRFU1RfTUFTSyk7CisJaWYgKGFyY2hfcHdyZG0gJiYgYXJjaF9wd3JkbS0+cHdyZG1fcmVhZF9sb2dpY19wd3JzdCkKKwkJcmV0ID0gYXJjaF9wd3JkbS0+cHdyZG1fcmVhZF9sb2dpY19wd3JzdChwd3JkbSk7CisKKwlyZXR1cm4gcmV0OwogfQogCiAvKioKQEAgLTY5MiwxNyArNjEyLDE1IEBACiAgKi8KIGludCBwd3JkbV9yZWFkX3ByZXZfbG9naWNfcHdyc3Qoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSkKIHsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKwogCWlmICghcHdyZG0pCiAJCXJldHVybiAtRUlOVkFMOwogCi0JLyoKLQkgKiBUaGUgcmVnaXN0ZXIgYml0IG5hbWVzIGJlbG93IG1heSBub3QgY29ycmVzcG9uZCB0byB0aGUKLQkgKiBhY3R1YWwgbmFtZXMgb2YgdGhlIGJpdHMgaW4gZWFjaCBwb3dlcmRvbWFpbidzIHJlZ2lzdGVyLAotCSAqIGJ1dCB0aGUgdHlwZSBvZiB2YWx1ZSByZXR1cm5lZCBpcyB0aGUgc2FtZSBmb3IgZWFjaAotCSAqIHBvd2VyZG9tYWluLgotCSAqLwotCXJldHVybiBwcm1fcmVhZF9tb2RfYml0c19zaGlmdChwd3JkbS0+cHJjbV9vZmZzLCBPTUFQMzQzMF9QTV9QUkVQV1NUU1QsCi0JCQkJCU9NQVAzNDMwX0xBU1RMT0dJQ1NUQVRFRU5URVJFRF9NQVNLKTsKKwlpZiAoYXJjaF9wd3JkbSAmJiBhcmNoX3B3cmRtLT5wd3JkbV9yZWFkX3ByZXZfbG9naWNfcHdyc3QpCisJCXJldCA9IGFyY2hfcHdyZG0tPnB3cmRtX3JlYWRfcHJldl9sb2dpY19wd3JzdChwd3JkbSk7CisKKwlyZXR1cm4gcmV0OwogfQogCiAvKioKQEAgLTcxNSwxNyArNjMzLDE1IEBACiAgKi8KIGludCBwd3JkbV9yZWFkX2xvZ2ljX3JldHN0KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pCiB7CisJaW50IHJldCA9IC1FSU5WQUw7CisKIAlpZiAoIXB3cmRtKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCS8qCi0JICogVGhlIHJlZ2lzdGVyIGJpdCBuYW1lcyBiZWxvdyBtYXkgbm90IGNvcnJlc3BvbmQgdG8gdGhlCi0JICogYWN0dWFsIG5hbWVzIG9mIHRoZSBiaXRzIGluIGVhY2ggcG93ZXJkb21haW4ncyByZWdpc3RlciwKLQkgKiBidXQgdGhlIHR5cGUgb2YgdmFsdWUgcmV0dXJuZWQgaXMgdGhlIHNhbWUgZm9yIGVhY2gKLQkgKiBwb3dlcmRvbWFpbi4KLQkgKi8KLQlyZXR1cm4gcHJtX3JlYWRfbW9kX2JpdHNfc2hpZnQocHdyZG0tPnByY21fb2ZmcywgcHdyc3RjdHJsX3JlZ19vZmZzLAotCQkJCSAgICAgICBPTUFQMzQzMF9MT0dJQ1NUQVRFU1RfTUFTSyk7CisJaWYgKGFyY2hfcHdyZG0gJiYgYXJjaF9wd3JkbS0+cHdyZG1fcmVhZF9sb2dpY19yZXRzdCkKKwkJcmV0ID0gYXJjaF9wd3JkbS0+cHdyZG1fcmVhZF9sb2dpY19yZXRzdChwd3JkbSk7CisKKwlyZXR1cm4gcmV0OwogfQogCiAvKioKQEAgLTc0MCw0NiArNjU2LDIxIEBACiAgKi8KIGludCBwd3JkbV9yZWFkX21lbV9wd3JzdChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCB1OCBiYW5rKQogewotCXUzMiBtOworCWludCByZXQgPSAtRUlOVkFMOwogCiAJaWYgKCFwd3JkbSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiByZXQ7CiAKIAlpZiAocHdyZG0tPmJhbmtzIDwgKGJhbmsgKyAxKSkKLQkJcmV0dXJuIC1FRVhJU1Q7CisJCXJldHVybiByZXQ7CiAKIAlpZiAocHdyZG0tPmZsYWdzICYgUFdSRE1fSEFTX01QVV9RVUlSSykKIAkJYmFuayA9IDE7CiAKLQkvKgotCSAqIFRoZSByZWdpc3RlciBiaXQgbmFtZXMgYmVsb3cgbWF5IG5vdCBjb3JyZXNwb25kIHRvIHRoZQotCSAqIGFjdHVhbCBuYW1lcyBvZiB0aGUgYml0cyBpbiBlYWNoIHBvd2VyZG9tYWluJ3MgcmVnaXN0ZXIsCi0JICogYnV0IHRoZSB0eXBlIG9mIHZhbHVlIHJldHVybmVkIGlzIHRoZSBzYW1lIGZvciBlYWNoCi0JICogcG93ZXJkb21haW4uCi0JICovCi0Jc3dpdGNoIChiYW5rKSB7Ci0JY2FzZSAwOgotCQltID0gT01BUF9NRU0wX1NUQVRFU1RfTUFTSzsKLQkJYnJlYWs7Ci0JY2FzZSAxOgotCQltID0gT01BUF9NRU0xX1NUQVRFU1RfTUFTSzsKLQkJYnJlYWs7Ci0JY2FzZSAyOgotCQltID0gT01BUF9NRU0yX1NUQVRFU1RfTUFTSzsKLQkJYnJlYWs7Ci0JY2FzZSAzOgotCQltID0gT01BUF9NRU0zX1NUQVRFU1RfTUFTSzsKLQkJYnJlYWs7Ci0JY2FzZSA0OgotCQltID0gT01BUF9NRU00X1NUQVRFU1RfTUFTSzsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJV0FSTl9PTigxKTsgLyogc2hvdWxkIG5ldmVyIGhhcHBlbiAqLwotCQlyZXR1cm4gLUVFWElTVDsKLQl9CisJaWYgKGFyY2hfcHdyZG0gJiYgYXJjaF9wd3JkbS0+cHdyZG1fcmVhZF9tZW1fcHdyc3QpCisJCXJldCA9IGFyY2hfcHdyZG0tPnB3cmRtX3JlYWRfbWVtX3B3cnN0KHB3cmRtLCBiYW5rKTsKIAotCXJldHVybiBwcm1fcmVhZF9tb2RfYml0c19zaGlmdChwd3JkbS0+cHJjbV9vZmZzLAotCQkJCQkgcHdyc3RzdF9yZWdfb2ZmcywgbSk7CisJcmV0dXJuIHJldDsKIH0KIAogLyoqCkBAIC03OTUsNDMgKzY4NiwyMSBAQAogICovCiBpbnQgcHdyZG1fcmVhZF9wcmV2X21lbV9wd3JzdChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCB1OCBiYW5rKQogewotCXUzMiBtOworCWludCByZXQgPSAtRUlOVkFMOwogCiAJaWYgKCFwd3JkbSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiByZXQ7CiAKIAlpZiAocHdyZG0tPmJhbmtzIDwgKGJhbmsgKyAxKSkKLQkJcmV0dXJuIC1FRVhJU1Q7CisJCXJldHVybiByZXQ7CiAKIAlpZiAocHdyZG0tPmZsYWdzICYgUFdSRE1fSEFTX01QVV9RVUlSSykKIAkJYmFuayA9IDE7CiAKLQkvKgotCSAqIFRoZSByZWdpc3RlciBiaXQgbmFtZXMgYmVsb3cgbWF5IG5vdCBjb3JyZXNwb25kIHRvIHRoZQotCSAqIGFjdHVhbCBuYW1lcyBvZiB0aGUgYml0cyBpbiBlYWNoIHBvd2VyZG9tYWluJ3MgcmVnaXN0ZXIsCi0JICogYnV0IHRoZSB0eXBlIG9mIHZhbHVlIHJldHVybmVkIGlzIHRoZSBzYW1lIGZvciBlYWNoCi0JICogcG93ZXJkb21haW4uCi0JICovCi0Jc3dpdGNoIChiYW5rKSB7Ci0JY2FzZSAwOgotCQltID0gT01BUDM0MzBfTEFTVE1FTTFTVEFURUVOVEVSRURfTUFTSzsKLQkJYnJlYWs7Ci0JY2FzZSAxOgotCQltID0gT01BUDM0MzBfTEFTVE1FTTJTVEFURUVOVEVSRURfTUFTSzsKLQkJYnJlYWs7Ci0JY2FzZSAyOgotCQltID0gT01BUDM0MzBfTEFTVFNIQVJFREwyQ0FDSEVGTEFUU1RBVEVFTlRFUkVEX01BU0s7Ci0JCWJyZWFrOwotCWNhc2UgMzoKLQkJbSA9IE9NQVAzNDMwX0xBU1RMMkZMQVRNRU1TVEFURUVOVEVSRURfTUFTSzsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJV0FSTl9PTigxKTsgLyogc2hvdWxkIG5ldmVyIGhhcHBlbiAqLwotCQlyZXR1cm4gLUVFWElTVDsKLQl9CisJaWYgKGFyY2hfcHdyZG0gJiYgYXJjaF9wd3JkbS0+cHdyZG1fcmVhZF9wcmV2X21lbV9wd3JzdCkKKwkJcmV0ID0gYXJjaF9wd3JkbS0+cHdyZG1fcmVhZF9wcmV2X21lbV9wd3JzdChwd3JkbSwgYmFuayk7CiAKLQlyZXR1cm4gcHJtX3JlYWRfbW9kX2JpdHNfc2hpZnQocHdyZG0tPnByY21fb2ZmcywKLQkJCQkJT01BUDM0MzBfUE1fUFJFUFdTVFNULCBtKTsKKwlyZXR1cm4gcmV0OwogfQogCiAvKioKQEAgLTg0Niw0MyArNzE1LDE4IEBACiAgKi8KIGludCBwd3JkbV9yZWFkX21lbV9yZXRzdChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCB1OCBiYW5rKQogewotCXUzMiBtOworCWludCByZXQgPSAtRUlOVkFMOwogCiAJaWYgKCFwd3JkbSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiByZXQ7CiAKIAlpZiAocHdyZG0tPmJhbmtzIDwgKGJhbmsgKyAxKSkKLQkJcmV0dXJuIC1FRVhJU1Q7CisJCXJldHVybiByZXQ7CiAKLQkvKgotCSAqIFRoZSByZWdpc3RlciBiaXQgbmFtZXMgYmVsb3cgbWF5IG5vdCBjb3JyZXNwb25kIHRvIHRoZQotCSAqIGFjdHVhbCBuYW1lcyBvZiB0aGUgYml0cyBpbiBlYWNoIHBvd2VyZG9tYWluJ3MgcmVnaXN0ZXIsCi0JICogYnV0IHRoZSB0eXBlIG9mIHZhbHVlIHJldHVybmVkIGlzIHRoZSBzYW1lIGZvciBlYWNoCi0JICogcG93ZXJkb21haW4uCi0JICovCi0Jc3dpdGNoIChiYW5rKSB7Ci0JY2FzZSAwOgotCQltID0gT01BUF9NRU0wX1JFVFNUQVRFX01BU0s7Ci0JCWJyZWFrOwotCWNhc2UgMToKLQkJbSA9IE9NQVBfTUVNMV9SRVRTVEFURV9NQVNLOwotCQlicmVhazsKLQljYXNlIDI6Ci0JCW0gPSBPTUFQX01FTTJfUkVUU1RBVEVfTUFTSzsKLQkJYnJlYWs7Ci0JY2FzZSAzOgotCQltID0gT01BUF9NRU0zX1JFVFNUQVRFX01BU0s7Ci0JCWJyZWFrOwotCWNhc2UgNDoKLQkJbSA9IE9NQVBfTUVNNF9SRVRTVEFURV9NQVNLOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlXQVJOX09OKDEpOyAvKiBzaG91bGQgbmV2ZXIgaGFwcGVuICovCi0JCXJldHVybiAtRUVYSVNUOwotCX0KKwlpZiAoYXJjaF9wd3JkbSAmJiBhcmNoX3B3cmRtLT5wd3JkbV9yZWFkX21lbV9yZXRzdCkKKwkJcmV0ID0gYXJjaF9wd3JkbS0+cHdyZG1fcmVhZF9tZW1fcmV0c3QocHdyZG0sIGJhbmspOwogCi0JcmV0dXJuIHBybV9yZWFkX21vZF9iaXRzX3NoaWZ0KHB3cmRtLT5wcmNtX29mZnMsCi0JCQkJCXB3cnN0Y3RybF9yZWdfb2ZmcywgbSk7CisJcmV0dXJuIHJldDsKIH0KIAogLyoqCkBAIC04OTYsOCArNzQwLDEwIEBACiAgKi8KIGludCBwd3JkbV9jbGVhcl9hbGxfcHJldl9wd3JzdChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKQogeworCWludCByZXQgPSAtRUlOVkFMOworCiAJaWYgKCFwd3JkbSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiByZXQ7CiAKIAkvKgogCSAqIFhYWCBzaG91bGQgZ2V0IHRoZSBwb3dlcmRvbWFpbidzIGN1cnJlbnQgc3RhdGUgaGVyZTsKQEAgLTkwNyw5ICs3NTMsMTAgQEAKIAlwcl9kZWJ1ZygicG93ZXJkb21haW46IGNsZWFyaW5nIHByZXZpb3VzIHBvd2VyIHN0YXRlIHJlZyBmb3IgJXNcbiIsCiAJCSBwd3JkbS0+bmFtZSk7CiAKLQlwcm1fd3JpdGVfbW9kX3JlZygwLCBwd3JkbS0+cHJjbV9vZmZzLCBPTUFQMzQzMF9QTV9QUkVQV1NUU1QpOworCWlmIChhcmNoX3B3cmRtICYmIGFyY2hfcHdyZG0tPnB3cmRtX2NsZWFyX2FsbF9wcmV2X3B3cnN0KQorCQlyZXQgPSBhcmNoX3B3cmRtLT5wd3JkbV9jbGVhcl9hbGxfcHJldl9wd3JzdChwd3JkbSk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiAvKioKQEAgLTkyNSwxOSArNzcyLDIxIEBACiAgKi8KIGludCBwd3JkbV9lbmFibGVfaGR3cl9zYXIoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSkKIHsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKwogCWlmICghcHdyZG0pCi0JCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gcmV0OwogCiAJaWYgKCEocHdyZG0tPmZsYWdzICYgUFdSRE1fSEFTX0hEV1JfU0FSKSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiByZXQ7CiAKIAlwcl9kZWJ1ZygicG93ZXJkb21haW46ICVzOiBzZXR0aW5nIFNBVkVBTkRSRVNUT1JFIGJpdFxuIiwKIAkJIHB3cmRtLT5uYW1lKTsKIAotCXBybV9ybXdfbW9kX3JlZ19iaXRzKDAsIDEgPDwgT01BUDM0MzBFUzJfU0FWRUFORFJFU1RPUkVfU0hJRlQsCi0JCQkgICAgIHB3cmRtLT5wcmNtX29mZnMsIHB3cnN0Y3RybF9yZWdfb2Zmcyk7CisJaWYgKGFyY2hfcHdyZG0gJiYgYXJjaF9wd3JkbS0+cHdyZG1fZW5hYmxlX2hkd3Jfc2FyKQorCQlyZXQgPSBhcmNoX3B3cmRtLT5wd3JkbV9lbmFibGVfaGR3cl9zYXIocHdyZG0pOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogLyoqCkBAIC05NTMsMTkgKzgwMiwyMSBAQAogICovCiBpbnQgcHdyZG1fZGlzYWJsZV9oZHdyX3NhcihzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKQogeworCWludCByZXQgPSAtRUlOVkFMOworCiAJaWYgKCFwd3JkbSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiByZXQ7CiAKIAlpZiAoIShwd3JkbS0+ZmxhZ3MgJiBQV1JETV9IQVNfSERXUl9TQVIpKQotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIHJldDsKIAogCXByX2RlYnVnKCJwb3dlcmRvbWFpbjogJXM6IGNsZWFyaW5nIFNBVkVBTkRSRVNUT1JFIGJpdFxuIiwKIAkJIHB3cmRtLT5uYW1lKTsKIAotCXBybV9ybXdfbW9kX3JlZ19iaXRzKDEgPDwgT01BUDM0MzBFUzJfU0FWRUFORFJFU1RPUkVfU0hJRlQsIDAsCi0JCQkgICAgIHB3cmRtLT5wcmNtX29mZnMsIHB3cnN0Y3RybF9yZWdfb2Zmcyk7CisJaWYgKGFyY2hfcHdyZG0gJiYgYXJjaF9wd3JkbS0+cHdyZG1fZGlzYWJsZV9oZHdyX3NhcikKKwkJcmV0ID0gYXJjaF9wd3JkbS0+cHdyZG1fZGlzYWJsZV9oZHdyX3Nhcihwd3JkbSk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiAvKioKQEAgLTk5Miw2ICs4NDMsOCBAQAogICovCiBpbnQgcHdyZG1fc2V0X2xvd3B3cnN0Y2hhbmdlKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pCiB7CisJaW50IHJldCA9IC1FSU5WQUw7CisKIAlpZiAoIXB3cmRtKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtMTAwMSwxMSArODU0LDEwIEBACiAJcHJfZGVidWcoInBvd2VyZG9tYWluOiAlczogc2V0dGluZyBMT1dQT1dFUlNUQVRFQ0hBTkdFIGJpdFxuIiwKIAkJIHB3cmRtLT5uYW1lKTsKIAotCXBybV9ybXdfbW9kX3JlZ19iaXRzKE9NQVA0NDMwX0xPV1BPV0VSU1RBVEVDSEFOR0VfTUFTSywKLQkJCSAgICAgKDEgPDwgT01BUDQ0MzBfTE9XUE9XRVJTVEFURUNIQU5HRV9TSElGVCksCi0JCQkgICAgIHB3cmRtLT5wcmNtX29mZnMsIHB3cnN0Y3RybF9yZWdfb2Zmcyk7CisJaWYgKGFyY2hfcHdyZG0gJiYgYXJjaF9wd3JkbS0+cHdyZG1fc2V0X2xvd3B3cnN0Y2hhbmdlKQorCQlyZXQgPSBhcmNoX3B3cmRtLT5wd3JkbV9zZXRfbG93cHdyc3RjaGFuZ2UocHdyZG0pOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogLyoqCkBAIC0xMDIwLDMyICs4NzIsMTUgQEAKICAqLwogaW50IHB3cmRtX3dhaXRfdHJhbnNpdGlvbihzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKQogewotCXUzMiBjID0gMDsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKIAogCWlmICghcHdyZG0pCiAJCXJldHVybiAtRUlOVkFMOwogCi0JLyoKLQkgKiBSRVZJU0lUOiBwd3JkbV93YWl0X3RyYW5zaXRpb24oKSBtYXkgYmUgYmV0dGVyIGltcGxlbWVudGVkCi0JICogdmlhIGEgY2FsbGJhY2sgYW5kIGEgcGVyaW9kaWMgdGltZXIgY2hlY2sgLS0gaG93IGxvbmcgZG8gd2UgZXhwZWN0Ci0JICogcG93ZXJkb21haW4gdHJhbnNpdGlvbnMgdG8gdGFrZT8KLQkgKi8KKwlpZiAoYXJjaF9wd3JkbSAmJiBhcmNoX3B3cmRtLT5wd3JkbV93YWl0X3RyYW5zaXRpb24pCisJCXJldCA9IGFyY2hfcHdyZG0tPnB3cmRtX3dhaXRfdHJhbnNpdGlvbihwd3JkbSk7CiAKLQkvKiBYWFggSXMgdGhpcyB1ZGVsYXkoKSB2YWx1ZSBtZWFuaW5nZnVsPyAqLwotCXdoaWxlICgocHJtX3JlYWRfbW9kX3JlZyhwd3JkbS0+cHJjbV9vZmZzLCBwd3JzdHN0X3JlZ19vZmZzKSAmCi0JCU9NQVBfSU5UUkFOU0lUSU9OX01BU0spICYmCi0JICAgICAgIChjKysgPCBQV1JETV9UUkFOU0lUSU9OX0JBSUxPVVQpKQotCQkJdWRlbGF5KDEpOwotCi0JaWYgKGMgPiBQV1JETV9UUkFOU0lUSU9OX0JBSUxPVVQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJwb3dlcmRvbWFpbjogd2FpdGVkIHRvbyBsb25nIGZvciAiCi0JCSAgICAgICAicG93ZXJkb21haW4gJXMgdG8gY29tcGxldGUgdHJhbnNpdGlvblxuIiwgcHdyZG0tPm5hbWUpOwotCQlyZXR1cm4gLUVBR0FJTjsKLQl9Ci0KLQlwcl9kZWJ1ZygicG93ZXJkb21haW46IGNvbXBsZXRlZCB0cmFuc2l0aW9uIGluICVkIGxvb3BzXG4iLCBjKTsKLQotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIGludCBwd3JkbV9zdGF0ZV9zd2l0Y2goc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSkKQEAgLTEwNzUsMyArOTEwLDMxIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogcHdyZG1fZ2V0X2NvbnRleHRfbG9zc19jb3VudCAtIGdldCBwb3dlcmRvbWFpbidzIGNvbnRleHQgbG9zcyBjb3VudAorICogQHB3cmRtOiBzdHJ1Y3QgcG93ZXJkb21haW4gKiB0byB3YWl0IGZvcgorICoKKyAqIENvbnRleHQgbG9zcyBjb3VudCBpcyB0aGUgc3VtIG9mIHBvd2VyZG9tYWluIG9mZi1tb2RlIGNvdW50ZXIsIHRoZQorICogbG9naWMgb2ZmIGNvdW50ZXIgYW5kIHRoZSBwZXItYmFuayBtZW1vcnkgb2ZmIGNvdW50ZXIuICBSZXR1cm5zIDAKKyAqIChhbmQgV0FSTnMpIHVwb24gZXJyb3IsIG90aGVyd2lzZSwgcmV0dXJucyB0aGUgY29udGV4dCBsb3NzIGNvdW50LgorICovCit1MzIgcHdyZG1fZ2V0X2NvbnRleHRfbG9zc19jb3VudChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKQoreworCWludCBpLCBjb3VudDsKKworCWlmICghcHdyZG0pIHsKKwkJV0FSTigxLCAicG93ZXJkb21haW46ICVzOiBwd3JkbSBpcyBudWxsXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAwOworCX0KKworCWNvdW50ID0gcHdyZG0tPnN0YXRlX2NvdW50ZXJbUFdSRE1fUE9XRVJfT0ZGXTsKKwljb3VudCArPSBwd3JkbS0+cmV0X2xvZ2ljX29mZl9jb3VudGVyOworCisJZm9yIChpID0gMDsgaSA8IHB3cmRtLT5iYW5rczsgaSsrKQorCQljb3VudCArPSBwd3JkbS0+cmV0X21lbV9vZmZfY291bnRlcltpXTsKKworCXByX2RlYnVnKCJwb3dlcmRvbWFpbjogJXM6IGNvbnRleHQgbG9zcyBjb3VudCA9ICV1XG4iLAorCQkgcHdyZG0tPm5hbWUsIGNvdW50KTsKKworCXJldHVybiBjb3VudDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW4uaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjY0MzFlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbi5oCkBAIC0wLDAgKzEsMjMzIEBACisvKgorICogT01BUDIvMy80IHBvd2VyZG9tYWluIGNvbnRyb2wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCwgMjAxMCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTAgTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBQYXVsIFdhbG1zbGV5CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBYWFggVGhpcyBzaG91bGQgYmUgbW92ZWQgdG8gdGhlIG1hY2gtb21hcDIvIGRpcmVjdG9yeSBhdCB0aGUgZWFybGllc3QKKyAqIG9wcG9ydHVuaXR5LgorICovCisKKyNpZm5kZWYgX19BUkNIX0FSTV9NQUNIX09NQVAyX1BPV0VSRE9NQUlOX0gKKyNkZWZpbmUgX19BUkNIX0FSTV9NQUNIX09NQVAyX1BPV0VSRE9NQUlOX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorCisjaW5jbHVkZSA8bGludXgvYXRvbWljLmg+CisKKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgorCisvKiBQb3dlcmRvbWFpbiBiYXNpYyBwb3dlciBzdGF0ZXMgKi8KKyNkZWZpbmUgUFdSRE1fUE9XRVJfT0ZGCQkweDAKKyNkZWZpbmUgUFdSRE1fUE9XRVJfUkVUCQkweDEKKyNkZWZpbmUgUFdSRE1fUE9XRVJfSU5BQ1RJVkUJMHgyCisjZGVmaW5lIFBXUkRNX1BPV0VSX09OCQkweDMKKworI2RlZmluZSBQV1JETV9NQVhfUFdSU1RTCTQKKworLyogUG93ZXJkb21haW4gYWxsb3dhYmxlIHN0YXRlIGJpdGZpZWxkcyAqLworI2RlZmluZSBQV1JTVFNfT04JCSgxIDw8IFBXUkRNX1BPV0VSX09OKQorI2RlZmluZSBQV1JTVFNfT0ZGCQkoMSA8PCBQV1JETV9QT1dFUl9PRkYpCisjZGVmaW5lIFBXUlNUU19PRkZfT04JCSgoMSA8PCBQV1JETV9QT1dFUl9PRkYpIHwgXAorCQkJCSAoMSA8PCBQV1JETV9QT1dFUl9PTikpCisKKyNkZWZpbmUgUFdSU1RTX09GRl9SRVQJCSgoMSA8PCBQV1JETV9QT1dFUl9PRkYpIHwgXAorCQkJCSAoMSA8PCBQV1JETV9QT1dFUl9SRVQpKQorCisjZGVmaW5lIFBXUlNUU19SRVRfT04JCSgoMSA8PCBQV1JETV9QT1dFUl9SRVQpIHwgXAorCQkJCSAoMSA8PCBQV1JETV9QT1dFUl9PTikpCisKKyNkZWZpbmUgUFdSU1RTX09GRl9SRVRfT04JKFBXUlNUU19PRkZfUkVUIHwgKDEgPDwgUFdSRE1fUE9XRVJfT04pKQorCisKKy8qIFBvd2VyZG9tYWluIGZsYWdzICovCisjZGVmaW5lIFBXUkRNX0hBU19IRFdSX1NBUgkoMSA8PCAwKSAvKiBoYXJkd2FyZSBzYXZlLWFuZC1yZXN0b3JlIHN1cHBvcnQgKi8KKyNkZWZpbmUgUFdSRE1fSEFTX01QVV9RVUlSSwkoMSA8PCAxKSAvKiBNUFUgcHdyIGRvbWFpbiBoYXMgTUVNIGJhbmsgMCBiaXRzCisJCQkJCSAgKiBpbiBNRU0gYmFuayAxIHBvc2l0aW9uLiBUaGlzIGlzCisJCQkJCSAgKiB0cnVlIGZvciBPTUFQMzQzMAorCQkJCQkgICovCisjZGVmaW5lIFBXUkRNX0hBU19MT1dQT1dFUlNUQVRFQ0hBTkdFCSgxIDw8IDIpIC8qCisJCQkJCQkgICogc3VwcG9ydCB0byB0cmFuc2l0aW9uIGZyb20gYQorCQkJCQkJICAqIHNsZWVwIHN0YXRlIHRvIGEgbG93ZXIgc2xlZXAKKwkJCQkJCSAgKiBzdGF0ZSB3aXRob3V0IHdha2luZyB1cCB0aGUKKwkJCQkJCSAgKiBwb3dlcmRvbWFpbgorCQkJCQkJICAqLworCisvKgorICogTnVtYmVyIG9mIG1lbW9yeSBiYW5rcyB0aGF0IGFyZSBwb3dlci1jb250cm9sbGFibGUuCU9uIE9NQVA0NDMwLCB0aGUKKyAqIG1heGltdW0gaXMgNS4KKyAqLworI2RlZmluZSBQV1JETV9NQVhfTUVNX0JBTktTCTUKKworLyoKKyAqIE1heGltdW0gbnVtYmVyIG9mIGNsb2NrZG9tYWlucyB0aGF0IGNhbiBiZSBhc3NvY2lhdGVkIHdpdGggYSBwb3dlcmRvbWFpbi4KKyAqIENPUkUgcG93ZXJkb21haW4gb24gT01BUDQgaXMgdGhlIHdvcnN0IGNhc2UKKyAqLworI2RlZmluZSBQV1JETV9NQVhfQ0xLRE1TCTkKKworLyogWFhYIEEgY29tcGxldGVseSBhcmJpdHJhcnkgbnVtYmVyLiBXaGF0IGlzIHJlYXNvbmFibGUgaGVyZT8gKi8KKyNkZWZpbmUgUFdSRE1fVFJBTlNJVElPTl9CQUlMT1VUIDEwMDAwMAorCitzdHJ1Y3QgY2xvY2tkb21haW47CitzdHJ1Y3QgcG93ZXJkb21haW47CisKKy8qKgorICogc3RydWN0IHBvd2VyZG9tYWluIC0gT01BUCBwb3dlcmRvbWFpbgorICogQG5hbWU6IFBvd2VyZG9tYWluIG5hbWUKKyAqIEBvbWFwX2NoaXA6IHJlcHJlc2VudHMgdGhlIE9NQVAgY2hpcCB0eXBlcyBjb250YWluaW5nIHRoaXMgcHdyZG0KKyAqIEBwcmNtX29mZnM6IHRoZSBhZGRyZXNzIG9mZnNldCBmcm9tIENNX0JBU0UvUFJNX0JBU0UKKyAqIEBwcmNtX3BhcnRpdGlvbjogKE9NQVA0IG9ubHkpIHRoZSBQUkNNIHBhcnRpdGlvbiBJRCBjb250YWluaW5nIEBwcmNtX29mZnMKKyAqIEBwd3JzdHM6IFBvc3NpYmxlIHBvd2VyZG9tYWluIHBvd2VyIHN0YXRlcworICogQHB3cnN0c19sb2dpY19yZXQ6IFBvc3NpYmxlIGxvZ2ljIHBvd2VyIHN0YXRlcyB3aGVuIHB3cmRtIGluIFJFVEVOVElPTgorICogQGZsYWdzOiBQb3dlcmRvbWFpbiBmbGFncworICogQGJhbmtzOiBOdW1iZXIgb2Ygc29mdHdhcmUtY29udHJvbGxhYmxlIG1lbW9yeSBiYW5rcyBpbiB0aGlzIHBvd2VyZG9tYWluCisgKiBAcHdyc3RzX21lbV9yZXQ6IFBvc3NpYmxlIG1lbW9yeSBiYW5rIHB3cnN0YXRlcyB3aGVuIHB3cmRtIGluIFJFVEVOVElPTgorICogQHB3cnN0c19tZW1fb246IFBvc3NpYmxlIG1lbW9yeSBiYW5rIHB3cnN0YXRlcyB3aGVuIHB3cmRtIGluIE9OCisgKiBAcHdyZG1fY2xrZG1zOiBDbG9ja2RvbWFpbnMgaW4gdGhpcyBwb3dlcmRvbWFpbgorICogQG5vZGU6IGxpc3RfaGVhZCBsaW5raW5nIGFsbCBwb3dlcmRvbWFpbnMKKyAqIEBzdGF0ZToKKyAqIEBzdGF0ZV9jb3VudGVyOgorICogQHRpbWVyOgorICogQHN0YXRlX3RpbWVyOgorICoKKyAqIEBwcmNtX3BhcnRpdGlvbiBwb3NzaWJsZSB2YWx1ZXMgYXJlIGRlZmluZWQgaW4gbWFjaC1vbWFwMi9wcmNtNDR4eC5oLgorICovCitzdHJ1Y3QgcG93ZXJkb21haW4geworCWNvbnN0IGNoYXIgKm5hbWU7CisJY29uc3Qgc3RydWN0IG9tYXBfY2hpcF9pZCBvbWFwX2NoaXA7CisJY29uc3QgczE2IHByY21fb2ZmczsKKwljb25zdCB1OCBwd3JzdHM7CisJY29uc3QgdTggcHdyc3RzX2xvZ2ljX3JldDsKKwljb25zdCB1OCBmbGFnczsKKwljb25zdCB1OCBiYW5rczsKKwljb25zdCB1OCBwd3JzdHNfbWVtX3JldFtQV1JETV9NQVhfTUVNX0JBTktTXTsKKwljb25zdCB1OCBwd3JzdHNfbWVtX29uW1BXUkRNX01BWF9NRU1fQkFOS1NdOworCWNvbnN0IHU4IHByY21fcGFydGl0aW9uOworCXN0cnVjdCBjbG9ja2RvbWFpbiAqcHdyZG1fY2xrZG1zW1BXUkRNX01BWF9DTEtETVNdOworCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKKwlpbnQgc3RhdGU7CisJdW5zaWduZWQgc3RhdGVfY291bnRlcltQV1JETV9NQVhfUFdSU1RTXTsKKwl1bnNpZ25lZCByZXRfbG9naWNfb2ZmX2NvdW50ZXI7CisJdW5zaWduZWQgcmV0X21lbV9vZmZfY291bnRlcltQV1JETV9NQVhfTUVNX0JBTktTXTsKKworI2lmZGVmIENPTkZJR19QTV9ERUJVRworCXM2NCB0aW1lcjsKKwlzNjQgc3RhdGVfdGltZXJbUFdSRE1fTUFYX1BXUlNUU107CisjZW5kaWYKK307CisKKy8qKgorICogc3RydWN0IHB3cmRtX29wcyAtIEFyY2ggc3BlY2ZpYyBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbnMKKyAqIEBwd3JkbV9zZXRfbmV4dF9wd3JzdDogU2V0IHRoZSB0YXJnZXQgcG93ZXIgc3RhdGUgZm9yIGEgcGQKKyAqIEBwd3JkbV9yZWFkX25leHRfcHdyc3Q6IFJlYWQgdGhlIHRhcmdldCBwb3dlciBzdGF0ZSBzZXQgZm9yIGEgcGQKKyAqIEBwd3JkbV9yZWFkX3B3cnN0OiBSZWFkIHRoZSBjdXJyZW50IHBvd2VyIHN0YXRlIG9mIGEgcGQKKyAqIEBwd3JkbV9yZWFkX3ByZXZfcHdyc3Q6IFJlYWQgdGhlIHByZXYgcG93ZXIgc3RhdGUgZW50ZXJlZCBieSB0aGUgcGQKKyAqIEBwd3JkbV9zZXRfbG9naWNfcmV0c3Q6IFNldCB0aGUgbG9naWMgc3RhdGUgaW4gUkVUIGZvciBhIHBkCisgKiBAcHdyZG1fc2V0X21lbV9vbnN0OiBTZXQgdGhlIE1lbW9yeSBzdGF0ZSBpbiBPTiBmb3IgYSBwZAorICogQHB3cmRtX3NldF9tZW1fcmV0c3Q6IFNldCB0aGUgTWVtb3J5IHN0YXRlIGluIFJFVCBmb3IgYSBwZAorICogQHB3cmRtX3JlYWRfbG9naWNfcHdyc3Q6IFJlYWQgdGhlIGN1cnJlbnQgbG9naWMgc3RhdGUgb2YgYSBwZAorICogQHB3cmRtX3JlYWRfcHJldl9sb2dpY19wd3JzdDogUmVhZCB0aGUgcHJldmlvdXMgbG9naWMgc3RhdGUgZW50ZXJlZCBieSBhIHBkCisgKiBAcHdyZG1fcmVhZF9sb2dpY19yZXRzdDogUmVhZCB0aGUgbG9naWMgc3RhdGUgaW4gUkVUIGZvciBhIHBkCisgKiBAcHdyZG1fcmVhZF9tZW1fcHdyc3Q6IFJlYWQgdGhlIGN1cnJlbnQgbWVtb3J5IHN0YXRlIG9mIGEgcGQKKyAqIEBwd3JkbV9yZWFkX3ByZXZfbWVtX3B3cnN0OiBSZWFkIHRoZSBwcmV2aW91cyBtZW1vcnkgc3RhdGUgZW50ZXJlZCBieSBhIHBkCisgKiBAcHdyZG1fcmVhZF9tZW1fcmV0c3Q6IFJlYWQgdGhlIG1lbW9yeSBzdGF0ZSBpbiBSRVQgZm9yIGEgcGQKKyAqIEBwd3JkbV9jbGVhcl9hbGxfcHJldl9wd3JzdDogQ2xlYXIgYWxsIHByZXZpb3VzIHBvd2VyIHN0YXRlcyBsb2dnZWQgZm9yIGEgcGQKKyAqIEBwd3JkbV9lbmFibGVfaGR3cl9zYXI6IEVuYWJsZSBIYXJkd2FyZSBTYXZlLVJlc3RvcmUgZmVhdHVyZSBmb3IgdGhlIHBkCisgKiBAcHdyZG1fZGlzYWJsZV9oZHdyX3NhcjogRGlzYWJsZSBIYXJkd2FyZSBTYXZlLVJlc3RvcmUgZmVhdHVyZSBmb3IgYSBwZAorICogQHB3cmRtX3NldF9sb3dwd3JzdGNoYW5nZTogRW5hYmxlIHBkIHRyYW5zaXRpb25zIGZyb20gYSBzaGFsbG93IHRvIGRlZXAgc2xlZXAKKyAqIEBwd3JkbV93YWl0X3RyYW5zaXRpb246IFdhaXQgZm9yIGEgcGQgc3RhdGUgdHJhbnNpdGlvbiB0byBjb21wbGV0ZQorICovCitzdHJ1Y3QgcHdyZG1fb3BzIHsKKwlpbnQJKCpwd3JkbV9zZXRfbmV4dF9wd3JzdCkoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgdTggcHdyc3QpOworCWludAkoKnB3cmRtX3JlYWRfbmV4dF9wd3JzdCkoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSk7CisJaW50CSgqcHdyZG1fcmVhZF9wd3JzdCkoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSk7CisJaW50CSgqcHdyZG1fcmVhZF9wcmV2X3B3cnN0KShzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKTsKKwlpbnQJKCpwd3JkbV9zZXRfbG9naWNfcmV0c3QpKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0sIHU4IHB3cnN0KTsKKwlpbnQJKCpwd3JkbV9zZXRfbWVtX29uc3QpKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0sIHU4IGJhbmssIHU4IHB3cnN0KTsKKwlpbnQJKCpwd3JkbV9zZXRfbWVtX3JldHN0KShzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCB1OCBiYW5rLCB1OCBwd3JzdCk7CisJaW50CSgqcHdyZG1fcmVhZF9sb2dpY19wd3JzdCkoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSk7CisJaW50CSgqcHdyZG1fcmVhZF9wcmV2X2xvZ2ljX3B3cnN0KShzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKTsKKwlpbnQJKCpwd3JkbV9yZWFkX2xvZ2ljX3JldHN0KShzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKTsKKwlpbnQJKCpwd3JkbV9yZWFkX21lbV9wd3JzdCkoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgdTggYmFuayk7CisJaW50CSgqcHdyZG1fcmVhZF9wcmV2X21lbV9wd3JzdCkoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgdTggYmFuayk7CisJaW50CSgqcHdyZG1fcmVhZF9tZW1fcmV0c3QpKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0sIHU4IGJhbmspOworCWludAkoKnB3cmRtX2NsZWFyX2FsbF9wcmV2X3B3cnN0KShzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKTsKKwlpbnQJKCpwd3JkbV9lbmFibGVfaGR3cl9zYXIpKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pOworCWludAkoKnB3cmRtX2Rpc2FibGVfaGR3cl9zYXIpKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pOworCWludAkoKnB3cmRtX3NldF9sb3dwd3JzdGNoYW5nZSkoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSk7CisJaW50CSgqcHdyZG1fd2FpdF90cmFuc2l0aW9uKShzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKTsKK307CisKK3ZvaWQgcHdyZG1fZndfaW5pdCh2b2lkKTsKK3ZvaWQgcHdyZG1faW5pdChzdHJ1Y3QgcG93ZXJkb21haW4gKipwd3JkbV9saXN0LCBzdHJ1Y3QgcHdyZG1fb3BzICpjdXN0b21fZnVuY3MpOworCitzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtX2xvb2t1cChjb25zdCBjaGFyICpuYW1lKTsKKworaW50IHB3cmRtX2Zvcl9lYWNoKGludCAoKmZuKShzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCB2b2lkICp1c2VyKSwKKwkJCXZvaWQgKnVzZXIpOworaW50IHB3cmRtX2Zvcl9lYWNoX25vbG9jayhpbnQgKCpmbikoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgdm9pZCAqdXNlciksCisJCQl2b2lkICp1c2VyKTsKKworaW50IHB3cmRtX2FkZF9jbGtkbShzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCBzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKTsKK2ludCBwd3JkbV9kZWxfY2xrZG0oc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSk7CitpbnQgcHdyZG1fZm9yX2VhY2hfY2xrZG0oc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwKKwkJCSBpbnQgKCpmbikoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwKKwkJCQkgICBzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKSk7CisKK2ludCBwd3JkbV9nZXRfbWVtX2JhbmtfY291bnQoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSk7CisKK2ludCBwd3JkbV9zZXRfbmV4dF9wd3JzdChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCB1OCBwd3JzdCk7CitpbnQgcHdyZG1fcmVhZF9uZXh0X3B3cnN0KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pOworaW50IHB3cmRtX3JlYWRfcHdyc3Qoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSk7CitpbnQgcHdyZG1fcmVhZF9wcmV2X3B3cnN0KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pOworaW50IHB3cmRtX2NsZWFyX2FsbF9wcmV2X3B3cnN0KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pOworCitpbnQgcHdyZG1fc2V0X2xvZ2ljX3JldHN0KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0sIHU4IHB3cnN0KTsKK2ludCBwd3JkbV9zZXRfbWVtX29uc3Qoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgdTggYmFuaywgdTggcHdyc3QpOworaW50IHB3cmRtX3NldF9tZW1fcmV0c3Qoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgdTggYmFuaywgdTggcHdyc3QpOworCitpbnQgcHdyZG1fcmVhZF9sb2dpY19wd3JzdChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKTsKK2ludCBwd3JkbV9yZWFkX3ByZXZfbG9naWNfcHdyc3Qoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSk7CitpbnQgcHdyZG1fcmVhZF9sb2dpY19yZXRzdChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKTsKK2ludCBwd3JkbV9yZWFkX21lbV9wd3JzdChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCB1OCBiYW5rKTsKK2ludCBwd3JkbV9yZWFkX3ByZXZfbWVtX3B3cnN0KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0sIHU4IGJhbmspOworaW50IHB3cmRtX3JlYWRfbWVtX3JldHN0KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0sIHU4IGJhbmspOworCitpbnQgcHdyZG1fZW5hYmxlX2hkd3Jfc2FyKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pOworaW50IHB3cmRtX2Rpc2FibGVfaGR3cl9zYXIoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSk7Citib29sIHB3cmRtX2hhc19oZHdyX3NhcihzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKTsKKworaW50IHB3cmRtX3dhaXRfdHJhbnNpdGlvbihzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKTsKKworaW50IHB3cmRtX3N0YXRlX3N3aXRjaChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKTsKK2ludCBwd3JkbV9jbGtkbV9zdGF0ZV9zd2l0Y2goc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSk7CitpbnQgcHdyZG1fcHJlX3RyYW5zaXRpb24odm9pZCk7CitpbnQgcHdyZG1fcG9zdF90cmFuc2l0aW9uKHZvaWQpOworaW50IHB3cmRtX3NldF9sb3dwd3JzdGNoYW5nZShzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKTsKK3UzMiBwd3JkbV9nZXRfY29udGV4dF9sb3NzX2NvdW50KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pOworCitleHRlcm4gdm9pZCBvbWFwMnh4eF9wb3dlcmRvbWFpbnNfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIG9tYXAzeHh4X3Bvd2VyZG9tYWluc19pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgb21hcDQ0eHhfcG93ZXJkb21haW5zX2luaXQodm9pZCk7CisKK2V4dGVybiBzdHJ1Y3QgcHdyZG1fb3BzIG9tYXAyX3B3cmRtX29wZXJhdGlvbnM7CitleHRlcm4gc3RydWN0IHB3cmRtX29wcyBvbWFwM19wd3JkbV9vcGVyYXRpb25zOworZXh0ZXJuIHN0cnVjdCBwd3JkbV9vcHMgb21hcDRfcHdyZG1fb3BlcmF0aW9uczsKKworLyogQ29tbW9uIEludGVybmFsIGZ1bmN0aW9ucyB1c2VkIGFjcm9zcyBPTUFQIHJldidzICovCitleHRlcm4gdTMyIG9tYXAyX3B3cmRtX2dldF9tZW1fYmFua19vbnN0YXRlX21hc2sodTggYmFuayk7CitleHRlcm4gdTMyIG9tYXAyX3B3cmRtX2dldF9tZW1fYmFua19yZXRzdF9tYXNrKHU4IGJhbmspOworZXh0ZXJuIHUzMiBvbWFwMl9wd3JkbV9nZXRfbWVtX2Jhbmtfc3RzdF9tYXNrKHU4IGJhbmspOworCitleHRlcm4gc3RydWN0IHBvd2VyZG9tYWluIHdrdXBfb21hcDJfcHdyZG07CitleHRlcm4gc3RydWN0IHBvd2VyZG9tYWluIGdmeF9vbWFwMl9wd3JkbTsKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW4yeHh4XzN4eHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW4yeHh4XzN4eHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTIzMzg5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbjJ4eHhfM3h4eC5jCkBAIC0wLDAgKzEsMjQyIEBACisvKgorICogT01BUDIgYW5kIE9NQVAzIHBvd2VyZG9tYWluIGNvbnRyb2wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBEZXJpdmVkIGZyb20gbWFjaC1vbWFwMi9wb3dlcmRvbWFpbi5jIHdyaXR0ZW4gYnkgUGF1bCBXYWxtc2xleQorICogUmFqZW5kcmEgTmF5YWsgPHJuYXlha0B0aS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNpbmNsdWRlIDxwbGF0L3ByY20uaD4KKworI2luY2x1ZGUgInBvd2VyZG9tYWluLmgiCisjaW5jbHVkZSAicHJtLXJlZ2JpdHMtMzR4eC5oIgorI2luY2x1ZGUgInBybS5oIgorI2luY2x1ZGUgInBybS1yZWdiaXRzLTI0eHguaCIKKyNpbmNsdWRlICJwcm0tcmVnYml0cy0zNHh4LmgiCisKKworLyogQ29tbW9uIGZ1bmN0aW9ucyBhY3Jvc3MgT01BUDIgYW5kIE9NQVAzICovCitzdGF0aWMgaW50IG9tYXAyX3B3cmRtX3NldF9uZXh0X3B3cnN0KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0sIHU4IHB3cnN0KQoreworCW9tYXAyX3BybV9ybXdfbW9kX3JlZ19iaXRzKE9NQVBfUE9XRVJTVEFURV9NQVNLLAorCQkJCShwd3JzdCA8PCBPTUFQX1BPV0VSU1RBVEVfU0hJRlQpLAorCQkJCXB3cmRtLT5wcmNtX29mZnMsIE9NQVAyX1BNX1BXU1RDVFJMKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvbWFwMl9wd3JkbV9yZWFkX25leHRfcHdyc3Qoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSkKK3sKKwlyZXR1cm4gb21hcDJfcHJtX3JlYWRfbW9kX2JpdHNfc2hpZnQocHdyZG0tPnByY21fb2ZmcywKKwkJCQkJICAgICBPTUFQMl9QTV9QV1NUQ1RSTCwKKwkJCQkJICAgICBPTUFQX1BPV0VSU1RBVEVfTUFTSyk7Cit9CisKK3N0YXRpYyBpbnQgb21hcDJfcHdyZG1fcmVhZF9wd3JzdChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKQoreworCXJldHVybiBvbWFwMl9wcm1fcmVhZF9tb2RfYml0c19zaGlmdChwd3JkbS0+cHJjbV9vZmZzLAorCQkJCQkgICAgIE9NQVAyX1BNX1BXU1RTVCwKKwkJCQkJICAgICBPTUFQX1BPV0VSU1RBVEVTVF9NQVNLKTsKK30KKworc3RhdGljIGludCBvbWFwMl9wd3JkbV9zZXRfbWVtX29uc3Qoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgdTggYmFuaywKKwkJCQkJCQkJdTggcHdyc3QpCit7CisJdTMyIG07CisKKwltID0gb21hcDJfcHdyZG1fZ2V0X21lbV9iYW5rX29uc3RhdGVfbWFzayhiYW5rKTsKKworCW9tYXAyX3BybV9ybXdfbW9kX3JlZ19iaXRzKG0sIChwd3JzdCA8PCBfX2ZmcyhtKSksIHB3cmRtLT5wcmNtX29mZnMsCisJCQkJICAgT01BUDJfUE1fUFdTVENUUkwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb21hcDJfcHdyZG1fc2V0X21lbV9yZXRzdChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCB1OCBiYW5rLAorCQkJCQkJCQl1OCBwd3JzdCkKK3sKKwl1MzIgbTsKKworCW0gPSBvbWFwMl9wd3JkbV9nZXRfbWVtX2JhbmtfcmV0c3RfbWFzayhiYW5rKTsKKworCW9tYXAyX3BybV9ybXdfbW9kX3JlZ19iaXRzKG0sIChwd3JzdCA8PCBfX2ZmcyhtKSksIHB3cmRtLT5wcmNtX29mZnMsCisJCQkJICAgT01BUDJfUE1fUFdTVENUUkwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb21hcDJfcHdyZG1fcmVhZF9tZW1fcHdyc3Qoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgdTggYmFuaykKK3sKKwl1MzIgbTsKKworCW0gPSBvbWFwMl9wd3JkbV9nZXRfbWVtX2Jhbmtfc3RzdF9tYXNrKGJhbmspOworCisJcmV0dXJuIG9tYXAyX3BybV9yZWFkX21vZF9iaXRzX3NoaWZ0KHB3cmRtLT5wcmNtX29mZnMsIE9NQVAyX1BNX1BXU1RTVCwKKwkJCQkJICAgICBtKTsKK30KKworc3RhdGljIGludCBvbWFwMl9wd3JkbV9yZWFkX21lbV9yZXRzdChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCB1OCBiYW5rKQoreworCXUzMiBtOworCisJbSA9IG9tYXAyX3B3cmRtX2dldF9tZW1fYmFua19yZXRzdF9tYXNrKGJhbmspOworCisJcmV0dXJuIG9tYXAyX3BybV9yZWFkX21vZF9iaXRzX3NoaWZ0KHB3cmRtLT5wcmNtX29mZnMsCisJCQkJCSAgICAgT01BUDJfUE1fUFdTVENUUkwsIG0pOworfQorCitzdGF0aWMgaW50IG9tYXAyX3B3cmRtX3NldF9sb2dpY19yZXRzdChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCB1OCBwd3JzdCkKK3sKKwl1MzIgdjsKKworCXYgPSBwd3JzdCA8PCBfX2ZmcyhPTUFQMzQzMF9MT0dJQ0wxQ0FDSEVSRVRTVEFURV9NQVNLKTsKKwlvbWFwMl9wcm1fcm13X21vZF9yZWdfYml0cyhPTUFQMzQzMF9MT0dJQ0wxQ0FDSEVSRVRTVEFURV9NQVNLLCB2LAorCQkJCSAgIHB3cmRtLT5wcmNtX29mZnMsIE9NQVAyX1BNX1BXU1RDVFJMKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9tYXAyX3B3cmRtX3dhaXRfdHJhbnNpdGlvbihzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKQoreworCXUzMiBjID0gMDsKKworCS8qCisJICogUkVWSVNJVDogcHdyZG1fd2FpdF90cmFuc2l0aW9uKCkgbWF5IGJlIGJldHRlciBpbXBsZW1lbnRlZAorCSAqIHZpYSBhIGNhbGxiYWNrIGFuZCBhIHBlcmlvZGljIHRpbWVyIGNoZWNrIC0tIGhvdyBsb25nIGRvIHdlIGV4cGVjdAorCSAqIHBvd2VyZG9tYWluIHRyYW5zaXRpb25zIHRvIHRha2U/CisJICovCisKKwkvKiBYWFggSXMgdGhpcyB1ZGVsYXkoKSB2YWx1ZSBtZWFuaW5nZnVsPyAqLworCXdoaWxlICgob21hcDJfcHJtX3JlYWRfbW9kX3JlZyhwd3JkbS0+cHJjbV9vZmZzLCBPTUFQMl9QTV9QV1NUU1QpICYKKwkJT01BUF9JTlRSQU5TSVRJT05fTUFTSykgJiYKKwkJKGMrKyA8IFBXUkRNX1RSQU5TSVRJT05fQkFJTE9VVCkpCisJCQl1ZGVsYXkoMSk7CisKKwlpZiAoYyA+IFBXUkRNX1RSQU5TSVRJT05fQkFJTE9VVCkgeworCQlwcmludGsoS0VSTl9FUlIgInBvd2VyZG9tYWluOiB3YWl0ZWQgdG9vIGxvbmcgZm9yICIKKwkJCSJwb3dlcmRvbWFpbiAlcyB0byBjb21wbGV0ZSB0cmFuc2l0aW9uXG4iLCBwd3JkbS0+bmFtZSk7CisJCXJldHVybiAtRUFHQUlOOworCX0KKworCXByX2RlYnVnKCJwb3dlcmRvbWFpbjogY29tcGxldGVkIHRyYW5zaXRpb24gaW4gJWQgbG9vcHNcbiIsIGMpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIEFwcGxpY2FibGUgb25seSBmb3IgT01BUDMuIE5vdCBzdXBwb3J0ZWQgb24gT01BUDIgKi8KK3N0YXRpYyBpbnQgb21hcDNfcHdyZG1fcmVhZF9wcmV2X3B3cnN0KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pCit7CisJcmV0dXJuIG9tYXAyX3BybV9yZWFkX21vZF9iaXRzX3NoaWZ0KHB3cmRtLT5wcmNtX29mZnMsCisJCQkJCSAgICAgT01BUDM0MzBfUE1fUFJFUFdTVFNULAorCQkJCQkgICAgIE9NQVAzNDMwX0xBU1RQT1dFUlNUQVRFRU5URVJFRF9NQVNLKTsKK30KKworc3RhdGljIGludCBvbWFwM19wd3JkbV9yZWFkX2xvZ2ljX3B3cnN0KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pCit7CisJcmV0dXJuIG9tYXAyX3BybV9yZWFkX21vZF9iaXRzX3NoaWZ0KHB3cmRtLT5wcmNtX29mZnMsCisJCQkJCSAgICAgT01BUDJfUE1fUFdTVFNULAorCQkJCQkgICAgIE9NQVAzNDMwX0xPR0lDU1RBVEVTVF9NQVNLKTsKK30KKworc3RhdGljIGludCBvbWFwM19wd3JkbV9yZWFkX2xvZ2ljX3JldHN0KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pCit7CisJcmV0dXJuIG9tYXAyX3BybV9yZWFkX21vZF9iaXRzX3NoaWZ0KHB3cmRtLT5wcmNtX29mZnMsCisJCQkJCSAgICAgT01BUDJfUE1fUFdTVENUUkwsCisJCQkJCSAgICAgT01BUDM0MzBfTE9HSUNTVEFURVNUX01BU0spOworfQorCitzdGF0aWMgaW50IG9tYXAzX3B3cmRtX3JlYWRfcHJldl9sb2dpY19wd3JzdChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKQoreworCXJldHVybiBvbWFwMl9wcm1fcmVhZF9tb2RfYml0c19zaGlmdChwd3JkbS0+cHJjbV9vZmZzLAorCQkJCQkgICAgIE9NQVAzNDMwX1BNX1BSRVBXU1RTVCwKKwkJCQkJICAgICBPTUFQMzQzMF9MQVNUTE9HSUNTVEFURUVOVEVSRURfTUFTSyk7Cit9CisKK3N0YXRpYyBpbnQgb21hcDNfZ2V0X21lbV9iYW5rX2xhc3RtZW1zdF9tYXNrKHU4IGJhbmspCit7CisJc3dpdGNoIChiYW5rKSB7CisJY2FzZSAwOgorCQlyZXR1cm4gT01BUDM0MzBfTEFTVE1FTTFTVEFURUVOVEVSRURfTUFTSzsKKwljYXNlIDE6CisJCXJldHVybiBPTUFQMzQzMF9MQVNUTUVNMlNUQVRFRU5URVJFRF9NQVNLOworCWNhc2UgMjoKKwkJcmV0dXJuIE9NQVAzNDMwX0xBU1RTSEFSRURMMkNBQ0hFRkxBVFNUQVRFRU5URVJFRF9NQVNLOworCWNhc2UgMzoKKwkJcmV0dXJuIE9NQVAzNDMwX0xBU1RMMkZMQVRNRU1TVEFURUVOVEVSRURfTUFTSzsKKwlkZWZhdWx0OgorCQlXQVJOX09OKDEpOyAvKiBzaG91bGQgbmV2ZXIgaGFwcGVuICovCisJCXJldHVybiAtRUVYSVNUOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvbWFwM19wd3JkbV9yZWFkX3ByZXZfbWVtX3B3cnN0KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0sIHU4IGJhbmspCit7CisJdTMyIG07CisKKwltID0gb21hcDNfZ2V0X21lbV9iYW5rX2xhc3RtZW1zdF9tYXNrKGJhbmspOworCisJcmV0dXJuIG9tYXAyX3BybV9yZWFkX21vZF9iaXRzX3NoaWZ0KHB3cmRtLT5wcmNtX29mZnMsCisJCQkJT01BUDM0MzBfUE1fUFJFUFdTVFNULCBtKTsKK30KKworc3RhdGljIGludCBvbWFwM19wd3JkbV9jbGVhcl9hbGxfcHJldl9wd3JzdChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKQoreworCW9tYXAyX3BybV93cml0ZV9tb2RfcmVnKDAsIHB3cmRtLT5wcmNtX29mZnMsIE9NQVAzNDMwX1BNX1BSRVBXU1RTVCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb21hcDNfcHdyZG1fZW5hYmxlX2hkd3Jfc2FyKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pCit7CisJcmV0dXJuIG9tYXAyX3BybV9ybXdfbW9kX3JlZ19iaXRzKDAsCisJCQkJCSAgMSA8PCBPTUFQMzQzMEVTMl9TQVZFQU5EUkVTVE9SRV9TSElGVCwKKwkJCQkJICBwd3JkbS0+cHJjbV9vZmZzLCBPTUFQMl9QTV9QV1NUQ1RSTCk7Cit9CisKK3N0YXRpYyBpbnQgb21hcDNfcHdyZG1fZGlzYWJsZV9oZHdyX3NhcihzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKQoreworCXJldHVybiBvbWFwMl9wcm1fcm13X21vZF9yZWdfYml0cygxIDw8IE9NQVAzNDMwRVMyX1NBVkVBTkRSRVNUT1JFX1NISUZULAorCQkJCQkgIDAsIHB3cmRtLT5wcmNtX29mZnMsCisJCQkJCSAgT01BUDJfUE1fUFdTVENUUkwpOworfQorCitzdHJ1Y3QgcHdyZG1fb3BzIG9tYXAyX3B3cmRtX29wZXJhdGlvbnMgPSB7CisJLnB3cmRtX3NldF9uZXh0X3B3cnN0CT0gb21hcDJfcHdyZG1fc2V0X25leHRfcHdyc3QsCisJLnB3cmRtX3JlYWRfbmV4dF9wd3JzdAk9IG9tYXAyX3B3cmRtX3JlYWRfbmV4dF9wd3JzdCwKKwkucHdyZG1fcmVhZF9wd3JzdAk9IG9tYXAyX3B3cmRtX3JlYWRfcHdyc3QsCisJLnB3cmRtX3NldF9sb2dpY19yZXRzdAk9IG9tYXAyX3B3cmRtX3NldF9sb2dpY19yZXRzdCwKKwkucHdyZG1fc2V0X21lbV9vbnN0CT0gb21hcDJfcHdyZG1fc2V0X21lbV9vbnN0LAorCS5wd3JkbV9zZXRfbWVtX3JldHN0CT0gb21hcDJfcHdyZG1fc2V0X21lbV9yZXRzdCwKKwkucHdyZG1fcmVhZF9tZW1fcHdyc3QJPSBvbWFwMl9wd3JkbV9yZWFkX21lbV9wd3JzdCwKKwkucHdyZG1fcmVhZF9tZW1fcmV0c3QJPSBvbWFwMl9wd3JkbV9yZWFkX21lbV9yZXRzdCwKKwkucHdyZG1fd2FpdF90cmFuc2l0aW9uCT0gb21hcDJfcHdyZG1fd2FpdF90cmFuc2l0aW9uLAorfTsKKworc3RydWN0IHB3cmRtX29wcyBvbWFwM19wd3JkbV9vcGVyYXRpb25zID0geworCS5wd3JkbV9zZXRfbmV4dF9wd3JzdAk9IG9tYXAyX3B3cmRtX3NldF9uZXh0X3B3cnN0LAorCS5wd3JkbV9yZWFkX25leHRfcHdyc3QJPSBvbWFwMl9wd3JkbV9yZWFkX25leHRfcHdyc3QsCisJLnB3cmRtX3JlYWRfcHdyc3QJPSBvbWFwMl9wd3JkbV9yZWFkX3B3cnN0LAorCS5wd3JkbV9yZWFkX3ByZXZfcHdyc3QJPSBvbWFwM19wd3JkbV9yZWFkX3ByZXZfcHdyc3QsCisJLnB3cmRtX3NldF9sb2dpY19yZXRzdAk9IG9tYXAyX3B3cmRtX3NldF9sb2dpY19yZXRzdCwKKwkucHdyZG1fcmVhZF9sb2dpY19wd3JzdAk9IG9tYXAzX3B3cmRtX3JlYWRfbG9naWNfcHdyc3QsCisJLnB3cmRtX3JlYWRfbG9naWNfcmV0c3QJPSBvbWFwM19wd3JkbV9yZWFkX2xvZ2ljX3JldHN0LAorCS5wd3JkbV9yZWFkX3ByZXZfbG9naWNfcHdyc3QJPSBvbWFwM19wd3JkbV9yZWFkX3ByZXZfbG9naWNfcHdyc3QsCisJLnB3cmRtX3NldF9tZW1fb25zdAk9IG9tYXAyX3B3cmRtX3NldF9tZW1fb25zdCwKKwkucHdyZG1fc2V0X21lbV9yZXRzdAk9IG9tYXAyX3B3cmRtX3NldF9tZW1fcmV0c3QsCisJLnB3cmRtX3JlYWRfbWVtX3B3cnN0CT0gb21hcDJfcHdyZG1fcmVhZF9tZW1fcHdyc3QsCisJLnB3cmRtX3JlYWRfbWVtX3JldHN0CT0gb21hcDJfcHdyZG1fcmVhZF9tZW1fcmV0c3QsCisJLnB3cmRtX3JlYWRfcHJldl9tZW1fcHdyc3QJPSBvbWFwM19wd3JkbV9yZWFkX3ByZXZfbWVtX3B3cnN0LAorCS5wd3JkbV9jbGVhcl9hbGxfcHJldl9wd3JzdAk9IG9tYXAzX3B3cmRtX2NsZWFyX2FsbF9wcmV2X3B3cnN0LAorCS5wd3JkbV9lbmFibGVfaGR3cl9zYXIJPSBvbWFwM19wd3JkbV9lbmFibGVfaGR3cl9zYXIsCisJLnB3cmRtX2Rpc2FibGVfaGR3cl9zYXIJPSBvbWFwM19wd3JkbV9kaXNhYmxlX2hkd3Jfc2FyLAorCS5wd3JkbV93YWl0X3RyYW5zaXRpb24JPSBvbWFwMl9wd3JkbV93YWl0X3RyYW5zaXRpb24sCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbjQ0eHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW40NHh4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc4ODBhZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW40NHh4LmMKQEAgLTAsMCArMSwyMjUgQEAKKy8qCisgKiBPTUFQNCBwb3dlcmRvbWFpbiBjb250cm9sCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogRGVyaXZlZCBmcm9tIG1hY2gtb21hcDIvcG93ZXJkb21haW4uYyB3cml0dGVuIGJ5IFBhdWwgV2FsbXNsZXkKKyAqIFJhamVuZHJhIE5heWFrIDxybmF5YWtAdGkuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSAicG93ZXJkb21haW4uaCIKKyNpbmNsdWRlIDxwbGF0L3ByY20uaD4KKyNpbmNsdWRlICJwcm0yeHh4XzN4eHguaCIKKyNpbmNsdWRlICJwcm00NHh4LmgiCisjaW5jbHVkZSAicHJtaW5zdDQ0eHguaCIKKyNpbmNsdWRlICJwcm0tcmVnYml0cy00NHh4LmgiCisKK3N0YXRpYyBpbnQgb21hcDRfcHdyZG1fc2V0X25leHRfcHdyc3Qoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgdTggcHdyc3QpCit7CisJb21hcDRfcHJtaW5zdF9ybXdfaW5zdF9yZWdfYml0cyhPTUFQX1BPV0VSU1RBVEVfTUFTSywKKwkJCQkJKHB3cnN0IDw8IE9NQVBfUE9XRVJTVEFURV9TSElGVCksCisJCQkJCXB3cmRtLT5wcmNtX3BhcnRpdGlvbiwKKwkJCQkJcHdyZG0tPnByY21fb2ZmcywgT01BUDRfUE1fUFdTVENUUkwpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9tYXA0X3B3cmRtX3JlYWRfbmV4dF9wd3JzdChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKQoreworCXUzMiB2OworCisJdiA9IG9tYXA0X3BybWluc3RfcmVhZF9pbnN0X3JlZyhwd3JkbS0+cHJjbV9wYXJ0aXRpb24sIHB3cmRtLT5wcmNtX29mZnMsCisJCQkJCU9NQVA0X1BNX1BXU1RDVFJMKTsKKwl2ICY9IE9NQVBfUE9XRVJTVEFURV9NQVNLOworCXYgPj49IE9NQVBfUE9XRVJTVEFURV9TSElGVDsKKworCXJldHVybiB2OworfQorCitzdGF0aWMgaW50IG9tYXA0X3B3cmRtX3JlYWRfcHdyc3Qoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSkKK3sKKwl1MzIgdjsKKworCXYgPSBvbWFwNF9wcm1pbnN0X3JlYWRfaW5zdF9yZWcocHdyZG0tPnByY21fcGFydGl0aW9uLCBwd3JkbS0+cHJjbV9vZmZzLAorCQkJCQlPTUFQNF9QTV9QV1NUU1QpOworCXYgJj0gT01BUF9QT1dFUlNUQVRFU1RfTUFTSzsKKwl2ID4+PSBPTUFQX1BPV0VSU1RBVEVTVF9TSElGVDsKKworCXJldHVybiB2OworfQorCitzdGF0aWMgaW50IG9tYXA0X3B3cmRtX3JlYWRfcHJldl9wd3JzdChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKQoreworCXUzMiB2OworCisJdiA9IG9tYXA0X3BybWluc3RfcmVhZF9pbnN0X3JlZyhwd3JkbS0+cHJjbV9wYXJ0aXRpb24sIHB3cmRtLT5wcmNtX29mZnMsCisJCQkJCU9NQVA0X1BNX1BXU1RTVCk7CisJdiAmPSBPTUFQNDQzMF9MQVNUUE9XRVJTVEFURUVOVEVSRURfTUFTSzsKKwl2ID4+PSBPTUFQNDQzMF9MQVNUUE9XRVJTVEFURUVOVEVSRURfU0hJRlQ7CisKKwlyZXR1cm4gdjsKK30KKworc3RhdGljIGludCBvbWFwNF9wd3JkbV9zZXRfbG93cHdyc3RjaGFuZ2Uoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSkKK3sKKwlvbWFwNF9wcm1pbnN0X3Jtd19pbnN0X3JlZ19iaXRzKE9NQVA0NDMwX0xPV1BPV0VSU1RBVEVDSEFOR0VfTUFTSywKKwkJCQkJKDEgPDwgT01BUDQ0MzBfTE9XUE9XRVJTVEFURUNIQU5HRV9TSElGVCksCisJCQkJCXB3cmRtLT5wcmNtX3BhcnRpdGlvbiwKKwkJCQkJcHdyZG0tPnByY21fb2ZmcywgT01BUDRfUE1fUFdTVENUUkwpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9tYXA0X3B3cmRtX2NsZWFyX2FsbF9wcmV2X3B3cnN0KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pCit7CisJb21hcDRfcHJtaW5zdF9ybXdfaW5zdF9yZWdfYml0cyhPTUFQNDQzMF9MQVNUUE9XRVJTVEFURUVOVEVSRURfTUFTSywKKwkJCQkJT01BUDQ0MzBfTEFTVFBPV0VSU1RBVEVFTlRFUkVEX01BU0ssCisJCQkJCXB3cmRtLT5wcmNtX3BhcnRpdGlvbiwKKwkJCQkJcHdyZG0tPnByY21fb2ZmcywgT01BUDRfUE1fUFdTVFNUKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvbWFwNF9wd3JkbV9zZXRfbG9naWNfcmV0c3Qoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgdTggcHdyc3QpCit7CisJdTMyIHY7CisKKwl2ID0gcHdyc3QgPDwgX19mZnMoT01BUDQ0MzBfTE9HSUNSRVRTVEFURV9NQVNLKTsKKwlvbWFwNF9wcm1pbnN0X3Jtd19pbnN0X3JlZ19iaXRzKE9NQVA0NDMwX0xPR0lDUkVUU1RBVEVfTUFTSywgdiwKKwkJCQkJcHdyZG0tPnByY21fcGFydGl0aW9uLCBwd3JkbS0+cHJjbV9vZmZzLAorCQkJCQlPTUFQNF9QTV9QV1NUQ1RSTCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvbWFwNF9wd3JkbV9zZXRfbWVtX29uc3Qoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgdTggYmFuaywKKwkJCQkgICAgdTggcHdyc3QpCit7CisJdTMyIG07CisKKwltID0gb21hcDJfcHdyZG1fZ2V0X21lbV9iYW5rX29uc3RhdGVfbWFzayhiYW5rKTsKKworCW9tYXA0X3BybWluc3Rfcm13X2luc3RfcmVnX2JpdHMobSwgKHB3cnN0IDw8IF9fZmZzKG0pKSwKKwkJCQkJcHdyZG0tPnByY21fcGFydGl0aW9uLCBwd3JkbS0+cHJjbV9vZmZzLAorCQkJCQlPTUFQNF9QTV9QV1NUQ1RSTCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvbWFwNF9wd3JkbV9zZXRfbWVtX3JldHN0KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0sIHU4IGJhbmssCisJCQkJICAgICB1OCBwd3JzdCkKK3sKKwl1MzIgbTsKKworCW0gPSBvbWFwMl9wd3JkbV9nZXRfbWVtX2JhbmtfcmV0c3RfbWFzayhiYW5rKTsKKworCW9tYXA0X3BybWluc3Rfcm13X2luc3RfcmVnX2JpdHMobSwgKHB3cnN0IDw8IF9fZmZzKG0pKSwKKwkJCQkJcHdyZG0tPnByY21fcGFydGl0aW9uLCBwd3JkbS0+cHJjbV9vZmZzLAorCQkJCQlPTUFQNF9QTV9QV1NUQ1RSTCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvbWFwNF9wd3JkbV9yZWFkX2xvZ2ljX3B3cnN0KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pCit7CisJdTMyIHY7CisKKwl2ID0gb21hcDRfcHJtaW5zdF9yZWFkX2luc3RfcmVnKHB3cmRtLT5wcmNtX3BhcnRpdGlvbiwgcHdyZG0tPnByY21fb2ZmcywKKwkJCQkJT01BUDRfUE1fUFdTVFNUKTsKKwl2ICY9IE9NQVA0NDMwX0xPR0lDU1RBVEVTVF9NQVNLOworCXYgPj49IE9NQVA0NDMwX0xPR0lDU1RBVEVTVF9TSElGVDsKKworCXJldHVybiB2OworfQorCitzdGF0aWMgaW50IG9tYXA0X3B3cmRtX3JlYWRfbG9naWNfcmV0c3Qoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSkKK3sKKwl1MzIgdjsKKworCXYgPSBvbWFwNF9wcm1pbnN0X3JlYWRfaW5zdF9yZWcocHdyZG0tPnByY21fcGFydGl0aW9uLCBwd3JkbS0+cHJjbV9vZmZzLAorCQkJCQlPTUFQNF9QTV9QV1NUQ1RSTCk7CisJdiAmPSBPTUFQNDQzMF9MT0dJQ1JFVFNUQVRFX01BU0s7CisJdiA+Pj0gT01BUDQ0MzBfTE9HSUNSRVRTVEFURV9TSElGVDsKKworCXJldHVybiB2OworfQorCitzdGF0aWMgaW50IG9tYXA0X3B3cmRtX3JlYWRfbWVtX3B3cnN0KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0sIHU4IGJhbmspCit7CisJdTMyIG0sIHY7CisKKwltID0gb21hcDJfcHdyZG1fZ2V0X21lbV9iYW5rX3N0c3RfbWFzayhiYW5rKTsKKworCXYgPSBvbWFwNF9wcm1pbnN0X3JlYWRfaW5zdF9yZWcocHdyZG0tPnByY21fcGFydGl0aW9uLCBwd3JkbS0+cHJjbV9vZmZzLAorCQkJCQlPTUFQNF9QTV9QV1NUU1QpOworCXYgJj0gbTsKKwl2ID4+PSBfX2ZmcyhtKTsKKworCXJldHVybiB2OworfQorCitzdGF0aWMgaW50IG9tYXA0X3B3cmRtX3JlYWRfbWVtX3JldHN0KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0sIHU4IGJhbmspCit7CisJdTMyIG0sIHY7CisKKwltID0gb21hcDJfcHdyZG1fZ2V0X21lbV9iYW5rX3JldHN0X21hc2soYmFuayk7CisKKwl2ID0gb21hcDRfcHJtaW5zdF9yZWFkX2luc3RfcmVnKHB3cmRtLT5wcmNtX3BhcnRpdGlvbiwgcHdyZG0tPnByY21fb2ZmcywKKwkJCQkJT01BUDRfUE1fUFdTVENUUkwpOworCXYgJj0gbTsKKwl2ID4+PSBfX2ZmcyhtKTsKKworCXJldHVybiB2OworfQorCitzdGF0aWMgaW50IG9tYXA0X3B3cmRtX3dhaXRfdHJhbnNpdGlvbihzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKQoreworCXUzMiBjID0gMDsKKworCS8qCisJICogUkVWSVNJVDogcHdyZG1fd2FpdF90cmFuc2l0aW9uKCkgbWF5IGJlIGJldHRlciBpbXBsZW1lbnRlZAorCSAqIHZpYSBhIGNhbGxiYWNrIGFuZCBhIHBlcmlvZGljIHRpbWVyIGNoZWNrIC0tIGhvdyBsb25nIGRvIHdlIGV4cGVjdAorCSAqIHBvd2VyZG9tYWluIHRyYW5zaXRpb25zIHRvIHRha2U/CisJICovCisKKwkvKiBYWFggSXMgdGhpcyB1ZGVsYXkoKSB2YWx1ZSBtZWFuaW5nZnVsPyAqLworCXdoaWxlICgob21hcDRfcHJtaW5zdF9yZWFkX2luc3RfcmVnKHB3cmRtLT5wcmNtX3BhcnRpdGlvbiwKKwkJCQkJICAgIHB3cmRtLT5wcmNtX29mZnMsCisJCQkJCSAgICBPTUFQNF9QTV9QV1NUU1QpICYKKwkJT01BUF9JTlRSQU5TSVRJT05fTUFTSykgJiYKKwkgICAgICAgKGMrKyA8IFBXUkRNX1RSQU5TSVRJT05fQkFJTE9VVCkpCisJCXVkZWxheSgxKTsKKworCWlmIChjID4gUFdSRE1fVFJBTlNJVElPTl9CQUlMT1VUKSB7CisJCXByaW50ayhLRVJOX0VSUiAicG93ZXJkb21haW46IHdhaXRlZCB0b28gbG9uZyBmb3IgIgorCQkgICAgICAgInBvd2VyZG9tYWluICVzIHRvIGNvbXBsZXRlIHRyYW5zaXRpb25cbiIsIHB3cmRtLT5uYW1lKTsKKwkJcmV0dXJuIC1FQUdBSU47CisJfQorCisJcHJfZGVidWcoInBvd2VyZG9tYWluOiBjb21wbGV0ZWQgdHJhbnNpdGlvbiBpbiAlZCBsb29wc1xuIiwgYyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHB3cmRtX29wcyBvbWFwNF9wd3JkbV9vcGVyYXRpb25zID0geworCS5wd3JkbV9zZXRfbmV4dF9wd3JzdAk9IG9tYXA0X3B3cmRtX3NldF9uZXh0X3B3cnN0LAorCS5wd3JkbV9yZWFkX25leHRfcHdyc3QJPSBvbWFwNF9wd3JkbV9yZWFkX25leHRfcHdyc3QsCisJLnB3cmRtX3JlYWRfcHdyc3QJPSBvbWFwNF9wd3JkbV9yZWFkX3B3cnN0LAorCS5wd3JkbV9yZWFkX3ByZXZfcHdyc3QJPSBvbWFwNF9wd3JkbV9yZWFkX3ByZXZfcHdyc3QsCisJLnB3cmRtX3NldF9sb3dwd3JzdGNoYW5nZQk9IG9tYXA0X3B3cmRtX3NldF9sb3dwd3JzdGNoYW5nZSwKKwkucHdyZG1fY2xlYXJfYWxsX3ByZXZfcHdyc3QJPSBvbWFwNF9wd3JkbV9jbGVhcl9hbGxfcHJldl9wd3JzdCwKKwkucHdyZG1fc2V0X2xvZ2ljX3JldHN0CT0gb21hcDRfcHdyZG1fc2V0X2xvZ2ljX3JldHN0LAorCS5wd3JkbV9yZWFkX2xvZ2ljX3B3cnN0CT0gb21hcDRfcHdyZG1fcmVhZF9sb2dpY19wd3JzdCwKKwkucHdyZG1fcmVhZF9sb2dpY19yZXRzdAk9IG9tYXA0X3B3cmRtX3JlYWRfbG9naWNfcmV0c3QsCisJLnB3cmRtX3JlYWRfbWVtX3B3cnN0CT0gb21hcDRfcHdyZG1fcmVhZF9tZW1fcHdyc3QsCisJLnB3cmRtX3JlYWRfbWVtX3JldHN0CT0gb21hcDRfcHdyZG1fcmVhZF9tZW1fcmV0c3QsCisJLnB3cmRtX3NldF9tZW1fb25zdAk9IG9tYXA0X3B3cmRtX3NldF9tZW1fb25zdCwKKwkucHdyZG1fc2V0X21lbV9yZXRzdAk9IG9tYXA0X3B3cmRtX3NldF9tZW1fcmV0c3QsCisJLnB3cmRtX3dhaXRfdHJhbnNpdGlvbgk9IG9tYXA0X3B3cmRtX3dhaXRfdHJhbnNpdGlvbiwKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3Bvd2VyZG9tYWlucy5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbnMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTA1Y2JjYS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3Bvd2VyZG9tYWlucy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTUzICswLDAgQEAKLS8qCi0gKiBPTUFQMi8zIGNvbW1vbiBwb3dlcmRvbWFpbiBkZWZpbml0aW9ucwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgotICoKLSAqIFdyaXR0ZW4gYnkgUGF1bCBXYWxtc2xleQotICogRGVidWdnaW5nIGFuZCBpbnRlZ3JhdGlvbiBmaXhlcyBieSBKb3VuaSBIw7ZnYW5kZXIKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLS8qCi0gKiBUbyBEbyBMaXN0Ci0gKiAtPiBNb3ZlIHRoZSBTbGVlcC9XYWtldXAgZGVwZW5kZW5jaWVzIGZyb20gUG93ZXIgRG9tYWluIGZyYW1ld29yayB0bwotICogICAgQ2xvY2sgRG9tYWluIEZyYW1ld29yawotICovCi0KLSNpZm5kZWYgQVJDSF9BUk1fTUFDSF9PTUFQMl9QT1dFUkRPTUFJTlMKLSNkZWZpbmUgQVJDSF9BUk1fTUFDSF9PTUFQMl9QT1dFUkRPTUFJTlMKLQotLyoKLSAqIFRoaXMgZmlsZSBjb250YWlucyBhbGwgb2YgdGhlIHBvd2VyZG9tYWlucyB0aGF0IGhhdmUgc29tZSBlbGVtZW50Ci0gKiBvZiBzb2Z0d2FyZSBjb250cm9sIGZvciB0aGUgT01BUDI0eHggYW5kIE9NQVAzNHh4IGNoaXBzLgotICoKLSAqIFRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdGluZyBvZiBwb3dlcmRvbWFpbnMgb24gdGhlIGNoaXBzOyBvbmx5Ci0gKiBwb3dlcmRvbWFpbnMgdGhhdCBjYW4gYmUgY29udHJvbGxlZCBpbiBzb2Z0d2FyZS4KLSAqLwotCi0vKgotICogVGhlIG5hbWVzIGZvciB0aGUgRFNQL0lWQTIgcG93ZXJkb21haW5zIGFyZSBjb25mdXNpbmcuCi0gKgotICogTW9zdCBPTUFQIGNoaXBzIGhhdmUgYW4gb24tYm9hcmQgRFNQLgotICoKLSAqIE9uIHRoZSAyNDIwLCB0aGlzIGlzIGEgJ0M1NSBEU1AgY2FsbGVkLCBzaW1wbHksIHRoZSBEU1AuICBJdHMKLSAqIHBvd2VyZG9tYWluIGlzIGNhbGxlZCB0aGUgIkRTUCBwb3dlciBkb21haW4uIiAgT24gdGhlIDI0MzAsIHRoZQotICogb24tYm9hcmQgRFNQIGlzIGEgJ0M2NCBEU1AsIG5vdyBjYWxsZWQgKGFsb25nIHdpdGggaXRzIGhhcmR3YXJlCi0gKiBhY2NlbGVyYXRvcnMpIHRoZSBJVkEyIG9yIElWQTIuMS4gIEl0cyBwb3dlcmRvbWFpbiBpcyBzdGlsbCBjYWxsZWQKLSAqIHRoZSAiRFNQIHBvd2VyIGRvbWFpbi4iIE9uIHRoZSAzNDMwLCB0aGUgRFNQIGlzIGEgJ0M2NCBEU1AgbGlrZSB0aGUKLSAqIDI0MzAsIGFsc28ga25vd24gYXMgdGhlIElWQTI7IGJ1dCBpdHMgcG93ZXJkb21haW4gaXMgbm93IGNhbGxlZCB0aGUKLSAqICJJVkEyIHBvd2VyIGRvbWFpbi4iCi0gKgotICogVGhlIDI0MjAgYWxzbyBoYXMgc29tZXRoaW5nIGNhbGxlZCB0aGUgSVZBLCB3aGljaCBpcyBhIHNlcGFyYXRlIEFSTQotICogY29yZSwgYW5kIGhhcyBub3RoaW5nIHRvIGRvIHdpdGggdGhlIERTUC9JVkEyLgotICoKLSAqIElkZWFsbHkgdGhlIERTUC9JVkEyIGNvdWxkIGp1c3QgYmUgdGhlIHNhbWUgcG93ZXJkb21haW4sIGJ1dCB0aGUgUFJDTQotICogYWRkcmVzcyBvZmZzZXQgaXMgZGlmZmVyZW50IGJldHdlZW4gdGhlIEM1NSBhbmQgQzY0IERTUHMuCi0gKi8KLQotI2luY2x1ZGUgPHBsYXQvcG93ZXJkb21haW4uaD4KLQotI2luY2x1ZGUgInByY20tY29tbW9uLmgiCi0jaW5jbHVkZSAicHJtLmgiCi0jaW5jbHVkZSAiY20uaCIKLSNpbmNsdWRlICJwb3dlcmRvbWFpbnMyNHh4LmgiCi0jaW5jbHVkZSAicG93ZXJkb21haW5zMzR4eC5oIgotI2luY2x1ZGUgInBvd2VyZG9tYWluczQ0eHguaCIKLQotLyogT01BUDIvMy1jb21tb24gcG93ZXJkb21haW5zICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKQotCi0vKgotICogVGhlIEdGWCBwb3dlcmRvbWFpbiBpcyBub3QgcHJlc2VudCBvbiAzNDMwRVMyLCBidXQgY3VycmVudGx5IHdlIGRvIG5vdAotICogaGF2ZSBhIG1hY3JvIHRvIGZpbHRlciBpdCBvdXQgYXQgY29tcGlsZS10aW1lLgotICovCi1zdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluIGdmeF9vbWFwMl9wd3JkbSA9IHsKLQkubmFtZQkJICA9ICJnZnhfcHdyZG0iLAotCS5wcmNtX29mZnMJICA9IEdGWF9NT0QsCi0JLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCB8Ci0JCQkJCSAgIENISVBfSVNfT01BUDM0MzBFUzEpLAotCS5wd3JzdHMJCSAgPSBQV1JTVFNfT0ZGX1JFVF9PTiwKLQkucHdyc3RzX2xvZ2ljX3JldCA9IFBXUkRNX1BPV0VSX1JFVCwKLQkuYmFua3MJCSAgPSAxLAotCS5wd3JzdHNfbWVtX3JldAkgID0gewotCQlbMF0gPSBQV1JETV9QT1dFUl9SRVQsIC8qIE1FTVJFVFNUQVRFICovCi0JfSwKLQkucHdyc3RzX21lbV9vbgkgID0gewotCQlbMF0gPSBQV1JETV9QT1dFUl9PTiwgIC8qIE1FTU9OU1RBVEUgKi8KLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiB3a3VwX29tYXAyX3B3cmRtID0gewotCS5uYW1lCQk9ICJ3a3VwX3B3cmRtIiwKLQkucHJjbV9vZmZzCT0gV0tVUF9NT0QsCi0JLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFggfCBDSElQX0lTX09NQVAzNDMwKSwKLX07Ci0KLSNlbmRpZgotCi0KLS8qIEFzIHBvd2VyZG9tYWlucyBhcmUgYWRkZWQgb3IgcmVtb3ZlZCBhYm92ZSwgdGhpcyBsaXN0IG11c3QgYWxzbyBiZSBjaGFuZ2VkICovCi1zdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluICpwb3dlcmRvbWFpbnNfb21hcFtdIF9faW5pdGRhdGEgPSB7Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKQotCSZ3a3VwX29tYXAyX3B3cmRtLAotCSZnZnhfb21hcDJfcHdyZG0sCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19BUkNIX09NQVAyCi0JJmRzcF9wd3JkbSwKLQkmbXB1XzI0eHhfcHdyZG0sCi0JJmNvcmVfMjR4eF9wd3JkbSwKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDI0MzAKLQkmbWRtX3B3cmRtLAotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMwotCSZpdmEyX3B3cmRtLAotCSZtcHVfM3h4eF9wd3JkbSwKLQkmbmVvbl9wd3JkbSwKLQkmY29yZV8zeHh4X3ByZV9lczNfMV9wd3JkbSwKLQkmY29yZV8zeHh4X2VzM18xX3B3cmRtLAotCSZjYW1fcHdyZG0sCi0JJmRzc19wd3JkbSwKLQkmcGVyX3B3cmRtLAotCSZlbXVfcHdyZG0sCi0JJnNneF9wd3JkbSwKLQkmdXNiaG9zdF9wd3JkbSwKLQkmZHBsbDFfcHdyZG0sCi0JJmRwbGwyX3B3cmRtLAotCSZkcGxsM19wd3JkbSwKLQkmZHBsbDRfcHdyZG0sCi0JJmRwbGw1X3B3cmRtLAotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQNAotCSZjb3JlXzQ0eHhfcHdyZG0sCi0JJmdmeF80NHh4X3B3cmRtLAotCSZhYmVfNDR4eF9wd3JkbSwKLQkmZHNzXzQ0eHhfcHdyZG0sCi0JJnRlc2xhXzQ0eHhfcHdyZG0sCi0JJndrdXBfNDR4eF9wd3JkbSwKLQkmY3B1MF80NHh4X3B3cmRtLAotCSZjcHUxXzQ0eHhfcHdyZG0sCi0JJmVtdV80NHh4X3B3cmRtLAotCSZtcHVfNDR4eF9wd3JkbSwKLQkmaXZhaGRfNDR4eF9wd3JkbSwKLQkmY2FtXzQ0eHhfcHdyZG0sCi0JJmwzaW5pdF80NHh4X3B3cmRtLAotCSZsNHBlcl80NHh4X3B3cmRtLAotCSZhbHdheXNfb25fY29yZV80NHh4X3B3cmRtLAotCSZjZWZ1c2VfNDR4eF9wd3JkbSwKLSNlbmRpZgotCU5VTEwKLX07Ci0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3Bvd2VyZG9tYWluczI0eHguaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW5zMjR4eC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzUwOTNhLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW5zMjR4eC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLS8qCi0gKiBPTUFQMjRYWCBwb3dlcmRvbWFpbiBkZWZpbml0aW9ucwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgotICoKLSAqIFdyaXR0ZW4gYnkgUGF1bCBXYWxtc2xleQotICogRGVidWdnaW5nIGFuZCBpbnRlZ3JhdGlvbiBmaXhlcyBieSBKb3VuaSBIw7ZnYW5kZXIKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpZm5kZWYgQVJDSF9BUk1fTUFDSF9PTUFQMl9QT1dFUkRPTUFJTlMyNFhYCi0jZGVmaW5lIEFSQ0hfQVJNX01BQ0hfT01BUDJfUE9XRVJET01BSU5TMjRYWAotCi0vKgotICogTi5CLiBJZiBwb3dlcmRvbWFpbnMgYXJlIGFkZGVkIG9yIHJlbW92ZWQgZnJvbSB0aGlzIGZpbGUsIHVwZGF0ZQotICogdGhlIGFycmF5IGluIG1hY2gtb21hcDIvcG93ZXJkb21haW5zLmguCi0gKi8KLQotI2luY2x1ZGUgPHBsYXQvcG93ZXJkb21haW4uaD4KLQotI2luY2x1ZGUgInByY20tY29tbW9uLmgiCi0jaW5jbHVkZSAicHJtLmgiCi0jaW5jbHVkZSAicHJtLXJlZ2JpdHMtMjR4eC5oIgotI2luY2x1ZGUgImNtLmgiCi0jaW5jbHVkZSAiY20tcmVnYml0cy0yNHh4LmgiCi0KLS8qIDI0WFggcG93ZXJkb21haW5zIGFuZCBkZXBlbmRlbmNpZXMgKi8KLQotI2lmZGVmIENPTkZJR19BUkNIX09NQVAyCi0KLS8qIFBvd2VyZG9tYWlucyAqLwotCi1zdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluIGRzcF9wd3JkbSA9IHsKLQkubmFtZQkJICA9ICJkc3BfcHdyZG0iLAotCS5wcmNtX29mZnMJICA9IE9NQVAyNFhYX0RTUF9NT0QsCi0JLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCksCi0JLnB3cnN0cwkJICA9IFBXUlNUU19PRkZfUkVUX09OLAotCS5wd3JzdHNfbG9naWNfcmV0ID0gUFdSRE1fUE9XRVJfUkVULAotCS5iYW5rcwkJICA9IDEsCi0JLnB3cnN0c19tZW1fcmV0CSAgPSB7Ci0JCVswXSA9IFBXUkRNX1BPV0VSX1JFVCwKLQl9LAotCS5wd3JzdHNfbWVtX29uCSAgPSB7Ci0JCVswXSA9IFBXUkRNX1BPV0VSX09OLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluIG1wdV8yNHh4X3B3cmRtID0gewotCS5uYW1lCQkgID0gIm1wdV9wd3JkbSIsCi0JLnByY21fb2ZmcwkgID0gTVBVX01PRCwKLQkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYKSwKLQkucHdyc3RzCQkgID0gUFdSU1RTX09GRl9SRVRfT04sCi0JLnB3cnN0c19sb2dpY19yZXQgPSBQV1JTVFNfT0ZGX1JFVCwKLQkuYmFua3MJCSAgPSAxLAotCS5wd3JzdHNfbWVtX3JldAkgID0gewotCQlbMF0gPSBQV1JETV9QT1dFUl9SRVQsCi0JfSwKLQkucHdyc3RzX21lbV9vbgkgID0gewotCQlbMF0gPSBQV1JETV9QT1dFUl9PTiwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiBjb3JlXzI0eHhfcHdyZG0gPSB7Ci0JLm5hbWUJCSAgPSAiY29yZV9wd3JkbSIsCi0JLnByY21fb2ZmcwkgID0gQ09SRV9NT0QsCi0JLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCksCi0JLnB3cnN0cwkJICA9IFBXUlNUU19PRkZfUkVUX09OLAotCS5iYW5rcwkJICA9IDMsCi0JLnB3cnN0c19tZW1fcmV0CSAgPSB7Ci0JCVswXSA9IFBXUlNUU19PRkZfUkVULAkgLyogTUVNMVJFVFNUQVRFICovCi0JCVsxXSA9IFBXUlNUU19PRkZfUkVULAkgLyogTUVNMlJFVFNUQVRFICovCi0JCVsyXSA9IFBXUlNUU19PRkZfUkVULAkgLyogTUVNM1JFVFNUQVRFICovCi0JfSwKLQkucHdyc3RzX21lbV9vbgkgID0gewotCQlbMF0gPSBQV1JTVFNfT0ZGX1JFVF9PTiwgLyogTUVNMU9OU1RBVEUgKi8KLQkJWzFdID0gUFdSU1RTX09GRl9SRVRfT04sIC8qIE1FTTJPTlNUQVRFICovCi0JCVsyXSA9IFBXUlNUU19PRkZfUkVUX09OLCAvKiBNRU0zT05TVEFURSAqLwotCX0sCi19OwotCi0jZW5kaWYJICAgLyogQ09ORklHX0FSQ0hfT01BUDIgKi8KLQotCi0KLS8qCi0gKiAyNDMwLXNwZWNpZmljIHBvd2VyZG9tYWlucwotICovCi0KLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMjQzMAotCi0vKiBYWFggMjQzMCBLSUxMRE9NQUlOV0tVUCBiaXQ/ICBObyBjdXJyZW50IHVzZXJzIGFwcGFyZW50bHkgKi8KLQotc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiBtZG1fcHdyZG0gPSB7Ci0JLm5hbWUJCSAgPSAibWRtX3B3cmRtIiwKLQkucHJjbV9vZmZzCSAgPSBPTUFQMjQzMF9NRE1fTU9ELAotCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MzApLAotCS5wd3JzdHMJCSAgPSBQV1JTVFNfT0ZGX1JFVF9PTiwKLQkucHdyc3RzX2xvZ2ljX3JldCA9IFBXUkRNX1BPV0VSX1JFVCwKLQkuYmFua3MJCSAgPSAxLAotCS5wd3JzdHNfbWVtX3JldAkgID0gewotCQlbMF0gPSBQV1JETV9QT1dFUl9SRVQsIC8qIE1FTVJFVFNUQVRFICovCi0JfSwKLQkucHdyc3RzX21lbV9vbgkgID0gewotCQlbMF0gPSBQV1JETV9QT1dFUl9PTiwgIC8qIE1FTU9OU1RBVEUgKi8KLQl9LAotfTsKLQotI2VuZGlmICAgICAvKiBDT05GSUdfQVJDSF9PTUFQMjQzMCAqLwotCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbnMyeHh4XzN4eHhfZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbnMyeHh4XzN4eHhfZGF0YS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViNGRkOTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3Bvd2VyZG9tYWluczJ4eHhfM3h4eF9kYXRhLmMKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIE9NQVAyLzMgY29tbW9uIHBvd2VyZG9tYWluIGRlZmluaXRpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDEwIE5va2lhIENvcnBvcmF0aW9uCisgKgorICogUGF1bCBXYWxtc2xleSwgSm91bmkgSMO2Z2FuZGVyCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisvKgorICogVG8gRG8gTGlzdAorICogLT4gTW92ZSB0aGUgU2xlZXAvV2FrZXVwIGRlcGVuZGVuY2llcyBmcm9tIFBvd2VyIERvbWFpbiBmcmFtZXdvcmsgdG8KKyAqICAgIENsb2NrIERvbWFpbiBGcmFtZXdvcmsKKyAqLworCisvKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIGFsbCBvZiB0aGUgcG93ZXJkb21haW5zIHRoYXQgaGF2ZSBzb21lIGVsZW1lbnQKKyAqIG9mIHNvZnR3YXJlIGNvbnRyb2wgZm9yIHRoZSBPTUFQMjR4eCBhbmQgT01BUDM0eHggY2hpcHMuCisgKgorICogVGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0aW5nIG9mIHBvd2VyZG9tYWlucyBvbiB0aGUgY2hpcHM7IG9ubHkKKyAqIHBvd2VyZG9tYWlucyB0aGF0IGNhbiBiZSBjb250cm9sbGVkIGluIHNvZnR3YXJlLgorICovCisKKy8qCisgKiBUaGUgbmFtZXMgZm9yIHRoZSBEU1AvSVZBMiBwb3dlcmRvbWFpbnMgYXJlIGNvbmZ1c2luZy4KKyAqCisgKiBNb3N0IE9NQVAgY2hpcHMgaGF2ZSBhbiBvbi1ib2FyZCBEU1AuCisgKgorICogT24gdGhlIDI0MjAsIHRoaXMgaXMgYSAnQzU1IERTUCBjYWxsZWQsIHNpbXBseSwgdGhlIERTUC4gIEl0cworICogcG93ZXJkb21haW4gaXMgY2FsbGVkIHRoZSAiRFNQIHBvd2VyIGRvbWFpbi4iICBPbiB0aGUgMjQzMCwgdGhlCisgKiBvbi1ib2FyZCBEU1AgaXMgYSAnQzY0IERTUCwgbm93IGNhbGxlZCAoYWxvbmcgd2l0aCBpdHMgaGFyZHdhcmUKKyAqIGFjY2VsZXJhdG9ycykgdGhlIElWQTIgb3IgSVZBMi4xLiAgSXRzIHBvd2VyZG9tYWluIGlzIHN0aWxsIGNhbGxlZAorICogdGhlICJEU1AgcG93ZXIgZG9tYWluLiIgT24gdGhlIDM0MzAsIHRoZSBEU1AgaXMgYSAnQzY0IERTUCBsaWtlIHRoZQorICogMjQzMCwgYWxzbyBrbm93biBhcyB0aGUgSVZBMjsgYnV0IGl0cyBwb3dlcmRvbWFpbiBpcyBub3cgY2FsbGVkIHRoZQorICogIklWQTIgcG93ZXIgZG9tYWluLiIKKyAqCisgKiBUaGUgMjQyMCBhbHNvIGhhcyBzb21ldGhpbmcgY2FsbGVkIHRoZSBJVkEsIHdoaWNoIGlzIGEgc2VwYXJhdGUgQVJNCisgKiBjb3JlLCBhbmQgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCB0aGUgRFNQL0lWQTIuCisgKgorICogSWRlYWxseSB0aGUgRFNQL0lWQTIgY291bGQganVzdCBiZSB0aGUgc2FtZSBwb3dlcmRvbWFpbiwgYnV0IHRoZSBQUkNNCisgKiBhZGRyZXNzIG9mZnNldCBpcyBkaWZmZXJlbnQgYmV0d2VlbiB0aGUgQzU1IGFuZCBDNjQgRFNQcy4KKyAqLworCisjaW5jbHVkZSAicG93ZXJkb21haW4uaCIKKworI2luY2x1ZGUgInByY20tY29tbW9uLmgiCisjaW5jbHVkZSAicHJtLmgiCisKKy8qIE9NQVAyLzMtY29tbW9uIHBvd2VyZG9tYWlucyAqLworCisvKgorICogVGhlIEdGWCBwb3dlcmRvbWFpbiBpcyBub3QgcHJlc2VudCBvbiAzNDMwRVMyLCBidXQgY3VycmVudGx5IHdlIGRvIG5vdAorICogaGF2ZSBhIG1hY3JvIHRvIGZpbHRlciBpdCBvdXQgYXQgY29tcGlsZS10aW1lLgorICovCitzdHJ1Y3QgcG93ZXJkb21haW4gZ2Z4X29tYXAyX3B3cmRtID0geworCS5uYW1lCQkgID0gImdmeF9wd3JkbSIsCisJLnByY21fb2ZmcwkgID0gR0ZYX01PRCwKKwkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYIHwKKwkJCQkJICAgQ0hJUF9JU19PTUFQMzQzMEVTMSksCisJLnB3cnN0cwkJICA9IFBXUlNUU19PRkZfUkVUX09OLAorCS5wd3JzdHNfbG9naWNfcmV0ID0gUFdSRE1fUE9XRVJfUkVULAorCS5iYW5rcwkJICA9IDEsCisJLnB3cnN0c19tZW1fcmV0CSAgPSB7CisJCVswXSA9IFBXUkRNX1BPV0VSX1JFVCwgLyogTUVNUkVUU1RBVEUgKi8KKwl9LAorCS5wd3JzdHNfbWVtX29uCSAgPSB7CisJCVswXSA9IFBXUkRNX1BPV0VSX09OLCAgLyogTUVNT05TVEFURSAqLworCX0sCit9OworCitzdHJ1Y3QgcG93ZXJkb21haW4gd2t1cF9vbWFwMl9wd3JkbSA9IHsKKwkubmFtZQkJPSAid2t1cF9wd3JkbSIsCisJLnByY21fb2Zmcwk9IFdLVVBfTU9ELAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYIHwgQ0hJUF9JU19PTUFQMzQzMCksCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbnMyeHh4XzN4eHhfZGF0YS5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbnMyeHh4XzN4eHhfZGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhMzExNjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3Bvd2VyZG9tYWluczJ4eHhfM3h4eF9kYXRhLmgKQEAgLTAsMCArMSwyMiBAQAorLyoKKyAqIE9NQVAyLzMgY29tbW9uIHBvd2VyZG9tYWlucyAtIHByb3RvdHlwZXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDEwIE5va2lhIENvcnBvcmF0aW9uCisgKgorICogUGF1bCBXYWxtc2xleQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfUE9XRVJET01BSU5TMlhYWF8zWFhYX0RBVEFfSAorI2RlZmluZSBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfUE9XRVJET01BSU5TMlhYWF8zWFhYX0RBVEFfSAorCisjaW5jbHVkZSAicG93ZXJkb21haW4uaCIKKworZXh0ZXJuIHN0cnVjdCBwb3dlcmRvbWFpbiBnZnhfb21hcDJfcHdyZG07CitleHRlcm4gc3RydWN0IHBvd2VyZG9tYWluIHdrdXBfb21hcDJfcHdyZG07CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbnMyeHh4X2RhdGEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW5zMnh4eF9kYXRhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWIxYTMzNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW5zMnh4eF9kYXRhLmMKQEAgLTAsMCArMSwxMjMgQEAKKy8qCisgKiBPTUFQMlhYWCBwb3dlcmRvbWFpbiBkZWZpbml0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIFBhdWwgV2FsbXNsZXksIEpvdW5pIEjDtmdhbmRlcgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgInBvd2VyZG9tYWluLmgiCisjaW5jbHVkZSAicG93ZXJkb21haW5zMnh4eF8zeHh4X2RhdGEuaCIKKworI2luY2x1ZGUgInByY20tY29tbW9uLmgiCisjaW5jbHVkZSAicHJtMnh4eF8zeHh4LmgiCisjaW5jbHVkZSAicHJtLXJlZ2JpdHMtMjR4eC5oIgorCisvKiAyNFhYIHBvd2VyZG9tYWlucyBhbmQgZGVwZW5kZW5jaWVzICovCisKKy8qIFBvd2VyZG9tYWlucyAqLworCitzdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluIGRzcF9wd3JkbSA9IHsKKwkubmFtZQkJICA9ICJkc3BfcHdyZG0iLAorCS5wcmNtX29mZnMJICA9IE9NQVAyNFhYX0RTUF9NT0QsCisJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCksCisJLnB3cnN0cwkJICA9IFBXUlNUU19PRkZfUkVUX09OLAorCS5wd3JzdHNfbG9naWNfcmV0ID0gUFdSRE1fUE9XRVJfUkVULAorCS5iYW5rcwkJICA9IDEsCisJLnB3cnN0c19tZW1fcmV0CSAgPSB7CisJCVswXSA9IFBXUkRNX1BPV0VSX1JFVCwKKwl9LAorCS5wd3JzdHNfbWVtX29uCSAgPSB7CisJCVswXSA9IFBXUkRNX1BPV0VSX09OLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluIG1wdV8yNHh4X3B3cmRtID0geworCS5uYW1lCQkgID0gIm1wdV9wd3JkbSIsCisJLnByY21fb2ZmcwkgID0gTVBVX01PRCwKKwkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYKSwKKwkucHdyc3RzCQkgID0gUFdSU1RTX09GRl9SRVRfT04sCisJLnB3cnN0c19sb2dpY19yZXQgPSBQV1JTVFNfT0ZGX1JFVCwKKwkuYmFua3MJCSAgPSAxLAorCS5wd3JzdHNfbWVtX3JldAkgID0geworCQlbMF0gPSBQV1JETV9QT1dFUl9SRVQsCisJfSwKKwkucHdyc3RzX21lbV9vbgkgID0geworCQlbMF0gPSBQV1JETV9QT1dFUl9PTiwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiBjb3JlXzI0eHhfcHdyZG0gPSB7CisJLm5hbWUJCSAgPSAiY29yZV9wd3JkbSIsCisJLnByY21fb2ZmcwkgID0gQ09SRV9NT0QsCisJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCksCisJLnB3cnN0cwkJICA9IFBXUlNUU19PRkZfUkVUX09OLAorCS5iYW5rcwkJICA9IDMsCisJLnB3cnN0c19tZW1fcmV0CSAgPSB7CisJCVswXSA9IFBXUlNUU19PRkZfUkVULAkgLyogTUVNMVJFVFNUQVRFICovCisJCVsxXSA9IFBXUlNUU19PRkZfUkVULAkgLyogTUVNMlJFVFNUQVRFICovCisJCVsyXSA9IFBXUlNUU19PRkZfUkVULAkgLyogTUVNM1JFVFNUQVRFICovCisJfSwKKwkucHdyc3RzX21lbV9vbgkgID0geworCQlbMF0gPSBQV1JTVFNfT0ZGX1JFVF9PTiwgLyogTUVNMU9OU1RBVEUgKi8KKwkJWzFdID0gUFdSU1RTX09GRl9SRVRfT04sIC8qIE1FTTJPTlNUQVRFICovCisJCVsyXSA9IFBXUlNUU19PRkZfUkVUX09OLCAvKiBNRU0zT05TVEFURSAqLworCX0sCit9OworCisKKy8qCisgKiAyNDMwLXNwZWNpZmljIHBvd2VyZG9tYWlucworICovCisKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMjQzMAorCisvKiBYWFggMjQzMCBLSUxMRE9NQUlOV0tVUCBiaXQ/ICBObyBjdXJyZW50IHVzZXJzIGFwcGFyZW50bHkgKi8KKworc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiBtZG1fcHdyZG0gPSB7CisJLm5hbWUJCSAgPSAibWRtX3B3cmRtIiwKKwkucHJjbV9vZmZzCSAgPSBPTUFQMjQzMF9NRE1fTU9ELAorCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MzApLAorCS5wd3JzdHMJCSAgPSBQV1JTVFNfT0ZGX1JFVF9PTiwKKwkucHdyc3RzX2xvZ2ljX3JldCA9IFBXUkRNX1BPV0VSX1JFVCwKKwkuYmFua3MJCSAgPSAxLAorCS5wd3JzdHNfbWVtX3JldAkgID0geworCQlbMF0gPSBQV1JETV9QT1dFUl9SRVQsIC8qIE1FTVJFVFNUQVRFICovCisJfSwKKwkucHdyc3RzX21lbV9vbgkgID0geworCQlbMF0gPSBQV1JETV9QT1dFUl9PTiwgIC8qIE1FTU9OU1RBVEUgKi8KKwl9LAorfTsKKworI2VuZGlmICAgICAvKiBDT05GSUdfQVJDSF9PTUFQMjQzMCAqLworCisvKiBBcyBwb3dlcmRvbWFpbnMgYXJlIGFkZGVkIG9yIHJlbW92ZWQgYWJvdmUsIHRoaXMgbGlzdCBtdXN0IGFsc28gYmUgY2hhbmdlZCAqLworc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiAqcG93ZXJkb21haW5zX29tYXAyeHh4W10gX19pbml0ZGF0YSA9IHsKKworCSZ3a3VwX29tYXAyX3B3cmRtLAorCSZnZnhfb21hcDJfcHdyZG0sCisKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMgorCSZkc3BfcHdyZG0sCisJJm1wdV8yNHh4X3B3cmRtLAorCSZjb3JlXzI0eHhfcHdyZG0sCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNDMwCisJJm1kbV9wd3JkbSwKKyNlbmRpZgorCU5VTEwKK307CisKK3ZvaWQgX19pbml0IG9tYXAyeHh4X3Bvd2VyZG9tYWluc19pbml0KHZvaWQpCit7CisJcHdyZG1faW5pdChwb3dlcmRvbWFpbnNfb21hcDJ4eHgsICZvbWFwMl9wd3JkbV9vcGVyYXRpb25zKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW5zMzR4eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbnMzNHh4LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhOTA0ODYuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbnMzNHh4LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNTkgKzAsMCBAQAotLyoKLSAqIE9NQVAzIHBvd2VyZG9tYWluIGRlZmluaXRpb25zCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDEwIE5va2lhIENvcnBvcmF0aW9uCi0gKgotICogV3JpdHRlbiBieSBQYXVsIFdhbG1zbGV5Ci0gKiBEZWJ1Z2dpbmcgYW5kIGludGVncmF0aW9uIGZpeGVzIGJ5IEpvdW5pIEjDtmdhbmRlcgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLQotI2lmbmRlZiBBUkNIX0FSTV9NQUNIX09NQVAyX1BPV0VSRE9NQUlOUzM0WFgKLSNkZWZpbmUgQVJDSF9BUk1fTUFDSF9PTUFQMl9QT1dFUkRPTUFJTlMzNFhYCi0KLS8qCi0gKiBOLkIuIElmIHBvd2VyZG9tYWlucyBhcmUgYWRkZWQgb3IgcmVtb3ZlZCBmcm9tIHRoaXMgZmlsZSwgdXBkYXRlCi0gKiB0aGUgYXJyYXkgaW4gbWFjaC1vbWFwMi9wb3dlcmRvbWFpbnMuaC4KLSAqLwotCi0jaW5jbHVkZSA8cGxhdC9wb3dlcmRvbWFpbi5oPgotCi0jaW5jbHVkZSAicHJjbS1jb21tb24uaCIKLSNpbmNsdWRlICJwcm0uaCIKLSNpbmNsdWRlICJwcm0tcmVnYml0cy0zNHh4LmgiCi0jaW5jbHVkZSAiY20uaCIKLSNpbmNsdWRlICJjbS1yZWdiaXRzLTM0eHguaCIKLQotLyoKLSAqIDM0WFgtc3BlY2lmaWMgcG93ZXJkb21haW5zLCBkZXBlbmRlbmNpZXMKLSAqLwotCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDMKLQotLyoKLSAqIFBvd2VyZG9tYWlucwotICovCi0KLXN0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gaXZhMl9wd3JkbSA9IHsKLQkubmFtZQkJICA9ICJpdmEyX3B3cmRtIiwKLQkucHJjbV9vZmZzCSAgPSBPTUFQMzQzMF9JVkEyX01PRCwKLQkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKLQkucHdyc3RzCQkgID0gUFdSU1RTX09GRl9SRVRfT04sCi0JLnB3cnN0c19sb2dpY19yZXQgPSBQV1JTVFNfT0ZGX1JFVCwKLQkuYmFua3MJCSAgPSA0LAotCS5wd3JzdHNfbWVtX3JldAkgID0gewotCQlbMF0gPSBQV1JTVFNfT0ZGX1JFVCwKLQkJWzFdID0gUFdSU1RTX09GRl9SRVQsCi0JCVsyXSA9IFBXUlNUU19PRkZfUkVULAotCQlbM10gPSBQV1JTVFNfT0ZGX1JFVCwKLQl9LAotCS5wd3JzdHNfbWVtX29uCSAgPSB7Ci0JCVswXSA9IFBXUkRNX1BPV0VSX09OLAotCQlbMV0gPSBQV1JETV9QT1dFUl9PTiwKLQkJWzJdID0gUFdSU1RTX09GRl9PTiwKLQkJWzNdID0gUFdSRE1fUE9XRVJfT04sCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gbXB1XzN4eHhfcHdyZG0gPSB7Ci0JLm5hbWUJCSAgPSAibXB1X3B3cmRtIiwKLQkucHJjbV9vZmZzCSAgPSBNUFVfTU9ELAotCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLAotCS5wd3JzdHMJCSAgPSBQV1JTVFNfT0ZGX1JFVF9PTiwKLQkucHdyc3RzX2xvZ2ljX3JldCA9IFBXUlNUU19PRkZfUkVULAotCS5mbGFncwkJICA9IFBXUkRNX0hBU19NUFVfUVVJUkssCi0JLmJhbmtzCQkgID0gMSwKLQkucHdyc3RzX21lbV9yZXQJICA9IHsKLQkJWzBdID0gUFdSU1RTX09GRl9SRVQsCi0JfSwKLQkucHdyc3RzX21lbV9vbgkgID0gewotCQlbMF0gPSBQV1JTVFNfT0ZGX09OLAotCX0sCi19OwotCi0vKgotICogVGhlIFVTQlRMTCBTYXZlLWFuZC1SZXN0b3JlIG1lY2hhbmlzbSBpcyBicm9rZW4gb24KLSAqIDM0MzBzIHVwdG8gRVMzLjAgYW5kIDM2MzBFUzEuMC4gSGVuY2UgdGhpcyBmZWF0dXJlCi0gKiBuZWVkcyB0byBiZSBkaXNhYmxlZCBvbiB0aGVzZSBjaGlwcy4KLSAqIFJlZmVyOiAzNDMwIGVycmF0YSBJRCBpNDU5IGFuZCAzNjMwIGVycmF0YSBJRCBpNTc5Ci0gKi8KLXN0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gY29yZV8zeHh4X3ByZV9lczNfMV9wd3JkbSA9IHsKLQkubmFtZQkJICA9ICJjb3JlX3B3cmRtIiwKLQkucHJjbV9vZmZzCSAgPSBDT1JFX01PRCwKLQkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwRVMxIHwKLQkJCQkJICAgQ0hJUF9JU19PTUFQMzQzMEVTMiB8Ci0JCQkJCSAgIENISVBfSVNfT01BUDM0MzBFUzNfMCB8Ci0JCQkJCSAgIENISVBfSVNfT01BUDM2MzBFUzEpLAotCS5wd3JzdHMJCSAgPSBQV1JTVFNfT0ZGX1JFVF9PTiwKLQkucHdyc3RzX2xvZ2ljX3JldCA9IFBXUlNUU19PRkZfUkVULAotCS5iYW5rcwkJICA9IDIsCi0JLnB3cnN0c19tZW1fcmV0CSAgPSB7Ci0JCVswXSA9IFBXUlNUU19PRkZfUkVULAkgLyogTUVNMVJFVFNUQVRFICovCi0JCVsxXSA9IFBXUlNUU19PRkZfUkVULAkgLyogTUVNMlJFVFNUQVRFICovCi0JfSwKLQkucHdyc3RzX21lbV9vbgkgID0gewotCQlbMF0gPSBQV1JTVFNfT0ZGX1JFVF9PTiwgLyogTUVNMU9OU1RBVEUgKi8KLQkJWzFdID0gUFdSU1RTX09GRl9SRVRfT04sIC8qIE1FTTJPTlNUQVRFICovCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gY29yZV8zeHh4X2VzM18xX3B3cmRtID0gewotCS5uYW1lCQkgID0gImNvcmVfcHdyZG0iLAotCS5wcmNtX29mZnMJICA9IENPUkVfTU9ELAotCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzBFUzNfMSB8Ci0JCQkJCSAgQ0hJUF9HRV9PTUFQMzYzMEVTMV8xKSwKLQkucHdyc3RzCQkgID0gUFdSU1RTX09GRl9SRVRfT04sCi0JLnB3cnN0c19sb2dpY19yZXQgPSBQV1JTVFNfT0ZGX1JFVCwKLQkuZmxhZ3MJCSAgPSBQV1JETV9IQVNfSERXUl9TQVIsIC8qIGZvciBVU0JUTEwgb25seSAqLwotCS5iYW5rcwkJICA9IDIsCi0JLnB3cnN0c19tZW1fcmV0CSAgPSB7Ci0JCVswXSA9IFBXUlNUU19PRkZfUkVULAkgLyogTUVNMVJFVFNUQVRFICovCi0JCVsxXSA9IFBXUlNUU19PRkZfUkVULAkgLyogTUVNMlJFVFNUQVRFICovCi0JfSwKLQkucHdyc3RzX21lbV9vbgkgID0gewotCQlbMF0gPSBQV1JTVFNfT0ZGX1JFVF9PTiwgLyogTUVNMU9OU1RBVEUgKi8KLQkJWzFdID0gUFdSU1RTX09GRl9SRVRfT04sIC8qIE1FTTJPTlNUQVRFICovCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gZHNzX3B3cmRtID0gewotCS5uYW1lCQkgID0gImRzc19wd3JkbSIsCi0JLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCi0JLnByY21fb2ZmcwkgID0gT01BUDM0MzBfRFNTX01PRCwKLQkucHdyc3RzCQkgID0gUFdSU1RTX09GRl9SRVRfT04sCi0JLnB3cnN0c19sb2dpY19yZXQgPSBQV1JETV9QT1dFUl9SRVQsCi0JLmJhbmtzCQkgID0gMSwKLQkucHdyc3RzX21lbV9yZXQJICA9IHsKLQkJWzBdID0gUFdSRE1fUE9XRVJfUkVULCAvKiBNRU1SRVRTVEFURSAqLwotCX0sCi0JLnB3cnN0c19tZW1fb24JICA9IHsKLQkJWzBdID0gUFdSRE1fUE9XRVJfT04sICAvKiBNRU1PTlNUQVRFICovCi0JfSwKLX07Ci0KLS8qCi0gKiBBbHRob3VnaCB0aGUgMzRYWCBUUk0gUmV2IEsgVGFibGUgNC0zNzEgbm90ZXMgdGhhdCByZXRlbnRpb24gaXMgYQotICogcG9zc2libGUgU0dYIHBvd2Vyc3RhdGUsIHRoZSBTR1ggZGV2aWNlIGl0c2VsZiBkb2VzIG5vdCBzdXBwb3J0Ci0gKiByZXRlbnRpb24uCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gc2d4X3B3cmRtID0gewotCS5uYW1lCQkgID0gInNneF9wd3JkbSIsCi0JLnByY21fb2ZmcwkgID0gT01BUDM0MzBFUzJfU0dYX01PRCwKLQkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0dFX09NQVAzNDMwRVMyKSwKLQkvKiBYWFggVGhpcyBpcyBhY2N1cmF0ZSBmb3IgMzQzMCBTR1gsIGJ1dCB3aGF0IGFib3V0IEdGWD8gKi8KLQkucHdyc3RzCQkgID0gUFdSU1RTX09GRl9PTiwKLQkucHdyc3RzX2xvZ2ljX3JldCA9IFBXUkRNX1BPV0VSX1JFVCwKLQkuYmFua3MJCSAgPSAxLAotCS5wd3JzdHNfbWVtX3JldAkgID0gewotCQlbMF0gPSBQV1JETV9QT1dFUl9SRVQsIC8qIE1FTVJFVFNUQVRFICovCi0JfSwKLQkucHdyc3RzX21lbV9vbgkgID0gewotCQlbMF0gPSBQV1JETV9QT1dFUl9PTiwgIC8qIE1FTU9OU1RBVEUgKi8KLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiBjYW1fcHdyZG0gPSB7Ci0JLm5hbWUJCSAgPSAiY2FtX3B3cmRtIiwKLQkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKLQkucHJjbV9vZmZzCSAgPSBPTUFQMzQzMF9DQU1fTU9ELAotCS5wd3JzdHMJCSAgPSBQV1JTVFNfT0ZGX1JFVF9PTiwKLQkucHdyc3RzX2xvZ2ljX3JldCA9IFBXUkRNX1BPV0VSX1JFVCwKLQkuYmFua3MJCSAgPSAxLAotCS5wd3JzdHNfbWVtX3JldAkgID0gewotCQlbMF0gPSBQV1JETV9QT1dFUl9SRVQsIC8qIE1FTVJFVFNUQVRFICovCi0JfSwKLQkucHdyc3RzX21lbV9vbgkgID0gewotCQlbMF0gPSBQV1JETV9QT1dFUl9PTiwgIC8qIE1FTU9OU1RBVEUgKi8KLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiBwZXJfcHdyZG0gPSB7Ci0JLm5hbWUJCSAgPSAicGVyX3B3cmRtIiwKLQkucHJjbV9vZmZzCSAgPSBPTUFQMzQzMF9QRVJfTU9ELAotCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLAotCS5wd3JzdHMJCSAgPSBQV1JTVFNfT0ZGX1JFVF9PTiwKLQkucHdyc3RzX2xvZ2ljX3JldCA9IFBXUlNUU19PRkZfUkVULAotCS5iYW5rcwkJICA9IDEsCi0JLnB3cnN0c19tZW1fcmV0CSAgPSB7Ci0JCVswXSA9IFBXUkRNX1BPV0VSX1JFVCwgLyogTUVNUkVUU1RBVEUgKi8KLQl9LAotCS5wd3JzdHNfbWVtX29uCSAgPSB7Ci0JCVswXSA9IFBXUkRNX1BPV0VSX09OLCAgLyogTUVNT05TVEFURSAqLwotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluIGVtdV9wd3JkbSA9IHsKLQkubmFtZQkJPSAiZW11X3B3cmRtIiwKLQkucHJjbV9vZmZzCT0gT01BUDM0MzBfRU1VX01PRCwKLQkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCi19OwotCi1zdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluIG5lb25fcHdyZG0gPSB7Ci0JLm5hbWUJCSAgPSAibmVvbl9wd3JkbSIsCi0JLnByY21fb2ZmcwkgID0gT01BUDM0MzBfTkVPTl9NT0QsCi0JLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCi0JLnB3cnN0cwkJICA9IFBXUlNUU19PRkZfUkVUX09OLAotCS5wd3JzdHNfbG9naWNfcmV0ID0gUFdSRE1fUE9XRVJfUkVULAotfTsKLQotc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiB1c2Job3N0X3B3cmRtID0gewotCS5uYW1lCQkgID0gInVzYmhvc3RfcHdyZG0iLAotCS5wcmNtX29mZnMJICA9IE9NQVAzNDMwRVMyX1VTQkhPU1RfTU9ELAotCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfR0VfT01BUDM0MzBFUzIpLAotCS5wd3JzdHMJCSAgPSBQV1JTVFNfT0ZGX1JFVF9PTiwKLQkucHdyc3RzX2xvZ2ljX3JldCA9IFBXUkRNX1BPV0VSX1JFVCwKLQkvKgotCSAqIFJFVklTSVQ6IEVuYWJsaW5nIHVzYiBob3N0IHNhdmUgYW5kIHJlc3RvcmUgbWVjaGFuaXNtIHNlZW1zIHRvCi0JICogbGVhdmUgdGhlIHVzYiBob3N0IGRvbWFpbiBwZXJtYW5lbnRseSBpbiBBQ1RJVkUgbW9kZSBhZnRlcgotCSAqIGNoYW5naW5nIHRoZSB1c2IgaG9zdCBwb3dlciBkb21haW4gc3RhdGUgZnJvbSBPRkYgdG8gYWN0aXZlIG9uY2UuCi0JICogRGlzYWJsaW5nIGZvciBub3cuCi0JICovCi0JLyouZmxhZ3MJICA9IFBXUkRNX0hBU19IRFdSX1NBUiwqLyAvKiBmb3IgVVNCSE9TVCBjdHJsciBvbmx5ICovCi0JLmJhbmtzCQkgID0gMSwKLQkucHdyc3RzX21lbV9yZXQJICA9IHsKLQkJWzBdID0gUFdSRE1fUE9XRVJfUkVULCAvKiBNRU1SRVRTVEFURSAqLwotCX0sCi0JLnB3cnN0c19tZW1fb24JICA9IHsKLQkJWzBdID0gUFdSRE1fUE9XRVJfT04sICAvKiBNRU1PTlNUQVRFICovCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gZHBsbDFfcHdyZG0gPSB7Ci0JLm5hbWUJCT0gImRwbGwxX3B3cmRtIiwKLQkucHJjbV9vZmZzCT0gTVBVX01PRCwKLQkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCi19OwotCi1zdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluIGRwbGwyX3B3cmRtID0gewotCS5uYW1lCQk9ICJkcGxsMl9wd3JkbSIsCi0JLnByY21fb2Zmcwk9IE9NQVAzNDMwX0lWQTJfTU9ELAotCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gZHBsbDNfcHdyZG0gPSB7Ci0JLm5hbWUJCT0gImRwbGwzX3B3cmRtIiwKLQkucHJjbV9vZmZzCT0gUExMX01PRCwKLQkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCi19OwotCi1zdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluIGRwbGw0X3B3cmRtID0gewotCS5uYW1lCQk9ICJkcGxsNF9wd3JkbSIsCi0JLnByY21fb2Zmcwk9IFBMTF9NT0QsCi0JLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLAotfTsKLQotc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiBkcGxsNV9wd3JkbSA9IHsKLQkubmFtZQkJPSAiZHBsbDVfcHdyZG0iLAotCS5wcmNtX29mZnMJPSBQTExfTU9ELAotCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0dFX09NQVAzNDMwRVMyKSwKLX07Ci0KLQotI2VuZGlmICAgIC8qIENPTkZJR19BUkNIX09NQVAzICovCi0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3Bvd2VyZG9tYWluczN4eHhfZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbnMzeHh4X2RhdGEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWJlYzU2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbnMzeHh4X2RhdGEuYwpAQCAtMCwwICsxLDI4NyBAQAorLyoKKyAqIE9NQVAzIHBvd2VyZG9tYWluIGRlZmluaXRpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDEwIE5va2lhIENvcnBvcmF0aW9uCisgKgorICogUGF1bCBXYWxtc2xleSwgSm91bmkgSMO2Z2FuZGVyCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSAicG93ZXJkb21haW4uaCIKKyNpbmNsdWRlICJwb3dlcmRvbWFpbnMyeHh4XzN4eHhfZGF0YS5oIgorCisjaW5jbHVkZSAicHJjbS1jb21tb24uaCIKKyNpbmNsdWRlICJwcm0yeHh4XzN4eHguaCIKKyNpbmNsdWRlICJwcm0tcmVnYml0cy0zNHh4LmgiCisjaW5jbHVkZSAiY20yeHh4XzN4eHguaCIKKyNpbmNsdWRlICJjbS1yZWdiaXRzLTM0eHguaCIKKworLyoKKyAqIDM0WFgtc3BlY2lmaWMgcG93ZXJkb21haW5zLCBkZXBlbmRlbmNpZXMKKyAqLworCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDMKKworLyoKKyAqIFBvd2VyZG9tYWlucworICovCisKK3N0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gaXZhMl9wd3JkbSA9IHsKKwkubmFtZQkJICA9ICJpdmEyX3B3cmRtIiwKKwkucHJjbV9vZmZzCSAgPSBPTUFQMzQzMF9JVkEyX01PRCwKKwkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKKwkucHdyc3RzCQkgID0gUFdSU1RTX09GRl9SRVRfT04sCisJLnB3cnN0c19sb2dpY19yZXQgPSBQV1JTVFNfT0ZGX1JFVCwKKwkuYmFua3MJCSAgPSA0LAorCS5wd3JzdHNfbWVtX3JldAkgID0geworCQlbMF0gPSBQV1JTVFNfT0ZGX1JFVCwKKwkJWzFdID0gUFdSU1RTX09GRl9SRVQsCisJCVsyXSA9IFBXUlNUU19PRkZfUkVULAorCQlbM10gPSBQV1JTVFNfT0ZGX1JFVCwKKwl9LAorCS5wd3JzdHNfbWVtX29uCSAgPSB7CisJCVswXSA9IFBXUkRNX1BPV0VSX09OLAorCQlbMV0gPSBQV1JETV9QT1dFUl9PTiwKKwkJWzJdID0gUFdSU1RTX09GRl9PTiwKKwkJWzNdID0gUFdSRE1fUE9XRVJfT04sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gbXB1XzN4eHhfcHdyZG0gPSB7CisJLm5hbWUJCSAgPSAibXB1X3B3cmRtIiwKKwkucHJjbV9vZmZzCSAgPSBNUFVfTU9ELAorCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLAorCS5wd3JzdHMJCSAgPSBQV1JTVFNfT0ZGX1JFVF9PTiwKKwkucHdyc3RzX2xvZ2ljX3JldCA9IFBXUlNUU19PRkZfUkVULAorCS5mbGFncwkJICA9IFBXUkRNX0hBU19NUFVfUVVJUkssCisJLmJhbmtzCQkgID0gMSwKKwkucHdyc3RzX21lbV9yZXQJICA9IHsKKwkJWzBdID0gUFdSU1RTX09GRl9SRVQsCisJfSwKKwkucHdyc3RzX21lbV9vbgkgID0geworCQlbMF0gPSBQV1JTVFNfT0ZGX09OLAorCX0sCit9OworCisvKgorICogVGhlIFVTQlRMTCBTYXZlLWFuZC1SZXN0b3JlIG1lY2hhbmlzbSBpcyBicm9rZW4gb24KKyAqIDM0MzBzIHVwdG8gRVMzLjAgYW5kIDM2MzBFUzEuMC4gSGVuY2UgdGhpcyBmZWF0dXJlCisgKiBuZWVkcyB0byBiZSBkaXNhYmxlZCBvbiB0aGVzZSBjaGlwcy4KKyAqIFJlZmVyOiAzNDMwIGVycmF0YSBJRCBpNDU5IGFuZCAzNjMwIGVycmF0YSBJRCBpNTc5CisgKgorICogTm90ZTogc2V0dGluZyB0aGUgU0FSIGZsYWcgY291bGQgaGVscCBmb3IgZXJyYXRhIElEIGk0NzgKKyAqICB3aGljaCBhcHBsaWVzIHRvIDM0MzAgPD0gRVMzLjEsIGJ1dCBzaW5jZSB0aGUgU0FSIGZlYXR1cmUKKyAqICBpcyBicm9rZW4sIGRvIG5vdCB1c2UgaXQuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gY29yZV8zeHh4X3ByZV9lczNfMV9wd3JkbSA9IHsKKwkubmFtZQkJICA9ICJjb3JlX3B3cmRtIiwKKwkucHJjbV9vZmZzCSAgPSBDT1JFX01PRCwKKwkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwRVMxIHwKKwkJCQkJICAgQ0hJUF9JU19PTUFQMzQzMEVTMiB8CisJCQkJCSAgIENISVBfSVNfT01BUDM0MzBFUzNfMCB8CisJCQkJCSAgIENISVBfSVNfT01BUDM2MzBFUzEpLAorCS5wd3JzdHMJCSAgPSBQV1JTVFNfT0ZGX1JFVF9PTiwKKwkucHdyc3RzX2xvZ2ljX3JldCA9IFBXUlNUU19PRkZfUkVULAorCS5iYW5rcwkJICA9IDIsCisJLnB3cnN0c19tZW1fcmV0CSAgPSB7CisJCVswXSA9IFBXUlNUU19PRkZfUkVULAkgLyogTUVNMVJFVFNUQVRFICovCisJCVsxXSA9IFBXUlNUU19PRkZfUkVULAkgLyogTUVNMlJFVFNUQVRFICovCisJfSwKKwkucHdyc3RzX21lbV9vbgkgID0geworCQlbMF0gPSBQV1JTVFNfT0ZGX1JFVF9PTiwgLyogTUVNMU9OU1RBVEUgKi8KKwkJWzFdID0gUFdSU1RTX09GRl9SRVRfT04sIC8qIE1FTTJPTlNUQVRFICovCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gY29yZV8zeHh4X2VzM18xX3B3cmRtID0geworCS5uYW1lCQkgID0gImNvcmVfcHdyZG0iLAorCS5wcmNtX29mZnMJICA9IENPUkVfTU9ELAorCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzBFUzNfMSB8CisJCQkJCSAgQ0hJUF9HRV9PTUFQMzYzMEVTMV8xKSwKKwkucHdyc3RzCQkgID0gUFdSU1RTX09GRl9SRVRfT04sCisJLnB3cnN0c19sb2dpY19yZXQgPSBQV1JTVFNfT0ZGX1JFVCwKKwkvKgorCSAqIFNldHRpbmcgdGhlIFNBUiBmbGFnIGZvciBlcnJhdGEgSUQgaTQ3OCB3aGljaCBhcHBsaWVzCisJICogIHRvIDM0MzAgPD0gRVMzLjEKKwkgKi8KKwkuZmxhZ3MJCSAgPSBQV1JETV9IQVNfSERXUl9TQVIsIC8qIGZvciBVU0JUTEwgb25seSAqLworCS5iYW5rcwkJICA9IDIsCisJLnB3cnN0c19tZW1fcmV0CSAgPSB7CisJCVswXSA9IFBXUlNUU19PRkZfUkVULAkgLyogTUVNMVJFVFNUQVRFICovCisJCVsxXSA9IFBXUlNUU19PRkZfUkVULAkgLyogTUVNMlJFVFNUQVRFICovCisJfSwKKwkucHdyc3RzX21lbV9vbgkgID0geworCQlbMF0gPSBQV1JTVFNfT0ZGX1JFVF9PTiwgLyogTUVNMU9OU1RBVEUgKi8KKwkJWzFdID0gUFdSU1RTX09GRl9SRVRfT04sIC8qIE1FTTJPTlNUQVRFICovCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gZHNzX3B3cmRtID0geworCS5uYW1lCQkgID0gImRzc19wd3JkbSIsCisJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCisJLnByY21fb2ZmcwkgID0gT01BUDM0MzBfRFNTX01PRCwKKwkucHdyc3RzCQkgID0gUFdSU1RTX09GRl9SRVRfT04sCisJLnB3cnN0c19sb2dpY19yZXQgPSBQV1JETV9QT1dFUl9SRVQsCisJLmJhbmtzCQkgID0gMSwKKwkucHdyc3RzX21lbV9yZXQJICA9IHsKKwkJWzBdID0gUFdSRE1fUE9XRVJfUkVULCAvKiBNRU1SRVRTVEFURSAqLworCX0sCisJLnB3cnN0c19tZW1fb24JICA9IHsKKwkJWzBdID0gUFdSRE1fUE9XRVJfT04sICAvKiBNRU1PTlNUQVRFICovCisJfSwKK307CisKKy8qCisgKiBBbHRob3VnaCB0aGUgMzRYWCBUUk0gUmV2IEsgVGFibGUgNC0zNzEgbm90ZXMgdGhhdCByZXRlbnRpb24gaXMgYQorICogcG9zc2libGUgU0dYIHBvd2Vyc3RhdGUsIHRoZSBTR1ggZGV2aWNlIGl0c2VsZiBkb2VzIG5vdCBzdXBwb3J0CisgKiByZXRlbnRpb24uCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gc2d4X3B3cmRtID0geworCS5uYW1lCQkgID0gInNneF9wd3JkbSIsCisJLnByY21fb2ZmcwkgID0gT01BUDM0MzBFUzJfU0dYX01PRCwKKwkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0dFX09NQVAzNDMwRVMyKSwKKwkvKiBYWFggVGhpcyBpcyBhY2N1cmF0ZSBmb3IgMzQzMCBTR1gsIGJ1dCB3aGF0IGFib3V0IEdGWD8gKi8KKwkucHdyc3RzCQkgID0gUFdSU1RTX09GRl9PTiwKKwkucHdyc3RzX2xvZ2ljX3JldCA9IFBXUkRNX1BPV0VSX1JFVCwKKwkuYmFua3MJCSAgPSAxLAorCS5wd3JzdHNfbWVtX3JldAkgID0geworCQlbMF0gPSBQV1JETV9QT1dFUl9SRVQsIC8qIE1FTVJFVFNUQVRFICovCisJfSwKKwkucHdyc3RzX21lbV9vbgkgID0geworCQlbMF0gPSBQV1JETV9QT1dFUl9PTiwgIC8qIE1FTU9OU1RBVEUgKi8KKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiBjYW1fcHdyZG0gPSB7CisJLm5hbWUJCSAgPSAiY2FtX3B3cmRtIiwKKwkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKKwkucHJjbV9vZmZzCSAgPSBPTUFQMzQzMF9DQU1fTU9ELAorCS5wd3JzdHMJCSAgPSBQV1JTVFNfT0ZGX1JFVF9PTiwKKwkucHdyc3RzX2xvZ2ljX3JldCA9IFBXUkRNX1BPV0VSX1JFVCwKKwkuYmFua3MJCSAgPSAxLAorCS5wd3JzdHNfbWVtX3JldAkgID0geworCQlbMF0gPSBQV1JETV9QT1dFUl9SRVQsIC8qIE1FTVJFVFNUQVRFICovCisJfSwKKwkucHdyc3RzX21lbV9vbgkgID0geworCQlbMF0gPSBQV1JETV9QT1dFUl9PTiwgIC8qIE1FTU9OU1RBVEUgKi8KKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiBwZXJfcHdyZG0gPSB7CisJLm5hbWUJCSAgPSAicGVyX3B3cmRtIiwKKwkucHJjbV9vZmZzCSAgPSBPTUFQMzQzMF9QRVJfTU9ELAorCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLAorCS5wd3JzdHMJCSAgPSBQV1JTVFNfT0ZGX1JFVF9PTiwKKwkucHdyc3RzX2xvZ2ljX3JldCA9IFBXUlNUU19PRkZfUkVULAorCS5iYW5rcwkJICA9IDEsCisJLnB3cnN0c19tZW1fcmV0CSAgPSB7CisJCVswXSA9IFBXUkRNX1BPV0VSX1JFVCwgLyogTUVNUkVUU1RBVEUgKi8KKwl9LAorCS5wd3JzdHNfbWVtX29uCSAgPSB7CisJCVswXSA9IFBXUkRNX1BPV0VSX09OLCAgLyogTUVNT05TVEFURSAqLworCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluIGVtdV9wd3JkbSA9IHsKKwkubmFtZQkJPSAiZW11X3B3cmRtIiwKKwkucHJjbV9vZmZzCT0gT01BUDM0MzBfRU1VX01PRCwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCit9OworCitzdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluIG5lb25fcHdyZG0gPSB7CisJLm5hbWUJCSAgPSAibmVvbl9wd3JkbSIsCisJLnByY21fb2ZmcwkgID0gT01BUDM0MzBfTkVPTl9NT0QsCisJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCisJLnB3cnN0cwkJICA9IFBXUlNUU19PRkZfUkVUX09OLAorCS5wd3JzdHNfbG9naWNfcmV0ID0gUFdSRE1fUE9XRVJfUkVULAorfTsKKworc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiB1c2Job3N0X3B3cmRtID0geworCS5uYW1lCQkgID0gInVzYmhvc3RfcHdyZG0iLAorCS5wcmNtX29mZnMJICA9IE9NQVAzNDMwRVMyX1VTQkhPU1RfTU9ELAorCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfR0VfT01BUDM0MzBFUzIpLAorCS5wd3JzdHMJCSAgPSBQV1JTVFNfT0ZGX1JFVF9PTiwKKwkucHdyc3RzX2xvZ2ljX3JldCA9IFBXUkRNX1BPV0VSX1JFVCwKKwkvKgorCSAqIFJFVklTSVQ6IEVuYWJsaW5nIHVzYiBob3N0IHNhdmUgYW5kIHJlc3RvcmUgbWVjaGFuaXNtIHNlZW1zIHRvCisJICogbGVhdmUgdGhlIHVzYiBob3N0IGRvbWFpbiBwZXJtYW5lbnRseSBpbiBBQ1RJVkUgbW9kZSBhZnRlcgorCSAqIGNoYW5naW5nIHRoZSB1c2IgaG9zdCBwb3dlciBkb21haW4gc3RhdGUgZnJvbSBPRkYgdG8gYWN0aXZlIG9uY2UuCisJICogRGlzYWJsaW5nIGZvciBub3cuCisJICovCisJLyouZmxhZ3MJICA9IFBXUkRNX0hBU19IRFdSX1NBUiwqLyAvKiBmb3IgVVNCSE9TVCBjdHJsciBvbmx5ICovCisJLmJhbmtzCQkgID0gMSwKKwkucHdyc3RzX21lbV9yZXQJICA9IHsKKwkJWzBdID0gUFdSRE1fUE9XRVJfUkVULCAvKiBNRU1SRVRTVEFURSAqLworCX0sCisJLnB3cnN0c19tZW1fb24JICA9IHsKKwkJWzBdID0gUFdSRE1fUE9XRVJfT04sICAvKiBNRU1PTlNUQVRFICovCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gZHBsbDFfcHdyZG0gPSB7CisJLm5hbWUJCT0gImRwbGwxX3B3cmRtIiwKKwkucHJjbV9vZmZzCT0gTVBVX01PRCwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCit9OworCitzdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluIGRwbGwyX3B3cmRtID0geworCS5uYW1lCQk9ICJkcGxsMl9wd3JkbSIsCisJLnByY21fb2Zmcwk9IE9NQVAzNDMwX0lWQTJfTU9ELAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gZHBsbDNfcHdyZG0gPSB7CisJLm5hbWUJCT0gImRwbGwzX3B3cmRtIiwKKwkucHJjbV9vZmZzCT0gUExMX01PRCwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCit9OworCitzdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluIGRwbGw0X3B3cmRtID0geworCS5uYW1lCQk9ICJkcGxsNF9wd3JkbSIsCisJLnByY21fb2Zmcwk9IFBMTF9NT0QsCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLAorfTsKKworc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiBkcGxsNV9wd3JkbSA9IHsKKwkubmFtZQkJPSAiZHBsbDVfcHdyZG0iLAorCS5wcmNtX29mZnMJPSBQTExfTU9ELAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0dFX09NQVAzNDMwRVMyKSwKK307CisKKy8qIEFzIHBvd2VyZG9tYWlucyBhcmUgYWRkZWQgb3IgcmVtb3ZlZCBhYm92ZSwgdGhpcyBsaXN0IG11c3QgYWxzbyBiZSBjaGFuZ2VkICovCitzdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluICpwb3dlcmRvbWFpbnNfb21hcDN4eHhbXSBfX2luaXRkYXRhID0geworCisJJndrdXBfb21hcDJfcHdyZG0sCisJJmdmeF9vbWFwMl9wd3JkbSwKKwkmaXZhMl9wd3JkbSwKKwkmbXB1XzN4eHhfcHdyZG0sCisJJm5lb25fcHdyZG0sCisJJmNvcmVfM3h4eF9wcmVfZXMzXzFfcHdyZG0sCisJJmNvcmVfM3h4eF9lczNfMV9wd3JkbSwKKwkmY2FtX3B3cmRtLAorCSZkc3NfcHdyZG0sCisJJnBlcl9wd3JkbSwKKwkmZW11X3B3cmRtLAorCSZzZ3hfcHdyZG0sCisJJnVzYmhvc3RfcHdyZG0sCisJJmRwbGwxX3B3cmRtLAorCSZkcGxsMl9wd3JkbSwKKwkmZHBsbDNfcHdyZG0sCisJJmRwbGw0X3B3cmRtLAorCSZkcGxsNV9wd3JkbSwKKyNlbmRpZgorCU5VTEwKK307CisKKwordm9pZCBfX2luaXQgb21hcDN4eHhfcG93ZXJkb21haW5zX2luaXQodm9pZCkKK3sKKwlwd3JkbV9pbml0KHBvd2VyZG9tYWluc19vbWFwM3h4eCwgJm9tYXAzX3B3cmRtX29wZXJhdGlvbnMpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbnM0NHh4LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL3Bvd2VyZG9tYWluczQ0eHguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWMwMWI1NS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3Bvd2VyZG9tYWluczQ0eHguaAorKysgL2Rldi9udWxsCkBAIC0xLDMxOSArMCwwIEBACi0vKgotICogT01BUDQgUG93ZXIgZG9tYWlucyBmcmFtZXdvcmsKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgTm9raWEgQ29ycG9yYXRpb24KLSAqCi0gKiBBYmhpaml0IFBhZ2FyZSAoYWJoaWppdHBhZ2FyZUB0aS5jb20pCi0gKiBCZW5vaXQgQ291c3NvbiAoYi1jb3Vzc29uQHRpLmNvbSkKLSAqIFBhdWwgV2FsbXNsZXkgKHBhdWxAcHdzYW4uY29tKQotICoKLSAqIFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHRoZSBPTUFQIGhhcmR3YXJlIGRhdGFiYXNlcy4KLSAqIFdlIHJlc3BlY3RmdWxseSBhc2sgdGhhdCBhbnkgbW9kaWZpY2F0aW9ucyB0byB0aGlzIGZpbGUgYmUgY29vcmRpbmF0ZWQKLSAqIHdpdGggdGhlIHB1YmxpYyBsaW51eC1vbWFwQHZnZXIua2VybmVsLm9yZyBtYWlsaW5nIGxpc3QgYW5kIHRoZQotICogYXV0aG9ycyBhYm92ZSB0byBlbnN1cmUgdGhhdCB0aGUgYXV0b2dlbmVyYXRpb24gc2NyaXB0cyBhcmUga2VwdAotICogdXAtdG8tZGF0ZSB3aXRoIHRoZSBmaWxlIGNvbnRlbnRzLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLQotI2lmbmRlZiBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfUE9XRVJET01BSU5TNDRYWF9ICi0jZGVmaW5lIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9QT1dFUkRPTUFJTlM0NFhYX0gKLQotI2luY2x1ZGUgPHBsYXQvcG93ZXJkb21haW4uaD4KLQotI2luY2x1ZGUgInByY20tY29tbW9uLmgiCi0jaW5jbHVkZSAiY20uaCIKLSNpbmNsdWRlICJjbS1yZWdiaXRzLTQ0eHguaCIKLSNpbmNsdWRlICJwcm0uaCIKLSNpbmNsdWRlICJwcm0tcmVnYml0cy00NHh4LmgiCi0KLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQotCi0vKiBjb3JlXzQ0eHhfcHdyZG06IENPUkUgcG93ZXIgZG9tYWluICovCi1zdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluIGNvcmVfNDR4eF9wd3JkbSA9IHsKLQkubmFtZQkJICA9ICJjb3JlX3B3cmRtIiwKLQkucHJjbV9vZmZzCSAgPSBPTUFQNDQzMF9QUk1fQ09SRV9NT0QsCi0JLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCi0JLnB3cnN0cwkJICA9IFBXUlNUU19SRVRfT04sCi0JLnB3cnN0c19sb2dpY19yZXQgPSBQV1JTVFNfT0ZGX1JFVCwKLQkuYmFua3MJCSAgPSA1LAotCS5wd3JzdHNfbWVtX3JldAk9IHsKLQkJWzBdID0gUFdSRE1fUE9XRVJfT0ZGLAkvKiBjb3JlX25yZXRfYmFuayAqLwotCQlbMV0gPSBQV1JTVFNfT0ZGX1JFVCwJLyogY29yZV9vY21yYW0gKi8KLQkJWzJdID0gUFdSRE1fUE9XRVJfUkVULAkvKiBjb3JlX290aGVyX2JhbmsgKi8KLQkJWzNdID0gUFdSU1RTX09GRl9SRVQsCS8qIGR1Y2F0aV9sMnJhbSAqLwotCQlbNF0gPSBQV1JTVFNfT0ZGX1JFVCwJLyogZHVjYXRpX3VuaWNhY2hlICovCi0JfSwKLQkucHdyc3RzX21lbV9vbgk9IHsKLQkJWzBdID0gUFdSRE1fUE9XRVJfT04sCS8qIGNvcmVfbnJldF9iYW5rICovCi0JCVsxXSA9IFBXUlNUU19PRkZfUkVULAkvKiBjb3JlX29jbXJhbSAqLwotCQlbMl0gPSBQV1JETV9QT1dFUl9PTiwJLyogY29yZV9vdGhlcl9iYW5rICovCi0JCVszXSA9IFBXUkRNX1BPV0VSX09OLAkvKiBkdWNhdGlfbDJyYW0gKi8KLQkJWzRdID0gUFdSRE1fUE9XRVJfT04sCS8qIGR1Y2F0aV91bmljYWNoZSAqLwotCX0sCi0JLmZsYWdzCQk9IFBXUkRNX0hBU19MT1dQT1dFUlNUQVRFQ0hBTkdFLAotfTsKLQotLyogZ2Z4XzQ0eHhfcHdyZG06IDNEIGFjY2VsZXJhdG9yIHBvd2VyIGRvbWFpbiAqLwotc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiBnZnhfNDR4eF9wd3JkbSA9IHsKLQkubmFtZQkJICA9ICJnZnhfcHdyZG0iLAotCS5wcmNtX29mZnMJICA9IE9NQVA0NDMwX1BSTV9HRlhfTU9ELAotCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAotCS5wd3JzdHMJCSAgPSBQV1JTVFNfT0ZGX09OLAotCS5iYW5rcwkJICA9IDEsCi0JLnB3cnN0c19tZW1fcmV0CT0gewotCQlbMF0gPSBQV1JETV9QT1dFUl9PRkYsCS8qIGdmeF9tZW0gKi8KLQl9LAotCS5wd3JzdHNfbWVtX29uCT0gewotCQlbMF0gPSBQV1JETV9QT1dFUl9PTiwJLyogZ2Z4X21lbSAqLwotCX0sCi0JLmZsYWdzCQk9IFBXUkRNX0hBU19MT1dQT1dFUlNUQVRFQ0hBTkdFLAotfTsKLQotLyogYWJlXzQ0eHhfcHdyZG06IEF1ZGlvIGJhY2sgZW5kIHBvd2VyIGRvbWFpbiAqLwotc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiBhYmVfNDR4eF9wd3JkbSA9IHsKLQkubmFtZQkJICA9ICJhYmVfcHdyZG0iLAotCS5wcmNtX29mZnMJICA9IE9NQVA0NDMwX1BSTV9BQkVfTU9ELAotCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAotCS5wd3JzdHMJCSAgPSBQV1JTVFNfT0ZGX1JFVF9PTiwKLQkucHdyc3RzX2xvZ2ljX3JldCA9IFBXUkRNX1BPV0VSX09GRiwKLQkuYmFua3MJCSAgPSAyLAotCS5wd3JzdHNfbWVtX3JldAk9IHsKLQkJWzBdID0gUFdSRE1fUE9XRVJfUkVULAkvKiBhZXNzbWVtICovCi0JCVsxXSA9IFBXUkRNX1BPV0VSX09GRiwJLyogcGVyaXBobWVtICovCi0JfSwKLQkucHdyc3RzX21lbV9vbgk9IHsKLQkJWzBdID0gUFdSRE1fUE9XRVJfT04sCS8qIGFlc3NtZW0gKi8KLQkJWzFdID0gUFdSRE1fUE9XRVJfT04sCS8qIHBlcmlwaG1lbSAqLwotCX0sCi0JLmZsYWdzCQk9IFBXUkRNX0hBU19MT1dQT1dFUlNUQVRFQ0hBTkdFLAotfTsKLQotLyogZHNzXzQ0eHhfcHdyZG06IERpc3BsYXkgc3Vic3lzdGVtIHBvd2VyIGRvbWFpbiAqLwotc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiBkc3NfNDR4eF9wd3JkbSA9IHsKLQkubmFtZQkJICA9ICJkc3NfcHdyZG0iLAotCS5wcmNtX29mZnMJICA9IE9NQVA0NDMwX1BSTV9EU1NfTU9ELAotCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAotCS5wd3JzdHMJCSAgPSBQV1JTVFNfT0ZGX1JFVF9PTiwKLQkucHdyc3RzX2xvZ2ljX3JldCA9IFBXUlNUU19PRkYsCi0JLmJhbmtzCQkgID0gMSwKLQkucHdyc3RzX21lbV9yZXQJPSB7Ci0JCVswXSA9IFBXUkRNX1BPV0VSX09GRiwJLyogZHNzX21lbSAqLwotCX0sCi0JLnB3cnN0c19tZW1fb24JPSB7Ci0JCVswXSA9IFBXUkRNX1BPV0VSX09OLAkvKiBkc3NfbWVtICovCi0JfSwKLQkuZmxhZ3MJCT0gUFdSRE1fSEFTX0xPV1BPV0VSU1RBVEVDSEFOR0UsCi19OwotCi0vKiB0ZXNsYV80NHh4X3B3cmRtOiBUZXNsYSBwcm9jZXNzb3IgcG93ZXIgZG9tYWluICovCi1zdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluIHRlc2xhXzQ0eHhfcHdyZG0gPSB7Ci0JLm5hbWUJCSAgPSAidGVzbGFfcHdyZG0iLAotCS5wcmNtX29mZnMJICA9IE9NQVA0NDMwX1BSTV9URVNMQV9NT0QsCi0JLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCi0JLnB3cnN0cwkJICA9IFBXUlNUU19PRkZfUkVUX09OLAotCS5wd3JzdHNfbG9naWNfcmV0ID0gUFdSU1RTX09GRl9SRVQsCi0JLmJhbmtzCQkgID0gMywKLQkucHdyc3RzX21lbV9yZXQJPSB7Ci0JCVswXSA9IFBXUkRNX1BPV0VSX1JFVCwJLyogdGVzbGFfZWRtYSAqLwotCQlbMV0gPSBQV1JTVFNfT0ZGX1JFVCwJLyogdGVzbGFfbDEgKi8KLQkJWzJdID0gUFdSU1RTX09GRl9SRVQsCS8qIHRlc2xhX2wyICovCi0JfSwKLQkucHdyc3RzX21lbV9vbgk9IHsKLQkJWzBdID0gUFdSRE1fUE9XRVJfT04sCS8qIHRlc2xhX2VkbWEgKi8KLQkJWzFdID0gUFdSRE1fUE9XRVJfT04sCS8qIHRlc2xhX2wxICovCi0JCVsyXSA9IFBXUkRNX1BPV0VSX09OLAkvKiB0ZXNsYV9sMiAqLwotCX0sCi0JLmZsYWdzCQk9IFBXUkRNX0hBU19MT1dQT1dFUlNUQVRFQ0hBTkdFLAotfTsKLQotLyogd2t1cF80NHh4X3B3cmRtOiBXYWtlLXVwIHBvd2VyIGRvbWFpbiAqLwotc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiB3a3VwXzQ0eHhfcHdyZG0gPSB7Ci0JLm5hbWUJCSAgPSAid2t1cF9wd3JkbSIsCi0JLnByY21fb2ZmcwkgID0gT01BUDQ0MzBfUFJNX1dLVVBfTU9ELAotCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAotCS5wd3JzdHMJCSAgPSBQV1JTVFNfT04sCi0JLmJhbmtzCQkgID0gMSwKLQkucHdyc3RzX21lbV9yZXQJPSB7Ci0JCVswXSA9IFBXUkRNX1BPV0VSX09GRiwJLyogd2t1cF9iYW5rICovCi0JfSwKLQkucHdyc3RzX21lbV9vbgk9IHsKLQkJWzBdID0gUFdSRE1fUE9XRVJfT04sCS8qIHdrdXBfYmFuayAqLwotCX0sCi19OwotCi0vKiBjcHUwXzQ0eHhfcHdyZG06IE1QVTAgcHJvY2Vzc29yIGFuZCBOZW9uIGNvcHJvY2Vzc29yIHBvd2VyIGRvbWFpbiAqLwotc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiBjcHUwXzQ0eHhfcHdyZG0gPSB7Ci0JLm5hbWUJCSAgPSAiY3B1MF9wd3JkbSIsCi0JLnByY21fb2ZmcwkgID0gT01BUDQ0MzBfUFJDTV9NUFVfQ1BVMF9NT0QsCi0JLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCi0JLnB3cnN0cwkJICA9IFBXUlNUU19PRkZfUkVUX09OLAotCS5wd3JzdHNfbG9naWNfcmV0ID0gUFdSU1RTX09GRl9SRVQsCi0JLmJhbmtzCQkgID0gMSwKLQkucHdyc3RzX21lbV9yZXQJPSB7Ci0JCVswXSA9IFBXUlNUU19PRkZfUkVULAkvKiBjcHUwX2wxICovCi0JfSwKLQkucHdyc3RzX21lbV9vbgk9IHsKLQkJWzBdID0gUFdSRE1fUE9XRVJfT04sCS8qIGNwdTBfbDEgKi8KLQl9LAotfTsKLQotLyogY3B1MV80NHh4X3B3cmRtOiBNUFUxIHByb2Nlc3NvciBhbmQgTmVvbiBjb3Byb2Nlc3NvciBwb3dlciBkb21haW4gKi8KLXN0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gY3B1MV80NHh4X3B3cmRtID0gewotCS5uYW1lCQkgID0gImNwdTFfcHdyZG0iLAotCS5wcmNtX29mZnMJICA9IE9NQVA0NDMwX1BSQ01fTVBVX0NQVTFfTU9ELAotCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAotCS5wd3JzdHMJCSAgPSBQV1JTVFNfT0ZGX1JFVF9PTiwKLQkucHdyc3RzX2xvZ2ljX3JldCA9IFBXUlNUU19PRkZfUkVULAotCS5iYW5rcwkJICA9IDEsCi0JLnB3cnN0c19tZW1fcmV0CT0gewotCQlbMF0gPSBQV1JTVFNfT0ZGX1JFVCwJLyogY3B1MV9sMSAqLwotCX0sCi0JLnB3cnN0c19tZW1fb24JPSB7Ci0JCVswXSA9IFBXUkRNX1BPV0VSX09OLAkvKiBjcHUxX2wxICovCi0JfSwKLX07Ci0KLS8qIGVtdV80NHh4X3B3cmRtOiBFbXVsYXRpb24gcG93ZXIgZG9tYWluICovCi1zdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluIGVtdV80NHh4X3B3cmRtID0gewotCS5uYW1lCQkgID0gImVtdV9wd3JkbSIsCi0JLnByY21fb2ZmcwkgID0gT01BUDQ0MzBfUFJNX0VNVV9NT0QsCi0JLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCi0JLnB3cnN0cwkJICA9IFBXUlNUU19PRkZfT04sCi0JLmJhbmtzCQkgID0gMSwKLQkucHdyc3RzX21lbV9yZXQJPSB7Ci0JCVswXSA9IFBXUkRNX1BPV0VSX09GRiwJLyogZW11X2JhbmsgKi8KLQl9LAotCS5wd3JzdHNfbWVtX29uCT0gewotCQlbMF0gPSBQV1JETV9QT1dFUl9PTiwJLyogZW11X2JhbmsgKi8KLQl9LAotfTsKLQotLyogbXB1XzQ0eHhfcHdyZG06IE1vZGVuYSBwcm9jZXNzb3IgYW5kIHRoZSBOZW9uIGNvcHJvY2Vzc29yIHBvd2VyIGRvbWFpbiAqLwotc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiBtcHVfNDR4eF9wd3JkbSA9IHsKLQkubmFtZQkJICA9ICJtcHVfcHdyZG0iLAotCS5wcmNtX29mZnMJICA9IE9NQVA0NDMwX1BSTV9NUFVfTU9ELAotCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAotCS5wd3JzdHMJCSAgPSBQV1JTVFNfT0ZGX1JFVF9PTiwKLQkucHdyc3RzX2xvZ2ljX3JldCA9IFBXUlNUU19PRkZfUkVULAotCS5iYW5rcwkJICA9IDMsCi0JLnB3cnN0c19tZW1fcmV0CT0gewotCQlbMF0gPSBQV1JTVFNfT0ZGX1JFVCwJLyogbXB1X2wxICovCi0JCVsxXSA9IFBXUlNUU19PRkZfUkVULAkvKiBtcHVfbDIgKi8KLQkJWzJdID0gUFdSRE1fUE9XRVJfUkVULAkvKiBtcHVfcmFtICovCi0JfSwKLQkucHdyc3RzX21lbV9vbgk9IHsKLQkJWzBdID0gUFdSRE1fUE9XRVJfT04sCS8qIG1wdV9sMSAqLwotCQlbMV0gPSBQV1JETV9QT1dFUl9PTiwJLyogbXB1X2wyICovCi0JCVsyXSA9IFBXUkRNX1BPV0VSX09OLAkvKiBtcHVfcmFtICovCi0JfSwKLX07Ci0KLS8qIGl2YWhkXzQ0eHhfcHdyZG06IElWQS1IRCBwb3dlciBkb21haW4gKi8KLXN0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gaXZhaGRfNDR4eF9wd3JkbSA9IHsKLQkubmFtZQkJICA9ICJpdmFoZF9wd3JkbSIsCi0JLnByY21fb2ZmcwkgID0gT01BUDQ0MzBfUFJNX0lWQUhEX01PRCwKLQkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKLQkucHdyc3RzCQkgID0gUFdSU1RTX09GRl9SRVRfT04sCi0JLnB3cnN0c19sb2dpY19yZXQgPSBQV1JETV9QT1dFUl9PRkYsCi0JLmJhbmtzCQkgID0gNCwKLQkucHdyc3RzX21lbV9yZXQJPSB7Ci0JCVswXSA9IFBXUkRNX1BPV0VSX09GRiwJLyogaHdhX21lbSAqLwotCQlbMV0gPSBQV1JTVFNfT0ZGX1JFVCwJLyogc2wyX21lbSAqLwotCQlbMl0gPSBQV1JTVFNfT0ZGX1JFVCwJLyogdGNtMV9tZW0gKi8KLQkJWzNdID0gUFdSU1RTX09GRl9SRVQsCS8qIHRjbTJfbWVtICovCi0JfSwKLQkucHdyc3RzX21lbV9vbgk9IHsKLQkJWzBdID0gUFdSRE1fUE9XRVJfT04sCS8qIGh3YV9tZW0gKi8KLQkJWzFdID0gUFdSRE1fUE9XRVJfT04sCS8qIHNsMl9tZW0gKi8KLQkJWzJdID0gUFdSRE1fUE9XRVJfT04sCS8qIHRjbTFfbWVtICovCi0JCVszXSA9IFBXUkRNX1BPV0VSX09OLAkvKiB0Y20yX21lbSAqLwotCX0sCi0JLmZsYWdzCQk9IFBXUkRNX0hBU19MT1dQT1dFUlNUQVRFQ0hBTkdFLAotfTsKLQotLyogY2FtXzQ0eHhfcHdyZG06IENhbWVyYSBzdWJzeXN0ZW0gcG93ZXIgZG9tYWluICovCi1zdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluIGNhbV80NHh4X3B3cmRtID0gewotCS5uYW1lCQkgID0gImNhbV9wd3JkbSIsCi0JLnByY21fb2ZmcwkgID0gT01BUDQ0MzBfUFJNX0NBTV9NT0QsCi0JLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCi0JLnB3cnN0cwkJICA9IFBXUlNUU19PRkZfT04sCi0JLmJhbmtzCQkgID0gMSwKLQkucHdyc3RzX21lbV9yZXQJPSB7Ci0JCVswXSA9IFBXUkRNX1BPV0VSX09GRiwJLyogY2FtX21lbSAqLwotCX0sCi0JLnB3cnN0c19tZW1fb24JPSB7Ci0JCVswXSA9IFBXUkRNX1BPV0VSX09OLAkvKiBjYW1fbWVtICovCi0JfSwKLQkuZmxhZ3MJCT0gUFdSRE1fSEFTX0xPV1BPV0VSU1RBVEVDSEFOR0UsCi19OwotCi0vKiBsM2luaXRfNDR4eF9wd3JkbTogTDMgaW5pdGF0b3JzIHBoZXJpcGhlcmFscyBwb3dlciBkb21haW4gICovCi1zdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluIGwzaW5pdF80NHh4X3B3cmRtID0gewotCS5uYW1lCQkgID0gImwzaW5pdF9wd3JkbSIsCi0JLnByY21fb2ZmcwkgID0gT01BUDQ0MzBfUFJNX0wzSU5JVF9NT0QsCi0JLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCi0JLnB3cnN0cwkJICA9IFBXUlNUU19PRkZfUkVUX09OLAotCS5wd3JzdHNfbG9naWNfcmV0ID0gUFdSU1RTX09GRl9SRVQsCi0JLmJhbmtzCQkgID0gMSwKLQkucHdyc3RzX21lbV9yZXQJPSB7Ci0JCVswXSA9IFBXUkRNX1BPV0VSX09GRiwJLyogbDNpbml0X2JhbmsxICovCi0JfSwKLQkucHdyc3RzX21lbV9vbgk9IHsKLQkJWzBdID0gUFdSRE1fUE9XRVJfT04sCS8qIGwzaW5pdF9iYW5rMSAqLwotCX0sCi0JLmZsYWdzCQk9IFBXUkRNX0hBU19MT1dQT1dFUlNUQVRFQ0hBTkdFLAotfTsKLQotLyogbDRwZXJfNDR4eF9wd3JkbTogVGFyZ2V0IHBlcmlwaGVyYWxzIHBvd2VyIGRvbWFpbiAqLwotc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiBsNHBlcl80NHh4X3B3cmRtID0gewotCS5uYW1lCQkgID0gImw0cGVyX3B3cmRtIiwKLQkucHJjbV9vZmZzCSAgPSBPTUFQNDQzMF9QUk1fTDRQRVJfTU9ELAotCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAotCS5wd3JzdHMJCSAgPSBQV1JTVFNfT0ZGX1JFVF9PTiwKLQkucHdyc3RzX2xvZ2ljX3JldCA9IFBXUlNUU19PRkZfUkVULAotCS5iYW5rcwkJICA9IDIsCi0JLnB3cnN0c19tZW1fcmV0CT0gewotCQlbMF0gPSBQV1JETV9QT1dFUl9PRkYsCS8qIG5vbnJldGFpbmVkX2JhbmsgKi8KLQkJWzFdID0gUFdSRE1fUE9XRVJfUkVULAkvKiByZXRhaW5lZF9iYW5rICovCi0JfSwKLQkucHdyc3RzX21lbV9vbgk9IHsKLQkJWzBdID0gUFdSRE1fUE9XRVJfT04sCS8qIG5vbnJldGFpbmVkX2JhbmsgKi8KLQkJWzFdID0gUFdSRE1fUE9XRVJfT04sCS8qIHJldGFpbmVkX2JhbmsgKi8KLQl9LAotCS5mbGFncwkJPSBQV1JETV9IQVNfTE9XUE9XRVJTVEFURUNIQU5HRSwKLX07Ci0KLS8qCi0gKiBhbHdheXNfb25fY29yZV80NHh4X3B3cmRtOiBBbHdheXMgT04gbG9naWMgdGhhdCBzaXRzIGluIFZERF9DT1JFIHZvbHRhZ2UKLSAqIGRvbWFpbgotICovCi1zdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluIGFsd2F5c19vbl9jb3JlXzQ0eHhfcHdyZG0gPSB7Ci0JLm5hbWUJCSAgPSAiYWx3YXlzX29uX2NvcmVfcHdyZG0iLAotCS5wcmNtX29mZnMJICA9IE9NQVA0NDMwX1BSTV9BTFdBWVNfT05fTU9ELAotCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAotCS5wd3JzdHMJCSAgPSBQV1JTVFNfT04sCi19OwotCi0vKiBjZWZ1c2VfNDR4eF9wd3JkbTogQ3VzdG9tZXIgZWZ1c2UgY29udHJvbGxlciBwb3dlciBkb21haW4gKi8KLXN0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gY2VmdXNlXzQ0eHhfcHdyZG0gPSB7Ci0JLm5hbWUJCSAgPSAiY2VmdXNlX3B3cmRtIiwKLQkucHJjbV9vZmZzCSAgPSBPTUFQNDQzMF9QUk1fQ0VGVVNFX01PRCwKLQkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKLQkucHdyc3RzCQkgID0gUFdSU1RTX09GRl9PTiwKLX07Ci0KLS8qCi0gKiBUaGUgZm9sbG93aW5nIHBvd2VyIGRvbWFpbnMgYXJlIG5vdCB1bmRlciBTVyBjb250cm9sCi0gKgotICogYWx3YXlzX29uX2l2YQotICogYWx3YXlzX29uX21wdQotICogc3RkZWZ1c2UKLSAqLwotCi0jZW5kaWYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3Bvd2VyZG9tYWluczQ0eHhfZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbnM0NHh4X2RhdGEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmQ3NjQxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbnM0NHh4X2RhdGEuYwpAQCAtMCwwICsxLDM1NSBAQAorLyoKKyAqIE9NQVA0IFBvd2VyIGRvbWFpbnMgZnJhbWV3b3JrCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIE5va2lhIENvcnBvcmF0aW9uCisgKgorICogQWJoaWppdCBQYWdhcmUgKGFiaGlqaXRwYWdhcmVAdGkuY29tKQorICogQmVub2l0IENvdXNzb24gKGItY291c3NvbkB0aS5jb20pCisgKiBQYXVsIFdhbG1zbGV5IChwYXVsQHB3c2FuLmNvbSkKKyAqCisgKiBUaGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0aGUgT01BUCBoYXJkd2FyZSBkYXRhYmFzZXMuCisgKiBXZSByZXNwZWN0ZnVsbHkgYXNrIHRoYXQgYW55IG1vZGlmaWNhdGlvbnMgdG8gdGhpcyBmaWxlIGJlIGNvb3JkaW5hdGVkCisgKiB3aXRoIHRoZSBwdWJsaWMgbGludXgtb21hcEB2Z2VyLmtlcm5lbC5vcmcgbWFpbGluZyBsaXN0IGFuZCB0aGUKKyAqIGF1dGhvcnMgYWJvdmUgdG8gZW5zdXJlIHRoYXQgdGhlIGF1dG9nZW5lcmF0aW9uIHNjcmlwdHMgYXJlIGtlcHQKKyAqIHVwLXRvLWRhdGUgd2l0aCB0aGUgZmlsZSBjb250ZW50cy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNpbmNsdWRlICJwb3dlcmRvbWFpbi5oIgorCisjaW5jbHVkZSAicHJjbS1jb21tb24uaCIKKyNpbmNsdWRlICJwcmNtNDR4eC5oIgorI2luY2x1ZGUgInBybS1yZWdiaXRzLTQ0eHguaCIKKyNpbmNsdWRlICJwcm00NHh4LmgiCisjaW5jbHVkZSAicHJjbV9tcHU0NHh4LmgiCisKKy8qIGNvcmVfNDR4eF9wd3JkbTogQ09SRSBwb3dlciBkb21haW4gKi8KK3N0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gY29yZV80NHh4X3B3cmRtID0geworCS5uYW1lCQkgID0gImNvcmVfcHdyZG0iLAorCS5wcmNtX29mZnMJICA9IE9NQVA0NDMwX1BSTV9DT1JFX0lOU1QsCisJLnByY21fcGFydGl0aW9uCSAgPSBPTUFQNDQzMF9QUk1fUEFSVElUSU9OLAorCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAorCS5wd3JzdHMJCSAgPSBQV1JTVFNfUkVUX09OLAorCS5wd3JzdHNfbG9naWNfcmV0ID0gUFdSU1RTX09GRl9SRVQsCisJLmJhbmtzCQkgID0gNSwKKwkucHdyc3RzX21lbV9yZXQJPSB7CisJCVswXSA9IFBXUkRNX1BPV0VSX09GRiwJLyogY29yZV9ucmV0X2JhbmsgKi8KKwkJWzFdID0gUFdSU1RTX09GRl9SRVQsCS8qIGNvcmVfb2NtcmFtICovCisJCVsyXSA9IFBXUkRNX1BPV0VSX1JFVCwJLyogY29yZV9vdGhlcl9iYW5rICovCisJCVszXSA9IFBXUlNUU19PRkZfUkVULAkvKiBkdWNhdGlfbDJyYW0gKi8KKwkJWzRdID0gUFdSU1RTX09GRl9SRVQsCS8qIGR1Y2F0aV91bmljYWNoZSAqLworCX0sCisJLnB3cnN0c19tZW1fb24JPSB7CisJCVswXSA9IFBXUkRNX1BPV0VSX09OLAkvKiBjb3JlX25yZXRfYmFuayAqLworCQlbMV0gPSBQV1JTVFNfT0ZGX1JFVCwJLyogY29yZV9vY21yYW0gKi8KKwkJWzJdID0gUFdSRE1fUE9XRVJfT04sCS8qIGNvcmVfb3RoZXJfYmFuayAqLworCQlbM10gPSBQV1JETV9QT1dFUl9PTiwJLyogZHVjYXRpX2wycmFtICovCisJCVs0XSA9IFBXUkRNX1BPV0VSX09OLAkvKiBkdWNhdGlfdW5pY2FjaGUgKi8KKwl9LAorCS5mbGFncwkJPSBQV1JETV9IQVNfTE9XUE9XRVJTVEFURUNIQU5HRSwKK307CisKKy8qIGdmeF80NHh4X3B3cmRtOiAzRCBhY2NlbGVyYXRvciBwb3dlciBkb21haW4gKi8KK3N0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gZ2Z4XzQ0eHhfcHdyZG0gPSB7CisJLm5hbWUJCSAgPSAiZ2Z4X3B3cmRtIiwKKwkucHJjbV9vZmZzCSAgPSBPTUFQNDQzMF9QUk1fR0ZYX0lOU1QsCisJLnByY21fcGFydGl0aW9uCSAgPSBPTUFQNDQzMF9QUk1fUEFSVElUSU9OLAorCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAorCS5wd3JzdHMJCSAgPSBQV1JTVFNfT0ZGX09OLAorCS5iYW5rcwkJICA9IDEsCisJLnB3cnN0c19tZW1fcmV0CT0geworCQlbMF0gPSBQV1JETV9QT1dFUl9PRkYsCS8qIGdmeF9tZW0gKi8KKwl9LAorCS5wd3JzdHNfbWVtX29uCT0geworCQlbMF0gPSBQV1JETV9QT1dFUl9PTiwJLyogZ2Z4X21lbSAqLworCX0sCisJLmZsYWdzCQk9IFBXUkRNX0hBU19MT1dQT1dFUlNUQVRFQ0hBTkdFLAorfTsKKworLyogYWJlXzQ0eHhfcHdyZG06IEF1ZGlvIGJhY2sgZW5kIHBvd2VyIGRvbWFpbiAqLworc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiBhYmVfNDR4eF9wd3JkbSA9IHsKKwkubmFtZQkJICA9ICJhYmVfcHdyZG0iLAorCS5wcmNtX29mZnMJICA9IE9NQVA0NDMwX1BSTV9BQkVfSU5TVCwKKwkucHJjbV9wYXJ0aXRpb24JICA9IE9NQVA0NDMwX1BSTV9QQVJUSVRJT04sCisJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCisJLnB3cnN0cwkJICA9IFBXUlNUU19PRkZfUkVUX09OLAorCS5wd3JzdHNfbG9naWNfcmV0ID0gUFdSRE1fUE9XRVJfT0ZGLAorCS5iYW5rcwkJICA9IDIsCisJLnB3cnN0c19tZW1fcmV0CT0geworCQlbMF0gPSBQV1JETV9QT1dFUl9SRVQsCS8qIGFlc3NtZW0gKi8KKwkJWzFdID0gUFdSRE1fUE9XRVJfT0ZGLAkvKiBwZXJpcGhtZW0gKi8KKwl9LAorCS5wd3JzdHNfbWVtX29uCT0geworCQlbMF0gPSBQV1JETV9QT1dFUl9PTiwJLyogYWVzc21lbSAqLworCQlbMV0gPSBQV1JETV9QT1dFUl9PTiwJLyogcGVyaXBobWVtICovCisJfSwKKwkuZmxhZ3MJCT0gUFdSRE1fSEFTX0xPV1BPV0VSU1RBVEVDSEFOR0UsCit9OworCisvKiBkc3NfNDR4eF9wd3JkbTogRGlzcGxheSBzdWJzeXN0ZW0gcG93ZXIgZG9tYWluICovCitzdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluIGRzc180NHh4X3B3cmRtID0geworCS5uYW1lCQkgID0gImRzc19wd3JkbSIsCisJLnByY21fb2ZmcwkgID0gT01BUDQ0MzBfUFJNX0RTU19JTlNULAorCS5wcmNtX3BhcnRpdGlvbgkgID0gT01BUDQ0MzBfUFJNX1BBUlRJVElPTiwKKwkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKKwkucHdyc3RzCQkgID0gUFdSU1RTX09GRl9SRVRfT04sCisJLnB3cnN0c19sb2dpY19yZXQgPSBQV1JTVFNfT0ZGLAorCS5iYW5rcwkJICA9IDEsCisJLnB3cnN0c19tZW1fcmV0CT0geworCQlbMF0gPSBQV1JETV9QT1dFUl9PRkYsCS8qIGRzc19tZW0gKi8KKwl9LAorCS5wd3JzdHNfbWVtX29uCT0geworCQlbMF0gPSBQV1JETV9QT1dFUl9PTiwJLyogZHNzX21lbSAqLworCX0sCisJLmZsYWdzCQk9IFBXUkRNX0hBU19MT1dQT1dFUlNUQVRFQ0hBTkdFLAorfTsKKworLyogdGVzbGFfNDR4eF9wd3JkbTogVGVzbGEgcHJvY2Vzc29yIHBvd2VyIGRvbWFpbiAqLworc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiB0ZXNsYV80NHh4X3B3cmRtID0geworCS5uYW1lCQkgID0gInRlc2xhX3B3cmRtIiwKKwkucHJjbV9vZmZzCSAgPSBPTUFQNDQzMF9QUk1fVEVTTEFfSU5TVCwKKwkucHJjbV9wYXJ0aXRpb24JICA9IE9NQVA0NDMwX1BSTV9QQVJUSVRJT04sCisJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCisJLnB3cnN0cwkJICA9IFBXUlNUU19PRkZfUkVUX09OLAorCS5wd3JzdHNfbG9naWNfcmV0ID0gUFdSU1RTX09GRl9SRVQsCisJLmJhbmtzCQkgID0gMywKKwkucHdyc3RzX21lbV9yZXQJPSB7CisJCVswXSA9IFBXUkRNX1BPV0VSX1JFVCwJLyogdGVzbGFfZWRtYSAqLworCQlbMV0gPSBQV1JTVFNfT0ZGX1JFVCwJLyogdGVzbGFfbDEgKi8KKwkJWzJdID0gUFdSU1RTX09GRl9SRVQsCS8qIHRlc2xhX2wyICovCisJfSwKKwkucHdyc3RzX21lbV9vbgk9IHsKKwkJWzBdID0gUFdSRE1fUE9XRVJfT04sCS8qIHRlc2xhX2VkbWEgKi8KKwkJWzFdID0gUFdSRE1fUE9XRVJfT04sCS8qIHRlc2xhX2wxICovCisJCVsyXSA9IFBXUkRNX1BPV0VSX09OLAkvKiB0ZXNsYV9sMiAqLworCX0sCisJLmZsYWdzCQk9IFBXUkRNX0hBU19MT1dQT1dFUlNUQVRFQ0hBTkdFLAorfTsKKworLyogd2t1cF80NHh4X3B3cmRtOiBXYWtlLXVwIHBvd2VyIGRvbWFpbiAqLworc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiB3a3VwXzQ0eHhfcHdyZG0gPSB7CisJLm5hbWUJCSAgPSAid2t1cF9wd3JkbSIsCisJLnByY21fb2ZmcwkgID0gT01BUDQ0MzBfUFJNX1dLVVBfSU5TVCwKKwkucHJjbV9wYXJ0aXRpb24JICA9IE9NQVA0NDMwX1BSTV9QQVJUSVRJT04sCisJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCisJLnB3cnN0cwkJICA9IFBXUlNUU19PTiwKKwkuYmFua3MJCSAgPSAxLAorCS5wd3JzdHNfbWVtX3JldAk9IHsKKwkJWzBdID0gUFdSRE1fUE9XRVJfT0ZGLAkvKiB3a3VwX2JhbmsgKi8KKwl9LAorCS5wd3JzdHNfbWVtX29uCT0geworCQlbMF0gPSBQV1JETV9QT1dFUl9PTiwJLyogd2t1cF9iYW5rICovCisJfSwKK307CisKKy8qIGNwdTBfNDR4eF9wd3JkbTogTVBVMCBwcm9jZXNzb3IgYW5kIE5lb24gY29wcm9jZXNzb3IgcG93ZXIgZG9tYWluICovCitzdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluIGNwdTBfNDR4eF9wd3JkbSA9IHsKKwkubmFtZQkJICA9ICJjcHUwX3B3cmRtIiwKKwkucHJjbV9vZmZzCSAgPSBPTUFQNDQzMF9QUkNNX01QVV9DUFUwX0lOU1QsCisJLnByY21fcGFydGl0aW9uCSAgPSBPTUFQNDQzMF9QUkNNX01QVV9QQVJUSVRJT04sCisJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCisJLnB3cnN0cwkJICA9IFBXUlNUU19PRkZfUkVUX09OLAorCS5wd3JzdHNfbG9naWNfcmV0ID0gUFdSU1RTX09GRl9SRVQsCisJLmJhbmtzCQkgID0gMSwKKwkucHdyc3RzX21lbV9yZXQJPSB7CisJCVswXSA9IFBXUlNUU19PRkZfUkVULAkvKiBjcHUwX2wxICovCisJfSwKKwkucHdyc3RzX21lbV9vbgk9IHsKKwkJWzBdID0gUFdSRE1fUE9XRVJfT04sCS8qIGNwdTBfbDEgKi8KKwl9LAorfTsKKworLyogY3B1MV80NHh4X3B3cmRtOiBNUFUxIHByb2Nlc3NvciBhbmQgTmVvbiBjb3Byb2Nlc3NvciBwb3dlciBkb21haW4gKi8KK3N0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gY3B1MV80NHh4X3B3cmRtID0geworCS5uYW1lCQkgID0gImNwdTFfcHdyZG0iLAorCS5wcmNtX29mZnMJICA9IE9NQVA0NDMwX1BSQ01fTVBVX0NQVTFfSU5TVCwKKwkucHJjbV9wYXJ0aXRpb24JICA9IE9NQVA0NDMwX1BSQ01fTVBVX1BBUlRJVElPTiwKKwkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKKwkucHdyc3RzCQkgID0gUFdSU1RTX09GRl9SRVRfT04sCisJLnB3cnN0c19sb2dpY19yZXQgPSBQV1JTVFNfT0ZGX1JFVCwKKwkuYmFua3MJCSAgPSAxLAorCS5wd3JzdHNfbWVtX3JldAk9IHsKKwkJWzBdID0gUFdSU1RTX09GRl9SRVQsCS8qIGNwdTFfbDEgKi8KKwl9LAorCS5wd3JzdHNfbWVtX29uCT0geworCQlbMF0gPSBQV1JETV9QT1dFUl9PTiwJLyogY3B1MV9sMSAqLworCX0sCit9OworCisvKiBlbXVfNDR4eF9wd3JkbTogRW11bGF0aW9uIHBvd2VyIGRvbWFpbiAqLworc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiBlbXVfNDR4eF9wd3JkbSA9IHsKKwkubmFtZQkJICA9ICJlbXVfcHdyZG0iLAorCS5wcmNtX29mZnMJICA9IE9NQVA0NDMwX1BSTV9FTVVfSU5TVCwKKwkucHJjbV9wYXJ0aXRpb24JICA9IE9NQVA0NDMwX1BSTV9QQVJUSVRJT04sCisJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCisJLnB3cnN0cwkJICA9IFBXUlNUU19PRkZfT04sCisJLmJhbmtzCQkgID0gMSwKKwkucHdyc3RzX21lbV9yZXQJPSB7CisJCVswXSA9IFBXUkRNX1BPV0VSX09GRiwJLyogZW11X2JhbmsgKi8KKwl9LAorCS5wd3JzdHNfbWVtX29uCT0geworCQlbMF0gPSBQV1JETV9QT1dFUl9PTiwJLyogZW11X2JhbmsgKi8KKwl9LAorfTsKKworLyogbXB1XzQ0eHhfcHdyZG06IE1vZGVuYSBwcm9jZXNzb3IgYW5kIHRoZSBOZW9uIGNvcHJvY2Vzc29yIHBvd2VyIGRvbWFpbiAqLworc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiBtcHVfNDR4eF9wd3JkbSA9IHsKKwkubmFtZQkJICA9ICJtcHVfcHdyZG0iLAorCS5wcmNtX29mZnMJICA9IE9NQVA0NDMwX1BSTV9NUFVfSU5TVCwKKwkucHJjbV9wYXJ0aXRpb24JICA9IE9NQVA0NDMwX1BSTV9QQVJUSVRJT04sCisJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCisJLnB3cnN0cwkJICA9IFBXUlNUU19PRkZfUkVUX09OLAorCS5wd3JzdHNfbG9naWNfcmV0ID0gUFdSU1RTX09GRl9SRVQsCisJLmJhbmtzCQkgID0gMywKKwkucHdyc3RzX21lbV9yZXQJPSB7CisJCVswXSA9IFBXUlNUU19PRkZfUkVULAkvKiBtcHVfbDEgKi8KKwkJWzFdID0gUFdSU1RTX09GRl9SRVQsCS8qIG1wdV9sMiAqLworCQlbMl0gPSBQV1JETV9QT1dFUl9SRVQsCS8qIG1wdV9yYW0gKi8KKwl9LAorCS5wd3JzdHNfbWVtX29uCT0geworCQlbMF0gPSBQV1JETV9QT1dFUl9PTiwJLyogbXB1X2wxICovCisJCVsxXSA9IFBXUkRNX1BPV0VSX09OLAkvKiBtcHVfbDIgKi8KKwkJWzJdID0gUFdSRE1fUE9XRVJfT04sCS8qIG1wdV9yYW0gKi8KKwl9LAorfTsKKworLyogaXZhaGRfNDR4eF9wd3JkbTogSVZBLUhEIHBvd2VyIGRvbWFpbiAqLworc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiBpdmFoZF80NHh4X3B3cmRtID0geworCS5uYW1lCQkgID0gIml2YWhkX3B3cmRtIiwKKwkucHJjbV9vZmZzCSAgPSBPTUFQNDQzMF9QUk1fSVZBSERfSU5TVCwKKwkucHJjbV9wYXJ0aXRpb24JICA9IE9NQVA0NDMwX1BSTV9QQVJUSVRJT04sCisJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCisJLnB3cnN0cwkJICA9IFBXUlNUU19PRkZfUkVUX09OLAorCS5wd3JzdHNfbG9naWNfcmV0ID0gUFdSRE1fUE9XRVJfT0ZGLAorCS5iYW5rcwkJICA9IDQsCisJLnB3cnN0c19tZW1fcmV0CT0geworCQlbMF0gPSBQV1JETV9QT1dFUl9PRkYsCS8qIGh3YV9tZW0gKi8KKwkJWzFdID0gUFdSU1RTX09GRl9SRVQsCS8qIHNsMl9tZW0gKi8KKwkJWzJdID0gUFdSU1RTX09GRl9SRVQsCS8qIHRjbTFfbWVtICovCisJCVszXSA9IFBXUlNUU19PRkZfUkVULAkvKiB0Y20yX21lbSAqLworCX0sCisJLnB3cnN0c19tZW1fb24JPSB7CisJCVswXSA9IFBXUkRNX1BPV0VSX09OLAkvKiBod2FfbWVtICovCisJCVsxXSA9IFBXUkRNX1BPV0VSX09OLAkvKiBzbDJfbWVtICovCisJCVsyXSA9IFBXUkRNX1BPV0VSX09OLAkvKiB0Y20xX21lbSAqLworCQlbM10gPSBQV1JETV9QT1dFUl9PTiwJLyogdGNtMl9tZW0gKi8KKwl9LAorCS5mbGFncwkJPSBQV1JETV9IQVNfTE9XUE9XRVJTVEFURUNIQU5HRSwKK307CisKKy8qIGNhbV80NHh4X3B3cmRtOiBDYW1lcmEgc3Vic3lzdGVtIHBvd2VyIGRvbWFpbiAqLworc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiBjYW1fNDR4eF9wd3JkbSA9IHsKKwkubmFtZQkJICA9ICJjYW1fcHdyZG0iLAorCS5wcmNtX29mZnMJICA9IE9NQVA0NDMwX1BSTV9DQU1fSU5TVCwKKwkucHJjbV9wYXJ0aXRpb24JICA9IE9NQVA0NDMwX1BSTV9QQVJUSVRJT04sCisJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCisJLnB3cnN0cwkJICA9IFBXUlNUU19PRkZfT04sCisJLmJhbmtzCQkgID0gMSwKKwkucHdyc3RzX21lbV9yZXQJPSB7CisJCVswXSA9IFBXUkRNX1BPV0VSX09GRiwJLyogY2FtX21lbSAqLworCX0sCisJLnB3cnN0c19tZW1fb24JPSB7CisJCVswXSA9IFBXUkRNX1BPV0VSX09OLAkvKiBjYW1fbWVtICovCisJfSwKKwkuZmxhZ3MJCT0gUFdSRE1fSEFTX0xPV1BPV0VSU1RBVEVDSEFOR0UsCit9OworCisvKiBsM2luaXRfNDR4eF9wd3JkbTogTDMgaW5pdGF0b3JzIHBoZXJpcGhlcmFscyBwb3dlciBkb21haW4gICovCitzdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluIGwzaW5pdF80NHh4X3B3cmRtID0geworCS5uYW1lCQkgID0gImwzaW5pdF9wd3JkbSIsCisJLnByY21fb2ZmcwkgID0gT01BUDQ0MzBfUFJNX0wzSU5JVF9JTlNULAorCS5wcmNtX3BhcnRpdGlvbgkgID0gT01BUDQ0MzBfUFJNX1BBUlRJVElPTiwKKwkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKKwkucHdyc3RzCQkgID0gUFdSU1RTX1JFVF9PTiwKKwkucHdyc3RzX2xvZ2ljX3JldCA9IFBXUlNUU19PRkZfUkVULAorCS5iYW5rcwkJICA9IDEsCisJLnB3cnN0c19tZW1fcmV0CT0geworCQlbMF0gPSBQV1JETV9QT1dFUl9PRkYsCS8qIGwzaW5pdF9iYW5rMSAqLworCX0sCisJLnB3cnN0c19tZW1fb24JPSB7CisJCVswXSA9IFBXUkRNX1BPV0VSX09OLAkvKiBsM2luaXRfYmFuazEgKi8KKwl9LAorCS5mbGFncwkJPSBQV1JETV9IQVNfTE9XUE9XRVJTVEFURUNIQU5HRSwKK307CisKKy8qIGw0cGVyXzQ0eHhfcHdyZG06IFRhcmdldCBwZXJpcGhlcmFscyBwb3dlciBkb21haW4gKi8KK3N0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gbDRwZXJfNDR4eF9wd3JkbSA9IHsKKwkubmFtZQkJICA9ICJsNHBlcl9wd3JkbSIsCisJLnByY21fb2ZmcwkgID0gT01BUDQ0MzBfUFJNX0w0UEVSX0lOU1QsCisJLnByY21fcGFydGl0aW9uCSAgPSBPTUFQNDQzMF9QUk1fUEFSVElUSU9OLAorCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAorCS5wd3JzdHMJCSAgPSBQV1JTVFNfUkVUX09OLAorCS5wd3JzdHNfbG9naWNfcmV0ID0gUFdSU1RTX09GRl9SRVQsCisJLmJhbmtzCQkgID0gMiwKKwkucHdyc3RzX21lbV9yZXQJPSB7CisJCVswXSA9IFBXUkRNX1BPV0VSX09GRiwJLyogbm9ucmV0YWluZWRfYmFuayAqLworCQlbMV0gPSBQV1JETV9QT1dFUl9SRVQsCS8qIHJldGFpbmVkX2JhbmsgKi8KKwl9LAorCS5wd3JzdHNfbWVtX29uCT0geworCQlbMF0gPSBQV1JETV9QT1dFUl9PTiwJLyogbm9ucmV0YWluZWRfYmFuayAqLworCQlbMV0gPSBQV1JETV9QT1dFUl9PTiwJLyogcmV0YWluZWRfYmFuayAqLworCX0sCisJLmZsYWdzCQk9IFBXUkRNX0hBU19MT1dQT1dFUlNUQVRFQ0hBTkdFLAorfTsKKworLyoKKyAqIGFsd2F5c19vbl9jb3JlXzQ0eHhfcHdyZG06IEFsd2F5cyBPTiBsb2dpYyB0aGF0IHNpdHMgaW4gVkREX0NPUkUgdm9sdGFnZQorICogZG9tYWluCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gYWx3YXlzX29uX2NvcmVfNDR4eF9wd3JkbSA9IHsKKwkubmFtZQkJICA9ICJhbHdheXNfb25fY29yZV9wd3JkbSIsCisJLnByY21fb2ZmcwkgID0gT01BUDQ0MzBfUFJNX0FMV0FZU19PTl9JTlNULAorCS5wcmNtX3BhcnRpdGlvbgkgID0gT01BUDQ0MzBfUFJNX1BBUlRJVElPTiwKKwkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKKwkucHdyc3RzCQkgID0gUFdSU1RTX09OLAorfTsKKworLyogY2VmdXNlXzQ0eHhfcHdyZG06IEN1c3RvbWVyIGVmdXNlIGNvbnRyb2xsZXIgcG93ZXIgZG9tYWluICovCitzdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluIGNlZnVzZV80NHh4X3B3cmRtID0geworCS5uYW1lCQkgID0gImNlZnVzZV9wd3JkbSIsCisJLnByY21fb2ZmcwkgID0gT01BUDQ0MzBfUFJNX0NFRlVTRV9JTlNULAorCS5wcmNtX3BhcnRpdGlvbgkgID0gT01BUDQ0MzBfUFJNX1BBUlRJVElPTiwKKwkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKKwkucHdyc3RzCQkgID0gUFdSU1RTX09GRl9PTiwKK307CisKKy8qCisgKiBUaGUgZm9sbG93aW5nIHBvd2VyIGRvbWFpbnMgYXJlIG5vdCB1bmRlciBTVyBjb250cm9sCisgKgorICogYWx3YXlzX29uX2l2YQorICogYWx3YXlzX29uX21wdQorICogc3RkZWZ1c2UKKyAqLworCisvKiBBcyBwb3dlcmRvbWFpbnMgYXJlIGFkZGVkIG9yIHJlbW92ZWQgYWJvdmUsIHRoaXMgbGlzdCBtdXN0IGFsc28gYmUgY2hhbmdlZCAqLworc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiAqcG93ZXJkb21haW5zX29tYXA0NHh4W10gX19pbml0ZGF0YSA9IHsKKwkmY29yZV80NHh4X3B3cmRtLAorCSZnZnhfNDR4eF9wd3JkbSwKKwkmYWJlXzQ0eHhfcHdyZG0sCisJJmRzc180NHh4X3B3cmRtLAorCSZ0ZXNsYV80NHh4X3B3cmRtLAorCSZ3a3VwXzQ0eHhfcHdyZG0sCisJJmNwdTBfNDR4eF9wd3JkbSwKKwkmY3B1MV80NHh4X3B3cmRtLAorCSZlbXVfNDR4eF9wd3JkbSwKKwkmbXB1XzQ0eHhfcHdyZG0sCisJJml2YWhkXzQ0eHhfcHdyZG0sCisJJmNhbV80NHh4X3B3cmRtLAorCSZsM2luaXRfNDR4eF9wd3JkbSwKKwkmbDRwZXJfNDR4eF9wd3JkbSwKKwkmYWx3YXlzX29uX2NvcmVfNDR4eF9wd3JkbSwKKwkmY2VmdXNlXzQ0eHhfcHdyZG0sCisJTlVMTAorfTsKKwordm9pZCBfX2luaXQgb21hcDQ0eHhfcG93ZXJkb21haW5zX2luaXQodm9pZCkKK3sKKwlwd3JkbV9pbml0KHBvd2VyZG9tYWluc19vbWFwNDR4eCwgJm9tYXA0X3B3cmRtX29wZXJhdGlvbnMpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcmNtLWNvbW1vbi5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcmNtLWNvbW1vbi5oCmluZGV4IGY4MWFjZWUuLjg3NDg2ZjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJjbS1jb21tb24uaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3ByY20tY29tbW9uLmgKQEAgLTgsMTUgKzgsMTIgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IE5va2lhIENvcnBvcmF0aW9uCiAgKgogICogV3JpdHRlbiBieSBQYXVsIFdhbG1zbGV5Ci0gKiBPTUFQNCBkZWZpbmVzIGluIHRoaXMgZmlsZSBhcmUgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0aGUgT01BUCBoYXJkd2FyZQotICogZGF0YWJhc2VzLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAotCiAvKiBNb2R1bGUgb2Zmc2V0cyBmcm9tIGJvdGggQ01fQkFTRSAmIFBSTV9CQVNFICovCiAKIC8qCkBAIC01MSw3NSArNDgsNiBAQAogI2RlZmluZSBPTUFQMzQzMF9ORU9OX01PRAkJCQkweGIwMAogI2RlZmluZSBPTUFQMzQzMEVTMl9VU0JIT1NUX01PRAkJCQkweGMwMAogCi0jZGVmaW5lIEJJVFMobl9iaXQpCVwKLQkoKCgxIDw8IG5fYml0KSAtIDEpIHwgKDEgPDwgbl9iaXQpKQotCi0jZGVmaW5lIEJJVEZJRUxEKGxfYml0LCB1X2JpdCkJXAotCShCSVRTKHVfYml0KSAmIH4oKEJJVFMobF9iaXQpKSA+PiAxKSkKLQotLyogT01BUDQ0WFggc3BlY2lmaWMgbW9kdWxlIG9mZnNldHMgKi8KLQotLyogQ00xIGluc3RhbmNlcyAqLwotCi0jZGVmaW5lIE9NQVA0NDMwX0NNMV9PQ1BfU09DS0VUX01PRAkweDAwMDAKLSNkZWZpbmUgT01BUDQ0MzBfQ00xX0NLR0VOX01PRAkJMHgwMTAwCi0jZGVmaW5lIE9NQVA0NDMwX0NNMV9NUFVfTU9ECQkweDAzMDAKLSNkZWZpbmUgT01BUDQ0MzBfQ00xX1RFU0xBX01PRAkJMHgwNDAwCi0jZGVmaW5lIE9NQVA0NDMwX0NNMV9BQkVfTU9ECQkweDA1MDAKLSNkZWZpbmUgT01BUDQ0MzBfQ00xX1JFU1RPUkVfTU9ECTB4MGUwMAotI2RlZmluZSBPTUFQNDQzMF9DTTFfSU5TVFJfTU9ECQkweDBmMDAKLQotLyogQ00yIGluc3RhbmNlcyAqLwotCi0jZGVmaW5lIE9NQVA0NDMwX0NNMl9PQ1BfU09DS0VUX01PRAkweDAwMDAKLSNkZWZpbmUgT01BUDQ0MzBfQ00yX0NLR0VOX01PRAkJMHgwMTAwCi0jZGVmaW5lIE9NQVA0NDMwX0NNMl9BTFdBWVNfT05fTU9ECTB4MDYwMAotI2RlZmluZSBPTUFQNDQzMF9DTTJfQ09SRV9NT0QJCTB4MDcwMAotI2RlZmluZSBPTUFQNDQzMF9DTTJfSVZBSERfTU9ECQkweDBmMDAKLSNkZWZpbmUgT01BUDQ0MzBfQ00yX0NBTV9NT0QJCTB4MTAwMAotI2RlZmluZSBPTUFQNDQzMF9DTTJfRFNTX01PRAkJMHgxMTAwCi0jZGVmaW5lIE9NQVA0NDMwX0NNMl9HRlhfTU9ECQkweDEyMDAKLSNkZWZpbmUgT01BUDQ0MzBfQ00yX0wzSU5JVF9NT0QJCTB4MTMwMAotI2RlZmluZSBPTUFQNDQzMF9DTTJfTDRQRVJfTU9ECQkweDE0MDAKLSNkZWZpbmUgT01BUDQ0MzBfQ00yX0NFRlVTRV9NT0QJCTB4MTYwMAotI2RlZmluZSBPTUFQNDQzMF9DTTJfUkVTVE9SRV9NT0QJMHgxZTAwCi0jZGVmaW5lIE9NQVA0NDMwX0NNMl9JTlNUUl9NT0QJCTB4MWYwMAotCi0vKiBQUk0gaW5zdGFuY2VzICovCi0KLSNkZWZpbmUgT01BUDQ0MzBfUFJNX09DUF9TT0NLRVRfTU9ECTB4MDAwMAotI2RlZmluZSBPTUFQNDQzMF9QUk1fQ0tHRU5fTU9ECQkweDAxMDAKLSNkZWZpbmUgT01BUDQ0MzBfUFJNX01QVV9NT0QJCTB4MDMwMAotI2RlZmluZSBPTUFQNDQzMF9QUk1fVEVTTEFfTU9ECQkweDA0MDAKLSNkZWZpbmUgT01BUDQ0MzBfUFJNX0FCRV9NT0QJCTB4MDUwMAotI2RlZmluZSBPTUFQNDQzMF9QUk1fQUxXQVlTX09OX01PRAkweDA2MDAKLSNkZWZpbmUgT01BUDQ0MzBfUFJNX0NPUkVfTU9ECQkweDA3MDAKLSNkZWZpbmUgT01BUDQ0MzBfUFJNX0lWQUhEX01PRAkJMHgwZjAwCi0jZGVmaW5lIE9NQVA0NDMwX1BSTV9DQU1fTU9ECQkweDEwMDAKLSNkZWZpbmUgT01BUDQ0MzBfUFJNX0RTU19NT0QJCTB4MTEwMAotI2RlZmluZSBPTUFQNDQzMF9QUk1fR0ZYX01PRAkJMHgxMjAwCi0jZGVmaW5lIE9NQVA0NDMwX1BSTV9MM0lOSVRfTU9ECQkweDEzMDAKLSNkZWZpbmUgT01BUDQ0MzBfUFJNX0w0UEVSX01PRAkJMHgxNDAwCi0jZGVmaW5lIE9NQVA0NDMwX1BSTV9DRUZVU0VfTU9ECQkweDE2MDAKLSNkZWZpbmUgT01BUDQ0MzBfUFJNX1dLVVBfTU9ECQkweDE3MDAKLSNkZWZpbmUgT01BUDQ0MzBfUFJNX1dLVVBfQ01fTU9ECTB4MTgwMAotI2RlZmluZSBPTUFQNDQzMF9QUk1fRU1VX01PRAkJMHgxOTAwCi0jZGVmaW5lIE9NQVA0NDMwX1BSTV9FTVVfQ01fTU9ECQkweDFhMDAKLSNkZWZpbmUgT01BUDQ0MzBfUFJNX0RFVklDRV9NT0QJCTB4MWIwMAotI2RlZmluZSBPTUFQNDQzMF9QUk1fSU5TVFJfTU9ECQkweDFmMDAKLQotLyogU0NSTSBpbnN0YW5jZXMgKi8KLQotI2RlZmluZSBPTUFQNDQzMF9TQ1JNX1NDUk1fTU9ECTB4MDAwMAotCi0vKiBQUkNNX01QVSBpbnN0YW5jZXMgKi8KLQotI2RlZmluZSBPTUFQNDQzMF9QUkNNX01QVV9PQ1BfU09DS0VUX1BSQ01fTU9ECTB4MDAwMAotI2RlZmluZSBPTUFQNDQzMF9QUkNNX01QVV9ERVZJQ0VfUFJNX01PRAkweDAyMDAKLSNkZWZpbmUgT01BUDQ0MzBfUFJDTV9NUFVfQ1BVMF9NT0QJCTB4MDQwMAotI2RlZmluZSBPTUFQNDQzMF9QUkNNX01QVV9DUFUxX01PRAkJMHgwODAwCi0KLQogLyogMjRYWCByZWdpc3RlciBiaXRzIHNoYXJlZCBiZXR3ZWVuIENNICYgUFJNIHJlZ2lzdGVycyAqLwogCiAvKiBDTV9GQ0xLRU4xX0NPUkUsIENNX0lDTEtFTjFfQ09SRSwgUE1fV0tFTjFfQ09SRSBzaGFyZWQgYml0cyAqLwpAQCAtNDYxLDUgKzM4OSwxOCBAQAogI2RlZmluZSBPTUFQMzQzMF9FTl9DT1JFX1NISUZUCQkJCTAKICNkZWZpbmUgT01BUDM0MzBfRU5fQ09SRV9NQVNLCQkJCSgxIDw8IDApCiAKKworLyoKKyAqIE1BWF9NT0RVTEVfSEFSRFJFU0VUX1dBSVQ6IE1heGltdW0gbWljcm9zZWNvbmRzIHRvIHdhaXQgZm9yIGFuIE9NQVAKKyAqIHN1Ym1vZHVsZSB0byBleGl0IGhhcmRyZXNldAorICovCisjZGVmaW5lIE1BWF9NT0RVTEVfSEFSRFJFU0VUX1dBSVQJCTEwMDAwCisKKyMgaWZuZGVmIF9fQVNTRU1CTEVSX18KK2V4dGVybiB2b2lkIF9faW9tZW0gKnBybV9iYXNlOworZXh0ZXJuIHZvaWQgX19pb21lbSAqY21fYmFzZTsKK2V4dGVybiB2b2lkIF9faW9tZW0gKmNtMl9iYXNlOworIyBlbmRpZgorCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcmNtLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3ByY20uYwppbmRleCBhNTE4NDZlLi42NzliY2QyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3ByY20uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3ByY20uYwpAQCAtMTcsNyArMTcsOCBAQAogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KQEAgLTI5LDEwNSArMzAsMjcgQEAKIAogI2luY2x1ZGUgImNsb2NrLmgiCiAjaW5jbHVkZSAiY2xvY2syeHh4LmgiCi0jaW5jbHVkZSAiY20uaCIKLSNpbmNsdWRlICJwcm0uaCIKKyNpbmNsdWRlICJjbTJ4eHhfM3h4eC5oIgorI2luY2x1ZGUgInBybTJ4eHhfM3h4eC5oIgorI2luY2x1ZGUgInBybTQ0eHguaCIKKyNpbmNsdWRlICJwcm1pbnN0NDR4eC5oIgogI2luY2x1ZGUgInBybS1yZWdiaXRzLTI0eHguaCIKICNpbmNsdWRlICJwcm0tcmVnYml0cy00NHh4LmgiCiAjaW5jbHVkZSAiY29udHJvbC5oIgogCi1zdGF0aWMgdm9pZCBfX2lvbWVtICpwcm1fYmFzZTsKLXN0YXRpYyB2b2lkIF9faW9tZW0gKmNtX2Jhc2U7Ci1zdGF0aWMgdm9pZCBfX2lvbWVtICpjbTJfYmFzZTsKK3ZvaWQgX19pb21lbSAqcHJtX2Jhc2U7Cit2b2lkIF9faW9tZW0gKmNtX2Jhc2U7Cit2b2lkIF9faW9tZW0gKmNtMl9iYXNlOwogCiAjZGVmaW5lIE1BWF9NT0RVTEVfRU5BQkxFX1dBSVQJCTEwMDAwMAogCi1zdHJ1Y3Qgb21hcDNfcHJjbV9yZWdzIHsKLQl1MzIgY29udHJvbF9wYWRjb25mX3N5c19uaXJxOwotCXUzMiBpdmEyX2NtX2Nsa3NlbDE7Ci0JdTMyIGl2YTJfY21fY2xrc2VsMjsKLQl1MzIgY21fc3lzY29uZmlnOwotCXUzMiBzZ3hfY21fY2xrc2VsOwotCXUzMiBkc3NfY21fY2xrc2VsOwotCXUzMiBjYW1fY21fY2xrc2VsOwotCXUzMiBwZXJfY21fY2xrc2VsOwotCXUzMiBlbXVfY21fY2xrc2VsOwotCXUzMiBlbXVfY21fY2xrc3RjdHJsOwotCXUzMiBwbGxfY21fYXV0b2lkbGUyOwotCXUzMiBwbGxfY21fY2xrc2VsNDsKLQl1MzIgcGxsX2NtX2Nsa3NlbDU7Ci0JdTMyIHBsbF9jbV9jbGtlbjI7Ci0JdTMyIGNtX3BvbGN0cmw7Ci0JdTMyIGl2YTJfY21fZmNsa2VuOwotCXUzMiBpdmEyX2NtX2Nsa2VuX3BsbDsKLQl1MzIgY29yZV9jbV9mY2xrZW4xOwotCXUzMiBjb3JlX2NtX2ZjbGtlbjM7Ci0JdTMyIHNneF9jbV9mY2xrZW47Ci0JdTMyIHdrdXBfY21fZmNsa2VuOwotCXUzMiBkc3NfY21fZmNsa2VuOwotCXUzMiBjYW1fY21fZmNsa2VuOwotCXUzMiBwZXJfY21fZmNsa2VuOwotCXUzMiB1c2Job3N0X2NtX2ZjbGtlbjsKLQl1MzIgY29yZV9jbV9pY2xrZW4xOwotCXUzMiBjb3JlX2NtX2ljbGtlbjI7Ci0JdTMyIGNvcmVfY21faWNsa2VuMzsKLQl1MzIgc2d4X2NtX2ljbGtlbjsKLQl1MzIgd2t1cF9jbV9pY2xrZW47Ci0JdTMyIGRzc19jbV9pY2xrZW47Ci0JdTMyIGNhbV9jbV9pY2xrZW47Ci0JdTMyIHBlcl9jbV9pY2xrZW47Ci0JdTMyIHVzYmhvc3RfY21faWNsa2VuOwotCXUzMiBpdmEyX2NtX2F1dGlpZGxlMjsKLQl1MzIgbXB1X2NtX2F1dG9pZGxlMjsKLQl1MzIgaXZhMl9jbV9jbGtzdGN0cmw7Ci0JdTMyIG1wdV9jbV9jbGtzdGN0cmw7Ci0JdTMyIGNvcmVfY21fY2xrc3RjdHJsOwotCXUzMiBzZ3hfY21fY2xrc3RjdHJsOwotCXUzMiBkc3NfY21fY2xrc3RjdHJsOwotCXUzMiBjYW1fY21fY2xrc3RjdHJsOwotCXUzMiBwZXJfY21fY2xrc3RjdHJsOwotCXUzMiBuZW9uX2NtX2Nsa3N0Y3RybDsKLQl1MzIgdXNiaG9zdF9jbV9jbGtzdGN0cmw7Ci0JdTMyIGNvcmVfY21fYXV0b2lkbGUxOwotCXUzMiBjb3JlX2NtX2F1dG9pZGxlMjsKLQl1MzIgY29yZV9jbV9hdXRvaWRsZTM7Ci0JdTMyIHdrdXBfY21fYXV0b2lkbGU7Ci0JdTMyIGRzc19jbV9hdXRvaWRsZTsKLQl1MzIgY2FtX2NtX2F1dG9pZGxlOwotCXUzMiBwZXJfY21fYXV0b2lkbGU7Ci0JdTMyIHVzYmhvc3RfY21fYXV0b2lkbGU7Ci0JdTMyIHNneF9jbV9zbGVlcGRlcDsKLQl1MzIgZHNzX2NtX3NsZWVwZGVwOwotCXUzMiBjYW1fY21fc2xlZXBkZXA7Ci0JdTMyIHBlcl9jbV9zbGVlcGRlcDsKLQl1MzIgdXNiaG9zdF9jbV9zbGVlcGRlcDsKLQl1MzIgY21fY2xrb3V0X2N0cmw7Ci0JdTMyIHBybV9jbGtvdXRfY3RybDsKLQl1MzIgc2d4X3BtX3drZGVwOwotCXUzMiBkc3NfcG1fd2tkZXA7Ci0JdTMyIGNhbV9wbV93a2RlcDsKLQl1MzIgcGVyX3BtX3drZGVwOwotCXUzMiBuZW9uX3BtX3drZGVwOwotCXUzMiB1c2Job3N0X3BtX3drZGVwOwotCXUzMiBjb3JlX3BtX21wdWdycHNlbDE7Ci0JdTMyIGl2YTJfcG1faXZhZ3Jwc2VsMTsKLQl1MzIgY29yZV9wbV9tcHVncnBzZWwzOwotCXUzMiBjb3JlX3BtX2l2YWdycHNlbDM7Ci0JdTMyIHdrdXBfcG1fbXB1Z3Jwc2VsOwotCXUzMiB3a3VwX3BtX2l2YWdycHNlbDsKLQl1MzIgcGVyX3BtX21wdWdycHNlbDsKLQl1MzIgcGVyX3BtX2l2YWdycHNlbDsKLQl1MzIgd2t1cF9wbV93a2VuOwotfTsKLQotc3RhdGljIHN0cnVjdCBvbWFwM19wcmNtX3JlZ3MgcHJjbV9jb250ZXh0OwotCiB1MzIgb21hcF9wcmNtX2dldF9yZXNldF9zb3VyY2VzKHZvaWQpCiB7CiAJLyogWFhYIFRoaXMgcHJlc3VtYWJseSBuZWVkcyBtb2RpZmljYXRpb24gZm9yIDM0WFggKi8KIAlpZiAoY3B1X2lzX29tYXAyNHh4KCkgfHwgY3B1X2lzX29tYXAzNHh4KCkpCi0JCXJldHVybiBwcm1fcmVhZF9tb2RfcmVnKFdLVVBfTU9ELCBPTUFQMl9STV9SU1RTVCkgJiAweDdmOworCQlyZXR1cm4gb21hcDJfcHJtX3JlYWRfbW9kX3JlZyhXS1VQX01PRCwgT01BUDJfUk1fUlNUU1QpICYgMHg3ZjsKIAlpZiAoY3B1X2lzX29tYXA0NHh4KCkpCi0JCXJldHVybiBwcm1fcmVhZF9tb2RfcmVnKFdLVVBfTU9ELCBPTUFQNF9STV9SU1RTVCkgJiAweDdmOworCQlyZXR1cm4gb21hcDJfcHJtX3JlYWRfbW9kX3JlZyhXS1VQX01PRCwgT01BUDRfUk1fUlNUU1QpICYgMHg3ZjsKIAogCXJldHVybiAwOwogfQpAQCAtMTQzLDEyNiArNjYsNDYgQEAKIAogCQlwcmNtX29mZnMgPSBXS1VQX01PRDsKIAl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMzR4eCgpKSB7Ci0JCXUzMiBsOwotCiAJCXByY21fb2ZmcyA9IE9NQVAzNDMwX0dSX01PRDsKLQkJbCA9ICgnQicgPDwgMjQpIHwgKCdNJyA8PCAxNikgfCAoY21kID8gKHU4KSpjbWQgOiAwKTsKLQkJLyogUmVzZXJ2ZSB0aGUgZmlyc3Qgd29yZCBpbiBzY3JhdGNocGFkIGZvciBjb21tdW5pY2F0aW5nCi0JCSAqIHdpdGggdGhlIGJvb3QgUk9NLiBBIHBvaW50ZXIgdG8gYSBkYXRhIHN0cnVjdHVyZQotCQkgKiBkZXNjcmliaW5nIHRoZSBib290IHByb2Nlc3MgY2FuIGJlIHN0b3JlZCB0aGVyZSwKLQkJICogY2YuIE9NQVAzNHh4IFRSTSwgSW5pdGlhbGl6YXRpb24gLyBTb2Z0d2FyZSBCb290aW5nCi0JCSAqIENvbmZpZ3VyYXRpb24uICovCi0JCW9tYXBfd3JpdGVsKGwsIE9NQVAzNDNYX1NDUkFUQ0hQQUQgKyA0KTsKLQl9IGVsc2UgaWYgKGNwdV9pc19vbWFwNDR4eCgpKQotCQlwcmNtX29mZnMgPSBPTUFQNDQzMF9QUk1fREVWSUNFX01PRDsKLQllbHNlCisJCW9tYXAzX2N0cmxfd3JpdGVfYm9vdF9tb2RlKChjbWQgPyAodTgpKmNtZCA6IDApKTsKKwl9IGVsc2UgaWYgKGNwdV9pc19vbWFwNDR4eCgpKSB7CisJCW9tYXA0X3BybV9nbG9iYWxfd2FybV9zd19yZXNldCgpOyAvKiBuZXZlciByZXR1cm5zICovCisJfSBlbHNlIHsKIAkJV0FSTl9PTigxKTsKKwl9CiAKLQlpZiAoY3B1X2lzX29tYXAyNHh4KCkgfHwgY3B1X2lzX29tYXAzNHh4KCkpCi0JCXBybV9zZXRfbW9kX3JlZ19iaXRzKE9NQVBfUlNUX0RQTEwzX01BU0ssIHByY21fb2ZmcywKLQkJCQkJCSBPTUFQMl9STV9SU1RDVFJMKTsKLQlpZiAoY3B1X2lzX29tYXA0NHh4KCkpCi0JCXBybV9zZXRfbW9kX3JlZ19iaXRzKE9NQVA0NDMwX1JTVF9HTE9CQUxfV0FSTV9TV19NQVNLLAotCQkJCSAgICAgcHJjbV9vZmZzLCBPTUFQNF9STV9SU1RDVFJMKTsKLX0KKwkvKgorCSAqIEFzIHBlciBFcnJhdGEgaTUyMCwgaW4gc29tZSBjYXNlcywgdXNlciB3aWxsIG5vdCBiZSBhYmxlIHRvCisJICogYWNjZXNzIEREUiBtZW1vcnkgYWZ0ZXIgd2FybS1yZXNldC4KKwkgKiBUaGlzIHNpdHVhdGlvbiBvY2N1cnMgd2hpbGUgdGhlIHdhcm0tcmVzZXQgaGFwcGVucyBkdXJpbmcgYSByZWFkCisJICogYWNjZXNzIHRvIEREUiBtZW1vcnkuIEluIHRoYXQgcGFydGljdWxhciBjb25kaXRpb24sIEREUiBtZW1vcnkKKwkgKiBkb2VzIG5vdCByZXNwb25kIHRvIGEgY29ycnVwdGVkIHJlYWQgY29tbWFuZCBkdWUgdG8gdGhlIHdhcm0KKwkgKiByZXNldCBvY2N1cnJlbmNlIGJ1dCBTRFJDIGlzIHdhaXRpbmcgZm9yIHJlYWQgY29tcGxldGlvbi4KKwkgKiBTRFJDIGlzIG5vdCBzZW5zaXRpdmUgdG8gdGhlIHdhcm0gcmVzZXQsIGJ1dCB0aGUgaW50ZXJjb25uZWN0IGlzCisJICogcmVzZXQgb24gdGhlIGZseSwgdGh1cyBjYXVzaW5nIGEgbWlzYWxpZ25tZW50IGJldHdlZW4gU0RSQyBsb2dpYywKKwkgKiBpbnRlcmNvbm5lY3QgbG9naWMgYW5kIEREUiBtZW1vcnkgc3RhdGUuCisJICogV09SS0FST1VORDoKKwkgKiBTdGVwcyB0byBwZXJmb3JtIGJlZm9yZSBhIFdhcm0gcmVzZXQgaXMgdHJpZ2dlZDoKKwkgKiAxLiBlbmFibGUgc2VsZi1yZWZyZXNoIG9uIGlkbGUgcmVxdWVzdAorCSAqIDIuIHB1dCBTRFJDIGluIGlkbGUKKwkgKiAzLiB3YWl0IHVudGlsIFNEUkMgZ29lcyB0byBpZGxlCisJICogNC4gZ2VuZXJhdGUgU1cgcmVzZXQgKEdsb2JhbCBTVyByZXNldCkKKwkgKgorCSAqIFN0ZXBzIHRvIGJlIHBlcmZvcm1lZCBhZnRlciB3YXJtIHJlc2V0IG9jY3VycyAoaW4gYm9vdGxvYWRlcik6CisJICogaWYgSFcgd2FybSByZXNldCBpcyB0aGUgc291cmNlLCBhcHBseSBiZWxvdyBzdGVwcyBiZWZvcmUgYW55CisJICogYWNjZXNzZXMgdG8gU0RSQU06CisJICogMS4gUmVzZXQgU01TIGFuZCBTRFJDIGFuZCB3YWl0IHRpbGwgcmVzZXQgaXMgY29tcGxldGUKKwkgKiAyLiBSZS1pbml0aWFsaXplIFNNUywgU0RSQyBhbmQgbWVtb3J5CisJICoKKwkgKiBOT1RFOiBBYm92ZSB3b3JrIGFyb3VuZCBpcyByZXF1aXJlZCBvbmx5IGlmIGFyY2ggcmVzZXQgaXMgaW1wbGVtZW50ZWQKKwkgKiB1c2luZyBHbG9iYWwgU1cgcmVzZXQoR0xPQkFMX1NXX1JTVCkuIERQTEwzIHJlc2V0IGRvZXMgbm90IG5lZWQKKwkgKiB0aGUgV0Egc2luY2UgaXQgcmVzZXRzIFNEUkMgYXMgd2VsbCBhcyBwYXJ0IG9mIGNvbGQgcmVzZXQuCisJICovCiAKLXN0YXRpYyBpbmxpbmUgdTMyIF9fb21hcF9wcmNtX3JlYWQodm9pZCBfX2lvbWVtICpiYXNlLCBzMTYgbW9kdWxlLCB1MTYgcmVnKQotewotCUJVR19PTighYmFzZSk7Ci0JcmV0dXJuIF9fcmF3X3JlYWRsKGJhc2UgKyBtb2R1bGUgKyByZWcpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX19vbWFwX3ByY21fd3JpdGUodTMyIHZhbHVlLCB2b2lkIF9faW9tZW0gKmJhc2UsCi0JCQkJCQlzMTYgbW9kdWxlLCB1MTYgcmVnKQotewotCUJVR19PTighYmFzZSk7Ci0JX19yYXdfd3JpdGVsKHZhbHVlLCBiYXNlICsgbW9kdWxlICsgcmVnKTsKLX0KLQotLyogUmVhZCBhIHJlZ2lzdGVyIGluIGEgUFJNIG1vZHVsZSAqLwotdTMyIHBybV9yZWFkX21vZF9yZWcoczE2IG1vZHVsZSwgdTE2IGlkeCkKLXsKLQlyZXR1cm4gX19vbWFwX3ByY21fcmVhZChwcm1fYmFzZSwgbW9kdWxlLCBpZHgpOwotfQotCi0vKiBXcml0ZSBpbnRvIGEgcmVnaXN0ZXIgaW4gYSBQUk0gbW9kdWxlICovCi12b2lkIHBybV93cml0ZV9tb2RfcmVnKHUzMiB2YWwsIHMxNiBtb2R1bGUsIHUxNiBpZHgpCi17Ci0JX19vbWFwX3ByY21fd3JpdGUodmFsLCBwcm1fYmFzZSwgbW9kdWxlLCBpZHgpOwotfQotCi0vKiBSZWFkLW1vZGlmeS13cml0ZSBhIHJlZ2lzdGVyIGluIGEgUFJNIG1vZHVsZS4gQ2FsbGVyIG11c3QgbG9jayAqLwotdTMyIHBybV9ybXdfbW9kX3JlZ19iaXRzKHUzMiBtYXNrLCB1MzIgYml0cywgczE2IG1vZHVsZSwgczE2IGlkeCkKLXsKLQl1MzIgdjsKLQotCXYgPSBwcm1fcmVhZF9tb2RfcmVnKG1vZHVsZSwgaWR4KTsKLQl2ICY9IH5tYXNrOwotCXYgfD0gYml0czsKLQlwcm1fd3JpdGVfbW9kX3JlZyh2LCBtb2R1bGUsIGlkeCk7Ci0KLQlyZXR1cm4gdjsKLX0KLQotLyogUmVhZCBhIFBSTSByZWdpc3RlciwgQU5EIGl0LCBhbmQgc2hpZnQgdGhlIHJlc3VsdCBkb3duIHRvIGJpdCAwICovCi11MzIgcHJtX3JlYWRfbW9kX2JpdHNfc2hpZnQoczE2IGRvbWFpbiwgczE2IGlkeCwgdTMyIG1hc2spCi17Ci0JdTMyIHY7Ci0KLQl2ID0gcHJtX3JlYWRfbW9kX3JlZyhkb21haW4sIGlkeCk7Ci0JdiAmPSBtYXNrOwotCXYgPj49IF9fZmZzKG1hc2spOwotCi0JcmV0dXJuIHY7Ci19Ci0KLS8qIFJlYWQgYSBQUk0gcmVnaXN0ZXIsIEFORCBpdCwgYW5kIHNoaWZ0IHRoZSByZXN1bHQgZG93biB0byBiaXQgMCAqLwotdTMyIG9tYXA0X3BybV9yZWFkX2JpdHNfc2hpZnQodm9pZCBfX2lvbWVtICpyZWcsIHUzMiBtYXNrKQotewotCXUzMiB2OwotCi0JdiA9IF9fcmF3X3JlYWRsKHJlZyk7Ci0JdiAmPSBtYXNrOwotCXYgPj49IF9fZmZzKG1hc2spOwotCi0JcmV0dXJuIHY7Ci19Ci0KLS8qIFJlYWQtbW9kaWZ5LXdyaXRlIGEgcmVnaXN0ZXIgaW4gYSBQUk0gbW9kdWxlLiBDYWxsZXIgbXVzdCBsb2NrICovCi11MzIgb21hcDRfcHJtX3Jtd19yZWdfYml0cyh1MzIgbWFzaywgdTMyIGJpdHMsIHZvaWQgX19pb21lbSAqcmVnKQotewotCXUzMiB2OwotCi0JdiA9IF9fcmF3X3JlYWRsKHJlZyk7Ci0JdiAmPSB+bWFzazsKLQl2IHw9IGJpdHM7Ci0JX19yYXdfd3JpdGVsKHYsIHJlZyk7Ci0KLQlyZXR1cm4gdjsKLX0KLS8qIFJlYWQgYSByZWdpc3RlciBpbiBhIENNIG1vZHVsZSAqLwotdTMyIGNtX3JlYWRfbW9kX3JlZyhzMTYgbW9kdWxlLCB1MTYgaWR4KQotewotCXJldHVybiBfX29tYXBfcHJjbV9yZWFkKGNtX2Jhc2UsIG1vZHVsZSwgaWR4KTsKLX0KLQotLyogV3JpdGUgaW50byBhIHJlZ2lzdGVyIGluIGEgQ00gbW9kdWxlICovCi12b2lkIGNtX3dyaXRlX21vZF9yZWcodTMyIHZhbCwgczE2IG1vZHVsZSwgdTE2IGlkeCkKLXsKLQlfX29tYXBfcHJjbV93cml0ZSh2YWwsIGNtX2Jhc2UsIG1vZHVsZSwgaWR4KTsKLX0KLQotLyogUmVhZC1tb2RpZnktd3JpdGUgYSByZWdpc3RlciBpbiBhIENNIG1vZHVsZS4gQ2FsbGVyIG11c3QgbG9jayAqLwotdTMyIGNtX3Jtd19tb2RfcmVnX2JpdHModTMyIG1hc2ssIHUzMiBiaXRzLCBzMTYgbW9kdWxlLCBzMTYgaWR4KQotewotCXUzMiB2OwotCi0JdiA9IGNtX3JlYWRfbW9kX3JlZyhtb2R1bGUsIGlkeCk7Ci0JdiAmPSB+bWFzazsKLQl2IHw9IGJpdHM7Ci0JY21fd3JpdGVfbW9kX3JlZyh2LCBtb2R1bGUsIGlkeCk7Ci0KLQlyZXR1cm4gdjsKKwkvKiBYWFggc2hvdWxkIGJlIG1vdmVkIHRvIHNvbWUgT01BUDIvMyBzcGVjaWZpYyBjb2RlICovCisJb21hcDJfcHJtX3NldF9tb2RfcmVnX2JpdHMoT01BUF9SU1RfRFBMTDNfTUFTSywgcHJjbV9vZmZzLAorCQkJCSAgIE9NQVAyX1JNX1JTVENUUkwpOworCW9tYXAyX3BybV9yZWFkX21vZF9yZWcocHJjbV9vZmZzLCBPTUFQMl9STV9SU1RDVFJMKTsgLyogT0NQIGJhcnJpZXIgKi8KIH0KIAogLyoqCkBAIC0yNzQsNiArMTE3LDkgQEAKICAqCiAgKiBSZXR1cm5zIDEgaWYgdGhlIG1vZHVsZSBpbmRpY2F0ZWQgcmVhZGluZXNzIGluIHRpbWUsIG9yIDAgaWYgaXQKICAqIGZhaWxlZCB0byBlbmFibGUgaW4gcm91Z2hseSBNQVhfTU9EVUxFX0VOQUJMRV9XQUlUIG1pY3Jvc2Vjb25kcy4KKyAqCisgKiBYWFggVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkLiAgSXQgc2hvdWxkIGJlIHJlbW92ZWQgb25jZSB0aGUKKyAqIGh3bW9kIGNvbnZlcnNpb24gaXMgY29tcGxldGUuCiAgKi8KIGludCBvbWFwMl9jbV93YWl0X2lkbGVzdCh2b2lkIF9faW9tZW0gKnJlZywgdTMyIG1hc2ssIHU4IGlkbGVzdCwKIAkJCQljb25zdCBjaGFyICpuYW1lKQpAQCAtMzE2LDMwMyArMTYyLDMgQEAKIAkJV0FSTl9PTighY20yX2Jhc2UpOwogCX0KIH0KLQotI2lmZGVmIENPTkZJR19BUkNIX09NQVAzCi12b2lkIG9tYXAzX3ByY21fc2F2ZV9jb250ZXh0KHZvaWQpCi17Ci0JcHJjbV9jb250ZXh0LmNvbnRyb2xfcGFkY29uZl9zeXNfbmlycSA9Ci0JCQkgb21hcF9jdHJsX3JlYWRsKE9NQVAzNDNYX0NPTlRST0xfUEFEQ09ORl9TWVNOSVJRKTsKLQlwcmNtX2NvbnRleHQuaXZhMl9jbV9jbGtzZWwxID0KLQkJCSBjbV9yZWFkX21vZF9yZWcoT01BUDM0MzBfSVZBMl9NT0QsIENNX0NMS1NFTDEpOwotCXByY21fY29udGV4dC5pdmEyX2NtX2Nsa3NlbDIgPQotCQkJIGNtX3JlYWRfbW9kX3JlZyhPTUFQMzQzMF9JVkEyX01PRCwgQ01fQ0xLU0VMMik7Ci0JcHJjbV9jb250ZXh0LmNtX3N5c2NvbmZpZyA9IF9fcmF3X3JlYWRsKE9NQVAzNDMwX0NNX1NZU0NPTkZJRyk7Ci0JcHJjbV9jb250ZXh0LnNneF9jbV9jbGtzZWwgPQotCQkJIGNtX3JlYWRfbW9kX3JlZyhPTUFQMzQzMEVTMl9TR1hfTU9ELCBDTV9DTEtTRUwpOwotCXByY21fY29udGV4dC5kc3NfY21fY2xrc2VsID0KLQkJCSBjbV9yZWFkX21vZF9yZWcoT01BUDM0MzBfRFNTX01PRCwgQ01fQ0xLU0VMKTsKLQlwcmNtX2NvbnRleHQuY2FtX2NtX2Nsa3NlbCA9Ci0JCQkgY21fcmVhZF9tb2RfcmVnKE9NQVAzNDMwX0NBTV9NT0QsIENNX0NMS1NFTCk7Ci0JcHJjbV9jb250ZXh0LnBlcl9jbV9jbGtzZWwgPQotCQkJIGNtX3JlYWRfbW9kX3JlZyhPTUFQMzQzMF9QRVJfTU9ELCBDTV9DTEtTRUwpOwotCXByY21fY29udGV4dC5lbXVfY21fY2xrc2VsID0KLQkJCSBjbV9yZWFkX21vZF9yZWcoT01BUDM0MzBfRU1VX01PRCwgQ01fQ0xLU0VMMSk7Ci0JcHJjbV9jb250ZXh0LmVtdV9jbV9jbGtzdGN0cmwgPQotCQkJIGNtX3JlYWRfbW9kX3JlZyhPTUFQMzQzMF9FTVVfTU9ELCBPTUFQMl9DTV9DTEtTVENUUkwpOwotCXByY21fY29udGV4dC5wbGxfY21fYXV0b2lkbGUyID0KLQkJCSBjbV9yZWFkX21vZF9yZWcoUExMX01PRCwgQ01fQVVUT0lETEUyKTsKLQlwcmNtX2NvbnRleHQucGxsX2NtX2Nsa3NlbDQgPQotCQkJY21fcmVhZF9tb2RfcmVnKFBMTF9NT0QsIE9NQVAzNDMwRVMyX0NNX0NMS1NFTDQpOwotCXByY21fY29udGV4dC5wbGxfY21fY2xrc2VsNSA9Ci0JCQkgY21fcmVhZF9tb2RfcmVnKFBMTF9NT0QsIE9NQVAzNDMwRVMyX0NNX0NMS1NFTDUpOwotCXByY21fY29udGV4dC5wbGxfY21fY2xrZW4yID0KLQkJCWNtX3JlYWRfbW9kX3JlZyhQTExfTU9ELCBPTUFQMzQzMEVTMl9DTV9DTEtFTjIpOwotCXByY21fY29udGV4dC5jbV9wb2xjdHJsID0gX19yYXdfcmVhZGwoT01BUDM0MzBfQ01fUE9MQ1RSTCk7Ci0JcHJjbV9jb250ZXh0Lml2YTJfY21fZmNsa2VuID0KLQkJCSBjbV9yZWFkX21vZF9yZWcoT01BUDM0MzBfSVZBMl9NT0QsIENNX0ZDTEtFTik7Ci0JcHJjbV9jb250ZXh0Lml2YTJfY21fY2xrZW5fcGxsID0gY21fcmVhZF9tb2RfcmVnKE9NQVAzNDMwX0lWQTJfTU9ELAotCQkJT01BUDM0MzBfQ01fQ0xLRU5fUExMKTsKLQlwcmNtX2NvbnRleHQuY29yZV9jbV9mY2xrZW4xID0KLQkJCSBjbV9yZWFkX21vZF9yZWcoQ09SRV9NT0QsIENNX0ZDTEtFTjEpOwotCXByY21fY29udGV4dC5jb3JlX2NtX2ZjbGtlbjMgPQotCQkJIGNtX3JlYWRfbW9kX3JlZyhDT1JFX01PRCwgT01BUDM0MzBFUzJfQ01fRkNMS0VOMyk7Ci0JcHJjbV9jb250ZXh0LnNneF9jbV9mY2xrZW4gPQotCQkJIGNtX3JlYWRfbW9kX3JlZyhPTUFQMzQzMEVTMl9TR1hfTU9ELCBDTV9GQ0xLRU4pOwotCXByY21fY29udGV4dC53a3VwX2NtX2ZjbGtlbiA9Ci0JCQkgY21fcmVhZF9tb2RfcmVnKFdLVVBfTU9ELCBDTV9GQ0xLRU4pOwotCXByY21fY29udGV4dC5kc3NfY21fZmNsa2VuID0KLQkJCSBjbV9yZWFkX21vZF9yZWcoT01BUDM0MzBfRFNTX01PRCwgQ01fRkNMS0VOKTsKLQlwcmNtX2NvbnRleHQuY2FtX2NtX2ZjbGtlbiA9Ci0JCQkgY21fcmVhZF9tb2RfcmVnKE9NQVAzNDMwX0NBTV9NT0QsIENNX0ZDTEtFTik7Ci0JcHJjbV9jb250ZXh0LnBlcl9jbV9mY2xrZW4gPQotCQkJIGNtX3JlYWRfbW9kX3JlZyhPTUFQMzQzMF9QRVJfTU9ELCBDTV9GQ0xLRU4pOwotCXByY21fY29udGV4dC51c2Job3N0X2NtX2ZjbGtlbiA9Ci0JCQkgY21fcmVhZF9tb2RfcmVnKE9NQVAzNDMwRVMyX1VTQkhPU1RfTU9ELCBDTV9GQ0xLRU4pOwotCXByY21fY29udGV4dC5jb3JlX2NtX2ljbGtlbjEgPQotCQkJIGNtX3JlYWRfbW9kX3JlZyhDT1JFX01PRCwgQ01fSUNMS0VOMSk7Ci0JcHJjbV9jb250ZXh0LmNvcmVfY21faWNsa2VuMiA9Ci0JCQkgY21fcmVhZF9tb2RfcmVnKENPUkVfTU9ELCBDTV9JQ0xLRU4yKTsKLQlwcmNtX2NvbnRleHQuY29yZV9jbV9pY2xrZW4zID0KLQkJCSBjbV9yZWFkX21vZF9yZWcoQ09SRV9NT0QsIENNX0lDTEtFTjMpOwotCXByY21fY29udGV4dC5zZ3hfY21faWNsa2VuID0KLQkJCSBjbV9yZWFkX21vZF9yZWcoT01BUDM0MzBFUzJfU0dYX01PRCwgQ01fSUNMS0VOKTsKLQlwcmNtX2NvbnRleHQud2t1cF9jbV9pY2xrZW4gPQotCQkJIGNtX3JlYWRfbW9kX3JlZyhXS1VQX01PRCwgQ01fSUNMS0VOKTsKLQlwcmNtX2NvbnRleHQuZHNzX2NtX2ljbGtlbiA9Ci0JCQkgY21fcmVhZF9tb2RfcmVnKE9NQVAzNDMwX0RTU19NT0QsIENNX0lDTEtFTik7Ci0JcHJjbV9jb250ZXh0LmNhbV9jbV9pY2xrZW4gPQotCQkJIGNtX3JlYWRfbW9kX3JlZyhPTUFQMzQzMF9DQU1fTU9ELCBDTV9JQ0xLRU4pOwotCXByY21fY29udGV4dC5wZXJfY21faWNsa2VuID0KLQkJCSBjbV9yZWFkX21vZF9yZWcoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKTsKLQlwcmNtX2NvbnRleHQudXNiaG9zdF9jbV9pY2xrZW4gPQotCQkJIGNtX3JlYWRfbW9kX3JlZyhPTUFQMzQzMEVTMl9VU0JIT1NUX01PRCwgQ01fSUNMS0VOKTsKLQlwcmNtX2NvbnRleHQuaXZhMl9jbV9hdXRpaWRsZTIgPQotCQkJIGNtX3JlYWRfbW9kX3JlZyhPTUFQMzQzMF9JVkEyX01PRCwgQ01fQVVUT0lETEUyKTsKLQlwcmNtX2NvbnRleHQubXB1X2NtX2F1dG9pZGxlMiA9Ci0JCQkgY21fcmVhZF9tb2RfcmVnKE1QVV9NT0QsIENNX0FVVE9JRExFMik7Ci0JcHJjbV9jb250ZXh0Lml2YTJfY21fY2xrc3RjdHJsID0KLQkJCSBjbV9yZWFkX21vZF9yZWcoT01BUDM0MzBfSVZBMl9NT0QsIE9NQVAyX0NNX0NMS1NUQ1RSTCk7Ci0JcHJjbV9jb250ZXh0Lm1wdV9jbV9jbGtzdGN0cmwgPQotCQkJIGNtX3JlYWRfbW9kX3JlZyhNUFVfTU9ELCBPTUFQMl9DTV9DTEtTVENUUkwpOwotCXByY21fY29udGV4dC5jb3JlX2NtX2Nsa3N0Y3RybCA9Ci0JCQkgY21fcmVhZF9tb2RfcmVnKENPUkVfTU9ELCBPTUFQMl9DTV9DTEtTVENUUkwpOwotCXByY21fY29udGV4dC5zZ3hfY21fY2xrc3RjdHJsID0KLQkJCSBjbV9yZWFkX21vZF9yZWcoT01BUDM0MzBFUzJfU0dYX01PRCwKLQkJCQkJCU9NQVAyX0NNX0NMS1NUQ1RSTCk7Ci0JcHJjbV9jb250ZXh0LmRzc19jbV9jbGtzdGN0cmwgPQotCQkJIGNtX3JlYWRfbW9kX3JlZyhPTUFQMzQzMF9EU1NfTU9ELCBPTUFQMl9DTV9DTEtTVENUUkwpOwotCXByY21fY29udGV4dC5jYW1fY21fY2xrc3RjdHJsID0KLQkJCSBjbV9yZWFkX21vZF9yZWcoT01BUDM0MzBfQ0FNX01PRCwgT01BUDJfQ01fQ0xLU1RDVFJMKTsKLQlwcmNtX2NvbnRleHQucGVyX2NtX2Nsa3N0Y3RybCA9Ci0JCQkgY21fcmVhZF9tb2RfcmVnKE9NQVAzNDMwX1BFUl9NT0QsIE9NQVAyX0NNX0NMS1NUQ1RSTCk7Ci0JcHJjbV9jb250ZXh0Lm5lb25fY21fY2xrc3RjdHJsID0KLQkJCSBjbV9yZWFkX21vZF9yZWcoT01BUDM0MzBfTkVPTl9NT0QsIE9NQVAyX0NNX0NMS1NUQ1RSTCk7Ci0JcHJjbV9jb250ZXh0LnVzYmhvc3RfY21fY2xrc3RjdHJsID0KLQkJCSBjbV9yZWFkX21vZF9yZWcoT01BUDM0MzBFUzJfVVNCSE9TVF9NT0QsCi0JCQkJCQlPTUFQMl9DTV9DTEtTVENUUkwpOwotCXByY21fY29udGV4dC5jb3JlX2NtX2F1dG9pZGxlMSA9Ci0JCQkgY21fcmVhZF9tb2RfcmVnKENPUkVfTU9ELCBDTV9BVVRPSURMRTEpOwotCXByY21fY29udGV4dC5jb3JlX2NtX2F1dG9pZGxlMiA9Ci0JCQkgY21fcmVhZF9tb2RfcmVnKENPUkVfTU9ELCBDTV9BVVRPSURMRTIpOwotCXByY21fY29udGV4dC5jb3JlX2NtX2F1dG9pZGxlMyA9Ci0JCQkgY21fcmVhZF9tb2RfcmVnKENPUkVfTU9ELCBDTV9BVVRPSURMRTMpOwotCXByY21fY29udGV4dC53a3VwX2NtX2F1dG9pZGxlID0KLQkJCSBjbV9yZWFkX21vZF9yZWcoV0tVUF9NT0QsIENNX0FVVE9JRExFKTsKLQlwcmNtX2NvbnRleHQuZHNzX2NtX2F1dG9pZGxlID0KLQkJCSBjbV9yZWFkX21vZF9yZWcoT01BUDM0MzBfRFNTX01PRCwgQ01fQVVUT0lETEUpOwotCXByY21fY29udGV4dC5jYW1fY21fYXV0b2lkbGUgPQotCQkJIGNtX3JlYWRfbW9kX3JlZyhPTUFQMzQzMF9DQU1fTU9ELCBDTV9BVVRPSURMRSk7Ci0JcHJjbV9jb250ZXh0LnBlcl9jbV9hdXRvaWRsZSA9Ci0JCQkgY21fcmVhZF9tb2RfcmVnKE9NQVAzNDMwX1BFUl9NT0QsIENNX0FVVE9JRExFKTsKLQlwcmNtX2NvbnRleHQudXNiaG9zdF9jbV9hdXRvaWRsZSA9Ci0JCQkgY21fcmVhZF9tb2RfcmVnKE9NQVAzNDMwRVMyX1VTQkhPU1RfTU9ELCBDTV9BVVRPSURMRSk7Ci0JcHJjbV9jb250ZXh0LnNneF9jbV9zbGVlcGRlcCA9Ci0JCSBjbV9yZWFkX21vZF9yZWcoT01BUDM0MzBFUzJfU0dYX01PRCwgT01BUDM0MzBfQ01fU0xFRVBERVApOwotCXByY21fY29udGV4dC5kc3NfY21fc2xlZXBkZXAgPQotCQkgY21fcmVhZF9tb2RfcmVnKE9NQVAzNDMwX0RTU19NT0QsIE9NQVAzNDMwX0NNX1NMRUVQREVQKTsKLQlwcmNtX2NvbnRleHQuY2FtX2NtX3NsZWVwZGVwID0KLQkJIGNtX3JlYWRfbW9kX3JlZyhPTUFQMzQzMF9DQU1fTU9ELCBPTUFQMzQzMF9DTV9TTEVFUERFUCk7Ci0JcHJjbV9jb250ZXh0LnBlcl9jbV9zbGVlcGRlcCA9Ci0JCSBjbV9yZWFkX21vZF9yZWcoT01BUDM0MzBfUEVSX01PRCwgT01BUDM0MzBfQ01fU0xFRVBERVApOwotCXByY21fY29udGV4dC51c2Job3N0X2NtX3NsZWVwZGVwID0KLQkJIGNtX3JlYWRfbW9kX3JlZyhPTUFQMzQzMEVTMl9VU0JIT1NUX01PRCwgT01BUDM0MzBfQ01fU0xFRVBERVApOwotCXByY21fY29udGV4dC5jbV9jbGtvdXRfY3RybCA9IGNtX3JlYWRfbW9kX3JlZyhPTUFQMzQzMF9DQ1JfTU9ELAotCQkgT01BUDNfQ01fQ0xLT1VUX0NUUkxfT0ZGU0VUKTsKLQlwcmNtX2NvbnRleHQucHJtX2Nsa291dF9jdHJsID0gcHJtX3JlYWRfbW9kX3JlZyhPTUFQMzQzMF9DQ1JfTU9ELAotCQlPTUFQM19QUk1fQ0xLT1VUX0NUUkxfT0ZGU0VUKTsKLQlwcmNtX2NvbnRleHQuc2d4X3BtX3drZGVwID0KLQkJIHBybV9yZWFkX21vZF9yZWcoT01BUDM0MzBFUzJfU0dYX01PRCwgUE1fV0tERVApOwotCXByY21fY29udGV4dC5kc3NfcG1fd2tkZXAgPQotCQkgcHJtX3JlYWRfbW9kX3JlZyhPTUFQMzQzMF9EU1NfTU9ELCBQTV9XS0RFUCk7Ci0JcHJjbV9jb250ZXh0LmNhbV9wbV93a2RlcCA9Ci0JCSBwcm1fcmVhZF9tb2RfcmVnKE9NQVAzNDMwX0NBTV9NT0QsIFBNX1dLREVQKTsKLQlwcmNtX2NvbnRleHQucGVyX3BtX3drZGVwID0KLQkJIHBybV9yZWFkX21vZF9yZWcoT01BUDM0MzBfUEVSX01PRCwgUE1fV0tERVApOwotCXByY21fY29udGV4dC5uZW9uX3BtX3drZGVwID0KLQkJIHBybV9yZWFkX21vZF9yZWcoT01BUDM0MzBfTkVPTl9NT0QsIFBNX1dLREVQKTsKLQlwcmNtX2NvbnRleHQudXNiaG9zdF9wbV93a2RlcCA9Ci0JCSBwcm1fcmVhZF9tb2RfcmVnKE9NQVAzNDMwRVMyX1VTQkhPU1RfTU9ELCBQTV9XS0RFUCk7Ci0JcHJjbV9jb250ZXh0LmNvcmVfcG1fbXB1Z3Jwc2VsMSA9Ci0JCSBwcm1fcmVhZF9tb2RfcmVnKENPUkVfTU9ELCBPTUFQMzQzMF9QTV9NUFVHUlBTRUwxKTsKLQlwcmNtX2NvbnRleHQuaXZhMl9wbV9pdmFncnBzZWwxID0KLQkJIHBybV9yZWFkX21vZF9yZWcoT01BUDM0MzBfSVZBMl9NT0QsIE9NQVAzNDMwX1BNX0lWQUdSUFNFTDEpOwotCXByY21fY29udGV4dC5jb3JlX3BtX21wdWdycHNlbDMgPQotCQkgcHJtX3JlYWRfbW9kX3JlZyhDT1JFX01PRCwgT01BUDM0MzBFUzJfUE1fTVBVR1JQU0VMMyk7Ci0JcHJjbV9jb250ZXh0LmNvcmVfcG1faXZhZ3Jwc2VsMyA9Ci0JCSBwcm1fcmVhZF9tb2RfcmVnKENPUkVfTU9ELCBPTUFQMzQzMEVTMl9QTV9JVkFHUlBTRUwzKTsKLQlwcmNtX2NvbnRleHQud2t1cF9wbV9tcHVncnBzZWwgPQotCQkgcHJtX3JlYWRfbW9kX3JlZyhXS1VQX01PRCwgT01BUDM0MzBfUE1fTVBVR1JQU0VMKTsKLQlwcmNtX2NvbnRleHQud2t1cF9wbV9pdmFncnBzZWwgPQotCQkgcHJtX3JlYWRfbW9kX3JlZyhXS1VQX01PRCwgT01BUDM0MzBfUE1fSVZBR1JQU0VMKTsKLQlwcmNtX2NvbnRleHQucGVyX3BtX21wdWdycHNlbCA9Ci0JCSBwcm1fcmVhZF9tb2RfcmVnKE9NQVAzNDMwX1BFUl9NT0QsIE9NQVAzNDMwX1BNX01QVUdSUFNFTCk7Ci0JcHJjbV9jb250ZXh0LnBlcl9wbV9pdmFncnBzZWwgPQotCQkgcHJtX3JlYWRfbW9kX3JlZyhPTUFQMzQzMF9QRVJfTU9ELCBPTUFQMzQzMF9QTV9JVkFHUlBTRUwpOwotCXByY21fY29udGV4dC53a3VwX3BtX3drZW4gPSBwcm1fcmVhZF9tb2RfcmVnKFdLVVBfTU9ELCBQTV9XS0VOKTsKLQlyZXR1cm47Ci19Ci0KLXZvaWQgb21hcDNfcHJjbV9yZXN0b3JlX2NvbnRleHQodm9pZCkKLXsKLQlvbWFwX2N0cmxfd3JpdGVsKHByY21fY29udGV4dC5jb250cm9sX3BhZGNvbmZfc3lzX25pcnEsCi0JCQkJCSBPTUFQMzQzWF9DT05UUk9MX1BBRENPTkZfU1lTTklSUSk7Ci0JY21fd3JpdGVfbW9kX3JlZyhwcmNtX2NvbnRleHQuaXZhMl9jbV9jbGtzZWwxLCBPTUFQMzQzMF9JVkEyX01PRCwKLQkJCQkJIENNX0NMS1NFTDEpOwotCWNtX3dyaXRlX21vZF9yZWcocHJjbV9jb250ZXh0Lml2YTJfY21fY2xrc2VsMiwgT01BUDM0MzBfSVZBMl9NT0QsCi0JCQkJCSBDTV9DTEtTRUwyKTsKLQlfX3Jhd193cml0ZWwocHJjbV9jb250ZXh0LmNtX3N5c2NvbmZpZywgT01BUDM0MzBfQ01fU1lTQ09ORklHKTsKLQljbV93cml0ZV9tb2RfcmVnKHByY21fY29udGV4dC5zZ3hfY21fY2xrc2VsLCBPTUFQMzQzMEVTMl9TR1hfTU9ELAotCQkJCQkgQ01fQ0xLU0VMKTsKLQljbV93cml0ZV9tb2RfcmVnKHByY21fY29udGV4dC5kc3NfY21fY2xrc2VsLCBPTUFQMzQzMF9EU1NfTU9ELAotCQkJCQkgQ01fQ0xLU0VMKTsKLQljbV93cml0ZV9tb2RfcmVnKHByY21fY29udGV4dC5jYW1fY21fY2xrc2VsLCBPTUFQMzQzMF9DQU1fTU9ELAotCQkJCQkgQ01fQ0xLU0VMKTsKLQljbV93cml0ZV9tb2RfcmVnKHByY21fY29udGV4dC5wZXJfY21fY2xrc2VsLCBPTUFQMzQzMF9QRVJfTU9ELAotCQkJCQkgQ01fQ0xLU0VMKTsKLQljbV93cml0ZV9tb2RfcmVnKHByY21fY29udGV4dC5lbXVfY21fY2xrc2VsLCBPTUFQMzQzMF9FTVVfTU9ELAotCQkJCQkgQ01fQ0xLU0VMMSk7Ci0JY21fd3JpdGVfbW9kX3JlZyhwcmNtX2NvbnRleHQuZW11X2NtX2Nsa3N0Y3RybCwgT01BUDM0MzBfRU1VX01PRCwKLQkJCQkJIE9NQVAyX0NNX0NMS1NUQ1RSTCk7Ci0JY21fd3JpdGVfbW9kX3JlZyhwcmNtX2NvbnRleHQucGxsX2NtX2F1dG9pZGxlMiwgUExMX01PRCwKLQkJCQkJIENNX0FVVE9JRExFMik7Ci0JY21fd3JpdGVfbW9kX3JlZyhwcmNtX2NvbnRleHQucGxsX2NtX2Nsa3NlbDQsIFBMTF9NT0QsCi0JCQkJCU9NQVAzNDMwRVMyX0NNX0NMS1NFTDQpOwotCWNtX3dyaXRlX21vZF9yZWcocHJjbV9jb250ZXh0LnBsbF9jbV9jbGtzZWw1LCBQTExfTU9ELAotCQkJCQkgT01BUDM0MzBFUzJfQ01fQ0xLU0VMNSk7Ci0JY21fd3JpdGVfbW9kX3JlZyhwcmNtX2NvbnRleHQucGxsX2NtX2Nsa2VuMiwgUExMX01PRCwKLQkJCQkJT01BUDM0MzBFUzJfQ01fQ0xLRU4yKTsKLQlfX3Jhd193cml0ZWwocHJjbV9jb250ZXh0LmNtX3BvbGN0cmwsIE9NQVAzNDMwX0NNX1BPTENUUkwpOwotCWNtX3dyaXRlX21vZF9yZWcocHJjbV9jb250ZXh0Lml2YTJfY21fZmNsa2VuLCBPTUFQMzQzMF9JVkEyX01PRCwKLQkJCQkJIENNX0ZDTEtFTik7Ci0JY21fd3JpdGVfbW9kX3JlZyhwcmNtX2NvbnRleHQuaXZhMl9jbV9jbGtlbl9wbGwsIE9NQVAzNDMwX0lWQTJfTU9ELAotCQkJCQlPTUFQMzQzMF9DTV9DTEtFTl9QTEwpOwotCWNtX3dyaXRlX21vZF9yZWcocHJjbV9jb250ZXh0LmNvcmVfY21fZmNsa2VuMSwgQ09SRV9NT0QsIENNX0ZDTEtFTjEpOwotCWNtX3dyaXRlX21vZF9yZWcocHJjbV9jb250ZXh0LmNvcmVfY21fZmNsa2VuMywgQ09SRV9NT0QsCi0JCQkJCSBPTUFQMzQzMEVTMl9DTV9GQ0xLRU4zKTsKLQljbV93cml0ZV9tb2RfcmVnKHByY21fY29udGV4dC5zZ3hfY21fZmNsa2VuLCBPTUFQMzQzMEVTMl9TR1hfTU9ELAotCQkJCQkgQ01fRkNMS0VOKTsKLQljbV93cml0ZV9tb2RfcmVnKHByY21fY29udGV4dC53a3VwX2NtX2ZjbGtlbiwgV0tVUF9NT0QsIENNX0ZDTEtFTik7Ci0JY21fd3JpdGVfbW9kX3JlZyhwcmNtX2NvbnRleHQuZHNzX2NtX2ZjbGtlbiwgT01BUDM0MzBfRFNTX01PRCwKLQkJCQkJIENNX0ZDTEtFTik7Ci0JY21fd3JpdGVfbW9kX3JlZyhwcmNtX2NvbnRleHQuY2FtX2NtX2ZjbGtlbiwgT01BUDM0MzBfQ0FNX01PRCwKLQkJCQkJIENNX0ZDTEtFTik7Ci0JY21fd3JpdGVfbW9kX3JlZyhwcmNtX2NvbnRleHQucGVyX2NtX2ZjbGtlbiwgT01BUDM0MzBfUEVSX01PRCwKLQkJCQkJIENNX0ZDTEtFTik7Ci0JY21fd3JpdGVfbW9kX3JlZyhwcmNtX2NvbnRleHQudXNiaG9zdF9jbV9mY2xrZW4sCi0JCQkJCSBPTUFQMzQzMEVTMl9VU0JIT1NUX01PRCwgQ01fRkNMS0VOKTsKLQljbV93cml0ZV9tb2RfcmVnKHByY21fY29udGV4dC5jb3JlX2NtX2ljbGtlbjEsIENPUkVfTU9ELCBDTV9JQ0xLRU4xKTsKLQljbV93cml0ZV9tb2RfcmVnKHByY21fY29udGV4dC5jb3JlX2NtX2ljbGtlbjIsIENPUkVfTU9ELCBDTV9JQ0xLRU4yKTsKLQljbV93cml0ZV9tb2RfcmVnKHByY21fY29udGV4dC5jb3JlX2NtX2ljbGtlbjMsIENPUkVfTU9ELCBDTV9JQ0xLRU4zKTsKLQljbV93cml0ZV9tb2RfcmVnKHByY21fY29udGV4dC5zZ3hfY21faWNsa2VuLCBPTUFQMzQzMEVTMl9TR1hfTU9ELAotCQkJCQlDTV9JQ0xLRU4pOwotCWNtX3dyaXRlX21vZF9yZWcocHJjbV9jb250ZXh0LndrdXBfY21faWNsa2VuLCBXS1VQX01PRCwgQ01fSUNMS0VOKTsKLQljbV93cml0ZV9tb2RfcmVnKHByY21fY29udGV4dC5kc3NfY21faWNsa2VuLCBPTUFQMzQzMF9EU1NfTU9ELAotCQkJCQlDTV9JQ0xLRU4pOwotCWNtX3dyaXRlX21vZF9yZWcocHJjbV9jb250ZXh0LmNhbV9jbV9pY2xrZW4sIE9NQVAzNDMwX0NBTV9NT0QsCi0JCQkJCUNNX0lDTEtFTik7Ci0JY21fd3JpdGVfbW9kX3JlZyhwcmNtX2NvbnRleHQucGVyX2NtX2ljbGtlbiwgT01BUDM0MzBfUEVSX01PRCwKLQkJCQkJQ01fSUNMS0VOKTsKLQljbV93cml0ZV9tb2RfcmVnKHByY21fY29udGV4dC51c2Job3N0X2NtX2ljbGtlbiwKLQkJCQkJT01BUDM0MzBFUzJfVVNCSE9TVF9NT0QsIENNX0lDTEtFTik7Ci0JY21fd3JpdGVfbW9kX3JlZyhwcmNtX2NvbnRleHQuaXZhMl9jbV9hdXRpaWRsZTIsIE9NQVAzNDMwX0lWQTJfTU9ELAotCQkJCQlDTV9BVVRPSURMRTIpOwotCWNtX3dyaXRlX21vZF9yZWcocHJjbV9jb250ZXh0Lm1wdV9jbV9hdXRvaWRsZTIsIE1QVV9NT0QsIENNX0FVVE9JRExFMik7Ci0JY21fd3JpdGVfbW9kX3JlZyhwcmNtX2NvbnRleHQuaXZhMl9jbV9jbGtzdGN0cmwsIE9NQVAzNDMwX0lWQTJfTU9ELAotCQkJCQlPTUFQMl9DTV9DTEtTVENUUkwpOwotCWNtX3dyaXRlX21vZF9yZWcocHJjbV9jb250ZXh0Lm1wdV9jbV9jbGtzdGN0cmwsIE1QVV9NT0QsCi0JCQkJCU9NQVAyX0NNX0NMS1NUQ1RSTCk7Ci0JY21fd3JpdGVfbW9kX3JlZyhwcmNtX2NvbnRleHQuY29yZV9jbV9jbGtzdGN0cmwsIENPUkVfTU9ELAotCQkJCQlPTUFQMl9DTV9DTEtTVENUUkwpOwotCWNtX3dyaXRlX21vZF9yZWcocHJjbV9jb250ZXh0LnNneF9jbV9jbGtzdGN0cmwsIE9NQVAzNDMwRVMyX1NHWF9NT0QsCi0JCQkJCU9NQVAyX0NNX0NMS1NUQ1RSTCk7Ci0JY21fd3JpdGVfbW9kX3JlZyhwcmNtX2NvbnRleHQuZHNzX2NtX2Nsa3N0Y3RybCwgT01BUDM0MzBfRFNTX01PRCwKLQkJCQkJT01BUDJfQ01fQ0xLU1RDVFJMKTsKLQljbV93cml0ZV9tb2RfcmVnKHByY21fY29udGV4dC5jYW1fY21fY2xrc3RjdHJsLCBPTUFQMzQzMF9DQU1fTU9ELAotCQkJCQlPTUFQMl9DTV9DTEtTVENUUkwpOwotCWNtX3dyaXRlX21vZF9yZWcocHJjbV9jb250ZXh0LnBlcl9jbV9jbGtzdGN0cmwsIE9NQVAzNDMwX1BFUl9NT0QsCi0JCQkJCU9NQVAyX0NNX0NMS1NUQ1RSTCk7Ci0JY21fd3JpdGVfbW9kX3JlZyhwcmNtX2NvbnRleHQubmVvbl9jbV9jbGtzdGN0cmwsIE9NQVAzNDMwX05FT05fTU9ELAotCQkJCQlPTUFQMl9DTV9DTEtTVENUUkwpOwotCWNtX3dyaXRlX21vZF9yZWcocHJjbV9jb250ZXh0LnVzYmhvc3RfY21fY2xrc3RjdHJsLAotCQkJCU9NQVAzNDMwRVMyX1VTQkhPU1RfTU9ELCBPTUFQMl9DTV9DTEtTVENUUkwpOwotCWNtX3dyaXRlX21vZF9yZWcocHJjbV9jb250ZXh0LmNvcmVfY21fYXV0b2lkbGUxLCBDT1JFX01PRCwKLQkJCQkJQ01fQVVUT0lETEUxKTsKLQljbV93cml0ZV9tb2RfcmVnKHByY21fY29udGV4dC5jb3JlX2NtX2F1dG9pZGxlMiwgQ09SRV9NT0QsCi0JCQkJCUNNX0FVVE9JRExFMik7Ci0JY21fd3JpdGVfbW9kX3JlZyhwcmNtX2NvbnRleHQuY29yZV9jbV9hdXRvaWRsZTMsIENPUkVfTU9ELAotCQkJCQlDTV9BVVRPSURMRTMpOwotCWNtX3dyaXRlX21vZF9yZWcocHJjbV9jb250ZXh0LndrdXBfY21fYXV0b2lkbGUsIFdLVVBfTU9ELCBDTV9BVVRPSURMRSk7Ci0JY21fd3JpdGVfbW9kX3JlZyhwcmNtX2NvbnRleHQuZHNzX2NtX2F1dG9pZGxlLCBPTUFQMzQzMF9EU1NfTU9ELAotCQkJCQlDTV9BVVRPSURMRSk7Ci0JY21fd3JpdGVfbW9kX3JlZyhwcmNtX2NvbnRleHQuY2FtX2NtX2F1dG9pZGxlLCBPTUFQMzQzMF9DQU1fTU9ELAotCQkJCQlDTV9BVVRPSURMRSk7Ci0JY21fd3JpdGVfbW9kX3JlZyhwcmNtX2NvbnRleHQucGVyX2NtX2F1dG9pZGxlLCBPTUFQMzQzMF9QRVJfTU9ELAotCQkJCQlDTV9BVVRPSURMRSk7Ci0JY21fd3JpdGVfbW9kX3JlZyhwcmNtX2NvbnRleHQudXNiaG9zdF9jbV9hdXRvaWRsZSwKLQkJCQkJT01BUDM0MzBFUzJfVVNCSE9TVF9NT0QsIENNX0FVVE9JRExFKTsKLQljbV93cml0ZV9tb2RfcmVnKHByY21fY29udGV4dC5zZ3hfY21fc2xlZXBkZXAsIE9NQVAzNDMwRVMyX1NHWF9NT0QsCi0JCQkJCU9NQVAzNDMwX0NNX1NMRUVQREVQKTsKLQljbV93cml0ZV9tb2RfcmVnKHByY21fY29udGV4dC5kc3NfY21fc2xlZXBkZXAsIE9NQVAzNDMwX0RTU19NT0QsCi0JCQkJCU9NQVAzNDMwX0NNX1NMRUVQREVQKTsKLQljbV93cml0ZV9tb2RfcmVnKHByY21fY29udGV4dC5jYW1fY21fc2xlZXBkZXAsIE9NQVAzNDMwX0NBTV9NT0QsCi0JCQkJCU9NQVAzNDMwX0NNX1NMRUVQREVQKTsKLQljbV93cml0ZV9tb2RfcmVnKHByY21fY29udGV4dC5wZXJfY21fc2xlZXBkZXAsIE9NQVAzNDMwX1BFUl9NT0QsCi0JCQkJCU9NQVAzNDMwX0NNX1NMRUVQREVQKTsKLQljbV93cml0ZV9tb2RfcmVnKHByY21fY29udGV4dC51c2Job3N0X2NtX3NsZWVwZGVwLAotCQkJCU9NQVAzNDMwRVMyX1VTQkhPU1RfTU9ELCBPTUFQMzQzMF9DTV9TTEVFUERFUCk7Ci0JY21fd3JpdGVfbW9kX3JlZyhwcmNtX2NvbnRleHQuY21fY2xrb3V0X2N0cmwsIE9NQVAzNDMwX0NDUl9NT0QsCi0JCQkJCU9NQVAzX0NNX0NMS09VVF9DVFJMX09GRlNFVCk7Ci0JcHJtX3dyaXRlX21vZF9yZWcocHJjbV9jb250ZXh0LnBybV9jbGtvdXRfY3RybCwgT01BUDM0MzBfQ0NSX01PRCwKLQkJCQkJT01BUDNfUFJNX0NMS09VVF9DVFJMX09GRlNFVCk7Ci0JcHJtX3dyaXRlX21vZF9yZWcocHJjbV9jb250ZXh0LnNneF9wbV93a2RlcCwgT01BUDM0MzBFUzJfU0dYX01PRCwKLQkJCQkJUE1fV0tERVApOwotCXBybV93cml0ZV9tb2RfcmVnKHByY21fY29udGV4dC5kc3NfcG1fd2tkZXAsIE9NQVAzNDMwX0RTU19NT0QsCi0JCQkJCVBNX1dLREVQKTsKLQlwcm1fd3JpdGVfbW9kX3JlZyhwcmNtX2NvbnRleHQuY2FtX3BtX3drZGVwLCBPTUFQMzQzMF9DQU1fTU9ELAotCQkJCQlQTV9XS0RFUCk7Ci0JcHJtX3dyaXRlX21vZF9yZWcocHJjbV9jb250ZXh0LnBlcl9wbV93a2RlcCwgT01BUDM0MzBfUEVSX01PRCwKLQkJCQkJUE1fV0tERVApOwotCXBybV93cml0ZV9tb2RfcmVnKHByY21fY29udGV4dC5uZW9uX3BtX3drZGVwLCBPTUFQMzQzMF9ORU9OX01PRCwKLQkJCQkJUE1fV0tERVApOwotCXBybV93cml0ZV9tb2RfcmVnKHByY21fY29udGV4dC51c2Job3N0X3BtX3drZGVwLAotCQkJCQlPTUFQMzQzMEVTMl9VU0JIT1NUX01PRCwgUE1fV0tERVApOwotCXBybV93cml0ZV9tb2RfcmVnKHByY21fY29udGV4dC5jb3JlX3BtX21wdWdycHNlbDEsIENPUkVfTU9ELAotCQkJCQlPTUFQMzQzMF9QTV9NUFVHUlBTRUwxKTsKLQlwcm1fd3JpdGVfbW9kX3JlZyhwcmNtX2NvbnRleHQuaXZhMl9wbV9pdmFncnBzZWwxLCBPTUFQMzQzMF9JVkEyX01PRCwKLQkJCQkJT01BUDM0MzBfUE1fSVZBR1JQU0VMMSk7Ci0JcHJtX3dyaXRlX21vZF9yZWcocHJjbV9jb250ZXh0LmNvcmVfcG1fbXB1Z3Jwc2VsMywgQ09SRV9NT0QsCi0JCQkJCU9NQVAzNDMwRVMyX1BNX01QVUdSUFNFTDMpOwotCXBybV93cml0ZV9tb2RfcmVnKHByY21fY29udGV4dC5jb3JlX3BtX2l2YWdycHNlbDMsIENPUkVfTU9ELAotCQkJCQlPTUFQMzQzMEVTMl9QTV9JVkFHUlBTRUwzKTsKLQlwcm1fd3JpdGVfbW9kX3JlZyhwcmNtX2NvbnRleHQud2t1cF9wbV9tcHVncnBzZWwsIFdLVVBfTU9ELAotCQkJCQlPTUFQMzQzMF9QTV9NUFVHUlBTRUwpOwotCXBybV93cml0ZV9tb2RfcmVnKHByY21fY29udGV4dC53a3VwX3BtX2l2YWdycHNlbCwgV0tVUF9NT0QsCi0JCQkJCU9NQVAzNDMwX1BNX0lWQUdSUFNFTCk7Ci0JcHJtX3dyaXRlX21vZF9yZWcocHJjbV9jb250ZXh0LnBlcl9wbV9tcHVncnBzZWwsIE9NQVAzNDMwX1BFUl9NT0QsCi0JCQkJCU9NQVAzNDMwX1BNX01QVUdSUFNFTCk7Ci0JcHJtX3dyaXRlX21vZF9yZWcocHJjbV9jb250ZXh0LnBlcl9wbV9pdmFncnBzZWwsIE9NQVAzNDMwX1BFUl9NT0QsCi0JCQkJCSBPTUFQMzQzMF9QTV9JVkFHUlBTRUwpOwotCXBybV93cml0ZV9tb2RfcmVnKHByY21fY29udGV4dC53a3VwX3BtX3drZW4sIFdLVVBfTU9ELCBQTV9XS0VOKTsKLQlyZXR1cm47Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJjbTQ0eHguaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJjbTQ0eHguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzM0ZmZiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcmNtNDR4eC5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBPTUFQNCBQUkNNIGRlZmluaXRpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBQYXVsIFdhbG1zbGV5CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgbWFjcm9zIGFuZCBmdW5jdGlvbnMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBvZgorICogdGhlIFBSTS9DTS9QUkNNIGJsb2NrcyBvbiB0aGUgT01BUDQgZGV2aWNlczogUFJNLCBDTTEsIENNMiwKKyAqIFBSQ01fTVBVLCBTQ1JNCisgKi8KKworI2lmbmRlZiBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfUFJDTTQ0WFhfSAorI2RlZmluZSBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfUFJDTTQ0WFhfSAorCisvKgorICogT01BUDQgUFJDTSBwYXJ0aXRpb24gSURzCisgKgorICogVGhlIG51bWJlcnMgYW5kIG9yZGVyIGFyZSBhcmJpdHJhcnksIGJ1dCAwIGlzIHJlc2VydmVkIGZvciB0aGUKKyAqICdpbnZhbGlkJyBwYXJ0aXRpb24gaW4gY2FzZSBzb21lb25lIGZvcmdldHMgdG8gYWRkIGEKKyAqIC5wcmNtX3BhcnRpdGlvbiBmaWVsZC4KKyAqLworI2RlZmluZSBPTUFQNDQzMF9JTlZBTElEX1BSQ01fUEFSVElUSU9OCQkwCisjZGVmaW5lIE9NQVA0NDMwX1BSTV9QQVJUSVRJT04JCQkxCisjZGVmaW5lIE9NQVA0NDMwX0NNMV9QQVJUSVRJT04JCQkyCisjZGVmaW5lIE9NQVA0NDMwX0NNMl9QQVJUSVRJT04JCQkzCisjZGVmaW5lIE9NQVA0NDMwX1NDUk1fUEFSVElUSU9OCQkJNAorI2RlZmluZSBPTUFQNDQzMF9QUkNNX01QVV9QQVJUSVRJT04JCTUKKworLyoKKyAqIE9NQVA0X01BWF9QUkNNX1BBUlRJVElPTlM6IHNldCB0byB0aGUgaGlnaGVzdCB2YWx1ZSBvZiB0aGUgUFJDTSBwYXJ0aXRpb24KKyAqIElEcywgcGx1cyBvbmUKKyAqLworI2RlZmluZSBPTUFQNF9NQVhfUFJDTV9QQVJUSVRJT05TCQk2CisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3ByY21fbXB1NDR4eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcmNtX21wdTQ0eHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzFmZTE3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcmNtX21wdTQ0eHguYwpAQCAtMCwwICsxLDQ1IEBACisvKgorICogT01BUDQgUFJDTV9NUFUgbW9kdWxlIGZ1bmN0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgorICogUGF1bCBXYWxtc2xleQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8cGxhdC9jb21tb24uaD4KKworI2luY2x1ZGUgInByY21fbXB1NDR4eC5oIgorI2luY2x1ZGUgImNtLXJlZ2JpdHMtNDR4eC5oIgorCisvKiBQUkNNX01QVSBsb3ctbGV2ZWwgZnVuY3Rpb25zICovCisKK3UzMiBvbWFwNF9wcmNtX21wdV9yZWFkX2luc3RfcmVnKHMxNiBpbnN0LCB1MTYgcmVnKQoreworCXJldHVybiBfX3Jhd19yZWFkbChPTUFQNDRYWF9QUkNNX01QVV9SRUdBRERSKGluc3QsIHJlZykpOworfQorCit2b2lkIG9tYXA0X3ByY21fbXB1X3dyaXRlX2luc3RfcmVnKHUzMiB2YWwsIHMxNiBpbnN0LCB1MTYgcmVnKQoreworCV9fcmF3X3dyaXRlbCh2YWwsIE9NQVA0NFhYX1BSQ01fTVBVX1JFR0FERFIoaW5zdCwgcmVnKSk7Cit9CisKK3UzMiBvbWFwNF9wcmNtX21wdV9ybXdfaW5zdF9yZWdfYml0cyh1MzIgbWFzaywgdTMyIGJpdHMsIHMxNiBpbnN0LCBzMTYgcmVnKQoreworCXUzMiB2OworCisJdiA9IG9tYXA0X3ByY21fbXB1X3JlYWRfaW5zdF9yZWcoaW5zdCwgcmVnKTsKKwl2ICY9IH5tYXNrOworCXYgfD0gYml0czsKKwlvbWFwNF9wcmNtX21wdV93cml0ZV9pbnN0X3JlZyh2LCBpbnN0LCByZWcpOworCisJcmV0dXJuIHY7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3ByY21fbXB1NDR4eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcmNtX21wdTQ0eHguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjlhNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcmNtX21wdTQ0eHguaApAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqIE9NQVA0NHh4IFBSQ00gTVBVIGluc3RhbmNlIG9mZnNldCBtYWNyb3MKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIFBhdWwgV2FsbXNsZXkgKHBhdWxAcHdzYW4uY29tKQorICogUmFqZW5kcmEgTmF5YWsgKHJuYXlha0B0aS5jb20pCisgKiBCZW5vaXQgQ291c3NvbiAoYi1jb3Vzc29uQHRpLmNvbSkKKyAqCisgKiBUaGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0aGUgT01BUCBoYXJkd2FyZSBkYXRhYmFzZXMuCisgKiBXZSByZXNwZWN0ZnVsbHkgYXNrIHRoYXQgYW55IG1vZGlmaWNhdGlvbnMgdG8gdGhpcyBmaWxlIGJlIGNvb3JkaW5hdGVkCisgKiB3aXRoIHRoZSBwdWJsaWMgbGludXgtb21hcEB2Z2VyLmtlcm5lbC5vcmcgbWFpbGluZyBsaXN0IGFuZCB0aGUKKyAqIGF1dGhvcnMgYWJvdmUgdG8gZW5zdXJlIHRoYXQgdGhlIGF1dG9nZW5lcmF0aW9uIHNjcmlwdHMgYXJlIGtlcHQKKyAqIHVwLXRvLWRhdGUgd2l0aCB0aGUgZmlsZSBjb250ZW50cy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFhYWCBUaGlzIGZpbGUgbmVlZHMgdG8gYmUgdXBkYXRlZCB0byBhbGlnbiBvbiBvbmUgb2YgIk9NQVA0IiwgIk9NQVA0NFhYIiwKKyAqICAgICBvciAiT01BUDQ0MzAiLgorICovCisKKyNpZm5kZWYgX19BUkNIX0FSTV9NQUNIX09NQVAyX1BSQ01fTVBVNDRYWF9ICisjZGVmaW5lIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9QUkNNX01QVTQ0WFhfSAorCisjZGVmaW5lIE9NQVA0NDMwX1BSQ01fTVBVX0JBU0UJCQkweDQ4MjQzMDAwCisKKyNkZWZpbmUgT01BUDQ0WFhfUFJDTV9NUFVfUkVHQUREUihpbnN0LCByZWcpCQkJCVwKKwlPTUFQMl9MNF9JT19BRERSRVNTKE9NQVA0NDMwX1BSQ01fTVBVX0JBU0UgKyAoaW5zdCkgKyAocmVnKSkKKworLyogUFJDTV9NUFUgaW5zdGFuY2VzICovCisKKyNkZWZpbmUgT01BUDQ0MzBfUFJDTV9NUFVfT0NQX1NPQ0tFVF9QUkNNX0lOU1QJMHgwMDAwCisjZGVmaW5lIE9NQVA0NDMwX1BSQ01fTVBVX0RFVklDRV9QUk1fSU5TVAkweDAyMDAKKyNkZWZpbmUgT01BUDQ0MzBfUFJDTV9NUFVfQ1BVMF9JTlNUCQkweDA0MDAKKyNkZWZpbmUgT01BUDQ0MzBfUFJDTV9NUFVfQ1BVMV9JTlNUCQkweDA4MDAKKworLyogUFJDTV9NUFUgY2xvY2tkb21haW4gcmVnaXN0ZXIgb2Zmc2V0cyAoZnJvbSBpbnN0YW5jZSBzdGFydCkgKi8KKyNkZWZpbmUgT01BUDQ0MzBfUFJDTV9NUFVfQ1BVMF9NUFVfQ0RPRkZTCTB4MDAwMAorI2RlZmluZSBPTUFQNDQzMF9QUkNNX01QVV9DUFUxX01QVV9DRE9GRlMJMHgwMDAwCisKKworLyoKKyAqIFBSQ01fTVBVCisgKgorICogVGhlIFBSQ01fTVBVIGlzIGEgbG9jYWwgUFJDTSBpbnNpZGUgdGhlIE1QVSBzdWJzeXN0ZW0uIEZvciB0aGUgUFJDTSAoZ2xvYmFsKQorICogcG9pbnQgb2YgdmlldyB0aGUgUFJDTV9NUFUgaXMgYSBzaW5nbGUgZW50aXR5LiBJdCBzaGFyZXMgdGhlIHNhbWUKKyAqIHByb2dyYW1taW5nIG1vZGVsIGFzIHRoZSBnbG9iYWwgUFJDTSBhbmQgdGh1cyBjYW4gYmUgYXNzaW1pbGF0ZSBhcyB0d28gbmV3CisgKiBNT0QgaW5zaWRlIHRoZSBQUkNNCisgKi8KKworLyogUFJDTV9NUFUuT0NQX1NPQ0tFVF9QUkNNIHJlZ2lzdGVyIG9mZnNldHMgKi8KKyNkZWZpbmUgT01BUDRfUkVWSVNJT05fUFJDTV9PRkZTRVQJCQkweDAwMDAKKyNkZWZpbmUgT01BUDQ0MzBfUkVWSVNJT05fUFJDTQkJCQlPTUFQNDRYWF9QUkNNX01QVV9SRUdBRERSKE9NQVA0NDMwX1BSQ01fTVBVX09DUF9TT0NLRVRfUFJDTV9JTlNULCAweDAwMDApCisKKy8qIFBSQ01fTVBVLkRFVklDRV9QUk0gcmVnaXN0ZXIgb2Zmc2V0cyAqLworI2RlZmluZSBPTUFQNF9QUkNNX01QVV9QUk1fUlNUU1RfT0ZGU0VUCQkJMHgwMDAwCisjZGVmaW5lIE9NQVA0NDMwX1BSQ01fTVBVX1BSTV9SU1RTVAkJCU9NQVA0NFhYX1BSQ01fTVBVX1JFR0FERFIoT01BUDQ0MzBfUFJDTV9NUFVfREVWSUNFX1BSTV9JTlNULCAweDAwMDApCisjZGVmaW5lIE9NQVA0X1BSQ01fTVBVX1BSTV9QU0NPTl9DT1VOVF9PRkZTRVQJCTB4MDAwNAorI2RlZmluZSBPTUFQNDQzMF9QUkNNX01QVV9QUk1fUFNDT05fQ09VTlQJCU9NQVA0NFhYX1BSQ01fTVBVX1JFR0FERFIoT01BUDQ0MzBfUFJDTV9NUFVfREVWSUNFX1BSTV9JTlNULCAweDAwMDQpCisKKy8qIFBSQ01fTVBVLkNQVTAgcmVnaXN0ZXIgb2Zmc2V0cyAqLworI2RlZmluZSBPTUFQNF9QTV9DUFUwX1BXUlNUQ1RSTF9PRkZTRVQJCQkweDAwMDAKKyNkZWZpbmUgT01BUDQ0MzBfUE1fQ1BVMF9QV1JTVENUUkwJCQlPTUFQNDRYWF9QUkNNX01QVV9SRUdBRERSKE9NQVA0NDMwX1BSQ01fTVBVX0NQVTBfSU5TVCwgMHgwMDAwKQorI2RlZmluZSBPTUFQNF9QTV9DUFUwX1BXUlNUU1RfT0ZGU0VUCQkJMHgwMDA0CisjZGVmaW5lIE9NQVA0NDMwX1BNX0NQVTBfUFdSU1RTVAkJCU9NQVA0NFhYX1BSQ01fTVBVX1JFR0FERFIoT01BUDQ0MzBfUFJDTV9NUFVfQ1BVMF9JTlNULCAweDAwMDQpCisjZGVmaW5lIE9NQVA0X1JNX0NQVTBfQ1BVMF9DT05URVhUX09GRlNFVAkJMHgwMDA4CisjZGVmaW5lIE9NQVA0NDMwX1JNX0NQVTBfQ1BVMF9DT05URVhUCQkJT01BUDQ0WFhfUFJDTV9NUFVfUkVHQUREUihPTUFQNDQzMF9QUkNNX01QVV9DUFUwX0lOU1QsIDB4MDAwOCkKKyNkZWZpbmUgT01BUDRfUk1fQ1BVMF9DUFUwX1JTVENUUkxfT0ZGU0VUCQkweDAwMGMKKyNkZWZpbmUgT01BUDQ0MzBfUk1fQ1BVMF9DUFUwX1JTVENUUkwJCQlPTUFQNDRYWF9QUkNNX01QVV9SRUdBRERSKE9NQVA0NDMwX1BSQ01fTVBVX0NQVTBfSU5TVCwgMHgwMDBjKQorI2RlZmluZSBPTUFQNF9STV9DUFUwX0NQVTBfUlNUU1RfT0ZGU0VUCQkJMHgwMDEwCisjZGVmaW5lIE9NQVA0NDMwX1JNX0NQVTBfQ1BVMF9SU1RTVAkJCU9NQVA0NFhYX1BSQ01fTVBVX1JFR0FERFIoT01BUDQ0MzBfUFJDTV9NUFVfQ1BVMF9JTlNULCAweDAwMTApCisjZGVmaW5lIE9NQVA0X0NNX0NQVTBfQ1BVMF9DTEtDVFJMX09GRlNFVAkJMHgwMDE0CisjZGVmaW5lIE9NQVA0NDMwX0NNX0NQVTBfQ1BVMF9DTEtDVFJMCQkJT01BUDQ0WFhfUFJDTV9NUFVfUkVHQUREUihPTUFQNDQzMF9QUkNNX01QVV9DUFUwX0lOU1QsIDB4MDAxNCkKKyNkZWZpbmUgT01BUDRfQ01fQ1BVMF9DTEtTVENUUkxfT0ZGU0VUCQkJMHgwMDE4CisjZGVmaW5lIE9NQVA0NDMwX0NNX0NQVTBfQ0xLU1RDVFJMCQkJT01BUDQ0WFhfUFJDTV9NUFVfUkVHQUREUihPTUFQNDQzMF9QUkNNX01QVV9DUFUwX0lOU1QsIDB4MDAxOCkKKworLyogUFJDTV9NUFUuQ1BVMSByZWdpc3RlciBvZmZzZXRzICovCisjZGVmaW5lIE9NQVA0X1BNX0NQVTFfUFdSU1RDVFJMX09GRlNFVAkJCTB4MDAwMAorI2RlZmluZSBPTUFQNDQzMF9QTV9DUFUxX1BXUlNUQ1RSTAkJCU9NQVA0NFhYX1BSQ01fTVBVX1JFR0FERFIoT01BUDQ0MzBfUFJDTV9NUFVfQ1BVMV9JTlNULCAweDAwMDApCisjZGVmaW5lIE9NQVA0X1BNX0NQVTFfUFdSU1RTVF9PRkZTRVQJCQkweDAwMDQKKyNkZWZpbmUgT01BUDQ0MzBfUE1fQ1BVMV9QV1JTVFNUCQkJT01BUDQ0WFhfUFJDTV9NUFVfUkVHQUREUihPTUFQNDQzMF9QUkNNX01QVV9DUFUxX0lOU1QsIDB4MDAwNCkKKyNkZWZpbmUgT01BUDRfUk1fQ1BVMV9DUFUxX0NPTlRFWFRfT0ZGU0VUCQkweDAwMDgKKyNkZWZpbmUgT01BUDQ0MzBfUk1fQ1BVMV9DUFUxX0NPTlRFWFQJCQlPTUFQNDRYWF9QUkNNX01QVV9SRUdBRERSKE9NQVA0NDMwX1BSQ01fTVBVX0NQVTFfSU5TVCwgMHgwMDA4KQorI2RlZmluZSBPTUFQNF9STV9DUFUxX0NQVTFfUlNUQ1RSTF9PRkZTRVQJCTB4MDAwYworI2RlZmluZSBPTUFQNDQzMF9STV9DUFUxX0NQVTFfUlNUQ1RSTAkJCU9NQVA0NFhYX1BSQ01fTVBVX1JFR0FERFIoT01BUDQ0MzBfUFJDTV9NUFVfQ1BVMV9JTlNULCAweDAwMGMpCisjZGVmaW5lIE9NQVA0X1JNX0NQVTFfQ1BVMV9SU1RTVF9PRkZTRVQJCQkweDAwMTAKKyNkZWZpbmUgT01BUDQ0MzBfUk1fQ1BVMV9DUFUxX1JTVFNUCQkJT01BUDQ0WFhfUFJDTV9NUFVfUkVHQUREUihPTUFQNDQzMF9QUkNNX01QVV9DUFUxX0lOU1QsIDB4MDAxMCkKKyNkZWZpbmUgT01BUDRfQ01fQ1BVMV9DUFUxX0NMS0NUUkxfT0ZGU0VUCQkweDAwMTQKKyNkZWZpbmUgT01BUDQ0MzBfQ01fQ1BVMV9DUFUxX0NMS0NUUkwJCQlPTUFQNDRYWF9QUkNNX01QVV9SRUdBRERSKE9NQVA0NDMwX1BSQ01fTVBVX0NQVTFfSU5TVCwgMHgwMDE0KQorI2RlZmluZSBPTUFQNF9DTV9DUFUxX0NMS1NUQ1RSTF9PRkZTRVQJCQkweDAwMTgKKyNkZWZpbmUgT01BUDQ0MzBfQ01fQ1BVMV9DTEtTVENUUkwJCQlPTUFQNDRYWF9QUkNNX01QVV9SRUdBRERSKE9NQVA0NDMwX1BSQ01fTVBVX0NQVTFfSU5TVCwgMHgwMDE4KQorCisvKiBGdW5jdGlvbiBwcm90b3R5cGVzICovCisjIGlmbmRlZiBfX0FTU0VNQkxFUl9fCitleHRlcm4gdTMyIG9tYXA0X3ByY21fbXB1X3JlYWRfaW5zdF9yZWcoczE2IGluc3QsIHUxNiBpZHgpOworZXh0ZXJuIHZvaWQgb21hcDRfcHJjbV9tcHVfd3JpdGVfaW5zdF9yZWcodTMyIHZhbCwgczE2IGluc3QsIHUxNiBpZHgpOworZXh0ZXJuIHUzMiBvbWFwNF9wcmNtX21wdV9ybXdfaW5zdF9yZWdfYml0cyh1MzIgbWFzaywgdTMyIGJpdHMsIHMxNiBpbnN0LAorCQkJCQkgICAgczE2IGlkeCk7CisjIGVuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0tcmVnYml0cy0yNHh4LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BybS1yZWdiaXRzLTI0eHguaAppbmRleCAwYjE4OGZmLi42YWM5NjYxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BybS1yZWdiaXRzLTI0eHguaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BybS1yZWdiaXRzLTI0eHguaApAQCAtMTQsNyArMTQsNyBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAotI2luY2x1ZGUgInBybS5oIgorI2luY2x1ZGUgInBybTJ4eHhfM3h4eC5oIgogCiAvKiBCaXRzIHNoYXJlZCBiZXR3ZWVuIHJlZ2lzdGVycyAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BybS1yZWdiaXRzLTM0eHguaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtLXJlZ2JpdHMtMzR4eC5oCmluZGV4IDllNjNjYjcuLjY0YzA4N2EgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtLXJlZ2JpdHMtMzR4eC5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtLXJlZ2JpdHMtMzR4eC5oCkBAIC0xLDYgKzEsMyBAQAotI2lmbmRlZiBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfUFJNX1JFR0JJVFNfMzRYWF9ICi0jZGVmaW5lIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9QUk1fUkVHQklUU18zNFhYX0gKLQogLyoKICAqIE9NQVAzNDMwIFBvd2VyL1Jlc2V0IE1hbmFnZW1lbnQgcmVnaXN0ZXIgYml0cwogICoKQEAgLTEzLDggKzEwLDExIEBACiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KKyNpZm5kZWYgX19BUkNIX0FSTV9NQUNIX09NQVAyX1BSTV9SRUdCSVRTXzM0WFhfSAorI2RlZmluZSBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfUFJNX1JFR0JJVFNfMzRYWF9ICiAKLSNpbmNsdWRlICJwcm0uaCIKKworI2luY2x1ZGUgInBybTJ4eHhfM3h4eC5oIgogCiAvKiBTaGFyZWQgcmVnaXN0ZXIgYml0cyAqLwogCkBAIC0xMDEsOCArMTAxLDExIEBACiAjZGVmaW5lIE9NQVAzNDMwX0dSUFNFTF9NQ1NQSTNfTUFTSwkJCSgxIDw8IDIwKQogI2RlZmluZSBPTUFQMzQzMF9HUlBTRUxfTUNTUEkyX01BU0sJCQkoMSA8PCAxOSkKICNkZWZpbmUgT01BUDM0MzBfR1JQU0VMX01DU1BJMV9NQVNLCQkJKDEgPDwgMTgpCisjZGVmaW5lIE9NQVAzNDMwX0dSUFNFTF9JMkMzX1NISUZUCQkJMTcKICNkZWZpbmUgT01BUDM0MzBfR1JQU0VMX0kyQzNfTUFTSwkJCSgxIDw8IDE3KQorI2RlZmluZSBPTUFQMzQzMF9HUlBTRUxfSTJDMl9TSElGVAkJCTE2CiAjZGVmaW5lIE9NQVAzNDMwX0dSUFNFTF9JMkMyX01BU0sJCQkoMSA8PCAxNikKKyNkZWZpbmUgT01BUDM0MzBfR1JQU0VMX0kyQzFfU0hJRlQJCQkxNQogI2RlZmluZSBPTUFQMzQzMF9HUlBTRUxfSTJDMV9NQVNLCQkJKDEgPDwgMTUpCiAjZGVmaW5lIE9NQVAzNDMwX0dSUFNFTF9VQVJUMl9NQVNLCQkJKDEgPDwgMTQpCiAjZGVmaW5lIE9NQVAzNDMwX0dSUFNFTF9VQVJUMV9NQVNLCQkJKDEgPDwgMTMpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BybS1yZWdiaXRzLTQ0eHguaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtLXJlZ2JpdHMtNDR4eC5oCmluZGV4IDI1YjE5YjYuLjZkMjc3NmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtLXJlZ2JpdHMtNDR4eC5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtLXJlZ2JpdHMtNDR4eC5oCkBAIC0yMiw4ICsyMiw2IEBACiAjaWZuZGVmIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9QUk1fUkVHQklUU180NFhYX0gKICNkZWZpbmUgX19BUkNIX0FSTV9NQUNIX09NQVAyX1BSTV9SRUdCSVRTXzQ0WFhfSAogCi0jaW5jbHVkZSAicHJtLmgiCi0KIAogLyoKICAqIFVzZWQgYnkgUFJNX0xET19TUkFNX0NPUkVfU0VUVVAsIFBSTV9MRE9fU1JBTV9JVkFfU0VUVVAsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BybS5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0uaAppbmRleCA3YmUwNDBiLi4zOWQ1NjIxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BybS5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtLmgKQEAgLTEsMzIxICsxLDIwIEBACi0jaWZuZGVmIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9QUk1fSAotI2RlZmluZSBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfUFJNX0gKLQogLyoKLSAqIE9NQVAyLzMgUG93ZXIvUmVzZXQgTWFuYWdlbWVudCAoUFJNKSByZWdpc3RlciBkZWZpbml0aW9ucworICogT01BUDIvMy80IFBvd2VyL1Jlc2V0IE1hbmFnZW1lbnQgKFBSTSkgYml0ZmllbGQgZGVmaW5pdGlvbnMKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgogICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uCiAgKgotICogV3JpdHRlbiBieSBQYXVsIFdhbG1zbGV5CisgKiBQYXVsIFdhbG1zbGV5CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLworI2lmbmRlZiBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfUFJNX0gKKyNkZWZpbmUgX19BUkNIX0FSTV9NQUNIX09NQVAyX1BSTV9ICiAKICNpbmNsdWRlICJwcmNtLWNvbW1vbi5oIgogCi0jZGVmaW5lIE9NQVAyNDIwX1BSTV9SRUdBRERSKG1vZHVsZSwgcmVnKQkJCQlcCi0JCU9NQVAyX0w0X0lPX0FERFJFU1MoT01BUDI0MjBfUFJNX0JBU0UgKyAobW9kdWxlKSArIChyZWcpKQotI2RlZmluZSBPTUFQMjQzMF9QUk1fUkVHQUREUihtb2R1bGUsIHJlZykJCQkJXAotCQlPTUFQMl9MNF9JT19BRERSRVNTKE9NQVAyNDMwX1BSTV9CQVNFICsgKG1vZHVsZSkgKyAocmVnKSkKLSNkZWZpbmUgT01BUDM0WFhfUFJNX1JFR0FERFIobW9kdWxlLCByZWcpCQkJCVwKLQkJT01BUDJfTDRfSU9fQUREUkVTUyhPTUFQMzQzMF9QUk1fQkFTRSArIChtb2R1bGUpICsgKHJlZykpCi0jZGVmaW5lIE9NQVA0NFhYX1BSTV9SRUdBRERSKG1vZHVsZSwgcmVnKQkJCQlcCi0JCU9NQVAyX0w0X0lPX0FERFJFU1MoT01BUDQ0MzBfUFJNX0JBU0UgKyAobW9kdWxlKSArIChyZWcpKQotI2RlZmluZSBPTUFQNDRYWF9QUkNNX01QVV9SRUdBRERSKG1vZHVsZSwgcmVnKQkJCQlcCi0JCU9NQVAyX0w0X0lPX0FERFJFU1MoT01BUDQ0MzBfUFJDTV9NUFVfQkFTRSArIChtb2R1bGUpICsgKHJlZykpCi0KLSNpbmNsdWRlICJwcm00NHh4LmgiCi0KLS8qCi0gKiBBcmNoaXRlY3R1cmUtc3BlY2lmaWMgZ2xvYmFsIFBSTSByZWdpc3RlcnMKLSAqIFVzZSBfX3Jhd197cmVhZCx3cml0ZX1sKCkgd2l0aCB0aGVzZSByZWdpc3RlcnMuCi0gKgotICogV2l0aCBhIGZldyBleGNlcHRpb25zLCB0aGVzZSBhcmUgdGhlIHJlZ2lzdGVyIG5hbWVzIGJlZ2lubmluZyB3aXRoCi0gKiBQUkNNXyogb24gMjR4eCwgYW5kIFBSTV8qIG9uIDM0eHguICAoVGhlIGV4Y2VwdGlvbnMgYXJlIHRoZQotICogSVJRU1RBVFVTIGFuZCBJUlFFTkFCTEUgYml0cy4pCi0gKgotICovCi0KLSNkZWZpbmUgT01BUDJfUFJDTV9SRVZJU0lPTl9PRkZTRVQJMHgwMDAwCi0jZGVmaW5lIE9NQVAyNDIwX1BSQ01fUkVWSVNJT04JCU9NQVAyNDIwX1BSTV9SRUdBRERSKE9DUF9NT0QsIDB4MDAwMCkKLSNkZWZpbmUgT01BUDJfUFJDTV9TWVNDT05GSUdfT0ZGU0VUCTB4MDAxMAotI2RlZmluZSBPTUFQMjQyMF9QUkNNX1NZU0NPTkZJRwkJT01BUDI0MjBfUFJNX1JFR0FERFIoT0NQX01PRCwgMHgwMDEwKQotCi0jZGVmaW5lIE9NQVAyX1BSQ01fSVJRU1RBVFVTX01QVV9PRkZTRVQJMHgwMDE4Ci0jZGVmaW5lIE9NQVAyNDIwX1BSQ01fSVJRU1RBVFVTX01QVQlPTUFQMjQyMF9QUk1fUkVHQUREUihPQ1BfTU9ELCAweDAwMTgpCi0jZGVmaW5lIE9NQVAyX1BSQ01fSVJRRU5BQkxFX01QVV9PRkZTRVQJMHgwMDFjCi0jZGVmaW5lIE9NQVAyNDIwX1BSQ01fSVJRRU5BQkxFX01QVQlPTUFQMjQyMF9QUk1fUkVHQUREUihPQ1BfTU9ELCAweDAwMWMpCi0KLSNkZWZpbmUgT01BUDJfUFJDTV9WT0xUQ1RSTF9PRkZTRVQJMHgwMDUwCi0jZGVmaW5lIE9NQVAyNDIwX1BSQ01fVk9MVENUUkwJCU9NQVAyNDIwX1BSTV9SRUdBRERSKE9DUF9NT0QsIDB4MDA1MCkKLSNkZWZpbmUgT01BUDJfUFJDTV9WT0xUU1RfT0ZGU0VUCTB4MDA1NAotI2RlZmluZSBPTUFQMjQyMF9QUkNNX1ZPTFRTVAkJT01BUDI0MjBfUFJNX1JFR0FERFIoT0NQX01PRCwgMHgwMDU0KQotI2RlZmluZSBPTUFQMl9QUkNNX0NMS1NSQ19DVFJMX09GRlNFVAkweDAwNjAKLSNkZWZpbmUgT01BUDI0MjBfUFJDTV9DTEtTUkNfQ1RSTAlPTUFQMjQyMF9QUk1fUkVHQUREUihPQ1BfTU9ELCAweDAwNjApCi0jZGVmaW5lIE9NQVAyX1BSQ01fQ0xLT1VUX0NUUkxfT0ZGU0VUCTB4MDA3MAotI2RlZmluZSBPTUFQMjQyMF9QUkNNX0NMS09VVF9DVFJMCU9NQVAyNDIwX1BSTV9SRUdBRERSKE9DUF9NT0QsIDB4MDA3MCkKLSNkZWZpbmUgT01BUDJfUFJDTV9DTEtFTVVMX0NUUkxfT0ZGU0VUCTB4MDA3OAotI2RlZmluZSBPTUFQMjQyMF9QUkNNX0NMS0VNVUxfQ1RSTAlPTUFQMjQyMF9QUk1fUkVHQUREUihPQ1BfTU9ELCAweDAwNzgpCi0jZGVmaW5lIE9NQVAyX1BSQ01fQ0xLQ0ZHX0NUUkxfT0ZGU0VUCTB4MDA4MAotI2RlZmluZSBPTUFQMjQyMF9QUkNNX0NMS0NGR19DVFJMCU9NQVAyNDIwX1BSTV9SRUdBRERSKE9DUF9NT0QsIDB4MDA4MCkKLSNkZWZpbmUgT01BUDJfUFJDTV9DTEtDRkdfU1RBVFVTX09GRlNFVAkweDAwODQKLSNkZWZpbmUgT01BUDI0MjBfUFJDTV9DTEtDRkdfU1RBVFVTCU9NQVAyNDIwX1BSTV9SRUdBRERSKE9DUF9NT0QsIDB4MDA4NCkKLSNkZWZpbmUgT01BUDJfUFJDTV9WT0xUU0VUVVBfT0ZGU0VUCTB4MDA5MAotI2RlZmluZSBPTUFQMjQyMF9QUkNNX1ZPTFRTRVRVUAkJT01BUDI0MjBfUFJNX1JFR0FERFIoT0NQX01PRCwgMHgwMDkwKQotI2RlZmluZSBPTUFQMl9QUkNNX0NMS1NTRVRVUF9PRkZTRVQJMHgwMDk0Ci0jZGVmaW5lIE9NQVAyNDIwX1BSQ01fQ0xLU1NFVFVQCQlPTUFQMjQyMF9QUk1fUkVHQUREUihPQ1BfTU9ELCAweDAwOTQpCi0jZGVmaW5lIE9NQVAyX1BSQ01fUE9MQ1RSTF9PRkZTRVQJMHgwMDk4Ci0jZGVmaW5lIE9NQVAyNDIwX1BSQ01fUE9MQ1RSTAkJT01BUDI0MjBfUFJNX1JFR0FERFIoT0NQX01PRCwgMHgwMDk4KQotCi0jZGVmaW5lIE9NQVAyNDMwX1BSQ01fUkVWSVNJT04JCU9NQVAyNDMwX1BSTV9SRUdBRERSKE9DUF9NT0QsIDB4MDAwMCkKLSNkZWZpbmUgT01BUDI0MzBfUFJDTV9TWVNDT05GSUcJCU9NQVAyNDMwX1BSTV9SRUdBRERSKE9DUF9NT0QsIDB4MDAxMCkKLQotI2RlZmluZSBPTUFQMjQzMF9QUkNNX0lSUVNUQVRVU19NUFUJT01BUDI0MzBfUFJNX1JFR0FERFIoT0NQX01PRCwgMHgwMDE4KQotI2RlZmluZSBPTUFQMjQzMF9QUkNNX0lSUUVOQUJMRV9NUFUJT01BUDI0MzBfUFJNX1JFR0FERFIoT0NQX01PRCwgMHgwMDFjKQotCi0jZGVmaW5lIE9NQVAyNDMwX1BSQ01fVk9MVENUUkwJCU9NQVAyNDMwX1BSTV9SRUdBRERSKE9DUF9NT0QsIDB4MDA1MCkKLSNkZWZpbmUgT01BUDI0MzBfUFJDTV9WT0xUU1QJCU9NQVAyNDMwX1BSTV9SRUdBRERSKE9DUF9NT0QsIDB4MDA1NCkKLSNkZWZpbmUgT01BUDI0MzBfUFJDTV9DTEtTUkNfQ1RSTAlPTUFQMjQzMF9QUk1fUkVHQUREUihPQ1BfTU9ELCAweDAwNjApCi0jZGVmaW5lIE9NQVAyNDMwX1BSQ01fQ0xLT1VUX0NUUkwJT01BUDI0MzBfUFJNX1JFR0FERFIoT0NQX01PRCwgMHgwMDcwKQotI2RlZmluZSBPTUFQMjQzMF9QUkNNX0NMS0VNVUxfQ1RSTAlPTUFQMjQzMF9QUk1fUkVHQUREUihPQ1BfTU9ELCAweDAwNzgpCi0jZGVmaW5lIE9NQVAyNDMwX1BSQ01fQ0xLQ0ZHX0NUUkwJT01BUDI0MzBfUFJNX1JFR0FERFIoT0NQX01PRCwgMHgwMDgwKQotI2RlZmluZSBPTUFQMjQzMF9QUkNNX0NMS0NGR19TVEFUVVMJT01BUDI0MzBfUFJNX1JFR0FERFIoT0NQX01PRCwgMHgwMDg0KQotI2RlZmluZSBPTUFQMjQzMF9QUkNNX1ZPTFRTRVRVUAkJT01BUDI0MzBfUFJNX1JFR0FERFIoT0NQX01PRCwgMHgwMDkwKQotI2RlZmluZSBPTUFQMjQzMF9QUkNNX0NMS1NTRVRVUAkJT01BUDI0MzBfUFJNX1JFR0FERFIoT0NQX01PRCwgMHgwMDk0KQotI2RlZmluZSBPTUFQMjQzMF9QUkNNX1BPTENUUkwJCU9NQVAyNDMwX1BSTV9SRUdBRERSKE9DUF9NT0QsIDB4MDA5OCkKLQotI2RlZmluZSBPTUFQM19QUk1fUkVWSVNJT05fT0ZGU0VUCTB4MDAwNAotI2RlZmluZSBPTUFQMzQzMF9QUk1fUkVWSVNJT04JCU9NQVAzNFhYX1BSTV9SRUdBRERSKE9DUF9NT0QsIDB4MDAwNCkKLSNkZWZpbmUgT01BUDNfUFJNX1NZU0NPTkZJR19PRkZTRVQJMHgwMDE0Ci0jZGVmaW5lIE9NQVAzNDMwX1BSTV9TWVNDT05GSUcJCU9NQVAzNFhYX1BSTV9SRUdBRERSKE9DUF9NT0QsIDB4MDAxNCkKLQotI2RlZmluZSBPTUFQM19QUk1fSVJRU1RBVFVTX01QVV9PRkZTRVQJMHgwMDE4Ci0jZGVmaW5lIE9NQVAzNDMwX1BSTV9JUlFTVEFUVVNfTVBVCU9NQVAzNFhYX1BSTV9SRUdBRERSKE9DUF9NT0QsIDB4MDAxOCkKLSNkZWZpbmUgT01BUDNfUFJNX0lSUUVOQUJMRV9NUFVfT0ZGU0VUCTB4MDAxYwotI2RlZmluZSBPTUFQMzQzMF9QUk1fSVJRRU5BQkxFX01QVQlPTUFQMzRYWF9QUk1fUkVHQUREUihPQ1BfTU9ELCAweDAwMWMpCi0KLQotI2RlZmluZSBPTUFQM19QUk1fVkNfU01QU19TQV9PRkZTRVQJMHgwMDIwCi0jZGVmaW5lIE9NQVAzNDMwX1BSTV9WQ19TTVBTX1NBCQlPTUFQMzRYWF9QUk1fUkVHQUREUihPTUFQMzQzMF9HUl9NT0QsIDB4MDAyMCkKLSNkZWZpbmUgT01BUDNfUFJNX1ZDX1NNUFNfVk9MX1JBX09GRlNFVAkweDAwMjQKLSNkZWZpbmUgT01BUDM0MzBfUFJNX1ZDX1NNUFNfVk9MX1JBCU9NQVAzNFhYX1BSTV9SRUdBRERSKE9NQVAzNDMwX0dSX01PRCwgMHgwMDI0KQotI2RlZmluZSBPTUFQM19QUk1fVkNfU01QU19DTURfUkFfT0ZGU0VUCTB4MDAyOAotI2RlZmluZSBPTUFQMzQzMF9QUk1fVkNfU01QU19DTURfUkEJT01BUDM0WFhfUFJNX1JFR0FERFIoT01BUDM0MzBfR1JfTU9ELCAweDAwMjgpCi0jZGVmaW5lIE9NQVAzX1BSTV9WQ19DTURfVkFMXzBfT0ZGU0VUCTB4MDAyYwotI2RlZmluZSBPTUFQMzQzMF9QUk1fVkNfQ01EX1ZBTF8wCU9NQVAzNFhYX1BSTV9SRUdBRERSKE9NQVAzNDMwX0dSX01PRCwgMHgwMDJjKQotI2RlZmluZSBPTUFQM19QUk1fVkNfQ01EX1ZBTF8xX09GRlNFVAkweDAwMzAKLSNkZWZpbmUgT01BUDM0MzBfUFJNX1ZDX0NNRF9WQUxfMQlPTUFQMzRYWF9QUk1fUkVHQUREUihPTUFQMzQzMF9HUl9NT0QsIDB4MDAzMCkKLSNkZWZpbmUgT01BUDNfUFJNX1ZDX0NIX0NPTkZfT0ZGU0VUCTB4MDAzNAotI2RlZmluZSBPTUFQMzQzMF9QUk1fVkNfQ0hfQ09ORgkJT01BUDM0WFhfUFJNX1JFR0FERFIoT01BUDM0MzBfR1JfTU9ELCAweDAwMzQpCi0jZGVmaW5lIE9NQVAzX1BSTV9WQ19JMkNfQ0ZHX09GRlNFVAkweDAwMzgKLSNkZWZpbmUgT01BUDM0MzBfUFJNX1ZDX0kyQ19DRkcJCU9NQVAzNFhYX1BSTV9SRUdBRERSKE9NQVAzNDMwX0dSX01PRCwgMHgwMDM4KQotI2RlZmluZSBPTUFQM19QUk1fVkNfQllQQVNTX1ZBTF9PRkZTRVQJMHgwMDNjCi0jZGVmaW5lIE9NQVAzNDMwX1BSTV9WQ19CWVBBU1NfVkFMCU9NQVAzNFhYX1BSTV9SRUdBRERSKE9NQVAzNDMwX0dSX01PRCwgMHgwMDNjKQotI2RlZmluZSBPTUFQM19QUk1fUlNUQ1RSTF9PRkZTRVQJMHgwMDUwCi0jZGVmaW5lIE9NQVAzNDMwX1BSTV9SU1RDVFJMCQlPTUFQMzRYWF9QUk1fUkVHQUREUihPTUFQMzQzMF9HUl9NT0QsIDB4MDA1MCkKLSNkZWZpbmUgT01BUDNfUFJNX1JTVFRJTUVfT0ZGU0VUCTB4MDA1NAotI2RlZmluZSBPTUFQMzQzMF9QUk1fUlNUVElNRQkJT01BUDM0WFhfUFJNX1JFR0FERFIoT01BUDM0MzBfR1JfTU9ELCAweDAwNTQpCi0jZGVmaW5lIE9NQVAzX1BSTV9SU1RTVF9PRkZTRVQJMHgwMDU4Ci0jZGVmaW5lIE9NQVAzNDMwX1BSTV9SU1RTVAkJT01BUDM0WFhfUFJNX1JFR0FERFIoT01BUDM0MzBfR1JfTU9ELCAweDAwNTgpCi0jZGVmaW5lIE9NQVAzX1BSTV9WT0xUQ1RSTF9PRkZTRVQJMHgwMDYwCi0jZGVmaW5lIE9NQVAzNDMwX1BSTV9WT0xUQ1RSTAkJT01BUDM0WFhfUFJNX1JFR0FERFIoT01BUDM0MzBfR1JfTU9ELCAweDAwNjApCi0jZGVmaW5lIE9NQVAzX1BSTV9TUkFNX1BDSEFSR0VfT0ZGU0VUCTB4MDA2NAotI2RlZmluZSBPTUFQMzQzMF9QUk1fU1JBTV9QQ0hBUkdFCU9NQVAzNFhYX1BSTV9SRUdBRERSKE9NQVAzNDMwX0dSX01PRCwgMHgwMDY0KQotI2RlZmluZSBPTUFQM19QUk1fQ0xLU1JDX0NUUkxfT0ZGU0VUCTB4MDA3MAotI2RlZmluZSBPTUFQMzQzMF9QUk1fQ0xLU1JDX0NUUkwJT01BUDM0WFhfUFJNX1JFR0FERFIoT01BUDM0MzBfR1JfTU9ELCAweDAwNzApCi0jZGVmaW5lIE9NQVAzX1BSTV9WT0xUU0VUVVAxX09GRlNFVAkweDAwOTAKLSNkZWZpbmUgT01BUDM0MzBfUFJNX1ZPTFRTRVRVUDEJCU9NQVAzNFhYX1BSTV9SRUdBRERSKE9NQVAzNDMwX0dSX01PRCwgMHgwMDkwKQotI2RlZmluZSBPTUFQM19QUk1fVk9MVE9GRlNFVF9PRkZTRVQJMHgwMDk0Ci0jZGVmaW5lIE9NQVAzNDMwX1BSTV9WT0xUT0ZGU0VUCQlPTUFQMzRYWF9QUk1fUkVHQUREUihPTUFQMzQzMF9HUl9NT0QsIDB4MDA5NCkKLSNkZWZpbmUgT01BUDNfUFJNX0NMS1NFVFVQX09GRlNFVAkweDAwOTgKLSNkZWZpbmUgT01BUDM0MzBfUFJNX0NMS1NFVFVQCQlPTUFQMzRYWF9QUk1fUkVHQUREUihPTUFQMzQzMF9HUl9NT0QsIDB4MDA5OCkKLSNkZWZpbmUgT01BUDNfUFJNX1BPTENUUkxfT0ZGU0VUCTB4MDA5YwotI2RlZmluZSBPTUFQMzQzMF9QUk1fUE9MQ1RSTAkJT01BUDM0WFhfUFJNX1JFR0FERFIoT01BUDM0MzBfR1JfTU9ELCAweDAwOWMpCi0jZGVmaW5lIE9NQVAzX1BSTV9WT0xUU0VUVVAyX09GRlNFVAkweDAwYTAKLSNkZWZpbmUgT01BUDM0MzBfUFJNX1ZPTFRTRVRVUDIJCU9NQVAzNFhYX1BSTV9SRUdBRERSKE9NQVAzNDMwX0dSX01PRCwgMHgwMGEwKQotI2RlZmluZSBPTUFQM19QUk1fVlAxX0NPTkZJR19PRkZTRVQJMHgwMGIwCi0jZGVmaW5lIE9NQVAzNDMwX1BSTV9WUDFfQ09ORklHCQlPTUFQMzRYWF9QUk1fUkVHQUREUihPTUFQMzQzMF9HUl9NT0QsIDB4MDBiMCkKLSNkZWZpbmUgT01BUDNfUFJNX1ZQMV9WU1RFUE1JTl9PRkZTRVQJMHgwMGI0Ci0jZGVmaW5lIE9NQVAzNDMwX1BSTV9WUDFfVlNURVBNSU4JT01BUDM0WFhfUFJNX1JFR0FERFIoT01BUDM0MzBfR1JfTU9ELCAweDAwYjQpCi0jZGVmaW5lIE9NQVAzX1BSTV9WUDFfVlNURVBNQVhfT0ZGU0VUCTB4MDBiOAotI2RlZmluZSBPTUFQMzQzMF9QUk1fVlAxX1ZTVEVQTUFYCU9NQVAzNFhYX1BSTV9SRUdBRERSKE9NQVAzNDMwX0dSX01PRCwgMHgwMGI4KQotI2RlZmluZSBPTUFQM19QUk1fVlAxX1ZMSU1JVFRPX09GRlNFVAkweDAwYmMKLSNkZWZpbmUgT01BUDM0MzBfUFJNX1ZQMV9WTElNSVRUTwlPTUFQMzRYWF9QUk1fUkVHQUREUihPTUFQMzQzMF9HUl9NT0QsIDB4MDBiYykKLSNkZWZpbmUgT01BUDNfUFJNX1ZQMV9WT0xUQUdFX09GRlNFVAkweDAwYzAKLSNkZWZpbmUgT01BUDM0MzBfUFJNX1ZQMV9WT0xUQUdFCU9NQVAzNFhYX1BSTV9SRUdBRERSKE9NQVAzNDMwX0dSX01PRCwgMHgwMGMwKQotI2RlZmluZSBPTUFQM19QUk1fVlAxX1NUQVRVU19PRkZTRVQJMHgwMGM0Ci0jZGVmaW5lIE9NQVAzNDMwX1BSTV9WUDFfU1RBVFVTCQlPTUFQMzRYWF9QUk1fUkVHQUREUihPTUFQMzQzMF9HUl9NT0QsIDB4MDBjNCkKLSNkZWZpbmUgT01BUDNfUFJNX1ZQMl9DT05GSUdfT0ZGU0VUCTB4MDBkMAotI2RlZmluZSBPTUFQMzQzMF9QUk1fVlAyX0NPTkZJRwkJT01BUDM0WFhfUFJNX1JFR0FERFIoT01BUDM0MzBfR1JfTU9ELCAweDAwZDApCi0jZGVmaW5lIE9NQVAzX1BSTV9WUDJfVlNURVBNSU5fT0ZGU0VUCTB4MDBkNAotI2RlZmluZSBPTUFQMzQzMF9QUk1fVlAyX1ZTVEVQTUlOCU9NQVAzNFhYX1BSTV9SRUdBRERSKE9NQVAzNDMwX0dSX01PRCwgMHgwMGQ0KQotI2RlZmluZSBPTUFQM19QUk1fVlAyX1ZTVEVQTUFYX09GRlNFVAkweDAwZDgKLSNkZWZpbmUgT01BUDM0MzBfUFJNX1ZQMl9WU1RFUE1BWAlPTUFQMzRYWF9QUk1fUkVHQUREUihPTUFQMzQzMF9HUl9NT0QsIDB4MDBkOCkKLSNkZWZpbmUgT01BUDNfUFJNX1ZQMl9WTElNSVRUT19PRkZTRVQJMHgwMGRjCi0jZGVmaW5lIE9NQVAzNDMwX1BSTV9WUDJfVkxJTUlUVE8JT01BUDM0WFhfUFJNX1JFR0FERFIoT01BUDM0MzBfR1JfTU9ELCAweDAwZGMpCi0jZGVmaW5lIE9NQVAzX1BSTV9WUDJfVk9MVEFHRV9PRkZTRVQJMHgwMGUwCi0jZGVmaW5lIE9NQVAzNDMwX1BSTV9WUDJfVk9MVEFHRQlPTUFQMzRYWF9QUk1fUkVHQUREUihPTUFQMzQzMF9HUl9NT0QsIDB4MDBlMCkKLSNkZWZpbmUgT01BUDNfUFJNX1ZQMl9TVEFUVVNfT0ZGU0VUCTB4MDBlNAotI2RlZmluZSBPTUFQMzQzMF9QUk1fVlAyX1NUQVRVUwkJT01BUDM0WFhfUFJNX1JFR0FERFIoT01BUDM0MzBfR1JfTU9ELCAweDAwZTQpCi0KLSNkZWZpbmUgT01BUDNfUFJNX0NMS1NFTF9PRkZTRVQJMHgwMDQwCi0jZGVmaW5lIE9NQVAzNDMwX1BSTV9DTEtTRUwJCU9NQVAzNFhYX1BSTV9SRUdBRERSKE9NQVAzNDMwX0NDUl9NT0QsIDB4MDA0MCkKLSNkZWZpbmUgT01BUDNfUFJNX0NMS09VVF9DVFJMX09GRlNFVAkweDAwNzAKLSNkZWZpbmUgT01BUDM0MzBfUFJNX0NMS09VVF9DVFJMCU9NQVAzNFhYX1BSTV9SRUdBRERSKE9NQVAzNDMwX0NDUl9NT0QsIDB4MDA3MCkKLQotLyoKLSAqIE1vZHVsZSBzcGVjaWZpYyBQUk0gcmVnaXN0ZXJzIGZyb20gUFJNX0JBU0UgKyBkb21haW4gb2Zmc2V0Ci0gKgotICogVXNlIHBybV97cmVhZCx3cml0ZX1fbW9kX3JlZygpIHdpdGggdGhlc2UgcmVnaXN0ZXJzLgotICoKLSAqIFdpdGggYSBmZXcgZXhjZXB0aW9ucywgdGhlc2UgYXJlIHRoZSByZWdpc3RlciBuYW1lcyBiZWdpbm5pbmcgd2l0aAotICoge1BNLFJNfV8qIG9uIGJvdGggYXJjaGl0ZWN0dXJlcy4gIChUaGUgZXhjZXB0aW9ucyBhcmUgdGhlIElSUVNUQVRVUwotICogYW5kIElSUUVOQUJMRSBiaXRzLikKLSAqCi0gKi8KLQotLyogUmVnaXN0ZXJzIGFwcGVhcmluZyBvbiBib3RoIDI0eHggYW5kIDM0eHggKi8KLQotI2RlZmluZSBPTUFQMl9STV9SU1RDVFJMCQkJCTB4MDA1MAotI2RlZmluZSBPTUFQMl9STV9SU1RUSU1FCQkJCTB4MDA1NAotI2RlZmluZSBPTUFQMl9STV9SU1RTVAkJCQkJMHgwMDU4Ci0jZGVmaW5lIE9NQVAyX1BNX1BXU1RDVFJMCQkJCTB4MDBlMAotI2RlZmluZSBPTUFQMl9QTV9QV1NUU1QJCQkJCTB4MDBlNAotCi0jZGVmaW5lIFBNX1dLRU4JCQkJCQkweDAwYTAKLSNkZWZpbmUgUE1fV0tFTjEJCQkJCVBNX1dLRU4KLSNkZWZpbmUgUE1fV0tTVAkJCQkJCTB4MDBiMAotI2RlZmluZSBQTV9XS1NUMQkJCQkJUE1fV0tTVAotI2RlZmluZSBQTV9XS0RFUAkJCQkJMHgwMGM4Ci0jZGVmaW5lIFBNX0VWR0VOQ1RSTAkJCQkJMHgwMGQ0Ci0jZGVmaW5lIFBNX0VWR0VOT05USU0JCQkJCTB4MDBkOAotI2RlZmluZSBQTV9FVkdFTk9GRlRJTQkJCQkJMHgwMGRjCi0KLS8qIE9tYXAyIHNwZWNpZmljIHJlZ2lzdGVycyAqLwotI2RlZmluZSBPTUFQMjRYWF9QTV9XS0VOMgkJCQkweDAwYTQKLSNkZWZpbmUgT01BUDI0WFhfUE1fV0tTVDIJCQkJMHgwMGI0Ci0KLSNkZWZpbmUgT01BUDI0WFhfUFJDTV9JUlFTVEFUVVNfRFNQCQkJMHgwMGYwCS8qIElWQSBtb2QgKi8KLSNkZWZpbmUgT01BUDI0WFhfUFJDTV9JUlFFTkFCTEVfRFNQCQkJMHgwMGY0CS8qIElWQSBtb2QgKi8KLSNkZWZpbmUgT01BUDI0WFhfUFJDTV9JUlFTVEFUVVNfSVZBCQkJMHgwMGY4Ci0jZGVmaW5lIE9NQVAyNFhYX1BSQ01fSVJRRU5BQkxFX0lWQQkJCTB4MDBmYwotCi0vKiBPbWFwMyBzcGVjaWZpYyByZWdpc3RlcnMgKi8KLSNkZWZpbmUgT01BUDM0MzBFUzJfUE1fV0tFTjMJCQkJMHgwMGYwCi0jZGVmaW5lIE9NQVAzNDMwRVMyX1BNX1dLU1QzCQkJCTB4MDBiOAotCi0jZGVmaW5lIE9NQVAzNDMwX1BNX01QVUdSUFNFTAkJCQkweDAwYTQKLSNkZWZpbmUgT01BUDM0MzBfUE1fTVBVR1JQU0VMMQkJCQlPTUFQMzQzMF9QTV9NUFVHUlBTRUwKLSNkZWZpbmUgT01BUDM0MzBFUzJfUE1fTVBVR1JQU0VMMwkJCTB4MDBmOAotCi0jZGVmaW5lIE9NQVAzNDMwX1BNX0lWQUdSUFNFTAkJCQkweDAwYTgKLSNkZWZpbmUgT01BUDM0MzBfUE1fSVZBR1JQU0VMMQkJCQlPTUFQMzQzMF9QTV9JVkFHUlBTRUwKLSNkZWZpbmUgT01BUDM0MzBFUzJfUE1fSVZBR1JQU0VMMwkJCTB4MDBmNAotCi0jZGVmaW5lIE9NQVAzNDMwX1BNX1BSRVBXU1RTVAkJCQkweDAwZTgKLQotI2RlZmluZSBPTUFQMzQzMF9QUk1fSVJRU1RBVFVTX0lWQTIJCQkweDAwZjgKLSNkZWZpbmUgT01BUDM0MzBfUFJNX0lSUUVOQUJMRV9JVkEyCQkJMHgwMGZjCi0KLS8qIE9tYXA0IHNwZWNpZmljIHJlZ2lzdGVycyAqLwotI2RlZmluZSBPTUFQNF9STV9SU1RDVFJMCQkJCTB4MDAwMAotI2RlZmluZSBPTUFQNF9STV9SU1RUSU1FCQkJCTB4MDAwNAotI2RlZmluZSBPTUFQNF9STV9SU1RTVAkJCQkJMHgwMDA4Ci0jZGVmaW5lIE9NQVA0X1BNX1BXU1RDVFJMCQkJCTB4MDAwMAotI2RlZmluZSBPTUFQNF9QTV9QV1NUU1QJCQkJCTB4MDAwNAotCi0KLSNpZm5kZWYgX19BU1NFTUJMRVJfXwotCi0vKiBQb3dlci9yZXNldCBtYW5hZ2VtZW50IGRvbWFpbiByZWdpc3RlciBnZXQvc2V0ICovCi1leHRlcm4gdTMyIHBybV9yZWFkX21vZF9yZWcoczE2IG1vZHVsZSwgdTE2IGlkeCk7Ci1leHRlcm4gdm9pZCBwcm1fd3JpdGVfbW9kX3JlZyh1MzIgdmFsLCBzMTYgbW9kdWxlLCB1MTYgaWR4KTsKLWV4dGVybiB1MzIgcHJtX3Jtd19tb2RfcmVnX2JpdHModTMyIG1hc2ssIHUzMiBiaXRzLCBzMTYgbW9kdWxlLCBzMTYgaWR4KTsKLQotLyogUmVhZC1tb2RpZnktd3JpdGUgYml0cyBpbiBhIFBSTSByZWdpc3RlciAoYnkgZG9tYWluKSAqLwotc3RhdGljIGlubGluZSB1MzIgcHJtX3NldF9tb2RfcmVnX2JpdHModTMyIGJpdHMsIHMxNiBtb2R1bGUsIHMxNiBpZHgpCi17Ci0JcmV0dXJuIHBybV9ybXdfbW9kX3JlZ19iaXRzKGJpdHMsIGJpdHMsIG1vZHVsZSwgaWR4KTsKLX0KLQotc3RhdGljIGlubGluZSB1MzIgcHJtX2NsZWFyX21vZF9yZWdfYml0cyh1MzIgYml0cywgczE2IG1vZHVsZSwgczE2IGlkeCkKLXsKLQlyZXR1cm4gcHJtX3Jtd19tb2RfcmVnX2JpdHMoYml0cywgMHgwLCBtb2R1bGUsIGlkeCk7Ci19Ci0KLS8qIFRoZXNlIG9tYXAyXyBQUk0gZnVuY3Rpb25zIGFwcGx5IHRvIGJvdGggT01BUDIgYW5kIDMgKi8KLWludCBvbWFwMl9wcm1faXNfaGFyZHJlc2V0X2Fzc2VydGVkKHMxNiBwcm1fbW9kLCB1OCBzaGlmdCk7Ci1pbnQgb21hcDJfcHJtX2Fzc2VydF9oYXJkcmVzZXQoczE2IHBybV9tb2QsIHU4IHNoaWZ0KTsKLWludCBvbWFwMl9wcm1fZGVhc3NlcnRfaGFyZHJlc2V0KHMxNiBwcm1fbW9kLCB1OCBzaGlmdCk7Ci0KLWludCBvbWFwNF9wcm1faXNfaGFyZHJlc2V0X2Fzc2VydGVkKHZvaWQgX19pb21lbSAqcnN0Y3RybF9yZWcsIHU4IHNoaWZ0KTsKLWludCBvbWFwNF9wcm1fYXNzZXJ0X2hhcmRyZXNldCh2b2lkIF9faW9tZW0gKnJzdGN0cmxfcmVnLCB1OCBzaGlmdCk7Ci1pbnQgb21hcDRfcHJtX2RlYXNzZXJ0X2hhcmRyZXNldCh2b2lkIF9faW9tZW0gKnJzdGN0cmxfcmVnLCB1OCBzaGlmdCk7Ci0KLSNlbmRpZgotCi0vKgotICogQml0cyBjb21tb24gdG8gc3BlY2lmaWMgcmVnaXN0ZXJzCi0gKgotICogVGhlIDM0MzAgcmVnaXN0ZXIgYW5kIGJpdCBuYW1lcyBhcmUgZ2VuZXJhbGx5IHVzZWQsCi0gKiBzaW5jZSB0aGV5IHRlbmQgdG8gbWFrZSBtb3JlIHNlbnNlCi0gKi8KLQotLyogUE1fRVZHRU5PTlRJTV9NUFUgKi8KLS8qIE5hbWVkIFBNX0VWRUdFTk9OVElNX01QVSBvbiB0aGUgMjRYWCAqLwotI2RlZmluZSBPTUFQX09OVElNRVZBTF9TSElGVAkJCQkwCi0jZGVmaW5lIE9NQVBfT05USU1FVkFMX01BU0sJCQkJKDB4ZmZmZmZmZmYgPDwgMCkKLQotLyogUE1fRVZHRU5PRkZUSU1fTVBVICovCi0vKiBOYW1lZCBQTV9FVkVHRU5PRkZUSU1fTVBVIG9uIHRoZSAyNFhYICovCi0jZGVmaW5lIE9NQVBfT0ZGVElNRVZBTF9TSElGVAkJCQkwCi0jZGVmaW5lIE9NQVBfT0ZGVElNRVZBTF9NQVNLCQkJCSgweGZmZmZmZmZmIDw8IDApCi0KLS8qIFBSTV9DTEtTRVRVUCBhbmQgUFJDTV9WT0xUU0VUVVAgKi8KLS8qIE5hbWVkIFBSQ01fQ0xLU1NFVFVQIG9uIHRoZSAyNFhYICovCi0jZGVmaW5lIE9NQVBfU0VUVVBfVElNRV9TSElGVAkJCQkwCi0jZGVmaW5lIE9NQVBfU0VUVVBfVElNRV9NQVNLCQkJCSgweGZmZmYgPDwgMCkKLQotLyogUFJNX0NMS1NSQ19DVFJMICovCi0vKiBOYW1lZCBQUkNNX0NMS1NSQ19DVFJMIG9uIHRoZSAyNFhYICovCi0jZGVmaW5lIE9NQVBfU1lTQ0xLRElWX1NISUZUCQkJCTYKLSNkZWZpbmUgT01BUF9TWVNDTEtESVZfTUFTSwkJCQkoMHgzIDw8IDYpCi0jZGVmaW5lIE9NQVBfQVVUT0VYVENMS01PREVfU0hJRlQJCQkzCi0jZGVmaW5lIE9NQVBfQVVUT0VYVENMS01PREVfTUFTSwkJCSgweDMgPDwgMykKLSNkZWZpbmUgT01BUF9TWVNDTEtTRUxfU0hJRlQJCQkJMAotI2RlZmluZSBPTUFQX1NZU0NMS1NFTF9NQVNLCQkJCSgweDMgPDwgMCkKLQotLyogUE1fRVZHRU5DVFJMX01QVSAqLwotI2RlZmluZSBPTUFQX09GRkxPQURNT0RFX1NISUZUCQkJCTMKLSNkZWZpbmUgT01BUF9PRkZMT0FETU9ERV9NQVNLCQkJCSgweDMgPDwgMykKLSNkZWZpbmUgT01BUF9PTkxPQURNT0RFX1NISUZUCQkJCTEKLSNkZWZpbmUgT01BUF9PTkxPQURNT0RFX01BU0sJCQkJKDB4MyA8PCAxKQotI2RlZmluZSBPTUFQX0VOQUJMRV9NQVNLCQkJCSgxIDw8IDApCi0KLS8qIFBSTV9SU1RUSU1FICovCi0vKiBOYW1lZCBSTV9SU1RUSU1FX1dLVVAgb24gdGhlIDI0eHggKi8KLSNkZWZpbmUgT01BUF9SU1RUSU1FMl9TSElGVAkJCQk4Ci0jZGVmaW5lIE9NQVBfUlNUVElNRTJfTUFTSwkJCQkoMHgxZiA8PCA4KQotI2RlZmluZSBPTUFQX1JTVFRJTUUxX1NISUZUCQkJCTAKLSNkZWZpbmUgT01BUF9SU1RUSU1FMV9NQVNLCQkJCSgweGZmIDw8IDApCi0KLS8qIFBSTV9SU1RDVFJMICovCi0vKiBOYW1lZCBSTV9SU1RDVFJMX1dLVVAgb24gdGhlIDI0eHggKi8KLS8qIDI0MjAgY2FsbHMgUlNUX0RQTEwzICdSU1RfRFBMTCcgKi8KLSNkZWZpbmUgT01BUF9SU1RfRFBMTDNfTUFTSwkJCQkoMSA8PCAyKQotI2RlZmluZSBPTUFQX1JTVF9HU19NQVNLCQkJCSgxIDw8IDEpCi0KLQotLyoKLSAqIEJpdHMgY29tbW9uIHRvIG1vZHVsZS1zaGFyZWQgcmVnaXN0ZXJzCi0gKgotICogTm90IGFsbCByZWdpc3RlcnMgb2YgYSBwYXJ0aWN1bGFyIHR5cGUgc3VwcG9ydCBhbGwgb2YgdGhlc2UgYml0cyAtCi0gKiBjaGVjayBUUk0gaWYgeW91IGFyZSB1bnN1cmUKLSAqLwotCiAvKgogICogMjRYWDogUE1fUFdTVFNUX0NPUkUsIFBNX1BXU1RTVF9HRlgsIFBNX1BXU1RTVF9NUFUsIFBNX1BXU1RTVF9EU1AKICAqCkBAIC0zNDEsNTkgKzQwLDYgQEAKICNkZWZpbmUgT01BUF9QT1dFUlNUQVRFU1RfTUFTSwkJCQkoMHgzIDw8IDApCiAKIC8qCi0gKiAyNFhYOiBSTV9SU1RTVF9NUFUgYW5kIFJNX1JTVFNUX0RTUCAtIG9uIDI0WFgsICdDT1JFRE9NQUlOV0tVUF9SU1QnIGlzCi0gKgkgY2FsbGVkICdDT1JFV0tVUF9SU1QnCi0gKgotICogMzQzMDogUk1fUlNUU1RfSVZBMiwgUk1fUlNUU1RfTVBVLCBSTV9SU1RTVF9HRlgsIFJNX1JTVFNUX0RTUywKLSAqCSBSTV9SU1RTVF9DQU0sIFJNX1JTVFNUX1BFUiwgUk1fUlNUU1RfTkVPTgotICovCi0jZGVmaW5lIE9NQVBfQ09SRURPTUFJTldLVVBfUlNUX01BU0sJCQkoMSA8PCAzKQotCi0vKgotICogMjRYWDogUk1fUlNUU1RfTVBVLCBSTV9SU1RTVF9HRlgsIFJNX1JTVFNUX0RTUAotICoKLSAqIDI0MzA6IFJNX1JTVFNUX01ETQotICoKLSAqIDM0MzA6IFJNX1JTVFNUX0NPUkUsIFJNX1JTVFNUX0VNVQotICovCi0jZGVmaW5lIE9NQVBfRE9NQUlOV0tVUF9SU1RfTUFTSwkJCSgxIDw8IDIpCi0KLS8qCi0gKiAyNFhYOiBSTV9SU1RTVF9NUFUsIFJNX1JTVFNUX1dLVVAsIFJNX1JTVFNUX0RTUAotICoJIE9uIDI0WFgsICdHTE9CQUxXQVJNX1JTVCcgaXMgY2FsbGVkICdHTE9CQUxXTVBVX1JTVCcuCi0gKgotICogMjQzMDogUk1fUlNUU1RfTURNCi0gKgotICogMzQzMDogUk1fUlNUU1RfQ09SRSwgUk1fUlNUU1RfRU1VCi0gKi8KLSNkZWZpbmUgT01BUF9HTE9CQUxXQVJNX1JTVF9NQVNLCQkJKDEgPDwgMSkKLSNkZWZpbmUgT01BUF9HTE9CQUxDT0xEX1JTVF9NQVNLCQkJKDEgPDwgMCkKLQotLyoKLSAqIDI0WFg6IFBNX1dLREVQX0dGWCwgUE1fV0tERVBfTVBVLCBQTV9XS0RFUF9DT1JFLCBQTV9XS0RFUF9EU1AKLSAqCSAyNDIwIFRSTSBzb21ldGltZXMgdXNlcyAiRU5fV0FLRVVQIiBpbnN0ZWFkIG9mICJFTl9XS1VQIgotICoKLSAqIDI0MzA6IFBNX1dLREVQX01ETQotICoKLSAqIDM0MzA6IFBNX1dLREVQX0lWQTIsIFBNX1dLREVQX0dGWCwgUE1fV0tERVBfRFNTLCBQTV9XS0RFUF9DQU0sCi0gKgkgUE1fV0tERVBfUEVSCi0gKi8KLSNkZWZpbmUgT01BUF9FTl9XS1VQX1NISUZUCQkJCTQKLSNkZWZpbmUgT01BUF9FTl9XS1VQX01BU0sJCQkJKDEgPDwgNCkKLQotLyoKLSAqIDI0WFg6IFBNX1BXU1RDVFJMX01QVSwgUE1fUFdTVENUUkxfQ09SRSwgUE1fUFdTVENUUkxfR0ZYLAotICoJIFBNX1BXU1RDVFJMX0RTUAotICoKLSAqIDI0MzA6IFBNX1BXU1RDVFJMX01ETQotICoKLSAqIDM0MzA6IFBNX1BXU1RDVFJMX0lWQTIsIFBNX1BXU1RDVFJMX0NPUkUsIFBNX1BXU1RDVFJMX0dGWCwKLSAqCSBQTV9QV1NUQ1RSTF9EU1MsIFBNX1BXU1RDVFJMX0NBTSwgUE1fUFdTVENUUkxfUEVSLAotICoJIFBNX1BXU1RDVFJMX05FT04KLSAqLwotI2RlZmluZSBPTUFQX0xPR0lDUkVUU1RBVEVfTUFTSwkJCQkoMSA8PCAyKQotCi0vKgogICogMjRYWDogUE1fUFdTVENUUkxfTVBVLCBQTV9QV1NUQ1RSTF9DT1JFLCBQTV9QV1NUQ1RSTF9HRlgsCiAgKiAgICAgICBQTV9QV1NUQ1RSTF9EU1AsIFBNX1BXU1RTVF9NUFUKICAqCkBAIC00MDcsMTEgKzUzLDQgQEAKICNkZWZpbmUgT01BUF9QT1dFUlNUQVRFX01BU0sJCQkJKDB4MyA8PCAwKQogCiAKLS8qCi0gKiBNQVhfTU9EVUxFX0hBUkRSRVNFVF9XQUlUOiBNYXhpbXVtIG1pY3Jvc2Vjb25kcyB0byB3YWl0IGZvciBhbiBPTUFQCi0gKiBzdWJtb2R1bGUgdG8gZXhpdCBoYXJkcmVzZXQKLSAqLwotI2RlZmluZSBNQVhfTU9EVUxFX0hBUkRSRVNFVF9XQUlUCQkxMDAwMAotCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0yeHh4XzN4eHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtMnh4eF8zeHh4LmMKaW5kZXggNDIxNzcxZS4uZWMwMzYyNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0yeHh4XzN4eHguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BybTJ4eHhfM3h4eC5jCkBAIC0xMiwxOCArMTIsNjUgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKICNpbmNsdWRlIDxwbGF0L2NvbW1vbi5oPgogI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAjaW5jbHVkZSA8cGxhdC9wcmNtLmg+CiAKLSNpbmNsdWRlICJwcm0uaCIKKyNpbmNsdWRlICJwcm0yeHh4XzN4eHguaCIKKyNpbmNsdWRlICJjbTJ4eHhfM3h4eC5oIgogI2luY2x1ZGUgInBybS1yZWdiaXRzLTI0eHguaCIKICNpbmNsdWRlICJwcm0tcmVnYml0cy0zNHh4LmgiCiAKK3UzMiBvbWFwMl9wcm1fcmVhZF9tb2RfcmVnKHMxNiBtb2R1bGUsIHUxNiBpZHgpCit7CisJcmV0dXJuIF9fcmF3X3JlYWRsKHBybV9iYXNlICsgbW9kdWxlICsgaWR4KTsKK30KKwordm9pZCBvbWFwMl9wcm1fd3JpdGVfbW9kX3JlZyh1MzIgdmFsLCBzMTYgbW9kdWxlLCB1MTYgaWR4KQoreworCV9fcmF3X3dyaXRlbCh2YWwsIHBybV9iYXNlICsgbW9kdWxlICsgaWR4KTsKK30KKworLyogUmVhZC1tb2RpZnktd3JpdGUgYSByZWdpc3RlciBpbiBhIFBSTSBtb2R1bGUuIENhbGxlciBtdXN0IGxvY2sgKi8KK3UzMiBvbWFwMl9wcm1fcm13X21vZF9yZWdfYml0cyh1MzIgbWFzaywgdTMyIGJpdHMsIHMxNiBtb2R1bGUsIHMxNiBpZHgpCit7CisJdTMyIHY7CisKKwl2ID0gb21hcDJfcHJtX3JlYWRfbW9kX3JlZyhtb2R1bGUsIGlkeCk7CisJdiAmPSB+bWFzazsKKwl2IHw9IGJpdHM7CisJb21hcDJfcHJtX3dyaXRlX21vZF9yZWcodiwgbW9kdWxlLCBpZHgpOworCisJcmV0dXJuIHY7Cit9CisKKy8qIFJlYWQgYSBQUk0gcmVnaXN0ZXIsIEFORCBpdCwgYW5kIHNoaWZ0IHRoZSByZXN1bHQgZG93biB0byBiaXQgMCAqLwordTMyIG9tYXAyX3BybV9yZWFkX21vZF9iaXRzX3NoaWZ0KHMxNiBkb21haW4sIHMxNiBpZHgsIHUzMiBtYXNrKQoreworCXUzMiB2OworCisJdiA9IG9tYXAyX3BybV9yZWFkX21vZF9yZWcoZG9tYWluLCBpZHgpOworCXYgJj0gbWFzazsKKwl2ID4+PSBfX2ZmcyhtYXNrKTsKKworCXJldHVybiB2OworfQorCit1MzIgb21hcDJfcHJtX3NldF9tb2RfcmVnX2JpdHModTMyIGJpdHMsIHMxNiBtb2R1bGUsIHMxNiBpZHgpCit7CisJcmV0dXJuIG9tYXAyX3BybV9ybXdfbW9kX3JlZ19iaXRzKGJpdHMsIGJpdHMsIG1vZHVsZSwgaWR4KTsKK30KKwordTMyIG9tYXAyX3BybV9jbGVhcl9tb2RfcmVnX2JpdHModTMyIGJpdHMsIHMxNiBtb2R1bGUsIHMxNiBpZHgpCit7CisJcmV0dXJuIG9tYXAyX3BybV9ybXdfbW9kX3JlZ19iaXRzKGJpdHMsIDB4MCwgbW9kdWxlLCBpZHgpOworfQorCisKIC8qKgogICogb21hcDJfcHJtX2lzX2hhcmRyZXNldF9hc3NlcnRlZCAtIHJlYWQgdGhlIEhXIHJlc2V0IGxpbmUgc3RhdGUgb2YKICAqIHN1Ym1vZHVsZXMgY29udGFpbmVkIGluIHRoZSBod21vZCBtb2R1bGUKQEAgLTM5LDcgKzg2LDcgQEAKIAlpZiAoIShjcHVfaXNfb21hcDI0eHgoKSB8fCBjcHVfaXNfb21hcDM0eHgoKSkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcmV0dXJuIHBybV9yZWFkX21vZF9iaXRzX3NoaWZ0KHBybV9tb2QsIE9NQVAyX1JNX1JTVENUUkwsCisJcmV0dXJuIG9tYXAyX3BybV9yZWFkX21vZF9iaXRzX3NoaWZ0KHBybV9tb2QsIE9NQVAyX1JNX1JTVENUUkwsCiAJCQkJICAgICAgICgxIDw8IHNoaWZ0KSk7CiB9CiAKQEAgLTYzLDcgKzExMCw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJbWFzayA9IDEgPDwgc2hpZnQ7Ci0JcHJtX3Jtd19tb2RfcmVnX2JpdHMobWFzaywgbWFzaywgcHJtX21vZCwgT01BUDJfUk1fUlNUQ1RSTCk7CisJb21hcDJfcHJtX3Jtd19tb2RfcmVnX2JpdHMobWFzaywgbWFzaywgcHJtX21vZCwgT01BUDJfUk1fUlNUQ1RSTCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTkzLDE4ICsxNDAsMTcgQEAKIAltYXNrID0gMSA8PCBzaGlmdDsKIAogCS8qIENoZWNrIHRoZSBjdXJyZW50IHN0YXR1cyB0byBhdm9pZCBkZS1hc3NlcnRpbmcgdGhlIGxpbmUgdHdpY2UgKi8KLQlpZiAocHJtX3JlYWRfbW9kX2JpdHNfc2hpZnQocHJtX21vZCwgT01BUDJfUk1fUlNUQ1RSTCwgbWFzaykgPT0gMCkKKwlpZiAob21hcDJfcHJtX3JlYWRfbW9kX2JpdHNfc2hpZnQocHJtX21vZCwgT01BUDJfUk1fUlNUQ1RSTCwgbWFzaykgPT0gMCkKIAkJcmV0dXJuIC1FRVhJU1Q7CiAKIAkvKiBDbGVhciB0aGUgcmVzZXQgc3RhdHVzIGJ5IHdyaXRpbmcgMSB0byB0aGUgc3RhdHVzIGJpdCAqLwotCXBybV9ybXdfbW9kX3JlZ19iaXRzKDB4ZmZmZmZmZmYsIG1hc2ssIHBybV9tb2QsIE9NQVAyX1JNX1JTVFNUKTsKKwlvbWFwMl9wcm1fcm13X21vZF9yZWdfYml0cygweGZmZmZmZmZmLCBtYXNrLCBwcm1fbW9kLCBPTUFQMl9STV9SU1RTVCk7CiAJLyogZGUtYXNzZXJ0IHRoZSByZXNldCBjb250cm9sIGxpbmUgKi8KLQlwcm1fcm13X21vZF9yZWdfYml0cyhtYXNrLCAwLCBwcm1fbW9kLCBPTUFQMl9STV9SU1RDVFJMKTsKKwlvbWFwMl9wcm1fcm13X21vZF9yZWdfYml0cyhtYXNrLCAwLCBwcm1fbW9kLCBPTUFQMl9STV9SU1RDVFJMKTsKIAkvKiB3YWl0IHRoZSBzdGF0dXMgdG8gYmUgc2V0ICovCi0Jb21hcF90ZXN0X3RpbWVvdXQocHJtX3JlYWRfbW9kX2JpdHNfc2hpZnQocHJtX21vZCwgT01BUDJfUk1fUlNUU1QsCisJb21hcF90ZXN0X3RpbWVvdXQob21hcDJfcHJtX3JlYWRfbW9kX2JpdHNfc2hpZnQocHJtX21vZCwgT01BUDJfUk1fUlNUU1QsCiAJCQkJCQkgIG1hc2spLAogCQkJICBNQVhfTU9EVUxFX0hBUkRSRVNFVF9XQUlULCBjKTsKIAogCXJldHVybiAoYyA9PSBNQVhfTU9EVUxFX0hBUkRSRVNFVF9XQUlUKSA/IC1FQlVTWSA6IDA7CiB9Ci0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtMnh4eF8zeHh4LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BybTJ4eHhfM3h4eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzZDQ0ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BybTJ4eHhfM3h4eC5oCkBAIC0wLDAgKzEsMzY3IEBACisvKgorICogT01BUDIvMyBQb3dlci9SZXNldCBNYW5hZ2VtZW50IChQUk0pIHJlZ2lzdGVyIGRlZmluaXRpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDEwIE5va2lhIENvcnBvcmF0aW9uCisgKiBQYXVsIFdhbG1zbGV5CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGUgUFJNIGhhcmR3YXJlIG1vZHVsZXMgb24gdGhlIE9NQVAyLzMgYXJlIHF1aXRlIHNpbWlsYXIgdG8gZWFjaAorICogb3RoZXIuICBUaGUgUFJNIG9uIE9NQVA0IGhhcyBhIG5ldyByZWdpc3RlciBsYXlvdXQsIGFuZCBpcyBoYW5kbGVkCisgKiBpbiBhIHNlcGFyYXRlIGZpbGUuCisgKi8KKyNpZm5kZWYgX19BUkNIX0FSTV9NQUNIX09NQVAyX1BSTTJYWFhfM1hYWF9ICisjZGVmaW5lIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9QUk0yWFhYXzNYWFhfSAorCisjaW5jbHVkZSAicHJjbS1jb21tb24uaCIKKyNpbmNsdWRlICJwcm0uaCIKKworI2RlZmluZSBPTUFQMjQyMF9QUk1fUkVHQUREUihtb2R1bGUsIHJlZykJCQkJXAorCQlPTUFQMl9MNF9JT19BRERSRVNTKE9NQVAyNDIwX1BSTV9CQVNFICsgKG1vZHVsZSkgKyAocmVnKSkKKyNkZWZpbmUgT01BUDI0MzBfUFJNX1JFR0FERFIobW9kdWxlLCByZWcpCQkJCVwKKwkJT01BUDJfTDRfSU9fQUREUkVTUyhPTUFQMjQzMF9QUk1fQkFTRSArIChtb2R1bGUpICsgKHJlZykpCisjZGVmaW5lIE9NQVAzNFhYX1BSTV9SRUdBRERSKG1vZHVsZSwgcmVnKQkJCQlcCisJCU9NQVAyX0w0X0lPX0FERFJFU1MoT01BUDM0MzBfUFJNX0JBU0UgKyAobW9kdWxlKSArIChyZWcpKQorCisKKy8qCisgKiBPTUFQMi1zcGVjaWZpYyBnbG9iYWwgUFJNIHJlZ2lzdGVycworICogVXNlIF9fcmF3X3tyZWFkLHdyaXRlfWwoKSB3aXRoIHRoZXNlIHJlZ2lzdGVycy4KKyAqCisgKiBXaXRoIGEgZmV3IGV4Y2VwdGlvbnMsIHRoZXNlIGFyZSB0aGUgcmVnaXN0ZXIgbmFtZXMgYmVnaW5uaW5nIHdpdGgKKyAqIFBSQ01fKiBvbiAyNHh4LiAgKFRoZSBleGNlcHRpb25zIGFyZSB0aGUgSVJRU1RBVFVTIGFuZCBJUlFFTkFCTEUKKyAqIGJpdHMuKQorICoKKyAqLworCisjZGVmaW5lIE9NQVAyX1BSQ01fUkVWSVNJT05fT0ZGU0VUCTB4MDAwMAorI2RlZmluZSBPTUFQMjQyMF9QUkNNX1JFVklTSU9OCQlPTUFQMjQyMF9QUk1fUkVHQUREUihPQ1BfTU9ELCAweDAwMDApCisjZGVmaW5lIE9NQVAyX1BSQ01fU1lTQ09ORklHX09GRlNFVAkweDAwMTAKKyNkZWZpbmUgT01BUDI0MjBfUFJDTV9TWVNDT05GSUcJCU9NQVAyNDIwX1BSTV9SRUdBRERSKE9DUF9NT0QsIDB4MDAxMCkKKworI2RlZmluZSBPTUFQMl9QUkNNX0lSUVNUQVRVU19NUFVfT0ZGU0VUCTB4MDAxOAorI2RlZmluZSBPTUFQMjQyMF9QUkNNX0lSUVNUQVRVU19NUFUJT01BUDI0MjBfUFJNX1JFR0FERFIoT0NQX01PRCwgMHgwMDE4KQorI2RlZmluZSBPTUFQMl9QUkNNX0lSUUVOQUJMRV9NUFVfT0ZGU0VUCTB4MDAxYworI2RlZmluZSBPTUFQMjQyMF9QUkNNX0lSUUVOQUJMRV9NUFUJT01BUDI0MjBfUFJNX1JFR0FERFIoT0NQX01PRCwgMHgwMDFjKQorCisjZGVmaW5lIE9NQVAyX1BSQ01fVk9MVENUUkxfT0ZGU0VUCTB4MDA1MAorI2RlZmluZSBPTUFQMjQyMF9QUkNNX1ZPTFRDVFJMCQlPTUFQMjQyMF9QUk1fUkVHQUREUihPQ1BfTU9ELCAweDAwNTApCisjZGVmaW5lIE9NQVAyX1BSQ01fVk9MVFNUX09GRlNFVAkweDAwNTQKKyNkZWZpbmUgT01BUDI0MjBfUFJDTV9WT0xUU1QJCU9NQVAyNDIwX1BSTV9SRUdBRERSKE9DUF9NT0QsIDB4MDA1NCkKKyNkZWZpbmUgT01BUDJfUFJDTV9DTEtTUkNfQ1RSTF9PRkZTRVQJMHgwMDYwCisjZGVmaW5lIE9NQVAyNDIwX1BSQ01fQ0xLU1JDX0NUUkwJT01BUDI0MjBfUFJNX1JFR0FERFIoT0NQX01PRCwgMHgwMDYwKQorI2RlZmluZSBPTUFQMl9QUkNNX0NMS09VVF9DVFJMX09GRlNFVAkweDAwNzAKKyNkZWZpbmUgT01BUDI0MjBfUFJDTV9DTEtPVVRfQ1RSTAlPTUFQMjQyMF9QUk1fUkVHQUREUihPQ1BfTU9ELCAweDAwNzApCisjZGVmaW5lIE9NQVAyX1BSQ01fQ0xLRU1VTF9DVFJMX09GRlNFVAkweDAwNzgKKyNkZWZpbmUgT01BUDI0MjBfUFJDTV9DTEtFTVVMX0NUUkwJT01BUDI0MjBfUFJNX1JFR0FERFIoT0NQX01PRCwgMHgwMDc4KQorI2RlZmluZSBPTUFQMl9QUkNNX0NMS0NGR19DVFJMX09GRlNFVAkweDAwODAKKyNkZWZpbmUgT01BUDI0MjBfUFJDTV9DTEtDRkdfQ1RSTAlPTUFQMjQyMF9QUk1fUkVHQUREUihPQ1BfTU9ELCAweDAwODApCisjZGVmaW5lIE9NQVAyX1BSQ01fQ0xLQ0ZHX1NUQVRVU19PRkZTRVQJMHgwMDg0CisjZGVmaW5lIE9NQVAyNDIwX1BSQ01fQ0xLQ0ZHX1NUQVRVUwlPTUFQMjQyMF9QUk1fUkVHQUREUihPQ1BfTU9ELCAweDAwODQpCisjZGVmaW5lIE9NQVAyX1BSQ01fVk9MVFNFVFVQX09GRlNFVAkweDAwOTAKKyNkZWZpbmUgT01BUDI0MjBfUFJDTV9WT0xUU0VUVVAJCU9NQVAyNDIwX1BSTV9SRUdBRERSKE9DUF9NT0QsIDB4MDA5MCkKKyNkZWZpbmUgT01BUDJfUFJDTV9DTEtTU0VUVVBfT0ZGU0VUCTB4MDA5NAorI2RlZmluZSBPTUFQMjQyMF9QUkNNX0NMS1NTRVRVUAkJT01BUDI0MjBfUFJNX1JFR0FERFIoT0NQX01PRCwgMHgwMDk0KQorI2RlZmluZSBPTUFQMl9QUkNNX1BPTENUUkxfT0ZGU0VUCTB4MDA5OAorI2RlZmluZSBPTUFQMjQyMF9QUkNNX1BPTENUUkwJCU9NQVAyNDIwX1BSTV9SRUdBRERSKE9DUF9NT0QsIDB4MDA5OCkKKworI2RlZmluZSBPTUFQMjQzMF9QUkNNX1JFVklTSU9OCQlPTUFQMjQzMF9QUk1fUkVHQUREUihPQ1BfTU9ELCAweDAwMDApCisjZGVmaW5lIE9NQVAyNDMwX1BSQ01fU1lTQ09ORklHCQlPTUFQMjQzMF9QUk1fUkVHQUREUihPQ1BfTU9ELCAweDAwMTApCisKKyNkZWZpbmUgT01BUDI0MzBfUFJDTV9JUlFTVEFUVVNfTVBVCU9NQVAyNDMwX1BSTV9SRUdBRERSKE9DUF9NT0QsIDB4MDAxOCkKKyNkZWZpbmUgT01BUDI0MzBfUFJDTV9JUlFFTkFCTEVfTVBVCU9NQVAyNDMwX1BSTV9SRUdBRERSKE9DUF9NT0QsIDB4MDAxYykKKworI2RlZmluZSBPTUFQMjQzMF9QUkNNX1ZPTFRDVFJMCQlPTUFQMjQzMF9QUk1fUkVHQUREUihPQ1BfTU9ELCAweDAwNTApCisjZGVmaW5lIE9NQVAyNDMwX1BSQ01fVk9MVFNUCQlPTUFQMjQzMF9QUk1fUkVHQUREUihPQ1BfTU9ELCAweDAwNTQpCisjZGVmaW5lIE9NQVAyNDMwX1BSQ01fQ0xLU1JDX0NUUkwJT01BUDI0MzBfUFJNX1JFR0FERFIoT0NQX01PRCwgMHgwMDYwKQorI2RlZmluZSBPTUFQMjQzMF9QUkNNX0NMS09VVF9DVFJMCU9NQVAyNDMwX1BSTV9SRUdBRERSKE9DUF9NT0QsIDB4MDA3MCkKKyNkZWZpbmUgT01BUDI0MzBfUFJDTV9DTEtFTVVMX0NUUkwJT01BUDI0MzBfUFJNX1JFR0FERFIoT0NQX01PRCwgMHgwMDc4KQorI2RlZmluZSBPTUFQMjQzMF9QUkNNX0NMS0NGR19DVFJMCU9NQVAyNDMwX1BSTV9SRUdBRERSKE9DUF9NT0QsIDB4MDA4MCkKKyNkZWZpbmUgT01BUDI0MzBfUFJDTV9DTEtDRkdfU1RBVFVTCU9NQVAyNDMwX1BSTV9SRUdBRERSKE9DUF9NT0QsIDB4MDA4NCkKKyNkZWZpbmUgT01BUDI0MzBfUFJDTV9WT0xUU0VUVVAJCU9NQVAyNDMwX1BSTV9SRUdBRERSKE9DUF9NT0QsIDB4MDA5MCkKKyNkZWZpbmUgT01BUDI0MzBfUFJDTV9DTEtTU0VUVVAJCU9NQVAyNDMwX1BSTV9SRUdBRERSKE9DUF9NT0QsIDB4MDA5NCkKKyNkZWZpbmUgT01BUDI0MzBfUFJDTV9QT0xDVFJMCQlPTUFQMjQzMF9QUk1fUkVHQUREUihPQ1BfTU9ELCAweDAwOTgpCisKKy8qCisgKiBPTUFQMy1zcGVjaWZpYyBnbG9iYWwgUFJNIHJlZ2lzdGVycworICogVXNlIF9fcmF3X3tyZWFkLHdyaXRlfWwoKSB3aXRoIHRoZXNlIHJlZ2lzdGVycy4KKyAqCisgKiBXaXRoIGEgZmV3IGV4Y2VwdGlvbnMsIHRoZXNlIGFyZSB0aGUgcmVnaXN0ZXIgbmFtZXMgYmVnaW5uaW5nIHdpdGgKKyAqIFBSTV8qIG9uIDM0eHguICAoVGhlIGV4Y2VwdGlvbnMgYXJlIHRoZSBJUlFTVEFUVVMgYW5kIElSUUVOQUJMRQorICogYml0cy4pCisgKi8KKworI2RlZmluZSBPTUFQM19QUk1fUkVWSVNJT05fT0ZGU0VUCTB4MDAwNAorI2RlZmluZSBPTUFQMzQzMF9QUk1fUkVWSVNJT04JCU9NQVAzNFhYX1BSTV9SRUdBRERSKE9DUF9NT0QsIDB4MDAwNCkKKyNkZWZpbmUgT01BUDNfUFJNX1NZU0NPTkZJR19PRkZTRVQJMHgwMDE0CisjZGVmaW5lIE9NQVAzNDMwX1BSTV9TWVNDT05GSUcJCU9NQVAzNFhYX1BSTV9SRUdBRERSKE9DUF9NT0QsIDB4MDAxNCkKKworI2RlZmluZSBPTUFQM19QUk1fSVJRU1RBVFVTX01QVV9PRkZTRVQJMHgwMDE4CisjZGVmaW5lIE9NQVAzNDMwX1BSTV9JUlFTVEFUVVNfTVBVCU9NQVAzNFhYX1BSTV9SRUdBRERSKE9DUF9NT0QsIDB4MDAxOCkKKyNkZWZpbmUgT01BUDNfUFJNX0lSUUVOQUJMRV9NUFVfT0ZGU0VUCTB4MDAxYworI2RlZmluZSBPTUFQMzQzMF9QUk1fSVJRRU5BQkxFX01QVQlPTUFQMzRYWF9QUk1fUkVHQUREUihPQ1BfTU9ELCAweDAwMWMpCisKKworI2RlZmluZSBPTUFQM19QUk1fVkNfU01QU19TQV9PRkZTRVQJMHgwMDIwCisjZGVmaW5lIE9NQVAzNDMwX1BSTV9WQ19TTVBTX1NBCQlPTUFQMzRYWF9QUk1fUkVHQUREUihPTUFQMzQzMF9HUl9NT0QsIDB4MDAyMCkKKyNkZWZpbmUgT01BUDNfUFJNX1ZDX1NNUFNfVk9MX1JBX09GRlNFVAkweDAwMjQKKyNkZWZpbmUgT01BUDM0MzBfUFJNX1ZDX1NNUFNfVk9MX1JBCU9NQVAzNFhYX1BSTV9SRUdBRERSKE9NQVAzNDMwX0dSX01PRCwgMHgwMDI0KQorI2RlZmluZSBPTUFQM19QUk1fVkNfU01QU19DTURfUkFfT0ZGU0VUCTB4MDAyOAorI2RlZmluZSBPTUFQMzQzMF9QUk1fVkNfU01QU19DTURfUkEJT01BUDM0WFhfUFJNX1JFR0FERFIoT01BUDM0MzBfR1JfTU9ELCAweDAwMjgpCisjZGVmaW5lIE9NQVAzX1BSTV9WQ19DTURfVkFMXzBfT0ZGU0VUCTB4MDAyYworI2RlZmluZSBPTUFQMzQzMF9QUk1fVkNfQ01EX1ZBTF8wCU9NQVAzNFhYX1BSTV9SRUdBRERSKE9NQVAzNDMwX0dSX01PRCwgMHgwMDJjKQorI2RlZmluZSBPTUFQM19QUk1fVkNfQ01EX1ZBTF8xX09GRlNFVAkweDAwMzAKKyNkZWZpbmUgT01BUDM0MzBfUFJNX1ZDX0NNRF9WQUxfMQlPTUFQMzRYWF9QUk1fUkVHQUREUihPTUFQMzQzMF9HUl9NT0QsIDB4MDAzMCkKKyNkZWZpbmUgT01BUDNfUFJNX1ZDX0NIX0NPTkZfT0ZGU0VUCTB4MDAzNAorI2RlZmluZSBPTUFQMzQzMF9QUk1fVkNfQ0hfQ09ORgkJT01BUDM0WFhfUFJNX1JFR0FERFIoT01BUDM0MzBfR1JfTU9ELCAweDAwMzQpCisjZGVmaW5lIE9NQVAzX1BSTV9WQ19JMkNfQ0ZHX09GRlNFVAkweDAwMzgKKyNkZWZpbmUgT01BUDM0MzBfUFJNX1ZDX0kyQ19DRkcJCU9NQVAzNFhYX1BSTV9SRUdBRERSKE9NQVAzNDMwX0dSX01PRCwgMHgwMDM4KQorI2RlZmluZSBPTUFQM19QUk1fVkNfQllQQVNTX1ZBTF9PRkZTRVQJMHgwMDNjCisjZGVmaW5lIE9NQVAzNDMwX1BSTV9WQ19CWVBBU1NfVkFMCU9NQVAzNFhYX1BSTV9SRUdBRERSKE9NQVAzNDMwX0dSX01PRCwgMHgwMDNjKQorI2RlZmluZSBPTUFQM19QUk1fUlNUQ1RSTF9PRkZTRVQJMHgwMDUwCisjZGVmaW5lIE9NQVAzNDMwX1BSTV9SU1RDVFJMCQlPTUFQMzRYWF9QUk1fUkVHQUREUihPTUFQMzQzMF9HUl9NT0QsIDB4MDA1MCkKKyNkZWZpbmUgT01BUDNfUFJNX1JTVFRJTUVfT0ZGU0VUCTB4MDA1NAorI2RlZmluZSBPTUFQMzQzMF9QUk1fUlNUVElNRQkJT01BUDM0WFhfUFJNX1JFR0FERFIoT01BUDM0MzBfR1JfTU9ELCAweDAwNTQpCisjZGVmaW5lIE9NQVAzX1BSTV9SU1RTVF9PRkZTRVQJMHgwMDU4CisjZGVmaW5lIE9NQVAzNDMwX1BSTV9SU1RTVAkJT01BUDM0WFhfUFJNX1JFR0FERFIoT01BUDM0MzBfR1JfTU9ELCAweDAwNTgpCisjZGVmaW5lIE9NQVAzX1BSTV9WT0xUQ1RSTF9PRkZTRVQJMHgwMDYwCisjZGVmaW5lIE9NQVAzNDMwX1BSTV9WT0xUQ1RSTAkJT01BUDM0WFhfUFJNX1JFR0FERFIoT01BUDM0MzBfR1JfTU9ELCAweDAwNjApCisjZGVmaW5lIE9NQVAzX1BSTV9TUkFNX1BDSEFSR0VfT0ZGU0VUCTB4MDA2NAorI2RlZmluZSBPTUFQMzQzMF9QUk1fU1JBTV9QQ0hBUkdFCU9NQVAzNFhYX1BSTV9SRUdBRERSKE9NQVAzNDMwX0dSX01PRCwgMHgwMDY0KQorI2RlZmluZSBPTUFQM19QUk1fQ0xLU1JDX0NUUkxfT0ZGU0VUCTB4MDA3MAorI2RlZmluZSBPTUFQMzQzMF9QUk1fQ0xLU1JDX0NUUkwJT01BUDM0WFhfUFJNX1JFR0FERFIoT01BUDM0MzBfR1JfTU9ELCAweDAwNzApCisjZGVmaW5lIE9NQVAzX1BSTV9WT0xUU0VUVVAxX09GRlNFVAkweDAwOTAKKyNkZWZpbmUgT01BUDM0MzBfUFJNX1ZPTFRTRVRVUDEJCU9NQVAzNFhYX1BSTV9SRUdBRERSKE9NQVAzNDMwX0dSX01PRCwgMHgwMDkwKQorI2RlZmluZSBPTUFQM19QUk1fVk9MVE9GRlNFVF9PRkZTRVQJMHgwMDk0CisjZGVmaW5lIE9NQVAzNDMwX1BSTV9WT0xUT0ZGU0VUCQlPTUFQMzRYWF9QUk1fUkVHQUREUihPTUFQMzQzMF9HUl9NT0QsIDB4MDA5NCkKKyNkZWZpbmUgT01BUDNfUFJNX0NMS1NFVFVQX09GRlNFVAkweDAwOTgKKyNkZWZpbmUgT01BUDM0MzBfUFJNX0NMS1NFVFVQCQlPTUFQMzRYWF9QUk1fUkVHQUREUihPTUFQMzQzMF9HUl9NT0QsIDB4MDA5OCkKKyNkZWZpbmUgT01BUDNfUFJNX1BPTENUUkxfT0ZGU0VUCTB4MDA5YworI2RlZmluZSBPTUFQMzQzMF9QUk1fUE9MQ1RSTAkJT01BUDM0WFhfUFJNX1JFR0FERFIoT01BUDM0MzBfR1JfTU9ELCAweDAwOWMpCisjZGVmaW5lIE9NQVAzX1BSTV9WT0xUU0VUVVAyX09GRlNFVAkweDAwYTAKKyNkZWZpbmUgT01BUDM0MzBfUFJNX1ZPTFRTRVRVUDIJCU9NQVAzNFhYX1BSTV9SRUdBRERSKE9NQVAzNDMwX0dSX01PRCwgMHgwMGEwKQorI2RlZmluZSBPTUFQM19QUk1fVlAxX0NPTkZJR19PRkZTRVQJMHgwMGIwCisjZGVmaW5lIE9NQVAzNDMwX1BSTV9WUDFfQ09ORklHCQlPTUFQMzRYWF9QUk1fUkVHQUREUihPTUFQMzQzMF9HUl9NT0QsIDB4MDBiMCkKKyNkZWZpbmUgT01BUDNfUFJNX1ZQMV9WU1RFUE1JTl9PRkZTRVQJMHgwMGI0CisjZGVmaW5lIE9NQVAzNDMwX1BSTV9WUDFfVlNURVBNSU4JT01BUDM0WFhfUFJNX1JFR0FERFIoT01BUDM0MzBfR1JfTU9ELCAweDAwYjQpCisjZGVmaW5lIE9NQVAzX1BSTV9WUDFfVlNURVBNQVhfT0ZGU0VUCTB4MDBiOAorI2RlZmluZSBPTUFQMzQzMF9QUk1fVlAxX1ZTVEVQTUFYCU9NQVAzNFhYX1BSTV9SRUdBRERSKE9NQVAzNDMwX0dSX01PRCwgMHgwMGI4KQorI2RlZmluZSBPTUFQM19QUk1fVlAxX1ZMSU1JVFRPX09GRlNFVAkweDAwYmMKKyNkZWZpbmUgT01BUDM0MzBfUFJNX1ZQMV9WTElNSVRUTwlPTUFQMzRYWF9QUk1fUkVHQUREUihPTUFQMzQzMF9HUl9NT0QsIDB4MDBiYykKKyNkZWZpbmUgT01BUDNfUFJNX1ZQMV9WT0xUQUdFX09GRlNFVAkweDAwYzAKKyNkZWZpbmUgT01BUDM0MzBfUFJNX1ZQMV9WT0xUQUdFCU9NQVAzNFhYX1BSTV9SRUdBRERSKE9NQVAzNDMwX0dSX01PRCwgMHgwMGMwKQorI2RlZmluZSBPTUFQM19QUk1fVlAxX1NUQVRVU19PRkZTRVQJMHgwMGM0CisjZGVmaW5lIE9NQVAzNDMwX1BSTV9WUDFfU1RBVFVTCQlPTUFQMzRYWF9QUk1fUkVHQUREUihPTUFQMzQzMF9HUl9NT0QsIDB4MDBjNCkKKyNkZWZpbmUgT01BUDNfUFJNX1ZQMl9DT05GSUdfT0ZGU0VUCTB4MDBkMAorI2RlZmluZSBPTUFQMzQzMF9QUk1fVlAyX0NPTkZJRwkJT01BUDM0WFhfUFJNX1JFR0FERFIoT01BUDM0MzBfR1JfTU9ELCAweDAwZDApCisjZGVmaW5lIE9NQVAzX1BSTV9WUDJfVlNURVBNSU5fT0ZGU0VUCTB4MDBkNAorI2RlZmluZSBPTUFQMzQzMF9QUk1fVlAyX1ZTVEVQTUlOCU9NQVAzNFhYX1BSTV9SRUdBRERSKE9NQVAzNDMwX0dSX01PRCwgMHgwMGQ0KQorI2RlZmluZSBPTUFQM19QUk1fVlAyX1ZTVEVQTUFYX09GRlNFVAkweDAwZDgKKyNkZWZpbmUgT01BUDM0MzBfUFJNX1ZQMl9WU1RFUE1BWAlPTUFQMzRYWF9QUk1fUkVHQUREUihPTUFQMzQzMF9HUl9NT0QsIDB4MDBkOCkKKyNkZWZpbmUgT01BUDNfUFJNX1ZQMl9WTElNSVRUT19PRkZTRVQJMHgwMGRjCisjZGVmaW5lIE9NQVAzNDMwX1BSTV9WUDJfVkxJTUlUVE8JT01BUDM0WFhfUFJNX1JFR0FERFIoT01BUDM0MzBfR1JfTU9ELCAweDAwZGMpCisjZGVmaW5lIE9NQVAzX1BSTV9WUDJfVk9MVEFHRV9PRkZTRVQJMHgwMGUwCisjZGVmaW5lIE9NQVAzNDMwX1BSTV9WUDJfVk9MVEFHRQlPTUFQMzRYWF9QUk1fUkVHQUREUihPTUFQMzQzMF9HUl9NT0QsIDB4MDBlMCkKKyNkZWZpbmUgT01BUDNfUFJNX1ZQMl9TVEFUVVNfT0ZGU0VUCTB4MDBlNAorI2RlZmluZSBPTUFQMzQzMF9QUk1fVlAyX1NUQVRVUwkJT01BUDM0WFhfUFJNX1JFR0FERFIoT01BUDM0MzBfR1JfTU9ELCAweDAwZTQpCisKKyNkZWZpbmUgT01BUDNfUFJNX0NMS1NFTF9PRkZTRVQJMHgwMDQwCisjZGVmaW5lIE9NQVAzNDMwX1BSTV9DTEtTRUwJCU9NQVAzNFhYX1BSTV9SRUdBRERSKE9NQVAzNDMwX0NDUl9NT0QsIDB4MDA0MCkKKyNkZWZpbmUgT01BUDNfUFJNX0NMS09VVF9DVFJMX09GRlNFVAkweDAwNzAKKyNkZWZpbmUgT01BUDM0MzBfUFJNX0NMS09VVF9DVFJMCU9NQVAzNFhYX1BSTV9SRUdBRERSKE9NQVAzNDMwX0NDUl9NT0QsIDB4MDA3MCkKKworLyoKKyAqIE1vZHVsZSBzcGVjaWZpYyBQUk0gcmVnaXN0ZXIgb2Zmc2V0cyBmcm9tIFBSTV9CQVNFICsgZG9tYWluIG9mZnNldAorICoKKyAqIFVzZSBwcm1fe3JlYWQsd3JpdGV9X21vZF9yZWcoKSB3aXRoIHRoZXNlIHJlZ2lzdGVycy4KKyAqCisgKiBXaXRoIGEgZmV3IGV4Y2VwdGlvbnMsIHRoZXNlIGFyZSB0aGUgcmVnaXN0ZXIgbmFtZXMgYmVnaW5uaW5nIHdpdGgKKyAqIHtQTSxSTX1fKiBvbiBib3RoIE9NQVAyLzMgU29DIGZhbWlsaWVzLi4gIChUaGUgZXhjZXB0aW9ucyBhcmUgdGhlCisgKiBJUlFTVEFUVVMgYW5kIElSUUVOQUJMRSBiaXRzLikKKyAqLworCisvKiBSZWdpc3RlciBvZmZzZXRzIGFwcGVhcmluZyBvbiBib3RoIE9NQVAyIGFuZCBPTUFQMyAqLworCisjZGVmaW5lIE9NQVAyX1JNX1JTVENUUkwJCQkJMHgwMDUwCisjZGVmaW5lIE9NQVAyX1JNX1JTVFRJTUUJCQkJMHgwMDU0CisjZGVmaW5lIE9NQVAyX1JNX1JTVFNUCQkJCQkweDAwNTgKKyNkZWZpbmUgT01BUDJfUE1fUFdTVENUUkwJCQkJMHgwMGUwCisjZGVmaW5lIE9NQVAyX1BNX1BXU1RTVAkJCQkJMHgwMGU0CisKKyNkZWZpbmUgUE1fV0tFTgkJCQkJCTB4MDBhMAorI2RlZmluZSBQTV9XS0VOMQkJCQkJUE1fV0tFTgorI2RlZmluZSBQTV9XS1NUCQkJCQkJMHgwMGIwCisjZGVmaW5lIFBNX1dLU1QxCQkJCQlQTV9XS1NUCisjZGVmaW5lIFBNX1dLREVQCQkJCQkweDAwYzgKKyNkZWZpbmUgUE1fRVZHRU5DVFJMCQkJCQkweDAwZDQKKyNkZWZpbmUgUE1fRVZHRU5PTlRJTQkJCQkJMHgwMGQ4CisjZGVmaW5lIFBNX0VWR0VOT0ZGVElNCQkJCQkweDAwZGMKKworLyogT01BUDJ4eHggc3BlY2lmaWMgcmVnaXN0ZXIgb2Zmc2V0cyAqLworI2RlZmluZSBPTUFQMjRYWF9QTV9XS0VOMgkJCQkweDAwYTQKKyNkZWZpbmUgT01BUDI0WFhfUE1fV0tTVDIJCQkJMHgwMGI0CisKKyNkZWZpbmUgT01BUDI0WFhfUFJDTV9JUlFTVEFUVVNfRFNQCQkJMHgwMGYwCS8qIElWQSBtb2QgKi8KKyNkZWZpbmUgT01BUDI0WFhfUFJDTV9JUlFFTkFCTEVfRFNQCQkJMHgwMGY0CS8qIElWQSBtb2QgKi8KKyNkZWZpbmUgT01BUDI0WFhfUFJDTV9JUlFTVEFUVVNfSVZBCQkJMHgwMGY4CisjZGVmaW5lIE9NQVAyNFhYX1BSQ01fSVJRRU5BQkxFX0lWQQkJCTB4MDBmYworCisvKiBPTUFQMyBzcGVjaWZpYyByZWdpc3RlciBvZmZzZXRzICovCisjZGVmaW5lIE9NQVAzNDMwRVMyX1BNX1dLRU4zCQkJCTB4MDBmMAorI2RlZmluZSBPTUFQMzQzMEVTMl9QTV9XS1NUMwkJCQkweDAwYjgKKworI2RlZmluZSBPTUFQMzQzMF9QTV9NUFVHUlBTRUwJCQkJMHgwMGE0CisjZGVmaW5lIE9NQVAzNDMwX1BNX01QVUdSUFNFTDEJCQkJT01BUDM0MzBfUE1fTVBVR1JQU0VMCisjZGVmaW5lIE9NQVAzNDMwRVMyX1BNX01QVUdSUFNFTDMJCQkweDAwZjgKKworI2RlZmluZSBPTUFQMzQzMF9QTV9JVkFHUlBTRUwJCQkJMHgwMGE4CisjZGVmaW5lIE9NQVAzNDMwX1BNX0lWQUdSUFNFTDEJCQkJT01BUDM0MzBfUE1fSVZBR1JQU0VMCisjZGVmaW5lIE9NQVAzNDMwRVMyX1BNX0lWQUdSUFNFTDMJCQkweDAwZjQKKworI2RlZmluZSBPTUFQMzQzMF9QTV9QUkVQV1NUU1QJCQkJMHgwMGU4CisKKyNkZWZpbmUgT01BUDM0MzBfUFJNX0lSUVNUQVRVU19JVkEyCQkJMHgwMGY4CisjZGVmaW5lIE9NQVAzNDMwX1BSTV9JUlFFTkFCTEVfSVZBMgkJCTB4MDBmYworCisKKyNpZm5kZWYgX19BU1NFTUJMRVJfXworCisvKiBQb3dlci9yZXNldCBtYW5hZ2VtZW50IGRvbWFpbiByZWdpc3RlciBnZXQvc2V0ICovCitleHRlcm4gdTMyIG9tYXAyX3BybV9yZWFkX21vZF9yZWcoczE2IG1vZHVsZSwgdTE2IGlkeCk7CitleHRlcm4gdm9pZCBvbWFwMl9wcm1fd3JpdGVfbW9kX3JlZyh1MzIgdmFsLCBzMTYgbW9kdWxlLCB1MTYgaWR4KTsKK2V4dGVybiB1MzIgb21hcDJfcHJtX3Jtd19tb2RfcmVnX2JpdHModTMyIG1hc2ssIHUzMiBiaXRzLCBzMTYgbW9kdWxlLCBzMTYgaWR4KTsKK2V4dGVybiB1MzIgb21hcDJfcHJtX3NldF9tb2RfcmVnX2JpdHModTMyIGJpdHMsIHMxNiBtb2R1bGUsIHMxNiBpZHgpOworZXh0ZXJuIHUzMiBvbWFwMl9wcm1fY2xlYXJfbW9kX3JlZ19iaXRzKHUzMiBiaXRzLCBzMTYgbW9kdWxlLCBzMTYgaWR4KTsKK2V4dGVybiB1MzIgb21hcDJfcHJtX3JlYWRfbW9kX2JpdHNfc2hpZnQoczE2IGRvbWFpbiwgczE2IGlkeCwgdTMyIG1hc2spOworCisvKiBUaGVzZSBvbWFwMl8gUFJNIGZ1bmN0aW9ucyBhcHBseSB0byBib3RoIE9NQVAyIGFuZCAzICovCitleHRlcm4gaW50IG9tYXAyX3BybV9pc19oYXJkcmVzZXRfYXNzZXJ0ZWQoczE2IHBybV9tb2QsIHU4IHNoaWZ0KTsKK2V4dGVybiBpbnQgb21hcDJfcHJtX2Fzc2VydF9oYXJkcmVzZXQoczE2IHBybV9tb2QsIHU4IHNoaWZ0KTsKK2V4dGVybiBpbnQgb21hcDJfcHJtX2RlYXNzZXJ0X2hhcmRyZXNldChzMTYgcHJtX21vZCwgdTggc2hpZnQpOworCisjZW5kaWYKKworLyoKKyAqIEJpdHMgY29tbW9uIHRvIHNwZWNpZmljIHJlZ2lzdGVycworICoKKyAqIFRoZSAzNDMwIHJlZ2lzdGVyIGFuZCBiaXQgbmFtZXMgYXJlIGdlbmVyYWxseSB1c2VkLAorICogc2luY2UgdGhleSB0ZW5kIHRvIG1ha2UgbW9yZSBzZW5zZQorICovCisKKy8qIFBNX0VWR0VOT05USU1fTVBVICovCisvKiBOYW1lZCBQTV9FVkVHRU5PTlRJTV9NUFUgb24gdGhlIDI0WFggKi8KKyNkZWZpbmUgT01BUF9PTlRJTUVWQUxfU0hJRlQJCQkJMAorI2RlZmluZSBPTUFQX09OVElNRVZBTF9NQVNLCQkJCSgweGZmZmZmZmZmIDw8IDApCisKKy8qIFBNX0VWR0VOT0ZGVElNX01QVSAqLworLyogTmFtZWQgUE1fRVZFR0VOT0ZGVElNX01QVSBvbiB0aGUgMjRYWCAqLworI2RlZmluZSBPTUFQX09GRlRJTUVWQUxfU0hJRlQJCQkJMAorI2RlZmluZSBPTUFQX09GRlRJTUVWQUxfTUFTSwkJCQkoMHhmZmZmZmZmZiA8PCAwKQorCisvKiBQUk1fQ0xLU0VUVVAgYW5kIFBSQ01fVk9MVFNFVFVQICovCisvKiBOYW1lZCBQUkNNX0NMS1NTRVRVUCBvbiB0aGUgMjRYWCAqLworI2RlZmluZSBPTUFQX1NFVFVQX1RJTUVfU0hJRlQJCQkJMAorI2RlZmluZSBPTUFQX1NFVFVQX1RJTUVfTUFTSwkJCQkoMHhmZmZmIDw8IDApCisKKy8qIFBSTV9DTEtTUkNfQ1RSTCAqLworLyogTmFtZWQgUFJDTV9DTEtTUkNfQ1RSTCBvbiB0aGUgMjRYWCAqLworI2RlZmluZSBPTUFQX1NZU0NMS0RJVl9TSElGVAkJCQk2CisjZGVmaW5lIE9NQVBfU1lTQ0xLRElWX01BU0sJCQkJKDB4MyA8PCA2KQorI2RlZmluZSBPTUFQX0FVVE9FWFRDTEtNT0RFX1NISUZUCQkJMworI2RlZmluZSBPTUFQX0FVVE9FWFRDTEtNT0RFX01BU0sJCQkoMHgzIDw8IDMpCisjZGVmaW5lIE9NQVBfU1lTQ0xLU0VMX1NISUZUCQkJCTAKKyNkZWZpbmUgT01BUF9TWVNDTEtTRUxfTUFTSwkJCQkoMHgzIDw8IDApCisKKy8qIFBNX0VWR0VOQ1RSTF9NUFUgKi8KKyNkZWZpbmUgT01BUF9PRkZMT0FETU9ERV9TSElGVAkJCQkzCisjZGVmaW5lIE9NQVBfT0ZGTE9BRE1PREVfTUFTSwkJCQkoMHgzIDw8IDMpCisjZGVmaW5lIE9NQVBfT05MT0FETU9ERV9TSElGVAkJCQkxCisjZGVmaW5lIE9NQVBfT05MT0FETU9ERV9NQVNLCQkJCSgweDMgPDwgMSkKKyNkZWZpbmUgT01BUF9FTkFCTEVfTUFTSwkJCQkoMSA8PCAwKQorCisvKiBQUk1fUlNUVElNRSAqLworLyogTmFtZWQgUk1fUlNUVElNRV9XS1VQIG9uIHRoZSAyNHh4ICovCisjZGVmaW5lIE9NQVBfUlNUVElNRTJfU0hJRlQJCQkJOAorI2RlZmluZSBPTUFQX1JTVFRJTUUyX01BU0sJCQkJKDB4MWYgPDwgOCkKKyNkZWZpbmUgT01BUF9SU1RUSU1FMV9TSElGVAkJCQkwCisjZGVmaW5lIE9NQVBfUlNUVElNRTFfTUFTSwkJCQkoMHhmZiA8PCAwKQorCisvKiBQUk1fUlNUQ1RSTCAqLworLyogTmFtZWQgUk1fUlNUQ1RSTF9XS1VQIG9uIHRoZSAyNHh4ICovCisvKiAyNDIwIGNhbGxzIFJTVF9EUExMMyAnUlNUX0RQTEwnICovCisjZGVmaW5lIE9NQVBfUlNUX0RQTEwzX01BU0sJCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUF9SU1RfR1NfTUFTSwkJCQkoMSA8PCAxKQorCisKKy8qCisgKiBCaXRzIGNvbW1vbiB0byBtb2R1bGUtc2hhcmVkIHJlZ2lzdGVycworICoKKyAqIE5vdCBhbGwgcmVnaXN0ZXJzIG9mIGEgcGFydGljdWxhciB0eXBlIHN1cHBvcnQgYWxsIG9mIHRoZXNlIGJpdHMgLQorICogY2hlY2sgVFJNIGlmIHlvdSBhcmUgdW5zdXJlCisgKi8KKworLyoKKyAqIDI0WFg6IFJNX1JTVFNUX01QVSBhbmQgUk1fUlNUU1RfRFNQIC0gb24gMjRYWCwgJ0NPUkVET01BSU5XS1VQX1JTVCcgaXMKKyAqCSBjYWxsZWQgJ0NPUkVXS1VQX1JTVCcKKyAqCisgKiAzNDMwOiBSTV9SU1RTVF9JVkEyLCBSTV9SU1RTVF9NUFUsIFJNX1JTVFNUX0dGWCwgUk1fUlNUU1RfRFNTLAorICoJIFJNX1JTVFNUX0NBTSwgUk1fUlNUU1RfUEVSLCBSTV9SU1RTVF9ORU9OCisgKi8KKyNkZWZpbmUgT01BUF9DT1JFRE9NQUlOV0tVUF9SU1RfTUFTSwkJCSgxIDw8IDMpCisKKy8qCisgKiAyNFhYOiBSTV9SU1RTVF9NUFUsIFJNX1JTVFNUX0dGWCwgUk1fUlNUU1RfRFNQCisgKgorICogMjQzMDogUk1fUlNUU1RfTURNCisgKgorICogMzQzMDogUk1fUlNUU1RfQ09SRSwgUk1fUlNUU1RfRU1VCisgKi8KKyNkZWZpbmUgT01BUF9ET01BSU5XS1VQX1JTVF9NQVNLCQkJKDEgPDwgMikKKworLyoKKyAqIDI0WFg6IFJNX1JTVFNUX01QVSwgUk1fUlNUU1RfV0tVUCwgUk1fUlNUU1RfRFNQCisgKgkgT24gMjRYWCwgJ0dMT0JBTFdBUk1fUlNUJyBpcyBjYWxsZWQgJ0dMT0JBTFdNUFVfUlNUJy4KKyAqCisgKiAyNDMwOiBSTV9SU1RTVF9NRE0KKyAqCisgKiAzNDMwOiBSTV9SU1RTVF9DT1JFLCBSTV9SU1RTVF9FTVUKKyAqLworI2RlZmluZSBPTUFQX0dMT0JBTFdBUk1fUlNUX01BU0sJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQX0dMT0JBTENPTERfUlNUX01BU0sJCQkoMSA8PCAwKQorCisvKgorICogMjRYWDogUE1fV0tERVBfR0ZYLCBQTV9XS0RFUF9NUFUsIFBNX1dLREVQX0NPUkUsIFBNX1dLREVQX0RTUAorICoJIDI0MjAgVFJNIHNvbWV0aW1lcyB1c2VzICJFTl9XQUtFVVAiIGluc3RlYWQgb2YgIkVOX1dLVVAiCisgKgorICogMjQzMDogUE1fV0tERVBfTURNCisgKgorICogMzQzMDogUE1fV0tERVBfSVZBMiwgUE1fV0tERVBfR0ZYLCBQTV9XS0RFUF9EU1MsIFBNX1dLREVQX0NBTSwKKyAqCSBQTV9XS0RFUF9QRVIKKyAqLworI2RlZmluZSBPTUFQX0VOX1dLVVBfU0hJRlQJCQkJNAorI2RlZmluZSBPTUFQX0VOX1dLVVBfTUFTSwkJCQkoMSA8PCA0KQorCisvKgorICogMjRYWDogUE1fUFdTVENUUkxfTVBVLCBQTV9QV1NUQ1RSTF9DT1JFLCBQTV9QV1NUQ1RSTF9HRlgsCisgKgkgUE1fUFdTVENUUkxfRFNQCisgKgorICogMjQzMDogUE1fUFdTVENUUkxfTURNCisgKgorICogMzQzMDogUE1fUFdTVENUUkxfSVZBMiwgUE1fUFdTVENUUkxfQ09SRSwgUE1fUFdTVENUUkxfR0ZYLAorICoJIFBNX1BXU1RDVFJMX0RTUywgUE1fUFdTVENUUkxfQ0FNLCBQTV9QV1NUQ1RSTF9QRVIsCisgKgkgUE1fUFdTVENUUkxfTkVPTgorICovCisjZGVmaW5lIE9NQVBfTE9HSUNSRVRTVEFURV9NQVNLCQkJCSgxIDw8IDIpCisKKworLyoKKyAqIE1BWF9NT0RVTEVfSEFSRFJFU0VUX1dBSVQ6IE1heGltdW0gbWljcm9zZWNvbmRzIHRvIHdhaXQgZm9yIGFuIE9NQVAKKyAqIHN1Ym1vZHVsZSB0byBleGl0IGhhcmRyZXNldAorICovCisjZGVmaW5lIE1BWF9NT0RVTEVfSEFSRFJFU0VUX1dBSVQJCTEwMDAwCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BybTQ0eHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtNDR4eC5jCmluZGV4IGExZmY5MTguLmEyYTA0YmZhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BybTQ0eHguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BybTQ0eHguYwpAQCAtMTUsMTIgKzE1LDEzIEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKICNpbmNsdWRlIDxwbGF0L2NvbW1vbi5oPgogI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAjaW5jbHVkZSA8cGxhdC9wcmNtLmg+CiAKLSNpbmNsdWRlICJwcm0uaCIKKyNpbmNsdWRlICJwcm00NHh4LmgiCiAjaW5jbHVkZSAicHJtLXJlZ2JpdHMtNDR4eC5oIgogCiAvKgpAQCAtMjksNiArMzAsNzAgQEAKICAqLwogI2RlZmluZSBPTUFQNF9SU1RfQ1RSTF9TVF9PRkZTRVQJCTQKIAorLyogUFJNIGxvdy1sZXZlbCBmdW5jdGlvbnMgKi8KKworLyogUmVhZCBhIHJlZ2lzdGVyIGluIGEgQ00vUFJNIGluc3RhbmNlIGluIHRoZSBQUk0gbW9kdWxlICovCit1MzIgb21hcDRfcHJtX3JlYWRfaW5zdF9yZWcoczE2IGluc3QsIHUxNiByZWcpCit7CisJcmV0dXJuIF9fcmF3X3JlYWRsKE9NQVA0NFhYX1BSTV9SRUdBRERSKGluc3QsIHJlZykpOworfQorCisvKiBXcml0ZSBpbnRvIGEgcmVnaXN0ZXIgaW4gYSBDTS9QUk0gaW5zdGFuY2UgaW4gdGhlIFBSTSBtb2R1bGUgKi8KK3ZvaWQgb21hcDRfcHJtX3dyaXRlX2luc3RfcmVnKHUzMiB2YWwsIHMxNiBpbnN0LCB1MTYgcmVnKQoreworCV9fcmF3X3dyaXRlbCh2YWwsIE9NQVA0NFhYX1BSTV9SRUdBRERSKGluc3QsIHJlZykpOworfQorCisvKiBSZWFkLW1vZGlmeS13cml0ZSBhIHJlZ2lzdGVyIGluIGEgUFJNIG1vZHVsZS4gQ2FsbGVyIG11c3QgbG9jayAqLwordTMyIG9tYXA0X3BybV9ybXdfaW5zdF9yZWdfYml0cyh1MzIgbWFzaywgdTMyIGJpdHMsIHMxNiBpbnN0LCBzMTYgcmVnKQoreworCXUzMiB2OworCisJdiA9IG9tYXA0X3BybV9yZWFkX2luc3RfcmVnKGluc3QsIHJlZyk7CisJdiAmPSB+bWFzazsKKwl2IHw9IGJpdHM7CisJb21hcDRfcHJtX3dyaXRlX2luc3RfcmVnKHYsIGluc3QsIHJlZyk7CisKKwlyZXR1cm4gdjsKK30KKworLyogUmVhZCBhIFBSTSByZWdpc3RlciwgQU5EIGl0LCBhbmQgc2hpZnQgdGhlIHJlc3VsdCBkb3duIHRvIGJpdCAwICovCisvKiBYWFggZGVwcmVjYXRlZCAqLwordTMyIG9tYXA0X3BybV9yZWFkX2JpdHNfc2hpZnQodm9pZCBfX2lvbWVtICpyZWcsIHUzMiBtYXNrKQoreworCXUzMiB2OworCisJdiA9IF9fcmF3X3JlYWRsKHJlZyk7CisJdiAmPSBtYXNrOworCXYgPj49IF9fZmZzKG1hc2spOworCisJcmV0dXJuIHY7Cit9CisKKy8qIFJlYWQtbW9kaWZ5LXdyaXRlIGEgcmVnaXN0ZXIgaW4gYSBQUk0gbW9kdWxlLiBDYWxsZXIgbXVzdCBsb2NrICovCisvKiBYWFggZGVwcmVjYXRlZCAqLwordTMyIG9tYXA0X3BybV9ybXdfcmVnX2JpdHModTMyIG1hc2ssIHUzMiBiaXRzLCB2b2lkIF9faW9tZW0gKnJlZykKK3sKKwl1MzIgdjsKKworCXYgPSBfX3Jhd19yZWFkbChyZWcpOworCXYgJj0gfm1hc2s7CisJdiB8PSBiaXRzOworCV9fcmF3X3dyaXRlbCh2LCByZWcpOworCisJcmV0dXJuIHY7Cit9CisKK3UzMiBvbWFwNF9wcm1fc2V0X2luc3RfcmVnX2JpdHModTMyIGJpdHMsIHMxNiBpbnN0LCBzMTYgcmVnKQoreworCXJldHVybiBvbWFwNF9wcm1fcm13X2luc3RfcmVnX2JpdHMoYml0cywgYml0cywgaW5zdCwgcmVnKTsKK30KKwordTMyIG9tYXA0X3BybV9jbGVhcl9pbnN0X3JlZ19iaXRzKHUzMiBiaXRzLCBzMTYgaW5zdCwgczE2IHJlZykKK3sKKwlyZXR1cm4gb21hcDRfcHJtX3Jtd19pbnN0X3JlZ19iaXRzKGJpdHMsIDB4MCwgaW5zdCwgcmVnKTsKK30KKwogLyoqCiAgKiBvbWFwNF9wcm1faXNfaGFyZHJlc2V0X2Fzc2VydGVkIC0gcmVhZCB0aGUgSFcgcmVzZXQgbGluZSBzdGF0ZSBvZgogICogc3VibW9kdWxlcyBjb250YWluZWQgaW4gdGhlIGh3bW9kIG1vZHVsZQpAQCAtMTE0LDMgKzE3OSwxNyBAQAogCXJldHVybiAoYyA9PSBNQVhfTU9EVUxFX0hBUkRSRVNFVF9XQUlUKSA/IC1FQlVTWSA6IDA7CiB9CiAKK3ZvaWQgb21hcDRfcHJtX2dsb2JhbF93YXJtX3N3X3Jlc2V0KHZvaWQpCit7CisJdTMyIHY7CisKKwl2ID0gb21hcDRfcHJtX3JlYWRfaW5zdF9yZWcoT01BUDQ0MzBfUFJNX0RFVklDRV9JTlNULAorCQkJCSAgICBPTUFQNF9STV9SU1RDVFJMKTsKKwl2IHw9IE9NQVA0NDMwX1JTVF9HTE9CQUxfV0FSTV9TV19NQVNLOworCW9tYXA0X3BybV93cml0ZV9pbnN0X3JlZyh2LCBPTUFQNDQzMF9QUk1fREVWSUNFX0lOU1QsCisJCQkJIE9NQVA0X1JNX1JTVENUUkwpOworCisJLyogT0NQIGJhcnJpZXIgKi8KKwl2ID0gb21hcDRfcHJtX3JlYWRfaW5zdF9yZWcoT01BUDQ0MzBfUFJNX0RFVklDRV9JTlNULAorCQkJCSAgICBPTUFQNF9STV9SU1RDVFJMKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtNDR4eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm00NHh4LmgKaW5kZXggNTk4MzlkYi4uNjdhMGQzZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm00NHh4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm00NHh4LmgKQEAgLTE3LDczNiArMTcsNzYyIEBACiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFhYWCBUaGlzIGZpbGUgbmVlZHMgdG8gYmUgdXBkYXRlZCB0byBhbGlnbiBvbiBvbmUgb2YgIk9NQVA0IiwgIk9NQVA0NFhYIiwKKyAqICAgICBvciAiT01BUDQ0MzAiLgogICovCiAKICNpZm5kZWYgX19BUkNIX0FSTV9NQUNIX09NQVAyX1BSTTQ0WFhfSAogI2RlZmluZSBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfUFJNNDRYWF9ICiAKKyNpbmNsdWRlICJwcmNtLWNvbW1vbi5oIgorI2luY2x1ZGUgInBybS5oIgorCisjZGVmaW5lIE9NQVA0NDMwX1BSTV9CQVNFCQkweDRhMzA2MDAwCisKKyNkZWZpbmUgT01BUDQ0WFhfUFJNX1JFR0FERFIoaW5zdCwgcmVnKQkJCQlcCisJT01BUDJfTDRfSU9fQUREUkVTUyhPTUFQNDQzMF9QUk1fQkFTRSArCShpbnN0KSArIChyZWcpKQorCisKKy8qIFBSTSBpbnN0YW5jZXMgKi8KKyNkZWZpbmUgT01BUDQ0MzBfUFJNX09DUF9TT0NLRVRfSU5TVAkweDAwMDAKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX0NLR0VOX0lOU1QJCTB4MDEwMAorI2RlZmluZSBPTUFQNDQzMF9QUk1fTVBVX0lOU1QJCTB4MDMwMAorI2RlZmluZSBPTUFQNDQzMF9QUk1fVEVTTEFfSU5TVAkJMHgwNDAwCisjZGVmaW5lIE9NQVA0NDMwX1BSTV9BQkVfSU5TVAkJMHgwNTAwCisjZGVmaW5lIE9NQVA0NDMwX1BSTV9BTFdBWVNfT05fSU5TVAkweDA2MDAKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX0NPUkVfSU5TVAkJMHgwNzAwCisjZGVmaW5lIE9NQVA0NDMwX1BSTV9JVkFIRF9JTlNUCQkweDBmMDAKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX0NBTV9JTlNUCQkweDEwMDAKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX0RTU19JTlNUCQkweDExMDAKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX0dGWF9JTlNUCQkweDEyMDAKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX0wzSU5JVF9JTlNUCQkweDEzMDAKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX0w0UEVSX0lOU1QJCTB4MTQwMAorI2RlZmluZSBPTUFQNDQzMF9QUk1fQ0VGVVNFX0lOU1QJCTB4MTYwMAorI2RlZmluZSBPTUFQNDQzMF9QUk1fV0tVUF9JTlNUCQkweDE3MDAKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX1dLVVBfQ01fSU5TVAkweDE4MDAKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX0VNVV9JTlNUCQkweDE5MDAKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX0VNVV9DTV9JTlNUCQkweDFhMDAKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX0RFVklDRV9JTlNUCQkweDFiMDAKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX0lOU1RSX0lOU1QJCTB4MWYwMAorCisvKiBQUk0gY2xvY2tkb21haW4gcmVnaXN0ZXIgb2Zmc2V0cyAoZnJvbSBpbnN0YW5jZSBzdGFydCkgKi8KKyNkZWZpbmUgT01BUDQ0MzBfUFJNX01QVV9NUFVfQ0RPRkZTCQkweDAwMDAKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX1RFU0xBX1RFU0xBX0NET0ZGUwkJMHgwMDAwCisjZGVmaW5lIE9NQVA0NDMwX1BSTV9BQkVfQUJFX0NET0ZGUwkJMHgwMDAwCisjZGVmaW5lIE9NQVA0NDMwX1BSTV9DT1JFX0NPUkVfQ0RPRkZTCQkweDAwMDAKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX0lWQUhEX0lWQUhEX0NET0ZGUwkJMHgwMDAwCisjZGVmaW5lIE9NQVA0NDMwX1BSTV9DQU1fQ0FNX0NET0ZGUwkJMHgwMDAwCisjZGVmaW5lIE9NQVA0NDMwX1BSTV9EU1NfRFNTX0NET0ZGUwkJMHgwMDAwCisjZGVmaW5lIE9NQVA0NDMwX1BSTV9HRlhfR0ZYX0NET0ZGUwkJMHgwMDAwCisjZGVmaW5lIE9NQVA0NDMwX1BSTV9MM0lOSVRfTDNJTklUX0NET0ZGUwkweDAwMDAKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX0w0UEVSX0w0UEVSX0NET0ZGUwkJMHgwMDAwCisjZGVmaW5lIE9NQVA0NDMwX1BSTV9DRUZVU0VfQ0VGVVNFX0NET0ZGUwkweDAwMDAKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX1dLVVBfQ01fV0tVUF9DRE9GRlMJMHgwMDAwCisjZGVmaW5lIE9NQVA0NDMwX1BSTV9FTVVfRU1VX0NET0ZGUwkJMHgwMDAwCisjZGVmaW5lIE9NQVA0NDMwX1BSTV9FTVVfQ01fRU1VX0NET0ZGUwkJMHgwMDAwCisKKy8qIE9NQVA0IHNwZWNpZmljIHJlZ2lzdGVyIG9mZnNldHMgKi8KKyNkZWZpbmUgT01BUDRfUk1fUlNUQ1RSTAkJCQkweDAwMDAKKyNkZWZpbmUgT01BUDRfUk1fUlNUVElNRQkJCQkweDAwMDQKKyNkZWZpbmUgT01BUDRfUk1fUlNUU1QJCQkJCTB4MDAwOAorI2RlZmluZSBPTUFQNF9QTV9QV1NUQ1RSTAkJCQkweDAwMDAKKyNkZWZpbmUgT01BUDRfUE1fUFdTVFNUCQkJCQkweDAwMDQKKwogCiAvKiBQUk0gKi8KIAogLyogUFJNLk9DUF9TT0NLRVRfUFJNIHJlZ2lzdGVyIG9mZnNldHMgKi8KICNkZWZpbmUgT01BUDRfUkVWSVNJT05fUFJNX09GRlNFVAkJCTB4MDAwMAotI2RlZmluZSBPTUFQNDQzMF9SRVZJU0lPTl9QUk0JCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX09DUF9TT0NLRVRfTU9ELCAweDAwMDApCisjZGVmaW5lIE9NQVA0NDMwX1JFVklTSU9OX1BSTQkJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fT0NQX1NPQ0tFVF9JTlNULCAweDAwMDApCiAjZGVmaW5lIE9NQVA0X1BSTV9JUlFTVEFUVVNfTVBVX09GRlNFVAkJCTB4MDAxMAotI2RlZmluZSBPTUFQNDQzMF9QUk1fSVJRU1RBVFVTX01QVQkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9PQ1BfU09DS0VUX01PRCwgMHgwMDEwKQorI2RlZmluZSBPTUFQNDQzMF9QUk1fSVJRU1RBVFVTX01QVQkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9PQ1BfU09DS0VUX0lOU1QsIDB4MDAxMCkKICNkZWZpbmUgT01BUDRfUFJNX0lSUVNUQVRVU19NUFVfMl9PRkZTRVQJCTB4MDAxNAotI2RlZmluZSBPTUFQNDQzMF9QUk1fSVJRU1RBVFVTX01QVV8yCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX09DUF9TT0NLRVRfTU9ELCAweDAwMTQpCisjZGVmaW5lIE9NQVA0NDMwX1BSTV9JUlFTVEFUVVNfTVBVXzIJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fT0NQX1NPQ0tFVF9JTlNULCAweDAwMTQpCiAjZGVmaW5lIE9NQVA0X1BSTV9JUlFFTkFCTEVfTVBVX09GRlNFVAkJCTB4MDAxOAotI2RlZmluZSBPTUFQNDQzMF9QUk1fSVJRRU5BQkxFX01QVQkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9PQ1BfU09DS0VUX01PRCwgMHgwMDE4KQorI2RlZmluZSBPTUFQNDQzMF9QUk1fSVJRRU5BQkxFX01QVQkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9PQ1BfU09DS0VUX0lOU1QsIDB4MDAxOCkKICNkZWZpbmUgT01BUDRfUFJNX0lSUUVOQUJMRV9NUFVfMl9PRkZTRVQJCTB4MDAxYwotI2RlZmluZSBPTUFQNDQzMF9QUk1fSVJRRU5BQkxFX01QVV8yCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX09DUF9TT0NLRVRfTU9ELCAweDAwMWMpCisjZGVmaW5lIE9NQVA0NDMwX1BSTV9JUlFFTkFCTEVfTVBVXzIJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fT0NQX1NPQ0tFVF9JTlNULCAweDAwMWMpCiAjZGVmaW5lIE9NQVA0X1BSTV9JUlFTVEFUVVNfRFVDQVRJX09GRlNFVAkJMHgwMDIwCi0jZGVmaW5lIE9NQVA0NDMwX1BSTV9JUlFTVEFUVVNfRFVDQVRJCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX09DUF9TT0NLRVRfTU9ELCAweDAwMjApCisjZGVmaW5lIE9NQVA0NDMwX1BSTV9JUlFTVEFUVVNfRFVDQVRJCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX09DUF9TT0NLRVRfSU5TVCwgMHgwMDIwKQogI2RlZmluZSBPTUFQNF9QUk1fSVJRRU5BQkxFX0RVQ0FUSV9PRkZTRVQJCTB4MDAyOAotI2RlZmluZSBPTUFQNDQzMF9QUk1fSVJRRU5BQkxFX0RVQ0FUSQkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9PQ1BfU09DS0VUX01PRCwgMHgwMDI4KQorI2RlZmluZSBPTUFQNDQzMF9QUk1fSVJRRU5BQkxFX0RVQ0FUSQkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9PQ1BfU09DS0VUX0lOU1QsIDB4MDAyOCkKICNkZWZpbmUgT01BUDRfUFJNX0lSUVNUQVRVU19URVNMQV9PRkZTRVQJCTB4MDAzMAotI2RlZmluZSBPTUFQNDQzMF9QUk1fSVJRU1RBVFVTX1RFU0xBCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX09DUF9TT0NLRVRfTU9ELCAweDAwMzApCisjZGVmaW5lIE9NQVA0NDMwX1BSTV9JUlFTVEFUVVNfVEVTTEEJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fT0NQX1NPQ0tFVF9JTlNULCAweDAwMzApCiAjZGVmaW5lIE9NQVA0X1BSTV9JUlFFTkFCTEVfVEVTTEFfT0ZGU0VUCQkweDAwMzgKLSNkZWZpbmUgT01BUDQ0MzBfUFJNX0lSUUVOQUJMRV9URVNMQQkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9PQ1BfU09DS0VUX01PRCwgMHgwMDM4KQorI2RlZmluZSBPTUFQNDQzMF9QUk1fSVJRRU5BQkxFX1RFU0xBCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX09DUF9TT0NLRVRfSU5TVCwgMHgwMDM4KQogI2RlZmluZSBPTUFQNF9DTV9QUk1fUFJPRklMSU5HX0NMS0NUUkxfT0ZGU0VUCQkweDAwNDAKLSNkZWZpbmUgT01BUDQ0MzBfQ01fUFJNX1BST0ZJTElOR19DTEtDVFJMCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fT0NQX1NPQ0tFVF9NT0QsIDB4MDA0MCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fUFJNX1BST0ZJTElOR19DTEtDVFJMCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fT0NQX1NPQ0tFVF9JTlNULCAweDAwNDApCiAKIC8qIFBSTS5DS0dFTl9QUk0gcmVnaXN0ZXIgb2Zmc2V0cyAqLwogI2RlZmluZSBPTUFQNF9DTV9BQkVfRFNTX1NZU19DTEtTRUxfT0ZGU0VUCQkweDAwMDAKLSNkZWZpbmUgT01BUDQ0MzBfQ01fQUJFX0RTU19TWVNfQ0xLU0VMCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0NLR0VOX01PRCwgMHgwMDAwKQorI2RlZmluZSBPTUFQNDQzMF9DTV9BQkVfRFNTX1NZU19DTEtTRUwJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQ0tHRU5fSU5TVCwgMHgwMDAwKQogI2RlZmluZSBPTUFQNF9DTV9MNF9XS1VQX0NMS1NFTF9PRkZTRVQJCQkweDAwMDgKLSNkZWZpbmUgT01BUDQ0MzBfQ01fTDRfV0tVUF9DTEtTRUwJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQ0tHRU5fTU9ELCAweDAwMDgpCisjZGVmaW5lIE9NQVA0NDMwX0NNX0w0X1dLVVBfQ0xLU0VMCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0NLR0VOX0lOU1QsIDB4MDAwOCkKICNkZWZpbmUgT01BUDRfQ01fQUJFX1BMTF9SRUZfQ0xLU0VMX09GRlNFVAkJMHgwMDBjCi0jZGVmaW5lIE9NQVA0NDMwX0NNX0FCRV9QTExfUkVGX0NMS1NFTAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9DS0dFTl9NT0QsIDB4MDAwYykKKyNkZWZpbmUgT01BUDQ0MzBfQ01fQUJFX1BMTF9SRUZfQ0xLU0VMCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0NLR0VOX0lOU1QsIDB4MDAwYykKICNkZWZpbmUgT01BUDRfQ01fU1lTX0NMS1NFTF9PRkZTRVQJCQkweDAwMTAKLSNkZWZpbmUgT01BUDQ0MzBfQ01fU1lTX0NMS1NFTAkJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQ0tHRU5fTU9ELCAweDAwMTApCisjZGVmaW5lIE9NQVA0NDMwX0NNX1NZU19DTEtTRUwJCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0NLR0VOX0lOU1QsIDB4MDAxMCkKIAogLyogUFJNLk1QVV9QUk0gcmVnaXN0ZXIgb2Zmc2V0cyAqLwogI2RlZmluZSBPTUFQNF9QTV9NUFVfUFdSU1RDVFJMX09GRlNFVAkJCTB4MDAwMAotI2RlZmluZSBPTUFQNDQzMF9QTV9NUFVfUFdSU1RDVFJMCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX01QVV9NT0QsIDB4MDAwMCkKKyNkZWZpbmUgT01BUDQ0MzBfUE1fTVBVX1BXUlNUQ1RSTAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9NUFVfSU5TVCwgMHgwMDAwKQogI2RlZmluZSBPTUFQNF9QTV9NUFVfUFdSU1RTVF9PRkZTRVQJCQkweDAwMDQKLSNkZWZpbmUgT01BUDQ0MzBfUE1fTVBVX1BXUlNUU1QJCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX01QVV9NT0QsIDB4MDAwNCkKKyNkZWZpbmUgT01BUDQ0MzBfUE1fTVBVX1BXUlNUU1QJCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX01QVV9JTlNULCAweDAwMDQpCiAjZGVmaW5lIE9NQVA0X1JNX01QVV9SU1RTVF9PRkZTRVQJCQkweDAwMTQKLSNkZWZpbmUgT01BUDQ0MzBfUk1fTVBVX1JTVFNUCQkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9NUFVfTU9ELCAweDAwMTQpCisjZGVmaW5lIE9NQVA0NDMwX1JNX01QVV9SU1RTVAkJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTVBVX0lOU1QsIDB4MDAxNCkKICNkZWZpbmUgT01BUDRfUk1fTVBVX01QVV9DT05URVhUX09GRlNFVAkJCTB4MDAyNAotI2RlZmluZSBPTUFQNDQzMF9STV9NUFVfTVBVX0NPTlRFWFQJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTVBVX01PRCwgMHgwMDI0KQorI2RlZmluZSBPTUFQNDQzMF9STV9NUFVfTVBVX0NPTlRFWFQJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTVBVX0lOU1QsIDB4MDAyNCkKIAogLyogUFJNLlRFU0xBX1BSTSByZWdpc3RlciBvZmZzZXRzICovCiAjZGVmaW5lIE9NQVA0X1BNX1RFU0xBX1BXUlNUQ1RSTF9PRkZTRVQJCQkweDAwMDAKLSNkZWZpbmUgT01BUDQ0MzBfUE1fVEVTTEFfUFdSU1RDVFJMCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX1RFU0xBX01PRCwgMHgwMDAwKQorI2RlZmluZSBPTUFQNDQzMF9QTV9URVNMQV9QV1JTVENUUkwJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fVEVTTEFfSU5TVCwgMHgwMDAwKQogI2RlZmluZSBPTUFQNF9QTV9URVNMQV9QV1JTVFNUX09GRlNFVAkJCTB4MDAwNAotI2RlZmluZSBPTUFQNDQzMF9QTV9URVNMQV9QV1JTVFNUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX1RFU0xBX01PRCwgMHgwMDA0KQorI2RlZmluZSBPTUFQNDQzMF9QTV9URVNMQV9QV1JTVFNUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX1RFU0xBX0lOU1QsIDB4MDAwNCkKICNkZWZpbmUgT01BUDRfUk1fVEVTTEFfUlNUQ1RSTF9PRkZTRVQJCQkweDAwMTAKLSNkZWZpbmUgT01BUDQ0MzBfUk1fVEVTTEFfUlNUQ1RSTAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9URVNMQV9NT0QsIDB4MDAxMCkKKyNkZWZpbmUgT01BUDQ0MzBfUk1fVEVTTEFfUlNUQ1RSTAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9URVNMQV9JTlNULCAweDAwMTApCiAjZGVmaW5lIE9NQVA0X1JNX1RFU0xBX1JTVFNUX09GRlNFVAkJCTB4MDAxNAotI2RlZmluZSBPTUFQNDQzMF9STV9URVNMQV9SU1RTVAkJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fVEVTTEFfTU9ELCAweDAwMTQpCisjZGVmaW5lIE9NQVA0NDMwX1JNX1RFU0xBX1JTVFNUCQkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9URVNMQV9JTlNULCAweDAwMTQpCiAjZGVmaW5lIE9NQVA0X1JNX1RFU0xBX1RFU0xBX0NPTlRFWFRfT0ZGU0VUCQkweDAwMjQKLSNkZWZpbmUgT01BUDQ0MzBfUk1fVEVTTEFfVEVTTEFfQ09OVEVYVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9URVNMQV9NT0QsIDB4MDAyNCkKKyNkZWZpbmUgT01BUDQ0MzBfUk1fVEVTTEFfVEVTTEFfQ09OVEVYVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9URVNMQV9JTlNULCAweDAwMjQpCiAKIC8qIFBSTS5BQkVfUFJNIHJlZ2lzdGVyIG9mZnNldHMgKi8KICNkZWZpbmUgT01BUDRfUE1fQUJFX1BXUlNUQ1RSTF9PRkZTRVQJCQkweDAwMDAKLSNkZWZpbmUgT01BUDQ0MzBfUE1fQUJFX1BXUlNUQ1RSTAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9BQkVfTU9ELCAweDAwMDApCisjZGVmaW5lIE9NQVA0NDMwX1BNX0FCRV9QV1JTVENUUkwJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQUJFX0lOU1QsIDB4MDAwMCkKICNkZWZpbmUgT01BUDRfUE1fQUJFX1BXUlNUU1RfT0ZGU0VUCQkJMHgwMDA0Ci0jZGVmaW5lIE9NQVA0NDMwX1BNX0FCRV9QV1JTVFNUCQkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9BQkVfTU9ELCAweDAwMDQpCisjZGVmaW5lIE9NQVA0NDMwX1BNX0FCRV9QV1JTVFNUCQkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9BQkVfSU5TVCwgMHgwMDA0KQogI2RlZmluZSBPTUFQNF9STV9BQkVfQUVTU19DT05URVhUX09GRlNFVAkJMHgwMDJjCi0jZGVmaW5lIE9NQVA0NDMwX1JNX0FCRV9BRVNTX0NPTlRFWFQJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQUJFX01PRCwgMHgwMDJjKQorI2RlZmluZSBPTUFQNDQzMF9STV9BQkVfQUVTU19DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0FCRV9JTlNULCAweDAwMmMpCiAjZGVmaW5lIE9NQVA0X1BNX0FCRV9QRE1fV0tERVBfT0ZGU0VUCQkJMHgwMDMwCi0jZGVmaW5lIE9NQVA0NDMwX1BNX0FCRV9QRE1fV0tERVAJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQUJFX01PRCwgMHgwMDMwKQorI2RlZmluZSBPTUFQNDQzMF9QTV9BQkVfUERNX1dLREVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0FCRV9JTlNULCAweDAwMzApCiAjZGVmaW5lIE9NQVA0X1JNX0FCRV9QRE1fQ09OVEVYVF9PRkZTRVQJCQkweDAwMzQKLSNkZWZpbmUgT01BUDQ0MzBfUk1fQUJFX1BETV9DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0FCRV9NT0QsIDB4MDAzNCkKKyNkZWZpbmUgT01BUDQ0MzBfUk1fQUJFX1BETV9DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0FCRV9JTlNULCAweDAwMzQpCiAjZGVmaW5lIE9NQVA0X1BNX0FCRV9ETUlDX1dLREVQX09GRlNFVAkJCTB4MDAzOAotI2RlZmluZSBPTUFQNDQzMF9QTV9BQkVfRE1JQ19XS0RFUAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9BQkVfTU9ELCAweDAwMzgpCisjZGVmaW5lIE9NQVA0NDMwX1BNX0FCRV9ETUlDX1dLREVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0FCRV9JTlNULCAweDAwMzgpCiAjZGVmaW5lIE9NQVA0X1JNX0FCRV9ETUlDX0NPTlRFWFRfT0ZGU0VUCQkweDAwM2MKLSNkZWZpbmUgT01BUDQ0MzBfUk1fQUJFX0RNSUNfQ09OVEVYVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9BQkVfTU9ELCAweDAwM2MpCisjZGVmaW5lIE9NQVA0NDMwX1JNX0FCRV9ETUlDX0NPTlRFWFQJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQUJFX0lOU1QsIDB4MDAzYykKICNkZWZpbmUgT01BUDRfUE1fQUJFX01DQVNQX1dLREVQX09GRlNFVAkJCTB4MDA0MAotI2RlZmluZSBPTUFQNDQzMF9QTV9BQkVfTUNBU1BfV0tERVAJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQUJFX01PRCwgMHgwMDQwKQorI2RlZmluZSBPTUFQNDQzMF9QTV9BQkVfTUNBU1BfV0tERVAJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQUJFX0lOU1QsIDB4MDA0MCkKICNkZWZpbmUgT01BUDRfUk1fQUJFX01DQVNQX0NPTlRFWFRfT0ZGU0VUCQkweDAwNDQKLSNkZWZpbmUgT01BUDQ0MzBfUk1fQUJFX01DQVNQX0NPTlRFWFQJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQUJFX01PRCwgMHgwMDQ0KQorI2RlZmluZSBPTUFQNDQzMF9STV9BQkVfTUNBU1BfQ09OVEVYVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9BQkVfSU5TVCwgMHgwMDQ0KQogI2RlZmluZSBPTUFQNF9QTV9BQkVfTUNCU1AxX1dLREVQX09GRlNFVAkJMHgwMDQ4Ci0jZGVmaW5lIE9NQVA0NDMwX1BNX0FCRV9NQ0JTUDFfV0tERVAJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQUJFX01PRCwgMHgwMDQ4KQorI2RlZmluZSBPTUFQNDQzMF9QTV9BQkVfTUNCU1AxX1dLREVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0FCRV9JTlNULCAweDAwNDgpCiAjZGVmaW5lIE9NQVA0X1JNX0FCRV9NQ0JTUDFfQ09OVEVYVF9PRkZTRVQJCTB4MDA0YwotI2RlZmluZSBPTUFQNDQzMF9STV9BQkVfTUNCU1AxX0NPTlRFWFQJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQUJFX01PRCwgMHgwMDRjKQorI2RlZmluZSBPTUFQNDQzMF9STV9BQkVfTUNCU1AxX0NPTlRFWFQJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQUJFX0lOU1QsIDB4MDA0YykKICNkZWZpbmUgT01BUDRfUE1fQUJFX01DQlNQMl9XS0RFUF9PRkZTRVQJCTB4MDA1MAotI2RlZmluZSBPTUFQNDQzMF9QTV9BQkVfTUNCU1AyX1dLREVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0FCRV9NT0QsIDB4MDA1MCkKKyNkZWZpbmUgT01BUDQ0MzBfUE1fQUJFX01DQlNQMl9XS0RFUAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9BQkVfSU5TVCwgMHgwMDUwKQogI2RlZmluZSBPTUFQNF9STV9BQkVfTUNCU1AyX0NPTlRFWFRfT0ZGU0VUCQkweDAwNTQKLSNkZWZpbmUgT01BUDQ0MzBfUk1fQUJFX01DQlNQMl9DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0FCRV9NT0QsIDB4MDA1NCkKKyNkZWZpbmUgT01BUDQ0MzBfUk1fQUJFX01DQlNQMl9DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0FCRV9JTlNULCAweDAwNTQpCiAjZGVmaW5lIE9NQVA0X1BNX0FCRV9NQ0JTUDNfV0tERVBfT0ZGU0VUCQkweDAwNTgKLSNkZWZpbmUgT01BUDQ0MzBfUE1fQUJFX01DQlNQM19XS0RFUAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9BQkVfTU9ELCAweDAwNTgpCisjZGVmaW5lIE9NQVA0NDMwX1BNX0FCRV9NQ0JTUDNfV0tERVAJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQUJFX0lOU1QsIDB4MDA1OCkKICNkZWZpbmUgT01BUDRfUk1fQUJFX01DQlNQM19DT05URVhUX09GRlNFVAkJMHgwMDVjCi0jZGVmaW5lIE9NQVA0NDMwX1JNX0FCRV9NQ0JTUDNfQ09OVEVYVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9BQkVfTU9ELCAweDAwNWMpCisjZGVmaW5lIE9NQVA0NDMwX1JNX0FCRV9NQ0JTUDNfQ09OVEVYVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9BQkVfSU5TVCwgMHgwMDVjKQogI2RlZmluZSBPTUFQNF9QTV9BQkVfU0xJTUJVU19XS0RFUF9PRkZTRVQJCTB4MDA2MAotI2RlZmluZSBPTUFQNDQzMF9QTV9BQkVfU0xJTUJVU19XS0RFUAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9BQkVfTU9ELCAweDAwNjApCisjZGVmaW5lIE9NQVA0NDMwX1BNX0FCRV9TTElNQlVTX1dLREVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0FCRV9JTlNULCAweDAwNjApCiAjZGVmaW5lIE9NQVA0X1JNX0FCRV9TTElNQlVTX0NPTlRFWFRfT0ZGU0VUCQkweDAwNjQKLSNkZWZpbmUgT01BUDQ0MzBfUk1fQUJFX1NMSU1CVVNfQ09OVEVYVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9BQkVfTU9ELCAweDAwNjQpCisjZGVmaW5lIE9NQVA0NDMwX1JNX0FCRV9TTElNQlVTX0NPTlRFWFQJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQUJFX0lOU1QsIDB4MDA2NCkKICNkZWZpbmUgT01BUDRfUE1fQUJFX1RJTUVSNV9XS0RFUF9PRkZTRVQJCTB4MDA2OAotI2RlZmluZSBPTUFQNDQzMF9QTV9BQkVfVElNRVI1X1dLREVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0FCRV9NT0QsIDB4MDA2OCkKKyNkZWZpbmUgT01BUDQ0MzBfUE1fQUJFX1RJTUVSNV9XS0RFUAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9BQkVfSU5TVCwgMHgwMDY4KQogI2RlZmluZSBPTUFQNF9STV9BQkVfVElNRVI1X0NPTlRFWFRfT0ZGU0VUCQkweDAwNmMKLSNkZWZpbmUgT01BUDQ0MzBfUk1fQUJFX1RJTUVSNV9DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0FCRV9NT0QsIDB4MDA2YykKKyNkZWZpbmUgT01BUDQ0MzBfUk1fQUJFX1RJTUVSNV9DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0FCRV9JTlNULCAweDAwNmMpCiAjZGVmaW5lIE9NQVA0X1BNX0FCRV9USU1FUjZfV0tERVBfT0ZGU0VUCQkweDAwNzAKLSNkZWZpbmUgT01BUDQ0MzBfUE1fQUJFX1RJTUVSNl9XS0RFUAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9BQkVfTU9ELCAweDAwNzApCisjZGVmaW5lIE9NQVA0NDMwX1BNX0FCRV9USU1FUjZfV0tERVAJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQUJFX0lOU1QsIDB4MDA3MCkKICNkZWZpbmUgT01BUDRfUk1fQUJFX1RJTUVSNl9DT05URVhUX09GRlNFVAkJMHgwMDc0Ci0jZGVmaW5lIE9NQVA0NDMwX1JNX0FCRV9USU1FUjZfQ09OVEVYVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9BQkVfTU9ELCAweDAwNzQpCisjZGVmaW5lIE9NQVA0NDMwX1JNX0FCRV9USU1FUjZfQ09OVEVYVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9BQkVfSU5TVCwgMHgwMDc0KQogI2RlZmluZSBPTUFQNF9QTV9BQkVfVElNRVI3X1dLREVQX09GRlNFVAkJMHgwMDc4Ci0jZGVmaW5lIE9NQVA0NDMwX1BNX0FCRV9USU1FUjdfV0tERVAJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQUJFX01PRCwgMHgwMDc4KQorI2RlZmluZSBPTUFQNDQzMF9QTV9BQkVfVElNRVI3X1dLREVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0FCRV9JTlNULCAweDAwNzgpCiAjZGVmaW5lIE9NQVA0X1JNX0FCRV9USU1FUjdfQ09OVEVYVF9PRkZTRVQJCTB4MDA3YwotI2RlZmluZSBPTUFQNDQzMF9STV9BQkVfVElNRVI3X0NPTlRFWFQJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQUJFX01PRCwgMHgwMDdjKQorI2RlZmluZSBPTUFQNDQzMF9STV9BQkVfVElNRVI3X0NPTlRFWFQJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQUJFX0lOU1QsIDB4MDA3YykKICNkZWZpbmUgT01BUDRfUE1fQUJFX1RJTUVSOF9XS0RFUF9PRkZTRVQJCTB4MDA4MAotI2RlZmluZSBPTUFQNDQzMF9QTV9BQkVfVElNRVI4X1dLREVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0FCRV9NT0QsIDB4MDA4MCkKKyNkZWZpbmUgT01BUDQ0MzBfUE1fQUJFX1RJTUVSOF9XS0RFUAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9BQkVfSU5TVCwgMHgwMDgwKQogI2RlZmluZSBPTUFQNF9STV9BQkVfVElNRVI4X0NPTlRFWFRfT0ZGU0VUCQkweDAwODQKLSNkZWZpbmUgT01BUDQ0MzBfUk1fQUJFX1RJTUVSOF9DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0FCRV9NT0QsIDB4MDA4NCkKKyNkZWZpbmUgT01BUDQ0MzBfUk1fQUJFX1RJTUVSOF9DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0FCRV9JTlNULCAweDAwODQpCiAjZGVmaW5lIE9NQVA0X1BNX0FCRV9XRFQzX1dLREVQX09GRlNFVAkJCTB4MDA4OAotI2RlZmluZSBPTUFQNDQzMF9QTV9BQkVfV0RUM19XS0RFUAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9BQkVfTU9ELCAweDAwODgpCisjZGVmaW5lIE9NQVA0NDMwX1BNX0FCRV9XRFQzX1dLREVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0FCRV9JTlNULCAweDAwODgpCiAjZGVmaW5lIE9NQVA0X1JNX0FCRV9XRFQzX0NPTlRFWFRfT0ZGU0VUCQkweDAwOGMKLSNkZWZpbmUgT01BUDQ0MzBfUk1fQUJFX1dEVDNfQ09OVEVYVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9BQkVfTU9ELCAweDAwOGMpCisjZGVmaW5lIE9NQVA0NDMwX1JNX0FCRV9XRFQzX0NPTlRFWFQJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQUJFX0lOU1QsIDB4MDA4YykKIAogLyogUFJNLkFMV0FZU19PTl9QUk0gcmVnaXN0ZXIgb2Zmc2V0cyAqLwogI2RlZmluZSBPTUFQNF9STV9BTFdPTl9NRE1JTlRDX0NPTlRFWFRfT0ZGU0VUCQkweDAwMjQKLSNkZWZpbmUgT01BUDQ0MzBfUk1fQUxXT05fTURNSU5UQ19DT05URVhUCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQUxXQVlTX09OX01PRCwgMHgwMDI0KQorI2RlZmluZSBPTUFQNDQzMF9STV9BTFdPTl9NRE1JTlRDX0NPTlRFWFQJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9BTFdBWVNfT05fSU5TVCwgMHgwMDI0KQogI2RlZmluZSBPTUFQNF9QTV9BTFdPTl9TUl9NUFVfV0tERVBfT0ZGU0VUCQkweDAwMjgKLSNkZWZpbmUgT01BUDQ0MzBfUE1fQUxXT05fU1JfTVBVX1dLREVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0FMV0FZU19PTl9NT0QsIDB4MDAyOCkKKyNkZWZpbmUgT01BUDQ0MzBfUE1fQUxXT05fU1JfTVBVX1dLREVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0FMV0FZU19PTl9JTlNULCAweDAwMjgpCiAjZGVmaW5lIE9NQVA0X1JNX0FMV09OX1NSX01QVV9DT05URVhUX09GRlNFVAkJMHgwMDJjCi0jZGVmaW5lIE9NQVA0NDMwX1JNX0FMV09OX1NSX01QVV9DT05URVhUCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQUxXQVlTX09OX01PRCwgMHgwMDJjKQorI2RlZmluZSBPTUFQNDQzMF9STV9BTFdPTl9TUl9NUFVfQ09OVEVYVAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0FMV0FZU19PTl9JTlNULCAweDAwMmMpCiAjZGVmaW5lIE9NQVA0X1BNX0FMV09OX1NSX0lWQV9XS0RFUF9PRkZTRVQJCTB4MDAzMAotI2RlZmluZSBPTUFQNDQzMF9QTV9BTFdPTl9TUl9JVkFfV0tERVAJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQUxXQVlTX09OX01PRCwgMHgwMDMwKQorI2RlZmluZSBPTUFQNDQzMF9QTV9BTFdPTl9TUl9JVkFfV0tERVAJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQUxXQVlTX09OX0lOU1QsIDB4MDAzMCkKICNkZWZpbmUgT01BUDRfUk1fQUxXT05fU1JfSVZBX0NPTlRFWFRfT0ZGU0VUCQkweDAwMzQKLSNkZWZpbmUgT01BUDQ0MzBfUk1fQUxXT05fU1JfSVZBX0NPTlRFWFQJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9BTFdBWVNfT05fTU9ELCAweDAwMzQpCisjZGVmaW5lIE9NQVA0NDMwX1JNX0FMV09OX1NSX0lWQV9DT05URVhUCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQUxXQVlTX09OX0lOU1QsIDB4MDAzNCkKICNkZWZpbmUgT01BUDRfUE1fQUxXT05fU1JfQ09SRV9XS0RFUF9PRkZTRVQJCTB4MDAzOAotI2RlZmluZSBPTUFQNDQzMF9QTV9BTFdPTl9TUl9DT1JFX1dLREVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0FMV0FZU19PTl9NT0QsIDB4MDAzOCkKKyNkZWZpbmUgT01BUDQ0MzBfUE1fQUxXT05fU1JfQ09SRV9XS0RFUAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9BTFdBWVNfT05fSU5TVCwgMHgwMDM4KQogI2RlZmluZSBPTUFQNF9STV9BTFdPTl9TUl9DT1JFX0NPTlRFWFRfT0ZGU0VUCQkweDAwM2MKLSNkZWZpbmUgT01BUDQ0MzBfUk1fQUxXT05fU1JfQ09SRV9DT05URVhUCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQUxXQVlTX09OX01PRCwgMHgwMDNjKQorI2RlZmluZSBPTUFQNDQzMF9STV9BTFdPTl9TUl9DT1JFX0NPTlRFWFQJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9BTFdBWVNfT05fSU5TVCwgMHgwMDNjKQogCiAvKiBQUk0uQ09SRV9QUk0gcmVnaXN0ZXIgb2Zmc2V0cyAqLwogI2RlZmluZSBPTUFQNF9QTV9DT1JFX1BXUlNUQ1RSTF9PRkZTRVQJCQkweDAwMDAKLSNkZWZpbmUgT01BUDQ0MzBfUE1fQ09SRV9QV1JTVENUUkwJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQ09SRV9NT0QsIDB4MDAwMCkKKyNkZWZpbmUgT01BUDQ0MzBfUE1fQ09SRV9QV1JTVENUUkwJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQ09SRV9JTlNULCAweDAwMDApCiAjZGVmaW5lIE9NQVA0X1BNX0NPUkVfUFdSU1RTVF9PRkZTRVQJCQkweDAwMDQKLSNkZWZpbmUgT01BUDQ0MzBfUE1fQ09SRV9QV1JTVFNUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0NPUkVfTU9ELCAweDAwMDQpCisjZGVmaW5lIE9NQVA0NDMwX1BNX0NPUkVfUFdSU1RTVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9DT1JFX0lOU1QsIDB4MDAwNCkKICNkZWZpbmUgT01BUDRfUk1fTDNfMV9MM18xX0NPTlRFWFRfT0ZGU0VUCQkweDAwMjQKLSNkZWZpbmUgT01BUDQ0MzBfUk1fTDNfMV9MM18xX0NPTlRFWFQJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQ09SRV9NT0QsIDB4MDAyNCkKKyNkZWZpbmUgT01BUDQ0MzBfUk1fTDNfMV9MM18xX0NPTlRFWFQJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQ09SRV9JTlNULCAweDAwMjQpCiAjZGVmaW5lIE9NQVA0X1JNX0wzXzJfTDNfMl9DT05URVhUX09GRlNFVAkJMHgwMTI0Ci0jZGVmaW5lIE9NQVA0NDMwX1JNX0wzXzJfTDNfMl9DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0NPUkVfTU9ELCAweDAxMjQpCisjZGVmaW5lIE9NQVA0NDMwX1JNX0wzXzJfTDNfMl9DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0NPUkVfSU5TVCwgMHgwMTI0KQogI2RlZmluZSBPTUFQNF9STV9MM18yX0dQTUNfQ09OVEVYVF9PRkZTRVQJCTB4MDEyYwotI2RlZmluZSBPTUFQNDQzMF9STV9MM18yX0dQTUNfQ09OVEVYVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9DT1JFX01PRCwgMHgwMTJjKQorI2RlZmluZSBPTUFQNDQzMF9STV9MM18yX0dQTUNfQ09OVEVYVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9DT1JFX0lOU1QsIDB4MDEyYykKICNkZWZpbmUgT01BUDRfUk1fTDNfMl9PQ01DX1JBTV9DT05URVhUX09GRlNFVAkJMHgwMTM0Ci0jZGVmaW5lIE9NQVA0NDMwX1JNX0wzXzJfT0NNQ19SQU1fQ09OVEVYVAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0NPUkVfTU9ELCAweDAxMzQpCisjZGVmaW5lIE9NQVA0NDMwX1JNX0wzXzJfT0NNQ19SQU1fQ09OVEVYVAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0NPUkVfSU5TVCwgMHgwMTM0KQogI2RlZmluZSBPTUFQNF9STV9EVUNBVElfUlNUQ1RSTF9PRkZTRVQJCQkweDAyMTAKLSNkZWZpbmUgT01BUDQ0MzBfUk1fRFVDQVRJX1JTVENUUkwJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQ09SRV9NT0QsIDB4MDIxMCkKKyNkZWZpbmUgT01BUDQ0MzBfUk1fRFVDQVRJX1JTVENUUkwJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQ09SRV9JTlNULCAweDAyMTApCiAjZGVmaW5lIE9NQVA0X1JNX0RVQ0FUSV9SU1RTVF9PRkZTRVQJCQkweDAyMTQKLSNkZWZpbmUgT01BUDQ0MzBfUk1fRFVDQVRJX1JTVFNUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0NPUkVfTU9ELCAweDAyMTQpCisjZGVmaW5lIE9NQVA0NDMwX1JNX0RVQ0FUSV9SU1RTVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9DT1JFX0lOU1QsIDB4MDIxNCkKICNkZWZpbmUgT01BUDRfUk1fRFVDQVRJX0RVQ0FUSV9DT05URVhUX09GRlNFVAkJMHgwMjI0Ci0jZGVmaW5lIE9NQVA0NDMwX1JNX0RVQ0FUSV9EVUNBVElfQ09OVEVYVAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0NPUkVfTU9ELCAweDAyMjQpCisjZGVmaW5lIE9NQVA0NDMwX1JNX0RVQ0FUSV9EVUNBVElfQ09OVEVYVAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0NPUkVfSU5TVCwgMHgwMjI0KQogI2RlZmluZSBPTUFQNF9STV9TRE1BX1NETUFfQ09OVEVYVF9PRkZTRVQJCTB4MDMyNAotI2RlZmluZSBPTUFQNDQzMF9STV9TRE1BX1NETUFfQ09OVEVYVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9DT1JFX01PRCwgMHgwMzI0KQorI2RlZmluZSBPTUFQNDQzMF9STV9TRE1BX1NETUFfQ09OVEVYVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9DT1JFX0lOU1QsIDB4MDMyNCkKICNkZWZpbmUgT01BUDRfUk1fTUVNSUZfRE1NX0NPTlRFWFRfT0ZGU0VUCQkweDA0MjQKLSNkZWZpbmUgT01BUDQ0MzBfUk1fTUVNSUZfRE1NX0NPTlRFWFQJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQ09SRV9NT0QsIDB4MDQyNCkKKyNkZWZpbmUgT01BUDQ0MzBfUk1fTUVNSUZfRE1NX0NPTlRFWFQJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQ09SRV9JTlNULCAweDA0MjQpCiAjZGVmaW5lIE9NQVA0X1JNX01FTUlGX0VNSUZfRldfQ09OVEVYVF9PRkZTRVQJCTB4MDQyYwotI2RlZmluZSBPTUFQNDQzMF9STV9NRU1JRl9FTUlGX0ZXX0NPTlRFWFQJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9DT1JFX01PRCwgMHgwNDJjKQorI2RlZmluZSBPTUFQNDQzMF9STV9NRU1JRl9FTUlGX0ZXX0NPTlRFWFQJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9DT1JFX0lOU1QsIDB4MDQyYykKICNkZWZpbmUgT01BUDRfUk1fTUVNSUZfRU1JRl8xX0NPTlRFWFRfT0ZGU0VUCQkweDA0MzQKLSNkZWZpbmUgT01BUDQ0MzBfUk1fTUVNSUZfRU1JRl8xX0NPTlRFWFQJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9DT1JFX01PRCwgMHgwNDM0KQorI2RlZmluZSBPTUFQNDQzMF9STV9NRU1JRl9FTUlGXzFfQ09OVEVYVAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0NPUkVfSU5TVCwgMHgwNDM0KQogI2RlZmluZSBPTUFQNF9STV9NRU1JRl9FTUlGXzJfQ09OVEVYVF9PRkZTRVQJCTB4MDQzYwotI2RlZmluZSBPTUFQNDQzMF9STV9NRU1JRl9FTUlGXzJfQ09OVEVYVAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0NPUkVfTU9ELCAweDA0M2MpCisjZGVmaW5lIE9NQVA0NDMwX1JNX01FTUlGX0VNSUZfMl9DT05URVhUCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQ09SRV9JTlNULCAweDA0M2MpCiAjZGVmaW5lIE9NQVA0X1JNX01FTUlGX0RMTF9DT05URVhUX09GRlNFVAkJMHgwNDQ0Ci0jZGVmaW5lIE9NQVA0NDMwX1JNX01FTUlGX0RMTF9DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0NPUkVfTU9ELCAweDA0NDQpCisjZGVmaW5lIE9NQVA0NDMwX1JNX01FTUlGX0RMTF9DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0NPUkVfSU5TVCwgMHgwNDQ0KQogI2RlZmluZSBPTUFQNF9STV9NRU1JRl9FTUlGX0gxX0NPTlRFWFRfT0ZGU0VUCQkweDA0NTQKLSNkZWZpbmUgT01BUDQ0MzBfUk1fTUVNSUZfRU1JRl9IMV9DT05URVhUCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQ09SRV9NT0QsIDB4MDQ1NCkKKyNkZWZpbmUgT01BUDQ0MzBfUk1fTUVNSUZfRU1JRl9IMV9DT05URVhUCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQ09SRV9JTlNULCAweDA0NTQpCiAjZGVmaW5lIE9NQVA0X1JNX01FTUlGX0VNSUZfSDJfQ09OVEVYVF9PRkZTRVQJCTB4MDQ1YwotI2RlZmluZSBPTUFQNDQzMF9STV9NRU1JRl9FTUlGX0gyX0NPTlRFWFQJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9DT1JFX01PRCwgMHgwNDVjKQorI2RlZmluZSBPTUFQNDQzMF9STV9NRU1JRl9FTUlGX0gyX0NPTlRFWFQJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9DT1JFX0lOU1QsIDB4MDQ1YykKICNkZWZpbmUgT01BUDRfUk1fTUVNSUZfRExMX0hfQ09OVEVYVF9PRkZTRVQJCTB4MDQ2NAotI2RlZmluZSBPTUFQNDQzMF9STV9NRU1JRl9ETExfSF9DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0NPUkVfTU9ELCAweDA0NjQpCisjZGVmaW5lIE9NQVA0NDMwX1JNX01FTUlGX0RMTF9IX0NPTlRFWFQJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQ09SRV9JTlNULCAweDA0NjQpCiAjZGVmaW5lIE9NQVA0X1JNX0QyRF9TQUQyRF9DT05URVhUX09GRlNFVAkJMHgwNTI0Ci0jZGVmaW5lIE9NQVA0NDMwX1JNX0QyRF9TQUQyRF9DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0NPUkVfTU9ELCAweDA1MjQpCi0jZGVmaW5lIE9NQVA0X1JNX0QyRF9NT0RFTV9JQ1JfQ09OVEVYVF9PRkZTRVQJCTB4MDUyYwotI2RlZmluZSBPTUFQNDQzMF9STV9EMkRfTU9ERU1fSUNSX0NPTlRFWFQJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9DT1JFX01PRCwgMHgwNTJjKQorI2RlZmluZSBPTUFQNDQzMF9STV9EMkRfU0FEMkRfQ09OVEVYVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9DT1JFX0lOU1QsIDB4MDUyNCkKKyNkZWZpbmUgT01BUDRfUk1fRDJEX0lOU1RFTV9JQ1JfQ09OVEVYVF9PRkZTRVQJCTB4MDUyYworI2RlZmluZSBPTUFQNDQzMF9STV9EMkRfSU5TVEVNX0lDUl9DT05URVhUCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQ09SRV9JTlNULCAweDA1MmMpCiAjZGVmaW5lIE9NQVA0X1JNX0QyRF9TQUQyRF9GV19DT05URVhUX09GRlNFVAkJMHgwNTM0Ci0jZGVmaW5lIE9NQVA0NDMwX1JNX0QyRF9TQUQyRF9GV19DT05URVhUCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQ09SRV9NT0QsIDB4MDUzNCkKKyNkZWZpbmUgT01BUDQ0MzBfUk1fRDJEX1NBRDJEX0ZXX0NPTlRFWFQJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9DT1JFX0lOU1QsIDB4MDUzNCkKICNkZWZpbmUgT01BUDRfUk1fTDRDRkdfTDRfQ0ZHX0NPTlRFWFRfT0ZGU0VUCQkweDA2MjQKLSNkZWZpbmUgT01BUDQ0MzBfUk1fTDRDRkdfTDRfQ0ZHX0NPTlRFWFQJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9DT1JFX01PRCwgMHgwNjI0KQorI2RlZmluZSBPTUFQNDQzMF9STV9MNENGR19MNF9DRkdfQ09OVEVYVAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0NPUkVfSU5TVCwgMHgwNjI0KQogI2RlZmluZSBPTUFQNF9STV9MNENGR19IV19TRU1fQ09OVEVYVF9PRkZTRVQJCTB4MDYyYwotI2RlZmluZSBPTUFQNDQzMF9STV9MNENGR19IV19TRU1fQ09OVEVYVAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0NPUkVfTU9ELCAweDA2MmMpCisjZGVmaW5lIE9NQVA0NDMwX1JNX0w0Q0ZHX0hXX1NFTV9DT05URVhUCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQ09SRV9JTlNULCAweDA2MmMpCiAjZGVmaW5lIE9NQVA0X1JNX0w0Q0ZHX01BSUxCT1hfQ09OVEVYVF9PRkZTRVQJCTB4MDYzNAotI2RlZmluZSBPTUFQNDQzMF9STV9MNENGR19NQUlMQk9YX0NPTlRFWFQJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9DT1JFX01PRCwgMHgwNjM0KQorI2RlZmluZSBPTUFQNDQzMF9STV9MNENGR19NQUlMQk9YX0NPTlRFWFQJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9DT1JFX0lOU1QsIDB4MDYzNCkKICNkZWZpbmUgT01BUDRfUk1fTDRDRkdfU0FSX1JPTV9DT05URVhUX09GRlNFVAkJMHgwNjNjCi0jZGVmaW5lIE9NQVA0NDMwX1JNX0w0Q0ZHX1NBUl9ST01fQ09OVEVYVAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0NPUkVfTU9ELCAweDA2M2MpCisjZGVmaW5lIE9NQVA0NDMwX1JNX0w0Q0ZHX1NBUl9ST01fQ09OVEVYVAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0NPUkVfSU5TVCwgMHgwNjNjKQogI2RlZmluZSBPTUFQNF9STV9MM0lOU1RSX0wzXzNfQ09OVEVYVF9PRkZTRVQJCTB4MDcyNAotI2RlZmluZSBPTUFQNDQzMF9STV9MM0lOU1RSX0wzXzNfQ09OVEVYVAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0NPUkVfTU9ELCAweDA3MjQpCisjZGVmaW5lIE9NQVA0NDMwX1JNX0wzSU5TVFJfTDNfM19DT05URVhUCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQ09SRV9JTlNULCAweDA3MjQpCiAjZGVmaW5lIE9NQVA0X1JNX0wzSU5TVFJfTDNfSU5TVFJfQ09OVEVYVF9PRkZTRVQJMHgwNzJjCi0jZGVmaW5lIE9NQVA0NDMwX1JNX0wzSU5TVFJfTDNfSU5TVFJfQ09OVEVYVAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0NPUkVfTU9ELCAweDA3MmMpCisjZGVmaW5lIE9NQVA0NDMwX1JNX0wzSU5TVFJfTDNfSU5TVFJfQ09OVEVYVAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0NPUkVfSU5TVCwgMHgwNzJjKQogI2RlZmluZSBPTUFQNF9STV9MM0lOU1RSX09DUF9XUDFfQ09OVEVYVF9PRkZTRVQJCTB4MDc0NAotI2RlZmluZSBPTUFQNDQzMF9STV9MM0lOU1RSX09DUF9XUDFfQ09OVEVYVAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0NPUkVfTU9ELCAweDA3NDQpCisjZGVmaW5lIE9NQVA0NDMwX1JNX0wzSU5TVFJfT0NQX1dQMV9DT05URVhUCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQ09SRV9JTlNULCAweDA3NDQpCiAKIC8qIFBSTS5JVkFIRF9QUk0gcmVnaXN0ZXIgb2Zmc2V0cyAqLwogI2RlZmluZSBPTUFQNF9QTV9JVkFIRF9QV1JTVENUUkxfT0ZGU0VUCQkJMHgwMDAwCi0jZGVmaW5lIE9NQVA0NDMwX1BNX0lWQUhEX1BXUlNUQ1RSTAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9JVkFIRF9NT0QsIDB4MDAwMCkKKyNkZWZpbmUgT01BUDQ0MzBfUE1fSVZBSERfUFdSU1RDVFJMCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0lWQUhEX0lOU1QsIDB4MDAwMCkKICNkZWZpbmUgT01BUDRfUE1fSVZBSERfUFdSU1RTVF9PRkZTRVQJCQkweDAwMDQKLSNkZWZpbmUgT01BUDQ0MzBfUE1fSVZBSERfUFdSU1RTVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9JVkFIRF9NT0QsIDB4MDAwNCkKKyNkZWZpbmUgT01BUDQ0MzBfUE1fSVZBSERfUFdSU1RTVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9JVkFIRF9JTlNULCAweDAwMDQpCiAjZGVmaW5lIE9NQVA0X1JNX0lWQUhEX1JTVENUUkxfT0ZGU0VUCQkJMHgwMDEwCi0jZGVmaW5lIE9NQVA0NDMwX1JNX0lWQUhEX1JTVENUUkwJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fSVZBSERfTU9ELCAweDAwMTApCisjZGVmaW5lIE9NQVA0NDMwX1JNX0lWQUhEX1JTVENUUkwJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fSVZBSERfSU5TVCwgMHgwMDEwKQogI2RlZmluZSBPTUFQNF9STV9JVkFIRF9SU1RTVF9PRkZTRVQJCQkweDAwMTQKLSNkZWZpbmUgT01BUDQ0MzBfUk1fSVZBSERfUlNUU1QJCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0lWQUhEX01PRCwgMHgwMDE0KQorI2RlZmluZSBPTUFQNDQzMF9STV9JVkFIRF9SU1RTVAkJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fSVZBSERfSU5TVCwgMHgwMDE0KQogI2RlZmluZSBPTUFQNF9STV9JVkFIRF9JVkFIRF9DT05URVhUX09GRlNFVAkJMHgwMDI0Ci0jZGVmaW5lIE9NQVA0NDMwX1JNX0lWQUhEX0lWQUhEX0NPTlRFWFQJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fSVZBSERfTU9ELCAweDAwMjQpCisjZGVmaW5lIE9NQVA0NDMwX1JNX0lWQUhEX0lWQUhEX0NPTlRFWFQJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fSVZBSERfSU5TVCwgMHgwMDI0KQogI2RlZmluZSBPTUFQNF9STV9JVkFIRF9TTDJfQ09OVEVYVF9PRkZTRVQJCTB4MDAyYwotI2RlZmluZSBPTUFQNDQzMF9STV9JVkFIRF9TTDJfQ09OVEVYVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9JVkFIRF9NT0QsIDB4MDAyYykKKyNkZWZpbmUgT01BUDQ0MzBfUk1fSVZBSERfU0wyX0NPTlRFWFQJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fSVZBSERfSU5TVCwgMHgwMDJjKQogCiAvKiBQUk0uQ0FNX1BSTSByZWdpc3RlciBvZmZzZXRzICovCiAjZGVmaW5lIE9NQVA0X1BNX0NBTV9QV1JTVENUUkxfT0ZGU0VUCQkJMHgwMDAwCi0jZGVmaW5lIE9NQVA0NDMwX1BNX0NBTV9QV1JTVENUUkwJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQ0FNX01PRCwgMHgwMDAwKQorI2RlZmluZSBPTUFQNDQzMF9QTV9DQU1fUFdSU1RDVFJMCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0NBTV9JTlNULCAweDAwMDApCiAjZGVmaW5lIE9NQVA0X1BNX0NBTV9QV1JTVFNUX09GRlNFVAkJCTB4MDAwNAotI2RlZmluZSBPTUFQNDQzMF9QTV9DQU1fUFdSU1RTVAkJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQ0FNX01PRCwgMHgwMDA0KQorI2RlZmluZSBPTUFQNDQzMF9QTV9DQU1fUFdSU1RTVAkJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQ0FNX0lOU1QsIDB4MDAwNCkKICNkZWZpbmUgT01BUDRfUk1fQ0FNX0lTU19DT05URVhUX09GRlNFVAkJCTB4MDAyNAotI2RlZmluZSBPTUFQNDQzMF9STV9DQU1fSVNTX0NPTlRFWFQJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQ0FNX01PRCwgMHgwMDI0KQorI2RlZmluZSBPTUFQNDQzMF9STV9DQU1fSVNTX0NPTlRFWFQJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQ0FNX0lOU1QsIDB4MDAyNCkKICNkZWZpbmUgT01BUDRfUk1fQ0FNX0ZESUZfQ09OVEVYVF9PRkZTRVQJCTB4MDAyYwotI2RlZmluZSBPTUFQNDQzMF9STV9DQU1fRkRJRl9DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0NBTV9NT0QsIDB4MDAyYykKKyNkZWZpbmUgT01BUDQ0MzBfUk1fQ0FNX0ZESUZfQ09OVEVYVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9DQU1fSU5TVCwgMHgwMDJjKQogCiAvKiBQUk0uRFNTX1BSTSByZWdpc3RlciBvZmZzZXRzICovCiAjZGVmaW5lIE9NQVA0X1BNX0RTU19QV1JTVENUUkxfT0ZGU0VUCQkJMHgwMDAwCi0jZGVmaW5lIE9NQVA0NDMwX1BNX0RTU19QV1JTVENUUkwJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fRFNTX01PRCwgMHgwMDAwKQorI2RlZmluZSBPTUFQNDQzMF9QTV9EU1NfUFdSU1RDVFJMCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0RTU19JTlNULCAweDAwMDApCiAjZGVmaW5lIE9NQVA0X1BNX0RTU19QV1JTVFNUX09GRlNFVAkJCTB4MDAwNAotI2RlZmluZSBPTUFQNDQzMF9QTV9EU1NfUFdSU1RTVAkJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fRFNTX01PRCwgMHgwMDA0KQorI2RlZmluZSBPTUFQNDQzMF9QTV9EU1NfUFdSU1RTVAkJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fRFNTX0lOU1QsIDB4MDAwNCkKICNkZWZpbmUgT01BUDRfUE1fRFNTX0RTU19XS0RFUF9PRkZTRVQJCQkweDAwMjAKLSNkZWZpbmUgT01BUDQ0MzBfUE1fRFNTX0RTU19XS0RFUAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9EU1NfTU9ELCAweDAwMjApCisjZGVmaW5lIE9NQVA0NDMwX1BNX0RTU19EU1NfV0tERVAJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fRFNTX0lOU1QsIDB4MDAyMCkKICNkZWZpbmUgT01BUDRfUk1fRFNTX0RTU19DT05URVhUX09GRlNFVAkJCTB4MDAyNAotI2RlZmluZSBPTUFQNDQzMF9STV9EU1NfRFNTX0NPTlRFWFQJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fRFNTX01PRCwgMHgwMDI0KQorI2RlZmluZSBPTUFQNDQzMF9STV9EU1NfRFNTX0NPTlRFWFQJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fRFNTX0lOU1QsIDB4MDAyNCkKICNkZWZpbmUgT01BUDRfUk1fRFNTX0RFSVNTX0NPTlRFWFRfT0ZGU0VUCQkweDAwMmMKLSNkZWZpbmUgT01BUDQ0MzBfUk1fRFNTX0RFSVNTX0NPTlRFWFQJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fRFNTX01PRCwgMHgwMDJjKQorI2RlZmluZSBPTUFQNDQzMF9STV9EU1NfREVJU1NfQ09OVEVYVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9EU1NfSU5TVCwgMHgwMDJjKQogCiAvKiBQUk0uR0ZYX1BSTSByZWdpc3RlciBvZmZzZXRzICovCiAjZGVmaW5lIE9NQVA0X1BNX0dGWF9QV1JTVENUUkxfT0ZGU0VUCQkJMHgwMDAwCi0jZGVmaW5lIE9NQVA0NDMwX1BNX0dGWF9QV1JTVENUUkwJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fR0ZYX01PRCwgMHgwMDAwKQorI2RlZmluZSBPTUFQNDQzMF9QTV9HRlhfUFdSU1RDVFJMCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0dGWF9JTlNULCAweDAwMDApCiAjZGVmaW5lIE9NQVA0X1BNX0dGWF9QV1JTVFNUX09GRlNFVAkJCTB4MDAwNAotI2RlZmluZSBPTUFQNDQzMF9QTV9HRlhfUFdSU1RTVAkJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fR0ZYX01PRCwgMHgwMDA0KQorI2RlZmluZSBPTUFQNDQzMF9QTV9HRlhfUFdSU1RTVAkJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fR0ZYX0lOU1QsIDB4MDAwNCkKICNkZWZpbmUgT01BUDRfUk1fR0ZYX0dGWF9DT05URVhUX09GRlNFVAkJCTB4MDAyNAotI2RlZmluZSBPTUFQNDQzMF9STV9HRlhfR0ZYX0NPTlRFWFQJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fR0ZYX01PRCwgMHgwMDI0KQorI2RlZmluZSBPTUFQNDQzMF9STV9HRlhfR0ZYX0NPTlRFWFQJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fR0ZYX0lOU1QsIDB4MDAyNCkKIAogLyogUFJNLkwzSU5JVF9QUk0gcmVnaXN0ZXIgb2Zmc2V0cyAqLwogI2RlZmluZSBPTUFQNF9QTV9MM0lOSVRfUFdSU1RDVFJMX09GRlNFVAkJMHgwMDAwCi0jZGVmaW5lIE9NQVA0NDMwX1BNX0wzSU5JVF9QV1JTVENUUkwJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDNJTklUX01PRCwgMHgwMDAwKQorI2RlZmluZSBPTUFQNDQzMF9QTV9MM0lOSVRfUFdSU1RDVFJMCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0wzSU5JVF9JTlNULCAweDAwMDApCiAjZGVmaW5lIE9NQVA0X1BNX0wzSU5JVF9QV1JTVFNUX09GRlNFVAkJCTB4MDAwNAotI2RlZmluZSBPTUFQNDQzMF9QTV9MM0lOSVRfUFdSU1RTVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MM0lOSVRfTU9ELCAweDAwMDQpCisjZGVmaW5lIE9NQVA0NDMwX1BNX0wzSU5JVF9QV1JTVFNUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0wzSU5JVF9JTlNULCAweDAwMDQpCiAjZGVmaW5lIE9NQVA0X1BNX0wzSU5JVF9NTUMxX1dLREVQX09GRlNFVAkJMHgwMDI4Ci0jZGVmaW5lIE9NQVA0NDMwX1BNX0wzSU5JVF9NTUMxX1dLREVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0wzSU5JVF9NT0QsIDB4MDAyOCkKKyNkZWZpbmUgT01BUDQ0MzBfUE1fTDNJTklUX01NQzFfV0tERVAJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDNJTklUX0lOU1QsIDB4MDAyOCkKICNkZWZpbmUgT01BUDRfUk1fTDNJTklUX01NQzFfQ09OVEVYVF9PRkZTRVQJCTB4MDAyYwotI2RlZmluZSBPTUFQNDQzMF9STV9MM0lOSVRfTU1DMV9DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0wzSU5JVF9NT0QsIDB4MDAyYykKKyNkZWZpbmUgT01BUDQ0MzBfUk1fTDNJTklUX01NQzFfQ09OVEVYVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MM0lOSVRfSU5TVCwgMHgwMDJjKQogI2RlZmluZSBPTUFQNF9QTV9MM0lOSVRfTU1DMl9XS0RFUF9PRkZTRVQJCTB4MDAzMAotI2RlZmluZSBPTUFQNDQzMF9QTV9MM0lOSVRfTU1DMl9XS0RFUAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MM0lOSVRfTU9ELCAweDAwMzApCisjZGVmaW5lIE9NQVA0NDMwX1BNX0wzSU5JVF9NTUMyX1dLREVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0wzSU5JVF9JTlNULCAweDAwMzApCiAjZGVmaW5lIE9NQVA0X1JNX0wzSU5JVF9NTUMyX0NPTlRFWFRfT0ZGU0VUCQkweDAwMzQKLSNkZWZpbmUgT01BUDQ0MzBfUk1fTDNJTklUX01NQzJfQ09OVEVYVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MM0lOSVRfTU9ELCAweDAwMzQpCisjZGVmaW5lIE9NQVA0NDMwX1JNX0wzSU5JVF9NTUMyX0NPTlRFWFQJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDNJTklUX0lOU1QsIDB4MDAzNCkKICNkZWZpbmUgT01BUDRfUE1fTDNJTklUX0hTSV9XS0RFUF9PRkZTRVQJCTB4MDAzOAotI2RlZmluZSBPTUFQNDQzMF9QTV9MM0lOSVRfSFNJX1dLREVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0wzSU5JVF9NT0QsIDB4MDAzOCkKKyNkZWZpbmUgT01BUDQ0MzBfUE1fTDNJTklUX0hTSV9XS0RFUAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MM0lOSVRfSU5TVCwgMHgwMDM4KQogI2RlZmluZSBPTUFQNF9STV9MM0lOSVRfSFNJX0NPTlRFWFRfT0ZGU0VUCQkweDAwM2MKLSNkZWZpbmUgT01BUDQ0MzBfUk1fTDNJTklUX0hTSV9DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0wzSU5JVF9NT0QsIDB4MDAzYykKKyNkZWZpbmUgT01BUDQ0MzBfUk1fTDNJTklUX0hTSV9DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0wzSU5JVF9JTlNULCAweDAwM2MpCiAjZGVmaW5lIE9NQVA0X1BNX0wzSU5JVF9VTklQUk8xX1dLREVQX09GRlNFVAkJMHgwMDQwCi0jZGVmaW5lIE9NQVA0NDMwX1BNX0wzSU5JVF9VTklQUk8xX1dLREVQCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDNJTklUX01PRCwgMHgwMDQwKQorI2RlZmluZSBPTUFQNDQzMF9QTV9MM0lOSVRfVU5JUFJPMV9XS0RFUAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0wzSU5JVF9JTlNULCAweDAwNDApCiAjZGVmaW5lIE9NQVA0X1JNX0wzSU5JVF9VTklQUk8xX0NPTlRFWFRfT0ZGU0VUCQkweDAwNDQKLSNkZWZpbmUgT01BUDQ0MzBfUk1fTDNJTklUX1VOSVBSTzFfQ09OVEVYVAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0wzSU5JVF9NT0QsIDB4MDA0NCkKKyNkZWZpbmUgT01BUDQ0MzBfUk1fTDNJTklUX1VOSVBSTzFfQ09OVEVYVAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0wzSU5JVF9JTlNULCAweDAwNDQpCiAjZGVmaW5lIE9NQVA0X1BNX0wzSU5JVF9VU0JfSE9TVF9XS0RFUF9PRkZTRVQJCTB4MDA1OAotI2RlZmluZSBPTUFQNDQzMF9QTV9MM0lOSVRfVVNCX0hPU1RfV0tERVAJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MM0lOSVRfTU9ELCAweDAwNTgpCisjZGVmaW5lIE9NQVA0NDMwX1BNX0wzSU5JVF9VU0JfSE9TVF9XS0RFUAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0wzSU5JVF9JTlNULCAweDAwNTgpCiAjZGVmaW5lIE9NQVA0X1JNX0wzSU5JVF9VU0JfSE9TVF9DT05URVhUX09GRlNFVAkJMHgwMDVjCi0jZGVmaW5lIE9NQVA0NDMwX1JNX0wzSU5JVF9VU0JfSE9TVF9DT05URVhUCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDNJTklUX01PRCwgMHgwMDVjKQorI2RlZmluZSBPTUFQNDQzMF9STV9MM0lOSVRfVVNCX0hPU1RfQ09OVEVYVAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0wzSU5JVF9JTlNULCAweDAwNWMpCiAjZGVmaW5lIE9NQVA0X1BNX0wzSU5JVF9VU0JfT1RHX1dLREVQX09GRlNFVAkJMHgwMDYwCi0jZGVmaW5lIE9NQVA0NDMwX1BNX0wzSU5JVF9VU0JfT1RHX1dLREVQCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDNJTklUX01PRCwgMHgwMDYwKQorI2RlZmluZSBPTUFQNDQzMF9QTV9MM0lOSVRfVVNCX09UR19XS0RFUAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0wzSU5JVF9JTlNULCAweDAwNjApCiAjZGVmaW5lIE9NQVA0X1JNX0wzSU5JVF9VU0JfT1RHX0NPTlRFWFRfT0ZGU0VUCQkweDAwNjQKLSNkZWZpbmUgT01BUDQ0MzBfUk1fTDNJTklUX1VTQl9PVEdfQ09OVEVYVAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0wzSU5JVF9NT0QsIDB4MDA2NCkKKyNkZWZpbmUgT01BUDQ0MzBfUk1fTDNJTklUX1VTQl9PVEdfQ09OVEVYVAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0wzSU5JVF9JTlNULCAweDAwNjQpCiAjZGVmaW5lIE9NQVA0X1BNX0wzSU5JVF9VU0JfVExMX1dLREVQX09GRlNFVAkJMHgwMDY4Ci0jZGVmaW5lIE9NQVA0NDMwX1BNX0wzSU5JVF9VU0JfVExMX1dLREVQCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDNJTklUX01PRCwgMHgwMDY4KQorI2RlZmluZSBPTUFQNDQzMF9QTV9MM0lOSVRfVVNCX1RMTF9XS0RFUAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0wzSU5JVF9JTlNULCAweDAwNjgpCiAjZGVmaW5lIE9NQVA0X1JNX0wzSU5JVF9VU0JfVExMX0NPTlRFWFRfT0ZGU0VUCQkweDAwNmMKLSNkZWZpbmUgT01BUDQ0MzBfUk1fTDNJTklUX1VTQl9UTExfQ09OVEVYVAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0wzSU5JVF9NT0QsIDB4MDA2YykKKyNkZWZpbmUgT01BUDQ0MzBfUk1fTDNJTklUX1VTQl9UTExfQ09OVEVYVAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0wzSU5JVF9JTlNULCAweDAwNmMpCiAjZGVmaW5lIE9NQVA0X1JNX0wzSU5JVF9QMTUwMF9DT05URVhUX09GRlNFVAkJMHgwMDdjCi0jZGVmaW5lIE9NQVA0NDMwX1JNX0wzSU5JVF9QMTUwMF9DT05URVhUCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDNJTklUX01PRCwgMHgwMDdjKQorI2RlZmluZSBPTUFQNDQzMF9STV9MM0lOSVRfUDE1MDBfQ09OVEVYVAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0wzSU5JVF9JTlNULCAweDAwN2MpCiAjZGVmaW5lIE9NQVA0X1JNX0wzSU5JVF9FTUFDX0NPTlRFWFRfT0ZGU0VUCQkweDAwODQKLSNkZWZpbmUgT01BUDQ0MzBfUk1fTDNJTklUX0VNQUNfQ09OVEVYVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MM0lOSVRfTU9ELCAweDAwODQpCisjZGVmaW5lIE9NQVA0NDMwX1JNX0wzSU5JVF9FTUFDX0NPTlRFWFQJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDNJTklUX0lOU1QsIDB4MDA4NCkKICNkZWZpbmUgT01BUDRfUE1fTDNJTklUX1NBVEFfV0tERVBfT0ZGU0VUCQkweDAwODgKLSNkZWZpbmUgT01BUDQ0MzBfUE1fTDNJTklUX1NBVEFfV0tERVAJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDNJTklUX01PRCwgMHgwMDg4KQorI2RlZmluZSBPTUFQNDQzMF9QTV9MM0lOSVRfU0FUQV9XS0RFUAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MM0lOSVRfSU5TVCwgMHgwMDg4KQogI2RlZmluZSBPTUFQNF9STV9MM0lOSVRfU0FUQV9DT05URVhUX09GRlNFVAkJMHgwMDhjCi0jZGVmaW5lIE9NQVA0NDMwX1JNX0wzSU5JVF9TQVRBX0NPTlRFWFQJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDNJTklUX01PRCwgMHgwMDhjKQorI2RlZmluZSBPTUFQNDQzMF9STV9MM0lOSVRfU0FUQV9DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0wzSU5JVF9JTlNULCAweDAwOGMpCiAjZGVmaW5lIE9NQVA0X1JNX0wzSU5JVF9UUFBTU19DT05URVhUX09GRlNFVAkJMHgwMDk0Ci0jZGVmaW5lIE9NQVA0NDMwX1JNX0wzSU5JVF9UUFBTU19DT05URVhUCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDNJTklUX01PRCwgMHgwMDk0KQorI2RlZmluZSBPTUFQNDQzMF9STV9MM0lOSVRfVFBQU1NfQ09OVEVYVAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0wzSU5JVF9JTlNULCAweDAwOTQpCiAjZGVmaW5lIE9NQVA0X1BNX0wzSU5JVF9QQ0lFU1NfV0tERVBfT0ZGU0VUCQkweDAwOTgKLSNkZWZpbmUgT01BUDQ0MzBfUE1fTDNJTklUX1BDSUVTU19XS0RFUAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MM0lOSVRfTU9ELCAweDAwOTgpCisjZGVmaW5lIE9NQVA0NDMwX1BNX0wzSU5JVF9QQ0lFU1NfV0tERVAJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDNJTklUX0lOU1QsIDB4MDA5OCkKICNkZWZpbmUgT01BUDRfUk1fTDNJTklUX1BDSUVTU19DT05URVhUX09GRlNFVAkJMHgwMDljCi0jZGVmaW5lIE9NQVA0NDMwX1JNX0wzSU5JVF9QQ0lFU1NfQ09OVEVYVAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0wzSU5JVF9NT0QsIDB4MDA5YykKKyNkZWZpbmUgT01BUDQ0MzBfUk1fTDNJTklUX1BDSUVTU19DT05URVhUCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDNJTklUX0lOU1QsIDB4MDA5YykKICNkZWZpbmUgT01BUDRfUk1fTDNJTklUX0NDUFRYX0NPTlRFWFRfT0ZGU0VUCQkweDAwYWMKLSNkZWZpbmUgT01BUDQ0MzBfUk1fTDNJTklUX0NDUFRYX0NPTlRFWFQJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MM0lOSVRfTU9ELCAweDAwYWMpCisjZGVmaW5lIE9NQVA0NDMwX1JNX0wzSU5JVF9DQ1BUWF9DT05URVhUCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDNJTklUX0lOU1QsIDB4MDBhYykKICNkZWZpbmUgT01BUDRfUE1fTDNJTklUX1hIUElfV0tERVBfT0ZGU0VUCQkweDAwYzAKLSNkZWZpbmUgT01BUDQ0MzBfUE1fTDNJTklUX1hIUElfV0tERVAJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDNJTklUX01PRCwgMHgwMGMwKQorI2RlZmluZSBPTUFQNDQzMF9QTV9MM0lOSVRfWEhQSV9XS0RFUAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MM0lOSVRfSU5TVCwgMHgwMGMwKQogI2RlZmluZSBPTUFQNF9STV9MM0lOSVRfWEhQSV9DT05URVhUX09GRlNFVAkJMHgwMGM0Ci0jZGVmaW5lIE9NQVA0NDMwX1JNX0wzSU5JVF9YSFBJX0NPTlRFWFQJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDNJTklUX01PRCwgMHgwMGM0KQorI2RlZmluZSBPTUFQNDQzMF9STV9MM0lOSVRfWEhQSV9DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0wzSU5JVF9JTlNULCAweDAwYzQpCiAjZGVmaW5lIE9NQVA0X1BNX0wzSU5JVF9NTUM2X1dLREVQX09GRlNFVAkJMHgwMGM4Ci0jZGVmaW5lIE9NQVA0NDMwX1BNX0wzSU5JVF9NTUM2X1dLREVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0wzSU5JVF9NT0QsIDB4MDBjOCkKKyNkZWZpbmUgT01BUDQ0MzBfUE1fTDNJTklUX01NQzZfV0tERVAJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDNJTklUX0lOU1QsIDB4MDBjOCkKICNkZWZpbmUgT01BUDRfUk1fTDNJTklUX01NQzZfQ09OVEVYVF9PRkZTRVQJCTB4MDBjYwotI2RlZmluZSBPTUFQNDQzMF9STV9MM0lOSVRfTU1DNl9DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0wzSU5JVF9NT0QsIDB4MDBjYykKKyNkZWZpbmUgT01BUDQ0MzBfUk1fTDNJTklUX01NQzZfQ09OVEVYVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MM0lOSVRfSU5TVCwgMHgwMGNjKQogI2RlZmluZSBPTUFQNF9QTV9MM0lOSVRfVVNCX0hPU1RfRlNfV0tERVBfT0ZGU0VUCTB4MDBkMAotI2RlZmluZSBPTUFQNDQzMF9QTV9MM0lOSVRfVVNCX0hPU1RfRlNfV0tERVAJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MM0lOSVRfTU9ELCAweDAwZDApCisjZGVmaW5lIE9NQVA0NDMwX1BNX0wzSU5JVF9VU0JfSE9TVF9GU19XS0RFUAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0wzSU5JVF9JTlNULCAweDAwZDApCiAjZGVmaW5lIE9NQVA0X1JNX0wzSU5JVF9VU0JfSE9TVF9GU19DT05URVhUX09GRlNFVAkweDAwZDQKLSNkZWZpbmUgT01BUDQ0MzBfUk1fTDNJTklUX1VTQl9IT1NUX0ZTX0NPTlRFWFQJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MM0lOSVRfTU9ELCAweDAwZDQpCisjZGVmaW5lIE9NQVA0NDMwX1JNX0wzSU5JVF9VU0JfSE9TVF9GU19DT05URVhUCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDNJTklUX0lOU1QsIDB4MDBkNCkKICNkZWZpbmUgT01BUDRfUk1fTDNJTklUX1VTQlBIWU9DUDJTQ1BfQ09OVEVYVF9PRkZTRVQJMHgwMGU0Ci0jZGVmaW5lIE9NQVA0NDMwX1JNX0wzSU5JVF9VU0JQSFlPQ1AyU0NQX0NPTlRFWFQJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0wzSU5JVF9NT0QsIDB4MDBlNCkKKyNkZWZpbmUgT01BUDQ0MzBfUk1fTDNJTklUX1VTQlBIWU9DUDJTQ1BfQ09OVEVYVAlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDNJTklUX0lOU1QsIDB4MDBlNCkKIAogLyogUFJNLkw0UEVSX1BSTSByZWdpc3RlciBvZmZzZXRzICovCiAjZGVmaW5lIE9NQVA0X1BNX0w0UEVSX1BXUlNUQ1RSTF9PRkZTRVQJCQkweDAwMDAKLSNkZWZpbmUgT01BUDQ0MzBfUE1fTDRQRVJfUFdSU1RDVFJMCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX01PRCwgMHgwMDAwKQorI2RlZmluZSBPTUFQNDQzMF9QTV9MNFBFUl9QV1JTVENUUkwJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfSU5TVCwgMHgwMDAwKQogI2RlZmluZSBPTUFQNF9QTV9MNFBFUl9QV1JTVFNUX09GRlNFVAkJCTB4MDAwNAotI2RlZmluZSBPTUFQNDQzMF9QTV9MNFBFUl9QV1JTVFNUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX01PRCwgMHgwMDA0KQorI2RlZmluZSBPTUFQNDQzMF9QTV9MNFBFUl9QV1JTVFNUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX0lOU1QsIDB4MDAwNCkKICNkZWZpbmUgT01BUDRfUk1fTDRQRVJfQURDX0NPTlRFWFRfT0ZGU0VUCQkweDAwMjQKLSNkZWZpbmUgT01BUDQ0MzBfUk1fTDRQRVJfQURDX0NPTlRFWFQJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfTU9ELCAweDAwMjQpCisjZGVmaW5lIE9NQVA0NDMwX1JNX0w0UEVSX0FEQ19DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX0lOU1QsIDB4MDAyNCkKICNkZWZpbmUgT01BUDRfUE1fTDRQRVJfRE1USU1FUjEwX1dLREVQX09GRlNFVAkJMHgwMDI4Ci0jZGVmaW5lIE9NQVA0NDMwX1BNX0w0UEVSX0RNVElNRVIxMF9XS0RFUAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX01PRCwgMHgwMDI4KQorI2RlZmluZSBPTUFQNDQzMF9QTV9MNFBFUl9ETVRJTUVSMTBfV0tERVAJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9JTlNULCAweDAwMjgpCiAjZGVmaW5lIE9NQVA0X1JNX0w0UEVSX0RNVElNRVIxMF9DT05URVhUX09GRlNFVAkJMHgwMDJjCi0jZGVmaW5lIE9NQVA0NDMwX1JNX0w0UEVSX0RNVElNRVIxMF9DT05URVhUCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfTU9ELCAweDAwMmMpCisjZGVmaW5lIE9NQVA0NDMwX1JNX0w0UEVSX0RNVElNRVIxMF9DT05URVhUCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfSU5TVCwgMHgwMDJjKQogI2RlZmluZSBPTUFQNF9QTV9MNFBFUl9ETVRJTUVSMTFfV0tERVBfT0ZGU0VUCQkweDAwMzAKLSNkZWZpbmUgT01BUDQ0MzBfUE1fTDRQRVJfRE1USU1FUjExX1dLREVQCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfTU9ELCAweDAwMzApCisjZGVmaW5lIE9NQVA0NDMwX1BNX0w0UEVSX0RNVElNRVIxMV9XS0RFUAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX0lOU1QsIDB4MDAzMCkKICNkZWZpbmUgT01BUDRfUk1fTDRQRVJfRE1USU1FUjExX0NPTlRFWFRfT0ZGU0VUCQkweDAwMzQKLSNkZWZpbmUgT01BUDQ0MzBfUk1fTDRQRVJfRE1USU1FUjExX0NPTlRFWFQJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9NT0QsIDB4MDAzNCkKKyNkZWZpbmUgT01BUDQ0MzBfUk1fTDRQRVJfRE1USU1FUjExX0NPTlRFWFQJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9JTlNULCAweDAwMzQpCiAjZGVmaW5lIE9NQVA0X1BNX0w0UEVSX0RNVElNRVIyX1dLREVQX09GRlNFVAkJMHgwMDM4Ci0jZGVmaW5lIE9NQVA0NDMwX1BNX0w0UEVSX0RNVElNRVIyX1dLREVQCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfTU9ELCAweDAwMzgpCisjZGVmaW5lIE9NQVA0NDMwX1BNX0w0UEVSX0RNVElNRVIyX1dLREVQCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfSU5TVCwgMHgwMDM4KQogI2RlZmluZSBPTUFQNF9STV9MNFBFUl9ETVRJTUVSMl9DT05URVhUX09GRlNFVAkJMHgwMDNjCi0jZGVmaW5lIE9NQVA0NDMwX1JNX0w0UEVSX0RNVElNRVIyX0NPTlRFWFQJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9NT0QsIDB4MDAzYykKKyNkZWZpbmUgT01BUDQ0MzBfUk1fTDRQRVJfRE1USU1FUjJfQ09OVEVYVAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX0lOU1QsIDB4MDAzYykKICNkZWZpbmUgT01BUDRfUE1fTDRQRVJfRE1USU1FUjNfV0tERVBfT0ZGU0VUCQkweDAwNDAKLSNkZWZpbmUgT01BUDQ0MzBfUE1fTDRQRVJfRE1USU1FUjNfV0tERVAJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9NT0QsIDB4MDA0MCkKKyNkZWZpbmUgT01BUDQ0MzBfUE1fTDRQRVJfRE1USU1FUjNfV0tERVAJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9JTlNULCAweDAwNDApCiAjZGVmaW5lIE9NQVA0X1JNX0w0UEVSX0RNVElNRVIzX0NPTlRFWFRfT0ZGU0VUCQkweDAwNDQKLSNkZWZpbmUgT01BUDQ0MzBfUk1fTDRQRVJfRE1USU1FUjNfQ09OVEVYVAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX01PRCwgMHgwMDQ0KQorI2RlZmluZSBPTUFQNDQzMF9STV9MNFBFUl9ETVRJTUVSM19DT05URVhUCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfSU5TVCwgMHgwMDQ0KQogI2RlZmluZSBPTUFQNF9QTV9MNFBFUl9ETVRJTUVSNF9XS0RFUF9PRkZTRVQJCTB4MDA0OAotI2RlZmluZSBPTUFQNDQzMF9QTV9MNFBFUl9ETVRJTUVSNF9XS0RFUAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX01PRCwgMHgwMDQ4KQorI2RlZmluZSBPTUFQNDQzMF9QTV9MNFBFUl9ETVRJTUVSNF9XS0RFUAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX0lOU1QsIDB4MDA0OCkKICNkZWZpbmUgT01BUDRfUk1fTDRQRVJfRE1USU1FUjRfQ09OVEVYVF9PRkZTRVQJCTB4MDA0YwotI2RlZmluZSBPTUFQNDQzMF9STV9MNFBFUl9ETVRJTUVSNF9DT05URVhUCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfTU9ELCAweDAwNGMpCisjZGVmaW5lIE9NQVA0NDMwX1JNX0w0UEVSX0RNVElNRVI0X0NPTlRFWFQJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9JTlNULCAweDAwNGMpCiAjZGVmaW5lIE9NQVA0X1BNX0w0UEVSX0RNVElNRVI5X1dLREVQX09GRlNFVAkJMHgwMDUwCi0jZGVmaW5lIE9NQVA0NDMwX1BNX0w0UEVSX0RNVElNRVI5X1dLREVQCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfTU9ELCAweDAwNTApCisjZGVmaW5lIE9NQVA0NDMwX1BNX0w0UEVSX0RNVElNRVI5X1dLREVQCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfSU5TVCwgMHgwMDUwKQogI2RlZmluZSBPTUFQNF9STV9MNFBFUl9ETVRJTUVSOV9DT05URVhUX09GRlNFVAkJMHgwMDU0Ci0jZGVmaW5lIE9NQVA0NDMwX1JNX0w0UEVSX0RNVElNRVI5X0NPTlRFWFQJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9NT0QsIDB4MDA1NCkKKyNkZWZpbmUgT01BUDQ0MzBfUk1fTDRQRVJfRE1USU1FUjlfQ09OVEVYVAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX0lOU1QsIDB4MDA1NCkKICNkZWZpbmUgT01BUDRfUk1fTDRQRVJfRUxNX0NPTlRFWFRfT0ZGU0VUCQkweDAwNWMKLSNkZWZpbmUgT01BUDQ0MzBfUk1fTDRQRVJfRUxNX0NPTlRFWFQJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfTU9ELCAweDAwNWMpCisjZGVmaW5lIE9NQVA0NDMwX1JNX0w0UEVSX0VMTV9DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX0lOU1QsIDB4MDA1YykKICNkZWZpbmUgT01BUDRfUE1fTDRQRVJfR1BJTzJfV0tERVBfT0ZGU0VUCQkweDAwNjAKLSNkZWZpbmUgT01BUDQ0MzBfUE1fTDRQRVJfR1BJTzJfV0tERVAJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfTU9ELCAweDAwNjApCisjZGVmaW5lIE9NQVA0NDMwX1BNX0w0UEVSX0dQSU8yX1dLREVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX0lOU1QsIDB4MDA2MCkKICNkZWZpbmUgT01BUDRfUk1fTDRQRVJfR1BJTzJfQ09OVEVYVF9PRkZTRVQJCTB4MDA2NAotI2RlZmluZSBPTUFQNDQzMF9STV9MNFBFUl9HUElPMl9DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX01PRCwgMHgwMDY0KQorI2RlZmluZSBPTUFQNDQzMF9STV9MNFBFUl9HUElPMl9DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX0lOU1QsIDB4MDA2NCkKICNkZWZpbmUgT01BUDRfUE1fTDRQRVJfR1BJTzNfV0tERVBfT0ZGU0VUCQkweDAwNjgKLSNkZWZpbmUgT01BUDQ0MzBfUE1fTDRQRVJfR1BJTzNfV0tERVAJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfTU9ELCAweDAwNjgpCisjZGVmaW5lIE9NQVA0NDMwX1BNX0w0UEVSX0dQSU8zX1dLREVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX0lOU1QsIDB4MDA2OCkKICNkZWZpbmUgT01BUDRfUk1fTDRQRVJfR1BJTzNfQ09OVEVYVF9PRkZTRVQJCTB4MDA2YwotI2RlZmluZSBPTUFQNDQzMF9STV9MNFBFUl9HUElPM19DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX01PRCwgMHgwMDZjKQorI2RlZmluZSBPTUFQNDQzMF9STV9MNFBFUl9HUElPM19DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX0lOU1QsIDB4MDA2YykKICNkZWZpbmUgT01BUDRfUE1fTDRQRVJfR1BJTzRfV0tERVBfT0ZGU0VUCQkweDAwNzAKLSNkZWZpbmUgT01BUDQ0MzBfUE1fTDRQRVJfR1BJTzRfV0tERVAJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfTU9ELCAweDAwNzApCisjZGVmaW5lIE9NQVA0NDMwX1BNX0w0UEVSX0dQSU80X1dLREVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX0lOU1QsIDB4MDA3MCkKICNkZWZpbmUgT01BUDRfUk1fTDRQRVJfR1BJTzRfQ09OVEVYVF9PRkZTRVQJCTB4MDA3NAotI2RlZmluZSBPTUFQNDQzMF9STV9MNFBFUl9HUElPNF9DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX01PRCwgMHgwMDc0KQorI2RlZmluZSBPTUFQNDQzMF9STV9MNFBFUl9HUElPNF9DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX0lOU1QsIDB4MDA3NCkKICNkZWZpbmUgT01BUDRfUE1fTDRQRVJfR1BJTzVfV0tERVBfT0ZGU0VUCQkweDAwNzgKLSNkZWZpbmUgT01BUDQ0MzBfUE1fTDRQRVJfR1BJTzVfV0tERVAJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfTU9ELCAweDAwNzgpCisjZGVmaW5lIE9NQVA0NDMwX1BNX0w0UEVSX0dQSU81X1dLREVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX0lOU1QsIDB4MDA3OCkKICNkZWZpbmUgT01BUDRfUk1fTDRQRVJfR1BJTzVfQ09OVEVYVF9PRkZTRVQJCTB4MDA3YwotI2RlZmluZSBPTUFQNDQzMF9STV9MNFBFUl9HUElPNV9DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX01PRCwgMHgwMDdjKQorI2RlZmluZSBPTUFQNDQzMF9STV9MNFBFUl9HUElPNV9DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX0lOU1QsIDB4MDA3YykKICNkZWZpbmUgT01BUDRfUE1fTDRQRVJfR1BJTzZfV0tERVBfT0ZGU0VUCQkweDAwODAKLSNkZWZpbmUgT01BUDQ0MzBfUE1fTDRQRVJfR1BJTzZfV0tERVAJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfTU9ELCAweDAwODApCisjZGVmaW5lIE9NQVA0NDMwX1BNX0w0UEVSX0dQSU82X1dLREVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX0lOU1QsIDB4MDA4MCkKICNkZWZpbmUgT01BUDRfUk1fTDRQRVJfR1BJTzZfQ09OVEVYVF9PRkZTRVQJCTB4MDA4NAotI2RlZmluZSBPTUFQNDQzMF9STV9MNFBFUl9HUElPNl9DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX01PRCwgMHgwMDg0KQorI2RlZmluZSBPTUFQNDQzMF9STV9MNFBFUl9HUElPNl9DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX0lOU1QsIDB4MDA4NCkKICNkZWZpbmUgT01BUDRfUk1fTDRQRVJfSERRMVdfQ09OVEVYVF9PRkZTRVQJCTB4MDA4YwotI2RlZmluZSBPTUFQNDQzMF9STV9MNFBFUl9IRFExV19DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX01PRCwgMHgwMDhjKQorI2RlZmluZSBPTUFQNDQzMF9STV9MNFBFUl9IRFExV19DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX0lOU1QsIDB4MDA4YykKICNkZWZpbmUgT01BUDRfUE1fTDRQRVJfSEVDQzFfV0tERVBfT0ZGU0VUCQkweDAwOTAKLSNkZWZpbmUgT01BUDQ0MzBfUE1fTDRQRVJfSEVDQzFfV0tERVAJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfTU9ELCAweDAwOTApCisjZGVmaW5lIE9NQVA0NDMwX1BNX0w0UEVSX0hFQ0MxX1dLREVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX0lOU1QsIDB4MDA5MCkKICNkZWZpbmUgT01BUDRfUk1fTDRQRVJfSEVDQzFfQ09OVEVYVF9PRkZTRVQJCTB4MDA5NAotI2RlZmluZSBPTUFQNDQzMF9STV9MNFBFUl9IRUNDMV9DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX01PRCwgMHgwMDk0KQorI2RlZmluZSBPTUFQNDQzMF9STV9MNFBFUl9IRUNDMV9DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX0lOU1QsIDB4MDA5NCkKICNkZWZpbmUgT01BUDRfUE1fTDRQRVJfSEVDQzJfV0tERVBfT0ZGU0VUCQkweDAwOTgKLSNkZWZpbmUgT01BUDQ0MzBfUE1fTDRQRVJfSEVDQzJfV0tERVAJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfTU9ELCAweDAwOTgpCisjZGVmaW5lIE9NQVA0NDMwX1BNX0w0UEVSX0hFQ0MyX1dLREVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX0lOU1QsIDB4MDA5OCkKICNkZWZpbmUgT01BUDRfUk1fTDRQRVJfSEVDQzJfQ09OVEVYVF9PRkZTRVQJCTB4MDA5YwotI2RlZmluZSBPTUFQNDQzMF9STV9MNFBFUl9IRUNDMl9DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX01PRCwgMHgwMDljKQorI2RlZmluZSBPTUFQNDQzMF9STV9MNFBFUl9IRUNDMl9DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX0lOU1QsIDB4MDA5YykKICNkZWZpbmUgT01BUDRfUE1fTDRQRVJfSTJDMV9XS0RFUF9PRkZTRVQJCTB4MDBhMAotI2RlZmluZSBPTUFQNDQzMF9QTV9MNFBFUl9JMkMxX1dLREVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX01PRCwgMHgwMGEwKQorI2RlZmluZSBPTUFQNDQzMF9QTV9MNFBFUl9JMkMxX1dLREVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX0lOU1QsIDB4MDBhMCkKICNkZWZpbmUgT01BUDRfUk1fTDRQRVJfSTJDMV9DT05URVhUX09GRlNFVAkJMHgwMGE0Ci0jZGVmaW5lIE9NQVA0NDMwX1JNX0w0UEVSX0kyQzFfQ09OVEVYVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9NT0QsIDB4MDBhNCkKKyNkZWZpbmUgT01BUDQ0MzBfUk1fTDRQRVJfSTJDMV9DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX0lOU1QsIDB4MDBhNCkKICNkZWZpbmUgT01BUDRfUE1fTDRQRVJfSTJDMl9XS0RFUF9PRkZTRVQJCTB4MDBhOAotI2RlZmluZSBPTUFQNDQzMF9QTV9MNFBFUl9JMkMyX1dLREVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX01PRCwgMHgwMGE4KQorI2RlZmluZSBPTUFQNDQzMF9QTV9MNFBFUl9JMkMyX1dLREVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX0lOU1QsIDB4MDBhOCkKICNkZWZpbmUgT01BUDRfUk1fTDRQRVJfSTJDMl9DT05URVhUX09GRlNFVAkJMHgwMGFjCi0jZGVmaW5lIE9NQVA0NDMwX1JNX0w0UEVSX0kyQzJfQ09OVEVYVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9NT0QsIDB4MDBhYykKKyNkZWZpbmUgT01BUDQ0MzBfUk1fTDRQRVJfSTJDMl9DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX0lOU1QsIDB4MDBhYykKICNkZWZpbmUgT01BUDRfUE1fTDRQRVJfSTJDM19XS0RFUF9PRkZTRVQJCTB4MDBiMAotI2RlZmluZSBPTUFQNDQzMF9QTV9MNFBFUl9JMkMzX1dLREVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX01PRCwgMHgwMGIwKQorI2RlZmluZSBPTUFQNDQzMF9QTV9MNFBFUl9JMkMzX1dLREVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX0lOU1QsIDB4MDBiMCkKICNkZWZpbmUgT01BUDRfUk1fTDRQRVJfSTJDM19DT05URVhUX09GRlNFVAkJMHgwMGI0Ci0jZGVmaW5lIE9NQVA0NDMwX1JNX0w0UEVSX0kyQzNfQ09OVEVYVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9NT0QsIDB4MDBiNCkKKyNkZWZpbmUgT01BUDQ0MzBfUk1fTDRQRVJfSTJDM19DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX0lOU1QsIDB4MDBiNCkKICNkZWZpbmUgT01BUDRfUE1fTDRQRVJfSTJDNF9XS0RFUF9PRkZTRVQJCTB4MDBiOAotI2RlZmluZSBPTUFQNDQzMF9QTV9MNFBFUl9JMkM0X1dLREVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX01PRCwgMHgwMGI4KQorI2RlZmluZSBPTUFQNDQzMF9QTV9MNFBFUl9JMkM0X1dLREVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX0lOU1QsIDB4MDBiOCkKICNkZWZpbmUgT01BUDRfUk1fTDRQRVJfSTJDNF9DT05URVhUX09GRlNFVAkJMHgwMGJjCi0jZGVmaW5lIE9NQVA0NDMwX1JNX0w0UEVSX0kyQzRfQ09OVEVYVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9NT0QsIDB4MDBiYykKKyNkZWZpbmUgT01BUDQ0MzBfUk1fTDRQRVJfSTJDNF9DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX0lOU1QsIDB4MDBiYykKICNkZWZpbmUgT01BUDRfUk1fTDRQRVJfTDRfUEVSX0NPTlRFWFRfT0ZGU0VUCQkweDAwYzAKLSNkZWZpbmUgT01BUDQ0MzBfUk1fTDRQRVJfTDRfUEVSX0NPTlRFWFQJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9NT0QsIDB4MDBjMCkKKyNkZWZpbmUgT01BUDQ0MzBfUk1fTDRQRVJfTDRfUEVSX0NPTlRFWFQJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9JTlNULCAweDAwYzApCiAjZGVmaW5lIE9NQVA0X1BNX0w0UEVSX01DQVNQMl9XS0RFUF9PRkZTRVQJCTB4MDBkMAotI2RlZmluZSBPTUFQNDQzMF9QTV9MNFBFUl9NQ0FTUDJfV0tERVAJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfTU9ELCAweDAwZDApCisjZGVmaW5lIE9NQVA0NDMwX1BNX0w0UEVSX01DQVNQMl9XS0RFUAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9JTlNULCAweDAwZDApCiAjZGVmaW5lIE9NQVA0X1JNX0w0UEVSX01DQVNQMl9DT05URVhUX09GRlNFVAkJMHgwMGQ0Ci0jZGVmaW5lIE9NQVA0NDMwX1JNX0w0UEVSX01DQVNQMl9DT05URVhUCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfTU9ELCAweDAwZDQpCisjZGVmaW5lIE9NQVA0NDMwX1JNX0w0UEVSX01DQVNQMl9DT05URVhUCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfSU5TVCwgMHgwMGQ0KQogI2RlZmluZSBPTUFQNF9QTV9MNFBFUl9NQ0FTUDNfV0tERVBfT0ZGU0VUCQkweDAwZDgKLSNkZWZpbmUgT01BUDQ0MzBfUE1fTDRQRVJfTUNBU1AzX1dLREVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX01PRCwgMHgwMGQ4KQorI2RlZmluZSBPTUFQNDQzMF9QTV9MNFBFUl9NQ0FTUDNfV0tERVAJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfSU5TVCwgMHgwMGQ4KQogI2RlZmluZSBPTUFQNF9STV9MNFBFUl9NQ0FTUDNfQ09OVEVYVF9PRkZTRVQJCTB4MDBkYwotI2RlZmluZSBPTUFQNDQzMF9STV9MNFBFUl9NQ0FTUDNfQ09OVEVYVAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX01PRCwgMHgwMGRjKQorI2RlZmluZSBPTUFQNDQzMF9STV9MNFBFUl9NQ0FTUDNfQ09OVEVYVAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX0lOU1QsIDB4MDBkYykKICNkZWZpbmUgT01BUDRfUE1fTDRQRVJfTUNCU1A0X1dLREVQX09GRlNFVAkJMHgwMGUwCi0jZGVmaW5lIE9NQVA0NDMwX1BNX0w0UEVSX01DQlNQNF9XS0RFUAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9NT0QsIDB4MDBlMCkKKyNkZWZpbmUgT01BUDQ0MzBfUE1fTDRQRVJfTUNCU1A0X1dLREVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX0lOU1QsIDB4MDBlMCkKICNkZWZpbmUgT01BUDRfUk1fTDRQRVJfTUNCU1A0X0NPTlRFWFRfT0ZGU0VUCQkweDAwZTQKLSNkZWZpbmUgT01BUDQ0MzBfUk1fTDRQRVJfTUNCU1A0X0NPTlRFWFQJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9NT0QsIDB4MDBlNCkKKyNkZWZpbmUgT01BUDQ0MzBfUk1fTDRQRVJfTUNCU1A0X0NPTlRFWFQJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9JTlNULCAweDAwZTQpCiAjZGVmaW5lIE9NQVA0X1JNX0w0UEVSX01HQVRFX0NPTlRFWFRfT0ZGU0VUCQkweDAwZWMKLSNkZWZpbmUgT01BUDQ0MzBfUk1fTDRQRVJfTUdBVEVfQ09OVEVYVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9NT0QsIDB4MDBlYykKKyNkZWZpbmUgT01BUDQ0MzBfUk1fTDRQRVJfTUdBVEVfQ09OVEVYVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9JTlNULCAweDAwZWMpCiAjZGVmaW5lIE9NQVA0X1BNX0w0UEVSX01DU1BJMV9XS0RFUF9PRkZTRVQJCTB4MDBmMAotI2RlZmluZSBPTUFQNDQzMF9QTV9MNFBFUl9NQ1NQSTFfV0tERVAJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfTU9ELCAweDAwZjApCisjZGVmaW5lIE9NQVA0NDMwX1BNX0w0UEVSX01DU1BJMV9XS0RFUAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9JTlNULCAweDAwZjApCiAjZGVmaW5lIE9NQVA0X1JNX0w0UEVSX01DU1BJMV9DT05URVhUX09GRlNFVAkJMHgwMGY0Ci0jZGVmaW5lIE9NQVA0NDMwX1JNX0w0UEVSX01DU1BJMV9DT05URVhUCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfTU9ELCAweDAwZjQpCisjZGVmaW5lIE9NQVA0NDMwX1JNX0w0UEVSX01DU1BJMV9DT05URVhUCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfSU5TVCwgMHgwMGY0KQogI2RlZmluZSBPTUFQNF9QTV9MNFBFUl9NQ1NQSTJfV0tERVBfT0ZGU0VUCQkweDAwZjgKLSNkZWZpbmUgT01BUDQ0MzBfUE1fTDRQRVJfTUNTUEkyX1dLREVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX01PRCwgMHgwMGY4KQorI2RlZmluZSBPTUFQNDQzMF9QTV9MNFBFUl9NQ1NQSTJfV0tERVAJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfSU5TVCwgMHgwMGY4KQogI2RlZmluZSBPTUFQNF9STV9MNFBFUl9NQ1NQSTJfQ09OVEVYVF9PRkZTRVQJCTB4MDBmYwotI2RlZmluZSBPTUFQNDQzMF9STV9MNFBFUl9NQ1NQSTJfQ09OVEVYVAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX01PRCwgMHgwMGZjKQorI2RlZmluZSBPTUFQNDQzMF9STV9MNFBFUl9NQ1NQSTJfQ09OVEVYVAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX0lOU1QsIDB4MDBmYykKICNkZWZpbmUgT01BUDRfUE1fTDRQRVJfTUNTUEkzX1dLREVQX09GRlNFVAkJMHgwMTAwCi0jZGVmaW5lIE9NQVA0NDMwX1BNX0w0UEVSX01DU1BJM19XS0RFUAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9NT0QsIDB4MDEwMCkKKyNkZWZpbmUgT01BUDQ0MzBfUE1fTDRQRVJfTUNTUEkzX1dLREVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX0lOU1QsIDB4MDEwMCkKICNkZWZpbmUgT01BUDRfUk1fTDRQRVJfTUNTUEkzX0NPTlRFWFRfT0ZGU0VUCQkweDAxMDQKLSNkZWZpbmUgT01BUDQ0MzBfUk1fTDRQRVJfTUNTUEkzX0NPTlRFWFQJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9NT0QsIDB4MDEwNCkKKyNkZWZpbmUgT01BUDQ0MzBfUk1fTDRQRVJfTUNTUEkzX0NPTlRFWFQJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9JTlNULCAweDAxMDQpCiAjZGVmaW5lIE9NQVA0X1BNX0w0UEVSX01DU1BJNF9XS0RFUF9PRkZTRVQJCTB4MDEwOAotI2RlZmluZSBPTUFQNDQzMF9QTV9MNFBFUl9NQ1NQSTRfV0tERVAJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfTU9ELCAweDAxMDgpCisjZGVmaW5lIE9NQVA0NDMwX1BNX0w0UEVSX01DU1BJNF9XS0RFUAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9JTlNULCAweDAxMDgpCiAjZGVmaW5lIE9NQVA0X1JNX0w0UEVSX01DU1BJNF9DT05URVhUX09GRlNFVAkJMHgwMTBjCi0jZGVmaW5lIE9NQVA0NDMwX1JNX0w0UEVSX01DU1BJNF9DT05URVhUCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfTU9ELCAweDAxMGMpCisjZGVmaW5lIE9NQVA0NDMwX1JNX0w0UEVSX01DU1BJNF9DT05URVhUCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfSU5TVCwgMHgwMTBjKQogI2RlZmluZSBPTUFQNF9QTV9MNFBFUl9NTUNTRDNfV0tERVBfT0ZGU0VUCQkweDAxMjAKLSNkZWZpbmUgT01BUDQ0MzBfUE1fTDRQRVJfTU1DU0QzX1dLREVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX01PRCwgMHgwMTIwKQorI2RlZmluZSBPTUFQNDQzMF9QTV9MNFBFUl9NTUNTRDNfV0tERVAJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfSU5TVCwgMHgwMTIwKQogI2RlZmluZSBPTUFQNF9STV9MNFBFUl9NTUNTRDNfQ09OVEVYVF9PRkZTRVQJCTB4MDEyNAotI2RlZmluZSBPTUFQNDQzMF9STV9MNFBFUl9NTUNTRDNfQ09OVEVYVAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX01PRCwgMHgwMTI0KQorI2RlZmluZSBPTUFQNDQzMF9STV9MNFBFUl9NTUNTRDNfQ09OVEVYVAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX0lOU1QsIDB4MDEyNCkKICNkZWZpbmUgT01BUDRfUE1fTDRQRVJfTU1DU0Q0X1dLREVQX09GRlNFVAkJMHgwMTI4Ci0jZGVmaW5lIE9NQVA0NDMwX1BNX0w0UEVSX01NQ1NENF9XS0RFUAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9NT0QsIDB4MDEyOCkKKyNkZWZpbmUgT01BUDQ0MzBfUE1fTDRQRVJfTU1DU0Q0X1dLREVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX0lOU1QsIDB4MDEyOCkKICNkZWZpbmUgT01BUDRfUk1fTDRQRVJfTU1DU0Q0X0NPTlRFWFRfT0ZGU0VUCQkweDAxMmMKLSNkZWZpbmUgT01BUDQ0MzBfUk1fTDRQRVJfTU1DU0Q0X0NPTlRFWFQJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9NT0QsIDB4MDEyYykKKyNkZWZpbmUgT01BUDQ0MzBfUk1fTDRQRVJfTU1DU0Q0X0NPTlRFWFQJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9JTlNULCAweDAxMmMpCiAjZGVmaW5lIE9NQVA0X1JNX0w0UEVSX01TUFJPSEdfQ09OVEVYVF9PRkZTRVQJCTB4MDEzNAotI2RlZmluZSBPTUFQNDQzMF9STV9MNFBFUl9NU1BST0hHX0NPTlRFWFQJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9NT0QsIDB4MDEzNCkKKyNkZWZpbmUgT01BUDQ0MzBfUk1fTDRQRVJfTVNQUk9IR19DT05URVhUCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfSU5TVCwgMHgwMTM0KQogI2RlZmluZSBPTUFQNF9QTV9MNFBFUl9TTElNQlVTMl9XS0RFUF9PRkZTRVQJCTB4MDEzOAotI2RlZmluZSBPTUFQNDQzMF9QTV9MNFBFUl9TTElNQlVTMl9XS0RFUAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX01PRCwgMHgwMTM4KQorI2RlZmluZSBPTUFQNDQzMF9QTV9MNFBFUl9TTElNQlVTMl9XS0RFUAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX0lOU1QsIDB4MDEzOCkKICNkZWZpbmUgT01BUDRfUk1fTDRQRVJfU0xJTUJVUzJfQ09OVEVYVF9PRkZTRVQJCTB4MDEzYwotI2RlZmluZSBPTUFQNDQzMF9STV9MNFBFUl9TTElNQlVTMl9DT05URVhUCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfTU9ELCAweDAxM2MpCisjZGVmaW5lIE9NQVA0NDMwX1JNX0w0UEVSX1NMSU1CVVMyX0NPTlRFWFQJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9JTlNULCAweDAxM2MpCiAjZGVmaW5lIE9NQVA0X1BNX0w0UEVSX1VBUlQxX1dLREVQX09GRlNFVAkJMHgwMTQwCi0jZGVmaW5lIE9NQVA0NDMwX1BNX0w0UEVSX1VBUlQxX1dLREVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX01PRCwgMHgwMTQwKQorI2RlZmluZSBPTUFQNDQzMF9QTV9MNFBFUl9VQVJUMV9XS0RFUAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9JTlNULCAweDAxNDApCiAjZGVmaW5lIE9NQVA0X1JNX0w0UEVSX1VBUlQxX0NPTlRFWFRfT0ZGU0VUCQkweDAxNDQKLSNkZWZpbmUgT01BUDQ0MzBfUk1fTDRQRVJfVUFSVDFfQ09OVEVYVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9NT0QsIDB4MDE0NCkKKyNkZWZpbmUgT01BUDQ0MzBfUk1fTDRQRVJfVUFSVDFfQ09OVEVYVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9JTlNULCAweDAxNDQpCiAjZGVmaW5lIE9NQVA0X1BNX0w0UEVSX1VBUlQyX1dLREVQX09GRlNFVAkJMHgwMTQ4Ci0jZGVmaW5lIE9NQVA0NDMwX1BNX0w0UEVSX1VBUlQyX1dLREVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX01PRCwgMHgwMTQ4KQorI2RlZmluZSBPTUFQNDQzMF9QTV9MNFBFUl9VQVJUMl9XS0RFUAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9JTlNULCAweDAxNDgpCiAjZGVmaW5lIE9NQVA0X1JNX0w0UEVSX1VBUlQyX0NPTlRFWFRfT0ZGU0VUCQkweDAxNGMKLSNkZWZpbmUgT01BUDQ0MzBfUk1fTDRQRVJfVUFSVDJfQ09OVEVYVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9NT0QsIDB4MDE0YykKKyNkZWZpbmUgT01BUDQ0MzBfUk1fTDRQRVJfVUFSVDJfQ09OVEVYVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9JTlNULCAweDAxNGMpCiAjZGVmaW5lIE9NQVA0X1BNX0w0UEVSX1VBUlQzX1dLREVQX09GRlNFVAkJMHgwMTUwCi0jZGVmaW5lIE9NQVA0NDMwX1BNX0w0UEVSX1VBUlQzX1dLREVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX01PRCwgMHgwMTUwKQorI2RlZmluZSBPTUFQNDQzMF9QTV9MNFBFUl9VQVJUM19XS0RFUAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9JTlNULCAweDAxNTApCiAjZGVmaW5lIE9NQVA0X1JNX0w0UEVSX1VBUlQzX0NPTlRFWFRfT0ZGU0VUCQkweDAxNTQKLSNkZWZpbmUgT01BUDQ0MzBfUk1fTDRQRVJfVUFSVDNfQ09OVEVYVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9NT0QsIDB4MDE1NCkKKyNkZWZpbmUgT01BUDQ0MzBfUk1fTDRQRVJfVUFSVDNfQ09OVEVYVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9JTlNULCAweDAxNTQpCiAjZGVmaW5lIE9NQVA0X1BNX0w0UEVSX1VBUlQ0X1dLREVQX09GRlNFVAkJMHgwMTU4Ci0jZGVmaW5lIE9NQVA0NDMwX1BNX0w0UEVSX1VBUlQ0X1dLREVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX01PRCwgMHgwMTU4KQorI2RlZmluZSBPTUFQNDQzMF9QTV9MNFBFUl9VQVJUNF9XS0RFUAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9JTlNULCAweDAxNTgpCiAjZGVmaW5lIE9NQVA0X1JNX0w0UEVSX1VBUlQ0X0NPTlRFWFRfT0ZGU0VUCQkweDAxNWMKLSNkZWZpbmUgT01BUDQ0MzBfUk1fTDRQRVJfVUFSVDRfQ09OVEVYVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9NT0QsIDB4MDE1YykKKyNkZWZpbmUgT01BUDQ0MzBfUk1fTDRQRVJfVUFSVDRfQ09OVEVYVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9JTlNULCAweDAxNWMpCiAjZGVmaW5lIE9NQVA0X1BNX0w0UEVSX01NQ1NENV9XS0RFUF9PRkZTRVQJCTB4MDE2MAotI2RlZmluZSBPTUFQNDQzMF9QTV9MNFBFUl9NTUNTRDVfV0tERVAJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfTU9ELCAweDAxNjApCisjZGVmaW5lIE9NQVA0NDMwX1BNX0w0UEVSX01NQ1NENV9XS0RFUAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9JTlNULCAweDAxNjApCiAjZGVmaW5lIE9NQVA0X1JNX0w0UEVSX01NQ1NENV9DT05URVhUX09GRlNFVAkJMHgwMTY0Ci0jZGVmaW5lIE9NQVA0NDMwX1JNX0w0UEVSX01NQ1NENV9DT05URVhUCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfTU9ELCAweDAxNjQpCisjZGVmaW5lIE9NQVA0NDMwX1JNX0w0UEVSX01NQ1NENV9DT05URVhUCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfSU5TVCwgMHgwMTY0KQogI2RlZmluZSBPTUFQNF9QTV9MNFBFUl9JMkM1X1dLREVQX09GRlNFVAkJMHgwMTY4Ci0jZGVmaW5lIE9NQVA0NDMwX1BNX0w0UEVSX0kyQzVfV0tERVAJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfTU9ELCAweDAxNjgpCisjZGVmaW5lIE9NQVA0NDMwX1BNX0w0UEVSX0kyQzVfV0tERVAJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfSU5TVCwgMHgwMTY4KQogI2RlZmluZSBPTUFQNF9STV9MNFBFUl9JMkM1X0NPTlRFWFRfT0ZGU0VUCQkweDAxNmMKLSNkZWZpbmUgT01BUDQ0MzBfUk1fTDRQRVJfSTJDNV9DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX01PRCwgMHgwMTZjKQorI2RlZmluZSBPTUFQNDQzMF9STV9MNFBFUl9JMkM1X0NPTlRFWFQJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfSU5TVCwgMHgwMTZjKQogI2RlZmluZSBPTUFQNF9STV9MNFNFQ19BRVMxX0NPTlRFWFRfT0ZGU0VUCQkweDAxYTQKLSNkZWZpbmUgT01BUDQ0MzBfUk1fTDRTRUNfQUVTMV9DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX01PRCwgMHgwMWE0KQorI2RlZmluZSBPTUFQNDQzMF9STV9MNFNFQ19BRVMxX0NPTlRFWFQJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfSU5TVCwgMHgwMWE0KQogI2RlZmluZSBPTUFQNF9STV9MNFNFQ19BRVMyX0NPTlRFWFRfT0ZGU0VUCQkweDAxYWMKLSNkZWZpbmUgT01BUDQ0MzBfUk1fTDRTRUNfQUVTMl9DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX01PRCwgMHgwMWFjKQorI2RlZmluZSBPTUFQNDQzMF9STV9MNFNFQ19BRVMyX0NPTlRFWFQJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfSU5TVCwgMHgwMWFjKQogI2RlZmluZSBPTUFQNF9STV9MNFNFQ19ERVMzREVTX0NPTlRFWFRfT0ZGU0VUCQkweDAxYjQKLSNkZWZpbmUgT01BUDQ0MzBfUk1fTDRTRUNfREVTM0RFU19DT05URVhUCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfTU9ELCAweDAxYjQpCisjZGVmaW5lIE9NQVA0NDMwX1JNX0w0U0VDX0RFUzNERVNfQ09OVEVYVAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX0lOU1QsIDB4MDFiNCkKICNkZWZpbmUgT01BUDRfUk1fTDRTRUNfUEtBRUlQMjlfQ09OVEVYVF9PRkZTRVQJCTB4MDFiYwotI2RlZmluZSBPTUFQNDQzMF9STV9MNFNFQ19QS0FFSVAyOV9DT05URVhUCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfTU9ELCAweDAxYmMpCisjZGVmaW5lIE9NQVA0NDMwX1JNX0w0U0VDX1BLQUVJUDI5X0NPTlRFWFQJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9JTlNULCAweDAxYmMpCiAjZGVmaW5lIE9NQVA0X1JNX0w0U0VDX1JOR19DT05URVhUX09GRlNFVAkJMHgwMWM0Ci0jZGVmaW5lIE9NQVA0NDMwX1JNX0w0U0VDX1JOR19DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX01PRCwgMHgwMWM0KQorI2RlZmluZSBPTUFQNDQzMF9STV9MNFNFQ19STkdfQ09OVEVYVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9MNFBFUl9JTlNULCAweDAxYzQpCiAjZGVmaW5lIE9NQVA0X1JNX0w0U0VDX1NIQTJNRDUxX0NPTlRFWFRfT0ZGU0VUCQkweDAxY2MKLSNkZWZpbmUgT01BUDQ0MzBfUk1fTDRTRUNfU0hBMk1ENTFfQ09OVEVYVAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX01PRCwgMHgwMWNjKQorI2RlZmluZSBPTUFQNDQzMF9STV9MNFNFQ19TSEEyTUQ1MV9DT05URVhUCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fTDRQRVJfSU5TVCwgMHgwMWNjKQogI2RlZmluZSBPTUFQNF9STV9MNFNFQ19DUllQVE9ETUFfQ09OVEVYVF9PRkZTRVQJCTB4MDFkYwotI2RlZmluZSBPTUFQNDQzMF9STV9MNFNFQ19DUllQVE9ETUFfQ09OVEVYVAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX01PRCwgMHgwMWRjKQorI2RlZmluZSBPTUFQNDQzMF9STV9MNFNFQ19DUllQVE9ETUFfQ09OVEVYVAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0w0UEVSX0lOU1QsIDB4MDFkYykKIAogLyogUFJNLkNFRlVTRV9QUk0gcmVnaXN0ZXIgb2Zmc2V0cyAqLwogI2RlZmluZSBPTUFQNF9QTV9DRUZVU0VfUFdSU1RDVFJMX09GRlNFVAkJMHgwMDAwCi0jZGVmaW5lIE9NQVA0NDMwX1BNX0NFRlVTRV9QV1JTVENUUkwJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fQ0VGVVNFX01PRCwgMHgwMDAwKQorI2RlZmluZSBPTUFQNDQzMF9QTV9DRUZVU0VfUFdSU1RDVFJMCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0NFRlVTRV9JTlNULCAweDAwMDApCiAjZGVmaW5lIE9NQVA0X1BNX0NFRlVTRV9QV1JTVFNUX09GRlNFVAkJCTB4MDAwNAotI2RlZmluZSBPTUFQNDQzMF9QTV9DRUZVU0VfUFdSU1RTVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9DRUZVU0VfTU9ELCAweDAwMDQpCisjZGVmaW5lIE9NQVA0NDMwX1BNX0NFRlVTRV9QV1JTVFNUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0NFRlVTRV9JTlNULCAweDAwMDQpCiAjZGVmaW5lIE9NQVA0X1JNX0NFRlVTRV9DRUZVU0VfQ09OVEVYVF9PRkZTRVQJCTB4MDAyNAotI2RlZmluZSBPTUFQNDQzMF9STV9DRUZVU0VfQ0VGVVNFX0NPTlRFWFQJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9DRUZVU0VfTU9ELCAweDAwMjQpCisjZGVmaW5lIE9NQVA0NDMwX1JNX0NFRlVTRV9DRUZVU0VfQ09OVEVYVAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0NFRlVTRV9JTlNULCAweDAwMjQpCiAKIC8qIFBSTS5XS1VQX1BSTSByZWdpc3RlciBvZmZzZXRzICovCiAjZGVmaW5lIE9NQVA0X1JNX1dLVVBfTDRXS1VQX0NPTlRFWFRfT0ZGU0VUCQkweDAwMjQKLSNkZWZpbmUgT01BUDQ0MzBfUk1fV0tVUF9MNFdLVVBfQ09OVEVYVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9XS1VQX01PRCwgMHgwMDI0KQorI2RlZmluZSBPTUFQNDQzMF9STV9XS1VQX0w0V0tVUF9DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX1dLVVBfSU5TVCwgMHgwMDI0KQogI2RlZmluZSBPTUFQNF9STV9XS1VQX1dEVDFfQ09OVEVYVF9PRkZTRVQJCTB4MDAyYwotI2RlZmluZSBPTUFQNDQzMF9STV9XS1VQX1dEVDFfQ09OVEVYVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9XS1VQX01PRCwgMHgwMDJjKQorI2RlZmluZSBPTUFQNDQzMF9STV9XS1VQX1dEVDFfQ09OVEVYVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9XS1VQX0lOU1QsIDB4MDAyYykKICNkZWZpbmUgT01BUDRfUE1fV0tVUF9XRFQyX1dLREVQX09GRlNFVAkJCTB4MDAzMAotI2RlZmluZSBPTUFQNDQzMF9QTV9XS1VQX1dEVDJfV0tERVAJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fV0tVUF9NT0QsIDB4MDAzMCkKKyNkZWZpbmUgT01BUDQ0MzBfUE1fV0tVUF9XRFQyX1dLREVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX1dLVVBfSU5TVCwgMHgwMDMwKQogI2RlZmluZSBPTUFQNF9STV9XS1VQX1dEVDJfQ09OVEVYVF9PRkZTRVQJCTB4MDAzNAotI2RlZmluZSBPTUFQNDQzMF9STV9XS1VQX1dEVDJfQ09OVEVYVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9XS1VQX01PRCwgMHgwMDM0KQorI2RlZmluZSBPTUFQNDQzMF9STV9XS1VQX1dEVDJfQ09OVEVYVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9XS1VQX0lOU1QsIDB4MDAzNCkKICNkZWZpbmUgT01BUDRfUE1fV0tVUF9HUElPMV9XS0RFUF9PRkZTRVQJCTB4MDAzOAotI2RlZmluZSBPTUFQNDQzMF9QTV9XS1VQX0dQSU8xX1dLREVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX1dLVVBfTU9ELCAweDAwMzgpCisjZGVmaW5lIE9NQVA0NDMwX1BNX1dLVVBfR1BJTzFfV0tERVAJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fV0tVUF9JTlNULCAweDAwMzgpCiAjZGVmaW5lIE9NQVA0X1JNX1dLVVBfR1BJTzFfQ09OVEVYVF9PRkZTRVQJCTB4MDAzYwotI2RlZmluZSBPTUFQNDQzMF9STV9XS1VQX0dQSU8xX0NPTlRFWFQJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fV0tVUF9NT0QsIDB4MDAzYykKKyNkZWZpbmUgT01BUDQ0MzBfUk1fV0tVUF9HUElPMV9DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX1dLVVBfSU5TVCwgMHgwMDNjKQogI2RlZmluZSBPTUFQNF9QTV9XS1VQX1RJTUVSMV9XS0RFUF9PRkZTRVQJCTB4MDA0MAotI2RlZmluZSBPTUFQNDQzMF9QTV9XS1VQX1RJTUVSMV9XS0RFUAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9XS1VQX01PRCwgMHgwMDQwKQorI2RlZmluZSBPTUFQNDQzMF9QTV9XS1VQX1RJTUVSMV9XS0RFUAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9XS1VQX0lOU1QsIDB4MDA0MCkKICNkZWZpbmUgT01BUDRfUk1fV0tVUF9USU1FUjFfQ09OVEVYVF9PRkZTRVQJCTB4MDA0NAotI2RlZmluZSBPTUFQNDQzMF9STV9XS1VQX1RJTUVSMV9DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX1dLVVBfTU9ELCAweDAwNDQpCisjZGVmaW5lIE9NQVA0NDMwX1JNX1dLVVBfVElNRVIxX0NPTlRFWFQJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fV0tVUF9JTlNULCAweDAwNDQpCiAjZGVmaW5lIE9NQVA0X1BNX1dLVVBfVElNRVIxMl9XS0RFUF9PRkZTRVQJCTB4MDA0OAotI2RlZmluZSBPTUFQNDQzMF9QTV9XS1VQX1RJTUVSMTJfV0tERVAJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fV0tVUF9NT0QsIDB4MDA0OCkKKyNkZWZpbmUgT01BUDQ0MzBfUE1fV0tVUF9USU1FUjEyX1dLREVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX1dLVVBfSU5TVCwgMHgwMDQ4KQogI2RlZmluZSBPTUFQNF9STV9XS1VQX1RJTUVSMTJfQ09OVEVYVF9PRkZTRVQJCTB4MDA0YwotI2RlZmluZSBPTUFQNDQzMF9STV9XS1VQX1RJTUVSMTJfQ09OVEVYVAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX1dLVVBfTU9ELCAweDAwNGMpCisjZGVmaW5lIE9NQVA0NDMwX1JNX1dLVVBfVElNRVIxMl9DT05URVhUCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fV0tVUF9JTlNULCAweDAwNGMpCiAjZGVmaW5lIE9NQVA0X1JNX1dLVVBfU1lOQ1RJTUVSX0NPTlRFWFRfT0ZGU0VUCQkweDAwNTQKLSNkZWZpbmUgT01BUDQ0MzBfUk1fV0tVUF9TWU5DVElNRVJfQ09OVEVYVAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX1dLVVBfTU9ELCAweDAwNTQpCisjZGVmaW5lIE9NQVA0NDMwX1JNX1dLVVBfU1lOQ1RJTUVSX0NPTlRFWFQJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9XS1VQX0lOU1QsIDB4MDA1NCkKICNkZWZpbmUgT01BUDRfUE1fV0tVUF9VU0lNX1dLREVQX09GRlNFVAkJCTB4MDA1OAotI2RlZmluZSBPTUFQNDQzMF9QTV9XS1VQX1VTSU1fV0tERVAJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fV0tVUF9NT0QsIDB4MDA1OCkKKyNkZWZpbmUgT01BUDQ0MzBfUE1fV0tVUF9VU0lNX1dLREVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX1dLVVBfSU5TVCwgMHgwMDU4KQogI2RlZmluZSBPTUFQNF9STV9XS1VQX1VTSU1fQ09OVEVYVF9PRkZTRVQJCTB4MDA1YwotI2RlZmluZSBPTUFQNDQzMF9STV9XS1VQX1VTSU1fQ09OVEVYVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9XS1VQX01PRCwgMHgwMDVjKQorI2RlZmluZSBPTUFQNDQzMF9STV9XS1VQX1VTSU1fQ09OVEVYVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9XS1VQX0lOU1QsIDB4MDA1YykKICNkZWZpbmUgT01BUDRfUk1fV0tVUF9TQVJSQU1fQ09OVEVYVF9PRkZTRVQJCTB4MDA2NAotI2RlZmluZSBPTUFQNDQzMF9STV9XS1VQX1NBUlJBTV9DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX1dLVVBfTU9ELCAweDAwNjQpCisjZGVmaW5lIE9NQVA0NDMwX1JNX1dLVVBfU0FSUkFNX0NPTlRFWFQJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fV0tVUF9JTlNULCAweDAwNjQpCiAjZGVmaW5lIE9NQVA0X1BNX1dLVVBfS0VZQk9BUkRfV0tERVBfT0ZGU0VUCQkweDAwNzgKLSNkZWZpbmUgT01BUDQ0MzBfUE1fV0tVUF9LRVlCT0FSRF9XS0RFUAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9XS1VQX01PRCwgMHgwMDc4KQorI2RlZmluZSBPTUFQNDQzMF9QTV9XS1VQX0tFWUJPQVJEX1dLREVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX1dLVVBfSU5TVCwgMHgwMDc4KQogI2RlZmluZSBPTUFQNF9STV9XS1VQX0tFWUJPQVJEX0NPTlRFWFRfT0ZGU0VUCQkweDAwN2MKLSNkZWZpbmUgT01BUDQ0MzBfUk1fV0tVUF9LRVlCT0FSRF9DT05URVhUCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fV0tVUF9NT0QsIDB4MDA3YykKKyNkZWZpbmUgT01BUDQ0MzBfUk1fV0tVUF9LRVlCT0FSRF9DT05URVhUCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fV0tVUF9JTlNULCAweDAwN2MpCiAjZGVmaW5lIE9NQVA0X1BNX1dLVVBfUlRDX1dLREVQX09GRlNFVAkJCTB4MDA4MAotI2RlZmluZSBPTUFQNDQzMF9QTV9XS1VQX1JUQ19XS0RFUAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9XS1VQX01PRCwgMHgwMDgwKQorI2RlZmluZSBPTUFQNDQzMF9QTV9XS1VQX1JUQ19XS0RFUAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9XS1VQX0lOU1QsIDB4MDA4MCkKICNkZWZpbmUgT01BUDRfUk1fV0tVUF9SVENfQ09OVEVYVF9PRkZTRVQJCTB4MDA4NAotI2RlZmluZSBPTUFQNDQzMF9STV9XS1VQX1JUQ19DT05URVhUCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX1dLVVBfTU9ELCAweDAwODQpCisjZGVmaW5lIE9NQVA0NDMwX1JNX1dLVVBfUlRDX0NPTlRFWFQJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fV0tVUF9JTlNULCAweDAwODQpCiAKIC8qIFBSTS5XS1VQX0NNIHJlZ2lzdGVyIG9mZnNldHMgKi8KICNkZWZpbmUgT01BUDRfQ01fV0tVUF9DTEtTVENUUkxfT0ZGU0VUCQkJMHgwMDAwCi0jZGVmaW5lIE9NQVA0NDMwX0NNX1dLVVBfQ0xLU1RDVFJMCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX1dLVVBfQ01fTU9ELCAweDAwMDApCisjZGVmaW5lIE9NQVA0NDMwX0NNX1dLVVBfQ0xLU1RDVFJMCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX1dLVVBfQ01fSU5TVCwgMHgwMDAwKQogI2RlZmluZSBPTUFQNF9DTV9XS1VQX0w0V0tVUF9DTEtDVFJMX09GRlNFVAkJMHgwMDIwCi0jZGVmaW5lIE9NQVA0NDMwX0NNX1dLVVBfTDRXS1VQX0NMS0NUUkwJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fV0tVUF9DTV9NT0QsIDB4MDAyMCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fV0tVUF9MNFdLVVBfQ0xLQ1RSTAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9XS1VQX0NNX0lOU1QsIDB4MDAyMCkKICNkZWZpbmUgT01BUDRfQ01fV0tVUF9XRFQxX0NMS0NUUkxfT0ZGU0VUCQkweDAwMjgKLSNkZWZpbmUgT01BUDQ0MzBfQ01fV0tVUF9XRFQxX0NMS0NUUkwJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fV0tVUF9DTV9NT0QsIDB4MDAyOCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fV0tVUF9XRFQxX0NMS0NUUkwJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fV0tVUF9DTV9JTlNULCAweDAwMjgpCiAjZGVmaW5lIE9NQVA0X0NNX1dLVVBfV0RUMl9DTEtDVFJMX09GRlNFVAkJMHgwMDMwCi0jZGVmaW5lIE9NQVA0NDMwX0NNX1dLVVBfV0RUMl9DTEtDVFJMCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX1dLVVBfQ01fTU9ELCAweDAwMzApCisjZGVmaW5lIE9NQVA0NDMwX0NNX1dLVVBfV0RUMl9DTEtDVFJMCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX1dLVVBfQ01fSU5TVCwgMHgwMDMwKQogI2RlZmluZSBPTUFQNF9DTV9XS1VQX0dQSU8xX0NMS0NUUkxfT0ZGU0VUCQkweDAwMzgKLSNkZWZpbmUgT01BUDQ0MzBfQ01fV0tVUF9HUElPMV9DTEtDVFJMCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX1dLVVBfQ01fTU9ELCAweDAwMzgpCisjZGVmaW5lIE9NQVA0NDMwX0NNX1dLVVBfR1BJTzFfQ0xLQ1RSTAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9XS1VQX0NNX0lOU1QsIDB4MDAzOCkKICNkZWZpbmUgT01BUDRfQ01fV0tVUF9USU1FUjFfQ0xLQ1RSTF9PRkZTRVQJCTB4MDA0MAotI2RlZmluZSBPTUFQNDQzMF9DTV9XS1VQX1RJTUVSMV9DTEtDVFJMCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX1dLVVBfQ01fTU9ELCAweDAwNDApCisjZGVmaW5lIE9NQVA0NDMwX0NNX1dLVVBfVElNRVIxX0NMS0NUUkwJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fV0tVUF9DTV9JTlNULCAweDAwNDApCiAjZGVmaW5lIE9NQVA0X0NNX1dLVVBfVElNRVIxMl9DTEtDVFJMX09GRlNFVAkJMHgwMDQ4Ci0jZGVmaW5lIE9NQVA0NDMwX0NNX1dLVVBfVElNRVIxMl9DTEtDVFJMCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fV0tVUF9DTV9NT0QsIDB4MDA0OCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fV0tVUF9USU1FUjEyX0NMS0NUUkwJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9XS1VQX0NNX0lOU1QsIDB4MDA0OCkKICNkZWZpbmUgT01BUDRfQ01fV0tVUF9TWU5DVElNRVJfQ0xLQ1RSTF9PRkZTRVQJCTB4MDA1MAotI2RlZmluZSBPTUFQNDQzMF9DTV9XS1VQX1NZTkNUSU1FUl9DTEtDVFJMCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fV0tVUF9DTV9NT0QsIDB4MDA1MCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fV0tVUF9TWU5DVElNRVJfQ0xLQ1RSTAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX1dLVVBfQ01fSU5TVCwgMHgwMDUwKQogI2RlZmluZSBPTUFQNF9DTV9XS1VQX1VTSU1fQ0xLQ1RSTF9PRkZTRVQJCTB4MDA1OAotI2RlZmluZSBPTUFQNDQzMF9DTV9XS1VQX1VTSU1fQ0xLQ1RSTAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9XS1VQX0NNX01PRCwgMHgwMDU4KQorI2RlZmluZSBPTUFQNDQzMF9DTV9XS1VQX1VTSU1fQ0xLQ1RSTAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9XS1VQX0NNX0lOU1QsIDB4MDA1OCkKICNkZWZpbmUgT01BUDRfQ01fV0tVUF9TQVJSQU1fQ0xLQ1RSTF9PRkZTRVQJCTB4MDA2MAotI2RlZmluZSBPTUFQNDQzMF9DTV9XS1VQX1NBUlJBTV9DTEtDVFJMCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX1dLVVBfQ01fTU9ELCAweDAwNjApCisjZGVmaW5lIE9NQVA0NDMwX0NNX1dLVVBfU0FSUkFNX0NMS0NUUkwJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fV0tVUF9DTV9JTlNULCAweDAwNjApCiAjZGVmaW5lIE9NQVA0X0NNX1dLVVBfS0VZQk9BUkRfQ0xLQ1RSTF9PRkZTRVQJCTB4MDA3OAotI2RlZmluZSBPTUFQNDQzMF9DTV9XS1VQX0tFWUJPQVJEX0NMS0NUUkwJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9XS1VQX0NNX01PRCwgMHgwMDc4KQorI2RlZmluZSBPTUFQNDQzMF9DTV9XS1VQX0tFWUJPQVJEX0NMS0NUUkwJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9XS1VQX0NNX0lOU1QsIDB4MDA3OCkKICNkZWZpbmUgT01BUDRfQ01fV0tVUF9SVENfQ0xLQ1RSTF9PRkZTRVQJCTB4MDA4MAotI2RlZmluZSBPTUFQNDQzMF9DTV9XS1VQX1JUQ19DTEtDVFJMCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX1dLVVBfQ01fTU9ELCAweDAwODApCisjZGVmaW5lIE9NQVA0NDMwX0NNX1dLVVBfUlRDX0NMS0NUUkwJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fV0tVUF9DTV9JTlNULCAweDAwODApCiAjZGVmaW5lIE9NQVA0X0NNX1dLVVBfQkFOREdBUF9DTEtDVFJMX09GRlNFVAkJMHgwMDg4Ci0jZGVmaW5lIE9NQVA0NDMwX0NNX1dLVVBfQkFOREdBUF9DTEtDVFJMCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fV0tVUF9DTV9NT0QsIDB4MDA4OCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01fV0tVUF9CQU5ER0FQX0NMS0NUUkwJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9XS1VQX0NNX0lOU1QsIDB4MDA4OCkKIAogLyogUFJNLkVNVV9QUk0gcmVnaXN0ZXIgb2Zmc2V0cyAqLwogI2RlZmluZSBPTUFQNF9QTV9FTVVfUFdSU1RDVFJMX09GRlNFVAkJCTB4MDAwMAotI2RlZmluZSBPTUFQNDQzMF9QTV9FTVVfUFdSU1RDVFJMCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0VNVV9NT0QsIDB4MDAwMCkKKyNkZWZpbmUgT01BUDQ0MzBfUE1fRU1VX1BXUlNUQ1RSTAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9FTVVfSU5TVCwgMHgwMDAwKQogI2RlZmluZSBPTUFQNF9QTV9FTVVfUFdSU1RTVF9PRkZTRVQJCQkweDAwMDQKLSNkZWZpbmUgT01BUDQ0MzBfUE1fRU1VX1BXUlNUU1QJCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0VNVV9NT0QsIDB4MDAwNCkKKyNkZWZpbmUgT01BUDQ0MzBfUE1fRU1VX1BXUlNUU1QJCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0VNVV9JTlNULCAweDAwMDQpCiAjZGVmaW5lIE9NQVA0X1JNX0VNVV9ERUJVR1NTX0NPTlRFWFRfT0ZGU0VUCQkweDAwMjQKLSNkZWZpbmUgT01BUDQ0MzBfUk1fRU1VX0RFQlVHU1NfQ09OVEVYVAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9FTVVfTU9ELCAweDAwMjQpCisjZGVmaW5lIE9NQVA0NDMwX1JNX0VNVV9ERUJVR1NTX0NPTlRFWFQJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fRU1VX0lOU1QsIDB4MDAyNCkKIAogLyogUFJNLkVNVV9DTSByZWdpc3RlciBvZmZzZXRzICovCiAjZGVmaW5lIE9NQVA0X0NNX0VNVV9DTEtTVENUUkxfT0ZGU0VUCQkJMHgwMDAwCi0jZGVmaW5lIE9NQVA0NDMwX0NNX0VNVV9DTEtTVENUUkwJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fRU1VX0NNX01PRCwgMHgwMDAwKQorI2RlZmluZSBPTUFQNDQzMF9DTV9FTVVfQ0xLU1RDVFJMCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0VNVV9DTV9JTlNULCAweDAwMDApCiAjZGVmaW5lIE9NQVA0X0NNX0VNVV9EWU5BTUlDREVQX09GRlNFVAkJCTB4MDAwOAotI2RlZmluZSBPTUFQNDQzMF9DTV9FTVVfRFlOQU1JQ0RFUAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9FTVVfQ01fTU9ELCAweDAwMDgpCisjZGVmaW5lIE9NQVA0NDMwX0NNX0VNVV9EWU5BTUlDREVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0VNVV9DTV9JTlNULCAweDAwMDgpCiAjZGVmaW5lIE9NQVA0X0NNX0VNVV9ERUJVR1NTX0NMS0NUUkxfT0ZGU0VUCQkweDAwMjAKLSNkZWZpbmUgT01BUDQ0MzBfQ01fRU1VX0RFQlVHU1NfQ0xLQ1RSTAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9FTVVfQ01fTU9ELCAweDAwMjApCisjZGVmaW5lIE9NQVA0NDMwX0NNX0VNVV9ERUJVR1NTX0NMS0NUUkwJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fRU1VX0NNX0lOU1QsIDB4MDAyMCkKIAogLyogUFJNLkRFVklDRV9QUk0gcmVnaXN0ZXIgb2Zmc2V0cyAqLwogI2RlZmluZSBPTUFQNF9QUk1fUlNUQ1RSTF9PRkZTRVQJCQkweDAwMDAKLSNkZWZpbmUgT01BUDQ0MzBfUFJNX1JTVENUUkwJCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0RFVklDRV9NT0QsIDB4MDAwMCkKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX1JTVENUUkwJCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0RFVklDRV9JTlNULCAweDAwMDApCiAjZGVmaW5lIE9NQVA0X1BSTV9SU1RTVF9PRkZTRVQJCQkJMHgwMDA0Ci0jZGVmaW5lIE9NQVA0NDMwX1BSTV9SU1RTVAkJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fREVWSUNFX01PRCwgMHgwMDA0KQorI2RlZmluZSBPTUFQNDQzMF9QUk1fUlNUU1QJCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0RFVklDRV9JTlNULCAweDAwMDQpCiAjZGVmaW5lIE9NQVA0X1BSTV9SU1RUSU1FX09GRlNFVAkJCTB4MDAwOAotI2RlZmluZSBPTUFQNDQzMF9QUk1fUlNUVElNRQkJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fREVWSUNFX01PRCwgMHgwMDA4KQorI2RlZmluZSBPTUFQNDQzMF9QUk1fUlNUVElNRQkJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fREVWSUNFX0lOU1QsIDB4MDAwOCkKICNkZWZpbmUgT01BUDRfUFJNX0NMS1JFUUNUUkxfT0ZGU0VUCQkJMHgwMDBjCi0jZGVmaW5lIE9NQVA0NDMwX1BSTV9DTEtSRVFDVFJMCQkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9ERVZJQ0VfTU9ELCAweDAwMGMpCisjZGVmaW5lIE9NQVA0NDMwX1BSTV9DTEtSRVFDVFJMCQkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9ERVZJQ0VfSU5TVCwgMHgwMDBjKQogI2RlZmluZSBPTUFQNF9QUk1fVk9MVENUUkxfT0ZGU0VUCQkJMHgwMDEwCi0jZGVmaW5lIE9NQVA0NDMwX1BSTV9WT0xUQ1RSTAkJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fREVWSUNFX01PRCwgMHgwMDEwKQorI2RlZmluZSBPTUFQNDQzMF9QUk1fVk9MVENUUkwJCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0RFVklDRV9JTlNULCAweDAwMTApCiAjZGVmaW5lIE9NQVA0X1BSTV9QV1JSRVFDVFJMX09GRlNFVAkJCTB4MDAxNAotI2RlZmluZSBPTUFQNDQzMF9QUk1fUFdSUkVRQ1RSTAkJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fREVWSUNFX01PRCwgMHgwMDE0KQorI2RlZmluZSBPTUFQNDQzMF9QUk1fUFdSUkVRQ1RSTAkJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fREVWSUNFX0lOU1QsIDB4MDAxNCkKICNkZWZpbmUgT01BUDRfUFJNX1BTQ09OX0NPVU5UX09GRlNFVAkJCTB4MDAxOAotI2RlZmluZSBPTUFQNDQzMF9QUk1fUFNDT05fQ09VTlQJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fREVWSUNFX01PRCwgMHgwMDE4KQorI2RlZmluZSBPTUFQNDQzMF9QUk1fUFNDT05fQ09VTlQJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fREVWSUNFX0lOU1QsIDB4MDAxOCkKICNkZWZpbmUgT01BUDRfUFJNX0lPX0NPVU5UX09GRlNFVAkJCTB4MDAxYwotI2RlZmluZSBPTUFQNDQzMF9QUk1fSU9fQ09VTlQJCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0RFVklDRV9NT0QsIDB4MDAxYykKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX0lPX0NPVU5UCQkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9ERVZJQ0VfSU5TVCwgMHgwMDFjKQogI2RlZmluZSBPTUFQNF9QUk1fSU9fUE1DVFJMX09GRlNFVAkJCTB4MDAyMAotI2RlZmluZSBPTUFQNDQzMF9QUk1fSU9fUE1DVFJMCQkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9ERVZJQ0VfTU9ELCAweDAwMjApCisjZGVmaW5lIE9NQVA0NDMwX1BSTV9JT19QTUNUUkwJCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0RFVklDRV9JTlNULCAweDAwMjApCiAjZGVmaW5lIE9NQVA0X1BSTV9WT0xUU0VUVVBfV0FSTVJFU0VUX09GRlNFVAkJMHgwMDI0Ci0jZGVmaW5lIE9NQVA0NDMwX1BSTV9WT0xUU0VUVVBfV0FSTVJFU0VUCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fREVWSUNFX01PRCwgMHgwMDI0KQorI2RlZmluZSBPTUFQNDQzMF9QUk1fVk9MVFNFVFVQX1dBUk1SRVNFVAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0RFVklDRV9JTlNULCAweDAwMjQpCiAjZGVmaW5lIE9NQVA0X1BSTV9WT0xUU0VUVVBfQ09SRV9PRkZfT0ZGU0VUCQkweDAwMjgKLSNkZWZpbmUgT01BUDQ0MzBfUFJNX1ZPTFRTRVRVUF9DT1JFX09GRgkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9ERVZJQ0VfTU9ELCAweDAwMjgpCisjZGVmaW5lIE9NQVA0NDMwX1BSTV9WT0xUU0VUVVBfQ09SRV9PRkYJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fREVWSUNFX0lOU1QsIDB4MDAyOCkKICNkZWZpbmUgT01BUDRfUFJNX1ZPTFRTRVRVUF9NUFVfT0ZGX09GRlNFVAkJMHgwMDJjCi0jZGVmaW5lIE9NQVA0NDMwX1BSTV9WT0xUU0VUVVBfTVBVX09GRgkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9ERVZJQ0VfTU9ELCAweDAwMmMpCisjZGVmaW5lIE9NQVA0NDMwX1BSTV9WT0xUU0VUVVBfTVBVX09GRgkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9ERVZJQ0VfSU5TVCwgMHgwMDJjKQogI2RlZmluZSBPTUFQNF9QUk1fVk9MVFNFVFVQX0lWQV9PRkZfT0ZGU0VUCQkweDAwMzAKLSNkZWZpbmUgT01BUDQ0MzBfUFJNX1ZPTFRTRVRVUF9JVkFfT0ZGCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0RFVklDRV9NT0QsIDB4MDAzMCkKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX1ZPTFRTRVRVUF9JVkFfT0ZGCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0RFVklDRV9JTlNULCAweDAwMzApCiAjZGVmaW5lIE9NQVA0X1BSTV9WT0xUU0VUVVBfQ09SRV9SRVRfU0xFRVBfT0ZGU0VUCTB4MDAzNAotI2RlZmluZSBPTUFQNDQzMF9QUk1fVk9MVFNFVFVQX0NPUkVfUkVUX1NMRUVQCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fREVWSUNFX01PRCwgMHgwMDM0KQorI2RlZmluZSBPTUFQNDQzMF9QUk1fVk9MVFNFVFVQX0NPUkVfUkVUX1NMRUVQCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fREVWSUNFX0lOU1QsIDB4MDAzNCkKICNkZWZpbmUgT01BUDRfUFJNX1ZPTFRTRVRVUF9NUFVfUkVUX1NMRUVQX09GRlNFVAkweDAwMzgKLSNkZWZpbmUgT01BUDQ0MzBfUFJNX1ZPTFRTRVRVUF9NUFVfUkVUX1NMRUVQCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fREVWSUNFX01PRCwgMHgwMDM4KQorI2RlZmluZSBPTUFQNDQzMF9QUk1fVk9MVFNFVFVQX01QVV9SRVRfU0xFRVAJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9ERVZJQ0VfSU5TVCwgMHgwMDM4KQogI2RlZmluZSBPTUFQNF9QUk1fVk9MVFNFVFVQX0lWQV9SRVRfU0xFRVBfT0ZGU0VUCTB4MDAzYwotI2RlZmluZSBPTUFQNDQzMF9QUk1fVk9MVFNFVFVQX0lWQV9SRVRfU0xFRVAJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9ERVZJQ0VfTU9ELCAweDAwM2MpCisjZGVmaW5lIE9NQVA0NDMwX1BSTV9WT0xUU0VUVVBfSVZBX1JFVF9TTEVFUAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0RFVklDRV9JTlNULCAweDAwM2MpCiAjZGVmaW5lIE9NQVA0X1BSTV9WUF9DT1JFX0NPTkZJR19PRkZTRVQJCQkweDAwNDAKLSNkZWZpbmUgT01BUDQ0MzBfUFJNX1ZQX0NPUkVfQ09ORklHCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0RFVklDRV9NT0QsIDB4MDA0MCkKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX1ZQX0NPUkVfQ09ORklHCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0RFVklDRV9JTlNULCAweDAwNDApCiAjZGVmaW5lIE9NQVA0X1BSTV9WUF9DT1JFX1NUQVRVU19PRkZTRVQJCQkweDAwNDQKLSNkZWZpbmUgT01BUDQ0MzBfUFJNX1ZQX0NPUkVfU1RBVFVTCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0RFVklDRV9NT0QsIDB4MDA0NCkKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX1ZQX0NPUkVfU1RBVFVTCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0RFVklDRV9JTlNULCAweDAwNDQpCiAjZGVmaW5lIE9NQVA0X1BSTV9WUF9DT1JFX1ZMSU1JVFRPX09GRlNFVAkJMHgwMDQ4Ci0jZGVmaW5lIE9NQVA0NDMwX1BSTV9WUF9DT1JFX1ZMSU1JVFRPCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0RFVklDRV9NT0QsIDB4MDA0OCkKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX1ZQX0NPUkVfVkxJTUlUVE8JCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fREVWSUNFX0lOU1QsIDB4MDA0OCkKICNkZWZpbmUgT01BUDRfUFJNX1ZQX0NPUkVfVk9MVEFHRV9PRkZTRVQJCTB4MDA0YwotI2RlZmluZSBPTUFQNDQzMF9QUk1fVlBfQ09SRV9WT0xUQUdFCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0RFVklDRV9NT0QsIDB4MDA0YykKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX1ZQX0NPUkVfVk9MVEFHRQkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9ERVZJQ0VfSU5TVCwgMHgwMDRjKQogI2RlZmluZSBPTUFQNF9QUk1fVlBfQ09SRV9WU1RFUE1BWF9PRkZTRVQJCTB4MDA1MAotI2RlZmluZSBPTUFQNDQzMF9QUk1fVlBfQ09SRV9WU1RFUE1BWAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9ERVZJQ0VfTU9ELCAweDAwNTApCisjZGVmaW5lIE9NQVA0NDMwX1BSTV9WUF9DT1JFX1ZTVEVQTUFYCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0RFVklDRV9JTlNULCAweDAwNTApCiAjZGVmaW5lIE9NQVA0X1BSTV9WUF9DT1JFX1ZTVEVQTUlOX09GRlNFVAkJMHgwMDU0Ci0jZGVmaW5lIE9NQVA0NDMwX1BSTV9WUF9DT1JFX1ZTVEVQTUlOCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0RFVklDRV9NT0QsIDB4MDA1NCkKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX1ZQX0NPUkVfVlNURVBNSU4JCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fREVWSUNFX0lOU1QsIDB4MDA1NCkKICNkZWZpbmUgT01BUDRfUFJNX1ZQX01QVV9DT05GSUdfT0ZGU0VUCQkJMHgwMDU4Ci0jZGVmaW5lIE9NQVA0NDMwX1BSTV9WUF9NUFVfQ09ORklHCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0RFVklDRV9NT0QsIDB4MDA1OCkKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX1ZQX01QVV9DT05GSUcJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fREVWSUNFX0lOU1QsIDB4MDA1OCkKICNkZWZpbmUgT01BUDRfUFJNX1ZQX01QVV9TVEFUVVNfT0ZGU0VUCQkJMHgwMDVjCi0jZGVmaW5lIE9NQVA0NDMwX1BSTV9WUF9NUFVfU1RBVFVTCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0RFVklDRV9NT0QsIDB4MDA1YykKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX1ZQX01QVV9TVEFUVVMJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fREVWSUNFX0lOU1QsIDB4MDA1YykKICNkZWZpbmUgT01BUDRfUFJNX1ZQX01QVV9WTElNSVRUT19PRkZTRVQJCTB4MDA2MAotI2RlZmluZSBPTUFQNDQzMF9QUk1fVlBfTVBVX1ZMSU1JVFRPCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0RFVklDRV9NT0QsIDB4MDA2MCkKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX1ZQX01QVV9WTElNSVRUTwkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9ERVZJQ0VfSU5TVCwgMHgwMDYwKQogI2RlZmluZSBPTUFQNF9QUk1fVlBfTVBVX1ZPTFRBR0VfT0ZGU0VUCQkJMHgwMDY0Ci0jZGVmaW5lIE9NQVA0NDMwX1BSTV9WUF9NUFVfVk9MVEFHRQkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9ERVZJQ0VfTU9ELCAweDAwNjQpCisjZGVmaW5lIE9NQVA0NDMwX1BSTV9WUF9NUFVfVk9MVEFHRQkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9ERVZJQ0VfSU5TVCwgMHgwMDY0KQogI2RlZmluZSBPTUFQNF9QUk1fVlBfTVBVX1ZTVEVQTUFYX09GRlNFVAkJMHgwMDY4Ci0jZGVmaW5lIE9NQVA0NDMwX1BSTV9WUF9NUFVfVlNURVBNQVgJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fREVWSUNFX01PRCwgMHgwMDY4KQorI2RlZmluZSBPTUFQNDQzMF9QUk1fVlBfTVBVX1ZTVEVQTUFYCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0RFVklDRV9JTlNULCAweDAwNjgpCiAjZGVmaW5lIE9NQVA0X1BSTV9WUF9NUFVfVlNURVBNSU5fT0ZGU0VUCQkweDAwNmMKLSNkZWZpbmUgT01BUDQ0MzBfUFJNX1ZQX01QVV9WU1RFUE1JTgkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9ERVZJQ0VfTU9ELCAweDAwNmMpCisjZGVmaW5lIE9NQVA0NDMwX1BSTV9WUF9NUFVfVlNURVBNSU4JCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fREVWSUNFX0lOU1QsIDB4MDA2YykKICNkZWZpbmUgT01BUDRfUFJNX1ZQX0lWQV9DT05GSUdfT0ZGU0VUCQkJMHgwMDcwCi0jZGVmaW5lIE9NQVA0NDMwX1BSTV9WUF9JVkFfQ09ORklHCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0RFVklDRV9NT0QsIDB4MDA3MCkKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX1ZQX0lWQV9DT05GSUcJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fREVWSUNFX0lOU1QsIDB4MDA3MCkKICNkZWZpbmUgT01BUDRfUFJNX1ZQX0lWQV9TVEFUVVNfT0ZGU0VUCQkJMHgwMDc0Ci0jZGVmaW5lIE9NQVA0NDMwX1BSTV9WUF9JVkFfU1RBVFVTCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0RFVklDRV9NT0QsIDB4MDA3NCkKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX1ZQX0lWQV9TVEFUVVMJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fREVWSUNFX0lOU1QsIDB4MDA3NCkKICNkZWZpbmUgT01BUDRfUFJNX1ZQX0lWQV9WTElNSVRUT19PRkZTRVQJCTB4MDA3OAotI2RlZmluZSBPTUFQNDQzMF9QUk1fVlBfSVZBX1ZMSU1JVFRPCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0RFVklDRV9NT0QsIDB4MDA3OCkKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX1ZQX0lWQV9WTElNSVRUTwkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9ERVZJQ0VfSU5TVCwgMHgwMDc4KQogI2RlZmluZSBPTUFQNF9QUk1fVlBfSVZBX1ZPTFRBR0VfT0ZGU0VUCQkJMHgwMDdjCi0jZGVmaW5lIE9NQVA0NDMwX1BSTV9WUF9JVkFfVk9MVEFHRQkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9ERVZJQ0VfTU9ELCAweDAwN2MpCisjZGVmaW5lIE9NQVA0NDMwX1BSTV9WUF9JVkFfVk9MVEFHRQkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9ERVZJQ0VfSU5TVCwgMHgwMDdjKQogI2RlZmluZSBPTUFQNF9QUk1fVlBfSVZBX1ZTVEVQTUFYX09GRlNFVAkJMHgwMDgwCi0jZGVmaW5lIE9NQVA0NDMwX1BSTV9WUF9JVkFfVlNURVBNQVgJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fREVWSUNFX01PRCwgMHgwMDgwKQorI2RlZmluZSBPTUFQNDQzMF9QUk1fVlBfSVZBX1ZTVEVQTUFYCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0RFVklDRV9JTlNULCAweDAwODApCiAjZGVmaW5lIE9NQVA0X1BSTV9WUF9JVkFfVlNURVBNSU5fT0ZGU0VUCQkweDAwODQKLSNkZWZpbmUgT01BUDQ0MzBfUFJNX1ZQX0lWQV9WU1RFUE1JTgkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9ERVZJQ0VfTU9ELCAweDAwODQpCisjZGVmaW5lIE9NQVA0NDMwX1BSTV9WUF9JVkFfVlNURVBNSU4JCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fREVWSUNFX0lOU1QsIDB4MDA4NCkKICNkZWZpbmUgT01BUDRfUFJNX1ZDX1NNUFNfU0FfT0ZGU0VUCQkJMHgwMDg4Ci0jZGVmaW5lIE9NQVA0NDMwX1BSTV9WQ19TTVBTX1NBCQkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9ERVZJQ0VfTU9ELCAweDAwODgpCisjZGVmaW5lIE9NQVA0NDMwX1BSTV9WQ19TTVBTX1NBCQkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9ERVZJQ0VfSU5TVCwgMHgwMDg4KQogI2RlZmluZSBPTUFQNF9QUk1fVkNfVkFMX1NNUFNfUkFfVk9MX09GRlNFVAkJMHgwMDhjCi0jZGVmaW5lIE9NQVA0NDMwX1BSTV9WQ19WQUxfU01QU19SQV9WT0wJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fREVWSUNFX01PRCwgMHgwMDhjKQorI2RlZmluZSBPTUFQNDQzMF9QUk1fVkNfVkFMX1NNUFNfUkFfVk9MCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0RFVklDRV9JTlNULCAweDAwOGMpCiAjZGVmaW5lIE9NQVA0X1BSTV9WQ19WQUxfU01QU19SQV9DTURfT0ZGU0VUCQkweDAwOTAKLSNkZWZpbmUgT01BUDQ0MzBfUFJNX1ZDX1ZBTF9TTVBTX1JBX0NNRAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9ERVZJQ0VfTU9ELCAweDAwOTApCisjZGVmaW5lIE9NQVA0NDMwX1BSTV9WQ19WQUxfU01QU19SQV9DTUQJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fREVWSUNFX0lOU1QsIDB4MDA5MCkKICNkZWZpbmUgT01BUDRfUFJNX1ZDX1ZBTF9DTURfVkREX0NPUkVfTF9PRkZTRVQJCTB4MDA5NAotI2RlZmluZSBPTUFQNDQzMF9QUk1fVkNfVkFMX0NNRF9WRERfQ09SRV9MCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fREVWSUNFX01PRCwgMHgwMDk0KQorI2RlZmluZSBPTUFQNDQzMF9QUk1fVkNfVkFMX0NNRF9WRERfQ09SRV9MCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fREVWSUNFX0lOU1QsIDB4MDA5NCkKICNkZWZpbmUgT01BUDRfUFJNX1ZDX1ZBTF9DTURfVkREX01QVV9MX09GRlNFVAkJMHgwMDk4Ci0jZGVmaW5lIE9NQVA0NDMwX1BSTV9WQ19WQUxfQ01EX1ZERF9NUFVfTAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0RFVklDRV9NT0QsIDB4MDA5OCkKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX1ZDX1ZBTF9DTURfVkREX01QVV9MCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fREVWSUNFX0lOU1QsIDB4MDA5OCkKICNkZWZpbmUgT01BUDRfUFJNX1ZDX1ZBTF9DTURfVkREX0lWQV9MX09GRlNFVAkJMHgwMDljCi0jZGVmaW5lIE9NQVA0NDMwX1BSTV9WQ19WQUxfQ01EX1ZERF9JVkFfTAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0RFVklDRV9NT0QsIDB4MDA5YykKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX1ZDX1ZBTF9DTURfVkREX0lWQV9MCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fREVWSUNFX0lOU1QsIDB4MDA5YykKICNkZWZpbmUgT01BUDRfUFJNX1ZDX1ZBTF9CWVBBU1NfT0ZGU0VUCQkJMHgwMGEwCi0jZGVmaW5lIE9NQVA0NDMwX1BSTV9WQ19WQUxfQllQQVNTCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0RFVklDRV9NT0QsIDB4MDBhMCkKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX1ZDX1ZBTF9CWVBBU1MJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fREVWSUNFX0lOU1QsIDB4MDBhMCkKICNkZWZpbmUgT01BUDRfUFJNX1ZDX0NGR19DSEFOTkVMX09GRlNFVAkJCTB4MDBhNAotI2RlZmluZSBPTUFQNDQzMF9QUk1fVkNfQ0ZHX0NIQU5ORUwJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fREVWSUNFX01PRCwgMHgwMGE0KQotI2RlZmluZSBPTUFQNF9QUk1fVkNfQ0ZHX0kyQ19NT0RFX09GRlNFVAkJMHgwMGE4Ci0jZGVmaW5lIE9NQVA0NDMwX1BSTV9WQ19DRkdfSTJDX01PREUJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fREVWSUNFX01PRCwgMHgwMGE4KQorI2RlZmluZSBPTUFQNDQzMF9QUk1fVkNfQ0ZHX0NIQU5ORUwJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fREVWSUNFX0lOU1QsIDB4MDBhNCkKKyNkZWZpbmUgT01BUDRfUFJNX1ZDX0NGR19JMkNfSU5TVEVfT0ZGU0VUCQkweDAwYTgKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX1ZDX0NGR19JMkNfSU5TVEUJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fREVWSUNFX0lOU1QsIDB4MDBhOCkKICNkZWZpbmUgT01BUDRfUFJNX1ZDX0NGR19JMkNfQ0xLX09GRlNFVAkJCTB4MDBhYwotI2RlZmluZSBPTUFQNDQzMF9QUk1fVkNfQ0ZHX0kyQ19DTEsJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fREVWSUNFX01PRCwgMHgwMGFjKQorI2RlZmluZSBPTUFQNDQzMF9QUk1fVkNfQ0ZHX0kyQ19DTEsJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fREVWSUNFX0lOU1QsIDB4MDBhYykKICNkZWZpbmUgT01BUDRfUFJNX1NSQU1fQ09VTlRfT0ZGU0VUCQkJMHgwMGIwCi0jZGVmaW5lIE9NQVA0NDMwX1BSTV9TUkFNX0NPVU5UCQkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9ERVZJQ0VfTU9ELCAweDAwYjApCisjZGVmaW5lIE9NQVA0NDMwX1BSTV9TUkFNX0NPVU5UCQkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9ERVZJQ0VfSU5TVCwgMHgwMGIwKQogI2RlZmluZSBPTUFQNF9QUk1fU1JBTV9XS1VQX1NFVFVQX09GRlNFVAkJMHgwMGI0Ci0jZGVmaW5lIE9NQVA0NDMwX1BSTV9TUkFNX1dLVVBfU0VUVVAJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fREVWSUNFX01PRCwgMHgwMGI0KQorI2RlZmluZSBPTUFQNDQzMF9QUk1fU1JBTV9XS1VQX1NFVFVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0RFVklDRV9JTlNULCAweDAwYjQpCiAjZGVmaW5lIE9NQVA0X1BSTV9MRE9fU1JBTV9DT1JFX1NFVFVQX09GRlNFVAkJMHgwMGI4Ci0jZGVmaW5lIE9NQVA0NDMwX1BSTV9MRE9fU1JBTV9DT1JFX1NFVFVQCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fREVWSUNFX01PRCwgMHgwMGI4KQorI2RlZmluZSBPTUFQNDQzMF9QUk1fTERPX1NSQU1fQ09SRV9TRVRVUAkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0RFVklDRV9JTlNULCAweDAwYjgpCiAjZGVmaW5lIE9NQVA0X1BSTV9MRE9fU1JBTV9DT1JFX0NUUkxfT0ZGU0VUCQkweDAwYmMKLSNkZWZpbmUgT01BUDQ0MzBfUFJNX0xET19TUkFNX0NPUkVfQ1RSTAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9ERVZJQ0VfTU9ELCAweDAwYmMpCisjZGVmaW5lIE9NQVA0NDMwX1BSTV9MRE9fU1JBTV9DT1JFX0NUUkwJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fREVWSUNFX0lOU1QsIDB4MDBiYykKICNkZWZpbmUgT01BUDRfUFJNX0xET19TUkFNX01QVV9TRVRVUF9PRkZTRVQJCTB4MDBjMAotI2RlZmluZSBPTUFQNDQzMF9QUk1fTERPX1NSQU1fTVBVX1NFVFVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0RFVklDRV9NT0QsIDB4MDBjMCkKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX0xET19TUkFNX01QVV9TRVRVUAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9ERVZJQ0VfSU5TVCwgMHgwMGMwKQogI2RlZmluZSBPTUFQNF9QUk1fTERPX1NSQU1fTVBVX0NUUkxfT0ZGU0VUCQkweDAwYzQKLSNkZWZpbmUgT01BUDQ0MzBfUFJNX0xET19TUkFNX01QVV9DVFJMCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0RFVklDRV9NT0QsIDB4MDBjNCkKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX0xET19TUkFNX01QVV9DVFJMCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0RFVklDRV9JTlNULCAweDAwYzQpCiAjZGVmaW5lIE9NQVA0X1BSTV9MRE9fU1JBTV9JVkFfU0VUVVBfT0ZGU0VUCQkweDAwYzgKLSNkZWZpbmUgT01BUDQ0MzBfUFJNX0xET19TUkFNX0lWQV9TRVRVUAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9ERVZJQ0VfTU9ELCAweDAwYzgpCisjZGVmaW5lIE9NQVA0NDMwX1BSTV9MRE9fU1JBTV9JVkFfU0VUVVAJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fREVWSUNFX0lOU1QsIDB4MDBjOCkKICNkZWZpbmUgT01BUDRfUFJNX0xET19TUkFNX0lWQV9DVFJMX09GRlNFVAkJMHgwMGNjCi0jZGVmaW5lIE9NQVA0NDMwX1BSTV9MRE9fU1JBTV9JVkFfQ1RSTAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9ERVZJQ0VfTU9ELCAweDAwY2MpCisjZGVmaW5lIE9NQVA0NDMwX1BSTV9MRE9fU1JBTV9JVkFfQ1RSTAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9ERVZJQ0VfSU5TVCwgMHgwMGNjKQogI2RlZmluZSBPTUFQNF9QUk1fTERPX0FCQl9NUFVfU0VUVVBfT0ZGU0VUCQkweDAwZDAKLSNkZWZpbmUgT01BUDQ0MzBfUFJNX0xET19BQkJfTVBVX1NFVFVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0RFVklDRV9NT0QsIDB4MDBkMCkKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX0xET19BQkJfTVBVX1NFVFVQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0RFVklDRV9JTlNULCAweDAwZDApCiAjZGVmaW5lIE9NQVA0X1BSTV9MRE9fQUJCX01QVV9DVFJMX09GRlNFVAkJMHgwMGQ0Ci0jZGVmaW5lIE9NQVA0NDMwX1BSTV9MRE9fQUJCX01QVV9DVFJMCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0RFVklDRV9NT0QsIDB4MDBkNCkKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX0xET19BQkJfTVBVX0NUUkwJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fREVWSUNFX0lOU1QsIDB4MDBkNCkKICNkZWZpbmUgT01BUDRfUFJNX0xET19BQkJfSVZBX1NFVFVQX09GRlNFVAkJMHgwMGQ4Ci0jZGVmaW5lIE9NQVA0NDMwX1BSTV9MRE9fQUJCX0lWQV9TRVRVUAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9ERVZJQ0VfTU9ELCAweDAwZDgpCisjZGVmaW5lIE9NQVA0NDMwX1BSTV9MRE9fQUJCX0lWQV9TRVRVUAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9ERVZJQ0VfSU5TVCwgMHgwMGQ4KQogI2RlZmluZSBPTUFQNF9QUk1fTERPX0FCQl9JVkFfQ1RSTF9PRkZTRVQJCTB4MDBkYwotI2RlZmluZSBPTUFQNDQzMF9QUk1fTERPX0FCQl9JVkFfQ1RSTAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9ERVZJQ0VfTU9ELCAweDAwZGMpCisjZGVmaW5lIE9NQVA0NDMwX1BSTV9MRE9fQUJCX0lWQV9DVFJMCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0RFVklDRV9JTlNULCAweDAwZGMpCiAjZGVmaW5lIE9NQVA0X1BSTV9MRE9fQkFOREdBUF9TRVRVUF9PRkZTRVQJCTB4MDBlMAotI2RlZmluZSBPTUFQNDQzMF9QUk1fTERPX0JBTkRHQVBfU0VUVVAJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fREVWSUNFX01PRCwgMHgwMGUwKQorI2RlZmluZSBPTUFQNDQzMF9QUk1fTERPX0JBTkRHQVBfU0VUVVAJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fREVWSUNFX0lOU1QsIDB4MDBlMCkKICNkZWZpbmUgT01BUDRfUFJNX0RFVklDRV9PRkZfQ1RSTF9PRkZTRVQJCTB4MDBlNAotI2RlZmluZSBPTUFQNDQzMF9QUk1fREVWSUNFX09GRl9DVFJMCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0RFVklDRV9NT0QsIDB4MDBlNCkKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX0RFVklDRV9PRkZfQ1RSTAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9ERVZJQ0VfSU5TVCwgMHgwMGU0KQogI2RlZmluZSBPTUFQNF9QUk1fUEhBU0UxX0NORFBfT0ZGU0VUCQkJMHgwMGU4Ci0jZGVmaW5lIE9NQVA0NDMwX1BSTV9QSEFTRTFfQ05EUAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9ERVZJQ0VfTU9ELCAweDAwZTgpCisjZGVmaW5lIE9NQVA0NDMwX1BSTV9QSEFTRTFfQ05EUAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9ERVZJQ0VfSU5TVCwgMHgwMGU4KQogI2RlZmluZSBPTUFQNF9QUk1fUEhBU0UyQV9DTkRQX09GRlNFVAkJCTB4MDBlYwotI2RlZmluZSBPTUFQNDQzMF9QUk1fUEhBU0UyQV9DTkRQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0RFVklDRV9NT0QsIDB4MDBlYykKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX1BIQVNFMkFfQ05EUAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9ERVZJQ0VfSU5TVCwgMHgwMGVjKQogI2RlZmluZSBPTUFQNF9QUk1fUEhBU0UyQl9DTkRQX09GRlNFVAkJCTB4MDBmMAotI2RlZmluZSBPTUFQNDQzMF9QUk1fUEhBU0UyQl9DTkRQCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0RFVklDRV9NT0QsIDB4MDBmMCkKLSNkZWZpbmUgT01BUDRfUFJNX01PREVNX0lGX0NUUkxfT0ZGU0VUCQkJMHgwMGY0Ci0jZGVmaW5lIE9NQVA0NDMwX1BSTV9NT0RFTV9JRl9DVFJMCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0RFVklDRV9NT0QsIDB4MDBmNCkKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX1BIQVNFMkJfQ05EUAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9ERVZJQ0VfSU5TVCwgMHgwMGYwKQorI2RlZmluZSBPTUFQNF9QUk1fSU5TVEVNX0lGX0NUUkxfT0ZGU0VUCQkJMHgwMGY0CisjZGVmaW5lIE9NQVA0NDMwX1BSTV9JTlNURU1fSUZfQ1RSTAkJCU9NQVA0NFhYX1BSTV9SRUdBRERSKE9NQVA0NDMwX1BSTV9ERVZJQ0VfSU5TVCwgMHgwMGY0KQogI2RlZmluZSBPTUFQNF9QUk1fVkNfRVJSU1RfT0ZGU0VUCQkJMHgwMGY4Ci0jZGVmaW5lIE9NQVA0NDMwX1BSTV9WQ19FUlJTVAkJCQlPTUFQNDRYWF9QUk1fUkVHQUREUihPTUFQNDQzMF9QUk1fREVWSUNFX01PRCwgMHgwMGY4KQorI2RlZmluZSBPTUFQNDQzMF9QUk1fVkNfRVJSU1QJCQkJT01BUDQ0WFhfUFJNX1JFR0FERFIoT01BUDQ0MzBfUFJNX0RFVklDRV9JTlNULCAweDAwZjgpCiAKLS8qCi0gKiBQUkNNX01QVQotICoKLSAqIFRoZSBQUkNNX01QVSBpcyBhIGxvY2FsIFBSQ00gaW5zaWRlIHRoZSBNUFUgc3Vic3lzdGVtLiBGb3IgdGhlIFBSQ00gKGdsb2JhbCkKLSAqIHBvaW50IG9mIHZpZXcgdGhlIFBSQ01fTVBVIGlzIGEgc2luZ2xlIGVudGl0eS4gSXQgc2hhcmVzIHRoZSBzYW1lCi0gKiBwcm9ncmFtbWluZyBtb2RlbCBhcyB0aGUgZ2xvYmFsIFBSQ00gYW5kIHRodXMgY2FuIGJlIGFzc2ltaWxhdGUgYXMgdHdvIG5ldwotICogTU9EIGluc2lkZSB0aGUgUFJDTQotICovCisvKiBGdW5jdGlvbiBwcm90b3R5cGVzICovCisjIGlmbmRlZiBfX0FTU0VNQkxFUl9fCiAKLS8qIFBSQ01fTVBVLk9DUF9TT0NLRVRfUFJDTSByZWdpc3RlciBvZmZzZXRzICovCi0jZGVmaW5lIE9NQVA0X1JFVklTSU9OX1BSQ01fT0ZGU0VUCQkJMHgwMDAwCi0jZGVmaW5lIE9NQVA0NDMwX1JFVklTSU9OX1BSQ00JCQkJT01BUDQ0WFhfUFJDTV9NUFVfUkVHQUREUihPTUFQNDQzMF9QUkNNX01QVV9PQ1BfU09DS0VUX1BSQ01fTU9ELCAweDAwMDApCitleHRlcm4gdTMyIG9tYXA0X3BybV9yZWFkX2luc3RfcmVnKHMxNiBpbnN0LCB1MTYgaWR4KTsKK2V4dGVybiB2b2lkIG9tYXA0X3BybV93cml0ZV9pbnN0X3JlZyh1MzIgdmFsLCBzMTYgaW5zdCwgdTE2IGlkeCk7CitleHRlcm4gdTMyIG9tYXA0X3BybV9ybXdfaW5zdF9yZWdfYml0cyh1MzIgbWFzaywgdTMyIGJpdHMsIHMxNiBpbnN0LCBzMTYgaWR4KTsKK2V4dGVybiB1MzIgb21hcDRfcHJtX3Jtd19yZWdfYml0cyh1MzIgbWFzaywgdTMyIGJpdHMsIHZvaWQgX19pb21lbSAqcmVnKTsKK2V4dGVybiB1MzIgb21hcDRfcHJtX3NldF9pbnN0X3JlZ19iaXRzKHUzMiBiaXRzLCBzMTYgaW5zdCwgczE2IGlkeCk7CitleHRlcm4gdTMyIG9tYXA0X3BybV9jbGVhcl9pbnN0X3JlZ19iaXRzKHUzMiBiaXRzLCBzMTYgaW5zdCwgczE2IGlkeCk7CitleHRlcm4gdTMyIG9tYXA0X3BybV9yZWFkX2JpdHNfc2hpZnQodm9pZCBfX2lvbWVtICpyZWcsIHUzMiBtYXNrKTsKIAotLyogUFJDTV9NUFUuREVWSUNFX1BSTSByZWdpc3RlciBvZmZzZXRzICovCi0jZGVmaW5lIE9NQVA0X1BSQ01fTVBVX1BSTV9SU1RTVF9PRkZTRVQJCQkweDAwMDAKLSNkZWZpbmUgT01BUDQ0MzBfUFJDTV9NUFVfUFJNX1JTVFNUCQkJT01BUDQ0WFhfUFJDTV9NUFVfUkVHQUREUihPTUFQNDQzMF9QUkNNX01QVV9ERVZJQ0VfUFJNX01PRCwgMHgwMDAwKQotI2RlZmluZSBPTUFQNF9QUkNNX01QVV9QUk1fUFNDT05fQ09VTlRfT0ZGU0VUCQkweDAwMDQKLSNkZWZpbmUgT01BUDQ0MzBfUFJDTV9NUFVfUFJNX1BTQ09OX0NPVU5UCQlPTUFQNDRYWF9QUkNNX01QVV9SRUdBRERSKE9NQVA0NDMwX1BSQ01fTVBVX0RFVklDRV9QUk1fTU9ELCAweDAwMDQpCitleHRlcm4gaW50IG9tYXA0X3BybV9pc19oYXJkcmVzZXRfYXNzZXJ0ZWQodm9pZCBfX2lvbWVtICpyc3RjdHJsX3JlZywgdTggc2hpZnQpOworZXh0ZXJuIGludCBvbWFwNF9wcm1fYXNzZXJ0X2hhcmRyZXNldCh2b2lkIF9faW9tZW0gKnJzdGN0cmxfcmVnLCB1OCBzaGlmdCk7CitleHRlcm4gaW50IG9tYXA0X3BybV9kZWFzc2VydF9oYXJkcmVzZXQodm9pZCBfX2lvbWVtICpyc3RjdHJsX3JlZywgdTggc2hpZnQpOwogCi0vKiBQUkNNX01QVS5DUFUwIHJlZ2lzdGVyIG9mZnNldHMgKi8KLSNkZWZpbmUgT01BUDRfUE1fQ1BVMF9QV1JTVENUUkxfT0ZGU0VUCQkJMHgwMDAwCi0jZGVmaW5lIE9NQVA0NDMwX1BNX0NQVTBfUFdSU1RDVFJMCQkJT01BUDQ0WFhfUFJDTV9NUFVfUkVHQUREUihPTUFQNDQzMF9QUkNNX01QVV9DUFUwX01PRCwgMHgwMDAwKQotI2RlZmluZSBPTUFQNF9QTV9DUFUwX1BXUlNUU1RfT0ZGU0VUCQkJMHgwMDA0Ci0jZGVmaW5lIE9NQVA0NDMwX1BNX0NQVTBfUFdSU1RTVAkJCU9NQVA0NFhYX1BSQ01fTVBVX1JFR0FERFIoT01BUDQ0MzBfUFJDTV9NUFVfQ1BVMF9NT0QsIDB4MDAwNCkKLSNkZWZpbmUgT01BUDRfUk1fQ1BVMF9DUFUwX0NPTlRFWFRfT0ZGU0VUCQkweDAwMDgKLSNkZWZpbmUgT01BUDQ0MzBfUk1fQ1BVMF9DUFUwX0NPTlRFWFQJCQlPTUFQNDRYWF9QUkNNX01QVV9SRUdBRERSKE9NQVA0NDMwX1BSQ01fTVBVX0NQVTBfTU9ELCAweDAwMDgpCi0jZGVmaW5lIE9NQVA0X1JNX0NQVTBfQ1BVMF9SU1RDVFJMX09GRlNFVAkJMHgwMDBjCi0jZGVmaW5lIE9NQVA0NDMwX1JNX0NQVTBfQ1BVMF9SU1RDVFJMCQkJT01BUDQ0WFhfUFJDTV9NUFVfUkVHQUREUihPTUFQNDQzMF9QUkNNX01QVV9DUFUwX01PRCwgMHgwMDBjKQotI2RlZmluZSBPTUFQNF9STV9DUFUwX0NQVTBfUlNUU1RfT0ZGU0VUCQkJMHgwMDEwCi0jZGVmaW5lIE9NQVA0NDMwX1JNX0NQVTBfQ1BVMF9SU1RTVAkJCU9NQVA0NFhYX1BSQ01fTVBVX1JFR0FERFIoT01BUDQ0MzBfUFJDTV9NUFVfQ1BVMF9NT0QsIDB4MDAxMCkKLSNkZWZpbmUgT01BUDRfQ01fQ1BVMF9DUFUwX0NMS0NUUkxfT0ZGU0VUCQkweDAwMTQKLSNkZWZpbmUgT01BUDQ0MzBfQ01fQ1BVMF9DUFUwX0NMS0NUUkwJCQlPTUFQNDRYWF9QUkNNX01QVV9SRUdBRERSKE9NQVA0NDMwX1BSQ01fTVBVX0NQVTBfTU9ELCAweDAwMTQpCi0jZGVmaW5lIE9NQVA0X0NNX0NQVTBfQ0xLU1RDVFJMX09GRlNFVAkJCTB4MDAxOAotI2RlZmluZSBPTUFQNDQzMF9DTV9DUFUwX0NMS1NUQ1RSTAkJCU9NQVA0NFhYX1BSQ01fTVBVX1JFR0FERFIoT01BUDQ0MzBfUFJDTV9NUFVfQ1BVMF9NT0QsIDB4MDAxOCkKK2V4dGVybiB2b2lkIG9tYXA0X3BybV9nbG9iYWxfd2FybV9zd19yZXNldCh2b2lkKTsKIAotLyogUFJDTV9NUFUuQ1BVMSByZWdpc3RlciBvZmZzZXRzICovCi0jZGVmaW5lIE9NQVA0X1BNX0NQVTFfUFdSU1RDVFJMX09GRlNFVAkJCTB4MDAwMAotI2RlZmluZSBPTUFQNDQzMF9QTV9DUFUxX1BXUlNUQ1RSTAkJCU9NQVA0NFhYX1BSQ01fTVBVX1JFR0FERFIoT01BUDQ0MzBfUFJDTV9NUFVfQ1BVMV9NT0QsIDB4MDAwMCkKLSNkZWZpbmUgT01BUDRfUE1fQ1BVMV9QV1JTVFNUX09GRlNFVAkJCTB4MDAwNAotI2RlZmluZSBPTUFQNDQzMF9QTV9DUFUxX1BXUlNUU1QJCQlPTUFQNDRYWF9QUkNNX01QVV9SRUdBRERSKE9NQVA0NDMwX1BSQ01fTVBVX0NQVTFfTU9ELCAweDAwMDQpCi0jZGVmaW5lIE9NQVA0X1JNX0NQVTFfQ1BVMV9DT05URVhUX09GRlNFVAkJMHgwMDA4Ci0jZGVmaW5lIE9NQVA0NDMwX1JNX0NQVTFfQ1BVMV9DT05URVhUCQkJT01BUDQ0WFhfUFJDTV9NUFVfUkVHQUREUihPTUFQNDQzMF9QUkNNX01QVV9DUFUxX01PRCwgMHgwMDA4KQotI2RlZmluZSBPTUFQNF9STV9DUFUxX0NQVTFfUlNUQ1RSTF9PRkZTRVQJCTB4MDAwYwotI2RlZmluZSBPTUFQNDQzMF9STV9DUFUxX0NQVTFfUlNUQ1RSTAkJCU9NQVA0NFhYX1BSQ01fTVBVX1JFR0FERFIoT01BUDQ0MzBfUFJDTV9NUFVfQ1BVMV9NT0QsIDB4MDAwYykKLSNkZWZpbmUgT01BUDRfUk1fQ1BVMV9DUFUxX1JTVFNUX09GRlNFVAkJCTB4MDAxMAotI2RlZmluZSBPTUFQNDQzMF9STV9DUFUxX0NQVTFfUlNUU1QJCQlPTUFQNDRYWF9QUkNNX01QVV9SRUdBRERSKE9NQVA0NDMwX1BSQ01fTVBVX0NQVTFfTU9ELCAweDAwMTApCi0jZGVmaW5lIE9NQVA0X0NNX0NQVTFfQ1BVMV9DTEtDVFJMX09GRlNFVAkJMHgwMDE0Ci0jZGVmaW5lIE9NQVA0NDMwX0NNX0NQVTFfQ1BVMV9DTEtDVFJMCQkJT01BUDQ0WFhfUFJDTV9NUFVfUkVHQUREUihPTUFQNDQzMF9QUkNNX01QVV9DUFUxX01PRCwgMHgwMDE0KQotI2RlZmluZSBPTUFQNF9DTV9DUFUxX0NMS1NUQ1RSTF9PRkZTRVQJCQkweDAwMTgKLSNkZWZpbmUgT01BUDQ0MzBfQ01fQ1BVMV9DTEtTVENUUkwJCQlPTUFQNDRYWF9QUkNNX01QVV9SRUdBRERSKE9NQVA0NDMwX1BSQ01fTVBVX0NQVTFfTU9ELCAweDAwMTgpCisjIGVuZGlmCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm1pbnN0NDR4eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm1pbnN0NDR4eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzMDMyNDIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BybWluc3Q0NHh4LmMKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIE9NQVA0IFBSTSBpbnN0YW5jZSBmdW5jdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24KKyAqIFBhdWwgV2FsbXNsZXkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPHBsYXQvY29tbW9uLmg+CisKKyNpbmNsdWRlICJwcm00NHh4LmgiCisjaW5jbHVkZSAicHJtaW5zdDQ0eHguaCIKKyNpbmNsdWRlICJwcm0tcmVnYml0cy00NHh4LmgiCisjaW5jbHVkZSAicHJjbTQ0eHguaCIKKyNpbmNsdWRlICJwcmNtX21wdTQ0eHguaCIKKworc3RhdGljIHUzMiBfcHJtX2Jhc2VzW09NQVA0X01BWF9QUkNNX1BBUlRJVElPTlNdID0geworCVtPTUFQNDQzMF9JTlZBTElEX1BSQ01fUEFSVElUSU9OXQk9IDAsCisJW09NQVA0NDMwX1BSTV9QQVJUSVRJT05dCQk9IE9NQVA0NDMwX1BSTV9CQVNFLAorCVtPTUFQNDQzMF9DTTFfUEFSVElUSU9OXQkJPSAwLAorCVtPTUFQNDQzMF9DTTJfUEFSVElUSU9OXQkJPSAwLAorCVtPTUFQNDQzMF9TQ1JNX1BBUlRJVElPTl0JCT0gMCwKKwlbT01BUDQ0MzBfUFJDTV9NUFVfUEFSVElUSU9OXQkJPSBPTUFQNDQzMF9QUkNNX01QVV9CQVNFLAorfTsKKworLyogUmVhZCBhIHJlZ2lzdGVyIGluIGEgUFJNIGluc3RhbmNlICovCit1MzIgb21hcDRfcHJtaW5zdF9yZWFkX2luc3RfcmVnKHU4IHBhcnQsIHMxNiBpbnN0LCB1MTYgaWR4KQoreworCUJVR19PTihwYXJ0ID49IE9NQVA0X01BWF9QUkNNX1BBUlRJVElPTlMgfHwKKwkgICAgICAgcGFydCA9PSBPTUFQNDQzMF9JTlZBTElEX1BSQ01fUEFSVElUSU9OIHx8CisJICAgICAgICFfcHJtX2Jhc2VzW3BhcnRdKTsKKwlyZXR1cm4gX19yYXdfcmVhZGwoT01BUDJfTDRfSU9fQUREUkVTUyhfcHJtX2Jhc2VzW3BhcnRdICsgaW5zdCArCisJCQkJCSAgICAgICBpZHgpKTsKK30KKworLyogV3JpdGUgaW50byBhIHJlZ2lzdGVyIGluIGEgUFJNIGluc3RhbmNlICovCit2b2lkIG9tYXA0X3BybWluc3Rfd3JpdGVfaW5zdF9yZWcodTMyIHZhbCwgdTggcGFydCwgczE2IGluc3QsIHUxNiBpZHgpCit7CisJQlVHX09OKHBhcnQgPj0gT01BUDRfTUFYX1BSQ01fUEFSVElUSU9OUyB8fAorCSAgICAgICBwYXJ0ID09IE9NQVA0NDMwX0lOVkFMSURfUFJDTV9QQVJUSVRJT04gfHwKKwkgICAgICAgIV9wcm1fYmFzZXNbcGFydF0pOworCV9fcmF3X3dyaXRlbCh2YWwsIE9NQVAyX0w0X0lPX0FERFJFU1MoX3BybV9iYXNlc1twYXJ0XSArIGluc3QgKyBpZHgpKTsKK30KKworLyogUmVhZC1tb2RpZnktd3JpdGUgYSByZWdpc3RlciBpbiBQUk0uIENhbGxlciBtdXN0IGxvY2sgKi8KK3UzMiBvbWFwNF9wcm1pbnN0X3Jtd19pbnN0X3JlZ19iaXRzKHUzMiBtYXNrLCB1MzIgYml0cywgdTggcGFydCwgczE2IGluc3QsCisJCQkJICAgczE2IGlkeCkKK3sKKwl1MzIgdjsKKworCXYgPSBvbWFwNF9wcm1pbnN0X3JlYWRfaW5zdF9yZWcocGFydCwgaW5zdCwgaWR4KTsKKwl2ICY9IH5tYXNrOworCXYgfD0gYml0czsKKwlvbWFwNF9wcm1pbnN0X3dyaXRlX2luc3RfcmVnKHYsIHBhcnQsIGluc3QsIGlkeCk7CisKKwlyZXR1cm4gdjsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtaW5zdDQ0eHguaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtaW5zdDQ0eHguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmRkNjZkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm1pbnN0NDR4eC5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBPTUFQNCBQb3dlci9SZXNldCBNYW5hZ2VtZW50IChQUk0pIGZ1bmN0aW9uIHByb3RvdHlwZXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24KKyAqIFBhdWwgV2FsbXNsZXkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaWZuZGVmIF9fQVJDSF9BU01fTUFDSF9PTUFQMl9QUk1JTlNUNDRYWF9ICisjZGVmaW5lIF9fQVJDSF9BU01fTUFDSF9PTUFQMl9QUk1JTlNUNDRYWF9ICisKKy8qCisgKiBJbiBhbiBpZGVhbCB3b3JsZCwgd2Ugd291bGQgbm90IGV4cG9ydCB0aGVzZSBsb3ctbGV2ZWwgZnVuY3Rpb25zLAorICogYnV0IHRoaXMgd2lsbCBwcm9iYWJseSB0YWtlIHNvbWUgdGltZSB0byBmaXggcHJvcGVybHkKKyAqLworZXh0ZXJuIHUzMiBvbWFwNF9wcm1pbnN0X3JlYWRfaW5zdF9yZWcodTggcGFydCwgczE2IGluc3QsIHUxNiBpZHgpOworZXh0ZXJuIHZvaWQgb21hcDRfcHJtaW5zdF93cml0ZV9pbnN0X3JlZyh1MzIgdmFsLCB1OCBwYXJ0LCBzMTYgaW5zdCwgdTE2IGlkeCk7CitleHRlcm4gdTMyIG9tYXA0X3BybWluc3Rfcm13X2luc3RfcmVnX2JpdHModTMyIG1hc2ssIHUzMiBiaXRzLCB1OCBwYXJ0LAorCQkJCQkgICBzMTYgaW5zdCwgczE2IGlkeCk7CisKK2V4dGVybiB2b2lkIG9tYXA0X3BybV9nbG9iYWxfd2FybV9zd19yZXNldCh2b2lkKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3Njcm00NHh4LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL3Njcm00NHh4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzAxYmYyZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc2NybTQ0eHguaApAQCAtMCwwICsxLDE3NSBAQAorLyoKKyAqIE9NQVA0NHh4IFNDUk0gcmVnaXN0ZXJzIGFuZCBiaXRmaWVsZHMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBCZW5vaXQgQ291c3NvbiAoYi1jb3Vzc29uQHRpLmNvbSkKKyAqCisgKiBUaGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0aGUgT01BUCBoYXJkd2FyZSBkYXRhYmFzZXMuCisgKiBXZSByZXNwZWN0ZnVsbHkgYXNrIHRoYXQgYW55IG1vZGlmaWNhdGlvbnMgdG8gdGhpcyBmaWxlIGJlIGNvb3JkaW5hdGVkCisgKiB3aXRoIHRoZSBwdWJsaWMgbGludXgtb21hcEB2Z2VyLmtlcm5lbC5vcmcgbWFpbGluZyBsaXN0IGFuZCB0aGUKKyAqIGF1dGhvcnMgYWJvdmUgdG8gZW5zdXJlIHRoYXQgdGhlIGF1dG9nZW5lcmF0aW9uIHNjcmlwdHMgYXJlIGtlcHQKKyAqIHVwLXRvLWRhdGUgd2l0aCB0aGUgZmlsZSBjb250ZW50cy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19BUkNIX0FSTV9NQUNIX09NQVAyX1NDUk1fNDRYWF9ICisjZGVmaW5lIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9TQ1JNXzQ0WFhfSAorCisjZGVmaW5lIE9NQVA0X1NDUk1fQkFTRQkJCQkweDRhMzBhMDAwCisKKyNkZWZpbmUgT01BUDQ0WFhfU0NSTV9SRUdBRERSKHJlZykJXAorCQlPTUFQMl9MNF9JT19BRERSRVNTKE9NQVA0X1NDUk1fQkFTRSArIChyZWcpKQorCisvKiBSZWdpc3RlcnMgb2Zmc2V0ICovCisjZGVmaW5lIE9NQVA0X1NDUk1fUkVWSVNJT05fU0NSTV9PRkZTRVQJCTB4MDAwMAorI2RlZmluZSBPTUFQNF9TQ1JNX1JFVklTSU9OX1NDUk0JCU9NQVA0NFhYX1NDUk1fUkVHQUREUigweDAwMDApCisjZGVmaW5lIE9NQVA0X1NDUk1fQ0xLU0VUVVBUSU1FX09GRlNFVAkJMHgwMTAwCisjZGVmaW5lIE9NQVA0X1NDUk1fQ0xLU0VUVVBUSU1FCQkJT01BUDQ0WFhfU0NSTV9SRUdBRERSKDB4MDEwMCkKKyNkZWZpbmUgT01BUDRfU0NSTV9QTUlDU0VUVVBUSU1FX09GRlNFVAkJMHgwMTA0CisjZGVmaW5lIE9NQVA0X1NDUk1fUE1JQ1NFVFVQVElNRQkJT01BUDQ0WFhfU0NSTV9SRUdBRERSKDB4MDEwNCkKKyNkZWZpbmUgT01BUDRfU0NSTV9BTFRDTEtTUkNfT0ZGU0VUCQkweDAxMTAKKyNkZWZpbmUgT01BUDRfU0NSTV9BTFRDTEtTUkMJCQlPTUFQNDRYWF9TQ1JNX1JFR0FERFIoMHgwMTEwKQorI2RlZmluZSBPTUFQNF9TQ1JNX01PREVNQ0xLTV9PRkZTRVQJCTB4MDExOAorI2RlZmluZSBPTUFQNF9TQ1JNX01PREVNQ0xLTQkJCU9NQVA0NFhYX1NDUk1fUkVHQUREUigweDAxMTgpCisjZGVmaW5lIE9NQVA0X1NDUk1fRDJEQ0xLTV9PRkZTRVQJCTB4MDExYworI2RlZmluZSBPTUFQNF9TQ1JNX0QyRENMS00JCQlPTUFQNDRYWF9TQ1JNX1JFR0FERFIoMHgwMTFjKQorI2RlZmluZSBPTUFQNF9TQ1JNX0VYVENMS1JFUV9PRkZTRVQJCTB4MDIwMAorI2RlZmluZSBPTUFQNF9TQ1JNX0VYVENMS1JFUQkJCU9NQVA0NFhYX1NDUk1fUkVHQUREUigweDAyMDApCisjZGVmaW5lIE9NQVA0X1NDUk1fQUNDQ0xLUkVRX09GRlNFVAkJMHgwMjA0CisjZGVmaW5lIE9NQVA0X1NDUk1fQUNDQ0xLUkVRCQkJT01BUDQ0WFhfU0NSTV9SRUdBRERSKDB4MDIwNCkKKyNkZWZpbmUgT01BUDRfU0NSTV9QV1JSRVFfT0ZGU0VUCQkweDAyMDgKKyNkZWZpbmUgT01BUDRfU0NSTV9QV1JSRVEJCQlPTUFQNDRYWF9TQ1JNX1JFR0FERFIoMHgwMjA4KQorI2RlZmluZSBPTUFQNF9TQ1JNX0FVWENMS1JFUTBfT0ZGU0VUCQkweDAyMTAKKyNkZWZpbmUgT01BUDRfU0NSTV9BVVhDTEtSRVEwCQkJT01BUDQ0WFhfU0NSTV9SRUdBRERSKDB4MDIxMCkKKyNkZWZpbmUgT01BUDRfU0NSTV9BVVhDTEtSRVExX09GRlNFVAkJMHgwMjE0CisjZGVmaW5lIE9NQVA0X1NDUk1fQVVYQ0xLUkVRMQkJCU9NQVA0NFhYX1NDUk1fUkVHQUREUigweDAyMTQpCisjZGVmaW5lIE9NQVA0X1NDUk1fQVVYQ0xLUkVRMl9PRkZTRVQJCTB4MDIxOAorI2RlZmluZSBPTUFQNF9TQ1JNX0FVWENMS1JFUTIJCQlPTUFQNDRYWF9TQ1JNX1JFR0FERFIoMHgwMjE4KQorI2RlZmluZSBPTUFQNF9TQ1JNX0FVWENMS1JFUTNfT0ZGU0VUCQkweDAyMWMKKyNkZWZpbmUgT01BUDRfU0NSTV9BVVhDTEtSRVEzCQkJT01BUDQ0WFhfU0NSTV9SRUdBRERSKDB4MDIxYykKKyNkZWZpbmUgT01BUDRfU0NSTV9BVVhDTEtSRVE0X09GRlNFVAkJMHgwMjIwCisjZGVmaW5lIE9NQVA0X1NDUk1fQVVYQ0xLUkVRNAkJCU9NQVA0NFhYX1NDUk1fUkVHQUREUigweDAyMjApCisjZGVmaW5lIE9NQVA0X1NDUk1fQVVYQ0xLUkVRNV9PRkZTRVQJCTB4MDIyNAorI2RlZmluZSBPTUFQNF9TQ1JNX0FVWENMS1JFUTUJCQlPTUFQNDRYWF9TQ1JNX1JFR0FERFIoMHgwMjI0KQorI2RlZmluZSBPTUFQNF9TQ1JNX0QyRENMS1JFUV9PRkZTRVQJCTB4MDIzNAorI2RlZmluZSBPTUFQNF9TQ1JNX0QyRENMS1JFUQkJCU9NQVA0NFhYX1NDUk1fUkVHQUREUigweDAyMzQpCisjZGVmaW5lIE9NQVA0X1NDUk1fQVVYQ0xLMF9PRkZTRVQJCTB4MDMxMAorI2RlZmluZSBPTUFQNF9TQ1JNX0FVWENMSzAJCQlPTUFQNDRYWF9TQ1JNX1JFR0FERFIoMHgwMzEwKQorI2RlZmluZSBPTUFQNF9TQ1JNX0FVWENMSzFfT0ZGU0VUCQkweDAzMTQKKyNkZWZpbmUgT01BUDRfU0NSTV9BVVhDTEsxCQkJT01BUDQ0WFhfU0NSTV9SRUdBRERSKDB4MDMxNCkKKyNkZWZpbmUgT01BUDRfU0NSTV9BVVhDTEsyX09GRlNFVAkJMHgwMzE4CisjZGVmaW5lIE9NQVA0X1NDUk1fQVVYQ0xLMgkJCU9NQVA0NFhYX1NDUk1fUkVHQUREUigweDAzMTgpCisjZGVmaW5lIE9NQVA0X1NDUk1fQVVYQ0xLM19PRkZTRVQJCTB4MDMxYworI2RlZmluZSBPTUFQNF9TQ1JNX0FVWENMSzMJCQlPTUFQNDRYWF9TQ1JNX1JFR0FERFIoMHgwMzFjKQorI2RlZmluZSBPTUFQNF9TQ1JNX0FVWENMSzRfT0ZGU0VUCQkweDAzMjAKKyNkZWZpbmUgT01BUDRfU0NSTV9BVVhDTEs0CQkJT01BUDQ0WFhfU0NSTV9SRUdBRERSKDB4MDMyMCkKKyNkZWZpbmUgT01BUDRfU0NSTV9BVVhDTEs1X09GRlNFVAkJMHgwMzI0CisjZGVmaW5lIE9NQVA0X1NDUk1fQVVYQ0xLNQkJCU9NQVA0NFhYX1NDUk1fUkVHQUREUigweDAzMjQpCisjZGVmaW5lIE9NQVA0X1NDUk1fUlNUVElNRV9PRkZTRVQJCTB4MDQwMAorI2RlZmluZSBPTUFQNF9TQ1JNX1JTVFRJTUUJCQlPTUFQNDRYWF9TQ1JNX1JFR0FERFIoMHgwNDAwKQorI2RlZmluZSBPTUFQNF9TQ1JNX01PREVNUlNUQ1RSTF9PRkZTRVQJCTB4MDQxOAorI2RlZmluZSBPTUFQNF9TQ1JNX01PREVNUlNUQ1RSTAkJCU9NQVA0NFhYX1NDUk1fUkVHQUREUigweDA0MTgpCisjZGVmaW5lIE9NQVA0X1NDUk1fRDJEUlNUQ1RSTF9PRkZTRVQJCTB4MDQxYworI2RlZmluZSBPTUFQNF9TQ1JNX0QyRFJTVENUUkwJCQlPTUFQNDRYWF9TQ1JNX1JFR0FERFIoMHgwNDFjKQorI2RlZmluZSBPTUFQNF9TQ1JNX0VYVFBXUk9OUlNUQ1RSTF9PRkZTRVQJMHgwNDIwCisjZGVmaW5lIE9NQVA0X1NDUk1fRVhUUFdST05SU1RDVFJMCQlPTUFQNDRYWF9TQ1JNX1JFR0FERFIoMHgwNDIwKQorI2RlZmluZSBPTUFQNF9TQ1JNX0VYVFdBUk1SU1RTVF9PRkZTRVQJCTB4MDUxMAorI2RlZmluZSBPTUFQNF9TQ1JNX0VYVFdBUk1SU1RTVAkJCU9NQVA0NFhYX1NDUk1fUkVHQUREUigweDA1MTApCisjZGVmaW5lIE9NQVA0X1NDUk1fQVBFV0FSTVJTVFNUX09GRlNFVAkJMHgwNTE0CisjZGVmaW5lIE9NQVA0X1NDUk1fQVBFV0FSTVJTVFNUCQkJT01BUDQ0WFhfU0NSTV9SRUdBRERSKDB4MDUxNCkKKyNkZWZpbmUgT01BUDRfU0NSTV9NT0RFTVdBUk1SU1RTVF9PRkZTRVQJMHgwNTE4CisjZGVmaW5lIE9NQVA0X1NDUk1fTU9ERU1XQVJNUlNUU1QJCU9NQVA0NFhYX1NDUk1fUkVHQUREUigweDA1MTgpCisjZGVmaW5lIE9NQVA0X1NDUk1fRDJEV0FSTVJTVFNUX09GRlNFVAkJMHgwNTFjCisjZGVmaW5lIE9NQVA0X1NDUk1fRDJEV0FSTVJTVFNUCQkJT01BUDQ0WFhfU0NSTV9SRUdBRERSKDB4MDUxYykKKworLyogUmVnaXN0ZXJzIHNoaWZ0cyBhbmQgbWFza3MgKi8KKworLyogUkVWSVNJT05fU0NSTSAqLworI2RlZmluZSBPTUFQNF9SRVZfU0hJRlQJCQkJMAorI2RlZmluZSBPTUFQNF9SRVZfTUFTSwkJCQkoMHhmZiA8PCAwKQorCisvKiBDTEtTRVRVUFRJTUUgKi8KKyNkZWZpbmUgT01BUDRfRE9XTlRJTUVfU0hJRlQJCQkxNgorI2RlZmluZSBPTUFQNF9ET1dOVElNRV9NQVNLCQkJKDB4M2YgPDwgMTYpCisjZGVmaW5lIE9NQVA0X1NFVFVQVElNRV9TSElGVAkJCTAKKyNkZWZpbmUgT01BUDRfU0VUVVBUSU1FX01BU0sJCQkoMHhmZmYgPDwgMCkKKworLyogUE1JQ1NFVFVQVElNRSAqLworI2RlZmluZSBPTUFQNF9XQUtFVVBUSU1FX1NISUZUCQkJMTYKKyNkZWZpbmUgT01BUDRfV0FLRVVQVElNRV9NQVNLCQkJKDB4M2YgPDwgMTYpCisjZGVmaW5lIE9NQVA0X1NMRUVQVElNRV9TSElGVAkJCTAKKyNkZWZpbmUgT01BUDRfU0xFRVBUSU1FX01BU0sJCQkoMHgzZiA8PCAwKQorCisvKiBBTFRDTEtTUkMgKi8KKyNkZWZpbmUgT01BUDRfRU5BQkxFX0VYVF9TSElGVAkJCTMKKyNkZWZpbmUgT01BUDRfRU5BQkxFX0VYVF9NQVNLCQkJKDEgPDwgMykKKyNkZWZpbmUgT01BUDRfRU5BQkxFX0lOVF9TSElGVAkJCTIKKyNkZWZpbmUgT01BUDRfRU5BQkxFX0lOVF9NQVNLCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDRfQUxUQ0xLU1JDX01PREVfU0hJRlQJCTAKKyNkZWZpbmUgT01BUDRfQUxUQ0xLU1JDX01PREVfTUFTSwkJKDB4MyA8PCAwKQorCisvKiBNT0RFTUNMS00gKi8KKyNkZWZpbmUgT01BUDRfQ0xLXzMyS0haX1NISUZUCQkJMAorI2RlZmluZSBPTUFQNF9DTEtfMzJLSFpfTUFTSwkJCSgxIDw8IDApCisKKy8qIEQyRENMS00gKi8KKyNkZWZpbmUgT01BUDRfU1lTQ0xLX1NISUZUCQkJMQorI2RlZmluZSBPTUFQNF9TWVNDTEtfTUFTSwkJCSgxIDw8IDEpCisKKy8qIEVYVENMS1JFUSAqLworI2RlZmluZSBPTUFQNF9QT0xBUklUWV9TSElGVAkJCTAKKyNkZWZpbmUgT01BUDRfUE9MQVJJVFlfTUFTSwkJCSgxIDw8IDApCisKKy8qIEFVWENMS1JFUTAgKi8KKyNkZWZpbmUgT01BUDRfTUFQUElOR19TSElGVAkJCTIKKyNkZWZpbmUgT01BUDRfTUFQUElOR19NQVNLCQkJKDB4NyA8PCAyKQorI2RlZmluZSBPTUFQNF9BQ0NVUkFDWV9TSElGVAkJCTEKKyNkZWZpbmUgT01BUDRfQUNDVVJBQ1lfTUFTSwkJCSgxIDw8IDEpCisKKy8qIEFVWENMSzAgKi8KKyNkZWZpbmUgT01BUDRfQ0xLRElWX1NISUZUCQkJMTYKKyNkZWZpbmUgT01BUDRfQ0xLRElWX01BU0sJCQkoMHhmIDw8IDE2KQorI2RlZmluZSBPTUFQNF9ESVNBQkxFQ0xLX1NISUZUCQkJOQorI2RlZmluZSBPTUFQNF9ESVNBQkxFQ0xLX01BU0sJCQkoMSA8PCA5KQorI2RlZmluZSBPTUFQNF9FTkFCTEVfU0hJRlQJCQk4CisjZGVmaW5lIE9NQVA0X0VOQUJMRV9NQVNLCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDRfU1JDU0VMRUNUX1NISUZUCQkJMQorI2RlZmluZSBPTUFQNF9TUkNTRUxFQ1RfTUFTSwkJCSgweDMgPDwgMSkKKworLyogUlNUVElNRSAqLworI2RlZmluZSBPTUFQNF9SU1RUSU1FX1NISUZUCQkJMAorI2RlZmluZSBPTUFQNF9SU1RUSU1FX01BU0sJCQkoMHhmIDw8IDApCisKKy8qIE1PREVNUlNUQ1RSTCAqLworI2RlZmluZSBPTUFQNF9XQVJNUlNUX1NISUZUCQkJMQorI2RlZmluZSBPTUFQNF9XQVJNUlNUX01BU0sJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQNF9DT0xEUlNUX1NISUZUCQkJMAorI2RlZmluZSBPTUFQNF9DT0xEUlNUX01BU0sJCQkoMSA8PCAwKQorCisvKiBFWFRQV1JPTlJTVENUUkwgKi8KKyNkZWZpbmUgT01BUDRfUFdST05SU1RfU0hJRlQJCQkxCisjZGVmaW5lIE9NQVA0X1BXUk9OUlNUX01BU0sJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQNF9FTkFCTEVfRVhUUFdST05SU1RDVFJMX1NISUZUCTAKKyNkZWZpbmUgT01BUDRfRU5BQkxFX0VYVFBXUk9OUlNUQ1RSTF9NQVNLCSgxIDw8IDApCisKKy8qIEVYVFdBUk1SU1RTVCAqLworI2RlZmluZSBPTUFQNF9FWFRXQVJNUlNUU1RfU0hJRlQJCTAKKyNkZWZpbmUgT01BUDRfRVhUV0FSTVJTVFNUX01BU0sJCQkoMSA8PCAwKQorCisvKiBBUEVXQVJNUlNUU1QgKi8KKyNkZWZpbmUgT01BUDRfQVBFV0FSTVJTVFNUX1NISUZUCQkxCisjZGVmaW5lIE9NQVA0X0FQRVdBUk1SU1RTVF9NQVNLCQkJKDEgPDwgMSkKKworLyogTU9ERU1XQVJNUlNUU1QgKi8KKyNkZWZpbmUgT01BUDRfTU9ERU1XQVJNUlNUU1RfU0hJRlQJCTIKKyNkZWZpbmUgT01BUDRfTU9ERU1XQVJNUlNUU1RfTUFTSwkJKDEgPDwgMikKKworLyogRDJEV0FSTVJTVFNUICovCisjZGVmaW5lIE9NQVA0X0QyRFdBUk1SU1RTVF9TSElGVAkJMworI2RlZmluZSBPTUFQNF9EMkRXQVJNUlNUU1RfTUFTSwkJCSgxIDw8IDMpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9zZHJhbS1ub2tpYS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9zZHJhbS1ub2tpYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0Y2FhMjIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NkcmFtLW5va2lhLmMKQEAgLTAsMCArMSwyNzkgQEAKKy8qCisgKiBTRFJDIHJlZ2lzdGVyIHZhbHVlcyBmb3IgTm9raWEgYm9hcmRzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEwIE5va2lhIENvcnBvcmF0aW9uCisgKgorICogTGF1cmkgTGV1a2t1bmVuIDxsYXVyaS5sZXVra3VuZW5Abm9raWEuY29tPgorICoKKyAqIE9yaWdpbmFsIGNvZGUgYnkgSnVoYSBZcmpvbGEgPGp1aGEueXJqb2xhQHNvbGlkYm9vdC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPHBsYXQvaW8uaD4KKyNpbmNsdWRlIDxwbGF0L2NvbW1vbi5oPgorI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KKyNpbmNsdWRlIDxwbGF0L3NkcmMuaD4KKworI2luY2x1ZGUgInNkcmFtLW5va2lhLmgiCisKKy8qIEluIHBpY29zZWNvbmRzLCBleGNlcHQgZm9yIHRSRUYgKG5zKSwgdFhQLCB0Q0tFLCB0V1RSIChjbGtzKSAqLworc3RydWN0IHNkcmFtX3RpbWluZ3MgeworCXUzMiBjYXNsOworCXUzMiB0REFMOworCXUzMiB0RFBMOworCXUzMiB0UlJEOworCXUzMiB0UkNEOworCXUzMiB0UlA7CisJdTMyIHRSQVM7CisJdTMyIHRSQzsKKwl1MzIgdFJGQzsKKwl1MzIgdFhTUjsKKworCXUzMiB0UkVGOyAvKiBpbiBucyAqLworCisJdTMyIHRYUDsKKwl1MzIgdENLRTsKKwl1MzIgdFdUUjsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RyYW1fdGltaW5ncyBub2tpYV85N2RvdDZtaHpfdGltaW5nc1tdID0geworCXsKKwkJLmNhc2wgPSAzLAorCQkudERBTCA9IDMwNzI1LAorCQkudERQTCA9IDE1MzYyLAorCQkudFJSRCA9IDEwMjQxLAorCQkudFJDRCA9IDIwNDgzLAorCQkudFJQID0gMTUzNjIsCisJCS50UkFTID0gNDA5NjcsCisJCS50UkMgPSA1NjMzMCwKKwkJLnRSRkMgPSAxMzgyNjYsCisJCS50WFNSID0gMjA0ODM5LAorCisJCS50UkVGID0gNzc5OCwKKworCQkudFhQID0gMiwKKwkJLnRDS0UgPSA0LAorCQkudFdUUiA9IDIsCisJfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RyYW1fdGltaW5ncyBub2tpYV8xNjZtaHpfdGltaW5nc1tdID0geworCXsKKwkJLmNhc2wgPSAzLAorCQkudERBTCA9IDMzMDAwLAorCQkudERQTCA9IDE1MDAwLAorCQkudFJSRCA9IDEyMDAwLAorCQkudFJDRCA9IDIyNTAwLAorCQkudFJQID0gMTgwMDAsCisJCS50UkFTID0gNDIwMDAsCisJCS50UkMgPSA2NjAwMCwKKwkJLnRSRkMgPSAxMzgwMDAsCisJCS50WFNSID0gMjAwMDAwLAorCisJCS50UkVGID0gNzgwMCwKKworCQkudFhQID0gMiwKKwkJLnRDS0UgPSAyLAorCQkudFdUUiA9IDIKKwl9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzZHJhbV90aW1pbmdzIG5va2lhXzE5NWRvdDJtaHpfdGltaW5nc1tdID0geworCXsKKwkJLmNhc2wgPSAzLAorCQkudERBTCA9IDMwNzI1LAorCQkudERQTCA9IDE1MzYyLAorCQkudFJSRCA9IDEwMjQxLAorCQkudFJDRCA9IDIwNDgzLAorCQkudFJQID0gMTUzNjIsCisJCS50UkFTID0gNDA5NjcsCisJCS50UkMgPSA1NjMzMCwKKwkJLnRSRkMgPSAxMzgyNjYsCisJCS50WFNSID0gMjA0ODM5LAorCisJCS50UkVGID0gNzc1MiwKKworCQkudFhQID0gMiwKKwkJLnRDS0UgPSA0LAorCQkudFdUUiA9IDIsCisJfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeworCWxvbmcgcmF0ZTsKKwlzdHJ1Y3Qgc2RyYW1fdGltaW5ncyBjb25zdCAqZGF0YTsKK30gbm9raWFfdGltaW5nc1tdID0geworCXsgODMwMDAwMDAsIG5va2lhXzE2Nm1oel90aW1pbmdzIH0sCisJeyA5NzYwMDAwMCwgbm9raWFfOTdkb3Q2bWh6X3RpbWluZ3MgfSwKKwl7IDE2NjAwMDAwMCwgbm9raWFfMTY2bWh6X3RpbWluZ3MgfSwKKwl7IDE5NTIwMDAwMCwgbm9raWFfMTk1ZG90Mm1oel90aW1pbmdzIH0sCit9Oworc3RhdGljIHN0cnVjdCBvbWFwX3NkcmNfcGFyYW1zIG5va2lhX3NkcmNfcGFyYW1zW0FSUkFZX1NJWkUobm9raWFfdGltaW5ncykgKyAxXTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgc2RyY19nZXRfZmNsa19wZXJpb2QobG9uZyByYXRlKQoreworCS8qIEluIHBpY29zZWNvbmRzICovCisJcmV0dXJuIDEwMDAwMDAwMDAgLyByYXRlOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHNkcmNfcHNfdG9fdGlja3ModW5zaWduZWQgaW50IHRpbWVfcHMsIGxvbmcgcmF0ZSkKK3sKKwl1bnNpZ25lZCBsb25nIHRpY2tfcHM7CisKKwkvKiBDYWxjdWxhdGUgaW4gcGljb3NlY3MgdG8geWllbGQgbW9yZSBleGFjdCByZXN1bHRzICovCisJdGlja19wcyA9IHNkcmNfZ2V0X2ZjbGtfcGVyaW9kKHJhdGUpOworCisJcmV0dXJuICh0aW1lX3BzICsgdGlja19wcyAtIDEpIC8gdGlja19wczsKK30KKyN1bmRlZiBERUJVRworI2lmZGVmIERFQlVHCitzdGF0aWMgaW50IHNldF9zZHJjX3RpbWluZ19yZWd2YWwodTMyICpyZWd2YWwsIGludCBzdF9iaXQsIGludCBlbmRfYml0LAorCQkJCWludCB0aWNrcywgbG9uZyByYXRlLCBjb25zdCBjaGFyICpuYW1lKQorI2Vsc2UKK3N0YXRpYyBpbnQgc2V0X3NkcmNfdGltaW5nX3JlZ3ZhbCh1MzIgKnJlZ3ZhbCwgaW50IHN0X2JpdCwgaW50IGVuZF9iaXQsCisJCQkgICAgICAgaW50IHRpY2tzKQorI2VuZGlmCit7CisJaW50IG1hc2ssIG5yX2JpdHM7CisKKwlucl9iaXRzID0gZW5kX2JpdCAtIHN0X2JpdCArIDE7CisJaWYgKHRpY2tzID49IDEgPDwgbnJfYml0cykKKwkJcmV0dXJuIC0xOworCW1hc2sgPSAoMSA8PCBucl9iaXRzKSAtIDE7CisJKnJlZ3ZhbCAmPSB+KG1hc2sgPDwgc3RfYml0KTsKKwkqcmVndmFsIHw9IHRpY2tzIDw8IHN0X2JpdDsKKyNpZmRlZiBERUJVRworCXByaW50ayhLRVJOX0lORk8gIlNEUkMgJXM6ICVpIHRpY2tzICVpIG5zXG4iLCBuYW1lLCB0aWNrcywKKwkJCSh1bnNpZ25lZCBpbnQpc2RyY19nZXRfZmNsa19wZXJpb2QocmF0ZSkgKiB0aWNrcyAvCisJCQkxMDAwKTsKKyNlbmRpZgorCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBERUJVRworI2RlZmluZSBTRFJDX1NFVF9PTkUocmVnLCBzdCwgZW5kLCBmaWVsZCwgcmF0ZSkgXAorCWlmIChzZXRfc2RyY190aW1pbmdfcmVndmFsKChyZWcpLCAoc3QpLCAoZW5kKSwgXAorCQkJbWVtb3J5X3RpbWluZ3MtPmZpZWxkLCAocmF0ZSksICNmaWVsZCkgPCAwKSBcCisJCWVyciA9IC0xOworI2Vsc2UKKyNkZWZpbmUgU0RSQ19TRVRfT05FKHJlZywgc3QsIGVuZCwgZmllbGQsIHJhdGUpIFwKKwlpZiAoc2V0X3NkcmNfdGltaW5nX3JlZ3ZhbCgocmVnKSwgKHN0KSwgKGVuZCksIFwKKwkJCW1lbW9yeV90aW1pbmdzLT5maWVsZCkgPCAwKSBcCisJCWVyciA9IC0xOworI2VuZGlmCisKKyNpZmRlZiBERUJVRworc3RhdGljIGludCBzZXRfc2RyY190aW1pbmdfcmVndmFsX3BzKHUzMiAqcmVndmFsLCBpbnQgc3RfYml0LCBpbnQgZW5kX2JpdCwKKwkJCQlpbnQgdGltZSwgbG9uZyByYXRlLCBjb25zdCBjaGFyICpuYW1lKQorI2Vsc2UKK3N0YXRpYyBpbnQgc2V0X3NkcmNfdGltaW5nX3JlZ3ZhbF9wcyh1MzIgKnJlZ3ZhbCwgaW50IHN0X2JpdCwgaW50IGVuZF9iaXQsCisJCQkJaW50IHRpbWUsIGxvbmcgcmF0ZSkKKyNlbmRpZgoreworCWludCB0aWNrcywgcmV0OworCXJldCA9IDA7CisKKwlpZiAodGltZSA9PSAwKQorCQl0aWNrcyA9IDA7CisJZWxzZQorCQl0aWNrcyA9IHNkcmNfcHNfdG9fdGlja3ModGltZSwgcmF0ZSk7CisKKyNpZmRlZiBERUJVRworCXJldCA9IHNldF9zZHJjX3RpbWluZ19yZWd2YWwocmVndmFsLCBzdF9iaXQsIGVuZF9iaXQsIHRpY2tzLAorCQkJCSAgICAgcmF0ZSwgbmFtZSk7CisjZWxzZQorCXJldCA9IHNldF9zZHJjX3RpbWluZ19yZWd2YWwocmVndmFsLCBzdF9iaXQsIGVuZF9iaXQsIHRpY2tzKTsKKyNlbmRpZgorCisJcmV0dXJuIHJldDsKK30KKworI2lmZGVmIERFQlVHCisjZGVmaW5lIFNEUkNfU0VUX09ORV9QUyhyZWcsIHN0LCBlbmQsIGZpZWxkLCByYXRlKSBcCisJaWYgKHNldF9zZHJjX3RpbWluZ19yZWd2YWxfcHMoKHJlZyksIChzdCksIChlbmQpLCBcCisJCQltZW1vcnlfdGltaW5ncy0+ZmllbGQsIFwKKwkJCShyYXRlKSwgI2ZpZWxkKSA8IDApIFwKKwkJZXJyID0gLTE7CisKKyNlbHNlCisjZGVmaW5lIFNEUkNfU0VUX09ORV9QUyhyZWcsIHN0LCBlbmQsIGZpZWxkLCByYXRlKSBcCisJaWYgKHNldF9zZHJjX3RpbWluZ19yZWd2YWxfcHMoKHJlZyksIChzdCksIChlbmQpLCBcCisJCQltZW1vcnlfdGltaW5ncy0+ZmllbGQsIChyYXRlKSkgPCAwKSBcCisJCWVyciA9IC0xOworI2VuZGlmCisKK3N0YXRpYyBpbnQgc2RyY190aW1pbmdzKGludCBpZCwgbG9uZyByYXRlLAorCQkJY29uc3Qgc3RydWN0IHNkcmFtX3RpbWluZ3MgKm1lbW9yeV90aW1pbmdzKQoreworCXUzMiB0aWNrc19wZXJfbXM7CisJdTMyIHJmciwgbDsKKwl1MzIgYWN0aW1fY3RybGEgPSAwLCBhY3RpbV9jdHJsYiA9IDA7CisJdTMyIHJmcl9jdHJsOworCWludCBlcnIgPSAwOworCWxvbmcgbDNfcmF0ZSA9IHJhdGUgLyAxMDAwOworCisJU0RSQ19TRVRfT05FX1BTKCZhY3RpbV9jdHJsYSwgIDAsICA0LCB0REFMLCBsM19yYXRlKTsKKwlTRFJDX1NFVF9PTkVfUFMoJmFjdGltX2N0cmxhLCAgNiwgIDgsIHREUEwsIGwzX3JhdGUpOworCVNEUkNfU0VUX09ORV9QUygmYWN0aW1fY3RybGEsICA5LCAxMSwgdFJSRCwgbDNfcmF0ZSk7CisJU0RSQ19TRVRfT05FX1BTKCZhY3RpbV9jdHJsYSwgMTIsIDE0LCB0UkNELCBsM19yYXRlKTsKKwlTRFJDX1NFVF9PTkVfUFMoJmFjdGltX2N0cmxhLCAxNSwgMTcsIHRSUCwgbDNfcmF0ZSk7CisJU0RSQ19TRVRfT05FX1BTKCZhY3RpbV9jdHJsYSwgMTgsIDIxLCB0UkFTLCBsM19yYXRlKTsKKwlTRFJDX1NFVF9PTkVfUFMoJmFjdGltX2N0cmxhLCAyMiwgMjYsIHRSQywgbDNfcmF0ZSk7CisJU0RSQ19TRVRfT05FX1BTKCZhY3RpbV9jdHJsYSwgMjcsIDMxLCB0UkZDLCBsM19yYXRlKTsKKworCVNEUkNfU0VUX09ORV9QUygmYWN0aW1fY3RybGIsICAwLCAgNywgdFhTUiwgbDNfcmF0ZSk7CisKKwlTRFJDX1NFVF9PTkUoJmFjdGltX2N0cmxiLCAgOCwgMTAsIHRYUCwgbDNfcmF0ZSk7CisJU0RSQ19TRVRfT05FKCZhY3RpbV9jdHJsYiwgMTIsIDE0LCB0Q0tFLCBsM19yYXRlKTsKKwlTRFJDX1NFVF9PTkUoJmFjdGltX2N0cmxiLCAxNiwgMTcsIHRXVFIsIGwzX3JhdGUpOworCisJdGlja3NfcGVyX21zID0gbDNfcmF0ZTsKKwlyZnIgPSBtZW1vcnlfdGltaW5nc1swXS50UkVGICogdGlja3NfcGVyX21zIC8gMTAwMDAwMDsKKwlpZiAocmZyID4gNjU1MzUgKyA1MCkKKwkJcmZyID0gNjU1MzU7CisJZWxzZQorCQlyZnIgLT0gNTA7CisKKyNpZmRlZiBERUJVRworCXByaW50ayhLRVJOX0lORk8gIlNEUkMgdFJFRjogJWkgdGlja3NcbiIsIHJmcik7CisjZW5kaWYKKworCWwgPSByZnIgPDwgODsKKwlyZnJfY3RybCA9IGwgfCAweDE7IC8qIGF1dG9yZWZyZXNoLCByZWxvYWQgY291bnRlciB3aXRoIDF4QVJDViAqLworCisJbm9raWFfc2RyY19wYXJhbXNbaWRdLnJhdGUgPSByYXRlOworCW5va2lhX3NkcmNfcGFyYW1zW2lkXS5hY3RpbV9jdHJsYSA9IGFjdGltX2N0cmxhOworCW5va2lhX3NkcmNfcGFyYW1zW2lkXS5hY3RpbV9jdHJsYiA9IGFjdGltX2N0cmxiOworCW5va2lhX3NkcmNfcGFyYW1zW2lkXS5yZnJfY3RybCA9IHJmcl9jdHJsOworCW5va2lhX3NkcmNfcGFyYW1zW2lkXS5tciA9IDB4MzI7CisKKwlub2tpYV9zZHJjX3BhcmFtc1tpZCArIDFdLnJhdGUgPSAwOworCisJcmV0dXJuIGVycjsKK30KKworc3RydWN0IG9tYXBfc2RyY19wYXJhbXMgKm5va2lhX2dldF9zZHJhbV90aW1pbmdzKHZvaWQpCit7CisJaW50IGVyciA9IDA7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShub2tpYV90aW1pbmdzKTsgaSsrKSB7CisJCWVyciB8PSBzZHJjX3RpbWluZ3MoaSwgbm9raWFfdGltaW5nc1tpXS5yYXRlLAorCQkJCSAgICAgICBub2tpYV90aW1pbmdzW2ldLmRhdGEpOworCQlpZiAoZXJyKQorCQkJcHJfZXJyKCIlczogZXJyb3Igd2l0aCByYXRlICVsZDogJWRcbiIsIF9fZnVuY19fLAorCQkJICAgICAgIG5va2lhX3RpbWluZ3NbaV0ucmF0ZSwgZXJyKTsKKwl9CisKKwlyZXR1cm4gZXJyID8gTlVMTCA6IG5va2lhX3NkcmNfcGFyYW1zOworfQorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3NkcmFtLW5va2lhLmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NkcmFtLW5va2lhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU2M2RhNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc2RyYW0tbm9raWEuaApAQCAtMCwwICsxLDEyIEBACisvKgorICogU0RSQyByZWdpc3RlciB2YWx1ZXMgZm9yIE5va2lhIGJvYXJkcworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworc3RydWN0IG9tYXBfc2RyY19wYXJhbXMgKm5va2lhX2dldF9zZHJhbV90aW1pbmdzKHZvaWQpOworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3NkcmMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc2RyYy5jCmluZGV4IDRjNjVmNTYuLmRhNmYzYTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvc2RyYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc2RyYy5jCkBAIC0yNyw4ICsyNyw2IEBACiAjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgogI2luY2x1ZGUgPHBsYXQvc3JhbS5oPgogCi0jaW5jbHVkZSAicHJtLmgiCi0KICNpbmNsdWRlIDxwbGF0L3NkcmMuaD4KICNpbmNsdWRlICJzZHJjLmgiCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvc2RyYy5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9zZHJjLmgKaW5kZXggNjhmNTdiYi4uYjNmODM3OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9zZHJjLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9zZHJjLmgKQEAgLTc0LDUgKzc0LDQgQEAKICAqLwogI2RlZmluZSBTRFJDX01QVVJBVEVfTE9PUFMJCTk2CiAKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3NkcmMyeHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NkcmMyeHh4LmMKaW5kZXggMGY0ZDI3YS4uY2NkYjAxMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9zZHJjMnh4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc2RyYzJ4eHguYwpAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KICNpbmNsdWRlIDxwbGF0L3NyYW0uaD4KIAotI2luY2x1ZGUgInBybS5oIgorI2luY2x1ZGUgInBybTJ4eHhfM3h4eC5oIgogI2luY2x1ZGUgImNsb2NrLmgiCiAjaW5jbHVkZSA8cGxhdC9zZHJjLmg+CiAjaW5jbHVkZSAic2RyYy5oIgpAQCAtOTksNiArOTksMTAgQEAKIAltX3R5cGUgPSBvbWFwMnh4eF9zZHJjX2dldF90eXBlKCk7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJLyoKKwkgKiBYWFggVGhlc2UgY2FsbHMgc2hvdWxkIGJlIGFic3RyYWN0ZWQgb3V0IHRocm91Z2ggYQorCSAqIHBybTJ4eHguYyBmdW5jdGlvbgorCSAqLwogCWlmIChjcHVfaXNfb21hcDI0MjAoKSkKIAkJX19yYXdfd3JpdGVsKDB4ZmZmZiwgT01BUDI0MjBfUFJDTV9WT0xUU0VUVVApOwogCWVsc2UKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvc2VyaWFsLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NlcmlhbC5jCmluZGV4IGQxNzk2MGEuLmM2NDU3ODggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvc2VyaWFsLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9zZXJpYWwuYwpAQCAtNDAsMTEgKzQwLDEyIEBACiAjaW5jbHVkZSA8cGxhdC9vbWFwX2h3bW9kLmg+CiAjaW5jbHVkZSA8cGxhdC9vbWFwX2RldmljZS5oPgogCi0jaW5jbHVkZSAicHJtLmgiCisjaW5jbHVkZSAicHJtMnh4eF8zeHh4LmgiCiAjaW5jbHVkZSAicG0uaCIKLSNpbmNsdWRlICJjbS5oIgorI2luY2x1ZGUgImNtMnh4eF8zeHh4LmgiCiAjaW5jbHVkZSAicHJtLXJlZ2JpdHMtMzR4eC5oIgogI2luY2x1ZGUgImNvbnRyb2wuaCIKKyNpbmNsdWRlICJtdXguaCIKIAogI2RlZmluZSBVQVJUX09NQVBfTk9fRU1QVFlfRklGT19SRUFEX0lQX1JFVgkweDUyCiAjZGVmaW5lIFVBUlRfT01BUF9XRVIJCTB4MTcJLyogV2FrZS11cCBlbmFibGUgcmVnaXN0ZXIgKi8KQEAgLTEwNiwyMSArMTA3LDE2IEBACiBzdGF0aWMgTElTVF9IRUFEKHVhcnRfbGlzdCk7CiBzdGF0aWMgdTggbnVtX3VhcnRzOwogCi0vKgotICogU2luY2UgdGhlc2UgaWRsZS9lbmFibGUgaG9va3MgYXJlIHVzZWQgaW4gdGhlIGlkbGUgcGF0aCBpdHNlbGYKLSAqIHdoaWNoIGhhcyBpbnRlcnJ1cHRzIGRpc2FibGVkLCB1c2UgdGhlIG5vbi1sb2NraW5nIHZlcnNpb25zIG9mCi0gKiB0aGUgaHdtb2QgZW5hYmxlL2Rpc2FibGUgZnVuY3Rpb25zLgotICovCiBzdGF0aWMgaW50IHVhcnRfaWRsZV9od21vZChzdHJ1Y3Qgb21hcF9kZXZpY2UgKm9kKQogewotCV9vbWFwX2h3bW9kX2lkbGUob2QtPmh3bW9kc1swXSk7CisJb21hcF9od21vZF9pZGxlKG9kLT5od21vZHNbMF0pOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdWFydF9lbmFibGVfaHdtb2Qoc3RydWN0IG9tYXBfZGV2aWNlICpvZCkKIHsKLQlfb21hcF9od21vZF9lbmFibGUob2QtPmh3bW9kc1swXSk7CisJb21hcF9od21vZF9lbmFibGUob2QtPmh3bW9kc1swXSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE2OSw5ICsxNjUsOSBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IG9tYXBfdWFydF9yZXNldChzdHJ1Y3Qgb21hcF91YXJ0X3N0YXRlICp1YXJ0KQogewotCXNlcmlhbF93cml0ZV9yZWcodWFydCwgVUFSVF9PTUFQX01EUjEsIDB4MDcpOworCXNlcmlhbF93cml0ZV9yZWcodWFydCwgVUFSVF9PTUFQX01EUjEsIFVBUlRfT01BUF9NRFIxX0RJU0FCTEUpOwogCXNlcmlhbF93cml0ZV9yZWcodWFydCwgVUFSVF9PTUFQX1NDUiwgMHgwOCk7Ci0Jc2VyaWFsX3dyaXRlX3JlZyh1YXJ0LCBVQVJUX09NQVBfTURSMSwgMHgwMCk7CisJc2VyaWFsX3dyaXRlX3JlZyh1YXJ0LCBVQVJUX09NQVBfTURSMSwgVUFSVF9PTUFQX01EUjFfMTZYX01PREUpOwogfQogCiAjaWYgZGVmaW5lZChDT05GSUdfUE0pICYmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpCkBAIC0yMTksNyArMjE1LDcgQEAKIAkJcmV0dXJuOwogCiAJbGNyID0gc2VyaWFsX3JlYWRfcmVnKHVhcnQsIFVBUlRfTENSKTsKLQlzZXJpYWxfd3JpdGVfcmVnKHVhcnQsIFVBUlRfTENSLCAweEJGKTsKKwlzZXJpYWxfd3JpdGVfcmVnKHVhcnQsIFVBUlRfTENSLCBVQVJUX0xDUl9DT05GX01PREVfQik7CiAJdWFydC0+ZGxsID0gc2VyaWFsX3JlYWRfcmVnKHVhcnQsIFVBUlRfRExMKTsKIAl1YXJ0LT5kbGggPSBzZXJpYWxfcmVhZF9yZWcodWFydCwgVUFSVF9ETE0pOwogCXNlcmlhbF93cml0ZV9yZWcodWFydCwgVUFSVF9MQ1IsIGxjcik7CkBAIC0yMjcsNyArMjIzLDcgQEAKIAl1YXJ0LT5zeXNjID0gc2VyaWFsX3JlYWRfcmVnKHVhcnQsIFVBUlRfT01BUF9TWVNDKTsKIAl1YXJ0LT5zY3IgPSBzZXJpYWxfcmVhZF9yZWcodWFydCwgVUFSVF9PTUFQX1NDUik7CiAJdWFydC0+d2VyID0gc2VyaWFsX3JlYWRfcmVnKHVhcnQsIFVBUlRfT01BUF9XRVIpOwotCXNlcmlhbF93cml0ZV9yZWcodWFydCwgVUFSVF9MQ1IsIDB4ODApOworCXNlcmlhbF93cml0ZV9yZWcodWFydCwgVUFSVF9MQ1IsIFVBUlRfTENSX0NPTkZfTU9ERV9BKTsKIAl1YXJ0LT5tY3IgPSBzZXJpYWxfcmVhZF9yZWcodWFydCwgVUFSVF9NQ1IpOwogCXNlcmlhbF93cml0ZV9yZWcodWFydCwgVUFSVF9MQ1IsIGxjcik7CiAKQEAgLTI0NywzMiArMjQzLDM1IEBACiAJdWFydC0+Y29udGV4dF92YWxpZCA9IDA7CiAKIAlpZiAodWFydC0+ZXJyYXRhICYgVUFSVF9FUlJBVEFfaTIwMl9NRFIxX0FDQ0VTUykKLQkJb21hcF91YXJ0X21kcjFfZXJyYXRhc2V0KHVhcnQsIDB4MDcsIDB4QTApOworCQlvbWFwX3VhcnRfbWRyMV9lcnJhdGFzZXQodWFydCwgVUFSVF9PTUFQX01EUjFfRElTQUJMRSwgMHhBMCk7CiAJZWxzZQotCQlzZXJpYWxfd3JpdGVfcmVnKHVhcnQsIFVBUlRfT01BUF9NRFIxLCAweDcpOwotCXNlcmlhbF93cml0ZV9yZWcodWFydCwgVUFSVF9MQ1IsIDB4QkYpOyAvKiBDb25maWcgQiBtb2RlICovCisJCXNlcmlhbF93cml0ZV9yZWcodWFydCwgVUFSVF9PTUFQX01EUjEsIFVBUlRfT01BUF9NRFIxX0RJU0FCTEUpOworCisJc2VyaWFsX3dyaXRlX3JlZyh1YXJ0LCBVQVJUX0xDUiwgVUFSVF9MQ1JfQ09ORl9NT0RFX0IpOwogCWVmciA9IHNlcmlhbF9yZWFkX3JlZyh1YXJ0LCBVQVJUX0VGUik7CiAJc2VyaWFsX3dyaXRlX3JlZyh1YXJ0LCBVQVJUX0VGUiwgVUFSVF9FRlJfRUNCKTsKIAlzZXJpYWxfd3JpdGVfcmVnKHVhcnQsIFVBUlRfTENSLCAweDApOyAvKiBPcGVyYXRpb25hbCBtb2RlICovCiAJc2VyaWFsX3dyaXRlX3JlZyh1YXJ0LCBVQVJUX0lFUiwgMHgwKTsKLQlzZXJpYWxfd3JpdGVfcmVnKHVhcnQsIFVBUlRfTENSLCAweEJGKTsgLyogQ29uZmlnIEIgbW9kZSAqLworCXNlcmlhbF93cml0ZV9yZWcodWFydCwgVUFSVF9MQ1IsIFVBUlRfTENSX0NPTkZfTU9ERV9CKTsKIAlzZXJpYWxfd3JpdGVfcmVnKHVhcnQsIFVBUlRfRExMLCB1YXJ0LT5kbGwpOwogCXNlcmlhbF93cml0ZV9yZWcodWFydCwgVUFSVF9ETE0sIHVhcnQtPmRsaCk7CiAJc2VyaWFsX3dyaXRlX3JlZyh1YXJ0LCBVQVJUX0xDUiwgMHgwKTsgLyogT3BlcmF0aW9uYWwgbW9kZSAqLwogCXNlcmlhbF93cml0ZV9yZWcodWFydCwgVUFSVF9JRVIsIHVhcnQtPmllcik7Ci0Jc2VyaWFsX3dyaXRlX3JlZyh1YXJ0LCBVQVJUX0xDUiwgMHg4MCk7CisJc2VyaWFsX3dyaXRlX3JlZyh1YXJ0LCBVQVJUX0xDUiwgVUFSVF9MQ1JfQ09ORl9NT0RFX0EpOwogCXNlcmlhbF93cml0ZV9yZWcodWFydCwgVUFSVF9NQ1IsIHVhcnQtPm1jcik7Ci0Jc2VyaWFsX3dyaXRlX3JlZyh1YXJ0LCBVQVJUX0xDUiwgMHhCRik7IC8qIENvbmZpZyBCIG1vZGUgKi8KKwlzZXJpYWxfd3JpdGVfcmVnKHVhcnQsIFVBUlRfTENSLCBVQVJUX0xDUl9DT05GX01PREVfQik7CiAJc2VyaWFsX3dyaXRlX3JlZyh1YXJ0LCBVQVJUX0VGUiwgZWZyKTsKIAlzZXJpYWxfd3JpdGVfcmVnKHVhcnQsIFVBUlRfTENSLCBVQVJUX0xDUl9XTEVOOCk7CiAJc2VyaWFsX3dyaXRlX3JlZyh1YXJ0LCBVQVJUX09NQVBfU0NSLCB1YXJ0LT5zY3IpOwogCXNlcmlhbF93cml0ZV9yZWcodWFydCwgVUFSVF9PTUFQX1dFUiwgdWFydC0+d2VyKTsKIAlzZXJpYWxfd3JpdGVfcmVnKHVhcnQsIFVBUlRfT01BUF9TWVNDLCB1YXJ0LT5zeXNjKTsKKwogCWlmICh1YXJ0LT5lcnJhdGEgJiBVQVJUX0VSUkFUQV9pMjAyX01EUjFfQUNDRVNTKQotCQlvbWFwX3VhcnRfbWRyMV9lcnJhdGFzZXQodWFydCwgMHgwMCwgMHhBMSk7CisJCW9tYXBfdWFydF9tZHIxX2VycmF0YXNldCh1YXJ0LCBVQVJUX09NQVBfTURSMV8xNlhfTU9ERSwgMHhBMSk7CiAJZWxzZQogCQkvKiBVQVJUIDE2eCBtb2RlICovCi0JCXNlcmlhbF93cml0ZV9yZWcodWFydCwgVUFSVF9PTUFQX01EUjEsIDB4MDApOworCQlzZXJpYWxfd3JpdGVfcmVnKHVhcnQsIFVBUlRfT01BUF9NRFIxLAorCQkJCVVBUlRfT01BUF9NRFIxXzE2WF9NT0RFKTsKIH0KICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgb21hcF91YXJ0X3NhdmVfY29udGV4dChzdHJ1Y3Qgb21hcF91YXJ0X3N0YXRlICp1YXJ0KSB7fQpAQCAtNDkyLDYgKzQ5MSw3IEBACiAJCXUzMiB3a19tYXNrID0gMDsKIAkJdTMyIHBhZGNvbmYgPSAwOwogCisJCS8qIFhYWCBUaGVzZSBQUk0gYWNjZXNzZXMgZG8gbm90IGJlbG9uZyBoZXJlICovCiAJCXVhcnQtPndrX2VuID0gT01BUDM0WFhfUFJNX1JFR0FERFIobW9kLCBQTV9XS0VOMSk7CiAJCXVhcnQtPndrX3N0ID0gT01BUDM0WFhfUFJNX1JFR0FERFIobW9kLCBQTV9XS1NUMSk7CiAJCXN3aXRjaCAodWFydC0+bnVtKSB7CkBAIC02OTUsMTYgKzY5NSwxNiBAQAogCiAvKioKICAqIG9tYXBfc2VyaWFsX2luaXRfcG9ydCgpIC0gaW5pdGlhbGl6ZSBzaW5nbGUgc2VyaWFsIHBvcnQKLSAqIEBwb3J0OiBzZXJpYWwgcG9ydCBudW1iZXIgKDAtMykKKyAqIEBiZGF0YTogcG9ydCBzcGVjaWZpYyBib2FyZCBkYXRhIHBvaW50ZXIKICAqCi0gKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpZXMgc2VyaWFsIGRyaXZlciBmb3IgZ2l2ZW4gQHBvcnQgb25seS4KKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGllcyBzZXJpYWwgZHJpdmVyIGZvciBnaXZlbiBwb3J0IG9ubHkuCiAgKiBQbGF0Zm9ybXMgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbiBpbnN0ZWFkIG9mIG9tYXBfc2VyaWFsX2luaXQoKQogICogaWYgdGhleSBkb24ndCBwbGFuIHRvIHVzZSBhbGwgYXZhaWxhYmxlIFVBUlRzIGFzIHNlcmlhbCBwb3J0cy4KICAqCiAgKiBEb24ndCBtaXggY2FsbHMgdG8gb21hcF9zZXJpYWxfaW5pdF9wb3J0KCkgYW5kIG9tYXBfc2VyaWFsX2luaXQoKSwKICAqIHVzZSBvbmx5IG9uZSBvZiB0aGUgdHdvLgogICovCi12b2lkIF9faW5pdCBvbWFwX3NlcmlhbF9pbml0X3BvcnQoaW50IHBvcnQpCit2b2lkIF9faW5pdCBvbWFwX3NlcmlhbF9pbml0X3BvcnQoc3RydWN0IG9tYXBfYm9hcmRfZGF0YSAqYmRhdGEpCiB7CiAJc3RydWN0IG9tYXBfdWFydF9zdGF0ZSAqdWFydDsKIAlzdHJ1Y3Qgb21hcF9od21vZCAqb2g7CkBAIC03MjIsMTMgKzcyMiwxNSBAQAogCXN0cnVjdCBvbWFwX3VhcnRfcG9ydF9pbmZvIG9tYXBfdXA7CiAjZW5kaWYKIAotCWlmIChXQVJOX09OKHBvcnQgPCAwKSkKKwlpZiAoV0FSTl9PTighYmRhdGEpKQogCQlyZXR1cm47Ci0JaWYgKFdBUk5fT04ocG9ydCA+PSBudW1fdWFydHMpKQorCWlmIChXQVJOX09OKGJkYXRhLT5pZCA8IDApKQorCQlyZXR1cm47CisJaWYgKFdBUk5fT04oYmRhdGEtPmlkID49IG51bV91YXJ0cykpCiAJCXJldHVybjsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkodWFydCwgJnVhcnRfbGlzdCwgbm9kZSkKLQkJaWYgKHBvcnQgPT0gdWFydC0+bnVtKQorCQlpZiAoYmRhdGEtPmlkID09IHVhcnQtPm51bSkKIAkJCWJyZWFrOwogCiAJb2ggPSB1YXJ0LT5vaDsKQEAgLTgwMCw2ICs4MDIsOCBAQAogCVdBUk4oSVNfRVJSKG9kKSwgIkNvdWxkIG5vdCBidWlsZCBvbWFwX2RldmljZSBmb3IgJXM6ICVzLlxuIiwKIAkgICAgIG5hbWUsIG9oLT5uYW1lKTsKIAorCW9oLT5tdXggPSBvbWFwX2h3bW9kX211eF9pbml0KGJkYXRhLT5wYWRzLCBiZGF0YS0+cGFkc19jbnQpOworCiAJdWFydC0+aXJxID0gb2gtPm1wdV9pcnFzWzBdLmlycTsKIAl1YXJ0LT5yZWdzaGlmdCA9IDI7CiAJdWFydC0+bWFwYmFzZSA9IG9oLT5zbGF2ZXNbMF0tPmFkZHItPnBhX3N0YXJ0OwpAQCAtODU3LDcgKzg2MSwxNCBAQAogdm9pZCBfX2luaXQgb21hcF9zZXJpYWxfaW5pdCh2b2lkKQogewogCXN0cnVjdCBvbWFwX3VhcnRfc3RhdGUgKnVhcnQ7CisJc3RydWN0IG9tYXBfYm9hcmRfZGF0YSBiZGF0YTsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkodWFydCwgJnVhcnRfbGlzdCwgbm9kZSkKLQkJb21hcF9zZXJpYWxfaW5pdF9wb3J0KHVhcnQtPm51bSk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh1YXJ0LCAmdWFydF9saXN0LCBub2RlKSB7CisJCWJkYXRhLmlkID0gdWFydC0+bnVtOworCQliZGF0YS5mbGFncyA9IDA7CisJCWJkYXRhLnBhZHMgPSBOVUxMOworCQliZGF0YS5wYWRzX2NudCA9IDA7CisJCW9tYXBfc2VyaWFsX2luaXRfcG9ydCgmYmRhdGEpOworCisJfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9zbGVlcDM0eHguUyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc2xlZXAzNHh4LlMKaW5kZXggMmZiMjA1YS4uOThkODIzMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9zbGVlcDM0eHguUworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NsZWVwMzR4eC5TCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcDIvc2xlZXAuUwotICoKICAqIChDKSBDb3B5cmlnaHQgMjAwNwogICogVGV4YXMgSW5zdHJ1bWVudHMKICAqIEthcnRoaWsgRGFzdSA8a2FydGhpay1kcEB0aS5jb20+CkBAIC0yNiwyOCArMjQsMzUgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CisjaW5jbHVkZSA8cGxhdC9zcmFtLmg+CiAjaW5jbHVkZSA8bWFjaC9pby5oPgogCi0jaW5jbHVkZSAiY20uaCIKLSNpbmNsdWRlICJwcm0uaCIKKyNpbmNsdWRlICJjbTJ4eHhfM3h4eC5oIgorI2luY2x1ZGUgInBybTJ4eHhfM3h4eC5oIgogI2luY2x1ZGUgInNkcmMuaCIKICNpbmNsdWRlICJjb250cm9sLmgiCiAKLSNkZWZpbmUgU0RSQ19TQ1JBVENIUEFEX1NFTV9WCTB4ZmEwMDI5MWMKLQotI2RlZmluZSBQTV9QUkVQV1NUU1RfQ09SRV9WCU9NQVAzNFhYX1BSTV9SRUdBRERSKENPUkVfTU9ELCBcCi0JCQkJT01BUDM0MzBfUE1fUFJFUFdTVFNUKQotI2RlZmluZSBQTV9QUkVQV1NUU1RfQ09SRV9QCTB4NDgzMDZBRTgKLSNkZWZpbmUgUE1fUFJFUFdTVFNUX01QVV9WCU9NQVAzNFhYX1BSTV9SRUdBRERSKE1QVV9NT0QsIFwKLQkJCQlPTUFQMzQzMF9QTV9QUkVQV1NUU1QpCisvKgorICogUmVnaXN0ZXJzIGFjY2VzcyBkZWZpbml0aW9ucworICovCisjZGVmaW5lIFNEUkNfU0NSQVRDSFBBRF9TRU1fT0ZGUwkweGMKKyNkZWZpbmUgU0RSQ19TQ1JBVENIUEFEX1NFTV9WCU9NQVAzNDNYX1NDUkFUQ0hQQURfUkVHQUREUlwKKwkJCQkJKFNEUkNfU0NSQVRDSFBBRF9TRU1fT0ZGUykKKyNkZWZpbmUgUE1fUFJFUFdTVFNUX0NPUkVfUAlPTUFQMzQzMF9QUk1fQkFTRSArIENPUkVfTU9EICtcCisJCQkJCU9NQVAzNDMwX1BNX1BSRVBXU1RTVAogI2RlZmluZSBQTV9QV1NUQ1RSTF9NUFVfUAlPTUFQMzQzMF9QUk1fQkFTRSArIE1QVV9NT0QgKyBPTUFQMl9QTV9QV1NUQ1RSTAogI2RlZmluZSBDTV9JRExFU1QxX0NPUkVfVglPTUFQMzRYWF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JRExFU1QxKQotI2RlZmluZSBTUkFNX0JBU0VfUAkJMHg0MDIwMDAwMAotI2RlZmluZSBDT05UUk9MX1NUQVQJCTB4NDgwMDIyRjAKLSNkZWZpbmUgU0NSQVRDSFBBRF9NRU1fT0ZGUwkweDMxMCAvKiBNb3ZlIHRoaXMgYXMgY29ycmVjdCBwbGFjZSBpcwotCQkJCSAgICAgICAqIGF2YWlsYWJsZSAqLwotI2RlZmluZSBTQ1JBVENIUEFEX0JBU0VfUAkoT01BUDM0M1hfQ1RSTF9CQVNFICsgT01BUDM0M1hfQ09OVFJPTF9NRU1fV0tVUFwKLQkJCQkJCSsgU0NSQVRDSFBBRF9NRU1fT0ZGUykKKyNkZWZpbmUgQ01fSURMRVNUX0NLR0VOX1YJT01BUDM0WFhfQ01fUkVHQUREUihQTExfTU9ELCBDTV9JRExFU1QpCisjZGVmaW5lIFNSQU1fQkFTRV9QCQlPTUFQM19TUkFNX1BBCisjZGVmaW5lIENPTlRST0xfU1RBVAkJT01BUDM0M1hfQ1RSTF9CQVNFICsgT01BUDM0M1hfQ09OVFJPTF9TVEFUVVMKKyNkZWZpbmUgQ09OVFJPTF9NRU1fUlRBX0NUUkwJKE9NQVAzNDNYX0NUUkxfQkFTRSArXAorCQkJCQlPTUFQMzZYWF9DT05UUk9MX01FTV9SVEFfQ1RSTCkKKworLyogTW92ZSB0aGlzIGFzIGNvcnJlY3QgcGxhY2UgaXMgYXZhaWxhYmxlICovCisjZGVmaW5lIFNDUkFUQ0hQQURfTUVNX09GRlMJMHgzMTAKKyNkZWZpbmUgU0NSQVRDSFBBRF9CQVNFX1AJKE9NQVAzNDNYX0NUUkxfQkFTRSArXAorCQkJCQlPTUFQMzQzWF9DT05UUk9MX01FTV9XS1VQICtcCisJCQkJCVNDUkFUQ0hQQURfTUVNX09GRlMpCiAjZGVmaW5lIFNEUkNfUE9XRVJfVgkJT01BUDM0WFhfU0RSQ19SRUdBRERSKFNEUkNfUE9XRVIpCiAjZGVmaW5lIFNEUkNfU1lTQ09ORklHX1AJKE9NQVAzNDNYX1NEUkNfQkFTRSArIFNEUkNfU1lTQ09ORklHKQogI2RlZmluZSBTRFJDX01SXzBfUAkJKE9NQVAzNDNYX1NEUkNfQkFTRSArIFNEUkNfTVJfMCkKQEAgLTU5LDQ4ICs2NCwzOCBAQAogI2RlZmluZSBTRFJDX0RMTEFfU1RBVFVTX1YJT01BUDM0WFhfU0RSQ19SRUdBRERSKFNEUkNfRExMQV9TVEFUVVMpCiAjZGVmaW5lIFNEUkNfRExMQV9DVFJMX1YJT01BUDM0WFhfU0RSQ19SRUdBRERSKFNEUkNfRExMQV9DVFJMKQogCi0gICAgICAgIC50ZXh0Ci0vKiBGdW5jdGlvbiB0byBhY3F1aXJlIHRoZSBzZW1hcGhvcmUgaW4gc2NyYXRjaHBhZCAqLwotRU5UUlkobG9ja19zY3JhdGNocGFkX3NlbSkKLQlzdG1mZAlzcCEsIHtscn0JQCBzYXZlIHJlZ2lzdGVycyBvbiBzdGFjawotd2FpdF9zZW06Ci0JbW92CXIwLCMxCi0JbGRyCXIxLCBzZHJjX3NjcmF0Y2hwYWRfc2VtCi13YWl0X2xvb3A6Ci0JbGRyCXIyLCBbcjFdCUAgbG9hZCB0aGUgbG9jayB2YWx1ZQotCWNtcAlyMiwgcjAJCUAgaXMgdGhlIGxvY2sgZnJlZSA/Ci0JYmVxCXdhaXRfbG9vcAlAIG5vdCBmcmVlLi4uCi0Jc3dwCXIyLCByMCwgW3IxXQlAIHNlbWFwaG9yZSBmcmVlIHNvIGxvY2sgaXQgYW5kIHByb2NlZWQKLQljbXAJcjIsIHIwCQlAIGRpZCB3ZSBzdWNjZWVkID8KLQliZXEJd2FpdF9zZW0JQCBubyAtIHRyeSBhZ2FpbgotCWxkbWZkCXNwISwge3BjfQlAIHJlc3RvcmUgcmVncyBhbmQgcmV0dXJuCi1zZHJjX3NjcmF0Y2hwYWRfc2VtOgotICAgICAgICAud29yZCBTRFJDX1NDUkFUQ0hQQURfU0VNX1YKLUVOVFJZKGxvY2tfc2NyYXRjaHBhZF9zZW1fc3opCi0gICAgICAgIC53b3JkICAgLiAtIGxvY2tfc2NyYXRjaHBhZF9zZW0KIAotICAgICAgICAudGV4dAotLyogRnVuY3Rpb24gdG8gcmVsZWFzZSB0aGUgc2NyYXRjaHBhZCBzZW1hcGhvcmUgKi8KLUVOVFJZKHVubG9ja19zY3JhdGNocGFkX3NlbSkKLQlzdG1mZAlzcCEsIHtscn0JQCBzYXZlIHJlZ2lzdGVycyBvbiBzdGFjawotCWxkcglyMywgc2RyY19zY3JhdGNocGFkX3NlbQotCW1vdglyMiwjMAotCXN0cglyMixbcjNdCi0JbGRtZmQJc3AhLCB7cGN9CUAgcmVzdG9yZSByZWdzIGFuZCByZXR1cm4KLUVOVFJZKHVubG9ja19zY3JhdGNocGFkX3NlbV9zeikKLSAgICAgICAgLndvcmQgICAuIC0gdW5sb2NrX3NjcmF0Y2hwYWRfc2VtCisvKgorICogQVBJIGZ1bmN0aW9ucworICovCisKKy8qCisgKiBUaGUgImdldF8qcmVzdG9yZV9wb2ludGVyIiBmdW5jdGlvbnMgYXJlIHVzZWQgdG8gcHJvdmlkZSBhCisgKiBwaHlzaWNhbCByZXN0b3JlIGFkZHJlc3Mgd2hlcmUgdGhlIFJPTSBjb2RlIGp1bXBzIHdoaWxlIHdha2luZworICogdXAgZnJvbSBNUFUgT0ZGL09TV1Igc3RhdGUuCisgKiBUaGUgcmVzdG9yZSBwb2ludGVyIGlzIHN0b3JlZCBpbnRvIHRoZSBzY3JhdGNocGFkLgorICovCiAKIAkudGV4dAogLyogRnVuY3Rpb24gY2FsbCB0byBnZXQgdGhlIHJlc3RvcmUgcG9pbnRlciBmb3IgcmVzdW1lIGZyb20gT0ZGICovCiBFTlRSWShnZXRfcmVzdG9yZV9wb2ludGVyKQotICAgICAgICBzdG1mZCAgIHNwISwge2xyfSAgICAgQCBzYXZlIHJlZ2lzdGVycyBvbiBzdGFjaworCXN0bWZkCXNwISwge2xyfQlAIHNhdmUgcmVnaXN0ZXJzIG9uIHN0YWNrCiAJYWRyCXIwLCByZXN0b3JlCi0gICAgICAgIGxkbWZkICAgc3AhLCB7cGN9ICAgICBAIHJlc3RvcmUgcmVncyBhbmQgcmV0dXJuCisJbGRtZmQJc3AhLCB7cGN9CUAgcmVzdG9yZSByZWdzIGFuZCByZXR1cm4KIEVOVFJZKGdldF9yZXN0b3JlX3BvaW50ZXJfc3opCi0gICAgICAgIC53b3JkICAgLiAtIGdldF9yZXN0b3JlX3BvaW50ZXIKKwkud29yZAkuIC0gZ2V0X3Jlc3RvcmVfcG9pbnRlcgogCiAJLnRleHQKLS8qIEZ1bmN0aW9uIGNhbGwgdG8gZ2V0IHRoZSByZXN0b3JlIHBvaW50ZXIgZm9yIGZvciBFUzMgdG8gcmVzdW1lIGZyb20gT0ZGICovCisvKiBGdW5jdGlvbiBjYWxsIHRvIGdldCB0aGUgcmVzdG9yZSBwb2ludGVyIGZvciAzNjMwIHJlc3VtZSBmcm9tIE9GRiAqLworRU5UUlkoZ2V0X29tYXAzNjMwX3Jlc3RvcmVfcG9pbnRlcikKKwlzdG1mZAlzcCEsIHtscn0JQCBzYXZlIHJlZ2lzdGVycyBvbiBzdGFjaworCWFkcglyMCwgcmVzdG9yZV8zNjMwCisJbGRtZmQJc3AhLCB7cGN9CUAgcmVzdG9yZSByZWdzIGFuZCByZXR1cm4KK0VOVFJZKGdldF9vbWFwMzYzMF9yZXN0b3JlX3BvaW50ZXJfc3opCisJLndvcmQJLiAtIGdldF9vbWFwMzYzMF9yZXN0b3JlX3BvaW50ZXIKKworCS50ZXh0CisvKiBGdW5jdGlvbiBjYWxsIHRvIGdldCB0aGUgcmVzdG9yZSBwb2ludGVyIGZvciBFUzMgdG8gcmVzdW1lIGZyb20gT0ZGICovCiBFTlRSWShnZXRfZXMzX3Jlc3RvcmVfcG9pbnRlcikKIAlzdG1mZAlzcCEsIHtscn0JQCBzYXZlIHJlZ2lzdGVycyBvbiBzdGFjawogCWFkcglyMCwgcmVzdG9yZV9lczMKQEAgLTEwOCw1NCArMTAzLDIzIEBACiBFTlRSWShnZXRfZXMzX3Jlc3RvcmVfcG9pbnRlcl9zeikKIAkud29yZAkuIC0gZ2V0X2VzM19yZXN0b3JlX3BvaW50ZXIKIAotRU5UUlkoZXMzX3NkcmNfZml4KQotCWxkcglyNCwgc2RyY19zeXNjZmcJCUAgZ2V0IGNvbmZpZyBhZGRyCi0JbGRyCXI1LCBbcjRdCQlAIGdldCB2YWx1ZQotCXRzdAlyNSwgIzB4MTAwCQlAIGlzIHBhcnQgYWNjZXNzIGJsb2NrZWQKLQlpdAllcQotCWJpY2VxCXI1LCByNSwgIzB4MTAwCQlAIGNsZWFyIGJpdCBpZiBzZXQKLQlzdHIJcjUsIFtyNF0JCUAgd3JpdGUgYmFjayBjaGFuZ2UKLQlsZHIJcjQsIHNkcmNfbXJfMAkJQCBnZXQgY29uZmlnIGFkZHIKLQlsZHIJcjUsIFtyNF0JCUAgZ2V0IHZhbHVlCi0Jc3RyCXI1LCBbcjRdCQlAIHdyaXRlIGJhY2sgY2hhbmdlCi0JbGRyCXI0LCBzZHJjX2VtcjJfMAkJQCBnZXQgY29uZmlnIGFkZHIKLQlsZHIJcjUsIFtyNF0JCUAgZ2V0IHZhbHVlCi0Jc3RyCXI1LCBbcjRdCQlAIHdyaXRlIGJhY2sgY2hhbmdlCi0JbGRyCXI0LCBzZHJjX21hbnVhbF8wCUAgZ2V0IGNvbmZpZyBhZGRyCi0JbW92CXI1LCAjMHgyCQlAIGF1dG9yZWZyZXNoIGNvbW1hbmQKLQlzdHIJcjUsIFtyNF0JCUAga2ljayBvZmYgcmVmcmVzaGVzCi0JbGRyCXI0LCBzZHJjX21yXzEJCUAgZ2V0IGNvbmZpZyBhZGRyCi0JbGRyCXI1LCBbcjRdCQlAIGdldCB2YWx1ZQotCXN0cglyNSwgW3I0XQkJQCB3cml0ZSBiYWNrIGNoYW5nZQotCWxkcglyNCwgc2RyY19lbXIyXzEJCUAgZ2V0IGNvbmZpZyBhZGRyCi0JbGRyCXI1LCBbcjRdCQlAIGdldCB2YWx1ZQotCXN0cglyNSwgW3I0XQkJQCB3cml0ZSBiYWNrIGNoYW5nZQotCWxkcglyNCwgc2RyY19tYW51YWxfMQlAIGdldCBjb25maWcgYWRkcgotCW1vdglyNSwgIzB4MgkJQCBhdXRvcmVmcmVzaCBjb21tYW5kCi0Jc3RyCXI1LCBbcjRdCQlAIGtpY2sgb2ZmIHJlZnJlc2hlcwotCWJ4CWxyCi1zZHJjX3N5c2NmZzoKLQkud29yZAlTRFJDX1NZU0NPTkZJR19QCi1zZHJjX21yXzA6Ci0JLndvcmQJU0RSQ19NUl8wX1AKLXNkcmNfZW1yMl8wOgotCS53b3JkCVNEUkNfRU1SMl8wX1AKLXNkcmNfbWFudWFsXzA6Ci0JLndvcmQJU0RSQ19NQU5VQUxfMF9QCi1zZHJjX21yXzE6Ci0JLndvcmQJU0RSQ19NUl8xX1AKLXNkcmNfZW1yMl8xOgotCS53b3JkCVNEUkNfRU1SMl8xX1AKLXNkcmNfbWFudWFsXzE6Ci0JLndvcmQJU0RSQ19NQU5VQUxfMV9QCi1FTlRSWShlczNfc2RyY19maXhfc3opCi0JLndvcmQJLiAtIGVzM19zZHJjX2ZpeAorCS50ZXh0CisvKgorICogTDIgY2FjaGUgbmVlZHMgdG8gYmUgdG9nZ2xlZCBmb3Igc3RhYmxlIE9GRiBtb2RlIGZ1bmN0aW9uYWxpdHkgb24gMzYzMC4KKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB1cCBhIGZsYWcgdGhhdCB3aWxsIGFsbG93IGZvciB0aGlzIHRvZ2dsaW5nIHRvIHRha2UKKyAqIHBsYWNlIG9uIDM2MzAuIEhvcGVmdWxseSBzb21lIHZlcnNpb24gaW4gdGhlIGZ1dHVyZSBtYXkgbm90IG5lZWQgdGhpcy4KKyAqLworRU5UUlkoZW5hYmxlX29tYXAzNjMwX3RvZ2dsZV9sMl9vbl9yZXN0b3JlKQorCXN0bWZkCXNwISwge2xyfQlAIHNhdmUgcmVnaXN0ZXJzIG9uIHN0YWNrCisJLyogU2V0dXAgc28gdGhhdCB3ZSB3aWxsIGRpc2FibGUgYW5kIGVuYWJsZSBsMiAqLworCW1vdglyMSwgIzB4MQorCXN0cglyMSwgbDJkaXNfMzYzMAorCWxkbWZkCXNwISwge3BjfQlAIHJlc3RvcmUgcmVncyBhbmQgcmV0dXJuCiAKKwkudGV4dAogLyogRnVuY3Rpb24gdG8gY2FsbCByb20gY29kZSB0byBzYXZlIHNlY3VyZSByYW0gY29udGV4dCAqLwogRU5UUlkoc2F2ZV9zZWN1cmVfcmFtX2NvbnRleHQpCiAJc3RtZmQJc3AhLCB7cjEtcjEyLCBscn0JQCBzYXZlIHJlZ2lzdGVycyBvbiBzdGFjawotc2F2ZV9zZWN1cmVfcmFtX2RlYnVnOgotCS8qIGIgc2F2ZV9zZWN1cmVfcmFtX2RlYnVnICovCUAgZW5hYmxlIHRvIGRlYnVnIHNhdmUgY29kZQogCWFkcglyMywgYXBpX3BhcmFtcwkJQCByMyBwb2ludHMgdG8gcGFyYW1ldGVycwogCXN0cglyMCwgW3IzLCMweDRdCQlAIHIwIGhhcyBzZHJhbSBhZGRyZXNzCiAJbGRyCXIxMiwgaGlnaF9tYXNrCkBAIC0xODUsMjc4ICsxNDksNTUgQEAKIAkud29yZAkuIC0gc2F2ZV9zZWN1cmVfcmFtX2NvbnRleHQKIAogLyoKKyAqID09PT09PT09PT09PT09PT09PT09PT0KKyAqID09IElkbGUgZW50cnkgcG9pbnQgPT0KKyAqID09PT09PT09PT09PT09PT09PT09PT0KKyAqLworCisvKgogICogRm9yY2VzIE9NQVAgaW50byBpZGxlIHN0YXRlCiAgKgotICogb21hcDM0eHhfc3VzcGVuZCgpIC0gVGhpcyBiaXQgb2YgY29kZSBqdXN0IGV4ZWN1dGVzIHRoZSBXRkkKLSAqIGZvciBub3JtYWwgaWRsZXMuCisgKiBvbWFwMzR4eF9jcHVfc3VzcGVuZCgpIC0gVGhpcyBiaXQgb2YgY29kZSBzYXZlcyB0aGUgQ1BVIGNvbnRleHQgaWYgbmVlZGVkCisgKiBhbmQgZXhlY3V0ZXMgdGhlIFdGSSBpbnN0cnVjdGlvbi4gQ2FsbGluZyBXRkkgZWZmZWN0aXZlbHkgY2hhbmdlcyB0aGUKKyAqIHBvd2VyIGRvbWFpbnMgc3RhdGVzIHRvIHRoZSBkZXNpcmVkIHRhcmdldCBwb3dlciBzdGF0ZXMuCiAgKgotICogTm90ZTogVGhpcyBjb2RlIGdldCdzIGNvcGllZCB0byBpbnRlcm5hbCBTUkFNIGF0IGJvb3QuIFdoZW4gdGhlIE9NQVAKLSAqCSB3YWtlcyB1cCBpdCBjb250aW51ZXMgZXhlY3V0aW9uIGF0IHRoZSBwb2ludCBpdCB3ZW50IHRvIHNsZWVwLgorICoKKyAqIE5vdGVzOgorICogLSB0aGlzIGNvZGUgZ2V0cyBjb3BpZWQgdG8gaW50ZXJuYWwgU1JBTSBhdCBib290IGFuZCBhZnRlciB3YWtlLXVwCisgKiAgIGZyb20gT0ZGIG1vZGUuIFRoZSBleGVjdXRpb24gcG9pbnRlciBpbiBTUkFNIGlzIF9vbWFwX3NyYW1faWRsZS4KKyAqIC0gd2hlbiB0aGUgT01BUCB3YWtlcyB1cCBpdCBjb250aW51ZXMgYXQgZGlmZmVyZW50IGV4ZWN1dGlvbiBwb2ludHMKKyAqICAgZGVwZW5kaW5nIG9uIHRoZSBsb3cgcG93ZXIgbW9kZSAobm9uLU9GRiB2cyBPRkYgbW9kZXMpLAorICogICBjZi4gJ1Jlc3VtZSBwYXRoIGZvciB4eHggbW9kZScgY29tbWVudHMuCiAgKi8KIEVOVFJZKG9tYXAzNHh4X2NwdV9zdXNwZW5kKQotCXN0bWZkCXNwISwge3IwLXIxMiwgbHJ9CQlAIHNhdmUgcmVnaXN0ZXJzIG9uIHN0YWNrCi1sb29wOgotCS8qYglsb29wKi8JQEVuYWJsZSB0byBkZWJ1ZyBieSBzdGVwcGluZyB0aHJvdWdoIGNvZGUKLQkvKiByMCBjb250YWlucyByZXN0b3JlIHBvaW50ZXIgaW4gc2RyYW0gKi8KLQkvKiByMSBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBzYXZpbmcgY29udGV4dCAqLwotCWxkciAgICAgcjQsIHNkcmNfcG93ZXIgICAgICAgICAgQCByZWFkIHRoZSBTRFJDX1BPV0VSIHJlZ2lzdGVyCi0JbGRyICAgICByNSwgW3I0XSAgICAgICAgICAgICAgICBAIHJlYWQgdGhlIGNvbnRlbnRzIG9mIFNEUkNfUE9XRVIKLQlvcnIgICAgIHI1LCByNSwgIzB4NDAgICAgICAgICAgIEAgZW5hYmxlIHNlbGYgcmVmcmVzaCBvbiBpZGxlIHJlcQotCXN0ciAgICAgcjUsIFtyNF0gICAgICAgICAgICAgICAgQCB3cml0ZSBiYWNrIHRvIFNEUkNfUE9XRVIgcmVnaXN0ZXIKKwlzdG1mZAlzcCEsIHtyMC1yMTIsIGxyfQlAIHNhdmUgcmVnaXN0ZXJzIG9uIHN0YWNrCiAKKwkvKgorCSAqIHIwIGNvbnRhaW5zIHJlc3RvcmUgcG9pbnRlciBpbiBzZHJhbQorCSAqIHIxIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHNhdmluZyBjb250ZXh0OgorCSAqICAgMCAtIE5vIGNvbnRleHQgbG9zdAorCSAqICAgMSAtIE9ubHkgTDEgYW5kIGxvZ2ljIGxvc3QKKwkgKiAgIDIgLSBPbmx5IEwyIGxvc3QKKwkgKiAgIDMgLSBCb3RoIEwxIGFuZCBMMiBsb3N0CisJICovCisKKwkvKiBEaXJlY3RseSBqdW1wIHRvIFdGSSBpcyB0aGUgY29udGV4dCBzYXZlIGlzIG5vdCByZXF1aXJlZCAqLwogCWNtcAlyMSwgIzB4MAotCS8qIElmIGNvbnRleHQgc2F2ZSBpcyByZXF1aXJlZCwgZG8gdGhhdCBhbmQgZXhlY3V0ZSB3ZmkgKi8KLQlibmUJc2F2ZV9jb250ZXh0X3dmaQotCS8qIERhdGEgbWVtb3J5IGJhcnJpZXIgYW5kIERhdGEgc3luYyBiYXJyaWVyICovCi0JbW92CXIxLCAjMAotCW1jcglwMTUsIDAsIHIxLCBjNywgYzEwLCA0Ci0JbWNyCXAxNSwgMCwgcjEsIGM3LCBjMTAsIDUKKwliZXEJb21hcDNfZG9fd2ZpCiAKLQl3ZmkJCQkJQCB3YWl0IGZvciBpbnRlcnJ1cHQKLQotCW5vcAotCW5vcAotCW5vcAotCW5vcAotCW5vcAotCW5vcAotCW5vcAotCW5vcAotCW5vcAotCW5vcAotCWJsIHdhaXRfc2RyY19vawotCi0JbGRtZmQJc3AhLCB7cjAtcjEyLCBwY30JCUAgcmVzdG9yZSByZWdzIGFuZCByZXR1cm4KLXJlc3RvcmVfZXMzOgotCS8qYiByZXN0b3JlX2VzMyovCQlAIEVuYWJsZSB0byBkZWJ1ZyByZXN0b3JlIGNvZGUKLQlsZHIJcjUsIHBtX3ByZXB3c3RzdF9jb3JlX3AKLQlsZHIJcjQsIFtyNV0KLQlhbmQJcjQsIHI0LCAjMHgzCi0JY21wCXI0LCAjMHgwCUAgQ2hlY2sgaWYgcHJldmlvdXMgcG93ZXIgc3RhdGUgb2YgQ09SRSBpcyBPRkYKLQlibmUJcmVzdG9yZQotCWFkcglyMCwgZXMzX3NkcmNfZml4Ci0JbGRyCXIxLCBzcmFtX2Jhc2UKLQlsZHIJcjIsIGVzM19zZHJjX2ZpeF9zegotCW1vdglyMiwgcjIsIHJvciAjMgotY29weV90b19zcmFtOgotCWxkbWlhCXIwISwge3IzfQlAIHZhbCA9ICpzcmMKLQlzdG1pYQlyMSEsIHtyM30JQCAqZHN0ID0gdmFsCi0Jc3VicwlyMiwgcjIsICMweDEJQCBudW1fd29yZHMtLQotCWJuZQljb3B5X3RvX3NyYW0KLQlsZHIJcjEsIHNyYW1fYmFzZQotCWJseAlyMQotcmVzdG9yZToKLQkvKiBiIHJlc3RvcmUqLyAgQCBFbmFibGUgdG8gZGVidWcgcmVzdG9yZSBjb2RlCi0gICAgICAgIC8qIENoZWNrIHdoYXQgd2FzIHRoZSByZWFzb24gZm9yIG1wdSByZXNldCBhbmQgc3RvcmUgdGhlIHJlYXNvbiBpbiByOSovCi0gICAgICAgIC8qIDEgLSBPbmx5IEwxIGFuZCBsb2dpYyBsb3N0ICovCi0gICAgICAgIC8qIDIgLSBPbmx5IEwyIGxvc3QgLSBJbiB0aGlzIGNhc2UsIHdlIHdvbnQgYmUgaGVyZSAqLwotICAgICAgICAvKiAzIC0gQm90aCBMMSBhbmQgTDIgbG9zdCAqLwotCWxkciAgICAgcjEsIHBtX3B3c3RjdHJsX21wdQotCWxkcglyMiwgW3IxXQotCWFuZCAgICAgcjIsIHIyLCAjMHgzCi0JY21wICAgICByMiwgIzB4MAlAIENoZWNrIGlmIHRhcmdldCBwb3dlciBzdGF0ZSB3YXMgT0ZGIG9yIFJFVAotICAgICAgICBtb3ZlcSAgIHI5LCAjMHgzICAgICAgICBAIE1QVSBPRkYgPT4gTDEgYW5kIEwyIGxvc3QKLQltb3ZuZQlyOSwgIzB4MQlAIE9ubHkgTDEgYW5kIEwyIGxvc3QgPT4gYXZvaWQgTDIgaW52YWxpZGF0aW9uCi0JYm5lCWxvZ2ljX2wxX3Jlc3RvcmUKLQlsZHIJcjAsIGNvbnRyb2xfc3RhdAotCWxkcglyMSwgW3IwXQotCWFuZAlyMSwgIzB4NzAwCi0JY21wCXIxLCAjMHgzMDAKLQliZXEJbDJfaW52X2dwCi0JbW92CXIwLCAjNDAJCUAgc2V0IHNlcnZpY2UgSUQgZm9yIFBQQQotCW1vdglyMTIsIHIwCQlAIGNvcHkgc2VjdXJlIFNlcnZpY2UgSUQgaW4gcjEyCi0JbW92CXIxLCAjMAkJQCBzZXQgdGFzayBpZCBmb3IgUk9NIGNvZGUgaW4gcjEKLQltb3YJcjIsICM0CQlAIHNldCBzb21lIGZsYWdzIGluIHIyLCByNgotCW1vdglyNiwgIzB4ZmYKLQlhZHIJcjMsIGwyX2ludl9hcGlfcGFyYW1zCUAgcjMgcG9pbnRzIHRvIGR1bW15IHBhcmFtZXRlcnMKLQltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAlAIGRhdGEgd3JpdGUgYmFycmllcgotCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA1CUAgZGF0YSBtZW1vcnkgYmFycmllcgotCS53b3JkCTB4RTE2MDAwNzEJCUAgY2FsbCBTTUkgbW9uaXRvciAoc21pICMxKQotCS8qIFdyaXRlIHRvIEF1eCBjb250cm9sIHJlZ2lzdGVyIHRvIHNldCBzb21lIGJpdHMgKi8KLQltb3YJcjAsICM0MgkJQCBzZXQgc2VydmljZSBJRCBmb3IgUFBBCi0JbW92CXIxMiwgcjAJCUAgY29weSBzZWN1cmUgU2VydmljZSBJRCBpbiByMTIKLQltb3YJcjEsICMwCQlAIHNldCB0YXNrIGlkIGZvciBST00gY29kZSBpbiByMQotCW1vdglyMiwgIzQJCUAgc2V0IHNvbWUgZmxhZ3MgaW4gcjIsIHI2Ci0JbW92CXI2LCAjMHhmZgotCWxkcglyNCwgc2NyYXRjaHBhZF9iYXNlCi0JbGRyCXIzLCBbcjQsICMweEJDXQlAIHIzIHBvaW50cyB0byBwYXJhbWV0ZXJzCi0JbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJQCBkYXRhIHdyaXRlIGJhcnJpZXIKLQltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNQlAIGRhdGEgbWVtb3J5IGJhcnJpZXIKLQkud29yZAkweEUxNjAwMDcxCQlAIGNhbGwgU01JIG1vbml0b3IgKHNtaSAjMSkKLQotI2lmZGVmIENPTkZJR19PTUFQM19MMl9BVVhfU0VDVVJFX1NBVkVfUkVTVE9SRQotCS8qIFJlc3RvcmUgTDIgYXV4IGNvbnRyb2wgcmVnaXN0ZXIgKi8KLQlAIHNldCBzZXJ2aWNlIElEIGZvciBQUEEKLQltb3YJcjAsICNDT05GSUdfT01BUDNfTDJfQVVYX1NFQ1VSRV9TRVJWSUNFX1NFVF9JRAotCW1vdglyMTIsIHIwCQlAIGNvcHkgc2VydmljZSBJRCBpbiByMTIKLQltb3YJcjEsICMwCQlAIHNldCB0YXNrIElEIGZvciBST00gY29kZSBpbiByMQotCW1vdglyMiwgIzQJCUAgc2V0IHNvbWUgZmxhZ3MgaW4gcjIsIHI2Ci0JbW92CXI2LCAjMHhmZgotCWxkcglyNCwgc2NyYXRjaHBhZF9iYXNlCi0JbGRyCXIzLCBbcjQsICMweEJDXQotCWFkZHMJcjMsIHIzLCAjOAlAIHIzIHBvaW50cyB0byBwYXJhbWV0ZXJzCi0JbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJQCBkYXRhIHdyaXRlIGJhcnJpZXIKLQltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNQlAIGRhdGEgbWVtb3J5IGJhcnJpZXIKLQkud29yZAkweEUxNjAwMDcxCQlAIGNhbGwgU01JIG1vbml0b3IgKHNtaSAjMSkKLSNlbmRpZgotCWIJbG9naWNfbDFfcmVzdG9yZQotbDJfaW52X2FwaV9wYXJhbXM6Ci0JLndvcmQgICAweDEsIDB4MDAKLWwyX2ludl9ncDoKLQkvKiBFeGVjdXRlIHNtaSB0byBpbnZhbGlkYXRlIEwyIGNhY2hlICovCi0JbW92IHIxMiwgIzB4MSAgICAgICAgICAgICAgICAgICAgICAgICBAIHNldCB1cCB0byBpbnZhbGlkZSBMMgotc21pOiAgICAud29yZCAweEUxNjAwMDcwCQlAIENhbGwgU01JIG1vbml0b3IgKHNtaWVxKQotCS8qIFdyaXRlIHRvIEF1eCBjb250cm9sIHJlZ2lzdGVyIHRvIHNldCBzb21lIGJpdHMgKi8KLQlsZHIJcjQsIHNjcmF0Y2hwYWRfYmFzZQotCWxkcglyMywgW3I0LCMweEJDXQotCWxkcglyMCwgW3IzLCM0XQotCW1vdglyMTIsICMweDMKLQkud29yZCAweEUxNjAwMDcwCUAgQ2FsbCBTTUkgbW9uaXRvciAoc21pZXEpCi0JbGRyCXI0LCBzY3JhdGNocGFkX2Jhc2UKLQlsZHIJcjMsIFtyNCwjMHhCQ10KLQlsZHIJcjAsIFtyMywjMTJdCi0JbW92CXIxMiwgIzB4MgotCS53b3JkIDB4RTE2MDAwNzAJQCBDYWxsIFNNSSBtb25pdG9yIChzbWllcSkKLWxvZ2ljX2wxX3Jlc3RvcmU6Ci0JbW92CXIxLCAjMAotCS8qIEludmFsaWRhdGUgYWxsIGluc3RydWN0aW9uIGNhY2hlcyB0byBQb1UKLQkgKiBhbmQgZmx1c2ggYnJhbmNoIHRhcmdldCBjYWNoZSAqLwotCW1jcglwMTUsIDAsIHIxLCBjNywgYzUsIDAKLQotCWxkcglyNCwgc2NyYXRjaHBhZF9iYXNlCi0JbGRyCXIzLCBbcjQsIzB4QkNdCi0JYWRkcwlyMywgcjMsICMxNgotCWxkbWlhCXIzISwge3I0LXI2fQotCW1vdglzcCwgcjQKLQltc3IJc3Bzcl9jeHNmLCByNQotCW1vdglsciwgcjYKLQotCWxkbWlhCXIzISwge3I0LXI5fQotCS8qIENvcHJvY2Vzc29yIGFjY2VzcyBDb250cm9sIFJlZ2lzdGVyICovCi0JbWNyIHAxNSwgMCwgcjQsIGMxLCBjMCwgMgotCi0JLyogVFRCUjAgKi8KLQlNQ1IgcDE1LCAwLCByNSwgYzIsIGMwLCAwCi0JLyogVFRCUjEgKi8KLQlNQ1IgcDE1LCAwLCByNiwgYzIsIGMwLCAxCi0JLyogVHJhbnNsYXRpb24gdGFibGUgYmFzZSBjb250cm9sIHJlZ2lzdGVyICovCi0JTUNSIHAxNSwgMCwgcjcsIGMyLCBjMCwgMgotCS8qZG9tYWluIGFjY2VzcyBDb250cm9sIFJlZ2lzdGVyICovCi0JTUNSIHAxNSwgMCwgcjgsIGMzLCBjMCwgMAotCS8qIGRhdGEgZmF1bHQgc3RhdHVzIFJlZ2lzdGVyICovCi0JTUNSIHAxNSwgMCwgcjksIGM1LCBjMCwgMAotCi0JbGRtaWEgIHIzISx7cjQtcjh9Ci0JLyogaW5zdHJ1Y3Rpb24gZmF1bHQgc3RhdHVzIFJlZ2lzdGVyICovCi0JTUNSIHAxNSwgMCwgcjQsIGM1LCBjMCwgMQotCS8qRGF0YSBBdXhpbGlhcnkgRmF1bHQgU3RhdHVzIFJlZ2lzdGVyICovCi0JTUNSIHAxNSwgMCwgcjUsIGM1LCBjMSwgMAotCS8qSW5zdHJ1Y3Rpb24gQXV4aWxpYXJ5IEZhdWx0IFN0YXR1cyBSZWdpc3RlciovCi0JTUNSIHAxNSwgMCwgcjYsIGM1LCBjMSwgMQotCS8qRGF0YSBGYXVsdCBBZGRyZXNzIFJlZ2lzdGVyICovCi0JTUNSIHAxNSwgMCwgcjcsIGM2LCBjMCwgMAotCS8qSW5zdHJ1Y3Rpb24gRmF1bHQgQWRkcmVzcyBSZWdpc3RlciovCi0JTUNSIHAxNSwgMCwgcjgsIGM2LCBjMCwgMgotCWxkbWlhICByMyEse3I0LXI3fQotCi0JLyogdXNlciByL3cgdGhyZWFkIGFuZCBwcm9jZXNzIElEICovCi0JTUNSIHAxNSwgMCwgcjQsIGMxMywgYzAsIDIKLQkvKiB1c2VyIHJvIHRocmVhZCBhbmQgcHJvY2VzcyBJRCAqLwotCU1DUiBwMTUsIDAsIHI1LCBjMTMsIGMwLCAzCi0JLypQcml2aWxlZ2VkIG9ubHkgdGhyZWFkIGFuZCBwcm9jZXNzIElEICovCi0JTUNSIHAxNSwgMCwgcjYsIGMxMywgYzAsIDQKLQkvKiBjYWNoZSBzaXplIHNlbGVjdGlvbiAqLwotCU1DUiBwMTUsIDIsIHI3LCBjMCwgYzAsIDAKLQlsZG1pYSAgcjMhLHtyNC1yOH0KLQkvKiBEYXRhIFRMQiBsb2NrZG93biByZWdpc3RlcnMgKi8KLQlNQ1IgcDE1LCAwLCByNCwgYzEwLCBjMCwgMAotCS8qIEluc3RydWN0aW9uIFRMQiBsb2NrZG93biByZWdpc3RlcnMgKi8KLQlNQ1IgcDE1LCAwLCByNSwgYzEwLCBjMCwgMQotCS8qIFNlY3VyZSBvciBOb25zZWN1cmUgVmVjdG9yIEJhc2UgQWRkcmVzcyAqLwotCU1DUiBwMTUsIDAsIHI2LCBjMTIsIGMwLCAwCi0JLyogRkNTRSBQSUQgKi8KLQlNQ1IgcDE1LCAwLCByNywgYzEzLCBjMCwgMAotCS8qIENvbnRleHQgUElEICovCi0JTUNSIHAxNSwgMCwgcjgsIGMxMywgYzAsIDEKLQotCWxkbWlhICByMyEse3I0LXI1fQotCS8qIHByaW1hcnkgbWVtb3J5IHJlbWFwIHJlZ2lzdGVyICovCi0JTUNSIHAxNSwgMCwgcjQsIGMxMCwgYzIsIDAKLQkvKm5vcm1hbCBtZW1vcnkgcmVtYXAgcmVnaXN0ZXIgKi8KLQlNQ1IgcDE1LCAwLCByNSwgYzEwLCBjMiwgMQotCi0JLyogUmVzdG9yZSBjcHNyICovCi0JbGRtaWEJcjMhLHtyNH0JLypsb2FkIENQU1IgZnJvbSBTRFJBTSovCi0JbXNyCWNwc3IsIHI0CS8qc3RvcmUgY3BzciAqLwotCi0JLyogRW5hYmxpbmcgTU1VIGhlcmUgKi8KLQltcmMJcDE1LCAwLCByNywgYzIsIGMwLCAyIC8qIFJlYWQgVFRCUkNvbnRyb2wgKi8KLQkvKiBFeHRyYWN0IE4gKDA6MikgYml0cyBhbmQgZGVjaWRlIHdoZXRoZXIgdG8gdXNlIFRUQlIwIG9yIFRUQlIxKi8KLQlhbmQJcjcsICMweDcKLQljbXAJcjcsICMweDAKLQliZXEJdXNldHRicjAKLXR0YnJfZXJyb3I6Ci0JLyogTW9yZSB3b3JrIG5lZWRzIHRvIGJlIGRvbmUgdG8gc3VwcG9ydCBOWzA6Ml0gdmFsdWUgb3RoZXIgdGhhbiAwCi0JKiBTbyBsb29waW5nIGhlcmUgc28gdGhhdCB0aGUgZXJyb3IgY2FuIGJlIGRldGVjdGVkCi0JKi8KLQliCXR0YnJfZXJyb3IKLXVzZXR0YnIwOgotCW1yYwlwMTUsIDAsIHIyLCBjMiwgYzAsIDAKLQlsZHIJcjUsIHR0YnJiaXRfbWFzawotCWFuZAlyMiwgcjUKLQltb3YJcjQsIHBjCi0JbGRyCXI1LCB0YWJsZV9pbmRleF9tYXNrCi0JYW5kCXI0LCByNSAvKiByNCA9IDMxIHRvIDIwIGJpdHMgb2YgcGMgKi8KLQkvKiBFeHRyYWN0IHRoZSB2YWx1ZSB0byBiZSB3cml0dGVuIHRvIHRhYmxlIGVudHJ5ICovCi0JbGRyCXIxLCB0YWJsZV9lbnRyeQotCWFkZAlyMSwgcjEsIHI0IC8qIHIxIGhhcyB2YWx1ZSB0byBiZSB3cml0dGVuIHRvIHRhYmxlIGVudHJ5Ki8KLQkvKiBHZXR0aW5nIHRoZSBhZGRyZXNzIG9mIHRhYmxlIGVudHJ5IHRvIG1vZGlmeSAqLwotCWxzcglyNCwgIzE4Ci0JYWRkCXIyLCByNCAvKiByMiBoYXMgdGhlIGxvY2F0aW9uIHdoaWNoIG5lZWRzIHRvIGJlIG1vZGlmaWVkICovCi0JLyogU3RvcmluZyBwcmV2aW91cyBlbnRyeSBvZiBsb2NhdGlvbiBiZWluZyBtb2RpZmllZCAqLwotCWxkcglyNSwgc2NyYXRjaHBhZF9iYXNlCi0JbGRyCXI0LCBbcjJdCi0Jc3RyCXI0LCBbcjUsICMweEMwXQotCS8qIE1vZGlmeSB0aGUgdGFibGUgZW50cnkgKi8KLQlzdHIJcjEsIFtyMl0KLQkvKiBTdG9yaW5nIGFkZHJlc3Mgb2YgZW50cnkgYmVpbmcgbW9kaWZpZWQKLQkgKiAtIHdpbGwgYmUgcmVzdG9yZWQgYWZ0ZXIgZW5hYmxpbmcgTU1VICovCi0JbGRyCXI1LCBzY3JhdGNocGFkX2Jhc2UKLQlzdHIJcjIsIFtyNSwgIzB4QzRdCi0KLQltb3YJcjAsICMwCi0JbWNyCXAxNSwgMCwgcjAsIGM3LCBjNSwgNAlAIEZsdXNoIHByZWZldGNoIGJ1ZmZlcgotCW1jcglwMTUsIDAsIHIwLCBjNywgYzUsIDYJQCBJbnZhbGlkYXRlIGJyYW5jaCBwcmVkaWN0b3IgYXJyYXkKLQltY3IJcDE1LCAwLCByMCwgYzgsIGM1LCAwCUAgSW52YWxpZGF0ZSBpbnN0cnVjdGlvbiBUTEIKLQltY3IJcDE1LCAwLCByMCwgYzgsIGM2LCAwCUAgSW52YWxpZGF0ZSBkYXRhIFRMQgotCS8qIFJlc3RvcmUgY29udHJvbCByZWdpc3RlciAgYnV0IGRvbnQgZW5hYmxlIGNhY2hlcyBoZXJlKi8KLQkvKiBDYWNoZXMgd2lsbCBiZSBlbmFibGVkIGFmdGVyIHJlc3RvcmluZyBNTVUgdGFibGUgZW50cnkgKi8KLQlsZG1pYQlyMyEsIHtyNH0KLQkvKiBTdG9yZSBwcmV2aW91cyB2YWx1ZSBvZiBjb250cm9sIHJlZ2lzdGVyIGluIHNjcmF0Y2hwYWQgKi8KLQlzdHIJcjQsIFtyNSwgIzB4QzhdCi0JbGRyCXIyLCBjYWNoZV9wcmVkX2Rpc2FibGVfbWFzawotCWFuZAlyNCwgcjIKLQltY3IJcDE1LCAwLCByNCwgYzEsIGMwLCAwCi0KLQlsZG1mZAlzcCEsIHtyMC1yMTIsIHBjfQkJQCByZXN0b3JlIHJlZ3MgYW5kIHJldHVybgorCS8qIE90aGVyd2lzZSBmYWxsIHRocm91Z2ggdG8gdGhlIHNhdmUgY29udGV4dCBjb2RlICovCiBzYXZlX2NvbnRleHRfd2ZpOgotCS8qYglzYXZlX2NvbnRleHRfd2ZpKi8JQCBlbmFibGUgdG8gZGVidWcgc2F2ZSBjb2RlCi0JbW92CXI4LCByMCAvKiBTdG9yZSBTRFJBTSBhZGRyZXNzIGluIHI4ICovCisJbW92CXI4LCByMAkJCUAgU3RvcmUgU0RSQU0gYWRkcmVzcyBpbiByOAogCW1yYwlwMTUsIDAsIHI1LCBjMSwgYzAsIDEJQCBSZWFkIEF1eGlsaWFyeSBDb250cm9sIFJlZ2lzdGVyCiAJbW92CXI0LCAjMHgxCQlAIE51bWJlciBvZiBwYXJhbWV0ZXJzIGZvciByZXN0b3JlIGNhbGwKIAlzdG1pYQlyOCEsIHtyNC1yNX0JCUAgUHVzaCBwYXJhbWV0ZXJzIGZvciByZXN0b3JlIGNhbGwKIAltcmMJcDE1LCAxLCByNSwgYzksIGMwLCAyCUAgUmVhZCBMMiBBVVggY3RybCByZWdpc3RlcgogCXN0bWlhCXI4ISwge3I0LXI1fQkJQCBQdXNoIHBhcmFtZXRlcnMgZm9yIHJlc3RvcmUgY2FsbAotICAgICAgICAvKiBDaGVjayB3aGF0IHRoYXQgdGFyZ2V0IHNsZWVwIHN0YXRlIGlzOnN0b3JlZCBpbiByMSovCi0gICAgICAgIC8qIDEgLSBPbmx5IEwxIGFuZCBsb2dpYyBsb3N0ICovCi0gICAgICAgIC8qIDIgLSBPbmx5IEwyIGxvc3QgKi8KLSAgICAgICAgLyogMyAtIEJvdGggTDEgYW5kIEwyIGxvc3QgKi8KLQljbXAJcjEsICMweDIgLyogT25seSBMMiBsb3N0ICovCi0JYmVxCWNsZWFuX2wyCi0JY21wCXIxLCAjMHgxIC8qIEwyIHJldGFpbmVkICovCi0JLyogcjkgc3RvcmVzIHdoZXRoZXIgdG8gY2xlYW4gTDIgb3Igbm90Ki8KLQltb3ZlcQlyOSwgIzB4MCAvKiBEb250IENsZWFuIEwyICovCi0JbW92bmUJcjksICMweDEgLyogQ2xlYW4gTDIgKi8KKworICAgICAgICAvKiBDaGVjayB3aGF0IHRoYXQgdGFyZ2V0IHNsZWVwIHN0YXRlIGlzIGZyb20gcjEgKi8KKwljbXAJcjEsICMweDIJCUAgT25seSBMMiBsb3N0LCBubyBuZWVkIHRvIHNhdmUgY29udGV4dAorCWJlcQljbGVhbl9jYWNoZXMKKwogbDFfbG9naWNfbG9zdDoKIAkvKiBTdG9yZSBzcCBhbmQgc3BzciB0byBTRFJBTSAqLwogCW1vdglyNCwgc3AKQEAgLTQ3MiwyMSArMjEzLDI3IEBACiAJbXJjCXAxNSwgMCwgcjUsIGMyLCBjMCwgMQogCW1yYwlwMTUsIDAsIHI2LCBjMiwgYzAsIDIKIAlzdG1pYQlyOCEsIHtyNC1yNn0KLQkvKiBEb21haW4gYWNjZXNzIGNvbnRyb2wgcmVnaXN0ZXIsIGRhdGEgZmF1bHQgc3RhdHVzIHJlZ2lzdGVyLAotCWFuZCBpbnN0cnVjdGlvbiBmYXVsdCBzdGF0dXMgcmVnaXN0ZXIgKi8KKwkvKgorCSAqIERvbWFpbiBhY2Nlc3MgY29udHJvbCByZWdpc3RlciwgZGF0YSBmYXVsdCBzdGF0dXMgcmVnaXN0ZXIsCisJICogYW5kIGluc3RydWN0aW9uIGZhdWx0IHN0YXR1cyByZWdpc3RlcgorCSAqLwogCW1yYwlwMTUsIDAsIHI0LCBjMywgYzAsIDAKIAltcmMJcDE1LCAwLCByNSwgYzUsIGMwLCAwCiAJbXJjCXAxNSwgMCwgcjYsIGM1LCBjMCwgMQogCXN0bWlhCXI4ISwge3I0LXI2fQotCS8qIERhdGEgYXV4IGZhdWx0IHN0YXR1cyByZWdpc3RlciwgaW5zdHJ1Y3Rpb24gYXV4IGZhdWx0IHN0YXR1cywKLQlkYXRhdCBmYXVsdCBhZGRyZXNzIHJlZ2lzdGVyIGFuZCBpbnN0cnVjdGlvbiBmYXVsdCBhZGRyZXNzIHJlZ2lzdGVyKi8KKwkvKgorCSAqIERhdGEgYXV4IGZhdWx0IHN0YXR1cyByZWdpc3RlciwgaW5zdHJ1Y3Rpb24gYXV4IGZhdWx0IHN0YXR1cywKKwkgKiBkYXRhIGZhdWx0IGFkZHJlc3MgcmVnaXN0ZXIgYW5kIGluc3RydWN0aW9uIGZhdWx0IGFkZHJlc3MgcmVnaXN0ZXIKKwkgKi8KIAltcmMJcDE1LCAwLCByNCwgYzUsIGMxLCAwCiAJbXJjCXAxNSwgMCwgcjUsIGM1LCBjMSwgMQogCW1yYwlwMTUsIDAsIHI2LCBjNiwgYzAsIDAKIAltcmMJcDE1LCAwLCByNywgYzYsIGMwLCAyCiAJc3RtaWEJcjghLCB7cjQtcjd9Ci0JLyogdXNlciByL3cgdGhyZWFkIGFuZCBwcm9jZXNzIElELCB1c2VyIHIvbyB0aHJlYWQgYW5kIHByb2Nlc3MgSUQsCi0JcHJpdiBvbmx5IHRocmVhZCBhbmQgcHJvY2VzcyBJRCwgY2FjaGUgc2l6ZSBzZWxlY3Rpb24gKi8KKwkvKgorCSAqIHVzZXIgci93IHRocmVhZCBhbmQgcHJvY2VzcyBJRCwgdXNlciByL28gdGhyZWFkIGFuZCBwcm9jZXNzIElELAorCSAqIHByaXYgb25seSB0aHJlYWQgYW5kIHByb2Nlc3MgSUQsIGNhY2hlIHNpemUgc2VsZWN0aW9uCisJICovCiAJbXJjCXAxNSwgMCwgcjQsIGMxMywgYzAsIDIKIAltcmMJcDE1LCAwLCByNSwgYzEzLCBjMCwgMwogCW1yYwlwMTUsIDAsIHI2LCBjMTMsIGMwLCA0CkBAIC01MTMsODYgKzI2MCw1MSBAQAogCW1yYwlwMTUsIDAsIHI0LCBjMSwgYzAsIDAKIAkvKiBzYXZlIGNvbnRyb2wgcmVnaXN0ZXIgKi8KIAlzdG1pYQlyOCEsIHtyNH0KLWNsZWFuX2NhY2hlczoKLQkvKiBDbGVhbiBEYXRhIG9yIHVuaWZpZWQgY2FjaGUgdG8gUE9VKi8KLQkvKiBIb3cgdG8gaW52YWxpZGF0ZSBvbmx5IEwxIGNhY2hlPz8/PyAtICNGSVhfTUUjICovCi0JLyogbWNyCXAxNSwgMCwgcjExLCBjNywgYzExLCAxICovCi0JY21wCXI5LCAjMSAvKiBDaGVjayB3aGV0aGVyIEwyIGludmFsIGlzIHJlcXVpcmVkIG9yIG5vdCovCi0JYm5lCXNraXBfbDJfaW52YWwKLWNsZWFuX2wyOgotCS8qIHJlYWQgY2xpZHIgKi8KLQltcmMgICAgIHAxNSwgMSwgcjAsIGMwLCBjMCwgMQotCS8qIGV4dHJhY3QgbG9jIGZyb20gY2xpZHIgKi8KLQlhbmRzICAgIHIzLCByMCwgIzB4NzAwMDAwMAotCS8qIGxlZnQgYWxpZ24gbG9jIGJpdCBmaWVsZCAqLwotCW1vdiAgICAgcjMsIHIzLCBsc3IgIzIzCi0JLyogaWYgbG9jIGlzIDAsIHRoZW4gbm8gbmVlZCB0byBjbGVhbiAqLwotCWJlcSAgICAgZmluaXNoZWQKLQkvKiBzdGFydCBjbGVhbiBhdCBjYWNoZSBsZXZlbCAwICovCi0JbW92ICAgICByMTAsICMwCi1sb29wMToKLQkvKiB3b3JrIG91dCAzeCBjdXJyZW50IGNhY2hlIGxldmVsICovCi0JYWRkICAgICByMiwgcjEwLCByMTAsIGxzciAjMQotCS8qIGV4dHJhY3QgY2FjaGUgdHlwZSBiaXRzIGZyb20gY2xpZHIqLwotCW1vdiAgICAgcjEsIHIwLCBsc3IgcjIKLQkvKiBtYXNrIG9mIHRoZSBiaXRzIGZvciBjdXJyZW50IGNhY2hlIG9ubHkgKi8KLQlhbmQgICAgIHIxLCByMSwgIzcKLQkvKiBzZWUgd2hhdCBjYWNoZSB3ZSBoYXZlIGF0IHRoaXMgbGV2ZWwgKi8KLQljbXAgICAgIHIxLCAjMgotCS8qIHNraXAgaWYgbm8gY2FjaGUsIG9yIGp1c3QgaS1jYWNoZSAqLwotCWJsdCAgICAgc2tpcAotCS8qIHNlbGVjdCBjdXJyZW50IGNhY2hlIGxldmVsIGluIGNzc3IgKi8KLQltY3IgICAgIHAxNSwgMiwgcjEwLCBjMCwgYzAsIDAKLQkvKiBpc2IgdG8gc3ljaCB0aGUgbmV3IGNzc3ImY3NpZHIgKi8KLQlpc2IKLQkvKiByZWFkIHRoZSBuZXcgY3NpZHIgKi8KLQltcmMgICAgIHAxNSwgMSwgcjEsIGMwLCBjMCwgMAotCS8qIGV4dHJhY3QgdGhlIGxlbmd0aCBvZiB0aGUgY2FjaGUgbGluZXMgKi8KLQlhbmQgICAgIHIyLCByMSwgIzcKLQkvKiBhZGQgNCAobGluZSBsZW5ndGggb2Zmc2V0KSAqLwotCWFkZCAgICAgcjIsIHIyLCAjNAotCWxkciAgICAgcjQsIGFzc29jX21hc2sKLQkvKiBmaW5kIG1heGltdW0gbnVtYmVyIG9uIHRoZSB3YXkgc2l6ZSAqLwotCWFuZHMgICAgcjQsIHI0LCByMSwgbHNyICMzCi0JLyogZmluZCBiaXQgcG9zaXRpb24gb2Ygd2F5IHNpemUgaW5jcmVtZW50ICovCi0JY2x6ICAgICByNSwgcjQKLQlsZHIgICAgIHI3LCBudW1zZXRfbWFzawotCS8qIGV4dHJhY3QgbWF4IG51bWJlciBvZiB0aGUgaW5kZXggc2l6ZSovCi0JYW5kcyAgICByNywgcjcsIHIxLCBsc3IgIzEzCi1sb29wMjoKLQltb3YgICAgIHI5LCByNAotCS8qIGNyZWF0ZSB3b3JraW5nIGNvcHkgb2YgbWF4IHdheSBzaXplKi8KLWxvb3AzOgotCS8qIGZhY3RvciB3YXkgYW5kIGNhY2hlIG51bWJlciBpbnRvIHIxMSAqLwotCW9yciAgICAgcjExLCByMTAsIHI5LCBsc2wgcjUKLQkvKiBmYWN0b3IgaW5kZXggbnVtYmVyIGludG8gcjExICovCi0Jb3JyICAgICByMTEsIHIxMSwgcjcsIGxzbCByMgotCS8qY2xlYW4gJiBpbnZhbGlkYXRlIGJ5IHNldC93YXkgKi8KLQltY3IgICAgIHAxNSwgMCwgcjExLCBjNywgYzEwLCAyCi0JLyogZGVjcmVtZW50IHRoZSB3YXkqLwotCXN1YnMgICAgcjksIHI5LCAjMQotCWJnZSAgICAgbG9vcDMKLQkvKmRlY3JlbWVudCB0aGUgaW5kZXggKi8KLQlzdWJzICAgIHI3LCByNywgIzEKLQliZ2UgICAgIGxvb3AyCi1za2lwOgotCWFkZCAgICAgcjEwLCByMTAsICMyCi0JLyogaW5jcmVtZW50IGNhY2hlIG51bWJlciAqLwotCWNtcCAgICAgcjMsIHIxMAotCWJndCAgICAgbG9vcDEKLWZpbmlzaGVkOgotCS8qc3dpdGggYmFjayB0byBjYWNoZSBsZXZlbCAwICovCi0JbW92ICAgICByMTAsICMwCi0JLyogc2VsZWN0IGN1cnJlbnQgY2FjaGUgbGV2ZWwgaW4gY3NzciAqLwotCW1jciAgICAgcDE1LCAyLCByMTAsIGMwLCBjMCwgMAotCWlzYgotc2tpcF9sMl9pbnZhbDoKLQkvKiBEYXRhIG1lbW9yeSBiYXJyaWVyIGFuZCBEYXRhIHN5bmMgYmFycmllciAqLwotCW1vdiAgICAgcjEsICMwCi0JbWNyICAgICBwMTUsIDAsIHIxLCBjNywgYzEwLCA0Ci0JbWNyICAgICBwMTUsIDAsIHIxLCBjNywgYzEwLCA1CiAKLQl3ZmkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAgd2FpdCBmb3IgaW50ZXJydXB0CitjbGVhbl9jYWNoZXM6CisJLyoKKwkgKiBDbGVhbiBEYXRhIG9yIHVuaWZpZWQgY2FjaGUgdG8gUE9VCisJICogSG93IHRvIGludmFsaWRhdGUgb25seSBMMSBjYWNoZT8/Pz8gLSAjRklYX01FIworCSAqIG1jcglwMTUsIDAsIHIxMSwgYzcsIGMxMSwgMQorCSAqLworCWNtcAlyMSwgIzB4MSAJCUAgQ2hlY2sgd2hldGhlciBMMiBpbnZhbCBpcyByZXF1aXJlZAorCWJlcQlvbWFwM19kb193ZmkKKworY2xlYW5fbDI6CisJLyoKKwkgKiBqdW1wIG91dCB0byBrZXJuZWwgZmx1c2ggcm91dGluZQorCSAqICAtIHJldXNlIHRoYXQgY29kZSBpcyBiZXR0ZXIKKwkgKiAgLSBpdCBleGVjdXRlcyBpbiBhIGNhY2hlZCBzcGFjZSBzbyBpcyBmYXN0ZXIgdGhhbiByZWZldGNoIHBlci1ibG9jaworCSAqICAtIHNob3VsZCBiZSBmYXN0ZXIgYW5kIHdpbGwgY2hhbmdlIHdpdGgga2VybmVsCisJICogIC0gJ21pZ2h0JyBoYXZlIHRvIGNvcHkgYWRkcmVzcywgbG9hZCBhbmQganVtcCB0byBpdAorCSAqLworCWxkcglyMSwga2VybmVsX2ZsdXNoCisJbW92CWxyLCBwYworCWJ4CXIxCisKK29tYXAzX2RvX3dmaToKKwlsZHIJcjQsIHNkcmNfcG93ZXIJCUAgcmVhZCB0aGUgU0RSQ19QT1dFUiByZWdpc3RlcgorCWxkcglyNSwgW3I0XQkJQCByZWFkIHRoZSBjb250ZW50cyBvZiBTRFJDX1BPV0VSCisJb3JyCXI1LCByNSwgIzB4NDAJCUAgZW5hYmxlIHNlbGYgcmVmcmVzaCBvbiBpZGxlIHJlcQorCXN0cglyNSwgW3I0XQkJQCB3cml0ZSBiYWNrIHRvIFNEUkNfUE9XRVIgcmVnaXN0ZXIKKworCS8qIERhdGEgbWVtb3J5IGJhcnJpZXIgYW5kIERhdGEgc3luYyBiYXJyaWVyICovCisJbW92CXIxLCAjMAorCW1jcglwMTUsIDAsIHIxLCBjNywgYzEwLCA0CisJbWNyCXAxNSwgMCwgcjEsIGM3LCBjMTAsIDUKKworLyoKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiA9PSBXRkkgaW5zdHJ1Y3Rpb24gPT4gRW50ZXIgaWRsZSA9PQorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworCXdmaQkJCQlAIHdhaXQgZm9yIGludGVycnVwdAorCisvKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqID09IFJlc3VtZSBwYXRoIGZvciBub24tT0ZGIG1vZGVzID09CisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCiAJbm9wCiAJbm9wCiAJbm9wCkBAIC02MDQsNDYgKzMxNiw0MjEgQEAKIAlub3AKIAlub3AKIAlibCB3YWl0X3NkcmNfb2sKLQkvKiByZXN0b3JlIHJlZ3MgYW5kIHJldHVybiAqLwotCWxkbWZkICAgc3AhLCB7cjAtcjEyLCBwY30KKworLyoKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiA9PSBFeGl0IHBvaW50IGZyb20gbm9uLU9GRiBtb2RlcyA9PQorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworCWxkbWZkCXNwISwge3IwLXIxMiwgcGN9CUAgcmVzdG9yZSByZWdzIGFuZCByZXR1cm4KKworCisvKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiA9PSBSZXN1bWUgcGF0aCBmb3IgT0ZGIG1vZGUgPT0KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKKy8qCisgKiBUaGUgcmVzdG9yZV8qIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGJ5IHRoZSBST00gY29kZQorICogIHdoZW4gYmFjayBmcm9tIFdGSSBpbiBPRkYgbW9kZS4KKyAqIENmLiB0aGUgZ2V0XypyZXN0b3JlX3BvaW50ZXIgZnVuY3Rpb25zLgorICoKKyAqICByZXN0b3JlX2VzMzogYXBwbGllcyB0byAzNHh4ID49IEVTMy4wCisgKiAgcmVzdG9yZV8zNjMwOiBhcHBsaWVzIHRvIDM2eHgKKyAqICByZXN0b3JlOiBjb21tb24gY29kZSBmb3IgM3h4eAorICovCityZXN0b3JlX2VzMzoKKwlsZHIJcjUsIHBtX3ByZXB3c3RzdF9jb3JlX3AKKwlsZHIJcjQsIFtyNV0KKwlhbmQJcjQsIHI0LCAjMHgzCisJY21wCXI0LCAjMHgwCUAgQ2hlY2sgaWYgcHJldmlvdXMgcG93ZXIgc3RhdGUgb2YgQ09SRSBpcyBPRkYKKwlibmUJcmVzdG9yZQorCWFkcglyMCwgZXMzX3NkcmNfZml4CisJbGRyCXIxLCBzcmFtX2Jhc2UKKwlsZHIJcjIsIGVzM19zZHJjX2ZpeF9zegorCW1vdglyMiwgcjIsIHJvciAjMgorY29weV90b19zcmFtOgorCWxkbWlhCXIwISwge3IzfQlAIHZhbCA9ICpzcmMKKwlzdG1pYQlyMSEsIHtyM30JQCAqZHN0ID0gdmFsCisJc3VicwlyMiwgcjIsICMweDEJQCBudW1fd29yZHMtLQorCWJuZQljb3B5X3RvX3NyYW0KKwlsZHIJcjEsIHNyYW1fYmFzZQorCWJseAlyMQorCWIJcmVzdG9yZQorCityZXN0b3JlXzM2MzA6CisJbGRyCXIxLCBwbV9wcmVwd3N0c3RfY29yZV9wCisJbGRyCXIyLCBbcjFdCisJYW5kCXIyLCByMiwgIzB4MworCWNtcAlyMiwgIzB4MAlAIENoZWNrIGlmIHByZXZpb3VzIHBvd2VyIHN0YXRlIG9mIENPUkUgaXMgT0ZGCisJYm5lCXJlc3RvcmUKKwkvKiBEaXNhYmxlIFJUQSBiZWZvcmUgZ2l2aW5nIGNvbnRyb2wgKi8KKwlsZHIJcjEsIGNvbnRyb2xfbWVtX3J0YQorCW1vdglyMiwgI09NQVAzNlhYX1JUQV9ESVNBQkxFCisJc3RyCXIyLCBbcjFdCisKKwkvKiBGYWxsIHRocm91Z2ggdG8gY29tbW9uIGNvZGUgZm9yIHRoZSByZW1haW5pbmcgbG9naWMgKi8KKworcmVzdG9yZToKKwkvKgorCSAqIENoZWNrIHdoYXQgd2FzIHRoZSByZWFzb24gZm9yIG1wdSByZXNldCBhbmQgc3RvcmUgdGhlIHJlYXNvbiBpbiByOToKKwkgKiAgMCAtIE5vIGNvbnRleHQgbG9zdAorCSAqICAxIC0gT25seSBMMSBhbmQgbG9naWMgbG9zdAorCSAqICAyIC0gT25seSBMMiBsb3N0IC0gSW4gdGhpcyBjYXNlLCB3ZSB3b250IGJlIGhlcmUKKwkgKiAgMyAtIEJvdGggTDEgYW5kIEwyIGxvc3QKKwkgKi8KKwlsZHIJcjEsIHBtX3B3c3RjdHJsX21wdQorCWxkcglyMiwgW3IxXQorCWFuZAlyMiwgcjIsICMweDMKKwljbXAJcjIsICMweDAJQCBDaGVjayBpZiB0YXJnZXQgcG93ZXIgc3RhdGUgd2FzIE9GRiBvciBSRVQKKwltb3ZlcQlyOSwgIzB4MwlAIE1QVSBPRkYgPT4gTDEgYW5kIEwyIGxvc3QKKwltb3ZuZQlyOSwgIzB4MQlAIE9ubHkgTDEgYW5kIEwyIGxvc3QgPT4gYXZvaWQgTDIgaW52YWxpZGF0aW9uCisJYm5lCWxvZ2ljX2wxX3Jlc3RvcmUKKworCWxkcglyMCwgbDJkaXNfMzYzMAorCWNtcAlyMCwgIzB4MQlAIHNob3VsZCB3ZSBkaXNhYmxlIEwyIG9uIDM2MzA/CisJYm5lCXNraXBsMmRpcworCW1yYwlwMTUsIDAsIHIwLCBjMSwgYzAsIDEKKwliaWMJcjAsIHIwLCAjMglAIGRpc2FibGUgTDIgY2FjaGUKKwltY3IJcDE1LCAwLCByMCwgYzEsIGMwLCAxCitza2lwbDJkaXM6CisJbGRyCXIwLCBjb250cm9sX3N0YXQKKwlsZHIJcjEsIFtyMF0KKwlhbmQJcjEsICMweDcwMAorCWNtcAlyMSwgIzB4MzAwCisJYmVxCWwyX2ludl9ncAorCW1vdglyMCwgIzQwCQkJQCBzZXQgc2VydmljZSBJRCBmb3IgUFBBCisJbW92CXIxMiwgcjAJCQlAIGNvcHkgc2VjdXJlIFNlcnZpY2UgSUQgaW4gcjEyCisJbW92CXIxLCAjMAkJCUAgc2V0IHRhc2sgaWQgZm9yIFJPTSBjb2RlIGluIHIxCisJbW92CXIyLCAjNAkJCUAgc2V0IHNvbWUgZmxhZ3MgaW4gcjIsIHI2CisJbW92CXI2LCAjMHhmZgorCWFkcglyMywgbDJfaW52X2FwaV9wYXJhbXMJQCByMyBwb2ludHMgdG8gZHVtbXkgcGFyYW1ldGVycworCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CUAgZGF0YSB3cml0ZSBiYXJyaWVyCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDUJQCBkYXRhIG1lbW9yeSBiYXJyaWVyCisJLndvcmQJMHhFMTYwMDA3MQkJQCBjYWxsIFNNSSBtb25pdG9yIChzbWkgIzEpCisJLyogV3JpdGUgdG8gQXV4IGNvbnRyb2wgcmVnaXN0ZXIgdG8gc2V0IHNvbWUgYml0cyAqLworCW1vdglyMCwgIzQyCQkJQCBzZXQgc2VydmljZSBJRCBmb3IgUFBBCisJbW92CXIxMiwgcjAJCQlAIGNvcHkgc2VjdXJlIFNlcnZpY2UgSUQgaW4gcjEyCisJbW92CXIxLCAjMAkJCUAgc2V0IHRhc2sgaWQgZm9yIFJPTSBjb2RlIGluIHIxCisJbW92CXIyLCAjNAkJCUAgc2V0IHNvbWUgZmxhZ3MgaW4gcjIsIHI2CisJbW92CXI2LCAjMHhmZgorCWxkcglyNCwgc2NyYXRjaHBhZF9iYXNlCisJbGRyCXIzLCBbcjQsICMweEJDXQkJQCByMyBwb2ludHMgdG8gcGFyYW1ldGVycworCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CUAgZGF0YSB3cml0ZSBiYXJyaWVyCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDUJQCBkYXRhIG1lbW9yeSBiYXJyaWVyCisJLndvcmQJMHhFMTYwMDA3MQkJQCBjYWxsIFNNSSBtb25pdG9yIChzbWkgIzEpCisKKyNpZmRlZiBDT05GSUdfT01BUDNfTDJfQVVYX1NFQ1VSRV9TQVZFX1JFU1RPUkUKKwkvKiBSZXN0b3JlIEwyIGF1eCBjb250cm9sIHJlZ2lzdGVyICovCisJCQkJCUAgc2V0IHNlcnZpY2UgSUQgZm9yIFBQQQorCW1vdglyMCwgI0NPTkZJR19PTUFQM19MMl9BVVhfU0VDVVJFX1NFUlZJQ0VfU0VUX0lECisJbW92CXIxMiwgcjAJCQlAIGNvcHkgc2VydmljZSBJRCBpbiByMTIKKwltb3YJcjEsICMwCQkJQCBzZXQgdGFzayBJRCBmb3IgUk9NIGNvZGUgaW4gcjEKKwltb3YJcjIsICM0CQkJQCBzZXQgc29tZSBmbGFncyBpbiByMiwgcjYKKwltb3YJcjYsICMweGZmCisJbGRyCXI0LCBzY3JhdGNocGFkX2Jhc2UKKwlsZHIJcjMsIFtyNCwgIzB4QkNdCisJYWRkcwlyMywgcjMsICM4CQlAIHIzIHBvaW50cyB0byBwYXJhbWV0ZXJzCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJQCBkYXRhIHdyaXRlIGJhcnJpZXIKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNQlAIGRhdGEgbWVtb3J5IGJhcnJpZXIKKwkud29yZAkweEUxNjAwMDcxCQlAIGNhbGwgU01JIG1vbml0b3IgKHNtaSAjMSkKKyNlbmRpZgorCWIJbG9naWNfbDFfcmVzdG9yZQorCitsMl9pbnZfYXBpX3BhcmFtczoKKwkud29yZAkweDEsIDB4MDAKK2wyX2ludl9ncDoKKwkvKiBFeGVjdXRlIHNtaSB0byBpbnZhbGlkYXRlIEwyIGNhY2hlICovCisJbW92IHIxMiwgIzB4MQkJCUAgc2V0IHVwIHRvIGludmFsaWRhdGUgTDIKKwkud29yZCAweEUxNjAwMDcwCQlAIENhbGwgU01JIG1vbml0b3IgKHNtaWVxKQorCS8qIFdyaXRlIHRvIEF1eCBjb250cm9sIHJlZ2lzdGVyIHRvIHNldCBzb21lIGJpdHMgKi8KKwlsZHIJcjQsIHNjcmF0Y2hwYWRfYmFzZQorCWxkcglyMywgW3I0LCMweEJDXQorCWxkcglyMCwgW3IzLCM0XQorCW1vdglyMTIsICMweDMKKwkud29yZAkweEUxNjAwMDcwCQlAIENhbGwgU01JIG1vbml0b3IgKHNtaWVxKQorCWxkcglyNCwgc2NyYXRjaHBhZF9iYXNlCisJbGRyCXIzLCBbcjQsIzB4QkNdCisJbGRyCXIwLCBbcjMsIzEyXQorCW1vdglyMTIsICMweDIKKwkud29yZAkweEUxNjAwMDcwCQlAIENhbGwgU01JIG1vbml0b3IgKHNtaWVxKQorbG9naWNfbDFfcmVzdG9yZToKKwlsZHIJcjEsIGwyZGlzXzM2MzAKKwljbXAJcjEsICMweDEJCUAgVGVzdCBpZiBMMiByZS1lbmFibGUgbmVlZGVkIG9uIDM2MzAKKwlibmUJc2tpcGwycmVlbgorCW1yYwlwMTUsIDAsIHIxLCBjMSwgYzAsIDEKKwlvcnIJcjEsIHIxLCAjMgkJQCByZS1lbmFibGUgTDIgY2FjaGUKKwltY3IJcDE1LCAwLCByMSwgYzEsIGMwLCAxCitza2lwbDJyZWVuOgorCW1vdglyMSwgIzAKKwkvKgorCSAqIEludmFsaWRhdGUgYWxsIGluc3RydWN0aW9uIGNhY2hlcyB0byBQb1UKKwkgKiBhbmQgZmx1c2ggYnJhbmNoIHRhcmdldCBjYWNoZQorCSAqLworCW1jcglwMTUsIDAsIHIxLCBjNywgYzUsIDAKKworCWxkcglyNCwgc2NyYXRjaHBhZF9iYXNlCisJbGRyCXIzLCBbcjQsIzB4QkNdCisJYWRkcwlyMywgcjMsICMxNgorCWxkbWlhCXIzISwge3I0LXI2fQorCW1vdglzcCwgcjQKKwltc3IJc3Bzcl9jeHNmLCByNQorCW1vdglsciwgcjYKKworCWxkbWlhCXIzISwge3I0LXI5fQorCS8qIENvcHJvY2Vzc29yIGFjY2VzcyBDb250cm9sIFJlZ2lzdGVyICovCisJbWNyIHAxNSwgMCwgcjQsIGMxLCBjMCwgMgorCisJLyogVFRCUjAgKi8KKwlNQ1IgcDE1LCAwLCByNSwgYzIsIGMwLCAwCisJLyogVFRCUjEgKi8KKwlNQ1IgcDE1LCAwLCByNiwgYzIsIGMwLCAxCisJLyogVHJhbnNsYXRpb24gdGFibGUgYmFzZSBjb250cm9sIHJlZ2lzdGVyICovCisJTUNSIHAxNSwgMCwgcjcsIGMyLCBjMCwgMgorCS8qIERvbWFpbiBhY2Nlc3MgQ29udHJvbCBSZWdpc3RlciAqLworCU1DUiBwMTUsIDAsIHI4LCBjMywgYzAsIDAKKwkvKiBEYXRhIGZhdWx0IHN0YXR1cyBSZWdpc3RlciAqLworCU1DUiBwMTUsIDAsIHI5LCBjNSwgYzAsIDAKKworCWxkbWlhCXIzISx7cjQtcjh9CisJLyogSW5zdHJ1Y3Rpb24gZmF1bHQgc3RhdHVzIFJlZ2lzdGVyICovCisJTUNSIHAxNSwgMCwgcjQsIGM1LCBjMCwgMQorCS8qIERhdGEgQXV4aWxpYXJ5IEZhdWx0IFN0YXR1cyBSZWdpc3RlciAqLworCU1DUiBwMTUsIDAsIHI1LCBjNSwgYzEsIDAKKwkvKiBJbnN0cnVjdGlvbiBBdXhpbGlhcnkgRmF1bHQgU3RhdHVzIFJlZ2lzdGVyKi8KKwlNQ1IgcDE1LCAwLCByNiwgYzUsIGMxLCAxCisJLyogRGF0YSBGYXVsdCBBZGRyZXNzIFJlZ2lzdGVyICovCisJTUNSIHAxNSwgMCwgcjcsIGM2LCBjMCwgMAorCS8qIEluc3RydWN0aW9uIEZhdWx0IEFkZHJlc3MgUmVnaXN0ZXIqLworCU1DUiBwMTUsIDAsIHI4LCBjNiwgYzAsIDIKKwlsZG1pYQlyMyEse3I0LXI3fQorCisJLyogVXNlciByL3cgdGhyZWFkIGFuZCBwcm9jZXNzIElEICovCisJTUNSIHAxNSwgMCwgcjQsIGMxMywgYzAsIDIKKwkvKiBVc2VyIHJvIHRocmVhZCBhbmQgcHJvY2VzcyBJRCAqLworCU1DUiBwMTUsIDAsIHI1LCBjMTMsIGMwLCAzCisJLyogUHJpdmlsZWdlZCBvbmx5IHRocmVhZCBhbmQgcHJvY2VzcyBJRCAqLworCU1DUiBwMTUsIDAsIHI2LCBjMTMsIGMwLCA0CisJLyogQ2FjaGUgc2l6ZSBzZWxlY3Rpb24gKi8KKwlNQ1IgcDE1LCAyLCByNywgYzAsIGMwLCAwCisJbGRtaWEJcjMhLHtyNC1yOH0KKwkvKiBEYXRhIFRMQiBsb2NrZG93biByZWdpc3RlcnMgKi8KKwlNQ1IgcDE1LCAwLCByNCwgYzEwLCBjMCwgMAorCS8qIEluc3RydWN0aW9uIFRMQiBsb2NrZG93biByZWdpc3RlcnMgKi8KKwlNQ1IgcDE1LCAwLCByNSwgYzEwLCBjMCwgMQorCS8qIFNlY3VyZSBvciBOb25zZWN1cmUgVmVjdG9yIEJhc2UgQWRkcmVzcyAqLworCU1DUiBwMTUsIDAsIHI2LCBjMTIsIGMwLCAwCisJLyogRkNTRSBQSUQgKi8KKwlNQ1IgcDE1LCAwLCByNywgYzEzLCBjMCwgMAorCS8qIENvbnRleHQgUElEICovCisJTUNSIHAxNSwgMCwgcjgsIGMxMywgYzAsIDEKKworCWxkbWlhCXIzISx7cjQtcjV9CisJLyogUHJpbWFyeSBtZW1vcnkgcmVtYXAgcmVnaXN0ZXIgKi8KKwlNQ1IgcDE1LCAwLCByNCwgYzEwLCBjMiwgMAorCS8qIE5vcm1hbCBtZW1vcnkgcmVtYXAgcmVnaXN0ZXIgKi8KKwlNQ1IgcDE1LCAwLCByNSwgYzEwLCBjMiwgMQorCisJLyogUmVzdG9yZSBjcHNyICovCisJbGRtaWEJcjMhLHtyNH0JCUAgbG9hZCBDUFNSIGZyb20gU0RSQU0KKwltc3IJY3BzciwgcjQJCUAgc3RvcmUgY3BzcgorCisJLyogRW5hYmxpbmcgTU1VIGhlcmUgKi8KKwltcmMJcDE1LCAwLCByNywgYzIsIGMwLCAyIAlAIFJlYWQgVFRCUkNvbnRyb2wKKwkvKiBFeHRyYWN0IE4gKDA6MikgYml0cyBhbmQgZGVjaWRlIHdoZXRoZXIgdG8gdXNlIFRUQlIwIG9yIFRUQlIxICovCisJYW5kCXI3LCAjMHg3CisJY21wCXI3LCAjMHgwCisJYmVxCXVzZXR0YnIwCit0dGJyX2Vycm9yOgorCS8qCisJICogTW9yZSB3b3JrIG5lZWRzIHRvIGJlIGRvbmUgdG8gc3VwcG9ydCBOWzA6Ml0gdmFsdWUgb3RoZXIgdGhhbiAwCisJICogU28gbG9vcGluZyBoZXJlIHNvIHRoYXQgdGhlIGVycm9yIGNhbiBiZSBkZXRlY3RlZAorCSAqLworCWIJdHRicl9lcnJvcgordXNldHRicjA6CisJbXJjCXAxNSwgMCwgcjIsIGMyLCBjMCwgMAorCWxkcglyNSwgdHRicmJpdF9tYXNrCisJYW5kCXIyLCByNQorCW1vdglyNCwgcGMKKwlsZHIJcjUsIHRhYmxlX2luZGV4X21hc2sKKwlhbmQJcjQsIHI1CQkJQCByNCA9IDMxIHRvIDIwIGJpdHMgb2YgcGMKKwkvKiBFeHRyYWN0IHRoZSB2YWx1ZSB0byBiZSB3cml0dGVuIHRvIHRhYmxlIGVudHJ5ICovCisJbGRyCXIxLCB0YWJsZV9lbnRyeQorCS8qIHIxIGhhcyB0aGUgdmFsdWUgdG8gYmUgd3JpdHRlbiB0byB0YWJsZSBlbnRyeSovCisJYWRkCXIxLCByMSwgcjQKKwkvKiBHZXR0aW5nIHRoZSBhZGRyZXNzIG9mIHRhYmxlIGVudHJ5IHRvIG1vZGlmeSAqLworCWxzcglyNCwgIzE4CisJLyogcjIgaGFzIHRoZSBsb2NhdGlvbiB3aGljaCBuZWVkcyB0byBiZSBtb2RpZmllZCAqLworCWFkZAlyMiwgcjQKKwkvKiBTdG9yaW5nIHByZXZpb3VzIGVudHJ5IG9mIGxvY2F0aW9uIGJlaW5nIG1vZGlmaWVkICovCisJbGRyCXI1LCBzY3JhdGNocGFkX2Jhc2UKKwlsZHIJcjQsIFtyMl0KKwlzdHIJcjQsIFtyNSwgIzB4QzBdCisJLyogTW9kaWZ5IHRoZSB0YWJsZSBlbnRyeSAqLworCXN0cglyMSwgW3IyXQorCS8qCisJICogU3RvcmluZyBhZGRyZXNzIG9mIGVudHJ5IGJlaW5nIG1vZGlmaWVkCisJICogLSB3aWxsIGJlIHJlc3RvcmVkIGFmdGVyIGVuYWJsaW5nIE1NVQorCSAqLworCWxkcglyNSwgc2NyYXRjaHBhZF9iYXNlCisJc3RyCXIyLCBbcjUsICMweEM0XQorCisJbW92CXIwLCAjMAorCW1jcglwMTUsIDAsIHIwLCBjNywgYzUsIDQJQCBGbHVzaCBwcmVmZXRjaCBidWZmZXIKKwltY3IJcDE1LCAwLCByMCwgYzcsIGM1LCA2CUAgSW52YWxpZGF0ZSBicmFuY2ggcHJlZGljdG9yIGFycmF5CisJbWNyCXAxNSwgMCwgcjAsIGM4LCBjNSwgMAlAIEludmFsaWRhdGUgaW5zdHJ1Y3Rpb24gVExCCisJbWNyCXAxNSwgMCwgcjAsIGM4LCBjNiwgMAlAIEludmFsaWRhdGUgZGF0YSBUTEIKKwkvKgorCSAqIFJlc3RvcmUgY29udHJvbCByZWdpc3Rlci4gVGhpcyBlbmFibGVzIHRoZSBNTVUuCisJICogVGhlIGNhY2hlcyBhbmQgcHJlZGljdGlvbiBhcmUgbm90IGVuYWJsZWQgaGVyZSwgdGhleQorCSAqIHdpbGwgYmUgZW5hYmxlZCBhZnRlciByZXN0b3JpbmcgdGhlIE1NVSB0YWJsZSBlbnRyeS4KKwkgKi8KKwlsZG1pYQlyMyEsIHtyNH0KKwkvKiBTdG9yZSBwcmV2aW91cyB2YWx1ZSBvZiBjb250cm9sIHJlZ2lzdGVyIGluIHNjcmF0Y2hwYWQgKi8KKwlzdHIJcjQsIFtyNSwgIzB4QzhdCisJbGRyCXIyLCBjYWNoZV9wcmVkX2Rpc2FibGVfbWFzaworCWFuZAlyNCwgcjIKKwltY3IJcDE1LCAwLCByNCwgYzEsIGMwLCAwCisKKy8qCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqID09IEV4aXQgcG9pbnQgZnJvbSBPRkYgbW9kZSA9PQorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKwlsZG1mZAlzcCEsIHtyMC1yMTIsIHBjfQlAIHJlc3RvcmUgcmVncyBhbmQgcmV0dXJuCisKKworLyoKKyAqIEludGVybmFsIGZ1bmN0aW9ucworICovCisKKy8qIFRoaXMgZnVuY3Rpb24gaW1wbGVtZW50cyB0aGUgZXJyYXR1bSBJRCBpNDQzIFdBLCBhcHBsaWVzIHRvIDM0eHggPj0gRVMzLjAgKi8KKwkudGV4dAorRU5UUlkoZXMzX3NkcmNfZml4KQorCWxkcglyNCwgc2RyY19zeXNjZmcJCUAgZ2V0IGNvbmZpZyBhZGRyCisJbGRyCXI1LCBbcjRdCQlAIGdldCB2YWx1ZQorCXRzdAlyNSwgIzB4MTAwCQlAIGlzIHBhcnQgYWNjZXNzIGJsb2NrZWQKKwlpdAllcQorCWJpY2VxCXI1LCByNSwgIzB4MTAwCQlAIGNsZWFyIGJpdCBpZiBzZXQKKwlzdHIJcjUsIFtyNF0JCUAgd3JpdGUgYmFjayBjaGFuZ2UKKwlsZHIJcjQsIHNkcmNfbXJfMAkJQCBnZXQgY29uZmlnIGFkZHIKKwlsZHIJcjUsIFtyNF0JCUAgZ2V0IHZhbHVlCisJc3RyCXI1LCBbcjRdCQlAIHdyaXRlIGJhY2sgY2hhbmdlCisJbGRyCXI0LCBzZHJjX2VtcjJfMAkJQCBnZXQgY29uZmlnIGFkZHIKKwlsZHIJcjUsIFtyNF0JCUAgZ2V0IHZhbHVlCisJc3RyCXI1LCBbcjRdCQlAIHdyaXRlIGJhY2sgY2hhbmdlCisJbGRyCXI0LCBzZHJjX21hbnVhbF8wCUAgZ2V0IGNvbmZpZyBhZGRyCisJbW92CXI1LCAjMHgyCQlAIGF1dG9yZWZyZXNoIGNvbW1hbmQKKwlzdHIJcjUsIFtyNF0JCUAga2ljayBvZmYgcmVmcmVzaGVzCisJbGRyCXI0LCBzZHJjX21yXzEJCUAgZ2V0IGNvbmZpZyBhZGRyCisJbGRyCXI1LCBbcjRdCQlAIGdldCB2YWx1ZQorCXN0cglyNSwgW3I0XQkJQCB3cml0ZSBiYWNrIGNoYW5nZQorCWxkcglyNCwgc2RyY19lbXIyXzEJCUAgZ2V0IGNvbmZpZyBhZGRyCisJbGRyCXI1LCBbcjRdCQlAIGdldCB2YWx1ZQorCXN0cglyNSwgW3I0XQkJQCB3cml0ZSBiYWNrIGNoYW5nZQorCWxkcglyNCwgc2RyY19tYW51YWxfMQlAIGdldCBjb25maWcgYWRkcgorCW1vdglyNSwgIzB4MgkJQCBhdXRvcmVmcmVzaCBjb21tYW5kCisJc3RyCXI1LCBbcjRdCQlAIGtpY2sgb2ZmIHJlZnJlc2hlcworCWJ4CWxyCisKK3NkcmNfc3lzY2ZnOgorCS53b3JkCVNEUkNfU1lTQ09ORklHX1AKK3NkcmNfbXJfMDoKKwkud29yZAlTRFJDX01SXzBfUAorc2RyY19lbXIyXzA6CisJLndvcmQJU0RSQ19FTVIyXzBfUAorc2RyY19tYW51YWxfMDoKKwkud29yZAlTRFJDX01BTlVBTF8wX1AKK3NkcmNfbXJfMToKKwkud29yZAlTRFJDX01SXzFfUAorc2RyY19lbXIyXzE6CisJLndvcmQJU0RSQ19FTVIyXzFfUAorc2RyY19tYW51YWxfMToKKwkud29yZAlTRFJDX01BTlVBTF8xX1AKK0VOVFJZKGVzM19zZHJjX2ZpeF9zeikKKwkud29yZAkuIC0gZXMzX3NkcmNfZml4CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGltcGxlbWVudHMgdGhlIGVycmF0dW0gSUQgaTU4MSBXQToKKyAqICBTRFJDIHN0YXRlIHJlc3RvcmUgYmVmb3JlIGFjY2Vzc2luZyB0aGUgU0RSQU0KKyAqCisgKiBPbmx5IHVzZWQgYXQgcmV0dXJuIGZyb20gbm9uLU9GRiBtb2RlLiBGb3IgT0ZGCisgKiBtb2RlIHRoZSBST00gY29kZSBjb25maWd1cmVzIHRoZSBTRFJDIGFuZAorICogdGhlIERQTEwgYmVmb3JlIGNhbGxpbmcgdGhlIHJlc3RvcmUgY29kZSBkaXJlY3RseQorICogZnJvbSBERFIuCisgKi8KIAogLyogTWFrZSBzdXJlIFNEUkMgYWNjZXNzZXMgYXJlIG9rICovCiB3YWl0X3NkcmNfb2s6Ci0gICAgICAgIGxkciAgICAgcjQsIGNtX2lkbGVzdDFfY29yZQotICAgICAgICBsZHIgICAgIHI1LCBbcjRdCi0gICAgICAgIGFuZCAgICAgcjUsIHI1LCAjMHgyCi0gICAgICAgIGNtcCAgICAgcjUsICMwCi0gICAgICAgIGJuZSAgICAgd2FpdF9zZHJjX29rCi0gICAgICAgIGxkciAgICAgcjQsIHNkcmNfcG93ZXIKLSAgICAgICAgbGRyICAgICByNSwgW3I0XQotICAgICAgICBiaWMgICAgIHI1LCByNSwgIzB4NDAKLSAgICAgICAgc3RyICAgICByNSwgW3I0XQorCisvKiBEUExMMyBtdXN0IGJlIGxvY2tlZCBiZWZvcmUgYWNjZXNzaW5nIHRoZSBTRFJDLiBNYXliZSB0aGUgSFcgZW5zdXJlcyB0aGlzICovCisJbGRyCXI0LCBjbV9pZGxlc3RfY2tnZW4KK3dhaXRfZHBsbDNfbG9jazoKKwlsZHIJcjUsIFtyNF0KKwl0c3QJcjUsICMxCisJYmVxCXdhaXRfZHBsbDNfbG9jaworCisJbGRyCXI0LCBjbV9pZGxlc3QxX2NvcmUKK3dhaXRfc2RyY19yZWFkeToKKwlsZHIJcjUsIFtyNF0KKwl0c3QJcjUsICMweDIKKwlibmUJd2FpdF9zZHJjX3JlYWR5CisJLyogYWxsb3cgRExMIHBvd2VyZG93biB1cG9uIGh3IGlkbGUgcmVxICovCisJbGRyCXI0LCBzZHJjX3Bvd2VyCisJbGRyCXI1LCBbcjRdCisJYmljCXI1LCByNSwgIzB4NDAKKwlzdHIJcjUsIFtyNF0KKworaXNfZGxsX2luX2xvY2tfbW9kZToKKwkvKiBJcyBkbGwgaW4gbG9jayBtb2RlPyAqLworCWxkcglyNCwgc2RyY19kbGxhX2N0cmwKKwlsZHIJcjUsIFtyNF0KKwl0c3QJcjUsICMweDQKKwlieG5lCWxyCQkJQCBSZXR1cm4gaWYgbG9ja2VkCisJLyogd2FpdCB0aWxsIGRsbCBsb2NrcyAqLword2FpdF9kbGxfbG9ja190aW1lZDoKKwlsZHIJcjQsIHdhaXRfZGxsX2xvY2tfY291bnRlcgorCWFkZAlyNCwgcjQsICMxCisJc3RyCXI0LCB3YWl0X2RsbF9sb2NrX2NvdW50ZXIKKwlsZHIJcjQsIHNkcmNfZGxsYV9zdGF0dXMKKwkvKiBXYWl0IDIwdVMgZm9yIGxvY2sgKi8KKwltb3YJcjYsICM4CiB3YWl0X2RsbF9sb2NrOgotICAgICAgICAvKiBJcyBkbGwgaW4gbG9jayBtb2RlPyAqLwotICAgICAgICBsZHIgICAgIHI0LCBzZHJjX2RsbGFfY3RybAotICAgICAgICBsZHIgICAgIHI1LCBbcjRdCi0gICAgICAgIHRzdCAgICAgcjUsICMweDQKLSAgICAgICAgYnhuZSAgICBscgotICAgICAgICAvKiB3YWl0IHRpbGwgZGxsIGxvY2tzICovCi0gICAgICAgIGxkciAgICAgcjQsIHNkcmNfZGxsYV9zdGF0dXMKLSAgICAgICAgbGRyICAgICByNSwgW3I0XQotICAgICAgICBhbmQgICAgIHI1LCByNSwgIzB4NAotICAgICAgICBjbXAgICAgIHI1LCAjMHg0Ci0gICAgICAgIGJuZSAgICAgd2FpdF9kbGxfbG9jawotICAgICAgICBieCAgICAgIGxyCisJc3VicwlyNiwgcjYsICMweDEKKwliZXEJa2lja19kbGwKKwlsZHIJcjUsIFtyNF0KKwlhbmQJcjUsIHI1LCAjMHg0CisJY21wCXI1LCAjMHg0CisJYm5lCXdhaXRfZGxsX2xvY2sKKwlieAlscgkJCUAgUmV0dXJuIHdoZW4gbG9ja2VkCisKKwkvKiBkaXNhYmxlL3JlZW5hYmxlIERMTCBpZiBub3QgbG9ja2VkICovCitraWNrX2RsbDoKKwlsZHIJcjQsIHNkcmNfZGxsYV9jdHJsCisJbGRyCXI1LCBbcjRdCisJbW92CXI2LCByNQorCWJpYwlyNiwgIygxPDwzKQkJQCBkaXNhYmxlIGRsbAorCXN0cglyNiwgW3I0XQorCWRzYgorCW9ycglyNiwgcjYsICMoMTw8MykJCUAgZW5hYmxlIGRsbAorCXN0cglyNiwgW3I0XQorCWRzYgorCWxkcglyNCwga2lja19jb3VudGVyCisJYWRkCXI0LCByNCwgIzEKKwlzdHIJcjQsIGtpY2tfY291bnRlcgorCWIJd2FpdF9kbGxfbG9ja190aW1lZAogCiBjbV9pZGxlc3QxX2NvcmU6CiAJLndvcmQJQ01fSURMRVNUMV9DT1JFX1YKK2NtX2lkbGVzdF9ja2dlbjoKKwkud29yZAlDTV9JRExFU1RfQ0tHRU5fVgogc2RyY19kbGxhX3N0YXR1czoKIAkud29yZAlTRFJDX0RMTEFfU1RBVFVTX1YKIHNkcmNfZGxsYV9jdHJsOgogCS53b3JkCVNEUkNfRExMQV9DVFJMX1YKLXBtX3ByZXB3c3RzdF9jb3JlOgotCS53b3JkCVBNX1BSRVBXU1RTVF9DT1JFX1YKIHBtX3ByZXB3c3RzdF9jb3JlX3A6CiAJLndvcmQJUE1fUFJFUFdTVFNUX0NPUkVfUAotcG1fcHJlcHdzdHN0X21wdToKLQkud29yZAlQTV9QUkVQV1NUU1RfTVBVX1YKIHBtX3B3c3RjdHJsX21wdToKIAkud29yZAlQTV9QV1NUQ1RSTF9NUFVfUAogc2NyYXRjaHBhZF9iYXNlOgpAQCAtNjUxLDEzICs3MzgsNyBAQAogc3JhbV9iYXNlOgogCS53b3JkCVNSQU1fQkFTRV9QICsgMHg4MDAwCiBzZHJjX3Bvd2VyOgotCS53b3JkIFNEUkNfUE9XRVJfVgotY2xrX3N0YWJpbGl6ZV9kZWxheToKLQkud29yZCAweDAwMDAwMUZGCi1hc3NvY19tYXNrOgotCS53b3JkCTB4M2ZmCi1udW1zZXRfbWFzazoKLQkud29yZAkweDdmZmYKKwkud29yZAlTRFJDX1BPV0VSX1YKIHR0YnJiaXRfbWFzazoKIAkud29yZAkweEZGRkZDMDAwCiB0YWJsZV9pbmRleF9tYXNrOgpAQCAtNjY4LDUgKzc0OSwyMCBAQAogCS53b3JkCTB4RkZGRkU3RkIKIGNvbnRyb2xfc3RhdDoKIAkud29yZAlDT05UUk9MX1NUQVQKK2NvbnRyb2xfbWVtX3J0YToKKwkud29yZAlDT05UUk9MX01FTV9SVEFfQ1RSTAora2VybmVsX2ZsdXNoOgorCS53b3JkCXY3X2ZsdXNoX2RjYWNoZV9hbGwKK2wyZGlzXzM2MzA6CisJLndvcmQJMAorCS8qCisJICogV2hlbiBleHBvcnRpbmcgdG8gdXNlcnNwYWNlIHdoaWxlIHRoZSBjb3VudGVycyBhcmUgaW4gU1JBTSwKKwkgKiB0aGVzZSAyIHdvcmRzIG5lZWQgdG8gYmUgYXQgdGhlIGVuZCB0byBmYWNpbGl0YXRlIHJldHJpdmFsIQorCSAqLwora2lja19jb3VudGVyOgorCS53b3JkCTAKK3dhaXRfZGxsX2xvY2tfY291bnRlcjoKKwkud29yZAkwCisKIEVOVFJZKG9tYXAzNHh4X2NwdV9zdXNwZW5kX3N6KQogCS53b3JkCS4gLSBvbWFwMzR4eF9jcHVfc3VzcGVuZApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9zbWFydHJlZmxleC1jbGFzczMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc21hcnRyZWZsZXgtY2xhc3MzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBlNzA1NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc21hcnRyZWZsZXgtY2xhc3MzLmMKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIFNtYXJ0IHJlZmxleCBDbGFzcyAzIHNwZWNpZmljIGltcGxlbWVudGF0aW9ucworICoKKyAqIEF1dGhvcjogVGhhcmEgR29waW5hdGggICAgICAgPHRoYXJhQHRpLmNvbT4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIFRoYXJhIEdvcGluYXRoIDx0aGFyYUB0aS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8cGxhdC9zbWFydHJlZmxleC5oPgorCitzdGF0aWMgaW50IHNyX2NsYXNzM19lbmFibGUoc3RydWN0IHZvbHRhZ2Vkb21haW4gKnZvbHRkbSkKK3sKKwl1bnNpZ25lZCBsb25nIHZvbHQgPSBvbWFwX3ZvbHRhZ2VfZ2V0X25vbV92b2x0KHZvbHRkbSk7CisKKwlpZiAoIXZvbHQpIHsKKwkJcHJfd2FybmluZygiJXM6IEN1cnIgdm9sdGFnZSB1bmtub3duLiBDYW5ub3QgZW5hYmxlIHNyXyVzXG4iLAorCQkJCV9fZnVuY19fLCB2b2x0ZG0tPm5hbWUpOworCQlyZXR1cm4gLUVOT0RBVEE7CisJfQorCisJb21hcF92cF9lbmFibGUodm9sdGRtKTsKKwlyZXR1cm4gc3JfZW5hYmxlKHZvbHRkbSwgdm9sdCk7Cit9CisKK3N0YXRpYyBpbnQgc3JfY2xhc3MzX2Rpc2FibGUoc3RydWN0IHZvbHRhZ2Vkb21haW4gKnZvbHRkbSwgaW50IGlzX3ZvbHRfcmVzZXQpCit7CisJb21hcF92cF9kaXNhYmxlKHZvbHRkbSk7CisJc3JfZGlzYWJsZSh2b2x0ZG0pOworCWlmIChpc192b2x0X3Jlc2V0KQorCQlvbWFwX3ZvbHRhZ2VfcmVzZXQodm9sdGRtKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNyX2NsYXNzM19jb25maWd1cmUoc3RydWN0IHZvbHRhZ2Vkb21haW4gKnZvbHRkbSkKK3sKKwlyZXR1cm4gc3JfY29uZmlndXJlX2Vycmdlbih2b2x0ZG0pOworfQorCisvKiBTUiBjbGFzczMgc3RydWN0dXJlICovCitzdGF0aWMgc3RydWN0IG9tYXBfc3JfY2xhc3NfZGF0YSBjbGFzczNfZGF0YSA9IHsKKwkuZW5hYmxlID0gc3JfY2xhc3MzX2VuYWJsZSwKKwkuZGlzYWJsZSA9IHNyX2NsYXNzM19kaXNhYmxlLAorCS5jb25maWd1cmUgPSBzcl9jbGFzczNfY29uZmlndXJlLAorCS5jbGFzc190eXBlID0gU1JfQ0xBU1MzLAorfTsKKworLyogU21hcnRyZWZsZXggQ2xhc3MzIGluaXQgQVBJIHRvIGJlIGNhbGxlZCBmcm9tIGJvYXJkIGZpbGUgKi8KK3N0YXRpYyBpbnQgX19pbml0IHNyX2NsYXNzM19pbml0KHZvaWQpCit7CisJcHJfaW5mbygiU21hcnRSZWZsZXggQ2xhc3MzIGluaXRpYWxpemVkXG4iKTsKKwlyZXR1cm4gc3JfcmVnaXN0ZXJfY2xhc3MoJmNsYXNzM19kYXRhKTsKK30KK2xhdGVfaW5pdGNhbGwoc3JfY2xhc3MzX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9zbWFydHJlZmxleC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9zbWFydHJlZmxleC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3ZWNlYmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NtYXJ0cmVmbGV4LmMKQEAgLTAsMCArMSwxMDI5IEBACisvKgorICogT01BUCBTbWFydFJlZmxleCBWb2x0YWdlIENvbnRyb2wKKyAqCisgKiBBdXRob3I6IFRoYXJhIEdvcGluYXRoCTx0aGFyYUB0aS5jb20+CisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKiBUaGFyYSBHb3BpbmF0aCA8dGhhcmFAdGkuY29tPgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbgorICogS2FsbGUgSm9raW5pZW1pCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKiBMZXNseSBBIE0gPHgwMDgwOTcwQHRpLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CisKKyNpbmNsdWRlIDxwbGF0L2NvbW1vbi5oPgorI2luY2x1ZGUgPHBsYXQvc21hcnRyZWZsZXguaD4KKworI2luY2x1ZGUgInBtLmgiCisKKyNkZWZpbmUgU01BUlRSRUZMRVhfTkFNRV9MRU4JMTYKKyNkZWZpbmUgTlZBTFVFX05BTUVfTEVOCQk0MAorI2RlZmluZSBTUl9ESVNBQkxFX1RJTUVPVVQJMjAwCisKK3N0cnVjdCBvbWFwX3NyIHsKKwlpbnQJCQkJc3JpZDsKKwlpbnQJCQkJaXBfdHlwZTsKKwlpbnQJCQkJbnZhbHVlX2NvdW50OworCWJvb2wJCQkJYXV0b2NvbXBfYWN0aXZlOworCXUzMgkJCQljbGtfbGVuZ3RoOworCXUzMgkJCQllcnJfd2VpZ2h0OworCXUzMgkJCQllcnJfbWlubGltaXQ7CisJdTMyCQkJCWVycl9tYXhsaW1pdDsKKwl1MzIJCQkJYWNjdW1fZGF0YTsKKwl1MzIJCQkJc2Vubl9hdmd3ZWlnaHQ7CisJdTMyCQkJCXNlbnBfYXZnd2VpZ2h0OworCXUzMgkJCQlzZW5wX21vZDsKKwl1MzIJCQkJc2Vubl9tb2Q7CisJdW5zaWduZWQgaW50CQkJaXJxOworCXZvaWQgX19pb21lbQkJCSpiYXNlOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJCSpwZGV2OworCXN0cnVjdCBsaXN0X2hlYWQJCW5vZGU7CisJc3RydWN0IG9tYXBfc3JfbnZhbHVlX3RhYmxlCSpudmFsdWVfdGFibGU7CisJc3RydWN0IHZvbHRhZ2Vkb21haW4JCSp2b2x0ZG07Cit9OworCisvKiBzcl9saXN0IGNvbnRhaW5zIGFsbCB0aGUgaW5zdGFuY2VzIG9mIHNtYXJ0cmVmbGV4IG1vZHVsZSAqLworc3RhdGljIExJU1RfSEVBRChzcl9saXN0KTsKKworc3RhdGljIHN0cnVjdCBvbWFwX3NyX2NsYXNzX2RhdGEgKnNyX2NsYXNzOworc3RhdGljIHN0cnVjdCBvbWFwX3NyX3BtaWNfZGF0YSAqc3JfcG1pY19kYXRhOworCitzdGF0aWMgaW5saW5lIHZvaWQgc3Jfd3JpdGVfcmVnKHN0cnVjdCBvbWFwX3NyICpzciwgdW5zaWduZWQgb2Zmc2V0LCB1MzIgdmFsdWUpCit7CisJX19yYXdfd3JpdGVsKHZhbHVlLCAoc3ItPmJhc2UgKyBvZmZzZXQpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNyX21vZGlmeV9yZWcoc3RydWN0IG9tYXBfc3IgKnNyLCB1bnNpZ25lZCBvZmZzZXQsIHUzMiBtYXNrLAorCQkJCQl1MzIgdmFsdWUpCit7CisJdTMyIHJlZ192YWw7CisJdTMyIGVycmNvbmZpZ19vZmZzID0gMCwgZXJyY29uZmlnX21hc2sgPSAwOworCisJcmVnX3ZhbCA9IF9fcmF3X3JlYWRsKHNyLT5iYXNlICsgb2Zmc2V0KTsKKwlyZWdfdmFsICY9IH5tYXNrOworCisJLyoKKwkgKiBTbWFydHJlZmxleCBlcnJvciBjb25maWcgcmVnaXN0ZXIgaXMgc3BlY2lhbCBhcyBpdCBjb250YWlucworCSAqIGNlcnRhaW4gc3RhdHVzIGJpdHMgd2hpY2ggaWYgd3JpdHRlbiBhIDEgaW50byBtZWFucyBhIGNsZWFyCisJICogb2YgdGhvc2UgYml0cy4gU28gaW4gb3JkZXIgdG8gbWFrZSBzdXJlIG5vIGFjY2lkZW50YWwgd3JpdGUgb2YKKwkgKiAxIGhhcHBlbnMgdG8gdGhvc2Ugc3RhdHVzIGJpdHMsIGRvIGEgY2xlYXIgb2YgdGhlbSBpbiB0aGUgcmVhZAorCSAqIHZhbHVlLiBUaGlzIG1lYW4gdGhpcyBBUEkgZG9lc24ndCByZXdyaXRlIHZhbHVlcyBpbiB0aGVzZSBiaXRzCisJICogaWYgdGhleSBhcmUgY3VycmVudGx5IHNldCwgYnV0IGRvZXMgYWxsb3cgdGhlIGNhbGxlciB0byB3cml0ZQorCSAqIHRob3NlIGJpdHMuCisJICovCisJaWYgKHNyLT5pcF90eXBlID09IFNSX1RZUEVfVjEpIHsKKwkJZXJyY29uZmlnX29mZnMgPSBFUlJDT05GSUdfVjE7CisJCWVycmNvbmZpZ19tYXNrID0gRVJSQ09ORklHX1NUQVRVU19WMV9NQVNLOworCX0gZWxzZSBpZiAoc3ItPmlwX3R5cGUgPT0gU1JfVFlQRV9WMikgeworCQllcnJjb25maWdfb2ZmcyA9IEVSUkNPTkZJR19WMjsKKwkJZXJyY29uZmlnX21hc2sgPSBFUlJDT05GSUdfVlBCT1VORElOVFNUX1YyOworCX0KKworCWlmIChvZmZzZXQgPT0gZXJyY29uZmlnX29mZnMpCisJCXJlZ192YWwgJj0gfmVycmNvbmZpZ19tYXNrOworCisJcmVnX3ZhbCB8PSB2YWx1ZTsKKworCV9fcmF3X3dyaXRlbChyZWdfdmFsLCAoc3ItPmJhc2UgKyBvZmZzZXQpKTsKK30KKworc3RhdGljIGlubGluZSB1MzIgc3JfcmVhZF9yZWcoc3RydWN0IG9tYXBfc3IgKnNyLCB1bnNpZ25lZCBvZmZzZXQpCit7CisJcmV0dXJuIF9fcmF3X3JlYWRsKHNyLT5iYXNlICsgb2Zmc2V0KTsKK30KKworc3RhdGljIHN0cnVjdCBvbWFwX3NyICpfc3JfbG9va3VwKHN0cnVjdCB2b2x0YWdlZG9tYWluICp2b2x0ZG0pCit7CisJc3RydWN0IG9tYXBfc3IgKnNyX2luZm87CisKKwlpZiAoIXZvbHRkbSkgeworCQlwcl9lcnIoIiVzOiBOdWxsIHZvbHRhZ2UgZG9tYWluIHBhc3NlZCFcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJfQorCisJbGlzdF9mb3JfZWFjaF9lbnRyeShzcl9pbmZvLCAmc3JfbGlzdCwgbm9kZSkgeworCQlpZiAodm9sdGRtID09IHNyX2luZm8tPnZvbHRkbSkKKwkJCXJldHVybiBzcl9pbmZvOworCX0KKworCXJldHVybiBFUlJfUFRSKC1FTk9EQVRBKTsKK30KKworc3RhdGljIGlycXJldHVybl90IHNyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBvbWFwX3NyICpzcl9pbmZvID0gKHN0cnVjdCBvbWFwX3NyICopZGF0YTsKKwl1MzIgc3RhdHVzID0gMDsKKworCWlmIChzcl9pbmZvLT5pcF90eXBlID09IFNSX1RZUEVfVjEpIHsKKwkJLyogUmVhZCB0aGUgc3RhdHVzIGJpdHMgKi8KKwkJc3RhdHVzID0gc3JfcmVhZF9yZWcoc3JfaW5mbywgRVJSQ09ORklHX1YxKTsKKworCQkvKiBDbGVhciB0aGVtIGJ5IHdyaXRpbmcgYmFjayAqLworCQlzcl93cml0ZV9yZWcoc3JfaW5mbywgRVJSQ09ORklHX1YxLCBzdGF0dXMpOworCX0gZWxzZSBpZiAoc3JfaW5mby0+aXBfdHlwZSA9PSBTUl9UWVBFX1YyKSB7CisJCS8qIFJlYWQgdGhlIHN0YXR1cyBiaXRzICovCisJCXNyX3JlYWRfcmVnKHNyX2luZm8sIElSUVNUQVRVUyk7CisKKwkJLyogQ2xlYXIgdGhlbSBieSB3cml0aW5nIGJhY2sgKi8KKwkJc3Jfd3JpdGVfcmVnKHNyX2luZm8sIElSUVNUQVRVUywgc3RhdHVzKTsKKwl9CisKKwlpZiAoc3JfY2xhc3MtPmNsYXNzX3R5cGUgPT0gU1JfQ0xBU1MyICYmIHNyX2NsYXNzLT5ub3RpZnkpCisJCXNyX2NsYXNzLT5ub3RpZnkoc3JfaW5mby0+dm9sdGRtLCBzdGF0dXMpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCBzcl9zZXRfY2xrX2xlbmd0aChzdHJ1Y3Qgb21hcF9zciAqc3IpCit7CisJc3RydWN0IGNsayAqc3lzX2NrOworCXUzMiBzeXNfY2xrX3NwZWVkOworCisJaWYgKGNwdV9pc19vbWFwMzR4eCgpKQorCQlzeXNfY2sgPSBjbGtfZ2V0KE5VTEwsICJzeXNfY2siKTsKKwllbHNlCisJCXN5c19jayA9IGNsa19nZXQoTlVMTCwgInN5c19jbGtpbl9jayIpOworCisJaWYgKElTX0VSUihzeXNfY2spKSB7CisJCWRldl9lcnIoJnNyLT5wZGV2LT5kZXYsICIlczogdW5hYmxlIHRvIGdldCBzeXMgY2xrXG4iLAorCQkJX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCXN5c19jbGtfc3BlZWQgPSBjbGtfZ2V0X3JhdGUoc3lzX2NrKTsKKwljbGtfcHV0KHN5c19jayk7CisKKwlzd2l0Y2ggKHN5c19jbGtfc3BlZWQpIHsKKwljYXNlIDEyMDAwMDAwOgorCQlzci0+Y2xrX2xlbmd0aCA9IFNSQ0xLTEVOR1RIXzEyTUhaX1NZU0NMSzsKKwkJYnJlYWs7CisJY2FzZSAxMzAwMDAwMDoKKwkJc3ItPmNsa19sZW5ndGggPSBTUkNMS0xFTkdUSF8xM01IWl9TWVNDTEs7CisJCWJyZWFrOworCWNhc2UgMTkyMDAwMDA6CisJCXNyLT5jbGtfbGVuZ3RoID0gU1JDTEtMRU5HVEhfMTlNSFpfU1lTQ0xLOworCQlicmVhazsKKwljYXNlIDI2MDAwMDAwOgorCQlzci0+Y2xrX2xlbmd0aCA9IFNSQ0xLTEVOR1RIXzI2TUhaX1NZU0NMSzsKKwkJYnJlYWs7CisJY2FzZSAzODQwMDAwMDoKKwkJc3ItPmNsa19sZW5ndGggPSBTUkNMS0xFTkdUSF8zOE1IWl9TWVNDTEs7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoJnNyLT5wZGV2LT5kZXYsICIlczogSW52YWxpZCBzeXNjbGsgdmFsdWU6ICVkXG4iLAorCQkJX19mdW5jX18sIHN5c19jbGtfc3BlZWQpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNyX3NldF9yZWdmaWVsZHMoc3RydWN0IG9tYXBfc3IgKnNyKQoreworCS8qCisJICogRm9yIHRpbWUgYmVpbmcgdGhlc2UgdmFsdWVzIGFyZSBkZWZpbmVkIGluIHNtYXJ0cmVmbGV4LmgKKwkgKiBhbmQgcG9wdWxhdGVkIGR1cmluZyBpbml0LiBNYXkgYmUgdGhleSBjYW4gYmUgbW92ZWQgdG8gYm9hcmQKKwkgKiBmaWxlIG9yIHBtaWMgc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmUuIEluIHRoYXQgY2FzZSB0aGVzZSBzdHJ1Y3R1cmUKKwkgKiBmaWVsZHMgd2lsbCBoYXZlIHRvIGJlIHBvcHVsYXRlZCB1c2luZyB0aGUgcGRhdGEgb3IgcG1pYyBzdHJ1Y3R1cmUuCisJICovCisJaWYgKGNwdV9pc19vbWFwMzR4eCgpIHx8IGNwdV9pc19vbWFwNDR4eCgpKSB7CisJCXNyLT5lcnJfd2VpZ2h0ID0gT01BUDM0MzBfU1JfRVJSV0VJR0hUOworCQlzci0+ZXJyX21heGxpbWl0ID0gT01BUDM0MzBfU1JfRVJSTUFYTElNSVQ7CisJCXNyLT5hY2N1bV9kYXRhID0gT01BUDM0MzBfU1JfQUNDVU1EQVRBOworCQlpZiAoIShzdHJjbXAoc3ItPnZvbHRkbS0+bmFtZSwgIm1wdSIpKSkgeworCQkJc3ItPnNlbm5fYXZnd2VpZ2h0ID0gT01BUDM0MzBfU1IxX1NFTk5BVkdXRUlHSFQ7CisJCQlzci0+c2VucF9hdmd3ZWlnaHQgPSBPTUFQMzQzMF9TUjFfU0VOUEFWR1dFSUdIVDsKKwkJfSBlbHNlIHsKKwkJCXNyLT5zZW5uX2F2Z3dlaWdodCA9IE9NQVAzNDMwX1NSMl9TRU5OQVZHV0VJR0hUOworCQkJc3ItPnNlbnBfYXZnd2VpZ2h0ID0gT01BUDM0MzBfU1IyX1NFTlBBVkdXRUlHSFQ7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNyX3N0YXJ0X3ZkZGF1dG9jb21wKHN0cnVjdCBvbWFwX3NyICpzcikKK3sKKwlpZiAoIXNyX2NsYXNzIHx8ICEoc3JfY2xhc3MtPmVuYWJsZSkgfHwgIShzcl9jbGFzcy0+Y29uZmlndXJlKSkgeworCQlkZXZfd2Fybigmc3ItPnBkZXYtPmRldiwKKwkJCSIlczogc21hcnRyZWZsZXggY2xhc3MgZHJpdmVyIG5vdCByZWdpc3RlcmVkXG4iLAorCQkJX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCisJaWYgKCFzcl9jbGFzcy0+ZW5hYmxlKHNyLT52b2x0ZG0pKQorCQlzci0+YXV0b2NvbXBfYWN0aXZlID0gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgc3Jfc3RvcF92ZGRhdXRvY29tcChzdHJ1Y3Qgb21hcF9zciAqc3IpCit7CisJaWYgKCFzcl9jbGFzcyB8fCAhKHNyX2NsYXNzLT5kaXNhYmxlKSkgeworCQlkZXZfd2Fybigmc3ItPnBkZXYtPmRldiwKKwkJCSIlczogc21hcnRyZWZsZXggY2xhc3MgZHJpdmVyIG5vdCByZWdpc3RlcmVkXG4iLAorCQkJX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCisJaWYgKHNyLT5hdXRvY29tcF9hY3RpdmUpIHsKKwkJc3JfY2xhc3MtPmRpc2FibGUoc3ItPnZvbHRkbSwgMSk7CisJCXNyLT5hdXRvY29tcF9hY3RpdmUgPSBmYWxzZTsKKwl9Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIGludGlhbGl6YXRpb25zIHdoaWNoIGhhdmUgdG8gYmUgZG9uZQorICogb25seSB3aGVuIGJvdGggc3IgZGV2aWNlIGFuZCBjbGFzcyBkcml2ZXIgcmVnaXRlciBoYXMKKyAqIGNvbXBsZXRlZC4gVGhpcyB3aWxsIGJlIGF0dGVtcHRlZCB0byBiZSBjYWxsZWQgZnJvbSBib3RoIHNyIGNsYXNzCisgKiBkcml2ZXIgcmVnaXN0ZXIgYW5kIHNyIGRldmljZSBpbnRpYWxpenRpb24gQVBJJ3MuIE9ubHkgb25lIGNhbGwKKyAqIHdpbGwgdWx0aW1hdGVseSBzdWNjZWVkLgorICoKKyAqIEN1cnJlbmx5IHRoaXMgZnVuY3Rpb24gcmVnaXN0ZXJzIGludGVycnJ1cHQgaGFuZGxlciBmb3IgYSBwYXJ0aWN1bGFyIFNSCisgKiBpZiBzbWFydHJlZmxleCBjbGFzcyBkcml2ZXIgaXMgYWxyZWFkeSByZWdpc3RlcmVkIGFuZCBoYXMKKyAqIHJlcXVlc3RlZCBmb3IgaW50ZXJydXB0cyBhbmQgdGhlIFNSIGludGVycnVwdCBsaW5lIGluIHByZXNlbnQuCisgKi8KK3N0YXRpYyBpbnQgc3JfbGF0ZV9pbml0KHN0cnVjdCBvbWFwX3NyICpzcl9pbmZvKQoreworCWNoYXIgKm5hbWU7CisJc3RydWN0IG9tYXBfc3JfZGF0YSAqcGRhdGEgPSBzcl9pbmZvLT5wZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKm1lbTsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChzcl9jbGFzcy0+Y2xhc3NfdHlwZSA9PSBTUl9DTEFTUzIgJiYKKwkJc3JfY2xhc3MtPm5vdGlmeV9mbGFncyAmJiBzcl9pbmZvLT5pcnEpIHsKKworCQluYW1lID0ga3phbGxvYyhTTUFSVFJFRkxFWF9OQU1FX0xFTiArIDEsIEdGUF9LRVJORUwpOworCQlzdHJjcHkobmFtZSwgInNyXyIpOworCQlzdHJjYXQobmFtZSwgc3JfaW5mby0+dm9sdGRtLT5uYW1lKTsKKwkJcmV0ID0gcmVxdWVzdF9pcnEoc3JfaW5mby0+aXJxLCBzcl9pbnRlcnJ1cHQsCisJCQkJMCwgbmFtZSwgKHZvaWQgKilzcl9pbmZvKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyb3I7CisJfQorCisJaWYgKHBkYXRhICYmIHBkYXRhLT5lbmFibGVfb25faW5pdCkKKwkJc3Jfc3RhcnRfdmRkYXV0b2NvbXAoc3JfaW5mbyk7CisKKwlyZXR1cm4gcmV0OworCitlcnJvcjoKKwkJaW91bm1hcChzcl9pbmZvLT5iYXNlKTsKKwkJbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHNyX2luZm8tPnBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwkJcmVsZWFzZV9tZW1fcmVnaW9uKG1lbS0+c3RhcnQsIHJlc291cmNlX3NpemUobWVtKSk7CisJCWxpc3RfZGVsKCZzcl9pbmZvLT5ub2RlKTsKKwkJZGV2X2Vycigmc3JfaW5mby0+cGRldi0+ZGV2LCAiJXM6IEVSUk9SIGluIHJlZ2lzdGVyaW5nIgorCQkJImludGVycnVwdCBoYW5kbGVyLiBTbWFydHJlZmxleCB3aWxsIgorCQkJIm5vdCBmdW5jdGlvbiBhcyBkZXNpcmVkXG4iLCBfX2Z1bmNfXyk7CisJCWtmcmVlKHNyX2luZm8pOworCQlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBzcl92MV9kaXNhYmxlKHN0cnVjdCBvbWFwX3NyICpzcikKK3sKKwlpbnQgdGltZW91dCA9IDA7CisKKwkvKiBFbmFibGUgTUNVRGlzYWJsZUFja25vd2xlZGdlIGludGVycnVwdCAqLworCXNyX21vZGlmeV9yZWcoc3IsIEVSUkNPTkZJR19WMSwKKwkJCUVSUkNPTkZJR19NQ1VESVNBQ0tJTlRFTiwgRVJSQ09ORklHX01DVURJU0FDS0lOVEVOKTsKKworCS8qIFNSQ09ORklHIC0gZGlzYWJsZSBTUiAqLworCXNyX21vZGlmeV9yZWcoc3IsIFNSQ09ORklHLCBTUkNPTkZJR19TUkVOQUJMRSwgMHgwKTsKKworCS8qIERpc2FibGUgYWxsIG90aGVyIFNSIGludGVycnVwdHMgYW5kIGNsZWFyIHRoZSBzdGF0dXMgKi8KKwlzcl9tb2RpZnlfcmVnKHNyLCBFUlJDT05GSUdfVjEsCisJCQkoRVJSQ09ORklHX01DVUFDQ1VNSU5URU4gfCBFUlJDT05GSUdfTUNVVkFMSURJTlRFTiB8CisJCQlFUlJDT05GSUdfTUNVQk9VTkRJTlRFTiB8IEVSUkNPTkZJR19WUEJPVU5ESU5URU5fVjEpLAorCQkJKEVSUkNPTkZJR19NQ1VBQ0NVTUlOVFNUIHwgRVJSQ09ORklHX01DVVZBTElESU5UU1QgfAorCQkJRVJSQ09ORklHX01DVUJPVU5ESU5UU1QgfAorCQkJRVJSQ09ORklHX1ZQQk9VTkRJTlRTVF9WMSkpOworCisJLyoKKwkgKiBXYWl0IGZvciBTUiB0byBiZSBkaXNhYmxlZC4KKwkgKiB3YWl0IHVudGlsIEVSUkNPTkZJRy5NQ1VESVNBQ0tJTlRTVCA9IDEuIFR5cGljYWwgbGF0ZW5jeSBpcyAxdXMuCisJICovCisJb21hcF90ZXN0X3RpbWVvdXQoKHNyX3JlYWRfcmVnKHNyLCBFUlJDT05GSUdfVjEpICYKKwkJCUVSUkNPTkZJR19NQ1VESVNBQ0tJTlRTVCksIFNSX0RJU0FCTEVfVElNRU9VVCwKKwkJCXRpbWVvdXQpOworCisJaWYgKHRpbWVvdXQgPj0gU1JfRElTQUJMRV9USU1FT1VUKQorCQlkZXZfd2Fybigmc3ItPnBkZXYtPmRldiwgIiVzOiBTbWFydHJlZmxleCBkaXNhYmxlIHRpbWVkb3V0XG4iLAorCQkJX19mdW5jX18pOworCisJLyogRGlzYWJsZSBNQ1VEaXNhYmxlQWNrbm93bGVkZ2UgaW50ZXJydXB0ICYgY2xlYXIgcGVuZGluZyBpbnRlcnJ1cHQgKi8KKwlzcl9tb2RpZnlfcmVnKHNyLCBFUlJDT05GSUdfVjEsIEVSUkNPTkZJR19NQ1VESVNBQ0tJTlRFTiwKKwkJCUVSUkNPTkZJR19NQ1VESVNBQ0tJTlRTVCk7Cit9CisKK3N0YXRpYyB2b2lkIHNyX3YyX2Rpc2FibGUoc3RydWN0IG9tYXBfc3IgKnNyKQoreworCWludCB0aW1lb3V0ID0gMDsKKworCS8qIEVuYWJsZSBNQ1VEaXNhYmxlQWNrbm93bGVkZ2UgaW50ZXJydXB0ICovCisJc3Jfd3JpdGVfcmVnKHNyLCBJUlFFTkFCTEVfU0VULCBJUlFFTkFCTEVfTUNVRElTQUJMRUFDS0lOVCk7CisKKwkvKiBTUkNPTkZJRyAtIGRpc2FibGUgU1IgKi8KKwlzcl9tb2RpZnlfcmVnKHNyLCBTUkNPTkZJRywgU1JDT05GSUdfU1JFTkFCTEUsIDB4MCk7CisKKwkvKiBEaXNhYmxlIGFsbCBvdGhlciBTUiBpbnRlcnJ1cHRzIGFuZCBjbGVhciB0aGUgc3RhdHVzICovCisJc3JfbW9kaWZ5X3JlZyhzciwgRVJSQ09ORklHX1YyLCBFUlJDT05GSUdfVlBCT1VORElOVEVOX1YyLAorCQkJRVJSQ09ORklHX1ZQQk9VTkRJTlRTVF9WMik7CisJc3Jfd3JpdGVfcmVnKHNyLCBJUlFFTkFCTEVfQ0xSLCAoSVJRRU5BQkxFX01DVUFDQ1VNSU5UIHwKKwkJCUlSUUVOQUJMRV9NQ1VWQUxJRElOVCB8CisJCQlJUlFFTkFCTEVfTUNVQk9VTkRTSU5UKSk7CisJc3Jfd3JpdGVfcmVnKHNyLCBJUlFTVEFUVVMsIChJUlFTVEFUVVNfTUNVQUNDVU1JTlQgfAorCQkJSVJRU1RBVFVTX01DVkFMSURJTlQgfAorCQkJSVJRU1RBVFVTX01DQk9VTkRTSU5UKSk7CisKKwkvKgorCSAqIFdhaXQgZm9yIFNSIHRvIGJlIGRpc2FibGVkLgorCSAqIHdhaXQgdW50aWwgSVJRU1RBVFVTLk1DVURJU0FDS0lOVFNUID0gMS4gVHlwaWNhbCBsYXRlbmN5IGlzIDF1cy4KKwkgKi8KKwlvbWFwX3Rlc3RfdGltZW91dCgoc3JfcmVhZF9yZWcoc3IsIElSUVNUQVRVUykgJgorCQkJSVJRU1RBVFVTX01DVURJU0FCTEVBQ0tJTlQpLCBTUl9ESVNBQkxFX1RJTUVPVVQsCisJCQl0aW1lb3V0KTsKKworCWlmICh0aW1lb3V0ID49IFNSX0RJU0FCTEVfVElNRU9VVCkKKwkJZGV2X3dhcm4oJnNyLT5wZGV2LT5kZXYsICIlczogU21hcnRyZWZsZXggZGlzYWJsZSB0aW1lZG91dFxuIiwKKwkJCV9fZnVuY19fKTsKKworCS8qIERpc2FibGUgTUNVRGlzYWJsZUFja25vd2xlZGdlIGludGVycnVwdCAmIGNsZWFyIHBlbmRpbmcgaW50ZXJydXB0ICovCisJc3Jfd3JpdGVfcmVnKHNyLCBJUlFFTkFCTEVfQ0xSLCBJUlFFTkFCTEVfTUNVRElTQUJMRUFDS0lOVCk7CisJc3Jfd3JpdGVfcmVnKHNyLCBJUlFTVEFUVVMsIElSUVNUQVRVU19NQ1VESVNBQkxFQUNLSU5UKTsKK30KKworc3RhdGljIHUzMiBzcl9yZXRyaWV2ZV9udmFsdWUoc3RydWN0IG9tYXBfc3IgKnNyLCB1MzIgZWZ1c2Vfb2ZmcykKK3sKKwlpbnQgaTsKKworCWlmICghc3ItPm52YWx1ZV90YWJsZSkgeworCQlkZXZfd2Fybigmc3ItPnBkZXYtPmRldiwgIiVzOiBNaXNzaW5nIG50YXJnZXQgdmFsdWUgdGFibGVcbiIsCisJCQlfX2Z1bmNfXyk7CisJCXJldHVybiAwOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBzci0+bnZhbHVlX2NvdW50OyBpKyspIHsKKwkJaWYgKHNyLT5udmFsdWVfdGFibGVbaV0uZWZ1c2Vfb2ZmcyA9PSBlZnVzZV9vZmZzKQorCQkJcmV0dXJuIHNyLT5udmFsdWVfdGFibGVbaV0ubnZhbHVlOworCX0KKworCXJldHVybiAwOworfQorCisvKiBQdWJsaWMgRnVuY3Rpb25zICovCisKKy8qKgorICogc3JfY29uZmlndXJlX2VycmdlbigpIC0gQ29uZmlndXJlcyB0aGUgc21ydHJlZmxleCB0byBwZXJmb3JtIEFWUyB1c2luZyB0aGUKKyAqCQkJIGVycm9yIGdlbmVyYXRvciBtb2R1bGUuCisgKiBAdm9sdGRtOglWREQgcG9pbnRlciB0byB3aGljaCB0aGUgU1IgbW9kdWxlIHRvIGJlIGNvbmZpZ3VyZWQgYmVsb25ncyB0by4KKyAqCisgKiBUaGlzIEFQSSBpcyB0byBiZSBjYWxsZWQgZnJvbSB0aGUgc21hcnRyZWZsZXggY2xhc3MgZHJpdmVyIHRvCisgKiBjb25maWd1cmUgdGhlIGVycm9yIGdlbmVyYXRvciBtb2R1bGUgaW5zaWRlIHRoZSBzbWFydHJlZmxleCBtb2R1bGUuCisgKiBTUiBzZXR0aW5ncyBpZiB1c2luZyB0aGUgRVJST1IgbW9kdWxlIGluc2lkZSBTbWFydHJlZmxleC4KKyAqIFNSIENMQVNTIDMgYnkgZGVmYXVsdCB1c2VzIG9ubHkgdGhlIEVSUk9SIG1vZHVsZSB3aGVyZSBhcworICogU1IgQ0xBU1MgMiBjYW4gY2hvb3NlIGJldHdlZW4gRVJST1IgbW9kdWxlIGFuZCBNSU5NQVhBVkcKKyAqIG1vZHVsZS4gUmV0dXJucyAwIG9uIHN1Y2Nlc3MgYW5kIGVycm9yIHZhbHVlIGluIGNhc2Ugb2YgZmFpbHVyZS4KKyAqLworaW50IHNyX2NvbmZpZ3VyZV9lcnJnZW4oc3RydWN0IHZvbHRhZ2Vkb21haW4gKnZvbHRkbSkKK3sKKwl1MzIgc3JfY29uZmlnLCBzcl9lcnJjb25maWcsIGVycmNvbmZpZ19vZmZzLCB2cGJvdW5kaW50X2VuOworCXUzMiB2cGJvdW5kaW50X3N0LCBzZW5wX2VuID0gMCwgc2Vubl9lbiA9IDA7CisJdTggc2VucF9zaGlmdCwgc2Vubl9zaGlmdDsKKwlzdHJ1Y3Qgb21hcF9zciAqc3IgPSBfc3JfbG9va3VwKHZvbHRkbSk7CisKKwlpZiAoSVNfRVJSKHNyKSkgeworCQlwcl93YXJuaW5nKCIlczogb21hcF9zciBzdHJ1Y3QgZm9yIHNyXyVzIG5vdCBmb3VuZFxuIiwKKwkJCV9fZnVuY19fLCB2b2x0ZG0tPm5hbWUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoIXNyLT5jbGtfbGVuZ3RoKQorCQlzcl9zZXRfY2xrX2xlbmd0aChzcik7CisKKwlzZW5wX2VuID0gc3ItPnNlbnBfbW9kOworCXNlbm5fZW4gPSBzci0+c2Vubl9tb2Q7CisKKwlzcl9jb25maWcgPSAoc3ItPmNsa19sZW5ndGggPDwgU1JDT05GSUdfU1JDTEtMRU5HVEhfU0hJRlQpIHwKKwkJU1JDT05GSUdfU0VORU5BQkxFIHwgU1JDT05GSUdfRVJSR0VOX0VOOworCisJaWYgKHNyLT5pcF90eXBlID09IFNSX1RZUEVfVjEpIHsKKwkJc3JfY29uZmlnIHw9IFNSQ09ORklHX0RFTEFZQ1RSTDsKKwkJc2Vubl9zaGlmdCA9IFNSQ09ORklHX1NFTk5FTkFCTEVfVjFfU0hJRlQ7CisJCXNlbnBfc2hpZnQgPSBTUkNPTkZJR19TRU5QRU5BQkxFX1YxX1NISUZUOworCQllcnJjb25maWdfb2ZmcyA9IEVSUkNPTkZJR19WMTsKKwkJdnBib3VuZGludF9lbiA9IEVSUkNPTkZJR19WUEJPVU5ESU5URU5fVjE7CisJCXZwYm91bmRpbnRfc3QgPSBFUlJDT05GSUdfVlBCT1VORElOVFNUX1YxOworCX0gZWxzZSBpZiAoc3ItPmlwX3R5cGUgPT0gU1JfVFlQRV9WMikgeworCQlzZW5uX3NoaWZ0ID0gU1JDT05GSUdfU0VOTkVOQUJMRV9WMl9TSElGVDsKKwkJc2VucF9zaGlmdCA9IFNSQ09ORklHX1NFTlBFTkFCTEVfVjJfU0hJRlQ7CisJCWVycmNvbmZpZ19vZmZzID0gRVJSQ09ORklHX1YyOworCQl2cGJvdW5kaW50X2VuID0gRVJSQ09ORklHX1ZQQk9VTkRJTlRFTl9WMjsKKwkJdnBib3VuZGludF9zdCA9IEVSUkNPTkZJR19WUEJPVU5ESU5UU1RfVjI7CisJfSBlbHNlIHsKKwkJZGV2X2Vycigmc3ItPnBkZXYtPmRldiwgIiVzOiBUcnlpbmcgdG8gQ29uZmlndXJlIHNtYXJ0cmVmbGV4IgorCQkJIm1vZHVsZSB3aXRob3V0IHNwZWNpZnlpbmcgdGhlIGlwXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXNyX2NvbmZpZyB8PSAoKHNlbm5fZW4gPDwgc2Vubl9zaGlmdCkgfCAoc2VucF9lbiA8PCBzZW5wX3NoaWZ0KSk7CisJc3Jfd3JpdGVfcmVnKHNyLCBTUkNPTkZJRywgc3JfY29uZmlnKTsKKwlzcl9lcnJjb25maWcgPSAoc3ItPmVycl93ZWlnaHQgPDwgRVJSQ09ORklHX0VSUldFSUdIVF9TSElGVCkgfAorCQkoc3ItPmVycl9tYXhsaW1pdCA8PCBFUlJDT05GSUdfRVJSTUFYTElNSVRfU0hJRlQpIHwKKwkJKHNyLT5lcnJfbWlubGltaXQgPDwgIEVSUkNPTkZJR19FUlJNSU5MSU1JVF9TSElGVCk7CisJc3JfbW9kaWZ5X3JlZyhzciwgZXJyY29uZmlnX29mZnMsIChTUl9FUlJXRUlHSFRfTUFTSyB8CisJCVNSX0VSUk1BWExJTUlUX01BU0sgfCBTUl9FUlJNSU5MSU1JVF9NQVNLKSwKKwkJc3JfZXJyY29uZmlnKTsKKworCS8qIEVuYWJsaW5nIHRoZSBpbnRlcnJ1cHRzIGlmIHRoZSBFUlJPUiBtb2R1bGUgaXMgdXNlZCAqLworCXNyX21vZGlmeV9yZWcoc3IsIGVycmNvbmZpZ19vZmZzLAorCQl2cGJvdW5kaW50X2VuLCAodnBib3VuZGludF9lbiB8IHZwYm91bmRpbnRfc3QpKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIHNyX2NvbmZpZ3VyZV9taW5tYXgoKSAtIENvbmZpZ3VyZXMgdGhlIHNtcnRyZWZsZXggdG8gcGVyZm9ybSBBVlMgdXNpbmcgdGhlCisgKgkJCSBtaW5tYXhhdmcgbW9kdWxlLgorICogQHZvbHRkbToJVkREIHBvaW50ZXIgdG8gd2hpY2ggdGhlIFNSIG1vZHVsZSB0byBiZSBjb25maWd1cmVkIGJlbG9uZ3MgdG8uCisgKgorICogVGhpcyBBUEkgaXMgdG8gYmUgY2FsbGVkIGZyb20gdGhlIHNtYXJ0cmVmbGV4IGNsYXNzIGRyaXZlciB0bworICogY29uZmlndXJlIHRoZSBtaW5tYXhhdmcgbW9kdWxlIGluc2lkZSB0aGUgc21hcnRyZWZsZXggbW9kdWxlLgorICogU1Igc2V0dGluZ3MgaWYgdXNpbmcgdGhlIEVSUk9SIG1vZHVsZSBpbnNpZGUgU21hcnRyZWZsZXguCisgKiBTUiBDTEFTUyAzIGJ5IGRlZmF1bHQgdXNlcyBvbmx5IHRoZSBFUlJPUiBtb2R1bGUgd2hlcmUgYXMKKyAqIFNSIENMQVNTIDIgY2FuIGNob29zZSBiZXR3ZWVuIEVSUk9SIG1vZHVsZSBhbmQgTUlOTUFYQVZHCisgKiBtb2R1bGUuIFJldHVybnMgMCBvbiBzdWNjZXNzIGFuZCBlcnJvciB2YWx1ZSBpbiBjYXNlIG9mIGZhaWx1cmUuCisgKi8KK2ludCBzcl9jb25maWd1cmVfbWlubWF4KHN0cnVjdCB2b2x0YWdlZG9tYWluICp2b2x0ZG0pCit7CisJdTMyIHNyX2NvbmZpZywgc3JfYXZnd3Q7CisJdTMyIHNlbnBfZW4gPSAwLCBzZW5uX2VuID0gMDsKKwl1OCBzZW5wX3NoaWZ0LCBzZW5uX3NoaWZ0OworCXN0cnVjdCBvbWFwX3NyICpzciA9IF9zcl9sb29rdXAodm9sdGRtKTsKKworCWlmIChJU19FUlIoc3IpKSB7CisJCXByX3dhcm5pbmcoIiVzOiBvbWFwX3NyIHN0cnVjdCBmb3Igc3JfJXMgbm90IGZvdW5kXG4iLAorCQkJX19mdW5jX18sIHZvbHRkbS0+bmFtZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICghc3ItPmNsa19sZW5ndGgpCisJCXNyX3NldF9jbGtfbGVuZ3RoKHNyKTsKKworCXNlbnBfZW4gPSBzci0+c2VucF9tb2Q7CisJc2Vubl9lbiA9IHNyLT5zZW5uX21vZDsKKworCXNyX2NvbmZpZyA9IChzci0+Y2xrX2xlbmd0aCA8PCBTUkNPTkZJR19TUkNMS0xFTkdUSF9TSElGVCkgfAorCQlTUkNPTkZJR19TRU5FTkFCTEUgfAorCQkoc3ItPmFjY3VtX2RhdGEgPDwgU1JDT05GSUdfQUNDVU1EQVRBX1NISUZUKTsKKworCWlmIChzci0+aXBfdHlwZSA9PSBTUl9UWVBFX1YxKSB7CisJCXNyX2NvbmZpZyB8PSBTUkNPTkZJR19ERUxBWUNUUkw7CisJCXNlbm5fc2hpZnQgPSBTUkNPTkZJR19TRU5ORU5BQkxFX1YxX1NISUZUOworCQlzZW5wX3NoaWZ0ID0gU1JDT05GSUdfU0VOUEVOQUJMRV9WMV9TSElGVDsKKwl9IGVsc2UgaWYgKHNyLT5pcF90eXBlID09IFNSX1RZUEVfVjIpIHsKKwkJc2Vubl9zaGlmdCA9IFNSQ09ORklHX1NFTk5FTkFCTEVfVjJfU0hJRlQ7CisJCXNlbnBfc2hpZnQgPSBTUkNPTkZJR19TRU5QRU5BQkxFX1YyX1NISUZUOworCX0gZWxzZSB7CisJCWRldl9lcnIoJnNyLT5wZGV2LT5kZXYsICIlczogVHJ5aW5nIHRvIENvbmZpZ3VyZSBzbWFydHJlZmxleCIKKwkJCSJtb2R1bGUgd2l0aG91dCBzcGVjaWZ5aW5nIHRoZSBpcFxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzcl9jb25maWcgfD0gKChzZW5uX2VuIDw8IHNlbm5fc2hpZnQpIHwgKHNlbnBfZW4gPDwgc2VucF9zaGlmdCkpOworCXNyX3dyaXRlX3JlZyhzciwgU1JDT05GSUcsIHNyX2NvbmZpZyk7CisJc3JfYXZnd3QgPSAoc3ItPnNlbnBfYXZnd2VpZ2h0IDw8IEFWR1dFSUdIVF9TRU5QQVZHV0VJR0hUX1NISUZUKSB8CisJCShzci0+c2Vubl9hdmd3ZWlnaHQgPDwgQVZHV0VJR0hUX1NFTk5BVkdXRUlHSFRfU0hJRlQpOworCXNyX3dyaXRlX3JlZyhzciwgQVZHV0VJR0hULCBzcl9hdmd3dCk7CisKKwkvKgorCSAqIEVuYWJsaW5nIHRoZSBpbnRlcnJ1cHRzIGlmIE1JTk1BWEFWRyBtb2R1bGUgaXMgdXNlZC4KKwkgKiBUT0RPOiBjaGVjayBpZiBhbGwgdGhlIGludGVycnVwdHMgYXJlIG1hbmRhdG9yeQorCSAqLworCWlmIChzci0+aXBfdHlwZSA9PSBTUl9UWVBFX1YxKSB7CisJCXNyX21vZGlmeV9yZWcoc3IsIEVSUkNPTkZJR19WMSwKKwkJCShFUlJDT05GSUdfTUNVQUNDVU1JTlRFTiB8IEVSUkNPTkZJR19NQ1VWQUxJRElOVEVOIHwKKwkJCUVSUkNPTkZJR19NQ1VCT1VORElOVEVOKSwKKwkJCShFUlJDT05GSUdfTUNVQUNDVU1JTlRFTiB8IEVSUkNPTkZJR19NQ1VBQ0NVTUlOVFNUIHwKKwkJCSBFUlJDT05GSUdfTUNVVkFMSURJTlRFTiB8IEVSUkNPTkZJR19NQ1VWQUxJRElOVFNUIHwKKwkJCSBFUlJDT05GSUdfTUNVQk9VTkRJTlRFTiB8IEVSUkNPTkZJR19NQ1VCT1VORElOVFNUKSk7CisJfSBlbHNlIGlmIChzci0+aXBfdHlwZSA9PSBTUl9UWVBFX1YyKSB7CisJCXNyX3dyaXRlX3JlZyhzciwgSVJRU1RBVFVTLAorCQkJSVJRU1RBVFVTX01DVUFDQ1VNSU5UIHwgSVJRU1RBVFVTX01DVkFMSURJTlQgfAorCQkJSVJRU1RBVFVTX01DQk9VTkRTSU5UIHwgSVJRU1RBVFVTX01DVURJU0FCTEVBQ0tJTlQpOworCQlzcl93cml0ZV9yZWcoc3IsIElSUUVOQUJMRV9TRVQsCisJCQlJUlFFTkFCTEVfTUNVQUNDVU1JTlQgfCBJUlFFTkFCTEVfTUNVVkFMSURJTlQgfAorCQkJSVJRRU5BQkxFX01DVUJPVU5EU0lOVCB8IElSUUVOQUJMRV9NQ1VESVNBQkxFQUNLSU5UKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBzcl9lbmFibGUoKSAtIEVuYWJsZXMgdGhlIHNtYXJ0cmVmbGV4IG1vZHVsZS4KKyAqIEB2b2x0ZG06CVZERCBwb2ludGVyIHRvIHdoaWNoIHRoZSBTUiBtb2R1bGUgdG8gYmUgY29uZmlndXJlZCBiZWxvbmdzIHRvLgorICogQHZvbHQ6CVRoZSB2b2x0YWdlIGF0IHdoaWNoIHRoZSBWb2x0YWdlIGRvbWFpbiBhc3NvY2lhdGVkIHdpdGgKKyAqCQl0aGUgc21hcnRyZWZsZXggbW9kdWxlIGlzIG9wZXJhdGluZyBhdC4KKyAqCQlUaGlzIGlzIHJlcXVpcmVkIG9ubHkgdG8gcHJvZ3JhbSB0aGUgY29ycmVjdCBOdGFyZ2V0IHZhbHVlLgorICoKKyAqIFRoaXMgQVBJIGlzIHRvIGJlIGNhbGxlZCBmcm9tIHRoZSBzbWFydHJlZmxleCBjbGFzcyBkcml2ZXIgdG8KKyAqIGVuYWJsZSBhIHNtYXJ0cmVmbGV4IG1vZHVsZS4gUmV0dXJucyAwIG9uIHN1Y2Nlc3MuIFJldHVybnMgZXJyb3IKKyAqIHZhbHVlIGlmIHRoZSB2b2x0YWdlIHBhc3NlZCBpcyB3cm9uZyBvciBpZiBudGFyZ2V0IHZhbHVlIGlzIHdyb25nLgorICovCitpbnQgc3JfZW5hYmxlKHN0cnVjdCB2b2x0YWdlZG9tYWluICp2b2x0ZG0sIHVuc2lnbmVkIGxvbmcgdm9sdCkKK3sKKwl1MzIgbnZhbHVlX3JlY2lwcm9jYWw7CisJc3RydWN0IG9tYXBfdm9sdF9kYXRhICp2b2x0X2RhdGE7CisJc3RydWN0IG9tYXBfc3IgKnNyID0gX3NyX2xvb2t1cCh2b2x0ZG0pOworCWludCByZXQ7CisKKwlpZiAoSVNfRVJSKHNyKSkgeworCQlwcl93YXJuaW5nKCIlczogb21hcF9zciBzdHJ1Y3QgZm9yIHNyXyVzIG5vdCBmb3VuZFxuIiwKKwkJCV9fZnVuY19fLCB2b2x0ZG0tPm5hbWUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl2b2x0X2RhdGEgPSBvbWFwX3ZvbHRhZ2VfZ2V0X3ZvbHRkYXRhKHNyLT52b2x0ZG0sIHZvbHQpOworCisJaWYgKElTX0VSUih2b2x0X2RhdGEpKSB7CisJCWRldl93YXJuKCZzci0+cGRldi0+ZGV2LCAiJXM6IFVuYWJsZSB0byBnZXQgdm9sdGFnZSB0YWJsZSIKKwkJCSJmb3Igbm9taW5hbCB2b2x0YWdlICVsZFxuIiwgX19mdW5jX18sIHZvbHQpOworCQlyZXR1cm4gLUVOT0RBVEE7CisJfQorCisJbnZhbHVlX3JlY2lwcm9jYWwgPSBzcl9yZXRyaWV2ZV9udmFsdWUoc3IsIHZvbHRfZGF0YS0+c3JfZWZ1c2Vfb2Zmcyk7CisKKwlpZiAoIW52YWx1ZV9yZWNpcHJvY2FsKSB7CisJCWRldl93YXJuKCZzci0+cGRldi0+ZGV2LCAiJXM6IE5WQUxVRSA9IDAgYXQgdm9sdGFnZSAlbGRcbiIsCisJCQlfX2Z1bmNfXywgdm9sdCk7CisJCXJldHVybiAtRU5PREFUQTsKKwl9CisKKwkvKiBlcnJtaW5saW1pdCBpcyBvcHAgZGVwZW5kZW50IGFuZCBoZW5jZSBsaW5rZWQgdG8gdm9sdGFnZSAqLworCXNyLT5lcnJfbWlubGltaXQgPSB2b2x0X2RhdGEtPnNyX2Vycm1pbmxpbWl0OworCisJcG1fcnVudGltZV9nZXRfc3luYygmc3ItPnBkZXYtPmRldik7CisKKwkvKiBDaGVjayBpZiBTUiBpcyBhbHJlYWR5IGVuYWJsZWQuIElmIHllcyBkbyBub3RoaW5nICovCisJaWYgKHNyX3JlYWRfcmVnKHNyLCBTUkNPTkZJRykgJiBTUkNPTkZJR19TUkVOQUJMRSkKKwkJcmV0dXJuIDA7CisKKwkvKiBDb25maWd1cmUgU1IgKi8KKwlyZXQgPSBzcl9jbGFzcy0+Y29uZmlndXJlKHZvbHRkbSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXNyX3dyaXRlX3JlZyhzciwgTlZBTFVFUkVDSVBST0NBTCwgbnZhbHVlX3JlY2lwcm9jYWwpOworCisJLyogU1JDT05GSUcgLSBlbmFibGUgU1IgKi8KKwlzcl9tb2RpZnlfcmVnKHNyLCBTUkNPTkZJRywgU1JDT05GSUdfU1JFTkFCTEUsIFNSQ09ORklHX1NSRU5BQkxFKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBzcl9kaXNhYmxlKCkgLSBEaXNhYmxlcyB0aGUgc21hcnRyZWZsZXggbW9kdWxlLgorICogQHZvbHRkbToJVkREIHBvaW50ZXIgdG8gd2hpY2ggdGhlIFNSIG1vZHVsZSB0byBiZSBjb25maWd1cmVkIGJlbG9uZ3MgdG8uCisgKgorICogVGhpcyBBUEkgaXMgdG8gYmUgY2FsbGVkIGZyb20gdGhlIHNtYXJ0cmVmbGV4IGNsYXNzIGRyaXZlciB0bworICogZGlzYWJsZSBhIHNtYXJ0cmVmbGV4IG1vZHVsZS4KKyAqLwordm9pZCBzcl9kaXNhYmxlKHN0cnVjdCB2b2x0YWdlZG9tYWluICp2b2x0ZG0pCit7CisJc3RydWN0IG9tYXBfc3IgKnNyID0gX3NyX2xvb2t1cCh2b2x0ZG0pOworCisJaWYgKElTX0VSUihzcikpIHsKKwkJcHJfd2FybmluZygiJXM6IG9tYXBfc3Igc3RydWN0IGZvciBzcl8lcyBub3QgZm91bmRcbiIsCisJCQlfX2Z1bmNfXywgdm9sdGRtLT5uYW1lKTsKKwkJcmV0dXJuOworCX0KKworCS8qIENoZWNrIGlmIFNSIGNsb2NrcyBhcmUgYWxyZWFkeSBkaXNhYmxlZC4gSWYgeWVzIGRvIG5vdGhpbmcgKi8KKwlpZiAocG1fcnVudGltZV9zdXNwZW5kZWQoJnNyLT5wZGV2LT5kZXYpKQorCQlyZXR1cm47CisKKwkvKgorCSAqIERpc2FibGUgU1IgaWYgb25seSBpdCBpcyBpbmRlZWQgZW5hYmxlZC4gRWxzZSBqdXN0CisJICogZGlzYWJsZSB0aGUgY2xvY2tzLgorCSAqLworCWlmIChzcl9yZWFkX3JlZyhzciwgU1JDT05GSUcpICYgU1JDT05GSUdfU1JFTkFCTEUpIHsKKwkJaWYgKHNyLT5pcF90eXBlID09IFNSX1RZUEVfVjEpCisJCQlzcl92MV9kaXNhYmxlKHNyKTsKKwkJZWxzZSBpZiAoc3ItPmlwX3R5cGUgPT0gU1JfVFlQRV9WMikKKwkJCXNyX3YyX2Rpc2FibGUoc3IpOworCX0KKworCXBtX3J1bnRpbWVfcHV0X3N5bmMoJnNyLT5wZGV2LT5kZXYpOworfQorCisvKioKKyAqIHNyX3JlZ2lzdGVyX2NsYXNzKCkgLSBBUEkgdG8gcmVnaXN0ZXIgYSBzbWFydHJlZmxleCBjbGFzcyBwYXJhbWV0ZXJzLgorICogQGNsYXNzX2RhdGE6CVRoZSBzdHJ1Y3R1cmUgY29udGFpbmluZyB2YXJpb3VzIHNyIGNsYXNzIHNwZWNpZmljIGRhdGEuCisgKgorICogVGhpcyBBUEkgaXMgdG8gYmUgY2FsbGVkIGJ5IHRoZSBzbWFydHJlZmxleCBjbGFzcyBkcml2ZXIgdG8gcmVnaXN0ZXIgaXRzZWxmCisgKiB3aXRoIHRoZSBzbWFydHJlZmxleCBkcml2ZXIgZHVyaW5nIGluaXQuIFJldHVybnMgMCBvbiBzdWNjZXNzIGVsc2UgdGhlCisgKiBlcnJvciB2YWx1ZS4KKyAqLworaW50IHNyX3JlZ2lzdGVyX2NsYXNzKHN0cnVjdCBvbWFwX3NyX2NsYXNzX2RhdGEgKmNsYXNzX2RhdGEpCit7CisJc3RydWN0IG9tYXBfc3IgKnNyX2luZm87CisKKwlpZiAoIWNsYXNzX2RhdGEpIHsKKwkJcHJfd2FybmluZygiJXM6LCBTbWFydHJlZmxleCBjbGFzcyBkYXRhIHBhc3NlZCBpcyBOVUxMXG4iLAorCQkJX19mdW5jX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoc3JfY2xhc3MpIHsKKwkJcHJfd2FybmluZygiJXM6IFNtYXJ0cmVmbGV4IGNsYXNzIGRyaXZlciBhbHJlYWR5IHJlZ2lzdGVyZWRcbiIsCisJCQlfX2Z1bmNfXyk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJc3JfY2xhc3MgPSBjbGFzc19kYXRhOworCisJLyoKKwkgKiBDYWxsIGludG8gbGF0ZSBpbml0IHRvIGRvIGludGlhbGl6YXRpb25zIHRoYXQgcmVxdWlyZQorCSAqIGJvdGggc3IgZHJpdmVyIGFuZCBzciBjbGFzcyBkcml2ZXIgdG8gYmUgaW5pdGlhbGxpemVkLgorCSAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoc3JfaW5mbywgJnNyX2xpc3QsIG5vZGUpCisJCXNyX2xhdGVfaW5pdChzcl9pbmZvKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIG9tYXBfc3JfZW5hYmxlKCkgLSAgQVBJIHRvIGVuYWJsZSBTUiBjbG9ja3MgYW5kIHRvIGNhbGwgaW50byB0aGUKKyAqCQkJcmVnaXN0ZXJlZCBzbWFydHJlZmxleCBjbGFzcyBlbmFibGUgQVBJLgorICogQHZvbHRkbToJVkREIHBvaW50ZXIgdG8gd2hpY2ggdGhlIFNSIG1vZHVsZSB0byBiZSBjb25maWd1cmVkIGJlbG9uZ3MgdG8uCisgKgorICogVGhpcyBBUEkgaXMgdG8gYmUgY2FsbGVkIGZyb20gdGhlIGtlcm5lbCBpbiBvcmRlciB0byBlbmFibGUKKyAqIGEgcGFydGljdWxhciBzbWFydHJlZmxleCBtb2R1bGUuIFRoaXMgQVBJIHdpbGwgZG8gdGhlIGluaXRpYWwKKyAqIGNvbmZpZ3VyYXRpb25zIHRvIHR1cm4gb24gdGhlIHNtYXJ0cmVmbGV4IG1vZHVsZSBhbmQgaW4gdHVybiBjYWxsCisgKiBpbnRvIHRoZSByZWdpc3RlcmVkIHNtYXJ0cmVmbGV4IGNsYXNzIGVuYWJsZSBBUEkuCisgKi8KK3ZvaWQgb21hcF9zcl9lbmFibGUoc3RydWN0IHZvbHRhZ2Vkb21haW4gKnZvbHRkbSkKK3sKKwlzdHJ1Y3Qgb21hcF9zciAqc3IgPSBfc3JfbG9va3VwKHZvbHRkbSk7CisKKwlpZiAoSVNfRVJSKHNyKSkgeworCQlwcl93YXJuaW5nKCIlczogb21hcF9zciBzdHJ1Y3QgZm9yIHNyXyVzIG5vdCBmb3VuZFxuIiwKKwkJCV9fZnVuY19fLCB2b2x0ZG0tPm5hbWUpOworCQlyZXR1cm47CisJfQorCisJaWYgKCFzci0+YXV0b2NvbXBfYWN0aXZlKQorCQlyZXR1cm47CisKKwlpZiAoIXNyX2NsYXNzIHx8ICEoc3JfY2xhc3MtPmVuYWJsZSkgfHwgIShzcl9jbGFzcy0+Y29uZmlndXJlKSkgeworCQlkZXZfd2Fybigmc3ItPnBkZXYtPmRldiwgIiVzOiBzbWFydHJlZmxleCBjbGFzcyBkcml2ZXIgbm90IgorCQkJInJlZ2lzdGVyZWRcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuOworCX0KKworCXNyX2NsYXNzLT5lbmFibGUodm9sdGRtKTsKK30KKworLyoqCisgKiBvbWFwX3NyX2Rpc2FibGUoKSAtIEFQSSB0byBkaXNhYmxlIFNSIHdpdGhvdXQgcmVzZXR0aW5nIHRoZSB2b2x0YWdlCisgKgkJCXByb2Nlc3NvciB2b2x0YWdlCisgKiBAdm9sdGRtOglWREQgcG9pbnRlciB0byB3aGljaCB0aGUgU1IgbW9kdWxlIHRvIGJlIGNvbmZpZ3VyZWQgYmVsb25ncyB0by4KKyAqCisgKiBUaGlzIEFQSSBpcyB0byBiZSBjYWxsZWQgZnJvbSB0aGUga2VybmVsIGluIG9yZGVyIHRvIGRpc2FibGUKKyAqIGEgcGFydGljdWxhciBzbWFydHJlZmxleCBtb2R1bGUuIFRoaXMgQVBJIHdpbGwgaW4gdHVybiBjYWxsCisgKiBpbnRvIHRoZSByZWdpc3RlcmVkIHNtYXJ0cmVmbGV4IGNsYXNzIGRpc2FibGUgQVBJLiBUaGlzIEFQSSB3aWxsIHRlbGwKKyAqIHRoZSBzbWFydHJlZmxleCBjbGFzcyBkaXNhYmxlIG5vdCB0byByZXNldCB0aGUgVlAgdm9sdGFnZSBhZnRlcgorICogZGlzYWJsaW5nIHNtYXJ0cmVmbGV4LgorICovCit2b2lkIG9tYXBfc3JfZGlzYWJsZShzdHJ1Y3Qgdm9sdGFnZWRvbWFpbiAqdm9sdGRtKQoreworCXN0cnVjdCBvbWFwX3NyICpzciA9IF9zcl9sb29rdXAodm9sdGRtKTsKKworCWlmIChJU19FUlIoc3IpKSB7CisJCXByX3dhcm5pbmcoIiVzOiBvbWFwX3NyIHN0cnVjdCBmb3Igc3JfJXMgbm90IGZvdW5kXG4iLAorCQkJX19mdW5jX18sIHZvbHRkbS0+bmFtZSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoIXNyLT5hdXRvY29tcF9hY3RpdmUpCisJCXJldHVybjsKKworCWlmICghc3JfY2xhc3MgfHwgIShzcl9jbGFzcy0+ZGlzYWJsZSkpIHsKKwkJZGV2X3dhcm4oJnNyLT5wZGV2LT5kZXYsICIlczogc21hcnRyZWZsZXggY2xhc3MgZHJpdmVyIG5vdCIKKwkJCSJyZWdpc3RlcmVkXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisKKwlzcl9jbGFzcy0+ZGlzYWJsZSh2b2x0ZG0sIDApOworfQorCisvKioKKyAqIG9tYXBfc3JfZGlzYWJsZV9yZXNldF92b2x0KCkgLSBBUEkgdG8gZGlzYWJsZSBTUiBhbmQgcmVzZXQgdGhlCisgKgkJCQl2b2x0YWdlIHByb2Nlc3NvciB2b2x0YWdlCisgKiBAdm9sdGRtOglWREQgcG9pbnRlciB0byB3aGljaCB0aGUgU1IgbW9kdWxlIHRvIGJlIGNvbmZpZ3VyZWQgYmVsb25ncyB0by4KKyAqCisgKiBUaGlzIEFQSSBpcyB0byBiZSBjYWxsZWQgZnJvbSB0aGUga2VybmVsIGluIG9yZGVyIHRvIGRpc2FibGUKKyAqIGEgcGFydGljdWxhciBzbWFydHJlZmxleCBtb2R1bGUuIFRoaXMgQVBJIHdpbGwgaW4gdHVybiBjYWxsCisgKiBpbnRvIHRoZSByZWdpc3RlcmVkIHNtYXJ0cmVmbGV4IGNsYXNzIGRpc2FibGUgQVBJLiBUaGlzIEFQSSB3aWxsIHRlbGwKKyAqIHRoZSBzbWFydHJlZmxleCBjbGFzcyBkaXNhYmxlIHRvIHJlc2V0IHRoZSBWUCB2b2x0YWdlIGFmdGVyCisgKiBkaXNhYmxpbmcgc21hcnRyZWZsZXguCisgKi8KK3ZvaWQgb21hcF9zcl9kaXNhYmxlX3Jlc2V0X3ZvbHQoc3RydWN0IHZvbHRhZ2Vkb21haW4gKnZvbHRkbSkKK3sKKwlzdHJ1Y3Qgb21hcF9zciAqc3IgPSBfc3JfbG9va3VwKHZvbHRkbSk7CisKKwlpZiAoSVNfRVJSKHNyKSkgeworCQlwcl93YXJuaW5nKCIlczogb21hcF9zciBzdHJ1Y3QgZm9yIHNyXyVzIG5vdCBmb3VuZFxuIiwKKwkJCV9fZnVuY19fLCB2b2x0ZG0tPm5hbWUpOworCQlyZXR1cm47CisJfQorCisJaWYgKCFzci0+YXV0b2NvbXBfYWN0aXZlKQorCQlyZXR1cm47CisKKwlpZiAoIXNyX2NsYXNzIHx8ICEoc3JfY2xhc3MtPmRpc2FibGUpKSB7CisJCWRldl93YXJuKCZzci0+cGRldi0+ZGV2LCAiJXM6IHNtYXJ0cmVmbGV4IGNsYXNzIGRyaXZlciBub3QiCisJCQkicmVnaXN0ZXJlZFxuIiwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCisJc3JfY2xhc3MtPmRpc2FibGUodm9sdGRtLCAxKTsKK30KKworLyoqCisgKiBvbWFwX3NyX3JlZ2lzdGVyX3BtaWMoKSAtIEFQSSB0byByZWdpc3RlciBwbWljIHNwZWNpZmljIGluZm8uCisgKiBAcG1pY19kYXRhOglUaGUgc3RydWN0dXJlIGNvbnRhaW5pbmcgcG1pYyBzcGVjaWZpYyBkYXRhLgorICoKKyAqIFRoaXMgQVBJIGlzIHRvIGJlIGNhbGxlZCBmcm9tIHRoZSBQTUlDIHNwZWNpZmljIGNvZGUgdG8gcmVnaXN0ZXIgd2l0aAorICogc21hcnRyZWZsZXggZHJpdmVyIHBtaWMgc3BlY2lmaWMgaW5mby4gQ3VycmVudGx5IHRoZSBvbmx5IGluZm8gcmVxdWlyZWQKKyAqIGlzIHRoZSBzbWFydHJlZmxleCBpbml0IG9uIHRoZSBQTUlDIHNpZGUuCisgKi8KK3ZvaWQgb21hcF9zcl9yZWdpc3Rlcl9wbWljKHN0cnVjdCBvbWFwX3NyX3BtaWNfZGF0YSAqcG1pY19kYXRhKQoreworCWlmICghcG1pY19kYXRhKSB7CisJCXByX3dhcm5pbmcoIiVzOiBUcnlpbmcgdG8gcmVnaXN0ZXIgTlVMTCBQTUlDIGRhdGEgc3RydWN0dXJlIgorCQkJIndpdGggc21hcnRyZWZsZXhcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuOworCX0KKworCXNyX3BtaWNfZGF0YSA9IHBtaWNfZGF0YTsKK30KKworLyogUE0gRGVidWcgRnMgZW50ZXJpZXMgdG8gZW5hYmxlIGRpc2FibGUgc21hcnRyZWZsZXguICovCitzdGF0aWMgaW50IG9tYXBfc3JfYXV0b2NvbXBfc2hvdyh2b2lkICpkYXRhLCB1NjQgKnZhbCkKK3sKKwlzdHJ1Y3Qgb21hcF9zciAqc3JfaW5mbyA9IChzdHJ1Y3Qgb21hcF9zciAqKSBkYXRhOworCisJaWYgKCFzcl9pbmZvKSB7CisJCXByX3dhcm5pbmcoIiVzOiBvbWFwX3NyIHN0cnVjdCBmb3Igc3JfJXMgbm90IGZvdW5kXG4iLAorCQkJX19mdW5jX18sIHNyX2luZm8tPnZvbHRkbS0+bmFtZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCSp2YWwgPSBzcl9pbmZvLT5hdXRvY29tcF9hY3RpdmU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvbWFwX3NyX2F1dG9jb21wX3N0b3JlKHZvaWQgKmRhdGEsIHU2NCB2YWwpCit7CisJc3RydWN0IG9tYXBfc3IgKnNyX2luZm8gPSAoc3RydWN0IG9tYXBfc3IgKikgZGF0YTsKKworCWlmICghc3JfaW5mbykgeworCQlwcl93YXJuaW5nKCIlczogb21hcF9zciBzdHJ1Y3QgZm9yIHNyXyVzIG5vdCBmb3VuZFxuIiwKKwkJCV9fZnVuY19fLCBzcl9pbmZvLT52b2x0ZG0tPm5hbWUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBTYW5pdHkgY2hlY2sgKi8KKwlpZiAodmFsICYmICh2YWwgIT0gMSkpIHsKKwkJcHJfd2FybmluZygiJXM6IEludmFsaWQgYXJndW1lbnQgJWxsZFxuIiwgX19mdW5jX18sIHZhbCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICghdmFsKQorCQlzcl9zdG9wX3ZkZGF1dG9jb21wKHNyX2luZm8pOworCWVsc2UKKwkJc3Jfc3RhcnRfdmRkYXV0b2NvbXAoc3JfaW5mbyk7CisKKwlyZXR1cm4gMDsKK30KKworREVGSU5FX1NJTVBMRV9BVFRSSUJVVEUocG1fc3JfZm9wcywgb21hcF9zcl9hdXRvY29tcF9zaG93LAorCQlvbWFwX3NyX2F1dG9jb21wX3N0b3JlLCAiJWxsdVxuIik7CisKK3N0YXRpYyBpbnQgX19pbml0IG9tYXBfc3JfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgb21hcF9zciAqc3JfaW5mbyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBvbWFwX3NyKSwgR0ZQX0tFUk5FTCk7CisJc3RydWN0IG9tYXBfc3JfZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKm1lbSwgKmlycTsKKwlzdHJ1Y3QgZGVudHJ5ICp2ZGRfZGJnX2RpciwgKmRiZ19kaXIsICpudmFsdWVfZGlyOworCXN0cnVjdCBvbWFwX3ZvbHRfZGF0YSAqdm9sdF9kYXRhOworCWludCBpLCByZXQgPSAwOworCisJaWYgKCFzcl9pbmZvKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIiVzOiB1bmFibGUgdG8gYWxsb2NhdGUgc3JfaW5mb1xuIiwKKwkJCV9fZnVuY19fKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJaWYgKCFwZGF0YSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICIlczogcGxhdGZvcm0gZGF0YSBtaXNzaW5nXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW1lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFtZW0pIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiJXM6IG5vIG1lbSByZXNvdXJjZVxuIiwgX19mdW5jX18pOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGVycl9mcmVlX2RldmluZm87CisJfQorCisJaXJxID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSVJRLCAwKTsKKworCXBtX3J1bnRpbWVfZW5hYmxlKCZwZGV2LT5kZXYpOworCisJc3JfaW5mby0+cGRldiA9IHBkZXY7CisJc3JfaW5mby0+c3JpZCA9IHBkZXYtPmlkOworCXNyX2luZm8tPnZvbHRkbSA9IHBkYXRhLT52b2x0ZG07CisJc3JfaW5mby0+bnZhbHVlX3RhYmxlID0gcGRhdGEtPm52YWx1ZV90YWJsZTsKKwlzcl9pbmZvLT5udmFsdWVfY291bnQgPSBwZGF0YS0+bnZhbHVlX2NvdW50OworCXNyX2luZm8tPnNlbm5fbW9kID0gcGRhdGEtPnNlbm5fbW9kOworCXNyX2luZm8tPnNlbnBfbW9kID0gcGRhdGEtPnNlbnBfbW9kOworCXNyX2luZm8tPmF1dG9jb21wX2FjdGl2ZSA9IGZhbHNlOworCXNyX2luZm8tPmlwX3R5cGUgPSBwZGF0YS0+aXBfdHlwZTsKKwlzcl9pbmZvLT5iYXNlID0gaW9yZW1hcChtZW0tPnN0YXJ0LCByZXNvdXJjZV9zaXplKG1lbSkpOworCWlmICghc3JfaW5mby0+YmFzZSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICIlczogaW9yZW1hcCBmYWlsXG4iLCBfX2Z1bmNfXyk7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX3JlbGVhc2VfcmVnaW9uOworCX0KKworCWlmIChpcnEpCisJCXNyX2luZm8tPmlycSA9IGlycS0+c3RhcnQ7CisKKwlzcl9zZXRfY2xrX2xlbmd0aChzcl9pbmZvKTsKKwlzcl9zZXRfcmVnZmllbGRzKHNyX2luZm8pOworCisJbGlzdF9hZGQoJnNyX2luZm8tPm5vZGUsICZzcl9saXN0KTsKKworCS8qCisJICogQ2FsbCBpbnRvIGxhdGUgaW5pdCB0byBkbyBpbnRpYWxpemF0aW9ucyB0aGF0IHJlcXVpcmUKKwkgKiBib3RoIHNyIGRyaXZlciBhbmQgc3IgY2xhc3MgZHJpdmVyIHRvIGJlIGluaXRpYWxsaXplZC4KKwkgKi8KKwlpZiAoc3JfY2xhc3MpIHsKKwkJcmV0ID0gc3JfbGF0ZV9pbml0KHNyX2luZm8pOworCQlpZiAocmV0KSB7CisJCQlwcl93YXJuaW5nKCIlczogRXJyb3IgaW4gU1IgbGF0ZSBpbml0XG4iLCBfX2Z1bmNfXyk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJZGV2X2luZm8oJnBkZXYtPmRldiwgIiVzOiBTbWFydFJlZmxleCBkcml2ZXIgaW5pdGlhbGl6ZWRcbiIsIF9fZnVuY19fKTsKKworCS8qCisJICogSWYgdGhlIHZvbHRhZ2UgZG9tYWluIGRlYnVnZnMgZGlyZWN0b3J5IGlzIG5vdCBjcmVhdGVkLCBkbworCSAqIG5vdCB0cnkgdG8gY3JlYXRlIHJlc3Qgb2YgdGhlIGRlYnVnZnMgZW50cmllcy4KKwkgKi8KKwl2ZGRfZGJnX2RpciA9IG9tYXBfdm9sdGFnZV9nZXRfZGJnZGlyKHNyX2luZm8tPnZvbHRkbSk7CisJaWYgKCF2ZGRfZGJnX2RpcikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkYmdfZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKCJzbWFydHJlZmxleCIsIHZkZF9kYmdfZGlyKTsKKwlpZiAoSVNfRVJSKGRiZ19kaXIpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIiVzOiBVbmFibGUgdG8gY3JlYXRlIGRlYnVnZnMgZGlyZWN0b3J5XG4iLAorCQkJX19mdW5jX18pOworCQlyZXR1cm4gUFRSX0VSUihkYmdfZGlyKTsKKwl9CisKKwkodm9pZCkgZGVidWdmc19jcmVhdGVfZmlsZSgiYXV0b2NvbXAiLCBTX0lSVUdPIHwgU19JV1VHTywgZGJnX2RpciwKKwkJCQkodm9pZCAqKXNyX2luZm8sICZwbV9zcl9mb3BzKTsKKwkodm9pZCkgZGVidWdmc19jcmVhdGVfeDMyKCJlcnJ3ZWlnaHQiLCBTX0lSVUdPLCBkYmdfZGlyLAorCQkJJnNyX2luZm8tPmVycl93ZWlnaHQpOworCSh2b2lkKSBkZWJ1Z2ZzX2NyZWF0ZV94MzIoImVycm1heGxpbWl0IiwgU19JUlVHTywgZGJnX2RpciwKKwkJCSZzcl9pbmZvLT5lcnJfbWF4bGltaXQpOworCSh2b2lkKSBkZWJ1Z2ZzX2NyZWF0ZV94MzIoImVycm1pbmxpbWl0IiwgU19JUlVHTywgZGJnX2RpciwKKwkJCSZzcl9pbmZvLT5lcnJfbWlubGltaXQpOworCisJbnZhbHVlX2RpciA9IGRlYnVnZnNfY3JlYXRlX2RpcigibnZhbHVlIiwgZGJnX2Rpcik7CisJaWYgKElTX0VSUihudmFsdWVfZGlyKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICIlczogVW5hYmxlIHRvIGNyZWF0ZSBkZWJ1Z2ZzIGRpcmVjdG9yeSIKKwkJCSJmb3Igbi12YWx1ZXNcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIFBUUl9FUlIobnZhbHVlX2Rpcik7CisJfQorCisJb21hcF92b2x0YWdlX2dldF92b2x0dGFibGUoc3JfaW5mby0+dm9sdGRtLCAmdm9sdF9kYXRhKTsKKwlpZiAoIXZvbHRfZGF0YSkgeworCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiJXM6IE5vIFZvbHRhZ2UgdGFibGUgZm9yIHRoZSIKKwkJCSIgY29ycmVzcG9uZGluZyB2ZGQgdmRkXyVzLiBDYW5ub3QgY3JlYXRlIGRlYnVnZnMiCisJCQkiZW50cmllcyBmb3Igbi12YWx1ZXNcbiIsCisJCQlfX2Z1bmNfXywgc3JfaW5mby0+dm9sdGRtLT5uYW1lKTsKKwkJcmV0dXJuIC1FTk9EQVRBOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBzcl9pbmZvLT5udmFsdWVfY291bnQ7IGkrKykgeworCQljaGFyICpuYW1lOworCQljaGFyIHZvbHRfbmFtZVszMl07CisKKwkJbmFtZSA9IGt6YWxsb2MoTlZBTFVFX05BTUVfTEVOICsgMSwgR0ZQX0tFUk5FTCk7CisJCWlmICghbmFtZSkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiJXM6IFVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkiCisJCQkJIiBmb3Igbi12YWx1ZSBkaXJlY3RvcnkgbmFtZVxuIiwgIF9fZnVuY19fKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisKKwkJc3RyY3B5KG5hbWUsICJ2b2x0XyIpOworCQlzcHJpbnRmKHZvbHRfbmFtZSwgIiVkIiwgdm9sdF9kYXRhW2ldLnZvbHRfbm9taW5hbCk7CisJCXN0cmNhdChuYW1lLCB2b2x0X25hbWUpOworCQkodm9pZCkgZGVidWdmc19jcmVhdGVfeDMyKG5hbWUsIFNfSVJVR08gfCBTX0lXVUdPLCBudmFsdWVfZGlyLAorCQkJCSYoc3JfaW5mby0+bnZhbHVlX3RhYmxlW2ldLm52YWx1ZSkpOworCX0KKworCXJldHVybiByZXQ7CisKK2Vycl9yZWxlYXNlX3JlZ2lvbjoKKwlyZWxlYXNlX21lbV9yZWdpb24obWVtLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShtZW0pKTsKK2Vycl9mcmVlX2RldmluZm86CisJa2ZyZWUoc3JfaW5mbyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBvbWFwX3NyX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBvbWFwX3NyX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IG9tYXBfc3IgKnNyX2luZm87CisJc3RydWN0IHJlc291cmNlICptZW07CisKKwlpZiAoIXBkYXRhKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIiVzOiBwbGF0Zm9ybSBkYXRhIG1pc3NpbmdcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3JfaW5mbyA9IF9zcl9sb29rdXAocGRhdGEtPnZvbHRkbSk7CisJaWYgKCFzcl9pbmZvKSB7CisJCWRldl93YXJuKCZwZGV2LT5kZXYsICIlczogb21hcF9zciBzdHJ1Y3Qgbm90IGZvdW5kXG4iLAorCQkJX19mdW5jX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoc3JfaW5mby0+YXV0b2NvbXBfYWN0aXZlKQorCQlzcl9zdG9wX3ZkZGF1dG9jb21wKHNyX2luZm8pOworCisJbGlzdF9kZWwoJnNyX2luZm8tPm5vZGUpOworCWlvdW5tYXAoc3JfaW5mby0+YmFzZSk7CisJa2ZyZWUoc3JfaW5mbyk7CisJbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlyZWxlYXNlX21lbV9yZWdpb24obWVtLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShtZW0pKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzbWFydHJlZmxleF9kcml2ZXIgPSB7CisJLnJlbW92ZSAgICAgICAgID0gb21hcF9zcl9yZW1vdmUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gInNtYXJ0cmVmbGV4IiwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgc3JfaW5pdCh2b2lkKQoreworCWludCByZXQgPSAwOworCisJLyoKKwkgKiBzcl9pbml0IGlzIGEgbGF0ZSBpbml0LiBJZiBieSB0aGVuIGEgcG1pYyBzcGVjaWZpYyBBUEkgaXMgbm90CisJICogcmVnaXN0ZXJlZCBlaXRoZXIgdGhlcmUgaXMgbm8gbmVlZCBmb3IgYW55dGhpbmcgdG8gYmUgZG9uZSBvbgorCSAqIHRoZSBQTUlDIHNpZGUgb3Igc29tZWJvZHkgaGFzIGZvcmdvdHRlbiB0byByZWdpc3RlciBhIFBNSUMKKwkgKiBoYW5kbGVyLiBXYXJuIGZvciB0aGUgc2Vjb25kIGNvbmRpdGlvbi4KKwkgKi8KKwlpZiAoc3JfcG1pY19kYXRhICYmIHNyX3BtaWNfZGF0YS0+c3JfcG1pY19pbml0KQorCQlzcl9wbWljX2RhdGEtPnNyX3BtaWNfaW5pdCgpOworCWVsc2UKKwkJcHJfd2FybmluZygiJXM6IE5vIFBNSUMgaG9vayB0byBpbml0IHNtYXJ0cmVmbGV4XG4iLCBfX2Z1bmNfXyk7CisKKwlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJnNtYXJ0cmVmbGV4X2RyaXZlciwgb21hcF9zcl9wcm9iZSk7CisJaWYgKHJldCkgeworCQlwcl9lcnIoIiVzOiBwbGF0Zm9ybSBkcml2ZXIgcmVnaXN0ZXIgZmFpbGVkIGZvciBTUlxuIiwKKwkJCV9fZnVuY19fKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHNyX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc21hcnRyZWZsZXhfZHJpdmVyKTsKK30KK2xhdGVfaW5pdGNhbGwoc3JfaW5pdCk7Cittb2R1bGVfZXhpdChzcl9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJPTUFQIFNtYXJ0cmVmbGV4IERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybToiIERSSVZFUl9OQU1FKTsKK01PRFVMRV9BVVRIT1IoIlRleGFzIEluc3RydW1lbnRzIEluYyIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9zcl9kZXZpY2UuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc3JfZGV2aWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg2ZDY4NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc3JfZGV2aWNlLmMKQEAgLTAsMCArMSwxNDYgQEAKKy8qCisgKiBPTUFQMy9PTUFQNCBzbWFydHJlZmxleCBkZXZpY2UgZmlsZQorICoKKyAqIEF1dGhvcjogVGhhcmEgR29waW5hdGgJPHRoYXJhQHRpLmNvbT4KKyAqCisgKiBCYXNlZCBvcmlnaW5hbGx5IG9uIGNvZGUgZnJvbSBzbWFydHJlZmxleC5jCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIFRoYXJhIEdvcGluYXRoIDx0aGFyYUB0aS5jb20+CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uCisgKiBLYWxsZSBKb2tpbmllbWkKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIExlc2x5IEEgTSA8eDAwODA5NzBAdGkuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8cGxhdC9vbWFwX2RldmljZS5oPgorI2luY2x1ZGUgPHBsYXQvc21hcnRyZWZsZXguaD4KKyNpbmNsdWRlIDxwbGF0L3ZvbHRhZ2UuaD4KKworI2luY2x1ZGUgImNvbnRyb2wuaCIKKworc3RhdGljIGJvb2wgc3JfZW5hYmxlX29uX2luaXQ7CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9kZXZpY2VfcG1fbGF0ZW5jeSBvbWFwX3NyX2xhdGVuY3lbXSA9IHsKKwl7CisJCS5kZWFjdGl2YXRlX2Z1bmMgPSBvbWFwX2RldmljZV9pZGxlX2h3bW9kcywKKwkJLmFjdGl2YXRlX2Z1bmMJID0gb21hcF9kZXZpY2VfZW5hYmxlX2h3bW9kcywKKwkJLmZsYWdzID0gT01BUF9ERVZJQ0VfTEFURU5DWV9BVVRPX0FESlVTVAorCX0sCit9OworCisvKiBSZWFkIEVGVVNFIHZhbHVlcyBmcm9tIGNvbnRyb2wgcmVnaXN0ZXJzIGZvciBPTUFQMzQzMCAqLworc3RhdGljIHZvaWQgX19pbml0IHNyX3NldF9udmFsdWVzKHN0cnVjdCBvbWFwX3ZvbHRfZGF0YSAqdm9sdF9kYXRhLAorCQkJCXN0cnVjdCBvbWFwX3NyX2RhdGEgKnNyX2RhdGEpCit7CisJc3RydWN0IG9tYXBfc3JfbnZhbHVlX3RhYmxlICpudmFsdWVfdGFibGU7CisJaW50IGksIGNvdW50ID0gMDsKKworCXdoaWxlICh2b2x0X2RhdGFbY291bnRdLnZvbHRfbm9taW5hbCkKKwkJY291bnQrKzsKKworCW52YWx1ZV90YWJsZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBvbWFwX3NyX252YWx1ZV90YWJsZSkqY291bnQsCisJCQlHRlBfS0VSTkVMKTsKKworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCXUzMiB2OworCQkvKgorCQkgKiBJbiBPTUFQNCB0aGUgZWZ1c2UgcmVnaXN0ZXJzIGFyZSAyNCBiaXQgYWxpZ25lZC4KKwkJICogQSBfX3Jhd19yZWFkbCB3aWxsIGZhaWwgZm9yIG5vbi0zMiBiaXQgYWxpZ25lZCBhZGRyZXNzCisJCSAqIGFuZCBoZW5jZSB0aGUgOC1iaXQgcmVhZCBhbmQgc2hpZnQuCisJCSAqLworCQlpZiAoY3B1X2lzX29tYXA0NHh4KCkpIHsKKwkJCXUxNiBvZmZzZXQgPSB2b2x0X2RhdGFbaV0uc3JfZWZ1c2Vfb2ZmczsKKworCQkJdiA9IG9tYXBfY3RybF9yZWFkYihvZmZzZXQpIHwKKwkJCQlvbWFwX2N0cmxfcmVhZGIob2Zmc2V0ICsgMSkgPDwgOCB8CisJCQkJb21hcF9jdHJsX3JlYWRiKG9mZnNldCArIDIpIDw8IDE2OworCQl9IGVsc2UgeworCQkJIHYgPSBvbWFwX2N0cmxfcmVhZGwodm9sdF9kYXRhW2ldLnNyX2VmdXNlX29mZnMpOworCQl9CisKKwkJbnZhbHVlX3RhYmxlW2ldLmVmdXNlX29mZnMgPSB2b2x0X2RhdGFbaV0uc3JfZWZ1c2Vfb2ZmczsKKwkJbnZhbHVlX3RhYmxlW2ldLm52YWx1ZSA9IHY7CisJfQorCisJc3JfZGF0YS0+bnZhbHVlX3RhYmxlID0gbnZhbHVlX3RhYmxlOworCXNyX2RhdGEtPm52YWx1ZV9jb3VudCA9IGNvdW50OworfQorCitzdGF0aWMgaW50IHNyX2Rldl9pbml0KHN0cnVjdCBvbWFwX2h3bW9kICpvaCwgdm9pZCAqdXNlcikKK3sKKwlzdHJ1Y3Qgb21hcF9zcl9kYXRhICpzcl9kYXRhOworCXN0cnVjdCBvbWFwX2RldmljZSAqb2Q7CisJc3RydWN0IG9tYXBfdm9sdF9kYXRhICp2b2x0X2RhdGE7CisJY2hhciAqbmFtZSA9ICJzbWFydHJlZmxleCI7CisJc3RhdGljIGludCBpOworCisJc3JfZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBvbWFwX3NyX2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNyX2RhdGEpIHsKKwkJcHJfZXJyKCIlczogVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgJXMgc3JfZGF0YS5FcnJvciFcbiIsCisJCQlfX2Z1bmNfXywgb2gtPm5hbWUpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlpZiAoIW9oLT52ZGRfbmFtZSkgeworCQlwcl9lcnIoIiVzOiBObyB2b2x0YWdlIGRvbWFpbiBzcGVjaWZpZWQgZm9yICVzLiIKKwkJCSJDYW5ub3QgaW5pdGlhbGl6ZVxuIiwgX19mdW5jX18sIG9oLT5uYW1lKTsKKwkJZ290byBleGl0OworCX0KKworCXNyX2RhdGEtPmlwX3R5cGUgPSBvaC0+Y2xhc3MtPnJldjsKKwlzcl9kYXRhLT5zZW5uX21vZCA9IDB4MTsKKwlzcl9kYXRhLT5zZW5wX21vZCA9IDB4MTsKKworCXNyX2RhdGEtPnZvbHRkbSA9IG9tYXBfdm9sdGFnZV9kb21haW5fbG9va3VwKG9oLT52ZGRfbmFtZSk7CisJaWYgKElTX0VSUihzcl9kYXRhLT52b2x0ZG0pKSB7CisJCXByX2VycigiJXM6IFVuYWJsZSB0byBnZXQgdm9sdGFnZSBkb21haW4gcG9pbnRlciBmb3IgVkREICVzXG4iLAorCQkJX19mdW5jX18sIG9oLT52ZGRfbmFtZSk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlvbWFwX3ZvbHRhZ2VfZ2V0X3ZvbHR0YWJsZShzcl9kYXRhLT52b2x0ZG0sICZ2b2x0X2RhdGEpOworCWlmICghdm9sdF9kYXRhKSB7CisJCXByX3dhcm5pbmcoIiVzOiBObyBWb2x0YWdlIHRhYmxlIHJlZ2lzdGVyZCBmbyBWREQlZC4iCisJCQkiU29tZXRoaW5nIHJlYWxseSB3cm9uZ1xuXG4iLCBfX2Z1bmNfXywgaSArIDEpOworCQlnb3RvIGV4aXQ7CisJfQorCisJc3Jfc2V0X252YWx1ZXModm9sdF9kYXRhLCBzcl9kYXRhKTsKKworCXNyX2RhdGEtPmVuYWJsZV9vbl9pbml0ID0gc3JfZW5hYmxlX29uX2luaXQ7CisKKwlvZCA9IG9tYXBfZGV2aWNlX2J1aWxkKG5hbWUsIGksIG9oLCBzcl9kYXRhLCBzaXplb2YoKnNyX2RhdGEpLAorCQkJICAgICAgIG9tYXBfc3JfbGF0ZW5jeSwKKwkJCSAgICAgICBBUlJBWV9TSVpFKG9tYXBfc3JfbGF0ZW5jeSksIDApOworCWlmIChJU19FUlIob2QpKQorCQlwcl93YXJuaW5nKCIlczogQ291bGQgbm90IGJ1aWxkIG9tYXBfZGV2aWNlIGZvciAlczogJXMuXG5cbiIsCisJCQlfX2Z1bmNfXywgbmFtZSwgb2gtPm5hbWUpOworZXhpdDoKKwlpKys7CisJa2ZyZWUoc3JfZGF0YSk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBBUEkgdG8gYmUgY2FsbGVkIGZyb20gYm9hcmQgZmlsZXMgdG8gZW5hYmxlIHNtYXJ0cmVmbGV4CisgKiBhdXRvY29tcGVuc2F0aW9uIGF0IGluaXQuCisgKi8KK3ZvaWQgX19pbml0IG9tYXBfZW5hYmxlX3NtYXJ0cmVmbGV4X29uX2luaXQodm9pZCkKK3sKKwlzcl9lbmFibGVfb25faW5pdCA9IHRydWU7Cit9CisKK2ludCBfX2luaXQgb21hcF9kZXZpbml0X3NtYXJ0cmVmbGV4KHZvaWQpCit7CisJcmV0dXJuIG9tYXBfaHdtb2RfZm9yX2VhY2hfYnlfY2xhc3MoInNtYXJ0cmVmbGV4Iiwgc3JfZGV2X2luaXQsIE5VTEwpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9zcmFtMjQyeC5TIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9zcmFtMjQyeC5TCmluZGV4IDkyZTZlMWEuLjA1NTMxMGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvc3JhbTI0MnguUworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NyYW0yNDJ4LlMKQEAgLTIxLDE0ICsyMSwyMCBAQAogICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCiAgKiBNQSAwMjExMS0xMzA3IFVTQQorICoKKyAqIFJpY2hhcmQgV29vZHJ1ZmYgbm90ZXMgdGhhdCBhbnkgY2hhbmdlcyB0byB0aGlzIGNvZGUgbXVzdCBiZSBjYXJlZnVsbHkKKyAqIGF1ZGl0ZWQgYW5kIHRlc3RlZCB0byBlbnN1cmUgdGhhdCB0aGV5IGRvbid0IGNhdXNlIGEgVExCIG1pc3Mgd2hpbGUKKyAqIHRoZSBTRFJBTSBpcyBpbmFjY2Vzc2libGUuICBTdWNoIGEgc2l0dWF0aW9uIHdpbGwgY3Jhc2ggdGhlIHN5c3RlbQorICogc2luY2UgaXQgd2lsbCBjYXVzZSB0aGUgQVJNIE1NVSB0byBhdHRlbXB0IHRvIHdhbGsgdGhlIHBhZ2UgdGFibGVzLgorICogVGhlc2UgY3Jhc2hlcyBtYXkgYmUgaW50ZXJtaXR0ZW50LgogICovCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KICNpbmNsdWRlIDxtYWNoL2lvLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCi0jaW5jbHVkZSAicHJtLmgiCi0jaW5jbHVkZSAiY20uaCIKKyNpbmNsdWRlICJwcm0yeHh4XzN4eHguaCIKKyNpbmNsdWRlICJjbTJ4eHhfM3h4eC5oIgogI2luY2x1ZGUgInNkcmMuaCIKIAogCS50ZXh0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3NyYW0yNDN4LlMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NyYW0yNDN4LlMKaW5kZXggYWI0OTczNi4uZjkwMDc1OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9zcmFtMjQzeC5TCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc3JhbTI0M3guUwpAQCAtMjEsMTQgKzIxLDIwIEBACiAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKICAqIE1BIDAyMTExLTEzMDcgVVNBCisgKgorICogUmljaGFyZCBXb29kcnVmZiBub3RlcyB0aGF0IGFueSBjaGFuZ2VzIHRvIHRoaXMgY29kZSBtdXN0IGJlIGNhcmVmdWxseQorICogYXVkaXRlZCBhbmQgdGVzdGVkIHRvIGVuc3VyZSB0aGF0IHRoZXkgZG9uJ3QgY2F1c2UgYSBUTEIgbWlzcyB3aGlsZQorICogdGhlIFNEUkFNIGlzIGluYWNjZXNzaWJsZS4gIFN1Y2ggYSBzaXR1YXRpb24gd2lsbCBjcmFzaCB0aGUgc3lzdGVtCisgKiBzaW5jZSBpdCB3aWxsIGNhdXNlIHRoZSBBUk0gTU1VIHRvIGF0dGVtcHQgdG8gd2FsayB0aGUgcGFnZSB0YWJsZXMuCisgKiBUaGVzZSBjcmFzaGVzIG1heSBiZSBpbnRlcm1pdHRlbnQuCiAgKi8KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgogI2luY2x1ZGUgPG1hY2gvaW8uaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKLSNpbmNsdWRlICJwcm0uaCIKLSNpbmNsdWRlICJjbS5oIgorI2luY2x1ZGUgInBybTJ4eHhfM3h4eC5oIgorI2luY2x1ZGUgImNtMnh4eF8zeHh4LmgiCiAjaW5jbHVkZSAic2RyYy5oIgogCiAJLnRleHQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvc3JhbTM0eHguUyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc3JhbTM0eHguUwppbmRleCAzNjM3Mjc0Li43Zjg5M2EyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3NyYW0zNHh4LlMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9zcmFtMzR4eC5TCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSA8bWFjaC9pby5oPgogCiAjaW5jbHVkZSAic2RyYy5oIgotI2luY2x1ZGUgImNtLmgiCisjaW5jbHVkZSAiY20yeHh4XzN4eHguaCIKIAogCS50ZXh0CiAKQEAgLTEwNCw2ICsxMDQsMTIgQEAKICAqIHRvdWNoaW5nIHRoZSBTRFJBTS4gIFVudGlsIHRoYXQgdGltZSwgdXNlcnMgd2hvIGtub3cgdGhhdCB0aGVpciB1c2UgY2FzZQogICogY2FuIHNhdGlzZnkgdGhlIGFib3ZlIHJlcXVpcmVtZW50IGNhbiBlbmFibGUgdGhlIENPTkZJR19PTUFQM19TRFJDX0FDX1RJTUlORwogICogb3B0aW9uLgorICoKKyAqIFJpY2hhcmQgV29vZHJ1ZmYgbm90ZXMgdGhhdCBhbnkgY2hhbmdlcyB0byB0aGlzIGNvZGUgbXVzdCBiZSBjYXJlZnVsbHkKKyAqIGF1ZGl0ZWQgYW5kIHRlc3RlZCB0byBlbnN1cmUgdGhhdCB0aGV5IGRvbid0IGNhdXNlIGEgVExCIG1pc3Mgd2hpbGUKKyAqIHRoZSBTRFJBTSBpcyBpbmFjY2Vzc2libGUuICBTdWNoIGEgc2l0dWF0aW9uIHdpbGwgY3Jhc2ggdGhlIHN5c3RlbQorICogc2luY2UgaXQgd2lsbCBjYXVzZSB0aGUgQVJNIE1NVSB0byBhdHRlbXB0IHRvIHdhbGsgdGhlIHBhZ2UgdGFibGVzLgorICogVGhlc2UgY3Jhc2hlcyBtYXkgYmUgaW50ZXJtaXR0ZW50LgogICovCiBFTlRSWShvbWFwM19zcmFtX2NvbmZpZ3VyZV9jb3JlX2RwbGwpCiAJc3RtZmQJc3AhLCB7cjEtcjEyLCBscn0JQCBzdG9yZSByZWdzIHRvIHN0YWNrCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3RpbWVyLWdwLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3RpbWVyLWdwLmMKaW5kZXggZTEzYzI5ZS4uNGU0OGU3OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi90aW1lci1ncC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvdGltZXItZ3AuYwpAQCAtMTk1LDcgKzE5NSw2IEBACiAJLnJhdGluZwkJPSAzMDAsCiAJLnJlYWQJCT0gY2xvY2tzb3VyY2VfcmVhZF9jeWNsZXMsCiAJLm1hc2sJCT0gQ0xPQ0tTT1VSQ0VfTUFTSygzMiksCi0JLnNoaWZ0CQk9IDI0LAogCS5mbGFncwkJPSBDTE9DS19TT1VSQ0VfSVNfQ09OVElOVU9VUywKIH07CiAKQEAgLTIwMyw3ICsyMDIsNyBAQAogc3RhdGljIHZvaWQgX19pbml0IG9tYXAyX2dwX2Nsb2Nrc291cmNlX2luaXQodm9pZCkKIHsKIAlzdGF0aWMgc3RydWN0IG9tYXBfZG1fdGltZXIgKmdwdDsKLQl1MzIgdGlja19yYXRlLCB0aWNrX3BlcmlvZDsKKwl1MzIgdGlja19yYXRlOwogCXN0YXRpYyBjaGFyIGVycjFbXSBfX2luaXRkYXRhID0gS0VSTl9FUlIKIAkJIiVzOiBmYWlsZWQgdG8gcmVxdWVzdCBkbS10aW1lclxuIjsKIAlzdGF0aWMgY2hhciBlcnIyW10gX19pbml0ZGF0YSA9IEtFUk5fRVJSCkBAIC0yMTYsMTMgKzIxNSwxMCBAQAogCiAJb21hcF9kbV90aW1lcl9zZXRfc291cmNlKGdwdCwgT01BUF9USU1FUl9TUkNfU1lTX0NMSyk7CiAJdGlja19yYXRlID0gY2xrX2dldF9yYXRlKG9tYXBfZG1fdGltZXJfZ2V0X2ZjbGsoZ3B0KSk7Ci0JdGlja19wZXJpb2QgPSAodGlja19yYXRlIC8gSFopIC0gMTsKIAogCW9tYXBfZG1fdGltZXJfc2V0X2xvYWRfc3RhcnQoZ3B0LCAxLCAwKTsKIAotCWNsb2Nrc291cmNlX2dwdC5tdWx0ID0KLQkJY2xvY2tzb3VyY2Vfa2h6Mm11bHQodGlja19yYXRlLzEwMDAsIGNsb2Nrc291cmNlX2dwdC5zaGlmdCk7Ci0JaWYgKGNsb2Nrc291cmNlX3JlZ2lzdGVyKCZjbG9ja3NvdXJjZV9ncHQpKQorCWlmIChjbG9ja3NvdXJjZV9yZWdpc3Rlcl9oeigmY2xvY2tzb3VyY2VfZ3B0LCB0aWNrX3JhdGUpKQogCQlwcmludGsoZXJyMiwgY2xvY2tzb3VyY2VfZ3B0Lm5hbWUpOwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3VzYi1laGNpLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3VzYi1laGNpLmMKaW5kZXggYjExYmYzOC4uMjVlZWFkYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi91c2ItZWhjaS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvdXNiLWVoY2kuYwpAQCAtMzQsMjIgKzM0LDE1IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZWhjaV9yZXNvdXJjZXNbXSA9IHsKIAl7Ci0JCS5zdGFydAk9IE9NQVAzNFhYX0VIQ0lfQkFTRSwKLQkJLmVuZAk9IE9NQVAzNFhYX0VIQ0lfQkFTRSArIFNaXzFLIC0gMSwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKIAl7Ci0JCS5zdGFydAk9IE9NQVAzNFhYX1VISF9DT05GSUdfQkFTRSwKLQkJLmVuZAk9IE9NQVAzNFhYX1VISF9DT05GSUdfQkFTRSArIFNaXzFLIC0gMSwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKIAl7Ci0JCS5zdGFydAk9IE9NQVAzNFhYX1VTQlRMTF9CQVNFLAotCQkuZW5kCT0gT01BUDM0WFhfVVNCVExMX0JBU0UgKyBTWl80SyAtIDEsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAogCX0sCiAJeyAgICAgICAgIC8qIGdlbmVyYWwgSVJRICovCi0JCS5zdGFydCAgID0gSU5UXzM0WFhfRUhDSV9JUlEsCiAJCS5mbGFncyAgID0gSU9SRVNPVVJDRV9JUlEsCiAJfQogfTsKQEAgLTIxNCwxMyArMjA3LDE0OCBAQAogCXJldHVybjsKIH0KIAorc3RhdGljIHZvaWQgc2V0dXBfNDQzMGVoY2lfaW9fbXV4KGNvbnN0IGVudW0gZWhjaV9oY2Rfb21hcF9tb2RlICpwb3J0X21vZGUpCit7CisJc3dpdGNoIChwb3J0X21vZGVbMF0pIHsKKwljYXNlIEVIQ0lfSENEX09NQVBfTU9ERV9QSFk6CisJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJ1c2JiMV91bHBpcGh5X3N0cCIsCisJCQlPTUFQX1BJTl9PVVRQVVQpOworCQlvbWFwX211eF9pbml0X3NpZ25hbCgidXNiYjFfdWxwaXBoeV9jbGsiLAorCQkJT01BUF9QSU5fSU5QVVRfUFVMTERPV04pOworCQlvbWFwX211eF9pbml0X3NpZ25hbCgidXNiYjFfdWxwaXBoeV9kaXIiLAorCQkJT01BUF9QSU5fSU5QVVRfUFVMTERPV04pOworCQlvbWFwX211eF9pbml0X3NpZ25hbCgidXNiYjFfdWxwaXBoeV9ueHQiLAorCQkJT01BUF9QSU5fSU5QVVRfUFVMTERPV04pOworCQlvbWFwX211eF9pbml0X3NpZ25hbCgidXNiYjFfdWxwaXBoeV9kYXQwIiwKKwkJCU9NQVBfUElOX0lOUFVUX1BVTExET1dOKTsKKwkJb21hcF9tdXhfaW5pdF9zaWduYWwoInVzYmIxX3VscGlwaHlfZGF0MSIsCisJCQlPTUFQX1BJTl9JTlBVVF9QVUxMRE9XTik7CisJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJ1c2JiMV91bHBpcGh5X2RhdDIiLAorCQkJT01BUF9QSU5fSU5QVVRfUFVMTERPV04pOworCQlvbWFwX211eF9pbml0X3NpZ25hbCgidXNiYjFfdWxwaXBoeV9kYXQzIiwKKwkJCU9NQVBfUElOX0lOUFVUX1BVTExET1dOKTsKKwkJb21hcF9tdXhfaW5pdF9zaWduYWwoInVzYmIxX3VscGlwaHlfZGF0NCIsCisJCQlPTUFQX1BJTl9JTlBVVF9QVUxMRE9XTik7CisJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJ1c2JiMV91bHBpcGh5X2RhdDUiLAorCQkJT01BUF9QSU5fSU5QVVRfUFVMTERPV04pOworCQlvbWFwX211eF9pbml0X3NpZ25hbCgidXNiYjFfdWxwaXBoeV9kYXQ2IiwKKwkJCU9NQVBfUElOX0lOUFVUX1BVTExET1dOKTsKKwkJb21hcF9tdXhfaW5pdF9zaWduYWwoInVzYmIxX3VscGlwaHlfZGF0NyIsCisJCQlPTUFQX1BJTl9JTlBVVF9QVUxMRE9XTik7CisJCQlicmVhazsKKwljYXNlIEVIQ0lfSENEX09NQVBfTU9ERV9UTEw6CisJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJ1c2JiMV91bHBpdGxsX3N0cCIsCisJCQlPTUFQX1BJTl9JTlBVVF9QVUxMVVApOworCQlvbWFwX211eF9pbml0X3NpZ25hbCgidXNiYjFfdWxwaXRsbF9jbGsiLAorCQkJT01BUF9QSU5fSU5QVVRfUFVMTERPV04pOworCQlvbWFwX211eF9pbml0X3NpZ25hbCgidXNiYjFfdWxwaXRsbF9kaXIiLAorCQkJT01BUF9QSU5fSU5QVVRfUFVMTERPV04pOworCQlvbWFwX211eF9pbml0X3NpZ25hbCgidXNiYjFfdWxwaXRsbF9ueHQiLAorCQkJT01BUF9QSU5fSU5QVVRfUFVMTERPV04pOworCQlvbWFwX211eF9pbml0X3NpZ25hbCgidXNiYjFfdWxwaXRsbF9kYXQwIiwKKwkJCU9NQVBfUElOX0lOUFVUX1BVTExET1dOKTsKKwkJb21hcF9tdXhfaW5pdF9zaWduYWwoInVzYmIxX3VscGl0bGxfZGF0MSIsCisJCQlPTUFQX1BJTl9JTlBVVF9QVUxMRE9XTik7CisJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJ1c2JiMV91bHBpdGxsX2RhdDIiLAorCQkJT01BUF9QSU5fSU5QVVRfUFVMTERPV04pOworCQlvbWFwX211eF9pbml0X3NpZ25hbCgidXNiYjFfdWxwaXRsbF9kYXQzIiwKKwkJCU9NQVBfUElOX0lOUFVUX1BVTExET1dOKTsKKwkJb21hcF9tdXhfaW5pdF9zaWduYWwoInVzYmIxX3VscGl0bGxfZGF0NCIsCisJCQlPTUFQX1BJTl9JTlBVVF9QVUxMRE9XTik7CisJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJ1c2JiMV91bHBpdGxsX2RhdDUiLAorCQkJT01BUF9QSU5fSU5QVVRfUFVMTERPV04pOworCQlvbWFwX211eF9pbml0X3NpZ25hbCgidXNiYjFfdWxwaXRsbF9kYXQ2IiwKKwkJCU9NQVBfUElOX0lOUFVUX1BVTExET1dOKTsKKwkJb21hcF9tdXhfaW5pdF9zaWduYWwoInVzYmIxX3VscGl0bGxfZGF0NyIsCisJCQlPTUFQX1BJTl9JTlBVVF9QVUxMRE9XTik7CisJCQlicmVhazsKKwljYXNlIEVIQ0lfSENEX09NQVBfTU9ERV9VTktOT1dOOgorCWRlZmF1bHQ6CisJCQlicmVhazsKKwl9CisJc3dpdGNoIChwb3J0X21vZGVbMV0pIHsKKwljYXNlIEVIQ0lfSENEX09NQVBfTU9ERV9QSFk6CisJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJ1c2JiMl91bHBpcGh5X3N0cCIsCisJCQlPTUFQX1BJTl9PVVRQVVQpOworCQlvbWFwX211eF9pbml0X3NpZ25hbCgidXNiYjJfdWxwaXBoeV9jbGsiLAorCQkJT01BUF9QSU5fSU5QVVRfUFVMTERPV04pOworCQlvbWFwX211eF9pbml0X3NpZ25hbCgidXNiYjJfdWxwaXBoeV9kaXIiLAorCQkJT01BUF9QSU5fSU5QVVRfUFVMTERPV04pOworCQlvbWFwX211eF9pbml0X3NpZ25hbCgidXNiYjJfdWxwaXBoeV9ueHQiLAorCQkJT01BUF9QSU5fSU5QVVRfUFVMTERPV04pOworCQlvbWFwX211eF9pbml0X3NpZ25hbCgidXNiYjJfdWxwaXBoeV9kYXQwIiwKKwkJCU9NQVBfUElOX0lOUFVUX1BVTExET1dOKTsKKwkJb21hcF9tdXhfaW5pdF9zaWduYWwoInVzYmIyX3VscGlwaHlfZGF0MSIsCisJCQlPTUFQX1BJTl9JTlBVVF9QVUxMRE9XTik7CisJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJ1c2JiMl91bHBpcGh5X2RhdDIiLAorCQkJT01BUF9QSU5fSU5QVVRfUFVMTERPV04pOworCQlvbWFwX211eF9pbml0X3NpZ25hbCgidXNiYjJfdWxwaXBoeV9kYXQzIiwKKwkJCU9NQVBfUElOX0lOUFVUX1BVTExET1dOKTsKKwkJb21hcF9tdXhfaW5pdF9zaWduYWwoInVzYmIyX3VscGlwaHlfZGF0NCIsCisJCQlPTUFQX1BJTl9JTlBVVF9QVUxMRE9XTik7CisJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJ1c2JiMl91bHBpcGh5X2RhdDUiLAorCQkJT01BUF9QSU5fSU5QVVRfUFVMTERPV04pOworCQlvbWFwX211eF9pbml0X3NpZ25hbCgidXNiYjJfdWxwaXBoeV9kYXQ2IiwKKwkJCU9NQVBfUElOX0lOUFVUX1BVTExET1dOKTsKKwkJb21hcF9tdXhfaW5pdF9zaWduYWwoInVzYmIyX3VscGlwaHlfZGF0NyIsCisJCQlPTUFQX1BJTl9JTlBVVF9QVUxMRE9XTik7CisJCQlicmVhazsKKwljYXNlIEVIQ0lfSENEX09NQVBfTU9ERV9UTEw6CisJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJ1c2JiMl91bHBpdGxsX3N0cCIsCisJCQlPTUFQX1BJTl9JTlBVVF9QVUxMVVApOworCQlvbWFwX211eF9pbml0X3NpZ25hbCgidXNiYjJfdWxwaXRsbF9jbGsiLAorCQkJT01BUF9QSU5fSU5QVVRfUFVMTERPV04pOworCQlvbWFwX211eF9pbml0X3NpZ25hbCgidXNiYjJfdWxwaXRsbF9kaXIiLAorCQkJT01BUF9QSU5fSU5QVVRfUFVMTERPV04pOworCQlvbWFwX211eF9pbml0X3NpZ25hbCgidXNiYjJfdWxwaXRsbF9ueHQiLAorCQkJT01BUF9QSU5fSU5QVVRfUFVMTERPV04pOworCQlvbWFwX211eF9pbml0X3NpZ25hbCgidXNiYjJfdWxwaXRsbF9kYXQwIiwKKwkJCU9NQVBfUElOX0lOUFVUX1BVTExET1dOKTsKKwkJb21hcF9tdXhfaW5pdF9zaWduYWwoInVzYmIyX3VscGl0bGxfZGF0MSIsCisJCQlPTUFQX1BJTl9JTlBVVF9QVUxMRE9XTik7CisJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJ1c2JiMl91bHBpdGxsX2RhdDIiLAorCQkJT01BUF9QSU5fSU5QVVRfUFVMTERPV04pOworCQlvbWFwX211eF9pbml0X3NpZ25hbCgidXNiYjJfdWxwaXRsbF9kYXQzIiwKKwkJCU9NQVBfUElOX0lOUFVUX1BVTExET1dOKTsKKwkJb21hcF9tdXhfaW5pdF9zaWduYWwoInVzYmIyX3VscGl0bGxfZGF0NCIsCisJCQlPTUFQX1BJTl9JTlBVVF9QVUxMRE9XTik7CisJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJ1c2JiMl91bHBpdGxsX2RhdDUiLAorCQkJT01BUF9QSU5fSU5QVVRfUFVMTERPV04pOworCQlvbWFwX211eF9pbml0X3NpZ25hbCgidXNiYjJfdWxwaXRsbF9kYXQ2IiwKKwkJCU9NQVBfUElOX0lOUFVUX1BVTExET1dOKTsKKwkJb21hcF9tdXhfaW5pdF9zaWduYWwoInVzYmIyX3VscGl0bGxfZGF0NyIsCisJCQlPTUFQX1BJTl9JTlBVVF9QVUxMRE9XTik7CisJCQlicmVhazsKKwljYXNlIEVIQ0lfSENEX09NQVBfTU9ERV9VTktOT1dOOgorCWRlZmF1bHQ6CisJCQlicmVhazsKKwl9Cit9CisKIHZvaWQgX19pbml0IHVzYl9laGNpX2luaXQoY29uc3Qgc3RydWN0IGVoY2lfaGNkX29tYXBfcGxhdGZvcm1fZGF0YSAqcGRhdGEpCiB7CiAJcGxhdGZvcm1fZGV2aWNlX2FkZF9kYXRhKCZlaGNpX2RldmljZSwgcGRhdGEsIHNpemVvZigqcGRhdGEpKTsKIAogCS8qIFNldHVwIFBpbiBJTyBNVVggZm9yIEVIQ0kgKi8KLQlpZiAoY3B1X2lzX29tYXAzNHh4KCkpCisJaWYgKGNwdV9pc19vbWFwMzR4eCgpKSB7CisJCWVoY2lfcmVzb3VyY2VzWzBdLnN0YXJ0CT0gT01BUDM0WFhfRUhDSV9CQVNFOworCQllaGNpX3Jlc291cmNlc1swXS5lbmQJPSBPTUFQMzRYWF9FSENJX0JBU0UgKyBTWl8xSyAtIDE7CisJCWVoY2lfcmVzb3VyY2VzWzFdLnN0YXJ0CT0gT01BUDM0WFhfVUhIX0NPTkZJR19CQVNFOworCQllaGNpX3Jlc291cmNlc1sxXS5lbmQJPSBPTUFQMzRYWF9VSEhfQ09ORklHX0JBU0UgKyBTWl8xSyAtIDE7CisJCWVoY2lfcmVzb3VyY2VzWzJdLnN0YXJ0CT0gT01BUDM0WFhfVVNCVExMX0JBU0U7CisJCWVoY2lfcmVzb3VyY2VzWzJdLmVuZAk9IE9NQVAzNFhYX1VTQlRMTF9CQVNFICsgU1pfNEsgLSAxOworCQllaGNpX3Jlc291cmNlc1szXS5zdGFydCA9IElOVF8zNFhYX0VIQ0lfSVJROwogCQlzZXR1cF9laGNpX2lvX211eChwZGF0YS0+cG9ydF9tb2RlKTsKKwl9IGVsc2UgaWYgKGNwdV9pc19vbWFwNDR4eCgpKSB7CisJCWVoY2lfcmVzb3VyY2VzWzBdLnN0YXJ0CT0gT01BUDQ0WFhfSFNVU0JfRUhDSV9CQVNFOworCQllaGNpX3Jlc291cmNlc1swXS5lbmQJPSBPTUFQNDRYWF9IU1VTQl9FSENJX0JBU0UgKyBTWl8xSyAtIDE7CisJCWVoY2lfcmVzb3VyY2VzWzFdLnN0YXJ0CT0gT01BUDQ0WFhfVUhIX0NPTkZJR19CQVNFOworCQllaGNpX3Jlc291cmNlc1sxXS5lbmQJPSBPTUFQNDRYWF9VSEhfQ09ORklHX0JBU0UgKyBTWl8ySyAtIDE7CisJCWVoY2lfcmVzb3VyY2VzWzJdLnN0YXJ0CT0gT01BUDQ0WFhfVVNCVExMX0JBU0U7CisJCWVoY2lfcmVzb3VyY2VzWzJdLmVuZAk9IE9NQVA0NFhYX1VTQlRMTF9CQVNFICsgU1pfNEsgLSAxOworCQllaGNpX3Jlc291cmNlc1szXS5zdGFydCA9IE9NQVA0NFhYX0lSUV9FSENJOworCQlzZXR1cF80NDMwZWhjaV9pb19tdXgocGRhdGEtPnBvcnRfbW9kZSk7CisJfQogCiAJaWYgKHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZWhjaV9kZXZpY2UpIDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byByZWdpc3RlciBIUy1VU0IgKEVIQ0kpIGRldmljZVxuIik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3VzYi1tdXNiLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3VzYi1tdXNiLmMKaW5kZXggNzI2MDU1OC4uNTI5ODk0OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi91c2ItbXVzYi5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvdXNiLW11c2IuYwpAQCAtMzAsOCArMzAsMTAxIEBACiAjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CiAjaW5jbHVkZSA8bWFjaC9hbTM1eHguaD4KICNpbmNsdWRlIDxwbGF0L3VzYi5oPgorI2luY2x1ZGUgImNvbnRyb2wuaCIKIAotI2lmZGVmIENPTkZJR19VU0JfTVVTQl9TT0MKKyNpZiBkZWZpbmVkKENPTkZJR19VU0JfTVVTQl9PTUFQMlBMVVMpIHx8IGRlZmluZWQgKENPTkZJR19VU0JfTVVTQl9BTTM1WCkKKworc3RhdGljIHZvaWQgYW0zNXhfbXVzYl9yZXNldCh2b2lkKQoreworCXUzMglyZWd2YWw7CisKKwkvKiBSZXNldCB0aGUgbXVzYiBpbnRlcmZhY2UgKi8KKwlyZWd2YWwgPSBvbWFwX2N0cmxfcmVhZGwoQU0zNVhYX0NPTlRST0xfSVBfU1dfUkVTRVQpOworCisJcmVndmFsIHw9IEFNMzVYWF9VU0JPVEdTU19TV19SU1Q7CisJb21hcF9jdHJsX3dyaXRlbChyZWd2YWwsIEFNMzVYWF9DT05UUk9MX0lQX1NXX1JFU0VUKTsKKworCXJlZ3ZhbCAmPSB+QU0zNVhYX1VTQk9UR1NTX1NXX1JTVDsKKwlvbWFwX2N0cmxfd3JpdGVsKHJlZ3ZhbCwgQU0zNVhYX0NPTlRST0xfSVBfU1dfUkVTRVQpOworCisJcmVndmFsID0gb21hcF9jdHJsX3JlYWRsKEFNMzVYWF9DT05UUk9MX0lQX1NXX1JFU0VUKTsKK30KKworc3RhdGljIHZvaWQgYW0zNXhfbXVzYl9waHlfcG93ZXIodTggb24pCit7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMTAwKTsKKwl1MzIgZGV2Y29uZjI7CisKKwlpZiAob24pIHsKKwkJLyoKKwkJICogU3RhcnQgdGhlIG9uLWNoaXAgUEhZIGFuZCBpdHMgUExMLgorCQkgKi8KKwkJZGV2Y29uZjIgPSBvbWFwX2N0cmxfcmVhZGwoQU0zNVhYX0NPTlRST0xfREVWQ09ORjIpOworCisJCWRldmNvbmYyICY9IH4oQ09ORjJfUkVTRVQgfCBDT05GMl9QSFlQV1JETiB8IENPTkYyX09UR1BXUkROKTsKKwkJZGV2Y29uZjIgfD0gQ09ORjJfUEhZX1BMTE9OOworCisJCW9tYXBfY3RybF93cml0ZWwoZGV2Y29uZjIsIEFNMzVYWF9DT05UUk9MX0RFVkNPTkYyKTsKKworCQlwcl9pbmZvKEtFUk5fSU5GTyAiV2FpdGluZyBmb3IgUEhZIGNsb2NrIGdvb2QuLi5cbiIpOworCQl3aGlsZSAoIShvbWFwX2N0cmxfcmVhZGwoQU0zNVhYX0NPTlRST0xfREVWQ09ORjIpCisJCQkJJiBDT05GMl9QSFlDTEtHRCkpIHsKKwkJCWNwdV9yZWxheCgpOworCisJCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgeworCQkJCXByX2VycihLRVJOX0VSUiAibXVzYiBQSFkgY2xvY2sgZ29vZCB0aW1lZCBvdXRcbiIpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJLyoKKwkJICogUG93ZXIgZG93biB0aGUgb24tY2hpcCBQSFkuCisJCSAqLworCQlkZXZjb25mMiA9IG9tYXBfY3RybF9yZWFkbChBTTM1WFhfQ09OVFJPTF9ERVZDT05GMik7CisKKwkJZGV2Y29uZjIgJj0gfkNPTkYyX1BIWV9QTExPTjsKKwkJZGV2Y29uZjIgfD0gIENPTkYyX1BIWVBXUkROIHwgQ09ORjJfT1RHUFdSRE47CisJCW9tYXBfY3RybF93cml0ZWwoZGV2Y29uZjIsIEFNMzVYWF9DT05UUk9MX0RFVkNPTkYyKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGFtMzV4X211c2JfY2xlYXJfaXJxKHZvaWQpCit7CisJdTMyIHJlZ3ZhbDsKKworCXJlZ3ZhbCA9IG9tYXBfY3RybF9yZWFkbChBTTM1WFhfQ09OVFJPTF9MVkxfSU5UUl9DTEVBUik7CisJcmVndmFsIHw9IEFNMzVYWF9VU0JPVEdTU19JTlRfQ0xSOworCW9tYXBfY3RybF93cml0ZWwocmVndmFsLCBBTTM1WFhfQ09OVFJPTF9MVkxfSU5UUl9DTEVBUik7CisJcmVndmFsID0gb21hcF9jdHJsX3JlYWRsKEFNMzVYWF9DT05UUk9MX0xWTF9JTlRSX0NMRUFSKTsKK30KKworc3RhdGljIHZvaWQgYW0zNXhfbXVzYl9zZXRfbW9kZSh1OCBtdXNiX21vZGUpCit7CisJdTMyIGRldmNvbmYyID0gb21hcF9jdHJsX3JlYWRsKEFNMzVYWF9DT05UUk9MX0RFVkNPTkYyKTsKKworCWRldmNvbmYyICY9IH5DT05GMl9PVEdNT0RFOworCXN3aXRjaCAobXVzYl9tb2RlKSB7CisjaWZkZWYJQ09ORklHX1VTQl9NVVNCX0hEUkNfSENECisJY2FzZSBNVVNCX0hPU1Q6CQkvKiBGb3JjZSBWQlVTIHZhbGlkLCBJRCA9IDAgKi8KKwkJZGV2Y29uZjIgfD0gQ09ORjJfRk9SQ0VfSE9TVDsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZglDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkMKKwljYXNlIE1VU0JfUEVSSVBIRVJBTDoJLyogRm9yY2UgVkJVUyB2YWxpZCwgSUQgPSAxICovCisJCWRldmNvbmYyIHw9IENPTkYyX0ZPUkNFX0RFVklDRTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZglDT05GSUdfVVNCX01VU0JfT1RHCisJY2FzZSBNVVNCX09URzoJCS8qIERvbid0IG92ZXJyaWRlIHRoZSBWQlVTL0lEIGNvbXBhcmF0b3JzICovCisJCWRldmNvbmYyIHw9IENPTkYyX05PX09WRVJSSURFOworCQlicmVhazsKKyNlbmRpZgorCWRlZmF1bHQ6CisJCXByX2luZm8oS0VSTl9JTkZPICJVbnN1cHBvcnRlZCBtb2RlICV1XG4iLCBtdXNiX21vZGUpOworCX0KKworCW9tYXBfY3RybF93cml0ZWwoZGV2Y29uZjIsIEFNMzVYWF9DT05UUk9MX0RFVkNPTkYyKTsKK30KIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtdXNiX3Jlc291cmNlc1tdID0gewogCVswXSA9IHsgLyogc3RhcnQgYW5kIGVuZCBzZXQgZHluYW1pY2FsbHkgKi8KQEAgLTQwLDEwICsxMzMsMTIgQEAKIAlbMV0gPSB7CS8qIGdlbmVyYWwgSVJRICovCiAJCS5zdGFydAk9IElOVF8yNDNYX0hTX1VTQl9NQywKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJCS5uYW1lCT0gIm1jIiwKIAl9LAogCVsyXSA9IHsJLyogRE1BIElSUSAqLwogCQkuc3RhcnQJPSBJTlRfMjQzWF9IU19VU0JfRE1BLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwkJLm5hbWUJPSAiZG1hIiwKIAl9LAogfTsKIApAQCAtNzUsNyArMTcwLDcgQEAKIHN0YXRpYyB1NjQgbXVzYl9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXVzYl9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gIm11c2JfaGRyYyIsCisJLm5hbWUJCT0gIm11c2Itb21hcDI0MzAiLAogCS5pZAkJPSAtMSwKIAkuZGV2ID0gewogCQkuZG1hX21hc2sJCT0gJm11c2JfZG1hbWFzaywKQEAgLTkxLDggKzE4NiwxMyBAQAogCWlmIChjcHVfaXNfb21hcDI0M3goKSkgewogCQltdXNiX3Jlc291cmNlc1swXS5zdGFydCA9IE9NQVAyNDNYX0hTX0JBU0U7CiAJfSBlbHNlIGlmIChjcHVfaXNfb21hcDM1MTcoKSB8fCBjcHVfaXNfb21hcDM1MDUoKSkgeworCQltdXNiX2RldmljZS5uYW1lID0gIm11c2ItYW0zNXgiOwogCQltdXNiX3Jlc291cmNlc1swXS5zdGFydCA9IEFNMzVYWF9JUFNTX1VTQk9UR1NTX0JBU0U7CiAJCW11c2JfcmVzb3VyY2VzWzFdLnN0YXJ0ID0gSU5UXzM1WFhfVVNCT1RHX0lSUTsKKwkJYm9hcmRfZGF0YS0+c2V0X3BoeV9wb3dlciA9IGFtMzV4X211c2JfcGh5X3Bvd2VyOworCQlib2FyZF9kYXRhLT5jbGVhcl9pcnEgPSBhbTM1eF9tdXNiX2NsZWFyX2lycTsKKwkJYm9hcmRfZGF0YS0+c2V0X21vZGUgPSBhbTM1eF9tdXNiX3NldF9tb2RlOworCQlib2FyZF9kYXRhLT5yZXNldCA9IGFtMzV4X211c2JfcmVzZXQ7CiAJfSBlbHNlIGlmIChjcHVfaXNfb21hcDM0eHgoKSkgewogCQltdXNiX3Jlc291cmNlc1swXS5zdGFydCA9IE9NQVAzNFhYX0hTVVNCX09UR19CQVNFOwogCX0gZWxzZSBpZiAoY3B1X2lzX29tYXA0NHh4KCkpIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvdXNiLXR1c2I2MDEwLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3VzYi10dXNiNjAxMC5jCmluZGV4IDY0YTAxMTIuLjhhM2MwNWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvdXNiLXR1c2I2MDEwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi91c2ItdHVzYjYwMTAuYwpAQCAtMTIwLDggKzEyMCw4IEBACiAJdC5hZHZfb24gPSBuZXh0X2Nsayh0LmNzX29uLCB0X3Njc25oX2Fkdm5oIC0gNzAwMCwgZmNsa19wcyk7CiAKIAkvKiBHUE1DX0NMSyByYXRlID0gZmNsayByYXRlIC8gZGl2ICovCi0JdC5zeW5jX2NsayA9IDEyIC8qIDExLjEgbnNlYyAqLzsKLQl0bXAgPSAodC5zeW5jX2NsayAqIDEwMDAgKyBmY2xrX3BzIC0gMSkgLyBmY2xrX3BzOworCXQuc3luY19jbGsgPSAxMTEwMCAvKiAxMS4xIG5zZWMgKi87CisJdG1wID0gKHQuc3luY19jbGsgKyBmY2xrX3BzIC0gMSkgLyBmY2xrX3BzOwogCWlmICh0bXAgPiA0KQogCQlyZXR1cm4gLUVSQU5HRTsKIAlpZiAodG1wIDw9IDApCkBAIC0yMTYsNiArMjE2LDcgQEAKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKIAl7IC8qIElSUSAqLworCQkubmFtZQk9ICJtYyIsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAogCX0sCiB9OwpAQCAtMjIzLDcgKzIyNCw3IEBACiBzdGF0aWMgdTY0IHR1c2JfZG1hbWFzayA9IH4odTMyKTA7CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHR1c2JfZGV2aWNlID0gewotCS5uYW1lCQk9ICJtdXNiX2hkcmMiLAorCS5uYW1lCQk9ICJtdXNiLXR1c2IiLAogCS5pZAkJPSAtMSwKIAkuZGV2ID0gewogCQkuZG1hX21hc2sJCT0gJnR1c2JfZG1hbWFzaywKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvdm9sdGFnZS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi92b2x0YWdlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ2MDc5YzkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3ZvbHRhZ2UuYwpAQCAtMCwwICsxLDE1NzEgQEAKKy8qCisgKiBPTUFQMy9PTUFQNCBWb2x0YWdlIE1hbmFnZW1lbnQgUm91dGluZXMKKyAqCisgKiBBdXRob3I6IFRoYXJhIEdvcGluYXRoCTx0aGFyYUB0aS5jb20+CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKiBSYWplbmRyYSBOYXlhayA8cm5heWFrQHRpLmNvbT4KKyAqIExlc2x5IEEgTSA8eDAwODA5NzBAdGkuY29tPgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbgorICogS2FsbGUgSm9raW5pZW1pCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKiBUaGFyYSBHb3BpbmF0aCA8dGhhcmFAdGkuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorCisjaW5jbHVkZSA8cGxhdC9jb21tb24uaD4KKyNpbmNsdWRlIDxwbGF0L3ZvbHRhZ2UuaD4KKworI2luY2x1ZGUgInBybS1yZWdiaXRzLTM0eHguaCIKKyNpbmNsdWRlICJwcm0tcmVnYml0cy00NHh4LmgiCisjaW5jbHVkZSAicHJtNDR4eC5oIgorI2luY2x1ZGUgInByY200NHh4LmgiCisjaW5jbHVkZSAicHJtaW5zdDQ0eHguaCIKKyNpbmNsdWRlICJjb250cm9sLmgiCisKKyNkZWZpbmUgVlBfSURMRV9USU1FT1VUCQkyMDAKKyNkZWZpbmUgVlBfVFJBTlhET05FX1RJTUVPVVQJMzAwCisjZGVmaW5lIFZPTFRBR0VfRElSX1NJWkUJMTYKKworLyogVm9sdGFnZSBwcm9jZXNzb3IgcmVnaXN0ZXIgb2Zmc2V0cyAqLworc3RydWN0IHZwX3JlZ19vZmZzIHsKKwl1OCB2cGNvbmZpZzsKKwl1OCB2c3RlcG1pbjsKKwl1OCB2c3RlcG1heDsKKwl1OCB2bGltaXR0bzsKKwl1OCB2c3RhdHVzOworCXU4IHZvbHRhZ2U7Cit9OworCisvKiBWb2x0YWdlIFByb2Nlc3NvciBiaXQgZmllbGQgdmFsdWVzLCBzaGlmdHMgYW5kIG1hc2tzICovCitzdHJ1Y3QgdnBfcmVnX3ZhbCB7CisJLyogUFJNIG1vZHVsZSAqLworCXUxNiBwcm1fbW9kOworCS8qIFZQeF9WUENPTkZJRyAqLworCXUzMiB2cGNvbmZpZ19lcnJvcm9mZnNldDsKKwl1MTYgdnBjb25maWdfZXJyb3JnYWluOworCXUzMiB2cGNvbmZpZ19lcnJvcmdhaW5fbWFzazsKKwl1OCB2cGNvbmZpZ19lcnJvcmdhaW5fc2hpZnQ7CisJdTMyIHZwY29uZmlnX2luaXR2b2x0YWdlX21hc2s7CisJdTggdnBjb25maWdfaW5pdHZvbHRhZ2Vfc2hpZnQ7CisJdTMyIHZwY29uZmlnX3RpbWVvdXRlbjsKKwl1MzIgdnBjb25maWdfaW5pdHZkZDsKKwl1MzIgdnBjb25maWdfZm9yY2V1cGRhdGU7CisJdTMyIHZwY29uZmlnX3ZwZW5hYmxlOworCS8qIFZQeF9WU1RFUE1JTiAqLworCXU4IHZzdGVwbWluX3N0ZXBtaW47CisJdTE2IHZzdGVwbWluX3NtcHN3YWl0dGltZW1pbjsKKwl1OCB2c3RlcG1pbl9zdGVwbWluX3NoaWZ0OworCXU4IHZzdGVwbWluX3NtcHN3YWl0dGltZW1pbl9zaGlmdDsKKwkvKiBWUHhfVlNURVBNQVggKi8KKwl1OCB2c3RlcG1heF9zdGVwbWF4OworCXUxNiB2c3RlcG1heF9zbXBzd2FpdHRpbWVtYXg7CisJdTggdnN0ZXBtYXhfc3RlcG1heF9zaGlmdDsKKwl1OCB2c3RlcG1heF9zbXBzd2FpdHRpbWVtYXhfc2hpZnQ7CisJLyogVlB4X1ZMSU1JVFRPICovCisJdTggdmxpbWl0dG9fdmRkbWluOworCXU4IHZsaW1pdHRvX3ZkZG1heDsKKwl1MTYgdmxpbWl0dG9fdGltZW91dDsKKwl1OCB2bGltaXR0b192ZGRtaW5fc2hpZnQ7CisJdTggdmxpbWl0dG9fdmRkbWF4X3NoaWZ0OworCXU4IHZsaW1pdHRvX3RpbWVvdXRfc2hpZnQ7CisJLyogUFJNX0lSUVNUQVRVUyovCisJdTMyIHRyYW54ZG9uZV9zdGF0dXM7Cit9OworCisvKiBWb2x0YWdlIGNvbnRyb2xsZXIgcmVnaXN0ZXJzIGFuZCBvZmZzZXRzICovCitzdHJ1Y3QgdmNfcmVnX2luZm8geworCS8qIFBSTSBtb2R1bGUgKi8KKwl1MTYgcHJtX21vZDsKKwkvKiBWQyByZWdpc3RlciBvZmZzZXRzICovCisJdTggc21wc19zYV9yZWc7CisJdTggc21wc192b2xyYV9yZWc7CisJdTggYnlwYXNzX3ZhbF9yZWc7CisJdTggY21kdmFsX3JlZzsKKwl1OCB2b2x0c2V0dXBfcmVnOworCS8qVkNfU01QU19TQSovCisJdTggc21wc19zYV9zaGlmdDsKKwl1MzIgc21wc19zYV9tYXNrOworCS8qIFZDX1NNUFNfVk9MX1JBICovCisJdTggc21wc192b2xyYV9zaGlmdDsKKwl1MzIgc21wc192b2xyYV9tYXNrOworCS8qIFZDX0JZUEFTU19WQUwgKi8KKwl1OCBkYXRhX3NoaWZ0OworCXU4IHNsYXZlYWRkcl9zaGlmdDsKKwl1OCByZWdhZGRyX3NoaWZ0OworCXUzMiB2YWxpZDsKKwkvKiBWQ19DTURfVkFMICovCisJdTggY21kX29uX3NoaWZ0OworCXU4IGNtZF9vbmxwX3NoaWZ0OworCXU4IGNtZF9yZXRfc2hpZnQ7CisJdTggY21kX29mZl9zaGlmdDsKKwl1MzIgY21kX29uX21hc2s7CisJLyogUFJNX1ZPTFRTRVRVUCAqLworCXU4IHZvbHRzZXR1cF9zaGlmdDsKKwl1MzIgdm9sdHNldHVwX21hc2s7Cit9OworCisvKioKKyAqIG9tYXBfdmRkX2luZm8gLSBQZXIgVm9sdGFnZSBEb21haW4gaW5mbworICoKKyAqIEB2b2x0X2RhdGEJCTogdm9sdGFnZSB0YWJsZSBoYXZpbmcgdGhlIGRpc3RpbmN0IHZvbHRhZ2VzIHN1cHBvcnRlZAorICoJCQkgIGJ5IHRoZSBkb21haW4gYW5kIG90aGVyIGFzc29jaWF0ZWQgcGVyIHZvbHRhZ2UgZGF0YS4KKyAqIEBwbWljX2luZm8JCTogcG1pYyBzcGVjaWZpYyBwYXJhbWV0ZXJzIHdoaWNoIHNob3VsZCBiZSBwb3B1bHRlZCBieQorICoJCQkgIHRoZSBwbWljIGRyaXZlcnMuCisgKiBAdnBfb2ZmcwkJOiBzdHJ1Y3R1cmUgY29udGFpbmluZyB0aGUgb2Zmc2V0cyBmb3IgdmFyaW91cworICoJCQkgIHZwIHJlZ2lzdGVycworICogQHZwX3JlZwkJOiB0aGUgcmVnaXN0ZXIgdmFsdWVzLCBzaGlmdHMsIG1hc2tzIGZvciB2YXJpb3VzCisgKgkJCSAgdnAgcmVnaXN0ZXJzCisgKiBAdmNfcmVnCQk6IHN0cnVjdHVyZSBjb250YWluaW5nIHZhcmlvdXMgdmFyaW91cyB2YyByZWdpc3RlcnMsCisgKgkJCSAgc2hpZnRzLCBtYXNrcyBldGMuCisgKiBAdm9sdGRtCQk6IHBvaW50ZXIgdG8gdGhlIHZvbHRhZ2UgZG9tYWluIHN0cnVjdHVyZQorICogQGRlYnVnX2RpcgkJOiBkZWJ1ZyBkaXJlY3RvcnkgZm9yIHRoaXMgdm9sdGFnZSBkb21haW4uCisgKiBAY3Vycl92b2x0CQk6IGN1cnJlbnQgdm9sdGFnZSBmb3IgdGhpcyB2ZGQuCisgKiBAb2NwX21vZAkJOiBUaGUgcHJtIG1vZHVsZSBmb3IgYWNjZXNzaW5nIHRoZSBwcm0gaXJxc3RhdHVzIHJlZy4KKyAqIEBwcm1faXJxc3RfcmVnCTogcHJtIGlycXN0YXR1cyByZWdpc3Rlci4KKyAqIEB2cF9lbmFibGVkCQk6IGZsYWcgdG8ga2VlcCB0cmFjayBvZiB3aGV0aGVyIHZwIGlzIGVuYWJsZWQgb3Igbm90CisgKiBAdm9sdF9zY2FsZQkJOiBBUEkgdG8gc2NhbGUgdGhlIHZvbHRhZ2Ugb2YgdGhlIHZkZC4KKyAqLworc3RydWN0IG9tYXBfdmRkX2luZm8geworCXN0cnVjdCBvbWFwX3ZvbHRfZGF0YSAqdm9sdF9kYXRhOworCXN0cnVjdCBvbWFwX3ZvbHRfcG1pY19pbmZvICpwbWljX2luZm87CisJc3RydWN0IHZwX3JlZ19vZmZzIHZwX29mZnM7CisJc3RydWN0IHZwX3JlZ192YWwgdnBfcmVnOworCXN0cnVjdCB2Y19yZWdfaW5mbyB2Y19yZWc7CisJc3RydWN0IHZvbHRhZ2Vkb21haW4gdm9sdGRtOworCXN0cnVjdCBkZW50cnkgKmRlYnVnX2RpcjsKKwl1MzIgY3Vycl92b2x0OworCXUxNiBvY3BfbW9kOworCXU4IHBybV9pcnFzdF9yZWc7CisJYm9vbCB2cF9lbmFibGVkOworCXUzMiAoKnJlYWRfcmVnKSAodTE2IG1vZCwgdTggb2Zmc2V0KTsKKwl2b2lkICgqd3JpdGVfcmVnKSAodTMyIHZhbCwgdTE2IG1vZCwgdTggb2Zmc2V0KTsKKwlpbnQgKCp2b2x0X3NjYWxlKSAoc3RydWN0IG9tYXBfdmRkX2luZm8gKnZkZCwKKwkJdW5zaWduZWQgbG9uZyB0YXJnZXRfdm9sdCk7Cit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfdmRkX2luZm8gKnZkZF9pbmZvOworLyoKKyAqIE51bWJlciBvZiBzY2FsYWJsZSB2b2x0YWdlIGRvbWFpbnMuCisgKi8KK3N0YXRpYyBpbnQgbnJfc2NhbGFibGVfdmRkOworCisvKiBPTUFQMyBWREQgc3R1cmN0dXJlcyAqLworc3RhdGljIHN0cnVjdCBvbWFwX3ZkZF9pbmZvIG9tYXAzX3ZkZF9pbmZvW10gPSB7CisJeworCQkudnBfb2ZmcyA9IHsKKwkJCS52cGNvbmZpZyA9IE9NQVAzX1BSTV9WUDFfQ09ORklHX09GRlNFVCwKKwkJCS52c3RlcG1pbiA9IE9NQVAzX1BSTV9WUDFfVlNURVBNSU5fT0ZGU0VULAorCQkJLnZzdGVwbWF4ID0gT01BUDNfUFJNX1ZQMV9WU1RFUE1BWF9PRkZTRVQsCisJCQkudmxpbWl0dG8gPSBPTUFQM19QUk1fVlAxX1ZMSU1JVFRPX09GRlNFVCwKKwkJCS52c3RhdHVzID0gT01BUDNfUFJNX1ZQMV9TVEFUVVNfT0ZGU0VULAorCQkJLnZvbHRhZ2UgPSBPTUFQM19QUk1fVlAxX1ZPTFRBR0VfT0ZGU0VULAorCQl9LAorCQkudm9sdGRtID0geworCQkJLm5hbWUgPSAibXB1IiwKKwkJfSwKKwl9LAorCXsKKwkJLnZwX29mZnMgPSB7CisJCQkudnBjb25maWcgPSBPTUFQM19QUk1fVlAyX0NPTkZJR19PRkZTRVQsCisJCQkudnN0ZXBtaW4gPSBPTUFQM19QUk1fVlAyX1ZTVEVQTUlOX09GRlNFVCwKKwkJCS52c3RlcG1heCA9IE9NQVAzX1BSTV9WUDJfVlNURVBNQVhfT0ZGU0VULAorCQkJLnZsaW1pdHRvID0gT01BUDNfUFJNX1ZQMl9WTElNSVRUT19PRkZTRVQsCisJCQkudnN0YXR1cyA9IE9NQVAzX1BSTV9WUDJfU1RBVFVTX09GRlNFVCwKKwkJCS52b2x0YWdlID0gT01BUDNfUFJNX1ZQMl9WT0xUQUdFX09GRlNFVCwKKwkJfSwKKwkJLnZvbHRkbSA9IHsKKwkJCS5uYW1lID0gImNvcmUiLAorCQl9LAorCX0sCit9OworCisjZGVmaW5lIE9NQVAzX05SX1NDQUxBQkxFX1ZERCBBUlJBWV9TSVpFKG9tYXAzX3ZkZF9pbmZvKQorCisvKiBPTUFQNCBWREQgc3R1cmN0dXJlcyAqLworc3RhdGljIHN0cnVjdCBvbWFwX3ZkZF9pbmZvIG9tYXA0X3ZkZF9pbmZvW10gPSB7CisJeworCQkudnBfb2ZmcyA9IHsKKwkJCS52cGNvbmZpZyA9IE9NQVA0X1BSTV9WUF9NUFVfQ09ORklHX09GRlNFVCwKKwkJCS52c3RlcG1pbiA9IE9NQVA0X1BSTV9WUF9NUFVfVlNURVBNSU5fT0ZGU0VULAorCQkJLnZzdGVwbWF4ID0gT01BUDRfUFJNX1ZQX01QVV9WU1RFUE1BWF9PRkZTRVQsCisJCQkudmxpbWl0dG8gPSBPTUFQNF9QUk1fVlBfTVBVX1ZMSU1JVFRPX09GRlNFVCwKKwkJCS52c3RhdHVzID0gT01BUDRfUFJNX1ZQX01QVV9TVEFUVVNfT0ZGU0VULAorCQkJLnZvbHRhZ2UgPSBPTUFQNF9QUk1fVlBfTVBVX1ZPTFRBR0VfT0ZGU0VULAorCQl9LAorCQkudm9sdGRtID0geworCQkJLm5hbWUgPSAibXB1IiwKKwkJfSwKKwl9LAorCXsKKwkJLnZwX29mZnMgPSB7CisJCQkudnBjb25maWcgPSBPTUFQNF9QUk1fVlBfSVZBX0NPTkZJR19PRkZTRVQsCisJCQkudnN0ZXBtaW4gPSBPTUFQNF9QUk1fVlBfSVZBX1ZTVEVQTUlOX09GRlNFVCwKKwkJCS52c3RlcG1heCA9IE9NQVA0X1BSTV9WUF9JVkFfVlNURVBNQVhfT0ZGU0VULAorCQkJLnZsaW1pdHRvID0gT01BUDRfUFJNX1ZQX0lWQV9WTElNSVRUT19PRkZTRVQsCisJCQkudnN0YXR1cyA9IE9NQVA0X1BSTV9WUF9JVkFfU1RBVFVTX09GRlNFVCwKKwkJCS52b2x0YWdlID0gT01BUDRfUFJNX1ZQX0lWQV9WT0xUQUdFX09GRlNFVCwKKwkJfSwKKwkJLnZvbHRkbSA9IHsKKwkJCS5uYW1lID0gIml2YSIsCisJCX0sCisJfSwKKwl7CisJCS52cF9vZmZzID0geworCQkJLnZwY29uZmlnID0gT01BUDRfUFJNX1ZQX0NPUkVfQ09ORklHX09GRlNFVCwKKwkJCS52c3RlcG1pbiA9IE9NQVA0X1BSTV9WUF9DT1JFX1ZTVEVQTUlOX09GRlNFVCwKKwkJCS52c3RlcG1heCA9IE9NQVA0X1BSTV9WUF9DT1JFX1ZTVEVQTUFYX09GRlNFVCwKKwkJCS52bGltaXR0byA9IE9NQVA0X1BSTV9WUF9DT1JFX1ZMSU1JVFRPX09GRlNFVCwKKwkJCS52c3RhdHVzID0gT01BUDRfUFJNX1ZQX0NPUkVfU1RBVFVTX09GRlNFVCwKKwkJCS52b2x0YWdlID0gT01BUDRfUFJNX1ZQX0NPUkVfVk9MVEFHRV9PRkZTRVQsCisJCX0sCisJCS52b2x0ZG0gPSB7CisJCQkubmFtZSA9ICJjb3JlIiwKKwkJfSwKKwl9LAorfTsKKworI2RlZmluZSBPTUFQNF9OUl9TQ0FMQUJMRV9WREQgQVJSQVlfU0laRShvbWFwNF92ZGRfaW5mbykKKworLyoKKyAqIFN0cnVjdHVyZXMgY29udGFpbmluZyBPTUFQMzQzMC9PTUFQMzYzMCB2b2x0YWdlIHN1cHBvcnRlZCBhbmQgdmFyaW91cworICogdm9sdGFnZSBkZXBlbmRlbnQgZGF0YSBmb3IgZWFjaCBWREQuCisgKi8KKyNkZWZpbmUgVk9MVF9EQVRBX0RFRklORShfdl9ub20sIF9lZnVzZV9vZmZzLCBfZXJybWlubGltaXQsIF9lcnJnYWluKQlcCit7CQkJCQkJCQkJXAorCS52b2x0X25vbWluYWwJPSBfdl9ub20sCQkJCQlcCisJLnNyX2VmdXNlX29mZnMJPSBfZWZ1c2Vfb2ZmcywJCQkJCVwKKwkuc3JfZXJybWlubGltaXQJPSBfZXJybWlubGltaXQsCQkJCQlcCisJLnZwX2VycmdhaW4JPSBfZXJyZ2FpbgkJCQkJXAorfQorCisvKiBWREQxICovCitzdGF0aWMgc3RydWN0IG9tYXBfdm9sdF9kYXRhIG9tYXAzNHh4X3ZkZG1wdV92b2x0X2RhdGFbXSA9IHsKKwlWT0xUX0RBVEFfREVGSU5FKE9NQVAzNDMwX1ZERF9NUFVfT1BQMV9VViwgT01BUDM0M1hfQ09OVFJPTF9GVVNFX09QUDFfVkREMSwgMHhmNCwgMHgwYyksCisJVk9MVF9EQVRBX0RFRklORShPTUFQMzQzMF9WRERfTVBVX09QUDJfVVYsIE9NQVAzNDNYX0NPTlRST0xfRlVTRV9PUFAyX1ZERDEsIDB4ZjQsIDB4MGMpLAorCVZPTFRfREFUQV9ERUZJTkUoT01BUDM0MzBfVkREX01QVV9PUFAzX1VWLCBPTUFQMzQzWF9DT05UUk9MX0ZVU0VfT1BQM19WREQxLCAweGY5LCAweDE4KSwKKwlWT0xUX0RBVEFfREVGSU5FKE9NQVAzNDMwX1ZERF9NUFVfT1BQNF9VViwgT01BUDM0M1hfQ09OVFJPTF9GVVNFX09QUDRfVkREMSwgMHhmOSwgMHgxOCksCisJVk9MVF9EQVRBX0RFRklORShPTUFQMzQzMF9WRERfTVBVX09QUDVfVVYsIE9NQVAzNDNYX0NPTlRST0xfRlVTRV9PUFA1X1ZERDEsIDB4ZjksIDB4MTgpLAorCVZPTFRfREFUQV9ERUZJTkUoMCwgMCwgMCwgMCksCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfdm9sdF9kYXRhIG9tYXAzNnh4X3ZkZG1wdV92b2x0X2RhdGFbXSA9IHsKKwlWT0xUX0RBVEFfREVGSU5FKE9NQVAzNjMwX1ZERF9NUFVfT1BQNTBfVVYsIE9NQVAzNjMwX0NPTlRST0xfRlVTRV9PUFA1MF9WREQxLCAweGY0LCAweDBjKSwKKwlWT0xUX0RBVEFfREVGSU5FKE9NQVAzNjMwX1ZERF9NUFVfT1BQMTAwX1VWLCBPTUFQMzYzMF9DT05UUk9MX0ZVU0VfT1BQMTAwX1ZERDEsIDB4ZjksIDB4MTYpLAorCVZPTFRfREFUQV9ERUZJTkUoT01BUDM2MzBfVkREX01QVV9PUFAxMjBfVVYsIE9NQVAzNjMwX0NPTlRST0xfRlVTRV9PUFAxMjBfVkREMSwgMHhmYSwgMHgyMyksCisJVk9MVF9EQVRBX0RFRklORShPTUFQMzYzMF9WRERfTVBVX09QUDFHX1VWLCBPTUFQMzYzMF9DT05UUk9MX0ZVU0VfT1BQMUdfVkREMSwgMHhmYSwgMHgyNyksCisJVk9MVF9EQVRBX0RFRklORSgwLCAwLCAwLCAwKSwKK307CisKKy8qIFZERDIgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF92b2x0X2RhdGEgb21hcDM0eHhfdmRkY29yZV92b2x0X2RhdGFbXSA9IHsKKwlWT0xUX0RBVEFfREVGSU5FKE9NQVAzNDMwX1ZERF9DT1JFX09QUDFfVVYsIE9NQVAzNDNYX0NPTlRST0xfRlVTRV9PUFAxX1ZERDIsIDB4ZjQsIDB4MGMpLAorCVZPTFRfREFUQV9ERUZJTkUoT01BUDM0MzBfVkREX0NPUkVfT1BQMl9VViwgT01BUDM0M1hfQ09OVFJPTF9GVVNFX09QUDJfVkREMiwgMHhmNCwgMHgwYyksCisJVk9MVF9EQVRBX0RFRklORShPTUFQMzQzMF9WRERfQ09SRV9PUFAzX1VWLCBPTUFQMzQzWF9DT05UUk9MX0ZVU0VfT1BQM19WREQyLCAweGY5LCAweDE4KSwKKwlWT0xUX0RBVEFfREVGSU5FKDAsIDAsIDAsIDApLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX3ZvbHRfZGF0YSBvbWFwMzZ4eF92ZGRjb3JlX3ZvbHRfZGF0YVtdID0geworCVZPTFRfREFUQV9ERUZJTkUoT01BUDM2MzBfVkREX0NPUkVfT1BQNTBfVVYsIE9NQVAzNjMwX0NPTlRST0xfRlVTRV9PUFA1MF9WREQyLCAweGY0LCAweDBjKSwKKwlWT0xUX0RBVEFfREVGSU5FKE9NQVAzNjMwX1ZERF9DT1JFX09QUDEwMF9VViwgT01BUDM2MzBfQ09OVFJPTF9GVVNFX09QUDEwMF9WREQyLCAweGY5LCAweDE2KSwKKwlWT0xUX0RBVEFfREVGSU5FKDAsIDAsIDAsIDApLAorfTsKKworLyoKKyAqIFN0cnVjdHVyZXMgY29udGFpbmluZyBPTUFQNDQzMCB2b2x0YWdlIHN1cHBvcnRlZCBhbmQgdmFyaW91cworICogdm9sdGFnZSBkZXBlbmRlbnQgZGF0YSBmb3IgZWFjaCBWREQuCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF92b2x0X2RhdGEgb21hcDQ0eHhfdmRkX21wdV92b2x0X2RhdGFbXSA9IHsKKwlWT0xUX0RBVEFfREVGSU5FKE9NQVA0NDMwX1ZERF9NUFVfT1BQNTBfVVYsIE9NQVA0NFhYX0NPTlRST0xfRlVTRV9NUFVfT1BQNTAsIDB4ZjQsIDB4MGMpLAorCVZPTFRfREFUQV9ERUZJTkUoT01BUDQ0MzBfVkREX01QVV9PUFAxMDBfVVYsIE9NQVA0NFhYX0NPTlRST0xfRlVTRV9NUFVfT1BQMTAwLCAweGY5LCAweDE2KSwKKwlWT0xUX0RBVEFfREVGSU5FKE9NQVA0NDMwX1ZERF9NUFVfT1BQVFVSQk9fVVYsIE9NQVA0NFhYX0NPTlRST0xfRlVTRV9NUFVfT1BQVFVSQk8sIDB4ZmEsIDB4MjMpLAorCVZPTFRfREFUQV9ERUZJTkUoT01BUDQ0MzBfVkREX01QVV9PUFBOSVRST19VViwgT01BUDQ0WFhfQ09OVFJPTF9GVVNFX01QVV9PUFBOSVRSTywgMHhmYSwgMHgyNyksCisJVk9MVF9EQVRBX0RFRklORSgwLCAwLCAwLCAwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF92b2x0X2RhdGEgb21hcDQ0eHhfdmRkX2l2YV92b2x0X2RhdGFbXSA9IHsKKwlWT0xUX0RBVEFfREVGSU5FKE9NQVA0NDMwX1ZERF9JVkFfT1BQNTBfVVYsIE9NQVA0NFhYX0NPTlRST0xfRlVTRV9JVkFfT1BQNTAsIDB4ZjQsIDB4MGMpLAorCVZPTFRfREFUQV9ERUZJTkUoT01BUDQ0MzBfVkREX0lWQV9PUFAxMDBfVVYsIE9NQVA0NFhYX0NPTlRST0xfRlVTRV9JVkFfT1BQMTAwLCAweGY5LCAweDE2KSwKKwlWT0xUX0RBVEFfREVGSU5FKE9NQVA0NDMwX1ZERF9JVkFfT1BQVFVSQk9fVVYsIE9NQVA0NFhYX0NPTlRST0xfRlVTRV9JVkFfT1BQVFVSQk8sIDB4ZmEsIDB4MjMpLAorCVZPTFRfREFUQV9ERUZJTkUoMCwgMCwgMCwgMCksCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfdm9sdF9kYXRhIG9tYXA0NHh4X3ZkZF9jb3JlX3ZvbHRfZGF0YVtdID0geworCVZPTFRfREFUQV9ERUZJTkUoT01BUDQ0MzBfVkREX0NPUkVfT1BQNTBfVVYsIE9NQVA0NFhYX0NPTlRST0xfRlVTRV9DT1JFX09QUDUwLCAweGY0LCAweDBjKSwKKwlWT0xUX0RBVEFfREVGSU5FKE9NQVA0NDMwX1ZERF9DT1JFX09QUDEwMF9VViwgT01BUDQ0WFhfQ09OVFJPTF9GVVNFX0NPUkVfT1BQMTAwLCAweGY5LCAweDE2KSwKKwlWT0xUX0RBVEFfREVGSU5FKDAsIDAsIDAsIDApLAorfTsKKworc3RhdGljIHN0cnVjdCBkZW50cnkgKnZvbHRhZ2VfZGlyOworCisvKiBJbml0IGZ1bmN0aW9uIHBvaW50ZXJzICovCitzdGF0aWMgdm9pZCAoKnZjX2luaXQpIChzdHJ1Y3Qgb21hcF92ZGRfaW5mbyAqdmRkKTsKK3N0YXRpYyBpbnQgKCp2ZGRfZGF0YV9jb25maWd1cmUpIChzdHJ1Y3Qgb21hcF92ZGRfaW5mbyAqdmRkKTsKKworc3RhdGljIHUzMiBvbWFwM192b2x0YWdlX3JlYWRfcmVnKHUxNiBtb2QsIHU4IG9mZnNldCkKK3sKKwlyZXR1cm4gb21hcDJfcHJtX3JlYWRfbW9kX3JlZyhtb2QsIG9mZnNldCk7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXAzX3ZvbHRhZ2Vfd3JpdGVfcmVnKHUzMiB2YWwsIHUxNiBtb2QsIHU4IG9mZnNldCkKK3sKKwlvbWFwMl9wcm1fd3JpdGVfbW9kX3JlZyh2YWwsIG1vZCwgb2Zmc2V0KTsKK30KKworc3RhdGljIHUzMiBvbWFwNF92b2x0YWdlX3JlYWRfcmVnKHUxNiBtb2QsIHU4IG9mZnNldCkKK3sKKwlyZXR1cm4gb21hcDRfcHJtaW5zdF9yZWFkX2luc3RfcmVnKE9NQVA0NDMwX1BSTV9QQVJUSVRJT04sCisJCQkJCW1vZCwgb2Zmc2V0KTsKK30KKworc3RhdGljIHZvaWQgb21hcDRfdm9sdGFnZV93cml0ZV9yZWcodTMyIHZhbCwgdTE2IG1vZCwgdTggb2Zmc2V0KQoreworCW9tYXA0X3BybWluc3Rfd3JpdGVfaW5zdF9yZWcodmFsLCBPTUFQNDQzMF9QUk1fUEFSVElUSU9OLCBtb2QsIG9mZnNldCk7Cit9CisKKy8qIFZvbHRhZ2UgZGVidWdmcyBzdXBwb3J0ICovCitzdGF0aWMgaW50IHZwX3ZvbHRfZGVidWdfZ2V0KHZvaWQgKmRhdGEsIHU2NCAqdmFsKQoreworCXN0cnVjdCBvbWFwX3ZkZF9pbmZvICp2ZGQgPSAoc3RydWN0IG9tYXBfdmRkX2luZm8gKikgZGF0YTsKKwl1OCB2c2VsOworCisJaWYgKCF2ZGQpIHsKKwkJcHJfd2FybmluZygiV3JvbmcgcGFyYW1hdGVyIHBhc3NlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXZzZWwgPSB2ZGQtPnJlYWRfcmVnKHZkZC0+dnBfcmVnLnBybV9tb2QsIHZkZC0+dnBfb2Zmcy52b2x0YWdlKTsKKwlwcl9ub3RpY2UoImN1cnJfdnNlbCA9ICV4XG4iLCB2c2VsKTsKKworCWlmICghdmRkLT5wbWljX2luZm8tPnZzZWxfdG9fdXYpIHsKKwkJcHJfd2FybmluZygiUE1JQyBmdW5jdGlvbiB0byBjb252ZXJ0IHZzZWwgdG8gdm9sdGFnZSIKKwkJCSJpbiB1ViBub3QgcmVnaXN0ZXJkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJKnZhbCA9IHZkZC0+cG1pY19pbmZvLT52c2VsX3RvX3V2KHZzZWwpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5vbV92b2x0X2RlYnVnX2dldCh2b2lkICpkYXRhLCB1NjQgKnZhbCkKK3sKKwlzdHJ1Y3Qgb21hcF92ZGRfaW5mbyAqdmRkID0gKHN0cnVjdCBvbWFwX3ZkZF9pbmZvICopIGRhdGE7CisKKwlpZiAoIXZkZCkgeworCQlwcl93YXJuaW5nKCJXcm9uZyBwYXJhbWF0ZXIgcGFzc2VkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJKnZhbCA9IG9tYXBfdm9sdGFnZV9nZXRfbm9tX3ZvbHQoJnZkZC0+dm9sdGRtKTsKKworCXJldHVybiAwOworfQorCitERUZJTkVfU0lNUExFX0FUVFJJQlVURSh2cF92b2x0X2RlYnVnX2ZvcHMsIHZwX3ZvbHRfZGVidWdfZ2V0LCBOVUxMLCAiJWxsdVxuIik7CitERUZJTkVfU0lNUExFX0FUVFJJQlVURShub21fdm9sdF9kZWJ1Z19mb3BzLCBub21fdm9sdF9kZWJ1Z19nZXQsIE5VTEwsCisJCQkJCQkJCSIlbGx1XG4iKTsKK3N0YXRpYyB2b2lkIHZwX2xhdGNoX3ZzZWwoc3RydWN0IG9tYXBfdmRkX2luZm8gKnZkZCkKK3sKKwl1MzIgdnBjb25maWc7CisJdTE2IG1vZDsKKwl1bnNpZ25lZCBsb25nIHV2ZGM7CisJY2hhciB2c2VsOworCisJdXZkYyA9IG9tYXBfdm9sdGFnZV9nZXRfbm9tX3ZvbHQoJnZkZC0+dm9sdGRtKTsKKwlpZiAoIXV2ZGMpIHsKKwkJcHJfd2FybmluZygiJXM6IHVuYWJsZSB0byBmaW5kIGN1cnJlbnQgdm9sdGFnZSBmb3IgdmRkXyVzXG4iLAorCQkJX19mdW5jX18sIHZkZC0+dm9sdGRtLm5hbWUpOworCQlyZXR1cm47CisJfQorCisJaWYgKCF2ZGQtPnBtaWNfaW5mbyB8fCAhdmRkLT5wbWljX2luZm8tPnV2X3RvX3ZzZWwpIHsKKwkJcHJfd2FybmluZygiJXM6IFBNSUMgZnVuY3Rpb24gdG8gY29udmVydCB2b2x0YWdlIGluIHVWIHRvIgorCQkJIiB2c2VsIG5vdCByZWdpc3RlcmVkXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisKKwltb2QgPSB2ZGQtPnZwX3JlZy5wcm1fbW9kOworCisJdnNlbCA9IHZkZC0+cG1pY19pbmZvLT51dl90b192c2VsKHV2ZGMpOworCisJdnBjb25maWcgPSB2ZGQtPnJlYWRfcmVnKG1vZCwgdmRkLT52cF9vZmZzLnZwY29uZmlnKTsKKwl2cGNvbmZpZyAmPSB+KHZkZC0+dnBfcmVnLnZwY29uZmlnX2luaXR2b2x0YWdlX21hc2sgfAorCQkJdmRkLT52cF9yZWcudnBjb25maWdfaW5pdHZkZCk7CisJdnBjb25maWcgfD0gdnNlbCA8PCB2ZGQtPnZwX3JlZy52cGNvbmZpZ19pbml0dm9sdGFnZV9zaGlmdDsKKworCXZkZC0+d3JpdGVfcmVnKHZwY29uZmlnLCBtb2QsIHZkZC0+dnBfb2Zmcy52cGNvbmZpZyk7CisKKwkvKiBUcmlnZ2VyIGluaXRWREQgdmFsdWUgY29weSB0byB2b2x0YWdlIHByb2Nlc3NvciAqLworCXZkZC0+d3JpdGVfcmVnKCh2cGNvbmZpZyB8IHZkZC0+dnBfcmVnLnZwY29uZmlnX2luaXR2ZGQpLCBtb2QsCisJCQl2ZGQtPnZwX29mZnMudnBjb25maWcpOworCisJLyogQ2xlYXIgaW5pdFZERCBjb3B5IHRyaWdnZXIgYml0ICovCisJdmRkLT53cml0ZV9yZWcodnBjb25maWcsIG1vZCwgdmRkLT52cF9vZmZzLnZwY29uZmlnKTsKK30KKworLyogR2VuZXJpYyB2b2x0YWdlIGluaXQgZnVuY3Rpb25zICovCitzdGF0aWMgdm9pZCBfX2luaXQgdnBfaW5pdChzdHJ1Y3Qgb21hcF92ZGRfaW5mbyAqdmRkKQoreworCXUzMiB2cF92YWw7CisJdTE2IG1vZDsKKworCWlmICghdmRkLT5yZWFkX3JlZyB8fCAhdmRkLT53cml0ZV9yZWcpIHsKKwkJcHJfZXJyKCIlczogTm8gcmVhZC93cml0ZSBBUEkgZm9yIGFjY2Vzc2luZyB2ZGRfJXMgcmVnc1xuIiwKKwkJCV9fZnVuY19fLCB2ZGQtPnZvbHRkbS5uYW1lKTsKKwkJcmV0dXJuOworCX0KKworCW1vZCA9IHZkZC0+dnBfcmVnLnBybV9tb2Q7CisKKwl2cF92YWwgPSB2ZGQtPnZwX3JlZy52cGNvbmZpZ19lcnJvcm9mZnNldCB8CisJCSh2ZGQtPnZwX3JlZy52cGNvbmZpZ19lcnJvcmdhaW4gPDwKKwkJdmRkLT52cF9yZWcudnBjb25maWdfZXJyb3JnYWluX3NoaWZ0KSB8CisJCXZkZC0+dnBfcmVnLnZwY29uZmlnX3RpbWVvdXRlbjsKKwl2ZGQtPndyaXRlX3JlZyh2cF92YWwsIG1vZCwgdmRkLT52cF9vZmZzLnZwY29uZmlnKTsKKworCXZwX3ZhbCA9ICgodmRkLT52cF9yZWcudnN0ZXBtaW5fc21wc3dhaXR0aW1lbWluIDw8CisJCXZkZC0+dnBfcmVnLnZzdGVwbWluX3NtcHN3YWl0dGltZW1pbl9zaGlmdCkgfAorCQkodmRkLT52cF9yZWcudnN0ZXBtaW5fc3RlcG1pbiA8PAorCQl2ZGQtPnZwX3JlZy52c3RlcG1pbl9zdGVwbWluX3NoaWZ0KSk7CisJdmRkLT53cml0ZV9yZWcodnBfdmFsLCBtb2QsIHZkZC0+dnBfb2Zmcy52c3RlcG1pbik7CisKKwl2cF92YWwgPSAoKHZkZC0+dnBfcmVnLnZzdGVwbWF4X3NtcHN3YWl0dGltZW1heCA8PAorCQl2ZGQtPnZwX3JlZy52c3RlcG1heF9zbXBzd2FpdHRpbWVtYXhfc2hpZnQpIHwKKwkJKHZkZC0+dnBfcmVnLnZzdGVwbWF4X3N0ZXBtYXggPDwKKwkJdmRkLT52cF9yZWcudnN0ZXBtYXhfc3RlcG1heF9zaGlmdCkpOworCXZkZC0+d3JpdGVfcmVnKHZwX3ZhbCwgbW9kLCB2ZGQtPnZwX29mZnMudnN0ZXBtYXgpOworCisJdnBfdmFsID0gKCh2ZGQtPnZwX3JlZy52bGltaXR0b192ZGRtYXggPDwKKwkJdmRkLT52cF9yZWcudmxpbWl0dG9fdmRkbWF4X3NoaWZ0KSB8CisJCSh2ZGQtPnZwX3JlZy52bGltaXR0b192ZGRtaW4gPDwKKwkJdmRkLT52cF9yZWcudmxpbWl0dG9fdmRkbWluX3NoaWZ0KSB8CisJCSh2ZGQtPnZwX3JlZy52bGltaXR0b190aW1lb3V0IDw8CisJCXZkZC0+dnBfcmVnLnZsaW1pdHRvX3RpbWVvdXRfc2hpZnQpKTsKKwl2ZGQtPndyaXRlX3JlZyh2cF92YWwsIG1vZCwgdmRkLT52cF9vZmZzLnZsaW1pdHRvKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IHZkZF9kZWJ1Z2ZzX2luaXQoc3RydWN0IG9tYXBfdmRkX2luZm8gKnZkZCkKK3sKKwljaGFyICpuYW1lOworCisJbmFtZSA9IGt6YWxsb2MoVk9MVEFHRV9ESVJfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFuYW1lKSB7CisJCXByX3dhcm5pbmcoIiVzOiBVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBkZWJ1Z2ZzIgorCQkJIiBkaXJlY3RvcnkgbmFtZSBmb3IgdmRkXyVzIiwKKwkJCV9fZnVuY19fLCB2ZGQtPnZvbHRkbS5uYW1lKTsKKwkJcmV0dXJuOworCX0KKwlzdHJjcHkobmFtZSwgInZkZF8iKTsKKwlzdHJjYXQobmFtZSwgdmRkLT52b2x0ZG0ubmFtZSk7CisKKwl2ZGQtPmRlYnVnX2RpciA9IGRlYnVnZnNfY3JlYXRlX2RpcihuYW1lLCB2b2x0YWdlX2Rpcik7CisJaWYgKElTX0VSUih2ZGQtPmRlYnVnX2RpcikpIHsKKwkJcHJfd2FybmluZygiJXM6IFVuYWJsZSB0byBjcmVhdGUgZGVidWdmcyBkaXJlY3RvcnkgZm9yIgorCQkJIiB2ZGRfJXNcbiIsIF9fZnVuY19fLCB2ZGQtPnZvbHRkbS5uYW1lKTsKKwkJdmRkLT5kZWJ1Z19kaXIgPSBOVUxMOworCQlyZXR1cm47CisJfQorCisJKHZvaWQpIGRlYnVnZnNfY3JlYXRlX3gxNigidnBfZXJyb3JnYWluIiwgU19JUlVHTywgdmRkLT5kZWJ1Z19kaXIsCisJCQkJJih2ZGQtPnZwX3JlZy52cGNvbmZpZ19lcnJvcmdhaW4pKTsKKwkodm9pZCkgZGVidWdmc19jcmVhdGVfeDE2KCJ2cF9zbXBzd2FpdHRpbWVtaW4iLCBTX0lSVUdPLAorCQkJCXZkZC0+ZGVidWdfZGlyLAorCQkJCSYodmRkLT52cF9yZWcudnN0ZXBtaW5fc21wc3dhaXR0aW1lbWluKSk7CisJKHZvaWQpIGRlYnVnZnNfY3JlYXRlX3g4KCJ2cF9zdGVwbWluIiwgU19JUlVHTywgdmRkLT5kZWJ1Z19kaXIsCisJCQkJJih2ZGQtPnZwX3JlZy52c3RlcG1pbl9zdGVwbWluKSk7CisJKHZvaWQpIGRlYnVnZnNfY3JlYXRlX3gxNigidnBfc21wc3dhaXR0aW1lbWF4IiwgU19JUlVHTywKKwkJCQl2ZGQtPmRlYnVnX2RpciwKKwkJCQkmKHZkZC0+dnBfcmVnLnZzdGVwbWF4X3NtcHN3YWl0dGltZW1heCkpOworCSh2b2lkKSBkZWJ1Z2ZzX2NyZWF0ZV94OCgidnBfc3RlcG1heCIsIFNfSVJVR08sIHZkZC0+ZGVidWdfZGlyLAorCQkJCSYodmRkLT52cF9yZWcudnN0ZXBtYXhfc3RlcG1heCkpOworCSh2b2lkKSBkZWJ1Z2ZzX2NyZWF0ZV94OCgidnBfdmRkbWF4IiwgU19JUlVHTywgdmRkLT5kZWJ1Z19kaXIsCisJCQkJJih2ZGQtPnZwX3JlZy52bGltaXR0b192ZGRtYXgpKTsKKwkodm9pZCkgZGVidWdmc19jcmVhdGVfeDgoInZwX3ZkZG1pbiIsIFNfSVJVR08sIHZkZC0+ZGVidWdfZGlyLAorCQkJCSYodmRkLT52cF9yZWcudmxpbWl0dG9fdmRkbWluKSk7CisJKHZvaWQpIGRlYnVnZnNfY3JlYXRlX3gxNigidnBfdGltZW91dCIsIFNfSVJVR08sIHZkZC0+ZGVidWdfZGlyLAorCQkJCSYodmRkLT52cF9yZWcudmxpbWl0dG9fdGltZW91dCkpOworCSh2b2lkKSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJjdXJyX3ZwX3ZvbHQiLCBTX0lSVUdPLCB2ZGQtPmRlYnVnX2RpciwKKwkJCQkodm9pZCAqKSB2ZGQsICZ2cF92b2x0X2RlYnVnX2ZvcHMpOworCSh2b2lkKSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJjdXJyX25vbWluYWxfdm9sdCIsIFNfSVJVR08sCisJCQkJdmRkLT5kZWJ1Z19kaXIsICh2b2lkICopIHZkZCwKKwkJCQkmbm9tX3ZvbHRfZGVidWdfZm9wcyk7Cit9CisKKy8qIFZvbHRhZ2Ugc2NhbGUgYW5kIGFjY2Vzc29yeSBBUElzICovCitzdGF0aWMgaW50IF9wcmVfdm9sdF9zY2FsZShzdHJ1Y3Qgb21hcF92ZGRfaW5mbyAqdmRkLAorCQl1bnNpZ25lZCBsb25nIHRhcmdldF92b2x0LCB1OCAqdGFyZ2V0X3ZzZWwsIHU4ICpjdXJyZW50X3ZzZWwpCit7CisJc3RydWN0IG9tYXBfdm9sdF9kYXRhICp2b2x0X2RhdGE7CisJdTMyIHZjX2NtZHZhbCwgdnBfZXJyZ2Fpbl92YWw7CisJdTE2IHZwX21vZCwgdmNfbW9kOworCisJLyogQ2hlY2sgaWYgc3VmZmllY2llbnQgcG1pYyBpbmZvIGlzIGF2YWlsYWJsZSBmb3IgdGhpcyB2ZGQgKi8KKwlpZiAoIXZkZC0+cG1pY19pbmZvKSB7CisJCXByX2VycigiJXM6IEluc3VmZmljaWVudCBwbWljIGluZm8gdG8gc2NhbGUgdGhlIHZkZF8lc1xuIiwKKwkJCV9fZnVuY19fLCB2ZGQtPnZvbHRkbS5uYW1lKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKCF2ZGQtPnBtaWNfaW5mby0+dXZfdG9fdnNlbCkgeworCQlwcl9lcnIoIiVzOiBQTUlDIGZ1bmN0aW9uIHRvIGNvbnZlcnQgdm9sdGFnZSBpbiB1ViB0byIKKwkJCSJ2c2VsIG5vdCByZWdpc3RlcmVkLiBIZW5jZSB1bmFibGUgdG8gc2NhbGUgdm9sdGFnZSIKKwkJCSJmb3IgdmRkXyVzXG4iLCBfX2Z1bmNfXywgdmRkLT52b2x0ZG0ubmFtZSk7CisJCXJldHVybiAtRU5PREFUQTsKKwl9CisKKwlpZiAoIXZkZC0+cmVhZF9yZWcgfHwgIXZkZC0+d3JpdGVfcmVnKSB7CisJCXByX2VycigiJXM6IE5vIHJlYWQvd3JpdGUgQVBJIGZvciBhY2Nlc3NpbmcgdmRkXyVzIHJlZ3NcbiIsCisJCQlfX2Z1bmNfXywgdmRkLT52b2x0ZG0ubmFtZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXZwX21vZCA9IHZkZC0+dnBfcmVnLnBybV9tb2Q7CisJdmNfbW9kID0gdmRkLT52Y19yZWcucHJtX21vZDsKKworCS8qIEdldCB2b2x0X2RhdGEgY29ycmVzcG9uZGluZyB0byB0YXJnZXRfdm9sdCAqLworCXZvbHRfZGF0YSA9IG9tYXBfdm9sdGFnZV9nZXRfdm9sdGRhdGEoJnZkZC0+dm9sdGRtLCB0YXJnZXRfdm9sdCk7CisJaWYgKElTX0VSUih2b2x0X2RhdGEpKQorCQl2b2x0X2RhdGEgPSBOVUxMOworCisJKnRhcmdldF92c2VsID0gdmRkLT5wbWljX2luZm8tPnV2X3RvX3ZzZWwodGFyZ2V0X3ZvbHQpOworCSpjdXJyZW50X3ZzZWwgPSB2ZGQtPnJlYWRfcmVnKHZwX21vZCwgdmRkLT52cF9vZmZzLnZvbHRhZ2UpOworCisJLyogU2V0dGluZyB0aGUgT04gdm9sdGFnZSB0byB0aGUgbmV3IHRhcmdldCB2b2x0YWdlICovCisJdmNfY21kdmFsID0gdmRkLT5yZWFkX3JlZyh2Y19tb2QsIHZkZC0+dmNfcmVnLmNtZHZhbF9yZWcpOworCXZjX2NtZHZhbCAmPSB+dmRkLT52Y19yZWcuY21kX29uX21hc2s7CisJdmNfY21kdmFsIHw9ICgqdGFyZ2V0X3ZzZWwgPDwgdmRkLT52Y19yZWcuY21kX29uX3NoaWZ0KTsKKwl2ZGQtPndyaXRlX3JlZyh2Y19jbWR2YWwsIHZjX21vZCwgdmRkLT52Y19yZWcuY21kdmFsX3JlZyk7CisKKwkvKiBTZXR0aW5nIHZwIGVycm9yZ2FpbiBiYXNlZCBvbiB0aGUgdm9sdGFnZSAqLworCWlmICh2b2x0X2RhdGEpIHsKKwkJdnBfZXJyZ2Fpbl92YWwgPSB2ZGQtPnJlYWRfcmVnKHZwX21vZCwKKwkJCQl2ZGQtPnZwX29mZnMudnBjb25maWcpOworCQl2ZGQtPnZwX3JlZy52cGNvbmZpZ19lcnJvcmdhaW4gPSB2b2x0X2RhdGEtPnZwX2VycmdhaW47CisJCXZwX2VycmdhaW5fdmFsICY9IH52ZGQtPnZwX3JlZy52cGNvbmZpZ19lcnJvcmdhaW5fbWFzazsKKwkJdnBfZXJyZ2Fpbl92YWwgfD0gdmRkLT52cF9yZWcudnBjb25maWdfZXJyb3JnYWluIDw8CisJCQkJdmRkLT52cF9yZWcudnBjb25maWdfZXJyb3JnYWluX3NoaWZ0OworCQl2ZGQtPndyaXRlX3JlZyh2cF9lcnJnYWluX3ZhbCwgdnBfbW9kLAorCQkJCXZkZC0+dnBfb2Zmcy52cGNvbmZpZyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9wb3N0X3ZvbHRfc2NhbGUoc3RydWN0IG9tYXBfdmRkX2luZm8gKnZkZCwKKwkJdW5zaWduZWQgbG9uZyB0YXJnZXRfdm9sdCwgdTggdGFyZ2V0X3ZzZWwsIHU4IGN1cnJlbnRfdnNlbCkKK3sKKwl1MzIgc21wc19zdGVwcyA9IDAsIHNtcHNfZGVsYXkgPSAwOworCisJc21wc19zdGVwcyA9IGFicyh0YXJnZXRfdnNlbCAtIGN1cnJlbnRfdnNlbCk7CisJLyogU01QUyBzbGV3IHJhdGUgLyBzdGVwIHNpemUuIDJ1cyBhZGRlZCBhcyBidWZmZXIuICovCisJc21wc19kZWxheSA9ICgoc21wc19zdGVwcyAqIHZkZC0+cG1pY19pbmZvLT5zdGVwX3NpemUpIC8KKwkJCXZkZC0+cG1pY19pbmZvLT5zbGV3X3JhdGUpICsgMjsKKwl1ZGVsYXkoc21wc19kZWxheSk7CisKKwl2ZGQtPmN1cnJfdm9sdCA9IHRhcmdldF92b2x0OworfQorCisvKiB2Y19ieXBhc3Nfc2NhbGVfdm9sdGFnZSAtIFZDIGJ5cGFzcyBtZXRob2Qgb2Ygdm9sdGFnZSBzY2FsaW5nICovCitzdGF0aWMgaW50IHZjX2J5cGFzc19zY2FsZV92b2x0YWdlKHN0cnVjdCBvbWFwX3ZkZF9pbmZvICp2ZGQsCisJCXVuc2lnbmVkIGxvbmcgdGFyZ2V0X3ZvbHQpCit7CisJdTMyIGxvb3BfY250ID0gMCwgcmV0cmllc19jbnQgPSAwOworCXUzMiB2Y192YWxpZCwgdmNfYnlwYXNzX3ZhbF9yZWcsIHZjX2J5cGFzc192YWx1ZTsKKwl1MTYgbW9kOworCXU4IHRhcmdldF92c2VsLCBjdXJyZW50X3ZzZWw7CisJaW50IHJldDsKKworCXJldCA9IF9wcmVfdm9sdF9zY2FsZSh2ZGQsIHRhcmdldF92b2x0LCAmdGFyZ2V0X3ZzZWwsICZjdXJyZW50X3ZzZWwpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwltb2QgPSB2ZGQtPnZjX3JlZy5wcm1fbW9kOworCisJdmNfdmFsaWQgPSB2ZGQtPnZjX3JlZy52YWxpZDsKKwl2Y19ieXBhc3NfdmFsX3JlZyA9IHZkZC0+dmNfcmVnLmJ5cGFzc192YWxfcmVnOworCXZjX2J5cGFzc192YWx1ZSA9ICh0YXJnZXRfdnNlbCA8PCB2ZGQtPnZjX3JlZy5kYXRhX3NoaWZ0KSB8CisJCQkodmRkLT5wbWljX2luZm8tPnBtaWNfcmVnIDw8CisJCQl2ZGQtPnZjX3JlZy5yZWdhZGRyX3NoaWZ0KSB8CisJCQkodmRkLT5wbWljX2luZm8tPmkyY19zbGF2ZV9hZGRyIDw8CisJCQl2ZGQtPnZjX3JlZy5zbGF2ZWFkZHJfc2hpZnQpOworCisJdmRkLT53cml0ZV9yZWcodmNfYnlwYXNzX3ZhbHVlLCBtb2QsIHZjX2J5cGFzc192YWxfcmVnKTsKKwl2ZGQtPndyaXRlX3JlZyh2Y19ieXBhc3NfdmFsdWUgfCB2Y192YWxpZCwgbW9kLCB2Y19ieXBhc3NfdmFsX3JlZyk7CisKKwl2Y19ieXBhc3NfdmFsdWUgPSB2ZGQtPnJlYWRfcmVnKG1vZCwgdmNfYnlwYXNzX3ZhbF9yZWcpOworCS8qCisJICogTG9vcCB0aWxsIHRoZSBieXBhc3MgY29tbWFuZCBpcyBhY2tub3dsZWRnZWQgZnJvbSB0aGUgU01QUy4KKwkgKiBOT1RFOiBUaGlzIGlzIGxlZ2FjeSBjb2RlLiBUaGUgbG9vcCBjb3VudCBhbmQgcmV0cnkgY291bnQgbmVlZHMKKwkgKiB0byBiZSByZXZpc2l0ZWQuCisJICovCisJd2hpbGUgKCEodmNfYnlwYXNzX3ZhbHVlICYgdmNfdmFsaWQpKSB7CisJCWxvb3BfY250Kys7CisKKwkJaWYgKHJldHJpZXNfY250ID4gMTApIHsKKwkJCXByX3dhcm5pbmcoIiVzOiBSZXRyeSBjb3VudCBleGNlZWRlZFxuIiwgX19mdW5jX18pOworCQkJcmV0dXJuIC1FVElNRURPVVQ7CisJCX0KKworCQlpZiAobG9vcF9jbnQgPiA1MCkgeworCQkJcmV0cmllc19jbnQrKzsKKwkJCWxvb3BfY250ID0gMDsKKwkJCXVkZWxheSgxMCk7CisJCX0KKwkJdmNfYnlwYXNzX3ZhbHVlID0gdmRkLT5yZWFkX3JlZyhtb2QsIHZjX2J5cGFzc192YWxfcmVnKTsKKwl9CisKKwlfcG9zdF92b2x0X3NjYWxlKHZkZCwgdGFyZ2V0X3ZvbHQsIHRhcmdldF92c2VsLCBjdXJyZW50X3ZzZWwpOworCXJldHVybiAwOworfQorCisvKiBWUCBmb3JjZSB1cGRhdGUgbWV0aG9kIG9mIHZvbHRhZ2Ugc2NhbGluZyAqLworc3RhdGljIGludCB2cF9mb3JjZXVwZGF0ZV9zY2FsZV92b2x0YWdlKHN0cnVjdCBvbWFwX3ZkZF9pbmZvICp2ZGQsCisJCXVuc2lnbmVkIGxvbmcgdGFyZ2V0X3ZvbHQpCit7CisJdTMyIHZwY29uZmlnOworCXUxNiBtb2QsIG9jcF9tb2Q7CisJdTggdGFyZ2V0X3ZzZWwsIGN1cnJlbnRfdnNlbCwgcHJtX2lycXN0X3JlZzsKKwlpbnQgcmV0LCB0aW1lb3V0ID0gMDsKKworCXJldCA9IF9wcmVfdm9sdF9zY2FsZSh2ZGQsIHRhcmdldF92b2x0LCAmdGFyZ2V0X3ZzZWwsICZjdXJyZW50X3ZzZWwpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwltb2QgPSB2ZGQtPnZwX3JlZy5wcm1fbW9kOworCW9jcF9tb2QgPSB2ZGQtPm9jcF9tb2Q7CisJcHJtX2lycXN0X3JlZyA9IHZkZC0+cHJtX2lycXN0X3JlZzsKKworCS8qCisJICogQ2xlYXIgYWxsIHBlbmRpbmcgVHJhbnNhY3Rpb25Eb25lIGludGVycnVwdC9zdGF0dXMuIFR5cGljYWwgbGF0ZW5jeQorCSAqIGlzIDwzdXMKKwkgKi8KKwl3aGlsZSAodGltZW91dCsrIDwgVlBfVFJBTlhET05FX1RJTUVPVVQpIHsKKwkJdmRkLT53cml0ZV9yZWcodmRkLT52cF9yZWcudHJhbnhkb25lX3N0YXR1cywKKwkJCQlvY3BfbW9kLCBwcm1faXJxc3RfcmVnKTsKKwkJaWYgKCEodmRkLT5yZWFkX3JlZyhvY3BfbW9kLCBwcm1faXJxc3RfcmVnKSAmCisJCQkJdmRkLT52cF9yZWcudHJhbnhkb25lX3N0YXR1cykpCisJCQkJYnJlYWs7CisJCXVkZWxheSgxKTsKKwl9CisJaWYgKHRpbWVvdXQgPj0gVlBfVFJBTlhET05FX1RJTUVPVVQpIHsKKwkJcHJfd2FybmluZygiJXM6IHZkZF8lcyBUUkFOWERPTkUgdGltZW91dCBleGNlZWRlZC4iCisJCQkiVm9sdGFnZSBjaGFuZ2UgYWJvcnRlZCIsIF9fZnVuY19fLCB2ZGQtPnZvbHRkbS5uYW1lKTsKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisJfQorCisJLyogQ29uZmlndXJlIGZvciBWUC1Gb3JjZSBVcGRhdGUgKi8KKwl2cGNvbmZpZyA9IHZkZC0+cmVhZF9yZWcobW9kLCB2ZGQtPnZwX29mZnMudnBjb25maWcpOworCXZwY29uZmlnICY9IH4odmRkLT52cF9yZWcudnBjb25maWdfaW5pdHZkZCB8CisJCQl2ZGQtPnZwX3JlZy52cGNvbmZpZ19mb3JjZXVwZGF0ZSB8CisJCQl2ZGQtPnZwX3JlZy52cGNvbmZpZ19pbml0dm9sdGFnZV9tYXNrKTsKKwl2cGNvbmZpZyB8PSAoKHRhcmdldF92c2VsIDw8CisJCQl2ZGQtPnZwX3JlZy52cGNvbmZpZ19pbml0dm9sdGFnZV9zaGlmdCkpOworCXZkZC0+d3JpdGVfcmVnKHZwY29uZmlnLCBtb2QsIHZkZC0+dnBfb2Zmcy52cGNvbmZpZyk7CisKKwkvKiBUcmlnZ2VyIGluaXRWREQgdmFsdWUgY29weSB0byB2b2x0YWdlIHByb2Nlc3NvciAqLworCXZwY29uZmlnIHw9IHZkZC0+dnBfcmVnLnZwY29uZmlnX2luaXR2ZGQ7CisJdmRkLT53cml0ZV9yZWcodnBjb25maWcsIG1vZCwgdmRkLT52cF9vZmZzLnZwY29uZmlnKTsKKworCS8qIEZvcmNlIHVwZGF0ZSBvZiB2b2x0YWdlICovCisJdnBjb25maWcgfD0gdmRkLT52cF9yZWcudnBjb25maWdfZm9yY2V1cGRhdGU7CisJdmRkLT53cml0ZV9yZWcodnBjb25maWcsIG1vZCwgdmRkLT52cF9vZmZzLnZwY29uZmlnKTsKKworCS8qCisJICogV2FpdCBmb3IgVHJhbnNhY3Rpb25Eb25lLiBUeXBpY2FsIGxhdGVuY3kgaXMgPDIwMHVzLgorCSAqIERlcGVuZHMgb24gU01QU1dBSVRUSU1FTUlOL01BWCBhbmQgdm9sdGFnZSBjaGFuZ2UKKwkgKi8KKwl0aW1lb3V0ID0gMDsKKwlvbWFwX3Rlc3RfdGltZW91dCgodmRkLT5yZWFkX3JlZyhvY3BfbW9kLCBwcm1faXJxc3RfcmVnKSAmCisJCQl2ZGQtPnZwX3JlZy50cmFueGRvbmVfc3RhdHVzKSwKKwkJCVZQX1RSQU5YRE9ORV9USU1FT1VULCB0aW1lb3V0KTsKKwlpZiAodGltZW91dCA+PSBWUF9UUkFOWERPTkVfVElNRU9VVCkKKwkJcHJfZXJyKCIlczogdmRkXyVzIFRSQU5YRE9ORSB0aW1lb3V0IGV4Y2VlZGVkLiIKKwkJCSJUUkFOWERPTkUgbmV2ZXIgZ290IHNldCBhZnRlciB0aGUgdm9sdGFnZSB1cGRhdGVcbiIsCisJCQlfX2Z1bmNfXywgdmRkLT52b2x0ZG0ubmFtZSk7CisKKwlfcG9zdF92b2x0X3NjYWxlKHZkZCwgdGFyZ2V0X3ZvbHQsIHRhcmdldF92c2VsLCBjdXJyZW50X3ZzZWwpOworCisJLyoKKwkgKiBEaXNhYmxlIFRyYW5zYWN0aW9uRG9uZSBpbnRlcnJ1cHQgLCBjbGVhciBhbGwgc3RhdHVzLCBjbGVhcgorCSAqIGNvbnRyb2wgcmVnaXN0ZXJzCisJICovCisJdGltZW91dCA9IDA7CisJd2hpbGUgKHRpbWVvdXQrKyA8IFZQX1RSQU5YRE9ORV9USU1FT1VUKSB7CisJCXZkZC0+d3JpdGVfcmVnKHZkZC0+dnBfcmVnLnRyYW54ZG9uZV9zdGF0dXMsCisJCQkJb2NwX21vZCwgcHJtX2lycXN0X3JlZyk7CisJCWlmICghKHZkZC0+cmVhZF9yZWcob2NwX21vZCwgcHJtX2lycXN0X3JlZykgJgorCQkJCXZkZC0+dnBfcmVnLnRyYW54ZG9uZV9zdGF0dXMpKQorCQkJCWJyZWFrOworCQl1ZGVsYXkoMSk7CisJfQorCisJaWYgKHRpbWVvdXQgPj0gVlBfVFJBTlhET05FX1RJTUVPVVQpCisJCXByX3dhcm5pbmcoIiVzOiB2ZGRfJXMgVFJBTlhET05FIHRpbWVvdXQgZXhjZWVkZWQgd2hpbGUgdHJ5aW5nIgorCQkJInRvIGNsZWFyIHRoZSBUUkFOWERPTkUgc3RhdHVzXG4iLAorCQkJX19mdW5jX18sIHZkZC0+dm9sdGRtLm5hbWUpOworCisJdnBjb25maWcgPSB2ZGQtPnJlYWRfcmVnKG1vZCwgdmRkLT52cF9vZmZzLnZwY29uZmlnKTsKKwkvKiBDbGVhciBpbml0VkREIGNvcHkgdHJpZ2dlciBiaXQgKi8KKwl2cGNvbmZpZyAmPSB+dmRkLT52cF9yZWcudnBjb25maWdfaW5pdHZkZDs7CisJdmRkLT53cml0ZV9yZWcodnBjb25maWcsIG1vZCwgdmRkLT52cF9vZmZzLnZwY29uZmlnKTsKKwkvKiBDbGVhciBmb3JjZSBiaXQgKi8KKwl2cGNvbmZpZyAmPSB+dmRkLT52cF9yZWcudnBjb25maWdfZm9yY2V1cGRhdGU7CisJdmRkLT53cml0ZV9yZWcodnBjb25maWcsIG1vZCwgdmRkLT52cF9vZmZzLnZwY29uZmlnKTsKKworCXJldHVybiAwOworfQorCisvKiBPTUFQMyBzcGVjaWZpYyB2b2x0YWdlIGluaXQgZnVuY3Rpb25zICovCisKKy8qCisgKiBJbnRpYWxpemVzIHRoZSB2b2x0YWdlIGNvbnRyb2xsZXIgcmVnaXN0ZXJzIHdpdGggdGhlIFBNSUMgYW5kIGJvYXJkCisgKiBzcGVjaWZpYyBwYXJhbWV0ZXJzIGFuZCB2b2x0YWdlIHNldHVwIHRpbWVzIGZvciBPTUFQMy4KKyAqLworc3RhdGljIHZvaWQgX19pbml0IG9tYXAzX3ZjX2luaXQoc3RydWN0IG9tYXBfdmRkX2luZm8gKnZkZCkKK3sKKwl1MzIgdmNfdmFsOworCXUxNiBtb2Q7CisJdTggb25fdnNlbCwgb25scF92c2VsLCByZXRfdnNlbCwgb2ZmX3ZzZWw7CisJc3RhdGljIGJvb2wgaXNfaW5pdGlhbGl6ZWQ7CisKKwlpZiAoIXZkZC0+cG1pY19pbmZvIHx8ICF2ZGQtPnBtaWNfaW5mby0+dXZfdG9fdnNlbCkgeworCQlwcl9lcnIoIiVzOiBQTUlDIGluZm8gcmVxdXJpZWQgdG8gY29uZmlndXJlIHZjIGZvciIKKwkJCSJ2ZGRfJXMgbm90IHBvcHVsYXRlZC5IZW5jZSBjYW5ub3QgaW5pdGlhbGl6ZSB2Y1xuIiwKKwkJCV9fZnVuY19fLCB2ZGQtPnZvbHRkbS5uYW1lKTsKKwkJcmV0dXJuOworCX0KKworCWlmICghdmRkLT5yZWFkX3JlZyB8fCAhdmRkLT53cml0ZV9yZWcpIHsKKwkJcHJfZXJyKCIlczogTm8gcmVhZC93cml0ZSBBUEkgZm9yIGFjY2Vzc2luZyB2ZGRfJXMgcmVnc1xuIiwKKwkJCV9fZnVuY19fLCB2ZGQtPnZvbHRkbS5uYW1lKTsKKwkJcmV0dXJuOworCX0KKworCW1vZCA9IHZkZC0+dmNfcmVnLnBybV9tb2Q7CisKKwkvKiBTZXQgdXAgdGhlIFNNUFNfU0EoaTJjIHNsYXZlIGFkZHJlc3MgaW4gVkMgKi8KKwl2Y192YWwgPSB2ZGQtPnJlYWRfcmVnKG1vZCwgdmRkLT52Y19yZWcuc21wc19zYV9yZWcpOworCXZjX3ZhbCAmPSB+dmRkLT52Y19yZWcuc21wc19zYV9tYXNrOworCXZjX3ZhbCB8PSB2ZGQtPnBtaWNfaW5mby0+aTJjX3NsYXZlX2FkZHIgPDwgdmRkLT52Y19yZWcuc21wc19zYV9zaGlmdDsKKwl2ZGQtPndyaXRlX3JlZyh2Y192YWwsIG1vZCwgdmRkLT52Y19yZWcuc21wc19zYV9yZWcpOworCisJLyogU2V0dXAgdGhlIFZPTFJBKHBtaWMgcmVnIGFkZHIpIGluIFZDICovCisJdmNfdmFsID0gdmRkLT5yZWFkX3JlZyhtb2QsIHZkZC0+dmNfcmVnLnNtcHNfdm9scmFfcmVnKTsKKwl2Y192YWwgJj0gfnZkZC0+dmNfcmVnLnNtcHNfdm9scmFfbWFzazsKKwl2Y192YWwgfD0gdmRkLT5wbWljX2luZm8tPnBtaWNfcmVnIDw8IHZkZC0+dmNfcmVnLnNtcHNfdm9scmFfc2hpZnQ7CisJdmRkLT53cml0ZV9yZWcodmNfdmFsLCBtb2QsIHZkZC0+dmNfcmVnLnNtcHNfdm9scmFfcmVnKTsKKworCS8qQ29uZmlndXJlIHRoZSBzZXR1cCB0aW1lcyAqLworCXZjX3ZhbCA9IHZkZC0+cmVhZF9yZWcobW9kLCB2ZGQtPnZjX3JlZy52b2x0c2V0dXBfcmVnKTsKKwl2Y192YWwgJj0gfnZkZC0+dmNfcmVnLnZvbHRzZXR1cF9tYXNrOworCXZjX3ZhbCB8PSB2ZGQtPnBtaWNfaW5mby0+dm9sdF9zZXR1cF90aW1lIDw8CisJCQl2ZGQtPnZjX3JlZy52b2x0c2V0dXBfc2hpZnQ7CisJdmRkLT53cml0ZV9yZWcodmNfdmFsLCBtb2QsIHZkZC0+dmNfcmVnLnZvbHRzZXR1cF9yZWcpOworCisJLyogU2V0IHVwIHRoZSBvbiwgaW5hY3RpdmUsIHJldGVudGlvbiBhbmQgb2ZmIHZvbHRhZ2UgKi8KKwlvbl92c2VsID0gdmRkLT5wbWljX2luZm8tPnV2X3RvX3ZzZWwodmRkLT5wbWljX2luZm8tPm9uX3ZvbHQpOworCW9ubHBfdnNlbCA9IHZkZC0+cG1pY19pbmZvLT51dl90b192c2VsKHZkZC0+cG1pY19pbmZvLT5vbmxwX3ZvbHQpOworCXJldF92c2VsID0gdmRkLT5wbWljX2luZm8tPnV2X3RvX3ZzZWwodmRkLT5wbWljX2luZm8tPnJldF92b2x0KTsKKwlvZmZfdnNlbCA9IHZkZC0+cG1pY19pbmZvLT51dl90b192c2VsKHZkZC0+cG1pY19pbmZvLT5vZmZfdm9sdCk7CisJdmNfdmFsCT0gKChvbl92c2VsIDw8IHZkZC0+dmNfcmVnLmNtZF9vbl9zaGlmdCkgfAorCQkob25scF92c2VsIDw8IHZkZC0+dmNfcmVnLmNtZF9vbmxwX3NoaWZ0KSB8CisJCShyZXRfdnNlbCA8PCB2ZGQtPnZjX3JlZy5jbWRfcmV0X3NoaWZ0KSB8CisJCShvZmZfdnNlbCA8PCB2ZGQtPnZjX3JlZy5jbWRfb2ZmX3NoaWZ0KSk7CisJdmRkLT53cml0ZV9yZWcodmNfdmFsLCBtb2QsIHZkZC0+dmNfcmVnLmNtZHZhbF9yZWcpOworCisJaWYgKGlzX2luaXRpYWxpemVkKQorCQlyZXR1cm47CisKKwkvKiBHZW5lcmljIFZDIHBhcmFtZXRlcnMgaW5pdCAqLworCXZkZC0+d3JpdGVfcmVnKE9NQVAzNDMwX0NNRDFfTUFTSyB8IE9NQVAzNDMwX1JBVjFfTUFTSywgbW9kLAorCQkJT01BUDNfUFJNX1ZDX0NIX0NPTkZfT0ZGU0VUKTsKKwl2ZGQtPndyaXRlX3JlZyhPTUFQMzQzMF9NQ09ERV9TSElGVCB8IE9NQVAzNDMwX0hTRU5fTUFTSywgbW9kLAorCQkJT01BUDNfUFJNX1ZDX0kyQ19DRkdfT0ZGU0VUKTsKKwl2ZGQtPndyaXRlX3JlZyhPTUFQM19DTEtTRVRVUCwgbW9kLCBPTUFQM19QUk1fQ0xLU0VUVVBfT0ZGU0VUKTsKKwl2ZGQtPndyaXRlX3JlZyhPTUFQM19WT0xUT0ZGU0VULCBtb2QsIE9NQVAzX1BSTV9WT0xUT0ZGU0VUX09GRlNFVCk7CisJdmRkLT53cml0ZV9yZWcoT01BUDNfVk9MVFNFVFVQMiwgbW9kLCBPTUFQM19QUk1fVk9MVFNFVFVQMl9PRkZTRVQpOworCWlzX2luaXRpYWxpemVkID0gdHJ1ZTsKK30KKworLyogU2V0cyB1cCBhbGwgdGhlIFZERCByZWxhdGVkIGluZm8gZm9yIE9NQVAzICovCitzdGF0aWMgaW50IF9faW5pdCBvbWFwM192ZGRfZGF0YV9jb25maWd1cmUoc3RydWN0IG9tYXBfdmRkX2luZm8gKnZkZCkKK3sKKwlzdHJ1Y3QgY2xrICpzeXNfY2s7CisJdTMyIHN5c19jbGtfc3BlZWQsIHRpbWVvdXRfdmFsLCB3YWl0dGltZTsKKworCWlmICghdmRkLT5wbWljX2luZm8pIHsKKwkJcHJfZXJyKCIlczogUE1JQyBpbmZvIHJlcXVyaWVkIHRvIGNvbmZpZ3VyZSB2ZGRfJXMgbm90IgorCQkJInBvcHVsYXRlZC5IZW5jZSBjYW5ub3QgaW5pdGlhbGl6ZSB2ZGRfJXNcbiIsCisJCQlfX2Z1bmNfXywgdmRkLT52b2x0ZG0ubmFtZSwgdmRkLT52b2x0ZG0ubmFtZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICghc3RyY21wKHZkZC0+dm9sdGRtLm5hbWUsICJtcHUiKSkgeworCQlpZiAoY3B1X2lzX29tYXAzNjMwKCkpCisJCQl2ZGQtPnZvbHRfZGF0YSA9IG9tYXAzNnh4X3ZkZG1wdV92b2x0X2RhdGE7CisJCWVsc2UKKwkJCXZkZC0+dm9sdF9kYXRhID0gb21hcDM0eHhfdmRkbXB1X3ZvbHRfZGF0YTsKKworCQl2ZGQtPnZwX3JlZy50cmFueGRvbmVfc3RhdHVzID0gT01BUDM0MzBfVlAxX1RSQU5YRE9ORV9TVF9NQVNLOworCQl2ZGQtPnZjX3JlZy5jbWR2YWxfcmVnID0gT01BUDNfUFJNX1ZDX0NNRF9WQUxfMF9PRkZTRVQ7CisJCXZkZC0+dmNfcmVnLnNtcHNfc2Ffc2hpZnQgPSBPTUFQMzQzMF9QUk1fVkNfU01QU19TQV9TQTBfU0hJRlQ7CisJCXZkZC0+dmNfcmVnLnNtcHNfc2FfbWFzayA9IE9NQVAzNDMwX1BSTV9WQ19TTVBTX1NBX1NBMF9NQVNLOworCQl2ZGQtPnZjX3JlZy5zbXBzX3ZvbHJhX3NoaWZ0ID0gT01BUDM0MzBfVk9MUkEwX1NISUZUOworCQl2ZGQtPnZjX3JlZy5zbXBzX3ZvbHJhX21hc2sgPSBPTUFQMzQzMF9WT0xSQTBfTUFTSzsKKwkJdmRkLT52Y19yZWcudm9sdHNldHVwX3NoaWZ0ID0gT01BUDM0MzBfU0VUVVBfVElNRTFfU0hJRlQ7CisJCXZkZC0+dmNfcmVnLnZvbHRzZXR1cF9tYXNrID0gT01BUDM0MzBfU0VUVVBfVElNRTFfTUFTSzsKKwl9IGVsc2UgaWYgKCFzdHJjbXAodmRkLT52b2x0ZG0ubmFtZSwgImNvcmUiKSkgeworCQlpZiAoY3B1X2lzX29tYXAzNjMwKCkpCisJCQl2ZGQtPnZvbHRfZGF0YSA9IG9tYXAzNnh4X3ZkZGNvcmVfdm9sdF9kYXRhOworCQllbHNlCisJCQl2ZGQtPnZvbHRfZGF0YSA9IG9tYXAzNHh4X3ZkZGNvcmVfdm9sdF9kYXRhOworCisJCXZkZC0+dnBfcmVnLnRyYW54ZG9uZV9zdGF0dXMgPSBPTUFQMzQzMF9WUDJfVFJBTlhET05FX1NUX01BU0s7CisJCXZkZC0+dmNfcmVnLmNtZHZhbF9yZWcgPSBPTUFQM19QUk1fVkNfQ01EX1ZBTF8xX09GRlNFVDsKKwkJdmRkLT52Y19yZWcuc21wc19zYV9zaGlmdCA9IE9NQVAzNDMwX1BSTV9WQ19TTVBTX1NBX1NBMV9TSElGVDsKKwkJdmRkLT52Y19yZWcuc21wc19zYV9tYXNrID0gT01BUDM0MzBfUFJNX1ZDX1NNUFNfU0FfU0ExX01BU0s7CisJCXZkZC0+dmNfcmVnLnNtcHNfdm9scmFfc2hpZnQgPSBPTUFQMzQzMF9WT0xSQTFfU0hJRlQ7CisJCXZkZC0+dmNfcmVnLnNtcHNfdm9scmFfbWFzayA9IE9NQVAzNDMwX1ZPTFJBMV9NQVNLOworCQl2ZGQtPnZjX3JlZy52b2x0c2V0dXBfc2hpZnQgPSBPTUFQMzQzMF9TRVRVUF9USU1FMl9TSElGVDsKKwkJdmRkLT52Y19yZWcudm9sdHNldHVwX21hc2sgPSBPTUFQMzQzMF9TRVRVUF9USU1FMl9NQVNLOworCX0gZWxzZSB7CisJCXByX3dhcm5pbmcoIiVzOiB2ZGRfJXMgZG9lcyBub3QgZXhpc2l0IGluIE9NQVAzXG4iLAorCQkJX19mdW5jX18sIHZkZC0+dm9sdGRtLm5hbWUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKgorCSAqIFN5cyBjbGsgcmF0ZSBpcyByZXF1aXJlIHRvIGNhbGN1bGF0ZSB2cCB0aW1lb3V0IHZhbHVlIGFuZAorCSAqIHNtcHN3YWl0dGltZW1pbiBhbmQgc21wc3dhaXR0aW1lbWF4LgorCSAqLworCXN5c19jayA9IGNsa19nZXQoTlVMTCwgInN5c19jayIpOworCWlmIChJU19FUlIoc3lzX2NrKSkgeworCQlwcl93YXJuaW5nKCIlczogQ291bGQgbm90IGdldCB0aGUgc3lzIGNsayB0byBjYWxjdWxhdGUiCisJCQkidmFyaW91cyB2ZGRfJXMgcGFyYW1zXG4iLCBfX2Z1bmNfXywgdmRkLT52b2x0ZG0ubmFtZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlzeXNfY2xrX3NwZWVkID0gY2xrX2dldF9yYXRlKHN5c19jayk7CisJY2xrX3B1dChzeXNfY2spOworCS8qIERpdmlkZSB0byBhdm9pZCBvdmVyZmxvdyAqLworCXN5c19jbGtfc3BlZWQgLz0gMTAwMDsKKworCS8qIEdlbmVyaWMgdm9sdGFnZSBwYXJhbWV0ZXJzICovCisJdmRkLT5jdXJyX3ZvbHQgPSAxMjAwMDAwOworCXZkZC0+b2NwX21vZCA9IE9DUF9NT0Q7CisJdmRkLT5wcm1faXJxc3RfcmVnID0gT01BUDNfUFJNX0lSUVNUQVRVU19NUFVfT0ZGU0VUOworCXZkZC0+cmVhZF9yZWcgPSBvbWFwM192b2x0YWdlX3JlYWRfcmVnOworCXZkZC0+d3JpdGVfcmVnID0gb21hcDNfdm9sdGFnZV93cml0ZV9yZWc7CisJdmRkLT52b2x0X3NjYWxlID0gdnBfZm9yY2V1cGRhdGVfc2NhbGVfdm9sdGFnZTsKKwl2ZGQtPnZwX2VuYWJsZWQgPSBmYWxzZTsKKworCS8qIFZDIHBhcmFtZXRlcnMgKi8KKwl2ZGQtPnZjX3JlZy5wcm1fbW9kID0gT01BUDM0MzBfR1JfTU9EOworCXZkZC0+dmNfcmVnLnNtcHNfc2FfcmVnID0gT01BUDNfUFJNX1ZDX1NNUFNfU0FfT0ZGU0VUOworCXZkZC0+dmNfcmVnLnNtcHNfdm9scmFfcmVnID0gT01BUDNfUFJNX1ZDX1NNUFNfVk9MX1JBX09GRlNFVDsKKwl2ZGQtPnZjX3JlZy5ieXBhc3NfdmFsX3JlZyA9IE9NQVAzX1BSTV9WQ19CWVBBU1NfVkFMX09GRlNFVDsKKwl2ZGQtPnZjX3JlZy52b2x0c2V0dXBfcmVnID0gT01BUDNfUFJNX1ZPTFRTRVRVUDFfT0ZGU0VUOworCXZkZC0+dmNfcmVnLmRhdGFfc2hpZnQgPSBPTUFQMzQzMF9EQVRBX1NISUZUOworCXZkZC0+dmNfcmVnLnNsYXZlYWRkcl9zaGlmdCA9IE9NQVAzNDMwX1NMQVZFQUREUl9TSElGVDsKKwl2ZGQtPnZjX3JlZy5yZWdhZGRyX3NoaWZ0ID0gT01BUDM0MzBfUkVHQUREUl9TSElGVDsKKwl2ZGQtPnZjX3JlZy52YWxpZCA9IE9NQVAzNDMwX1ZBTElEX01BU0s7CisJdmRkLT52Y19yZWcuY21kX29uX3NoaWZ0ID0gT01BUDM0MzBfVkNfQ01EX09OX1NISUZUOworCXZkZC0+dmNfcmVnLmNtZF9vbl9tYXNrID0gT01BUDM0MzBfVkNfQ01EX09OX01BU0s7CisJdmRkLT52Y19yZWcuY21kX29ubHBfc2hpZnQgPSBPTUFQMzQzMF9WQ19DTURfT05MUF9TSElGVDsKKwl2ZGQtPnZjX3JlZy5jbWRfcmV0X3NoaWZ0ID0gT01BUDM0MzBfVkNfQ01EX1JFVF9TSElGVDsKKwl2ZGQtPnZjX3JlZy5jbWRfb2ZmX3NoaWZ0ID0gT01BUDM0MzBfVkNfQ01EX09GRl9TSElGVDsKKworCXZkZC0+dnBfcmVnLnBybV9tb2QgPSBPTUFQMzQzMF9HUl9NT0Q7CisKKwkvKiBWUENPTkZJRyBiaXQgZmllbGRzICovCisJdmRkLT52cF9yZWcudnBjb25maWdfZXJyb3JvZmZzZXQgPSAodmRkLT5wbWljX2luZm8tPnZwX2Vycm9yb2Zmc2V0IDw8CisJCQkJIE9NQVAzNDMwX0VSUk9ST0ZGU0VUX1NISUZUKTsKKwl2ZGQtPnZwX3JlZy52cGNvbmZpZ19lcnJvcmdhaW5fbWFzayA9IE9NQVAzNDMwX0VSUk9SR0FJTl9NQVNLOworCXZkZC0+dnBfcmVnLnZwY29uZmlnX2Vycm9yZ2Fpbl9zaGlmdCA9IE9NQVAzNDMwX0VSUk9SR0FJTl9TSElGVDsKKwl2ZGQtPnZwX3JlZy52cGNvbmZpZ19pbml0dm9sdGFnZV9zaGlmdCA9IE9NQVAzNDMwX0lOSVRWT0xUQUdFX1NISUZUOworCXZkZC0+dnBfcmVnLnZwY29uZmlnX2luaXR2b2x0YWdlX21hc2sgPSBPTUFQMzQzMF9JTklUVk9MVEFHRV9NQVNLOworCXZkZC0+dnBfcmVnLnZwY29uZmlnX3RpbWVvdXRlbiA9IE9NQVAzNDMwX1RJTUVPVVRFTl9NQVNLOworCXZkZC0+dnBfcmVnLnZwY29uZmlnX2luaXR2ZGQgPSBPTUFQMzQzMF9JTklUVkREX01BU0s7CisJdmRkLT52cF9yZWcudnBjb25maWdfZm9yY2V1cGRhdGUgPSBPTUFQMzQzMF9GT1JDRVVQREFURV9NQVNLOworCXZkZC0+dnBfcmVnLnZwY29uZmlnX3ZwZW5hYmxlID0gT01BUDM0MzBfVlBFTkFCTEVfTUFTSzsKKworCS8qIFZTVEVQTUlOIFZTVEVQTUFYIGJpdCBmaWVsZHMgKi8KKwl3YWl0dGltZSA9ICgodmRkLT5wbWljX2luZm8tPnN0ZXBfc2l6ZSAvIHZkZC0+cG1pY19pbmZvLT5zbGV3X3JhdGUpICoKKwkJCQlzeXNfY2xrX3NwZWVkKSAvIDEwMDA7CisJdmRkLT52cF9yZWcudnN0ZXBtaW5fc21wc3dhaXR0aW1lbWluID0gd2FpdHRpbWU7CisJdmRkLT52cF9yZWcudnN0ZXBtYXhfc21wc3dhaXR0aW1lbWF4ID0gd2FpdHRpbWU7CisJdmRkLT52cF9yZWcudnN0ZXBtaW5fc3RlcG1pbiA9IHZkZC0+cG1pY19pbmZvLT52cF92c3RlcG1pbjsKKwl2ZGQtPnZwX3JlZy52c3RlcG1heF9zdGVwbWF4ID0gdmRkLT5wbWljX2luZm8tPnZwX3ZzdGVwbWF4OworCXZkZC0+dnBfcmVnLnZzdGVwbWluX3NtcHN3YWl0dGltZW1pbl9zaGlmdCA9CisJCQkJT01BUDM0MzBfU01QU1dBSVRUSU1FTUlOX1NISUZUOworCXZkZC0+dnBfcmVnLnZzdGVwbWF4X3NtcHN3YWl0dGltZW1heF9zaGlmdCA9CisJCQkJT01BUDM0MzBfU01QU1dBSVRUSU1FTUFYX1NISUZUOworCXZkZC0+dnBfcmVnLnZzdGVwbWluX3N0ZXBtaW5fc2hpZnQgPSBPTUFQMzQzMF9WU1RFUE1JTl9TSElGVDsKKwl2ZGQtPnZwX3JlZy52c3RlcG1heF9zdGVwbWF4X3NoaWZ0ID0gT01BUDM0MzBfVlNURVBNQVhfU0hJRlQ7CisKKwkvKiBWTElNSVRUTyBiaXQgZmllbGRzICovCisJdGltZW91dF92YWwgPSAoc3lzX2Nsa19zcGVlZCAqIHZkZC0+cG1pY19pbmZvLT52cF90aW1lb3V0X3VzKSAvIDEwMDA7CisJdmRkLT52cF9yZWcudmxpbWl0dG9fdGltZW91dCA9IHRpbWVvdXRfdmFsOworCXZkZC0+dnBfcmVnLnZsaW1pdHRvX3ZkZG1pbiA9IHZkZC0+cG1pY19pbmZvLT52cF92ZGRtaW47CisJdmRkLT52cF9yZWcudmxpbWl0dG9fdmRkbWF4ID0gdmRkLT5wbWljX2luZm8tPnZwX3ZkZG1heDsKKwl2ZGQtPnZwX3JlZy52bGltaXR0b192ZGRtaW5fc2hpZnQgPSBPTUFQMzQzMF9WRERNSU5fU0hJRlQ7CisJdmRkLT52cF9yZWcudmxpbWl0dG9fdmRkbWF4X3NoaWZ0ID0gT01BUDM0MzBfVkRETUFYX1NISUZUOworCXZkZC0+dnBfcmVnLnZsaW1pdHRvX3RpbWVvdXRfc2hpZnQgPSBPTUFQMzQzMF9USU1FT1VUX1NISUZUOworCisJcmV0dXJuIDA7Cit9CisKKy8qIE9NQVA0IHNwZWNpZmljIHZvbHRhZ2UgaW5pdCBmdW5jdGlvbnMgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBvbWFwNF92Y19pbml0KHN0cnVjdCBvbWFwX3ZkZF9pbmZvICp2ZGQpCit7CisJdTMyIHZjX3ZhbDsKKwl1MTYgbW9kOworCXN0YXRpYyBib29sIGlzX2luaXRpYWxpemVkOworCisJaWYgKCF2ZGQtPnBtaWNfaW5mbyB8fCAhdmRkLT5wbWljX2luZm8tPnV2X3RvX3ZzZWwpIHsKKwkJcHJfZXJyKCIlczogUE1JQyBpbmZvIHJlcXVyaWVkIHRvIGNvbmZpZ3VyZSB2YyBmb3IiCisJCQkidmRkXyVzIG5vdCBwb3B1bGF0ZWQuSGVuY2UgY2Fubm90IGluaXRpYWxpemUgdmNcbiIsCisJCQlfX2Z1bmNfXywgdmRkLT52b2x0ZG0ubmFtZSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoIXZkZC0+cmVhZF9yZWcgfHwgIXZkZC0+d3JpdGVfcmVnKSB7CisJCXByX2VycigiJXM6IE5vIHJlYWQvd3JpdGUgQVBJIGZvciBhY2Nlc3NpbmcgdmRkXyVzIHJlZ3NcbiIsCisJCQlfX2Z1bmNfXywgdmRkLT52b2x0ZG0ubmFtZSk7CisJCXJldHVybjsKKwl9CisKKwltb2QgPSB2ZGQtPnZjX3JlZy5wcm1fbW9kOworCisJLyogU2V0IHVwIHRoZSBTTVBTX1NBKGkyYyBzbGF2ZSBhZGRyZXNzIGluIFZDICovCisJdmNfdmFsID0gdmRkLT5yZWFkX3JlZyhtb2QsIHZkZC0+dmNfcmVnLnNtcHNfc2FfcmVnKTsKKwl2Y192YWwgJj0gfnZkZC0+dmNfcmVnLnNtcHNfc2FfbWFzazsKKwl2Y192YWwgfD0gdmRkLT5wbWljX2luZm8tPmkyY19zbGF2ZV9hZGRyIDw8IHZkZC0+dmNfcmVnLnNtcHNfc2Ffc2hpZnQ7CisJdmRkLT53cml0ZV9yZWcodmNfdmFsLCBtb2QsIHZkZC0+dmNfcmVnLnNtcHNfc2FfcmVnKTsKKworCS8qIFNldHVwIHRoZSBWT0xSQShwbWljIHJlZyBhZGRyKSBpbiBWQyAqLworCXZjX3ZhbCA9IHZkZC0+cmVhZF9yZWcobW9kLCB2ZGQtPnZjX3JlZy5zbXBzX3ZvbHJhX3JlZyk7CisJdmNfdmFsICY9IH52ZGQtPnZjX3JlZy5zbXBzX3ZvbHJhX21hc2s7CisJdmNfdmFsIHw9IHZkZC0+cG1pY19pbmZvLT5wbWljX3JlZyA8PCB2ZGQtPnZjX3JlZy5zbXBzX3ZvbHJhX3NoaWZ0OworCXZkZC0+d3JpdGVfcmVnKHZjX3ZhbCwgbW9kLCB2ZGQtPnZjX3JlZy5zbXBzX3ZvbHJhX3JlZyk7CisKKwkvKiBUT0RPOiBDb25maWd1cmUgc2V0dXAgdGltZXMgYW5kIENNRF9WQUwgdmFsdWVzKi8KKworCWlmIChpc19pbml0aWFsaXplZCkKKwkJcmV0dXJuOworCisJLyogR2VuZXJpYyBWQyBwYXJhbWV0ZXJzIGluaXQgKi8KKwl2Y192YWwgPSAoT01BUDQ0MzBfUkFWX1ZERF9NUFVfTF9NQVNLIHwgT01BUDQ0MzBfQ01EX1ZERF9NUFVfTF9NQVNLIHwKKwkJT01BUDQ0MzBfUkFWX1ZERF9JVkFfTF9NQVNLIHwgT01BUDQ0MzBfQ01EX1ZERF9JVkFfTF9NQVNLIHwKKwkJT01BUDQ0MzBfUkFWX1ZERF9DT1JFX0xfTUFTSyB8IE9NQVA0NDMwX0NNRF9WRERfQ09SRV9MX01BU0spOworCXZkZC0+d3JpdGVfcmVnKHZjX3ZhbCwgbW9kLCBPTUFQNF9QUk1fVkNfQ0ZHX0NIQU5ORUxfT0ZGU0VUKTsKKworCXZjX3ZhbCA9ICgweDYwIDw8IE9NQVA0NDMwX1NDTExfU0hJRlQgfCAweDI2IDw8IE9NQVA0NDMwX1NDTEhfU0hJRlQpOworCXZkZC0+d3JpdGVfcmVnKHZjX3ZhbCwgbW9kLCBPTUFQNF9QUk1fVkNfQ0ZHX0kyQ19DTEtfT0ZGU0VUKTsKKworCWlzX2luaXRpYWxpemVkID0gdHJ1ZTsKK30KKworLyogU2V0cyB1cCBhbGwgdGhlIFZERCByZWxhdGVkIGluZm8gZm9yIE9NQVA0ICovCitzdGF0aWMgaW50IF9faW5pdCBvbWFwNF92ZGRfZGF0YV9jb25maWd1cmUoc3RydWN0IG9tYXBfdmRkX2luZm8gKnZkZCkKK3sKKwlzdHJ1Y3QgY2xrICpzeXNfY2s7CisJdTMyIHN5c19jbGtfc3BlZWQsIHRpbWVvdXRfdmFsLCB3YWl0dGltZTsKKworCWlmICghdmRkLT5wbWljX2luZm8pIHsKKwkJcHJfZXJyKCIlczogUE1JQyBpbmZvIHJlcXVyaWVkIHRvIGNvbmZpZ3VyZSB2ZGRfJXMgbm90IgorCQkJInBvcHVsYXRlZC5IZW5jZSBjYW5ub3QgaW5pdGlhbGl6ZSB2ZGRfJXNcbiIsCisJCQlfX2Z1bmNfXywgdmRkLT52b2x0ZG0ubmFtZSwgdmRkLT52b2x0ZG0ubmFtZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICghc3RyY21wKHZkZC0+dm9sdGRtLm5hbWUsICJtcHUiKSkgeworCQl2ZGQtPnZvbHRfZGF0YSA9IG9tYXA0NHh4X3ZkZF9tcHVfdm9sdF9kYXRhOworCQl2ZGQtPnZwX3JlZy50cmFueGRvbmVfc3RhdHVzID0KKwkJCQlPTUFQNDQzMF9WUF9NUFVfVFJBTlhET05FX1NUX01BU0s7CisJCXZkZC0+dmNfcmVnLmNtZHZhbF9yZWcgPSBPTUFQNF9QUk1fVkNfVkFMX0NNRF9WRERfTVBVX0xfT0ZGU0VUOworCQl2ZGQtPnZjX3JlZy5zbXBzX3NhX3NoaWZ0ID0KKwkJCQlPTUFQNDQzMF9TQV9WRERfTVBVX0xfUFJNX1ZDX1NNUFNfU0FfU0hJRlQ7CisJCXZkZC0+dmNfcmVnLnNtcHNfc2FfbWFzayA9CisJCQkJT01BUDQ0MzBfU0FfVkREX01QVV9MX1BSTV9WQ19TTVBTX1NBX01BU0s7CisJCXZkZC0+dmNfcmVnLnNtcHNfdm9scmFfc2hpZnQgPSBPTUFQNDQzMF9WT0xSQV9WRERfTVBVX0xfU0hJRlQ7CisJCXZkZC0+dmNfcmVnLnNtcHNfdm9scmFfbWFzayA9IE9NQVA0NDMwX1ZPTFJBX1ZERF9NUFVfTF9NQVNLOworCQl2ZGQtPnZjX3JlZy52b2x0c2V0dXBfcmVnID0KKwkJCQlPTUFQNF9QUk1fVk9MVFNFVFVQX01QVV9SRVRfU0xFRVBfT0ZGU0VUOworCQl2ZGQtPnBybV9pcnFzdF9yZWcgPSBPTUFQNF9QUk1fSVJRU1RBVFVTX01QVV8yX09GRlNFVDsKKwl9IGVsc2UgaWYgKCFzdHJjbXAodmRkLT52b2x0ZG0ubmFtZSwgImNvcmUiKSkgeworCQl2ZGQtPnZvbHRfZGF0YSA9IG9tYXA0NHh4X3ZkZF9jb3JlX3ZvbHRfZGF0YTsKKwkJdmRkLT52cF9yZWcudHJhbnhkb25lX3N0YXR1cyA9CisJCQkJT01BUDQ0MzBfVlBfQ09SRV9UUkFOWERPTkVfU1RfTUFTSzsKKwkJdmRkLT52Y19yZWcuY21kdmFsX3JlZyA9CisJCQkJT01BUDRfUFJNX1ZDX1ZBTF9DTURfVkREX0NPUkVfTF9PRkZTRVQ7CisJCXZkZC0+dmNfcmVnLnNtcHNfc2Ffc2hpZnQgPSBPTUFQNDQzMF9TQV9WRERfQ09SRV9MXzBfNl9TSElGVDsKKwkJdmRkLT52Y19yZWcuc21wc19zYV9tYXNrID0gT01BUDQ0MzBfU0FfVkREX0NPUkVfTF8wXzZfTUFTSzsKKwkJdmRkLT52Y19yZWcuc21wc192b2xyYV9zaGlmdCA9IE9NQVA0NDMwX1ZPTFJBX1ZERF9DT1JFX0xfU0hJRlQ7CisJCXZkZC0+dmNfcmVnLnNtcHNfdm9scmFfbWFzayA9IE9NQVA0NDMwX1ZPTFJBX1ZERF9DT1JFX0xfTUFTSzsKKwkJdmRkLT52Y19yZWcudm9sdHNldHVwX3JlZyA9CisJCQkJT01BUDRfUFJNX1ZPTFRTRVRVUF9DT1JFX1JFVF9TTEVFUF9PRkZTRVQ7CisJCXZkZC0+cHJtX2lycXN0X3JlZyA9IE9NQVA0X1BSTV9JUlFTVEFUVVNfTVBVX09GRlNFVDsKKwl9IGVsc2UgaWYgKCFzdHJjbXAodmRkLT52b2x0ZG0ubmFtZSwgIml2YSIpKSB7CisJCXZkZC0+dm9sdF9kYXRhID0gb21hcDQ0eHhfdmRkX2l2YV92b2x0X2RhdGE7CisJCXZkZC0+dnBfcmVnLnRyYW54ZG9uZV9zdGF0dXMgPQorCQkJCU9NQVA0NDMwX1ZQX0lWQV9UUkFOWERPTkVfU1RfTUFTSzsKKwkJdmRkLT52Y19yZWcuY21kdmFsX3JlZyA9IE9NQVA0X1BSTV9WQ19WQUxfQ01EX1ZERF9JVkFfTF9PRkZTRVQ7CisJCXZkZC0+dmNfcmVnLnNtcHNfc2Ffc2hpZnQgPQorCQkJCU9NQVA0NDMwX1NBX1ZERF9JVkFfTF9QUk1fVkNfU01QU19TQV9TSElGVDsKKwkJdmRkLT52Y19yZWcuc21wc19zYV9tYXNrID0KKwkJCQlPTUFQNDQzMF9TQV9WRERfSVZBX0xfUFJNX1ZDX1NNUFNfU0FfTUFTSzsKKwkJdmRkLT52Y19yZWcuc21wc192b2xyYV9zaGlmdCA9IE9NQVA0NDMwX1ZPTFJBX1ZERF9JVkFfTF9TSElGVDsKKwkJdmRkLT52Y19yZWcuc21wc192b2xyYV9tYXNrID0gT01BUDQ0MzBfVk9MUkFfVkREX0lWQV9MX01BU0s7CisJCXZkZC0+dmNfcmVnLnZvbHRzZXR1cF9yZWcgPQorCQkJCU9NQVA0X1BSTV9WT0xUU0VUVVBfSVZBX1JFVF9TTEVFUF9PRkZTRVQ7CisJCXZkZC0+cHJtX2lycXN0X3JlZyA9IE9NQVA0X1BSTV9JUlFTVEFUVVNfTVBVX09GRlNFVDsKKwl9IGVsc2UgeworCQlwcl93YXJuaW5nKCIlczogdmRkXyVzIGRvZXMgbm90IGV4aXNpdCBpbiBPTUFQNFxuIiwKKwkJCV9fZnVuY19fLCB2ZGQtPnZvbHRkbS5uYW1lKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyoKKwkgKiBTeXMgY2xrIHJhdGUgaXMgcmVxdWlyZSB0byBjYWxjdWxhdGUgdnAgdGltZW91dCB2YWx1ZSBhbmQKKwkgKiBzbXBzd2FpdHRpbWVtaW4gYW5kIHNtcHN3YWl0dGltZW1heC4KKwkgKi8KKwlzeXNfY2sgPSBjbGtfZ2V0KE5VTEwsICJzeXNfY2xraW5fY2siKTsKKwlpZiAoSVNfRVJSKHN5c19jaykpIHsKKwkJcHJfd2FybmluZygiJXM6IENvdWxkIG5vdCBnZXQgdGhlIHN5cyBjbGsgdG8gY2FsY3VsYXRlIgorCQkJInZhcmlvdXMgdmRkXyVzIHBhcmFtc1xuIiwgX19mdW5jX18sIHZkZC0+dm9sdGRtLm5hbWUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJc3lzX2Nsa19zcGVlZCA9IGNsa19nZXRfcmF0ZShzeXNfY2spOworCWNsa19wdXQoc3lzX2NrKTsKKwkvKiBEaXZpZGUgdG8gYXZvaWQgb3ZlcmZsb3cgKi8KKwlzeXNfY2xrX3NwZWVkIC89IDEwMDA7CisKKwkvKiBHZW5lcmljIHZvbHRhZ2UgcGFyYW1ldGVycyAqLworCXZkZC0+Y3Vycl92b2x0ID0gMTIwMDAwMDsKKwl2ZGQtPm9jcF9tb2QgPSBPTUFQNDQzMF9QUk1fT0NQX1NPQ0tFVF9JTlNUOworCXZkZC0+cmVhZF9yZWcgPSBvbWFwNF92b2x0YWdlX3JlYWRfcmVnOworCXZkZC0+d3JpdGVfcmVnID0gb21hcDRfdm9sdGFnZV93cml0ZV9yZWc7CisJdmRkLT52b2x0X3NjYWxlID0gdnBfZm9yY2V1cGRhdGVfc2NhbGVfdm9sdGFnZTsKKwl2ZGQtPnZwX2VuYWJsZWQgPSBmYWxzZTsKKworCS8qIFZDIHBhcmFtZXRlcnMgKi8KKwl2ZGQtPnZjX3JlZy5wcm1fbW9kID0gT01BUDQ0MzBfUFJNX0RFVklDRV9JTlNUOworCXZkZC0+dmNfcmVnLnNtcHNfc2FfcmVnID0gT01BUDRfUFJNX1ZDX1NNUFNfU0FfT0ZGU0VUOworCXZkZC0+dmNfcmVnLnNtcHNfdm9scmFfcmVnID0gT01BUDRfUFJNX1ZDX1ZBTF9TTVBTX1JBX1ZPTF9PRkZTRVQ7CisJdmRkLT52Y19yZWcuYnlwYXNzX3ZhbF9yZWcgPSBPTUFQNF9QUk1fVkNfVkFMX0JZUEFTU19PRkZTRVQ7CisJdmRkLT52Y19yZWcuZGF0YV9zaGlmdCA9IE9NQVA0NDMwX0RBVEFfU0hJRlQ7CisJdmRkLT52Y19yZWcuc2xhdmVhZGRyX3NoaWZ0ID0gT01BUDQ0MzBfU0xBVkVBRERSX1NISUZUOworCXZkZC0+dmNfcmVnLnJlZ2FkZHJfc2hpZnQgPSBPTUFQNDQzMF9SRUdBRERSX1NISUZUOworCXZkZC0+dmNfcmVnLnZhbGlkID0gT01BUDQ0MzBfVkFMSURfTUFTSzsKKwl2ZGQtPnZjX3JlZy5jbWRfb25fc2hpZnQgPSBPTUFQNDQzMF9PTl9TSElGVDsKKwl2ZGQtPnZjX3JlZy5jbWRfb25fbWFzayA9IE9NQVA0NDMwX09OX01BU0s7CisJdmRkLT52Y19yZWcuY21kX29ubHBfc2hpZnQgPSBPTUFQNDQzMF9PTkxQX1NISUZUOworCXZkZC0+dmNfcmVnLmNtZF9yZXRfc2hpZnQgPSBPTUFQNDQzMF9SRVRfU0hJRlQ7CisJdmRkLT52Y19yZWcuY21kX29mZl9zaGlmdCA9IE9NQVA0NDMwX09GRl9TSElGVDsKKworCXZkZC0+dnBfcmVnLnBybV9tb2QgPSBPTUFQNDQzMF9QUk1fREVWSUNFX0lOU1Q7CisKKwkvKiBWUENPTkZJRyBiaXQgZmllbGRzICovCisJdmRkLT52cF9yZWcudnBjb25maWdfZXJyb3JvZmZzZXQgPSAodmRkLT5wbWljX2luZm8tPnZwX2Vycm9yb2Zmc2V0IDw8CisJCQkJIE9NQVA0NDMwX0VSUk9ST0ZGU0VUX1NISUZUKTsKKwl2ZGQtPnZwX3JlZy52cGNvbmZpZ19lcnJvcmdhaW5fbWFzayA9IE9NQVA0NDMwX0VSUk9SR0FJTl9NQVNLOworCXZkZC0+dnBfcmVnLnZwY29uZmlnX2Vycm9yZ2Fpbl9zaGlmdCA9IE9NQVA0NDMwX0VSUk9SR0FJTl9TSElGVDsKKwl2ZGQtPnZwX3JlZy52cGNvbmZpZ19pbml0dm9sdGFnZV9zaGlmdCA9IE9NQVA0NDMwX0lOSVRWT0xUQUdFX1NISUZUOworCXZkZC0+dnBfcmVnLnZwY29uZmlnX2luaXR2b2x0YWdlX21hc2sgPSBPTUFQNDQzMF9JTklUVk9MVEFHRV9NQVNLOworCXZkZC0+dnBfcmVnLnZwY29uZmlnX3RpbWVvdXRlbiA9IE9NQVA0NDMwX1RJTUVPVVRFTl9NQVNLOworCXZkZC0+dnBfcmVnLnZwY29uZmlnX2luaXR2ZGQgPSBPTUFQNDQzMF9JTklUVkREX01BU0s7CisJdmRkLT52cF9yZWcudnBjb25maWdfZm9yY2V1cGRhdGUgPSBPTUFQNDQzMF9GT1JDRVVQREFURV9NQVNLOworCXZkZC0+dnBfcmVnLnZwY29uZmlnX3ZwZW5hYmxlID0gT01BUDQ0MzBfVlBFTkFCTEVfTUFTSzsKKworCS8qIFZTVEVQTUlOIFZTVEVQTUFYIGJpdCBmaWVsZHMgKi8KKwl3YWl0dGltZSA9ICgodmRkLT5wbWljX2luZm8tPnN0ZXBfc2l6ZSAvIHZkZC0+cG1pY19pbmZvLT5zbGV3X3JhdGUpICoKKwkJCQlzeXNfY2xrX3NwZWVkKSAvIDEwMDA7CisJdmRkLT52cF9yZWcudnN0ZXBtaW5fc21wc3dhaXR0aW1lbWluID0gd2FpdHRpbWU7CisJdmRkLT52cF9yZWcudnN0ZXBtYXhfc21wc3dhaXR0aW1lbWF4ID0gd2FpdHRpbWU7CisJdmRkLT52cF9yZWcudnN0ZXBtaW5fc3RlcG1pbiA9IHZkZC0+cG1pY19pbmZvLT52cF92c3RlcG1pbjsKKwl2ZGQtPnZwX3JlZy52c3RlcG1heF9zdGVwbWF4ID0gdmRkLT5wbWljX2luZm8tPnZwX3ZzdGVwbWF4OworCXZkZC0+dnBfcmVnLnZzdGVwbWluX3NtcHN3YWl0dGltZW1pbl9zaGlmdCA9CisJCQlPTUFQNDQzMF9TTVBTV0FJVFRJTUVNSU5fU0hJRlQ7CisJdmRkLT52cF9yZWcudnN0ZXBtYXhfc21wc3dhaXR0aW1lbWF4X3NoaWZ0ID0KKwkJCU9NQVA0NDMwX1NNUFNXQUlUVElNRU1BWF9TSElGVDsKKwl2ZGQtPnZwX3JlZy52c3RlcG1pbl9zdGVwbWluX3NoaWZ0ID0gT01BUDQ0MzBfVlNURVBNSU5fU0hJRlQ7CisJdmRkLT52cF9yZWcudnN0ZXBtYXhfc3RlcG1heF9zaGlmdCA9IE9NQVA0NDMwX1ZTVEVQTUFYX1NISUZUOworCisJLyogVkxJTUlUVE8gYml0IGZpZWxkcyAqLworCXRpbWVvdXRfdmFsID0gKHN5c19jbGtfc3BlZWQgKiB2ZGQtPnBtaWNfaW5mby0+dnBfdGltZW91dF91cykgLyAxMDAwOworCXZkZC0+dnBfcmVnLnZsaW1pdHRvX3RpbWVvdXQgPSB0aW1lb3V0X3ZhbDsKKwl2ZGQtPnZwX3JlZy52bGltaXR0b192ZGRtaW4gPSB2ZGQtPnBtaWNfaW5mby0+dnBfdmRkbWluOworCXZkZC0+dnBfcmVnLnZsaW1pdHRvX3ZkZG1heCA9IHZkZC0+cG1pY19pbmZvLT52cF92ZGRtYXg7CisJdmRkLT52cF9yZWcudmxpbWl0dG9fdmRkbWluX3NoaWZ0ID0gT01BUDQ0MzBfVkRETUlOX1NISUZUOworCXZkZC0+dnBfcmVnLnZsaW1pdHRvX3ZkZG1heF9zaGlmdCA9IE9NQVA0NDMwX1ZERE1BWF9TSElGVDsKKwl2ZGQtPnZwX3JlZy52bGltaXR0b190aW1lb3V0X3NoaWZ0ID0gT01BUDQ0MzBfVElNRU9VVF9TSElGVDsKKworCXJldHVybiAwOworfQorCisvKiBQdWJsaWMgZnVuY3Rpb25zICovCisvKioKKyAqIG9tYXBfdm9sdGFnZV9nZXRfbm9tX3ZvbHQoKSAtIEdldHMgdGhlIGN1cnJlbnQgbm9uLWF1dG8tY29tcGVuc2F0ZWQgdm9sdGFnZQorICogQHZvbHRkbToJcG9pbnRlciB0byB0aGUgVkREIGZvciB3aGljaCBjdXJyZW50IHZvbHRhZ2UgaW5mbyBpcyBuZWVkZWQKKyAqCisgKiBBUEkgdG8gZ2V0IHRoZSBjdXJyZW50IG5vbi1hdXRvLWNvbXBlbnNhdGVkIHZvbHRhZ2UgZm9yIGEgVkRELgorICogUmV0dXJucyAwIGluIGNhc2Ugb2YgZXJyb3IgZWxzZSByZXR1cm5zIHRoZSBjdXJyZW50IHZvbHRhZ2UgZm9yIHRoZSBWREQuCisgKi8KK3Vuc2lnbmVkIGxvbmcgb21hcF92b2x0YWdlX2dldF9ub21fdm9sdChzdHJ1Y3Qgdm9sdGFnZWRvbWFpbiAqdm9sdGRtKQoreworCXN0cnVjdCBvbWFwX3ZkZF9pbmZvICp2ZGQ7CisKKwlpZiAoIXZvbHRkbSB8fCBJU19FUlIodm9sdGRtKSkgeworCQlwcl93YXJuaW5nKCIlczogVkREIHNwZWNpZmllZCBkb2VzIG5vdCBleGlzdCFcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIDA7CisJfQorCisJdmRkID0gY29udGFpbmVyX29mKHZvbHRkbSwgc3RydWN0IG9tYXBfdmRkX2luZm8sIHZvbHRkbSk7CisKKwlyZXR1cm4gdmRkLT5jdXJyX3ZvbHQ7Cit9CisKKy8qKgorICogb21hcF92cF9nZXRfY3Vycl92b2x0KCkgLSBBUEkgdG8gZ2V0IHRoZSBjdXJyZW50IHZwIHZvbHRhZ2UuCisgKiBAdm9sdGRtOglwb2ludGVyIHRvIHRoZSBWREQuCisgKgorICogVGhpcyBBUEkgcmV0dXJucyB0aGUgY3VycmVudCB2b2x0YWdlIGZvciB0aGUgc3BlY2lmaWVkIHZvbHRhZ2UgcHJvY2Vzc29yCisgKi8KK3Vuc2lnbmVkIGxvbmcgb21hcF92cF9nZXRfY3Vycl92b2x0KHN0cnVjdCB2b2x0YWdlZG9tYWluICp2b2x0ZG0pCit7CisJc3RydWN0IG9tYXBfdmRkX2luZm8gKnZkZDsKKwl1OCBjdXJyX3ZzZWw7CisKKwlpZiAoIXZvbHRkbSB8fCBJU19FUlIodm9sdGRtKSkgeworCQlwcl93YXJuaW5nKCIlczogVkREIHNwZWNpZmllZCBkb2VzIG5vdCBleGlzdCFcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIDA7CisJfQorCisJdmRkID0gY29udGFpbmVyX29mKHZvbHRkbSwgc3RydWN0IG9tYXBfdmRkX2luZm8sIHZvbHRkbSk7CisJaWYgKCF2ZGQtPnJlYWRfcmVnKSB7CisJCXByX2VycigiJXM6IE5vIHJlYWQgQVBJIGZvciByZWFkaW5nIHZkZF8lcyByZWdzXG4iLAorCQkJX19mdW5jX18sIHZvbHRkbS0+bmFtZSk7CisJCXJldHVybiAwOworCX0KKworCWN1cnJfdnNlbCA9IHZkZC0+cmVhZF9yZWcodmRkLT52cF9yZWcucHJtX21vZCwKKwkJCXZkZC0+dnBfb2Zmcy52b2x0YWdlKTsKKworCWlmICghdmRkLT5wbWljX2luZm8gfHwgIXZkZC0+cG1pY19pbmZvLT52c2VsX3RvX3V2KSB7CisJCXByX3dhcm5pbmcoIiVzOiBQTUlDIGZ1bmN0aW9uIHRvIGNvbnZlcnQgdnNlbCB0byB2b2x0YWdlIgorCQkJImluIHVWIG5vdCByZWdpc3RlcmRcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIHZkZC0+cG1pY19pbmZvLT52c2VsX3RvX3V2KGN1cnJfdnNlbCk7Cit9CisKKy8qKgorICogb21hcF92cF9lbmFibGUoKSAtIEFQSSB0byBlbmFibGUgYSBwYXJ0aWN1bGFyIFZQCisgKiBAdm9sdGRtOglwb2ludGVyIHRvIHRoZSBWREQgd2hvc2UgVlAgaXMgdG8gYmUgZW5hYmxlZC4KKyAqCisgKiBUaGlzIEFQSSBlbmFibGVzIGEgcGFydGljdWxhciB2b2x0YWdlIHByb2Nlc3Nvci4gTmVlZGVkIGJ5IHRoZSBzbWFydHJlZmxleAorICogY2xhc3MgZHJpdmVycy4KKyAqLwordm9pZCBvbWFwX3ZwX2VuYWJsZShzdHJ1Y3Qgdm9sdGFnZWRvbWFpbiAqdm9sdGRtKQoreworCXN0cnVjdCBvbWFwX3ZkZF9pbmZvICp2ZGQ7CisJdTMyIHZwY29uZmlnOworCXUxNiBtb2Q7CisKKwlpZiAoIXZvbHRkbSB8fCBJU19FUlIodm9sdGRtKSkgeworCQlwcl93YXJuaW5nKCIlczogVkREIHNwZWNpZmllZCBkb2VzIG5vdCBleGlzdCFcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuOworCX0KKworCXZkZCA9IGNvbnRhaW5lcl9vZih2b2x0ZG0sIHN0cnVjdCBvbWFwX3ZkZF9pbmZvLCB2b2x0ZG0pOworCWlmICghdmRkLT5yZWFkX3JlZyB8fCAhdmRkLT53cml0ZV9yZWcpIHsKKwkJcHJfZXJyKCIlczogTm8gcmVhZC93cml0ZSBBUEkgZm9yIGFjY2Vzc2luZyB2ZGRfJXMgcmVnc1xuIiwKKwkJCV9fZnVuY19fLCB2b2x0ZG0tPm5hbWUpOworCQlyZXR1cm47CisJfQorCisJbW9kID0gdmRkLT52cF9yZWcucHJtX21vZDsKKworCS8qIElmIFZQIGlzIGFscmVhZHkgZW5hYmxlZCwgZG8gbm90aGluZy4gUmV0dXJuICovCisJaWYgKHZkZC0+dnBfZW5hYmxlZCkKKwkJcmV0dXJuOworCisJdnBfbGF0Y2hfdnNlbCh2ZGQpOworCisJLyogRW5hYmxlIFZQICovCisJdnBjb25maWcgPSB2ZGQtPnJlYWRfcmVnKG1vZCwgdmRkLT52cF9vZmZzLnZwY29uZmlnKTsKKwl2cGNvbmZpZyB8PSB2ZGQtPnZwX3JlZy52cGNvbmZpZ192cGVuYWJsZTsKKwl2ZGQtPndyaXRlX3JlZyh2cGNvbmZpZywgbW9kLCB2ZGQtPnZwX29mZnMudnBjb25maWcpOworCXZkZC0+dnBfZW5hYmxlZCA9IHRydWU7Cit9CisKKy8qKgorICogb21hcF92cF9kaXNhYmxlKCkgLSBBUEkgdG8gZGlzYWJsZSBhIHBhcnRpY3VsYXIgVlAKKyAqIEB2b2x0ZG06CXBvaW50ZXIgdG8gdGhlIFZERCB3aG9zZSBWUCBpcyB0byBiZSBkaXNhYmxlZC4KKyAqCisgKiBUaGlzIEFQSSBkaXNhYmxlcyBhIHBhcnRpY3VsYXIgdm9sdGFnZSBwcm9jZXNzb3IuIE5lZWRlZCBieSB0aGUgc21hcnRyZWZsZXgKKyAqIGNsYXNzIGRyaXZlcnMuCisgKi8KK3ZvaWQgb21hcF92cF9kaXNhYmxlKHN0cnVjdCB2b2x0YWdlZG9tYWluICp2b2x0ZG0pCit7CisJc3RydWN0IG9tYXBfdmRkX2luZm8gKnZkZDsKKwl1MzIgdnBjb25maWc7CisJdTE2IG1vZDsKKwlpbnQgdGltZW91dDsKKworCWlmICghdm9sdGRtIHx8IElTX0VSUih2b2x0ZG0pKSB7CisJCXByX3dhcm5pbmcoIiVzOiBWREQgc3BlY2lmaWVkIGRvZXMgbm90IGV4aXN0IVxuIiwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCisJdmRkID0gY29udGFpbmVyX29mKHZvbHRkbSwgc3RydWN0IG9tYXBfdmRkX2luZm8sIHZvbHRkbSk7CisJaWYgKCF2ZGQtPnJlYWRfcmVnIHx8ICF2ZGQtPndyaXRlX3JlZykgeworCQlwcl9lcnIoIiVzOiBObyByZWFkL3dyaXRlIEFQSSBmb3IgYWNjZXNzaW5nIHZkZF8lcyByZWdzXG4iLAorCQkJX19mdW5jX18sIHZvbHRkbS0+bmFtZSk7CisJCXJldHVybjsKKwl9CisKKwltb2QgPSB2ZGQtPnZwX3JlZy5wcm1fbW9kOworCisJLyogSWYgVlAgaXMgYWxyZWFkeSBkaXNhYmxlZCwgZG8gbm90aGluZy4gUmV0dXJuICovCisJaWYgKCF2ZGQtPnZwX2VuYWJsZWQpIHsKKwkJcHJfd2FybmluZygiJXM6IFRyeWluZyB0byBkaXNhYmxlIFZQIGZvciB2ZGRfJXMgd2hlbiIKKwkJCSJpdCBpcyBhbHJlYWR5IGRpc2FibGVkXG4iLCBfX2Z1bmNfXywgdm9sdGRtLT5uYW1lKTsKKwkJcmV0dXJuOworCX0KKworCS8qIERpc2FibGUgVlAgKi8KKwl2cGNvbmZpZyA9IHZkZC0+cmVhZF9yZWcobW9kLCB2ZGQtPnZwX29mZnMudnBjb25maWcpOworCXZwY29uZmlnICY9IH52ZGQtPnZwX3JlZy52cGNvbmZpZ192cGVuYWJsZTsKKwl2ZGQtPndyaXRlX3JlZyh2cGNvbmZpZywgbW9kLCB2ZGQtPnZwX29mZnMudnBjb25maWcpOworCisJLyoKKwkgKiBXYWl0IGZvciBWUCBpZGxlIFR5cGljYWwgbGF0ZW5jeSBpcyA8MnVzLiBNYXhpbXVtIGxhdGVuY3kgaXMgfjEwMHVzCisJICovCisJb21hcF90ZXN0X3RpbWVvdXQoKHZkZC0+cmVhZF9yZWcobW9kLCB2ZGQtPnZwX29mZnMudnN0YXR1cykpLAorCQkJCVZQX0lETEVfVElNRU9VVCwgdGltZW91dCk7CisKKwlpZiAodGltZW91dCA+PSBWUF9JRExFX1RJTUVPVVQpCisJCXByX3dhcm5pbmcoIiVzOiB2ZGRfJXMgaWRsZSB0aW1lZG91dFxuIiwKKwkJCV9fZnVuY19fLCB2b2x0ZG0tPm5hbWUpOworCisJdmRkLT52cF9lbmFibGVkID0gZmFsc2U7CisKKwlyZXR1cm47Cit9CisKKy8qKgorICogb21hcF92b2x0YWdlX3NjYWxlX3ZkZCgpIC0gQVBJIHRvIHNjYWxlIHZvbHRhZ2Ugb2YgYSBwYXJ0aWN1bGFyCisgKgkJCQl2b2x0YWdlIGRvbWFpbi4KKyAqIEB2b2x0ZG06CXBvaW50ZXIgdG8gdGhlIFZERCB3aGljaCBpcyB0byBiZSBzY2FsZWQuCisgKiBAdGFyZ2V0X3ZvbHQ6CVRoZSB0YXJnZXQgdm9sdGFnZSBvZiB0aGUgdm9sdGFnZSBkb21haW4KKyAqCisgKiBUaGlzIEFQSSBzaG91bGQgYmUgY2FsbGVkIGJ5IHRoZSBrZXJuZWwgdG8gZG8gdGhlIHZvbHRhZ2Ugc2NhbGluZworICogZm9yIGEgcGFydGljdWxhciB2b2x0YWdlIGRvbWFpbiBkdXJpbmcgZHZmcyBvciBhbnkgb3RoZXIgc2l0dWF0aW9uLgorICovCitpbnQgb21hcF92b2x0YWdlX3NjYWxlX3ZkZChzdHJ1Y3Qgdm9sdGFnZWRvbWFpbiAqdm9sdGRtLAorCQl1bnNpZ25lZCBsb25nIHRhcmdldF92b2x0KQoreworCXN0cnVjdCBvbWFwX3ZkZF9pbmZvICp2ZGQ7CisKKwlpZiAoIXZvbHRkbSB8fCBJU19FUlIodm9sdGRtKSkgeworCQlwcl93YXJuaW5nKCIlczogVkREIHNwZWNpZmllZCBkb2VzIG5vdCBleGlzdCFcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJdmRkID0gY29udGFpbmVyX29mKHZvbHRkbSwgc3RydWN0IG9tYXBfdmRkX2luZm8sIHZvbHRkbSk7CisKKwlpZiAoIXZkZC0+dm9sdF9zY2FsZSkgeworCQlwcl9lcnIoIiVzOiBObyB2b2x0YWdlIHNjYWxlIEFQSSByZWdpc3RlcmVkIGZvciB2ZGRfJXNcbiIsCisJCQlfX2Z1bmNfXywgdm9sdGRtLT5uYW1lKTsKKwkJcmV0dXJuIC1FTk9EQVRBOworCX0KKworCXJldHVybiB2ZGQtPnZvbHRfc2NhbGUodmRkLCB0YXJnZXRfdm9sdCk7Cit9CisKKy8qKgorICogb21hcF92b2x0YWdlX3Jlc2V0KCkgLSBSZXNldHMgdGhlIHZvbHRhZ2Ugb2YgYSBwYXJ0aWN1bGFyIHZvbHRhZ2UgZG9tYWluCisgKgkJCXRvIHRoYXQgb2YgdGhlIGN1cnJlbnQgT1BQLgorICogQHZvbHRkbToJcG9pbnRlciB0byB0aGUgVkREIHdob3NlIHZvbHRhZ2UgaXMgdG8gYmUgcmVzZXQuCisgKgorICogVGhpcyBBUEkgZmluZHMgb3V0IHRoZSBjb3JyZWN0IHZvbHRhZ2UgdGhlIHZvbHRhZ2UgZG9tYWluIGlzIHN1cHBvc2VkCisgKiB0byBiZSBhdCBhbmQgcmVzZXRzIHRoZSB2b2x0YWdlIHRvIHRoYXQgbGV2ZWwuIFNob3VsZCBiZSB1c2VkIGV4cGVjaWFsbHkKKyAqIHdoaWxlIGRpc2FibGluZyBhbnkgdm9sdGFnZSBjb21wZW5zYXRpb24gbW9kdWxlcy4KKyAqLwordm9pZCBvbWFwX3ZvbHRhZ2VfcmVzZXQoc3RydWN0IHZvbHRhZ2Vkb21haW4gKnZvbHRkbSkKK3sKKwl1bnNpZ25lZCBsb25nIHRhcmdldF91dmRjOworCisJaWYgKCF2b2x0ZG0gfHwgSVNfRVJSKHZvbHRkbSkpIHsKKwkJcHJfd2FybmluZygiJXM6IFZERCBzcGVjaWZpZWQgZG9lcyBub3QgZXhpc3QhXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisKKwl0YXJnZXRfdXZkYyA9IG9tYXBfdm9sdGFnZV9nZXRfbm9tX3ZvbHQodm9sdGRtKTsKKwlpZiAoIXRhcmdldF91dmRjKSB7CisJCXByX2VycigiJXM6IHVuYWJsZSB0byBmaW5kIGN1cnJlbnQgdm9sdGFnZSBmb3IgdmRkXyVzXG4iLAorCQkJX19mdW5jX18sIHZvbHRkbS0+bmFtZSk7CisJCXJldHVybjsKKwl9CisKKwlvbWFwX3ZvbHRhZ2Vfc2NhbGVfdmRkKHZvbHRkbSwgdGFyZ2V0X3V2ZGMpOworfQorCisvKioKKyAqIG9tYXBfdm9sdGFnZV9nZXRfdm9sdHRhYmxlKCkgLSBBUEkgdG8gZ2V0IHRoZSB2b2x0YWdlIHRhYmxlIGFzc29jaWF0ZWQgd2l0aCBhCisgKgkJCQlwYXJ0aWN1bGFyIHZvbHRhZ2UgZG9tYWluLgorICogQHZvbHRkbToJcG9pbnRlciB0byB0aGUgVkREIGZvciB3aGljaCB0aGUgdm9sdGFnZSB0YWJsZSBpcyByZXF1aXJlZAorICogQHZvbHRfZGF0YToJdGhlIHZvbHRhZ2UgdGFibGUgZm9yIHRoZSBwYXJ0aWN1bGFyIHZkZCB3aGljaCBpcyB0byBiZQorICoJCXBvcHVsYXRlZCBieSB0aGlzIEFQSQorICoKKyAqIFRoaXMgQVBJIHBvcHVsYXRlcyB0aGUgdm9sdGFnZSB0YWJsZSBhc3NvY2lhdGVkIHdpdGggYSBWREQgaW50byB0aGUKKyAqIHBhc3NlZCBwYXJhbWV0ZXIgcG9pbnRlci4gUmV0dXJucyB0aGUgY291bnQgb2YgZGlzdGluY3Qgdm9sdGFnZXMKKyAqIHN1cHBvcnRlZCBieSB0aGlzIHZkZC4KKyAqCisgKi8KK3ZvaWQgb21hcF92b2x0YWdlX2dldF92b2x0dGFibGUoc3RydWN0IHZvbHRhZ2Vkb21haW4gKnZvbHRkbSwKKwkJc3RydWN0IG9tYXBfdm9sdF9kYXRhICoqdm9sdF9kYXRhKQoreworCXN0cnVjdCBvbWFwX3ZkZF9pbmZvICp2ZGQ7CisKKwlpZiAoIXZvbHRkbSB8fCBJU19FUlIodm9sdGRtKSkgeworCQlwcl93YXJuaW5nKCIlczogVkREIHNwZWNpZmllZCBkb2VzIG5vdCBleGlzdCFcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuOworCX0KKworCXZkZCA9IGNvbnRhaW5lcl9vZih2b2x0ZG0sIHN0cnVjdCBvbWFwX3ZkZF9pbmZvLCB2b2x0ZG0pOworCisJKnZvbHRfZGF0YSA9IHZkZC0+dm9sdF9kYXRhOworfQorCisvKioKKyAqIG9tYXBfdm9sdGFnZV9nZXRfdm9sdGRhdGEoKSAtIEFQSSB0byBnZXQgdGhlIHZvbHRhZ2UgdGFibGUgZW50cnkgZm9yIGEKKyAqCQkJCXBhcnRpY3VsYXIgdm9sdGFnZQorICogQHZvbHRkbToJcG9pbnRlciB0byB0aGUgVkREIHdob3NlIHZvbHRhZ2UgdGFibGUgaGFzIHRvIGJlIHNlYXJjaGVkCisgKiBAdm9sdDoJdGhlIHZvbHRhZ2UgdG8gYmUgc2VhcmNoZWQgaW4gdGhlIHZvbHRhZ2UgdGFibGUKKyAqCisgKiBUaGlzIEFQSSBzZWFyY2hlcyB0aHJvdWdoIHRoZSB2b2x0YWdlIHRhYmxlIGZvciB0aGUgcmVxdWlyZWQgdm9sdGFnZQorICogZG9tYWluIGFuZCB0cmllcyB0byBmaW5kIGEgbWF0Y2hpbmcgZW50cnkgZm9yIHRoZSBwYXNzZWQgdm9sdGFnZSB2b2x0LgorICogSWYgYSBtYXRjaGluZyBlbnRyeSBpcyBmb3VuZCB2b2x0X2RhdGEgaXMgcG9wdWxhdGVkIHdpdGggdGhhdCBlbnRyeS4KKyAqIFRoaXMgQVBJIHNlYXJjaGVzIG9ubHkgdGhyb3VnaCB0aGUgbm9uLWNvbXBlbnNhdGVkIHZvbHRhZ2VzIGludCB0aGUKKyAqIHZvbHRhZ2UgdGFibGUuCisgKiBSZXR1cm5zIHBvaW50ZXIgdG8gdGhlIHZvbHRhZ2UgdGFibGUgZW50cnkgY29ycmVzcG9uZGluZyB0byB2b2x0IG9uCisgKiBzdWNlc3MuIFJldHVybnMgLUVOT0RBVEEgaWYgbm8gdm9sdGFnZSB0YWJsZSBleGlzaXRzIGZvciB0aGUgcGFzc2VkIHZvbHRhZ2UKKyAqIGRvbWFpbiBvciBpZiB0aGVyZSBpcyBubyBtYXRjaGluZyBlbnRyeS4KKyAqLworc3RydWN0IG9tYXBfdm9sdF9kYXRhICpvbWFwX3ZvbHRhZ2VfZ2V0X3ZvbHRkYXRhKHN0cnVjdCB2b2x0YWdlZG9tYWluICp2b2x0ZG0sCisJCXVuc2lnbmVkIGxvbmcgdm9sdCkKK3sKKwlzdHJ1Y3Qgb21hcF92ZGRfaW5mbyAqdmRkOworCWludCBpOworCisJaWYgKCF2b2x0ZG0gfHwgSVNfRVJSKHZvbHRkbSkpIHsKKwkJcHJfd2FybmluZygiJXM6IFZERCBzcGVjaWZpZWQgZG9lcyBub3QgZXhpc3QhXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCX0KKworCXZkZCA9IGNvbnRhaW5lcl9vZih2b2x0ZG0sIHN0cnVjdCBvbWFwX3ZkZF9pbmZvLCB2b2x0ZG0pOworCisJaWYgKCF2ZGQtPnZvbHRfZGF0YSkgeworCQlwcl93YXJuaW5nKCIlczogdm9sdGFnZSB0YWJsZSBkb2VzIG5vdCBleGlzdCBmb3IgdmRkXyVzXG4iLAorCQkJX19mdW5jX18sIHZvbHRkbS0+bmFtZSk7CisJCXJldHVybiBFUlJfUFRSKC1FTk9EQVRBKTsKKwl9CisKKwlmb3IgKGkgPSAwOyB2ZGQtPnZvbHRfZGF0YVtpXS52b2x0X25vbWluYWwgIT0gMDsgaSsrKSB7CisJCWlmICh2ZGQtPnZvbHRfZGF0YVtpXS52b2x0X25vbWluYWwgPT0gdm9sdCkKKwkJCXJldHVybiAmdmRkLT52b2x0X2RhdGFbaV07CisJfQorCisJcHJfbm90aWNlKCIlczogVW5hYmxlIHRvIG1hdGNoIHRoZSBjdXJyZW50IHZvbHRhZ2Ugd2l0aCB0aGUgdm9sdGFnZSIKKwkJInRhYmxlIGZvciB2ZGRfJXNcbiIsIF9fZnVuY19fLCB2b2x0ZG0tPm5hbWUpOworCisJcmV0dXJuIEVSUl9QVFIoLUVOT0RBVEEpOworfQorCisvKioKKyAqIG9tYXBfdm9sdGFnZV9yZWdpc3Rlcl9wbWljKCkgLSBBUEkgdG8gcmVnaXN0ZXIgUE1JQyBzcGVjaWZpYyBkYXRhCisgKiBAdm9sdGRtOglwb2ludGVyIHRvIHRoZSBWREQgZm9yIHdoaWNoIHRoZSBQTUlDIHNwZWNpZmljIGRhdGEgaXMKKyAqCQl0byBiZSByZWdpc3RlcmVkCisgKiBAcG1pY19pbmZvOgl0aGUgc3RydWN0dXJlIGNvbnRhaW5pbmcgcG1pYyBpbmZvCisgKgorICogVGhpcyBBUEkgaXMgdG8gYmUgY2FsbGVkIGJ5IHRoZSBTT0MvUE1JQyBmaWxlIHRvIHNwZWNpZnkgdGhlCisgKiBwbWljIHNwZWNpZmljIGluZm8gYXMgcHJlc2VudCBpbiBvbWFwX3ZvbHRfcG1pY19pbmZvIHN0cnVjdHVyZS4KKyAqLworaW50IG9tYXBfdm9sdGFnZV9yZWdpc3Rlcl9wbWljKHN0cnVjdCB2b2x0YWdlZG9tYWluICp2b2x0ZG0sCisJCXN0cnVjdCBvbWFwX3ZvbHRfcG1pY19pbmZvICpwbWljX2luZm8pCit7CisJc3RydWN0IG9tYXBfdmRkX2luZm8gKnZkZDsKKworCWlmICghdm9sdGRtIHx8IElTX0VSUih2b2x0ZG0pKSB7CisJCXByX3dhcm5pbmcoIiVzOiBWREQgc3BlY2lmaWVkIGRvZXMgbm90IGV4aXN0IVxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl2ZGQgPSBjb250YWluZXJfb2Yodm9sdGRtLCBzdHJ1Y3Qgb21hcF92ZGRfaW5mbywgdm9sdGRtKTsKKworCXZkZC0+cG1pY19pbmZvID0gcG1pY19pbmZvOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogb21hcF92b2x0YWdlX2dldF9kYmdkaXIoKSAtIEFQSSB0byBnZXQgcG9pbnRlciB0byB0aGUgZGVidWdmcyBkaXJlY3RvcnkKKyAqCQkJCWNvcnJlc3BvbmRpbmcgdG8gYSB2b2x0YWdlIGRvbWFpbi4KKyAqCisgKiBAdm9sdGRtOglwb2ludGVyIHRvIHRoZSBWREQgd2hvc2UgZGVidWcgZGlyZWN0b3J5IGlzIHJlcXVpcmVkLgorICoKKyAqIFRoaXMgQVBJIHJldHVybnMgcG9pbnRlciB0byB0aGUgZGVidWdmcyBkaXJlY3RvcnkgY29ycmVzcG9uZGluZworICogdG8gdGhlIHZvbHRhZ2UgZG9tYWluLiBTaG91bGQgYmUgdXNlZCBieSBkcml2ZXJzIHJlcXVpcmluZyB0bworICogYWRkIGFueSBkZWJ1ZyBlbnRyeSBmb3IgYSBwYXJ0aWN1bGFyIHZvbHRhZ2UgZG9tYWluLiBSZXR1cm5zIE5VTEwKKyAqIGluIGNhc2Ugb2YgZXJyb3IuCisgKi8KK3N0cnVjdCBkZW50cnkgKm9tYXBfdm9sdGFnZV9nZXRfZGJnZGlyKHN0cnVjdCB2b2x0YWdlZG9tYWluICp2b2x0ZG0pCit7CisJc3RydWN0IG9tYXBfdmRkX2luZm8gKnZkZDsKKworCWlmICghdm9sdGRtIHx8IElTX0VSUih2b2x0ZG0pKSB7CisJCXByX3dhcm5pbmcoIiVzOiBWREQgc3BlY2lmaWVkIGRvZXMgbm90IGV4aXN0IVxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwl2ZGQgPSBjb250YWluZXJfb2Yodm9sdGRtLCBzdHJ1Y3Qgb21hcF92ZGRfaW5mbywgdm9sdGRtKTsKKworCXJldHVybiB2ZGQtPmRlYnVnX2RpcjsKK30KKworLyoqCisgKiBvbWFwX2NoYW5nZV92b2x0c2NhbGVfbWV0aG9kKCkgLSBBUEkgdG8gY2hhbmdlIHRoZSB2b2x0YWdlIHNjYWxpbmcgbWV0aG9kLgorICogQHZvbHRkbToJcG9pbnRlciB0byB0aGUgVkREIHdob3NlIHZvbHRhZ2Ugc2NhbGluZyBtZXRob2QKKyAqCQloYXMgdG8gYmUgY2hhbmdlZC4KKyAqIEB2b2x0c2NhbGVfbWV0aG9kOgl0aGUgbWV0aG9kIHRvIGJlIHVzZWQgZm9yIHZvbHRhZ2Ugc2NhbGluZy4KKyAqCisgKiBUaGlzIEFQSSBjYW4gYmUgdXNlZCBieSB0aGUgYm9hcmQgZmlsZXMgdG8gY2hhbmdlIHRoZSBtZXRob2Qgb2Ygdm9sdGFnZQorICogc2NhbGluZyBiZXR3ZWVuIHZwZm9yY2V1cGRhdGUgYW5kIHZjYnlwYXNzLiBUaGUgcGFyYW1ldGVyIHZhbHVlcyBhcmUKKyAqIGRlZmluZWQgaW4gdm9sdGFnZS5oCisgKi8KK3ZvaWQgb21hcF9jaGFuZ2Vfdm9sdHNjYWxlX21ldGhvZChzdHJ1Y3Qgdm9sdGFnZWRvbWFpbiAqdm9sdGRtLAorCQlpbnQgdm9sdHNjYWxlX21ldGhvZCkKK3sKKwlzdHJ1Y3Qgb21hcF92ZGRfaW5mbyAqdmRkOworCisJaWYgKCF2b2x0ZG0gfHwgSVNfRVJSKHZvbHRkbSkpIHsKKwkJcHJfd2FybmluZygiJXM6IFZERCBzcGVjaWZpZWQgZG9lcyBub3QgZXhpc3QhXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisKKwl2ZGQgPSBjb250YWluZXJfb2Yodm9sdGRtLCBzdHJ1Y3Qgb21hcF92ZGRfaW5mbywgdm9sdGRtKTsKKworCXN3aXRjaCAodm9sdHNjYWxlX21ldGhvZCkgeworCWNhc2UgVk9MVFNDQUxFX1ZQRk9SQ0VVUERBVEU6CisJCXZkZC0+dm9sdF9zY2FsZSA9IHZwX2ZvcmNldXBkYXRlX3NjYWxlX3ZvbHRhZ2U7CisJCXJldHVybjsKKwljYXNlIFZPTFRTQ0FMRV9WQ0JZUEFTUzoKKwkJdmRkLT52b2x0X3NjYWxlID0gdmNfYnlwYXNzX3NjYWxlX3ZvbHRhZ2U7CisJCXJldHVybjsKKwlkZWZhdWx0OgorCQlwcl93YXJuaW5nKCIlczogVHJ5aW5nIHRvIGNoYW5nZSB0aGUgbWV0aG9kIG9mIHZvbHRhZ2Ugc2NhbGluZyIKKwkJCSJ0byBhbiB1bnN1cHBvcnRlZCBvbmUhXG4iLCBfX2Z1bmNfXyk7CisJfQorfQorCisvKioKKyAqIG9tYXBfdm9sdGFnZV9kb21haW5fbG9va3VwKCkgLSBBUEkgdG8gZ2V0IHRoZSB2b2x0YWdlIGRvbWFpbiBwb2ludGVyCisgKiBAbmFtZToJTmFtZSBvZiB0aGUgdm9sdGFnZSBkb21haW4KKyAqCisgKiBUaGlzIEFQSSBsb29rcyB1cCBpbiB0aGUgZ2xvYmFsIHZkZF9pbmZvIHN0cnVjdCBmb3IgdGhlCisgKiBleGlzdGVuY2Ugb2Ygdm9sdGFnZSBkb21haW4gPG5hbWU+LiBJZiBpdCBleGlzdHMsIHRoZSBBUEkgcmV0dXJucworICogYSBwb2ludGVyIHRvIHRoZSB2b2x0YWdlIGRvbWFpbiBzdHJ1Y3R1cmUgY29ycmVzcG9uZGluZyB0byB0aGUKKyAqIFZERDxuYW1lPi4gRWxzZSByZXR1bnMgZXJyb3IgcG9pbnRlci4KKyAqLworc3RydWN0IHZvbHRhZ2Vkb21haW4gKm9tYXBfdm9sdGFnZV9kb21haW5fbG9va3VwKGNoYXIgKm5hbWUpCit7CisJaW50IGk7CisKKwlpZiAoIXZkZF9pbmZvKSB7CisJCXByX2VycigiJXM6IFZvbHRhZ2UgZHJpdmVyIGluaXQgbm90IHlldCBoYXBwZW5lZC5GYXVsdGluZyFcbiIsCisJCQlfX2Z1bmNfXyk7CisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCX0KKworCWlmICghbmFtZSkgeworCQlwcl9lcnIoIiVzOiBObyBuYW1lIHRvIGdldCB0aGUgdm90YWdlIGRvbWFpbiFcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IG5yX3NjYWxhYmxlX3ZkZDsgaSsrKSB7CisJCWlmICghKHN0cmNtcChuYW1lLCB2ZGRfaW5mb1tpXS52b2x0ZG0ubmFtZSkpKQorCQkJcmV0dXJuICZ2ZGRfaW5mb1tpXS52b2x0ZG07CisJfQorCisJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Cit9CisKKy8qKgorICogb21hcF92b2x0YWdlX2xhdGVfaW5pdCgpIC0gSW5pdCB0aGUgdmFyaW91cyB2b2x0YWdlIHBhcmFtZXRlcnMKKyAqCisgKiBUaGlzIEFQSSBpcyB0byBiZSBjYWxsZWQgaW4gdGhlIGxhdGVyIHN0YWdlcyBvZiB0aGUKKyAqIHN5c3RlbSBib290IHRvIGluaXQgdGhlIHZvbHRhZ2UgY29udHJvbGxlciBhbmQKKyAqIHZvbHRhZ2UgcHJvY2Vzc29ycy4KKyAqLworaW50IF9faW5pdCBvbWFwX3ZvbHRhZ2VfbGF0ZV9pbml0KHZvaWQpCit7CisJaW50IGk7CisKKwlpZiAoIXZkZF9pbmZvKSB7CisJCXByX2VycigiJXM6IFZvbHRhZ2UgZHJpdmVyIHN1cHBvcnQgbm90IGFkZGVkXG4iLAorCQkJX19mdW5jX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl2b2x0YWdlX2RpciA9IGRlYnVnZnNfY3JlYXRlX2Rpcigidm9sdGFnZSIsIE5VTEwpOworCWlmIChJU19FUlIodm9sdGFnZV9kaXIpKQorCQlwcl9lcnIoIiVzOiBVbmFibGUgdG8gY3JlYXRlIHZvbHRhZ2UgZGVidWdmcyBtYWluIGRpclxuIiwKKwkJCV9fZnVuY19fKTsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfc2NhbGFibGVfdmRkOyBpKyspIHsKKwkJaWYgKHZkZF9kYXRhX2NvbmZpZ3VyZSgmdmRkX2luZm9baV0pKQorCQkJY29udGludWU7CisJCXZjX2luaXQoJnZkZF9pbmZvW2ldKTsKKwkJdnBfaW5pdCgmdmRkX2luZm9baV0pOworCQl2ZGRfZGVidWdmc19pbml0KCZ2ZGRfaW5mb1tpXSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogb21hcF92b2x0YWdlX2Vhcmx5X2luaXQoKS0gVm9sYXRhZ2UgZHJpdmVyIGVhcmx5IGluaXQKKyAqLworc3RhdGljIGludCBfX2luaXQgb21hcF92b2x0YWdlX2Vhcmx5X2luaXQodm9pZCkKK3sKKwlpZiAoY3B1X2lzX29tYXAzNHh4KCkpIHsKKwkJdmRkX2luZm8gPSBvbWFwM192ZGRfaW5mbzsKKwkJbnJfc2NhbGFibGVfdmRkID0gT01BUDNfTlJfU0NBTEFCTEVfVkREOworCQl2Y19pbml0ID0gb21hcDNfdmNfaW5pdDsKKwkJdmRkX2RhdGFfY29uZmlndXJlID0gb21hcDNfdmRkX2RhdGFfY29uZmlndXJlOworCX0gZWxzZSBpZiAoY3B1X2lzX29tYXA0NHh4KCkpIHsKKwkJdmRkX2luZm8gPSBvbWFwNF92ZGRfaW5mbzsKKwkJbnJfc2NhbGFibGVfdmRkID0gT01BUDRfTlJfU0NBTEFCTEVfVkREOworCQl2Y19pbml0ID0gb21hcDRfdmNfaW5pdDsKKwkJdmRkX2RhdGFfY29uZmlndXJlID0gb21hcDRfdmRkX2RhdGFfY29uZmlndXJlOworCX0gZWxzZSB7CisJCXByX3dhcm5pbmcoIiVzOiB2b2x0YWdlIGRyaXZlciBzdXBwb3J0IG5vdCBhZGRlZFxuIiwgX19mdW5jX18pOworCX0KKworCXJldHVybiAwOworfQorY29yZV9pbml0Y2FsbChvbWFwX3ZvbHRhZ2VfZWFybHlfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3dkX3RpbWVyLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3dkX3RpbWVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBjNDkwNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvd2RfdGltZXIuYwpAQCAtMCwwICsxLDU0IEBACisvKgorICogT01BUDIrIE1QVSBXRF9USU1FUi1zcGVjaWZpYyBjb2RlCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKworI2luY2x1ZGUgPHBsYXQvb21hcF9od21vZC5oPgorCisvKgorICogSW4gb3JkZXIgdG8gYXZvaWQgYW55IGFzc3VtcHRpb25zIGZyb20gYm9vdGxvYWRlciByZWdhcmRpbmcgV0RUCisgKiBzZXR0aW5ncywgV0RUIG1vZHVsZSBpcyByZXNldCBkdXJpbmcgaW5pdC4gVGhpcyBlbmFibGVzIHRoZSB3YXRjaGRvZworICogdGltZXIuIEhlbmNlIGl0IGlzIHJlcXVpcmVkIHRvIGRpc2FibGUgdGhlIHdhdGNoZG9nIGFmdGVyIHRoZSBXRFQgcmVzZXQKKyAqIGR1cmluZyBpbml0LiBPdGhlcndpc2UgdGhlIHN5c3RlbSB3b3VsZCByZWJvb3QgYXMgcGVyIHRoZSBkZWZhdWx0CisgKiB3YXRjaGRvZyB0aW1lciByZWdpc3RlcnMgc2V0dGluZ3MuCisgKi8KKyNkZWZpbmUgT01BUF9XRFRfV1BTCQkweDM0CisjZGVmaW5lIE9NQVBfV0RUX1NQUgkJMHg0OAorCisKK2ludCBvbWFwMl93ZF90aW1lcl9kaXNhYmxlKHN0cnVjdCBvbWFwX2h3bW9kICpvaCkKK3sKKwl2b2lkIF9faW9tZW0gKmJhc2U7CisKKwlpZiAoIW9oKSB7CisJCXByX2VycigiJXM6IENvdWxkIG5vdCBsb29rIHVwIHdkdGltZXJfaHdtb2RcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJYmFzZSA9IG9tYXBfaHdtb2RfZ2V0X21wdV9ydF92YShvaCk7CisJaWYgKCFiYXNlKSB7CisJCXByX2VycigiJXM6IENvdWxkIG5vdCBnZXQgdGhlIGJhc2UgYWRkcmVzcyBmb3IgJXNcbiIsCisJCQkJb2gtPm5hbWUsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogc2VxdWVuY2UgcmVxdWlyZWQgdG8gZGlzYWJsZSB3YXRjaGRvZyAqLworCV9fcmF3X3dyaXRlbCgweEFBQUEsIGJhc2UgKyBPTUFQX1dEVF9TUFIpOworCXdoaWxlIChfX3Jhd19yZWFkbChiYXNlICsgT01BUF9XRFRfV1BTKSAmIDB4MTApCisJCWNwdV9yZWxheCgpOworCisJX19yYXdfd3JpdGVsKDB4NTU1NSwgYmFzZSArIE9NQVBfV0RUX1NQUik7CisJd2hpbGUgKF9fcmF3X3JlYWRsKGJhc2UgKyBPTUFQX1dEVF9XUFMpICYgMHgxMCkKKwkJY3B1X3JlbGF4KCk7CisKKwlyZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi93ZF90aW1lci5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi93ZF90aW1lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwMDU0YTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3dkX3RpbWVyLmgKQEAgLTAsMCArMSwxNyBAQAorLyoKKyAqIE9NQVAyKyBNUFUgV0RfVElNRVItc3BlY2lmaWMgZnVuY3Rpb24gcHJvdG90eXBlcworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfV0RfVElNRVJfSAorI2RlZmluZSBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfV0RfVElNRVJfSAorCisjaW5jbHVkZSA8cGxhdC9vbWFwX2h3bW9kLmg+CisKK2V4dGVybiBpbnQgb21hcDJfd2RfdGltZXJfZGlzYWJsZShzdHJ1Y3Qgb21hcF9od21vZCAqb2gpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L0tjb25maWcKaW5kZXggYzg5N2UwMy4uNjYwNGZjNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L0tjb25maWcKQEAgLTUxLDYgKzUxLDEzIEBACiAJICBCdWZmYWxvIExpbmtzdGF0aW9uIFByby9MaXZlIHBsYXRmb3JtLiBCb3RoIHYxIGFuZAogCSAgdjIgZGV2aWNlcyBhcmUgc3VwcG9ydGVkLgogCitjb25maWcgTUFDSF9MSU5LU1RBVElPTl9MU0NITAorCWJvb2wgIkJ1ZmZhbG8gTGlua3N0YXRpb24gTGl2ZSB2MyAoTFMtQ0hMKSIKKwlzZWxlY3QgSTJDX0JPQVJESU5GTworCWhlbHAKKwkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBzdXBwb3J0IHRoZQorCSAgQnVmZmFsbyBMaW5rc3RhdGlvbiBMaXZlIHYzIChMUy1DSEwpIHBsYXRmb3JtLgorCiBjb25maWcgTUFDSF9MSU5LU1RBVElPTl9NSU5JCiAJYm9vbCAiQnVmZmFsbyBMaW5rc3RhdGlvbiBNaW5pIgogCXNlbGVjdCBJMkNfQk9BUkRJTkZPCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvTWFrZWZpbGUKaW5kZXggZWI2ZWFiYy4uN2YxOGNkYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9NYWtlZmlsZQpAQCAtMjEsMyArMjEsNCBAQAogb2JqLSQoQ09ORklHX01BQ0hfUkQ4OEY1MTgxTF9HRSkJKz0gcmQ4OGY1MTgxbC1nZS1zZXR1cC5vCiBvYmotJChDT05GSUdfTUFDSF9SRDg4RjUxODFMX0ZYTykJKz0gcmQ4OGY1MTgxbC1meG8tc2V0dXAubwogb2JqLSQoQ09ORklHX01BQ0hfUkQ4OEY2MTgzQVBfR0UpCSs9IHJkODhmNjE4M2FwLWdlLXNldHVwLm8KK29iai0kKENPTkZJR19NQUNIX0xJTktTVEFUSU9OX0xTQ0hMKQkrPSBscy1jaGwtc2V0dXAubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2luY2x1ZGUvbWFjaC9pby5oIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2luY2x1ZGUvbWFjaC9pby5oCmluZGV4IGM0N2IwMzMuLmM1MTk2MTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9pbmNsdWRlL21hY2gvaW8uaAorKysgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvaW5jbHVkZS9tYWNoL2lvLmgKQEAgLTM4LDggKzM4LDggQEAKIAkJX19pb3VubWFwKGFkZHIpOwogfQogCi0jZGVmaW5lIF9fYXJjaF9pb3JlbWFwKHAsIHMsIG0pCV9fYXJjaF9pb3JlbWFwKHAsIHMsIG0pCi0jZGVmaW5lIF9fYXJjaF9pb3VubWFwKGEpCV9fYXJjaF9pb3VubWFwKGEpCisjZGVmaW5lIF9fYXJjaF9pb3JlbWFwCQlfX2FyY2hfaW9yZW1hcAorI2RlZmluZSBfX2FyY2hfaW91bm1hcAkJX19hcmNoX2lvdW5tYXAKICNkZWZpbmUgX19pbyhhKQkJCV9fdHlwZXNhZmVfaW8oYSkKICNkZWZpbmUgX19tZW1fcGNpKGEpCQkoYSkKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2xzLWNobC1zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2xzLWNobC1zZXR1cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwYTliNjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvbHMtY2hsLXNldHVwLmMKQEAgLTAsMCArMSwzMjcgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLW9yaW9uNXgvbHMtY2hsLXNldHVwLmMKKyAqCisgKiBNYWludGFpbmVyOiBBc2ggSHVnaGVzIDxhc2hsZXkuaHVnaGVzQGJsdWV5b25kZXIuY28udWs+CisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L212NjQzeHhfZXRoLmg+CisjaW5jbHVkZSA8bGludXgvbGVkcy5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW9fa2V5cy5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8tZmFuLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9hdGFfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPG1hY2gvb3Jpb241eC5oPgorI2luY2x1ZGUgImNvbW1vbi5oIgorI2luY2x1ZGUgIm1wcC5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIExpbmtzdGF0aW9uIExTLUNITCBJbmZvCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIDI1NksgTk9SIGZsYXNoIERldmljZSBidXMgYm9vdCBjaGlwIHNlbGVjdAorICovCisKKyNkZWZpbmUgTFNDSExfTk9SX0JPT1RfQkFTRQkweGY0MDAwMDAwCisjZGVmaW5lIExTQ0hMX05PUl9CT09UX1NJWkUJU1pfMjU2SworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIDI1NktCIE5PUiBGbGFzaCBvbiBCT09UIERldmljZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIGxzY2hsX25vcl9mbGFzaF9kYXRhID0geworCS53aWR0aCA9IDEsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGxzY2hsX25vcl9mbGFzaF9yZXNvdXJjZSA9IHsKKwkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwkuc3RhcnQJPSBMU0NITF9OT1JfQk9PVF9CQVNFLAorCS5lbmQJPSBMU0NITF9OT1JfQk9PVF9CQVNFICsgTFNDSExfTk9SX0JPT1RfU0laRSAtIDEsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBsc2NobF9ub3JfZmxhc2ggPSB7CisJLm5hbWUgPSAicGh5c21hcC1mbGFzaCIsCisJLmlkID0gMCwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YQk9ICZsc2NobF9ub3JfZmxhc2hfZGF0YSwKKwl9LAorCS5udW1fcmVzb3VyY2VzID0gMSwKKwkucmVzb3VyY2UgPSAmbHNjaGxfbm9yX2ZsYXNoX3Jlc291cmNlLAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBFdGhlcm5ldAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBzdHJ1Y3QgbXY2NDN4eF9ldGhfcGxhdGZvcm1fZGF0YSBsc2NobF9ldGhfZGF0YSA9IHsKKwkucGh5X2FkZHIgPSBNVjY0M1hYX0VUSF9QSFlfQUREUig4KSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUlRDIDVDMzcyYSBvbiBJMkMgYnVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIGxzY2hsX2kyY19ydGMgPSB7CisJSTJDX0JPQVJEX0lORk8oInJzNWMzNzJhIiwgMHgzMiksCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIExFRHMgYXR0YWNoZWQgdG8gR1BJTworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgTFNDSExfR1BJT19MRURfQUxBUk0JMgorI2RlZmluZSBMU0NITF9HUElPX0xFRF9JTkZPCTMKKyNkZWZpbmUgTFNDSExfR1BJT19MRURfRlVOQwkxNworI2RlZmluZSBMU0NITF9HUElPX0xFRF9QV1IJMAorCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkIGxzY2hsX2xlZF9waW5zW10gPSB7CisJeworCQkubmFtZSA9ICJhbGFybTpyZWQiLAorCQkuZ3BpbyA9IExTQ0hMX0dQSU9fTEVEX0FMQVJNLAorCQkuYWN0aXZlX2xvdyA9IDEsCisJfSwgeworCQkubmFtZSA9ICJpbmZvOmFtYmVyIiwKKwkJLmdwaW8gPSBMU0NITF9HUElPX0xFRF9JTkZPLAorCQkuYWN0aXZlX2xvdyA9IDEsCisJfSwgeworCQkubmFtZSA9ICJmdW5jOmJsdWU6dG9wIiwKKwkJLmdwaW8gPSBMU0NITF9HUElPX0xFRF9GVU5DLAorCQkuYWN0aXZlX2xvdyA9IDEsCisJfSwgeworCQkubmFtZSA9ICJwb3dlcjpibHVlOmJvdHRvbSIsCisJCS5ncGlvID0gTFNDSExfR1BJT19MRURfUFdSLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkX3BsYXRmb3JtX2RhdGEgbHNjaGxfbGVkX2RhdGEgPSB7CisJLmxlZHMgPSBsc2NobF9sZWRfcGlucywKKwkubnVtX2xlZHMgPSBBUlJBWV9TSVpFKGxzY2hsX2xlZF9waW5zKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGxzY2hsX2xlZHMgPSB7CisJLm5hbWUgPSAibGVkcy1ncGlvIiwKKwkuaWQgPSAtMSwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZsc2NobF9sZWRfZGF0YSwKKwl9LAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBTQVRBCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzdHJ1Y3QgbXZfc2F0YV9wbGF0Zm9ybV9kYXRhIGxzY2hsX3NhdGFfZGF0YSA9IHsKKwkubl9wb3J0cyA9IDIsCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIExTLUNITCBzcGVjaWZpYyBwb3dlciBvZmYgbWV0aG9kOiByZWJvb3QKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIE9uIHRoZSBMUy1DSEwsIHRoZSBzaHV0ZG93biBwcm9jZXNzIGlzIGZvbGxvd2luZzoKKyAqIC0gVXNlcmxhbmQgbW9uaXRvcnMga2V5IGV2ZW50cyB1bnRpbCB0aGUgcG93ZXIgc3dpdGNoIGdvZXMgdG8gb2ZmIHBvc2l0aW9uCisgKiAtIFRoZSBib2FyZCByZWJvb3RzCisgKiAtIFUtYm9vdCBzdGFydHMgYW5kIGdvZXMgaW50byBhbiBpZGxlIG1vZGUgd2FpdGluZyBmb3IgdGhlIHVzZXIKKyAqICAgdG8gbW92ZSB0aGUgc3dpdGNoIHRvIE9OIHBvc2l0aW9uCisgKgorICovCisKK3N0YXRpYyB2b2lkIGxzY2hsX3Bvd2VyX29mZih2b2lkKQoreworCWFybV9tYWNoaW5lX3Jlc3RhcnQoJ2gnLCBOVUxMKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBHZW5lcmFsIFNldHVwCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgTFNDSExfR1BJT19VU0JfUE9XRVIJOQorI2RlZmluZSBMU0NITF9HUElPX0FVVE9fUE9XRVIJMTcKKyNkZWZpbmUgTFNDSExfR1BJT19QT1dFUgkxOAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogR1BJTyBBdHRhY2hlZCBLZXlzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgTFNDSExfR1BJT19LRVlfRlVOQwkJMTUKKyNkZWZpbmUgTFNDSExfR1BJT19LRVlfUE9XRVIJCTgKKyNkZWZpbmUgTFNDSExfR1BJT19LRVlfQVVUT1BPV0VSCTEwCisjZGVmaW5lIExTQ0hMX1NXX1BPV0VSCQkweDAwCisjZGVmaW5lIExTQ0hMX1NXX0FVVE9QT1dFUgkweDAxCisjZGVmaW5lIExTQ0hMX1NXX0ZVTkMJCTB4MDIKKworc3RhdGljIHN0cnVjdCBncGlvX2tleXNfYnV0dG9uIGxzY2hsX2J1dHRvbnNbXSA9IHsKKwl7CisJCS50eXBlID0gRVZfU1csCisJCS5jb2RlID0gTFNDSExfU1dfUE9XRVIsCisJCS5ncGlvID0gTFNDSExfR1BJT19LRVlfUE9XRVIsCisJCS5kZXNjID0gIlBvd2VyLW9uIFN3aXRjaCIsCisJCS5hY3RpdmVfbG93ID0gMSwKKwl9LCB7CisJCS50eXBlID0gRVZfU1csCisJCS5jb2RlID0gTFNDSExfU1dfQVVUT1BPV0VSLAorCQkuZ3BpbyA9IExTQ0hMX0dQSU9fS0VZX0FVVE9QT1dFUiwKKwkJLmRlc2MgPSAiUG93ZXItYXV0byBTd2l0Y2giLAorCQkuYWN0aXZlX2xvdyA9IDEsCisJfSwgeworCQkudHlwZSA9IEVWX1NXLAorCQkuY29kZSA9IExTQ0hMX1NXX0ZVTkMsCisJCS5ncGlvID0gTFNDSExfR1BJT19LRVlfRlVOQywKKwkJLmRlc2MgPSAiRnVuY3Rpb24gU3dpdGNoIiwKKwkJLmFjdGl2ZV9sb3cgPSAxLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fa2V5c19wbGF0Zm9ybV9kYXRhIGxzY2hsX2J1dHRvbl9kYXRhID0geworCS5idXR0b25zID0gbHNjaGxfYnV0dG9ucywKKwkubmJ1dHRvbnMgPSBBUlJBWV9TSVpFKGxzY2hsX2J1dHRvbnMpLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbHNjaGxfYnV0dG9uX2RldmljZSA9IHsKKwkubmFtZSA9ICJncGlvLWtleXMiLAorCS5pZCA9IC0xLAorCS5udW1fcmVzb3VyY2VzID0gMCwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZsc2NobF9idXR0b25fZGF0YSwKKwl9LAorfTsKKworI2RlZmluZSBMU0NITF9HUElPX0hERF9QT1dFUgkxCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBHUElPIEZhbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgTFNDSExfR1BJT19GQU5fTE9XCTE2CisjZGVmaW5lIExTQ0hMX0dQSU9fRkFOX0hJR0gJMTQKKyNkZWZpbmUgTFNDSExfR1BJT19GQU5fTE9DSwk2CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19mYW5fYWxhcm0gbHNjaGxfYWxhcm0gPSB7CisJLmdwaW8gPSBMU0NITF9HUElPX0ZBTl9MT0NLLAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2Zhbl9zcGVlZCBsc2NobF9zcGVlZHNbXSA9IHsKKwl7CisJCS5ycG0gPSAwLAorCQkuY3RybF92YWwgPSAzLAorCX0sIHsKKwkJLnJwbSA9IDE1MDAsCisJCS5jdHJsX3ZhbCA9IDIsCisJfSwgeworCQkucnBtID0gMzI1MCwKKwkJLmN0cmxfdmFsID0gMSwKKwl9LCB7CisJCS5ycG0gPSA1MDAwLAorCQkuY3RybF92YWwgPSAwLAorCX0sCit9OworCitzdGF0aWMgaW50IGxzY2hsX2dwaW9fbGlzdFtdID0geworCUxTQ0hMX0dQSU9fRkFOX0hJR0gsIExTQ0hMX0dQSU9fRkFOX0xPVywKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19mYW5fcGxhdGZvcm1fZGF0YSBsc2NobF9mYW5fZGF0YSA9IHsKKwkubnVtX2N0cmwgPSBBUlJBWV9TSVpFKGxzY2hsX2dwaW9fbGlzdCksCisJLmN0cmwgPSBsc2NobF9ncGlvX2xpc3QsCisJLmFsYXJtID0gJmxzY2hsX2FsYXJtLAorCS5udW1fc3BlZWQgPSBBUlJBWV9TSVpFKGxzY2hsX3NwZWVkcyksCisJLnNwZWVkID0gbHNjaGxfc3BlZWRzLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbHNjaGxfZmFuX2RldmljZSA9IHsKKwkubmFtZSA9ICJncGlvLWZhbiIsCisJLmlkID0gLTEsCisJLm51bV9yZXNvdXJjZXMgPSAwLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJmxzY2hsX2Zhbl9kYXRhLAorCX0sCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogR1BJTyBEYXRhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHN0cnVjdCBvcmlvbjV4X21wcF9tb2RlIGxzY2hsX21wcF9tb2Rlc1tdIF9faW5pdGRhdGEgPSB7CisJeyAgMCwgTVBQX0dQSU8gfSwgLyogTEVEIFBPV0VSICovCisJeyAgMSwgTVBQX0dQSU8gfSwgLyogSEREIFBPV0VSICovCisJeyAgMiwgTVBQX0dQSU8gfSwgLyogTEVEIEFMQVJNICovCisJeyAgMywgTVBQX0dQSU8gfSwgLyogTEVEIElORk8gKi8KKwl7ICA0LCBNUFBfVU5VU0VEIH0sCisJeyAgNSwgTVBQX1VOVVNFRCB9LAorCXsgIDYsIE1QUF9HUElPIH0sIC8qIEZBTiBMT0NLICovCisJeyAgNywgTVBQX0dQSU8gfSwgLyogU1cgSU5JVCAqLworCXsgIDgsIE1QUF9HUElPIH0sIC8qIFNXIFBPV0VSICovCisJeyAgOSwgTVBQX0dQSU8gfSwgLyogVVNCIFBPV0VSICovCisJeyAxMCwgTVBQX0dQSU8gfSwgLyogU1cgQVVUTyBQT1dFUiAqLworCXsgMTEsIE1QUF9VTlVTRUQgfSwKKwl7IDEyLCBNUFBfVU5VU0VEIH0sCisJeyAxMywgTVBQX1VOVVNFRCB9LAorCXsgMTQsIE1QUF9HUElPIH0sIC8qIEZBTiBISUdIICovCisJeyAxNSwgTVBQX0dQSU8gfSwgLyogU1cgRlVOQyAqLworCXsgMTYsIE1QUF9HUElPIH0sIC8qIEZBTiBMT1cgKi8KKwl7IDE3LCBNUFBfR1BJTyB9LCAvKiBMRUQgRlVOQyAqLworCXsgMTgsIE1QUF9VTlVTRUQgfSwKKwl7IDE5LCBNUFBfVU5VU0VEIH0sCisJeyAtMSB9LAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGxzY2hsX2luaXQodm9pZCkKK3sKKwkvKgorCSAqIFNldHVwIGJhc2ljIE9yaW9uIGZ1bmN0aW9ucy4gTmVlZHMgdG8gYmUgY2FsbGVkIGVhcmx5LgorCSAqLworCW9yaW9uNXhfaW5pdCgpOworCisJb3Jpb241eF9tcHBfY29uZihsc2NobF9tcHBfbW9kZXMpOworCisJLyoKKwkgKiBDb25maWd1cmUgcGVyaXBoZXJhbHMuCisJICovCisJb3Jpb241eF9laGNpMF9pbml0KCk7CisJb3Jpb241eF9laGNpMV9pbml0KCk7CisJb3Jpb241eF9ldGhfaW5pdCgmbHNjaGxfZXRoX2RhdGEpOworCW9yaW9uNXhfaTJjX2luaXQoKTsKKwlvcmlvbjV4X3NhdGFfaW5pdCgmbHNjaGxfc2F0YV9kYXRhKTsKKwlvcmlvbjV4X3VhcnQwX2luaXQoKTsKKwlvcmlvbjV4X3hvcl9pbml0KCk7CisKKwlvcmlvbjV4X3NldHVwX2Rldl9ib290X3dpbihMU0NITF9OT1JfQk9PVF9CQVNFLAorCQkJCSAgIExTQ0hMX05PUl9CT09UX1NJWkUpOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmbHNjaGxfbm9yX2ZsYXNoKTsKKworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmbHNjaGxfbGVkcyk7CisKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmxzY2hsX2J1dHRvbl9kZXZpY2UpOworCisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZsc2NobF9mYW5fZGV2aWNlKTsKKworCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsICZsc2NobF9pMmNfcnRjLCAxKTsKKworCS8qIHVzYiBwb3dlciBvbiAqLworCWdwaW9fc2V0X3ZhbHVlKExTQ0hMX0dQSU9fVVNCX1BPV0VSLCAxKTsKKworCS8qIHJlZ2lzdGVyIHBvd2VyLW9mZiBtZXRob2QgKi8KKwlwbV9wb3dlcl9vZmYgPSBsc2NobF9wb3dlcl9vZmY7CisKKwlwcl9pbmZvKCIlczogZmluaXNoZWRcbiIsIF9fZnVuY19fKTsKK30KKworTUFDSElORV9TVEFSVChMSU5LU1RBVElPTl9MU0NITCwgIkJ1ZmZhbG8gTGlua3N0YXRpb24gTGl2ZVYzIChMUy1DSEwpIikKKwkvKiBNYWludGFpbmVyOiBBc2ggSHVnaGVzIDxhc2hsZXkuaHVnaGVzQGJsdWV5b25kZXIuY28udWs+ICovCisJLmJvb3RfcGFyYW1zCT0gMHgwMDAwMDEwMCwKKwkuaW5pdF9tYWNoaW5lCT0gbHNjaGxfaW5pdCwKKwkubWFwX2lvCQk9IG9yaW9uNXhfbWFwX2lvLAorCS5pbml0X2lycQk9IG9yaW9uNXhfaW5pdF9pcnEsCisJLnRpbWVyCQk9ICZvcmlvbjV4X3RpbWVyLAorCS5maXh1cAkJPSB0YWdfZml4dXBfbWVtMzIsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1wbng0MDA4L2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLXBueDQwMDgvY2xvY2suYwppbmRleCA5ZDE5NzVmLi5hNGEzODE5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXBueDQwMDgvY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLXBueDQwMDgvY2xvY2suYwpAQCAtMjEsOCArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KLQotI2luY2x1ZGUgPGFzbS9jbGtkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGtkZXYuaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL2Nsb2NrLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1weGEvS2NvbmZpZwppbmRleCBjOTNlNzNkLi4yZmM5Zjk0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL0tjb25maWcKQEAgLTUwLDYgKzUwLDEwIEBACiAJc2VsZWN0IFBYQTN4eAogCXNlbGVjdCBDUFVfUFhBOTMwCiAKK2NvbmZpZyBNQUNIX1NBQVJCCisJYm9vbCAiUFhBOTU1IEhhbmRoZWxkIFBsYXRmb3JtIChha2EgU0FBUkIpIgorCXNlbGVjdCBDUFVfUFhBOTU1CisKIGNvbW1lbnQgIlRoaXJkIFBhcnR5IERldiBQbGF0Zm9ybXMgKHNvcnRlZCBieSB2ZW5kb3IgbmFtZSkiCiAKIGNvbmZpZyBBUkNIX1BYQV9JRFAKQEAgLTk0LDYgKzk4LDcgQEAKIAlzZWxlY3QgUFhBMjd4CiAJc2VsZWN0IElXTU1YVAogCXNlbGVjdCBQWEEyNXgKKwlzZWxlY3QgTUlHSFRfSEFWRV9QQ0kKIAogY29uZmlnIE1BQ0hfRU1fWDI3MAogCWJvb2wgIkNvbXB1TGFiIEVNLXgyNzAgcGxhdGZvcm0iCkBAIC0yMzIsMTAgKzIzNyw2IEBACiAJYm9vbCAiVG9yYWRleCBDb2xpYnJpIFBYQTI3MCIKIAlzZWxlY3QgUFhBMjd4CiAKLWNvbmZpZyBNQUNIX0NPTElCUklfUFhBMjcwX0VWQUxCT0FSRAotCWJvb2wgIlRvcmFkZXggQ29saWJyaSBFdmFsdWF0aW9uIENhcnJpZXIgQm9hcmQgc3VwcG9ydCAoUFhBMjcwKSIKLQlkZXBlbmRzIG9uIE1BQ0hfQ09MSUJSSQotCiBjb25maWcgTUFDSF9DT0xJQlJJX1BYQTI3MF9JTkNPTUUKIAlib29sICJJbmNvbWUgcy5yLm8uIFBYQTI3MCBTQkMiCiAJZGVwZW5kcyBvbiBNQUNIX0NPTElCUkkKQEAgLTI1Myw2ICsyNTQsMTAgQEAKIAlzZWxlY3QgUFhBM3h4CiAJc2VsZWN0IENQVV9QWEEzMjAKIAorY29uZmlnIE1BQ0hfQ09MSUJSSV9FVkFMQk9BUkQKKwlib29sICJUb3JhZGV4IENvbGlicmkgRXZhbHVhdGlvbiBDYXJyaWVyIEJvYXJkIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBNQUNIX0NPTElCUkkgfHwgTUFDSF9DT0xJQlJJMzAwIHx8IE1BQ0hfQ09MSUJSSTMyMAorCiBjb25maWcgTUFDSF9WUEFDMjcwCiAJYm9vbCAiVm9pcGFjIFBYQTI3MCIKIAlzZWxlY3QgUFhBMjd4CkBAIC02NTIsMTEgKzY1NywxNyBAQAogCWhlbHAKIAkgIFBYQTkzNSAoY29kZW5hbWUgVGF2b3ItUDY1KQogCi1jb25maWcgQ1BVX1BYQTk1MAorY29uZmlnIFBYQTk1eAogCWJvb2wKLQlzZWxlY3QgQ1BVX1BYQTkzMAorCXNlbGVjdCBDUFVfUEo0CiAJaGVscAotCSAgUFhBOTUwIChjb2RlbmFtZSBUYXZvci1QVjIpCisJICBTZWxlY3QgY29kZSBzcGVjaWZpYyB0byBQWEE5NXggdmFyaWFudHMKKworY29uZmlnIENQVV9QWEE5NTUKKwlib29sCisJc2VsZWN0IFBYQTk1eAorCWhlbHAKKwkgIFBYQTk1MCAoY29kZW5hbWUgTUcxKQogCiBjb25maWcgUFhBX1NIQVJQX0M3eHgKIAlib29sCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtcHhhL01ha2VmaWxlCmluZGV4IGUyZjg5YzIuLmNjMzlkMTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL01ha2VmaWxlCkBAIC0xNiw5ICsxNiwxMCBAQAogIyBHZW5lcmljIGRyaXZlcnMgdGhhdCBvdGhlciBkcml2ZXJzIG1heSBkZXBlbmQgdXBvbgogCiAjIFNvQy1zcGVjaWZpYyBjb2RlCi1vYmotJChDT05GSUdfUFhBMjV4KQkJKz0gbWZwLXB4YTJ4eC5vIHB4YTJ4eC5vIHB4YTI1eC5vCi1vYmotJChDT05GSUdfUFhBMjd4KQkJKz0gbWZwLXB4YTJ4eC5vIHB4YTJ4eC5vIHB4YTI3eC5vCi1vYmotJChDT05GSUdfUFhBM3h4KQkJKz0gbWZwLXB4YTN4eC5vIHB4YTN4eC5vIHNtZW1jLm8gcHhhM3h4LXVscGkubworb2JqLSQoQ09ORklHX1BYQTI1eCkJCSs9IG1mcC1weGEyeHgubyBjbG9jay1weGEyeHgubyBweGEyeHgubyBweGEyNXgubworb2JqLSQoQ09ORklHX1BYQTI3eCkJCSs9IG1mcC1weGEyeHgubyBjbG9jay1weGEyeHgubyBweGEyeHgubyBweGEyN3gubworb2JqLSQoQ09ORklHX1BYQTN4eCkJCSs9IG1mcC1weGEzeHgubyBjbG9jay1weGEzeHgubyBweGEzeHgubyBzbWVtYy5vIHB4YTN4eC11bHBpLm8KK29iai0kKENPTkZJR19QWEE5NXgpCQkrPSBtZnAtcHhhM3h4Lm8gY2xvY2stcHhhM3h4Lm8gcHhhOTV4Lm8gc21lbWMubwogb2JqLSQoQ09ORklHX0NQVV9QWEEzMDApCSs9IHB4YTMwMC5vCiBvYmotJChDT05GSUdfQ1BVX1BYQTMyMCkJKz0gcHhhMzIwLm8KIG9iai0kKENPTkZJR19DUFVfUFhBOTMwKQkrPSBweGE5MzAubwpAQCAtMzQsNiArMzUsNyBAQAogb2JqLSQoQ09ORklHX01BQ0hfVEFWT1JFVkIpCSs9IHRhdm9yZXZiLm8KIG9iai0kKENPTkZJR19NQUNIX1RBVk9SRVZCMykJKz0gdGF2b3JldmIzLm8KIG9iai0kKENPTkZJR19NQUNIX1NBQVIpCQkrPSBzYWFyLm8KK29iai0kKENPTkZJR19NQUNIX1NBQVJCKQkrPSBzYWFyYi5vCiAKICMgM3JkIFBhcnR5IERldiBQbGF0Zm9ybXMKIG9iai0kKENPTkZJR19BUkNIX1BYQV9JRFApCSs9IGlkcC5vCkBAIC02MCw3ICs2Miw3IEBACiBvYmotJChDT05GSUdfTUFDSF9QQ00wMjcpCQkrPSBwY20wMjcubwogb2JqLSQoQ09ORklHX01BQ0hfUENNOTkwX0JBU0VCT0FSRCkJKz0gcGNtOTkwLWJhc2Vib2FyZC5vCiBvYmotJChDT05GSUdfTUFDSF9DT0xJQlJJKQkJCSs9IGNvbGlicmktcHhhMjcwLm8KLW9iai0kKENPTkZJR19NQUNIX0NPTElCUklfUFhBMjcwX0VWQUxCT0FSRCkJKz0gY29saWJyaS1weGEyNzAtZXZhbGJvYXJkLm8KK29iai0kKENPTkZJR19NQUNIX0NPTElCUklfRVZBTEJPQVJEKQkrPSBjb2xpYnJpLWV2YWxib2FyZC5vCiBvYmotJChDT05GSUdfTUFDSF9DT0xJQlJJX1BYQTI3MF9JTkNPTUUpCSs9IGNvbGlicmktcHhhMjcwLWluY29tZS5vCiBvYmotJChDT05GSUdfTUFDSF9DT0xJQlJJMzAwKQkrPSBjb2xpYnJpLXB4YTN4eC5vIGNvbGlicmktcHhhMzAwLm8KIG9iai0kKENPTkZJR19NQUNIX0NPTElCUkkzMjApCSs9IGNvbGlicmktcHhhM3h4Lm8gY29saWJyaS1weGEzMjAubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvYmFsbG9vbjMuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2JhbGxvb24zLmMKaW5kZXggMjFlMTg4OS4uY2NiMmQwYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvYmFsbG9vbjMuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9iYWxsb29uMy5jCkBAIC01NjcsMjcgKzU2NywyOSBAQAogICogTkFORAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZiBkZWZpbmVkKENPTkZJR19NVERfTkFORF9QTEFURk9STSl8fGRlZmluZWQoQ09ORklHX01URF9OQU5EX1BMQVRGT1JNX01PRFVMRSkKLXN0YXRpYyB1aW50MTZfdCBiYWxsb29uM19jdGwgPQotCUJBTExPT04zX05BTkRfQ09OVFJPTF9GTENFMCB8IEJBTExPT04zX05BTkRfQ09OVFJPTF9GTENFMSB8Ci0JQkFMTE9PTjNfTkFORF9DT05UUk9MX0ZMQ0UyIHwgQkFMTE9PTjNfTkFORF9DT05UUk9MX0ZMQ0UzIHwKLQlCQUxMT09OM19OQU5EX0NPTlRST0xfRkxXUDsKLQogc3RhdGljIHZvaWQgYmFsbG9vbjNfbmFuZF9jbWRfY3RsKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY21kLCB1bnNpZ25lZCBpbnQgY3RybCkKIHsKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCXVpbnQ4X3QgYmFsbG9vbjNfY3RsX3NldCA9IDAsIGJhbGxvb24zX2N0bF9jbHIgPSAwOwogCiAJaWYgKGN0cmwgJiBOQU5EX0NUUkxfQ0hBTkdFKSB7CiAJCWlmIChjdHJsICYgTkFORF9DTEUpCi0JCQliYWxsb29uM19jdGwgfD0gQkFMTE9PTjNfTkFORF9DT05UUk9MX0ZMQ0xFOworCQkJYmFsbG9vbjNfY3RsX3NldCB8PSBCQUxMT09OM19OQU5EX0NPTlRST0xfRkxDTEU7CiAJCWVsc2UKLQkJCWJhbGxvb24zX2N0bCAmPSB+QkFMTE9PTjNfTkFORF9DT05UUk9MX0ZMQ0xFOworCQkJYmFsbG9vbjNfY3RsX2NsciB8PSBCQUxMT09OM19OQU5EX0NPTlRST0xfRkxDTEU7CiAKIAkJaWYgKGN0cmwgJiBOQU5EX0FMRSkKLQkJCWJhbGxvb24zX2N0bCB8PSBCQUxMT09OM19OQU5EX0NPTlRST0xfRkxBTEU7CisJCQliYWxsb29uM19jdGxfc2V0IHw9IEJBTExPT04zX05BTkRfQ09OVFJPTF9GTEFMRTsKIAkJZWxzZQotCQkJYmFsbG9vbjNfY3RsICY9IH5CQUxMT09OM19OQU5EX0NPTlRST0xfRkxBTEU7CisJCQliYWxsb29uM19jdGxfY2xyIHw9IEJBTExPT04zX05BTkRfQ09OVFJPTF9GTEFMRTsKIAotCQlfX3Jhd193cml0ZWwoYmFsbG9vbjNfY3RsLCBCQUxMT09OM19OQU5EX0NPTlRST0xfUkVHKTsKKwkJaWYgKGJhbGxvb24zX2N0bF9jbHIpCisJCQlfX3Jhd193cml0ZWwoYmFsbG9vbjNfY3RsX2NsciwKKwkJCQlCQUxMT09OM19OQU5EX0NPTlRST0xfUkVHKTsKKwkJaWYgKGJhbGxvb24zX2N0bF9zZXQpCisJCQlfX3Jhd193cml0ZWwoYmFsbG9vbjNfY3RsX3NldCwKKwkJCQlCQUxMT09OM19OQU5EX0NPTlRST0xfUkVHIHwKKwkJCQlCQUxMT09OM19GUEdBX1NFVG5DTFIpOwogCX0KIAogCWlmIChjbWQgIT0gTkFORF9DTURfTk9ORSkKQEAgLTU5OSwyOCArNjAxLDMzIEBACiAJaWYgKGNoaXAgPCAwIHx8IGNoaXAgPiAzKQogCQlyZXR1cm47CiAKLQliYWxsb29uM19jdGwgfD0gQkFMTE9PTjNfTkFORF9DT05UUk9MX0ZMQ0UwIHwKLQkJCUJBTExPT04zX05BTkRfQ09OVFJPTF9GTENFMSB8Ci0JCQlCQUxMT09OM19OQU5EX0NPTlRST0xfRkxDRTIgfAotCQkJQkFMTE9PTjNfTkFORF9DT05UUk9MX0ZMQ0UzOworCS8qIEFzc2VydCBhbGwgbkNFIGxpbmVzICovCisJX19yYXdfd3JpdGV3KAorCQlCQUxMT09OM19OQU5EX0NPTlRST0xfRkxDRTAgfCBCQUxMT09OM19OQU5EX0NPTlRST0xfRkxDRTEgfAorCQlCQUxMT09OM19OQU5EX0NPTlRST0xfRkxDRTIgfCBCQUxMT09OM19OQU5EX0NPTlRST0xfRkxDRTMsCisJCUJBTExPT04zX05BTkRfQ09OVFJPTF9SRUcgfCBCQUxMT09OM19GUEdBX1NFVG5DTFIpOwogCiAJLyogRGVhc3NlcnQgY29ycmVjdCBuQ0UgbGluZSAqLwotCWJhbGxvb24zX2N0bCAmPSB+KEJBTExPT04zX05BTkRfQ09OVFJPTF9GTENFMCA8PCBjaGlwKTsKKwlfX3Jhd193cml0ZXcoQkFMTE9PTjNfTkFORF9DT05UUk9MX0ZMQ0UwIDw8IGNoaXAsCisJCUJBTExPT04zX05BTkRfQ09OVFJPTF9SRUcpOworfQogCi0JX19yYXdfd3JpdGV3KGJhbGxvb24zX2N0bCwgQkFMTE9PTjNfTkFORF9DT05UUk9MX1JFRyk7CitzdGF0aWMgaW50IGJhbGxvb24zX25hbmRfZGV2X3JlYWR5KHN0cnVjdCBtdGRfaW5mbyAqbXRkKQoreworCXJldHVybiBfX3Jhd19yZWFkbChCQUxMT09OM19OQU5EX1NUQVRfUkVHKSAmIEJBTExPT04zX05BTkRfU1RBVF9STkI7CiB9CiAKIHN0YXRpYyBpbnQgYmFsbG9vbjNfbmFuZF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXZvaWQgX19pb21lbSAqdGVtcF9tYXA7CiAJdWludDE2X3QgdmVyOwogCWludCByZXQ7CiAKLQlfX3Jhd193cml0ZXcoQkFMTE9PTjNfTkFORF9DT05UUk9MMl8xNkJJVCwgQkFMTE9PTjNfTkFORF9DT05UUk9MMl9SRUcpOworCV9fcmF3X3dyaXRldyhCQUxMT09OM19OQU5EX0NPTlRST0wyXzE2QklULAorCQlCQUxMT09OM19OQU5EX0NPTlRST0wyX1JFRyB8IEJBTExPT04zX0ZQR0FfU0VUbkNMUik7CiAKIAl2ZXIgPSBfX3Jhd19yZWFkdyhCQUxMT09OM19GUEdBX1ZFUik7Ci0JaWYgKHZlciA+IDB4MDIwMSkKLQkJcHJfd2FybigiVGhlIEZQR0EgY29kZSwgdmVyc2lvbiAweCUwNHgsIGlzIG5ld2VyIHRoYW4gcmVsLTAuMy4gIgorCWlmICh2ZXIgPCAweDRmMDgpCisJCXByX3dhcm4oIlRoZSBGUEdBIGNvZGUsIHZlcnNpb24gMHglMDR4LCBpcyB0b28gb2xkLiAiCiAJCQkiTkFORCBzdXBwb3J0IG1pZ2h0IGJlIGJyb2tlbiBpbiB0aGlzIHZlcnNpb24hIiwgdmVyKTsKIAogCS8qIFBvd2VyIHVwIHRoZSBOQU5EIGNoaXBzICovCkBAIC02MzUsNyArNjQyLDExIEBACiAJZ3Bpb19zZXRfdmFsdWUoQkFMTE9PTjNfR1BJT19SVU5fTkFORCwgMSk7CiAKIAkvKiBEZWFzc2VydCBhbGwgbkNFIGxpbmVzIGFuZCB3cml0ZSBwcm90ZWN0IGxpbmUgKi8KLQlfX3Jhd193cml0ZWwoYmFsbG9vbjNfY3RsLCBCQUxMT09OM19OQU5EX0NPTlRST0xfUkVHKTsKKwlfX3Jhd193cml0ZWwoCisJCUJBTExPT04zX05BTkRfQ09OVFJPTF9GTENFMCB8IEJBTExPT04zX05BTkRfQ09OVFJPTF9GTENFMSB8CisJCUJBTExPT04zX05BTkRfQ09OVFJPTF9GTENFMiB8IEJBTExPT04zX05BTkRfQ09OVFJPTF9GTENFMyB8CisJCUJBTExPT04zX05BTkRfQ09OVFJPTF9GTFdQLAorCQlCQUxMT09OM19OQU5EX0NPTlRST0xfUkVHIHwgQkFMTE9PTjNfRlBHQV9TRVRuQ0xSKTsKIAlyZXR1cm4gMDsKIAogZXJyMjoKQEAgLTY3Nyw3ICs2ODgsNyBAQAogCX0sCiAJLmN0cmwgPSB7CiAJCS5od2NvbnRyb2wJPSAwLAotCQkuZGV2X3JlYWR5CT0gMCwKKwkJLmRldl9yZWFkeQk9IGJhbGxvb24zX25hbmRfZGV2X3JlYWR5LAogCQkuc2VsZWN0X2NoaXAJPSBiYWxsb29uM19uYW5kX3NlbGVjdF9jaGlwLAogCQkuY21kX2N0cmwJPSBiYWxsb29uM19uYW5kX2NtZF9jdGwsCiAJCS5wcm9iZQkJPSBiYWxsb29uM19uYW5kX3Byb2JlLApAQCAtODAyLDcgKzgxMyw3IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBiYWxsb29uM19tYXBfaW8odm9pZCkKIHsKLQlweGFfbWFwX2lvKCk7CisJcHhhMjd4X21hcF9pbygpOwogCWlvdGFibGVfaW5pdChiYWxsb29uM19pb19kZXNjLCBBUlJBWV9TSVpFKGJhbGxvb24zX2lvX2Rlc2MpKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvY2FwYzcxMTcuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2NhcGM3MTE3LmMKaW5kZXggNGJkN2EzYy4uNDI4NDUxMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvY2FwYzcxMTcuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9jYXBjNzExNy5jCkBAIC0xNDksNyArMTQ5LDcgQEAKIE1BQ0hJTkVfU1RBUlQoQ0FQQzcxMTcsCiAJICAgICAgIkVtYmVkaWFuIENBUEMtNzExNyBldmFsdWF0aW9uIGtpdCBiYXNlZCBvbiB0aGUgTVhNLTh4MTAgQ29NIikKIAkuYm9vdF9wYXJhbXMgPSAweGEwMDAwMTAwLAotCS5tYXBfaW8gPSBweGFfbWFwX2lvLAorCS5tYXBfaW8gPSBweGEzeHhfbWFwX2lvLAogCS5pbml0X2lycSA9IHB4YTN4eF9pbml0X2lycSwKIAkudGltZXIgPSAmcHhhX3RpbWVyLAogCS5pbml0X21hY2hpbmUgPSBjYXBjNzExN19pbml0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jbG9jay1weGEyeHguYyBiL2FyY2gvYXJtL21hY2gtcHhhL2Nsb2NrLXB4YTJ4eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjZTA5MDQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9jbG9jay1weGEyeHguYwpAQCAtMCwwICsxLDY0IEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1weGEvY2xvY2stcHhhMnh4LmMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisKKyNpbmNsdWRlIDxtYWNoL3B4YTJ4eC1yZWdzLmg+CisKKyNpbmNsdWRlICJjbG9jay5oIgorCit2b2lkIGNsa19weGEyeHhfY2tlbl9lbmFibGUoc3RydWN0IGNsayAqY2xrKQoreworCUNLRU4gfD0gMSA8PCBjbGstPmNrZW47Cit9CisKK3ZvaWQgY2xrX3B4YTJ4eF9ja2VuX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQoreworCUNLRU4gJj0gfigxIDw8IGNsay0+Y2tlbik7Cit9CisKK2NvbnN0IHN0cnVjdCBjbGtvcHMgY2xrX3B4YTJ4eF9ja2VuX29wcyA9IHsKKwkuZW5hYmxlCQk9IGNsa19weGEyeHhfY2tlbl9lbmFibGUsCisJLmRpc2FibGUJPSBjbGtfcHhhMnh4X2NrZW5fZGlzYWJsZSwKK307CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyB1aW50MzJfdCBzYXZlZF9ja2VuOworCitzdGF0aWMgaW50IHB4YTJ4eF9jbG9ja19zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkLCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc2F2ZWRfY2tlbiA9IENLRU47CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHhhMnh4X2Nsb2NrX3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZCkKK3sKKwlDS0VOID0gc2F2ZWRfY2tlbjsKKwlyZXR1cm4gMDsKK30KKyNlbHNlCisjZGVmaW5lIHB4YTJ4eF9jbG9ja19zdXNwZW5kCU5VTEwKKyNkZWZpbmUgcHhhMnh4X2Nsb2NrX3Jlc3VtZQlOVUxMCisjZW5kaWYKKworc3RydWN0IHN5c2Rldl9jbGFzcyBweGEyeHhfY2xvY2tfc3lzY2xhc3MgPSB7CisJLm5hbWUJCT0gInB4YTJ4eC1jbG9jayIsCisJLnN1c3BlbmQJPSBweGEyeHhfY2xvY2tfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHB4YTJ4eF9jbG9ja19yZXN1bWUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBweGEyeHhfY2xvY2tfaW5pdCh2b2lkKQoreworCWlmIChjcHVfaXNfcHhhMnh4KCkpCisJCXJldHVybiBzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoJnB4YTJ4eF9jbG9ja19zeXNjbGFzcyk7CisJcmV0dXJuIDA7Cit9Citwb3N0Y29yZV9pbml0Y2FsbChweGEyeHhfY2xvY2tfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jbG9jay1weGEzeHguYyBiL2FyY2gvYXJtL21hY2gtcHhhL2Nsb2NrLXB4YTN4eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiMDhhMzQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9jbG9jay1weGEzeHguYwpAQCAtMCwwICsxLDIxOCBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtcHhhL2Nsb2NrLXB4YTN4eC5jCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxtYWNoL3NtZW1jLmg+CisjaW5jbHVkZSA8bWFjaC9weGEzeHgtcmVncy5oPgorCisjaW5jbHVkZSAiY2xvY2suaCIKKworLyogQ3J5c3RhbCBjbG9jazogMTNNSHogKi8KKyNkZWZpbmUgQkFTRV9DTEsJMTMwMDAwMDAKKworLyogUmluZyBPc2NpbGxhdG9yIENsb2NrOiA2ME1IeiAqLworI2RlZmluZSBST19DTEsJCTYwMDAwMDAwCisKKyNkZWZpbmUgQUNDUl9EMENTCSgxIDw8IDI2KQorI2RlZmluZSBBQ0NSX1BDQ0UJKDEgPDwgMTEpCisKKy8qIGNyeXN0YWwgZnJlcXVlbmN5IHRvIEhTSU8gYnVzIGZyZXF1ZW5jeSBtdWx0aXBsaWVyIChIU1MpICovCitzdGF0aWMgdW5zaWduZWQgY2hhciBoc3NfbXVsdFs0XSA9IHsgOCwgMTIsIDE2LCAyNCB9OworCisvKgorICogR2V0IHRoZSBjbG9jayBmcmVxdWVuY3kgYXMgcmVmbGVjdGVkIGJ5IENDU1IgYW5kIHRoZSB0dXJibyBmbGFnLgorICogV2UgYXNzdW1lIHRoZXNlIHZhbHVlcyBoYXZlIGJlZW4gYXBwbGllZCB2aWEgYSBmY3MuCisgKiBJZiBpbmZvIGlzIG5vdCAwIHdlIGFsc28gZGlzcGxheSB0aGUgY3VycmVudCBzZXR0aW5ncy4KKyAqLwordW5zaWduZWQgaW50IHB4YTN4eF9nZXRfY2xrX2ZyZXF1ZW5jeV9raHooaW50IGluZm8pCit7CisJdW5zaWduZWQgbG9uZyBhY3NyLCB4Y2xrY2ZnOworCXVuc2lnbmVkIGludCB0LCB4bCwgeG4sIGhzcywgcm8sIFhMLCBYTiwgQ0xLLCBIU1M7CisKKwkvKiBSZWFkIFhDTEtDRkcgcmVnaXN0ZXIgdHVyYm8gYml0ICovCisJX19hc21fXyBfX3ZvbGF0aWxlX18oIm1yY1x0cDE0LCAwLCAlMCwgYzYsIGMwLCAwIiA6ICI9ciIoeGNsa2NmZykpOworCXQgPSB4Y2xrY2ZnICYgMHgxOworCisJYWNzciA9IEFDU1I7CisKKwl4bCAgPSBhY3NyICYgMHgxZjsKKwl4biAgPSAoYWNzciA+PiA4KSAmIDB4NzsKKwloc3MgPSAoYWNzciA+PiAxNCkgJiAweDM7CisKKwlYTCA9IHhsICogQkFTRV9DTEs7CisJWE4gPSB4biAqIFhMOworCisJcm8gPSBhY3NyICYgQUNDUl9EMENTOworCisJQ0xLID0gKHJvKSA/IFJPX0NMSyA6ICgodCkgPyBYTiA6IFhMKTsKKwlIU1MgPSAocm8pID8gUk9fQ0xLIDogaHNzX211bHRbaHNzXSAqIEJBU0VfQ0xLOworCisJaWYgKGluZm8pIHsKKwkJcHJfaW5mbygiUk8gTW9kZSBjbG9jazogJWQuJTAyZE1IeiAoJXNhY3RpdmUpXG4iLAorCQkJUk9fQ0xLIC8gMTAwMDAwMCwgKFJPX0NMSyAlIDEwMDAwMDApIC8gMTAwMDAsCisJCQkocm8pID8gIiIgOiAiaW4iKTsKKwkJcHJfaW5mbygiUnVuIE1vZGUgY2xvY2s6ICVkLiUwMmRNSHogKColZClcbiIsCisJCQlYTCAvIDEwMDAwMDAsIChYTCAlIDEwMDAwMDApIC8gMTAwMDAsIHhsKTsKKwkJcHJfaW5mbygiVHVyYm8gTW9kZSBjbG9jazogJWQuJTAyZE1IeiAoKiVkLCAlc2FjdGl2ZSlcbiIsCisJCQlYTiAvIDEwMDAwMDAsIChYTiAlIDEwMDAwMDApIC8gMTAwMDAsIHhuLAorCQkJKHQpID8gIiIgOiAiaW4iKTsKKwkJcHJfaW5mbygiSFNJTyBidXMgY2xvY2s6ICVkLiUwMmRNSHpcbiIsCisJCQlIU1MgLyAxMDAwMDAwLCAoSFNTICUgMTAwMDAwMCkgLyAxMDAwMCk7CisJfQorCisJcmV0dXJuIENMSyAvIDEwMDA7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIGN1cnJlbnQgQUM5NyBjbG9jayBmcmVxdWVuY3kuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNsa19weGEzeHhfYWM5N19nZXRyYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIHJhdGUgPSAzMTIwMDAwMDA7CisJdW5zaWduZWQgbG9uZyBhYzk3X2RpdjsKKworCWFjOTdfZGl2ID0gQUM5N19ESVY7CisKKwkvKiBUaGlzIG1heSBsb29zZSBwcmVjaXNpb24gZm9yIHNvbWUgcmF0ZXMgYnV0IHdvbid0IGZvciB0aGUKKwkgKiBzdGFuZGFyZCAyNC41NzZNSHouCisJICovCisJcmF0ZSAvPSAoYWM5N19kaXYgPj4gMTIpICYgMHg3ZmZmOworCXJhdGUgKj0gKGFjOTdfZGl2ICYgMHhmZmYpOworCisJcmV0dXJuIHJhdGU7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIGN1cnJlbnQgSFNJTyBidXMgY2xvY2sgZnJlcXVlbmN5CisgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNsa19weGEzeHhfaHNpb19nZXRyYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIGFjc3I7CisJdW5zaWduZWQgaW50IGhzcywgaHNpb19jbGs7CisKKwlhY3NyID0gQUNTUjsKKworCWhzcyA9IChhY3NyID4+IDE0KSAmIDB4MzsKKwloc2lvX2NsayA9IChhY3NyICYgQUNDUl9EMENTKSA/IFJPX0NMSyA6IGhzc19tdWx0W2hzc10gKiBCQVNFX0NMSzsKKworCXJldHVybiBoc2lvX2NsazsKK30KKworLyogY3J5c3RhbCBmcmVxdWVuY3kgdG8gc3RhdGljIG1lbW9yeSBjb250cm9sbGVyIG11bHRpcGxpZXIgKFNNQ0ZTKSAqLworc3RhdGljIHVuc2lnbmVkIGludCBzbWNmc19tdWx0WzhdID0geyA2LCAwLCA4LCAwLCAwLCAxNiwgfTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGZfY2xrZGl2WzRdID0geyAxLCAyLCA0LCAxIH07CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNsa19weGEzeHhfc21lbWNfZ2V0cmF0ZShzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgbG9uZyBhY3NyID0gQUNTUjsKKwl1bnNpZ25lZCBsb25nIG1lbWNsa2NmZyA9IF9fcmF3X3JlYWRsKE1FTUNMS0NGRyk7CisJdW5zaWduZWQgaW50IHNtY2ZzID0gKGFjc3IgPj4gMjMpICYgMHg3OworCisJcmV0dXJuIEJBU0VfQ0xLICogc21jZnNfbXVsdFsoYWNzciA+PiAyMykgJiAweDddIC8KKwkJCWRmX2Nsa2RpdlsobWVtY2xrY2ZnID4+IDE2KSAmIDB4M107Cit9CisKK3ZvaWQgY2xrX3B4YTN4eF9ja2VuX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgbG9uZyBtYXNrID0gMXVsIDw8IChjbGstPmNrZW4gJiAweDFmKTsKKworCWlmIChjbGstPmNrZW4gPCAzMikKKwkJQ0tFTkEgfD0gbWFzazsKKwllbHNlCisJCUNLRU5CIHw9IG1hc2s7Cit9CisKK3ZvaWQgY2xrX3B4YTN4eF9ja2VuX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgbWFzayA9IDF1bCA8PCAoY2xrLT5ja2VuICYgMHgxZik7CisKKwlpZiAoY2xrLT5ja2VuIDwgMzIpCisJCUNLRU5BICY9IH5tYXNrOworCWVsc2UKKwkJQ0tFTkIgJj0gfm1hc2s7Cit9CisKK2NvbnN0IHN0cnVjdCBjbGtvcHMgY2xrX3B4YTN4eF9ja2VuX29wcyA9IHsKKwkuZW5hYmxlCQk9IGNsa19weGEzeHhfY2tlbl9lbmFibGUsCisJLmRpc2FibGUJPSBjbGtfcHhhM3h4X2NrZW5fZGlzYWJsZSwKK307CisKK2NvbnN0IHN0cnVjdCBjbGtvcHMgY2xrX3B4YTN4eF9oc2lvX29wcyA9IHsKKwkuZW5hYmxlCQk9IGNsa19weGEzeHhfY2tlbl9lbmFibGUsCisJLmRpc2FibGUJPSBjbGtfcHhhM3h4X2NrZW5fZGlzYWJsZSwKKwkuZ2V0cmF0ZQk9IGNsa19weGEzeHhfaHNpb19nZXRyYXRlLAorfTsKKworY29uc3Qgc3RydWN0IGNsa29wcyBjbGtfcHhhM3h4X2FjOTdfb3BzID0geworCS5lbmFibGUJCT0gY2xrX3B4YTN4eF9ja2VuX2VuYWJsZSwKKwkuZGlzYWJsZQk9IGNsa19weGEzeHhfY2tlbl9kaXNhYmxlLAorCS5nZXRyYXRlCT0gY2xrX3B4YTN4eF9hYzk3X2dldHJhdGUsCit9OworCitjb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa19weGEzeHhfc21lbWNfb3BzID0geworCS5lbmFibGUJCT0gY2xrX3B4YTN4eF9ja2VuX2VuYWJsZSwKKwkuZGlzYWJsZQk9IGNsa19weGEzeHhfY2tlbl9kaXNhYmxlLAorCS5nZXRyYXRlCT0gY2xrX3B4YTN4eF9zbWVtY19nZXRyYXRlLAorfTsKKworc3RhdGljIHZvaWQgY2xrX3BvdXRfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlPU0NDIHw9IE9TQ0NfUEVOOworfQorCitzdGF0aWMgdm9pZCBjbGtfcG91dF9kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlPU0NDICY9IH5PU0NDX1BFTjsKK30KKworY29uc3Qgc3RydWN0IGNsa29wcyBjbGtfcHhhM3h4X3BvdXRfb3BzID0geworCS5lbmFibGUJCT0gY2xrX3BvdXRfZW5hYmxlLAorCS5kaXNhYmxlCT0gY2xrX3BvdXRfZGlzYWJsZSwKK307CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyB1aW50MzJfdCBja2VuWzJdOworc3RhdGljIHVpbnQzMl90IGFjY3I7CisKK3N0YXRpYyBpbnQgcHhhM3h4X2Nsb2NrX3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKmQsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlja2VuWzBdID0gQ0tFTkE7CisJY2tlblsxXSA9IENLRU5COworCWFjY3IgPSBBQ0NSOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHB4YTN4eF9jbG9ja19yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKmQpCit7CisJQUNDUiA9IGFjY3I7CisJQ0tFTkEgPSBja2VuWzBdOworCUNLRU5CID0gY2tlblsxXTsKKwlyZXR1cm4gMDsKK30KKyNlbHNlCisjZGVmaW5lIHB4YTN4eF9jbG9ja19zdXNwZW5kCU5VTEwKKyNkZWZpbmUgcHhhM3h4X2Nsb2NrX3Jlc3VtZQlOVUxMCisjZW5kaWYKKworc3RydWN0IHN5c2Rldl9jbGFzcyBweGEzeHhfY2xvY2tfc3lzY2xhc3MgPSB7CisJLm5hbWUJCT0gInB4YTN4eC1jbG9jayIsCisJLnN1c3BlbmQJPSBweGEzeHhfY2xvY2tfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHB4YTN4eF9jbG9ja19yZXN1bWUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBweGEzeHhfY2xvY2tfaW5pdCh2b2lkKQoreworCWlmIChjcHVfaXNfcHhhM3h4KCkgfHwgY3B1X2lzX3B4YTk1eCgpKQorCQlyZXR1cm4gc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZweGEzeHhfY2xvY2tfc3lzY2xhc3MpOworCXJldHVybiAwOworfQorcG9zdGNvcmVfaW5pdGNhbGwocHhhM3h4X2Nsb2NrX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtcHhhL2Nsb2NrLmMKaW5kZXggYWJiYTAwOC4uZDUxNTIyMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9jbG9jay5jCkBAIC0zLDIxICszLDExIEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9lcnIuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvY2xrZGV2Lmg+CiAKLSNpbmNsdWRlIDxhc20vY2xrZGV2Lmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEyeHgtcmVncy5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLQotI2luY2x1ZGUgImRldmljZXMuaCIKLSNpbmNsdWRlICJnZW5lcmljLmgiCiAjaW5jbHVkZSAiY2xvY2suaCIKIAogc3RhdGljIERFRklORV9TUElOTE9DSyhjbG9ja3NfbG9jayk7CkBAIC02MywxOCArNTMsMTkgQEAKIH0KIEVYUE9SVF9TWU1CT0woY2xrX2dldF9yYXRlKTsKIAotCi12b2lkIGNsa19ja2VuX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCit2b2lkIGNsa19kdW1teV9lbmFibGUoc3RydWN0IGNsayAqY2xrKQogewotCUNLRU4gfD0gMSA8PCBjbGstPmNrZW47CiB9CiAKLXZvaWQgY2xrX2NrZW5fZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCit2b2lkIGNsa19kdW1teV9kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlDS0VOICY9IH4oMSA8PCBjbGstPmNrZW4pOwogfQogCi1jb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa19ja2VuX29wcyA9IHsKLQkuZW5hYmxlCQk9IGNsa19ja2VuX2VuYWJsZSwKLQkuZGlzYWJsZQk9IGNsa19ja2VuX2Rpc2FibGUsCitjb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa19kdW1teV9vcHMgPSB7CisJLmVuYWJsZQkJPSBjbGtfZHVtbXlfZW5hYmxlLAorCS5kaXNhYmxlCT0gY2xrX2R1bW15X2Rpc2FibGUsCit9OworCitzdHJ1Y3QgY2xrIGNsa19kdW1teSA9IHsKKwkub3BzCQk9ICZjbGtfZHVtbXlfb3BzLAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2Nsb2NrLmggYi9hcmNoL2FybS9tYWNoLXB4YS9jbG9jay5oCmluZGV4IGQ4NDg4NzQuLmY5ZjM0OWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2Nsb2NrLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY2xvY2suaApAQCAtMSw0ICsxLDUgQEAKLSNpbmNsdWRlIDxhc20vY2xrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvY2xrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAKIHN0cnVjdCBjbGtvcHMgewogCXZvaWQJCQkoKmVuYWJsZSkoc3RydWN0IGNsayAqKTsKQEAgLTE0LDYgKzE1LDEyIEBACiAJdW5zaWduZWQgaW50CQllbmFibGVkOwogfTsKIAordm9pZCBjbGtfZHVtbXlfZW5hYmxlKHN0cnVjdCBjbGsgKik7Cit2b2lkIGNsa19kdW1teV9kaXNhYmxlKHN0cnVjdCBjbGsgKik7CisKK2V4dGVybiBjb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa19kdW1teV9vcHM7CitleHRlcm4gc3RydWN0IGNsayBjbGtfZHVtbXk7CisKICNkZWZpbmUgSU5JVF9DTEtSRUcoX2NsayxfZGV2bmFtZSxfY29ubmFtZSkJCVwKIAl7CQkJCQkJXAogCQkuY2xrCQk9IF9jbGssCQkJXApAQCAtMjEsMTQgKzI4LDYgQEAKIAkJLmNvbl9pZAkJPSBfY29ubmFtZSwJCVwKIAl9CiAKLSNkZWZpbmUgREVGSU5FX0NLRU4oX25hbWUsIF9ja2VuLCBfcmF0ZSwgX2RlbGF5KQlcCi1zdHJ1Y3QgY2xrIGNsa18jI19uYW1lID0gewkJCQlcCi0JCS5vcHMJPSAmY2xrX2NrZW5fb3BzLAkJXAotCQkucmF0ZQk9IF9yYXRlLAkJCVwKLQkJLmNrZW4JPSBDS0VOXyMjX2NrZW4sCQkJXAotCQkuZGVsYXkJPSBfZGVsYXksCQkJXAotCX0KLQogI2RlZmluZSBERUZJTkVfQ0soX25hbWUsIF9ja2VuLCBfb3BzKQkJCVwKIHN0cnVjdCBjbGsgY2xrXyMjX25hbWUgPSB7CQkJCVwKIAkJLm9wcwk9IF9vcHMsCQkJCVwKQEAgLTQyLDEyICs0MSwyMiBAQAogCQkuZGVsYXkJPSBfZGVsYXksCQkJXAogCX0KIAotZXh0ZXJuIGNvbnN0IHN0cnVjdCBjbGtvcHMgY2xrX2NrZW5fb3BzOworI2RlZmluZSBERUZJTkVfUFhBMl9DS0VOKF9uYW1lLCBfY2tlbiwgX3JhdGUsIF9kZWxheSkJXAorc3RydWN0IGNsayBjbGtfIyNfbmFtZSA9IHsJCQkJXAorCQkub3BzCT0gJmNsa19weGEyeHhfY2tlbl9vcHMsCQlcCisJCS5yYXRlCT0gX3JhdGUsCQkJXAorCQkuY2tlbgk9IENLRU5fIyNfY2tlbiwJCQlcCisJCS5kZWxheQk9IF9kZWxheSwJCQlcCisJfQogCi12b2lkIGNsa19ja2VuX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspOwotdm9pZCBjbGtfY2tlbl9kaXNhYmxlKHN0cnVjdCBjbGsgKmNsayk7CitleHRlcm4gY29uc3Qgc3RydWN0IGNsa29wcyBjbGtfcHhhMnh4X2NrZW5fb3BzOwogCi0jaWZkZWYgQ09ORklHX1BYQTN4eAordm9pZCBjbGtfcHhhMnh4X2NrZW5fZW5hYmxlKHN0cnVjdCBjbGsgKmNsayk7Cit2b2lkIGNsa19weGEyeHhfY2tlbl9kaXNhYmxlKHN0cnVjdCBjbGsgKmNsayk7CisKK2V4dGVybiBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIHB4YTJ4eF9jbG9ja19zeXNjbGFzczsKKworI2lmIGRlZmluZWQoQ09ORklHX1BYQTN4eCkgfHwgZGVmaW5lZChDT05GSUdfUFhBOTV4KQogI2RlZmluZSBERUZJTkVfUFhBM19DS0VOKF9uYW1lLCBfY2tlbiwgX3JhdGUsIF9kZWxheSkJXAogc3RydWN0IGNsayBjbGtfIyNfbmFtZSA9IHsJCQkJXAogCQkub3BzCT0gJmNsa19weGEzeHhfY2tlbl9vcHMsCQlcCkBAIC01NiwxNCArNjUsMTQgQEAKIAkJLmRlbGF5CT0gX2RlbGF5LAkJCVwKIAl9CiAKLSNkZWZpbmUgREVGSU5FX1BYQTNfQ0soX25hbWUsIF9ja2VuLCBfb3BzKQkJXAotc3RydWN0IGNsayBjbGtfIyNfbmFtZSA9IHsJCQkJXAotCQkub3BzCT0gX29wcywJCQkJXAotCQkuY2tlbgk9IENLRU5fIyNfY2tlbiwJCQlcCi0JfQotCiBleHRlcm4gY29uc3Qgc3RydWN0IGNsa29wcyBjbGtfcHhhM3h4X2NrZW5fb3BzOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBjbGtvcHMgY2xrX3B4YTN4eF9oc2lvX29wczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa19weGEzeHhfYWM5N19vcHM7CitleHRlcm4gY29uc3Qgc3RydWN0IGNsa29wcyBjbGtfcHhhM3h4X3BvdXRfb3BzOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBjbGtvcHMgY2xrX3B4YTN4eF9zbWVtY19vcHM7CisKIGV4dGVybiB2b2lkIGNsa19weGEzeHhfY2tlbl9lbmFibGUoc3RydWN0IGNsayAqKTsKIGV4dGVybiB2b2lkIGNsa19weGEzeHhfY2tlbl9kaXNhYmxlKHN0cnVjdCBjbGsgKik7Ci0jZW5kaWYKIAorZXh0ZXJuIHN0cnVjdCBzeXNkZXZfY2xhc3MgcHhhM3h4X2Nsb2NrX3N5c2NsYXNzOworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jbS14MjU1LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jbS14MjU1LmMKaW5kZXggZjFhNzcwMy4uOTNmNTlmOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvY20teDI1NS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NtLXgyNTUuYwpAQCAtMTcsMTMgKzE3LDEzIEBACiAjaW5jbHVkZSA8bGludXgvbXRkL25hbmQtZ3Bpby5oPgogCiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9weGEyeHhfc3BpLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KIAogI2luY2x1ZGUgPG1hY2gvcHhhMjV4Lmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEyeHhfc3BpLmg+CiAKICNpbmNsdWRlICJnZW5lcmljLmgiCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NtLXgyNzAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2NtLXgyNzAuYwppbmRleCBhOTkyNmJiLi5iODhkNjAxYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvY20teDI3MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NtLXgyNzAuYwpAQCAtMTksMTIgKzE5LDEyIEBACiAjaW5jbHVkZSA8dmlkZW8vbWJ4ZmIuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvcHhhMnh4X3NwaS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9saWJlcnRhc19zcGkuaD4KIAogI2luY2x1ZGUgPG1hY2gvcHhhMjd4Lmg+CiAjaW5jbHVkZSA8bWFjaC9vaGNpLmg+CiAjaW5jbHVkZSA8bWFjaC9tbWMuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YTJ4eF9zcGkuaD4KIAogI2luY2x1ZGUgImdlbmVyaWMuaCIKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvY20teDJ4eC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY20teDJ4eC5jCmluZGV4IGQzNGI5OWYuLmI3MzRkODQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NtLXgyeHguYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9jbS14Mnh4LmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxtYWNoL3B4YTJ4eC1yZWdzLmg+CiAjaW5jbHVkZSA8bWFjaC9hdWRpby5oPgogI2luY2x1ZGUgPG1hY2gvcHhhZmIuaD4KKyNpbmNsdWRlIDxtYWNoL3NtZW1jLmg+CiAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvaXQ4MTUyLmg+CiAKQEAgLTM5Miw5ICszOTMsOSBAQAogCWNteDJ4eF9wY2lfc3VzcGVuZCgpOwogCiAJLyogc2F2ZSBNU0MgcmVnaXN0ZXJzICovCi0Jc2xlZXBfc2F2ZV9tc2NbMF0gPSBNU0MwOwotCXNsZWVwX3NhdmVfbXNjWzFdID0gTVNDMTsKLQlzbGVlcF9zYXZlX21zY1syXSA9IE1TQzI7CisJc2xlZXBfc2F2ZV9tc2NbMF0gPSBfX3Jhd19yZWFkbChNU0MwKTsKKwlzbGVlcF9zYXZlX21zY1sxXSA9IF9fcmF3X3JlYWRsKE1TQzEpOworCXNsZWVwX3NhdmVfbXNjWzJdID0gX19yYXdfcmVhZGwoTVNDMik7CiAKIAkvKiBzZXR1cCBwb3dlciBzYXZpbmcgbW9kZSByZWdpc3RlcnMgKi8KIAlQQ0ZSID0gMHgwOwpAQCAtNDE2LDkgKzQxNyw5IEBACiAJY214Mnh4X3BjaV9yZXN1bWUoKTsKIAogCS8qIHJlc3RvcmUgTVNDIHJlZ2lzdGVycyAqLwotCU1TQzAgPSBzbGVlcF9zYXZlX21zY1swXTsKLQlNU0MxID0gc2xlZXBfc2F2ZV9tc2NbMV07Ci0JTVNDMiA9IHNsZWVwX3NhdmVfbXNjWzJdOworCV9fcmF3X3dyaXRlbChzbGVlcF9zYXZlX21zY1swXSwgTVNDMCk7CisJX19yYXdfd3JpdGVsKHNsZWVwX3NhdmVfbXNjWzFdLCBNU0MxKTsKKwlfX3Jhd193cml0ZWwoc2xlZXBfc2F2ZV9tc2NbMl0sIE1TQzIpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00OTgsNyArNDk5LDEyIEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBjbXgyeHhfbWFwX2lvKHZvaWQpCiB7Ci0JcHhhX21hcF9pbygpOworCWlmIChjcHVfaXNfcHhhMjV4KCkpCisJCXB4YTI1eF9tYXBfaW8oKTsKKworCWlmIChjcHVfaXNfcHhhMjd4KCkpCisJCXB4YTI3eF9tYXBfaW8oKTsKKwogCWlvdGFibGVfaW5pdChjbXgyeHhfaW9fZGVzYywgQVJSQVlfU0laRShjbXgyeHhfaW9fZGVzYykpOwogCiAJaXQ4MTUyX2Jhc2VfYWRkcmVzcyA9IENNWDJYWF9JVDgxNTJfVklSVDsKQEAgLTUwNiw3ICs1MTIsMTEgQEAKICNlbHNlCiBzdGF0aWMgdm9pZCBfX2luaXQgY214Mnh4X21hcF9pbyh2b2lkKQogewotCXB4YV9tYXBfaW8oKTsKKwlpZiAoY3B1X2lzX3B4YTI1eCgpKQorCQlweGEyNXhfbWFwX2lvKCk7CisKKwlpZiAoY3B1X2lzX3B4YTI3eCgpKQorCQlweGEyN3hfbWFwX2lvKCk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvY20teDMwMC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY20teDMwMC5jCmluZGV4IDkyMmIxMDcuLjc5ODQyNjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NtLXgzMDAuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9jbS14MzAwLmMKQEAgLTg1Nyw3ICs4NTcsNyBAQAogCiBNQUNISU5FX1NUQVJUKENNX1gzMDAsICJDTS1YMzAwIG1vZHVsZSIpCiAJLmJvb3RfcGFyYW1zCT0gMHhhMDAwMDEwMCwKLQkubWFwX2lvCQk9IHB4YV9tYXBfaW8sCisJLm1hcF9pbwkJPSBweGEzeHhfbWFwX2lvLAogCS5pbml0X2lycQk9IHB4YTN4eF9pbml0X2lycSwKIAkudGltZXIJCT0gJnB4YV90aW1lciwKIAkuaW5pdF9tYWNoaW5lCT0gY21feDMwMF9pbml0LApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvY29saWJyaS1ldmFsYm9hcmQuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktZXZhbGJvYXJkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIyYzgwMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktZXZhbGJvYXJkLmMKQEAgLTAsMCArMSwxMjEgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbWFjaC1weGEvY29saWJyaS1ldmFsYm9hcmQuYworICoKKyAqICBTdXBwb3J0IGZvciBUb3JhZGV4IENvbGlicmkgRXZhbHVhdGlvbiBDYXJyaWVyIEJvYXJkCisgKiAgRGFuaWVsIE1hY2sgPGRhbmllbEBjYWlhcS5kZT4KKyAqICBNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorCisjaW5jbHVkZSA8bWFjaC9weGEyN3guaD4KKyNpbmNsdWRlIDxtYWNoL2NvbGlicmkuaD4KKyNpbmNsdWRlIDxtYWNoL21tYy5oPgorI2luY2x1ZGUgPG1hY2gvb2hjaS5oPgorI2luY2x1ZGUgPG1hY2gvcHhhMjd4LXVkYy5oPgorCisjaW5jbHVkZSA8cGxhdC9pMmMuaD4KKworI2luY2x1ZGUgImdlbmVyaWMuaCIKKyNpbmNsdWRlICJkZXZpY2VzLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFNEL01NQyBjYXJkIGNvbnRyb2xsZXIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWYgZGVmaW5lZChDT05GSUdfTU1DX1BYQSkgfHwgZGVmaW5lZChDT05GSUdfTU1DX1BYQV9NT0RVTEUpCitzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIGNvbGlicmlfbWNpX3BsYXRmb3JtX2RhdGEgPSB7CisJLm9jcl9tYXNrCQk9IE1NQ19WRERfMzJfMzMgfCBNTUNfVkREXzMzXzM0LAorCS5ncGlvX3Bvd2VyCQk9IC0xLAorCS5ncGlvX2NhcmRfcm8JCT0gLTEsCisJLmRldGVjdF9kZWxheV9tcwk9IDIwMCwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBjb2xpYnJpX21tY19pbml0KHZvaWQpCit7CisJaWYgKG1hY2hpbmVfaXNfY29saWJyaSgpKQkvKiBQWEEyNzAgQ29saWJyaSAqLworCQljb2xpYnJpX21jaV9wbGF0Zm9ybV9kYXRhLmdwaW9fY2FyZF9kZXRlY3QgPQorCQkJR1BJTzBfQ09MSUJSSV9QWEEyNzBfU0RfREVURUNUOworCWlmIChtYWNoaW5lX2lzX2NvbGlicmkzMDAoKSkJLyogUFhBMzAwIENvbGlicmkgKi8KKwkJY29saWJyaV9tY2lfcGxhdGZvcm1fZGF0YS5ncGlvX2NhcmRfZGV0ZWN0ID0KKwkJCUdQSU8zOV9DT0xJQlJJX1BYQTMwMF9TRF9ERVRFQ1Q7CisJZWxzZQkJCQkvKiBQWEEzMjAgQ29saWJyaSAqLworCQljb2xpYnJpX21jaV9wbGF0Zm9ybV9kYXRhLmdwaW9fY2FyZF9kZXRlY3QgPQorCQkJR1BJTzI4X0NPTElCUklfUFhBMzIwX1NEX0RFVEVDVDsKKworCXB4YV9zZXRfbWNpX2luZm8oJmNvbGlicmlfbWNpX3BsYXRmb3JtX2RhdGEpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb2xpYnJpX21tY19pbml0KHZvaWQpIHt9CisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVVNCIEhvc3QKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWYgZGVmaW5lZChDT05GSUdfVVNCX09IQ0lfSENEKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfT0hDSV9IQ0RfTU9EVUxFKQorc3RhdGljIGludCBjb2xpYnJpX29oY2lfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJVVAyT0NSID0gVVAyT0NSX0hYUyB8IFVQMk9DUl9IWE9FIHwgVVAyT0NSX0RQUERFIHwgVVAyT0NSX0RNUERFOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHB4YW9oY2lfcGxhdGZvcm1fZGF0YSBjb2xpYnJpX29oY2lfaW5mbyA9IHsKKwkucG9ydF9tb2RlCT0gUE1NX1BFUlBPUlRfTU9ERSwKKwkuZmxhZ3MJCT0gRU5BQkxFX1BPUlQxIHwKKwkJCSAgUE9XRVJfQ09OVFJPTF9MT1cgfCBQT1dFUl9TRU5TRV9MT1csCisJLmluaXQJCT0gY29saWJyaV9vaGNpX2luaXQsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgY29saWJyaV91aGNfaW5pdCh2b2lkKQoreworCS8qIENvbGlicmkgUFhBMjcwIGhhcyB0d28gdXNiIHBvcnRzLCBUQkEgZm9yIDMyMCAqLworCWlmIChtYWNoaW5lX2lzX2NvbGlicmkoKSkKKwkJY29saWJyaV9vaGNpX2luZm8uZmxhZ3MJfD0gRU5BQkxFX1BPUlQyOworCisJcHhhX3NldF9vaGNpX2luZm8oJmNvbGlicmlfb2hjaV9pbmZvKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgY29saWJyaV91aGNfaW5pdCh2b2lkKSB7fQorI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEkyQyBSVEMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWYgZGVmaW5lZChDT05GSUdfUlRDX0RSVl9EUzEzMDcpIHx8IGRlZmluZWQoQ09ORklHX1JUQ19EUlZfRFMxMzA3X01PRFVMRSkKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBjb2xpYnJpX2kyY19kZXZzW10gPSB7CisJeworCQlJMkNfQk9BUkRfSU5GTygibTQxdDAwIiwgMHg2OCksCisJfSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBjb2xpYnJpX3J0Y19pbml0KHZvaWQpCit7CisJcHhhX3NldF9pMmNfaW5mbyhOVUxMKTsKKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBBUlJBWV9BTkRfU0laRShjb2xpYnJpX2kyY19kZXZzKSk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGNvbGlicmlfcnRjX2luaXQodm9pZCkge30KKyNlbmRpZgorCit2b2lkIF9faW5pdCBjb2xpYnJpX2V2YWxib2FyZF9pbml0KHZvaWQpCit7CisJcHhhX3NldF9mZnVhcnRfaW5mbyhOVUxMKTsKKwlweGFfc2V0X2J0dWFydF9pbmZvKE5VTEwpOworCXB4YV9zZXRfc3R1YXJ0X2luZm8oTlVMTCk7CisKKwljb2xpYnJpX21tY19pbml0KCk7CisJY29saWJyaV91aGNfaW5pdCgpOworCWNvbGlicmlfcnRjX2luaXQoKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhMjcwLWV2YWxib2FyZC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY29saWJyaS1weGEyNzAtZXZhbGJvYXJkLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmM2I2MzIuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvY29saWJyaS1weGEyNzAtZXZhbGJvYXJkLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTEgKzAsMCBAQAotLyoKLSAqICBsaW51eC9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLXB4YTI3MC1ldmFsYm9hcmQuYwotICoKLSAqICBTdXBwb3J0IGZvciBUb3JhZGV4IFBYQTI3MCBiYXNlZCBDb2xpYnJpIEV2YWx1YXRpb24gQ2FycmllciBCb2FyZAotICogIERhbmllbCBNYWNrIDxkYW5pZWxAY2FpYXEuZGU+Ci0gKiAgTWFyZWsgVmFzdXQgPG1hcmVrLnZhc3V0QGdtYWlsLmNvbT4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLQotI2luY2x1ZGUgPG1hY2gvcHhhMjd4Lmg+Ci0jaW5jbHVkZSA8bWFjaC9jb2xpYnJpLmg+Ci0jaW5jbHVkZSA8bWFjaC9tbWMuaD4KLSNpbmNsdWRlIDxtYWNoL29oY2kuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YTI3eC11ZGMuaD4KLQotI2luY2x1ZGUgImdlbmVyaWMuaCIKLSNpbmNsdWRlICJkZXZpY2VzLmgiCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFBpbiBjb25maWd1cmF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIG1mcF9jZmdfdCBjb2xpYnJpX3B4YTI3MF9ldmFsYm9hcmRfcGluX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7Ci0JLyogTU1DICovCi0JR1BJTzMyX01NQ19DTEssCi0JR1BJTzkyX01NQ19EQVRfMCwKLQlHUElPMTA5X01NQ19EQVRfMSwKLQlHUElPMTEwX01NQ19EQVRfMiwKLQlHUElPMTExX01NQ19EQVRfMywKLQlHUElPMTEyX01NQ19DTUQsCi0JR1BJTzBfR1BJTywJLyogU0QgZGV0ZWN0ICovCi0KLQkvKiBGRlVBUlQgKi8KLQlHUElPMzlfRkZVQVJUX1RYRCwKLQlHUElPMzRfRkZVQVJUX1JYRCwKLQotCS8qIFVIQyAqLwotCUdQSU84OF9VU0JIMV9QV1IsCi0JR1BJTzg5X1VTQkgxX1BFTiwKLQlHUElPMTE5X1VTQkgyX1BXUiwKLQlHUElPMTIwX1VTQkgyX1BFTiwKLX07Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFNEL01NQyBjYXJkIGNvbnRyb2xsZXIKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaWYgZGVmaW5lZChDT05GSUdfTU1DX1BYQSkgfHwgZGVmaW5lZChDT05GSUdfTU1DX1BYQV9NT0RVTEUpCi1zdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIGNvbGlicmlfcHhhMjcwX21jaV9wbGF0Zm9ybV9kYXRhID0gewotCS5vY3JfbWFzawkJPSBNTUNfVkREXzMyXzMzIHwgTU1DX1ZERF8zM18zNCwKLQkuZ3Bpb19wb3dlcgkJPSAtMSwKLQkuZ3Bpb19jYXJkX2RldGVjdAk9IEdQSU8wX0NPTElCUklfUFhBMjcwX1NEX0RFVEVDVCwKLQkuZ3Bpb19jYXJkX3JvCQk9IC0xLAotCS5kZXRlY3RfZGVsYXlfbXMJPSAyMDAsCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgY29saWJyaV9weGEyNzBfbW1jX2luaXQodm9pZCkKLXsKLQlweGFfc2V0X21jaV9pbmZvKCZjb2xpYnJpX3B4YTI3MF9tY2lfcGxhdGZvcm1fZGF0YSk7Ci19Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIGNvbGlicmlfcHhhMjcwX21tY19pbml0KHZvaWQpIHt9Ci0jZW5kaWYKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogVVNCIEhvc3QKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaWYgZGVmaW5lZChDT05GSUdfVVNCX09IQ0lfSENEKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfT0hDSV9IQ0RfTU9EVUxFKQotc3RhdGljIGludCBjb2xpYnJpX3B4YTI3MF9vaGNpX2luaXQoc3RydWN0IGRldmljZSAqZGV2KQotewotCVVQMk9DUiA9IFVQMk9DUl9IWFMgfCBVUDJPQ1JfSFhPRSB8IFVQMk9DUl9EUFBERSB8IFVQMk9DUl9ETVBERTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBweGFvaGNpX3BsYXRmb3JtX2RhdGEgY29saWJyaV9weGEyNzBfb2hjaV9pbmZvID0gewotCS5wb3J0X21vZGUJPSBQTU1fUEVSUE9SVF9NT0RFLAotCS5mbGFncwkJPSBFTkFCTEVfUE9SVDEgfCBFTkFCTEVfUE9SVDIgfAotCQkJICBQT1dFUl9DT05UUk9MX0xPVyB8IFBPV0VSX1NFTlNFX0xPVywKLQkuaW5pdAkJPSBjb2xpYnJpX3B4YTI3MF9vaGNpX2luaXQsCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgY29saWJyaV9weGEyNzBfdWhjX2luaXQodm9pZCkKLXsKLQlweGFfc2V0X29oY2lfaW5mbygmY29saWJyaV9weGEyNzBfb2hjaV9pbmZvKTsKLX0KLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgY29saWJyaV9weGEyNzBfdWhjX2luaXQodm9pZCkge30KLSNlbmRpZgotCi12b2lkIF9faW5pdCBjb2xpYnJpX3B4YTI3MF9ldmFsYm9hcmRfaW5pdCh2b2lkKQotewotCXB4YTJ4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKGNvbGlicmlfcHhhMjcwX2V2YWxib2FyZF9waW5fY29uZmlnKSk7Ci0JcHhhX3NldF9mZnVhcnRfaW5mbyhOVUxMKTsKLQlweGFfc2V0X2J0dWFydF9pbmZvKE5VTEwpOwotCXB4YV9zZXRfc3R1YXJ0X2luZm8oTlVMTCk7Ci0KLQljb2xpYnJpX3B4YTI3MF9tbWNfaW5pdCgpOwotCWNvbGlicmlfcHhhMjcwX3VoY19pbml0KCk7Ci19Ci0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhMjcwLWluY29tZS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY29saWJyaS1weGEyNzAtaW5jb21lLmMKaW5kZXggMzdmMGYzZS4uMDdiNjJhMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvY29saWJyaS1weGEyNzAtaW5jb21lLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY29saWJyaS1weGEyNzAtaW5jb21lLmMKQEAgLTQ2LDUyICs0Niw2IEBACiAjZGVmaW5lIEdQSU8xMTNfSU5DT01FX1RTX0lSUSAgICgxMTMpCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFBpbiBjb25maWd1cmF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIG1mcF9jZmdfdCBpbmNvbWVfcGluX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7Ci0JLyogTU1DICovCi0JR1BJTzMyX01NQ19DTEssCi0JR1BJTzkyX01NQ19EQVRfMCwKLQlHUElPMTA5X01NQ19EQVRfMSwKLQlHUElPMTEwX01NQ19EQVRfMiwKLQlHUElPMTExX01NQ19EQVRfMywKLQlHUElPMTEyX01NQ19DTUQsCi0JR1BJTzBfR1BJTywJLyogU0QgZGV0ZWN0ICovCi0JR1BJTzFfR1BJTywJLyogU0QgcmVhZC1vbmx5ICovCi0KLQkvKiBGRlVBUlQgKi8KLQlHUElPMzlfRkZVQVJUX1RYRCwKLQlHUElPMzRfRkZVQVJUX1JYRCwKLQotCS8qIEJGVUFSVCAqLwotCUdQSU80Ml9CVFVBUlRfUlhELAotCUdQSU80M19CVFVBUlRfVFhELAotCUdQSU80NV9CVFVBUlRfUlRTLAotCi0JLyogU1RVQVJUICovCi0JR1BJTzQ2X1NUVUFSVF9SWEQsCi0JR1BJTzQ3X1NUVUFSVF9UWEQsCi0KLQkvKiBVSEMgKi8KLQlHUElPODhfVVNCSDFfUFdSLAotCUdQSU84OV9VU0JIMV9QRU4sCi0KLQkvKiBMQ0QgKi8KLQlHUElPeHhfTENEX1RGVF8xNkJQUCwKLQotCS8qIFBXTSAqLwotCUdQSU8xNl9QV00wX09VVCwKLQotCS8qIEkyQyAqLwotCUdQSU8xMTdfSTJDX1NDTCwKLQlHUElPMTE4X0kyQ19TREEsCi0KLQkvKiBMRUQgKi8KLQlHUElPNTRfR1BJTywJLyogTEVEIEEgKi8KLQlHUElPNTVfR1BJTywJLyogTEVEIEIgKi8KLX07Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFNEL01NQyBjYXJkIGNvbnRyb2xsZXIKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWYgZGVmaW5lZChDT05GSUdfTU1DX1BYQSkgfHwgZGVmaW5lZChDT05GSUdfTU1DX1BYQV9NT0RVTEUpCkBAIC0yNTcsNyArMjExLDYgQEAKIAogdm9pZCBfX2luaXQgY29saWJyaV9weGEyNzBfaW5jb21lX2JvYXJkaW5pdCh2b2lkKQogewotCXB4YTJ4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKGluY29tZV9waW5fY29uZmlnKSk7CiAJcHhhX3NldF9mZnVhcnRfaW5mbyhOVUxMKTsKIAlweGFfc2V0X2J0dWFydF9pbmZvKE5VTEwpOwogCXB4YV9zZXRfc3R1YXJ0X2luZm8oTlVMTCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLXB4YTI3MC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY29saWJyaS1weGEyNzAuYwppbmRleCBiYzA0NTEwLi42ZmM1ZDMyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLXB4YTI3MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhMjcwLmMKQEAgLTMzLDYgKzMzLDEwMyBAQAogI2luY2x1ZGUgImdlbmVyaWMuaCIKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRXZhbHVhdGlvbiBib2FyZCBNRlAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZkZWYJIENPTkZJR19NQUNIX0NPTElCUklfRVZBTEJPQVJECitzdGF0aWMgbWZwX2NmZ190IGNvbGlicmlfcHhhMjcwX2V2YWxib2FyZF9waW5fY29uZmlnW10gX19pbml0ZGF0YSA9IHsKKwkvKiBNTUMgKi8KKwlHUElPMzJfTU1DX0NMSywKKwlHUElPOTJfTU1DX0RBVF8wLAorCUdQSU8xMDlfTU1DX0RBVF8xLAorCUdQSU8xMTBfTU1DX0RBVF8yLAorCUdQSU8xMTFfTU1DX0RBVF8zLAorCUdQSU8xMTJfTU1DX0NNRCwKKwlHUElPMF9HUElPLAkvKiBTRCBkZXRlY3QgKi8KKworCS8qIEZGVUFSVCAqLworCUdQSU8zOV9GRlVBUlRfVFhELAorCUdQSU8zNF9GRlVBUlRfUlhELAorCisJLyogVUhDICovCisJR1BJTzg4X1VTQkgxX1BXUiwKKwlHUElPODlfVVNCSDFfUEVOLAorCUdQSU8xMTlfVVNCSDJfUFdSLAorCUdQSU8xMjBfVVNCSDJfUEVOLAorCisJLyogUENNQ0lBICovCisJR1BJTzg1X25QQ0VfMSwKKwlHUElPNTRfblBDRV8yLAorCUdQSU81NV9uUFJFRywKKwlHUElPNTBfblBJT1IsCisJR1BJTzUxX25QSU9XLAorCUdQSU80OV9uUFdFLAorCUdQSU80OF9uUE9FLAorCUdQSU81N19uSU9JUzE2LAorCUdQSU81Nl9uUFdBSVQsCisJR1BJTzEwNF9QU0tUU0VMLAorCUdQSU81M19HUElPLAkvKiBSRVNFVCAqLworCUdQSU84M19HUElPLAkvKiBCVkQxICovCisJR1BJTzgyX0dQSU8sCS8qIEJWRDIgKi8KKwlHUElPMV9HUElPLAkvKiBSRUFEWSAqLworCUdQSU84NF9HUElPLAkvKiBERVRFQ1QgKi8KKwlHUElPMTA3X0dQSU8sCS8qIFBQRU4gKi8KKworCS8qIEkyQyAqLworCUdQSU8xMTdfSTJDX1NDTCwKKwlHUElPMTE4X0kyQ19TREEsCit9OworI2Vsc2UKK3N0YXRpYyBtZnBfY2ZnX3QgY29saWJyaV9weGEyNzBfZXZhbGJvYXJkX3Bpbl9jb25maWdbXSBfX2luaXRkYXRhID0ge307CisjZW5kaWYKKworI2lmZGVmCUNPTkZJR19NQUNIX0NPTElCUklfUFhBMjcwX0lOQ09NRQorc3RhdGljIG1mcF9jZmdfdCBpbmNvbWVfcGluX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7CisJLyogTU1DICovCisJR1BJTzMyX01NQ19DTEssCisJR1BJTzkyX01NQ19EQVRfMCwKKwlHUElPMTA5X01NQ19EQVRfMSwKKwlHUElPMTEwX01NQ19EQVRfMiwKKwlHUElPMTExX01NQ19EQVRfMywKKwlHUElPMTEyX01NQ19DTUQsCisJR1BJTzBfR1BJTywJLyogU0QgZGV0ZWN0ICovCisJR1BJTzFfR1BJTywJLyogU0QgcmVhZC1vbmx5ICovCisKKwkvKiBGRlVBUlQgKi8KKwlHUElPMzlfRkZVQVJUX1RYRCwKKwlHUElPMzRfRkZVQVJUX1JYRCwKKworCS8qIEJGVUFSVCAqLworCUdQSU80Ml9CVFVBUlRfUlhELAorCUdQSU80M19CVFVBUlRfVFhELAorCUdQSU80NV9CVFVBUlRfUlRTLAorCisJLyogU1RVQVJUICovCisJR1BJTzQ2X1NUVUFSVF9SWEQsCisJR1BJTzQ3X1NUVUFSVF9UWEQsCisKKwkvKiBVSEMgKi8KKwlHUElPODhfVVNCSDFfUFdSLAorCUdQSU84OV9VU0JIMV9QRU4sCisKKwkvKiBMQ0QgKi8KKwlHUElPeHhfTENEX1RGVF8xNkJQUCwKKworCS8qIFBXTSAqLworCUdQSU8xNl9QV00wX09VVCwKKworCS8qIEkyQyAqLworCUdQSU8xMTdfSTJDX1NDTCwKKwlHUElPMTE4X0kyQ19TREEsCisKKwkvKiBMRUQgKi8KKwlHUElPNTRfR1BJTywJLyogTEVEIEEgKi8KKwlHUElPNTVfR1BJTywJLyogTEVEIEIgKi8KK307CisjZWxzZQorc3RhdGljIG1mcF9jZmdfdCBpbmNvbWVfcGluX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7fTsKKyNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBQaW4gY29uZmlndXJhdGlvbgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyBtZnBfY2ZnX3QgY29saWJyaV9weGEyNzBfcGluX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7CkBAIC0xODQsMTAgKzI4MSwxMyBAQAogCWNvbGlicmlfcHhhMjcwX3RzY19pbml0KCk7CiAKIAlzd2l0Y2ggKGNvbGlicmlfcHhhMjcwX2Jhc2Vib2FyZCkgewotCWNhc2UgQ09MSUJSSV9QWEEyNzBfRVZBTEJPQVJEOgotCQljb2xpYnJpX3B4YTI3MF9ldmFsYm9hcmRfaW5pdCgpOworCWNhc2UgQ09MSUJSSV9FVkFMQk9BUkQ6CisJCXB4YTJ4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKAorCQkJY29saWJyaV9weGEyNzBfZXZhbGJvYXJkX3Bpbl9jb25maWcpKTsKKwkJY29saWJyaV9ldmFsYm9hcmRfaW5pdCgpOwogCQlicmVhazsKIAljYXNlIENPTElCUklfUFhBMjcwX0lOQ09NRToKKwkJcHhhMnh4X21mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUoaW5jb21lX3Bpbl9jb25maWcpKTsKIAkJY29saWJyaV9weGEyNzBfaW5jb21lX2JvYXJkaW5pdCgpOwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMjA5LDcgKzMwOSw3IEBACiBNQUNISU5FX1NUQVJUKENPTElCUkksICJUb3JhZGV4IENvbGlicmkgUFhBMjcwIikKIAkuYm9vdF9wYXJhbXMJPSBDT0xJQlJJX1NEUkFNX0JBU0UgKyAweDEwMCwKIAkuaW5pdF9tYWNoaW5lCT0gY29saWJyaV9weGEyNzBfaW5pdCwKLQkubWFwX2lvCQk9IHB4YV9tYXBfaW8sCisJLm1hcF9pbwkJPSBweGEyN3hfbWFwX2lvLAogCS5pbml0X2lycQk9IHB4YTI3eF9pbml0X2lycSwKIAkudGltZXIJCT0gJnB4YV90aW1lciwKIE1BQ0hJTkVfRU5ECkBAIC0yMTcsNyArMzE3LDcgQEAKIE1BQ0hJTkVfU1RBUlQoSU5DT01FLCAiSW5jb21lIHMuci5vLiBTSC1EbWFzdGVyIFBYQTI3MCBTQkMiKQogCS5ib290X3BhcmFtcwk9IDB4YTAwMDAxMDAsCiAJLmluaXRfbWFjaGluZQk9IGNvbGlicmlfcHhhMjcwX2luY29tZV9pbml0LAotCS5tYXBfaW8JCT0gcHhhX21hcF9pbywKKwkubWFwX2lvCQk9IHB4YTI3eF9tYXBfaW8sCiAJLmluaXRfaXJxCT0gcHhhMjd4X2luaXRfaXJxLAogCS50aW1lcgkJPSAmcHhhX3RpbWVyLAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhMzAwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLXB4YTMwMC5jCmluZGV4IGE3MGIyNTYuLmZkZGIxNmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhMzAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY29saWJyaS1weGEzMDAuYwpAQCAtMzEsOSArMzEsMzggQEAKICNpbmNsdWRlICJnZW5lcmljLmgiCiAjaW5jbHVkZSAiZGV2aWNlcy5oIgogCisKKyNpZmRlZiBDT05GSUdfTUFDSF9DT0xJQlJJX0VWQUxCT0FSRAorc3RhdGljIG1mcF9jZmdfdCBjb2xpYnJpX3B4YTMwMF9ldmFsYm9hcmRfcGluX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7CisJLyogTU1DICovCisJR1BJTzdfTU1DMV9DTEssCisJR1BJTzE0X01NQzFfQ01ELAorCUdQSU8zX01NQzFfREFUMCwKKwlHUElPNF9NTUMxX0RBVDEsCisJR1BJTzVfTU1DMV9EQVQyLAorCUdQSU82X01NQzFfREFUMywKKwlHUElPMzlfR1BJTywJLyogU0QgZGV0ZWN0ICovCisKKwkvKiBVSEMgKi8KKwlHUElPMF8yX1VTQkhfUEVOLAorCUdQSU8xXzJfVVNCSF9QV1IsCisJR1BJTzc3X1VTQl9QM18xLAorCUdQSU83OF9VU0JfUDNfMiwKKwlHUElPNzlfVVNCX1AzXzMsCisJR1BJTzgwX1VTQl9QM180LAorCUdQSU84MV9VU0JfUDNfNSwKKwlHUElPODJfVVNCX1AzXzYsCisKKwkvKiBJMkMgKi8KKwlHUElPMjFfSTJDX1NDTCwKKwlHUElPMjJfSTJDX1NEQSwKK307CisjZWxzZQorc3RhdGljIG1mcF9jZmdfdCBjb2xpYnJpX3B4YTMwMF9ldmFsYm9hcmRfcGluX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7fTsKKyNlbmRpZgorCiAjaWYgZGVmaW5lZChDT05GSUdfQVg4ODc5NikKICNkZWZpbmUgQ09MSUJSSV9FVEhfSVJRX0dQSU8JbWZwX3RvX2dwaW8oR1BJTzI2X0dQSU8pCi0KIC8qCiAgKiBBc2l4IEFYODg3OTYgRXRoZXJuZXQKICAqLwpAQCAtODAsMzUgKzEwOSw2IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IGNvbGlicmlfcHhhMzAwX2luaXRfZXRoKHZvaWQpIHt9CiAjZW5kaWYgLyogQ09ORklHX0FYODg3OTYgKi8KIAotI2lmIGRlZmluZWQoQ09ORklHX1VTQl9PSENJX0hDRCkgfHwgZGVmaW5lZChDT05GSUdfVVNCX09IQ0lfSENEX01PRFVMRSkKLXN0YXRpYyBtZnBfY2ZnX3QgY29saWJyaV9weGEzMDBfdXNiX3Bpbl9jb25maWdbXSBfX2luaXRkYXRhID0gewotCUdQSU8wXzJfVVNCSF9QRU4sCi0JR1BJTzFfMl9VU0JIX1BXUiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcHhhb2hjaV9wbGF0Zm9ybV9kYXRhIGNvbGlicmlfcHhhMzAwX29oY2lfaW5mbyA9IHsKLQkucG9ydF9tb2RlCT0gUE1NX0dMT0JBTF9NT0RFLAotCS5mbGFncwkJPSBFTkFCTEVfUE9SVDEgfCBQT1dFUl9DT05UUk9MX0xPVyB8IFBPV0VSX1NFTlNFX0xPVywKLX07Ci0KLXZvaWQgX19pbml0IGNvbGlicmlfcHhhMzAwX2luaXRfb2hjaSh2b2lkKQotewotCXB4YTN4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKGNvbGlicmlfcHhhMzAwX3VzYl9waW5fY29uZmlnKSk7Ci0JcHhhX3NldF9vaGNpX2luZm8oJmNvbGlicmlfcHhhMzAwX29oY2lfaW5mbyk7Ci19Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIGNvbGlicmlfcHhhMzAwX2luaXRfb2hjaSh2b2lkKSB7fQotI2VuZGlmIC8qIENPTkZJR19VU0JfT0hDSV9IQ0QgfHwgQ09ORklHX1VTQl9PSENJX0hDRF9NT0RVTEUgKi8KLQotc3RhdGljIG1mcF9jZmdfdCBjb2xpYnJpX3B4YTMwMF9tbWNfcGluX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7Ci0JR1BJTzdfTU1DMV9DTEssCi0JR1BJTzE0X01NQzFfQ01ELAotCUdQSU8zX01NQzFfREFUMCwKLQlHUElPNF9NTUMxX0RBVDEsCi0JR1BJTzVfTU1DMV9EQVQyLAotCUdQSU82X01NQzFfREFUMywKLX07Ci0KICNpZiBkZWZpbmVkKENPTkZJR19GQl9QWEEpIHx8IGRlZmluZWQoQ09ORklHX0ZCX1BYQV9NT0RVTEUpCiBzdGF0aWMgbWZwX2NmZ190IGNvbGlicmlfcHhhMzAwX2xjZF9waW5fY29uZmlnW10gX19pbml0ZGF0YSA9IHsKIAlHUElPNTRfTENEX0xERF8wLApAQCAtMTcxLDI0ICsxNzEsMjEgQEAKIAogdm9pZCBfX2luaXQgY29saWJyaV9weGEzMDBfaW5pdCh2b2lkKQogewotCXB4YV9zZXRfZmZ1YXJ0X2luZm8oTlVMTCk7Ci0JcHhhX3NldF9idHVhcnRfaW5mbyhOVUxMKTsKLQlweGFfc2V0X3N0dWFydF9pbmZvKE5VTEwpOwotCiAJY29saWJyaV9weGEzMDBfaW5pdF9ldGgoKTsKLQljb2xpYnJpX3B4YTMwMF9pbml0X29oY2koKTsKIAljb2xpYnJpX3B4YTN4eF9pbml0X25hbmQoKTsKIAljb2xpYnJpX3B4YTMwMF9pbml0X2xjZCgpOwogCWNvbGlicmlfcHhhM3h4X2luaXRfbGNkKG1mcF90b19ncGlvKEdQSU8zOV9HUElPKSk7CiAJY29saWJyaV9weGEzMTBfaW5pdF9hYzk3KCk7Ci0JY29saWJyaV9weGEzeHhfaW5pdF9tbWMoQVJSQVlfQU5EX1NJWkUoY29saWJyaV9weGEzMDBfbW1jX3Bpbl9jb25maWcpLAotCQkJCW1mcF90b19ncGlvKE1GUF9QSU5fR1BJTzEzKSk7CisKKwkvKiBFdmFsYm9hcmQgaW5pdCAqLworCXB4YTN4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKGNvbGlicmlfcHhhMzAwX2V2YWxib2FyZF9waW5fY29uZmlnKSk7CisJY29saWJyaV9ldmFsYm9hcmRfaW5pdCgpOwogfQogCiBNQUNISU5FX1NUQVJUKENPTElCUkkzMDAsICJUb3JhZGV4IENvbGlicmkgUFhBMzAwIikKIAkuYm9vdF9wYXJhbXMJPSBDT0xJQlJJX1NEUkFNX0JBU0UgKyAweDEwMCwKIAkuaW5pdF9tYWNoaW5lCT0gY29saWJyaV9weGEzMDBfaW5pdCwKLQkubWFwX2lvCQk9IHB4YV9tYXBfaW8sCisJLm1hcF9pbwkJPSBweGEzeHhfbWFwX2lvLAogCS5pbml0X2lycQk9IHB4YTN4eF9pbml0X2lycSwKIAkudGltZXIJCT0gJnB4YV90aW1lciwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLXB4YTMyMC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY29saWJyaS1weGEzMjAuYwppbmRleCBjYTVmMjllLi5mZjlmZjVmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLXB4YTMyMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhMzIwLmMKQEAgLTM1LDkgKzM1LDcyIEBACiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogI2luY2x1ZGUgImRldmljZXMuaCIKIAorI2lmZGVmCUNPTkZJR19NQUNIX0NPTElCUklfRVZBTEJPQVJECitzdGF0aWMgbWZwX2NmZ190IGNvbGlicmlfcHhhMzIwX2V2YWxib2FyZF9waW5fY29uZmlnW10gX19pbml0ZGF0YSA9IHsKKwkvKiBNTUMgKi8KKwlHUElPMjJfTU1DMV9DTEssCisJR1BJTzIzX01NQzFfQ01ELAorCUdQSU8xOF9NTUMxX0RBVDAsCisJR1BJTzE5X01NQzFfREFUMSwKKwlHUElPMjBfTU1DMV9EQVQyLAorCUdQSU8yMV9NTUMxX0RBVDMsCisJR1BJTzI4X0dQSU8sCS8qIFNEIGRldGVjdCAqLworCisJLyogVUFSVCAxIGNvbmZpZ3VyYXRpb24gKG1heSBiZSBzZXQgYnkgYm9vdGxvYWRlcikgKi8KKwlHUElPOTlfVUFSVDFfQ1RTLAorCUdQSU8xMDRfVUFSVDFfUlRTLAorCUdQSU85N19VQVJUMV9SWEQsCisJR1BJTzk4X1VBUlQxX1RYRCwKKwlHUElPMTAxX1VBUlQxX0RUUiwKKwlHUElPMTAzX1VBUlQxX0RTUiwKKwlHUElPMTAwX1VBUlQxX0RDRCwKKwlHUElPMTAyX1VBUlQxX1JJLAorCisJLyogVUFSVCAyIGNvbmZpZ3VyYXRpb24gKi8KKwlHUElPMTA5X1VBUlQyX0NUUywKKwlHUElPMTEyX1VBUlQyX1JUUywKKwlHUElPMTEwX1VBUlQyX1JYRCwKKwlHUElPMTExX1VBUlQyX1RYRCwKKworCS8qIFVBUlQgMyBjb25maWd1cmF0aW9uICovCisJR1BJTzMwX1VBUlQzX1JYRCwKKwlHUElPMzFfVUFSVDNfVFhELAorCisJLyogVUhDICovCisJR1BJTzJfMl9VU0JIX1BFTiwKKwlHUElPM18yX1VTQkhfUFdSLAorCisJLyogSTJDICovCisJR1BJTzMyX0kyQ19TQ0wsCisJR1BJTzMzX0kyQ19TREEsCisKKwkvKiBQQ01DSUEgKi8KKwlNRlBfQ0ZHKEdQSU81OSwgQUY3KSwJLyogUFJTVCA7IEFGNyB0byB0cmlzdGF0ZSAqLworCU1GUF9DRkcoR1BJTzYxLCBBRjcpLAkvKiBQQ0UxIDsgQUY3IHRvIHRyaXN0YXRlICovCisJTUZQX0NGRyhHUElPNjAsIEFGNyksCS8qIFBDRTIgOyBBRjcgdG8gdHJpc3RhdGUgKi8KKwlNRlBfQ0ZHKEdQSU82MiwgQUY3KSwJLyogUENEIDsgQUY3IHRvIHRyaXN0YXRlICovCisJTUZQX0NGRyhHUElPNTYsIEFGNyksCS8qIFBTS1RTRUwgOyBBRjcgdG8gdHJpc3RhdGUgKi8KKwlHUElPMjdfR1BJTywJCS8qIFJEbldSIDsgaW5wdXQvdHJpc3RhdGUgKi8KKwlHUElPNTBfR1BJTywJCS8qIFBSRUcgOyBpbnB1dC90cmlzdGF0ZSAqLworCUdQSU8yX1JEWSwKKwlHUElPNV9OUElPUiwKKwlHUElPNl9OUElPVywKKwlHUElPN19OUElPUzE2LAorCUdQSU84X05QV0FJVCwKKwlHUElPMjlfR1BJTywJCS8qIFBSRFkgKFJFQURZIEdQSU8pICovCisJR1BJTzU3X0dQSU8sCQkvKiBQUEVOIChQT1dFUiBHUElPKSAqLworCUdQSU84MV9HUElPLAkJLyogUENEIChERVRFQ1QgR1BJTykgKi8KKwlHUElPNzdfR1BJTywJCS8qIFBSU1QgKFJFU0VUIEdQSU8pICovCisJR1BJTzUzX0dQSU8sCQkvKiBQQlZEMSAqLworCUdQSU83OV9HUElPLAkJLyogUEJWRDIgKi8KKwlHUElPNTRfR1BJTywJCS8qIFBPRSAqLworfTsKKyNlbHNlCitzdGF0aWMgbWZwX2NmZ190IGNvbGlicmlfcHhhMzIwX2V2YWxib2FyZF9waW5fY29uZmlnW10gX19pbml0ZGF0YSA9IHt9OworI2VuZGlmCisKICNpZiBkZWZpbmVkKENPTkZJR19BWDg4Nzk2KQogI2RlZmluZSBDT0xJQlJJX0VUSF9JUlFfR1BJTwltZnBfdG9fZ3BpbyhHUElPMzZfR1BJTykKLQogLyoKICAqIEFzaXggQVg4ODc5NiBFdGhlcm5ldAogICovCkBAIC04NCwyNiArMTQ3LDYgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgY29saWJyaV9weGEzMjBfaW5pdF9ldGgodm9pZCkge30KICNlbmRpZiAvKiBDT05GSUdfQVg4ODc5NiAqLwogCi0jaWYgZGVmaW5lZChDT05GSUdfVVNCX09IQ0lfSENEKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfT0hDSV9IQ0RfTU9EVUxFKQotc3RhdGljIG1mcF9jZmdfdCBjb2xpYnJpX3B4YTMyMF91c2JfcGluX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7Ci0JR1BJTzJfMl9VU0JIX1BFTiwKLQlHUElPM18yX1VTQkhfUFdSLAotfTsKLQotc3RhdGljIHN0cnVjdCBweGFvaGNpX3BsYXRmb3JtX2RhdGEgY29saWJyaV9weGEzMjBfb2hjaV9pbmZvID0gewotCS5wb3J0X21vZGUJPSBQTU1fR0xPQkFMX01PREUsCi0JLmZsYWdzCQk9IEVOQUJMRV9QT1JUMSB8IFBPV0VSX0NPTlRST0xfTE9XIHwgUE9XRVJfU0VOU0VfTE9XLAotfTsKLQotdm9pZCBfX2luaXQgY29saWJyaV9weGEzMjBfaW5pdF9vaGNpKHZvaWQpCi17Ci0JcHhhM3h4X21mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUoY29saWJyaV9weGEzMjBfdXNiX3Bpbl9jb25maWcpKTsKLQlweGFfc2V0X29oY2lfaW5mbygmY29saWJyaV9weGEzMjBfb2hjaV9pbmZvKTsKLX0KLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgY29saWJyaV9weGEzMjBfaW5pdF9vaGNpKHZvaWQpIHt9Ci0jZW5kaWYgLyogQ09ORklHX1VTQl9PSENJX0hDRCB8fCBDT05GSUdfVVNCX09IQ0lfSENEX01PRFVMRSAqLwotCiAjaWYgZGVmaW5lZChDT05GSUdfVVNCX0dBREdFVF9QWEEyN1gpfHxkZWZpbmVkKENPTkZJR19VU0JfR0FER0VUX1BYQTI3WF9NT0RVTEUpCiBzdGF0aWMgc3RydWN0IGdwaW9fdmJ1c19tYWNoX2luZm8gY29saWJyaV9weGEzMjBfZ3Bpb192YnVzX2luZm8gPSB7CiAJLmdwaW9fdmJ1cwkJPSBtZnBfdG9fZ3BpbyhNRlBfUElOX0dQSU85NiksCkBAIC0xNDAsMTUgKzE4Myw2IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgY29saWJyaV9weGEzMjBfaW5pdF91ZGModm9pZCkge30KICNlbmRpZgogCi1zdGF0aWMgbWZwX2NmZ190IGNvbGlicmlfcHhhMzIwX21tY19waW5fY29uZmlnW10gX19pbml0ZGF0YSA9IHsKLQlHUElPMjJfTU1DMV9DTEssCi0JR1BJTzIzX01NQzFfQ01ELAotCUdQSU8xOF9NTUMxX0RBVDAsCi0JR1BJTzE5X01NQzFfREFUMSwKLQlHUElPMjBfTU1DMV9EQVQyLAotCUdQSU8yMV9NTUMxX0RBVDMKLX07Ci0KICNpZiBkZWZpbmVkKENPTkZJR19GQl9QWEEpIHx8IGRlZmluZWQoQ09ORklHX0ZCX1BYQV9NT0RVTEUpCiBzdGF0aWMgbWZwX2NmZ190IGNvbGlicmlfcHhhMzIwX2xjZF9waW5fY29uZmlnW10gX19pbml0ZGF0YSA9IHsKIAlHUElPNl8yX0xDRF9MRERfMCwKQEAgLTIwNSw1OSArMjM5LDI0IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgY29saWJyaV9weGEzMjBfaW5pdF9hYzk3KHZvaWQpIHt9CiAjZW5kaWYKIAotLyoKLSAqIFRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbiBpcyB2ZXJpZmllZCB0byB3b3JrIHdpdGggdGhlIFRvcmFkZXggT3JjaGlkCi0gKiBjYXJyaWVyIGJvYXJkCi0gKi8KLXN0YXRpYyBtZnBfY2ZnX3QgY29saWJyaV9weGEzMjBfdWFydF9waW5fY29uZmlnW10gX19pbml0ZGF0YSA9IHsKLQkvKiBVQVJUIDEgY29uZmlndXJhdGlvbiAobWF5IGJlIHNldCBieSBib290bG9hZGVyKSAqLwotCUdQSU85OV9VQVJUMV9DVFMsCi0JR1BJTzEwNF9VQVJUMV9SVFMsCi0JR1BJTzk3X1VBUlQxX1JYRCwKLQlHUElPOThfVUFSVDFfVFhELAotCUdQSU8xMDFfVUFSVDFfRFRSLAotCUdQSU8xMDNfVUFSVDFfRFNSLAotCUdQSU8xMDBfVUFSVDFfRENELAotCUdQSU8xMDJfVUFSVDFfUkksCi0KLQkvKiBVQVJUIDIgY29uZmlndXJhdGlvbiAqLwotCUdQSU8xMDlfVUFSVDJfQ1RTLAotCUdQSU8xMTJfVUFSVDJfUlRTLAotCUdQSU8xMTBfVUFSVDJfUlhELAotCUdQSU8xMTFfVUFSVDJfVFhELAotCi0JLyogVUFSVCAzIGNvbmZpZ3VyYXRpb24gKi8KLQlHUElPMzBfVUFSVDNfUlhELAotCUdQSU8zMV9VQVJUM19UWEQsCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgY29saWJyaV9weGEzMjBfaW5pdF91YXJ0KHZvaWQpCi17Ci0JcHhhM3h4X21mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUoY29saWJyaV9weGEzMjBfdWFydF9waW5fY29uZmlnKSk7Ci19Ci0KIHZvaWQgX19pbml0IGNvbGlicmlfcHhhMzIwX2luaXQodm9pZCkKIHsKLQlweGFfc2V0X2ZmdWFydF9pbmZvKE5VTEwpOwotCXB4YV9zZXRfYnR1YXJ0X2luZm8oTlVMTCk7Ci0JcHhhX3NldF9zdHVhcnRfaW5mbyhOVUxMKTsKLQogCWNvbGlicmlfcHhhMzIwX2luaXRfZXRoKCk7Ci0JY29saWJyaV9weGEzMjBfaW5pdF9vaGNpKCk7CiAJY29saWJyaV9weGEzeHhfaW5pdF9uYW5kKCk7CiAJY29saWJyaV9weGEzMjBfaW5pdF9sY2QoKTsKIAljb2xpYnJpX3B4YTN4eF9pbml0X2xjZChtZnBfdG9fZ3BpbyhHUElPNDlfR1BJTykpOwogCWNvbGlicmlfcHhhMzIwX2luaXRfYWM5NygpOwotCWNvbGlicmlfcHhhM3h4X2luaXRfbW1jKEFSUkFZX0FORF9TSVpFKGNvbGlicmlfcHhhMzIwX21tY19waW5fY29uZmlnKSwKLQkJCQltZnBfdG9fZ3BpbyhNRlBfUElOX0dQSU8yOCkpOwotCWNvbGlicmlfcHhhMzIwX2luaXRfdWFydCgpOwogCWNvbGlicmlfcHhhMzIwX2luaXRfdWRjKCk7CisKKwkvKiBFdmFsYm9hcmQgaW5pdCAqLworCXB4YTN4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKGNvbGlicmlfcHhhMzIwX2V2YWxib2FyZF9waW5fY29uZmlnKSk7CisJY29saWJyaV9ldmFsYm9hcmRfaW5pdCgpOwogfQogCiBNQUNISU5FX1NUQVJUKENPTElCUkkzMjAsICJUb3JhZGV4IENvbGlicmkgUFhBMzIwIikKIAkuYm9vdF9wYXJhbXMJPSBDT0xJQlJJX1NEUkFNX0JBU0UgKyAweDEwMCwKIAkuaW5pdF9tYWNoaW5lCT0gY29saWJyaV9weGEzMjBfaW5pdCwKLQkubWFwX2lvCQk9IHB4YV9tYXBfaW8sCisJLm1hcF9pbwkJPSBweGEzeHhfbWFwX2lvLAogCS5pbml0X2lycQk9IHB4YTN4eF9pbml0X2lycSwKIAkudGltZXIJCT0gJnB4YV90aW1lciwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLXB4YTN4eC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY29saWJyaS1weGEzeHguYwppbmRleCAxOTlhZmEyLi45NmIyZDlmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLXB4YTN4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhM3h4LmMKQEAgLTY0LDU1ICs2NCw2IEBACiB9CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX01NQ19QWEEpIHx8IGRlZmluZWQoQ09ORklHX01NQ19QWEFfTU9EVUxFKQotc3RhdGljIGludCBtbWNfZGV0ZWN0X3BpbjsKLQotc3RhdGljIGludCBjb2xpYnJpX3B4YTN4eF9tY2lfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJICAgaXJxX2hhbmRsZXJfdCBjb2xpYnJpX21tY19kZXRlY3RfaW50LAotCQkJCSAgIHZvaWQgKmRhdGEpCi17Ci0JaW50IHJldDsKLQotCXJldCA9IGdwaW9fcmVxdWVzdChtbWNfZGV0ZWN0X3BpbiwgIm1tYyBjYXJkIGRldGVjdCIpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlncGlvX2RpcmVjdGlvbl9pbnB1dChtbWNfZGV0ZWN0X3Bpbik7Ci0JcmV0ID0gcmVxdWVzdF9pcnEoZ3Bpb190b19pcnEobW1jX2RldGVjdF9waW4pLCBjb2xpYnJpX21tY19kZXRlY3RfaW50LAotCQkJICBJUlFGX1RSSUdHRVJfUklTSU5HIHwgSVJRRl9UUklHR0VSX0ZBTExJTkcsCi0JCQkgICJNTUMgY2FyZCBkZXRlY3QiLCBkYXRhKTsKLQlpZiAocmV0KSB7Ci0JCWdwaW9fZnJlZShtbWNfZGV0ZWN0X3Bpbik7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGNvbGlicmlfcHhhM3h4X21jaV9leGl0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKLXsKLQlmcmVlX2lycShtbWNfZGV0ZWN0X3BpbiwgZGF0YSk7Ci0JZ3Bpb19mcmVlKGdwaW9fdG9faXJxKG1tY19kZXRlY3RfcGluKSk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgY29saWJyaV9weGEzeHhfbWNpX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLmRldGVjdF9kZWxheV9tcwk9IDIwMCwKLQkub2NyX21hc2sJCT0gTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQsCi0JLmluaXQJCQk9IGNvbGlicmlfcHhhM3h4X21jaV9pbml0LAotCS5leGl0CQkJPSBjb2xpYnJpX3B4YTN4eF9tY2lfZXhpdCwKLQkuZ3Bpb19jYXJkX2RldGVjdAk9IC0xLAotCS5ncGlvX2NhcmRfcm8JCT0gLTEsCi0JLmdwaW9fcG93ZXIJCT0gLTEsCi19OwotCi12b2lkIF9faW5pdCBjb2xpYnJpX3B4YTN4eF9pbml0X21tYyhtZnBfY2ZnX3QgKnBpbnMsIGludCBsZW4sIGludCBkZXRlY3RfcGluKQotewotCXB4YTN4eF9tZnBfY29uZmlnKHBpbnMsIGxlbik7Ci0JbW1jX2RldGVjdF9waW4gPSBkZXRlY3RfcGluOwotCXB4YV9zZXRfbWNpX2luZm8oJmNvbGlicmlfcHhhM3h4X21jaV9wbGF0Zm9ybV9kYXRhKTsKLX0KLSNlbmRpZiAvKiBDT05GSUdfTU1DX1BYQSB8fCBDT05GSUdfTU1DX1BYQV9NT0RVTEUgKi8KLQogI2lmIGRlZmluZWQoQ09ORklHX0ZCX1BYQSkgfHwgZGVmaW5lZChDT05GSUdfRkJfUFhBX01PRFVMRSkKIHN0YXRpYyBpbnQgbGNkX2JsX3BpbjsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvY29yZ2kuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2NvcmdpLmMKaW5kZXggODIxMjI5YWMuLmE1NDUyYTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NvcmdpLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY29yZ2kuYwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvYWRzNzg0Ni5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9jb3JnaV9sY2QuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvcHhhMnh4X3NwaS5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9zaGFycHNsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQvbWF0cml4X2tleXBhZC5oPgogI2luY2x1ZGUgPHZpZGVvL3cxMDBmYi5oPgpAQCAtNDgsNyArNDksNiBAQAogI2luY2x1ZGUgPG1hY2gvaXJkYS5oPgogI2luY2x1ZGUgPG1hY2gvbW1jLmg+CiAjaW5jbHVkZSA8bWFjaC91ZGMuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YTJ4eF9zcGkuaD4KICNpbmNsdWRlIDxtYWNoL2NvcmdpLmg+CiAjaW5jbHVkZSA8bWFjaC9zaGFycHNsX3BtLmg+CiAKQEAgLTcyMSw3ICs3MjEsNyBAQAogI2lmZGVmIENPTkZJR19NQUNIX0NPUkdJCiBNQUNISU5FX1NUQVJUKENPUkdJLCAiU0hBUlAgQ29yZ2kiKQogCS5maXh1cAkJPSBmaXh1cF9jb3JnaSwKLQkubWFwX2lvCQk9IHB4YV9tYXBfaW8sCisJLm1hcF9pbwkJPSBweGEyNXhfbWFwX2lvLAogCS5pbml0X2lycQk9IHB4YTI1eF9pbml0X2lycSwKIAkuaW5pdF9tYWNoaW5lCT0gY29yZ2lfaW5pdCwKIAkudGltZXIJCT0gJnB4YV90aW1lciwKQEAgLTczMSw3ICs3MzEsNyBAQAogI2lmZGVmIENPTkZJR19NQUNIX1NIRVBIRVJECiBNQUNISU5FX1NUQVJUKFNIRVBIRVJELCAiU0hBUlAgU2hlcGhlcmQiKQogCS5maXh1cAkJPSBmaXh1cF9jb3JnaSwKLQkubWFwX2lvCQk9IHB4YV9tYXBfaW8sCisJLm1hcF9pbwkJPSBweGEyNXhfbWFwX2lvLAogCS5pbml0X2lycQk9IHB4YTI1eF9pbml0X2lycSwKIAkuaW5pdF9tYWNoaW5lCT0gY29yZ2lfaW5pdCwKIAkudGltZXIJCT0gJnB4YV90aW1lciwKQEAgLTc0MSw3ICs3NDEsNyBAQAogI2lmZGVmIENPTkZJR19NQUNIX0hVU0tZCiBNQUNISU5FX1NUQVJUKEhVU0tZLCAiU0hBUlAgSHVza3kiKQogCS5maXh1cAkJPSBmaXh1cF9jb3JnaSwKLQkubWFwX2lvCQk9IHB4YV9tYXBfaW8sCisJLm1hcF9pbwkJPSBweGEyNXhfbWFwX2lvLAogCS5pbml0X2lycQk9IHB4YTI1eF9pbml0X2lycSwKIAkuaW5pdF9tYWNoaW5lCT0gY29yZ2lfaW5pdCwKIAkudGltZXIJCT0gJnB4YV90aW1lciwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NwdWZyZXEtcHhhMnh4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jcHVmcmVxLXB4YTJ4eC5jCmluZGV4IDU4MDkzZDkuLjZhN2FlYWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NwdWZyZXEtcHhhMnh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY3B1ZnJlcS1weGEyeHguYwpAQCAtMzgsOCArMzgsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9jcHVmcmVxLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogI2luY2x1ZGUgPG1hY2gvcHhhMnh4LXJlZ3MuaD4KKyNpbmNsdWRlIDxtYWNoL3NtZW1jLmg+CiAKICNpZmRlZiBERUJVRwogc3RhdGljIHVuc2lnbmVkIGludCBmcmVxX2RlYnVnOwpAQCAtMjQyLDcgKzI0NCw3IEBACiAKIHN0YXRpYyB2b2lkIGluaXRfc2RyYW1fcm93cyh2b2lkKQogewotCXVpbnQzMl90IG1kY25mZyA9IE1EQ05GRzsKKwl1aW50MzJfdCBtZGNuZmcgPSBfX3Jhd19yZWFkbChNRENORkcpOwogCXVuc2lnbmVkIGludCBkcmFjMiA9IDAsIGRyYWMwID0gMDsKIAogCWlmIChtZGNuZmcgJiAoTURDTkZHX0RFMiB8IE1EQ05GR19ERTMpKQpAQCAtMzMxLDggKzMzMyw4IEBACiAJICogd2UgbmVlZCB0byBwcmVzZXQgdGhlIHNtYWxsZXIgRFJJIGJlZm9yZSB0aGUgY2hhbmdlLgkgSWYgd2UncmUKIAkgKiBzcGVlZGluZyB1cCB3ZSBuZWVkIHRvIHNldCB0aGUgbGFyZ2VyIERSSSB2YWx1ZSBhZnRlciB0aGUgY2hhbmdlLgogCSAqLwotCXByZXNldF9tZHJlZnIgPSBwb3N0c2V0X21kcmVmciA9IE1EUkVGUjsKLQlpZiAoKE1EUkVGUiAmIE1EUkVGUl9EUklfTUFTSykgPiBtZHJlZnJfZHJpKG5ld19mcmVxX21lbSkpIHsKKwlwcmVzZXRfbWRyZWZyID0gcG9zdHNldF9tZHJlZnIgPSBfX3Jhd19yZWFkbChNRFJFRlIpOworCWlmICgocHJlc2V0X21kcmVmciAmIE1EUkVGUl9EUklfTUFTSykgPiBtZHJlZnJfZHJpKG5ld19mcmVxX21lbSkpIHsKIAkJcHJlc2V0X21kcmVmciA9IChwcmVzZXRfbWRyZWZyICYgfk1EUkVGUl9EUklfTUFTSyk7CiAJCXByZXNldF9tZHJlZnIgfD0gbWRyZWZyX2RyaShuZXdfZnJlcV9tZW0pOwogCX0KQEAgLTM3MCw3ICszNzIsNyBAQAogMzoJCW5vcAkJCQkJCQlcblwKIAkgICIKIAkJICAgICA6ICI9JnIiICh1bnVzZWQpCi0JCSAgICAgOiAiciIgKCZNRFJFRlIpLCAiciIgKGNjbGtjZmcpLAorCQkgICAgIDogInIiIChNRFJFRlIpLCAiciIgKGNjbGtjZmcpLAogCQkgICAgICAgInIiIChwcmVzZXRfbWRyZWZyKSwgInIiIChwb3N0c2V0X21kcmVmcikKIAkJICAgICA6ICJyNCIsICJyNSIpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NzYjcyNi5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY3NiNzI2LmMKaW5kZXggNTdjYWNhZi4uYTMwNTQyNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvY3NiNzI2LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY3NiNzI2LmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxtYWNoL29oY2kuaD4KICNpbmNsdWRlIDxtYWNoL3B4YTJ4eC1yZWdzLmg+CiAjaW5jbHVkZSA8bWFjaC9hdWRpby5oPgorI2luY2x1ZGUgPG1hY2gvc21lbWMuaD4KIAogI2luY2x1ZGUgImdlbmVyaWMuaCIKICNpbmNsdWRlICJkZXZpY2VzLmgiCkBAIC0yNTUsOSArMjU2LDkgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCBjc2I3MjZfaW5pdCh2b2lkKQogewogCXB4YTJ4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKGNzYjcyNl9waW5fY29uZmlnKSk7Ci0vKglNU0MxID0gMHg3ZmZjM2ZmYzsgKi8vKiBMQU45MjE1L0VYUF9DUyAqLwotLyoJTVNDMiA9IDB4MDY2OTdmZjQ7ICovLyogbm9uZS9TTTUwMSAqLwotCU1TQzIgPSAoTVNDMiAmIH4weGZmZmYpIHwgMHg3ZmY0OyAvKiBTTTUwMSAqLworLyoJX19yYXdfd3JpdGVsKDB4N2ZmYzNmZmMsIE1TQzEpOyAqLy8qIExBTjkyMTUvRVhQX0NTICovCisvKglfX3Jhd193cml0ZWwoMHgwNjY5N2ZmNCwgTVNDMik7ICovLyogbm9uZS9TTTUwMSAqLworCV9fcmF3X3dyaXRlbCgoX19yYXdfcmVhZGwoTVNDMikgJiB+MHhmZmZmKSB8IDB4N2ZmNCwgTVNDMik7IC8qIFNNNTAxICovCiAKIAlweGFfc2V0X2ZmdWFydF9pbmZvKE5VTEwpOwogCXB4YV9zZXRfYnR1YXJ0X2luZm8oTlVMTCk7CkBAIC0yNzMsNyArMjc0LDcgQEAKIAogTUFDSElORV9TVEFSVChDU0I3MjYsICJDb2dlbnQgQ1NCNzI2IikKIAkuYm9vdF9wYXJhbXMJPSAweGEwMDAwMTAwLAotCS5tYXBfaW8gICAgICAgICA9IHB4YV9tYXBfaW8sCisJLm1hcF9pbyAgICAgICAgID0gcHhhMjd4X21hcF9pbywKIAkuaW5pdF9pcnEgICAgICAgPSBweGEyN3hfaW5pdF9pcnEsCiAJLmluaXRfbWFjaGluZSAgID0gY3NiNzI2X2luaXQsCiAJLnRpbWVyICAgICAgICAgID0gJnB4YV90aW1lciwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2RldmljZXMuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2RldmljZXMuYwppbmRleCBhYWExMTY2Li40Yzc2NmUzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvZGV2aWNlcy5jCkBAIC0zLDYgKzMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9weGEyeHhfc3BpLmg+CiAKICNpbmNsdWRlIDxhc20vcG11Lmg+CiAjaW5jbHVkZSA8bWFjaC91ZGMuaD4KQEAgLTEyLDcgKzEzLDYgQEAKICNpbmNsdWRlIDxtYWNoL2lyZGEuaD4KICNpbmNsdWRlIDxtYWNoL29oY2kuaD4KICNpbmNsdWRlIDxwbGF0L3B4YTI3eF9rZXlwYWQuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YTJ4eF9zcGkuaD4KICNpbmNsdWRlIDxtYWNoL2NhbWVyYS5oPgogI2luY2x1ZGUgPG1hY2gvYXVkaW8uaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CkBAIC0zNDIsMjcgKzM0Miw2IEBACiB9OwogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfUFhBM3h4Ci1zdGF0aWMgc3RydWN0IHJlc291cmNlIHB4YTN4eF9yZXNvdXJjZXNfaTJjX3Bvd2VyW10gPSB7Ci0JewotCQkuc3RhcnQgID0gMHg0MGY1MDBjMCwKLQkJLmVuZCAgICA9IDB4NDBmNTAwZDMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sIHsKLQkJLnN0YXJ0CT0gSVJRX1BXUkkyQywKLQkJLmVuZAk9IElSUV9QV1JJMkMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHB4YTN4eF9kZXZpY2VfaTJjX3Bvd2VyID0gewotCS5uYW1lCQk9ICJweGEzeHgtcHdyaTJjIiwKLQkuaWQJCT0gMSwKLQkucmVzb3VyY2UJPSBweGEzeHhfcmVzb3VyY2VzX2kyY19wb3dlciwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUocHhhM3h4X3Jlc291cmNlc19pMmNfcG93ZXIpLAotfTsKLSNlbmRpZgotCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHB4YWkyc19yZXNvdXJjZXNbXSA9IHsKIAl7CiAJCS5zdGFydAk9IDB4NDA0MDAwMDAsCkBAIC02MzMsMzAgKzYxMiwzNSBAQAogI2VuZGlmIC8qIENPTkZJR19QWEEyNXggKi8KIAogI2lmIGRlZmluZWQoQ09ORklHX1BYQTI3eCkgfHwgZGVmaW5lZChDT05GSUdfUFhBM3h4KQotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHB4YTI3eF9yZXNvdXJjZV9rZXlwYWRbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcHhhMjd4X3Jlc291cmNlX2NhbWVyYVtdID0gewogCVswXSA9IHsKLQkJLnN0YXJ0CT0gMHg0MTUwMDAwMCwKLQkJLmVuZAk9IDB4NDE1MDAwNGMsCisJCS5zdGFydAk9IDB4NTAwMDAwMDAsCisJCS5lbmQJPSAweDUwMDAwZmZmLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKIAl9LAogCVsxXSA9IHsKLQkJLnN0YXJ0CT0gSVJRX0tFWVBBRCwKLQkJLmVuZAk9IElSUV9LRVlQQUQsCisJCS5zdGFydAk9IElSUV9DQU1FUkEsCisJCS5lbmQJPSBJUlFfQ0FNRVJBLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKIAl9LAogfTsKIAotc3RydWN0IHBsYXRmb3JtX2RldmljZSBweGEyN3hfZGV2aWNlX2tleXBhZCA9IHsKLQkubmFtZQkJPSAicHhhMjd4LWtleXBhZCIsCi0JLmlkCQk9IC0xLAotCS5yZXNvdXJjZQk9IHB4YTI3eF9yZXNvdXJjZV9rZXlwYWQsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHB4YTI3eF9yZXNvdXJjZV9rZXlwYWQpLAorc3RhdGljIHU2NCBweGEyN3hfZG1hX21hc2tfY2FtZXJhID0gRE1BX0JJVF9NQVNLKDMyKTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcHhhMjd4X2RldmljZV9jYW1lcmEgPSB7CisJLm5hbWUJCT0gInB4YTI3eC1jYW1lcmEiLAorCS5pZAkJPSAwLCAvKiBUaGlzIGlzIHVzZWQgdG8gcHV0IGNhbWVyYXMgb24gdGhpcyBpbnRlcmZhY2UgKi8KKwkuZGV2CQk9IHsKKwkJLmRtYV9tYXNrICAgICAgCQk9ICZweGEyN3hfZG1hX21hc2tfY2FtZXJhLAorCQkuY29oZXJlbnRfZG1hX21hc2sJPSAweGZmZmZmZmZmLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHB4YTI3eF9yZXNvdXJjZV9jYW1lcmEpLAorCS5yZXNvdXJjZQk9IHB4YTI3eF9yZXNvdXJjZV9jYW1lcmEsCiB9OwogCi12b2lkIF9faW5pdCBweGFfc2V0X2tleXBhZF9pbmZvKHN0cnVjdCBweGEyN3hfa2V5cGFkX3BsYXRmb3JtX2RhdGEgKmluZm8pCit2b2lkIF9faW5pdCBweGFfc2V0X2NhbWVyYV9pbmZvKHN0cnVjdCBweGFjYW1lcmFfcGxhdGZvcm1fZGF0YSAqaW5mbykKIHsKLQlweGFfcmVnaXN0ZXJfZGV2aWNlKCZweGEyN3hfZGV2aWNlX2tleXBhZCwgaW5mbyk7CisJcHhhX3JlZ2lzdGVyX2RldmljZSgmcHhhMjd4X2RldmljZV9jYW1lcmEsIGluZm8pOwogfQogCiBzdGF0aWMgdTY0IHB4YTI3eF9vaGNpX2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKQEAgLTY4OSw2ICs2NzMsMzMgQEAKIHsKIAlweGFfcmVnaXN0ZXJfZGV2aWNlKCZweGEyN3hfZGV2aWNlX29oY2ksIGluZm8pOwogfQorI2VuZGlmIC8qIENPTkZJR19QWEEyN3ggfHwgQ09ORklHX1BYQTN4eCAqLworCisjaWYgZGVmaW5lZChDT05GSUdfUFhBMjd4KSB8fCBkZWZpbmVkKENPTkZJR19QWEEzeHgpIHx8IGRlZmluZWQoQ09ORklHX1BYQTk1eCkKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcHhhMjd4X3Jlc291cmNlX2tleXBhZFtdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gMHg0MTUwMDAwMCwKKwkJLmVuZAk9IDB4NDE1MDAwNGMsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBJUlFfS0VZUEFELAorCQkuZW5kCT0gSVJRX0tFWVBBRCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcHhhMjd4X2RldmljZV9rZXlwYWQgPSB7CisJLm5hbWUJCT0gInB4YTI3eC1rZXlwYWQiLAorCS5pZAkJPSAtMSwKKwkucmVzb3VyY2UJPSBweGEyN3hfcmVzb3VyY2Vfa2V5cGFkLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShweGEyN3hfcmVzb3VyY2Vfa2V5cGFkKSwKK307CisKK3ZvaWQgX19pbml0IHB4YV9zZXRfa2V5cGFkX2luZm8oc3RydWN0IHB4YTI3eF9rZXlwYWRfcGxhdGZvcm1fZGF0YSAqaW5mbykKK3sKKwlweGFfcmVnaXN0ZXJfZGV2aWNlKCZweGEyN3hfZGV2aWNlX2tleXBhZCwgaW5mbyk7Cit9CiAKIHN0YXRpYyB1NjQgcHhhMjd4X3NzcDFfZG1hX21hc2sgPSBETUFfQklUX01BU0soMzIpOwogCkBAIC04MzMsNzkgKzg0NCw5IEBACiAJLnJlc291cmNlCT0gcHhhMjd4X3Jlc291cmNlX3B3bTEsCiAJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHB4YTI3eF9yZXNvdXJjZV9wd20xKSwKIH07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcHhhMjd4X3Jlc291cmNlX2NhbWVyYVtdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gMHg1MDAwMDAwMCwKLQkJLmVuZAk9IDB4NTAwMDBmZmYsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBJUlFfQ0FNRVJBLAotCQkuZW5kCT0gSVJRX0NBTUVSQSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyB1NjQgcHhhMjd4X2RtYV9tYXNrX2NhbWVyYSA9IERNQV9CSVRfTUFTSygzMik7Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHB4YTI3eF9kZXZpY2VfY2FtZXJhID0gewotCS5uYW1lCQk9ICJweGEyN3gtY2FtZXJhIiwKLQkuaWQJCT0gMCwgLyogVGhpcyBpcyB1c2VkIHRvIHB1dCBjYW1lcmFzIG9uIHRoaXMgaW50ZXJmYWNlICovCi0JLmRldgkJPSB7Ci0JCS5kbWFfbWFzayAgICAgIAkJPSAmcHhhMjd4X2RtYV9tYXNrX2NhbWVyYSwKLQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gMHhmZmZmZmZmZiwKLQl9LAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShweGEyN3hfcmVzb3VyY2VfY2FtZXJhKSwKLQkucmVzb3VyY2UJPSBweGEyN3hfcmVzb3VyY2VfY2FtZXJhLAotfTsKLQotdm9pZCBfX2luaXQgcHhhX3NldF9jYW1lcmFfaW5mbyhzdHJ1Y3QgcHhhY2FtZXJhX3BsYXRmb3JtX2RhdGEgKmluZm8pCi17Ci0JcHhhX3JlZ2lzdGVyX2RldmljZSgmcHhhMjd4X2RldmljZV9jYW1lcmEsIGluZm8pOwotfQotI2VuZGlmIC8qIENPTkZJR19QWEEyN3ggfHwgQ09ORklHX1BYQTN4eCAqLworI2VuZGlmIC8qIENPTkZJR19QWEEyN3ggfHwgQ09ORklHX1BYQTN4eCB8fCBDT05GSUdfUFhBOTV4Ki8KIAogI2lmZGVmIENPTkZJR19QWEEzeHgKLXN0YXRpYyB1NjQgcHhhM3h4X3NzcDRfZG1hX21hc2sgPSBETUFfQklUX01BU0soMzIpOwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHB4YTN4eF9yZXNvdXJjZV9zc3A0W10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSAweDQxYTAwMDAwLAotCQkuZW5kCT0gMHg0MWEwMDAzZiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IElSUV9TU1A0LAotCQkuZW5kCT0gSVJRX1NTUDQsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzJdID0gewotCQkvKiBEUkNNUiBmb3IgUlggKi8KLQkJLnN0YXJ0CT0gMiwKLQkJLmVuZAk9IDIsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfRE1BLAotCX0sCi0JWzNdID0gewotCQkvKiBEUkNNUiBmb3IgVFggKi8KLQkJLnN0YXJ0CT0gMywKLQkJLmVuZAk9IDMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfRE1BLAotCX0sCi19OwotCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHB4YTN4eF9kZXZpY2Vfc3NwNCA9IHsKLQkvKiBQWEEzeHggU1NQIGlzIGJhc2ljYWxseSBlcXVpdmFsZW50IHRvIFBYQTI3eCAqLwotCS5uYW1lCQk9ICJweGEyN3gtc3NwIiwKLQkuaWQJCT0gMywKLQkuZGV2CQk9IHsKLQkJLmRtYV9tYXNrID0gJnB4YTN4eF9zc3A0X2RtYV9tYXNrLAotCQkuY29oZXJlbnRfZG1hX21hc2sgPSBETUFfQklUX01BU0soMzIpLAotCX0sCi0JLnJlc291cmNlCT0gcHhhM3h4X3Jlc291cmNlX3NzcDQsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHB4YTN4eF9yZXNvdXJjZV9zc3A0KSwKLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcHhhM3h4X3Jlc291cmNlc19tY2kyW10gPSB7CiAJWzBdID0gewogCQkuc3RhcnQJPSAweDQyMDAwMDAwLApAQCAtOTg0LDYgKzkyNSw1NCBAQAogCXB4YV9yZWdpc3Rlcl9kZXZpY2UoJnB4YTN4eF9kZXZpY2VfbWNpMywgaW5mbyk7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcHhhM3h4X3Jlc291cmNlc19nY3VbXSA9IHsKKwl7CisJCS5zdGFydAk9IDB4NTQwMDAwMDAsCisJCS5lbmQJPSAweDU0MDAwZmZmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CT0gSVJRX0dDVSwKKwkJLmVuZAk9IElSUV9HQ1UsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgdTY0IHB4YTN4eF9nY3VfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcHhhM3h4X2RldmljZV9nY3UgPSB7CisJLm5hbWUJCT0gInB4YTN4eC1nY3UiLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUocHhhM3h4X3Jlc291cmNlc19nY3UpLAorCS5yZXNvdXJjZQk9IHB4YTN4eF9yZXNvdXJjZXNfZ2N1LAorCS5kZXYJCT0geworCQkuZG1hX21hc2sgPSAmcHhhM3h4X2djdV9kbWFtYXNrLAorCQkuY29oZXJlbnRfZG1hX21hc2sgPSAweGZmZmZmZmZmLAorCX0sCit9OworCisjZW5kaWYgLyogQ09ORklHX1BYQTN4eCAqLworCisjaWYgZGVmaW5lZChDT05GSUdfUFhBM3h4KSB8fCBkZWZpbmVkKENPTkZJR19QWEE5NXgpCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHB4YTN4eF9yZXNvdXJjZXNfaTJjX3Bvd2VyW10gPSB7CisJeworCQkuc3RhcnQgID0gMHg0MGY1MDBjMCwKKwkJLmVuZCAgICA9IDB4NDBmNTAwZDMsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sIHsKKwkJLnN0YXJ0CT0gSVJRX1BXUkkyQywKKwkJLmVuZAk9IElSUV9QV1JJMkMsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHB4YTN4eF9kZXZpY2VfaTJjX3Bvd2VyID0geworCS5uYW1lCQk9ICJweGEzeHgtcHdyaTJjIiwKKwkuaWQJCT0gMSwKKwkucmVzb3VyY2UJPSBweGEzeHhfcmVzb3VyY2VzX2kyY19wb3dlciwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUocHhhM3h4X3Jlc291cmNlc19pMmNfcG93ZXIpLAorfTsKKwogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBweGEzeHhfcmVzb3VyY2VzX25hbmRbXSA9IHsKIAlbMF0gPSB7CiAJCS5zdGFydAk9IDB4NDMxMDAwMDAsCkBAIC0xMDI3LDMzICsxMDE2LDQ1IEBACiAJcHhhX3JlZ2lzdGVyX2RldmljZSgmcHhhM3h4X2RldmljZV9uYW5kLCBpbmZvKTsKIH0KIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBweGEzeHhfcmVzb3VyY2VzX2djdVtdID0gewotCXsKLQkJLnN0YXJ0CT0gMHg1NDAwMDAwMCwKLQkJLmVuZAk9IDB4NTQwMDBmZmYsCitzdGF0aWMgdTY0IHB4YTN4eF9zc3A0X2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBweGEzeHhfcmVzb3VyY2Vfc3NwNFtdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gMHg0MWEwMDAwMCwKKwkJLmVuZAk9IDB4NDFhMDAwM2YsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAogCX0sCi0JewotCQkuc3RhcnQJPSBJUlFfR0NVLAotCQkuZW5kCT0gSVJRX0dDVSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IElSUV9TU1A0LAorCQkuZW5kCT0gSVJRX1NTUDQsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAogCX0sCi19OwotCi1zdGF0aWMgdTY0IHB4YTN4eF9nY3VfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci0KLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcHhhM3h4X2RldmljZV9nY3UgPSB7Ci0JLm5hbWUJCT0gInB4YTN4eC1nY3UiLAotCS5pZAkJPSAtMSwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUocHhhM3h4X3Jlc291cmNlc19nY3UpLAotCS5yZXNvdXJjZQk9IHB4YTN4eF9yZXNvdXJjZXNfZ2N1LAotCS5kZXYJCT0gewotCQkuZG1hX21hc2sgPSAmcHhhM3h4X2djdV9kbWFtYXNrLAotCQkuY29oZXJlbnRfZG1hX21hc2sgPSAweGZmZmZmZmZmLAorCVsyXSA9IHsKKwkJLyogRFJDTVIgZm9yIFJYICovCisJCS5zdGFydAk9IDIsCisJCS5lbmQJPSAyLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0RNQSwKKwl9LAorCVszXSA9IHsKKwkJLyogRFJDTVIgZm9yIFRYICovCisJCS5zdGFydAk9IDMsCisJCS5lbmQJPSAzLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0RNQSwKIAl9LAogfTsKIAotI2VuZGlmIC8qIENPTkZJR19QWEEzeHggKi8KK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcHhhM3h4X2RldmljZV9zc3A0ID0geworCS8qIFBYQTN4eCBTU1AgaXMgYmFzaWNhbGx5IGVxdWl2YWxlbnQgdG8gUFhBMjd4ICovCisJLm5hbWUJCT0gInB4YTI3eC1zc3AiLAorCS5pZAkJPSAzLAorCS5kZXYJCT0geworCQkuZG1hX21hc2sgPSAmcHhhM3h4X3NzcDRfZG1hX21hc2ssCisJCS5jb2hlcmVudF9kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMiksCisJfSwKKwkucmVzb3VyY2UJPSBweGEzeHhfcmVzb3VyY2Vfc3NwNCwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUocHhhM3h4X3Jlc291cmNlX3NzcDQpLAorfTsKKyNlbmRpZiAvKiBDT05GSUdfUFhBM3h4IHx8IENPTkZJR19QWEE5NXggKi8KIAogLyogcHhhMnh4LXNwaSBwbGF0Zm9ybS1kZXZpY2UgSUQgZXF1YWxzIHJlc3BlY3RpdmUgU1NQIHBsYXRmb3JtLWRldmljZSBJRCArIDEuCiAgKiBTZWUgY29tbWVudCBpbiBhcmNoL2FybS9tYWNoLXB4YS9zc3AuYzo6c3NwX3Byb2JlKCkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2VtLXgyNzAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2VtLXgyNzAuYwppbmRleCBlZDBkYmZkYi4uYTc4YmIzMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvZW0teDI3MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2VtLXgyNzAuYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvdGRvMjRtLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL2xpYmVydGFzX3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9weGEyeHhfc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvcG93ZXJfc3VwcGx5Lmg+CiAjaW5jbHVkZSA8bGludXgvYXBtLWVtdWxhdGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgpAQCAtNDYsNyArNDcsNiBAQAogI2luY2x1ZGUgPHBsYXQvcHhhMjd4X2tleXBhZC5oPgogI2luY2x1ZGUgPHBsYXQvaTJjLmg+CiAjaW5jbHVkZSA8bWFjaC9jYW1lcmEuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YTJ4eF9zcGkuaD4KIAogI2luY2x1ZGUgImdlbmVyaWMuaCIKICNpbmNsdWRlICJkZXZpY2VzLmgiCkBAIC0xMzAwLDcgKzEzMDAsNyBAQAogCiBNQUNISU5FX1NUQVJUKEVNX1gyNzAsICJDb21wdWxhYiBFTS1YMjcwIikKIAkuYm9vdF9wYXJhbXMJPSAweGEwMDAwMTAwLAotCS5tYXBfaW8JCT0gcHhhX21hcF9pbywKKwkubWFwX2lvCQk9IHB4YTI3eF9tYXBfaW8sCiAJLmluaXRfaXJxCT0gcHhhMjd4X2luaXRfaXJxLAogCS50aW1lcgkJPSAmcHhhX3RpbWVyLAogCS5pbml0X21hY2hpbmUJPSBlbV94MjcwX2luaXQsCkBAIC0xMzA4LDcgKzEzMDgsNyBAQAogCiBNQUNISU5FX1NUQVJUKEVYRURBLCAiQ29tcHVsYWIgZVhlZGEiKQogCS5ib290X3BhcmFtcwk9IDB4YTAwMDAxMDAsCi0JLm1hcF9pbwkJPSBweGFfbWFwX2lvLAorCS5tYXBfaW8JCT0gcHhhMjd4X21hcF9pbywKIAkuaW5pdF9pcnEJPSBweGEyN3hfaW5pdF9pcnEsCiAJLnRpbWVyCQk9ICZweGFfdGltZXIsCiAJLmluaXRfbWFjaGluZQk9IGVtX3gyNzBfaW5pdCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2VzZXJpZXMuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2VzZXJpZXMuYwppbmRleCBiMjU2OTBjLi5lZGNhMGEwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9lc2VyaWVzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvZXNlcmllcy5jCkBAIC0xODEsNyArMTgxLDcgQEAKIE1BQ0hJTkVfU1RBUlQoRTMzMCwgIlRvc2hpYmEgZTMzMCIpCiAJLyogTWFpbnRhaW5lcjogSWFuIE1vbHRvbiAoc3B5cm9AZjJzLmNvbSkgKi8KIAkuYm9vdF9wYXJhbXMJPSAweGEwMDAwMTAwLAotCS5tYXBfaW8JCT0gcHhhX21hcF9pbywKKwkubWFwX2lvCQk9IHB4YTI1eF9tYXBfaW8sCiAJLm5yX2lycXMJPSBFU0VSSUVTX05SX0lSUVMsCiAJLmluaXRfaXJxCT0gcHhhMjV4X2luaXRfaXJxLAogCS5maXh1cAkJPSBlc2VyaWVzX2ZpeHVwLApAQCAtMjMwLDcgKzIzMCw3IEBACiBNQUNISU5FX1NUQVJUKEUzNTAsICJUb3NoaWJhIGUzNTAiKQogCS8qIE1haW50YWluZXI6IElhbiBNb2x0b24gKHNweXJvQGYycy5jb20pICovCiAJLmJvb3RfcGFyYW1zCT0gMHhhMDAwMDEwMCwKLQkubWFwX2lvCQk9IHB4YV9tYXBfaW8sCisJLm1hcF9pbwkJPSBweGEyNXhfbWFwX2lvLAogCS5ucl9pcnFzCT0gRVNFUklFU19OUl9JUlFTLAogCS5pbml0X2lycQk9IHB4YTI1eF9pbml0X2lycSwKIAkuZml4dXAJCT0gZXNlcmllc19maXh1cCwKQEAgLTM1Miw3ICszNTIsNyBAQAogTUFDSElORV9TVEFSVChFNDAwLCAiVG9zaGliYSBlNDAwIikKIAkvKiBNYWludGFpbmVyOiBJYW4gTW9sdG9uIChzcHlyb0BmMnMuY29tKSAqLwogCS5ib290X3BhcmFtcwk9IDB4YTAwMDAxMDAsCi0JLm1hcF9pbwkJPSBweGFfbWFwX2lvLAorCS5tYXBfaW8JCT0gcHhhMjV4X21hcF9pbywKIAkubnJfaXJxcwk9IEVTRVJJRVNfTlJfSVJRUywKIAkuaW5pdF9pcnEJPSBweGEyNXhfaW5pdF9pcnEsCiAJLmZpeHVwCQk9IGVzZXJpZXNfZml4dXAsCkBAIC01NDAsNyArNTQwLDcgQEAKIE1BQ0hJTkVfU1RBUlQoRTc0MCwgIlRvc2hpYmEgZTc0MCIpCiAJLyogTWFpbnRhaW5lcjogSWFuIE1vbHRvbiAoc3B5cm9AZjJzLmNvbSkgKi8KIAkuYm9vdF9wYXJhbXMJPSAweGEwMDAwMTAwLAotCS5tYXBfaW8JCT0gcHhhX21hcF9pbywKKwkubWFwX2lvCQk9IHB4YTI1eF9tYXBfaW8sCiAJLm5yX2lycXMJPSBFU0VSSUVTX05SX0lSUVMsCiAJLmluaXRfaXJxCT0gcHhhMjV4X2luaXRfaXJxLAogCS5maXh1cAkJPSBlc2VyaWVzX2ZpeHVwLApAQCAtNzMxLDcgKzczMSw3IEBACiBNQUNISU5FX1NUQVJUKEU3NTAsICJUb3NoaWJhIGU3NTAiKQogCS8qIE1haW50YWluZXI6IElhbiBNb2x0b24gKHNweXJvQGYycy5jb20pICovCiAJLmJvb3RfcGFyYW1zCT0gMHhhMDAwMDEwMCwKLQkubWFwX2lvCQk9IHB4YV9tYXBfaW8sCisJLm1hcF9pbwkJPSBweGEyNXhfbWFwX2lvLAogCS5ucl9pcnFzCT0gRVNFUklFU19OUl9JUlFTLAogCS5pbml0X2lycQk9IHB4YTI1eF9pbml0X2lycSwKIAkuZml4dXAJCT0gZXNlcmllc19maXh1cCwKQEAgLTkyNiw3ICs5MjYsNyBAQAogTUFDSElORV9TVEFSVChFODAwLCAiVG9zaGliYSBlODAwIikKIAkvKiBNYWludGFpbmVyOiBJYW4gTW9sdG9uIChzcHlyb0BmMnMuY29tKSAqLwogCS5ib290X3BhcmFtcwk9IDB4YTAwMDAxMDAsCi0JLm1hcF9pbwkJPSBweGFfbWFwX2lvLAorCS5tYXBfaW8JCT0gcHhhMjV4X21hcF9pbywKIAkubnJfaXJxcwk9IEVTRVJJRVNfTlJfSVJRUywKIAkuaW5pdF9pcnEJPSBweGEyNXhfaW5pdF9pcnEsCiAJLmZpeHVwCQk9IGVzZXJpZXNfZml4dXAsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9lenguYyBiL2FyY2gvYXJtL21hY2gtcHhhL2V6eC5jCmluZGV4IDE0MmM3MTEuLjg3Y2VjMGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2V6eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2V6eC5jCkBAIC03OTgsNyArNzk4LDcgQEAKIAogTUFDSElORV9TVEFSVChFWlhfQTc4MCwgIk1vdG9yb2xhIEVaWCBBNzgwIikKIAkuYm9vdF9wYXJhbXMgICAgPSAweGEwMDAwMTAwLAotCS5tYXBfaW8gICAgICAgICA9IHB4YV9tYXBfaW8sCisJLm1hcF9pbyAgICAgICAgID0gcHhhMjd4X21hcF9pbywKIAkubnJfaXJxcwk9IEVaWF9OUl9JUlFTLAogCS5pbml0X2lycSAgICAgICA9IHB4YTI3eF9pbml0X2lycSwKIAkudGltZXIgICAgICAgICAgPSAmcHhhX3RpbWVyLApAQCAtODYzLDcgKzg2Myw3IEBACiAKIE1BQ0hJTkVfU1RBUlQoRVpYX0U2ODAsICJNb3Rvcm9sYSBFWlggRTY4MCIpCiAJLmJvb3RfcGFyYW1zICAgID0gMHhhMDAwMDEwMCwKLQkubWFwX2lvICAgICAgICAgPSBweGFfbWFwX2lvLAorCS5tYXBfaW8gICAgICAgICA9IHB4YTI3eF9tYXBfaW8sCiAJLm5yX2lycXMJPSBFWlhfTlJfSVJRUywKIAkuaW5pdF9pcnEgICAgICAgPSBweGEyN3hfaW5pdF9pcnEsCiAJLnRpbWVyICAgICAgICAgID0gJnB4YV90aW1lciwKQEAgLTkyOCw3ICs5MjgsNyBAQAogCiBNQUNISU5FX1NUQVJUKEVaWF9BMTIwMCwgIk1vdG9yb2xhIEVaWCBBMTIwMCIpCiAJLmJvb3RfcGFyYW1zICAgID0gMHhhMDAwMDEwMCwKLQkubWFwX2lvICAgICAgICAgPSBweGFfbWFwX2lvLAorCS5tYXBfaW8gICAgICAgICA9IHB4YTI3eF9tYXBfaW8sCiAJLm5yX2lycXMJPSBFWlhfTlJfSVJRUywKIAkuaW5pdF9pcnEgICAgICAgPSBweGEyN3hfaW5pdF9pcnEsCiAJLnRpbWVyICAgICAgICAgID0gJnB4YV90aW1lciwKQEAgLTExMTgsNyArMTExOCw3IEBACiAKIE1BQ0hJTkVfU1RBUlQoRVpYX0E5MTAsICJNb3Rvcm9sYSBFWlggQTkxMCIpCiAJLmJvb3RfcGFyYW1zICAgID0gMHhhMDAwMDEwMCwKLQkubWFwX2lvICAgICAgICAgPSBweGFfbWFwX2lvLAorCS5tYXBfaW8gICAgICAgICA9IHB4YTI3eF9tYXBfaW8sCiAJLm5yX2lycXMJPSBFWlhfTlJfSVJRUywKIAkuaW5pdF9pcnEgICAgICAgPSBweGEyN3hfaW5pdF9pcnEsCiAJLnRpbWVyICAgICAgICAgID0gJnB4YV90aW1lciwKQEAgLTExODMsNyArMTE4Myw3IEBACiAKIE1BQ0hJTkVfU1RBUlQoRVpYX0U2LCAiTW90b3JvbGEgRVpYIEU2IikKIAkuYm9vdF9wYXJhbXMgICAgPSAweGEwMDAwMTAwLAotCS5tYXBfaW8gICAgICAgICA9IHB4YV9tYXBfaW8sCisJLm1hcF9pbyAgICAgICAgID0gcHhhMjd4X21hcF9pbywKIAkubnJfaXJxcwk9IEVaWF9OUl9JUlFTLAogCS5pbml0X2lycSAgICAgICA9IHB4YTI3eF9pbml0X2lycSwKIAkudGltZXIgICAgICAgICAgPSAmcHhhX3RpbWVyLApAQCAtMTIyMiw3ICsxMjIyLDcgQEAKIAogTUFDSElORV9TVEFSVChFWlhfRTIsICJNb3Rvcm9sYSBFWlggRTIiKQogCS5ib290X3BhcmFtcyAgICA9IDB4YTAwMDAxMDAsCi0JLm1hcF9pbyAgICAgICAgID0gcHhhX21hcF9pbywKKwkubWFwX2lvICAgICAgICAgPSBweGEyN3hfbWFwX2lvLAogCS5ucl9pcnFzCT0gRVpYX05SX0lSUVMsCiAJLmluaXRfaXJxICAgICAgID0gcHhhMjd4X2luaXRfaXJxLAogCS50aW1lciAgICAgICAgICA9ICZweGFfdGltZXIsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9nZW5lcmljLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9nZW5lcmljLmMKaW5kZXggNjQ1MWU5Yy4uZDZlMTVmNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvZ2VuZXJpYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2dlbmVyaWMuYwpAQCAtMjgsNiArMjgsOCBAQAogCiAjaW5jbHVkZSA8bWFjaC9yZXNldC5oPgogI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgorI2luY2x1ZGUgPG1hY2gvc21lbWMuaD4KKyNpbmNsdWRlIDxtYWNoL3B4YTN4eC1yZWdzLmg+CiAKICNpbmNsdWRlICJnZW5lcmljLmgiCiAKQEAgLTM1LDkgKzM3LDEwIEBACiB7CiAJaWYgKGNwdV9pc19weGEyeHgoKSkKIAkJcHhhMnh4X2NsZWFyX3Jlc2V0X3N0YXR1cyhtYXNrKTsKLQotCWlmIChjcHVfaXNfcHhhM3h4KCkpCi0JCXB4YTN4eF9jbGVhcl9yZXNldF9zdGF0dXMobWFzayk7CisJZWxzZSB7CisJCS8qIFJFU0VUX1NUQVRVU18qIGhhcyBhIDE6MSBtYXBwaW5nIHdpdGggQVJTUiAqLworCQlBUlNSID0gbWFzazsKKwl9CiB9CiAKIHVuc2lnbmVkIGxvbmcgZ2V0X2Nsb2NrX3RpY2tfcmF0ZSh2b2lkKQpAQCAtNzEsNDcgKzc0LDE3IEBACiBFWFBPUlRfU1lNQk9MKGdldF9jbGtfZnJlcXVlbmN5X2toeik7CiAKIC8qCi0gKiBSZXR1cm4gdGhlIGN1cnJlbnQgbWVtb3J5IGNsb2NrIGZyZXF1ZW5jeSBpbiB1bml0cyBvZiAxMGtIegotICovCi11bnNpZ25lZCBpbnQgZ2V0X21lbWNsa19mcmVxdWVuY3lfMTBraHoodm9pZCkKLXsKLQlpZiAoY3B1X2lzX3B4YTI1eCgpKQotCQlyZXR1cm4gcHhhMjV4X2dldF9tZW1jbGtfZnJlcXVlbmN5XzEwa2h6KCk7Ci0JZWxzZSBpZiAoY3B1X2lzX3B4YTI3eCgpKQotCQlyZXR1cm4gcHhhMjd4X2dldF9tZW1jbGtfZnJlcXVlbmN5XzEwa2h6KCk7Ci0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MKGdldF9tZW1jbGtfZnJlcXVlbmN5XzEwa2h6KTsKLQotLyoKICAqIEludGVsIFBYQTJ4eCBpbnRlcm5hbCByZWdpc3RlciBtYXBwaW5nLgogICoKLSAqIE5vdGUgMTogbm90IGFsbCBQWEEyeHggdmFyaWFudHMgaW1wbGVtZW50IGFsbCB0aG9zZSBhZGRyZXNzZXMuCi0gKgotICogTm90ZSAyOiB2aXJ0dWFsIDB4ZmZmZTAwMDAtMHhmZmZmZmZmZiBpcyByZXNlcnZlZCBmb3IgdGhlIHZlY3RvciB0YWJsZQotICogICAgICAgICBhbmQgY2FjaGUgZmx1c2ggYXJlYS4KKyAqIE5vdGU6IHZpcnR1YWwgMHhmZmZlMDAwMC0weGZmZmZmZmZmIGlzIHJlc2VydmVkIGZvciB0aGUgdmVjdG9yIHRhYmxlCisgKiAgICAgICBhbmQgY2FjaGUgZmx1c2ggYXJlYS4KICAqLwotc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBzdGFuZGFyZF9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgY29tbW9uX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0gewogICAJewkvKiBEZXZzICovCiAJCS52aXJ0dWFsCT0gIDB4ZjIwMDAwMDAsCiAJCS5wZm4JCT0gX19waHlzX3RvX3BmbigweDQwMDAwMDAwKSwKIAkJLmxlbmd0aAkJPSAweDAyMDAwMDAwLAogCQkudHlwZQkJPSBNVF9ERVZJQ0UKLQl9LCB7CS8qIE1lbSBDdGwgKi8KLQkJLnZpcnR1YWwJPSAgMHhmNjAwMDAwMCwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKDB4NDgwMDAwMDApLAotCQkubGVuZ3RoCQk9IDB4MDAyMDAwMDAsCi0JCS50eXBlCQk9IE1UX0RFVklDRQotCX0sIHsJLyogQ2FtZXJhICovCi0JCS52aXJ0dWFsCT0gIDB4ZmEwMDAwMDAsCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbigweDUwMDAwMDAwKSwKLQkJLmxlbmd0aAkJPSAweDAwMTAwMDAwLAotCQkudHlwZQkJPSBNVF9ERVZJQ0UKLQl9LCB7CS8qIElNZW0gY3RsICovCi0JCS52aXJ0dWFsCT0gIDB4ZmUwMDAwMDAsCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbigweDU4MDAwMDAwKSwKLQkJLmxlbmd0aAkJPSAweDAwMTAwMDAwLAotCQkudHlwZQkJPSBNVF9ERVZJQ0UKIAl9LCB7CS8qIFVOQ0FDSEVEX1BIWVNfMCAqLwogCQkudmlydHVhbAk9IDB4ZmYwMDAwMDAsCiAJCS5wZm4JCT0gX19waHlzX3RvX3BmbigweDAwMDAwMDAwKSwKQEAgLTEyMiw2ICs5NSw1IEBACiAKIHZvaWQgX19pbml0IHB4YV9tYXBfaW8odm9pZCkKIHsKLQlpb3RhYmxlX2luaXQoc3RhbmRhcmRfaW9fZGVzYywgQVJSQVlfU0laRShzdGFuZGFyZF9pb19kZXNjKSk7Ci0JZ2V0X2Nsa19mcmVxdWVuY3lfa2h6KDEpOworCWlvdGFibGVfaW5pdChBUlJBWV9BTkRfU0laRShjb21tb25faW9fZGVzYykpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvZ2VuZXJpYy5oIGIvYXJjaC9hcm0vbWFjaC1weGEvZ2VuZXJpYy5oCmluZGV4IDRiMWFkMjcuLjYyMDVkYzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2dlbmVyaWMuaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9nZW5lcmljLmgKQEAgLTIwLDcgKzIwLDEyIEBACiAjZW5kaWYKIGV4dGVybiB2b2lkIF9faW5pdCBweGEyN3hfaW5pdF9pcnEodm9pZCk7CiBleHRlcm4gdm9pZCBfX2luaXQgcHhhM3h4X2luaXRfaXJxKHZvaWQpOworZXh0ZXJuIHZvaWQgX19pbml0IHB4YTk1eF9pbml0X2lycSh2b2lkKTsKKwogZXh0ZXJuIHZvaWQgX19pbml0IHB4YV9tYXBfaW8odm9pZCk7CitleHRlcm4gdm9pZCBfX2luaXQgcHhhMjV4X21hcF9pbyh2b2lkKTsKK2V4dGVybiB2b2lkIF9faW5pdCBweGEyN3hfbWFwX2lvKHZvaWQpOworZXh0ZXJuIHZvaWQgX19pbml0IHB4YTN4eF9tYXBfaW8odm9pZCk7CiAKIGV4dGVybiB1bnNpZ25lZCBpbnQgZ2V0X2Nsa19mcmVxdWVuY3lfa2h6KGludCBpbmZvKTsKIApAQCAtMzIsMTggKzM3LDE0IEBACiAKICNpZmRlZiBDT05GSUdfUFhBMjV4CiBleHRlcm4gdW5zaWduZWQgcHhhMjV4X2dldF9jbGtfZnJlcXVlbmN5X2toeihpbnQpOwotZXh0ZXJuIHVuc2lnbmVkIHB4YTI1eF9nZXRfbWVtY2xrX2ZyZXF1ZW5jeV8xMGtoeih2b2lkKTsKICNlbHNlCiAjZGVmaW5lIHB4YTI1eF9nZXRfY2xrX2ZyZXF1ZW5jeV9raHooeCkJCSgwKQotI2RlZmluZSBweGEyNXhfZ2V0X21lbWNsa19mcmVxdWVuY3lfMTBraHooKQkoMCkKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1BYQTI3eAogZXh0ZXJuIHVuc2lnbmVkIHB4YTI3eF9nZXRfY2xrX2ZyZXF1ZW5jeV9raHooaW50KTsKLWV4dGVybiB1bnNpZ25lZCBweGEyN3hfZ2V0X21lbWNsa19mcmVxdWVuY3lfMTBraHoodm9pZCk7CiAjZWxzZQogI2RlZmluZSBweGEyN3hfZ2V0X2Nsa19mcmVxdWVuY3lfa2h6KHgpCQkoMCkKLSNkZWZpbmUgcHhhMjd4X2dldF9tZW1jbGtfZnJlcXVlbmN5XzEwa2h6KCkJKDApCiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX1BYQTI1eCkgfHwgZGVmaW5lZChDT05GSUdfUFhBMjd4KQpAQCAtNTQsMTAgKzU1LDggQEAKIAogI2lmZGVmIENPTkZJR19QWEEzeHgKIGV4dGVybiB1bnNpZ25lZCBweGEzeHhfZ2V0X2Nsa19mcmVxdWVuY3lfa2h6KGludCk7Ci1leHRlcm4gdm9pZCBweGEzeHhfY2xlYXJfcmVzZXRfc3RhdHVzKHVuc2lnbmVkIGludCk7CiAjZWxzZQogI2RlZmluZSBweGEzeHhfZ2V0X2Nsa19mcmVxdWVuY3lfa2h6KHgpCQkoMCkKLXN0YXRpYyBpbmxpbmUgdm9pZCBweGEzeHhfY2xlYXJfcmVzZXRfc3RhdHVzKHVuc2lnbmVkIGludCBtYXNrKSB7fQogI2VuZGlmCiAKIGV4dGVybiBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIHB4YV9pcnFfc3lzY2xhc3M7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9ndW1zdGl4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9ndW1zdGl4LmMKaW5kZXggMWUyYTlhMS4uNmZkMzE5ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvZ3Vtc3RpeC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2d1bXN0aXguYwpAQCAtMjI1LDcgKzIyNSw3IEBACiAKIE1BQ0hJTkVfU1RBUlQoR1VNU1RJWCwgIkd1bXN0aXgiKQogCS5ib290X3BhcmFtcwk9IDB4YTAwMDAxMDAsIC8qIG1hdGNoIHUtYm9vdCBiaV9ib290X3BhcmFtcyAqLwotCS5tYXBfaW8JCT0gcHhhX21hcF9pbywKKwkubWFwX2lvCQk9IHB4YTI1eF9tYXBfaW8sCiAJLmluaXRfaXJxCT0gcHhhMjV4X2luaXRfaXJxLAogCS50aW1lcgkJPSAmcHhhX3RpbWVyLAogCS5pbml0X21hY2hpbmUJPSBndW1zdGl4X2luaXQsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9oNTAwMC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvaDUwMDAuYwppbmRleCA3MDU3YTFmLi42NTdkYjQ2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9oNTAwMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2g1MDAwLmMKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDxtYWNoL3B4YTI1eC5oPgogI2luY2x1ZGUgPG1hY2gvaDUwMDAuaD4KICNpbmNsdWRlIDxtYWNoL3VkYy5oPgorI2luY2x1ZGUgPG1hY2gvc21lbWMuaD4KIAogI2luY2x1ZGUgImdlbmVyaWMuaCIKIApAQCAtMTcyLDExICsxNzMsMTEgQEAKIAogc3RhdGljIHZvaWQgZml4X21zYyh2b2lkKQogewotCU1TQzAgPSAweDEyOWMyNGYyOwotCU1TQzEgPSAweDdmZjQyNGZhOwotCU1TQzIgPSAweDdmZjQ3ZmY0OworCV9fcmF3X3dyaXRlbCgweDEyOWMyNGYyLCBNU0MwKTsKKwlfX3Jhd193cml0ZWwoMHg3ZmY0MjRmYSwgTVNDMSk7CisJX19yYXdfd3JpdGVsKDB4N2ZmNDdmZjQsIE1TQzIpOwogCi0JTURSRUZSIHw9IDB4MDIwODAwMDA7CisJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKE1EUkVGUikgfCAweDAyMDgwMDAwLCBNRFJFRlIpOwogfQogCiAvKgpAQCAtMjAyLDcgKzIwMyw3IEBACiAKIE1BQ0hJTkVfU1RBUlQoSDU0MDAsICJIUCBpUEFRIEg1MDAwIikKIAkuYm9vdF9wYXJhbXMgPSAweGEwMDAwMTAwLAotCS5tYXBfaW8gPSBweGFfbWFwX2lvLAorCS5tYXBfaW8gPSBweGEyNXhfbWFwX2lvLAogCS5pbml0X2lycSA9IHB4YTI1eF9pbml0X2lycSwKIAkudGltZXIgPSAmcHhhX3RpbWVyLAogCS5pbml0X21hY2hpbmUgPSBoNTAwMF9pbml0LApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaGltYWxheWEuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2hpbWFsYXlhLmMKaW5kZXggMDFiN2YwNy4uZTg2MDNlYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaGltYWxheWEuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9oaW1hbGF5YS5jCkBAIC0xNjAsNyArMTYwLDcgQEAKIAogTUFDSElORV9TVEFSVChISU1BTEFZQSwgIkhUQyBIaW1hbGF5YSIpCiAJLmJvb3RfcGFyYW1zID0gMHhhMDAwMDEwMCwKLQkubWFwX2lvID0gcHhhX21hcF9pbywKKwkubWFwX2lvID0gcHhhMjV4X21hcF9pbywKIAkuaW5pdF9pcnEgPSBweGEyNXhfaW5pdF9pcnEsCiAJLmluaXRfbWFjaGluZSA9IGhpbWFsYXlhX2luaXQsCiAJLnRpbWVyID0gJnB4YV90aW1lciwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2h4NDcwMC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvaHg0NzAwLmMKaW5kZXggNzZkOTNhMi4uYTkwOGUwYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaHg0NzAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaHg0NzAwLmMKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvbWF4MTU4Ni5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9hZHM3ODQ2Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9weGEyeHhfc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL2dwaW9fdmJ1cy5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgpAQCAtNDMsNyArNDQsNiBAQAogI2luY2x1ZGUgPG1hY2gvaHg0NzAwLmg+CiAjaW5jbHVkZSA8cGxhdC9pMmMuaD4KICNpbmNsdWRlIDxtYWNoL2lyZGEuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YTJ4eF9zcGkuaD4KIAogI2luY2x1ZGUgPHZpZGVvL3BsYXRmb3JtX2xjZC5oPgogI2luY2x1ZGUgPHZpZGVvL3cxMDBmYi5oPgpAQCAtODcxLDcgKzg3MSw3IEBACiAKIE1BQ0hJTkVfU1RBUlQoSDQ3MDAsICJIUCBpUEFRIEhYNDcwMCIpCiAJLmJvb3RfcGFyYW1zICA9IDB4YTAwMDAxMDAsCi0JLm1hcF9pbyAgICAgICA9IHB4YV9tYXBfaW8sCisJLm1hcF9pbyAgICAgICA9IHB4YTI3eF9tYXBfaW8sCiAJLm5yX2lycXMgICAgICA9IEhYNDcwMF9OUl9JUlFTLAogCS5pbml0X2lycSAgICAgPSBweGEyN3hfaW5pdF9pcnEsCiAJLmluaXRfbWFjaGluZSA9IGh4NDcwMF9pbml0LApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaWNvbnRyb2wuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2ljb250cm9sLmMKaW5kZXggZDUxZWUzZC4uNmNlZGM4MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaWNvbnRyb2wuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pY29udHJvbC5jCkBAIC0yNCw3ICsyNCw3IEBACiAjaW5jbHVkZSA8bWFjaC9teG04eDEwLmg+CiAKICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEyeHhfc3BpLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3B4YTJ4eF9zcGkuaD4KICNpbmNsdWRlIDxsaW51eC9jYW4vcGxhdGZvcm0vbWNwMjUxeC5oPgogCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgpAQCAtMTkyLDcgKzE5Miw3IEBACiAKIE1BQ0hJTkVfU1RBUlQoSUNPTlRST0wsICJpQ29udHJvbC9TYWZlVGNhbSBib2FyZHMgdXNpbmcgRW1iZWRpYW4gTVhNLTh4MTAgQ29NIikKIAkuYm9vdF9wYXJhbXMJPSAweGEwMDAwMTAwLAotCS5tYXBfaW8JCT0gcHhhX21hcF9pbywKKwkubWFwX2lvCQk9IHB4YTN4eF9tYXBfaW8sCiAJLmluaXRfaXJxCT0gcHhhM3h4X2luaXRfaXJxLAogCS50aW1lcgkJPSAmcHhhX3RpbWVyLAogCS5pbml0X21hY2hpbmUJPSBpY29udHJvbF9pbml0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pZHAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2lkcC5jCmluZGV4IGU3NzNkY2UuLmRkNDBlNGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2lkcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2lkcC5jCkBAIC0xODcsNyArMTg3LDcgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IGlkcF9tYXBfaW8odm9pZCkKIHsKLQlweGFfbWFwX2lvKCk7CisJcHhhMjV4X21hcF9pbygpOwogCWlvdGFibGVfaW5pdChpZHBfaW9fZGVzYywgQVJSQVlfU0laRShpZHBfaW9fZGVzYykpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvYWRkci1tYXAuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9hZGRyLW1hcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0YzAzNjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvYWRkci1tYXAuaApAQCAtMCwwICsxLDQ4IEBACisjaWZuZGVmIF9fQVNNX01BQ0hfQUREUl9NQVBfSAorI2RlZmluZSBfX0FTTV9NQUNIX0FERFJfTUFQX0gKKworLyoKKyAqIENoaXAgU2VsZWN0cworICovCisjZGVmaW5lIFBYQV9DUzBfUEhZUwkJMHgwMDAwMDAwMAorI2RlZmluZSBQWEFfQ1MxX1BIWVMJCTB4MDQwMDAwMDAKKyNkZWZpbmUgUFhBX0NTMl9QSFlTCQkweDA4MDAwMDAwCisjZGVmaW5lIFBYQV9DUzNfUEhZUwkJMHgwQzAwMDAwMAorI2RlZmluZSBQWEFfQ1M0X1BIWVMJCTB4MTAwMDAwMDAKKyNkZWZpbmUgUFhBX0NTNV9QSFlTCQkweDE0MDAwMDAwCisKKyNkZWZpbmUgUFhBMzAwX0NTMF9QSFlTCQkweDAwMDAwMDAwCS8qIFBYQTMwMC9QWEEzMTAgX29ubHlfICovCisjZGVmaW5lIFBYQTMwMF9DUzFfUEhZUwkJMHgzMDAwMDAwMAkvKiBQWEEzMDAvUFhBMzEwIF9vbmx5XyAqLworI2RlZmluZSBQWEEzeHhfQ1MyX1BIWVMJCTB4MTAwMDAwMDAKKyNkZWZpbmUgUFhBM3h4X0NTM19QSFlTCQkweDE0MDAwMDAwCisKKy8qCisgKiBQZXJpcGhlcmFsIEJ1cworICovCisjZGVmaW5lIFBFUklQSF9QSFlTCQkweDQwMDAwMDAwCisjZGVmaW5lIFBFUklQSF9WSVJUCQkweGYyMDAwMDAwCisjZGVmaW5lIFBFUklQSF9TSVpFCQkweDAyMDAwMDAwCisKKy8qCisgKiBTdGF0aWMgTWVtb3J5IENvbnRyb2xsZXIgKHcvIFNEUkFNIGNvbnRyb2xzIG9uIFBYQTI1eC9QWEEyN3gpCisgKi8KKyNkZWZpbmUgUFhBMlhYX1NNRU1DX1BIWVMJMHg0ODAwMDAwMAorI2RlZmluZSBQWEEzWFhfU01FTUNfUEhZUwkweDRhMDAwMDAwCisjZGVmaW5lIFNNRU1DX1ZJUlQJCTB4ZjYwMDAwMDAKKyNkZWZpbmUgU01FTUNfU0laRQkJMHgwMDEwMDAwMAorCisvKgorICogRHluYW1pYyBNZW1vcnkgQ29udHJvbGxlciAob25seSBvbiBQWEEzeHgpCisgKi8KKyNkZWZpbmUgRE1FTUNfUEhZUwkJMHg0ODEwMDAwMAorI2RlZmluZSBETUVNQ19WSVJUCQkweGY2MTAwMDAwCisjZGVmaW5lIERNRU1DX1NJWkUJCTB4MDAxMDAwMDAKKworLyoKKyAqIEludGVybmFsIE1lbW9yeSBDb250cm9sbGVyIChQWEEyN3ggYW5kIGxhdGVyKQorICovCisjZGVmaW5lIElNRU1DX1BIWVMJCTB4NTgwMDAwMDAKKyNkZWZpbmUgSU1FTUNfVklSVAkJMHhmZTAwMDAwMAorI2RlZmluZSBJTUVNQ19TSVpFCQkweDAwMTAwMDAwCisKKyNlbmRpZiAvKiBfX0FTTV9NQUNIX0FERFJfTUFQX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9iYWxsb29uMy5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2JhbGxvb24zLmgKaW5kZXggNTYxNTYyYi4uNzA3NGU3NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2JhbGxvb24zLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2JhbGxvb24zLmgKQEAgLTI2LDYgKzI2LDggQEAKICNkZWZpbmUgQkFMTE9PTjNfRlBHQV9WSVJUCSgweGYxMDAwMDAwKQkvKiBhcyBwZXIgYmFsbG9vbjIgKi8KICNkZWZpbmUgQkFMTE9PTjNfRlBHQV9MRU5HVEgJMHgwMTAwMDAwMAogCisjZGVmaW5lCUJBTExPT04zX0ZQR0FfU0VUbkNMUgkJKDB4MTAwMCkKKwogLyogRlBHQSAvIENQTEQgcmVnaXN0ZXJzIGZvciBDRiBzb2NrZXQgKi8KICNkZWZpbmUJQkFMTE9PTjNfQ0ZfU1RBVFVTX1JFRwkJKEJBTExPT04zX0ZQR0FfVklSVCArIDB4MDBlMDAwMDgpCiAjZGVmaW5lCUJBTExPT04zX0NGX0NPTlRST0xfUkVHCQkoQkFMTE9PTjNfRlBHQV9WSVJUICsgMHgwMGUwMDAwOCkKQEAgLTM1LDcgKzM3LDcgQEAKICNkZWZpbmUJQkFMTE9PTjNfTkFORF9CQVNFCQkoUFhBX0NTNF9QSFlTICsgMHgwMGUwMDAwMCkKICNkZWZpbmUJQkFMTE9PTjNfTkFORF9JT19SRUcJCShCQUxMT09OM19GUEdBX1ZJUlQgKyAweDAwZTAwMDAwKQogI2RlZmluZQlCQUxMT09OM19OQU5EX0NPTlRST0wyX1JFRwkoQkFMTE9PTjNfRlBHQV9WSVJUICsgMHgwMGUwMDAxMCkKLSNkZWZpbmUJQkFMTE9PTjNfTkFORF9TVEFUX1JFRwkJKEJBTExPT04zX0ZQR0FfVklSVCArIDB4MDBlMDAwMTApCisjZGVmaW5lCUJBTExPT04zX05BTkRfU1RBVF9SRUcJCShCQUxMT09OM19GUEdBX1ZJUlQgKyAweDAwZTAwMDE0KQogI2RlZmluZQlCQUxMT09OM19OQU5EX0NPTlRST0xfUkVHCShCQUxMT09OM19GUEdBX1ZJUlQgKyAweDAwZTAwMDE0KQogCiAvKiBmcGdhL2NwbGQgaW50ZXJydXB0IGNvbnRyb2wgcmVnaXN0ZXIgKi8KQEAgLTE3NCw3ICsxNzYsNyBAQAogI2RlZmluZSBCQUxMT09OM19DT0RFQ19JUlEJSVJRX0dQSU8oQkFMTE9PTjNfR1BJT19DT0RFQ19JUlEpCiAjZGVmaW5lIEJBTExPT04zX1MwX0NEX0lSUQlJUlFfR1BJTyhCQUxMT09OM19HUElPX1MwX0NEKQogCi0jZGVmaW5lIEJBTExPT04zX05SX0lSUVMJKElSUV9CT0FSRF9TVEFSVCArIDQpCisjZGVmaW5lIEJBTExPT04zX05SX0lSUVMJKElSUV9CT0FSRF9TVEFSVCArIDE2KQogCiBleHRlcm4gaW50IGJhbGxvb24zX2hhcyhlbnVtIGJhbGxvb24zX2ZlYXR1cmVzIGZlYXR1cmUpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvY29saWJyaS5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2NvbGlicmkuaAppbmRleCA1OGRhZGExLi4zODhhOTZmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvY29saWJyaS5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9jb2xpYnJpLmgKQEAgLTksMTQgKzksMTQgQEAKICAqLwogCiBlbnVtIHsKLQlDT0xJQlJJX1BYQTI3MF9FVkFMQk9BUkQgPSAwLAorCUNPTElCUklfRVZBTEJPQVJEID0gMCwKIAlDT0xJQlJJX1BYQTI3MF9JTkNPTUUsCiB9OwogCi0jaWYgZGVmaW5lZChDT05GSUdfTUFDSF9DT0xJQlJJX1BYQTI3MF9FVkFMQk9BUkQpCi1leHRlcm4gdm9pZCBjb2xpYnJpX3B4YTI3MF9ldmFsYm9hcmRfaW5pdCh2b2lkKTsKKyNpZiBkZWZpbmVkKENPTkZJR19NQUNIX0NPTElCUklfRVZBTEJPQVJEKQorZXh0ZXJuIHZvaWQgY29saWJyaV9ldmFsYm9hcmRfaW5pdCh2b2lkKTsKICNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgY29saWJyaV9weGEyNzBfZXZhbGJvYXJkX2luaXQodm9pZCkge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBjb2xpYnJpX2V2YWxib2FyZF9pbml0KHZvaWQpIHt9CiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX01BQ0hfQ09MSUJSSV9QWEEyNzBfSU5DT01FKQpAQCAtNTksNSArNTksMTEgQEAKICNkZWZpbmUgR1BJTzBfQ09MSUJSSV9QWEEyNzBfU0RfREVURUNUCTAKICNkZWZpbmUgR1BJTzExM19DT0xJQlJJX1BYQTI3MF9UU19JUlEJMTEzCiAKKy8qIEdQSU8gZGVmaW5pdGlvbnMgZm9yIENvbGlicmkgUFhBMzAwLzMxMCAqLworI2RlZmluZSBHUElPMzlfQ09MSUJSSV9QWEEzMDBfU0RfREVURUNUCTM5CisKKy8qIEdQSU8gZGVmaW5pdGlvbnMgZm9yIENvbGlicmkgUFhBMzIwICovCisjZGVmaW5lIEdQSU8yOF9DT0xJQlJJX1BYQTMyMF9TRF9ERVRFQ1QJMjgKKwogI2VuZGlmIC8qIF9DT0xJQlJJX0hfICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKaW5kZXggODE0ZjE0NS4uNjk1N2JhNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKQEAgLTEzLDYgKzEzLDggQEAKICNpZm5kZWYgX19BU01fQVJDSF9IQVJEV0FSRV9ICiAjZGVmaW5lIF9fQVNNX0FSQ0hfSEFSRFdBUkVfSAogCisjaW5jbHVkZSA8bWFjaC9hZGRyLW1hcC5oPgorCiAvKgogICogV29ya2Fyb3VuZHMgZm9yIGF0IGxlYXN0IDIgZXJyYXRhIHNvIGZhciByZXF1aXJlIHRoaXMuCiAgKiBUaGUgbWFwcGluZyBpcyBzZXQgaW4gbWFjaC1weGEvZ2VuZXJpYy5jLgpAQCAtMTkzLDE0ICsxOTUsMTUgQEAKICNkZWZpbmUgX19jcHVfaXNfcHhhOTM1KGlkKQkoMCkKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX0NQVV9QWEE5NTAKLSNkZWZpbmUgX19jcHVfaXNfcHhhOTUwKGlkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCSh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyNpZmRlZiBDT05GSUdfQ1BVX1BYQTk1NQorI2RlZmluZSBfX2NwdV9pc19weGE5NTUoaWQpCQkJCVwKKwkoewkJCQkJCVwKIAkJdW5zaWduZWQgaW50IF9pZCA9IChpZCkgPj4gNCAmIDB4ZmZmOwlcCi0JCV9pZCA9PSAweDY5NzsJCQkJXAotCSB9KQorCQlfaWQgPT0gMHg1ODEgfHwgX2lkID09IDB4YzA4CQlcCisJCQl8fCBfaWQgPT0gMHhiNzY7CQlcCisJfSkKICNlbHNlCi0jZGVmaW5lIF9fY3B1X2lzX3B4YTk1MChpZCkJKDApCisjZGVmaW5lIF9fY3B1X2lzX3B4YTk1NShpZCkJKDApCiAjZW5kaWYKIAogI2RlZmluZSBjcHVfaXNfcHhhMjEwKCkJCQkJCVwKQEAgLTI1MywxNiArMjU2LDE1IEBACiAJCV9fY3B1X2lzX3B4YTkzNShyZWFkX2NwdWlkX2lkKCkpOwlcCiAJIH0pCiAKLSNkZWZpbmUgY3B1X2lzX3B4YTk1MCgpCQkJCQlcCisjZGVmaW5lIGNwdV9pc19weGE5NTUoKQkJCQkJXAogCSh7CQkJCQkJXAotCQlfX2NwdV9pc19weGE5NTAocmVhZF9jcHVpZF9pZCgpKTsJXAotCSB9KQorCQlfX2NwdV9pc19weGE5NTUocmVhZF9jcHVpZF9pZCgpKTsJXAorCX0pCiAKIAogLyoKICAqIENQVUlEIENvcmUgR2VuZXJhdGlvbiBCaXQKICAqIDw9IDB4MiBmb3IgcHhhMjF4L3B4YTI1eC9weGEyNngvcHhhMjd4Ci0gKiA9PSAweDMgZm9yIHB4YTMwMC9weGEzMTAvcHhhMzIwCiAgKi8KICNpZiBkZWZpbmVkKENPTkZJR19QWEEyNXgpIHx8IGRlZmluZWQoQ09ORklHX1BYQTI3eCkKICNkZWZpbmUgX19jcHVfaXNfcHhhMnh4KGlkKQkJCQlcCkBAIC0yNzcsOCArMjc5LDEwIEBACiAjaWZkZWYgQ09ORklHX1BYQTN4eAogI2RlZmluZSBfX2NwdV9pc19weGEzeHgoaWQpCQkJCVwKIAkoewkJCQkJCVwKLQkJdW5zaWduZWQgaW50IF9pZCA9IChpZCkgPj4gMTMgJiAweDc7CVwKLQkJX2lkID09IDB4MzsJCQkJXAorCQlfX2NwdV9pc19weGEzMDAoaWQpCQkJXAorCQkJfHwgX19jcHVfaXNfcHhhMzEwKGlkKQkJXAorCQkJfHwgX19jcHVfaXNfcHhhMzIwKGlkKQkJXAorCQkJfHwgX19jcHVfaXNfcHhhOTN4KGlkKTsJCVwKIAkgfSkKICNlbHNlCiAjZGVmaW5lIF9fY3B1X2lzX3B4YTN4eChpZCkJKDApCkBAIC0yODcsMTMgKzI5MSwyMiBAQAogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9QWEE5MzApIHx8IGRlZmluZWQoQ09ORklHX0NQVV9QWEE5MzUpCiAjZGVmaW5lIF9fY3B1X2lzX3B4YTkzeChpZCkJCQkJXAogCSh7CQkJCQkJXAotCQl1bnNpZ25lZCBpbnQgX2lkID0gKGlkKSA+PiA0ICYgMHhmZmY7CVwKLQkJX2lkID09IDB4NjgzIHx8IF9pZCA9PSAweDY5MzsJCVwKKwkJX19jcHVfaXNfcHhhOTMwKGlkKQkJCVwKKwkJCXx8IF9fY3B1X2lzX3B4YTkzNShpZCk7CQlcCiAJIH0pCiAjZWxzZQogI2RlZmluZSBfX2NwdV9pc19weGE5M3goaWQpCSgwKQogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfUFhBOTV4CisjZGVmaW5lIF9fY3B1X2lzX3B4YTk1eChpZCkJCQkJXAorCSh7CQkJCQkJXAorCQlfX2NwdV9pc19weGE5NTUoaWQpOwkJCVwKKwl9KQorI2Vsc2UKKyNkZWZpbmUgX19jcHVfaXNfcHhhOTV4KGlkKQkoMCkKKyNlbmRpZgorCiAjZGVmaW5lIGNwdV9pc19weGEyeHgoKQkJCQkJXAogCSh7CQkJCQkJXAogCQlfX2NwdV9pc19weGEyeHgocmVhZF9jcHVpZF9pZCgpKTsJXApAQCAtMzA4LDYgKzMyMSwxMiBAQAogCSh7CQkJCQkJXAogCQlfX2NwdV9pc19weGE5M3gocmVhZF9jcHVpZF9pZCgpKTsJXAogCSB9KQorCisjZGVmaW5lIGNwdV9pc19weGE5NXgoKQkJCQkJXAorCSh7CQkJCQkJXAorCQlfX2NwdV9pc19weGE5NXgocmVhZF9jcHVpZF9pZCgpKTsJXAorCX0pCisKIC8qCiAgKiByZXR1cm4gY3VycmVudCBtZW1vcnkgYW5kIExDRCBjbG9jayBmcmVxdWVuY3kgaW4gdW5pdHMgb2YgMTBrSHoKICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2lycXMuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9pcnFzLmgKaW5kZXggZDM3MmNhYS4uYTQyODVmYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2lycXMuaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvaXJxcy5oCkBAIC0yMSwxNiArMjEsMTQgQEAKIAogI2RlZmluZSBQWEFfSVJRKHgpCShQWEFfSVNBX0lSUV9OVU0gKyAoeCkpCiAKLSNpZiBkZWZpbmVkKENPTkZJR19QWEEyN3gpIHx8IGRlZmluZWQoQ09ORklHX1BYQTN4eCkKICNkZWZpbmUgSVJRX1NTUDMJUFhBX0lSUSgwKQkvKiBTU1AzIHNlcnZpY2UgcmVxdWVzdCAqLwogI2RlZmluZSBJUlFfTVNMCQlQWEFfSVJRKDEpCS8qIE1TTCBJbnRlcmZhY2UgaW50ZXJydXB0ICovCi0jZGVmaW5lIElSUV9VU0JIMglQWEFfSVJRKDIpCS8qIFVTQiBIb3N0IGludGVycnVwdCAxIChPSENJKSAqLwotI2RlZmluZSBJUlFfVVNCSDEJUFhBX0lSUSgzKQkvKiBVU0IgSG9zdCBpbnRlcnJ1cHQgMiAobm9uLU9IQ0kpICovCisjZGVmaW5lIElSUV9VU0JIMglQWEFfSVJRKDIpCS8qIFVTQiBIb3N0IGludGVycnVwdCAxIChPSENJLFBYQTI3eCkgKi8KKyNkZWZpbmUgSVJRX1VTQkgxCVBYQV9JUlEoMykJLyogVVNCIEhvc3QgaW50ZXJydXB0IDIgKG5vbi1PSENJLFBYQTI3eCkgKi8KICNkZWZpbmUgSVJRX0tFWVBBRAlQWEFfSVJRKDQpCS8qIEtleSBwYWQgY29udHJvbGxlciAqLwotI2RlZmluZSBJUlFfTUVNU1RLCVBYQV9JUlEoNSkJLyogTWVtb3J5IFN0aWNrIGludGVycnVwdCAqLworI2RlZmluZSBJUlFfTUVNU1RLCVBYQV9JUlEoNSkJLyogTWVtb3J5IFN0aWNrIGludGVycnVwdCAoUFhBMjd4KSAqLworI2RlZmluZSBJUlFfQUNJUEMwCVBYQV9JUlEoNSkJLyogQVAtQ1AgQ29tbXVuaWNhdGlvbiAoUFhBOTMwKSAqLwogI2RlZmluZSBJUlFfUFdSSTJDCVBYQV9JUlEoNikJLyogUG93ZXIgSTJDIGludGVycnVwdCAqLwotI2VuZGlmCi0KICNkZWZpbmUgSVJRX0hXVUFSVAlQWEFfSVJRKDcpCS8qIEhXVUFSVCBUcmFuc21pdC9SZWNlaXZlL0Vycm9yIChQWEEyNngpICovCiAjZGVmaW5lIElSUV9PU1RfNF8xMQlQWEFfSVJRKDcpCS8qIE9TIHRpbWVyIDQtMTEgbWF0Y2hlcyAoUFhBMjd4KSAqLwogI2RlZmluZQlJUlFfR1BJTzAJUFhBX0lSUSg4KQkvKiBHUElPMCBFZGdlIERldGVjdCAqLwpAQCAtMzgsNyArMzYsOCBAQAogI2RlZmluZQlJUlFfR1BJT18yX3gJUFhBX0lSUSgxMCkJLyogR1BJT1syLXhdIEVkZ2UgRGV0ZWN0ICovCiAjZGVmaW5lCUlSUV9VU0IJCVBYQV9JUlEoMTEpCS8qIFVTQiBTZXJ2aWNlICovCiAjZGVmaW5lCUlSUV9QTVUJCVBYQV9JUlEoMTIpCS8qIFBlcmZvcm1hbmNlIE1vbml0b3JpbmcgVW5pdCAqLwotI2RlZmluZQlJUlFfSTJTCQlQWEFfSVJRKDEzKQkvKiBJMlMgSW50ZXJydXB0ICovCisjZGVmaW5lCUlSUV9JMlMJCVBYQV9JUlEoMTMpCS8qIEkyUyBJbnRlcnJ1cHQgKFBYQTI3eCkgKi8KKyNkZWZpbmUgSVJRX1NTUDQJUFhBX0lSUSgxMykJLyogU1NQNCBzZXJ2aWNlIHJlcXVlc3QgKFBYQTN4eCkgKi8KICNkZWZpbmUJSVJRX0FDOTcJUFhBX0lSUSgxNCkJLyogQUM5NyBJbnRlcnJ1cHQgKi8KICNkZWZpbmUgSVJRX0FTU1AJUFhBX0lSUSgxNSkJLyogQXVkaW8gU1NQIFNlcnZpY2UgUmVxdWVzdCAoUFhBMjV4KSAqLwogI2RlZmluZSBJUlFfVVNJTQlQWEFfSVJRKDE1KSAgICAgLyogU21hcnQgQ2FyZCBpbnRlcmZhY2UgaW50ZXJydXB0IChQWEEyN3gpICovCkBAIC00Nyw2ICs0Niw3IEBACiAjZGVmaW5lCUlSUV9MQ0QJCVBYQV9JUlEoMTcpCS8qIExDRCBDb250cm9sbGVyIFNlcnZpY2UgUmVxdWVzdCAqLwogI2RlZmluZQlJUlFfSTJDCQlQWEFfSVJRKDE4KQkvKiBJMkMgU2VydmljZSBSZXF1ZXN0ICovCiAjZGVmaW5lCUlSUV9JQ1AJCVBYQV9JUlEoMTkpCS8qIElDUCBUcmFuc21pdC9SZWNlaXZlL0Vycm9yICovCisjZGVmaW5lIElSUV9BQ0lQQzIJUFhBX0lSUSgxOSkJLyogQVAtQ1AgQ29tbXVuaWNhdGlvbiAoUFhBOTMwKSAqLwogI2RlZmluZQlJUlFfU1RVQVJUCVBYQV9JUlEoMjApCS8qIFNUVUFSVCBUcmFuc21pdC9SZWNlaXZlL0Vycm9yICovCiAjZGVmaW5lCUlSUV9CVFVBUlQJUFhBX0lSUSgyMSkJLyogQlRVQVJUIFRyYW5zbWl0L1JlY2VpdmUvRXJyb3IgKi8KICNkZWZpbmUJSVJRX0ZGVUFSVAlQWEFfSVJRKDIyKQkvKiBGRlVBUlQgVHJhbnNtaXQvUmVjZWl2ZS9FcnJvciovCkBAIC02MCwxOSArNjAsMTcgQEAKICNkZWZpbmUJSVJRX1JUQzFIeglQWEFfSVJRKDMwKQkvKiBSVEMgSFogQ2xvY2sgVGljayAqLwogI2RlZmluZQlJUlFfUlRDQWxybQlQWEFfSVJRKDMxKQkvKiBSVEMgQWxhcm0gKi8KIAotI2lmIGRlZmluZWQoQ09ORklHX1BYQTI3eCkgfHwgZGVmaW5lZChDT05GSUdfUFhBM3h4KQogI2RlZmluZSBJUlFfVFBNCQlQWEFfSVJRKDMyKQkvKiBUUE0gaW50ZXJydXB0ICovCiAjZGVmaW5lIElSUV9DQU1FUkEJUFhBX0lSUSgzMykJLyogQ2FtZXJhIEludGVyZmFjZSAqLwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfUFhBM3h4Ci0jZGVmaW5lIElSUV9TU1A0CVBYQV9JUlEoMTMpCS8qIFNTUDQgc2VydmljZSByZXF1ZXN0ICovCiAjZGVmaW5lIElSUV9DSVIJCVBYQV9JUlEoMzQpCS8qIENvbnN1bWVyIElSICovCiAjZGVmaW5lIElSUV9DT01NX1dEVAlQWEFfSVJRKDM1KSAJLyogQ29tbSBXRFQgaW50ZXJydXB0ICovCiAjZGVmaW5lIElSUV9UU0kJCVBYQV9JUlEoMzYpCS8qIFRvdWNoIFNjcmVlbiBJbnRlcmZhY2UgKFBYQTMyMCkgKi8KKyNkZWZpbmUgSVJRX0VOSFJPVAlQWEFfSVJRKDM3KQkvKiBFbmhhbmNlZCBSb3RhcnkgKFBYQTkzMCkgKi8KICNkZWZpbmUgSVJRX1VTSU0yCVBYQV9JUlEoMzgpCS8qIFVTSU0yIENvbnRyb2xsZXIgKi8KLSNkZWZpbmUgSVJRX0dDVQkJUFhBX0lSUSgzOSkJLyogR3JhcGhpY3MgQ29udHJvbGxlciAqLworI2RlZmluZSBJUlFfR0NVCQlQWEFfSVJRKDM5KQkvKiBHcmFwaGljcyBDb250cm9sbGVyIChQWEEzeHgpICovCisjZGVmaW5lIElSUV9BQ0lQQzEJUFhBX0lSUSg0MCkJLyogQVAtQ1AgQ29tbXVuaWNhdGlvbiAoUFhBOTMwKSAqLwogI2RlZmluZSBJUlFfTU1DMglQWEFfSVJRKDQxKQkvKiBNTUMyIENvbnRyb2xsZXIgKi8KKyNkZWZpbmUgSVJRX1RSS0JBTEwJUFhBX0lSUSg0MykJLyogVHJhY2sgQmFsbCAoUFhBOTMwKSAqLwogI2RlZmluZSBJUlFfMVdJUkUJUFhBX0lSUSg0NCkJLyogMS1XaXJlIENvbnRyb2xsZXIgKi8KICNkZWZpbmUgSVJRX05BTkQJUFhBX0lSUSg0NSkJLyogTkFORCBDb250cm9sbGVyICovCiAjZGVmaW5lIElSUV9VU0IyCVBYQV9JUlEoNDYpCS8qIFVTQiAyLjAgRGV2aWNlIENvbnRyb2xsZXIgKi8KQEAgLTgwLDMwICs3OCwxNCBAQAogI2RlZmluZSBJUlFfV0FLRVVQMQlQWEFfSVJRKDUwKQkvKiBFWFRfV0FLRVVQMSAqLwogI2RlZmluZSBJUlFfRE1FTUMJUFhBX0lSUSg1MSkJLyogRHluYW1pYyBNZW1vcnkgQ29udHJvbGxlciAqLwogI2RlZmluZSBJUlFfTU1DMwlQWEFfSVJRKDU1KQkvKiBNTUMzIENvbnRyb2xsZXIgKFBYQTMxMCkgKi8KLSNlbmRpZgogCi0jaWZkZWYgQ09ORklHX0NQVV9QWEE5MzUKICNkZWZpbmUgSVJRX1UyTwkJUFhBX0lSUSg2NCkJLyogVVNCIE9URyAyLjAgQ29udHJvbGxlciAoUFhBOTM1KSAqLwogI2RlZmluZSBJUlFfVTJICQlQWEFfSVJRKDY1KQkvKiBVU0IgSG9zdCAyLjAgQ29udHJvbGxlciAoUFhBOTM1KSAqLwotCi0jZGVmaW5lIElSUV9NTUMzX1BYQTkzNQlQWEFfSVJRKDcyKQkvKiBNTUMzIENvbnRyb2xsZXIgKFBYQTkzNSkgKi8KLSNkZWZpbmUgSVJRX01NQzRfUFhBOTM1CVBYQV9JUlEoNzMpCS8qIE1NQzQgQ29udHJvbGxlciAoUFhBOTM1KSAqLwotI2RlZmluZSBJUlFfTU1DNV9QWEE5MzUJUFhBX0lSUSg3NCkJLyogTU1DNSBDb250cm9sbGVyIChQWEE5MzUpICovCi0KKyNkZWZpbmUgSVJRX1BYQTkzNV9NTUMwCVBYQV9JUlEoNzIpCS8qIE1NQzAgQ29udHJvbGxlciAoUFhBOTM1KSAqLworI2RlZmluZSBJUlFfUFhBOTM1X01NQzEJUFhBX0lSUSg3MykJLyogTU1DMSBDb250cm9sbGVyIChQWEE5MzUpICovCisjZGVmaW5lIElSUV9QWEE5MzVfTU1DMglQWEFfSVJRKDc0KQkvKiBNTUMyIENvbnRyb2xsZXIgKFBYQTkzNSkgKi8KKyNkZWZpbmUgSVJRX1BYQTk1NV9NTUMzCVBYQV9JUlEoNzUpCS8qIE1NQzMgQ29udHJvbGxlciAoUFhBOTU1KSAqLwogI2RlZmluZSBJUlFfVTJQCQlQWEFfSVJRKDkzKQkvKiBVU0IgUEhZIEQrL0QtIExpbmVzIChQWEE5MzUpICovCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19DUFVfUFhBOTMwCi0jZGVmaW5lIElSUV9FTkhST1QJUFhBX0lSUSgzNykJLyogRW5oYW5jZWQgUm90YXJ5IChQWEE5MzApICovCi0jZGVmaW5lIElSUV9BQ0lQQzAJUFhBX0lSUSg1KQotI2RlZmluZSBJUlFfQUNJUEMxCVBYQV9JUlEoNDApCi0jZGVmaW5lIElSUV9BQ0lQQzIJUFhBX0lSUSgxOSkKLSNkZWZpbmUgSVJRX1RSS0JBTEwJUFhBX0lSUSg0MykJLyogVHJhY2sgQmFsbCAqLwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfQ1BVX1BYQTk1MAotI2RlZmluZSBJUlFfR0M1MDAJUFhBX0lSUSg3MCkJLyogR3JhcGhpY3MgQ29udHJvbGxlciAoUFhBOTUwKSAqLwotI2VuZGlmCiAKICNkZWZpbmUgUFhBX0dQSU9fSVJRX0JBU0UJUFhBX0lSUSg5NikKICNkZWZpbmUgUFhBX0dQSU9fSVJRX05VTQkoMTkyKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YTJ4eC1yZWdzLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhMnh4LXJlZ3MuaAppbmRleCA0ZmNkZGQ5Li5lZTZjZWQxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhMnh4LXJlZ3MuaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhMnh4LXJlZ3MuaApAQCAtMTcsNzIgKzE3LDYgQEAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKIC8qCi0gKiBQWEEgQ2hpcCBzZWxlY3RzCi0gKi8KLQotI2RlZmluZSBQWEFfQ1MwX1BIWVMJMHgwMDAwMDAwMAotI2RlZmluZSBQWEFfQ1MxX1BIWVMJMHgwNDAwMDAwMAotI2RlZmluZSBQWEFfQ1MyX1BIWVMJMHgwODAwMDAwMAotI2RlZmluZSBQWEFfQ1MzX1BIWVMJMHgwQzAwMDAwMAotI2RlZmluZSBQWEFfQ1M0X1BIWVMJMHgxMDAwMDAwMAotI2RlZmluZSBQWEFfQ1M1X1BIWVMJMHgxNDAwMDAwMAotCi0vKgotICogTWVtb3J5IGNvbnRyb2xsZXIKLSAqLwotCi0jZGVmaW5lIE1EQ05GRwkJX19SRUcoMHg0ODAwMDAwMCkgIC8qIFNEUkFNIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMCAqLwotI2RlZmluZSBNRFJFRlIJCV9fUkVHKDB4NDgwMDAwMDQpICAvKiBTRFJBTSBSZWZyZXNoIENvbnRyb2wgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgTVNDMAkJX19SRUcoMHg0ODAwMDAwOCkgIC8qIFN0YXRpYyBNZW1vcnkgQ29udHJvbCBSZWdpc3RlciAwICovCi0jZGVmaW5lIE1TQzEJCV9fUkVHKDB4NDgwMDAwMEMpICAvKiBTdGF0aWMgTWVtb3J5IENvbnRyb2wgUmVnaXN0ZXIgMSAqLwotI2RlZmluZSBNU0MyCQlfX1JFRygweDQ4MDAwMDEwKSAgLyogU3RhdGljIE1lbW9yeSBDb250cm9sIFJlZ2lzdGVyIDIgKi8KLSNkZWZpbmUgTUVDUgkJX19SRUcoMHg0ODAwMDAxNCkgIC8qIEV4cGFuc2lvbiBNZW1vcnkgKFBDTUNJQS9Db21wYWN0IEZsYXNoKSBCdXMgQ29uZmlndXJhdGlvbiAqLwotI2RlZmluZSBTWExDUgkJX19SRUcoMHg0ODAwMDAxOCkgIC8qIExDUiB2YWx1ZSB0byBiZSB3cml0dGVuIHRvIFNEUkFNLVRpbWluZyBTeW5jaHJvbm91cyBGbGFzaCAqLwotI2RlZmluZSBTWENORkcJCV9fUkVHKDB4NDgwMDAwMUMpICAvKiBTeW5jaHJvbm91cyBTdGF0aWMgTWVtb3J5IENvbnRyb2wgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgU1hNUlMJCV9fUkVHKDB4NDgwMDAwMjQpICAvKiBNUlMgdmFsdWUgdG8gYmUgd3JpdHRlbiB0byBTeW5jaHJvbm91cyBGbGFzaCBvciBTTVJPTSAqLwotI2RlZmluZSBNQ01FTTAJCV9fUkVHKDB4NDgwMDAwMjgpICAvKiBDYXJkIGludGVyZmFjZSBDb21tb24gTWVtb3J5IFNwYWNlIFNvY2tldCAwIFRpbWluZyAqLwotI2RlZmluZSBNQ01FTTEJCV9fUkVHKDB4NDgwMDAwMkMpICAvKiBDYXJkIGludGVyZmFjZSBDb21tb24gTWVtb3J5IFNwYWNlIFNvY2tldCAxIFRpbWluZyAqLwotI2RlZmluZSBNQ0FUVDAJCV9fUkVHKDB4NDgwMDAwMzApICAvKiBDYXJkIGludGVyZmFjZSBBdHRyaWJ1dGUgU3BhY2UgU29ja2V0IDAgVGltaW5nIENvbmZpZ3VyYXRpb24gKi8KLSNkZWZpbmUgTUNBVFQxCQlfX1JFRygweDQ4MDAwMDM0KSAgLyogQ2FyZCBpbnRlcmZhY2UgQXR0cmlidXRlIFNwYWNlIFNvY2tldCAxIFRpbWluZyBDb25maWd1cmF0aW9uICovCi0jZGVmaW5lIE1DSU8wCQlfX1JFRygweDQ4MDAwMDM4KSAgLyogQ2FyZCBpbnRlcmZhY2UgSS9PIFNwYWNlIFNvY2tldCAwIFRpbWluZyBDb25maWd1cmF0aW9uICovCi0jZGVmaW5lIE1DSU8xCQlfX1JFRygweDQ4MDAwMDNDKSAgLyogQ2FyZCBpbnRlcmZhY2UgSS9PIFNwYWNlIFNvY2tldCAxIFRpbWluZyBDb25maWd1cmF0aW9uICovCi0jZGVmaW5lIE1ETVJTCQlfX1JFRygweDQ4MDAwMDQwKSAgLyogTVJTIHZhbHVlIHRvIGJlIHdyaXR0ZW4gdG8gU0RSQU0gKi8KLSNkZWZpbmUgQk9PVF9ERUYJX19SRUcoMHg0ODAwMDA0NCkgIC8qIFJlYWQtT25seSBCb290LVRpbWUgUmVnaXN0ZXIuIENvbnRhaW5zIEJPT1RfU0VMIGFuZCBQS0dfU0VMICovCi0KLS8qCi0gKiBNb3JlIGhhbmR5IG1hY3JvcyBmb3IgUENNQ0lBCi0gKgotICogQXJnIGlzIHNvY2tldCBudW1iZXIKLSAqLwotI2RlZmluZSBNQ01FTShzKQlfX1JFRzIoMHg0ODAwMDAyOCwgKHMpPDwyICkgIC8qIENhcmQgaW50ZXJmYWNlIENvbW1vbiBNZW1vcnkgU3BhY2UgU29ja2V0IHMgVGltaW5nICovCi0jZGVmaW5lIE1DQVRUKHMpCV9fUkVHMigweDQ4MDAwMDMwLCAocyk8PDIgKSAgLyogQ2FyZCBpbnRlcmZhY2UgQXR0cmlidXRlIFNwYWNlIFNvY2tldCBzIFRpbWluZyBDb25maWd1cmF0aW9uICovCi0jZGVmaW5lIE1DSU8ocykJCV9fUkVHMigweDQ4MDAwMDM4LCAocyk8PDIgKSAgLyogQ2FyZCBpbnRlcmZhY2UgSS9PIFNwYWNlIFNvY2tldCBzIFRpbWluZyBDb25maWd1cmF0aW9uICovCi0KLS8qIE1FQ1IgcmVnaXN0ZXIgZGVmaW5lcyAqLwotI2RlZmluZSBNRUNSX05PUwkoMSA8PCAwKQkvKiBOdW1iZXIgT2YgU29ja2V0czogMCAtPiAxIHNvY2ssIDEgLT4gMiBzb2NrICovCi0jZGVmaW5lIE1FQ1JfQ0lUCSgxIDw8IDEpCS8qIENhcmQgSXMgVGhlcmU6IDAgLT4gbm8gY2FyZCwgMSAtPiBjYXJkIGluc2VydGVkICovCi0KLSNkZWZpbmUgTURDTkZHX0RFMAkoMSA8PCAwKQkvKiBTRFJBTSBCYW5rIDAgRW5hYmxlICovCi0jZGVmaW5lIE1EQ05GR19ERTEJKDEgPDwgMSkJLyogU0RSQU0gQmFuayAxIEVuYWJsZSAqLwotI2RlZmluZSBNRENORkdfREUyCSgxIDw8IDE2KQkvKiBTRFJBTSBCYW5rIDIgRW5hYmxlICovCi0jZGVmaW5lIE1EQ05GR19ERTMJKDEgPDwgMTcpCS8qIFNEUkFNIEJhbmsgMyBFbmFibGUgKi8KLQotI2RlZmluZSBNRFJFRlJfSzBEQjQJKDEgPDwgMjkpCS8qIFNEQ0xLMCBEaXZpZGUgYnkgNCBDb250cm9sL1N0YXR1cyAqLwotI2RlZmluZSBNRFJFRlJfSzJGUkVFCSgxIDw8IDI1KQkvKiBTRFJBTSBGcmVlLVJ1bm5pbmcgQ29udHJvbCAqLwotI2RlZmluZSBNRFJFRlJfSzFGUkVFCSgxIDw8IDI0KQkvKiBTRFJBTSBGcmVlLVJ1bm5pbmcgQ29udHJvbCAqLwotI2RlZmluZSBNRFJFRlJfSzBGUkVFCSgxIDw8IDIzKQkvKiBTRFJBTSBGcmVlLVJ1bm5pbmcgQ29udHJvbCAqLwotI2RlZmluZSBNRFJFRlJfU0xGUlNICSgxIDw8IDIyKQkvKiBTRFJBTSBTZWxmLVJlZnJlc2ggQ29udHJvbC9TdGF0dXMgKi8KLSNkZWZpbmUgTURSRUZSX0FQRAkoMSA8PCAyMCkJLyogU0RSQU0vU1NSQU0gQXV0by1Qb3dlci1Eb3duIEVuYWJsZSAqLwotI2RlZmluZSBNRFJFRlJfSzJEQjIJKDEgPDwgMTkpCS8qIFNEQ0xLMiBEaXZpZGUgYnkgMiBDb250cm9sL1N0YXR1cyAqLwotI2RlZmluZSBNRFJFRlJfSzJSVU4JKDEgPDwgMTgpCS8qIFNEQ0xLMiBSdW4gQ29udHJvbC9TdGF0dXMgKi8KLSNkZWZpbmUgTURSRUZSX0sxREIyCSgxIDw8IDE3KQkvKiBTRENMSzEgRGl2aWRlIGJ5IDIgQ29udHJvbC9TdGF0dXMgKi8KLSNkZWZpbmUgTURSRUZSX0sxUlVOCSgxIDw8IDE2KQkvKiBTRENMSzEgUnVuIENvbnRyb2wvU3RhdHVzICovCi0jZGVmaW5lIE1EUkVGUl9FMVBJTgkoMSA8PCAxNSkJLyogU0RDS0UxIExldmVsIENvbnRyb2wvU3RhdHVzICovCi0jZGVmaW5lIE1EUkVGUl9LMERCMgkoMSA8PCAxNCkJLyogU0RDTEswIERpdmlkZSBieSAyIENvbnRyb2wvU3RhdHVzICovCi0jZGVmaW5lIE1EUkVGUl9LMFJVTgkoMSA8PCAxMykJLyogU0RDTEswIFJ1biBDb250cm9sL1N0YXR1cyAqLwotI2RlZmluZSBNRFJFRlJfRTBQSU4JKDEgPDwgMTIpCS8qIFNEQ0tFMCBMZXZlbCBDb250cm9sL1N0YXR1cyAqLwotCi0vKgogICogUG93ZXIgTWFuYWdlcgogICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9weGEyeHhfc3BpLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhMnh4X3NwaS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiODdjZWNkLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9weGEyeHhfc3BpLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA1IFN0ZXBoZW4gU3RyZWV0IC8gU3RyZWV0RmlyZSBTb3VuZCBMYWJzCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLQotI2lmbmRlZiBQWEEyWFhfU1BJX0hfCi0jZGVmaW5lIFBYQTJYWF9TUElfSF8KLQotI2RlZmluZSBQWEEyWFhfQ1NfQVNTRVJUICgweDAxKQotI2RlZmluZSBQWEEyWFhfQ1NfREVBU1NFUlQgKDB4MDIpCi0KLS8qIGRldmljZS5wbGF0Zm9ybV9kYXRhIGZvciBTU1AgY29udHJvbGxlciBkZXZpY2VzICovCi1zdHJ1Y3QgcHhhMnh4X3NwaV9tYXN0ZXIgewotCXUzMiBjbG9ja19lbmFibGU7Ci0JdTE2IG51bV9jaGlwc2VsZWN0OwotCXU4IGVuYWJsZV9kbWE7Ci19OwotCi0vKiBzcGlfYm9hcmRfaW5mby5jb250cm9sbGVyX2RhdGEgZm9yIFNQSSBzbGF2ZSBkZXZpY2VzLAotICogY29waWVkIHRvIHNwaV9kZXZpY2UucGxhdGZvcm1fZGF0YSAuLi4gbW9zdGx5IGZvciBkbWEgdHVuaW5nCi0gKi8KLXN0cnVjdCBweGEyeHhfc3BpX2NoaXAgewotCXU4IHR4X3RocmVzaG9sZDsKLQl1OCByeF90aHJlc2hvbGQ7Ci0JdTggZG1hX2J1cnN0X3NpemU7Ci0JdTMyIHRpbWVvdXQ7Ci0JdTggZW5hYmxlX2xvb3BiYWNrOwotCWludCBncGlvX2NzOwotCXZvaWQgKCpjc19jb250cm9sKSh1MzIgY29tbWFuZCk7Ci19OwotCi1leHRlcm4gdm9pZCBweGEyeHhfc2V0X3NwaV9pbmZvKHVuc2lnbmVkIGlkLCBzdHJ1Y3QgcHhhMnh4X3NwaV9tYXN0ZXIgKmluZm8pOwotCi0jZW5kaWYgLypQWEEyWFhfU1BJX0hfKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9weGEzeHgtcmVncy5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YTN4eC1yZWdzLmgKaW5kZXggZTkxZDYzYy4uZTRmYjQ2NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YTN4eC1yZWdzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YTN4eC1yZWdzLmgKQEAgLTE2LDE1ICsxNiw2IEBACiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCiAvKgotICogU3RhdGljIENoaXAgU2VsZWN0cwotICovCi0KLSNkZWZpbmUgUFhBMzAwX0NTMF9QSFlTCQkoMHgwMDAwMDAwMCkJLyogUFhBMzAwL1BYQTMxMCBfb25seV8gKi8KLSNkZWZpbmUgUFhBMzAwX0NTMV9QSFlTCQkoMHgzMDAwMDAwMCkJLyogUFhBMzAwL1BYQTMxMCBfb25seV8gKi8KLSNkZWZpbmUgUFhBM3h4X0NTMl9QSFlTCQkoMHgxMDAwMDAwMCkKLSNkZWZpbmUgUFhBM3h4X0NTM19QSFlTCQkoMHgxNDAwMDAwMCkKLQotLyoKICAqIE9zY2lsbGF0b3IgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAoT1NDQykKICAqLwogI2RlZmluZSBPU0NDICAgICAgICAgICBfX1JFRygweDQxMzUwMDAwKSAgLyogT3NjaWxsYXRvciBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcmVncy1pbnRjLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcmVncy1pbnRjLmgKaW5kZXggNjg0NjRjZS4uNjYyMjg4ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3JlZ3MtaW50Yy5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9yZWdzLWludGMuaApAQCAtMjcsOCArMjcsNCBAQAogI2RlZmluZSBJQ0ZQMwkJX19SRUcoMHg0MEQwMDEzQykgIC8qIEludGVycnVwdCBDb250cm9sbGVyIEZJUSBQZW5kaW5nIFJlZ2lzdGVyIDMgKi8KICNkZWZpbmUgSUNQUjMJCV9fUkVHKDB4NDBEMDAxNDApICAvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBQZW5kaW5nIFJlZ2lzdGVyIDMgKi8KIAotI2RlZmluZSBJUFIoeCkJCV9fUkVHKDB4NDBEMDAwMUMgKyAoeCA8IDMyID8gKHggPDwgMikJCVwKLQkJCQk6ICh4IDwgNjQgPyAoMHg5NCArICgoeCAtIDMyKSA8PCAyKSkJXAotCQkJCTogKDB4MTI4ICsgKCh4IC0gNjQpIDw8IDIpKSkpKQotCiAjZW5kaWYgLyogX19BU01fTUFDSF9SRUdTX0lOVENfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3NtZW1jLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvc21lbWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTRhZGM5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3NtZW1jLmgKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIFN0YXRpYyBtZW1vcnkgY29udHJvbGxlciByZWdpc3RlciBkZWZpbml0aW9ucyBmb3IgUFhBIENQVXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTWFyZWsgVmFzdXQgPG1hcmVrLnZhc3V0QGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19TTUVNQ19SRUdTX0gKKyNkZWZpbmUgX19TTUVNQ19SRUdTX0gKKworI2RlZmluZSBQWEEyWFhfU01FTUNfQkFTRQkweDQ4MDAwMDAwCisjZGVmaW5lIFBYQTNYWF9TTUVNQ19CQVNFCTB4NGEwMDAwMDAKKyNkZWZpbmUgU01FTUNfVklSVAkJMHhmNjAwMDAwMAorCisjZGVmaW5lIE1EQ05GRwkJKFNNRU1DX1ZJUlQgKyAweDAwKSAgLyogU0RSQU0gQ29uZmlndXJhdGlvbiBSZWdpc3RlciAwICovCisjZGVmaW5lIE1EUkVGUgkJKFNNRU1DX1ZJUlQgKyAweDA0KSAgLyogU0RSQU0gUmVmcmVzaCBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIE1TQzAJCShTTUVNQ19WSVJUICsgMHgwOCkgIC8qIFN0YXRpYyBNZW1vcnkgQ29udHJvbCBSZWdpc3RlciAwICovCisjZGVmaW5lIE1TQzEJCShTTUVNQ19WSVJUICsgMHgwQykgIC8qIFN0YXRpYyBNZW1vcnkgQ29udHJvbCBSZWdpc3RlciAxICovCisjZGVmaW5lIE1TQzIJCShTTUVNQ19WSVJUICsgMHgxMCkgIC8qIFN0YXRpYyBNZW1vcnkgQ29udHJvbCBSZWdpc3RlciAyICovCisjZGVmaW5lIE1FQ1IJCShTTUVNQ19WSVJUICsgMHgxNCkgIC8qIEV4cGFuc2lvbiBNZW1vcnkgKFBDTUNJQS9Db21wYWN0IEZsYXNoKSBCdXMgQ29uZmlndXJhdGlvbiAqLworI2RlZmluZSBTWExDUgkJKFNNRU1DX1ZJUlQgKyAweDE4KSAgLyogTENSIHZhbHVlIHRvIGJlIHdyaXR0ZW4gdG8gU0RSQU0tVGltaW5nIFN5bmNocm9ub3VzIEZsYXNoICovCisjZGVmaW5lIFNYQ05GRwkJKFNNRU1DX1ZJUlQgKyAweDFDKSAgLyogU3luY2hyb25vdXMgU3RhdGljIE1lbW9yeSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIFNYTVJTCQkoU01FTUNfVklSVCArIDB4MjQpICAvKiBNUlMgdmFsdWUgdG8gYmUgd3JpdHRlbiB0byBTeW5jaHJvbm91cyBGbGFzaCBvciBTTVJPTSAqLworI2RlZmluZSBNQ01FTTAJCShTTUVNQ19WSVJUICsgMHgyOCkgIC8qIENhcmQgaW50ZXJmYWNlIENvbW1vbiBNZW1vcnkgU3BhY2UgU29ja2V0IDAgVGltaW5nICovCisjZGVmaW5lIE1DTUVNMQkJKFNNRU1DX1ZJUlQgKyAweDJDKSAgLyogQ2FyZCBpbnRlcmZhY2UgQ29tbW9uIE1lbW9yeSBTcGFjZSBTb2NrZXQgMSBUaW1pbmcgKi8KKyNkZWZpbmUgTUNBVFQwCQkoU01FTUNfVklSVCArIDB4MzApICAvKiBDYXJkIGludGVyZmFjZSBBdHRyaWJ1dGUgU3BhY2UgU29ja2V0IDAgVGltaW5nIENvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgTUNBVFQxCQkoU01FTUNfVklSVCArIDB4MzQpICAvKiBDYXJkIGludGVyZmFjZSBBdHRyaWJ1dGUgU3BhY2UgU29ja2V0IDEgVGltaW5nIENvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgTUNJTzAJCShTTUVNQ19WSVJUICsgMHgzOCkgIC8qIENhcmQgaW50ZXJmYWNlIEkvTyBTcGFjZSBTb2NrZXQgMCBUaW1pbmcgQ29uZmlndXJhdGlvbiAqLworI2RlZmluZSBNQ0lPMQkJKFNNRU1DX1ZJUlQgKyAweDNDKSAgLyogQ2FyZCBpbnRlcmZhY2UgSS9PIFNwYWNlIFNvY2tldCAxIFRpbWluZyBDb25maWd1cmF0aW9uICovCisjZGVmaW5lIE1ETVJTCQkoU01FTUNfVklSVCArIDB4NDApICAvKiBNUlMgdmFsdWUgdG8gYmUgd3JpdHRlbiB0byBTRFJBTSAqLworI2RlZmluZSBCT09UX0RFRgkoU01FTUNfVklSVCArIDB4NDQpICAvKiBSZWFkLU9ubHkgQm9vdC1UaW1lIFJlZ2lzdGVyLiBDb250YWlucyBCT09UX1NFTCBhbmQgUEtHX1NFTCAqLworI2RlZmluZSBNRU1DTEtDRkcJKFNNRU1DX1ZJUlQgKyAweDY4KSAgLyogQ2xvY2sgQ29uZmlndXJhdGlvbiAqLworI2RlZmluZSBDU0FEUkNGRzAJKFNNRU1DX1ZJUlQgKyAweDgwKSAgLyogQWRkcmVzcyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIGZvciBDUzAgKi8KKyNkZWZpbmUgQ1NBRFJDRkcxCShTTUVNQ19WSVJUICsgMHg4NCkgIC8qIEFkZHJlc3MgQ29uZmlndXJhdGlvbiBSZWdpc3RlciBmb3IgQ1MxICovCisjZGVmaW5lIENTQURSQ0ZHMgkoU01FTUNfVklSVCArIDB4ODgpICAvKiBBZGRyZXNzIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgZm9yIENTMiAqLworI2RlZmluZSBDU0FEUkNGRzMJKFNNRU1DX1ZJUlQgKyAweDhDKSAgLyogQWRkcmVzcyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIGZvciBDUzMgKi8KKworLyoKKyAqIE1vcmUgaGFuZHkgbWFjcm9zIGZvciBQQ01DSUEKKyAqCisgKiBBcmcgaXMgc29ja2V0IG51bWJlcgorICovCisjZGVmaW5lIE1DTUVNKHMpCShTTUVNQ19WSVJUICsgMHgyOCArICgocyk8PDIpKSAgLyogQ2FyZCBpbnRlcmZhY2UgQ29tbW9uIE1lbW9yeSBTcGFjZSBTb2NrZXQgcyBUaW1pbmcgKi8KKyNkZWZpbmUgTUNBVFQocykJKFNNRU1DX1ZJUlQgKyAweDMwICsgKChzKTw8MikpICAvKiBDYXJkIGludGVyZmFjZSBBdHRyaWJ1dGUgU3BhY2UgU29ja2V0IHMgVGltaW5nIENvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgTUNJTyhzKQkJKFNNRU1DX1ZJUlQgKyAweDM4ICsgKChzKTw8MikpICAvKiBDYXJkIGludGVyZmFjZSBJL08gU3BhY2UgU29ja2V0IHMgVGltaW5nIENvbmZpZ3VyYXRpb24gKi8KKworLyogTUVDUiByZWdpc3RlciBkZWZpbmVzICovCisjZGVmaW5lIE1FQ1JfTk9TCSgxIDw8IDApCS8qIE51bWJlciBPZiBTb2NrZXRzOiAwIC0+IDEgc29jaywgMSAtPiAyIHNvY2sgKi8KKyNkZWZpbmUgTUVDUl9DSVQJKDEgPDwgMSkJLyogQ2FyZCBJcyBUaGVyZTogMCAtPiBubyBjYXJkLCAxIC0+IGNhcmQgaW5zZXJ0ZWQgKi8KKworI2RlZmluZSBNRENORkdfREUwCSgxIDw8IDApCS8qIFNEUkFNIEJhbmsgMCBFbmFibGUgKi8KKyNkZWZpbmUgTURDTkZHX0RFMQkoMSA8PCAxKQkvKiBTRFJBTSBCYW5rIDEgRW5hYmxlICovCisjZGVmaW5lIE1EQ05GR19ERTIJKDEgPDwgMTYpCS8qIFNEUkFNIEJhbmsgMiBFbmFibGUgKi8KKyNkZWZpbmUgTURDTkZHX0RFMwkoMSA8PCAxNykJLyogU0RSQU0gQmFuayAzIEVuYWJsZSAqLworCisjZGVmaW5lIE1EUkVGUl9LMERCNAkoMSA8PCAyOSkJLyogU0RDTEswIERpdmlkZSBieSA0IENvbnRyb2wvU3RhdHVzICovCisjZGVmaW5lIE1EUkVGUl9LMkZSRUUJKDEgPDwgMjUpCS8qIFNEUkFNIEZyZWUtUnVubmluZyBDb250cm9sICovCisjZGVmaW5lIE1EUkVGUl9LMUZSRUUJKDEgPDwgMjQpCS8qIFNEUkFNIEZyZWUtUnVubmluZyBDb250cm9sICovCisjZGVmaW5lIE1EUkVGUl9LMEZSRUUJKDEgPDwgMjMpCS8qIFNEUkFNIEZyZWUtUnVubmluZyBDb250cm9sICovCisjZGVmaW5lIE1EUkVGUl9TTEZSU0gJKDEgPDwgMjIpCS8qIFNEUkFNIFNlbGYtUmVmcmVzaCBDb250cm9sL1N0YXR1cyAqLworI2RlZmluZSBNRFJFRlJfQVBECSgxIDw8IDIwKQkvKiBTRFJBTS9TU1JBTSBBdXRvLVBvd2VyLURvd24gRW5hYmxlICovCisjZGVmaW5lIE1EUkVGUl9LMkRCMgkoMSA8PCAxOSkJLyogU0RDTEsyIERpdmlkZSBieSAyIENvbnRyb2wvU3RhdHVzICovCisjZGVmaW5lIE1EUkVGUl9LMlJVTgkoMSA8PCAxOCkJLyogU0RDTEsyIFJ1biBDb250cm9sL1N0YXR1cyAqLworI2RlZmluZSBNRFJFRlJfSzFEQjIJKDEgPDwgMTcpCS8qIFNEQ0xLMSBEaXZpZGUgYnkgMiBDb250cm9sL1N0YXR1cyAqLworI2RlZmluZSBNRFJFRlJfSzFSVU4JKDEgPDwgMTYpCS8qIFNEQ0xLMSBSdW4gQ29udHJvbC9TdGF0dXMgKi8KKyNkZWZpbmUgTURSRUZSX0UxUElOCSgxIDw8IDE1KQkvKiBTRENLRTEgTGV2ZWwgQ29udHJvbC9TdGF0dXMgKi8KKyNkZWZpbmUgTURSRUZSX0swREIyCSgxIDw8IDE0KQkvKiBTRENMSzAgRGl2aWRlIGJ5IDIgQ29udHJvbC9TdGF0dXMgKi8KKyNkZWZpbmUgTURSRUZSX0swUlVOCSgxIDw8IDEzKQkvKiBTRENMSzAgUnVuIENvbnRyb2wvU3RhdHVzICovCisjZGVmaW5lIE1EUkVGUl9FMFBJTgkoMSA8PCAxMikJLyogU0RDS0UwIExldmVsIENvbnRyb2wvU3RhdHVzICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaXJxLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9pcnEuYwppbmRleCAxYmViNDBmLi41NGU5MWM5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pcnEuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pcnEuYwpAQCAtMTYsMjAgKzE2LDMxIEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CiAjaW5jbHVkZSA8bWFjaC9ncGlvLmg+Ci0jaW5jbHVkZSA8bWFjaC9yZWdzLWludGMuaD4KIAogI2luY2x1ZGUgImdlbmVyaWMuaCIKIAotI2RlZmluZSBNQVhfSU5URVJOQUxfSVJRUwkxMjgKKyNkZWZpbmUgSVJRX0JBU0UJCSh2b2lkIF9faW9tZW0gKilpb19wMnYoMHg0MGQwMDAwMCkKIAotI2RlZmluZSBJUlFfQklUKG4pCSgoKG4pIC0gUFhBX0lSUSgwKSkgJiAweDFmKQotI2RlZmluZSBfSUNNUihuKQkoKigoKChuKSAtIFBYQV9JUlEoMCkpICYgfjB4MWYpID8gJklDTVIyIDogJklDTVIpKQotI2RlZmluZSBfSUNMUihuKQkoKigoKChuKSAtIFBYQV9JUlEoMCkpICYgfjB4MWYpID8gJklDTFIyIDogJklDTFIpKQorI2RlZmluZSBJQ0lQCQkJKDB4MDAwKQorI2RlZmluZSBJQ01SCQkJKDB4MDA0KQorI2RlZmluZSBJQ0xSCQkJKDB4MDA4KQorI2RlZmluZSBJQ0ZSCQkJKDB4MDBjKQorI2RlZmluZSBJQ1BSCQkJKDB4MDEwKQorI2RlZmluZSBJQ0NSCQkJKDB4MDE0KQorI2RlZmluZSBJQ0hQCQkJKDB4MDE4KQorI2RlZmluZSBJUFIoaSkJCQkoKChpKSA8IDMyKSA/ICgweDAxYyArICgoaSkgPDwgMikpIDoJCVwKKwkJCQkoKGkpIDwgNjQpID8gKDB4MGIwICsgKCgoaSkgLSAzMikgPDwgMikpIDoJXAorCQkJCSAgICAgICgweDE0NCArICgoKGkpIC0gNjQpIDw8IDIpKSkKKyNkZWZpbmUgSVBSX1ZBTElECQkoMSA8PCAzMSkKKyNkZWZpbmUgSVJRX0JJVChuKQkJKCgobikgLSBQWEFfSVJRKDApKSAmIDB4MWYpCisKKyNkZWZpbmUgTUFYX0lOVEVSTkFMX0lSUVMJMTI4CiAKIC8qCiAgKiBUaGlzIGlzIGZvciBwZXJpcGhlcmFsIElSUXMgaW50ZXJuYWwgdG8gdGhlIFBYQSBjaGlwLgpAQCAtMzcsMTQgKzQ4LDI3IEBACiAKIHN0YXRpYyBpbnQgcHhhX2ludGVybmFsX2lycV9ucjsKIAorc3RhdGljIGlubGluZSBpbnQgY3B1X2hhc19pcHIodm9pZCkKK3sKKwlyZXR1cm4gIWNwdV9pc19weGEyNXgoKTsKK30KKwogc3RhdGljIHZvaWQgcHhhX21hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0JX0lDTVIoaXJxKSAmPSB+KDEgPDwgSVJRX0JJVChpcnEpKTsKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOworCXVpbnQzMl90IGljbXIgPSBfX3Jhd19yZWFkbChiYXNlICsgSUNNUik7CisKKwlpY21yICY9IH4oMSA8PCBJUlFfQklUKGlycSkpOworCV9fcmF3X3dyaXRlbChpY21yLCBiYXNlICsgSUNNUik7CiB9CiAKIHN0YXRpYyB2b2lkIHB4YV91bm1hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0JX0lDTVIoaXJxKSB8PSAxIDw8IElSUV9CSVQoaXJxKTsKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOworCXVpbnQzMl90IGljbXIgPSBfX3Jhd19yZWFkbChiYXNlICsgSUNNUik7CisKKwlpY21yIHw9IDEgPDwgSVJRX0JJVChpcnEpOworCV9fcmF3X3dyaXRlbChpY21yLCBiYXNlICsgSUNNUik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgcHhhX2ludGVybmFsX2lycV9jaGlwID0gewpAQCAtODYsMTIgKzExMCwxNiBAQAogCiBzdGF0aWMgdm9pZCBweGFfbWFza19sb3dfZ3Bpbyh1bnNpZ25lZCBpbnQgaXJxKQogewotCUlDTVIgJj0gfigxIDw8IChpcnEgLSBQWEFfSVJRKDApKSk7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKworCWRlc2MtPmNoaXAtPm1hc2soaXJxKTsKIH0KIAogc3RhdGljIHZvaWQgcHhhX3VubWFza19sb3dfZ3Bpbyh1bnNpZ25lZCBpbnQgaXJxKQogewotCUlDTVIgfD0gMSA8PCAoaXJxIC0gUFhBX0lSUSgwKSk7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKworCWRlc2MtPmNoaXAtPnVubWFzayhpcnEpOwogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIHB4YV9sb3dfZ3Bpb19jaGlwID0gewpAQCAtMTIwLDMzICsxNDgsNDUgQEAKIAlweGFfbG93X2dwaW9fY2hpcC5zZXRfd2FrZSA9IGZuOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqaXJxX2Jhc2UoaW50IGkpCit7CisJc3RhdGljIHVuc2lnbmVkIGxvbmcgcGh5c19iYXNlW10gPSB7CisJCTB4NDBkMDAwMDAsCisJCTB4NDBkMDAwOWMsCisJCTB4NDBkMDAxMzAsCisJfTsKKworCXJldHVybiAodm9pZCBfX2lvbWVtICopaW9fcDJ2KHBoeXNfYmFzZVtpID4+IDVdKTsKK30KKwogdm9pZCBfX2luaXQgcHhhX2luaXRfaXJxKGludCBpcnFfbnIsIHNldF93YWtlX3QgZm4pCiB7Ci0JaW50IGlycSwgaTsKKwlpbnQgaXJxLCBpLCBuOwogCiAJQlVHX09OKGlycV9uciA+IE1BWF9JTlRFUk5BTF9JUlFTKTsKIAogCXB4YV9pbnRlcm5hbF9pcnFfbnIgPSBpcnFfbnI7CiAKLQlmb3IgKGlycSA9IFBYQV9JUlEoMCk7IGlycSA8IFBYQV9JUlEoaXJxX25yKTsgaXJxICs9IDMyKSB7Ci0JCV9JQ01SKGlycSkgPSAwOwkvKiBkaXNhYmxlIGFsbCBJUlFzICovCi0JCV9JQ0xSKGlycSkgPSAwOwkvKiBhbGwgSVJRcyBhcmUgSVJRLCBub3QgRklRICovCi0JfQorCWZvciAobiA9IDA7IG4gPCBpcnFfbnI7IG4gKz0gMzIpIHsKKwkJdm9pZCBfX2lvbWVtICpiYXNlID0gaXJxX2Jhc2Uobik7CiAKLQkvKiBpbml0aWFsaXplIGludGVycnVwdCBwcmlvcml0eSAqLwotCWlmIChjcHVfaXNfcHhhMjd4KCkgfHwgY3B1X2lzX3B4YTN4eCgpKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBpcnFfbnI7IGkrKykKLQkJCUlQUihpKSA9IGkgfCAoMSA8PCAzMSk7CisJCV9fcmF3X3dyaXRlbCgwLCBiYXNlICsgSUNNUik7CS8qIGRpc2FibGUgYWxsIElSUXMgKi8KKwkJX19yYXdfd3JpdGVsKDAsIGJhc2UgKyBJQ0xSKTsJLyogYWxsIElSUXMgYXJlIElSUSwgbm90IEZJUSAqLworCQlmb3IgKGkgPSBuOyAoaSA8IChuICsgMzIpKSAmJiAoaSA8IGlycV9ucik7IGkrKykgeworCQkJLyogaW5pdGlhbGl6ZSBpbnRlcnJ1cHQgcHJpb3JpdHkgKi8KKwkJCWlmIChjcHVfaGFzX2lwcigpKQorCQkJCV9fcmF3X3dyaXRlbChpIHwgSVBSX1ZBTElELCBJUlFfQkFTRSArIElQUihpKSk7CisKKwkJCWlycSA9IFBYQV9JUlEoaSk7CisJCQlzZXRfaXJxX2NoaXAoaXJxLCAmcHhhX2ludGVybmFsX2lycV9jaGlwKTsKKwkJCXNldF9pcnFfY2hpcF9kYXRhKGlycSwgYmFzZSk7CisJCQlzZXRfaXJxX2hhbmRsZXIoaXJxLCBoYW5kbGVfbGV2ZWxfaXJxKTsKKwkJCXNldF9pcnFfZmxhZ3MoaXJxLCBJUlFGX1ZBTElEKTsKKwkJfQogCX0KIAogCS8qIG9ubHkgdW5tYXNrZWQgaW50ZXJydXB0cyBraWNrIHVzIG91dCBvZiBpZGxlICovCi0JSUNDUiA9IDE7Ci0KLQlmb3IgKGlycSA9IFBYQV9JUlEoMCk7IGlycSA8IFBYQV9JUlEoaXJxX25yKTsgaXJxKyspIHsKLQkJc2V0X2lycV9jaGlwKGlycSwgJnB4YV9pbnRlcm5hbF9pcnFfY2hpcCk7Ci0JCXNldF9pcnFfaGFuZGxlcihpcnEsIGhhbmRsZV9sZXZlbF9pcnEpOwotCQlzZXRfaXJxX2ZsYWdzKGlycSwgSVJRRl9WQUxJRCk7Ci0JfQorCV9fcmF3X3dyaXRlbCgxLCBpcnFfYmFzZSgwKSArIElDQ1IpOwogCiAJcHhhX2ludGVybmFsX2lycV9jaGlwLnNldF93YWtlID0gZm47CiAJcHhhX2luaXRfbG93X2dwaW9faXJxKGZuKTsKQEAgLTE1OCwxNiArMTk4LDE4IEBACiAKIHN0YXRpYyBpbnQgcHhhX2lycV9zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlpbnQgaSwgaXJxID0gUFhBX0lSUSgwKTsKKwlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGlycSA8IFBYQV9JUlEocHhhX2ludGVybmFsX2lycV9ucik7IGkrKywgaXJxICs9IDMyKSB7Ci0JCXNhdmVkX2ljbXJbaV0gPSBfSUNNUihpcnEpOwotCQlfSUNNUihpcnEpID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgcHhhX2ludGVybmFsX2lycV9ucjsgaSArPSAzMikgeworCQl2b2lkIF9faW9tZW0gKmJhc2UgPSBpcnFfYmFzZShpKTsKKworCQlzYXZlZF9pY21yW2ldID0gX19yYXdfcmVhZGwoYmFzZSArIElDTVIpOworCQlfX3Jhd193cml0ZWwoMCwgYmFzZSArIElDTVIpOwogCX0KIAotCWlmIChjcHVfaXNfcHhhMjd4KCkgfHwgY3B1X2lzX3B4YTN4eCgpKSB7CisJaWYgKGNwdV9oYXNfaXByKCkpIHsKIAkJZm9yIChpID0gMDsgaSA8IHB4YV9pbnRlcm5hbF9pcnFfbnI7IGkrKykKLQkJCXNhdmVkX2lwcltpXSA9IElQUihpKTsKKwkJCXNhdmVkX2lwcltpXSA9IF9fcmF3X3JlYWRsKElSUV9CQVNFICsgSVBSKGkpKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTE3NSwxOSArMjE3LDIwIEBACiAKIHN0YXRpYyBpbnQgcHhhX2lycV9yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKmRldikKIHsKLQlpbnQgaSwgaXJxID0gUFhBX0lSUSgwKTsKKwlpbnQgaTsKIAotCWlmIChjcHVfaXNfcHhhMjd4KCkgfHwgY3B1X2lzX3B4YTN4eCgpKSB7CisJZm9yIChpID0gMDsgaSA8IHB4YV9pbnRlcm5hbF9pcnFfbnI7IGkgKz0gMzIpIHsKKwkJdm9pZCBfX2lvbWVtICpiYXNlID0gaXJxX2Jhc2UoaSk7CisKKwkJX19yYXdfd3JpdGVsKHNhdmVkX2ljbXJbaV0sIGJhc2UgKyBJQ01SKTsKKwkJX19yYXdfd3JpdGVsKDAsIGJhc2UgKyBJQ0xSKTsKKwl9CisKKwlpZiAoIWNwdV9pc19weGEyNXgoKSkKIAkJZm9yIChpID0gMDsgaSA8IHB4YV9pbnRlcm5hbF9pcnFfbnI7IGkrKykKLQkJCUlQUihpKSA9IHNhdmVkX2lwcltpXTsKLQl9CisJCQlfX3Jhd193cml0ZWwoc2F2ZWRfaXByW2ldLCBJUlFfQkFTRSArIElQUihpKSk7CiAKLQlmb3IgKGkgPSAwOyBpcnEgPCBQWEFfSVJRKHB4YV9pbnRlcm5hbF9pcnFfbnIpOyBpKyssIGlycSArPSAzMikgewotCQlfSUNNUihpcnEpID0gc2F2ZWRfaWNtcltpXTsKLQkJX0lDTFIoaXJxKSA9IDA7Ci0JfQotCi0JSUNDUiA9IDE7CisJX19yYXdfd3JpdGVsKDEsIElSUV9CQVNFICsgSUNDUik7CiAJcmV0dXJuIDA7CiB9CiAjZWxzZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvbGl0dGxldG9uLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9saXR0bGV0b24uYwppbmRleCA0MWFhODllLi5jY2I3YmZhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9saXR0bGV0b24uYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9saXR0bGV0b24uYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3B4YTJ4eF9zcGkuaD4KICNpbmNsdWRlIDxsaW51eC9zbWM5MXguaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CkBAIC00Miw3ICs0Myw2IEBACiAjaW5jbHVkZSA8bWFjaC9weGEzMDAuaD4KICNpbmNsdWRlIDxtYWNoL3B4YWZiLmg+CiAjaW5jbHVkZSA8bWFjaC9tbWMuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YTJ4eF9zcGkuaD4KICNpbmNsdWRlIDxwbGF0L3B4YTI3eF9rZXlwYWQuaD4KICNpbmNsdWRlIDxtYWNoL2xpdHRsZXRvbi5oPgogI2luY2x1ZGUgPHBsYXQvaTJjLmg+CkBAIC00MzgsNyArNDM4LDcgQEAKIAogTUFDSElORV9TVEFSVChMSVRUTEVUT04sICJNYXJ2ZWxsIEZvcm0gRmFjdG9yIERldmVsb3BtZW50IFBsYXRmb3JtIChha2EgTGl0dGxldG9uKSIpCiAJLmJvb3RfcGFyYW1zCT0gMHhhMDAwMDEwMCwKLQkubWFwX2lvCQk9IHB4YV9tYXBfaW8sCisJLm1hcF9pbwkJPSBweGEzeHhfbWFwX2lvLAogCS5ucl9pcnFzCT0gTElUVExFVE9OX05SX0lSUVMsCiAJLmluaXRfaXJxCT0gcHhhM3h4X2luaXRfaXJxLAogCS50aW1lcgkJPSAmcHhhX3RpbWVyLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvbHBkMjcwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9scGQyNzAuYwppbmRleCA2MjNhZjAyLi44YWI2MmE2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9scGQyNzAuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9scGQyNzAuYwpAQCAtNDYsNiArNDYsNyBAQAogI2luY2x1ZGUgPG1hY2gvbW1jLmg+CiAjaW5jbHVkZSA8bWFjaC9pcmRhLmg+CiAjaW5jbHVkZSA8bWFjaC9vaGNpLmg+CisjaW5jbHVkZSA8bWFjaC9zbWVtYy5oPgogCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogI2luY2x1ZGUgImRldmljZXMuaCIKQEAgLTQ2Myw3ICs0NjQsNyBAQAogCXB4YV9zZXRfYnR1YXJ0X2luZm8oTlVMTCk7CiAJcHhhX3NldF9zdHVhcnRfaW5mbyhOVUxMKTsKIAotCWxwZDI3MF9mbGFzaF9kYXRhWzBdLndpZHRoID0gKEJPT1RfREVGICYgMSkgPyAyIDogNDsKKwlscGQyNzBfZmxhc2hfZGF0YVswXS53aWR0aCA9IChfX3Jhd19yZWFkbChCT09UX0RFRikgJiAxKSA/IDIgOiA0OwogCWxwZDI3MF9mbGFzaF9kYXRhWzFdLndpZHRoID0gNDsKIAogCS8qCkBAIC00OTUsNyArNDk2LDcgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IGxwZDI3MF9tYXBfaW8odm9pZCkKIHsKLQlweGFfbWFwX2lvKCk7CisJcHhhMjd4X21hcF9pbygpOwogCWlvdGFibGVfaW5pdChscGQyNzBfaW9fZGVzYywgQVJSQVlfU0laRShscGQyNzBfaW9fZGVzYykpOwogCiAJLyogZm9yIHVzZSBJIFNSQU0gYXMgZnJhbWVidWZmZXIuICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvbHViYm9jay5jIGIvYXJjaC9hcm0vbWFjaC1weGEvbHViYm9jay5jCmluZGV4IDE0OTk0OTMuLjMwNzJkYmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2x1YmJvY2suYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9sdWJib2NrLmMKQEAgLTI1LDcgKzI1LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvYWRzNzg0Ni5oPgotI2luY2x1ZGUgPG1hY2gvcHhhMnh4X3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9weGEyeHhfc3BpLmg+CiAKICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlIDxhc20vbWVtb3J5Lmg+CkBAIC01MCw2ICs1MCw3IEBACiAjaW5jbHVkZSA8bWFjaC9weGFmYi5oPgogI2luY2x1ZGUgPG1hY2gvbW1jLmg+CiAjaW5jbHVkZSA8bWFjaC9wbS5oPgorI2luY2x1ZGUgPG1hY2gvc21lbWMuaD4KIAogI2luY2x1ZGUgImdlbmVyaWMuaCIKICNpbmNsdWRlICJjbG9jay5oIgpAQCAtNTI1LDcgKzUyNiw3IEBACiAJcHhhX3NldF9hYzk3X2luZm8oTlVMTCk7CiAKIAlsdWJib2NrX2ZsYXNoX2RhdGFbMF0ud2lkdGggPSBsdWJib2NrX2ZsYXNoX2RhdGFbMV0ud2lkdGggPQotCQkoQk9PVF9ERUYgJiAxKSA/IDIgOiA0OworCQkoX19yYXdfcmVhZGwoQk9PVF9ERUYpICYgMSkgPyAyIDogNDsKIAkvKiBDb21wZW5zYXRlIGZvciB0aGUgblJPTUJUIHN3aXRjaCB3aGljaCBzd2FwcyB0aGUgZmxhc2ggYmFua3MgKi8KIAlwcmludGsoS0VSTl9OT1RJQ0UgIkx1YmJvY2sgY29uZmlndXJlZCB0byBib290IGZyb20gJXMgKGJhbmsgJWQpXG4iLAogCSAgICAgICBmbGFzaGJvb3Q/IkZsYXNoIjoiUk9NIiwgZmxhc2hib290KTsKQEAgLTU0OSw3ICs1NTAsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgbHViYm9ja19tYXBfaW8odm9pZCkKIHsKLQlweGFfbWFwX2lvKCk7CisJcHhhMjV4X21hcF9pbygpOwogCWlvdGFibGVfaW5pdChsdWJib2NrX2lvX2Rlc2MsIEFSUkFZX1NJWkUobHViYm9ja19pb19kZXNjKSk7CiAKIAlQQ0ZSIHw9IFBDRlJfT1BERTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL21hZ2ljaWFuLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9tYWdpY2lhbi5jCmluZGV4IDkwNjYzNzYuLjQxMTk4ZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL21hZ2ljaWFuLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvbWFnaWNpYW4uYwpAQCAtNzY1LDcgKzc2NSw3IEBACiAKIE1BQ0hJTkVfU1RBUlQoTUFHSUNJQU4sICJIVEMgTWFnaWNpYW4iKQogCS5ib290X3BhcmFtcyA9IDB4YTAwMDAxMDAsCi0JLm1hcF9pbyA9IHB4YV9tYXBfaW8sCisJLm1hcF9pbyA9IHB4YTI3eF9tYXBfaW8sCiAJLm5yX2lycXMgPSBNQUdJQ0lBTl9OUl9JUlFTLAogCS5pbml0X2lycSA9IHB4YTI3eF9pbml0X2lycSwKIAkuaW5pdF9tYWNoaW5lID0gbWFnaWNpYW5faW5pdCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL21haW5zdG9uZS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvbWFpbnN0b25lLmMKaW5kZXggYTk4MGE1Yy4uNzQwYzAzNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvbWFpbnN0b25lLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvbWFpbnN0b25lLmMKQEAgLTUxLDYgKzUxLDcgQEAKICNpbmNsdWRlIDxtYWNoL2lyZGEuaD4KICNpbmNsdWRlIDxtYWNoL29oY2kuaD4KICNpbmNsdWRlIDxwbGF0L3B4YTI3eF9rZXlwYWQuaD4KKyNpbmNsdWRlIDxtYWNoL3NtZW1jLmg+CiAKICNpbmNsdWRlICJnZW5lcmljLmgiCiAjaW5jbHVkZSAiZGV2aWNlcy5oIgpAQCAtNTY1LDcgKzU2Niw3IEBACiAJcHhhX3NldF9idHVhcnRfaW5mbyhOVUxMKTsKIAlweGFfc2V0X3N0dWFydF9pbmZvKE5VTEwpOwogCi0JbXN0X2ZsYXNoX2RhdGFbMF0ud2lkdGggPSAoQk9PVF9ERUYgJiAxKSA/IDIgOiA0OworCW1zdF9mbGFzaF9kYXRhWzBdLndpZHRoID0gKF9fcmF3X3JlYWRsKEJPT1RfREVGKSAmIDEpID8gMiA6IDQ7CiAJbXN0X2ZsYXNoX2RhdGFbMV0ud2lkdGggPSA0OwogCiAJLyogQ29tcGVuc2F0ZSBmb3IgU1c3IHdoaWNoIHN3YXBzIHRoZSBmbGFzaCBiYW5rcyAqLwpAQCAtNjE0LDcgKzYxNSw3IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBtYWluc3RvbmVfbWFwX2lvKHZvaWQpCiB7Ci0JcHhhX21hcF9pbygpOworCXB4YTI3eF9tYXBfaW8oKTsKIAlpb3RhYmxlX2luaXQobWFpbnN0b25lX2lvX2Rlc2MsIEFSUkFZX1NJWkUobWFpbnN0b25lX2lvX2Rlc2MpKTsKIAogIAkvKglmb3IgdXNlIEkgU1JBTSBhcyBmcmFtZWJ1ZmZlci4JKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL21pb2E3MDEuYyBiL2FyY2gvYXJtL21hY2gtcHhhL21pb2E3MDEuYwppbmRleCBmNWZiOTE1Li5mYWFmZWEzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9taW9hNzAxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvbWlvYTcwMS5jCkBAIC04MTksNyArODE5LDcgQEAKIAogTUFDSElORV9TVEFSVChNSU9BNzAxLCAiTUlPIEE3MDEiKQogCS5ib290X3BhcmFtcwk9IDB4YTAwMDAxMDAsCi0JLm1hcF9pbwkJPSAmcHhhX21hcF9pbywKKwkubWFwX2lvCQk9ICZweGEyN3hfbWFwX2lvLAogCS5pbml0X2lycQk9ICZweGEyN3hfaW5pdF9pcnEsCiAJLmluaXRfbWFjaGluZQk9IG1pb2E3MDFfbWFjaGluZV9pbml0LAogCS50aW1lcgkJPSAmcHhhX3RpbWVyLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvbXA5MDAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL21wOTAwLmMKaW5kZXggMTE2MTY3YWEuLjU5Y2NlNzggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL21wOTAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvbXA5MDAuYwpAQCAtOTQsNyArOTQsNyBAQAogTUFDSElORV9TVEFSVChORUNfTVA5MDAsICJNb2JpbGVQcm85MDAvQyIpCiAJLmJvb3RfcGFyYW1zCT0gMHhhMDIyMDEwMCwKIAkudGltZXIJCT0gJnB4YV90aW1lciwKLQkubWFwX2lvCQk9IHB4YV9tYXBfaW8sCisJLm1hcF9pbwkJPSBweGEyNXhfbWFwX2lvLAogCS5pbml0X2lycQk9IHB4YTI1eF9pbml0X2lycSwKIAkuaW5pdF9tYWNoaW5lCT0gbXA5MDBjX2luaXQsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcGFsbWxkLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9wYWxtbGQuYwppbmRleCBjZTA5MmM1Li5hNmY4OThjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9wYWxtbGQuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9wYWxtbGQuYwpAQCAtMzEzLDcgKzMxMyw3IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBwYWxtbGRfbWFwX2lvKHZvaWQpCiB7Ci0JcHhhX21hcF9pbygpOworCXB4YTI3eF9tYXBfaW8oKTsKIAlpb3RhYmxlX2luaXQocGFsbWxkX2lvX2Rlc2MsIEFSUkFZX1NJWkUocGFsbWxkX2lvX2Rlc2MpKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXQ1LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9wYWxtdDUuYwppbmRleCA4NjJkYTgxLi5kZjRkN2QwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9wYWxtdDUuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9wYWxtdDUuYwpAQCAtMjAzLDcgKzIwMyw3IEBACiAKIE1BQ0hJTkVfU1RBUlQoUEFMTVQ1LCAiUGFsbSBUdW5nc3RlbnxUNSIpCiAJLmJvb3RfcGFyYW1zCT0gMHhhMDAwMDEwMCwKLQkubWFwX2lvCQk9IHB4YV9tYXBfaW8sCisJLm1hcF9pbwkJPSBweGEyN3hfbWFwX2lvLAogCS5yZXNlcnZlCT0gcGFsbXQ1X3Jlc2VydmUsCiAJLmluaXRfaXJxCT0gcHhhMjd4X2luaXRfaXJxLAogCS50aW1lcgkJPSAmcHhhX3RpbWVyLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXRjLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9wYWxtdGMuYwppbmRleCAyMTMxZDU4Li5hMDlhMjM3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9wYWxtdGMuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9wYWxtdGMuYwpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3Bvd2VyX3N1cHBseS5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW9fa2V5cy5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CisjaW5jbHVkZSA8bGludXgvdXNiL2dwaW9fdmJ1cy5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CkBAIC0xMTYsNiArMTE3LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFNEL01NQyBjYXJkIGNvbnRyb2xsZXIKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWYgZGVmaW5lZChDT05GSUdfTU1DX1BYQSkgfHwgZGVmaW5lZChDT05GSUdfTU1DX1BYQV9NT0RVTEUpCiBzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIHBhbG10Y19tY2lfcGxhdGZvcm1fZGF0YSA9IHsKIAkub2NyX21hc2sJCT0gTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQsCiAJLmdwaW9fcG93ZXIJCT0gR1BJT19OUl9QQUxNVENfU0RfUE9XRVIsCkBAIC0xMjQsOSArMTI2LDE4IEBACiAJLmRldGVjdF9kZWxheV9tcwk9IDIwMCwKIH07CiAKK3N0YXRpYyB2b2lkIF9faW5pdCBwYWxtdGNfbW1jX2luaXQodm9pZCkKK3sKKwlweGFfc2V0X21jaV9pbmZvKCZwYWxtdGNfbWNpX3BsYXRmb3JtX2RhdGEpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBwYWxtdGNfbW1jX2luaXQodm9pZCkge30KKyNlbmRpZgorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBHUElPIGtleXMKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWYgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfR1BJTykgfHwgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfR1BJT19NT0RVTEUpCiBzdGF0aWMgc3RydWN0IGdwaW9fa2V5c19idXR0b24gcGFsbXRjX3B4YV9idXR0b25zW10gPSB7CiAJe0tFWV9GOCwgR1BJT19OUl9QQUxNVENfSE9UU1lOQ19CVVRUT04sIDEsICJIb3RTeW5jIEJ1dHRvbiIsIEVWX0tFWSwgMX0sCiB9OwpAQCAtMTQ0LDkgKzE1NSwxOCBAQAogCX0sCiB9OwogCitzdGF0aWMgdm9pZCBfX2luaXQgcGFsbXRjX2tleXNfaW5pdCh2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcGFsbXRjX3B4YV9rZXlzKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgcGFsbXRjX2tleXNfaW5pdCh2b2lkKSB7fQorI2VuZGlmCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIEJhY2tsaWdodAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZiBkZWZpbmVkKENPTkZJR19CQUNLTElHSFRfUFdNKSB8fCBkZWZpbmVkKENPTkZJR19CQUNLTElHSFRfUFdNX01PRFVMRSkKIHN0YXRpYyBpbnQgcGFsbXRjX2JhY2tsaWdodF9pbml0KHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlpbnQgcmV0OwpAQCAtMTk2LDE3ICsyMTYsMzUgQEAKIAl9LAogfTsKIAorc3RhdGljIHZvaWQgX19pbml0IHBhbG10Y19wd21faW5pdCh2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcGFsbXRjX2JhY2tsaWdodCk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHBhbG10Y19wd21faW5pdCh2b2lkKSB7fQorI2VuZGlmCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIElyREEKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWYgZGVmaW5lZChDT05GSUdfSVJEQSkgfHwgZGVmaW5lZChDT05GSUdfSVJEQV9NT0RVTEUpCiBzdGF0aWMgc3RydWN0IHB4YWZpY3BfcGxhdGZvcm1fZGF0YSBwYWxtdGNfZmljcF9wbGF0Zm9ybV9kYXRhID0gewogCS5ncGlvX3B3ZG93bgkJPSBHUElPX05SX1BBTE1UQ19JUl9ESVNBQkxFLAogCS50cmFuc2NlaXZlcl9jYXAJPSBJUl9TSVJNT0RFIHwgSVJfT0ZGLAogfTsKIAorc3RhdGljIHZvaWQgX19pbml0IHBhbG10Y19pcmRhX2luaXQodm9pZCkKK3sKKwlweGFfc2V0X2ZpY3BfaW5mbygmcGFsbXRjX2ZpY3BfcGxhdGZvcm1fZGF0YSk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHBhbG10Y19pcmRhX2luaXQodm9pZCkge30KKyNlbmRpZgorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBLZXlib2FyZAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZiBkZWZpbmVkKENPTkZJR19LRVlCT0FSRF9NQVRSSVgpIHx8IGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX01BVFJJWF9NT0RVTEUpCiBzdGF0aWMgY29uc3QgdWludDMyX3QgcGFsbXRjX21hdHJpeF9rZXlzW10gPSB7CiAJS0VZKDAsIDAsIEtFWV9GMSksCiAJS0VZKDAsIDEsIEtFWV9YKSwKQEAgLTI5MCwyNyArMzI4LDEwMyBAQAogCQkucGxhdGZvcm1fZGF0YSA9ICZwYWxtdGNfa2V5cGFkX3BsYXRmb3JtX2RhdGEsCiAJfSwKIH07CitzdGF0aWMgdm9pZCBfX2luaXQgcGFsbXRjX21rcF9pbml0KHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZwYWxtdGNfa2V5Ym9hcmQpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBwYWxtdGNfbWtwX2luaXQodm9pZCkge30KKyNlbmRpZgogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBVREMKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgc3RydWN0IHB4YTJ4eF91ZGNfbWFjaF9pbmZvIHBhbG10Y191ZGNfaW5mbyBfX2luaXRkYXRhID0geworI2lmIGRlZmluZWQoQ09ORklHX1VTQl9HQURHRVRfUFhBMjVYKXx8ZGVmaW5lZChDT05GSUdfVVNCX0dBREdFVF9QWEEyNVhfTU9EVUxFKQorc3RhdGljIHN0cnVjdCBncGlvX3ZidXNfbWFjaF9pbmZvIHBhbG10Y191ZGNfaW5mbyA9IHsKIAkuZ3Bpb192YnVzCQk9IEdQSU9fTlJfUEFMTVRDX1VTQl9ERVRFQ1RfTiwKIAkuZ3Bpb192YnVzX2ludmVydGVkCT0gMSwKIAkuZ3Bpb19wdWxsdXAJCT0gR1BJT19OUl9QQUxNVENfVVNCX1BPV0VSLAogfTsKIAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGFsbXRjX2dwaW9fdmJ1cyA9IHsKKwkubmFtZQk9ICJncGlvLXZidXMiLAorCS5pZAk9IC0xLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnBhbG10Y191ZGNfaW5mbywKKwl9LAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IHBhbG10Y191ZGNfaW5pdCh2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcGFsbXRjX2dwaW9fdmJ1cyk7Cit9OworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBwYWxtdGNfdWRjX2luaXQodm9pZCkge30KKyNlbmRpZgorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBUb3VjaHNjcmVlbiAvIEJhdHRlcnkgLyBHUElPLWV4dGVuZGVyCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGFsbXRjX3VjYjE0MDBfY29yZSA9IHsKKyNpZglkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9VQ0IxNDAwKSB8fCBcCisJZGVmaW5lZChDT05GSUdfVE9VQ0hTQ1JFRU5fVUNCMTQwMF9NT0RVTEUpCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBwYWxtdGNfdWNiMTQwMF9kZXZpY2UgPSB7CiAJLm5hbWUJPSAidWNiMTQwMF9jb3JlIiwKIAkuaWQJPSAtMSwKIH07CiAKK3N0YXRpYyB2b2lkIF9faW5pdCBwYWxtdGNfdHNfaW5pdCh2b2lkKQoreworCXB4YV9zZXRfYWM5N19pbmZvKE5VTEwpOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcGFsbXRjX3VjYjE0MDBfZGV2aWNlKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgcGFsbXRjX3RzX2luaXQodm9pZCkge30KKyNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBMRURzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmIGRlZmluZWQoQ09ORklHX0xFRFNfR1BJTykgfHwgZGVmaW5lZChDT05GSUdfTEVEU19HUElPX01PRFVMRSkKK3N0cnVjdCBncGlvX2xlZCBwYWxtdGNfZ3Bpb19sZWRzW10gPSB7Cit7CisJLm5hbWUJCQk9ICJwYWxtdGM6Z3JlZW46dXNlciIsCisJLmRlZmF1bHRfdHJpZ2dlcgk9ICJub25lIiwKKwkuZ3BpbwkJCT0gR1BJT19OUl9QQUxNVENfTEVEX1BPV0VSLAorCS5hY3RpdmVfbG93CQk9IDEsCit9LCB7CisJLm5hbWUJCQk9ICJwYWxtdGM6dmlicmE6dmlicmEiLAorCS5kZWZhdWx0X3RyaWdnZXIJPSAibm9uZSIsCisJLmdwaW8JCQk9IEdQSU9fTlJfUEFMTVRDX1ZJQlJBX1BPV0VSLAorCS5hY3RpdmVfbG93CQk9IDEsCit9CisKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWRfcGxhdGZvcm1fZGF0YSBwYWxtdGNfZ3Bpb19sZWRfaW5mbyA9IHsKKwkubGVkcwkJPSBwYWxtdGNfZ3Bpb19sZWRzLAorCS5udW1fbGVkcwk9IEFSUkFZX1NJWkUocGFsbXRjX2dwaW9fbGVkcyksCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBwYWxtdGNfbGVkcyA9IHsKKwkubmFtZQk9ICJsZWRzLWdwaW8iLAorCS5pZAk9IC0xLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnBhbG10Y19ncGlvX2xlZF9pbmZvLAorCX0KK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBwYWxtdGNfbGVkc19pbml0KHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZwYWxtdGNfbGVkcyk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHBhbG10Y19sZWRzX2luaXQodm9pZCkge30KKyNlbmRpZgorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBOT1IgRmxhc2gKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWYgZGVmaW5lZChDT05GSUdfTVREX1BIWVNNQVApIHx8IGRlZmluZWQoQ09ORklHX01URF9QSFlTTUFQX01PRFVMRSkKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcGFsbXRjX2ZsYXNoX3Jlc291cmNlID0gewogCS5zdGFydAk9IFBYQV9DUzBfUEhZUywKIAkuZW5kCT0gUFhBX0NTMF9QSFlTICsgU1pfMTZNIC0gMSwKQEAgLTM1NiwyNCArNDcwLDMzIEBACiAJfSwKIH07CiAKK3N0YXRpYyB2b2lkIF9faW5pdCBwYWxtdGNfbm9yX2luaXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnBhbG10Y19mbGFzaCk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHBhbG10Y19ub3JfaW5pdCh2b2lkKSB7fQorI2VuZGlmCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIEZyYW1lYnVmZmVyCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmIGRlZmluZWQoQ09ORklHX0ZCX1BYQSkgfHwgZGVmaW5lZChDT05GSUdfRkJfUFhBX01PRFVMRSkKIHN0YXRpYyBzdHJ1Y3QgcHhhZmJfbW9kZV9pbmZvIHBhbG10Y19sY2RfbW9kZXNbXSA9IHsKLXsKLQkucGl4Y2xvY2sJPSAxMTUzODQsCi0JLnhyZXMJCT0gMzIwLAotCS55cmVzCQk9IDMyMCwKLQkuYnBwCQk9IDE2LAorCXsKKwkJLnBpeGNsb2NrCT0gMTE1Mzg0LAorCQkueHJlcwkJPSAzMjAsCisJCS55cmVzCQk9IDMyMCwKKwkJLmJwcAkJPSAxNiwKIAotCS5sZWZ0X21hcmdpbgk9IDI3LAotCS5yaWdodF9tYXJnaW4JPSA3LAotCS51cHBlcl9tYXJnaW4JPSA3LAotCS5sb3dlcl9tYXJnaW4JPSA4LAorCQkubGVmdF9tYXJnaW4JPSAyNywKKwkJLnJpZ2h0X21hcmdpbgk9IDcsCisJCS51cHBlcl9tYXJnaW4JPSA3LAorCQkubG93ZXJfbWFyZ2luCT0gOCwKIAotCS5oc3luY19sZW4JPSA2LAotCS52c3luY19sZW4JPSAxLAotfSwKKwkJLmhzeW5jX2xlbgk9IDYsCisJCS52c3luY19sZW4JPSAxLAorCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHB4YWZiX21hY2hfaW5mbyBwYWxtdGNfbGNkX3NjcmVlbiA9IHsKQEAgLTM4MiwxNyArNTA1LDE3IEBACiAJLmxjZF9jb25uCQk9IExDRF9DT0xPUl9URlRfMTZCUFAgfCBMQ0RfUENMS19FREdFX0ZBTEwsCiB9OwogCitzdGF0aWMgdm9pZCBfX2luaXQgcGFsbXRjX2xjZF9pbml0KHZvaWQpCit7CisJc2V0X3B4YV9mYl9pbmZvKCZwYWxtdGNfbGNkX3NjcmVlbik7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHBhbG10Y19sY2RfaW5pdCh2b2lkKSB7fQorI2VuZGlmCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIE1hY2hpbmUgaW5pdAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKLQkmcGFsbXRjX2JhY2tsaWdodCwKLQkmcGFsbXRjX3VjYjE0MDBfY29yZSwKLQkmcGFsbXRjX2tleWJvYXJkLAotCSZwYWxtdGNfcHhhX2tleXMsCi0JJnBhbG10Y19mbGFzaCwKLX07Ci0KIHN0YXRpYyB2b2lkIF9faW5pdCBwYWxtdGNfaW5pdCh2b2lkKQogewogCXB4YTJ4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKHBhbG10Y19waW5fY29uZmlnKSk7CkBAIC00MDIsMTggKzUyNSwyMSBAQAogCXB4YV9zZXRfc3R1YXJ0X2luZm8oTlVMTCk7CiAJcHhhX3NldF9od3VhcnRfaW5mbyhOVUxMKTsKIAotCXNldF9weGFfZmJfaW5mbygmcGFsbXRjX2xjZF9zY3JlZW4pOwotCXB4YV9zZXRfbWNpX2luZm8oJnBhbG10Y19tY2lfcGxhdGZvcm1fZGF0YSk7Ci0JcHhhX3NldF91ZGNfaW5mbygmcGFsbXRjX3VkY19pbmZvKTsKLQlweGFfc2V0X2FjOTdfaW5mbyhOVUxMKTsKLQlweGFfc2V0X2ZpY3BfaW5mbygmcGFsbXRjX2ZpY3BfcGxhdGZvcm1fZGF0YSk7Ci0KLQlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKKwlwYWxtdGNfbW1jX2luaXQoKTsKKwlwYWxtdGNfa2V5c19pbml0KCk7CisJcGFsbXRjX3B3bV9pbml0KCk7CisJcGFsbXRjX2lyZGFfaW5pdCgpOworCXBhbG10Y19ta3BfaW5pdCgpOworCXBhbG10Y191ZGNfaW5pdCgpOworCXBhbG10Y190c19pbml0KCk7CisJcGFsbXRjX25vcl9pbml0KCk7CisJcGFsbXRjX2xjZF9pbml0KCk7CisJcGFsbXRjX2xlZHNfaW5pdCgpOwogfTsKIAogTUFDSElORV9TVEFSVChQQUxNVEMsICJQYWxtIFR1bmdzdGVufEMiKQogCS5ib290X3BhcmFtcyAJPSAweGEwMDAwMTAwLAotCS5tYXBfaW8JCT0gcHhhX21hcF9pbywKKwkubWFwX2lvCQk9IHB4YTI1eF9tYXBfaW8sCiAJLmluaXRfaXJxCT0gcHhhMjV4X2luaXRfaXJxLAogCS50aW1lcgkJPSAmcHhhX3RpbWVyLAogCS5pbml0X21hY2hpbmUJPSBwYWxtdGNfaW5pdApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXRlMi5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXRlMi5jCmluZGV4IGE5ZGFlN2IuLjNmMjUwMTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3BhbG10ZTIuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9wYWxtdGUyLmMKQEAgLTM3NCw3ICszNzQsNyBAQAogCiBNQUNISU5FX1NUQVJUKFBBTE1URTIsICJQYWxtIFR1bmdzdGVufEUyIikKIAkuYm9vdF9wYXJhbXMJPSAweGEwMDAwMTAwLAotCS5tYXBfaW8JCT0gcHhhX21hcF9pbywKKwkubWFwX2lvCQk9IHB4YTI1eF9tYXBfaW8sCiAJLmluaXRfaXJxCT0gcHhhMjV4X2luaXRfaXJxLAogCS50aW1lcgkJPSAmcHhhX3RpbWVyLAogCS5pbml0X21hY2hpbmUJPSBwYWxtdGUyX2luaXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3BhbG10cmVvLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9wYWxtdHJlby5jCmluZGV4IDAwZTJkN2IuLjhhYWRhZDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3BhbG10cmVvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXRyZW8uYwpAQCAtNDQyLDcgKzQ0Miw3IEBACiAKIE1BQ0hJTkVfU1RBUlQoVFJFTzY4MCwgIlBhbG0gVHJlbyA2ODAiKQogCS5ib290X3BhcmFtcyAgICA9IDB4YTAwMDAxMDAsCi0JLm1hcF9pbyAgICAgICAgID0gcHhhX21hcF9pbywKKwkubWFwX2lvICAgICAgICAgPSBweGEyN3hfbWFwX2lvLAogCS5yZXNlcnZlCT0gdHJlb19yZXNlcnZlLAogCS5pbml0X2lycSAgICAgICA9IHB4YTI3eF9pbml0X2lycSwKIAkudGltZXIgICAgICAgICAgPSAmcHhhX3RpbWVyLApAQCAtNDUxLDcgKzQ1MSw3IEBACiAKIE1BQ0hJTkVfU1RBUlQoQ0VOVFJPLCAiUGFsbSBDZW50cm8gNjg1IikKIAkuYm9vdF9wYXJhbXMgICAgPSAweGEwMDAwMTAwLAotCS5tYXBfaW8gICAgICAgICA9IHB4YV9tYXBfaW8sCisJLm1hcF9pbyAgICAgICAgID0gcHhhMjd4X21hcF9pbywKIAkucmVzZXJ2ZQk9IHRyZW9fcmVzZXJ2ZSwKIAkuaW5pdF9pcnEgICAgICAgPSBweGEyN3hfaW5pdF9pcnEsCiAJLnRpbWVyICAgICAgICAgID0gJnB4YV90aW1lciwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3BhbG10eC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXR4LmMKaW5kZXggZTVjOTkzMi4uNTk1ZjAwMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXR4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXR4LmMKQEAgLTMzNCw3ICszMzQsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgcGFsbXR4X21hcF9pbyh2b2lkKQogewotCXB4YV9tYXBfaW8oKTsKKwlweGEyN3hfbWFwX2lvKCk7CiAJaW90YWJsZV9pbml0KHBhbG10eF9pb19kZXNjLCBBUlJBWV9TSVpFKHBhbG10eF9pb19kZXNjKSk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3BhbG16NzIuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3BhbG16NzIuYwppbmRleCBhZjYyMDNmLi43YmY0MDE3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9wYWxtejcyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXo3Mi5jCkBAIC0yODAsNyArMjgwLDcgQEAKIAogTUFDSElORV9TVEFSVChQQUxNWjcyLCAiUGFsbSBaaXJlNzIiKQogCS5ib290X3BhcmFtcwk9IDB4YTAwMDAxMDAsCi0JLm1hcF9pbwkJPSBweGFfbWFwX2lvLAorCS5tYXBfaW8JCT0gcHhhMjd4X21hcF9pbywKIAkuaW5pdF9pcnEJPSBweGEyN3hfaW5pdF9pcnEsCiAJLnRpbWVyCQk9ICZweGFfdGltZXIsCiAJLmluaXRfbWFjaGluZQk9IHBhbG16NzJfaW5pdApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcGNtMDI3LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9wY20wMjcuYwppbmRleCBjNzdlOGYzLi4xZmM4YTY2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9wY20wMjcuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9wY20wMjcuYwpAQCAtMjUsMTIgKzI1LDEyIEBACiAjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL21heDczMDEuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvcHhhMnh4X3NwaS5oPgogI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPG1hY2gvcHhhMjd4Lmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEyeHhfc3BpLmg+CiAjaW5jbHVkZSA8bWFjaC9wY20wMjcuaD4KICNpbmNsdWRlICJnZW5lcmljLmgiCiAKQEAgLTI0NCw3ICsyNDQsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgcGNtMDI3X21hcF9pbyh2b2lkKQogewotCXB4YV9tYXBfaW8oKTsKKwlweGEyN3hfbWFwX2lvKCk7CiAKIAkvKiBpbml0aWFsaXplIHNsZWVwIG1vZGUgcmVncyAod2FrZS11cCBzb3VyY2VzLCBldGMpICovCiAJUEdTUjAgPSAweDAxMzA4MDAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcG9vZGxlLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9wb29kbGUuYwppbmRleCA5M2ExOTFjLi40ZjBmZjFhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9wb29kbGUuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9wb29kbGUuYwpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvYWRzNzg0Ni5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9weGEyeHhfc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3NoYXJwc2wuaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KQEAgLTQzLDcgKzQ0LDYgQEAKICNpbmNsdWRlIDxtYWNoL2lyZGEuaD4KICNpbmNsdWRlIDxtYWNoL3Bvb2RsZS5oPgogI2luY2x1ZGUgPG1hY2gvcHhhZmIuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YTJ4eF9zcGkuaD4KICNpbmNsdWRlIDxwbGF0L2kyYy5oPgogCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL3Njb29wLmg+CkBAIC00NjYsNyArNDY2LDcgQEAKIAogTUFDSElORV9TVEFSVChQT09ETEUsICJTSEFSUCBQb29kbGUiKQogCS5maXh1cAkJPSBmaXh1cF9wb29kbGUsCi0JLm1hcF9pbwkJPSBweGFfbWFwX2lvLAorCS5tYXBfaW8JCT0gcHhhMjV4X21hcF9pbywKIAkubnJfaXJxcwk9IFBPT0RMRV9OUl9JUlFTLAkvKiA0IGZvciBMb0NvTW8gKi8KIAkuaW5pdF9pcnEJPSBweGEyNXhfaW5pdF9pcnEsCiAJLnRpbWVyCQk9ICZweGFfdGltZXIsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9weGEyNXguYyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTI1eC5jCmluZGV4IGRlNTNmMmUuLjNmNTI0MWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTI1eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTI1eC5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgogCisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgogI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgpAQCAtMzAsNiArMzEsNyBAQAogI2luY2x1ZGUgPG1hY2gvcmVzZXQuaD4KICNpbmNsdWRlIDxtYWNoL3BtLmg+CiAjaW5jbHVkZSA8bWFjaC9kbWEuaD4KKyNpbmNsdWRlIDxtYWNoL3NtZW1jLmg+CiAKICNpbmNsdWRlICJnZW5lcmljLmgiCiAjaW5jbHVkZSAiZGV2aWNlcy5oIgpAQCAtOTAsMjMgKzkyLDIxIEBACiAJcmV0dXJuICh0dXJibyAmIDEpID8gKE4vMTAwMCkgOiAoTS8xMDAwKTsKIH0KIAotLyoKLSAqIFJldHVybiB0aGUgY3VycmVudCBtZW1vcnkgY2xvY2sgZnJlcXVlbmN5IGluIHVuaXRzIG9mIDEwa0h6Ci0gKi8KLXVuc2lnbmVkIGludCBweGEyNXhfZ2V0X21lbWNsa19mcmVxdWVuY3lfMTBraHoodm9pZCkKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNsa19weGEyNXhfbWVtX2dldHJhdGUoc3RydWN0IGNsayAqY2xrKQogewotCXJldHVybiBMX2Nsa19tdWx0WyhDQ0NSID4+IDApICYgMHgxZl0gKiBCQVNFX0NMSyAvIDEwMDAwOworCXJldHVybiBMX2Nsa19tdWx0WyhDQ0NSID4+IDApICYgMHgxZl0gKiBCQVNFX0NMSzsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgY2xrX3B4YTI1eF9sY2RfZ2V0cmF0ZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JcmV0dXJuIHB4YTI1eF9nZXRfbWVtY2xrX2ZyZXF1ZW5jeV8xMGtoeigpICogMTAwMDA7Ci19CitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa29wcyBjbGtfcHhhMjV4X21lbV9vcHMgPSB7CisJLmVuYWJsZQkJPSBjbGtfZHVtbXlfZW5hYmxlLAorCS5kaXNhYmxlCT0gY2xrX2R1bW15X2Rpc2FibGUsCisJLmdldHJhdGUJPSBjbGtfcHhhMjV4X21lbV9nZXRyYXRlLAorfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtvcHMgY2xrX3B4YTI1eF9sY2Rfb3BzID0gewotCS5lbmFibGUJCT0gY2xrX2NrZW5fZW5hYmxlLAotCS5kaXNhYmxlCT0gY2xrX2NrZW5fZGlzYWJsZSwKLQkuZ2V0cmF0ZQk9IGNsa19weGEyNXhfbGNkX2dldHJhdGUsCisJLmVuYWJsZQkJPSBjbGtfcHhhMnh4X2NrZW5fZW5hYmxlLAorCS5kaXNhYmxlCT0gY2xrX3B4YTJ4eF9ja2VuX2Rpc2FibGUsCisJLmdldHJhdGUJPSBjbGtfcHhhMjV4X21lbV9nZXRyYXRlLAogfTsKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgZ3BpbzEyX2NvbmZpZ18zMmtbXSA9IHsKQEAgLTE2MCwzMSArMTYwLDMwIEBACiAgKiA5NS44NDJNSHogLT4gTU1DIDE5LjE2OU1IeiwgSTJDIDMxLjk0OU1IeiwgRklDUCA0Ny45MjNNSHosIFVTQiA0Ny45MjNNSHoKICAqIDE0Ny40NTZNSHogLT4gVUFSVCAxNC43NDU2TUh6LCBBQzk3IDEyLjI4OE1IeiwgSTJTIDUuNjcyTUh6IChhbGxlZ2VkbHkpCiAgKi8KLXN0YXRpYyBERUZJTkVfQ0tFTihweGEyNXhfaHd1YXJ0LCBIV1VBUlQsIDE0NzQ1NjAwLCAxKTsKLQotc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIHB4YTI1eF9od3VhcnRfY2xrcmVnID0KLQlJTklUX0NMS1JFRygmY2xrX3B4YTI1eF9od3VhcnQsICJweGEyeHgtdWFydC4zIiwgTlVMTCk7CiAKIC8qCiAgKiBQWEEgMnh4IGNsb2NrIGRlY2xhcmF0aW9ucy4KICAqLworc3RhdGljIERFRklORV9QWEEyX0NLRU4ocHhhMjV4X2h3dWFydCwgSFdVQVJULCAxNDc0NTYwMCwgMSk7CitzdGF0aWMgREVGSU5FX1BYQTJfQ0tFTihweGEyNXhfZmZ1YXJ0LCBGRlVBUlQsIDE0NzQ1NjAwLCAxKTsKK3N0YXRpYyBERUZJTkVfUFhBMl9DS0VOKHB4YTI1eF9idHVhcnQsIEJUVUFSVCwgMTQ3NDU2MDAsIDEpOworc3RhdGljIERFRklORV9QWEEyX0NLRU4ocHhhMjV4X3N0dWFydCwgU1RVQVJULCAxNDc0NTYwMCwgMSk7CitzdGF0aWMgREVGSU5FX1BYQTJfQ0tFTihweGEyNXhfdXNiLCBVU0IsIDQ3OTIzMDAwLCA1KTsKK3N0YXRpYyBERUZJTkVfUFhBMl9DS0VOKHB4YTI1eF9tbWMsIE1NQywgMTkxNjkwMDAsIDApOworc3RhdGljIERFRklORV9QWEEyX0NLRU4ocHhhMjV4X2kyYywgSTJDLCAzMTk0OTAwMCwgMCk7CitzdGF0aWMgREVGSU5FX1BYQTJfQ0tFTihweGEyNXhfc3NwLCBTU1AsIDM2ODY0MDAsIDApOworc3RhdGljIERFRklORV9QWEEyX0NLRU4ocHhhMjV4X25zc3AsIE5TU1AsIDM2ODY0MDAsIDApOworc3RhdGljIERFRklORV9QWEEyX0NLRU4ocHhhMjV4X2Fzc3AsIEFTU1AsIDM2ODY0MDAsIDApOworc3RhdGljIERFRklORV9QWEEyX0NLRU4ocHhhMjV4X3B3bTAsIFBXTTAsIDM2ODY0MDAsIDApOworc3RhdGljIERFRklORV9QWEEyX0NLRU4ocHhhMjV4X3B3bTEsIFBXTTEsIDM2ODY0MDAsIDApOworc3RhdGljIERFRklORV9QWEEyX0NLRU4ocHhhMjV4X2FjOTcsIEFDOTcsIDI0NTc2MDAwLCAwKTsKK3N0YXRpYyBERUZJTkVfUFhBMl9DS0VOKHB4YTI1eF9pMnMsIEkyUywgMTQ3NDU2MDAsIDApOworc3RhdGljIERFRklORV9QWEEyX0NLRU4ocHhhMjV4X2ZpY3AsIEZJQ1AsIDQ3OTIzMDAwLCAwKTsKKwogc3RhdGljIERFRklORV9DSyhweGEyNXhfbGNkLCBMQ0QsICZjbGtfcHhhMjV4X2xjZF9vcHMpOwotc3RhdGljIERFRklORV9DS0VOKHB4YTI1eF9mZnVhcnQsIEZGVUFSVCwgMTQ3NDU2MDAsIDEpOwotc3RhdGljIERFRklORV9DS0VOKHB4YTI1eF9idHVhcnQsIEJUVUFSVCwgMTQ3NDU2MDAsIDEpOwotc3RhdGljIERFRklORV9DS0VOKHB4YTI1eF9zdHVhcnQsIFNUVUFSVCwgMTQ3NDU2MDAsIDEpOwotc3RhdGljIERFRklORV9DS0VOKHB4YTI1eF91c2IsIFVTQiwgNDc5MjMwMDAsIDUpOwogc3RhdGljIERFRklORV9DTEsocHhhMjV4X2dwaW8xMSwgJmNsa19weGEyNXhfZ3BpbzExX29wcywgMzY4NjQwMCwgMCk7CiBzdGF0aWMgREVGSU5FX0NMSyhweGEyNXhfZ3BpbzEyLCAmY2xrX3B4YTI1eF9ncGlvMTJfb3BzLCAzMjc2OCwgMCk7Ci1zdGF0aWMgREVGSU5FX0NLRU4ocHhhMjV4X21tYywgTU1DLCAxOTE2OTAwMCwgMCk7Ci1zdGF0aWMgREVGSU5FX0NLRU4ocHhhMjV4X2kyYywgSTJDLCAzMTk0OTAwMCwgMCk7Ci1zdGF0aWMgREVGSU5FX0NLRU4ocHhhMjV4X3NzcCwgU1NQLCAzNjg2NDAwLCAwKTsKLXN0YXRpYyBERUZJTkVfQ0tFTihweGEyNXhfbnNzcCwgTlNTUCwgMzY4NjQwMCwgMCk7Ci1zdGF0aWMgREVGSU5FX0NLRU4ocHhhMjV4X2Fzc3AsIEFTU1AsIDM2ODY0MDAsIDApOwotc3RhdGljIERFRklORV9DS0VOKHB4YTI1eF9wd20wLCBQV00wLCAzNjg2NDAwLCAwKTsKLXN0YXRpYyBERUZJTkVfQ0tFTihweGEyNXhfcHdtMSwgUFdNMSwgMzY4NjQwMCwgMCk7Ci1zdGF0aWMgREVGSU5FX0NLRU4ocHhhMjV4X2FjOTcsIEFDOTcsIDI0NTc2MDAwLCAwKTsKLXN0YXRpYyBERUZJTkVfQ0tFTihweGEyNXhfaTJzLCBJMlMsIDE0NzQ1NjAwLCAwKTsKLXN0YXRpYyBERUZJTkVfQ0tFTihweGEyNXhfZmljcCwgRklDUCwgNDc5MjMwMDAsIDApOworc3RhdGljIERFRklORV9DTEsocHhhMjV4X21lbSwgJmNsa19weGEyNXhfbWVtX29wcywgMCwgMCk7CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCBweGEyNXhfY2xrcmVnc1tdID0gewogCUlOSVRfQ0xLUkVHKCZjbGtfcHhhMjV4X2xjZCwgInB4YTJ4eC1mYiIsIE5VTEwpLApAQCAtMjA1LDggKzIwNCwxMiBAQAogCUlOSVRfQ0xLUkVHKCZjbGtfcHhhMjV4X2FjOTcsIE5VTEwsICJBQzk3Q0xLIiksCiAJSU5JVF9DTEtSRUcoJmNsa19weGEyNXhfZ3BpbzExLCBOVUxMLCAiR1BJTzExX0NMSyIpLAogCUlOSVRfQ0xLUkVHKCZjbGtfcHhhMjV4X2dwaW8xMiwgTlVMTCwgIkdQSU8xMl9DTEsiKSwKKwlJTklUX0NMS1JFRygmY2xrX3B4YTI1eF9tZW0sICJweGEyeHgtcGNtY2lhIiwgTlVMTCksCiB9OwogCitzdGF0aWMgc3RydWN0IGNsa19sb29rdXAgcHhhMjV4X2h3dWFydF9jbGtyZWcgPQorCUlOSVRfQ0xLUkVHKCZjbGtfcHhhMjV4X2h3dWFydCwgInB4YTJ4eC11YXJ0LjMiLCBOVUxMKTsKKwogI2lmZGVmIENPTkZJR19QTQogCiAjZGVmaW5lIFNBVkUoeCkJCXNsZWVwX3NhdmVbU0xFRVBfU0FWRV8jI3hdID0geApAQCAtMjE5LDIwICsyMjIsMTcgQEAKICAqLwogZW51bSB7CiAJU0xFRVBfU0FWRV9QU1RSLAotCVNMRUVQX1NBVkVfQ0tFTiwKIAlTTEVFUF9TQVZFX0NPVU5UCiB9OwogCiAKIHN0YXRpYyB2b2lkIHB4YTI1eF9jcHVfcG1fc2F2ZSh1bnNpZ25lZCBsb25nICpzbGVlcF9zYXZlKQogewotCVNBVkUoQ0tFTik7CiAJU0FWRShQU1RSKTsKIH0KIAogc3RhdGljIHZvaWQgcHhhMjV4X2NwdV9wbV9yZXN0b3JlKHVuc2lnbmVkIGxvbmcgKnNsZWVwX3NhdmUpCiB7Ci0JUkVTVE9SRShDS0VOKTsKIAlSRVNUT1JFKFBTVFIpOwogfQogCkBAIC0zMjAsNiArMzIwLDIyIEBACiB9CiAjZW5kaWYKIAorc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBweGEyNXhfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJewkvKiBNZW0gQ3RsICovCisJCS52aXJ0dWFsCT0gU01FTUNfVklSVCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFBYQTJYWF9TTUVNQ19CQVNFKSwKKwkJLmxlbmd0aAkJPSAweDAwMjAwMDAwLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UKKwl9LAorfTsKKwordm9pZCBfX2luaXQgcHhhMjV4X21hcF9pbyh2b2lkKQoreworCXB4YV9tYXBfaW8oKTsKKwlpb3RhYmxlX2luaXQoQVJSQVlfQU5EX1NJWkUocHhhMjV4X2lvX2Rlc2MpKTsKKwlweGEyNXhfZ2V0X2Nsa19mcmVxdWVuY3lfa2h6KDEpOworfQorCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcHhhMjV4X2RldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZweGEyNXhfZGV2aWNlX3VkYywKIAkmcHhhX2RldmljZV9wbXUsCkBAIC0zMzksNyArMzU1LDkgQEAKIAkJLmNscwk9ICZweGEyeHhfbWZwX3N5c2NsYXNzLAogCX0sIHsKIAkJLmNscwk9ICZweGFfZ3Bpb19zeXNjbGFzcywKLQl9LAorCX0sIHsKKwkJLmNscwk9ICZweGEyeHhfY2xvY2tfc3lzY2xhc3MsCisJfQogfTsKIAogc3RhdGljIGludCBfX2luaXQgcHhhMjV4X2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTI3eC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhMjd4LmMKaW5kZXggZDFmYmYyOS4uYjIxMzBiNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhMjd4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhMjd4LmMKQEAgLTE3LDcgKzE3LDkgQEAKICNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KIAorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CkBAIC0yNyw2ICsyOSw4IEBACiAjaW5jbHVkZSA8bWFjaC9vaGNpLmg+CiAjaW5jbHVkZSA8bWFjaC9wbS5oPgogI2luY2x1ZGUgPG1hY2gvZG1hLmg+CisjaW5jbHVkZSA8bWFjaC9zbWVtYy5oPgorCiAjaW5jbHVkZSA8cGxhdC9pMmMuaD4KIAogI2luY2x1ZGUgImdlbmVyaWMuaCIKQEAgLTEwNywxMCArMTExLDkgQEAKIH0KIAogLyoKLSAqIFJldHVybiB0aGUgY3VycmVudCBtZW0gY2xvY2sgZnJlcXVlbmN5IGluIHVuaXRzIG9mIDEwa0h6IGFzCi0gKiByZWZsZWN0ZWQgYnkgQ0NDUltBXSwgQiwgYW5kIEwKKyAqIFJldHVybiB0aGUgY3VycmVudCBtZW0gY2xvY2sgZnJlcXVlbmN5IGFzIHJlZmxlY3RlZCBieSBDQ0NSW0FdLCBCLCBhbmQgTAogICovCi11bnNpZ25lZCBpbnQgcHhhMjd4X2dldF9tZW1jbGtfZnJlcXVlbmN5XzEwa2h6KHZvaWQpCitzdGF0aWMgdW5zaWduZWQgbG9uZyBjbGtfcHhhMjd4X21lbV9nZXRyYXRlKHN0cnVjdCBjbGsgKmNsaykKIHsKIAl1bnNpZ25lZCBsb25nIGNjc3IsIGNsa2NmZzsKIAl1bnNpZ25lZCBpbnQgbCwgTCwgbSwgTTsKQEAgLTEyOSw5ICsxMzIsMTUgQEAKIAlMID0gbCAqIEJBU0VfQ0xLOwogCU0gPSAoIWNjY3JfYSkgPyAoTC9tKSA6ICgoYikgPyBMIDogKEwvMikpOwogCi0JcmV0dXJuIChNIC8gMTAwMDApOworCXJldHVybiBNOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa29wcyBjbGtfcHhhMjd4X21lbV9vcHMgPSB7CisJLmVuYWJsZQkJPSBjbGtfZHVtbXlfZW5hYmxlLAorCS5kaXNhYmxlCT0gY2xrX2R1bW15X2Rpc2FibGUsCisJLmdldHJhdGUJPSBjbGtfcHhhMjd4X21lbV9nZXRyYXRlLAorfTsKKwogLyoKICAqIFJldHVybiB0aGUgY3VycmVudCBMQ0QgY2xvY2sgZnJlcXVlbmN5IGluIHVuaXRzIG9mIDEwa0h6IGFzCiAgKi8KQEAgLTE1NywzNiArMTY2LDM4IEBACiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa19weGEyN3hfbGNkX29wcyA9IHsKLQkuZW5hYmxlCQk9IGNsa19ja2VuX2VuYWJsZSwKLQkuZGlzYWJsZQk9IGNsa19ja2VuX2Rpc2FibGUsCisJLmVuYWJsZQkJPSBjbGtfcHhhMnh4X2NrZW5fZW5hYmxlLAorCS5kaXNhYmxlCT0gY2xrX3B4YTJ4eF9ja2VuX2Rpc2FibGUsCiAJLmdldHJhdGUJPSBjbGtfcHhhMjd4X2xjZF9nZXRyYXRlLAogfTsKIAorc3RhdGljIERFRklORV9QWEEyX0NLRU4ocHhhMjd4X2ZmdWFydCwgRkZVQVJULCAxNDg1NzAwMCwgMSk7CitzdGF0aWMgREVGSU5FX1BYQTJfQ0tFTihweGEyN3hfYnR1YXJ0LCBCVFVBUlQsIDE0ODU3MDAwLCAxKTsKK3N0YXRpYyBERUZJTkVfUFhBMl9DS0VOKHB4YTI3eF9zdHVhcnQsIFNUVUFSVCwgMTQ4NTcwMDAsIDEpOworc3RhdGljIERFRklORV9QWEEyX0NLRU4ocHhhMjd4X2kycywgSTJTLCAxNDY4MjAwMCwgMCk7CitzdGF0aWMgREVGSU5FX1BYQTJfQ0tFTihweGEyN3hfaTJjLCBJMkMsIDMyODQyMDAwLCAwKTsKK3N0YXRpYyBERUZJTkVfUFhBMl9DS0VOKHB4YTI3eF91c2IsIFVTQiwgNDgwMDAwMDAsIDUpOworc3RhdGljIERFRklORV9QWEEyX0NLRU4ocHhhMjd4X21tYywgTU1DLCAxOTUwMDAwMCwgMCk7CitzdGF0aWMgREVGSU5FX1BYQTJfQ0tFTihweGEyN3hfZmljcCwgRklDUCwgNDgwMDAwMDAsIDApOworc3RhdGljIERFRklORV9QWEEyX0NLRU4ocHhhMjd4X3VzYmhvc3QsIFVTQkhPU1QsIDQ4MDAwMDAwLCAwKTsKK3N0YXRpYyBERUZJTkVfUFhBMl9DS0VOKHB4YTI3eF9wd3JpMmMsIFBXUkkyQywgMTMwMDAwMDAsIDApOworc3RhdGljIERFRklORV9QWEEyX0NLRU4ocHhhMjd4X2tleXBhZCwgS0VZUEFELCAzMjc2OCwgMCk7CitzdGF0aWMgREVGSU5FX1BYQTJfQ0tFTihweGEyN3hfc3NwMSwgU1NQMSwgMTMwMDAwMDAsIDApOworc3RhdGljIERFRklORV9QWEEyX0NLRU4ocHhhMjd4X3NzcDIsIFNTUDIsIDEzMDAwMDAwLCAwKTsKK3N0YXRpYyBERUZJTkVfUFhBMl9DS0VOKHB4YTI3eF9zc3AzLCBTU1AzLCAxMzAwMDAwMCwgMCk7CitzdGF0aWMgREVGSU5FX1BYQTJfQ0tFTihweGEyN3hfcHdtMCwgUFdNMCwgMTMwMDAwMDAsIDApOworc3RhdGljIERFRklORV9QWEEyX0NLRU4ocHhhMjd4X3B3bTEsIFBXTTEsIDEzMDAwMDAwLCAwKTsKK3N0YXRpYyBERUZJTkVfUFhBMl9DS0VOKHB4YTI3eF9hYzk3LCBBQzk3LCAyNDU3NjAwMCwgMCk7CitzdGF0aWMgREVGSU5FX1BYQTJfQ0tFTihweGEyN3hfYWM5N2NvbmYsIEFDOTdDT05GLCAyNDU3NjAwMCwgMCk7CitzdGF0aWMgREVGSU5FX1BYQTJfQ0tFTihweGEyN3hfbXNsLCBNU0wsIDQ4MDAwMDAwLCAwKTsKK3N0YXRpYyBERUZJTkVfUFhBMl9DS0VOKHB4YTI3eF91c2ltLCBVU0lNLCA0ODAwMDAwMCwgMCk7CitzdGF0aWMgREVGSU5FX1BYQTJfQ0tFTihweGEyN3hfbWVtc3RrLCBNRU1TVEssIDE5NTAwMDAwLCAwKTsKK3N0YXRpYyBERUZJTkVfUFhBMl9DS0VOKHB4YTI3eF9pbSwgSU0sIDAsIDApOworc3RhdGljIERFRklORV9QWEEyX0NLRU4ocHhhMjd4X21lbWMsIE1FTUMsIDAsIDApOworCiBzdGF0aWMgREVGSU5FX0NLKHB4YTI3eF9sY2QsIExDRCwgJmNsa19weGEyN3hfbGNkX29wcyk7CiBzdGF0aWMgREVGSU5FX0NLKHB4YTI3eF9jYW1lcmEsIENBTUVSQSwgJmNsa19weGEyN3hfbGNkX29wcyk7Ci1zdGF0aWMgREVGSU5FX0NLRU4ocHhhMjd4X2ZmdWFydCwgRkZVQVJULCAxNDg1NzAwMCwgMSk7Ci1zdGF0aWMgREVGSU5FX0NLRU4ocHhhMjd4X2J0dWFydCwgQlRVQVJULCAxNDg1NzAwMCwgMSk7Ci1zdGF0aWMgREVGSU5FX0NLRU4ocHhhMjd4X3N0dWFydCwgU1RVQVJULCAxNDg1NzAwMCwgMSk7Ci1zdGF0aWMgREVGSU5FX0NLRU4ocHhhMjd4X2kycywgSTJTLCAxNDY4MjAwMCwgMCk7Ci1zdGF0aWMgREVGSU5FX0NLRU4ocHhhMjd4X2kyYywgSTJDLCAzMjg0MjAwMCwgMCk7Ci1zdGF0aWMgREVGSU5FX0NLRU4ocHhhMjd4X3VzYiwgVVNCLCA0ODAwMDAwMCwgNSk7Ci1zdGF0aWMgREVGSU5FX0NLRU4ocHhhMjd4X21tYywgTU1DLCAxOTUwMDAwMCwgMCk7Ci1zdGF0aWMgREVGSU5FX0NLRU4ocHhhMjd4X2ZpY3AsIEZJQ1AsIDQ4MDAwMDAwLCAwKTsKLXN0YXRpYyBERUZJTkVfQ0tFTihweGEyN3hfdXNiaG9zdCwgVVNCSE9TVCwgNDgwMDAwMDAsIDApOwotc3RhdGljIERFRklORV9DS0VOKHB4YTI3eF9wd3JpMmMsIFBXUkkyQywgMTMwMDAwMDAsIDApOwotc3RhdGljIERFRklORV9DS0VOKHB4YTI3eF9rZXlwYWQsIEtFWVBBRCwgMzI3NjgsIDApOwotc3RhdGljIERFRklORV9DS0VOKHB4YTI3eF9zc3AxLCBTU1AxLCAxMzAwMDAwMCwgMCk7Ci1zdGF0aWMgREVGSU5FX0NLRU4ocHhhMjd4X3NzcDIsIFNTUDIsIDEzMDAwMDAwLCAwKTsKLXN0YXRpYyBERUZJTkVfQ0tFTihweGEyN3hfc3NwMywgU1NQMywgMTMwMDAwMDAsIDApOwotc3RhdGljIERFRklORV9DS0VOKHB4YTI3eF9wd20wLCBQV00wLCAxMzAwMDAwMCwgMCk7Ci1zdGF0aWMgREVGSU5FX0NLRU4ocHhhMjd4X3B3bTEsIFBXTTEsIDEzMDAwMDAwLCAwKTsKLXN0YXRpYyBERUZJTkVfQ0tFTihweGEyN3hfYWM5NywgQUM5NywgMjQ1NzYwMDAsIDApOwotc3RhdGljIERFRklORV9DS0VOKHB4YTI3eF9hYzk3Y29uZiwgQUM5N0NPTkYsIDI0NTc2MDAwLCAwKTsKLXN0YXRpYyBERUZJTkVfQ0tFTihweGEyN3hfbXNsLCBNU0wsIDQ4MDAwMDAwLCAwKTsKLXN0YXRpYyBERUZJTkVfQ0tFTihweGEyN3hfdXNpbSwgVVNJTSwgNDgwMDAwMDAsIDApOwotc3RhdGljIERFRklORV9DS0VOKHB4YTI3eF9tZW1zdGssIE1FTVNUSywgMTk1MDAwMDAsIDApOwotc3RhdGljIERFRklORV9DS0VOKHB4YTI3eF9pbSwgSU0sIDAsIDApOwotc3RhdGljIERFRklORV9DS0VOKHB4YTI3eF9tZW1jLCBNRU1DLCAwLCAwKTsKK3N0YXRpYyBERUZJTkVfQ0xLKHB4YTI3eF9tZW0sICZjbGtfcHhhMjd4X21lbV9vcHMsIDAsIDApOwogCiBzdGF0aWMgc3RydWN0IGNsa19sb29rdXAgcHhhMjd4X2Nsa3JlZ3NbXSA9IHsKIAlJTklUX0NMS1JFRygmY2xrX3B4YTI3eF9sY2QsICJweGEyeHgtZmIiLCBOVUxMKSwKQEAgLTIxNSw2ICsyMjYsNyBAQAogCUlOSVRfQ0xLUkVHKCZjbGtfcHhhMjd4X21lbXN0aywgTlVMTCwgIk1TVEtDTEsiKSwKIAlJTklUX0NMS1JFRygmY2xrX3B4YTI3eF9pbSwgTlVMTCwgIklNQ0xLIiksCiAJSU5JVF9DTEtSRUcoJmNsa19weGEyN3hfbWVtYywgTlVMTCwgIk1FTUNMSyIpLAorCUlOSVRfQ0xLUkVHKCZjbGtfcHhhMjd4X21lbSwgInB4YTJ4eC1wY21jaWEiLCBOVUxMKSwKIH07CiAKICNpZmRlZiBDT05GSUdfUE0KQEAgLTI0Niw3ICsyNTgsNiBAQAogICovCiBlbnVtIHsKIAlTTEVFUF9TQVZFX1BTVFIsCi0JU0xFRVBfU0FWRV9DS0VOLAogCVNMRUVQX1NBVkVfTURSRUZSLAogCVNMRUVQX1NBVkVfUENGUiwKIAlTTEVFUF9TQVZFX0NPVU5UCkBAIC0yNTQsMjEgKzI2NSwxOSBAQAogCiB2b2lkIHB4YTI3eF9jcHVfcG1fc2F2ZSh1bnNpZ25lZCBsb25nICpzbGVlcF9zYXZlKQogewotCVNBVkUoTURSRUZSKTsKKwlzbGVlcF9zYXZlW1NMRUVQX1NBVkVfTURSRUZSXSA9IF9fcmF3X3JlYWRsKE1EUkVGUik7CiAJU0FWRShQQ0ZSKTsKIAotCVNBVkUoQ0tFTik7CiAJU0FWRShQU1RSKTsKIH0KIAogdm9pZCBweGEyN3hfY3B1X3BtX3Jlc3RvcmUodW5zaWduZWQgbG9uZyAqc2xlZXBfc2F2ZSkKIHsKLQlSRVNUT1JFKE1EUkVGUik7CisJX19yYXdfd3JpdGVsKHNsZWVwX3NhdmVbU0xFRVBfU0FWRV9NRFJFRlJdLCBNRFJFRlIpOwogCVJFU1RPUkUoUENGUik7CiAKIAlQU1NSID0gUFNTUl9SREggfCBQU1NSX1BIOwogCi0JUkVTVE9SRShDS0VOKTsKIAlSRVNUT1JFKFBTVFIpOwogfQogCkBAIC0zNzAsNiArMzc5LDI3IEBACiAJcHhhX2luaXRfZ3BpbyhJUlFfR1BJT18yX3gsIDIsIDEyMCwgcHhhMjd4X3NldF93YWtlKTsKIH0KIAorc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBweGEyN3hfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJewkvKiBNZW0gQ3RsICovCisJCS52aXJ0dWFsCT0gU01FTUNfVklSVCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFBYQTJYWF9TTUVNQ19CQVNFKSwKKwkJLmxlbmd0aAkJPSAweDAwMjAwMDAwLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UKKwl9LCB7CS8qIElNZW0gY3RsICovCisJCS52aXJ0dWFsCT0gIDB4ZmUwMDAwMDAsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbigweDU4MDAwMDAwKSwKKwkJLmxlbmd0aAkJPSAweDAwMTAwMDAwLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UKKwl9LAorfTsKKwordm9pZCBfX2luaXQgcHhhMjd4X21hcF9pbyh2b2lkKQoreworCXB4YV9tYXBfaW8oKTsKKwlpb3RhYmxlX2luaXQoQVJSQVlfQU5EX1NJWkUocHhhMjd4X2lvX2Rlc2MpKTsKKwlweGEyN3hfZ2V0X2Nsa19mcmVxdWVuY3lfa2h6KDEpOworfQorCiAvKgogICogZGV2aWNlIHJlZ2lzdHJhdGlvbiBzcGVjaWZpYyB0byBQWEEyN3guCiAgKi8KQEAgLTQwNSw3ICs0MzUsOSBAQAogCQkuY2xzCT0gJnB4YTJ4eF9tZnBfc3lzY2xhc3MsCiAJfSwgewogCQkuY2xzCT0gJnB4YV9ncGlvX3N5c2NsYXNzLAotCX0sCisJfSwgeworCQkuY2xzCT0gJnB4YTJ4eF9jbG9ja19zeXNjbGFzcywKKwl9CiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBweGEyN3hfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhM3h4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEzeHguYwppbmRleCBkMWM3NDdjLi5lMTQ4MThmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9weGEzeHguYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEzeHguYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAKKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9weGEzeHgtcmVncy5oPgpAQCAtMzAsMTkzICszMSwxNiBAQAogI2luY2x1ZGUgPG1hY2gvcG0uaD4KICNpbmNsdWRlIDxtYWNoL2RtYS5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1pbnRjLmg+CisjaW5jbHVkZSA8bWFjaC9zbWVtYy5oPgogI2luY2x1ZGUgPHBsYXQvaTJjLmg+CiAKICNpbmNsdWRlICJnZW5lcmljLmgiCiAjaW5jbHVkZSAiZGV2aWNlcy5oIgogI2luY2x1ZGUgImNsb2NrLmgiCiAKLS8qIENyeXN0YWwgY2xvY2s6IDEzTUh6ICovCi0jZGVmaW5lIEJBU0VfQ0xLCTEzMDAwMDAwCi0KLS8qIFJpbmcgT3NjaWxsYXRvciBDbG9jazogNjBNSHogKi8KLSNkZWZpbmUgUk9fQ0xLCQk2MDAwMDAwMAotCi0jZGVmaW5lIEFDQ1JfRDBDUwkoMSA8PCAyNikKLSNkZWZpbmUgQUNDUl9QQ0NFCSgxIDw8IDExKQotCiAjZGVmaW5lIFBFQ1JfSUUobikJKCgxIDw8ICgobikgKiAyKSkgPDwgMjgpCiAjZGVmaW5lIFBFQ1JfSVMobikJKCgxIDw8ICgobikgKiAyKSkgPDwgMjkpCiAKLS8qIGNyeXN0YWwgZnJlcXVlbmN5IHRvIHN0YXRpYyBtZW1vcnkgY29udHJvbGxlciBtdWx0aXBsaWVyIChTTUNGUykgKi8KLXN0YXRpYyB1bnNpZ25lZCBjaGFyIHNtY2ZzX211bHRbOF0gPSB7IDYsIDAsIDgsIDAsIDAsIDE2LCB9OwotCi0vKiBjcnlzdGFsIGZyZXF1ZW5jeSB0byBIU0lPIGJ1cyBmcmVxdWVuY3kgbXVsdGlwbGllciAoSFNTKSAqLwotc3RhdGljIHVuc2lnbmVkIGNoYXIgaHNzX211bHRbNF0gPSB7IDgsIDEyLCAxNiwgMjQgfTsKLQotLyoKLSAqIEdldCB0aGUgY2xvY2sgZnJlcXVlbmN5IGFzIHJlZmxlY3RlZCBieSBDQ1NSIGFuZCB0aGUgdHVyYm8gZmxhZy4KLSAqIFdlIGFzc3VtZSB0aGVzZSB2YWx1ZXMgaGF2ZSBiZWVuIGFwcGxpZWQgdmlhIGEgZmNzLgotICogSWYgaW5mbyBpcyBub3QgMCB3ZSBhbHNvIGRpc3BsYXkgdGhlIGN1cnJlbnQgc2V0dGluZ3MuCi0gKi8KLXVuc2lnbmVkIGludCBweGEzeHhfZ2V0X2Nsa19mcmVxdWVuY3lfa2h6KGludCBpbmZvKQotewotCXVuc2lnbmVkIGxvbmcgYWNzciwgeGNsa2NmZzsKLQl1bnNpZ25lZCBpbnQgdCwgeGwsIHhuLCBoc3MsIHJvLCBYTCwgWE4sIENMSywgSFNTOwotCi0JLyogUmVhZCBYQ0xLQ0ZHIHJlZ2lzdGVyIHR1cmJvIGJpdCAqLwotCV9fYXNtX18gX192b2xhdGlsZV9fKCJtcmNcdHAxNCwgMCwgJTAsIGM2LCBjMCwgMCIgOiAiPXIiKHhjbGtjZmcpKTsKLQl0ID0geGNsa2NmZyAmIDB4MTsKLQotCWFjc3IgPSBBQ1NSOwotCi0JeGwgID0gYWNzciAmIDB4MWY7Ci0JeG4gID0gKGFjc3IgPj4gOCkgJiAweDc7Ci0JaHNzID0gKGFjc3IgPj4gMTQpICYgMHgzOwotCi0JWEwgPSB4bCAqIEJBU0VfQ0xLOwotCVhOID0geG4gKiBYTDsKLQotCXJvID0gYWNzciAmIEFDQ1JfRDBDUzsKLQotCUNMSyA9IChybykgPyBST19DTEsgOiAoKHQpID8gWE4gOiBYTCk7Ci0JSFNTID0gKHJvKSA/IFJPX0NMSyA6IGhzc19tdWx0W2hzc10gKiBCQVNFX0NMSzsKLQotCWlmIChpbmZvKSB7Ci0JCXByX2luZm8oIlJPIE1vZGUgY2xvY2s6ICVkLiUwMmRNSHogKCVzYWN0aXZlKVxuIiwKLQkJCVJPX0NMSyAvIDEwMDAwMDAsIChST19DTEsgJSAxMDAwMDAwKSAvIDEwMDAwLAotCQkJKHJvKSA/ICIiIDogImluIik7Ci0JCXByX2luZm8oIlJ1biBNb2RlIGNsb2NrOiAlZC4lMDJkTUh6ICgqJWQpXG4iLAotCQkJWEwgLyAxMDAwMDAwLCAoWEwgJSAxMDAwMDAwKSAvIDEwMDAwLCB4bCk7Ci0JCXByX2luZm8oIlR1cmJvIE1vZGUgY2xvY2s6ICVkLiUwMmRNSHogKColZCwgJXNhY3RpdmUpXG4iLAotCQkJWE4gLyAxMDAwMDAwLCAoWE4gJSAxMDAwMDAwKSAvIDEwMDAwLCB4biwKLQkJCSh0KSA/ICIiIDogImluIik7Ci0JCXByX2luZm8oIkhTSU8gYnVzIGNsb2NrOiAlZC4lMDJkTUh6XG4iLAotCQkJSFNTIC8gMTAwMDAwMCwgKEhTUyAlIDEwMDAwMDApIC8gMTAwMDApOwotCX0KLQotCXJldHVybiBDTEsgLyAxMDAwOwotfQotCi12b2lkIHB4YTN4eF9jbGVhcl9yZXNldF9zdGF0dXModW5zaWduZWQgaW50IG1hc2spCi17Ci0JLyogUkVTRVRfU1RBVFVTXyogaGFzIGEgMToxIG1hcHBpbmcgd2l0aCBBUlNSICovCi0JQVJTUiA9IG1hc2s7Ci19Ci0KLS8qCi0gKiBSZXR1cm4gdGhlIGN1cnJlbnQgQUM5NyBjbG9jayBmcmVxdWVuY3kuCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGNsa19weGEzeHhfYWM5N19nZXRyYXRlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQl1bnNpZ25lZCBsb25nIHJhdGUgPSAzMTIwMDAwMDA7Ci0JdW5zaWduZWQgbG9uZyBhYzk3X2RpdjsKLQotCWFjOTdfZGl2ID0gQUM5N19ESVY7Ci0KLQkvKiBUaGlzIG1heSBsb29zZSBwcmVjaXNpb24gZm9yIHNvbWUgcmF0ZXMgYnV0IHdvbid0IGZvciB0aGUKLQkgKiBzdGFuZGFyZCAyNC41NzZNSHouCi0JICovCi0JcmF0ZSAvPSAoYWM5N19kaXYgPj4gMTIpICYgMHg3ZmZmOwotCXJhdGUgKj0gKGFjOTdfZGl2ICYgMHhmZmYpOwotCi0JcmV0dXJuIHJhdGU7Ci19Ci0KLS8qCi0gKiBSZXR1cm4gdGhlIGN1cnJlbnQgSFNJTyBidXMgY2xvY2sgZnJlcXVlbmN5Ci0gKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGNsa19weGEzeHhfaHNpb19nZXRyYXRlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQl1bnNpZ25lZCBsb25nIGFjc3I7Ci0JdW5zaWduZWQgaW50IGhzcywgaHNpb19jbGs7Ci0KLQlhY3NyID0gQUNTUjsKLQotCWhzcyA9IChhY3NyID4+IDE0KSAmIDB4MzsKLQloc2lvX2NsayA9IChhY3NyICYgQUNDUl9EMENTKSA/IFJPX0NMSyA6IGhzc19tdWx0W2hzc10gKiBCQVNFX0NMSzsKLQotCXJldHVybiBoc2lvX2NsazsKLX0KLQotdm9pZCBjbGtfcHhhM3h4X2NrZW5fZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQl1bnNpZ25lZCBsb25nIG1hc2sgPSAxdWwgPDwgKGNsay0+Y2tlbiAmIDB4MWYpOwotCi0JaWYgKGNsay0+Y2tlbiA8IDMyKQotCQlDS0VOQSB8PSBtYXNrOwotCWVsc2UKLQkJQ0tFTkIgfD0gbWFzazsKLX0KLQotdm9pZCBjbGtfcHhhM3h4X2NrZW5fZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdW5zaWduZWQgbG9uZyBtYXNrID0gMXVsIDw8IChjbGstPmNrZW4gJiAweDFmKTsKLQotCWlmIChjbGstPmNrZW4gPCAzMikKLQkJQ0tFTkEgJj0gfm1hc2s7Ci0JZWxzZQotCQlDS0VOQiAmPSB+bWFzazsKLX0KLQotY29uc3Qgc3RydWN0IGNsa29wcyBjbGtfcHhhM3h4X2NrZW5fb3BzID0gewotCS5lbmFibGUJCT0gY2xrX3B4YTN4eF9ja2VuX2VuYWJsZSwKLQkuZGlzYWJsZQk9IGNsa19weGEzeHhfY2tlbl9kaXNhYmxlLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtvcHMgY2xrX3B4YTN4eF9oc2lvX29wcyA9IHsKLQkuZW5hYmxlCQk9IGNsa19weGEzeHhfY2tlbl9lbmFibGUsCi0JLmRpc2FibGUJPSBjbGtfcHhhM3h4X2NrZW5fZGlzYWJsZSwKLQkuZ2V0cmF0ZQk9IGNsa19weGEzeHhfaHNpb19nZXRyYXRlLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtvcHMgY2xrX3B4YTN4eF9hYzk3X29wcyA9IHsKLQkuZW5hYmxlCQk9IGNsa19weGEzeHhfY2tlbl9lbmFibGUsCi0JLmRpc2FibGUJPSBjbGtfcHhhM3h4X2NrZW5fZGlzYWJsZSwKLQkuZ2V0cmF0ZQk9IGNsa19weGEzeHhfYWM5N19nZXRyYXRlLAotfTsKLQotc3RhdGljIHZvaWQgY2xrX3BvdXRfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlPU0NDIHw9IE9TQ0NfUEVOOwotfQotCi1zdGF0aWMgdm9pZCBjbGtfcG91dF9kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlPU0NDICY9IH5PU0NDX1BFTjsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtvcHMgY2xrX3BvdXRfb3BzID0gewotCS5lbmFibGUJCT0gY2xrX3BvdXRfZW5hYmxlLAotCS5kaXNhYmxlCT0gY2xrX3BvdXRfZGlzYWJsZSwKLX07Ci0KLXN0YXRpYyB2b2lkIGNsa19kdW1teV9lbmFibGUoc3RydWN0IGNsayAqY2xrKQotewotfQotCi1zdGF0aWMgdm9pZCBjbGtfZHVtbXlfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCi17Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa19kdW1teV9vcHMgPSB7Ci0JLmVuYWJsZQkJPSBjbGtfZHVtbXlfZW5hYmxlLAotCS5kaXNhYmxlCT0gY2xrX2R1bW15X2Rpc2FibGUsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBjbGtfcHhhM3h4X3BvdXQgPSB7Ci0JLm9wcwkJPSAmY2xrX3BvdXRfb3BzLAotCS5yYXRlCQk9IDEzMDAwMDAwLAotCS5kZWxheQkJPSA3MCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGNsa19kdW1teSA9IHsKLQkub3BzCQk9ICZjbGtfZHVtbXlfb3BzLAotfTsKLQotc3RhdGljIERFRklORV9QWEEzX0NLKHB4YTN4eF9sY2QsIExDRCwgJmNsa19weGEzeHhfaHNpb19vcHMpOwotc3RhdGljIERFRklORV9QWEEzX0NLKHB4YTN4eF9jYW1lcmEsIENBTUVSQSwgJmNsa19weGEzeHhfaHNpb19vcHMpOwotc3RhdGljIERFRklORV9QWEEzX0NLKHB4YTN4eF9hYzk3LCBBQzk3LCAmY2xrX3B4YTN4eF9hYzk3X29wcyk7CiBzdGF0aWMgREVGSU5FX1BYQTNfQ0tFTihweGEzeHhfZmZ1YXJ0LCBGRlVBUlQsIDE0ODU3MDAwLCAxKTsKIHN0YXRpYyBERUZJTkVfUFhBM19DS0VOKHB4YTN4eF9idHVhcnQsIEJUVUFSVCwgMTQ4NTcwMDAsIDEpOwogc3RhdGljIERFRklORV9QWEEzX0NLRU4ocHhhM3h4X3N0dWFydCwgU1RVQVJULCAxNDg1NzAwMCwgMSk7CkBAIC0yMzQsNiArNTgsMTIgQEAKIHN0YXRpYyBERUZJTkVfUFhBM19DS0VOKHB4YTN4eF9tbWMxLCBNTUMxLCAxOTUwMDAwMCwgMCk7CiBzdGF0aWMgREVGSU5FX1BYQTNfQ0tFTihweGEzeHhfbW1jMiwgTU1DMiwgMTk1MDAwMDAsIDApOwogCitzdGF0aWMgREVGSU5FX0NLKHB4YTN4eF9sY2QsIExDRCwgJmNsa19weGEzeHhfaHNpb19vcHMpOworc3RhdGljIERFRklORV9DSyhweGEzeHhfc21lbWMsIFNNQywgJmNsa19weGEzeHhfc21lbWNfb3BzKTsKK3N0YXRpYyBERUZJTkVfQ0socHhhM3h4X2NhbWVyYSwgQ0FNRVJBLCAmY2xrX3B4YTN4eF9oc2lvX29wcyk7CitzdGF0aWMgREVGSU5FX0NLKHB4YTN4eF9hYzk3LCBBQzk3LCAmY2xrX3B4YTN4eF9hYzk3X29wcyk7CitzdGF0aWMgREVGSU5FX0NMSyhweGEzeHhfcG91dCwgJmNsa19weGEzeHhfcG91dF9vcHMsIDEzMDAwMDAwLCA3MCk7CisKIHN0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCBweGEzeHhfY2xrcmVnc1tdID0gewogCUlOSVRfQ0xLUkVHKCZjbGtfcHhhM3h4X3BvdXQsIE5VTEwsICJDTEtfUE9VVCIpLAogCS8qIFBvd2VyIEkyQyBjbG9jayBpcyBhbHdheXMgb24gKi8KQEAgLTI1OCw2ICs4OCw3IEBACiAJSU5JVF9DTEtSRUcoJmNsa19weGEzeHhfcHdtMSwgInB4YTI3eC1wd20uMSIsIE5VTEwpLAogCUlOSVRfQ0xLUkVHKCZjbGtfcHhhM3h4X21tYzEsICJweGEyeHgtbWNpLjAiLCBOVUxMKSwKIAlJTklUX0NMS1JFRygmY2xrX3B4YTN4eF9tbWMyLCAicHhhMnh4LW1jaS4xIiwgTlVMTCksCisJSU5JVF9DTEtSRUcoJmNsa19weGEzeHhfc21lbWMsICJweGEyeHgtcGNtY2lhIiwgTlVMTCksCiB9OwogCiAjaWZkZWYgQ09ORklHX1BNCkBAIC0yNjgsMzAgKzk5LDYgQEAKIHN0YXRpYyB2b2lkIF9faW9tZW0gKnNyYW07CiBzdGF0aWMgdW5zaWduZWQgbG9uZyB3YWtldXBfc3JjOwogCi0jZGVmaW5lIFNBVkUoeCkJCXNsZWVwX3NhdmVbU0xFRVBfU0FWRV8jI3hdID0geAotI2RlZmluZSBSRVNUT1JFKHgpCXggPSBzbGVlcF9zYXZlW1NMRUVQX1NBVkVfIyN4XQotCi1lbnVtIHsJU0xFRVBfU0FWRV9DS0VOQSwKLQlTTEVFUF9TQVZFX0NLRU5CLAotCVNMRUVQX1NBVkVfQUNDUiwKLQotCVNMRUVQX1NBVkVfQ09VTlQsCi19OwotCi1zdGF0aWMgdm9pZCBweGEzeHhfY3B1X3BtX3NhdmUodW5zaWduZWQgbG9uZyAqc2xlZXBfc2F2ZSkKLXsKLQlTQVZFKENLRU5BKTsKLQlTQVZFKENLRU5CKTsKLQlTQVZFKEFDQ1IpOwotfQotCi1zdGF0aWMgdm9pZCBweGEzeHhfY3B1X3BtX3Jlc3RvcmUodW5zaWduZWQgbG9uZyAqc2xlZXBfc2F2ZSkKLXsKLQlSRVNUT1JFKEFDQ1IpOwotCVJFU1RPUkUoQ0tFTkEpOwotCVJFU1RPUkUoQ0tFTkIpOwotfQotCiAvKgogICogRW50ZXIgYSBzdGFuZGJ5IG1vZGUgKFMwRDFDMiBvciBTMEQyQzIpLiAgVXBvbiB3YWtldXAsIHRoZSBkeW5hbWljCiAgKiBtZW1vcnkgY29udHJvbGxlciBoYXMgdG8gYmUgcmVpbml0aWFsaXNlZCwgc28gd2UgcGxhY2Ugc29tZSBjb2RlCkBAIC0zOTAsOSArMTk3LDYgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBweGFfY3B1X3BtX2ZucyBweGEzeHhfY3B1X3BtX2ZucyA9IHsKLQkuc2F2ZV9jb3VudAk9IFNMRUVQX1NBVkVfQ09VTlQsCi0JLnNhdmUJCT0gcHhhM3h4X2NwdV9wbV9zYXZlLAotCS5yZXN0b3JlCT0gcHhhM3h4X2NwdV9wbV9yZXN0b3JlLAogCS52YWxpZAkJPSBweGEzeHhfY3B1X3BtX3ZhbGlkLAogCS5lbnRlcgkJPSBweGEzeHhfY3B1X3BtX2VudGVyLAogfTsKQEAgLTU4MCw2ICszODQsMjIgQEAKIAlweGFfaW5pdF9ncGlvKElSUV9HUElPXzJfeCwgMiwgMTI3LCBOVUxMKTsKIH0KIAorc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBweGEzeHhfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJewkvKiBNZW0gQ3RsICovCisJCS52aXJ0dWFsCT0gU01FTUNfVklSVCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFBYQTNYWF9TTUVNQ19CQVNFKSwKKwkJLmxlbmd0aAkJPSAweDAwMjAwMDAwLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UKKwl9Cit9OworCit2b2lkIF9faW5pdCBweGEzeHhfbWFwX2lvKHZvaWQpCit7CisJcHhhX21hcF9pbygpOworCWlvdGFibGVfaW5pdChBUlJBWV9BTkRfU0laRShweGEzeHhfaW9fZGVzYykpOworCXB4YTN4eF9nZXRfY2xrX2ZyZXF1ZW5jeV9raHooMSk7Cit9CisKIC8qCiAgKiBkZXZpY2UgcmVnaXN0cmF0aW9uIHNwZWNpZmljIHRvIFBYQTN4eC4KICAqLwpAQCAtNjE1LDcgKzQzNSw5IEBACiAJCS5jbHMJPSAmcHhhM3h4X21mcF9zeXNjbGFzcywKIAl9LCB7CiAJCS5jbHMJPSAmcHhhX2dwaW9fc3lzY2xhc3MsCi0JfSwKKwl9LCB7CisJCS5jbHMJPSAmcHhhM3h4X2Nsb2NrX3N5c2NsYXNzLAorCX0KIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHB4YTN4eF9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9weGE5MzAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTkzMC5jCmluZGV4IDdkMjlkZDMuLjhhZWFjZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTkzMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTkzMC5jCkBAIC0xOTIsNyArMTkyLDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgcHhhOTMwX2luaXQodm9pZCkKIHsKLQlpZiAoY3B1X2lzX3B4YTkzMCgpIHx8IGNwdV9pc19weGE5MzUoKSB8fCBjcHVfaXNfcHhhOTUwKCkpIHsKKwlpZiAoY3B1X2lzX3B4YTkzeCgpKSB7CiAJCW1mcF9pbml0X2Jhc2UoaW9fcDJ2KE1GUFJfQkFTRSkpOwogCQltZnBfaW5pdF9hZGRyKHB4YTkzMF9tZnBfYWRkcl9tYXApOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTk1eC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhOTV4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM3OTgwZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTk1eC5jCkBAIC0wLDAgKzEsMzA4IEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1weGEvcHhhOTV4LmMKKyAqCisgKiBjb2RlIHNwZWNpZmljIHRvIFBYQTk1eCBha2EgTUd4CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgorI2luY2x1ZGUgPG1hY2gvcHhhM3h4LXJlZ3MuaD4KKyNpbmNsdWRlIDxtYWNoL3B4YTkzMC5oPgorI2luY2x1ZGUgPG1hY2gvcmVzZXQuaD4KKyNpbmNsdWRlIDxtYWNoL3BtLmg+CisjaW5jbHVkZSA8bWFjaC9kbWEuaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3MtaW50Yy5oPgorI2luY2x1ZGUgPHBsYXQvaTJjLmg+CisKKyNpbmNsdWRlICJnZW5lcmljLmgiCisjaW5jbHVkZSAiZGV2aWNlcy5oIgorI2luY2x1ZGUgImNsb2NrLmgiCisKK3N0YXRpYyBzdHJ1Y3QgbWZwX2FkZHJfbWFwIHB4YTk1eF9tZnBfYWRkcl9tYXBbXSBfX2luaXRkYXRhID0geworCisJTUZQX0FERFIoR1BJTzAsIDB4MDJlMCksCisJTUZQX0FERFIoR1BJTzEsIDB4MDJkYyksCisJTUZQX0FERFIoR1BJTzIsIDB4MDJlOCksCisJTUZQX0FERFIoR1BJTzMsIDB4MDJkOCksCisJTUZQX0FERFIoR1BJTzQsIDB4MDJlNCksCisJTUZQX0FERFIoR1BJTzUsIDB4MDJlYyksCisJTUZQX0FERFIoR1BJTzYsIDB4MDJmOCksCisJTUZQX0FERFIoR1BJTzcsIDB4MDJmYyksCisJTUZQX0FERFIoR1BJTzgsIDB4MDMwMCksCisJTUZQX0FERFIoR1BJTzksIDB4MDJkNCksCisJTUZQX0FERFIoR1BJTzEwLCAweDAyZjQpLAorCU1GUF9BRERSKEdQSU8xMSwgMHgwMmYwKSwKKwlNRlBfQUREUihHUElPMTIsIDB4MDMwNCksCisJTUZQX0FERFIoR1BJTzEzLCAweDAzMTApLAorCU1GUF9BRERSKEdQSU8xNCwgMHgwMzA4KSwKKwlNRlBfQUREUihHUElPMTUsIDB4MDMwYyksCisJTUZQX0FERFIoR1BJTzE2LCAweDA0ZTgpLAorCU1GUF9BRERSKEdQSU8xNywgMHgwNGY0KSwKKwlNRlBfQUREUihHUElPMTgsIDB4MDRmOCksCisJTUZQX0FERFIoR1BJTzE5LCAweDA0ZmMpLAorCU1GUF9BRERSKEdQSU8yMCwgMHgwNTE4KSwKKwlNRlBfQUREUihHUElPMjEsIDB4MDUxYyksCisJTUZQX0FERFIoR1BJTzIyLCAweDA0ZWMpLAorCU1GUF9BRERSKEdQSU8yMywgMHgwNTAwKSwKKwlNRlBfQUREUihHUElPMjQsIDB4MDRmMCksCisJTUZQX0FERFIoR1BJTzI1LCAweDA1MDQpLAorCU1GUF9BRERSKEdQSU8yNiwgMHgwNTEwKSwKKwlNRlBfQUREUihHUElPMjcsIDB4MDUxNCksCisJTUZQX0FERFIoR1BJTzI4LCAweDA1MjApLAorCU1GUF9BRERSKEdQSU8yOSwgMHgwNjAwKSwKKwlNRlBfQUREUihHUElPMzAsIDB4MDYxOCksCisJTUZQX0FERFIoR1BJTzMxLCAweDA2MTApLAorCU1GUF9BRERSKEdQSU8zMiwgMHgwNjBjKSwKKwlNRlBfQUREUihHUElPMzMsIDB4MDYxYyksCisJTUZQX0FERFIoR1BJTzM0LCAweDA2MjApLAorCU1GUF9BRERSKEdQSU8zNSwgMHgwNjI4KSwKKwlNRlBfQUREUihHUElPMzYsIDB4MDYyYyksCisJTUZQX0FERFIoR1BJTzM3LCAweDA2MzApLAorCU1GUF9BRERSKEdQSU8zOCwgMHgwNjM0KSwKKwlNRlBfQUREUihHUElPMzksIDB4MDYzOCksCisJTUZQX0FERFIoR1BJTzQwLCAweDA2M2MpLAorCU1GUF9BRERSKEdQSU80MSwgMHgwNjE0KSwKKwlNRlBfQUREUihHUElPNDIsIDB4MDYyNCksCisJTUZQX0FERFIoR1BJTzQzLCAweDA2MDgpLAorCU1GUF9BRERSKEdQSU80NCwgMHgwNjA0KSwKKwlNRlBfQUREUihHUElPNDUsIDB4MDUwYyksCisJTUZQX0FERFIoR1BJTzQ2LCAweDA1MDgpLAorCU1GUF9BRERSKEdQSU80NywgMHgwMmJjKSwKKwlNRlBfQUREUihHUElPNDgsIDB4MDJiNCksCisJTUZQX0FERFIoR1BJTzQ5LCAweDAyYjgpLAorCU1GUF9BRERSKEdQSU81MCwgMHgwMmM4KSwKKwlNRlBfQUREUihHUElPNTEsIDB4MDJjMCksCisJTUZQX0FERFIoR1BJTzUyLCAweDAyYzQpLAorCU1GUF9BRERSKEdQSU81MywgMHgwMmQwKSwKKwlNRlBfQUREUihHUElPNTQsIDB4MDJjYyksCisJTUZQX0FERFIoR1BJTzU1LCAweDAyOWMpLAorCU1GUF9BRERSKEdQSU81NiwgMHgwMmEwKSwKKwlNRlBfQUREUihHUElPNTcsIDB4MDI5NCksCisJTUZQX0FERFIoR1BJTzU4LCAweDAyOTgpLAorCU1GUF9BRERSKEdQSU81OSwgMHgwMmE0KSwKKwlNRlBfQUREUihHUElPNjAsIDB4MDJhOCksCisJTUZQX0FERFIoR1BJTzYxLCAweDAyYjApLAorCU1GUF9BRERSKEdQSU82MiwgMHgwMmFjKSwKKwlNRlBfQUREUihHUElPNjMsIDB4MDY0MCksCisJTUZQX0FERFIoR1BJTzY0LCAweDA2NWMpLAorCU1GUF9BRERSKEdQSU82NSwgMHgwNjQ4KSwKKwlNRlBfQUREUihHUElPNjYsIDB4MDY0NCksCisJTUZQX0FERFIoR1BJTzY3LCAweDA2NzQpLAorCU1GUF9BRERSKEdQSU82OCwgMHgwNjU4KSwKKwlNRlBfQUREUihHUElPNjksIDB4MDY1NCksCisJTUZQX0FERFIoR1BJTzcwLCAweDA2NjApLAorCU1GUF9BRERSKEdQSU83MSwgMHgwNjY4KSwKKwlNRlBfQUREUihHUElPNzIsIDB4MDY2NCksCisJTUZQX0FERFIoR1BJTzczLCAweDA2NTApLAorCU1GUF9BRERSKEdQSU83NCwgMHgwNjZjKSwKKwlNRlBfQUREUihHUElPNzUsIDB4MDY0YyksCisJTUZQX0FERFIoR1BJTzc2LCAweDA2NzApLAorCU1GUF9BRERSKEdQSU83NywgMHgwNjc4KSwKKwlNRlBfQUREUihHUElPNzgsIDB4MDY3YyksCisJTUZQX0FERFIoR1BJTzc5LCAweDA2OTQpLAorCU1GUF9BRERSKEdQSU84MCwgMHgwNjljKSwKKwlNRlBfQUREUihHUElPODEsIDB4MDZhMCksCisJTUZQX0FERFIoR1BJTzgyLCAweDA2YTQpLAorCU1GUF9BRERSKEdQSU84MywgMHgwNjk4KSwKKwlNRlBfQUREUihHUElPODQsIDB4MDZiYyksCisJTUZQX0FERFIoR1BJTzg1LCAweDA2YjQpLAorCU1GUF9BRERSKEdQSU84NiwgMHgwNmIwKSwKKwlNRlBfQUREUihHUElPODcsIDB4MDZjMCksCisJTUZQX0FERFIoR1BJTzg4LCAweDA2YzQpLAorCU1GUF9BRERSKEdQSU84OSwgMHgwNmFjKSwKKwlNRlBfQUREUihHUElPOTAsIDB4MDY4MCksCisJTUZQX0FERFIoR1BJTzkxLCAweDA2ODQpLAorCU1GUF9BRERSKEdQSU85MiwgMHgwNjg4KSwKKwlNRlBfQUREUihHUElPOTMsIDB4MDY5MCksCisJTUZQX0FERFIoR1BJTzk0LCAweDA2OGMpLAorCU1GUF9BRERSKEdQSU85NSwgMHgwNmE4KSwKKwlNRlBfQUREUihHUElPOTYsIDB4MDZiOCksCisJTUZQX0FERFIoR1BJTzk3LCAweDA0MTApLAorCU1GUF9BRERSKEdQSU85OCwgMHgwNDE4KSwKKwlNRlBfQUREUihHUElPOTksIDB4MDQxYyksCisJTUZQX0FERFIoR1BJTzEwMCwgMHgwNDE0KSwKKwlNRlBfQUREUihHUElPMTAxLCAweDA0MDgpLAorCU1GUF9BRERSKEdQSU8xMDIsIDB4MDMyNCksCisJTUZQX0FERFIoR1BJTzEwMywgMHgwNDBjKSwKKwlNRlBfQUREUihHUElPMTA0LCAweDA0MDApLAorCU1GUF9BRERSKEdQSU8xMDUsIDB4MDMyOCksCisJTUZQX0FERFIoR1BJTzEwNiwgMHgwNDA0KSwKKworCU1GUF9BRERSKEdQSU8xNTksIDB4MDUyNCksCisJTUZQX0FERFIoR1BJTzE2MywgMHgwNTM0KSwKKwlNRlBfQUREUihHUElPMTY3LCAweDA1NDQpLAorCU1GUF9BRERSKEdQSU8xNjgsIDB4MDU0OCksCisJTUZQX0FERFIoR1BJTzE2OSwgMHgwNTRjKSwKKwlNRlBfQUREUihHUElPMTcwLCAweDA1NTApLAorCU1GUF9BRERSKEdQSU8xNzEsIDB4MDU1NCksCisJTUZQX0FERFIoR1BJTzE3MiwgMHgwNTU4KSwKKwlNRlBfQUREUihHUElPMTczLCAweDA1NWMpLAorCisJTUZQX0FERFIoblhDVlJFTiwgMHgwMjA0KSwKKwlNRlBfQUREUihERl9DTEVfbk9FLCAweDAyMGMpLAorCU1GUF9BRERSKERGX25BRFYxX0FMRSwgMHgwMjE4KSwKKwlNRlBfQUREUihERl9TQ0xLX0UsIDB4MDIxNCksCisJTUZQX0FERFIoREZfU0NMS19TLCAweDAyMTApLAorCU1GUF9BRERSKG5CRTAsIDB4MDIxYyksCisJTUZQX0FERFIobkJFMSwgMHgwMjIwKSwKKwlNRlBfQUREUihERl9uQURWMl9BTEUsIDB4MDIyNCksCisJTUZQX0FERFIoREZfSU5UX1JuQiwgMHgwMjI4KSwKKwlNRlBfQUREUihERl9uQ1MwLCAweDAyMmMpLAorCU1GUF9BRERSKERGX25DUzEsIDB4MDIzMCksCisJTUZQX0FERFIobkxVQSwgMHgwMjU0KSwKKwlNRlBfQUREUihuTExBLCAweDAyNTgpLAorCU1GUF9BRERSKERGX25XRSwgMHgwMjM0KSwKKwlNRlBfQUREUihERl9uUkVfbk9FLCAweDAyMzgpLAorCU1GUF9BRERSKERGX0FERFIwLCAweDAyNGMpLAorCU1GUF9BRERSKERGX0FERFIxLCAweDAyNTApLAorCU1GUF9BRERSKERGX0FERFIyLCAweDAyNWMpLAorCU1GUF9BRERSKERGX0FERFIzLCAweDAyNjApLAorCU1GUF9BRERSKERGX0lPMCwgMHgwMjNjKSwKKwlNRlBfQUREUihERl9JTzEsIDB4MDI0MCksCisJTUZQX0FERFIoREZfSU8yLCAweDAyNDQpLAorCU1GUF9BRERSKERGX0lPMywgMHgwMjQ4KSwKKwlNRlBfQUREUihERl9JTzQsIDB4MDI2NCksCisJTUZQX0FERFIoREZfSU81LCAweDAyNjgpLAorCU1GUF9BRERSKERGX0lPNiwgMHgwMjZjKSwKKwlNRlBfQUREUihERl9JTzcsIDB4MDI3MCksCisJTUZQX0FERFIoREZfSU84LCAweDAyNzQpLAorCU1GUF9BRERSKERGX0lPOSwgMHgwMjc4KSwKKwlNRlBfQUREUihERl9JTzEwLCAweDAyN2MpLAorCU1GUF9BRERSKERGX0lPMTEsIDB4MDI4MCksCisJTUZQX0FERFIoREZfSU8xMiwgMHgwMjg0KSwKKwlNRlBfQUREUihERl9JTzEzLCAweDAyODgpLAorCU1GUF9BRERSKERGX0lPMTQsIDB4MDI4YyksCisJTUZQX0FERFIoREZfSU8xNSwgMHgwMjkwKSwKKworCU1GUF9BRERSKEdTSU1fVUlPLCAweDAzMTQpLAorCU1GUF9BRERSKEdTSU1fVUNMSywgMHgwMzE4KSwKKwlNRlBfQUREUihHU0lNX1VERVQsIDB4MDMxYyksCisJTUZQX0FERFIoR1NJTV9uVVJTVCwgMHgwMzIwKSwKKworCU1GUF9BRERSKFBNSUNfSU5ULCAweDA2YzgpLAorCisJTUZQX0FERFIoUkRZLCAweDAyMDApLAorCisJTUZQX0FERFJfRU5ELAorfTsKKworc3RhdGljIERFRklORV9DSyhweGE5NXhfbGNkLCBMQ0QsICZjbGtfcHhhM3h4X2hzaW9fb3BzKTsKK3N0YXRpYyBERUZJTkVfQ0xLKHB4YTk1eF9wb3V0LCAmY2xrX3B4YTN4eF9wb3V0X29wcywgMTMwMDAwMDAsIDcwKTsKK3N0YXRpYyBERUZJTkVfUFhBM19DS0VOKHB4YTk1eF9mZnVhcnQsIEZGVUFSVCwgMTQ4NTcwMDAsIDEpOworc3RhdGljIERFRklORV9QWEEzX0NLRU4ocHhhOTV4X2J0dWFydCwgQlRVQVJULCAxNDg1NzAwMCwgMSk7CitzdGF0aWMgREVGSU5FX1BYQTNfQ0tFTihweGE5NXhfc3R1YXJ0LCBTVFVBUlQsIDE0ODU3MDAwLCAxKTsKK3N0YXRpYyBERUZJTkVfUFhBM19DS0VOKHB4YTk1eF9pMmMsIEkyQywgMzI4NDIwMDAsIDApOworc3RhdGljIERFRklORV9QWEEzX0NLRU4ocHhhOTV4X2tleXBhZCwgS0VZUEFELCAzMjc2OCwgMCk7CitzdGF0aWMgREVGSU5FX1BYQTNfQ0tFTihweGE5NXhfc3NwMSwgU1NQMSwgMTMwMDAwMDAsIDApOworc3RhdGljIERFRklORV9QWEEzX0NLRU4ocHhhOTV4X3NzcDIsIFNTUDIsIDEzMDAwMDAwLCAwKTsKK3N0YXRpYyBERUZJTkVfUFhBM19DS0VOKHB4YTk1eF9zc3AzLCBTU1AzLCAxMzAwMDAwMCwgMCk7CitzdGF0aWMgREVGSU5FX1BYQTNfQ0tFTihweGE5NXhfc3NwNCwgU1NQNCwgMTMwMDAwMDAsIDApOworc3RhdGljIERFRklORV9QWEEzX0NLRU4ocHhhOTV4X3B3bTAsIFBXTTAsIDEzMDAwMDAwLCAwKTsKK3N0YXRpYyBERUZJTkVfUFhBM19DS0VOKHB4YTk1eF9wd20xLCBQV00xLCAxMzAwMDAwMCwgMCk7CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCBweGE5NXhfY2xrcmVnc1tdID0geworCUlOSVRfQ0xLUkVHKCZjbGtfcHhhOTV4X3BvdXQsIE5VTEwsICJDTEtfUE9VVCIpLAorCS8qIFBvd2VyIEkyQyBjbG9jayBpcyBhbHdheXMgb24gKi8KKwlJTklUX0NMS1JFRygmY2xrX2R1bW15LCAicHhhM3h4LXB3cmkyYy4xIiwgTlVMTCksCisJSU5JVF9DTEtSRUcoJmNsa19weGE5NXhfbGNkLCAicHhhMnh4LWZiIiwgTlVMTCksCisJSU5JVF9DTEtSRUcoJmNsa19weGE5NXhfZmZ1YXJ0LCAicHhhMnh4LXVhcnQuMCIsIE5VTEwpLAorCUlOSVRfQ0xLUkVHKCZjbGtfcHhhOTV4X2J0dWFydCwgInB4YTJ4eC11YXJ0LjEiLCBOVUxMKSwKKwlJTklUX0NMS1JFRygmY2xrX3B4YTk1eF9zdHVhcnQsICJweGEyeHgtdWFydC4yIiwgTlVMTCksCisJSU5JVF9DTEtSRUcoJmNsa19weGE5NXhfc3R1YXJ0LCAicHhhMnh4LWlyIiwgIlVBUlRDTEsiKSwKKwlJTklUX0NMS1JFRygmY2xrX3B4YTk1eF9pMmMsICJweGEyeHgtaTJjLjAiLCBOVUxMKSwKKwlJTklUX0NMS1JFRygmY2xrX3B4YTk1eF9rZXlwYWQsICJweGEyN3gta2V5cGFkIiwgTlVMTCksCisJSU5JVF9DTEtSRUcoJmNsa19weGE5NXhfc3NwMSwgInB4YTI3eC1zc3AuMCIsIE5VTEwpLAorCUlOSVRfQ0xLUkVHKCZjbGtfcHhhOTV4X3NzcDIsICJweGEyN3gtc3NwLjEiLCBOVUxMKSwKKwlJTklUX0NMS1JFRygmY2xrX3B4YTk1eF9zc3AzLCAicHhhMjd4LXNzcC4yIiwgTlVMTCksCisJSU5JVF9DTEtSRUcoJmNsa19weGE5NXhfc3NwNCwgInB4YTI3eC1zc3AuMyIsIE5VTEwpLAorCUlOSVRfQ0xLUkVHKCZjbGtfcHhhOTV4X3B3bTAsICJweGEyN3gtcHdtLjAiLCBOVUxMKSwKKwlJTklUX0NMS1JFRygmY2xrX3B4YTk1eF9wd20xLCAicHhhMjd4LXB3bS4xIiwgTlVMTCksCit9OworCit2b2lkIF9faW5pdCBweGE5NXhfaW5pdF9pcnEodm9pZCkKK3sKKwlweGFfaW5pdF9pcnEoOTYsIE5VTEwpOworCXB4YV9pbml0X2dwaW8oSVJRX0dQSU9fMl94LCAyLCAxMjcsIE5VTEwpOworfQorCisvKgorICogZGV2aWNlIHJlZ2lzdHJhdGlvbiBzcGVjaWZpYyB0byBQWEE5M3guCisgKi8KKwordm9pZCBfX2luaXQgcHhhOTV4X3NldF9pMmNfcG93ZXJfaW5mbyhzdHJ1Y3QgaTJjX3B4YV9wbGF0Zm9ybV9kYXRhICppbmZvKQoreworCXB4YV9yZWdpc3Rlcl9kZXZpY2UoJnB4YTN4eF9kZXZpY2VfaTJjX3Bvd2VyLCBpbmZvKTsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0geworCSZzYTExMDBfZGV2aWNlX3J0YywKKwkmcHhhX2RldmljZV9ydGMsCisJJnB4YTI3eF9kZXZpY2Vfc3NwMSwKKwkmcHhhMjd4X2RldmljZV9zc3AyLAorCSZweGEyN3hfZGV2aWNlX3NzcDMsCisJJnB4YTN4eF9kZXZpY2Vfc3NwNCwKKwkmcHhhMjd4X2RldmljZV9wd20wLAorCSZweGEyN3hfZGV2aWNlX3B3bTEsCit9OworCitzdGF0aWMgc3RydWN0IHN5c19kZXZpY2UgcHhhOTV4X3N5c2RldltdID0geworCXsKKwkJLmNscwk9ICZweGFfaXJxX3N5c2NsYXNzLAorCX0sIHsKKwkJLmNscwk9ICZweGFfZ3Bpb19zeXNjbGFzcywKKwl9LCB7CisJCS5jbHMJPSAmcHhhM3h4X2Nsb2NrX3N5c2NsYXNzLAorCX0KK307CisKK3N0YXRpYyBpbnQgX19pbml0IHB4YTk1eF9pbml0KHZvaWQpCit7CisJaW50IHJldCA9IDAsIGk7CisKKwlpZiAoY3B1X2lzX3B4YTk1eCgpKSB7CisJCW1mcF9pbml0X2Jhc2UoaW9fcDJ2KE1GUFJfQkFTRSkpOworCQltZnBfaW5pdF9hZGRyKHB4YTk1eF9tZnBfYWRkcl9tYXApOworCisJCXJlc2V0X3N0YXR1cyA9IEFSU1I7CisKKwkJLyoKKwkJICogY2xlYXIgUkRIIGJpdCBldmVyeSB0aW1lIGFmdGVyIHJlc2V0CisJCSAqCisJCSAqIE5vdGU6IHRoZSBsYXN0IDMgYml0cyBEeFMgYXJlIHdyaXRlLTEtdG8tY2xlYXIgc28gY2FyZWZ1bGx5CisJCSAqIHByZXNlcnZlIHRoZW0gaGVyZSBpbiBjYXNlIHRoZXkgd2lsbCBiZSByZWZlcmVuY2VkIGxhdGVyCisJCSAqLworCQlBU0NSICY9IH4oQVNDUl9SREggfCBBU0NSX0QxUyB8IEFTQ1JfRDJTIHwgQVNDUl9EM1MpOworCisJCWNsa2Rldl9hZGRfdGFibGUocHhhOTV4X2Nsa3JlZ3MsIEFSUkFZX1NJWkUocHhhOTV4X2Nsa3JlZ3MpKTsKKworCQlpZiAoKHJldCA9IHB4YV9pbml0X2RtYShJUlFfRE1BLCAzMikpKQorCQkJcmV0dXJuIHJldDsKKworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShweGE5NXhfc3lzZGV2KTsgaSsrKSB7CisJCQlyZXQgPSBzeXNkZXZfcmVnaXN0ZXIoJnB4YTk1eF9zeXNkZXZbaV0pOworCQkJaWYgKHJldCkKKwkJCQlwcl9lcnIoImZhaWxlZCB0byByZWdpc3RlciBzeXNkZXZbJWRdXG4iLCBpKTsKKwkJfQorCisJCXJldCA9IHBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZXMsIEFSUkFZX1NJWkUoZGV2aWNlcykpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3Bvc3Rjb3JlX2luaXRjYWxsKHB4YTk1eF9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3JhdW1mZWxkLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9yYXVtZmVsZC5jCmluZGV4IDQxMjFkMDMuLjgzNjExNTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3JhdW1mZWxkLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcmF1bWZlbGQuYwpAQCAtNTg4LDYgKzU4OCw5IEBACiAJLm51bV9tb2Rlcwk9IDEsCiAJLnZpZGVvX21lbV9zaXplID0gMHg0MDAwMDAsCiAJLmxjZF9jb25uCT0gTENEX0NPTE9SX1RGVF8xNkJQUCB8IExDRF9QQ0xLX0VER0VfRkFMTCwKKyNpZmRlZiBDT05GSUdfUFhBM1hYX0dDVQorCS5hY2NlbGVyYXRpb25fZW5hYmxlZCA9IDEsCisjZW5kaWYKIH07CiAKIHN0YXRpYyB2b2lkIF9faW5pdCByYXVtZmVsZF9sY2RfaW5pdCh2b2lkKQpAQCAtNjE2LDYgKzYxOSw4IEBACiAJCXByX3dhcm5pbmcoIlVuYWJsZSB0byByZXF1ZXN0IEdQSU9fRElTUExBWV9FTkFCTEVcbiIpOwogCWVsc2UKIAkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fRElTUExBWV9FTkFCTEUsIDEpOworCisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZweGEzeHhfZGV2aWNlX2djdSk7CiB9CiAKIC8qKgpAQCAtMTA4NSw3ICsxMDkwLDcgQEAKIE1BQ0hJTkVfU1RBUlQoUkFVTUZFTERfUkMsICJSYXVtZmVsZCBDb250cm9sbGVyIikKIAkuYm9vdF9wYXJhbXMJPSBSQVVNRkVMRF9TRFJBTV9CQVNFICsgMHgxMDAsCiAJLmluaXRfbWFjaGluZQk9IHJhdW1mZWxkX2NvbnRyb2xsZXJfaW5pdCwKLQkubWFwX2lvCQk9IHB4YV9tYXBfaW8sCisJLm1hcF9pbwkJPSBweGEzeHhfbWFwX2lvLAogCS5pbml0X2lycQk9IHB4YTN4eF9pbml0X2lycSwKIAkudGltZXIJCT0gJnB4YV90aW1lciwKIE1BQ0hJTkVfRU5ECkBAIC0xMDk1LDcgKzExMDAsNyBAQAogTUFDSElORV9TVEFSVChSQVVNRkVMRF9DT05ORUNUT1IsICJSYXVtZmVsZCBDb25uZWN0b3IiKQogCS5ib290X3BhcmFtcwk9IFJBVU1GRUxEX1NEUkFNX0JBU0UgKyAweDEwMCwKIAkuaW5pdF9tYWNoaW5lCT0gcmF1bWZlbGRfY29ubmVjdG9yX2luaXQsCi0JLm1hcF9pbwkJPSBweGFfbWFwX2lvLAorCS5tYXBfaW8JCT0gcHhhM3h4X21hcF9pbywKIAkuaW5pdF9pcnEJPSBweGEzeHhfaW5pdF9pcnEsCiAJLnRpbWVyCQk9ICZweGFfdGltZXIsCiBNQUNISU5FX0VORApAQCAtMTEwNSw3ICsxMTEwLDcgQEAKIE1BQ0hJTkVfU1RBUlQoUkFVTUZFTERfU1BFQUtFUiwgIlJhdW1mZWxkIFNwZWFrZXIiKQogCS5ib290X3BhcmFtcwk9IFJBVU1GRUxEX1NEUkFNX0JBU0UgKyAweDEwMCwKIAkuaW5pdF9tYWNoaW5lCT0gcmF1bWZlbGRfc3BlYWtlcl9pbml0LAotCS5tYXBfaW8JCT0gcHhhX21hcF9pbywKKwkubWFwX2lvCQk9IHB4YTN4eF9tYXBfaW8sCiAJLmluaXRfaXJxCT0gcHhhM3h4X2luaXRfaXJxLAogCS50aW1lcgkJPSAmcHhhX3RpbWVyLAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3NhYXIuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3NhYXIuYwppbmRleCBmZmE1MGU2Li5jMWNhOGNiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9zYWFyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvc2Fhci5jCkBAIC01OTcsNyArNTk3LDcgQEAKIE1BQ0hJTkVfU1RBUlQoU0FBUiwgIlBYQTkzMCBIYW5kaGVsZCBQbGF0Zm9ybSAoYWthIFNBQVIpIikKIAkvKiBNYWludGFpbmVyOiBFcmljIE1pYW8gPGVyaWMubWlhb0BtYXJ2ZWxsLmNvbT4gKi8KIAkuYm9vdF9wYXJhbXMgICAgPSAweGEwMDAwMTAwLAotCS5tYXBfaW8gICAgICAgICA9IHB4YV9tYXBfaW8sCisJLm1hcF9pbyAgICAgICAgID0gcHhhM3h4X21hcF9pbywKIAkuaW5pdF9pcnEgICAgICAgPSBweGEzeHhfaW5pdF9pcnEsCiAJLnRpbWVyICAgICAgICAgID0gJnB4YV90aW1lciwKIAkuaW5pdF9tYWNoaW5lICAgPSBzYWFyX2luaXQsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9zYWFyYi5jIGIvYXJjaC9hcm0vbWFjaC1weGEvc2FhcmIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDk3OTIyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvc2FhcmIuYwpAQCAtMCwwICsxLDExNCBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tYWNoLXB4YS9zYWFyYi5jCisgKgorICogIFN1cHBvcnQgZm9yIHRoZSBNYXJ2ZWxsIEhhbmRoZWxkIFBsYXRmb3JtIChha2EgU0FBUkIpCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNy0yMDEwIE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqICBwdWJsaXNoaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvODhwbTg2MHguaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorCisjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvbWZwLmg+CisjaW5jbHVkZSA8bWFjaC9tZnAtcHhhOTMwLmg+CisjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CisKKyNpbmNsdWRlIDxwbGF0L2kyYy5oPgorCisjaW5jbHVkZSAiZ2VuZXJpYy5oIgorCisjZGVmaW5lIFNBQVJCX05SX0lSUVMJKElSUV9CT0FSRF9TVEFSVCArIDQwKQorCitzdGF0aWMgc3RydWN0IHBtODYweF90b3VjaF9wZGF0YSBzYWFyYl90b3VjaCA9IHsKKwkuZ3BhZGNfcHJlYmlhcwk9IDEsCisJLnNsb3RfY3ljbGUJPSAxLAorCS50c2lfcHJlYmlhcwk9IDYsCisJLnBlbl9wcmViaWFzCT0gMTYsCisJLnBlbl9wcmVjaGcJPSAyLAorCS5yZXNfeAkJPSAzMDAsCit9OworCitzdGF0aWMgc3RydWN0IHBtODYweF9iYWNrbGlnaHRfcGRhdGEgc2FhcmJfYmFja2xpZ2h0W10gPSB7CisJeworCQkuaWQJPSBQTTg2MDZfSURfQkFDS0xJR0hULAorCQkuaXNldAk9IFBNODYwNl9XTEVEX0NVUlJFTlQoMjQpLAorCQkuZmxhZ3MJPSBQTTg2MDZfQkFDS0xJR0hUMSwKKwl9LAorCXt9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbTg2MHhfbGVkX3BkYXRhIHNhYXJiX2xlZFtdID0geworCXsKKwkJLmlkCT0gUE04NjA2X0lEX0xFRCwKKwkJLmlzZXQJPSBQTTg2MDZfTEVEX0NVUlJFTlQoMTIpLAorCQkuZmxhZ3MJPSBQTTg2MDZfTEVEMV9SRUQsCisJfSwgeworCQkuaWQJPSBQTTg2MDZfSURfTEVELAorCQkuaXNldAk9IFBNODYwNl9MRURfQ1VSUkVOVCgxMiksCisJCS5mbGFncwk9IFBNODYwNl9MRUQxX0dSRUVOLAorCX0sIHsKKwkJLmlkCT0gUE04NjA2X0lEX0xFRCwKKwkJLmlzZXQJPSBQTTg2MDZfTEVEX0NVUlJFTlQoMTIpLAorCQkuZmxhZ3MJPSBQTTg2MDZfTEVEMV9CTFVFLAorCX0sIHsKKwkJLmlkCT0gUE04NjA2X0lEX0xFRCwKKwkJLmlzZXQJPSBQTTg2MDZfTEVEX0NVUlJFTlQoMTIpLAorCQkuZmxhZ3MJPSBQTTg2MDZfTEVEMl9SRUQsCisJfSwgeworCQkuaWQJPSBQTTg2MDZfSURfTEVELAorCQkuaXNldAk9IFBNODYwNl9MRURfQ1VSUkVOVCgxMiksCisJCS5mbGFncwk9IFBNODYwNl9MRUQyX0dSRUVOLAorCX0sIHsKKwkJLmlkCT0gUE04NjA2X0lEX0xFRCwKKwkJLmlzZXQJPSBQTTg2MDZfTEVEX0NVUlJFTlQoMTIpLAorCQkuZmxhZ3MJPSBQTTg2MDZfTEVEMl9CTFVFLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBtODYweF9wbGF0Zm9ybV9kYXRhIHNhYXJiX3BtODYwN19pbmZvID0geworCS50b3VjaAkJPSAmc2FhcmJfdG91Y2gsCisJLmJhY2tsaWdodAk9ICZzYWFyYl9iYWNrbGlnaHRbMF0sCisJLmxlZAkJPSAmc2FhcmJfbGVkWzBdLAorCS5jb21wYW5pb25fYWRkcgk9IDB4MTAsCisJLmlycV9tb2RlCT0gMCwKKwkuaXJxX2Jhc2UJPSBJUlFfQk9BUkRfU1RBUlQsCisKKwkuaTJjX3BvcnQJPSBHSTJDX1BPUlQsCit9OworCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIHNhYXJiX2kyY19pbmZvW10gPSB7CisJeworCQkudHlwZQkJPSAiODhQTTg2MHgiLAorCQkuYWRkcgkJPSAweDM0LAorCQkucGxhdGZvcm1fZGF0YQk9ICZzYWFyYl9wbTg2MDdfaW5mbywKKwkJLmlycQkJPSBncGlvX3RvX2lycShtZnBfdG9fZ3BpbyhNRlBfUElOX0dQSU84MykpLAorCX0sCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgc2FhcmJfaW5pdCh2b2lkKQoreworCXB4YV9zZXRfZmZ1YXJ0X2luZm8oTlVMTCk7CisJcHhhX3NldF9pMmNfaW5mbyhOVUxMKTsKKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBBUlJBWV9BTkRfU0laRShzYWFyYl9pMmNfaW5mbykpOworfQorCitNQUNISU5FX1NUQVJUKFNBQVJCLCAiUFhBOTU1IEhhbmRoZWxkIFBsYXRmb3JtIChha2EgU0FBUkIpIikKKwkuYm9vdF9wYXJhbXMgICAgPSAweGEwMDAwMTAwLAorCS5tYXBfaW8gICAgICAgICA9IHB4YV9tYXBfaW8sCisJLm5yX2lycXMJPSBTQUFSQl9OUl9JUlFTLAorCS5pbml0X2lycSAgICAgICA9IHB4YTk1eF9pbml0X2lycSwKKwkudGltZXIgICAgICAgICAgPSAmcHhhX3RpbWVyLAorCS5pbml0X21hY2hpbmUgICA9IHNhYXJiX2luaXQsCitNQUNISU5FX0VORAorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9zaGFycHNsX3BtLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9zaGFycHNsX3BtLmMKaW5kZXggOGZlZDAyNy4uZTY4ZDQ2ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvc2hhcnBzbF9wbS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3NoYXJwc2xfcG0uYwpAQCAtNTc5LDcgKzU3OSw4IEBACiBzdGF0aWMgaW50IHNoYXJwc2xfcG1fc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc2hhcnBzbF9wbS5mbGFncyB8PSBTSEFSUFNMX1NVU1BFTkRFRDsKLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCWZsdXNoX2RlbGF5ZWRfd29ya19zeW5jKCZ0b2dnbGVfY2hhcmdlcik7CisJZmx1c2hfZGVsYXllZF93b3JrX3N5bmMoJnNoYXJwc2xfYmF0KTsKIAogCWlmIChzaGFycHNsX3BtLmNoYXJnZV9tb2RlID09IENIUkdfT04pCiAJCXNoYXJwc2xfcG0uZmxhZ3MgfD0gU0hBUlBTTF9ET19PRkZMSU5FX0NIUkc7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9zbGVlcC5TIGIvYXJjaC9hcm0vbWFjaC1weGEvc2xlZXAuUwppbmRleCBhZTAwODExLi5jNTUxZGE4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9zbGVlcC5TCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3NsZWVwLlMKQEAgLTE0LDcgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLQorI2luY2x1ZGUgPG1hY2gvc21lbWMuaD4KICNpbmNsdWRlIDxtYWNoL3B4YTJ4eC1yZWdzLmg+CiAKICNkZWZpbmUgTURSRUZSX0tESVYJMHgyMDBhNDAwMAkvLyBhbGwgYmFua3MKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3NtZW1jLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9zbWVtYy5jCmluZGV4IGQ2ZjY5MDQuLjIzMmI3MzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3NtZW1jLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvc21lbWMuYwpAQCAtOSw1MCArOSwzNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotCi0jZGVmaW5lIFNNRU1DX1BIWVNfQkFTRQkoMHg0QTAwMDAwMCkKLSNkZWZpbmUgU01FTUNfUEhZU19TSVpFCSgweDkwKQotCi0jZGVmaW5lIE1TQzAJCSgweDA4KQkvKiBTdGF0aWMgTWVtb3J5IENvbnRyb2xsZXIgUmVnaXN0ZXIgMCAqLwotI2RlZmluZSBNU0MxCQkoMHgwQykJLyogU3RhdGljIE1lbW9yeSBDb250cm9sbGVyIFJlZ2lzdGVyIDEgKi8KLSNkZWZpbmUgU1hDTkZHCQkoMHgxQykJLyogU3luY2hyb25vdXMgU3RhdGljIE1lbW9yeSBDb250cm9sIFJlZ2lzdGVyICovCi0jZGVmaW5lIE1FTUNMS0NGRwkoMHg2OCkJLyogQ2xvY2sgQ29uZmlndXJhdGlvbiAqLwotI2RlZmluZSBDU0FEUkNGRzAJKDB4ODApCS8qIEFkZHJlc3MgQ29uZmlndXJhdGlvbiBSZWdpc3RlciBmb3IgQ1MwICovCi0jZGVmaW5lIENTQURSQ0ZHMQkoMHg4NCkJLyogQWRkcmVzcyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIGZvciBDUzEgKi8KLSNkZWZpbmUgQ1NBRFJDRkcyCSgweDg4KQkvKiBBZGRyZXNzIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgZm9yIENTMiAqLwotI2RlZmluZSBDU0FEUkNGRzMJKDB4OEMpCS8qIEFkZHJlc3MgQ29uZmlndXJhdGlvbiBSZWdpc3RlciBmb3IgQ1MzICovCisjaW5jbHVkZSA8bWFjaC9zbWVtYy5oPgogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgdm9pZCBfX2lvbWVtICpzbWVtY19tbWlvX2Jhc2U7Ci0KIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1zY1syXTsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHN4Y25mZywgbWVtY2xrY2ZnOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgY3NhZHJjZmdbNF07CiAKIHN0YXRpYyBpbnQgcHhhM3h4X3NtZW1jX3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCW1zY1swXSA9IF9fcmF3X3JlYWRsKHNtZW1jX21taW9fYmFzZSArIE1TQzApOwotCW1zY1sxXSA9IF9fcmF3X3JlYWRsKHNtZW1jX21taW9fYmFzZSArIE1TQzEpOwotCXN4Y25mZyA9IF9fcmF3X3JlYWRsKHNtZW1jX21taW9fYmFzZSArIFNYQ05GRyk7Ci0JbWVtY2xrY2ZnID0gX19yYXdfcmVhZGwoc21lbWNfbW1pb19iYXNlICsgTUVNQ0xLQ0ZHKTsKLQljc2FkcmNmZ1swXSA9IF9fcmF3X3JlYWRsKHNtZW1jX21taW9fYmFzZSArIENTQURSQ0ZHMCk7Ci0JY3NhZHJjZmdbMV0gPSBfX3Jhd19yZWFkbChzbWVtY19tbWlvX2Jhc2UgKyBDU0FEUkNGRzEpOwotCWNzYWRyY2ZnWzJdID0gX19yYXdfcmVhZGwoc21lbWNfbW1pb19iYXNlICsgQ1NBRFJDRkcyKTsKLQljc2FkcmNmZ1szXSA9IF9fcmF3X3JlYWRsKHNtZW1jX21taW9fYmFzZSArIENTQURSQ0ZHMyk7CisJbXNjWzBdID0gX19yYXdfcmVhZGwoTVNDMCk7CisJbXNjWzFdID0gX19yYXdfcmVhZGwoTVNDMSk7CisJc3hjbmZnID0gX19yYXdfcmVhZGwoU1hDTkZHKTsKKwltZW1jbGtjZmcgPSBfX3Jhd19yZWFkbChNRU1DTEtDRkcpOworCWNzYWRyY2ZnWzBdID0gX19yYXdfcmVhZGwoQ1NBRFJDRkcwKTsKKwljc2FkcmNmZ1sxXSA9IF9fcmF3X3JlYWRsKENTQURSQ0ZHMSk7CisJY3NhZHJjZmdbMl0gPSBfX3Jhd19yZWFkbChDU0FEUkNGRzIpOworCWNzYWRyY2ZnWzNdID0gX19yYXdfcmVhZGwoQ1NBRFJDRkczKTsKIAogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHB4YTN4eF9zbWVtY19yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKmRldikKIHsKLQlfX3Jhd193cml0ZWwobXNjWzBdLCBzbWVtY19tbWlvX2Jhc2UgKyBNU0MwKTsKLQlfX3Jhd193cml0ZWwobXNjWzFdLCBzbWVtY19tbWlvX2Jhc2UgKyBNU0MxKTsKLQlfX3Jhd193cml0ZWwoc3hjbmZnLCBzbWVtY19tbWlvX2Jhc2UgKyBTWENORkcpOwotCV9fcmF3X3dyaXRlbChtZW1jbGtjZmcsIHNtZW1jX21taW9fYmFzZSArIE1FTUNMS0NGRyk7Ci0JX19yYXdfd3JpdGVsKGNzYWRyY2ZnWzBdLCBzbWVtY19tbWlvX2Jhc2UgKyBDU0FEUkNGRzApOwotCV9fcmF3X3dyaXRlbChjc2FkcmNmZ1sxXSwgc21lbWNfbW1pb19iYXNlICsgQ1NBRFJDRkcxKTsKLQlfX3Jhd193cml0ZWwoY3NhZHJjZmdbMl0sIHNtZW1jX21taW9fYmFzZSArIENTQURSQ0ZHMik7Ci0JX19yYXdfd3JpdGVsKGNzYWRyY2ZnWzNdLCBzbWVtY19tbWlvX2Jhc2UgKyBDU0FEUkNGRzMpOworCV9fcmF3X3dyaXRlbChtc2NbMF0sIE1TQzApOworCV9fcmF3X3dyaXRlbChtc2NbMV0sIE1TQzEpOworCV9fcmF3X3dyaXRlbChzeGNuZmcsIFNYQ05GRyk7CisJX19yYXdfd3JpdGVsKG1lbWNsa2NmZywgTUVNQ0xLQ0ZHKTsKKwlfX3Jhd193cml0ZWwoY3NhZHJjZmdbMF0sIENTQURSQ0ZHMCk7CisJX19yYXdfd3JpdGVsKGNzYWRyY2ZnWzFdLCBDU0FEUkNGRzEpOworCV9fcmF3X3dyaXRlbChjc2FkcmNmZ1syXSwgQ1NBRFJDRkcyKTsKKwlfX3Jhd193cml0ZWwoY3NhZHJjZmdbM10sIENTQURSQ0ZHMyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTczLDEwICs2MCw2IEBACiAJaW50IHJldCA9IDA7CiAKIAlpZiAoY3B1X2lzX3B4YTN4eCgpKSB7Ci0JCXNtZW1jX21taW9fYmFzZSA9IGlvcmVtYXAoU01FTUNfUEhZU19CQVNFLCBTTUVNQ19QSFlTX1NJWkUpOwotCQlpZiAoc21lbWNfbW1pb19iYXNlID09IE5VTEwpCi0JCQlyZXR1cm4gLUVOT0RFVjsKLQogCQlyZXQgPSBzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoJnNtZW1jX3N5c2NsYXNzKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9zcGl0ei5jIGIvYXJjaC9hcm0vbWFjaC1weGEvc3BpdHouYwppbmRleCBmNzM2MTE5Li4wYmM5Mzg3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9zcGl0ei5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3NwaXR6LmMKQEAgLTIzLDEwICsyMywxMSBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvYWRzNzg0Ni5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9jb3JnaV9sY2QuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9weGEyeHhfc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3NoYXJwc2wuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC9tYXRyaXhfa2V5cGFkLmg+CiAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL21hY2hpbmUuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KQEAgLTQxLDkgKzQyLDkgQEAKICNpbmNsdWRlIDxtYWNoL21tYy5oPgogI2luY2x1ZGUgPG1hY2gvb2hjaS5oPgogI2luY2x1ZGUgPG1hY2gvcHhhZmIuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YTJ4eF9zcGkuaD4KICNpbmNsdWRlIDxtYWNoL3NwaXR6Lmg+CiAjaW5jbHVkZSA8bWFjaC9zaGFycHNsX3BtLmg+CisjaW5jbHVkZSA8bWFjaC9zbWVtYy5oPgogCiAjaW5jbHVkZSA8cGxhdC9pMmMuaD4KIApAQCAtOTI5LDkgKzkzMCwxMCBAQAogCiBzdGF0aWMgdm9pZCBzcGl0el9yZXN0YXJ0KGNoYXIgbW9kZSwgY29uc3QgY2hhciAqY21kKQogeworCXVpbnQzMl90IG1zYzAgPSBfX3Jhd19yZWFkbChNU0MwKTsKIAkvKiBCb290bG9hZGVyIG1hZ2ljIGZvciBhIHJlYm9vdCAqLwotCWlmICgoTVNDMCAmIDB4ZmZmZjAwMDApID09IDB4N2ZmMDAwMDApCi0JCU1TQzAgPSAoTVNDMCAmIDB4ZmZmZikgfCAweDdlZTAwMDAwOworCWlmICgobXNjMCAmIDB4ZmZmZjAwMDApID09IDB4N2ZmMDAwMDApCisJCV9fcmF3X3dyaXRlbCgobXNjMCAmIDB4ZmZmZikgfCAweDdlZTAwMDAwLCBNU0MwKTsKIAogCXNwaXR6X3Bvd2Vyb2ZmKCk7CiB9CkBAIC05ODAsNyArOTgyLDcgQEAKICNpZmRlZiBDT05GSUdfTUFDSF9TUElUWgogTUFDSElORV9TVEFSVChTUElUWiwgIlNIQVJQIFNwaXR6IikKIAkuZml4dXAJCT0gc3BpdHpfZml4dXAsCi0JLm1hcF9pbwkJPSBweGFfbWFwX2lvLAorCS5tYXBfaW8JCT0gcHhhMjd4X21hcF9pbywKIAkuaW5pdF9pcnEJPSBweGEyN3hfaW5pdF9pcnEsCiAJLmluaXRfbWFjaGluZQk9IHNwaXR6X2luaXQsCiAJLnRpbWVyCQk9ICZweGFfdGltZXIsCkBAIC05OTAsNyArOTkyLDcgQEAKICNpZmRlZiBDT05GSUdfTUFDSF9CT1JaT0kKIE1BQ0hJTkVfU1RBUlQoQk9SWk9JLCAiU0hBUlAgQm9yem9pIikKIAkuZml4dXAJCT0gc3BpdHpfZml4dXAsCi0JLm1hcF9pbwkJPSBweGFfbWFwX2lvLAorCS5tYXBfaW8JCT0gcHhhMjd4X21hcF9pbywKIAkuaW5pdF9pcnEJPSBweGEyN3hfaW5pdF9pcnEsCiAJLmluaXRfbWFjaGluZQk9IHNwaXR6X2luaXQsCiAJLnRpbWVyCQk9ICZweGFfdGltZXIsCkBAIC0xMDAwLDcgKzEwMDIsNyBAQAogI2lmZGVmIENPTkZJR19NQUNIX0FLSVRBCiBNQUNISU5FX1NUQVJUKEFLSVRBLCAiU0hBUlAgQWtpdGEiKQogCS5maXh1cAkJPSBzcGl0el9maXh1cCwKLQkubWFwX2lvCQk9IHB4YV9tYXBfaW8sCisJLm1hcF9pbwkJPSBweGEyN3hfbWFwX2lvLAogCS5pbml0X2lycQk9IHB4YTI3eF9pbml0X2lycSwKIAkuaW5pdF9tYWNoaW5lCT0gc3BpdHpfaW5pdCwKIAkudGltZXIJCT0gJnB4YV90aW1lciwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3N0YXJnYXRlMi5jIGIvYXJjaC9hcm0vbWFjaC1weGEvc3RhcmdhdGUyLmMKaW5kZXggNzM4YWRjMS4uOWExNGZkYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvc3RhcmdhdGUyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvc3RhcmdhdGUyLmMKQEAgLTQ2LDEwICs0NiwxMSBAQAogI2luY2x1ZGUgPHBsYXQvaTJjLmg+CiAjaW5jbHVkZSA8bWFjaC9tbWMuaD4KICNpbmNsdWRlIDxtYWNoL3VkYy5oPgotI2luY2x1ZGUgPG1hY2gvcHhhMnh4X3NwaS5oPgogI2luY2x1ZGUgPG1hY2gvcHhhMjd4LXVkYy5oPgorI2luY2x1ZGUgPG1hY2gvc21lbWMuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvcHhhMnh4X3NwaS5oPgogI2luY2x1ZGUgPGxpbnV4L21mZC9kYTkwM3guaD4KICNpbmNsdWRlIDxsaW51eC9zaHQxNS5oPgogCkBAIC05NzYsNyArOTc3LDcgQEAKIHsKIAkvKiBUaGlzIGlzIHByb2JhYmx5IGEgYm9hcmQgc3BlY2lmaWMgaGFjayBhcyB0aGlzIG11c3QgYmUgc2V0CiAJICAgcHJpb3IgdG8gY29ubmVjdGluZyB0aGUgTUZQIHN0dWZmIHVwLiAqLwotCU1FQ1IgJj0gfk1FQ1JfTk9TOworCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChNRUNSKSAmIH5NRUNSX05PUywgTUVDUik7CiAKIAlweGEyeHhfbWZwX2NvbmZpZyhBUlJBWV9BTkRfU0laRShzdGFyZ2F0ZTJfcGluX2NvbmZpZykpOwogCkBAIC05OTgsNyArOTk5LDcgQEAKIAogI2lmZGVmIENPTkZJR19NQUNIX0lOVEVMTU9URTIKIE1BQ0hJTkVfU1RBUlQoSU5URUxNT1RFMiwgIklNT1RFIDIiKQotCS5tYXBfaW8JCT0gcHhhX21hcF9pbywKKwkubWFwX2lvCQk9IHB4YTI3eF9tYXBfaW8sCiAJLmluaXRfaXJxCT0gcHhhMjd4X2luaXRfaXJxLAogCS50aW1lcgkJPSAmcHhhX3RpbWVyLAogCS5pbml0X21hY2hpbmUJPSBpbW90ZTJfaW5pdCwKQEAgLTEwMDgsNyArMTAwOSw3IEBACiAKICNpZmRlZiBDT05GSUdfTUFDSF9TVEFSR0FURTIKIE1BQ0hJTkVfU1RBUlQoU1RBUkdBVEUyLCAiU3RhcmdhdGUgMiIpCi0JLm1hcF9pbyA9IHB4YV9tYXBfaW8sCisJLm1hcF9pbyA9IHB4YTI3eF9tYXBfaW8sCiAJLm5yX2lycXMgPSBTVEFSR0FURV9OUl9JUlFTLAogCS5pbml0X2lycSA9IHB4YTI3eF9pbml0X2lycSwKIAkudGltZXIgPSAmcHhhX3RpbWVyLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvdGF2b3JldmIuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3Rhdm9yZXZiLmMKaW5kZXggMmVhNzU0NS4uOWNlY2Y4MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvdGF2b3JldmIuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS90YXZvcmV2Yi5jCkBAIC00OTAsNyArNDkwLDcgQEAKIE1BQ0hJTkVfU1RBUlQoVEFWT1JFVkIsICJQWEE5MzAgRXZhbHVhdGlvbiBCb2FyZCAoYWthIFRhdm9yRVZCKSIpCiAJLyogTWFpbnRhaW5lcjogRXJpYyBNaWFvIDxlcmljLm1pYW9AbWFydmVsbC5jb20+ICovCiAJLmJvb3RfcGFyYW1zICAgID0gMHhhMDAwMDEwMCwKLQkubWFwX2lvICAgICAgICAgPSBweGFfbWFwX2lvLAorCS5tYXBfaW8gICAgICAgICA9IHB4YTN4eF9tYXBfaW8sCiAJLmluaXRfaXJxICAgICAgID0gcHhhM3h4X2luaXRfaXJxLAogCS50aW1lciAgICAgICAgICA9ICZweGFfdGltZXIsCiAJLmluaXRfbWFjaGluZSAgID0gdGF2b3JldmJfaW5pdCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3Rhdm9yZXZiMy5jIGIvYXJjaC9hcm0vbWFjaC1weGEvdGF2b3JldmIzLmMKaW5kZXggZGMzMDExNi4uNzAxOTFhOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvdGF2b3JldmIzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvdGF2b3JldmIzLmMKQEAgLTEyNyw3ICsxMjcsNyBAQAogCiBNQUNISU5FX1NUQVJUKFRBVk9SRVZCMywgIlBYQTk1MCBFdmFsdWF0aW9uIEJvYXJkIChha2EgVGF2b3JFVkIzKSIpCiAJLmJvb3RfcGFyYW1zCT0gMHhhMDAwMDEwMCwKLQkubWFwX2lvICAgICAgICAgPSBweGFfbWFwX2lvLAorCS5tYXBfaW8gICAgICAgICA9IHB4YTN4eF9tYXBfaW8sCiAJLm5yX2lycXMJPSBUQVZPUkVWQjNfTlJfSVJRUywKIAkuaW5pdF9pcnEgICAgICAgPSBweGEzeHhfaW5pdF9pcnEsCiAJLnRpbWVyICAgICAgICAgID0gJnB4YV90aW1lciwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3RpbWUuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3RpbWUuYwppbmRleCAyOTNlNDBhLi5lN2Y2NGQ5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS90aW1lLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvdGltZS5jCkBAIC0xNywxMSArMTcsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9jbG9ja2NoaXBzLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9jbnQzMl90b182My5oPgogCiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorI2luY2x1ZGUgPGFzbS9zY2hlZF9jbG9jay5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1vc3QuaD4KIAogLyoKQEAgLTMyLDI5ICszMiwxOCBAQAogICogbG9uZyBhcyB0aGVyZSBpcyBhbHdheXMgbGVzcyB0aGFuIDU4MiBzZWNvbmRzIGJldHdlZW4gc3VjY2Vzc2l2ZQogICogY2FsbHMgdG8gc2NoZWRfY2xvY2soKSB3aGljaCBzaG91bGQgYWx3YXlzIGJlIHRoZSBjYXNlIGluIHByYWN0aWNlLgogICovCitzdGF0aWMgREVGSU5FX0NMT0NLX0RBVEEoY2QpOwogCi0jZGVmaW5lIE9TQ1IyTlNfU0NBTEVfRkFDVE9SIDEwCi0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIG9zY3IybnNfc2NhbGU7Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBzZXRfb3NjcjJuc19zY2FsZSh1bnNpZ25lZCBsb25nIG9zY3JfcmF0ZSkKK3Vuc2lnbmVkIGxvbmcgbG9uZyBub3RyYWNlIHNjaGVkX2Nsb2NrKHZvaWQpCiB7Ci0JdW5zaWduZWQgbG9uZyBsb25nIHYgPSAxMDAwMDAwMDAwVUxMIDw8IE9TQ1IyTlNfU0NBTEVfRkFDVE9SOwotCWRvX2Rpdih2LCBvc2NyX3JhdGUpOwotCW9zY3IybnNfc2NhbGUgPSB2OwotCS8qCi0JICogV2Ugd2FudCBhbiBldmVuIHZhbHVlIHRvIGF1dG9tYXRpY2FsbHkgY2xlYXIgdGhlIHRvcCBiaXQKLQkgKiByZXR1cm5lZCBieSBjbnQzMl90b182MygpIHdpdGhvdXQgYW4gYWRkaXRpb25hbCBydW4gdGltZQotCSAqIGluc3RydWN0aW9uLiBTbyBpZiB0aGUgTFNCIGlzIDEgdGhlbiByb3VuZCBpdCB1cC4KLQkgKi8KLQlpZiAob3NjcjJuc19zY2FsZSAmIDEpCi0JCW9zY3IybnNfc2NhbGUrKzsKKwl1MzIgY3ljID0gT1NDUjsKKwlyZXR1cm4gY3ljX3RvX3NjaGVkX2Nsb2NrKCZjZCwgY3ljLCAodTMyKX4wKTsKIH0KIAotdW5zaWduZWQgbG9uZyBsb25nIHNjaGVkX2Nsb2NrKHZvaWQpCitzdGF0aWMgdm9pZCBub3RyYWNlIHB4YV91cGRhdGVfc2NoZWRfY2xvY2sodm9pZCkKIHsKLQl1bnNpZ25lZCBsb25nIGxvbmcgdiA9IGNudDMyX3RvXzYzKE9TQ1IpOwotCXJldHVybiAodiAqIG9zY3IybnNfc2NhbGUpID4+IE9TQ1IyTlNfU0NBTEVfRkFDVE9SOworCXUzMiBjeWMgPSBPU0NSOworCXVwZGF0ZV9zY2hlZF9jbG9jaygmY2QsIGN5YywgKHUzMil+MCk7CiB9CiAKIApAQCAtMTI3LDcgKzExNiw2IEBACiAJLnJhdGluZyAgICAgICAgID0gMjAwLAogCS5yZWFkICAgICAgICAgICA9IHB4YV9yZWFkX29zY3IsCiAJLm1hc2sgICAgICAgICAgID0gQ0xPQ0tTT1VSQ0VfTUFTSygzMiksCi0JLnNoaWZ0ICAgICAgICAgID0gMjAsCiAJLmZsYWdzCQk9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTLAogfTsKIApAQCAtMTQ1LDcgKzEzMyw3IEBACiAJT0lFUiA9IDA7CiAJT1NTUiA9IE9TU1JfTTAgfCBPU1NSX00xIHwgT1NTUl9NMiB8IE9TU1JfTTM7CiAKLQlzZXRfb3NjcjJuc19zY2FsZShjbG9ja190aWNrX3JhdGUpOworCWluaXRfc2NoZWRfY2xvY2soJmNkLCBweGFfdXBkYXRlX3NjaGVkX2Nsb2NrLCAzMiwgY2xvY2tfdGlja19yYXRlKTsKIAogCWNrZXZ0X3B4YV9vc21yMC5tdWx0ID0KIAkJZGl2X3NjKGNsb2NrX3RpY2tfcmF0ZSwgTlNFQ19QRVJfU0VDLCBja2V2dF9weGFfb3NtcjAuc2hpZnQpOwpAQCAtMTU1LDEyICsxNDMsOSBAQAogCQljbG9ja2V2ZW50X2RlbHRhMm5zKE1JTl9PU0NSX0RFTFRBICogMiwgJmNrZXZ0X3B4YV9vc21yMCkgKyAxOwogCWNrZXZ0X3B4YV9vc21yMC5jcHVtYXNrID0gY3B1bWFza19vZigwKTsKIAotCWNrc3JjX3B4YV9vc2NyMC5tdWx0ID0KLQkJY2xvY2tzb3VyY2VfaHoybXVsdChjbG9ja190aWNrX3JhdGUsIGNrc3JjX3B4YV9vc2NyMC5zaGlmdCk7Ci0KIAlzZXR1cF9pcnEoSVJRX09TVDAsICZweGFfb3N0MF9pcnEpOwogCi0JY2xvY2tzb3VyY2VfcmVnaXN0ZXIoJmNrc3JjX3B4YV9vc2NyMCk7CisJY2xvY2tzb3VyY2VfcmVnaXN0ZXJfaHooJmNrc3JjX3B4YV9vc2NyMCwgY2xvY2tfdGlja19yYXRlKTsKIAljbG9ja2V2ZW50c19yZWdpc3Rlcl9kZXZpY2UoJmNrZXZ0X3B4YV9vc21yMCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3Rvc2EuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3Rvc2EuYwppbmRleCAwZWUxZGY0Li5hZjE1MmU3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS90b3NhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvdG9zYS5jCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L3BkYV9wb3dlci5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvcHhhMnh4X3NwaS5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0L21hdHJpeF9rZXlwYWQuaD4KIAogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgpAQCAtNDQsOCArNDUsOCBAQAogI2luY2x1ZGUgPG1hY2gvbW1jLmg+CiAjaW5jbHVkZSA8bWFjaC91ZGMuaD4KICNpbmNsdWRlIDxtYWNoL3Rvc2FfYnQuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YTJ4eF9zcGkuaD4KICNpbmNsdWRlIDxtYWNoL2F1ZGlvLmg+CisjaW5jbHVkZSA8bWFjaC9zbWVtYy5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPG1hY2gvdG9zYS5oPgpAQCAtODkzLDkgKzg5NCwxMSBAQAogCiBzdGF0aWMgdm9pZCB0b3NhX3Jlc3RhcnQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpCiB7CisJdWludDMyX3QgbXNjMCA9IF9fcmF3X3JlYWRsKE1TQzApOworCiAJLyogQm9vdGxvYWRlciBtYWdpYyBmb3IgYSByZWJvb3QgKi8KLQlpZigoTVNDMCAmIDB4ZmZmZjAwMDApID09IDB4N2ZmMDAwMDApCi0JCU1TQzAgPSAoTVNDMCAmIDB4ZmZmZikgfCAweDdlZTAwMDAwOworCWlmKChtc2MwICYgMHhmZmZmMDAwMCkgPT0gMHg3ZmYwMDAwMCkKKwkJX19yYXdfd3JpdGVsKChtc2MwICYgMHhmZmZmKSB8IDB4N2VlMDAwMDAsIE1TQzApOwogCiAJdG9zYV9wb3dlcm9mZigpOwogfQpAQCAtOTUzLDcgKzk1Niw3IEBACiAKIE1BQ0hJTkVfU1RBUlQoVE9TQSwgIlNIQVJQIFRvc2EiKQogCS5maXh1cCAgICAgICAgICA9IGZpeHVwX3Rvc2EsCi0JLm1hcF9pbyAgICAgICAgID0gcHhhX21hcF9pbywKKwkubWFwX2lvICAgICAgICAgPSBweGEyNXhfbWFwX2lvLAogCS5ucl9pcnFzCT0gVE9TQV9OUl9JUlFTLAogCS5pbml0X2lycSAgICAgICA9IHB4YTI1eF9pbml0X2lycSwKIAkuaW5pdF9tYWNoaW5lICAgPSB0b3NhX2luaXQsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS90cml6ZXBzNC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvdHJpemVwczQuYwppbmRleCA1NjVkMDYyLi40MjMyNjFkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS90cml6ZXBzNC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3RyaXplcHM0LmMKQEAgLTQwLDEzICs0MCwxMyBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL2ZsYXNoLmg+CiAKICNpbmNsdWRlIDxtYWNoL3B4YTI3eC5oPgotI2luY2x1ZGUgPG1hY2gvcHhhMnh4X3NwaS5oPgogI2luY2x1ZGUgPG1hY2gvdHJpemVwczQuaD4KICNpbmNsdWRlIDxtYWNoL2F1ZGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9weGFmYi5oPgogI2luY2x1ZGUgPG1hY2gvbW1jLmg+CiAjaW5jbHVkZSA8bWFjaC9pcmRhLmg+CiAjaW5jbHVkZSA8bWFjaC9vaGNpLmg+CisjaW5jbHVkZSA8bWFjaC9zbWVtYy5oPgogI2luY2x1ZGUgPHBsYXQvaTJjLmg+CiAKICNpbmNsdWRlICJnZW5lcmljLmgiCkBAIC01MzksMTAgKzUzOSwxMCBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgdHJpemVwczRfbWFwX2lvKHZvaWQpCiB7Ci0JcHhhX21hcF9pbygpOworCXB4YTI3eF9tYXBfaW8oKTsKIAlpb3RhYmxlX2luaXQodHJpemVwczRfaW9fZGVzYywgQVJSQVlfU0laRSh0cml6ZXBzNF9pb19kZXNjKSk7CiAKLQlpZiAoKE1TQzAgJiAweDgpICYmIChCT09UX0RFRiAmIDB4MSkpIHsKKwlpZiAoKF9fcmF3X3JlYWRsKE1TQzApICYgMHg4KSAmJiAoX19yYXdfcmVhZGwoQk9PVF9ERUYpICYgMHgxKSkgewogCQkvKiBpZiBmbGFzaCBpcyAxNiBiaXQgd2lkZSBpdHMgYSBUcml6ZXBzNCBXTCAqLwogCQlfX21hY2hpbmVfYXJjaF90eXBlID0gTUFDSF9UWVBFX1RSSVpFUFM0V0w7CiAJCXRyaXplcHM0X2ZsYXNoX2RhdGFbMF0ud2lkdGggPSAyOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvdmlwZXIuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3ZpcGVyLmMKaW5kZXggNDM4ZmM5YS4uZGU2OWIyMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvdmlwZXIuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS92aXBlci5jCkBAIC05ODMsNyArOTgzLDcgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IHZpcGVyX21hcF9pbyh2b2lkKQogewotCXB4YV9tYXBfaW8oKTsKKwlweGEyNXhfbWFwX2lvKCk7CiAKIAlpb3RhYmxlX2luaXQodmlwZXJfaW9fZGVzYywgQVJSQVlfU0laRSh2aXBlcl9pb19kZXNjKSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3ZwYWMyNzAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3ZwYWMyNzAuYwppbmRleCBmNDVhYzA5Li5iOWI1Nzk3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS92cGFjMjcwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvdnBhYzI3MC5jCkBAIC03MTksNyArNzE5LDcgQEAKIAogTUFDSElORV9TVEFSVChWUEFDMjcwLCAiVm9pcGFjIFBYQTI3MCIpCiAJLmJvb3RfcGFyYW1zCT0gMHhhMDAwMDEwMCwKLQkubWFwX2lvCQk9IHB4YV9tYXBfaW8sCisJLm1hcF9pbwkJPSBweGEyN3hfbWFwX2lvLAogCS5pbml0X2lycQk9IHB4YTI3eF9pbml0X2lycSwKIAkudGltZXIJCT0gJnB4YV90aW1lciwKIAkuaW5pdF9tYWNoaW5lCT0gdnBhYzI3MF9pbml0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS94Y2VwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS94Y2VwLmMKaW5kZXggMzI2MGNlNy4uNTFjMDI4MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEveGNlcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3hjZXAuYwpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL3B4YTJ4eC1yZWdzLmg+CiAjaW5jbHVkZSA8bWFjaC9tZnAtcHhhMjV4Lmg+CisjaW5jbHVkZSA8bWFjaC9zbWVtYy5oPgogCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogCkBAIC0xNzIsOSArMTczLDkgQEAKIAogCS8qIFNlZSBJbnRlbCBYU2NhbGUgRGV2ZWxvcGVyJ3MgR3VpZGUgZm9yIGRldGFpbHMgKi8KIAkvKiBTZXQgUkRGIGFuZCBSRE4gdG8gYXBwcm9wcmlhdGUgdmFsdWVzIChjaGlwIHNlbGVjdCAzIChzbWM5MXgpKSAqLwotCU1TQzEgPSAoTVNDMSAmIDB4ZmZmZikgfCAweEQ1NTQwMDAwOworCV9fcmF3X3dyaXRlbCgoX19yYXdfcmVhZGwoTVNDMSkgJiAweGZmZmYpIHwgMHhENTU0MDAwMCwgTVNDMSk7CiAJLyogU2V0IFJERiBhbmQgUkROIHRvIGFwcHJvcHJpYXRlIHZhbHVlcyAoY2hpcCBzZWxlY3QgNSAoZnBnYSkpICovCi0JTVNDMiA9IChNU0MyICYgMHhmZmZmKSB8IDB4NzJBMDAwMDA7CisJX19yYXdfd3JpdGVsKChfX3Jhd19yZWFkbChNU0MyKSAmIDB4ZmZmZikgfCAweDcyQTAwMDAwLCBNU0MyKTsKIAogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKEFSUkFZX0FORF9TSVpFKGRldmljZXMpKTsKIAlweGFfc2V0X2kyY19pbmZvKCZ4Y2VwX2kyY19wbGF0Zm9ybV9kYXRhKTsKQEAgLTE4Myw3ICsxODQsNyBAQAogTUFDSElORV9TVEFSVChYQ0VQLCAiSXNrcmF0ZWwgWENFUCIpCiAJLmJvb3RfcGFyYW1zCT0gMHhhMDAwMDEwMCwKIAkuaW5pdF9tYWNoaW5lCT0geGNlcF9pbml0LAotCS5tYXBfaW8JCT0gcHhhX21hcF9pbywKKwkubWFwX2lvCQk9IHB4YTI1eF9tYXBfaW8sCiAJLmluaXRfaXJxCT0gcHhhMjV4X2luaXRfaXJxLAogCS50aW1lcgkJPSAmcHhhX3RpbWVyLAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3oyLmMgYi9hcmNoL2FybS9tYWNoLXB4YS96Mi5jCmluZGV4IGZlZmRlOTguLmEzMjNlMDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3oyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvejIuYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3oyX2JhdHRlcnkuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvcHhhMnh4X3NwaS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9saWJlcnRhc19zcGkuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvbG1zMjgzZ2YwNS5oPgogI2luY2x1ZGUgPGxpbnV4L3Bvd2VyX3N1cHBseS5oPgpAQCAtMzgsNyArMzksNiBAQAogI2luY2x1ZGUgPG1hY2gvcHhhZmIuaD4KICNpbmNsdWRlIDxtYWNoL21tYy5oPgogI2luY2x1ZGUgPHBsYXQvcHhhMjd4X2tleXBhZC5oPgotI2luY2x1ZGUgPG1hY2gvcHhhMnh4X3NwaS5oPgogCiAjaW5jbHVkZSA8cGxhdC9pMmMuaD4KIApAQCAtNzA0LDcgKzcwNCw3IEBACiAKIE1BQ0hJTkVfU1RBUlQoWklQSVQyLCAiWmlwaXQgWjIiKQogCS5ib290X3BhcmFtcwk9IDB4YTAwMDAxMDAsCi0JLm1hcF9pbwkJPSBweGFfbWFwX2lvLAorCS5tYXBfaW8JCT0gcHhhMjd4X21hcF9pbywKIAkuaW5pdF9pcnEJPSBweGEyN3hfaW5pdF9pcnEsCiAJLnRpbWVyCQk9ICZweGFfdGltZXIsCiAJLmluaXRfbWFjaGluZQk9IHoyX2luaXQsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS96ZXVzLmMgYi9hcmNoL2FybS9tYWNoLXB4YS96ZXVzLmMKaW5kZXggZGVhNDZhMi4uYmYwMzRjNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvemV1cy5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3pldXMuYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RtOTAwMC5oPgogI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9weGEyeHhfc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KQEAgLTQxLDEyICs0MiwxMiBAQAogI2luY2x1ZGUgPG1hY2gvcHhhMjd4LXVkYy5oPgogI2luY2x1ZGUgPG1hY2gvdWRjLmg+CiAjaW5jbHVkZSA8bWFjaC9weGFmYi5oPgotI2luY2x1ZGUgPG1hY2gvcHhhMnh4X3NwaS5oPgogI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTI3eC5oPgogI2luY2x1ZGUgPG1hY2gvcG0uaD4KICNpbmNsdWRlIDxtYWNoL2F1ZGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9hcmNvbS1wY21jaWEuaD4KICNpbmNsdWRlIDxtYWNoL3pldXMuaD4KKyNpbmNsdWRlIDxtYWNoL3NtZW1jLmg+CiAKICNpbmNsdWRlICJnZW5lcmljLmgiCiAKQEAgLTgyMywxMyArODI0LDE2IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgemV1c19pbml0KHZvaWQpCiB7CiAJdTE2IGRtOTAwMF9tc2MgPSBETTlLX01TQ19WQUxVRTsKKwl1MzIgbXNjMCwgbXNjMTsKIAogCXN5c3RlbV9yZXYgPSBfX3Jhd19yZWFkdyhaRVVTX0NQTERfVkVSU0lPTik7CiAJcHJfaW5mbygiWmV1cyBDUExEIFYlZEklZFxuIiwgKHN5c3RlbV9yZXYgJiAweGYwKSA+PiA0LCAoc3lzdGVtX3JldiAmIDB4MGYpKTsKIAogCS8qIEZpeCB0aW1pbmdzIGZvciBkbTkwMDBzIChDUzEvQ1MyKSovCi0JTVNDMCA9IChNU0MwICYgMHhmZmZmKSB8IChkbTkwMDBfbXNjIDw8IDE2KTsKLQlNU0MxID0gKE1TQzEgJiAweGZmZmYwMDAwKSB8IGRtOTAwMF9tc2M7CisJbXNjMCA9IF9fcmF3X3JlYWRsKE1TQzApICYgMHgwMDAwZmZmZiB8IChkbTkwMDBfbXNjIDw8IDE2KTsKKwltc2MxID0gX19yYXdfcmVhZGwoTVNDMSkgJiAweGZmZmYwMDAwIHwgZG05MDAwX21zYzsKKwlfX3Jhd193cml0ZWwobXNjMCwgTVNDMCk7CisJX19yYXdfd3JpdGVsKG1zYzEsIE1TQzEpOwogCiAJcG1fcG93ZXJfb2ZmID0gemV1c19wb3dlcl9vZmY7CiAJemV1c19zZXR1cF9hcG0oKTsKQEAgLTg4Myw3ICs4ODcsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgemV1c19tYXBfaW8odm9pZCkKIHsKLQlweGFfbWFwX2lvKCk7CisJcHhhMjd4X21hcF9pbygpOwogCiAJaW90YWJsZV9pbml0KHpldXNfaW9fZGVzYywgQVJSQVlfU0laRSh6ZXVzX2lvX2Rlc2MpKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvenlsb25pdGUuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3p5bG9uaXRlLmMKaW5kZXggNzAyZjdhNi4uYTRjNzg0YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvenlsb25pdGUuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS96eWxvbml0ZS5jCkBAIC00MjMsNyArNDIzLDcgQEAKIAogTUFDSElORV9TVEFSVChaWUxPTklURSwgIlBYQTN4eCBQbGF0Zm9ybSBEZXZlbG9wbWVudCBLaXQgKGFrYSBaeWxvbml0ZSkiKQogCS5ib290X3BhcmFtcwk9IDB4YTAwMDAxMDAsCi0JLm1hcF9pbwkJPSBweGFfbWFwX2lvLAorCS5tYXBfaW8JCT0gcHhhM3h4X21hcF9pbywKIAkubnJfaXJxcwk9IFpZTE9OSVRFX05SX0lSUVMsCiAJLmluaXRfaXJxCT0gcHhhM3h4X2luaXRfaXJxLAogCS50aW1lcgkJPSAmcHhhX3RpbWVyLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9jb3JlLmMgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2NvcmUuYwppbmRleCAwN2MwODE1Li4xYzY2MDJjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2NvcmUuYworKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2NvcmUuYwpAQCAtMzAsOCArMzAsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2F0YV9wbGF0Zm9ybS5oPgogI2luY2x1ZGUgPGxpbnV4L2FtYmEvbW1jaS5oPgogI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsa2Rldi5oPgogCi0jaW5jbHVkZSA8YXNtL2Nsa2Rldi5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgpAQCAtNDcsMTYgKzQ3LDE0IEBACiAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvZ2ljLmg+CiAKLSNpbmNsdWRlIDxtYWNoL2Nsa2Rldi5oPgogI2luY2x1ZGUgPG1hY2gvcGxhdGZvcm0uaD4KICNpbmNsdWRlIDxtYWNoL2lycXMuaD4KLSNpbmNsdWRlIDxwbGF0L3RpbWVyLXNwLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL3RpbWVyLXNwLmg+CisKKyNpbmNsdWRlIDxwbGF0L3NjaGVkX2Nsb2NrLmg+CiAKICNpbmNsdWRlICJjb3JlLmgiCiAKLS8qIHVzZWQgYnkgZW50cnktbWFjcm8uUyBhbmQgcGxhdHNtcC5jICovCi12b2lkIF9faW9tZW0gKmdpY19jcHVfYmFzZV9hZGRyOwotCiAjaWZkZWYgQ09ORklHX1pPTkVfRE1BCiAvKgogICogQWRqdXN0IHRoZSB6b25lcyBpZiB0aGVyZSBhcmUgcmVzdHJpY3Rpb25zIGZvciBETUEgYWNjZXNzLgpAQCAtNjU4LDYgKzY1NiwxMiBAQAogI2VuZGlmCS8qIENPTkZJR19MRURTICovCiAKIC8qCisgKiBUaGUgc2NoZWRfY2xvY2sgY291bnRlcgorICovCisjZGVmaW5lIFJFRkNPVU5URVIJCShfX2lvX2FkZHJlc3MoUkVBTFZJRVdfU1lTX0JBU0UpICsgXAorCQkJCSBSRUFMVklFV19TWVNfMjRNSHpfT0ZGU0VUKQorCisvKgogICogV2hlcmUgaXMgdGhlIHRpbWVyIChWQSk/CiAgKi8KIHZvaWQgX19pb21lbSAqdGltZXIwX3ZhX2Jhc2U7CkBAIC02NzIsNiArNjc2LDggQEAKIHsKIAl1MzIgdmFsOwogCisJdmVyc2F0aWxlX3NjaGVkX2Nsb2NrX2luaXQoUkVGQ09VTlRFUiwgMjQwMDAwMDApOworCiAJLyogCiAJICogc2V0IGNsb2NrIGZyZXF1ZW5jeTogCiAJICoJUkVBTFZJRVdfUkVGQ0xLIGlzIDMyS0h6CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2NvcmUuaCBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvY29yZS5oCmluZGV4IDc4MWJjYTYuLjY5MzIzOWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvY29yZS5oCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvY29yZS5oCkBAIC01Myw3ICs1Myw2IEBACiBleHRlcm4gc3RydWN0IG1tY2lfcGxhdGZvcm1fZGF0YSByZWFsdmlld19tbWMwX3BsYXRfZGF0YTsKIGV4dGVybiBzdHJ1Y3QgbW1jaV9wbGF0Zm9ybV9kYXRhIHJlYWx2aWV3X21tYzFfcGxhdF9kYXRhOwogZXh0ZXJuIHN0cnVjdCBjbGNkX2JvYXJkIGNsY2RfcGxhdF9kYXRhOwotZXh0ZXJuIHZvaWQgX19pb21lbSAqZ2ljX2NwdV9iYXNlX2FkZHI7CiBleHRlcm4gdm9pZCBfX2lvbWVtICp0aW1lcjBfdmFfYmFzZTsKIGV4dGVybiB2b2lkIF9faW9tZW0gKnRpbWVyMV92YV9iYXNlOwogZXh0ZXJuIHZvaWQgX19pb21lbSAqdGltZXIyX3ZhX2Jhc2U7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2hvdHBsdWcuYyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaG90cGx1Zy5jCmluZGV4IGY5NTUyMWEuLmE4NzUyM2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaG90cGx1Zy5jCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaG90cGx1Zy5jCkBAIC0xMSwxNCArMTEsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KIAogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAKIGV4dGVybiB2b2xhdGlsZSBpbnQgcGVuX3JlbGVhc2U7CiAKLXN0YXRpYyBERUNMQVJFX0NPTVBMRVRJT04oY3B1X2tpbGxlZCk7Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCBjcHVfZW50ZXJfbG93cG93ZXIodm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgdjsKQEAgLTM0LDEwICszMSwxMCBAQAogCSIJYmljCSUwLCAlMCwgIzB4MjBcbiIKIAkiCW1jcglwMTUsIDAsICUwLCBjMSwgYzAsIDFcbiIKIAkiCW1yYwlwMTUsIDAsICUwLCBjMSwgYzAsIDBcbiIKLQkiCWJpYwklMCwgJTAsICMweDA0XG4iCisJIgliaWMJJTAsICUwLCAlMlxuIgogCSIJbWNyCXAxNSwgMCwgJTAsIGMxLCBjMCwgMFxuIgogCSAgOiAiPSZyIiAodikKLQkgIDogInIiICgwKQorCSAgOiAiciIgKDApLCAiSXIiIChDUl9DKQogCSAgOiAiY2MiKTsKIH0KIApAQCAtNDYsMTcgKzQzLDE3IEBACiAJdW5zaWduZWQgaW50IHY7CiAKIAlhc20gdm9sYXRpbGUoCSJtcmMJcDE1LCAwLCAlMCwgYzEsIGMwLCAwXG4iCi0JIglvcnIJJTAsICUwLCAjMHgwNFxuIgorCSIJb3JyCSUwLCAlMCwgJTFcbiIKIAkiCW1jcglwMTUsIDAsICUwLCBjMSwgYzAsIDBcbiIKIAkiCW1yYwlwMTUsIDAsICUwLCBjMSwgYzAsIDFcbiIKIAkiCW9ycgklMCwgJTAsICMweDIwXG4iCiAJIgltY3IJcDE1LCAwLCAlMCwgYzEsIGMwLCAxXG4iCiAJICA6ICI9JnIiICh2KQotCSAgOgorCSAgOiAiSXIiIChDUl9DKQogCSAgOiAiY2MiKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHBsYXRmb3JtX2RvX2xvd3Bvd2VyKHVuc2lnbmVkIGludCBjcHUpCitzdGF0aWMgaW5saW5lIHZvaWQgcGxhdGZvcm1fZG9fbG93cG93ZXIodW5zaWduZWQgaW50IGNwdSwgaW50ICpzcHVyaW91cykKIHsKIAkvKgogCSAqIHRoZXJlIGlzIG5vIHBvd2VyLWNvbnRyb2wgaGFyZHdhcmUgb24gdGhpcyBwbGF0Zm9ybSwgc28gYWxsCkBAIC04MCwyMiArNzcsMTkgQEAKIAkJfQogCiAJCS8qCi0JCSAqIGdldHRpbmcgaGVyZSwgbWVhbnMgdGhhdCB3ZSBoYXZlIGNvbWUgb3V0IG9mIFdGSSB3aXRob3V0CisJCSAqIEdldHRpbmcgaGVyZSwgbWVhbnMgdGhhdCB3ZSBoYXZlIGNvbWUgb3V0IG9mIFdGSSB3aXRob3V0CiAJCSAqIGhhdmluZyBiZWVuIHdva2VuIHVwIC0gdGhpcyBzaG91bGRuJ3QgaGFwcGVuCiAJCSAqCi0JCSAqIFRoZSB0cm91YmxlIGlzLCBsZXR0aW5nIHBlb3BsZSBrbm93IGFib3V0IHRoaXMgaXMgbm90IHJlYWxseQotCQkgKiBwb3NzaWJsZSwgc2luY2Ugd2UgYXJlIGN1cnJlbnRseSBydW5uaW5nIGluY29oZXJlbnRseSwgYW5kCi0JCSAqIHRoZXJlZm9yZSBjYW5ub3Qgc2FmZWx5IGNhbGwgcHJpbnRrKCkgb3IgYW55dGhpbmcgZWxzZQorCQkgKiBKdXN0IG5vdGUgaXQgaGFwcGVuaW5nIC0gd2hlbiB3ZSdyZSB3b2tlbiwgd2UgY2FuIHJlcG9ydAorCQkgKiBpdHMgb2NjdXJyZW5jZS4KIAkJICovCi0jaWZkZWYgREVCVUcKLQkJcHJpbnRrKCJDUFUldTogc3B1cmlvdXMgd2FrZXVwIGNhbGxcbiIsIGNwdSk7Ci0jZW5kaWYKKwkJKCpzcHVyaW91cykrKzsKIAl9CiB9CiAKIGludCBwbGF0Zm9ybV9jcHVfa2lsbCh1bnNpZ25lZCBpbnQgY3B1KQogewotCXJldHVybiB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmNwdV9raWxsZWQsIDUwMDApOworCXJldHVybiAxOwogfQogCiAvKgpAQCAtMTA1LDMwICs5OSwyMiBAQAogICovCiB2b2lkIHBsYXRmb3JtX2NwdV9kaWUodW5zaWduZWQgaW50IGNwdSkKIHsKLSNpZmRlZiBERUJVRwotCXVuc2lnbmVkIGludCB0aGlzX2NwdSA9IGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpOwotCi0JaWYgKGNwdSAhPSB0aGlzX2NwdSkgewotCQlwcmludGsoS0VSTl9DUklUICJFZWshIHBsYXRmb3JtX2NwdV9kaWUgcnVubmluZyBvbiAldSwgc2hvdWxkIGJlICV1XG4iLAotCQkJICAgdGhpc19jcHUsIGNwdSk7Ci0JCUJVRygpOwotCX0KLSNlbmRpZgotCi0JcHJpbnRrKEtFUk5fTk9USUNFICJDUFUldTogc2h1dGRvd25cbiIsIGNwdSk7Ci0JY29tcGxldGUoJmNwdV9raWxsZWQpOworCWludCBzcHVyaW91cyA9IDA7CiAKIAkvKgogCSAqIHdlJ3JlIHJlYWR5IGZvciBzaHV0ZG93biBub3csIHNvIGRvIGl0CiAJICovCiAJY3B1X2VudGVyX2xvd3Bvd2VyKCk7Ci0JcGxhdGZvcm1fZG9fbG93cG93ZXIoY3B1KTsKKwlwbGF0Zm9ybV9kb19sb3dwb3dlcihjcHUsICZzcHVyaW91cyk7CiAKIAkvKgogCSAqIGJyaW5nIHRoaXMgQ1BVIGJhY2sgaW50byB0aGUgd29ybGQgb2YgY2FjaGUKIAkgKiBjb2hlcmVuY3ksIGFuZCB0aGVuIHJlc3RvcmUgaW50ZXJydXB0cwogCSAqLwogCWNwdV9sZWF2ZV9sb3dwb3dlcigpOworCisJaWYgKHNwdXJpb3VzKQorCQlwcl93YXJuKCJDUFUldTogJXUgc3B1cmlvdXMgd2FrZXVwIGNhbGxzXG4iLCBjcHUsIHNwdXJpb3VzKTsKIH0KIAogaW50IHBsYXRmb3JtX2NwdV9kaXNhYmxlKHVuc2lnbmVkIGludCBjcHUpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUwppbmRleCAzNDBhNWMyLi40MDcxMTY0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKQEAgLTgsNzQgKzgsMTEgQEAKICAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICAqLwogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vaGFyZHdhcmUvZ2ljLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2VudHJ5LW1hY3JvLWdpYy5TPgogCiAJCS5tYWNybwlkaXNhYmxlX2ZpcQogCQkuZW5kbQogCi0JCS5tYWNybyAgZ2V0X2lycW5yX3ByZWFtYmxlLCBiYXNlLCB0bXAKLQkJbGRyCVxiYXNlLCA9Z2ljX2NwdV9iYXNlX2FkZHIKLQkJbGRyCVxiYXNlLCBbXGJhc2VdCi0JCS5lbmRtCi0KIAkJLm1hY3JvICBhcmNoX3JldF90b191c2VyLCB0bXAxLCB0bXAyCiAJCS5lbmRtCiAKLQkJLyoKLQkJICogVGhlIGludGVycnVwdCBudW1iZXJpbmcgc2NoZW1lIGlzIGRlZmluZWQgaW4gdGhlCi0JCSAqIGludGVycnVwdCBjb250cm9sbGVyIHNwZWMuICBUbyB3aXQ6Ci0JCSAqCi0JCSAqIEludGVycnVwdHMgMC0xNSBhcmUgSVBJCi0JCSAqIDE2LTI4IGFyZSByZXNlcnZlZAotCQkgKiAyOS0zMSBhcmUgbG9jYWwuICBXZSBhbGxvdyAzMCB0byBiZSB1c2VkIGZvciB0aGUgd2F0Y2hkb2cuCi0JCSAqIDMyLTEwMjAgYXJlIGdsb2JhbAotCQkgKiAxMDIxLTEwMjIgYXJlIHJlc2VydmVkCi0JCSAqIDEwMjMgaXMgInNwdXJpb3VzIiAobm8gaW50ZXJydXB0KQotCQkgKgotCQkgKiBGb3Igbm93LCB3ZSBpZ25vcmUgYWxsIGxvY2FsIGludGVycnVwdHMgc28gb25seSByZXR1cm4gYW4gaW50ZXJydXB0IGlmIGl0J3MKLQkJICogYmV0d2VlbiAzMCBhbmQgMTAyMC4gIFRoZSB0ZXN0X2Zvcl9pcGkgcm91dGluZSBiZWxvdyB3aWxsIHBpY2sgdXAgb24gSVBJcy4KLQkJICoKLQkJICogQSBzaW1wbGUgcmVhZCBmcm9tIHRoZSBjb250cm9sbGVyIHdpbGwgdGVsbCB1cyB0aGUgbnVtYmVyIG9mIHRoZSBoaWdoZXN0Ci0gICAgICAgICAgICAgICAgICogcHJpb3JpdHkgZW5hYmxlZCBpbnRlcnJ1cHQuICBXZSB0aGVuIGp1c3QgbmVlZCB0byBjaGVjayB3aGV0aGVyIGl0IGlzIGluIHRoZQotCQkgKiB2YWxpZCByYW5nZSBmb3IgYW4gSVJRICgzMC0xMDIwIGluY2x1c2l2ZSkuCi0JCSAqLwotCi0JCS5tYWNybyAgZ2V0X2lycW5yX2FuZF9iYXNlLCBpcnFuciwgaXJxc3RhdCwgYmFzZSwgdG1wCi0KLQkJbGRyICAgICBcaXJxc3RhdCwgW1xiYXNlLCAjR0lDX0NQVV9JTlRBQ0tdIC8qIGJpdHMgMTItMTAgPSBzcmMgQ1BVLCA5LTAgPSBpbnQgIyAqLwotCi0JCWxkcglcdG1wLCA9MTAyMQotCi0JCWJpYyAgICAgXGlycW5yLCBcaXJxc3RhdCwgIzB4MWMwMAotCi0JCWNtcCAgICAgXGlycW5yLCAjMjkKLQkJY21wY2MJXGlycW5yLCBcaXJxbnIKLQkJY21wbmUJXGlycW5yLCBcdG1wCi0JCWNtcGNzCVxpcnFuciwgXGlycW5yCi0KLQkJLmVuZG0KLQotCQkvKiBXZSBhc3N1bWUgdGhhdCBpcnFzdGF0ICh0aGUgcmF3IHZhbHVlIG9mIHRoZSBJUlEgYWNrbm93bGVkZ2UKLQkJICogcmVnaXN0ZXIpIGlzIHByZXNlcnZlZCBmcm9tIHRoZSBtYWNybyBhYm92ZS4KLQkJICogSWYgdGhlcmUgaXMgYW4gSVBJLCB3ZSBpbW1lZGlhdGVseSBzaWduYWwgZW5kIG9mIGludGVycnVwdCBvbiB0aGUKLQkJICogY29udHJvbGxlciwgc2luY2UgdGhpcyByZXF1aXJlcyB0aGUgb3JpZ2luYWwgaXJxc3RhdCB2YWx1ZSB3aGljaAotCQkgKiB3ZSB3b24ndCBlYXNpbHkgYmUgYWJsZSB0byByZWNyZWF0ZSBsYXRlci4KLQkJICovCi0KLQkJLm1hY3JvIHRlc3RfZm9yX2lwaSwgaXJxbnIsIGlycXN0YXQsIGJhc2UsIHRtcAotCQliaWMJXGlycW5yLCBcaXJxc3RhdCwgIzB4MWMwMAotCQljbXAJXGlycW5yLCAjMTYKLQkJc3RyY2MJXGlycXN0YXQsIFtcYmFzZSwgI0dJQ19DUFVfRU9JXQotCQljbXBjcwlcaXJxbnIsIFxpcnFucgotCQkuZW5kbQotCi0JCS8qIEFzIGFib3ZlLCB0aGlzIGFzc3VtZXMgdGhhdCBpcnFzdGF0IGFuZCBiYXNlIGFyZSBwcmVzZXJ2ZWQuLiAqLwotCi0JCS5tYWNybyB0ZXN0X2Zvcl9sdGlycSwgaXJxbnIsIGlycXN0YXQsIGJhc2UsIHRtcAotCQliaWMJXGlycW5yLCBcaXJxc3RhdCwgIzB4MWMwMAotCQltb3YgCVx0bXAsICMwCi0JCWNtcAlcaXJxbnIsICMyOQotCQltb3ZlcQlcdG1wLCAjMQotCQlzdHJlcQlcaXJxc3RhdCwgW1xiYXNlLCAjR0lDX0NQVV9FT0ldCi0JCWNtcAlcdG1wLCAjMAotCQkuZW5kbQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvc21wLmggYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9zbXAuaAppbmRleCBkM2NkMjY1Li5jODIyMWIzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9zbXAuaAorKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9zbXAuaApAQCAtMiwxNCArMiwxMyBAQAogI2RlZmluZSBBU01BUk1fQVJDSF9TTVBfSAogCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2dpYy5oPgotI2luY2x1ZGUgPGFzbS9zbXBfbXBpZHIuaD4KIAogLyoKICAqIFdlIHVzZSBJUlExIGFzIHRoZSBJUEkKICAqLwotc3RhdGljIGlubGluZSB2b2lkIHNtcF9jcm9zc19jYWxsKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrKQorc3RhdGljIGlubGluZSB2b2lkIHNtcF9jcm9zc19jYWxsKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLCBpbnQgaXBpKQogewotCWdpY19yYWlzZV9zb2Z0aXJxKG1hc2ssIDEpOworCWdpY19yYWlzZV9zb2Z0aXJxKG1hc2ssIGlwaSk7CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9wbGF0c21wLmMgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3BsYXRzbXAuYwppbmRleCAwMDkyNjU4Li5hMjJiZjY3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3BsYXRzbXAuYworKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3BsYXRzbXAuYwpAQCAtMTksNyArMTksNiBAQAogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL2xvY2FsdGltZXIuaD4KICNpbmNsdWRlIDxhc20vdW5pZmllZC5oPgogCiAjaW5jbHVkZSA8bWFjaC9ib2FyZC1lYi5oPgpAQCAtMzcsNiArMzYsMTkgQEAKICAqLwogdm9sYXRpbGUgaW50IF9fY3B1aW5pdGRhdGEgcGVuX3JlbGVhc2UgPSAtMTsKIAorLyoKKyAqIFdyaXRlIHBlbl9yZWxlYXNlIGluIGEgd2F5IHRoYXQgaXMgZ3VhcmFudGVlZCB0byBiZSB2aXNpYmxlIHRvIGFsbAorICogb2JzZXJ2ZXJzLCBpcnJlc3BlY3RpdmUgb2Ygd2hldGhlciB0aGV5J3JlIHRha2luZyBwYXJ0IGluIGNvaGVyZW5jeQorICogb3Igbm90LiAgVGhpcyBpcyBuZWNlc3NhcnkgZm9yIHRoZSBob3RwbHVnIGNvZGUgdG8gd29yayByZWxpYWJseS4KKyAqLworc3RhdGljIHZvaWQgd3JpdGVfcGVuX3JlbGVhc2UoaW50IHZhbCkKK3sKKwlwZW5fcmVsZWFzZSA9IHZhbDsKKwlzbXBfd21iKCk7CisJX19jcHVjX2ZsdXNoX2RjYWNoZV9hcmVhKCh2b2lkICopJnBlbl9yZWxlYXNlLCBzaXplb2YocGVuX3JlbGVhc2UpKTsKKwlvdXRlcl9jbGVhbl9yYW5nZShfX3BhKCZwZW5fcmVsZWFzZSksIF9fcGEoJnBlbl9yZWxlYXNlICsgMSkpOworfQorCiBzdGF0aWMgdm9pZCBfX2lvbWVtICpzY3VfYmFzZV9hZGRyKHZvaWQpCiB7CiAJaWYgKG1hY2hpbmVfaXNfcmVhbHZpZXdfZWJfbXAoKSkKQEAgLTUwLDMzICs2MiwyMiBAQAogCQlyZXR1cm4gKHZvaWQgX19pb21lbSAqKTA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdldF9jb3JlX2NvdW50KHZvaWQpCi17Ci0Jdm9pZCBfX2lvbWVtICpzY3VfYmFzZSA9IHNjdV9iYXNlX2FkZHIoKTsKLQlpZiAoc2N1X2Jhc2UpCi0JCXJldHVybiBzY3VfZ2V0X2NvcmVfY291bnQoc2N1X2Jhc2UpOwotCXJldHVybiAxOwotfQotCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGJvb3RfbG9jayk7CiAKIHZvaWQgX19jcHVpbml0IHBsYXRmb3JtX3NlY29uZGFyeV9pbml0KHVuc2lnbmVkIGludCBjcHUpCiB7Ci0JdHJhY2VfaGFyZGlycXNfb2ZmKCk7Ci0KIAkvKgogCSAqIGlmIGFueSBpbnRlcnJ1cHRzIGFyZSBhbHJlYWR5IGVuYWJsZWQgZm9yIHRoZSBwcmltYXJ5CiAJICogY29yZSAoZS5nLiB0aW1lciBpcnEpLCB0aGVuIHRoZXkgd2lsbCBub3QgaGF2ZSBiZWVuIGVuYWJsZWQKIAkgKiBmb3IgdXM6IGRvIHNvCiAJICovCi0JZ2ljX2NwdV9pbml0KDAsIGdpY19jcHVfYmFzZV9hZGRyKTsKKwlnaWNfc2Vjb25kYXJ5X2luaXQoMCk7CiAKIAkvKgogCSAqIGxldCB0aGUgcHJpbWFyeSBwcm9jZXNzb3Iga25vdyB3ZSdyZSBvdXQgb2YgdGhlCiAJICogcGVuLCB0aGVuIGhlYWQgb2ZmIGludG8gdGhlIEMgZW50cnkgcG9pbnQKIAkgKi8KLQlwZW5fcmVsZWFzZSA9IC0xOwotCXNtcF93bWIoKTsKKwl3cml0ZV9wZW5fcmVsZWFzZSgtMSk7CiAKIAkvKgogCSAqIFN5bmNocm9uaXNlIHdpdGggdGhlIGJvb3QgdGhyZWFkLgpAQCAtMTAzLDIwICsxMDQsMTQgQEAKIAkgKiBOb3RlIHRoYXQgInBlbl9yZWxlYXNlIiBpcyB0aGUgaGFyZHdhcmUgQ1BVIElELCB3aGVyZWFzCiAJICogImNwdSIgaXMgTGludXgncyBpbnRlcm5hbCBJRC4KIAkgKi8KLQlwZW5fcmVsZWFzZSA9IGNwdTsKLQlmbHVzaF9jYWNoZV9hbGwoKTsKKwl3cml0ZV9wZW5fcmVsZWFzZShjcHUpOwogCiAJLyoKLQkgKiBYWFgKLQkgKgotCSAqIFRoaXMgaXMgYSBsYXRlciBhZGRpdGlvbiB0byB0aGUgYm9vdGluZyBwcm90b2NvbDogdGhlCi0JICogYm9vdE1vbml0b3Igbm93IHB1dHMgc2Vjb25kYXJ5IGNvcmVzIGludG8gV0ZJLCBzbwotCSAqIHBva2VfbWlsbygpIG5vIGxvbmdlciBnZXRzIHRoZSBjb3JlcyBtb3Zpbmc7IHdlIG5lZWQKLQkgKiB0byBzZW5kIGEgc29mdCBpbnRlcnJ1cHQgdG8gd2FrZSB0aGUgc2Vjb25kYXJ5IGNvcmUuCi0JICogVXNlIHNtcF9jcm9zc19jYWxsKCkgZm9yIHRoaXMsIHNpbmNlIHRoZXJlJ3MgbGl0dGxlCi0JICogcG9pbnQgZHVwbGljYXRpbmcgdGhlIGNvZGUgaGVyZQorCSAqIFNlbmQgdGhlIHNlY29uZGFyeSBDUFUgYSBzb2Z0IGludGVycnVwdCwgdGhlcmVieSBjYXVzaW5nCisJICogdGhlIGJvb3QgbW9uaXRvciB0byByZWFkIHRoZSBzeXN0ZW0gd2lkZSBmbGFncyByZWdpc3RlciwKKwkgKiBhbmQgYnJhbmNoIHRvIHRoZSBhZGRyZXNzIGZvdW5kIHRoZXJlLgogCSAqLwotCXNtcF9jcm9zc19jYWxsKGNwdW1hc2tfb2YoY3B1KSk7CisJc21wX2Nyb3NzX2NhbGwoY3B1bWFza19vZihjcHUpLCAxKTsKIAogCXRpbWVvdXQgPSBqaWZmaWVzICsgKDEgKiBIWik7CiAJd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKSB7CkBAIC0xMzYsNDggKzEzMSwxOCBAQAogCXJldHVybiBwZW5fcmVsZWFzZSAhPSAtMSA/IC1FTk9TWVMgOiAwOwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgcG9rZV9taWxvKHZvaWQpCi17Ci0JLyogbm9ib2R5IGlzIHRvIGJlIHJlbGVhc2VkIGZyb20gdGhlIHBlbiB5ZXQgKi8KLQlwZW5fcmVsZWFzZSA9IC0xOwotCi0JLyoKLQkgKiBXcml0ZSB0aGUgYWRkcmVzcyBvZiBzZWNvbmRhcnkgc3RhcnR1cCBpbnRvIHRoZSBzeXN0ZW0td2lkZSBmbGFncwotCSAqIHJlZ2lzdGVyLiBUaGUgQm9vdE1vbml0b3Igd2FpdHMgZm9yIHRoaXMgcmVnaXN0ZXIgdG8gYmVjb21lCi0JICogbm9uLXplcm8uCi0JICovCi0JX19yYXdfd3JpdGVsKEJTWU0odmlydF90b19waHlzKHJlYWx2aWV3X3NlY29uZGFyeV9zdGFydHVwKSksCi0JCSAgICAgX19pb19hZGRyZXNzKFJFQUxWSUVXX1NZU19GTEFHU1NFVCkpOwotCi0JbWIoKTsKLX0KLQogLyoKICAqIEluaXRpYWxpc2UgdGhlIENQVSBwb3NzaWJsZSBtYXAgZWFybHkgLSB0aGlzIGRlc2NyaWJlcyB0aGUgQ1BVcwogICogd2hpY2ggbWF5IGJlIHByZXNlbnQgb3IgYmVjb21lIHByZXNlbnQgaW4gdGhlIHN5c3RlbS4KICAqLwogdm9pZCBfX2luaXQgc21wX2luaXRfY3B1cyh2b2lkKQogewotCXVuc2lnbmVkIGludCBpLCBuY29yZXMgPSBnZXRfY29yZV9jb3VudCgpOworCXZvaWQgX19pb21lbSAqc2N1X2Jhc2UgPSBzY3VfYmFzZV9hZGRyKCk7CisJdW5zaWduZWQgaW50IGksIG5jb3JlczsKIAotCWZvciAoaSA9IDA7IGkgPCBuY29yZXM7IGkrKykKLQkJc2V0X2NwdV9wb3NzaWJsZShpLCB0cnVlKTsKLX0KLQotdm9pZCBfX2luaXQgc21wX3ByZXBhcmVfY3B1cyh1bnNpZ25lZCBpbnQgbWF4X2NwdXMpCi17Ci0JdW5zaWduZWQgaW50IG5jb3JlcyA9IGdldF9jb3JlX2NvdW50KCk7Ci0JdW5zaWduZWQgaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQlpbnQgaTsKKwluY29yZXMgPSBzY3VfYmFzZSA/IHNjdV9nZXRfY29yZV9jb3VudChzY3VfYmFzZSkgOiAxOwogCiAJLyogc2FuaXR5IGNoZWNrICovCi0JaWYgKG5jb3JlcyA9PSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgIlJlYWx2aWV3OiBzdHJhbmdlIENNIGNvdW50IG9mIDA/IERlZmF1bHQgdG8gMVxuIik7Ci0KLQkJbmNvcmVzID0gMTsKLQl9Ci0KIAlpZiAobmNvcmVzID4gTlJfQ1BVUykgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCSAgICAgICAiUmVhbHZpZXc6IG5vLiBvZiBjb3JlcyAoJWQpIGdyZWF0ZXIgdGhhbiBjb25maWd1cmVkICIKQEAgLTE4NiwxMyArMTUxLDEzIEBACiAJCW5jb3JlcyA9IE5SX0NQVVM7CiAJfQogCi0Jc21wX3N0b3JlX2NwdV9pbmZvKGNwdSk7CisJZm9yIChpID0gMDsgaSA8IG5jb3JlczsgaSsrKQorCQlzZXRfY3B1X3Bvc3NpYmxlKGksIHRydWUpOworfQogCi0JLyoKLQkgKiBhcmUgd2UgdHJ5aW5nIHRvIGJvb3QgbW9yZSBjb3JlcyB0aGFuIGV4aXN0PwotCSAqLwotCWlmIChtYXhfY3B1cyA+IG5jb3JlcykKLQkJbWF4X2NwdXMgPSBuY29yZXM7Cit2b2lkIF9faW5pdCBwbGF0Zm9ybV9zbXBfcHJlcGFyZV9jcHVzKHVuc2lnbmVkIGludCBtYXhfY3B1cykKK3sKKwlpbnQgaTsKIAogCS8qCiAJICogSW5pdGlhbGlzZSB0aGUgcHJlc2VudCBtYXAsIHdoaWNoIGRlc2NyaWJlcyB0aGUgc2V0IG9mIENQVXMKQEAgLTIwMSwyMSArMTY2LDE0IEBACiAJZm9yIChpID0gMDsgaSA8IG1heF9jcHVzOyBpKyspCiAJCXNldF9jcHVfcHJlc2VudChpLCB0cnVlKTsKIAotCS8qCi0JICogSW5pdGlhbGlzZSB0aGUgU0NVIGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIENQVSBhbmQgbGV0Ci0JICogdGhlbSBrbm93IHdoZXJlIHRvIHN0YXJ0LiBOb3RlIHRoYXQsIG9uIG1vZGVybiB2ZXJzaW9ucyBvZgotCSAqIE1JTE8sIHRoZSAicG9rZSIgZG9lc24ndCBhY3R1YWxseSBkbyBhbnl0aGluZyB1bnRpbCBlYWNoCi0JICogaW5kaXZpZHVhbCBjb3JlIGlzIHNlbnQgYSBzb2Z0IGludGVycnVwdCB0byBnZXQgaXQgb3V0IG9mCi0JICogV0ZJCi0JICovCi0JaWYgKG1heF9jcHVzID4gMSkgewotCQkvKgotCQkgKiBFbmFibGUgdGhlIGxvY2FsIHRpbWVyIG9yIGJyb2FkY2FzdCBkZXZpY2UgZm9yIHRoZQotCQkgKiBib290IENQVSwgYnV0IG9ubHkgaWYgd2UgaGF2ZSBtb3JlIHRoYW4gb25lIENQVS4KLQkJICovCi0JCXBlcmNwdV90aW1lcl9zZXR1cCgpOworCXNjdV9lbmFibGUoc2N1X2Jhc2VfYWRkcigpKTsKIAotCQlzY3VfZW5hYmxlKHNjdV9iYXNlX2FkZHIoKSk7Ci0JCXBva2VfbWlsbygpOwotCX0KKwkvKgorCSAqIFdyaXRlIHRoZSBhZGRyZXNzIG9mIHNlY29uZGFyeSBzdGFydHVwIGludG8gdGhlCisJICogc3lzdGVtLXdpZGUgZmxhZ3MgcmVnaXN0ZXIuIFRoZSBCb290TW9uaXRvciB3YWl0cworCSAqIHVudGlsIGl0IHJlY2VpdmVzIGEgc29mdCBpbnRlcnJ1cHQsIGFuZCB0aGVuIHRoZQorCSAqIHNlY29uZGFyeSBDUFUgYnJhbmNoZXMgdG8gdGhpcyBhZGRyZXNzLgorCSAqLworCV9fcmF3X3dyaXRlbChCU1lNKHZpcnRfdG9fcGh5cyhyZWFsdmlld19zZWNvbmRhcnlfc3RhcnR1cCkpLAorCQkgICAgIF9faW9fYWRkcmVzcyhSRUFMVklFV19TWVNfRkxBR1NTRVQpKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfZWIuYyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfZWIuYwppbmRleCBmMjY5NzEwLi42ZWY1YzVlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X2ViLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19lYi5jCkBAIC0zNjQsMjEgKzM2NCwxOSBAQAogCQl3cml0ZWwoMHgwMDAwMDAwMCwgX19pb19hZGRyZXNzKFJFQUxWSUVXX1NZU19MT0NLKSk7CiAKIAkJLyogY29yZSB0aWxlIEdJQywgcHJpbWFyeSAqLwotCQlnaWNfY3B1X2Jhc2VfYWRkciA9IF9faW9fYWRkcmVzcyhSRUFMVklFV19FQjExTVBfR0lDX0NQVV9CQVNFKTsKLQkJZ2ljX2Rpc3RfaW5pdCgwLCBfX2lvX2FkZHJlc3MoUkVBTFZJRVdfRUIxMU1QX0dJQ19ESVNUX0JBU0UpLCAyOSk7Ci0JCWdpY19jcHVfaW5pdCgwLCBnaWNfY3B1X2Jhc2VfYWRkcik7CisJCWdpY19pbml0KDAsIDI5LCBfX2lvX2FkZHJlc3MoUkVBTFZJRVdfRUIxMU1QX0dJQ19ESVNUX0JBU0UpLAorCQkJIF9faW9fYWRkcmVzcyhSRUFMVklFV19FQjExTVBfR0lDX0NQVV9CQVNFKSk7CiAKICNpZm5kZWYgQ09ORklHX1JFQUxWSUVXX0VCX0FSTTExTVBfUkVWQgogCQkvKiBib2FyZCBHSUMsIHNlY29uZGFyeSAqLwotCQlnaWNfZGlzdF9pbml0KDEsIF9faW9fYWRkcmVzcyhSRUFMVklFV19FQl9HSUNfRElTVF9CQVNFKSwgNjQpOwotCQlnaWNfY3B1X2luaXQoMSwgX19pb19hZGRyZXNzKFJFQUxWSUVXX0VCX0dJQ19DUFVfQkFTRSkpOworCQlnaWNfaW5pdCgxLCA2NCwgX19pb19hZGRyZXNzKFJFQUxWSUVXX0VCX0dJQ19ESVNUX0JBU0UpLAorCQkJIF9faW9fYWRkcmVzcyhSRUFMVklFV19FQl9HSUNfQ1BVX0JBU0UpKTsKIAkJZ2ljX2Nhc2NhZGVfaXJxKDEsIElSUV9FQjExTVBfRUJfSVJRMSk7CiAjZW5kaWYKIAl9IGVsc2UgewogCQkvKiBib2FyZCBHSUMsIHByaW1hcnkgKi8KLQkJZ2ljX2NwdV9iYXNlX2FkZHIgPSBfX2lvX2FkZHJlc3MoUkVBTFZJRVdfRUJfR0lDX0NQVV9CQVNFKTsKLQkJZ2ljX2Rpc3RfaW5pdCgwLCBfX2lvX2FkZHJlc3MoUkVBTFZJRVdfRUJfR0lDX0RJU1RfQkFTRSksIDI5KTsKLQkJZ2ljX2NwdV9pbml0KDAsIGdpY19jcHVfYmFzZV9hZGRyKTsKKwkJZ2ljX2luaXQoMCwgMjksIF9faW9fYWRkcmVzcyhSRUFMVklFV19FQl9HSUNfRElTVF9CQVNFKSwKKwkJCSBfX2lvX2FkZHJlc3MoUkVBTFZJRVdfRUJfR0lDX0NQVV9CQVNFKSk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BiMTE3Ni5jIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYjExNzYuYwppbmRleCBhNDEyNTYxLi5jYmRjOTdhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BiMTE3Ni5jCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGIxMTc2LmMKQEAgLTMwNCwxMyArMzA0LDE0IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgZ2ljX2luaXRfaXJxKHZvaWQpCiB7CiAJLyogQVJNMTE3NiBEZXZDaGlwIEdJQywgcHJpbWFyeSAqLwotCWdpY19jcHVfYmFzZV9hZGRyID0gX19pb19hZGRyZXNzKFJFQUxWSUVXX0RDMTE3Nl9HSUNfQ1BVX0JBU0UpOwotCWdpY19kaXN0X2luaXQoMCwgX19pb19hZGRyZXNzKFJFQUxWSUVXX0RDMTE3Nl9HSUNfRElTVF9CQVNFKSwgSVJRX0RDMTE3Nl9HSUNfU1RBUlQpOwotCWdpY19jcHVfaW5pdCgwLCBnaWNfY3B1X2Jhc2VfYWRkcik7CisJZ2ljX2luaXQoMCwgSVJRX0RDMTE3Nl9HSUNfU1RBUlQsCisJCSBfX2lvX2FkZHJlc3MoUkVBTFZJRVdfREMxMTc2X0dJQ19ESVNUX0JBU0UpLAorCQkgX19pb19hZGRyZXNzKFJFQUxWSUVXX0RDMTE3Nl9HSUNfQ1BVX0JBU0UpKTsKIAogCS8qIGJvYXJkIEdJQywgc2Vjb25kYXJ5ICovCi0JZ2ljX2Rpc3RfaW5pdCgxLCBfX2lvX2FkZHJlc3MoUkVBTFZJRVdfUEIxMTc2X0dJQ19ESVNUX0JBU0UpLCBJUlFfUEIxMTc2X0dJQ19TVEFSVCk7Ci0JZ2ljX2NwdV9pbml0KDEsIF9faW9fYWRkcmVzcyhSRUFMVklFV19QQjExNzZfR0lDX0NQVV9CQVNFKSk7CisJZ2ljX2luaXQoMSwgSVJRX1BCMTE3Nl9HSUNfU1RBUlQsCisJCSBfX2lvX2FkZHJlc3MoUkVBTFZJRVdfUEIxMTc2X0dJQ19ESVNUX0JBU0UpLAorCQkgX19pb19hZGRyZXNzKFJFQUxWSUVXX1BCMTE3Nl9HSUNfQ1BVX0JBU0UpKTsKIAlnaWNfY2FzY2FkZV9pcnEoMSwgSVJRX0RDMTE3Nl9QQl9JUlExKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYjExbXAuYyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGIxMW1wLmMKaW5kZXggMTE3Yjk1Yi4uOGU4YWI3ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYjExbXAuYworKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BiMTFtcC5jCkBAIC0zMDksMTMgKzMwOSwxMyBAQAogCXdyaXRlbCgweDAwMDAwMDAwLCBfX2lvX2FkZHJlc3MoUkVBTFZJRVdfU1lTX0xPQ0spKTsKIAogCS8qIEFSTTExTVBDb3JlIHRlc3QgY2hpcCBHSUMsIHByaW1hcnkgKi8KLQlnaWNfY3B1X2Jhc2VfYWRkciA9IF9faW9fYWRkcmVzcyhSRUFMVklFV19UQzExTVBfR0lDX0NQVV9CQVNFKTsKLQlnaWNfZGlzdF9pbml0KDAsIF9faW9fYWRkcmVzcyhSRUFMVklFV19UQzExTVBfR0lDX0RJU1RfQkFTRSksIDI5KTsKLQlnaWNfY3B1X2luaXQoMCwgZ2ljX2NwdV9iYXNlX2FkZHIpOworCWdpY19pbml0KDAsIDI5LCBfX2lvX2FkZHJlc3MoUkVBTFZJRVdfVEMxMU1QX0dJQ19ESVNUX0JBU0UpLAorCQkgX19pb19hZGRyZXNzKFJFQUxWSUVXX1RDMTFNUF9HSUNfQ1BVX0JBU0UpKTsKIAogCS8qIGJvYXJkIEdJQywgc2Vjb25kYXJ5ICovCi0JZ2ljX2Rpc3RfaW5pdCgxLCBfX2lvX2FkZHJlc3MoUkVBTFZJRVdfUEIxMU1QX0dJQ19ESVNUX0JBU0UpLCBJUlFfUEIxMU1QX0dJQ19TVEFSVCk7Ci0JZ2ljX2NwdV9pbml0KDEsIF9faW9fYWRkcmVzcyhSRUFMVklFV19QQjExTVBfR0lDX0NQVV9CQVNFKSk7CisJZ2ljX2luaXQoMSwgSVJRX1BCMTFNUF9HSUNfU1RBUlQsCisJCSBfX2lvX2FkZHJlc3MoUkVBTFZJRVdfUEIxMU1QX0dJQ19ESVNUX0JBU0UpLAorCQkgX19pb19hZGRyZXNzKFJFQUxWSUVXX1BCMTFNUF9HSUNfQ1BVX0JBU0UpKTsKIAlnaWNfY2FzY2FkZV9pcnEoMSwgSVJRX1RDMTFNUF9QQl9JUlExKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYmE4LmMgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BiYTguYwppbmRleCA5MjliOGRjLi44NDExMThlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BiYTguYworKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BiYTguYwpAQCAtMjczLDkgKzI3Myw5IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgZ2ljX2luaXRfaXJxKHZvaWQpCiB7CiAJLyogQVJNIFBCLUE4IG9uLWJvYXJkIEdJQyAqLwotCWdpY19jcHVfYmFzZV9hZGRyID0gX19pb19hZGRyZXNzKFJFQUxWSUVXX1BCQThfR0lDX0NQVV9CQVNFKTsKLQlnaWNfZGlzdF9pbml0KDAsIF9faW9fYWRkcmVzcyhSRUFMVklFV19QQkE4X0dJQ19ESVNUX0JBU0UpLCBJUlFfUEJBOF9HSUNfU1RBUlQpOwotCWdpY19jcHVfaW5pdCgwLCBfX2lvX2FkZHJlc3MoUkVBTFZJRVdfUEJBOF9HSUNfQ1BVX0JBU0UpKTsKKwlnaWNfaW5pdCgwLCBJUlFfUEJBOF9HSUNfU1RBUlQsCisJCSBfX2lvX2FkZHJlc3MoUkVBTFZJRVdfUEJBOF9HSUNfRElTVF9CQVNFKSwKKwkJIF9faW9fYWRkcmVzcyhSRUFMVklFV19QQkE4X0dJQ19DUFVfQkFTRSkpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgcmVhbHZpZXdfcGJhOF90aW1lcl9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BieC5jIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYnguYwppbmRleCBiOWY5ZTIwLi4wMmI3NTViIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BieC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGJ4LmMKQEAgLTMxMywxNSArMzEzLDEyIEBACiB7CiAJLyogQVJNIFBCWCBvbi1ib2FyZCBHSUMgKi8KIAlpZiAoY29yZV90aWxlX3BieDExbXAoKSB8fCBjb3JlX3RpbGVfcGJ4YTltcCgpKSB7Ci0JCWdpY19jcHVfYmFzZV9hZGRyID0gX19pb19hZGRyZXNzKFJFQUxWSUVXX1BCWF9USUxFX0dJQ19DUFVfQkFTRSk7Ci0JCWdpY19kaXN0X2luaXQoMCwgX19pb19hZGRyZXNzKFJFQUxWSUVXX1BCWF9USUxFX0dJQ19ESVNUX0JBU0UpLAotCQkJICAgICAgMjkpOwotCQlnaWNfY3B1X2luaXQoMCwgX19pb19hZGRyZXNzKFJFQUxWSUVXX1BCWF9USUxFX0dJQ19DUFVfQkFTRSkpOworCQlnaWNfaW5pdCgwLCAyOSwgX19pb19hZGRyZXNzKFJFQUxWSUVXX1BCWF9USUxFX0dJQ19ESVNUX0JBU0UpLAorCQkJIF9faW9fYWRkcmVzcyhSRUFMVklFV19QQlhfVElMRV9HSUNfQ1BVX0JBU0UpKTsKIAl9IGVsc2UgewotCQlnaWNfY3B1X2Jhc2VfYWRkciA9IF9faW9fYWRkcmVzcyhSRUFMVklFV19QQlhfR0lDX0NQVV9CQVNFKTsKLQkJZ2ljX2Rpc3RfaW5pdCgwLCBfX2lvX2FkZHJlc3MoUkVBTFZJRVdfUEJYX0dJQ19ESVNUX0JBU0UpLAotCQkJICAgICAgSVJRX1BCWF9HSUNfU1RBUlQpOwotCQlnaWNfY3B1X2luaXQoMCwgX19pb19hZGRyZXNzKFJFQUxWSUVXX1BCWF9HSUNfQ1BVX0JBU0UpKTsKKwkJZ2ljX2luaXQoMCwgSVJRX1BCWF9HSUNfU1RBUlQsCisJCQkgX19pb19hZGRyZXNzKFJFQUxWSUVXX1BCWF9HSUNfRElTVF9CQVNFKSwKKwkJCSBfX2lvX2FkZHJlc3MoUkVBTFZJRVdfUEJYX0dJQ19DUFVfQkFTRSkpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTIvS2NvbmZpZwppbmRleCA2OTgzY2I0Li5lODJhYjRhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTIvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTIvS2NvbmZpZwpAQCAtNTksNyArNTksNyBAQAogCSAgU2F5IFkgaGVyZSBpZiB5b3UgYXJlIHVzaW5nIHRoZSBMb2dpdGVjaCBKaXZlLgogCiBjb25maWcgTUFDSF9KSVZFX1NIT1dfQk9PVExPQURFUgotCWJvb2wgIkFsbG93IGFjY2VzcyB0byBib290bG9hZGVyIHBhcnRpdGlvbnMgaW4gTVREIgorCWJvb2wgIkFsbG93IGFjY2VzcyB0byBib290bG9hZGVyIHBhcnRpdGlvbnMgaW4gTVREIChFWFBFUklNRU5UQUwpIgogCWRlcGVuZHMgb24gTUFDSF9KSVZFICYmIEVYUEVSSU1FTlRBTAogCiBjb25maWcgTUFDSF9TTURLMjQxMwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2NwdS5jIGIvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2NwdS5jCmluZGV4IDgyY2U0YWEuLjcyYWIyODkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczVwdjMxMC9jcHUuYworKysgYi9hcmNoL2FybS9tYWNoLXM1cHYzMTAvY3B1LmMKQEAgLTI0LDggKzI0LDYgQEAKIAogI2luY2x1ZGUgPG1hY2gvcmVncy1pcnEuaD4KIAotdm9pZCBfX2lvbWVtICpnaWNfY3B1X2Jhc2VfYWRkcjsKLQogZXh0ZXJuIGludCBjb21iaW5lcl9pbml0KHVuc2lnbmVkIGludCBjb21iaW5lcl9uciwgdm9pZCBfX2lvbWVtICpiYXNlLAogCQkJIHVuc2lnbmVkIGludCBpcnFfc3RhcnQpOwogZXh0ZXJuIHZvaWQgY29tYmluZXJfY2FzY2FkZV9pcnEodW5zaWduZWQgaW50IGNvbWJpbmVyX25yLCB1bnNpZ25lZCBpbnQgaXJxKTsKQEAgLTEyMiw5ICsxMjAsNyBAQAogewogCWludCBpcnE7CiAKLQlnaWNfY3B1X2Jhc2VfYWRkciA9IFM1UF9WQV9HSUNfQ1BVOwotCWdpY19kaXN0X2luaXQoMCwgUzVQX1ZBX0dJQ19ESVNULCBJUlFfTE9DQUxUSU1FUik7Ci0JZ2ljX2NwdV9pbml0KDAsIFM1UF9WQV9HSUNfQ1BVKTsKKwlnaWNfaW5pdCgwLCBJUlFfTE9DQUxUSU1FUiwgUzVQX1ZBX0dJQ19ESVNULCBTNVBfVkFfR0lDX0NQVSk7CiAKIAlmb3IgKGlycSA9IDA7IGlycSA8IE1BWF9DT01CSU5FUl9OUjsgaXJxKyspIHsKIAkJY29tYmluZXJfaW5pdChpcnEsICh2b2lkIF9faW9tZW0gKilTNVBfVkFfQ09NQklORVIoaXJxKSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwdjMxMC9ob3RwbHVnLmMgYi9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaG90cGx1Zy5jCmluZGV4IDAzNjUyYzMuLmFmYTUzOTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczVwdjMxMC9ob3RwbHVnLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2hvdHBsdWcuYwpAQCAtMTMsMTQgKzEzLDExIEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLSNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CiAKICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogCiBleHRlcm4gdm9sYXRpbGUgaW50IHBlbl9yZWxlYXNlOwogCi1zdGF0aWMgREVDTEFSRV9DT01QTEVUSU9OKGNwdV9raWxsZWQpOwotCiBzdGF0aWMgaW5saW5lIHZvaWQgY3B1X2VudGVyX2xvd3Bvd2VyKHZvaWQpCiB7CiAJdW5zaWduZWQgaW50IHY7CkBAIC0zMywxMyArMzAsMTMgQEAKIAkgKiBUdXJuIG9mZiBjb2hlcmVuY3kKIAkgKi8KIAkiCW1yYwlwMTUsIDAsICUwLCBjMSwgYzAsIDFcbiIKLQkiCWJpYwklMCwgJTAsICMweDIwXG4iCisJIgliaWMJJTAsICUwLCAlMlxuIgogCSIJbWNyCXAxNSwgMCwgJTAsIGMxLCBjMCwgMVxuIgogCSIJbXJjCXAxNSwgMCwgJTAsIGMxLCBjMCwgMFxuIgogCSIJYmljCSUwLCAlMCwgIzB4MDRcbiIKIAkiCW1jcglwMTUsIDAsICUwLCBjMSwgYzAsIDBcbiIKIAkgIDogIj0mciIgKHYpCi0JICA6ICJyIiAoMCkKKwkgIDogInIiICgwKSwgIklyIiAoQ1JfQykKIAkgIDogImNjIik7CiB9CiAKQEAgLTQ5LDE3ICs0NiwxNyBAQAogCiAJYXNtIHZvbGF0aWxlKAogCSJtcmMJcDE1LCAwLCAlMCwgYzEsIGMwLCAwXG4iCi0JIglvcnIJJTAsICUwLCAjMHgwNFxuIgorCSIJb3JyCSUwLCAlMCwgJTFcbiIKIAkiCW1jcglwMTUsIDAsICUwLCBjMSwgYzAsIDBcbiIKIAkiCW1yYwlwMTUsIDAsICUwLCBjMSwgYzAsIDFcbiIKIAkiCW9ycgklMCwgJTAsICMweDIwXG4iCiAJIgltY3IJcDE1LCAwLCAlMCwgYzEsIGMwLCAxXG4iCiAJICA6ICI9JnIiICh2KQotCSAgOgorCSAgOiAiSXIiIChDUl9DKQogCSAgOiAiY2MiKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHBsYXRmb3JtX2RvX2xvd3Bvd2VyKHVuc2lnbmVkIGludCBjcHUpCitzdGF0aWMgaW5saW5lIHZvaWQgcGxhdGZvcm1fZG9fbG93cG93ZXIodW5zaWduZWQgaW50IGNwdSwgaW50ICpzcHVyaW91cykKIHsKIAkvKgogCSAqIHRoZXJlIGlzIG5vIHBvd2VyLWNvbnRyb2wgaGFyZHdhcmUgb24gdGhpcyBwbGF0Zm9ybSwgc28gYWxsCkBAIC04MywyMiArODAsMTkgQEAKIAkJfQogCiAJCS8qCi0JCSAqIGdldHRpbmcgaGVyZSwgbWVhbnMgdGhhdCB3ZSBoYXZlIGNvbWUgb3V0IG9mIFdGSSB3aXRob3V0CisJCSAqIEdldHRpbmcgaGVyZSwgbWVhbnMgdGhhdCB3ZSBoYXZlIGNvbWUgb3V0IG9mIFdGSSB3aXRob3V0CiAJCSAqIGhhdmluZyBiZWVuIHdva2VuIHVwIC0gdGhpcyBzaG91bGRuJ3QgaGFwcGVuCiAJCSAqCi0JCSAqIFRoZSB0cm91YmxlIGlzLCBsZXR0aW5nIHBlb3BsZSBrbm93IGFib3V0IHRoaXMgaXMgbm90IHJlYWxseQotCQkgKiBwb3NzaWJsZSwgc2luY2Ugd2UgYXJlIGN1cnJlbnRseSBydW5uaW5nIGluY29oZXJlbnRseSwgYW5kCi0JCSAqIHRoZXJlZm9yZSBjYW5ub3Qgc2FmZWx5IGNhbGwgcHJpbnRrKCkgb3IgYW55dGhpbmcgZWxzZQorCQkgKiBKdXN0IG5vdGUgaXQgaGFwcGVuaW5nIC0gd2hlbiB3ZSdyZSB3b2tlbiwgd2UgY2FuIHJlcG9ydAorCQkgKiBpdHMgb2NjdXJyZW5jZS4KIAkJICovCi0jaWZkZWYgREVCVUcKLQkJcHJpbnRrKEtFUk5fV0FSTiAiQ1BVJXU6IHNwdXJpb3VzIHdha2V1cCBjYWxsXG4iLCBjcHUpOwotI2VuZGlmCisJCSgqc3B1cmlvdXMpKys7CiAJfQogfQogCiBpbnQgcGxhdGZvcm1fY3B1X2tpbGwodW5zaWduZWQgaW50IGNwdSkKIHsKLQlyZXR1cm4gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZjcHVfa2lsbGVkLCA1MDAwKTsKKwlyZXR1cm4gMTsKIH0KIAogLyoKQEAgLTEwOCwzMCArMTAyLDIyIEBACiAgKi8KIHZvaWQgcGxhdGZvcm1fY3B1X2RpZSh1bnNpZ25lZCBpbnQgY3B1KQogewotI2lmZGVmIERFQlVHCi0JdW5zaWduZWQgaW50IHRoaXNfY3B1ID0gaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCk7Ci0KLQlpZiAoY3B1ICE9IHRoaXNfY3B1KSB7Ci0JCXByaW50ayhLRVJOX0NSSVQgIkVlayEgcGxhdGZvcm1fY3B1X2RpZSBydW5uaW5nIG9uICV1LCBzaG91bGQgYmUgJXVcbiIsCi0JCQkgICB0aGlzX2NwdSwgY3B1KTsKLQkJQlVHKCk7Ci0JfQotI2VuZGlmCi0KLQlwcmludGsoS0VSTl9OT1RJQ0UgIkNQVSV1OiBzaHV0ZG93blxuIiwgY3B1KTsKLQljb21wbGV0ZSgmY3B1X2tpbGxlZCk7CisJaW50IHNwdXJpb3VzID0gMDsKIAogCS8qCiAJICogd2UncmUgcmVhZHkgZm9yIHNodXRkb3duIG5vdywgc28gZG8gaXQKIAkgKi8KIAljcHVfZW50ZXJfbG93cG93ZXIoKTsKLQlwbGF0Zm9ybV9kb19sb3dwb3dlcihjcHUpOworCXBsYXRmb3JtX2RvX2xvd3Bvd2VyKGNwdSwgJnNwdXJpb3VzKTsKIAogCS8qCiAJICogYnJpbmcgdGhpcyBDUFUgYmFjayBpbnRvIHRoZSB3b3JsZCBvZiBjYWNoZQogCSAqIGNvaGVyZW5jeSwgYW5kIHRoZW4gcmVzdG9yZSBpbnRlcnJ1cHRzCiAJICovCiAJY3B1X2xlYXZlX2xvd3Bvd2VyKCk7CisKKwlpZiAoc3B1cmlvdXMpCisJCXByX3dhcm4oIkNQVSV1OiAldSBzcHVyaW91cyB3YWtldXAgY2FsbHNcbiIsIGNwdSwgc3B1cmlvdXMpOwogfQogCiBpbnQgcGxhdGZvcm1fY3B1X2Rpc2FibGUodW5zaWduZWQgaW50IGNwdSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwdjMxMC9pbmNsdWRlL21hY2gvc21wLmggYi9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL3NtcC5oCmluZGV4IGI3ZWMyNTIuLjM5M2NjYmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczVwdjMxMC9pbmNsdWRlL21hY2gvc21wLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luY2x1ZGUvbWFjaC9zbXAuaApAQCAtNywxNiArNywxMyBAQAogI2RlZmluZSBBU01fQVJDSF9TTVBfSCBfX0ZJTEVfXwogCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2dpYy5oPgotI2luY2x1ZGUgPGFzbS9zbXBfbXBpZHIuaD4KLQotZXh0ZXJuIHZvaWQgX19pb21lbSAqZ2ljX2NwdV9iYXNlX2FkZHI7CiAKIC8qCiAgKiBXZSB1c2UgSVJRMSBhcyB0aGUgSVBJCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBzbXBfY3Jvc3NfY2FsbChjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaykKK3N0YXRpYyBpbmxpbmUgdm9pZCBzbXBfY3Jvc3NfY2FsbChjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywgaW50IGlwaSkKIHsKLQlnaWNfcmFpc2Vfc29mdGlycShtYXNrLCAxKTsKKwlnaWNfcmFpc2Vfc29mdGlycShtYXNrLCBpcGkpOwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwdjMxMC9wbGF0c21wLmMgYi9hcmNoL2FybS9tYWNoLXM1cHYzMTAvcGxhdHNtcC5jCmluZGV4IGQzNTdjMTkuLjM0MDkzYjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczVwdjMxMC9wbGF0c21wLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL3BsYXRzbXAuYwpAQCAtMjIsNyArMjIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgotI2luY2x1ZGUgPGFzbS9sb2NhbHRpbWVyLmg+CiAjaW5jbHVkZSA8YXNtL3NtcF9zY3UuaD4KICNpbmNsdWRlIDxhc20vdW5pZmllZC5oPgogCkBAIC0zOCw2ICszNywxOSBAQAogCiB2b2xhdGlsZSBpbnQgX19jcHVpbml0ZGF0YSBwZW5fcmVsZWFzZSA9IC0xOwogCisvKgorICogV3JpdGUgcGVuX3JlbGVhc2UgaW4gYSB3YXkgdGhhdCBpcyBndWFyYW50ZWVkIHRvIGJlIHZpc2libGUgdG8gYWxsCisgKiBvYnNlcnZlcnMsIGlycmVzcGVjdGl2ZSBvZiB3aGV0aGVyIHRoZXkncmUgdGFraW5nIHBhcnQgaW4gY29oZXJlbmN5CisgKiBvciBub3QuICBUaGlzIGlzIG5lY2Vzc2FyeSBmb3IgdGhlIGhvdHBsdWcgY29kZSB0byB3b3JrIHJlbGlhYmx5LgorICovCitzdGF0aWMgdm9pZCB3cml0ZV9wZW5fcmVsZWFzZShpbnQgdmFsKQoreworCXBlbl9yZWxlYXNlID0gdmFsOworCXNtcF93bWIoKTsKKwlfX2NwdWNfZmx1c2hfZGNhY2hlX2FyZWEoKHZvaWQgKikmcGVuX3JlbGVhc2UsIHNpemVvZihwZW5fcmVsZWFzZSkpOworCW91dGVyX2NsZWFuX3JhbmdlKF9fcGEoJnBlbl9yZWxlYXNlKSwgX19wYSgmcGVuX3JlbGVhc2UgKyAxKSk7Cit9CisKIHN0YXRpYyB2b2lkIF9faW9tZW0gKnNjdV9iYXNlX2FkZHIodm9pZCkKIHsKIAlyZXR1cm4gKHZvaWQgX19pb21lbSAqKShTNVBfVkFfU0NVKTsKQEAgLTQ3LDIxICs1OSwxOCBAQAogCiB2b2lkIF9fY3B1aW5pdCBwbGF0Zm9ybV9zZWNvbmRhcnlfaW5pdCh1bnNpZ25lZCBpbnQgY3B1KQogewotCXRyYWNlX2hhcmRpcnFzX29mZigpOwotCiAJLyoKIAkgKiBpZiBhbnkgaW50ZXJydXB0cyBhcmUgYWxyZWFkeSBlbmFibGVkIGZvciB0aGUgcHJpbWFyeQogCSAqIGNvcmUgKGUuZy4gdGltZXIgaXJxKSwgdGhlbiB0aGV5IHdpbGwgbm90IGhhdmUgYmVlbiBlbmFibGVkCiAJICogZm9yIHVzOiBkbyBzbwogCSAqLwotCWdpY19jcHVfaW5pdCgwLCBnaWNfY3B1X2Jhc2VfYWRkcik7CisJZ2ljX3NlY29uZGFyeV9pbml0KDApOwogCiAJLyoKIAkgKiBsZXQgdGhlIHByaW1hcnkgcHJvY2Vzc29yIGtub3cgd2UncmUgb3V0IG9mIHRoZQogCSAqIHBlbiwgdGhlbiBoZWFkIG9mZiBpbnRvIHRoZSBDIGVudHJ5IHBvaW50CiAJICovCi0JcGVuX3JlbGVhc2UgPSAtMTsKLQlzbXBfd21iKCk7CisJd3JpdGVfcGVuX3JlbGVhc2UoLTEpOwogCiAJLyoKIAkgKiBTeW5jaHJvbmlzZSB3aXRoIHRoZSBib290IHRocmVhZC4KQEAgLTg4LDE2ICs5NywxNCBAQAogCSAqIE5vdGUgdGhhdCAicGVuX3JlbGVhc2UiIGlzIHRoZSBoYXJkd2FyZSBDUFUgSUQsIHdoZXJlYXMKIAkgKiAiY3B1IiBpcyBMaW51eCdzIGludGVybmFsIElELgogCSAqLwotCXBlbl9yZWxlYXNlID0gY3B1OwotCV9fY3B1Y19mbHVzaF9kY2FjaGVfYXJlYSgodm9pZCAqKSZwZW5fcmVsZWFzZSwgc2l6ZW9mKHBlbl9yZWxlYXNlKSk7Ci0Jb3V0ZXJfY2xlYW5fcmFuZ2UoX19wYSgmcGVuX3JlbGVhc2UpLCBfX3BhKCZwZW5fcmVsZWFzZSArIDEpKTsKKwl3cml0ZV9wZW5fcmVsZWFzZShjcHUpOwogCiAJLyoKIAkgKiBTZW5kIHRoZSBzZWNvbmRhcnkgQ1BVIGEgc29mdCBpbnRlcnJ1cHQsIHRoZXJlYnkgY2F1c2luZwogCSAqIHRoZSBib290IG1vbml0b3IgdG8gcmVhZCB0aGUgc3lzdGVtIHdpZGUgZmxhZ3MgcmVnaXN0ZXIsCiAJICogYW5kIGJyYW5jaCB0byB0aGUgYWRkcmVzcyBmb3VuZCB0aGVyZS4KIAkgKi8KLQlzbXBfY3Jvc3NfY2FsbChjcHVtYXNrX29mKGNwdSkpOworCXNtcF9jcm9zc19jYWxsKGNwdW1hc2tfb2YoY3B1KSwgMSk7CiAKIAl0aW1lb3V0ID0gamlmZmllcyArICgxICogSFopOwogCXdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSkgewpAQCAtMTMwLDEzICsxMzcsNiBAQAogCW5jb3JlcyA9IHNjdV9iYXNlID8gc2N1X2dldF9jb3JlX2NvdW50KHNjdV9iYXNlKSA6IDE7CiAKIAkvKiBzYW5pdHkgY2hlY2sgKi8KLQlpZiAobmNvcmVzID09IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiUzVQVjMxMDogc3RyYW5nZSBDTSBjb3VudCBvZiAwPyBEZWZhdWx0IHRvIDFcbiIpOwotCi0JCW5jb3JlcyA9IDE7Ci0JfQotCiAJaWYgKG5jb3JlcyA+IE5SX0NQVVMpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkgICAgICAgIlM1UFYzMTA6IG5vLiBvZiBjb3JlcyAoJWQpIGdyZWF0ZXIgdGhhbiBjb25maWd1cmVkICIKQEAgLTE0OSwxOCArMTQ5LDEwIEBACiAJCXNldF9jcHVfcG9zc2libGUoaSwgdHJ1ZSk7CiB9CiAKLXZvaWQgX19pbml0IHNtcF9wcmVwYXJlX2NwdXModW5zaWduZWQgaW50IG1heF9jcHVzKQordm9pZCBfX2luaXQgcGxhdGZvcm1fc21wX3ByZXBhcmVfY3B1cyh1bnNpZ25lZCBpbnQgbWF4X2NwdXMpCiB7Ci0JdW5zaWduZWQgaW50IG5jb3JlcyA9IG51bV9wb3NzaWJsZV9jcHVzKCk7Ci0JdW5zaWduZWQgaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAlpbnQgaTsKIAotCXNtcF9zdG9yZV9jcHVfaW5mbyhjcHUpOwotCi0JLyogYXJlIHdlIHRyeWluZyB0byBib290IG1vcmUgY29yZXMgdGhhbiBleGlzdD8gKi8KLQlpZiAobWF4X2NwdXMgPiBuY29yZXMpCi0JCW1heF9jcHVzID0gbmNvcmVzOwotCiAJLyoKIAkgKiBJbml0aWFsaXNlIHRoZSBwcmVzZW50IG1hcCwgd2hpY2ggZGVzY3JpYmVzIHRoZSBzZXQgb2YgQ1BVcwogCSAqIGFjdHVhbGx5IHBvcHVsYXRlZCBhdCB0aGUgcHJlc2VudCB0aW1lLgpAQCAtMTY4LDI1ICsxNjAsMTMgQEAKIAlmb3IgKGkgPSAwOyBpIDwgbWF4X2NwdXM7IGkrKykKIAkJc2V0X2NwdV9wcmVzZW50KGksIHRydWUpOwogCisJc2N1X2VuYWJsZShzY3VfYmFzZV9hZGRyKCkpOworCiAJLyoKLQkgKiBJbml0aWFsaXNlIHRoZSBTQ1UgaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgQ1BVIGFuZCBsZXQKLQkgKiB0aGVtIGtub3cgd2hlcmUgdG8gc3RhcnQuCisJICogV3JpdGUgdGhlIGFkZHJlc3Mgb2Ygc2Vjb25kYXJ5IHN0YXJ0dXAgaW50byB0aGUKKwkgKiBzeXN0ZW0td2lkZSBmbGFncyByZWdpc3Rlci4gVGhlIGJvb3QgbW9uaXRvciB3YWl0cworCSAqIHVudGlsIGl0IHJlY2VpdmVzIGEgc29mdCBpbnRlcnJ1cHQsIGFuZCB0aGVuIHRoZQorCSAqIHNlY29uZGFyeSBDUFUgYnJhbmNoZXMgdG8gdGhpcyBhZGRyZXNzLgogCSAqLwotCWlmIChtYXhfY3B1cyA+IDEpIHsKLQkJLyoKLQkJICogRW5hYmxlIHRoZSBsb2NhbCB0aW1lciBvciBicm9hZGNhc3QgZGV2aWNlIGZvciB0aGUKLQkJICogYm9vdCBDUFUsIGJ1dCBvbmx5IGlmIHdlIGhhdmUgbW9yZSB0aGFuIG9uZSBDUFUuCi0JCSAqLwotCQlwZXJjcHVfdGltZXJfc2V0dXAoKTsKLQotCQlzY3VfZW5hYmxlKHNjdV9iYXNlX2FkZHIoKSk7Ci0KLQkJLyoKLQkJICogV3JpdGUgdGhlIGFkZHJlc3Mgb2Ygc2Vjb25kYXJ5IHN0YXJ0dXAgaW50byB0aGUKLQkJICogc3lzdGVtLXdpZGUgZmxhZ3MgcmVnaXN0ZXIuIFRoZSBib290IG1vbml0b3Igd2FpdHMKLQkJICogdW50aWwgaXQgcmVjZWl2ZXMgYSBzb2Z0IGludGVycnVwdCwgYW5kIHRoZW4gdGhlCi0JCSAqIHNlY29uZGFyeSBDUFUgYnJhbmNoZXMgdG8gdGhpcyBhZGRyZXNzLgotCQkgKi8KIAlfX3Jhd193cml0ZWwoQlNZTSh2aXJ0X3RvX3BoeXMoczVwdjMxMF9zZWNvbmRhcnlfc3RhcnR1cCkpLCBTNVBfVkFfU1lTUkFNKTsKLQl9CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cHYzMTAvdGltZS5jIGIvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL3RpbWUuYwppbmRleCAwMWIwMTJhLi5iMjYyZDQ2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cHYzMTAvdGltZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczVwdjMxMC90aW1lLmMKQEAgLTIxMSw3ICsyMTEsNiBAQAogCS5yYXRpbmcJCT0gMjUwLAogCS5yZWFkCQk9IHM1cHYzMTBfcHdtNF9yZWFkLAogCS5tYXNrCQk9IENMT0NLU09VUkNFX01BU0soMzIpLAotCS5zaGlmdAkJPSAyMCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVMgLAogfTsKIApAQCAtMjMwLDEwICsyMjksNyBAQAogCXM1cHYzMTBfcHdtX2luaXQoNCwgfjApOwogCXM1cHYzMTBfcHdtX3N0YXJ0KDQsIDEpOwogCi0JcHdtX2Nsb2Nrc291cmNlLm11bHQgPQotCQljbG9ja3NvdXJjZV9raHoybXVsdChjbG9ja19yYXRlLzEwMDAsIHB3bV9jbG9ja3NvdXJjZS5zaGlmdCk7Ci0KLQlpZiAoY2xvY2tzb3VyY2VfcmVnaXN0ZXIoJnB3bV9jbG9ja3NvdXJjZSkpCisJaWYgKGNsb2Nrc291cmNlX3JlZ2lzdGVyX2h6KCZwd21fY2xvY2tzb3VyY2UsIGNsb2NrX3JhdGUpKQogCQlwYW5pYygiJXM6IGNhbid0IHJlZ2lzdGVyIGNsb2Nrc291cmNlXG4iLCBwd21fY2xvY2tzb3VyY2UubmFtZSk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9LY29uZmlnCmluZGV4IDVkYThjMzUuLjQyNjI1ZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvS2NvbmZpZwpAQCAtMTE4LDYgKzExOCwxNiBAQAogCSAgKGFsc28ga25vd24gYXMgdGhlIExBUlQpLiAgU2VlIDxodHRwOi8vd3d3LmxhcnRtYWtlci5ubC8+IGZvcgogCSAgaW5mb3JtYXRpb24gb24gdGhlIExBUlQuCiAKK2NvbmZpZyBTQTExMDBfTkFOT0VOR0lORQorCWJvb2wgIm5hbm9FbmdpbmUiCisJc2VsZWN0IENQVV9GUkVRX1NBMTExMAorCXNlbGVjdCBQQ0kKKwlzZWxlY3QgUENJX05BTk9FTkdJTkUKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSBhcmUgdXNpbmcgdGhlIEJyaWdodCBTdGFyIEVuZ2luZWVyaW5nIG5hbm9FbmdpbmUuCisJICBTZWUgPGh0dHA6Ly93d3cuYnJpZ2h0c3RhcmVuZy5jb20vYXJtL25hbm9lbmcuaHRtPiBmb3IgaW5mb3JtYXRpb24KKwkgIG9uIHRoZSBCU0UgbmFub0VuZ2luZS4KKwogY29uZmlnIFNBMTEwMF9QTEVCCiAJYm9vbCAiUExFQiIKIAlzZWxlY3QgQ1BVX0ZSRVFfU0ExMTAwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL01ha2VmaWxlCmluZGV4IDg5MzQ5YzEuLmU2OTc2OTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL01ha2VmaWxlCkBAIC0zNyw2ICszNyw5IEBACiBvYmotJChDT05GSUdfU0ExMTAwX0xBUlQpCQkrPSBsYXJ0Lm8KIGxlZC0kKENPTkZJR19TQTExMDBfTEFSVCkJCSs9IGxlZHMtbGFydC5vCiAKK29iai0kKENPTkZJR19TQTExMDBfTkFOT0VOR0lORSkJCSs9IG5hbm9lbmdpbmUubworb2JqLSQoQ09ORklHX1BDSV9OQU5PRU5HSU5FKQkJKz0gcGNpLW5hbm9lbmdpbmUubworCiBvYmotJChDT05GSUdfU0ExMTAwX1BMRUIpCQkrPSBwbGViLm8KIAogb2JqLSQoQ09ORklHX1NBMTEwMF9TSEFOTk9OKQkJKz0gc2hhbm5vbi5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9jcHUtc2ExMTAwLmMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9jcHUtc2ExMTAwLmMKaW5kZXggOTZmN2RjMS4uMDdkNGU4YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvY3B1LXNhMTEwMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2NwdS1zYTExMDAuYwpAQCAtOTQsNDggKzk0LDQ3IEBACiAKICNpbmNsdWRlICJnZW5lcmljLmgiCiAKLXR5cGVkZWYgc3RydWN0IHsKK3N0cnVjdCBzYTExMDBfZHJhbV9yZWdzIHsKIAlpbnQgc3BlZWQ7CiAJdTMyIG1kY25mZzsKIAl1MzIgbWRjYXMwOwogCXUzMiBtZGNhczE7CiAJdTMyIG1kY2FzMjsKLX0gc2ExMTAwX2RyYW1fcmVnc190OworfTsKIAogCiBzdGF0aWMgc3RydWN0IGNwdWZyZXFfZHJpdmVyIHNhMTEwMF9kcml2ZXI7CiAKLXN0YXRpYyBzYTExMDBfZHJhbV9yZWdzX3Qgc2ExMTAwX2RyYW1fc2V0dGluZ3NbXSA9Ci17Ci0JLyogc3BlZWQsICAgICBtZGNuZmcsICAgICBtZGNhczAsICAgICBtZGNhczEsICAgICBtZGNhczIgIGNsb2NrIGZyZXF1ZW5jeSAqLwotCXsgIDU5MDAwLCAweDAwZGM4OGEzLCAweGNjY2NjY2NmLCAweGZmZmZmZmZjLCAweGZmZmZmZmZmIH0sIC8qICA1OS4wIE1IeiAqLwotCXsgIDczNzAwLCAweDAxMTQ5MGEzLCAweGNjY2NjY2NmLCAweGZmZmZmZmZjLCAweGZmZmZmZmZmIH0sIC8qICA3My43IE1IeiAqLwotCXsgIDg4NTAwLCAweDAxNGU5MGEzLCAweGNjY2NjY2NmLCAweGZmZmZmZmZjLCAweGZmZmZmZmZmIH0sIC8qICA4OC41IE1IeiAqLwotCXsgMTAzMjAwLCAweDAxODg5OTIzLCAweGNjY2NjY2NmLCAweGZmZmZmZmZjLCAweGZmZmZmZmZmIH0sIC8qIDEwMy4yIE1IeiAqLwotCXsgMTE4MDAwLCAweDAxYzI5OTIzLCAweDk5OTk5OThmLCAweGZmZmZmZmY5LCAweGZmZmZmZmZmIH0sIC8qIDExOC4wIE1IeiAqLwotCXsgMTMyNzAwLCAweDAxZmIyMTIzLCAweDk5OTk5OThmLCAweGZmZmZmZmY5LCAweGZmZmZmZmZmIH0sIC8qIDEzMi43IE1IeiAqLwotCXsgMTQ3NTAwLCAweDAyMzUyMTIzLCAweDMzMzMzMzBmLCAweGZmZmZmZmYzLCAweGZmZmZmZmZmIH0sIC8qIDE0Ny41IE1IeiAqLwotCXsgMTYyMjAwLCAweDAyNmIyOWEzLCAweDM4ZTM4ZTFmLCAweGZmZjhlMzhlLCAweGZmZmZmZmZmIH0sIC8qIDE2Mi4yIE1IeiAqLwotCXsgMTc2OTAwLCAweDAyYTMyOWEzLCAweDcxYzcxYzFmLCAweGZmZjFjNzFjLCAweGZmZmZmZmZmIH0sIC8qIDE3Ni45IE1IeiAqLwotCXsgMTkxNzAwLCAweDAyZGQzMWEzLCAweGUzOGUzODNmLCAweGZmZTM4ZTM4LCAweGZmZmZmZmZmIH0sIC8qIDE5MS43IE1IeiAqLwotCXsgMjA2NDAwLCAweDAzMTUzMjIzLCAweGM3MWM3MDNmLCAweGZmYzcxYzcxLCAweGZmZmZmZmZmIH0sIC8qIDIwNi40IE1IeiAqLwotCXsgMjIxMjAwLCAweDAzNGZiYTIzLCAweGM3MWM3MDNmLCAweGZmYzcxYzcxLCAweGZmZmZmZmZmIH0sIC8qIDIyMS4yIE1IeiAqLwotCXsgMjM1OTAwLCAweDAzODUzYTIzLCAweGUxZTFlMDdmLCAweGUxZTFlMWUxLCAweGZmZmZmZmUxIH0sIC8qIDIzNS45IE1IeiAqLwotCXsgMjUwNzAwLCAweDAzYmYzYWEzLCAweGMzYzNjMDdmLCAweGMzYzNjM2MzLCAweGZmZmZmZmMzIH0sIC8qIDI1MC43IE1IeiAqLwotCXsgMjY1NDAwLCAweDAzZjdjMmEzLCAweGMzYzNjMDdmLCAweGMzYzNjM2MzLCAweGZmZmZmZmMzIH0sIC8qIDI2NS40IE1IeiAqLwotCXsgMjgwMjAwLCAweDA0MzFjMmEzLCAweDg3ODc4MGZmLCAweDg3ODc4Nzg3LCAweGZmZmZmZjg3IH0sIC8qIDI4MC4yIE1IeiAqLworc3RhdGljIHN0cnVjdCBzYTExMDBfZHJhbV9yZWdzIHNhMTEwMF9kcmFtX3NldHRpbmdzW10gPSB7CisJLypzcGVlZCwgICAgIG1kY25mZywgICAgIG1kY2FzMCwgICAgIG1kY2FzMSwgICAgIG1kY2FzMiwgICBjbG9jayBmcmVxICovCisJeyA1OTAwMCwgMHgwMGRjODhhMywgMHhjY2NjY2NjZiwgMHhmZmZmZmZmYywgMHhmZmZmZmZmZn0sLyogIDU5LjAgTUh6ICovCisJeyA3MzcwMCwgMHgwMTE0OTBhMywgMHhjY2NjY2NjZiwgMHhmZmZmZmZmYywgMHhmZmZmZmZmZn0sLyogIDczLjcgTUh6ICovCisJeyA4ODUwMCwgMHgwMTRlOTBhMywgMHhjY2NjY2NjZiwgMHhmZmZmZmZmYywgMHhmZmZmZmZmZn0sLyogIDg4LjUgTUh6ICovCisJezEwMzIwMCwgMHgwMTg4OTkyMywgMHhjY2NjY2NjZiwgMHhmZmZmZmZmYywgMHhmZmZmZmZmZn0sLyogMTAzLjIgTUh6ICovCisJezExODAwMCwgMHgwMWMyOTkyMywgMHg5OTk5OTk4ZiwgMHhmZmZmZmZmOSwgMHhmZmZmZmZmZn0sLyogMTE4LjAgTUh6ICovCisJezEzMjcwMCwgMHgwMWZiMjEyMywgMHg5OTk5OTk4ZiwgMHhmZmZmZmZmOSwgMHhmZmZmZmZmZn0sLyogMTMyLjcgTUh6ICovCisJezE0NzUwMCwgMHgwMjM1MjEyMywgMHgzMzMzMzMwZiwgMHhmZmZmZmZmMywgMHhmZmZmZmZmZn0sLyogMTQ3LjUgTUh6ICovCisJezE2MjIwMCwgMHgwMjZiMjlhMywgMHgzOGUzOGUxZiwgMHhmZmY4ZTM4ZSwgMHhmZmZmZmZmZn0sLyogMTYyLjIgTUh6ICovCisJezE3NjkwMCwgMHgwMmEzMjlhMywgMHg3MWM3MWMxZiwgMHhmZmYxYzcxYywgMHhmZmZmZmZmZn0sLyogMTc2LjkgTUh6ICovCisJezE5MTcwMCwgMHgwMmRkMzFhMywgMHhlMzhlMzgzZiwgMHhmZmUzOGUzOCwgMHhmZmZmZmZmZn0sLyogMTkxLjcgTUh6ICovCisJezIwNjQwMCwgMHgwMzE1MzIyMywgMHhjNzFjNzAzZiwgMHhmZmM3MWM3MSwgMHhmZmZmZmZmZn0sLyogMjA2LjQgTUh6ICovCisJezIyMTIwMCwgMHgwMzRmYmEyMywgMHhjNzFjNzAzZiwgMHhmZmM3MWM3MSwgMHhmZmZmZmZmZn0sLyogMjIxLjIgTUh6ICovCisJezIzNTkwMCwgMHgwMzg1M2EyMywgMHhlMWUxZTA3ZiwgMHhlMWUxZTFlMSwgMHhmZmZmZmZlMX0sLyogMjM1LjkgTUh6ICovCisJezI1MDcwMCwgMHgwM2JmM2FhMywgMHhjM2MzYzA3ZiwgMHhjM2MzYzNjMywgMHhmZmZmZmZjM30sLyogMjUwLjcgTUh6ICovCisJezI2NTQwMCwgMHgwM2Y3YzJhMywgMHhjM2MzYzA3ZiwgMHhjM2MzYzNjMywgMHhmZmZmZmZjM30sLyogMjY1LjQgTUh6ICovCisJezI4MDIwMCwgMHgwNDMxYzJhMywgMHg4Nzg3ODBmZiwgMHg4Nzg3ODc4NywgMHhmZmZmZmY4N30sLyogMjgwLjIgTUh6ICovCiAJeyAwLCAwLCAwLCAwLCAwIH0gLyogbGFzdCBlbnRyeSAqLwogfTsKIAogc3RhdGljIHZvaWQgc2ExMTAwX3VwZGF0ZV9kcmFtX3RpbWluZ3MoaW50IGN1cnJlbnRfc3BlZWQsIGludCBuZXdfc3BlZWQpCiB7Ci0Jc2ExMTAwX2RyYW1fcmVnc190ICpzZXR0aW5ncyA9IHNhMTEwMF9kcmFtX3NldHRpbmdzOworCXN0cnVjdCBzYTExMDBfZHJhbV9yZWdzICpzZXR0aW5ncyA9IHNhMTEwMF9kcmFtX3NldHRpbmdzOwogCiAJLyogZmluZCBzcGVlZCAqLwogCXdoaWxlIChzZXR0aW5ncy0+c3BlZWQgIT0gMCkgewotCQlpZihuZXdfc3BlZWQgPT0gc2V0dGluZ3MtPnNwZWVkKQorCQlpZiAobmV3X3NwZWVkID09IHNldHRpbmdzLT5zcGVlZCkKIAkJCWJyZWFrOwotCQkKKwogCQlzZXR0aW5ncysrOwogCX0KIApAQCAtMTQ5LDcgKzE0OCw3IEBACiAJCS8qIFdlJ3JlIGdvaW5nIEZBU1RFUiwgc28gZmlyc3QgcmVsYXggdGhlIG1lbW9yeQogCQkgKiB0aW1pbmdzIGJlZm9yZSBjaGFuZ2luZyB0aGUgY29yZSBmcmVxdWVuY3kKIAkJICovCi0JCQorCiAJCS8qIEhhbGYgdGhlIG1lbW9yeSBhY2Nlc3MgY2xvY2sgKi8KIAkJTURDTkZHIHw9IE1EQ05GR19DREIyOwogCkBAIC0xODcsNyArMTg2LDcgQEAKIAlzdHJ1Y3QgY3B1ZnJlcV9mcmVxcyBmcmVxczsKIAogCW5ld19wcGNyID0gc2ExMXgwX2ZyZXFfdG9fcHBjcih0YXJnZXRfZnJlcSk7Ci0Jc3dpdGNoKHJlbGF0aW9uKXsKKwlzd2l0Y2ggKHJlbGF0aW9uKSB7CiAJY2FzZSBDUFVGUkVRX1JFTEFUSU9OX0w6CiAJCWlmIChzYTExeDBfcHBjcl90b19mcmVxKG5ld19wcGNyKSA+IHBvbGljeS0+bWF4KQogCQkJbmV3X3BwY3ItLTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2NwdS1zYTExMTAuYyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2NwdS1zYTExMTAuYwppbmRleCA3MjUyODc0Li42NzViZjhlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9jcHUtc2ExMTEwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvY3B1LXNhMTExMC5jCkBAIC0xNiwyOCArMTYsMjQgQEAKICAqCiAgKiBUaGUgU0RSQU0gdHlwZSBjYW4gYmUgcGFzc2VkIG9uIHRoZSBjb21tYW5kIGxpbmUgYXMgY3B1X3NhMTExMC5zZHJhbT10eXBlCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVmcmVxLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2NwdXR5cGUuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAogI2luY2x1ZGUgImdlbmVyaWMuaCIKIAogI3VuZGVmIERFQlVHCiAKLXN0YXRpYyBzdHJ1Y3QgY3B1ZnJlcV9kcml2ZXIgc2ExMTEwX2RyaXZlcjsKLQogc3RydWN0IHNkcmFtX3BhcmFtcyB7Ci0JY29uc3QgY2hhciBuYW1lWzE2XTsKKwljb25zdCBjaGFyIG5hbWVbMjBdOwogCXVfY2hhciAgcm93czsJCS8qIGJpdHMJCQkJICovCiAJdV9jaGFyICBjYXNfbGF0ZW5jeTsJLyogY3ljbGVzCQkJICovCiAJdV9jaGFyICB0Y2s7CQkvKiBjbG9jayBjeWNsZSB0aW1lIChucykJICovCkBAIC0xMDcsNiArMTAzLDE1IEBACiAJCS50d3IJCT0gOCwKIAkJLnJlZnJlc2gJPSA2NDAwMCwKIAkJLmNhc19sYXRlbmN5CT0gMywKKwl9LCB7CS8qIE1pY3JvbiBNVDQ4TEM4TTE2QTJURy03NSAqLworCQkubmFtZQkJPSAiTVQ0OExDOE0xNkEyVEctNzUiLAorCQkucm93cwkJPSAxMiwKKwkJLnRjawkJPSA4LAorCQkudHJjZAkJPSAyMCwKKwkJLnRycAkJPSAyMCwKKwkJLnR3cgkJPSA4LAorCQkucmVmcmVzaAk9IDY0MDAwLAorCQkuY2FzX2xhdGVuY3kJPSAzLAogCX0sCiB9OwogCkBAIC0xODAsMTEgKzE4NSwxMyBAQAogCQlzZC0+bWRyZWZyIHw9IE1EUkVGUl9LMURCMjsKIAogCS8qIGluaXRpYWwgbnVtYmVyIG9mICcxJ3MgaW4gTURDQVMgKyAxICovCi0Jc2V0X21kY2FzKHNkLT5tZGNhcywgc2Rfa2h6ID49IDYyMDAwLCBuc190b19jeWNsZXMoc2RyYW0tPnRyY2QsIG1lbV9raHopKTsKKwlzZXRfbWRjYXMoc2QtPm1kY2FzLCBzZF9raHogPj0gNjIwMDAsCisJCW5zX3RvX2N5Y2xlcyhzZHJhbS0+dHJjZCwgbWVtX2toeikpOwogCiAjaWZkZWYgREVCVUcKLQlwcmludGsoIk1EQ05GRzogJTA4eCBNRFJFRlI6ICUwOHggTURDQVMwOiAlMDh4IE1EQ0FTMTogJTA4eCBNRENBUzI6ICUwOHhcbiIsCi0JCXNkLT5tZGNuZmcsIHNkLT5tZHJlZnIsIHNkLT5tZGNhc1swXSwgc2QtPm1kY2FzWzFdLCBzZC0+bWRjYXNbMl0pOworCXByaW50ayhLRVJOX0RFQlVHICJNRENORkc6ICUwOHggTURSRUZSOiAlMDh4IE1EQ0FTMDogJTA4eCBNRENBUzE6ICUwOHggTURDQVMyOiAlMDh4XG4iLAorCQlzZC0+bWRjbmZnLCBzZC0+bWRyZWZyLCBzZC0+bWRjYXNbMF0sIHNkLT5tZGNhc1sxXSwKKwkJc2QtPm1kY2FzWzJdKTsKICNlbmRpZgogfQogCkBAIC0yMTMsNyArMjIwLDcgQEAKIAogI2lmZGVmIERFQlVHCiAJbWRlbGF5KDI1MCk7Ci0JcHJpbnRrKCJuZXcgZHJpIHZhbHVlID0gJWRcbiIsIGRyaSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIm5ldyBkcmkgdmFsdWUgPSAlZFxuIiwgZHJpKTsKICNlbmRpZgogCiAJc2RyYW1fc2V0X3JlZnJlc2goZHJpKTsKQEAgLTIzMiw3ICsyMzksNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgaW50IHBwY3IsIHVudXNlZDsKIAotCXN3aXRjaChyZWxhdGlvbil7CisJc3dpdGNoIChyZWxhdGlvbikgewogCWNhc2UgQ1BVRlJFUV9SRUxBVElPTl9MOgogCQlwcGNyID0gc2ExMXgwX2ZyZXFfdG9fcHBjcih0YXJnZXRfZnJlcSk7CiAJCWlmIChzYTExeDBfcHBjcl90b19mcmVxKHBwY3IpID4gcG9saWN5LT5tYXgpCkBAIC0yODAsMTEgKzI4NywxMCBAQAogCSAqIFdlIHdhaXQgMjBtcyB0byBiZSBzYWZlLgogCSAqLwogCXNkcmFtX3NldF9yZWZyZXNoKDIpOwotCWlmICghaXJxc19kaXNhYmxlZCgpKSB7CisJaWYgKCFpcnFzX2Rpc2FibGVkKCkpCiAJCW1zbGVlcCgyMCk7Ci0JfSBlbHNlIHsKKwllbHNlCiAJCW1kZWxheSgyMCk7Ci0JfQogCiAJLyoKIAkgKiBSZXByb2dyYW0gdGhlIERSQU0gdGltaW5ncyB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQsIGFuZApAQCAtMjk1LDcgKzMwMSw3IEBACiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCWFzbSgibWNyIHAxNSwgMCwgJTAsIGM3LCBjMTAsIDQiIDogOiAiciIgKDApKTsKIAl1ZGVsYXkoMTApOwotCV9fYXNtX18gX192b2xhdGlsZV9fKCIJCQkJCVxuXAorCV9fYXNtX18gX192b2xhdGlsZV9fKCJcblwKIAkJYgkyZgkJCQkJXG5cCiAJCS5hbGlnbgk1CQkJCQlcblwKIDE6CQlzdHIJJTMsIFslMSwgIzBdCQlAIE1EQ05GRwlcblwKQEAgLTMzNiw3ICszNDIsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGNwdWZyZXFfZHJpdmVyIHNhMTExMF9kcml2ZXIgPSB7CisvKiBzYTExMTBfZHJpdmVyIG5lZWRzIF9fcmVmZGF0YSBiZWNhdXNlIGl0IG11c3QgcmVtYWluIGFmdGVyIGluaXQgcmVnaXN0ZXJzCisgKiBpdCB3aXRoIGNwdWZyZXFfcmVnaXN0ZXJfZHJpdmVyKCkgKi8KK3N0YXRpYyBzdHJ1Y3QgY3B1ZnJlcV9kcml2ZXIgc2ExMTEwX2RyaXZlciBfX3JlZmRhdGEgPSB7CiAJLmZsYWdzCQk9IENQVUZSRVFfU1RJQ0tZLAogCS52ZXJpZnkJCT0gc2ExMXgwX3ZlcmlmeV9zcGVlZCwKIAkudGFyZ2V0CQk9IHNhMTExMF90YXJnZXQsCkBAIC0zNDksNyArMzU3LDggQEAKIHsKIAlzdHJ1Y3Qgc2RyYW1fcGFyYW1zICpzZHJhbTsKIAotCWZvciAoc2RyYW0gPSBzZHJhbV90Ymw7IHNkcmFtIDwgc2RyYW1fdGJsICsgQVJSQVlfU0laRShzZHJhbV90YmwpOyBzZHJhbSsrKQorCWZvciAoc2RyYW0gPSBzZHJhbV90Ymw7IHNkcmFtIDwgc2RyYW1fdGJsICsgQVJSQVlfU0laRShzZHJhbV90YmwpOworCSAgICAgc2RyYW0rKykKIAkJaWYgKHN0cmNtcChuYW1lLCBzZHJhbS0+bmFtZSkgPT0gMCkKIAkJCXJldHVybiBzZHJhbTsKIApAQCAtMzY5LDE0ICszNzgsMTQgQEAKIAlpZiAoIW5hbWVbMF0pIHsKIAkJaWYgKG1hY2hpbmVfaXNfYXNzYWJldCgpKQogCQkJbmFtZSA9ICJUQzU5U003MTYtQ0wzIjsKLQogCQlpZiAobWFjaGluZV9pc19wdF9zeXN0ZW0zKCkpCiAJCQluYW1lID0gIks0UzY0MTYzMkQiOwotCiAJCWlmIChtYWNoaW5lX2lzX2gzMTAwKCkpCiAJCQluYW1lID0gIktNNDE2UzQwMzBDVCI7CiAJCWlmIChtYWNoaW5lX2lzX2pvcm5hZGE3MjAoKSkKLQkJICAgICAgICBuYW1lID0gIks0UzI4MTYzMkItMUgiOworCQkJbmFtZSA9ICJLNFMyODE2MzJCLTFIIjsKKwkJaWYgKG1hY2hpbmVfaXNfbmFub2VuZ2luZSgpKQorCQkJbmFtZSA9ICJNVDQ4TEM4TTE2QTJURy03NSI7CiAJfQogCiAJc2RyYW0gPSBzYTExMTBfZmluZF9zZHJhbShuYW1lKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2dlbmVyaWMuYyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2dlbmVyaWMuYwppbmRleCAzYzFmY2Q2Li41OWQxNGYwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9nZW5lcmljLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvZ2VuZXJpYy5jCkBAIC0xNiw5ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvcG0uaD4KICNpbmNsdWRlIDxsaW51eC9jcHVmcmVxLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4JLyoganVzdCBmb3Igc2NoZWRfY2xvY2soKSAtIGZ1bm55IHRoYXQgKi8KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9jbnQzMl90b182My5oPgogCiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgpAQCAtMTEwLDI3ICsxMDgsNiBAQAogfQogCiAvKgotICogVGhpcyBpcyB0aGUgU0ExMXgwIHNjaGVkX2Nsb2NrIGltcGxlbWVudGF0aW9uLiAgVGhpcyBoYXMKLSAqIGEgcmVzb2x1dGlvbiBvZiAyNzFucywgYW5kIGEgbWF4aW11bSB2YWx1ZSBvZiAzMjAyNTU5N3MgKDM3MCBkYXlzKS4KLSAqCi0gKiBUaGUgcmV0dXJuIHZhbHVlIGlzIGd1YXJhbnRlZWQgdG8gYmUgbW9ub3RvbmljIGluIHRoYXQgcmFuZ2UgYXMKLSAqIGxvbmcgYXMgdGhlcmUgaXMgYWx3YXlzIGxlc3MgdGhhbiA1ODIgc2Vjb25kcyBiZXR3ZWVuIHN1Y2Nlc3NpdmUKLSAqIGNhbGxzIHRvIHRoaXMgZnVuY3Rpb24uCi0gKgotICogICggKiAxRTkgLyAzNjg2NDAwID0+ICogNzgxMjUgLyAyODgpCi0gKi8KLXVuc2lnbmVkIGxvbmcgbG9uZyBzY2hlZF9jbG9jayh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgbG9uZyB2ID0gY250MzJfdG9fNjMoT1NDUik7Ci0KLQkvKiB0aGUgPDwxIGdldHMgcmlkIG9mIHRoZSBjbnRfMzJfdG9fNjMgdG9wIGJpdCBzYXZpbmcgb24gYSBiaWMgaW5zbiAqLwotCXYgKj0gNzgxMjU8PDE7Ci0JZG9fZGl2KHYsIDI4ODw8MSk7Ci0KLQlyZXR1cm4gdjsKLX0KLQotLyoKICAqIERlZmF1bHQgcG93ZXItb2ZmIGZvciBTQTExMDAKICAqLwogc3RhdGljIHZvaWQgc2ExMTAwX3Bvd2VyX29mZih2b2lkKQpAQCAtMTYzLDEwICsxNDAsMTUgQEAKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzYTExeDB1ZGNfcmVzb3VyY2VzW10gPSB7CiAJWzBdID0gewotCQkuc3RhcnQJPSAweDgwMDAwMDAwLAotCQkuZW5kCT0gMHg4MDAwZmZmZiwKKwkJLnN0YXJ0CT0gX19QUkVHKFNlcjBVRENDUiksCisJCS5lbmQJPSBfX1BSRUcoU2VyMFVEQ0NSKSArIDB4ZmZmZiwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IElSUV9TZXIwVURDLAorCQkuZW5kCT0gSVJRX1NlcjBVREMsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCiB9OwogCiBzdGF0aWMgdTY0IHNhMTF4MHVkY19kbWFfbWFzayA9IDB4ZmZmZmZmZmZVTDsKQEAgLTE4NCwxMCArMTY2LDE1IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2ExMXgwdWFydDFfcmVzb3VyY2VzW10gPSB7CiAJWzBdID0gewotCQkuc3RhcnQJPSAweDgwMDEwMDAwLAotCQkuZW5kCT0gMHg4MDAxZmZmZiwKKwkJLnN0YXJ0CT0gX19QUkVHKFNlcjFVVENSMCksCisJCS5lbmQJPSBfX1BSRUcoU2VyMVVUQ1IwKSArIDB4ZmZmZiwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IElSUV9TZXIxVUFSVCwKKwkJLmVuZAk9IElSUV9TZXIxVUFSVCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNhMTF4MHVhcnQxX2RldmljZSA9IHsKQEAgLTE5OSwxMCArMTg2LDE1IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2ExMXgwdWFydDNfcmVzb3VyY2VzW10gPSB7CiAJWzBdID0gewotCQkuc3RhcnQJPSAweDgwMDUwMDAwLAotCQkuZW5kCT0gMHg4MDA1ZmZmZiwKKwkJLnN0YXJ0CT0gX19QUkVHKFNlcjNVVENSMCksCisJCS5lbmQJPSBfX1BSRUcoU2VyM1VUQ1IwKSArIDB4ZmZmZiwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IElSUV9TZXIzVUFSVCwKKwkJLmVuZAk9IElSUV9TZXIzVUFSVCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNhMTF4MHVhcnQzX2RldmljZSA9IHsKQEAgLTIxNCwxMCArMjA2LDE1IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2ExMXgwbWNwX3Jlc291cmNlc1tdID0gewogCVswXSA9IHsKLQkJLnN0YXJ0CT0gMHg4MDA2MDAwMCwKLQkJLmVuZAk9IDB4ODAwNmZmZmYsCisJCS5zdGFydAk9IF9fUFJFRyhTZXI0TUNDUjApLAorCQkuZW5kCT0gX19QUkVHKFNlcjRNQ0NSMCkgKyAweGZmZmYsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAogCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBJUlFfU2VyNE1DUCwKKwkJLmVuZAk9IElSUV9TZXI0TUNQLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAogfTsKIAogc3RhdGljIHU2NCBzYTExeDBtY3BfZG1hX21hc2sgPSAweGZmZmZmZmZmVUw7CkBAIC0yNDQsNiArMjQxLDExIEBACiAJCS5lbmQJPSAweDgwMDdmZmZmLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKIAl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gSVJRX1NlcjRTU1AsCisJCS5lbmQJPSBJUlFfU2VyNFNTUCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKIH07CiAKIHN0YXRpYyB1NjQgc2ExMXgwc3NwX2RtYV9tYXNrID0gMHhmZmZmZmZmZlVMOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmggYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaAppbmRleCA5OWY1ODU2Li45NjdhZTc2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaAorKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaApAQCAtNzYsNCArNzYsMTIgQEAKICNpbmNsdWRlICJTQS0xMTAxLmgiCiAjZW5kaWYKIAorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfU0ExMTAwKSAmJiBkZWZpbmVkKENPTkZJR19QQ0kpCisjZGVmaW5lIFBDSUJJT1NfTUlOX0lPCQkwCisjZGVmaW5lIFBDSUJJT1NfTUlOX01FTQkJMAorI2RlZmluZSBwY2liaW9zX2Fzc2lnbl9hbGxfYnVzc2VzKCkJMQorI2RlZmluZSBIQVZFX0FSQ0hfUENJX1NFVF9ETUFfTUFTSwkxCisjZW5kaWYKKworCiAjZW5kaWYgIC8qIF9BU01fQVJDSF9IQVJEV0FSRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9pbmNsdWRlL21hY2gvbmFub2VuZ2luZS5oIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL25hbm9lbmdpbmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGY4MzgyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL25hbm9lbmdpbmUuaApAQCAtMCwwICsxLDUyIEBACisvKgorICogYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL25hbm9lbmdpbmUuaAorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgaGFyZHdhcmUgc3BlY2lmaWMgZGVmaW5pdGlvbnMgZm9yIG5hbm9FbmdpbmUuCisgKiBPbmx5IGluY2x1ZGUgdGhpcyBmaWxlIGZyb20gU0ExMTAwLXNwZWNpZmljIGZpbGVzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBNYXJjZWxvIFJvYmVydG8gSmltZW5leiA8bXJvYmVydG9AY3B0aS5jZXR1Yy5wdWMtcmlvLmJyPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisjaWZuZGVmIF9fQVNNX0FSQ0hfTkFOT0VOR0lORV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfTkFOT0VOR0lORV9ICisKKyNpbmNsdWRlIDxtYWNoL2lycXMuaD4KKworI2RlZmluZSBHUElPX1BDX1JFQURZMAlHUElPX0dQSU8oMTEpIC8qIHJlYWR5IGZvciBzb2NrZXQgMCAoYWN0aXZlIGhpZ2gpKi8KKyNkZWZpbmUgR1BJT19QQ19SRUFEWTEJR1BJT19HUElPKDEyKSAvKiByZWFkeSBmb3Igc29ja2V0IDEgKGFjdGl2ZSBoaWdoKSAqLworI2RlZmluZSBHUElPX1BDX0NEMAlHUElPX0dQSU8oMTMpIC8qIGRldGVjdCBmb3Igc29ja2V0IDAgKGFjdGl2ZSBsb3cpICovCisjZGVmaW5lIEdQSU9fUENfQ0QxCUdQSU9fR1BJTygxNCkgLyogZGV0ZWN0IGZvciBzb2NrZXQgMSAoYWN0aXZlIGxvdykgKi8KKyNkZWZpbmUgR1BJT19QQ19SRVNFVDAJR1BJT19HUElPKDE1KSAvKiByZXNldCBzb2NrZXQgMCAqLworI2RlZmluZSBHUElPX1BDX1JFU0VUMQlHUElPX0dQSU8oMTYpIC8qIHJlc2V0IHNvY2tldCAxICovCisKKyNkZWZpbmUgTkFOT0VOR0lORV9JUlFfR1BJT19QQ0kJCUlSUV9HUElPMAorI2RlZmluZSBOQU5PRU5HSU5FX0lSUV9HUElPX1BDX1JFQURZMAlJUlFfR1BJTzExCisjZGVmaW5lIE5BTk9FTkdJTkVfSVJRX0dQSU9fUENfUkVBRFkxCUlSUV9HUElPMTIKKyNkZWZpbmUgTkFOT0VOR0lORV9JUlFfR1BJT19QQ19DRDAJSVJRX0dQSU8xMworI2RlZmluZSBOQU5PRU5HSU5FX0lSUV9HUElPX1BDX0NEMQlJUlFfR1BJTzE0CisKKy8qCisgKiBuYW5vRW5naW5lIE1lbW9yeSBNYXA6CisgKgorICogMDAwMC4wMDAwIC0gMDAzRi4wMDAwIC0gICA0IE1CIEZsYXNoCisgKiBDMDAwLjAwMDAgLSBDMUZGLkZGRkYgLSAgMzIgTUIgU0RSQU0KKyAqIDE4NjAuMDAwMCAtIDE4NkYuRkZGRiAtICAgMSBNQiBJbnRlcm5hbCBQQ0kgTWVtb3J5IFJlYWQvV3JpdGUKKyAqIDE4QTEuMDAwMCAtIDE4QTEuRkZGRiAtICA2NCBLQiBJbnRlcm5hbCBQQ0kgQ29uZmlnIFNwYWNlCisgKiA0MDAwLjAwMDAgLSA0N0ZGLkZGRkYgLSAxMjggTUIgRXh0ZXJuYWwgQnVzIEkvTyAtIE11bHRpcGxleGVkIE1vZGUKKyAqIDQ4MDAuMDAwMCAtIDRGRkYuRkZGRiAtIDEyOCBNQiBFeHRlcm5hbCBCdXMgSS9PIC0gTm9uLU11bHRpcGxleGVkIE1vZGUKKyAqCisgKi8KKworI2RlZmluZSBOQU5PX1BDSV9NRU1fUldfUEhZUwkJMHgxODYwMDAwMAorI2RlZmluZSBOQU5PX1BDSV9NRU1fUldfVklSVAkJMHhmMTAwMDAwMAorI2RlZmluZSBOQU5PX1BDSV9NRU1fUldfU0laRQkJU1pfMU0KKyNkZWZpbmUgTkFOT19QQ0lfQ09ORklHX1NQQUNFX1BIWVMJMHgxOEExMDAwMAorI2RlZmluZSBOQU5PX1BDSV9DT05GSUdfU1BBQ0VfVklSVAkweGYyMDAwMDAwCisjZGVmaW5lIE5BTk9fUENJX0NPTkZJR19TUEFDRV9TSVpFCVNaXzY0SworCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvbmFub2VuZ2luZS5jIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvbmFub2VuZ2luZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyMDg3ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9uYW5vZW5naW5lLmMKQEAgLTAsMCArMSwxMTkgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLXNhMTEwMC9uYW5vZW5naW5lLmMKKyAqCisgKiBCcmlnaHQgU3RhciBFbmdpbmVlcmluZydzIG5hbm9FbmdpbmUgYm9hcmQgaW5pdCBjb2RlLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBNYXJjZWxvIFJvYmVydG8gSmltZW5leiA8bXJvYmVydG9AY3B0aS5jZXR1Yy5wdWMtcmlvLmJyPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisjaW5jbHVkZSA8bGludXgvcm9vdF9kZXYuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9zZXJpYWxfc2ExMTAwLmg+CisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9uYW5vZW5naW5lLmg+CisKKyNpbmNsdWRlICJnZW5lcmljLmgiCisKKy8qIEZsYXNoIGJhbmsgMCAqLworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIG5hbm9lbmdpbmVfcGFydGl0aW9uc1tdID0geworCXsKKwkJLm5hbWUJPSAibmFub0VuZ2luZSBib290IGZpcm13YXJlIGFuZCBwYXJhbWV0ZXIgdGFibGUiLAorCQkuc2l6ZQkJPSAweDAwMDEwMDAwLCAgLyogMzJLICovCisJCS5vZmZzZXQJCT0gMCwKKwkJLm1hc2tfZmxhZ3MJPSBNVERfV1JJVEVBQkxFLAorCX0sIHsKKwkJLm5hbWUJCT0gImtlcm5lbC9pbml0cmQgcmVzZXJ2ZWQiLAorCQkuc2l6ZQkJPSAweDAwMmYwMDAwLAorCQkub2Zmc2V0CQk9IDB4MDAwMTAwMDAsCisJCS5tYXNrX2ZsYWdzCT0gTVREX1dSSVRFQUJMRSwKKwl9LCB7CisJCS5uYW1lCQk9ICJleHBlcmltZW50YWwgZmlsZXN5c3RlbSBhbGxvY2F0aW9uIiwKKwkJLnNpemUJCT0gMHgwMDEwMDAwMCwKKwkJLm9mZnNldAkJPSAweDAwMzAwMDAwLAorCQkubWFza19mbGFncwk9IE1URF9XUklURUFCTEUsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhIG5hbm9lbmdpbmVfZmxhc2hfZGF0YSA9IHsKKwkubWFwX25hbWUJPSAiamVkZWNfcHJvYmUiLAorCS5wYXJ0cwkJPSBuYW5vZW5naW5lX3BhcnRpdGlvbnMsCisJLm5yX3BhcnRzCT0gQVJSQVlfU0laRShuYW5vZW5naW5lX3BhcnRpdGlvbnMpLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBuYW5vZW5naW5lX2ZsYXNoX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CT0gU0ExMTAwX0NTMF9QSFlTLAorCQkuZW5kCT0gU0ExMTAwX0NTMF9QSFlTICsgU1pfMzJNIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwgeworCQkuc3RhcnQJPSBTQTExMDBfQ1MxX1BIWVMsCisJCS5lbmQJPSBTQTExMDBfQ1MxX1BIWVMgKyBTWl8zMk0gLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIG5hbm9lbmdpbmVfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJeworCQkvKiBTeXN0ZW0gUmVnaXN0ZXJzICovCisJCS52aXJ0dWFsCT0gMHhmMDAwMDAwMCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKDB4MTAwMDAwMDApLAorCQkubGVuZ3RoCQk9IDB4MDAxMDAwMDAsCisJCS50eXBlCQk9IE1UX0RFVklDRQorCX0sIHsKKwkJLyogSW50ZXJuYWwgUENJIE1lbW9yeSBSZWFkL1dyaXRlICovCisJCS52aXJ0dWFsCT0gTkFOT19QQ0lfTUVNX1JXX1ZJUlQsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihOQU5PX1BDSV9NRU1fUldfUEhZUyksCisJCS5sZW5ndGgJCT0gTkFOT19QQ0lfTUVNX1JXX1NJWkUsCisJCS50eXBlCQk9IE1UX0RFVklDRQorCX0sIHsKKwkJLyogSW50ZXJuYWwgUENJIENvbmZpZyBTcGFjZSAqLworCQkudmlydHVhbAk9IE5BTk9fUENJX0NPTkZJR19TUEFDRV9WSVJULAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oTkFOT19QQ0lfQ09ORklHX1NQQUNFX1BIWVMpLAorCQkubGVuZ3RoCQk9IE5BTk9fUENJX0NPTkZJR19TUEFDRV9TSVpFLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UKKwl9Cit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgbmFub2VuZ2luZV9tYXBfaW8odm9pZCkKK3sKKwlzYTExMDBfbWFwX2lvKCk7CisJaW90YWJsZV9pbml0KG5hbm9lbmdpbmVfaW9fZGVzYywgQVJSQVlfU0laRShuYW5vZW5naW5lX2lvX2Rlc2MpKTsKKworCXNhMTEwMF9yZWdpc3Rlcl91YXJ0KDAsIDEpOworCXNhMTEwMF9yZWdpc3Rlcl91YXJ0KDEsIDIpOworCXNhMTEwMF9yZWdpc3Rlcl91YXJ0KDIsIDMpOworCVNlcjFTRENSMCB8PSBTRENSMF9VQVJUOworCS8qIGRpc2FibGUgSVJEQSAtLSBVQVJUMiBpcyB1c2VkIGFzIGEgbm9ybWFsIHNlcmlhbCBwb3J0ICovCisJU2VyMlVUQ1I0ID0gMDsKKwlTZXIySFNDUjAgPSAwOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgbmFub2VuZ2luZV9pbml0KHZvaWQpCit7CisJc2ExMXgwX3JlZ2lzdGVyX210ZCgmbmFub2VuZ2luZV9mbGFzaF9kYXRhLCBuYW5vZW5naW5lX2ZsYXNoX3Jlc291cmNlcywKKwkJQVJSQVlfU0laRShuYW5vZW5naW5lX2ZsYXNoX3Jlc291cmNlcykpOworfQorCitNQUNISU5FX1NUQVJUKE5BTk9FTkdJTkUsICJCU0UgbmFub0VuZ2luZSIpCisJLmJvb3RfcGFyYW1zCT0gMHhjMDAwMDAwMCwKKwkubWFwX2lvCQk9IG5hbm9lbmdpbmVfbWFwX2lvLAorCS5pbml0X2lycQk9IHNhMTEwMF9pbml0X2lycSwKKwkudGltZXIJCT0gJnNhMTEwMF90aW1lciwKKwkuaW5pdF9tYWNoaW5lCT0gbmFub2VuZ2luZV9pbml0LAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL3BjaS1uYW5vZW5naW5lLmMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9wY2ktbmFub2VuZ2luZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiYTdhOTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9wY2ktbmFub2VuZ2luZS5jCkBAIC0wLDAgKzEsMjg0IEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1zYTExMDAvcGNpLW5hbm9lbmdpbmUuYworICoKKyAqIFBDSSBmdW5jdGlvbnMgZm9yIEJTRSBuYW5vRW5naW5lIFBDSQorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBNYXJjZWxvIFJvYmVydG8gSmltZW5leiA8bXJvYmVydG9AY3B0aS5jZXR1Yy5wdWMtcmlvLmJyPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9wY2kuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorCisjaW5jbHVkZSA8bWFjaC9uYW5vZW5naW5lLmg+CisKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0sobmFub19sb2NrKTsKKworc3RhdGljIGludCBuYW5vZW5naW5lX2dldF9wY2lfYWRkcmVzcyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLAorCXVuc2lnbmVkIGludCBkZXZmbiwgaW50IHdoZXJlLCB1bnNpZ25lZCBsb25nICphZGRyZXNzKQoreworCWludCByZXQgPSBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7CisJdW5zaWduZWQgaW50IGJ1c25yID0gYnVzLT5udW1iZXI7CisKKwkqYWRkcmVzcyA9IE5BTk9fUENJX0NPTkZJR19TUEFDRV9WSVJUICsKKwkJKChidXMtPm51bWJlciA8PCAxNikgfCAoZGV2Zm4gPDwgOCkgfCAod2hlcmUgJiB+MykpOworCisJcmV0ID0gKGJ1c25yID4gMjU1IHx8IGRldmZuID4gMjU1IHx8IHdoZXJlID4gMjU1KSA/CisJCVBDSUJJT1NfREVWSUNFX05PVF9GT1VORCA6IFBDSUJJT1NfU1VDQ0VTU0ZVTDsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbmFub2VuZ2luZV9yZWFkX2NvbmZpZyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sIGludCB3aGVyZSwKKwlpbnQgc2l6ZSwgdTMyICp2YWwpCit7CisJaW50IHJldDsKKwl1bnNpZ25lZCBsb25nIGFkZHJlc3M7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgdjsKKworCS8qIG5hbm9FbmdpbmUgUENJIGJyaWRnZSBkb2VzIG5vdCByZXR1cm4gLTEgZm9yIGEgbm9uLWV4aXN0aW5nCisJICogZGV2aWNlLiBXZSBtdXN0IGZha2UgdGhlIGFuc3dlci4gV2Uga25vdyB0aGF0IHRoZSBvbmx5IHZhbGlkCisJICogZGV2aWNlIGlzIGRldmljZSB6ZXJvIGF0IGJ1cyAwLCB3aGljaCBpcyB0aGUgbmV0d29yayBjaGlwLiAqLworCWlmIChidXMtPm51bWJlciAhPSAwIHx8IChkZXZmbiA+PiAzKSAhPSAwKSB7CisJCXYgPSAtMTsKKwkJbmFub2VuZ2luZV9nZXRfcGNpX2FkZHJlc3MoYnVzLCBkZXZmbiwgd2hlcmUsICZhZGRyZXNzKTsKKwkJZ290byBleGl0X2Z1bmN0aW9uOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZuYW5vX2xvY2ssIGZsYWdzKTsKKworCXJldCA9IG5hbm9lbmdpbmVfZ2V0X3BjaV9hZGRyZXNzKGJ1cywgZGV2Zm4sIHdoZXJlLCAmYWRkcmVzcyk7CisJaWYgKHJldCAhPSBQQ0lCSU9TX1NVQ0NFU1NGVUwpCisJCXJldHVybiByZXQ7CisJdiA9IF9fcmF3X3JlYWRsKGFkZHJlc3MpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmFub19sb2NrLCBmbGFncyk7CisKKwl2ID4+PSAoKHdoZXJlICYgMykgKiA4KTsKKwl2ICY9ICh1bnNpZ25lZCBsb25nKSgtMSkgPj4gKCg0IC0gc2l6ZSkgKiA4KTsKKworZXhpdF9mdW5jdGlvbjoKKwkqdmFsID0gdjsKKwlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOworfQorCitzdGF0aWMgaW50IG5hbm9lbmdpbmVfd3JpdGVfY29uZmlnKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwgaW50IHdoZXJlLAorCWludCBzaXplLCB1MzIgdmFsKQoreworCWludCByZXQ7CisJdW5zaWduZWQgbG9uZyBhZGRyZXNzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgc2hpZnQ7CisJdTMyIHY7CisKKwlzaGlmdCA9ICh3aGVyZSAmIDMpICogODsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZuYW5vX2xvY2ssIGZsYWdzKTsKKworCXJldCA9IG5hbm9lbmdpbmVfZ2V0X3BjaV9hZGRyZXNzKGJ1cywgZGV2Zm4sIHdoZXJlLCAmYWRkcmVzcyk7CisJaWYgKHJldCAhPSBQQ0lCSU9TX1NVQ0NFU1NGVUwpCisJCXJldHVybiByZXQ7CisJdiA9IF9fcmF3X3JlYWRsKGFkZHJlc3MpOworCXN3aXRjaCAoc2l6ZSkgeworCWNhc2UgMToKKwkJdiAmPSB+KDB4RkYgPDwgc2hpZnQpOworCQl2IHw9IHZhbCA8PCBzaGlmdDsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQl2ICY9IH4oMHhGRkZGIDw8IHNoaWZ0KTsKKwkJdiB8PSB2YWwgPDwgc2hpZnQ7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJdiA9IHZhbDsKKwkJYnJlYWs7CisJfQorCV9fcmF3X3dyaXRlbCh2LCBhZGRyZXNzKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5hbm9fbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfb3BzIHBjaV9uYW5vX29wcyA9IHsKKwkucmVhZAk9IG5hbm9lbmdpbmVfcmVhZF9jb25maWcsCisJLndyaXRlCT0gbmFub2VuZ2luZV93cml0ZV9jb25maWcsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBwY2lfbmFub2VuZ2luZV9tYXBfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKK3sKKwlyZXR1cm4gTkFOT0VOR0lORV9JUlFfR1BJT19QQ0k7Cit9CisKK3N0cnVjdCBwY2lfYnVzICogX19pbml0IHBjaV9uYW5vZW5naW5lX3NjYW5fYnVzKGludCBuciwgc3RydWN0IHBjaV9zeXNfZGF0YSAqc3lzKQoreworCXJldHVybiBwY2lfc2Nhbl9idXMoc3lzLT5idXNuciwgJnBjaV9uYW5vX29wcywgc3lzKTsKK30KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBwY2lfaW9fcG9ydHMgPSB7CisJLm5hbWUJPSAiUENJIElPIiwKKwkuc3RhcnQJPSAweDQwMCwKKwkuZW5kCT0gMHg3RkYsCisJLmZsYWdzCT0gSU9SRVNPVVJDRV9JTywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcGNpX25vbl9wcmVmZXRjaGFibGVfbWVtb3J5ID0geworCS5uYW1lCT0gIlBDSSBub24tcHJlZmV0Y2hhYmxlIiwKKwkuc3RhcnQJPSBOQU5PX1BDSV9NRU1fUldfUEhZUywKKwkvKiBuYW5vRW5naW5lIGRvY3VtZW50YXRpb24gc2F5cyB0aGVyZSBpcyBhIDEgTWVnYWJ5dGUgd2luZG93IGhlcmUsCisJICogYnV0IFBDSSByZXBvcnRzIGp1c3QgMTI4ICsgOCBrYnl0ZXMuICovCisJLmVuZAk9IE5BTk9fUENJX01FTV9SV19QSFlTICsgTkFOT19QQ0lfTUVNX1JXX1NJWkUgLSAxLAorLyoJLmVuZAk9IE5BTk9fUENJX01FTV9SV19QSFlTICsgU1pfMTI4SyArIFNaXzhLIC0gMSwqLworCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorfTsKKworLyoKKyAqIG5hbm9FbmdpbmUgUENJIHJlcG9ydHMgMSBNZWdhYnl0ZSBvZiBwcmVmZXRjaGFibGUgbWVtb3J5LCBidXQgaXQKKyAqIG92ZXJsYXBzIHdpdGggcHJldmlvdXNseSBkZWZpbmVkIG1lbW9yeS4KKyAqCisgKiBIZXJlIGlzIHdoYXQgaGFwcGVuczoKKyAqCisjIGRtZXNnCisuLi4KK3BjaSAwMDAwOjAwOjAwLjA6IFs4MDg2OjEyMDldIHR5cGUgMCBjbGFzcyAweDAwMDIwMAorcGNpIDAwMDA6MDA6MDAuMDogcmVnIDEwOiBbbWVtIDB4MDAwMjEwMDAtMHgwMDAyMWZmZl0KK3BjaSAwMDAwOjAwOjAwLjA6IHJlZyAxNDogW2lvICAweDAwMDAtMHgwMDNmXQorcGNpIDAwMDA6MDA6MDAuMDogcmVnIDE4OiBbbWVtIDB4MDAwMDAwMDAtMHgwMDAxZmZmZl0KK3BjaSAwMDAwOjAwOjAwLjA6IHJlZyAzMDogW21lbSAweDAwMDAwMDAwLTB4MDAwZmZmZmYgcHJlZl0KK3BjaSAwMDAwOjAwOjAwLjA6IHN1cHBvcnRzIEQxIEQyCitwY2kgMDAwMDowMDowMC4wOiBQTUUjIHN1cHBvcnRlZCBmcm9tIEQwIEQxIEQyIEQzaG90CitwY2kgMDAwMDowMDowMC4wOiBQTUUjIGRpc2FibGVkCitQQ0k6IGJ1czA6IEZhc3QgYmFjayB0byBiYWNrIHRyYW5zZmVycyBlbmFibGVkCitwY2kgMDAwMDowMDowMC4wOiBCQVIgNjogY2FuJ3QgYXNzaWduIG1lbSBwcmVmIChzaXplIDB4MTAwMDAwKQorcGNpIDAwMDA6MDA6MDAuMDogQkFSIDI6IGFzc2lnbmVkIFttZW0gMHgxODYwMDAwMC0weDE4NjFmZmZmXQorcGNpIDAwMDA6MDA6MDAuMDogQkFSIDI6IHNldCB0byBbbWVtIDB4MTg2MDAwMDAtMHgxODYxZmZmZl0gKFBDSSBhZGRyZXNzIFsweDAtMHgxZmZmZl0pCitwY2kgMDAwMDowMDowMC4wOiBCQVIgMDogYXNzaWduZWQgW21lbSAweDE4NjIwMDAwLTB4MTg2MjBmZmZdCitwY2kgMDAwMDowMDowMC4wOiBCQVIgMDogc2V0IHRvIFttZW0gMHgxODYyMDAwMC0weDE4NjIwZmZmXSAoUENJIGFkZHJlc3MgWzB4MjAwMDAtMHgyMGZmZl0pCitwY2kgMDAwMDowMDowMC4wOiBCQVIgMTogYXNzaWduZWQgW2lvICAweDA0MDAtMHgwNDNmXQorcGNpIDAwMDA6MDA6MDAuMDogQkFSIDE6IHNldCB0byBbaW8gIDB4MDQwMC0weDA0M2ZdIChQQ0kgYWRkcmVzcyBbMHgwLTB4M2ZdKQorICoKKyAqIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB3ZSBkbyBub3QgcmVxdWVzdCB0aGUgcHJlZmV0Y2hhYmxlIG1lbW9yeSByZXNvdXJjZSwKKyAqIGxpbnV4IHdpbGwgYWxsb2MgaXQgZmlyc3QgYW5kIHRoZSB0d28gbm9uLXByZWZldGNoYWJsZSBtZW1vcnkgYXJlYXMgdGhhdAorICogYXJlIG91ciByZWFsIGludGVyZXN0IHdpbGwgbm90IGJlIG1hcHBlZC4gU28gd2UgY2hvb3NlIHRvIG1hcCBpdCB0byBhbgorICogdW51c2VkIGFyZWEuIEl0IGdldHMgcmVjb2duaXplZCBhcyBleHBhbnNpb24gUk9NLCBidXQgYmVjb21lcyBkaXNhYmxlZC4KKyAqCisgKiBIZXJlIGlzIHdoYXQgaGFwcGVucyB0aGVuOgorICoKKyMgZG1lc2cKKy4uLgorcGNpIDAwMDA6MDA6MDAuMDogWzgwODY6MTIwOV0gdHlwZSAwIGNsYXNzIDB4MDAwMjAwCitwY2kgMDAwMDowMDowMC4wOiByZWcgMTA6IFttZW0gMHgwMDAyMTAwMC0weDAwMDIxZmZmXQorcGNpIDAwMDA6MDA6MDAuMDogcmVnIDE0OiBbaW8gIDB4MDAwMC0weDAwM2ZdCitwY2kgMDAwMDowMDowMC4wOiByZWcgMTg6IFttZW0gMHgwMDAwMDAwMC0weDAwMDFmZmZmXQorcGNpIDAwMDA6MDA6MDAuMDogcmVnIDMwOiBbbWVtIDB4MDAwMDAwMDAtMHgwMDBmZmZmZiBwcmVmXQorcGNpIDAwMDA6MDA6MDAuMDogc3VwcG9ydHMgRDEgRDIKK3BjaSAwMDAwOjAwOjAwLjA6IFBNRSMgc3VwcG9ydGVkIGZyb20gRDAgRDEgRDIgRDNob3QKK3BjaSAwMDAwOjAwOjAwLjA6IFBNRSMgZGlzYWJsZWQKK1BDSTogYnVzMDogRmFzdCBiYWNrIHRvIGJhY2sgdHJhbnNmZXJzIGVuYWJsZWQKK3BjaSAwMDAwOjAwOjAwLjA6IEJBUiA2OiBhc3NpZ25lZCBbbWVtIDB4NzgwMDAwMDAtMHg3ODBmZmZmZiBwcmVmXQorcGNpIDAwMDA6MDA6MDAuMDogQkFSIDI6IGFzc2lnbmVkIFttZW0gMHgxODYwMDAwMC0weDE4NjFmZmZmXQorcGNpIDAwMDA6MDA6MDAuMDogQkFSIDI6IHNldCB0byBbbWVtIDB4MTg2MDAwMDAtMHgxODYxZmZmZl0gKFBDSSBhZGRyZXNzIFsweDAtMHgxZmZmZl0pCitwY2kgMDAwMDowMDowMC4wOiBCQVIgMDogYXNzaWduZWQgW21lbSAweDE4NjIwMDAwLTB4MTg2MjBmZmZdCitwY2kgMDAwMDowMDowMC4wOiBCQVIgMDogc2V0IHRvIFttZW0gMHgxODYyMDAwMC0weDE4NjIwZmZmXSAoUENJIGFkZHJlc3MgWzB4MjAwMDAtMHgyMGZmZl0pCitwY2kgMDAwMDowMDowMC4wOiBCQVIgMTogYXNzaWduZWQgW2lvICAweDA0MDAtMHgwNDNmXQorcGNpIDAwMDA6MDA6MDAuMDogQkFSIDE6IHNldCB0byBbaW8gIDB4MDQwMC0weDA0M2ZdIChQQ0kgYWRkcmVzcyBbMHgwLTB4M2ZdKQorCisjIGxzcGNpIC12diAtcyAwMDAwOjAwOjAwLjAKKzAwOjAwLjAgQ2xhc3MgMDIwMDogRGV2aWNlIDgwODY6MTIwOSAocmV2IDA5KQorICAgICAgICBDb250cm9sOiBJL08rIE1lbSsgQnVzTWFzdGVyKyBTcGVjQ3ljbGUtIE1lbVdJTlYtIFZHQVNub29wLSBQYXJFcnIrIFN0ZXBwaW5nLSBTRVJSKyBGYXN0QjJCLSBEaXNJTlR4LQorICAgICAgICBTdGF0dXM6IENhcCsgNjZNSHotIFVERi0gRmFzdEIyQisgUGFyRXJyLSBERVZTRUw9bWVkaXVtID5UQWJvcnQtIDxUQWJvcnQtIDxNQWJvcnQtID5TRVJSKyA8UEVSUisgSU5UeC0KKyAgICAgICAgTGF0ZW5jeTogMCAoMjAwMG5zIG1pbiwgMTQwMDBucyBtYXgpLCBDYWNoZSBMaW5lIFNpemU6IDMyIGJ5dGVzCisgICAgICAgIEludGVycnVwdDogcGluIEEgcm91dGVkIHRvIElSUSAwCisgICAgICAgIFJlZ2lvbiAwOiBNZW1vcnkgYXQgMTg2MjAwMDAgKDMyLWJpdCwgbm9uLXByZWZldGNoYWJsZSkgW3NpemU9NEtdCisgICAgICAgIFJlZ2lvbiAxOiBJL08gcG9ydHMgYXQgMDQwMCBbc2l6ZT02NF0KKyAgICAgICAgUmVnaW9uIDI6IFt2aXJ0dWFsXSBNZW1vcnkgYXQgMTg2MDAwMDAgKDMyLWJpdCwgbm9uLXByZWZldGNoYWJsZSkgW3NpemU9MTI4S10KKyAgICAgICAgW3ZpcnR1YWxdIEV4cGFuc2lvbiBST00gYXQgNzgwMDAwMDAgW2Rpc2FibGVkXSBbc2l6ZT0xTV0KKyAgICAgICAgQ2FwYWJpbGl0aWVzOiBbZGNdIFBvd2VyIE1hbmFnZW1lbnQgdmVyc2lvbiAyCisgICAgICAgICAgICAgICAgRmxhZ3M6IFBNRUNsay0gRFNJKyBEMSsgRDIrIEF1eEN1cnJlbnQ9MG1BIFBNRShEMCssRDErLEQyKyxEM2hvdCssRDNjb2xkLSkKKyAgICAgICAgICAgICAgICBTdGF0dXM6IEQwIE5vU29mdFJzdC0gUE1FLUVuYWJsZS0gRFNlbD0wIERTY2FsZT0yIFBNRS0KKyAgICAgICAgS2VybmVsIGRyaXZlciBpbiB1c2U6IGUxMDAKKyAgICAgICAgS2VybmVsIG1vZHVsZXM6IGUxMDAKKyAqCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcGNpX3ByZWZldGNoYWJsZV9tZW1vcnkgPSB7CisJLm5hbWUJPSAiUENJIHByZWZldGNoYWJsZSIsCisJLnN0YXJ0CT0gMHg3ODAwMDAwMCwKKwkuZW5kCT0gMHg3ODAwMDAwMCArIE5BTk9fUENJX01FTV9SV19TSVpFIC0gMSwKKwkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSAgfCBJT1JFU09VUkNFX1BSRUZFVENILAorfTsKKworc3RhdGljIGludCBfX2luaXQgcGNpX25hbm9lbmdpbmVfc2V0dXBfcmVzb3VyY2VzKHN0cnVjdCByZXNvdXJjZSAqKnJlc291cmNlKQoreworCWlmIChyZXF1ZXN0X3Jlc291cmNlKCZpb3BvcnRfcmVzb3VyY2UsICZwY2lfaW9fcG9ydHMpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiUENJOiB1bmFibGUgdG8gYWxsb2NhdGUgaW8gcG9ydCByZWdpb25cbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwlpZiAocmVxdWVzdF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZwY2lfbm9uX3ByZWZldGNoYWJsZV9tZW1vcnkpKSB7CisJCXJlbGVhc2VfcmVzb3VyY2UoJnBjaV9pb19wb3J0cyk7CisJCXByaW50ayhLRVJOX0VSUiAiUENJOiB1bmFibGUgdG8gYWxsb2NhdGUgbm9uIHByZWZldGNoYWJsZVxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCWlmIChyZXF1ZXN0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgJnBjaV9wcmVmZXRjaGFibGVfbWVtb3J5KSkgeworCQlyZWxlYXNlX3Jlc291cmNlKCZwY2lfaW9fcG9ydHMpOworCQlyZWxlYXNlX3Jlc291cmNlKCZwY2lfbm9uX3ByZWZldGNoYWJsZV9tZW1vcnkpOworCQlwcmludGsoS0VSTl9FUlIgIlBDSTogdW5hYmxlIHRvIGFsbG9jYXRlIHByZWZldGNoYWJsZVxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCXJlc291cmNlWzBdID0gJnBjaV9pb19wb3J0czsKKwlyZXNvdXJjZVsxXSA9ICZwY2lfbm9uX3ByZWZldGNoYWJsZV9tZW1vcnk7CisJcmVzb3VyY2VbMl0gPSAmcGNpX3ByZWZldGNoYWJsZV9tZW1vcnk7CisKKwlyZXR1cm4gMTsKK30KKworaW50IF9faW5pdCBwY2lfbmFub2VuZ2luZV9zZXR1cChpbnQgbnIsIHN0cnVjdCBwY2lfc3lzX2RhdGEgKnN5cykKK3sKKwlpbnQgcmV0ID0gMDsKKworCWlmIChuciA9PSAwKSB7CisJCXN5cy0+bWVtX29mZnNldCA9IE5BTk9fUENJX01FTV9SV19QSFlTOworCQlzeXMtPmlvX29mZnNldCA9IDB4NDAwOworCQlyZXQgPSBwY2lfbmFub2VuZ2luZV9zZXR1cF9yZXNvdXJjZXMoc3lzLT5yZXNvdXJjZSk7CisJCS8qIEVuYWJsZSBhbHRlcm5hdGUgbWVtb3J5IGJ1cyBtYXN0ZXIgbW9kZSwgc2VlCisJCSAqICJJbnRlbCBTdHJvbmdBUk0gU0ExMTEwIERldmVsb3BlcidzIE1hbnVhbCIsCisJCSAqIHNlY3Rpb24gMTAuOCwgIkFsdGVybmF0ZSBNZW1vcnkgQnVzIE1hc3RlciBNb2RlIi4gKi8KKwkJR1BEUiA9IChHUERSICYgfkdQSU9fTUJSRVEpIHwgR1BJT19NQkdOVDsKKwkJR0FGUiB8PSBHUElPX01CR05UIHwgR1BJT19NQlJFUTsKKwkJVFVDUiB8PSBUVUNSX01CR1BJTzsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IGh3X3BjaSBuYW5vZW5naW5lX3BjaSBfX2luaXRkYXRhID0geworCS5tYXBfaXJxCQk9IHBjaV9uYW5vZW5naW5lX21hcF9pcnEsCisJLm5yX2NvbnRyb2xsZXJzCQk9IDEsCisJLnNjYW4JCQk9IHBjaV9uYW5vZW5naW5lX3NjYW5fYnVzLAorCS5zZXR1cAkJCT0gcGNpX25hbm9lbmdpbmVfc2V0dXAsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBuYW5vZW5naW5lX3BjaV9pbml0KHZvaWQpCit7CisJaWYgKG1hY2hpbmVfaXNfbmFub2VuZ2luZSgpKQorCQlwY2lfY29tbW9uX2luaXQoJm5hbm9lbmdpbmVfcGNpKTsKKwlyZXR1cm4gMDsKK30KKworc3Vic3lzX2luaXRjYWxsKG5hbm9lbmdpbmVfcGNpX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvc2ltcGFkLmMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9zaW1wYWQuYwppbmRleCAyNzY5MmQwLi5jZmI3NjA3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9zaW1wYWQuYworKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9zaW1wYWQuYwpAQCAtMTY2LDkgKzE2Niw2IEBACiAJUENGUiA9IDA7CiAJUFNEUiA9IDA7CiAKLQlzYTExeDBfcmVnaXN0ZXJfbXRkKCZzaW1wYWRfZmxhc2hfZGF0YSwgc2ltcGFkX2ZsYXNoX3Jlc291cmNlcywKLQkJCSAgICAgIEFSUkFZX1NJWkUoc2ltcGFkX2ZsYXNoX3Jlc291cmNlcykpOwotCXNhMTF4MF9yZWdpc3Rlcl9tY3AoJnNpbXBhZF9tY3BfZGF0YSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNpbXBhZF9wb3dlcl9vZmYodm9pZCkKQEAgLTIxNiw2ICsyMTMsMTAgQEAKIAogCXBtX3Bvd2VyX29mZiA9IHNpbXBhZF9wb3dlcl9vZmY7CiAKKwlzYTExeDBfcmVnaXN0ZXJfbXRkKCZzaW1wYWRfZmxhc2hfZGF0YSwgc2ltcGFkX2ZsYXNoX3Jlc291cmNlcywKKwkJCSAgICAgIEFSUkFZX1NJWkUoc2ltcGFkX2ZsYXNoX3Jlc291cmNlcykpOworCXNhMTF4MF9yZWdpc3Rlcl9tY3AoJnNpbXBhZF9tY3BfZGF0YSk7CisKIAlyZXQgPSBwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKIAlpZihyZXQpCiAJCXByaW50ayhLRVJOX1dBUk5JTkcgInNpbXBhZDogVW5hYmxlIHRvIHJlZ2lzdGVyIG1xMjAwIGZyYW1lYnVmZmVyIGRldmljZSIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvdGltZS5jIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvdGltZS5jCmluZGV4IDc0YjZlMGUuLmFlNGYzZDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL3RpbWUuYworKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC90aW1lLmMKQEAgLTEyLDEyICsxMiwzOSBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4JLyoganVzdCBmb3Igc2NoZWRfY2xvY2soKSAtIGZ1bm55IHRoYXQgKi8KICNpbmNsdWRlIDxsaW51eC90aW1leC5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsb2NrY2hpcHMuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vc2NoZWRfY2xvY2suaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKKy8qCisgKiBUaGlzIGlzIHRoZSBTQTExeDAgc2NoZWRfY2xvY2sgaW1wbGVtZW50YXRpb24uCisgKi8KK3N0YXRpYyBERUZJTkVfQ0xPQ0tfREFUQShjZCk7CisKKy8qCisgKiBDb25zdGFudHMgZ2VuZXJhdGVkIGJ5IGNsb2Nrc19jYWxjX211bHRfc2hpZnQobSwgcywgMy42ODY0TUh6LAorICogTlNFQ19QRVJfU0VDLCA2MCkuCisgKiBUaGlzIGdpdmVzIGEgcmVzb2x1dGlvbiBvZiBhYm91dCAyNzFucyBhbmQgYSB3cmFwIHBlcmlvZCBvZiBhYm91dCAxOW1pbi4KKyAqLworI2RlZmluZSBTQ19NVUxUCQkyMjc1NTU1NTU2dQorI2RlZmluZSBTQ19TSElGVAkyMworCit1bnNpZ25lZCBsb25nIGxvbmcgbm90cmFjZSBzY2hlZF9jbG9jayh2b2lkKQoreworCXUzMiBjeWMgPSBPU0NSOworCXJldHVybiBjeWNfdG9fZml4ZWRfc2NoZWRfY2xvY2soJmNkLCBjeWMsICh1MzIpfjAsIFNDX01VTFQsIFNDX1NISUZUKTsKK30KKworc3RhdGljIHZvaWQgbm90cmFjZSBzYTExMDBfdXBkYXRlX3NjaGVkX2Nsb2NrKHZvaWQpCit7CisJdTMyIGN5YyA9IE9TQ1I7CisJdXBkYXRlX3NjaGVkX2Nsb2NrKCZjZCwgY3ljLCAodTMyKX4wKTsKK30KKwogI2RlZmluZSBNSU5fT1NDUl9ERUxUQSAyCiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBzYTExMDBfb3N0MF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQpAQCAtODEsNyArMTA4LDYgQEAKIAkucmF0aW5nCQk9IDIwMCwKIAkucmVhZAkJPSBzYTExMDBfcmVhZF9vc2NyLAogCS5tYXNrCQk9IENMT0NLU09VUkNFX01BU0soMzIpLAotCS5zaGlmdAkJPSAyMCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVMsCiB9OwogCkBAIC05Nyw2ICsxMjMsOSBAQAogCU9JRVIgPSAwOwkJLyogZGlzYWJsZSBhbnkgdGltZXIgaW50ZXJydXB0cyAqLwogCU9TU1IgPSAweGY7CQkvKiBjbGVhciBzdGF0dXMgb24gYWxsIHRpbWVycyAqLwogCisJaW5pdF9maXhlZF9zY2hlZF9jbG9jaygmY2QsIHNhMTEwMF91cGRhdGVfc2NoZWRfY2xvY2ssIDMyLAorCQkJICAgICAgIDM2ODY0MDAsIFNDX01VTFQsIFNDX1NISUZUKTsKKwogCWNrZXZ0X3NhMTEwMF9vc21yMC5tdWx0ID0KIAkJZGl2X3NjKDM2ODY0MDAsIE5TRUNfUEVSX1NFQywgY2tldnRfc2ExMTAwX29zbXIwLnNoaWZ0KTsKIAlja2V2dF9zYTExMDBfb3NtcjAubWF4X2RlbHRhX25zID0KQEAgLTEwNSwxMiArMTM0LDkgQEAKIAkJY2xvY2tldmVudF9kZWx0YTJucyhNSU5fT1NDUl9ERUxUQSAqIDIsICZja2V2dF9zYTExMDBfb3NtcjApICsgMTsKIAlja2V2dF9zYTExMDBfb3NtcjAuY3B1bWFzayA9IGNwdW1hc2tfb2YoMCk7CiAKLQlja3NyY19zYTExMDBfb3Njci5tdWx0ID0KLQkJY2xvY2tzb3VyY2VfaHoybXVsdChDTE9DS19USUNLX1JBVEUsIGNrc3JjX3NhMTEwMF9vc2NyLnNoaWZ0KTsKLQogCXNldHVwX2lycShJUlFfT1NUMCwgJnNhMTEwMF90aW1lcl9pcnEpOwogCi0JY2xvY2tzb3VyY2VfcmVnaXN0ZXIoJmNrc3JjX3NhMTEwMF9vc2NyKTsKKwljbG9ja3NvdXJjZV9yZWdpc3Rlcl9oeigmY2tzcmNfc2ExMTAwX29zY3IsIENMT0NLX1RJQ0tfUkFURSk7CiAJY2xvY2tldmVudHNfcmVnaXN0ZXJfZGV2aWNlKCZja2V2dF9zYTExMDBfb3NtcjApOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL0tjb25maWcKaW5kZXggNTFkY2Q1OS4uNGQxYjRjNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvS2NvbmZpZwpAQCAtNSwyNiArNSwyNyBAQAogY29uZmlnIEFSQ0hfU0g3MzY3CiAJYm9vbCAiU0gtTW9iaWxlIEczIChTSDczNjcpIgogCXNlbGVjdCBDUFVfVjYKLQlzZWxlY3QgSEFWRV9DTEsKLQlzZWxlY3QgQ09NTU9OX0NMS0RFVgogCXNlbGVjdCBTSF9DTEtfQ1BHCi0Jc2VsZWN0IEdFTkVSSUNfQ0xPQ0tFVkVOVFMKKwlzZWxlY3QgQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUIKIAogY29uZmlnIEFSQ0hfU0g3Mzc3CiAJYm9vbCAiU0gtTW9iaWxlIEc0IChTSDczNzcpIgogCXNlbGVjdCBDUFVfVjcKLQlzZWxlY3QgSEFWRV9DTEsKLQlzZWxlY3QgQ09NTU9OX0NMS0RFVgogCXNlbGVjdCBTSF9DTEtfQ1BHCi0Jc2VsZWN0IEdFTkVSSUNfQ0xPQ0tFVkVOVFMKKwlzZWxlY3QgQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUIKIAogY29uZmlnIEFSQ0hfU0g3MzcyCiAJYm9vbCAiU0gtTW9iaWxlIEFQNCAoU0g3MzcyKSIKIAlzZWxlY3QgQ1BVX1Y3Ci0Jc2VsZWN0IEhBVkVfQ0xLCi0Jc2VsZWN0IENPTU1PTl9DTEtERVYKIAlzZWxlY3QgU0hfQ0xLX0NQRwotCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCisJc2VsZWN0IEFSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCCisKK2NvbmZpZyBBUkNIX1NINzNBMAorCWJvb2wgIlNILU1vYmlsZSBBRzUgKFI4QTczQTAwKSIKKwlzZWxlY3QgQ1BVX1Y3CisJc2VsZWN0IFNIX0NMS19DUEcKKwlzZWxlY3QgQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUIKKwlzZWxlY3QgQVJNX0dJQwogCiBjb21tZW50ICJTSC1Nb2JpbGUgQm9hcmQgVHlwZSIKIApAQCAtNTcsNiArNTgsMTUgQEAKIAogZW5kY2hvaWNlCiAKK2NvbmZpZyBNQUNIX0FHNUVWTQorCWJvb2wgIkFHNUVWTSBib2FyZCIKKwlkZXBlbmRzIG9uIEFSQ0hfU0g3M0EwCisKK2NvbmZpZyBNQUNIX01BQ0tFUkVMCisJYm9vbCAibWFja2VyZWwgYm9hcmQiCisJZGVwZW5kcyBvbiBBUkNIX1NINzM3MgorCXNlbGVjdCBBUkNIX1JFUVVJUkVfR1BJT0xJQgorCiBjb21tZW50ICJTSC1Nb2JpbGUgU3lzdGVtIENvbmZpZ3VyYXRpb24iCiAKIG1lbnUgIk1lbW9yeSBjb25maWd1cmF0aW9uIgpAQCAtNjQsOCArNzQsOCBAQAogY29uZmlnIE1FTU9SWV9TVEFSVAogCWhleCAiUGh5c2ljYWwgbWVtb3J5IHN0YXJ0IGFkZHJlc3MiCiAJZGVmYXVsdCAiMHg1MDAwMDAwMCIgaWYgTUFDSF9HM0VWTQotCWRlZmF1bHQgIjB4NDAwMDAwMDAiIGlmIE1BQ0hfRzRFVk0KLQlkZWZhdWx0ICIweDQwMDAwMDAwIiBpZiBNQUNIX0FQNEVWQgorCWRlZmF1bHQgIjB4NDAwMDAwMDAiIGlmIE1BQ0hfRzRFVk0gfHwgTUFDSF9BUDRFVkIgfHwgTUFDSF9BRzVFVk0gfHwgXAorCQkJCU1BQ0hfTUFDS0VSRUwKIAlkZWZhdWx0ICIweDAwMDAwMDAwIgogCS0tLWhlbHAtLS0KIAkgIFR3ZWFrIHRoaXMgb25seSB3aGVuIHBvcnRpbmcgdG8gYSBuZXcgbWFjaGluZSB3aGljaCBkb2VzIG5vdApAQCAtNzYsNyArODYsOCBAQAogCWhleCAiUGh5c2ljYWwgbWVtb3J5IHNpemUiCiAJZGVmYXVsdCAiMHgwODAwMDAwMCIgaWYgTUFDSF9HM0VWTQogCWRlZmF1bHQgIjB4MDgwMDAwMDAiIGlmIE1BQ0hfRzRFVk0KLQlkZWZhdWx0ICIweDEwMDAwMDAwIiBpZiBNQUNIX0FQNEVWQgorCWRlZmF1bHQgIjB4MjAwMDAwMDAiIGlmIE1BQ0hfQUc1RVZNCisJZGVmYXVsdCAiMHgxMDAwMDAwMCIgaWYgTUFDSF9BUDRFVkIgfHwgTUFDSF9NQUNLRVJFTAogCWRlZmF1bHQgIjB4MDQwMDAwMDAiCiAJaGVscAogCSAgVGhpcyBzZXRzIHRoZSBkZWZhdWx0IG1lbW9yeSBzaXplIGFzc3VtZWQgYnkgeW91ciBrZXJuZWwuIEl0IGNhbgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvTWFrZWZpbGUKaW5kZXggYWU0MTZmZS4uZTI1MDdmNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL01ha2VmaWxlCkBAIC05LDE0ICs5LDM0IEBACiBvYmotJChDT05GSUdfQVJDSF9TSDczNjcpCSs9IHNldHVwLXNoNzM2Ny5vIGNsb2NrLXNoNzM2Ny5vIGludGMtc2g3MzY3Lm8KIG9iai0kKENPTkZJR19BUkNIX1NINzM3NykJKz0gc2V0dXAtc2g3Mzc3Lm8gY2xvY2stc2g3Mzc3Lm8gaW50Yy1zaDczNzcubwogb2JqLSQoQ09ORklHX0FSQ0hfU0g3MzcyKQkrPSBzZXR1cC1zaDczNzIubyBjbG9jay1zaDczNzIubyBpbnRjLXNoNzM3Mi5vCitvYmotJChDT05GSUdfQVJDSF9TSDczQTApCSs9IHNldHVwLXNoNzNhMC5vIGNsb2NrLXNoNzNhMC5vIGludGMtc2g3M2EwLm8KKworIyBTTVAgb2JqZWN0cworc21wLXkJCQkJOj0gcGxhdHNtcC5vIGhlYWRzbXAubworc21wLSQoQ09ORklHX0hPVFBMVUdfQ1BVKQkrPSBob3RwbHVnLm8KK3NtcC0kKENPTkZJR19MT0NBTF9USU1FUlMpCSs9IGxvY2FsdGltZXIubworc21wLSQoQ09ORklHX0FSQ0hfU0g3M0EwKQkrPSBzbXAtc2g3M2EwLm8KIAogIyBQaW5tdXggc2V0dXAKLXBmYy0kKENPTkZJR19BUkNIX1NINzM2NykJOj0gcGZjLXNoNzM2Ny5vCi1wZmMtJChDT05GSUdfQVJDSF9TSDczNzcpCTo9IHBmYy1zaDczNzcubwotcGZjLSQoQ09ORklHX0FSQ0hfU0g3MzcyKQk6PSBwZmMtc2g3MzcyLm8KLW9iai0kKENPTkZJR19HRU5FUklDX0dQSU8pCSs9ICQocGZjLXkpCitwZmMteQkJCQk6PQorcGZjLSQoQ09ORklHX0FSQ0hfU0g3MzY3KQkrPSBwZmMtc2g3MzY3Lm8KK3BmYy0kKENPTkZJR19BUkNIX1NINzM3NykJKz0gcGZjLXNoNzM3Ny5vCitwZmMtJChDT05GSUdfQVJDSF9TSDczNzIpCSs9IHBmYy1zaDczNzIubworcGZjLSQoQ09ORklHX0FSQ0hfU0g3M0EwKQkrPSBwZmMtc2g3M2EwLm8KKworIyBJUlEgb2JqZWN0cworb2JqLSQoQ09ORklHX0FSQ0hfU0g3MzY3KQkrPSBlbnRyeS1pbnRjLm8KK29iai0kKENPTkZJR19BUkNIX1NINzM3NykJKz0gZW50cnktaW50Yy5vCitvYmotJChDT05GSUdfQVJDSF9TSDczNzIpCSs9IGVudHJ5LWludGMubworb2JqLSQoQ09ORklHX0FSQ0hfU0g3M0EwKQkrPSBlbnRyeS1naWMubwogCiAjIEJvYXJkIG9iamVjdHMKIG9iai0kKENPTkZJR19NQUNIX0czRVZNKQkrPSBib2FyZC1nM2V2bS5vCiBvYmotJChDT05GSUdfTUFDSF9HNEVWTSkJKz0gYm9hcmQtZzRldm0ubwogb2JqLSQoQ09ORklHX01BQ0hfQVA0RVZCKQkrPSBib2FyZC1hcDRldmIubworb2JqLSQoQ09ORklHX01BQ0hfQUc1RVZNKQkrPSBib2FyZC1hZzVldm0ubworb2JqLSQoQ09ORklHX01BQ0hfTUFDS0VSRUwpCSs9IGJvYXJkLW1hY2tlcmVsLm8KKworIyBGcmFtZXdvcmsgc3VwcG9ydAorb2JqLSQoQ09ORklHX1NNUCkJCSs9ICQoc21wLXkpCitvYmotJChDT05GSUdfR0VORVJJQ19HUElPKQkrPSAkKHBmYy15KQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1hZzVldm0uYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtYWc1ZXZtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE4YTc0MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtYWc1ZXZtLmMKQEAgLTAsMCArMSwzMTUgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWFnNWV2bS5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwICBUYWthc2hpIFlvc2hpaSA8eW9zaGlpLnRha2FzaGkuempAcmVuZXNhcy5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgIFlvc2hpaGlybyBTaGltb2RhIDxzaGltb2RhLnlvc2hpaGlyb0ByZW5lc2FzLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfc2NpLmg+CisjaW5jbHVkZSA8bGludXgvc21zYzkxMXguaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC9zaF9rZXlzYy5oPgorI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+CisjaW5jbHVkZSA8bGludXgvbW1jL3NoX21tY2lmLmg+CisKKyNpbmNsdWRlIDxzb3VuZC9zaF9mc2kuaD4KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL3NoNzNhMC5oPgorI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9naWMuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvY2FjaGUtbDJ4MC5oPgorI2luY2x1ZGUgPGFzbS90cmFwcy5oPgorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHNtc2M5MjIwX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CQk9IDB4MTQwMDAwMDAsCisJCS5lbmQJCT0gMHgxNDAwMDAwMCArIFNaXzY0SyAtIDEsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CQk9IGdpY19zcGkoMzMpLCAvKiBQSU5UMSAqLworCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc21zYzkxMXhfcGxhdGZvcm1fY29uZmlnIHNtc2M5MjIwX3BsYXRkYXRhID0geworCS5mbGFncwkJPSBTTVNDOTExWF9VU0VfMzJCSVQgfCBTTVNDOTExWF9TQVZFX01BQ19BRERSRVNTLAorCS5waHlfaW50ZXJmYWNlCT0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSSwKKwkuaXJxX3BvbGFyaXR5CT0gU01TQzkxMVhfSVJRX1BPTEFSSVRZX0FDVElWRV9MT1csCisJLmlycV90eXBlCT0gU01TQzkxMVhfSVJRX1RZUEVfUFVTSF9QVUxMLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZXRoX2RldmljZSA9IHsKKwkubmFtZQkJPSAic21zYzkxMXgiLAorCS5pZAkJPSAwLAorCS5kZXYgID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZzbXNjOTIyMF9wbGF0ZGF0YSwKKwl9LAorCS5yZXNvdXJjZQk9IHNtc2M5MjIwX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc21zYzkyMjBfcmVzb3VyY2VzKSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc2hfa2V5c2NfaW5mbyBrZXlzY19wbGF0ZGF0YSA9IHsKKwkubW9kZQkJPSBTSF9LRVlTQ19NT0RFXzYsCisJLnNjYW5fdGltaW5nCT0gMywKKwkuZGVsYXkJCT0gMTAwLAorCS5rZXljb2Rlcwk9IHsKKwkJS0VZX0EsIEtFWV9CLCBLRVlfQywgS0VZX0QsIEtFWV9FLCBLRVlfRiwgS0VZX0csCisJCUtFWV9ILCBLRVlfSSwgS0VZX0osIEtFWV9LLCBLRVlfTCwgS0VZX00sIEtFWV9OLAorCQlLRVlfTywgS0VZX1AsIEtFWV9RLCBLRVlfUiwgS0VZX1MsIEtFWV9ULCBLRVlfVSwKKwkJS0VZX1YsIEtFWV9XLCBLRVlfWCwgS0VZX1ksIEtFWV9aLCBLRVlfSE9NRSwgS0VZX1NMRUVQLAorCQlLRVlfU1BBQ0UsIEtFWV85LCBLRVlfNiwgS0VZXzMsIEtFWV9XQUtFVVAsIEtFWV9SSUdIVCwgXAorCQlLRVlfQ09GRkVFLAorCQlLRVlfMCwgS0VZXzgsIEtFWV81LCBLRVlfMiwgS0VZX0RPV04sIEtFWV9FTlRFUiwgS0VZX1VQLAorCQlLRVlfS1BBU1RFUklTSywgS0VZXzcsIEtFWV80LCBLRVlfMSwgS0VZX1NUT1AsIEtFWV9MRUZULCBcCisJCUtFWV9DT01QVVRFUiwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBrZXlzY19yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5uYW1lCT0gIktFWVNDIiwKKwkJLnN0YXJ0CT0gMHhlNjFiMDAwMCwKKwkJLmVuZAk9IDB4ZTYxYjAwOTggLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gZ2ljX3NwaSg3MSksCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBrZXlzY19kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoX2tleXNjIiwKKwkuaWQJCT0gMCwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoa2V5c2NfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBrZXlzY19yZXNvdXJjZXMsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmtleXNjX3BsYXRkYXRhLAorCX0sCit9OworCisvKiBGU0kgQSAqLworc3RhdGljIHN0cnVjdCBzaF9mc2lfcGxhdGZvcm1faW5mbyBmc2lfaW5mbyA9IHsKKwkucG9ydGFfZmxhZ3MgPSBTSF9GU0lfT1VUX1NMQVZFX01PREUJfAorCQkgICAgICAgU0hfRlNJX0lOX1NMQVZFX01PREUJfAorCQkgICAgICAgU0hfRlNJX09GTVQoSTJTKQkJfAorCQkgICAgICAgU0hfRlNJX0lGTVQoSTJTKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZnNpX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLm5hbWUJPSAiRlNJIiwKKwkJLnN0YXJ0CT0gMHhFQzIzMDAwMCwKKwkJLmVuZAk9IDB4RUMyMzA0MDAgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0ICA9IGdpY19zcGkoMTQ2KSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBmc2lfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaF9mc2kyIiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGZzaV9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IGZzaV9yZXNvdXJjZXMsCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmZnNpX2luZm8sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2hfbW1jaWZfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkubmFtZQk9ICJNTUNJRiIsCisJCS5zdGFydAk9IDB4ZTZiZDAwMDAsCisJCS5lbmQJPSAweGU2YmQwMGZmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gZ2ljX3NwaSgxNDEpLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCVsyXSA9IHsKKwkJLnN0YXJ0CT0gZ2ljX3NwaSgxNDApLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBzaF9tbWNpZl9wbGF0X2RhdGEgc2hfbW1jaWZfcGxhdGRhdGEgPSB7CisJLnN1cF9wY2xrCT0gMCwKKwkub2NyCQk9IE1NQ19WRERfMTY1XzE5NSwKKwkuY2FwcwkJPSBNTUNfQ0FQXzhfQklUX0RBVEEgfCBNTUNfQ0FQX05PTlJFTU9WQUJMRSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG1tY19kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoX21tY2lmIiwKKwkuaWQJCT0gMCwKKwkuZGV2CQk9IHsKKwkJLmRtYV9tYXNrCQk9IE5VTEwsCisJCS5jb2hlcmVudF9kbWFfbWFzawk9IDB4ZmZmZmZmZmYsCisJCS5wbGF0Zm9ybV9kYXRhCQk9ICZzaF9tbWNpZl9wbGF0ZGF0YSwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzaF9tbWNpZl9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IHNoX21tY2lmX3Jlc291cmNlcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICphZzVldm1fZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJmV0aF9kZXZpY2UsCisJJmtleXNjX2RldmljZSwKKwkmZnNpX2RldmljZSwKKwkmbW1jX2RldmljZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgYWc1ZXZtX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0geworCS8qIGNyZWF0ZSBhIDE6MSBlbnRpdHkgbWFwIGZvciAweGU2eHh4eHh4CisJICogdXNlZCBieSBDUEdBLCBJTlRDIGFuZCBQRkMuCisJICovCisJeworCQkudmlydHVhbAk9IDB4ZTYwMDAwMDAsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbigweGU2MDAwMDAwKSwKKwkJLmxlbmd0aAkJPSAyNTYgPDwgMjAsCisJCS50eXBlCQk9IE1UX0RFVklDRV9OT05TSEFSRUQKKwl9LAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGFnNWV2bV9tYXBfaW8odm9pZCkKK3sKKwlpb3RhYmxlX2luaXQoYWc1ZXZtX2lvX2Rlc2MsIEFSUkFZX1NJWkUoYWc1ZXZtX2lvX2Rlc2MpKTsKKworCS8qIHNldHVwIGVhcmx5IGRldmljZXMgYW5kIGNvbnNvbGUgaGVyZSBhcyB3ZWxsICovCisJc2g3M2EwX2FkZF9lYXJseV9kZXZpY2VzKCk7CisJc2htb2JpbGVfc2V0dXBfY29uc29sZSgpOworfQorCisjZGVmaW5lIFBJTlRDX0FERFIJMHhlNjkwMDAwMAorI2RlZmluZSBQSU5URVIwQQkoUElOVENfQUREUiArIDB4YTApCisjZGVmaW5lIFBJTlRDUjBBCShQSU5UQ19BRERSICsgMHhiMCkKKwordm9pZCBfX2luaXQgYWc1ZXZtX2luaXRfaXJxKHZvaWQpCit7CisJc2g3M2EwX2luaXRfaXJxKCk7CisKKwkvKiBzZXR1cCBQSU5UOiBlbmFibGUgUElOVEEyIGFzIGFjdGl2ZSBsb3cgKi8KKwlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoUElOVEVSMEEpIHwgKDE8PDI5KSwgUElOVEVSMEEpOworCV9fcmF3X3dyaXRldyhfX3Jhd19yZWFkdyhQSU5UQ1IwQSkgfCAoMjw8MTApLCBQSU5UQ1IwQSk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBhZzVldm1faW5pdCh2b2lkKQoreworCXNoNzNhMF9waW5tdXhfaW5pdCgpOworCisJLyogZW5hYmxlIFNDSUZBMiAqLworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1NDSUZBMl9UWEQxLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9TQ0lGQTJfUlhEMSwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fU0NJRkEyX1JUUzFfLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9TQ0lGQTJfQ1RTMV8sIE5VTEwpOworCisJLyogZW5hYmxlIEtFWVNDICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fS0VZSU4wX1BVLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9LRVlJTjFfUFUsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0tFWUlOMl9QVSwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fS0VZSU4zX1BVLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9LRVlJTjRfUFUsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0tFWUlONV9QVSwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fS0VZSU42X1BVLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9LRVlJTjdfUFUsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0tFWU9VVDAsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0tFWU9VVDEsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0tFWU9VVDIsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0tFWU9VVDMsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0tFWU9VVDQsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0tFWU9VVDUsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1BPUlQ1OV9LRVlPVVQ2LCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9QT1JUNThfS0VZT1VUNywgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fS0VZT1VUOCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fUE9SVDE0OV9LRVlPVVQ5LCBOVUxMKTsKKworCS8qIGVuYWJsZSBJMkMgY2hhbm5lbCAyIGFuZCAzICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fUE9SVDIzNl9JMkNfU0RBMiwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fUE9SVDIzN19JMkNfU0NMMiwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fUE9SVDI0OF9JMkNfU0NMMywgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fUE9SVDI0OV9JMkNfU0RBMywgTlVMTCk7CisKKwkvKiBlbmFibGUgTU1DSUYgKi8KKwlncGlvX3JlcXVlc3QoR1BJT19GTl9NTUNDTEswLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9NTUNDTUQwX1BVLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9NTUNEMF8wLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9NTUNEMF8xLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9NTUNEMF8yLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9NTUNEMF8zLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9NTUNEMF80LCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9NTUNEMF81LCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9NTUNEMF82LCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9NTUNEMF83LCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19QT1JUMjA4LCBOVUxMKTsgLyogUmVzZXQgKi8KKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QT1JUMjA4LCAxKTsKKworCS8qIGVuYWJsZSBTTVNDOTExWCAqLworCWdwaW9fcmVxdWVzdChHUElPX1BPUlQxNDQsIE5VTEwpOyAvKiBQSU5UQTIgKi8KKwlncGlvX2RpcmVjdGlvbl9pbnB1dChHUElPX1BPUlQxNDQpOworCWdwaW9fcmVxdWVzdChHUElPX1BPUlQxNDUsIE5VTEwpOyAvKiBSRVNFVCAqLworCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BPUlQxNDUsIDEpOworCisJLyogRlNJIEEgKi8KKwlncGlvX3JlcXVlc3QoR1BJT19GTl9GU0lBQ0ssIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0ZTSUFJTFIsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0ZTSUFJQlQsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0ZTSUFJU0xELCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9GU0lBT1NMRCwgTlVMTCk7CisKKyNpZmRlZiBDT05GSUdfQ0FDSEVfTDJYMAorCS8qIFNoYXJlZCBhdHRyaWJ1dGUgb3ZlcnJpZGUgZW5hYmxlLCA2NEsqOHdheSAqLworCWwyeDBfaW5pdChfX2lvKDB4ZjAxMDAwMDApLCAweDAwNDYwMDAwLCAweGMyMDAwZmZmKTsKKyNlbmRpZgorCXNoNzNhMF9hZGRfc3RhbmRhcmRfZGV2aWNlcygpOworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGFnNWV2bV9kZXZpY2VzLCBBUlJBWV9TSVpFKGFnNWV2bV9kZXZpY2VzKSk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBhZzVldm1fdGltZXJfaW5pdCh2b2lkKQoreworCXNoNzNhMF9jbG9ja19pbml0KCk7CisJc2htb2JpbGVfdGltZXIuaW5pdCgpOworCXJldHVybjsKK30KKworc3RydWN0IHN5c190aW1lciBhZzVldm1fdGltZXIgPSB7CisJLmluaXQJPSBhZzVldm1fdGltZXJfaW5pdCwKK307CisKK01BQ0hJTkVfU1RBUlQoQUc1RVZNLCAiYWc1ZXZtIikKKwkubWFwX2lvCQk9IGFnNWV2bV9tYXBfaW8sCisJLmluaXRfaXJxCT0gYWc1ZXZtX2luaXRfaXJxLAorCS5oYW5kbGVfaXJxCT0gc2htb2JpbGVfaGFuZGxlX2lycV9naWMsCisJLmluaXRfbWFjaGluZQk9IGFnNWV2bV9pbml0LAorCS50aW1lcgkJPSAmYWc1ZXZtX3RpbWVyLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtYXA0ZXZiLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWFwNGV2Yi5jCmluZGV4IGQ0NDBlNWYuLmNkNzlkN2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtYXA0ZXZiLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1hcDRldmIuYwpAQCAtNjEsNiArNjEsNyBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KICNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAKIC8qCiAgKiBBZGRyZXNzCUludGVyZmFjZQkJQnVzV2lkdGgJbm90ZQpAQCAtMjcyLDYgKzI3MywxNSBAQAogCX0sCiB9OwogCitzdGF0aWMgc3RydWN0IHNoX21tY2lmX2RtYSBzaF9tbWNpZl9kbWEgPSB7CisJLmNoYW5fcHJpdl9yeAk9IHsKKwkJLnNsYXZlX2lkCT0gU0hETUFfU0xBVkVfTU1DSUZfUlgsCisJfSwKKwkuY2hhbl9wcml2X3R4CT0geworCQkuc2xhdmVfaWQJPSBTSERNQV9TTEFWRV9NTUNJRl9UWCwKKwl9LAorfTsKKwogc3RhdGljIHN0cnVjdCBzaF9tbWNpZl9wbGF0X2RhdGEgc2hfbW1jaWZfcGxhdCA9IHsKIAkuc3VwX3BjbGsJPSAwLAogCS5vY3IJCT0gTU1DX1ZERF8xNjVfMTk1IHwgTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQsCkBAIC0yNzksNiArMjg5LDcgQEAKIAkJCSAgTU1DX0NBUF84X0JJVF9EQVRBIHwKIAkJCSAgTU1DX0NBUF9ORUVEU19QT0xMLAogCS5nZXRfY2QJCT0gc2xvdF9jbjdfZ2V0X2NkLAorCS5kbWEJCT0gJnNoX21tY2lmX2RtYSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNoX21tY2lmX2RldmljZSA9IHsKQEAgLTUwMSw3ICs1MTIsMTIgQEAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbWlwaWRzaTBfcmVzb3VyY2VzW10gPSB7CiAJWzBdID0gewogCQkuc3RhcnQgID0gMHhmZmM2MDAwMCwKLQkJLmVuZCAgICA9IDB4ZmZjNjhmZmYsCisJCS5lbmQgICAgPSAweGZmYzYzMDczLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydCAgPSAweGZmYzY4MDAwLAorCQkuZW5kICAgID0gMHhmZmM2ODBlZiwKIAkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAogCX0sCiB9OwpAQCAtNTA5LDYgKzUyNSw3IEBACiBzdGF0aWMgc3RydWN0IHNoX21pcGlfZHNpX2luZm8gbWlwaWRzaTBfaW5mbyA9IHsKIAkuZGF0YV9mb3JtYXQJPSBNSVBJX1JHQjg4OCwKIAkubGNkX2NoYW4JPSAmbGNkY19pbmZvLmNoWzBdLAorCS52c3lud19vZmZzZXQJPSAxNywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG1pcGlkc2kwX2RldmljZSA9IHsKQEAgLTUyMSw0NCArNTM4LDYgQEAKIAl9LAogfTsKIAotLyogVGhpcyBmdW5jdGlvbiB3aWxsIGRpc2FwcGVhciB3aGVuIHdlIHN3aXRjaCB0byAocnVudGltZSkgUE0gKi8KLXN0YXRpYyBpbnQgX19pbml0IGFwNGV2Yl9pbml0X2Rpc3BsYXlfY2xrKHZvaWQpCi17Ci0Jc3RydWN0IGNsayAqbGNkY19jbGs7Ci0Jc3RydWN0IGNsayAqZHNpdHhfY2xrOwotCWludCByZXQ7Ci0KLQlsY2RjX2NsayA9IGNsa19nZXQoJmxjZGNfZGV2aWNlLmRldiwgInNoX21vYmlsZV9sY2RjX2ZiLjAiKTsKLQlpZiAoSVNfRVJSKGxjZGNfY2xrKSkKLQkJcmV0dXJuIFBUUl9FUlIobGNkY19jbGspOwotCi0JZHNpdHhfY2xrID0gY2xrX2dldCgmbWlwaWRzaTBfZGV2aWNlLmRldiwgInNoLW1pcGktZHNpLjAiKTsKLQlpZiAoSVNfRVJSKGRzaXR4X2NsaykpIHsKLQkJcmV0ID0gUFRSX0VSUihkc2l0eF9jbGspOwotCQlnb3RvIGVjbGtkc2l0eGdldDsKLQl9Ci0KLQlyZXQgPSBjbGtfZW5hYmxlKGxjZGNfY2xrKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBlY2xrbGNkY29uOwotCi0JcmV0ID0gY2xrX2VuYWJsZShkc2l0eF9jbGspOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIGVjbGtkc2l0eG9uOwotCi0JcmV0dXJuIDA7Ci0KLWVjbGtkc2l0eG9uOgotCWNsa19kaXNhYmxlKGxjZGNfY2xrKTsKLWVjbGtsY2Rjb246Ci0JY2xrX3B1dChkc2l0eF9jbGspOwotZWNsa2RzaXR4Z2V0OgotCWNsa19wdXQobGNkY19jbGspOwotCi0JcmV0dXJuIHJldDsKLX0KLWRldmljZV9pbml0Y2FsbChhcDRldmJfaW5pdF9kaXNwbGF5X2Nsayk7Ci0KIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpxaGRfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJm1pcGlkc2kwX2RldmljZSwKIAkma2V5c2NfZGV2aWNlLApAQCAtNjY0LDkgKzY0Myw4IEBACiAJCXJldHVybiAtRUlPOwogCiAJcmV0ID0gX19mc2lfc2V0X3JvdW5kX3JhdGUoZnNpYl9jbGssIGZzaWJfcmF0ZSwgZW5hYmxlKTsKLQljbGtfcHV0KGZzaWJfY2xrKTsKIAlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKKwkJZ290byBmc2lfc2V0X3JhdGVfZW5kOwogCiAJLyogRlNJIERJViBzZXR0aW5nICovCiAJcmV0ID0gX19mc2lfc2V0X3JvdW5kX3JhdGUoZmRpdl9jbGssIGZkaXZfcmF0ZSwgZW5hYmxlKTsKQEAgLTY3NCwxMCArNjUyLDE0IEBACiAJCS8qIGRpc2FibGUgRlNJIEIgKi8KIAkJaWYgKGVuYWJsZSkKIAkJCV9fZnNpX3NldF9yb3VuZF9yYXRlKGZzaWJfY2xrLCBmc2liX3JhdGUsIDApOwotCQlyZXR1cm4gcmV0OworCQlnb3RvIGZzaV9zZXRfcmF0ZV9lbmQ7CiAJfQogCi0JcmV0dXJuIGFja21kX2JwZm1kOworCXJldCA9IGFja21kX2JwZm1kOworCitmc2lfc2V0X3JhdGVfZW5kOgorCWNsa19wdXQoZnNpYl9jbGspOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgZnNpX3NldF9yYXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IGlzX3BvcnRhLCBpbnQgcmF0ZSwgaW50IGVuYWJsZSkKQEAgLTc2NCwxMCArNzQ2LDE1IEBACiAJfSwKIH07CiAKK3N0YXRpYyBsb25nIGFwNGV2Yl9jbGtfb3B0aW1pemUodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgKmJlc3RfZnJlcSwKKwkJCQl1bnNpZ25lZCBsb25nICpwYXJlbnRfZnJlcSk7CisKKwogc3RhdGljIHN0cnVjdCBzaF9tb2JpbGVfaGRtaV9pbmZvIGhkbWlfaW5mbyA9IHsKIAkubGNkX2NoYW4gPSAmc2hfbW9iaWxlX2xjZGMxX2luZm8uY2hbMF0sCiAJLmxjZF9kZXYgPSAmbGNkYzFfZGV2aWNlLmRldiwKIAkuZmxhZ3MgPSBIRE1JX1NORF9TUkNfU1BESUYsCisJLmNsa19vcHRpbWl6ZV9wYXJlbnQgPSBhcDRldmJfY2xrX29wdGltaXplLAogfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoZG1pX3Jlc291cmNlc1tdID0gewpAQCAtNzk0LDYgKzc4MSwyNSBAQAogCX0sCiB9OwogCitzdGF0aWMgbG9uZyBhcDRldmJfY2xrX29wdGltaXplKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nICpiZXN0X2ZyZXEsCisJCQkJdW5zaWduZWQgbG9uZyAqcGFyZW50X2ZyZXEpCit7CisJc3RydWN0IGNsayAqaGRtaV9pY2sgPSBjbGtfZ2V0KCZoZG1pX2RldmljZS5kZXYsICJpY2siKTsKKwlsb25nIGVycm9yOworCisJaWYgKElTX0VSUihoZG1pX2ljaykpIHsKKwkJaW50IHJldCA9IFBUUl9FUlIoaGRtaV9pY2spOworCQlwcl9lcnIoIkNhbm5vdCBnZXQgSERNSSBJQ0s6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWVycm9yID0gY2xrX3JvdW5kX3BhcmVudChoZG1pX2ljaywgdGFyZ2V0LCBiZXN0X2ZyZXEsIHBhcmVudF9mcmVxLCAxLCA2NCk7CisKKwljbGtfcHV0KGhkbWlfaWNrKTsKKworCXJldHVybiBlcnJvcjsKK30KKwogc3RhdGljIHN0cnVjdCBncGlvX2xlZCBhcDRldmJfbGVkc1tdID0gewogCXsKIAkJLm5hbWUJCQk9ICJsZWQ0IiwKQEAgLTExODEsNyArMTE4Nyw3IEBACiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fT1ZDTjJfMSwgICAgTlVMTCk7CiAKIAkvKiBzZXR1cCBVU0IgcGh5ICovCi0JX19yYXdfd3JpdGV3KDB4OGEwYSwgMHhFNjA1ODEzMCk7CS8qIFVTQkNSMiAqLworCV9fcmF3X3dyaXRldygweDhhMGEsIDB4RTYwNTgxMzApOwkvKiBVU0JDUjQgKi8KIAogCS8qIGVuYWJsZSBGU0kyIHBvcnQgQSAoYWs0NjQzKSAqLwogCWdwaW9fcmVxdWVzdChHUElPX0ZOX0ZTSUFJQlQsCU5VTEwpOwpAQCAtMTM1NSw2ICsxMzYxLDcgQEAKIE1BQ0hJTkVfU1RBUlQoQVA0RVZCLCAiYXA0ZXZiIikKIAkubWFwX2lvCQk9IGFwNGV2Yl9tYXBfaW8sCiAJLmluaXRfaXJxCT0gc2g3MzcyX2luaXRfaXJxLAorCS5oYW5kbGVfaXJxCT0gc2htb2JpbGVfaGFuZGxlX2lycV9pbnRjLAogCS5pbml0X21hY2hpbmUJPSBhcDRldmJfaW5pdCwKIAkudGltZXIJCT0gJmFwNGV2Yl90aW1lciwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWczZXZtLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWczZXZtLmMKaW5kZXggM2I4M2Q2My4uNjg2YjMwNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1nM2V2bS5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtZzNldm0uYwpAQCAtMzY3LDYgKzM2Nyw3IEBACiBNQUNISU5FX1NUQVJUKEczRVZNLCAiZzNldm0iKQogCS5tYXBfaW8JCT0gZzNldm1fbWFwX2lvLAogCS5pbml0X2lycQk9IHNoNzM2N19pbml0X2lycSwKKwkuaGFuZGxlX2lycQk9IHNobW9iaWxlX2hhbmRsZV9pcnFfaW50YywKIAkuaW5pdF9tYWNoaW5lCT0gZzNldm1faW5pdCwKIAkudGltZXIJCT0gJmczZXZtX3RpbWVyLAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtZzRldm0uYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtZzRldm0uYwppbmRleCA1YjNiNTgyLi5jMTNmMDEyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWc0ZXZtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1nNGV2bS5jCkBAIC0zOTQsNiArMzk0LDcgQEAKIE1BQ0hJTkVfU1RBUlQoRzRFVk0sICJnNGV2bSIpCiAJLm1hcF9pbwkJPSBnNGV2bV9tYXBfaW8sCiAJLmluaXRfaXJxCT0gc2g3Mzc3X2luaXRfaXJxLAorCS5oYW5kbGVfaXJxCT0gc2htb2JpbGVfaGFuZGxlX2lycV9pbnRjLAogCS5pbml0X21hY2hpbmUJPSBnNGV2bV9pbml0LAogCS50aW1lcgkJPSAmZzRldm1fdGltZXIsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1tYWNrZXJlbC5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1tYWNrZXJlbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViY2Y1YzEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLW1hY2tlcmVsLmMKQEAgLTAsMCArMSwxMjAwIEBACisvKgorICogbWFja2VyZWwgYm9hcmQgc3VwcG9ydAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBSZW5lc2FzIFNvbHV0aW9ucyBDb3JwLgorICogS3VuaW5vcmkgTW9yaW1vdG8gPGt1bmlub3JpLm1vcmltb3RvLmd4QHJlbmVzYXMuY29tPgorICoKKyAqIGJhc2VkIG9uIGFwNGV2YgorICogQ29weXJpZ2h0IChDKSAyMDEwICBNYWdudXMgRGFtbQorICogQ29weXJpZ2h0IChDKSAyMDA4ICBZb3NoaWhpcm8gU2hpbW9kYQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3NoX21vYmlsZV9zZGhpLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3RtaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tbWMvaG9zdC5oPgorI2luY2x1ZGUgPGxpbnV4L21tYy9zaF9tbWNpZi5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CisjaW5jbHVkZSA8bGludXgvc21zYzkxMXguaD4KKyNpbmNsdWRlIDxsaW51eC9zaF9pbnRjLmg+CisjaW5jbHVkZSA8bGludXgvdGNhNjQxNl9rZXlwYWQuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvcjhhNjY1OTcuaD4KKworI2luY2x1ZGUgPHZpZGVvL3NoX21vYmlsZV9oZG1pLmg+CisjaW5jbHVkZSA8dmlkZW8vc2hfbW9iaWxlX2xjZGMuaD4KKyNpbmNsdWRlIDxtZWRpYS9zaF9tb2JpbGVfY2V1Lmg+CisjaW5jbHVkZSA8bWVkaWEvc29jX2NhbWVyYS5oPgorI2luY2x1ZGUgPG1lZGlhL3NvY19jYW1lcmFfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxzb3VuZC9zaF9mc2kuaD4KKworI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CisjaW5jbHVkZSA8bWFjaC9zaDczNzIuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworLyoKKyAqIEFkZHJlc3MJSW50ZXJmYWNlCQlCdXNXaWR0aAlub3RlCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIDB4MDAwMF8wMDAwCU5PUiBGbGFzaCBST00gKE1DUCkJMTZiaXQJCVNXNyA6IGJpdDEgPSBPTgorICogMHgwODAwXzAwMDAJdXNlciBhcmVhCQktCisgKiAweDEwMDBfMDAwMAlOT1IgRmxhc2ggUk9NIChNQ1ApCTE2Yml0CQlTVzcgOiBiaXQxID0gT0ZGCisgKiAweDE0MDBfMDAwMAlFdGhlciAoTEFOOTIyMCkJCTE2Yml0CisgKiAweDE2MDBfMDAwMAl1c2VyIGFyZWEJCS0JCWNhbm5vdCB1c2Ugd2l0aCBOQU5ECisgKiAweDE4MDBfMDAwMAl1c2VyIGFyZWEJCS0KKyAqIDB4MUEwMF8wMDAwCS0KKyAqIDB4NDAwMF8wMDAwCUxQRERSMi1TRFJBTSAoUE9QKQkzMmJpdAorICovCisKKy8qCisgKiBDUFUgbW9kZQorICoKKyAqIFNXNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJvb3QgQXJlYXwgTWFzdGVyICAgfCBSZW1hcmtzCisgKiAgMSAgfCAyICAgfCAzICAgfCA0ICAgfCA1ICAgfCA2ICAgfCA4ICAgfCAgICAgICAgICB8IFByb2Nlc3NvcnwKKyAqIC0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tCisgKiBPTiAgfCBPTiAgfCBPRkYgfCBPTiAgfCBPTiAgfCBPRkYgfCBPRkYgfCBFeHRlcm5hbCB8IFN5c3RlbSAgIHwgRXh0ZXJuYWwgUk9NCisgKiBPTiAgfCBPTiAgfCBPTiAgfCBPTiAgfCBPTiAgfCBPRkYgfCBPRkYgfCBFeHRlcm5hbCB8IFN5c3RlbSAgIHwgUk9NIERlYnVnCisgKiBPTiAgfCBPTiAgfCBYICAgfCBPTiAgfCBPRkYgfCBPRkYgfCBPRkYgfCBCdWlsdC1pbiB8IFN5c3RlbSAgIHwgUk9NIERlYnVnCisgKiBYICAgfCBPRkYgfCBYICAgfCBYICAgfCBYICAgfCBYICAgfCBPRkYgfCBCdWlsdC1pbiB8IFN5c3RlbSAgIHwgTWFza1JPTQorICogT0ZGIHwgWCAgIHwgWCAgIHwgWCAgIHwgWCAgIHwgWCAgIHwgT0ZGIHwgQnVpbHQtaW4gfCBTeXN0ZW0gICB8IE1hc2tST00KKyAqIFggICB8IFggICB8IFggICB8IE9GRiB8IFggICB8IFggICB8IE9GRiB8IEJ1aWx0LWluIHwgU3lzdGVtICAgfCBNYXNrUk9NCisgKiBPRkYgfCBPTiAgfCBPRkYgfCBYICAgfCBYICAgfCBPRkYgfCBPTiAgfCBFeHRlcm5hbCB8IFN5c3RlbSAgIHwgU3RhbmRhbG9uZQorICogT04gIHwgT0ZGIHwgT0ZGIHwgWCAgIHwgWCAgIHwgT0ZGIHwgT04gIHwgRXh0ZXJuYWwgfCBSZWFsdGltZSB8IFN0YW5kYWxvbmUKKyovCisKKy8qCisgKiBOT1IgRmxhc2ggUk9NCisgKgorICogIFNXMSAgfCAgICAgU1cyICAgIHwgU1c3ICB8IE5PUiBGbGFzaCBST00KKyAqICBiaXQxIHwgYml0MSAgYml0MiB8IGJpdDEgfCBNZW1vcnkgYWxsb2NhdGlvbgorICogLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgT0ZGICB8IE9OICAgICBPRkYgfCBPTiAgIHwgICAgQXJlYSAwCisgKiAgT0ZGICB8IE9OICAgICBPRkYgfCBPRkYgIHwgICAgQXJlYSA0CisgKi8KKworLyoKKyAqIFNNU0MgOTIyMAorICoKKyAqICBTVzEJCVNNU0MgOTIyMAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBPTgkJYWNjZXNzIGRpc2FibGUKKyAqICBPRkYJCWFjY2VzcyBlbmFibGUKKyAqLworCisvKgorICogTkFORCBGbGFzaCBST00KKyAqCisgKiAgU1cxICB8ICAgICBTVzIgICAgfCBTVzcgIHwgTkFORCBGbGFzaCBST00KKyAqICBiaXQxIHwgYml0MSAgYml0MiB8IGJpdDIgfCBNZW1vcnkgYWxsb2NhdGlvbgorICogLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgT0ZGICB8IE9OICAgICBPRkYgfCBPTiAgIHwgICAgRkNFIDAKKyAqICBPRkYgIHwgT04gICAgIE9GRiB8IE9GRiAgfCAgICBGQ0UgMQorICovCisKKy8qCisgKiBFeHRlcm5hbCBpbnRlcnJ1cHQgcGluIHNldHRpbmdzCisgKgorICogSVJRWCAgfCBwaW4gc2V0dGluZyAgICAgICAgfCBkZXZpY2UgICAgICAgICAgICAgfCBsZXZlbAorICogLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0KKyAqIElSUTAgIHwgSUNSMUEuSVJRMFNBPTAwMTAgIHwgU0RISTIgY2FyZCBkZXRlY3QgIHwgTG93CisgKiBJUlE2ICB8IElDUjFBLklSUTZTQT0wMDExICB8IEV0aGVyKExBTjkyMjApICAgICB8IEhpZ2gKKyAqIElSUTcgIHwgSUNSMUEuSVJRN1NBPTAwMTAgIHwgTENEIFR1Y2ggUGFuZWwgICAgIHwgTG93CisgKiBJUlE4ICB8IElDUjJBLklSUThTQT0wMDEwICB8IE1NQy9TRCBjYXJkIGRldGVjdCB8IExvdworICogSVJROSAgfCBJQ1IyQS5JUlE5U0E9MDAxMCAgfCBLRVkoVENBNjQwOCkgICAgICAgfCBMb3cKKyAqIElSUTIxIHwgSUNSNEEuSVJRMjFTQT0wMDExIHwgU2Vuc29yKEFEWEwzNDUpICAgIHwgSGlnaAorICogSVJRMjIgfCBJQ1I0QS5JUlEyMlNBPTAwMTEgfCBTZW5zb3IoQUs4OTc1KSAgICAgfCBIaWdoCisgKi8KKworLyoKKyAqIFVTQgorICoKKyAqIFVTQjAgOiBDTjIyIDogRnVuY3Rpb24KKyAqIFVTQjEgOiBDTjMxIDogRnVuY3Rpb24vSG9zdCAqMQorICoKKyAqIEozMCAoZm9yIENOMzEpICoxCisgKiAtLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tCisgKiAxLTIgc2hvcnQgfCBWQlVTIDVWICAgICAgIHwgSG9zdAorICogb3BlbiAgICAgIHwgZXh0ZXJuYWwgVkJVUyB8IEZ1bmN0aW9uCisgKgorICogKjEKKyAqIENOMzEgaXMgdXNlZCBhcyBIb3N0IGluIExpbnV4LgorICovCisKKy8qCisgKiBTREhJMCAoQ04xMikKKyAqCisgKiBTVzU2IDogT0ZGCisgKgorICovCisKKy8qIE1NQyAvU0RISTEgKENONykKKyAqCisgKiBJL08gdm9sdGFnZSA6IDEuOHYKKyAqCisgKiBQb3dlciB2b2x0YWdlIDogMS44diBvciAzLjN2CisgKiAgSjIyIDogc2VsZWN0IHBvd2VyIHZvbHRhZ2UgKjEKKyAqCTEtMiBwaW4gOiAxLjh2CisgKgkyLTMgcGluIDogMy4zdgorICoKKyAqICoxCisgKiBQbGVhc2UgY2hhbmdlIEoyMiBkZXBlbmRzIHRoZSBjYXJkIHRvIGJlIHVzZWQuCisgKiBNTUMncyBPQ1IgZmllbGQgc2V0IHRvIHN1cHBvcnQgZWl0aGVyIHZvbHRhZ2UgZm9yIHRoZSBjYXJkIGluc2VydGVkLgorICoKKyAqCVNXMQl8CVNXMzMKKyAqCQl8IGJpdDEgfCBiaXQyIHwgYml0MyB8IGJpdDQKKyAqIC0tLS0tLS0tLS0tLS0rLS0tLS0tKy0tLS0tLSstLS0tLS0rLS0tLS0tLQorICogTU1DMAkgIE9GRgl8ICBPRkYgfCAgT04gIHwgIE9OICB8ICBYCisgKiBNTUMxCSAgT04JfCAgT0ZGIHwgIE9OICB8ICBYICAgfCBPTgorICogU0RISTEgIE9GRgl8ICBPTiAgfCAgIFggIHwgIE9GRiB8IE9OCisgKgorICovCisKKy8qCisgKiBTREhJMiAoQ04yMykKKyAqCisgKiBtaWNyb1NEIGNhcmQgc2xvY3QKKyAqCisgKi8KKworLyoKKyAqIEZJWE1FICEhCisgKgorICogZ3Bpb19ub19kaXJlY3Rpb24KKyAqIGFyZSBxdWlja19oYWNrLgorICoKKyAqIGN1cnJlbnQgZ3BpbyBmcmFtZSB3b3JrIGRvZXNuJ3QgaGF2ZQorICogdGhlIG1ldGhvZCB0byBjb250cm9sIG9ubHkgcHVsbCB1cC9kb3duL2ZyZWUuCisgKiB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSByZXBsYWNlZCBieSBjb3JyZWN0IGdwaW8gZnVuY3Rpb24KKyAqLworc3RhdGljIHZvaWQgX19pbml0IGdwaW9fbm9fZGlyZWN0aW9uKHUzMiBhZGRyKQoreworCV9fcmF3X3dyaXRlYigweDAwLCBhZGRyKTsKK30KKworLyogTVREICovCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gbm9yX2ZsYXNoX3BhcnRpdGlvbnNbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJsb2FkZXIiLAorCQkub2Zmc2V0CQk9IDB4MDAwMDAwMDAsCisJCS5zaXplCQk9IDUxMiAqIDEwMjQsCisJCS5tYXNrX2ZsYWdzCT0gTVREX1dSSVRFQUJMRSwKKwl9LAorCXsKKwkJLm5hbWUJCT0gImJvb3RlbnYiLAorCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUJCT0gNTEyICogMTAyNCwKKwkJLm1hc2tfZmxhZ3MJPSBNVERfV1JJVEVBQkxFLAorCX0sCisJeworCQkubmFtZQkJPSAia2VybmVsX3JvIiwKKwkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplCQk9IDggKiAxMDI0ICogMTAyNCwKKwkJLm1hc2tfZmxhZ3MJPSBNVERfV1JJVEVBQkxFLAorCX0sCisJeworCQkubmFtZQkJPSAia2VybmVsIiwKKwkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplCQk9IDggKiAxMDI0ICogMTAyNCwKKwl9LAorCXsKKwkJLm5hbWUJCT0gImRhdGEiLAorCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUJCT0gTVREUEFSVF9TSVpfRlVMTCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgbm9yX2ZsYXNoX2RhdGEgPSB7CisJLndpZHRoCQk9IDIsCisJLnBhcnRzCQk9IG5vcl9mbGFzaF9wYXJ0aXRpb25zLAorCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUobm9yX2ZsYXNoX3BhcnRpdGlvbnMpLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBub3JfZmxhc2hfcmVzb3VyY2VzW10gPSB7CisJWzBdCT0geworCQkuc3RhcnQJPSAweDAwMDAwMDAwLAorCQkuZW5kCT0gMHgwODAwMDAwMCAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG5vcl9mbGFzaF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInBoeXNtYXAtZmxhc2giLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZub3JfZmxhc2hfZGF0YSwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShub3JfZmxhc2hfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBub3JfZmxhc2hfcmVzb3VyY2VzLAorfTsKKworLyogU01TQyAqLworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzbWM5MTF4X3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CT0gMHgxNDAwMDAwMCwKKwkJLmVuZAk9IDB4MTYwMDAwMDAgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LCB7CisJCS5zdGFydAk9IGV2dDJpcnEoMHgwMmMwKSAvKiBJUlE2QSAqLywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEgfCBJT1JFU09VUkNFX0lSUV9MT1dMRVZFTCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBzbXNjOTExeF9wbGF0Zm9ybV9jb25maWcgc21zYzkxMXhfaW5mbyA9IHsKKwkuZmxhZ3MJCT0gU01TQzkxMVhfVVNFXzE2QklUIHwgU01TQzkxMVhfU0FWRV9NQUNfQUREUkVTUywKKwkuaXJxX3BvbGFyaXR5ICAgPSBTTVNDOTExWF9JUlFfUE9MQVJJVFlfQUNUSVZFX0xPVywKKwkuaXJxX3R5cGUgICAgICAgPSBTTVNDOTExWF9JUlFfVFlQRV9QVVNIX1BVTEwsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzbWM5MTF4X2RldmljZSA9IHsKKwkubmFtZSAgICAgICAgICAgPSAic21zYzkxMXgiLAorCS5pZCAgICAgICAgICAgICA9IC0xLAorCS5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUoc21jOTExeF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSAgICAgICA9IHNtYzkxMXhfcmVzb3VyY2VzLAorCS5kZXYgICAgICAgICAgICA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmc21zYzkxMXhfaW5mbywKKwl9LAorfTsKKworLyogTENEQyAqLworc3RhdGljIHN0cnVjdCBmYl92aWRlb21vZGUgbWFja2VyZWxfbGNkY19tb2Rlc1tdID0geworCXsKKwkJLm5hbWUJCT0gIldWR0EgUGFuZWwiLAorCQkueHJlcwkJPSA4MDAsCisJCS55cmVzCQk9IDQ4MCwKKwkJLmxlZnRfbWFyZ2luCT0gMjIwLAorCQkucmlnaHRfbWFyZ2luCT0gMTEwLAorCQkuaHN5bmNfbGVuCT0gNzAsCisJCS51cHBlcl9tYXJnaW4JPSAyMCwKKwkJLmxvd2VyX21hcmdpbgk9IDUsCisJCS52c3luY19sZW4JPSA1LAorCQkuc3luYwkJPSAwLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHNoX21vYmlsZV9sY2RjX2luZm8gbGNkY19pbmZvID0geworCS5jbG9ja19zb3VyY2UgPSBMQ0RDX0NMS19CVVMsCisJLmNoWzBdID0geworCQkuY2hhbiA9IExDRENfQ0hBTl9NQUlOTENELAorCQkuYnBwID0gMTYsCisJCS5sY2RfY2ZnID0gbWFja2VyZWxfbGNkY19tb2RlcywKKwkJLm51bV9jZmcgPSBBUlJBWV9TSVpFKG1hY2tlcmVsX2xjZGNfbW9kZXMpLAorCQkuaW50ZXJmYWNlX3R5cGUJCT0gUkdCMjQsCisJCS5jbG9ja19kaXZpZGVyCQk9IDIsCisJCS5mbGFncwkJCT0gMCwKKwkJLmxjZF9zaXplX2NmZy53aWR0aAk9IDE1MiwKKwkJLmxjZF9zaXplX2NmZy5oZWlnaHQJPSA5MSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGxjZGNfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkubmFtZQk9ICJMQ0RDIiwKKwkJLnN0YXJ0CT0gMHhmZTk0MDAwMCwKKwkJLmVuZAk9IDB4ZmU5NDNmZmYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBpbnRjc19ldnQyaXJxKDB4NTgwKSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGxjZGNfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaF9tb2JpbGVfbGNkY19mYiIsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGxjZGNfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBsY2RjX3Jlc291cmNlcywKKwkuZGV2CT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZsY2RjX2luZm8sCisJCS5jb2hlcmVudF9kbWFfbWFzayA9IH4wLAorCX0sCit9OworCisvKiBIRE1JICovCitzdGF0aWMgc3RydWN0IHNoX21vYmlsZV9sY2RjX2luZm8gaGRtaV9sY2RjX2luZm8gPSB7CisJLmNsb2NrX3NvdXJjZSA9IExDRENfQ0xLX0VYVEVSTkFMLAorCS5jaFswXSA9IHsKKwkJLmNoYW4gPSBMQ0RDX0NIQU5fTUFJTkxDRCwKKwkJLmJwcCA9IDE2LAorCQkuaW50ZXJmYWNlX3R5cGUgPSBSR0IyNCwKKwkJLmNsb2NrX2RpdmlkZXIgPSAxLAorCQkuZmxhZ3MgPSBMQ0RDX0ZMQUdTX0RXUE9MLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaGRtaV9sY2RjX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLm5hbWUJPSAiTENEQzEiLAorCQkuc3RhcnQJPSAweGZlOTQ0MDAwLAorCQkuZW5kCT0gMHhmZTk0N2ZmZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IGludGNzX2V2dDJpcnEoMHgxNzgwKSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGhkbWlfbGNkY19kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoX21vYmlsZV9sY2RjX2ZiIiwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoaGRtaV9sY2RjX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gaGRtaV9sY2RjX3Jlc291cmNlcywKKwkuaWQJCT0gMSwKKwkuZGV2CT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZoZG1pX2xjZGNfaW5mbywKKwkJLmNvaGVyZW50X2RtYV9tYXNrID0gfjAsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc2hfbW9iaWxlX2hkbWlfaW5mbyBoZG1pX2luZm8gPSB7CisJLmxjZF9jaGFuCT0gJmhkbWlfbGNkY19pbmZvLmNoWzBdLAorCS5sY2RfZGV2CT0gJmhkbWlfbGNkY19kZXZpY2UuZGV2LAorCS5mbGFncwkJPSBIRE1JX1NORF9TUkNfU1BESUYsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGhkbWlfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkubmFtZQk9ICJIRE1JIiwKKwkJLnN0YXJ0CT0gMHhlNmJlMDAwMCwKKwkJLmVuZAk9IDB4ZTZiZTAwZmYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkvKiBUaGVyZSdzIGFsc28gYW4gSERNSSBpbnRlcnJ1cHQgb24gSU5UQ1MgQCAweDE4ZTAgKi8KKwkJLnN0YXJ0CT0gZXZ0MmlycSgweDE3ZTApLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaGRtaV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoLW1vYmlsZS1oZG1pIiwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoaGRtaV9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IGhkbWlfcmVzb3VyY2VzLAorCS5pZCAgICAgICAgICAgICA9IC0xLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmhkbWlfaW5mbywKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgaGRtaV9pbml0X3BtX2Nsb2NrKHZvaWQpCit7CisJc3RydWN0IGNsayAqaGRtaV9pY2sgPSBjbGtfZ2V0KCZoZG1pX2RldmljZS5kZXYsICJpY2siKTsKKwlpbnQgcmV0OworCWxvbmcgcmF0ZTsKKworCWlmIChJU19FUlIoaGRtaV9pY2spKSB7CisJCXJldCA9IFBUUl9FUlIoaGRtaV9pY2spOworCQlwcl9lcnIoIkNhbm5vdCBnZXQgSERNSSBJQ0s6ICVkXG4iLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBjbGtfc2V0X3BhcmVudCgmc2g3MzcyX3BsbGMyX2NsaywgJnNoNzM3Ml9kdl9jbGtpX2RpdjJfY2xrKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcl9lcnIoIkNhbm5vdCBzZXQgUExMQzIgcGFyZW50OiAlZCwgJWQgdXNlcnNcbiIsCisJCSAgICAgICByZXQsIHNoNzM3Ml9wbGxjMl9jbGsudXNlY291bnQpOworCQlnb3RvIG91dDsKKwl9CisKKwlwcl9kZWJ1ZygiUExMQzIgaW5pdGlhbCBmcmVxdWVuY3kgJWx1XG4iLAorCQkgY2xrX2dldF9yYXRlKCZzaDczNzJfcGxsYzJfY2xrKSk7CisKKwlyYXRlID0gY2xrX3JvdW5kX3JhdGUoJnNoNzM3Ml9wbGxjMl9jbGssIDU5NDAwMDAwMCk7CisJaWYgKHJhdGUgPCAwKSB7CisJCXByX2VycigiQ2Fubm90IGdldCBzdWl0YWJsZSByYXRlOiAlbGRcbiIsIHJhdGUpOworCQlyZXQgPSByYXRlOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBjbGtfc2V0X3JhdGUoJnNoNzM3Ml9wbGxjMl9jbGssIHJhdGUpOworCWlmIChyZXQgPCAwKSB7CisJCXByX2VycigiQ2Fubm90IHNldCByYXRlICVsZDogJWRcbiIsIHJhdGUsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IGNsa19lbmFibGUoJnNoNzM3Ml9wbGxjMl9jbGspOworCWlmIChyZXQgPCAwKSB7CisJCXByX2VycigiQ2Fubm90IGVuYWJsZSBwbGxjMiBjbG9ja1xuIik7CisJCWdvdG8gb3V0OworCX0KKworCXByX2RlYnVnKCJQTExDMiBzZXQgZnJlcXVlbmN5ICVsdVxuIiwgcmF0ZSk7CisKKwlyZXQgPSBjbGtfc2V0X3BhcmVudChoZG1pX2ljaywgJnNoNzM3Ml9wbGxjMl9jbGspOworCWlmIChyZXQgPCAwKSB7CisJCXByX2VycigiQ2Fubm90IHNldCBIRE1JIHBhcmVudDogJWRcbiIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCWlmICghSVNfRVJSKGhkbWlfaWNrKSkKKwkJY2xrX3B1dChoZG1pX2ljayk7CisJcmV0dXJuIHJldDsKK30KK2RldmljZV9pbml0Y2FsbChoZG1pX2luaXRfcG1fY2xvY2spOworCisvKiBVU0IxIChIb3N0KSAqLworc3RhdGljIHZvaWQgdXNiMV9ob3N0X3BvcnRfcG93ZXIoaW50IHBvcnQsIGludCBwb3dlcikKK3sKKwlpZiAoIXBvd2VyKSAvKiBvbmx5IHBvd2VyLW9uIGlzIHN1cHBvcnRlZCBmb3Igbm93ICovCisJCXJldHVybjsKKworCS8qIHNldCBWQk9VVC9QV0VOIGFuZCBFWFRMUDEgaW4gRFZTVENUUiAqLworCV9fcmF3X3dyaXRldyhfX3Jhd19yZWFkdygweEU2OEIwMDA4KSB8IDB4NjAwLCAweEU2OEIwMDA4KTsKK30KKworc3RhdGljIHN0cnVjdCByOGE2NjU5N19wbGF0ZGF0YSB1c2IxX2hvc3RfZGF0YSA9IHsKKwkub25fY2hpcAk9IDEsCisJLnBvcnRfcG93ZXIJPSB1c2IxX2hvc3RfcG9ydF9wb3dlciwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdXNiMV9ob3N0X3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLm5hbWUJPSAiVVNCSFMiLAorCQkuc3RhcnQJPSAweEU2OEIwMDAwLAorCQkuZW5kCT0gMHhFNjhCMDBFNiAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBldnQyaXJxKDB4MWNlMCkgLyogVVNCMV9VU0IxSTAgKi8sCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB1c2IxX2hvc3RfZGV2aWNlID0geworCS5uYW1lCT0gInI4YTY2NTk3X2hjZCIsCisJLmlkCT0gMSwKKwkuZGV2ID0geworCQkuZG1hX21hc2sJCT0gTlVMTCwgICAgICAgICAvKiAgbm90IHVzZSBkbWEgKi8KKwkJLmNvaGVyZW50X2RtYV9tYXNrCT0gMHhmZmZmZmZmZiwKKwkJLnBsYXRmb3JtX2RhdGEJCT0gJnVzYjFfaG9zdF9kYXRhLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHVzYjFfaG9zdF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IHVzYjFfaG9zdF9yZXNvdXJjZXMsCit9OworCisvKiBMRUQgKi8KK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgbWFja2VyZWxfbGVkc1tdID0geworCXsKKwkJLm5hbWUJCT0gImxlZDAiLAorCQkuZ3BpbwkJPSBHUElPX1BPUlQwLAorCQkuZGVmYXVsdF9zdGF0ZQk9IExFRFNfR1BJT19ERUZTVEFURV9PTiwKKwl9LAorCXsKKwkJLm5hbWUJCT0gImxlZDEiLAorCQkuZ3BpbwkJPSBHUElPX1BPUlQxLAorCQkuZGVmYXVsdF9zdGF0ZQk9IExFRFNfR1BJT19ERUZTVEFURV9PTiwKKwl9LAorCXsKKwkJLm5hbWUJCT0gImxlZDIiLAorCQkuZ3BpbwkJPSBHUElPX1BPUlQyLAorCQkuZGVmYXVsdF9zdGF0ZQk9IExFRFNfR1BJT19ERUZTVEFURV9PTiwKKwl9LAorCXsKKwkJLm5hbWUJCT0gImxlZDMiLAorCQkuZ3BpbwkJPSBHUElPX1BPUlQxNTksCisJCS5kZWZhdWx0X3N0YXRlCT0gTEVEU19HUElPX0RFRlNUQVRFX09OLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWRfcGxhdGZvcm1fZGF0YSBtYWNrZXJlbF9sZWRzX3BkYXRhID0geworCS5sZWRzID0gbWFja2VyZWxfbGVkcywKKwkubnVtX2xlZHMgPSBBUlJBWV9TSVpFKG1hY2tlcmVsX2xlZHMpLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbGVkc19kZXZpY2UgPSB7CisJLm5hbWUgPSAibGVkcy1ncGlvIiwKKwkuaWQgPSAwLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhICA9ICZtYWNrZXJlbF9sZWRzX3BkYXRhLAorCX0sCit9OworCisvKiBGU0kgKi8KKyNkZWZpbmUgSVJRX0ZTSSBldnQyaXJxKDB4MTg0MCkKK3N0YXRpYyBpbnQgX19mc2lfc2V0X3JvdW5kX3JhdGUoc3RydWN0IGNsayAqY2xrLCBsb25nIHJhdGUsIGludCBlbmFibGUpCit7CisJaW50IHJldDsKKworCWlmIChyYXRlIDw9IDApCisJCXJldHVybiAwOworCisJaWYgKCFlbmFibGUpIHsKKwkJY2xrX2Rpc2FibGUoY2xrKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0ID0gY2xrX3NldF9yYXRlKGNsaywgY2xrX3JvdW5kX3JhdGUoY2xrLCByYXRlKSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gY2xrX2VuYWJsZShjbGspOworfQorCitzdGF0aWMgaW50IGZzaV9zZXRfcmF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBpc19wb3J0YSwgaW50IHJhdGUsIGludCBlbmFibGUpCit7CisJc3RydWN0IGNsayAqZnNpYl9jbGs7CisJc3RydWN0IGNsayAqZmRpdl9jbGsgPSAmc2g3MzcyX2ZzaWRpdmJfY2xrOworCWxvbmcgZnNpYl9yYXRlID0gMDsKKwlsb25nIGZkaXZfcmF0ZSA9IDA7CisJaW50IGFja21kX2JwZm1kOworCWludCByZXQ7CisKKwkvKiBGU0lBIGlzIHNsYXZlIG1vZGUuIG5vdGhpbmcgdG8gZG8gaGVyZSAqLworCWlmIChpc19wb3J0YSkKKwkJcmV0dXJuIDA7CisKKwkvKiBjbG9jayBzdGFydCAqLworCXN3aXRjaCAocmF0ZSkgeworCWNhc2UgNDQxMDA6CisJCWZzaWJfcmF0ZQk9IHJhdGUgKiAyNTY7CisJCWFja21kX2JwZm1kCT0gU0hfRlNJX0FDS01EXzI1NiB8IFNIX0ZTSV9CUEZNRF82NDsKKwkJYnJlYWs7CisJY2FzZSA0ODAwMDoKKwkJZnNpYl9yYXRlCT0gODU0MjgwMDA7IC8qIGFyb3VuZCA0OGtIeiB4IDI1NiB4IDcgKi8KKwkJZmRpdl9yYXRlCT0gcmF0ZSAqIDI1NjsKKwkJYWNrbWRfYnBmbWQJPSBTSF9GU0lfQUNLTURfMjU2IHwgU0hfRlNJX0JQRk1EXzY0OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcl9lcnIoInVuc3VwcG9ydGVkIHJhdGUgaW4gRlNJMiBwb3J0IEJcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBGU0kgQiBzZXR0aW5nICovCisJZnNpYl9jbGsgPSBjbGtfZ2V0KGRldiwgImlja2IiKTsKKwlpZiAoSVNfRVJSKGZzaWJfY2xrKSkKKwkJcmV0dXJuIC1FSU87CisKKwkvKiBmc2liICovCisJcmV0ID0gX19mc2lfc2V0X3JvdW5kX3JhdGUoZnNpYl9jbGssIGZzaWJfcmF0ZSwgZW5hYmxlKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBmc2lfc2V0X3JhdGVfZW5kOworCisJLyogRlNJIERJViAqLworCXJldCA9IF9fZnNpX3NldF9yb3VuZF9yYXRlKGZkaXZfY2xrLCBmZGl2X3JhdGUsIGVuYWJsZSk7CisJaWYgKHJldCA8IDApIHsKKwkJLyogZGlzYWJsZSBGU0kgQiAqLworCQlpZiAoZW5hYmxlKQorCQkJX19mc2lfc2V0X3JvdW5kX3JhdGUoZnNpYl9jbGssIGZzaWJfcmF0ZSwgMCk7CisJCWdvdG8gZnNpX3NldF9yYXRlX2VuZDsKKwl9CisKKwlyZXQgPSBhY2ttZF9icGZtZDsKKworZnNpX3NldF9yYXRlX2VuZDoKKwljbGtfcHV0KGZzaWJfY2xrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IHNoX2ZzaV9wbGF0Zm9ybV9pbmZvIGZzaV9pbmZvID0geworCS5wb3J0YV9mbGFncyA9CVNIX0ZTSV9CUlNfSU5WCQl8CisJCQlTSF9GU0lfT1VUX1NMQVZFX01PREUJfAorCQkJU0hfRlNJX0lOX1NMQVZFX01PREUJfAorCQkJU0hfRlNJX09GTVQoUENNKQl8CisJCQlTSF9GU0lfSUZNVChQQ00pLAorCisJLnBvcnRiX2ZsYWdzID0JU0hfRlNJX0JSU19JTlYJfAorCQkJU0hfRlNJX0JSTV9JTlYJfAorCQkJU0hfRlNJX0xSU19JTlYJfAorCQkJU0hfRlNJX09GTVQoU1BESUYpLAorCisJLnNldF9yYXRlID0gZnNpX3NldF9yYXRlLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBmc2lfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkubmFtZQk9ICJGU0kiLAorCQkuc3RhcnQJPSAweEZFM0MwMDAwLAorCQkuZW5kCT0gMHhGRTNDMDQwMCAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQgID0gSVJRX0ZTSSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBmc2lfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaF9mc2kyIiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGZzaV9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IGZzaV9yZXNvdXJjZXMsCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmZnNpX2luZm8sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGZzaV9hazQ2NDNfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaF9mc2kyX2FfYWs0NjQzIiwKK307CisKKy8qCisgKiBUaGUgY2FyZCBkZXRlY3QgcGluIG9mIHRoZSB0b3AgU0QvTU1DIHNsb3QgKENONykgaXMgYWN0aXZlIGxvdyBhbmQgaXMKKyAqIGNvbm5lY3RlZCB0byBHUElPIEEyMiBvZiBTSDczNzIgKEdQSU9fUE9SVDQxKS4KKyAqLworc3RhdGljIGludCBzbG90X2NuN19nZXRfY2Qoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlpZiAoZ3Bpb19pc192YWxpZChHUElPX1BPUlQ0MSkpCisJCXJldHVybiAhZ3Bpb19nZXRfdmFsdWUoR1BJT19QT1JUNDEpOworCWVsc2UKKwkJcmV0dXJuIC1FTlhJTzsKK30KKworLyogU0RISTAgKi8KK3N0YXRpYyBzdHJ1Y3Qgc2hfbW9iaWxlX3NkaGlfaW5mbyBzZGhpMF9pbmZvID0geworCS5kbWFfc2xhdmVfdHgJPSBTSERNQV9TTEFWRV9TREhJMF9UWCwKKwkuZG1hX3NsYXZlX3J4CT0gU0hETUFfU0xBVkVfU0RISTBfUlgsCisJLnRtaW9fY2Fwcwk9IE1NQ19DQVBfU0RfSElHSFNQRUVELAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzZGhpMF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5uYW1lCT0gIlNESEkwIiwKKwkJLnN0YXJ0CT0gMHhlNjg1MDAwMCwKKwkJLmVuZAk9IDB4ZTY4NTAxZmYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBldnQyaXJxKDB4MGUwMCkgLyogU0RISTAgKi8sCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzZGhpMF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoX21vYmlsZV9zZGhpIiwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc2RoaTBfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBzZGhpMF9yZXNvdXJjZXMsCisJLmlkCQk9IDAsCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmc2RoaTBfaW5mbywKKwl9LAorfTsKKworI2lmICFkZWZpbmVkKENPTkZJR19NTUNfU0hfTU1DSUYpCisvKiBTREhJMSAqLworc3RhdGljIHN0cnVjdCBzaF9tb2JpbGVfc2RoaV9pbmZvIHNkaGkxX2luZm8gPSB7CisJLmRtYV9zbGF2ZV90eAk9IFNIRE1BX1NMQVZFX1NESEkxX1RYLAorCS5kbWFfc2xhdmVfcngJPSBTSERNQV9TTEFWRV9TREhJMV9SWCwKKwkudG1pb19vY3JfbWFzawk9IE1NQ19WRERfMTY1XzE5NSwKKwkudG1pb19mbGFncwk9IFRNSU9fTU1DX1dSUFJPVEVDVF9ESVNBQkxFLAorCS50bWlvX2NhcHMJPSBNTUNfQ0FQX1NEX0hJR0hTUEVFRCB8CisJCQkgIE1NQ19DQVBfTkVFRFNfUE9MTCwKKwkuZ2V0X2NkCQk9IHNsb3RfY243X2dldF9jZCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2RoaTFfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkubmFtZQk9ICJTREhJMSIsCisJCS5zdGFydAk9IDB4ZTY4NjAwMDAsCisJCS5lbmQJPSAweGU2ODYwMWZmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gZXZ0MmlycSgweDBlODApLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2RoaTFfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaF9tb2JpbGVfc2RoaSIsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNkaGkxX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gc2RoaTFfcmVzb3VyY2VzLAorCS5pZAkJPSAxLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnNkaGkxX2luZm8sCisJfSwKK307CisjZW5kaWYKKworLyogU0RISTIgKi8KK3N0YXRpYyBzdHJ1Y3Qgc2hfbW9iaWxlX3NkaGlfaW5mbyBzZGhpMl9pbmZvID0geworCS5kbWFfc2xhdmVfdHgJPSBTSERNQV9TTEFWRV9TREhJMl9UWCwKKwkuZG1hX3NsYXZlX3J4CT0gU0hETUFfU0xBVkVfU0RISTJfUlgsCisJLnRtaW9fZmxhZ3MJPSBUTUlPX01NQ19XUlBST1RFQ1RfRElTQUJMRSwKKwkudG1pb19jYXBzCT0gTU1DX0NBUF9TRF9ISUdIU1BFRUQgfAorCQkJICBNTUNfQ0FQX05FRURTX1BPTEwsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHNkaGkyX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLm5hbWUJPSAiU0RISTIiLAorCQkuc3RhcnQJPSAweGU2ODcwMDAwLAorCQkuZW5kCT0gMHhlNjg3MDFmZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IGV2dDJpcnEoMHgxMjAwKSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNkaGkyX2RldmljZSA9IHsKKwkubmFtZQk9ICJzaF9tb2JpbGVfc2RoaSIsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNkaGkyX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gc2RoaTJfcmVzb3VyY2VzLAorCS5pZAkJPSAyLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnNkaGkyX2luZm8sCisJfSwKK307CisKKy8qIFNIX01NQ0lGICovCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHNoX21tY2lmX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLm5hbWUJPSAiTU1DSUYiLAorCQkuc3RhcnQJPSAweEU2QkQwMDAwLAorCQkuZW5kCT0gMHhFNkJEMDBGRiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS8qIE1NQyBFUlIgKi8KKwkJLnN0YXJ0CT0gZXZ0MmlycSgweDFhYzApLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCVsyXSA9IHsKKwkJLyogTU1DIE5PUiAqLworCQkuc3RhcnQJPSBldnQyaXJxKDB4MWFlMCksCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHNoX21tY2lmX3BsYXRfZGF0YSBzaF9tbWNpZl9wbGF0ID0geworCS5zdXBfcGNsawk9IDAsCisJLm9jcgkJPSBNTUNfVkREXzE2NV8xOTUgfCBNTUNfVkREXzMyXzMzIHwgTU1DX1ZERF8zM18zNCwKKwkuY2FwcwkJPSBNTUNfQ0FQXzRfQklUX0RBVEEgfAorCQkJICBNTUNfQ0FQXzhfQklUX0RBVEEgfAorCQkJICBNTUNfQ0FQX05FRURTX1BPTEwsCisJLmdldF9jZAkJPSBzbG90X2NuN19nZXRfY2QsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzaF9tbWNpZl9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoX21tY2lmIiwKKwkuaWQJCT0gMCwKKwkuZGV2CQk9IHsKKwkJLmRtYV9tYXNrCQk9IE5VTEwsCisJCS5jb2hlcmVudF9kbWFfbWFzawk9IDB4ZmZmZmZmZmYsCisJCS5wbGF0Zm9ybV9kYXRhCQk9ICZzaF9tbWNpZl9wbGF0LAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNoX21tY2lmX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gc2hfbW1jaWZfcmVzb3VyY2VzLAorfTsKKworCitzdGF0aWMgaW50IG1hY2tlcmVsX2NhbWVyYV9hZGQoc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsLCBzdHJ1Y3QgZGV2aWNlICpkZXYpOworc3RhdGljIHZvaWQgbWFja2VyZWxfY2FtZXJhX2RlbChzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICppY2wpOworCitzdGF0aWMgaW50IGNhbWVyYV9zZXRfY2FwdHVyZShzdHJ1Y3Qgc29jX2NhbWVyYV9wbGF0Zm9ybV9pbmZvICppbmZvLAorCQkJICAgICAgaW50IGVuYWJsZSkKK3sKKwlyZXR1cm4gMDsgLyogY2FtZXJhIHNlbnNvciBhbHdheXMgZW5hYmxlZCAqLworfQorCitzdGF0aWMgc3RydWN0IHNvY19jYW1lcmFfcGxhdGZvcm1faW5mbyBjYW1lcmFfaW5mbyA9IHsKKwkuZm9ybWF0X25hbWUgPSAiVVlWWSIsCisJLmZvcm1hdF9kZXB0aCA9IDE2LAorCS5mb3JtYXQgPSB7CisJCS5jb2RlID0gVjRMMl9NQlVTX0ZNVF9VWVZZOF8yWDgsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NNUFRFMTcwTSwKKwkJLmZpZWxkID0gVjRMMl9GSUVMRF9OT05FLAorCQkud2lkdGggPSA2NDAsCisJCS5oZWlnaHQgPSA0ODAsCisJfSwKKwkuYnVzX3BhcmFtID0gU09DQU1fUENMS19TQU1QTEVfUklTSU5HIHwgU09DQU1fSFNZTkNfQUNUSVZFX0hJR0ggfAorCVNPQ0FNX1ZTWU5DX0FDVElWRV9ISUdIIHwgU09DQU1fTUFTVEVSIHwgU09DQU1fREFUQVdJRFRIXzggfAorCVNPQ0FNX0RBVEFfQUNUSVZFX0hJR0gsCisJLnNldF9jYXB0dXJlID0gY2FtZXJhX3NldF9jYXB0dXJlLAorfTsKKworc3RhdGljIHN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgY2FtZXJhX2xpbmsgPSB7CisJLmJ1c19pZAkJPSAwLAorCS5hZGRfZGV2aWNlCT0gbWFja2VyZWxfY2FtZXJhX2FkZCwKKwkuZGVsX2RldmljZQk9IG1hY2tlcmVsX2NhbWVyYV9kZWwsCisJLm1vZHVsZV9uYW1lCT0gInNvY19jYW1lcmFfcGxhdGZvcm0iLAorCS5wcml2CQk9ICZjYW1lcmFfaW5mbywKK307CisKK3N0YXRpYyB2b2lkIGR1bW15X3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQoreworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjYW1lcmFfZGV2aWNlID0geworCS5uYW1lCQk9ICJzb2NfY2FtZXJhX3BsYXRmb3JtIiwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmY2FtZXJhX2luZm8sCisJCS5yZWxlYXNlCT0gZHVtbXlfcmVsZWFzZSwKKwl9LAorfTsKKworc3RhdGljIGludCBtYWNrZXJlbF9jYW1lcmFfYWRkKHN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCwKKwkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaWYgKGljbCAhPSAmY2FtZXJhX2xpbmspCisJCXJldHVybiAtRU5PREVWOworCisJY2FtZXJhX2luZm8uZGV2ID0gZGV2OworCisJcmV0dXJuIHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmY2FtZXJhX2RldmljZSk7Cit9CisKK3N0YXRpYyB2b2lkIG1hY2tlcmVsX2NhbWVyYV9kZWwoc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsKQoreworCWlmIChpY2wgIT0gJmNhbWVyYV9saW5rKQorCQlyZXR1cm47CisKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcigmY2FtZXJhX2RldmljZSk7CisJbWVtc2V0KCZjYW1lcmFfZGV2aWNlLmRldi5rb2JqLCAwLAorCSAgICAgICBzaXplb2YoY2FtZXJhX2RldmljZS5kZXYua29iaikpOworfQorCitzdGF0aWMgc3RydWN0IHNoX21vYmlsZV9jZXVfaW5mbyBzaF9tb2JpbGVfY2V1X2luZm8gPSB7CisJLmZsYWdzID0gU0hfQ0VVX0ZMQUdfVVNFXzhCSVRfQlVTLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBjZXVfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkubmFtZQk9ICJDRVUiLAorCQkuc3RhcnQJPSAweGZlOTEwMDAwLAorCQkuZW5kCT0gMHhmZTkxMDA5ZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydCAgPSBpbnRjc19ldnQyaXJxKDB4ODgwKSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJWzJdID0geworCQkvKiBwbGFjZSBob2xkZXIgZm9yIGNvbnRpZ3VvdXMgbWVtb3J5ICovCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNldV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoX21vYmlsZV9jZXUiLAorCS5pZCAgICAgICAgICAgICA9IDAsIC8qICJjZXUwIiBjbG9jayAqLworCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShjZXVfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBjZXVfcmVzb3VyY2VzLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZzaF9tb2JpbGVfY2V1X2luZm8sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG1hY2tlcmVsX2NhbWVyYSA9IHsKKwkubmFtZQk9ICJzb2MtY2FtZXJhLXBkcnYiLAorCS5pZAk9IDAsCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmY2FtZXJhX2xpbmssCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICptYWNrZXJlbF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmbm9yX2ZsYXNoX2RldmljZSwKKwkmc21jOTExeF9kZXZpY2UsCisJJmxjZGNfZGV2aWNlLAorCSZ1c2IxX2hvc3RfZGV2aWNlLAorCSZsZWRzX2RldmljZSwKKwkmZnNpX2RldmljZSwKKwkmZnNpX2FrNDY0M19kZXZpY2UsCisJJnNkaGkwX2RldmljZSwKKyNpZiAhZGVmaW5lZChDT05GSUdfTU1DX1NIX01NQ0lGKQorCSZzZGhpMV9kZXZpY2UsCisjZW5kaWYKKwkmc2RoaTJfZGV2aWNlLAorCSZzaF9tbWNpZl9kZXZpY2UsCisJJmNldV9kZXZpY2UsCisJJm1hY2tlcmVsX2NhbWVyYSwKKwkmaGRtaV9sY2RjX2RldmljZSwKKwkmaGRtaV9kZXZpY2UsCit9OworCisvKiBLZXlwYWQgSW5pdGlhbGl6YXRpb24gKi8KKyNkZWZpbmUgS0VZUEFEX0JVVFRPTihldl90eXBlLCBldl9jb2RlLCBhY3RfbG93KSBcCit7CQkJCQkJCQlcCisJLnR5cGUJCT0gZXZfdHlwZSwJCQkJXAorCS5jb2RlCQk9IGV2X2NvZGUsCQkJCVwKKwkuYWN0aXZlX2xvdwk9IGFjdF9sb3csCQkJCVwKK30KKworI2RlZmluZSBLRVlQQURfQlVUVE9OX0xPVyhldmVudF9jb2RlKSBLRVlQQURfQlVUVE9OKEVWX0tFWSwgZXZlbnRfY29kZSwgMSkKKworc3RhdGljIHN0cnVjdCB0Y2E2NDE2X2J1dHRvbiBtYWNrZXJlbF9ncGlvX2tleXNbXSA9IHsKKwlLRVlQQURfQlVUVE9OX0xPVyhLRVlfSE9NRSksCisJS0VZUEFEX0JVVFRPTl9MT1coS0VZX01FTlUpLAorCUtFWVBBRF9CVVRUT05fTE9XKEtFWV9CQUNLKSwKKwlLRVlQQURfQlVUVE9OX0xPVyhLRVlfUE9XRVIpLAorfTsKKworc3RhdGljIHN0cnVjdCB0Y2E2NDE2X2tleXNfcGxhdGZvcm1fZGF0YSBtYWNrZXJlbF90Y2E2NDE2X2tleXNfaW5mbyA9IHsKKwkuYnV0dG9ucwk9IG1hY2tlcmVsX2dwaW9fa2V5cywKKwkubmJ1dHRvbnMJPSBBUlJBWV9TSVpFKG1hY2tlcmVsX2dwaW9fa2V5cyksCisJLnJlcAkJPSAxLAorCS51c2VfcG9sbGluZwk9IDAsCisJLnBpbm1hc2sJPSAweDAwMEYsCit9OworCisvKiBJMkMgKi8KKyNkZWZpbmUgSVJROSBldnQyaXJxKDB4MDMyMCkKKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBpMmMwX2RldmljZXNbXSA9IHsKKwl7CisJCUkyQ19CT0FSRF9JTkZPKCJhazQ2NDMiLCAweDEzKSwKKwl9LAorCS8qIEtleXBhZCAqLworCXsKKwkJSTJDX0JPQVJEX0lORk8oInRjYTY0MDgta2V5cyIsIDB4MjApLAorCQkucGxhdGZvcm1fZGF0YSA9ICZtYWNrZXJlbF90Y2E2NDE2X2tleXNfaW5mbywKKwkJLmlycSA9IElSUTksCisJfSwKK307CisKKyNkZWZpbmUgSVJRMjEgZXZ0MmlycSgweDMyYTApCisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gaTJjMV9kZXZpY2VzW10gPSB7CisJLyogQWNjZWxlcm9tZXRlciAqLworCXsKKwkJSTJDX0JPQVJEX0lORk8oImFkeGwzNHgiLCAweDUzKSwKKwkJLmlycSA9IElSUTIxLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIG1hY2tlcmVsX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0geworCS8qIGNyZWF0ZSBhIDE6MSBlbnRpdHkgbWFwIGZvciAweGU2eHh4eHh4CisJICogdXNlZCBieSBDUEdBLCBJTlRDIGFuZCBQRkMuCisJICovCisJeworCQkudmlydHVhbAk9IDB4ZTYwMDAwMDAsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbigweGU2MDAwMDAwKSwKKwkJLmxlbmd0aAkJPSAyNTYgPDwgMjAsCisJCS50eXBlCQk9IE1UX0RFVklDRV9OT05TSEFSRUQKKwl9LAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IG1hY2tlcmVsX21hcF9pbyh2b2lkKQoreworCWlvdGFibGVfaW5pdChtYWNrZXJlbF9pb19kZXNjLCBBUlJBWV9TSVpFKG1hY2tlcmVsX2lvX2Rlc2MpKTsKKworCS8qIHNldHVwIGVhcmx5IGRldmljZXMgYW5kIGNvbnNvbGUgaGVyZSBhcyB3ZWxsICovCisJc2g3MzcyX2FkZF9lYXJseV9kZXZpY2VzKCk7CisJc2htb2JpbGVfc2V0dXBfY29uc29sZSgpOworfQorCisjZGVmaW5lIEdQSU9fUE9SVDlDUgkweEU2MDUxMDA5CisjZGVmaW5lIEdQSU9fUE9SVDEwQ1IJMHhFNjA1MTAwQQorI2RlZmluZSBTUkNSNAkJMHhlNjE1ODBiYworI2RlZmluZSBVU0NDUjEJCTB4RTYwNTgxNDQKK3N0YXRpYyB2b2lkIF9faW5pdCBtYWNrZXJlbF9pbml0KHZvaWQpCit7CisJdTMyIHNyY3I0OworCXN0cnVjdCBjbGsgKmNsazsKKworCXNoNzM3Ml9waW5tdXhfaW5pdCgpOworCisJLyogZW5hYmxlIFNDSUZBMCAqLworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1NDSUZBMF9UWEQsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1NDSUZBMF9SWEQsIE5VTEwpOworCisJLyogZW5hYmxlIFNNU0M5MTFYICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fQ1M1QSwJTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fSVJRNl8zOSwJTlVMTCk7CisKKwkvKiBMQ0RDICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDIzLCAgIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQyMiwgICBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0REMjEsICAgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDIwLCAgIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQxOSwgICBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0REMTgsICAgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDE3LCAgIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQxNiwgICBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0REMTUsICAgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDE0LCAgIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQxMywgICBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0REMTIsICAgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDExLCAgIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQxMCwgICBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0REOSwgICAgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDgsICAgIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQ3LCAgICBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0RENiwgICAgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDUsICAgIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQ0LCAgICBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0REMywgICAgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDIsICAgIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQxLCAgICBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0REMCwgICAgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERElTUCwgIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDRERDSywgICBOVUxMKTsKKworCWdwaW9fcmVxdWVzdChHUElPX1BPUlQzMSwgTlVMTCk7IC8qIGJhY2tsaWdodCAqLworCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BPUlQzMSwgMSk7CisKKwlncGlvX3JlcXVlc3QoR1BJT19QT1JUMTUxLCBOVUxMKTsgLyogTENERE9OICovCisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUE9SVDE1MSwgMSk7CisKKwkvKiBVU0IgZW5hYmxlICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fVkJVUzBfMSwgICAgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fSURJTl8xXzE4LCAgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fUFdFTl8xXzExNSwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fT1ZDTl8xXzExNCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fRVhUTFBfMSwgICAgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fT1ZDTjJfMSwgICAgTlVMTCk7CisKKwkvKiBzZXR1cCBVU0IgcGh5ICovCisJX19yYXdfd3JpdGV3KDB4OGEwYSwgMHhFNjA1ODEzMCk7CS8qIFVTQkNSNCAqLworCisJLyogZW5hYmxlIEZTSTIgcG9ydCBBIChhazQ2NDMpICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fRlNJQUlCVCwJTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fRlNJQUlMUiwJTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fRlNJQUlTTEQsCU5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0ZTSUFPU0xELAlOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19QT1JUMTYxLAlOVUxMKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QT1JUMTYxLCAwKTsgLyogc2xhdmUgKi8KKworCWdwaW9fcmVxdWVzdChHUElPX1BPUlQ5LCAgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fUE9SVDEwLCBOVUxMKTsKKwlncGlvX25vX2RpcmVjdGlvbihHUElPX1BPUlQ5Q1IpOyAgLyogRlNJQU9CVCBuZWVkcyBubyBkaXJlY3Rpb24gKi8KKwlncGlvX25vX2RpcmVjdGlvbihHUElPX1BPUlQxMENSKTsgLyogRlNJQU9MUiBuZWVkcyBubyBkaXJlY3Rpb24gKi8KKworCWludGNfc2V0X3ByaW9yaXR5KElSUV9GU0ksIDMpOyAvKiBpcnEgcHJpb3JpdHkgRlNJKDMpID4gU01TQzkxMVgoMikgKi8KKworCS8qIHNldHVwIEZTSTIgcG9ydCBCIChIRE1JKSAqLworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0ZTSUJDSywgTlVMTCk7CisJX19yYXdfd3JpdGV3KF9fcmF3X3JlYWR3KFVTQ0NSMSkgJiB+KDEgPDwgNiksIFVTQ0NSMSk7IC8qIHVzZSBTUERJRiAqLworCisJLyogc2V0IFNQVTIgY2xvY2sgdG8gMTE5LjYgTUh6ICovCisJY2xrID0gY2xrX2dldChOVUxMLCAic3B1X2NsayIpOworCWlmICghSVNfRVJSKGNsaykpIHsKKwkJY2xrX3NldF9yYXRlKGNsaywgY2xrX3JvdW5kX3JhdGUoY2xrLCAxMTk2MDAwMDApKTsKKwkJY2xrX3B1dChjbGspOworCX0KKworCS8qIGVuYWJsZSBLZXlwYWQgKi8KKwlncGlvX3JlcXVlc3QoR1BJT19GTl9JUlE5XzQyLAlOVUxMKTsKKwlzZXRfaXJxX3R5cGUoSVJROSwgSVJRX1RZUEVfTEVWRUxfSElHSCk7CisKKwkvKiBlbmFibGUgQWNjZWxlcm9tZXRlciAqLworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0lSUTIxLAlOVUxMKTsKKwlzZXRfaXJxX3R5cGUoSVJRMjEsIElSUV9UWVBFX0xFVkVMX0hJR0gpOworCisJLyogZW5hYmxlIFNESEkwICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fU0RISUNEMCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fU0RISVdQMCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fU0RISUNNRDAsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1NESElDTEswLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9TREhJRDBfMywgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fU0RISUQwXzIsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1NESElEMF8xLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9TREhJRDBfMCwgTlVMTCk7CisKKyNpZiAhZGVmaW5lZChDT05GSUdfTU1DX1NIX01NQ0lGKQorCS8qIGVuYWJsZSBTREhJMSAqLworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1NESElDTUQxLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9TREhJQ0xLMSwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fU0RISUQxXzMsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1NESElEMV8yLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9TREhJRDFfMSwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fU0RISUQxXzAsIE5VTEwpOworI2VuZGlmCisJLyogY2FyZCBkZXRlY3QgcGluIGZvciBNTUMgc2xvdCAoQ043KSAqLworCWdwaW9fcmVxdWVzdChHUElPX1BPUlQ0MSwgTlVMTCk7CisJZ3Bpb19kaXJlY3Rpb25faW5wdXQoR1BJT19QT1JUNDEpOworCisJLyogZW5hYmxlIFNESEkyICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fU0RISUNNRDIsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1NESElDTEsyLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9TREhJRDJfMywgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fU0RISUQyXzIsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1NESElEMl8xLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9TREhJRDJfMCwgTlVMTCk7CisKKwkvKiBNTUNJRiAqLworCWdwaW9fcmVxdWVzdChHUElPX0ZOX01NQ0QwXzAsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX01NQ0QwXzEsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX01NQ0QwXzIsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX01NQ0QwXzMsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX01NQ0QwXzQsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX01NQ0QwXzUsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX01NQ0QwXzYsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX01NQ0QwXzcsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX01NQ0NNRDAsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX01NQ0NMSzAsIE5VTEwpOworCisJLyogZW5hYmxlIEdQUyBtb2R1bGUgKEdULTcyMEYpICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fU0NJRkEyX1RYRDEsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1NDSUZBMl9SWEQxLCBOVUxMKTsKKworCS8qIENFVSAqLworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19DTEssIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19WRCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fVklPX0hELCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9WSU9fRklFTEQsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19DS08sIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19ENywgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fVklPX0Q2LCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9WSU9fRDUsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19ENCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fVklPX0QzLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9WSU9fRDIsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19EMSwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fVklPX0QwLCBOVUxMKTsKKworCS8qIEhETUkgKi8KKwlncGlvX3JlcXVlc3QoR1BJT19GTl9IRE1JX0hQRCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fSERNSV9DRUMsIE5VTEwpOworCisJLyogUmVzZXQgSERNSSwgbXVzdCBiZSBoZWxkIGF0IGxlYXN0IG9uZSBFWFRBTFIgKDMyNzY4SHopIHBlcmlvZCAqLworCXNyY3I0ID0gX19yYXdfcmVhZGwoU1JDUjQpOworCV9fcmF3X3dyaXRlbChzcmNyNCB8ICgxIDw8IDEzKSwgU1JDUjQpOworCXVkZWxheSg1MCk7CisJX19yYXdfd3JpdGVsKHNyY3I0ICYgfigxIDw8IDEzKSwgU1JDUjQpOworCisJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgaTJjMF9kZXZpY2VzLAorCQkJCUFSUkFZX1NJWkUoaTJjMF9kZXZpY2VzKSk7CisJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMSwgaTJjMV9kZXZpY2VzLAorCQkJCUFSUkFZX1NJWkUoaTJjMV9kZXZpY2VzKSk7CisKKwlzaDczNzJfYWRkX3N0YW5kYXJkX2RldmljZXMoKTsKKworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKG1hY2tlcmVsX2RldmljZXMsIEFSUkFZX1NJWkUobWFja2VyZWxfZGV2aWNlcykpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgbWFja2VyZWxfdGltZXJfaW5pdCh2b2lkKQoreworCXNoNzM3Ml9jbG9ja19pbml0KCk7CisJc2htb2JpbGVfdGltZXIuaW5pdCgpOworCisJLyogRXh0ZXJuYWwgY2xvY2sgc291cmNlICovCisJY2xrX3NldF9yYXRlKCZzaDczNzJfZHZfY2xraV9jbGssIDI3MDAwMDAwKTsKK30KKworc3RhdGljIHN0cnVjdCBzeXNfdGltZXIgbWFja2VyZWxfdGltZXIgPSB7CisJLmluaXQJCT0gbWFja2VyZWxfdGltZXJfaW5pdCwKK307CisKK01BQ0hJTkVfU1RBUlQoTUFDS0VSRUwsICJtYWNrZXJlbCIpCisJLm1hcF9pbwkJPSBtYWNrZXJlbF9tYXBfaW8sCisJLmluaXRfaXJxCT0gc2g3MzcyX2luaXRfaXJxLAorCS5oYW5kbGVfaXJxCT0gc2htb2JpbGVfaGFuZGxlX2lycV9pbnRjLAorCS5pbml0X21hY2hpbmUJPSBtYWNrZXJlbF9pbml0LAorCS50aW1lcgkJPSAmbWFja2VyZWxfdGltZXIsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1zaDczNjcuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2stc2g3MzY3LmMKaW5kZXggOWY3ODcyOS4uNmIxODZhZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1zaDczNjcuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXNoNzM2Ny5jCkBAIC0yMCw4ICsyMCw4IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9zaF9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGtkZXYuaD4KICNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgotI2luY2x1ZGUgPGFzbS9jbGtkZXYuaD4KIAogLyogU0g3MzY3IHJlZ2lzdGVycyAqLwogI2RlZmluZSBSVEZSUUNSICAgIDB4ZTYxNTAwMDAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2stc2g3MzcyLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXNoNzM3Mi5jCmluZGV4IDNhYTAyNjAuLjlhYThkNjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2stc2g3MzcyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1zaDczNzIuYwpAQCAtMjAsOCArMjAsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvc2hfY2xrLmg+CisjaW5jbHVkZSA8bGludXgvY2xrZGV2Lmg+CiAjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KLSNpbmNsdWRlIDxhc20vY2xrZGV2Lmg+CiAKIC8qIFNINzM3MiByZWdpc3RlcnMgKi8KICNkZWZpbmUgRlJRQ1JBCQkweGU2MTUwMDAwCkBAIC01MDcsNyArNTA3LDcgQEAKICAgICAgICBNU1RQMjIzLAogICAgICAgIE1TVFAyMDcsIE1TVFAyMDYsIE1TVFAyMDQsIE1TVFAyMDMsIE1TVFAyMDIsIE1TVFAyMDEsIE1TVFAyMDAsCiAgICAgICAgTVNUUDMyOSwgTVNUUDMyOCwgTVNUUDMyMywgTVNUUDMyMiwgTVNUUDMxNCwgTVNUUDMxMywgTVNUUDMxMiwKLSAgICAgICBNU1RQNDE1LCBNU1RQNDEzLCBNU1RQNDExLCBNU1RQNDEwLCBNU1RQNDA2LCBNU1RQNDAzLAorICAgICAgIE1TVFA0MjMsIE1TVFA0MTUsIE1TVFA0MTMsIE1TVFA0MTEsIE1TVFA0MTAsIE1TVFA0MDYsIE1TVFA0MDMsCiAgICAgICAgTVNUUF9OUiB9OwogCiAjZGVmaW5lIE1TVFAoX3BhcmVudCwgX3JlZywgX2JpdCwgX2ZsYWdzKSBcCkBAIC01NDMsNiArNTQzLDcgQEAKIAlbTVNUUDMxNF0gPSBNU1RQKCZkaXY0X2Nsa3NbRElWNF9IUF0sIFNNU1RQQ1IzLCAxNCwgMCksIC8qIFNESEkwICovCiAJW01TVFAzMTNdID0gTVNUUCgmZGl2NF9jbGtzW0RJVjRfSFBdLCBTTVNUUENSMywgMTMsIDApLCAvKiBTREhJMSAqLwogCVtNU1RQMzEyXSA9IE1TVFAoJmRpdjRfY2xrc1tESVY0X0hQXSwgU01TVFBDUjMsIDEyLCAwKSwgLyogTU1DICovCisJW01TVFA0MjNdID0gTVNUUCgmZGl2NF9jbGtzW0RJVjRfQl0sIFNNU1RQQ1I0LCAyMywgMCksIC8qIERTSVRYMSAqLwogCVtNU1RQNDE1XSA9IE1TVFAoJmRpdjRfY2xrc1tESVY0X0hQXSwgU01TVFBDUjQsIDE1LCAwKSwgLyogU0RISTIgKi8KIAlbTVNUUDQxM10gPSBNU1RQKCZwbGxjMV9kaXYyX2NsaywgU01TVFBDUjQsIDEzLCAwKSwgLyogSERNSSAqLwogCVtNU1RQNDExXSA9IE1TVFAoJmRpdjZfY2xrc1tESVY2X1NVQl0sIFNNU1RQQ1I0LCAxMSwgMCksIC8qIElJQzMgKi8KQEAgLTU5Niw5ICs1OTcsMTAgQEAKIAlDTEtERVZfQ09OX0lEKCJzcHVfY2xrIiwgJmRpdjZfY2xrc1tESVY2X1NQVV0pLAogCUNMS0RFVl9DT05fSUQoInZvdV9jbGsiLCAmZGl2Nl9jbGtzW0RJVjZfVk9VXSksCiAJQ0xLREVWX0NPTl9JRCgiaGRtaV9jbGsiLCAmZGl2Nl9yZXBhcmVudF9jbGtzW0RJVjZfSERNSV0pLAotCUNMS0RFVl9DT05fSUQoImRzaXRfY2xrIiwgJmRpdjZfY2xrc1tESVY2X0RTSVRdKSwKLQlDTEtERVZfQ09OX0lEKCJkc2kwcF9jbGsiLCAmZGl2Nl9jbGtzW0RJVjZfRFNJMFBdKSwKLQlDTEtERVZfQ09OX0lEKCJkc2kxcF9jbGsiLCAmZGl2Nl9jbGtzW0RJVjZfRFNJMVBdKSwKKwlDTEtERVZfSUNLX0lEKCJkc2l0X2NsayIsICJzaC1taXBpLWRzaS4wIiwgJmRpdjZfY2xrc1tESVY2X0RTSVRdKSwKKwlDTEtERVZfSUNLX0lEKCJkc2l0X2NsayIsICJzaC1taXBpLWRzaS4xIiwgJmRpdjZfY2xrc1tESVY2X0RTSVRdKSwKKwlDTEtERVZfSUNLX0lEKCJkc2kwcF9jbGsiLCAic2gtbWlwaS1kc2kuMCIsICZkaXY2X2Nsa3NbRElWNl9EU0kwUF0pLAorCUNMS0RFVl9JQ0tfSUQoImRzaTFwX2NsayIsICJzaC1taXBpLWRzaS4xIiwgJmRpdjZfY2xrc1tESVY2X0RTSTFQXSksCiAKIAkvKiBNU1RQMzIgY2xvY2tzICovCiAJQ0xLREVWX0RFVl9JRCgiaTJjLXNoX21vYmlsZS4yIiwgJm1zdHBfY2xrc1tNU1RQMDAxXSksIC8qIElJQzIgKi8KQEAgLTYxMCw3ICs2MTIsNyBAQAogCUNMS0RFVl9ERVZfSUQoInNoLW1vYmlsZS1jc2kyLjAiLCAmbXN0cF9jbGtzW01TVFAxMjZdKSwgLyogQ1NJMiAqLwogCUNMS0RFVl9ERVZfSUQoInNoX3RtdS4wIiwgJm1zdHBfY2xrc1tNU1RQMTI1XSksIC8qIFRNVTAwICovCiAJQ0xLREVWX0RFVl9JRCgic2hfdG11LjEiLCAmbXN0cF9jbGtzW01TVFAxMjVdKSwgLyogVE1VMDEgKi8KLQlDTEtERVZfREVWX0lEKCJzaC1taXBpLWRzaS4wIiwgJm1zdHBfY2xrc1tNU1RQMTE4XSksIC8qIERTSVRYICovCisJQ0xLREVWX0RFVl9JRCgic2gtbWlwaS1kc2kuMCIsICZtc3RwX2Nsa3NbTVNUUDExOF0pLCAvKiBEU0lUWDAgKi8KIAlDTEtERVZfREVWX0lEKCJzaF9tb2JpbGVfbGNkY19mYi4xIiwgJm1zdHBfY2xrc1tNU1RQMTE3XSksIC8qIExDREMxICovCiAJQ0xLREVWX0RFVl9JRCgiaTJjLXNoX21vYmlsZS4wIiwgJm1zdHBfY2xrc1tNU1RQMTE2XSksIC8qIElJQzAgKi8KIAlDTEtERVZfREVWX0lEKCJ1aW9fcGRydl9nZW5pcnEuNSIsICZtc3RwX2Nsa3NbTVNUUDEwNl0pLCAvKiBKUFUgKi8KQEAgLTYzMyw2ICs2MzUsNyBAQAogCUNMS0RFVl9ERVZfSUQoInNoX21vYmlsZV9zZGhpLjAiLCAmbXN0cF9jbGtzW01TVFAzMTRdKSwgLyogU0RISTAgKi8KIAlDTEtERVZfREVWX0lEKCJzaF9tb2JpbGVfc2RoaS4xIiwgJm1zdHBfY2xrc1tNU1RQMzEzXSksIC8qIFNESEkxICovCiAJQ0xLREVWX0RFVl9JRCgic2hfbW1jaWYuMCIsICZtc3RwX2Nsa3NbTVNUUDMxMl0pLCAvKiBNTUMgKi8KKwlDTEtERVZfREVWX0lEKCJzaC1taXBpLWRzaS4xIiwgJm1zdHBfY2xrc1tNU1RQNDIzXSksIC8qIERTSVRYMSAqLwogCUNMS0RFVl9ERVZfSUQoInNoX21vYmlsZV9zZGhpLjIiLCAmbXN0cF9jbGtzW01TVFA0MTVdKSwgLyogU0RISTIgKi8KIAlDTEtERVZfREVWX0lEKCJzaC1tb2JpbGUtaGRtaSIsICZtc3RwX2Nsa3NbTVNUUDQxM10pLCAvKiBIRE1JICovCiAJQ0xLREVWX0RFVl9JRCgiaTJjLXNoX21vYmlsZS4zIiwgJm1zdHBfY2xrc1tNU1RQNDExXSksIC8qIElJQzMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2stc2g3Mzc3LmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXNoNzM3Ny5jCmluZGV4IGY5MTM5NWEuLjk1OTQyNDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2stc2g3Mzc3LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1zaDczNzcuYwpAQCAtMjAsOCArMjAsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvc2hfY2xrLmg+CisjaW5jbHVkZSA8bGludXgvY2xrZGV2Lmg+CiAjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KLSNpbmNsdWRlIDxhc20vY2xrZGV2Lmg+CiAKIC8qIFNINzM3NyByZWdpc3RlcnMgKi8KICNkZWZpbmUgUlRGUlFDUiAgICAweGU2MTUwMDAwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXNoNzNhMC5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1zaDczYTAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjBhNzE0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1zaDczYTAuYwpAQCAtMCwwICsxLDM1NiBAQAorLyoKKyAqIHNoNzNhMCBjbG9jayBmcmFtZXdvcmsgc3VwcG9ydAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBNYWdudXMgRGFtbQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zaF9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGtkZXYuaD4KKyNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgorCisjZGVmaW5lIEZSUUNSQQkJMHhlNjE1MDAwMAorI2RlZmluZSBGUlFDUkIJCTB4ZTYxNTAwMDQKKyNkZWZpbmUgRlJRQ1JECQkweGU2MTUwMGU0CisjZGVmaW5lIFZDTEtDUjEJCTB4ZTYxNTAwMDgKKyNkZWZpbmUgVkNMS0NSMgkJMHhlNjE1MDAwQworI2RlZmluZSBWQ0xLQ1IzCQkweGU2MTUwMDFDCisjZGVmaW5lIFpCQ0tDUgkJMHhlNjE1MDAxMAorI2RlZmluZSBGTENLQ1IJCTB4ZTYxNTAwMTQKKyNkZWZpbmUgU0QwQ0tDUgkJMHhlNjE1MDA3NAorI2RlZmluZSBTRDFDS0NSCQkweGU2MTUwMDc4CisjZGVmaW5lIFNEMkNLQ1IJCTB4ZTYxNTAwN0MKKyNkZWZpbmUgRlNJQUNLQ1IJMHhlNjE1MDAxOAorI2RlZmluZSBGU0lCQ0tDUgkweGU2MTUwMDkwCisjZGVmaW5lIFNVQkNLQ1IJCTB4ZTYxNTAwODAKKyNkZWZpbmUgU1BVQUNLQ1IJMHhlNjE1MDA4NAorI2RlZmluZSBTUFVWQ0tDUgkweGU2MTUwMDk0CisjZGVmaW5lIE1TVUNLQ1IJCTB4ZTYxNTAwODgKKyNkZWZpbmUgSFNJQ0tDUgkJMHhlNjE1MDA4QworI2RlZmluZSBNRkNLMUNSCQkweGU2MTUwMDk4CisjZGVmaW5lIE1GQ0syQ1IJCTB4ZTYxNTAwOUMKKyNkZWZpbmUgRFNJVENLQ1IJMHhlNjE1MDA2MAorI2RlZmluZSBEU0kwUENLQ1IJMHhlNjE1MDA2NAorI2RlZmluZSBEU0kxUENLQ1IJMHhlNjE1MDA2OAorI2RlZmluZSBEU0kwUEhZQ1IJMHhlNjE1MDA2QworI2RlZmluZSBEU0kxUEhZQ1IJMHhlNjE1MDA3MAorI2RlZmluZSBQTExFQ1IJCTB4ZTYxNTAwZDAKKyNkZWZpbmUgUExMMENSCQkweGU2MTUwMGQ4CisjZGVmaW5lIFBMTDFDUgkJMHhlNjE1MDAyOAorI2RlZmluZSBQTEwyQ1IJCTB4ZTYxNTAwMmMKKyNkZWZpbmUgUExMM0NSCQkweGU2MTUwMGRjCisjZGVmaW5lIFNNU1RQQ1IwCTB4ZTYxNTAxMzAKKyNkZWZpbmUgU01TVFBDUjEJMHhlNjE1MDEzNAorI2RlZmluZSBTTVNUUENSMgkweGU2MTUwMTM4CisjZGVmaW5lIFNNU1RQQ1IzCTB4ZTYxNTAxM2MKKyNkZWZpbmUgU01TVFBDUjQJMHhlNjE1MDE0MAorI2RlZmluZSBTTVNUUENSNQkweGU2MTUwMTQ0CisjZGVmaW5lIENLU0NSCQkweGU2MTUwMGMwCisKKy8qIEZpeGVkIDMyIEtIeiByb290IGNsb2NrIGZyb20gRVhUQUxSIHBpbiAqLworc3RhdGljIHN0cnVjdCBjbGsgcl9jbGsgPSB7CisJLnJhdGUgICAgICAgICAgID0gMzI3NjgsCit9OworCisvKgorICogMjZNSHogZGVmYXVsdCByYXRlIGZvciB0aGUgRVhUQUwxIHJvb3QgaW5wdXQgY2xvY2suCisgKiBJZiBuZWVkZWQsIHJlc2V0IHRoaXMgd2l0aCBjbGtfc2V0X3JhdGUoKSBmcm9tIHRoZSBwbGF0Zm9ybSBjb2RlLgorICovCitzdHJ1Y3QgY2xrIHNoNzNhMF9leHRhbDFfY2xrID0geworCS5yYXRlCQk9IDI2MDAwMDAwLAorfTsKKworLyoKKyAqIDQ4TUh6IGRlZmF1bHQgcmF0ZSBmb3IgdGhlIEVYVEFMMiByb290IGlucHV0IGNsb2NrLgorICogSWYgbmVlZGVkLCByZXNldCB0aGlzIHdpdGggY2xrX3NldF9yYXRlKCkgZnJvbSB0aGUgcGxhdGZvcm0gY29kZS4KKyAqLworc3RydWN0IGNsayBzaDczYTBfZXh0YWwyX2NsayA9IHsKKwkucmF0ZQkJPSA0ODAwMDAwMCwKK307CisKKy8qIEEgZml4ZWQgZGl2aWRlLWJ5LTIgYmxvY2sgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIGRpdjJfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyAyOworfQorCitzdGF0aWMgc3RydWN0IGNsa19vcHMgZGl2Ml9jbGtfb3BzID0geworCS5yZWNhbGMJCT0gZGl2Ml9yZWNhbGMsCit9OworCisvKiBEaXZpZGUgZXh0YWwxIGJ5IHR3byAqLworc3RhdGljIHN0cnVjdCBjbGsgZXh0YWwxX2RpdjJfY2xrID0geworCS5vcHMJCT0gJmRpdjJfY2xrX29wcywKKwkucGFyZW50CQk9ICZzaDczYTBfZXh0YWwxX2NsaywKK307CisKKy8qIERpdmlkZSBleHRhbDIgYnkgdHdvICovCitzdGF0aWMgc3RydWN0IGNsayBleHRhbDJfZGl2Ml9jbGsgPSB7CisJLm9wcwkJPSAmZGl2Ml9jbGtfb3BzLAorCS5wYXJlbnQJCT0gJnNoNzNhMF9leHRhbDJfY2xrLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtfb3BzIG1haW5fY2xrX29wcyA9IHsKKwkucmVjYWxjCQk9IGZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKiBNYWluIGNsb2NrICovCitzdGF0aWMgc3RydWN0IGNsayBtYWluX2NsayA9IHsKKwkub3BzCQk9ICZtYWluX2Nsa19vcHMsCit9OworCisvKiBQTEwwLCBQTEwxLCBQTEwyLCBQTEwzICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBwbGxfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIG11bHQgPSAxOworCisJaWYgKF9fcmF3X3JlYWRsKFBMTEVDUikgJiAoMSA8PCBjbGstPmVuYWJsZV9iaXQpKQorCQltdWx0ID0gKCgoX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKSA+PiAyNCkgJiAweDNmKSArIDEpOworCisJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlICogbXVsdDsKK30KKworc3RhdGljIHN0cnVjdCBjbGtfb3BzIHBsbF9jbGtfb3BzID0geworCS5yZWNhbGMJCT0gcGxsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHBsbDBfY2xrID0geworCS5vcHMJCT0gJnBsbF9jbGtfb3BzLAorCS5mbGFncwkJPSBDTEtfRU5BQkxFX09OX0lOSVQsCisJLnBhcmVudAkJPSAmbWFpbl9jbGssCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopUExMMENSLAorCS5lbmFibGVfYml0CT0gMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHBsbDFfY2xrID0geworCS5vcHMJCT0gJnBsbF9jbGtfb3BzLAorCS5mbGFncwkJPSBDTEtfRU5BQkxFX09OX0lOSVQsCisJLnBhcmVudAkJPSAmbWFpbl9jbGssCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopUExMMUNSLAorCS5lbmFibGVfYml0CT0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHBsbDJfY2xrID0geworCS5vcHMJCT0gJnBsbF9jbGtfb3BzLAorCS5mbGFncwkJPSBDTEtfRU5BQkxFX09OX0lOSVQsCisJLnBhcmVudAkJPSAmbWFpbl9jbGssCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopUExMMkNSLAorCS5lbmFibGVfYml0CT0gMiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHBsbDNfY2xrID0geworCS5vcHMJCT0gJnBsbF9jbGtfb3BzLAorCS5mbGFncwkJPSBDTEtfRU5BQkxFX09OX0lOSVQsCisJLnBhcmVudAkJPSAmbWFpbl9jbGssCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopUExMM0NSLAorCS5lbmFibGVfYml0CT0gMywKK307CisKKy8qIERpdmlkZSBQTEwxIGJ5IHR3byAqLworc3RhdGljIHN0cnVjdCBjbGsgcGxsMV9kaXYyX2NsayA9IHsKKwkub3BzCQk9ICZkaXYyX2Nsa19vcHMsCisJLnBhcmVudAkJPSAmcGxsMV9jbGssCit9OworCitzdGF0aWMgc3RydWN0IGNsayAqbWFpbl9jbGtzW10gPSB7CisJJnJfY2xrLAorCSZzaDczYTBfZXh0YWwxX2NsaywKKwkmc2g3M2EwX2V4dGFsMl9jbGssCisJJmV4dGFsMV9kaXYyX2NsaywKKwkmZXh0YWwyX2RpdjJfY2xrLAorCSZtYWluX2NsaywKKwkmcGxsMF9jbGssCisJJnBsbDFfY2xrLAorCSZwbGwyX2NsaywKKwkmcGxsM19jbGssCisJJnBsbDFfZGl2Ml9jbGssCit9OworCitzdGF0aWMgdm9pZCBkaXY0X2tpY2soc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgdmFsdWU7CisKKwkvKiBzZXQgS0lDSyBiaXQgaW4gRlJRQ1JCIHRvIHVwZGF0ZSBoYXJkd2FyZSBzZXR0aW5nICovCisJdmFsdWUgPSBfX3Jhd19yZWFkbChGUlFDUkIpOworCXZhbHVlIHw9ICgxIDw8IDMxKTsKKwlfX3Jhd193cml0ZWwodmFsdWUsIEZSUUNSQik7Cit9CisKK3N0YXRpYyBpbnQgZGl2aXNvcnNbXSA9IHsgMiwgMywgNCwgNiwgOCwgMTIsIDE2LCAxOCwKKwkJCSAgMjQsIDAsIDM2LCA0OCwgNyB9OworCitzdGF0aWMgc3RydWN0IGNsa19kaXZfbXVsdF90YWJsZSBkaXY0X2Rpdl9tdWx0X3RhYmxlID0geworCS5kaXZpc29ycyA9IGRpdmlzb3JzLAorCS5ucl9kaXZpc29ycyA9IEFSUkFZX1NJWkUoZGl2aXNvcnMpLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtfZGl2NF90YWJsZSBkaXY0X3RhYmxlID0geworCS5kaXZfbXVsdF90YWJsZSA9ICZkaXY0X2Rpdl9tdWx0X3RhYmxlLAorCS5raWNrID0gZGl2NF9raWNrLAorfTsKKworZW51bSB7IERJVjRfSSwgRElWNF9aRywgRElWNF9NMywgRElWNF9CLCBESVY0X00xLCBESVY0X00yLAorCURJVjRfWiwgRElWNF9aVFIsIERJVjRfWlQsIERJVjRfWlgsIERJVjRfSFAsIERJVjRfTlIgfTsKKworI2RlZmluZSBESVY0KF9yZWcsIF9iaXQsIF9tYXNrLCBfZmxhZ3MpIFwKKwlTSF9DTEtfRElWNCgmcGxsMV9jbGssIF9yZWcsIF9iaXQsIF9tYXNrLCBfZmxhZ3MpCisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRpdjRfY2xrc1tESVY0X05SXSA9IHsKKwlbRElWNF9JXSA9IERJVjQoRlJRQ1JBLCAyMCwgMHhmZmYsIENMS19FTkFCTEVfT05fSU5JVCksCisJW0RJVjRfWkddID0gRElWNChGUlFDUkEsIDE2LCAweGJmZiwgQ0xLX0VOQUJMRV9PTl9JTklUKSwKKwlbRElWNF9NM10gPSBESVY0KEZSUUNSQSwgOCwgMHhmZmYsIENMS19FTkFCTEVfT05fSU5JVCksCisJW0RJVjRfQl0gPSBESVY0KEZSUUNSQSwgOCwgMHhmZmYsIENMS19FTkFCTEVfT05fSU5JVCksCisJW0RJVjRfTTFdID0gRElWNChGUlFDUkEsIDQsIDB4ZmZmLCAwKSwKKwlbRElWNF9NMl0gPSBESVY0KEZSUUNSQSwgMCwgMHhmZmYsIDApLAorCVtESVY0X1pdID0gRElWNChGUlFDUkIsIDI0LCAweGJmZiwgMCksCisJW0RJVjRfWlRSXSA9IERJVjQoRlJRQ1JCLCAyMCwgMHhmZmYsIDApLAorCVtESVY0X1pUXSA9IERJVjQoRlJRQ1JCLCAxNiwgMHhmZmYsIDApLAorCVtESVY0X1pYXSA9IERJVjQoRlJRQ1JCLCAxMiwgMHhmZmYsIDApLAorCVtESVY0X0hQXSA9IERJVjQoRlJRQ1JCLCA0LCAweGZmZiwgMCksCit9OworCitlbnVtIHsgRElWNl9WQ0sxLCBESVY2X1ZDSzIsIERJVjZfVkNLMywgRElWNl9aQjEsCisJRElWNl9GTENUTCwgRElWNl9TREhJMCwgRElWNl9TREhJMSwgRElWNl9TREhJMiwKKwlESVY2X0ZTSUEsIERJVjZfRlNJQiwgRElWNl9TVUIsCisJRElWNl9TUFVBLCBESVY2X1NQVVYsIERJVjZfTVNVLAorCURJVjZfSFNJLCAgRElWNl9NRkcxLCBESVY2X01GRzIsCisJRElWNl9EU0lULCBESVY2X0RTSTBQLCBESVY2X0RTSTFQLAorCURJVjZfTlIgfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZGl2Nl9jbGtzW0RJVjZfTlJdID0geworCVtESVY2X1ZDSzFdID0gU0hfQ0xLX0RJVjYoJnBsbDFfZGl2Ml9jbGssIFZDTEtDUjEsIDApLAorCVtESVY2X1ZDSzJdID0gU0hfQ0xLX0RJVjYoJnBsbDFfZGl2Ml9jbGssIFZDTEtDUjIsIDApLAorCVtESVY2X1ZDSzNdID0gU0hfQ0xLX0RJVjYoJnBsbDFfZGl2Ml9jbGssIFZDTEtDUjMsIDApLAorCVtESVY2X1pCMV0gPSBTSF9DTEtfRElWNigmcGxsMV9kaXYyX2NsaywgWkJDS0NSLCAwKSwKKwlbRElWNl9GTENUTF0gPSBTSF9DTEtfRElWNigmcGxsMV9kaXYyX2NsaywgRkxDS0NSLCAwKSwKKwlbRElWNl9TREhJMF0gPSBTSF9DTEtfRElWNigmcGxsMV9kaXYyX2NsaywgU0QwQ0tDUiwgMCksCisJW0RJVjZfU0RISTFdID0gU0hfQ0xLX0RJVjYoJnBsbDFfZGl2Ml9jbGssIFNEMUNLQ1IsIDApLAorCVtESVY2X1NESEkyXSA9IFNIX0NMS19ESVY2KCZwbGwxX2RpdjJfY2xrLCBTRDJDS0NSLCAwKSwKKwlbRElWNl9GU0lBXSA9IFNIX0NMS19ESVY2KCZwbGwxX2RpdjJfY2xrLCBGU0lBQ0tDUiwgMCksCisJW0RJVjZfRlNJQl0gPSBTSF9DTEtfRElWNigmcGxsMV9kaXYyX2NsaywgRlNJQkNLQ1IsIDApLAorCVtESVY2X1NVQl0gPSBTSF9DTEtfRElWNigmc2g3M2EwX2V4dGFsMl9jbGssIFNVQkNLQ1IsIDApLAorCVtESVY2X1NQVUFdID0gU0hfQ0xLX0RJVjYoJnBsbDFfZGl2Ml9jbGssIFNQVUFDS0NSLCAwKSwKKwlbRElWNl9TUFVWXSA9IFNIX0NMS19ESVY2KCZwbGwxX2RpdjJfY2xrLCBTUFVWQ0tDUiwgMCksCisJW0RJVjZfTVNVXSA9IFNIX0NMS19ESVY2KCZwbGwxX2RpdjJfY2xrLCBNU1VDS0NSLCAwKSwKKwlbRElWNl9IU0ldID0gU0hfQ0xLX0RJVjYoJnBsbDFfZGl2Ml9jbGssIEhTSUNLQ1IsIDApLAorCVtESVY2X01GRzFdID0gU0hfQ0xLX0RJVjYoJnBsbDFfZGl2Ml9jbGssIE1GQ0sxQ1IsIDApLAorCVtESVY2X01GRzJdID0gU0hfQ0xLX0RJVjYoJnBsbDFfZGl2Ml9jbGssIE1GQ0syQ1IsIDApLAorCVtESVY2X0RTSVRdID0gU0hfQ0xLX0RJVjYoJnBsbDFfZGl2Ml9jbGssIERTSVRDS0NSLCAwKSwKKwlbRElWNl9EU0kwUF0gPSBTSF9DTEtfRElWNigmcGxsMV9kaXYyX2NsaywgRFNJMFBDS0NSLCAwKSwKKwlbRElWNl9EU0kxUF0gPSBTSF9DTEtfRElWNigmcGxsMV9kaXYyX2NsaywgRFNJMVBDS0NSLCAwKSwKK307CisKK2VudW0geyBNU1RQMDAxLAorCU1TVFAxMjUsIE1TVFAxMTYsCisJTVNUUDIxOSwKKwlNU1RQMjA3LCBNU1RQMjA2LCBNU1RQMjA0LCBNU1RQMjAzLCBNU1RQMjAyLCBNU1RQMjAxLCBNU1RQMjAwLAorCU1TVFAzMzEsIE1TVFAzMjksIE1TVFAzMjMsIE1TVFAzMTIsCisJTVNUUDQxMSwgTVNUUDQxMCwgTVNUUDQwMywKKwlNU1RQX05SIH07CisKKyNkZWZpbmUgTVNUUChfcGFyZW50LCBfcmVnLCBfYml0LCBfZmxhZ3MpIFwKKwlTSF9DTEtfTVNUUDMyKF9wYXJlbnQsIF9yZWcsIF9iaXQsIF9mbGFncykKKworc3RhdGljIHN0cnVjdCBjbGsgbXN0cF9jbGtzW01TVFBfTlJdID0geworCVtNU1RQMDAxXSA9IE1TVFAoJmRpdjRfY2xrc1tESVY0X0hQXSwgU01TVFBDUjAsIDEsIDApLCAvKiBJSUMyICovCisJW01TVFAxMjVdID0gTVNUUCgmZGl2Nl9jbGtzW0RJVjZfU1VCXSwgU01TVFBDUjEsIDI1LCAwKSwgLyogVE1VMCAqLworCVtNU1RQMTE2XSA9IE1TVFAoJmRpdjRfY2xrc1tESVY0X0hQXSwgU01TVFBDUjEsIDE2LCAwKSwgLyogSUlDMCAqLworCVtNU1RQMjE5XSA9IE1TVFAoJmRpdjZfY2xrc1tESVY2X1NVQl0sIFNNU1RQQ1IyLCAxOSwgMCksIC8qIFNDSUZBNyAqLworCVtNU1RQMjA3XSA9IE1TVFAoJmRpdjZfY2xrc1tESVY2X1NVQl0sIFNNU1RQQ1IyLCA3LCAwKSwgLyogU0NJRkE1ICovCisJW01TVFAyMDZdID0gTVNUUCgmZGl2Nl9jbGtzW0RJVjZfU1VCXSwgU01TVFBDUjIsIDYsIDApLCAvKiBTQ0lGQiAqLworCVtNU1RQMjA0XSA9IE1TVFAoJmRpdjZfY2xrc1tESVY2X1NVQl0sIFNNU1RQQ1IyLCA0LCAwKSwgLyogU0NJRkEwICovCisJW01TVFAyMDNdID0gTVNUUCgmZGl2Nl9jbGtzW0RJVjZfU1VCXSwgU01TVFBDUjIsIDMsIDApLCAvKiBTQ0lGQTEgKi8KKwlbTVNUUDIwMl0gPSBNU1RQKCZkaXY2X2Nsa3NbRElWNl9TVUJdLCBTTVNUUENSMiwgMiwgMCksIC8qIFNDSUZBMiAqLworCVtNU1RQMjAxXSA9IE1TVFAoJmRpdjZfY2xrc1tESVY2X1NVQl0sIFNNU1RQQ1IyLCAxLCAwKSwgLyogU0NJRkEzICovCisJW01TVFAyMDBdID0gTVNUUCgmZGl2Nl9jbGtzW0RJVjZfU1VCXSwgU01TVFBDUjIsIDAsIDApLCAvKiBTQ0lGQTQgKi8KKwlbTVNUUDMzMV0gPSBNU1RQKCZkaXY2X2Nsa3NbRElWNl9TVUJdLCBTTVNUUENSMywgMzEsIDApLCAvKiBTQ0lGQTYgKi8KKwlbTVNUUDMyOV0gPSBNU1RQKCZyX2NsaywgU01TVFBDUjMsIDI5LCAwKSwgLyogQ01UMTAgKi8KKwlbTVNUUDMyM10gPSBNU1RQKCZkaXY0X2Nsa3NbRElWNF9IUF0sIFNNU1RQQ1IzLCAyMywgMCksIC8qIElJQzEgKi8KKwlbTVNUUDMxMl0gPSBNU1RQKCZkaXY0X2Nsa3NbRElWNF9IUF0sIFNNU1RQQ1IzLCAxMiwgMCksIC8qIE1NQ0lGMCAqLworCVtNU1RQNDExXSA9IE1TVFAoJmRpdjRfY2xrc1tESVY0X0hQXSwgU01TVFBDUjQsIDExLCAwKSwgLyogSUlDMyAqLworCVtNU1RQNDEwXSA9IE1TVFAoJmRpdjRfY2xrc1tESVY0X0hQXSwgU01TVFBDUjQsIDEwLCAwKSwgLyogSUlDNCAqLworCVtNU1RQNDAzXSA9IE1TVFAoJnJfY2xrLCBTTVNUUENSNCwgMywgMCksIC8qIEtFWVNDICovCit9OworCisjZGVmaW5lIENMS0RFVl9DT05fSUQoX2lkLCBfY2xrKSB7IC5jb25faWQgPSBfaWQsIC5jbGsgPSBfY2xrIH0KKyNkZWZpbmUgQ0xLREVWX0RFVl9JRChfaWQsIF9jbGspIHsgLmRldl9pZCA9IF9pZCwgLmNsayA9IF9jbGsgfQorCitzdGF0aWMgc3RydWN0IGNsa19sb29rdXAgbG9va3Vwc1tdID0geworCS8qIG1haW4gY2xvY2tzICovCisJQ0xLREVWX0NPTl9JRCgicl9jbGsiLCAmcl9jbGspLAorCisJLyogTVNUUDMyIGNsb2NrcyAqLworCUNMS0RFVl9ERVZfSUQoImkyYy1zaF9tb2JpbGUuMiIsICZtc3RwX2Nsa3NbTVNUUDAwMV0pLCAvKiBJMkMyICovCisJQ0xLREVWX0RFVl9JRCgic2hfdG11LjAiLCAmbXN0cF9jbGtzW01TVFAxMjVdKSwgLyogVE1VMDAgKi8KKwlDTEtERVZfREVWX0lEKCJzaF90bXUuMSIsICZtc3RwX2Nsa3NbTVNUUDEyNV0pLCAvKiBUTVUwMSAqLworCUNMS0RFVl9ERVZfSUQoImkyYy1zaF9tb2JpbGUuMCIsICZtc3RwX2Nsa3NbTVNUUDExNl0pLCAvKiBJMkMwICovCisJQ0xLREVWX0RFVl9JRCgic2gtc2NpLjciLCAmbXN0cF9jbGtzW01TVFAyMTldKSwgLyogU0NJRkE3ICovCisJQ0xLREVWX0RFVl9JRCgic2gtc2NpLjUiLCAmbXN0cF9jbGtzW01TVFAyMDddKSwgLyogU0NJRkE1ICovCisJQ0xLREVWX0RFVl9JRCgic2gtc2NpLjgiLCAmbXN0cF9jbGtzW01TVFAyMDZdKSwgLyogU0NJRkIgKi8KKwlDTEtERVZfREVWX0lEKCJzaC1zY2kuMCIsICZtc3RwX2Nsa3NbTVNUUDIwNF0pLCAvKiBTQ0lGQTAgKi8KKwlDTEtERVZfREVWX0lEKCJzaC1zY2kuMSIsICZtc3RwX2Nsa3NbTVNUUDIwM10pLCAvKiBTQ0lGQTEgKi8KKwlDTEtERVZfREVWX0lEKCJzaC1zY2kuMiIsICZtc3RwX2Nsa3NbTVNUUDIwMl0pLCAvKiBTQ0lGQTIgKi8KKwlDTEtERVZfREVWX0lEKCJzaC1zY2kuMyIsICZtc3RwX2Nsa3NbTVNUUDIwMV0pLCAvKiBTQ0lGQTMgKi8KKwlDTEtERVZfREVWX0lEKCJzaC1zY2kuNCIsICZtc3RwX2Nsa3NbTVNUUDIwMF0pLCAvKiBTQ0lGQTQgKi8KKwlDTEtERVZfREVWX0lEKCJzaC1zY2kuNiIsICZtc3RwX2Nsa3NbTVNUUDMzMV0pLCAvKiBTQ0lGQTYgKi8KKwlDTEtERVZfREVWX0lEKCJzaF9jbXQuMTAiLCAmbXN0cF9jbGtzW01TVFAzMjldKSwgLyogQ01UMTAgKi8KKwlDTEtERVZfREVWX0lEKCJpMmMtc2hfbW9iaWxlLjEiLCAmbXN0cF9jbGtzW01TVFAzMjNdKSwgLyogSTJDMSAqLworCUNMS0RFVl9ERVZfSUQoInNoX21tY2lmLjAiLCAmbXN0cF9jbGtzW01TVFAzMTJdKSwgLyogTU1DSUYwICovCisJQ0xLREVWX0RFVl9JRCgiaTJjLXNoX21vYmlsZS4zIiwgJm1zdHBfY2xrc1tNU1RQNDExXSksIC8qIEkyQzMgKi8KKwlDTEtERVZfREVWX0lEKCJpMmMtc2hfbW9iaWxlLjQiLCAmbXN0cF9jbGtzW01TVFA0MTBdKSwgLyogSTJDNCAqLworCUNMS0RFVl9ERVZfSUQoInNoX2tleXNjLjAiLCAmbXN0cF9jbGtzW01TVFA0MDNdKSwgLyogS0VZU0MgKi8KK307CisKK3ZvaWQgX19pbml0IHNoNzNhMF9jbG9ja19pbml0KHZvaWQpCit7CisJaW50IGssIHJldCA9IDA7CisKKwkvKiBkZXRlY3QgbWFpbiBjbG9jayBwYXJlbnQgKi8KKwlzd2l0Y2ggKChfX3Jhd19yZWFkbChDS1NDUikgPj4gMjQpICYgMHgwMykgeworCWNhc2UgMDoKKwkJbWFpbl9jbGsucGFyZW50ID0gJnNoNzNhMF9leHRhbDFfY2xrOworCQlicmVhazsKKwljYXNlIDE6CisJCW1haW5fY2xrLnBhcmVudCA9ICZleHRhbDFfZGl2Ml9jbGs7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJbWFpbl9jbGsucGFyZW50ID0gJnNoNzNhMF9leHRhbDJfY2xrOworCQlicmVhazsKKwljYXNlIDM6CisJCW1haW5fY2xrLnBhcmVudCA9ICZleHRhbDJfZGl2Ml9jbGs7CisJCWJyZWFrOworCX0KKworCWZvciAoayA9IDA7ICFyZXQgJiYgKGsgPCBBUlJBWV9TSVpFKG1haW5fY2xrcykpOyBrKyspCisJCXJldCA9IGNsa19yZWdpc3RlcihtYWluX2Nsa3Nba10pOworCisJaWYgKCFyZXQpCisJCXJldCA9IHNoX2Nsa19kaXY0X3JlZ2lzdGVyKGRpdjRfY2xrcywgRElWNF9OUiwgJmRpdjRfdGFibGUpOworCisJaWYgKCFyZXQpCisJCXJldCA9IHNoX2Nsa19kaXY2X3JlZ2lzdGVyKGRpdjZfY2xrcywgRElWNl9OUik7CisKKwlpZiAoIXJldCkKKwkJcmV0ID0gc2hfY2xrX21zdHAzMl9yZWdpc3Rlcihtc3RwX2Nsa3MsIE1TVFBfTlIpOworCisJY2xrZGV2X2FkZF90YWJsZShsb29rdXBzLCBBUlJBWV9TSVpFKGxvb2t1cHMpKTsKKworCWlmICghcmV0KQorCQljbGtfaW5pdCgpOworCWVsc2UKKwkJcGFuaWMoImZhaWxlZCB0byBzZXR1cCBzaDczYTAgY2xvY2tzXG4iKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvZW50cnktZ2ljLlMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2VudHJ5LWdpYy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyMDIzOWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2VudHJ5LWdpYy5TCkBAIC0wLDAgKzEsMTggQEAKKy8qCisgKiBBUk0gSW50ZXJydXB0IGRlbXV4IGhhbmRsZXIgdXNpbmcgR0lDCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIE1hZ251cyBEYW1tCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgUGF1bCBNdW5kdAorICogQ29weXJpZ2h0IChDKSAyMDEwIC0gMjAxMSBSZW5lc2FzIFNvbHV0aW9ucyBDb3JwLgorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKyNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CisjaW5jbHVkZSA8YXNtL2VudHJ5LW1hY3JvLW11bHRpLlM+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2dpYy5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9lbnRyeS1tYWNyby1naWMuUz4KKworCWFyY2hfaXJxX2hhbmRsZXIgc2htb2JpbGVfaGFuZGxlX2lycV9naWMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvZW50cnktaW50Yy5TIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9lbnRyeS1pbnRjLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FjMGE3YQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvZW50cnktaW50Yy5TCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBBUk0gSW50ZXJydXB0IGRlbXV4IGhhbmRsZXIgdXNpbmcgSU5UQworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBNYWdudXMgRGFtbQorICogQ29weXJpZ2h0IChDKSAyMDA4IFJlbmVzYXMgU29sdXRpb25zIENvcnAuCisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworI2luY2x1ZGUgPGFzbS9lbnRyeS1tYWNyby1tdWx0aS5TPgorCisjZGVmaW5lIElOVENBX0JBU0UJMHhlNjk4MDAwMAorI2RlZmluZSBJTlRGTEdBX09GRlMJMHgwMDAwMDAxOCAvKiBhY2NlcHQgcGVuZGluZyBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSU5URVZUQV9PRkZTCTB4MDAwMDAwMjAgLyogdmVjdG9yIG51bWJlciBvZiBhY2NlcHRlZCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSU5UTFZMQV9PRkZTCTB4MDAwMDAwMzAgLyogcHJpb3JpdHkgbGV2ZWwgb2YgYWNjZXB0ZWQgaW50ZXJydXB0ICovCisjZGVmaW5lIElOVExWTEJfT0ZGUwkweDAwMDAwMDM0IC8qIHByZXZpb3VzIHByaW9yaXR5IGxldmVsICovCisKKwkubWFjcm8gIGdldF9pcnFucl9wcmVhbWJsZSwgYmFzZSwgdG1wCisJbGRyICAgICBcYmFzZSwgPUlOVENBX0JBU0UKKwkuZW5kbQorCisJLm1hY3JvICBnZXRfaXJxbnJfYW5kX2Jhc2UsIGlycW5yLCBpcnFzdGF0LCBiYXNlLCB0bXAKKwkvKiBUaGUgc2luZ2xlIElOVEZMR0EgcmVhZCBhY2Nlc3MgYmVsb3cgcmVzdWx0cyBpbiB0aGUgZm9sbG93aW5nOgorCSAqCisJICogMS4gSU5UTFZMQiBpcyB1cGRhdGVkIHdpdGggb2xkIHByaW9yaXR5IHZhbHVlIGZyb20gSU5UTFZMQQorCSAqIDIuIEhpZ2hlc3QgcHJpb3JpdHkgaW50ZXJydXB0IGlzIGFjY2VwdGVkCisJICogMy4gSU5UTFZMQSBpcyB1cGRhdGVkIHRvIGNvbnRhaW4gcHJpb3JpdHkgb2YgYWNjZXB0ZWQgaW50ZXJydXB0CisJICogNC4gQWNjZXB0ZWQgaW50ZXJydXB0IHZlY3RvciBpcyBzdG9yZWQgaW4gSU5URkxHQSBhbmQgSU5URVZUQQorCSAqLworCWxkciAgICAgXGlycW5yLCBbXGJhc2UsICNJTlRGTEdBX09GRlNdCisKKwkvKiBSZXN0b3JlIElOVExWTEEgd2l0aCB0aGUgdmFsdWUgc2F2ZWQgaW4gSU5UTFZMQi4KKwkgKiBUaGlzIGlzIHJlcXVpcmVkIHRvIHN1cHBvcnQgaW50ZXJydXB0IHByaW9yaXRpZXMgcHJvcGVybHkuCisJICovCisJbGRyYglcdG1wLCBbXGJhc2UsICNJTlRMVkxCX09GRlNdCisJc3RyYiAgICBcdG1wLCBbXGJhc2UsICNJTlRMVkxBX09GRlNdCisKKwkvKiBIYW5kbGUgaW52YWxpZCB2ZWN0b3IgbnVtYmVyIGNhc2UgKi8KKwljbXAJXGlycW5yLCAjMAorCWJlcQkxMDAwZgorCisJLyogQ29udmVydCB2ZWN0b3IgdG8gaXJxIG51bWJlciwgc2FtZSBhcyB0aGUgZXZ0MmlycSgpIG1hY3JvICovCisJbHNyCVxpcnFuciwgXGlycW5yLCAjMHg1CisJc3VicwlcaXJxbnIsIFxpcnFuciwgIzE2CisKKzEwMDA6CisJLmVuZG0KKworCS5tYWNybyAgdGVzdF9mb3JfaXBpLCBpcnFuciwgaXJxc3RhdCwgYmFzZSwgdG1wCisJLmVuZG0KKworCS5tYWNybyAgdGVzdF9mb3JfbHRpcnEsIGlycW5yLCBpcnFzdGF0LCBiYXNlLCB0bXAKKwkuZW5kbQorCisJYXJjaF9pcnFfaGFuZGxlciBzaG1vYmlsZV9oYW5kbGVfaXJxX2ludGMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaGVhZHNtcC5TIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9oZWFkc21wLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRjZWM2YgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaGVhZHNtcC5TCkBAIC0wLDAgKzEsMjcgQEAKKy8qCisgKiBTTVAgc3VwcG9ydCBmb3IgUi1Nb2JpbGUgLyBTSC1Nb2JpbGUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgIE1hZ251cyBEYW1tCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgIFRha2FzaGkgWW9zaGlpCisgKgorICogQmFzZWQgb24gdmV4cHJlc3MsIENvcHlyaWdodCAoYykgMjAwMyBBUk0gTGltaXRlZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGFzbS9tZW1vcnkuaD4KKworCV9fSU5JVAorCisvKgorICogUmVzZXQgdmVjdG9yIGZvciBzZWNvbmRhcnkgQ1BVcy4KKyAqIFRoaXMgd2lsbCBiZSBtYXBwZWQgYXQgYWRkcmVzcyAwIGJ5IFNCQVIgcmVnaXN0ZXIuCisgKiBXZSBuZWVkIF9sb25nXyBqdW1wIHRvIHRoZSBwaHlzaWNhbCBhZGRyZXNzLgorICovCisJLmFsaWduICAxMgorRU5UUlkoc2htb2JpbGVfc2Vjb25kYXJ5X3ZlY3RvcikKKwlsZHIgICAgIHBjLCAxZgorMToJLmxvbmcgICBzZWNvbmRhcnlfc3RhcnR1cCAtIFBBR0VfT0ZGU0VUICsgUEhZU19PRkZTRVQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaG90cGx1Zy5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ob3RwbHVnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM4YTBkOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaG90cGx1Zy5jCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBTTVAgc3VwcG9ydCBmb3IgUi1Nb2JpbGUgLyBTSC1Nb2JpbGUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgIE1hZ251cyBEYW1tCisgKgorICogQmFzZWQgb24gcmVhbHZpZXcsIENvcHlyaWdodCAoQykgMjAwMiBBUk0gTHRkLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CisKK2ludCBwbGF0Zm9ybV9jcHVfa2lsbCh1bnNpZ25lZCBpbnQgY3B1KQoreworCXJldHVybiAxOworfQorCit2b2lkIHBsYXRmb3JtX2NwdV9kaWUodW5zaWduZWQgaW50IGNwdSkKK3sKKwl3aGlsZSAoMSkgeworCQkvKgorCQkgKiBoZXJlJ3MgdGhlIFdGSQorCQkgKi8KKwkJYXNtKCIud29yZAkweGUzMjBmMDAzXG4iCisJCSAgICA6CisJCSAgICA6CisJCSAgICA6ICJtZW1vcnkiLCAiY2MiKTsKKwl9Cit9CisKK2ludCBwbGF0Zm9ybV9jcHVfZGlzYWJsZSh1bnNpZ25lZCBpbnQgY3B1KQoreworCS8qCisJICogd2UgZG9uJ3QgYWxsb3cgQ1BVIDAgdG8gYmUgc2h1dGRvd24gKGl0IGlzIHN0aWxsIHRvbyBzcGVjaWFsCisJICogZS5nLiBjbG9jayB0aWNrIGludGVycnVwdHMpCisJICovCisJcmV0dXJuIGNwdSA9PSAwID8gLUVQRVJNIDogMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL2NvbW1vbi5oIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbmNsdWRlL21hY2gvY29tbW9uLmgKaW5kZXggZWZlZWY3Ny4uMDEzYWMwZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbmNsdWRlL21hY2gvY29tbW9uLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbmNsdWRlL21hY2gvY29tbW9uLmgKQEAgLTMsOCArMywxMSBAQAogCiBleHRlcm4gc3RydWN0IHN5c190aW1lciBzaG1vYmlsZV90aW1lcjsKIGV4dGVybiB2b2lkIHNobW9iaWxlX3NldHVwX2NvbnNvbGUodm9pZCk7CitleHRlcm4gdm9pZCBzaG1vYmlsZV9zZWNvbmRhcnlfdmVjdG9yKHZvaWQpOwogc3RydWN0IGNsazsKIGV4dGVybiBpbnQgY2xrX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBzaG1vYmlsZV9oYW5kbGVfaXJxX2ludGMoc3RydWN0IHB0X3JlZ3MgKik7CitleHRlcm4gdm9pZCBzaG1vYmlsZV9oYW5kbGVfaXJxX2dpYyhzdHJ1Y3QgcHRfcmVncyAqKTsKIAogZXh0ZXJuIHZvaWQgc2g3MzY3X2luaXRfaXJxKHZvaWQpOwogZXh0ZXJuIHZvaWQgc2g3MzY3X2FkZF9lYXJseV9kZXZpY2VzKHZvaWQpOwpAQCAtMzAsNCArMzMsMTcgQEAKIGV4dGVybiBzdHJ1Y3QgY2xrIHNoNzM3Ml9leHRhbDFfY2xrOwogZXh0ZXJuIHN0cnVjdCBjbGsgc2g3MzcyX2V4dGFsMl9jbGs7CiAKK2V4dGVybiB2b2lkIHNoNzNhMF9pbml0X2lycSh2b2lkKTsKK2V4dGVybiB2b2lkIHNoNzNhMF9hZGRfZWFybHlfZGV2aWNlcyh2b2lkKTsKK2V4dGVybiB2b2lkIHNoNzNhMF9hZGRfc3RhbmRhcmRfZGV2aWNlcyh2b2lkKTsKK2V4dGVybiB2b2lkIHNoNzNhMF9jbG9ja19pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgc2g3M2EwX3Bpbm11eF9pbml0KHZvaWQpOworZXh0ZXJuIHN0cnVjdCBjbGsgc2g3M2EwX2V4dGFsMV9jbGs7CitleHRlcm4gc3RydWN0IGNsayBzaDczYTBfZXh0YWwyX2NsazsKKworZXh0ZXJuIHVuc2lnbmVkIGludCBzaDczYTBfZ2V0X2NvcmVfY291bnQodm9pZCk7CitleHRlcm4gdm9pZCBzaDczYTBfc2Vjb25kYXJ5X2luaXQodW5zaWduZWQgaW50IGNwdSk7CitleHRlcm4gaW50IHNoNzNhMF9ib290X3NlY29uZGFyeSh1bnNpZ25lZCBpbnQgY3B1KTsKK2V4dGVybiB2b2lkIHNoNzNhMF9zbXBfcHJlcGFyZV9jcHVzKHZvaWQpOworCiAjZW5kaWYgLyogX19BUkNIX01BQ0hfQ09NTU9OX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCmluZGV4IGY0MjhjNGQuLmQ3OTFmMTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUwpAQCAtMSw2ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgTWFnbnVzIERhbW0KLSAqIENvcHlyaWdodCAoQykgMjAwOCBSZW5lc2FzIFNvbHV0aW9ucyBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDEwICBQYXVsIE11bmR0CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0xNSw0NyArMTQsMjEgQEAKICAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQogICovCi0jaW5jbHVkZSA8bWFjaC9pcnFzLmg+Ci0KLSNkZWZpbmUgSU5UQ0FfQkFTRQkweGU2OTgwMDAwCi0jZGVmaW5lIElOVEZMR0FfT0ZGUwkweDAwMDAwMDE4IC8qIGFjY2VwdCBwZW5kaW5nIGludGVycnVwdCAqLwotI2RlZmluZSBJTlRFVlRBX09GRlMJMHgwMDAwMDAyMCAvKiB2ZWN0b3IgbnVtYmVyIG9mIGFjY2VwdGVkIGludGVycnVwdCAqLwotI2RlZmluZSBJTlRMVkxBX09GRlMJMHgwMDAwMDAzMCAvKiBwcmlvcml0eSBsZXZlbCBvZiBhY2NlcHRlZCBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgSU5UTFZMQl9PRkZTCTB4MDAwMDAwMzQgLyogcHJldmlvdXMgcHJpb3JpdHkgbGV2ZWwgKi8KIAogCS5tYWNybyAgZGlzYWJsZV9maXEKIAkuZW5kbQogCiAJLm1hY3JvICBnZXRfaXJxbnJfcHJlYW1ibGUsIGJhc2UsIHRtcAotCWxkciAgICAgXGJhc2UsID1JTlRDQV9CQVNFCi0JLmVuZG0KLQotCS5tYWNybyAgYXJjaF9yZXRfdG9fdXNlciwgdG1wMSwgdG1wMgogCS5lbmRtCiAKIAkubWFjcm8gIGdldF9pcnFucl9hbmRfYmFzZSwgaXJxbnIsIGlycXN0YXQsIGJhc2UsIHRtcAotCS8qIFRoZSBzaW5nbGUgSU5URkxHQSByZWFkIGFjY2VzcyBiZWxvdyByZXN1bHRzIGluIHRoZSBmb2xsb3dpbmc6Ci0JICoKLQkgKiAxLiBJTlRMVkxCIGlzIHVwZGF0ZWQgd2l0aCBvbGQgcHJpb3JpdHkgdmFsdWUgZnJvbSBJTlRMVkxBCi0JICogMi4gSGlnaGVzdCBwcmlvcml0eSBpbnRlcnJ1cHQgaXMgYWNjZXB0ZWQKLQkgKiAzLiBJTlRMVkxBIGlzIHVwZGF0ZWQgdG8gY29udGFpbiBwcmlvcml0eSBvZiBhY2NlcHRlZCBpbnRlcnJ1cHQKLQkgKiA0LiBBY2NlcHRlZCBpbnRlcnJ1cHQgdmVjdG9yIGlzIHN0b3JlZCBpbiBJTlRGTEdBIGFuZCBJTlRFVlRBCi0JICovCi0JbGRyICAgICBcaXJxbnIsIFtcYmFzZSwgI0lOVEZMR0FfT0ZGU10KKwkuZW5kbQogCi0JLyogUmVzdG9yZSBJTlRMVkxBIHdpdGggdGhlIHZhbHVlIHNhdmVkIGluIElOVExWTEIuCi0JICogVGhpcyBpcyByZXF1aXJlZCB0byBzdXBwb3J0IGludGVycnVwdCBwcmlvcml0aWVzIHByb3Blcmx5LgotCSAqLwotCWxkcmIJXHRtcCwgW1xiYXNlLCAjSU5UTFZMQl9PRkZTXQotCXN0cmIgICAgXHRtcCwgW1xiYXNlLCAjSU5UTFZMQV9PRkZTXQorCS5tYWNybyAgdGVzdF9mb3JfaXBpLCBpcnFuciwgaXJxc3RhdCwgYmFzZSwgdG1wCisJLmVuZG0KIAotCS8qIEhhbmRsZSBpbnZhbGlkIHZlY3RvciBudW1iZXIgY2FzZSAqLwotCWNtcAlcaXJxbnIsICMwCi0JYmVxCTEwMDBmCisJLm1hY3JvICB0ZXN0X2Zvcl9sdGlycSwgaXJxbnIsIGlycXN0YXQsIGJhc2UsIHRtcAorCS5lbmRtCiAKLQkvKiBDb252ZXJ0IHZlY3RvciB0byBpcnEgbnVtYmVyLCBzYW1lIGFzIHRoZSBldnQyaXJxKCkgbWFjcm8gKi8KLQlsc3IJXGlycW5yLCBcaXJxbnIsICMweDUKLQlzdWJzCVxpcnFuciwgXGlycW5yLCAjMTYKLQotMTAwMDoKKwkubWFjcm8gIGFyY2hfcmV0X3RvX3VzZXIsIHRtcDEsIHRtcDIKIAkuZW5kbQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaCBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKaW5kZXggM2YwZWYxOS4uOTkyNjRhNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaAorKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCkBAIC0xLDcgKzEsNCBAQAogI2lmbmRlZiBfX0FTTV9NQUNIX0hBUkRXQVJFX0gKICNkZWZpbmUgX19BU01fTUFDSF9IQVJEV0FSRV9ICiAKLS8qIElOVEZMR0EgcmVnaXN0ZXIgLSB1c2VkIGJ5IGxvdyBsZXZlbCBpbnRlcnJ1cHQgY29kZSBpbiBlbnRyeS1tYWNyby5TICovCi0jZGVmaW5lIElOVEZMR0EJCQkweGU2OTgwMDE4Ci0KICNlbmRpZiAvKiBfX0FTTV9NQUNIX0hBUkRXQVJFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL2hlYWQtYXA0ZXZiLnR4dCBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL2hlYWQtYXA0ZXZiLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2ViZmE3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbmNsdWRlL21hY2gvaGVhZC1hcDRldmIudHh0CkBAIC0wLDAgKzEsODcgQEAKK0xJU1QgInBhcnRuZXItamV0LXNldHVwLnR4dCIKK0xJU1QgIihDKSBDb3B5cmlnaHQgMjAxMCBSZW5lc2FzIFNvbHV0aW9ucyBDb3JwIgorTElTVCAiS3VuaW5vcmkgTW9yaW1vdG8gPGt1bmlub3JpLm1vcmltb3RvLmd4QHJlbmVzYXMuY29tPiIKKworTElTVCAiUldUIFNldHRpbmciCitFVyAweEU2MDIwMDA0LCAweEE1MDAKK0VXIDB4RTYwMzAwMDQsIDB4QTUwMAorCitERCAweDAxMDAxMDAwLCAweDAxMDAxMDAwCisKK0xJU1QgIkdQSU8gU2V0dGluZyIKK0VCIDB4RTYwNTEwMTMsIDB4QTIKKworTElTVCAiQ1BHIgorRUQgMHhFNjE1MDA4MCwgMHgwMDAwMDE4MAorRUQgMHhFNjE1MDBDMCwgMHgwMDAwMDAwMgorCitXQUlUIDEsIDB4RkU0MDAwOUMKKworTElTVCAiRlJRQ1IiCitFRCAweEU2MTUwMDAwLCAweDJEMTMwNUMzCitFRCAweEU2MTUwMEUwLCAweDlFNDAzNThFCitFRCAweEU2MTUwMDA0LCAweDgwMzMxMDUwCisKK1dBSVQgMSwgMHhGRTQwMDA5QworCitFRCAweEU2MTUwMEU0LCAweDAwMDAyMDAwCisKK1dBSVQgMSwgMHhGRTQwMDA5QworCitMSVNUICJQTEwiCitFRCAweEU2MTUwMDI4LCAweDAwMDA0MDAwCisKK1dBSVQgMSwgMHhGRTQwMDA5QworCitFRCAweEU2MTUwMDJDLCAweDkzMDAwMDQwCisKK1dBSVQgMSwgMHhGRTQwMDA5QworCitMSVNUICJCU0MiCitFRCAweEZFQzEwMDAwLCAweDAwRTAwMDFCCisKK0xJU1QgIlNCU0MxIgorRUQgMHhGRTQwMDM1NCwgMHgwMUFEODAwMAorRUQgMHhGRTQwMDM1NCwgMHgwMUFEODAwMQorCitXQUlUIDUsIDB4RkU0MDAwOUMKKworRUQgMHhGRTQwMDAwOCwgMHhCQ0M5MDE1MQorRUQgMHhGRTQwMDA0MCwgMHg0MTc3NDExMworRUQgMHhGRTQwMDA0NCwgMHgyNzEyRTIyOQorRUQgMHhGRTQwMDA0OCwgMHgyMEMxODUwNQorRUQgMHhGRTQwMDA0QywgMHgwMDExMDIwOQorRUQgMHhGRTQwMDAxMCwgMHgwMDAwMDA4NworCitXQUlUIDEwLCAweEZFNDAwMDlDCisKK0VEIDB4RkU0MDAwODQsIDB4MDAwMDAwM0YKK0VCIDB4RkU1MDAwMDAsIDB4MDAKKworV0FJVCA1LCAweEZFNDAwMDlDCisKK0VEIDB4RkU0MDAwODQsIDB4MDAwMEZGMEEKK0VCIDB4RkU1MDAwMDAsIDB4MDAKKworV0FJVCAxLCAweEZFNDAwMDlDCisKK0VEIDB4RkU0MDAwODQsIDB4MDAwMDIyMDEKK0VCIDB4RkU1MDAwMDAsIDB4MDAKK0VEIDB4RkU0MDAwODQsIDB4MDAwMDAzMDIKK0VCIDB4RkU1MDAwMDAsIDB4MDAKK0VCIDB4RkU1QzAwMDAsIDB4MDAKK0VEIDB4RkU0MDAwMDgsIDB4QkNDOTAxNTkKK0VEIDB4RkU0MDAwOEMsIDB4ODg4MDAwMDQKK0VEIDB4RkU0MDAwOTQsIDB4MDAwMDAwMDQKK0VEIDB4RkU0MDAwMjgsIDB4QTU1QTAwMzIKK0VEIDB4RkU0MDAwMkMsIDB4QTU1QTAwMEMKK0VEIDB4RkU0MDAwMjAsIDB4QTU1QTIwNDgKK0VEIDB4RkU0MDAwMDgsIDB4QkNDOTA5NTkKKworTElTVCAiQ2hhbmdlIENQR0Egc2V0dGluZyIKK0VEIDB4RTYxNTAwRTAsIDB4OUU0MDM1MkUKK0VEIDB4RTYxNTAwMDQsIDB4ODAzMzEwNTAKKworV0FJVCAxLCAweEZFNDAwMDlDCisKK0VEIDB4RTYxNTAzNTQsIDB4MDAwMDAwMDIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL2hlYWQtbWFja2VyZWwudHh0IGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbmNsdWRlL21hY2gvaGVhZC1tYWNrZXJlbC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTNlYmZhNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL2hlYWQtbWFja2VyZWwudHh0CkBAIC0wLDAgKzEsODcgQEAKK0xJU1QgInBhcnRuZXItamV0LXNldHVwLnR4dCIKK0xJU1QgIihDKSBDb3B5cmlnaHQgMjAxMCBSZW5lc2FzIFNvbHV0aW9ucyBDb3JwIgorTElTVCAiS3VuaW5vcmkgTW9yaW1vdG8gPGt1bmlub3JpLm1vcmltb3RvLmd4QHJlbmVzYXMuY29tPiIKKworTElTVCAiUldUIFNldHRpbmciCitFVyAweEU2MDIwMDA0LCAweEE1MDAKK0VXIDB4RTYwMzAwMDQsIDB4QTUwMAorCitERCAweDAxMDAxMDAwLCAweDAxMDAxMDAwCisKK0xJU1QgIkdQSU8gU2V0dGluZyIKK0VCIDB4RTYwNTEwMTMsIDB4QTIKKworTElTVCAiQ1BHIgorRUQgMHhFNjE1MDA4MCwgMHgwMDAwMDE4MAorRUQgMHhFNjE1MDBDMCwgMHgwMDAwMDAwMgorCitXQUlUIDEsIDB4RkU0MDAwOUMKKworTElTVCAiRlJRQ1IiCitFRCAweEU2MTUwMDAwLCAweDJEMTMwNUMzCitFRCAweEU2MTUwMEUwLCAweDlFNDAzNThFCitFRCAweEU2MTUwMDA0LCAweDgwMzMxMDUwCisKK1dBSVQgMSwgMHhGRTQwMDA5QworCitFRCAweEU2MTUwMEU0LCAweDAwMDAyMDAwCisKK1dBSVQgMSwgMHhGRTQwMDA5QworCitMSVNUICJQTEwiCitFRCAweEU2MTUwMDI4LCAweDAwMDA0MDAwCisKK1dBSVQgMSwgMHhGRTQwMDA5QworCitFRCAweEU2MTUwMDJDLCAweDkzMDAwMDQwCisKK1dBSVQgMSwgMHhGRTQwMDA5QworCitMSVNUICJCU0MiCitFRCAweEZFQzEwMDAwLCAweDAwRTAwMDFCCisKK0xJU1QgIlNCU0MxIgorRUQgMHhGRTQwMDM1NCwgMHgwMUFEODAwMAorRUQgMHhGRTQwMDM1NCwgMHgwMUFEODAwMQorCitXQUlUIDUsIDB4RkU0MDAwOUMKKworRUQgMHhGRTQwMDAwOCwgMHhCQ0M5MDE1MQorRUQgMHhGRTQwMDA0MCwgMHg0MTc3NDExMworRUQgMHhGRTQwMDA0NCwgMHgyNzEyRTIyOQorRUQgMHhGRTQwMDA0OCwgMHgyMEMxODUwNQorRUQgMHhGRTQwMDA0QywgMHgwMDExMDIwOQorRUQgMHhGRTQwMDAxMCwgMHgwMDAwMDA4NworCitXQUlUIDEwLCAweEZFNDAwMDlDCisKK0VEIDB4RkU0MDAwODQsIDB4MDAwMDAwM0YKK0VCIDB4RkU1MDAwMDAsIDB4MDAKKworV0FJVCA1LCAweEZFNDAwMDlDCisKK0VEIDB4RkU0MDAwODQsIDB4MDAwMEZGMEEKK0VCIDB4RkU1MDAwMDAsIDB4MDAKKworV0FJVCAxLCAweEZFNDAwMDlDCisKK0VEIDB4RkU0MDAwODQsIDB4MDAwMDIyMDEKK0VCIDB4RkU1MDAwMDAsIDB4MDAKK0VEIDB4RkU0MDAwODQsIDB4MDAwMDAzMDIKK0VCIDB4RkU1MDAwMDAsIDB4MDAKK0VCIDB4RkU1QzAwMDAsIDB4MDAKK0VEIDB4RkU0MDAwMDgsIDB4QkNDOTAxNTkKK0VEIDB4RkU0MDAwOEMsIDB4ODg4MDAwMDQKK0VEIDB4RkU0MDAwOTQsIDB4MDAwMDAwMDQKK0VEIDB4RkU0MDAwMjgsIDB4QTU1QTAwMzIKK0VEIDB4RkU0MDAwMkMsIDB4QTU1QTAwMEMKK0VEIDB4RkU0MDAwMjAsIDB4QTU1QTIwNDgKK0VEIDB4RkU0MDAwMDgsIDB4QkNDOTA5NTkKKworTElTVCAiQ2hhbmdlIENQR0Egc2V0dGluZyIKK0VEIDB4RTYxNTAwRTAsIDB4OUU0MDM1MkUKK0VEIDB4RTYxNTAwMDQsIDB4ODAzMzEwNTAKKworV0FJVCAxLCAweEZFNDAwMDlDCisKK0VEIDB4RTYxNTAzNTQsIDB4MDAwMDAwMDIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL2lycXMuaCBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL2lycXMuaAppbmRleCBmYTE1YjVmLi5kY2I3MTRmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2luY2x1ZGUvbWFjaC9pcnFzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbmNsdWRlL21hY2gvaXJxcy5oCkBAIC0xLDcgKzEsMTAgQEAKICNpZm5kZWYgX19BU01fTUFDSF9JUlFTX0gKICNkZWZpbmUgX19BU01fTUFDSF9JUlFTX0gKIAotI2RlZmluZSBOUl9JUlFTICAgICAgICAgNTEyCisjZGVmaW5lIE5SX0lSUVMgICAgICAgICAxMDI0CisKKy8qIEdJQyAqLworI2RlZmluZSBnaWNfc3BpKG5yKQkJKChucikgKyAzMikKIAogLyogSU5UQ0EgKi8KICNkZWZpbmUgZXZ0MmlycShldnQpCQkoKChldnQpID4+IDUpIC0gMTYpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2luY2x1ZGUvbWFjaC9zaDczNzIuaCBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL3NoNzM3Mi5oCmluZGV4IGU0ZjkwMDQuLjU3MzZlZmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL3NoNzM3Mi5oCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL3NoNzM3Mi5oCkBAIC00NTUsNiArNDU1LDggQEAKIAlTSERNQV9TTEFWRV9TREhJMV9UWCwKIAlTSERNQV9TTEFWRV9TREhJMl9SWCwKIAlTSERNQV9TTEFWRV9TREhJMl9UWCwKKwlTSERNQV9TTEFWRV9NTUNJRl9SWCwKKwlTSERNQV9TTEFWRV9NTUNJRl9UWCwKIH07CiAKIGV4dGVybiBzdHJ1Y3QgY2xrIHNoNzM3Ml9leHRhbDFfY2xrOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbmNsdWRlL21hY2gvc2g3M2EwLmggYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2luY2x1ZGUvbWFjaC9zaDczYTAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWIyY2RjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbmNsdWRlL21hY2gvc2g3M2EwLmgKQEAgLTAsMCArMSw0NjcgQEAKKyNpZm5kZWYgX19BU01fU0g3M0EwX0hfXworI2RlZmluZSBfX0FTTV9TSDczQTBfSF9fCisKKy8qIFBpbiBGdW5jdGlvbiBDb250cm9sbGVyOgorICogR1BJT19GTl94eCAtIEdQSU8gdXNlZCB0byBzZWxlY3QgcGluIGZ1bmN0aW9uIGFuZCBNU0VMIHN3aXRjaAorICogR1BJT19QT1JUeHggLSBHUElPIG1hcHBlZCB0byByZWFsIEkvTyBwaW4gb24gQ1BVCisgKi8KK2VudW0geworCS8qIEhhcmR3YXJlIG1hbnVhbCBUYWJsZSAyNS0xIChHUElPKSAqLworCUdQSU9fUE9SVDAsIEdQSU9fUE9SVDEsIEdQSU9fUE9SVDIsIEdQSU9fUE9SVDMsIEdQSU9fUE9SVDQsCisJR1BJT19QT1JUNSwgR1BJT19QT1JUNiwgR1BJT19QT1JUNywgR1BJT19QT1JUOCwgR1BJT19QT1JUOSwKKworCUdQSU9fUE9SVDEwLCBHUElPX1BPUlQxMSwgR1BJT19QT1JUMTIsIEdQSU9fUE9SVDEzLCBHUElPX1BPUlQxNCwKKwlHUElPX1BPUlQxNSwgR1BJT19QT1JUMTYsIEdQSU9fUE9SVDE3LCBHUElPX1BPUlQxOCwgR1BJT19QT1JUMTksCisKKwlHUElPX1BPUlQyMCwgR1BJT19QT1JUMjEsIEdQSU9fUE9SVDIyLCBHUElPX1BPUlQyMywgR1BJT19QT1JUMjQsCisJR1BJT19QT1JUMjUsIEdQSU9fUE9SVDI2LCBHUElPX1BPUlQyNywgR1BJT19QT1JUMjgsIEdQSU9fUE9SVDI5LAorCisJR1BJT19QT1JUMzAsIEdQSU9fUE9SVDMxLCBHUElPX1BPUlQzMiwgR1BJT19QT1JUMzMsIEdQSU9fUE9SVDM0LAorCUdQSU9fUE9SVDM1LCBHUElPX1BPUlQzNiwgR1BJT19QT1JUMzcsIEdQSU9fUE9SVDM4LCBHUElPX1BPUlQzOSwKKworCUdQSU9fUE9SVDQwLCBHUElPX1BPUlQ0MSwgR1BJT19QT1JUNDIsIEdQSU9fUE9SVDQzLCBHUElPX1BPUlQ0NCwKKwlHUElPX1BPUlQ0NSwgR1BJT19QT1JUNDYsIEdQSU9fUE9SVDQ3LCBHUElPX1BPUlQ0OCwgR1BJT19QT1JUNDksCisKKwlHUElPX1BPUlQ1MCwgR1BJT19QT1JUNTEsIEdQSU9fUE9SVDUyLCBHUElPX1BPUlQ1MywgR1BJT19QT1JUNTQsCisJR1BJT19QT1JUNTUsIEdQSU9fUE9SVDU2LCBHUElPX1BPUlQ1NywgR1BJT19QT1JUNTgsIEdQSU9fUE9SVDU5LAorCisJR1BJT19QT1JUNjAsIEdQSU9fUE9SVDYxLCBHUElPX1BPUlQ2MiwgR1BJT19QT1JUNjMsIEdQSU9fUE9SVDY0LAorCUdQSU9fUE9SVDY1LCBHUElPX1BPUlQ2NiwgR1BJT19QT1JUNjcsIEdQSU9fUE9SVDY4LCBHUElPX1BPUlQ2OSwKKworCUdQSU9fUE9SVDcwLCBHUElPX1BPUlQ3MSwgR1BJT19QT1JUNzIsIEdQSU9fUE9SVDczLCBHUElPX1BPUlQ3NCwKKwlHUElPX1BPUlQ3NSwgR1BJT19QT1JUNzYsIEdQSU9fUE9SVDc3LCBHUElPX1BPUlQ3OCwgR1BJT19QT1JUNzksCisKKwlHUElPX1BPUlQ4MCwgR1BJT19QT1JUODEsIEdQSU9fUE9SVDgyLCBHUElPX1BPUlQ4MywgR1BJT19QT1JUODQsCisJR1BJT19QT1JUODUsIEdQSU9fUE9SVDg2LCBHUElPX1BPUlQ4NywgR1BJT19QT1JUODgsIEdQSU9fUE9SVDg5LAorCisJR1BJT19QT1JUOTAsIEdQSU9fUE9SVDkxLCBHUElPX1BPUlQ5MiwgR1BJT19QT1JUOTMsIEdQSU9fUE9SVDk0LAorCUdQSU9fUE9SVDk1LCBHUElPX1BPUlQ5NiwgR1BJT19QT1JUOTcsIEdQSU9fUE9SVDk4LCBHUElPX1BPUlQ5OSwKKworCUdQSU9fUE9SVDEwMCwgR1BJT19QT1JUMTAxLCBHUElPX1BPUlQxMDIsIEdQSU9fUE9SVDEwMywgR1BJT19QT1JUMTA0LAorCUdQSU9fUE9SVDEwNSwgR1BJT19QT1JUMTA2LCBHUElPX1BPUlQxMDcsIEdQSU9fUE9SVDEwOCwgR1BJT19QT1JUMTA5LAorCisJR1BJT19QT1JUMTEwLCBHUElPX1BPUlQxMTEsIEdQSU9fUE9SVDExMiwgR1BJT19QT1JUMTEzLCBHUElPX1BPUlQxMTQsCisJR1BJT19QT1JUMTE1LCBHUElPX1BPUlQxMTYsIEdQSU9fUE9SVDExNywgR1BJT19QT1JUMTE4LAorCisJR1BJT19QT1JUMTI4LCBHUElPX1BPUlQxMjksCisKKwlHUElPX1BPUlQxMzAsIEdQSU9fUE9SVDEzMSwgR1BJT19QT1JUMTMyLCBHUElPX1BPUlQxMzMsIEdQSU9fUE9SVDEzNCwKKwlHUElPX1BPUlQxMzUsIEdQSU9fUE9SVDEzNiwgR1BJT19QT1JUMTM3LCBHUElPX1BPUlQxMzgsIEdQSU9fUE9SVDEzOSwKKworCUdQSU9fUE9SVDE0MCwgR1BJT19QT1JUMTQxLCBHUElPX1BPUlQxNDIsIEdQSU9fUE9SVDE0MywgR1BJT19QT1JUMTQ0LAorCUdQSU9fUE9SVDE0NSwgR1BJT19QT1JUMTQ2LCBHUElPX1BPUlQxNDcsIEdQSU9fUE9SVDE0OCwgR1BJT19QT1JUMTQ5LAorCisJR1BJT19QT1JUMTUwLCBHUElPX1BPUlQxNTEsIEdQSU9fUE9SVDE1MiwgR1BJT19QT1JUMTUzLCBHUElPX1BPUlQxNTQsCisJR1BJT19QT1JUMTU1LCBHUElPX1BPUlQxNTYsIEdQSU9fUE9SVDE1NywgR1BJT19QT1JUMTU4LCBHUElPX1BPUlQxNTksCisKKwlHUElPX1BPUlQxNjAsIEdQSU9fUE9SVDE2MSwgR1BJT19QT1JUMTYyLCBHUElPX1BPUlQxNjMsIEdQSU9fUE9SVDE2NCwKKworCUdQSU9fUE9SVDE5MiwgR1BJT19QT1JUMTkzLCBHUElPX1BPUlQxOTQsCisJR1BJT19QT1JUMTk1LCBHUElPX1BPUlQxOTYsIEdQSU9fUE9SVDE5NywgR1BJT19QT1JUMTk4LCBHUElPX1BPUlQxOTksCisKKwlHUElPX1BPUlQyMDAsIEdQSU9fUE9SVDIwMSwgR1BJT19QT1JUMjAyLCBHUElPX1BPUlQyMDMsIEdQSU9fUE9SVDIwNCwKKwlHUElPX1BPUlQyMDUsIEdQSU9fUE9SVDIwNiwgR1BJT19QT1JUMjA3LCBHUElPX1BPUlQyMDgsIEdQSU9fUE9SVDIwOSwKKworCUdQSU9fUE9SVDIxMCwgR1BJT19QT1JUMjExLCBHUElPX1BPUlQyMTIsIEdQSU9fUE9SVDIxMywgR1BJT19QT1JUMjE0LAorCUdQSU9fUE9SVDIxNSwgR1BJT19QT1JUMjE2LCBHUElPX1BPUlQyMTcsIEdQSU9fUE9SVDIxOCwgR1BJT19QT1JUMjE5LAorCisJR1BJT19QT1JUMjIwLCBHUElPX1BPUlQyMjEsIEdQSU9fUE9SVDIyMiwgR1BJT19QT1JUMjIzLCBHUElPX1BPUlQyMjQsCisJR1BJT19QT1JUMjI1LCBHUElPX1BPUlQyMjYsIEdQSU9fUE9SVDIyNywgR1BJT19QT1JUMjI4LCBHUElPX1BPUlQyMjksCisKKwlHUElPX1BPUlQyMzAsIEdQSU9fUE9SVDIzMSwgR1BJT19QT1JUMjMyLCBHUElPX1BPUlQyMzMsIEdQSU9fUE9SVDIzNCwKKwlHUElPX1BPUlQyMzUsIEdQSU9fUE9SVDIzNiwgR1BJT19QT1JUMjM3LCBHUElPX1BPUlQyMzgsIEdQSU9fUE9SVDIzOSwKKworCUdQSU9fUE9SVDI0MCwgR1BJT19QT1JUMjQxLCBHUElPX1BPUlQyNDIsIEdQSU9fUE9SVDI0MywgR1BJT19QT1JUMjQ0LAorCUdQSU9fUE9SVDI0NSwgR1BJT19QT1JUMjQ2LCBHUElPX1BPUlQyNDcsIEdQSU9fUE9SVDI0OCwgR1BJT19QT1JUMjQ5LAorCisJR1BJT19QT1JUMjUwLCBHUElPX1BPUlQyNTEsIEdQSU9fUE9SVDI1MiwgR1BJT19QT1JUMjUzLCBHUElPX1BPUlQyNTQsCisJR1BJT19QT1JUMjU1LCBHUElPX1BPUlQyNTYsIEdQSU9fUE9SVDI1NywgR1BJT19QT1JUMjU4LCBHUElPX1BPUlQyNTksCisKKwlHUElPX1BPUlQyNjAsIEdQSU9fUE9SVDI2MSwgR1BJT19QT1JUMjYyLCBHUElPX1BPUlQyNjMsIEdQSU9fUE9SVDI2NCwKKwlHUElPX1BPUlQyNjUsIEdQSU9fUE9SVDI2NiwgR1BJT19QT1JUMjY3LCBHUElPX1BPUlQyNjgsIEdQSU9fUE9SVDI2OSwKKworCUdQSU9fUE9SVDI3MCwgR1BJT19QT1JUMjcxLCBHUElPX1BPUlQyNzIsIEdQSU9fUE9SVDI3MywgR1BJT19QT1JUMjc0LAorCUdQSU9fUE9SVDI3NSwgR1BJT19QT1JUMjc2LCBHUElPX1BPUlQyNzcsIEdQSU9fUE9SVDI3OCwgR1BJT19QT1JUMjc5LAorCisJR1BJT19QT1JUMjgwLCBHUElPX1BPUlQyODEsIEdQSU9fUE9SVDI4MiwKKworCUdQSU9fUE9SVDI4OCwgR1BJT19QT1JUMjg5LAorCisJR1BJT19QT1JUMjkwLCBHUElPX1BPUlQyOTEsIEdQSU9fUE9SVDI5MiwgR1BJT19QT1JUMjkzLCBHUElPX1BPUlQyOTQsCisJR1BJT19QT1JUMjk1LCBHUElPX1BPUlQyOTYsIEdQSU9fUE9SVDI5NywgR1BJT19QT1JUMjk4LCBHUElPX1BPUlQyOTksCisKKwlHUElPX1BPUlQzMDAsIEdQSU9fUE9SVDMwMSwgR1BJT19QT1JUMzAyLCBHUElPX1BPUlQzMDMsIEdQSU9fUE9SVDMwNCwKKwlHUElPX1BPUlQzMDUsIEdQSU9fUE9SVDMwNiwgR1BJT19QT1JUMzA3LCBHUElPX1BPUlQzMDgsIEdQSU9fUE9SVDMwOSwKKworCS8qIFRhYmxlIDI1LTEgKEZ1bmN0aW9uIDAtNykgKi8KKwlHUElPX0ZOX1ZCVVNfMCwKKwlHUElPX0ZOX0dQSTAsCisJR1BJT19GTl9HUEkxLAorCUdQSU9fRk5fR1BJMiwKKwlHUElPX0ZOX0dQSTMsCisJR1BJT19GTl9HUEk0LAorCUdQSU9fRk5fR1BJNSwKKwlHUElPX0ZOX0dQSTYsCisJR1BJT19GTl9HUEk3LAorCUdQSU9fRk5fU0NJRkE3X1JYRCwKKwlHUElPX0ZOX1NDSUZBN19DVFNfLAorCUdQSU9fRk5fR1BPNywgR1BJT19GTl9NRkcwX09VVDIsCisJR1BJT19GTl9HUE82LCBHUElPX0ZOX01GRzFfT1VUMiwKKwlHUElPX0ZOX0dQTzUsIEdQSU9fRk5fU0NJRkEwX1NDSywgR1BJT19GTl9GU0lDT1NMRFQzLCBcCisJR1BJT19GTl9QT1JUMTZfVklPX0NLT1IsCisJR1BJT19GTl9TQ0lGQTBfVFhELAorCUdQSU9fRk5fU0NJRkE3X1RYRCwKKwlHUElPX0ZOX1NDSUZBN19SVFNfLCBHUElPX0ZOX1BPUlQxOV9WSU9fQ0tPMiwKKwlHUElPX0ZOX0dQTzAsCisJR1BJT19GTl9HUE8xLAorCUdQSU9fRk5fR1BPMiwgR1BJT19GTl9TVEFUVVMwLAorCUdQSU9fRk5fR1BPMywgR1BJT19GTl9TVEFUVVMxLAorCUdQSU9fRk5fR1BPNCwgR1BJT19GTl9TVEFUVVMyLAorCUdQSU9fRk5fVklOVCwKKwlHUElPX0ZOX1RDS09OLAorCUdQSU9fRk5fWERWRlMxLCBHUElPX0ZOX1BPUlQyN19JMkNfU0NMMiwgR1BJT19GTl9QT1JUMjdfSTJDX1NDTDMsIFwKKwlHUElPX0ZOX01GRzBfT1VUMSwgR1BJT19GTl9QT1JUMjdfSVJPVVQsCisJR1BJT19GTl9YRFZGUzIsIEdQSU9fRk5fUE9SVDI4X0kyQ19TREEyLCBHUElPX0ZOX1BPUlQyOF9JMkNfU0RBMywgXAorCUdQSU9fRk5fUE9SVDI4X1RQVTFUTzEsCisJR1BJT19GTl9TSU1fUlNULCBHUElPX0ZOX1BPUlQyOV9UUFUxVE8xLAorCUdQSU9fRk5fU0lNX0NMSywgR1BJT19GTl9QT1JUMzBfVklPX0NLT1IsCisJR1BJT19GTl9TSU1fRCwgR1BJT19GTl9QT1JUMzFfSVJPVVQsCisJR1BJT19GTl9TQ0lGQTRfVFhELAorCUdQSU9fRk5fU0NJRkE0X1JYRCwgR1BJT19GTl9YV1VQLAorCUdQSU9fRk5fU0NJRkE0X1JUU18sCisJR1BJT19GTl9TQ0lGQTRfQ1RTXywKKwlHUElPX0ZOX0ZTSUJPQlQsIEdQSU9fRk5fRlNJQklCVCwKKwlHUElPX0ZOX0ZTSUJPTFIsIEdQSU9fRk5fRlNJQklMUiwKKwlHUElPX0ZOX0ZTSUJPU0xELAorCUdQSU9fRk5fRlNJQklTTEQsCisJR1BJT19GTl9WQUNLLAorCUdQSU9fRk5fWFRBTDFMLAorCUdQSU9fRk5fU0NJRkEwX1JUU18sIEdQSU9fRk5fRlNJQ09TTERUMiwKKwlHUElPX0ZOX1NDSUZBMF9SWEQsCisJR1BJT19GTl9TQ0lGQTBfQ1RTXywgR1BJT19GTl9GU0lDT1NMRFQxLAorCUdQSU9fRk5fRlNJQ09CVCwgR1BJT19GTl9GU0lDSUJULCBHUElPX0ZOX0ZTSURPQlQsIEdQSU9fRk5fRlNJRElCVCwKKwlHUElPX0ZOX0ZTSUNPTFIsIEdQSU9fRk5fRlNJQ0lMUiwgR1BJT19GTl9GU0lET0xSLCBHUElPX0ZOX0ZTSURJTFIsCisJR1BJT19GTl9GU0lDT1NMRCwgR1BJT19GTl9QT1JUNDdfRlNJQ1NQRElGLAorCUdQSU9fRk5fRlNJQ0lTTEQsIEdQSU9fRk5fRlNJRElTTEQsCisJR1BJT19GTl9GU0lBQ0ssIEdQSU9fRk5fUE9SVDQ5X0lSREFfT1VULCBHUElPX0ZOX1BPUlQ0OV9JUk9VVCwgXAorCUdQSU9fRk5fRlNJQU9NQywKKwlHUElPX0ZOX0ZTSUFPTFIsIEdQSU9fRk5fQkJJRjJfVFNZTkMyLCBHUElPX0ZOX1RQVTJUTzIsIEdQSU9fRk5fRlNJQUlMUiwKKworCUdQSU9fRk5fRlNJQU9CVCwgR1BJT19GTl9CQklGMl9UU0NLMiwgR1BJT19GTl9UUFUyVE8zLCBHUElPX0ZOX0ZTSUFJQlQsCisJR1BJT19GTl9GU0lBT1NMRCwgR1BJT19GTl9CQklGMl9UWEQyLAorCUdQSU9fRk5fRlNJQVNQRElGLCBHUElPX0ZOX1BPUlQ1M19JUkRBX0lOLCBHUElPX0ZOX1RQVTNUTzMsIFwKKwlHUElPX0ZOX0ZTSUJTUERJRiwgR1BJT19GTl9QT1JUNTNfRlNJQ1NQRElGLAorCUdQSU9fRk5fRlNJQkNLLCBHUElPX0ZOX1BPUlQ1NF9JUkRBX0ZJUlNFTCwgR1BJT19GTl9UUFUzVE8yLCBcCisJR1BJT19GTl9GU0lCT01DLCBHUElPX0ZOX0ZTSUNDSywgR1BJT19GTl9GU0lDT01DLAorCUdQSU9fRk5fRlNJQUlTTEQsIEdQSU9fRk5fVFBVMFRPMCwKKwlHUElPX0ZOX0EwLCBHUElPX0ZOX0JTXywKKwlHUElPX0ZOX0ExMiwgR1BJT19GTl9QT1JUNThfS0VZT1VUNywgR1BJT19GTl9UUFU0VE8yLAorCUdQSU9fRk5fQTEzLCBHUElPX0ZOX1BPUlQ1OV9LRVlPVVQ2LCBHUElPX0ZOX1RQVTBUTzEsCisJR1BJT19GTl9BMTQsIEdQSU9fRk5fS0VZT1VUNSwKKwlHUElPX0ZOX0ExNSwgR1BJT19GTl9LRVlPVVQ0LAorCUdQSU9fRk5fQTE2LCBHUElPX0ZOX0tFWU9VVDMsIEdQSU9fRk5fTVNJT0YwX1NTMSwKKwlHUElPX0ZOX0ExNywgR1BJT19GTl9LRVlPVVQyLCBHUElPX0ZOX01TSU9GMF9UU1lOQywKKwlHUElPX0ZOX0ExOCwgR1BJT19GTl9LRVlPVVQxLCBHUElPX0ZOX01TSU9GMF9UU0NLLAorCUdQSU9fRk5fQTE5LCBHUElPX0ZOX0tFWU9VVDAsIEdQSU9fRk5fTVNJT0YwX1RYRCwKKwlHUElPX0ZOX0EyMCwgR1BJT19GTl9LRVlJTjAsIEdQSU9fRk5fTVNJT0YwX1JTQ0ssCisJR1BJT19GTl9BMjEsIEdQSU9fRk5fS0VZSU4xLCBHUElPX0ZOX01TSU9GMF9SU1lOQywKKwlHUElPX0ZOX0EyMiwgR1BJT19GTl9LRVlJTjIsIEdQSU9fRk5fTVNJT0YwX01DSzAsCisJR1BJT19GTl9BMjMsIEdQSU9fRk5fS0VZSU4zLCBHUElPX0ZOX01TSU9GMF9NQ0sxLAorCUdQSU9fRk5fQTI0LCBHUElPX0ZOX0tFWUlONCwgR1BJT19GTl9NU0lPRjBfUlhELAorCUdQSU9fRk5fQTI1LCBHUElPX0ZOX0tFWUlONSwgR1BJT19GTl9NU0lPRjBfU1MyLAorCUdQSU9fRk5fQTI2LCBHUElPX0ZOX0tFWUlONiwKKwlHUElPX0ZOX0tFWUlONywKKwlHUElPX0ZOX0QwX05BRjAsCisJR1BJT19GTl9EMV9OQUYxLAorCUdQSU9fRk5fRDJfTkFGMiwKKwlHUElPX0ZOX0QzX05BRjMsCisJR1BJT19GTl9ENF9OQUY0LAorCUdQSU9fRk5fRDVfTkFGNSwKKwlHUElPX0ZOX0Q2X05BRjYsCisJR1BJT19GTl9EN19OQUY3LAorCUdQSU9fRk5fRDhfTkFGOCwKKwlHUElPX0ZOX0Q5X05BRjksCisJR1BJT19GTl9EMTBfTkFGMTAsCisJR1BJT19GTl9EMTFfTkFGMTEsCisJR1BJT19GTl9EMTJfTkFGMTIsCisJR1BJT19GTl9EMTNfTkFGMTMsCisJR1BJT19GTl9EMTRfTkFGMTQsCisJR1BJT19GTl9EMTVfTkFGMTUsCisJR1BJT19GTl9DUzRfLAorCUdQSU9fRk5fQ1M1QV8sIEdQSU9fRk5fUE9SVDkxX1JEV1IsCisJR1BJT19GTl9DUzVCXywgR1BJT19GTl9GQ0UxXywKKwlHUElPX0ZOX0NTNkJfLCBHUElPX0ZOX0RBQ0swLAorCUdQSU9fRk5fRkNFMF8sIEdQSU9fRk5fQ1M2QV8sCisJR1BJT19GTl9XQUlUXywgR1BJT19GTl9EUkVRMCwKKwlHUElPX0ZOX1JEX19GU0MsCisJR1BJT19GTl9XRTBfX0ZXRSwgR1BJT19GTl9SRFdSX0ZXRSwKKwlHUElPX0ZOX1dFMV8sCisJR1BJT19GTl9GUkIsCisJR1BJT19GTl9DS08sCisJR1BJT19GTl9OQlJTVE9VVF8sCisJR1BJT19GTl9OQlJTVF8sCisJR1BJT19GTl9CQklGMl9UWEQsCisJR1BJT19GTl9CQklGMl9SWEQsCisJR1BJT19GTl9CQklGMl9TWU5DLAorCUdQSU9fRk5fQkJJRjJfU0NLLAorCUdQSU9fRk5fU0NJRkEzX0NUU18sIEdQSU9fRk5fTUZHM19JTjIsCisJR1BJT19GTl9TQ0lGQTNfUlhELCBHUElPX0ZOX01GRzNfSU4xLAorCUdQSU9fRk5fQkJJRjFfU1MyLCBHUElPX0ZOX1NDSUZBM19SVFNfLCBHUElPX0ZOX01GRzNfT1VUMSwKKwlHUElPX0ZOX1NDSUZBM19UWEQsCisJR1BJT19GTl9IU0lfUlhfREFUQSwgR1BJT19GTl9CQklGMV9SWEQsCisJR1BJT19GTl9IU0lfVFhfV0FLRSwgR1BJT19GTl9CQklGMV9UU0NLLAorCUdQSU9fRk5fSFNJX1RYX0RBVEEsIEdQSU9fRk5fQkJJRjFfVFNZTkMsCisJR1BJT19GTl9IU0lfVFhfUkVBRFksIEdQSU9fRk5fQkJJRjFfVFhELAorCUdQSU9fRk5fSFNJX1JYX1JFQURZLCBHUElPX0ZOX0JCSUYxX1JTQ0ssIEdQSU9fRk5fUE9SVDExNV9JMkNfU0NMMiwgXAorCUdQSU9fRk5fUE9SVDExNV9JMkNfU0NMMywKKwlHUElPX0ZOX0hTSV9SWF9XQUtFLCBHUElPX0ZOX0JCSUYxX1JTWU5DLCBHUElPX0ZOX1BPUlQxMTZfSTJDX1NEQTIsIFwKKwlHUElPX0ZOX1BPUlQxMTZfSTJDX1NEQTMsCisJR1BJT19GTl9IU0lfUlhfRkxBRywgR1BJT19GTl9CQklGMV9TUzEsIEdQSU9fRk5fQkJJRjFfRkxPVywKKwlHUElPX0ZOX0hTSV9UWF9GTEFHLAorCUdQSU9fRk5fVklPX1ZELCBHUElPX0ZOX1BPUlQxMjhfTENEMlZTWU4sIEdQSU9fRk5fVklPMl9WRCwgXAorCUdQSU9fRk5fTENEMkQwLAorCisJR1BJT19GTl9WSU9fSEQsIEdQSU9fRk5fUE9SVDEyOV9MQ0QySFNZTiwgR1BJT19GTl9QT1JUMTI5X0xDRDJDU18sIFwKKwlHUElPX0ZOX1ZJTzJfSEQsIEdQSU9fRk5fTENEMkQxLAorCUdQSU9fRk5fVklPX0QwLCBHUElPX0ZOX1BPUlQxMzBfTVNJT0YyX1JYRCwgR1BJT19GTl9MQ0QyRDEwLAorCUdQSU9fRk5fVklPX0QxLCBHUElPX0ZOX1BPUlQxMzFfS0VZT1VUNiwgR1BJT19GTl9QT1JUMTMxX01TSU9GMl9TUzEsIFwKKwlHUElPX0ZOX1BPUlQxMzFfS0VZT1VUMTEsIEdQSU9fRk5fTENEMkQxMSwKKwlHUElPX0ZOX1ZJT19EMiwgR1BJT19GTl9QT1JUMTMyX0tFWU9VVDcsIEdQSU9fRk5fUE9SVDEzMl9NU0lPRjJfU1MyLCBcCisJR1BJT19GTl9QT1JUMTMyX0tFWU9VVDEwLCBHUElPX0ZOX0xDRDJEMTIsCisJR1BJT19GTl9WSU9fRDMsIEdQSU9fRk5fTVNJT0YyX1RTWU5DLCBHUElPX0ZOX0xDRDJEMTMsCisJR1BJT19GTl9WSU9fRDQsIEdQSU9fRk5fTVNJT0YyX1RYRCwgR1BJT19GTl9MQ0QyRDE0LAorCUdQSU9fRk5fVklPX0Q1LCBHUElPX0ZOX01TSU9GMl9UU0NLLCBHUElPX0ZOX0xDRDJEMTUsCisJR1BJT19GTl9WSU9fRDYsIEdQSU9fRk5fUE9SVDEzNl9LRVlPVVQ4LCBHUElPX0ZOX0xDRDJEMTYsCisJR1BJT19GTl9WSU9fRDcsIEdQSU9fRk5fUE9SVDEzN19LRVlPVVQ5LCBHUElPX0ZOX0xDRDJEMTcsCisJR1BJT19GTl9WSU9fRDgsIEdQSU9fRk5fUE9SVDEzOF9LRVlPVVQ4LCBHUElPX0ZOX1ZJTzJfRDAsIFwKKwlHUElPX0ZOX0xDRDJENiwKKwlHUElPX0ZOX1ZJT19EOSwgR1BJT19GTl9QT1JUMTM5X0tFWU9VVDksIEdQSU9fRk5fVklPMl9EMSwgXAorCUdQSU9fRk5fTENEMkQ3LAorCUdQSU9fRk5fVklPX0QxMCwgR1BJT19GTl9UUFUwVE8yLCBHUElPX0ZOX1ZJTzJfRDIsIEdQSU9fRk5fTENEMkQ4LAorCUdQSU9fRk5fVklPX0QxMSwgR1BJT19GTl9UUFUwVE8zLCBHUElPX0ZOX1ZJTzJfRDMsIEdQSU9fRk5fTENEMkQ5LAorCUdQSU9fRk5fVklPX0QxMiwgR1BJT19GTl9QT1JUMTQyX0tFWU9VVDEwLCBHUElPX0ZOX1ZJTzJfRDQsIFwKKwlHUElPX0ZOX0xDRDJEMiwKKwlHUElPX0ZOX1ZJT19EMTMsIEdQSU9fRk5fUE9SVDE0M19LRVlPVVQxMSwgR1BJT19GTl9QT1JUMTQzX0tFWU9VVDYsIFwKKwlHUElPX0ZOX1ZJTzJfRDUsIEdQSU9fRk5fTENEMkQzLAorCUdQSU9fRk5fVklPX0QxNCwgR1BJT19GTl9QT1JUMTQ0X0tFWU9VVDcsIEdQSU9fRk5fVklPMl9ENiwgXAorCUdQSU9fRk5fTENEMkQ0LAorCUdQSU9fRk5fVklPX0QxNSwgR1BJT19GTl9UUFUxVE8zLCBHUElPX0ZOX1BPUlQxNDVfTENEMkRJU1AsIFwKKwlHUElPX0ZOX1BPUlQxNDVfTENEMlJTLCBHUElPX0ZOX1ZJTzJfRDcsIEdQSU9fRk5fTENEMkQ1LAorCUdQSU9fRk5fVklPX0NMSywgR1BJT19GTl9MQ0QyRENLLCBHUElPX0ZOX1BPUlQxNDZfTENEMldSXywgXAorCUdQSU9fRk5fVklPMl9DTEssIEdQSU9fRk5fTENEMkQxOCwKKwlHUElPX0ZOX1ZJT19GSUVMRCwgR1BJT19GTl9MQ0QyUkRfLCBHUElPX0ZOX1ZJTzJfRklFTEQsIEdQSU9fRk5fTENEMkQxOSwKKwlHUElPX0ZOX1ZJT19DS08sCisJR1BJT19GTl9BMjcsIEdQSU9fRk5fUE9SVDE0OV9SRFdSLCBHUElPX0ZOX01GRzBfSU4xLCBcCisJR1BJT19GTl9QT1JUMTQ5X0tFWU9VVDksCisJR1BJT19GTl9NRkcwX0lOMiwKKwlHUElPX0ZOX1RTX1NQU1lOQzMsIEdQSU9fRk5fTVNJT0YyX1JTQ0ssCisJR1BJT19GTl9UU19TREFUMywgR1BJT19GTl9NU0lPRjJfUlNZTkMsCisJR1BJT19GTl9UUFUxVE8yLCBHUElPX0ZOX1RTX1NERU4zLCBHUElPX0ZOX1BPUlQxNTNfTVNJT0YyX1NTMSwKKwlHUElPX0ZOX1NDSUZBMl9UWEQxLCBHUElPX0ZOX01TSU9GMl9NQ0swLAorCUdQSU9fRk5fU0NJRkEyX1JYRDEsIEdQSU9fRk5fTVNJT0YyX01DSzEsCisJR1BJT19GTl9TQ0lGQTJfUlRTMV8sIEdQSU9fRk5fUE9SVDE1Nl9NU0lPRjJfU1MyLAorCUdQSU9fRk5fU0NJRkEyX0NUUzFfLCBHUElPX0ZOX1BPUlQxNTdfTVNJT0YyX1JYRCwKKwlHUElPX0ZOX0RJTlRfLCBHUElPX0ZOX1NDSUZBMl9TQ0sxLCBHUElPX0ZOX1RTX1NDSzMsCisJR1BJT19GTl9QT1JUMTU5X1NDSUZCX1NDSywgR1BJT19GTl9QT1JUMTU5X1NDSUZBNV9TQ0ssIEdQSU9fRk5fTk1JLAorCUdQSU9fRk5fUE9SVDE2MF9TQ0lGQl9UWEQsIEdQSU9fRk5fUE9SVDE2MF9TQ0lGQTVfVFhELAorCUdQSU9fRk5fUE9SVDE2MV9TQ0lGQl9DVFNfLCBHUElPX0ZOX1BPUlQxNjFfU0NJRkE1X0NUU18sCisJR1BJT19GTl9QT1JUMTYyX1NDSUZCX1JYRCwgR1BJT19GTl9QT1JUMTYyX1NDSUZBNV9SWEQsCisJR1BJT19GTl9QT1JUMTYzX1NDSUZCX1JUU18sIEdQSU9fRk5fUE9SVDE2M19TQ0lGQTVfUlRTXywgXAorCUdQSU9fRk5fVFBVM1RPMCwKKwlHUElPX0ZOX0xDREQwLAorCUdQSU9fRk5fTENERDEsIEdQSU9fRk5fUE9SVDE5M19TQ0lGQTVfQ1RTXywgR1BJT19GTl9CQklGMl9UU1lOQzEsCisJR1BJT19GTl9MQ0REMiwgR1BJT19GTl9QT1JUMTk0X1NDSUZBNV9SVFNfLCBHUElPX0ZOX0JCSUYyX1RTQ0sxLAorCUdQSU9fRk5fTENERDMsIEdQSU9fRk5fUE9SVDE5NV9TQ0lGQTVfUlhELCBHUElPX0ZOX0JCSUYyX1RYRDEsCisJR1BJT19GTl9MQ0RENCwgR1BJT19GTl9QT1JUMTk2X1NDSUZBNV9UWEQsCisJR1BJT19GTl9MQ0RENSwgR1BJT19GTl9QT1JUMTk3X1NDSUZBNV9TQ0ssIEdQSU9fRk5fTUZHMl9PVVQyLCBcCisJR1BJT19GTl9UUFUyVE8xLAorCUdQSU9fRk5fTENERDYsCisJR1BJT19GTl9MQ0RENywgR1BJT19GTl9UUFU0VE8xLCBHUElPX0ZOX01GRzRfT1VUMiwKKwlHUElPX0ZOX0xDREQ4LCBHUElPX0ZOX0QxNiwKKwlHUElPX0ZOX0xDREQ5LCBHUElPX0ZOX0QxNywKKwlHUElPX0ZOX0xDREQxMCwgR1BJT19GTl9EMTgsCisJR1BJT19GTl9MQ0REMTEsIEdQSU9fRk5fRDE5LAorCUdQSU9fRk5fTENERDEyLCBHUElPX0ZOX0QyMCwKKwlHUElPX0ZOX0xDREQxMywgR1BJT19GTl9EMjEsCisJR1BJT19GTl9MQ0REMTQsIEdQSU9fRk5fRDIyLAorCUdQSU9fRk5fTENERDE1LCBHUElPX0ZOX1BPUlQyMDdfTVNJT0YwTF9TUzEsIEdQSU9fRk5fRDIzLAorCUdQSU9fRk5fTENERDE2LCBHUElPX0ZOX1BPUlQyMDhfTVNJT0YwTF9TUzIsIEdQSU9fRk5fRDI0LAorCUdQSU9fRk5fTENERDE3LCBHUElPX0ZOX0QyNSwKKwlHUElPX0ZOX0xDREQxOCwgR1BJT19GTl9EUkVRMiwgR1BJT19GTl9QT1JUMjEwX01TSU9GMExfU1MxLCBHUElPX0ZOX0QyNiwKKwlHUElPX0ZOX0xDREQxOSwgR1BJT19GTl9QT1JUMjExX01TSU9GMExfU1MyLCBHUElPX0ZOX0QyNywKKwlHUElPX0ZOX0xDREQyMCwgR1BJT19GTl9UU19TUFNZTkMxLCBHUElPX0ZOX01TSU9GMExfTUNLMCwgR1BJT19GTl9EMjgsCisJR1BJT19GTl9MQ0REMjEsIEdQSU9fRk5fVFNfU0RBVDEsIEdQSU9fRk5fTVNJT0YwTF9NQ0sxLCBHUElPX0ZOX0QyOSwKKwlHUElPX0ZOX0xDREQyMiwgR1BJT19GTl9UU19TREVOMSwgR1BJT19GTl9NU0lPRjBMX1JTQ0ssIEdQSU9fRk5fRDMwLAorCUdQSU9fRk5fTENERDIzLCBHUElPX0ZOX1RTX1NDSzEsIEdQSU9fRk5fTVNJT0YwTF9SU1lOQywgR1BJT19GTl9EMzEsCisJR1BJT19GTl9MQ0REQ0ssIEdQSU9fRk5fTENEV1JfLAorCUdQSU9fRk5fTENEUkRfLCBHUElPX0ZOX0RBQ0syLCBHUElPX0ZOX1BPUlQyMTdfTENEMlJTLCBcCisJR1BJT19GTl9NU0lPRjBMX1RTWU5DLCBHUElPX0ZOX1ZJTzJfRklFTEQzLCBHUElPX0ZOX1BPUlQyMTdfTENEMkRJU1AsCisJR1BJT19GTl9MQ0RIU1lOLCBHUElPX0ZOX0xDRENTXywgR1BJT19GTl9MQ0RDUzJfLCBHUElPX0ZOX0RBQ0szLCBcCisJR1BJT19GTl9QT1JUMjE4X1ZJT19DS09SLAorCUdQSU9fRk5fTENERElTUCwgR1BJT19GTl9MQ0RSUywgR1BJT19GTl9QT1JUMjE5X0xDRDJXUl8sIFwKKwlHUElPX0ZOX0RSRVEzLCBHUElPX0ZOX01TSU9GMExfVFNDSywgR1BJT19GTl9WSU8yX0NMSzMsIFwKKwlHUElPX0ZOX0xDRDJEQ0tfMiwKKwlHUElPX0ZOX0xDRFZTWU4sIEdQSU9fRk5fTENEVlNZTjIsCisJR1BJT19GTl9MQ0RMQ0xLLCBHUElPX0ZOX0RSRVExLCBHUElPX0ZOX1BPUlQyMjFfTENEMkNTXywgXAorCUdQSU9fRk5fUFdFTiwgR1BJT19GTl9NU0lPRjBMX1JYRCwgR1BJT19GTl9WSU8yX0hEMywgXAorCUdQSU9fRk5fUE9SVDIyMV9MQ0QySFNZTiwKKwlHUElPX0ZOX0xDRERPTiwgR1BJT19GTl9MQ0RET04yLCBHUElPX0ZOX0RBQ0sxLCBHUElPX0ZOX09WQ04sIFwKKwlHUElPX0ZOX01TSU9GMExfVFhELCBHUElPX0ZOX1ZJTzJfVkQzLCBHUElPX0ZOX1BPUlQyMjJfTENEMlZTWU4sCisKKwlHUElPX0ZOX1NDSUZBMV9UWEQsIEdQSU9fRk5fT1ZDTjIsCisJR1BJT19GTl9FWFRMUCwgR1BJT19GTl9TQ0lGQTFfU0NLLCBHUElPX0ZOX1BPUlQyMjZfVklPX0NLTzIsCisJR1BJT19GTl9TQ0lGQTFfUlRTXywgR1BJT19GTl9JRElOLAorCUdQSU9fRk5fU0NJRkExX1JYRCwKKwlHUElPX0ZOX1NDSUZBMV9DVFNfLCBHUElPX0ZOX01GRzFfSU4xLAorCUdQSU9fRk5fTVNJT0YxX1RYRCwgR1BJT19GTl9TQ0lGQTJfVFhEMiwKKwlHUElPX0ZOX01TSU9GMV9UU1lOQywgR1BJT19GTl9TQ0lGQTJfQ1RTMl8sCisJR1BJT19GTl9NU0lPRjFfVFNDSywgR1BJT19GTl9TQ0lGQTJfU0NLMiwKKwlHUElPX0ZOX01TSU9GMV9SWEQsIEdQSU9fRk5fU0NJRkEyX1JYRDIsCisJR1BJT19GTl9NU0lPRjFfUlNDSywgR1BJT19GTl9TQ0lGQTJfUlRTMl8sIEdQSU9fRk5fVklPMl9DTEsyLCBcCisJR1BJT19GTl9MQ0QyRDIwLAorCUdQSU9fRk5fTVNJT0YxX1JTWU5DLCBHUElPX0ZOX01GRzFfSU4yLCBHUElPX0ZOX1ZJTzJfVkQyLCBcCisJR1BJT19GTl9MQ0QyRDIxLAorCUdQSU9fRk5fTVNJT0YxX01DSzAsIEdQSU9fRk5fUE9SVDIzNl9JMkNfU0RBMiwKKwlHUElPX0ZOX01TSU9GMV9NQ0sxLCBHUElPX0ZOX1BPUlQyMzdfSTJDX1NDTDIsCisJR1BJT19GTl9NU0lPRjFfU1MxLCBHUElPX0ZOX1ZJTzJfRklFTEQyLCBHUElPX0ZOX0xDRDJEMjIsCisJR1BJT19GTl9NU0lPRjFfU1MyLCBHUElPX0ZOX1ZJTzJfSEQyLCBHUElPX0ZOX0xDRDJEMjMsCisJR1BJT19GTl9TQ0lGQTZfVFhELAorCUdQSU9fRk5fUE9SVDI0MV9JUkRBX09VVCwgR1BJT19GTl9QT1JUMjQxX0lST1VULCBHUElPX0ZOX01GRzRfT1VUMSwgXAorCUdQSU9fRk5fVFBVNFRPMCwKKwlHUElPX0ZOX1BPUlQyNDJfSVJEQV9JTiwgR1BJT19GTl9NRkc0X0lOMiwKKwlHUElPX0ZOX1BPUlQyNDNfSVJEQV9GSVJTRUwsIEdQSU9fRk5fUE9SVDI0M19WSU9fQ0tPMiwKKwlHUElPX0ZOX1BPUlQyNDRfU0NJRkE1X0NUU18sIEdQSU9fRk5fTUZHMl9JTjEsIFwKKwlHUElPX0ZOX1BPUlQyNDRfU0NJRkJfQ1RTXywgR1BJT19GTl9NU0lPRjJSX1JYRCwKKwlHUElPX0ZOX1BPUlQyNDVfU0NJRkE1X1JUU18sIEdQSU9fRk5fTUZHMl9JTjIsIFwKKwlHUElPX0ZOX1BPUlQyNDVfU0NJRkJfUlRTXywgR1BJT19GTl9NU0lPRjJSX1RYRCwKKwlHUElPX0ZOX1BPUlQyNDZfU0NJRkE1X1JYRCwgR1BJT19GTl9NRkcxX09VVDEsIFwKKwlHUElPX0ZOX1BPUlQyNDZfU0NJRkJfUlhELCBHUElPX0ZOX1RQVTFUTzAsCisJR1BJT19GTl9QT1JUMjQ3X1NDSUZBNV9UWEQsIEdQSU9fRk5fTUZHM19PVVQyLCBcCisJR1BJT19GTl9QT1JUMjQ3X1NDSUZCX1RYRCwgR1BJT19GTl9UUFUzVE8xLAorCUdQSU9fRk5fUE9SVDI0OF9TQ0lGQTVfU0NLLCBHUElPX0ZOX01GRzJfT1VUMSwgXAorCUdQSU9fRk5fUE9SVDI0OF9TQ0lGQl9TQ0ssIEdQSU9fRk5fVFBVMlRPMCwgXAorCUdQSU9fRk5fUE9SVDI0OF9JMkNfU0NMMywgR1BJT19GTl9NU0lPRjJSX1RTQ0ssCisJR1BJT19GTl9QT1JUMjQ5X0lST1VULCBHUElPX0ZOX01GRzRfSU4xLCBcCisJR1BJT19GTl9QT1JUMjQ5X0kyQ19TREEzLCBHUElPX0ZOX01TSU9GMlJfVFNZTkMsCisJR1BJT19GTl9TREhJQ0xLMCwKKwlHUElPX0ZOX1NESElDRDAsCisJR1BJT19GTl9TREhJRDBfMCwKKwlHUElPX0ZOX1NESElEMF8xLAorCUdQSU9fRk5fU0RISUQwXzIsCisJR1BJT19GTl9TREhJRDBfMywKKwlHUElPX0ZOX1NESElDTUQwLAorCUdQSU9fRk5fU0RISVdQMCwKKwlHUElPX0ZOX1NESElDTEsxLAorCUdQSU9fRk5fU0RISUQxXzAsIEdQSU9fRk5fVFNfU1BTWU5DMiwKKwlHUElPX0ZOX1NESElEMV8xLCBHUElPX0ZOX1RTX1NEQVQyLAorCUdQSU9fRk5fU0RISUQxXzIsIEdQSU9fRk5fVFNfU0RFTjIsCisJR1BJT19GTl9TREhJRDFfMywgR1BJT19GTl9UU19TQ0syLAorCUdQSU9fRk5fU0RISUNNRDEsCisJR1BJT19GTl9TREhJQ0xLMiwKKwlHUElPX0ZOX1NESElEMl8wLCBHUElPX0ZOX1RTX1NQU1lOQzQsCisJR1BJT19GTl9TREhJRDJfMSwgR1BJT19GTl9UU19TREFUNCwKKwlHUElPX0ZOX1NESElEMl8yLCBHUElPX0ZOX1RTX1NERU40LAorCUdQSU9fRk5fU0RISUQyXzMsIEdQSU9fRk5fVFNfU0NLNCwKKwlHUElPX0ZOX1NESElDTUQyLAorCUdQSU9fRk5fTU1DQ0xLMCwKKwlHUElPX0ZOX01NQ0QwXzAsCisJR1BJT19GTl9NTUNEMF8xLAorCUdQSU9fRk5fTU1DRDBfMiwKKwlHUElPX0ZOX01NQ0QwXzMsCisJR1BJT19GTl9NTUNEMF80LCBHUElPX0ZOX1RTX1NQU1lOQzUsCisJR1BJT19GTl9NTUNEMF81LCBHUElPX0ZOX1RTX1NEQVQ1LAorCUdQSU9fRk5fTU1DRDBfNiwgR1BJT19GTl9UU19TREVONSwKKwlHUElPX0ZOX01NQ0QwXzcsIEdQSU9fRk5fVFNfU0NLNSwKKwlHUElPX0ZOX01NQ0NNRDAsCisJR1BJT19GTl9SRVNFVE9VVFNfLCBHUElPX0ZOX0VYVEFMMk9VVCwKKwlHUElPX0ZOX01DUF9XQUlUX19NQ1BfRlJCLAorCUdQSU9fRk5fTUNQX0NLTywgR1BJT19GTl9NTUNDTEsxLAorCUdQSU9fRk5fTUNQX0QxNV9NQ1BfTkFGMTUsCisJR1BJT19GTl9NQ1BfRDE0X01DUF9OQUYxNCwKKwlHUElPX0ZOX01DUF9EMTNfTUNQX05BRjEzLAorCUdQSU9fRk5fTUNQX0QxMl9NQ1BfTkFGMTIsCisJR1BJT19GTl9NQ1BfRDExX01DUF9OQUYxMSwKKwlHUElPX0ZOX01DUF9EMTBfTUNQX05BRjEwLAorCUdQSU9fRk5fTUNQX0Q5X01DUF9OQUY5LAorCUdQSU9fRk5fTUNQX0Q4X01DUF9OQUY4LCBHUElPX0ZOX01NQ0NNRDEsCisJR1BJT19GTl9NQ1BfRDdfTUNQX05BRjcsIEdQSU9fRk5fTU1DRDFfNywKKworCUdQSU9fRk5fTUNQX0Q2X01DUF9OQUY2LCBHUElPX0ZOX01NQ0QxXzYsCisJR1BJT19GTl9NQ1BfRDVfTUNQX05BRjUsIEdQSU9fRk5fTU1DRDFfNSwKKwlHUElPX0ZOX01DUF9ENF9NQ1BfTkFGNCwgR1BJT19GTl9NTUNEMV80LAorCUdQSU9fRk5fTUNQX0QzX01DUF9OQUYzLCBHUElPX0ZOX01NQ0QxXzMsCisJR1BJT19GTl9NQ1BfRDJfTUNQX05BRjIsIEdQSU9fRk5fTU1DRDFfMiwKKwlHUElPX0ZOX01DUF9EMV9NQ1BfTkFGMSwgR1BJT19GTl9NTUNEMV8xLAorCUdQSU9fRk5fTUNQX0QwX01DUF9OQUYwLCBHUElPX0ZOX01NQ0QxXzAsCisJR1BJT19GTl9NQ1BfTkJSU1RPVVRfLAorCUdQSU9fRk5fTUNQX1dFMF9fTUNQX0ZXRSwgR1BJT19GTl9NQ1BfUkRXUl9NQ1BfRldFLAorCisJLyogTVNFTDIgc3BlY2lhbCBjYXNlICovCisJR1BJT19GTl9UU0lGMl9UU19YWDEsCisJR1BJT19GTl9UU0lGMl9UU19YWDIsCisJR1BJT19GTl9UU0lGMl9UU19YWDMsCisJR1BJT19GTl9UU0lGMl9UU19YWDQsCisJR1BJT19GTl9UU0lGMl9UU19YWDUsCisJR1BJT19GTl9UU0lGMV9UU19YWDEsCisJR1BJT19GTl9UU0lGMV9UU19YWDIsCisJR1BJT19GTl9UU0lGMV9UU19YWDMsCisJR1BJT19GTl9UU0lGMV9UU19YWDQsCisJR1BJT19GTl9UU0lGMV9UU19YWDUsCisJR1BJT19GTl9UU0lGMF9UU19YWDEsCisJR1BJT19GTl9UU0lGMF9UU19YWDIsCisJR1BJT19GTl9UU0lGMF9UU19YWDMsCisJR1BJT19GTl9UU0lGMF9UU19YWDQsCisJR1BJT19GTl9UU0lGMF9UU19YWDUsCisJR1BJT19GTl9NU1QxX1RTX1hYMSwKKwlHUElPX0ZOX01TVDFfVFNfWFgyLAorCUdQSU9fRk5fTVNUMV9UU19YWDMsCisJR1BJT19GTl9NU1QxX1RTX1hYNCwKKwlHUElPX0ZOX01TVDFfVFNfWFg1LAorCUdQSU9fRk5fTVNUMF9UU19YWDEsCisJR1BJT19GTl9NU1QwX1RTX1hYMiwKKwlHUElPX0ZOX01TVDBfVFNfWFgzLAorCUdQSU9fRk5fTVNUMF9UU19YWDQsCisJR1BJT19GTl9NU1QwX1RTX1hYNSwKKworCS8qIE1TRUwzIHNwZWNpYWwgY2FzZXMgKi8KKwlHUElPX0ZOX1NESEkwX1ZDQ1FfTUMwX09OLAorCUdQSU9fRk5fU0RISTBfVkNDUV9NQzBfT0ZGLAorCUdQSU9fRk5fREVCVUdfTU9OX1ZJTywKKwlHUElPX0ZOX0RFQlVHX01PTl9MQ0RELAorCUdQSU9fRk5fTENEQ19MQ0RDMCwKKwlHUElPX0ZOX0xDRENfTENEQzEsCisKKwkvKiBNU0VMNCBzcGVjaWFsIGNhc2VzICovCisJR1BJT19GTl9JUlE5X01FTV9JTlQsCisJR1BJT19GTl9JUlE5X01DUF9JTlQsCisJR1BJT19GTl9BMTEsCisJR1BJT19GTl9LRVlPVVQ4LAorCUdQSU9fRk5fVFBVNFRPMywKKwlHUElPX0ZOX1JFU0VUQV9OX1BVX09OLAorCUdQSU9fRk5fUkVTRVRBX05fUFVfT0ZGLAorCUdQSU9fRk5fRURCR1JFUV9QRCwKKwlHUElPX0ZOX0VEQkdSRVFfUFUsCisKKwkvKiBGdW5jdGlvbnMgd2l0aCBwdWxsLXVwcyAqLworCUdQSU9fRk5fS0VZSU4wX1BVLAorCUdQSU9fRk5fS0VZSU4xX1BVLAorCUdQSU9fRk5fS0VZSU4yX1BVLAorCUdQSU9fRk5fS0VZSU4zX1BVLAorCUdQSU9fRk5fS0VZSU40X1BVLAorCUdQSU9fRk5fS0VZSU41X1BVLAorCUdQSU9fRk5fS0VZSU42X1BVLAorCUdQSU9fRk5fS0VZSU43X1BVLAorCUdQSU9fRk5fU0RISUQxXzBfUFUsCisJR1BJT19GTl9TREhJRDFfMV9QVSwKKwlHUElPX0ZOX1NESElEMV8yX1BVLAorCUdQSU9fRk5fU0RISUQxXzNfUFUsCisJR1BJT19GTl9TREhJQ01EMV9QVSwKKwlHUElPX0ZOX01NQ0NNRDBfUFUsCisJR1BJT19GTl9NTUNDTUQxX1BVLAorCUdQSU9fRk5fRlNJQUNLX1BVLAorCUdQSU9fRk5fRlNJQUlMUl9QVSwKKwlHUElPX0ZOX0ZTSUFJQlRfUFUsCisJR1BJT19GTl9GU0lBSVNMRF9QVSwKK307CisKKyNlbmRpZiAvKiBfX0FTTV9TSDczQTBfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2luY2x1ZGUvbWFjaC9zbXAuaCBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL3NtcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwZGI5NGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2luY2x1ZGUvbWFjaC9zbXAuaApAQCAtMCwwICsxLDE2IEBACisjaWZuZGVmIF9fTUFDSF9TTVBfSAorI2RlZmluZSBfX01BQ0hfU01QX0gKKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9naWMuaD4KKworLyoKKyAqIFdlIHVzZSBJUlExIGFzIHRoZSBJUEkKKyAqLworc3RhdGljIGlubGluZSB2b2lkIHNtcF9jcm9zc19jYWxsKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLCBpbnQgaXBpKQoreworI2lmIGRlZmluZWQoQ09ORklHX0FSTV9HSUMpCisJZ2ljX3JhaXNlX3NvZnRpcnEobWFzaywgaXBpKTsKKyNlbmRpZgorfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL3pib290LmggYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2luY2x1ZGUvbWFjaC96Ym9vdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkNmEyMDUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2luY2x1ZGUvbWFjaC96Ym9vdC5oCkBAIC0wLDAgKzEsMjMgQEAKKyNpZm5kZWYgWkJPT1RfSAorI2RlZmluZSBaQk9PVF9ICisKKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPG1hY2gvemJvb3RfbWFjcm9zLmg+CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqCQlib2FyZCBzcGVjaWZpYyBzZXR0aW5ncworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmZGVmIENPTkZJR19NQUNIX0FQNEVWQgorI2RlZmluZSBNQUNIX1RZUEUJTUFDSF9UWVBFX0FQNEVWQgorI2luY2x1ZGUgIm1hY2gvaGVhZC1hcDRldmIudHh0IgorI2VsaWYgQ09ORklHX01BQ0hfTUFDS0VSRUwKKyNkZWZpbmUgTUFDSF9UWVBFCU1BQ0hfVFlQRV9NQUNLRVJFTAorI2luY2x1ZGUgIm1hY2gvaGVhZC1tYWNrZXJlbC50eHQiCisjZWxzZQorI2Vycm9yICJ1bnN1cHBvcnRlZCBib2FyZC4iCisjZW5kaWYKKworI2VuZGlmIC8qIFpCT09UX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL3pib290X21hY3Jvcy5oIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbmNsdWRlL21hY2gvemJvb3RfbWFjcm9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE2MTExZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL3pib290X21hY3Jvcy5oCkBAIC0wLDAgKzEsNjUgQEAKKyNpZm5kZWYgX19aQk9PVF9NQUNST19ICisjZGVmaW5lIF9fWkJPT1RfTUFDUk9fSAorCisvKiBUaGUgTElTVCBjb21tYW5kIGlzIHVzZWQgdG8gaW5jbHVkZSBjb21tZW50cyBpbiB0aGUgc2NyaXB0ICovCisubWFjcm8JTElTVCBjb21tZW50CisuZW5kbQorCisvKiBUaGUgRUQgY29tbWFuZCBpcyB1c2VkIHRvIHdyaXRlIGEgMzItYml0IHdvcmQgKi8KKy5tYWNybyBFRCwgYWRkciwgZGF0YQorCUxEUglyMCwgMWYKKwlMRFIJcjEsIDJmCisJU1RSCXIxLCBbcjBdCisJQgkzZgorMSA6CS5sb25nCVxhZGRyCisyIDoJLmxvbmcJXGRhdGEKKzMgOgorLmVuZG0KKworLyogVGhlIEVXIGNvbW1hbmQgaXMgdXNlZCB0byB3cml0ZSBhIDE2LWJpdCB3b3JkICovCisubWFjcm8gRVcsIGFkZHIsIGRhdGEKKwlMRFIJcjAsIDFmCisJTERSCXIxLCAyZgorCVNUUkgJcjEsIFtyMF0KKwlCCTNmCisxIDoJLmxvbmcJXGFkZHIKKzIgOgkubG9uZwlcZGF0YQorMyA6CisuZW5kbQorCisvKiBUaGUgRUIgY29tbWFuZCBpcyB1c2VkIHRvIHdyaXRlIGFuIDgtYml0IHdvcmQgKi8KKy5tYWNybyBFQiwgYWRkciwgZGF0YQorCUxEUglyMCwgMWYKKwlMRFIJcjEsIDJmCisJU1RSQglyMSwgW3IwXQorCUIJM2YKKzEgOgkubG9uZwlcYWRkcgorMiA6CS5sb25nCVxkYXRhCiszIDoKKy5lbmRtCisKKy8qIFRoZSBXQUlUIGNvbW1hbmQgaXMgdXNlZCB0byBkZWxheSB0aGUgZXhlY3V0aW9uICovCisubWFjcm8gIFdBSVQsIHRpbWUsIHJlZworCUxEUglyMSwgMWYKKwlMRFIJcjAsIDJmCisJU1RSCXIwLCBbcjFdCisxMCA6CisJTERSCXIwLCBbcjFdCisJQ01QCXIwLCAjMHgwMDAwMDAwMAorCUJORQkxMGIKKwlOT1AKKwlCCTNmCisxIDoJLmxvbmcJXHJlZworMiA6CS5sb25nCVx0aW1lICogMTAwCiszIDoKKy5lbmRtCisKKy8qIFRoZSBERCBjb21tYW5kIGlzIHVzZWQgdG8gcmVhZCBhIDMyLWJpdCB3b3JkICovCisubWFjcm8gIERELCBzdGFydCwgZW5kCisJTERSCXIxLCAxZgorCUIJMmYKKzEgOgkubG9uZwlcc3RhcnQKKzIgOgorLmVuZG0KKworI2VuZGlmIC8qIF9fWkJPT1RfTUFDUk9fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbnRjLXNoNzNhMC5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbnRjLXNoNzNhMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyMmQ4ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2ludGMtc2g3M2EwLmMKQEAgLTAsMCArMSwyNjcgQEAKKy8qCisgKiBzaDczYTAgcHJvY2Vzc29yIHN1cHBvcnQgLSBJTlRDIGhhcmR3YXJlIGJsb2NrCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwICBNYWdudXMgRGFtbQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvc2hfaW50Yy5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9naWMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKworZW51bSB7CisJVU5VU0VEID0gMCwKKworCS8qIGludGVycnVwdCBzb3VyY2VzIElOVENTICovCisJUElOVENTX1BJTlQxLCBQSU5UQ1NfUElOVDIsCisJUlRETUFDXzBfREVJMCwgUlRETUFDXzBfREVJMSwgUlRETUFDXzBfREVJMiwgUlRETUFDXzBfREVJMywKKwlDRVUsIE1GSSwgQkJJRjIsIFZQVSwgVFNJRjEsIF8zREdfU0dYNTQzLCBfMkRETUFDXzJERE0wLAorCVJURE1BQ18xX0RFSTQsIFJURE1BQ18xX0RFSTUsIFJURE1BQ18xX0RBREVSUiwKKwlLRVlTQ19LRVksIFZJTlQsIE1TSU9GLAorCVRNVTBfVFVOSTAwLCBUTVUwX1RVTkkwMSwgVE1VMF9UVU5JMDIsCisJQ01UMCwgVFNJRjAsIENNVDIsIExNQiwgTVNVRywgTVNVX01TVSwgTVNVX01TVTIsCisJQ1RJLCBSV0RUMCwgSUNCLCBQRVAsIEFTQSwgSlBVX0pQRUcsIExDREMsIExDUkMsCisJUlRETUFDXzJfREVJNiwgUlRETUFDXzJfREVJNywgUlRETUFDXzJfREVJOCwgUlRETUFDXzJfREVJOSwKKwlSVERNQUNfM19ERUkxMCwgUlRETUFDXzNfREVJMTEsCisJRlJDLCBHQ1UsIExDREMxLCBDU0lSWCwKKwlEU0lUWDBfRFNJVFgwMCwgRFNJVFgwX0RTSVRYMDEsCisJU1BVMl9TUFUwLCBTUFUyX1NQVTEsIEZTSSwKKwlUTVUxX1RVTkkxMCwgVE1VMV9UVU5JMTEsIFRNVTFfVFVOSTEyLAorCVRTSUYyLCBDTVQ0LCBNRklTMiwgQ1BPUlRTMlIsIFRTRywgRE1BU0NIMSwgU0NVVywKKwlWSU82MCwgVklPNjEsIENFVTIxLCBDU0kyMSwgRFNJVFgxX0RTSVRYMTAsIERTSVRYMV9EU0lUWDExLAorCURJU1AsIERTUlYsIEVNVVgyX0VNVVgyMEksIEVNVVgyX0VNVVgyMUksCisJTVNUSUYwX01TVDAwSSwgTVNUSUYwX01TVDAxSSwgTVNUSUYxX01TVDEwSSwgTVNUSUYxX01TVDExSSwKKwlTUFVWLAorCisJLyogaW50ZXJydXB0IGdyb3VwcyBJTlRDUyAqLworCVJURE1BQ18wLCBSVERNQUNfMSwgUlRETUFDXzIsIFJURE1BQ18zLAorCURTSVRYMCwgU1BVMiwgVE1VMSwgTVNVLAorfTsKKworc3RhdGljIHN0cnVjdCBpbnRjX3ZlY3QgaW50Y3NfdmVjdG9yc1tdID0geworCUlOVENTX1ZFQ1QoUElOVENTX1BJTlQxLCAweDA2MDApLCBJTlRDU19WRUNUKFBJTlRDU19QSU5UMiwgMHgwNjIwKSwKKwlJTlRDU19WRUNUKFJURE1BQ18wX0RFSTAsIDB4MDgwMCksIElOVENTX1ZFQ1QoUlRETUFDXzBfREVJMSwgMHgwODIwKSwKKwlJTlRDU19WRUNUKFJURE1BQ18wX0RFSTIsIDB4MDg0MCksIElOVENTX1ZFQ1QoUlRETUFDXzBfREVJMywgMHgwODYwKSwKKwlJTlRDU19WRUNUKENFVSwgMHgwODgwKSwgSU5UQ1NfVkVDVChNRkksIDB4MDkwMCksCisJSU5UQ1NfVkVDVChCQklGMiwgMHgwOTYwKSwgSU5UQ1NfVkVDVChWUFUsIDB4MDk4MCksCisJSU5UQ1NfVkVDVChUU0lGMSwgMHgwOWEwKSwgSU5UQ1NfVkVDVChfM0RHX1NHWDU0MywgMHgwOWUwKSwKKwlJTlRDU19WRUNUKF8yRERNQUNfMkRETTAsIDB4MGEwMCksCisJSU5UQ1NfVkVDVChSVERNQUNfMV9ERUk0LCAweDBiODApLCBJTlRDU19WRUNUKFJURE1BQ18xX0RFSTUsIDB4MGJhMCksCisJSU5UQ1NfVkVDVChSVERNQUNfMV9EQURFUlIsIDB4MGJjMCksCisJSU5UQ1NfVkVDVChLRVlTQ19LRVksIDB4MGJlMCksIElOVENTX1ZFQ1QoVklOVCwgMHgwYzgwKSwKKwlJTlRDU19WRUNUKE1TSU9GLCAweDBkMjApLAorCUlOVENTX1ZFQ1QoVE1VMF9UVU5JMDAsIDB4MGU4MCksIElOVENTX1ZFQ1QoVE1VMF9UVU5JMDEsIDB4MGVhMCksCisJSU5UQ1NfVkVDVChUTVUwX1RVTkkwMiwgMHgwZWMwKSwKKwlJTlRDU19WRUNUKENNVDAsIDB4MGYwMCksIElOVENTX1ZFQ1QoVFNJRjAsIDB4MGYyMCksCisJSU5UQ1NfVkVDVChDTVQyLCAweDBmNDApLCBJTlRDU19WRUNUKExNQiwgMHgwZjYwKSwKKwlJTlRDU19WRUNUKE1TVUcsIDB4MGY4MCksCisJSU5UQ1NfVkVDVChNU1VfTVNVLCAweDBmYTApLCBJTlRDU19WRUNUKE1TVV9NU1UyLCAweDBmYzApLAorCUlOVENTX1ZFQ1QoQ1RJLCAweDA0MDApLCBJTlRDU19WRUNUKFJXRFQwLCAweDA0NDApLAorCUlOVENTX1ZFQ1QoSUNCLCAweDA0ODApLCBJTlRDU19WRUNUKFBFUCwgMHgwNGEwKSwKKwlJTlRDU19WRUNUKEFTQSwgMHgwNGMwKSwgSU5UQ1NfVkVDVChKUFVfSlBFRywgMHgwNTYwKSwKKwlJTlRDU19WRUNUKExDREMsIDB4MDU4MCksIElOVENTX1ZFQ1QoTENSQywgMHgwNWEwKSwKKwlJTlRDU19WRUNUKFJURE1BQ18yX0RFSTYsIDB4MTMwMCksIElOVENTX1ZFQ1QoUlRETUFDXzJfREVJNywgMHgxMzIwKSwKKwlJTlRDU19WRUNUKFJURE1BQ18yX0RFSTgsIDB4MTM0MCksIElOVENTX1ZFQ1QoUlRETUFDXzJfREVJOSwgMHgxMzYwKSwKKwlJTlRDU19WRUNUKFJURE1BQ18zX0RFSTEwLCAweDEzODApLCBJTlRDU19WRUNUKFJURE1BQ18zX0RFSTExLCAweDEzYTApLAorCUlOVENTX1ZFQ1QoRlJDLCAweDE3MDApLCBJTlRDU19WRUNUKEdDVSwgMHgxNzYwKSwKKwlJTlRDU19WRUNUKExDREMxLCAweDE3ODApLCBJTlRDU19WRUNUKENTSVJYLCAweDE3YTApLAorCUlOVENTX1ZFQ1QoRFNJVFgwX0RTSVRYMDAsIDB4MTdjMCksIElOVENTX1ZFQ1QoRFNJVFgwX0RTSVRYMDEsIDB4MTdlMCksCisJSU5UQ1NfVkVDVChTUFUyX1NQVTAsIDB4MTgwMCksIElOVENTX1ZFQ1QoU1BVMl9TUFUxLCAweDE4MjApLAorCUlOVENTX1ZFQ1QoRlNJLCAweDE4NDApLAorCUlOVENTX1ZFQ1QoVE1VMV9UVU5JMTAsIDB4MTkwMCksIElOVENTX1ZFQ1QoVE1VMV9UVU5JMTEsIDB4MTkyMCksCisJSU5UQ1NfVkVDVChUTVUxX1RVTkkxMiwgMHgxOTQwKSwKKwlJTlRDU19WRUNUKFRTSUYyLCAweDE5NjApLCBJTlRDU19WRUNUKENNVDQsIDB4MTk4MCksCisJSU5UQ1NfVkVDVChNRklTMiwgMHgxYTAwKSwgSU5UQ1NfVkVDVChDUE9SVFMyUiwgMHgxYTIwKSwKKwlJTlRDU19WRUNUKFRTRywgMHgxYWUwKSwgSU5UQ1NfVkVDVChETUFTQ0gxLCAweDFiMDApLAorCUlOVENTX1ZFQ1QoU0NVVywgMHgxYjQwKSwKKwlJTlRDU19WRUNUKFZJTzYwLCAweDFiNjApLCBJTlRDU19WRUNUKFZJTzYxLCAweDFiODApLAorCUlOVENTX1ZFQ1QoQ0VVMjEsIDB4MWJhMCksIElOVENTX1ZFQ1QoQ1NJMjEsIDB4MWJlMCksCisJSU5UQ1NfVkVDVChEU0lUWDFfRFNJVFgxMCwgMHgxYzAwKSwgSU5UQ1NfVkVDVChEU0lUWDFfRFNJVFgxMSwgMHgxYzIwKSwKKwlJTlRDU19WRUNUKERJU1AsIDB4MWM0MCksIElOVENTX1ZFQ1QoRFNSViwgMHgxYzYwKSwKKwlJTlRDU19WRUNUKEVNVVgyX0VNVVgyMEksIDB4MWM4MCksIElOVENTX1ZFQ1QoRU1VWDJfRU1VWDIxSSwgMHgxY2EwKSwKKwlJTlRDU19WRUNUKE1TVElGMF9NU1QwMEksIDB4MWNjMCksIElOVENTX1ZFQ1QoTVNUSUYwX01TVDAxSSwgMHgxY2UwKSwKKwlJTlRDU19WRUNUKE1TVElGMV9NU1QxMEksIDB4MWQwMCksIElOVENTX1ZFQ1QoTVNUSUYxX01TVDExSSwgMHgxZDIwKSwKKwlJTlRDU19WRUNUKFNQVVYsIDB4MjMwMCksCit9OworCitzdGF0aWMgc3RydWN0IGludGNfZ3JvdXAgaW50Y3NfZ3JvdXBzW10gX19pbml0ZGF0YSA9IHsKKwlJTlRDX0dST1VQKFJURE1BQ18wLCBSVERNQUNfMF9ERUkwLCBSVERNQUNfMF9ERUkxLAorCQkgICBSVERNQUNfMF9ERUkyLCBSVERNQUNfMF9ERUkzKSwKKwlJTlRDX0dST1VQKFJURE1BQ18xLCBSVERNQUNfMV9ERUk0LCBSVERNQUNfMV9ERUk1LCBSVERNQUNfMV9EQURFUlIpLAorCUlOVENfR1JPVVAoUlRETUFDXzIsIFJURE1BQ18yX0RFSTYsIFJURE1BQ18yX0RFSTcsCisJCSAgIFJURE1BQ18yX0RFSTgsIFJURE1BQ18yX0RFSTkpLAorCUlOVENfR1JPVVAoUlRETUFDXzMsIFJURE1BQ18zX0RFSTEwLCBSVERNQUNfM19ERUkxMSksCisJSU5UQ19HUk9VUChUTVUxLCBUTVUxX1RVTkkxMiwgVE1VMV9UVU5JMTEsIFRNVTFfVFVOSTEwKSwKKwlJTlRDX0dST1VQKERTSVRYMCwgRFNJVFgwX0RTSVRYMDAsIERTSVRYMF9EU0lUWDAxKSwKKwlJTlRDX0dST1VQKFNQVTIsIFNQVTJfU1BVMCwgU1BVMl9TUFUxKSwKKwlJTlRDX0dST1VQKE1TVSwgTVNVX01TVSwgTVNVX01TVTIpLAorfTsKKworc3RhdGljIHN0cnVjdCBpbnRjX21hc2tfcmVnIGludGNzX21hc2tfcmVnaXN0ZXJzW10gPSB7CisJeyAweGZmZDIwMTg0LCAweGZmZDIwMWM0LCA4LCAvKiBJTVIxU0EgLyBJTUNSMVNBICovCisJICB7IDAsIDAsIDAsIENFVSwKKwkgICAgMCwgMCwgMCwgMCB9IH0sCisJeyAweGZmZDIwMTg4LCAweGZmZDIwMWM4LCA4LCAvKiBJTVIyU0EgLyBJTUNSMlNBICovCisJICB7IDAsIDAsIDAsIFZQVSwKKwkgICAgQkJJRjIsIDAsIDAsIE1GSSB9IH0sCisJeyAweGZmZDIwMThjLCAweGZmZDIwMWNjLCA4LCAvKiBJTVIzU0EgLyBJTUNSM1NBICovCisJICB7IDAsIDAsIDAsIF8yRERNQUNfMkRETTAsCisJICAgIDAsIEFTQSwgUEVQLCBJQ0IgfSB9LAorCXsgMHhmZmQyMDE5MCwgMHhmZmQyMDFkMCwgOCwgLyogSU1SNFNBIC8gSU1DUjRTQSAqLworCSAgeyAwLCAwLCAwLCBDVEksCisJICAgIEpQVV9KUEVHLCAwLCBMQ1JDLCBMQ0RDIH0gfSwKKwl7IDB4ZmZkMjAxOTQsIDB4ZmZkMjAxZDQsIDgsIC8qIElNUjVTQSAvIElNQ1I1U0EgKi8KKwkgIHsgS0VZU0NfS0VZLCBSVERNQUNfMV9EQURFUlIsIFJURE1BQ18xX0RFSTUsIFJURE1BQ18xX0RFSTQsCisJICAgIFJURE1BQ18wX0RFSTMsIFJURE1BQ18wX0RFSTIsIFJURE1BQ18wX0RFSTEsIFJURE1BQ18wX0RFSTAgfSB9LAorCXsgMHhmZmQyMDE5OCwgMHhmZmQyMDFkOCwgOCwgLyogSU1SNlNBIC8gSU1DUjZTQSAqLworCSAgeyAwLCAwLCBNU0lPRiwgMCwKKwkgICAgXzNER19TR1g1NDMsIDAsIDAsIDAgfSB9LAorCXsgMHhmZmQyMDE5YywgMHhmZmQyMDFkYywgOCwgLyogSU1SN1NBIC8gSU1DUjdTQSAqLworCSAgeyAwLCBUTVUwX1RVTkkwMiwgVE1VMF9UVU5JMDEsIFRNVTBfVFVOSTAwLAorCSAgICAwLCAwLCAwLCAwIH0gfSwKKwl7IDB4ZmZkMjAxYTAsIDB4ZmZkMjAxZTAsIDgsIC8qIElNUjhTQSAvIElNQ1I4U0EgKi8KKwkgIHsgMCwgMCwgMCwgMCwKKwkgICAgMCwgTVNVX01TVSwgTVNVX01TVTIsIE1TVUcgfSB9LAorCXsgMHhmZmQyMDFhNCwgMHhmZmQyMDFlNCwgOCwgLyogSU1SOVNBIC8gSU1DUjlTQSAqLworCSAgeyAwLCBSV0RUMCwgQ01UMiwgQ01UMCwKKwkgICAgMCwgMCwgMCwgMCB9IH0sCisJeyAweGZmZDIwMWFjLCAweGZmZDIwMWVjLCA4LCAvKiBJTVIxMVNBIC8gSU1DUjExU0EgKi8KKwkgIHsgMCwgMCwgMCwgMCwKKwkgICAgMCwgVFNJRjEsIExNQiwgVFNJRjAgfSB9LAorCXsgMHhmZmQyMDFiMCwgMHhmZmQyMDFmMCwgOCwgLyogSU1SMTJTQSAvIElNQ1IxMlNBICovCisJICB7IDAsIDAsIDAsIDAsCisJICAgIDAsIDAsIFBJTlRDU19QSU5UMiwgUElOVENTX1BJTlQxIH0gfSwKKwl7IDB4ZmZkNTAxODAsIDB4ZmZkNTAxYzAsIDgsIC8qIElNUjBTQTMgLyBJTUNSMFNBMyAqLworCSAgeyBSVERNQUNfMl9ERUk2LCBSVERNQUNfMl9ERUk3LCBSVERNQUNfMl9ERUk4LCBSVERNQUNfMl9ERUk5LAorCSAgICBSVERNQUNfM19ERUkxMCwgUlRETUFDXzNfREVJMTEsIDAsIDAgfSB9LAorCXsgMHhmZmQ1MDE5MCwgMHhmZmQ1MDFkMCwgOCwgLyogSU1SNFNBMyAvIElNQ1I0U0EzICovCisJICB7IEZSQywgMCwgMCwgR0NVLAorCSAgICBMQ0RDMSwgQ1NJUlgsIERTSVRYMF9EU0lUWDAwLCBEU0lUWDBfRFNJVFgwMSB9IH0sCisJeyAweGZmZDUwMTk0LCAweGZmZDUwMWQ0LCA4LCAvKiBJTVI1U0EzIC8gSU1DUjVTQTMgKi8KKwkgIHsgU1BVMl9TUFUwLCBTUFUyX1NQVTEsIEZTSSwgMCwKKwkgICAgMCwgMCwgMCwgMCB9IH0sCisJeyAweGZmZDUwMTk4LCAweGZmZDUwMWQ4LCA4LCAvKiBJTVI2U0EzIC8gSU1DUjZTQTMgKi8KKwkgIHsgVE1VMV9UVU5JMTAsIFRNVTFfVFVOSTExLCBUTVUxX1RVTkkxMiwgMCwKKwkgICAgVFNJRjIsIENNVDQsIDAsIDAgfSB9LAorCXsgMHhmZmQ1MDE5YywgMHhmZmQ1MDFkYywgOCwgLyogSU1SN1NBMyAvIElNQ1I3U0EzICovCisJICB7IE1GSVMyLCBDUE9SVFMyUiwgMCwgMCwKKwkgICAgMCwgMCwgMCwgVFNHIH0gfSwKKwl7IDB4ZmZkNTAxYTAsIDB4ZmZkNTAxZTAsIDgsIC8qIElNUjhTQTMgLyBJTUNSOFNBMyAqLworCSAgeyBETUFTQ0gxLCAwLCBTQ1VXLCBWSU82MCwKKwkgICAgVklPNjEsIENFVTIxLCAwLCBDU0kyMSB9IH0sCisJeyAweGZmZDUwMWE0LCAweGZmZDUwMWU0LCA4LCAvKiBJTVI5U0EzIC8gSU1DUjlTQTMgKi8KKwkgIHsgRFNJVFgxX0RTSVRYMTAsIERTSVRYMV9EU0lUWDExLCBESVNQLCBEU1JWLAorCSAgICBFTVVYMl9FTVVYMjBJLCBFTVVYMl9FTVVYMjFJLCBNU1RJRjBfTVNUMDBJLCBNU1RJRjBfTVNUMDFJIH0gfSwKKwl7IDB4ZmZkNTAxYTgsIDB4ZmZkNTAxZTgsIDgsIC8qIElNUjEwU0EzIC8gSU1DUjEwU0EzICovCisJICB7IE1TVElGMF9NU1QwMEksIE1TVElGMF9NU1QwMUksIDAsIDAsCisJICAgIDAsIDAsIDAsIDAgIH0gfSwKKwl7IDB4ZmZkNjAxODAsIDB4ZmZkNjAxYzAsIDgsIC8qIElNUjBTQTQgLyBJTUNSMFNBNCAqLworCSAgeyBTUFVWLCAwLCAwLCAwLAorCSAgICAwLCAwLCAwLCAwICB9IH0sCit9OworCisvKiBQcmlvcml0eSBpcyBuZWVkZWQgZm9yIElOVENBIHRvIHJlY2VpdmUgdGhlIElOVENTIGludGVycnVwdCAqLworc3RhdGljIHN0cnVjdCBpbnRjX3ByaW9fcmVnIGludGNzX3ByaW9fcmVnaXN0ZXJzW10gPSB7CisJeyAweGZmZDIwMDAwLCAwLCAxNiwgNCwgLyogSVBSQVMgKi8geyBDVEksIDAsIF8yRERNQUNfMkRETTAsIElDQiB9IH0sCisJeyAweGZmZDIwMDA0LCAwLCAxNiwgNCwgLyogSVBSQlMgKi8geyBKUFVfSlBFRywgTENEQywgMCwgTENSQyB9IH0sCisJeyAweGZmZDIwMDA4LCAwLCAxNiwgNCwgLyogSVBSQ1MgKi8geyBCQklGMiwgMCwgMCwgMCB9IH0sCisJeyAweGZmZDIwMDBjLCAwLCAxNiwgNCwgLyogSVBSRFMgKi8geyBQSU5UQ1NfUElOVDEsIFBJTlRDU19QSU5UMiwKKwkJCQkJICAgICAgMCwgMCB9IH0sCisJeyAweGZmZDIwMDEwLCAwLCAxNiwgNCwgLyogSVBSRVMgKi8geyBSVERNQUNfMCwgQ0VVLCBNRkksIFZQVSB9IH0sCisJeyAweGZmZDIwMDE0LCAwLCAxNiwgNCwgLyogSVBSRlMgKi8geyBLRVlTQ19LRVksIFJURE1BQ18xLAorCQkJCQkgICAgICBDTVQyLCBDTVQwIH0gfSwKKwl7IDB4ZmZkMjAwMTgsIDAsIDE2LCA0LCAvKiBJUFJHUyAqLyB7IFRNVTBfVFVOSTAwLCBUTVUwX1RVTkkwMSwKKwkJCQkJICAgICAgVE1VMF9UVU5JMDIsIFRTSUYxIH0gfSwKKwl7IDB4ZmZkMjAwMWMsIDAsIDE2LCA0LCAvKiBJUFJIUyAqLyB7IFZJTlQsIDAsIDAsIDAgfSB9LAorCXsgMHhmZmQyMDAyMCwgMCwgMTYsIDQsIC8qIElQUklTICovIHsgMCwgTVNJT0YsIFRTSUYwLCAwIH0gfSwKKwl7IDB4ZmZkMjAwMjQsIDAsIDE2LCA0LCAvKiBJUFJKUyAqLyB7IDAsIF8zREdfU0dYNTQzLCBNU1VHLCBNU1UgfSB9LAorCXsgMHhmZmQyMDAyOCwgMCwgMTYsIDQsIC8qIElQUktTICovIHsgMCwgQVNBLCBMTUIsIFBFUCB9IH0sCisJeyAweGZmZDIwMDMwLCAwLCAxNiwgNCwgLyogSVBSTVMgKi8geyAwLCAwLCAwLCBSV0RUMCB9IH0sCisJeyAweGZmZDUwMDAwLCAwLCAxNiwgNCwgLyogSVBSQVMzICovIHsgUlRETUFDXzIsIDAsIDAsIDAgfSB9LAorCXsgMHhmZmQ1MDAwNCwgMCwgMTYsIDQsIC8qIElQUkJTMyAqLyB7IFJURE1BQ18zLCAwLCAwLCAwIH0gfSwKKwl7IDB4ZmZkNTAwMjAsIDAsIDE2LCA0LCAvKiBJUFJJUzMgKi8geyBGUkMsIDAsIDAsIDAgfSB9LAorCXsgMHhmZmQ1MDAyNCwgMCwgMTYsIDQsIC8qIElQUkpTMyAqLyB7IExDREMxLCBDU0lSWCwgRFNJVFgwLCAwIH0gfSwKKwl7IDB4ZmZkNTAwMjgsIDAsIDE2LCA0LCAvKiBJUFJLUzMgKi8geyBTUFUyLCAwLCBGU0ksIDAgfSB9LAorCXsgMHhmZmQ1MDAzMCwgMCwgMTYsIDQsIC8qIElQUk1TMyAqLyB7IFRNVTEsIDAsIDAsIFRTSUYyIH0gfSwKKwl7IDB4ZmZkNTAwMzQsIDAsIDE2LCA0LCAvKiBJUFJOUzMgKi8geyBDTVQ0LCAwLCAwLCAwIH0gfSwKKwl7IDB4ZmZkNTAwMzgsIDAsIDE2LCA0LCAvKiBJUFJPUzMgKi8geyBNRklTMiwgQ1BPUlRTMlIsIDAsIDAgfSB9LAorCXsgMHhmZmQ1MDA0MCwgMCwgMTYsIDQsIC8qIElQUlFTMyAqLyB7IERNQVNDSDEsIDAsIFNDVVcsIFZJTzYwIH0gfSwKKwl7IDB4ZmZkNTAwNDQsIDAsIDE2LCA0LCAvKiBJUFJSUzMgKi8geyBWSU82MSwgQ0VVMjEsIDAsIENTSTIxIH0gfSwKKwl7IDB4ZmZkNTAwNDgsIDAsIDE2LCA0LCAvKiBJUFJTUzMgKi8geyBEU0lUWDFfRFNJVFgxMCwgRFNJVFgxX0RTSVRYMTEsCisJCQkJCSAgICAgICBESVNQLCBEU1JWIH0gfSwKKwl7IDB4ZmZkNTAwNGMsIDAsIDE2LCA0LCAvKiBJUFJUUzMgKi8geyBFTVVYMl9FTVVYMjBJLCBFTVVYMl9FTVVYMjFJLAorCQkJCQkgICAgICAgTVNUSUYwX01TVDAwSSwgTVNUSUYwX01TVDAxSSB9IH0sCisJeyAweGZmZDUwMDUwLCAwLCAxNiwgNCwgLyogSVBSVVMzICovIHsgTVNUSUYxX01TVDEwSSwgTVNUSUYxX01TVDExSSwKKwkJCQkJICAgICAgIDAsIDAgfSB9LAorCXsgMHhmZmQ2MDAwMCwgMCwgMTYsIDQsIC8qIElQUkFTNCAqLyB7IFNQVVYsIDAsIDAsIDAgfSB9LAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpbnRjc19yZXNvdXJjZXNbXSBfX2luaXRkYXRhID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gMHhmZmQyMDAwMCwKKwkJLmVuZAk9IDB4ZmZkMjAxZmYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSAweGZmZDUwMDAwLAorCQkuZW5kCT0gMHhmZmQ1MDFmZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMl0gPSB7CisJCS5zdGFydAk9IDB4ZmZkNjAwMDAsCisJCS5lbmQJPSAweGZmZDYwMWZmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IGludGNfZGVzYyBpbnRjc19kZXNjIF9faW5pdGRhdGEgPSB7CisJLm5hbWUgPSAic2g3M2EwLWludGNzIiwKKwkucmVzb3VyY2UgPSBpbnRjc19yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKGludGNzX3Jlc291cmNlcyksCisJLmh3ID0gSU5UQ19IV19ERVNDKGludGNzX3ZlY3RvcnMsIGludGNzX2dyb3VwcywgaW50Y3NfbWFza19yZWdpc3RlcnMsCisJCQkgICBpbnRjc19wcmlvX3JlZ2lzdGVycywgTlVMTCwgTlVMTCksCit9OworCitzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBzaDczYTBfaW50Y3NfY2FzY2FkZTsKKworc3RhdGljIGlycXJldHVybl90IHNoNzNhMF9pbnRjc19kZW11eChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJdW5zaWduZWQgaW50IGV2dGNvZGVhcyA9IGlvcmVhZDMyKCh2b2lkIF9faW9tZW0gKilkZXZfaWQpOworCisJZ2VuZXJpY19oYW5kbGVfaXJxKGludGNzX2V2dDJpcnEoZXZ0Y29kZWFzKSk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3ZvaWQgX19pbml0IHNoNzNhMF9pbml0X2lycSh2b2lkKQoreworCXZvaWQgX19pb21lbSAqZ2ljX2Jhc2UgPSBfX2lvKDB4ZjAwMDEwMDApOworCXZvaWQgX19pb21lbSAqaW50ZXZ0c2EgPSBpb3JlbWFwX25vY2FjaGUoMHhmZmQyMDEwMCwgUEFHRV9TSVpFKTsKKworCWdpY19pbml0KDAsIDI5LCBnaWNfYmFzZSwgZ2ljX2Jhc2UpOworCisJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjc19kZXNjKTsKKworCS8qIGRlbXV4IHVzaW5nIElOVEVWVFNBICovCisJc2g3M2EwX2ludGNzX2Nhc2NhZGUubmFtZSA9ICJJTlRDUyBjYXNjYWRlIjsKKwlzaDczYTBfaW50Y3NfY2FzY2FkZS5oYW5kbGVyID0gc2g3M2EwX2ludGNzX2RlbXV4OworCXNoNzNhMF9pbnRjc19jYXNjYWRlLmRldl9pZCA9IGludGV2dHNhOworCXNldHVwX2lycShnaWNfc3BpKDUwKSwgJnNoNzNhMF9pbnRjc19jYXNjYWRlKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvbG9jYWx0aW1lci5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9sb2NhbHRpbWVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjExMWMyOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvbG9jYWx0aW1lci5jCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBTTVAgc3VwcG9ydCBmb3IgUi1Nb2JpbGUgLyBTSC1Nb2JpbGUgLSBsb2NhbCB0aW1lciBwb3J0aW9uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwICBNYWdudXMgRGFtbQorICoKKyAqIEJhc2VkIG9uIHZleHByZXNzLCBDb3B5cmlnaHQgKEMpIDIwMDIgQVJNIEx0ZCwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CisjaW5jbHVkZSA8bGludXgvY2xvY2tjaGlwcy5oPgorI2luY2x1ZGUgPGFzbS9zbXBfdHdkLmg+CisjaW5jbHVkZSA8YXNtL2xvY2FsdGltZXIuaD4KKworLyoKKyAqIFNldHVwIHRoZSBsb2NhbCBjbG9jayBldmVudHMgZm9yIGEgQ1BVLgorICovCit2b2lkIF9fY3B1aW5pdCBsb2NhbF90aW1lcl9zZXR1cChzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpCit7CisJZXZ0LT5pcnEgPSAyOTsKKwl0d2RfdGltZXJfc2V0dXAoZXZ0KTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvcGZjLXNoNzNhMC5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9wZmMtc2g3M2EwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2VlZDQ0ZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvcGZjLXNoNzNhMC5jCkBAIC0wLDAgKzEsMjc0NiBAQAorLyoKKyAqIHNoNzNhMCBwcm9jZXNzb3Igc3VwcG9ydCAtIFBGQyBoYXJkd2FyZSBibG9jaworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBSZW5lc2FzIFNvbHV0aW9ucyBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDEwIE5JU0hJTU9UTyBIaXJva2kKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUKKyAqIExpY2Vuc2UuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPG1hY2gvc2g3M2EwLmg+CisKKyNkZWZpbmUgXzEoZm4sIHBmeCwgc2Z4KSBmbihwZngsIHNmeCkKKworI2RlZmluZSBfMTAoZm4sIHBmeCwgc2Z4KQkJCQlcCisJXzEoZm4sIHBmeCMjMCwgc2Z4KSwgXzEoZm4sIHBmeCMjMSwgc2Z4KSwJXAorCV8xKGZuLCBwZngjIzIsIHNmeCksIF8xKGZuLCBwZngjIzMsIHNmeCksCVwKKwlfMShmbiwgcGZ4IyM0LCBzZngpLCBfMShmbiwgcGZ4IyM1LCBzZngpLAlcCisJXzEoZm4sIHBmeCMjNiwgc2Z4KSwgXzEoZm4sIHBmeCMjNywgc2Z4KSwJXAorCV8xKGZuLCBwZngjIzgsIHNmeCksIF8xKGZuLCBwZngjIzksIHNmeCkKKworI2RlZmluZSBfMzEwKGZuLCBwZngsIHNmeCkJCQkJXAorCV8xMChmbiwgcGZ4LCAgICBzZngpLCBfMTAoZm4sIHBmeCMjMSwgc2Z4KSwJXAorCV8xMChmbiwgcGZ4IyMyLCBzZngpLCBfMTAoZm4sIHBmeCMjMywgc2Z4KSwJXAorCV8xMChmbiwgcGZ4IyM0LCBzZngpLCBfMTAoZm4sIHBmeCMjNSwgc2Z4KSwJXAorCV8xMChmbiwgcGZ4IyM2LCBzZngpLCBfMTAoZm4sIHBmeCMjNywgc2Z4KSwJXAorCV8xMChmbiwgcGZ4IyM4LCBzZngpLCBfMTAoZm4sIHBmeCMjOSwgc2Z4KSwJXAorCV8xMChmbiwgcGZ4IyMxMCwgc2Z4KSwJCQkJXAorCV8xKGZuLCBwZngjIzExMCwgc2Z4KSwgXzEoZm4sIHBmeCMjMTExLCBzZngpLAlcCisJXzEoZm4sIHBmeCMjMTEyLCBzZngpLCBfMShmbiwgcGZ4IyMxMTMsIHNmeCksCVwKKwlfMShmbiwgcGZ4IyMxMTQsIHNmeCksIF8xKGZuLCBwZngjIzExNSwgc2Z4KSwJXAorCV8xKGZuLCBwZngjIzExNiwgc2Z4KSwgXzEoZm4sIHBmeCMjMTE3LCBzZngpLAlcCisJXzEoZm4sIHBmeCMjMTE4LCBzZngpLAkJCQlcCisJXzEoZm4sIHBmeCMjMTI4LCBzZngpLCBfMShmbiwgcGZ4IyMxMjksIHNmeCksCVwKKwlfMTAoZm4sIHBmeCMjMTMsIHNmeCksIF8xMChmbiwgcGZ4IyMxNCwgc2Z4KSwJXAorCV8xMChmbiwgcGZ4IyMxNSwgc2Z4KSwJCQkJXAorCV8xKGZuLCBwZngjIzE2MCwgc2Z4KSwgXzEoZm4sIHBmeCMjMTYxLCBzZngpLAlcCisJXzEoZm4sIHBmeCMjMTYyLCBzZngpLCBfMShmbiwgcGZ4IyMxNjMsIHNmeCksCVwKKwlfMShmbiwgcGZ4IyMxNjQsIHNmeCksCQkJCVwKKwlfMShmbiwgcGZ4IyMxOTIsIHNmeCksIF8xKGZuLCBwZngjIzE5Mywgc2Z4KSwJXAorCV8xKGZuLCBwZngjIzE5NCwgc2Z4KSwgXzEoZm4sIHBmeCMjMTk1LCBzZngpLAlcCisJXzEoZm4sIHBmeCMjMTk2LCBzZngpLCBfMShmbiwgcGZ4IyMxOTcsIHNmeCksCVwKKwlfMShmbiwgcGZ4IyMxOTgsIHNmeCksIF8xKGZuLCBwZngjIzE5OSwgc2Z4KSwJXAorCV8xMChmbiwgcGZ4IyMyMCwgc2Z4KSwgXzEwKGZuLCBwZngjIzIxLCBzZngpLAlcCisJXzEwKGZuLCBwZngjIzIyLCBzZngpLCBfMTAoZm4sIHBmeCMjMjMsIHNmeCksCVwKKwlfMTAoZm4sIHBmeCMjMjQsIHNmeCksIF8xMChmbiwgcGZ4IyMyNSwgc2Z4KSwJXAorCV8xMChmbiwgcGZ4IyMyNiwgc2Z4KSwgXzEwKGZuLCBwZngjIzI3LCBzZngpLAlcCisJXzEoZm4sIHBmeCMjMjgwLCBzZngpLCBfMShmbiwgcGZ4IyMyODEsIHNmeCksCVwKKwlfMShmbiwgcGZ4IyMyODIsIHNmeCksCQkJCVwKKwlfMShmbiwgcGZ4IyMyODgsIHNmeCksIF8xKGZuLCBwZngjIzI4OSwgc2Z4KSwJXAorCV8xMChmbiwgcGZ4IyMyOSwgc2Z4KSwgXzEwKGZuLCBwZngjIzMwLCBzZngpCisKKyNkZWZpbmUgX1BPUlQocGZ4LCBzZngpIHBmeCMjXyMjc2Z4CisjZGVmaW5lIFBPUlRfMzEwKHN0cikgXzMxMChfUE9SVCwgUE9SVCwgc3RyKQorCitlbnVtIHsKKwlQSU5NVVhfUkVTRVJWRUQgPSAwLAorCisJUElOTVVYX0RBVEFfQkVHSU4sCisJUE9SVF8zMTAoREFUQSksCQkJLyogUE9SVDBfREFUQSAtPiBQT1JUMzA5X0RBVEEgKi8KKwlQSU5NVVhfREFUQV9FTkQsCisKKwlQSU5NVVhfSU5QVVRfQkVHSU4sCisJUE9SVF8zMTAoSU4pLAkJCS8qIFBPUlQwX0lOIC0+IFBPUlQzMDlfSU4gKi8KKwlQSU5NVVhfSU5QVVRfRU5ELAorCisJUElOTVVYX0lOUFVUX1BVTExVUF9CRUdJTiwKKwlQT1JUXzMxMChJTl9QVSksCQkvKiBQT1JUMF9JTl9QVSAtPiBQT1JUMzA5X0lOX1BVICovCisJUElOTVVYX0lOUFVUX1BVTExVUF9FTkQsCisKKwlQSU5NVVhfSU5QVVRfUFVMTERPV05fQkVHSU4sCisJUE9SVF8zMTAoSU5fUEQpLAkJLyogUE9SVDBfSU5fUEQgLT4gUE9SVDMwOV9JTl9QRCAqLworCVBJTk1VWF9JTlBVVF9QVUxMRE9XTl9FTkQsCisKKwlQSU5NVVhfT1VUUFVUX0JFR0lOLAorCVBPUlRfMzEwKE9VVCksCQkJLyogUE9SVDBfT1VUIC0+IFBPUlQzMDlfT1VUICovCisJUElOTVVYX09VVFBVVF9FTkQsCisKKwlQSU5NVVhfRlVOQ1RJT05fQkVHSU4sCisJUE9SVF8zMTAoRk5fSU4pLAkJLyogUE9SVDBfRk5fSU4gLT4gUE9SVDMwOV9GTl9JTiAqLworCVBPUlRfMzEwKEZOX09VVCksCQkvKiBQT1JUMF9GTl9PVVQgLT4gUE9SVDMwOV9GTl9PVVQgKi8KKwlQT1JUXzMxMChGTjApLAkJCS8qIFBPUlQwX0ZOMCAtPiBQT1JUMzA5X0ZOMCAqLworCVBPUlRfMzEwKEZOMSksCQkJLyogUE9SVDBfRk4xIC0+IFBPUlQzMDlfRk4xICovCisJUE9SVF8zMTAoRk4yKSwJCQkvKiBQT1JUMF9GTjIgLT4gUE9SVDMwOV9GTjIgKi8KKwlQT1JUXzMxMChGTjMpLAkJCS8qIFBPUlQwX0ZOMyAtPiBQT1JUMzA5X0ZOMyAqLworCVBPUlRfMzEwKEZONCksCQkJLyogUE9SVDBfRk40IC0+IFBPUlQzMDlfRk40ICovCisJUE9SVF8zMTAoRk41KSwJCQkvKiBQT1JUMF9GTjUgLT4gUE9SVDMwOV9GTjUgKi8KKwlQT1JUXzMxMChGTjYpLAkJCS8qIFBPUlQwX0ZONiAtPiBQT1JUMzA5X0ZONiAqLworCVBPUlRfMzEwKEZONyksCQkJLyogUE9SVDBfRk43IC0+IFBPUlQzMDlfRk43ICovCisKKwlNU0VMMkNSX01TRUwxOV8wLCBNU0VMMkNSX01TRUwxOV8xLAorCU1TRUwyQ1JfTVNFTDE4XzAsIE1TRUwyQ1JfTVNFTDE4XzEsCisJTVNFTDJDUl9NU0VMMTdfMCwgTVNFTDJDUl9NU0VMMTdfMSwKKwlNU0VMMkNSX01TRUwxNl8wLCBNU0VMMkNSX01TRUwxNl8xLAorCU1TRUwyQ1JfTVNFTDE0XzAsIE1TRUwyQ1JfTVNFTDE0XzEsCisJTVNFTDJDUl9NU0VMMTNfMCwgTVNFTDJDUl9NU0VMMTNfMSwKKwlNU0VMMkNSX01TRUwxMl8wLCBNU0VMMkNSX01TRUwxMl8xLAorCU1TRUwyQ1JfTVNFTDExXzAsIE1TRUwyQ1JfTVNFTDExXzEsCisJTVNFTDJDUl9NU0VMMTBfMCwgTVNFTDJDUl9NU0VMMTBfMSwKKwlNU0VMMkNSX01TRUw5XzAsIE1TRUwyQ1JfTVNFTDlfMSwKKwlNU0VMMkNSX01TRUw4XzAsIE1TRUwyQ1JfTVNFTDhfMSwKKwlNU0VMMkNSX01TRUw3XzAsIE1TRUwyQ1JfTVNFTDdfMSwKKwlNU0VMMkNSX01TRUw2XzAsIE1TRUwyQ1JfTVNFTDZfMSwKKwlNU0VMMkNSX01TRUw0XzAsIE1TRUwyQ1JfTVNFTDRfMSwKKwlNU0VMMkNSX01TRUw1XzAsIE1TRUwyQ1JfTVNFTDVfMSwKKwlNU0VMMkNSX01TRUwzXzAsIE1TRUwyQ1JfTVNFTDNfMSwKKwlNU0VMMkNSX01TRUwyXzAsIE1TRUwyQ1JfTVNFTDJfMSwKKwlNU0VMMkNSX01TRUwxXzAsIE1TRUwyQ1JfTVNFTDFfMSwKKwlNU0VMMkNSX01TRUwwXzAsIE1TRUwyQ1JfTVNFTDBfMSwKKwlNU0VMM0NSX01TRUwyOF8wLCBNU0VMM0NSX01TRUwyOF8xLAorCU1TRUwzQ1JfTVNFTDE1XzAsIE1TRUwzQ1JfTVNFTDE1XzEsCisJTVNFTDNDUl9NU0VMMTFfMCwgTVNFTDNDUl9NU0VMMTFfMSwKKwlNU0VMM0NSX01TRUw5XzAsIE1TRUwzQ1JfTVNFTDlfMSwKKwlNU0VMM0NSX01TRUw2XzAsIE1TRUwzQ1JfTVNFTDZfMSwKKwlNU0VMM0NSX01TRUwyXzAsIE1TRUwzQ1JfTVNFTDJfMSwKKwlNU0VMNENSX01TRUwyOV8wLCBNU0VMNENSX01TRUwyOV8xLAorCU1TRUw0Q1JfTVNFTDI3XzAsIE1TRUw0Q1JfTVNFTDI3XzEsCisJTVNFTDRDUl9NU0VMMjZfMCwgTVNFTDRDUl9NU0VMMjZfMSwKKwlNU0VMNENSX01TRUwyMl8wLCBNU0VMNENSX01TRUwyMl8xLAorCU1TRUw0Q1JfTVNFTDIxXzAsIE1TRUw0Q1JfTVNFTDIxXzEsCisJTVNFTDRDUl9NU0VMMjBfMCwgTVNFTDRDUl9NU0VMMjBfMSwKKwlNU0VMNENSX01TRUwxOV8wLCBNU0VMNENSX01TRUwxOV8xLAorCU1TRUw0Q1JfTVNFTDE1XzAsIE1TRUw0Q1JfTVNFTDE1XzEsCisJTVNFTDRDUl9NU0VMMTNfMCwgTVNFTDRDUl9NU0VMMTNfMSwKKwlNU0VMNENSX01TRUwxMl8wLCBNU0VMNENSX01TRUwxMl8xLAorCU1TRUw0Q1JfTVNFTDExXzAsIE1TRUw0Q1JfTVNFTDExXzEsCisJTVNFTDRDUl9NU0VMMTBfMCwgTVNFTDRDUl9NU0VMMTBfMSwKKwlNU0VMNENSX01TRUw5XzAsIE1TRUw0Q1JfTVNFTDlfMSwKKwlNU0VMNENSX01TRUw4XzAsIE1TRUw0Q1JfTVNFTDhfMSwKKwlNU0VMNENSX01TRUw3XzAsIE1TRUw0Q1JfTVNFTDdfMSwKKwlNU0VMNENSX01TRUw0XzAsIE1TRUw0Q1JfTVNFTDRfMSwKKwlNU0VMNENSX01TRUwxXzAsIE1TRUw0Q1JfTVNFTDFfMSwKKwlQSU5NVVhfRlVOQ1RJT05fRU5ELAorCisJUElOTVVYX01BUktfQkVHSU4sCisJLyogSGFyZHdhcmUgbWFudWFsIFRhYmxlIDI1LTEgKEZ1bmN0aW9uIDAtNykgKi8KKwlWQlVTXzBfTUFSSywKKwlHUEkwX01BUkssCisJR1BJMV9NQVJLLAorCUdQSTJfTUFSSywKKwlHUEkzX01BUkssCisJR1BJNF9NQVJLLAorCUdQSTVfTUFSSywKKwlHUEk2X01BUkssCisJR1BJN19NQVJLLAorCVNDSUZBN19SWERfTUFSSywKKwlTQ0lGQTdfQ1RTX19NQVJLLAorCUdQTzdfTUFSSywgTUZHMF9PVVQyX01BUkssCisJR1BPNl9NQVJLLCBNRkcxX09VVDJfTUFSSywKKwlHUE81X01BUkssIFNDSUZBMF9TQ0tfTUFSSywgRlNJQ09TTERUM19NQVJLLCBQT1JUMTZfVklPX0NLT1JfTUFSSywKKwlTQ0lGQTBfVFhEX01BUkssCisJU0NJRkE3X1RYRF9NQVJLLAorCVNDSUZBN19SVFNfX01BUkssIFBPUlQxOV9WSU9fQ0tPMl9NQVJLLAorCUdQTzBfTUFSSywKKwlHUE8xX01BUkssCisJR1BPMl9NQVJLLCBTVEFUVVMwX01BUkssCisJR1BPM19NQVJLLCBTVEFUVVMxX01BUkssCisJR1BPNF9NQVJLLCBTVEFUVVMyX01BUkssCisJVklOVF9NQVJLLAorCVRDS09OX01BUkssCisJWERWRlMxX01BUkssIFBPUlQyN19JMkNfU0NMMl9NQVJLLCBQT1JUMjdfSTJDX1NDTDNfTUFSSywgXAorCU1GRzBfT1VUMV9NQVJLLCBQT1JUMjdfSVJPVVRfTUFSSywKKwlYRFZGUzJfTUFSSywgUE9SVDI4X0kyQ19TREEyX01BUkssIFBPUlQyOF9JMkNfU0RBM19NQVJLLCBcCisJUE9SVDI4X1RQVTFUTzFfTUFSSywKKwlTSU1fUlNUX01BUkssIFBPUlQyOV9UUFUxVE8xX01BUkssCisJU0lNX0NMS19NQVJLLCBQT1JUMzBfVklPX0NLT1JfTUFSSywKKwlTSU1fRF9NQVJLLCBQT1JUMzFfSVJPVVRfTUFSSywKKwlTQ0lGQTRfVFhEX01BUkssCisJU0NJRkE0X1JYRF9NQVJLLCBYV1VQX01BUkssCisJU0NJRkE0X1JUU19fTUFSSywKKwlTQ0lGQTRfQ1RTX19NQVJLLAorCUZTSUJPQlRfTUFSSywgRlNJQklCVF9NQVJLLAorCUZTSUJPTFJfTUFSSywgRlNJQklMUl9NQVJLLAorCUZTSUJPU0xEX01BUkssCisJRlNJQklTTERfTUFSSywKKwlWQUNLX01BUkssCisJWFRBTDFMX01BUkssCisJU0NJRkEwX1JUU19fTUFSSywgRlNJQ09TTERUMl9NQVJLLAorCVNDSUZBMF9SWERfTUFSSywKKwlTQ0lGQTBfQ1RTX19NQVJLLCBGU0lDT1NMRFQxX01BUkssCisJRlNJQ09CVF9NQVJLLCBGU0lDSUJUX01BUkssIEZTSURPQlRfTUFSSywgRlNJRElCVF9NQVJLLAorCUZTSUNPTFJfTUFSSywgRlNJQ0lMUl9NQVJLLCBGU0lET0xSX01BUkssIEZTSURJTFJfTUFSSywKKwlGU0lDT1NMRF9NQVJLLCBQT1JUNDdfRlNJQ1NQRElGX01BUkssCisJRlNJQ0lTTERfTUFSSywgRlNJRElTTERfTUFSSywKKwlGU0lBQ0tfTUFSSywgUE9SVDQ5X0lSREFfT1VUX01BUkssIFBPUlQ0OV9JUk9VVF9NQVJLLCBGU0lBT01DX01BUkssCisJRlNJQU9MUl9NQVJLLCBCQklGMl9UU1lOQzJfTUFSSywgVFBVMlRPMl9NQVJLLCBGU0lBSUxSX01BUkssCisKKwlGU0lBT0JUX01BUkssIEJCSUYyX1RTQ0syX01BUkssIFRQVTJUTzNfTUFSSywgRlNJQUlCVF9NQVJLLAorCUZTSUFPU0xEX01BUkssIEJCSUYyX1RYRDJfTUFSSywKKwlGU0lBU1BESUZfTUFSSywgUE9SVDUzX0lSREFfSU5fTUFSSywgVFBVM1RPM19NQVJLLCBGU0lCU1BESUZfTUFSSywgXAorCVBPUlQ1M19GU0lDU1BESUZfTUFSSywKKwlGU0lCQ0tfTUFSSywgUE9SVDU0X0lSREFfRklSU0VMX01BUkssIFRQVTNUTzJfTUFSSywgRlNJQk9NQ19NQVJLLCBcCisJRlNJQ0NLX01BUkssIEZTSUNPTUNfTUFSSywKKwlGU0lBSVNMRF9NQVJLLCBUUFUwVE8wX01BUkssCisJQTBfTUFSSywgQlNfX01BUkssCisJQTEyX01BUkssIFBPUlQ1OF9LRVlPVVQ3X01BUkssIFRQVTRUTzJfTUFSSywKKwlBMTNfTUFSSywgUE9SVDU5X0tFWU9VVDZfTUFSSywgVFBVMFRPMV9NQVJLLAorCUExNF9NQVJLLCBLRVlPVVQ1X01BUkssCisJQTE1X01BUkssIEtFWU9VVDRfTUFSSywKKwlBMTZfTUFSSywgS0VZT1VUM19NQVJLLCBNU0lPRjBfU1MxX01BUkssCisJQTE3X01BUkssIEtFWU9VVDJfTUFSSywgTVNJT0YwX1RTWU5DX01BUkssCisJQTE4X01BUkssIEtFWU9VVDFfTUFSSywgTVNJT0YwX1RTQ0tfTUFSSywKKwlBMTlfTUFSSywgS0VZT1VUMF9NQVJLLCBNU0lPRjBfVFhEX01BUkssCisJQTIwX01BUkssIEtFWUlOMF9NQVJLLCBNU0lPRjBfUlNDS19NQVJLLAorCUEyMV9NQVJLLCBLRVlJTjFfTUFSSywgTVNJT0YwX1JTWU5DX01BUkssCisJQTIyX01BUkssIEtFWUlOMl9NQVJLLCBNU0lPRjBfTUNLMF9NQVJLLAorCUEyM19NQVJLLCBLRVlJTjNfTUFSSywgTVNJT0YwX01DSzFfTUFSSywKKwlBMjRfTUFSSywgS0VZSU40X01BUkssIE1TSU9GMF9SWERfTUFSSywKKwlBMjVfTUFSSywgS0VZSU41X01BUkssIE1TSU9GMF9TUzJfTUFSSywKKwlBMjZfTUFSSywgS0VZSU42X01BUkssCisJS0VZSU43X01BUkssCisJRDBfTkFGMF9NQVJLLAorCUQxX05BRjFfTUFSSywKKwlEMl9OQUYyX01BUkssCisJRDNfTkFGM19NQVJLLAorCUQ0X05BRjRfTUFSSywKKwlENV9OQUY1X01BUkssCisJRDZfTkFGNl9NQVJLLAorCUQ3X05BRjdfTUFSSywKKwlEOF9OQUY4X01BUkssCisJRDlfTkFGOV9NQVJLLAorCUQxMF9OQUYxMF9NQVJLLAorCUQxMV9OQUYxMV9NQVJLLAorCUQxMl9OQUYxMl9NQVJLLAorCUQxM19OQUYxM19NQVJLLAorCUQxNF9OQUYxNF9NQVJLLAorCUQxNV9OQUYxNV9NQVJLLAorCUNTNF9fTUFSSywKKwlDUzVBX19NQVJLLCBQT1JUOTFfUkRXUl9NQVJLLAorCUNTNUJfX01BUkssIEZDRTFfX01BUkssCisJQ1M2Ql9fTUFSSywgREFDSzBfTUFSSywKKwlGQ0UwX19NQVJLLCBDUzZBX19NQVJLLAorCVdBSVRfX01BUkssIERSRVEwX01BUkssCisJUkRfX0ZTQ19NQVJLLAorCVdFMF9fRldFX01BUkssIFJEV1JfRldFX01BUkssCisJV0UxX19NQVJLLAorCUZSQl9NQVJLLAorCUNLT19NQVJLLAorCU5CUlNUT1VUX19NQVJLLAorCU5CUlNUX19NQVJLLAorCUJCSUYyX1RYRF9NQVJLLAorCUJCSUYyX1JYRF9NQVJLLAorCUJCSUYyX1NZTkNfTUFSSywKKwlCQklGMl9TQ0tfTUFSSywKKwlTQ0lGQTNfQ1RTX19NQVJLLCBNRkczX0lOMl9NQVJLLAorCVNDSUZBM19SWERfTUFSSywgTUZHM19JTjFfTUFSSywKKwlCQklGMV9TUzJfTUFSSywgU0NJRkEzX1JUU19fTUFSSywgTUZHM19PVVQxX01BUkssCisJU0NJRkEzX1RYRF9NQVJLLAorCUhTSV9SWF9EQVRBX01BUkssIEJCSUYxX1JYRF9NQVJLLAorCUhTSV9UWF9XQUtFX01BUkssIEJCSUYxX1RTQ0tfTUFSSywKKwlIU0lfVFhfREFUQV9NQVJLLCBCQklGMV9UU1lOQ19NQVJLLAorCUhTSV9UWF9SRUFEWV9NQVJLLCBCQklGMV9UWERfTUFSSywKKwlIU0lfUlhfUkVBRFlfTUFSSywgQkJJRjFfUlNDS19NQVJLLCBQT1JUMTE1X0kyQ19TQ0wyX01BUkssIFwKKwlQT1JUMTE1X0kyQ19TQ0wzX01BUkssCisJSFNJX1JYX1dBS0VfTUFSSywgQkJJRjFfUlNZTkNfTUFSSywgUE9SVDExNl9JMkNfU0RBMl9NQVJLLCBcCisJUE9SVDExNl9JMkNfU0RBM19NQVJLLAorCUhTSV9SWF9GTEFHX01BUkssIEJCSUYxX1NTMV9NQVJLLCBCQklGMV9GTE9XX01BUkssCisJSFNJX1RYX0ZMQUdfTUFSSywKKwlWSU9fVkRfTUFSSywgUE9SVDEyOF9MQ0QyVlNZTl9NQVJLLCBWSU8yX1ZEX01BUkssIExDRDJEMF9NQVJLLAorCisJVklPX0hEX01BUkssIFBPUlQxMjlfTENEMkhTWU5fTUFSSywgUE9SVDEyOV9MQ0QyQ1NfX01BUkssIFwKKwlWSU8yX0hEX01BUkssIExDRDJEMV9NQVJLLAorCVZJT19EMF9NQVJLLCBQT1JUMTMwX01TSU9GMl9SWERfTUFSSywgTENEMkQxMF9NQVJLLAorCVZJT19EMV9NQVJLLCBQT1JUMTMxX0tFWU9VVDZfTUFSSywgUE9SVDEzMV9NU0lPRjJfU1MxX01BUkssIFwKKwlQT1JUMTMxX0tFWU9VVDExX01BUkssIExDRDJEMTFfTUFSSywKKwlWSU9fRDJfTUFSSywgUE9SVDEzMl9LRVlPVVQ3X01BUkssIFBPUlQxMzJfTVNJT0YyX1NTMl9NQVJLLCBcCisJUE9SVDEzMl9LRVlPVVQxMF9NQVJLLCBMQ0QyRDEyX01BUkssCisJVklPX0QzX01BUkssIE1TSU9GMl9UU1lOQ19NQVJLLCBMQ0QyRDEzX01BUkssCisJVklPX0Q0X01BUkssIE1TSU9GMl9UWERfTUFSSywgTENEMkQxNF9NQVJLLAorCVZJT19ENV9NQVJLLCBNU0lPRjJfVFNDS19NQVJLLCBMQ0QyRDE1X01BUkssCisJVklPX0Q2X01BUkssIFBPUlQxMzZfS0VZT1VUOF9NQVJLLCBMQ0QyRDE2X01BUkssCisJVklPX0Q3X01BUkssIFBPUlQxMzdfS0VZT1VUOV9NQVJLLCBMQ0QyRDE3X01BUkssCisJVklPX0Q4X01BUkssIFBPUlQxMzhfS0VZT1VUOF9NQVJLLCBWSU8yX0QwX01BUkssIExDRDJENl9NQVJLLAorCVZJT19EOV9NQVJLLCBQT1JUMTM5X0tFWU9VVDlfTUFSSywgVklPMl9EMV9NQVJLLCBMQ0QyRDdfTUFSSywKKwlWSU9fRDEwX01BUkssIFRQVTBUTzJfTUFSSywgVklPMl9EMl9NQVJLLCBMQ0QyRDhfTUFSSywKKwlWSU9fRDExX01BUkssIFRQVTBUTzNfTUFSSywgVklPMl9EM19NQVJLLCBMQ0QyRDlfTUFSSywKKwlWSU9fRDEyX01BUkssIFBPUlQxNDJfS0VZT1VUMTBfTUFSSywgVklPMl9ENF9NQVJLLCBMQ0QyRDJfTUFSSywKKwlWSU9fRDEzX01BUkssIFBPUlQxNDNfS0VZT1VUMTFfTUFSSywgUE9SVDE0M19LRVlPVVQ2X01BUkssIFwKKwlWSU8yX0Q1X01BUkssIExDRDJEM19NQVJLLAorCVZJT19EMTRfTUFSSywgUE9SVDE0NF9LRVlPVVQ3X01BUkssIFZJTzJfRDZfTUFSSywgTENEMkQ0X01BUkssCisJVklPX0QxNV9NQVJLLCBUUFUxVE8zX01BUkssIFBPUlQxNDVfTENEMkRJU1BfTUFSSywgXAorCVBPUlQxNDVfTENEMlJTX01BUkssIFZJTzJfRDdfTUFSSywgTENEMkQ1X01BUkssCisJVklPX0NMS19NQVJLLCBMQ0QyRENLX01BUkssIFBPUlQxNDZfTENEMldSX19NQVJLLCBWSU8yX0NMS19NQVJLLCBcCisJTENEMkQxOF9NQVJLLAorCVZJT19GSUVMRF9NQVJLLCBMQ0QyUkRfX01BUkssIFZJTzJfRklFTERfTUFSSywgTENEMkQxOV9NQVJLLAorCVZJT19DS09fTUFSSywKKwlBMjdfTUFSSywgUE9SVDE0OV9SRFdSX01BUkssIE1GRzBfSU4xX01BUkssIFBPUlQxNDlfS0VZT1VUOV9NQVJLLAorCU1GRzBfSU4yX01BUkssCisJVFNfU1BTWU5DM19NQVJLLCBNU0lPRjJfUlNDS19NQVJLLAorCVRTX1NEQVQzX01BUkssIE1TSU9GMl9SU1lOQ19NQVJLLAorCVRQVTFUTzJfTUFSSywgVFNfU0RFTjNfTUFSSywgUE9SVDE1M19NU0lPRjJfU1MxX01BUkssCisJU0NJRkEyX1RYRDFfTUFSSywgTVNJT0YyX01DSzBfTUFSSywKKwlTQ0lGQTJfUlhEMV9NQVJLLCBNU0lPRjJfTUNLMV9NQVJLLAorCVNDSUZBMl9SVFMxX19NQVJLLCBQT1JUMTU2X01TSU9GMl9TUzJfTUFSSywKKwlTQ0lGQTJfQ1RTMV9fTUFSSywgUE9SVDE1N19NU0lPRjJfUlhEX01BUkssCisJRElOVF9fTUFSSywgU0NJRkEyX1NDSzFfTUFSSywgVFNfU0NLM19NQVJLLAorCVBPUlQxNTlfU0NJRkJfU0NLX01BUkssIFBPUlQxNTlfU0NJRkE1X1NDS19NQVJLLCBOTUlfTUFSSywKKwlQT1JUMTYwX1NDSUZCX1RYRF9NQVJLLCBQT1JUMTYwX1NDSUZBNV9UWERfTUFSSywKKwlQT1JUMTYxX1NDSUZCX0NUU19fTUFSSywgUE9SVDE2MV9TQ0lGQTVfQ1RTX19NQVJLLAorCVBPUlQxNjJfU0NJRkJfUlhEX01BUkssIFBPUlQxNjJfU0NJRkE1X1JYRF9NQVJLLAorCVBPUlQxNjNfU0NJRkJfUlRTX19NQVJLLCBQT1JUMTYzX1NDSUZBNV9SVFNfX01BUkssIFRQVTNUTzBfTUFSSywKKwlMQ0REMF9NQVJLLAorCUxDREQxX01BUkssIFBPUlQxOTNfU0NJRkE1X0NUU19fTUFSSywgQkJJRjJfVFNZTkMxX01BUkssCisJTENERDJfTUFSSywgUE9SVDE5NF9TQ0lGQTVfUlRTX19NQVJLLCBCQklGMl9UU0NLMV9NQVJLLAorCUxDREQzX01BUkssIFBPUlQxOTVfU0NJRkE1X1JYRF9NQVJLLCBCQklGMl9UWEQxX01BUkssCisJTENERDRfTUFSSywgUE9SVDE5Nl9TQ0lGQTVfVFhEX01BUkssCisJTENERDVfTUFSSywgUE9SVDE5N19TQ0lGQTVfU0NLX01BUkssIE1GRzJfT1VUMl9NQVJLLCBUUFUyVE8xX01BUkssCisJTENERDZfTUFSSywKKwlMQ0REN19NQVJLLCBUUFU0VE8xX01BUkssIE1GRzRfT1VUMl9NQVJLLAorCUxDREQ4X01BUkssIEQxNl9NQVJLLAorCUxDREQ5X01BUkssIEQxN19NQVJLLAorCUxDREQxMF9NQVJLLCBEMThfTUFSSywKKwlMQ0REMTFfTUFSSywgRDE5X01BUkssCisJTENERDEyX01BUkssIEQyMF9NQVJLLAorCUxDREQxM19NQVJLLCBEMjFfTUFSSywKKwlMQ0REMTRfTUFSSywgRDIyX01BUkssCisJTENERDE1X01BUkssIFBPUlQyMDdfTVNJT0YwTF9TUzFfTUFSSywgRDIzX01BUkssCisJTENERDE2X01BUkssIFBPUlQyMDhfTVNJT0YwTF9TUzJfTUFSSywgRDI0X01BUkssCisJTENERDE3X01BUkssIEQyNV9NQVJLLAorCUxDREQxOF9NQVJLLCBEUkVRMl9NQVJLLCBQT1JUMjEwX01TSU9GMExfU1MxX01BUkssIEQyNl9NQVJLLAorCUxDREQxOV9NQVJLLCBQT1JUMjExX01TSU9GMExfU1MyX01BUkssIEQyN19NQVJLLAorCUxDREQyMF9NQVJLLCBUU19TUFNZTkMxX01BUkssIE1TSU9GMExfTUNLMF9NQVJLLCBEMjhfTUFSSywKKwlMQ0REMjFfTUFSSywgVFNfU0RBVDFfTUFSSywgTVNJT0YwTF9NQ0sxX01BUkssIEQyOV9NQVJLLAorCUxDREQyMl9NQVJLLCBUU19TREVOMV9NQVJLLCBNU0lPRjBMX1JTQ0tfTUFSSywgRDMwX01BUkssCisJTENERDIzX01BUkssIFRTX1NDSzFfTUFSSywgTVNJT0YwTF9SU1lOQ19NQVJLLCBEMzFfTUFSSywKKwlMQ0REQ0tfTUFSSywgTENEV1JfX01BUkssCisJTENEUkRfX01BUkssIERBQ0syX01BUkssIFBPUlQyMTdfTENEMlJTX01BUkssIE1TSU9GMExfVFNZTkNfTUFSSywgXAorCVZJTzJfRklFTEQzX01BUkssIFBPUlQyMTdfTENEMkRJU1BfTUFSSywKKwlMQ0RIU1lOX01BUkssIExDRENTX19NQVJLLCBMQ0RDUzJfX01BUkssIERBQ0szX01BUkssIFwKKwlQT1JUMjE4X1ZJT19DS09SX01BUkssCisJTENERElTUF9NQVJLLCBMQ0RSU19NQVJLLCBQT1JUMjE5X0xDRDJXUl9fTUFSSywgRFJFUTNfTUFSSywgXAorCU1TSU9GMExfVFNDS19NQVJLLCBWSU8yX0NMSzNfTUFSSywgTENEMkRDS18yX01BUkssCisJTENEVlNZTl9NQVJLLCBMQ0RWU1lOMl9NQVJLLAorCUxDRExDTEtfTUFSSywgRFJFUTFfTUFSSywgUE9SVDIyMV9MQ0QyQ1NfX01BUkssIFBXRU5fTUFSSywgXAorCU1TSU9GMExfUlhEX01BUkssIFZJTzJfSEQzX01BUkssIFBPUlQyMjFfTENEMkhTWU5fTUFSSywKKwlMQ0RET05fTUFSSywgTENERE9OMl9NQVJLLCBEQUNLMV9NQVJLLCBPVkNOX01BUkssIE1TSU9GMExfVFhEX01BUkssIFwKKwlWSU8yX1ZEM19NQVJLLCBQT1JUMjIyX0xDRDJWU1lOX01BUkssCisKKwlTQ0lGQTFfVFhEX01BUkssIE9WQ04yX01BUkssCisJRVhUTFBfTUFSSywgU0NJRkExX1NDS19NQVJLLCBQT1JUMjI2X1ZJT19DS08yX01BUkssCisJU0NJRkExX1JUU19fTUFSSywgSURJTl9NQVJLLAorCVNDSUZBMV9SWERfTUFSSywKKwlTQ0lGQTFfQ1RTX19NQVJLLCBNRkcxX0lOMV9NQVJLLAorCU1TSU9GMV9UWERfTUFSSywgU0NJRkEyX1RYRDJfTUFSSywKKwlNU0lPRjFfVFNZTkNfTUFSSywgU0NJRkEyX0NUUzJfX01BUkssCisJTVNJT0YxX1RTQ0tfTUFSSywgU0NJRkEyX1NDSzJfTUFSSywKKwlNU0lPRjFfUlhEX01BUkssIFNDSUZBMl9SWEQyX01BUkssCisJTVNJT0YxX1JTQ0tfTUFSSywgU0NJRkEyX1JUUzJfX01BUkssIFZJTzJfQ0xLMl9NQVJLLCBMQ0QyRDIwX01BUkssCisJTVNJT0YxX1JTWU5DX01BUkssIE1GRzFfSU4yX01BUkssIFZJTzJfVkQyX01BUkssIExDRDJEMjFfTUFSSywKKwlNU0lPRjFfTUNLMF9NQVJLLCBQT1JUMjM2X0kyQ19TREEyX01BUkssCisJTVNJT0YxX01DSzFfTUFSSywgUE9SVDIzN19JMkNfU0NMMl9NQVJLLAorCU1TSU9GMV9TUzFfTUFSSywgVklPMl9GSUVMRDJfTUFSSywgTENEMkQyMl9NQVJLLAorCU1TSU9GMV9TUzJfTUFSSywgVklPMl9IRDJfTUFSSywgTENEMkQyM19NQVJLLAorCVNDSUZBNl9UWERfTUFSSywKKwlQT1JUMjQxX0lSREFfT1VUX01BUkssIFBPUlQyNDFfSVJPVVRfTUFSSywgTUZHNF9PVVQxX01BUkssIFRQVTRUTzBfTUFSSywKKwlQT1JUMjQyX0lSREFfSU5fTUFSSywgTUZHNF9JTjJfTUFSSywKKwlQT1JUMjQzX0lSREFfRklSU0VMX01BUkssIFBPUlQyNDNfVklPX0NLTzJfTUFSSywKKwlQT1JUMjQ0X1NDSUZBNV9DVFNfX01BUkssIE1GRzJfSU4xX01BUkssIFBPUlQyNDRfU0NJRkJfQ1RTX19NQVJLLCBcCisJTVNJT0YyUl9SWERfTUFSSywKKwlQT1JUMjQ1X1NDSUZBNV9SVFNfX01BUkssIE1GRzJfSU4yX01BUkssIFBPUlQyNDVfU0NJRkJfUlRTX19NQVJLLCBcCisJTVNJT0YyUl9UWERfTUFSSywKKwlQT1JUMjQ2X1NDSUZBNV9SWERfTUFSSywgTUZHMV9PVVQxX01BUkssIFBPUlQyNDZfU0NJRkJfUlhEX01BUkssIFwKKwlUUFUxVE8wX01BUkssCisJUE9SVDI0N19TQ0lGQTVfVFhEX01BUkssIE1GRzNfT1VUMl9NQVJLLCBQT1JUMjQ3X1NDSUZCX1RYRF9NQVJLLCBcCisJVFBVM1RPMV9NQVJLLAorCVBPUlQyNDhfU0NJRkE1X1NDS19NQVJLLCBNRkcyX09VVDFfTUFSSywgUE9SVDI0OF9TQ0lGQl9TQ0tfTUFSSywgXAorCVRQVTJUTzBfTUFSSywgUE9SVDI0OF9JMkNfU0NMM19NQVJLLCBNU0lPRjJSX1RTQ0tfTUFSSywKKwlQT1JUMjQ5X0lST1VUX01BUkssIE1GRzRfSU4xX01BUkssIFBPUlQyNDlfSTJDX1NEQTNfTUFSSywgXAorCU1TSU9GMlJfVFNZTkNfTUFSSywKKwlTREhJQ0xLMF9NQVJLLAorCVNESElDRDBfTUFSSywKKwlTREhJRDBfMF9NQVJLLAorCVNESElEMF8xX01BUkssCisJU0RISUQwXzJfTUFSSywKKwlTREhJRDBfM19NQVJLLAorCVNESElDTUQwX01BUkssCisJU0RISVdQMF9NQVJLLAorCVNESElDTEsxX01BUkssCisJU0RISUQxXzBfTUFSSywgVFNfU1BTWU5DMl9NQVJLLAorCVNESElEMV8xX01BUkssIFRTX1NEQVQyX01BUkssCisJU0RISUQxXzJfTUFSSywgVFNfU0RFTjJfTUFSSywKKwlTREhJRDFfM19NQVJLLCBUU19TQ0syX01BUkssCisJU0RISUNNRDFfTUFSSywKKwlTREhJQ0xLMl9NQVJLLAorCVNESElEMl8wX01BUkssIFRTX1NQU1lOQzRfTUFSSywKKwlTREhJRDJfMV9NQVJLLCBUU19TREFUNF9NQVJLLAorCVNESElEMl8yX01BUkssIFRTX1NERU40X01BUkssCisJU0RISUQyXzNfTUFSSywgVFNfU0NLNF9NQVJLLAorCVNESElDTUQyX01BUkssCisJTU1DQ0xLMF9NQVJLLAorCU1NQ0QwXzBfTUFSSywKKwlNTUNEMF8xX01BUkssCisJTU1DRDBfMl9NQVJLLAorCU1NQ0QwXzNfTUFSSywKKwlNTUNEMF80X01BUkssIFRTX1NQU1lOQzVfTUFSSywKKwlNTUNEMF81X01BUkssIFRTX1NEQVQ1X01BUkssCisJTU1DRDBfNl9NQVJLLCBUU19TREVONV9NQVJLLAorCU1NQ0QwXzdfTUFSSywgVFNfU0NLNV9NQVJLLAorCU1NQ0NNRDBfTUFSSywKKwlSRVNFVE9VVFNfX01BUkssIEVYVEFMMk9VVF9NQVJLLAorCU1DUF9XQUlUX19NQ1BfRlJCX01BUkssCisJTUNQX0NLT19NQVJLLCBNTUNDTEsxX01BUkssCisJTUNQX0QxNV9NQ1BfTkFGMTVfTUFSSywKKwlNQ1BfRDE0X01DUF9OQUYxNF9NQVJLLAorCU1DUF9EMTNfTUNQX05BRjEzX01BUkssCisJTUNQX0QxMl9NQ1BfTkFGMTJfTUFSSywKKwlNQ1BfRDExX01DUF9OQUYxMV9NQVJLLAorCU1DUF9EMTBfTUNQX05BRjEwX01BUkssCisJTUNQX0Q5X01DUF9OQUY5X01BUkssCisJTUNQX0Q4X01DUF9OQUY4X01BUkssIE1NQ0NNRDFfTUFSSywKKwlNQ1BfRDdfTUNQX05BRjdfTUFSSywgTU1DRDFfN19NQVJLLAorCisJTUNQX0Q2X01DUF9OQUY2X01BUkssIE1NQ0QxXzZfTUFSSywKKwlNQ1BfRDVfTUNQX05BRjVfTUFSSywgTU1DRDFfNV9NQVJLLAorCU1DUF9ENF9NQ1BfTkFGNF9NQVJLLCBNTUNEMV80X01BUkssCisJTUNQX0QzX01DUF9OQUYzX01BUkssIE1NQ0QxXzNfTUFSSywKKwlNQ1BfRDJfTUNQX05BRjJfTUFSSywgTU1DRDFfMl9NQVJLLAorCU1DUF9EMV9NQ1BfTkFGMV9NQVJLLCBNTUNEMV8xX01BUkssCisJTUNQX0QwX01DUF9OQUYwX01BUkssIE1NQ0QxXzBfTUFSSywKKwlNQ1BfTkJSU1RPVVRfX01BUkssCisJTUNQX1dFMF9fTUNQX0ZXRV9NQVJLLCBNQ1BfUkRXUl9NQ1BfRldFX01BUkssCisKKwkvKiBNU0VMMiBzcGVjaWFsIGNhc2VzICovCisJVFNJRjJfVFNfWFgxX01BUkssCisJVFNJRjJfVFNfWFgyX01BUkssCisJVFNJRjJfVFNfWFgzX01BUkssCisJVFNJRjJfVFNfWFg0X01BUkssCisJVFNJRjJfVFNfWFg1X01BUkssCisJVFNJRjFfVFNfWFgxX01BUkssCisJVFNJRjFfVFNfWFgyX01BUkssCisJVFNJRjFfVFNfWFgzX01BUkssCisJVFNJRjFfVFNfWFg0X01BUkssCisJVFNJRjFfVFNfWFg1X01BUkssCisJVFNJRjBfVFNfWFgxX01BUkssCisJVFNJRjBfVFNfWFgyX01BUkssCisJVFNJRjBfVFNfWFgzX01BUkssCisJVFNJRjBfVFNfWFg0X01BUkssCisJVFNJRjBfVFNfWFg1X01BUkssCisJTVNUMV9UU19YWDFfTUFSSywKKwlNU1QxX1RTX1hYMl9NQVJLLAorCU1TVDFfVFNfWFgzX01BUkssCisJTVNUMV9UU19YWDRfTUFSSywKKwlNU1QxX1RTX1hYNV9NQVJLLAorCU1TVDBfVFNfWFgxX01BUkssCisJTVNUMF9UU19YWDJfTUFSSywKKwlNU1QwX1RTX1hYM19NQVJLLAorCU1TVDBfVFNfWFg0X01BUkssCisJTVNUMF9UU19YWDVfTUFSSywKKworCS8qIE1TRUwzIHNwZWNpYWwgY2FzZXMgKi8KKwlTREhJMF9WQ0NRX01DMF9PTl9NQVJLLAorCVNESEkwX1ZDQ1FfTUMwX09GRl9NQVJLLAorCURFQlVHX01PTl9WSU9fTUFSSywKKwlERUJVR19NT05fTENERF9NQVJLLAorCUxDRENfTENEQzBfTUFSSywKKwlMQ0RDX0xDREMxX01BUkssCisKKwkvKiBNU0VMNCBzcGVjaWFsIGNhc2VzICovCisJSVJROV9NRU1fSU5UX01BUkssCisJSVJROV9NQ1BfSU5UX01BUkssCisJQTExX01BUkssCisJS0VZT1VUOF9NQVJLLAorCVRQVTRUTzNfTUFSSywKKwlSRVNFVEFfTl9QVV9PTl9NQVJLLAorCVJFU0VUQV9OX1BVX09GRl9NQVJLLAorCUVEQkdSRVFfUERfTUFSSywKKwlFREJHUkVRX1BVX01BUkssCisKKwkvKiBGdW5jdGlvbnMgd2l0aCBwdWxsLXVwcyAqLworCUtFWUlOMF9QVV9NQVJLLAorCUtFWUlOMV9QVV9NQVJLLAorCUtFWUlOMl9QVV9NQVJLLAorCUtFWUlOM19QVV9NQVJLLAorCUtFWUlONF9QVV9NQVJLLAorCUtFWUlONV9QVV9NQVJLLAorCUtFWUlONl9QVV9NQVJLLAorCUtFWUlON19QVV9NQVJLLAorCVNESElEMV8wX1BVX01BUkssCisJU0RISUQxXzFfUFVfTUFSSywKKwlTREhJRDFfMl9QVV9NQVJLLAorCVNESElEMV8zX1BVX01BUkssCisJU0RISUNNRDFfUFVfTUFSSywKKwlNTUNDTUQwX1BVX01BUkssCisJTU1DQ01EMV9QVV9NQVJLLAorCUZTSUFDS19QVV9NQVJLLAorCUZTSUFJTFJfUFVfTUFSSywKKwlGU0lBSUJUX1BVX01BUkssCisJRlNJQUlTTERfUFVfTUFSSywKKworCVBJTk1VWF9NQVJLX0VORCwKK307CisKKyNkZWZpbmUgUE9SVF9EQVRBX0kobnIpCVwKKwlQSU5NVVhfREFUQShQT1JUIyNuciMjX0RBVEEsIFBPUlQjI25yIyNfRk4wLCBQT1JUIyNuciMjX0lOKQorCisjZGVmaW5lIFBPUlRfREFUQV9JX1BEKG5yKQlcCisJUElOTVVYX0RBVEEoUE9SVCMjbnIjI19EQVRBLCBQT1JUIyNuciMjX0ZOMCwJXAorCQkJCVBPUlQjI25yIyNfSU4sIFBPUlQjI25yIyNfSU5fUEQpCisKKyNkZWZpbmUgUE9SVF9EQVRBX0lfUFUobnIpCVwKKwlQSU5NVVhfREFUQShQT1JUIyNuciMjX0RBVEEsIFBPUlQjI25yIyNfRk4wLAlcCisJCQkJUE9SVCMjbnIjI19JTiwgUE9SVCMjbnIjI19JTl9QVSkKKworI2RlZmluZSBQT1JUX0RBVEFfSV9QVV9QRChucikJXAorCVBJTk1VWF9EQVRBKFBPUlQjI25yIyNfREFUQSwgUE9SVCMjbnIjI19GTjAsCVwKKwkJCQlQT1JUIyNuciMjX0lOLCBQT1JUIyNuciMjX0lOX1BELAlcCisJCQkJUE9SVCMjbnIjI19JTl9QVSkKKworI2RlZmluZSBQT1JUX0RBVEFfTyhucikJXAorCVBJTk1VWF9EQVRBKFBPUlQjI25yIyNfREFUQSwgUE9SVCMjbnIjI19GTjAsCVwKKwkJCQlQT1JUIyNuciMjX09VVCkKKworI2RlZmluZSBQT1JUX0RBVEFfSU8obnIpCVwKKwlQSU5NVVhfREFUQShQT1JUIyNuciMjX0RBVEEsIFBPUlQjI25yIyNfRk4wLAlcCisJCQkJUE9SVCMjbnIjI19PVVQsIFBPUlQjI25yIyNfSU4pCisKKyNkZWZpbmUgUE9SVF9EQVRBX0lPX1BEKG5yKQlcCisJUElOTVVYX0RBVEEoUE9SVCMjbnIjI19EQVRBLCBQT1JUIyNuciMjX0ZOMCwJXAorCQkJCVBPUlQjI25yIyNfT1VULCBQT1JUIyNuciMjX0lOLAkJXAorCQkJCVBPUlQjI25yIyNfSU5fUEQpCisKKyNkZWZpbmUgUE9SVF9EQVRBX0lPX1BVKG5yKQlcCisJUElOTVVYX0RBVEEoUE9SVCMjbnIjI19EQVRBLCBQT1JUIyNuciMjX0ZOMCwJXAorCQkJCVBPUlQjI25yIyNfT1VULCBQT1JUIyNuciMjX0lOLAkJXAorCQkJCVBPUlQjI25yIyNfSU5fUFUpCisKKyNkZWZpbmUgUE9SVF9EQVRBX0lPX1BVX1BEKG5yKQlcCisJUElOTVVYX0RBVEEoUE9SVCMjbnIjI19EQVRBLCBQT1JUIyNuciMjX0ZOMCwJXAorCQkJCVBPUlQjI25yIyNfT1VULCBQT1JUIyNuciMjX0lOLAkJXAorCQkJCVBPUlQjI25yIyNfSU5fUEQsIFBPUlQjI25yIyNfSU5fUFUpCisKK3N0YXRpYyBwaW5tdXhfZW51bV90IHBpbm11eF9kYXRhW10gPSB7CisJLyogc3BlY2lmeSB2YWxpZCBwaW4gc3RhdGVzIGZvciBlYWNoIHBpbiBpbiBHUElPIG1vZGUgKi8KKworCS8qIFRhYmxlIDI1LTEgKEkvTyBhbmQgUHVsbCBVL0QpICovCisJUE9SVF9EQVRBX0lfUEQoMCksCisJUE9SVF9EQVRBX0lfUFUoMSksCisJUE9SVF9EQVRBX0lfUFUoMiksCisJUE9SVF9EQVRBX0lfUFUoMyksCisJUE9SVF9EQVRBX0lfUFUoNCksCisJUE9SVF9EQVRBX0lfUFUoNSksCisJUE9SVF9EQVRBX0lfUFUoNiksCisJUE9SVF9EQVRBX0lfUFUoNyksCisJUE9SVF9EQVRBX0lfUFUoOCksCisJUE9SVF9EQVRBX0lfUEQoOSksCisJUE9SVF9EQVRBX0lfUEQoMTApLAorCVBPUlRfREFUQV9JX1BVX1BEKDExKSwKKwlQT1JUX0RBVEFfSU9fUFVfUEQoMTIpLAorCVBPUlRfREFUQV9JT19QVV9QRCgxMyksCisJUE9SVF9EQVRBX0lPX1BVX1BEKDE0KSwKKwlQT1JUX0RBVEFfSU9fUFVfUEQoMTUpLAorCVBPUlRfREFUQV9JT19QRCgxNiksCisJUE9SVF9EQVRBX0lPX1BEKDE3KSwKKwlQT1JUX0RBVEFfSU9fUFUoMTgpLAorCVBPUlRfREFUQV9JT19QVSgxOSksCisJUE9SVF9EQVRBX08oMjApLAorCVBPUlRfREFUQV9PKDIxKSwKKwlQT1JUX0RBVEFfTygyMiksCisJUE9SVF9EQVRBX08oMjMpLAorCVBPUlRfREFUQV9PKDI0KSwKKwlQT1JUX0RBVEFfSV9QRCgyNSksCisJUE9SVF9EQVRBX0lfUEQoMjYpLAorCVBPUlRfREFUQV9JT19QVSgyNyksCisJUE9SVF9EQVRBX0lPX1BVKDI4KSwKKwlQT1JUX0RBVEFfSU9fUEQoMjkpLAorCVBPUlRfREFUQV9JT19QRCgzMCksCisJUE9SVF9EQVRBX0lPX1BVKDMxKSwKKwlQT1JUX0RBVEFfSU9fUEQoMzIpLAorCVBPUlRfREFUQV9JX1BVX1BEKDMzKSwKKwlQT1JUX0RBVEFfSU9fUEQoMzQpLAorCVBPUlRfREFUQV9JX1BVX1BEKDM1KSwKKwlQT1JUX0RBVEFfSU9fUEQoMzYpLAorCVBPUlRfREFUQV9JTygzNyksCisJUE9SVF9EQVRBX08oMzgpLAorCVBPUlRfREFUQV9JX1BVKDM5KSwKKwlQT1JUX0RBVEFfSV9QVV9QRCg0MCksCisJUE9SVF9EQVRBX08oNDEpLAorCVBPUlRfREFUQV9JT19QRCg0MiksCisJUE9SVF9EQVRBX0lPX1BVX1BEKDQzKSwKKwlQT1JUX0RBVEFfSU9fUFVfUEQoNDQpLAorCVBPUlRfREFUQV9JT19QRCg0NSksCisJUE9SVF9EQVRBX0lPX1BEKDQ2KSwKKwlQT1JUX0RBVEFfSU9fUEQoNDcpLAorCVBPUlRfREFUQV9JX1BEKDQ4KSwKKwlQT1JUX0RBVEFfSU9fUFVfUEQoNDkpLAorCVBPUlRfREFUQV9JT19QRCg1MCksCisKKwlQT1JUX0RBVEFfSU9fUEQoNTEpLAorCVBPUlRfREFUQV9PKDUyKSwKKwlQT1JUX0RBVEFfSU9fUFVfUEQoNTMpLAorCVBPUlRfREFUQV9JT19QVV9QRCg1NCksCisJUE9SVF9EQVRBX0lPX1BEKDU1KSwKKwlQT1JUX0RBVEFfSV9QVV9QRCg1NiksCisJUE9SVF9EQVRBX0lPKDU3KSwKKwlQT1JUX0RBVEFfSU8oNTgpLAorCVBPUlRfREFUQV9JTyg1OSksCisJUE9SVF9EQVRBX0lPKDYwKSwKKwlQT1JUX0RBVEFfSU8oNjEpLAorCVBPUlRfREFUQV9JT19QRCg2MiksCisJUE9SVF9EQVRBX0lPX1BEKDYzKSwKKwlQT1JUX0RBVEFfSU9fUFVfUEQoNjQpLAorCVBPUlRfREFUQV9JT19QRCg2NSksCisJUE9SVF9EQVRBX0lPX1BVX1BEKDY2KSwKKwlQT1JUX0RBVEFfSU9fUFVfUEQoNjcpLAorCVBPUlRfREFUQV9JT19QVV9QRCg2OCksCisJUE9SVF9EQVRBX0lPX1BVX1BEKDY5KSwKKwlQT1JUX0RBVEFfSU9fUFVfUEQoNzApLAorCVBPUlRfREFUQV9JT19QVV9QRCg3MSksCisJUE9SVF9EQVRBX0lPX1BVX1BEKDcyKSwKKwlQT1JUX0RBVEFfSV9QVV9QRCg3MyksCisJUE9SVF9EQVRBX0lPX1BVKDc0KSwKKwlQT1JUX0RBVEFfSU9fUFUoNzUpLAorCVBPUlRfREFUQV9JT19QVSg3NiksCisJUE9SVF9EQVRBX0lPX1BVKDc3KSwKKwlQT1JUX0RBVEFfSU9fUFUoNzgpLAorCVBPUlRfREFUQV9JT19QVSg3OSksCisJUE9SVF9EQVRBX0lPX1BVKDgwKSwKKwlQT1JUX0RBVEFfSU9fUFUoODEpLAorCVBPUlRfREFUQV9JT19QVSg4MiksCisJUE9SVF9EQVRBX0lPX1BVKDgzKSwKKwlQT1JUX0RBVEFfSU9fUFUoODQpLAorCVBPUlRfREFUQV9JT19QVSg4NSksCisJUE9SVF9EQVRBX0lPX1BVKDg2KSwKKwlQT1JUX0RBVEFfSU9fUFUoODcpLAorCVBPUlRfREFUQV9JT19QVSg4OCksCisJUE9SVF9EQVRBX0lPX1BVKDg5KSwKKwlQT1JUX0RBVEFfTyg5MCksCisJUE9SVF9EQVRBX0lPX1BVKDkxKSwKKwlQT1JUX0RBVEFfTyg5MiksCisJUE9SVF9EQVRBX0lPX1BVKDkzKSwKKwlQT1JUX0RBVEFfTyg5NCksCisJUE9SVF9EQVRBX0lfUFVfUEQoOTUpLAorCVBPUlRfREFUQV9JTyg5NiksCisJUE9SVF9EQVRBX0lPKDk3KSwKKwlQT1JUX0RBVEFfSU8oOTgpLAorCVBPUlRfREFUQV9JX1BVKDk5KSwKKwlQT1JUX0RBVEFfTygxMDApLAorCVBPUlRfREFUQV9PKDEwMSksCisJUE9SVF9EQVRBX0lfUFUoMTAyKSwKKwlQT1JUX0RBVEFfSU9fUEQoMTAzKSwKKwlQT1JUX0RBVEFfSV9QVV9QRCgxMDQpLAorCVBPUlRfREFUQV9JX1BEKDEwNSksCisJUE9SVF9EQVRBX0lfUEQoMTA2KSwKKwlQT1JUX0RBVEFfSV9QVV9QRCgxMDcpLAorCVBPUlRfREFUQV9JX1BVX1BEKDEwOCksCisJUE9SVF9EQVRBX0lPX1BEKDEwOSksCisJUE9SVF9EQVRBX0lPX1BEKDExMCksCisJUE9SVF9EQVRBX0lPX1BVX1BEKDExMSksCisJUE9SVF9EQVRBX0lPX1BVX1BEKDExMiksCisJUE9SVF9EQVRBX0lPX1BVX1BEKDExMyksCisJUE9SVF9EQVRBX0lPX1BEKDExNCksCisJUE9SVF9EQVRBX0lPX1BVKDExNSksCisJUE9SVF9EQVRBX0lPX1BVKDExNiksCisJUE9SVF9EQVRBX0lPX1BVX1BEKDExNyksCisJUE9SVF9EQVRBX0lPX1BVX1BEKDExOCksCisJUE9SVF9EQVRBX0lPX1BEKDEyOCksCisKKwlQT1JUX0RBVEFfSU9fUEQoMTI5KSwKKwlQT1JUX0RBVEFfSU9fUFVfUEQoMTMwKSwKKwlQT1JUX0RBVEFfSU9fUEQoMTMxKSwKKwlQT1JUX0RBVEFfSU9fUEQoMTMyKSwKKwlQT1JUX0RBVEFfSU9fUEQoMTMzKSwKKwlQT1JUX0RBVEFfSU9fUFVfUEQoMTM0KSwKKwlQT1JUX0RBVEFfSU9fUFVfUEQoMTM1KSwKKwlQT1JUX0RBVEFfSU9fUFVfUEQoMTM2KSwKKwlQT1JUX0RBVEFfSU9fUFVfUEQoMTM3KSwKKwlQT1JUX0RBVEFfSU9fUEQoMTM4KSwKKwlQT1JUX0RBVEFfSU9fUEQoMTM5KSwKKwlQT1JUX0RBVEFfSU9fUEQoMTQwKSwKKwlQT1JUX0RBVEFfSU9fUEQoMTQxKSwKKwlQT1JUX0RBVEFfSU9fUEQoMTQyKSwKKwlQT1JUX0RBVEFfSU9fUEQoMTQzKSwKKwlQT1JUX0RBVEFfSU9fUFVfUEQoMTQ0KSwKKwlQT1JUX0RBVEFfSU9fUEQoMTQ1KSwKKwlQT1JUX0RBVEFfSU9fUFVfUEQoMTQ2KSwKKwlQT1JUX0RBVEFfSU9fUFVfUEQoMTQ3KSwKKwlQT1JUX0RBVEFfSU9fUFVfUEQoMTQ4KSwKKwlQT1JUX0RBVEFfSU9fUFVfUEQoMTQ5KSwKKwlQT1JUX0RBVEFfSV9QVV9QRCgxNTApLAorCVBPUlRfREFUQV9JT19QVV9QRCgxNTEpLAorCVBPUlRfREFUQV9JT19QVV9QRCgxNTIpLAorCVBPUlRfREFUQV9JT19QRCgxNTMpLAorCVBPUlRfREFUQV9JT19QRCgxNTQpLAorCVBPUlRfREFUQV9JX1BVX1BEKDE1NSksCisJUE9SVF9EQVRBX0lPX1BVX1BEKDE1NiksCisJUE9SVF9EQVRBX0lfUEQoMTU3KSwKKwlQT1JUX0RBVEFfSU9fUEQoMTU4KSwKKwlQT1JUX0RBVEFfSU9fUFVfUEQoMTU5KSwKKwlQT1JUX0RBVEFfSU9fUFVfUEQoMTYwKSwKKwlQT1JUX0RBVEFfSV9QVV9QRCgxNjEpLAorCVBPUlRfREFUQV9JX1BVX1BEKDE2MiksCisJUE9SVF9EQVRBX0lPX1BVX1BEKDE2MyksCisJUE9SVF9EQVRBX0lfUFVfUEQoMTY0KSwKKwlQT1JUX0RBVEFfSU9fUEQoMTkyKSwKKwlQT1JUX0RBVEFfSU9fUFVfUEQoMTkzKSwKKwlQT1JUX0RBVEFfSU9fUEQoMTk0KSwKKwlQT1JUX0RBVEFfSU9fUFVfUEQoMTk1KSwKKwlQT1JUX0RBVEFfSU9fUEQoMTk2KSwKKwlQT1JUX0RBVEFfSU9fUEQoMTk3KSwKKwlQT1JUX0RBVEFfSU9fUEQoMTk4KSwKKwlQT1JUX0RBVEFfSU9fUEQoMTk5KSwKKwlQT1JUX0RBVEFfSU9fUFVfUEQoMjAwKSwKKwlQT1JUX0RBVEFfSU9fUFVfUEQoMjAxKSwKKwlQT1JUX0RBVEFfSU9fUFVfUEQoMjAyKSwKKwlQT1JUX0RBVEFfSU9fUFVfUEQoMjAzKSwKKwlQT1JUX0RBVEFfSU9fUFVfUEQoMjA0KSwKKwlQT1JUX0RBVEFfSU9fUFVfUEQoMjA1KSwKKwlQT1JUX0RBVEFfSU9fUFVfUEQoMjA2KSwKKwlQT1JUX0RBVEFfSU9fUEQoMjA3KSwKKwlQT1JUX0RBVEFfSU9fUEQoMjA4KSwKKwlQT1JUX0RBVEFfSU9fUEQoMjA5KSwKKwlQT1JUX0RBVEFfSU9fUEQoMjEwKSwKKwlQT1JUX0RBVEFfSU9fUEQoMjExKSwKKwlQT1JUX0RBVEFfSU9fUEQoMjEyKSwKKwlQT1JUX0RBVEFfSU9fUEQoMjEzKSwKKwlQT1JUX0RBVEFfSU9fUFVfUEQoMjE0KSwKKwlQT1JUX0RBVEFfSU9fUFVfUEQoMjE1KSwKKwlQT1JUX0RBVEFfSU9fUEQoMjE2KSwKKwlQT1JUX0RBVEFfSU9fUEQoMjE3KSwKKwlQT1JUX0RBVEFfTygyMTgpLAorCVBPUlRfREFUQV9JT19QRCgyMTkpLAorCVBPUlRfREFUQV9JT19QRCgyMjApLAorCVBPUlRfREFUQV9JT19QVV9QRCgyMjEpLAorCVBPUlRfREFUQV9JT19QVV9QRCgyMjIpLAorCVBPUlRfREFUQV9JX1BVX1BEKDIyMyksCisJUE9SVF9EQVRBX0lfUFVfUEQoMjI0KSwKKworCVBPUlRfREFUQV9JT19QVV9QRCgyMjUpLAorCVBPUlRfREFUQV9PKDIyNiksCisJUE9SVF9EQVRBX0lPX1BVX1BEKDIyNyksCisJUE9SVF9EQVRBX0lfUFVfUEQoMjI4KSwKKwlQT1JUX0RBVEFfSV9QRCgyMjkpLAorCVBPUlRfREFUQV9JTygyMzApLAorCVBPUlRfREFUQV9JT19QVV9QRCgyMzEpLAorCVBPUlRfREFUQV9JT19QVV9QRCgyMzIpLAorCVBPUlRfREFUQV9JX1BVX1BEKDIzMyksCisJUE9SVF9EQVRBX0lPX1BVX1BEKDIzNCksCisJUE9SVF9EQVRBX0lPX1BVX1BEKDIzNSksCisJUE9SVF9EQVRBX0lPX1BVX1BEKDIzNiksCisJUE9SVF9EQVRBX0lPX1BEKDIzNyksCisJUE9SVF9EQVRBX0lPX1BVX1BEKDIzOCksCisJUE9SVF9EQVRBX0lPX1BVX1BEKDIzOSksCisJUE9SVF9EQVRBX0lPX1BVX1BEKDI0MCksCisJUE9SVF9EQVRBX08oMjQxKSwKKwlQT1JUX0RBVEFfSV9QRCgyNDIpLAorCVBPUlRfREFUQV9JT19QVV9QRCgyNDMpLAorCVBPUlRfREFUQV9JT19QVV9QRCgyNDQpLAorCVBPUlRfREFUQV9JT19QVV9QRCgyNDUpLAorCVBPUlRfREFUQV9JT19QVV9QRCgyNDYpLAorCVBPUlRfREFUQV9JT19QVV9QRCgyNDcpLAorCVBPUlRfREFUQV9JT19QVV9QRCgyNDgpLAorCVBPUlRfREFUQV9JT19QVV9QRCgyNDkpLAorCVBPUlRfREFUQV9JT19QVV9QRCgyNTApLAorCVBPUlRfREFUQV9JT19QVV9QRCgyNTEpLAorCVBPUlRfREFUQV9JT19QVV9QRCgyNTIpLAorCVBPUlRfREFUQV9JT19QVV9QRCgyNTMpLAorCVBPUlRfREFUQV9JT19QVV9QRCgyNTQpLAorCVBPUlRfREFUQV9JT19QVV9QRCgyNTUpLAorCVBPUlRfREFUQV9JT19QVV9QRCgyNTYpLAorCVBPUlRfREFUQV9JT19QVV9QRCgyNTcpLAorCVBPUlRfREFUQV9JT19QVV9QRCgyNTgpLAorCVBPUlRfREFUQV9JT19QVV9QRCgyNTkpLAorCVBPUlRfREFUQV9JT19QVV9QRCgyNjApLAorCVBPUlRfREFUQV9JT19QVV9QRCgyNjEpLAorCVBPUlRfREFUQV9JT19QVV9QRCgyNjIpLAorCVBPUlRfREFUQV9JT19QVV9QRCgyNjMpLAorCVBPUlRfREFUQV9JT19QVV9QRCgyNjQpLAorCVBPUlRfREFUQV9JT19QVV9QRCgyNjUpLAorCVBPUlRfREFUQV9JT19QVV9QRCgyNjYpLAorCVBPUlRfREFUQV9JT19QVV9QRCgyNjcpLAorCVBPUlRfREFUQV9JT19QVV9QRCgyNjgpLAorCVBPUlRfREFUQV9JT19QVV9QRCgyNjkpLAorCVBPUlRfREFUQV9JT19QVV9QRCgyNzApLAorCVBPUlRfREFUQV9JT19QVV9QRCgyNzEpLAorCVBPUlRfREFUQV9JT19QVV9QRCgyNzIpLAorCVBPUlRfREFUQV9JT19QVV9QRCgyNzMpLAorCVBPUlRfREFUQV9JT19QVV9QRCgyNzQpLAorCVBPUlRfREFUQV9JT19QVV9QRCgyNzUpLAorCVBPUlRfREFUQV9JT19QVV9QRCgyNzYpLAorCVBPUlRfREFUQV9JT19QVV9QRCgyNzcpLAorCVBPUlRfREFUQV9JT19QVV9QRCgyNzgpLAorCVBPUlRfREFUQV9JT19QVV9QRCgyNzkpLAorCVBPUlRfREFUQV9JT19QVV9QRCgyODApLAorCVBPUlRfREFUQV9PKDI4MSksCisJUE9SVF9EQVRBX08oMjgyKSwKKwlQT1JUX0RBVEFfSV9QVSgyODgpLAorCVBPUlRfREFUQV9JT19QVV9QRCgyODkpLAorCVBPUlRfREFUQV9JT19QVV9QRCgyOTApLAorCVBPUlRfREFUQV9JT19QVV9QRCgyOTEpLAorCVBPUlRfREFUQV9JT19QVV9QRCgyOTIpLAorCVBPUlRfREFUQV9JT19QVV9QRCgyOTMpLAorCVBPUlRfREFUQV9JT19QVV9QRCgyOTQpLAorCVBPUlRfREFUQV9JT19QVV9QRCgyOTUpLAorCVBPUlRfREFUQV9JT19QVV9QRCgyOTYpLAorCVBPUlRfREFUQV9JT19QVV9QRCgyOTcpLAorCVBPUlRfREFUQV9JT19QVV9QRCgyOTgpLAorCisJUE9SVF9EQVRBX0lPX1BVX1BEKDI5OSksCisJUE9SVF9EQVRBX0lPX1BVX1BEKDMwMCksCisJUE9SVF9EQVRBX0lPX1BVX1BEKDMwMSksCisJUE9SVF9EQVRBX0lPX1BVX1BEKDMwMiksCisJUE9SVF9EQVRBX0lPX1BVX1BEKDMwMyksCisJUE9SVF9EQVRBX0lPX1BVX1BEKDMwNCksCisJUE9SVF9EQVRBX0lPX1BVX1BEKDMwNSksCisJUE9SVF9EQVRBX08oMzA2KSwKKwlQT1JUX0RBVEFfTygzMDcpLAorCVBPUlRfREFUQV9JX1BVKDMwOCksCisJUE9SVF9EQVRBX08oMzA5KSwKKworCS8qIFRhYmxlIDI1LTEgKEZ1bmN0aW9uIDAtNykgKi8KKwlQSU5NVVhfREFUQShWQlVTXzBfTUFSSywgUE9SVDBfRk4xKSwKKwlQSU5NVVhfREFUQShHUEkwX01BUkssIFBPUlQxX0ZOMSksCisJUElOTVVYX0RBVEEoR1BJMV9NQVJLLCBQT1JUMl9GTjEpLAorCVBJTk1VWF9EQVRBKEdQSTJfTUFSSywgUE9SVDNfRk4xKSwKKwlQSU5NVVhfREFUQShHUEkzX01BUkssIFBPUlQ0X0ZOMSksCisJUElOTVVYX0RBVEEoR1BJNF9NQVJLLCBQT1JUNV9GTjEpLAorCVBJTk1VWF9EQVRBKEdQSTVfTUFSSywgUE9SVDZfRk4xKSwKKwlQSU5NVVhfREFUQShHUEk2X01BUkssIFBPUlQ3X0ZOMSksCisJUElOTVVYX0RBVEEoR1BJN19NQVJLLCBQT1JUOF9GTjEpLAorCVBJTk1VWF9EQVRBKFNDSUZBN19SWERfTUFSSywgUE9SVDEyX0ZOMiksCisJUElOTVVYX0RBVEEoU0NJRkE3X0NUU19fTUFSSywgUE9SVDEzX0ZOMiksCisJUElOTVVYX0RBVEEoR1BPN19NQVJLLCBQT1JUMTRfRk4xKSwgXAorCVBJTk1VWF9EQVRBKE1GRzBfT1VUMl9NQVJLLCBQT1JUMTRfRk40KSwKKwlQSU5NVVhfREFUQShHUE82X01BUkssIFBPUlQxNV9GTjEpLCBcCisJUElOTVVYX0RBVEEoTUZHMV9PVVQyX01BUkssIFBPUlQxNV9GTjQpLAorCVBJTk1VWF9EQVRBKEdQTzVfTUFSSywgUE9SVDE2X0ZOMSksIFwKKwlQSU5NVVhfREFUQShTQ0lGQTBfU0NLX01BUkssIFBPUlQxNl9GTjIpLCBcCisJUElOTVVYX0RBVEEoRlNJQ09TTERUM19NQVJLLCBQT1JUMTZfRk4zKSwgXAorCVBJTk1VWF9EQVRBKFBPUlQxNl9WSU9fQ0tPUl9NQVJLLCBQT1JUMTZfRk40KSwKKwlQSU5NVVhfREFUQShTQ0lGQTBfVFhEX01BUkssIFBPUlQxN19GTjIpLAorCVBJTk1VWF9EQVRBKFNDSUZBN19UWERfTUFSSywgUE9SVDE4X0ZOMiksCisJUElOTVVYX0RBVEEoU0NJRkE3X1JUU19fTUFSSywgUE9SVDE5X0ZOMiksIFwKKwlQSU5NVVhfREFUQShQT1JUMTlfVklPX0NLTzJfTUFSSywgUE9SVDE5X0ZOMyksCisJUElOTVVYX0RBVEEoR1BPMF9NQVJLLCBQT1JUMjBfRk4xKSwKKwlQSU5NVVhfREFUQShHUE8xX01BUkssIFBPUlQyMV9GTjEpLAorCVBJTk1VWF9EQVRBKEdQTzJfTUFSSywgUE9SVDIyX0ZOMSksIFwKKwlQSU5NVVhfREFUQShTVEFUVVMwX01BUkssIFBPUlQyMl9GTjIpLAorCVBJTk1VWF9EQVRBKEdQTzNfTUFSSywgUE9SVDIzX0ZOMSksIFwKKwlQSU5NVVhfREFUQShTVEFUVVMxX01BUkssIFBPUlQyM19GTjIpLAorCVBJTk1VWF9EQVRBKEdQTzRfTUFSSywgUE9SVDI0X0ZOMSksIFwKKwlQSU5NVVhfREFUQShTVEFUVVMyX01BUkssIFBPUlQyNF9GTjIpLAorCVBJTk1VWF9EQVRBKFZJTlRfTUFSSywgUE9SVDI1X0ZOMSksCisJUElOTVVYX0RBVEEoVENLT05fTUFSSywgUE9SVDI2X0ZOMSksCisJUElOTVVYX0RBVEEoWERWRlMxX01BUkssIFBPUlQyN19GTjEpLCBcCisJUElOTVVYX0RBVEEoUE9SVDI3X0kyQ19TQ0wyX01BUkssIFBPUlQyN19GTjIsIE1TRUwyQ1JfTVNFTDE3XzAsCisJCU1TRUwyQ1JfTVNFTDE2XzEpLCBcCisJUElOTVVYX0RBVEEoUE9SVDI3X0kyQ19TQ0wzX01BUkssIFBPUlQyN19GTjMsIE1TRUwyQ1JfTVNFTDE5XzAsCisJCU1TRUwyQ1JfTVNFTDE4XzApLCBcCisJUElOTVVYX0RBVEEoTUZHMF9PVVQxX01BUkssIFBPUlQyN19GTjQpLCBcCisJUElOTVVYX0RBVEEoUE9SVDI3X0lST1VUX01BUkssIFBPUlQyN19GTjcpLAorCVBJTk1VWF9EQVRBKFhEVkZTMl9NQVJLLCBQT1JUMjhfRk4xKSwgXAorCVBJTk1VWF9EQVRBKFBPUlQyOF9JMkNfU0RBMl9NQVJLLCBQT1JUMjhfRk4yLCBNU0VMMkNSX01TRUwxN18wLAorCQlNU0VMMkNSX01TRUwxNl8xKSwgXAorCVBJTk1VWF9EQVRBKFBPUlQyOF9JMkNfU0RBM19NQVJLLCBQT1JUMjhfRk4zLCBNU0VMMkNSX01TRUwxOV8wLAorCQlNU0VMMkNSX01TRUwxOF8wKSwgXAorCVBJTk1VWF9EQVRBKFBPUlQyOF9UUFUxVE8xX01BUkssIFBPUlQyOF9GTjcpLAorCVBJTk1VWF9EQVRBKFNJTV9SU1RfTUFSSywgUE9SVDI5X0ZOMSksIFwKKwlQSU5NVVhfREFUQShQT1JUMjlfVFBVMVRPMV9NQVJLLCBQT1JUMjlfRk40KSwKKwlQSU5NVVhfREFUQShTSU1fQ0xLX01BUkssIFBPUlQzMF9GTjEpLCBcCisJUElOTVVYX0RBVEEoUE9SVDMwX1ZJT19DS09SX01BUkssIFBPUlQzMF9GTjQpLAorCVBJTk1VWF9EQVRBKFNJTV9EX01BUkssIFBPUlQzMV9GTjEpLCBcCisJUElOTVVYX0RBVEEoUE9SVDMxX0lST1VUX01BUkssIFBPUlQzMV9GTjQpLAorCVBJTk1VWF9EQVRBKFNDSUZBNF9UWERfTUFSSywgUE9SVDMyX0ZOMiksCisJUElOTVVYX0RBVEEoU0NJRkE0X1JYRF9NQVJLLCBQT1JUMzNfRk4yKSwgXAorCVBJTk1VWF9EQVRBKFhXVVBfTUFSSywgUE9SVDMzX0ZOMyksCisJUElOTVVYX0RBVEEoU0NJRkE0X1JUU19fTUFSSywgUE9SVDM0X0ZOMiksCisJUElOTVVYX0RBVEEoU0NJRkE0X0NUU19fTUFSSywgUE9SVDM1X0ZOMiksCisJUElOTVVYX0RBVEEoRlNJQk9CVF9NQVJLLCBQT1JUMzZfRk4xKSwgXAorCVBJTk1VWF9EQVRBKEZTSUJJQlRfTUFSSywgUE9SVDM2X0ZOMiksCisJUElOTVVYX0RBVEEoRlNJQk9MUl9NQVJLLCBQT1JUMzdfRk4xKSwgXAorCVBJTk1VWF9EQVRBKEZTSUJJTFJfTUFSSywgUE9SVDM3X0ZOMiksCisJUElOTVVYX0RBVEEoRlNJQk9TTERfTUFSSywgUE9SVDM4X0ZOMSksCisJUElOTVVYX0RBVEEoRlNJQklTTERfTUFSSywgUE9SVDM5X0ZOMSksCisJUElOTVVYX0RBVEEoVkFDS19NQVJLLCBQT1JUNDBfRk4xKSwKKwlQSU5NVVhfREFUQShYVEFMMUxfTUFSSywgUE9SVDQxX0ZOMSksCisJUElOTVVYX0RBVEEoU0NJRkEwX1JUU19fTUFSSywgUE9SVDQyX0ZOMiksIFwKKwlQSU5NVVhfREFUQShGU0lDT1NMRFQyX01BUkssIFBPUlQ0Ml9GTjMpLAorCVBJTk1VWF9EQVRBKFNDSUZBMF9SWERfTUFSSywgUE9SVDQzX0ZOMiksCisJUElOTVVYX0RBVEEoU0NJRkEwX0NUU19fTUFSSywgUE9SVDQ0X0ZOMiksIFwKKwlQSU5NVVhfREFUQShGU0lDT1NMRFQxX01BUkssIFBPUlQ0NF9GTjMpLAorCVBJTk1VWF9EQVRBKEZTSUNPQlRfTUFSSywgUE9SVDQ1X0ZOMSksIFwKKwlQSU5NVVhfREFUQShGU0lDSUJUX01BUkssIFBPUlQ0NV9GTjIpLCBcCisJUElOTVVYX0RBVEEoRlNJRE9CVF9NQVJLLCBQT1JUNDVfRk4zKSwgXAorCVBJTk1VWF9EQVRBKEZTSURJQlRfTUFSSywgUE9SVDQ1X0ZONCksCisJUElOTVVYX0RBVEEoRlNJQ09MUl9NQVJLLCBQT1JUNDZfRk4xKSwgXAorCVBJTk1VWF9EQVRBKEZTSUNJTFJfTUFSSywgUE9SVDQ2X0ZOMiksIFwKKwlQSU5NVVhfREFUQShGU0lET0xSX01BUkssIFBPUlQ0Nl9GTjMpLCBcCisJUElOTVVYX0RBVEEoRlNJRElMUl9NQVJLLCBQT1JUNDZfRk40KSwKKwlQSU5NVVhfREFUQShGU0lDT1NMRF9NQVJLLCBQT1JUNDdfRk4xKSwgXAorCVBJTk1VWF9EQVRBKFBPUlQ0N19GU0lDU1BESUZfTUFSSywgUE9SVDQ3X0ZOMiksCisJUElOTVVYX0RBVEEoRlNJQ0lTTERfTUFSSywgUE9SVDQ4X0ZOMSksIFwKKwlQSU5NVVhfREFUQShGU0lESVNMRF9NQVJLLCBQT1JUNDhfRk4zKSwKKwlQSU5NVVhfREFUQShGU0lBQ0tfTUFSSywgUE9SVDQ5X0ZOMSksIFwKKwlQSU5NVVhfREFUQShQT1JUNDlfSVJEQV9PVVRfTUFSSywgUE9SVDQ5X0ZOMiwgTVNFTDRDUl9NU0VMMTlfMSksIFwKKwlQSU5NVVhfREFUQShQT1JUNDlfSVJPVVRfTUFSSywgUE9SVDQ5X0ZONCksIFwKKwlQSU5NVVhfREFUQShGU0lBT01DX01BUkssIFBPUlQ0OV9GTjUpLAorCVBJTk1VWF9EQVRBKEZTSUFPTFJfTUFSSywgUE9SVDUwX0ZOMSksIFwKKwlQSU5NVVhfREFUQShCQklGMl9UU1lOQzJfTUFSSywgUE9SVDUwX0ZOMiksIFwKKwlQSU5NVVhfREFUQShUUFUyVE8yX01BUkssIFBPUlQ1MF9GTjMpLCBcCisJUElOTVVYX0RBVEEoRlNJQUlMUl9NQVJLLCBQT1JUNTBfRk41KSwKKworCVBJTk1VWF9EQVRBKEZTSUFPQlRfTUFSSywgUE9SVDUxX0ZOMSksIFwKKwlQSU5NVVhfREFUQShCQklGMl9UU0NLMl9NQVJLLCBQT1JUNTFfRk4yKSwgXAorCVBJTk1VWF9EQVRBKFRQVTJUTzNfTUFSSywgUE9SVDUxX0ZOMyksIFwKKwlQSU5NVVhfREFUQShGU0lBSUJUX01BUkssIFBPUlQ1MV9GTjUpLAorCVBJTk1VWF9EQVRBKEZTSUFPU0xEX01BUkssIFBPUlQ1Ml9GTjEpLCBcCisJUElOTVVYX0RBVEEoQkJJRjJfVFhEMl9NQVJLLCBQT1JUNTJfRk4yKSwKKwlQSU5NVVhfREFUQShGU0lBU1BESUZfTUFSSywgUE9SVDUzX0ZOMSksIFwKKwlQSU5NVVhfREFUQShQT1JUNTNfSVJEQV9JTl9NQVJLLCBQT1JUNTNfRk4yLCBNU0VMNENSX01TRUwxOV8xKSwgXAorCVBJTk1VWF9EQVRBKFRQVTNUTzNfTUFSSywgUE9SVDUzX0ZOMyksIFwKKwlQSU5NVVhfREFUQShGU0lCU1BESUZfTUFSSywgUE9SVDUzX0ZONSksIFwKKwlQSU5NVVhfREFUQShQT1JUNTNfRlNJQ1NQRElGX01BUkssIFBPUlQ1M19GTjYpLAorCVBJTk1VWF9EQVRBKEZTSUJDS19NQVJLLCBQT1JUNTRfRk4xKSwgXAorCVBJTk1VWF9EQVRBKFBPUlQ1NF9JUkRBX0ZJUlNFTF9NQVJLLCBQT1JUNTRfRk4yLCBNU0VMNENSX01TRUwxOV8xKSwgXAorCVBJTk1VWF9EQVRBKFRQVTNUTzJfTUFSSywgUE9SVDU0X0ZOMyksIFwKKwlQSU5NVVhfREFUQShGU0lCT01DX01BUkssIFBPUlQ1NF9GTjUpLCBcCisJUElOTVVYX0RBVEEoRlNJQ0NLX01BUkssIFBPUlQ1NF9GTjYpLCBcCisJUElOTVVYX0RBVEEoRlNJQ09NQ19NQVJLLCBQT1JUNTRfRk43KSwKKwlQSU5NVVhfREFUQShGU0lBSVNMRF9NQVJLLCBQT1JUNTVfRk4xKSwgXAorCVBJTk1VWF9EQVRBKFRQVTBUTzBfTUFSSywgUE9SVDU1X0ZOMyksCisJUElOTVVYX0RBVEEoQTBfTUFSSywgUE9SVDU3X0ZOMSksIFwKKwlQSU5NVVhfREFUQShCU19fTUFSSywgUE9SVDU3X0ZOMiksCisJUElOTVVYX0RBVEEoQTEyX01BUkssIFBPUlQ1OF9GTjEpLCBcCisJUElOTVVYX0RBVEEoUE9SVDU4X0tFWU9VVDdfTUFSSywgUE9SVDU4X0ZOMiksIFwKKwlQSU5NVVhfREFUQShUUFU0VE8yX01BUkssIFBPUlQ1OF9GTjQpLAorCVBJTk1VWF9EQVRBKEExM19NQVJLLCBQT1JUNTlfRk4xKSwgXAorCVBJTk1VWF9EQVRBKFBPUlQ1OV9LRVlPVVQ2X01BUkssIFBPUlQ1OV9GTjIpLCBcCisJUElOTVVYX0RBVEEoVFBVMFRPMV9NQVJLLCBQT1JUNTlfRk40KSwKKwlQSU5NVVhfREFUQShBMTRfTUFSSywgUE9SVDYwX0ZOMSksIFwKKwlQSU5NVVhfREFUQShLRVlPVVQ1X01BUkssIFBPUlQ2MF9GTjIpLAorCVBJTk1VWF9EQVRBKEExNV9NQVJLLCBQT1JUNjFfRk4xKSwgXAorCVBJTk1VWF9EQVRBKEtFWU9VVDRfTUFSSywgUE9SVDYxX0ZOMiksCisJUElOTVVYX0RBVEEoQTE2X01BUkssIFBPUlQ2Ml9GTjEpLCBcCisJUElOTVVYX0RBVEEoS0VZT1VUM19NQVJLLCBQT1JUNjJfRk4yKSwgXAorCVBJTk1VWF9EQVRBKE1TSU9GMF9TUzFfTUFSSywgUE9SVDYyX0ZONCwgTVNFTDNDUl9NU0VMMTFfMCksCisJUElOTVVYX0RBVEEoQTE3X01BUkssIFBPUlQ2M19GTjEpLCBcCisJUElOTVVYX0RBVEEoS0VZT1VUMl9NQVJLLCBQT1JUNjNfRk4yKSwgXAorCVBJTk1VWF9EQVRBKE1TSU9GMF9UU1lOQ19NQVJLLCBQT1JUNjNfRk40LCBNU0VMM0NSX01TRUwxMV8wKSwKKwlQSU5NVVhfREFUQShBMThfTUFSSywgUE9SVDY0X0ZOMSksIFwKKwlQSU5NVVhfREFUQShLRVlPVVQxX01BUkssIFBPUlQ2NF9GTjIpLCBcCisJUElOTVVYX0RBVEEoTVNJT0YwX1RTQ0tfTUFSSywgUE9SVDY0X0ZONCwgTVNFTDNDUl9NU0VMMTFfMCksCisJUElOTVVYX0RBVEEoQTE5X01BUkssIFBPUlQ2NV9GTjEpLCBcCisJUElOTVVYX0RBVEEoS0VZT1VUMF9NQVJLLCBQT1JUNjVfRk4yKSwgXAorCVBJTk1VWF9EQVRBKE1TSU9GMF9UWERfTUFSSywgUE9SVDY1X0ZONCwgTVNFTDNDUl9NU0VMMTFfMCksCisJUElOTVVYX0RBVEEoQTIwX01BUkssIFBPUlQ2Nl9GTjEpLCBcCisJUElOTVVYX0RBVEEoS0VZSU4wX01BUkssIFBPUlQ2Nl9GTjIpLCBcCisJUElOTVVYX0RBVEEoTVNJT0YwX1JTQ0tfTUFSSywgUE9SVDY2X0ZONCwgTVNFTDNDUl9NU0VMMTFfMCksCisJUElOTVVYX0RBVEEoQTIxX01BUkssIFBPUlQ2N19GTjEpLCBcCisJUElOTVVYX0RBVEEoS0VZSU4xX01BUkssIFBPUlQ2N19GTjIpLCBcCisJUElOTVVYX0RBVEEoTVNJT0YwX1JTWU5DX01BUkssIFBPUlQ2N19GTjQsIE1TRUwzQ1JfTVNFTDExXzApLAorCVBJTk1VWF9EQVRBKEEyMl9NQVJLLCBQT1JUNjhfRk4xKSwgXAorCVBJTk1VWF9EQVRBKEtFWUlOMl9NQVJLLCBQT1JUNjhfRk4yKSwgXAorCVBJTk1VWF9EQVRBKE1TSU9GMF9NQ0swX01BUkssIFBPUlQ2OF9GTjQsIE1TRUwzQ1JfTVNFTDExXzApLAorCVBJTk1VWF9EQVRBKEEyM19NQVJLLCBQT1JUNjlfRk4xKSwgXAorCVBJTk1VWF9EQVRBKEtFWUlOM19NQVJLLCBQT1JUNjlfRk4yKSwgXAorCVBJTk1VWF9EQVRBKE1TSU9GMF9NQ0sxX01BUkssIFBPUlQ2OV9GTjQsIE1TRUwzQ1JfTVNFTDExXzApLAorCVBJTk1VWF9EQVRBKEEyNF9NQVJLLCBQT1JUNzBfRk4xKSwgXAorCVBJTk1VWF9EQVRBKEtFWUlONF9NQVJLLCBQT1JUNzBfRk4yKSwgXAorCVBJTk1VWF9EQVRBKE1TSU9GMF9SWERfTUFSSywgUE9SVDcwX0ZONCwgTVNFTDNDUl9NU0VMMTFfMCksCisJUElOTVVYX0RBVEEoQTI1X01BUkssIFBPUlQ3MV9GTjEpLCBcCisJUElOTVVYX0RBVEEoS0VZSU41X01BUkssIFBPUlQ3MV9GTjIpLCBcCisJUElOTVVYX0RBVEEoTVNJT0YwX1NTMl9NQVJLLCBQT1JUNzFfRk40LCBNU0VMM0NSX01TRUwxMV8wKSwKKwlQSU5NVVhfREFUQShBMjZfTUFSSywgUE9SVDcyX0ZOMSksIFwKKwlQSU5NVVhfREFUQShLRVlJTjZfTUFSSywgUE9SVDcyX0ZOMiksCisJUElOTVVYX0RBVEEoS0VZSU43X01BUkssIFBPUlQ3M19GTjIpLAorCVBJTk1VWF9EQVRBKEQwX05BRjBfTUFSSywgUE9SVDc0X0ZOMSksCisJUElOTVVYX0RBVEEoRDFfTkFGMV9NQVJLLCBQT1JUNzVfRk4xKSwKKwlQSU5NVVhfREFUQShEMl9OQUYyX01BUkssIFBPUlQ3Nl9GTjEpLAorCVBJTk1VWF9EQVRBKEQzX05BRjNfTUFSSywgUE9SVDc3X0ZOMSksCisJUElOTVVYX0RBVEEoRDRfTkFGNF9NQVJLLCBQT1JUNzhfRk4xKSwKKwlQSU5NVVhfREFUQShENV9OQUY1X01BUkssIFBPUlQ3OV9GTjEpLAorCVBJTk1VWF9EQVRBKEQ2X05BRjZfTUFSSywgUE9SVDgwX0ZOMSksCisJUElOTVVYX0RBVEEoRDdfTkFGN19NQVJLLCBQT1JUODFfRk4xKSwKKwlQSU5NVVhfREFUQShEOF9OQUY4X01BUkssIFBPUlQ4Ml9GTjEpLAorCVBJTk1VWF9EQVRBKEQ5X05BRjlfTUFSSywgUE9SVDgzX0ZOMSksCisJUElOTVVYX0RBVEEoRDEwX05BRjEwX01BUkssIFBPUlQ4NF9GTjEpLAorCVBJTk1VWF9EQVRBKEQxMV9OQUYxMV9NQVJLLCBQT1JUODVfRk4xKSwKKwlQSU5NVVhfREFUQShEMTJfTkFGMTJfTUFSSywgUE9SVDg2X0ZOMSksCisJUElOTVVYX0RBVEEoRDEzX05BRjEzX01BUkssIFBPUlQ4N19GTjEpLAorCVBJTk1VWF9EQVRBKEQxNF9OQUYxNF9NQVJLLCBQT1JUODhfRk4xKSwKKwlQSU5NVVhfREFUQShEMTVfTkFGMTVfTUFSSywgUE9SVDg5X0ZOMSksCisJUElOTVVYX0RBVEEoQ1M0X19NQVJLLCBQT1JUOTBfRk4xKSwKKwlQSU5NVVhfREFUQShDUzVBX19NQVJLLCBQT1JUOTFfRk4xKSwgXAorCVBJTk1VWF9EQVRBKFBPUlQ5MV9SRFdSX01BUkssIFBPUlQ5MV9GTjIpLAorCVBJTk1VWF9EQVRBKENTNUJfX01BUkssIFBPUlQ5Ml9GTjEpLCBcCisJUElOTVVYX0RBVEEoRkNFMV9fTUFSSywgUE9SVDkyX0ZOMiksCisJUElOTVVYX0RBVEEoQ1M2Ql9fTUFSSywgUE9SVDkzX0ZOMSksIFwKKwlQSU5NVVhfREFUQShEQUNLMF9NQVJLLCBQT1JUOTNfRk40KSwKKwlQSU5NVVhfREFUQShGQ0UwX19NQVJLLCBQT1JUOTRfRk4xKSwgXAorCVBJTk1VWF9EQVRBKENTNkFfX01BUkssIFBPUlQ5NF9GTjIpLAorCVBJTk1VWF9EQVRBKFdBSVRfX01BUkssIFBPUlQ5NV9GTjEpLCBcCisJUElOTVVYX0RBVEEoRFJFUTBfTUFSSywgUE9SVDk1X0ZOMiksCisJUElOTVVYX0RBVEEoUkRfX0ZTQ19NQVJLLCBQT1JUOTZfRk4xKSwKKwlQSU5NVVhfREFUQShXRTBfX0ZXRV9NQVJLLCBQT1JUOTdfRk4xKSwgXAorCVBJTk1VWF9EQVRBKFJEV1JfRldFX01BUkssIFBPUlQ5N19GTjIpLAorCVBJTk1VWF9EQVRBKFdFMV9fTUFSSywgUE9SVDk4X0ZOMSksCisJUElOTVVYX0RBVEEoRlJCX01BUkssIFBPUlQ5OV9GTjEpLAorCVBJTk1VWF9EQVRBKENLT19NQVJLLCBQT1JUMTAwX0ZOMSksCisJUElOTVVYX0RBVEEoTkJSU1RPVVRfX01BUkssIFBPUlQxMDFfRk4xKSwKKwlQSU5NVVhfREFUQShOQlJTVF9fTUFSSywgUE9SVDEwMl9GTjEpLAorCVBJTk1VWF9EQVRBKEJCSUYyX1RYRF9NQVJLLCBQT1JUMTAzX0ZOMyksCisJUElOTVVYX0RBVEEoQkJJRjJfUlhEX01BUkssIFBPUlQxMDRfRk4zKSwKKwlQSU5NVVhfREFUQShCQklGMl9TWU5DX01BUkssIFBPUlQxMDVfRk4zKSwKKwlQSU5NVVhfREFUQShCQklGMl9TQ0tfTUFSSywgUE9SVDEwNl9GTjMpLAorCVBJTk1VWF9EQVRBKFNDSUZBM19DVFNfX01BUkssIFBPUlQxMDdfRk4zKSwgXAorCVBJTk1VWF9EQVRBKE1GRzNfSU4yX01BUkssIFBPUlQxMDdfRk40KSwKKwlQSU5NVVhfREFUQShTQ0lGQTNfUlhEX01BUkssIFBPUlQxMDhfRk4zKSwgXAorCVBJTk1VWF9EQVRBKE1GRzNfSU4xX01BUkssIFBPUlQxMDhfRk40KSwKKwlQSU5NVVhfREFUQShCQklGMV9TUzJfTUFSSywgUE9SVDEwOV9GTjIpLCBcCisJUElOTVVYX0RBVEEoU0NJRkEzX1JUU19fTUFSSywgUE9SVDEwOV9GTjMpLCBcCisJUElOTVVYX0RBVEEoTUZHM19PVVQxX01BUkssIFBPUlQxMDlfRk40KSwKKwlQSU5NVVhfREFUQShTQ0lGQTNfVFhEX01BUkssIFBPUlQxMTBfRk4zKSwKKwlQSU5NVVhfREFUQShIU0lfUlhfREFUQV9NQVJLLCBQT1JUMTExX0ZOMSksIFwKKwlQSU5NVVhfREFUQShCQklGMV9SWERfTUFSSywgUE9SVDExMV9GTjMpLAorCVBJTk1VWF9EQVRBKEhTSV9UWF9XQUtFX01BUkssIFBPUlQxMTJfRk4xKSwgXAorCVBJTk1VWF9EQVRBKEJCSUYxX1RTQ0tfTUFSSywgUE9SVDExMl9GTjMpLAorCVBJTk1VWF9EQVRBKEhTSV9UWF9EQVRBX01BUkssIFBPUlQxMTNfRk4xKSwgXAorCVBJTk1VWF9EQVRBKEJCSUYxX1RTWU5DX01BUkssIFBPUlQxMTNfRk4zKSwKKwlQSU5NVVhfREFUQShIU0lfVFhfUkVBRFlfTUFSSywgUE9SVDExNF9GTjEpLCBcCisJUElOTVVYX0RBVEEoQkJJRjFfVFhEX01BUkssIFBPUlQxMTRfRk4zKSwKKwlQSU5NVVhfREFUQShIU0lfUlhfUkVBRFlfTUFSSywgUE9SVDExNV9GTjEpLCBcCisJUElOTVVYX0RBVEEoQkJJRjFfUlNDS19NQVJLLCBQT1JUMTE1X0ZOMyksIFwKKwlQSU5NVVhfREFUQShQT1JUMTE1X0kyQ19TQ0wyX01BUkssIFBPUlQxMTVfRk41LCBNU0VMMkNSX01TRUwxN18xKSwgXAorCVBJTk1VWF9EQVRBKFBPUlQxMTVfSTJDX1NDTDNfTUFSSywgUE9SVDExNV9GTjYsIE1TRUwyQ1JfTVNFTDE5XzEpLAorCVBJTk1VWF9EQVRBKEhTSV9SWF9XQUtFX01BUkssIFBPUlQxMTZfRk4xKSwgXAorCVBJTk1VWF9EQVRBKEJCSUYxX1JTWU5DX01BUkssIFBPUlQxMTZfRk4zKSwgXAorCVBJTk1VWF9EQVRBKFBPUlQxMTZfSTJDX1NEQTJfTUFSSywgUE9SVDExNl9GTjUsIE1TRUwyQ1JfTVNFTDE3XzEpLCBcCisJUElOTVVYX0RBVEEoUE9SVDExNl9JMkNfU0RBM19NQVJLLCBQT1JUMTE2X0ZONiwgTVNFTDJDUl9NU0VMMTlfMSksCisJUElOTVVYX0RBVEEoSFNJX1JYX0ZMQUdfTUFSSywgUE9SVDExN19GTjEpLCBcCisJUElOTVVYX0RBVEEoQkJJRjFfU1MxX01BUkssIFBPUlQxMTdfRk4yKSwgXAorCVBJTk1VWF9EQVRBKEJCSUYxX0ZMT1dfTUFSSywgUE9SVDExN19GTjMpLAorCVBJTk1VWF9EQVRBKEhTSV9UWF9GTEFHX01BUkssIFBPUlQxMThfRk4xKSwKKwlQSU5NVVhfREFUQShWSU9fVkRfTUFSSywgUE9SVDEyOF9GTjEpLCBcCisJUElOTVVYX0RBVEEoUE9SVDEyOF9MQ0QyVlNZTl9NQVJLLCBQT1JUMTI4X0ZONCwgTVNFTDNDUl9NU0VMMl8wKSwgXAorCVBJTk1VWF9EQVRBKFZJTzJfVkRfTUFSSywgUE9SVDEyOF9GTjYsIE1TRUw0Q1JfTVNFTDI3XzApLCBcCisJUElOTVVYX0RBVEEoTENEMkQwX01BUkssIFBPUlQxMjhfRk43KSwKKworCVBJTk1VWF9EQVRBKFZJT19IRF9NQVJLLCBQT1JUMTI5X0ZOMSksIFwKKwlQSU5NVVhfREFUQShQT1JUMTI5X0xDRDJIU1lOX01BUkssIFBPUlQxMjlfRk40KSwgXAorCVBJTk1VWF9EQVRBKFBPUlQxMjlfTENEMkNTX19NQVJLLCBQT1JUMTI5X0ZONSksIFwKKwlQSU5NVVhfREFUQShWSU8yX0hEX01BUkssIFBPUlQxMjlfRk42LCBNU0VMNENSX01TRUwyN18wKSwgXAorCVBJTk1VWF9EQVRBKExDRDJEMV9NQVJLLCBQT1JUMTI5X0ZONyksCisJUElOTVVYX0RBVEEoVklPX0QwX01BUkssIFBPUlQxMzBfRk4xKSwgXAorCVBJTk1VWF9EQVRBKFBPUlQxMzBfTVNJT0YyX1JYRF9NQVJLLCBQT1JUMTMwX0ZOMywgTVNFTDRDUl9NU0VMMTFfMCwKKwkJTVNFTDRDUl9NU0VMMTBfMSksIFwKKwlQSU5NVVhfREFUQShMQ0QyRDEwX01BUkssIFBPUlQxMzBfRk43KSwKKwlQSU5NVVhfREFUQShWSU9fRDFfTUFSSywgUE9SVDEzMV9GTjEpLCBcCisJUElOTVVYX0RBVEEoUE9SVDEzMV9LRVlPVVQ2X01BUkssIFBPUlQxMzFfRk4yKSwgXAorCVBJTk1VWF9EQVRBKFBPUlQxMzFfTVNJT0YyX1NTMV9NQVJLLCBQT1JUMTMxX0ZOMyksIFwKKwlQSU5NVVhfREFUQShQT1JUMTMxX0tFWU9VVDExX01BUkssIFBPUlQxMzFfRk40KSwgXAorCVBJTk1VWF9EQVRBKExDRDJEMTFfTUFSSywgUE9SVDEzMV9GTjcpLAorCVBJTk1VWF9EQVRBKFZJT19EMl9NQVJLLCBQT1JUMTMyX0ZOMSksIFwKKwlQSU5NVVhfREFUQShQT1JUMTMyX0tFWU9VVDdfTUFSSywgUE9SVDEzMl9GTjIpLCBcCisJUElOTVVYX0RBVEEoUE9SVDEzMl9NU0lPRjJfU1MyX01BUkssIFBPUlQxMzJfRk4zKSwgXAorCVBJTk1VWF9EQVRBKFBPUlQxMzJfS0VZT1VUMTBfTUFSSywgUE9SVDEzMl9GTjQpLCBcCisJUElOTVVYX0RBVEEoTENEMkQxMl9NQVJLLCBQT1JUMTMyX0ZONyksCisJUElOTVVYX0RBVEEoVklPX0QzX01BUkssIFBPUlQxMzNfRk4xKSwgXAorCVBJTk1VWF9EQVRBKE1TSU9GMl9UU1lOQ19NQVJLLCBQT1JUMTMzX0ZOMywgTVNFTDRDUl9NU0VMMTFfMCksIFwKKwlQSU5NVVhfREFUQShMQ0QyRDEzX01BUkssIFBPUlQxMzNfRk43KSwKKwlQSU5NVVhfREFUQShWSU9fRDRfTUFSSywgUE9SVDEzNF9GTjEpLCBcCisJUElOTVVYX0RBVEEoTVNJT0YyX1RYRF9NQVJLLCBQT1JUMTM0X0ZOMywgTVNFTDRDUl9NU0VMMTFfMCksIFwKKwlQSU5NVVhfREFUQShMQ0QyRDE0X01BUkssIFBPUlQxMzRfRk43KSwKKwlQSU5NVVhfREFUQShWSU9fRDVfTUFSSywgUE9SVDEzNV9GTjEpLCBcCisJUElOTVVYX0RBVEEoTVNJT0YyX1RTQ0tfTUFSSywgUE9SVDEzNV9GTjMsIE1TRUw0Q1JfTVNFTDExXzApLCBcCisJUElOTVVYX0RBVEEoTENEMkQxNV9NQVJLLCBQT1JUMTM1X0ZONyksCisJUElOTVVYX0RBVEEoVklPX0Q2X01BUkssIFBPUlQxMzZfRk4xKSwgXAorCVBJTk1VWF9EQVRBKFBPUlQxMzZfS0VZT1VUOF9NQVJLLCBQT1JUMTM2X0ZOMiksIFwKKwlQSU5NVVhfREFUQShMQ0QyRDE2X01BUkssIFBPUlQxMzZfRk43KSwKKwlQSU5NVVhfREFUQShWSU9fRDdfTUFSSywgUE9SVDEzN19GTjEpLCBcCisJUElOTVVYX0RBVEEoUE9SVDEzN19LRVlPVVQ5X01BUkssIFBPUlQxMzdfRk4yKSwgXAorCVBJTk1VWF9EQVRBKExDRDJEMTdfTUFSSywgUE9SVDEzN19GTjcpLAorCVBJTk1VWF9EQVRBKFZJT19EOF9NQVJLLCBQT1JUMTM4X0ZOMSksIFwKKwlQSU5NVVhfREFUQShQT1JUMTM4X0tFWU9VVDhfTUFSSywgUE9SVDEzOF9GTjIpLCBcCisJUElOTVVYX0RBVEEoVklPMl9EMF9NQVJLLCBQT1JUMTM4X0ZONiksIFwKKwlQSU5NVVhfREFUQShMQ0QyRDZfTUFSSywgUE9SVDEzOF9GTjcpLAorCVBJTk1VWF9EQVRBKFZJT19EOV9NQVJLLCBQT1JUMTM5X0ZOMSksIFwKKwlQSU5NVVhfREFUQShQT1JUMTM5X0tFWU9VVDlfTUFSSywgUE9SVDEzOV9GTjIpLCBcCisJUElOTVVYX0RBVEEoVklPMl9EMV9NQVJLLCBQT1JUMTM5X0ZONiksIFwKKwlQSU5NVVhfREFUQShMQ0QyRDdfTUFSSywgUE9SVDEzOV9GTjcpLAorCVBJTk1VWF9EQVRBKFZJT19EMTBfTUFSSywgUE9SVDE0MF9GTjEpLCBcCisJUElOTVVYX0RBVEEoVFBVMFRPMl9NQVJLLCBQT1JUMTQwX0ZONCksIFwKKwlQSU5NVVhfREFUQShWSU8yX0QyX01BUkssIFBPUlQxNDBfRk42KSwgXAorCVBJTk1VWF9EQVRBKExDRDJEOF9NQVJLLCBQT1JUMTQwX0ZONyksCisJUElOTVVYX0RBVEEoVklPX0QxMV9NQVJLLCBQT1JUMTQxX0ZOMSksIFwKKwlQSU5NVVhfREFUQShUUFUwVE8zX01BUkssIFBPUlQxNDFfRk40KSwgXAorCVBJTk1VWF9EQVRBKFZJTzJfRDNfTUFSSywgUE9SVDE0MV9GTjYpLCBcCisJUElOTVVYX0RBVEEoTENEMkQ5X01BUkssIFBPUlQxNDFfRk43KSwKKwlQSU5NVVhfREFUQShWSU9fRDEyX01BUkssIFBPUlQxNDJfRk4xKSwgXAorCVBJTk1VWF9EQVRBKFBPUlQxNDJfS0VZT1VUMTBfTUFSSywgUE9SVDE0Ml9GTjIpLCBcCisJUElOTVVYX0RBVEEoVklPMl9ENF9NQVJLLCBQT1JUMTQyX0ZONiksIFwKKwlQSU5NVVhfREFUQShMQ0QyRDJfTUFSSywgUE9SVDE0Ml9GTjcpLAorCVBJTk1VWF9EQVRBKFZJT19EMTNfTUFSSywgUE9SVDE0M19GTjEpLCBcCisJUElOTVVYX0RBVEEoUE9SVDE0M19LRVlPVVQxMV9NQVJLLCBQT1JUMTQzX0ZOMiksIFwKKwlQSU5NVVhfREFUQShQT1JUMTQzX0tFWU9VVDZfTUFSSywgUE9SVDE0M19GTjMpLCBcCisJUElOTVVYX0RBVEEoVklPMl9ENV9NQVJLLCBQT1JUMTQzX0ZONiksIFwKKwlQSU5NVVhfREFUQShMQ0QyRDNfTUFSSywgUE9SVDE0M19GTjcpLAorCVBJTk1VWF9EQVRBKFZJT19EMTRfTUFSSywgUE9SVDE0NF9GTjEpLCBcCisJUElOTVVYX0RBVEEoUE9SVDE0NF9LRVlPVVQ3X01BUkssIFBPUlQxNDRfRk4yKSwgXAorCVBJTk1VWF9EQVRBKFZJTzJfRDZfTUFSSywgUE9SVDE0NF9GTjYpLCBcCisJUElOTVVYX0RBVEEoTENEMkQ0X01BUkssIFBPUlQxNDRfRk43KSwKKwlQSU5NVVhfREFUQShWSU9fRDE1X01BUkssIFBPUlQxNDVfRk4xKSwgXAorCVBJTk1VWF9EQVRBKFRQVTFUTzNfTUFSSywgUE9SVDE0NV9GTjMpLCBcCisJUElOTVVYX0RBVEEoUE9SVDE0NV9MQ0QyRElTUF9NQVJLLCBQT1JUMTQ1X0ZONCksIFwKKwlQSU5NVVhfREFUQShQT1JUMTQ1X0xDRDJSU19NQVJLLCBQT1JUMTQ1X0ZONSksIFwKKwlQSU5NVVhfREFUQShWSU8yX0Q3X01BUkssIFBPUlQxNDVfRk42KSwgXAorCVBJTk1VWF9EQVRBKExDRDJENV9NQVJLLCBQT1JUMTQ1X0ZONyksCisJUElOTVVYX0RBVEEoVklPX0NMS19NQVJLLCBQT1JUMTQ2X0ZOMSksIFwKKwlQSU5NVVhfREFUQShMQ0QyRENLX01BUkssIFBPUlQxNDZfRk40KSwgXAorCVBJTk1VWF9EQVRBKFBPUlQxNDZfTENEMldSX19NQVJLLCBQT1JUMTQ2X0ZONSksIFwKKwlQSU5NVVhfREFUQShWSU8yX0NMS19NQVJLLCBQT1JUMTQ2X0ZONiwgTVNFTDRDUl9NU0VMMjdfMCksIFwKKwlQSU5NVVhfREFUQShMQ0QyRDE4X01BUkssIFBPUlQxNDZfRk43KSwKKwlQSU5NVVhfREFUQShWSU9fRklFTERfTUFSSywgUE9SVDE0N19GTjEpLCBcCisJUElOTVVYX0RBVEEoTENEMlJEX19NQVJLLCBQT1JUMTQ3X0ZONCksIFwKKwlQSU5NVVhfREFUQShWSU8yX0ZJRUxEX01BUkssIFBPUlQxNDdfRk42LCBNU0VMNENSX01TRUwyN18wKSwgXAorCVBJTk1VWF9EQVRBKExDRDJEMTlfTUFSSywgUE9SVDE0N19GTjcpLAorCVBJTk1VWF9EQVRBKFZJT19DS09fTUFSSywgUE9SVDE0OF9GTjEpLAorCVBJTk1VWF9EQVRBKEEyN19NQVJLLCBQT1JUMTQ5X0ZOMSksIFwKKwlQSU5NVVhfREFUQShQT1JUMTQ5X1JEV1JfTUFSSywgUE9SVDE0OV9GTjIpLCBcCisJUElOTVVYX0RBVEEoTUZHMF9JTjFfTUFSSywgUE9SVDE0OV9GTjMpLCBcCisJUElOTVVYX0RBVEEoUE9SVDE0OV9LRVlPVVQ5X01BUkssIFBPUlQxNDlfRk40KSwKKwlQSU5NVVhfREFUQShNRkcwX0lOMl9NQVJLLCBQT1JUMTUwX0ZOMyksCisJUElOTVVYX0RBVEEoVFNfU1BTWU5DM19NQVJLLCBQT1JUMTUxX0ZONCksIFwKKwlQSU5NVVhfREFUQShNU0lPRjJfUlNDS19NQVJLLCBQT1JUMTUxX0ZONSksCisJUElOTVVYX0RBVEEoVFNfU0RBVDNfTUFSSywgUE9SVDE1Ml9GTjQpLCBcCisJUElOTVVYX0RBVEEoTVNJT0YyX1JTWU5DX01BUkssIFBPUlQxNTJfRk41KSwKKwlQSU5NVVhfREFUQShUUFUxVE8yX01BUkssIFBPUlQxNTNfRk4zKSwgXAorCVBJTk1VWF9EQVRBKFRTX1NERU4zX01BUkssIFBPUlQxNTNfRk40KSwgXAorCVBJTk1VWF9EQVRBKFBPUlQxNTNfTVNJT0YyX1NTMV9NQVJLLCBQT1JUMTUzX0ZONSksCisJUElOTVVYX0RBVEEoU0NJRkEyX1RYRDFfTUFSSywgUE9SVDE1NF9GTjIsIE1TRUwzQ1JfTVNFTDlfMCksIFwKKwlQSU5NVVhfREFUQShNU0lPRjJfTUNLMF9NQVJLLCBQT1JUMTU0X0ZONSksCisJUElOTVVYX0RBVEEoU0NJRkEyX1JYRDFfTUFSSywgUE9SVDE1NV9GTjIsIE1TRUwzQ1JfTVNFTDlfMCksIFwKKwlQSU5NVVhfREFUQShNU0lPRjJfTUNLMV9NQVJLLCBQT1JUMTU1X0ZONSksCisJUElOTVVYX0RBVEEoU0NJRkEyX1JUUzFfX01BUkssIFBPUlQxNTZfRk4yLCBNU0VMM0NSX01TRUw5XzApLCBcCisJUElOTVVYX0RBVEEoUE9SVDE1Nl9NU0lPRjJfU1MyX01BUkssIFBPUlQxNTZfRk41KSwKKwlQSU5NVVhfREFUQShTQ0lGQTJfQ1RTMV9fTUFSSywgUE9SVDE1N19GTjIsIE1TRUwzQ1JfTVNFTDlfMCksIFwKKwlQSU5NVVhfREFUQShQT1JUMTU3X01TSU9GMl9SWERfTUFSSywgUE9SVDE1N19GTjUsIE1TRUw0Q1JfTVNFTDExXzAsCisJCU1TRUw0Q1JfTVNFTDEwXzApLAorCVBJTk1VWF9EQVRBKERJTlRfX01BUkssIFBPUlQxNThfRk4xKSwgXAorCVBJTk1VWF9EQVRBKFNDSUZBMl9TQ0sxX01BUkssIFBPUlQxNThfRk4yLCBNU0VMM0NSX01TRUw5XzApLCBcCisJUElOTVVYX0RBVEEoVFNfU0NLM19NQVJLLCBQT1JUMTU4X0ZONCksCisJUElOTVVYX0RBVEEoUE9SVDE1OV9TQ0lGQl9TQ0tfTUFSSywgUE9SVDE1OV9GTjEsIE1TRUw0Q1JfTVNFTDIyXzApLCBcCisJUElOTVVYX0RBVEEoUE9SVDE1OV9TQ0lGQTVfU0NLX01BUkssIFBPUlQxNTlfRk4yLCBNU0VMNENSX01TRUwyMV8xKSwgXAorCVBJTk1VWF9EQVRBKE5NSV9NQVJLLCBQT1JUMTU5X0ZOMyksCisJUElOTVVYX0RBVEEoUE9SVDE2MF9TQ0lGQl9UWERfTUFSSywgUE9SVDE2MF9GTjEsIE1TRUw0Q1JfTVNFTDIyXzApLCBcCisJUElOTVVYX0RBVEEoUE9SVDE2MF9TQ0lGQTVfVFhEX01BUkssIFBPUlQxNjBfRk4yLCBNU0VMNENSX01TRUwyMV8xKSwKKwlQSU5NVVhfREFUQShQT1JUMTYxX1NDSUZCX0NUU19fTUFSSywgUE9SVDE2MV9GTjEsIE1TRUw0Q1JfTVNFTDIyXzApLCBcCisJUElOTVVYX0RBVEEoUE9SVDE2MV9TQ0lGQTVfQ1RTX19NQVJLLCBQT1JUMTYxX0ZOMiwgTVNFTDRDUl9NU0VMMjFfMSksCisJUElOTVVYX0RBVEEoUE9SVDE2Ml9TQ0lGQl9SWERfTUFSSywgUE9SVDE2Ml9GTjEsIE1TRUw0Q1JfTVNFTDIyXzApLCBcCisJUElOTVVYX0RBVEEoUE9SVDE2Ml9TQ0lGQTVfUlhEX01BUkssIFBPUlQxNjJfRk4yLCBNU0VMNENSX01TRUwyMV8xKSwKKwlQSU5NVVhfREFUQShQT1JUMTYzX1NDSUZCX1JUU19fTUFSSywgUE9SVDE2M19GTjEsIE1TRUw0Q1JfTVNFTDIyXzApLCBcCisJUElOTVVYX0RBVEEoUE9SVDE2M19TQ0lGQTVfUlRTX19NQVJLLCBQT1JUMTYzX0ZOMiwgTVNFTDRDUl9NU0VMMjFfMSksIFwKKwlQSU5NVVhfREFUQShUUFUzVE8wX01BUkssIFBPUlQxNjNfRk41KSwKKwlQSU5NVVhfREFUQShMQ0REMF9NQVJLLCBQT1JUMTkyX0ZOMSksCisJUElOTVVYX0RBVEEoTENERDFfTUFSSywgUE9SVDE5M19GTjEpLCBcCisJUElOTVVYX0RBVEEoUE9SVDE5M19TQ0lGQTVfQ1RTX19NQVJLLCBQT1JUMTkzX0ZOMywgTVNFTDRDUl9NU0VMMjFfMCwKKwkJTVNFTDRDUl9NU0VMMjBfMSksIFwKKwlQSU5NVVhfREFUQShCQklGMl9UU1lOQzFfTUFSSywgUE9SVDE5M19GTjUpLAorCVBJTk1VWF9EQVRBKExDREQyX01BUkssIFBPUlQxOTRfRk4xKSwgXAorCVBJTk1VWF9EQVRBKFBPUlQxOTRfU0NJRkE1X1JUU19fTUFSSywgUE9SVDE5NF9GTjMsIE1TRUw0Q1JfTVNFTDIxXzAsCisJCU1TRUw0Q1JfTVNFTDIwXzEpLCBcCisJUElOTVVYX0RBVEEoQkJJRjJfVFNDSzFfTUFSSywgUE9SVDE5NF9GTjUpLAorCVBJTk1VWF9EQVRBKExDREQzX01BUkssIFBPUlQxOTVfRk4xKSwgXAorCVBJTk1VWF9EQVRBKFBPUlQxOTVfU0NJRkE1X1JYRF9NQVJLLCBQT1JUMTk1X0ZOMywgTVNFTDRDUl9NU0VMMjFfMCwKKwkJTVNFTDRDUl9NU0VMMjBfMSksIFwKKwlQSU5NVVhfREFUQShCQklGMl9UWEQxX01BUkssIFBPUlQxOTVfRk41KSwKKwlQSU5NVVhfREFUQShMQ0RENF9NQVJLLCBQT1JUMTk2X0ZOMSksIFwKKwlQSU5NVVhfREFUQShQT1JUMTk2X1NDSUZBNV9UWERfTUFSSywgUE9SVDE5Nl9GTjMsIE1TRUw0Q1JfTVNFTDIxXzAsCisJCU1TRUw0Q1JfTVNFTDIwXzEpLAorCVBJTk1VWF9EQVRBKExDREQ1X01BUkssIFBPUlQxOTdfRk4xKSwgXAorCVBJTk1VWF9EQVRBKFBPUlQxOTdfU0NJRkE1X1NDS19NQVJLLCBQT1JUMTk3X0ZOMywgTVNFTDRDUl9NU0VMMjFfMCwKKwkJTVNFTDRDUl9NU0VMMjBfMSksIFwKKwlQSU5NVVhfREFUQShNRkcyX09VVDJfTUFSSywgUE9SVDE5N19GTjUpLCBcCisJUElOTVVYX0RBVEEoVFBVMlRPMV9NQVJLLCBQT1JUMTk3X0ZONyksCisJUElOTVVYX0RBVEEoTENERDZfTUFSSywgUE9SVDE5OF9GTjEpLAorCVBJTk1VWF9EQVRBKExDREQ3X01BUkssIFBPUlQxOTlfRk4xKSwgXAorCVBJTk1VWF9EQVRBKFRQVTRUTzFfTUFSSywgUE9SVDE5OV9GTjIpLCBcCisJUElOTVVYX0RBVEEoTUZHNF9PVVQyX01BUkssIFBPUlQxOTlfRk41KSwKKwlQSU5NVVhfREFUQShMQ0REOF9NQVJLLCBQT1JUMjAwX0ZOMSksIFwKKwlQSU5NVVhfREFUQShEMTZfTUFSSywgUE9SVDIwMF9GTjYpLAorCVBJTk1VWF9EQVRBKExDREQ5X01BUkssIFBPUlQyMDFfRk4xKSwgXAorCVBJTk1VWF9EQVRBKEQxN19NQVJLLCBQT1JUMjAxX0ZONiksCisJUElOTVVYX0RBVEEoTENERDEwX01BUkssIFBPUlQyMDJfRk4xKSwgXAorCVBJTk1VWF9EQVRBKEQxOF9NQVJLLCBQT1JUMjAyX0ZONiksCisJUElOTVVYX0RBVEEoTENERDExX01BUkssIFBPUlQyMDNfRk4xKSwgXAorCVBJTk1VWF9EQVRBKEQxOV9NQVJLLCBQT1JUMjAzX0ZONiksCisJUElOTVVYX0RBVEEoTENERDEyX01BUkssIFBPUlQyMDRfRk4xKSwgXAorCVBJTk1VWF9EQVRBKEQyMF9NQVJLLCBQT1JUMjA0X0ZONiksCisJUElOTVVYX0RBVEEoTENERDEzX01BUkssIFBPUlQyMDVfRk4xKSwgXAorCVBJTk1VWF9EQVRBKEQyMV9NQVJLLCBQT1JUMjA1X0ZONiksCisJUElOTVVYX0RBVEEoTENERDE0X01BUkssIFBPUlQyMDZfRk4xKSwgXAorCVBJTk1VWF9EQVRBKEQyMl9NQVJLLCBQT1JUMjA2X0ZONiksCisJUElOTVVYX0RBVEEoTENERDE1X01BUkssIFBPUlQyMDdfRk4xKSwgXAorCVBJTk1VWF9EQVRBKFBPUlQyMDdfTVNJT0YwTF9TUzFfTUFSSywgUE9SVDIwN19GTjIsIE1TRUwzQ1JfTVNFTDExXzEpLCBcCisJUElOTVVYX0RBVEEoRDIzX01BUkssIFBPUlQyMDdfRk42KSwKKwlQSU5NVVhfREFUQShMQ0REMTZfTUFSSywgUE9SVDIwOF9GTjEpLCBcCisJUElOTVVYX0RBVEEoUE9SVDIwOF9NU0lPRjBMX1NTMl9NQVJLLCBQT1JUMjA4X0ZOMiwgTVNFTDNDUl9NU0VMMTFfMSksIFwKKwlQSU5NVVhfREFUQShEMjRfTUFSSywgUE9SVDIwOF9GTjYpLAorCVBJTk1VWF9EQVRBKExDREQxN19NQVJLLCBQT1JUMjA5X0ZOMSksIFwKKwlQSU5NVVhfREFUQShEMjVfTUFSSywgUE9SVDIwOV9GTjYpLAorCVBJTk1VWF9EQVRBKExDREQxOF9NQVJLLCBQT1JUMjEwX0ZOMSksIFwKKwlQSU5NVVhfREFUQShEUkVRMl9NQVJLLCBQT1JUMjEwX0ZOMiksIFwKKwlQSU5NVVhfREFUQShQT1JUMjEwX01TSU9GMExfU1MxX01BUkssIFBPUlQyMTBfRk41LCBNU0VMM0NSX01TRUwxMV8xKSwgXAorCVBJTk1VWF9EQVRBKEQyNl9NQVJLLCBQT1JUMjEwX0ZONiksCisJUElOTVVYX0RBVEEoTENERDE5X01BUkssIFBPUlQyMTFfRk4xKSwgXAorCVBJTk1VWF9EQVRBKFBPUlQyMTFfTVNJT0YwTF9TUzJfTUFSSywgUE9SVDIxMV9GTjUsIE1TRUwzQ1JfTVNFTDExXzEpLCBcCisJUElOTVVYX0RBVEEoRDI3X01BUkssIFBPUlQyMTFfRk42KSwKKwlQSU5NVVhfREFUQShMQ0REMjBfTUFSSywgUE9SVDIxMl9GTjEpLCBcCisJUElOTVVYX0RBVEEoVFNfU1BTWU5DMV9NQVJLLCBQT1JUMjEyX0ZOMiksIFwKKwlQSU5NVVhfREFUQShNU0lPRjBMX01DSzBfTUFSSywgUE9SVDIxMl9GTjUsIE1TRUwzQ1JfTVNFTDExXzEpLCBcCisJUElOTVVYX0RBVEEoRDI4X01BUkssIFBPUlQyMTJfRk42KSwKKwlQSU5NVVhfREFUQShMQ0REMjFfTUFSSywgUE9SVDIxM19GTjEpLCBcCisJUElOTVVYX0RBVEEoVFNfU0RBVDFfTUFSSywgUE9SVDIxM19GTjIpLCBcCisJUElOTVVYX0RBVEEoTVNJT0YwTF9NQ0sxX01BUkssIFBPUlQyMTNfRk41LCBNU0VMM0NSX01TRUwxMV8xKSwgXAorCVBJTk1VWF9EQVRBKEQyOV9NQVJLLCBQT1JUMjEzX0ZONiksCisJUElOTVVYX0RBVEEoTENERDIyX01BUkssIFBPUlQyMTRfRk4xKSwgXAorCVBJTk1VWF9EQVRBKFRTX1NERU4xX01BUkssIFBPUlQyMTRfRk4yKSwgXAorCVBJTk1VWF9EQVRBKE1TSU9GMExfUlNDS19NQVJLLCBQT1JUMjE0X0ZONSwgTVNFTDNDUl9NU0VMMTFfMSksIFwKKwlQSU5NVVhfREFUQShEMzBfTUFSSywgUE9SVDIxNF9GTjYpLAorCVBJTk1VWF9EQVRBKExDREQyM19NQVJLLCBQT1JUMjE1X0ZOMSksIFwKKwlQSU5NVVhfREFUQShUU19TQ0sxX01BUkssIFBPUlQyMTVfRk4yKSwgXAorCVBJTk1VWF9EQVRBKE1TSU9GMExfUlNZTkNfTUFSSywgUE9SVDIxNV9GTjUsIE1TRUwzQ1JfTVNFTDExXzEpLCBcCisJUElOTVVYX0RBVEEoRDMxX01BUkssIFBPUlQyMTVfRk42KSwKKwlQSU5NVVhfREFUQShMQ0REQ0tfTUFSSywgUE9SVDIxNl9GTjEpLCBcCisJUElOTVVYX0RBVEEoTENEV1JfX01BUkssIFBPUlQyMTZfRk4yKSwKKwlQSU5NVVhfREFUQShMQ0RSRF9fTUFSSywgUE9SVDIxN19GTjEpLCBcCisJUElOTVVYX0RBVEEoREFDSzJfTUFSSywgUE9SVDIxN19GTjIpLCBcCisJUElOTVVYX0RBVEEoUE9SVDIxN19MQ0QyUlNfTUFSSywgUE9SVDIxN19GTjMpLCBcCisJUElOTVVYX0RBVEEoTVNJT0YwTF9UU1lOQ19NQVJLLCBQT1JUMjE3X0ZONSwgTVNFTDNDUl9NU0VMMTFfMSksIFwKKwlQSU5NVVhfREFUQShWSU8yX0ZJRUxEM19NQVJLLCBQT1JUMjE3X0ZONiwgTVNFTDRDUl9NU0VMMjdfMSwKKwkJTVNFTDRDUl9NU0VMMjZfMSksIFwKKwlQSU5NVVhfREFUQShQT1JUMjE3X0xDRDJESVNQX01BUkssIFBPUlQyMTdfRk43KSwKKwlQSU5NVVhfREFUQShMQ0RIU1lOX01BUkssIFBPUlQyMThfRk4xKSwgXAorCVBJTk1VWF9EQVRBKExDRENTX19NQVJLLCBQT1JUMjE4X0ZOMiksIFwKKwlQSU5NVVhfREFUQShMQ0RDUzJfX01BUkssIFBPUlQyMThfRk4zKSwgXAorCVBJTk1VWF9EQVRBKERBQ0szX01BUkssIFBPUlQyMThfRk40KSwgXAorCVBJTk1VWF9EQVRBKFBPUlQyMThfVklPX0NLT1JfTUFSSywgUE9SVDIxOF9GTjUpLAorCVBJTk1VWF9EQVRBKExDRERJU1BfTUFSSywgUE9SVDIxOV9GTjEpLCBcCisJUElOTVVYX0RBVEEoTENEUlNfTUFSSywgUE9SVDIxOV9GTjIpLCBcCisJUElOTVVYX0RBVEEoUE9SVDIxOV9MQ0QyV1JfX01BUkssIFBPUlQyMTlfRk4zKSwgXAorCVBJTk1VWF9EQVRBKERSRVEzX01BUkssIFBPUlQyMTlfRk40KSwgXAorCVBJTk1VWF9EQVRBKE1TSU9GMExfVFNDS19NQVJLLCBQT1JUMjE5X0ZONSwgTVNFTDNDUl9NU0VMMTFfMSksIFwKKwlQSU5NVVhfREFUQShWSU8yX0NMSzNfTUFSSywgUE9SVDIxOV9GTjYsIE1TRUw0Q1JfTVNFTDI3XzEsCisJCU1TRUw0Q1JfTVNFTDI2XzEpLCBcCisJUElOTVVYX0RBVEEoTENEMkRDS18yX01BUkssIFBPUlQyMTlfRk43KSwKKwlQSU5NVVhfREFUQShMQ0RWU1lOX01BUkssIFBPUlQyMjBfRk4xKSwgXAorCVBJTk1VWF9EQVRBKExDRFZTWU4yX01BUkssIFBPUlQyMjBfRk4yKSwKKwlQSU5NVVhfREFUQShMQ0RMQ0xLX01BUkssIFBPUlQyMjFfRk4xKSwgXAorCVBJTk1VWF9EQVRBKERSRVExX01BUkssIFBPUlQyMjFfRk4yKSwgXAorCVBJTk1VWF9EQVRBKFBPUlQyMjFfTENEMkNTX19NQVJLLCBQT1JUMjIxX0ZOMyksIFwKKwlQSU5NVVhfREFUQShQV0VOX01BUkssIFBPUlQyMjFfRk40KSwgXAorCVBJTk1VWF9EQVRBKE1TSU9GMExfUlhEX01BUkssIFBPUlQyMjFfRk41LCBNU0VMM0NSX01TRUwxMV8xKSwgXAorCVBJTk1VWF9EQVRBKFZJTzJfSEQzX01BUkssIFBPUlQyMjFfRk42LCBNU0VMNENSX01TRUwyN18xLAorCQlNU0VMNENSX01TRUwyNl8xKSwgXAorCVBJTk1VWF9EQVRBKFBPUlQyMjFfTENEMkhTWU5fTUFSSywgUE9SVDIyMV9GTjcpLAorCVBJTk1VWF9EQVRBKExDRERPTl9NQVJLLCBQT1JUMjIyX0ZOMSksIFwKKwlQSU5NVVhfREFUQShMQ0RET04yX01BUkssIFBPUlQyMjJfRk4yKSwgXAorCVBJTk1VWF9EQVRBKERBQ0sxX01BUkssIFBPUlQyMjJfRk4zKSwgXAorCVBJTk1VWF9EQVRBKE9WQ05fTUFSSywgUE9SVDIyMl9GTjQpLCBcCisJUElOTVVYX0RBVEEoTVNJT0YwTF9UWERfTUFSSywgUE9SVDIyMl9GTjUsIE1TRUwzQ1JfTVNFTDExXzEpLCBcCisJUElOTVVYX0RBVEEoVklPMl9WRDNfTUFSSywgUE9SVDIyMl9GTjYsIE1TRUw0Q1JfTVNFTDI3XzEsCisJCU1TRUw0Q1JfTVNFTDI2XzEpLCBcCisJUElOTVVYX0RBVEEoUE9SVDIyMl9MQ0QyVlNZTl9NQVJLLCBQT1JUMjIyX0ZONywgTVNFTDNDUl9NU0VMMl8xKSwKKworCVBJTk1VWF9EQVRBKFNDSUZBMV9UWERfTUFSSywgUE9SVDIyNV9GTjIpLCBcCisJUElOTVVYX0RBVEEoT1ZDTjJfTUFSSywgUE9SVDIyNV9GTjQpLAorCVBJTk1VWF9EQVRBKEVYVExQX01BUkssIFBPUlQyMjZfRk4xKSwgXAorCVBJTk1VWF9EQVRBKFNDSUZBMV9TQ0tfTUFSSywgUE9SVDIyNl9GTjIpLCBcCisJUElOTVVYX0RBVEEoUE9SVDIyNl9WSU9fQ0tPMl9NQVJLLCBQT1JUMjI2X0ZONSksCisJUElOTVVYX0RBVEEoU0NJRkExX1JUU19fTUFSSywgUE9SVDIyN19GTjIpLCBcCisJUElOTVVYX0RBVEEoSURJTl9NQVJLLCBQT1JUMjI3X0ZONCksCisJUElOTVVYX0RBVEEoU0NJRkExX1JYRF9NQVJLLCBQT1JUMjI4X0ZOMiksCisJUElOTVVYX0RBVEEoU0NJRkExX0NUU19fTUFSSywgUE9SVDIyOV9GTjIpLCBcCisJUElOTVVYX0RBVEEoTUZHMV9JTjFfTUFSSywgUE9SVDIyOV9GTjMpLAorCVBJTk1VWF9EQVRBKE1TSU9GMV9UWERfTUFSSywgUE9SVDIzMF9GTjEpLCBcCisJUElOTVVYX0RBVEEoU0NJRkEyX1RYRDJfTUFSSywgUE9SVDIzMF9GTjIsIE1TRUwzQ1JfTVNFTDlfMSksCisJUElOTVVYX0RBVEEoTVNJT0YxX1RTWU5DX01BUkssIFBPUlQyMzFfRk4xKSwgXAorCVBJTk1VWF9EQVRBKFNDSUZBMl9DVFMyX19NQVJLLCBQT1JUMjMxX0ZOMiwgTVNFTDNDUl9NU0VMOV8xKSwKKwlQSU5NVVhfREFUQShNU0lPRjFfVFNDS19NQVJLLCBQT1JUMjMyX0ZOMSksIFwKKwlQSU5NVVhfREFUQShTQ0lGQTJfU0NLMl9NQVJLLCBQT1JUMjMyX0ZOMiwgTVNFTDNDUl9NU0VMOV8xKSwKKwlQSU5NVVhfREFUQShNU0lPRjFfUlhEX01BUkssIFBPUlQyMzNfRk4xKSwgXAorCVBJTk1VWF9EQVRBKFNDSUZBMl9SWEQyX01BUkssIFBPUlQyMzNfRk4yLCBNU0VMM0NSX01TRUw5XzEpLAorCVBJTk1VWF9EQVRBKE1TSU9GMV9SU0NLX01BUkssIFBPUlQyMzRfRk4xKSwgXAorCVBJTk1VWF9EQVRBKFNDSUZBMl9SVFMyX19NQVJLLCBQT1JUMjM0X0ZOMiwgTVNFTDNDUl9NU0VMOV8xKSwgXAorCVBJTk1VWF9EQVRBKFZJTzJfQ0xLMl9NQVJLLCBQT1JUMjM0X0ZONiwgTVNFTDRDUl9NU0VMMjdfMSwKKwkJTVNFTDRDUl9NU0VMMjZfMCksIFwKKwlQSU5NVVhfREFUQShMQ0QyRDIwX01BUkssIFBPUlQyMzRfRk43KSwKKwlQSU5NVVhfREFUQShNU0lPRjFfUlNZTkNfTUFSSywgUE9SVDIzNV9GTjEpLCBcCisJUElOTVVYX0RBVEEoTUZHMV9JTjJfTUFSSywgUE9SVDIzNV9GTjMpLCBcCisJUElOTVVYX0RBVEEoVklPMl9WRDJfTUFSSywgUE9SVDIzNV9GTjYsIE1TRUw0Q1JfTVNFTDI3XzEsCisJCU1TRUw0Q1JfTVNFTDI2XzApLCBcCisJUElOTVVYX0RBVEEoTENEMkQyMV9NQVJLLCBQT1JUMjM1X0ZONyksCisJUElOTVVYX0RBVEEoTVNJT0YxX01DSzBfTUFSSywgUE9SVDIzNl9GTjEpLCBcCisJUElOTVVYX0RBVEEoUE9SVDIzNl9JMkNfU0RBMl9NQVJLLCBQT1JUMjM2X0ZOMiwgTVNFTDJDUl9NU0VMMTdfMCwKKwkJTVNFTDJDUl9NU0VMMTZfMCksCisJUElOTVVYX0RBVEEoTVNJT0YxX01DSzFfTUFSSywgUE9SVDIzN19GTjEpLCBcCisJUElOTVVYX0RBVEEoUE9SVDIzN19JMkNfU0NMMl9NQVJLLCBQT1JUMjM3X0ZOMiwgTVNFTDJDUl9NU0VMMTdfMCwKKwkJTVNFTDJDUl9NU0VMMTZfMCksCisJUElOTVVYX0RBVEEoTVNJT0YxX1NTMV9NQVJLLCBQT1JUMjM4X0ZOMSksIFwKKwlQSU5NVVhfREFUQShWSU8yX0ZJRUxEMl9NQVJLLCBQT1JUMjM4X0ZONiwgTVNFTDRDUl9NU0VMMjdfMSwKKwkJTVNFTDRDUl9NU0VMMjZfMCksIFwKKwlQSU5NVVhfREFUQShMQ0QyRDIyX01BUkssIFBPUlQyMzhfRk43KSwKKwlQSU5NVVhfREFUQShNU0lPRjFfU1MyX01BUkssIFBPUlQyMzlfRk4xKSwgXAorCVBJTk1VWF9EQVRBKFZJTzJfSEQyX01BUkssIFBPUlQyMzlfRk42LCBNU0VMNENSX01TRUwyN18xLAorCQlNU0VMNENSX01TRUwyNl8wKSwgXAorCVBJTk1VWF9EQVRBKExDRDJEMjNfTUFSSywgUE9SVDIzOV9GTjcpLAorCVBJTk1VWF9EQVRBKFNDSUZBNl9UWERfTUFSSywgUE9SVDI0MF9GTjEpLAorCVBJTk1VWF9EQVRBKFBPUlQyNDFfSVJEQV9PVVRfTUFSSywgUE9SVDI0MV9GTjEsIE1TRUw0Q1JfTVNFTDE5XzApLCBcCisJUElOTVVYX0RBVEEoUE9SVDI0MV9JUk9VVF9NQVJLLCBQT1JUMjQxX0ZOMiksIFwKKwlQSU5NVVhfREFUQShNRkc0X09VVDFfTUFSSywgUE9SVDI0MV9GTjMpLCBcCisJUElOTVVYX0RBVEEoVFBVNFRPMF9NQVJLLCBQT1JUMjQxX0ZONCksCisJUElOTVVYX0RBVEEoUE9SVDI0Ml9JUkRBX0lOX01BUkssIFBPUlQyNDJfRk4xLCBNU0VMNENSX01TRUwxOV8wKSwgXAorCVBJTk1VWF9EQVRBKE1GRzRfSU4yX01BUkssIFBPUlQyNDJfRk4zKSwKKwlQSU5NVVhfREFUQShQT1JUMjQzX0lSREFfRklSU0VMX01BUkssIFBPUlQyNDNfRk4xLCBNU0VMNENSX01TRUwxOV8wKSwgXAorCVBJTk1VWF9EQVRBKFBPUlQyNDNfVklPX0NLTzJfTUFSSywgUE9SVDI0M19GTjIpLAorCVBJTk1VWF9EQVRBKFBPUlQyNDRfU0NJRkE1X0NUU19fTUFSSywgUE9SVDI0NF9GTjEsIE1TRUw0Q1JfTVNFTDIxXzAsCisJCU1TRUw0Q1JfTVNFTDIwXzApLCBcCisJUElOTVVYX0RBVEEoTUZHMl9JTjFfTUFSSywgUE9SVDI0NF9GTjIpLCBcCisJUElOTVVYX0RBVEEoUE9SVDI0NF9TQ0lGQl9DVFNfX01BUkssIFBPUlQyNDRfRk4zLCBNU0VMNENSX01TRUwyMl8xKSwgXAorCVBJTk1VWF9EQVRBKE1TSU9GMlJfUlhEX01BUkssIFBPUlQyNDRfRk43LCBNU0VMNENSX01TRUwxMV8xKSwKKwlQSU5NVVhfREFUQShQT1JUMjQ1X1NDSUZBNV9SVFNfX01BUkssIFBPUlQyNDVfRk4xLCBNU0VMNENSX01TRUwyMV8wLAorCQlNU0VMNENSX01TRUwyMF8wKSwgXAorCVBJTk1VWF9EQVRBKE1GRzJfSU4yX01BUkssIFBPUlQyNDVfRk4yKSwgXAorCVBJTk1VWF9EQVRBKFBPUlQyNDVfU0NJRkJfUlRTX19NQVJLLCBQT1JUMjQ1X0ZOMywgTVNFTDRDUl9NU0VMMjJfMSksIFwKKwlQSU5NVVhfREFUQShNU0lPRjJSX1RYRF9NQVJLLCBQT1JUMjQ1X0ZONywgTVNFTDRDUl9NU0VMMTFfMSksCisJUElOTVVYX0RBVEEoUE9SVDI0Nl9TQ0lGQTVfUlhEX01BUkssIFBPUlQyNDZfRk4xLCBNU0VMNENSX01TRUwyMV8wLAorCQlNU0VMNENSX01TRUwyMF8wKSwgXAorCVBJTk1VWF9EQVRBKE1GRzFfT1VUMV9NQVJLLCBQT1JUMjQ2X0ZOMiksIFwKKwlQSU5NVVhfREFUQShQT1JUMjQ2X1NDSUZCX1JYRF9NQVJLLCBQT1JUMjQ2X0ZOMywgTVNFTDRDUl9NU0VMMjJfMSksIFwKKwlQSU5NVVhfREFUQShUUFUxVE8wX01BUkssIFBPUlQyNDZfRk40KSwKKwlQSU5NVVhfREFUQShQT1JUMjQ3X1NDSUZBNV9UWERfTUFSSywgUE9SVDI0N19GTjEsIE1TRUw0Q1JfTVNFTDIxXzAsCisJCU1TRUw0Q1JfTVNFTDIwXzApLCBcCisJUElOTVVYX0RBVEEoTUZHM19PVVQyX01BUkssIFBPUlQyNDdfRk4yKSwgXAorCVBJTk1VWF9EQVRBKFBPUlQyNDdfU0NJRkJfVFhEX01BUkssIFBPUlQyNDdfRk4zLCBNU0VMNENSX01TRUwyMl8xKSwgXAorCVBJTk1VWF9EQVRBKFRQVTNUTzFfTUFSSywgUE9SVDI0N19GTjQpLAorCVBJTk1VWF9EQVRBKFBPUlQyNDhfU0NJRkE1X1NDS19NQVJLLCBQT1JUMjQ4X0ZOMSwgTVNFTDRDUl9NU0VMMjFfMCwKKwkJTVNFTDRDUl9NU0VMMjBfMCksIFwKKwlQSU5NVVhfREFUQShNRkcyX09VVDFfTUFSSywgUE9SVDI0OF9GTjIpLCBcCisJUElOTVVYX0RBVEEoUE9SVDI0OF9TQ0lGQl9TQ0tfTUFSSywgUE9SVDI0OF9GTjMsIE1TRUw0Q1JfTVNFTDIyXzEpLCBcCisJUElOTVVYX0RBVEEoVFBVMlRPMF9NQVJLLCBQT1JUMjQ4X0ZONCksIFwKKwlQSU5NVVhfREFUQShQT1JUMjQ4X0kyQ19TQ0wzX01BUkssIFBPUlQyNDhfRk41LCBNU0VMMkNSX01TRUwxOV8wLAorCQlNU0VMMkNSX01TRUwxOF8wKSwgXAorCVBJTk1VWF9EQVRBKE1TSU9GMlJfVFNDS19NQVJLLCBQT1JUMjQ4X0ZONywgTVNFTDRDUl9NU0VMMTFfMSksCisJUElOTVVYX0RBVEEoUE9SVDI0OV9JUk9VVF9NQVJLLCBQT1JUMjQ5X0ZOMSksIFwKKwlQSU5NVVhfREFUQShNRkc0X0lOMV9NQVJLLCBQT1JUMjQ5X0ZOMiksIFwKKwlQSU5NVVhfREFUQShQT1JUMjQ5X0kyQ19TREEzX01BUkssIFBPUlQyNDlfRk41LCBNU0VMMkNSX01TRUwxOV8wLAorCQlNU0VMMkNSX01TRUwxOF8wKSwgXAorCVBJTk1VWF9EQVRBKE1TSU9GMlJfVFNZTkNfTUFSSywgUE9SVDI0OV9GTjcsIE1TRUw0Q1JfTVNFTDExXzEpLAorCVBJTk1VWF9EQVRBKFNESElDTEswX01BUkssIFBPUlQyNTBfRk4xKSwKKwlQSU5NVVhfREFUQShTREhJQ0QwX01BUkssIFBPUlQyNTFfRk4xKSwKKwlQSU5NVVhfREFUQShTREhJRDBfMF9NQVJLLCBQT1JUMjUyX0ZOMSksCisJUElOTVVYX0RBVEEoU0RISUQwXzFfTUFSSywgUE9SVDI1M19GTjEpLAorCVBJTk1VWF9EQVRBKFNESElEMF8yX01BUkssIFBPUlQyNTRfRk4xKSwKKwlQSU5NVVhfREFUQShTREhJRDBfM19NQVJLLCBQT1JUMjU1X0ZOMSksCisJUElOTVVYX0RBVEEoU0RISUNNRDBfTUFSSywgUE9SVDI1Nl9GTjEpLAorCVBJTk1VWF9EQVRBKFNESElXUDBfTUFSSywgUE9SVDI1N19GTjEpLAorCVBJTk1VWF9EQVRBKFNESElDTEsxX01BUkssIFBPUlQyNThfRk4xKSwKKwlQSU5NVVhfREFUQShTREhJRDFfMF9NQVJLLCBQT1JUMjU5X0ZOMSksIFwKKwlQSU5NVVhfREFUQShUU19TUFNZTkMyX01BUkssIFBPUlQyNTlfRk4zKSwKKwlQSU5NVVhfREFUQShTREhJRDFfMV9NQVJLLCBQT1JUMjYwX0ZOMSksIFwKKwlQSU5NVVhfREFUQShUU19TREFUMl9NQVJLLCBQT1JUMjYwX0ZOMyksCisJUElOTVVYX0RBVEEoU0RISUQxXzJfTUFSSywgUE9SVDI2MV9GTjEpLCBcCisJUElOTVVYX0RBVEEoVFNfU0RFTjJfTUFSSywgUE9SVDI2MV9GTjMpLAorCVBJTk1VWF9EQVRBKFNESElEMV8zX01BUkssIFBPUlQyNjJfRk4xKSwgXAorCVBJTk1VWF9EQVRBKFRTX1NDSzJfTUFSSywgUE9SVDI2Ml9GTjMpLAorCVBJTk1VWF9EQVRBKFNESElDTUQxX01BUkssIFBPUlQyNjNfRk4xKSwKKwlQSU5NVVhfREFUQShTREhJQ0xLMl9NQVJLLCBQT1JUMjY0X0ZOMSksCisJUElOTVVYX0RBVEEoU0RISUQyXzBfTUFSSywgUE9SVDI2NV9GTjEpLCBcCisJUElOTVVYX0RBVEEoVFNfU1BTWU5DNF9NQVJLLCBQT1JUMjY1X0ZOMyksCisJUElOTVVYX0RBVEEoU0RISUQyXzFfTUFSSywgUE9SVDI2Nl9GTjEpLCBcCisJUElOTVVYX0RBVEEoVFNfU0RBVDRfTUFSSywgUE9SVDI2Nl9GTjMpLAorCVBJTk1VWF9EQVRBKFNESElEMl8yX01BUkssIFBPUlQyNjdfRk4xKSwgXAorCVBJTk1VWF9EQVRBKFRTX1NERU40X01BUkssIFBPUlQyNjdfRk4zKSwKKwlQSU5NVVhfREFUQShTREhJRDJfM19NQVJLLCBQT1JUMjY4X0ZOMSksIFwKKwlQSU5NVVhfREFUQShUU19TQ0s0X01BUkssIFBPUlQyNjhfRk4zKSwKKwlQSU5NVVhfREFUQShTREhJQ01EMl9NQVJLLCBQT1JUMjY5X0ZOMSksCisJUElOTVVYX0RBVEEoTU1DQ0xLMF9NQVJLLCBQT1JUMjcwX0ZOMSwgTVNFTDRDUl9NU0VMMTVfMCksCisJUElOTVVYX0RBVEEoTU1DRDBfMF9NQVJLLCBQT1JUMjcxX0ZOMSwgTVNFTDRDUl9NU0VMMTVfMCksCisJUElOTVVYX0RBVEEoTU1DRDBfMV9NQVJLLCBQT1JUMjcyX0ZOMSwgTVNFTDRDUl9NU0VMMTVfMCksCisJUElOTVVYX0RBVEEoTU1DRDBfMl9NQVJLLCBQT1JUMjczX0ZOMSwgTVNFTDRDUl9NU0VMMTVfMCksCisJUElOTVVYX0RBVEEoTU1DRDBfM19NQVJLLCBQT1JUMjc0X0ZOMSwgTVNFTDRDUl9NU0VMMTVfMCksCisJUElOTVVYX0RBVEEoTU1DRDBfNF9NQVJLLCBQT1JUMjc1X0ZOMSwgTVNFTDRDUl9NU0VMMTVfMCksIFwKKwlQSU5NVVhfREFUQShUU19TUFNZTkM1X01BUkssIFBPUlQyNzVfRk4zKSwKKwlQSU5NVVhfREFUQShNTUNEMF81X01BUkssIFBPUlQyNzZfRk4xLCBNU0VMNENSX01TRUwxNV8wKSwgXAorCVBJTk1VWF9EQVRBKFRTX1NEQVQ1X01BUkssIFBPUlQyNzZfRk4zKSwKKwlQSU5NVVhfREFUQShNTUNEMF82X01BUkssIFBPUlQyNzdfRk4xLCBNU0VMNENSX01TRUwxNV8wKSwgXAorCVBJTk1VWF9EQVRBKFRTX1NERU41X01BUkssIFBPUlQyNzdfRk4zKSwKKwlQSU5NVVhfREFUQShNTUNEMF83X01BUkssIFBPUlQyNzhfRk4xLCBNU0VMNENSX01TRUwxNV8wKSwgXAorCVBJTk1VWF9EQVRBKFRTX1NDSzVfTUFSSywgUE9SVDI3OF9GTjMpLAorCVBJTk1VWF9EQVRBKE1NQ0NNRDBfTUFSSywgUE9SVDI3OV9GTjEsIE1TRUw0Q1JfTVNFTDE1XzApLAorCVBJTk1VWF9EQVRBKFJFU0VUT1VUU19fTUFSSywgUE9SVDI4MV9GTjEpLCBcCisJUElOTVVYX0RBVEEoRVhUQUwyT1VUX01BUkssIFBPUlQyODFfRk4yKSwKKwlQSU5NVVhfREFUQShNQ1BfV0FJVF9fTUNQX0ZSQl9NQVJLLCBQT1JUMjg4X0ZOMSksCisJUElOTVVYX0RBVEEoTUNQX0NLT19NQVJLLCBQT1JUMjg5X0ZOMSksIFwKKwlQSU5NVVhfREFUQShNTUNDTEsxX01BUkssIFBPUlQyODlfRk4yLCBNU0VMNENSX01TRUwxNV8xKSwKKwlQSU5NVVhfREFUQShNQ1BfRDE1X01DUF9OQUYxNV9NQVJLLCBQT1JUMjkwX0ZOMSksCisJUElOTVVYX0RBVEEoTUNQX0QxNF9NQ1BfTkFGMTRfTUFSSywgUE9SVDI5MV9GTjEpLAorCVBJTk1VWF9EQVRBKE1DUF9EMTNfTUNQX05BRjEzX01BUkssIFBPUlQyOTJfRk4xKSwKKwlQSU5NVVhfREFUQShNQ1BfRDEyX01DUF9OQUYxMl9NQVJLLCBQT1JUMjkzX0ZOMSksCisJUElOTVVYX0RBVEEoTUNQX0QxMV9NQ1BfTkFGMTFfTUFSSywgUE9SVDI5NF9GTjEpLAorCVBJTk1VWF9EQVRBKE1DUF9EMTBfTUNQX05BRjEwX01BUkssIFBPUlQyOTVfRk4xKSwKKwlQSU5NVVhfREFUQShNQ1BfRDlfTUNQX05BRjlfTUFSSywgUE9SVDI5Nl9GTjEpLAorCVBJTk1VWF9EQVRBKE1DUF9EOF9NQ1BfTkFGOF9NQVJLLCBQT1JUMjk3X0ZOMSksIFwKKwlQSU5NVVhfREFUQShNTUNDTUQxX01BUkssIFBPUlQyOTdfRk4yLCBNU0VMNENSX01TRUwxNV8xKSwKKwlQSU5NVVhfREFUQShNQ1BfRDdfTUNQX05BRjdfTUFSSywgUE9SVDI5OF9GTjEpLCBcCisJUElOTVVYX0RBVEEoTU1DRDFfN19NQVJLLCBQT1JUMjk4X0ZOMiwgTVNFTDRDUl9NU0VMMTVfMSksCisKKwlQSU5NVVhfREFUQShNQ1BfRDZfTUNQX05BRjZfTUFSSywgUE9SVDI5OV9GTjEpLCBcCisJUElOTVVYX0RBVEEoTU1DRDFfNl9NQVJLLCBQT1JUMjk5X0ZOMiwgTVNFTDRDUl9NU0VMMTVfMSksCisJUElOTVVYX0RBVEEoTUNQX0Q1X01DUF9OQUY1X01BUkssIFBPUlQzMDBfRk4xKSwgXAorCVBJTk1VWF9EQVRBKE1NQ0QxXzVfTUFSSywgUE9SVDMwMF9GTjIsIE1TRUw0Q1JfTVNFTDE1XzEpLAorCVBJTk1VWF9EQVRBKE1DUF9ENF9NQ1BfTkFGNF9NQVJLLCBQT1JUMzAxX0ZOMSksIFwKKwlQSU5NVVhfREFUQShNTUNEMV80X01BUkssIFBPUlQzMDFfRk4yLCBNU0VMNENSX01TRUwxNV8xKSwKKwlQSU5NVVhfREFUQShNQ1BfRDNfTUNQX05BRjNfTUFSSywgUE9SVDMwMl9GTjEpLCBcCisJUElOTVVYX0RBVEEoTU1DRDFfM19NQVJLLCBQT1JUMzAyX0ZOMiwgTVNFTDRDUl9NU0VMMTVfMSksCisJUElOTVVYX0RBVEEoTUNQX0QyX01DUF9OQUYyX01BUkssIFBPUlQzMDNfRk4xKSwgXAorCVBJTk1VWF9EQVRBKE1NQ0QxXzJfTUFSSywgUE9SVDMwM19GTjIsIE1TRUw0Q1JfTVNFTDE1XzEpLAorCVBJTk1VWF9EQVRBKE1DUF9EMV9NQ1BfTkFGMV9NQVJLLCBQT1JUMzA0X0ZOMSksIFwKKwlQSU5NVVhfREFUQShNTUNEMV8xX01BUkssIFBPUlQzMDRfRk4yLCBNU0VMNENSX01TRUwxNV8xKSwKKwlQSU5NVVhfREFUQShNQ1BfRDBfTUNQX05BRjBfTUFSSywgUE9SVDMwNV9GTjEpLCBcCisJUElOTVVYX0RBVEEoTU1DRDFfMF9NQVJLLCBQT1JUMzA1X0ZOMiwgTVNFTDRDUl9NU0VMMTVfMSksCisJUElOTVVYX0RBVEEoTUNQX05CUlNUT1VUX19NQVJLLCBQT1JUMzA2X0ZOMSksCisJUElOTVVYX0RBVEEoTUNQX1dFMF9fTUNQX0ZXRV9NQVJLLCBQT1JUMzA5X0ZOMSksIFwKKwlQSU5NVVhfREFUQShNQ1BfUkRXUl9NQ1BfRldFX01BUkssIFBPUlQzMDlfRk4yKSwKKworCS8qIE1TRUwyIHNwZWNpYWwgY2FzZXMgKi8KKwlQSU5NVVhfREFUQShUU0lGMl9UU19YWDFfTUFSSywgTVNFTDJDUl9NU0VMMTRfMCwgTVNFTDJDUl9NU0VMMTNfMCwKKwkJTVNFTDJDUl9NU0VMMTJfMCksCisJUElOTVVYX0RBVEEoVFNJRjJfVFNfWFgyX01BUkssIE1TRUwyQ1JfTVNFTDE0XzAsIE1TRUwyQ1JfTVNFTDEzXzAsCisJCU1TRUwyQ1JfTVNFTDEyXzEpLAorCVBJTk1VWF9EQVRBKFRTSUYyX1RTX1hYM19NQVJLLCBNU0VMMkNSX01TRUwxNF8wLCBNU0VMMkNSX01TRUwxM18xLAorCQlNU0VMMkNSX01TRUwxMl8wKSwKKwlQSU5NVVhfREFUQShUU0lGMl9UU19YWDRfTUFSSywgTVNFTDJDUl9NU0VMMTRfMCwgTVNFTDJDUl9NU0VMMTNfMSwKKwkJTVNFTDJDUl9NU0VMMTJfMSksCisJUElOTVVYX0RBVEEoVFNJRjJfVFNfWFg1X01BUkssIE1TRUwyQ1JfTVNFTDE0XzEsIE1TRUwyQ1JfTVNFTDEzXzAsCisJCU1TRUwyQ1JfTVNFTDEyXzApLAorCVBJTk1VWF9EQVRBKFRTSUYxX1RTX1hYMV9NQVJLLCBNU0VMMkNSX01TRUwxMV8wLCBNU0VMMkNSX01TRUwxMF8wLAorCQlNU0VMMkNSX01TRUw5XzApLAorCVBJTk1VWF9EQVRBKFRTSUYxX1RTX1hYMl9NQVJLLCBNU0VMMkNSX01TRUwxMV8wLCBNU0VMMkNSX01TRUwxMF8wLAorCQlNU0VMMkNSX01TRUw5XzEpLAorCVBJTk1VWF9EQVRBKFRTSUYxX1RTX1hYM19NQVJLLCBNU0VMMkNSX01TRUwxMV8wLCBNU0VMMkNSX01TRUwxMF8xLAorCQlNU0VMMkNSX01TRUw5XzApLAorCVBJTk1VWF9EQVRBKFRTSUYxX1RTX1hYNF9NQVJLLCBNU0VMMkNSX01TRUwxMV8wLCBNU0VMMkNSX01TRUwxMF8xLAorCQlNU0VMMkNSX01TRUw5XzEpLAorCVBJTk1VWF9EQVRBKFRTSUYxX1RTX1hYNV9NQVJLLCBNU0VMMkNSX01TRUwxMV8xLCBNU0VMMkNSX01TRUwxMF8wLAorCQlNU0VMMkNSX01TRUw5XzApLAorCVBJTk1VWF9EQVRBKFRTSUYwX1RTX1hYMV9NQVJLLCBNU0VMMkNSX01TRUw4XzAsIE1TRUwyQ1JfTVNFTDdfMCwKKwkJTVNFTDJDUl9NU0VMNl8wKSwKKwlQSU5NVVhfREFUQShUU0lGMF9UU19YWDJfTUFSSywgTVNFTDJDUl9NU0VMOF8wLCBNU0VMMkNSX01TRUw3XzAsCisJCU1TRUwyQ1JfTVNFTDZfMSksCisJUElOTVVYX0RBVEEoVFNJRjBfVFNfWFgzX01BUkssIE1TRUwyQ1JfTVNFTDhfMCwgTVNFTDJDUl9NU0VMN18xLAorCQlNU0VMMkNSX01TRUw2XzApLAorCVBJTk1VWF9EQVRBKFRTSUYwX1RTX1hYNF9NQVJLLCBNU0VMMkNSX01TRUw4XzAsIE1TRUwyQ1JfTVNFTDdfMSwKKwkJTVNFTDJDUl9NU0VMNl8xKSwKKwlQSU5NVVhfREFUQShUU0lGMF9UU19YWDVfTUFSSywgTVNFTDJDUl9NU0VMOF8xLCBNU0VMMkNSX01TRUw3XzAsCisJCU1TRUwyQ1JfTVNFTDZfMCksCisJUElOTVVYX0RBVEEoTVNUMV9UU19YWDFfTUFSSywgTVNFTDJDUl9NU0VMNV8wLCBNU0VMMkNSX01TRUw0XzAsCisJCU1TRUwyQ1JfTVNFTDNfMCksCisJUElOTVVYX0RBVEEoTVNUMV9UU19YWDJfTUFSSywgTVNFTDJDUl9NU0VMNV8wLCBNU0VMMkNSX01TRUw0XzAsCisJCU1TRUwyQ1JfTVNFTDNfMSksCisJUElOTVVYX0RBVEEoTVNUMV9UU19YWDNfTUFSSywgTVNFTDJDUl9NU0VMNV8wLCBNU0VMMkNSX01TRUw0XzEsCisJCU1TRUwyQ1JfTVNFTDNfMCksCisJUElOTVVYX0RBVEEoTVNUMV9UU19YWDRfTUFSSywgTVNFTDJDUl9NU0VMNV8wLCBNU0VMMkNSX01TRUw0XzEsCisJCU1TRUwyQ1JfTVNFTDNfMSksCisJUElOTVVYX0RBVEEoTVNUMV9UU19YWDVfTUFSSywgTVNFTDJDUl9NU0VMNV8xLCBNU0VMMkNSX01TRUw0XzAsCisJCU1TRUwyQ1JfTVNFTDNfMCksCisJUElOTVVYX0RBVEEoTVNUMF9UU19YWDFfTUFSSywgTVNFTDJDUl9NU0VMMl8wLCBNU0VMMkNSX01TRUwxXzAsCisJCU1TRUwyQ1JfTVNFTDBfMCksCisJUElOTVVYX0RBVEEoTVNUMF9UU19YWDJfTUFSSywgTVNFTDJDUl9NU0VMMl8wLCBNU0VMMkNSX01TRUwxXzAsCisJCU1TRUwyQ1JfTVNFTDBfMSksCisJUElOTVVYX0RBVEEoTVNUMF9UU19YWDNfTUFSSywgTVNFTDJDUl9NU0VMMl8wLCBNU0VMMkNSX01TRUwxXzEsCisJCU1TRUwyQ1JfTVNFTDBfMCksCisJUElOTVVYX0RBVEEoTVNUMF9UU19YWDRfTUFSSywgTVNFTDJDUl9NU0VMMl8wLCBNU0VMMkNSX01TRUwxXzEsCisJCU1TRUwyQ1JfTVNFTDBfMSksCisJUElOTVVYX0RBVEEoTVNUMF9UU19YWDVfTUFSSywgTVNFTDJDUl9NU0VMMl8xLCBNU0VMMkNSX01TRUwxXzAsCisJCU1TRUwyQ1JfTVNFTDBfMCksCisKKwkvKiBNU0VMMyBzcGVjaWFsIGNhc2VzICovCisJUElOTVVYX0RBVEEoU0RISTBfVkNDUV9NQzBfT05fTUFSSywgTVNFTDNDUl9NU0VMMjhfMSksCisJUElOTVVYX0RBVEEoU0RISTBfVkNDUV9NQzBfT0ZGX01BUkssIE1TRUwzQ1JfTVNFTDI4XzApLAorCVBJTk1VWF9EQVRBKERFQlVHX01PTl9WSU9fTUFSSywgTVNFTDNDUl9NU0VMMTVfMCksCisJUElOTVVYX0RBVEEoREVCVUdfTU9OX0xDRERfTUFSSywgTVNFTDNDUl9NU0VMMTVfMSksCisJUElOTVVYX0RBVEEoTENEQ19MQ0RDMF9NQVJLLCBNU0VMM0NSX01TRUw2XzApLAorCVBJTk1VWF9EQVRBKExDRENfTENEQzFfTUFSSywgTVNFTDNDUl9NU0VMNl8xKSwKKworCS8qIE1TRUw0IHNwZWNpYWwgY2FzZXMgKi8KKwlQSU5NVVhfREFUQShJUlE5X01FTV9JTlRfTUFSSywgTVNFTDRDUl9NU0VMMjlfMCksCisJUElOTVVYX0RBVEEoSVJROV9NQ1BfSU5UX01BUkssIE1TRUw0Q1JfTVNFTDI5XzEpLAorCVBJTk1VWF9EQVRBKEExMV9NQVJLLCBNU0VMNENSX01TRUwxM18wLCBNU0VMNENSX01TRUwxMl8wKSwKKwlQSU5NVVhfREFUQShLRVlPVVQ4X01BUkssIE1TRUw0Q1JfTVNFTDEzXzAsIE1TRUw0Q1JfTVNFTDEyXzEpLAorCVBJTk1VWF9EQVRBKFRQVTRUTzNfTUFSSywgTVNFTDRDUl9NU0VMMTNfMSwgTVNFTDRDUl9NU0VMMTJfMCksCisJUElOTVVYX0RBVEEoUkVTRVRBX05fUFVfT05fTUFSSywgTVNFTDRDUl9NU0VMNF8wKSwKKwlQSU5NVVhfREFUQShSRVNFVEFfTl9QVV9PRkZfTUFSSywgTVNFTDRDUl9NU0VMNF8xKSwKKwlQSU5NVVhfREFUQShFREJHUkVRX1BEX01BUkssIE1TRUw0Q1JfTVNFTDFfMCksCisJUElOTVVYX0RBVEEoRURCR1JFUV9QVV9NQVJLLCBNU0VMNENSX01TRUwxXzEpLAorCisJLyogRnVuY3Rpb25zIHdpdGggcHVsbC11cHMgKi8KKwlQSU5NVVhfREFUQShLRVlJTjBfUFVfTUFSSywgUE9SVDY2X0ZOMiwgUE9SVDY2X0lOX1BVKSwKKwlQSU5NVVhfREFUQShLRVlJTjFfUFVfTUFSSywgUE9SVDY3X0ZOMiwgUE9SVDY3X0lOX1BVKSwKKwlQSU5NVVhfREFUQShLRVlJTjJfUFVfTUFSSywgUE9SVDY4X0ZOMiwgUE9SVDY4X0lOX1BVKSwKKwlQSU5NVVhfREFUQShLRVlJTjNfUFVfTUFSSywgUE9SVDY5X0ZOMiwgUE9SVDY5X0lOX1BVKSwKKwlQSU5NVVhfREFUQShLRVlJTjRfUFVfTUFSSywgUE9SVDcwX0ZOMiwgUE9SVDcwX0lOX1BVKSwKKwlQSU5NVVhfREFUQShLRVlJTjVfUFVfTUFSSywgUE9SVDcxX0ZOMiwgUE9SVDcxX0lOX1BVKSwKKwlQSU5NVVhfREFUQShLRVlJTjZfUFVfTUFSSywgUE9SVDcyX0ZOMiwgUE9SVDcyX0lOX1BVKSwKKwlQSU5NVVhfREFUQShLRVlJTjdfUFVfTUFSSywgUE9SVDczX0ZOMiwgUE9SVDczX0lOX1BVKSwKKworCVBJTk1VWF9EQVRBKFNESElEMV8wX1BVX01BUkssIFBPUlQyNTlfSU5fUFUsIFBPUlQyNTlfRk4xKSwKKwlQSU5NVVhfREFUQShTREhJRDFfMV9QVV9NQVJLLCBQT1JUMjYwX0lOX1BVLCBQT1JUMjYwX0ZOMSksCisJUElOTVVYX0RBVEEoU0RISUQxXzJfUFVfTUFSSywgUE9SVDI2MV9JTl9QVSwgUE9SVDI2MV9GTjEpLAorCVBJTk1VWF9EQVRBKFNESElEMV8zX1BVX01BUkssIFBPUlQyNjJfSU5fUFUsIFBPUlQyNjJfRk4xKSwKKwlQSU5NVVhfREFUQShTREhJQ01EMV9QVV9NQVJLLCBQT1JUMjYzX0lOX1BVLCBQT1JUMjYzX0ZOMSksCisKKwlQSU5NVVhfREFUQShNTUNDTUQwX1BVX01BUkssIFBPUlQyNzlfRk4xLCBQT1JUMjc5X0lOX1BVLAorCQlNU0VMNENSX01TRUwxNV8wKSwKKwlQSU5NVVhfREFUQShNTUNDTUQxX1BVX01BUkssIFBPUlQyOTdfRk4yLCBQT1JUMjc5X0lOX1BVLAorCQlNU0VMNENSX01TRUwxNV8xKSwKKwlQSU5NVVhfREFUQShGU0lBQ0tfUFVfTUFSSywgUE9SVDQ5X0ZOMSwgUE9SVDQ5X0lOX1BVKSwKKwlQSU5NVVhfREFUQShGU0lBSUxSX1BVX01BUkssIFBPUlQ1MF9GTjUsIFBPUlQ1MF9JTl9QVSksCisJUElOTVVYX0RBVEEoRlNJQUlCVF9QVV9NQVJLLCBQT1JUNTFfRk41LCBQT1JUNTFfSU5fUFUpLAorCVBJTk1VWF9EQVRBKEZTSUFJU0xEX1BVX01BUkssIFBPUlQ1NV9GTjEsIFBPUlQ1NV9JTl9QVSksCit9OworCisjZGVmaW5lIF9HUElPX1BPUlQocGZ4LCBzZngpIFBJTk1VWF9HUElPKEdQSU9fUE9SVCMjcGZ4LCBQT1JUIyNwZngjI19EQVRBKQorI2RlZmluZSBHUElPX1BPUlRfMzEwKCkgXzMxMChfR1BJT19QT1JULCAsIHVudXNlZCkKKyNkZWZpbmUgR1BJT19GTihzdHIpIFBJTk1VWF9HUElPKEdQSU9fRk5fIyNzdHIsIHN0ciMjX01BUkspCisKK3N0YXRpYyBzdHJ1Y3QgcGlubXV4X2dwaW8gcGlubXV4X2dwaW9zW10gPSB7CisJR1BJT19QT1JUXzMxMCgpLAorCisJLyogVGFibGUgMjUtMSAoRnVuY3Rpb25zIDAtNykgKi8KKwlHUElPX0ZOKFZCVVNfMCksCisJR1BJT19GTihHUEkwKSwKKwlHUElPX0ZOKEdQSTEpLAorCUdQSU9fRk4oR1BJMiksCisJR1BJT19GTihHUEkzKSwKKwlHUElPX0ZOKEdQSTQpLAorCUdQSU9fRk4oR1BJNSksCisJR1BJT19GTihHUEk2KSwKKwlHUElPX0ZOKEdQSTcpLAorCUdQSU9fRk4oU0NJRkE3X1JYRCksCisJR1BJT19GTihTQ0lGQTdfQ1RTXyksCisJR1BJT19GTihHUE83KSwgXAorCUdQSU9fRk4oTUZHMF9PVVQyKSwKKwlHUElPX0ZOKEdQTzYpLCBcCisJR1BJT19GTihNRkcxX09VVDIpLAorCUdQSU9fRk4oR1BPNSksIFwKKwlHUElPX0ZOKFNDSUZBMF9TQ0spLCBcCisJR1BJT19GTihGU0lDT1NMRFQzKSwgXAorCUdQSU9fRk4oUE9SVDE2X1ZJT19DS09SKSwKKwlHUElPX0ZOKFNDSUZBMF9UWEQpLAorCUdQSU9fRk4oU0NJRkE3X1RYRCksCisJR1BJT19GTihTQ0lGQTdfUlRTXyksIFwKKwlHUElPX0ZOKFBPUlQxOV9WSU9fQ0tPMiksCisJR1BJT19GTihHUE8wKSwKKwlHUElPX0ZOKEdQTzEpLAorCUdQSU9fRk4oR1BPMiksIFwKKwlHUElPX0ZOKFNUQVRVUzApLAorCUdQSU9fRk4oR1BPMyksIFwKKwlHUElPX0ZOKFNUQVRVUzEpLAorCUdQSU9fRk4oR1BPNCksIFwKKwlHUElPX0ZOKFNUQVRVUzIpLAorCUdQSU9fRk4oVklOVCksCisJR1BJT19GTihUQ0tPTiksCisJR1BJT19GTihYRFZGUzEpLCBcCisJR1BJT19GTihQT1JUMjdfSTJDX1NDTDIpLCBcCisJR1BJT19GTihQT1JUMjdfSTJDX1NDTDMpLCBcCisJR1BJT19GTihNRkcwX09VVDEpLCBcCisJR1BJT19GTihQT1JUMjdfSVJPVVQpLAorCUdQSU9fRk4oWERWRlMyKSwgXAorCUdQSU9fRk4oUE9SVDI4X0kyQ19TREEyKSwgXAorCUdQSU9fRk4oUE9SVDI4X0kyQ19TREEzKSwgXAorCUdQSU9fRk4oUE9SVDI4X1RQVTFUTzEpLAorCUdQSU9fRk4oU0lNX1JTVCksIFwKKwlHUElPX0ZOKFBPUlQyOV9UUFUxVE8xKSwKKwlHUElPX0ZOKFNJTV9DTEspLCBcCisJR1BJT19GTihQT1JUMzBfVklPX0NLT1IpLAorCUdQSU9fRk4oU0lNX0QpLCBcCisJR1BJT19GTihQT1JUMzFfSVJPVVQpLAorCUdQSU9fRk4oU0NJRkE0X1RYRCksCisJR1BJT19GTihTQ0lGQTRfUlhEKSwgXAorCUdQSU9fRk4oWFdVUCksCisJR1BJT19GTihTQ0lGQTRfUlRTXyksCisJR1BJT19GTihTQ0lGQTRfQ1RTXyksCisJR1BJT19GTihGU0lCT0JUKSwgXAorCUdQSU9fRk4oRlNJQklCVCksCisJR1BJT19GTihGU0lCT0xSKSwgXAorCUdQSU9fRk4oRlNJQklMUiksCisJR1BJT19GTihGU0lCT1NMRCksCisJR1BJT19GTihGU0lCSVNMRCksCisJR1BJT19GTihWQUNLKSwKKwlHUElPX0ZOKFhUQUwxTCksCisJR1BJT19GTihTQ0lGQTBfUlRTXyksIFwKKwlHUElPX0ZOKEZTSUNPU0xEVDIpLAorCUdQSU9fRk4oU0NJRkEwX1JYRCksCisJR1BJT19GTihTQ0lGQTBfQ1RTXyksIFwKKwlHUElPX0ZOKEZTSUNPU0xEVDEpLAorCUdQSU9fRk4oRlNJQ09CVCksIFwKKwlHUElPX0ZOKEZTSUNJQlQpLCBcCisJR1BJT19GTihGU0lET0JUKSwgXAorCUdQSU9fRk4oRlNJRElCVCksCisJR1BJT19GTihGU0lDT0xSKSwgXAorCUdQSU9fRk4oRlNJQ0lMUiksIFwKKwlHUElPX0ZOKEZTSURPTFIpLCBcCisJR1BJT19GTihGU0lESUxSKSwKKwlHUElPX0ZOKEZTSUNPU0xEKSwgXAorCUdQSU9fRk4oUE9SVDQ3X0ZTSUNTUERJRiksCisJR1BJT19GTihGU0lDSVNMRCksIFwKKwlHUElPX0ZOKEZTSURJU0xEKSwKKwlHUElPX0ZOKEZTSUFDSyksIFwKKwlHUElPX0ZOKFBPUlQ0OV9JUkRBX09VVCksIFwKKwlHUElPX0ZOKFBPUlQ0OV9JUk9VVCksIFwKKwlHUElPX0ZOKEZTSUFPTUMpLAorCUdQSU9fRk4oRlNJQU9MUiksIFwKKwlHUElPX0ZOKEJCSUYyX1RTWU5DMiksIFwKKwlHUElPX0ZOKFRQVTJUTzIpLCBcCisJR1BJT19GTihGU0lBSUxSKSwKKworCUdQSU9fRk4oRlNJQU9CVCksIFwKKwlHUElPX0ZOKEJCSUYyX1RTQ0syKSwgXAorCUdQSU9fRk4oVFBVMlRPMyksIFwKKwlHUElPX0ZOKEZTSUFJQlQpLAorCUdQSU9fRk4oRlNJQU9TTEQpLCBcCisJR1BJT19GTihCQklGMl9UWEQyKSwKKwlHUElPX0ZOKEZTSUFTUERJRiksIFwKKwlHUElPX0ZOKFBPUlQ1M19JUkRBX0lOKSwgXAorCUdQSU9fRk4oVFBVM1RPMyksIFwKKwlHUElPX0ZOKEZTSUJTUERJRiksIFwKKwlHUElPX0ZOKFBPUlQ1M19GU0lDU1BESUYpLAorCUdQSU9fRk4oRlNJQkNLKSwgXAorCUdQSU9fRk4oUE9SVDU0X0lSREFfRklSU0VMKSwgXAorCUdQSU9fRk4oVFBVM1RPMiksIFwKKwlHUElPX0ZOKEZTSUJPTUMpLCBcCisJR1BJT19GTihGU0lDQ0spLCBcCisJR1BJT19GTihGU0lDT01DKSwKKwlHUElPX0ZOKEZTSUFJU0xEKSwgXAorCUdQSU9fRk4oVFBVMFRPMCksCisJR1BJT19GTihBMCksIFwKKwlHUElPX0ZOKEJTXyksCisJR1BJT19GTihBMTIpLCBcCisJR1BJT19GTihQT1JUNThfS0VZT1VUNyksIFwKKwlHUElPX0ZOKFRQVTRUTzIpLAorCUdQSU9fRk4oQTEzKSwgXAorCUdQSU9fRk4oUE9SVDU5X0tFWU9VVDYpLCBcCisJR1BJT19GTihUUFUwVE8xKSwKKwlHUElPX0ZOKEExNCksIFwKKwlHUElPX0ZOKEtFWU9VVDUpLAorCUdQSU9fRk4oQTE1KSwgXAorCUdQSU9fRk4oS0VZT1VUNCksCisJR1BJT19GTihBMTYpLCBcCisJR1BJT19GTihLRVlPVVQzKSwgXAorCUdQSU9fRk4oTVNJT0YwX1NTMSksCisJR1BJT19GTihBMTcpLCBcCisJR1BJT19GTihLRVlPVVQyKSwgXAorCUdQSU9fRk4oTVNJT0YwX1RTWU5DKSwKKwlHUElPX0ZOKEExOCksIFwKKwlHUElPX0ZOKEtFWU9VVDEpLCBcCisJR1BJT19GTihNU0lPRjBfVFNDSyksCisJR1BJT19GTihBMTkpLCBcCisJR1BJT19GTihLRVlPVVQwKSwgXAorCUdQSU9fRk4oTVNJT0YwX1RYRCksCisJR1BJT19GTihBMjApLCBcCisJR1BJT19GTihLRVlJTjApLCBcCisJR1BJT19GTihNU0lPRjBfUlNDSyksCisJR1BJT19GTihBMjEpLCBcCisJR1BJT19GTihLRVlJTjEpLCBcCisJR1BJT19GTihNU0lPRjBfUlNZTkMpLAorCUdQSU9fRk4oQTIyKSwgXAorCUdQSU9fRk4oS0VZSU4yKSwgXAorCUdQSU9fRk4oTVNJT0YwX01DSzApLAorCUdQSU9fRk4oQTIzKSwgXAorCUdQSU9fRk4oS0VZSU4zKSwgXAorCUdQSU9fRk4oTVNJT0YwX01DSzEpLAorCUdQSU9fRk4oQTI0KSwgXAorCUdQSU9fRk4oS0VZSU40KSwgXAorCUdQSU9fRk4oTVNJT0YwX1JYRCksCisJR1BJT19GTihBMjUpLCBcCisJR1BJT19GTihLRVlJTjUpLCBcCisJR1BJT19GTihNU0lPRjBfU1MyKSwKKwlHUElPX0ZOKEEyNiksIFwKKwlHUElPX0ZOKEtFWUlONiksCisJR1BJT19GTihLRVlJTjcpLAorCUdQSU9fRk4oRDBfTkFGMCksCisJR1BJT19GTihEMV9OQUYxKSwKKwlHUElPX0ZOKEQyX05BRjIpLAorCUdQSU9fRk4oRDNfTkFGMyksCisJR1BJT19GTihENF9OQUY0KSwKKwlHUElPX0ZOKEQ1X05BRjUpLAorCUdQSU9fRk4oRDZfTkFGNiksCisJR1BJT19GTihEN19OQUY3KSwKKwlHUElPX0ZOKEQ4X05BRjgpLAorCUdQSU9fRk4oRDlfTkFGOSksCisJR1BJT19GTihEMTBfTkFGMTApLAorCUdQSU9fRk4oRDExX05BRjExKSwKKwlHUElPX0ZOKEQxMl9OQUYxMiksCisJR1BJT19GTihEMTNfTkFGMTMpLAorCUdQSU9fRk4oRDE0X05BRjE0KSwKKwlHUElPX0ZOKEQxNV9OQUYxNSksCisJR1BJT19GTihDUzRfKSwKKwlHUElPX0ZOKENTNUFfKSwgXAorCUdQSU9fRk4oUE9SVDkxX1JEV1IpLAorCUdQSU9fRk4oQ1M1Ql8pLCBcCisJR1BJT19GTihGQ0UxXyksCisJR1BJT19GTihDUzZCXyksIFwKKwlHUElPX0ZOKERBQ0swKSwKKwlHUElPX0ZOKEZDRTBfKSwgXAorCUdQSU9fRk4oQ1M2QV8pLAorCUdQSU9fRk4oV0FJVF8pLCBcCisJR1BJT19GTihEUkVRMCksCisJR1BJT19GTihSRF9fRlNDKSwKKwlHUElPX0ZOKFdFMF9fRldFKSwgXAorCUdQSU9fRk4oUkRXUl9GV0UpLAorCUdQSU9fRk4oV0UxXyksCisJR1BJT19GTihGUkIpLAorCUdQSU9fRk4oQ0tPKSwKKwlHUElPX0ZOKE5CUlNUT1VUXyksCisJR1BJT19GTihOQlJTVF8pLAorCUdQSU9fRk4oQkJJRjJfVFhEKSwKKwlHUElPX0ZOKEJCSUYyX1JYRCksCisJR1BJT19GTihCQklGMl9TWU5DKSwKKwlHUElPX0ZOKEJCSUYyX1NDSyksCisJR1BJT19GTihTQ0lGQTNfQ1RTXyksIFwKKwlHUElPX0ZOKE1GRzNfSU4yKSwKKwlHUElPX0ZOKFNDSUZBM19SWEQpLCBcCisJR1BJT19GTihNRkczX0lOMSksCisJR1BJT19GTihCQklGMV9TUzIpLCBcCisJR1BJT19GTihTQ0lGQTNfUlRTXyksIFwKKwlHUElPX0ZOKE1GRzNfT1VUMSksCisJR1BJT19GTihTQ0lGQTNfVFhEKSwKKwlHUElPX0ZOKEhTSV9SWF9EQVRBKSwgXAorCUdQSU9fRk4oQkJJRjFfUlhEKSwKKwlHUElPX0ZOKEhTSV9UWF9XQUtFKSwgXAorCUdQSU9fRk4oQkJJRjFfVFNDSyksCisJR1BJT19GTihIU0lfVFhfREFUQSksIFwKKwlHUElPX0ZOKEJCSUYxX1RTWU5DKSwKKwlHUElPX0ZOKEhTSV9UWF9SRUFEWSksIFwKKwlHUElPX0ZOKEJCSUYxX1RYRCksCisJR1BJT19GTihIU0lfUlhfUkVBRFkpLCBcCisJR1BJT19GTihCQklGMV9SU0NLKSwgXAorCUdQSU9fRk4oUE9SVDExNV9JMkNfU0NMMiksIFwKKwlHUElPX0ZOKFBPUlQxMTVfSTJDX1NDTDMpLAorCUdQSU9fRk4oSFNJX1JYX1dBS0UpLCBcCisJR1BJT19GTihCQklGMV9SU1lOQyksIFwKKwlHUElPX0ZOKFBPUlQxMTZfSTJDX1NEQTIpLCBcCisJR1BJT19GTihQT1JUMTE2X0kyQ19TREEzKSwKKwlHUElPX0ZOKEhTSV9SWF9GTEFHKSwgXAorCUdQSU9fRk4oQkJJRjFfU1MxKSwgXAorCUdQSU9fRk4oQkJJRjFfRkxPVyksCisJR1BJT19GTihIU0lfVFhfRkxBRyksCisJR1BJT19GTihWSU9fVkQpLCBcCisJR1BJT19GTihQT1JUMTI4X0xDRDJWU1lOKSwgXAorCUdQSU9fRk4oVklPMl9WRCksIFwKKwlHUElPX0ZOKExDRDJEMCksCisKKwlHUElPX0ZOKFZJT19IRCksIFwKKwlHUElPX0ZOKFBPUlQxMjlfTENEMkhTWU4pLCBcCisJR1BJT19GTihQT1JUMTI5X0xDRDJDU18pLCBcCisJR1BJT19GTihWSU8yX0hEKSwgXAorCUdQSU9fRk4oTENEMkQxKSwKKwlHUElPX0ZOKFZJT19EMCksIFwKKwlHUElPX0ZOKFBPUlQxMzBfTVNJT0YyX1JYRCksIFwKKwlHUElPX0ZOKExDRDJEMTApLAorCUdQSU9fRk4oVklPX0QxKSwgXAorCUdQSU9fRk4oUE9SVDEzMV9LRVlPVVQ2KSwgXAorCUdQSU9fRk4oUE9SVDEzMV9NU0lPRjJfU1MxKSwgXAorCUdQSU9fRk4oUE9SVDEzMV9LRVlPVVQxMSksIFwKKwlHUElPX0ZOKExDRDJEMTEpLAorCUdQSU9fRk4oVklPX0QyKSwgXAorCUdQSU9fRk4oUE9SVDEzMl9LRVlPVVQ3KSwgXAorCUdQSU9fRk4oUE9SVDEzMl9NU0lPRjJfU1MyKSwgXAorCUdQSU9fRk4oUE9SVDEzMl9LRVlPVVQxMCksIFwKKwlHUElPX0ZOKExDRDJEMTIpLAorCUdQSU9fRk4oVklPX0QzKSwgXAorCUdQSU9fRk4oTVNJT0YyX1RTWU5DKSwgXAorCUdQSU9fRk4oTENEMkQxMyksCisJR1BJT19GTihWSU9fRDQpLCBcCisJR1BJT19GTihNU0lPRjJfVFhEKSwgXAorCUdQSU9fRk4oTENEMkQxNCksCisJR1BJT19GTihWSU9fRDUpLCBcCisJR1BJT19GTihNU0lPRjJfVFNDSyksIFwKKwlHUElPX0ZOKExDRDJEMTUpLAorCUdQSU9fRk4oVklPX0Q2KSwgXAorCUdQSU9fRk4oUE9SVDEzNl9LRVlPVVQ4KSwgXAorCUdQSU9fRk4oTENEMkQxNiksCisJR1BJT19GTihWSU9fRDcpLCBcCisJR1BJT19GTihQT1JUMTM3X0tFWU9VVDkpLCBcCisJR1BJT19GTihMQ0QyRDE3KSwKKwlHUElPX0ZOKFZJT19EOCksIFwKKwlHUElPX0ZOKFBPUlQxMzhfS0VZT1VUOCksIFwKKwlHUElPX0ZOKFZJTzJfRDApLCBcCisJR1BJT19GTihMQ0QyRDYpLAorCUdQSU9fRk4oVklPX0Q5KSwgXAorCUdQSU9fRk4oUE9SVDEzOV9LRVlPVVQ5KSwgXAorCUdQSU9fRk4oVklPMl9EMSksIFwKKwlHUElPX0ZOKExDRDJENyksCisJR1BJT19GTihWSU9fRDEwKSwgXAorCUdQSU9fRk4oVFBVMFRPMiksIFwKKwlHUElPX0ZOKFZJTzJfRDIpLCBcCisJR1BJT19GTihMQ0QyRDgpLAorCUdQSU9fRk4oVklPX0QxMSksIFwKKwlHUElPX0ZOKFRQVTBUTzMpLCBcCisJR1BJT19GTihWSU8yX0QzKSwgXAorCUdQSU9fRk4oTENEMkQ5KSwKKwlHUElPX0ZOKFZJT19EMTIpLCBcCisJR1BJT19GTihQT1JUMTQyX0tFWU9VVDEwKSwgXAorCUdQSU9fRk4oVklPMl9ENCksIFwKKwlHUElPX0ZOKExDRDJEMiksCisJR1BJT19GTihWSU9fRDEzKSwgXAorCUdQSU9fRk4oUE9SVDE0M19LRVlPVVQxMSksIFwKKwlHUElPX0ZOKFBPUlQxNDNfS0VZT1VUNiksIFwKKwlHUElPX0ZOKFZJTzJfRDUpLCBcCisJR1BJT19GTihMQ0QyRDMpLAorCUdQSU9fRk4oVklPX0QxNCksIFwKKwlHUElPX0ZOKFBPUlQxNDRfS0VZT1VUNyksIFwKKwlHUElPX0ZOKFZJTzJfRDYpLCBcCisJR1BJT19GTihMQ0QyRDQpLAorCUdQSU9fRk4oVklPX0QxNSksIFwKKwlHUElPX0ZOKFRQVTFUTzMpLCBcCisJR1BJT19GTihQT1JUMTQ1X0xDRDJESVNQKSwgXAorCUdQSU9fRk4oUE9SVDE0NV9MQ0QyUlMpLCBcCisJR1BJT19GTihWSU8yX0Q3KSwgXAorCUdQSU9fRk4oTENEMkQ1KSwKKwlHUElPX0ZOKFZJT19DTEspLCBcCisJR1BJT19GTihMQ0QyRENLKSwgXAorCUdQSU9fRk4oUE9SVDE0Nl9MQ0QyV1JfKSwgXAorCUdQSU9fRk4oVklPMl9DTEspLCBcCisJR1BJT19GTihMQ0QyRDE4KSwKKwlHUElPX0ZOKFZJT19GSUVMRCksIFwKKwlHUElPX0ZOKExDRDJSRF8pLCBcCisJR1BJT19GTihWSU8yX0ZJRUxEKSwgXAorCUdQSU9fRk4oTENEMkQxOSksCisJR1BJT19GTihWSU9fQ0tPKSwKKwlHUElPX0ZOKEEyNyksIFwKKwlHUElPX0ZOKFBPUlQxNDlfUkRXUiksIFwKKwlHUElPX0ZOKE1GRzBfSU4xKSwgXAorCUdQSU9fRk4oUE9SVDE0OV9LRVlPVVQ5KSwKKwlHUElPX0ZOKE1GRzBfSU4yKSwKKwlHUElPX0ZOKFRTX1NQU1lOQzMpLCBcCisJR1BJT19GTihNU0lPRjJfUlNDSyksCisJR1BJT19GTihUU19TREFUMyksIFwKKwlHUElPX0ZOKE1TSU9GMl9SU1lOQyksCisJR1BJT19GTihUUFUxVE8yKSwgXAorCUdQSU9fRk4oVFNfU0RFTjMpLCBcCisJR1BJT19GTihQT1JUMTUzX01TSU9GMl9TUzEpLAorCUdQSU9fRk4oU0NJRkEyX1RYRDEpLCBcCisJR1BJT19GTihNU0lPRjJfTUNLMCksCisJR1BJT19GTihTQ0lGQTJfUlhEMSksIFwKKwlHUElPX0ZOKE1TSU9GMl9NQ0sxKSwKKwlHUElPX0ZOKFNDSUZBMl9SVFMxXyksIFwKKwlHUElPX0ZOKFBPUlQxNTZfTVNJT0YyX1NTMiksCisJR1BJT19GTihTQ0lGQTJfQ1RTMV8pLCBcCisJR1BJT19GTihQT1JUMTU3X01TSU9GMl9SWEQpLAorCUdQSU9fRk4oRElOVF8pLCBcCisJR1BJT19GTihTQ0lGQTJfU0NLMSksIFwKKwlHUElPX0ZOKFRTX1NDSzMpLAorCUdQSU9fRk4oUE9SVDE1OV9TQ0lGQl9TQ0spLCBcCisJR1BJT19GTihQT1JUMTU5X1NDSUZBNV9TQ0spLCBcCisJR1BJT19GTihOTUkpLAorCUdQSU9fRk4oUE9SVDE2MF9TQ0lGQl9UWEQpLCBcCisJR1BJT19GTihQT1JUMTYwX1NDSUZBNV9UWEQpLAorCUdQSU9fRk4oUE9SVDE2MV9TQ0lGQl9DVFNfKSwgXAorCUdQSU9fRk4oUE9SVDE2MV9TQ0lGQTVfQ1RTXyksCisJR1BJT19GTihQT1JUMTYyX1NDSUZCX1JYRCksIFwKKwlHUElPX0ZOKFBPUlQxNjJfU0NJRkE1X1JYRCksCisJR1BJT19GTihQT1JUMTYzX1NDSUZCX1JUU18pLCBcCisJR1BJT19GTihQT1JUMTYzX1NDSUZBNV9SVFNfKSwgXAorCUdQSU9fRk4oVFBVM1RPMCksCisJR1BJT19GTihMQ0REMCksCisJR1BJT19GTihMQ0REMSksIFwKKwlHUElPX0ZOKFBPUlQxOTNfU0NJRkE1X0NUU18pLCBcCisJR1BJT19GTihCQklGMl9UU1lOQzEpLAorCUdQSU9fRk4oTENERDIpLCBcCisJR1BJT19GTihQT1JUMTk0X1NDSUZBNV9SVFNfKSwgXAorCUdQSU9fRk4oQkJJRjJfVFNDSzEpLAorCUdQSU9fRk4oTENERDMpLCBcCisJR1BJT19GTihQT1JUMTk1X1NDSUZBNV9SWEQpLCBcCisJR1BJT19GTihCQklGMl9UWEQxKSwKKwlHUElPX0ZOKExDREQ0KSwgXAorCUdQSU9fRk4oUE9SVDE5Nl9TQ0lGQTVfVFhEKSwKKwlHUElPX0ZOKExDREQ1KSwgXAorCUdQSU9fRk4oUE9SVDE5N19TQ0lGQTVfU0NLKSwgXAorCUdQSU9fRk4oTUZHMl9PVVQyKSwgXAorCUdQSU9fRk4oVFBVMlRPMSksCisJR1BJT19GTihMQ0RENiksCisJR1BJT19GTihMQ0RENyksIFwKKwlHUElPX0ZOKFRQVTRUTzEpLCBcCisJR1BJT19GTihNRkc0X09VVDIpLAorCUdQSU9fRk4oTENERDgpLCBcCisJR1BJT19GTihEMTYpLAorCUdQSU9fRk4oTENERDkpLCBcCisJR1BJT19GTihEMTcpLAorCUdQSU9fRk4oTENERDEwKSwgXAorCUdQSU9fRk4oRDE4KSwKKwlHUElPX0ZOKExDREQxMSksIFwKKwlHUElPX0ZOKEQxOSksCisJR1BJT19GTihMQ0REMTIpLCBcCisJR1BJT19GTihEMjApLAorCUdQSU9fRk4oTENERDEzKSwgXAorCUdQSU9fRk4oRDIxKSwKKwlHUElPX0ZOKExDREQxNCksIFwKKwlHUElPX0ZOKEQyMiksCisJR1BJT19GTihMQ0REMTUpLCBcCisJR1BJT19GTihQT1JUMjA3X01TSU9GMExfU1MxKSwgXAorCUdQSU9fRk4oRDIzKSwKKwlHUElPX0ZOKExDREQxNiksIFwKKwlHUElPX0ZOKFBPUlQyMDhfTVNJT0YwTF9TUzIpLCBcCisJR1BJT19GTihEMjQpLAorCUdQSU9fRk4oTENERDE3KSwgXAorCUdQSU9fRk4oRDI1KSwKKwlHUElPX0ZOKExDREQxOCksIFwKKwlHUElPX0ZOKERSRVEyKSwgXAorCUdQSU9fRk4oUE9SVDIxMF9NU0lPRjBMX1NTMSksIFwKKwlHUElPX0ZOKEQyNiksCisJR1BJT19GTihMQ0REMTkpLCBcCisJR1BJT19GTihQT1JUMjExX01TSU9GMExfU1MyKSwgXAorCUdQSU9fRk4oRDI3KSwKKwlHUElPX0ZOKExDREQyMCksIFwKKwlHUElPX0ZOKFRTX1NQU1lOQzEpLCBcCisJR1BJT19GTihNU0lPRjBMX01DSzApLCBcCisJR1BJT19GTihEMjgpLAorCUdQSU9fRk4oTENERDIxKSwgXAorCUdQSU9fRk4oVFNfU0RBVDEpLCBcCisJR1BJT19GTihNU0lPRjBMX01DSzEpLCBcCisJR1BJT19GTihEMjkpLAorCUdQSU9fRk4oTENERDIyKSwgXAorCUdQSU9fRk4oVFNfU0RFTjEpLCBcCisJR1BJT19GTihNU0lPRjBMX1JTQ0spLCBcCisJR1BJT19GTihEMzApLAorCUdQSU9fRk4oTENERDIzKSwgXAorCUdQSU9fRk4oVFNfU0NLMSksIFwKKwlHUElPX0ZOKE1TSU9GMExfUlNZTkMpLCBcCisJR1BJT19GTihEMzEpLAorCUdQSU9fRk4oTENERENLKSwgXAorCUdQSU9fRk4oTENEV1JfKSwKKwlHUElPX0ZOKExDRFJEXyksIFwKKwlHUElPX0ZOKERBQ0syKSwgXAorCUdQSU9fRk4oUE9SVDIxN19MQ0QyUlMpLCBcCisJR1BJT19GTihNU0lPRjBMX1RTWU5DKSwgXAorCUdQSU9fRk4oVklPMl9GSUVMRDMpLCBcCisJR1BJT19GTihQT1JUMjE3X0xDRDJESVNQKSwKKwlHUElPX0ZOKExDREhTWU4pLCBcCisJR1BJT19GTihMQ0RDU18pLCBcCisJR1BJT19GTihMQ0RDUzJfKSwgXAorCUdQSU9fRk4oREFDSzMpLCBcCisJR1BJT19GTihQT1JUMjE4X1ZJT19DS09SKSwKKwlHUElPX0ZOKExDRERJU1ApLCBcCisJR1BJT19GTihMQ0RSUyksIFwKKwlHUElPX0ZOKFBPUlQyMTlfTENEMldSXyksIFwKKwlHUElPX0ZOKERSRVEzKSwgXAorCUdQSU9fRk4oTVNJT0YwTF9UU0NLKSwgXAorCUdQSU9fRk4oVklPMl9DTEszKSwgXAorCUdQSU9fRk4oTENEMkRDS18yKSwKKwlHUElPX0ZOKExDRFZTWU4pLCBcCisJR1BJT19GTihMQ0RWU1lOMiksCisJR1BJT19GTihMQ0RMQ0xLKSwgXAorCUdQSU9fRk4oRFJFUTEpLCBcCisJR1BJT19GTihQT1JUMjIxX0xDRDJDU18pLCBcCisJR1BJT19GTihQV0VOKSwgXAorCUdQSU9fRk4oTVNJT0YwTF9SWEQpLCBcCisJR1BJT19GTihWSU8yX0hEMyksIFwKKwlHUElPX0ZOKFBPUlQyMjFfTENEMkhTWU4pLAorCUdQSU9fRk4oTENERE9OKSwgXAorCUdQSU9fRk4oTENERE9OMiksIFwKKwlHUElPX0ZOKERBQ0sxKSwgXAorCUdQSU9fRk4oT1ZDTiksIFwKKwlHUElPX0ZOKE1TSU9GMExfVFhEKSwgXAorCUdQSU9fRk4oVklPMl9WRDMpLCBcCisJR1BJT19GTihQT1JUMjIyX0xDRDJWU1lOKSwKKworCUdQSU9fRk4oU0NJRkExX1RYRCksIFwKKwlHUElPX0ZOKE9WQ04yKSwKKwlHUElPX0ZOKEVYVExQKSwgXAorCUdQSU9fRk4oU0NJRkExX1NDSyksIFwKKwlHUElPX0ZOKFBPUlQyMjZfVklPX0NLTzIpLAorCUdQSU9fRk4oU0NJRkExX1JUU18pLCBcCisJR1BJT19GTihJRElOKSwKKwlHUElPX0ZOKFNDSUZBMV9SWEQpLAorCUdQSU9fRk4oU0NJRkExX0NUU18pLCBcCisJR1BJT19GTihNRkcxX0lOMSksCisJR1BJT19GTihNU0lPRjFfVFhEKSwgXAorCUdQSU9fRk4oU0NJRkEyX1RYRDIpLAorCUdQSU9fRk4oTVNJT0YxX1RTWU5DKSwgXAorCUdQSU9fRk4oU0NJRkEyX0NUUzJfKSwKKwlHUElPX0ZOKE1TSU9GMV9UU0NLKSwgXAorCUdQSU9fRk4oU0NJRkEyX1NDSzIpLAorCUdQSU9fRk4oTVNJT0YxX1JYRCksIFwKKwlHUElPX0ZOKFNDSUZBMl9SWEQyKSwKKwlHUElPX0ZOKE1TSU9GMV9SU0NLKSwgXAorCUdQSU9fRk4oU0NJRkEyX1JUUzJfKSwgXAorCUdQSU9fRk4oVklPMl9DTEsyKSwgXAorCUdQSU9fRk4oTENEMkQyMCksCisJR1BJT19GTihNU0lPRjFfUlNZTkMpLCBcCisJR1BJT19GTihNRkcxX0lOMiksIFwKKwlHUElPX0ZOKFZJTzJfVkQyKSwgXAorCUdQSU9fRk4oTENEMkQyMSksCisJR1BJT19GTihNU0lPRjFfTUNLMCksIFwKKwlHUElPX0ZOKFBPUlQyMzZfSTJDX1NEQTIpLAorCUdQSU9fRk4oTVNJT0YxX01DSzEpLCBcCisJR1BJT19GTihQT1JUMjM3X0kyQ19TQ0wyKSwKKwlHUElPX0ZOKE1TSU9GMV9TUzEpLCBcCisJR1BJT19GTihWSU8yX0ZJRUxEMiksIFwKKwlHUElPX0ZOKExDRDJEMjIpLAorCUdQSU9fRk4oTVNJT0YxX1NTMiksIFwKKwlHUElPX0ZOKFZJTzJfSEQyKSwgXAorCUdQSU9fRk4oTENEMkQyMyksCisJR1BJT19GTihTQ0lGQTZfVFhEKSwKKwlHUElPX0ZOKFBPUlQyNDFfSVJEQV9PVVQpLCBcCisJR1BJT19GTihQT1JUMjQxX0lST1VUKSwgXAorCUdQSU9fRk4oTUZHNF9PVVQxKSwgXAorCUdQSU9fRk4oVFBVNFRPMCksCisJR1BJT19GTihQT1JUMjQyX0lSREFfSU4pLCBcCisJR1BJT19GTihNRkc0X0lOMiksCisJR1BJT19GTihQT1JUMjQzX0lSREFfRklSU0VMKSwgXAorCUdQSU9fRk4oUE9SVDI0M19WSU9fQ0tPMiksCisJR1BJT19GTihQT1JUMjQ0X1NDSUZBNV9DVFNfKSwgXAorCUdQSU9fRk4oTUZHMl9JTjEpLCBcCisJR1BJT19GTihQT1JUMjQ0X1NDSUZCX0NUU18pLCBcCisJR1BJT19GTihNU0lPRjJSX1JYRCksCisJR1BJT19GTihQT1JUMjQ1X1NDSUZBNV9SVFNfKSwgXAorCUdQSU9fRk4oTUZHMl9JTjIpLCBcCisJR1BJT19GTihQT1JUMjQ1X1NDSUZCX1JUU18pLCBcCisJR1BJT19GTihNU0lPRjJSX1RYRCksCisJR1BJT19GTihQT1JUMjQ2X1NDSUZBNV9SWEQpLCBcCisJR1BJT19GTihNRkcxX09VVDEpLCBcCisJR1BJT19GTihQT1JUMjQ2X1NDSUZCX1JYRCksIFwKKwlHUElPX0ZOKFRQVTFUTzApLAorCUdQSU9fRk4oUE9SVDI0N19TQ0lGQTVfVFhEKSwgXAorCUdQSU9fRk4oTUZHM19PVVQyKSwgXAorCUdQSU9fRk4oUE9SVDI0N19TQ0lGQl9UWEQpLCBcCisJR1BJT19GTihUUFUzVE8xKSwKKwlHUElPX0ZOKFBPUlQyNDhfU0NJRkE1X1NDSyksIFwKKwlHUElPX0ZOKE1GRzJfT1VUMSksIFwKKwlHUElPX0ZOKFBPUlQyNDhfU0NJRkJfU0NLKSwgXAorCUdQSU9fRk4oVFBVMlRPMCksIFwKKwlHUElPX0ZOKFBPUlQyNDhfSTJDX1NDTDMpLCBcCisJR1BJT19GTihNU0lPRjJSX1RTQ0spLAorCUdQSU9fRk4oUE9SVDI0OV9JUk9VVCksIFwKKwlHUElPX0ZOKE1GRzRfSU4xKSwgXAorCUdQSU9fRk4oUE9SVDI0OV9JMkNfU0RBMyksIFwKKwlHUElPX0ZOKE1TSU9GMlJfVFNZTkMpLAorCUdQSU9fRk4oU0RISUNMSzApLAorCUdQSU9fRk4oU0RISUNEMCksCisJR1BJT19GTihTREhJRDBfMCksCisJR1BJT19GTihTREhJRDBfMSksCisJR1BJT19GTihTREhJRDBfMiksCisJR1BJT19GTihTREhJRDBfMyksCisJR1BJT19GTihTREhJQ01EMCksCisJR1BJT19GTihTREhJV1AwKSwKKwlHUElPX0ZOKFNESElDTEsxKSwKKwlHUElPX0ZOKFNESElEMV8wKSwgXAorCUdQSU9fRk4oVFNfU1BTWU5DMiksCisJR1BJT19GTihTREhJRDFfMSksIFwKKwlHUElPX0ZOKFRTX1NEQVQyKSwKKwlHUElPX0ZOKFNESElEMV8yKSwgXAorCUdQSU9fRk4oVFNfU0RFTjIpLAorCUdQSU9fRk4oU0RISUQxXzMpLCBcCisJR1BJT19GTihUU19TQ0syKSwKKwlHUElPX0ZOKFNESElDTUQxKSwKKwlHUElPX0ZOKFNESElDTEsyKSwKKwlHUElPX0ZOKFNESElEMl8wKSwgXAorCUdQSU9fRk4oVFNfU1BTWU5DNCksCisJR1BJT19GTihTREhJRDJfMSksIFwKKwlHUElPX0ZOKFRTX1NEQVQ0KSwKKwlHUElPX0ZOKFNESElEMl8yKSwgXAorCUdQSU9fRk4oVFNfU0RFTjQpLAorCUdQSU9fRk4oU0RISUQyXzMpLCBcCisJR1BJT19GTihUU19TQ0s0KSwKKwlHUElPX0ZOKFNESElDTUQyKSwKKwlHUElPX0ZOKE1NQ0NMSzApLAorCUdQSU9fRk4oTU1DRDBfMCksCisJR1BJT19GTihNTUNEMF8xKSwKKwlHUElPX0ZOKE1NQ0QwXzIpLAorCUdQSU9fRk4oTU1DRDBfMyksCisJR1BJT19GTihNTUNEMF80KSwgXAorCUdQSU9fRk4oVFNfU1BTWU5DNSksCisJR1BJT19GTihNTUNEMF81KSwgXAorCUdQSU9fRk4oVFNfU0RBVDUpLAorCUdQSU9fRk4oTU1DRDBfNiksIFwKKwlHUElPX0ZOKFRTX1NERU41KSwKKwlHUElPX0ZOKE1NQ0QwXzcpLCBcCisJR1BJT19GTihUU19TQ0s1KSwKKwlHUElPX0ZOKE1NQ0NNRDApLAorCUdQSU9fRk4oUkVTRVRPVVRTXyksIFwKKwlHUElPX0ZOKEVYVEFMMk9VVCksCisJR1BJT19GTihNQ1BfV0FJVF9fTUNQX0ZSQiksCisJR1BJT19GTihNQ1BfQ0tPKSwgXAorCUdQSU9fRk4oTU1DQ0xLMSksCisJR1BJT19GTihNQ1BfRDE1X01DUF9OQUYxNSksCisJR1BJT19GTihNQ1BfRDE0X01DUF9OQUYxNCksCisJR1BJT19GTihNQ1BfRDEzX01DUF9OQUYxMyksCisJR1BJT19GTihNQ1BfRDEyX01DUF9OQUYxMiksCisJR1BJT19GTihNQ1BfRDExX01DUF9OQUYxMSksCisJR1BJT19GTihNQ1BfRDEwX01DUF9OQUYxMCksCisJR1BJT19GTihNQ1BfRDlfTUNQX05BRjkpLAorCUdQSU9fRk4oTUNQX0Q4X01DUF9OQUY4KSwgXAorCUdQSU9fRk4oTU1DQ01EMSksCisJR1BJT19GTihNQ1BfRDdfTUNQX05BRjcpLCBcCisJR1BJT19GTihNTUNEMV83KSwKKworCUdQSU9fRk4oTUNQX0Q2X01DUF9OQUY2KSwgXAorCUdQSU9fRk4oTU1DRDFfNiksCisJR1BJT19GTihNQ1BfRDVfTUNQX05BRjUpLCBcCisJR1BJT19GTihNTUNEMV81KSwKKwlHUElPX0ZOKE1DUF9ENF9NQ1BfTkFGNCksIFwKKwlHUElPX0ZOKE1NQ0QxXzQpLAorCUdQSU9fRk4oTUNQX0QzX01DUF9OQUYzKSwgXAorCUdQSU9fRk4oTU1DRDFfMyksCisJR1BJT19GTihNQ1BfRDJfTUNQX05BRjIpLCBcCisJR1BJT19GTihNTUNEMV8yKSwKKwlHUElPX0ZOKE1DUF9EMV9NQ1BfTkFGMSksIFwKKwlHUElPX0ZOKE1NQ0QxXzEpLAorCUdQSU9fRk4oTUNQX0QwX01DUF9OQUYwKSwgXAorCUdQSU9fRk4oTU1DRDFfMCksCisJR1BJT19GTihNQ1BfTkJSU1RPVVRfKSwKKwlHUElPX0ZOKE1DUF9XRTBfX01DUF9GV0UpLCBcCisJR1BJT19GTihNQ1BfUkRXUl9NQ1BfRldFKSwKKworCS8qIE1TRUwyIHNwZWNpYWwgY2FzZXMgKi8KKwlHUElPX0ZOKFRTSUYyX1RTX1hYMSksCisJR1BJT19GTihUU0lGMl9UU19YWDIpLAorCUdQSU9fRk4oVFNJRjJfVFNfWFgzKSwKKwlHUElPX0ZOKFRTSUYyX1RTX1hYNCksCisJR1BJT19GTihUU0lGMl9UU19YWDUpLAorCUdQSU9fRk4oVFNJRjFfVFNfWFgxKSwKKwlHUElPX0ZOKFRTSUYxX1RTX1hYMiksCisJR1BJT19GTihUU0lGMV9UU19YWDMpLAorCUdQSU9fRk4oVFNJRjFfVFNfWFg0KSwKKwlHUElPX0ZOKFRTSUYxX1RTX1hYNSksCisJR1BJT19GTihUU0lGMF9UU19YWDEpLAorCUdQSU9fRk4oVFNJRjBfVFNfWFgyKSwKKwlHUElPX0ZOKFRTSUYwX1RTX1hYMyksCisJR1BJT19GTihUU0lGMF9UU19YWDQpLAorCUdQSU9fRk4oVFNJRjBfVFNfWFg1KSwKKwlHUElPX0ZOKE1TVDFfVFNfWFgxKSwKKwlHUElPX0ZOKE1TVDFfVFNfWFgyKSwKKwlHUElPX0ZOKE1TVDFfVFNfWFgzKSwKKwlHUElPX0ZOKE1TVDFfVFNfWFg0KSwKKwlHUElPX0ZOKE1TVDFfVFNfWFg1KSwKKwlHUElPX0ZOKE1TVDBfVFNfWFgxKSwKKwlHUElPX0ZOKE1TVDBfVFNfWFgyKSwKKwlHUElPX0ZOKE1TVDBfVFNfWFgzKSwKKwlHUElPX0ZOKE1TVDBfVFNfWFg0KSwKKwlHUElPX0ZOKE1TVDBfVFNfWFg1KSwKKworCS8qIE1TRUwzIHNwZWNpYWwgY2FzZXMgKi8KKwlHUElPX0ZOKFNESEkwX1ZDQ1FfTUMwX09OKSwKKwlHUElPX0ZOKFNESEkwX1ZDQ1FfTUMwX09GRiksCisJR1BJT19GTihERUJVR19NT05fVklPKSwKKwlHUElPX0ZOKERFQlVHX01PTl9MQ0REKSwKKwlHUElPX0ZOKExDRENfTENEQzApLAorCUdQSU9fRk4oTENEQ19MQ0RDMSksCisKKwkvKiBNU0VMNCBzcGVjaWFsIGNhc2VzICovCisJR1BJT19GTihJUlE5X01FTV9JTlQpLAorCUdQSU9fRk4oSVJROV9NQ1BfSU5UKSwKKwlHUElPX0ZOKEExMSksCisJR1BJT19GTihLRVlPVVQ4KSwKKwlHUElPX0ZOKFRQVTRUTzMpLAorCUdQSU9fRk4oUkVTRVRBX05fUFVfT04pLAorCUdQSU9fRk4oUkVTRVRBX05fUFVfT0ZGKSwKKwlHUElPX0ZOKEVEQkdSRVFfUEQpLAorCUdQSU9fRk4oRURCR1JFUV9QVSksCisKKwkvKiBGdW5jdGlvbnMgd2l0aCBwdWxsLXVwcyAqLworCUdQSU9fRk4oS0VZSU4wX1BVKSwKKwlHUElPX0ZOKEtFWUlOMV9QVSksCisJR1BJT19GTihLRVlJTjJfUFUpLAorCUdQSU9fRk4oS0VZSU4zX1BVKSwKKwlHUElPX0ZOKEtFWUlONF9QVSksCisJR1BJT19GTihLRVlJTjVfUFUpLAorCUdQSU9fRk4oS0VZSU42X1BVKSwKKwlHUElPX0ZOKEtFWUlON19QVSksCisJR1BJT19GTihTREhJRDFfMF9QVSksCisJR1BJT19GTihTREhJRDFfMV9QVSksCisJR1BJT19GTihTREhJRDFfMl9QVSksCisJR1BJT19GTihTREhJRDFfM19QVSksCisJR1BJT19GTihTREhJQ01EMV9QVSksCisJR1BJT19GTihNTUNDTUQwX1BVKSwKKwlHUElPX0ZOKE1NQ0NNRDFfUFUpLAorCUdQSU9fRk4oRlNJQUNLX1BVKSwKKwlHUElPX0ZOKEZTSUFJTFJfUFUpLAorCUdQSU9fRk4oRlNJQUlCVF9QVSksCisJR1BJT19GTihGU0lBSVNMRF9QVSksCit9OworCisjZGVmaW5lIFBPUlRDUihuciwgcmVnKQlcCisJeyBQSU5NVVhfQ0ZHX1JFRygiUE9SVCIgbnIgIkNSIiwgcmVnLCA4LCA0KSB7IFwKKwkJMCwgXAorCQkvKjAwMDEqLyBQT1JUIyNuciMjX09VVCAsIFwKKwkJLyowMDEwKi8gUE9SVCMjbnIjI19JTiAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIFwKKwkJLyoxMDEwKi8gUE9SVCMjbnIjI19JTl9QRCwgMCwgMCwgMCwgXAorCQkvKjExMTAqLyBQT1JUIyNuciMjX0lOX1BVLCAwLCBcCisJCVBPUlQjI25yIyNfRk4wLCBQT1JUIyNuciMjX0ZOMSwJUE9SVCMjbnIjI19GTjIsIFwKKwkJUE9SVCMjbnIjI19GTjMsCVBPUlQjI25yIyNfRk40LCBQT1JUIyNuciMjX0ZONSwgXAorCQlQT1JUIyNuciMjX0ZONiwgUE9SVCMjbnIjI19GTjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfSBcCisJfQorCitzdGF0aWMgc3RydWN0IHBpbm11eF9jZmdfcmVnIHBpbm11eF9jb25maWdfcmVnc1tdID0geworCVBPUlRDUigwLCAweGU2MDUwMDAwKSwgLyogUE9SVDBDUiAqLworCVBPUlRDUigxLCAweGU2MDUwMDAxKSwgLyogUE9SVDFDUiAqLworCVBPUlRDUigyLCAweGU2MDUwMDAyKSwgLyogUE9SVDJDUiAqLworCVBPUlRDUigzLCAweGU2MDUwMDAzKSwgLyogUE9SVDNDUiAqLworCVBPUlRDUig0LCAweGU2MDUwMDA0KSwgLyogUE9SVDRDUiAqLworCVBPUlRDUig1LCAweGU2MDUwMDA1KSwgLyogUE9SVDVDUiAqLworCVBPUlRDUig2LCAweGU2MDUwMDA2KSwgLyogUE9SVDZDUiAqLworCVBPUlRDUig3LCAweGU2MDUwMDA3KSwgLyogUE9SVDdDUiAqLworCVBPUlRDUig4LCAweGU2MDUwMDA4KSwgLyogUE9SVDhDUiAqLworCVBPUlRDUig5LCAweGU2MDUwMDA5KSwgLyogUE9SVDlDUiAqLworCisJUE9SVENSKDEwLCAweGU2MDUwMDBhKSwgLyogUE9SVDEwQ1IgKi8KKwlQT1JUQ1IoMTEsIDB4ZTYwNTAwMGIpLCAvKiBQT1JUMTFDUiAqLworCVBPUlRDUigxMiwgMHhlNjA1MDAwYyksIC8qIFBPUlQxMkNSICovCisJUE9SVENSKDEzLCAweGU2MDUwMDBkKSwgLyogUE9SVDEzQ1IgKi8KKwlQT1JUQ1IoMTQsIDB4ZTYwNTAwMGUpLCAvKiBQT1JUMTRDUiAqLworCVBPUlRDUigxNSwgMHhlNjA1MDAwZiksIC8qIFBPUlQxNUNSICovCisJUE9SVENSKDE2LCAweGU2MDUwMDEwKSwgLyogUE9SVDE2Q1IgKi8KKwlQT1JUQ1IoMTcsIDB4ZTYwNTAwMTEpLCAvKiBQT1JUMTdDUiAqLworCVBPUlRDUigxOCwgMHhlNjA1MDAxMiksIC8qIFBPUlQxOENSICovCisJUE9SVENSKDE5LCAweGU2MDUwMDEzKSwgLyogUE9SVDE5Q1IgKi8KKworCVBPUlRDUigyMCwgMHhlNjA1MDAxNCksIC8qIFBPUlQyMENSICovCisJUE9SVENSKDIxLCAweGU2MDUwMDE1KSwgLyogUE9SVDIxQ1IgKi8KKwlQT1JUQ1IoMjIsIDB4ZTYwNTAwMTYpLCAvKiBQT1JUMjJDUiAqLworCVBPUlRDUigyMywgMHhlNjA1MDAxNyksIC8qIFBPUlQyM0NSICovCisJUE9SVENSKDI0LCAweGU2MDUwMDE4KSwgLyogUE9SVDI0Q1IgKi8KKwlQT1JUQ1IoMjUsIDB4ZTYwNTAwMTkpLCAvKiBQT1JUMjVDUiAqLworCVBPUlRDUigyNiwgMHhlNjA1MDAxYSksIC8qIFBPUlQyNkNSICovCisJUE9SVENSKDI3LCAweGU2MDUwMDFiKSwgLyogUE9SVDI3Q1IgKi8KKwlQT1JUQ1IoMjgsIDB4ZTYwNTAwMWMpLCAvKiBQT1JUMjhDUiAqLworCVBPUlRDUigyOSwgMHhlNjA1MDAxZCksIC8qIFBPUlQyOUNSICovCisKKwlQT1JUQ1IoMzAsIDB4ZTYwNTAwMWUpLCAvKiBQT1JUMzBDUiAqLworCVBPUlRDUigzMSwgMHhlNjA1MDAxZiksIC8qIFBPUlQzMUNSICovCisJUE9SVENSKDMyLCAweGU2MDUxMDIwKSwgLyogUE9SVDMyQ1IgKi8KKwlQT1JUQ1IoMzMsIDB4ZTYwNTEwMjEpLCAvKiBQT1JUMzNDUiAqLworCVBPUlRDUigzNCwgMHhlNjA1MTAyMiksIC8qIFBPUlQzNENSICovCisJUE9SVENSKDM1LCAweGU2MDUxMDIzKSwgLyogUE9SVDM1Q1IgKi8KKwlQT1JUQ1IoMzYsIDB4ZTYwNTEwMjQpLCAvKiBQT1JUMzZDUiAqLworCVBPUlRDUigzNywgMHhlNjA1MTAyNSksIC8qIFBPUlQzN0NSICovCisJUE9SVENSKDM4LCAweGU2MDUxMDI2KSwgLyogUE9SVDM4Q1IgKi8KKwlQT1JUQ1IoMzksIDB4ZTYwNTEwMjcpLCAvKiBQT1JUMzlDUiAqLworCisJUE9SVENSKDQwLCAweGU2MDUxMDI4KSwgLyogUE9SVDQwQ1IgKi8KKwlQT1JUQ1IoNDEsIDB4ZTYwNTEwMjkpLCAvKiBQT1JUNDFDUiAqLworCVBPUlRDUig0MiwgMHhlNjA1MTAyYSksIC8qIFBPUlQ0MkNSICovCisJUE9SVENSKDQzLCAweGU2MDUxMDJiKSwgLyogUE9SVDQzQ1IgKi8KKwlQT1JUQ1IoNDQsIDB4ZTYwNTEwMmMpLCAvKiBQT1JUNDRDUiAqLworCVBPUlRDUig0NSwgMHhlNjA1MTAyZCksIC8qIFBPUlQ0NUNSICovCisJUE9SVENSKDQ2LCAweGU2MDUxMDJlKSwgLyogUE9SVDQ2Q1IgKi8KKwlQT1JUQ1IoNDcsIDB4ZTYwNTEwMmYpLCAvKiBQT1JUNDdDUiAqLworCVBPUlRDUig0OCwgMHhlNjA1MTAzMCksIC8qIFBPUlQ0OENSICovCisJUE9SVENSKDQ5LCAweGU2MDUxMDMxKSwgLyogUE9SVDQ5Q1IgKi8KKworCVBPUlRDUig1MCwgMHhlNjA1MTAzMiksIC8qIFBPUlQ1MENSICovCisJUE9SVENSKDUxLCAweGU2MDUxMDMzKSwgLyogUE9SVDUxQ1IgKi8KKwlQT1JUQ1IoNTIsIDB4ZTYwNTEwMzQpLCAvKiBQT1JUNTJDUiAqLworCVBPUlRDUig1MywgMHhlNjA1MTAzNSksIC8qIFBPUlQ1M0NSICovCisJUE9SVENSKDU0LCAweGU2MDUxMDM2KSwgLyogUE9SVDU0Q1IgKi8KKwlQT1JUQ1IoNTUsIDB4ZTYwNTEwMzcpLCAvKiBQT1JUNTVDUiAqLworCVBPUlRDUig1NiwgMHhlNjA1MTAzOCksIC8qIFBPUlQ1NkNSICovCisJUE9SVENSKDU3LCAweGU2MDUxMDM5KSwgLyogUE9SVDU3Q1IgKi8KKwlQT1JUQ1IoNTgsIDB4ZTYwNTEwM2EpLCAvKiBQT1JUNThDUiAqLworCVBPUlRDUig1OSwgMHhlNjA1MTAzYiksIC8qIFBPUlQ1OUNSICovCisKKwlQT1JUQ1IoNjAsIDB4ZTYwNTEwM2MpLCAvKiBQT1JUNjBDUiAqLworCVBPUlRDUig2MSwgMHhlNjA1MTAzZCksIC8qIFBPUlQ2MUNSICovCisJUE9SVENSKDYyLCAweGU2MDUxMDNlKSwgLyogUE9SVDYyQ1IgKi8KKwlQT1JUQ1IoNjMsIDB4ZTYwNTEwM2YpLCAvKiBQT1JUNjNDUiAqLworCVBPUlRDUig2NCwgMHhlNjA1MTA0MCksIC8qIFBPUlQ2NENSICovCisJUE9SVENSKDY1LCAweGU2MDUxMDQxKSwgLyogUE9SVDY1Q1IgKi8KKwlQT1JUQ1IoNjYsIDB4ZTYwNTEwNDIpLCAvKiBQT1JUNjZDUiAqLworCVBPUlRDUig2NywgMHhlNjA1MTA0MyksIC8qIFBPUlQ2N0NSICovCisJUE9SVENSKDY4LCAweGU2MDUxMDQ0KSwgLyogUE9SVDY4Q1IgKi8KKwlQT1JUQ1IoNjksIDB4ZTYwNTEwNDUpLCAvKiBQT1JUNjlDUiAqLworCisJUE9SVENSKDcwLCAweGU2MDUxMDQ2KSwgLyogUE9SVDcwQ1IgKi8KKwlQT1JUQ1IoNzEsIDB4ZTYwNTEwNDcpLCAvKiBQT1JUNzFDUiAqLworCVBPUlRDUig3MiwgMHhlNjA1MTA0OCksIC8qIFBPUlQ3MkNSICovCisJUE9SVENSKDczLCAweGU2MDUxMDQ5KSwgLyogUE9SVDczQ1IgKi8KKwlQT1JUQ1IoNzQsIDB4ZTYwNTEwNGEpLCAvKiBQT1JUNzRDUiAqLworCVBPUlRDUig3NSwgMHhlNjA1MTA0YiksIC8qIFBPUlQ3NUNSICovCisJUE9SVENSKDc2LCAweGU2MDUxMDRjKSwgLyogUE9SVDc2Q1IgKi8KKwlQT1JUQ1IoNzcsIDB4ZTYwNTEwNGQpLCAvKiBQT1JUNzdDUiAqLworCVBPUlRDUig3OCwgMHhlNjA1MTA0ZSksIC8qIFBPUlQ3OENSICovCisJUE9SVENSKDc5LCAweGU2MDUxMDRmKSwgLyogUE9SVDc5Q1IgKi8KKworCVBPUlRDUig4MCwgMHhlNjA1MTA1MCksIC8qIFBPUlQ4MENSICovCisJUE9SVENSKDgxLCAweGU2MDUxMDUxKSwgLyogUE9SVDgxQ1IgKi8KKwlQT1JUQ1IoODIsIDB4ZTYwNTEwNTIpLCAvKiBQT1JUODJDUiAqLworCVBPUlRDUig4MywgMHhlNjA1MTA1MyksIC8qIFBPUlQ4M0NSICovCisJUE9SVENSKDg0LCAweGU2MDUxMDU0KSwgLyogUE9SVDg0Q1IgKi8KKwlQT1JUQ1IoODUsIDB4ZTYwNTEwNTUpLCAvKiBQT1JUODVDUiAqLworCVBPUlRDUig4NiwgMHhlNjA1MTA1NiksIC8qIFBPUlQ4NkNSICovCisJUE9SVENSKDg3LCAweGU2MDUxMDU3KSwgLyogUE9SVDg3Q1IgKi8KKwlQT1JUQ1IoODgsIDB4ZTYwNTEwNTgpLCAvKiBQT1JUODhDUiAqLworCVBPUlRDUig4OSwgMHhlNjA1MTA1OSksIC8qIFBPUlQ4OUNSICovCisKKwlQT1JUQ1IoOTAsIDB4ZTYwNTEwNWEpLCAvKiBQT1JUOTBDUiAqLworCVBPUlRDUig5MSwgMHhlNjA1MTA1YiksIC8qIFBPUlQ5MUNSICovCisJUE9SVENSKDkyLCAweGU2MDUxMDVjKSwgLyogUE9SVDkyQ1IgKi8KKwlQT1JUQ1IoOTMsIDB4ZTYwNTEwNWQpLCAvKiBQT1JUOTNDUiAqLworCVBPUlRDUig5NCwgMHhlNjA1MTA1ZSksIC8qIFBPUlQ5NENSICovCisJUE9SVENSKDk1LCAweGU2MDUxMDVmKSwgLyogUE9SVDk1Q1IgKi8KKwlQT1JUQ1IoOTYsIDB4ZTYwNTIwNjApLCAvKiBQT1JUOTZDUiAqLworCVBPUlRDUig5NywgMHhlNjA1MjA2MSksIC8qIFBPUlQ5N0NSICovCisJUE9SVENSKDk4LCAweGU2MDUyMDYyKSwgLyogUE9SVDk4Q1IgKi8KKwlQT1JUQ1IoOTksIDB4ZTYwNTIwNjMpLCAvKiBQT1JUOTlDUiAqLworCisJUE9SVENSKDEwMCwgMHhlNjA1MjA2NCksIC8qIFBPUlQxMDBDUiAqLworCVBPUlRDUigxMDEsIDB4ZTYwNTIwNjUpLCAvKiBQT1JUMTAxQ1IgKi8KKwlQT1JUQ1IoMTAyLCAweGU2MDUyMDY2KSwgLyogUE9SVDEwMkNSICovCisJUE9SVENSKDEwMywgMHhlNjA1MjA2NyksIC8qIFBPUlQxMDNDUiAqLworCVBPUlRDUigxMDQsIDB4ZTYwNTIwNjgpLCAvKiBQT1JUMTA0Q1IgKi8KKwlQT1JUQ1IoMTA1LCAweGU2MDUyMDY5KSwgLyogUE9SVDEwNUNSICovCisJUE9SVENSKDEwNiwgMHhlNjA1MjA2YSksIC8qIFBPUlQxMDZDUiAqLworCVBPUlRDUigxMDcsIDB4ZTYwNTIwNmIpLCAvKiBQT1JUMTA3Q1IgKi8KKwlQT1JUQ1IoMTA4LCAweGU2MDUyMDZjKSwgLyogUE9SVDEwOENSICovCisJUE9SVENSKDEwOSwgMHhlNjA1MjA2ZCksIC8qIFBPUlQxMDlDUiAqLworCisJUE9SVENSKDExMCwgMHhlNjA1MjA2ZSksIC8qIFBPUlQxMTBDUiAqLworCVBPUlRDUigxMTEsIDB4ZTYwNTIwNmYpLCAvKiBQT1JUMTExQ1IgKi8KKwlQT1JUQ1IoMTEyLCAweGU2MDUyMDcwKSwgLyogUE9SVDExMkNSICovCisJUE9SVENSKDExMywgMHhlNjA1MjA3MSksIC8qIFBPUlQxMTNDUiAqLworCVBPUlRDUigxMTQsIDB4ZTYwNTIwNzIpLCAvKiBQT1JUMTE0Q1IgKi8KKwlQT1JUQ1IoMTE1LCAweGU2MDUyMDczKSwgLyogUE9SVDExNUNSICovCisJUE9SVENSKDExNiwgMHhlNjA1MjA3NCksIC8qIFBPUlQxMTZDUiAqLworCVBPUlRDUigxMTcsIDB4ZTYwNTIwNzUpLCAvKiBQT1JUMTE3Q1IgKi8KKwlQT1JUQ1IoMTE4LCAweGU2MDUyMDc2KSwgLyogUE9SVDExOENSICovCisKKwlQT1JUQ1IoMTI4LCAweGU2MDUyMDgwKSwgLyogUE9SVDEyOENSICovCisJUE9SVENSKDEyOSwgMHhlNjA1MjA4MSksIC8qIFBPUlQxMjlDUiAqLworCisJUE9SVENSKDEzMCwgMHhlNjA1MjA4MiksIC8qIFBPUlQxMzBDUiAqLworCVBPUlRDUigxMzEsIDB4ZTYwNTIwODMpLCAvKiBQT1JUMTMxQ1IgKi8KKwlQT1JUQ1IoMTMyLCAweGU2MDUyMDg0KSwgLyogUE9SVDEzMkNSICovCisJUE9SVENSKDEzMywgMHhlNjA1MjA4NSksIC8qIFBPUlQxMzNDUiAqLworCVBPUlRDUigxMzQsIDB4ZTYwNTIwODYpLCAvKiBQT1JUMTM0Q1IgKi8KKwlQT1JUQ1IoMTM1LCAweGU2MDUyMDg3KSwgLyogUE9SVDEzNUNSICovCisJUE9SVENSKDEzNiwgMHhlNjA1MjA4OCksIC8qIFBPUlQxMzZDUiAqLworCVBPUlRDUigxMzcsIDB4ZTYwNTIwODkpLCAvKiBQT1JUMTM3Q1IgKi8KKwlQT1JUQ1IoMTM4LCAweGU2MDUyMDhhKSwgLyogUE9SVDEzOENSICovCisJUE9SVENSKDEzOSwgMHhlNjA1MjA4YiksIC8qIFBPUlQxMzlDUiAqLworCisJUE9SVENSKDE0MCwgMHhlNjA1MjA4YyksIC8qIFBPUlQxNDBDUiAqLworCVBPUlRDUigxNDEsIDB4ZTYwNTIwOGQpLCAvKiBQT1JUMTQxQ1IgKi8KKwlQT1JUQ1IoMTQyLCAweGU2MDUyMDhlKSwgLyogUE9SVDE0MkNSICovCisJUE9SVENSKDE0MywgMHhlNjA1MjA4ZiksIC8qIFBPUlQxNDNDUiAqLworCVBPUlRDUigxNDQsIDB4ZTYwNTIwOTApLCAvKiBQT1JUMTQ0Q1IgKi8KKwlQT1JUQ1IoMTQ1LCAweGU2MDUyMDkxKSwgLyogUE9SVDE0NUNSICovCisJUE9SVENSKDE0NiwgMHhlNjA1MjA5MiksIC8qIFBPUlQxNDZDUiAqLworCVBPUlRDUigxNDcsIDB4ZTYwNTIwOTMpLCAvKiBQT1JUMTQ3Q1IgKi8KKwlQT1JUQ1IoMTQ4LCAweGU2MDUyMDk0KSwgLyogUE9SVDE0OENSICovCisJUE9SVENSKDE0OSwgMHhlNjA1MjA5NSksIC8qIFBPUlQxNDlDUiAqLworCisJUE9SVENSKDE1MCwgMHhlNjA1MjA5NiksIC8qIFBPUlQxNTBDUiAqLworCVBPUlRDUigxNTEsIDB4ZTYwNTIwOTcpLCAvKiBQT1JUMTUxQ1IgKi8KKwlQT1JUQ1IoMTUyLCAweGU2MDUyMDk4KSwgLyogUE9SVDE1MkNSICovCisJUE9SVENSKDE1MywgMHhlNjA1MjA5OSksIC8qIFBPUlQxNTNDUiAqLworCVBPUlRDUigxNTQsIDB4ZTYwNTIwOWEpLCAvKiBQT1JUMTU0Q1IgKi8KKwlQT1JUQ1IoMTU1LCAweGU2MDUyMDliKSwgLyogUE9SVDE1NUNSICovCisJUE9SVENSKDE1NiwgMHhlNjA1MjA5YyksIC8qIFBPUlQxNTZDUiAqLworCVBPUlRDUigxNTcsIDB4ZTYwNTIwOWQpLCAvKiBQT1JUMTU3Q1IgKi8KKwlQT1JUQ1IoMTU4LCAweGU2MDUyMDllKSwgLyogUE9SVDE1OENSICovCisJUE9SVENSKDE1OSwgMHhlNjA1MjA5ZiksIC8qIFBPUlQxNTlDUiAqLworCisJUE9SVENSKDE2MCwgMHhlNjA1MjBhMCksIC8qIFBPUlQxNjBDUiAqLworCVBPUlRDUigxNjEsIDB4ZTYwNTIwYTEpLCAvKiBQT1JUMTYxQ1IgKi8KKwlQT1JUQ1IoMTYyLCAweGU2MDUyMGEyKSwgLyogUE9SVDE2MkNSICovCisJUE9SVENSKDE2MywgMHhlNjA1MjBhMyksIC8qIFBPUlQxNjNDUiAqLworCVBPUlRDUigxNjQsIDB4ZTYwNTIwYTQpLCAvKiBQT1JUMTY0Q1IgKi8KKworCVBPUlRDUigxOTIsIDB4ZTYwNTIwYzApLCAvKiBQT1JUMTkyQ1IgKi8KKwlQT1JUQ1IoMTkzLCAweGU2MDUyMGMxKSwgLyogUE9SVDE5M0NSICovCisJUE9SVENSKDE5NCwgMHhlNjA1MjBjMiksIC8qIFBPUlQxOTRDUiAqLworCVBPUlRDUigxOTUsIDB4ZTYwNTIwYzMpLCAvKiBQT1JUMTk1Q1IgKi8KKwlQT1JUQ1IoMTk2LCAweGU2MDUyMGM0KSwgLyogUE9SVDE5NkNSICovCisJUE9SVENSKDE5NywgMHhlNjA1MjBjNSksIC8qIFBPUlQxOTdDUiAqLworCVBPUlRDUigxOTgsIDB4ZTYwNTIwYzYpLCAvKiBQT1JUMTk4Q1IgKi8KKwlQT1JUQ1IoMTk5LCAweGU2MDUyMGM3KSwgLyogUE9SVDE5OUNSICovCisKKwlQT1JUQ1IoMjAwLCAweGU2MDUyMGM4KSwgLyogUE9SVDIwMENSICovCisJUE9SVENSKDIwMSwgMHhlNjA1MjBjOSksIC8qIFBPUlQyMDFDUiAqLworCVBPUlRDUigyMDIsIDB4ZTYwNTIwY2EpLCAvKiBQT1JUMjAyQ1IgKi8KKwlQT1JUQ1IoMjAzLCAweGU2MDUyMGNiKSwgLyogUE9SVDIwM0NSICovCisJUE9SVENSKDIwNCwgMHhlNjA1MjBjYyksIC8qIFBPUlQyMDRDUiAqLworCVBPUlRDUigyMDUsIDB4ZTYwNTIwY2QpLCAvKiBQT1JUMjA1Q1IgKi8KKwlQT1JUQ1IoMjA2LCAweGU2MDUyMGNlKSwgLyogUE9SVDIwNkNSICovCisJUE9SVENSKDIwNywgMHhlNjA1MjBjZiksIC8qIFBPUlQyMDdDUiAqLworCVBPUlRDUigyMDgsIDB4ZTYwNTIwZDApLCAvKiBQT1JUMjA4Q1IgKi8KKwlQT1JUQ1IoMjA5LCAweGU2MDUyMGQxKSwgLyogUE9SVDIwOUNSICovCisKKwlQT1JUQ1IoMjEwLCAweGU2MDUyMGQyKSwgLyogUE9SVDIxMENSICovCisJUE9SVENSKDIxMSwgMHhlNjA1MjBkMyksIC8qIFBPUlQyMTFDUiAqLworCVBPUlRDUigyMTIsIDB4ZTYwNTIwZDQpLCAvKiBQT1JUMjEyQ1IgKi8KKwlQT1JUQ1IoMjEzLCAweGU2MDUyMGQ1KSwgLyogUE9SVDIxM0NSICovCisJUE9SVENSKDIxNCwgMHhlNjA1MjBkNiksIC8qIFBPUlQyMTRDUiAqLworCVBPUlRDUigyMTUsIDB4ZTYwNTIwZDcpLCAvKiBQT1JUMjE1Q1IgKi8KKwlQT1JUQ1IoMjE2LCAweGU2MDUyMGQ4KSwgLyogUE9SVDIxNkNSICovCisJUE9SVENSKDIxNywgMHhlNjA1MjBkOSksIC8qIFBPUlQyMTdDUiAqLworCVBPUlRDUigyMTgsIDB4ZTYwNTIwZGEpLCAvKiBQT1JUMjE4Q1IgKi8KKwlQT1JUQ1IoMjE5LCAweGU2MDUyMGRiKSwgLyogUE9SVDIxOUNSICovCisKKwlQT1JUQ1IoMjIwLCAweGU2MDUyMGRjKSwgLyogUE9SVDIyMENSICovCisJUE9SVENSKDIyMSwgMHhlNjA1MjBkZCksIC8qIFBPUlQyMjFDUiAqLworCVBPUlRDUigyMjIsIDB4ZTYwNTIwZGUpLCAvKiBQT1JUMjIyQ1IgKi8KKwlQT1JUQ1IoMjIzLCAweGU2MDUyMGRmKSwgLyogUE9SVDIyM0NSICovCisJUE9SVENSKDIyNCwgMHhlNjA1MzBlMCksIC8qIFBPUlQyMjRDUiAqLworCVBPUlRDUigyMjUsIDB4ZTYwNTMwZTEpLCAvKiBQT1JUMjI1Q1IgKi8KKwlQT1JUQ1IoMjI2LCAweGU2MDUzMGUyKSwgLyogUE9SVDIyNkNSICovCisJUE9SVENSKDIyNywgMHhlNjA1MzBlMyksIC8qIFBPUlQyMjdDUiAqLworCVBPUlRDUigyMjgsIDB4ZTYwNTMwZTQpLCAvKiBQT1JUMjI4Q1IgKi8KKwlQT1JUQ1IoMjI5LCAweGU2MDUzMGU1KSwgLyogUE9SVDIyOUNSICovCisKKwlQT1JUQ1IoMjMwLCAweGU2MDUzMGU2KSwgLyogUE9SVDIzMENSICovCisJUE9SVENSKDIzMSwgMHhlNjA1MzBlNyksIC8qIFBPUlQyMzFDUiAqLworCVBPUlRDUigyMzIsIDB4ZTYwNTMwZTgpLCAvKiBQT1JUMjMyQ1IgKi8KKwlQT1JUQ1IoMjMzLCAweGU2MDUzMGU5KSwgLyogUE9SVDIzM0NSICovCisJUE9SVENSKDIzNCwgMHhlNjA1MzBlYSksIC8qIFBPUlQyMzRDUiAqLworCVBPUlRDUigyMzUsIDB4ZTYwNTMwZWIpLCAvKiBQT1JUMjM1Q1IgKi8KKwlQT1JUQ1IoMjM2LCAweGU2MDUzMGVjKSwgLyogUE9SVDIzNkNSICovCisJUE9SVENSKDIzNywgMHhlNjA1MzBlZCksIC8qIFBPUlQyMzdDUiAqLworCVBPUlRDUigyMzgsIDB4ZTYwNTMwZWUpLCAvKiBQT1JUMjM4Q1IgKi8KKwlQT1JUQ1IoMjM5LCAweGU2MDUzMGVmKSwgLyogUE9SVDIzOUNSICovCisKKwlQT1JUQ1IoMjQwLCAweGU2MDUzMGYwKSwgLyogUE9SVDI0MENSICovCisJUE9SVENSKDI0MSwgMHhlNjA1MzBmMSksIC8qIFBPUlQyNDFDUiAqLworCVBPUlRDUigyNDIsIDB4ZTYwNTMwZjIpLCAvKiBQT1JUMjQyQ1IgKi8KKwlQT1JUQ1IoMjQzLCAweGU2MDUzMGYzKSwgLyogUE9SVDI0M0NSICovCisJUE9SVENSKDI0NCwgMHhlNjA1MzBmNCksIC8qIFBPUlQyNDRDUiAqLworCVBPUlRDUigyNDUsIDB4ZTYwNTMwZjUpLCAvKiBQT1JUMjQ1Q1IgKi8KKwlQT1JUQ1IoMjQ2LCAweGU2MDUzMGY2KSwgLyogUE9SVDI0NkNSICovCisJUE9SVENSKDI0NywgMHhlNjA1MzBmNyksIC8qIFBPUlQyNDdDUiAqLworCVBPUlRDUigyNDgsIDB4ZTYwNTMwZjgpLCAvKiBQT1JUMjQ4Q1IgKi8KKwlQT1JUQ1IoMjQ5LCAweGU2MDUzMGY5KSwgLyogUE9SVDI0OUNSICovCisKKwlQT1JUQ1IoMjUwLCAweGU2MDUzMGZhKSwgLyogUE9SVDI1MENSICovCisJUE9SVENSKDI1MSwgMHhlNjA1MzBmYiksIC8qIFBPUlQyNTFDUiAqLworCVBPUlRDUigyNTIsIDB4ZTYwNTMwZmMpLCAvKiBQT1JUMjUyQ1IgKi8KKwlQT1JUQ1IoMjUzLCAweGU2MDUzMGZkKSwgLyogUE9SVDI1M0NSICovCisJUE9SVENSKDI1NCwgMHhlNjA1MzBmZSksIC8qIFBPUlQyNTRDUiAqLworCVBPUlRDUigyNTUsIDB4ZTYwNTMwZmYpLCAvKiBQT1JUMjU1Q1IgKi8KKwlQT1JUQ1IoMjU2LCAweGU2MDUzMTAwKSwgLyogUE9SVDI1NkNSICovCisJUE9SVENSKDI1NywgMHhlNjA1MzEwMSksIC8qIFBPUlQyNTdDUiAqLworCVBPUlRDUigyNTgsIDB4ZTYwNTMxMDIpLCAvKiBQT1JUMjU4Q1IgKi8KKwlQT1JUQ1IoMjU5LCAweGU2MDUzMTAzKSwgLyogUE9SVDI1OUNSICovCisKKwlQT1JUQ1IoMjYwLCAweGU2MDUzMTA0KSwgLyogUE9SVDI2MENSICovCisJUE9SVENSKDI2MSwgMHhlNjA1MzEwNSksIC8qIFBPUlQyNjFDUiAqLworCVBPUlRDUigyNjIsIDB4ZTYwNTMxMDYpLCAvKiBQT1JUMjYyQ1IgKi8KKwlQT1JUQ1IoMjYzLCAweGU2MDUzMTA3KSwgLyogUE9SVDI2M0NSICovCisJUE9SVENSKDI2NCwgMHhlNjA1MzEwOCksIC8qIFBPUlQyNjRDUiAqLworCVBPUlRDUigyNjUsIDB4ZTYwNTMxMDkpLCAvKiBQT1JUMjY1Q1IgKi8KKwlQT1JUQ1IoMjY2LCAweGU2MDUzMTBhKSwgLyogUE9SVDI2NkNSICovCisJUE9SVENSKDI2NywgMHhlNjA1MzEwYiksIC8qIFBPUlQyNjdDUiAqLworCVBPUlRDUigyNjgsIDB4ZTYwNTMxMGMpLCAvKiBQT1JUMjY4Q1IgKi8KKwlQT1JUQ1IoMjY5LCAweGU2MDUzMTBkKSwgLyogUE9SVDI2OUNSICovCisKKwlQT1JUQ1IoMjcwLCAweGU2MDUzMTBlKSwgLyogUE9SVDI3MENSICovCisJUE9SVENSKDI3MSwgMHhlNjA1MzEwZiksIC8qIFBPUlQyNzFDUiAqLworCVBPUlRDUigyNzIsIDB4ZTYwNTMxMTApLCAvKiBQT1JUMjcyQ1IgKi8KKwlQT1JUQ1IoMjczLCAweGU2MDUzMTExKSwgLyogUE9SVDI3M0NSICovCisJUE9SVENSKDI3NCwgMHhlNjA1MzExMiksIC8qIFBPUlQyNzRDUiAqLworCVBPUlRDUigyNzUsIDB4ZTYwNTMxMTMpLCAvKiBQT1JUMjc1Q1IgKi8KKwlQT1JUQ1IoMjc2LCAweGU2MDUzMTE0KSwgLyogUE9SVDI3NkNSICovCisJUE9SVENSKDI3NywgMHhlNjA1MzExNSksIC8qIFBPUlQyNzdDUiAqLworCVBPUlRDUigyNzgsIDB4ZTYwNTMxMTYpLCAvKiBQT1JUMjc4Q1IgKi8KKwlQT1JUQ1IoMjc5LCAweGU2MDUzMTE3KSwgLyogUE9SVDI3OUNSICovCisKKwlQT1JUQ1IoMjgwLCAweGU2MDUzMTE4KSwgLyogUE9SVDI4MENSICovCisJUE9SVENSKDI4MSwgMHhlNjA1MzExOSksIC8qIFBPUlQyODFDUiAqLworCVBPUlRDUigyODIsIDB4ZTYwNTMxMWEpLCAvKiBQT1JUMjgyQ1IgKi8KKworCVBPUlRDUigyODgsIDB4ZTYwNTIxMjApLCAvKiBQT1JUMjg4Q1IgKi8KKwlQT1JUQ1IoMjg5LCAweGU2MDUyMTIxKSwgLyogUE9SVDI4OUNSICovCisKKwlQT1JUQ1IoMjkwLCAweGU2MDUyMTIyKSwgLyogUE9SVDI5MENSICovCisJUE9SVENSKDI5MSwgMHhlNjA1MjEyMyksIC8qIFBPUlQyOTFDUiAqLworCVBPUlRDUigyOTIsIDB4ZTYwNTIxMjQpLCAvKiBQT1JUMjkyQ1IgKi8KKwlQT1JUQ1IoMjkzLCAweGU2MDUyMTI1KSwgLyogUE9SVDI5M0NSICovCisJUE9SVENSKDI5NCwgMHhlNjA1MjEyNiksIC8qIFBPUlQyOTRDUiAqLworCVBPUlRDUigyOTUsIDB4ZTYwNTIxMjcpLCAvKiBQT1JUMjk1Q1IgKi8KKwlQT1JUQ1IoMjk2LCAweGU2MDUyMTI4KSwgLyogUE9SVDI5NkNSICovCisJUE9SVENSKDI5NywgMHhlNjA1MjEyOSksIC8qIFBPUlQyOTdDUiAqLworCVBPUlRDUigyOTgsIDB4ZTYwNTIxMmEpLCAvKiBQT1JUMjk4Q1IgKi8KKwlQT1JUQ1IoMjk5LCAweGU2MDUyMTJiKSwgLyogUE9SVDI5OUNSICovCisKKwlQT1JUQ1IoMzAwLCAweGU2MDUyMTJjKSwgLyogUE9SVDMwMENSICovCisJUE9SVENSKDMwMSwgMHhlNjA1MjEyZCksIC8qIFBPUlQzMDFDUiAqLworCVBPUlRDUigzMDIsIDB4ZTYwNTIxMmUpLCAvKiBQT1JUMzAyQ1IgKi8KKwlQT1JUQ1IoMzAzLCAweGU2MDUyMTJmKSwgLyogUE9SVDMwM0NSICovCisJUE9SVENSKDMwNCwgMHhlNjA1MjEzMCksIC8qIFBPUlQzMDRDUiAqLworCVBPUlRDUigzMDUsIDB4ZTYwNTIxMzEpLCAvKiBQT1JUMzA1Q1IgKi8KKwlQT1JUQ1IoMzA2LCAweGU2MDUyMTMyKSwgLyogUE9SVDMwNkNSICovCisJUE9SVENSKDMwNywgMHhlNjA1MjEzMyksIC8qIFBPUlQzMDdDUiAqLworCVBPUlRDUigzMDgsIDB4ZTYwNTIxMzQpLCAvKiBQT1JUMzA4Q1IgKi8KKwlQT1JUQ1IoMzA5LCAweGU2MDUyMTM1KSwgLyogUE9SVDMwOUNSICovCisKKwl7IFBJTk1VWF9DRkdfUkVHKCJNU0VMMkNSIiwgMHhlNjA1ODAxYywgMzIsIDEpIHsKKwkJCTAsIDAsCisJCQkwLCAwLAorCQkJMCwgMCwKKwkJCTAsIDAsCisJCQkwLCAwLAorCQkJMCwgMCwKKwkJCTAsIDAsCisJCQkwLCAwLAorCQkJMCwgMCwKKwkJCTAsIDAsCisJCQkwLCAwLAorCQkJMCwgMCwKKwkJCU1TRUwyQ1JfTVNFTDE5XzAsIE1TRUwyQ1JfTVNFTDE5XzEsCisJCQlNU0VMMkNSX01TRUwxOF8wLCBNU0VMMkNSX01TRUwxOF8xLAorCQkJTVNFTDJDUl9NU0VMMTdfMCwgTVNFTDJDUl9NU0VMMTdfMSwKKwkJCU1TRUwyQ1JfTVNFTDE2XzAsIE1TRUwyQ1JfTVNFTDE2XzEsCisJCQkwLCAwLAorCQkJTVNFTDJDUl9NU0VMMTRfMCwgTVNFTDJDUl9NU0VMMTRfMSwKKwkJCU1TRUwyQ1JfTVNFTDEzXzAsIE1TRUwyQ1JfTVNFTDEzXzEsCisJCQlNU0VMMkNSX01TRUwxMl8wLCBNU0VMMkNSX01TRUwxMl8xLAorCQkJTVNFTDJDUl9NU0VMMTFfMCwgTVNFTDJDUl9NU0VMMTFfMSwKKwkJCU1TRUwyQ1JfTVNFTDEwXzAsIE1TRUwyQ1JfTVNFTDEwXzEsCisJCQlNU0VMMkNSX01TRUw5XzAsIE1TRUwyQ1JfTVNFTDlfMSwKKwkJCU1TRUwyQ1JfTVNFTDhfMCwgTVNFTDJDUl9NU0VMOF8xLAorCQkJTVNFTDJDUl9NU0VMN18wLCBNU0VMMkNSX01TRUw3XzEsCisJCQlNU0VMMkNSX01TRUw2XzAsIE1TRUwyQ1JfTVNFTDZfMSwKKwkJCU1TRUwyQ1JfTVNFTDVfMCwgTVNFTDJDUl9NU0VMNV8xLAorCQkJTVNFTDJDUl9NU0VMNF8wLCBNU0VMMkNSX01TRUw0XzEsCisJCQlNU0VMMkNSX01TRUwzXzAsIE1TRUwyQ1JfTVNFTDNfMSwKKwkJCU1TRUwyQ1JfTVNFTDJfMCwgTVNFTDJDUl9NU0VMMl8xLAorCQkJTVNFTDJDUl9NU0VMMV8wLCBNU0VMMkNSX01TRUwxXzEsCisJCQlNU0VMMkNSX01TRUwwXzAsIE1TRUwyQ1JfTVNFTDBfMSwKKwkJfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiTVNFTDNDUiIsIDB4ZTYwNTgwMjAsIDMyLCAxKSB7CisJCQkwLCAwLAorCQkJMCwgMCwKKwkJCTAsIDAsCisJCQlNU0VMM0NSX01TRUwyOF8wLCBNU0VMM0NSX01TRUwyOF8xLAorCQkJMCwgMCwKKwkJCTAsIDAsCisJCQkwLCAwLAorCQkJMCwgMCwKKwkJCTAsIDAsCisJCQkwLCAwLAorCQkJMCwgMCwKKwkJCTAsIDAsCisJCQkwLCAwLAorCQkJMCwgMCwKKwkJCTAsIDAsCisJCQkwLCAwLAorCQkJTVNFTDNDUl9NU0VMMTVfMCwgTVNFTDNDUl9NU0VMMTVfMSwKKwkJCTAsIDAsCisJCQkwLCAwLAorCQkJMCwgMCwKKwkJCU1TRUwzQ1JfTVNFTDExXzAsIE1TRUwzQ1JfTVNFTDExXzEsCisJCQkwLCAwLAorCQkJTVNFTDNDUl9NU0VMOV8wLCBNU0VMM0NSX01TRUw5XzEsCisJCQkwLCAwLAorCQkJMCwgMCwKKwkJCU1TRUwzQ1JfTVNFTDZfMCwgTVNFTDNDUl9NU0VMNl8xLAorCQkJMCwgMCwKKwkJCTAsIDAsCisJCQkwLCAwLAorCQkJTVNFTDNDUl9NU0VMMl8wLCBNU0VMM0NSX01TRUwyXzEsCisJCQkwLCAwLAorCQkJMCwgMCwKKwkJfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiTVNFTDRDUiIsIDB4ZTYwNTgwMjQsIDMyLCAxKSB7CisJCQkwLCAwLAorCQkJMCwgMCwKKwkJCU1TRUw0Q1JfTVNFTDI5XzAsIE1TRUw0Q1JfTVNFTDI5XzEsCisJCQkwLCAwLAorCQkJTVNFTDRDUl9NU0VMMjdfMCwgTVNFTDRDUl9NU0VMMjdfMSwKKwkJCU1TRUw0Q1JfTVNFTDI2XzAsIE1TRUw0Q1JfTVNFTDI2XzEsCisJCQkwLCAwLAorCQkJMCwgMCwKKwkJCTAsIDAsCisJCQlNU0VMNENSX01TRUwyMl8wLCBNU0VMNENSX01TRUwyMl8xLAorCQkJTVNFTDRDUl9NU0VMMjFfMCwgTVNFTDRDUl9NU0VMMjFfMSwKKwkJCU1TRUw0Q1JfTVNFTDIwXzAsIE1TRUw0Q1JfTVNFTDIwXzEsCisJCQlNU0VMNENSX01TRUwxOV8wLCBNU0VMNENSX01TRUwxOV8xLAorCQkJMCwgMCwKKwkJCTAsIDAsCisJCQkwLCAwLAorCQkJTVNFTDRDUl9NU0VMMTVfMCwgTVNFTDRDUl9NU0VMMTVfMSwKKwkJCTAsIDAsCisJCQlNU0VMNENSX01TRUwxM18wLCBNU0VMNENSX01TRUwxM18xLAorCQkJTVNFTDRDUl9NU0VMMTJfMCwgTVNFTDRDUl9NU0VMMTJfMSwKKwkJCU1TRUw0Q1JfTVNFTDExXzAsIE1TRUw0Q1JfTVNFTDExXzEsCisJCQlNU0VMNENSX01TRUwxMF8wLCBNU0VMNENSX01TRUwxMF8xLAorCQkJTVNFTDRDUl9NU0VMOV8wLCBNU0VMNENSX01TRUw5XzEsCisJCQlNU0VMNENSX01TRUw4XzAsIE1TRUw0Q1JfTVNFTDhfMSwKKwkJCU1TRUw0Q1JfTVNFTDdfMCwgTVNFTDRDUl9NU0VMN18xLAorCQkJMCwgMCwKKwkJCTAsIDAsCisJCQlNU0VMNENSX01TRUw0XzAsIE1TRUw0Q1JfTVNFTDRfMSwKKwkJCTAsIDAsCisJCQkwLCAwLAorCQkJTVNFTDRDUl9NU0VMMV8wLCBNU0VMNENSX01TRUwxXzEsCisJCQkwLCAwLAorCQl9CisJfSwKKwl7IH0sCit9OworCitzdGF0aWMgc3RydWN0IHBpbm11eF9kYXRhX3JlZyBwaW5tdXhfZGF0YV9yZWdzW10gPSB7CisJeyBQSU5NVVhfREFUQV9SRUcoIlBPUlRMMDMxXzAwMERSIiwgMHhlNjA1NDAwMCwgMzIpIHsKKwkJCVBPUlQzMV9EQVRBLCBQT1JUMzBfREFUQSwgUE9SVDI5X0RBVEEsIFBPUlQyOF9EQVRBLAorCQkJUE9SVDI3X0RBVEEsIFBPUlQyNl9EQVRBLCBQT1JUMjVfREFUQSwgUE9SVDI0X0RBVEEsCisJCQlQT1JUMjNfREFUQSwgUE9SVDIyX0RBVEEsIFBPUlQyMV9EQVRBLCBQT1JUMjBfREFUQSwKKwkJCVBPUlQxOV9EQVRBLCBQT1JUMThfREFUQSwgUE9SVDE3X0RBVEEsIFBPUlQxNl9EQVRBLAorCQkJUE9SVDE1X0RBVEEsIFBPUlQxNF9EQVRBLCBQT1JUMTNfREFUQSwgUE9SVDEyX0RBVEEsCisJCQlQT1JUMTFfREFUQSwgUE9SVDEwX0RBVEEsIFBPUlQ5X0RBVEEsIFBPUlQ4X0RBVEEsCisJCQlQT1JUN19EQVRBLCBQT1JUNl9EQVRBLCBQT1JUNV9EQVRBLCBQT1JUNF9EQVRBLAorCQkJUE9SVDNfREFUQSwgUE9SVDJfREFUQSwgUE9SVDFfREFUQSwgUE9SVDBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUE9SVEQwNjNfMDMyRFIiLCAweGU2MDU1MDAwLCAzMikgeworCQkJUE9SVDYzX0RBVEEsIFBPUlQ2Ml9EQVRBLCBQT1JUNjFfREFUQSwgUE9SVDYwX0RBVEEsCisJCQlQT1JUNTlfREFUQSwgUE9SVDU4X0RBVEEsIFBPUlQ1N19EQVRBLCBQT1JUNTZfREFUQSwKKwkJCVBPUlQ1NV9EQVRBLCBQT1JUNTRfREFUQSwgUE9SVDUzX0RBVEEsIFBPUlQ1Ml9EQVRBLAorCQkJUE9SVDUxX0RBVEEsIFBPUlQ1MF9EQVRBLCBQT1JUNDlfREFUQSwgUE9SVDQ4X0RBVEEsCisJCQlQT1JUNDdfREFUQSwgUE9SVDQ2X0RBVEEsIFBPUlQ0NV9EQVRBLCBQT1JUNDRfREFUQSwKKwkJCVBPUlQ0M19EQVRBLCBQT1JUNDJfREFUQSwgUE9SVDQxX0RBVEEsIFBPUlQ0MF9EQVRBLAorCQkJUE9SVDM5X0RBVEEsIFBPUlQzOF9EQVRBLCBQT1JUMzdfREFUQSwgUE9SVDM2X0RBVEEsCisJCQlQT1JUMzVfREFUQSwgUE9SVDM0X0RBVEEsIFBPUlQzM19EQVRBLCBQT1JUMzJfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUE9SVEQwOTVfMDY0RFIiLCAweGU2MDU1MDA0LCAzMikgeworCQkJUE9SVDk1X0RBVEEsIFBPUlQ5NF9EQVRBLCBQT1JUOTNfREFUQSwgUE9SVDkyX0RBVEEsCisJCQlQT1JUOTFfREFUQSwgUE9SVDkwX0RBVEEsIFBPUlQ4OV9EQVRBLCBQT1JUODhfREFUQSwKKwkJCVBPUlQ4N19EQVRBLCBQT1JUODZfREFUQSwgUE9SVDg1X0RBVEEsIFBPUlQ4NF9EQVRBLAorCQkJUE9SVDgzX0RBVEEsIFBPUlQ4Ml9EQVRBLCBQT1JUODFfREFUQSwgUE9SVDgwX0RBVEEsCisJCQlQT1JUNzlfREFUQSwgUE9SVDc4X0RBVEEsIFBPUlQ3N19EQVRBLCBQT1JUNzZfREFUQSwKKwkJCVBPUlQ3NV9EQVRBLCBQT1JUNzRfREFUQSwgUE9SVDczX0RBVEEsIFBPUlQ3Ml9EQVRBLAorCQkJUE9SVDcxX0RBVEEsIFBPUlQ3MF9EQVRBLCBQT1JUNjlfREFUQSwgUE9SVDY4X0RBVEEsCisJCQlQT1JUNjdfREFUQSwgUE9SVDY2X0RBVEEsIFBPUlQ2NV9EQVRBLCBQT1JUNjRfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUE9SVFIxMjdfMDk2RFIiLCAweGU2MDU2MDAwLCAzMikgeworCQkJMCwgMCwgMCwgMCwKKwkJCTAsIDAsIDAsIDAsCisJCQkwLCBQT1JUMTE4X0RBVEEsIFBPUlQxMTdfREFUQSwgUE9SVDExNl9EQVRBLAorCQkJUE9SVDExNV9EQVRBLCBQT1JUMTE0X0RBVEEsIFBPUlQxMTNfREFUQSwgUE9SVDExMl9EQVRBLAorCQkJUE9SVDExMV9EQVRBLCBQT1JUMTEwX0RBVEEsIFBPUlQxMDlfREFUQSwgUE9SVDEwOF9EQVRBLAorCQkJUE9SVDEwN19EQVRBLCBQT1JUMTA2X0RBVEEsIFBPUlQxMDVfREFUQSwgUE9SVDEwNF9EQVRBLAorCQkJUE9SVDEwM19EQVRBLCBQT1JUMTAyX0RBVEEsIFBPUlQxMDFfREFUQSwgUE9SVDEwMF9EQVRBLAorCQkJUE9SVDk5X0RBVEEsIFBPUlQ5OF9EQVRBLCBQT1JUOTdfREFUQSwgUE9SVDk2X0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBPUlRSMTU5XzEyOERSIiwgMHhlNjA1NjAwNCwgMzIpIHsKKwkJCVBPUlQxNTlfREFUQSwgUE9SVDE1OF9EQVRBLCBQT1JUMTU3X0RBVEEsIFBPUlQxNTZfREFUQSwKKwkJCVBPUlQxNTVfREFUQSwgUE9SVDE1NF9EQVRBLCBQT1JUMTUzX0RBVEEsIFBPUlQxNTJfREFUQSwKKwkJCVBPUlQxNTFfREFUQSwgUE9SVDE1MF9EQVRBLCBQT1JUMTQ5X0RBVEEsIFBPUlQxNDhfREFUQSwKKwkJCVBPUlQxNDdfREFUQSwgUE9SVDE0Nl9EQVRBLCBQT1JUMTQ1X0RBVEEsIFBPUlQxNDRfREFUQSwKKwkJCVBPUlQxNDNfREFUQSwgUE9SVDE0Ml9EQVRBLCBQT1JUMTQxX0RBVEEsIFBPUlQxNDBfREFUQSwKKwkJCVBPUlQxMzlfREFUQSwgUE9SVDEzOF9EQVRBLCBQT1JUMTM3X0RBVEEsIFBPUlQxMzZfREFUQSwKKwkJCVBPUlQxMzVfREFUQSwgUE9SVDEzNF9EQVRBLCBQT1JUMTMzX0RBVEEsIFBPUlQxMzJfREFUQSwKKwkJCVBPUlQxMzFfREFUQSwgUE9SVDEzMF9EQVRBLCBQT1JUMTI5X0RBVEEsIFBPUlQxMjhfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUE9SVFIxOTFfMTYwRFIiLCAweGU2MDU2MDA4LCAzMikgeworCQkJMCwgMCwgMCwgMCwKKwkJCTAsIDAsIDAsIDAsCisJCQkwLCAwLCAwLCAwLAorCQkJMCwgMCwgMCwgMCwKKwkJCTAsIDAsIDAsIDAsCisJCQkwLCAwLCAwLCAwLAorCQkJMCwgMCwgMCwgUE9SVDE2NF9EQVRBLAorCQkJUE9SVDE2M19EQVRBLCBQT1JUMTYyX0RBVEEsIFBPUlQxNjFfREFUQSwgUE9SVDE2MF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQT1JUUjIyM18xOTJEUiIsIDB4ZTYwNTYwMEMsIDMyKSB7CisJCQlQT1JUMjIzX0RBVEEsIFBPUlQyMjJfREFUQSwgUE9SVDIyMV9EQVRBLCBQT1JUMjIwX0RBVEEsCisJCQlQT1JUMjE5X0RBVEEsIFBPUlQyMThfREFUQSwgUE9SVDIxN19EQVRBLCBQT1JUMjE2X0RBVEEsCisJCQlQT1JUMjE1X0RBVEEsIFBPUlQyMTRfREFUQSwgUE9SVDIxM19EQVRBLCBQT1JUMjEyX0RBVEEsCisJCQlQT1JUMjExX0RBVEEsIFBPUlQyMTBfREFUQSwgUE9SVDIwOV9EQVRBLCBQT1JUMjA4X0RBVEEsCisJCQlQT1JUMjA3X0RBVEEsIFBPUlQyMDZfREFUQSwgUE9SVDIwNV9EQVRBLCBQT1JUMjA0X0RBVEEsCisJCQlQT1JUMjAzX0RBVEEsIFBPUlQyMDJfREFUQSwgUE9SVDIwMV9EQVRBLCBQT1JUMjAwX0RBVEEsCisJCQlQT1JUMTk5X0RBVEEsIFBPUlQxOThfREFUQSwgUE9SVDE5N19EQVRBLCBQT1JUMTk2X0RBVEEsCisJCQlQT1JUMTk1X0RBVEEsIFBPUlQxOTRfREFUQSwgUE9SVDE5M19EQVRBLCBQT1JUMTkyX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBPUlRVMjU1XzIyNERSIiwgMHhlNjA1NzAwMCwgMzIpIHsKKwkJCVBPUlQyNTVfREFUQSwgUE9SVDI1NF9EQVRBLCBQT1JUMjUzX0RBVEEsIFBPUlQyNTJfREFUQSwKKwkJCVBPUlQyNTFfREFUQSwgUE9SVDI1MF9EQVRBLCBQT1JUMjQ5X0RBVEEsIFBPUlQyNDhfREFUQSwKKwkJCVBPUlQyNDdfREFUQSwgUE9SVDI0Nl9EQVRBLCBQT1JUMjQ1X0RBVEEsIFBPUlQyNDRfREFUQSwKKwkJCVBPUlQyNDNfREFUQSwgUE9SVDI0Ml9EQVRBLCBQT1JUMjQxX0RBVEEsIFBPUlQyNDBfREFUQSwKKwkJCVBPUlQyMzlfREFUQSwgUE9SVDIzOF9EQVRBLCBQT1JUMjM3X0RBVEEsIFBPUlQyMzZfREFUQSwKKwkJCVBPUlQyMzVfREFUQSwgUE9SVDIzNF9EQVRBLCBQT1JUMjMzX0RBVEEsIFBPUlQyMzJfREFUQSwKKwkJCVBPUlQyMzFfREFUQSwgUE9SVDIzMF9EQVRBLCBQT1JUMjI5X0RBVEEsIFBPUlQyMjhfREFUQSwKKwkJCVBPUlQyMjdfREFUQSwgUE9SVDIyNl9EQVRBLCBQT1JUMjI1X0RBVEEsIFBPUlQyMjRfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUE9SVFUyODdfMjU2RFIiLCAweGU2MDU3MDA0LCAzMikgeworCQkJMCwgMCwgMCwgMCwKKwkJCTAsIFBPUlQyODJfREFUQSwgUE9SVDI4MV9EQVRBLCBQT1JUMjgwX0RBVEEsCisJCQlQT1JUMjc5X0RBVEEsIFBPUlQyNzhfREFUQSwgUE9SVDI3N19EQVRBLCBQT1JUMjc2X0RBVEEsCisJCQlQT1JUMjc1X0RBVEEsIFBPUlQyNzRfREFUQSwgUE9SVDI3M19EQVRBLCBQT1JUMjcyX0RBVEEsCisJCQlQT1JUMjcxX0RBVEEsIFBPUlQyNzBfREFUQSwgUE9SVDI2OV9EQVRBLCBQT1JUMjY4X0RBVEEsCisJCQlQT1JUMjY3X0RBVEEsIFBPUlQyNjZfREFUQSwgUE9SVDI2NV9EQVRBLCBQT1JUMjY0X0RBVEEsCisJCQlQT1JUMjYzX0RBVEEsIFBPUlQyNjJfREFUQSwgUE9SVDI2MV9EQVRBLCBQT1JUMjYwX0RBVEEsCisJCQlQT1JUMjU5X0RBVEEsIFBPUlQyNThfREFUQSwgUE9SVDI1N19EQVRBLCBQT1JUMjU2X0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBPUlRSMzE5XzI4OERSIiwgMHhlNjA1NjAxMCwgMzIpIHsKKwkJCTAsIDAsIDAsIDAsCisJCQkwLCAwLCAwLCAwLAorCQkJMCwgMCwgUE9SVDMwOV9EQVRBLCBQT1JUMzA4X0RBVEEsCisJCQlQT1JUMzA3X0RBVEEsIFBPUlQzMDZfREFUQSwgUE9SVDMwNV9EQVRBLCBQT1JUMzA0X0RBVEEsCisJCQlQT1JUMzAzX0RBVEEsIFBPUlQzMDJfREFUQSwgUE9SVDMwMV9EQVRBLCBQT1JUMzAwX0RBVEEsCisJCQlQT1JUMjk5X0RBVEEsIFBPUlQyOThfREFUQSwgUE9SVDI5N19EQVRBLCBQT1JUMjk2X0RBVEEsCisJCQlQT1JUMjk1X0RBVEEsIFBPUlQyOTRfREFUQSwgUE9SVDI5M19EQVRBLCBQT1JUMjkyX0RBVEEsCisJCQlQT1JUMjkxX0RBVEEsIFBPUlQyOTBfREFUQSwgUE9SVDI4OV9EQVRBLCBQT1JUMjg4X0RBVEEgfQorCX0sCisJeyB9LAorfTsKKworc3RhdGljIHN0cnVjdCBwaW5tdXhfaW5mbyBzaDczYTBfcGlubXV4X2luZm8gPSB7CisJLm5hbWUgPSAic2g3M2EwX3BmYyIsCisJLnJlc2VydmVkX2lkID0gUElOTVVYX1JFU0VSVkVELAorCS5kYXRhID0geyBQSU5NVVhfREFUQV9CRUdJTiwgUElOTVVYX0RBVEFfRU5EIH0sCisJLmlucHV0ID0geyBQSU5NVVhfSU5QVVRfQkVHSU4sIFBJTk1VWF9JTlBVVF9FTkQgfSwKKwkuaW5wdXRfcHUgPSB7IFBJTk1VWF9JTlBVVF9QVUxMVVBfQkVHSU4sIFBJTk1VWF9JTlBVVF9QVUxMVVBfRU5EIH0sCisJLmlucHV0X3BkID0geyBQSU5NVVhfSU5QVVRfUFVMTERPV05fQkVHSU4sIFBJTk1VWF9JTlBVVF9QVUxMRE9XTl9FTkQgfSwKKwkub3V0cHV0ID0geyBQSU5NVVhfT1VUUFVUX0JFR0lOLCBQSU5NVVhfT1VUUFVUX0VORCB9LAorCS5tYXJrID0geyBQSU5NVVhfTUFSS19CRUdJTiwgUElOTVVYX01BUktfRU5EIH0sCisJLmZ1bmN0aW9uID0geyBQSU5NVVhfRlVOQ1RJT05fQkVHSU4sIFBJTk1VWF9GVU5DVElPTl9FTkQgfSwKKworCS5maXJzdF9ncGlvID0gR1BJT19QT1JUMCwKKwkubGFzdF9ncGlvID0gR1BJT19GTl9GU0lBSVNMRF9QVSwKKworCS5ncGlvcyA9IHBpbm11eF9ncGlvcywKKwkuY2ZnX3JlZ3MgPSBwaW5tdXhfY29uZmlnX3JlZ3MsCisJLmRhdGFfcmVncyA9IHBpbm11eF9kYXRhX3JlZ3MsCisKKwkuZ3Bpb19kYXRhID0gcGlubXV4X2RhdGEsCisJLmdwaW9fZGF0YV9zaXplID0gQVJSQVlfU0laRShwaW5tdXhfZGF0YSksCit9OworCit2b2lkIHNoNzNhMF9waW5tdXhfaW5pdCh2b2lkKQoreworCXJlZ2lzdGVyX3Bpbm11eCgmc2g3M2EwX3Bpbm11eF9pbmZvKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvcGxhdHNtcC5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9wbGF0c21wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjVlODc5YgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvcGxhdHNtcC5jCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBTTVAgc3VwcG9ydCBmb3IgUi1Nb2JpbGUgLyBTSC1Nb2JpbGUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgIE1hZ251cyBEYW1tCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgIFBhdWwgTXVuZHQKKyAqCisgKiBCYXNlZCBvbiB2ZXhwcmVzcywgQ29weXJpZ2h0IChDKSAyMDAyIEFSTSBMdGQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGFzbS9sb2NhbHRpbWVyLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgorCitzdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBzaG1vYmlsZV9zbXBfZ2V0X2NvcmVfY291bnQodm9pZCkKK3sKKwlpZiAobWFjaGluZV9pc19hZzVldm0oKSkKKwkJcmV0dXJuIHNoNzNhMF9nZXRfY29yZV9jb3VudCgpOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBzaG1vYmlsZV9zbXBfcHJlcGFyZV9jcHVzKHZvaWQpCit7CisJaWYgKG1hY2hpbmVfaXNfYWc1ZXZtKCkpCisJCXNoNzNhMF9zbXBfcHJlcGFyZV9jcHVzKCk7Cit9CisKK3ZvaWQgX19jcHVpbml0IHBsYXRmb3JtX3NlY29uZGFyeV9pbml0KHVuc2lnbmVkIGludCBjcHUpCit7CisJdHJhY2VfaGFyZGlycXNfb2ZmKCk7CisKKwlpZiAobWFjaGluZV9pc19hZzVldm0oKSkKKwkJc2g3M2EwX3NlY29uZGFyeV9pbml0KGNwdSk7Cit9CisKK2ludCBfX2NwdWluaXQgYm9vdF9zZWNvbmRhcnkodW5zaWduZWQgaW50IGNwdSwgc3RydWN0IHRhc2tfc3RydWN0ICppZGxlKQoreworCWlmIChtYWNoaW5lX2lzX2FnNWV2bSgpKQorCQlyZXR1cm4gc2g3M2EwX2Jvb3Rfc2Vjb25kYXJ5KGNwdSk7CisKKwlyZXR1cm4gLUVOT1NZUzsKK30KKwordm9pZCBfX2luaXQgc21wX2luaXRfY3B1cyh2b2lkKQoreworCXVuc2lnbmVkIGludCBuY29yZXMgPSBzaG1vYmlsZV9zbXBfZ2V0X2NvcmVfY291bnQoKTsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBuY29yZXM7IGkrKykKKwkJc2V0X2NwdV9wb3NzaWJsZShpLCB0cnVlKTsKK30KKwordm9pZCBfX2luaXQgcGxhdGZvcm1fc21wX3ByZXBhcmVfY3B1cyh1bnNpZ25lZCBpbnQgbWF4X2NwdXMpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbWF4X2NwdXM7IGkrKykKKwkJc2V0X2NwdV9wcmVzZW50KGksIHRydWUpOworCisJc2htb2JpbGVfc21wX3ByZXBhcmVfY3B1cygpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1zaDczNzIuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtc2g3MzcyLmMKaW5kZXggNTY0YTZkMC4uMmUzZTExZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1zaDczNzIuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXNoNzM3Mi5jCkBAIC00MTYsNiArNDE2LDE2IEBACiAJCS5hZGRyCQk9IDB4ZTY4NzAwMzAsCiAJCS5jaGNyCQk9IERNX0lOQyB8IFNNX0ZJWCB8IDB4ODAwIHwgVFNfSU5ERVgyVkFMKFhNSVRfU1pfMTZCSVQpLAogCQkubWlkX3JpZAk9IDB4Y2UsCisJfSwgeworCQkuc2xhdmVfaWQJPSBTSERNQV9TTEFWRV9NTUNJRl9UWCwKKwkJLmFkZHIJCT0gMHhlNmJkMDAzNCwKKwkJLmNoY3IJCT0gRE1fRklYIHwgU01fSU5DIHwgMHg4MDAgfCBUU19JTkRFWDJWQUwoWE1JVF9TWl8zMkJJVCksCisJCS5taWRfcmlkCT0gMHhkMSwKKwl9LCB7CisJCS5zbGF2ZV9pZAk9IFNIRE1BX1NMQVZFX01NQ0lGX1JYLAorCQkuYWRkcgkJPSAweGU2YmQwMDM0LAorCQkuY2hjcgkJPSBETV9JTkMgfCBTTV9GSVggfCAweDgwMCB8IFRTX0lOREVYMlZBTChYTUlUX1NaXzMyQklUKSwKKwkJLm1pZF9yaWQJPSAweGQyLAogCX0sCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXNoNzNhMC5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1zaDczYTAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWVmZjhiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1zaDczYTAuYwpAQCAtMCwwICsxLDQxMiBAQAorLyoKKyAqIHNoNzNhMCBwcm9jZXNzb3Igc3VwcG9ydAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCAgVGFrYXNoaSBZb3NoaWkKKyAqIENvcHlyaWdodCAoQykgMjAxMCAgTWFnbnVzIERhbW0KKyAqIENvcHlyaWdodCAoQykgMjAwOCAgWW9zaGloaXJvIFNoaW1vZGEKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfc2NpLmg+CisjaW5jbHVkZSA8bGludXgvc2hfaW50Yy5oPgorI2luY2x1ZGUgPGxpbnV4L3NoX3RpbWVyLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorCitzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpZjBfcGxhdGZvcm1fZGF0YSA9IHsKKwkubWFwYmFzZQk9IDB4ZTZjNDAwMDAsCisJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCS50eXBlCQk9IFBPUlRfU0NJRkEsCisJLmlycXMJCT0geyBnaWNfc3BpKDcyKSwgZ2ljX3NwaSg3MiksCisJCQkgICAgZ2ljX3NwaSg3MiksIGdpY19zcGkoNzIpIH0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lmMF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoLXNjaSIsCisJLmlkCQk9IDAsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnNjaWYwX3BsYXRmb3JtX2RhdGEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lmMV9wbGF0Zm9ybV9kYXRhID0geworCS5tYXBiYXNlCT0gMHhlNmM1MDAwMCwKKwkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJLnR5cGUJCT0gUE9SVF9TQ0lGQSwKKwkuaXJxcwkJPSB7IGdpY19zcGkoNzMpLCBnaWNfc3BpKDczKSwKKwkJCSAgICBnaWNfc3BpKDczKSwgZ2ljX3NwaSg3MykgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaWYxX2RldmljZSA9IHsKKwkubmFtZQkJPSAic2gtc2NpIiwKKwkuaWQJCT0gMSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmc2NpZjFfcGxhdGZvcm1fZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaWYyX3BsYXRmb3JtX2RhdGEgPSB7CisJLm1hcGJhc2UJPSAweGU2YzYwMDAwLAorCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKKwkudHlwZQkJPSBQT1JUX1NDSUZBLAorCS5pcnFzCQk9IHsgZ2ljX3NwaSg3NCksIGdpY19zcGkoNzQpLAorCQkJICAgIGdpY19zcGkoNzQpLCBnaWNfc3BpKDc0KSB9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpZjJfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaC1zY2kiLAorCS5pZAkJPSAyLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZzY2lmMl9wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpZjNfcGxhdGZvcm1fZGF0YSA9IHsKKwkubWFwYmFzZQk9IDB4ZTZjNzAwMDAsCisJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCS50eXBlCQk9IFBPUlRfU0NJRkEsCisJLmlycXMJCT0geyBnaWNfc3BpKDc1KSwgZ2ljX3NwaSg3NSksCisJCQkgICAgZ2ljX3NwaSg3NSksIGdpY19zcGkoNzUpIH0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lmM19kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoLXNjaSIsCisJLmlkCQk9IDMsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnNjaWYzX3BsYXRmb3JtX2RhdGEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lmNF9wbGF0Zm9ybV9kYXRhID0geworCS5tYXBiYXNlCT0gMHhlNmM4MDAwMCwKKwkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJLnR5cGUJCT0gUE9SVF9TQ0lGQSwKKwkuaXJxcwkJPSB7IGdpY19zcGkoNzgpLCBnaWNfc3BpKDc4KSwKKwkJCSAgICBnaWNfc3BpKDc4KSwgZ2ljX3NwaSg3OCkgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaWY0X2RldmljZSA9IHsKKwkubmFtZQkJPSAic2gtc2NpIiwKKwkuaWQJCT0gNCwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmc2NpZjRfcGxhdGZvcm1fZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaWY1X3BsYXRmb3JtX2RhdGEgPSB7CisJLm1hcGJhc2UJPSAweGU2Y2IwMDAwLAorCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKKwkudHlwZQkJPSBQT1JUX1NDSUZBLAorCS5pcnFzCQk9IHsgZ2ljX3NwaSg3OSksIGdpY19zcGkoNzkpLAorCQkJICAgIGdpY19zcGkoNzkpLCBnaWNfc3BpKDc5KSB9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpZjVfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaC1zY2kiLAorCS5pZAkJPSA1LAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZzY2lmNV9wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpZjZfcGxhdGZvcm1fZGF0YSA9IHsKKwkubWFwYmFzZQk9IDB4ZTZjYzAwMDAsCisJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCS50eXBlCQk9IFBPUlRfU0NJRkEsCisJLmlycXMJCT0geyBnaWNfc3BpKDE1NiksIGdpY19zcGkoMTU2KSwKKwkJCSAgICBnaWNfc3BpKDE1NiksIGdpY19zcGkoMTU2KSB9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpZjZfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaC1zY2kiLAorCS5pZAkJPSA2LAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZzY2lmNl9wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpZjdfcGxhdGZvcm1fZGF0YSA9IHsKKwkubWFwYmFzZQk9IDB4ZTZjZDAwMDAsCisJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCS50eXBlCQk9IFBPUlRfU0NJRkEsCisJLmlycXMJCT0geyBnaWNfc3BpKDE0MyksIGdpY19zcGkoMTQzKSwKKwkJCSAgICBnaWNfc3BpKDE0MyksIGdpY19zcGkoMTQzKSB9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpZjdfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaC1zY2kiLAorCS5pZAkJPSA3LAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZzY2lmN19wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpZjhfcGxhdGZvcm1fZGF0YSA9IHsKKwkubWFwYmFzZQk9IDB4ZTZjMzAwMDAsCisJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCS50eXBlCQk9IFBPUlRfU0NJRkIsCisJLmlycXMJCT0geyBnaWNfc3BpKDgwKSwgZ2ljX3NwaSg4MCksCisJCQkgICAgZ2ljX3NwaSg4MCksIGdpY19zcGkoODApIH0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lmOF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoLXNjaSIsCisJLmlkCQk9IDgsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnNjaWY4X3BsYXRmb3JtX2RhdGEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnIGNtdDEwX3BsYXRmb3JtX2RhdGEgPSB7CisJLm5hbWUgPSAiQ01UMTAiLAorCS5jaGFubmVsX29mZnNldCA9IDB4MTAsCisJLnRpbWVyX2JpdCA9IDAsCisJLmNsb2NrZXZlbnRfcmF0aW5nID0gMTI1LAorCS5jbG9ja3NvdXJjZV9yYXRpbmcgPSAxMjUsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGNtdDEwX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLm5hbWUJPSAiQ01UMTAiLAorCQkuc3RhcnQJPSAweGU2MTM4MDEwLAorCQkuZW5kCT0gMHhlNjEzODAxYiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IGdpY19zcGkoNjUpLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY210MTBfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaF9jbXQiLAorCS5pZAkJPSAxMCwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YQk9ICZjbXQxMF9wbGF0Zm9ybV9kYXRhLAorCX0sCisJLnJlc291cmNlCT0gY210MTBfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShjbXQxMF9yZXNvdXJjZXMpLAorfTsKKworLyogVE1VICovCitzdGF0aWMgc3RydWN0IHNoX3RpbWVyX2NvbmZpZyB0bXUwMF9wbGF0Zm9ybV9kYXRhID0geworCS5uYW1lID0gIlRNVTAwIiwKKwkuY2hhbm5lbF9vZmZzZXQgPSAweDQsCisJLnRpbWVyX2JpdCA9IDAsCisJLmNsb2NrZXZlbnRfcmF0aW5nID0gMjAwLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0bXUwMF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5uYW1lCT0gIlRNVTAwIiwKKwkJLnN0YXJ0CT0gMHhmZmY2MDAwOCwKKwkJLmVuZAk9IDB4ZmZmNjAwMTMsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBpbnRjc19ldnQyaXJxKDB4MGU4MCksIC8qIFRNVTBfVFVOSTAwICovCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB0bXUwMF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoX3RtdSIsCisJLmlkCQk9IDAsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmdG11MDBfcGxhdGZvcm1fZGF0YSwKKwl9LAorCS5yZXNvdXJjZQk9IHRtdTAwX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodG11MDBfcmVzb3VyY2VzKSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnIHRtdTAxX3BsYXRmb3JtX2RhdGEgPSB7CisJLm5hbWUgPSAiVE1VMDEiLAorCS5jaGFubmVsX29mZnNldCA9IDB4MTAsCisJLnRpbWVyX2JpdCA9IDEsCisJLmNsb2Nrc291cmNlX3JhdGluZyA9IDIwMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdG11MDFfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkubmFtZQk9ICJUTVUwMSIsCisJCS5zdGFydAk9IDB4ZmZmNjAwMTQsCisJCS5lbmQJPSAweGZmZjYwMDFmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gaW50Y3NfZXZ0MmlycSgweDBlYTApLCAvKiBUTVUwX1RVTkkwMSAqLworCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdG11MDFfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaF90bXUiLAorCS5pZAkJPSAxLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnRtdTAxX3BsYXRmb3JtX2RhdGEsCisJfSwKKwkucmVzb3VyY2UJPSB0bXUwMV9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHRtdTAxX3Jlc291cmNlcyksCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGkyYzBfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkubmFtZQk9ICJJSUMwIiwKKwkJLnN0YXJ0CT0gMHhlNjgyMDAwMCwKKwkJLmVuZAk9IDB4ZTY4MjA0MjUgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gZ2ljX3NwaSgxNjcpLAorCQkuZW5kCT0gZ2ljX3NwaSgxNzApLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpMmMxX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLm5hbWUJPSAiSUlDMSIsCisJCS5zdGFydAk9IDB4ZTY4MjIwMDAsCisJCS5lbmQJPSAweGU2ODIyNDI1IC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IGdpY19zcGkoNTEpLAorCQkuZW5kCT0gZ2ljX3NwaSg1NCksCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGkyYzJfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkubmFtZQk9ICJJSUMyIiwKKwkJLnN0YXJ0CT0gMHhlNjgyNDAwMCwKKwkJLmVuZAk9IDB4ZTY4MjQ0MjUgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gZ2ljX3NwaSgxNzEpLAorCQkuZW5kCT0gZ2ljX3NwaSgxNzQpLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpMmMzX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLm5hbWUJPSAiSUlDMyIsCisJCS5zdGFydAk9IDB4ZTY4MjYwMDAsCisJCS5lbmQJPSAweGU2ODI2NDI1IC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IGdpY19zcGkoMTgzKSwKKwkJLmVuZAk9IGdpY19zcGkoMTg2KSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaTJjNF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5uYW1lCT0gIklJQzQiLAorCQkuc3RhcnQJPSAweGU2ODI4MDAwLAorCQkuZW5kCT0gMHhlNjgyODQyNSAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBnaWNfc3BpKDE4NyksCisJCS5lbmQJPSBnaWNfc3BpKDE5MCksCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBpMmMwX2RldmljZSA9IHsKKwkubmFtZQkJPSAiaTJjLXNoX21vYmlsZSIsCisJLmlkCQk9IDAsCisJLnJlc291cmNlCT0gaTJjMF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGkyYzBfcmVzb3VyY2VzKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGkyYzFfZGV2aWNlID0geworCS5uYW1lCQk9ICJpMmMtc2hfbW9iaWxlIiwKKwkuaWQJCT0gMSwKKwkucmVzb3VyY2UJPSBpMmMxX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoaTJjMV9yZXNvdXJjZXMpLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaTJjMl9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImkyYy1zaF9tb2JpbGUiLAorCS5pZAkJPSAyLAorCS5yZXNvdXJjZQk9IGkyYzJfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShpMmMyX3Jlc291cmNlcyksCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBpMmMzX2RldmljZSA9IHsKKwkubmFtZQkJPSAiaTJjLXNoX21vYmlsZSIsCisJLmlkCQk9IDMsCisJLnJlc291cmNlCT0gaTJjM19yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGkyYzNfcmVzb3VyY2VzKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGkyYzRfZGV2aWNlID0geworCS5uYW1lCQk9ICJpMmMtc2hfbW9iaWxlIiwKKwkuaWQJCT0gNCwKKwkucmVzb3VyY2UJPSBpMmM0X3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoaTJjNF9yZXNvdXJjZXMpLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNoNzNhMF9lYXJseV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmc2NpZjBfZGV2aWNlLAorCSZzY2lmMV9kZXZpY2UsCisJJnNjaWYyX2RldmljZSwKKwkmc2NpZjNfZGV2aWNlLAorCSZzY2lmNF9kZXZpY2UsCisJJnNjaWY1X2RldmljZSwKKwkmc2NpZjZfZGV2aWNlLAorCSZzY2lmN19kZXZpY2UsCisJJnNjaWY4X2RldmljZSwKKwkmY210MTBfZGV2aWNlLAorCSZ0bXUwMF9kZXZpY2UsCisJJnRtdTAxX2RldmljZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzaDczYTBfbGF0ZV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmaTJjMF9kZXZpY2UsCisJJmkyYzFfZGV2aWNlLAorCSZpMmMyX2RldmljZSwKKwkmaTJjM19kZXZpY2UsCisJJmkyYzRfZGV2aWNlLAorfTsKKwordm9pZCBfX2luaXQgc2g3M2EwX2FkZF9zdGFuZGFyZF9kZXZpY2VzKHZvaWQpCit7CisJcGxhdGZvcm1fYWRkX2RldmljZXMoc2g3M2EwX2Vhcmx5X2RldmljZXMsCisJCQkgICAgQVJSQVlfU0laRShzaDczYTBfZWFybHlfZGV2aWNlcykpOworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHNoNzNhMF9sYXRlX2RldmljZXMsCisJCQkgICAgQVJSQVlfU0laRShzaDczYTBfbGF0ZV9kZXZpY2VzKSk7Cit9CisKK3ZvaWQgX19pbml0IHNoNzNhMF9hZGRfZWFybHlfZGV2aWNlcyh2b2lkKQoreworCWVhcmx5X3BsYXRmb3JtX2FkZF9kZXZpY2VzKHNoNzNhMF9lYXJseV9kZXZpY2VzLAorCQkJCSAgIEFSUkFZX1NJWkUoc2g3M2EwX2Vhcmx5X2RldmljZXMpKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc21wLXNoNzNhMC5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zbXAtc2g3M2EwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE1NmQyMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc21wLXNoNzNhMC5jCkBAIC0wLDAgKzEsOTcgQEAKKy8qCisgKiBTTVAgc3VwcG9ydCBmb3IgUi1Nb2JpbGUgLyBTSC1Nb2JpbGUgLSBzaDczYTAgcG9ydGlvbgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCAgTWFnbnVzIERhbW0KKyAqIENvcHlyaWdodCAoQykgMjAxMCAgVGFrYXNoaSBZb3NoaWkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KKyNpbmNsdWRlIDxhc20vc21wX3NjdS5oPgorI2luY2x1ZGUgPGFzbS9zbXBfdHdkLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2dpYy5oPgorCisjZGVmaW5lIFdVUENSCQkweGU2MTUxMDEwCisjZGVmaW5lIFNSRVNDUgkJMHhlNjE1MTAxOAorI2RlZmluZSBQU1RSCQkweGU2MTUxMDQwCisjZGVmaW5lIFNCQVIgICAgICAgICAgICAweGU2MTgwMDIwCisjZGVmaW5lIEFQQVJNQkFSRUEgICAgICAweGU2ZjEwMDIwCisKK3N0YXRpYyB2b2lkIF9faW9tZW0gKnNjdV9iYXNlX2FkZHIodm9pZCkKK3sKKwlyZXR1cm4gKHZvaWQgX19pb21lbSAqKTB4ZjAwMDAwMDA7Cit9CisKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soc2N1X2xvY2spOworc3RhdGljIHVuc2lnbmVkIGxvbmcgdG1wOworCitzdGF0aWMgdm9pZCBtb2RpZnlfc2N1X2NwdV9wc3IodW5zaWduZWQgbG9uZyBzZXQsIHVuc2lnbmVkIGxvbmcgY2xyKQoreworCXZvaWQgX19pb21lbSAqc2N1X2Jhc2UgPSBzY3VfYmFzZV9hZGRyKCk7CisKKwlzcGluX2xvY2soJnNjdV9sb2NrKTsKKwl0bXAgPSBfX3Jhd19yZWFkbChzY3VfYmFzZSArIDgpOworCXRtcCAmPSB+Y2xyOworCXRtcCB8PSBzZXQ7CisJc3Bpbl91bmxvY2soJnNjdV9sb2NrKTsKKworCS8qIGRpc2FibGUgY2FjaGUgY29oZXJlbmN5IGFmdGVyIHJlbGVhc2luZyB0aGUgbG9jayAqLworCV9fcmF3X3dyaXRlbCh0bXAsIHNjdV9iYXNlICsgOCk7Cit9CisKK3Vuc2lnbmVkIGludCBfX2luaXQgc2g3M2EwX2dldF9jb3JlX2NvdW50KHZvaWQpCit7CisJdm9pZCBfX2lvbWVtICpzY3VfYmFzZSA9IHNjdV9iYXNlX2FkZHIoKTsKKworCXJldHVybiBzY3VfZ2V0X2NvcmVfY291bnQoc2N1X2Jhc2UpOworfQorCit2b2lkIF9fY3B1aW5pdCBzaDczYTBfc2Vjb25kYXJ5X2luaXQodW5zaWduZWQgaW50IGNwdSkKK3sKKwlnaWNfc2Vjb25kYXJ5X2luaXQoMCk7Cit9CisKK2ludCBfX2NwdWluaXQgc2g3M2EwX2Jvb3Rfc2Vjb25kYXJ5KHVuc2lnbmVkIGludCBjcHUpCit7CisJLyogZW5hYmxlIGNhY2hlIGNvaGVyZW5jeSAqLworCW1vZGlmeV9zY3VfY3B1X3BzcigwLCAzIDw8IChjcHUgKiA4KSk7CisKKwlpZiAoKChfX3Jhd19yZWFkdyhfX2lvKFBTVFIpKSA+PiAoNCAqIGNwdSkpICYgMykgPT0gMykKKwkJX19yYXdfd3JpdGVsKDEgPDwgY3B1LCBfX2lvKFdVUENSKSk7CS8qIHdha2UgdXAgKi8KKwllbHNlCisJCV9fcmF3X3dyaXRlbCgxIDw8IGNwdSwgX19pbyhTUkVTQ1IpKTsJLyogcmVzZXQgKi8KKworCXJldHVybiAwOworfQorCit2b2lkIF9faW5pdCBzaDczYTBfc21wX3ByZXBhcmVfY3B1cyh2b2lkKQoreworI2lmZGVmIENPTkZJR19IQVZFX0FSTV9UV0QKKwl0d2RfYmFzZSA9ICh2b2lkIF9faW9tZW0gKikweGYwMDAwNjAwOworI2VuZGlmCisKKwlzY3VfZW5hYmxlKHNjdV9iYXNlX2FkZHIoKSk7CisKKwkvKiBNYXAgdGhlIHJlc2V0IHZlY3RvciAoaW4gaGVhZHNtcC5TKSAqLworCV9fcmF3X3dyaXRlbCgwLCBfX2lvKEFQQVJNQkFSRUEpKTsgICAgICAvKiA0ayAqLworCV9fcmF3X3dyaXRlbChfX3BhKHNobW9iaWxlX3NlY29uZGFyeV92ZWN0b3IpLCBfX2lvKFNCQVIpKTsKKworCS8qIGVuYWJsZSBjYWNoZSBjb2hlcmVuY3kgb24gQ1BVMCAqLworCW1vZGlmeV9zY3VfY3B1X3BzcigwLCAzIDw8ICgwICogOCkpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC10Y2M4ay9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC10Y2M4ay9jbG9jay5jCmluZGV4IGJhMzJhMTUuLjM5NzBhOWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdGNjOGsvY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLXRjYzhrL2Nsb2NrLmMKQEAgLTEyLDggKzEyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0KLSNpbmNsdWRlIDxhc20vY2xrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvY2xrZGV2Lmg+CiAKICNpbmNsdWRlIDxtYWNoL2Nsb2NrLmg+CiAjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXRjYzhrL3RpbWUuYyBiL2FyY2gvYXJtL21hY2gtdGNjOGsvdGltZS5jCmluZGV4IDc4ZDA2MDAuLmUwYThkNjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdGNjOGsvdGltZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtdGNjOGsvdGltZS5jCkBAIC0zNSw3ICszNSw2IEBACiAJLnJhdGluZwkJPSAyMDAsCiAJLnJlYWQJCT0gdGNjX2dldF9jeWNsZXMsCiAJLm1hc2sJCT0gQ0xPQ0tTT1VSQ0VfTUFTSygzMiksCi0JLnNoaWZ0CQk9IDI4LAogCS5mbGFncwkJPSBDTE9DS19TT1VSQ0VfSVNfQ09OVElOVU9VUywKIH07CiAKQEAgLTEwMyw5ICsxMDIsNyBAQAogewogCXVuc2lnbmVkIGludCBjID0gY2xrX2dldF9yYXRlKGNsb2NrKTsKIAotCWNsb2Nrc291cmNlX3RjYy5tdWx0ID0gY2xvY2tzb3VyY2VfaHoybXVsdChjLAotCQkJCQljbG9ja3NvdXJjZV90Y2Muc2hpZnQpOwotCWNsb2Nrc291cmNlX3JlZ2lzdGVyKCZjbG9ja3NvdXJjZV90Y2MpOworCWNsb2Nrc291cmNlX3JlZ2lzdGVyX2h6KCZjbG9ja3NvdXJjZV90Y2MsIGMpOwogCiAJY2xvY2tldmVudF90Y2MubXVsdCA9IGRpdl9zYyhjLCBOU0VDX1BFUl9TRUMsCiAJCQkJCWNsb2NrZXZlbnRfdGNjLnNoaWZ0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdGVncmEvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtdGVncmEvY2xvY2suYwppbmRleCBhZTE5Zjk1Li43Nzk0OGUwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXRlZ3JhL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9jbG9jay5jCkBAIC0yNSw3ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+Ci0jaW5jbHVkZSA8YXNtL2Nsa2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsa2Rldi5oPgogCiAjaW5jbHVkZSAiY2xvY2suaCIKICNpbmNsdWRlICJib2FyZC5oIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC10ZWdyYS9jbG9jay5oIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9jbG9jay5oCmluZGV4IDk0ZmQ4NTkuLjA4M2E0Y2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdGVncmEvY2xvY2suaAorKysgYi9hcmNoL2FybS9tYWNoLXRlZ3JhL2Nsb2NrLmgKQEAgLTIxLDcgKzIxLDcgQEAKICNkZWZpbmUgX19NQUNIX1RFR1JBX0NMT0NLX0gKIAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxhc20vY2xrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvY2xrZGV2Lmg+CiAKICNkZWZpbmUgRElWX0JVUwkJCSgxIDw8IDApCiAjZGVmaW5lIERJVl9VNzEJCQkoMSA8PCAxKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC10ZWdyYS9ob3RwbHVnLmMgYi9hcmNoL2FybS9tYWNoLXRlZ3JhL2hvdHBsdWcuYwppbmRleCA4ZTdmMTE1Li5hNWNiMWNlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXRlZ3JhL2hvdHBsdWcuYworKysgYi9hcmNoL2FybS9tYWNoLXRlZ3JhL2hvdHBsdWcuYwpAQCAtMTEsMTIgKzExLDkgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KIAogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAKLXN0YXRpYyBERUNMQVJFX0NPTVBMRVRJT04oY3B1X2tpbGxlZCk7Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCBjcHVfZW50ZXJfbG93cG93ZXIodm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgdjsKQEAgLTI5LDEzICsyNiwxMyBAQAogCSAqIFR1cm4gb2ZmIGNvaGVyZW5jeQogCSAqLwogCSIJbXJjCXAxNSwgMCwgJTAsIGMxLCBjMCwgMVxuIgotCSIJYmljCSUwLCAlMCwgIzB4MjBcbiIKKwkiCWJpYwklMCwgJTAsICUyXG4iCiAJIgltY3IJcDE1LCAwLCAlMCwgYzEsIGMwLCAxXG4iCiAJIgltcmMJcDE1LCAwLCAlMCwgYzEsIGMwLCAwXG4iCiAJIgliaWMJJTAsICUwLCAjMHgwNFxuIgogCSIJbWNyCXAxNSwgMCwgJTAsIGMxLCBjMCwgMFxuIgogCSAgOiAiPSZyIiAodikKLQkgIDogInIiICgwKQorCSAgOiAiciIgKDApLCAiSXIiIChDUl9DKQogCSAgOiAiY2MiKTsKIH0KIApAQCAtNDUsMTcgKzQyLDE3IEBACiAKIAlhc20gdm9sYXRpbGUoCiAJIm1yYwlwMTUsIDAsICUwLCBjMSwgYzAsIDBcbiIKLQkiCW9ycgklMCwgJTAsICMweDA0XG4iCisJIglvcnIJJTAsICUwLCAlMVxuIgogCSIJbWNyCXAxNSwgMCwgJTAsIGMxLCBjMCwgMFxuIgogCSIJbXJjCXAxNSwgMCwgJTAsIGMxLCBjMCwgMVxuIgogCSIJb3JyCSUwLCAlMCwgIzB4MjBcbiIKIAkiCW1jcglwMTUsIDAsICUwLCBjMSwgYzAsIDFcbiIKIAkgIDogIj0mciIgKHYpCi0JICA6CisJICA6ICJJciIgKENSX0MpCiAJICA6ICJjYyIpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcGxhdGZvcm1fZG9fbG93cG93ZXIodW5zaWduZWQgaW50IGNwdSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBwbGF0Zm9ybV9kb19sb3dwb3dlcih1bnNpZ25lZCBpbnQgY3B1LCBpbnQgKnNwdXJpb3VzKQogewogCS8qCiAJICogdGhlcmUgaXMgbm8gcG93ZXItY29udHJvbCBoYXJkd2FyZSBvbiB0aGlzIHBsYXRmb3JtLCBzbyBhbGwKQEAgLTc5LDIyICs3NiwxOSBAQAogCQkvKn0qLwogCiAJCS8qCi0JCSAqIGdldHRpbmcgaGVyZSwgbWVhbnMgdGhhdCB3ZSBoYXZlIGNvbWUgb3V0IG9mIFdGSSB3aXRob3V0CisJCSAqIEdldHRpbmcgaGVyZSwgbWVhbnMgdGhhdCB3ZSBoYXZlIGNvbWUgb3V0IG9mIFdGSSB3aXRob3V0CiAJCSAqIGhhdmluZyBiZWVuIHdva2VuIHVwIC0gdGhpcyBzaG91bGRuJ3QgaGFwcGVuCiAJCSAqCi0JCSAqIFRoZSB0cm91YmxlIGlzLCBsZXR0aW5nIHBlb3BsZSBrbm93IGFib3V0IHRoaXMgaXMgbm90IHJlYWxseQotCQkgKiBwb3NzaWJsZSwgc2luY2Ugd2UgYXJlIGN1cnJlbnRseSBydW5uaW5nIGluY29oZXJlbnRseSwgYW5kCi0JCSAqIHRoZXJlZm9yZSBjYW5ub3Qgc2FmZWx5IGNhbGwgcHJpbnRrKCkgb3IgYW55dGhpbmcgZWxzZQorCQkgKiBKdXN0IG5vdGUgaXQgaGFwcGVuaW5nIC0gd2hlbiB3ZSdyZSB3b2tlbiwgd2UgY2FuIHJlcG9ydAorCQkgKiBpdHMgb2NjdXJyZW5jZS4KIAkJICovCi0jaWZkZWYgREVCVUcKLQkJcHJpbnRrKEtFUk5fV0FSTiAiQ1BVJXU6IHNwdXJpb3VzIHdha2V1cCBjYWxsXG4iLCBjcHUpOwotI2VuZGlmCisJCSgqc3B1cmlvdXMpKys7CiAJfQogfQogCiBpbnQgcGxhdGZvcm1fY3B1X2tpbGwodW5zaWduZWQgaW50IGNwdSkKIHsKLQlyZXR1cm4gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZjcHVfa2lsbGVkLCA1MDAwKTsKKwlyZXR1cm4gMTsKIH0KIAogLyoKQEAgLTEwNCwzMCArOTgsMjIgQEAKICAqLwogdm9pZCBwbGF0Zm9ybV9jcHVfZGllKHVuc2lnbmVkIGludCBjcHUpCiB7Ci0jaWZkZWYgREVCVUcKLQl1bnNpZ25lZCBpbnQgdGhpc19jcHUgPSBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKTsKLQotCWlmIChjcHUgIT0gdGhpc19jcHUpIHsKLQkJcHJpbnRrKEtFUk5fQ1JJVCAiRWVrISBwbGF0Zm9ybV9jcHVfZGllIHJ1bm5pbmcgb24gJXUsIHNob3VsZCBiZSAldVxuIiwKLQkJCSAgIHRoaXNfY3B1LCBjcHUpOwotCQlCVUcoKTsKLQl9Ci0jZW5kaWYKLQotCXByaW50ayhLRVJOX05PVElDRSAiQ1BVJXU6IHNodXRkb3duXG4iLCBjcHUpOwotCWNvbXBsZXRlKCZjcHVfa2lsbGVkKTsKKwlpbnQgc3B1cmlvdXMgPSAwOwogCiAJLyoKIAkgKiB3ZSdyZSByZWFkeSBmb3Igc2h1dGRvd24gbm93LCBzbyBkbyBpdAogCSAqLwogCWNwdV9lbnRlcl9sb3dwb3dlcigpOwotCXBsYXRmb3JtX2RvX2xvd3Bvd2VyKGNwdSk7CisJcGxhdGZvcm1fZG9fbG93cG93ZXIoY3B1LCAmc3B1cmlvdXMpOwogCiAJLyoKIAkgKiBicmluZyB0aGlzIENQVSBiYWNrIGludG8gdGhlIHdvcmxkIG9mIGNhY2hlCiAJICogY29oZXJlbmN5LCBhbmQgdGhlbiByZXN0b3JlIGludGVycnVwdHMKIAkgKi8KIAljcHVfbGVhdmVfbG93cG93ZXIoKTsKKworCWlmIChzcHVyaW91cykKKwkJcHJfd2FybigiQ1BVJXU6ICV1IHNwdXJpb3VzIHdha2V1cCBjYWxsc1xuIiwgY3B1LCBzcHVyaW91cyk7CiB9CiAKIGludCBwbGF0Zm9ybV9jcHVfZGlzYWJsZSh1bnNpZ25lZCBpbnQgY3B1KQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC10ZWdyYS9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtdGVncmEvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKaW5kZXggMmJhOWU1Yy4uZGQxNjVjNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC10ZWdyYS9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLXRlZ3JhL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCkBAIC0xNiw4ICsxNiw4IEBACiAjaW5jbHVkZSA8bWFjaC9pby5oPgogCiAjaWYgZGVmaW5lZChDT05GSUdfQVJNX0dJQykKLQotI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9naWMuaD4KKyNkZWZpbmUgSEFWRV9HRVRfSVJRTlJfUFJFQU1CTEUKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvZW50cnktbWFjcm8tZ2ljLlM+CiAKIAkvKiBVc2VzIHRoZSBHSUMgaW50ZXJydXB0IGNvbnRyb2xsZXIgYnVpbHQgaW50byB0aGUgY3B1ICovCiAjZGVmaW5lIElDVFJMX0JBU0UgKElPX0NQVV9WSVJUICsgMHgxMDApCkBAIC0zMiw2OCArMzIsNiBAQAogCiAJLm1hY3JvICBhcmNoX3JldF90b191c2VyLCB0bXAxLCB0bXAyCiAJLmVuZG0KLQotCS8qCi0JICogVGhlIGludGVycnVwdCBudW1iZXJpbmcgc2NoZW1lIGlzIGRlZmluZWQgaW4gdGhlCi0JICogaW50ZXJydXB0IGNvbnRyb2xsZXIgc3BlYy4gIFRvIHdpdDoKLQkgKgotCSAqIEludGVycnVwdHMgMC0xNSBhcmUgSVBJCi0JICogMTYtMjggYXJlIHJlc2VydmVkCi0JICogMjktMzEgYXJlIGxvY2FsLiAgV2UgYWxsb3cgMzAgdG8gYmUgdXNlZCBmb3IgdGhlIHdhdGNoZG9nLgotCSAqIDMyLTEwMjAgYXJlIGdsb2JhbAotCSAqIDEwMjEtMTAyMiBhcmUgcmVzZXJ2ZWQKLQkgKiAxMDIzIGlzICJzcHVyaW91cyIgKG5vIGludGVycnVwdCkKLQkgKgotCSAqIEZvciBub3csIHdlIGlnbm9yZSBhbGwgbG9jYWwgaW50ZXJydXB0cyBzbyBvbmx5IHJldHVybiBhbiBpbnRlcnJ1cHQKLQkgKiBpZiBpdCdzIGJldHdlZW4gMzAgYW5kIDEwMjAuICBUaGUgdGVzdF9mb3JfaXBpIHJvdXRpbmUgYmVsb3cgd2lsbAotCSAqIHBpY2sgdXAgb24gSVBJcy4KLQkgKgotCSAqIEEgc2ltcGxlIHJlYWQgZnJvbSB0aGUgY29udHJvbGxlciB3aWxsIHRlbGwgdXMgdGhlIG51bWJlciBvZiB0aGUKLQkgKiBoaWdoZXN0IHByaW9yaXR5IGVuYWJsZWQgaW50ZXJydXB0LiAgV2UgdGhlbiBqdXN0IG5lZWQgdG8gY2hlY2sKLQkgKiB3aGV0aGVyIGl0IGlzIGluIHRoZSB2YWxpZCByYW5nZSBmb3IgYW4gSVJRICgzMC0xMDIwIGluY2x1c2l2ZSkuCi0JICovCi0KLQkubWFjcm8gIGdldF9pcnFucl9hbmRfYmFzZSwgaXJxbnIsIGlycXN0YXQsIGJhc2UsIHRtcAotCi0JLyogYml0cyAxMi0xMCA9IHNyYyBDUFUsIDktMCA9IGludCAjICovCi0JbGRyICAgICBcaXJxc3RhdCwgW1xiYXNlLCAjR0lDX0NQVV9JTlRBQ0tdCi0KLQlsZHIJCVx0bXAsID0xMDIxCi0KLQliaWMgICAgIFxpcnFuciwgXGlycXN0YXQsICMweDFjMDAKLQotCWNtcCAgICAgXGlycW5yLCAjMjkKLQljbXBjYwlcaXJxbnIsIFxpcnFucgotCWNtcG5lCVxpcnFuciwgXHRtcAotCWNtcGNzCVxpcnFuciwgXGlycW5yCi0KLQkuZW5kbQotCi0JLyogV2UgYXNzdW1lIHRoYXQgaXJxc3RhdCAodGhlIHJhdyB2YWx1ZSBvZiB0aGUgSVJRIGFja25vd2xlZGdlCi0JICogcmVnaXN0ZXIpIGlzIHByZXNlcnZlZCBmcm9tIHRoZSBtYWNybyBhYm92ZS4KLQkgKiBJZiB0aGVyZSBpcyBhbiBJUEksIHdlIGltbWVkaWF0ZWx5IHNpZ25hbCBlbmQgb2YgaW50ZXJydXB0IG9uIHRoZQotCSAqIGNvbnRyb2xsZXIsIHNpbmNlIHRoaXMgcmVxdWlyZXMgdGhlIG9yaWdpbmFsIGlycXN0YXQgdmFsdWUgd2hpY2gKLQkgKiB3ZSB3b24ndCBlYXNpbHkgYmUgYWJsZSB0byByZWNyZWF0ZSBsYXRlci4KLQkgKi8KLQotCS5tYWNybyB0ZXN0X2Zvcl9pcGksIGlycW5yLCBpcnFzdGF0LCBiYXNlLCB0bXAKLQliaWMJXGlycW5yLCBcaXJxc3RhdCwgIzB4MWMwMAotCWNtcAlcaXJxbnIsICMxNgotCXN0cmNjCVxpcnFzdGF0LCBbXGJhc2UsICNHSUNfQ1BVX0VPSV0KLQljbXBjcwlcaXJxbnIsIFxpcnFucgotCS5lbmRtCi0KLQkvKiBBcyBhYm92ZSwgdGhpcyBhc3N1bWVzIHRoYXQgaXJxc3RhdCBhbmQgYmFzZSBhcmUgcHJlc2VydmVkLi4gKi8KLQotCS5tYWNybyB0ZXN0X2Zvcl9sdGlycSwgaXJxbnIsIGlycXN0YXQsIGJhc2UsIHRtcAotCWJpYwlcaXJxbnIsIFxpcnFzdGF0LCAjMHgxYzAwCi0JbW92IAlcdG1wLCAjMAotCWNtcAlcaXJxbnIsICMyOQotCW1vdmVxCVx0bXAsICMxCi0Jc3RyZXEJXGlycXN0YXQsIFtcYmFzZSwgI0dJQ19DUFVfRU9JXQotCWNtcAlcdG1wLCAjMAotCS5lbmRtCi0KICNlbHNlCiAJLyogbGVnYWN5IGludGVycnVwdCBjb250cm9sbGVyIGZvciBBUDE2ICovCiAJLm1hY3JvCWRpc2FibGVfZmlxCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXRlZ3JhL2luY2x1ZGUvbWFjaC9pby5oIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9pbmNsdWRlL21hY2gvaW8uaAppbmRleCBmMDk4MWIxLi40Y2VhMjIzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXRlZ3JhL2luY2x1ZGUvbWFjaC9pby5oCisrKyBiL2FyY2gvYXJtL21hY2gtdGVncmEvaW5jbHVkZS9tYWNoL2lvLmgKQEAgLTY1LDggKzY1LDggQEAKIAogI2lmbmRlZiBfX0FTU0VNQkxFUl9fCiAKLSNkZWZpbmUgX19hcmNoX2lvcmVtYXAocCwgcywgdCkJdGVncmFfaW9yZW1hcChwLCBzLCB0KQotI2RlZmluZSBfX2FyY2hfaW91bm1hcCh2KQl0ZWdyYV9pb3VubWFwKHYpCisjZGVmaW5lIF9fYXJjaF9pb3JlbWFwCQl0ZWdyYV9pb3JlbWFwCisjZGVmaW5lIF9fYXJjaF9pb3VubWFwCQl0ZWdyYV9pb3VubWFwCiAKIHZvaWQgX19pb21lbSAqdGVncmFfaW9yZW1hcCh1bnNpZ25lZCBsb25nIHBoeXMsIHNpemVfdCBzaXplLCB1bnNpZ25lZCBpbnQgdHlwZSk7CiB2b2lkIHRlZ3JhX2lvdW5tYXAodm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdGVncmEvaW5jbHVkZS9tYWNoL3NtcC5oIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9pbmNsdWRlL21hY2gvc21wLmgKaW5kZXggZTRhMzRhMy4uYzgyMjFiMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC10ZWdyYS9pbmNsdWRlL21hY2gvc21wLmgKKysrIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9pbmNsdWRlL21hY2gvc21wLmgKQEAgLTIsMjEgKzIsMTMgQEAKICNkZWZpbmUgQVNNQVJNX0FSQ0hfU01QX0gKIAogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9naWMuaD4KLSNpbmNsdWRlIDxhc20vc21wX21waWRyLmg+CiAKIC8qCiAgKiBXZSB1c2UgSVJRMSBhcyB0aGUgSVBJCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBzbXBfY3Jvc3NfY2FsbChjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaykKK3N0YXRpYyBpbmxpbmUgdm9pZCBzbXBfY3Jvc3NfY2FsbChjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywgaW50IGlwaSkKIHsKLQlnaWNfcmFpc2Vfc29mdGlycShtYXNrLCAxKTsKLX0KLQotLyoKLSAqIERvIG5vdGhpbmcgb24gTVBjb3JlLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgc21wX2Nyb3NzX2NhbGxfZG9uZShjcHVtYXNrX3QgY2FsbG1hcCkKLXsKKwlnaWNfcmFpc2Vfc29mdGlycShtYXNrLCBpcGkpOwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdGVncmEvaXJxLmMgYi9hcmNoL2FybS9tYWNoLXRlZ3JhL2lycS5jCmluZGV4IDUwYThkZmIuLjU0MDdkZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdGVncmEvaXJxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9pcnEuYwpAQCAtOTQsOCArOTQsOCBAQAogCQl3cml0ZWwoMCwgaWN0bHJfdG9fdmlydChpKSArIElDVExSX0NQVV9JRVBfQ0xBU1MpOwogCX0KIAotCWdpY19kaXN0X2luaXQoMCwgSU9fQUREUkVTUyhURUdSQV9BUk1fSU5UX0RJU1RfQkFTRSksIDI5KTsKLQlnaWNfY3B1X2luaXQoMCwgSU9fQUREUkVTUyhURUdSQV9BUk1fUEVSSUZfQkFTRSArIDB4MTAwKSk7CisJZ2ljX2luaXQoMCwgMjksIElPX0FERFJFU1MoVEVHUkFfQVJNX0lOVF9ESVNUX0JBU0UpLAorCQkgSU9fQUREUkVTUyhURUdSQV9BUk1fUEVSSUZfQkFTRSArIDB4MTAwKSk7CiAKIAlnaWMgPSBnZXRfaXJxX2NoaXAoMjkpOwogCWdpY191bm1hc2tfaXJxID0gZ2ljLT51bm1hc2s7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXRlZ3JhL3BsYXRzbXAuYyBiL2FyY2gvYXJtL21hY2gtdGVncmEvcGxhdHNtcC5jCmluZGV4IDFjMGZkOTIuLmVjMWY2ODkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdGVncmEvcGxhdHNtcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtdGVncmEvcGxhdHNtcC5jCkBAIC0yMiw3ICsyMiw2IEBACiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vbG9jYWx0aW1lci5oPgogI2luY2x1ZGUgPGFzbS9zbXBfc2N1Lmg+CiAKICNpbmNsdWRlIDxtYWNoL2lvbWFwLmg+CkBAIC00MSwxNCArNDAsMTIgQEAKIAogdm9pZCBfX2NwdWluaXQgcGxhdGZvcm1fc2Vjb25kYXJ5X2luaXQodW5zaWduZWQgaW50IGNwdSkKIHsKLQl0cmFjZV9oYXJkaXJxc19vZmYoKTsKLQogCS8qCiAJICogaWYgYW55IGludGVycnVwdHMgYXJlIGFscmVhZHkgZW5hYmxlZCBmb3IgdGhlIHByaW1hcnkKIAkgKiBjb3JlIChlLmcuIHRpbWVyIGlycSksIHRoZW4gdGhleSB3aWxsIG5vdCBoYXZlIGJlZW4gZW5hYmxlZAogCSAqIGZvciB1czogZG8gc28KIAkgKi8KLQlnaWNfY3B1X2luaXQoMCwgSU9fQUREUkVTUyhURUdSQV9BUk1fUEVSSUZfQkFTRSkgKyAweDEwMCk7CisJZ2ljX3NlY29uZGFyeV9pbml0KDApOwogCiAJLyoKIAkgKiBTeW5jaHJvbmlzZSB3aXRoIHRoZSBib290IHRocmVhZC4KQEAgLTExNywyNCArMTE0LDIwIEBACiB7CiAJdW5zaWduZWQgaW50IGksIG5jb3JlcyA9IHNjdV9nZXRfY29yZV9jb3VudChzY3VfYmFzZSk7CiAKKwlpZiAobmNvcmVzID4gTlJfQ1BVUykgeworCQlwcmludGsoS0VSTl9FUlIgIlRlZ3JhOiBuby4gb2YgY29yZXMgKCV1KSBncmVhdGVyIHRoYW4gY29uZmlndXJlZCAoJXUpLCBjbGlwcGluZ1xuIiwKKwkJCW5jb3JlcywgTlJfQ1BVUyk7CisJCW5jb3JlcyA9IE5SX0NQVVM7CisJfQorCiAJZm9yIChpID0gMDsgaSA8IG5jb3JlczsgaSsrKQogCQljcHVfc2V0KGksIGNwdV9wb3NzaWJsZV9tYXApOwogfQogCi12b2lkIF9faW5pdCBzbXBfcHJlcGFyZV9jcHVzKHVuc2lnbmVkIGludCBtYXhfY3B1cykKK3ZvaWQgX19pbml0IHBsYXRmb3JtX3NtcF9wcmVwYXJlX2NwdXModW5zaWduZWQgaW50IG1heF9jcHVzKQogewotCXVuc2lnbmVkIGludCBuY29yZXMgPSBzY3VfZ2V0X2NvcmVfY291bnQoc2N1X2Jhc2UpOwotCXVuc2lnbmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJaW50IGk7CiAKLQlzbXBfc3RvcmVfY3B1X2luZm8oY3B1KTsKLQotCS8qCi0JICogYXJlIHdlIHRyeWluZyB0byBib290IG1vcmUgY29yZXMgdGhhbiBleGlzdD8KLQkgKi8KLQlpZiAobWF4X2NwdXMgPiBuY29yZXMpCi0JCW1heF9jcHVzID0gbmNvcmVzOwotCiAJLyoKIAkgKiBJbml0aWFsaXNlIHRoZSBwcmVzZW50IG1hcCwgd2hpY2ggZGVzY3JpYmVzIHRoZSBzZXQgb2YgQ1BVcwogCSAqIGFjdHVhbGx5IHBvcHVsYXRlZCBhdCB0aGUgcHJlc2VudCB0aW1lLgpAQCAtMTQyLDE1ICsxMzUsNSBAQAogCWZvciAoaSA9IDA7IGkgPCBtYXhfY3B1czsgaSsrKQogCQlzZXRfY3B1X3ByZXNlbnQoaSwgdHJ1ZSk7CiAKLQkvKgotCSAqIEluaXRpYWxpc2UgdGhlIFNDVSBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZSBDUFUgYW5kIGxldAotCSAqIHRoZW0ga25vdyB3aGVyZSB0byBzdGFydC4gTm90ZSB0aGF0LCBvbiBtb2Rlcm4gdmVyc2lvbnMgb2YKLQkgKiBNSUxPLCB0aGUgInBva2UiIGRvZXNuJ3QgYWN0dWFsbHkgZG8gYW55dGhpbmcgdW50aWwgZWFjaAotCSAqIGluZGl2aWR1YWwgY29yZSBpcyBzZW50IGEgc29mdCBpbnRlcnJ1cHQgdG8gZ2V0IGl0IG91dCBvZgotCSAqIFdGSQotCSAqLwotCWlmIChtYXhfY3B1cyA+IDEpIHsKLQkJcGVyY3B1X3RpbWVyX3NldHVwKCk7Ci0JCXNjdV9lbmFibGUoc2N1X2Jhc2UpOwotCX0KKwlzY3VfZW5hYmxlKHNjdV9iYXNlKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdGVncmEvdGVncmEyX2Nsb2Nrcy5jIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS90ZWdyYTJfY2xvY2tzLmMKaW5kZXggYWUzYjMwOC4uZjBkYWU2ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC10ZWdyYS90ZWdyYTJfY2xvY2tzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS90ZWdyYTJfY2xvY2tzLmMKQEAgLTI0LDggKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvaHJ0aW1lci5oPgotCi0jaW5jbHVkZSA8YXNtL2Nsa2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsa2Rldi5oPgogCiAjaW5jbHVkZSA8bWFjaC9pb21hcC5oPgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXRlZ3JhL3RpbWVyLmMgYi9hcmNoL2FybS9tYWNoLXRlZ3JhL3RpbWVyLmMKaW5kZXggOTA1N2Q2Zi4uN2I4YWQxZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC10ZWdyYS90aW1lci5jCisrKyBiL2FyY2gvYXJtL21hY2gtdGVncmEvdGltZXIuYwpAQCAtMTgsNiArMTgsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CkBAIC0yNSwxMCArMjYsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9jbG9ja3NvdXJjZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvY250MzJfdG9fNjMuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KICNpbmNsdWRlIDxhc20vbG9jYWx0aW1lci5oPgorI2luY2x1ZGUgPGFzbS9zY2hlZF9jbG9jay5oPgogCiAjaW5jbHVkZSA8bWFjaC9pb21hcC5oPgogI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgpAQCAtOTEsNyArOTIsNyBAQAogCiBzdGF0aWMgY3ljbGVfdCB0ZWdyYV9jbG9ja3NvdXJjZV9yZWFkKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MpCiB7Ci0JcmV0dXJuIGNudDMyX3RvXzYzKHRpbWVyX3JlYWRsKFRJTUVSVVNfQ05UUl8xVVMpKTsKKwlyZXR1cm4gdGltZXJfcmVhZGwoVElNRVJVU19DTlRSXzFVUyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlIHRlZ3JhX2Nsb2NrZXZlbnQgPSB7CkBAIC0xMDYsMTQgKzEwNywyOSBAQAogCS5uYW1lCT0gInRpbWVyX3VzIiwKIAkucmF0aW5nCT0gMzAwLAogCS5yZWFkCT0gdGVncmFfY2xvY2tzb3VyY2VfcmVhZCwKLQkubWFzawk9IDB4N0ZGRkZGRkZGRkZGRkZGRlVMTCwKKwkubWFzawk9IENMT0NLU09VUkNFX01BU0soMzIpLAogCS5mbGFncwk9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTLAogfTsKIAotdW5zaWduZWQgbG9uZyBsb25nIHNjaGVkX2Nsb2NrKHZvaWQpCitzdGF0aWMgREVGSU5FX0NMT0NLX0RBVEEoY2QpOworCisvKgorICogQ29uc3RhbnRzIGdlbmVyYXRlZCBieSBjbG9ja3NfY2FsY19tdWx0X3NoaWZ0KG0sIHMsIDFNSHosIE5TRUNfUEVSX1NFQywgNjApLgorICogVGhpcyBnaXZlcyBhIHJlc29sdXRpb24gb2YgYWJvdXQgMXVzIGFuZCBhIHdyYXAgcGVyaW9kIG9mIGFib3V0IDFoMTFtaW4uCisgKi8KKyNkZWZpbmUgU0NfTVVMVAkJNDE5NDMwNDAwMHUKKyNkZWZpbmUgU0NfU0hJRlQJMjIKKwordW5zaWduZWQgbG9uZyBsb25nIG5vdHJhY2Ugc2NoZWRfY2xvY2sodm9pZCkKIHsKLQlyZXR1cm4gY2xvY2tzb3VyY2VfY3ljMm5zKHRlZ3JhX2Nsb2Nrc291cmNlLnJlYWQoJnRlZ3JhX2Nsb2Nrc291cmNlKSwKLQkJdGVncmFfY2xvY2tzb3VyY2UubXVsdCwgdGVncmFfY2xvY2tzb3VyY2Uuc2hpZnQpOworCXUzMiBjeWMgPSB0aW1lcl9yZWFkbChUSU1FUlVTX0NOVFJfMVVTKTsKKwlyZXR1cm4gY3ljX3RvX2ZpeGVkX3NjaGVkX2Nsb2NrKCZjZCwgY3ljLCAodTMyKX4wLCBTQ19NVUxULCBTQ19TSElGVCk7Cit9CisKK3N0YXRpYyB2b2lkIG5vdHJhY2UgdGVncmFfdXBkYXRlX3NjaGVkX2Nsb2NrKHZvaWQpCit7CisJdTMyIGN5YyA9IHRpbWVyX3JlYWRsKFRJTUVSVVNfQ05UUl8xVVMpOworCXVwZGF0ZV9zY2hlZF9jbG9jaygmY2QsIGN5YywgKHUzMil+MCk7CiB9CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCB0ZWdyYV90aW1lcl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQpAQCAtMTU4LDYgKzE3NCw5IEBACiAJCVdBUk4oMSwgIlVua25vd24gY2xvY2sgcmF0ZSIpOwogCX0KIAorCWluaXRfZml4ZWRfc2NoZWRfY2xvY2soJmNkLCB0ZWdyYV91cGRhdGVfc2NoZWRfY2xvY2ssIDMyLAorCQkJICAgICAgIDEwMDAwMDAsIFNDX01VTFQsIFNDX1NISUZUKTsKKwogCWlmIChjbG9ja3NvdXJjZV9yZWdpc3Rlcl9oeigmdGVncmFfY2xvY2tzb3VyY2UsIDEwMDAwMDApKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJlZ2lzdGVyIGNsb2Nrc291cmNlXG4iKTsKIAkJQlVHKCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXUzMDAvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtdTMwMC9jbG9jay5jCmluZGV4IDc0NThmYzYuLmZhYmNjNDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdTMwMC9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtdTMwMC9jbG9jay5jCkBAIC0yNSw4ICsyNSw4IEBACiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvY2xrZGV2Lmg+CiAKLSNpbmNsdWRlIDxhc20vY2xrZGV2Lmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvc3lzY29uLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdTMwMC90aW1lci5jIGIvYXJjaC9hcm0vbWFjaC11MzAwL3RpbWVyLmMKaW5kZXggM2ZjNDQ3Mi4uM2VjNThiZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC11MzAwL3RpbWVyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC11MzAwL3RpbWVyLmMKQEAgLTksNiArOSw3IEBACiAgKiBBdXRob3I6IExpbnVzIFdhbGxlaWogPGxpbnVzLndhbGxlaWpAc3Rlcmljc3Nvbi5jb20+CiAgKi8KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC90aW1leC5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsb2NrY2hpcHMuaD4KQEAgLTIxLDYgKzIyLDcgQEAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKIC8qIEdlbmVyaWMgc3R1ZmYgKi8KKyNpbmNsdWRlIDxhc20vc2NoZWRfY2xvY2suaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KICNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CkBAIC0zNTIsMTIgKzM1NCwxOCBAQAogICogdGhpcyB3cmFwcyBhcm91bmQgZm9yIG5vdywgc2luY2UgaXQgaXMganVzdCBhIHJlbGF0aXZlIHRpbWUKICAqIHN0YW1wLiAoSW5zcGlyZWQgYnkgT01BUCBpbXBsZW1lbnRhdGlvbi4pCiAgKi8KK3N0YXRpYyBERUZJTkVfQ0xPQ0tfREFUQShjZCk7CisKIHVuc2lnbmVkIGxvbmcgbG9uZyBub3RyYWNlIHNjaGVkX2Nsb2NrKHZvaWQpCiB7Ci0JcmV0dXJuIGNsb2Nrc291cmNlX2N5YzJucyhjbG9ja3NvdXJjZV91MzAwXzFtaHoucmVhZCgKLQkJCQkgICZjbG9ja3NvdXJjZV91MzAwXzFtaHopLAotCQkJCSAgY2xvY2tzb3VyY2VfdTMwMF8xbWh6Lm11bHQsCi0JCQkJICBjbG9ja3NvdXJjZV91MzAwXzFtaHouc2hpZnQpOworCXUzMiBjeWMgPSByZWFkbChVMzAwX1RJTUVSX0FQUF9WQkFTRSArIFUzMDBfVElNRVJfQVBQX0dQVDJDQyk7CisJcmV0dXJuIGN5Y190b19zY2hlZF9jbG9jaygmY2QsIGN5YywgKHUzMil+MCk7Cit9CisKK3N0YXRpYyB2b2lkIG5vdHJhY2UgdTMwMF91cGRhdGVfc2NoZWRfY2xvY2sodm9pZCkKK3sKKwl1MzIgY3ljID0gcmVhZGwoVTMwMF9USU1FUl9BUFBfVkJBU0UgKyBVMzAwX1RJTUVSX0FQUF9HUFQyQ0MpOworCXVwZGF0ZV9zY2hlZF9jbG9jaygmY2QsIGN5YywgKHUzMil+MCk7CiB9CiAKIApAQCAtMzc1LDYgKzM4Myw4IEBACiAJY2xrX2VuYWJsZShjbGspOwogCXJhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrKTsKIAorCWluaXRfc2NoZWRfY2xvY2soJmNkLCB1MzAwX3VwZGF0ZV9zY2hlZF9jbG9jaywgMzIsIHJhdGUpOworCiAJLyoKIAkgKiBEaXNhYmxlIHRoZSAiT1MiIGFuZCAiREQiIHRpbWVycyAtIHRoZXNlIGFyZSBkZXNpZ25lZCBmb3IgU3ltYmlhbiEKIAkgKiBFeGFtcGxlIHVzYWdlIGluIGNuaDE2MDE1NzggY3B1IHN1YnN5c3RlbSBwZF90aW1lcl9hcHAuYwpAQCAtNDEyLDkgKzQyMiw3IEBACiAJd3JpdGVsKFUzMDBfVElNRVJfQVBQX0VHUFQyX1RJTUVSX0VOQUJMRSwKIAkJVTMwMF9USU1FUl9BUFBfVkJBU0UgKyBVMzAwX1RJTUVSX0FQUF9FR1BUMik7CiAKLQljbG9ja3NvdXJjZV9jYWxjX211bHRfc2hpZnQoJmNsb2Nrc291cmNlX3UzMDBfMW1oeiwKLQkJCQkgICAgcmF0ZSwgQVBQVElNRVJfTUlOX1JBTkdFKTsKLQlpZiAoY2xvY2tzb3VyY2VfcmVnaXN0ZXIoJmNsb2Nrc291cmNlX3UzMDBfMW1oeikpCisJaWYgKGNsb2Nrc291cmNlX3JlZ2lzdGVyX2h6KCZjbG9ja3NvdXJjZV91MzAwXzFtaHosIHJhdGUpKQogCQlwcmludGsoS0VSTl9FUlIgInRpbWVyOiBmYWlsZWQgdG8gaW5pdGlhbGl6ZSBjbG9jayAiCiAJCSAgICAgICAic291cmNlICVzXG4iLCBjbG9ja3NvdXJjZV91MzAwXzFtaHoubmFtZSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdXg1MDAvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLXV4NTAwL01ha2VmaWxlCmluZGV4IDllMjdhODQuLjEyMDUyZTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdXg1MDAvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9NYWtlZmlsZQpAQCAtMiwxNCArMiwxNiBAQAogIyBNYWtlZmlsZSBmb3IgdGhlIGxpbnV4IGtlcm5lbCwgVTg1MDAgbWFjaGluZS4KICMKIAotb2JqLXkJCQkJOj0gY2xvY2subyBjcHUubyBkZXZpY2VzLm8KLW9iai0kKENPTkZJR19VWDUwMF9TT0NfREI1NTAwKQkrPSBjcHUtZGI1NTAwLm8gZGV2aWNlcy1kYjU1MDAubworb2JqLXkJCQkJOj0gY2xvY2subyBjcHUubyBkZXZpY2VzLm8gZGV2aWNlcy1jb21tb24ubworb2JqLSQoQ09ORklHX1VYNTAwX1NPQ19EQjU1MDApCSs9IGNwdS1kYjU1MDAubyBkbWEtZGI1NTAwLm8KIG9iai0kKENPTkZJR19VWDUwMF9TT0NfREI4NTAwKQkrPSBjcHUtZGI4NTAwLm8gZGV2aWNlcy1kYjg1MDAubyBwcmNtdS5vCi1vYmotJChDT05GSUdfTUFDSF9VODUwMF9NT1ApCSs9IGJvYXJkLW1vcDUwMC5vIGJvYXJkLW1vcDUwMC1zZGkubwotb2JqLSQoQ09ORklHX01BQ0hfVTU1MDApCSs9IGJvYXJkLXU1NTAwLm8KK29iai0kKENPTkZJR19NQUNIX1U4NTAwX01PUCkJKz0gYm9hcmQtbW9wNTAwLm8gYm9hcmQtbW9wNTAwLXNkaS5vIFwKKwkJCQlib2FyZC1tb3A1MDAta2V5cGFkcy5vCitvYmotJChDT05GSUdfTUFDSF9VNTUwMCkJKz0gYm9hcmQtdTU1MDAubyBib2FyZC11NTUwMC1zZGkubwogb2JqLSQoQ09ORklHX1NNUCkJCSs9IHBsYXRzbXAubyBoZWFkc21wLm8KIG9iai0kKENPTkZJR19IT1RQTFVHX0NQVSkJKz0gaG90cGx1Zy5vCiBvYmotJChDT05GSUdfTE9DQUxfVElNRVJTKQkrPSBsb2NhbHRpbWVyLm8KIG9iai0kKENPTkZJR19SRUdVTEFUT1JfQUI4NTAwKQkrPSBib2FyZC1tb3A1MDAtcmVndWxhdG9ycy5vCi1vYmotJChDT05GSUdfVTU1MDBfTU9ERU1fSVJRKQkrPSBtb2RlbV9pcnEubwotb2JqLSQoQ09ORklHX1U1NTAwX01CT1gpCSs9IG1ib3gubworb2JqLSQoQ09ORklHX1U1NTAwX01PREVNX0lSUSkJKz0gbW9kZW0taXJxLWRiNTUwMC5vCitvYmotJChDT05GSUdfVTU1MDBfTUJPWCkJKz0gbWJveC1kYjU1MDAubworb2JqLSQoQ09ORklHX0NQVV9GUkVRKQkJKz0gY3B1ZnJlcS5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXV4NTAwL2JvYXJkLW1vcDUwMC1rZXlwYWRzLmMgYi9hcmNoL2FybS9tYWNoLXV4NTAwL2JvYXJkLW1vcDUwMC1rZXlwYWRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzAzMThjMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdXg1MDAvYm9hcmQtbW9wNTAwLWtleXBhZHMuYwpAQCAtMCwwICsxLDIyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgU1QtRXJpY3Nzb24gU0EgMjAxMAorICoKKyAqIExpY2Vuc2UgVGVybXM6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHYyCisgKgorICogS2V5cGFkIGxheW91dHMgZm9yIHZhcmlvdXMgYm9hcmRzCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvc3RtcGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvdGMzNTg5eC5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0L21hdHJpeF9rZXlwYWQuaD4KKworI2luY2x1ZGUgPHBsYXQvcGluY2ZnLmg+CisjaW5jbHVkZSA8cGxhdC9za2UuaD4KKworI2luY2x1ZGUgPG1hY2gvZGV2aWNlcy5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKworI2luY2x1ZGUgImRldmljZXMtZGI4NTAwLmgiCisjaW5jbHVkZSAiYm9hcmQtbW9wNTAwLmgiCisKKy8qIFNUTVBFL1NLRSBrZXlwYWQgdXNlIHRoaXMga2V5IGxheW91dCAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtb3A1MDBfa2V5bWFwW10gPSB7CisJS0VZKDIsIDUsIEtFWV9FTkQpLAorCUtFWSg0LCAxLCBLRVlfUE9XRVIpLAorCUtFWSgzLCA1LCBLRVlfVk9MVU1FRE9XTiksCisJS0VZKDEsIDMsIEtFWV8zKSwKKwlLRVkoNSwgMiwgS0VZX1JJR0hUKSwKKwlLRVkoNSwgMCwgS0VZXzkpLAorCisJS0VZKDAsIDUsIEtFWV9NRU5VKSwKKwlLRVkoNywgNiwgS0VZX0VOVEVSKSwKKwlLRVkoNCwgNSwgS0VZXzApLAorCUtFWSg2LCA3LCBLRVlfMiksCisJS0VZKDMsIDQsIEtFWV9VUCksCisJS0VZKDMsIDMsIEtFWV9ET1dOKSwKKworCUtFWSg2LCA0LCBLRVlfU0VORCksCisJS0VZKDYsIDIsIEtFWV9CQUNLKSwKKwlLRVkoNCwgMiwgS0VZX1ZPTFVNRVVQKSwKKwlLRVkoNSwgNSwgS0VZXzEpLAorCUtFWSg0LCAzLCBLRVlfTEVGVCksCisJS0VZKDMsIDIsIEtFWV83KSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWF0cml4X2tleW1hcF9kYXRhIG1vcDUwMF9rZXltYXBfZGF0YSA9IHsKKwkua2V5bWFwCQk9IG1vcDUwMF9rZXltYXAsCisJLmtleW1hcF9zaXplICAgID0gQVJSQVlfU0laRShtb3A1MDBfa2V5bWFwKSwKK307CisKKy8qCisgKiBOb21hZGlrIFNLRSBrZXlwYWQKKyAqLworI2RlZmluZSBST1dfUElOX0kwICAgICAgMTY0CisjZGVmaW5lIFJPV19QSU5fSTEgICAgICAxNjMKKyNkZWZpbmUgUk9XX1BJTl9JMiAgICAgIDE2MgorI2RlZmluZSBST1dfUElOX0kzICAgICAgMTYxCisjZGVmaW5lIFJPV19QSU5fSTQgICAgICAxNTYKKyNkZWZpbmUgUk9XX1BJTl9JNSAgICAgIDE1NQorI2RlZmluZSBST1dfUElOX0k2ICAgICAgMTU0CisjZGVmaW5lIFJPV19QSU5fSTcgICAgICAxNTMKKyNkZWZpbmUgQ09MX1BJTl9PMCAgICAgIDE2OAorI2RlZmluZSBDT0xfUElOX08xICAgICAgMTY3CisjZGVmaW5lIENPTF9QSU5fTzIgICAgICAxNjYKKyNkZWZpbmUgQ09MX1BJTl9PMyAgICAgIDE2NQorI2RlZmluZSBDT0xfUElOX080ICAgICAgMTYwCisjZGVmaW5lIENPTF9QSU5fTzUgICAgICAxNTkKKyNkZWZpbmUgQ09MX1BJTl9PNiAgICAgIDE1OAorI2RlZmluZSBDT0xfUElOX083ICAgICAgMTU3CisKKyNkZWZpbmUgU0tFX0tQRF9NQVhfUk9XUwk4CisjZGVmaW5lIFNLRV9LUERfTUFYX0NPTFMJOAorCitzdGF0aWMgaW50IHNrZV9rcF9yb3dzW10gPSB7CisJUk9XX1BJTl9JMCwgUk9XX1BJTl9JMSwgUk9XX1BJTl9JMiwgUk9XX1BJTl9JMywKKwlST1dfUElOX0k0LCBST1dfUElOX0k1LCBST1dfUElOX0k2LCBST1dfUElOX0k3LAorfTsKKworLyoKKyAqIHNrZV9zZXRfZ3Bpb19yb3c6IHJlcXVlc3QgYW5kIHNldCBncGlvIHJvd3MKKyAqLworc3RhdGljIGludCBza2Vfc2V0X2dwaW9fcm93KGludCBncGlvKQoreworCWludCByZXQ7CisKKwlyZXQgPSBncGlvX3JlcXVlc3QoZ3BpbywgInNrZS1rcCIpOworCWlmIChyZXQgPCAwKSB7CisJCXByX2Vycigic2tlX3NldF9ncGlvX3JvdzogZ3BpbyByZXF1ZXN0IGZhaWxlZFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGdwaW8sIDEpOworCWlmIChyZXQgPCAwKSB7CisJCXByX2Vycigic2tlX3NldF9ncGlvX3JvdzogZ3BpbyBkaXJlY3Rpb24gZmFpbGVkXG4iKTsKKwkJZ3Bpb19mcmVlKGdwaW8pOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBza2Vfa3BfaW5pdCAtIGVuYWJsZSB0aGUgZ3BpbyBjb25maWd1cmF0aW9uCisgKi8KK3N0YXRpYyBpbnQgc2tlX2twX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0LCBpOworCisJZm9yIChpID0gMDsgaSA8IFNLRV9LUERfTUFYX1JPV1M7IGkrKykgeworCQlyZXQgPSBza2Vfc2V0X2dwaW9fcm93KHNrZV9rcF9yb3dzW2ldKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXByX2Vycigic2tlX2twX2luaXQ6IGZhaWxlZCBpbml0XG4iKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBza2Vfa2V5cGFkX3BsYXRmb3JtX2RhdGEgc2tlX2tleXBhZF9ib2FyZCA9IHsKKwkuaW5pdAkJPSBza2Vfa3BfaW5pdCwKKwkua2V5bWFwX2RhdGEgICAgPSAmbW9wNTAwX2tleW1hcF9kYXRhLAorCS5ub19hdXRvcmVwZWF0ICA9IHRydWUsCisJLmtyb3cJCT0gU0tFX0tQRF9NQVhfUk9XUywgICAgIC8qIDh4OCBtYXRyaXggKi8KKwkua2NvbAkJPSBTS0VfS1BEX01BWF9DT0xTLAorCS5kZWJvdW5jZV9tcyAgICA9IDQwLAkJCS8qIGluIG1pbGxpc2VjcyAqLworfTsKKworLyoKKyAqIFNUTVBFMTYwMQorICovCitzdGF0aWMgc3RydWN0IHN0bXBlX2tleXBhZF9wbGF0Zm9ybV9kYXRhIHN0bXBlMTYwMV9rZXlwYWRfZGF0YSA9IHsKKwkuZGVib3VuY2VfbXMgICAgPSA2NCwKKwkuc2Nhbl9jb3VudCAgICAgPSA4LAorCS5ub19hdXRvcmVwZWF0ICA9IHRydWUsCisJLmtleW1hcF9kYXRhICAgID0gJm1vcDUwMF9rZXltYXBfZGF0YSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3RtcGVfcGxhdGZvcm1fZGF0YSBzdG1wZTE2MDFfZGF0YSA9IHsKKwkuaWQgICAgICAgICAgICAgPSAxLAorCS5ibG9ja3MgICAgICAgICA9IFNUTVBFX0JMT0NLX0tFWVBBRCwKKwkuaXJxX3RyaWdnZXIgICAgPSBJUlFGX1RSSUdHRVJfRkFMTElORywKKwkuaXJxX2Jhc2UgICAgICAgPSBNT1A1MDBfU1RNUEUxNjAxX0lSUSgwKSwKKwkua2V5cGFkICAgICAgICAgPSAmc3RtcGUxNjAxX2tleXBhZF9kYXRhLAorCS5hdXRvc2xlZXAgICAgICA9IHRydWUsCisJLmF1dG9zbGVlcF90aW1lb3V0ID0gMTAyNCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gbW9wNTAwX2kyYzBfZGV2aWNlc19zdHVpYltdID0geworCXsKKwkJSTJDX0JPQVJEX0lORk8oInN0bXBlMTYwMSIsIDB4NDApLAorCQkuaXJxID0gTk9NQURJS19HUElPX1RPX0lSUSgyMTgpLAorCQkucGxhdGZvcm1fZGF0YSA9ICZzdG1wZTE2MDFfZGF0YSwKKwkJLmZsYWdzID0gSTJDX0NMSUVOVF9XQUtFLAorCX0sCit9OworCisvKgorICogVEMzNTg5MworICovCisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgdWliX2tleW1hcFtdID0geworCUtFWSgzLCAxLCBLRVlfRU5EKSwKKwlLRVkoNCwgMSwgS0VZX1BPV0VSKSwKKwlLRVkoNiwgNCwgS0VZX1ZPTFVNRURPV04pLAorCUtFWSg0LCAyLCBLRVlfRU1BSUwpLAorCUtFWSgzLCAzLCBLRVlfUklHSFQpLAorCUtFWSgyLCA1LCBLRVlfQkFDS1NQQUNFKSwKKworCUtFWSg2LCA3LCBLRVlfTUVOVSksCisJS0VZKDUsIDAsIEtFWV9FTlRFUiksCisJS0VZKDQsIDMsIEtFWV8wKSwKKwlLRVkoMywgNCwgS0VZX0RPVCksCisJS0VZKDUsIDIsIEtFWV9VUCksCisJS0VZKDMsIDUsIEtFWV9ET1dOKSwKKworCUtFWSg0LCA1LCBLRVlfU0VORCksCisJS0VZKDAsIDUsIEtFWV9CQUNLKSwKKwlLRVkoNiwgMiwgS0VZX1ZPTFVNRVVQKSwKKwlLRVkoMSwgMywgS0VZX1NQQUNFKSwKKwlLRVkoNywgNiwgS0VZX0xFRlQpLAorCUtFWSg1LCA1LCBLRVlfU0VBUkNIKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWF0cml4X2tleW1hcF9kYXRhIHVpYl9rZXltYXBfZGF0YSA9IHsKKwkua2V5bWFwICAgICAgICAgPSB1aWJfa2V5bWFwLAorCS5rZXltYXBfc2l6ZSAgICA9IEFSUkFZX1NJWkUodWliX2tleW1hcCksCit9OworCitzdGF0aWMgc3RydWN0IHRjMzU4OXhfa2V5cGFkX3BsYXRmb3JtX2RhdGEgdGMzNTg5M19kYXRhID0geworCS5rcm93ID0gVENfS1BEX1JPV1MsCisJLmtjb2wgPSBUQ19LUERfQ09MVU1OUywKKwkuZGVib3VuY2VfcGVyaW9kID0gVENfS1BEX0RFQk9VTkNFX1BFUklPRCwKKwkuc2V0dGxlX3RpbWUgPSBUQ19LUERfU0VUVExFX1RJTUUsCisJLmlycXR5cGUgPSBJUlFGX1RSSUdHRVJfRkFMTElORywKKwkuZW5hYmxlX3dha2V1cCA9IHRydWUsCisJLmtleW1hcF9kYXRhICAgID0gJnVpYl9rZXltYXBfZGF0YSwKKwkubm9fYXV0b3JlcGVhdCAgPSB0cnVlLAorfTsKKworc3RhdGljIHN0cnVjdCB0YzM1ODl4X3BsYXRmb3JtX2RhdGEgdGMzNTg5eF9rZXlwYWRfZGF0YSA9IHsKKwkuYmxvY2sgPSBUQzM1ODl4X0JMT0NLX0tFWVBBRCwKKwkua2V5cGFkID0gJnRjMzU4OTNfZGF0YSwKKwkuaXJxX2Jhc2UgPSBNT1A1MDBfRUdQSU9fSVJRX0JBU0UsCit9OworCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIG1vcDUwMF9pMmMwX2RldmljZXNfdWliW10gPSB7CisJeworCQlJMkNfQk9BUkRfSU5GTygidGMzNTg5eCIsIDB4NDQpLAorCQkucGxhdGZvcm1fZGF0YSA9ICZ0YzM1ODl4X2tleXBhZF9kYXRhLAorCQkuaXJxID0gTk9NQURJS19HUElPX1RPX0lSUSgyMTgpLAorCQkuZmxhZ3MgPSBJMkNfQ0xJRU5UX1dBS0UsCisJfSwKK307CisKK3ZvaWQgbW9wNTAwX2tleXBhZF9pbml0KHZvaWQpCit7CisJZGI4NTAwX2FkZF9za2Vfa2V5cGFkKCZza2Vfa2V5cGFkX2JvYXJkKTsKKworCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIG1vcDUwMF9pMmMwX2RldmljZXNfc3R1aWIsCisJCQlBUlJBWV9TSVpFKG1vcDUwMF9pMmMwX2RldmljZXNfc3R1aWIpKTsKKworCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIG1vcDUwMF9pMmMwX2RldmljZXNfdWliLAorCQkJQVJSQVlfU0laRShtb3A1MDBfaTJjMF9kZXZpY2VzX3VpYikpOworCit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXV4NTAwL2JvYXJkLW1vcDUwMC1zZGkuYyBiL2FyY2gvYXJtL21hY2gtdXg1MDAvYm9hcmQtbW9wNTAwLXNkaS5jCmluZGV4IGJhYzk5NTYuLjRiOTk2NjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdXg1MDAvYm9hcmQtbW9wNTAwLXNkaS5jCisrKyBiL2FyY2gvYXJtL21hY2gtdXg1MDAvYm9hcmQtbW9wNTAwLXNkaS5jCkBAIC0xNiwxMCArMTYsMjQgQEAKICNpbmNsdWRlIDxtYWNoL2RldmljZXMuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKKyNpbmNsdWRlICJkZXZpY2VzLWRiODUwMC5oIgogI2luY2x1ZGUgInBpbnMtZGI4NTAwLmgiCiAjaW5jbHVkZSAiYm9hcmQtbW9wNTAwLmgiCiAKIHN0YXRpYyBwaW5fY2ZnX3QgbW9wNTAwX3NkaV9waW5zW10gPSB7CisJLyogU0RJMCAoTWljcm9TRCBzbG90KSAqLworCUdQSU8xOF9NQzBfQ01ERElSLAorCUdQSU8xOV9NQzBfREFUMERJUiwKKwlHUElPMjBfTUMwX0RBVDJESVIsCisJR1BJTzIxX01DMF9EQVQzMURJUiwKKwlHUElPMjJfTUMwX0ZCQ0xLLAorCUdQSU8yM19NQzBfQ0xLLAorCUdQSU8yNF9NQzBfQ01ELAorCUdQSU8yNV9NQzBfREFUMCwKKwlHUElPMjZfTUMwX0RBVDEsCisJR1BJTzI3X01DMF9EQVQyLAorCUdQSU8yOF9NQzBfREFUMywKKwogCS8qIFNESTQgKG9uLWJvYXJkIGVNTUMpICovCiAJR1BJTzE5N19NQzRfREFUMywKIAlHUElPMTk4X01DNF9EQVQyLApAQCAtNTAsNiArNjQsNTUgQEAKIH07CiAKIC8qCisgKiBTREkgMCAoTWljcm9TRCBzbG90KQorICovCisKKy8qIE1NQ0lQT1dFUiBiaXRzICovCisjZGVmaW5lIE1DSV9EQVRBMkRJUkVOCQkoMSA8PCAyKQorI2RlZmluZSBNQ0lfQ01ERElSRU4JCSgxIDw8IDMpCisjZGVmaW5lIE1DSV9EQVRBMERJUkVOCQkoMSA8PCA0KQorI2RlZmluZSBNQ0lfREFUQTMxRElSRU4JCSgxIDw8IDUpCisjZGVmaW5lIE1DSV9GQkNMS0VOCQkoMSA8PCA3KQorCitzdGF0aWMgdTMyIG1vcDUwMF9zZGkwX3ZkZF9oYW5kbGVyKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHZkZCwKKwkJCQkgICB1bnNpZ25lZCBjaGFyIHBvd2VyX21vZGUpCit7CisJaWYgKHBvd2VyX21vZGUgPT0gTU1DX1BPV0VSX1VQKQorCQlncGlvX3NldF92YWx1ZV9jYW5zbGVlcChHUElPX1NETU1DX0VOLCAxKTsKKwllbHNlIGlmIChwb3dlcl9tb2RlID09IE1NQ19QT1dFUl9PRkYpCisJCWdwaW9fc2V0X3ZhbHVlX2NhbnNsZWVwKEdQSU9fU0RNTUNfRU4sIDApOworCisJcmV0dXJuIE1DSV9GQkNMS0VOIHwgTUNJX0NNRERJUkVOIHwgTUNJX0RBVEEwRElSRU4gfAorCSAgICAgICBNQ0lfREFUQTJESVJFTiB8IE1DSV9EQVRBMzFESVJFTjsKK30KKworc3RhdGljIHN0cnVjdCBtbWNpX3BsYXRmb3JtX2RhdGEgbW9wNTAwX3NkaTBfZGF0YSA9IHsKKwkudmRkX2hhbmRsZXIJPSBtb3A1MDBfc2RpMF92ZGRfaGFuZGxlciwKKwkub2NyX21hc2sJPSBNTUNfVkREXzI5XzMwLAorCS5mX21heAkJPSAxMDAwMDAwMDAsCisJLmNhcGFiaWxpdGllcwk9IE1NQ19DQVBfNF9CSVRfREFUQSwKKwkuZ3Bpb19jZAk9IEdQSU9fU0RNTUNfQ0QsCisJLmdwaW9fd3AJPSAtMSwKK307CisKK3ZvaWQgbW9wNTAwX3NkaV90YzM1ODkyX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KEdQSU9fU0RNTUNfRU4sICJTRE1NQ19FTiIpOworCWlmICghcmV0KQorCQlyZXQgPSBncGlvX3JlcXVlc3QoR1BJT19TRE1NQ18xVjhfM1ZfU0VMLAorCQkJCSAgICJHUElPX1NETU1DXzFWOF8zVl9TRUwiKTsKKwlpZiAocmV0KQorCQlyZXR1cm47CisKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19TRE1NQ18xVjhfM1ZfU0VMLCAxKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19TRE1NQ19FTiwgMCk7CisKKwlkYjg1MDBfYWRkX3NkaTAoJm1vcDUwMF9zZGkwX2RhdGEpOworfQorCisvKgogICogU0RJIDIgKFBPUCBlTU1DLCBub3Qgb24gREI4NTAwZWQpCiAgKi8KIApAQCAtNzQsMTggKzEzNywyNCBAQAogCS5ncGlvX3dwCT0gLTEsCiB9OwogCi12b2lkIG1vcDUwMF9zZGlfaW5pdCh2b2lkKQordm9pZCBfX2luaXQgbW9wNTAwX3NkaV9pbml0KHZvaWQpCiB7CiAJbm1rX2NvbmZpZ19waW5zKG1vcDUwMF9zZGlfcGlucywgQVJSQVlfU0laRShtb3A1MDBfc2RpX3BpbnMpKTsKIAotCXU4NTAwX3NkaTJfZGV2aWNlLmRldi5wbGF0Zm9ybV9kYXRhID0gJm1vcDUwMF9zZGkyX2RhdGE7Ci0JdTg1MDBfc2RpNF9kZXZpY2UuZGV2LnBsYXRmb3JtX2RhdGEgPSAmbW9wNTAwX3NkaTRfZGF0YTsKKwkvKgorCSAqIHNkaTAgd2lsbCBmaW5hbGx5IGJlIGFkZGVkIHdoZW4gdGhlIFRDMzU4OTIgaW5pdGlhbGl6ZXMgYW5kIGNhbGxzCisJICogbW9wNTAwX3NkaV90YzM1ODkyX2luaXQoKSBhYm92ZS4KKwkgKi8KIAorCS8qIFBvUDplZCBlTU1DICovCiAJaWYgKCFjcHVfaXNfdTg1MDBlZCgpKSB7CiAJCW5ta19jb25maWdfcGlucyhtb3A1MDBfc2RpMl9waW5zLCBBUlJBWV9TSVpFKG1vcDUwMF9zZGkyX3BpbnMpKTsKLQkJYW1iYV9kZXZpY2VfcmVnaXN0ZXIoJnU4NTAwX3NkaTJfZGV2aWNlLCAmaW9tZW1fcmVzb3VyY2UpOworCQkvKiBQT1AgZU1NQyBvbiB2MS4wIGhhcyBwcm9ibGVtcyB3aXRoIGhpZ2ggc3BlZWQgKi8KKwkJaWYgKCFjcHVfaXNfdTg1MDB2MTAoKSkKKwkJCW1vcDUwMF9zZGkyX2RhdGEuY2FwYWJpbGl0aWVzIHw9IE1NQ19DQVBfTU1DX0hJR0hTUEVFRDsKKwkJZGI4NTAwX2FkZF9zZGkyKCZtb3A1MDBfc2RpMl9kYXRhKTsKIAl9CiAKIAkvKiBPbi1ib2FyZCBlTU1DICovCi0JYW1iYV9kZXZpY2VfcmVnaXN0ZXIoJnU4NTAwX3NkaTRfZGV2aWNlLCAmaW9tZW1fcmVzb3VyY2UpOworCWRiODUwMF9hZGRfc2RpNCgmbW9wNTAwX3NkaTRfZGF0YSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXV4NTAwL2JvYXJkLW1vcDUwMC5jIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9ib2FyZC1tb3A1MDAuYwppbmRleCBjYWM4M2E2Li5hMWM5ZWExIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXV4NTAwL2JvYXJkLW1vcDUwMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtdXg1MDAvYm9hcmQtbW9wNTAwLmMKQEAgLTEzLDI1ICsxMywyNiBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2FtYmEvYnVzLmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9wbDAyMi5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KICNpbmNsdWRlIDxsaW51eC9tZmQvYWI4NTAwLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5wdXQvbWF0cml4X2tleXBhZC5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC90YzM1ODl4Lmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KIAogI2luY2x1ZGUgPHBsYXQvcGluY2ZnLmg+CiAjaW5jbHVkZSA8cGxhdC9pMmMuaD4KLSNpbmNsdWRlIDxwbGF0L3NrZS5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvc2V0dXAuaD4KICNpbmNsdWRlIDxtYWNoL2RldmljZXMuaD4KICNpbmNsdWRlIDxtYWNoL2lycXMuaD4KIAorI2luY2x1ZGUgImRldmljZXMtZGI4NTAwLmgiCiAjaW5jbHVkZSAicGlucy1kYjg1MDAuaCIKICNpbmNsdWRlICJib2FyZC1tb3A1MDAuaCIKIApAQCAtNjksMjIgKzcwLDEyIEBACiAJR1BJTzE2Nl9LUF9PMiwKIAlHUElPMTY3X0tQX08xLAogCUdQSU8xNjhfS1BfTzAsCi19OwogCi1zdGF0aWMgdm9pZCBhYjQ1MDBfc3BpX2NzX2NvbnRyb2wodTMyIGNvbW1hbmQpCi17Ci0JLyogc2V0IHRoZSBGUk0gc2lnbmFsLCB3aGljaCBpcyBDUyAgLSBUT0RPICovCi19CisJLyogR1BJT19FWFBfSU5UICovCisJR1BJTzIxN19HUElPLAogCi1zdHJ1Y3QgcGwwMjJfY29uZmlnX2NoaXAgYWI0NTAwX2NoaXBfaW5mbyA9IHsKLQkuY29tX21vZGUgPSBJTlRFUlJVUFRfVFJBTlNGRVIsCi0JLmlmYWNlID0gU1NQX0lOVEVSRkFDRV9NT1RPUk9MQV9TUEksCi0JLyogd2UgY2FuIGFjdCBhcyBtYXN0ZXIgb25seSAqLwotCS5oaWVyYXJjaHkgPSBTU1BfTUFTVEVSLAotCS5zbGF2ZV90eF9kaXNhYmxlID0gMCwKLQkucnhfbGV2X3RyaWcgPSBTU1BfUlhfMV9PUl9NT1JFX0VMRU0sCi0JLnR4X2xldl90cmlnID0gU1NQX1RYXzFfT1JfTU9SRV9FTVBUWV9MT0MsCi0JLmNzX2NvbnRyb2wgPSBhYjQ1MDBfc3BpX2NzX2NvbnRyb2wsCisJLyogU1RNUEUxNjAxIElSUSAqLworCUdQSU8yMThfR1BJTyAgICB8IFBJTl9JTlBVVF9QVUxMVVAsCiB9OwogCiBzdGF0aWMgc3RydWN0IGFiODUwMF9wbGF0Zm9ybV9kYXRhIGFiODUwMF9wbGF0ZGF0YSA9IHsKQEAgLTkzLDkgKzg0LDkgQEAKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBhYjg1MDBfcmVzb3VyY2VzW10gPSB7CiAJWzBdID0gewotCQkuc3RhcnQgPSBJUlFfQUI4NTAwLAotCQkuZW5kID0gSVJRX0FCODUwMCwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEKKwkJLnN0YXJ0CT0gSVJRX0RCODUwMF9BQjg1MDAsCisJCS5lbmQJPSBJUlFfREI4NTAwX0FCODUwMCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEKIAl9CiB9OwogCkBAIC0xMDksMTkgKzEwMCw2IEBACiAJLnJlc291cmNlID0gYWI4NTAwX3Jlc291cmNlcywKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gYWI4NTAwX3NwaV9kZXZpY2VzW10gPSB7Ci0JewotCQkubW9kYWxpYXMgPSAiYWI4NTAwLXNwaSIsCi0JCS5jb250cm9sbGVyX2RhdGEgPSAmYWI0NTAwX2NoaXBfaW5mbywKLQkJLnBsYXRmb3JtX2RhdGEgPSAmYWI4NTAwX3BsYXRkYXRhLAotCQkubWF4X3NwZWVkX2h6ID0gMTIwMDAwMDAsCi0JCS5idXNfbnVtID0gMCwKLQkJLmNoaXBfc2VsZWN0ID0gMCwKLQkJLm1vZGUgPSBTUElfTU9ERV8zLAotCQkuaXJxID0gSVJRX0RCODUwMF9BQjg1MDAsCi0JfSwKLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgcGwwMjJfc3NwX2NvbnRyb2xsZXIgc3NwMF9wbGF0Zm9ybV9kYXRhID0gewogCS5idXNfaWQgPSAwLAogCS8qIHBsMDIyIG5vdCB5ZXQgc3VwcG9ydHMgZG1hICovCkBAIC0xMzIsNiArMTEwLDM0IEBACiAJLm51bV9jaGlwc2VsZWN0ID0gNSwKIH07CiAKKy8qCisgKiBUQzM1ODkyCisgKi8KKworc3RhdGljIHZvaWQgbW9wNTAwX3RjMzU4OTJfaW5pdChzdHJ1Y3QgdGMzNTg5eCAqdGMzNTg5eCwgdW5zaWduZWQgaW50IGJhc2UpCit7CisJbW9wNTAwX3NkaV90YzM1ODkyX2luaXQoKTsKK30KKworc3RhdGljIHN0cnVjdCB0YzM1ODl4X2dwaW9fcGxhdGZvcm1fZGF0YSBtb3A1MDBfdGMzNTg5Ml9ncGlvX2RhdGEgPSB7CisJLmdwaW9fYmFzZQk9IE1PUDUwMF9FR1BJTygwKSwKKwkuc2V0dXAJCT0gbW9wNTAwX3RjMzU4OTJfaW5pdCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdGMzNTg5eF9wbGF0Zm9ybV9kYXRhIG1vcDUwMF90YzM1ODkyX2RhdGEgPSB7CisJLmJsb2NrCQk9IFRDMzU4OXhfQkxPQ0tfR1BJTywKKwkuZ3BpbwkJPSAmbW9wNTAwX3RjMzU4OTJfZ3Bpb19kYXRhLAorCS5pcnFfYmFzZQk9IE1PUDUwMF9FR1BJT19JUlFfQkFTRSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gbW9wNTAwX2kyYzBfZGV2aWNlc1tdID0geworCXsKKwkJSTJDX0JPQVJEX0lORk8oInRjMzU4OXgiLCAweDQyKSwKKwkJLmlycSAgICAgICAgICAgID0gTk9NQURJS19HUElPX1RPX0lSUSgyMTcpLAorCQkucGxhdGZvcm1fZGF0YSAgPSAmbW9wNTAwX3RjMzU4OTJfZGF0YSwKKwl9LAorfTsKKwogI2RlZmluZSBVODUwMF9JMkNfQ09OVFJPTExFUihpZCwgX3Nsc3UsIF90ZnQsIF9yZnQsIGNsaywgX3NtKSBcCiBzdGF0aWMgc3RydWN0IG5ta19pMmNfY29udHJvbGxlciB1ODUwMF9pMmMjI2lkIyNfZGF0YSA9IHsgXAogCS8qCQkJCVwKQEAgLTE2MSwxNTkgKzE2Nyw0OSBAQAogVTg1MDBfSTJDX0NPTlRST0xMRVIoMiwJMHhlLCAxLCAxLCAxMDAwMDAsIEkyQ19GUkVRX01PREVfU1RBTkRBUkQpOwogVTg1MDBfSTJDX0NPTlRST0xMRVIoMywJMHhlLCAxLCAxLCAxMDAwMDAsIEkyQ19GUkVRX01PREVfU1RBTkRBUkQpOwogCi1zdGF0aWMgc3RydWN0IGFtYmFfZGV2aWNlICphbWJhX2RldnNbXSBfX2luaXRkYXRhID0gewotCSZ1eDUwMF91YXJ0MF9kZXZpY2UsCi0JJnV4NTAwX3VhcnQxX2RldmljZSwKLQkmdXg1MDBfdWFydDJfZGV2aWNlLAotCSZ1ODUwMF9zc3AwX2RldmljZSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgdXg1MDBfa2V5bWFwW10gPSB7Ci0JS0VZKDIsIDUsIEtFWV9FTkQpLAotCUtFWSg0LCAxLCBLRVlfUE9XRVIpLAotCUtFWSgzLCA1LCBLRVlfVk9MVU1FRE9XTiksCi0JS0VZKDEsIDMsIEtFWV8zKSwKLQlLRVkoNSwgMiwgS0VZX1JJR0hUKSwKLQlLRVkoNSwgMCwgS0VZXzkpLAotCi0JS0VZKDAsIDUsIEtFWV9NRU5VKSwKLQlLRVkoNywgNiwgS0VZX0VOVEVSKSwKLQlLRVkoNCwgNSwgS0VZXzApLAotCUtFWSg2LCA3LCBLRVlfMiksCi0JS0VZKDMsIDQsIEtFWV9VUCksCi0JS0VZKDMsIDMsIEtFWV9ET1dOKSwKLQotCUtFWSg2LCA0LCBLRVlfU0VORCksCi0JS0VZKDYsIDIsIEtFWV9CQUNLKSwKLQlLRVkoNCwgMiwgS0VZX1ZPTFVNRVVQKSwKLQlLRVkoNSwgNSwgS0VZXzEpLAotCUtFWSg0LCAzLCBLRVlfTEVGVCksCi0JS0VZKDMsIDIsIEtFWV83KSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWF0cml4X2tleW1hcF9kYXRhIHV4NTAwX2tleW1hcF9kYXRhID0gewotCS5rZXltYXAgICAgICAgICA9IHV4NTAwX2tleW1hcCwKLQkua2V5bWFwX3NpemUgICAgPSBBUlJBWV9TSVpFKHV4NTAwX2tleW1hcCksCi19OwotCi0vKgotICogTm9tYWRpayBTS0Uga2V5cGFkCi0gKi8KLSNkZWZpbmUgUk9XX1BJTl9JMCAgICAgIDE2NAotI2RlZmluZSBST1dfUElOX0kxICAgICAgMTYzCi0jZGVmaW5lIFJPV19QSU5fSTIgICAgICAxNjIKLSNkZWZpbmUgUk9XX1BJTl9JMyAgICAgIDE2MQotI2RlZmluZSBST1dfUElOX0k0ICAgICAgMTU2Ci0jZGVmaW5lIFJPV19QSU5fSTUgICAgICAxNTUKLSNkZWZpbmUgUk9XX1BJTl9JNiAgICAgIDE1NAotI2RlZmluZSBST1dfUElOX0k3ICAgICAgMTUzCi0jZGVmaW5lIENPTF9QSU5fTzAgICAgICAxNjgKLSNkZWZpbmUgQ09MX1BJTl9PMSAgICAgIDE2NwotI2RlZmluZSBDT0xfUElOX08yICAgICAgMTY2Ci0jZGVmaW5lIENPTF9QSU5fTzMgICAgICAxNjUKLSNkZWZpbmUgQ09MX1BJTl9PNCAgICAgIDE2MAotI2RlZmluZSBDT0xfUElOX081ICAgICAgMTU5Ci0jZGVmaW5lIENPTF9QSU5fTzYgICAgICAxNTgKLSNkZWZpbmUgQ09MX1BJTl9PNyAgICAgIDE1NwotCi0jZGVmaW5lIFNLRV9LUERfTUFYX1JPV1MgICAgICAgIDgKLSNkZWZpbmUgU0tFX0tQRF9NQVhfQ09MUyAgICAgICAgOAotCi1zdGF0aWMgaW50IHNrZV9rcF9yb3dzW10gPSB7Ci0JUk9XX1BJTl9JMCwgUk9XX1BJTl9JMSwgUk9XX1BJTl9JMiwgUk9XX1BJTl9JMywKLQlST1dfUElOX0k0LCBST1dfUElOX0k1LCBST1dfUElOX0k2LCBST1dfUElOX0k3LAotfTsKLQotLyoKLSAqIHNrZV9zZXRfZ3Bpb19yb3c6IHJlcXVlc3QgYW5kIHNldCBncGlvIHJvd3MKLSAqLwotc3RhdGljIGludCBza2Vfc2V0X2dwaW9fcm93KGludCBncGlvKQorc3RhdGljIHZvaWQgX19pbml0IG1vcDUwMF9pMmNfaW5pdCh2b2lkKQogewotCWludCByZXQ7Ci0KLQlyZXQgPSBncGlvX3JlcXVlc3QoZ3BpbywgInNrZS1rcCIpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByX2Vycigic2tlX3NldF9ncGlvX3JvdzogZ3BpbyByZXF1ZXN0IGZhaWxlZFxuIik7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGdwaW8sIDEpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByX2Vycigic2tlX3NldF9ncGlvX3JvdzogZ3BpbyBkaXJlY3Rpb24gZmFpbGVkXG4iKTsKLQkJZ3Bpb19mcmVlKGdwaW8pOwotCX0KLQotCXJldHVybiByZXQ7CisJZGI4NTAwX2FkZF9pMmMwKCZ1ODUwMF9pMmMwX2RhdGEpOworCWRiODUwMF9hZGRfaTJjMSgmdTg1MDBfaTJjMV9kYXRhKTsKKwlkYjg1MDBfYWRkX2kyYzIoJnU4NTAwX2kyYzJfZGF0YSk7CisJZGI4NTAwX2FkZF9pMmMzKCZ1ODUwMF9pMmMzX2RhdGEpOwogfQogCi0vKgotICogc2tlX2twX2luaXQgLSBlbmFibGUgdGhlIGdwaW8gY29uZmlndXJhdGlvbgotICovCi1zdGF0aWMgaW50IHNrZV9rcF9pbml0KHZvaWQpCi17Ci0JaW50IHJldCwgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBTS0VfS1BEX01BWF9ST1dTOyBpKyspIHsKLQkJcmV0ID0gc2tlX3NldF9ncGlvX3Jvdyhza2Vfa3Bfcm93c1tpXSk7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQlwcl9lcnIoInNrZV9rcF9pbml0OiBmYWlsZWQgaW5pdFxuIik7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2tlX2tleXBhZF9wbGF0Zm9ybV9kYXRhIHNrZV9rZXlwYWRfYm9hcmQgPSB7Ci0JLmluaXQgICAgICAgICAgID0gc2tlX2twX2luaXQsCi0JLmtleW1hcF9kYXRhICAgID0gJnV4NTAwX2tleW1hcF9kYXRhLAotCS5ub19hdXRvcmVwZWF0ICA9IHRydWUsCi0JLmtyb3cgICAgICAgICAgID0gU0tFX0tQRF9NQVhfUk9XUywgICAgIC8qIDh4OCBtYXRyaXggKi8KLQkua2NvbCAgICAgICAgICAgPSBTS0VfS1BEX01BWF9DT0xTLAotCS5kZWJvdW5jZV9tcyAgICA9IDQwLCAgICAgICAgICAgICAgICAgICAvKiBpbiBtaWxsc2VjcyAqLwotfTsKLQotCi0KIC8qIGFkZCBhbnkgcGxhdGZvcm0gZGV2aWNlcyBoZXJlIC0gVE9ETyAqLwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRmb3JtX2RldnNbXSBfX2luaXRkYXRhID0gewotCSZ1ODUwMF9pMmMwX2RldmljZSwKLQkmdXg1MDBfaTJjMV9kZXZpY2UsCi0JJnV4NTAwX2kyYzJfZGV2aWNlLAotCSZ1eDUwMF9pMmMzX2RldmljZSwKLQkmdXg1MDBfc2tlX2tleXBhZF9kZXZpY2UsCiB9OwogCitzdGF0aWMgdm9pZCBfX2luaXQgbW9wNTAwX3NwaV9pbml0KHZvaWQpCit7CisJZGI4NTAwX2FkZF9zc3AwKCZzc3AwX3BsYXRmb3JtX2RhdGEpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgbW9wNTAwX3VhcnRfaW5pdCh2b2lkKQoreworCWRiODUwMF9hZGRfdWFydDAoKTsKKwlkYjg1MDBfYWRkX3VhcnQxKCk7CisJZGI4NTAwX2FkZF91YXJ0MigpOworfQorCiBzdGF0aWMgdm9pZCBfX2luaXQgdTg1MDBfaW5pdF9tYWNoaW5lKHZvaWQpCiB7Ci0JaW50IGk7Ci0KIAl1ODUwMF9pbml0X2RldmljZXMoKTsKIAogCW5ta19jb25maWdfcGlucyhtb3A1MDBfcGlucywgQVJSQVlfU0laRShtb3A1MDBfcGlucykpOwogCi0JdTg1MDBfaTJjMF9kZXZpY2UuZGV2LnBsYXRmb3JtX2RhdGEgPSAmdTg1MDBfaTJjMF9kYXRhOwotCXV4NTAwX2kyYzFfZGV2aWNlLmRldi5wbGF0Zm9ybV9kYXRhID0gJnU4NTAwX2kyYzFfZGF0YTsKLQl1eDUwMF9pMmMyX2RldmljZS5kZXYucGxhdGZvcm1fZGF0YSA9ICZ1ODUwMF9pMmMyX2RhdGE7Ci0JdXg1MDBfaTJjM19kZXZpY2UuZGV2LnBsYXRmb3JtX2RhdGEgPSAmdTg1MDBfaTJjM19kYXRhOwotCXV4NTAwX3NrZV9rZXlwYWRfZGV2aWNlLmRldi5wbGF0Zm9ybV9kYXRhID0gJnNrZV9rZXlwYWRfYm9hcmQ7Ci0KLQl1ODUwMF9zc3AwX2RldmljZS5kZXYucGxhdGZvcm1fZGF0YSA9ICZzc3AwX3BsYXRmb3JtX2RhdGE7Ci0KLQkvKiBSZWdpc3RlciB0aGUgYWN0aXZlIEFNQkEgZGV2aWNlcyBvbiB0aGlzIGJvYXJkICovCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYW1iYV9kZXZzKTsgaSsrKQotCQlhbWJhX2RldmljZV9yZWdpc3RlcihhbWJhX2RldnNbaV0sICZpb21lbV9yZXNvdXJjZSk7Ci0KIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhwbGF0Zm9ybV9kZXZzLCBBUlJBWV9TSVpFKHBsYXRmb3JtX2RldnMpKTsKIAorCW1vcDUwMF9pMmNfaW5pdCgpOwogCW1vcDUwMF9zZGlfaW5pdCgpOworCW1vcDUwMF9zcGlfaW5pdCgpOworCW1vcDUwMF91YXJ0X2luaXQoKTsKIAotCS8qIElmIEhXIGlzIGVhcmx5IGRyb3AgKEVEKSBvciBWMS4wIHRoZW4gdXNlIFNQSSB0byBhY2Nlc3MgQUI4NTAwICovCi0JaWYgKGNwdV9pc191ODUwMGVkKCkgfHwgY3B1X2lzX3U4NTAwdjEwKCkpCi0JCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKGFiODUwMF9zcGlfZGV2aWNlcywKLQkJCUFSUkFZX1NJWkUoYWI4NTAwX3NwaV9kZXZpY2VzKSk7Ci0JZWxzZSAvKiBJZiBIVyBpcyB2LjEuMSBvciBsYXRlciB1c2UgSTJDIHRvIGFjY2VzcyBBQjg1MDAgKi8KLQkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhYjg1MDBfZGV2aWNlKTsKKwltb3A1MDBfa2V5cGFkX2luaXQoKTsKKworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYWI4NTAwX2RldmljZSk7CisKKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBtb3A1MDBfaTJjMF9kZXZpY2VzLAorCQkJCUFSUkFZX1NJWkUobW9wNTAwX2kyYzBfZGV2aWNlcykpOwogfQogCiBNQUNISU5FX1NUQVJUKFU4NTAwLCAiU1QtRXJpY3Nzb24gTU9QNTAwIHBsYXRmb3JtIikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdXg1MDAvYm9hcmQtbW9wNTAwLmggYi9hcmNoL2FybS9tYWNoLXV4NTAwL2JvYXJkLW1vcDUwMC5oCmluZGV4IDJkMjQwMzIuLjMxMDRhZTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdXg1MDAvYm9hcmQtbW9wNTAwLmgKKysrIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9ib2FyZC1tb3A1MDAuaApAQCAtNyw2ICs3LDE1IEBACiAjaWZuZGVmIF9fQk9BUkRfTU9QNTAwX0gKICNkZWZpbmUgX19CT0FSRF9NT1A1MDBfSAogCisjZGVmaW5lIE1PUDUwMF9FR1BJTyh4KQkJCShOT01BRElLX05SX0dQSU8gKyAoeCkpCisKKy8qIEdQSU9zIG9uIHRoZSBUQzM1ODkyIGV4cGFuZGVyICovCisjZGVmaW5lIEdQSU9fU0RNTUNfQ0QJCQlNT1A1MDBfRUdQSU8oMykKKyNkZWZpbmUgR1BJT19TRE1NQ19FTgkJCU1PUDUwMF9FR1BJTygxNykKKyNkZWZpbmUgR1BJT19TRE1NQ18xVjhfM1ZfU0VMCQlNT1A1MDBfRUdQSU8oMTgpCisKIGV4dGVybiB2b2lkIG1vcDUwMF9zZGlfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIG1vcDUwMF9zZGlfdGMzNTg5Ml9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgbW9wNTAwX2tleXBhZF9pbml0KHZvaWQpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdXg1MDAvYm9hcmQtdTU1MDAtc2RpLmMgYi9hcmNoL2FybS9tYWNoLXV4NTAwL2JvYXJkLXU1NTAwLXNkaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0NzEyYWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXV4NTAwL2JvYXJkLXU1NTAwLXNkaS5jCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIFNULUVyaWNzc29uIFNBIDIwMTAKKyAqCisgKiBBdXRob3I6IEhhbnVtYXRoIFByYXNhZCA8dWxmLmhhbnNzb25Ac3Rlcmljc3Nvbi5jb20+CisgKiBMaWNlbnNlIHRlcm1zOiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSB2ZXJzaW9uIDIKKyAqLworCisjaW5jbHVkZSA8bGludXgvYW1iYS9tbWNpLmg+CisjaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisKKyNpbmNsdWRlIDxwbGF0L3BpbmNmZy5oPgorI2luY2x1ZGUgPG1hY2gvZGI1NTAwLXJlZ3MuaD4KKyNpbmNsdWRlIDxwbGF0L3N0ZV9kbWE0MC5oPgorCisjaW5jbHVkZSAicGlucy1kYjU1MDAuaCIKKyNpbmNsdWRlICJkZXZpY2VzLWRiNTUwMC5oIgorI2luY2x1ZGUgInN0ZS1kbWE0MC1kYjU1MDAuaCIKKworc3RhdGljIHBpbl9jZmdfdCB1NTUwMF9zZGlfcGluc1tdID0geworCS8qIFNESTAgKFBPUCBlTU1DKSAqLworCUdQSU81X01DMF9EQVQwCQl8IFBJTl9ESVJfSU5QVVQgfCBQSU5fUFVMTF9VUCwKKwlHUElPNl9NQzBfREFUMQkJfCBQSU5fRElSX0lOUFVUIHwgUElOX1BVTExfVVAsCisJR1BJTzdfTUMwX0RBVDIJCXwgUElOX0RJUl9JTlBVVCB8IFBJTl9QVUxMX1VQLAorCUdQSU84X01DMF9EQVQzCQl8IFBJTl9ESVJfSU5QVVQgfCBQSU5fUFVMTF9VUCwKKwlHUElPOV9NQzBfREFUNAkJfCBQSU5fRElSX0lOUFVUIHwgUElOX1BVTExfVVAsCisJR1BJTzEwX01DMF9EQVQ1CQl8IFBJTl9ESVJfSU5QVVQgfCBQSU5fUFVMTF9VUCwKKwlHUElPMTFfTUMwX0RBVDYJCXwgUElOX0RJUl9JTlBVVCB8IFBJTl9QVUxMX1VQLAorCUdQSU8xMl9NQzBfREFUNwkJfCBQSU5fRElSX0lOUFVUIHwgUElOX1BVTExfVVAsCisJR1BJTzEzX01DMF9DTUQJCXwgUElOX0RJUl9JTlBVVCB8IFBJTl9QVUxMX1VQLAorCUdQSU8xNF9NQzBfQ0xLCQl8IFBJTl9ESVJfT1VUUFVUIHwgUElOX1ZBTF9MT1csCit9OworCitzdGF0aWMgc3RydWN0IG1tY2lfcGxhdGZvcm1fZGF0YSB1NTUwMF9zZGkwX2RhdGEgPSB7CisJLm9jcl9tYXNrCT0gTU1DX1ZERF8xNjVfMTk1LAorCS5mX21heAkJPSA1MDAwMDAwMCwKKwkuY2FwYWJpbGl0aWVzCT0gTU1DX0NBUF80X0JJVF9EQVRBIHwKKwkJCQlNTUNfQ0FQXzhfQklUX0RBVEEgfAorCQkJCU1NQ19DQVBfTU1DX0hJR0hTUEVFRCwKKwkuZ3Bpb19jZAk9IC0xLAorCS5ncGlvX3dwCT0gLTEsCit9OworCit2b2lkIF9faW5pdCB1NTUwMF9zZGlfaW5pdCh2b2lkKQoreworCW5ta19jb25maWdfcGlucyh1NTUwMF9zZGlfcGlucywgQVJSQVlfU0laRSh1NTUwMF9zZGlfcGlucykpOworCisJZGI1NTAwX2FkZF9zZGkwKCZ1NTUwMF9zZGkwX2RhdGEpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11eDUwMC9ib2FyZC11NTUwMC5jIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9ib2FyZC11NTUwMC5jCmluZGV4IDFjYTA5NGEuLjM5ZDM3MGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdXg1MDAvYm9hcmQtdTU1MDAuYworKysgYi9hcmNoL2FybS9tYWNoLXV4NTAwL2JvYXJkLXU1NTAwLmMKQEAgLTksNiArOSw3IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KQEAgLTE3LDIwICsxOCwyNCBAQAogI2luY2x1ZGUgPG1hY2gvZGV2aWNlcy5oPgogI2luY2x1ZGUgPG1hY2gvc2V0dXAuaD4KIAotc3RhdGljIHN0cnVjdCBhbWJhX2RldmljZSAqYW1iYV9ib2FyZF9kZXZzW10gX19pbml0ZGF0YSA9IHsKLQkmdXg1MDBfdWFydDBfZGV2aWNlLAotCSZ1eDUwMF91YXJ0MV9kZXZpY2UsCi0JJnV4NTAwX3VhcnQyX2RldmljZSwKLX07CisjaW5jbHVkZSAiZGV2aWNlcy1kYjU1MDAuaCIKKworc3RhdGljIHZvaWQgX19pbml0IHU1NTAwX3VhcnRfaW5pdCh2b2lkKQoreworCWRiNTUwMF9hZGRfdWFydDAoKTsKKwlkYjU1MDBfYWRkX3VhcnQxKCk7CisJZGI1NTAwX2FkZF91YXJ0MigpOworfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgdTU1MDBfaW5pdF9tYWNoaW5lKHZvaWQpCiB7CiAJdTU1MDBfaW5pdF9kZXZpY2VzKCk7CiAKLQlhbWJhX2FkZF9kZXZpY2VzKGFtYmFfYm9hcmRfZGV2cywgQVJSQVlfU0laRShhbWJhX2JvYXJkX2RldnMpKTsKKwl1NTUwMF9zZGlfaW5pdCgpOworCXU1NTAwX3VhcnRfaW5pdCgpOwogfQogCi1NQUNISU5FX1NUQVJUKFU4NTAwLCAiU1QtRXJpY3Nzb24gVTU1MDAgUGxhdGZvcm0iKQorTUFDSElORV9TVEFSVChVNTUwMCwgIlNULUVyaWNzc29uIFU1NTAwIFBsYXRmb3JtIikKIAkuYm9vdF9wYXJhbXMJPSAweDAwMDAwMTAwLAogCS5tYXBfaW8JCT0gdTU1MDBfbWFwX2lvLAogCS5pbml0X2lycQk9IHV4NTAwX2luaXRfaXJxLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11eDUwMC9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9jbG9jay5jCmluZGV4IDE2NzUwNDcuLmNjZmYyZGFlMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC11eDUwMC9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtdXg1MDAvY2xvY2suYwpAQCAtMTMsMTMgKzEzLDE4IEBACiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KLQotI2luY2x1ZGUgPGFzbS9jbGtkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGtkZXYuaD4KIAogI2luY2x1ZGUgPHBsYXQvbXR1Lmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgImNsb2NrLmgiCiAKKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgkvKiBmb3IgY29weV9mcm9tX3VzZXIgKi8KK3N0YXRpYyBMSVNUX0hFQUQoY2xrX2xpc3QpOworI2VuZGlmCisKICNkZWZpbmUgUFJDQ19QQ0tFTgkJMHgwMAogI2RlZmluZSBQUkNDX1BDS0RJUwkJMHgwNAogI2RlZmluZSBQUkNDX0tDS0VOCQkweDA4CkBAIC0xMzMsNyArMTM4LDcgQEAKIHsKIAl2b2lkIF9faW9tZW0gKmFkZHIgPSBfX2lvX2FkZHJlc3MoVVg1MDBfUFJDTVVfQkFTRSkKIAkJKyBQUkNNX1RDUjsKLQl1MzIgdGNyID0gcmVhZGwoYWRkcik7CisJdTMyIHRjcjsKIAlpbnQgbXR1ID0gKGludCkgY2xrLT5kYXRhOwogCS8qCiAJICogT25lIG9mIHRoZXNlIGlzIHNlbGVjdGVkIGV2ZW50dWFsbHkKQEAgLTE0NCw2ICsxNDksMTQgQEAKIAl1bnNpZ25lZCBsb25nIG10dXJhdGU7CiAJdW5zaWduZWQgbG9uZyByZXRjbGs7CiAKKwkvKgorCSAqIE9uIGEgc3RhcnR1cCwgYWx3YXlzIGNvbmlmZ3VyZSB0aGUgVENSIHRvIHRoZSBkb3plIG1vZGU7CisJICogYm9vdGxvYWRlcnMgZG8gaXQgZm9yIHVzLiBEbyB0aGlzIGluIHRoZSBrZXJuZWwgdG9vLgorCSAqLworCXdyaXRlbChQUkNNX1RDUl9ET1pFX01PREUsIGFkZHIpOworCisJdGNyID0gcmVhZGwoYWRkcik7CisKIAkvKiBHZXQgdGhlIHJhdGUgZnJvbSB0aGUgcGFyZW50IGFzIGEgZGVmYXVsdCAqLwogCWlmIChjbGstPnBhcmVudF9wZXJpcGgpCiAJCW10dXJhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnRfcGVyaXBoKTsKQEAgLTE1Myw0NSArMTY2LDYgQEAKIAkJLyogV2UgbmVlZCB0byBiZSBjb25uZWN0ZWQgU09NRVdIRVJFICovCiAJCUJVRygpOwogCi0JLyoKLQkgKiBBcmUgd2UgaW4gZG96ZSBtb2RlPwotCSAqIEluIHRoaXMgbW9kZSB0aGUgcGFyZW50IHBlcmlwaGVyYWwgb3IgdGhlIGZpeGVkIDMyNzY4IEh6Ci0JICogY2xvY2sgaXMgZmVkIGludG8gdGhlIGJsb2NrLgotCSAqLwotCWlmICghKHRjciAmIFBSQ01fVENSX0RPWkVfTU9ERSkpIHsKLQkJLyoKLQkJICogSGVyZSB3ZSdyZSB1c2luZyB0aGUgY2xvY2sgaW5wdXQgZnJvbSB0aGUgQVBFIFVMUAotCQkgKiBjbG9jayBkb21haW4uIEJ1dCBmaXJzdDogYXJlIHRoZSB0aW1lcnMgc3RvcHBlZD8KLQkJICovCi0JCWlmICh0Y3IgJiBQUkNNX1RDUl9TVE9QUEVEKSB7Ci0JCQljbGszMmsgPSAwOwotCQkJbXR1cmF0ZSA9IDA7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBFbHNlIGRlZmF1bHQgbW9kZTogMCBhbmQgMi40IE1IeiAqLwotCQkJY2xrMzJrID0gMDsKLQkJCWlmIChjcHVfaXNfdTU1MDAoKSkKLQkJCQkvKiBEQjU1MDAgZGl2aWRlcyBieSA4ICovCi0JCQkJbXR1cmF0ZSAvPSA4OwotCQkJZWxzZSBpZiAoY3B1X2lzX3U4NTAwZWQoKSkgewotCQkJCS8qCi0JCQkJICogVGhpcyBjbG9ja2luZyBzZXR0aW5nIG11c3Qgbm90IGJlIHVzZWQKLQkJCQkgKiBpbiB0aGUgRUQgY2hpcCwgaXQgaXMgc2ltcGx5IG5vdAotCQkJCSAqIGNvbm5lY3RlZCBhbnl3aGVyZSEKLQkJCQkgKi8KLQkJCQltdHVyYXRlID0gMDsKLQkJCQlCVUcoKTsKLQkJCX0gZWxzZQotCQkJCS8qCi0JCQkJICogSW4gdGhpcyBtb2RlIHRoZSB1bHAzOG00IGNsb2NrIGlzIGRpdmlkZWQKLQkJCQkgKiBieSBhIGZhY3RvciAxNiwgb24gdGhlIERCODUwMCB0eXBpY2FsbHkKLQkJCQkgKiAzODQwMDAwMCAvIDE2IH4gMi40IE1Iei4KLQkJCQkgKiBUT0RPOiBSZXBsYWNlIHRoZSBjb25zdGFudCB3aXRoIGEgcmVmZXJlbmNlCi0JCQkJICogdG8gdGhlIFVMUCBzb3VyY2Ugb25jZSB0aGlzIGlzIG1vZGVsZWQuCi0JCQkJICovCi0JCQkJbXR1cmF0ZSA9IDM4NDAwMDAwIC8gMTY7Ci0JCX0KLQl9Ci0KIAkvKiBSZXR1cm4gdGhlIGNsb2NrIHNlbGVjdGVkIGZvciB0aGlzIE1UVSAqLwogCWlmICh0Y3IgJiAoMSA8PCBtdHUpKQogCQlyZXRjbGsgPSBjbGszMms7CkBAIC0zMTcsNiArMjkxLDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNsa18zMmtoeiA9IHsKKwkubmFtZSA9ICAiY2xrXzMya2h6IiwKIAkucmF0ZSA9IDMyMDAwLAogfTsKIApAQCAtMzY2LDk0ICszNDEsOTYgQEAKICAqLwogCiAvKiBQZXJpcGhlcmFsIENsdXN0ZXIgIzEgKi8KLXN0YXRpYyBERUZJTkVfUFJDQ19DTEsoMSwgaTJjNCwgCTEwLCA5LCAmY2xrX2kyY2Nsayk7CitzdGF0aWMgREVGSU5FX1BSQ0NfQ0xLKDEsIGkyYzQsCQkxMCwgOSwgJmNsa19pMmNjbGspOwogc3RhdGljIERFRklORV9QUkNDX0NMSygxLCBncGlvMCwJOSwgLTEsIE5VTEwpOwotc3RhdGljIERFRklORV9QUkNDX0NMSygxLCBzbGltYnVzMCwgCTgsICA4LCAmY2xrX3NsaW1jbGspOwotc3RhdGljIERFRklORV9QUkNDX0NMSygxLCBzcGkzX2VkLCAJNywgIDcsIE5VTEwpOwotc3RhdGljIERFRklORV9QUkNDX0NMSygxLCBzcGkzX3YxLCAJNywgLTEsIE5VTEwpOwotc3RhdGljIERFRklORV9QUkNDX0NMSygxLCBpMmMyLCAJNiwgIDYsICZjbGtfaTJjY2xrKTsKK3N0YXRpYyBERUZJTkVfUFJDQ19DTEsoMSwgc2xpbWJ1czAsCTgsICA4LCAmY2xrX3NsaW1jbGspOworc3RhdGljIERFRklORV9QUkNDX0NMSygxLCBzcGkzX2VkLAk3LCAgNywgTlVMTCk7CitzdGF0aWMgREVGSU5FX1BSQ0NfQ0xLKDEsIHNwaTNfdjEsCTcsIC0xLCBOVUxMKTsKK3N0YXRpYyBERUZJTkVfUFJDQ19DTEsoMSwgaTJjMiwJCTYsICA2LCAmY2xrX2kyY2Nsayk7CiBzdGF0aWMgREVGSU5FX1BSQ0NfQ0xLKDEsIHNkaTAsCQk1LCAgNSwgJmNsa19zZG1tY2Nsayk7Ci1zdGF0aWMgREVGSU5FX1BSQ0NfQ0xLKDEsIG1zcDFfZWQsIAk0LCAgNCwgJmNsa19tc3AwMmNsayk7Ci1zdGF0aWMgREVGSU5FX1BSQ0NfQ0xLKDEsIG1zcDFfdjEsIAk0LCAgNCwgJmNsa19tc3AxY2xrKTsKLXN0YXRpYyBERUZJTkVfUFJDQ19DTEsoMSwgbXNwMCwgCTMsICAzLCAmY2xrX21zcDAyY2xrKTsKLXN0YXRpYyBERUZJTkVfUFJDQ19DTEsoMSwgaTJjMSwgCTIsICAyLCAmY2xrX2kyY2Nsayk7Ci1zdGF0aWMgREVGSU5FX1BSQ0NfQ0xLKDEsIHVhcnQxLCAJMSwgIDEsICZjbGtfdWFydGNsayk7Ci1zdGF0aWMgREVGSU5FX1BSQ0NfQ0xLKDEsIHVhcnQwLCAJMCwgIDAsICZjbGtfdWFydGNsayk7CitzdGF0aWMgREVGSU5FX1BSQ0NfQ0xLKDEsIG1zcDFfZWQsCTQsICA0LCAmY2xrX21zcDAyY2xrKTsKK3N0YXRpYyBERUZJTkVfUFJDQ19DTEsoMSwgbXNwMV92MSwJNCwgIDQsICZjbGtfbXNwMWNsayk7CitzdGF0aWMgREVGSU5FX1BSQ0NfQ0xLKDEsIG1zcDAsCQkzLCAgMywgJmNsa19tc3AwMmNsayk7CitzdGF0aWMgREVGSU5FX1BSQ0NfQ0xLKDEsIGkyYzEsCQkyLCAgMiwgJmNsa19pMmNjbGspOworc3RhdGljIERFRklORV9QUkNDX0NMSygxLCB1YXJ0MSwJMSwgIDEsICZjbGtfdWFydGNsayk7CitzdGF0aWMgREVGSU5FX1BSQ0NfQ0xLKDEsIHVhcnQwLAkwLCAgMCwgJmNsa191YXJ0Y2xrKTsKIAogLyogUGVyaXBoZXJhbCBDbHVzdGVyICMyICovCiAKIHN0YXRpYyBERUZJTkVfUFJDQ19DTEsoMiwgZ3BpbzFfZWQsCTEyLCAtMSwgTlVMTCk7Ci1zdGF0aWMgREVGSU5FX1BSQ0NfQ0xLKDIsIHNzaXR4X2VkLCAJMTEsIC0xLCBOVUxMKTsKLXN0YXRpYyBERUZJTkVfUFJDQ19DTEsoMiwgc3NpcnhfZWQsIAkxMCwgLTEsIE5VTEwpOwotc3RhdGljIERFRklORV9QUkNDX0NMSygyLCBzcGkwX2VkLCAJIDksIC0xLCBOVUxMKTsKLXN0YXRpYyBERUZJTkVfUFJDQ19DTEsoMiwgc2RpM19lZCwgCSA4LCAgNiwgJmNsa19zZG1tY2Nsayk7Ci1zdGF0aWMgREVGSU5FX1BSQ0NfQ0xLKDIsIHNkaTFfZWQsIAkgNywgIDUsICZjbGtfc2RtbWNjbGspOwotc3RhdGljIERFRklORV9QUkNDX0NMSygyLCBtc3AyX2VkLCAJIDYsICA0LCAmY2xrX21zcDAyY2xrKTsKLXN0YXRpYyBERUZJTkVfUFJDQ19DTEsoMiwgc2RpNF9lZCwgCSA0LCAgMiwgJmNsa19zZG1tY2Nsayk7CitzdGF0aWMgREVGSU5FX1BSQ0NfQ0xLKDIsIHNzaXR4X2VkLAkxMSwgLTEsIE5VTEwpOworc3RhdGljIERFRklORV9QUkNDX0NMSygyLCBzc2lyeF9lZCwJMTAsIC0xLCBOVUxMKTsKK3N0YXRpYyBERUZJTkVfUFJDQ19DTEsoMiwgc3BpMF9lZCwJIDksIC0xLCBOVUxMKTsKK3N0YXRpYyBERUZJTkVfUFJDQ19DTEsoMiwgc2RpM19lZCwJIDgsICA2LCAmY2xrX3NkbW1jY2xrKTsKK3N0YXRpYyBERUZJTkVfUFJDQ19DTEsoMiwgc2RpMV9lZCwJIDcsICA1LCAmY2xrX3NkbW1jY2xrKTsKK3N0YXRpYyBERUZJTkVfUFJDQ19DTEsoMiwgbXNwMl9lZCwJIDYsICA0LCAmY2xrX21zcDAyY2xrKTsKK3N0YXRpYyBERUZJTkVfUFJDQ19DTEsoMiwgc2RpNF9lZCwJIDQsICAyLCAmY2xrX3NkbW1jY2xrKTsKIHN0YXRpYyBERUZJTkVfUFJDQ19DTEsoMiwgcHdsX2VkLAkgMywgIDEsIE5VTEwpOwotc3RhdGljIERFRklORV9QUkNDX0NMSygyLCBzcGkxX2VkLCAJIDIsIC0xLCBOVUxMKTsKLXN0YXRpYyBERUZJTkVfUFJDQ19DTEsoMiwgc3BpMl9lZCwgCSAxLCAtMSwgTlVMTCk7Ci1zdGF0aWMgREVGSU5FX1BSQ0NfQ0xLKDIsIGkyYzNfZWQsIAkgMCwgIDAsICZjbGtfaTJjY2xrKTsKK3N0YXRpYyBERUZJTkVfUFJDQ19DTEsoMiwgc3BpMV9lZCwJIDIsIC0xLCBOVUxMKTsKK3N0YXRpYyBERUZJTkVfUFJDQ19DTEsoMiwgc3BpMl9lZCwJIDEsIC0xLCBOVUxMKTsKK3N0YXRpYyBERUZJTkVfUFJDQ19DTEsoMiwgaTJjM19lZCwJIDAsICAwLCAmY2xrX2kyY2Nsayk7CiAKIHN0YXRpYyBERUZJTkVfUFJDQ19DTEsoMiwgZ3BpbzFfdjEsCTExLCAtMSwgTlVMTCk7Ci1zdGF0aWMgREVGSU5FX1BSQ0NfQ0xLKDIsIHNzaXR4X3YxLCAJMTAsICA3LCBOVUxMKTsKLXN0YXRpYyBERUZJTkVfUFJDQ19DTEsoMiwgc3NpcnhfdjEsIAkgOSwgIDYsIE5VTEwpOwotc3RhdGljIERFRklORV9QUkNDX0NMSygyLCBzcGkwX3YxLCAJIDgsIC0xLCBOVUxMKTsKLXN0YXRpYyBERUZJTkVfUFJDQ19DTEsoMiwgc2RpM192MSwgCSA3LCAgNSwgJmNsa19zZG1tY2Nsayk7Ci1zdGF0aWMgREVGSU5FX1BSQ0NfQ0xLKDIsIHNkaTFfdjEsIAkgNiwgIDQsICZjbGtfc2RtbWNjbGspOwotc3RhdGljIERFRklORV9QUkNDX0NMSygyLCBtc3AyX3YxLCAJIDUsICAzLCAmY2xrX21zcDAyY2xrKTsKLXN0YXRpYyBERUZJTkVfUFJDQ19DTEsoMiwgc2RpNF92MSwgCSA0LCAgMiwgJmNsa19zZG1tY2Nsayk7CitzdGF0aWMgREVGSU5FX1BSQ0NfQ0xLKDIsIHNzaXR4X3YxLAkxMCwgIDcsIE5VTEwpOworc3RhdGljIERFRklORV9QUkNDX0NMSygyLCBzc2lyeF92MSwJIDksICA2LCBOVUxMKTsKK3N0YXRpYyBERUZJTkVfUFJDQ19DTEsoMiwgc3BpMF92MSwJIDgsIC0xLCBOVUxMKTsKK3N0YXRpYyBERUZJTkVfUFJDQ19DTEsoMiwgc2RpM192MSwJIDcsICA1LCAmY2xrX3NkbW1jY2xrKTsKK3N0YXRpYyBERUZJTkVfUFJDQ19DTEsoMiwgc2RpMV92MSwJIDYsICA0LCAmY2xrX3NkbW1jY2xrKTsKK3N0YXRpYyBERUZJTkVfUFJDQ19DTEsoMiwgbXNwMl92MSwJIDUsICAzLCAmY2xrX21zcDAyY2xrKTsKK3N0YXRpYyBERUZJTkVfUFJDQ19DTEsoMiwgc2RpNF92MSwJIDQsICAyLCAmY2xrX3NkbW1jY2xrKTsKIHN0YXRpYyBERUZJTkVfUFJDQ19DTEsoMiwgcHdsX3YxLAkgMywgIDEsIE5VTEwpOwotc3RhdGljIERFRklORV9QUkNDX0NMSygyLCBzcGkxX3YxLCAJIDIsIC0xLCBOVUxMKTsKLXN0YXRpYyBERUZJTkVfUFJDQ19DTEsoMiwgc3BpMl92MSwgCSAxLCAtMSwgTlVMTCk7Ci1zdGF0aWMgREVGSU5FX1BSQ0NfQ0xLKDIsIGkyYzNfdjEsIAkgMCwgIDAsICZjbGtfaTJjY2xrKTsKK3N0YXRpYyBERUZJTkVfUFJDQ19DTEsoMiwgc3BpMV92MSwJIDIsIC0xLCBOVUxMKTsKK3N0YXRpYyBERUZJTkVfUFJDQ19DTEsoMiwgc3BpMl92MSwJIDEsIC0xLCBOVUxMKTsKK3N0YXRpYyBERUZJTkVfUFJDQ19DTEsoMiwgaTJjM192MSwJIDAsICAwLCAmY2xrX2kyY2Nsayk7CiAKIC8qIFBlcmlwaGVyYWwgQ2x1c3RlciAjMyAqLwotc3RhdGljIERFRklORV9QUkNDX0NMSygzLCBncGlvMiwgCTgsIC0xLCBOVUxMKTsKLXN0YXRpYyBERUZJTkVfUFJDQ19DTEsoMywgc2RpNSwgCTcsICA3LCAmY2xrX3NkbW1jY2xrKTsKLXN0YXRpYyBERUZJTkVfUFJDQ19DTEsoMywgdWFydDIsIAk2LCAgNiwgJmNsa191YXJ0Y2xrKTsKLXN0YXRpYyBERUZJTkVfUFJDQ19DTEsoMywgc2tlLCAJCTUsICA1LCAmY2xrXzMya2h6KTsKLXN0YXRpYyBERUZJTkVfUFJDQ19DTEsoMywgc2RpMiwgCTQsICA0LCAmY2xrX3NkbW1jY2xrKTsKLXN0YXRpYyBERUZJTkVfUFJDQ19DTEsoMywgaTJjMCwgCTMsICAzLCAmY2xrX2kyY2Nsayk7Ci1zdGF0aWMgREVGSU5FX1BSQ0NfQ0xLKDMsIHNzcDFfZWQsIAkyLCAgMiwgJmNsa19pMmNjbGspOwotc3RhdGljIERFRklORV9QUkNDX0NMSygzLCBzc3AwX2VkLCAJMSwgIDEsICZjbGtfaTJjY2xrKTsKLXN0YXRpYyBERUZJTkVfUFJDQ19DTEsoMywgc3NwMV92MSwgCTIsICAyLCAmY2xrX3NzcGNsayk7Ci1zdGF0aWMgREVGSU5FX1BSQ0NfQ0xLKDMsIHNzcDBfdjEsIAkxLCAgMSwgJmNsa19zc3BjbGspOwotc3RhdGljIERFRklORV9QUkNDX0NMSygzLCBmc21jLCAJMCwgLTEsIE5VTEwpOworc3RhdGljIERFRklORV9QUkNDX0NMSygzLCBncGlvMiwJOCwgLTEsIE5VTEwpOworc3RhdGljIERFRklORV9QUkNDX0NMSygzLCBzZGk1LAkJNywgIDcsICZjbGtfc2RtbWNjbGspOworc3RhdGljIERFRklORV9QUkNDX0NMSygzLCB1YXJ0MiwJNiwgIDYsICZjbGtfdWFydGNsayk7CitzdGF0aWMgREVGSU5FX1BSQ0NfQ0xLKDMsIHNrZSwJCTUsICA1LCAmY2xrXzMya2h6KTsKK3N0YXRpYyBERUZJTkVfUFJDQ19DTEsoMywgc2RpMiwJCTQsICA0LCAmY2xrX3NkbW1jY2xrKTsKK3N0YXRpYyBERUZJTkVfUFJDQ19DTEsoMywgaTJjMCwJCTMsICAzLCAmY2xrX2kyY2Nsayk7CitzdGF0aWMgREVGSU5FX1BSQ0NfQ0xLKDMsIHNzcDFfZWQsCTIsICAyLCAmY2xrX2kyY2Nsayk7CitzdGF0aWMgREVGSU5FX1BSQ0NfQ0xLKDMsIHNzcDBfZWQsCTEsICAxLCAmY2xrX2kyY2Nsayk7CitzdGF0aWMgREVGSU5FX1BSQ0NfQ0xLKDMsIHNzcDFfdjEsCTIsICAyLCAmY2xrX3NzcGNsayk7CitzdGF0aWMgREVGSU5FX1BSQ0NfQ0xLKDMsIHNzcDBfdjEsCTEsICAxLCAmY2xrX3NzcGNsayk7CitzdGF0aWMgREVGSU5FX1BSQ0NfQ0xLKDMsIGZzbWMsCQkwLCAtMSwgTlVMTCk7CiAKIC8qIFBlcmlwaGVyYWwgQ2x1c3RlciAjNCBpcyBpbiB0aGUgYWx3YXlzIG9uIGRvbWFpbiAqLwogCiAvKiBQZXJpcGhlcmFsIENsdXN0ZXIgIzUgKi8KLXN0YXRpYyBERUZJTkVfUFJDQ19DTEsoNSwgZ3BpbzMsIAkxLCAtMSwgTlVMTCk7Ci1zdGF0aWMgREVGSU5FX1BSQ0NfQ0xLKDUsIHVzYl9lZCwgCTAsICAwLCAmY2xrX2kyY2Nsayk7Ci1zdGF0aWMgREVGSU5FX1BSQ0NfQ0xLKDUsIHVzYl92MSwgCTAsICAwLCBOVUxMKTsKK3N0YXRpYyBERUZJTkVfUFJDQ19DTEsoNSwgZ3BpbzMsCTEsIC0xLCBOVUxMKTsKK3N0YXRpYyBERUZJTkVfUFJDQ19DTEsoNSwgdXNiX2VkLAkwLCAgMCwgJmNsa19pMmNjbGspOworc3RhdGljIERFRklORV9QUkNDX0NMSyg1LCB1c2JfdjEsCTAsICAwLCBOVUxMKTsKIAogLyogUGVyaXBoZXJhbCBDbHVzdGVyICM2ICovCiAKIC8qIE1UVSBJRCBpbiBkYXRhICovCiBzdGF0aWMgREVGSU5FX1BSQ0NfQ0xLX0NVU1RPTSg2LCBtdHUxX3YxLCA4LCAtMSwgTlVMTCwgY2xrX210dV9nZXRfcmF0ZSwgMSk7CiBzdGF0aWMgREVGSU5FX1BSQ0NfQ0xLX0NVU1RPTSg2LCBtdHUwX3YxLCA3LCAtMSwgTlVMTCwgY2xrX210dV9nZXRfcmF0ZSwgMCk7Ci1zdGF0aWMgREVGSU5FX1BSQ0NfQ0xLKDYsIGNmZ3JlZ192MSwgCTYsICA2LCBOVUxMKTsKLXN0YXRpYyBERUZJTkVfUFJDQ19DTEsoNiwgZG1jX2VkLCAJNiwgIDYsIE5VTEwpOwotc3RhdGljIERFRklORV9QUkNDX0NMSyg2LCBoYXNoMSwgCTUsIC0xLCBOVUxMKTsKLXN0YXRpYyBERUZJTkVfUFJDQ19DTEsoNiwgdW5pcHJvX3YxLCAJNCwgIDEsICZjbGtfdW5pcHJvY2xrKTsKLXN0YXRpYyBERUZJTkVfUFJDQ19DTEsoNiwgY3J5cDFfZWQsIAk0LCAtMSwgTlVMTCk7Ci1zdGF0aWMgREVGSU5FX1BSQ0NfQ0xLKDYsIHBrYSwgCQkzLCAtMSwgTlVMTCk7Ci1zdGF0aWMgREVGSU5FX1BSQ0NfQ0xLKDYsIGhhc2gwLCAJMiwgLTEsIE5VTEwpOwotc3RhdGljIERFRklORV9QUkNDX0NMSyg2LCBjcnlwMCwgCTEsIC0xLCBOVUxMKTsKLXN0YXRpYyBERUZJTkVfUFJDQ19DTEsoNiwgcm5nX2VkLCAJMCwgIDAsICZjbGtfaTJjY2xrKTsKLXN0YXRpYyBERUZJTkVfUFJDQ19DTEsoNiwgcm5nX3YxLCAJMCwgIDAsICZjbGtfcm5nY2xrKTsKK3N0YXRpYyBERUZJTkVfUFJDQ19DTEsoNiwgY2ZncmVnX3YxLAk2LCAgNiwgTlVMTCk7CitzdGF0aWMgREVGSU5FX1BSQ0NfQ0xLKDYsIGRtY19lZCwJNiwgIDYsIE5VTEwpOworc3RhdGljIERFRklORV9QUkNDX0NMSyg2LCBoYXNoMSwJNSwgLTEsIE5VTEwpOworc3RhdGljIERFRklORV9QUkNDX0NMSyg2LCB1bmlwcm9fdjEsCTQsICAxLCAmY2xrX3VuaXByb2Nsayk7CitzdGF0aWMgREVGSU5FX1BSQ0NfQ0xLKDYsIGNyeXAxX2VkLAk0LCAtMSwgTlVMTCk7CitzdGF0aWMgREVGSU5FX1BSQ0NfQ0xLKDYsIHBrYSwJCTMsIC0xLCBOVUxMKTsKK3N0YXRpYyBERUZJTkVfUFJDQ19DTEsoNiwgaGFzaDAsCTIsIC0xLCBOVUxMKTsKK3N0YXRpYyBERUZJTkVfUFJDQ19DTEsoNiwgY3J5cDAsCTEsIC0xLCBOVUxMKTsKK3N0YXRpYyBERUZJTkVfUFJDQ19DTEsoNiwgcm5nX2VkLAkwLCAgMCwgJmNsa19pMmNjbGspOworc3RhdGljIERFRklORV9QUkNDX0NMSyg2LCBybmdfdjEsCTAsICAwLCAmY2xrX3JuZ2Nsayk7CiAKIC8qIFBlcmlwaGVyYWwgQ2x1c3RlciAjNyAqLwogCi1zdGF0aWMgREVGSU5FX1BSQ0NfQ0xLKDcsIHR6cGMwX2VkLCAJNCwgLTEsIE5VTEwpOworc3RhdGljIERFRklORV9QUkNDX0NMSyg3LCB0enBjMF9lZCwJNCwgLTEsIE5VTEwpOwogLyogTVRVIElEIGluIGRhdGEgKi8KIHN0YXRpYyBERUZJTkVfUFJDQ19DTEtfQ1VTVE9NKDcsIG10dTFfZWQsIDMsIC0xLCBOVUxMLCBjbGtfbXR1X2dldF9yYXRlLCAxKTsKIHN0YXRpYyBERUZJTkVfUFJDQ19DTEtfQ1VTVE9NKDcsIG10dTBfZWQsIDIsIC0xLCBOVUxMLCBjbGtfbXR1X2dldF9yYXRlLCAwKTsKLXN0YXRpYyBERUZJTkVfUFJDQ19DTEsoNywgd2RnX2VkLCAJMSwgLTEsIE5VTEwpOwotc3RhdGljIERFRklORV9QUkNDX0NMSyg3LCBjZmdyZWdfZWQsIAkwLCAtMSwgTlVMTCk7CitzdGF0aWMgREVGSU5FX1BSQ0NfQ0xLKDcsIHdkZ19lZCwJMSwgLTEsIE5VTEwpOworc3RhdGljIERFRklORV9QUkNDX0NMSyg3LCBjZmdyZWdfZWQsCTAsIC0xLCBOVUxMKTsKIAotc3RhdGljIHN0cnVjdCBjbGsgY2xrX2R1bW15X2FwYl9wY2xrOworc3RhdGljIHN0cnVjdCBjbGsgY2xrX2R1bW15X2FwYl9wY2xrID0geworCS5uYW1lID0gImFwYl9wY2xrIiwKK307CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCB1ODUwMF9jb21tb25fY2xrc1tdID0gewogCUNMSyhkdW1teV9hcGJfcGNsaywgTlVMTCwJImFwYl9wY2xrIiksCkBAIC01NTQsNyArNTMxLDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIHU4NTAwX3YxX2Nsa3NbXSA9IHsKIAkvKiBQZXJpcGhlcmFsIENsdXN0ZXIgIzEgKi8KLQlDTEsoaTJjNCwJIm5tay1pMmMuNCIsIAlOVUxMKSwKKwlDTEsoaTJjNCwJIm5tay1pMmMuNCIsCU5VTEwpLAogCUNMSyhzcGkzX3YxLAkic3BpMyIsCQlOVUxMKSwKIAlDTEsobXNwMV92MSwJIm1zcDEiLAkJTlVMTCksCiAKQEAgLTU5OSw2ICs1NzYsMTgzIEBACiAJQ0xLKHVpY2NjbGssCSJ1aWNjIiwJCU5VTEwpLAogfTsKIAorI2lmZGVmIENPTkZJR19ERUJVR19GUworLyoKKyAqCWRlYnVnZnMgc3VwcG9ydCB0byB0cmFjZSBjbG9jayB0cmVlIGhpZXJhcmNoeSBhbmQgYXR0cmlidXRlcyB3aXRoCisgKglwb3dlcmRlYnVnCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpjbGtfZGVidWdmc19yb290OworCit2b2lkIF9faW5pdCBjbGtfZGVidWdmc19hZGRfdGFibGUoc3RydWN0IGNsa19sb29rdXAgKmNsLCBzaXplX3QgbnVtKQoreworCXdoaWxlIChudW0tLSkgeworCQkvKiBDaGVjayB0aGF0IHRoZSBjbG9jayBoYXMgbm90IGJlZW4gYWxyZWFkeSByZWdpc3RlcmVkICovCisJCWlmICghKGNsLT5jbGstPmxpc3QucHJldiAhPSBjbC0+Y2xrLT5saXN0Lm5leHQpKQorCQkJbGlzdF9hZGRfdGFpbCgmY2wtPmNsay0+bGlzdCwgJmNsa19saXN0KTsKKworCQljbCsrOworCX0KK30KKworc3RhdGljIHNzaXplX3QgdXNlY291bnRfZGJnX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCisJCQkJCQkgIHNpemVfdCBzaXplLCBsb2ZmX3QgKm9mZikKK3sKKwlzdHJ1Y3QgY2xrICpjbGsgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9wcml2YXRlOworCWNoYXIgY3VzZWNvdW50WzEyOF07CisJdW5zaWduZWQgaW50IGxlbjsKKworCWxlbiA9IHNwcmludGYoY3VzZWNvdW50LCAiJXVcbiIsIGNsay0+ZW5hYmxlZCk7CisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKGJ1Ziwgc2l6ZSwgb2ZmLCBjdXNlY291bnQsIGxlbik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHJhdGVfZGJnX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCisJCQkJCSAgc2l6ZV90IHNpemUsIGxvZmZfdCAqb2ZmKQoreworCXN0cnVjdCBjbGsgKmNsayA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX3ByaXZhdGU7CisJY2hhciBjcmF0ZVsxMjhdOworCXVuc2lnbmVkIGludCByYXRlOworCXVuc2lnbmVkIGludCBsZW47CisKKwlyYXRlID0gY2xrX2dldF9yYXRlKGNsayk7CisJbGVuID0gc3ByaW50ZihjcmF0ZSwgIiV1XG4iLCByYXRlKTsKKwlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIoYnVmLCBzaXplLCBvZmYsIGNyYXRlLCBsZW4pOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1c2Vjb3VudF9mb3BzID0geworCS5yZWFkID0gdXNlY291bnRfZGJnX3JlYWQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzZXRfcmF0ZV9mb3BzID0geworCS5yZWFkID0gcmF0ZV9kYmdfcmVhZCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpjbGtfZGVidWdmc19yZWdpc3Rlcl9kaXIoc3RydWN0IGNsayAqYywKKwkJCQkJCXN0cnVjdCBkZW50cnkgKnBfZGVudHJ5KQoreworCXN0cnVjdCBkZW50cnkgKmQsICpjbGtfZCwgKmNoaWxkLCAqY2hpbGRfdG1wOworCWNoYXIgc1syNTVdOworCWNoYXIgKnAgPSBzOworCisJaWYgKGMtPm5hbWUgPT0gTlVMTCkKKwkJcCArPSBzcHJpbnRmKHAsICJCVUciKTsKKwllbHNlCisJCXAgKz0gc3ByaW50ZihwLCAiJXMiLCBjLT5uYW1lKTsKKworCWNsa19kID0gZGVidWdmc19jcmVhdGVfZGlyKHMsIHBfZGVudHJ5KTsKKwlpZiAoIWNsa19kKQorCQlyZXR1cm4gTlVMTDsKKworCWQgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJ1c2Vjb3VudCIsIFNfSVJVR08sCisJCQkJY2xrX2QsIGMsICZ1c2Vjb3VudF9mb3BzKTsKKwlpZiAoIWQpCisJCWdvdG8gZXJyX291dDsKKwlkID0gZGVidWdmc19jcmVhdGVfZmlsZSgicmF0ZSIsIFNfSVJVR08sCisJCQkJY2xrX2QsIGMsICZzZXRfcmF0ZV9mb3BzKTsKKwlpZiAoIWQpCisJCWdvdG8gZXJyX291dDsKKwkvKgorCSAqIFRPRE8gOiBub3QgY3VycmVudGx5IGF2YWlsYWJsZSBpbiB1eDUwMAorCSAqIGQgPSBkZWJ1Z2ZzX2NyZWF0ZV94MzIoImZsYWdzIiwgU19JUlVHTywgY2xrX2QsICh1MzIgKikmYy0+ZmxhZ3MpOworCSAqIGlmICghZCkKKwkgKglnb3RvIGVycl9vdXQ7CisJICovCisKKwlyZXR1cm4gY2xrX2Q7CisKK2Vycl9vdXQ6CisJZCA9IGNsa19kOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjaGlsZCwgY2hpbGRfdG1wLCAmZC0+ZF9zdWJkaXJzLCBkX3UuZF9jaGlsZCkKKwkJZGVidWdmc19yZW1vdmUoY2hpbGQpOworCWRlYnVnZnNfcmVtb3ZlKGNsa19kKTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgY2xrX2RlYnVnZnNfcmVtb3ZlX2RpcihzdHJ1Y3QgZGVudHJ5ICpjZGVudHJ5KQoreworCXN0cnVjdCBkZW50cnkgKmQsICpjaGlsZCwgKmNoaWxkX3RtcDsKKworCWQgPSBjZGVudHJ5OworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjaGlsZCwgY2hpbGRfdG1wLCAmZC0+ZF9zdWJkaXJzLCBkX3UuZF9jaGlsZCkKKwkJZGVidWdmc19yZW1vdmUoY2hpbGQpOworCWRlYnVnZnNfcmVtb3ZlKGNkZW50cnkpOworCXJldHVybiA7Cit9CisKK3N0YXRpYyBpbnQgY2xrX2RlYnVnZnNfcmVnaXN0ZXJfb25lKHN0cnVjdCBjbGsgKmMpCit7CisJc3RydWN0IGNsayAqcGEgPSBjLT5wYXJlbnRfcGVyaXBoOworCXN0cnVjdCBjbGsgKmJwYSA9IGMtPnBhcmVudF9jbHVzdGVyOworCisJaWYgKCEoYnBhICYmICFwYSkpIHsKKwkJYy0+ZGVudCA9IGNsa19kZWJ1Z2ZzX3JlZ2lzdGVyX2RpcihjLAorCQkJCXBhID8gcGEtPmRlbnQgOiBjbGtfZGVidWdmc19yb290KTsKKwkJaWYgKCFjLT5kZW50KQorCQkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJaWYgKGJwYSkgeworCQljLT5kZW50X2J1cyA9IGNsa19kZWJ1Z2ZzX3JlZ2lzdGVyX2RpcihjLAorCQkJCWJwYS0+ZGVudF9idXMgPyBicGEtPmRlbnRfYnVzIDogYnBhLT5kZW50KTsKKwkJaWYgKCghYy0+ZGVudF9idXMpICYmICAoYy0+ZGVudCkpIHsKKwkJCWNsa19kZWJ1Z2ZzX3JlbW92ZV9kaXIoYy0+ZGVudCk7CisJCQljLT5kZW50ID0gTlVMTDsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNsa19kZWJ1Z2ZzX3JlZ2lzdGVyKHN0cnVjdCBjbGsgKmMpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgY2xrICpwYSA9IGMtPnBhcmVudF9wZXJpcGg7CisJc3RydWN0IGNsayAqYnBhID0gYy0+cGFyZW50X2NsdXN0ZXI7CisKKwlpZiAocGEgJiYgKCFwYS0+ZGVudCAmJiAhcGEtPmRlbnRfYnVzKSkgeworCQllcnIgPSBjbGtfZGVidWdmc19yZWdpc3RlcihwYSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCWlmIChicGEgJiYgKCFicGEtPmRlbnQgJiYgIWJwYS0+ZGVudF9idXMpKSB7CisJCWVyciA9IGNsa19kZWJ1Z2ZzX3JlZ2lzdGVyKGJwYSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCWlmICgoIWMtPmRlbnQpICYmICghYy0+ZGVudF9idXMpKSB7CisJCWVyciA9IGNsa19kZWJ1Z2ZzX3JlZ2lzdGVyX29uZShjKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9faW5pdCBjbGtfZGVidWdmc19pbml0KHZvaWQpCit7CisJc3RydWN0IGNsayAqYzsKKwlzdHJ1Y3QgZGVudHJ5ICpkOworCWludCBlcnI7CisKKwlkID0gZGVidWdmc19jcmVhdGVfZGlyKCJjbG9jayIsIE5VTEwpOworCWlmICghZCkKKwkJcmV0dXJuIC1FTk9NRU07CisJY2xrX2RlYnVnZnNfcm9vdCA9IGQ7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGMsICZjbGtfbGlzdCwgbGlzdCkgeworCQllcnIgPSBjbGtfZGVidWdmc19yZWdpc3RlcihjKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyX291dDsKKwl9CisJcmV0dXJuIDA7CitlcnJfb3V0OgorCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShjbGtfZGVidWdmc19yb290KTsKKwlyZXR1cm4gZXJyOworfQorCitsYXRlX2luaXRjYWxsKGNsa19kZWJ1Z2ZzX2luaXQpOworI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKSAqLworCiBpbnQgX19pbml0IGNsa19pbml0KHZvaWQpCiB7CiAJaWYgKGNwdV9pc191ODUwMGVkKCkpIHsKQEAgLTYwOSw3ICs3NjMsOCBAQAogCQkvKiBDbG9jayB0cmVlIGZvciBVNTUwMCBub3QgaW1wbGVtZW50ZWQgeWV0ICovCiAJCWNsa19wcmNjX29wcy5lbmFibGUgPSBjbGtfcHJjY19vcHMuZGlzYWJsZSA9IE5VTEw7CiAJCWNsa19wcmNtdV9vcHMuZW5hYmxlID0gY2xrX3ByY211X29wcy5kaXNhYmxlID0gTlVMTDsKLQkJY2xrX3BlcjZjbGsucmF0ZSA9IDI2MDAwMDAwOworCQljbGtfdWFydGNsay5yYXRlID0gMzYzNjAwMDA7CisJCWNsa19zZG1tY2Nsay5yYXRlID0gOTk5MDAwMDA7CiAJfQogCiAJY2xrZGV2X2FkZF90YWJsZSh1ODUwMF9jb21tb25fY2xrcywgQVJSQVlfU0laRSh1ODUwMF9jb21tb25fY2xrcykpOwpAQCAtNjE4LDUgKzc3MywxMiBAQAogCWVsc2UKIAkJY2xrZGV2X2FkZF90YWJsZSh1ODUwMF92MV9jbGtzLCBBUlJBWV9TSVpFKHU4NTAwX3YxX2Nsa3MpKTsKIAorI2lmZGVmIENPTkZJR19ERUJVR19GUworCWNsa19kZWJ1Z2ZzX2FkZF90YWJsZSh1ODUwMF9jb21tb25fY2xrcywgQVJSQVlfU0laRSh1ODUwMF9jb21tb25fY2xrcykpOworCWlmIChjcHVfaXNfdTg1MDBlZCgpKQorCQljbGtfZGVidWdmc19hZGRfdGFibGUodTg1MDBfZWRfY2xrcywgQVJSQVlfU0laRSh1ODUwMF9lZF9jbGtzKSk7CisJZWxzZQorCQljbGtfZGVidWdmc19hZGRfdGFibGUodTg1MDBfdjFfY2xrcywgQVJSQVlfU0laRSh1ODUwMF92MV9jbGtzKSk7CisjZW5kaWYKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdXg1MDAvY2xvY2suaCBiL2FyY2gvYXJtL21hY2gtdXg1MDAvY2xvY2suaAppbmRleCBhMDU4MDI1Li4wNzQ0OTA3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXV4NTAwL2Nsb2NrLmgKKysrIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9jbG9jay5oCkBAIC05MCw2ICs5MCwxMCBAQAogCiAJc3RydWN0IGNsawkJKnBhcmVudF9jbHVzdGVyOwogCXN0cnVjdCBjbGsJCSpwYXJlbnRfcGVyaXBoOworI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKQorCXN0cnVjdCBkZW50cnkJCSpkZW50OwkJLyogRm9yIHZpc2libGUgdHJlZSBoaWVyYXJjaHkgKi8KKwlzdHJ1Y3QgZGVudHJ5CQkqZGVudF9idXM7CS8qIEZvciB2aXNpYmxlIHRyZWUgaGllcmFyY2h5ICovCisjZW5kaWYKIH07CiAKICNkZWZpbmUgREVGSU5FX1BSQ01VX0NMSyhfbmFtZSwgX2NnX29mZiwgX2NnX2JpdCwgX3JlZykJCVwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdXg1MDAvY3B1LWRiNTUwMC5jIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9jcHUtZGI1NTAwLmMKaW5kZXggMmY4NzA3NS4uYWNjODQxZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC11eDUwMC9jcHUtZGI1NTAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9jcHUtZGI1NTAwLmMKQEAgLTgsMTQgKzgsMTkgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9hbWJhL2J1cy5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KIAorI2luY2x1ZGUgPHBsYXQvZ3Bpby5oPgorCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvZGV2aWNlcy5oPgogI2luY2x1ZGUgPG1hY2gvc2V0dXAuaD4KICNpbmNsdWRlIDxtYWNoL2lycXMuaD4KIAorI2luY2x1ZGUgImRldmljZXMtZGI1NTAwLmgiCisKIHN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgdTU1MDBfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CiAJX19JT19ERVZfREVTQyhVNTUwMF9HUElPMF9CQVNFLCBTWl80SyksCiAJX19JT19ERVZfREVTQyhVNTUwMF9HUElPMV9CQVNFLCBTWl80SyksCkBAIC0xMTAsMTkgKzExNSwzMiBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnU1NTAwX3BsYXRmb3JtX2RldnNbXSBfX2luaXRkYXRhID0gewotCSZ1NTUwMF9ncGlvX2RldnNbMF0sCi0JJnU1NTAwX2dwaW9fZGV2c1sxXSwKLQkmdTU1MDBfZ3Bpb19kZXZzWzJdLAotCSZ1NTUwMF9ncGlvX2RldnNbM10sCi0JJnU1NTAwX2dwaW9fZGV2c1s0XSwKLQkmdTU1MDBfZ3Bpb19kZXZzWzVdLAotCSZ1NTUwMF9ncGlvX2RldnNbNl0sCi0JJnU1NTAwX2dwaW9fZGV2c1s3XSwKIAkmbWJveDBfZGV2aWNlLAogCSZtYm94MV9kZXZpY2UsCiAJJm1ib3gyX2RldmljZSwKIH07CiAKK3N0YXRpYyByZXNvdXJjZV9zaXplX3QgX19pbml0ZGF0YSBkYjU1MDBfZ3Bpb19iYXNlW10gPSB7CisJVTU1MDBfR1BJT0JBTkswX0JBU0UsCisJVTU1MDBfR1BJT0JBTksxX0JBU0UsCisJVTU1MDBfR1BJT0JBTksyX0JBU0UsCisJVTU1MDBfR1BJT0JBTkszX0JBU0UsCisJVTU1MDBfR1BJT0JBTks0X0JBU0UsCisJVTU1MDBfR1BJT0JBTks1X0JBU0UsCisJVTU1MDBfR1BJT0JBTks2X0JBU0UsCisJVTU1MDBfR1BJT0JBTks3X0JBU0UsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgZGI1NTAwX2FkZF9ncGlvcyh2b2lkKQoreworCXN0cnVjdCBubWtfZ3Bpb19wbGF0Zm9ybV9kYXRhIHBkYXRhID0geworCQkvKiBObyBjdXN0b20gZGF0YSB5ZXQgKi8KKwl9OworCisJZGJ4NTAwX2FkZF9ncGlvcyhBUlJBWV9BTkRfU0laRShkYjU1MDBfZ3Bpb19iYXNlKSwKKwkJCSBJUlFfREI1NTAwX0dQSU8wLCAmcGRhdGEpOworfQorCiB2b2lkIF9faW5pdCB1NTUwMF9tYXBfaW8odm9pZCkKIHsKIAl1eDUwMF9tYXBfaW8oKTsKQEAgLTEzMiw3ICsxNTAsOSBAQAogCiB2b2lkIF9faW5pdCB1NTUwMF9pbml0X2RldmljZXModm9pZCkKIHsKLQl1eDUwMF9pbml0X2RldmljZXMoKTsKKwlkYjU1MDBfYWRkX2dwaW9zKCk7CisJZGI1NTAwX2RtYV9pbml0KCk7CisJZGI1NTAwX2FkZF9ydGMoKTsKIAogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHU1NTAwX3BsYXRmb3JtX2RldnMsCiAJCQkgICAgIEFSUkFZX1NJWkUodTU1MDBfcGxhdGZvcm1fZGV2cykpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11eDUwMC9jcHUtZGI4NTAwLmMgYi9hcmNoL2FybS9tYWNoLXV4NTAwL2NwdS1kYjg1MDAuYwppbmRleCA0YWNhYjc1Li5jMGYzNGE0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXV4NTAwL2NwdS1kYjg1MDAuYworKysgYi9hcmNoL2FybS9tYWNoLXV4NTAwL2NwdS1kYjg1MDAuYwpAQCAtMjIsMjMgKzIyLDE1IEBACiAjaW5jbHVkZSA8bWFjaC9zZXR1cC5oPgogI2luY2x1ZGUgPG1hY2gvZGV2aWNlcy5oPgogCisjaW5jbHVkZSAiZGV2aWNlcy1kYjg1MDAuaCIKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRmb3JtX2RldnNbXSBfX2luaXRkYXRhID0gewotCSZ1ODUwMF9ncGlvX2RldnNbMF0sCi0JJnU4NTAwX2dwaW9fZGV2c1sxXSwKLQkmdTg1MDBfZ3Bpb19kZXZzWzJdLAotCSZ1ODUwMF9ncGlvX2RldnNbM10sCi0JJnU4NTAwX2dwaW9fZGV2c1s0XSwKLQkmdTg1MDBfZ3Bpb19kZXZzWzVdLAotCSZ1ODUwMF9ncGlvX2RldnNbNl0sCi0JJnU4NTAwX2dwaW9fZGV2c1s3XSwKLQkmdTg1MDBfZ3Bpb19kZXZzWzhdLAogCSZ1ODUwMF9kbWE0MF9kZXZpY2UsCiB9OwogCiAvKiBtaW5pbXVtIHN0YXRpYyBpL28gbWFwcGluZyByZXF1aXJlZCB0byBib290IFU4NTAwIHBsYXRmb3JtcyAqLwogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyB1ODUwMF9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKIAlfX0lPX0RFVl9ERVNDKFU4NTAwX1BSQ01VX0JBU0UsIFNaXzRLKSwKLQlfX0lPX0RFVl9ERVNDKFU4NTAwX1BSQ01VX1RDRE1fQkFTRSwgU1pfNEspLAogCV9fSU9fREVWX0RFU0MoVTg1MDBfR1BJTzBfQkFTRSwgU1pfNEspLAogCV9fSU9fREVWX0RFU0MoVTg1MDBfR1BJTzFfQkFTRSwgU1pfNEspLAogCV9fSU9fREVWX0RFU0MoVTg1MDBfR1BJTzJfQkFTRSwgU1pfNEspLApAQCAtNDYsMTMgKzM4LDE4IEBACiAJX19NRU1fREVWX0RFU0MoVTg1MDBfQk9PVF9ST01fQkFTRSwgU1pfMU0pLAogfTsKIAotc3RhdGljIHN0cnVjdCBtYXBfZGVzYyB1ODUwMGVkX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0geworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyB1ODUwMF9lZF9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKIAlfX0lPX0RFVl9ERVNDKFU4NTAwX01UVTBfQkFTRV9FRCwgU1pfNEspLAogCV9fSU9fREVWX0RFU0MoVTg1MDBfQ0xLUlNUN19CQVNFX0VELCBTWl84SyksCiB9OwogCi1zdGF0aWMgc3RydWN0IG1hcF9kZXNjIHU4NTAwdjFfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIHU4NTAwX3YxX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0gewogCV9fSU9fREVWX0RFU0MoVTg1MDBfTVRVMF9CQVNFLCBTWl80SyksCisJX19JT19ERVZfREVTQyhVODUwMF9QUkNNVV9UQ0RNX0JBU0VfVjEsIFNaXzRLKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgdTg1MDBfdjJfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJX19JT19ERVZfREVTQyhVODUwMF9QUkNNVV9UQ0RNX0JBU0UsIFNaXzRLKSwKIH07CiAKIC8qCkBAIC0xMjUsMTQgKzEyMiwzOCBAQAogCWlvdGFibGVfaW5pdCh1ODUwMF9pb19kZXNjLCBBUlJBWV9TSVpFKHU4NTAwX2lvX2Rlc2MpKTsKIAogCWlmIChjcHVfaXNfdTg1MDBlZCgpKQotCQlpb3RhYmxlX2luaXQodTg1MDBlZF9pb19kZXNjLCBBUlJBWV9TSVpFKHU4NTAwZWRfaW9fZGVzYykpOwotCWVsc2UKLQkJaW90YWJsZV9pbml0KHU4NTAwdjFfaW9fZGVzYywgQVJSQVlfU0laRSh1ODUwMHYxX2lvX2Rlc2MpKTsKKwkJaW90YWJsZV9pbml0KHU4NTAwX2VkX2lvX2Rlc2MsIEFSUkFZX1NJWkUodTg1MDBfZWRfaW9fZGVzYykpOworCWVsc2UgaWYgKGNwdV9pc191ODUwMHYxKCkpCisJCWlvdGFibGVfaW5pdCh1ODUwMF92MV9pb19kZXNjLCBBUlJBWV9TSVpFKHU4NTAwX3YxX2lvX2Rlc2MpKTsKKwllbHNlIGlmIChjcHVfaXNfdTg1MDB2MigpKQorCQlpb3RhYmxlX2luaXQodTg1MDBfdjJfaW9fZGVzYywgQVJSQVlfU0laRSh1ODUwMF92Ml9pb19kZXNjKSk7CiAKIAkvKiBSZWFkIG91dCB0aGUgQVNJQyBJRCBhcyBlYXJseSBhcyB3ZSBjYW4gKi8KIAlnZXRfZGI4NTAwX2FzaWNfaWQoKTsKIH0KIAorc3RhdGljIHJlc291cmNlX3NpemVfdCBfX2luaXRkYXRhIGRiODUwMF9ncGlvX2Jhc2VbXSA9IHsKKwlVODUwMF9HUElPQkFOSzBfQkFTRSwKKwlVODUwMF9HUElPQkFOSzFfQkFTRSwKKwlVODUwMF9HUElPQkFOSzJfQkFTRSwKKwlVODUwMF9HUElPQkFOSzNfQkFTRSwKKwlVODUwMF9HUElPQkFOSzRfQkFTRSwKKwlVODUwMF9HUElPQkFOSzVfQkFTRSwKKwlVODUwMF9HUElPQkFOSzZfQkFTRSwKKwlVODUwMF9HUElPQkFOSzdfQkFTRSwKKwlVODUwMF9HUElPQkFOSzhfQkFTRSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBkYjg1MDBfYWRkX2dwaW9zKHZvaWQpCit7CisJc3RydWN0IG5ta19ncGlvX3BsYXRmb3JtX2RhdGEgcGRhdGEgPSB7CisJCS8qIE5vIGN1c3RvbSBkYXRhIHlldCAqLworCX07CisKKwlkYng1MDBfYWRkX2dwaW9zKEFSUkFZX0FORF9TSVpFKGRiODUwMF9ncGlvX2Jhc2UpLAorCQkJIElSUV9EQjg1MDBfR1BJTzAsICZwZGF0YSk7Cit9CisKIC8qCiAgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHRoZSBib2FyZCBpbml0CiAgKi8KQEAgLTE1MiwxMiArMTczLDEzIEBACiAJZWxzZQogCQlwcl93YXJuaW5nKCJBU0lDOiBVTktOT1dOIFNJTElDT04gVkVSU0lPTiFcbiIpOwogCi0JdXg1MDBfaW5pdF9kZXZpY2VzKCk7Ci0KIAlpZiAoY3B1X2lzX3U4NTAwZWQoKSkKIAkJZG1hNDBfdTg1MDBlZF9maXh1cCgpOwogCi0JLyogUmVnaXN0ZXIgdGhlIHBsYXRmb3JtIGRldmljZXMgKi8KKwlkYjg1MDBfYWRkX3J0YygpOworCWRiODUwMF9hZGRfZ3Bpb3MoKTsKKworCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoImNwdWZyZXEtdTg1MDAiLCAtMSwgTlVMTCwgMCk7CiAJcGxhdGZvcm1fYWRkX2RldmljZXMocGxhdGZvcm1fZGV2cywgQVJSQVlfU0laRShwbGF0Zm9ybV9kZXZzKSk7CiAKIAlyZXR1cm4gOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11eDUwMC9jcHUuYyBiL2FyY2gvYXJtL21hY2gtdXg1MDAvY3B1LmMKaW5kZXggNjA4YTEzNy4uNTczMDQwOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC11eDUwMC9jcHUuYworKysgYi9hcmNoL2FybS9tYWNoLXV4NTAwL2NwdS5jCkBAIC02LDcgKzYsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9hbWJhL2J1cy5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAKQEAgLTIwLDYgKzE5LDcgQEAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9zZXR1cC5oPgogI2luY2x1ZGUgPG1hY2gvZGV2aWNlcy5oPgorI2luY2x1ZGUgPG1hY2gvcHJjbXUuaD4KIAogI2luY2x1ZGUgImNsb2NrLmgiCiAKQEAgLTQ1LDI5ICs0NSwyMiBAQAogCV9fSU9fREVWX0RFU0MoVVg1MDBfQkFDS1VQUkFNMF9CQVNFLCBTWl84SyksCiB9OwogCi1zdGF0aWMgc3RydWN0IGFtYmFfZGV2aWNlICp1eDUwMF9hbWJhX2RldnNbXSBfX2luaXRkYXRhID0gewotCSZ1eDUwMF9wbDAzMV9kZXZpY2UsCi19OwotCiB2b2lkIF9faW5pdCB1eDUwMF9tYXBfaW8odm9pZCkKIHsKIAlpb3RhYmxlX2luaXQodXg1MDBfaW9fZGVzYywgQVJSQVlfU0laRSh1eDUwMF9pb19kZXNjKSk7CiB9CiAKLXZvaWQgX19pbml0IHV4NTAwX2luaXRfZGV2aWNlcyh2b2lkKQotewotCWFtYmFfYWRkX2RldmljZXModXg1MDBfYW1iYV9kZXZzLCBBUlJBWV9TSVpFKHV4NTAwX2FtYmFfZGV2cykpOwotfQotCiB2b2lkIF9faW5pdCB1eDUwMF9pbml0X2lycSh2b2lkKQogewotCWdpY19kaXN0X2luaXQoMCwgX19pb19hZGRyZXNzKFVYNTAwX0dJQ19ESVNUX0JBU0UpLCAyOSk7Ci0JZ2ljX2NwdV9pbml0KDAsIF9faW9fYWRkcmVzcyhVWDUwMF9HSUNfQ1BVX0JBU0UpKTsKKwlnaWNfaW5pdCgwLCAyOSwgX19pb19hZGRyZXNzKFVYNTAwX0dJQ19ESVNUX0JBU0UpLAorCQkgX19pb19hZGRyZXNzKFVYNTAwX0dJQ19DUFVfQkFTRSkpOwogCiAJLyoKIAkgKiBJbml0IGNsb2NrcyBoZXJlIHNvIHRoYXQgdGhleSBhcmUgYXZhaWxhYmxlIGZvciBzeXN0ZW0gdGltZXIKIAkgKiBpbml0aWFsaXphdGlvbi4KIAkgKi8KKwlpZiAoY3B1X2lzX3U4NTAwKCkpCisJCXByY211X2Vhcmx5X2luaXQoKTsKIAljbGtfaW5pdCgpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXV4NTAwL2NwdWZyZXEuYyBiL2FyY2gvYXJtL21hY2gtdXg1MDAvY3B1ZnJlcS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjNWI3NDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXV4NTAwL2NwdWZyZXEuYwpAQCAtMCwwICsxLDIxMSBAQAorLyoKKyAqIENQVSBmcmVxdWVuY3kgc2NhbGluZyBmb3IgdTg1MDAKKyAqIEluc3BpcmVkIGJ5IGxpbnV4L2FyY2gvYXJtL21hY2gtZGF2aW5jaS9jcHVmcmVxLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIFNUTWljcm9lbGVjdHJvbmljcyAyMDA5CisgKiBDb3B5cmlnaHQgKEMpIFNULUVyaWNzc29uIFNBIDIwMTAKKyAqCisgKiBMaWNlbnNlIFRlcm1zOiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2MgorICoKKyAqIEF1dGhvcjogU3VuZGFyIEl5ZXIgPHN1bmRhci5peWVyQHN0ZXJpY3Nzb24uY29tPgorICogQXV0aG9yOiBNYXJ0aW4gUGVyc3NvbiA8bWFydGluLnBlcnNzb25Ac3Rlcmljc3Nvbi5jb20+CisgKiBBdXRob3I6IEpvbmFzIEFhYmVyZyA8am9uYXMuYWJlcmdAc3Rlcmljc3Nvbi5jb20+CisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVmcmVxLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL3ByY211Lmg+CisjaW5jbHVkZSA8bWFjaC9wcmNtdS1kZWZzLmg+CisKKyNkZWZpbmUgRFJJVkVSX05BTUUgImNwdWZyZXEtdTg1MDAiCisjZGVmaW5lIENQVUZSRVFfTkFNRSAidTg1MDAiCisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlICpkZXY7CisKK3N0YXRpYyBzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgZnJlcV90YWJsZVtdID0geworCVswXSA9IHsKKwkJLmluZGV4ID0gMCwKKwkJLmZyZXF1ZW5jeSA9IDIwMDAwMCwKKwl9LAorCVsxXSA9IHsKKwkJLmluZGV4ID0gMSwKKwkJLmZyZXF1ZW5jeSA9IDMwMDAwMCwKKwl9LAorCVsyXSA9IHsKKwkJLmluZGV4ID0gMiwKKwkJLmZyZXF1ZW5jeSA9IDYwMDAwMCwKKwl9LAorCVszXSA9IHsKKwkJLyogVXNlZCBmb3IgQ1BVX09QUF9NQVgsIGlmIGF2YWlsYWJsZSAqLworCQkuaW5kZXggPSAzLAorCQkuZnJlcXVlbmN5ID0gQ1BVRlJFUV9UQUJMRV9FTkQsCisJfSwKKwlbNF0gPSB7CisJCS5pbmRleCA9IDQsCisJCS5mcmVxdWVuY3kgPSBDUFVGUkVRX1RBQkxFX0VORCwKKwl9LAorfTsKKworc3RhdGljIGVudW0gcHJjbXVfY3B1X29wcCBpbmRleDJvcHBbXSA9IHsKKwlDUFVfT1BQX0VYVF9DTEssCisJQ1BVX09QUF81MCwKKwlDUFVfT1BQXzEwMCwKKwlDUFVfT1BQX01BWAorfTsKKworc3RhdGljIGludCB1ODUwMF9jcHVmcmVxX3ZlcmlmeV9zcGVlZChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKK3sKKwlyZXR1cm4gY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfdmVyaWZ5KHBvbGljeSwgZnJlcV90YWJsZSk7Cit9CisKK3N0YXRpYyBpbnQgdTg1MDBfY3B1ZnJlcV90YXJnZXQoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksCisJCQkJdW5zaWduZWQgaW50IHRhcmdldF9mcmVxLAorCQkJCXVuc2lnbmVkIGludCByZWxhdGlvbikKK3sKKwlzdHJ1Y3QgY3B1ZnJlcV9mcmVxcyBmcmVxczsKKwl1bnNpZ25lZCBpbnQgaW5kZXg7CisJaW50IHJldCA9IDA7CisKKwkvKgorCSAqIEVuc3VyZSBkZXNpcmVkIHJhdGUgaXMgd2l0aGluIGFsbG93ZWQgcmFuZ2UuICBTb21lIGdvdmVub3JzCisJICogKG9uZGVtYW5kKSB3aWxsIGp1c3QgcGFzcyB0YXJnZXRfZnJlcT0wIHRvIGdldCB0aGUgbWluaW11bS4KKwkgKi8KKwlpZiAodGFyZ2V0X2ZyZXEgPCBwb2xpY3ktPmNwdWluZm8ubWluX2ZyZXEpCisJCXRhcmdldF9mcmVxID0gcG9saWN5LT5jcHVpbmZvLm1pbl9mcmVxOworCWlmICh0YXJnZXRfZnJlcSA+IHBvbGljeS0+Y3B1aW5mby5tYXhfZnJlcSkKKwkJdGFyZ2V0X2ZyZXEgPSBwb2xpY3ktPmNwdWluZm8ubWF4X2ZyZXE7CisKKwlyZXQgPSBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV90YXJnZXQocG9saWN5LCBmcmVxX3RhYmxlLAorCQkJCQkgICAgIHRhcmdldF9mcmVxLCByZWxhdGlvbiwgJmluZGV4KTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIkNvdWxkIG5vdCBsb29rIHVwIG5leHQgZnJlcXVlbmN5XG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlmcmVxcy5vbGQgPSBwb2xpY3ktPmN1cjsKKwlmcmVxcy5uZXcgPSBmcmVxX3RhYmxlW2luZGV4XS5mcmVxdWVuY3k7CisJZnJlcXMuY3B1ID0gcG9saWN5LT5jcHU7CisKKwlpZiAoZnJlcXMub2xkID09IGZyZXFzLm5ldykgeworCQlkZXZfZGJnKGRldiwgIkN1cnJlbnQgYW5kIHRhcmdldCBmcmVxdWVuY2llcyBhcmUgZXF1YWxcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlkZXZfZGJnKGRldiwgInRyYW5zaXRpb246ICV1IC0tPiAldVxuIiwgZnJlcXMub2xkLCBmcmVxcy5uZXcpOworCWNwdWZyZXFfbm90aWZ5X3RyYW5zaXRpb24oJmZyZXFzLCBDUFVGUkVRX1BSRUNIQU5HRSk7CisKKwlyZXQgPSBwcmNtdV9zZXRfY3B1X29wcChpbmRleDJvcHBbaW5kZXhdKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBzZXQgT1BQIGxldmVsXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwljcHVmcmVxX25vdGlmeV90cmFuc2l0aW9uKCZmcmVxcywgQ1BVRlJFUV9QT1NUQ0hBTkdFKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdTg1MDBfY3B1ZnJlcV9nZXRzcGVlZCh1bnNpZ25lZCBpbnQgY3B1KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgcHJjbXVfZ2V0X2NwdV9vcHAoKSAhPSBpbmRleDJvcHBbaV07IGkrKykKKwkJOworCXJldHVybiBmcmVxX3RhYmxlW2ldLmZyZXF1ZW5jeTsKK30KKworc3RhdGljIGludCBfX2NwdWluaXQgdTg1MDBfY3B1X2luaXQoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpCit7CisJaW50IHJlczsKKworCUJVSUxEX0JVR19PTihBUlJBWV9TSVpFKGluZGV4Mm9wcCkgKyAxICE9IEFSUkFZX1NJWkUoZnJlcV90YWJsZSkpOworCisJaWYgKGNwdV9pc191ODUwMHYyKCkpIHsKKwkJZnJlcV90YWJsZVsxXS5mcmVxdWVuY3kgPSA0MDAwMDA7CisJCWZyZXFfdGFibGVbMl0uZnJlcXVlbmN5ID0gODAwMDAwOworCQlpZiAocHJjbXVfaGFzX2FybV9tYXhvcHAoKSkKKwkJCWZyZXFfdGFibGVbM10uZnJlcXVlbmN5ID0gMTAwMDAwMDsKKwl9CisKKwkvKiBnZXQgcG9saWN5IGZpZWxkcyBiYXNlZCBvbiB0aGUgdGFibGUgKi8KKwlyZXMgPSBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV9jcHVpbmZvKHBvbGljeSwgZnJlcV90YWJsZSk7CisJaWYgKCFyZXMpCisJCWNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX2dldF9hdHRyKGZyZXFfdGFibGUsIHBvbGljeS0+Y3B1KTsKKwllbHNlIHsKKwkJZGV2X2VycihkZXYsICJ1ODUwMC1jcHVmcmVxIDogRmFpbGVkIHRvIHJlYWQgcG9saWN5IHRhYmxlXG4iKTsKKwkJcmV0dXJuIHJlczsKKwl9CisKKwlwb2xpY3ktPm1pbiA9IHBvbGljeS0+Y3B1aW5mby5taW5fZnJlcTsKKwlwb2xpY3ktPm1heCA9IHBvbGljeS0+Y3B1aW5mby5tYXhfZnJlcTsKKwlwb2xpY3ktPmN1ciA9IHU4NTAwX2NwdWZyZXFfZ2V0c3BlZWQocG9saWN5LT5jcHUpOworCXBvbGljeS0+Z292ZXJub3IgPSBDUFVGUkVRX0RFRkFVTFRfR09WRVJOT1I7CisKKwkvKgorCSAqIEZJWE1FIDogTmVlZCB0byB0YWtlIHRpbWUgbWVhc3VyZW1lbnQgYWNyb3NzIHRoZSB0YXJnZXQoKQorCSAqCSAgIGZ1bmN0aW9uIHdpdGggbm8vc29tZS9hbGwgZHJpdmVycyBpbiB0aGUgbm90aWZpY2F0aW9uCisJICoJICAgbGlzdC4KKwkgKi8KKwlwb2xpY3ktPmNwdWluZm8udHJhbnNpdGlvbl9sYXRlbmN5ID0gMjAwICogMTAwMDsgLyogaW4gbnMgKi8KKworCS8qIHBvbGljeSBzaGFyaW5nIGJldHdlZW4gZHVhbCBDUFVzICovCisJY3B1bWFza19jb3B5KHBvbGljeS0+Y3B1cywgJmNwdV9wcmVzZW50X21hcCk7CisKKwlwb2xpY3ktPnNoYXJlZF90eXBlID0gQ1BVRlJFUV9TSEFSRURfVFlQRV9BTEw7CisKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgc3RydWN0IGZyZXFfYXR0ciAqdTg1MDBfY3B1ZnJlcV9hdHRyW10gPSB7CisJJmNwdWZyZXFfZnJlcV9hdHRyX3NjYWxpbmdfYXZhaWxhYmxlX2ZyZXFzLAorCU5VTEwsCit9Oworc3RhdGljIGludCB1ODUwMF9jcHVfZXhpdChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKK3sKKwljcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV9wdXRfYXR0cihwb2xpY3ktPmNwdSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY3B1ZnJlcV9kcml2ZXIgdTg1MDBfZHJpdmVyID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5mbGFncyA9IENQVUZSRVFfU1RJQ0tZLAorCS52ZXJpZnkgPSB1ODUwMF9jcHVmcmVxX3ZlcmlmeV9zcGVlZCwKKwkudGFyZ2V0ID0gdTg1MDBfY3B1ZnJlcV90YXJnZXQsCisJLmdldCA9IHU4NTAwX2NwdWZyZXFfZ2V0c3BlZWQsCisJLmluaXQgPSB1ODUwMF9jcHVfaW5pdCwKKwkuZXhpdCA9IHU4NTAwX2NwdV9leGl0LAorCS5uYW1lID0gQ1BVRlJFUV9OQU1FLAorCS5hdHRyID0gdTg1MDBfY3B1ZnJlcV9hdHRyLAorfTsKKworc3RhdGljIGludCBfX2luaXQgdTg1MDBfY3B1ZnJlcV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWRldiA9ICZwZGV2LT5kZXY7CisJcmV0dXJuIGNwdWZyZXFfcmVnaXN0ZXJfZHJpdmVyKCZ1ODUwMF9kcml2ZXIpOworfQorCitzdGF0aWMgaW50IF9fZXhpdCB1ODUwMF9jcHVmcmVxX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJldHVybiBjcHVmcmVxX3VucmVnaXN0ZXJfZHJpdmVyKCZ1ODUwMF9kcml2ZXIpOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB1ODUwMF9jcHVmcmVxX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQkgPSBEUklWRVJfTkFNRSwKKwkJLm93bmVyCSA9IFRISVNfTU9EVUxFLAorCX0sCisJLnJlbW92ZSA9IF9fZXhpdF9wKHU4NTAwX2NwdWZyZXFfcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHU4NTAwX2NwdWZyZXFfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJnU4NTAwX2NwdWZyZXFfZHJpdmVyLAorCQkJCSAgICAgJnU4NTAwX2NwdWZyZXFfcHJvYmUpOworfQorCitkZXZpY2VfaW5pdGNhbGwodTg1MDBfY3B1ZnJlcV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdXg1MDAvZGV2aWNlcy1jb21tb24uYyBiL2FyY2gvYXJtL21hY2gtdXg1MDAvZGV2aWNlcy1jb21tb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTY5ZjVmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9kZXZpY2VzLWNvbW1vbi5jCkBAIC0wLDAgKzEsMTQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSBTVC1Fcmljc3NvbiBTQSAyMDEwCisgKgorICogQXV0aG9yOiBSYWJpbiBWaW5jZW50IDxyYWJpbi52aW5jZW50QHN0ZXJpY3Nzb24uY29tPiBmb3IgU1QtRXJpY3Nzb24KKyAqIExpY2Vuc2UgdGVybXM6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpLCB2ZXJzaW9uIDIuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2FtYmEvYnVzLmg+CisKKyNpbmNsdWRlIDxwbGF0L2dwaW8uaD4KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKworI2luY2x1ZGUgImRldmljZXMtY29tbW9uLmgiCisKK3N0cnVjdCBhbWJhX2RldmljZSAqCitkYng1MDBfYWRkX2FtYmFfZGV2aWNlKGNvbnN0IGNoYXIgKm5hbWUsIHJlc291cmNlX3NpemVfdCBiYXNlLAorCQkgICAgICAgaW50IGlycSwgdm9pZCAqcGRhdGEsIHVuc2lnbmVkIGludCBwZXJpcGhpZCkKK3sKKwlzdHJ1Y3QgYW1iYV9kZXZpY2UgKmRldjsKKwlpbnQgcmV0OworCisJZGV2ID0ga3phbGxvYyhzaXplb2YgKmRldiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXYpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJZGV2LT5kZXYuaW5pdF9uYW1lID0gbmFtZTsKKworCWRldi0+cmVzLnN0YXJ0ID0gYmFzZTsKKwlkZXYtPnJlcy5lbmQgPSBiYXNlICsgU1pfNEsgLSAxOworCWRldi0+cmVzLmZsYWdzID0gSU9SRVNPVVJDRV9NRU07CisKKwlkZXYtPmRtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKKwlkZXYtPmRldi5jb2hlcmVudF9kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMik7CisKKwlkZXYtPmlycVswXSA9IGlycTsKKwlkZXYtPmlycVsxXSA9IE5PX0lSUTsKKworCWRldi0+cGVyaXBoaWQgPSBwZXJpcGhpZDsKKworCWRldi0+ZGV2LnBsYXRmb3JtX2RhdGEgPSBwZGF0YTsKKworCXJldCA9IGFtYmFfZGV2aWNlX3JlZ2lzdGVyKGRldiwgJmlvbWVtX3Jlc291cmNlKTsKKwlpZiAocmV0KSB7CisJCWtmcmVlKGRldik7CisJCXJldHVybiBFUlJfUFRSKHJldCk7CisJfQorCisJcmV0dXJuIGRldjsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKgorZGJ4NTAwX2FkZF9wbGF0Zm9ybV9kZXZpY2UoY29uc3QgY2hhciAqbmFtZSwgaW50IGlkLCB2b2lkICpwZGF0YSwKKwkJCSAgIHN0cnVjdCByZXNvdXJjZSAqcmVzLCBpbnQgcmVzbnVtKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldjsKKwlpbnQgcmV0OworCisJZGV2ID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKG5hbWUsIGlkKTsKKwlpZiAoIWRldikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlkZXYtPmRldi5jb2hlcmVudF9kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMik7CisJZGV2LT5kZXYuZG1hX21hc2sgPSAmZGV2LT5kZXYuY29oZXJlbnRfZG1hX21hc2s7CisKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX3Jlc291cmNlcyhkZXYsIHJlcywgcmVzbnVtKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9mcmVlOworCisJZGV2LT5kZXYucGxhdGZvcm1fZGF0YSA9IHBkYXRhOworCisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChkZXYpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2ZyZWU7CisKKwlyZXR1cm4gZGV2OworCitvdXRfZnJlZToKKwlwbGF0Zm9ybV9kZXZpY2VfcHV0KGRldik7CisJcmV0dXJuIEVSUl9QVFIocmV0KTsKK30KKworc3RydWN0IHBsYXRmb3JtX2RldmljZSAqCitkYng1MDBfYWRkX3BsYXRmb3JtX2RldmljZV80azFpcnEoY29uc3QgY2hhciAqbmFtZSwgaW50IGlkLAorCQkJCSAgcmVzb3VyY2Vfc2l6ZV90IGJhc2UsCisJCQkJICBpbnQgaXJxLCB2b2lkICpwZGF0YSkKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgcmVzb3VyY2VzW10gPSB7CisJCVswXSA9IHsKKwkJCS5zdGFydAk9IGJhc2UsCisJCQkuZW5kCT0gYmFzZSArIFNaXzRLIC0gMSwKKwkJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCQl9LAorCQlbMV0gPSB7CisJCQkuc3RhcnQJPSBpcnEsCisJCQkuZW5kCT0gaXJxLAorCQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJCX0KKwl9OworCisJcmV0dXJuIGRieDUwMF9hZGRfcGxhdGZvcm1fZGV2aWNlKG5hbWUsIGlkLCBwZGF0YSwgcmVzb3VyY2VzLAorCQkJCQkgIEFSUkFZX1NJWkUocmVzb3VyY2VzKSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICoKK2RieDUwMF9hZGRfZ3BpbyhpbnQgaWQsIHJlc291cmNlX3NpemVfdCBhZGRyLCBpbnQgaXJxLAorCQlzdHJ1Y3Qgbm1rX2dwaW9fcGxhdGZvcm1fZGF0YSAqcGRhdGEpCit7CisJc3RydWN0IHJlc291cmNlIHJlc291cmNlc1tdID0geworCQl7CisJCQkuc3RhcnQJPSBhZGRyLAorCQkJLmVuZAk9IGFkZHIgKyAxMjcsCisJCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwkJfSwKKwkJeworCQkJLnN0YXJ0CT0gaXJxLAorCQkJLmVuZAk9IGlycSwKKwkJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCQl9CisJfTsKKworCXJldHVybiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfcmVzbmRhdGEoTlVMTCwgImdwaW8iLCBpZCwKKwkJCQlyZXNvdXJjZXMsIEFSUkFZX1NJWkUocmVzb3VyY2VzKSwKKwkJCQlwZGF0YSwgc2l6ZW9mKCpwZGF0YSkpOworfQorCit2b2lkIGRieDUwMF9hZGRfZ3Bpb3MocmVzb3VyY2Vfc2l6ZV90ICpiYXNlLCBpbnQgbnVtLCBpbnQgaXJxLAorCQkgICAgICBzdHJ1Y3Qgbm1rX2dwaW9fcGxhdGZvcm1fZGF0YSAqcGRhdGEpCit7CisJaW50IGZpcnN0ID0gMDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKywgZmlyc3QgKz0gMzIsIGlycSsrKSB7CisJCXBkYXRhLT5maXJzdF9ncGlvID0gZmlyc3Q7CisJCXBkYXRhLT5maXJzdF9pcnEgPSBOT01BRElLX0dQSU9fVE9fSVJRKGZpcnN0KTsKKworCQlkYng1MDBfYWRkX2dwaW8oaSwgYmFzZVtpXSwgaXJxLCBwZGF0YSk7CisJfQorfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11eDUwMC9kZXZpY2VzLWNvbW1vbi5oIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9kZXZpY2VzLWNvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiYWRjMTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXV4NTAwL2RldmljZXMtY29tbW9uLmgKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgU1QtRXJpY3Nzb24gU0EgMjAxMAorICoKKyAqIEF1dGhvcjogUmFiaW4gVmluY2VudCA8cmFiaW4udmluY2VudEBzdGVyaWNzc29uLmNvbT4gZm9yIFNULUVyaWNzc29uCisgKiBMaWNlbnNlIHRlcm1zOiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSwgdmVyc2lvbiAyLgorICovCisKKyNpZm5kZWYgX19ERVZJQ0VTX0NPTU1PTl9ICisjZGVmaW5lIF9fREVWSUNFU19DT01NT05fSAorCitleHRlcm4gc3RydWN0IGFtYmFfZGV2aWNlICoKK2RieDUwMF9hZGRfYW1iYV9kZXZpY2UoY29uc3QgY2hhciAqbmFtZSwgcmVzb3VyY2Vfc2l6ZV90IGJhc2UsCisJCSAgICAgICBpbnQgaXJxLCB2b2lkICpwZGF0YSwgdW5zaWduZWQgaW50IHBlcmlwaGlkKTsKKworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKgorZGJ4NTAwX2FkZF9wbGF0Zm9ybV9kZXZpY2VfNGsxaXJxKGNvbnN0IGNoYXIgKm5hbWUsIGludCBpZCwKKwkJCQkgIHJlc291cmNlX3NpemVfdCBiYXNlLAorCQkJCSAgaW50IGlycSwgdm9pZCAqcGRhdGEpOworCitzdHJ1Y3Qgc3BpX21hc3Rlcl9jbnRscjsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgYW1iYV9kZXZpY2UgKgorZGJ4NTAwX2FkZF9tc3Bfc3BpKGNvbnN0IGNoYXIgKm5hbWUsIHJlc291cmNlX3NpemVfdCBiYXNlLCBpbnQgaXJxLAorCQkgICBzdHJ1Y3Qgc3BpX21hc3Rlcl9jbnRsciAqcGRhdGEpCit7CisJcmV0dXJuIGRieDUwMF9hZGRfYW1iYV9kZXZpY2UobmFtZSwgYmFzZSwgaXJxLCBwZGF0YSwgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGFtYmFfZGV2aWNlICoKK2RieDUwMF9hZGRfc3BpKGNvbnN0IGNoYXIgKm5hbWUsIHJlc291cmNlX3NpemVfdCBiYXNlLCBpbnQgaXJxLAorCQkJCSAgIHN0cnVjdCBzcGlfbWFzdGVyX2NudGxyICpwZGF0YSkKK3sKKwlyZXR1cm4gZGJ4NTAwX2FkZF9hbWJhX2RldmljZShuYW1lLCBiYXNlLCBpcnEsIHBkYXRhLCAwKTsKK30KKworc3RydWN0IG1tY2lfcGxhdGZvcm1fZGF0YTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgYW1iYV9kZXZpY2UgKgorZGJ4NTAwX2FkZF9zZGkoY29uc3QgY2hhciAqbmFtZSwgcmVzb3VyY2Vfc2l6ZV90IGJhc2UsIGludCBpcnEsCisJICAgICAgIHN0cnVjdCBtbWNpX3BsYXRmb3JtX2RhdGEgKnBkYXRhKQoreworCXJldHVybiBkYng1MDBfYWRkX2FtYmFfZGV2aWNlKG5hbWUsIGJhc2UsIGlycSwgcGRhdGEsIDApOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBhbWJhX2RldmljZSAqCitkYng1MDBfYWRkX3VhcnQoY29uc3QgY2hhciAqbmFtZSwgcmVzb3VyY2Vfc2l6ZV90IGJhc2UsIGludCBpcnEpCit7CisJcmV0dXJuIGRieDUwMF9hZGRfYW1iYV9kZXZpY2UobmFtZSwgYmFzZSwgaXJxLCBOVUxMLCAwKTsKK30KKworc3RydWN0IG5ta19pMmNfY29udHJvbGxlcjsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICoKK2RieDUwMF9hZGRfaTJjKGludCBpZCwgcmVzb3VyY2Vfc2l6ZV90IGJhc2UsIGludCBpcnEsCisJICAgICAgIHN0cnVjdCBubWtfaTJjX2NvbnRyb2xsZXIgKnBkYXRhKQoreworCXJldHVybiBkYng1MDBfYWRkX3BsYXRmb3JtX2RldmljZV80azFpcnEoIm5tay1pMmMiLCBpZCwgYmFzZSwgaXJxLAorCQkJCQkJIHBkYXRhKTsKK30KKworc3RydWN0IG1zcF9pMnNfcGxhdGZvcm1fZGF0YTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICoKK2RieDUwMF9hZGRfbXNwX2kycyhpbnQgaWQsIHJlc291cmNlX3NpemVfdCBiYXNlLCBpbnQgaXJxLAorCQkgICBzdHJ1Y3QgbXNwX2kyc19wbGF0Zm9ybV9kYXRhICpwZGF0YSkKK3sKKwlyZXR1cm4gZGJ4NTAwX2FkZF9wbGF0Zm9ybV9kZXZpY2VfNGsxaXJxKCJNU1BfSTJTIiwgaWQsIGJhc2UsIGlycSwKKwkJCQkJCSBwZGF0YSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGFtYmFfZGV2aWNlICoKK2RieDUwMF9hZGRfcnRjKHJlc291cmNlX3NpemVfdCBiYXNlLCBpbnQgaXJxKQoreworCXJldHVybiBkYng1MDBfYWRkX2FtYmFfZGV2aWNlKCJydGMtcGwwMzEiLCBiYXNlLCBpcnEsIE5VTEwsIDApOworfQorCitzdHJ1Y3Qgbm1rX2dwaW9fcGxhdGZvcm1fZGF0YTsKKwordm9pZCBkYng1MDBfYWRkX2dwaW9zKHJlc291cmNlX3NpemVfdCAqYmFzZSwgaW50IG51bSwgaW50IGlycSwKKwkJICAgICAgc3RydWN0IG5ta19ncGlvX3BsYXRmb3JtX2RhdGEgKnBkYXRhKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXV4NTAwL2RldmljZXMtZGI1NTAwLmMgYi9hcmNoL2FybS9tYWNoLXV4NTAwL2RldmljZXMtZGI1NTAwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzZTViNTYuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC11eDUwMC9kZXZpY2VzLWRiNTUwMC5jCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgU1QtRXJpY3Nzb24gU0EgMjAxMAotICoKLSAqIEF1dGhvcjogUmFiaW4gVmluY2VudCA8cmFiaW4udmluY2VudEBzdGVyaWNzc29uLmNvbT4gZm9yIFNULUVyaWNzc29uCi0gKiBMaWNlbnNlIHRlcm1zOiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSB2ZXJzaW9uIDIKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvZGV2aWNlcy5oPgotCi1zdGF0aWMgc3RydWN0IG5ta19ncGlvX3BsYXRmb3JtX2RhdGEgdTU1MDBfZ3Bpb19kYXRhW10gPSB7Ci0JR1BJT19EQVRBKCJHUElPLTAtMzEiLCAwKSwKLQlHUElPX0RBVEEoIkdQSU8tMzItNjMiLCAzMiksIC8qIDM2Li42MyBub3Qgcm91dGVkIHRvIHBpbiAqLwotCUdQSU9fREFUQSgiR1BJTy02NC05NSIsIDY0KSwgLyogODMuLjk1IG5vdCByb3V0ZWQgdG8gcGluICovCi0JR1BJT19EQVRBKCJHUElPLTk2LTEyNyIsIDk2KSwgLyogMTAyLi4xMjcgbm90IHJvdXRlZCB0byBwaW4gKi8KLQlHUElPX0RBVEEoIkdQSU8tMTI4LTE1OSIsIDEyOCksIC8qIDE0OS4uMTU5IG5vdCByb3V0ZWQgdG8gcGluICovCi0JR1BJT19EQVRBKCJHUElPLTE2MC0xOTEiLCAxNjApLAotCUdQSU9fREFUQSgiR1BJTy0xOTItMjIzIiwgMTkyKSwKLQlHUElPX0RBVEEoIkdQSU8tMjI0LTI1NSIsIDIyNCksIC8qIDIyOC4uMjU1IG5vdCByb3V0ZWQgdG8gcGluICovCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHU1NTAwX2dwaW9fcmVzb3VyY2VzW10gPSB7Ci0JR1BJT19SRVNPVVJDRSgwKSwKLQlHUElPX1JFU09VUkNFKDEpLAotCUdQSU9fUkVTT1VSQ0UoMiksCi0JR1BJT19SRVNPVVJDRSgzKSwKLQlHUElPX1JFU09VUkNFKDQpLAotCUdQSU9fUkVTT1VSQ0UoNSksCi0JR1BJT19SRVNPVVJDRSg2KSwKLQlHUElPX1JFU09VUkNFKDcpLAotfTsKLQotc3RydWN0IHBsYXRmb3JtX2RldmljZSB1NTUwMF9ncGlvX2RldnNbXSA9IHsKLQlHUElPX0RFVklDRSgwKSwKLQlHUElPX0RFVklDRSgxKSwKLQlHUElPX0RFVklDRSgyKSwKLQlHUElPX0RFVklDRSgzKSwKLQlHUElPX0RFVklDRSg0KSwKLQlHUElPX0RFVklDRSg1KSwKLQlHUElPX0RFVklDRSg2KSwKLQlHUElPX0RFVklDRSg3KSwKLX07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXV4NTAwL2RldmljZXMtZGI1NTAwLmggYi9hcmNoL2FybS9tYWNoLXV4NTAwL2RldmljZXMtZGI1NTAwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhkNzkwMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdXg1MDAvZGV2aWNlcy1kYjU1MDAuaApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSBTVC1Fcmljc3NvbiBTQSAyMDEwCisgKgorICogQXV0aG9yOiBSYWJpbiBWaW5jZW50IDxyYWJpbi52aW5jZW50QHN0ZXJpY3Nzb24uY29tPiBmb3IgU1QtRXJpY3Nzb24KKyAqIExpY2Vuc2UgdGVybXM6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpLCB2ZXJzaW9uIDIuCisgKi8KKworI2lmbmRlZiBfX0RFVklDRVNfREI1NTAwX0gKKyNkZWZpbmUgX19ERVZJQ0VTX0RCNTUwMF9ICisKKyNpbmNsdWRlICJkZXZpY2VzLWNvbW1vbi5oIgorCisjZGVmaW5lIGRiNTUwMF9hZGRfaTJjMShwZGF0YSkgXAorCWRieDUwMF9hZGRfaTJjKDEsIFU1NTAwX0kyQzFfQkFTRSwgSVJRX0RCNTUwMF9JMkMxLCBwZGF0YSkKKyNkZWZpbmUgZGI1NTAwX2FkZF9pMmMyKHBkYXRhKSBcCisJZGJ4NTAwX2FkZF9pMmMoMiwgVTU1MDBfSTJDMl9CQVNFLCBJUlFfREI1NTAwX0kyQzIsIHBkYXRhKQorI2RlZmluZSBkYjU1MDBfYWRkX2kyYzMocGRhdGEpIFwKKwlkYng1MDBfYWRkX2kyYygzLCBVNTUwMF9JMkMzX0JBU0UsIElSUV9EQjU1MDBfSTJDMywgcGRhdGEpCisKKyNkZWZpbmUgZGI1NTAwX2FkZF9tc3AwX2kycyhwZGF0YSkgXAorCWRieDUwMF9hZGRfbXNwX2kycygwLCBVNTUwMF9NU1AwX0JBU0UsIElSUV9EQjU1MDBfTVNQMCwgcGRhdGEpCisjZGVmaW5lIGRiNTUwMF9hZGRfbXNwMV9pMnMocGRhdGEpIFwKKwlkYng1MDBfYWRkX21zcF9pMnMoMSwgVTU1MDBfTVNQMV9CQVNFLCBJUlFfREI1NTAwX01TUDEsIHBkYXRhKQorI2RlZmluZSBkYjU1MDBfYWRkX21zcDJfaTJzKHBkYXRhKSBcCisJZGJ4NTAwX2FkZF9tc3BfaTJzKDIsIFU1NTAwX01TUDJfQkFTRSwgSVJRX0RCNTUwMF9NU1AyLCBwZGF0YSkKKworI2RlZmluZSBkYjU1MDBfYWRkX21zcDBfc3BpKHBkYXRhKSBcCisJZGJ4NTAwX2FkZF9tc3Bfc3BpKCJtc3AwIiwgVTU1MDBfTVNQMF9CQVNFLCBJUlFfREI1NTAwX01TUDAsIHBkYXRhKQorI2RlZmluZSBkYjU1MDBfYWRkX21zcDFfc3BpKHBkYXRhKSBcCisJZGJ4NTAwX2FkZF9tc3Bfc3BpKCJtc3AxIiwgVTU1MDBfTVNQMV9CQVNFLCBJUlFfREI1NTAwX01TUDEsIHBkYXRhKQorI2RlZmluZSBkYjU1MDBfYWRkX21zcDJfc3BpKHBkYXRhKSBcCisJZGJ4NTAwX2FkZF9tc3Bfc3BpKCJtc3AyIiwgVTU1MDBfTVNQMl9CQVNFLCBJUlFfREI1NTAwX01TUDIsIHBkYXRhKQorCisjZGVmaW5lIGRiNTUwMF9hZGRfcnRjKCkgXAorCWRieDUwMF9hZGRfcnRjKFU1NTAwX1JUQ19CQVNFLCBJUlFfREI1NTAwX1JUQyk7CisKKyNkZWZpbmUgZGI1NTAwX2FkZF9zZGkwKHBkYXRhKSBcCisJZGJ4NTAwX2FkZF9zZGkoInNkaTAiLCBVNTUwMF9TREkwX0JBU0UsIElSUV9EQjU1MDBfU0RNTUMwLCBwZGF0YSkKKyNkZWZpbmUgZGI1NTAwX2FkZF9zZGkxKHBkYXRhKSBcCisJZGJ4NTAwX2FkZF9zZGkoInNkaTEiLCBVNTUwMF9TREkxX0JBU0UsIElSUV9EQjU1MDBfU0RNTUMxLCBwZGF0YSkKKyNkZWZpbmUgZGI1NTAwX2FkZF9zZGkyKHBkYXRhKSBcCisJZGJ4NTAwX2FkZF9zZGkoInNkaTIiLCBVNTUwMF9TREkyX0JBU0UsIElSUV9EQjU1MDBfU0RNTUMyLCBwZGF0YSkKKyNkZWZpbmUgZGI1NTAwX2FkZF9zZGkzKHBkYXRhKSBcCisJZGJ4NTAwX2FkZF9zZGkoInNkaTMiLCBVNTUwMF9TREkzX0JBU0UsIElSUV9EQjU1MDBfU0RNTUMzLCBwZGF0YSkKKyNkZWZpbmUgZGI1NTAwX2FkZF9zZGk0KHBkYXRhKSBcCisJZGJ4NTAwX2FkZF9zZGkoInNkaTQiLCBVNTUwMF9TREk0X0JBU0UsIElSUV9EQjU1MDBfU0RNTUM0LCBwZGF0YSkKKworI2RlZmluZSBkYjU1MDBfYWRkX3NwaTAocGRhdGEpIFwKKwlkYng1MDBfYWRkX3NwaSgic3BpMCIsIFU1NTAwX1NQSTBfQkFTRSwgSVJRX0RCNTUwMF9TUEkwLCBwZGF0YSkKKyNkZWZpbmUgZGI1NTAwX2FkZF9zcGkxKHBkYXRhKSBcCisJZGJ4NTAwX2FkZF9zcGkoInNwaTEiLCBVNTUwMF9TUEkxX0JBU0UsIElSUV9EQjU1MDBfU1BJMSwgcGRhdGEpCisjZGVmaW5lIGRiNTUwMF9hZGRfc3BpMihwZGF0YSkgXAorCWRieDUwMF9hZGRfc3BpKCJzcGkyIiwgVTU1MDBfU1BJMl9CQVNFLCBJUlFfREI1NTAwX1NQSTIsIHBkYXRhKQorI2RlZmluZSBkYjU1MDBfYWRkX3NwaTMocGRhdGEpIFwKKwlkYng1MDBfYWRkX3NwaSgic3BpMyIsIFU1NTAwX1NQSTNfQkFTRSwgSVJRX0RCNTUwMF9TUEkzLCBwZGF0YSkKKworI2RlZmluZSBkYjU1MDBfYWRkX3VhcnQwKCkgXAorCWRieDUwMF9hZGRfdWFydCgidWFydDAiLCBVNTUwMF9VQVJUMF9CQVNFLCBJUlFfREI1NTAwX1VBUlQwKQorI2RlZmluZSBkYjU1MDBfYWRkX3VhcnQxKCkgXAorCWRieDUwMF9hZGRfdWFydCgidWFydDEiLCBVNTUwMF9VQVJUMV9CQVNFLCBJUlFfREI1NTAwX1VBUlQxKQorI2RlZmluZSBkYjU1MDBfYWRkX3VhcnQyKCkgXAorCWRieDUwMF9hZGRfdWFydCgidWFydDIiLCBVNTUwMF9VQVJUMl9CQVNFLCBJUlFfREI1NTAwX1VBUlQyKQorI2RlZmluZSBkYjU1MDBfYWRkX3VhcnQzKCkgXAorCWRieDUwMF9hZGRfdWFydCgidWFydDMiLCBVNTUwMF9VQVJUM19CQVNFLCBJUlFfREI1NTAwX1VBUlQzKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdXg1MDAvZGV2aWNlcy1kYjg1MDAuYyBiL2FyY2gvYXJtL21hY2gtdXg1MDAvZGV2aWNlcy1kYjg1MDAuYwppbmRleCA0YTk0YmUzLi4yM2M2OTVkNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC11eDUwMC9kZXZpY2VzLWRiODUwMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtdXg1MDAvZGV2aWNlcy1kYjg1MDAuYwpAQCAtMTksMTczICsxOSw2IEBACiAKICNpbmNsdWRlICJzdGUtZG1hNDAtZGI4NTAwLmgiCiAKLXN0YXRpYyBzdHJ1Y3Qgbm1rX2dwaW9fcGxhdGZvcm1fZGF0YSB1ODUwMF9ncGlvX2RhdGFbXSA9IHsKLQlHUElPX0RBVEEoIkdQSU8tMC0zMSIsIDApLAotCUdQSU9fREFUQSgiR1BJTy0zMi02MyIsIDMyKSwgLyogMzcuLjYzIG5vdCByb3V0ZWQgdG8gcGluICovCi0JR1BJT19EQVRBKCJHUElPLTY0LTk1IiwgNjQpLAotCUdQSU9fREFUQSgiR1BJTy05Ni0xMjciLCA5NiksIC8qIDk4Li4xMjcgbm90IHJvdXRlZCB0byBwaW4gKi8KLQlHUElPX0RBVEEoIkdQSU8tMTI4LTE1OSIsIDEyOCksCi0JR1BJT19EQVRBKCJHUElPLTE2MC0xOTEiLCAxNjApLCAvKiAxNzIuLjE5MSBub3Qgcm91dGVkIHRvIHBpbiAqLwotCUdQSU9fREFUQSgiR1BJTy0xOTItMjIzIiwgMTkyKSwKLQlHUElPX0RBVEEoIkdQSU8tMjI0LTI1NSIsIDIyNCksIC8qIDIzMS4uMjU1IG5vdCByb3V0ZWQgdG8gcGluICovCi0JR1BJT19EQVRBKCJHUElPLTI1Ni0yODgiLCAyNTYpLCAvKiAyNjguLjI4OCBub3Qgcm91dGVkIHRvIHBpbiAqLwotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1ODUwMF9ncGlvX3Jlc291cmNlc1tdID0gewotCUdQSU9fUkVTT1VSQ0UoMCksCi0JR1BJT19SRVNPVVJDRSgxKSwKLQlHUElPX1JFU09VUkNFKDIpLAotCUdQSU9fUkVTT1VSQ0UoMyksCi0JR1BJT19SRVNPVVJDRSg0KSwKLQlHUElPX1JFU09VUkNFKDUpLAotCUdQSU9fUkVTT1VSQ0UoNiksCi0JR1BJT19SRVNPVVJDRSg3KSwKLQlHUElPX1JFU09VUkNFKDgpLAotfTsKLQotc3RydWN0IHBsYXRmb3JtX2RldmljZSB1ODUwMF9ncGlvX2RldnNbXSA9IHsKLQlHUElPX0RFVklDRSgwKSwKLQlHUElPX0RFVklDRSgxKSwKLQlHUElPX0RFVklDRSgyKSwKLQlHUElPX0RFVklDRSgzKSwKLQlHUElPX0RFVklDRSg0KSwKLQlHUElPX0RFVklDRSg1KSwKLQlHUElPX0RFVklDRSg2KSwKLQlHUElPX0RFVklDRSg3KSwKLQlHUElPX0RFVklDRSg4KSwKLX07Ci0KLXN0cnVjdCBhbWJhX2RldmljZSB1ODUwMF9zc3AwX2RldmljZSA9IHsKLQkuZGV2ID0gewotCQkuY29oZXJlbnRfZG1hX21hc2sgPSB+MCwKLQkJLmluaXRfbmFtZSA9ICJzc3AwIiwKLQl9LAotCS5yZXMgPSB7Ci0JCS5zdGFydCA9IFU4NTAwX1NTUDBfQkFTRSwKLQkJLmVuZCAgID0gVTg1MDBfU1NQMF9CQVNFICsgU1pfNEsgLSAxLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCS5pcnEgPSB7SVJRX0RCODUwMF9TU1AwLCBOT19JUlEgfSwKLQkvKiBTVC1Fcmljc3NvbiBtb2RpZmllZCBpZCAqLwotCS5wZXJpcGhpZCA9IFNTUF9QRVJfSUQsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHU4NTAwX2kyYzBfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBVODUwMF9JMkMwX0JBU0UsCi0JCS5lbmQJPSBVODUwMF9JMkMwX0JBU0UgKyBTWl80SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBJUlFfREI4NTAwX0kyQzAsCi0JCS5lbmQJPSBJUlFfREI4NTAwX0kyQzAsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0KLX07Ci0KLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdTg1MDBfaTJjMF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gIm5tay1pMmMiLAotCS5pZAkJPSAwLAotCS5yZXNvdXJjZQk9IHU4NTAwX2kyYzBfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh1ODUwMF9pMmMwX3Jlc291cmNlcyksCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHU4NTAwX2kyYzRfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBVODUwMF9JMkM0X0JBU0UsCi0JCS5lbmQJPSBVODUwMF9JMkM0X0JBU0UgKyBTWl80SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBJUlFfREI4NTAwX0kyQzQsCi0JCS5lbmQJPSBJUlFfREI4NTAwX0kyQzQsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0KLX07Ci0KLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdTg1MDBfaTJjNF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gIm5tay1pMmMiLAotCS5pZAkJPSA0LAotCS5yZXNvdXJjZQk9IHU4NTAwX2kyYzRfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh1ODUwMF9pMmM0X3Jlc291cmNlcyksCi19OwotCi0vKgotICogU0QvTU1DCi0gKi8KLQotc3RydWN0IGFtYmFfZGV2aWNlIHU4NTAwX3NkaTBfZGV2aWNlID0gewotCS5kZXYJCT0gewotCQkuaW5pdF9uYW1lID0gInNkaTAiLAotCX0sCi0JLnJlcwkJPSB7Ci0JCS5zdGFydAk9IFU4NTAwX1NESTBfQkFTRSwKLQkJLmVuZAk9IFU4NTAwX1NESTBfQkFTRSArIFNaXzRLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQkuaXJxCQk9IHtJUlFfREI4NTAwX1NETU1DMCwgTk9fSVJRfSwKLX07Ci0KLXN0cnVjdCBhbWJhX2RldmljZSB1ODUwMF9zZGkxX2RldmljZSA9IHsKLQkuZGV2CQk9IHsKLQkJLmluaXRfbmFtZSA9ICJzZGkxIiwKLQl9LAotCS5yZXMJCT0gewotCQkuc3RhcnQJPSBVODUwMF9TREkxX0JBU0UsCi0JCS5lbmQJPSBVODUwMF9TREkxX0JBU0UgKyBTWl80SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JLmlycQkJPSB7SVJRX0RCODUwMF9TRE1NQzEsIE5PX0lSUX0sCi19OwotCi1zdHJ1Y3QgYW1iYV9kZXZpY2UgdTg1MDBfc2RpMl9kZXZpY2UgPSB7Ci0JLmRldgkJPSB7Ci0JCS5pbml0X25hbWUgPSAic2RpMiIsCi0JfSwKLQkucmVzCQk9IHsKLQkJLnN0YXJ0CT0gVTg1MDBfU0RJMl9CQVNFLAotCQkuZW5kCT0gVTg1MDBfU0RJMl9CQVNFICsgU1pfNEsgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCS5pcnEJCT0ge0lSUV9EQjg1MDBfU0RNTUMyLCBOT19JUlF9LAotfTsKLQotc3RydWN0IGFtYmFfZGV2aWNlIHU4NTAwX3NkaTNfZGV2aWNlID0gewotCS5kZXYJCT0gewotCQkuaW5pdF9uYW1lID0gInNkaTMiLAotCX0sCi0JLnJlcwkJPSB7Ci0JCS5zdGFydAk9IFU4NTAwX1NESTNfQkFTRSwKLQkJLmVuZAk9IFU4NTAwX1NESTNfQkFTRSArIFNaXzRLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQkuaXJxCQk9IHtJUlFfREI4NTAwX1NETU1DMywgTk9fSVJRfSwKLX07Ci0KLXN0cnVjdCBhbWJhX2RldmljZSB1ODUwMF9zZGk0X2RldmljZSA9IHsKLQkuZGV2CQk9IHsKLQkJLmluaXRfbmFtZSA9ICJzZGk0IiwKLQl9LAotCS5yZXMJCT0gewotCQkuc3RhcnQJPSBVODUwMF9TREk0X0JBU0UsCi0JCS5lbmQJPSBVODUwMF9TREk0X0JBU0UgKyBTWl80SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JLmlycQkJPSB7SVJRX0RCODUwMF9TRE1NQzQsIE5PX0lSUX0sCi19OwotCi1zdHJ1Y3QgYW1iYV9kZXZpY2UgdTg1MDBfc2RpNV9kZXZpY2UgPSB7Ci0JLmRldgkJPSB7Ci0JCS5pbml0X25hbWUgPSAic2RpNSIsCi0JfSwKLQkucmVzCQk9IHsKLQkJLnN0YXJ0CT0gVTg1MDBfU0RJNV9CQVNFLAotCQkuZW5kCT0gVTg1MDBfU0RJNV9CQVNFICsgU1pfNEsgLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCS5pcnEJCT0ge0lSUV9EQjg1MDBfU0RNTUM1LCBOT19JUlF9LAotfTsKLQogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBkbWE0MF9yZXNvdXJjZXNbXSA9IHsKIAlbMF0gPSB7CiAJCS5zdGFydCA9IFU4NTAwX0RNQV9CQVNFLApAQCAtMjk1LDcgKzEyOCw3IEBACiAJfSwKIH07CiAKLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdXg1MDBfc2tlX2tleXBhZF9kZXZpY2UgPSB7CitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHU4NTAwX3NrZV9rZXlwYWRfZGV2aWNlID0gewogCS5uYW1lID0gIm5tay1za2Uta2V5cGFkIiwKIAkuaWQgPSAtMSwKIAkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUoa2V5cGFkX3Jlc291cmNlcyksCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXV4NTAwL2RldmljZXMtZGI4NTAwLmggYi9hcmNoL2FybS9tYWNoLXV4NTAwL2RldmljZXMtZGI4NTAwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2E3NzBjNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdXg1MDAvZGV2aWNlcy1kYjg1MDAuaApAQCAtMCwwICsxLDk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSBTVC1Fcmljc3NvbiBTQSAyMDEwCisgKgorICogQXV0aG9yOiBSYWJpbiBWaW5jZW50IDxyYWJpbi52aW5jZW50QHN0ZXJpY3Nzb24uY29tPiBmb3IgU1QtRXJpY3Nzb24KKyAqIExpY2Vuc2UgdGVybXM6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpLCB2ZXJzaW9uIDIuCisgKi8KKworI2lmbmRlZiBfX0RFVklDRVNfREI4NTAwX0gKKyNkZWZpbmUgX19ERVZJQ0VTX0RCODUwMF9ICisKKyNpbmNsdWRlICJkZXZpY2VzLWNvbW1vbi5oIgorCitzdHJ1Y3Qgc2tlX2tleXBhZF9wbGF0Zm9ybV9kYXRhOworc3RydWN0IHBsMDIyX3NzcF9jb250cm9sbGVyOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKgorZGI4NTAwX2FkZF9za2Vfa2V5cGFkKHN0cnVjdCBza2Vfa2V5cGFkX3BsYXRmb3JtX2RhdGEgKnBkYXRhKQoreworCXJldHVybiBkYng1MDBfYWRkX3BsYXRmb3JtX2RldmljZV80azFpcnEoIm5tay1za2Uta2V5cGFkIiwgLTEsCisJCQkJCQkgVTg1MDBfU0tFX0JBU0UsCisJCQkJCQkgSVJRX0RCODUwMF9LQiwgcGRhdGEpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBhbWJhX2RldmljZSAqCitkYjg1MDBfYWRkX3NzcChjb25zdCBjaGFyICpuYW1lLCByZXNvdXJjZV9zaXplX3QgYmFzZSwgaW50IGlycSwKKwkgICAgICAgc3RydWN0IHBsMDIyX3NzcF9jb250cm9sbGVyICpwZGF0YSkKK3sKKwlyZXR1cm4gZGJ4NTAwX2FkZF9hbWJhX2RldmljZShuYW1lLCBiYXNlLCBpcnEsIHBkYXRhLCBTU1BfUEVSX0lEKTsKK30KKworCisjZGVmaW5lIGRiODUwMF9hZGRfaTJjMChwZGF0YSkgXAorCWRieDUwMF9hZGRfaTJjKDAsIFU4NTAwX0kyQzBfQkFTRSwgSVJRX0RCODUwMF9JMkMwLCBwZGF0YSkKKyNkZWZpbmUgZGI4NTAwX2FkZF9pMmMxKHBkYXRhKSBcCisJZGJ4NTAwX2FkZF9pMmMoMSwgVTg1MDBfSTJDMV9CQVNFLCBJUlFfREI4NTAwX0kyQzEsIHBkYXRhKQorI2RlZmluZSBkYjg1MDBfYWRkX2kyYzIocGRhdGEpIFwKKwlkYng1MDBfYWRkX2kyYygyLCBVODUwMF9JMkMyX0JBU0UsIElSUV9EQjg1MDBfSTJDMiwgcGRhdGEpCisjZGVmaW5lIGRiODUwMF9hZGRfaTJjMyhwZGF0YSkgXAorCWRieDUwMF9hZGRfaTJjKDMsIFU4NTAwX0kyQzNfQkFTRSwgSVJRX0RCODUwMF9JMkMzLCBwZGF0YSkKKyNkZWZpbmUgZGI4NTAwX2FkZF9pMmM0KHBkYXRhKSBcCisJZGJ4NTAwX2FkZF9pMmMoNCwgVTg1MDBfSTJDNF9CQVNFLCBJUlFfREI4NTAwX0kyQzQsIHBkYXRhKQorCisjZGVmaW5lIGRiODUwMF9hZGRfbXNwMF9pMnMocGRhdGEpIFwKKwlkYng1MDBfYWRkX21zcF9pMnMoMCwgVTg1MDBfTVNQMF9CQVNFLCBJUlFfREI4NTAwX01TUDAsIHBkYXRhKQorI2RlZmluZSBkYjg1MDBfYWRkX21zcDFfaTJzKHBkYXRhKSBcCisJZGJ4NTAwX2FkZF9tc3BfaTJzKDEsIFU4NTAwX01TUDFfQkFTRSwgSVJRX0RCODUwMF9NU1AxLCBwZGF0YSkKKyNkZWZpbmUgZGI4NTAwX2FkZF9tc3AyX2kycyhwZGF0YSkgXAorCWRieDUwMF9hZGRfbXNwX2kycygyLCBVODUwMF9NU1AyX0JBU0UsIElSUV9EQjg1MDBfTVNQMiwgcGRhdGEpCisjZGVmaW5lIGRiODUwMF9hZGRfbXNwM19pMnMocGRhdGEpIFwKKwlkYng1MDBfYWRkX21zcF9pMnMoMywgVTg1MDBfTVNQM19CQVNFLCBJUlFfREI4NTAwX01TUDEsIHBkYXRhKQorCisjZGVmaW5lIGRiODUwMF9hZGRfbXNwMF9zcGkocGRhdGEpIFwKKwlkYng1MDBfYWRkX21zcF9zcGkoIm1zcDAiLCBVODUwMF9NU1AwX0JBU0UsIElSUV9EQjg1MDBfTVNQMCwgcGRhdGEpCisjZGVmaW5lIGRiODUwMF9hZGRfbXNwMV9zcGkocGRhdGEpIFwKKwlkYng1MDBfYWRkX21zcF9zcGkoIm1zcDEiLCBVODUwMF9NU1AxX0JBU0UsIElSUV9EQjg1MDBfTVNQMSwgcGRhdGEpCisjZGVmaW5lIGRiODUwMF9hZGRfbXNwMl9zcGkocGRhdGEpIFwKKwlkYng1MDBfYWRkX21zcF9zcGkoIm1zcDIiLCBVODUwMF9NU1AyX0JBU0UsIElSUV9EQjg1MDBfTVNQMiwgcGRhdGEpCisjZGVmaW5lIGRiODUwMF9hZGRfbXNwM19zcGkocGRhdGEpIFwKKwlkYng1MDBfYWRkX21zcF9zcGkoIm1zcDMiLCBVODUwMF9NU1AzX0JBU0UsIElSUV9EQjg1MDBfTVNQMSwgcGRhdGEpCisKKyNkZWZpbmUgZGI4NTAwX2FkZF9ydGMoKSBcCisJZGJ4NTAwX2FkZF9ydGMoVTg1MDBfUlRDX0JBU0UsIElSUV9EQjg1MDBfUlRDKTsKKworI2RlZmluZSBkYjg1MDBfYWRkX3NkaTAocGRhdGEpIFwKKwlkYng1MDBfYWRkX3NkaSgic2RpMCIsIFU4NTAwX1NESTBfQkFTRSwgSVJRX0RCODUwMF9TRE1NQzAsIHBkYXRhKQorI2RlZmluZSBkYjg1MDBfYWRkX3NkaTEocGRhdGEpIFwKKwlkYng1MDBfYWRkX3NkaSgic2RpMSIsIFU4NTAwX1NESTFfQkFTRSwgSVJRX0RCODUwMF9TRE1NQzEsIHBkYXRhKQorI2RlZmluZSBkYjg1MDBfYWRkX3NkaTIocGRhdGEpIFwKKwlkYng1MDBfYWRkX3NkaSgic2RpMiIsIFU4NTAwX1NESTJfQkFTRSwgSVJRX0RCODUwMF9TRE1NQzIsIHBkYXRhKQorI2RlZmluZSBkYjg1MDBfYWRkX3NkaTMocGRhdGEpIFwKKwlkYng1MDBfYWRkX3NkaSgic2RpMyIsIFU4NTAwX1NESTNfQkFTRSwgSVJRX0RCODUwMF9TRE1NQzMsIHBkYXRhKQorI2RlZmluZSBkYjg1MDBfYWRkX3NkaTQocGRhdGEpIFwKKwlkYng1MDBfYWRkX3NkaSgic2RpNCIsIFU4NTAwX1NESTRfQkFTRSwgSVJRX0RCODUwMF9TRE1NQzQsIHBkYXRhKQorI2RlZmluZSBkYjg1MDBfYWRkX3NkaTUocGRhdGEpIFwKKwlkYng1MDBfYWRkX3NkaSgic2RpNSIsIFU4NTAwX1NESTVfQkFTRSwgSVJRX0RCODUwMF9TRE1NQzUsIHBkYXRhKQorCisjZGVmaW5lIGRiODUwMF9hZGRfc3NwMChwZGF0YSkgXAorCWRiODUwMF9hZGRfc3NwKCJzc3AwIiwgVTg1MDBfU1NQMF9CQVNFLCBJUlFfREI4NTAwX1NTUDAsIHBkYXRhKQorI2RlZmluZSBkYjg1MDBfYWRkX3NzcDEocGRhdGEpIFwKKwlkYjg1MDBfYWRkX3NzcCgic3NwMSIsIFU4NTAwX1NTUDFfQkFTRSwgSVJRX0RCODUwMF9TU1AxLCBwZGF0YSkKKworI2RlZmluZSBkYjg1MDBfYWRkX3NwaTAocGRhdGEpIFwKKwlkYng1MDBfYWRkX3NwaSgic3BpMCIsIFU4NTAwX1NQSTBfQkFTRSwgSVJRX0RCODUwMF9TUEkwLCBwZGF0YSkKKyNkZWZpbmUgZGI4NTAwX2FkZF9zcGkxKHBkYXRhKSBcCisJZGJ4NTAwX2FkZF9zcGkoInNwaTEiLCBVODUwMF9TUEkxX0JBU0UsIElSUV9EQjg1MDBfU1BJMSwgcGRhdGEpCisjZGVmaW5lIGRiODUwMF9hZGRfc3BpMihwZGF0YSkgXAorCWRieDUwMF9hZGRfc3BpKCJzcGkyIiwgVTg1MDBfU1BJMl9CQVNFLCBJUlFfREI4NTAwX1NQSTIsIHBkYXRhKQorI2RlZmluZSBkYjg1MDBfYWRkX3NwaTMocGRhdGEpIFwKKwlkYng1MDBfYWRkX3NwaSgic3BpMyIsIFU4NTAwX1NQSTNfQkFTRSwgSVJRX0RCODUwMF9TUEkzLCBwZGF0YSkKKworI2RlZmluZSBkYjg1MDBfYWRkX3VhcnQwKCkgXAorCWRieDUwMF9hZGRfdWFydCgidWFydDAiLCBVODUwMF9VQVJUMF9CQVNFLCBJUlFfREI4NTAwX1VBUlQwKQorI2RlZmluZSBkYjg1MDBfYWRkX3VhcnQxKCkgXAorCWRieDUwMF9hZGRfdWFydCgidWFydDEiLCBVODUwMF9VQVJUMV9CQVNFLCBJUlFfREI4NTAwX1VBUlQxKQorI2RlZmluZSBkYjg1MDBfYWRkX3VhcnQyKCkgXAorCWRieDUwMF9hZGRfdWFydCgidWFydDIiLCBVODUwMF9VQVJUMl9CQVNFLCBJUlFfREI4NTAwX1VBUlQyKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdXg1MDAvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9kZXZpY2VzLmMKaW5kZXggOGEyNjg4OS4uZWEwYTJmOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC11eDUwMC9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9kZXZpY2VzLmMKQEAgLTE0LDY5ICsxNCw2IEBACiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvc2V0dXAuaD4KIAotI2RlZmluZSBfX01FTV80S19SRVNPVVJDRSh4KSBcCi0JLnJlcyA9IHsuc3RhcnQgPSAoeCksIC5lbmQgPSAoeCkgKyBTWl80SyAtIDEsIC5mbGFncyA9IElPUkVTT1VSQ0VfTUVNfQotCi1zdHJ1Y3QgYW1iYV9kZXZpY2UgdXg1MDBfcGwwMzFfZGV2aWNlID0gewotCS5kZXYgPSB7Ci0JCS5pbml0X25hbWUgPSAicGwwMzEiLAotCX0sCi0JLnJlcyA9IHsKLQkJLnN0YXJ0CT0gVVg1MDBfUlRDX0JBU0UsCi0JCS5lbmQJPSBVWDUwMF9SVENfQkFTRSArIFNaXzRLIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQkuaXJxID0ge0lSUV9SVENfUlRULCBOT19JUlF9LAotfTsKLQotc3RydWN0IGFtYmFfZGV2aWNlIHV4NTAwX3VhcnQwX2RldmljZSA9IHsKLQkuZGV2ID0geyAuaW5pdF9uYW1lID0gInVhcnQwIiB9LAotCV9fTUVNXzRLX1JFU09VUkNFKFVYNTAwX1VBUlQwX0JBU0UpLAotCS5pcnEgPSB7SVJRX1VBUlQwLCBOT19JUlF9LAotfTsKLQotc3RydWN0IGFtYmFfZGV2aWNlIHV4NTAwX3VhcnQxX2RldmljZSA9IHsKLQkuZGV2ID0geyAuaW5pdF9uYW1lID0gInVhcnQxIiB9LAotCV9fTUVNXzRLX1JFU09VUkNFKFVYNTAwX1VBUlQxX0JBU0UpLAotCS5pcnEgPSB7SVJRX1VBUlQxLCBOT19JUlF9LAotfTsKLQotc3RydWN0IGFtYmFfZGV2aWNlIHV4NTAwX3VhcnQyX2RldmljZSA9IHsKLQkuZGV2ID0geyAuaW5pdF9uYW1lID0gInVhcnQyIiB9LAotCV9fTUVNXzRLX1JFU09VUkNFKFVYNTAwX1VBUlQyX0JBU0UpLAotCS5pcnEgPSB7SVJRX1VBUlQyLCBOT19JUlF9LAotfTsKLQotI2RlZmluZSBVWDUwMF9JMkNfUkVTT1VSQ0VTKGlkLCBzaXplKQkJCQlcCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHV4NTAwX2kyYyMjaWQjI19yZXNvdXJjZXNbXSA9IHsJCVwKLQlbMF0gPSB7CQkJCQkJCVwKLQkJLnN0YXJ0CT0gVVg1MDBfSTJDIyNpZCMjX0JBU0UsCQkJXAotCQkuZW5kCT0gVVg1MDBfSTJDIyNpZCMjX0JBU0UgKyBzaXplIC0gMSwJXAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwJCQlcCi0JfSwJCQkJCQkJXAotCVsxXSA9IHsJCQkJCQkJXAotCQkuc3RhcnQJPSBJUlFfSTJDIyNpZCwJCQkJXAotCQkuZW5kCT0gSVJRX0kyQyMjaWQsCQkJCVwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEJCQlcCi0JfQkJCQkJCQlcCi19Ci0KLVVYNTAwX0kyQ19SRVNPVVJDRVMoMSwgU1pfNEspOwotVVg1MDBfSTJDX1JFU09VUkNFUygyLCBTWl80Syk7Ci1VWDUwMF9JMkNfUkVTT1VSQ0VTKDMsIFNaXzRLKTsKLQotI2RlZmluZSBVWDUwMF9JMkNfUERFVklDRShjaWQpCQkJCQlcCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHV4NTAwX2kyYyMjY2lkIyNfZGV2aWNlID0gewkJXAotCS5uYW1lCQk9ICJubWstaTJjIiwJCQkJXAotCS5pZAkJPSBjaWQsCQkJCQlcCi0JLm51bV9yZXNvdXJjZXMJPSAyLAkJCQkJXAotCS5yZXNvdXJjZQk9IHV4NTAwX2kyYyMjY2lkIyNfcmVzb3VyY2VzLAkJXAotfQotCi1VWDUwMF9JMkNfUERFVklDRSgxKTsKLVVYNTAwX0kyQ19QREVWSUNFKDIpOwotVVg1MDBfSTJDX1BERVZJQ0UoMyk7Ci0KIHZvaWQgX19pbml0IGFtYmFfYWRkX2RldmljZXMoc3RydWN0IGFtYmFfZGV2aWNlICpkZXZzW10sIGludCBudW0pCiB7CiAJaW50IGk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXV4NTAwL2RtYS1kYjU1MDAuYyBiL2FyY2gvYXJtL21hY2gtdXg1MDAvZG1hLWRiNTUwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyYTA2MWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXV4NTAwL2RtYS1kYjU1MDAuYwpAQCAtMCwwICsxLDEyMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgU1QtRXJpY3Nzb24gU0EgMjAxMAorICoKKyAqIEF1dGhvcjogUGVyIEZvcmxpbiA8cGVyLmZvcmxpbkBzdGVyaWNzc29uLmNvbT4gZm9yIFNULUVyaWNzc29uCisgKiBBdXRob3I6IEpvbmFzIEFhYmVyZyA8am9uYXMuYWJlcmdAc3Rlcmljc3Nvbi5jb20+IGZvciBTVC1Fcmljc3NvbgorICogQXV0aG9yOiBSYWJpbiBWaW5jZW50IDxyYWJpbnYudmluY2VudEBzdGVyaWNzc29uLmNvbT4gZm9yIFNULUVyaWNzc29uCisgKgorICogTGljZW5zZSB0ZXJtczogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCksIHZlcnNpb24gMgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgPHBsYXQvc3RlX2RtYTQwLmg+CisjaW5jbHVkZSA8bWFjaC9zZXR1cC5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKworI2luY2x1ZGUgInN0ZS1kbWE0MC1kYjU1MDAuaCIKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBkbWE0MF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydCA9IFU1NTAwX0RNQV9CQVNFLAorCQkuZW5kICAgPSBVNTUwMF9ETUFfQkFTRSArIFNaXzRLIC0gMSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJCS5uYW1lICA9ICJiYXNlIiwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0ID0gVTU1MDBfRE1BX0xDUEFfQkFTRSwKKwkJLmVuZCAgID0gVTU1MDBfRE1BX0xDUEFfQkFTRSArIDIgKiBTWl8xSyAtIDEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCQkubmFtZSAgPSAibGNwYSIsCisJfSwKKwlbMl0gPSB7CisJCS5zdGFydCA9IElSUV9EQjU1MDBfRE1BLAorCQkuZW5kICAgPSBJUlFfREI1NTAwX0RNQSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEKKwl9Cit9OworCisvKiBEZWZhdWx0IGNvbmZpZ3VyYXRpb24gZm9yIHBoeXNpY2FsIG1lbWNweSAqLworc3RhdGljIHN0cnVjdCBzdGVkbWE0MF9jaGFuX2NmZyBkbWE0MF9tZW1jcHlfY29uZl9waHkgPSB7CisJLm1vZGUgPSBTVEVETUE0MF9NT0RFX1BIWVNJQ0FMLAorCS5kaXIgPSBTVEVETUE0MF9NRU1fVE9fTUVNLAorCisJLnNyY19pbmZvLmRhdGFfd2lkdGggPSBTVEVETUE0MF9CWVRFX1dJRFRILAorCS5zcmNfaW5mby5wc2l6ZSA9IFNURURNQTQwX1BTSVpFX1BIWV8xLAorCS5zcmNfaW5mby5mbG93X2N0cmwgPSBTVEVETUE0MF9OT19GTE9XX0NUUkwsCisKKwkuZHN0X2luZm8uZGF0YV93aWR0aCA9IFNURURNQTQwX0JZVEVfV0lEVEgsCisJLmRzdF9pbmZvLnBzaXplID0gU1RFRE1BNDBfUFNJWkVfUEhZXzEsCisJLmRzdF9pbmZvLmZsb3dfY3RybCA9IFNURURNQTQwX05PX0ZMT1dfQ1RSTCwKK307CisKKy8qIERlZmF1bHQgY29uZmlndXJhdGlvbiBmb3IgbG9naWNhbCBtZW1jcHkgKi8KK3N0YXRpYyBzdHJ1Y3Qgc3RlZG1hNDBfY2hhbl9jZmcgZG1hNDBfbWVtY3B5X2NvbmZfbG9nID0geworCS5kaXIgPSBTVEVETUE0MF9NRU1fVE9fTUVNLAorCisJLnNyY19pbmZvLmRhdGFfd2lkdGggPSBTVEVETUE0MF9CWVRFX1dJRFRILAorCS5zcmNfaW5mby5wc2l6ZSA9IFNURURNQTQwX1BTSVpFX0xPR18xLAorCS5zcmNfaW5mby5mbG93X2N0cmwgPSBTVEVETUE0MF9OT19GTE9XX0NUUkwsCisKKwkuZHN0X2luZm8uZGF0YV93aWR0aCA9IFNURURNQTQwX0JZVEVfV0lEVEgsCisJLmRzdF9pbmZvLnBzaXplID0gU1RFRE1BNDBfUFNJWkVfTE9HXzEsCisJLmRzdF9pbmZvLmZsb3dfY3RybCA9IFNURURNQTQwX05PX0ZMT1dfQ1RSTCwKK307CisKKy8qCisgKiBNYXBwaW5nIGJldHdlZW4gc29ydWNlIGV2ZW50IGxpbmVzIGFuZCBwaHlzaWNhbCBkZXZpY2UgYWRkcmVzcyBUaGlzIHdhcworICogY3JlYXRlZCBhc3N1bWluZyB0aGF0IHRoZSBldmVudCBsaW5lIGlzIHRpZWQgdG8gYSBkZXZpY2UgYW5kIHRoZXJlZm9yZSB0aGUKKyAqIGFkZHJlc3MgaXMgY29uc3RhbnQsIGhvd2V2ZXIgdGhpcyBpcyBub3QgdHJ1ZSBmb3IgYXQgbGVhc3QgVVNCLCBhbmQgdGhlCisgKiB2YWx1ZXMgYXJlIGp1c3QgcGxhY2Vob2xkZXJzIGZvciBVU0IuICBUaGlzIHRhYmxlIGlzIHByZXNlcnZlZCBhbmQgdXNlZCBmb3IKKyAqIG5vdy4KKyAqLworc3RhdGljIGNvbnN0IGRtYV9hZGRyX3QgZG1hNDBfcnhfbWFwW0RCNTUwMF9ETUFfTlJfREVWXSA9IHsKKwlbREI1NTAwX0RNQV9ERVYyNF9TRE1NQzBfUlhdID0gLTEsCit9OworCisvKiBNYXBwaW5nIGJldHdlZW4gZGVzdGluYXRpb24gZXZlbnQgbGluZXMgYW5kIHBoeXNpY2FsIGRldmljZSBhZGRyZXNzICovCitzdGF0aWMgY29uc3QgZG1hX2FkZHJfdCBkbWE0MF90eF9tYXBbREI1NTAwX0RNQV9OUl9ERVZdID0geworCVtEQjU1MDBfRE1BX0RFVjI0X1NETU1DMF9UWF0gPSAtMSwKK307CisKK3N0YXRpYyBpbnQgZG1hNDBfbWVtY3B5X2V2ZW50W10gPSB7CisJREI1NTAwX0RNQV9NRU1DUFlfVFhfMSwKKwlEQjU1MDBfRE1BX01FTUNQWV9UWF8yLAorCURCNTUwMF9ETUFfTUVNQ1BZX1RYXzMsCisJREI1NTAwX0RNQV9NRU1DUFlfVFhfNCwKKwlEQjU1MDBfRE1BX01FTUNQWV9UWF81LAorfTsKKworc3RhdGljIHN0cnVjdCBzdGVkbWE0MF9wbGF0Zm9ybV9kYXRhIGRtYTQwX3BsYXRfZGF0YSA9IHsKKwkuZGV2X2xlbgkJPSBBUlJBWV9TSVpFKGRtYTQwX3J4X21hcCksCisJLmRldl9yeAkJCT0gZG1hNDBfcnhfbWFwLAorCS5kZXZfdHgJCQk9IGRtYTQwX3R4X21hcCwKKwkubWVtY3B5CQkJPSBkbWE0MF9tZW1jcHlfZXZlbnQsCisJLm1lbWNweV9sZW4JCT0gQVJSQVlfU0laRShkbWE0MF9tZW1jcHlfZXZlbnQpLAorCS5tZW1jcHlfY29uZl9waHkJPSAmZG1hNDBfbWVtY3B5X2NvbmZfcGh5LAorCS5tZW1jcHlfY29uZl9sb2cJPSAmZG1hNDBfbWVtY3B5X2NvbmZfbG9nLAorCS5kaXNhYmxlZF9jaGFubmVscwk9IHstMX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBkbWE0MF9kZXZpY2UgPSB7CisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmZG1hNDBfcGxhdF9kYXRhLAorCX0sCisJLm5hbWUJCT0gImRtYTQwIiwKKwkuaWQJCT0gMCwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoZG1hNDBfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBkbWE0MF9yZXNvdXJjZXMKK307CisKK3ZvaWQgX19pbml0IGRiNTUwMF9kbWFfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmRtYTQwX2RldmljZSk7CisJaWYgKHJldCkKKwkJZGV2X2VycigmZG1hNDBfZGV2aWNlLmRldiwgInVuYWJsZSB0byByZWdpc3RlciBkZXZpY2U6ICVkXG4iLCByZXQpOworCit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXV4NTAwL2hlYWRzbXAuUyBiL2FyY2gvYXJtL21hY2gtdXg1MDAvaGVhZHNtcC5TCmluZGV4IGE2YmUyY2QuLjY0ZmE0NTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdXg1MDAvaGVhZHNtcC5TCisrKyBiL2FyY2gvYXJtL21hY2gtdXg1MDAvaGVhZHNtcC5TCkBAIC0yMyw3ICsyMyw2IEBACiAJbGRtaWEJcjQsIHtyNSwgcjZ9CiAJc3ViCXI0LCByNCwgcjUKIAlhZGQJcjYsIHI2LCByNAotCWRzYgogcGVuOglsZHIJcjcsIFtyNl0KIAljbXAJcjcsIHIwCiAJYm5lCXBlbgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11eDUwMC9ob3RwbHVnLmMgYi9hcmNoL2FybS9tYWNoLXV4NTAwL2hvdHBsdWcuYwppbmRleCBiNzgyYTAzLi5kZDgwMzdlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXV4NTAwL2hvdHBsdWcuYworKysgYi9hcmNoL2FybS9tYWNoLXV4NTAwL2hvdHBsdWcuYwpAQCAtMTEsMTQgKzExLDExIEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLSNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CiAKICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogCiBleHRlcm4gdm9sYXRpbGUgaW50IHBlbl9yZWxlYXNlOwogCi1zdGF0aWMgREVDTEFSRV9DT01QTEVUSU9OKGNwdV9raWxsZWQpOwotCiBzdGF0aWMgaW5saW5lIHZvaWQgcGxhdGZvcm1fZG9fbG93cG93ZXIodW5zaWduZWQgaW50IGNwdSkKIHsKIAlmbHVzaF9jYWNoZV9hbGwoKTsKQEAgLTM4LDcgKzM1LDcgQEAKIAogaW50IHBsYXRmb3JtX2NwdV9raWxsKHVuc2lnbmVkIGludCBjcHUpCiB7Ci0JcmV0dXJuIHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmY3B1X2tpbGxlZCwgNTAwMCk7CisJcmV0dXJuIDE7CiB9CiAKIC8qCkBAIC00OCwxOSArNDUsNiBAQAogICovCiB2b2lkIHBsYXRmb3JtX2NwdV9kaWUodW5zaWduZWQgaW50IGNwdSkKIHsKLSNpZmRlZiBERUJVRwotCXVuc2lnbmVkIGludCB0aGlzX2NwdSA9IGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpOwotCi0JaWYgKGNwdSAhPSB0aGlzX2NwdSkgewotCQlwcmludGsoS0VSTl9DUklUICJFZWshIHBsYXRmb3JtX2NwdV9kaWUgcnVubmluZyBvbiAldSwgc2hvdWxkIGJlICV1XG4iLAotCQkJICAgdGhpc19jcHUsIGNwdSk7Ci0JCUJVRygpOwotCX0KLSNlbmRpZgotCi0JcHJpbnRrKEtFUk5fTk9USUNFICJDUFUldTogc2h1dGRvd25cbiIsIGNwdSk7Ci0JY29tcGxldGUoJmNwdV9raWxsZWQpOwotCiAJLyogZGlyZWN0bHkgZW50ZXIgbG93IHBvd2VyIHN0YXRlLCBza2lwcGluZyBzZWN1cmUgcmVnaXN0ZXJzICovCiAJcGxhdGZvcm1fZG9fbG93cG93ZXIoY3B1KTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdXg1MDAvaW5jbHVkZS9tYWNoL2RiNTUwMC1yZWdzLmggYi9hcmNoL2FybS9tYWNoLXV4NTAwL2luY2x1ZGUvbWFjaC9kYjU1MDAtcmVncy5oCmluZGV4IDNlYWZjMGUuLmJkODhjMWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdXg1MDAvaW5jbHVkZS9tYWNoL2RiNTUwMC1yZWdzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9pbmNsdWRlL21hY2gvZGI1NTAwLXJlZ3MuaApAQCAtMTE0LDQgKzExNCw4IEBACiAjZGVmaW5lIFU1NTAwX01CT1gyX0xPQ0FMX1NUQVJUCShVNTUwMF9NQk9YX0JBU0UgKyAweDIwKQogI2RlZmluZSBVNTUwMF9NQk9YMl9MT0NBTF9FTkQJKFU1NTAwX01CT1hfQkFTRSArIDB4M0YpCiAKKyNkZWZpbmUgVTU1MDBfRVNSQU1fQkFTRQkJMHg0MDAwMDAwMAorI2RlZmluZSBVNTUwMF9FU1JBTV9ETUFfTENQQV9PRkZTRVQJMHgxMDAwMAorI2RlZmluZSBVNTUwMF9ETUFfTENQQV9CQVNFICAgIChVNTUwMF9FU1JBTV9CQVNFICsgVTU1MDBfRVNSQU1fRE1BX0xDUEFfT0ZGU0VUKQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdXg1MDAvaW5jbHVkZS9tYWNoL2RiODUwMC1yZWdzLmggYi9hcmNoL2FybS9tYWNoLXV4NTAwL2luY2x1ZGUvbWFjaC9kYjg1MDAtcmVncy5oCmluZGV4IGYwN2QwOTguLjBmZWZiMzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdXg1MDAvaW5jbHVkZS9tYWNoL2RiODUwMC1yZWdzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9pbmNsdWRlL21hY2gvZGI4NTAwLXJlZ3MuaApAQCAtOTIsNyArOTIsOCBAQAogI2RlZmluZSBVODUwMF9TQ1JfQkFTRQkJKFU4NTAwX1BFUjRfQkFTRSArIDB4MDUwMDApCiAjZGVmaW5lIFU4NTAwX0RNQ19CQVNFCQkoVTg1MDBfUEVSNF9CQVNFICsgMHgwNjAwMCkKICNkZWZpbmUgVTg1MDBfUFJDTVVfQkFTRQkoVTg1MDBfUEVSNF9CQVNFICsgMHgwNzAwMCkKLSNkZWZpbmUgVTg1MDBfUFJDTVVfVENETV9CQVNFCShVODUwMF9QRVI0X0JBU0UgKyAweDBmMDAwKQorI2RlZmluZSBVODUwMF9QUkNNVV9UQ0RNX0JBU0VfVjEgKFU4NTAwX1BFUjRfQkFTRSArIDB4MGYwMDApCisjZGVmaW5lIFU4NTAwX1BSQ01VX1RDRE1fQkFTRSAgIChVODUwMF9QRVI0X0JBU0UgKyAweDY4MDAwKQogCiAvKiBwZXIzIGJhc2UgYWRkcmVzc2VzICovCiAjZGVmaW5lIFU4NTAwX0ZTTUNfQkFTRQkJKFU4NTAwX1BFUjNfQkFTRSArIDB4MDAwMCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdXg1MDAvaW5jbHVkZS9tYWNoL2RldmljZXMuaCBiL2FyY2gvYXJtL21hY2gtdXg1MDAvaW5jbHVkZS9tYWNoL2RldmljZXMuaAppbmRleCBiOTFhNGQxLi4wMjBiNjM2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXV4NTAwL2luY2x1ZGUvbWFjaC9kZXZpY2VzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9pbmNsdWRlL21hY2gvZGV2aWNlcy5oCkBAIC0xNCwyNyArMTQsMTAgQEAKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHU4NTAwX2dwaW9fZGV2c1tdOwogCiBleHRlcm4gc3RydWN0IGFtYmFfZGV2aWNlIHV4NTAwX3BsMDMxX2RldmljZTsKLWV4dGVybiBzdHJ1Y3QgYW1iYV9kZXZpY2UgdTg1MDBfc3NwMF9kZXZpY2U7Ci1leHRlcm4gc3RydWN0IGFtYmFfZGV2aWNlIHV4NTAwX3VhcnQwX2RldmljZTsKLWV4dGVybiBzdHJ1Y3QgYW1iYV9kZXZpY2UgdXg1MDBfdWFydDFfZGV2aWNlOwotZXh0ZXJuIHN0cnVjdCBhbWJhX2RldmljZSB1eDUwMF91YXJ0Ml9kZXZpY2U7CiAKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHV4NTAwX2kyYzFfZGV2aWNlOwotZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdXg1MDBfaTJjMl9kZXZpY2U7Ci1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSB1eDUwMF9pMmMzX2RldmljZTsKLQotZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdTg1MDBfaTJjMF9kZXZpY2U7Ci1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSB1ODUwMF9pMmM0X2RldmljZTsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHU4NTAwX2RtYTQwX2RldmljZTsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHV4NTAwX3NrZV9rZXlwYWRfZGV2aWNlOwogCi1leHRlcm4gc3RydWN0IGFtYmFfZGV2aWNlIHU4NTAwX3NkaTBfZGV2aWNlOwotZXh0ZXJuIHN0cnVjdCBhbWJhX2RldmljZSB1ODUwMF9zZGkxX2RldmljZTsKLWV4dGVybiBzdHJ1Y3QgYW1iYV9kZXZpY2UgdTg1MDBfc2RpMl9kZXZpY2U7Ci1leHRlcm4gc3RydWN0IGFtYmFfZGV2aWNlIHU4NTAwX3NkaTNfZGV2aWNlOwotZXh0ZXJuIHN0cnVjdCBhbWJhX2RldmljZSB1ODUwMF9zZGk0X2RldmljZTsKLWV4dGVybiBzdHJ1Y3QgYW1iYV9kZXZpY2UgdTg1MDBfc2RpNV9kZXZpY2U7Ci0KIHZvaWQgZG1hNDBfdTg1MDBlZF9maXh1cCh2b2lkKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXV4NTAwL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUwppbmRleCA2MGVhODhkLi5hMzdmNTg1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXV4NTAwL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCisrKyBiL2FyY2gvYXJtL21hY2gtdXg1MDAvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKQEAgLTExLDcgKzExLDggQEAKICAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICAqLwogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vaGFyZHdhcmUvZ2ljLmg+CisjZGVmaW5lIEhBVkVfR0VUX0lSUU5SX1BSRUFNQkxFCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2VudHJ5LW1hY3JvLWdpYy5TPgogCiAJCS5tYWNybwlkaXNhYmxlX2ZpcQogCQkuZW5kbQpAQCAtMjIsNjggKzIzLDMgQEAKIAogCQkubWFjcm8gIGFyY2hfcmV0X3RvX3VzZXIsIHRtcDEsIHRtcDIKIAkJLmVuZG0KLQotCQkvKgotCQkgKiBUaGUgaW50ZXJydXB0IG51bWJlcmluZyBzY2hlbWUgaXMgZGVmaW5lZCBpbiB0aGUKLQkJICogaW50ZXJydXB0IGNvbnRyb2xsZXIgc3BlYy4gIFRvIHdpdDoKLQkJICoKLQkJICogSW50ZXJydXB0cyAwLTE1IGFyZSBJUEkKLQkJICogMTYtMjggYXJlIHJlc2VydmVkCi0JCSAqIDI5LTMxIGFyZSBsb2NhbC4gIFdlIGFsbG93IDMwIHRvIGJlIHVzZWQgZm9yIHRoZSB3YXRjaGRvZy4KLQkJICogMzItMTAyMCBhcmUgZ2xvYmFsCi0JCSAqIDEwMjEtMTAyMiBhcmUgcmVzZXJ2ZWQKLQkJICogMTAyMyBpcyAic3B1cmlvdXMiIChubyBpbnRlcnJ1cHQpCi0JCSAqCi0JCSAqIEZvciBub3csIHdlIGlnbm9yZSBhbGwgbG9jYWwgaW50ZXJydXB0cyBzbyBvbmx5IHJldHVybiBhbgotCQkgKiBpbnRlcnJ1cHQgaWYgaXQncyBiZXR3ZWVuIDMwIGFuZCAxMDIwLiBUaGUgdGVzdF9mb3JfaXBpCi0JCSAqIHJvdXRpbmUgYmVsb3cgd2lsbCBwaWNrIHVwIG9uIElQSXMuCi0JCSAqCi0JCSAqIEEgc2ltcGxlIHJlYWQgZnJvbSB0aGUgY29udHJvbGxlciB3aWxsIHRlbGwgdXMgdGhlIG51bWJlcgotCQkgKiBvZiB0aGUgaGlnaGVzdCBwcmlvcml0eSBlbmFibGVkIGludGVycnVwdC4gV2UgdGhlbiBqdXN0Ci0JCSAqIG5lZWQgdG8gY2hlY2sgd2hldGhlciBpdCBpcyBpbiB0aGUgdmFsaWQgcmFuZ2UgZm9yIGFuCi0JCSAqIElSUSAoMzAtMTAyMCBpbmNsdXNpdmUpLgotCQkgKi8KLQotCQkubWFjcm8gIGdldF9pcnFucl9hbmRfYmFzZSwgaXJxbnIsIGlycXN0YXQsIGJhc2UsIHRtcAotCi0JCS8qIGJpdHMgMTItMTAgPSBzcmMgQ1BVLCA5LTAgPSBpbnQgIyAqLwotCQlsZHIgICAgIFxpcnFzdGF0LCBbXGJhc2UsICNHSUNfQ1BVX0lOVEFDS10KLQotCQlsZHIJXHRtcCwgPTEwMjEKLQotCQliaWMgICAgIFxpcnFuciwgXGlycXN0YXQsICMweDFjMDAKLQotCQljbXAgICAgIFxpcnFuciwgIzI5Ci0JCWNtcGNjCVxpcnFuciwgXGlycW5yCi0JCWNtcG5lCVxpcnFuciwgXHRtcAotCQljbXBjcwlcaXJxbnIsIFxpcnFucgotCi0JCS5lbmRtCi0KLQkJLyogV2UgYXNzdW1lIHRoYXQgaXJxc3RhdCAodGhlIHJhdyB2YWx1ZSBvZiB0aGUgSVJRCi0JCSAqIGFja25vd2xlZGdlIHJlZ2lzdGVyKSBpcyBwcmVzZXJ2ZWQgZnJvbSB0aGUgbWFjcm8gYWJvdmUuCi0JCSAqIElmIHRoZXJlIGlzIGFuIElQSSwgd2UgaW1tZWRpYXRlbHkgc2lnbmFsIGVuZCBvZgotCQkgKiBpbnRlcnJ1cHQgb24gdGhlIGNvbnRyb2xsZXIsIHNpbmNlIHRoaXMgcmVxdWlyZXMgdGhlCi0JCSAqIG9yaWdpbmFsIGlycXN0YXQgdmFsdWUgd2hpY2ggd2Ugd29uJ3QgZWFzaWx5IGJlIGFibGUKLQkJICogdG8gcmVjcmVhdGUgbGF0ZXIuCi0JCSAqLwotCi0JCS5tYWNybyB0ZXN0X2Zvcl9pcGksIGlycW5yLCBpcnFzdGF0LCBiYXNlLCB0bXAKLQkJYmljCVxpcnFuciwgXGlycXN0YXQsICMweDFjMDAKLQkJY21wCVxpcnFuciwgIzE2Ci0JCXN0cmNjCVxpcnFzdGF0LCBbXGJhc2UsICNHSUNfQ1BVX0VPSV0KLQkJY21wY3MJXGlycW5yLCBcaXJxbnIKLQkJLmVuZG0KLQotCQkvKiBBcyBhYm92ZSwgdGhpcyBhc3N1bWVzIHRoYXQgaXJxc3RhdCBhbmQgYmFzZQotCQkgKiBhcmUgcHJlc2VydmVkLi4KLQkJICovCi0KLQkJLm1hY3JvIHRlc3RfZm9yX2x0aXJxLCBpcnFuciwgaXJxc3RhdCwgYmFzZSwgdG1wCi0JCWJpYwlcaXJxbnIsIFxpcnFzdGF0LCAjMHgxYzAwCi0JCW1vdiAJXHRtcCwgIzAKLQkJY21wCVxpcnFuciwgIzI5Ci0JCW1vdmVxCVx0bXAsICMxCi0JCXN0cmVxCVxpcnFzdGF0LCBbXGJhc2UsICNHSUNfQ1BVX0VPSV0KLQkJY21wCVx0bXAsICMwCi0JCS5lbmRtCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXV4NTAwL2luY2x1ZGUvbWFjaC9ncGlvLmggYi9hcmNoL2FybS9tYWNoLXV4NTAwL2luY2x1ZGUvbWFjaC9ncGlvLmgKaW5kZXggZDU0OGE2Mi4uM2M0Y2QzMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC11eDUwMC9pbmNsdWRlL21hY2gvZ3Bpby5oCisrKyBiL2FyY2gvYXJtL21hY2gtdXg1MDAvaW5jbHVkZS9tYWNoL2dwaW8uaApAQCAtOSw0MiArOSw0IEBACiAKICNpbmNsdWRlIDxwbGF0L2dwaW8uaD4KIAotI2RlZmluZSBfX0dQSU9fUkVTT1VSQ0Uoc29jLCBibG9jaykJCQkJCVwKLQl7CQkJCQkJCQlcCi0JCS5zdGFydAk9IHNvYyMjX0dQSU9CQU5LIyNibG9jayMjX0JBU0UsCQkJXAotCQkuZW5kCT0gc29jIyNfR1BJT0JBTksjI2Jsb2NrIyNfQkFTRSArIDEyNywJCVwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCQkJCVwKLQl9LAkJCQkJCQkJXAotCXsJCQkJCQkJCVwKLQkJLnN0YXJ0CT0gSVJRX0dQSU8jI2Jsb2NrLAkJCQlcCi0JCS5lbmQJPSBJUlFfR1BJTyMjYmxvY2ssCQkJCVwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCQkJCVwKLQl9Ci0KLSNkZWZpbmUgX19HUElPX0RFVklDRShzb2MsIGJsb2NrKQkJCQkJXAotCXsJCQkJCQkJCVwKLQkJLm5hbWUJCT0gImdwaW8iLAkJCQlcCi0JCS5pZAkJPSBibG9jaywJCQkJXAotCQkubnVtX3Jlc291cmNlcwk9IDIsCQkJCQlcCi0JCS5yZXNvdXJjZQk9ICZzb2MjI19ncGlvX3Jlc291cmNlc1tibG9jayAqIDJdLAlcCi0JCS5kZXYgPSB7CQkJCQkJXAotCQkJLnBsYXRmb3JtX2RhdGEgPSAmc29jIyNfZ3Bpb19kYXRhW2Jsb2NrXSwJXAotCQl9LAkJCQkJCQlcCi0JfQotCi0jZGVmaW5lIEdQSU9fREFUQShfbmFtZSwgZmlyc3QpCQkJCQkJXAotCXsJCQkJCQkJCVwKLQkJLm5hbWUJCT0gX25hbWUsCQkJCVwKLQkJLmZpcnN0X2dwaW8JPSBmaXJzdCwJCQkJXAotCQkuZmlyc3RfaXJxCT0gTk9NQURJS19HUElPX1RPX0lSUShmaXJzdCksCQlcCi0JfQotCi0jaWZkZWYgQ09ORklHX1VYNTAwX1NPQ19EQjg1MDAKLSNkZWZpbmUgR1BJT19SRVNPVVJDRShibG9jaykJX19HUElPX1JFU09VUkNFKFU4NTAwLCBibG9jaykKLSNkZWZpbmUgR1BJT19ERVZJQ0UoYmxvY2spCV9fR1BJT19ERVZJQ0UodTg1MDAsIGJsb2NrKQotI2VsaWYgZGVmaW5lZChDT05GSUdfVVg1MDBfU09DX0RCNTUwMCkKLSNkZWZpbmUgR1BJT19SRVNPVVJDRShibG9jaykJX19HUElPX1JFU09VUkNFKFU1NTAwLCBibG9jaykKLSNkZWZpbmUgR1BJT19ERVZJQ0UoYmxvY2spCV9fR1BJT19ERVZJQ0UodTU1MDAsIGJsb2NrKQotI2VuZGlmCi0KICNlbmRpZiAvKiBfX0FTTV9BUkNIX0dQSU9fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11eDUwMC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaCBiL2FyY2gvYXJtL21hY2gtdXg1MDAvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKaW5kZXggMzJlODgzYS4uNjI5NWNjNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC11eDUwMC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaAorKysgYi9hcmNoL2FybS9tYWNoLXV4NTAwL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCkBAIC0xNDIsNiArMTQyLDggQEAKICNlbmRpZgogfQogCisjZGVmaW5lIEFSUkFZX0FORF9TSVpFKHgpCSh4KSwgQVJSQVlfU0laRSh4KQorCiAjZW5kaWYKIAogI2VuZGlmCQkJCS8qIF9fTUFDSF9IQVJEV0FSRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXV4NTAwL2luY2x1ZGUvbWFjaC9pcnFzLWJvYXJkLW1vcDUwMC5oIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9pbmNsdWRlL21hY2gvaXJxcy1ib2FyZC1tb3A1MDAuaAppbmRleCBjY2E0ZjcwLi43Y2RlYjJhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXV4NTAwL2luY2x1ZGUvbWFjaC9pcnFzLWJvYXJkLW1vcDUwMC5oCisrKyBiL2FyY2gvYXJtL21hY2gtdXg1MDAvaW5jbHVkZS9tYWNoL2lycXMtYm9hcmQtbW9wNTAwLmgKQEAgLTgsMTIgKzgsMzYgQEAKICNpZm5kZWYgX19NQUNIX0lSUVNfQk9BUkRfTU9QNTAwX0gKICNkZWZpbmUgX19NQUNIX0lSUVNfQk9BUkRfTU9QNTAwX0gKIAotI2RlZmluZSBBQjg1MDBfTlJfSVJRUwkJCTEwNAorLyogTnVtYmVyIG9mIEFCODUwMCBpcnFzIGlzIHRha2VuIGZyb20gaGVhZGVyIGZpbGUgKi8KKyNpbmNsdWRlIDxsaW51eC9tZmQvYWI4NTAwLmg+CiAKICNkZWZpbmUgTU9QNTAwX0FCODUwMF9JUlFfQkFTRQkJSVJRX0JPQVJEX1NUQVJUCiAjZGVmaW5lIE1PUDUwMF9BQjg1MDBfSVJRX0VORAkJKE1PUDUwMF9BQjg1MDBfSVJRX0JBU0UgXAogCQkJCQkgKyBBQjg1MDBfTlJfSVJRUykKLSNkZWZpbmUgTU9QNTAwX0lSUV9FTkQJCQlNT1A1MDBfQUI4NTAwX0lSUV9FTkQKKworLyogVEMzNTg5MiAqLworI2RlZmluZSBUQzM1ODkyX05SX0lOVEVSTkFMX0lSUVMJOAorI2RlZmluZSBUQzM1ODkyX0lOVF9HUElPKHgpCQkoVEMzNTg5Ml9OUl9JTlRFUk5BTF9JUlFTICsgKHgpKQorI2RlZmluZSBUQzM1ODkyX05SX0dQSU9TCQkyNAorI2RlZmluZSBUQzM1ODkyX05SX0lSUVMJCQlUQzM1ODkyX0lOVF9HUElPKFRDMzU4OTJfTlJfR1BJT1MpCisKKyNkZWZpbmUgTU9QNTAwX0VHUElPX05SX0lSUVMJCVRDMzU4OTJfTlJfSVJRUworCisjZGVmaW5lIE1PUDUwMF9FR1BJT19JUlFfQkFTRQkJTU9QNTAwX0FCODUwMF9JUlFfRU5ECisjZGVmaW5lIE1PUDUwMF9FR1BJT19JUlFfRU5ECQkoTU9QNTAwX0VHUElPX0lSUV9CQVNFIFwKKwkJCQkJICsgTU9QNTAwX0VHUElPX05SX0lSUVMpCisvKiBTVE1QRTE2MDEgaXJxcyAqLworI2RlZmluZSBTVE1QRV9OUl9JTlRFUk5BTF9JUlFTICAgICAgICAgIDkKKyNkZWZpbmUgU1RNUEVfSU5UX0dQSU8oeCkgICAgICAgICAgICAgICAoU1RNUEVfTlJfSU5URVJOQUxfSVJRUyArICh4KSkKKyNkZWZpbmUgU1RNUEVfTlJfR1BJT1MgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBTVE1QRV9OUl9JUlFTICAgICAgICAgICAgICAgICAgIFNUTVBFX0lOVF9HUElPKFNUTVBFX05SX0dQSU9TKQorCisjZGVmaW5lIE1PUDUwMF9TVE1QRTE2MDFfSVJRQkFTRSAgICAgICAgTU9QNTAwX0VHUElPX0lSUV9FTkQKKyNkZWZpbmUgTU9QNTAwX1NUTVBFMTYwMV9JUlEoeCkgICAgICAgICAoTU9QNTAwX1NUTVBFMTYwMV9JUlFCQVNFICsgKHgpKQorCisjZGVmaW5lIE1PUDUwMF9OUl9JUlFTICAgICAgICAgIE1PUDUwMF9TVE1QRTE2MDFfSVJRKFNUTVBFX05SX0lOVEVSTkFMX0lSUVMpCisKKyNkZWZpbmUgTU9QNTAwX0lSUV9FTkQgICAgICAgICAgTU9QNTAwX05SX0lSUVMKIAogI2lmIE1PUDUwMF9JUlFfRU5EID4gSVJRX0JPQVJEX0VORAogI3VuZGVmIElSUV9CT0FSRF9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdXg1MDAvaW5jbHVkZS9tYWNoL2lycXMuaCBiL2FyY2gvYXJtL21hY2gtdXg1MDAvaW5jbHVkZS9tYWNoL2lycXMuaAppbmRleCA2OTNhYTU3Li44ODBhZTQ1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXV4NTAwL2luY2x1ZGUvbWFjaC9pcnFzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9pbmNsdWRlL21hY2gvaXJxcy5oCkBAIC0yMSw1MCArMjEsNiBAQAogCiAvKiBJbnRlcnJ1cHQgbnVtYmVycyBnZW5lcmljIGZvciBzaGFyZWQgcGVyaXBoZXJhbCAqLwogI2RlZmluZSBJUlFfTVRVMAkJKElSUV9TSFBJX1NUQVJUICsgNCkKLSNkZWZpbmUgSVJRX1NQSTIJCShJUlFfU0hQSV9TVEFSVCArIDYpCi0jZGVmaW5lIElSUV9TUEkwCQkoSVJRX1NIUElfU1RBUlQgKyA4KQotI2RlZmluZSBJUlFfVUFSVDAJCShJUlFfU0hQSV9TVEFSVCArIDExKQotI2RlZmluZSBJUlFfSTJDMwkJKElSUV9TSFBJX1NUQVJUICsgMTIpCi0jZGVmaW5lIElSUV9TU1AwCQkoSVJRX1NIUElfU1RBUlQgKyAxNCkKLSNkZWZpbmUgSVJRX01UVTEJCShJUlFfU0hQSV9TVEFSVCArIDE3KQotI2RlZmluZSBJUlFfUlRDX1JUVAkJKElSUV9TSFBJX1NUQVJUICsgMTgpCi0jZGVmaW5lIElSUV9VQVJUMQkJKElSUV9TSFBJX1NUQVJUICsgMTkpCi0jZGVmaW5lIElSUV9JMkMwCQkoSVJRX1NIUElfU1RBUlQgKyAyMSkKLSNkZWZpbmUgSVJRX0kyQzEJCShJUlFfU0hQSV9TVEFSVCArIDIyKQotI2RlZmluZSBJUlFfVVNCT1RHCQkoSVJRX1NIUElfU1RBUlQgKyAyMykKLSNkZWZpbmUgSVJRX0RNQQkJCShJUlFfU0hQSV9TVEFSVCArIDI1KQotI2RlZmluZSBJUlFfVUFSVDIJCShJUlFfU0hQSV9TVEFSVCArIDI2KQotI2RlZmluZSBJUlFfSFNJUl9FWENFUAkJKElSUV9TSFBJX1NUQVJUICsgMjkpCi0jZGVmaW5lIElSUV9NU1AwCQkoSVJRX1NIUElfU1RBUlQgKyAzMSkKLSNkZWZpbmUgSVJRX0hTSVJfQ0gwX09WUlJVTgkoSVJRX1NIUElfU1RBUlQgKyAzMikKLSNkZWZpbmUgSVJRX0hTSVJfQ0gxX09WUlJVTgkoSVJRX1NIUElfU1RBUlQgKyAzMykKLSNkZWZpbmUgSVJRX0hTSVJfQ0gyX09WUlJVTgkoSVJRX1NIUElfU1RBUlQgKyAzNCkKLSNkZWZpbmUgSVJRX0hTSVJfQ0gzX09WUlJVTgkoSVJRX1NIUElfU1RBUlQgKyAzNSkKLSNkZWZpbmUgSVJRX0FCODUwMAkJKElSUV9TSFBJX1NUQVJUICsgNDApCi0jZGVmaW5lIElSUV9QUkNNVSAgICAgICAgICAgICAgIChJUlFfU0hQSV9TVEFSVCArIDQ3KQotI2RlZmluZSBJUlFfRElTUAkJKElSUV9TSFBJX1NUQVJUICsgNDgpCi0jZGVmaW5lIElSUV9TaVBJMwkJKElSUV9TSFBJX1NUQVJUICsgNDkpCi0jZGVmaW5lIElSUV9JMkM0CQkoSVJRX1NIUElfU1RBUlQgKyA1MSkKLSNkZWZpbmUgSVJRX1NTUDEJCShJUlFfU0hQSV9TVEFSVCArIDUyKQotI2RlZmluZSBJUlFfSTJDMgkJKElSUV9TSFBJX1NUQVJUICsgNTUpCi0jZGVmaW5lIElSUV9TRE1NQzAJCShJUlFfU0hQSV9TVEFSVCArIDYwKQotI2RlZmluZSBJUlFfTVNQMQkJKElSUV9TSFBJX1NUQVJUICsgNjIpCi0jZGVmaW5lIElSUV9TUEkxCQkoSVJRX1NIUElfU1RBUlQgKyA5NikKLSNkZWZpbmUgSVJRX01TUDIJCShJUlFfU0hQSV9TVEFSVCArIDk4KQotI2RlZmluZSBJUlFfU0RNTUM0CQkoSVJRX1NIUElfU1RBUlQgKyA5OSkKLSNkZWZpbmUgSVJRX0hTSVJEMAkJKElSUV9TSFBJX1NUQVJUICsgMTA0KQotI2RlZmluZSBJUlFfSFNJUkQxCQkoSVJRX1NIUElfU1RBUlQgKyAxMDUpCi0jZGVmaW5lIElSUV9IU0lURDAJCShJUlFfU0hQSV9TVEFSVCArIDEwNikKLSNkZWZpbmUgSVJRX0hTSVREMQkJKElSUV9TSFBJX1NUQVJUICsgMTA3KQotI2RlZmluZSBJUlFfR1BJTzAJCShJUlFfU0hQSV9TVEFSVCArIDExOSkKLSNkZWZpbmUgSVJRX0dQSU8xCQkoSVJRX1NIUElfU1RBUlQgKyAxMjApCi0jZGVmaW5lIElSUV9HUElPMgkJKElSUV9TSFBJX1NUQVJUICsgMTIxKQotI2RlZmluZSBJUlFfR1BJTzMJCShJUlFfU0hQSV9TVEFSVCArIDEyMikKLSNkZWZpbmUgSVJRX0dQSU80CQkoSVJRX1NIUElfU1RBUlQgKyAxMjMpCi0jZGVmaW5lIElSUV9HUElPNQkJKElSUV9TSFBJX1NUQVJUICsgMTI0KQotI2RlZmluZSBJUlFfR1BJTzYJCShJUlFfU0hQSV9TVEFSVCArIDEyNSkKLSNkZWZpbmUgSVJRX0dQSU83CQkoSVJRX1NIUElfU1RBUlQgKyAxMjYpCi0jZGVmaW5lIElSUV9HUElPOAkJKElSUV9TSFBJX1NUQVJUICsgMTI3KQogCiAvKiBUaGVyZSBhcmUgMTI4IHNoYXJlZCBwZXJpcGhlcmFsIGludGVycnVwdHMgYXNzaWduZWQgdG8KICAqIElOVElEWzE2MDozMl0uIFRoZSBmaXJzdCAzMiBpbnRlcnJ1cHRzIGFyZSByZXNlcnZlZC4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdXg1MDAvaW5jbHVkZS9tYWNoL21ib3guaCBiL2FyY2gvYXJtL21hY2gtdXg1MDAvaW5jbHVkZS9tYWNoL21ib3gtZGI1NTAwLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtdXg1MDAvaW5jbHVkZS9tYWNoL21ib3guaApyZW5hbWUgdG8gYXJjaC9hcm0vbWFjaC11eDUwMC9pbmNsdWRlL21hY2gvbWJveC1kYjU1MDAuaApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11eDUwMC9pbmNsdWRlL21hY2gvcHJjbXUtZGVmcy5oIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9pbmNsdWRlL21hY2gvcHJjbXUtZGVmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0OGJhNjQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXV4NTAwL2luY2x1ZGUvbWFjaC9wcmNtdS1kZWZzLmgKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgU1RNaWNyb2VsZWN0cm9uaWNzIDIwMDkKKyAqIENvcHlyaWdodCAoQykgU1QtRXJpY3Nzb24gU0EgMjAxMAorICoKKyAqIEF1dGhvcjogU3VuZGFyIEl5ZXIgPHN1bmRhci5peWVyQHN0ZXJpY3Nzb24uY29tPgorICogQXV0aG9yOiBNYXJ0aW4gUGVyc3NvbiA8bWFydGluLnBlcnNzb25Ac3Rlcmljc3Nvbi5jb20+CisgKgorICogTGljZW5zZSBUZXJtczogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdjIKKyAqCisgKiBQUkNNIFVuaXQgZGVmaW5pdGlvbnMKKyAqLworCisjaWZuZGVmIF9fTUFDSF9QUkNNVV9ERUZTX0gKKyNkZWZpbmUgX19NQUNIX1BSQ01VX0RFRlNfSAorCitlbnVtIHByY211X2NwdV9vcHAgeworCUNQVV9PUFBfSU5JVAkgID0gMHgwMCwKKwlDUFVfT1BQX05PX0NIQU5HRSA9IDB4MDEsCisJQ1BVX09QUF8xMDAJICA9IDB4MDIsCisJQ1BVX09QUF81MAkgID0gMHgwMywKKwlDUFVfT1BQX01BWAkgID0gMHgwNCwKKwlDUFVfT1BQX0VYVF9DTEsJICA9IDB4MDcKK307CitlbnVtIHByY211X2FwZV9vcHAgeworCUFQRV9PUFBfTk9fQ0hBTkdFID0gMHgwMCwKKwlBUEVfT1BQXzEwMAkgID0gMHgwMiwKKwlBUEVfT1BQXzUwCSAgPSAweDAzLAorfTsKKworI2VuZGlmIC8qIF9fTUFDSF9QUkNNVV9ERUZTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdXg1MDAvaW5jbHVkZS9tYWNoL3ByY211LXJlZ3MuaCBiL2FyY2gvYXJtL21hY2gtdXg1MDAvaW5jbHVkZS9tYWNoL3ByY211LXJlZ3MuaAppbmRleCA4ODg1ZjM5Li40NTU0NjdlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXV4NTAwL2luY2x1ZGUvbWFjaC9wcmNtdS1yZWdzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9pbmNsdWRlL21hY2gvcHJjbXUtcmVncy5oCkBAIC0xLDEwICsxLDE1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA5IFNULUVyaWNzc29uIFNBCisgKiBDb3B5cmlnaHQgKEMpIFNUTWljcm9lbGVjdHJvbmljcyAyMDA5CisgKiBDb3B5cmlnaHQgKEMpIFNULUVyaWNzc29uIFNBIDIwMTAKICAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICogQXV0aG9yOiBLdW1hciBTYW5naHZpIDxrdW1hci5zYW5naHZpQHN0ZXJpY3Nzb24uY29tPgorICogQXV0aG9yOiBTdW5kYXIgSXllciA8c3VuZGFyLml5ZXJAc3Rlcmljc3Nvbi5jb20+CisgKgorICogTGljZW5zZSBUZXJtczogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdjIKKyAqCisgKiBQUkNNIFVuaXQgcmVnaXN0ZXJzCiAgKi8KKwogI2lmbmRlZiBfX01BQ0hfUFJDTVVfUkVHU19ICiAjZGVmaW5lIF9fTUFDSF9QUkNNVV9SRUdTX0gKIApAQCAtODgsNCArOTMsNCBAQAogLyogTWlzY2VsbGFuZW91cyB1bml0IHJlZ2lzdGVycyAqLwogI2RlZmluZSBQUkNNX0RTSV9TV19SRVNFVCAgICAgICAgICAoX1BSQ01VX0JBU0UgKyAweDMyNCkKIAotI2VuZGlmIC8qIF9fTUFDSF9QUkNNVV9fUkVHU19IICovCisjZW5kaWYgLyogX19NQUNIX1BSQ01VX1JFR1NfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11eDUwMC9pbmNsdWRlL21hY2gvcHJjbXUuaCBiL2FyY2gvYXJtL21hY2gtdXg1MDAvaW5jbHVkZS9tYWNoL3ByY211LmgKaW5kZXggNTQ5ODQzZi4uYzQ5ZTQ1NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC11eDUwMC9pbmNsdWRlL21hY2gvcHJjbXUuaAorKysgYi9hcmNoL2FybS9tYWNoLXV4NTAwL2luY2x1ZGUvbWFjaC9wcmNtdS5oCkBAIC0yLDE0ICsyLDI3IEBACiAgKiBDb3B5cmlnaHQgKEMpIFNUTWljcm9lbGVjdHJvbmljcyAyMDA5CiAgKiBDb3B5cmlnaHQgKEMpIFNULUVyaWNzc29uIFNBIDIwMTAKICAqCisgKiBBdXRob3I6IEt1bWFyIFNhbmdodmkgPGt1bWFyLnNhbmdodmlAc3Rlcmljc3Nvbi5jb20+CisgKiBBdXRob3I6IFN1bmRhciBJeWVyIDxzdW5kYXIuaXllckBzdGVyaWNzc29uLmNvbT4KKyAqIEF1dGhvcjogTWF0dGlhcyBOaWxzc29uIDxtYXR0aWFzLmkubmlsc3NvbkBzdGVyaWNzc29uLmNvbT4KKyAqCiAgKiBMaWNlbnNlIFRlcm1zOiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2MgogICoKLSAqIFBSQ01VIGYvdyBBUElzCisgKiBQUkNNIFVuaXQgZi93IEFQSQogICovCiAjaWZuZGVmIF9fTUFDSF9QUkNNVV9ICiAjZGVmaW5lIF9fTUFDSF9QUkNNVV9ICisjaW5jbHVkZSA8bWFjaC9wcmNtdS1kZWZzLmg+CiAKK3ZvaWQgX19pbml0IHByY211X2Vhcmx5X2luaXQodm9pZCk7CiBpbnQgcHJjbXVfYWJiX3JlYWQodTggc2xhdmUsIHU4IHJlZywgdTggKnZhbHVlLCB1OCBzaXplKTsKIGludCBwcmNtdV9hYmJfd3JpdGUodTggc2xhdmUsIHU4IHJlZywgdTggKnZhbHVlLCB1OCBzaXplKTsKK2ludCBwcmNtdV9zZXRfYXBlX29wcChlbnVtIHByY211X2FwZV9vcHAgb3BwKTsKK2ludCBwcmNtdV9zZXRfY3B1X29wcChlbnVtIHByY211X2NwdV9vcHAgb3BwKTsKK2ludCBwcmNtdV9zZXRfYXBlX2NwdV9vcHBzKGVudW0gcHJjbXVfYXBlX29wcCBhcGVfb3BwLAorCQkJICAgZW51bSBwcmNtdV9jcHVfb3BwIGNwdV9vcHApOworaW50IHByY211X2dldF9hcGVfb3BwKHZvaWQpOworaW50IHByY211X2dldF9jcHVfb3BwKHZvaWQpOworYm9vbCBwcmNtdV9oYXNfYXJtX21heG9wcCh2b2lkKTsKIAogI2VuZGlmIC8qIF9fTUFDSF9QUkNNVV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXV4NTAwL2luY2x1ZGUvbWFjaC9zZXR1cC5oIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9pbmNsdWRlL21hY2gvc2V0dXAuaAppbmRleCA1NGJiZTY0Li40Njk4NzdlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXV4NTAwL2luY2x1ZGUvbWFjaC9zZXR1cC5oCisrKyBiL2FyY2gvYXJtL21hY2gtdXg1MDAvaW5jbHVkZS9tYWNoL3NldHVwLmgKQEAgLTE4LDE0ICsxOCwxOSBAQAogZXh0ZXJuIHZvaWQgX19pbml0IHU1NTAwX21hcF9pbyh2b2lkKTsKIGV4dGVybiB2b2lkIF9faW5pdCB1ODUwMF9tYXBfaW8odm9pZCk7CiAKLWV4dGVybiB2b2lkIF9faW5pdCB1eDUwMF9pbml0X2RldmljZXModm9pZCk7CiBleHRlcm4gdm9pZCBfX2luaXQgdTU1MDBfaW5pdF9kZXZpY2VzKHZvaWQpOwogZXh0ZXJuIHZvaWQgX19pbml0IHU4NTAwX2luaXRfZGV2aWNlcyh2b2lkKTsKIAogZXh0ZXJuIHZvaWQgX19pbml0IHV4NTAwX2luaXRfaXJxKHZvaWQpOworCitleHRlcm4gdm9pZCBfX2luaXQgdTU1MDBfc2RpX2luaXQodm9pZCk7CisKK2V4dGVybiB2b2lkIF9faW5pdCBkYjU1MDBfZG1hX2luaXQodm9pZCk7CisKIC8qIFdlIHJlLXVzZSBub21hZGlrX3RpbWVyIGZvciB0aGlzIHBsYXRmb3JtICovCiBleHRlcm4gdm9pZCBubWRrX3RpbWVyX2luaXQodm9pZCk7CiAKK3N0cnVjdCBhbWJhX2RldmljZTsKIGV4dGVybiB2b2lkIF9faW5pdCBhbWJhX2FkZF9kZXZpY2VzKHN0cnVjdCBhbWJhX2RldmljZSAqZGV2c1tdLCBpbnQgbnVtKTsKIAogc3RydWN0IHN5c190aW1lcjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdXg1MDAvaW5jbHVkZS9tYWNoL3NtcC5oIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9pbmNsdWRlL21hY2gvc21wLmgKaW5kZXggMTk3ZTg0MS4uY2EyYjE1YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC11eDUwMC9pbmNsdWRlL21hY2gvc21wLmgKKysrIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9pbmNsdWRlL21hY2gvc21wLmgKQEAgLTEwLDcgKzEwLDYgQEAKICNkZWZpbmUgQVNNQVJNX0FSQ0hfU01QX0gKIAogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9naWMuaD4KLSNpbmNsdWRlIDxhc20vc21wX21waWRyLmg+CiAKIC8qIFRoaXMgaXMgcmVxdWlyZWQgdG8gd2FrZXVwIHRoZSBzZWNvbmRhcnkgY29yZSAqLwogZXh0ZXJuIHZvaWQgdTg1MDBfc2Vjb25kYXJ5X3N0YXJ0dXAodm9pZCk7CkBAIC0xOCw4ICsxNyw4IEBACiAvKgogICogV2UgdXNlIElSUTEgYXMgdGhlIElQSQogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgc21wX2Nyb3NzX2NhbGwoY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2spCitzdGF0aWMgaW5saW5lIHZvaWQgc21wX2Nyb3NzX2NhbGwoY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2ssIGludCBpcGkpCiB7Ci0JZ2ljX3JhaXNlX3NvZnRpcnEobWFzaywgMSk7CisJZ2ljX3JhaXNlX3NvZnRpcnEobWFzaywgaXBpKTsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11eDUwMC9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCmluZGV4IDAyNzFjYTAuLjlhNjYxNGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdXg1MDAvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaAorKysgYi9hcmNoL2FybS9tYWNoLXV4NTAwL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKQEAgLTE5LDM4ICsxOSw0MyBAQAogI2RlZmluZSBfX0FTTV9BUkNIX1VOQ09NUFJFU1NfSAogCiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2FtYmEvc2VyaWFsLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCi0jZGVmaW5lIFU4NTAwX1VBUlRfRFIJCTB4ODAwMDcwMDAKLSNkZWZpbmUgVTg1MDBfVUFSVF9MQ1JICQkweDgwMDA3MDJjCi0jZGVmaW5lIFU4NTAwX1VBUlRfQ1IJCTB4ODAwMDcwMzAKLSNkZWZpbmUgVTg1MDBfVUFSVF9GUgkJMHg4MDAwNzAxOAorc3RhdGljIHUzMiB1eDUwMF91YXJ0X2Jhc2U7CiAKIHN0YXRpYyB2b2lkIHB1dGMoY29uc3QgY2hhciBjKQogewogCS8qIERvIG5vdGhpbmcgaWYgdGhlIFVBUlQgaXMgbm90IGVuYWJsZWQuICovCi0JaWYgKCEoX19yYXdfcmVhZGIoVTg1MDBfVUFSVF9DUikgJiAweDEpKQorCWlmICghKF9fcmF3X3JlYWRiKHV4NTAwX3VhcnRfYmFzZSArIFVBUlQwMTFfQ1IpICYgMHgxKSkKIAkJcmV0dXJuOwogCiAJaWYgKGMgPT0gJ1xuJykKIAkJcHV0YygnXHInKTsKIAotCXdoaWxlIChfX3Jhd19yZWFkYihVODUwMF9VQVJUX0ZSKSAmICgxIDw8IDUpKQorCXdoaWxlIChfX3Jhd19yZWFkYih1eDUwMF91YXJ0X2Jhc2UgKyBVQVJUMDF4X0ZSKSAmICgxIDw8IDUpKQogCQliYXJyaWVyKCk7Ci0JX19yYXdfd3JpdGViKGMsIFU4NTAwX1VBUlRfRFIpOworCV9fcmF3X3dyaXRlYihjLCB1eDUwMF91YXJ0X2Jhc2UgKyBVQVJUMDF4X0RSKTsKIH0KIAogc3RhdGljIHZvaWQgZmx1c2godm9pZCkKIHsKLQlpZiAoIShfX3Jhd19yZWFkYihVODUwMF9VQVJUX0NSKSAmIDB4MSkpCisJaWYgKCEoX19yYXdfcmVhZGIodXg1MDBfdWFydF9iYXNlICsgVUFSVDAxMV9DUikgJiAweDEpKQogCQlyZXR1cm47Ci0Jd2hpbGUgKF9fcmF3X3JlYWRiKFU4NTAwX1VBUlRfRlIpICYgKDEgPDwgMykpCisJd2hpbGUgKF9fcmF3X3JlYWRiKHV4NTAwX3VhcnRfYmFzZSArIFVBUlQwMXhfRlIpICYgKDEgPDwgMykpCiAJCWJhcnJpZXIoKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGFyY2hfZGVjb21wX3NldHVwKHZvaWQpCiB7CisJaWYgKG1hY2hpbmVfaXNfdTg1MDAoKSkKKwkJdXg1MDBfdWFydF9iYXNlID0gVTg1MDBfVUFSVDJfQkFTRTsKKwllbHNlIGlmIChtYWNoaW5lX2lzX3U1NTAwKCkpCisJCXV4NTAwX3VhcnRfYmFzZSA9IFU1NTAwX1VBUlQwX0JBU0U7CisJZWxzZSAvKiBub3QgbXVjaCBjYW4gYmUgZG9uZSB0byBoZWxwIGhlcmUgKi8KKwkJdXg1MDBfdWFydF9iYXNlID0gVTg1MDBfVUFSVDJfQkFTRTsKIH0KIAogI2RlZmluZSBhcmNoX2RlY29tcF93ZG9nKCkgLyogbm90aGluZyB0byBkbyBoZXJlICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXV4NTAwL21ib3gtZGI1NTAwLmMgYi9hcmNoL2FybS9tYWNoLXV4NTAwL21ib3gtZGI1NTAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JmMTU3MQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdXg1MDAvbWJveC1kYjU1MDAuYwpAQCAtMCwwICsxLDU2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgU1QtRXJpY3Nzb24gU0EgMjAxMAorICogQXV0aG9yOiBTdGVmYW4gTmlsc3NvbiA8c3RlZmFuLnhrLm5pbHNzb25Ac3Rlcmljc3Nvbi5jb20+IGZvciBTVC1Fcmljc3Nvbi4KKyAqIEF1dGhvcjogTWFydGluIFBlcnNzb24gPG1hcnRpbi5wZXJzc29uQHN0ZXJpY3Nzb24uY29tPiBmb3IgU1QtRXJpY3Nzb24uCisgKiBMaWNlbnNlIHRlcm1zOiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSwgdmVyc2lvbiAyLgorICovCisKKy8qCisgKiBNYWlsYm94IG5vbWVuY2xhdHVyZToKKyAqCisgKiAgICAgICBBUEUgICAgICAgICAgIE1PREVNCisgKiAgICAgICAgICAgbWJveCBwYWlyWAorICogICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorICogICAuICAgICAgICAgICAgICAgICAgICAgICAuCisgKiAgIC4gICAgICAgICAgIHBlZXIgICAgICAgIC4KKyAqICAgLiAgICAgc2VuZCAgLS0tLSAgICAgICAgLgorICogICAuICAgICAgLS0+ICB8ICB8ICAgICAgICAuCisgKiAgIC4gICAgICAgICAgIHwgIHwgICAgICAgIC4KKyAqICAgLiAgICAgICAgICAgLS0tLSAgICAgICAgLgorICogICAuICAgICAgICAgICAgICAgICAgICAgICAuCisgKiAgIC4gICAgICAgICAgIGxvY2FsICAgICAgIC4KKyAqICAgLiAgICAgcmVjICAgLS0tLSAgICAgICAgLgorICogICAuICAgICAgICAgICB8ICB8IDwtLSAgICAuCisgKiAgIC4gICAgICAgICAgIHwgIHwgICAgICAgIC4KKyAqICAgLiAgICAgICAgICAgLS0tLSAgICAgICAgLgorICogICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CisjaW5jbHVkZSA8bWFjaC9tYm94LWRiNTUwMC5oPgorCisjZGVmaW5lIE1CT1hfTkFNRSAibWJveCIKKworI2RlZmluZSBNQk9YX0ZJRk9fREFUQSAgICAgICAgMHgwMDAKKyNkZWZpbmUgTUJPWF9GSUZPX0FERCAgICAgICAgIDB4MDA0CisjZGVmaW5lIE1CT1hfRklGT19SRU1PVkUgICAgICAweDAwOAorI2RlZmluZSBNQk9YX0ZJRk9fVEhSRVNfRlJFRSAgMHgwMEMKKyNkZWZpbmUgTUJPWF9GSUZPX1RIUkVTX09DQ1VQIDB4MDEwCisjZGVmaW5lIE1CT1hfRklGT19TVEFUVVMgICAgICAweDAxNAorCisjZGVmaW5lIE1CT1hfRElTQUJMRV9JUlEgMHg0CisjZGVmaW5lIE1CT1hfRU5BQkxFX0lSUSAgMHgwCisjZGVmaW5lIE1CT1hfTEFUQ0ggMQorCisvKiBHbG9iYWwgbGlzdCBvZiBhbGwgbWFpbGJveGVzICovCitzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCBtYm94cyA9IExJU1RfSEVBRF9JTklUKG1ib3hzKTsKKworc3RhdGljIHN0cnVjdCBtYm94ICpnZXRfbWJveF93aXRoX2lkKHU4IGlkKQoreworCXU4IGk7CisJc3RydWN0IGxpc3RfaGVhZCAqcG9zID0gJm1ib3hzOworCWZvciAoaSA9IDA7IGkgPD0gaWQ7IGkrKykKKwkJcG9zID0gcG9zLT5uZXh0OworCisJcmV0dXJuIChzdHJ1Y3QgbWJveCAqKSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IG1ib3gsIGxpc3QpOworfQorCitpbnQgbWJveF9zZW5kKHN0cnVjdCBtYm94ICptYm94LCB1MzIgbWJveF9tc2csIGJvb2wgYmxvY2spCit7CisJaW50IHJlcyA9IDA7CisKKwlzcGluX2xvY2soJm1ib3gtPmxvY2spOworCisJZGV2X2RiZygmKG1ib3gtPnBkZXYtPmRldiksCisJCSJBYm91dCB0byBidWZmZXIgMHglWCB0byBtYWlsYm94IDB4JVguIgorCQkiIHJpID0gJWQsIHdpID0gJWRcbiIsCisJCW1ib3hfbXNnLCAodTMyKW1ib3gsIG1ib3gtPnJlYWRfaW5kZXgsCisJCW1ib3gtPndyaXRlX2luZGV4KTsKKworCS8qIENoZWNrIGlmIHdyaXRlIGJ1ZmZlciBpcyBmdWxsICovCisJd2hpbGUgKCgobWJveC0+d3JpdGVfaW5kZXggKyAxKSAlIE1CT1hfQlVGX1NJWkUpID09IG1ib3gtPnJlYWRfaW5kZXgpIHsKKwkJaWYgKCFibG9jaykgeworCQkJZGV2X2RiZygmKG1ib3gtPnBkZXYtPmRldiksCisJCQkiQnVmZmVyIGZ1bGwgaW4gbm9uLWJsb2NraW5nIGNhbGwhICIKKwkJCSJSZXR1cm5pbmcgLUVOT01FTSFcbiIpOworCQkJcmVzID0gLUVOT01FTTsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCQlzcGluX3VubG9jaygmbWJveC0+bG9jayk7CisJCWRldl9kYmcoJihtYm94LT5wZGV2LT5kZXYpLAorCQkJIkJ1ZmZlciBmdWxsIGluIGJsb2NraW5nIGNhbGwhIFNsZWVwaW5nLi4uXG4iKTsKKwkJbWJveC0+Y2xpZW50X2Jsb2NrZWQgPSAxOworCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZtYm94LT5idWZmZXJfYXZhaWxhYmxlKTsKKwkJZGV2X2RiZygmKG1ib3gtPnBkZXYtPmRldiksCisJCQkiQmxvY2tpbmcgc2VuZCB3YXMgd29rZW4gdXAhIFRyeWluZyBhZ2Fpbi4uLlxuIik7CisJCXNwaW5fbG9jaygmbWJveC0+bG9jayk7CisJfQorCisJbWJveC0+YnVmZmVyW21ib3gtPndyaXRlX2luZGV4XSA9IG1ib3hfbXNnOworCW1ib3gtPndyaXRlX2luZGV4ID0gKG1ib3gtPndyaXRlX2luZGV4ICsgMSkgJSBNQk9YX0JVRl9TSVpFOworCisJLyoKKwkgKiBJbmRpY2F0ZSB0aGF0IHdlIHdhbnQgYW4gSVJRIGFzIHNvb24gYXMgdGhlcmUgaXMgYSBzbG90CisJICogaW4gdGhlIEZJRk8KKwkgKi8KKwl3cml0ZWwoTUJPWF9FTkFCTEVfSVJRLCBtYm94LT52aXJ0YmFzZV9wZWVyICsgTUJPWF9GSUZPX1RIUkVTX0ZSRUUpOworCitleGl0OgorCXNwaW5fdW5sb2NrKCZtYm94LT5sb2NrKTsKKwlyZXR1cm4gcmVzOworfQorRVhQT1JUX1NZTUJPTChtYm94X3NlbmQpOworCisjaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpCisvKgorICogRXhwZWN0ZWQgaW5wdXQ6IDx2YWx1ZT4gPG5iciBzZW5kcz4KKyAqIEV4YW1wbGU6ICJlY2hvIDB4ZGVhZGJlZWYgNCA+IG1ib3gtbm9kZSIgc2VuZHMgMHhkZWFkYmVlZiA0IHRpbWVzCisgKi8KK3N0YXRpYyBzc2l6ZV90IG1ib3hfd3JpdGVfZmlmbyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgICAgY29uc3QgY2hhciAqYnVmLAorCQkJICAgICAgIHNpemVfdCBjb3VudCkKK3sKKwl1bnNpZ25lZCBsb25nIG1ib3hfbWVzczsKKwl1bnNpZ25lZCBsb25nIG5icl9zZW5kczsKKwl1bnNpZ25lZCBsb25nIGk7CisJY2hhciBpbnRfYnVmWzE2XTsKKwljaGFyICp0b2tlbjsKKwljaGFyICp2YWw7CisKKwlzdHJ1Y3QgbWJveCAqbWJveCA9IChzdHJ1Y3QgbWJveCAqKSBkZXYtPnBsYXRmb3JtX2RhdGE7CisKKwlzdHJuY3B5KChjaGFyICopICZpbnRfYnVmLCBidWYsIHNpemVvZihpbnRfYnVmKSk7CisJdG9rZW4gPSAoY2hhciAqKSAmaW50X2J1ZjsKKworCS8qIFBhcnNlIG1lc3NhZ2UgKi8KKwl2YWwgPSBzdHJzZXAoJnRva2VuLCAiICIpOworCWlmICgodmFsID09IE5VTEwpIHx8IChzdHJpY3Rfc3RydG91bCh2YWwsIDE2LCAmbWJveF9tZXNzKSAhPSAwKSkKKwkJbWJveF9tZXNzID0gMHhERUFEQkVFRjsKKworCXZhbCA9IHN0cnNlcCgmdG9rZW4sICIgIik7CisJaWYgKCh2YWwgPT0gTlVMTCkgfHwgKHN0cmljdF9zdHJ0b3VsKHZhbCwgMTAsICZuYnJfc2VuZHMpICE9IDApKQorCQluYnJfc2VuZHMgPSAxOworCisJZGV2X2RiZyhkZXYsICJXaWxsIHdyaXRlIDB4JWxYICVsZCB0aW1lcyB1c2luZyBkYXRhIHN0cnVjdCBhdCAweCVYXG4iLAorCQltYm94X21lc3MsIG5icl9zZW5kcywgKHUzMikgbWJveCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbmJyX3NlbmRzOyBpKyspCisJCW1ib3hfc2VuZChtYm94LCBtYm94X21lc3MsIHRydWUpOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBtYm94X3JlYWRfZmlmbyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICAgIGNoYXIgKmJ1ZikKK3sKKwlpbnQgbWJveF92YWx1ZTsKKwlzdHJ1Y3QgbWJveCAqbWJveCA9IChzdHJ1Y3QgbWJveCAqKSBkZXYtPnBsYXRmb3JtX2RhdGE7CisKKwlpZiAoKHJlYWRsKG1ib3gtPnZpcnRiYXNlX2xvY2FsICsgTUJPWF9GSUZPX1NUQVRVUykgJiAweDcpIDw9IDApCisJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIk1haWxib3ggaXMgZW1wdHlcbiIpOworCisJbWJveF92YWx1ZSA9IHJlYWRsKG1ib3gtPnZpcnRiYXNlX2xvY2FsICsgTUJPWF9GSUZPX0RBVEEpOworCXdyaXRlbChNQk9YX0xBVENILCAobWJveC0+dmlydGJhc2VfbG9jYWwgKyBNQk9YX0ZJRk9fUkVNT1ZFKSk7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIweCVYXG4iLCBtYm94X3ZhbHVlKTsKK30KKworc3RhdGljIERFVklDRV9BVFRSKGZpZm8sIFNfSVdVR08gfCBTX0lSVUdPLCBtYm94X3JlYWRfZmlmbywgbWJveF93cml0ZV9maWZvKTsKKworc3RhdGljIGludCBtYm94X3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKKwl1OCBtYm94X2luZGV4ID0gMDsKKworCWxpc3RfZm9yX2VhY2gocG9zLCAmbWJveHMpIHsKKwkJc3RydWN0IG1ib3ggKm0gPQorCQkJKHN0cnVjdCBtYm94ICopIGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgbWJveCwgbGlzdCk7CisJCWlmIChtID09IE5VTEwpIHsKKwkJCXNlcV9wcmludGYocywKKwkJCQkgICAiVW5hYmxlIHRvIHJldHJpZXZlIG1haWxib3ggJWRcbiIsCisJCQkJICAgbWJveF9pbmRleCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCXNwaW5fbG9jaygmbS0+bG9jayk7CisJCWlmICgobS0+dmlydGJhc2VfcGVlciA9PSBOVUxMKSB8fCAobS0+dmlydGJhc2VfbG9jYWwgPT0gTlVMTCkpIHsKKwkJCXNlcV9wcmludGYocywgIk1BSUxCT1ggJWQgbm90IHNldHVwIG9yIGNvcnJ1cHRcbiIsCisJCQkJICAgbWJveF9pbmRleCk7CisJCQlzcGluX3VubG9jaygmbS0+bG9jayk7CisJCQljb250aW51ZTsKKwkJfQorCisJCXNlcV9wcmludGYocywKKwkJIj09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIgorCQkiIE1BSUxCT1ggJWRcbiIKKwkJIiBQRUVSIE1BSUxCT1ggRFVNUFxuIgorCQkiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCisJCSJGSUZPOiAgICAgICAgICAgICAgICAgMHglWCAoJWQpXG4iCisJCSJGcmVlICAgICBUaHJlc2hvbGQ6ICAgMHglLjJYICglZClcbiIKKwkJIk9jY3VwaWVkIFRocmVzaG9sZDogICAweCUuMlggKCVkKVxuIgorCQkiU3RhdHVzOiAgICAgICAgICAgICAgIDB4JS4yWCAoJWQpXG4iCisJCSIgICBGcmVlIHNwYWNlcyAgKG90KTogICAgJWQgKCVkKVxuIgorCQkiICAgT2NjdXAgc3BhY2VzIChvdCk6ICAgICVkICglZClcbiIKKwkJIj09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIgorCQkiIExPQ0FMIE1BSUxCT1ggRFVNUFxuIgorCQkiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCisJCSJGSUZPOiAgICAgICAgICAgICAgICAgMHglLlggKCVkKVxuIgorCQkiRnJlZSAgICAgVGhyZXNob2xkOiAgIDB4JS4yWCAoJWQpXG4iCisJCSJPY2N1cGllZCBUaHJlc2hvbGQ6ICAgMHglLjJYICglZClcbiIKKwkJIlN0YXR1czogICAgICAgICAgICAgICAweCUuMlggKCVkKVxuIgorCQkiICAgRnJlZSBzcGFjZXMgIChvdCk6ICAgICVkICglZClcbiIKKwkJIiAgIE9jY3VwIHNwYWNlcyAob3QpOiAgICAlZCAoJWQpXG4iCisJCSI9PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIKKwkJIndyaXRlX2luZGV4OiAlZFxuIgorCQkicmVhZF9pbmRleCA6ICVkXG4iCisJCSI9PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIKKwkJIlxuIiwKKwkJbWJveF9pbmRleCwKKwkJcmVhZGwobS0+dmlydGJhc2VfcGVlciArIE1CT1hfRklGT19EQVRBKSwKKwkJcmVhZGwobS0+dmlydGJhc2VfcGVlciArIE1CT1hfRklGT19EQVRBKSwKKwkJcmVhZGwobS0+dmlydGJhc2VfcGVlciArIE1CT1hfRklGT19USFJFU19GUkVFKSwKKwkJcmVhZGwobS0+dmlydGJhc2VfcGVlciArIE1CT1hfRklGT19USFJFU19GUkVFKSwKKwkJcmVhZGwobS0+dmlydGJhc2VfcGVlciArIE1CT1hfRklGT19USFJFU19PQ0NVUCksCisJCXJlYWRsKG0tPnZpcnRiYXNlX3BlZXIgKyBNQk9YX0ZJRk9fVEhSRVNfT0NDVVApLAorCQlyZWFkbChtLT52aXJ0YmFzZV9wZWVyICsgTUJPWF9GSUZPX1NUQVRVUyksCisJCXJlYWRsKG0tPnZpcnRiYXNlX3BlZXIgKyBNQk9YX0ZJRk9fU1RBVFVTKSwKKwkJKHJlYWRsKG0tPnZpcnRiYXNlX3BlZXIgKyBNQk9YX0ZJRk9fU1RBVFVTKSA+PiA0KSAmIDB4NywKKwkJKHJlYWRsKG0tPnZpcnRiYXNlX3BlZXIgKyBNQk9YX0ZJRk9fU1RBVFVTKSA+PiA3KSAmIDB4MSwKKwkJKHJlYWRsKG0tPnZpcnRiYXNlX3BlZXIgKyBNQk9YX0ZJRk9fU1RBVFVTKSA+PiAwKSAmIDB4NywKKwkJKHJlYWRsKG0tPnZpcnRiYXNlX3BlZXIgKyBNQk9YX0ZJRk9fU1RBVFVTKSA+PiAzKSAmIDB4MSwKKwkJcmVhZGwobS0+dmlydGJhc2VfbG9jYWwgKyBNQk9YX0ZJRk9fREFUQSksCisJCXJlYWRsKG0tPnZpcnRiYXNlX2xvY2FsICsgTUJPWF9GSUZPX0RBVEEpLAorCQlyZWFkbChtLT52aXJ0YmFzZV9sb2NhbCArIE1CT1hfRklGT19USFJFU19GUkVFKSwKKwkJcmVhZGwobS0+dmlydGJhc2VfbG9jYWwgKyBNQk9YX0ZJRk9fVEhSRVNfRlJFRSksCisJCXJlYWRsKG0tPnZpcnRiYXNlX2xvY2FsICsgTUJPWF9GSUZPX1RIUkVTX09DQ1VQKSwKKwkJcmVhZGwobS0+dmlydGJhc2VfbG9jYWwgKyBNQk9YX0ZJRk9fVEhSRVNfT0NDVVApLAorCQlyZWFkbChtLT52aXJ0YmFzZV9sb2NhbCArIE1CT1hfRklGT19TVEFUVVMpLAorCQlyZWFkbChtLT52aXJ0YmFzZV9sb2NhbCArIE1CT1hfRklGT19TVEFUVVMpLAorCQkocmVhZGwobS0+dmlydGJhc2VfbG9jYWwgKyBNQk9YX0ZJRk9fU1RBVFVTKSA+PiA0KSAmIDB4NywKKwkJKHJlYWRsKG0tPnZpcnRiYXNlX2xvY2FsICsgTUJPWF9GSUZPX1NUQVRVUykgPj4gNykgJiAweDEsCisJCShyZWFkbChtLT52aXJ0YmFzZV9sb2NhbCArIE1CT1hfRklGT19TVEFUVVMpID4+IDApICYgMHg3LAorCQkocmVhZGwobS0+dmlydGJhc2VfbG9jYWwgKyBNQk9YX0ZJRk9fU1RBVFVTKSA+PiAzKSAmIDB4MSwKKwkJbS0+d3JpdGVfaW5kZXgsIG0tPnJlYWRfaW5kZXgpOworCQltYm94X2luZGV4Kys7CisJCXNwaW5fdW5sb2NrKCZtLT5sb2NrKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtYm94X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIG1ib3hfc2hvdywgTlVMTCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1ib3hfb3BlcmF0aW9ucyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkub3BlbiA9IG1ib3hfb3BlbiwKKwkucmVhZCA9IHNlcV9yZWFkLAorCS5sbHNlZWsgPSBzZXFfbHNlZWssCisJLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwKK307CisjZW5kaWYKKworc3RhdGljIGlycXJldHVybl90IG1ib3hfaXJxKGludCBpcnEsIHZvaWQgKmFyZykKK3sKKwl1MzIgbWJveF92YWx1ZTsKKwlpbnQgbmJyX29jY3VwOworCWludCBuYnJfZnJlZTsKKwlzdHJ1Y3QgbWJveCAqbWJveCA9IChzdHJ1Y3QgbWJveCAqKSBhcmc7CisKKwlzcGluX2xvY2soJm1ib3gtPmxvY2spOworCisJZGV2X2RiZygmKG1ib3gtPnBkZXYtPmRldiksCisJCSJtYm94IElSUSBbJWRdIHJlY2VpdmVkLiByaSA9ICVkLCB3aSA9ICVkXG4iLAorCQlpcnEsIG1ib3gtPnJlYWRfaW5kZXgsIG1ib3gtPndyaXRlX2luZGV4KTsKKworCS8qCisJICogQ2hlY2sgaWYgd2UgaGF2ZSBhbnkgb3V0Z29pbmcgbWVzc2FnZXMsIGFuZCBpZiB0aGVyZSBpcyBzcGFjZSBmb3IKKwkgKiB0aGVtIGluIHRoZSBGSUZPLgorCSAqLworCWlmIChtYm94LT5yZWFkX2luZGV4ICE9IG1ib3gtPndyaXRlX2luZGV4KSB7CisJCS8qCisJCSAqIENoZWNrIGJ5IHJlYWRpbmcgRlJFRSBmb3IgTE9DQUwgc2luY2UgdGhhdCBpbmRpY2F0ZXMKKwkJICogT0NDVVAgZm9yIFBFRVIKKwkJICovCisJCW5icl9mcmVlID0gKHJlYWRsKG1ib3gtPnZpcnRiYXNlX2xvY2FsICsgTUJPWF9GSUZPX1NUQVRVUykKKwkJCSAgICA+PiA0KSAmIDB4NzsKKwkJZGV2X2RiZygmKG1ib3gtPnBkZXYtPmRldiksCisJCQkiU3RhdHVzIGluZGljYXRlcyAlZCBlbXB0eSBzcGFjZXMgaW4gdGhlIEZJRk8hXG4iLAorCQkJbmJyX2ZyZWUpOworCisJCXdoaWxlICgobmJyX2ZyZWUgPiAwKSAmJgorCQkgICAgICAgKG1ib3gtPnJlYWRfaW5kZXggIT0gbWJveC0+d3JpdGVfaW5kZXgpKSB7CisJCQkvKiBXcml0ZSB0aGUgbWVzc2FnZSBhbmQgbGF0Y2ggaXQgaW50byB0aGUgRklGTyAqLworCQkJd3JpdGVsKG1ib3gtPmJ1ZmZlclttYm94LT5yZWFkX2luZGV4XSwKKwkJCSAgICAgICAobWJveC0+dmlydGJhc2VfcGVlciArIE1CT1hfRklGT19EQVRBKSk7CisJCQl3cml0ZWwoTUJPWF9MQVRDSCwKKwkJCSAgICAgICAobWJveC0+dmlydGJhc2VfcGVlciArIE1CT1hfRklGT19BREQpKTsKKwkJCWRldl9kYmcoJihtYm94LT5wZGV2LT5kZXYpLAorCQkJCSJXcm90ZSBtZXNzYWdlIDB4JVggdG8gYWRkciAweCVYXG4iLAorCQkJCW1ib3gtPmJ1ZmZlclttYm94LT5yZWFkX2luZGV4XSwKKwkJCQkodTMyKSAobWJveC0+dmlydGJhc2VfcGVlciArIE1CT1hfRklGT19EQVRBKSk7CisKKwkJCW5icl9mcmVlLS07CisJCQltYm94LT5yZWFkX2luZGV4ID0KKwkJCQkobWJveC0+cmVhZF9pbmRleCArIDEpICUgTUJPWF9CVUZfU0laRTsKKwkJfQorCisJCS8qCisJCSAqIENoZWNrIGlmIHdlIHN0aWxsIHdhbnQgSVJROnMgd2hlbiB0aGVyZSBpcyBmcmVlCisJCSAqIHNwYWNlIHRvIHNlbmQKKwkJICovCisJCWlmIChtYm94LT5yZWFkX2luZGV4ICE9IG1ib3gtPndyaXRlX2luZGV4KSB7CisJCQlkZXZfZGJnKCYobWJveC0+cGRldi0+ZGV2KSwKKwkJCQkiU3RpbGwgaGF2ZSBtZXNzYWdlcyB0byBzZW5kLCBidXQgRklGTyBmdWxsLiAiCisJCQkJIlJlcXVlc3QgSVJRIGFnYWluIVxuIik7CisJCQl3cml0ZWwoTUJPWF9FTkFCTEVfSVJRLAorCQkJICAgICAgIG1ib3gtPnZpcnRiYXNlX3BlZXIgKyBNQk9YX0ZJRk9fVEhSRVNfRlJFRSk7CisJCX0gZWxzZSB7CisJCQlkZXZfZGJnKCYobWJveC0+cGRldi0+ZGV2KSwKKwkJCQkiTm8gbW9yZSBtZXNzYWdlcyB0byBzZW5kLiAiCisJCQkJIkRvIG5vdCByZXF1ZXN0IElSUSBhZ2FpbiFcbiIpOworCQkJd3JpdGVsKE1CT1hfRElTQUJMRV9JUlEsCisJCQkgICAgICAgbWJveC0+dmlydGJhc2VfcGVlciArIE1CT1hfRklGT19USFJFU19GUkVFKTsKKwkJfQorCisJCS8qCisJCSAqIENoZWNrIGlmIHdlIGNhbiBzaWduYWwgYW55IGJsb2NrZWQgY2xpZW50cyB0aGF0IGl0IGlzIE9LIHRvCisJCSAqIHN0YXJ0IGJ1ZmZlcmluZyBhZ2FpbgorCQkgKi8KKwkJaWYgKG1ib3gtPmNsaWVudF9ibG9ja2VkICYmCisJCSAgICAoKChtYm94LT53cml0ZV9pbmRleCArIDEpICUgTUJPWF9CVUZfU0laRSkKKwkJICAgICAhPSBtYm94LT5yZWFkX2luZGV4KSkgeworCQkJZGV2X2RiZygmKG1ib3gtPnBkZXYtPmRldiksCisJCQkJIldha2luZyB1cCBibG9ja2VkIGNsaWVudFxuIik7CisJCQljb21wbGV0ZSgmbWJveC0+YnVmZmVyX2F2YWlsYWJsZSk7CisJCQltYm94LT5jbGllbnRfYmxvY2tlZCA9IDA7CisJCX0KKwl9CisKKwkvKiBDaGVjayBpZiB3ZSBoYXZlIGFueSBpbmNvbWluZyBtZXNzYWdlcyAqLworCW5icl9vY2N1cCA9IHJlYWRsKG1ib3gtPnZpcnRiYXNlX2xvY2FsICsgTUJPWF9GSUZPX1NUQVRVUykgJiAweDc7CisJaWYgKG5icl9vY2N1cCA9PSAwKQorCQlnb3RvIGV4aXQ7CisKKwlpZiAobWJveC0+Y2IgPT0gTlVMTCkgeworCQlkZXZfZGJnKCYobWJveC0+cGRldi0+ZGV2KSwgIk5vIHJlY2VpdmUgY2FsbGJhY2sgcmVnaXN0ZXJlZCwgIgorCQkJImxlYXZpbmcgJWQgaW5jb21pbmcgbWVzc2FnZXMgaW4gZmlmbyFcbiIsIG5icl9vY2N1cCk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwkvKiBSZWFkIGFuZCBhY2tub3dsZWRnZSB0aGUgbWVzc2FnZSAqLworCW1ib3hfdmFsdWUgPSByZWFkbChtYm94LT52aXJ0YmFzZV9sb2NhbCArIE1CT1hfRklGT19EQVRBKTsKKwl3cml0ZWwoTUJPWF9MQVRDSCwgKG1ib3gtPnZpcnRiYXNlX2xvY2FsICsgTUJPWF9GSUZPX1JFTU9WRSkpOworCisJLyogTm90aWZ5IGNvbnN1bWVyIG9mIG5ldyBtYWlsYm94IG1lc3NhZ2UgKi8KKwlkZXZfZGJnKCYobWJveC0+cGRldi0+ZGV2KSwgIkNhbGxpbmcgY2FsbGJhY2sgZm9yIG1lc3NhZ2UgMHglWCFcbiIsCisJCW1ib3hfdmFsdWUpOworCW1ib3gtPmNiKG1ib3hfdmFsdWUsIG1ib3gtPmNsaWVudF9kYXRhKTsKKworZXhpdDoKKwlkZXZfZGJnKCYobWJveC0+cGRldi0+ZGV2KSwgIkV4aXQgbWJveCBJUlEuIHJpID0gJWQsIHdpID0gJWRcbiIsCisJCW1ib3gtPnJlYWRfaW5kZXgsIG1ib3gtPndyaXRlX2luZGV4KTsKKwlzcGluX3VubG9jaygmbWJveC0+bG9jayk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qIFNldHVwIGlzIGV4ZWN1dGVkIG9uY2UgZm9yIGVhY2ggbWJveCBwYWlyICovCitzdHJ1Y3QgbWJveCAqbWJveF9zZXR1cCh1OCBtYm94X2lkLCBtYm94X3JlY3ZfY2JfdCAqbWJveF9jYiwgdm9pZCAqcHJpdikKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlc291cmNlOworCWludCBpcnE7CisJaW50IHJlczsKKwlzdHJ1Y3QgbWJveCAqbWJveDsKKworCW1ib3ggPSBnZXRfbWJveF93aXRoX2lkKG1ib3hfaWQpOworCWlmIChtYm94ID09IE5VTEwpIHsKKwkJZGV2X2VycigmKG1ib3gtPnBkZXYtPmRldiksICJJbmNvcnJlY3QgbWFpbGJveCBpZDogJWQhXG4iLAorCQkJbWJveF9pZCk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwkvKgorCSAqIENoZWNrIGlmIG1haWxib3ggaGFzIGJlZW4gYWxsb2NhdGVkIHRvIHNvbWVvbmUgZWxzZSwKKwkgKiBvdGhlcndpc2UgYWxsb2NhdGUgaXQKKwkgKi8KKwlpZiAobWJveC0+YWxsb2NhdGVkKSB7CisJCWRldl9lcnIoJihtYm94LT5wZGV2LT5kZXYpLCAiTWFpbGJveCBudW1iZXIgJWQgaXMgYnVzeSFcbiIsCisJCQltYm94X2lkKTsKKwkJbWJveCA9IE5VTEw7CisJCWdvdG8gZXhpdDsKKwl9CisJbWJveC0+YWxsb2NhdGVkID0gdHJ1ZTsKKworCWRldl9kYmcoJihtYm94LT5wZGV2LT5kZXYpLCAiSW5pdGlhdGluZyBtYWlsYm94IG51bWJlciAlZDogMHglWC4uLlxuIiwKKwkJbWJveF9pZCwgKHUzMiltYm94KTsKKworCW1ib3gtPmNsaWVudF9kYXRhID0gcHJpdjsKKwltYm94LT5jYiA9IG1ib3hfY2I7CisKKwkvKiBHZXQgYWRkciBmb3IgcGVlciBtYWlsYm94IGFuZCBpb3JlbWFwIGl0ICovCisJcmVzb3VyY2UgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKG1ib3gtPnBkZXYsCisJCQkJCQlJT1JFU09VUkNFX01FTSwKKwkJCQkJCSJtYm94X3BlZXIiKTsKKwlpZiAocmVzb3VyY2UgPT0gTlVMTCkgeworCQlkZXZfZXJyKCYobWJveC0+cGRldi0+ZGV2KSwKKwkJCSJVbmFibGUgdG8gcmV0cmlldmUgbWJveCBwZWVyIHJlc291cmNlXG4iKTsKKwkJbWJveCA9IE5VTEw7CisJCWdvdG8gZXhpdDsKKwl9CisJZGV2X2RiZygmKG1ib3gtPnBkZXYtPmRldiksCisJCSJSZXNvdXJjZSBuYW1lOiAlcyBzdGFydDogMHglWCwgZW5kOiAweCVYXG4iLAorCQlyZXNvdXJjZS0+bmFtZSwgcmVzb3VyY2UtPnN0YXJ0LCByZXNvdXJjZS0+ZW5kKTsKKwltYm94LT52aXJ0YmFzZV9wZWVyID0KKwkJaW9yZW1hcChyZXNvdXJjZS0+c3RhcnQsIHJlc291cmNlLT5lbmQgLSByZXNvdXJjZS0+c3RhcnQpOworCWlmICghbWJveC0+dmlydGJhc2VfcGVlcikgeworCQlkZXZfZXJyKCYobWJveC0+cGRldi0+ZGV2KSwgIlVuYWJsZSB0byBpb3JlbWFwIHBlZXIgbWJveFxuIik7CisJCW1ib3ggPSBOVUxMOworCQlnb3RvIGV4aXQ7CisJfQorCWRldl9kYmcoJihtYm94LT5wZGV2LT5kZXYpLAorCQkiaW9yZW1hcHBlZCBwZWVyIHBoeXNpY2FsOiAoMHglWC0weCVYKSB0byB2aXJ0dWFsOiAweCVYXG4iLAorCQlyZXNvdXJjZS0+c3RhcnQsIHJlc291cmNlLT5lbmQsICh1MzIpIG1ib3gtPnZpcnRiYXNlX3BlZXIpOworCisJLyogR2V0IGFkZHIgZm9yIGxvY2FsIG1haWxib3ggYW5kIGlvcmVtYXAgaXQgKi8KKwlyZXNvdXJjZSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUobWJveC0+cGRldiwKKwkJCQkJCUlPUkVTT1VSQ0VfTUVNLAorCQkJCQkJIm1ib3hfbG9jYWwiKTsKKwlpZiAocmVzb3VyY2UgPT0gTlVMTCkgeworCQlkZXZfZXJyKCYobWJveC0+cGRldi0+ZGV2KSwKKwkJCSJVbmFibGUgdG8gcmV0cmlldmUgbWJveCBsb2NhbCByZXNvdXJjZVxuIik7CisJCW1ib3ggPSBOVUxMOworCQlnb3RvIGV4aXQ7CisJfQorCWRldl9kYmcoJihtYm94LT5wZGV2LT5kZXYpLAorCQkiUmVzb3VyY2UgbmFtZTogJXMgc3RhcnQ6IDB4JVgsIGVuZDogMHglWFxuIiwKKwkJcmVzb3VyY2UtPm5hbWUsIHJlc291cmNlLT5zdGFydCwgcmVzb3VyY2UtPmVuZCk7CisJbWJveC0+dmlydGJhc2VfbG9jYWwgPQorCQlpb3JlbWFwKHJlc291cmNlLT5zdGFydCwgcmVzb3VyY2UtPmVuZCAtIHJlc291cmNlLT5zdGFydCk7CisJaWYgKCFtYm94LT52aXJ0YmFzZV9sb2NhbCkgeworCQlkZXZfZXJyKCYobWJveC0+cGRldi0+ZGV2KSwgIlVuYWJsZSB0byBpb3JlbWFwIGxvY2FsIG1ib3hcbiIpOworCQltYm94ID0gTlVMTDsKKwkJZ290byBleGl0OworCX0KKwlkZXZfZGJnKCYobWJveC0+cGRldi0+ZGV2KSwKKwkJImlvcmVtYXBwZWQgbG9jYWwgcGh5c2ljYWw6ICgweCVYLTB4JVgpIHRvIHZpcnR1YWw6IDB4JVhcbiIsCisJCXJlc291cmNlLT5zdGFydCwgcmVzb3VyY2UtPmVuZCwgKHUzMikgbWJveC0+dmlydGJhc2VfcGVlcik7CisKKwlpbml0X2NvbXBsZXRpb24oJm1ib3gtPmJ1ZmZlcl9hdmFpbGFibGUpOworCW1ib3gtPmNsaWVudF9ibG9ja2VkID0gMDsKKworCS8qIEdldCBJUlEgZm9yIG1haWxib3ggYW5kIGFsbG9jYXRlIGl0ICovCisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUobWJveC0+cGRldiwgIm1ib3hfaXJxIik7CisJaWYgKGlycSA8IDApIHsKKwkJZGV2X2VycigmKG1ib3gtPnBkZXYtPmRldiksCisJCQkiVW5hYmxlIHRvIHJldHJpZXZlIG1ib3ggaXJxIHJlc291cmNlXG4iKTsKKwkJbWJveCA9IE5VTEw7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlkZXZfZGJnKCYobWJveC0+cGRldi0+ZGV2KSwgIkFsbG9jYXRpbmcgaXJxICVkLi4uXG4iLCBpcnEpOworCXJlcyA9IHJlcXVlc3RfaXJxKGlycSwgbWJveF9pcnEsIDAsIG1ib3gtPm5hbWUsICh2b2lkICopIG1ib3gpOworCWlmIChyZXMgPCAwKSB7CisJCWRldl9lcnIoJihtYm94LT5wZGV2LT5kZXYpLAorCQkJIlVuYWJsZSB0byBhbGxvY2F0ZSBtYm94IGlycSAlZFxuIiwgaXJxKTsKKwkJbWJveCA9IE5VTEw7CisJCWdvdG8gZXhpdDsKKwl9CisKKwkvKiBTZXQgdXAgbWFpbGJveCB0byBub3QgbGF1bmNoIElSUSBvbiBmcmVlIHNwYWNlIGluIG1haWxib3ggKi8KKwl3cml0ZWwoTUJPWF9ESVNBQkxFX0lSUSwgbWJveC0+dmlydGJhc2VfcGVlciArIE1CT1hfRklGT19USFJFU19GUkVFKTsKKworCS8qCisJICogU2V0IHVwIG1haWxib3ggdG8gbGF1bmNoIElSUSBvbiBuZXcgbWVzc2FnZSBpZiB3ZSBoYXZlCisJICogYSBjYWxsYmFjayBzZXQuIElmIG5vdCwgZG8gbm90IHJhaXNlIElSUSwgYnV0IGtlZXAgbWVzc2FnZQorCSAqIGluIEZJRk8gZm9yIG1hbnVhbCByZXRyaWV2YWwKKwkgKi8KKwlpZiAobWJveF9jYiAhPSBOVUxMKQorCQl3cml0ZWwoTUJPWF9FTkFCTEVfSVJRLAorCQkgICAgICAgbWJveC0+dmlydGJhc2VfbG9jYWwgKyBNQk9YX0ZJRk9fVEhSRVNfT0NDVVApOworCWVsc2UKKwkJd3JpdGVsKE1CT1hfRElTQUJMRV9JUlEsCisJCSAgICAgICBtYm94LT52aXJ0YmFzZV9sb2NhbCArIE1CT1hfRklGT19USFJFU19PQ0NVUCk7CisKKyNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykKKwlyZXMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJihtYm94LT5wZGV2LT5kZXYpLCAmZGV2X2F0dHJfZmlmbyk7CisJaWYgKHJlcyAhPSAwKQorCQlkZXZfd2FybigmKG1ib3gtPnBkZXYtPmRldiksCisJCQkgIlVuYWJsZSB0byBjcmVhdGUgbWJveCBzeXNmcyBlbnRyeSIpOworCisJKHZvaWQpIGRlYnVnZnNfY3JlYXRlX2ZpbGUoIm1ib3giLCBTX0lGUkVHIHwgU19JUlVHTywgTlVMTCwKKwkJCQkgICBOVUxMLCAmbWJveF9vcGVyYXRpb25zKTsKKyNlbmRpZgorCisJZGV2X2luZm8oJihtYm94LT5wZGV2LT5kZXYpLAorCQkgIk1haWxib3ggZHJpdmVyIHdpdGggaW5kZXggJWQgaW5pdGF0ZWQhXG4iLCBtYm94X2lkKTsKKworZXhpdDoKKwlyZXR1cm4gbWJveDsKK30KK0VYUE9SVF9TWU1CT0wobWJveF9zZXR1cCk7CisKKworaW50IF9faW5pdCBtYm94X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG1ib3ggbG9jYWxfbWJveDsKKwlzdHJ1Y3QgbWJveCAqbWJveDsKKwlpbnQgcmVzID0gMDsKKwlkZXZfZGJnKCYocGRldi0+ZGV2KSwgIlByb2JpbmcgbWFpbGJveCAocGRldiA9IDB4JVgpLi4uXG4iLCAodTMyKSBwZGV2KTsKKworCW1lbXNldCgmbG9jYWxfbWJveCwgMHgwLCBzaXplb2Yoc3RydWN0IG1ib3gpKTsKKworCS8qIEFzc29jaWF0ZSBvdXIgbWJveCBkYXRhIHdpdGggdGhlIHBsYXRmb3JtIGRldmljZSAqLworCXJlcyA9IHBsYXRmb3JtX2RldmljZV9hZGRfZGF0YShwZGV2LAorCQkJCSAgICAgICAodm9pZCAqKSAmbG9jYWxfbWJveCwKKwkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBtYm94KSk7CisJaWYgKHJlcyAhPSAwKSB7CisJCWRldl9lcnIoJihwZGV2LT5kZXYpLAorCQkJIlVuYWJsZSB0byBhbGxvY2F0ZSBkcml2ZXIgcGxhdGZvcm0gZGF0YSFcbiIpOworCQlnb3RvIGV4aXQ7CisJfQorCisJbWJveCA9IChzdHJ1Y3QgbWJveCAqKSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwltYm94LT5wZGV2ID0gcGRldjsKKwltYm94LT53cml0ZV9pbmRleCA9IDA7CisJbWJveC0+cmVhZF9pbmRleCA9IDA7CisKKwlJTklUX0xJU1RfSEVBRCgmKG1ib3gtPmxpc3QpKTsKKwlsaXN0X2FkZF90YWlsKCYobWJveC0+bGlzdCksICZtYm94cyk7CisKKwlzcHJpbnRmKG1ib3gtPm5hbWUsICIlcyIsIE1CT1hfTkFNRSk7CisJc3Bpbl9sb2NrX2luaXQoJm1ib3gtPmxvY2spOworCisJZGV2X2luZm8oJihwZGV2LT5kZXYpLCAiTWFpbGJveCBkcml2ZXIgbG9hZGVkXG4iKTsKKworZXhpdDoKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtYm94X2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9IE1CT1hfTkFNRSwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG1ib3hfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJm1ib3hfZHJpdmVyLCBtYm94X3Byb2JlKTsKK30KKworbW9kdWxlX2luaXQobWJveF9pbml0KTsKKwordm9pZCBfX2V4aXQgbWJveF9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm1ib3hfZHJpdmVyKTsKK30KKworbW9kdWxlX2V4aXQobWJveF9leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJNQk9YIGRyaXZlciIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11eDUwMC9tYm94LmMgYi9hcmNoL2FybS9tYWNoLXV4NTAwL21ib3guYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjM0MzUzOC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLXV4NTAwL21ib3guYworKysgL2Rldi9udWxsCkBAIC0xLDU2NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSBTVC1Fcmljc3NvbiBTQSAyMDEwCi0gKiBBdXRob3I6IFN0ZWZhbiBOaWxzc29uIDxzdGVmYW4ueGsubmlsc3NvbkBzdGVyaWNzc29uLmNvbT4gZm9yIFNULUVyaWNzc29uLgotICogQXV0aG9yOiBNYXJ0aW4gUGVyc3NvbiA8bWFydGluLnBlcnNzb25Ac3Rlcmljc3Nvbi5jb20+IGZvciBTVC1Fcmljc3Nvbi4KLSAqIExpY2Vuc2UgdGVybXM6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpLCB2ZXJzaW9uIDIuCi0gKi8KLQotLyoKLSAqIE1haWxib3ggbm9tZW5jbGF0dXJlOgotICoKLSAqICAgICAgIEFQRSAgICAgICAgICAgTU9ERU0KLSAqICAgICAgICAgICBtYm94IHBhaXJYCi0gKiAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0gKiAgIC4gICAgICAgICAgICAgICAgICAgICAgIC4KLSAqICAgLiAgICAgICAgICAgcGVlciAgICAgICAgLgotICogICAuICAgICBzZW5kICAtLS0tICAgICAgICAuCi0gKiAgIC4gICAgICAtLT4gIHwgIHwgICAgICAgIC4KLSAqICAgLiAgICAgICAgICAgfCAgfCAgICAgICAgLgotICogICAuICAgICAgICAgICAtLS0tICAgICAgICAuCi0gKiAgIC4gICAgICAgICAgICAgICAgICAgICAgIC4KLSAqICAgLiAgICAgICAgICAgbG9jYWwgICAgICAgLgotICogICAuICAgICByZWMgICAtLS0tICAgICAgICAuCi0gKiAgIC4gICAgICAgICAgIHwgIHwgPC0tICAgIC4KLSAqICAgLiAgICAgICAgICAgfCAgfCAgICAgICAgLgotICogICAuICAgICAgICAgICAtLS0tICAgICAgICAuCi0gKiAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KLSNpbmNsdWRlIDxtYWNoL21ib3guaD4KLQotI2RlZmluZSBNQk9YX05BTUUgIm1ib3giCi0KLSNkZWZpbmUgTUJPWF9GSUZPX0RBVEEgICAgICAgIDB4MDAwCi0jZGVmaW5lIE1CT1hfRklGT19BREQgICAgICAgICAweDAwNAotI2RlZmluZSBNQk9YX0ZJRk9fUkVNT1ZFICAgICAgMHgwMDgKLSNkZWZpbmUgTUJPWF9GSUZPX1RIUkVTX0ZSRUUgIDB4MDBDCi0jZGVmaW5lIE1CT1hfRklGT19USFJFU19PQ0NVUCAweDAxMAotI2RlZmluZSBNQk9YX0ZJRk9fU1RBVFVTICAgICAgMHgwMTQKLQotI2RlZmluZSBNQk9YX0RJU0FCTEVfSVJRIDB4NAotI2RlZmluZSBNQk9YX0VOQUJMRV9JUlEgIDB4MAotI2RlZmluZSBNQk9YX0xBVENIIDEKLQotLyogR2xvYmFsIGxpc3Qgb2YgYWxsIG1haWxib3hlcyAqLwotc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgbWJveHMgPSBMSVNUX0hFQURfSU5JVChtYm94cyk7Ci0KLXN0YXRpYyBzdHJ1Y3QgbWJveCAqZ2V0X21ib3hfd2l0aF9pZCh1OCBpZCkKLXsKLQl1OCBpOwotCXN0cnVjdCBsaXN0X2hlYWQgKnBvcyA9ICZtYm94czsKLQlmb3IgKGkgPSAwOyBpIDw9IGlkOyBpKyspCi0JCXBvcyA9IHBvcy0+bmV4dDsKLQotCXJldHVybiAoc3RydWN0IG1ib3ggKikgbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBtYm94LCBsaXN0KTsKLX0KLQotaW50IG1ib3hfc2VuZChzdHJ1Y3QgbWJveCAqbWJveCwgdTMyIG1ib3hfbXNnLCBib29sIGJsb2NrKQotewotCWludCByZXMgPSAwOwotCi0Jc3Bpbl9sb2NrKCZtYm94LT5sb2NrKTsKLQotCWRldl9kYmcoJihtYm94LT5wZGV2LT5kZXYpLAotCQkiQWJvdXQgdG8gYnVmZmVyIDB4JVggdG8gbWFpbGJveCAweCVYLiIKLQkJIiByaSA9ICVkLCB3aSA9ICVkXG4iLAotCQltYm94X21zZywgKHUzMiltYm94LCBtYm94LT5yZWFkX2luZGV4LAotCQltYm94LT53cml0ZV9pbmRleCk7Ci0KLQkvKiBDaGVjayBpZiB3cml0ZSBidWZmZXIgaXMgZnVsbCAqLwotCXdoaWxlICgoKG1ib3gtPndyaXRlX2luZGV4ICsgMSkgJSBNQk9YX0JVRl9TSVpFKSA9PSBtYm94LT5yZWFkX2luZGV4KSB7Ci0JCWlmICghYmxvY2spIHsKLQkJCWRldl9kYmcoJihtYm94LT5wZGV2LT5kZXYpLAotCQkJIkJ1ZmZlciBmdWxsIGluIG5vbi1ibG9ja2luZyBjYWxsISAiCi0JCQkiUmV0dXJuaW5nIC1FTk9NRU0hXG4iKTsKLQkJCXJlcyA9IC1FTk9NRU07Ci0JCQlnb3RvIGV4aXQ7Ci0JCX0KLQkJc3Bpbl91bmxvY2soJm1ib3gtPmxvY2spOwotCQlkZXZfZGJnKCYobWJveC0+cGRldi0+ZGV2KSwKLQkJCSJCdWZmZXIgZnVsbCBpbiBibG9ja2luZyBjYWxsISBTbGVlcGluZy4uLlxuIik7Ci0JCW1ib3gtPmNsaWVudF9ibG9ja2VkID0gMTsKLQkJd2FpdF9mb3JfY29tcGxldGlvbigmbWJveC0+YnVmZmVyX2F2YWlsYWJsZSk7Ci0JCWRldl9kYmcoJihtYm94LT5wZGV2LT5kZXYpLAotCQkJIkJsb2NraW5nIHNlbmQgd2FzIHdva2VuIHVwISBUcnlpbmcgYWdhaW4uLi5cbiIpOwotCQlzcGluX2xvY2soJm1ib3gtPmxvY2spOwotCX0KLQotCW1ib3gtPmJ1ZmZlclttYm94LT53cml0ZV9pbmRleF0gPSBtYm94X21zZzsKLQltYm94LT53cml0ZV9pbmRleCA9IChtYm94LT53cml0ZV9pbmRleCArIDEpICUgTUJPWF9CVUZfU0laRTsKLQotCS8qCi0JICogSW5kaWNhdGUgdGhhdCB3ZSB3YW50IGFuIElSUSBhcyBzb29uIGFzIHRoZXJlIGlzIGEgc2xvdAotCSAqIGluIHRoZSBGSUZPCi0JICovCi0Jd3JpdGVsKE1CT1hfRU5BQkxFX0lSUSwgbWJveC0+dmlydGJhc2VfcGVlciArIE1CT1hfRklGT19USFJFU19GUkVFKTsKLQotZXhpdDoKLQlzcGluX3VubG9jaygmbWJveC0+bG9jayk7Ci0JcmV0dXJuIHJlczsKLX0KLUVYUE9SVF9TWU1CT0wobWJveF9zZW5kKTsKLQotI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKQotLyoKLSAqIEV4cGVjdGVkIGlucHV0OiA8dmFsdWU+IDxuYnIgc2VuZHM+Ci0gKiBFeGFtcGxlOiAiZWNobyAweGRlYWRiZWVmIDQgPiBtYm94LW5vZGUiIHNlbmRzIDB4ZGVhZGJlZWYgNCB0aW1lcwotICovCi1zdGF0aWMgc3NpemVfdCBtYm94X3dyaXRlX2ZpZm8oc3RydWN0IGRldmljZSAqZGV2LAotCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJICAgICAgIGNvbnN0IGNoYXIgKmJ1ZiwKLQkJCSAgICAgICBzaXplX3QgY291bnQpCi17Ci0JdW5zaWduZWQgbG9uZyBtYm94X21lc3M7Ci0JdW5zaWduZWQgbG9uZyBuYnJfc2VuZHM7Ci0JdW5zaWduZWQgbG9uZyBpOwotCWNoYXIgaW50X2J1ZlsxNl07Ci0JY2hhciAqdG9rZW47Ci0JY2hhciAqdmFsOwotCi0Jc3RydWN0IG1ib3ggKm1ib3ggPSAoc3RydWN0IG1ib3ggKikgZGV2LT5wbGF0Zm9ybV9kYXRhOwotCi0Jc3RybmNweSgoY2hhciAqKSAmaW50X2J1ZiwgYnVmLCBzaXplb2YoaW50X2J1ZikpOwotCXRva2VuID0gKGNoYXIgKikgJmludF9idWY7Ci0KLQkvKiBQYXJzZSBtZXNzYWdlICovCi0JdmFsID0gc3Ryc2VwKCZ0b2tlbiwgIiAiKTsKLQlpZiAoKHZhbCA9PSBOVUxMKSB8fCAoc3RyaWN0X3N0cnRvdWwodmFsLCAxNiwgJm1ib3hfbWVzcykgIT0gMCkpCi0JCW1ib3hfbWVzcyA9IDB4REVBREJFRUY7Ci0KLQl2YWwgPSBzdHJzZXAoJnRva2VuLCAiICIpOwotCWlmICgodmFsID09IE5VTEwpIHx8IChzdHJpY3Rfc3RydG91bCh2YWwsIDEwLCAmbmJyX3NlbmRzKSAhPSAwKSkKLQkJbmJyX3NlbmRzID0gMTsKLQotCWRldl9kYmcoZGV2LCAiV2lsbCB3cml0ZSAweCVsWCAlbGQgdGltZXMgdXNpbmcgZGF0YSBzdHJ1Y3QgYXQgMHglWFxuIiwKLQkJbWJveF9tZXNzLCBuYnJfc2VuZHMsICh1MzIpIG1ib3gpOwotCi0JZm9yIChpID0gMDsgaSA8IG5icl9zZW5kczsgaSsrKQotCQltYm94X3NlbmQobWJveCwgbWJveF9tZXNzLCB0cnVlKTsKLQotCXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIHNzaXplX3QgbWJveF9yZWFkX2ZpZm8oc3RydWN0IGRldmljZSAqZGV2LAotCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkgICAgICBjaGFyICpidWYpCi17Ci0JaW50IG1ib3hfdmFsdWU7Ci0Jc3RydWN0IG1ib3ggKm1ib3ggPSAoc3RydWN0IG1ib3ggKikgZGV2LT5wbGF0Zm9ybV9kYXRhOwotCi0JaWYgKChyZWFkbChtYm94LT52aXJ0YmFzZV9sb2NhbCArIE1CT1hfRklGT19TVEFUVVMpICYgMHg3KSA8PSAwKQotCQlyZXR1cm4gc3ByaW50ZihidWYsICJNYWlsYm94IGlzIGVtcHR5XG4iKTsKLQotCW1ib3hfdmFsdWUgPSByZWFkbChtYm94LT52aXJ0YmFzZV9sb2NhbCArIE1CT1hfRklGT19EQVRBKTsKLQl3cml0ZWwoTUJPWF9MQVRDSCwgKG1ib3gtPnZpcnRiYXNlX2xvY2FsICsgTUJPWF9GSUZPX1JFTU9WRSkpOwotCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiMHglWFxuIiwgbWJveF92YWx1ZSk7Ci19Ci0KLXN0YXRpYyBERVZJQ0VfQVRUUihmaWZvLCBTX0lXVUdPIHwgU19JUlVHTywgbWJveF9yZWFkX2ZpZm8sIG1ib3hfd3JpdGVfZmlmbyk7Ci0KLXN0YXRpYyBpbnQgbWJveF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7Ci0JdTggbWJveF9pbmRleCA9IDA7Ci0KLQlsaXN0X2Zvcl9lYWNoKHBvcywgJm1ib3hzKSB7Ci0JCXN0cnVjdCBtYm94ICptID0KLQkJCShzdHJ1Y3QgbWJveCAqKSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IG1ib3gsIGxpc3QpOwotCQlpZiAobSA9PSBOVUxMKSB7Ci0JCQlzZXFfcHJpbnRmKHMsCi0JCQkJICAgIlVuYWJsZSB0byByZXRyaWV2ZSBtYWlsYm94ICVkXG4iLAotCQkJCSAgIG1ib3hfaW5kZXgpOwotCQkJY29udGludWU7Ci0JCX0KLQotCQlzcGluX2xvY2soJm0tPmxvY2spOwotCQlpZiAoKG0tPnZpcnRiYXNlX3BlZXIgPT0gTlVMTCkgfHwgKG0tPnZpcnRiYXNlX2xvY2FsID09IE5VTEwpKSB7Ci0JCQlzZXFfcHJpbnRmKHMsICJNQUlMQk9YICVkIG5vdCBzZXR1cCBvciBjb3JydXB0XG4iLAotCQkJCSAgIG1ib3hfaW5kZXgpOwotCQkJc3Bpbl91bmxvY2soJm0tPmxvY2spOwotCQkJY29udGludWU7Ci0JCX0KLQotCQlzZXFfcHJpbnRmKHMsCi0JCSI9PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIKLQkJIiBNQUlMQk9YICVkXG4iCi0JCSIgUEVFUiBNQUlMQk9YIERVTVBcbiIKLQkJIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgotCQkiRklGTzogICAgICAgICAgICAgICAgIDB4JVggKCVkKVxuIgotCQkiRnJlZSAgICAgVGhyZXNob2xkOiAgIDB4JS4yWCAoJWQpXG4iCi0JCSJPY2N1cGllZCBUaHJlc2hvbGQ6ICAgMHglLjJYICglZClcbiIKLQkJIlN0YXR1czogICAgICAgICAgICAgICAweCUuMlggKCVkKVxuIgotCQkiICAgRnJlZSBzcGFjZXMgIChvdCk6ICAgICVkICglZClcbiIKLQkJIiAgIE9jY3VwIHNwYWNlcyAob3QpOiAgICAlZCAoJWQpXG4iCi0JCSI9PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIKLQkJIiBMT0NBTCBNQUlMQk9YIERVTVBcbiIKLQkJIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgotCQkiRklGTzogICAgICAgICAgICAgICAgIDB4JS5YICglZClcbiIKLQkJIkZyZWUgICAgIFRocmVzaG9sZDogICAweCUuMlggKCVkKVxuIgotCQkiT2NjdXBpZWQgVGhyZXNob2xkOiAgIDB4JS4yWCAoJWQpXG4iCi0JCSJTdGF0dXM6ICAgICAgICAgICAgICAgMHglLjJYICglZClcbiIKLQkJIiAgIEZyZWUgc3BhY2VzICAob3QpOiAgICAlZCAoJWQpXG4iCi0JCSIgICBPY2N1cCBzcGFjZXMgKG90KTogICAgJWQgKCVkKVxuIgotCQkiPT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iCi0JCSJ3cml0ZV9pbmRleDogJWRcbiIKLQkJInJlYWRfaW5kZXggOiAlZFxuIgotCQkiPT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iCi0JCSJcbiIsCi0JCW1ib3hfaW5kZXgsCi0JCXJlYWRsKG0tPnZpcnRiYXNlX3BlZXIgKyBNQk9YX0ZJRk9fREFUQSksCi0JCXJlYWRsKG0tPnZpcnRiYXNlX3BlZXIgKyBNQk9YX0ZJRk9fREFUQSksCi0JCXJlYWRsKG0tPnZpcnRiYXNlX3BlZXIgKyBNQk9YX0ZJRk9fVEhSRVNfRlJFRSksCi0JCXJlYWRsKG0tPnZpcnRiYXNlX3BlZXIgKyBNQk9YX0ZJRk9fVEhSRVNfRlJFRSksCi0JCXJlYWRsKG0tPnZpcnRiYXNlX3BlZXIgKyBNQk9YX0ZJRk9fVEhSRVNfT0NDVVApLAotCQlyZWFkbChtLT52aXJ0YmFzZV9wZWVyICsgTUJPWF9GSUZPX1RIUkVTX09DQ1VQKSwKLQkJcmVhZGwobS0+dmlydGJhc2VfcGVlciArIE1CT1hfRklGT19TVEFUVVMpLAotCQlyZWFkbChtLT52aXJ0YmFzZV9wZWVyICsgTUJPWF9GSUZPX1NUQVRVUyksCi0JCShyZWFkbChtLT52aXJ0YmFzZV9wZWVyICsgTUJPWF9GSUZPX1NUQVRVUykgPj4gNCkgJiAweDcsCi0JCShyZWFkbChtLT52aXJ0YmFzZV9wZWVyICsgTUJPWF9GSUZPX1NUQVRVUykgPj4gNykgJiAweDEsCi0JCShyZWFkbChtLT52aXJ0YmFzZV9wZWVyICsgTUJPWF9GSUZPX1NUQVRVUykgPj4gMCkgJiAweDcsCi0JCShyZWFkbChtLT52aXJ0YmFzZV9wZWVyICsgTUJPWF9GSUZPX1NUQVRVUykgPj4gMykgJiAweDEsCi0JCXJlYWRsKG0tPnZpcnRiYXNlX2xvY2FsICsgTUJPWF9GSUZPX0RBVEEpLAotCQlyZWFkbChtLT52aXJ0YmFzZV9sb2NhbCArIE1CT1hfRklGT19EQVRBKSwKLQkJcmVhZGwobS0+dmlydGJhc2VfbG9jYWwgKyBNQk9YX0ZJRk9fVEhSRVNfRlJFRSksCi0JCXJlYWRsKG0tPnZpcnRiYXNlX2xvY2FsICsgTUJPWF9GSUZPX1RIUkVTX0ZSRUUpLAotCQlyZWFkbChtLT52aXJ0YmFzZV9sb2NhbCArIE1CT1hfRklGT19USFJFU19PQ0NVUCksCi0JCXJlYWRsKG0tPnZpcnRiYXNlX2xvY2FsICsgTUJPWF9GSUZPX1RIUkVTX09DQ1VQKSwKLQkJcmVhZGwobS0+dmlydGJhc2VfbG9jYWwgKyBNQk9YX0ZJRk9fU1RBVFVTKSwKLQkJcmVhZGwobS0+dmlydGJhc2VfbG9jYWwgKyBNQk9YX0ZJRk9fU1RBVFVTKSwKLQkJKHJlYWRsKG0tPnZpcnRiYXNlX2xvY2FsICsgTUJPWF9GSUZPX1NUQVRVUykgPj4gNCkgJiAweDcsCi0JCShyZWFkbChtLT52aXJ0YmFzZV9sb2NhbCArIE1CT1hfRklGT19TVEFUVVMpID4+IDcpICYgMHgxLAotCQkocmVhZGwobS0+dmlydGJhc2VfbG9jYWwgKyBNQk9YX0ZJRk9fU1RBVFVTKSA+PiAwKSAmIDB4NywKLQkJKHJlYWRsKG0tPnZpcnRiYXNlX2xvY2FsICsgTUJPWF9GSUZPX1NUQVRVUykgPj4gMykgJiAweDEsCi0JCW0tPndyaXRlX2luZGV4LCBtLT5yZWFkX2luZGV4KTsKLQkJbWJveF9pbmRleCsrOwotCQlzcGluX3VubG9jaygmbS0+bG9jayk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbWJveF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBtYm94X3Nob3csIE5VTEwpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtYm94X29wZXJhdGlvbnMgPSB7Ci0JLm93bmVyID0gVEhJU19NT0RVTEUsCi0JLm9wZW4gPSBtYm94X29wZW4sCi0JLnJlYWQgPSBzZXFfcmVhZCwKLQkubGxzZWVrID0gc2VxX2xzZWVrLAotCS5yZWxlYXNlID0gc2luZ2xlX3JlbGVhc2UsCi19OwotI2VuZGlmCi0KLXN0YXRpYyBpcnFyZXR1cm5fdCBtYm94X2lycShpbnQgaXJxLCB2b2lkICphcmcpCi17Ci0JdTMyIG1ib3hfdmFsdWU7Ci0JaW50IG5icl9vY2N1cDsKLQlpbnQgbmJyX2ZyZWU7Ci0Jc3RydWN0IG1ib3ggKm1ib3ggPSAoc3RydWN0IG1ib3ggKikgYXJnOwotCi0Jc3Bpbl9sb2NrKCZtYm94LT5sb2NrKTsKLQotCWRldl9kYmcoJihtYm94LT5wZGV2LT5kZXYpLAotCQkibWJveCBJUlEgWyVkXSByZWNlaXZlZC4gcmkgPSAlZCwgd2kgPSAlZFxuIiwKLQkJaXJxLCBtYm94LT5yZWFkX2luZGV4LCBtYm94LT53cml0ZV9pbmRleCk7Ci0KLQkvKgotCSAqIENoZWNrIGlmIHdlIGhhdmUgYW55IG91dGdvaW5nIG1lc3NhZ2VzLCBhbmQgaWYgdGhlcmUgaXMgc3BhY2UgZm9yCi0JICogdGhlbSBpbiB0aGUgRklGTy4KLQkgKi8KLQlpZiAobWJveC0+cmVhZF9pbmRleCAhPSBtYm94LT53cml0ZV9pbmRleCkgewotCQkvKgotCQkgKiBDaGVjayBieSByZWFkaW5nIEZSRUUgZm9yIExPQ0FMIHNpbmNlIHRoYXQgaW5kaWNhdGVzCi0JCSAqIE9DQ1VQIGZvciBQRUVSCi0JCSAqLwotCQluYnJfZnJlZSA9IChyZWFkbChtYm94LT52aXJ0YmFzZV9sb2NhbCArIE1CT1hfRklGT19TVEFUVVMpCi0JCQkgICAgPj4gNCkgJiAweDc7Ci0JCWRldl9kYmcoJihtYm94LT5wZGV2LT5kZXYpLAotCQkJIlN0YXR1cyBpbmRpY2F0ZXMgJWQgZW1wdHkgc3BhY2VzIGluIHRoZSBGSUZPIVxuIiwKLQkJCW5icl9mcmVlKTsKLQotCQl3aGlsZSAoKG5icl9mcmVlID4gMCkgJiYKLQkJICAgICAgIChtYm94LT5yZWFkX2luZGV4ICE9IG1ib3gtPndyaXRlX2luZGV4KSkgewotCQkJLyogV3JpdGUgdGhlIG1lc3NhZ2UgYW5kIGxhdGNoIGl0IGludG8gdGhlIEZJRk8gKi8KLQkJCXdyaXRlbChtYm94LT5idWZmZXJbbWJveC0+cmVhZF9pbmRleF0sCi0JCQkgICAgICAgKG1ib3gtPnZpcnRiYXNlX3BlZXIgKyBNQk9YX0ZJRk9fREFUQSkpOwotCQkJd3JpdGVsKE1CT1hfTEFUQ0gsCi0JCQkgICAgICAgKG1ib3gtPnZpcnRiYXNlX3BlZXIgKyBNQk9YX0ZJRk9fQUREKSk7Ci0JCQlkZXZfZGJnKCYobWJveC0+cGRldi0+ZGV2KSwKLQkJCQkiV3JvdGUgbWVzc2FnZSAweCVYIHRvIGFkZHIgMHglWFxuIiwKLQkJCQltYm94LT5idWZmZXJbbWJveC0+cmVhZF9pbmRleF0sCi0JCQkJKHUzMikgKG1ib3gtPnZpcnRiYXNlX3BlZXIgKyBNQk9YX0ZJRk9fREFUQSkpOwotCi0JCQluYnJfZnJlZS0tOwotCQkJbWJveC0+cmVhZF9pbmRleCA9Ci0JCQkJKG1ib3gtPnJlYWRfaW5kZXggKyAxKSAlIE1CT1hfQlVGX1NJWkU7Ci0JCX0KLQotCQkvKgotCQkgKiBDaGVjayBpZiB3ZSBzdGlsbCB3YW50IElSUTpzIHdoZW4gdGhlcmUgaXMgZnJlZQotCQkgKiBzcGFjZSB0byBzZW5kCi0JCSAqLwotCQlpZiAobWJveC0+cmVhZF9pbmRleCAhPSBtYm94LT53cml0ZV9pbmRleCkgewotCQkJZGV2X2RiZygmKG1ib3gtPnBkZXYtPmRldiksCi0JCQkJIlN0aWxsIGhhdmUgbWVzc2FnZXMgdG8gc2VuZCwgYnV0IEZJRk8gZnVsbC4gIgotCQkJCSJSZXF1ZXN0IElSUSBhZ2FpbiFcbiIpOwotCQkJd3JpdGVsKE1CT1hfRU5BQkxFX0lSUSwKLQkJCSAgICAgICBtYm94LT52aXJ0YmFzZV9wZWVyICsgTUJPWF9GSUZPX1RIUkVTX0ZSRUUpOwotCQl9IGVsc2UgewotCQkJZGV2X2RiZygmKG1ib3gtPnBkZXYtPmRldiksCi0JCQkJIk5vIG1vcmUgbWVzc2FnZXMgdG8gc2VuZC4gIgotCQkJCSJEbyBub3QgcmVxdWVzdCBJUlEgYWdhaW4hXG4iKTsKLQkJCXdyaXRlbChNQk9YX0RJU0FCTEVfSVJRLAotCQkJICAgICAgIG1ib3gtPnZpcnRiYXNlX3BlZXIgKyBNQk9YX0ZJRk9fVEhSRVNfRlJFRSk7Ci0JCX0KLQotCQkvKgotCQkgKiBDaGVjayBpZiB3ZSBjYW4gc2lnbmFsIGFueSBibG9ja2VkIGNsaWVudHMgdGhhdCBpdCBpcyBPSyB0bwotCQkgKiBzdGFydCBidWZmZXJpbmcgYWdhaW4KLQkJICovCi0JCWlmIChtYm94LT5jbGllbnRfYmxvY2tlZCAmJgotCQkgICAgKCgobWJveC0+d3JpdGVfaW5kZXggKyAxKSAlIE1CT1hfQlVGX1NJWkUpCi0JCSAgICAgIT0gbWJveC0+cmVhZF9pbmRleCkpIHsKLQkJCWRldl9kYmcoJihtYm94LT5wZGV2LT5kZXYpLAotCQkJCSJXYWtpbmcgdXAgYmxvY2tlZCBjbGllbnRcbiIpOwotCQkJY29tcGxldGUoJm1ib3gtPmJ1ZmZlcl9hdmFpbGFibGUpOwotCQkJbWJveC0+Y2xpZW50X2Jsb2NrZWQgPSAwOwotCQl9Ci0JfQotCi0JLyogQ2hlY2sgaWYgd2UgaGF2ZSBhbnkgaW5jb21pbmcgbWVzc2FnZXMgKi8KLQluYnJfb2NjdXAgPSByZWFkbChtYm94LT52aXJ0YmFzZV9sb2NhbCArIE1CT1hfRklGT19TVEFUVVMpICYgMHg3OwotCWlmIChuYnJfb2NjdXAgPT0gMCkKLQkJZ290byBleGl0OwotCi0JaWYgKG1ib3gtPmNiID09IE5VTEwpIHsKLQkJZGV2X2RiZygmKG1ib3gtPnBkZXYtPmRldiksICJObyByZWNlaXZlIGNhbGxiYWNrIHJlZ2lzdGVyZWQsICIKLQkJCSJsZWF2aW5nICVkIGluY29taW5nIG1lc3NhZ2VzIGluIGZpZm8hXG4iLCBuYnJfb2NjdXApOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JLyogUmVhZCBhbmQgYWNrbm93bGVkZ2UgdGhlIG1lc3NhZ2UgKi8KLQltYm94X3ZhbHVlID0gcmVhZGwobWJveC0+dmlydGJhc2VfbG9jYWwgKyBNQk9YX0ZJRk9fREFUQSk7Ci0Jd3JpdGVsKE1CT1hfTEFUQ0gsIChtYm94LT52aXJ0YmFzZV9sb2NhbCArIE1CT1hfRklGT19SRU1PVkUpKTsKLQotCS8qIE5vdGlmeSBjb25zdW1lciBvZiBuZXcgbWFpbGJveCBtZXNzYWdlICovCi0JZGV2X2RiZygmKG1ib3gtPnBkZXYtPmRldiksICJDYWxsaW5nIGNhbGxiYWNrIGZvciBtZXNzYWdlIDB4JVghXG4iLAotCQltYm94X3ZhbHVlKTsKLQltYm94LT5jYihtYm94X3ZhbHVlLCBtYm94LT5jbGllbnRfZGF0YSk7Ci0KLWV4aXQ6Ci0JZGV2X2RiZygmKG1ib3gtPnBkZXYtPmRldiksICJFeGl0IG1ib3ggSVJRLiByaSA9ICVkLCB3aSA9ICVkXG4iLAotCQltYm94LT5yZWFkX2luZGV4LCBtYm94LT53cml0ZV9pbmRleCk7Ci0Jc3Bpbl91bmxvY2soJm1ib3gtPmxvY2spOwotCi0JcmV0dXJuIElSUV9IQU5ETEVEOwotfQotCi0vKiBTZXR1cCBpcyBleGVjdXRlZCBvbmNlIGZvciBlYWNoIG1ib3ggcGFpciAqLwotc3RydWN0IG1ib3ggKm1ib3hfc2V0dXAodTggbWJveF9pZCwgbWJveF9yZWN2X2NiX3QgKm1ib3hfY2IsIHZvaWQgKnByaXYpCi17Ci0Jc3RydWN0IHJlc291cmNlICpyZXNvdXJjZTsKLQlpbnQgaXJxOwotCWludCByZXM7Ci0Jc3RydWN0IG1ib3ggKm1ib3g7Ci0KLQltYm94ID0gZ2V0X21ib3hfd2l0aF9pZChtYm94X2lkKTsKLQlpZiAobWJveCA9PSBOVUxMKSB7Ci0JCWRldl9lcnIoJihtYm94LT5wZGV2LT5kZXYpLCAiSW5jb3JyZWN0IG1haWxib3ggaWQ6ICVkIVxuIiwKLQkJCW1ib3hfaWQpOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JLyoKLQkgKiBDaGVjayBpZiBtYWlsYm94IGhhcyBiZWVuIGFsbG9jYXRlZCB0byBzb21lb25lIGVsc2UsCi0JICogb3RoZXJ3aXNlIGFsbG9jYXRlIGl0Ci0JICovCi0JaWYgKG1ib3gtPmFsbG9jYXRlZCkgewotCQlkZXZfZXJyKCYobWJveC0+cGRldi0+ZGV2KSwgIk1haWxib3ggbnVtYmVyICVkIGlzIGJ1c3khXG4iLAotCQkJbWJveF9pZCk7Ci0JCW1ib3ggPSBOVUxMOwotCQlnb3RvIGV4aXQ7Ci0JfQotCW1ib3gtPmFsbG9jYXRlZCA9IHRydWU7Ci0KLQlkZXZfZGJnKCYobWJveC0+cGRldi0+ZGV2KSwgIkluaXRpYXRpbmcgbWFpbGJveCBudW1iZXIgJWQ6IDB4JVguLi5cbiIsCi0JCW1ib3hfaWQsICh1MzIpbWJveCk7Ci0KLQltYm94LT5jbGllbnRfZGF0YSA9IHByaXY7Ci0JbWJveC0+Y2IgPSBtYm94X2NiOwotCi0JLyogR2V0IGFkZHIgZm9yIHBlZXIgbWFpbGJveCBhbmQgaW9yZW1hcCBpdCAqLwotCXJlc291cmNlID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShtYm94LT5wZGV2LAotCQkJCQkJSU9SRVNPVVJDRV9NRU0sCi0JCQkJCQkibWJveF9wZWVyIik7Ci0JaWYgKHJlc291cmNlID09IE5VTEwpIHsKLQkJZGV2X2VycigmKG1ib3gtPnBkZXYtPmRldiksCi0JCQkiVW5hYmxlIHRvIHJldHJpZXZlIG1ib3ggcGVlciByZXNvdXJjZVxuIik7Ci0JCW1ib3ggPSBOVUxMOwotCQlnb3RvIGV4aXQ7Ci0JfQotCWRldl9kYmcoJihtYm94LT5wZGV2LT5kZXYpLAotCQkiUmVzb3VyY2UgbmFtZTogJXMgc3RhcnQ6IDB4JVgsIGVuZDogMHglWFxuIiwKLQkJcmVzb3VyY2UtPm5hbWUsIHJlc291cmNlLT5zdGFydCwgcmVzb3VyY2UtPmVuZCk7Ci0JbWJveC0+dmlydGJhc2VfcGVlciA9Ci0JCWlvcmVtYXAocmVzb3VyY2UtPnN0YXJ0LCByZXNvdXJjZS0+ZW5kIC0gcmVzb3VyY2UtPnN0YXJ0KTsKLQlpZiAoIW1ib3gtPnZpcnRiYXNlX3BlZXIpIHsKLQkJZGV2X2VycigmKG1ib3gtPnBkZXYtPmRldiksICJVbmFibGUgdG8gaW9yZW1hcCBwZWVyIG1ib3hcbiIpOwotCQltYm94ID0gTlVMTDsKLQkJZ290byBleGl0OwotCX0KLQlkZXZfZGJnKCYobWJveC0+cGRldi0+ZGV2KSwKLQkJImlvcmVtYXBwZWQgcGVlciBwaHlzaWNhbDogKDB4JVgtMHglWCkgdG8gdmlydHVhbDogMHglWFxuIiwKLQkJcmVzb3VyY2UtPnN0YXJ0LCByZXNvdXJjZS0+ZW5kLCAodTMyKSBtYm94LT52aXJ0YmFzZV9wZWVyKTsKLQotCS8qIEdldCBhZGRyIGZvciBsb2NhbCBtYWlsYm94IGFuZCBpb3JlbWFwIGl0ICovCi0JcmVzb3VyY2UgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKG1ib3gtPnBkZXYsCi0JCQkJCQlJT1JFU09VUkNFX01FTSwKLQkJCQkJCSJtYm94X2xvY2FsIik7Ci0JaWYgKHJlc291cmNlID09IE5VTEwpIHsKLQkJZGV2X2VycigmKG1ib3gtPnBkZXYtPmRldiksCi0JCQkiVW5hYmxlIHRvIHJldHJpZXZlIG1ib3ggbG9jYWwgcmVzb3VyY2VcbiIpOwotCQltYm94ID0gTlVMTDsKLQkJZ290byBleGl0OwotCX0KLQlkZXZfZGJnKCYobWJveC0+cGRldi0+ZGV2KSwKLQkJIlJlc291cmNlIG5hbWU6ICVzIHN0YXJ0OiAweCVYLCBlbmQ6IDB4JVhcbiIsCi0JCXJlc291cmNlLT5uYW1lLCByZXNvdXJjZS0+c3RhcnQsIHJlc291cmNlLT5lbmQpOwotCW1ib3gtPnZpcnRiYXNlX2xvY2FsID0KLQkJaW9yZW1hcChyZXNvdXJjZS0+c3RhcnQsIHJlc291cmNlLT5lbmQgLSByZXNvdXJjZS0+c3RhcnQpOwotCWlmICghbWJveC0+dmlydGJhc2VfbG9jYWwpIHsKLQkJZGV2X2VycigmKG1ib3gtPnBkZXYtPmRldiksICJVbmFibGUgdG8gaW9yZW1hcCBsb2NhbCBtYm94XG4iKTsKLQkJbWJveCA9IE5VTEw7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0JZGV2X2RiZygmKG1ib3gtPnBkZXYtPmRldiksCi0JCSJpb3JlbWFwcGVkIGxvY2FsIHBoeXNpY2FsOiAoMHglWC0weCVYKSB0byB2aXJ0dWFsOiAweCVYXG4iLAotCQlyZXNvdXJjZS0+c3RhcnQsIHJlc291cmNlLT5lbmQsICh1MzIpIG1ib3gtPnZpcnRiYXNlX3BlZXIpOwotCi0JaW5pdF9jb21wbGV0aW9uKCZtYm94LT5idWZmZXJfYXZhaWxhYmxlKTsKLQltYm94LT5jbGllbnRfYmxvY2tlZCA9IDA7Ci0KLQkvKiBHZXQgSVJRIGZvciBtYWlsYm94IGFuZCBhbGxvY2F0ZSBpdCAqLwotCWlycSA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKG1ib3gtPnBkZXYsICJtYm94X2lycSIpOwotCWlmIChpcnEgPCAwKSB7Ci0JCWRldl9lcnIoJihtYm94LT5wZGV2LT5kZXYpLAotCQkJIlVuYWJsZSB0byByZXRyaWV2ZSBtYm94IGlycSByZXNvdXJjZVxuIik7Ci0JCW1ib3ggPSBOVUxMOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JZGV2X2RiZygmKG1ib3gtPnBkZXYtPmRldiksICJBbGxvY2F0aW5nIGlycSAlZC4uLlxuIiwgaXJxKTsKLQlyZXMgPSByZXF1ZXN0X2lycShpcnEsIG1ib3hfaXJxLCAwLCBtYm94LT5uYW1lLCAodm9pZCAqKSBtYm94KTsKLQlpZiAocmVzIDwgMCkgewotCQlkZXZfZXJyKCYobWJveC0+cGRldi0+ZGV2KSwKLQkJCSJVbmFibGUgdG8gYWxsb2NhdGUgbWJveCBpcnEgJWRcbiIsIGlycSk7Ci0JCW1ib3ggPSBOVUxMOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JLyogU2V0IHVwIG1haWxib3ggdG8gbm90IGxhdW5jaCBJUlEgb24gZnJlZSBzcGFjZSBpbiBtYWlsYm94ICovCi0Jd3JpdGVsKE1CT1hfRElTQUJMRV9JUlEsIG1ib3gtPnZpcnRiYXNlX3BlZXIgKyBNQk9YX0ZJRk9fVEhSRVNfRlJFRSk7Ci0KLQkvKgotCSAqIFNldCB1cCBtYWlsYm94IHRvIGxhdW5jaCBJUlEgb24gbmV3IG1lc3NhZ2UgaWYgd2UgaGF2ZQotCSAqIGEgY2FsbGJhY2sgc2V0LiBJZiBub3QsIGRvIG5vdCByYWlzZSBJUlEsIGJ1dCBrZWVwIG1lc3NhZ2UKLQkgKiBpbiBGSUZPIGZvciBtYW51YWwgcmV0cmlldmFsCi0JICovCi0JaWYgKG1ib3hfY2IgIT0gTlVMTCkKLQkJd3JpdGVsKE1CT1hfRU5BQkxFX0lSUSwKLQkJICAgICAgIG1ib3gtPnZpcnRiYXNlX2xvY2FsICsgTUJPWF9GSUZPX1RIUkVTX09DQ1VQKTsKLQllbHNlCi0JCXdyaXRlbChNQk9YX0RJU0FCTEVfSVJRLAotCQkgICAgICAgbWJveC0+dmlydGJhc2VfbG9jYWwgKyBNQk9YX0ZJRk9fVEhSRVNfT0NDVVApOwotCi0jaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpCi0JcmVzID0gZGV2aWNlX2NyZWF0ZV9maWxlKCYobWJveC0+cGRldi0+ZGV2KSwgJmRldl9hdHRyX2ZpZm8pOwotCWlmIChyZXMgIT0gMCkKLQkJZGV2X3dhcm4oJihtYm94LT5wZGV2LT5kZXYpLAotCQkJICJVbmFibGUgdG8gY3JlYXRlIG1ib3ggc3lzZnMgZW50cnkiKTsKLQotCSh2b2lkKSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJtYm94IiwgU19JRlJFRyB8IFNfSVJVR08sIE5VTEwsCi0JCQkJICAgTlVMTCwgJm1ib3hfb3BlcmF0aW9ucyk7Ci0jZW5kaWYKLQotCWRldl9pbmZvKCYobWJveC0+cGRldi0+ZGV2KSwKLQkJICJNYWlsYm94IGRyaXZlciB3aXRoIGluZGV4ICVkIGluaXRhdGVkIVxuIiwgbWJveF9pZCk7Ci0KLWV4aXQ6Ci0JcmV0dXJuIG1ib3g7Ci19Ci1FWFBPUlRfU1lNQk9MKG1ib3hfc2V0dXApOwotCi0KLWludCBfX2luaXQgbWJveF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCXN0cnVjdCBtYm94IGxvY2FsX21ib3g7Ci0Jc3RydWN0IG1ib3ggKm1ib3g7Ci0JaW50IHJlcyA9IDA7Ci0JZGV2X2RiZygmKHBkZXYtPmRldiksICJQcm9iaW5nIG1haWxib3ggKHBkZXYgPSAweCVYKS4uLlxuIiwgKHUzMikgcGRldik7Ci0KLQltZW1zZXQoJmxvY2FsX21ib3gsIDB4MCwgc2l6ZW9mKHN0cnVjdCBtYm94KSk7Ci0KLQkvKiBBc3NvY2lhdGUgb3VyIG1ib3ggZGF0YSB3aXRoIHRoZSBwbGF0Zm9ybSBkZXZpY2UgKi8KLQlyZXMgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX2RhdGEocGRldiwKLQkJCQkgICAgICAgKHZvaWQgKikgJmxvY2FsX21ib3gsCi0JCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgbWJveCkpOwotCWlmIChyZXMgIT0gMCkgewotCQlkZXZfZXJyKCYocGRldi0+ZGV2KSwKLQkJCSJVbmFibGUgdG8gYWxsb2NhdGUgZHJpdmVyIHBsYXRmb3JtIGRhdGEhXG4iKTsKLQkJZ290byBleGl0OwotCX0KLQotCW1ib3ggPSAoc3RydWN0IG1ib3ggKikgcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7Ci0JbWJveC0+cGRldiA9IHBkZXY7Ci0JbWJveC0+d3JpdGVfaW5kZXggPSAwOwotCW1ib3gtPnJlYWRfaW5kZXggPSAwOwotCi0JSU5JVF9MSVNUX0hFQUQoJihtYm94LT5saXN0KSk7Ci0JbGlzdF9hZGRfdGFpbCgmKG1ib3gtPmxpc3QpLCAmbWJveHMpOwotCi0Jc3ByaW50ZihtYm94LT5uYW1lLCAiJXMiLCBNQk9YX05BTUUpOwotCXNwaW5fbG9ja19pbml0KCZtYm94LT5sb2NrKTsKLQotCWRldl9pbmZvKCYocGRldi0+ZGV2KSwgIk1haWxib3ggZHJpdmVyIGxvYWRlZFxuIik7Ci0KLWV4aXQ6Ci0JcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbWJveF9kcml2ZXIgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm5hbWUgPSBNQk9YX05BTUUsCi0JCS5vd25lciA9IFRISVNfTU9EVUxFLAotCX0sCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBtYm94X2luaXQodm9pZCkKLXsKLQlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3Byb2JlKCZtYm94X2RyaXZlciwgbWJveF9wcm9iZSk7Ci19Ci0KLW1vZHVsZV9pbml0KG1ib3hfaW5pdCk7Ci0KLXZvaWQgX19leGl0IG1ib3hfZXhpdCh2b2lkKQotewotCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZtYm94X2RyaXZlcik7Ci19Ci0KLW1vZHVsZV9leGl0KG1ib3hfZXhpdCk7Ci0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9ERVNDUklQVElPTigiTUJPWCBkcml2ZXIiKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdXg1MDAvbW9kZW1faXJxLmMgYi9hcmNoL2FybS9tYWNoLXV4NTAwL21vZGVtLWlycS1kYjU1MDAuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC11eDUwMC9tb2RlbV9pcnEuYwpyZW5hbWUgdG8gYXJjaC9hcm0vbWFjaC11eDUwMC9tb2RlbS1pcnEtZGI1NTAwLmMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdXg1MDAvcGxhdHNtcC5jIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9wbGF0c21wLmMKaW5kZXggOWU0YzY3OC4uZDc3ZTc2YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC11eDUwMC9wbGF0c21wLmMKKysrIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9wbGF0c21wLmMKQEAgLTE4LDcgKzE4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KLSNpbmNsdWRlIDxhc20vbG9jYWx0aW1lci5oPgogI2luY2x1ZGUgPGFzbS9zbXBfc2N1Lmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCkBAIC0yNiwzMSArMjUsMzcgQEAKICAqIGNvbnRyb2wgZm9yIHdoaWNoIGNvcmUgaXMgdGhlIG5leHQgdG8gY29tZSBvdXQgb2YgdGhlIHNlY29uZGFyeQogICogYm9vdCAiaG9sZGluZyBwZW4iCiAgKi8KLXZvbGF0aWxlIGludCBfX2NwdWluaXRkYXRhIHBlbl9yZWxlYXNlID0gLTE7Cit2b2xhdGlsZSBpbnQgcGVuX3JlbGVhc2UgPSAtMTsKIAotc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQgZ2V0X2NvcmVfY291bnQodm9pZCkKKy8qCisgKiBXcml0ZSBwZW5fcmVsZWFzZSBpbiBhIHdheSB0aGF0IGlzIGd1YXJhbnRlZWQgdG8gYmUgdmlzaWJsZSB0byBhbGwKKyAqIG9ic2VydmVycywgaXJyZXNwZWN0aXZlIG9mIHdoZXRoZXIgdGhleSdyZSB0YWtpbmcgcGFydCBpbiBjb2hlcmVuY3kKKyAqIG9yIG5vdC4gIFRoaXMgaXMgbmVjZXNzYXJ5IGZvciB0aGUgaG90cGx1ZyBjb2RlIHRvIHdvcmsgcmVsaWFibHkuCisgKi8KK3N0YXRpYyB2b2lkIHdyaXRlX3Blbl9yZWxlYXNlKGludCB2YWwpCiB7Ci0JcmV0dXJuIHNjdV9nZXRfY29yZV9jb3VudChfX2lvX2FkZHJlc3MoVVg1MDBfU0NVX0JBU0UpKTsKKwlwZW5fcmVsZWFzZSA9IHZhbDsKKwlzbXBfd21iKCk7CisJX19jcHVjX2ZsdXNoX2RjYWNoZV9hcmVhKCh2b2lkICopJnBlbl9yZWxlYXNlLCBzaXplb2YocGVuX3JlbGVhc2UpKTsKKwlvdXRlcl9jbGVhbl9yYW5nZShfX3BhKCZwZW5fcmVsZWFzZSksIF9fcGEoJnBlbl9yZWxlYXNlICsgMSkpOwogfQogCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGJvb3RfbG9jayk7CiAKIHZvaWQgX19jcHVpbml0IHBsYXRmb3JtX3NlY29uZGFyeV9pbml0KHVuc2lnbmVkIGludCBjcHUpCiB7Ci0JdHJhY2VfaGFyZGlycXNfb2ZmKCk7Ci0KIAkvKgogCSAqIGlmIGFueSBpbnRlcnJ1cHRzIGFyZSBhbHJlYWR5IGVuYWJsZWQgZm9yIHRoZSBwcmltYXJ5CiAJICogY29yZSAoZS5nLiB0aW1lciBpcnEpLCB0aGVuIHRoZXkgd2lsbCBub3QgaGF2ZSBiZWVuIGVuYWJsZWQKIAkgKiBmb3IgdXM6IGRvIHNvCiAJICovCi0JZ2ljX2NwdV9pbml0KDAsIF9faW9fYWRkcmVzcyhVWDUwMF9HSUNfQ1BVX0JBU0UpKTsKKwlnaWNfc2Vjb25kYXJ5X2luaXQoMCk7CiAKIAkvKgogCSAqIGxldCB0aGUgcHJpbWFyeSBwcm9jZXNzb3Iga25vdyB3ZSdyZSBvdXQgb2YgdGhlCiAJICogcGVuLCB0aGVuIGhlYWQgb2ZmIGludG8gdGhlIEMgZW50cnkgcG9pbnQKIAkgKi8KLQlwZW5fcmVsZWFzZSA9IC0xOworCXdyaXRlX3Blbl9yZWxlYXNlKC0xKTsKIAogCS8qCiAJICogU3luY2hyb25pc2Ugd2l0aCB0aGUgYm9vdCB0aHJlYWQuCkBAIC03NCwxMSArNzksOSBAQAogCSAqIHRoZSBob2xkaW5nIHBlbiAtIHJlbGVhc2UgaXQsIHRoZW4gd2FpdCBmb3IgaXQgdG8gZmxhZwogCSAqIHRoYXQgaXQgaGFzIGJlZW4gcmVsZWFzZWQgYnkgcmVzZXR0aW5nIHBlbl9yZWxlYXNlLgogCSAqLwotCXBlbl9yZWxlYXNlID0gY3B1OwotCV9fY3B1Y19mbHVzaF9kY2FjaGVfYXJlYSgodm9pZCAqKSZwZW5fcmVsZWFzZSwgc2l6ZW9mKHBlbl9yZWxlYXNlKSk7Ci0Jb3V0ZXJfY2xlYW5fcmFuZ2UoX19wYSgmcGVuX3JlbGVhc2UpLCBfX3BhKCZwZW5fcmVsZWFzZSkgKyAxKTsKKwl3cml0ZV9wZW5fcmVsZWFzZShjcHUpOwogCi0Jc21wX2Nyb3NzX2NhbGwoY3B1bWFza19vZihjcHUpKTsKKwlzbXBfY3Jvc3NfY2FsbChjcHVtYXNrX29mKGNwdSksIDEpOwogCiAJdGltZW91dCA9IGppZmZpZXMgKyAoMSAqIEhaKTsKIAl3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpIHsKQEAgLTk3LDkgKzEwMCw2IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCB3YWtldXBfc2Vjb25kYXJ5KHZvaWQpCiB7Ci0JLyogbm9ib2R5IGlzIHRvIGJlIHJlbGVhc2VkIGZyb20gdGhlIHBlbiB5ZXQgKi8KLQlwZW5fcmVsZWFzZSA9IC0xOwotCiAJLyoKIAkgKiB3cml0ZSB0aGUgYWRkcmVzcyBvZiBzZWNvbmRhcnkgc3RhcnR1cCBpbnRvIHRoZSBiYWNrdXAgcmFtIHJlZ2lzdGVyCiAJICogYXQgb2Zmc2V0IDB4MUZGNCwgdGhlbiB3cml0ZSB0aGUgbWFnaWMgbnVtYmVyIDB4QTFGRUVEMDEgdG8gdGhlCkBAIC0xMjYsNDEgKzEyNiwyNyBAQAogICovCiB2b2lkIF9faW5pdCBzbXBfaW5pdF9jcHVzKHZvaWQpCiB7Ci0JdW5zaWduZWQgaW50IGksIG5jb3JlcyA9IGdldF9jb3JlX2NvdW50KCk7CisJdW5zaWduZWQgaW50IGksIG5jb3JlczsKKworCW5jb3JlcyA9IHNjdV9nZXRfY29yZV9jb3VudChfX2lvX2FkZHJlc3MoVVg1MDBfU0NVX0JBU0UpKTsKKworCS8qIHNhbml0eSBjaGVjayAqLworCWlmIChuY29yZXMgPiBOUl9DUFVTKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJICAgICAgICJVODUwMDogbm8uIG9mIGNvcmVzICglZCkgZ3JlYXRlciB0aGFuIGNvbmZpZ3VyZWQgIgorCQkgICAgICAgIm1heGltdW0gb2YgJWQgLSBjbGlwcGluZ1xuIiwKKwkJICAgICAgIG5jb3JlcywgTlJfQ1BVUyk7CisJCW5jb3JlcyA9IE5SX0NQVVM7CisJfQogCiAJZm9yIChpID0gMDsgaSA8IG5jb3JlczsgaSsrKQogCQlzZXRfY3B1X3Bvc3NpYmxlKGksIHRydWUpOwogfQogCi12b2lkIF9faW5pdCBzbXBfcHJlcGFyZV9jcHVzKHVuc2lnbmVkIGludCBtYXhfY3B1cykKK3ZvaWQgX19pbml0IHBsYXRmb3JtX3NtcF9wcmVwYXJlX2NwdXModW5zaWduZWQgaW50IG1heF9jcHVzKQogewotCXVuc2lnbmVkIGludCBuY29yZXMgPSBnZXRfY29yZV9jb3VudCgpOwotCXVuc2lnbmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJaW50IGk7CiAKLQkvKiBzYW5pdHkgY2hlY2sgKi8KLQlpZiAobmNvcmVzID09IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiVTg1MDA6IHN0cmFuZ2UgQ00gY291bnQgb2YgMD8gRGVmYXVsdCB0byAxXG4iKTsKLQkJbmNvcmVzID0gMTsKLQl9Ci0KLQlpZiAobmNvcmVzID4gbnVtX3Bvc3NpYmxlX2NwdXMoKSkJewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiVTg1MDA6IG5vLiBvZiBjb3JlcyAoJWQpIGdyZWF0ZXIgdGhhbiBjb25maWd1cmVkICIKLQkJICAgICAgICJtYXhpbXVtIG9mICVkIC0gY2xpcHBpbmdcbiIsCi0JCSAgICAgICBuY29yZXMsIG51bV9wb3NzaWJsZV9jcHVzKCkpOwotCQluY29yZXMgPSBudW1fcG9zc2libGVfY3B1cygpOwotCX0KLQotCXNtcF9zdG9yZV9jcHVfaW5mbyhjcHUpOwotCi0JLyoKLQkgKiBhcmUgd2UgdHJ5aW5nIHRvIGJvb3QgbW9yZSBjb3JlcyB0aGFuIGV4aXN0PwotCSAqLwotCWlmIChtYXhfY3B1cyA+IG5jb3JlcykKLQkJbWF4X2NwdXMgPSBuY29yZXM7Ci0KIAkvKgogCSAqIEluaXRpYWxpc2UgdGhlIHByZXNlbnQgbWFwLCB3aGljaCBkZXNjcmliZXMgdGhlIHNldCBvZiBDUFVzCiAJICogYWN0dWFsbHkgcG9wdWxhdGVkIGF0IHRoZSBwcmVzZW50IHRpbWUuCkBAIC0xNjgsMTMgKzE1NCw2IEBACiAJZm9yIChpID0gMDsgaSA8IG1heF9jcHVzOyBpKyspCiAJCXNldF9jcHVfcHJlc2VudChpLCB0cnVlKTsKIAotCWlmIChtYXhfY3B1cyA+IDEpIHsKLQkJLyoKLQkJICogRW5hYmxlIHRoZSBsb2NhbCB0aW1lciBvciBicm9hZGNhc3QgZGV2aWNlIGZvciB0aGUKLQkJICogYm9vdCBDUFUsIGJ1dCBvbmx5IGlmIHdlIGhhdmUgbW9yZSB0aGFuIG9uZSBDUFUuCi0JCSAqLwotCQlwZXJjcHVfdGltZXJfc2V0dXAoKTsKLQkJc2N1X2VuYWJsZShfX2lvX2FkZHJlc3MoVVg1MDBfU0NVX0JBU0UpKTsKLQkJd2FrZXVwX3NlY29uZGFyeSgpOwotCX0KKwlzY3VfZW5hYmxlKF9faW9fYWRkcmVzcyhVWDUwMF9TQ1VfQkFTRSkpOworCXdha2V1cF9zZWNvbmRhcnkoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdXg1MDAvcHJjbXUuYyBiL2FyY2gvYXJtL21hY2gtdXg1MDAvcHJjbXUuYwppbmRleCAyOTMyNzRkLi5jNTIyZDI2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXV4NTAwL3ByY211LmMKKysrIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9wcmNtdS5jCkBAIC0xLDEwICsxLDE0IEBACiAvKgotICogQ29weXJpZ2h0IChDKSBTVCBFcmljc3NvbiBTQSAyMDEwCisgKiBDb3B5cmlnaHQgKEMpIFNUTWljcm9lbGVjdHJvbmljcyAyMDA5CisgKiBDb3B5cmlnaHQgKEMpIFNULUVyaWNzc29uIFNBIDIwMTAKICAqCiAgKiBMaWNlbnNlIFRlcm1zOiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2MgorICogQXV0aG9yOiBLdW1hciBTYW5naHZpIDxrdW1hci5zYW5naHZpQHN0ZXJpY3Nzb24uY29tPgorICogQXV0aG9yOiBTdW5kYXIgSXllciA8c3VuZGFyLml5ZXJAc3Rlcmljc3Nvbi5jb20+CiAgKiBBdXRob3I6IE1hdHRpYXMgTmlsc3NvbiA8bWF0dGlhcy5pLm5pbHNzb25Ac3Rlcmljc3Nvbi5jb20+CiAgKgotICogVTg1MDAgUFJDTVUgZHJpdmVyLgorICogVTg1MDAgUFJDTSBVbml0IGludGVyZmFjZSBkcml2ZXIKKyAqCiAgKi8KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTE5LDExICsyMywyNiBAQAogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvcHJjbXUtcmVncy5oPgorI2luY2x1ZGUgPG1hY2gvcHJjbXUtZGVmcy5oPgogCi0jZGVmaW5lIFBSQ01VX1RDRE1fQkFTRSBfX2lvX2FkZHJlc3MoVTg1MDBfUFJDTVVfVENETV9CQVNFKQorLyogR2xvYmFsIHZhciB0byBydW50aW1lIGRldGVybWluZSBUQ0RNIGJhc2UgZm9yIHYyIG9yIHYxICovCitzdGF0aWMgX19pb21lbSB2b2lkICp0Y2RtX2Jhc2U7CiAKLSNkZWZpbmUgUkVRX01CNSAoUFJDTVVfVENETV9CQVNFICsgMHhFNDQpCi0jZGVmaW5lIEFDS19NQjUgKFBSQ01VX1RDRE1fQkFTRSArIDB4REY0KQorI2RlZmluZSBfTUJPWF9IRUFERVIJCSh0Y2RtX2Jhc2UgKyAweEZFOCkKKyNkZWZpbmUgTUJPWF9IRUFERVJfUkVRX01CMAkoX01CT1hfSEVBREVSICsgMHgwKQorCisjZGVmaW5lIFJFUV9NQjEgKHRjZG1fYmFzZSArIDB4RkQwKQorI2RlZmluZSBSRVFfTUI1ICh0Y2RtX2Jhc2UgKyAweEU0NCkKKworI2RlZmluZSBSRVFfTUIxX0FSTU9QUAkJKFJFUV9NQjEgKyAweDApCisjZGVmaW5lIFJFUV9NQjFfQVBFT1BQCQkoUkVRX01CMSArIDB4MSkKKyNkZWZpbmUgUkVRX01CMV9CT09TVE9QUAkoUkVRX01CMSArIDB4MikKKworI2RlZmluZSBBQ0tfTUIxICh0Y2RtX2Jhc2UgKyAweEUwNCkKKyNkZWZpbmUgQUNLX01CNSAodGNkbV9iYXNlICsgMHhERjQpCisKKyNkZWZpbmUgQUNLX01CMV9DVVJSX0FSTU9QUAkJKEFDS19NQjEgKyAweDApCisjZGVmaW5lIEFDS19NQjFfQ1VSUl9BUEVPUFAJCShBQ0tfTUIxICsgMHgxKQogCiAjZGVmaW5lIFJFUV9NQjVfSTJDX1NMQVZFX09QIChSRVFfTUI1KQogI2RlZmluZSBSRVFfTUI1X0kyQ19IV19CSVRTIChSRVFfTUI1ICsgMSkKQEAgLTMzLDEwICs1MiwzMyBAQAogI2RlZmluZSBBQ0tfTUI1X0kyQ19TVEFUVVMgKEFDS19NQjUgKyAxKQogI2RlZmluZSBBQ0tfTUI1X0kyQ19WQUwgKEFDS19NQjUgKyAzKQogCi0jZGVmaW5lIEkyQ19XUklURShzbGF2ZSkgKChzbGF2ZSkgPDwgMSkKLSNkZWZpbmUgSTJDX1JFQUQoc2xhdmUpICgoKHNsYXZlKSA8PCAxKSB8IEJJVCgwKSkKKyNkZWZpbmUgUFJDTV9BVlNfVkFSTV9NQVhfT1BQCQkodGNkbV9iYXNlICsgMHgyRTQpCisjZGVmaW5lIFBSQ01fQVZTX0lTTU9ERUVOQUJMRQkJNworI2RlZmluZSBQUkNNX0FWU19JU01PREVFTkFCTEVfTUFTSwkoMSA8PCBQUkNNX0FWU19JU01PREVFTkFCTEUpCisKKyNkZWZpbmUgSTJDX1dSSVRFKHNsYXZlKSBcCisJKCgoc2xhdmUpIDw8IDEpIHwgKGNwdV9pc191ODUwMHYyKCkgPyBCSVQoNikgOiAwKSkKKyNkZWZpbmUgSTJDX1JFQUQoc2xhdmUpIFwKKwkoKChzbGF2ZSkgPDwgMSkgfCAoY3B1X2lzX3U4NTAwdjIoKSA/IEJJVCg2KSA6IDApIHwgQklUKDApKQogI2RlZmluZSBJMkNfU1RPUF9FTiBCSVQoMykKIAorZW51bSBtYjFfaCB7CisJTUIxSF9BUk1fT1BQID0gMSwKKwlNQjFIX0FQRV9PUFAsCisJTUIxSF9BUk1fQVBFX09QUCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgeworCXN0cnVjdCBtdXRleCBsb2NrOworCXN0cnVjdCBjb21wbGV0aW9uIHdvcms7CisJc3RydWN0IHsKKwkJdTggYXJtX29wcDsKKwkJdTggYXBlX29wcDsKKwkJdTggYXJtX3N0YXR1czsKKwkJdTggYXBlX3N0YXR1czsKKwl9IGFjazsKK30gbWIxX3RyYW5zZmVyOworCiBlbnVtIGFja19tYjVfc3RhdHVzIHsKIAlJMkNfV1JfT0sgPSAweDAxLAogCUkyQ19SRF9PSyA9IDB4MDIsCkBAIC0xNDUsNiArMTg3LDEwNCBAQAogfQogRVhQT1JUX1NZTUJPTChwcmNtdV9hYmJfd3JpdGUpOwogCitzdGF0aWMgaW50IHNldF9hcGVfY3B1X29wcHModTggaGVhZGVyLCBlbnVtIHByY211X2FwZV9vcHAgYXBlX29wcCwKKwkJCSAgICBlbnVtIHByY211X2NwdV9vcHAgY3B1X29wcCkKK3sKKwlib29sIGRvX2FwZTsKKwlib29sIGRvX2FybTsKKwlpbnQgZXJyID0gMDsKKworCWRvX2FwZSA9ICgoaGVhZGVyID09IE1CMUhfQVBFX09QUCkgfHwgKGhlYWRlciA9PSBNQjFIX0FSTV9BUEVfT1BQKSk7CisJZG9fYXJtID0gKChoZWFkZXIgPT0gTUIxSF9BUk1fT1BQKSB8fCAoaGVhZGVyID09IE1CMUhfQVJNX0FQRV9PUFApKTsKKworCW11dGV4X2xvY2soJm1iMV90cmFuc2Zlci5sb2NrKTsKKworCXdoaWxlIChyZWFkbChQUkNNX01CT1hfQ1BVX1ZBTCkgJiBNQk9YX0JJVCgxKSkKKwkJY3B1X3JlbGF4KCk7CisKKwl3cml0ZWIoMCwgTUJPWF9IRUFERVJfUkVRX01CMCk7CisJd3JpdGViKGNwdV9vcHAsIFJFUV9NQjFfQVJNT1BQKTsKKwl3cml0ZWIoYXBlX29wcCwgUkVRX01CMV9BUEVPUFApOworCXdyaXRlYigwLCBSRVFfTUIxX0JPT1NUT1BQKTsKKwl3cml0ZWwoTUJPWF9CSVQoMSksIFBSQ01fTUJPWF9DUFVfU0VUKTsKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZtYjFfdHJhbnNmZXIud29yayk7CisJaWYgKChkb19hcGUpICYmIChtYjFfdHJhbnNmZXIuYWNrLmFwZV9zdGF0dXMgIT0gMCkpCisJCWVyciA9IC1FSU87CisJaWYgKChkb19hcm0pICYmIChtYjFfdHJhbnNmZXIuYWNrLmFybV9zdGF0dXMgIT0gMCkpCisJCWVyciA9IC1FSU87CisKKwltdXRleF91bmxvY2soJm1iMV90cmFuc2Zlci5sb2NrKTsKKworCXJldHVybiBlcnI7Cit9CisKKy8qKgorICogcHJjbXVfc2V0X2FwZV9vcHAoKSAtIFNldCB0aGUgT1BQIG9mIHRoZSBBUEUuCisgKiBAb3BwOglUaGUgT1BQIHRvIHNldC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIE9QUCBvZiB0aGUgQVBFLgorICovCitpbnQgcHJjbXVfc2V0X2FwZV9vcHAoZW51bSBwcmNtdV9hcGVfb3BwIG9wcCkKK3sKKwlyZXR1cm4gc2V0X2FwZV9jcHVfb3BwcyhNQjFIX0FQRV9PUFAsIG9wcCwgQVBFX09QUF9OT19DSEFOR0UpOworfQorRVhQT1JUX1NZTUJPTChwcmNtdV9zZXRfYXBlX29wcCk7CisKKy8qKgorICogcHJjbXVfc2V0X2NwdV9vcHAoKSAtIFNldCB0aGUgT1BQIG9mIHRoZSBDUFUuCisgKiBAb3BwOglUaGUgT1BQIHRvIHNldC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIE9QUCBvZiB0aGUgQ1BVLgorICovCitpbnQgcHJjbXVfc2V0X2NwdV9vcHAoZW51bSBwcmNtdV9jcHVfb3BwIG9wcCkKK3sKKwlyZXR1cm4gc2V0X2FwZV9jcHVfb3BwcyhNQjFIX0FSTV9PUFAsIENQVV9PUFBfTk9fQ0hBTkdFLCBvcHApOworfQorRVhQT1JUX1NZTUJPTChwcmNtdV9zZXRfY3B1X29wcCk7CisKKy8qKgorICogcHJjbXVfc2V0X2FwZV9jcHVfb3BwcygpIC0gU2V0IHRoZSBPUFBzIG9mIHRoZSBBUEUgYW5kIHRoZSBDUFUuCisgKiBAYXBlX29wcDoJVGhlIEFQRSBPUFAgdG8gc2V0LgorICogQGNwdV9vcHA6CVRoZSBDUFUgT1BQIHRvIHNldC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIE9QUHMgb2YgdGhlIEFQRSBhbmQgdGhlIENQVS4KKyAqLworaW50IHByY211X3NldF9hcGVfY3B1X29wcHMoZW51bSBwcmNtdV9hcGVfb3BwIGFwZV9vcHAsCisJCQkgICBlbnVtIHByY211X2NwdV9vcHAgY3B1X29wcCkKK3sKKwlyZXR1cm4gc2V0X2FwZV9jcHVfb3BwcyhNQjFIX0FSTV9BUEVfT1BQLCBhcGVfb3BwLCBjcHVfb3BwKTsKK30KK0VYUE9SVF9TWU1CT0wocHJjbXVfc2V0X2FwZV9jcHVfb3Bwcyk7CisKKy8qKgorICogcHJjbXVfZ2V0X2FwZV9vcHAoKSAtIEdldCB0aGUgT1BQIG9mIHRoZSBBUEUuCisgKgorICogVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSBPUFAgb2YgdGhlIEFQRS4KKyAqLworZW51bSBwcmNtdV9hcGVfb3BwIHByY211X2dldF9hcGVfb3BwKHZvaWQpCit7CisJcmV0dXJuIHJlYWRiKEFDS19NQjFfQ1VSUl9BUEVPUFApOworfQorRVhQT1JUX1NZTUJPTChwcmNtdV9nZXRfYXBlX29wcCk7CisKKy8qKgorICogcHJjbXVfZ2V0X2NwdV9vcHAoKSAtIEdldCB0aGUgT1BQIG9mIHRoZSBDUFUuCisgKgorICogVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSBPUFAgb2YgdGhlIENQVS4gVGhlIE9QUCBpcyBzcGVjaWZpZWQgaW4gJSUuCisgKiBQUkNNVV9PUFBfRVhUIGlzIGEgc3BlY2lhbCBPUFAgdmFsdWUsIG5vdCBzcGVjaWZpZWQgaW4gJSUuCisgKi8KK2ludCBwcmNtdV9nZXRfY3B1X29wcCh2b2lkKQoreworCXJldHVybiByZWFkYihBQ0tfTUIxX0NVUlJfQVJNT1BQKTsKK30KK0VYUE9SVF9TWU1CT0wocHJjbXVfZ2V0X2NwdV9vcHApOworCitib29sIHByY211X2hhc19hcm1fbWF4b3BwKHZvaWQpCit7CisJcmV0dXJuIChyZWFkYihQUkNNX0FWU19WQVJNX01BWF9PUFApICYgUFJDTV9BVlNfSVNNT0RFRU5BQkxFX01BU0spCisJCT09IFBSQ01fQVZTX0lTTU9ERUVOQUJMRV9NQVNLOworfQorCiBzdGF0aWMgdm9pZCByZWFkX21haWxib3hfMCh2b2lkKQogewogCXdyaXRlbChNQk9YX0JJVCgwKSwgUFJDTV9BUk1fSVQxX0NMRUFSKTsKQEAgLTE1Miw2ICsyOTIsOSBAQAogCiBzdGF0aWMgdm9pZCByZWFkX21haWxib3hfMSh2b2lkKQogeworCW1iMV90cmFuc2Zlci5hY2suYXJtX29wcCA9IHJlYWRiKEFDS19NQjFfQ1VSUl9BUk1PUFApOworCW1iMV90cmFuc2Zlci5hY2suYXBlX29wcCA9IHJlYWRiKEFDS19NQjFfQ1VSUl9BUEVPUFApOworCWNvbXBsZXRlKCZtYjFfdHJhbnNmZXIud29yayk7CiAJd3JpdGVsKE1CT1hfQklUKDEpLCBQUkNNX0FSTV9JVDFfQ0xFQVIpOwogfQogCkBAIC0yMTcsMTUgKzM2MCwzNSBAQAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAordm9pZCBfX2luaXQgcHJjbXVfZWFybHlfaW5pdCh2b2lkKQoreworCWlmIChjcHVfaXNfdTg1MDB2MTEoKSB8fCBjcHVfaXNfdTg1MDBlZCgpKSB7CisJCXRjZG1fYmFzZSA9IF9faW9fYWRkcmVzcyhVODUwMF9QUkNNVV9UQ0RNX0JBU0VfVjEpOworCX0gZWxzZSBpZiAoY3B1X2lzX3U4NTAwdjIoKSkgeworCQl0Y2RtX2Jhc2UgPSBfX2lvX2FkZHJlc3MoVTg1MDBfUFJDTVVfVENETV9CQVNFKTsKKwl9IGVsc2UgeworCQlwcl9lcnIoInByY211OiBVbnN1cHBvcnRlZCBjaGlwIHZlcnNpb25cbiIpOworCQlCVUcoKTsKKwl9Cit9CisKIHN0YXRpYyBpbnQgX19pbml0IHByY211X2luaXQodm9pZCkKIHsKKwlpZiAoY3B1X2lzX3U4NTAwZWQoKSkgeworCQlwcl9lcnIoInByY211OiBVbnN1cHBvcnRlZCBjaGlwIHZlcnNpb25cbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwltdXRleF9pbml0KCZtYjFfdHJhbnNmZXIubG9jayk7CisJaW5pdF9jb21wbGV0aW9uKCZtYjFfdHJhbnNmZXIud29yayk7CiAJbXV0ZXhfaW5pdCgmbWI1X3RyYW5zZmVyLmxvY2spOwogCWluaXRfY29tcGxldGlvbigmbWI1X3RyYW5zZmVyLndvcmspOwogCiAJLyogQ2xlYW4gdXAgdGhlIG1haWxib3ggaW50ZXJydXB0cyBhZnRlciBwcmUta2VybmVsIGNvZGUuICovCiAJd3JpdGVsKChNQk9YX0JJVChOVU1fTUJPWCkgLSAxKSwgUFJDTV9BUk1fSVQxX0NMRUFSKTsKIAotCXJldHVybiByZXF1ZXN0X2lycShJUlFfUFJDTVUsIHByY211X2lycV9oYW5kbGVyLCAwLCAicHJjbXUiLCBOVUxMKTsKKwlyZXR1cm4gcmVxdWVzdF9pcnEoSVJRX0RCODUwMF9QUkNNVTEsIHByY211X2lycV9oYW5kbGVyLCAwLAorCQkJICAgInByY211IiwgTlVMTCk7CiB9CiAKIGFyY2hfaW5pdGNhbGwocHJjbXVfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvS2NvbmZpZwppbmRleCBjNzgxZjMwLi4zZjdiNWU5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL0tjb25maWcKQEAgLTQsNiArNCw3IEBACiBjb25maWcgQVJDSF9WRVJTQVRJTEVfUEIKIAlib29sICJTdXBwb3J0IFZlcnNhdGlsZS9QQiBwbGF0Zm9ybSIKIAlzZWxlY3QgQ1BVX0FSTTkyNlQKKwlzZWxlY3QgTUlHSFRfSEFWRV9QQ0kKIAlkZWZhdWx0IHkKIAloZWxwCiAJICBJbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBBUk0oUikgVmVyc2F0aWxlL1BCIHBsYXRmb3JtLgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvY29yZS5jIGIvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvY29yZS5jCmluZGV4IGUzOGFjYjAuLjEzYTgzZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2NvcmUuYworKysgYi9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9jb3JlLmMKQEAgLTMxLDggKzMxLDggQEAKICNpbmNsdWRlIDxsaW51eC9hbWJhL3BsMDIyLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9nZnAuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGtkZXYuaD4KIAotI2luY2x1ZGUgPGFzbS9jbGtkZXYuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9sZWRzLmg+CkBAIC00NiwxMCArNDYsMTEgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KICNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8bWFjaC9jbGtkZXYuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9wbGF0Zm9ybS5oPgotI2luY2x1ZGUgPHBsYXQvdGltZXItc3AuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvdGltZXItc3AuaD4KKworI2luY2x1ZGUgPHBsYXQvc2NoZWRfY2xvY2suaD4KIAogI2luY2x1ZGUgImNvcmUuaCIKIApAQCAtODg2LDYgKzg4NywxMiBAQAogfQogCiAvKgorICogVGhlIHNjaGVkX2Nsb2NrIGNvdW50ZXIKKyAqLworI2RlZmluZSBSRUZDT1VOVEVSCQkoX19pb19hZGRyZXNzKFZFUlNBVElMRV9TWVNfQkFTRSkgKyBcCisJCQkJIFZFUlNBVElMRV9TWVNfMjRNSHpfT0ZGU0VUKQorCisvKgogICogV2hlcmUgaXMgdGhlIHRpbWVyIChWQSk/CiAgKi8KICNkZWZpbmUgVElNRVIwX1ZBX0JBU0UJCSBfX2lvX2FkZHJlc3MoVkVSU0FUSUxFX1RJTUVSMF8xX0JBU0UpCkBAIC05MDAsNiArOTA3LDggQEAKIHsKIAl1MzIgdmFsOwogCisJdmVyc2F0aWxlX3NjaGVkX2Nsb2NrX2luaXQoUkVGQ09VTlRFUiwgMjQwMDAwMDApOworCiAJLyogCiAJICogc2V0IGNsb2NrIGZyZXF1ZW5jeTogCiAJICoJVkVSU0FUSUxFX1JFRkNMSyBpcyAzMktIegpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvTWFrZWZpbGUKaW5kZXggMWI3MWI3Ny4uMmMwYWM3ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLXZleHByZXNzL01ha2VmaWxlCkBAIC01LDQgKzUsNSBAQAogb2JqLXkJCQkJCTo9IHYybS5vCiBvYmotJChDT05GSUdfQVJDSF9WRVhQUkVTU19DQTlYNCkJKz0gY3QtY2E5eDQubwogb2JqLSQoQ09ORklHX1NNUCkJCQkrPSBwbGF0c21wLm8gaGVhZHNtcC5vCitvYmotJChDT05GSUdfSE9UUExVR19DUFUpCQkrPSBob3RwbHVnLm8KIG9iai0kKENPTkZJR19MT0NBTF9USU1FUlMpCQkrPSBsb2NhbHRpbWVyLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvY29yZS5oIGIvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy9jb3JlLmgKaW5kZXggNTdkZDk1Yy4uMzYyNzgwZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy9jb3JlLmgKKysrIGIvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy9jb3JlLmgKQEAgLTIyLDUgKzIyLDMgQEAKIAogdm9pZCB2Mm1fbWFwX2lvKHN0cnVjdCBtYXBfZGVzYyAqdGlsZSwgc2l6ZV90IG51bSk7CiBleHRlcm4gc3RydWN0IHN5c190aW1lciB2Mm1fdGltZXI7Ci0KLWV4dGVybiB2b2lkIF9faW9tZW0gKmdpY19jcHVfYmFzZV9hZGRyOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy9jdC1jYTl4NC5jIGIvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy9jdC1jYTl4NC5jCmluZGV4IGZkMjVjY2QuLmU2Mjg0MDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvY3QtY2E5eDQuYworKysgYi9hcmNoL2FybS9tYWNoLXZleHByZXNzL2N0LWNhOXg0LmMKQEAgLTgsOCArOCw4IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KICNpbmNsdWRlIDxsaW51eC9hbWJhL2NsY2QuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGtkZXYuaD4KIAotI2luY2x1ZGUgPGFzbS9jbGtkZXYuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9hcm1fdGltZXIuaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvY2FjaGUtbDJ4MC5oPgpAQCAtMTgsMTAgKzE4LDkgQEAKICNpbmNsdWRlIDxhc20vcG11Lmg+CiAjaW5jbHVkZSA8YXNtL3NtcF90d2QuaD4KIAotI2luY2x1ZGUgPG1hY2gvY2xrZGV2Lmg+CiAjaW5jbHVkZSA8bWFjaC9jdC1jYTl4NC5oPgogCi0jaW5jbHVkZSA8cGxhdC90aW1lci1zcC5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS90aW1lci1zcC5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgpAQCAtNjAsMTMgKzU5LDEwIEBACiAJdjJtX21hcF9pbyhjdF9jYTl4NF9pb19kZXNjLCBBUlJBWV9TSVpFKGN0X2NhOXg0X2lvX2Rlc2MpKTsKIH0KIAotdm9pZCBfX2lvbWVtICpnaWNfY3B1X2Jhc2VfYWRkcjsKLQogc3RhdGljIHZvaWQgX19pbml0IGN0X2NhOXg0X2luaXRfaXJxKHZvaWQpCiB7Ci0JZ2ljX2NwdV9iYXNlX2FkZHIgPSBNTUlPX1AyVihBOV9NUENPUkVfR0lDX0NQVSk7Ci0JZ2ljX2Rpc3RfaW5pdCgwLCBNTUlPX1AyVihBOV9NUENPUkVfR0lDX0RJU1QpLCAyOSk7Ci0JZ2ljX2NwdV9pbml0KDAsIGdpY19jcHVfYmFzZV9hZGRyKTsKKwlnaWNfaW5pdCgwLCAyOSwgTU1JT19QMlYoQTlfTVBDT1JFX0dJQ19ESVNUKSwKKwkJIE1NSU9fUDJWKEE5X01QQ09SRV9HSUNfQ1BVKSk7CiB9CiAKICNpZiAwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZleHByZXNzL2hvdHBsdWcuYyBiL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvaG90cGx1Zy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhNGNiZmIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXZleHByZXNzL2hvdHBsdWcuYwpAQCAtMCwwICsxLDEyOCBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2hvdHBsdWcuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDIgQVJNIEx0ZC4KKyAqICBBbGwgUmlnaHRzIFJlc2VydmVkCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CisKKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorCitleHRlcm4gdm9sYXRpbGUgaW50IHBlbl9yZWxlYXNlOworCitzdGF0aWMgaW5saW5lIHZvaWQgY3B1X2VudGVyX2xvd3Bvd2VyKHZvaWQpCit7CisJdW5zaWduZWQgaW50IHY7CisKKwlmbHVzaF9jYWNoZV9hbGwoKTsKKwlhc20gdm9sYXRpbGUoCisJCSJtY3IJcDE1LCAwLCAlMSwgYzcsIGM1LCAwXG4iCisJIgltY3IJcDE1LCAwLCAlMSwgYzcsIGMxMCwgNFxuIgorCS8qCisJICogVHVybiBvZmYgY29oZXJlbmN5CisJICovCisJIgltcmMJcDE1LCAwLCAlMCwgYzEsIGMwLCAxXG4iCisJIgliaWMJJTAsICUwLCAlM1xuIgorCSIJbWNyCXAxNSwgMCwgJTAsIGMxLCBjMCwgMVxuIgorCSIJbXJjCXAxNSwgMCwgJTAsIGMxLCBjMCwgMFxuIgorCSIJYmljCSUwLCAlMCwgJTJcbiIKKwkiCW1jcglwMTUsIDAsICUwLCBjMSwgYzAsIDBcbiIKKwkgIDogIj0mciIgKHYpCisJICA6ICJyIiAoMCksICJJciIgKENSX0MpLCAiSXIiICgweDQwKQorCSAgOiAiY2MiKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNwdV9sZWF2ZV9sb3dwb3dlcih2b2lkKQoreworCXVuc2lnbmVkIGludCB2OworCisJYXNtIHZvbGF0aWxlKAorCQkibXJjCXAxNSwgMCwgJTAsIGMxLCBjMCwgMFxuIgorCSIJb3JyCSUwLCAlMCwgJTFcbiIKKwkiCW1jcglwMTUsIDAsICUwLCBjMSwgYzAsIDBcbiIKKwkiCW1yYwlwMTUsIDAsICUwLCBjMSwgYzAsIDFcbiIKKwkiCW9ycgklMCwgJTAsICUyXG4iCisJIgltY3IJcDE1LCAwLCAlMCwgYzEsIGMwLCAxXG4iCisJICA6ICI9JnIiICh2KQorCSAgOiAiSXIiIChDUl9DKSwgIklyIiAoMHg0MCkKKwkgIDogImNjIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwbGF0Zm9ybV9kb19sb3dwb3dlcih1bnNpZ25lZCBpbnQgY3B1LCBpbnQgKnNwdXJpb3VzKQoreworCS8qCisJICogdGhlcmUgaXMgbm8gcG93ZXItY29udHJvbCBoYXJkd2FyZSBvbiB0aGlzIHBsYXRmb3JtLCBzbyBhbGwKKwkgKiB3ZSBjYW4gZG8gaXMgcHV0IHRoZSBjb3JlIGludG8gV0ZJOyB0aGlzIGlzIHNhZmUgYXMgdGhlIGNhbGxpbmcKKwkgKiBjb2RlIHdpbGwgaGF2ZSBhbHJlYWR5IGRpc2FibGVkIGludGVycnVwdHMKKwkgKi8KKwlmb3IgKDs7KSB7CisJCS8qCisJCSAqIGhlcmUncyB0aGUgV0ZJCisJCSAqLworCQlhc20oIi53b3JkCTB4ZTMyMGYwMDNcbiIKKwkJICAgIDoKKwkJICAgIDoKKwkJICAgIDogIm1lbW9yeSIsICJjYyIpOworCisJCWlmIChwZW5fcmVsZWFzZSA9PSBjcHUpIHsKKwkJCS8qCisJCQkgKiBPSywgcHJvcGVyIHdha2V1cCwgd2UncmUgZG9uZQorCQkJICovCisJCQlicmVhazsKKwkJfQorCisJCS8qCisJCSAqIEdldHRpbmcgaGVyZSwgbWVhbnMgdGhhdCB3ZSBoYXZlIGNvbWUgb3V0IG9mIFdGSSB3aXRob3V0CisJCSAqIGhhdmluZyBiZWVuIHdva2VuIHVwIC0gdGhpcyBzaG91bGRuJ3QgaGFwcGVuCisJCSAqCisJCSAqIEp1c3Qgbm90ZSBpdCBoYXBwZW5pbmcgLSB3aGVuIHdlJ3JlIHdva2VuLCB3ZSBjYW4gcmVwb3J0CisJCSAqIGl0cyBvY2N1cnJlbmNlLgorCQkgKi8KKwkJKCpzcHVyaW91cykrKzsKKwl9Cit9CisKK2ludCBwbGF0Zm9ybV9jcHVfa2lsbCh1bnNpZ25lZCBpbnQgY3B1KQoreworCXJldHVybiAxOworfQorCisvKgorICogcGxhdGZvcm0tc3BlY2lmaWMgY29kZSB0byBzaHV0ZG93biBhIENQVQorICoKKyAqIENhbGxlZCB3aXRoIElSUXMgZGlzYWJsZWQKKyAqLwordm9pZCBwbGF0Zm9ybV9jcHVfZGllKHVuc2lnbmVkIGludCBjcHUpCit7CisJaW50IHNwdXJpb3VzID0gMDsKKworCS8qCisJICogd2UncmUgcmVhZHkgZm9yIHNodXRkb3duIG5vdywgc28gZG8gaXQKKwkgKi8KKwljcHVfZW50ZXJfbG93cG93ZXIoKTsKKwlwbGF0Zm9ybV9kb19sb3dwb3dlcihjcHUsICZzcHVyaW91cyk7CisKKwkvKgorCSAqIGJyaW5nIHRoaXMgQ1BVIGJhY2sgaW50byB0aGUgd29ybGQgb2YgY2FjaGUKKwkgKiBjb2hlcmVuY3ksIGFuZCB0aGVuIHJlc3RvcmUgaW50ZXJydXB0cworCSAqLworCWNwdV9sZWF2ZV9sb3dwb3dlcigpOworCisJaWYgKHNwdXJpb3VzKQorCQlwcl93YXJuKCJDUFUldTogJXUgc3B1cmlvdXMgd2FrZXVwIGNhbGxzXG4iLCBjcHUsIHNwdXJpb3VzKTsKK30KKworaW50IHBsYXRmb3JtX2NwdV9kaXNhYmxlKHVuc2lnbmVkIGludCBjcHUpCit7CisJLyoKKwkgKiB3ZSBkb24ndCBhbGxvdyBDUFUgMCB0byBiZSBzaHV0ZG93biAoaXQgaXMgc3RpbGwgdG9vIHNwZWNpYWwKKwkgKiBlLmcuIGNsb2NrIHRpY2sgaW50ZXJydXB0cykKKwkgKi8KKwlyZXR1cm4gY3B1ID09IDAgPyAtRVBFUk0gOiAwOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKaW5kZXggMjBlOWZiNS4uNzNjMTEyOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLXZleHByZXNzL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCkBAIC0xLDY3ICsxLDcgQEAKLSNpbmNsdWRlIDxhc20vaGFyZHdhcmUvZ2ljLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2VudHJ5LW1hY3JvLWdpYy5TPgogCiAJLm1hY3JvCWRpc2FibGVfZmlxCiAJLmVuZG0KIAotCS5tYWNybwlnZXRfaXJxbnJfcHJlYW1ibGUsIGJhc2UsIHRtcAotCWxkcglcYmFzZSwgPWdpY19jcHVfYmFzZV9hZGRyCi0JbGRyCVxiYXNlLCBbXGJhc2VdCi0JLmVuZG0KLQogCS5tYWNybwlhcmNoX3JldF90b191c2VyLCB0bXAxLCB0bXAyCiAJLmVuZG0KLQotCS8qCi0JICogVGhlIGludGVycnVwdCBudW1iZXJpbmcgc2NoZW1lIGlzIGRlZmluZWQgaW4gdGhlCi0JICogaW50ZXJydXB0IGNvbnRyb2xsZXIgc3BlYy4gIFRvIHdpdDoKLQkgKgotCSAqIEludGVycnVwdHMgMC0xNSBhcmUgSVBJCi0JICogMTYtMjggYXJlIHJlc2VydmVkCi0JICogMjktMzEgYXJlIGxvY2FsLiAgV2UgYWxsb3cgMzAgdG8gYmUgdXNlZCBmb3IgdGhlIHdhdGNoZG9nLgotCSAqIDMyLTEwMjAgYXJlIGdsb2JhbAotCSAqIDEwMjEtMTAyMiBhcmUgcmVzZXJ2ZWQKLQkgKiAxMDIzIGlzICJzcHVyaW91cyIgKG5vIGludGVycnVwdCkKLQkgKgotCSAqIEZvciBub3csIHdlIGlnbm9yZSBhbGwgbG9jYWwgaW50ZXJydXB0cyBzbyBvbmx5IHJldHVybiBhbiBpbnRlcnJ1cHQgaWYgaXQncwotCSAqIGJldHdlZW4gMzAgYW5kIDEwMjAuICBUaGUgdGVzdF9mb3JfaXBpIHJvdXRpbmUgYmVsb3cgd2lsbCBwaWNrIHVwIG9uIElQSXMuCi0JICoKLQkgKiBBIHNpbXBsZSByZWFkIGZyb20gdGhlIGNvbnRyb2xsZXIgd2lsbCB0ZWxsIHVzIHRoZSBudW1iZXIgb2YgdGhlIGhpZ2hlc3QKLQkgKiBwcmlvcml0eSBlbmFibGVkIGludGVycnVwdC4gIFdlIHRoZW4ganVzdCBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgaXQgaXMgaW4gdGhlCi0JICogdmFsaWQgcmFuZ2UgZm9yIGFuIElSUSAoMzAtMTAyMCBpbmNsdXNpdmUpLgotCSAqLwotCi0JLm1hY3JvCWdldF9pcnFucl9hbmRfYmFzZSwgaXJxbnIsIGlycXN0YXQsIGJhc2UsIHRtcAotCWxkciAgICAgXGlycXN0YXQsIFtcYmFzZSwgI0dJQ19DUFVfSU5UQUNLXSAvKiBiaXRzIDEyLTEwID0gc3JjIENQVSwgOS0wID0gaW50ICMgKi8KLQlsZHIJXHRtcCwgPTEwMjEKLQliaWMgICAgIFxpcnFuciwgXGlycXN0YXQsICMweDFjMDAKLQljbXAgICAgIFxpcnFuciwgIzI5Ci0JY21wY2MJXGlycW5yLCBcaXJxbnIKLQljbXBuZQlcaXJxbnIsIFx0bXAKLQljbXBjcwlcaXJxbnIsIFxpcnFucgotCS5lbmRtCi0KLQkvKiBXZSBhc3N1bWUgdGhhdCBpcnFzdGF0ICh0aGUgcmF3IHZhbHVlIG9mIHRoZSBJUlEgYWNrbm93bGVkZ2UKLQkgKiByZWdpc3RlcikgaXMgcHJlc2VydmVkIGZyb20gdGhlIG1hY3JvIGFib3ZlLgotCSAqIElmIHRoZXJlIGlzIGFuIElQSSwgd2UgaW1tZWRpYXRlbHkgc2lnbmFsIGVuZCBvZiBpbnRlcnJ1cHQgb24gdGhlCi0JICogY29udHJvbGxlciwgc2luY2UgdGhpcyByZXF1aXJlcyB0aGUgb3JpZ2luYWwgaXJxc3RhdCB2YWx1ZSB3aGljaAotCSAqIHdlIHdvbid0IGVhc2lseSBiZSBhYmxlIHRvIHJlY3JlYXRlIGxhdGVyLgotCSAqLwotCi0JLm1hY3JvIHRlc3RfZm9yX2lwaSwgaXJxbnIsIGlycXN0YXQsIGJhc2UsIHRtcAotCWJpYwlcaXJxbnIsIFxpcnFzdGF0LCAjMHgxYzAwCi0JY21wCVxpcnFuciwgIzE2Ci0Jc3RyY2MJXGlycXN0YXQsIFtcYmFzZSwgI0dJQ19DUFVfRU9JXQotCWNtcGNzCVxpcnFuciwgXGlycW5yCi0JLmVuZG0KLQotCS8qIEFzIGFib3ZlLCB0aGlzIGFzc3VtZXMgdGhhdCBpcnFzdGF0IGFuZCBiYXNlIGFyZSBwcmVzZXJ2ZWQuLiAqLwotCi0JLm1hY3JvIHRlc3RfZm9yX2x0aXJxLCBpcnFuciwgaXJxc3RhdCwgYmFzZSwgdG1wCi0JYmljCVxpcnFuciwgXGlycXN0YXQsICMweDFjMDAKLQltb3YgCVx0bXAsICMwCi0JY21wCVxpcnFuciwgIzI5Ci0JbW92ZXEJXHRtcCwgIzEKLQlzdHJlcQlcaXJxc3RhdCwgW1xiYXNlLCAjR0lDX0NQVV9FT0ldCi0JY21wCVx0bXAsICMwCi0JLmVuZG0KLQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy9pbmNsdWRlL21hY2gvc21wLmggYi9hcmNoL2FybS9tYWNoLXZleHByZXNzL2luY2x1ZGUvbWFjaC9zbXAuaAppbmRleCA1YTZkYTRmLi40YzA1ZTRhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXZleHByZXNzL2luY2x1ZGUvbWFjaC9zbXAuaAorKysgYi9hcmNoL2FybS9tYWNoLXZleHByZXNzL2luY2x1ZGUvbWFjaC9zbXAuaApAQCAtMiwxMyArMiwxMiBAQAogI2RlZmluZSBfX01BQ0hfU01QX0gKIAogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9naWMuaD4KLSNpbmNsdWRlIDxhc20vc21wX21waWRyLmg+CiAKIC8qCiAgKiBXZSB1c2UgSVJRMSBhcyB0aGUgSVBJCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBzbXBfY3Jvc3NfY2FsbChjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaykKK3N0YXRpYyBpbmxpbmUgdm9pZCBzbXBfY3Jvc3NfY2FsbChjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywgaW50IGlwaSkKIHsKLQlnaWNfcmFpc2Vfc29mdGlycShtYXNrLCAxKTsKKwlnaWNfcmFpc2Vfc29mdGlycShtYXNrLCBpcGkpOwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZleHByZXNzL3BsYXRzbXAuYyBiL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvcGxhdHNtcC5jCmluZGV4IDY3MDk3MDYuLmIxNjg3YjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvcGxhdHNtcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvcGxhdHNtcC5jCkBAIC0xNyw3ICsxNyw2IEBACiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+Ci0jaW5jbHVkZSA8YXNtL2xvY2FsdGltZXIuaD4KICNpbmNsdWRlIDxhc20vc21wX3NjdS5oPgogI2luY2x1ZGUgPGFzbS91bmlmaWVkLmg+CiAKQEAgLTM1LDYgKzM0LDE5IEBACiAgKi8KIHZvbGF0aWxlIGludCBfX2NwdWluaXRkYXRhIHBlbl9yZWxlYXNlID0gLTE7CiAKKy8qCisgKiBXcml0ZSBwZW5fcmVsZWFzZSBpbiBhIHdheSB0aGF0IGlzIGd1YXJhbnRlZWQgdG8gYmUgdmlzaWJsZSB0byBhbGwKKyAqIG9ic2VydmVycywgaXJyZXNwZWN0aXZlIG9mIHdoZXRoZXIgdGhleSdyZSB0YWtpbmcgcGFydCBpbiBjb2hlcmVuY3kKKyAqIG9yIG5vdC4gIFRoaXMgaXMgbmVjZXNzYXJ5IGZvciB0aGUgaG90cGx1ZyBjb2RlIHRvIHdvcmsgcmVsaWFibHkuCisgKi8KK3N0YXRpYyB2b2lkIHdyaXRlX3Blbl9yZWxlYXNlKGludCB2YWwpCit7CisJcGVuX3JlbGVhc2UgPSB2YWw7CisJc21wX3dtYigpOworCV9fY3B1Y19mbHVzaF9kY2FjaGVfYXJlYSgodm9pZCAqKSZwZW5fcmVsZWFzZSwgc2l6ZW9mKHBlbl9yZWxlYXNlKSk7CisJb3V0ZXJfY2xlYW5fcmFuZ2UoX19wYSgmcGVuX3JlbGVhc2UpLCBfX3BhKCZwZW5fcmVsZWFzZSArIDEpKTsKK30KKwogc3RhdGljIHZvaWQgX19pb21lbSAqc2N1X2Jhc2VfYWRkcih2b2lkKQogewogCXJldHVybiBNTUlPX1AyVihBOV9NUENPUkVfU0NVKTsKQEAgLTQ0LDIxICs1NiwxOCBAQAogCiB2b2lkIF9fY3B1aW5pdCBwbGF0Zm9ybV9zZWNvbmRhcnlfaW5pdCh1bnNpZ25lZCBpbnQgY3B1KQogewotCXRyYWNlX2hhcmRpcnFzX29mZigpOwotCiAJLyoKIAkgKiBpZiBhbnkgaW50ZXJydXB0cyBhcmUgYWxyZWFkeSBlbmFibGVkIGZvciB0aGUgcHJpbWFyeQogCSAqIGNvcmUgKGUuZy4gdGltZXIgaXJxKSwgdGhlbiB0aGV5IHdpbGwgbm90IGhhdmUgYmVlbiBlbmFibGVkCiAJICogZm9yIHVzOiBkbyBzbwogCSAqLwotCWdpY19jcHVfaW5pdCgwLCBnaWNfY3B1X2Jhc2VfYWRkcik7CisJZ2ljX3NlY29uZGFyeV9pbml0KDApOwogCiAJLyoKIAkgKiBsZXQgdGhlIHByaW1hcnkgcHJvY2Vzc29yIGtub3cgd2UncmUgb3V0IG9mIHRoZQogCSAqIHBlbiwgdGhlbiBoZWFkIG9mZiBpbnRvIHRoZSBDIGVudHJ5IHBvaW50CiAJICovCi0JcGVuX3JlbGVhc2UgPSAtMTsKLQlzbXBfd21iKCk7CisJd3JpdGVfcGVuX3JlbGVhc2UoLTEpOwogCiAJLyoKIAkgKiBTeW5jaHJvbmlzZSB3aXRoIHRoZSBib290IHRocmVhZC4KQEAgLTgzLDE2ICs5MiwxNCBAQAogCSAqIHNpbmNlIHdlIGhhdmVuJ3Qgc2VudCB0aGVtIGEgc29mdCBpbnRlcnJ1cHQsIHRoZXkgc2hvdWxkbid0CiAJICogYmUgdGhlcmUuCiAJICovCi0JcGVuX3JlbGVhc2UgPSBjcHU7Ci0JX19jcHVjX2ZsdXNoX2RjYWNoZV9hcmVhKCh2b2lkICopJnBlbl9yZWxlYXNlLCBzaXplb2YocGVuX3JlbGVhc2UpKTsKLQlvdXRlcl9jbGVhbl9yYW5nZShfX3BhKCZwZW5fcmVsZWFzZSksIF9fcGEoJnBlbl9yZWxlYXNlICsgMSkpOworCXdyaXRlX3Blbl9yZWxlYXNlKGNwdSk7CiAKIAkvKgogCSAqIFNlbmQgdGhlIHNlY29uZGFyeSBDUFUgYSBzb2Z0IGludGVycnVwdCwgdGhlcmVieSBjYXVzaW5nCiAJICogdGhlIGJvb3QgbW9uaXRvciB0byByZWFkIHRoZSBzeXN0ZW0gd2lkZSBmbGFncyByZWdpc3RlciwKIAkgKiBhbmQgYnJhbmNoIHRvIHRoZSBhZGRyZXNzIGZvdW5kIHRoZXJlLgogCSAqLwotCXNtcF9jcm9zc19jYWxsKGNwdW1hc2tfb2YoY3B1KSk7CisJc21wX2Nyb3NzX2NhbGwoY3B1bWFza19vZihjcHUpLCAxKTsKIAogCXRpbWVvdXQgPSBqaWZmaWVzICsgKDEgKiBIWik7CiAJd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKSB7CkBAIC0xMjQsMTMgKzEzMSw2IEBACiAJbmNvcmVzID0gc2N1X2Jhc2UgPyBzY3VfZ2V0X2NvcmVfY291bnQoc2N1X2Jhc2UpIDogMTsKIAogCS8qIHNhbml0eSBjaGVjayAqLwotCWlmIChuY29yZXMgPT0gMCkgewotCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJ2ZXhwcmVzczogc3RyYW5nZSBDTSBjb3VudCBvZiAwPyBEZWZhdWx0IHRvIDFcbiIpOwotCi0JCW5jb3JlcyA9IDE7Ci0JfQotCiAJaWYgKG5jb3JlcyA+IE5SX0NQVVMpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkgICAgICAgInZleHByZXNzOiBuby4gb2YgY29yZXMgKCVkKSBncmVhdGVyIHRoYW4gY29uZmlndXJlZCAiCkBAIC0xNDMsMjAgKzE0MywxMCBAQAogCQlzZXRfY3B1X3Bvc3NpYmxlKGksIHRydWUpOwogfQogCi12b2lkIF9faW5pdCBzbXBfcHJlcGFyZV9jcHVzKHVuc2lnbmVkIGludCBtYXhfY3B1cykKK3ZvaWQgX19pbml0IHBsYXRmb3JtX3NtcF9wcmVwYXJlX2NwdXModW5zaWduZWQgaW50IG1heF9jcHVzKQogewotCXVuc2lnbmVkIGludCBuY29yZXMgPSBudW1fcG9zc2libGVfY3B1cygpOwotCXVuc2lnbmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJaW50IGk7CiAKLQlzbXBfc3RvcmVfY3B1X2luZm8oY3B1KTsKLQotCS8qCi0JICogYXJlIHdlIHRyeWluZyB0byBib290IG1vcmUgY29yZXMgdGhhbiBleGlzdD8KLQkgKi8KLQlpZiAobWF4X2NwdXMgPiBuY29yZXMpCi0JCW1heF9jcHVzID0gbmNvcmVzOwotCiAJLyoKIAkgKiBJbml0aWFsaXNlIHRoZSBwcmVzZW50IG1hcCwgd2hpY2ggZGVzY3JpYmVzIHRoZSBzZXQgb2YgQ1BVcwogCSAqIGFjdHVhbGx5IHBvcHVsYXRlZCBhdCB0aGUgcHJlc2VudCB0aW1lLgpAQCAtMTY0LDI3ICsxNTQsMTUgQEAKIAlmb3IgKGkgPSAwOyBpIDwgbWF4X2NwdXM7IGkrKykKIAkJc2V0X2NwdV9wcmVzZW50KGksIHRydWUpOwogCisJc2N1X2VuYWJsZShzY3VfYmFzZV9hZGRyKCkpOworCiAJLyoKLQkgKiBJbml0aWFsaXNlIHRoZSBTQ1UgaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgQ1BVIGFuZCBsZXQKLQkgKiB0aGVtIGtub3cgd2hlcmUgdG8gc3RhcnQuCisJICogV3JpdGUgdGhlIGFkZHJlc3Mgb2Ygc2Vjb25kYXJ5IHN0YXJ0dXAgaW50byB0aGUKKwkgKiBzeXN0ZW0td2lkZSBmbGFncyByZWdpc3Rlci4gVGhlIGJvb3QgbW9uaXRvciB3YWl0cworCSAqIHVudGlsIGl0IHJlY2VpdmVzIGEgc29mdCBpbnRlcnJ1cHQsIGFuZCB0aGVuIHRoZQorCSAqIHNlY29uZGFyeSBDUFUgYnJhbmNoZXMgdG8gdGhpcyBhZGRyZXNzLgogCSAqLwotCWlmIChtYXhfY3B1cyA+IDEpIHsKLQkJLyoKLQkJICogRW5hYmxlIHRoZSBsb2NhbCB0aW1lciBvciBicm9hZGNhc3QgZGV2aWNlIGZvciB0aGUKLQkJICogYm9vdCBDUFUsIGJ1dCBvbmx5IGlmIHdlIGhhdmUgbW9yZSB0aGFuIG9uZSBDUFUuCi0JCSAqLwotCQlwZXJjcHVfdGltZXJfc2V0dXAoKTsKLQotCQlzY3VfZW5hYmxlKHNjdV9iYXNlX2FkZHIoKSk7Ci0KLQkJLyoKLQkJICogV3JpdGUgdGhlIGFkZHJlc3Mgb2Ygc2Vjb25kYXJ5IHN0YXJ0dXAgaW50byB0aGUKLQkJICogc3lzdGVtLXdpZGUgZmxhZ3MgcmVnaXN0ZXIuIFRoZSBib290IG1vbml0b3Igd2FpdHMKLQkJICogdW50aWwgaXQgcmVjZWl2ZXMgYSBzb2Z0IGludGVycnVwdCwgYW5kIHRoZW4gdGhlCi0JCSAqIHNlY29uZGFyeSBDUFUgYnJhbmNoZXMgdG8gdGhpcyBhZGRyZXNzLgotCQkgKi8KLQkJd3JpdGVsKH4wLCBNTUlPX1AyVihWMk1fU1lTX0ZMQUdTQ0xSKSk7Ci0JCXdyaXRlbChCU1lNKHZpcnRfdG9fcGh5cyh2ZXhwcmVzc19zZWNvbmRhcnlfc3RhcnR1cCkpLAotCQkJTU1JT19QMlYoVjJNX1NZU19GTEFHU1NFVCkpOwotCX0KKwl3cml0ZWwofjAsIE1NSU9fUDJWKFYyTV9TWVNfRkxBR1NDTFIpKTsKKwl3cml0ZWwoQlNZTSh2aXJ0X3RvX3BoeXModmV4cHJlc3Nfc2Vjb25kYXJ5X3N0YXJ0dXApKSwKKwkJTU1JT19QMlYoVjJNX1NZU19GTEFHU1NFVCkpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy92Mm0uYyBiL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvdjJtLmMKaW5kZXggN2VhYTIzMi4uYTllZDM0MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy92Mm0uYworKysgYi9hcmNoL2FybS9tYWNoLXZleHByZXNzL3YybS5jCkBAIC0xMSwxOCArMTEsMTggQEAKICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9pc3AxNzYwLmg+CisjaW5jbHVkZSA8bGludXgvY2xrZGV2Lmg+CiAKLSNpbmNsdWRlIDxhc20vY2xrZGV2Lmg+CiAjaW5jbHVkZSA8YXNtL3NpemVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KICNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2FybV90aW1lci5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS90aW1lci1zcC5oPgogCi0jaW5jbHVkZSA8bWFjaC9jbGtkZXYuaD4KICNpbmNsdWRlIDxtYWNoL21vdGhlcmJvYXJkLmg+CiAKLSNpbmNsdWRlIDxwbGF0L3RpbWVyLXNwLmg+CisjaW5jbHVkZSA8cGxhdC9zY2hlZF9jbG9jay5oPgogCiAjaW5jbHVkZSAiY29yZS5oIgogCkBAIC01MCw2ICs1MCw4IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCB2Mm1fdGltZXJfaW5pdCh2b2lkKQogeworCXZlcnNhdGlsZV9zY2hlZF9jbG9ja19pbml0KE1NSU9fUDJWKFYyTV9TWVNfMjRNSFopLCAyNDAwMDAwMCk7CisKIAl3cml0ZWwoMCwgTU1JT19QMlYoVjJNX1RJTUVSMCkgKyBUSU1FUl9DVFJMKTsKIAl3cml0ZWwoMCwgTU1JT19QMlYoVjJNX1RJTUVSMSkgKyBUSU1FUl9DVFJMKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2Nsb2NrLmggYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvY2xvY2suaAppbmRleCBjNTZkZGFiLi5iODhhMWIxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXc5MHg5MDAvY2xvY2suaAorKysgYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvY2xvY2suaApAQCAtMTAsNyArMTAsNyBAQAogICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KICAqLwogCi0jaW5jbHVkZSA8YXNtL2Nsa2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsa2Rldi5oPgogCiB2b2lkIG51YzkwMF9jbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaywgaW50IGVuYWJsZSk7CiB2b2lkIG51YzkwMF9zdWJjbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaywgaW50IGVuYWJsZSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXc5MHg5MDAvdGltZS5jIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL3RpbWUuYwppbmRleCBiODBmNzY5Li40YjA4OWNiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXc5MHg5MDAvdGltZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC90aW1lLmMKQEAgLTE1Myw3ICsxNTMsNiBAQAogCS5yYXRpbmcJPSAyMDAsCiAJLnJlYWQJPSBudWM5MDBfZ2V0X2N5Y2xlcywKIAkubWFzawk9IENMT0NLU09VUkNFX01BU0soVERSX1NISUZUKSwKLQkuc2hpZnQJPSAxMCwKIAkuZmxhZ3MJPSBDTE9DS19TT1VSQ0VfSVNfQ09OVElOVU9VUywKIH07CiAKQEAgLTE3Niw5ICsxNzUsNyBAQAogCXZhbCB8PSAoQ09VTlRFTiB8IFBFUklPRCB8IFBSRVNDQUxFKTsKIAlfX3Jhd193cml0ZWwodmFsLCBSRUdfVENTUjEpOwogCi0JY2xvY2tzb3VyY2VfbnVjOTAwLm11bHQgPQotCQljbG9ja3NvdXJjZV9raHoybXVsdCgocmF0ZSAvIDEwMDApLCBjbG9ja3NvdXJjZV9udWM5MDAuc2hpZnQpOwotCWNsb2Nrc291cmNlX3JlZ2lzdGVyKCZjbG9ja3NvdXJjZV9udWM5MDApOworCWNsb2Nrc291cmNlX3JlZ2lzdGVyX2h6KCZjbG9ja3NvdXJjZV9udWM5MDAsIHJhdGUpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgbnVjOTAwX3RpbWVyX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL0tjb25maWcgYi9hcmNoL2FybS9tbS9LY29uZmlnCmluZGV4IDQ0MTRhMDEuLmZjYzFlNjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbW0vS2NvbmZpZwpAQCAtMzgyLDYgKzM4MiwxMiBAQAogCSAgZm9yIHdoaWNoIHRoZSBDUFUgSUQgaXMgZXF1YWwgdG8gdGhlIEFSTTkyNiBJRC4KIAkgIFJlbGV2YW50IGZvciBGZXJvY2Vvbi0xODUwIGFuZCBlYXJseSBGZXJvY2Vvbi0yODUwLgogCisjIE1hcnZlbGwgUEo0Citjb25maWcgQ1BVX1BKNAorCWJvb2wKKwlzZWxlY3QgQ1BVX1Y3CisJc2VsZWN0IEFSTV9USFVNQkVFCisKICMgQVJNdjYKIGNvbmZpZyBDUFVfVjYKIAlib29sICJTdXBwb3J0IEFSTSBWNiBwcm9jZXNzb3IiIGlmIEFSQ0hfSU5URUdSQVRPUiB8fCBNQUNIX1JFQUxWSUVXX0VCIHx8IE1BQ0hfUkVBTFZJRVdfUEJYIHx8IEFSQ0hfRE9WRQpAQCAtNTk5LDYgKzYwNSwxNCBAQAogCWhlbHAKIAkgIFByb2Nlc3NvciBoYXMgdGhlIENQMTUgcmVnaXN0ZXIsIHdoaWNoIGhhcyBNUFUgcmVsYXRlZCByZWdpc3RlcnMuCiAKK2NvbmZpZyBDUFVfVVNFX0RPTUFJTlMKKwlib29sCisJZGVwZW5kcyBvbiBNTVUKKwlkZWZhdWx0IHkgaWYgIUNQVV8zMnY2SworCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIHVzZSBvZiBkb21haW4gc3dpdGNoaW5nCisJICB2aWEgdGhlIHNldF9mcygpIGZ1bmN0aW9uLgorCiAjCiAjIENQVSBzdXBwb3J0cyAzNi1iaXQgSS9PCiAjCkBAIC02MjgsNiArNjQyLDMzIEBACiAJICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGEgQ1BVIHdpdGggdGhlIFRodW1iRUUgZXh0ZW5zaW9uIGFuZCBjb2RlIHRvCiAJICBtYWtlIHVzZSBvZiBpdC4gU2F5IE4gZm9yIGNvZGUgdGhhdCBjYW4gcnVuIG9uIENQVXMgd2l0aG91dCBUaHVtYkVFLgogCitjb25maWcgU1dQX0VNVUxBVEUKKwlib29sICJFbXVsYXRlIFNXUC9TV1BCIGluc3RydWN0aW9ucyIKKwlkZXBlbmRzIG9uIENQVV9WNworCXNlbGVjdCBIQVZFX1BST0NfQ1BVIGlmIFBST0NfRlMKKwlkZWZhdWx0IHkgaWYgU01QCisJaGVscAorCSAgQVJNdjYgYXJjaGl0ZWN0dXJlIGRlcHJlY2F0ZXMgdXNlIG9mIHRoZSBTV1AvU1dQQiBpbnN0cnVjdGlvbnMuCisJICBBUk12NyBtdWx0aXByb2Nlc3NpbmcgZXh0ZW5zaW9ucyBpbnRyb2R1Y2UgdGhlIGFiaWxpdHkgdG8gZGlzYWJsZQorCSAgdGhlc2UgaW5zdHJ1Y3Rpb25zLCB0cmlnZ2VyaW5nIGFuIHVuZGVmaW5lZCBpbnN0cnVjdGlvbiBleGNlcHRpb24KKwkgIHdoZW4gZXhlY3V0ZWQuIFNheSBZIGhlcmUgdG8gZW5hYmxlIHNvZnR3YXJlIGVtdWxhdGlvbiBvZiB0aGVzZQorCSAgaW5zdHJ1Y3Rpb25zIGZvciB1c2Vyc3BhY2UgKG5vdCBrZXJuZWwpIHVzaW5nIExEUkVYL1NUUkVYLgorCSAgQWxzbyBjcmVhdGVzIC9wcm9jL2NwdS9zd3BfZW11bGF0aW9uIGZvciBzdGF0aXN0aWNzLgorCisJICBJbiBzb21lIG9sZGVyIHZlcnNpb25zIG9mIGdsaWJjIFs8PTIuOF0gU1dQIGlzIHVzZWQgZHVyaW5nIGZ1dGV4CisJICB0cnlsb2NrKCkgb3BlcmF0aW9ucyB3aXRoIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIGNvZGUgd2lsbCBub3QKKwkgIGJlIHByZWVtcHRlZC4gVGhpcyBpbnZhbGlkIGFzc3VtcHRpb24gbWF5IGJlIG1vcmUgbGlrZWx5IHRvIGZhaWwKKwkgIHdpdGggU1dQIGVtdWxhdGlvbiBlbmFibGVkLCBsZWFkaW5nIHRvIGRlYWRsb2NrIG9mIHRoZSB1c2VyCisJICBhcHBsaWNhdGlvbi4KKworCSAgTk9URTogd2hlbiBhY2Nlc3NpbmcgdW5jYWNoZWQgc2hhcmVkIHJlZ2lvbnMsIExEUkVYL1NUUkVYIHJlbHkKKwkgIG9uIGFuIGV4dGVybmFsIHRyYW5zYWN0aW9uIG1vbml0b3JpbmcgYmxvY2sgY2FsbGVkIGEgZ2xvYmFsCisJICBtb25pdG9yIHRvIG1haW50YWluIHVwZGF0ZSBhdG9taWNpdHkuIElmIHlvdXIgc3lzdGVtIGRvZXMgbm90CisJICBpbXBsZW1lbnQgYSBnbG9iYWwgbW9uaXRvciwgdGhpcyBvcHRpb24gY2FuIGNhdXNlIHByb2dyYW1zIHRoYXQKKwkgIHBlcmZvcm0gU1dQIG9wZXJhdGlvbnMgdG8gdW5jYWNoZWQgbWVtb3J5IHRvIGRlYWRsb2NrLgorCisJICBJZiB1bnN1cmUsIHNheSBZLgorCiBjb25maWcgQ1BVX0JJR19FTkRJQU4KIAlib29sICJCdWlsZCBiaWctZW5kaWFuIGtlcm5lbCIKIAlkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfQklHX0VORElBTgpAQCAtNzcyLDcgKzgxMyw3IEBACiAJZGVwZW5kcyBvbiBSRUFMVklFV19FQl9BUk0xMU1QIHx8IE1BQ0hfUkVBTFZJRVdfUEIxMU1QIHx8IE1BQ0hfUkVBTFZJRVdfUEIxMTc2IHx8IFwKIAkJICAgUkVBTFZJRVdfRUJfQTlNUCB8fCBBUkNIX01YMzUgfHwgQVJDSF9NWDMxIHx8IE1BQ0hfUkVBTFZJRVdfUEJYIHx8IFwKIAkJICAgQVJDSF9OT01BRElLIHx8IEFSQ0hfT01BUDQgfHwgQVJDSF9TNVBWMzEwIHx8IEFSQ0hfVEVHUkEgfHwgXAotCQkgICBBUkNIX1U4NTAwIHx8IEFSQ0hfVkVYUFJFU1NfQ0E5WDQKKwkJICAgQVJDSF9VODUwMCB8fCBBUkNIX1ZFWFBSRVNTX0NBOVg0IHx8IEFSQ0hfU0hNT0JJTEUKIAlkZWZhdWx0IHkKIAlzZWxlY3QgT1VURVJfQ0FDSEUKIAlzZWxlY3QgT1VURVJfQ0FDSEVfU1lOQwpAQCAtNzg5LDcgKzgzMCw3IEBACiAKIGNvbmZpZyBDQUNIRV9UQVVST1MyCiAJYm9vbCAiRW5hYmxlIHRoZSBUYXVyb3MyIEwyIGNhY2hlIGNvbnRyb2xsZXIiCi0JZGVwZW5kcyBvbiAoQVJDSF9ET1ZFIHx8IEFSQ0hfTU1QKQorCWRlcGVuZHMgb24gKEFSQ0hfRE9WRSB8fCBBUkNIX01NUCB8fCBDUFVfUEo0KQogCWRlZmF1bHQgeQogCXNlbGVjdCBPVVRFUl9DQUNIRQogCWhlbHAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL01ha2VmaWxlIGIvYXJjaC9hcm0vbW0vTWFrZWZpbGUKaW5kZXggZDYzYjZjNC4uMDBkNzRhMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbW0vTWFrZWZpbGUKQEAgLTUsOCArNSw4IEBACiBvYmoteQkJCQk6PSBkbWEtbWFwcGluZy5vIGV4dGFibGUubyBmYXVsdC5vIGluaXQubyBcCiAJCQkJICAgaW9tYXAubwogCi1vYmotJChDT05GSUdfTU1VKQkJKz0gZmF1bHQtYXJtdi5vIGZsdXNoLm8gaW9yZW1hcC5vIG1tYXAubyBcCi0JCQkJICAgcGdkLm8gbW11Lm8gdm1yZWdpb24ubworb2JqLSQoQ09ORklHX01NVSkJCSs9IGZhdWx0LWFybXYubyBmbHVzaC5vIGlkbWFwLm8gaW9yZW1hcC5vIFwKKwkJCQkgICBtbWFwLm8gcGdkLm8gbW11Lm8gdm1yZWdpb24ubwogCiBpZm5lcSAoJChDT05GSUdfTU1VKSx5KQogb2JqLXkJCQkJKz0gbm9tbXUubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYyBiL2FyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmMKaW5kZXggODA5ZjFiZi4uNmI0OGUwYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYworKysgYi9hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jCkBAIC0zMTIsNyArMzEyLDcgQEAKIAkJYWRkciA9IHBhZ2VfYWRkcmVzcyhwYWdlKTsKIAogCWlmIChhZGRyKQotCQkqaGFuZGxlID0gcGFnZV90b19kbWEoZGV2LCBwYWdlKTsKKwkJKmhhbmRsZSA9IHBmbl90b19kbWEoZGV2LCBwYWdlX3RvX3BmbihwYWdlKSk7CiAKIAlyZXR1cm4gYWRkcjsKIH0KQEAgLTQwNyw3ICs0MDcsNyBAQAogCWlmICghYXJjaF9pc19jb2hlcmVudCgpKQogCQlfX2RtYV9mcmVlX3JlbWFwKGNwdV9hZGRyLCBzaXplKTsKIAotCV9fZG1hX2ZyZWVfYnVmZmVyKGRtYV90b19wYWdlKGRldiwgaGFuZGxlKSwgc2l6ZSk7CisJX19kbWFfZnJlZV9idWZmZXIocGZuX3RvX3BhZ2UoZG1hX3RvX3BmbihkZXYsIGhhbmRsZSkpLCBzaXplKTsKIH0KIEVYUE9SVF9TWU1CT0woZG1hX2ZyZWVfY29oZXJlbnQpOwogCkBAIC01NTUsMTcgKzU1NSwyMCBAQAogCXN0cnVjdCBzY2F0dGVybGlzdCAqczsKIAlpbnQgaSwgajsKIAorCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXIpKTsKKwogCWZvcl9lYWNoX3NnKHNnLCBzLCBuZW50cywgaSkgewotCQlzLT5kbWFfYWRkcmVzcyA9IGRtYV9tYXBfcGFnZShkZXYsIHNnX3BhZ2UocyksIHMtPm9mZnNldCwKKwkJcy0+ZG1hX2FkZHJlc3MgPSBfX2RtYV9tYXBfcGFnZShkZXYsIHNnX3BhZ2UocyksIHMtPm9mZnNldCwKIAkJCQkJCXMtPmxlbmd0aCwgZGlyKTsKIAkJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKGRldiwgcy0+ZG1hX2FkZHJlc3MpKQogCQkJZ290byBiYWRfbWFwcGluZzsKIAl9CisJZGVidWdfZG1hX21hcF9zZyhkZXYsIHNnLCBuZW50cywgbmVudHMsIGRpcik7CiAJcmV0dXJuIG5lbnRzOwogCiAgYmFkX21hcHBpbmc6CiAJZm9yX2VhY2hfc2coc2csIHMsIGksIGopCi0JCWRtYV91bm1hcF9wYWdlKGRldiwgc2dfZG1hX2FkZHJlc3MocyksIHNnX2RtYV9sZW4ocyksIGRpcik7CisJCV9fZG1hX3VubWFwX3BhZ2UoZGV2LCBzZ19kbWFfYWRkcmVzcyhzKSwgc2dfZG1hX2xlbihzKSwgZGlyKTsKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0woZG1hX21hcF9zZyk7CkBAIC01ODYsOCArNTg5LDEwIEBACiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzOwogCWludCBpOwogCisJZGVidWdfZG1hX3VubWFwX3NnKGRldiwgc2csIG5lbnRzLCBkaXIpOworCiAJZm9yX2VhY2hfc2coc2csIHMsIG5lbnRzLCBpKQotCQlkbWFfdW5tYXBfcGFnZShkZXYsIHNnX2RtYV9hZGRyZXNzKHMpLCBzZ19kbWFfbGVuKHMpLCBkaXIpOworCQlfX2RtYV91bm1hcF9wYWdlKGRldiwgc2dfZG1hX2FkZHJlc3MocyksIHNnX2RtYV9sZW4ocyksIGRpcik7CiB9CiBFWFBPUlRfU1lNQk9MKGRtYV91bm1hcF9zZyk7CiAKQEAgLTYxMiw2ICs2MTcsOCBAQAogCQlfX2RtYV9wYWdlX2Rldl90b19jcHUoc2dfcGFnZShzKSwgcy0+b2Zmc2V0LAogCQkJCSAgICAgIHMtPmxlbmd0aCwgZGlyKTsKIAl9CisKKwlkZWJ1Z19kbWFfc3luY19zZ19mb3JfY3B1KGRldiwgc2csIG5lbnRzLCBkaXIpOwogfQogRVhQT1JUX1NZTUJPTChkbWFfc3luY19zZ19mb3JfY3B1KTsKIApAQCAtNjM2LDUgKzY0MywxNiBAQAogCQlfX2RtYV9wYWdlX2NwdV90b19kZXYoc2dfcGFnZShzKSwgcy0+b2Zmc2V0LAogCQkJCSAgICAgIHMtPmxlbmd0aCwgZGlyKTsKIAl9CisKKwlkZWJ1Z19kbWFfc3luY19zZ19mb3JfZGV2aWNlKGRldiwgc2csIG5lbnRzLCBkaXIpOwogfQogRVhQT1JUX1NZTUJPTChkbWFfc3luY19zZ19mb3JfZGV2aWNlKTsKKworI2RlZmluZSBQUkVBTExPQ19ETUFfREVCVUdfRU5UUklFUwk0MDk2CisKK3N0YXRpYyBpbnQgX19pbml0IGRtYV9kZWJ1Z19kb19pbml0KHZvaWQpCit7CisJZG1hX2RlYnVnX2luaXQoUFJFQUxMT0NfRE1BX0RFQlVHX0VOVFJJRVMpOworCXJldHVybiAwOworfQorZnNfaW5pdGNhbGwoZG1hX2RlYnVnX2RvX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vZmF1bHQtYXJtdi5jIGIvYXJjaC9hcm0vbW0vZmF1bHQtYXJtdi5jCmluZGV4IDgzZTU5ZjguLjAxMjEwZGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2ZhdWx0LWFybXYuYworKysgYi9hcmNoL2FybS9tbS9mYXVsdC1hcm12LmMKQEAgLTI2LDcgKzI2LDcgQEAKIAogI2luY2x1ZGUgIm1tLmgiCiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHNoYXJlZF9wdGVfbWFzayA9IExfUFRFX01UX0JVRkZFUkFCTEU7CitzdGF0aWMgcHRldmFsX3Qgc2hhcmVkX3B0ZV9tYXNrID0gTF9QVEVfTVRfQlVGRkVSQUJMRTsKIAogI2lmIF9fTElOVVhfQVJNX0FSQ0hfXyA8IDYKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9mYXVsdC5jIGIvYXJjaC9hcm0vbW0vZmF1bHQuYwppbmRleCAxZTIxZTEyLi5mMTBmOWJhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9mYXVsdC5jCisrKyBiL2FyY2gvYXJtL21tL2ZhdWx0LmMKQEAgLTEwOCw3ICsxMDgsNyBAQAogCiAJCXB0ZSA9IHB0ZV9vZmZzZXRfbWFwKHBtZCwgYWRkcik7CiAJCXByaW50aygiLCAqcHRlPSUwOGx4IiwgcHRlX3ZhbCgqcHRlKSk7Ci0JCXByaW50aygiLCAqcHB0ZT0lMDhseCIsIHB0ZV92YWwocHRlWy1QVFJTX1BFUl9QVEVdKSk7CisJCXByaW50aygiLCAqcHB0ZT0lMDhseCIsIHB0ZV92YWwocHRlW1BURV9IV1RBQkxFX1BUUlNdKSk7CiAJCXB0ZV91bm1hcChwdGUpOwogCX0gd2hpbGUoMCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2lkbWFwLmMgYi9hcmNoL2FybS9tbS9pZG1hcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3Mjk5NDQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tbS9pZG1hcC5jCkBAIC0wLDAgKzEsNjcgQEAKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKworI2luY2x1ZGUgPGFzbS9jcHV0eXBlLmg+CisjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorCitzdGF0aWMgdm9pZCBpZG1hcF9hZGRfcG1kKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCisJdW5zaWduZWQgbG9uZyBwcm90KQoreworCXBtZF90ICpwbWQgPSBwbWRfb2Zmc2V0KHBnZCwgYWRkcik7CisKKwlhZGRyID0gKGFkZHIgJiBQTURfTUFTSykgfCBwcm90OworCXBtZFswXSA9IF9fcG1kKGFkZHIpOworCWFkZHIgKz0gU0VDVElPTl9TSVpFOworCXBtZFsxXSA9IF9fcG1kKGFkZHIpOworCWZsdXNoX3BtZF9lbnRyeShwbWQpOworfQorCit2b2lkIGlkZW50aXR5X21hcHBpbmdfYWRkKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJdW5zaWduZWQgbG9uZyBwcm90LCBuZXh0OworCisJcHJvdCA9IFBNRF9UWVBFX1NFQ1QgfCBQTURfU0VDVF9BUF9XUklURTsKKwlpZiAoY3B1X2FyY2hpdGVjdHVyZSgpIDw9IENQVV9BUkNIX0FSTXY1VEVKICYmICFjcHVfaXNfeHNjYWxlKCkpCisJCXByb3QgfD0gUE1EX0JJVDQ7CisKKwlwZ2QgKz0gcGdkX2luZGV4KGFkZHIpOworCWRvIHsKKwkJbmV4dCA9IHBnZF9hZGRyX2VuZChhZGRyLCBlbmQpOworCQlpZG1hcF9hZGRfcG1kKHBnZCwgYWRkciwgbmV4dCwgcHJvdCk7CisJfSB3aGlsZSAocGdkKyssIGFkZHIgPSBuZXh0LCBhZGRyICE9IGVuZCk7Cit9CisKKyNpZmRlZiBDT05GSUdfU01QCitzdGF0aWMgdm9pZCBpZG1hcF9kZWxfcG1kKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJcG1kX3QgKnBtZCA9IHBtZF9vZmZzZXQocGdkLCBhZGRyKTsKKwlwbWRfY2xlYXIocG1kKTsKK30KKwordm9pZCBpZGVudGl0eV9tYXBwaW5nX2RlbChwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCXVuc2lnbmVkIGxvbmcgbmV4dDsKKworCXBnZCArPSBwZ2RfaW5kZXgoYWRkcik7CisJZG8geworCQluZXh0ID0gcGdkX2FkZHJfZW5kKGFkZHIsIGVuZCk7CisJCWlkbWFwX2RlbF9wbWQocGdkLCBhZGRyLCBuZXh0KTsKKwl9IHdoaWxlIChwZ2QrKywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kKTsKK30KKyNlbmRpZgorCisvKgorICogSW4gb3JkZXIgdG8gc29mdC1ib290LCB3ZSBuZWVkIHRvIGluc2VydCBhIDE6MSBtYXBwaW5nIGluIHBsYWNlIG9mCisgKiB0aGUgdXNlci1tb2RlIHBhZ2VzLiAgVGhpcyB3aWxsIHRoZW4gZW5zdXJlIHRoYXQgd2UgaGF2ZSBwcmVkaWN0YWJsZQorICogcmVzdWx0cyB3aGVuIHR1cm5pbmcgdGhlIG1tdSBvZmYKKyAqLwordm9pZCBzZXR1cF9tbV9mb3JfcmVib290KGNoYXIgbW9kZSkKK3sKKwkvKgorCSAqIFdlIG5lZWQgdG8gYWNjZXNzIHRvIHVzZXItbW9kZSBwYWdlIHRhYmxlcyBoZXJlLiBGb3Iga2VybmVsIHRocmVhZHMKKwkgKiB3ZSBkb24ndCBoYXZlIGFueSB1c2VyLW1vZGUgbWFwcGluZ3Mgc28gd2UgdXNlIHRoZSBjb250ZXh0IHRoYXQgd2UKKwkgKiAiYm9ycm93ZWQiLgorCSAqLworCWlkZW50aXR5X21hcHBpbmdfYWRkKGN1cnJlbnQtPmFjdGl2ZV9tbS0+cGdkLCAwLCBUQVNLX1NJWkUpOworCWxvY2FsX2ZsdXNoX3RsYl9hbGwoKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2lvcmVtYXAuYyBiL2FyY2gvYXJtL21tL2lvcmVtYXAuYwppbmRleCA1NWMxN2E2Li5hYjUwNjI3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9pb3JlbWFwLmMKKysrIGIvYXJjaC9hcm0vbW0vaW9yZW1hcC5jCkBAIC0yMDQsMTIgKzIwNCw4IEBACiAJLyoKIAkgKiBEb24ndCBhbGxvdyBSQU0gdG8gYmUgbWFwcGVkIC0gdGhpcyBjYXVzZXMgcHJvYmxlbXMgd2l0aCBBUk12NisKIAkgKi8KLQlpZiAocGZuX3ZhbGlkKHBmbikpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQlVHOiBZb3VyIGRyaXZlciBjYWxscyBpb3JlbWFwKCkgb24gc3lzdGVtIG1lbW9yeS4gIFRoaXMgbGVhZHNcbiIKLQkJICAgICAgICJ0byBhcmNoaXRlY3R1cmFsbHkgdW5wcmVkaWN0YWJsZSBiZWhhdmlvdXIgb24gQVJNdjYrLCBhbmQgaW9yZW1hcCgpXG4iCi0JCSAgICAgICAid2lsbCBmYWlsIGluIHRoZSBuZXh0IGtlcm5lbCByZWxlYXNlLiAgUGxlYXNlIGZpeCB5b3VyIGRyaXZlci5cbiIpOwotCQlXQVJOX09OKDEpOwotCX0KKwlpZiAoV0FSTl9PTihwZm5fdmFsaWQocGZuKSkpCisJCXJldHVybiBOVUxMOwogCiAJdHlwZSA9IGdldF9tZW1fdHlwZShtdHlwZSk7CiAJaWYgKCF0eXBlKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vbW0uaCBiL2FyY2gvYXJtL21tL21tLmgKaW5kZXggNjYzMDYyMC4uMzY5NjBkZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vbW0uaAorKysgYi9hcmNoL2FybS9tbS9tbS5oCkBAIC0xNiw3ICsxNiw3IEBACiB9CiAKIHN0cnVjdCBtZW1fdHlwZSB7Ci0JdW5zaWduZWQgaW50IHByb3RfcHRlOworCXB0ZXZhbF90IHByb3RfcHRlOwogCXVuc2lnbmVkIGludCBwcm90X2wxOwogCXVuc2lnbmVkIGludCBwcm90X3NlY3Q7CiAJdW5zaWduZWQgaW50IGRvbWFpbjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL21tdS5jIGIvYXJjaC9hcm0vbW0vbW11LmMKaW5kZXggNzJhZDNlMS4uM2M2N2U5MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vbW11LmMKKysrIGIvYXJjaC9hcm0vbW0vbW11LmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxhc20vc21wX3BsYXQuaD4KICNpbmNsdWRlIDxhc20vdGxiLmg+CiAjaW5jbHVkZSA8YXNtL2hpZ2htZW0uaD4KKyNpbmNsdWRlIDxhc20vdHJhcHMuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KQEAgLTYyLDcgKzYzLDcgQEAKIAljb25zdCBjaGFyCXBvbGljeVsxNl07CiAJdW5zaWduZWQgaW50CWNyX21hc2s7CiAJdW5zaWduZWQgaW50CXBtZDsKLQl1bnNpZ25lZCBpbnQJcHRlOworCXB0ZXZhbF90CXB0ZTsKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2FjaGVwb2xpY3kgY2FjaGVfcG9saWNpZXNbXSBfX2luaXRkYXRhID0gewpAQCAtMTkwLDcgKzE5MSw3IEBACiB9CiAjZW5kaWYKIAotI2RlZmluZSBQUk9UX1BURV9ERVZJQ0UJCUxfUFRFX1BSRVNFTlR8TF9QVEVfWU9VTkd8TF9QVEVfRElSVFl8TF9QVEVfV1JJVEUKKyNkZWZpbmUgUFJPVF9QVEVfREVWSUNFCQlMX1BURV9QUkVTRU5UfExfUFRFX1lPVU5HfExfUFRFX0RJUlRZfExfUFRFX1hOCiAjZGVmaW5lIFBST1RfU0VDVF9ERVZJQ0UJUE1EX1RZUEVfU0VDVHxQTURfU0VDVF9BUF9XUklURQogCiBzdGF0aWMgc3RydWN0IG1lbV90eXBlIG1lbV90eXBlc1tdID0gewpAQCAtMjM1LDE5ICsyMzYsMTggQEAKIAl9LAogCVtNVF9MT1dfVkVDVE9SU10gPSB7CiAJCS5wcm90X3B0ZSAgPSBMX1BURV9QUkVTRU5UIHwgTF9QVEVfWU9VTkcgfCBMX1BURV9ESVJUWSB8Ci0JCQkJTF9QVEVfRVhFQywKKwkJCQlMX1BURV9SRE9OTFksCiAJCS5wcm90X2wxICAgPSBQTURfVFlQRV9UQUJMRSwKIAkJLmRvbWFpbiAgICA9IERPTUFJTl9VU0VSLAogCX0sCiAJW01UX0hJR0hfVkVDVE9SU10gPSB7CiAJCS5wcm90X3B0ZSAgPSBMX1BURV9QUkVTRU5UIHwgTF9QVEVfWU9VTkcgfCBMX1BURV9ESVJUWSB8Ci0JCQkJTF9QVEVfVVNFUiB8IExfUFRFX0VYRUMsCisJCQkJTF9QVEVfVVNFUiB8IExfUFRFX1JET05MWSwKIAkJLnByb3RfbDEgICA9IFBNRF9UWVBFX1RBQkxFLAogCQkuZG9tYWluICAgID0gRE9NQUlOX1VTRVIsCiAJfSwKIAlbTVRfTUVNT1JZXSA9IHsKLQkJLnByb3RfcHRlICA9IExfUFRFX1BSRVNFTlQgfCBMX1BURV9ZT1VORyB8IExfUFRFX0RJUlRZIHwKLQkJCQlMX1BURV9XUklURSB8IExfUFRFX0VYRUMsCisJCS5wcm90X3B0ZSAgPSBMX1BURV9QUkVTRU5UIHwgTF9QVEVfWU9VTkcgfCBMX1BURV9ESVJUWSwKIAkJLnByb3RfbDEgICA9IFBNRF9UWVBFX1RBQkxFLAogCQkucHJvdF9zZWN0ID0gUE1EX1RZUEVfU0VDVCB8IFBNRF9TRUNUX0FQX1dSSVRFLAogCQkuZG9tYWluICAgID0gRE9NQUlOX0tFUk5FTCwKQEAgLTI1OCwyMSArMjU4LDIwIEBACiAJfSwKIAlbTVRfTUVNT1JZX05PTkNBQ0hFRF0gPSB7CiAJCS5wcm90X3B0ZSAgPSBMX1BURV9QUkVTRU5UIHwgTF9QVEVfWU9VTkcgfCBMX1BURV9ESVJUWSB8Ci0JCQkJTF9QVEVfV1JJVEUgfCBMX1BURV9FWEVDIHwgTF9QVEVfTVRfQlVGRkVSQUJMRSwKKwkJCQlMX1BURV9NVF9CVUZGRVJBQkxFLAogCQkucHJvdF9sMSAgID0gUE1EX1RZUEVfVEFCTEUsCiAJCS5wcm90X3NlY3QgPSBQTURfVFlQRV9TRUNUIHwgUE1EX1NFQ1RfQVBfV1JJVEUsCiAJCS5kb21haW4gICAgPSBET01BSU5fS0VSTkVMLAogCX0sCiAJW01UX01FTU9SWV9EVENNXSA9IHsKIAkJLnByb3RfcHRlICA9IExfUFRFX1BSRVNFTlQgfCBMX1BURV9ZT1VORyB8IExfUFRFX0RJUlRZIHwKLQkJCQlMX1BURV9XUklURSwKKwkJCQlMX1BURV9YTiwKIAkJLnByb3RfbDEgICA9IFBNRF9UWVBFX1RBQkxFLAogCQkucHJvdF9zZWN0ID0gUE1EX1RZUEVfU0VDVCB8IFBNRF9TRUNUX1hOLAogCQkuZG9tYWluICAgID0gRE9NQUlOX0tFUk5FTCwKIAl9LAogCVtNVF9NRU1PUllfSVRDTV0gPSB7Ci0JCS5wcm90X3B0ZSAgPSBMX1BURV9QUkVTRU5UIHwgTF9QVEVfWU9VTkcgfCBMX1BURV9ESVJUWSB8Ci0JCQkJTF9QVEVfV1JJVEUgfCBMX1BURV9FWEVDLAorCQkucHJvdF9wdGUgID0gTF9QVEVfUFJFU0VOVCB8IExfUFRFX1lPVU5HIHwgTF9QVEVfRElSVFksCiAJCS5wcm90X2wxICAgPSBQTURfVFlQRV9UQUJMRSwKIAkJLmRvbWFpbiAgICA9IERPTUFJTl9LRVJORUwsCiAJfSwKQEAgLTQ3OSw3ICs0NzgsNyBAQAogCiAJcGdwcm90X3VzZXIgICA9IF9fcGdwcm90KExfUFRFX1BSRVNFTlQgfCBMX1BURV9ZT1VORyB8IHVzZXJfcGdwcm90KTsKIAlwZ3Byb3Rfa2VybmVsID0gX19wZ3Byb3QoTF9QVEVfUFJFU0VOVCB8IExfUFRFX1lPVU5HIHwKLQkJCQkgTF9QVEVfRElSVFkgfCBMX1BURV9XUklURSB8IGtlcm5fcGdwcm90KTsKKwkJCQkgTF9QVEVfRElSVFkgfCBrZXJuX3BncHJvdCk7CiAKIAltZW1fdHlwZXNbTVRfTE9XX1ZFQ1RPUlNdLnByb3RfbDEgfD0gZWNjX21hc2s7CiAJbWVtX3R5cGVzW01UX0hJR0hfVkVDVE9SU10ucHJvdF9sMSB8PSBlY2NfbWFzazsKQEAgLTUzNSw3ICs1MzQsNyBAQAogewogCWlmIChwbWRfbm9uZSgqcG1kKSkgewogCQlwdGVfdCAqcHRlID0gZWFybHlfYWxsb2MoMiAqIFBUUlNfUEVSX1BURSAqIHNpemVvZihwdGVfdCkpOwotCQlfX3BtZF9wb3B1bGF0ZShwbWQsIF9fcGEocHRlKSB8IHByb3QpOworCQlfX3BtZF9wb3B1bGF0ZShwbWQsIF9fcGEocHRlKSwgcHJvdCk7CiAJfQogCUJVR19PTihwbWRfYmFkKCpwbWQpKTsKIAlyZXR1cm4gcHRlX29mZnNldF9rZXJuZWwocG1kLCBhZGRyKTsKQEAgLTU1Myw3ICs1NTIsNyBAQAogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgYWxsb2NfaW5pdF9zZWN0aW9uKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCQkgICAgICB1bnNpZ25lZCBsb25nIGVuZCwgdW5zaWduZWQgbG9uZyBwaHlzLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCBwaHlzX2FkZHJfdCBwaHlzLAogCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBtZW1fdHlwZSAqdHlwZSkKIHsKIAlwbWRfdCAqcG1kID0gcG1kX29mZnNldChwZ2QsIGFkZHIpOwpAQCAtNTg4LDcgKzU4Nyw4IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgY3JlYXRlXzM2Yml0X21hcHBpbmcoc3RydWN0IG1hcF9kZXNjICptZCwKIAkJCQkJY29uc3Qgc3RydWN0IG1lbV90eXBlICp0eXBlKQogewotCXVuc2lnbmVkIGxvbmcgcGh5cywgYWRkciwgbGVuZ3RoLCBlbmQ7CisJdW5zaWduZWQgbG9uZyBhZGRyLCBsZW5ndGgsIGVuZDsKKwlwaHlzX2FkZHJfdCBwaHlzOwogCXBnZF90ICpwZ2Q7CiAKIAlhZGRyID0gbWQtPnZpcnR1YWw7CkBAIC05MTQsMTIgKzkxNCwxMSBAQAogewogCXN0cnVjdCBtYXBfZGVzYyBtYXA7CiAJdW5zaWduZWQgbG9uZyBhZGRyOwotCXZvaWQgKnZlY3RvcnM7CiAKIAkvKgogCSAqIEFsbG9jYXRlIHRoZSB2ZWN0b3IgcGFnZSBlYXJseS4KIAkgKi8KLQl2ZWN0b3JzID0gZWFybHlfYWxsb2MoUEFHRV9TSVpFKTsKKwl2ZWN0b3JzX3BhZ2UgPSBlYXJseV9hbGxvYyhQQUdFX1NJWkUpOwogCiAJZm9yIChhZGRyID0gVk1BTExPQ19FTkQ7IGFkZHI7IGFkZHIgKz0gUEdESVJfU0laRSkKIAkJcG1kX2NsZWFyKHBtZF9vZmZfayhhZGRyKSk7CkBAIC05NTksNyArOTU4LDcgQEAKIAkgKiBsb2NhdGlvbiAoMHhmZmZmMDAwMCkuICBJZiB3ZSBhcmVuJ3QgdXNpbmcgaGlnaC12ZWN0b3JzLCBhbHNvCiAJICogY3JlYXRlIGEgbWFwcGluZyBhdCB0aGUgbG93LXZlY3RvcnMgdmlydHVhbCBhZGRyZXNzLgogCSAqLwotCW1hcC5wZm4gPSBfX3BoeXNfdG9fcGZuKHZpcnRfdG9fcGh5cyh2ZWN0b3JzKSk7CisJbWFwLnBmbiA9IF9fcGh5c190b19wZm4odmlydF90b19waHlzKHZlY3RvcnNfcGFnZSkpOwogCW1hcC52aXJ0dWFsID0gMHhmZmZmMDAwMDsKIAltYXAubGVuZ3RoID0gUEFHRV9TSVpFOwogCW1hcC50eXBlID0gTVRfSElHSF9WRUNUT1JTOwpAQCAtMTA0NCwzOCArMTA0MywzIEBACiAJZW1wdHlfemVyb19wYWdlID0gdmlydF90b19wYWdlKHplcm9fcGFnZSk7CiAJX19mbHVzaF9kY2FjaGVfcGFnZShOVUxMLCBlbXB0eV96ZXJvX3BhZ2UpOwogfQotCi0vKgotICogSW4gb3JkZXIgdG8gc29mdC1ib290LCB3ZSBuZWVkIHRvIGluc2VydCBhIDE6MSBtYXBwaW5nIGluIHBsYWNlIG9mCi0gKiB0aGUgdXNlci1tb2RlIHBhZ2VzLiAgVGhpcyB3aWxsIHRoZW4gZW5zdXJlIHRoYXQgd2UgaGF2ZSBwcmVkaWN0YWJsZQotICogcmVzdWx0cyB3aGVuIHR1cm5pbmcgdGhlIG1tdSBvZmYKLSAqLwotdm9pZCBzZXR1cF9tbV9mb3JfcmVib290KGNoYXIgbW9kZSkKLXsKLQl1bnNpZ25lZCBsb25nIGJhc2VfcG1kdmFsOwotCXBnZF90ICpwZ2Q7Ci0JaW50IGk7Ci0KLQkvKgotCSAqIFdlIG5lZWQgdG8gYWNjZXNzIHRvIHVzZXItbW9kZSBwYWdlIHRhYmxlcyBoZXJlLiBGb3Iga2VybmVsIHRocmVhZHMKLQkgKiB3ZSBkb24ndCBoYXZlIGFueSB1c2VyLW1vZGUgbWFwcGluZ3Mgc28gd2UgdXNlIHRoZSBjb250ZXh0IHRoYXQgd2UKLQkgKiAiYm9ycm93ZWQiLgotCSAqLwotCXBnZCA9IGN1cnJlbnQtPmFjdGl2ZV9tbS0+cGdkOwotCi0JYmFzZV9wbWR2YWwgPSBQTURfU0VDVF9BUF9XUklURSB8IFBNRF9TRUNUX0FQX1JFQUQgfCBQTURfVFlQRV9TRUNUOwotCWlmIChjcHVfYXJjaGl0ZWN0dXJlKCkgPD0gQ1BVX0FSQ0hfQVJNdjVURUogJiYgIWNwdV9pc194c2NhbGUoKSkKLQkJYmFzZV9wbWR2YWwgfD0gUE1EX0JJVDQ7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgRklSU1RfVVNFUl9QR0RfTlIgKyBVU0VSX1BUUlNfUEVSX1BHRDsgaSsrLCBwZ2QrKykgewotCQl1bnNpZ25lZCBsb25nIHBtZHZhbCA9IChpIDw8IFBHRElSX1NISUZUKSB8IGJhc2VfcG1kdmFsOwotCQlwbWRfdCAqcG1kOwotCi0JCXBtZCA9IHBtZF9vZmYocGdkLCBpIDw8IFBHRElSX1NISUZUKTsKLQkJcG1kWzBdID0gX19wbWQocG1kdmFsKTsKLQkJcG1kWzFdID0gX19wbWQocG1kdmFsICsgKDEgPDwgKFBHRElSX1NISUZUIC0gMSkpKTsKLQkJZmx1c2hfcG1kX2VudHJ5KHBtZCk7Ci0JfQotCi0JbG9jYWxfZmx1c2hfdGxiX2FsbCgpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcGdkLmMgYi9hcmNoL2FybS9tbS9wZ2QuYwppbmRleCA2OWJiZmM2Li45MzI5MmExIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wZ2QuYworKysgYi9hcmNoL2FybS9tbS9wZ2QuYwpAQCAtMTcsMTIgKzE3LDEwIEBACiAKICNpbmNsdWRlICJtbS5oIgogCi0jZGVmaW5lIEZJUlNUX0tFUk5FTF9QR0RfTlIJKEZJUlNUX1VTRVJfUEdEX05SICsgVVNFUl9QVFJTX1BFUl9QR0QpCi0KIC8qCiAgKiBuZWVkIHRvIGdldCBhIDE2ayBwYWdlIGZvciBsZXZlbCAxCiAgKi8KLXBnZF90ICpnZXRfcGdkX3Nsb3coc3RydWN0IG1tX3N0cnVjdCAqbW0pCitwZ2RfdCAqcGdkX2FsbG9jKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogewogCXBnZF90ICpuZXdfcGdkLCAqaW5pdF9wZ2Q7CiAJcG1kX3QgKm5ld19wbWQsICppbml0X3BtZDsKQEAgLTMyLDE0ICszMCwxNCBAQAogCWlmICghbmV3X3BnZCkKIAkJZ290byBub19wZ2Q7CiAKLQltZW1zZXQobmV3X3BnZCwgMCwgRklSU1RfS0VSTkVMX1BHRF9OUiAqIHNpemVvZihwZ2RfdCkpOworCW1lbXNldChuZXdfcGdkLCAwLCBVU0VSX1BUUlNfUEVSX1BHRCAqIHNpemVvZihwZ2RfdCkpOwogCiAJLyoKIAkgKiBDb3B5IG92ZXIgdGhlIGtlcm5lbCBhbmQgSU8gUEdEIGVudHJpZXMKIAkgKi8KIAlpbml0X3BnZCA9IHBnZF9vZmZzZXRfaygwKTsKLQltZW1jcHkobmV3X3BnZCArIEZJUlNUX0tFUk5FTF9QR0RfTlIsIGluaXRfcGdkICsgRklSU1RfS0VSTkVMX1BHRF9OUiwKLQkJICAgICAgIChQVFJTX1BFUl9QR0QgLSBGSVJTVF9LRVJORUxfUEdEX05SKSAqIHNpemVvZihwZ2RfdCkpOworCW1lbWNweShuZXdfcGdkICsgVVNFUl9QVFJTX1BFUl9QR0QsIGluaXRfcGdkICsgVVNFUl9QVFJTX1BFUl9QR0QsCisJCSAgICAgICAoUFRSU19QRVJfUEdEIC0gVVNFUl9QVFJTX1BFUl9QR0QpICogc2l6ZW9mKHBnZF90KSk7CiAKIAljbGVhbl9kY2FjaGVfYXJlYShuZXdfcGdkLCBQVFJTX1BFUl9QR0QgKiBzaXplb2YocGdkX3QpKTsKIApAQCAtNzMsMjggKzcxLDI5IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLXZvaWQgZnJlZV9wZ2Rfc2xvdyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGdkX3QgKnBnZCkKK3ZvaWQgcGdkX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2RfYmFzZSkKIHsKKwlwZ2RfdCAqcGdkOwogCXBtZF90ICpwbWQ7CiAJcGd0YWJsZV90IHB0ZTsKIAotCWlmICghcGdkKQorCWlmICghcGdkX2Jhc2UpCiAJCXJldHVybjsKIAotCS8qIHBnZCBpcyBhbHdheXMgcHJlc2VudCBhbmQgZ29vZCAqLwotCXBtZCA9IHBtZF9vZmYocGdkLCAwKTsKLQlpZiAocG1kX25vbmUoKnBtZCkpCi0JCWdvdG8gZnJlZTsKLQlpZiAocG1kX2JhZCgqcG1kKSkgewotCQlwbWRfRVJST1IoKnBtZCk7Ci0JCXBtZF9jbGVhcihwbWQpOwotCQlnb3RvIGZyZWU7Ci0JfQorCXBnZCA9IHBnZF9iYXNlICsgcGdkX2luZGV4KDApOworCWlmIChwZ2Rfbm9uZV9vcl9jbGVhcl9iYWQocGdkKSkKKwkJZ290byBub19wZ2Q7CisKKwlwbWQgPSBwbWRfb2Zmc2V0KHBnZCwgMCk7CisJaWYgKHBtZF9ub25lX29yX2NsZWFyX2JhZChwbWQpKQorCQlnb3RvIG5vX3BtZDsKIAogCXB0ZSA9IHBtZF9wZ3RhYmxlKCpwbWQpOwogCXBtZF9jbGVhcihwbWQpOwogCXB0ZV9mcmVlKG1tLCBwdGUpOworbm9fcG1kOgorCXBnZF9jbGVhcihwZ2QpOwogCXBtZF9mcmVlKG1tLCBwbWQpOwotZnJlZToKLQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKSBwZ2QsIDIpOworbm9fcGdkOgorCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpIHBnZF9iYXNlLCAyKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtbWFjcm9zLlMgYi9hcmNoL2FybS9tbS9wcm9jLW1hY3Jvcy5TCmluZGV4IGI3OTVhZmQuLmUzMmZhNDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtbWFjcm9zLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1tYWNyb3MuUwpAQCAtOTEsNyArOTEsNyBAQAogI2lmIExfUFRFX1NIQVJFRCAhPSBQVEVfRVhUX1NIQVJFRAogI2Vycm9yIFBURSBzaGFyZWQgYml0IG1pc21hdGNoCiAjZW5kaWYKLSNpZiAoTF9QVEVfRVhFQytMX1BURV9VU0VSK0xfUFRFX1dSSVRFK0xfUFRFX0RJUlRZK0xfUFRFX1lPVU5HK1wKKyNpZiAoTF9QVEVfWE4rTF9QVEVfVVNFUitMX1BURV9SRE9OTFkrTF9QVEVfRElSVFkrTF9QVEVfWU9VTkcrXAogICAgICBMX1BURV9GSUxFK0xfUFRFX1BSRVNFTlQpID4gTF9QVEVfU0hBUkVECiAjZXJyb3IgSW52YWxpZCBMaW51eCBQVEUgYml0IHNldHRpbmdzCiAjZW5kaWYKQEAgLTEwOSw2ICsxMDksMTAgQEAKICAqICAxMTB4ICAgMCAgIDEgICAwCXIvdwlyL28KICAqICAxMXgwICAgMCAgIDEgICAwCXIvdwlyL28KICAqICAxMTExICAgMCAgIDEgICAxCXIvdwlyL3cKKyAqCisgKiBJZiAhQ09ORklHX0NQVV9VU0VfRE9NQUlOUywgdGhlIGZvbGxvd2luZyBwZXJtaXNzaW9ucyBhcmUgY2hhbmdlZDoKKyAqICAxMTB4ICAgMSAgIDEgICAxCXIvbwlyL28KKyAqICAxMXgwICAgMSAgIDEgICAxCXIvbwlyL28KICAqLwogCS5tYWNybwlhcm12Nl9tdF90YWJsZSBwZngKIFxwZnhcKClfbXRfdGFibGU6CkBAIC0xMzEsNyArMTM1LDcgQEAKIAkuZW5kbQogCiAJLm1hY3JvCWFybXY2X3NldF9wdGVfZXh0IHBmeAotCXN0cglyMSwgW3IwXSwgIy0yMDQ4CQlAIGxpbnV4IHZlcnNpb24KKwlzdHIJcjEsIFtyMF0sICMyMDQ4CQkJQCBsaW51eCB2ZXJzaW9uCiAKIAliaWMJcjMsIHIxLCAjMHgwMDAwMDNmYwogCWJpYwlyMywgcjMsICNQVEVfVFlQRV9NQVNLCkBAIC0xNDIsMTcgKzE0NiwyMCBAQAogCWFuZAlyMiwgcjEsICNMX1BURV9NVF9NQVNLCiAJbGRyCXIyLCBbaXAsIHIyXQogCi0JdHN0CXIxLCAjTF9QVEVfV1JJVEUKLQl0c3RuZQlyMSwgI0xfUFRFX0RJUlRZCi0Jb3JyZXEJcjMsIHIzLCAjUFRFX0VYVF9BUFgKKwllb3IJcjEsIHIxLCAjTF9QVEVfRElSVFkKKwl0c3QJcjEsICNMX1BURV9ESVJUWXxMX1BURV9SRE9OTFkKKwlvcnJuZQlyMywgcjMsICNQVEVfRVhUX0FQWAogCiAJdHN0CXIxLCAjTF9QVEVfVVNFUgogCW9ycm5lCXIzLCByMywgI1BURV9FWFRfQVAxCisjaWZkZWYgQ09ORklHX0NQVV9VU0VfRE9NQUlOUworCUAgYWxsb3cga2VybmVsIHJlYWQvd3JpdGUgYWNjZXNzIHRvIHJlYWQtb25seSB1c2VyIHBhZ2VzCiAJdHN0bmUJcjMsICNQVEVfRVhUX0FQWAogCWJpY25lCXIzLCByMywgI1BURV9FWFRfQVBYIHwgUFRFX0VYVF9BUDAKKyNlbmRpZgogCi0JdHN0CXIxLCAjTF9QVEVfRVhFQwotCW9ycmVxCXIzLCByMywgI1BURV9FWFRfWE4KKwl0c3QJcjEsICNMX1BURV9YTgorCW9ycm5lCXIzLCByMywgI1BURV9FWFRfWE4KIAogCW9ycglyMywgcjMsIHIyCiAKQEAgLTE4MCw5ICsxODcsOSBAQAogICogIDExMTEgIDB4ZmYJci93CXIvdwogICovCiAJLm1hY3JvCWFybXYzX3NldF9wdGVfZXh0IHdjX2Rpc2FibGU9MQotCXN0cglyMSwgW3IwXSwgIy0yMDQ4CQlAIGxpbnV4IHZlcnNpb24KKwlzdHIJcjEsIFtyMF0sICMyMDQ4CQkJQCBsaW51eCB2ZXJzaW9uCiAKLQllb3IJcjMsIHIxLCAjTF9QVEVfUFJFU0VOVCB8IExfUFRFX1lPVU5HIHwgTF9QVEVfV1JJVEUgfCBMX1BURV9ESVJUWQorCWVvcglyMywgcjEsICNMX1BURV9QUkVTRU5UIHwgTF9QVEVfWU9VTkcgfCBMX1BURV9ESVJUWQogCiAJYmljCXIyLCByMSwgI1BURV9TTUFMTF9BUF9NQVNLCUAga2VlcCBDLCBCIGJpdHMKIAliaWMJcjIsIHIyLCAjUFRFX1RZUEVfTUFTSwpAQCAtMTkxLDcgKzE5OCw3IEBACiAJdHN0CXIzLCAjTF9QVEVfVVNFUgkJCUAgdXNlcj8KIAlvcnJuZQlyMiwgcjIsICNQVEVfU01BTExfQVBfVVJPX1NSVwogCi0JdHN0CXIzLCAjTF9QVEVfV1JJVEUgfCBMX1BURV9ESVJUWQlAIHdyaXRlIGFuZCBkaXJ0eT8KKwl0c3QJcjMsICNMX1BURV9SRE9OTFkgfCBMX1BURV9ESVJUWQlAIHdyaXRlIGFuZCBkaXJ0eT8KIAlvcnJlcQlyMiwgcjIsICNQVEVfU01BTExfQVBfVU5PX1NSVwogCiAJdHN0CXIzLCAjTF9QVEVfUFJFU0VOVCB8IExfUFRFX1lPVU5HCUAgcHJlc2VudCBhbmQgeW91bmc/CkBAIC0yMDMsNyArMjEwLDcgQEAKIAliaWNuZQlyMiwgcjIsICNQVEVfQlVGRkVSQUJMRQogI2VuZGlmCiAJLmVuZGlmCi0Jc3RyCXIyLCBbcjBdCQkJQCBoYXJkd2FyZSB2ZXJzaW9uCisJc3RyCXIyLCBbcjBdCQlAIGhhcmR3YXJlIHZlcnNpb24KIAkuZW5kbQogCiAKQEAgLTIyMyw5ICsyMzAsOSBAQAogICogIDExMTEgIDExCXIvdwlyL3cKICAqLwogCS5tYWNybwl4c2NhbGVfc2V0X3B0ZV9leHRfcHJvbG9ndWUKLQlzdHIJcjEsIFtyMF0sICMtMjA0OAkJQCBsaW51eCB2ZXJzaW9uCisJc3RyCXIxLCBbcjBdCQkJQCBsaW51eCB2ZXJzaW9uCiAKLQllb3IJcjMsIHIxLCAjTF9QVEVfUFJFU0VOVCB8IExfUFRFX1lPVU5HIHwgTF9QVEVfV1JJVEUgfCBMX1BURV9ESVJUWQorCWVvcglyMywgcjEsICNMX1BURV9QUkVTRU5UIHwgTF9QVEVfWU9VTkcgfCBMX1BURV9ESVJUWQogCiAJYmljCXIyLCByMSwgI1BURV9TTUFMTF9BUF9NQVNLCUAga2VlcCBDLCBCIGJpdHMKIAlvcnIJcjIsIHIyLCAjUFRFX1RZUEVfRVhUCQlAIGV4dGVuZGVkIHBhZ2UKQEAgLTIzMyw3ICsyNDAsNyBAQAogCXRzdAlyMywgI0xfUFRFX1VTRVIJCQlAIHVzZXI/CiAJb3JybmUJcjIsIHIyLCAjUFRFX0VYVF9BUF9VUk9fU1JXCUAgeWVzIC0+IHVzZXIgci9vLCBzeXN0ZW0gci93CiAKLQl0c3QJcjMsICNMX1BURV9XUklURSB8IExfUFRFX0RJUlRZCUAgd3JpdGUgYW5kIGRpcnR5PworCXRzdAlyMywgI0xfUFRFX1JET05MWSB8IExfUFRFX0RJUlRZCUAgd3JpdGUgYW5kIGRpcnR5PwogCW9ycmVxCXIyLCByMiwgI1BURV9FWFRfQVBfVU5PX1NSVwlAIHllcyAtPiB1c2VyIG4vYSwgc3lzdGVtIHIvdwogCQkJCQkJQCBjb21iaW5lZCB3aXRoIHVzZXIgLT4gdXNlciByL3cKIAkuZW5kbQpAQCAtMjQyLDcgKzI0OSw3IEBACiAJdHN0CXIzLCAjTF9QVEVfUFJFU0VOVCB8IExfUFRFX1lPVU5HCUAgcHJlc2VudCBhbmQgeW91bmc/CiAJbW92bmUJcjIsICMwCQkJCUAgbm8gLT4gZmF1bHQKIAotCXN0cglyMiwgW3IwXQkJCUAgaGFyZHdhcmUgdmVyc2lvbgorCXN0cglyMiwgW3IwLCAjMjA0OF0hCQlAIGhhcmR3YXJlIHZlcnNpb24KIAltb3YJaXAsICMwCiAJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJCUAgY2xlYW4gTDEgRCBsaW5lCiAJbWNyCXAxNSwgMCwgaXAsIGM3LCBjMTAsIDQJCUAgZGF0YSB3cml0ZSBiYXJyaWVyCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLXY3LlMgYi9hcmNoL2FybS9tbS9wcm9jLXY3LlMKaW5kZXggOWI5ZmY1ZC4uYjQ5ZmFiMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy12Ny5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtdjcuUwpAQCAtMTI0LDE1ICsxMjQsMTMgQEAKICAqCVNldCBhIGxldmVsIDIgdHJhbnNsYXRpb24gdGFibGUgZW50cnkuCiAgKgogICoJLSBwdGVwICAtIHBvaW50ZXIgdG8gbGV2ZWwgMiB0cmFuc2xhdGlvbiB0YWJsZSBlbnRyeQotICoJCSAgKGhhcmR3YXJlIHZlcnNpb24gaXMgc3RvcmVkIGF0IC0xMDI0IGJ5dGVzKQorICoJCSAgKGhhcmR3YXJlIHZlcnNpb24gaXMgc3RvcmVkIGF0ICsyMDQ4IGJ5dGVzKQogICoJLSBwdGUgICAtIFBURSB2YWx1ZSB0byBzdG9yZQogICoJLSBleHQJLSB2YWx1ZSBmb3IgZXh0ZW5kZWQgUFRFIGJpdHMKICAqLwogRU5UUlkoY3B1X3Y3X3NldF9wdGVfZXh0KQogI2lmZGVmIENPTkZJR19NTVUKLSBBUk0oCXN0cglyMSwgW3IwXSwgIy0yMDQ4CSkJQCBsaW51eCB2ZXJzaW9uCi0gVEhVTUIoCXN0cglyMSwgW3IwXQkJKQlAIGxpbnV4IHZlcnNpb24KLSBUSFVNQigJc3ViCXIwLCByMCwgIzIwNDgJCSkKKwlzdHIJcjEsIFtyMF0JCQlAIGxpbnV4IHZlcnNpb24KIAogCWJpYwlyMywgcjEsICMweDAwMDAwM2YwCiAJYmljCXIzLCByMywgI1BURV9UWVBFX01BU0sKQEAgLTE0MiwyMyArMTQwLDI2IEBACiAJdHN0CXIxLCAjMSA8PCA0CiAJb3JybmUJcjMsIHIzLCAjUFRFX0VYVF9URVgoMSkKIAotCXRzdAlyMSwgI0xfUFRFX1dSSVRFCi0JdHN0bmUJcjEsICNMX1BURV9ESVJUWQotCW9ycmVxCXIzLCByMywgI1BURV9FWFRfQVBYCisJZW9yCXIxLCByMSwgI0xfUFRFX0RJUlRZCisJdHN0CXIxLCAjTF9QVEVfUkRPTkxZIHwgTF9QVEVfRElSVFkKKwlvcnJuZQlyMywgcjMsICNQVEVfRVhUX0FQWAogCiAJdHN0CXIxLCAjTF9QVEVfVVNFUgogCW9ycm5lCXIzLCByMywgI1BURV9FWFRfQVAxCisjaWZkZWYgQ09ORklHX0NQVV9VU0VfRE9NQUlOUworCUAgYWxsb3cga2VybmVsIHJlYWQvd3JpdGUgYWNjZXNzIHRvIHJlYWQtb25seSB1c2VyIHBhZ2VzCiAJdHN0bmUJcjMsICNQVEVfRVhUX0FQWAogCWJpY25lCXIzLCByMywgI1BURV9FWFRfQVBYIHwgUFRFX0VYVF9BUDAKKyNlbmRpZgogCi0JdHN0CXIxLCAjTF9QVEVfRVhFQwotCW9ycmVxCXIzLCByMywgI1BURV9FWFRfWE4KKwl0c3QJcjEsICNMX1BURV9YTgorCW9ycm5lCXIzLCByMywgI1BURV9FWFRfWE4KIAogCXRzdAlyMSwgI0xfUFRFX1lPVU5HCiAJdHN0bmUJcjEsICNMX1BURV9QUkVTRU5UCiAJbW92ZXEJcjMsICMwCiAKLQlzdHIJcjMsIFtyMF0KKwlzdHIJcjMsIFtyMCwgIzIwNDhdIQogCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGZsdXNoX3B0ZQogI2VuZGlmCiAJbW92CXBjLCBscgpAQCAtMjczLDggKzI3NCw2IEBACiAJQUxUX1NNUChvcnIJcjQsIHI0LCAjVFRCX0ZMQUdTX1NNUCkKIAlBTFRfVVAob3JyCXI0LCByNCwgI1RUQl9GTEFHU19VUCkKIAltY3IJcDE1LCAwLCByNCwgYzIsIGMwLCAxCQlAIGxvYWQgVFRCMQotCW1vdglyMTAsICMweDFmCQkJQCBkb21haW5zIDAsIDEgPSBtYW5hZ2VyCi0JbWNyCXAxNSwgMCwgcjEwLCBjMywgYzAsIDAJCUAgbG9hZCBkb21haW4gYWNjZXNzIHJlZ2lzdGVyCiAJLyoKIAkgKiBNZW1vcnkgcmVnaW9uIGF0dHJpYnV0ZXMgd2l0aCBTQ1RMUi5UUkU9MQogCSAqCkBAIC0zMTMsNiArMzEyLDEwIEBACiAjaWZkZWYgQ09ORklHX0NQVV9FTkRJQU5fQkU4CiAJb3JyCXI2LCByNiwgIzEgPDwgMjUJCUAgYmlnLWVuZGlhbiBwYWdlIHRhYmxlcwogI2VuZGlmCisjaWZkZWYgQ09ORklHX1NXUF9FTVVMQVRFCisJb3JyICAgICByNSwgcjUsICMoMSA8PCAxMCkgICAgICAgICAgICAgIEAgc2V0IFNXIGJpdCBpbiAiY2xlYXIiCisJYmljICAgICByNiwgcjYsICMoMSA8PCAxMCkgICAgICAgICAgICAgIEAgY2xlYXIgaXQgaW4gIm1tdXNldCIKKyNlbmRpZgogICAgCW1yYwlwMTUsIDAsIHIwLCBjMSwgYzAsIDAJCUAgcmVhZCBjb250cm9sIHJlZ2lzdGVyCiAJYmljCXIwLCByMCwgcjUJCQlAIGNsZWFyIGJpdHMgdGhlbQogCW9ycglyMCwgcjAsIHI2CQkJQCBzZXQgdGhlbQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy14c2NhbGUuUyBiL2FyY2gvYXJtL21tL3Byb2MteHNjYWxlLlMKaW5kZXggNTIzNDA4Yy4uNWEzN2M1ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy14c2NhbGUuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLXhzY2FsZS5TCkBAIC01MDAsOCArNTAwLDggQEAKIAlACiAJQCBFcnJhdHVtIDQwOiBtdXN0IHNldCBtZW1vcnkgdG8gd3JpdGUtdGhyb3VnaCBmb3IgdXNlciByZWFkLW9ubHkgcGFnZXMKIAlACi0JYW5kCWlwLCByMSwgIyhMX1BURV9NVF9NQVNLIHwgTF9QVEVfVVNFUiB8IExfUFRFX1dSSVRFKSAmIH4oNCA8PCAyKQotCXRlcQlpcCwgI0xfUFRFX01UX1dSSVRFQkFDSyB8IExfUFRFX1VTRVIKKwlhbmQJaXAsIHIxLCAjKExfUFRFX01UX01BU0sgfCBMX1BURV9VU0VSIHwgTF9QVEVfUkRPTkxZKSAmIH4oNCA8PCAyKQorCXRlcQlpcCwgI0xfUFRFX01UX1dSSVRFQkFDSyB8IExfUFRFX1VTRVIgfCBMX1BURV9SRE9OTFkKIAogCW1vdmVxCXIxLCAjTF9QVEVfTVRfV1JJVEVUSFJPVUdICiAJYW5kCXIxLCByMSwgI0xfUFRFX01UX01BU0sKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtaW9wL3RpbWUuYyBiL2FyY2gvYXJtL3BsYXQtaW9wL3RpbWUuYwppbmRleCA1NThjZGZhLi4wN2YyM2JiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LWlvcC90aW1lLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1pb3AvdGltZS5jCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgpAQCAtMjQsNiArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Nsb2NrY2hpcHMuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9zY2hlZF9jbG9jay5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgpAQCAtNTAsMTUgKzUyLDIxIEBACiAJLmZsYWdzCQk9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTLAogfTsKIAorc3RhdGljIERFRklORV9DTE9DS19EQVRBKGNkKTsKKwogLyoKICAqIElPUCBzY2hlZF9jbG9jaygpIGltcGxlbWVudGF0aW9uIHZpYSBpdHMgY2xvY2tzb3VyY2UuCiAgKi8KLXVuc2lnbmVkIGxvbmcgbG9uZyBzY2hlZF9jbG9jayh2b2lkKQordW5zaWduZWQgbG9uZyBsb25nIG5vdHJhY2Ugc2NoZWRfY2xvY2sodm9pZCkKIHsKLQljeWNsZV90IGN5YyA9IGlvcF9jbG9ja3NvdXJjZV9yZWFkKE5VTEwpOwotCXN0cnVjdCBjbG9ja3NvdXJjZSAqY3MgPSAmaW9wX2Nsb2Nrc291cmNlOworCXUzMiBjeWMgPSAweGZmZmZmZmZmdSAtIHJlYWRfdGNyMSgpOworCXJldHVybiBjeWNfdG9fc2NoZWRfY2xvY2soJmNkLCBjeWMsICh1MzIpfjApOworfQogCi0JcmV0dXJuIGNsb2Nrc291cmNlX2N5YzJucyhjeWMsIGNzLT5tdWx0LCBjcy0+c2hpZnQpOworc3RhdGljIHZvaWQgbm90cmFjZSBpb3BfdXBkYXRlX3NjaGVkX2Nsb2NrKHZvaWQpCit7CisJdTMyIGN5YyA9IDB4ZmZmZmZmZmZ1IC0gcmVhZF90Y3IxKCk7CisJdXBkYXRlX3NjaGVkX2Nsb2NrKCZjZCwgY3ljLCAodTMyKX4wKTsKIH0KIAogLyoKQEAgLTg4LDYgKzk2LDcgQEAKIAljYXNlIENMT0NLX0VWVF9NT0RFX1BFUklPRElDOgogCQl3cml0ZV90bXIwKHRtciAmIH5JT1BfVE1SX0VOKTsKIAkJd3JpdGVfdGNyMCh0aWNrc19wZXJfamlmZnkgLSAxKTsKKwkJd3JpdGVfdHJyMCh0aWNrc19wZXJfamlmZnkgLSAxKTsKIAkJdG1yIHw9IChJT1BfVE1SX1JFTE9BRCB8IElPUF9UTVJfRU4pOwogCQlicmVhazsKIAljYXNlIENMT0NLX0VWVF9NT0RFX09ORVNIT1Q6CkBAIC0xNDMsNiArMTUyLDggQEAKIHsKIAl1MzIgdGltZXJfY3RsOwogCisJaW5pdF9zY2hlZF9jbG9jaygmY2QsIGlvcF91cGRhdGVfc2NoZWRfY2xvY2ssIDMyLCB0aWNrX3JhdGUpOworCiAJdGlja3NfcGVyX2ppZmZ5ID0gRElWX1JPVU5EX0NMT1NFU1QodGlja19yYXRlLCBIWik7CiAJaW9wX3RpY2tfcmF0ZSA9IHRpY2tfcmF0ZTsKIApAQCAtMTUzLDYgKzE2NCw3IEBACiAJICogU2V0IHVwIGludGVycnVwdGluZyBjbG9ja2V2ZW50IHRpbWVyIDAuCiAJICovCiAJd3JpdGVfdG1yMCh0aW1lcl9jdGwgJiB+SU9QX1RNUl9FTik7CisJd3JpdGVfdGlzcigxKTsKIAlzZXR1cF9pcnEoSVJRX0lPUF9USU1FUjAsICZpb3BfdGltZXJfaXJxKTsKIAljbG9ja2V2ZW50c19jYWxjX211bHRfc2hpZnQoJmlvcF9jbG9ja2V2ZW50LAogCQkJCSAgICB0aWNrX3JhdGUsIElPUF9NSU5fUkFOR0UpOwpAQCAtMTYyLDkgKzE3NCw2IEBACiAJCWNsb2NrZXZlbnRfZGVsdGEybnMoMHhmLCAmaW9wX2Nsb2NrZXZlbnQpOwogCWlvcF9jbG9ja2V2ZW50LmNwdW1hc2sgPSBjcHVtYXNrX29mKDApOwogCWNsb2NrZXZlbnRzX3JlZ2lzdGVyX2RldmljZSgmaW9wX2Nsb2NrZXZlbnQpOwotCXdyaXRlX3RycjAodGlja3NfcGVyX2ppZmZ5IC0gMSk7Ci0Jd3JpdGVfdGNyMCh0aWNrc19wZXJfamlmZnkgLSAxKTsKLQl3cml0ZV90bXIwKHRpbWVyX2N0bCk7CiAKIAkvKgogCSAqIFNldCB1cCBmcmVlLXJ1bm5pbmcgY2xvY2tzb3VyY2UgdGltZXIgMS4KQEAgLTE3Miw3ICsxODEsNSBAQAogCXdyaXRlX3RycjEoMHhmZmZmZmZmZik7CiAJd3JpdGVfdGNyMSgweGZmZmZmZmZmKTsKIAl3cml0ZV90bXIxKHRpbWVyX2N0bCk7Ci0JY2xvY2tzb3VyY2VfY2FsY19tdWx0X3NoaWZ0KCZpb3BfY2xvY2tzb3VyY2UsIHRpY2tfcmF0ZSwKLQkJCQkgICAgSU9QX01JTl9SQU5HRSk7Ci0JY2xvY2tzb3VyY2VfcmVnaXN0ZXIoJmlvcF9jbG9ja3NvdXJjZSk7CisJY2xvY2tzb3VyY2VfcmVnaXN0ZXJfaHooJmlvcF9jbG9ja3NvdXJjZSwgdGlja19yYXRlKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL0tjb25maWcgYi9hcmNoL2FybS9wbGF0LW14Yy9LY29uZmlnCmluZGV4IDY0ZTNhNjQuLjM4OWYyMTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL0tjb25maWcKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvS2NvbmZpZwpAQCAtMjEsMTAgKzIxLDYgQEAKIAogY29uZmlnIEFSQ0hfTVgyNQogCWJvb2wgIk1YMjUtYmFzZWQiCi0Jc2VsZWN0IENQVV9BUk05MjZUCi0Jc2VsZWN0IEFSQ0hfTVhDX0lPTVVYX1YzCi0Jc2VsZWN0IEhBVkVfRkJfSU1YCi0Jc2VsZWN0IEFSQ0hfTVhDX0FVRE1VWF9WMgogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBzeXN0ZW1zIGJhc2VkIG9uIHRoZSBGcmVlc2NhbGUgaS5NWDI1IGZhbWlseQogCkBAIC01MSw3ICs0Nyw2IEBACiAKIHNvdXJjZSAiYXJjaC9hcm0vbWFjaC1pbXgvS2NvbmZpZyIKIHNvdXJjZSAiYXJjaC9hcm0vbWFjaC1teDMvS2NvbmZpZyIKLXNvdXJjZSAiYXJjaC9hcm0vbWFjaC1teDI1L0tjb25maWciCiBzb3VyY2UgImFyY2gvYXJtL21hY2gtbXhjOTEyMzEvS2NvbmZpZyIKIHNvdXJjZSAiYXJjaC9hcm0vbWFjaC1teDUvS2NvbmZpZyIKIApAQCAtNjgsMTIgKzYzLDEwIEBACiAJICBTYXkgTiBoZXJlLCB1bmxlc3MgeW91IGhhdmUgYSBzcGVjaWFsaXplZCByZXF1aXJlbWVudC4KIAogY29uZmlnIE1YQ19UWklDCi0JYm9vbCAiRW5hYmxlIFRydXN0Wm9uZSBJbnRlcnJ1cHQgQ29udHJvbGxlciIKLQlkZXBlbmRzIG9uIEFSQ0hfTVg1MQotCWhlbHAKLQkgIFRoaXMgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkIGZvciBhbGwgcHJvY2Vzc29ycwotCSAgY29udGFpbmluZyB0aGlzIGludGVycnVwdCBjb250cm9sbGVyLgotCSAgU2F5IE4gaGVyZSBvbmx5IGlmIHlvdSBhcmUgcmVhbGx5IHN1cmUuCisJYm9vbAorCitjb25maWcgTVhDX0FWSUMKKwlib29sCiAKIGNvbmZpZyBNWENfUFdNCiAJdHJpc3RhdGUgIkVuYWJsZSBQV00gZHJpdmVyIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvTWFrZWZpbGUgYi9hcmNoL2FybS9wbGF0LW14Yy9NYWtlZmlsZQppbmRleCAzNzI2NzA5Li41ZmQyMGU5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9NYWtlZmlsZQpAQCAtMywxMCArMywxMSBAQAogIwogCiAjIENvbW1vbiBzdXBwb3J0Ci1vYmoteSA6PSBpcnEubyBjbG9jay5vIGdwaW8ubyB0aW1lLm8gZGV2aWNlcy5vIGNwdS5vIHN5c3RlbS5vCitvYmoteSA6PSBjbG9jay5vIGdwaW8ubyB0aW1lLm8gZGV2aWNlcy5vIGNwdS5vIHN5c3RlbS5vIGlycS1jb21tb24ubwogCi0jIE1YNTEgdXNlcyB0aGUgVFpJQyBpbnRlcnJ1cHQgY29udHJvbGxlciwgb2xkZXIgcGxhdGZvcm1zIHVzZSBBVklDIChpcnEubykKKyMgTVg1MSB1c2VzIHRoZSBUWklDIGludGVycnVwdCBjb250cm9sbGVyLCBvbGRlciBwbGF0Zm9ybXMgdXNlIEFWSUMKIG9iai0kKENPTkZJR19NWENfVFpJQykgKz0gdHppYy5vCitvYmotJChDT05GSUdfTVhDX0FWSUMpICs9IGF2aWMubwogCiBvYmotJChDT05GSUdfSU1YX0hBVkVfSU9NVVhfVjEpICs9IGlvbXV4LXYxLm8KIG9iai0kKENPTkZJR19BUkNIX01YQ19JT01VWF9WMykgKz0gaW9tdXgtdjMubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvYXVkbXV4LXYyLmMgYi9hcmNoL2FybS9wbGF0LW14Yy9hdWRtdXgtdjIuYwppbmRleCAwYmUxYWM3Li4xNzVlMzY0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9hdWRtdXgtdjIuYworKysgYi9hcmNoL2FybS9wbGF0LW14Yy9hdWRtdXgtdjIuYwpAQCAtMjA5LDcgKzIwOSw3IEBACiAJCWF1ZG11eF9iYXNlID0gTVgzNV9JT19BRERSRVNTKE1YMzVfQVVETVVYX0JBU0VfQUREUik7CiAJfQogI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9NWDI1KQorI2lmIGRlZmluZWQoQ09ORklHX1NPQ19JTVgyNSkKIAlpZiAoY3B1X2lzX214MjUoKSkgewogCQlhdWRtdXhfY2xrID0gY2xrX2dldChOVUxMLCAiYXVkbXV4Iik7CiAJCWlmIChJU19FUlIoYXVkbXV4X2NsaykpIHsKQEAgLTIyMCw3ICsyMjAsNyBAQAogCQl9CiAJCWF1ZG11eF9iYXNlID0gTVgyNV9JT19BRERSRVNTKE1YMjVfQVVETVVYX0JBU0VfQUREUik7CiAJfQotI2VuZGlmCisjZW5kaWYgLyogaWYgZGVmaW5lZChDT05GSUdfU09DX0lNWDI1KSAqLwogCWF1ZG11eF9kZWJ1Z2ZzX2luaXQoKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvYXZpYy5jIGIvYXJjaC9hcm0vcGxhdC1teGMvYXZpYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhNGU4YTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9hdmljLmMKQEAgLTAsMCArMSwxNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA3IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwOCBKdWVyZ2VuIEJlaXNlcnQsIGtlcm5lbEBwZW5ndXRyb25peC5kZQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAorICogTUEgIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKworI2luY2x1ZGUgImlycS1jb21tb24uaCIKKworI2RlZmluZSBBVklDX0lOVENOVEwJCTB4MDAJLyogaW50IGNvbnRyb2wgcmVnICovCisjZGVmaW5lIEFWSUNfTklNQVNLCQkweDA0CS8qIGludCBtYXNrIHJlZyAqLworI2RlZmluZSBBVklDX0lOVEVOTlVNCQkweDA4CS8qIGludCBlbmFibGUgbnVtYmVyIHJlZyAqLworI2RlZmluZSBBVklDX0lOVERJU05VTQkJMHgwQwkvKiBpbnQgZGlzYWJsZSBudW1iZXIgcmVnICovCisjZGVmaW5lIEFWSUNfSU5URU5BQkxFSAkJMHgxMAkvKiBpbnQgZW5hYmxlIHJlZyBoaWdoICovCisjZGVmaW5lIEFWSUNfSU5URU5BQkxFTAkJMHgxNAkvKiBpbnQgZW5hYmxlIHJlZyBsb3cgKi8KKyNkZWZpbmUgQVZJQ19JTlRUWVBFSAkJMHgxOAkvKiBpbnQgdHlwZSByZWcgaGlnaCAqLworI2RlZmluZSBBVklDX0lOVFRZUEVMCQkweDFDCS8qIGludCB0eXBlIHJlZyBsb3cgKi8KKyNkZWZpbmUgQVZJQ19OSVBSSU9SSVRZKHgpCSgweDIwICsgNCAqICg3IC0gKHgpKSkgLyogaW50IHByaW9yaXR5ICovCisjZGVmaW5lIEFWSUNfTklWRUNTUgkJMHg0MAkvKiBub3JtIGludCB2ZWN0b3Ivc3RhdHVzICovCisjZGVmaW5lIEFWSUNfRklWRUNTUgkJMHg0NAkvKiBmYXN0IGludCB2ZWN0b3Ivc3RhdHVzICovCisjZGVmaW5lIEFWSUNfSU5UU1JDSAkJMHg0OAkvKiBpbnQgc291cmNlIHJlZyBoaWdoICovCisjZGVmaW5lIEFWSUNfSU5UU1JDTAkJMHg0QwkvKiBpbnQgc291cmNlIHJlZyBsb3cgKi8KKyNkZWZpbmUgQVZJQ19JTlRGUkNICQkweDUwCS8qIGludCBmb3JjZSByZWcgaGlnaCAqLworI2RlZmluZSBBVklDX0lOVEZSQ0wJCTB4NTQJLyogaW50IGZvcmNlIHJlZyBsb3cgKi8KKyNkZWZpbmUgQVZJQ19OSVBOREgJCTB4NTgJLyogbm9ybSBpbnQgcGVuZGluZyBoaWdoICovCisjZGVmaW5lIEFWSUNfTklQTkRMCQkweDVDCS8qIG5vcm0gaW50IHBlbmRpbmcgbG93ICovCisjZGVmaW5lIEFWSUNfRklQTkRICQkweDYwCS8qIGZhc3QgaW50IHBlbmRpbmcgaGlnaCAqLworI2RlZmluZSBBVklDX0ZJUE5ETAkJMHg2NAkvKiBmYXN0IGludCBwZW5kaW5nIGxvdyAqLworCit2b2lkIF9faW9tZW0gKmF2aWNfYmFzZTsKKworI2lmZGVmIENPTkZJR19NWENfSVJRX1BSSU9SCitzdGF0aWMgaW50IGF2aWNfaXJxX3NldF9wcmlvcml0eSh1bnNpZ25lZCBjaGFyIGlycSwgdW5zaWduZWQgY2hhciBwcmlvKQoreworCXVuc2lnbmVkIGludCB0ZW1wOworCXVuc2lnbmVkIGludCBtYXNrID0gMHgwRiA8PCBpcnEgJSA4ICogNDsKKworCWlmIChpcnEgPj0gTVhDX0lOVEVSTkFMX0lSUVMpCisJCXJldHVybiAtRUlOVkFMOzsKKworCXRlbXAgPSBfX3Jhd19yZWFkbChhdmljX2Jhc2UgKyBBVklDX05JUFJJT1JJVFkoaXJxIC8gOCkpOworCXRlbXAgJj0gfm1hc2s7CisJdGVtcCB8PSBwcmlvICYgbWFzazsKKworCV9fcmF3X3dyaXRlbCh0ZW1wLCBhdmljX2Jhc2UgKyBBVklDX05JUFJJT1JJVFkoaXJxIC8gOCkpOworCisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19GSVEKK3N0YXRpYyBpbnQgYXZpY19zZXRfaXJxX2ZpcSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgdHlwZSkKK3sKKwl1bnNpZ25lZCBpbnQgaXJxdDsKKworCWlmIChpcnEgPj0gTVhDX0lOVEVSTkFMX0lSUVMpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGlycSA8IE1YQ19JTlRFUk5BTF9JUlFTIC8gMikgeworCQlpcnF0ID0gX19yYXdfcmVhZGwoYXZpY19iYXNlICsgQVZJQ19JTlRUWVBFTCkgJiB+KDEgPDwgaXJxKTsKKwkJX19yYXdfd3JpdGVsKGlycXQgfCAoISF0eXBlIDw8IGlycSksIGF2aWNfYmFzZSArIEFWSUNfSU5UVFlQRUwpOworCX0gZWxzZSB7CisJCWlycSAtPSBNWENfSU5URVJOQUxfSVJRUyAvIDI7CisJCWlycXQgPSBfX3Jhd19yZWFkbChhdmljX2Jhc2UgKyBBVklDX0lOVFRZUEVIKSAmIH4oMSA8PCBpcnEpOworCQlfX3Jhd193cml0ZWwoaXJxdCB8ICghIXR5cGUgPDwgaXJxKSwgYXZpY19iYXNlICsgQVZJQ19JTlRUWVBFSCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogQ09ORklHX0ZJUSAqLworCisvKiBEaXNhYmxlIGludGVycnVwdCBudW1iZXIgImlycSIgaW4gdGhlIEFWSUMgKi8KK3N0YXRpYyB2b2lkIG14Y19tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCV9fcmF3X3dyaXRlbChpcnEsIGF2aWNfYmFzZSArIEFWSUNfSU5URElTTlVNKTsKK30KKworLyogRW5hYmxlIGludGVycnVwdCBudW1iZXIgImlycSIgaW4gdGhlIEFWSUMgKi8KK3N0YXRpYyB2b2lkIG14Y191bm1hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJX19yYXdfd3JpdGVsKGlycSwgYXZpY19iYXNlICsgQVZJQ19JTlRFTk5VTSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbXhjX2lycV9jaGlwIG14Y19hdmljX2NoaXAgPSB7CisJLmJhc2UgPSB7CisJCS5hY2sgPSBteGNfbWFza19pcnEsCisJCS5tYXNrID0gbXhjX21hc2tfaXJxLAorCQkudW5tYXNrID0gbXhjX3VubWFza19pcnEsCisJfSwKKyNpZmRlZiBDT05GSUdfTVhDX0lSUV9QUklPUgorCS5zZXRfcHJpb3JpdHkgPSBhdmljX2lycV9zZXRfcHJpb3JpdHksCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfRklRCisJLnNldF9pcnFfZmlxID0gYXZpY19zZXRfaXJxX2ZpcSwKKyNlbmRpZgorfTsKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIEFWSUMgaGFyZHdhcmUgYW5kIGRpc2FibGVzIGFsbCB0aGUKKyAqIGludGVycnVwdHMuIEl0IHJlZ2lzdGVycyB0aGUgaW50ZXJydXB0IGVuYWJsZSBhbmQgZGlzYWJsZSBmdW5jdGlvbnMKKyAqIHRvIHRoZSBrZXJuZWwgZm9yIGVhY2ggaW50ZXJydXB0IHNvdXJjZS4KKyAqLwordm9pZCBfX2luaXQgbXhjX2luaXRfaXJxKHZvaWQgX19pb21lbSAqaXJxYmFzZSkKK3sKKwlpbnQgaTsKKworCWF2aWNfYmFzZSA9IGlycWJhc2U7CisKKwkvKiBwdXQgdGhlIEFWSUMgaW50byB0aGUgcmVzZXQgdmFsdWUgd2l0aAorCSAqIGFsbCBpbnRlcnJ1cHRzIGRpc2FibGVkCisJICovCisJX19yYXdfd3JpdGVsKDAsIGF2aWNfYmFzZSArIEFWSUNfSU5UQ05UTCk7CisJX19yYXdfd3JpdGVsKDB4MWYsIGF2aWNfYmFzZSArIEFWSUNfTklNQVNLKTsKKworCS8qIGRpc2FibGUgYWxsIGludGVycnVwdHMgKi8KKwlfX3Jhd193cml0ZWwoMCwgYXZpY19iYXNlICsgQVZJQ19JTlRFTkFCTEVIKTsKKwlfX3Jhd193cml0ZWwoMCwgYXZpY19iYXNlICsgQVZJQ19JTlRFTkFCTEVMKTsKKworCS8qIGFsbCBJUlEgbm8gRklRICovCisJX19yYXdfd3JpdGVsKDAsIGF2aWNfYmFzZSArIEFWSUNfSU5UVFlQRUgpOworCV9fcmF3X3dyaXRlbCgwLCBhdmljX2Jhc2UgKyBBVklDX0lOVFRZUEVMKTsKKwlmb3IgKGkgPSAwOyBpIDwgTVhDX0lOVEVSTkFMX0lSUVM7IGkrKykgeworCQlzZXRfaXJxX2NoaXAoaSwgJm14Y19hdmljX2NoaXAuYmFzZSk7CisJCXNldF9pcnFfaGFuZGxlcihpLCBoYW5kbGVfbGV2ZWxfaXJxKTsKKwkJc2V0X2lycV9mbGFncyhpLCBJUlFGX1ZBTElEKTsKKwl9CisKKwkvKiBTZXQgZGVmYXVsdCBwcmlvcml0eSB2YWx1ZSAoMCkgZm9yIGFsbCBJUlEncyAqLworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJCV9fcmF3X3dyaXRlbCgwLCBhdmljX2Jhc2UgKyBBVklDX05JUFJJT1JJVFkoaSkpOworCisjaWZkZWYgQ09ORklHX0ZJUQorCS8qIEluaXRpYWxpemUgRklRICovCisJaW5pdF9GSVEoKTsKKyNlbmRpZgorCisJcHJpbnRrKEtFUk5fSU5GTyAiTVhDIElSUSBpbml0aWFsaXplZFxuIik7Cit9CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2NwdWZyZXEuYyBiL2FyY2gvYXJtL3BsYXQtbXhjL2NwdWZyZXEuYwppbmRleCAwMzk1MzhlLi5jZTgxNDgxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9jcHVmcmVxLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvY3B1ZnJlcS5jCkBAIC0xNDQsNyArMTQ0LDYgQEAKIAlpbXhfZnJlcV90YWJsZVtpXS5mcmVxdWVuY3kgPSBDUFVGUkVRX1RBQkxFX0VORDsKIAogCXBvbGljeS0+Y3VyID0gY2xrX2dldF9yYXRlKGNwdV9jbGspIC8gMTAwMDsKLQlwb2xpY3ktPmdvdmVybm9yID0gQ1BVRlJFUV9ERUZBVUxUX0dPVkVSTk9SOwogCXBvbGljeS0+bWluID0gcG9saWN5LT5jcHVpbmZvLm1pbl9mcmVxID0gY3B1X2ZyZXFfa2h6X21pbjsKIAlwb2xpY3ktPm1heCA9IHBvbGljeS0+Y3B1aW5mby5tYXhfZnJlcSA9IGNwdV9mcmVxX2toel9tYXg7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2RldmljZXMuYyBiL2FyY2gvYXJtL3BsYXQtbXhjL2RldmljZXMuYwppbmRleCA3MzU3NzZkLi5lOWJjZWZlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvZGV2aWNlcy5jCkBAIC0xNyw2ICsxNyw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CkBAIC0zNiw5ICszNywxMCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKl9faW5pdCBpbXhfYWRkX3BsYXRmb3JtX2RldmljZShjb25zdCBjaGFyICpuYW1lLCBpbnQgaWQsCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpfX2luaXQgaW14X2FkZF9wbGF0Zm9ybV9kZXZpY2VfZG1hbWFzaygKKwkJY29uc3QgY2hhciAqbmFtZSwgaW50IGlkLAogCQljb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgdW5zaWduZWQgaW50IG51bV9yZXNvdXJjZXMsCi0JCWNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBzaXplX2RhdGEpCisJCWNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBzaXplX2RhdGEsIHU2NCBkbWFtYXNrKQogewogCWludCByZXQgPSAtRU5PTUVNOwogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CkBAIC00Nyw2ICs0OSwyMyBAQAogCWlmICghcGRldikKIAkJZ290byBlcnI7CiAKKwlpZiAoZG1hbWFzaykgeworCQkvKgorCQkgKiBUaGlzIG1lbW9yeSBpc24ndCBmcmVlZCB3aGVuIHRoZSBkZXZpY2UgaXMgcHV0LAorCQkgKiBJIGRvbid0IGhhdmUgYSBuaWNlIGlkZWEgZm9yIHRoYXQgdGhvdWdoLiAgQ29uY2VwdHVhbGx5CisJCSAqIGRtYV9tYXNrIGluIHN0cnVjdCBkZXZpY2Ugc2hvdWxkIG5vdCBiZSBhIHBvaW50ZXIuCisJCSAqIFNlZSBodHRwOi8vdGhyZWFkLmdtYW5lLm9yZy9nbWFuZS5saW51eC5rZXJuZWwucGNpLzkwODEKKwkJICovCisJCXBkZXYtPmRldi5kbWFfbWFzayA9CisJCQlrbWFsbG9jKHNpemVvZigqcGRldi0+ZGV2LmRtYV9tYXNrKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghcGRldi0+ZGV2LmRtYV9tYXNrKQorCQkJLyogcmV0IGlzIHN0aWxsIC1FTk9NRU07ICovCisJCQlnb3RvIGVycjsKKworCQkqcGRldi0+ZGV2LmRtYV9tYXNrID0gZG1hbWFzazsKKwkJcGRldi0+ZGV2LmNvaGVyZW50X2RtYV9tYXNrID0gZG1hbWFzazsKKwl9CisKIAlpZiAocmVzKSB7CiAJCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGRfcmVzb3VyY2VzKHBkZXYsIHJlcywgbnVtX3Jlc291cmNlcyk7CiAJCWlmIChyZXQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9kZXZpY2VzL0tjb25maWcgYi9hcmNoL2FybS9wbGF0LW14Yy9kZXZpY2VzL0tjb25maWcKaW5kZXggOWFhNmYzZS4uMjUzNzE2NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvZGV2aWNlcy9LY29uZmlnCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2RldmljZXMvS2NvbmZpZwpAQCAtMSwyOSArMSw3MyBAQAotY29uZmlnIElNWF9IQVZFX1BMQVRGT1JNX0VTREhDCi0JYm9vbAotCiBjb25maWcgSU1YX0hBVkVfUExBVEZPUk1fRkVDCiAJYm9vbAotCWRlZmF1bHQgeSBpZiBBUkNIX01YMjUgfHwgU09DX0lNWDI3IHx8IEFSQ0hfTVgzNSB8fCBBUkNIX01YNTEKKwlkZWZhdWx0IHkgaWYgQVJDSF9NWDI1IHx8IFNPQ19JTVgyNyB8fCBTT0NfSU1YMzUgfHwgU09DX0lNWDUxCiAKIGNvbmZpZyBJTVhfSEFWRV9QTEFURk9STV9GTEVYQ0FOCiAJc2VsZWN0IEhBVkVfQ0FOX0ZMRVhDQU4gaWYgQ0FOCiAJYm9vbAogCitjb25maWcgSU1YX0hBVkVfUExBVEZPUk1fRlNMX1VTQjJfVURDCisJYm9vbAorCiBjb25maWcgSU1YX0hBVkVfUExBVEZPUk1fR1BJT19LRVlTCiAJYm9vbAotCWRlZmF1bHQgeSBpZiBBUkNIX01YNTEKKwlkZWZhdWx0IHkgaWYgU09DX0lNWDUxCisKK2NvbmZpZyBJTVhfSEFWRV9QTEFURk9STV9JTVgyMV9IQ0QKKwlib29sCiAJCitjb25maWcgSU1YX0hBVkVfUExBVEZPUk1fSU1YMl9XRFQKKwlib29sCisKK2NvbmZpZyBJTVhfSEFWRV9QTEFURk9STV9JTVhESV9SVEMKKwlib29sCisKK2NvbmZpZyBJTVhfSEFWRV9QTEFURk9STV9JTVhfRkIKKwlib29sCisJc2VsZWN0IEhBVkVfRkJfSU1YCisKIGNvbmZpZyBJTVhfSEFWRV9QTEFURk9STV9JTVhfSTJDCiAJYm9vbAogCitjb25maWcgSU1YX0hBVkVfUExBVEZPUk1fSU1YX0tFWVBBRAorCWJvb2wKKwogY29uZmlnIElNWF9IQVZFX1BMQVRGT1JNX0lNWF9TU0kKIAlib29sCiAKIGNvbmZpZyBJTVhfSEFWRV9QTEFURk9STV9JTVhfVUFSVAogCWJvb2wKIAorY29uZmlnIElNWF9IQVZFX1BMQVRGT1JNX0lNWF9VREMKKwlib29sCisKK2NvbmZpZyBJTVhfSEFWRV9QTEFURk9STV9NWDFfQ0FNRVJBCisJYm9vbAorCitjb25maWcgSU1YX0hBVkVfUExBVEZPUk1fTVgyX0NBTUVSQQorCWJvb2wKKworY29uZmlnIElNWF9IQVZFX1BMQVRGT1JNX01YQ19FSENJCisJYm9vbAorCitjb25maWcgSU1YX0hBVkVfUExBVEZPUk1fTVhDX01NQworCWJvb2wKKwogY29uZmlnIElNWF9IQVZFX1BMQVRGT1JNX01YQ19OQU5ECiAJYm9vbAogCitjb25maWcgSU1YX0hBVkVfUExBVEZPUk1fTVhDX1BXTQorCWJvb2wKKworY29uZmlnIElNWF9IQVZFX1BMQVRGT1JNX01YQ19STkdBCisJYm9vbAorCXNlbGVjdCBBUkNIX0hBU19STkdBCisKK2NvbmZpZyBJTVhfSEFWRV9QTEFURk9STV9NWENfVzEKKwlib29sCisKK2NvbmZpZyBJTVhfSEFWRV9QTEFURk9STV9TREhDSV9FU0RIQ19JTVgKKwlib29sCisKIGNvbmZpZyBJTVhfSEFWRV9QTEFURk9STV9TUElfSU1YCiAJYm9vbApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvZGV2aWNlcy9NYWtlZmlsZSBiL2FyY2gvYXJtL3BsYXQtbXhjL2RldmljZXMvTWFrZWZpbGUKaW5kZXggNDVhZWZlYi4uNzVjZDJlYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvZGV2aWNlcy9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9kZXZpY2VzL01ha2VmaWxlCkBAIC0xLDEwICsxLDI0IEBACi1vYmotJChDT05GSUdfSU1YX0hBVkVfUExBVEZPUk1fRVNESEMpICs9IHBsYXRmb3JtLWVzZGhjLm8KIG9iai0kKENPTkZJR19JTVhfSEFWRV9QTEFURk9STV9GRUMpICs9IHBsYXRmb3JtLWZlYy5vCiBvYmotJChDT05GSUdfSU1YX0hBVkVfUExBVEZPUk1fRkxFWENBTikgKz0gcGxhdGZvcm0tZmxleGNhbi5vCitvYmotJChDT05GSUdfSU1YX0hBVkVfUExBVEZPUk1fRlNMX1VTQjJfVURDKSArPSBwbGF0Zm9ybS1mc2wtdXNiMi11ZGMubwogb2JqLSQoQ09ORklHX0lNWF9IQVZFX1BMQVRGT1JNX0dQSU9fS0VZUykgKz0gcGxhdGZvcm0tZ3Bpb19rZXlzLm8KK29iai0kKENPTkZJR19JTVhfSEFWRV9QTEFURk9STV9JTVgyMV9IQ0QpICs9IHBsYXRmb3JtLWlteDIxLWhjZC5vCitvYmotJChDT05GSUdfSU1YX0hBVkVfUExBVEZPUk1fSU1YMl9XRFQpICs9IHBsYXRmb3JtLWlteDItd2R0Lm8KK29iai0kKENPTkZJR19JTVhfSEFWRV9QTEFURk9STV9JTVhESV9SVEMpICs9IHBsYXRmb3JtLWlteGRpX3J0Yy5vCiBvYmoteSArPSBwbGF0Zm9ybS1pbXgtZG1hLm8KK29iai0kKENPTkZJR19JTVhfSEFWRV9QTEFURk9STV9JTVhfRkIpICs9IHBsYXRmb3JtLWlteC1mYi5vCiBvYmotJChDT05GSUdfSU1YX0hBVkVfUExBVEZPUk1fSU1YX0kyQykgKz0gcGxhdGZvcm0taW14LWkyYy5vCitvYmotJChDT05GSUdfSU1YX0hBVkVfUExBVEZPUk1fSU1YX0tFWVBBRCkgKz0gcGxhdGZvcm0taW14LWtleXBhZC5vCiBvYmotJChDT05GSUdfSU1YX0hBVkVfUExBVEZPUk1fSU1YX1NTSSkgKz0gcGxhdGZvcm0taW14LXNzaS5vCiBvYmotJChDT05GSUdfSU1YX0hBVkVfUExBVEZPUk1fSU1YX1VBUlQpICs9IHBsYXRmb3JtLWlteC11YXJ0Lm8KK29iai0kKENPTkZJR19JTVhfSEFWRV9QTEFURk9STV9JTVhfVURDKSArPSBwbGF0Zm9ybS1pbXhfdWRjLm8KK29iai0kKENPTkZJR19JTVhfSEFWRV9QTEFURk9STV9NWDFfQ0FNRVJBKSArPSBwbGF0Zm9ybS1teDEtY2FtZXJhLm8KK29iai0kKENPTkZJR19JTVhfSEFWRV9QTEFURk9STV9NWDJfQ0FNRVJBKSArPSBwbGF0Zm9ybS1teDItY2FtZXJhLm8KK29iai0kKENPTkZJR19JTVhfSEFWRV9QTEFURk9STV9NWENfRUhDSSkgKz0gcGxhdGZvcm0tbXhjLWVoY2kubworb2JqLSQoQ09ORklHX0lNWF9IQVZFX1BMQVRGT1JNX01YQ19NTUMpICs9IHBsYXRmb3JtLW14Yy1tbWMubwogb2JqLSQoQ09ORklHX0lNWF9IQVZFX1BMQVRGT1JNX01YQ19OQU5EKSArPSBwbGF0Zm9ybS1teGNfbmFuZC5vCitvYmotJChDT05GSUdfSU1YX0hBVkVfUExBVEZPUk1fTVhDX1BXTSkgKz0gcGxhdGZvcm0tbXhjX3B3bS5vCitvYmotJChDT05GSUdfSU1YX0hBVkVfUExBVEZPUk1fTVhDX1JOR0EpICs9IHBsYXRmb3JtLW14Y19ybmdhLm8KK29iai0kKENPTkZJR19JTVhfSEFWRV9QTEFURk9STV9NWENfVzEpICs9IHBsYXRmb3JtLW14Y193MS5vCitvYmotJChDT05GSUdfSU1YX0hBVkVfUExBVEZPUk1fU0RIQ0lfRVNESENfSU1YKSArPSBwbGF0Zm9ybS1zZGhjaS1lc2RoYy1pbXgubwogb2JqLSQoQ09ORklHX0lNWF9IQVZFX1BMQVRGT1JNX1NQSV9JTVgpICs9ICBwbGF0Zm9ybS1zcGlfaW14Lm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2RldmljZXMvcGxhdGZvcm0tZXNkaGMuYyBiL2FyY2gvYXJtL3BsYXQtbXhjL2RldmljZXMvcGxhdGZvcm0tZXNkaGMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjYwNWJmYS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9kZXZpY2VzL3BsYXRmb3JtLWVzZGhjLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFBlbmd1dHJvbml4LCBXb2xmcmFtIFNhbmcgPHcuc2FuZ0BwZW5ndXRyb25peC5kZT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgotICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9kZXZpY2VzLWNvbW1vbi5oPgotI2luY2x1ZGUgPG1hY2gvZXNkaGMuaD4KLQotI2RlZmluZSBpbXhfZXNkaGNfaW14X2RhdGFfZW50cnlfc2luZ2xlKHNvYywgX2lkLCBod2lkKSBcCi0JewkJCQkJCQkJXAotCQkuaWQgPSBfaWQsCQkJCQkJXAotCQkuaW9iYXNlID0gc29jICMjIF9FU0RIQyAjIyBod2lkICMjIF9CQVNFX0FERFIsCVwKLQkJLmlycSA9IHNvYyAjIyBfSU5UX0VTREhDICMjIGh3aWQsCQkJXAotCX0KLQotI2RlZmluZSBpbXhfZXNkaGNfaW14X2RhdGFfZW50cnkoc29jLCBpZCwgaHdpZCkJXAotCVtpZF0gPSBpbXhfZXNkaGNfaW14X2RhdGFfZW50cnlfc2luZ2xlKHNvYywgaWQsIGh3aWQpCi0KLSNpZmRlZiBDT05GSUdfQVJDSF9NWDI1Ci1jb25zdCBzdHJ1Y3QgaW14X2VzZGhjX2lteF9kYXRhIGlteDI1X2VzZGhjX2RhdGFbXSBfX2luaXRjb25zdCA9IHsKLSNkZWZpbmUgaW14MjVfZXNkaGNfZGF0YV9lbnRyeShfaWQsIF9od2lkKQkJCQlcCi0JaW14X2VzZGhjX2lteF9kYXRhX2VudHJ5KE1YMjUsIF9pZCwgX2h3aWQpCi0JaW14MjVfZXNkaGNfZGF0YV9lbnRyeSgwLCAxKSwKLQlpbXgyNV9lc2RoY19kYXRhX2VudHJ5KDEsIDIpLAotfTsKLSNlbmRpZiAvKiBpZmRlZiBDT05GSUdfQVJDSF9NWDI1ICovCi0KLSNpZmRlZiBDT05GSUdfQVJDSF9NWDM1Ci1jb25zdCBzdHJ1Y3QgaW14X2VzZGhjX2lteF9kYXRhIGlteDM1X2VzZGhjX2RhdGFbXSBfX2luaXRjb25zdCA9IHsKLSNkZWZpbmUgaW14MzVfZXNkaGNfZGF0YV9lbnRyeShfaWQsIF9od2lkKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlpbXhfZXNkaGNfaW14X2RhdGFfZW50cnkoTVgzNSwgX2lkLCBfaHdpZCkKLQlpbXgzNV9lc2RoY19kYXRhX2VudHJ5KDAsIDEpLAotCWlteDM1X2VzZGhjX2RhdGFfZW50cnkoMSwgMiksCi0JaW14MzVfZXNkaGNfZGF0YV9lbnRyeSgyLCAzKSwKLX07Ci0jZW5kaWYgLyogaWZkZWYgQ09ORklHX0FSQ0hfTVgzNSAqLwotCi0jaWZkZWYgQ09ORklHX0FSQ0hfTVg1MQotY29uc3Qgc3RydWN0IGlteF9lc2RoY19pbXhfZGF0YSBpbXg1MV9lc2RoY19kYXRhW10gX19pbml0Y29uc3QgPSB7Ci0jZGVmaW5lIGlteDUxX2VzZGhjX2RhdGFfZW50cnkoX2lkLCBfaHdpZCkJCQkJXAotCWlteF9lc2RoY19pbXhfZGF0YV9lbnRyeShNWDUxLCBfaWQsIF9od2lkKQotCWlteDUxX2VzZGhjX2RhdGFfZW50cnkoMCwgMSksCi0JaW14NTFfZXNkaGNfZGF0YV9lbnRyeSgxLCAyKSwKLQlpbXg1MV9lc2RoY19kYXRhX2VudHJ5KDIsIDMpLAotCWlteDUxX2VzZGhjX2RhdGFfZW50cnkoMywgNCksCi19OwotI2VuZGlmIC8qIGlmZGVmIENPTkZJR19BUkNIX01YNTEgKi8KLQotc3RydWN0IHBsYXRmb3JtX2RldmljZSAqX19pbml0IGlteF9hZGRfZXNkaGMoCi0JCWNvbnN0IHN0cnVjdCBpbXhfZXNkaGNfaW14X2RhdGEgKmRhdGEsCi0JCWNvbnN0IHN0cnVjdCBlc2RoY19wbGF0Zm9ybV9kYXRhICpwZGF0YSkKLXsKLQlzdHJ1Y3QgcmVzb3VyY2UgcmVzW10gPSB7Ci0JCXsKLQkJCS5zdGFydCA9IGRhdGEtPmlvYmFzZSwKLQkJCS5lbmQgPSBkYXRhLT5pb2Jhc2UgKyBTWl8xNksgLSAxLAotCQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCi0JCX0sIHsKLQkJCS5zdGFydCA9IGRhdGEtPmlycSwKLQkJCS5lbmQgPSBkYXRhLT5pcnEsCi0JCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKLQkJfSwKLQl9OwotCi0JcmV0dXJuIGlteF9hZGRfcGxhdGZvcm1fZGV2aWNlKCJzZGhjaS1lc2RoYy1pbXgiLCBkYXRhLT5pZCwgcmVzLAotCQkJQVJSQVlfU0laRShyZXMpLCBwZGF0YSwgc2l6ZW9mKCpwZGF0YSkpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvZGV2aWNlcy9wbGF0Zm9ybS1mZWMuYyBiL2FyY2gvYXJtL3BsYXQtbXhjL2RldmljZXMvcGxhdGZvcm0tZmVjLmMKaW5kZXggMTFkMDg3Zi4uMjY5ZWM3OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvZGV2aWNlcy9wbGF0Zm9ybS1mZWMuYworKysgYi9hcmNoL2FybS9wbGF0LW14Yy9kZXZpY2VzL3BsYXRmb3JtLWZlYy5jCkBAIC0xNiwyMiArMTYsMjIgQEAKIAkJLmlycSA9IHNvYyAjIyBfSU5UX0ZFQywJCQkJCVwKIAl9CiAKLSNpZmRlZiBDT05GSUdfQVJDSF9NWDI1CisjaWZkZWYgQ09ORklHX1NPQ19JTVgyNQogY29uc3Qgc3RydWN0IGlteF9mZWNfZGF0YSBpbXgyNV9mZWNfZGF0YSBfX2luaXRjb25zdCA9CiAJaW14X2ZlY19kYXRhX2VudHJ5X3NpbmdsZShNWDI1KTsKLSNlbmRpZiAvKiBpZmRlZiBDT05GSUdfQVJDSF9NWDI1ICovCisjZW5kaWYgLyogaWZkZWYgQ09ORklHX1NPQ19JTVgyNSAqLwogCiAjaWZkZWYgQ09ORklHX1NPQ19JTVgyNwogY29uc3Qgc3RydWN0IGlteF9mZWNfZGF0YSBpbXgyN19mZWNfZGF0YSBfX2luaXRjb25zdCA9CiAJaW14X2ZlY19kYXRhX2VudHJ5X3NpbmdsZShNWDI3KTsKICNlbmRpZiAvKiBpZmRlZiBDT05GSUdfU09DX0lNWDI3ICovCiAKLSNpZmRlZiBDT05GSUdfQVJDSF9NWDM1CisjaWZkZWYgQ09ORklHX1NPQ19JTVgzNQogY29uc3Qgc3RydWN0IGlteF9mZWNfZGF0YSBpbXgzNV9mZWNfZGF0YSBfX2luaXRjb25zdCA9CiAJaW14X2ZlY19kYXRhX2VudHJ5X3NpbmdsZShNWDM1KTsKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX0FSQ0hfTVg1MQorI2lmZGVmIENPTkZJR19TT0NfSU1YNTEKIGNvbnN0IHN0cnVjdCBpbXhfZmVjX2RhdGEgaW14NTFfZmVjX2RhdGEgX19pbml0Y29uc3QgPQogCWlteF9mZWNfZGF0YV9lbnRyeV9zaW5nbGUoTVg1MSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2RldmljZXMvcGxhdGZvcm0tZmxleGNhbi5jIGIvYXJjaC9hcm0vcGxhdC1teGMvZGV2aWNlcy9wbGF0Zm9ybS1mbGV4Y2FuLmMKaW5kZXggNWU5N2EwMS4uNGU4NDk3YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvZGV2aWNlcy9wbGF0Zm9ybS1mbGV4Y2FuLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvZGV2aWNlcy9wbGF0Zm9ybS1mbGV4Y2FuLmMKQEAgLTUsMjYgKzUsNTQgQEAKICAqIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUKICAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwotCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvZGV2aWNlcy1jb21tb24uaD4KIAotc3RydWN0IHBsYXRmb3JtX2RldmljZSAqX19pbml0IGlteF9hZGRfZmxleGNhbihpbnQgaWQsCi0JCXJlc291cmNlX3NpemVfdCBpb2Jhc2UsIHJlc291cmNlX3NpemVfdCBpb3NpemUsCi0JCXJlc291cmNlX3NpemVfdCBpcnEsCisjZGVmaW5lIGlteF9mbGV4Y2FuX2RhdGFfZW50cnlfc2luZ2xlKHNvYywgX2lkLCBfaHdpZCwgX3NpemUpCQlcCisJewkJCQkJCQkJXAorCQkuaWQgPSBfaWQsCQkJCQkJXAorCQkuaW9iYXNlID0gc29jICMjIF9DQU4gIyMgX2h3aWQgIyMgX0JBU0VfQUREUiwJCVwKKwkJLmlvc2l6ZSA9IF9zaXplLAkJCQkJXAorCQkuaXJxID0gc29jICMjIF9JTlRfQ0FOICMjIF9od2lkLAkJCVwKKwl9CisKKyNkZWZpbmUgaW14X2ZsZXhjYW5fZGF0YV9lbnRyeShzb2MsIF9pZCwgX2h3aWQsIF9zaXplKQkJCVwKKwlbX2lkXSA9IGlteF9mbGV4Y2FuX2RhdGFfZW50cnlfc2luZ2xlKHNvYywgX2lkLCBfaHdpZCwgX3NpemUpCisKKyNpZmRlZiBDT05GSUdfU09DX0lNWDI1Citjb25zdCBzdHJ1Y3QgaW14X2ZsZXhjYW5fZGF0YSBpbXgyNV9mbGV4Y2FuX2RhdGFbXSBfX2luaXRjb25zdCA9IHsKKyNkZWZpbmUgaW14MjVfZmxleGNhbl9kYXRhX2VudHJ5KF9pZCwgX2h3aWQpCQkJCVwKKwlpbXhfZmxleGNhbl9kYXRhX2VudHJ5KE1YMjUsIF9pZCwgX2h3aWQsIFNaXzE2SykKKwlpbXgyNV9mbGV4Y2FuX2RhdGFfZW50cnkoMCwgMSksCisJaW14MjVfZmxleGNhbl9kYXRhX2VudHJ5KDEsIDIpLAorfTsKKyNlbmRpZiAvKiBpZmRlZiBDT05GSUdfU09DX0lNWDI1ICovCisKKyNpZmRlZiBDT05GSUdfU09DX0lNWDM1Citjb25zdCBzdHJ1Y3QgaW14X2ZsZXhjYW5fZGF0YSBpbXgzNV9mbGV4Y2FuX2RhdGFbXSBfX2luaXRjb25zdCA9IHsKKyNkZWZpbmUgaW14MzVfZmxleGNhbl9kYXRhX2VudHJ5KF9pZCwgX2h3aWQpCQkJCVwKKwlpbXhfZmxleGNhbl9kYXRhX2VudHJ5KE1YMzUsIF9pZCwgX2h3aWQsIFNaXzE2SykKKwlpbXgzNV9mbGV4Y2FuX2RhdGFfZW50cnkoMCwgMSksCisJaW14MzVfZmxleGNhbl9kYXRhX2VudHJ5KDEsIDIpLAorfTsKKyNlbmRpZiAvKiBpZmRlZiBDT05GSUdfU09DX0lNWDM1ICovCisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKl9faW5pdCBpbXhfYWRkX2ZsZXhjYW4oCisJCWNvbnN0IHN0cnVjdCBpbXhfZmxleGNhbl9kYXRhICpkYXRhLAogCQljb25zdCBzdHJ1Y3QgZmxleGNhbl9wbGF0Zm9ybV9kYXRhICpwZGF0YSkKIHsKIAlzdHJ1Y3QgcmVzb3VyY2UgcmVzW10gPSB7CiAJCXsKLQkJCS5zdGFydCA9IGlvYmFzZSwKLQkJCS5lbmQgPSBpb2Jhc2UgKyBpb3NpemUgLSAxLAorCQkJLnN0YXJ0ID0gZGF0YS0+aW9iYXNlLAorCQkJLmVuZCA9IGRhdGEtPmlvYmFzZSArIGRhdGEtPmlvc2l6ZSAtIDEsCiAJCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKIAkJfSwgewotCQkJLnN0YXJ0ID0gaXJxLAotCQkJLmVuZCA9IGlycSwKKwkJCS5zdGFydCA9IGRhdGEtPmlycSwKKwkJCS5lbmQgPSBkYXRhLT5pcnEsCiAJCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKIAkJfSwKIAl9OwogCi0JcmV0dXJuIGlteF9hZGRfcGxhdGZvcm1fZGV2aWNlKCJmbGV4Y2FuIiwgaWQsIHJlcywgQVJSQVlfU0laRShyZXMpLAotCQkJcGRhdGEsIHNpemVvZigqcGRhdGEpKTsKKwlyZXR1cm4gaW14X2FkZF9wbGF0Zm9ybV9kZXZpY2UoImZsZXhjYW4iLCBkYXRhLT5pZCwKKwkJCXJlcywgQVJSQVlfU0laRShyZXMpLCBwZGF0YSwgc2l6ZW9mKCpwZGF0YSkpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvZGV2aWNlcy9wbGF0Zm9ybS1mc2wtdXNiMi11ZGMuYyBiL2FyY2gvYXJtL3BsYXQtbXhjL2RldmljZXMvcGxhdGZvcm0tZnNsLXVzYjItdWRjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTljMzNmNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2RldmljZXMvcGxhdGZvcm0tZnNsLXVzYjItdWRjLmMKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBQZW5ndXRyb25peAorICogVXdlIEtsZWluZS1Lb2VuaWcgPHUua2xlaW5lLWtvZW5pZ0BwZW5ndXRyb25peC5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgorICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvZGV2aWNlcy1jb21tb24uaD4KKworI2RlZmluZSBpbXhfZnNsX3VzYjJfdWRjX2RhdGFfZW50cnlfc2luZ2xlKHNvYykJCQkJXAorCXsJCQkJCQkJCVwKKwkJLmlvYmFzZSA9IHNvYyAjIyBfVVNCX09UR19CQVNFX0FERFIsCQkJXAorCQkuaXJxID0gc29jICMjIF9JTlRfVVNCX09URywJCQkJXAorCX0KKworI2lmZGVmIENPTkZJR19TT0NfSU1YMjUKK2NvbnN0IHN0cnVjdCBpbXhfZnNsX3VzYjJfdWRjX2RhdGEgaW14MjVfZnNsX3VzYjJfdWRjX2RhdGEgX19pbml0Y29uc3QgPQorCWlteF9mc2xfdXNiMl91ZGNfZGF0YV9lbnRyeV9zaW5nbGUoTVgyNSk7CisjZW5kaWYgLyogaWZkZWYgQ09ORklHX1NPQ19JTVgyNSAqLworCisjaWZkZWYgQ09ORklHX1NPQ19JTVgyNworY29uc3Qgc3RydWN0IGlteF9mc2xfdXNiMl91ZGNfZGF0YSBpbXgyN19mc2xfdXNiMl91ZGNfZGF0YSBfX2luaXRjb25zdCA9CisJaW14X2ZzbF91c2IyX3VkY19kYXRhX2VudHJ5X3NpbmdsZShNWDI3KTsKKyNlbmRpZiAvKiBpZmRlZiBDT05GSUdfU09DX0lNWDI3ICovCisKKyNpZmRlZiBDT05GSUdfU09DX0lNWDMxCitjb25zdCBzdHJ1Y3QgaW14X2ZzbF91c2IyX3VkY19kYXRhIGlteDMxX2ZzbF91c2IyX3VkY19kYXRhIF9faW5pdGNvbnN0ID0KKwlpbXhfZnNsX3VzYjJfdWRjX2RhdGFfZW50cnlfc2luZ2xlKE1YMzEpOworI2VuZGlmIC8qIGlmZGVmIENPTkZJR19TT0NfSU1YMzEgKi8KKworI2lmZGVmIENPTkZJR19TT0NfSU1YMzUKK2NvbnN0IHN0cnVjdCBpbXhfZnNsX3VzYjJfdWRjX2RhdGEgaW14MzVfZnNsX3VzYjJfdWRjX2RhdGEgX19pbml0Y29uc3QgPQorCWlteF9mc2xfdXNiMl91ZGNfZGF0YV9lbnRyeV9zaW5nbGUoTVgzNSk7CisjZW5kaWYgLyogaWZkZWYgQ09ORklHX1NPQ19JTVgzNSAqLworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpfX2luaXQgaW14X2FkZF9mc2xfdXNiMl91ZGMoCisJCWNvbnN0IHN0cnVjdCBpbXhfZnNsX3VzYjJfdWRjX2RhdGEgKmRhdGEsCisJCWNvbnN0IHN0cnVjdCBmc2xfdXNiMl9wbGF0Zm9ybV9kYXRhICpwZGF0YSkKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgcmVzW10gPSB7CisJCXsKKwkJCS5zdGFydCA9IGRhdGEtPmlvYmFzZSwKKwkJCS5lbmQgPSBkYXRhLT5pb2Jhc2UgKyBTWl81MTIgLSAxLAorCQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJCX0sIHsKKwkJCS5zdGFydCA9IGRhdGEtPmlycSwKKwkJCS5lbmQgPSBkYXRhLT5pcnEsCisJCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwkJfSwKKwl9OworCXJldHVybiBpbXhfYWRkX3BsYXRmb3JtX2RldmljZV9kbWFtYXNrKCJmc2wtdXNiMi11ZGMiLCAtMSwKKwkJCXJlcywgQVJSQVlfU0laRShyZXMpLAorCQkJcGRhdGEsIHNpemVvZigqcGRhdGEpLCBETUFfQklUX01BU0soMzIpKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2RldmljZXMvcGxhdGZvcm0taW14LWRtYS5jIGIvYXJjaC9hcm0vcGxhdC1teGMvZGV2aWNlcy9wbGF0Zm9ybS1pbXgtZG1hLmMKaW5kZXggM2E3MDVjNy4uMzM1MzBkMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvZGV2aWNlcy9wbGF0Zm9ybS1pbXgtZG1hLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvZGV2aWNlcy9wbGF0Zm9ybS1pbXgtZG1hLmMKQEAgLTMxLDI1ICszMSwyNSBAQAogCQl9LAkJCQkJCQlcCiAJfQogCi0jaWZkZWYgQ09ORklHX0FSQ0hfTVgyNQotY29uc3Qgc3RydWN0IGlteF9pbXhfc2RtYV9kYXRhIGlteDI1X2lteF9zZG1hX2RhdGEgX19pbml0Y29uc3QgPQorI2lmZGVmIENPTkZJR19TT0NfSU1YMjUKK3N0cnVjdCBpbXhfaW14X3NkbWFfZGF0YSBpbXgyNV9pbXhfc2RtYV9kYXRhIF9faW5pdGNvbnN0ID0KIAlpbXhfaW14X3NkbWFfZGF0YV9lbnRyeV9zaW5nbGUoTVgyNSwgMSwgImlteDI1IiwgMCk7Ci0jZW5kaWYgLyogaWZkZWYgQ09ORklHX0FSQ0hfTVgyNSAqLworI2VuZGlmIC8qIGlmZGVmIENPTkZJR19TT0NfSU1YMjUgKi8KIAotI2lmZGVmIENPTkZJR19BUkNIX01YMzEKKyNpZmRlZiBDT05GSUdfU09DX0lNWDMxCiBzdHJ1Y3QgaW14X2lteF9zZG1hX2RhdGEgaW14MzFfaW14X3NkbWFfZGF0YSBfX2luaXRkYXRhID0KIAlpbXhfaW14X3NkbWFfZGF0YV9lbnRyeV9zaW5nbGUoTVgzMSwgMSwgImlteDMxIiwgMCk7Ci0jZW5kaWYgLyogaWZkZWYgQ09ORklHX0FSQ0hfTVgzMSAqLworI2VuZGlmIC8qIGlmZGVmIENPTkZJR19TT0NfSU1YMzEgKi8KIAotI2lmZGVmIENPTkZJR19BUkNIX01YMzUKKyNpZmRlZiBDT05GSUdfU09DX0lNWDM1CiBzdHJ1Y3QgaW14X2lteF9zZG1hX2RhdGEgaW14MzVfaW14X3NkbWFfZGF0YSBfX2luaXRkYXRhID0KIAlpbXhfaW14X3NkbWFfZGF0YV9lbnRyeV9zaW5nbGUoTVgzNSwgMiwgImlteDM1IiwgMCk7Ci0jZW5kaWYgLyogaWZkZWYgQ09ORklHX0FSQ0hfTVgzNSAqLworI2VuZGlmIC8qIGlmZGVmIENPTkZJR19TT0NfSU1YMzUgKi8KIAotI2lmZGVmIENPTkZJR19BUkNIX01YNTEKLWNvbnN0IHN0cnVjdCBpbXhfaW14X3NkbWFfZGF0YSBpbXg1MV9pbXhfc2RtYV9kYXRhIF9faW5pdGNvbnN0ID0KKyNpZmRlZiBDT05GSUdfU09DX0lNWDUxCitzdHJ1Y3QgaW14X2lteF9zZG1hX2RhdGEgaW14NTFfaW14X3NkbWFfZGF0YSBfX2luaXRjb25zdCA9CiAJaW14X2lteF9zZG1hX2RhdGFfZW50cnlfc2luZ2xlKE1YNTEsIDIsICJpbXg1MSIsIDApOwotI2VuZGlmIC8qIGlmZGVmIENPTkZJR19BUkNIX01YNTEgKi8KKyNlbmRpZiAvKiBpZmRlZiBDT05GSUdfU09DX0lNWDUxICovCiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIF9faW5pdCBfX21heWJlX3VudXNlZCAqaW14X2FkZF9pbXhfc2RtYSgKIAkJY29uc3Qgc3RydWN0IGlteF9pbXhfc2RtYV9kYXRhICpkYXRhKQpAQCAtNzYsNiArNzYsODMgQEAKIAlyZXR1cm4gaW14X2FkZF9wbGF0Zm9ybV9kZXZpY2UoImlteC1kbWEiLCAtMSwgTlVMTCwgMCwgTlVMTCwgMCk7CiB9CiAKKyNpZmRlZiBDT05GSUdfQVJDSF9NWDI1CitzdGF0aWMgc3RydWN0IHNkbWFfc2NyaXB0X3N0YXJ0X2FkZHJzIGFkZHJfaW14MjVfdG8xID0geworCS5hcF8yX2FwX2FkZHIgPSA3MjksCisJLnVhcnRfMl9tY3VfYWRkciA9IDkwNCwKKwkucGVyXzJfYXBwX2FkZHIgPSAxMjU1LAorCS5tY3VfMl9hcHBfYWRkciA9IDgzNCwKKwkudWFydHNoXzJfbWN1X2FkZHIgPSAxMTIwLAorCS5wZXJfMl9zaHBfYWRkciA9IDEzMjksCisJLm1jdV8yX3NocF9hZGRyID0gMTA0OCwKKwkuYXRhXzJfbWN1X2FkZHIgPSAxNTYwLAorCS5tY3VfMl9hdGFfYWRkciA9IDE0NzksCisJLmFwcF8yX3Blcl9hZGRyID0gMTE4OSwKKwkuYXBwXzJfbWN1X2FkZHIgPSA3NzAsCisJLnNocF8yX3Blcl9hZGRyID0gMTQwNywKKwkuc2hwXzJfbWN1X2FkZHIgPSA5NzksCit9OworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQVJDSF9NWDMxCitzdGF0aWMgc3RydWN0IHNkbWFfc2NyaXB0X3N0YXJ0X2FkZHJzIGFkZHJfaW14MzFfdG8xID0geworCS5wZXJfMl9wZXJfYWRkciA9IDE2NzcsCit9OworCitzdGF0aWMgc3RydWN0IHNkbWFfc2NyaXB0X3N0YXJ0X2FkZHJzIGFkZHJfaW14MzFfdG8yID0geworCS5hcF8yX2FwX2FkZHIgPSA0MjMsCisJLmFwXzJfYnBfYWRkciA9IDgyOSwKKwkuYnBfMl9hcF9hZGRyID0gMTAyOSwKK307CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19BUkNIX01YMzUKK3N0YXRpYyBzdHJ1Y3Qgc2RtYV9zY3JpcHRfc3RhcnRfYWRkcnMgYWRkcl9pbXgzNV90bzEgPSB7CisJLmFwXzJfYXBfYWRkciA9IDY0MiwKKwkudWFydF8yX21jdV9hZGRyID0gODE3LAorCS5tY3VfMl9hcHBfYWRkciA9IDc0NywKKwkudWFydHNoXzJfbWN1X2FkZHIgPSAxMTgzLAorCS5wZXJfMl9zaHBfYWRkciA9IDEwMzMsCisJLm1jdV8yX3NocF9hZGRyID0gOTYxLAorCS5hdGFfMl9tY3VfYWRkciA9IDEzMzMsCisJLm1jdV8yX2F0YV9hZGRyID0gMTI1MiwKKwkuYXBwXzJfbWN1X2FkZHIgPSA2ODMsCisJLnNocF8yX3Blcl9hZGRyID0gMTExMSwKKwkuc2hwXzJfbWN1X2FkZHIgPSA4OTIsCit9OworCitzdGF0aWMgc3RydWN0IHNkbWFfc2NyaXB0X3N0YXJ0X2FkZHJzIGFkZHJfaW14MzVfdG8yID0geworCS5hcF8yX2FwX2FkZHIgPSA3MjksCisJLnVhcnRfMl9tY3VfYWRkciA9IDkwNCwKKwkucGVyXzJfYXBwX2FkZHIgPSAxNTk3LAorCS5tY3VfMl9hcHBfYWRkciA9IDgzNCwKKwkudWFydHNoXzJfbWN1X2FkZHIgPSAxMjcwLAorCS5wZXJfMl9zaHBfYWRkciA9IDExMjAsCisJLm1jdV8yX3NocF9hZGRyID0gMTA0OCwKKwkuYXRhXzJfbWN1X2FkZHIgPSAxNDI5LAorCS5tY3VfMl9hdGFfYWRkciA9IDEzMzksCisJLmFwcF8yX3Blcl9hZGRyID0gMTUzMSwKKwkuYXBwXzJfbWN1X2FkZHIgPSA3NzAsCisJLnNocF8yX3Blcl9hZGRyID0gMTE5OCwKKwkuc2hwXzJfbWN1X2FkZHIgPSA5NzksCit9OworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfU09DX0lNWDUxCitzdGF0aWMgc3RydWN0IHNkbWFfc2NyaXB0X3N0YXJ0X2FkZHJzIGFkZHJfaW14NTFfdG8xID0geworCS5hcF8yX2FwX2FkZHIgPSA2NDIsCisJLnVhcnRfMl9tY3VfYWRkciA9IDgxNywKKwkubWN1XzJfYXBwX2FkZHIgPSA3NDcsCisJLm1jdV8yX3NocF9hZGRyID0gOTYxLAorCS5hdGFfMl9tY3VfYWRkciA9IDE0NzMsCisJLm1jdV8yX2F0YV9hZGRyID0gMTM5MiwKKwkuYXBwXzJfcGVyX2FkZHIgPSAxMDMzLAorCS5hcHBfMl9tY3VfYWRkciA9IDY4MywKKwkuc2hwXzJfcGVyX2FkZHIgPSAxMjUxLAorCS5zaHBfMl9tY3VfYWRkciA9IDg5MiwKK307CisjZW5kaWYKKwogc3RhdGljIGludCBfX2luaXQgaW14WFhfYWRkX2lteF9kbWEodm9pZCkKIHsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpyZXQ7CkBAIC04NiwzMCArMTYzLDQyIEBACiAJZWxzZQogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX01YMjUpCi0JaWYgKGNwdV9pc19teDI1KCkpCisjaWYgZGVmaW5lZChDT05GSUdfU09DX0lNWDI1KQorCWlmIChjcHVfaXNfbXgyNSgpKSB7CisJCWlteDI1X2lteF9zZG1hX2RhdGEucGRhdGEuc2NyaXB0X2FkZHJzID0gJmFkZHJfaW14MjVfdG8xOwogCQlyZXQgPSBpbXhfYWRkX2lteF9zZG1hKCZpbXgyNV9pbXhfc2RtYV9kYXRhKTsKLQllbHNlCisJfSBlbHNlCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfTVgzMSkKKyNpZiBkZWZpbmVkKENPTkZJR19TT0NfSU1YMzEpCiAJaWYgKGNwdV9pc19teDMxKCkpIHsKLQkJaW14MzFfaW14X3NkbWFfZGF0YS5wZGF0YS50b192ZXJzaW9uID0gbXgzMV9yZXZpc2lvbigpID4+IDQ7CisJCWludCB0b192ZXJzaW9uID0gbXgzMV9yZXZpc2lvbigpID4+IDQ7CisJCWlteDMxX2lteF9zZG1hX2RhdGEucGRhdGEudG9fdmVyc2lvbiA9IHRvX3ZlcnNpb247CisJCWlmICh0b192ZXJzaW9uID09IDEpCisJCQlpbXgzMV9pbXhfc2RtYV9kYXRhLnBkYXRhLnNjcmlwdF9hZGRycyA9ICZhZGRyX2lteDMxX3RvMTsKKwkJZWxzZQorCQkJaW14MzFfaW14X3NkbWFfZGF0YS5wZGF0YS5zY3JpcHRfYWRkcnMgPSAmYWRkcl9pbXgzMV90bzI7CiAJCXJldCA9IGlteF9hZGRfaW14X3NkbWEoJmlteDMxX2lteF9zZG1hX2RhdGEpOwogCX0gZWxzZQogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX01YMzUpCisjaWYgZGVmaW5lZChDT05GSUdfU09DX0lNWDM1KQogCWlmIChjcHVfaXNfbXgzNSgpKSB7Ci0JCWlteDM1X2lteF9zZG1hX2RhdGEucGRhdGEudG9fdmVyc2lvbiA9IG14MzVfcmV2aXNpb24oKSA+PiA0OworCQlpbnQgdG9fdmVyc2lvbiA9IG14MzVfcmV2aXNpb24oKSA+PiA0OworCQlpbXgzNV9pbXhfc2RtYV9kYXRhLnBkYXRhLnRvX3ZlcnNpb24gPSB0b192ZXJzaW9uOworCQlpZiAodG9fdmVyc2lvbiA9PSAxKQorCQkJaW14MzVfaW14X3NkbWFfZGF0YS5wZGF0YS5zY3JpcHRfYWRkcnMgPSAmYWRkcl9pbXgzNV90bzE7CisJCWVsc2UKKwkJCWlteDM1X2lteF9zZG1hX2RhdGEucGRhdGEuc2NyaXB0X2FkZHJzID0gJmFkZHJfaW14MzVfdG8yOwogCQlyZXQgPSBpbXhfYWRkX2lteF9zZG1hKCZpbXgzNV9pbXhfc2RtYV9kYXRhKTsKIAl9IGVsc2UKICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9NWDUxKQotCWlmIChjcHVfaXNfbXg1MSgpKQorCWlmIChjcHVfaXNfbXg1MSgpKSB7CisJCWlteDUxX2lteF9zZG1hX2RhdGEucGRhdGEuc2NyaXB0X2FkZHJzID0gJmFkZHJfaW14NTFfdG8xOwogCQlyZXQgPSBpbXhfYWRkX2lteF9zZG1hKCZpbXg1MV9pbXhfc2RtYV9kYXRhKTsKLQllbHNlCisJfSBlbHNlCiAjZW5kaWYKIAkJcmV0ID0gRVJSX1BUUigtRU5PREVWKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvZGV2aWNlcy9wbGF0Zm9ybS1pbXgtZmIuYyBiL2FyY2gvYXJtL3BsYXQtbXhjL2RldmljZXMvcGxhdGZvcm0taW14LWZiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjEwMGE3ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2RldmljZXMvcGxhdGZvcm0taW14LWZiLmMKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBQZW5ndXRyb25peAorICogVXdlIEtsZWluZS1Lb2VuaWcgPHUua2xlaW5lLWtvZW5pZ0BwZW5ndXRyb25peC5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgorICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvZGV2aWNlcy1jb21tb24uaD4KKworI2RlZmluZSBpbXhfaW14X2ZiX2RhdGFfZW50cnlfc2luZ2xlKHNvYywgX3NpemUpCQkJXAorCXsJCQkJCQkJCVwKKwkJLmlvYmFzZSA9IHNvYyAjIyBfTENEQ19CQVNFX0FERFIsCQkJXAorCQkuaW9zaXplID0gX3NpemUsCQkJCQlcCisJCS5pcnEgPSBzb2MgIyMgX0lOVF9MQ0RDLAkJCQlcCisJfQorCisjaWZkZWYgQ09ORklHX1NPQ19JTVgyMQorY29uc3Qgc3RydWN0IGlteF9pbXhfZmJfZGF0YSBpbXgyMV9pbXhfZmJfZGF0YSBfX2luaXRjb25zdCA9CisJaW14X2lteF9mYl9kYXRhX2VudHJ5X3NpbmdsZShNWDIxLCBTWl80Syk7CisjZW5kaWYgLyogaWZkZWYgQ09ORklHX1NPQ19JTVgyMSAqLworCisjaWZkZWYgQ09ORklHX1NPQ19JTVgyNQorY29uc3Qgc3RydWN0IGlteF9pbXhfZmJfZGF0YSBpbXgyNV9pbXhfZmJfZGF0YSBfX2luaXRjb25zdCA9CisJaW14X2lteF9mYl9kYXRhX2VudHJ5X3NpbmdsZShNWDI1LCBTWl8xNkspOworI2VuZGlmIC8qIGlmZGVmIENPTkZJR19TT0NfSU1YMjUgKi8KKworI2lmZGVmIENPTkZJR19TT0NfSU1YMjcKK2NvbnN0IHN0cnVjdCBpbXhfaW14X2ZiX2RhdGEgaW14MjdfaW14X2ZiX2RhdGEgX19pbml0Y29uc3QgPQorCWlteF9pbXhfZmJfZGF0YV9lbnRyeV9zaW5nbGUoTVgyNywgU1pfNEspOworI2VuZGlmIC8qIGlmZGVmIENPTkZJR19TT0NfSU1YMjcgKi8KKworc3RydWN0IHBsYXRmb3JtX2RldmljZSAqX19pbml0IGlteF9hZGRfaW14X2ZiKAorCQljb25zdCBzdHJ1Y3QgaW14X2lteF9mYl9kYXRhICpkYXRhLAorCQljb25zdCBzdHJ1Y3QgaW14X2ZiX3BsYXRmb3JtX2RhdGEgKnBkYXRhKQoreworCXN0cnVjdCByZXNvdXJjZSByZXNbXSA9IHsKKwkJeworCQkJLnN0YXJ0ID0gZGF0YS0+aW9iYXNlLAorCQkJLmVuZCA9IGRhdGEtPmlvYmFzZSArIGRhdGEtPmlvc2l6ZSAtIDEsCisJCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwkJfSwgeworCQkJLnN0YXJ0ID0gZGF0YS0+aXJxLAorCQkJLmVuZCA9IGRhdGEtPmlycSwKKwkJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCQl9LAorCX07CisJcmV0dXJuIGlteF9hZGRfcGxhdGZvcm1fZGV2aWNlX2RtYW1hc2soImlteC1mYiIsIDAsCisJCQlyZXMsIEFSUkFZX1NJWkUocmVzKSwKKwkJCXBkYXRhLCBzaXplb2YoKnBkYXRhKSwgRE1BX0JJVF9NQVNLKDMyKSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9kZXZpY2VzL3BsYXRmb3JtLWlteC1pMmMuYyBiL2FyY2gvYXJtL3BsYXQtbXhjL2RldmljZXMvcGxhdGZvcm0taW14LWkyYy5jCmluZGV4IDY3OTU4ODQuLjcyYmE4ODAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2RldmljZXMvcGxhdGZvcm0taW14LWkyYy5jCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2RldmljZXMvcGxhdGZvcm0taW14LWkyYy5jCkBAIC0zMCw3ICszMCw3IEBACiAJaW14X2lteF9pMmNfZGF0YV9lbnRyeV9zaW5nbGUoTVgyMSwgMCwgLCBTWl80Syk7CiAjZW5kaWYgLyogaWZkZWYgQ09ORklHX1NPQ19JTVgyMSAqLwogCi0jaWZkZWYgQ09ORklHX0FSQ0hfTVgyNQorI2lmZGVmIENPTkZJR19TT0NfSU1YMjUKIGNvbnN0IHN0cnVjdCBpbXhfaW14X2kyY19kYXRhIGlteDI1X2lteF9pMmNfZGF0YVtdIF9faW5pdGNvbnN0ID0gewogI2RlZmluZSBpbXgyNV9pbXhfaTJjX2RhdGFfZW50cnkoX2lkLCBfaHdpZCkJCQkJXAogCWlteF9pbXhfaTJjX2RhdGFfZW50cnkoTVgyNSwgX2lkLCBfaHdpZCwgU1pfMTZLKQpAQCAtMzgsNyArMzgsNyBAQAogCWlteDI1X2lteF9pMmNfZGF0YV9lbnRyeSgxLCAyKSwKIAlpbXgyNV9pbXhfaTJjX2RhdGFfZW50cnkoMiwgMyksCiB9OwotI2VuZGlmIC8qIGlmZGVmIENPTkZJR19BUkNIX01YMjUgKi8KKyNlbmRpZiAvKiBpZmRlZiBDT05GSUdfU09DX0lNWDI1ICovCiAKICNpZmRlZiBDT05GSUdfU09DX0lNWDI3CiBjb25zdCBzdHJ1Y3QgaW14X2lteF9pMmNfZGF0YSBpbXgyN19pbXhfaTJjX2RhdGFbXSBfX2luaXRjb25zdCA9IHsKQEAgLTQ5LDcgKzQ5LDcgQEAKIH07CiAjZW5kaWYgLyogaWZkZWYgQ09ORklHX1NPQ19JTVgyNyAqLwogCi0jaWZkZWYgQ09ORklHX0FSQ0hfTVgzMQorI2lmZGVmIENPTkZJR19TT0NfSU1YMzEKIGNvbnN0IHN0cnVjdCBpbXhfaW14X2kyY19kYXRhIGlteDMxX2lteF9pMmNfZGF0YVtdIF9faW5pdGNvbnN0ID0gewogI2RlZmluZSBpbXgzMV9pbXhfaTJjX2RhdGFfZW50cnkoX2lkLCBfaHdpZCkJCQkJXAogCWlteF9pbXhfaTJjX2RhdGFfZW50cnkoTVgzMSwgX2lkLCBfaHdpZCwgU1pfNEspCkBAIC01Nyw5ICs1Nyw5IEBACiAJaW14MzFfaW14X2kyY19kYXRhX2VudHJ5KDEsIDIpLAogCWlteDMxX2lteF9pMmNfZGF0YV9lbnRyeSgyLCAzKSwKIH07Ci0jZW5kaWYgLyogaWZkZWYgQ09ORklHX0FSQ0hfTVgzMSAqLworI2VuZGlmIC8qIGlmZGVmIENPTkZJR19TT0NfSU1YMzEgKi8KIAotI2lmZGVmIENPTkZJR19BUkNIX01YMzUKKyNpZmRlZiBDT05GSUdfU09DX0lNWDM1CiBjb25zdCBzdHJ1Y3QgaW14X2lteF9pMmNfZGF0YSBpbXgzNV9pbXhfaTJjX2RhdGFbXSBfX2luaXRjb25zdCA9IHsKICNkZWZpbmUgaW14MzVfaW14X2kyY19kYXRhX2VudHJ5KF9pZCwgX2h3aWQpCQkJCVwKIAlpbXhfaW14X2kyY19kYXRhX2VudHJ5KE1YMzUsIF9pZCwgX2h3aWQsIFNaXzRLKQpAQCAtNjcsMTYgKzY3LDE2IEBACiAJaW14MzVfaW14X2kyY19kYXRhX2VudHJ5KDEsIDIpLAogCWlteDM1X2lteF9pMmNfZGF0YV9lbnRyeSgyLCAzKSwKIH07Ci0jZW5kaWYgLyogaWZkZWYgQ09ORklHX0FSQ0hfTVgzNSAqLworI2VuZGlmIC8qIGlmZGVmIENPTkZJR19TT0NfSU1YMzUgKi8KIAotI2lmZGVmIENPTkZJR19BUkNIX01YNTEKKyNpZmRlZiBDT05GSUdfU09DX0lNWDUxCiBjb25zdCBzdHJ1Y3QgaW14X2lteF9pMmNfZGF0YSBpbXg1MV9pbXhfaTJjX2RhdGFbXSBfX2luaXRjb25zdCA9IHsKICNkZWZpbmUgaW14NTFfaW14X2kyY19kYXRhX2VudHJ5KF9pZCwgX2h3aWQpCQkJCVwKIAlpbXhfaW14X2kyY19kYXRhX2VudHJ5KE1YNTEsIF9pZCwgX2h3aWQsIFNaXzRLKQogCWlteDUxX2lteF9pMmNfZGF0YV9lbnRyeSgwLCAxKSwKIAlpbXg1MV9pbXhfaTJjX2RhdGFfZW50cnkoMSwgMiksCiB9OwotI2VuZGlmIC8qIGlmZGVmIENPTkZJR19BUkNIX01YNTEgKi8KKyNlbmRpZiAvKiBpZmRlZiBDT05GSUdfU09DX0lNWDUxICovCiAKIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKl9faW5pdCBpbXhfYWRkX2lteF9pMmMoCiAJCWNvbnN0IHN0cnVjdCBpbXhfaW14X2kyY19kYXRhICpkYXRhLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvZGV2aWNlcy9wbGF0Zm9ybS1pbXgta2V5cGFkLmMgYi9hcmNoL2FybS9wbGF0LW14Yy9kZXZpY2VzL3BsYXRmb3JtLWlteC1rZXlwYWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDIzOGYwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvZGV2aWNlcy9wbGF0Zm9ybS1pbXgta2V5cGFkLmMKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBQZW5ndXRyb25peAorICogVXdlIEtsZWluZS1Lb2VuaWcgPHUua2xlaW5lLWtvZW5pZ0BwZW5ndXRyb25peC5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgorICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvZGV2aWNlcy1jb21tb24uaD4KKworI2RlZmluZSBpbXhfaW14X2tleXBhZF9kYXRhX2VudHJ5X3NpbmdsZShzb2MsIF9zaXplKQkJCVwKKwl7CQkJCQkJCQlcCisJCS5pb2Jhc2UgPSBzb2MgIyMgX0tQUF9CQVNFX0FERFIsCQkJXAorCQkuaW9zaXplID0gX3NpemUsCQkJCQlcCisJCS5pcnEgPSBzb2MgIyMgX0lOVF9LUFAsCQkJCQlcCisJfQorCisjaWZkZWYgQ09ORklHX1NPQ19JTVgyMQorY29uc3Qgc3RydWN0IGlteF9pbXhfa2V5cGFkX2RhdGEgaW14MjFfaW14X2tleXBhZF9kYXRhIF9faW5pdGNvbnN0ID0KKwlpbXhfaW14X2tleXBhZF9kYXRhX2VudHJ5X3NpbmdsZShNWDIxLCBTWl8xNik7CisjZW5kaWYgLyogaWZkZWYgQ09ORklHX1NPQ19JTVgyMSAqLworCisjaWZkZWYgQ09ORklHX1NPQ19JTVgyNQorY29uc3Qgc3RydWN0IGlteF9pbXhfa2V5cGFkX2RhdGEgaW14MjVfaW14X2tleXBhZF9kYXRhIF9faW5pdGNvbnN0ID0KKwlpbXhfaW14X2tleXBhZF9kYXRhX2VudHJ5X3NpbmdsZShNWDI1LCBTWl8xNkspOworI2VuZGlmIC8qIGlmZGVmIENPTkZJR19TT0NfSU1YMjUgKi8KKworI2lmZGVmIENPTkZJR19TT0NfSU1YMjcKK2NvbnN0IHN0cnVjdCBpbXhfaW14X2tleXBhZF9kYXRhIGlteDI3X2lteF9rZXlwYWRfZGF0YSBfX2luaXRjb25zdCA9CisJaW14X2lteF9rZXlwYWRfZGF0YV9lbnRyeV9zaW5nbGUoTVgyNywgU1pfMTYpOworI2VuZGlmIC8qIGlmZGVmIENPTkZJR19TT0NfSU1YMjcgKi8KKworI2lmZGVmIENPTkZJR19TT0NfSU1YMzEKK2NvbnN0IHN0cnVjdCBpbXhfaW14X2tleXBhZF9kYXRhIGlteDMxX2lteF9rZXlwYWRfZGF0YSBfX2luaXRjb25zdCA9CisJaW14X2lteF9rZXlwYWRfZGF0YV9lbnRyeV9zaW5nbGUoTVgzMSwgU1pfMTYpOworI2VuZGlmIC8qIGlmZGVmIENPTkZJR19TT0NfSU1YMzEgKi8KKworI2lmZGVmIENPTkZJR19TT0NfSU1YMzUKK2NvbnN0IHN0cnVjdCBpbXhfaW14X2tleXBhZF9kYXRhIGlteDM1X2lteF9rZXlwYWRfZGF0YSBfX2luaXRjb25zdCA9CisJaW14X2lteF9rZXlwYWRfZGF0YV9lbnRyeV9zaW5nbGUoTVgzNSwgU1pfMTYpOworI2VuZGlmIC8qIGlmZGVmIENPTkZJR19TT0NfSU1YMzUgKi8KKworc3RydWN0IHBsYXRmb3JtX2RldmljZSAqX19pbml0IGlteF9hZGRfaW14X2tleXBhZCgKKwkJY29uc3Qgc3RydWN0IGlteF9pbXhfa2V5cGFkX2RhdGEgKmRhdGEsCisJCWNvbnN0IHN0cnVjdCBtYXRyaXhfa2V5bWFwX2RhdGEgKnBkYXRhKQoreworCXN0cnVjdCByZXNvdXJjZSByZXNbXSA9IHsKKwkJeworCQkJLnN0YXJ0ID0gZGF0YS0+aW9iYXNlLAorCQkJLmVuZCA9IGRhdGEtPmlvYmFzZSArIGRhdGEtPmlvc2l6ZSAtIDEsCisJCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwkJfSwgeworCQkJLnN0YXJ0ID0gZGF0YS0+aXJxLAorCQkJLmVuZCA9IGRhdGEtPmlycSwKKwkJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCQl9LAorCX07CisKKwlyZXR1cm4gaW14X2FkZF9wbGF0Zm9ybV9kZXZpY2UoImlteC1rZXlwYWQiLCAtMSwKKwkJCXJlcywgQVJSQVlfU0laRShyZXMpLCBwZGF0YSwgc2l6ZW9mKCpwZGF0YSkpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvZGV2aWNlcy9wbGF0Zm9ybS1pbXgtc3NpLmMgYi9hcmNoL2FybS9wbGF0LW14Yy9kZXZpY2VzL3BsYXRmb3JtLWlteC1zc2kuYwppbmRleCAzOGE3YTBiLi4yNTY5YzhkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9kZXZpY2VzL3BsYXRmb3JtLWlteC1zc2kuYworKysgYi9hcmNoL2FybS9wbGF0LW14Yy9kZXZpY2VzL3BsYXRmb3JtLWlteC1zc2kuYwpAQCAtMzAsMTQgKzMwLDE0IEBACiB9OwogI2VuZGlmIC8qIGlmZGVmIENPTkZJR19TT0NfSU1YMjEgKi8KIAotI2lmZGVmIENPTkZJR19BUkNIX01YMjUKKyNpZmRlZiBDT05GSUdfU09DX0lNWDI1CiBjb25zdCBzdHJ1Y3QgaW14X2lteF9zc2lfZGF0YSBpbXgyNV9pbXhfc3NpX2RhdGFbXSBfX2luaXRjb25zdCA9IHsKICNkZWZpbmUgaW14MjVfaW14X3NzaV9kYXRhX2VudHJ5KF9pZCwgX2h3aWQpCQkJCVwKIAlpbXhfaW14X3NzaV9kYXRhX2VudHJ5KE1YMjUsIF9pZCwgX2h3aWQsIFNaXzRLKQogCWlteDI1X2lteF9zc2lfZGF0YV9lbnRyeSgwLCAxKSwKIAlpbXgyNV9pbXhfc3NpX2RhdGFfZW50cnkoMSwgMiksCiB9OwotI2VuZGlmIC8qIGlmZGVmIENPTkZJR19BUkNIX01YMjUgKi8KKyNlbmRpZiAvKiBpZmRlZiBDT05GSUdfU09DX0lNWDI1ICovCiAKICNpZmRlZiBDT05GSUdfU09DX0lNWDI3CiBjb25zdCBzdHJ1Y3QgaW14X2lteF9zc2lfZGF0YSBpbXgyN19pbXhfc3NpX2RhdGFbXSBfX2luaXRjb25zdCA9IHsKQEAgLTQ4LDMyICs0OCwzMyBAQAogfTsKICNlbmRpZiAvKiBpZmRlZiBDT05GSUdfU09DX0lNWDI3ICovCiAKLSNpZmRlZiBDT05GSUdfQVJDSF9NWDMxCisjaWZkZWYgQ09ORklHX1NPQ19JTVgzMQogY29uc3Qgc3RydWN0IGlteF9pbXhfc3NpX2RhdGEgaW14MzFfaW14X3NzaV9kYXRhW10gX19pbml0Y29uc3QgPSB7CiAjZGVmaW5lIGlteDMxX2lteF9zc2lfZGF0YV9lbnRyeShfaWQsIF9od2lkKQkJCQlcCiAJaW14X2lteF9zc2lfZGF0YV9lbnRyeShNWDMxLCBfaWQsIF9od2lkLCBTWl80SykKIAlpbXgzMV9pbXhfc3NpX2RhdGFfZW50cnkoMCwgMSksCiAJaW14MzFfaW14X3NzaV9kYXRhX2VudHJ5KDEsIDIpLAogfTsKLSNlbmRpZiAvKiBpZmRlZiBDT05GSUdfQVJDSF9NWDMxICovCisjZW5kaWYgLyogaWZkZWYgQ09ORklHX1NPQ19JTVgzMSAqLwogCi0jaWZkZWYgQ09ORklHX0FSQ0hfTVgzNQorI2lmZGVmIENPTkZJR19TT0NfSU1YMzUKIGNvbnN0IHN0cnVjdCBpbXhfaW14X3NzaV9kYXRhIGlteDM1X2lteF9zc2lfZGF0YVtdIF9faW5pdGNvbnN0ID0gewogI2RlZmluZSBpbXgzNV9pbXhfc3NpX2RhdGFfZW50cnkoX2lkLCBfaHdpZCkJCQkJXAogCWlteF9pbXhfc3NpX2RhdGFfZW50cnkoTVgzNSwgX2lkLCBfaHdpZCwgU1pfNEspCiAJaW14MzVfaW14X3NzaV9kYXRhX2VudHJ5KDAsIDEpLAogCWlteDM1X2lteF9zc2lfZGF0YV9lbnRyeSgxLCAyKSwKIH07Ci0jZW5kaWYgLyogaWZkZWYgQ09ORklHX0FSQ0hfTVgzNSAqLworI2VuZGlmIC8qIGlmZGVmIENPTkZJR19TT0NfSU1YMzUgKi8KIAotI2lmZGVmIENPTkZJR19BUkNIX01YNTEKKyNpZmRlZiBDT05GSUdfU09DX0lNWDUxCiBjb25zdCBzdHJ1Y3QgaW14X2lteF9zc2lfZGF0YSBpbXg1MV9pbXhfc3NpX2RhdGFbXSBfX2luaXRjb25zdCA9IHsKICNkZWZpbmUgaW14NTFfaW14X3NzaV9kYXRhX2VudHJ5KF9pZCwgX2h3aWQpCQkJCVwKIAlpbXhfaW14X3NzaV9kYXRhX2VudHJ5KE1YNTEsIF9pZCwgX2h3aWQsIFNaXzRLKQogCWlteDUxX2lteF9zc2lfZGF0YV9lbnRyeSgwLCAxKSwKIAlpbXg1MV9pbXhfc3NpX2RhdGFfZW50cnkoMSwgMiksCisJaW14NTFfaW14X3NzaV9kYXRhX2VudHJ5KDIsIDMpLAogfTsKLSNlbmRpZiAvKiBpZmRlZiBDT05GSUdfQVJDSF9NWDUxICovCisjZW5kaWYgLyogaWZkZWYgQ09ORklHX1NPQ19JTVg1MSAqLwogCiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpfX2luaXQgaW14X2FkZF9pbXhfc3NpKAogCQljb25zdCBzdHJ1Y3QgaW14X2lteF9zc2lfZGF0YSAqZGF0YSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2RldmljZXMvcGxhdGZvcm0taW14LXVhcnQuYyBiL2FyY2gvYXJtL3BsYXQtbXhjL2RldmljZXMvcGxhdGZvcm0taW14LXVhcnQuYwppbmRleCAyMDM5NjQwLi4zYzg1NGMyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9kZXZpY2VzL3BsYXRmb3JtLWlteC11YXJ0LmMKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvZGV2aWNlcy9wbGF0Zm9ybS1pbXgtdWFydC5jCkBAIC00Nyw3ICs0Nyw3IEBACiB9OwogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfQVJDSF9NWDI1CisjaWZkZWYgQ09ORklHX1NPQ19JTVgyNQogY29uc3Qgc3RydWN0IGlteF9pbXhfdWFydF8xaXJxX2RhdGEgaW14MjVfaW14X3VhcnRfZGF0YVtdIF9faW5pdGNvbnN0ID0gewogI2RlZmluZSBpbXgyNV9pbXhfdWFydF9kYXRhX2VudHJ5KF9pZCwgX2h3aWQpCQkJCVwKIAlpbXhfaW14X3VhcnRfMWlycV9kYXRhX2VudHJ5KE1YMjUsIF9pZCwgX2h3aWQsIFNaXzE2SykKQEAgLTU3LDcgKzU3LDcgQEAKIAlpbXgyNV9pbXhfdWFydF9kYXRhX2VudHJ5KDMsIDQpLAogCWlteDI1X2lteF91YXJ0X2RhdGFfZW50cnkoNCwgNSksCiB9OwotI2VuZGlmIC8qIGlmZGVmIENPTkZJR19BUkNIX01YMjUgKi8KKyNlbmRpZiAvKiBpZmRlZiBDT05GSUdfU09DX0lNWDI1ICovCiAKICNpZmRlZiBDT05GSUdfU09DX0lNWDI3CiBjb25zdCBzdHJ1Y3QgaW14X2lteF91YXJ0XzFpcnFfZGF0YSBpbXgyN19pbXhfdWFydF9kYXRhW10gX19pbml0Y29uc3QgPSB7CkBAIC03Miw3ICs3Miw3IEBACiB9OwogI2VuZGlmIC8qIGlmZGVmIENPTkZJR19TT0NfSU1YMjcgKi8KIAotI2lmZGVmIENPTkZJR19BUkNIX01YMzEKKyNpZmRlZiBDT05GSUdfU09DX0lNWDMxCiBjb25zdCBzdHJ1Y3QgaW14X2lteF91YXJ0XzFpcnFfZGF0YSBpbXgzMV9pbXhfdWFydF9kYXRhW10gX19pbml0Y29uc3QgPSB7CiAjZGVmaW5lIGlteDMxX2lteF91YXJ0X2RhdGFfZW50cnkoX2lkLCBfaHdpZCkJCQkJXAogCWlteF9pbXhfdWFydF8xaXJxX2RhdGFfZW50cnkoTVgzMSwgX2lkLCBfaHdpZCwgU1pfNEspCkBAIC04Miw5ICs4Miw5IEBACiAJaW14MzFfaW14X3VhcnRfZGF0YV9lbnRyeSgzLCA0KSwKIAlpbXgzMV9pbXhfdWFydF9kYXRhX2VudHJ5KDQsIDUpLAogfTsKLSNlbmRpZiAvKiBpZmRlZiBDT05GSUdfQVJDSF9NWDMxICovCisjZW5kaWYgLyogaWZkZWYgQ09ORklHX1NPQ19JTVgzMSAqLwogCi0jaWZkZWYgQ09ORklHX0FSQ0hfTVgzNQorI2lmZGVmIENPTkZJR19TT0NfSU1YMzUKIGNvbnN0IHN0cnVjdCBpbXhfaW14X3VhcnRfMWlycV9kYXRhIGlteDM1X2lteF91YXJ0X2RhdGFbXSBfX2luaXRjb25zdCA9IHsKICNkZWZpbmUgaW14MzVfaW14X3VhcnRfZGF0YV9lbnRyeShfaWQsIF9od2lkKQkJCQlcCiAJaW14X2lteF91YXJ0XzFpcnFfZGF0YV9lbnRyeShNWDMxLCBfaWQsIF9od2lkLCBTWl8xNkspCkBAIC05Miw5ICs5MiwyMSBAQAogCWlteDM1X2lteF91YXJ0X2RhdGFfZW50cnkoMSwgMiksCiAJaW14MzVfaW14X3VhcnRfZGF0YV9lbnRyeSgyLCAzKSwKIH07Ci0jZW5kaWYgLyogaWZkZWYgQ09ORklHX0FSQ0hfTVgzNSAqLworI2VuZGlmIC8qIGlmZGVmIENPTkZJR19TT0NfSU1YMzUgKi8KIAotI2lmZGVmIENPTkZJR19BUkNIX01YNTEKKyNpZmRlZiBDT05GSUdfU09DX0lNWDUwCitjb25zdCBzdHJ1Y3QgaW14X2lteF91YXJ0XzFpcnFfZGF0YSBpbXg1MF9pbXhfdWFydF9kYXRhW10gX19pbml0Y29uc3QgPSB7CisjZGVmaW5lIGlteDUwX2lteF91YXJ0X2RhdGFfZW50cnkoX2lkLCBfaHdpZCkJCQkJXAorCWlteF9pbXhfdWFydF8xaXJxX2RhdGFfZW50cnkoTVg1MCwgX2lkLCBfaHdpZCwgU1pfNEspCisJaW14NTBfaW14X3VhcnRfZGF0YV9lbnRyeSgwLCAxKSwKKwlpbXg1MF9pbXhfdWFydF9kYXRhX2VudHJ5KDEsIDIpLAorCWlteDUwX2lteF91YXJ0X2RhdGFfZW50cnkoMiwgMyksCisJaW14NTBfaW14X3VhcnRfZGF0YV9lbnRyeSgzLCA0KSwKKwlpbXg1MF9pbXhfdWFydF9kYXRhX2VudHJ5KDQsIDUpLAorfTsKKyNlbmRpZiAvKiBpZmRlZiBDT05GSUdfU09DX0lNWDUwICovCisKKyNpZmRlZiBDT05GSUdfU09DX0lNWDUxCiBjb25zdCBzdHJ1Y3QgaW14X2lteF91YXJ0XzFpcnFfZGF0YSBpbXg1MV9pbXhfdWFydF9kYXRhW10gX19pbml0Y29uc3QgPSB7CiAjZGVmaW5lIGlteDUxX2lteF91YXJ0X2RhdGFfZW50cnkoX2lkLCBfaHdpZCkJCQkJXAogCWlteF9pbXhfdWFydF8xaXJxX2RhdGFfZW50cnkoTVg1MSwgX2lkLCBfaHdpZCwgU1pfNEspCkBAIC0xMDIsNyArMTE0LDE3IEBACiAJaW14NTFfaW14X3VhcnRfZGF0YV9lbnRyeSgxLCAyKSwKIAlpbXg1MV9pbXhfdWFydF9kYXRhX2VudHJ5KDIsIDMpLAogfTsKLSNlbmRpZiAvKiBpZmRlZiBDT05GSUdfQVJDSF9NWDUxICovCisjZW5kaWYgLyogaWZkZWYgQ09ORklHX1NPQ19JTVg1MSAqLworCisjaWZkZWYgQ09ORklHX1NPQ19JTVg1MworY29uc3Qgc3RydWN0IGlteF9pbXhfdWFydF8xaXJxX2RhdGEgaW14NTNfaW14X3VhcnRfZGF0YVtdIF9faW5pdGNvbnN0ID0geworI2RlZmluZSBpbXg1M19pbXhfdWFydF9kYXRhX2VudHJ5KF9pZCwgX2h3aWQpCQkJCVwKKwlpbXhfaW14X3VhcnRfMWlycV9kYXRhX2VudHJ5KE1YNTMsIF9pZCwgX2h3aWQsIFNaXzRLKQorCWlteDUzX2lteF91YXJ0X2RhdGFfZW50cnkoMCwgMSksCisJaW14NTNfaW14X3VhcnRfZGF0YV9lbnRyeSgxLCAyKSwKKwlpbXg1M19pbXhfdWFydF9kYXRhX2VudHJ5KDIsIDMpLAorfTsKKyNlbmRpZiAvKiBpZmRlZiBDT05GSUdfU09DX0lNWDUzICovCiAKIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKl9faW5pdCBpbXhfYWRkX2lteF91YXJ0XzNpcnEoCiAJCWNvbnN0IHN0cnVjdCBpbXhfaW14X3VhcnRfM2lycV9kYXRhICpkYXRhLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvZGV2aWNlcy9wbGF0Zm9ybS1pbXgyLXdkdC5jIGIvYXJjaC9hcm0vcGxhdC1teGMvZGV2aWNlcy9wbGF0Zm9ybS1pbXgyLXdkdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwYWVjNjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9kZXZpY2VzL3BsYXRmb3JtLWlteDItd2R0LmMKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBQZW5ndXRyb25peAorICogVXdlIEtsZWluZS1Lb2VuaWcgPHUua2xlaW5lLWtvZW5pZ0BwZW5ndXRyb25peC5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgorICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8YXNtL3NpemVzLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvZGV2aWNlcy1jb21tb24uaD4KKworI2RlZmluZSBpbXhfaW14Ml93ZHRfZGF0YV9lbnRyeV9zaW5nbGUoc29jLCBfaWQsIF9od2lkLCBfc2l6ZSkJCVwKKwl7CQkJCQkJCQlcCisJCS5pZCA9IF9pZCwJCQkJCQlcCisJCS5pb2Jhc2UgPSBzb2MgIyMgX1dET0cgIyMgX2h3aWQgIyMgX0JBU0VfQUREUiwJCVwKKwkJLmlvc2l6ZSA9IF9zaXplLAkJCQkJXAorCX0KKyNkZWZpbmUgaW14X2lteDJfd2R0X2RhdGFfZW50cnkoc29jLCBfaWQsIF9od2lkLCBfc2l6ZSkJCQlcCisJW19pZF0gPSBpbXhfaW14Ml93ZHRfZGF0YV9lbnRyeV9zaW5nbGUoc29jLCBfaWQsIF9od2lkLCBfc2l6ZSkKKworI2lmZGVmIENPTkZJR19TT0NfSU1YMjEKK2NvbnN0IHN0cnVjdCBpbXhfaW14Ml93ZHRfZGF0YSBpbXgyMV9pbXgyX3dkdF9kYXRhIF9faW5pdGNvbnN0ID0KKwlpbXhfaW14Ml93ZHRfZGF0YV9lbnRyeV9zaW5nbGUoTVgyMSwgMCwgLCBTWl80Syk7CisjZW5kaWYgLyogaWZkZWYgQ09ORklHX1NPQ19JTVgyMSAqLworCisjaWZkZWYgQ09ORklHX1NPQ19JTVgyNQorY29uc3Qgc3RydWN0IGlteF9pbXgyX3dkdF9kYXRhIGlteDI1X2lteDJfd2R0X2RhdGEgX19pbml0Y29uc3QgPQorCWlteF9pbXgyX3dkdF9kYXRhX2VudHJ5X3NpbmdsZShNWDI1LCAwLCAsIFNaXzE2Syk7CisjZW5kaWYgLyogaWZkZWYgQ09ORklHX1NPQ19JTVgyNSAqLworCisjaWZkZWYgQ09ORklHX1NPQ19JTVgyNworY29uc3Qgc3RydWN0IGlteF9pbXgyX3dkdF9kYXRhIGlteDI3X2lteDJfd2R0X2RhdGEgX19pbml0Y29uc3QgPQorCWlteF9pbXgyX3dkdF9kYXRhX2VudHJ5X3NpbmdsZShNWDI3LCAwLCAsIFNaXzRLKTsKKyNlbmRpZiAvKiBpZmRlZiBDT05GSUdfU09DX0lNWDI3ICovCisKKyNpZmRlZiBDT05GSUdfU09DX0lNWDMxCitjb25zdCBzdHJ1Y3QgaW14X2lteDJfd2R0X2RhdGEgaW14MzFfaW14Ml93ZHRfZGF0YSBfX2luaXRjb25zdCA9CisJaW14X2lteDJfd2R0X2RhdGFfZW50cnlfc2luZ2xlKE1YMzEsIDAsICwgU1pfMTZLKTsKKyNlbmRpZiAvKiBpZmRlZiBDT05GSUdfU09DX0lNWDMxICovCisKKyNpZmRlZiBDT05GSUdfU09DX0lNWDM1Citjb25zdCBzdHJ1Y3QgaW14X2lteDJfd2R0X2RhdGEgaW14MzVfaW14Ml93ZHRfZGF0YSBfX2luaXRjb25zdCA9CisJaW14X2lteDJfd2R0X2RhdGFfZW50cnlfc2luZ2xlKE1YMzUsIDAsICwgU1pfMTZLKTsKKyNlbmRpZiAvKiBpZmRlZiBDT05GSUdfU09DX0lNWDM1ICovCisKKyNpZmRlZiBDT05GSUdfU09DX0lNWDUxCitjb25zdCBzdHJ1Y3QgaW14X2lteDJfd2R0X2RhdGEgaW14NTFfaW14Ml93ZHRfZGF0YVtdIF9faW5pdGNvbnN0ID0geworI2RlZmluZSBpbXg1MV9pbXgyX3dkdF9kYXRhX2VudHJ5KF9pZCwgX2h3aWQpCQkJCVwKKwlpbXhfaW14Ml93ZHRfZGF0YV9lbnRyeShNWDUxLCBfaWQsIF9od2lkLCBTWl8xNkspCisJaW14NTFfaW14Ml93ZHRfZGF0YV9lbnRyeSgwLCAxKSwKKwlpbXg1MV9pbXgyX3dkdF9kYXRhX2VudHJ5KDEsIDIpLAorfTsKKyNlbmRpZiAvKiBpZmRlZiBDT05GSUdfU09DX0lNWDUxICovCisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKl9faW5pdCBpbXhfYWRkX2lteDJfd2R0KAorCQljb25zdCBzdHJ1Y3QgaW14X2lteDJfd2R0X2RhdGEgKmRhdGEpCit7CisJc3RydWN0IHJlc291cmNlIHJlc1tdID0geworCQl7CisJCQkuc3RhcnQgPSBkYXRhLT5pb2Jhc2UsCisJCQkuZW5kID0gZGF0YS0+aW9iYXNlICsgZGF0YS0+aW9zaXplIC0gMSwKKwkJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCQl9LAorCX07CisJcmV0dXJuIGlteF9hZGRfcGxhdGZvcm1fZGV2aWNlKCJpbXgyLXdkdCIsIGRhdGEtPmlkLAorCQkJcmVzLCBBUlJBWV9TSVpFKHJlcyksIE5VTEwsIDApOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvZGV2aWNlcy9wbGF0Zm9ybS1pbXgyMS1oY2QuYyBiL2FyY2gvYXJtL3BsYXQtbXhjL2RldmljZXMvcGxhdGZvcm0taW14MjEtaGNkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc3MGE0MgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2RldmljZXMvcGxhdGZvcm0taW14MjEtaGNkLmMKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBQZW5ndXRyb25peAorICogVXdlIEtsZWluZS1Lb2VuaWcgPHUua2xlaW5lLWtvZW5pZ0BwZW5ndXRyb25peC5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgorICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvZGV2aWNlcy1jb21tb24uaD4KKworI2RlZmluZSBpbXhfaW14MjFfaGNkX2RhdGFfZW50cnlfc2luZ2xlKHNvYykJCQkJXAorCXsJCQkJCQkJCVwKKwkJLmlvYmFzZSA9IHNvYyAjIyBfVVNCT1RHX0JBU0VfQUREUiwJCQlcCisJCS5pcnEgPSBzb2MgIyMgX0lOVF9VU0JIT1NULAkJCQlcCisJfQorCisjaWZkZWYgQ09ORklHX1NPQ19JTVgyMQorY29uc3Qgc3RydWN0IGlteF9pbXgyMV9oY2RfZGF0YSBpbXgyMV9pbXgyMV9oY2RfZGF0YSBfX2luaXRjb25zdCA9CisJaW14X2lteDIxX2hjZF9kYXRhX2VudHJ5X3NpbmdsZShNWDIxKTsKKyNlbmRpZiAvKiBpZmRlZiBDT05GSUdfU09DX0lNWDIxICovCisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKl9faW5pdCBpbXhfYWRkX2lteDIxX2hjZCgKKwkJY29uc3Qgc3RydWN0IGlteF9pbXgyMV9oY2RfZGF0YSAqZGF0YSwKKwkJY29uc3Qgc3RydWN0IG14MjFfdXNiaF9wbGF0Zm9ybV9kYXRhICpwZGF0YSkKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgcmVzW10gPSB7CisJCXsKKwkJCS5zdGFydCA9IGRhdGEtPmlvYmFzZSwKKwkJCS5lbmQgPSBkYXRhLT5pb2Jhc2UgKyBTWl84SyAtIDEsCisJCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwkJfSwgeworCQkJLnN0YXJ0ID0gZGF0YS0+aXJxLAorCQkJLmVuZCA9IGRhdGEtPmlycSwKKwkJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCQl9LAorCX07CisJcmV0dXJuIGlteF9hZGRfcGxhdGZvcm1fZGV2aWNlX2RtYW1hc2soImlteDIxLWhjZCIsIDAsCisJCQlyZXMsIEFSUkFZX1NJWkUocmVzKSwKKwkJCXBkYXRhLCBzaXplb2YoKnBkYXRhKSwgRE1BX0JJVF9NQVNLKDMyKSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9kZXZpY2VzL3BsYXRmb3JtLWlteF91ZGMuYyBiL2FyY2gvYXJtL3BsYXQtbXhjL2RldmljZXMvcGxhdGZvcm0taW14X3VkYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmZDY3NWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9kZXZpY2VzL3BsYXRmb3JtLWlteF91ZGMuYwpAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFBlbmd1dHJvbml4CisgKiBVd2UgS2xlaW5lLUtvZW5pZyA8dS5rbGVpbmUta29lbmlnQHBlbmd1dHJvbml4LmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9kZXZpY2VzLWNvbW1vbi5oPgorCisjZGVmaW5lIGlteF9pbXhfdWRjX2RhdGFfZW50cnlfc2luZ2xlKHNvYywgX3NpemUpCQkJXAorCXsJCQkJCQkJCVwKKwkJLmlvYmFzZSA9IHNvYyAjIyBfVVNCRF9CQVNFX0FERFIsCQkJXAorCQkuaW9zaXplID0gX3NpemUsCQkJCQlcCisJCS5pcnEwID0gc29jICMjIF9JTlRfVVNCRDAsCQkJCVwKKwkJLmlycTEgPSBzb2MgIyMgX0lOVF9VU0JEMSwJCQkJXAorCQkuaXJxMiA9IHNvYyAjIyBfSU5UX1VTQkQyLAkJCQlcCisJCS5pcnEzID0gc29jICMjIF9JTlRfVVNCRDMsCQkJCVwKKwkJLmlycTQgPSBzb2MgIyMgX0lOVF9VU0JENCwJCQkJXAorCQkuaXJxNSA9IHNvYyAjIyBfSU5UX1VTQkQ1LAkJCQlcCisJCS5pcnE2ID0gc29jICMjIF9JTlRfVVNCRDYsCQkJCVwKKwl9CisKKyNkZWZpbmUgaW14X2lteF91ZGNfZGF0YV9lbnRyeShzb2MsIF9zaXplKQkJCQlcCisJW19pZF0gPSBpbXhfaW14X3VkY19kYXRhX2VudHJ5X3NpbmdsZShzb2MsIF9zaXplKQorCisjaWZkZWYgQ09ORklHX1NPQ19JTVgxCitjb25zdCBzdHJ1Y3QgaW14X2lteF91ZGNfZGF0YSBpbXgxX2lteF91ZGNfZGF0YSBfX2luaXRjb25zdCA9CisJaW14X2lteF91ZGNfZGF0YV9lbnRyeV9zaW5nbGUoTVgxLCBTWl80Syk7CisjZW5kaWYgLyogaWZkZWYgQ09ORklHX1NPQ19JTVgxICovCisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKl9faW5pdCBpbXhfYWRkX2lteF91ZGMoCisJCWNvbnN0IHN0cnVjdCBpbXhfaW14X3VkY19kYXRhICpkYXRhLAorCQljb25zdCBzdHJ1Y3QgaW14dXNiX3BsYXRmb3JtX2RhdGEgKnBkYXRhKQoreworCXN0cnVjdCByZXNvdXJjZSByZXNbXSA9IHsKKwkJeworCQkJLnN0YXJ0ID0gZGF0YS0+aW9iYXNlLAorCQkJLmVuZCA9IGRhdGEtPmlvYmFzZSArIGRhdGEtPmlvc2l6ZSAtIDEsCisJCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwkJfSwgeworCQkJLnN0YXJ0ID0gZGF0YS0+aXJxMCwKKwkJCS5lbmQgPSBkYXRhLT5pcnEwLAorCQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJCX0sIHsKKwkJCS5zdGFydCA9IGRhdGEtPmlycTEsCisJCQkuZW5kID0gZGF0YS0+aXJxMSwKKwkJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCQl9LCB7CisJCQkuc3RhcnQgPSBkYXRhLT5pcnEyLAorCQkJLmVuZCA9IGRhdGEtPmlycTIsCisJCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwkJfSwgeworCQkJLnN0YXJ0ID0gZGF0YS0+aXJxMywKKwkJCS5lbmQgPSBkYXRhLT5pcnEzLAorCQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJCX0sIHsKKwkJCS5zdGFydCA9IGRhdGEtPmlycTQsCisJCQkuZW5kID0gZGF0YS0+aXJxNCwKKwkJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCQl9LCB7CisJCQkuc3RhcnQgPSBkYXRhLT5pcnE1LAorCQkJLmVuZCA9IGRhdGEtPmlycTUsCisJCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwkJfSwgeworCQkJLnN0YXJ0ID0gZGF0YS0+aXJxNiwKKwkJCS5lbmQgPSBkYXRhLT5pcnE2LAorCQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJCX0sCisJfTsKKworCXJldHVybiBpbXhfYWRkX3BsYXRmb3JtX2RldmljZSgiaW14X3VkYyIsIDAsCisJCQlyZXMsIEFSUkFZX1NJWkUocmVzKSwgcGRhdGEsIHNpemVvZigqcGRhdGEpKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2RldmljZXMvcGxhdGZvcm0taW14ZGlfcnRjLmMgYi9hcmNoL2FybS9wbGF0LW14Yy9kZXZpY2VzL3BsYXRmb3JtLWlteGRpX3J0Yy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwNjUzY2MKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9kZXZpY2VzL3BsYXRmb3JtLWlteGRpX3J0Yy5jCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgUGVuZ3V0cm9uaXgKKyAqIFV3ZSBLbGVpbmUtS29lbmlnIDx1LmtsZWluZS1rb2VuaWdAcGVuZ3V0cm9uaXguZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGFzbS9zaXplcy5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL2RldmljZXMtY29tbW9uLmg+CisKKyNkZWZpbmUgaW14X2lteGRpX3J0Y19kYXRhX2VudHJ5X3NpbmdsZShzb2MpCQkJCVwKKwl7CQkJCQkJCQlcCisJCS5pb2Jhc2UgPSBzb2MgIyMgX0RSWUlDRV9CQVNFX0FERFIsCQkJXAorCQkuaXJxID0gc29jICMjIF9JTlRfRFJZSUNFLAkJCQlcCisJfQorCisjaWZkZWYgQ09ORklHX1NPQ19JTVgyNQorY29uc3Qgc3RydWN0IGlteF9pbXhkaV9ydGNfZGF0YSBpbXgyNV9pbXhkaV9ydGNfZGF0YSBfX2luaXRjb25zdCA9CisJaW14X2lteGRpX3J0Y19kYXRhX2VudHJ5X3NpbmdsZShNWDI1KTsKKyNlbmRpZiAvKiBpZmRlZiBDT05GSUdfU09DX0lNWDI1ICovCisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKl9faW5pdCBpbXhfYWRkX2lteGRpX3J0YygKKwkJY29uc3Qgc3RydWN0IGlteF9pbXhkaV9ydGNfZGF0YSAqZGF0YSkKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgcmVzW10gPSB7CisJCXsKKwkJCS5zdGFydCA9IGRhdGEtPmlvYmFzZSwKKwkJCS5lbmQgPSBkYXRhLT5pb2Jhc2UgKyBTWl8xNkssCisJCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwkJfSwgeworCQkJLnN0YXJ0ID0gZGF0YS0+aXJxLAorCQkJLmVuZCA9IGRhdGEtPmlycSwKKwkJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCQl9LAorCX07CisKKwlyZXR1cm4gaW14X2FkZF9wbGF0Zm9ybV9kZXZpY2UoImlteGRpX3J0YyIsIDAsCisJCQlyZXMsIEFSUkFZX1NJWkUocmVzKSwgTlVMTCwgMCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9kZXZpY2VzL3BsYXRmb3JtLW14MS1jYW1lcmEuYyBiL2FyY2gvYXJtL3BsYXQtbXhjL2RldmljZXMvcGxhdGZvcm0tbXgxLWNhbWVyYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkY2M1ODEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9kZXZpY2VzL3BsYXRmb3JtLW14MS1jYW1lcmEuYwpAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFBlbmd1dHJvbml4CisgKiBVd2UgS2xlaW5lLUtvZW5pZyA8dS5rbGVpbmUta29lbmlnQHBlbmd1dHJvbml4LmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9kZXZpY2VzLWNvbW1vbi5oPgorCisjZGVmaW5lIGlteF9teDFfY2FtZXJhX2RhdGFfZW50cnlfc2luZ2xlKHNvYywgX3NpemUpCQkJXAorCXsJCQkJCQkJCVwKKwkJLmlvYmFzZSA9IHNvYyAjIyBfQ1NJICMjIF9CQVNFX0FERFIsCQkJXAorCQkuaW9zaXplID0gX3NpemUsCQkJCQlcCisJCS5pcnEgPSBzb2MgIyMgX0lOVF9DU0ksCQkJCQlcCisJfQorCisjaWZkZWYgQ09ORklHX1NPQ19JTVgxCitjb25zdCBzdHJ1Y3QgaW14X214MV9jYW1lcmFfZGF0YSBpbXgxX214MV9jYW1lcmFfZGF0YSBfX2luaXRjb25zdCA9CisJaW14X214MV9jYW1lcmFfZGF0YV9lbnRyeV9zaW5nbGUoTVgxLCAxMCk7CisjZW5kaWYgLyogaWZkZWYgQ09ORklHX1NPQ19JTVgxICovCisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKl9faW5pdCBpbXhfYWRkX214MV9jYW1lcmEoCisJCWNvbnN0IHN0cnVjdCBpbXhfbXgxX2NhbWVyYV9kYXRhICpkYXRhLAorCQljb25zdCBzdHJ1Y3QgbXgxX2NhbWVyYV9wZGF0YSAqcGRhdGEpCit7CisJc3RydWN0IHJlc291cmNlIHJlc1tdID0geworCQl7CisJCQkuc3RhcnQgPSBkYXRhLT5pb2Jhc2UsCisJCQkuZW5kID0gZGF0YS0+aW9iYXNlICsgZGF0YS0+aW9zaXplIC0gMSwKKwkJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCQl9LCB7CisJCQkuc3RhcnQgPSBkYXRhLT5pcnEsCisJCQkuZW5kID0gZGF0YS0+aXJxLAorCQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJCX0sCisJfTsKKwlyZXR1cm4gaW14X2FkZF9wbGF0Zm9ybV9kZXZpY2VfZG1hbWFzaygibXgxLWNhbWVyYSIsIDAsCisJCQlyZXMsIEFSUkFZX1NJWkUocmVzKSwKKwkJCXBkYXRhLCBzaXplb2YoKnBkYXRhKSwgRE1BX0JJVF9NQVNLKDMyKSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9kZXZpY2VzL3BsYXRmb3JtLW14Mi1jYW1lcmEuYyBiL2FyY2gvYXJtL3BsYXQtbXhjL2RldmljZXMvcGxhdGZvcm0tbXgyLWNhbWVyYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzZjQ4MjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9kZXZpY2VzL3BsYXRmb3JtLW14Mi1jYW1lcmEuYwpAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFBlbmd1dHJvbml4CisgKiBVd2UgS2xlaW5lLUtvZW5pZyA8dS5rbGVpbmUta29lbmlnQHBlbmd1dHJvbml4LmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9kZXZpY2VzLWNvbW1vbi5oPgorCisjZGVmaW5lIGlteF9teDJfY2FtZXJhX2RhdGFfZW50cnlfc2luZ2xlKHNvYykJCQkJXAorCXsJCQkJCQkJCVwKKwkJLmlvYmFzZWNzaSA9IHNvYyAjIyBfQ1NJX0JBU0VfQUREUiwJCQlcCisJCS5pb3NpemVjc2kgPSBTWl80SywJCQkJCVwKKwkJLmlycWNzaSA9IHNvYyAjIyBfSU5UX0NTSSwJCQkJXAorCX0KKyNkZWZpbmUgaW14X214Ml9jYW1lcmFfZGF0YV9lbnRyeV9zaW5nbGVfZW1tYShzb2MpCQkJXAorCXsJCQkJCQkJCVwKKwkJLmlvYmFzZWNzaSA9IHNvYyAjIyBfQ1NJX0JBU0VfQUREUiwJCQlcCisJCS5pb3NpemVjc2kgPSBTWl8zMiwJCQkJCVwKKwkJLmlycWNzaSA9IHNvYyAjIyBfSU5UX0NTSSwJCQkJXAorCQkuaW9iYXNlZW1tYXBycCA9IHNvYyAjIyBfRU1NQVBSUF9CQVNFX0FERFIsCQlcCisJCS5pb3NpemVlbW1hcHJwID0gU1pfMzIsCQkJCQlcCisJCS5pcnFlbW1hcHJwID0gc29jICMjIF9JTlRfRU1NQVBSUCwJCQlcCisJfQorCisjaWZkZWYgQ09ORklHX1NPQ19JTVgyNQorY29uc3Qgc3RydWN0IGlteF9teDJfY2FtZXJhX2RhdGEgaW14MjVfbXgyX2NhbWVyYV9kYXRhIF9faW5pdGNvbnN0ID0KKwlpbXhfbXgyX2NhbWVyYV9kYXRhX2VudHJ5X3NpbmdsZShNWDI1KTsKKyNlbmRpZiAvKiBpZmRlZiBDT05GSUdfU09DX0lNWDI1ICovCisKKyNpZmRlZiBDT05GSUdfU09DX0lNWDI3Citjb25zdCBzdHJ1Y3QgaW14X214Ml9jYW1lcmFfZGF0YSBpbXgyN19teDJfY2FtZXJhX2RhdGEgX19pbml0Y29uc3QgPQorCWlteF9teDJfY2FtZXJhX2RhdGFfZW50cnlfc2luZ2xlX2VtbWEoTVgyNyk7CisjZW5kaWYgLyogaWZkZWYgQ09ORklHX1NPQ19JTVgyNyAqLworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpfX2luaXQgaW14X2FkZF9teDJfY2FtZXJhKAorCQljb25zdCBzdHJ1Y3QgaW14X214Ml9jYW1lcmFfZGF0YSAqZGF0YSwKKwkJY29uc3Qgc3RydWN0IG14Ml9jYW1lcmFfcGxhdGZvcm1fZGF0YSAqcGRhdGEpCit7CisJc3RydWN0IHJlc291cmNlIHJlc1tdID0geworCQl7CisJCQkuc3RhcnQgPSBkYXRhLT5pb2Jhc2Vjc2ksCisJCQkuZW5kID0gZGF0YS0+aW9iYXNlY3NpICsgZGF0YS0+aW9zaXplY3NpIC0gMSwKKwkJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCQl9LCB7CisJCQkuc3RhcnQgPSBkYXRhLT5pcnFjc2ksCisJCQkuZW5kID0gZGF0YS0+aXJxY3NpLAorCQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJCX0sIHsKKwkJCS5zdGFydCA9IGRhdGEtPmlvYmFzZWVtbWFwcnAsCisJCQkuZW5kID0gZGF0YS0+aW9iYXNlZW1tYXBycCArIGRhdGEtPmlvc2l6ZWVtbWFwcnAgLSAxLAorCQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJCX0sIHsKKwkJCS5zdGFydCA9IGRhdGEtPmlycWVtbWFwcnAsCisJCQkuZW5kID0gZGF0YS0+aXJxZW1tYXBycCwKKwkJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCQl9LAorCX07CisJcmV0dXJuIGlteF9hZGRfcGxhdGZvcm1fZGV2aWNlX2RtYW1hc2soIm14Mi1jYW1lcmEiLCAwLAorCQkJcmVzLCBkYXRhLT5pb2Jhc2VlbW1hcHJwID8gNCA6IDIsCisJCQlwZGF0YSwgc2l6ZW9mKCpwZGF0YSksIERNQV9CSVRfTUFTSygzMikpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvZGV2aWNlcy9wbGF0Zm9ybS1teGMtZWhjaS5jIGIvYXJjaC9hcm0vcGxhdC1teGMvZGV2aWNlcy9wbGF0Zm9ybS1teGMtZWhjaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjNDg4ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9kZXZpY2VzL3BsYXRmb3JtLW14Yy1laGNpLmMKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBQZW5ndXRyb25peAorICogVXdlIEtsZWluZS1Lb2VuaWcgPHUua2xlaW5lLWtvZW5pZ0BwZW5ndXRyb25peC5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgorICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvZGV2aWNlcy1jb21tb24uaD4KKworI2RlZmluZSBpbXhfbXhjX2VoY2lfZGF0YV9lbnRyeV9zaW5nbGUoc29jLCBfaWQsIGhzKQkJCVwKKwl7CQkJCQkJCQlcCisJCS5pZCA9IF9pZCwJCQkJCQlcCisJCS5pb2Jhc2UgPSBzb2MgIyMgX1VTQl8gIyMgaHMgIyMgX0JBU0VfQUREUiwJCVwKKwkJLmlycSA9IHNvYyAjIyBfSU5UX1VTQl8gIyMgaHMsCQkJCVwKKwl9CisKKyNpZmRlZiBDT05GSUdfU09DX0lNWDI1Citjb25zdCBzdHJ1Y3QgaW14X214Y19laGNpX2RhdGEgaW14MjVfbXhjX2VoY2lfb3RnX2RhdGEgX19pbml0Y29uc3QgPQorCWlteF9teGNfZWhjaV9kYXRhX2VudHJ5X3NpbmdsZShNWDI1LCAwLCBPVEcpOworY29uc3Qgc3RydWN0IGlteF9teGNfZWhjaV9kYXRhIGlteDI1X214Y19laGNpX2hzX2RhdGEgX19pbml0Y29uc3QgPQorCWlteF9teGNfZWhjaV9kYXRhX2VudHJ5X3NpbmdsZShNWDI1LCAxLCBIUyk7CisjZW5kaWYgLyogaWZkZWYgQ09ORklHX1NPQ19JTVgyNSAqLworCisjaWZkZWYgQ09ORklHX1NPQ19JTVgyNworY29uc3Qgc3RydWN0IGlteF9teGNfZWhjaV9kYXRhIGlteDI3X214Y19laGNpX290Z19kYXRhIF9faW5pdGNvbnN0ID0KKwlpbXhfbXhjX2VoY2lfZGF0YV9lbnRyeV9zaW5nbGUoTVgyNywgMCwgT1RHKTsKK2NvbnN0IHN0cnVjdCBpbXhfbXhjX2VoY2lfZGF0YSBpbXgyN19teGNfZWhjaV9oc19kYXRhW10gX19pbml0Y29uc3QgPSB7CisJaW14X214Y19laGNpX2RhdGFfZW50cnlfc2luZ2xlKE1YMjcsIDEsIEhTMSksCisJaW14X214Y19laGNpX2RhdGFfZW50cnlfc2luZ2xlKE1YMjcsIDIsIEhTMiksCit9OworI2VuZGlmIC8qIGlmZGVmIENPTkZJR19TT0NfSU1YMjcgKi8KKworI2lmZGVmIENPTkZJR19TT0NfSU1YMzEKK2NvbnN0IHN0cnVjdCBpbXhfbXhjX2VoY2lfZGF0YSBpbXgzMV9teGNfZWhjaV9vdGdfZGF0YSBfX2luaXRjb25zdCA9CisJaW14X214Y19laGNpX2RhdGFfZW50cnlfc2luZ2xlKE1YMzEsIDAsIE9URyk7Citjb25zdCBzdHJ1Y3QgaW14X214Y19laGNpX2RhdGEgaW14MzFfbXhjX2VoY2lfaHNfZGF0YVtdIF9faW5pdGNvbnN0ID0geworCWlteF9teGNfZWhjaV9kYXRhX2VudHJ5X3NpbmdsZShNWDMxLCAxLCBIUzEpLAorCWlteF9teGNfZWhjaV9kYXRhX2VudHJ5X3NpbmdsZShNWDMxLCAyLCBIUzIpLAorfTsKKyNlbmRpZiAvKiBpZmRlZiBDT05GSUdfU09DX0lNWDMxICovCisKKyNpZmRlZiBDT05GSUdfU09DX0lNWDM1Citjb25zdCBzdHJ1Y3QgaW14X214Y19laGNpX2RhdGEgaW14MzVfbXhjX2VoY2lfb3RnX2RhdGEgX19pbml0Y29uc3QgPQorCWlteF9teGNfZWhjaV9kYXRhX2VudHJ5X3NpbmdsZShNWDM1LCAwLCBPVEcpOworY29uc3Qgc3RydWN0IGlteF9teGNfZWhjaV9kYXRhIGlteDM1X214Y19laGNpX2hzX2RhdGEgX19pbml0Y29uc3QgPQorCWlteF9teGNfZWhjaV9kYXRhX2VudHJ5X3NpbmdsZShNWDM1LCAxLCBIUyk7CisjZW5kaWYgLyogaWZkZWYgQ09ORklHX1NPQ19JTVgzNSAqLworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpfX2luaXQgaW14X2FkZF9teGNfZWhjaSgKKwkJY29uc3Qgc3RydWN0IGlteF9teGNfZWhjaV9kYXRhICpkYXRhLAorCQljb25zdCBzdHJ1Y3QgbXhjX3VzYmhfcGxhdGZvcm1fZGF0YSAqcGRhdGEpCit7CisJc3RydWN0IHJlc291cmNlIHJlc1tdID0geworCQl7CisJCQkuc3RhcnQgPSBkYXRhLT5pb2Jhc2UsCisJCQkuZW5kID0gZGF0YS0+aW9iYXNlICsgU1pfNTEyIC0gMSwKKwkJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCQl9LCB7CisJCQkuc3RhcnQgPSBkYXRhLT5pcnEsCisJCQkuZW5kID0gZGF0YS0+aXJxLAorCQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJCX0sCisJfTsKKwlyZXR1cm4gaW14X2FkZF9wbGF0Zm9ybV9kZXZpY2VfZG1hbWFzaygibXhjLWVoY2kiLCBkYXRhLT5pZCwKKwkJCXJlcywgQVJSQVlfU0laRShyZXMpLAorCQkJcGRhdGEsIHNpemVvZigqcGRhdGEpLCBETUFfQklUX01BU0soMzIpKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2RldmljZXMvcGxhdGZvcm0tbXhjLW1tYy5jIGIvYXJjaC9hcm0vcGxhdC1teGMvZGV2aWNlcy9wbGF0Zm9ybS1teGMtbW1jLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTBkNzYyZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2RldmljZXMvcGxhdGZvcm0tbXhjLW1tYy5jCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgUGVuZ3V0cm9uaXgKKyAqIFV3ZSBLbGVpbmUtS29lbmlnIDx1LmtsZWluZS1rb2VuaWdAcGVuZ3V0cm9uaXguZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL2RldmljZXMtY29tbW9uLmg+CisKKyNkZWZpbmUgaW14X214Y19tbWNfZGF0YV9lbnRyeV9zaW5nbGUoc29jLCBfaWQsIF9od2lkLCBfc2l6ZSkJCVwKKwl7CQkJCQkJCQlcCisJCS5pZCA9IF9pZCwJCQkJCQlcCisJCS5pb2Jhc2UgPSBzb2MgIyMgX1NESEMgIyMgX2h3aWQgIyMgX0JBU0VfQUREUiwJCVwKKwkJLmlvc2l6ZSA9IF9zaXplLAkJCQkJXAorCQkuaXJxID0gc29jICMjIF9JTlRfU0RIQyAjIyBfaHdpZCwJCQlcCisJCS5kbWFyZXEgPSBzb2MgIyMgX0RNQV9SRVFfU0RIQyAjIyBfaHdpZCwJCVwKKwl9CisjZGVmaW5lIGlteF9teGNfbW1jX2RhdGFfZW50cnkoc29jLCBfaWQsIF9od2lkLCBfc2l6ZSkJCQlcCisJW19pZF0gPSBpbXhfbXhjX21tY19kYXRhX2VudHJ5X3NpbmdsZShzb2MsIF9pZCwgX2h3aWQsIF9zaXplKQorCisjaWZkZWYgQ09ORklHX1NPQ19JTVgyMQorY29uc3Qgc3RydWN0IGlteF9teGNfbW1jX2RhdGEgaW14MjFfbXhjX21tY19kYXRhW10gX19pbml0Y29uc3QgPSB7CisjZGVmaW5lIGlteDIxX214Y19tbWNfZGF0YV9lbnRyeShfaWQsIF9od2lkKQkJCQlcCisJaW14X214Y19tbWNfZGF0YV9lbnRyeShNWDIxLCBfaWQsIF9od2lkLCBTWl80SykKKwlpbXgyMV9teGNfbW1jX2RhdGFfZW50cnkoMCwgMSksCisJaW14MjFfbXhjX21tY19kYXRhX2VudHJ5KDEsIDIpLAorfTsKKyNlbmRpZiAvKiBpZmRlZiBDT05GSUdfU09DX0lNWDIxICovCisKKyNpZmRlZiBDT05GSUdfU09DX0lNWDI3Citjb25zdCBzdHJ1Y3QgaW14X214Y19tbWNfZGF0YSBpbXgyN19teGNfbW1jX2RhdGFbXSBfX2luaXRjb25zdCA9IHsKKyNkZWZpbmUgaW14MjdfbXhjX21tY19kYXRhX2VudHJ5KF9pZCwgX2h3aWQpCQkJCVwKKwlpbXhfbXhjX21tY19kYXRhX2VudHJ5KE1YMjcsIF9pZCwgX2h3aWQsIFNaXzRLKQorCWlteDI3X214Y19tbWNfZGF0YV9lbnRyeSgwLCAxKSwKKwlpbXgyN19teGNfbW1jX2RhdGFfZW50cnkoMSwgMiksCit9OworI2VuZGlmIC8qIGlmZGVmIENPTkZJR19TT0NfSU1YMjcgKi8KKworI2lmZGVmIENPTkZJR19TT0NfSU1YMzEKK2NvbnN0IHN0cnVjdCBpbXhfbXhjX21tY19kYXRhIGlteDMxX214Y19tbWNfZGF0YVtdIF9faW5pdGNvbnN0ID0geworI2RlZmluZSBpbXgzMV9teGNfbW1jX2RhdGFfZW50cnkoX2lkLCBfaHdpZCkJCQkJXAorCWlteF9teGNfbW1jX2RhdGFfZW50cnkoTVgzMSwgX2lkLCBfaHdpZCwgU1pfMTZLKQorCWlteDMxX214Y19tbWNfZGF0YV9lbnRyeSgwLCAxKSwKKwlpbXgzMV9teGNfbW1jX2RhdGFfZW50cnkoMSwgMiksCit9OworI2VuZGlmIC8qIGlmZGVmIENPTkZJR19TT0NfSU1YMzEgKi8KKworc3RydWN0IHBsYXRmb3JtX2RldmljZSAqX19pbml0IGlteF9hZGRfbXhjX21tYygKKwkJY29uc3Qgc3RydWN0IGlteF9teGNfbW1jX2RhdGEgKmRhdGEsCisJCWNvbnN0IHN0cnVjdCBpbXhtbWNfcGxhdGZvcm1fZGF0YSAqcGRhdGEpCit7CisJc3RydWN0IHJlc291cmNlIHJlc1tdID0geworCQl7CisJCQkuc3RhcnQgPSBkYXRhLT5pb2Jhc2UsCisJCQkuZW5kID0gZGF0YS0+aW9iYXNlICsgU1pfNEsgLSAxLAorCQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJCX0sIHsKKwkJCS5zdGFydCA9IGRhdGEtPmlycSwKKwkJCS5lbmQgPSBkYXRhLT5pcnEsCisJCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwkJfSwgeworCQkJLnN0YXJ0ID0gZGF0YS0+ZG1hcmVxLAorCQkJLmVuZCA9IGRhdGEtPmRtYXJlcSwKKwkJCS5mbGFncyA9IElPUkVTT1VSQ0VfRE1BLAorCQl9LAorCX07CisJcmV0dXJuIGlteF9hZGRfcGxhdGZvcm1fZGV2aWNlX2RtYW1hc2soIm14Yy1tbWMiLCBkYXRhLT5pZCwKKwkJCXJlcywgQVJSQVlfU0laRShyZXMpLAorCQkJcGRhdGEsIHNpemVvZigqcGRhdGEpLCBETUFfQklUX01BU0soMzIpKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2RldmljZXMvcGxhdGZvcm0tbXhjX25hbmQuYyBiL2FyY2gvYXJtL3BsYXQtbXhjL2RldmljZXMvcGxhdGZvcm0tbXhjX25hbmQuYwppbmRleCAzZmRjYzMyLi4xNTY4ZjM5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9kZXZpY2VzL3BsYXRmb3JtLW14Y19uYW5kLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvZGV2aWNlcy9wbGF0Zm9ybS1teGNfbmFuZC5jCkBAIC0zMSwyNyArMzEsMjcgQEAKIAlpbXhfbXhjX25hbmRfZGF0YV9lbnRyeV9zaW5nbGUoTVgyMSwgU1pfNEspOwogI2VuZGlmIC8qIGlmZGVmIENPTkZJR19TT0NfSU1YMjEgKi8KIAotI2lmZGVmIENPTkZJR19BUkNIX01YMjUKKyNpZmRlZiBDT05GSUdfU09DX0lNWDI1CiBjb25zdCBzdHJ1Y3QgaW14X214Y19uYW5kX2RhdGEgaW14MjVfbXhjX25hbmRfZGF0YSBfX2luaXRjb25zdCA9CiAJaW14X214Y19uYW5kX2RhdGFfZW50cnlfc2luZ2xlKE1YMjUsIFNaXzhLKTsKLSNlbmRpZiAvKiBpZmRlZiBDT05GSUdfQVJDSF9NWDI1ICovCisjZW5kaWYgLyogaWZkZWYgQ09ORklHX1NPQ19JTVgyNSAqLwogCiAjaWZkZWYgQ09ORklHX1NPQ19JTVgyNwogY29uc3Qgc3RydWN0IGlteF9teGNfbmFuZF9kYXRhIGlteDI3X214Y19uYW5kX2RhdGEgX19pbml0Y29uc3QgPQogCWlteF9teGNfbmFuZF9kYXRhX2VudHJ5X3NpbmdsZShNWDI3LCBTWl80Syk7CiAjZW5kaWYgLyogaWZkZWYgQ09ORklHX1NPQ19JTVgyNyAqLwogCi0jaWZkZWYgQ09ORklHX0FSQ0hfTVgzMQorI2lmZGVmIENPTkZJR19TT0NfSU1YMzEKIGNvbnN0IHN0cnVjdCBpbXhfbXhjX25hbmRfZGF0YSBpbXgzMV9teGNfbmFuZF9kYXRhIF9faW5pdGNvbnN0ID0KIAlpbXhfbXhjX25hbmRfZGF0YV9lbnRyeV9zaW5nbGUoTVgzMSwgU1pfNEspOwogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfQVJDSF9NWDM1CisjaWZkZWYgQ09ORklHX1NPQ19JTVgzNQogY29uc3Qgc3RydWN0IGlteF9teGNfbmFuZF9kYXRhIGlteDM1X214Y19uYW5kX2RhdGEgX19pbml0Y29uc3QgPQogCWlteF9teGNfbmFuZF9kYXRhX2VudHJ5X3NpbmdsZShNWDM1LCBTWl84Syk7CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19BUkNIX01YNTEKKyNpZmRlZiBDT05GSUdfU09DX0lNWDUxCiBjb25zdCBzdHJ1Y3QgaW14X214Y19uYW5kX2RhdGEgaW14NTFfbXhjX25hbmRfZGF0YSBfX2luaXRjb25zdCA9CiAJaW14X214Y19uYW5kdjNfZGF0YV9lbnRyeV9zaW5nbGUoTVg1MSwgU1pfMTZLKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvZGV2aWNlcy9wbGF0Zm9ybS1teGNfcHdtLmMgYi9hcmNoL2FybS9wbGF0LW14Yy9kZXZpY2VzL3BsYXRmb3JtLW14Y19wd20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDhlYmRiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvZGV2aWNlcy9wbGF0Zm9ybS1teGNfcHdtLmMKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFBlbmd1dHJvbml4CisgKiBVd2UgS2xlaW5lLUtvZW5pZyA8dS5rbGVpbmUta29lbmlnQHBlbmd1dHJvbml4LmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9kZXZpY2VzLWNvbW1vbi5oPgorCisjZGVmaW5lIGlteF9teGNfcHdtX2RhdGFfZW50cnlfc2luZ2xlKHNvYywgX2lkLCBfaHdpZCwgX3NpemUpCQlcCisJewkJCQkJCQkJXAorCQkuaWQgPSBfaWQsCQkJCQkJXAorCQkuaW9iYXNlID0gc29jICMjIF9QV00gIyMgX2h3aWQgIyMgX0JBU0VfQUREUiwJCVwKKwkJLmlvc2l6ZSA9IF9zaXplLAkJCQkJXAorCQkuaXJxID0gc29jICMjIF9JTlRfUFdNICMjIF9od2lkLAkJCVwKKwl9CisjZGVmaW5lIGlteF9teGNfcHdtX2RhdGFfZW50cnkoc29jLCBfaWQsIF9od2lkLCBfc2l6ZSkJCQlcCisJW19pZF0gPSBpbXhfbXhjX3B3bV9kYXRhX2VudHJ5X3NpbmdsZShzb2MsIF9pZCwgX2h3aWQsIF9zaXplKQorCisjaWZkZWYgQ09ORklHX1NPQ19JTVgyMQorY29uc3Qgc3RydWN0IGlteF9teGNfcHdtX2RhdGEgaW14MjFfbXhjX3B3bV9kYXRhIF9faW5pdGNvbnN0ID0KKwlpbXhfbXhjX3B3bV9kYXRhX2VudHJ5X3NpbmdsZShNWDIxLCAwLCAsIFNaXzRLKTsKKyNlbmRpZiAvKiBpZmRlZiBDT05GSUdfU09DX0lNWDIxICovCisKKyNpZmRlZiBDT05GSUdfU09DX0lNWDI1Citjb25zdCBzdHJ1Y3QgaW14X214Y19wd21fZGF0YSBpbXgyNV9teGNfcHdtX2RhdGFbXSBfX2luaXRjb25zdCA9IHsKKyNkZWZpbmUgaW14MjVfbXhjX3B3bV9kYXRhX2VudHJ5KF9pZCwgX2h3aWQpCQkJCVwKKwlpbXhfbXhjX3B3bV9kYXRhX2VudHJ5KE1YMjUsIF9pZCwgX2h3aWQsIFNaXzE2SykKKwlpbXgyNV9teGNfcHdtX2RhdGFfZW50cnkoMCwgMSksCisJaW14MjVfbXhjX3B3bV9kYXRhX2VudHJ5KDEsIDIpLAorCWlteDI1X214Y19wd21fZGF0YV9lbnRyeSgyLCAzKSwKKwlpbXgyNV9teGNfcHdtX2RhdGFfZW50cnkoMywgNCksCit9OworI2VuZGlmIC8qIGlmZGVmIENPTkZJR19TT0NfSU1YMjUgKi8KKworI2lmZGVmIENPTkZJR19TT0NfSU1YMjcKK2NvbnN0IHN0cnVjdCBpbXhfbXhjX3B3bV9kYXRhIGlteDI3X214Y19wd21fZGF0YSBfX2luaXRjb25zdCA9CisJaW14X214Y19wd21fZGF0YV9lbnRyeV9zaW5nbGUoTVgyNywgMCwgLCBTWl80Syk7CisjZW5kaWYgLyogaWZkZWYgQ09ORklHX1NPQ19JTVgyNyAqLworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpfX2luaXQgaW14X2FkZF9teGNfcHdtKAorCQljb25zdCBzdHJ1Y3QgaW14X214Y19wd21fZGF0YSAqZGF0YSkKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgcmVzW10gPSB7CisJCXsKKwkJCS5zdGFydCA9IGRhdGEtPmlvYmFzZSwKKwkJCS5lbmQgPSBkYXRhLT5pb2Jhc2UgKyBkYXRhLT5pb3NpemUgLSAxLAorCQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJCX0sIHsKKwkJCS5zdGFydCA9IGRhdGEtPmlycSwKKwkJCS5lbmQgPSBkYXRhLT5pcnEsCisJCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwkJfSwKKwl9OworCisJcmV0dXJuIGlteF9hZGRfcGxhdGZvcm1fZGV2aWNlKCJteGNfcHdtIiwgZGF0YS0+aWQsCisJCQlyZXMsIEFSUkFZX1NJWkUocmVzKSwgTlVMTCwgMCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9kZXZpY2VzL3BsYXRmb3JtLW14Y19ybmdhLmMgYi9hcmNoL2FybS9wbGF0LW14Yy9kZXZpY2VzL3BsYXRmb3JtLW14Y19ybmdhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRiNzYxMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2RldmljZXMvcGxhdGZvcm0tbXhjX3JuZ2EuYwpAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFBlbmd1dHJvbml4CisgKiBVd2UgS2xlaW5lLUtvZW5pZyA8dS5rbGVpbmUta29lbmlnQHBlbmd1dHJvbml4LmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9kZXZpY2VzLWNvbW1vbi5oPgorCitzdHJ1Y3QgaW14X214Y19ybmdhX2RhdGEgeworCXJlc291cmNlX3NpemVfdCBpb2Jhc2U7Cit9OworCisjZGVmaW5lIGlteF9teGNfcm5nYV9kYXRhX2VudHJ5X3NpbmdsZShzb2MpCQkJCVwKKwl7CQkJCQkJCQlcCisJCS5pb2Jhc2UgPSBzb2MgIyMgX1JOR0FfQkFTRV9BRERSLAkJCVwKKwl9CisKKyNpZmRlZiBDT05GSUdfU09DX0lNWDMxCitzdGF0aWMgY29uc3Qgc3RydWN0IGlteF9teGNfcm5nYV9kYXRhIGlteDMxX214Y19ybmdhX2RhdGEgX19pbml0Y29uc3QgPQorCWlteF9teGNfcm5nYV9kYXRhX2VudHJ5X3NpbmdsZShNWDMxKTsKKyNlbmRpZiAvKiBpZmRlZiBDT05GSUdfU09DX0lNWDMxICovCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpfX2luaXQgaW14X2FkZF9teGNfcm5nYSgKKwkJY29uc3Qgc3RydWN0IGlteF9teGNfcm5nYV9kYXRhICpkYXRhKQoreworCXN0cnVjdCByZXNvdXJjZSByZXNbXSA9IHsKKwkJeworCQkJLnN0YXJ0ID0gZGF0YS0+aW9iYXNlLAorCQkJLmVuZCA9IGRhdGEtPmlvYmFzZSArIFNaXzE2SyAtIDEsCisJCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwkJfSwKKwl9OworCXJldHVybiBpbXhfYWRkX3BsYXRmb3JtX2RldmljZSgibXhjX3JuZ2EiLCAtMSwKKwkJCXJlcywgQVJSQVlfU0laRShyZXMpLCBOVUxMLCAwKTsKK30KKworc3RhdGljIGludCBfX2luaXQgaW14WFhfYWRkX214Y19ybmdhKHZvaWQpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcmV0OworCisjaWYgZGVmaW5lZChDT05GSUdfU09DX0lNWDMxKQorCWlmIChjcHVfaXNfbXgzMSgpKQorCQlyZXQgPSBpbXhfYWRkX214Y19ybmdhKCZpbXgzMV9teGNfcm5nYV9kYXRhKTsKKwllbHNlCisjZW5kaWYgLyogaWYgZGVmaW5lZChDT05GSUdfU09DX0lNWDMxKSAqLworCQlyZXQgPSBFUlJfUFRSKC1FTk9ERVYpOworCisJaWYgKElTX0VSUihyZXQpKQorCQlyZXR1cm4gUFRSX0VSUihyZXQpOworCisJcmV0dXJuIDA7Cit9CithcmNoX2luaXRjYWxsKGlteFhYX2FkZF9teGNfcm5nYSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9kZXZpY2VzL3BsYXRmb3JtLW14Y193MS5jIGIvYXJjaC9hcm0vcGxhdC1teGMvZGV2aWNlcy9wbGF0Zm9ybS1teGNfdzEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmZhNWVhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvZGV2aWNlcy9wbGF0Zm9ybS1teGNfdzEuYwpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFBlbmd1dHJvbml4CisgKiBVd2UgS2xlaW5lLUtvZW5pZyA8dS5rbGVpbmUta29lbmlnQHBlbmd1dHJvbml4LmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9kZXZpY2VzLWNvbW1vbi5oPgorCisjZGVmaW5lIGlteF9teGNfdzFfZGF0YV9lbnRyeV9zaW5nbGUoc29jKQkJCQlcCisJewkJCQkJCQkJXAorCQkuaW9iYXNlID0gc29jICMjIF9PV0lSRV9CQVNFX0FERFIsCQkJXAorCX0KKworI2lmZGVmIENPTkZJR19TT0NfSU1YMjEKK2NvbnN0IHN0cnVjdCBpbXhfbXhjX3cxX2RhdGEgaW14MjFfbXhjX3cxX2RhdGEgX19pbml0Y29uc3QgPQorCWlteF9teGNfdzFfZGF0YV9lbnRyeV9zaW5nbGUoTVgyMSk7CisjZW5kaWYgLyogaWZkZWYgQ09ORklHX1NPQ19JTVgyMSAqLworCisjaWZkZWYgQ09ORklHX1NPQ19JTVgyNworY29uc3Qgc3RydWN0IGlteF9teGNfdzFfZGF0YSBpbXgyN19teGNfdzFfZGF0YSBfX2luaXRjb25zdCA9CisJaW14X214Y193MV9kYXRhX2VudHJ5X3NpbmdsZShNWDI3KTsKKyNlbmRpZiAvKiBpZmRlZiBDT05GSUdfU09DX0lNWDI3ICovCisKKyNpZmRlZiBDT05GSUdfU09DX0lNWDMxCitjb25zdCBzdHJ1Y3QgaW14X214Y193MV9kYXRhIGlteDMxX214Y193MV9kYXRhIF9faW5pdGNvbnN0ID0KKwlpbXhfbXhjX3cxX2RhdGFfZW50cnlfc2luZ2xlKE1YMzEpOworI2VuZGlmIC8qIGlmZGVmIENPTkZJR19TT0NfSU1YMzEgKi8KKworI2lmZGVmIENPTkZJR19TT0NfSU1YMzUKK2NvbnN0IHN0cnVjdCBpbXhfbXhjX3cxX2RhdGEgaW14MzVfbXhjX3cxX2RhdGEgX19pbml0Y29uc3QgPQorCWlteF9teGNfdzFfZGF0YV9lbnRyeV9zaW5nbGUoTVgzNSk7CisjZW5kaWYgLyogaWZkZWYgQ09ORklHX1NPQ19JTVgzNSAqLworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpfX2luaXQgaW14X2FkZF9teGNfdzEoCisJCWNvbnN0IHN0cnVjdCBpbXhfbXhjX3cxX2RhdGEgKmRhdGEpCit7CisJc3RydWN0IHJlc291cmNlIHJlc1tdID0geworCQl7CisJCQkuc3RhcnQgPSBkYXRhLT5pb2Jhc2UsCisJCQkuZW5kID0gZGF0YS0+aW9iYXNlICsgU1pfNEsgLSAxLAorCQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJCX0sCisJfTsKKworCXJldHVybiBpbXhfYWRkX3BsYXRmb3JtX2RldmljZSgibXhjX3cxIiwgMCwKKwkJCXJlcywgQVJSQVlfU0laRShyZXMpLCBOVUxMLCAwKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2RldmljZXMvcGxhdGZvcm0tc2RoY2ktZXNkaGMtaW14LmMgYi9hcmNoL2FybS9wbGF0LW14Yy9kZXZpY2VzL3BsYXRmb3JtLXNkaGNpLWVzZGhjLWlteC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzNTI1NjQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9kZXZpY2VzL3BsYXRmb3JtLXNkaGNpLWVzZGhjLWlteC5jCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgUGVuZ3V0cm9uaXgsIFdvbGZyYW0gU2FuZyA8dy5zYW5nQHBlbmd1dHJvbml4LmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL2RldmljZXMtY29tbW9uLmg+CisjaW5jbHVkZSA8bWFjaC9lc2RoYy5oPgorCisjZGVmaW5lIGlteF9zZGhjaV9lc2RoY19pbXhfZGF0YV9lbnRyeV9zaW5nbGUoc29jLCBfaWQsIGh3aWQpIFwKKwl7CQkJCQkJCQlcCisJCS5pZCA9IF9pZCwJCQkJCQlcCisJCS5pb2Jhc2UgPSBzb2MgIyMgX0VTREhDICMjIGh3aWQgIyMgX0JBU0VfQUREUiwJXAorCQkuaXJxID0gc29jICMjIF9JTlRfRVNESEMgIyMgaHdpZCwJCQlcCisJfQorCisjZGVmaW5lIGlteF9zZGhjaV9lc2RoY19pbXhfZGF0YV9lbnRyeShzb2MsIGlkLCBod2lkKQlcCisJW2lkXSA9IGlteF9zZGhjaV9lc2RoY19pbXhfZGF0YV9lbnRyeV9zaW5nbGUoc29jLCBpZCwgaHdpZCkKKworI2lmZGVmIENPTkZJR19TT0NfSU1YMjUKK2NvbnN0IHN0cnVjdCBpbXhfc2RoY2lfZXNkaGNfaW14X2RhdGEKK2lteDI1X3NkaGNpX2VzZGhjX2lteF9kYXRhW10gX19pbml0Y29uc3QgPSB7CisjZGVmaW5lIGlteDI1X3NkaGNpX2VzZGhjX2lteF9kYXRhX2VudHJ5KF9pZCwgX2h3aWQpCQkJXAorCWlteF9zZGhjaV9lc2RoY19pbXhfZGF0YV9lbnRyeShNWDI1LCBfaWQsIF9od2lkKQorCWlteDI1X3NkaGNpX2VzZGhjX2lteF9kYXRhX2VudHJ5KDAsIDEpLAorCWlteDI1X3NkaGNpX2VzZGhjX2lteF9kYXRhX2VudHJ5KDEsIDIpLAorfTsKKyNlbmRpZiAvKiBpZmRlZiBDT05GSUdfU09DX0lNWDI1ICovCisKKyNpZmRlZiBDT05GSUdfU09DX0lNWDM1Citjb25zdCBzdHJ1Y3QgaW14X3NkaGNpX2VzZGhjX2lteF9kYXRhCitpbXgzNV9zZGhjaV9lc2RoY19pbXhfZGF0YVtdIF9faW5pdGNvbnN0ID0geworI2RlZmluZSBpbXgzNV9zZGhjaV9lc2RoY19pbXhfZGF0YV9lbnRyeShfaWQsIF9od2lkKQkJCVwKKwlpbXhfc2RoY2lfZXNkaGNfaW14X2RhdGFfZW50cnkoTVgzNSwgX2lkLCBfaHdpZCkKKwlpbXgzNV9zZGhjaV9lc2RoY19pbXhfZGF0YV9lbnRyeSgwLCAxKSwKKwlpbXgzNV9zZGhjaV9lc2RoY19pbXhfZGF0YV9lbnRyeSgxLCAyKSwKKwlpbXgzNV9zZGhjaV9lc2RoY19pbXhfZGF0YV9lbnRyeSgyLCAzKSwKK307CisjZW5kaWYgLyogaWZkZWYgQ09ORklHX1NPQ19JTVgzNSAqLworCisjaWZkZWYgQ09ORklHX1NPQ19JTVg1MQorY29uc3Qgc3RydWN0IGlteF9zZGhjaV9lc2RoY19pbXhfZGF0YQoraW14NTFfc2RoY2lfZXNkaGNfaW14X2RhdGFbXSBfX2luaXRjb25zdCA9IHsKKyNkZWZpbmUgaW14NTFfc2RoY2lfZXNkaGNfaW14X2RhdGFfZW50cnkoX2lkLCBfaHdpZCkJCQlcCisJaW14X3NkaGNpX2VzZGhjX2lteF9kYXRhX2VudHJ5KE1YNTEsIF9pZCwgX2h3aWQpCisJaW14NTFfc2RoY2lfZXNkaGNfaW14X2RhdGFfZW50cnkoMCwgMSksCisJaW14NTFfc2RoY2lfZXNkaGNfaW14X2RhdGFfZW50cnkoMSwgMiksCisJaW14NTFfc2RoY2lfZXNkaGNfaW14X2RhdGFfZW50cnkoMiwgMyksCisJaW14NTFfc2RoY2lfZXNkaGNfaW14X2RhdGFfZW50cnkoMywgNCksCit9OworI2VuZGlmIC8qIGlmZGVmIENPTkZJR19TT0NfSU1YNTEgKi8KKworc3RydWN0IHBsYXRmb3JtX2RldmljZSAqX19pbml0IGlteF9hZGRfc2RoY2lfZXNkaGNfaW14KAorCQljb25zdCBzdHJ1Y3QgaW14X3NkaGNpX2VzZGhjX2lteF9kYXRhICpkYXRhLAorCQljb25zdCBzdHJ1Y3QgZXNkaGNfcGxhdGZvcm1fZGF0YSAqcGRhdGEpCit7CisJc3RydWN0IHJlc291cmNlIHJlc1tdID0geworCQl7CisJCQkuc3RhcnQgPSBkYXRhLT5pb2Jhc2UsCisJCQkuZW5kID0gZGF0YS0+aW9iYXNlICsgU1pfMTZLIC0gMSwKKwkJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCQl9LCB7CisJCQkuc3RhcnQgPSBkYXRhLT5pcnEsCisJCQkuZW5kID0gZGF0YS0+aXJxLAorCQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJCX0sCisJfTsKKworCXJldHVybiBpbXhfYWRkX3BsYXRmb3JtX2RldmljZSgic2RoY2ktZXNkaGMtaW14IiwgZGF0YS0+aWQsIHJlcywKKwkJCUFSUkFZX1NJWkUocmVzKSwgcGRhdGEsIHNpemVvZigqcGRhdGEpKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2RldmljZXMvcGxhdGZvcm0tc3BpX2lteC5jIGIvYXJjaC9hcm0vcGxhdC1teGMvZGV2aWNlcy9wbGF0Zm9ybS1zcGlfaW14LmMKaW5kZXggMTdmNzI0Yy4uOGVhNDlhZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvZGV2aWNlcy9wbGF0Zm9ybS1zcGlfaW14LmMKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvZGV2aWNlcy9wbGF0Zm9ybS1zcGlfaW14LmMKQEAgLTMwLDcgKzMwLDcgQEAKIH07CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19BUkNIX01YMjUKKyNpZmRlZiBDT05GSUdfU09DX0lNWDI1CiBjb25zdCBzdHJ1Y3QgaW14X3NwaV9pbXhfZGF0YSBpbXgyNV9jc3BpX2RhdGFbXSBfX2luaXRjb25zdCA9IHsKICNkZWZpbmUgaW14MjVfY3NwaV9kYXRhX2VudHJ5KF9pZCwgX2h3aWQpCQkJCVwKIAlpbXhfc3BpX2lteF9kYXRhX2VudHJ5KE1YMjUsIENTUEksICJpbXgyNS1jc3BpIiwgX2lkLCBfaHdpZCwgU1pfMTZLKQpAQCAtMzgsNyArMzgsNyBAQAogCWlteDI1X2NzcGlfZGF0YV9lbnRyeSgxLCAyKSwKIAlpbXgyNV9jc3BpX2RhdGFfZW50cnkoMiwgMyksCiB9OwotI2VuZGlmIC8qIGlmZGVmIENPTkZJR19BUkNIX01YMjUgKi8KKyNlbmRpZiAvKiBpZmRlZiBDT05GSUdfU09DX0lNWDI1ICovCiAKICNpZmRlZiBDT05GSUdfU09DX0lNWDI3CiBjb25zdCBzdHJ1Y3QgaW14X3NwaV9pbXhfZGF0YSBpbXgyN19jc3BpX2RhdGFbXSBfX2luaXRjb25zdCA9IHsKQEAgLTUwLDcgKzUwLDcgQEAKIH07CiAjZW5kaWYgLyogaWZkZWYgQ09ORklHX1NPQ19JTVgyNyAqLwogCi0jaWZkZWYgQ09ORklHX0FSQ0hfTVgzMQorI2lmZGVmIENPTkZJR19TT0NfSU1YMzEKIGNvbnN0IHN0cnVjdCBpbXhfc3BpX2lteF9kYXRhIGlteDMxX2NzcGlfZGF0YVtdIF9faW5pdGNvbnN0ID0gewogI2RlZmluZSBpbXgzMV9jc3BpX2RhdGFfZW50cnkoX2lkLCBfaHdpZCkJCQkJXAogCWlteF9zcGlfaW14X2RhdGFfZW50cnkoTVgzMSwgQ1NQSSwgImlteDMxLWNzcGkiLCBfaWQsIF9od2lkLCBTWl80SykKQEAgLTU4LDE4ICs1OCwxOCBAQAogCWlteDMxX2NzcGlfZGF0YV9lbnRyeSgxLCAyKSwKIAlpbXgzMV9jc3BpX2RhdGFfZW50cnkoMiwgMyksCiB9OwotI2VuZGlmIC8qIGlmZGVmIENPTkZJR19BUkNIX01YMzEgKi8KKyNlbmRpZiAvKiBpZmRlZiBDT05GSUdfU09DX0lNWDMxICovCiAKLSNpZmRlZiBDT05GSUdfQVJDSF9NWDM1CisjaWZkZWYgQ09ORklHX1NPQ19JTVgzNQogY29uc3Qgc3RydWN0IGlteF9zcGlfaW14X2RhdGEgaW14MzVfY3NwaV9kYXRhW10gX19pbml0Y29uc3QgPSB7CiAjZGVmaW5lIGlteDM1X2NzcGlfZGF0YV9lbnRyeShfaWQsIF9od2lkKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIAlpbXhfc3BpX2lteF9kYXRhX2VudHJ5KE1YMzUsIENTUEksICJpbXgzNS1jc3BpIiwgX2lkLCBfaHdpZCwgU1pfNEspCiAJaW14MzVfY3NwaV9kYXRhX2VudHJ5KDAsIDEpLAogCWlteDM1X2NzcGlfZGF0YV9lbnRyeSgxLCAyKSwKIH07Ci0jZW5kaWYgLyogaWZkZWYgQ09ORklHX0FSQ0hfTVgzNSAqLworI2VuZGlmIC8qIGlmZGVmIENPTkZJR19TT0NfSU1YMzUgKi8KIAotI2lmZGVmIENPTkZJR19BUkNIX01YNTEKKyNpZmRlZiBDT05GSUdfU09DX0lNWDUxCiBjb25zdCBzdHJ1Y3QgaW14X3NwaV9pbXhfZGF0YSBpbXg1MV9jc3BpX2RhdGEgX19pbml0Y29uc3QgPQogCWlteF9zcGlfaW14X2RhdGFfZW50cnlfc2luZ2xlKE1YNTEsIENTUEksICJpbXg1MS1jc3BpIiwgMCwgLCBTWl80Syk7CiAKQEAgLTc5LDcgKzc5LDcgQEAKIAlpbXg1MV9lY3NwaV9kYXRhX2VudHJ5KDAsIDEpLAogCWlteDUxX2Vjc3BpX2RhdGFfZW50cnkoMSwgMiksCiB9OwotI2VuZGlmIC8qIGlmZGVmIENPTkZJR19BUkNIX01YNTEgKi8KKyNlbmRpZiAvKiBpZmRlZiBDT05GSUdfU09DX0lNWDUxICovCiAKIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKl9faW5pdCBpbXhfYWRkX3NwaV9pbXgoCiAJCWNvbnN0IHN0cnVjdCBpbXhfc3BpX2lteF9kYXRhICpkYXRhLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvZWhjaS5jIGIvYXJjaC9hcm0vcGxhdC1teGMvZWhjaS5jCmluZGV4IDk5MTU2MDcuLjg3NzJjZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2VoY2kuYworKysgYi9hcmNoL2FybS9wbGF0LW14Yy9laGNpLmMKQEAgLTQ5LDYgKzQ5LDcgQEAKIAogI2RlZmluZSBNWENfT1RHX09GRlNFVAkJMAogI2RlZmluZSBNWENfSDFfT0ZGU0VUCQkweDIwMAorI2RlZmluZSBNWENfSDJfT0ZGU0VUCQkweDQwMAogCiAvKiBVU0JfQ1RSTCAqLwogI2RlZmluZSBNWENfT1RHX1VDVFJMX09XSUVfQklUCQkoMSA8PCAyNykJLyogT1RHIHdha2V1cCBpbnRyIGVuYWJsZSAqLwpAQCAtNjEsNiArNjIsMTEgQEAKICNkZWZpbmUgTVhDX09UR19QSFlDVFJMX09DX0RJU19CSVQJKDEgPDwgOCkJLyogT1RHIERpc2FibGUgT3ZlcmN1cnJlbnQgRXZlbnQgKi8KICNkZWZpbmUgTVhDX0gxX09DX0RJU19CSVQJCQkoMSA8PCA1KQkvKiBVSDEgRGlzYWJsZSBPdmVyY3VycmVudCBFdmVudCAqLwogCisvKiBVU0JIMkNUUkwgKi8KKyNkZWZpbmUgTVhDX0gyX1VDVFJMX0gyVUlFX0JJVAkJKDEgPDwgOCkKKyNkZWZpbmUgTVhDX0gyX1VDVFJMX0gyV0lFX0JJVAkJKDEgPDwgNykKKyNkZWZpbmUgTVhDX0gyX1VDVFJMX0gyUE1fQklUCQkoMSA8PCA0KQorCiAjZGVmaW5lIE1YQ19VU0JDTURfT0ZGU0VUCQkJMHgxNDAKIAogLyogVVNCQ01EICovCkBAIC02OSw5ICs3NSw5IEBACiBpbnQgbXhjX2luaXRpYWxpemVfdXNiX2h3KGludCBwb3J0LCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CiAJdW5zaWduZWQgaW50IHY7Ci0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9NWDI1KQorI2lmIGRlZmluZWQoQ09ORklHX1NPQ19JTVgyNSkKIAlpZiAoY3B1X2lzX214MjUoKSkgewotCQl2ID0gcmVhZGwoTVgyNV9JT19BRERSRVNTKE1YMjVfT1RHX0JBU0VfQUREUiArCisJCXYgPSByZWFkbChNWDI1X0lPX0FERFJFU1MoTVgyNV9VU0JfQkFTRV9BRERSICsKIAkJCQkgICAgIFVTQkNUUkxfT1RHQkFTRV9PRkZTRVQpKTsKIAogCQlzd2l0Y2ggKHBvcnQpIHsKQEAgLTEwOCwxNCArMTE0LDE0IEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCi0JCXdyaXRlbCh2LCBNWDI1X0lPX0FERFJFU1MoTVgyNV9PVEdfQkFTRV9BRERSICsKKwkJd3JpdGVsKHYsIE1YMjVfSU9fQUREUkVTUyhNWDI1X1VTQl9CQVNFX0FERFIgKwogCQkJCSAgICAgVVNCQ1RSTF9PVEdCQVNFX09GRlNFVCkpOwogCQlyZXR1cm4gMDsKIAl9Ci0jZW5kaWYgLyogQ09ORklHX0FSQ0hfTVgyNSAqLworI2VuZGlmIC8qIGlmIGRlZmluZWQoQ09ORklHX1NPQ19JTVgyNSkgKi8KICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX01YMykKIAlpZiAoY3B1X2lzX214MzEoKSkgewotCQl2ID0gcmVhZGwoTVgzMV9JT19BRERSRVNTKE1YMzFfT1RHX0JBU0VfQUREUiArCisJCXYgPSByZWFkbChNWDMxX0lPX0FERFJFU1MoTVgzMV9VU0JfQkFTRV9BRERSICsKIAkJCQkgICAgIFVTQkNUUkxfT1RHQkFTRV9PRkZTRVQpKTsKIAogCQlzd2l0Y2ggKHBvcnQpIHsKQEAgLTE1MywxMyArMTU5LDEzIEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCi0JCXdyaXRlbCh2LCBNWDMxX0lPX0FERFJFU1MoTVgzMV9PVEdfQkFTRV9BRERSICsKKwkJd3JpdGVsKHYsIE1YMzFfSU9fQUREUkVTUyhNWDMxX1VTQl9CQVNFX0FERFIgKwogCQkJCSAgICAgVVNCQ1RSTF9PVEdCQVNFX09GRlNFVCkpOwogCQlyZXR1cm4gMDsKIAl9CiAKIAlpZiAoY3B1X2lzX214MzUoKSkgewotCQl2ID0gcmVhZGwoTVgzNV9JT19BRERSRVNTKE1YMzVfT1RHX0JBU0VfQUREUiArCisJCXYgPSByZWFkbChNWDM1X0lPX0FERFJFU1MoTVgzNV9VU0JfQkFTRV9BRERSICsKIAkJCQkgICAgIFVTQkNUUkxfT1RHQkFTRV9PRkZTRVQpKTsKIAogCQlzd2l0Y2ggKHBvcnQpIHsKQEAgLTE5Niw3ICsyMDIsNyBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAotCQl3cml0ZWwodiwgTVgzNV9JT19BRERSRVNTKE1YMzVfT1RHX0JBU0VfQUREUiArCisJCXdyaXRlbCh2LCBNWDM1X0lPX0FERFJFU1MoTVgzNV9VU0JfQkFTRV9BRERSICsKIAkJCQkgICAgIFVTQkNUUkxfT1RHQkFTRV9PRkZTRVQpKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMjA2LDcgKzIxMiw3IEBACiAJCS8qIE9uIGkuTVgyNyB3ZSBjYW4gdXNlIHRoZSBpLk1YMzEgVVNCQ1RSTCBiaXRzLCB0aGV5CiAJCSAqIGFyZSBpZGVudGljYWwKIAkJICovCi0JCXYgPSByZWFkbChNWDI3X0lPX0FERFJFU1MoTVgyN19PVEdfQkFTRV9BRERSICsKKwkJdiA9IHJlYWRsKE1YMjdfSU9fQUREUkVTUyhNWDI3X1VTQl9CQVNFX0FERFIgKwogCQkJCSAgICAgVVNCQ1RSTF9PVEdCQVNFX09GRlNFVCkpOwogCQlzd2l0Y2ggKHBvcnQpIHsKIAkJY2FzZSAwOgkvKiBPVEcgcG9ydCAqLwpAQCAtMjQxLDEyICsyNDcsMTIgQEAKIAkJZGVmYXVsdDoKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCXdyaXRlbCh2LCBNWDI3X0lPX0FERFJFU1MoTVgyN19PVEdfQkFTRV9BRERSICsKKwkJd3JpdGVsKHYsIE1YMjdfSU9fQUREUkVTUyhNWDI3X1VTQl9CQVNFX0FERFIgKwogCQkJCSAgICAgVVNCQ1RSTF9PVEdCQVNFX09GRlNFVCkpOwogCQlyZXR1cm4gMDsKIAl9CiAjZW5kaWYgLyogQ09ORklHX01BQ0hfTVgyNyAqLwotI2lmZGVmIENPTkZJR19BUkNIX01YNTEKKyNpZmRlZiBDT05GSUdfU09DX0lNWDUxCiAJaWYgKGNwdV9pc19teDUxKCkpIHsKIAkJdm9pZCBfX2lvbWVtICp1c2JfYmFzZTsKIAkJdm9pZCBfX2lvbWVtICp1c2JvdGdfYmFzZTsKQEAgLTI1NCw2ICsyNjAsMTAgQEAKIAkJaW50IHJldCA9IDA7CiAKIAkJdXNiX2Jhc2UgPSBpb3JlbWFwKE1YNTFfT1RHX0JBU0VfQUREUiwgU1pfNEspOworCQlpZiAoIXVzYl9iYXNlKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzKCk6IGlvcmVtYXAgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQogCiAJCXN3aXRjaCAocG9ydCkgewogCQljYXNlIDA6CS8qIE9URyBwb3J0ICovCkBAIC0yNjIsNiArMjcyLDkgQEAKIAkJY2FzZSAxOgkvKiBIb3N0IDEgcG9ydCAqLwogCQkJdXNib3RnX2Jhc2UgPSB1c2JfYmFzZSArIE1YQ19IMV9PRkZTRVQ7CiAJCQlicmVhazsKKwkJY2FzZSAyOiAvKiBIb3N0IDIgcG9ydCAqLworCQkJdXNib3RnX2Jhc2UgPSB1c2JfYmFzZSArIE1YQ19IMl9PRkZTRVQ7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXByaW50ayhLRVJOX0VSUiIlcyBubyBzdWNoIHBvcnQgJWRcbiIsIF9fZnVuY19fLCBwb3J0KTsKIAkJCXJldCA9IC1FTk9FTlQ7CkBAIC0yNzQsMTAgKzI4NywxMyBAQAogCQkJaWYgKGZsYWdzICYgTVhDX0VIQ0lfSU5URVJOQUxfUEhZKSB7CiAJCQkJdiA9IF9fcmF3X3JlYWRsKHVzYm90aGVyX2Jhc2UgKyBNWENfVVNCX1BIWV9DVFJfRlVOQ19PRkZTRVQpOwogCi0JCQkJaWYgKGZsYWdzICYgTVhDX0VIQ0lfUE9XRVJfUElOU19FTkFCTEVEKQotCQkJCQl2IHw9IChNWENfT1RHX1BIWUNUUkxfT0NfRElTX0JJVCB8IE1YQ19PVEdfVUNUUkxfT1BNX0JJVCk7IC8qIE9DL1VTQlBXUiBpcyBub3QgdXNlZCAqLwotCQkJCWVsc2UKLQkJCQkJdiAmPSB+KE1YQ19PVEdfUEhZQ1RSTF9PQ19ESVNfQklUIHwgTVhDX09UR19VQ1RSTF9PUE1fQklUKTsgLyogT0MvVVNCUFdSIGlzIHVzZWQgKi8KKwkJCQlpZiAoZmxhZ3MgJiBNWENfRUhDSV9QT1dFUl9QSU5TX0VOQUJMRUQpIHsKKwkJCQkJLyogT0MvVVNCUFdSIGlzIG5vdCB1c2VkICovCisJCQkJCXYgfD0gTVhDX09UR19QSFlDVFJMX09DX0RJU19CSVQ7CisJCQkJfSBlbHNlIHsKKwkJCQkJLyogT0MvVVNCUFdSIGlzIHVzZWQgKi8KKwkJCQkJdiAmPSB+TVhDX09UR19QSFlDVFJMX09DX0RJU19CSVQ7CisJCQkJfQogCQkJCV9fcmF3X3dyaXRlbCh2LCB1c2JvdGhlcl9iYXNlICsgTVhDX1VTQl9QSFlfQ1RSX0ZVTkNfT0ZGU0VUKTsKIAogCQkJCXYgPSBfX3Jhd19yZWFkbCh1c2JvdGhlcl9iYXNlICsgTVhDX1VTQkNUUkxfT0ZGU0VUKTsKQEAgLTI4NSwxNiArMzAxLDIzIEBACiAJCQkJCXYgfD0gTVhDX09UR19VQ1RSTF9PV0lFX0JJVDsvKiBPVEcgd2FrZXVwIGVuYWJsZSAqLwogCQkJCWVsc2UKIAkJCQkJdiAmPSB+TVhDX09UR19VQ1RSTF9PV0lFX0JJVDsvKiBPVEcgd2FrZXVwIGRpc2FibGUgKi8KKwkJCQlpZiAoZmxhZ3MgJiBNWENfRUhDSV9QT1dFUl9QSU5TX0VOQUJMRUQpCisJCQkJCXYgfD0gTVhDX09UR19VQ1RSTF9PUE1fQklUOworCQkJCWVsc2UKKwkJCQkJdiAmPSB+TVhDX09UR19VQ1RSTF9PUE1fQklUOwogCQkJCV9fcmF3X3dyaXRlbCh2LCB1c2JvdGhlcl9iYXNlICsgTVhDX1VTQkNUUkxfT0ZGU0VUKTsKIAkJCX0KIAkJCWJyZWFrOwogCQljYXNlIDE6CS8qIEhvc3QgMSAqLwogCQkJLypIb3N0IFVMUEkgKi8KIAkJCXYgPSBfX3Jhd19yZWFkbCh1c2JvdGhlcl9iYXNlICsgTVhDX1VTQkNUUkxfT0ZGU0VUKTsKLQkJCWlmIChmbGFncyAmIE1YQ19FSENJX1dBS0VVUF9FTkFCTEVEKQotCQkJCXYgJj0gfihNWENfSDFfVUNUUkxfSDFXSUVfQklUIHwgTVhDX0gxX1VDVFJMX0gxVUlFX0JJVCk7LyogSE9TVDEgd2FrZXVwL1VMUEkgaW50ciBkaXNhYmxlICovCi0JCQllbHNlCi0JCQkJdiAmPSB+KE1YQ19IMV9VQ1RSTF9IMVdJRV9CSVQgfCBNWENfSDFfVUNUUkxfSDFVSUVfQklUKTsvKiBIT1NUMSB3YWtldXAvVUxQSSBpbnRyIGRpc2FibGUgKi8KKwkJCWlmIChmbGFncyAmIE1YQ19FSENJX1dBS0VVUF9FTkFCTEVEKSB7CisJCQkJLyogSE9TVDEgd2FrZXVwL1VMUEkgaW50ciBlbmFibGUgKi8KKwkJCQl2IHw9IChNWENfSDFfVUNUUkxfSDFXSUVfQklUIHwgTVhDX0gxX1VDVFJMX0gxVUlFX0JJVCk7CisJCQl9IGVsc2UgeworCQkJCS8qIEhPU1QxIHdha2V1cC9VTFBJIGludHIgZGlzYWJsZSAqLworCQkJCXYgJj0gfihNWENfSDFfVUNUUkxfSDFXSUVfQklUIHwgTVhDX0gxX1VDVFJMX0gxVUlFX0JJVCk7CisJCQl9CiAKIAkJCWlmIChmbGFncyAmIE1YQ19FSENJX1BPV0VSX1BJTlNfRU5BQkxFRCkKIAkJCQl2ICY9IH5NWENfSDFfVUNUUkxfSDFQTV9CSVQ7IC8qIEhPU1QxIHBvd2VyIG1hc2sgdXNlZCovCkBAIC0zMTUsNiArMzM4LDIyIEBACiAJCQkJdiAmPSBNWENfVUNNRF9JVENfTk9fVEhSRVNIT0xEX01BU0s7CiAJCQlfX3Jhd193cml0ZWwodiwgdXNib3RnX2Jhc2UgKyBNWENfVVNCQ01EX09GRlNFVCk7CiAJCQlicmVhazsKKwkJY2FzZSAyOiAvKiBIb3N0IDIgVUxQSSAqLworCQkJdiA9IF9fcmF3X3JlYWRsKHVzYm90aGVyX2Jhc2UgKyBNWENfVVNCSDJDVFJMX09GRlNFVCk7CisJCQlpZiAoZmxhZ3MgJiBNWENfRUhDSV9XQUtFVVBfRU5BQkxFRCkgeworCQkJCS8qIEhPU1QxIHdha2V1cC9VTFBJIGludHIgZW5hYmxlICovCisJCQkJdiB8PSAoTVhDX0gyX1VDVFJMX0gyV0lFX0JJVCB8IE1YQ19IMl9VQ1RSTF9IMlVJRV9CSVQpOworCQkJfSBlbHNlIHsKKwkJCQkvKiBIT1NUMSB3YWtldXAvVUxQSSBpbnRyIGRpc2FibGUgKi8KKwkJCQl2ICY9IH4oTVhDX0gyX1VDVFJMX0gyV0lFX0JJVCB8IE1YQ19IMl9VQ1RSTF9IMlVJRV9CSVQpOworCQkJfQorCisJCQlpZiAoZmxhZ3MgJiBNWENfRUhDSV9QT1dFUl9QSU5TX0VOQUJMRUQpCisJCQkJdiAmPSB+TVhDX0gyX1VDVFJMX0gyUE1fQklUOyAvKiBIT1NUMiBwb3dlciBtYXNrIHVzZWQqLworCQkJZWxzZQorCQkJCXYgfD0gTVhDX0gyX1VDVFJMX0gyUE1fQklUOyAvKiBIT1NUMiBwb3dlciBtYXNrIHVzZWQqLworCQkJX19yYXdfd3JpdGVsKHYsIHVzYm90aGVyX2Jhc2UgKyBNWENfVVNCSDJDVFJMX09GRlNFVCk7CisJCQlicmVhazsKIAkJfQogCiBlcnJvcjoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2VwaXQuYyBiL2FyY2gvYXJtL3BsYXQtbXhjL2VwaXQuYwppbmRleCBlZTk1ODJmLi5kNjlkMzQzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9lcGl0LmMKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvZXBpdC5jCkBAIC05Myw3ICs5Myw2IEBACiAJLnJhdGluZwkJPSAyMDAsCiAJLnJlYWQJCT0gZXBpdF9yZWFkLAogCS5tYXNrCQk9IENMT0NLU09VUkNFX01BU0soMzIpLAotCS5zaGlmdAkJPSAyMCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVMsCiB9OwogCkBAIC0xMDEsOSArMTAwLDcgQEAKIHsKIAl1bnNpZ25lZCBpbnQgYyA9IGNsa19nZXRfcmF0ZSh0aW1lcl9jbGspOwogCi0JY2xvY2tzb3VyY2VfZXBpdC5tdWx0ID0gY2xvY2tzb3VyY2VfaHoybXVsdChjLAotCQkJCQljbG9ja3NvdXJjZV9lcGl0LnNoaWZ0KTsKLQljbG9ja3NvdXJjZV9yZWdpc3RlcigmY2xvY2tzb3VyY2VfZXBpdCk7CisJY2xvY2tzb3VyY2VfcmVnaXN0ZXJfaHooJmNsb2Nrc291cmNlX2VwaXQsIGMpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9ncGlvLmMgYi9hcmNoL2FybS9wbGF0LW14Yy9ncGlvLmMKaW5kZXggOWMzZTM2Mi4uYmMyYzdiYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvZ3Bpby5jCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2dwaW8uYwpAQCAtMTc1LDcgKzE3NSw3IEBACiBzdGF0aWMgdm9pZCBteDNfZ3Bpb19pcnFfaGFuZGxlcih1MzIgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCiB7CiAJdTMyIGlycV9zdGF0OwotCXN0cnVjdCBteGNfZ3Bpb19wb3J0ICpwb3J0ID0gKHN0cnVjdCBteGNfZ3Bpb19wb3J0ICopZ2V0X2lycV9kYXRhKGlycSk7CisJc3RydWN0IG14Y19ncGlvX3BvcnQgKnBvcnQgPSBnZXRfaXJxX2RhdGEoaXJxKTsKIAogCWlycV9zdGF0ID0gX19yYXdfcmVhZGwocG9ydC0+YmFzZSArIEdQSU9fSVNSKSAmCiAJCQlfX3Jhd19yZWFkbChwb3J0LT5iYXNlICsgR1BJT19JTVIpOwpAQCAtMTg4LDcgKzE4OCw3IEBACiB7CiAJaW50IGk7CiAJdTMyIGlycV9tc2ssIGlycV9zdGF0OwotCXN0cnVjdCBteGNfZ3Bpb19wb3J0ICpwb3J0ID0gKHN0cnVjdCBteGNfZ3Bpb19wb3J0ICopZ2V0X2lycV9kYXRhKGlycSk7CisJc3RydWN0IG14Y19ncGlvX3BvcnQgKnBvcnQgPSBnZXRfaXJxX2RhdGEoaXJxKTsKIAogCS8qIHdhbGsgdGhyb3VnaCBhbGwgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlcnMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgZ3Bpb190YWJsZV9zaXplOyBpKyspIHsKQEAgLTM0OSwzICszNDksMTEzIEBACiAKIAlyZXR1cm4gMDsKIH0KKworI2RlZmluZSBERUZJTkVfSU1YX0dQSU9fUE9SVF9JUlFfSElHSChzb2MsIF9pZCwgX2h3aWQsIF9pcnEsIF9pcnFfaGlnaCkJXAorCXsJCQkJCQkJCVwKKwkJLmNoaXAubGFiZWwgPSAiZ3Bpby0iICNfaWQsCQkJCVwKKwkJLmlycSA9IF9pcnEsCQkJCQkJXAorCQkuaXJxX2hpZ2ggPSBfaXJxX2hpZ2gsCQkJCQlcCisJCS5iYXNlID0gc29jICMjIF9JT19BRERSRVNTKAkJCQlcCisJCQkJc29jICMjIF9HUElPICMjIF9od2lkICMjIF9CQVNFX0FERFIpLAlcCisJCS52aXJ0dWFsX2lycV9zdGFydCA9IE1YQ19HUElPX0lSUV9TVEFSVCArIChfaWQpICogMzIsCVwKKwl9CisKKyNkZWZpbmUgREVGSU5FX0lNWF9HUElPX1BPUlRfSVJRKHNvYywgX2lkLCBfaHdpZCwgX2lycSkJCQlcCisJREVGSU5FX0lNWF9HUElPX1BPUlRfSVJRX0hJR0goc29jLCBfaWQsIF9od2lkLCBfaXJxLCAwKQorI2RlZmluZSBERUZJTkVfSU1YX0dQSU9fUE9SVChzb2MsIF9pZCwgX2h3aWQpCQkJCVwKKwlERUZJTkVfSU1YX0dQSU9fUE9SVF9JUlEoc29jLCBfaWQsIF9od2lkLCAwKQorCisjZGVmaW5lIERFRklORV9SRUdJU1RFUl9GVU5DVElPTihwcmVmaXgpCQkJCVwKK2ludCBfX2luaXQgcHJlZml4ICMjIF9yZWdpc3Rlcl9ncGlvcyh2b2lkKQkJCQlcCit7CQkJCQkJCQkJXAorCXJldHVybiBteGNfZ3Bpb19pbml0KHByZWZpeCAjIyBfZ3Bpb19wb3J0cywJCQlcCisJCQlBUlJBWV9TSVpFKHByZWZpeCAjIyBfZ3Bpb19wb3J0cykpOwkJXAorfQorCisjaWYgZGVmaW5lZChDT05GSUdfU09DX0lNWDEpCitzdGF0aWMgc3RydWN0IG14Y19ncGlvX3BvcnQgaW14MV9ncGlvX3BvcnRzW10gPSB7CisJREVGSU5FX0lNWF9HUElPX1BPUlRfSVJRKE1YMSwgMCwgMSwgTVgxX0dQSU9fSU5UX1BPUlRBKSwKKwlERUZJTkVfSU1YX0dQSU9fUE9SVF9JUlEoTVgxLCAxLCAyLCBNWDFfR1BJT19JTlRfUE9SVEIpLAorCURFRklORV9JTVhfR1BJT19QT1JUX0lSUShNWDEsIDIsIDMsIE1YMV9HUElPX0lOVF9QT1JUQyksCisJREVGSU5FX0lNWF9HUElPX1BPUlRfSVJRKE1YMSwgMywgNCwgTVgxX0dQSU9fSU5UX1BPUlREKSwKK307CisKK0RFRklORV9SRUdJU1RFUl9GVU5DVElPTihpbXgxKQorCisjZW5kaWYgLyogaWYgZGVmaW5lZChDT05GSUdfU09DX0lNWDEpICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19TT0NfSU1YMjEpCitzdGF0aWMgc3RydWN0IG14Y19ncGlvX3BvcnQgaW14MjFfZ3Bpb19wb3J0c1tdID0geworCURFRklORV9JTVhfR1BJT19QT1JUX0lSUShNWDIxLCAwLCAxLCBNWDIxX0lOVF9HUElPKSwKKwlERUZJTkVfSU1YX0dQSU9fUE9SVChNWDIxLCAxLCAyKSwKKwlERUZJTkVfSU1YX0dQSU9fUE9SVChNWDIxLCAyLCAzKSwKKwlERUZJTkVfSU1YX0dQSU9fUE9SVChNWDIxLCAzLCA0KSwKKwlERUZJTkVfSU1YX0dQSU9fUE9SVChNWDIxLCA0LCA1KSwKKwlERUZJTkVfSU1YX0dQSU9fUE9SVChNWDIxLCA1LCA2KSwKK307CisKK0RFRklORV9SRUdJU1RFUl9GVU5DVElPTihpbXgyMSkKKworI2VuZGlmIC8qIGlmIGRlZmluZWQoQ09ORklHX1NPQ19JTVgyMSkgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX1NPQ19JTVgyNSkKK3N0YXRpYyBzdHJ1Y3QgbXhjX2dwaW9fcG9ydCBpbXgyNV9ncGlvX3BvcnRzW10gPSB7CisJREVGSU5FX0lNWF9HUElPX1BPUlRfSVJRKE1YMjUsIDAsIDEsIE1YMjVfSU5UX0dQSU8xKSwKKwlERUZJTkVfSU1YX0dQSU9fUE9SVF9JUlEoTVgyNSwgMSwgMiwgTVgyNV9JTlRfR1BJTzIpLAorCURFRklORV9JTVhfR1BJT19QT1JUX0lSUShNWDI1LCAyLCAzLCBNWDI1X0lOVF9HUElPMyksCisJREVGSU5FX0lNWF9HUElPX1BPUlRfSVJRKE1YMjUsIDMsIDQsIE1YMjVfSU5UX0dQSU80KSwKK307CisKK0RFRklORV9SRUdJU1RFUl9GVU5DVElPTihpbXgyNSkKKworI2VuZGlmIC8qIGlmIGRlZmluZWQoQ09ORklHX1NPQ19JTVgyNSkgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX1NPQ19JTVgyNykKK3N0YXRpYyBzdHJ1Y3QgbXhjX2dwaW9fcG9ydCBpbXgyN19ncGlvX3BvcnRzW10gPSB7CisJREVGSU5FX0lNWF9HUElPX1BPUlRfSVJRKE1YMjcsIDAsIDEsIE1YMjdfSU5UX0dQSU8pLAorCURFRklORV9JTVhfR1BJT19QT1JUKE1YMjcsIDEsIDIpLAorCURFRklORV9JTVhfR1BJT19QT1JUKE1YMjcsIDIsIDMpLAorCURFRklORV9JTVhfR1BJT19QT1JUKE1YMjcsIDMsIDQpLAorCURFRklORV9JTVhfR1BJT19QT1JUKE1YMjcsIDQsIDUpLAorCURFRklORV9JTVhfR1BJT19QT1JUKE1YMjcsIDUsIDYpLAorfTsKKworREVGSU5FX1JFR0lTVEVSX0ZVTkNUSU9OKGlteDI3KQorCisjZW5kaWYgLyogaWYgZGVmaW5lZChDT05GSUdfU09DX0lNWDI3KSAqLworCisjaWYgZGVmaW5lZChDT05GSUdfU09DX0lNWDMxKQorc3RhdGljIHN0cnVjdCBteGNfZ3Bpb19wb3J0IGlteDMxX2dwaW9fcG9ydHNbXSA9IHsKKwlERUZJTkVfSU1YX0dQSU9fUE9SVF9JUlEoTVgzMSwgMCwgMSwgTVgzMV9JTlRfR1BJTzEpLAorCURFRklORV9JTVhfR1BJT19QT1JUX0lSUShNWDMxLCAxLCAyLCBNWDMxX0lOVF9HUElPMiksCisJREVGSU5FX0lNWF9HUElPX1BPUlRfSVJRKE1YMzEsIDIsIDMsIE1YMzFfSU5UX0dQSU8zKSwKK307CisKK0RFRklORV9SRUdJU1RFUl9GVU5DVElPTihpbXgzMSkKKworI2VuZGlmIC8qIGlmIGRlZmluZWQoQ09ORklHX1NPQ19JTVgzMSkgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX1NPQ19JTVgzNSkKK3N0YXRpYyBzdHJ1Y3QgbXhjX2dwaW9fcG9ydCBpbXgzNV9ncGlvX3BvcnRzW10gPSB7CisJREVGSU5FX0lNWF9HUElPX1BPUlRfSVJRKE1YMzUsIDAsIDEsIE1YMzVfSU5UX0dQSU8xKSwKKwlERUZJTkVfSU1YX0dQSU9fUE9SVF9JUlEoTVgzNSwgMSwgMiwgTVgzNV9JTlRfR1BJTzIpLAorCURFRklORV9JTVhfR1BJT19QT1JUX0lSUShNWDM1LCAyLCAzLCBNWDM1X0lOVF9HUElPMyksCit9OworCitERUZJTkVfUkVHSVNURVJfRlVOQ1RJT04oaW14MzUpCisKKyNlbmRpZiAvKiBpZiBkZWZpbmVkKENPTkZJR19TT0NfSU1YMzUpICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19TT0NfSU1YNTApCitzdGF0aWMgc3RydWN0IG14Y19ncGlvX3BvcnQgaW14NTBfZ3Bpb19wb3J0c1tdID0geworCURFRklORV9JTVhfR1BJT19QT1JUX0lSUV9ISUdIKE1YNTAsIDAsIDEsIE1YNTBfSU5UX0dQSU8xX0xPVywgTVg1MF9JTlRfR1BJTzFfSElHSCksCisJREVGSU5FX0lNWF9HUElPX1BPUlRfSVJRX0hJR0goTVg1MCwgMSwgMiwgTVg1MF9JTlRfR1BJTzJfTE9XLCBNWDUwX0lOVF9HUElPMl9ISUdIKSwKKwlERUZJTkVfSU1YX0dQSU9fUE9SVF9JUlFfSElHSChNWDUwLCAyLCAzLCBNWDUwX0lOVF9HUElPM19MT1csIE1YNTBfSU5UX0dQSU8zX0hJR0gpLAorCURFRklORV9JTVhfR1BJT19QT1JUX0lSUV9ISUdIKE1YNTAsIDMsIDQsIE1YNTBfSU5UX0dQSU8zX0xPVywgTVg1MF9JTlRfR1BJTzNfSElHSCksCisJREVGSU5FX0lNWF9HUElPX1BPUlRfSVJRX0hJR0goTVg1MCwgNCwgNSwgTVg1MF9JTlRfR1BJTzNfTE9XLCBNWDUwX0lOVF9HUElPM19ISUdIKSwKKwlERUZJTkVfSU1YX0dQSU9fUE9SVF9JUlFfSElHSChNWDUwLCA1LCA2LCBNWDUwX0lOVF9HUElPM19MT1csIE1YNTBfSU5UX0dQSU8zX0hJR0gpLAorfTsKKworREVGSU5FX1JFR0lTVEVSX0ZVTkNUSU9OKGlteDUwKQorCisjZW5kaWYgLyogaWYgZGVmaW5lZChDT05GSUdfU09DX0lNWDUwKSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2NvbW1vbi5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2NvbW1vbi5oCmluZGV4IDdhMWUxZjguLmFlYTJjZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9jb21tb24uaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvY29tbW9uLmgKQEAgLTIwLDcgKzIwLDkgQEAKIGV4dGVybiB2b2lkIG14MjdfbWFwX2lvKHZvaWQpOwogZXh0ZXJuIHZvaWQgbXgzMV9tYXBfaW8odm9pZCk7CiBleHRlcm4gdm9pZCBteDM1X21hcF9pbyh2b2lkKTsKK2V4dGVybiB2b2lkIG14NTBfbWFwX2lvKHZvaWQpOwogZXh0ZXJuIHZvaWQgbXg1MV9tYXBfaW8odm9pZCk7CitleHRlcm4gdm9pZCBteDUzX21hcF9pbyh2b2lkKTsKIGV4dGVybiB2b2lkIG14YzkxMjMxX21hcF9pbyh2b2lkKTsKIGV4dGVybiB2b2lkIG14Y19pbml0X2lycSh2b2lkIF9faW9tZW0gKik7CiBleHRlcm4gdm9pZCB0emljX2luaXRfaXJxKHZvaWQgX19pb21lbSAqKTsKQEAgLTMwLDcgKzMyLDkgQEAKIGV4dGVybiB2b2lkIG14MjdfaW5pdF9pcnEodm9pZCk7CiBleHRlcm4gdm9pZCBteDMxX2luaXRfaXJxKHZvaWQpOwogZXh0ZXJuIHZvaWQgbXgzNV9pbml0X2lycSh2b2lkKTsKK2V4dGVybiB2b2lkIG14NTBfaW5pdF9pcnEodm9pZCk7CiBleHRlcm4gdm9pZCBteDUxX2luaXRfaXJxKHZvaWQpOworZXh0ZXJuIHZvaWQgbXg1M19pbml0X2lycSh2b2lkKTsKIGV4dGVybiB2b2lkIG14YzkxMjMxX2luaXRfaXJxKHZvaWQpOwogZXh0ZXJuIHZvaWQgZXBpdF90aW1lcl9pbml0KHN0cnVjdCBjbGsgKnRpbWVyX2Nsaywgdm9pZCBfX2lvbWVtICpiYXNlLCBpbnQgaXJxKTsKIGV4dGVybiB2b2lkIG14Y190aW1lcl9pbml0KHN0cnVjdCBjbGsgKnRpbWVyX2Nsaywgdm9pZCBfX2lvbWVtICosIGludCk7CkBAIC00Miw2ICs0Niw4IEBACiBleHRlcm4gaW50IG14MzVfY2xvY2tzX2luaXQodm9pZCk7CiBleHRlcm4gaW50IG14NTFfY2xvY2tzX2luaXQodW5zaWduZWQgbG9uZyBja2lsLCB1bnNpZ25lZCBsb25nIG9zYywKIAkJCXVuc2lnbmVkIGxvbmcgY2tpaDEsIHVuc2lnbmVkIGxvbmcgY2tpaDIpOworZXh0ZXJuIGludCBteDUzX2Nsb2Nrc19pbml0KHVuc2lnbmVkIGxvbmcgY2tpbCwgdW5zaWduZWQgbG9uZyBvc2MsCisJCQl1bnNpZ25lZCBsb25nIGNraWgxLCB1bnNpZ25lZCBsb25nIGNraWgyKTsKIGV4dGVybiBpbnQgbXhjOTEyMzFfY2xvY2tzX2luaXQodW5zaWduZWQgbG9uZyBmcmVmKTsKIGV4dGVybiBpbnQgbXhjX3JlZ2lzdGVyX2dwaW9zKHZvaWQpOwogZXh0ZXJuIGludCBteGNfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHZvaWQgKmRhdGEpOwpAQCAtNTAsNSArNTYsNiBAQAogZXh0ZXJuIHZvaWQgbXhjOTEyMzFfcG93ZXJfb2ZmKHZvaWQpOwogZXh0ZXJuIHZvaWQgbXhjOTEyMzFfYXJjaF9yZXNldChpbnQsIGNvbnN0IGNoYXIgKik7CiBleHRlcm4gdm9pZCBteGM5MTIzMV9wcmVwYXJlX2lkbGUodm9pZCk7Ci0KK2V4dGVybiB2b2lkIG14NTFfZWZpa2FteF9yZXNldCh2b2lkKTsKK2V4dGVybiBpbnQgbXg1M19yZXZpc2lvbih2b2lkKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwppbmRleCBkNTYyMTNmLi4zYjNhMzdjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpAQCAtMTAsNTggKzEwLDQ5IEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqCiAgKi8KLSNkZWZpbmUgSU1YX05FRURTX0RFUFJFQ0FURURfU1lNQk9MUworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAogI2lmZGVmIENPTkZJR19BUkNIX01YMQotI2luY2x1ZGUgPG1hY2gvbXgxLmg+Ci0jZGVmaW5lIFVBUlRfUEFERFIJVUFSVDFfQkFTRV9BRERSCi0jZGVmaW5lIFVBUlRfVkFERFIJSU9fQUREUkVTUyhVQVJUMV9CQVNFX0FERFIpCisjZGVmaW5lIFVBUlRfUEFERFIJTVgxX1VBUlQxX0JBU0VfQUREUgogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfQVJDSF9NWDI1CiAjaWZkZWYgVUFSVF9QQUREUgogI2Vycm9yICJDT05GSUdfREVCVUdfTEwgaXMgaW5jb21wYXRpYmxlIHdpdGggbXVsdGlwbGUgYXJjaHMiCiAjZW5kaWYKLSNpbmNsdWRlIDxtYWNoL214MjUuaD4KICNkZWZpbmUgVUFSVF9QQUREUglNWDI1X1VBUlQxX0JBU0VfQUREUgotI2RlZmluZSBVQVJUX1ZBRERSCU1YMjVfQUlQUzFfSU9fQUREUkVTUyhNWDI1X1VBUlQxX0JBU0VfQUREUikKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0FSQ0hfTVgyCiAjaWZkZWYgVUFSVF9QQUREUgogI2Vycm9yICJDT05GSUdfREVCVUdfTEwgaXMgaW5jb21wYXRpYmxlIHdpdGggbXVsdGlwbGUgYXJjaHMiCiAjZW5kaWYKLSNpbmNsdWRlIDxtYWNoL214MnguaD4KLSNkZWZpbmUgVUFSVF9QQUREUglVQVJUMV9CQVNFX0FERFIKLSNkZWZpbmUgVUFSVF9WQUREUglBSVBJX0lPX0FERFJFU1MoVUFSVDFfQkFTRV9BRERSKQorI2RlZmluZSBVQVJUX1BBRERSCU1YMnhfVUFSVDFfQkFTRV9BRERSCiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19BUkNIX01YMwogI2lmZGVmIFVBUlRfUEFERFIKICNlcnJvciAiQ09ORklHX0RFQlVHX0xMIGlzIGluY29tcGF0aWJsZSB3aXRoIG11bHRpcGxlIGFyY2hzIgogI2VuZGlmCi0jaW5jbHVkZSA8bWFjaC9teDN4Lmg+Ci0jZGVmaW5lIFVBUlRfUEFERFIJVUFSVDFfQkFTRV9BRERSCi0jZGVmaW5lIFVBUlRfVkFERFIJQUlQUzFfSU9fQUREUkVTUyhVQVJUMV9CQVNFX0FERFIpCisjZGVmaW5lIFVBUlRfUEFERFIJTVgzeF9VQVJUMV9CQVNFX0FERFIKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0FSQ0hfTVg1CiAjaWZkZWYgVUFSVF9QQUREUgogI2Vycm9yICJDT05GSUdfREVCVUdfTEwgaXMgaW5jb21wYXRpYmxlIHdpdGggbXVsdGlwbGUgYXJjaHMiCiAjZW5kaWYKLSNpbmNsdWRlIDxtYWNoL214NTEuaD4KICNkZWZpbmUgVUFSVF9QQUREUglNWDUxX1VBUlQxX0JBU0VfQUREUgotI2RlZmluZSBVQVJUX1ZBRERSCU1YNTFfQUlQUzFfSU9fQUREUkVTUyhNWDUxX1VBUlQxX0JBU0VfQUREUikKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0FSQ0hfTVhDOTEyMzEKICNpZmRlZiBVQVJUX1BBRERSCiAjZXJyb3IgIkNPTkZJR19ERUJVR19MTCBpcyBpbmNvbXBhdGlibGUgd2l0aCBtdWx0aXBsZSBhcmNocyIKICNlbmRpZgotI2luY2x1ZGUgPG1hY2gvbXhjOTEyMzEuaD4KICNkZWZpbmUgVUFSVF9QQUREUglNWEM5MTIzMV9VQVJUMl9CQVNFX0FERFIKLSNkZWZpbmUgVUFSVF9WQUREUglNWEM5MTIzMV9JT19BRERSRVNTKE1YQzkxMjMxX1VBUlQyX0JBU0VfQUREUikKICNlbmRpZgorCisjZGVmaW5lIFVBUlRfVkFERFIJSU1YX0lPX0FERFJFU1MoVUFSVF9QQUREUikKKwogCQkubWFjcm8JYWRkcnVhcnQsIHJwLCBydgogCQlsZHIJXHJwLCA9VUFSVF9QQUREUglAIHBoeXNpY2FsCiAJCWxkcglccnYsID1VQVJUX1ZBRERSCUAgdmlydHVhbApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2RldmljZXMtY29tbW9uLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvZGV2aWNlcy1jb21tb24uaAppbmRleCA4YzY4OTZmLi44NjU4YzljIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvZGV2aWNlcy1jb21tb24uaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvZGV2aWNlcy1jb21tb24uaApAQCAtMTAsOSArMTAsMTkgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAKLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmlteF9hZGRfcGxhdGZvcm1fZGV2aWNlKGNvbnN0IGNoYXIgKm5hbWUsIGludCBpZCwKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmlteF9hZGRfcGxhdGZvcm1fZGV2aWNlX2RtYW1hc2soCisJCWNvbnN0IGNoYXIgKm5hbWUsIGludCBpZCwKIAkJY29uc3Qgc3RydWN0IHJlc291cmNlICpyZXMsIHVuc2lnbmVkIGludCBudW1fcmVzb3VyY2VzLAotCQljb25zdCB2b2lkICpkYXRhLCBzaXplX3Qgc2l6ZV9kYXRhKTsKKwkJY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemVfZGF0YSwgdTY0IGRtYW1hc2spOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmlteF9hZGRfcGxhdGZvcm1fZGV2aWNlKAorCQljb25zdCBjaGFyICpuYW1lLCBpbnQgaWQsCisJCWNvbnN0IHN0cnVjdCByZXNvdXJjZSAqcmVzLCB1bnNpZ25lZCBpbnQgbnVtX3Jlc291cmNlcywKKwkJY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemVfZGF0YSkKK3sKKwlyZXR1cm4gaW14X2FkZF9wbGF0Zm9ybV9kZXZpY2VfZG1hbWFzaygKKwkJCW5hbWUsIGlkLCByZXMsIG51bV9yZXNvdXJjZXMsIGRhdGEsIHNpemVfZGF0YSwgMCk7Cit9CiAKICNpbmNsdWRlIDxsaW51eC9mZWMuaD4KIHN0cnVjdCBpbXhfZmVjX2RhdGEgewpAQCAtMjQsMTUgKzM0LDYzIEBACiAJCWNvbnN0IHN0cnVjdCBmZWNfcGxhdGZvcm1fZGF0YSAqcGRhdGEpOwogCiAjaW5jbHVkZSA8bGludXgvY2FuL3BsYXRmb3JtL2ZsZXhjYW4uaD4KLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKl9faW5pdCBpbXhfYWRkX2ZsZXhjYW4oaW50IGlkLAotCQlyZXNvdXJjZV9zaXplX3QgaW9iYXNlLCByZXNvdXJjZV9zaXplX3QgaW9zaXplLAotCQlyZXNvdXJjZV9zaXplX3QgaXJxLAorc3RydWN0IGlteF9mbGV4Y2FuX2RhdGEgeworCWludCBpZDsKKwlyZXNvdXJjZV9zaXplX3QgaW9iYXNlOworCXJlc291cmNlX3NpemVfdCBpb3NpemU7CisJcmVzb3VyY2Vfc2l6ZV90IGlycTsKK307CitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpfX2luaXQgaW14X2FkZF9mbGV4Y2FuKAorCQljb25zdCBzdHJ1Y3QgaW14X2ZsZXhjYW5fZGF0YSAqZGF0YSwKIAkJY29uc3Qgc3RydWN0IGZsZXhjYW5fcGxhdGZvcm1fZGF0YSAqcGRhdGEpOwogCisjaW5jbHVkZSA8bGludXgvZnNsX2RldmljZXMuaD4KK3N0cnVjdCBpbXhfZnNsX3VzYjJfdWRjX2RhdGEgeworCXJlc291cmNlX3NpemVfdCBpb2Jhc2U7CisJcmVzb3VyY2Vfc2l6ZV90IGlycTsKK307CitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpfX2luaXQgaW14X2FkZF9mc2xfdXNiMl91ZGMoCisJCWNvbnN0IHN0cnVjdCBpbXhfZnNsX3VzYjJfdWRjX2RhdGEgKmRhdGEsCisJCWNvbnN0IHN0cnVjdCBmc2xfdXNiMl9wbGF0Zm9ybV9kYXRhICpwZGF0YSk7CisKICNpbmNsdWRlIDxsaW51eC9ncGlvX2tleXMuaD4KIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKl9faW5pdCBpbXhfYWRkX2dwaW9fa2V5cygKIAkJY29uc3Qgc3RydWN0IGdwaW9fa2V5c19wbGF0Zm9ybV9kYXRhICpwZGF0YSk7CiAKKyNpbmNsdWRlIDxtYWNoL214MjEtdXNiaG9zdC5oPgorc3RydWN0IGlteF9pbXgyMV9oY2RfZGF0YSB7CisJcmVzb3VyY2Vfc2l6ZV90IGlvYmFzZTsKKwlyZXNvdXJjZV9zaXplX3QgaXJxOworfTsKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKl9faW5pdCBpbXhfYWRkX2lteDIxX2hjZCgKKwkJY29uc3Qgc3RydWN0IGlteF9pbXgyMV9oY2RfZGF0YSAqZGF0YSwKKwkJY29uc3Qgc3RydWN0IG14MjFfdXNiaF9wbGF0Zm9ybV9kYXRhICpwZGF0YSk7CisKK3N0cnVjdCBpbXhfaW14Ml93ZHRfZGF0YSB7CisJaW50IGlkOworCXJlc291cmNlX3NpemVfdCBpb2Jhc2U7CisJcmVzb3VyY2Vfc2l6ZV90IGlvc2l6ZTsKK307CitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpfX2luaXQgaW14X2FkZF9pbXgyX3dkdCgKKwkJY29uc3Qgc3RydWN0IGlteF9pbXgyX3dkdF9kYXRhICpkYXRhKTsKKworc3RydWN0IGlteF9pbXhkaV9ydGNfZGF0YSB7CisJcmVzb3VyY2Vfc2l6ZV90IGlvYmFzZTsKKwlyZXNvdXJjZV9zaXplX3QgaXJxOworfTsKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKl9faW5pdCBpbXhfYWRkX2lteGRpX3J0YygKKwkJY29uc3Qgc3RydWN0IGlteF9pbXhkaV9ydGNfZGF0YSAqZGF0YSk7CisKKyNpbmNsdWRlIDxtYWNoL2lteGZiLmg+CitzdHJ1Y3QgaW14X2lteF9mYl9kYXRhIHsKKwlyZXNvdXJjZV9zaXplX3QgaW9iYXNlOworCXJlc291cmNlX3NpemVfdCBpb3NpemU7CisJcmVzb3VyY2Vfc2l6ZV90IGlycTsKK307CitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpfX2luaXQgaW14X2FkZF9pbXhfZmIoCisJCWNvbnN0IHN0cnVjdCBpbXhfaW14X2ZiX2RhdGEgKmRhdGEsCisJCWNvbnN0IHN0cnVjdCBpbXhfZmJfcGxhdGZvcm1fZGF0YSAqcGRhdGEpOworCiAjaW5jbHVkZSA8bWFjaC9pMmMuaD4KIHN0cnVjdCBpbXhfaW14X2kyY19kYXRhIHsKIAlpbnQgaWQ7CkBAIC00NCw2ICsxMDIsMTYgQEAKIAkJY29uc3Qgc3RydWN0IGlteF9pbXhfaTJjX2RhdGEgKmRhdGEsCiAJCWNvbnN0IHN0cnVjdCBpbXhpMmNfcGxhdGZvcm1fZGF0YSAqcGRhdGEpOwogCisjaW5jbHVkZSA8bGludXgvaW5wdXQvbWF0cml4X2tleXBhZC5oPgorc3RydWN0IGlteF9pbXhfa2V5cGFkX2RhdGEgeworCXJlc291cmNlX3NpemVfdCBpb2Jhc2U7CisJcmVzb3VyY2Vfc2l6ZV90IGlvc2l6ZTsKKwlyZXNvdXJjZV9zaXplX3QgaXJxOworfTsKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKl9faW5pdCBpbXhfYWRkX2lteF9rZXlwYWQoCisJCWNvbnN0IHN0cnVjdCBpbXhfaW14X2tleXBhZF9kYXRhICpkYXRhLAorCQljb25zdCBzdHJ1Y3QgbWF0cml4X2tleW1hcF9kYXRhICpwZGF0YSk7CisKICNpbmNsdWRlIDxtYWNoL3NzaS5oPgogc3RydWN0IGlteF9pbXhfc3NpX2RhdGEgewogCWludCBpZDsKQEAgLTgyLDYgKzE1MCw2NyBAQAogCQljb25zdCBzdHJ1Y3QgaW14X2lteF91YXJ0XzFpcnFfZGF0YSAqZGF0YSwKIAkJY29uc3Qgc3RydWN0IGlteHVhcnRfcGxhdGZvcm1fZGF0YSAqcGRhdGEpOwogCisjaW5jbHVkZSA8bWFjaC91c2IuaD4KK3N0cnVjdCBpbXhfaW14X3VkY19kYXRhIHsKKwlyZXNvdXJjZV9zaXplX3QgaW9iYXNlOworCXJlc291cmNlX3NpemVfdCBpb3NpemU7CisJcmVzb3VyY2Vfc2l6ZV90IGlycTA7CisJcmVzb3VyY2Vfc2l6ZV90IGlycTE7CisJcmVzb3VyY2Vfc2l6ZV90IGlycTI7CisJcmVzb3VyY2Vfc2l6ZV90IGlycTM7CisJcmVzb3VyY2Vfc2l6ZV90IGlycTQ7CisJcmVzb3VyY2Vfc2l6ZV90IGlycTU7CisJcmVzb3VyY2Vfc2l6ZV90IGlycTY7Cit9Oworc3RydWN0IHBsYXRmb3JtX2RldmljZSAqX19pbml0IGlteF9hZGRfaW14X3VkYygKKwkJY29uc3Qgc3RydWN0IGlteF9pbXhfdWRjX2RhdGEgKmRhdGEsCisJCWNvbnN0IHN0cnVjdCBpbXh1c2JfcGxhdGZvcm1fZGF0YSAqcGRhdGEpOworCisjaW5jbHVkZSA8bWFjaC9teDFfY2FtZXJhLmg+CitzdHJ1Y3QgaW14X214MV9jYW1lcmFfZGF0YSB7CisJcmVzb3VyY2Vfc2l6ZV90IGlvYmFzZTsKKwlyZXNvdXJjZV9zaXplX3QgaW9zaXplOworCXJlc291cmNlX3NpemVfdCBpcnE7Cit9Oworc3RydWN0IHBsYXRmb3JtX2RldmljZSAqX19pbml0IGlteF9hZGRfbXgxX2NhbWVyYSgKKwkJY29uc3Qgc3RydWN0IGlteF9teDFfY2FtZXJhX2RhdGEgKmRhdGEsCisJCWNvbnN0IHN0cnVjdCBteDFfY2FtZXJhX3BkYXRhICpwZGF0YSk7CisKKyNpbmNsdWRlIDxtYWNoL214Ml9jYW0uaD4KK3N0cnVjdCBpbXhfbXgyX2NhbWVyYV9kYXRhIHsKKwlyZXNvdXJjZV9zaXplX3QgaW9iYXNlY3NpOworCXJlc291cmNlX3NpemVfdCBpb3NpemVjc2k7CisJcmVzb3VyY2Vfc2l6ZV90IGlycWNzaTsKKwlyZXNvdXJjZV9zaXplX3QgaW9iYXNlZW1tYXBycDsKKwlyZXNvdXJjZV9zaXplX3QgaW9zaXplZW1tYXBycDsKKwlyZXNvdXJjZV9zaXplX3QgaXJxZW1tYXBycDsKK307CitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpfX2luaXQgaW14X2FkZF9teDJfY2FtZXJhKAorCQljb25zdCBzdHJ1Y3QgaW14X214Ml9jYW1lcmFfZGF0YSAqZGF0YSwKKwkJY29uc3Qgc3RydWN0IG14Ml9jYW1lcmFfcGxhdGZvcm1fZGF0YSAqcGRhdGEpOworCisjaW5jbHVkZSA8bWFjaC9teGNfZWhjaS5oPgorc3RydWN0IGlteF9teGNfZWhjaV9kYXRhIHsKKwlpbnQgaWQ7CisJcmVzb3VyY2Vfc2l6ZV90IGlvYmFzZTsKKwlyZXNvdXJjZV9zaXplX3QgaXJxOworfTsKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKl9faW5pdCBpbXhfYWRkX214Y19laGNpKAorCQljb25zdCBzdHJ1Y3QgaW14X214Y19laGNpX2RhdGEgKmRhdGEsCisJCWNvbnN0IHN0cnVjdCBteGNfdXNiaF9wbGF0Zm9ybV9kYXRhICpwZGF0YSk7CisKKyNpbmNsdWRlIDxtYWNoL21tYy5oPgorc3RydWN0IGlteF9teGNfbW1jX2RhdGEgeworCWludCBpZDsKKwlyZXNvdXJjZV9zaXplX3QgaW9iYXNlOworCXJlc291cmNlX3NpemVfdCBpb3NpemU7CisJcmVzb3VyY2Vfc2l6ZV90IGlycTsKKwlyZXNvdXJjZV9zaXplX3QgZG1hcmVxOworfTsKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKl9faW5pdCBpbXhfYWRkX214Y19tbWMoCisJCWNvbnN0IHN0cnVjdCBpbXhfbXhjX21tY19kYXRhICpkYXRhLAorCQljb25zdCBzdHJ1Y3QgaW14bW1jX3BsYXRmb3JtX2RhdGEgKnBkYXRhKTsKKwogI2luY2x1ZGUgPG1hY2gvbXhjX25hbmQuaD4KIHN0cnVjdCBpbXhfbXhjX25hbmRfZGF0YSB7CiAJLyoKQEAgLTk5LDYgKzIyOCwzMSBAQAogCQljb25zdCBzdHJ1Y3QgaW14X214Y19uYW5kX2RhdGEgKmRhdGEsCiAJCWNvbnN0IHN0cnVjdCBteGNfbmFuZF9wbGF0Zm9ybV9kYXRhICpwZGF0YSk7CiAKK3N0cnVjdCBpbXhfbXhjX3B3bV9kYXRhIHsKKwlpbnQgaWQ7CisJcmVzb3VyY2Vfc2l6ZV90IGlvYmFzZTsKKwlyZXNvdXJjZV9zaXplX3QgaW9zaXplOworCXJlc291cmNlX3NpemVfdCBpcnE7Cit9Oworc3RydWN0IHBsYXRmb3JtX2RldmljZSAqX19pbml0IGlteF9hZGRfbXhjX3B3bSgKKwkJY29uc3Qgc3RydWN0IGlteF9teGNfcHdtX2RhdGEgKmRhdGEpOworCitzdHJ1Y3QgaW14X214Y193MV9kYXRhIHsKKwlyZXNvdXJjZV9zaXplX3QgaW9iYXNlOworfTsKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKl9faW5pdCBpbXhfYWRkX214Y193MSgKKwkJY29uc3Qgc3RydWN0IGlteF9teGNfdzFfZGF0YSAqZGF0YSk7CisKKyNpbmNsdWRlIDxtYWNoL2VzZGhjLmg+CitzdHJ1Y3QgaW14X3NkaGNpX2VzZGhjX2lteF9kYXRhIHsKKwlpbnQgaWQ7CisJcmVzb3VyY2Vfc2l6ZV90IGlvYmFzZTsKKwlyZXNvdXJjZV9zaXplX3QgaXJxOworfTsKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKl9faW5pdCBpbXhfYWRkX3NkaGNpX2VzZGhjX2lteCgKKwkJY29uc3Qgc3RydWN0IGlteF9zZGhjaV9lc2RoY19pbXhfZGF0YSAqZGF0YSwKKwkJY29uc3Qgc3RydWN0IGVzZGhjX3BsYXRmb3JtX2RhdGEgKnBkYXRhKTsKKwogI2luY2x1ZGUgPG1hY2gvc3BpLmg+CiBzdHJ1Y3QgaW14X3NwaV9pbXhfZGF0YSB7CiAJY29uc3QgY2hhciAqZGV2aWQ7CkBAIC0xMTAsMTMgKzI2NCwzIEBACiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpfX2luaXQgaW14X2FkZF9zcGlfaW14KAogCQljb25zdCBzdHJ1Y3QgaW14X3NwaV9pbXhfZGF0YSAqZGF0YSwKIAkJY29uc3Qgc3RydWN0IHNwaV9pbXhfbWFzdGVyICpwZGF0YSk7Ci0KLSNpbmNsdWRlIDxtYWNoL2VzZGhjLmg+Ci1zdHJ1Y3QgaW14X2VzZGhjX2lteF9kYXRhIHsKLQlpbnQgaWQ7Ci0JcmVzb3VyY2Vfc2l6ZV90IGlvYmFzZTsKLQlyZXNvdXJjZV9zaXplX3QgaXJxOwotfTsKLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKl9faW5pdCBpbXhfYWRkX2VzZGhjKAotCQljb25zdCBzdHJ1Y3QgaW14X2VzZGhjX2lteF9kYXRhICpkYXRhLAotCQljb25zdCBzdHJ1Y3QgZXNkaGNfcGxhdGZvcm1fZGF0YSAqcGRhdGEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUwppbmRleCBhZWIwODY5Li5iZDliYjk3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUworKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUwpAQCAtNTQsMTUgKzU0LDE1IEBACiAjZWxpZiBkZWZpbmVkIENPTkZJR19NWENfVFpJQwogCUAgTG9hZCBvZmZzZXQgJiBwcmlvcml0eSBvZiB0aGUgaGlnaGVzdCBwcmlvcml0eQogCUAgaW50ZXJydXB0IHBlbmRpbmcuCisJQCAweDA4MCBpcyBJTlRTRUMwIHJlZ2lzdGVyCiAJQCAweEQ4MCBpcyBISVBORDAgcmVnaXN0ZXIKIAltb3YgICAgIFxpcnFuciwgIzAKLQltb3YgICAgIFxpcnFzdGF0LCAjMHgwRDgwCi0xMDAwOgotCWxkciAgICAgXHRtcCwgICBbXGlycXN0YXQsIFxiYXNlXQotCWNtcCAgICAgXHRtcCwgIzAKLQlibmUgICAgIDEwMDFmCi0JYWRkZXEgICBcaXJxbnIsIFxpcnFuciwgIzMyCi0JYWRkZXEgICBcaXJxc3RhdCwgXGlycXN0YXQsICM0CisxMDAwOglhZGQJXGlycXN0YXQsIFxiYXNlLCBcaXJxbnIsIGxzciAjMworCWxkcglcdG1wLCBbXGlycXN0YXQsICMweGQ4MF0KKwlsZHIJXGlycXN0YXQsIFtcaXJxc3RhdCwgIzB4MDgwXQorCWFuZHMJXHRtcCwgXHRtcCwgXGlycXN0YXQKKwlibmUJMTAwMWYKKwlhZGQJXGlycW5yLCBcaXJxbnIsICMzMgogCWNtcCAgICAgXGlycW5yLCAjMTI4CiAJYmxvICAgICAxMDAwYgogCWIgICAgICAgMjAwMWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ncGlvLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvZ3Bpby5oCmluZGV4IGFmMzNiNzQuLjAwNDRlMmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ncGlvLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2dwaW8uaApAQCAtMjMsNiArMjMsMTEgQEAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZ3Bpby5oPgogCisKKy8qIFRoZXJlJ3MgYSBvZmYtYnktb25lIGJldHdlZW0gdGhlIGdwaW8gYmFuayBudW1iZXIgYW5kIHRoZSBncGlvY2hpcCAqLworLyogcmFuZ2UgZS5nLiBHUElPXzFfNSBpcyBncGlvIDUgdW5kZXIgbGludXggKi8KKyNkZWZpbmUgSU1YX0dQSU9fTlIoYmFuaywgbnIpCQkoKChiYW5rKSAtIDEpICogMzIgKyAobnIpKQorCiAvKiB1c2UgZ3Bpb2xpYiBkaXNwYXRjaGVycyAqLwogI2RlZmluZSBncGlvX2dldF92YWx1ZQkJX19ncGlvX2dldF92YWx1ZQogI2RlZmluZSBncGlvX3NldF92YWx1ZQkJX19ncGlvX3NldF92YWx1ZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaAppbmRleCBlYmFkZjRhLi4yNmJiMWJhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaApAQCAtMjIsMTMgKzIyLDkyIEBACiAKICNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KIAotI2RlZmluZSBJTVhfSU9fQUREUkVTUyhhZGRyLCBtb2R1bGUpCQkJCQlcCi0JKCh2b2lkIF9fZm9yY2UgX19pb21lbSAqKQkJCQkJXAotCSAoKCh1bnNpZ25lZCBsb25nKSgoYWRkcikgLSAobW9kdWxlICMjIF9CQVNFX0FERFIpKSA8IG1vZHVsZSAjIyBfU0laRSkgP1wKLQkgKGFkZHIpIC0gKG1vZHVsZSAjIyBfQkFTRV9BRERSKSArIChtb2R1bGUgIyMgX0JBU0VfQUREUl9WSVJUKSA6IDApKQorI2lmZGVmIF9fQVNTRU1CTEVSX18KKyNkZWZpbmUgSU9NRU0oYWRkcikJKGFkZHIpCisjZWxzZQorI2RlZmluZSBJT01FTShhZGRyKQkoKHZvaWQgX19mb3JjZSBfX2lvbWVtICopKGFkZHIpKQorI2VuZGlmCisKKyNkZWZpbmUgSU1YX0lPX1AyVl9NT0RVTEUoYWRkciwgbW9kdWxlKQkJCQkJXAorCSgoKGFkZHIpIC0gbW9kdWxlICMjIF9CQVNFX0FERFIpIDwgbW9kdWxlICMjIF9TSVpFID8JCVwKKwkgKGFkZHIpIC0gKG1vZHVsZSAjIyBfQkFTRV9BRERSKSArIChtb2R1bGUgIyMgX0JBU0VfQUREUl9WSVJUKSA6IDApCisKKy8qCisgKiBUaGlzIGlzIHJhdGhlciBjb21wbGljYXRlZCBmb3IgaHVtYW5zIGFuZCB1Z2x5IHRvIHZlcmlmeSwgYnV0IGZvciBhIG1hY2hpbmUKKyAqIGl0J3MgT0suICBTdGlsbCBtb3JlIGFzIGl0IGlzIHVzdWFsbHkgb25seSBhcHBsaWVkIHRvIGNvbnN0YW50cy4gIFRoZSB1cHNpZGVzCisgKiBvbiB1c2luZyB0aGlzIGFwcHJvYWNoIGFyZToKKyAqCisgKiAgLSBzYW1lIG1hcHBpbmcgb24gYWxsIGkuTVggbWFjaGluZXMKKyAqICAtIHdvcmtzIGZvciBhc3NlbWJsZXIsIHRvbworICogIC0gbm8gbmVlZCB0byBudXJ0dXJlICNkZWZpbmVzIGZvciB2aXJ0dWFsIGFkZHJlc3NlcworICoKKyAqIFRoZSBkb3duc2lkZSBpdCwgaXQncyBoYXJkIHRvIHZlcmlmeSAoYnV0IEkgaGF2ZSBhIHNjcmlwdCBmb3IgdGhhdCkuCisgKgorICogT2J2aW91c2x5IHRoaXMgbmVlZHMgdG8gYmUgaW5qZWN0aXZlIGZvciBlYWNoIFNvQy4gIEluIGdlbmVyYWwgaXQgbWFwcyB0aGUKKyAqIHdob2xlIGFkZHJlc3Mgc3BhY2UgdG8gWzB4ZjQwMDAwMDAsIDB4ZjVmZmZmZmZdLiAgU28gWzB4ZjYwMDAwMDAsMHhmZWZmZmZmZl0KKyAqIGlzIGZyZWUgZm9yIHBlci1tYWNoaW5lIHVzZSAoZS5nLiBLWk1fQVJNMTFfMDEgdXNlcyA2NE1pQiB0aGVyZSkuCisgKgorICogSXQgYXBwbGllcyB0aGUgZm9sbG93aW5nIG1hcHBpbmdzIGZvciB0aGUgZGlmZmVyZW50IFNvQ3M6CisgKgorICogbXgxOgorICoJSU8JMHgwMDIwMDAwMCsweDEwMDAwMAktPgkweGY0MDAwMDAwKzB4MTAwMDAwCisgKiBteDIxOgorICoJQUlQSQkweDEwMDAwMDAwKzB4MTAwMDAwCS0+CTB4ZjQ0MDAwMDArMHgxMDAwMDAKKyAqCVNBSEIxCTB4ODAwMDAwMDArMHgxMDAwMDAJLT4JMHhmNDAwMDAwMCsweDEwMDAwMAorICoJWF9NRU1DCTB4ZGYwMDAwMDArMHgwMDQwMDAJLT4JMHhmNWYwMDAwMCsweDAwNDAwMAorICogbXgyNToKKyAqCUFJUFMxCTB4NDNmMDAwMDArMHgxMDAwMDAJLT4JMHhmNTMwMDAwMCsweDEwMDAwMAorICoJQUlQUzIJMHg1M2YwMDAwMCsweDEwMDAwMAktPgkweGY1NzAwMDAwKzB4MTAwMDAwCisgKglBVklDCTB4NjgwMDAwMDArMHgxMDAwMDAJLT4JMHhmNTgwMDAwMCsweDEwMDAwMAorICogbXgyNzoKKyAqCUFJUEkJMHgxMDAwMDAwMCsweDEwMDAwMAktPgkweGY0NDAwMDAwKzB4MTAwMDAwCisgKglTQUhCMQkweDgwMDAwMDAwKzB4MTAwMDAwCS0+CTB4ZjQwMDAwMDArMHgxMDAwMDAKKyAqCVhfTUVNQwkweGQ4MDAwMDAwKzB4MTAwMDAwCS0+CTB4ZjVjMDAwMDArMHgxMDAwMDAKKyAqIG14MzE6CisgKglBSVBTMQkweDQzZjAwMDAwKzB4MTAwMDAwCS0+CTB4ZjUzMDAwMDArMHgxMDAwMDAKKyAqCUFJUFMyCTB4NTNmMDAwMDArMHgxMDAwMDAJLT4JMHhmNTcwMDAwMCsweDEwMDAwMAorICoJQVZJQwkweDY4MDAwMDAwKzB4MTAwMDAwCS0+CTB4ZjU4MDAwMDArMHgxMDAwMDAKKyAqCVhfTUVNQwkweGI4MDAwMDAwKzB4MDEwMDAwCS0+CTB4ZjRjMDAwMDArMHgwMTAwMDAKKyAqCVNQQkEwCTB4NTAwMDAwMDArMHgxMDAwMDAJLT4JMHhmNTQwMDAwMCsweDEwMDAwMAorICogbXgzNToKKyAqCUFJUFMxCTB4NDNmMDAwMDArMHgxMDAwMDAJLT4JMHhmNTMwMDAwMCsweDEwMDAwMAorICoJQUlQUzIJMHg1M2YwMDAwMCsweDEwMDAwMAktPgkweGY1NzAwMDAwKzB4MTAwMDAwCisgKglBVklDCTB4NjgwMDAwMDArMHgxMDAwMDAJLT4JMHhmNTgwMDAwMCsweDEwMDAwMAorICoJWF9NRU1DCTB4YjgwMDAwMDArMHgwMTAwMDAJLT4JMHhmNGMwMDAwMCsweDAxMDAwMAorICoJU1BCQTAJMHg1MDAwMDAwMCsweDEwMDAwMAktPgkweGY1NDAwMDAwKzB4MTAwMDAwCisgKiBteDUwOgorICoJVFpJQwkweDBmZmZjMDAwKzB4MDA0MDAwCS0+CTB4ZjRiZmMwMDArMHgwMDQwMDAKKyAqCVNQQkEwCTB4NTAwMDAwMDArMHgxMDAwMDAJLT4JMHhmNTQwMDAwMCsweDEwMDAwMAorICoJQUlQUzEJMHg1M2YwMDAwMCsweDEwMDAwMAktPgkweGY1NzAwMDAwKzB4MTAwMDAwCisgKglBSVBTMgkweDYzZjAwMDAwKzB4MTAwMDAwCS0+CTB4ZjUzMDAwMDArMHgxMDAwMDAKKyAqIG14NTE6CisgKglJUkFNCTB4MWZmZTAwMDArMHgwMjAwMDAJLT4JMHhmNGZlMDAwMCsweDAyMDAwMAorICoJREVCVUcJMHg2MDAwMDAwMCsweDEwMDAwMAktPgkweGY1MDAwMDAwKzB4MTAwMDAwCisgKglTUEJBMAkweDcwMDAwMDAwKzB4MTAwMDAwCS0+CTB4ZjU0MDAwMDArMHgxMDAwMDAKKyAqCUFJUFMxCTB4NzNmMDAwMDArMHgxMDAwMDAJLT4JMHhmNTcwMDAwMCsweDEwMDAwMAorICoJQUlQUzIJMHg4M2YwMDAwMCsweDEwMDAwMAktPgkweGY0MzAwMDAwKzB4MTAwMDAwCisgKiBteGM5MTIzMToKKyAqCUwyQ0MJMHgzMDAwMDAwMCsweDAxMDAwMAktPgkweGY0NDAwMDAwKzB4MDEwMDAwCisgKglYX01FTUMJMHhiODAwMDAwMCsweDAxMDAwMAktPgkweGY0YzAwMDAwKzB4MDEwMDAwCisgKglST01QCTB4NjAwMDAwMDArMHgwMTAwMDAJLT4JMHhmNTAwMDAwMCsweDAxMDAwMAorICoJQVZJQwkweDY4MDAwMDAwKzB4MDEwMDAwCS0+CTB4ZjU4MDAwMDArMHgwMTAwMDAKKyAqCUFJUFMxCTB4NDNmMDAwMDArMHgxMDAwMDAJLT4JMHhmNTMwMDAwMCsweDEwMDAwMAorICoJU1BCQTAJMHg1MDAwMDAwMCsweDEwMDAwMAktPgkweGY1NDAwMDAwKzB4MTAwMDAwCisgKglTUEJBMQkweDUyMDAwMDAwKzB4MTAwMDAwCS0+CTB4ZjU2MDAwMDArMHgxMDAwMDAKKyAqCUFJUFMyCTB4NTNmMDAwMDArMHgxMDAwMDAJLT4JMHhmNTcwMDAwMCsweDEwMDAwMAorICovCisjZGVmaW5lIElNWF9JT19QMlYoeCkJKAkJCQkJCVwKKwkJCTB4ZjQwMDAwMDAgKwkJCQkJXAorCQkJKCgoeCkgJiAweDUwMDAwMDAwKSA+PiA2KSArCQkJXAorCQkJKCgoeCkgJiAweDBiMDAwMDAwKSA+PiA0KSArCQkJXAorCQkJKCgoeCkgJiAweDAwMGZmZmZmKSkpCisKKyNkZWZpbmUgSU1YX0lPX0FERFJFU1MoeCkJSU9NRU0oSU1YX0lPX1AyVih4KSkKIAogI2lmZGVmIENPTkZJR19BUkNIX01YNQorI2luY2x1ZGUgPG1hY2gvbXg1MC5oPgogI2luY2x1ZGUgPG1hY2gvbXg1MS5oPgorI2luY2x1ZGUgPG1hY2gvbXg1My5oPgogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfQVJDSF9NWDMKQEAgLTYxLDQgKzE0MCwxMSBAQAogCiAjaW5jbHVkZSA8bWFjaC9teGMuaD4KIAorI2RlZmluZSBpbXhfbWFwX2VudHJ5KHNvYywgbmFtZSwgX3R5cGUpCXsJCQkJXAorCS52aXJ0dWFsID0gc29jICMjIF9JT19QMlYoc29jICMjIF8gIyMgbmFtZSAjIyBfQkFTRV9BRERSKSwJXAorCS5wZm4gPSBfX3BoeXNfdG9fcGZuKHNvYyAjIyBfICMjIG5hbWUgIyMgX0JBU0VfQUREUiksCQlcCisJLmxlbmd0aCA9IHNvYyAjIyBfICMjIG5hbWUgIyMgX1NJWkUsCQkJCVwKKwkudHlwZSA9IF90eXBlLAkJCQkJCQlcCit9CisKICNlbmRpZiAvKiBfX0FTTV9BUkNIX01YQ19IQVJEV0FSRV9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pbXhmYi5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lteGZiLmgKaW5kZXggNTI2MzUwNi4uOWRlOGYwNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lteGZiLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lteGZiLmgKQEAgLTEsNiArMSw4IEBACiAvKgogICogVGhpcyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIHRoZSBtYWNoaW5lIHdoaWNoIHdlIGFyZSBydW5uaW5nIG9uLgogICovCisjaWZuZGVmIF9fTUFDSF9JTVhGQl9IX18KKyNkZWZpbmUgX19NQUNIX0lNWEZCX0hfXwogCiAjaW5jbHVkZSA8bGludXgvZmIuaD4KIApAQCAtNzksMyArODEsNCBAQAogfTsKIAogdm9pZCBzZXRfaW14X2ZiX2luZm8oc3RydWN0IGlteF9mYl9wbGF0Zm9ybV9kYXRhICopOworI2VuZGlmIC8qIGlmbmRlZiBfX01BQ0hfSU1YRkJfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtbXg1MC5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lvbXV4LW14NTAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNThhOTIyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lvbXV4LW14NTAuaApAQCAtMCwwICsxLDk3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqLworCisjaWZuZGVmIF9fTUFDSF9JT01VWF9NWDUwX0hfXworI2RlZmluZSBfX01BQ0hfSU9NVVhfTVg1MF9IX18KKworI2luY2x1ZGUgPG1hY2gvaW9tdXgtdjMuaD4KKworI2RlZmluZSBNWDUwX0VMQ0RJRl9QQURfQ1RSTAkoUEFEX0NUTF9QS0UgfCBQQURfQ1RMX0RTRV9ISUdIKQorCisjZGVmaW5lIE1YNTBfU0RfUEFEX0NUUkwJKFBBRF9DVExfSFlTIHwgUEFEX0NUTF9QS0UgfCBQQURfQ1RMX1BVRSB8IFwKKwkJCQkJUEFEX0NUTF9QVVNfNDdLX1VQIHwgUEFEX0NUTF9EU0VfSElHSCkKKworI2RlZmluZSBNWDUwX1VBUlRfUEFEX0NUUkwJKFBBRF9DVExfRFNFX0hJR0ggfCBQQURfQ1RMX1BLRSkKKworI2RlZmluZSBNWDUwX0kyQ19QQURfQ1RSTAkoUEFEX0NUTF9PREUgfCBQQURfQ1RMX0RTRV9ISUdIIHwgXAorCQkJCQlQQURfQ1RMX1BVU18xMDBLX1VQIHwgUEFEX0NUTF9IWVMpCisKKyNkZWZpbmUgTVg1MF9VU0JfUEFEX0NUUkwJKFBBRF9DVExfUEtFIHwgUEFEX0NUTF9QVUUgfCBcCisJCQkJCVBBRF9DVExfRFNFX0hJR0ggfCBQQURfQ1RMX1BVU180N0tfVVApCisKKyNkZWZpbmUgTVg1MF9GRUNfUEFEX0NUUkwJKFBBRF9DVExfSFlTIHwgUEFEX0NUTF9QS0UgfCBQQURfQ1RMX1BVRSB8IFwKKwkJCQkJUEFEX0NUTF9QVVNfMjJLX1VQIHwgUEFEX0NUTF9PREUgfCBcCisJCQkJCVBBRF9DVExfRFNFX0hJR0gpCisKKyNkZWZpbmUgTVg1MF9PV0lSRV9QQURfQ1RSTAkoUEFEX0NUTF9IWVMgfCBQQURfQ1RMX1BLRSB8IFBBRF9DVExfUFVFIHwgXAorCQkJCQlQQURfQ1RMX1BVU18xMDBLX1VQIHwgUEFEX0NUTF9PREUgfCBcCisJCQkJCVBBRF9DVExfRFNFX0hJR0ggfCBQQURfQ1RMX1NSRV9GQVNUKQorCisjZGVmaW5lIE1YNTBfS0VZUEFEX0NUUkwgICAgICAgIChQQURfQ1RMX0hZUyB8IFBBRF9DVExfUEtFIHwgUEFEX0NUTF9QVUUgfCBcCisJCQkJCVBBRF9DVExfUFVTXzEwMEtfVVAgfCBQQURfQ1RMX0RTRV9ISUdIKQorCisjZGVmaW5lIE1YNTBfQ1NQSV9TU19QQUQJKFBBRF9DVExfUEtFIHwgUEFEX0NUTF9QVUUgfCBcCisJCQkJCVBBRF9DVExfUFVTXzIyS19VUCB8IFBBRF9DVExfRFNFX0hJR0gpCisKKyNkZWZpbmUgTVg1MF9QQURfS0VZX0NPTDBfX0tFWV9DT0wwCUlPTVVYX1BBRCgweDJDQywgMHgyMCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfS0VZX0NPTDBfX0dQSU9fNF8wCUlPTVVYX1BBRCgweDJDQywgMHgyMCwgMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfS0VZX0NPTDBfX05BTkRGX0NMRQlJT01VWF9QQUQoMHgyQ0MsIDB4MjAsIDIsIDB4MCwgMCwgUEFEX0NUTF9EU0VfSElHSCkKKworI2RlZmluZSBNWDUwX1BBRF9LRVlfUk9XMF9fS0VZX1JPVzAJSU9NVVhfUEFEKDB4MkQwLCAweDI0LCAwLCAweDAsIDAsIE1YNTBfS0VZUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0tFWV9ST1cwX19HUElPXzRfMQlJT01VWF9QQUQoMHgyRDAsIDB4MjQsIDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0tFWV9ST1cwX19OQU5ERl9BTEUJSU9NVVhfUEFEKDB4MkQwLCAweDI0LCAyLCAweDAsIDAsIFBBRF9DVExfRFNFX0hJR0gpCisKKyNkZWZpbmUgTVg1MF9QQURfS0VZX0NPTDFfX0tFWV9DT0wxCUlPTVVYX1BBRCgweDJENCwgMHgyOCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfS0VZX0NPTDFfX0dQSU9fNF8yCUlPTVVYX1BBRCgweDJENCwgMHgyOCwgMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfS0VZX0NPTDFfX05BTkRGX0NFMAlJT01VWF9QQUQoMHgyRDQsIDB4MjgsIDIsIDB4MCwgMCwgUEFEX0NUTF9EU0VfSElHSCkKKworI2RlZmluZSBNWDUwX1BBRF9LRVlfUk9XMV9fS0VZX1JPVzEJSU9NVVhfUEFEKDB4MkQ4LCAweDJDLCAwLCAweDAsIDAsIE1YNTBfS0VZUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0tFWV9ST1cxX19HUElPXzRfMwlJT01VWF9QQUQoMHgyRDgsIDB4MkMsIDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0tFWV9ST1cxX19OQU5ERl9DRTEJSU9NVVhfUEFEKDB4MkQ4LCAweDJDLCAyLCAweDAsIDAsIFBBRF9DVExfRFNFX0hJR0gpCisKKyNkZWZpbmUgTVg1MF9QQURfS0VZX0NPTDJfX0tFWV9DT0wyCUlPTVVYX1BBRCgweDJEQywgMHgzMCwgMCwgMHgwLCAwLCBNWDUwX0tFWVBBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9LRVlfQ09MMl9fR1BJT180XzQJSU9NVVhfUEFEKDB4MkRDLCAweDMwLCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9LRVlfQ09MMl9fTkFOREZfQ0UyCUlPTVVYX1BBRCgweDJEQywgMHgzMCwgMiwgMHgwLCAwLCBQQURfQ1RMX0RTRV9ISUdIKQorCisjZGVmaW5lIE1YNTBfUEFEX0tFWV9ST1cyX19LRVlfUk9XMglJT01VWF9QQUQoMHgyRTAsIDB4MzQsIDAsIDB4MCwgMCwgTVg1MF9LRVlQQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfS0VZX1JPVzJfX0dQSU9fNF81CUlPTVVYX1BBRCgweDJFMCwgMHgzNCwgMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfS0VZX1JPVzJfX05BTkRGX0NFMwlJT01VWF9QQUQoMHgyRTAsIDB4MzQsIDIsIDB4MCwgMCwgUEFEX0NUTF9EU0VfSElHSCkKKworI2RlZmluZSBNWDUwX1BBRF9LRVlfQ09MM19fS0VZX0NPTDMJSU9NVVhfUEFEKDB4MkU0LCAweDM4LCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9LRVlfQ09MM19fR1BJT180XzYJSU9NVVhfUEFEKDB4MkU0LCAweDM4LCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9LRVlfQ09MM19fTkFOREZfUkVBRFkJSU9NVVhfUEFEKDB4MkU0LCAweDM4LCAyLCAweDdiNCwgMCwgUEFEX0NUTF9QS0UgfCBcCisJCQkJCQkJUEFEX0NUTF9QVUUgfCBQQURfQ1RMX1BVU18xMDBLX1VQKQorI2RlZmluZSBNWDUwX1BBRF9LRVlfQ09MM19fU0RNQV9FWFQwCUlPTVVYX1BBRCgweDJFNCwgMHgzOCwgNiwgMHg3YjgsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTBfUEFEX0tFWV9ST1czX19LRVlfUk9XMwlJT01VWF9QQUQoMHgyRTgsIDB4M0MsIDAsIDB4MCwgMCwgTVg1MF9LRVlQQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfS0VZX1JPVzNfX0dQSU9fNF83CUlPTVVYX1BBRCgweDJFOCwgMHgzQywgMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfS0VZX1JPVzNfX05BTkRGX0RRUwlJT01VWF9QQUQoMHgyRTgsIDB4M0MsIDIsIDB4N2IwLCAwLCBQQURfQ1RMX0RTRV9ISUdIKQorI2RlZmluZSBNWDUwX1BBRF9LRVlfUk9XM19fU0RNQV9FWFQxCUlPTVVYX1BBRCgweDJFOCwgMHgzQywgNiwgMHg3YmMsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTBfUEFEX0kyQzFfU0NMX19JMkMxX1NDTAlJT01VWF9QQUQoMHgyRUMsIDB4NDAsIElPTVVYX0NPTkZJR19TSU9OLCAweDAsIDAsIFwKKwkJCQkJCQlNWDUwX0kyQ19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfSTJDMV9TQ0xfX0dQSU9fNl8xOAlJT01VWF9QQUQoMHgyRUMsIDB4NDAsIDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0kyQzFfU0NMX19VQVJUMl9UWEQJSU9NVVhfUEFEKDB4MkVDLCAweDQwLCAyLCAweDdjYywgMCwgTVg1MF9VQVJUX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTBfUEFEX0kyQzFfU0RBX19JMkMxX1NEQQlJT01VWF9QQUQoMHgyRjAsIDB4NDQsIElPTVVYX0NPTkZJR19TSU9OLCAweDAsIDAsIFwKKwkJCQkJCQlNWDUwX0kyQ19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfSTJDMV9TREFfX0dQSU9fNl8xOQlJT01VWF9QQUQoMHgyRjAsIDB4NDQsIDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0kyQzFfU0RBX19VQVJUMl9SWEQJSU9NVVhfUEFEKDB4MkYwLCAweDQ0LCAyLCAweDdjYywgMSwgTVg1MF9VQVJUX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTBfUEFEX0kyQzJfU0NMX19JMkMyX1NDTAlJT01VWF9QQUQoMHgyRjQsIDB4NDgsIElPTVVYX0NPTkZJR19TSU9OLCAweDAsIDAsIFwKKwkJCQkJCQlNWDUwX0kyQ19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfSTJDMl9TQ0xfX0dQSU9fNl8yMAlJT01VWF9QQUQoMHgyRjQsIDB4NDgsIDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0kyQzJfU0NMX19VQVJUMl9DVFMJSU9NVVhfUEFEKDB4MkY0LCAweDQ4LCAyLCAweDdjOCwgMCwgTVg1MF9VQVJUX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9JMkMyX1NDTF9fRENEQ19PSwlJT01VWF9QQUQoMHgyRjQsIDB4NDgsIDcsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVg1MF9QQURfSTJDMl9TREFfX0kyQzJfU0RBCUlPTVVYX1BBRCgweDJGOCwgMHg0QywgSU9NVVhfQ09ORklHX1NJT04sIDB4MCwgMCwgXAorCQkJCQkJCU1YNTBfSTJDX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9JMkMyX1NEQV9fR1BJT182XzIxCUlPTVVYX1BBRCgweDJGOCwgMHg0QywgMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfSTJDMl9TREFfX1VBUlQyX1JUUwlJT01VWF9QQUQoMHgyRjgsIDB4NEMsIDIsIDB4N2M4LCAxLCBNWDUwX1VBUlRfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0kyQzJfU0RBX19QV1JTVEFCTEUJSU9NVVhfUEFEKDB4MkY4LCAweDRDLCA3LCAweDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTBfUEFEX0kyQzNfU0NMX19JMkMzX1NDTAlJT01VWF9QQUQoMHgyRkMsIDB4NTAsIElPTVVYX0NPTkZJR19TSU9OLCAweDAsIDAsIFwKKwkJCQkJCQlNWDUwX0kyQ19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfSTJDM19TQ0xfX0dQSU9fNl8yMglJT01VWF9QQUQoMHgyRkMsIDB4NTAsIDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0kyQzNfU0NMX19GRUNfTURDCUlPTVVYX1BBRCgweDJGQywgMHg1MCwgMiwgMHgwLCAwLCBQQURfQ1RMX0RTRV9ISUdIKQorI2RlZmluZSBNWDUwX1BBRF9JMkMzX1NDTF9fUE1JQ19SRFkJSU9NVVhfUEFEKDB4MkZDLCAweDUwLCAzLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9JMkMzX1NDTF9fR1BUX0NBUElOMQlJT01VWF9QQUQoMHgyRkMsIDB4NTAsIDUsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0kyQzNfU0NMX19VU0JPVEdfT0MJSU9NVVhfUEFEKDB4MkZDLCAweDUwLCA3LCAweDdFOCwgMCwgTVg1MF9VU0JfUEFEX0NUUkwpCisKKyNkZWZpbmUgTVg1MF9QQURfSTJDM19TREFfX0kyQzNfU0RBCUlPTVVYX1BBRCgweDMwMCwgMHg1NCwgSU9NVVhfQ09ORklHX1NJT04sIDB4MCwgMCwgXAorCQkJCQkJCQlNWDUwX0kyQ19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfSTJDM19TREFfX0dQSU9fNl8yMwlJT01VWF9QQUQoMHgzMDAsIDB4NTQsIDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0kyQzNfU0RBX19GRUNfTURJTwlJT01VWF9QQUQoMHgzMDAsIDB4NTQsIDIsIDB4Nzc0LCAwLCBNWDUwX0ZFQ19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfSTJDM19TREFfX1BXUkZBSUxfSU5UCUlPTVVYX1BBRCgweDMwMCwgMHg1NCwgMywgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfSTJDM19TREFfX0FMQVJNX0RFQglJT01VWF9QQUQoMHgzMDAsIDB4NTQsIDQsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0kyQzNfU0RBX19HUFRfQ0FQSU4xCUlPTVVYX1BBRCgweDMwMCwgMHg1NCwgNSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfSTJDM19TREFfX1VTQk9UR19QV1IJSU9NVVhfUEFEKDB4MzAwLCAweDU0LCA3LCAweDAsIDAsIFwKKwkJCQkJCQlQQURfQ1RMX1BLRSB8IFBBRF9DVExfRFNFX0hJR0gpCisKKyNkZWZpbmUgTVg1MF9QQURfUFdNMV9fUFdNMV9QV01PCUlPTVVYX1BBRCgweDMwNCwgMHg1OCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfUFdNMV9fR1BJT182XzI0CUlPTVVYX1BBRCgweDMwNCwgMHg1OCwgMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfUFdNMV9fVVNCT1RHX09DCUlPTVVYX1BBRCgweDMwNCwgMHg1OCwgMiwgMHg3RTgsIDEsIE1YNTBfVVNCX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9QV00xX19HUFRfQ01QT1VUMQlJT01VWF9QQUQoMHgzMDQsIDB4NTgsIDUsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVg1MF9QQURfUFdNMl9fUFdNMl9QV01PCUlPTVVYX1BBRCgweDMwOCwgMHg1QywgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfUFdNMl9fR1BJT182XzI1CUlPTVVYX1BBRCgweDMwOCwgMHg1QywgMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfUFdNMl9fVVNCT1RHX1BXUglJT01VWF9QQUQoMHgzMDgsIDB4NUMsIDIsIDB4MCwgMCwgXAorCQkJCQkJCVBBRF9DVExfUEtFIHwgUEFEX0NUTF9EU0VfSElHSCkKKyNkZWZpbmUgTVg1MF9QQURfUFdNMl9fRENEQ19QV00JCUlPTVVYX1BBRCgweDMwOCwgMHg1QywgNCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfUFdNMl9fR1BUX0NNUE9VVDIJSU9NVVhfUEFEKDB4MzA4LCAweDVDLCA1LCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9QV00yX19BTllfUFVfUlNUCUlPTVVYX1BBRCgweDMwOCwgMHg1QywgNywgMHgwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDUwX1BBRF9PV0lSRV9fT1dJUkUJCUlPTVVYX1BBRCgweDMwQywgMHg2MCwgMCwgMHgwLCAwLCBNWDUwX09XSVJFX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9PV0lSRV9fR1BJT182XzI2CUlPTVVYX1BBRCgweDMwQywgMHg2MCwgMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfT1dJUkVfX1VTQkgxX09DCUlPTVVYX1BBRCgweDMwQywgMHg2MCwgMiwgMHgwLCAwLCBNWDUwX1VTQl9QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfT1dJUkVfX1NTSV9FWFQxX0NMSwlJT01VWF9QQUQoMHgzMEMsIDB4NjAsIDMsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX09XSVJFX19FUERDX1BXUklSUQlJT01VWF9QQUQoMHgzMEMsIDB4NjAsIDQsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX09XSVJFX19HUFRfQ01QT1VUMwlJT01VWF9QQUQoMHgzMEMsIDB4NjAsIDUsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVg1MF9QQURfRVBJVE9fX0VQSVRPCQlJT01VWF9QQUQoMHgzMTAsIDB4NjQsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VQSVRPX19HUElPXzZfMjcJSU9NVVhfUEFEKDB4MzEwLCAweDY0LCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9FUElUT19fVVNCSDFfUFdSCUlPTVVYX1BBRCgweDMxMCwgMHg2NCwgMiwgMHgwLCAwLCBcCisJCQkJCQkJUEFEX0NUTF9QS0UgfCBQQURfQ1RMX0RTRV9ISUdIKQorI2RlZmluZSBNWDUwX1BBRF9FUElUT19fU1NJX0VYVDJfQ0xLCUlPTVVYX1BBRCgweDMxMCwgMHg2NCwgMywgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRVBJVE9fX1RPR19FTgkJSU9NVVhfUEFEKDB4MzEwLCAweDY0LCA0LCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9FUElUT19fR1BUX0NMS0lOCUlPTVVYX1BBRCgweDMxMCwgMHg2NCwgNSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDUwX1BBRF9XRE9HX19XRE9HCQlJT01VWF9QQUQoMHgzMTQsIDB4NjgsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX1dET0dfX0dQSU9fNl8yOAlJT01VWF9QQUQoMHgzMTQsIDB4NjgsIDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX1dET0dfX1dET0dfUlNUCQlJT01VWF9QQUQoMHgzMTQsIDB4NjgsIDIsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX1dET0dfX1hUQUwzMksJCUlPTVVYX1BBRCgweDMxNCwgMHg2OCwgNiwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDUwX1BBRF9TU0lfVFhGU19fU1NJX1RYRlMJSU9NVVhfUEFEKDB4MzE4LCAweDZDLCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9TU0lfVFhGU19fR1BJT182XzAJSU9NVVhfUEFEKDB4MzE4LCAweDZDLCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTBfUEFEX1NTSV9UWENfX1NTSV9UWEMJSU9NVVhfUEFEKDB4MzFDLCAweDcwLCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9TU0lfVFhDX19HUElPXzZfMQlJT01VWF9QQUQoMHgzMUMsIDB4NzAsIDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVg1MF9QQURfU1NJX1RYRF9fU1NJX1RYRAlJT01VWF9QQUQoMHgzMjAsIDB4NzQsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX1NTSV9UWERfX0dQSU9fNl8yCUlPTVVYX1BBRCgweDMyMCwgMHg3NCwgMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfU1NJX1RYRF9fQ1NQSV9SRFkJSU9NVVhfUEFEKDB4MzIwLCAweDc0LCA0LCAweDZlOCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVg1MF9QQURfU1NJX1JYRF9fU1NJX1JYRAlJT01VWF9QQUQoMHgzMjQsIDB4NzgsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX1NTSV9SWERfX0dQSU9fNl8zCUlPTVVYX1BBRCgweDMyNCwgMHg3OCwgMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfU1NJX1JYRF9fQ1NQSV9TUzMJSU9NVVhfUEFEKDB4MzI0LCAweDc4LCA0LCAweDZmNCwgMCwgTVg1MF9DU1BJX1NTX1BBRCkKKworI2RlZmluZSBNWDUwX1BBRF9TU0lfUlhGU19fQVVEM19SWEZTCUlPTVVYX1BBRCgweDMyOCwgMHg3QywgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfU1NJX1JYRlNfX0dQSU9fNl80CUlPTVVYX1BBRCgweDMyOCwgMHg3QywgMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfU1NJX1JYRlNfX1VBUlQ1X1RYRAlJT01VWF9QQUQoMHgzMjgsIDB4N0MsIDIsIDB4N2U0LCAwLCBNWDUwX1VBUlRfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX1NTSV9SWEZTX19XRUlNX0Q2CUlPTVVYX1BBRCgweDMyOCwgMHg3QywgMywgMHg4MDQsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9TU0lfUlhGU19fQ1NQSV9TUzIJSU9NVVhfUEFEKDB4MzI4LCAweDdDLCA0LCAweDZmMCwgMCwgTVg1MF9DU1BJX1NTX1BBRCkKKyNkZWZpbmUgTVg1MF9QQURfU1NJX1JYRlNfX0ZFQ19DT0wJSU9NVVhfUEFEKDB4MzI4LCAweDdDLCA1LCAweDc3MCwgMCwgUEFEX0NUTF9EU0VfSElHSCkKKyNkZWZpbmUgTVg1MF9QQURfU1NJX1JYRlNfX0ZFQ19NREMJSU9NVVhfUEFEKDB4MzI4LCAweDdDLCA2LCAweDAsIDAsIFBBRF9DVExfRFNFX0hJR0gpCisKKyNkZWZpbmUgTVg1MF9QQURfU1NJX1JYQ19fQVVEM19SWEMJSU9NVVhfUEFEKDB4MzJDLCAweDgwLCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9TU0lfUlhDX19HUElPXzZfNQlJT01VWF9QQUQoMHgzMkMsIDB4ODAsIDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX1NTSV9SWENfX1VBUlQ1X1JYRAlJT01VWF9QQUQoMHgzMkMsIDB4ODAsIDIsIDB4N2U0LCAxLCBNWDUwX1VBUlRfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX1NTSV9SWENfX1dFSU1fRDcJSU9NVVhfUEFEKDB4MzJDLCAweDgwLCAzLCAweDgwOCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX1NTSV9SWENfX0NTUElfU1MxCUlPTVVYX1BBRCgweDMyQywgMHg4MCwgNCwgMHg2ZWMsIDAsIE1YNTBfQ1NQSV9TU19QQUQpCisjZGVmaW5lIE1YNTBfUEFEX1NTSV9SWENfX0ZFQ19SWF9DTEsJSU9NVVhfUEFEKDB4MzJDLCAweDgwLCA1LCAweDc4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX1NTSV9SWENfX0ZFQ19NRElPCUlPTVVYX1BBRCgweDMyQywgMHg4MCwgNiwgMHg3NzQsIDEsIE1YNTBfRkVDX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTBfUEFEX1VBUlQxX1RYRF9fVUFSVDFfVFhECUlPTVVYX1BBRCgweDMzMCwgMHg4NCwgMCwgMHg3YzQsIDAsIE1YNTBfVUFSVF9QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfVUFSVDFfVFhEX19HUElPXzZfNglJT01VWF9QQUQoMHgzMzAsIDB4ODQsIDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVg1MF9QQURfVUFSVDFfUlhEX19VQVJUMV9SWEQJSU9NVVhfUEFEKDB4MzM0LCAweDg4LCAwLCAweDdjNCwgMSwgTVg1MF9VQVJUX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9VQVJUMV9SWERfX0dQSU9fNl83CUlPTVVYX1BBRCgweDMzNCwgMHg4OCwgMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDUwX1BBRF9VQVJUMV9DVFNfX1VBUlQxX0NUUwlJT01VWF9QQUQoMHgzMzgsIDB4OEMsIDAsIDB4N2MwLCAwLCBNWDUwX1VBUlRfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX1VBUlQxX0NUU19fR1BJT182XzgJSU9NVVhfUEFEKDB4MzM4LCAweDhDLCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9VQVJUMV9DVFNfX1VBUlQ1X1RYRAlJT01VWF9QQUQoMHgzMzgsIDB4OEMsIDIsIDB4N2U0LCAyLCBNWDUwX1VBUlRfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX1VBUlQxX0NUU19fU0Q0X0Q0CUlPTVVYX1BBRCgweDMzOCwgMHg4QywgNCwgMHg3NjAsIDAsIE1YNTBfU0RfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX1VBUlQxX0NUU19fU0Q0X0NNRAlJT01VWF9QQUQoMHgzMzgsIDB4OEMsIDUsIDB4NzRjLCAwLCBNWDUwX1NEX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTBfUEFEX1VBUlQxX1JUU19fVUFSVDFfUlRTCUlPTVVYX1BBRCgweDMzQywgMHg5MCwgMCwgMHg3YzAsIDEsIE1YNTBfVUFSVF9QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfVUFSVDFfUlRTX19HUElPXzZfOQlJT01VWF9QQUQoMHgzM0MsIDB4OTAsIDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX1VBUlQxX1JUU19fVUFSVDVfUlhECUlPTVVYX1BBRCgweDMzQywgMHg5MCwgMiwgMHg3ZTQsIDMsIE1YNTBfVUFSVF9QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfVUFSVDFfUlRTX19TRDRfRDUJSU9NVVhfUEFEKDB4MzNDLCAweDkwLCA0LCAweDAsIDEsIE1YNTBfU0RfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX1VBUlQxX1JUU19fU0Q0X0NMSwlJT01VWF9QQUQoMHgzM0MsIDB4OTAsIDUsIDB4MCwgMSwgTVg1MF9TRF9QQURfQ1RSTCkKKworI2RlZmluZSBNWDUwX1BBRF9VQVJUMl9UWERfX1VBUlQyX1RYRAlJT01VWF9QQUQoMHgzNDAsIDB4OTQsIDAsIDB4N2NjLCAyLCBNWDUwX1VBUlRfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX1VBUlQyX1RYRF9fR1BJT182XzEwCUlPTVVYX1BBRCgweDM0MCwgMHg5NCwgMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfVUFSVDJfVFhEX19TRDRfRDYJSU9NVVhfUEFEKDB4MzQwLCAweDk0LCA0LCAweDc2OCwgMCwgTVg1MF9TRF9QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfVUFSVDJfVFhEX19TRDRfRDQJSU9NVVhfUEFEKDB4MzQwLCAweDk0LCA1LCAweDc2MCwgMSwgTVg1MF9TRF9QQURfQ1RSTCkKKworI2RlZmluZSBNWDUwX1BBRF9VQVJUMl9SWERfX1VBUlQyX1JYRAlJT01VWF9QQUQoMHgzNDQsIDB4OTgsIDAsIDB4N2NjLCAzLCBNWDUwX1VBUlRfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX1VBUlQyX1JYRF9fR1BJT182XzExCUlPTVVYX1BBRCgweDM0NCwgMHg5OCwgMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfVUFSVDJfUlhEX19TRDRfRDcJSU9NVVhfUEFEKDB4MzQ0LCAweDk4LCA0LCAweDc2YywgMCwgTVg1MF9TRF9QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfVUFSVDJfUlhEX19TRDRfRDUJSU9NVVhfUEFEKDB4MzQ0LCAweDk4LCA1LCAweDc2NCwgMSwgTVg1MF9TRF9QQURfQ1RSTCkKKworI2RlZmluZSBNWDUwX1BBRF9VQVJUMl9DVFNfX1VBUlQyX0NUUwlJT01VWF9QQUQoMHgzNDgsIDB4OUMsIDAsIDB4N2M4LCAyLCBNWDUwX1VBUlRfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX1VBUlQyX0NUU19fR1BJT182XzEyCUlPTVVYX1BBRCgweDM0OCwgMHg5QywgMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfVUFSVDJfQ1RTX19TRDRfQ01ECUlPTVVYX1BBRCgweDM0OCwgMHg5QywgNCwgMHg3NGMsIDEsIE1YNTBfU0RfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX1VBUlQyX0NUU19fU0Q0X0Q2CUlPTVVYX1BBRCgweDM0OCwgMHg5QywgNSwgMHg3NjgsIDEsIE1YNTBfU0RfUEFEX0NUUkwpCisKKyNkZWZpbmUgTVg1MF9QQURfVUFSVDJfUlRTX19VQVJUMl9SVFMJSU9NVVhfUEFEKDB4MzRDLCAweEEwLCAwLCAweDdjOCwgMywgTVg1MF9VQVJUX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9VQVJUMl9SVFNfX0dQSU9fNl8xMwlJT01VWF9QQUQoMHgzNEMsIDB4QTAsIDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX1VBUlQyX1JUU19fU0Q0X0NMSwlJT01VWF9QQUQoMHgzNEMsIDB4QTAsIDQsIDB4NzQ4LCAxLCBNWDUwX1NEX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9VQVJUMl9SVFNfX1NENF9ENwlJT01VWF9QQUQoMHgzNEMsIDB4QTAsIDUsIDB4NzZjLCAxLCBNWDUwX1NEX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTBfUEFEX1VBUlQzX1RYRF9fVUFSVDNfVFhECUlPTVVYX1BBRCgweDM1MCwgMHhBNCwgMCwgMHg3ZDQsIDAsIE1YNTBfVUFSVF9QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfVUFSVDNfVFhEX19HUElPXzZfMTQJSU9NVVhfUEFEKDB4MzUwLCAweEE0LCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9VQVJUM19UWERfX1NEMV9ENAlJT01VWF9QQUQoMHgzNTAsIDB4QTQsIDMsIDB4MCwgMCwgTVg1MF9TRF9QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfVUFSVDNfVFhEX19TRDRfRDAJSU9NVVhfUEFEKDB4MzUwLCAweEE0LCA0LCAweDc1MCwgMCwgTVg1MF9TRF9QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfVUFSVDNfVFhEX19TRDJfV1AJSU9NVVhfUEFEKDB4MzUwLCAweEE0LCA1LCAweDc0NCwgMCwgTVg1MF9TRF9QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfVUFSVDNfVFhEX19XRUlNX0QxMglJT01VWF9QQUQoMHgzNTAsIDB4QTQsIDYsIDB4ODFjLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDUwX1BBRF9VQVJUM19SWERfX1VBUlQzX1JYRAlJT01VWF9QQUQoMHgzNTQsIDB4QTgsIDAsIDB4N2Q0LCAxLCBNWDUwX1VBUlRfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX1VBUlQzX1JYRF9fR1BJT182XzE1CUlPTVVYX1BBRCgweDM1NCwgMHhBOCwgMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfVUFSVDNfUlhEX19TRDFfRDUJSU9NVVhfUEFEKDB4MzU0LCAweEE4LCAzLCAweDAsIDAsIE1YNTBfU0RfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX1VBUlQzX1JYRF9fU0Q0X0QxCUlPTVVYX1BBRCgweDM1NCwgMHhBOCwgNCwgMHg3NTQsIDAsIE1YNTBfU0RfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX1VBUlQzX1JYRF9fU0QyX0NECUlPTVVYX1BBRCgweDM1NCwgMHhBOCwgNSwgMHg3NDAsIDAsIE1YNTBfU0RfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX1VBUlQzX1JYRF9fV0VJTV9EMTMJSU9NVVhfUEFEKDB4MzU0LCAweEE4LCA2LCAweDgyMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVg1MF9QQURfVUFSVDRfVFhEX19VQVJUNF9UWEQJSU9NVVhfUEFEKDB4MzU4LCAweEFDLCAwLCAweDdkYywgMCwgTVg1MF9VQVJUX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9VQVJUNF9UWERfX0dQSU9fNl8xNglJT01VWF9QQUQoMHgzNTgsIDB4QUMsIDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX1VBUlQ0X1RYRF9fVUFSVDNfQ1RTCUlPTVVYX1BBRCgweDM1OCwgMHhBQywgMiwgMHg3ZDAsIDAsIE1YNTBfVUFSVF9QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfVUFSVDRfVFhEX19TRDFfRDYJSU9NVVhfUEFEKDB4MzU4LCAweEFDLCAzLCAweDAsIDAsIE1YNTBfU0RfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX1VBUlQ0X1RYRF9fU0Q0X0QyCUlPTVVYX1BBRCgweDM1OCwgMHhBQywgNCwgMHg3NTgsIDAsIE1YNTBfU0RfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX1VBUlQ0X1RYRF9fU0QyX0xDVEwJSU9NVVhfUEFEKDB4MzU4LCAweEFDLCA1LCAweDAsIDAsIE1YNTBfU0RfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX1VBUlQ0X1RYRF9fV0VJTV9EMTQJSU9NVVhfUEFEKDB4MzU4LCAweEFDLCA2LCAweDgyNCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVg1MF9QQURfVUFSVDRfUlhEX19VQVJUNF9SWEQJSU9NVVhfUEFEKDB4MzVDLCAweEIwLCAwLCAweDdkYywgMSwgTVg1MF9VQVJUX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9VQVJUNF9SWERfX0dQSU9fNl8xNwlJT01VWF9QQUQoMHgzNUMsIDB4QjAsIDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX1VBUlQ0X1JYRF9fVUFSVDNfUlRTCUlPTVVYX1BBRCgweDM1QywgMHhCMCwgMiwgMHg3ZDAsIDEsIE1YNTBfVUFSVF9QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfVUFSVDRfUlhEX19TRDFfRDcJSU9NVVhfUEFEKDB4MzVDLCAweEIwLCAzLCAweDAsIDAsIE1YNTBfU0RfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX1VBUlQ0X1JYRF9fU0Q0X0QzCUlPTVVYX1BBRCgweDM1QywgMHhCMCwgNCwgMHg3NWMsIDAsIE1YNTBfU0RfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX1VBUlQ0X1JYRF9fU0QxX0xDVEwJSU9NVVhfUEFEKDB4MzVDLCAweEIwLCA1LCAweDAsIDAsIE1YNTBfU0RfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX1VBUlQ0X1JYRF9fV0VJTV9EMTUJSU9NVVhfUEFEKDB4MzVDLCAweEIwLCA2LCAweDgyOCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVg1MF9QQURfQ1NQSV9TQ0xLX19DU1BJX1NDTEsJSU9NVVhfUEFEKDB4MzYwLCAweEI0LCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9DU1BJX1NDTEtfX0dQSU9fNF84CUlPTVVYX1BBRCgweDM2MCwgMHhCNCwgMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDUwX1BBRF9DU1BJX01PU0lfX0NTUElfTU9TSQlJT01VWF9QQUQoMHgzNjQsIDB4QjgsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0NTUElfTU9TSV9fR1BJT180XzkJSU9NVVhfUEFEKDB4MzY0LCAweEI4LCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTBfUEFEX0NTUElfTUlTT19fQ1NQSV9NSVNPCUlPTVVYX1BBRCgweDM2OCwgMHhCQywgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfQ1NQSV9NSVNPX19HUElPXzRfMTAJSU9NVVhfUEFEKDB4MzY4LCAweEJDLCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTBfUEFEX0NTUElfU1MwX19DU1BJX1NTMAlJT01VWF9QQUQoMHgzNkMsIDB4QzAsIDAsIDB4MCwgMCwgTVg1MF9DU1BJX1NTX1BBRCkKKyNkZWZpbmUgTVg1MF9QQURfQ1NQSV9TUzBfX0dQSU9fNF8xMQlJT01VWF9QQUQoMHgzNkMsIDB4QzAsIDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVg1MF9QQURfRUNTUEkxX1NDTEtfX0VDU1BJMV9TQ0xLCUlPTVVYX1BBRCgweDM3MCwgMHhDNCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRUNTUEkxX1NDTEtfX0dQSU9fNF8xMgkJSU9NVVhfUEFEKDB4MzcwLCAweEM0LCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9FQ1NQSTFfU0NMS19fQ1NQSV9SRFkJCUlPTVVYX1BBRCgweDM3MCwgMHhDNCwgMiwgMHg2ZTgsIDEsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9FQ1NQSTFfU0NMS19fRUNTUEkyX1JEWQlJT01VWF9QQUQoMHgzNzAsIDB4QzQsIDMsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VDU1BJMV9TQ0xLX19VQVJUM19SVFMJCUlPTVVYX1BBRCgweDM3MCwgMHhDNCwgNCwgMHg3ZDAsIDIsIE1YNTBfVUFSVF9QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRUNTUEkxX1NDTEtfX0VQRENfU0RDRTYJSU9NVVhfUEFEKDB4MzcwLCAweEM0LCA1LCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9FQ1NQSTFfU0NMS19fV0VJTV9EOAkJSU9NVVhfUEFEKDB4MzcwLCAweEM0LCA3LCAweDgwYywgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVg1MF9QQURfRUNTUEkxX01PU0lfX0VDU1BJMV9NT1NJCUlPTVVYX1BBRCgweDM3NCwgMHhDOCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRUNTUEkxX01PU0lfX0dQSU9fNF8xMwkJSU9NVVhfUEFEKDB4Mzc0LCAweEM4LCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9FQ1NQSTFfTU9TSV9fQ1NQSV9TUzEJCUlPTVVYX1BBRCgweDM3NCwgMHhDOCwgMiwgMHg2ZWMsIDEsIE1YNTBfQ1NQSV9TU19QQUQpCisjZGVmaW5lIE1YNTBfUEFEX0VDU1BJMV9NT1NJX19FQ1NQSTJfU1MxCUlPTVVYX1BBRCgweDM3NCwgMHhDOCwgMywgMHgwLCAwLCBNWDUwX0NTUElfU1NfUEFEKQorI2RlZmluZSBNWDUwX1BBRF9FQ1NQSTFfTU9TSV9fVUFSVDNfQ1RTCQlJT01VWF9QQUQoMHgzNzQsIDB4QzgsIDQsIDB4N2QwLCAzLCBNWDUwX1VBUlRfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VDU1BJMV9NT1NJX19FUERDX1NEQ0U3CUlPTVVYX1BBRCgweDM3NCwgMHhDOCwgNSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRUNTUEkxX01PU0lfX1dFSU1fRDkJCUlPTVVYX1BBRCgweDM3NCwgMHhDOCwgNywgMHg4MTAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTBfUEFEX0VDU1BJMV9NSVNPX19FQ1NQSTFfTUlTTwlJT01VWF9QQUQoMHgzNzgsIDB4Q0MsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VDU1BJMV9NSVNPX19HUElPXzRfMTQJCUlPTVVYX1BBRCgweDM3OCwgMHhDQywgMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRUNTUEkxX01JU09fX0NTUElfU1MyCQlJT01VWF9QQUQoMHgzNzgsIDB4Q0MsIDIsIDB4NmYwLCAxLCBNWDUwX0NTUElfU1NfUEFEKQorI2RlZmluZSBNWDUwX1BBRF9FQ1NQSTFfTUlTT19fRUNTUEkyX1NTMglJT01VWF9QQUQoMHgzNzgsIDB4Q0MsIDMsIDB4MCwgMCwgTVg1MF9DU1BJX1NTX1BBRCkKKyNkZWZpbmUgTVg1MF9QQURfRUNTUEkxX01JU09fX1VBUlQ0X1JUUwkJSU9NVVhfUEFEKDB4Mzc4LCAweENDLCA0LCAweDdkOCwgMCwgTVg1MF9VQVJUX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9FQ1NQSTFfTUlTT19fRVBEQ19TRENFOAlJT01VWF9QQUQoMHgzNzgsIDB4Q0MsIDUsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VDU1BJMV9NSVNPX19XRUlNX0QxMAkJSU9NVVhfUEFEKDB4Mzc4LCAweENDLCA3LCAweDgxNCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVg1MF9QQURfRUNTUEkxX1NTMF9fRUNTUEkxX1NTMAkJSU9NVVhfUEFEKDB4MzdDLCAweEQwLCAwLCAweDAsIDAsIE1YNTBfQ1NQSV9TU19QQUQpCisjZGVmaW5lIE1YNTBfUEFEX0VDU1BJMV9TUzBfX0dQSU9fNF8xNQkJSU9NVVhfUEFEKDB4MzdDLCAweEQwLCAxLCAweDAsIDAsIFBBRF9DVExfUFVTXzEwMEtfVVApCisjZGVmaW5lIE1YNTBfUEFEX0VDU1BJMV9TUzBfX0NTUElfU1MzCQlJT01VWF9QQUQoMHgzN0MsIDB4RDAsIDIsIDB4NmY0LCAxLCBNWDUwX0NTUElfU1NfUEFEKQorI2RlZmluZSBNWDUwX1BBRF9FQ1NQSTFfU1MwX19FQ1NQSTJfU1MzCQlJT01VWF9QQUQoMHgzN0MsIDB4RDAsIDMsIDB4MCwgMCwgTVg1MF9DU1BJX1NTX1BBRCkKKyNkZWZpbmUgTVg1MF9QQURfRUNTUEkxX1NTMF9fVUFSVDRfQ1RTCQlJT01VWF9QQUQoMHgzN0MsIDB4RDAsIDQsIDB4N2Q4LCAxLCBNWDUwX1VBUlRfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VDU1BJMV9TUzBfX0VQRENfU0RDRTkJCUlPTVVYX1BBRCgweDM3QywgMHhEMCwgNSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRUNTUEkxX1NTMF9fV0VJTV9EMTEJCUlPTVVYX1BBRCgweDM3QywgMHhEMCwgNywgMHg4MTgsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTBfUEFEX0VDU1BJMl9TQ0xLX19FQ1NQSTJfU0NMSwlJT01VWF9QQUQoMHgzODAsIDB4RDQsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VDU1BJMl9TQ0xLX19HUElPXzRfMTYJCUlPTVVYX1BBRCgweDM4MCwgMHhENCwgMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRUNTUEkyX1NDTEtfX0VMQ0RJRl9XUgkJSU9NVVhfUEFEKDB4MzgwLCAweEQ0LCAyLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9FQ1NQSTJfU0NMS19fRUNTUEkxX1JEWQlJT01VWF9QQUQoMHgzODAsIDB4RDQsIDMsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VDU1BJMl9TQ0xLX19VQVJUNV9SVFMJCUlPTVVYX1BBRCgweDM4MCwgMHhENCwgNCwgMHg3ZTAsIDAsIE1YNTBfVUFSVF9QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRUNTUEkyX1NDTEtfX0VMQ0RJRl9ET1RDTEsJSU9NVVhfUEFEKDB4MzgwLCAweEQ0LCA1LCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9FQ1NQSTJfU0NMS19fTkFOREZfQ0VONAlJT01VWF9QQUQoMHgzODAsIDB4RDQsIDYsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VDU1BJMl9TQ0xLX19XRUlNX0Q4CQlJT01VWF9QQUQoMHgzODAsIDB4RDQsIDcsIDB4ODBjLCAxLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDUwX1BBRF9FQ1NQSTJfTU9TSV9fRUNTUEkyX01PU0kJSU9NVVhfUEFEKDB4Mzg0LCAweEQ4LCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9FQ1NQSTJfTU9TSV9fR1BJT180XzE3CQlJT01VWF9QQUQoMHgzODQsIDB4RDgsIDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VDU1BJMl9NT1NJX19FTENESUZfUkQJCUlPTVVYX1BBRCgweDM4NCwgMHhEOCwgMiwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRUNTUEkyX01PU0lfX0VDU1BJMV9TUzEJSU9NVVhfUEFEKDB4Mzg0LCAweEQ4LCAzLCAweDAsIDAsIE1YNTBfQ1NQSV9TU19QQUQpCisjZGVmaW5lIE1YNTBfUEFEX0VDU1BJMl9NT1NJX19VQVJUNV9DVFMJCUlPTVVYX1BBRCgweDM4NCwgMHhEOCwgNCwgMHg3ZTAsIDEsIE1YNTBfVUFSVF9QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRUNTUEkyX01PU0lfX0VMQ0RJRl9FTgkJSU9NVVhfUEFEKDB4Mzg0LCAweEQ4LCA1LCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9FQ1NQSTJfTU9TSV9fTkFOREZfQ0VONQlJT01VWF9QQUQoMHgzODQsIDB4RDgsIDYsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VDU1BJMl9NT1NJX19XRUlNX0Q5CQlJT01VWF9QQUQoMHgzODQsIDB4RDgsIDcsIDB4ODEwLCAxLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDUwX1BBRF9FQ1NQSTJfTUlTT19fRUNTUEkyX01JU08JSU9NVVhfUEFEKDB4Mzg4LCAweERDLCAwLCAweDczYywgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VDU1BJMl9NSVNPX19HUElPXzRfMTgJCUlPTVVYX1BBRCgweDM4OCwgMHhEQywgMSwgMHgwLCAwLCBQQURfQ1RMX1BVU18xMDBLX1VQKQorI2RlZmluZSBNWDUwX1BBRF9FQ1NQSTJfTUlTT19fRUxDRElGX1JTCQlJT01VWF9QQUQoMHgzODgsIDB4REMsIDIsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VDU1BJMl9NSVNPX19FQ1NQSTFfU1MyCUlPTVVYX1BBRCgweDM4OCwgMHhEQywgMywgMHgwLCAwLCBNWDUwX0NTUElfU1NfUEFEKQorI2RlZmluZSBNWDUwX1BBRF9FQ1NQSTJfTUlTT19fVUFSVDVfVFhECQlJT01VWF9QQUQoMHgzODgsIDB4REMsIDQsIDB4N2U0LCA0LCBNWDUwX1VBUlRfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VDU1BJMl9NSVNPX19FTENESUZfVlNZTkMJSU9NVVhfUEFEKDB4Mzg4LCAweERDLCA1LCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9FQ1NQSTJfTUlTT19fTkFOREZfQ0VONglJT01VWF9QQUQoMHgzODgsIDB4REMsIDYsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VDU1BJMl9NSVNPX19XRUlNX0QxMAkJSU9NVVhfUEFEKDB4Mzg4LCAweERDLCA3LCAweDgxNCwgMSwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVg1MF9QQURfRUNTUEkyX1NTMF9fRUNTUEkyX1NTMAkJSU9NVVhfUEFEKDB4MzhDLCAweEUwLCAwLCAweDAsIDAsIE1YNTBfQ1NQSV9TU19QQUQpCisjZGVmaW5lIE1YNTBfUEFEX0VDU1BJMl9TUzBfX0dQSU9fNF8xOQkJSU9NVVhfUEFEKDB4MzhDLCAweEUwLCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9FQ1NQSTJfU1MwX19FTENESUZfQ1MJCUlPTVVYX1BBRCgweDM4QywgMHhFMCwgMiwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRUNTUEkyX1NTMF9fRUNTUEkxX1NTMwkJSU9NVVhfUEFEKDB4MzhDLCAweEUwLCAzLCAweDAsIDAsIE1YNTBfQ1NQSV9TU19QQUQpCisjZGVmaW5lIE1YNTBfUEFEX0VDU1BJMl9TUzBfX1VBUlQ1X1JYRAkJSU9NVVhfUEFEKDB4MzhDLCAweEUwLCA0LCAweDdlNCwgNSwgTVg1MF9VQVJUX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9FQ1NQSTJfU1MwX19FTENESUZfSFNZTkMJSU9NVVhfUEFEKDB4MzhDLCAweEUwLCA1LCAweDZmOCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VDU1BJMl9TUzBfX05BTkRGX0NFTjcJCUlPTVVYX1BBRCgweDM4QywgMHhFMCwgNiwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRUNTUEkyX1NTMF9fV0VJTV9EMTEJCUlPTVVYX1BBRCgweDM4QywgMHhFMCwgNywgMHg4MTgsIDEsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTBfUEFEX1NEMV9DTEtfX1NEMV9DTEsJSU9NVVhfUEFEKDB4MzkwLCAweEU0LCBJT01VWF9DT05GSUdfU0lPTiwgMHgwLCAwLCBNWDUwX1NEX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9TRDFfQ0xLX19HUElPXzVfMAlJT01VWF9QQUQoMHgzOTAsIDB4RTQsIDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX1NEMV9DTEtfX0NMS08JCUlPTVVYX1BBRCgweDM5MCwgMHhFNCwgNywgMHgwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDUwX1BBRF9TRDFfQ01EX19TRDFfQ01ECUlPTVVYX1BBRCgweDM5NCwgMHhFOCwgSU9NVVhfQ09ORklHX1NJT04sIDB4MCwgMCwgTVg1MF9TRF9QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfU0QxX0NNRF9fR1BJT181XzEJSU9NVVhfUEFEKDB4Mzk0LCAweEU4LCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9TRDFfQ01EX19DTEtPMgkJSU9NVVhfUEFEKDB4Mzk0LCAweEU4LCA3LCAweDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTBfUEFEX1NEMV9EMF9fU0QxX0QwCQlJT01VWF9QQUQoMHgzOTgsIDB4RUMsIDAsIDB4MCwgMCwgTVg1MF9TRF9QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfU0QxX0QwX19HUElPXzVfMglJT01VWF9QQUQoMHgzOTgsIDB4RUMsIDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX1NEMV9EMF9fUExMMV9CWVAJSU9NVVhfUEFEKDB4Mzk4LCAweEVDLCA3LCAweDZkYywgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVg1MF9QQURfU0QxX0QxX19TRDFfRDEJCUlPTVVYX1BBRCgweDM5QywgMHhGMCwgMCwgMHgwLCAwLCBNWDUwX1NEX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9TRDFfRDFfX0dQSU9fNV8zCUlPTVVYX1BBRCgweDM5QywgMHhGMCwgMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfU0QxX0QxX19QTEwyX0JZUAlJT01VWF9QQUQoMHgzOUMsIDB4RjAsIDcsIDB4NmUwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDUwX1BBRF9TRDFfRDJfX1NEMV9EMgkJSU9NVVhfUEFEKDB4M0EwLCAweEY0LCAwLCAweDAsIDAsIE1YNTBfU0RfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX1NEMV9EMl9fR1BJT181XzQJSU9NVVhfUEFEKDB4M0EwLCAweEY0LCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9TRDFfRDJfX1BMTDNfQllQCUlPTVVYX1BBRCgweDNBMCwgMHhGNCwgNywgMHg2ZTQsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTBfUEFEX1NEMV9EM19fU0QxX0QzCQlJT01VWF9QQUQoMHgzQTQsIDB4RjgsIDAsIDB4MCwgMCwgTVg1MF9TRF9QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfU0QxX0QzX19HUElPXzVfNQlJT01VWF9QQUQoMHgzQTQsIDB4RjgsIDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVg1MF9QQURfU0QyX0NMS19fU0QyX0NMSwlJT01VWF9QQUQoMHgzQTgsIDB4RkMsIElPTVVYX0NPTkZJR19TSU9OLCAweDAsIDAsIE1YNTBfU0RfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX1NEMl9DTEtfX0dQSU9fNV82CUlPTVVYX1BBRCgweDNBOCwgMHhGQywgMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfU0QyX0NMS19fTVNIQ19TQ0xLCUlPTVVYX1BBRCgweDNBOCwgMHhGQywgMiwgMHgwLCAwLCBNWDUwX1NEX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTBfUEFEX1NEMl9DTURfX1NEMl9DTUQJSU9NVVhfUEFEKDB4M0FDLCAweDEwMCwgSU9NVVhfQ09ORklHX1NJT04sIDB4MCwgMCwgTVg1MF9TRF9QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfU0QyX0NNRF9fR1BJT181XzcJSU9NVVhfUEFEKDB4M0FDLCAweDEwMCwgMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfU0QyX0NNRF9fTVNIQ19CUwlJT01VWF9QQUQoMHgzQUMsIDB4MTAwLCAyLCAweDAsIDAsIE1YNTBfU0RfUEFEX0NUUkwpCisKKyNkZWZpbmUgTVg1MF9QQURfU0QyX0QwX19TRDJfRDAJCUlPTVVYX1BBRCgweDNCMCwgMHgxMDQsIDAsIDB4MCwgMCwgTVg1MF9TRF9QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfU0QyX0QwX19HUElPXzVfOAlJT01VWF9QQUQoMHgzQjAsIDB4MTA0LCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9TRDJfRDBfX01TSENfRDAJSU9NVVhfUEFEKDB4M0IwLCAweDEwNCwgMiwgMHgwLCAwLCBNWDUwX1NEX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9TRDJfRDBfX0tFWV9DT0w0CUlPTVVYX1BBRCgweDNCMCwgMHgxMDQsIDMsIDB4NzkwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDUwX1BBRF9TRDJfRDFfX1NEMl9EMQkJSU9NVVhfUEFEKDB4M0I0LCAweDEwOCwgMCwgMHgwLCAwLCBNWDUwX1NEX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9TRDJfRDFfX0dQSU9fNV85CUlPTVVYX1BBRCgweDNCNCwgMHgxMDgsIDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX1NEMl9EMV9fTVNIQ19EMQlJT01VWF9QQUQoMHgzQjQsIDB4MTA4LCAyLCAweDAsIDAsIE1YNTBfU0RfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX1NEMl9EMV9fS0VZX1JPVzQJSU9NVVhfUEFEKDB4M0I0LCAweDEwOCwgMywgMHg3YTAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTBfUEFEX1NEMl9EMl9fU0QyX0QyCQlJT01VWF9QQUQoMHgzQjgsIDB4MTBDLCAwLCAweDAsIDAsIE1YNTBfU0RfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX1NEMl9EMl9fR1BJT181XzEwCUlPTVVYX1BBRCgweDNCOCwgMHgxMEMsIDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX1NEMl9EMl9fTVNIQ19EMglJT01VWF9QQUQoMHgzQjgsIDB4MTBDLCAyLCAweDAsIDAsIE1YNTBfU0RfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX1NEMl9EMl9fS0VZX0NPTDUJSU9NVVhfUEFEKDB4M0I4LCAweDEwQywgMywgMHg3OTQsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTBfUEFEX1NEMl9EM19fU0QyX0QzCQlJT01VWF9QQUQoMHgzQkMsIDB4MTEwLCAwLCAweDAsIDAsIE1YNTBfU0RfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX1NEMl9EM19fR1BJT181XzExCUlPTVVYX1BBRCgweDNCQywgMHgxMTAsIDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX1NEMl9EM19fTVNIQ19EMwlJT01VWF9QQUQoMHgzQkMsIDB4MTEwLCAyLCAweDAsIDAsIE1YNTBfU0RfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX1NEMl9EM19fS0VZX1JPVzUJSU9NVVhfUEFEKDB4M0JDLCAweDExMCwgMywgMHg3YTQsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTBfUEFEX1NEMl9ENF9fU0QyX0Q0CQlJT01VWF9QQUQoMHgzQzAsIDB4MTE0LCAwLCAweDAsIDAsIE1YNTBfU0RfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX1NEMl9ENF9fR1BJT181XzEyCUlPTVVYX1BBRCgweDNDMCwgMHgxMTQsIDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX1NEMl9ENF9fQVVENF9SWEZTCUlPTVVYX1BBRCgweDNDMCwgMHgxMTQsIDIsIDB4NmQwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfU0QyX0Q0X19LRVlfQ09MNglJT01VWF9QQUQoMHgzQzAsIDB4MTE0LCAzLCAweDc5OCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX1NEMl9ENF9fV0VJTV9EMAlJT01VWF9QQUQoMHgzQzAsIDB4MTE0LCA0LCAweDdlYywgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX1NEMl9ENF9fQ0NNX09VVDAJSU9NVVhfUEFEKDB4M0MwLCAweDExNCwgNywgMHgwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDUwX1BBRF9TRDJfRDVfX1NEMl9ENQkJSU9NVVhfUEFEKDB4M0M0LCAweDExOCwgMCwgMHgwLCAwLCBNWDUwX1NEX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9TRDJfRDVfX0dQSU9fNV8xMwlJT01VWF9QQUQoMHgzQzQsIDB4MTE4LCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9TRDJfRDVfX0FVRDRfUlhDCUlPTVVYX1BBRCgweDNDNCwgMHgxMTgsIDIsIDB4NmNjLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfU0QyX0Q1X19LRVlfUk9XNglJT01VWF9QQUQoMHgzQzQsIDB4MTE4LCAzLCAweDdhOCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX1NEMl9ENV9fV0VJTV9EMQlJT01VWF9QQUQoMHgzQzQsIDB4MTE4LCA0LCAweDdmMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX1NEMl9ENV9fQ0NNX09VVDEJSU9NVVhfUEFEKDB4M0M0LCAweDExOCwgNywgMHgwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDUwX1BBRF9TRDJfRDZfX1NEMl9ENgkJSU9NVVhfUEFEKDB4M0M4LCAweDExQywgMCwgMHgwLCAwLCBNWDUwX1NEX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9TRDJfRDZfX0dQSU9fNV8xNAlJT01VWF9QQUQoMHgzQzgsIDB4MTFDLCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9TRDJfRDZfX0FVRDRfUlhECUlPTVVYX1BBRCgweDNDOCwgMHgxMUMsIDIsIDB4NmM0LCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfU0QyX0Q2X19LRVlfQ09MNwlJT01VWF9QQUQoMHgzQzgsIDB4MTFDLCAzLCAweDc5YywgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX1NEMl9ENl9fV0VJTV9EMglJT01VWF9QQUQoMHgzQzgsIDB4MTFDLCA0LCAweDdmNCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX1NEMl9ENl9fQ0NNX09VVDIJSU9NVVhfUEFEKDB4M0M4LCAweDExQywgNywgMHgwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDUwX1BBRF9TRDJfRDdfX1NEMl9ENwkJSU9NVVhfUEFEKDB4M0NDLCAweDEyMCwgMCwgMHgwLCAwLCBNWDUwX1NEX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9TRDJfRDdfX0dQSU9fNV8xNQlJT01VWF9QQUQoMHgzQ0MsIDB4MTIwLCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9TRDJfRDdfX0FVRDRfVFhGUwlJT01VWF9QQUQoMHgzQ0MsIDB4MTIwLCAyLCAweDZkOCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX1NEMl9EN19fS0VZX1JPVzcJSU9NVVhfUEFEKDB4M0NDLCAweDEyMCwgMywgMHg3YWMsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9TRDJfRDdfX1dFSU1fRDMJSU9NVVhfUEFEKDB4M0NDLCAweDEyMCwgNCwgMHg3ZjgsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9TRDJfRDdfX0NDTV9TVE9QCUlPTVVYX1BBRCgweDNDQywgMHgxMjAsIDcsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVg1MF9QQURfU0QyX1dQX19TRDJfV1AJCUlPTVVYX1BBRCgweDNEMCwgMHgxMjQsIDAsIDB4NzQ0LCAxLCBNWDUwX1NEX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9TRDJfV1BfX0dQSU9fNV8xNglJT01VWF9QQUQoMHgzRDAsIDB4MTI0LCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9TRDJfV1BfX0FVRDRfVFhECUlPTVVYX1BBRCgweDNEMCwgMHgxMjQsIDIsIDB4NmM4LCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfU0QyX1dQX19XRUlNX0Q0CUlPTVVYX1BBRCgweDNEMCwgMHgxMjQsIDQsIDB4N2ZjLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfU0QyX1dQX19DQ01fV0FJVAlJT01VWF9QQUQoMHgzRDAsIDB4MTI0LCA3LCAweDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTBfUEFEX1NEMl9DRF9fU0QyX0NECQlJT01VWF9QQUQoMHgzRDQsIDB4MTI4LCAwLCAweDc0MCwgMSwgTVg1MF9TRF9QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfU0QyX0NEX19HUElPXzVfMTcJSU9NVVhfUEFEKDB4M0Q0LCAweDEyOCwgMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfU0QyX0NEX19BVUQ0X1RYQwlJT01VWF9QQUQoMHgzRDQsIDB4MTI4LCAyLCAweDZkNCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX1NEMl9DRF9fV0VJTV9ENQlJT01VWF9QQUQoMHgzRDQsIDB4MTI4LCA0LCAweDgwMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX1NEMl9DRF9fQ0NNX1JFRl9FTglJT01VWF9QQUQoMHgzRDQsIDB4MTI4LCA3LCAweDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTBfUEFEX1BNSUNfT05fUkVRX19QTUlDX09OX1JFUQlJT01VWF9QQUQoMHgzRDgsIDAsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVg1MF9QQURfUE1JQ19TVEJZX1JFUV9fUE1JQ19TVEJZX1JFUQlJT01VWF9QQUQoMHgzREMsIDAsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVg1MF9QQURfUE1JQ19QT1JUX0JfX1BNSUNfUE9SVF9CCUlPTVVYX1BBRCgweDNFMCwgMCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDUwX1BBRF9QTUlDX0JPT1RfTU9ERTFfX1BNSUNfQk9PVF9NT0RFMQlJT01VWF9QQUQoMHgzRTQsIDAsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVg1MF9QQURfUE1JQ19SRVNFVF9JTl9CX19QTUlDX1JFU0VUX0lOX0IJSU9NVVhfUEFEKDB4M0U4LCAwLCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTBfUEFEX1BNSUNfQk9PVF9NT0RFMF9fUE1JQ19CT09UX01PREUwCUlPTVVYX1BBRCgweDNFQywgMCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDUwX1BBRF9QTUlDX1RFU1RfTU9ERV9fUE1JQ19URVNUX01PREUJSU9NVVhfUEFEKDB4M0YwLCAwLCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTBfUEFEX1BNSUNfSlRBR19UTVNfX1BNSUNfSlRBR19UTVMJSU9NVVhfUEFEKDB4M0Y0LCAwLCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTBfUEFEX1BNSUNfSlRBR19NT0RfX1BNSUNfSlRBR19NT0QJSU9NVVhfUEFEKDB4M0Y4LCAwLCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTBfUEFEX1BNSUNfSlRBR19UUlNUQl9fUE1JQ19KVEFHX1RSU1RCCUlPTVVYX1BBRCgweDNGQywgMCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDUwX1BBRF9QTUlDX0pUQUdfVERJX19QTUlDX0pUQUdfVERJCUlPTVVYX1BBRCgweDQwMCwgMCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDUwX1BBRF9QTUlDX0pUQUdfVENLX19QTUlDX0pUQUdfVENLCUlPTVVYX1BBRCgweDQwNCwgMCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDUwX1BBRF9QTUlDX0pUQUdfVERPX19QTUlDX0pUQUdfVERPCUlPTVVYX1BBRCgweDQwOCwgMCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDUwX1BBRF9ESVNQX0QwX19ESVNQX0QwCUlPTVVYX1BBRCgweDQwQywgMHgxMkMsIDAsIDB4NmZjLCAwLCBNWDUwX0VMQ0RJRl9QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRElTUF9EMF9fR1BJT18yXzAJSU9NVVhfUEFEKDB4NDBDLCAweDEyQywgMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRElTUF9EMF9fRkVDX1RYQ0xLCUlPTVVYX1BBRCgweDQwQywgMHgxMkMsIDIsIDB4NzhjLCAwLCBQQURfQ1RMX0hZUyB8IFBBRF9DVExfUEtFKQorCisjZGVmaW5lIE1YNTBfUEFEX0RJU1BfRDFfX0RJU1BfRDEJSU9NVVhfUEFEKDB4NDEwLCAweDEzMCwgMCwgMHg3MDAsIDAsIE1YNTBfRUxDRElGX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9ESVNQX0QxX19HUElPXzJfMQlJT01VWF9QQUQoMHg0MTAsIDB4MTMwLCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9ESVNQX0QxX19GRUNfUlhfRVIJSU9NVVhfUEFEKDB4NDEwLCAweDEzMCwgMiwgMHg3ODgsIDAsIFBBRF9DVExfSFlTIHwgUEFEX0NUTF9QS0UpCisjZGVmaW5lIE1YNTBfUEFEX0RJU1BfRDFfX1dFSU1fQTE3CUlPTVVYX1BBRCgweDQxMCwgMHgxMzAsIDMsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVg1MF9QQURfRElTUF9EMl9fRElTUF9EMglJT01VWF9QQUQoMHg0MTQsIDB4MTM0LCAwLCAweDcwNCwgMCwgTVg1MF9FTENESUZfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0RJU1BfRDJfX0dQSU9fMl8yCUlPTVVYX1BBRCgweDQxNCwgMHgxMzQsIDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0RJU1BfRDJfX0ZFQ19SWF9EVglJT01VWF9QQUQoMHg0MTQsIDB4MTM0LCAyLCAweDc4NCwgMCwgUEFEX0NUTF9IWVMgfCBQQURfQ1RMX1BLRSkKKyNkZWZpbmUgTVg1MF9QQURfRElTUF9EMl9fV0VJTV9BMTgJSU9NVVhfUEFEKDB4NDE0LCAweDEzNCwgMywgMHgwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDUwX1BBRF9ESVNQX0QzX19ESVNQX0QzCUlPTVVYX1BBRCgweDQxOCwgMHgxMzgsIDAsIDB4NzA4LCAwLCBNWDUwX0VMQ0RJRl9QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRElTUF9EM19fR1BJT18yXzMJSU9NVVhfUEFEKDB4NDE4LCAweDEzOCwgMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRElTUF9EM19fRkVDX1JYRDEJSU9NVVhfUEFEKDB4NDE4LCAweDEzOCwgMiwgMHg3N0MsIDAsIFBBRF9DVExfSFlTIHwgUEFEX0NUTF9QS0UpCisjZGVmaW5lIE1YNTBfUEFEX0RJU1BfRDNfX1dFSU1fQTE5CUlPTVVYX1BBRCgweDQxOCwgMHgxMzgsIDMsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0RJU1BfRDNfX0ZFQ19DT0wJSU9NVVhfUEFEKDB4NDE4LCAweDEzOCwgNCwgMHg3NzAsIDEsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTBfUEFEX0RJU1BfRDRfX0RJU1BfRDQJSU9NVVhfUEFEKDB4NDFDLCAweDEzQywgMCwgMHg3MGMsIDAsIE1YNTBfRUxDRElGX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9ESVNQX0Q0X19HUElPXzJfNAlJT01VWF9QQUQoMHg0MUMsIDB4MTNDLCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9ESVNQX0Q0X19GRUNfUlhEMAlJT01VWF9QQUQoMHg0MUMsIDB4MTNDLCAyLCAweDc3OCwgMCwgUEFEX0NUTF9IWVMgfCBQQURfQ1RMX1BLRSkKKyNkZWZpbmUgTVg1MF9QQURfRElTUF9ENF9fV0VJTV9BMjAJSU9NVVhfUEFEKDB4NDFDLCAweDEzQywgMywgMHgwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDUwX1BBRF9ESVNQX0Q1X19ESVNQX0Q1CUlPTVVYX1BBRCgweDQyMCwgMHgxNDAsIDAsIDB4NzEwLCAwLCBNWDUwX0VMQ0RJRl9QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRElTUF9ENV9fR1BJT18yXzUJSU9NVVhfUEFEKDB4NDIwLCAweDE0MCwgMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRElTUF9ENV9fRkVDX1RYX0VOCUlPTVVYX1BBRCgweDQyMCwgMHgxNDAsIDIsIDB4MCwgMCwgUEFEX0NUTF9EU0VfSElHSCkKKyNkZWZpbmUgTVg1MF9QQURfRElTUF9ENV9fV0VJTV9BMjEJSU9NVVhfUEFEKDB4NDIwLCAweDE0MCwgMywgMHgwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDUwX1BBRF9ESVNQX0Q2X19ESVNQX0Q2CUlPTVVYX1BBRCgweDQyNCwgMHgxNDQsIDAsIDB4NzE0LCAwLCBNWDUwX0VMQ0RJRl9QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRElTUF9ENl9fR1BJT18yXzYJSU9NVVhfUEFEKDB4NDI0LCAweDE0NCwgMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRElTUF9ENl9fRkVDX1RYRDEJSU9NVVhfUEFEKDB4NDI0LCAweDE0NCwgMiwgMHgwLCAwLCBQQURfQ1RMX0RTRV9ISUdIKQorI2RlZmluZSBNWDUwX1BBRF9ESVNQX0Q2X19XRUlNX0EyMglJT01VWF9QQUQoMHg0MjQsIDB4MTQ0LCAzLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9ESVNQX0Q2X19GRUNfUlhfQ0xLCUlPTVVYX1BBRCgweDQyNCwgMHgxNDQsIDQsIDB4NzgwLCAxLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDUwX1BBRF9ESVNQX0Q3X19ESVNQX0Q3CUlPTVVYX1BBRCgweDQyOCwgMHgxNDgsIDAsIDB4NzE4LCAwLCBNWDUwX0VMQ0RJRl9QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRElTUF9EN19fR1BJT18yXzcJSU9NVVhfUEFEKDB4NDI4LCAweDE0OCwgMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRElTUF9EN19fRkVDX1RYRDAJSU9NVVhfUEFEKDB4NDI4LCAweDE0OCwgMiwgMHgwLCAwLCBQQURfQ1RMX0RTRV9ISUdIKQorI2RlZmluZSBNWDUwX1BBRF9ESVNQX0Q3X19XRUlNX0EyMwlJT01VWF9QQUQoMHg0MjgsIDB4MTQ4LCAzLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorCisKKyNkZWZpbmUgTVg1MF9QQURfRElTUF9XUl9fRUxDRElGX1dSCUlPTVVYX1BBRCgweDQyQywgMHgxNEMsIDAsIDB4MCwgMCwgTVg1MF9FTENESUZfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0RJU1BfV1JfX0dQSU9fMl8xNglJT01VWF9QQUQoMHg0MkMsIDB4MTRDLCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9ESVNQX1dSX19FTENESUZfUElYQ0xLCUlPTVVYX1BBRCgweDQyQywgMHgxNEMsIDIsIDB4MCwgMCwgTVg1MF9FTENESUZfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0RJU1BfV1JfX1dFSU1fQTI0CUlPTVVYX1BBRCgweDQyQywgMHgxNEMsIDMsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVg1MF9QQURfRElTUF9SRF9fRUxDRElGX1JECUlPTVVYX1BBRCgweDQzMCwgMHgxNTAsIDAsIDB4MCwgMCwgTVg1MF9FTENESUZfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0RJU1BfUkRfX0dQSU9fMl8xOQlJT01VWF9QQUQoMHg0MzAsIDB4MTUwLCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9ESVNQX1JEX19FTENESUZfRU4JSU9NVVhfUEFEKDB4NDMwLCAweDE1MCwgMiwgMHgwLCAwLCBNWDUwX0VMQ0RJRl9QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRElTUF9SRF9fV0VJTV9BMjUJSU9NVVhfUEFEKDB4NDMwLCAweDE1MCwgMywgMHgwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDUwX1BBRF9ESVNQX1JTX19FTENESUZfUlMJSU9NVVhfUEFEKDB4NDM0LCAweDE1NCwgMCwgMHg3M2MsIDEsIE1YNTBfRUxDRElGX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9ESVNQX1JTX19HUElPXzJfMTcJSU9NVVhfUEFEKDB4NDM0LCAweDE1NCwgMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRElTUF9SU19fRUxDRElGX1ZTWU5DCUlPTVVYX1BBRCgweDQzNCwgMHgxNTQsIDIsIDB4NzNjLCAxLCBNWDUwX0VMQ0RJRl9QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRElTUF9SU19fV0VJTV9BMjYJSU9NVVhfUEFEKDB4NDM0LCAweDE1NCwgMywgMHgwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDUwX1BBRF9ESVNQX0NTX19FTENESUZfQ1MJSU9NVVhfUEFEKDB4NDM4LCAweDE1OCwgMCwgMHgwLCAwLCBNWDUwX0VMQ0RJRl9QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRElTUF9DU19fR1BJT18yXzIxCUlPTVVYX1BBRCgweDQzOCwgMHgxNTgsIDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0RJU1BfQ1NfX0VMQ0RJRl9IU1lOQwlJT01VWF9QQUQoMHg0MzgsIDB4MTU4LCAyLCAweDZmOCwgMSwgTVg1MF9FTENESUZfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0RJU1BfQ1NfX1dFSU1fQTI3CUlPTVVYX1BBRCgweDQzOCwgMHgxNTgsIDMsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0RJU1BfQ1NfX1dFSU1fQ1MzCUlPTVVYX1BBRCgweDQzOCwgMHgxNTgsIDQsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVg1MF9QQURfRElTUF9CVVNZX19FTENESUZfSFNZTkMJSU9NVVhfUEFEKDB4NDNDLCAweDE1QywgMCwgMHg2ZjgsIDIsIE1YNTBfRUxDRElGX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9ESVNQX0JVU1lfX0dQSU9fMl8xOAkJSU9NVVhfUEFEKDB4NDNDLCAweDE1QywgMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRElTUF9CVVNZX19XRUlNX0NTMwkJSU9NVVhfUEFEKDB4NDNDLCAweDE1QywgMywgMHgwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDUwX1BBRF9ESVNQX1JFU0VUX19FTENESUZfUlNUCUlPTVVYX1BBRCgweDQ0MCwgMHgxNjAsIDAsIDB4MCwgMCwgTVg1MF9FTENESUZfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0RJU1BfUkVTRVRfX0dQSU9fMl8yMAlJT01VWF9QQUQoMHg0NDAsIDB4MTYwLCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9ESVNQX1JFU0VUX19XRUlNX0NTMwlJT01VWF9QQUQoMHg0NDAsIDB4MTYwLCA0LCAweDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTBfUEFEX1NEM19DTURfX1NEM19DTUQJSU9NVVhfUEFEKDB4NDQ0LCAweDE2NCwgMCwgMHgwLCAwLCBNWDUwX1NEX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9TRDNfQ01EX19HUElPXzVfMTgJSU9NVVhfUEFEKDB4NDQ0LCAweDE2NCwgMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QSU5fU0QzX0NNRF9fTkFOREZfV1JOCUlPTVVYX1BBRCgweDQ0NCwgMHgxNjQsIDIsIDB4MCwgMCwgUEFEX0NUTF9EU0VfSElHSCkKKyNkZWZpbmUgTVg1MF9QQURfU0QzX0NNRF9fU1NQX0NNRAlJT01VWF9QQUQoMHg0NDQsIDB4MTY0LCAzLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTBfUEFEX1NEM19DTEtfX1NEM19DTEsJSU9NVVhfUEFEKDB4NDQ4LCAweDE2OCwgMCwgMHgwLCAwLCBNWDUwX1NEX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9TRDNfQ0xLX19HUElPXzVfMTkJSU9NVVhfUEFEKDB4NDQ4LCAweDE2OCwgMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QSU5fU0QzX0NMS19fTkFOREZfUkROCUlPTVVYX1BBRCgweDQ0OCwgMHgxNjgsIDIsIDB4MCwgMCwgUEFEX0NUTF9EU0VfSElHSCkKKyNkZWZpbmUgTVg1MF9QQURfU0QzX0NMS19fU1NQX0NMSwlJT01VWF9QQUQoMHg0NDgsIDB4MTY4LCAzLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTBfUEFEX1NEM19EMF9fU0QzX0QwCQlJT01VWF9QQUQoMHg0NEMsIDB4MTZDLCAwLCAweDAsIDAsIE1YNTBfU0RfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX1NEM19EMF9fR1BJT181XzIwCUlPTVVYX1BBRCgweDQ0QywgMHgxNkMsIDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUElOX1NEM19EMF9fTkFOREZfRDQJSU9NVVhfUEFEKDB4NDRDLCAweDE2QywgMiwgMHgwLCAwLCBQQURfQ1RMX0RTRV9ISUdIKQorI2RlZmluZSBNWDUwX1BBRF9TRDNfRDBfX1NTUF9EMAkJSU9NVVhfUEFEKDB4NDRDLCAweDE2QywgMywgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfU0QzX0QwX19QTEwxX0JZUAlJT01VWF9QQUQoMHg0NEMsIDB4MTZDLCA3LCAweDZkYywgMSwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVg1MF9QQURfU0QzX0QxX19TRDNfRDEJCUlPTVVYX1BBRCgweDQ1MCwgMHgxNzAsIDAsIDB4MCwgMCwgTVg1MF9TRF9QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfU0QzX0QxX19HUElPXzVfMjEJSU9NVVhfUEFEKDB4NDUwLCAweDE3MCwgMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QSU5fU0QzX0QxX19OQU5ERl9ENQlJT01VWF9QQUQoMHg0NTAsIDB4MTcwLCAyLCAweDAsIDAsIFBBRF9DVExfRFNFX0hJR0gpCisjZGVmaW5lIE1YNTBfUEFEX1NEM19EMV9fUExMMl9CWVAJSU9NVVhfUEFEKDB4NDUwLCAweDE3MCwgNywgMHg2ZTAsIDEsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTBfUEFEX1NEM19EMl9fU0QzX0QyCQlJT01VWF9QQUQoMHg0NTQsIDB4MTc0LCAwLCAweDAsIDAsIE1YNTBfU0RfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX1NEM19EMl9fR1BJT181XzIyCUlPTVVYX1BBRCgweDQ1NCwgMHgxNzQsIDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUElOX1NEM19EMl9fTkFOREZfRDYJSU9NVVhfUEFEKDB4NDU0LCAweDE3NCwgMiwgMHgwLCAwLCBQQURfQ1RMX0RTRV9ISUdIKQorI2RlZmluZSBNWDUwX1BBRF9TRDNfRDJfX1NTUF9EMgkJSU9NVVhfUEFEKDB4NDU0LCAweDE3NCwgMywgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfU0QzX0QyX19QTEwzX0JZUAlJT01VWF9QQUQoMHg0NTQsIDB4MTc0LCA3LCAweDZlNCwgMSwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVg1MF9QQURfU0QzX0QzX19TRDNfRDMJCUlPTVVYX1BBRCgweDQ1OCwgMHgxNzgsIDAsIDB4MCwgMCwgTVg1MF9TRF9QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfU0QzX0QzX19HUElPXzVfMjMJSU9NVVhfUEFEKDB4NDU4LCAweDE3OCwgMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QSU5fU0QzX0QzX19OQU5ERl9ENwlJT01VWF9QQUQoMHg0NTgsIDB4MTc4LCAyLCAweDAsIDAsIFBBRF9DVExfRFNFX0hJR0gpCisjZGVmaW5lIE1YNTBfUEFEX1NEM19EM19fU1NQX0QzCQlJT01VWF9QQUQoMHg0NTgsIDB4MTc4LCAzLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTBfUEFEX1NEM19ENF9fU0QzX0Q0CQlJT01VWF9QQUQoMHg0NUMsIDB4MTdDLCAwLCAweDAsIDAsIE1YNTBfU0RfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX1NEM19ENF9fR1BJT181XzI0CUlPTVVYX1BBRCgweDQ1QywgMHgxN0MsIDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUElOX1NEM19ENF9fTkFOREZfRDAJSU9NVVhfUEFEKDB4NDVDLCAweDE3QywgMiwgMHgwLCAwLCBQQURfQ1RMX0RTRV9ISUdIKQorI2RlZmluZSBNWDUwX1BBRF9TRDNfRDRfX1NTUF9ENAkJSU9NVVhfUEFEKDB4NDVDLCAweDE3QywgMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDUwX1BBRF9TRDNfRDVfX1NEM19ENQkJSU9NVVhfUEFEKDB4NDYwLCAweDE4MCwgMCwgMHgwLCAwLCBNWDUwX1NEX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9TRDNfRDVfX0dQSU9fNV8yNQlJT01VWF9QQUQoMHg0NjAsIDB4MTgwLCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BJTl9TRDNfRDVfX05BTkRGX0QxCUlPTVVYX1BBRCgweDQ2MCwgMHgxODAsIDIsIDB4MCwgMCwgUEFEX0NUTF9EU0VfSElHSCkKKyNkZWZpbmUgTVg1MF9QQURfU0QzX0Q1X19TU1BfRDUJCUlPTVVYX1BBRCgweDQ2MCwgMHgxODAsIDMsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVg1MF9QQURfU0QzX0Q2X19TRDNfRDYJCUlPTVVYX1BBRCgweDQ2NCwgMHgxODQsIDAsIDB4MCwgMCwgTVg1MF9TRF9QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfU0QzX0Q2X19HUElPXzVfMjYJSU9NVVhfUEFEKDB4NDY0LCAweDE4NCwgMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QSU5fU0QzX0Q2X19OQU5ERl9EMglJT01VWF9QQUQoMHg0NjQsIDB4MTg0LCAyLCAweDAsIDAsIFBBRF9DVExfRFNFX0hJR0gpCisjZGVmaW5lIE1YNTBfUEFEX1NEM19ENl9fU1NQX0Q2CQlJT01VWF9QQUQoMHg0NjQsIDB4MTg0LCAzLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTBfUEFEX1NEM19EN19fU0QzX0Q3CQlJT01VWF9QQUQoMHg0NjgsIDB4MTg4LCAwLCAweDAsIDAsIE1YNTBfU0RfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX1NEM19EN19fR1BJT181XzI3CUlPTVVYX1BBRCgweDQ2OCwgMHgxODgsIDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUElOX1NEM19EN19fTkFOREZfRDMJSU9NVVhfUEFEKDB4NDY4LCAweDE4OCwgMiwgMHgwLCAwLCBQQURfQ1RMX0RTRV9ISUdIKQorI2RlZmluZSBNWDUwX1BBRF9TRDNfRDdfX1NTUF9ENwkJSU9NVVhfUEFEKDB4NDY4LCAweDE4OCwgMywgMHgwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDUwX1BBRF9TRDNfV1BfX1NEM19XUAkJSU9NVVhfUEFEKDB4NDZDLCAweDE4QywgMCwgMHgwLCAwLCBNWDUwX1NEX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9TRDNfV1BfX0dQSU9fNV8yOAlJT01VWF9QQUQoMHg0NkMsIDB4MThDLCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BJTl9TRDNfV1BfX05BTkRGX1JFU0VUTglJT01VWF9QQUQoMHg0NkMsIDB4MThDLCAyLCAweDAsIDAsIFBBRF9DVExfRFNFX0hJR0gpCisjZGVmaW5lIE1YNTBfUEFEX1NEM19XUF9fU1NQX0NECQlJT01VWF9QQUQoMHg0NkMsIDB4MThDLCAzLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9TRDNfV1BfX1NENF9MQ1RMCUlPTVVYX1BBRCgweDQ2QywgMHgxOEMsIDQsIDB4MCwgMCwgTVg1MF9TRF9QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfU0QzX1dQX19XRUlNX0NTMwlJT01VWF9QQUQoMHg0NkMsIDB4MThDLCA1LCAweDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTBfUEFEX0RJU1BfRDhfX0RJU1BfRDgJSU9NVVhfUEFEKDB4NDcwLCAweDE5MCwgMCwgMHg3MWMsIDAsIE1YNTBfRUxDRElGX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9ESVNQX0Q4X19HUElPXzJfOAlJT01VWF9QQUQoMHg0NzAsIDB4MTkwLCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9ESVNQX0Q4X19OQU5ERl9DTEUJSU9NVVhfUEFEKDB4NDcwLCAweDE5MCwgMiwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRElTUF9EOF9fU0QxX0xDVEwJSU9NVVhfUEFEKDB4NDcwLCAweDE5MCwgMywgMHgwLCAwLCBNWDUwX1NEX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9ESVNQX0Q4X19TRDRfQ01ECUlPTVVYX1BBRCgweDQ3MCwgMHgxOTAsIDQsIDB4NzRjLCAyLCBNWDUwX1NEX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9ESVNQX0Q4X19LRVlfQ09MNAlJT01VWF9QQUQoMHg0NzAsIDB4MTkwLCA1LCAweDc5MCwgMSwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0RJU1BfRDhfX0ZFQ19UWF9DTEsJSU9NVVhfUEFEKDB4NDcwLCAweDE5MCwgNiwgMHg3OGMsIDEsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTBfUEFEX0RJU1BfRDlfX0RJU1BfRDkJSU9NVVhfUEFEKDB4NDc0LCAweDE5NCwgMCwgMHg3MjAsIDAsIE1YNTBfRUxDRElGX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9ESVNQX0Q5X19HUElPXzJfOQlJT01VWF9QQUQoMHg0NzQsIDB4MTk0LCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9ESVNQX0Q5X19OQU5ERl9BTEUJSU9NVVhfUEFEKDB4NDc0LCAweDE5NCwgMiwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRElTUF9EOV9fU0QyX0xDVEwJSU9NVVhfUEFEKDB4NDc0LCAweDE5NCwgMywgMHgwLCAwLCBNWDUwX1NEX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9ESVNQX0Q5X19TRDRfQ0xLCUlPTVVYX1BBRCgweDQ3NCwgMHgxOTQsIDQsIDB4NzQ4LCAyLCBNWDUwX1NEX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9ESVNQX0Q5X19LRVlfUk9XNAlJT01VWF9QQUQoMHg0NzQsIDB4MTk0LCA1LCAweDdhMCwgMSwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0RJU1BfRDlfX0ZFQ19SWF9FUglJT01VWF9QQUQoMHg0NzQsIDB4MTk0LCA2LCAweDc4OCwgMSwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVg1MF9QQURfRElTUF9EMTBfX0RJU1BfRDEwCUlPTVVYX1BBRCgweDQ3OCwgMHgxOTgsIDAsIDB4NzI0LCAwLCBNWDUwX0VMQ0RJRl9QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRElTUF9EMTBfX0dQSU9fMl8xMAlJT01VWF9QQUQoMHg0NzgsIDB4MTk4LCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9ESVNQX0QxMF9fTkFOREZfQ0VOMAlJT01VWF9QQUQoMHg0NzgsIDB4MTk4LCAyLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9ESVNQX0QxMF9fU0QzX0xDVEwJSU9NVVhfUEFEKDB4NDc4LCAweDE5OCwgMywgMHgwLCAwLCBNWDUwX1NEX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9ESVNQX0QxMF9fU0Q0X0QwCUlPTVVYX1BBRCgweDQ3OCwgMHgxOTgsIDQsIDB4NzUwLCAxLCBNWDUwX1NEX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9ESVNQX0QxMF9fS0VZX0NPTDUJSU9NVVhfUEFEKDB4NDc4LCAweDE5OCwgNSwgMHg3OTQsIDEsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9ESVNQX0QxMF9fRkVDX1JYX0RWCUlPTVVYX1BBRCgweDQ3OCwgMHgxOTgsIDYsIDB4Nzg0LCAxLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDUwX1BBRF9ESVNQX0QxMV9fRElTUF9EMTEJSU9NVVhfUEFEKDB4NDdDLCAweDE5QywgMCwgMHg3MjgsIDAsIE1YNTBfRUxDRElGX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9ESVNQX0QxMV9fR1BJT18yXzExCUlPTVVYX1BBRCgweDQ3QywgMHgxOUMsIDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0RJU1BfRDExX19OQU5ERl9DRU4xCUlPTVVYX1BBRCgweDQ3QywgMHgxOUMsIDIsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0RJU1BfRDExX19TRDRfRDEJSU9NVVhfUEFEKDB4NDdDLCAweDE5QywgNCwgMHg3NTQsIDEsIE1YNTBfU0RfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0RJU1BfRDExX19LRVlfUk9XNQlJT01VWF9QQUQoMHg0N0MsIDB4MTlDLCA1LCAweDdhNCwgMSwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0RJU1BfRDExX19GRUNfUkRBVDEJSU9NVVhfUEFEKDB4NDdDLCAweDE5QywgNiwgMHg3N2MsIDEsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTBfUEFEX0RJU1BfRDEyX19ESVNQX0QxMglJT01VWF9QQUQoMHg0ODAsIDB4MUEwLCAwLCAweDcyYywgMCwgTVg1MF9FTENESUZfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0RJU1BfRDEyX19HUElPXzJfMTIJSU9NVVhfUEFEKDB4NDgwLCAweDFBMCwgMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRElTUF9EMTJfX05BTkRGX0NFTjIJSU9NVVhfUEFEKDB4NDgwLCAweDFBMCwgMiwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRElTUF9EMTJfX1NEMV9DRAlJT01VWF9QQUQoMHg0ODAsIDB4MUEwLCAzLCAweDAsIDAsIE1YNTBfU0RfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0RJU1BfRDEyX19TRDRfRDIJSU9NVVhfUEFEKDB4NDgwLCAweDFBMCwgNCwgMHg3NTgsIDEsIE1YNTBfU0RfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0RJU1BfRDEyX19LRVlfQ09MNglJT01VWF9QQUQoMHg0ODAsIDB4MUEwLCA1LCAweDc5OCwgMSwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0RJU1BfRDEyX19GRUNfUkRBVDAJSU9NVVhfUEFEKDB4NDgwLCAweDFBMCwgNiwgMHg3NzgsIDEsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTBfUEFEX0RJU1BfRDEzX19ESVNQX0QxMwlJT01VWF9QQUQoMHg0ODQsIDB4MUE0LCAwLCAweDczMCwgMCwgTVg1MF9FTENESUZfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0RJU1BfRDEzX19HUElPXzJfMTMJSU9NVVhfUEFEKDB4NDg0LCAweDFBNCwgMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRElTUF9EMTNfX05BTkRGX0NFTjMJSU9NVVhfUEFEKDB4NDg0LCAweDFBNCwgMiwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRElTUF9EMTNfX1NEM19DRAlJT01VWF9QQUQoMHg0ODQsIDB4MUE0LCAzLCAweDAsIDAsIE1YNTBfU0RfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0RJU1BfRDEzX19TRDRfRDMJSU9NVVhfUEFEKDB4NDg0LCAweDFBNCwgNCwgMHg3NWMsIDEsIE1YNTBfU0RfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0RJU1BfRDEzX19LRVlfUk9XNglJT01VWF9QQUQoMHg0ODQsIDB4MUE0LCA1LCAweDdhOCwgMSwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0RJU1BfRDEzX19GRUNfVFhfRU4JSU9NVVhfUEFEKDB4NDg0LCAweDFBNCwgNiwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDUwX1BBRF9ESVNQX0QxNF9fRElTUF9EMTQJSU9NVVhfUEFEKDB4NDg4LCAweDFBOCwgMCwgMHg3MzQsIDAsIE1YNTBfRUxDRElGX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9ESVNQX0QxNF9fR1BJT18yXzE0CUlPTVVYX1BBRCgweDQ4OCwgMHgxQTgsIDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0RJU1BfRDE0X19OQU5ERl9SRFkwCUlPTVVYX1BBRCgweDQ4OCwgMHgxQTgsIDIsIDB4N2I0LCAxLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRElTUF9EMTRfX1NEMV9XUAlJT01VWF9QQUQoMHg0ODgsIDB4MUE4LCAzLCAweDAsIDAsIE1YNTBfU0RfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0RJU1BfRDE0X19TRDRfV1AJSU9NVVhfUEFEKDB4NDg4LCAweDFBOCwgNCwgMHgwLCAwLCBNWDUwX1NEX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9ESVNQX0QxNF9fS0VZX0NPTDcJSU9NVVhfUEFEKDB4NDg4LCAweDFBOCwgNSwgMHg3OWMsIDEsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9ESVNQX0QxNF9fRkVDX1REQVQxCUlPTVVYX1BBRCgweDQ4OCwgMHgxQTgsIDYsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVg1MF9QQURfRElTUF9EMTVfX0RJU1BfRDE1CUlPTVVYX1BBRCgweDQ4QywgMHgxQUMsIDAsIDB4NzM4LCAwLCBNWDUwX0VMQ0RJRl9QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRElTUF9EMTVfX0dQSU9fMl8xNQlJT01VWF9QQUQoMHg0OEMsIDB4MUFDLCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9ESVNQX0QxNV9fTkFOREZfRFFTCUlPTVVYX1BBRCgweDQ4QywgMHgxQUMsIDIsIDB4N2IwLCAxLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRElTUF9EMTVfX1NEM19SU1QJSU9NVVhfUEFEKDB4NDhDLCAweDFBQywgMywgMHgwLCAwLCBNWDUwX1NEX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9ESVNQX0QxNV9fU0Q0X0NECUlPTVVYX1BBRCgweDQ4QywgMHgxQUMsIDQsIDB4MCwgMCwgTVg1MF9TRF9QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRElTUF9EMTVfX0tFWV9ST1c3CUlPTVVYX1BBRCgweDQ4QywgMHgxQUMsIDUsIDB4N2FjLCAxLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRElTUF9EMTVfX0ZFQ19UREFUMAlJT01VWF9QQUQoMHg0OEMsIDB4MUFDLCA2LCAweDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTBfUEFEX0VQRENfRDBfX0VQRENfRDAJSU9NVVhfUEFEKDB4NTRDLCAweDFCMCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRVBEQ19EMF9fR1BJT18zXzAJSU9NVVhfUEFEKDB4NTRDLCAweDFCMCwgMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRVBEQ19EMF9fV0VJTV9EMAlJT01VWF9QQUQoMHg1NEMsIDB4MUIwLCAyLCAweDdlYywgMSwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VQRENfRDBfX0VMQ0RJRl9SUwlJT01VWF9QQUQoMHg1NEMsIDB4MUIwLCAzLCAweDAsIDAsIE1YNTBfRUxDRElGX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9FUERDX0QwX19FTENESUZfUElYQ0xLCUlPTVVYX1BBRCgweDU0QywgMHgxQjAsIDQsIDB4MCwgMCwgTVg1MF9FTENESUZfUEFEX0NUUkwpCisKKyNkZWZpbmUgTVg1MF9QQURfRVBEQ19EMV9fRVBEQ19EMQlJT01VWF9QQUQoMHg1NTAsIDB4MUI0LCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9FUERDX0QxX19HUElPXzNfMQlJT01VWF9QQUQoMHg1NTAsIDB4MUI0LCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9FUERDX0QxX19XRUlNX0QxCUlPTVVYX1BBRCgweDU1MCwgMHgxQjQsIDIsIDB4N2YwLCAxLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRVBEQ19EMV9fRUxDRElGX0NTCUlPTVVYX1BBRCgweDU1MCwgMHgxQjQsIDMsIDB4MCwgMCwgTVg1MF9FTENESUZfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VQRENfRDFfX0VMQ0RJRl9FTglJT01VWF9QQUQoMHg1NTAsIDB4MUI0LCA0LCAweDAsIDAsIE1YNTBfRUxDRElGX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTBfUEFEX0VQRENfRDJfX0VQRENfRDIJSU9NVVhfUEFEKDB4NTU0LCAweDFCOCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRVBEQ19EMl9fR1BJT18zXzIJSU9NVVhfUEFEKDB4NTU0LCAweDFCOCwgMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRVBEQ19EMl9fV0VJTV9EMglJT01VWF9QQUQoMHg1NTQsIDB4MUI4LCAyLCAweDdmNCwgMSwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VQRENfRDJfX0VMQ0RJRl9XUglJT01VWF9QQUQoMHg1NTQsIDB4MUI4LCAzLCAweDAsIDAsIE1YNTBfRUxDRElGX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9FUERDX0QyX19FTENESUZfVlNZTkMJSU9NVVhfUEFEKDB4NTU0LCAweDFCOCwgNCwgMHg3M2MsIDIsIE1YNTBfRUxDRElGX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTBfUEFEX0VQRENfRDNfX0VQRENfRDMJSU9NVVhfUEFEKDB4NTU4LCAweDFCQywgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRVBEQ19EM19fR1BJT18zXzMJSU9NVVhfUEFEKDB4NTU4LCAweDFCQywgMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRVBEQ19EM19fV0VJTV9EMwlJT01VWF9QQUQoMHg1NTgsIDB4MUJDLCAyLCAweDdmOCwgMSwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VQRENfRDNfX0VMQ0RJRl9SRAlJT01VWF9QQUQoMHg1NTgsIDB4MUJDLCAzLCAweDAsIDAsIE1YNTBfRUxDRElGX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9FUERDX0QzX19FTENESUZfSFNZTkMJSU9NVVhfUEFEKDB4NTU4LCAweDFCQywgNCwgMHg2ZjgsIDMsIE1YNTBfRUxDRElGX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTBfUEFEX0VQRENfRDRfX0VQRENfRDQJSU9NVVhfUEFEKDB4NTVDLCAweDFDMCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRVBEQ19ENF9fR1BJT18zXzQJSU9NVVhfUEFEKDB4NTVDLCAweDFDMCwgMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRVBEQ19ENF9fV0VJTV9ENAlJT01VWF9QQUQoMHg1NUMsIDB4MUMwLCAyLCAweDdmYywgMSwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVg1MF9QQURfRVBEQ19ENV9fRVBEQ19ENQlJT01VWF9QQUQoMHg1NjAsIDB4MUM0LCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9FUERDX0Q1X19HUElPXzNfNQlJT01VWF9QQUQoMHg1NjAsIDB4MUM0LCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9FUERDX0Q1X19XRUlNX0Q1CUlPTVVYX1BBRCgweDU2MCwgMHgxQzQsIDIsIDB4ODAwLCAxLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDUwX1BBRF9FUERDX0Q2X19FUERDX0Q2CUlPTVVYX1BBRCgweDU2NCwgMHgxQzgsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VQRENfRDZfX0dQSU9fM182CUlPTVVYX1BBRCgweDU2NCwgMHgxQzgsIDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VQRENfRDZfX1dFSU1fRDYJSU9NVVhfUEFEKDB4NTY0LCAweDFDOCwgMiwgMHg4MDQsIDEsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTBfUEFEX0VQRENfRDdfX0VQRENfRDcJSU9NVVhfUEFEKDB4NTY4LCAweDFDQywgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRVBEQ19EN19fR1BJT18zXzcJSU9NVVhfUEFEKDB4NTY4LCAweDFDQywgMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRVBEQ19EN19fV0VJTV9ENwlJT01VWF9QQUQoMHg1NjgsIDB4MUNDLCAyLCAweDgwOCwgMSwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVg1MF9QQURfRVBEQ19EOF9fRVBEQ19EOAlJT01VWF9QQUQoMHg1NkMsIDB4MUQwLCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9FUERDX0Q4X19HUElPXzNfOAlJT01VWF9QQUQoMHg1NkMsIDB4MUQwLCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9FUERDX0Q4X19XRUlNX0Q4CUlPTVVYX1BBRCgweDU2QywgMHgxRDAsIDIsIDB4ODBjLCAyLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRVBEQ19EOF9fRUxDRElGX0QyNAlJT01VWF9QQUQoMHg1NkMsIDB4MUQwLCAzLCAweDAsIDAsIE1YNTBfRUxDRElGX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTBfUEFEX0VQRENfRDlfX0VQRENfRDkJSU9NVVhfUEFEKDB4NTcwLCAweDFENCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRVBEQ19EOV9fR1BJT18zXzkJSU9NVVhfUEFEKDB4NTcwLCAweDFENCwgMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRVBEQ19EOV9fV0VJTV9EOQlJT01VWF9QQUQoMHg1NzAsIDB4MUQ0LCAyLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9FUERDX0Q5X19FTENESUZfRDI1CUlPTVVYX1BBRCgweDU3MCwgMHgxRDQsIDMsIDB4ODEwLCAyLCBNWDUwX0VMQ0RJRl9QQURfQ1RSTCkKKworI2RlZmluZSBNWDUwX1BBRF9FUERDX0QxMF9fRVBEQ19EMTAJSU9NVVhfUEFEKDB4NTc0LCAweDFEOCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRVBEQ19EMTBfX0dQSU9fM18xMAlJT01VWF9QQUQoMHg1NzQsIDB4MUQ4LCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9FUERDX0QxMF9fV0VJTV9EMTAJSU9NVVhfUEFEKDB4NTc0LCAweDFEOCwgMiwgMHg4MTQsIDIsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9FUERDX0QxMF9fRUxDRElGX0QyNglJT01VWF9QQUQoMHg1NzQsIDB4MUQ4LCAzLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTBfUEFEX0VQRENfRDExX19FUERDX0QxMQlJT01VWF9QQUQoMHg1NzgsIDB4MURDLCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9FUERDX0QxMV9fR1BJT18zXzExCUlPTVVYX1BBRCgweDU3OCwgMHgxREMsIDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VQRENfRDExX19XRUlNX0QxMQlJT01VWF9QQUQoMHg1NzgsIDB4MURDLCAyLCAweDgxOCwgMiwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VQRENfRDExX19FTENESUZfRDI3CUlPTVVYX1BBRCgweDU3OCwgMHgxREMsIDMsIDB4MCwgMCwgTVg1MF9FTENESUZfUEFEX0NUUkwpCisKKyNkZWZpbmUgTVg1MF9QQURfRVBEQ19EMTJfX0VQRENfRDEyCUlPTVVYX1BBRCgweDU3QywgMHgxRTAsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VQRENfRDEyX19HUElPXzNfMTIJSU9NVVhfUEFEKDB4NTdDLCAweDFFMCwgMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRVBEQ19EMTJfX1dFSU1fRDEyCUlPTVVYX1BBRCgweDU3QywgMHgxRTAsIDIsIDB4ODFjLCAxLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRVBEQ19EMTJfX0VMQ0RJRl9EMjgJSU9NVVhfUEFEKDB4NTdDLCAweDFFMCwgMywgMHgwLCAwLCBNWDUwX0VMQ0RJRl9QQURfQ1RSTCkKKworI2RlZmluZSBNWDUwX1BBRF9FUERDX0QxM19fRVBEQ19EMTMJSU9NVVhfUEFEKDB4NTgwLCAweDFFNCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRVBEQ19EMTNfX0dQSU9fM18xMwlJT01VWF9QQUQoMHg1ODAsIDB4MUU0LCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9FUERDX0QxM19fV0VJTV9EMTMJSU9NVVhfUEFEKDB4NTgwLCAweDFFNCwgMiwgMHg4MjAsIDEsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9FUERDX0QxM19fRUxDRElGX0QyOQlJT01VWF9QQUQoMHg1ODAsIDB4MUU0LCAzLCAweDAsIDAsIE1YNTBfRUxDRElGX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTBfUEFEX0VQRENfRDE0X19FUERDX0QxNAlJT01VWF9QQUQoMHg1ODQsIDB4MUU4LCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9FUERDX0QxNF9fR1BJT18zXzE0CUlPTVVYX1BBRCgweDU4NCwgMHgxRTgsIDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VQRENfRDE0X19XRUlNX0QxNAlJT01VWF9QQUQoMHg1ODQsIDB4MUU4LCAyLCAweDgyNCwgMSwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VQRENfRDE0X19FTENESUZfRDMwCUlPTVVYX1BBRCgweDU4NCwgMHgxRTgsIDMsIDB4MCwgMCwgTVg1MF9FTENESUZfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VQRENfRDE0X19BVUQ2X1RYRAlJT01VWF9QQUQoMHg1ODQsIDB4MUU4LCA0LCAweDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTBfUEFEX0VQRENfRDE1X19FUERDX0QxNQlJT01VWF9QQUQoMHg1ODgsIDB4MUVDLCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9FUERDX0QxNV9fR1BJT18zXzE1CUlPTVVYX1BBRCgweDU4OCwgMHgxRUMsIDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VQRENfRDE1X19XRUlNX0QxNQlJT01VWF9QQUQoMHg1ODgsIDB4MUVDLCAyLCAweDgyOCwgMSwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VQRENfRDE1X19FTENESUZfRDMxCUlPTVVYX1BBRCgweDU4OCwgMHgxRUMsIDMsIDB4MCwgMCwgTVg1MF9FTENESUZfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VQRENfRDE1X19BVUQ2X1RYQwlJT01VWF9QQUQoMHg1ODgsIDB4MUVDLCA0LCAweDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTBfUEFEX0VQRENfR0RDTEtfX0VQRENfR0RDTEsJSU9NVVhfUEFEKDB4NThDLCAweDFGMCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRVBEQ19HRENMS19fR1BJT18zXzE2CUlPTVVYX1BBRCgweDU4QywgMHgxRjAsIDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VQRENfR0RDTEtfX1dFSU1fRDE2CUlPTVVYX1BBRCgweDU4QywgMHgxRjAsIDIsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VQRENfR0RDTEtfX0VMQ0RJRl9EMTYJSU9NVVhfUEFEKDB4NThDLCAweDFGMCwgMywgMHgwLCAwLCBNWDUwX0VMQ0RJRl9QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRVBEQ19HRENMS19fQVVENl9UWEZTCUlPTVVYX1BBRCgweDU4QywgMHgxRjAsIDQsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVg1MF9QQURfRVBEQ19HRFNQX19FUERDX0dEU1AJSU9NVVhfUEFEKDB4NTkwLCAweDFGNCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRVBEQ19HRFNQX19HUElPXzNfMTcJSU9NVVhfUEFEKDB4NTkwLCAweDFGNCwgMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRVBEQ19HRFNQX19XRUlNX0QxNwlJT01VWF9QQUQoMHg1OTAsIDB4MUY0LCAyLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9FUERDX0dEU1BfX0VMQ0RJRl9EMTcJSU9NVVhfUEFEKDB4NTkwLCAweDFGNCwgMywgMHgwLCAwLCBNWDUwX0VMQ0RJRl9QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRVBEQ19HRFNQX19BVUQ2X1JYRAlJT01VWF9QQUQoMHg1OTAsIDB4MUY0LCA0LCAweDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTBfUEFEX0VQRENfR0RPRV9fRVBEQ19HRE9FCUlPTVVYX1BBRCgweDU5NCwgMHgxRjgsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VQRENfR0RPRV9fR1BJT18zXzE4CUlPTVVYX1BBRCgweDU5NCwgMHgxRjgsIDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VQRENfR0RPRV9fV0VJTV9EMTgJSU9NVVhfUEFEKDB4NTk0LCAweDFGOCwgMiwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRVBEQ19HRE9FX19FTENESUZfRDE4CUlPTVVYX1BBRCgweDU5NCwgMHgxRjgsIDMsIDB4MCwgMCwgTVg1MF9FTENESUZfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VQRENfR0RPRV9fQVVENl9SWEMJSU9NVVhfUEFEKDB4NTk0LCAweDFGOCwgNCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDUwX1BBRF9FUERDX0dEUkxfX0VQRENfR0RSTAlJT01VWF9QQUQoMHg1OTgsIDB4MUZDLCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9FUERDX0dEUkxfX0dQSU9fM18xOQlJT01VWF9QQUQoMHg1OTgsIDB4MUZDLCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9FUERDX0dEUkxfX1dFSU1fRDE5CUlPTVVYX1BBRCgweDU5OCwgMHgxRkMsIDIsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VQRENfR0RSTF9fRUxDRElGX0QxOQlJT01VWF9QQUQoMHg1OTgsIDB4MUZDLCAzLCAweDAsIDAsIE1YNTBfRUxDRElGX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9FUERDX0dEUkxfX0FVRDZfUlhGUwlJT01VWF9QQUQoMHg1OTgsIDB4MUZDLCA0LCAweDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTBfUEFEX0VQRENfU0RDTEtfX0VQRENfU0RDTEsJSU9NVVhfUEFEKDB4NTlDLCAweDIwMCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRVBEQ19TRENMS19fR1BJT18zXzIwCUlPTVVYX1BBRCgweDU5QywgMHgyMDAsIDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VQRENfU0RDTEtfX1dFSU1fRDIwCUlPTVVYX1BBRCgweDU5QywgMHgyMDAsIDIsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VQRENfU0RDTEtfX0VMQ0RJRl9EMjAJSU9NVVhfUEFEKDB4NTlDLCAweDIwMCwgMywgMHgwLCAwLCBNWDUwX0VMQ0RJRl9QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRVBEQ19TRENMS19fQVVENV9UWEQJSU9NVVhfUEFEKDB4NTlDLCAweDIwMCwgNCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDUwX1BBRF9FUERDX1NET0VaX19FUERDX1NET0VaCUlPTVVYX1BBRCgweDVBMCwgMHgyMDQsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VQRENfU0RPRVpfX0dQSU9fM18yMQlJT01VWF9QQUQoMHg1QTAsIDB4MjA0LCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9FUERDX1NET0VaX19XRUlNX0QyMQlJT01VWF9QQUQoMHg1QTAsIDB4MjA0LCAyLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9FUERDX1NET0VaX19FTENESUZfRDIxCUlPTVVYX1BBRCgweDVBMCwgMHgyMDQsIDMsIDB4MCwgMCwgTVg1MF9FTENESUZfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VQRENfU0RPRVpfX0FVRDVfVFhDCUlPTVVYX1BBRCgweDVBMCwgMHgyMDQsIDQsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVg1MF9QQURfRVBEQ19TRE9FRF9fRVBEQ19TRE9FRAlJT01VWF9QQUQoMHg1QTQsIDB4MjA4LCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9FUERDX1NET0VEX19HUElPXzNfMjIJSU9NVVhfUEFEKDB4NUE0LCAweDIwOCwgMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRVBEQ19TRE9FRF9fV0VJTV9EMjIJSU9NVVhfUEFEKDB4NUE0LCAweDIwOCwgMiwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRVBEQ19TRE9FRF9fRUxDRElGX0QyMglJT01VWF9QQUQoMHg1QTQsIDB4MjA4LCAzLCAweDAsIDAsIE1YNTBfRUxDRElGX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9FUERDX1NET0VEX19BVUQ1X1RYRlMJSU9NVVhfUEFEKDB4NUE0LCAweDIwOCwgNCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDUwX1BBRF9FUERDX1NET0VfX0VQRENfU0RPRQlJT01VWF9QQUQoMHg1QTgsIDB4MjBDLCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9FUERDX1NET0VfX0dQSU9fM18yMwlJT01VWF9QQUQoMHg1QTgsIDB4MjBDLCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9FUERDX1NET0VfX1dFSU1fRDIzCUlPTVVYX1BBRCgweDVBOCwgMHgyMEMsIDIsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VQRENfU0RPRV9fRUxDRElGX0QyMwlJT01VWF9QQUQoMHg1QTgsIDB4MjBDLCAzLCAweDAsIDAsIE1YNTBfRUxDRElGX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9FUERDX1NET0VfX0FVRDVfUlhECUlPTVVYX1BBRCgweDVBOCwgMHgyMEMsIDQsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVg1MF9QQURfRVBEQ19TRExFX19FUERDX1NETEUJSU9NVVhfUEFEKDB4NUFDLCAweDIxMCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRVBEQ19TRExFX19HUElPXzNfMjQJSU9NVVhfUEFEKDB4NUFDLCAweDIxMCwgMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRVBEQ19TRExFX19XRUlNX0QyNAlJT01VWF9QQUQoMHg1QUMsIDB4MjEwLCAyLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9FUERDX1NETEVfX0VMQ0RJRl9EOAlJT01VWF9QQUQoMHg1QUMsIDB4MjEwLCAzLCAweDcxYywgMSwgTVg1MF9FTENESUZfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VQRENfU0RMRV9fQVVENV9SWEMJSU9NVVhfUEFEKDB4NUFDLCAweDIxMCwgNCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDUwX1BBRF9FUERDX1NEQ0xLTl9fRVBEQ19TRENMS04JSU9NVVhfUEFEKDB4NUIwLCAweDIxNCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRVBEQ19TRENMS05fX0dQSU9fM18yNQkJSU9NVVhfUEFEKDB4NUIwLCAweDIxNCwgMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRVBEQ19TRENMS05fX1dFSU1fRDI1CQlJT01VWF9QQUQoMHg1QjAsIDB4MjE0LCAyLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9FUERDX1NEQ0xLTl9fRUxDRElGX0Q5CQlJT01VWF9QQUQoMHg1QjAsIDB4MjE0LCAzLCAweDcyMCwgMSwgTVg1MF9FTENESUZfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VQRENfU0RDTEtOX19BVUQ1X1JYRlMJCUlPTVVYX1BBRCgweDVCMCwgMHgyMTQsIDQsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVg1MF9QQURfRVBEQ19TRFNIUl9fRVBEQ19TRFNIUglJT01VWF9QQUQoMHg1QjQsIDB4MjE4LCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9FUERDX1NEU0hSX19HUElPXzNfMjYJSU9NVVhfUEFEKDB4NUI0LCAweDIxOCwgMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRVBEQ19TRFNIUl9fV0VJTV9EMjYJSU9NVVhfUEFEKDB4NUI0LCAweDIxOCwgMiwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRVBEQ19TRFNIUl9fRUxDRElGX0QxMAlJT01VWF9QQUQoMHg1QjQsIDB4MjE4LCAzLCAweDcyNCwgMSwgTVg1MF9FTENESUZfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VQRENfU0RTSFJfX0FVRDRfVFhECUlPTVVYX1BBRCgweDVCNCwgMHgyMTgsIDQsIDB4NmM4LCAxLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDUwX1BBRF9FUERDX1BXUkNPTV9fRVBEQ19QV1JDT00JSU9NVVhfUEFEKDB4NUI4LCAweDIxQywgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRVBEQ19QV1JDT01fX0dQSU9fM18yNwkJSU9NVVhfUEFEKDB4NUI4LCAweDIxQywgMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRVBEQ19QV1JDT01fX1dFSU1fRDI3CQlJT01VWF9QQUQoMHg1QjgsIDB4MjFDLCAyLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9FUERDX1BXUkNPTV9fRUxDRElGX0QxMQlJT01VWF9QQUQoMHg1QjgsIDB4MjFDLCAzLCAweDcyOCwgMSwgTVg1MF9FTENESUZfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VQRENfUFdSQ09NX19BVUQ0X1RYQwkJSU9NVVhfUEFEKDB4NUI4LCAweDIxQywgNCwgMHg2ZDQsIDEsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTBfUEFEX0VQRENfUFdSU1RBVF9fRVBEQ19QV1JTVEFUCUlPTVVYX1BBRCgweDVCQywgMHgyMjAsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VQRENfUFdSU1RBVF9fR1BJT18zXzI4CUlPTVVYX1BBRCgweDVCQywgMHgyMjAsIDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VQRENfUFdSU1RBVF9fV0VJTV9EMjgJCUlPTVVYX1BBRCgweDVCQywgMHgyMjAsIDIsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VQRENfUFdSU1RBVF9fRUxDRElGX0QxMglJT01VWF9QQUQoMHg1QkMsIDB4MjIwLCAzLCAweDcyYywgMSwgTVg1MF9FTENESUZfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VQRENfUFdSU1RBVF9fQVVENF9UWEZTCUlPTVVYX1BBRCgweDVCQywgMHgyMjAsIDQsIDB4NmQ4LCAxLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDUwX1BBRF9FUERDX1BXUkNUUkwwX19FUERDX1BXUkNUUkwwCUlPTVVYX1BBRCgweDVDMCwgMHgyMjQsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VQRENfUFdSQ1RSTDBfX0dQSU9fM18yOQlJT01VWF9QQUQoMHg1QzAsIDB4MjI0LCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9FUERDX1BXUkNUUkwwX19XRUlNX0QyOQlJT01VWF9QQUQoMHg1QzAsIDB4MjI0LCAyLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9FUERDX1BXUkNUUkwwX19FTENESUZfRDEzCUlPTVVYX1BBRCgweDVDMCwgMHgyMjQsIDMsIDB4NzMwLCAxLCBNWDUwX0VMQ0RJRl9QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRVBEQ19QV1JDVFJMMF9fQVVENF9SWEQJSU9NVVhfUEFEKDB4NUMwLCAweDIyNCwgNCwgMHg2YzQsIDEsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTBfUEFEX0VQRENfUFdSQ1RSTDFfX0VQRENfUFdSQ1RSTDEJSU9NVVhfUEFEKDB4NUM0LCAweDIyOCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRVBEQ19QV1JDVFJMMV9fR1BJT18zXzMwCUlPTVVYX1BBRCgweDVDNCwgMHgyMjgsIDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VQRENfUFdSQ1RSTDFfX1dFSU1fRDMwCUlPTVVYX1BBRCgweDVDNCwgMHgyMjgsIDIsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VQRENfUFdSQ1RSTDFfX0VMQ0RJRl9EMTQJSU9NVVhfUEFEKDB4NUM0LCAweDIyOCwgMywgMHg3MzQsIDEsIE1YNTBfRUxDRElGX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9FUERDX1BXUkNUUkwxX19BVUQ0X1JYQwlJT01VWF9QQUQoMHg1QzQsIDB4MjI4LCA0LCAweDZjYywgMSwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVg1MF9QQURfRVBEQ19QV1JDVFJMMl9fRVBEQ19QV1JDVFJMMglJT01VWF9QQUQoMHg1QzgsIDB4MjJDLCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9FUERDX1BXUkNUUkwyX19HUElPXzNfMzEJSU9NVVhfUEFEKDB4NUM4LCAweDIyQywgMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRVBEQ19QV1JDVFJMMl9fV0VJTV9EMzEJSU9NVVhfUEFEKDB4NUM4LCAweDIyQywgMiwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRVBEQ19QV1JDVFJMMl9fRUxDRElGX0QxNQlJT01VWF9QQUQoMHg1QzgsIDB4MjJDLCAzLCAweDczOCwgMSwgTVg1MF9FTENESUZfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VQRENfUFdSQ1RSTDJfX0FVRDRfUlhGUwlJT01VWF9QQUQoMHg1QzgsIDB4MjJDLCA0LCAweDZkMCwgMSwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VQRENfUFdSQ1RSTDJfX1NETUFfRVhUMAlJT01VWF9QQUQoMHg1QzgsIDB4MjJDLCA2LCAweDdiOCwgMSwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVg1MF9QQURfRVBEQ19QV1JDVFJMM19fUFdSQ1RSTDMJSU9NVVhfUEFEKDB4NUNDLCAweDIzMCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRVBEQ19QV1JDVFJMM19fR1BJT180XzIwCUlPTVVYX1BBRCgweDVDQywgMHgyMzAsIDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VQRENfUFdSQ1RSTDNfX1dFSU1fRUIyCUlPTVVYX1BBRCgweDVDQywgMHgyMzAsIDIsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VQRENfUFdSQ1RSTDNfX1NETUFfRVhUMQlJT01VWF9QQUQoMHg1Q0MsIDB4MjMwLCA2LCAweDdiYywgMSwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVg1MF9QQURfRVBEQ19WQ09NMF9fRVBEQ19WQ09NMAlJT01VWF9QQUQoMHg1RDAsIDB4MjM0LCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9FUERDX1ZDT00wX19HUElPXzRfMjEJSU9NVVhfUEFEKDB4NUQwLCAweDIzNCwgMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRVBEQ19WQ09NMF9fV0VJTV9FQjMJSU9NVVhfUEFEKDB4NUQwLCAweDIzNCwgMiwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDUwX1BBRF9FUERDX1ZDT00xX19FUERDX1ZDT00xCUlPTVVYX1BBRCgweDVENCwgMHgyMzgsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VQRENfVkNPTTFfX0dQSU9fNF8yMglJT01VWF9QQUQoMHg1RDQsIDB4MjM4LCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9FUERDX1ZDT00xX19XRUlNX0NTMwlJT01VWF9QQUQoMHg1RDQsIDB4MjM4LCAyLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTBfUEFEX0VQRENfQkRSMF9fRVBEQ19CRFIwCUlPTVVYX1BBRCgweDVEOCwgMHgyM0MsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VQRENfQkRSMF9fR1BJT180XzIzCUlPTVVYX1BBRCgweDVEOCwgMHgyM0MsIDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VQRENfQkRSMF9fRUxDRElGX0Q3CUlPTVVYX1BBRCgweDVEOCwgMHgyM0MsIDMsIDB4NzE4LCAxLCBNWDUwX0VMQ0RJRl9QQURfQ1RSTCkKKworI2RlZmluZSBNWDUwX1BBRF9FUERDX0JEUjFfX0VQRENfQkRSMQlJT01VWF9QQUQoMHg1REMsIDB4MjQwLCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9FUERDX0JEUjFfX0dQSU9fNF8yNAlJT01VWF9QQUQoMHg1REMsIDB4MjQwLCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9FUERDX0JEUjFfX0VMQ0RJRl9ENglJT01VWF9QQUQoMHg1REMsIDB4MjQwLCAzLCAweDcxNCwgMSwgTVg1MF9FTENESUZfUEFEX0NUUkwpCisKKyNkZWZpbmUgTVg1MF9QQURfRVBEQ19TRENFMF9fRVBEQ19TRENFMAlJT01VWF9QQUQoMHg1RTAsIDB4MjQ0LCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9FUERDX1NEQ0UwX19HUElPXzRfMjUJSU9NVVhfUEFEKDB4NUUwLCAweDI0NCwgMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRVBEQ19TRENFMF9fRUxDRElGX0Q1CUlPTVVYX1BBRCgweDVFMCwgMHgyNDQsIDMsIDB4NzEwLCAxLCBNWDUwX0VMQ0RJRl9QQURfQ1RSTCkKKworI2RlZmluZSBNWDUwX1BBRF9FUERDX1NEQ0UxX19FUERDX1NEQ0UxCUlPTVVYX1BBRCgweDVFNCwgMHgyNDgsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VQRENfU0RDRTFfX0dQSU9fNF8yNglJT01VWF9QQUQoMHg1RTQsIDB4MjQ4LCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9FUERDX1NEQ0UxX19FTENESUZfRDQJSU9NVVhfUEFEKDB4NUU0LCAweDI0OCwgMiwgMHg3MGMsIDEsIE1YNTBfRUxDRElGX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTBfUEFEX0VQRENfU0RDRTJfX0VQRENfU0RDRTIJCUlPTVVYX1BBRCgweDVFOCwgMHgyNEMsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VQRENfU0RDRTJfX0dQSU9fNF8yNwkJSU9NVVhfUEFEKDB4NUU4LCAweDI0QywgMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRVBEQ19TRENFMl9fRUxDRElGX0RBVDMJSU9NVVhfUEFEKDB4NUU4LCAweDI0QywgMywgMHg3MDgsIDEsIE1YNTBfRUxDRElGX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTBfUEFEX0VQRENfU0RDRTNfX0VQRENfU0RDRTMJSU9NVVhfUEFEKDB4NUVDLCAweDI1MCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRVBEQ19TRENFM19fR1BJT180XzI4CUlPTVVYX1BBRCgweDVFQywgMHgyNTAsIDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VQRENfU0RDRTNfX0VMQ0RJRl9EMglJT01VWF9QQUQoMHg1RUMsIDB4MjUwLCAzLCAweDcwNCwgMSwgTVg1MF9FTENESUZfUEFEX0NUUkwpCisKKyNkZWZpbmUgTVg1MF9QQURfRVBEQ19TRENFNF9fRVBEQ19TRENFNAlJT01VWF9QQUQoMHg1RjAsIDB4MjU0LCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9FUERDX1NEQ0U0X19HUElPXzRfMjkJSU9NVVhfUEFEKDB4NUYwLCAweDI1NCwgMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRVBEQ19TRENFNF9fRUxDRElGX0QxCUlPTVVYX1BBRCgweDVGMCwgMHgyNTQsIDMsIDB4NzAwLCAxLCBNWDUwX0VMQ0RJRl9QQURfQ1RSTCkKKworI2RlZmluZSBNWDUwX1BBRF9FUERDX1NEQ0U1X19FUERDX1NEQ0U1CUlPTVVYX1BBRCgweDVGNCwgMHgyNTgsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VQRENfU0RDRTVfX0dQSU9fNF8zMAlJT01VWF9QQUQoMHg1RjQsIDB4MjU4LCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9FUERDX1NEQ0U1X19FTENESUZfRDAJSU9NVVhfUEFEKDB4NUY0LCAweDI1OCwgMywgMHg2ZmMsIDEsIE1YNTBfRUxDRElGX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTBfUEFEX0VJTV9EQTBfX1dFSU1fQTAJSU9NVVhfUEFEKDB4NUY4LCAweDI1QywgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRUlNX0RBMF9fR1BJT18xXzAJSU9NVVhfUEFEKDB4NUY4LCAweDI1QywgMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRUlNX0RBMF9fS0VZX0NPTDQJSU9NVVhfUEFEKDB4NWY4LCAweDI1QywgMywgMHg3OTAsIDIsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTBfUEFEX0VJTV9EQTFfX1dFSU1fQTEJSU9NVVhfUEFEKDB4NUZDLCAweDI2MCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRUlNX0RBMV9fR1BJT18xXzEJSU9NVVhfUEFEKDB4NUZDLCAweDI2MCwgMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRUlNX0RBMV9fS0VZX1JPVzQJSU9NVVhfUEFEKDB4NWZjLCAweDI2MCwgMywgMHg3YTAsIDIsIE1YNTBfS0VZUEFEX0NUUkwpCisKKyNkZWZpbmUgTVg1MF9QQURfRUlNX0RBMl9fV0VJTV9BMglJT01VWF9QQUQoMHg2MDAsIDB4MjY0LCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9FSU1fREEyX19HUElPXzFfMglJT01VWF9QQUQoMHg2MDAsIDB4MjY0LCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9FSU1fREEyX19LRVlfQ09MNQlJT01VWF9QQUQoMHg2MDAsIDB4MjY0LCAzLCAweDc5NCwgMiwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVg1MF9QQURfRUlNX0RBM19fV0VJTV9BMwlJT01VWF9QQUQoMHg2MDQsIDB4MjY4LCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9FSU1fREEzX19HUElPXzFfMwlJT01VWF9QQUQoMHg2MDQsIDB4MjY4LCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9FSU1fREEzX19LRVlfUk9XNQlJT01VWF9QQUQoMHg2MDQsIDB4MjY4LCAzLCAweDdhNCwgMiwgTVg1MF9LRVlQQURfQ1RSTCkKKworI2RlZmluZSBNWDUwX1BBRF9FSU1fREE0X19XRUlNX0E0CUlPTVVYX1BBRCgweDYwOCwgMHgyNkMsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VJTV9EQTRfX0dQSU9fMV80CUlPTVVYX1BBRCgweDYwOCwgMHgyNkMsIDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VJTV9EQTRfX0tFWV9DT0w2CUlPTVVYX1BBRCgweDYwOCwgMHgyNkMsIDMsIDB4Nzk4LCAyLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDUwX1BBRF9FSU1fREE1X19XRUlNX0E1CUlPTVVYX1BBRCgweDYwQywgMHgyNzAsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VJTV9EQTVfX0dQSU9fMV81CUlPTVVYX1BBRCgweDYwQywgMHgyNzAsIDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VJTV9EQTVfX0tFWV9ST1c2CUlPTVVYX1BBRCgweDYwQywgMHgyNzAsIDMsIDB4N2E4LCAyLCBNWDUwX0tFWVBBRF9DVFJMKQorCisjZGVmaW5lIE1YNTBfUEFEX0VJTV9EQTZfX1dFSU1fQTYJSU9NVVhfUEFEKDB4NjEwLCAweDI3NCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRUlNX0RBNl9fR1BJT18xXzYJSU9NVVhfUEFEKDB4NjEwLCAweDI3NCwgMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRUlNX0RBNl9fS0VZX0NPTDcJSU9NVVhfUEFEKDB4NjEwLCAweDI3NCwgMywgMHg3OWMsIDIsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTBfUEFEX0VJTV9EQTdfX1dFSU1fQTcJSU9NVVhfUEFEKDB4NjE0LCAweDI3OCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRUlNX0RBN19fR1BJT18xXzcJSU9NVVhfUEFEKDB4NjE0LCAweDI3OCwgMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRUlNX0RBN19fS0VZX1JPVzcJSU9NVVhfUEFEKDB4NjE0LCAweDI3OCwgMywgMHg3YWMsIDIsIE1YNTBfS0VZUEFEX0NUUkwpCisKKyNkZWZpbmUgTVg1MF9QQURfRUlNX0RBOF9fV0VJTV9BOAlJT01VWF9QQUQoMHg2MTgsIDB4MjdDLCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9FSU1fREE4X19HUElPXzFfOAlJT01VWF9QQUQoMHg2MTgsIDB4MjdDLCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BJTl9FSU1fREE4X19OQU5ERl9DTEUJSU9NVVhfUEFEKDB4NjE4LCAweDI3QywgMiwgMHgwLCAwLCBQQURfQ1RMX0RTRV9ISUdIKQorCisjZGVmaW5lIE1YNTBfUEFEX0VJTV9EQTlfX1dFSU1fQTkJSU9NVVhfUEFEKDB4NjFDLCAweDI4MCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRUlNX0RBOV9fR1BJT18xXzkJSU9NVVhfUEFEKDB4NjFDLCAweDI4MCwgMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QSU5fRUlNX0RBOV9fTkFOREZfQUxFCUlPTVVYX1BBRCgweDYxQywgMHgyODAsIDIsIDB4MCwgMCwgUEFEX0NUTF9EU0VfSElHSCkKKworI2RlZmluZSBNWDUwX1BBRF9FSU1fREExMF9fV0VJTV9BMTAJSU9NVVhfUEFEKDB4NjIwLCAweDI4NCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRUlNX0RBMTBfX0dQSU9fMV8xMAlJT01VWF9QQUQoMHg2MjAsIDB4Mjg0LCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BJTl9FSU1fREExMF9fTkFOREZfQ0UwCUlPTVVYX1BBRCgweDYyMCwgMHgyODQsIDIsIDB4MCwgMCwgUEFEX0NUTF9EU0VfSElHSCkKKworI2RlZmluZSBNWDUwX1BBRF9FSU1fREExMV9fV0VJTV9BMTEJSU9NVVhfUEFEKDB4NjI0LCAweDI4OCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRUlNX0RBMTFfX0dQSU9fMV8xMQlJT01VWF9QQUQoMHg2MjQsIDB4Mjg4LCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BJTl9FSU1fREExMV9fTkFOREZfQ0UxCUlPTVVYX1BBRCgweDYyNCwgMHgyODgsIDIsIDB4MCwgMCwgUEFEX0NUTF9EU0VfSElHSCkKKworI2RlZmluZSBNWDUwX1BBRF9FSU1fREExMl9fV0VJTV9BMTIJSU9NVVhfUEFEKDB4NjI4LCAweDI4QywgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRUlNX0RBMTJfX0dQSU9fMV8xMglJT01VWF9QQUQoMHg2MjgsIDB4MjhDLCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BJTl9FSU1fREExMl9fTkFOREZfQ0UyCUlPTVVYX1BBRCgweDYyOCwgMHgyOEMsIDIsIDB4MCwgMCwgUEFEX0NUTF9EU0VfSElHSCkKKyNkZWZpbmUgTVg1MF9QQURfRUlNX0RBMTJfX0VQRENfU0RDRTYJSU9NVVhfUEFEKDB4NjI4LCAweDI4QywgMywgMHgwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDUwX1BBRF9FSU1fREExM19fV0VJTV9BMTMJSU9NVVhfUEFEKDB4NjJDLCAweDI5MCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRUlNX0RBMTNfX0dQSU9fMV8xMwlJT01VWF9QQUQoMHg2MkMsIDB4MjkwLCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BJTl9FSU1fREExM19fTkFOREZfQ0UzCUlPTVVYX1BBRCgweDYyQywgMHgyOTAsIDIsIDB4MCwgMCwgUEFEX0NUTF9EU0VfSElHSCkKKyNkZWZpbmUgTVg1MF9QSU5fRUlNX0RBMTNfX0VQRENfU0RDRTcJSU9NVVhfUEFEKDB4NjJDLCAweDI5MCwgMywgMHgwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDUwX1BBRF9FSU1fREExNF9fV0VJTV9BMTQJSU9NVVhfUEFEKDB4NjMwLCAweDI5NCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRUlNX0RBMTRfX0dQSU9fMV8xNAlJT01VWF9QQUQoMHg2MzAsIDB4Mjk0LCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9FSU1fREExNF9fTkFOREZfUkVBRFkJSU9NVVhfUEFEKDB4NjMwLCAweDI5NCwgMiwgMHg3QjQsIDIsIFBBRF9DVExfUEtFIHwgXAorCQkJCQkJCVBBRF9DVExfUFVFIHwgUEFEX0NUTF9QVVNfMTAwS19VUCkKKyNkZWZpbmUgTVg1MF9QQURfRUlNX0RBMTRfX0VQRENfU0RDRTgJSU9NVVhfUEFEKDB4NjMwLCAweDI5NCwgMywgMHgwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDUwX1BBRF9FSU1fREExNV9fV0VJTV9BMTUJSU9NVVhfUEFEKDB4NjM0LCAweDI5OCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRUlNX0RBMTVfX0dQSU9fMV8xNQlJT01VWF9QQUQoMHg2MzQsIDB4Mjk4LCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BJTl9FSU1fREExNV9fTkFOREZfRFFTCUlPTVVYX1BBRCgweDYzNCwgMHgyOTgsIDIsIDB4N0IwLCAyLCBQQURfQ1RMX0RTRV9ISUdIKQorI2RlZmluZSBNWDUwX1BBRF9FSU1fREExNV9fRVBEQ19TRENFOQlJT01VWF9QQUQoMHg2MzQsIDB4Mjk4LCAzLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTBfUEFEX0VJTV9DUzJfX1dFSU1fQ1MyCUlPTVVYX1BBRCgweDYzOCwgMHgyOUMsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VJTV9DUzJfX0dQSU9fMV8xNglJT01VWF9QQUQoMHg2MzgsIDB4MjlDLCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9FSU1fQ1MyX19XRUlNX0EyNwlJT01VWF9QQUQoMHg2MzgsIDB4MjlDLCAyLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTBfUEFEX0VJTV9DUzFfX1dFSU1fQ1MxCUlPTVVYX1BBRCgweDYzQywgMHgyQTAsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VJTV9DUzFfX0dQSU9fMV8xNwlJT01VWF9QQUQoMHg2M0MsIDB4MkEwLCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTBfUEFEX0VJTV9DUzBfX1dFSU1fQ1MwCUlPTVVYX1BBRCgweDY0MCwgMHgyQTQsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VJTV9DUzBfX0dQSU9fMV8xOAlJT01VWF9QQUQoMHg2NDAsIDB4MkE0LCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTBfUEFEX0VJTV9FQjBfX1dFSU1fRUIwCUlPTVVYX1BBRCgweDY0NCwgMHgyQTgsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VJTV9FQjBfX0dQSU9fMV8xOQlJT01VWF9QQUQoMHg2NDQsIDB4MkE4LCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTBfUEFEX0VJTV9FQjFfX1dFSU1fRUIxCUlPTVVYX1BBRCgweDY0OCwgMHgyQUMsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VJTV9FQjFfX0dQSU9fMV8yMAlJT01VWF9QQUQoMHg2NDgsIDB4MkFDLCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTBfUEFEX0VJTV9XQUlUX19XRUlNX1dBSVQJSU9NVVhfUEFEKDB4NjRDLCAweDJCMCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRUlNX1dBSVRfX0dQSU9fMV8yMQlJT01VWF9QQUQoMHg2NEMsIDB4MkIwLCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTBfUEFEX0VJTV9CQ0xLX19XRUlNX0JDTEsJSU9NVVhfUEFEKDB4NjUwLCAweDJCNCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MF9QQURfRUlNX0JDTEtfX0dQSU9fMV8yMglJT01VWF9QQUQoMHg2NTAsIDB4MkI0LCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTBfUEFEX0VJTV9SRFlfX1dFSU1fUkRZCUlPTVVYX1BBRCgweDY1NCwgMHgyQjgsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VJTV9SRFlfX0dQSU9fMV8yMwlJT01VWF9QQUQoMHg2NTQsIDB4MkI4LCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTBfUEFEX0VJTV9PRV9fV0VJTV9PRQlJT01VWF9QQUQoMHg2NTgsIDB4MkJDLCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9FSU1fT0VfX0dQSU9fMV8yNAlJT01VWF9QQUQoMHg2NTgsIDB4MkJDLCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTBfUEFEX0VJTV9SV19fV0VJTV9SVwlJT01VWF9QQUQoMHg2NUMsIDB4MkMwLCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUwX1BBRF9FSU1fUldfX0dQSU9fMV8yNQlJT01VWF9QQUQoMHg2NUMsIDB4MkMwLCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTBfUEFEX0VJTV9MQkFfX1dFSU1fTEJBCUlPTVVYX1BBRCgweDY2MCwgMHgyQzQsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VJTV9MQkFfX0dQSU9fMV8yNglJT01VWF9QQUQoMHg2NjAsIDB4MkM0LCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTBfUEFEX0VJTV9DUkVfX1dFSU1fQ1JFCUlPTVVYX1BBRCgweDY2NCwgMHgyQzgsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTBfUEFEX0VJTV9DUkVfX0dQSU9fMV8yNwlJT01VWF9QQUQoMHg2NjQsIDB4MkM4LCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZW5kaWYgLyogX19NQUNIX0lPTVVYX01YNTBfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtbXg1MS5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lvbXV4LW14NTEuaAppbmRleCBkN2E0MWU5Li5iNjc2N2Y5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtbXg1MS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC1teDUxLmgKQEAgLTE1LDM3MyArMTUsMTU1MyBAQAogCiAjaW5jbHVkZSA8bWFjaC9pb211eC12My5oPgogCi0vKgotICogdmFyaW91cyBJT01VWCBhbHRlcm5hdGUgb3V0cHV0IGZ1bmN0aW9ucyAoMS03KQotICovCi10eXBlZGVmIGVudW0gaW9tdXhfY29uZmlnIHsKLQlJT01VWF9DT05GSUdfQUxUMCwKLQlJT01VWF9DT05GSUdfQUxUMSwKLQlJT01VWF9DT05GSUdfQUxUMiwKLQlJT01VWF9DT05GSUdfQUxUMywKLQlJT01VWF9DT05GSUdfQUxUNCwKLQlJT01VWF9DT05GSUdfQUxUNSwKLQlJT01VWF9DT05GSUdfQUxUNiwKLQlJT01VWF9DT05GSUdfQUxUNywKLQlJT01VWF9DT05GSUdfR1BJTywgICAgICAvKiBhZGRlZCB0byBoZWxwIHVzZXIgdXNlIEdQSU8gbW9kZSAqLwotCUlPTVVYX0NPTkZJR19TSU9OID0gMHgxIDw8IDQsICAgLyogTE9PUEJBQ0s6TVVYIFNJT04gYml0ICovCi19IGlvbXV4X3Bpbl9jZmdfdDsKLQogLyogUGFkIGNvbnRyb2wgZ3JvdXBpbmdzICovCi0jZGVmaW5lIE1YNTFfVUFSVDFfUEFEX0NUUkwJKFBBRF9DVExfSFlTIHwgUEFEX0NUTF9QS0UgfCBQQURfQ1RMX1BVRSB8IFwKLQkJCQlQQURfQ1RMX0RTRV9ISUdIKQotI2RlZmluZSBNWDUxX1VBUlQyX1BBRF9DVFJMCShQQURfQ1RMX1BLRSB8IFBBRF9DVExfUFVFIHwgUEFEX0NUTF9EU0VfSElHSCB8IFwKLQkJCQlQQURfQ1RMX1NSRV9GQVNUKQotI2RlZmluZSBNWDUxX1VBUlQzX1BBRF9DVFJMCShQQURfQ1RMX1BLRSB8IFBBRF9DVExfRFNFX0hJR0ggfCBcCi0JCQkJUEFEX0NUTF9TUkVfRkFTVCkKKyNkZWZpbmUgTVg1MV9VQVJUX1BBRF9DVFJMCShQQURfQ1RMX1BLRSB8IFBBRF9DVExfUFVFIHwgUEFEX0NUTF9EU0VfSElHSCB8IFwKKwkJCQlQQURfQ1RMX0hZUyB8IFBBRF9DVExfU1JFX0ZBU1QpCiAjZGVmaW5lIE1YNTFfSTJDX1BBRF9DVFJMCShQQURfQ1RMX1NSRV9GQVNUIHwgUEFEX0NUTF9PREUgfCBcCi0JCQkJUEFEX0NUTF9EU0VfSElHSCB8IFBBRF9DVExfUFVTXzEwMEtfVVAgfCBQQURfQ1RMX0hZUykKLSNkZWZpbmUgTVg1MV9VU0JIMV9QQURfQ1RSTAkoUEFEX0NUTF9TUkVfRkFTVCB8IFBBRF9DVExfRFNFX0hJR0ggfCBcCi0JCQkJUEFEX0NUTF9QVVNfMTAwS19VUCB8IFBBRF9DVExfUFVFIHwgXAotCQkJCVBBRF9DVExfUEtFIHwgUEFEX0NUTF9IWVMpCi0jZGVmaW5lIE1YNTFfR1BJT19QQURfQ1RSTAkJKFBBRF9DVExfRFNFX0hJR0ggfCBQQURfQ1RMX1BLRSB8IFwKLQkJCQlQQURfQ1RMX1NSRV9GQVNUKQotI2RlZmluZSBNWDUxX0dQSU9fUEFEX0NUUkxfMgkoUEFEX0NUTF9TUkVfRkFTVCB8IFBBRF9DVExfRFNFX0hJR0ggfCBcCi0JCQkJCVBBRF9DVExfUFVTXzEwMEtfVVApCi0jZGVmaW5lIE1YNTFfRUNTUElfUEFEX0NUUkwJKFBBRF9DVExfSFlTIHwgUEFEX0NUTF9QS0UgfCBQQURfQ1RMX0RTRV9ISUdIIHwgXAotCQkJCVBBRF9DVExfU1JFX0ZBU1QpCi0jZGVmaW5lIE1YNTFfU0RIQ0lfUEFEX0NUUkwJKFBBRF9DVExfRFNFX0hJR0ggfCBQQURfQ1RMX1BVU180N0tfVVAgfCBcCi0JCQkJUEFEX0NUTF9QS0UgfCBQQURfQ1RMX1BVRSB8IFBBRF9DVExfU1JFX0ZBU1QgfCBcCi0JCQkJUEFEX0NUTF9EVlMpCisJCQkJUEFEX0NUTF9EU0VfSElHSCB8IFBBRF9DVExfUFVTXzEwMEtfVVAgfCBcCisJCQkJUEFEX0NUTF9IWVMpCisjZGVmaW5lIE1YNTFfRVNESENfUEFEX0NUUkwJKFBBRF9DVExfU1JFX0ZBU1QgfCBQQURfQ1RMX09ERSB8IFwKKwkJCQlQQURfQ1RMX0RTRV9ISUdIIHwgUEFEX0NUTF9QVVNfMTAwS19VUCB8IFwKKwkJCQlQQURfQ1RMX0hZUykKKyNkZWZpbmUgTVg1MV9VU0JIMV9QQURfQ1RSTAkoUEFEX0NUTF9QS0UgfCBQQURfQ1RMX1NSRV9GQVNUIHwgXAorCQkJCVBBRF9DVExfRFNFX0hJR0ggfCBQQURfQ1RMX1BVU18xMDBLX1VQIHwgXAorCQkJCVBBRF9DVExfSFlTIHwgUEFEX0NUTF9QVUUpCisjZGVmaW5lIE1YNTFfRUNTUElfUEFEX0NUUkwJKFBBRF9DVExfUEtFIHwgUEFEX0NUTF9IWVMgfCBcCisJCQkJUEFEX0NUTF9EU0VfSElHSCB8IFBBRF9DVExfU1JFX0ZBU1QpCisjZGVmaW5lIE1YNTFfU0RIQ0lfUEFEX0NUUkwJKFBBRF9DVExfUEtFIHwgUEFEX0NUTF9EU0VfSElHSCB8IFwKKwkJCQlQQURfQ1RMX1BVU180N0tfVVAgfCBQQURfQ1RMX1BVRSB8IFwKKwkJCQlQQURfQ1RMX1NSRV9GQVNUIHwgUEFEX0NUTF9EVlMpCisjZGVmaW5lIE1YNTFfR1BJT19QQURfQ1RSTAkoUEFEX0NUTF9EU0VfSElHSCB8IFBBRF9DVExfUEtFIHwgUEFEX0NUTF9TUkVfRkFTVCkKIAotI2RlZmluZSBNWDUxX1BBRF9DVFJMXzEJKFBBRF9DVExfU1JFX0ZBU1QgfCBQQURfQ1RMX0RTRV9ISUdIIHwgXAotCQkJCQlQQURfQ1RMX1BVRSB8IFBBRF9DVExfUEtFIHwgUEFEX0NUTF9IWVMpCi0jZGVmaW5lIE1YNTFfUEFEX0NUUkxfMgkoUEFEX0NUTF9IWVMgfCBQQURfQ1RMX1BLRSkKLSNkZWZpbmUgTVg1MV9QQURfQ1RSTF8zCShQQURfQ1RMX1BLRSB8IFBBRF9DVExfUFVTXzEwMEtfVVApCi0jZGVmaW5lIE1YNTFfUEFEX0NUUkxfNAkoUEFEX0NUTF9EVlMgfCBQQURfQ1RMX0hZUyB8IFBBRF9DVExfUEtFKQotI2RlZmluZSBNWDUxX1BBRF9DVFJMXzUJKFBBRF9DVExfRFZTIHwgUEFEX0NUTF9EU0VfSElHSCkKKyNkZWZpbmUgTVg1MV9QQURfQ1RSTF8yCQkoUEFEX0NUTF9QS0UgfCBQQURfQ1RMX0hZUykKKyNkZWZpbmUgTVg1MV9QQURfQ1RSTF8zCQkoUEFEX0NUTF9QS0UgfCBQQURfQ1RMX1BVU18xMDBLX1VQKQorI2RlZmluZSBNWDUxX1BBRF9DVFJMXzQJCShQQURfQ1RMX1BLRSB8IFBBRF9DVExfRFZTIHwgUEFEX0NUTF9IWVMpCisjZGVmaW5lIE1YNTFfUEFEX0NUUkxfNQkJKFBBRF9DVExfRFZTIHwgUEFEX0NUTF9EU0VfSElHSCkKIAogLyoKICAqIFRoZSBuYW1pbmcgY29udmVudGlvbiBmb3IgdGhlIHBhZCBtb2RlcyBpcyBNWDUxX1BBRF88cGFkbmFtZT5fXzxwYWRtb2RlPgotICogSWYgPHBhZG5hbWU+IG9yIDxwYWRtb2RlPiByZWZlcnMgdG8gYSBHUElPLCBpdCBpcyBuYW1lZCBHUElPXzx1bml0Pl88bnVtPgorICogSWYgPHBhZG5hbWU+IG9yIDxwYWRtb2RlPiByZWZlcnMgdG8gYSBHUElPLCBpdCBpcyBuYW1lZCBHUElPPHVuaXQ+XzxudW0+CiAgKiBTZWUgYWxzbyBpb211eC12My5oCiAgKi8KIAotLyoJCQkJCQkJICBQQUQgICAgTVVYICAgQUxUIElOUFNFIFBBVEggUEFEQ1RSTCAqLwotI2RlZmluZSBNWDUxX1BBRF9FSU1fREEwX19FSU1fREEwCQlJT01VWF9QQUQoMHg3YTgsIDB4MDFjLCAwLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0VJTV9EQTFfX0VJTV9EQTEJCUlPTVVYX1BBRCgweDdhOCwgMHgwMjAsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfRUlNX0RBMl9fRUlNX0RBMgkJSU9NVVhfUEFEKDB4N2E4LCAweDAyNCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9FSU1fREEzX19FSU1fREEzCQlJT01VWF9QQUQoMHg3YTgsIDB4MDI4LCAwLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0VJTV9EQTRfX0VJTV9EQTQJCUlPTVVYX1BBRCgweDdhYywgMHgwMmMsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfRUlNX0RBNV9fRUlNX0RBNQkJSU9NVVhfUEFEKDB4N2FjLCAweDAzMCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9FSU1fREE2X19FSU1fREE2CQlJT01VWF9QQUQoMHg3YWMsIDB4MDM0LCAwLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0VJTV9EQTdfX0VJTV9EQTcJCUlPTVVYX1BBRCgweDdhYywgMHgwMzgsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfRUlNX0RBOF9fRUlNX0RBOAkJSU9NVVhfUEFEKDB4N2IwLCAweDAzYywgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9FSU1fREE5X19FSU1fREE5CQlJT01VWF9QQUQoMHg3YjAsIDB4MDQwLCAwLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0VJTV9EQTEwX19FSU1fREExMAkJSU9NVVhfUEFEKDB4N2IwLCAweDA0NCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9FSU1fREExMV9fRUlNX0RBMTEJCUlPTVVYX1BBRCgweDdiMCwgMHgwNDgsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfRUlNX0RBMTJfX0VJTV9EQTEyCQlJT01VWF9QQUQoMHg3YmMsIDB4MDRjLCAwLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0VJTV9EQTEzX19FSU1fREExMwkJSU9NVVhfUEFEKDB4N2JjLCAweDA1MCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9FSU1fREExNF9fRUlNX0RBMTQJCUlPTVVYX1BBRCgweDdiYywgMHgwNTQsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfRUlNX0RBMTVfX0VJTV9EQTE1CQlJT01VWF9QQUQoMHg3YmMsIDB4MDU4LCAwLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0VJTV9EMTZfX0dQSU9fMl8wICAgICAgICAgICAgICBJT01VWF9QQUQoMHgzZjAsIDB4MDVjLCAxLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0VJTV9EMTZfX0kyQzFfU0RBCQlJT01VWF9QQUQoMHgzZjAsIDB4MDVjLCAoNCB8IElPTVVYX0NPTkZJR19TSU9OKSwgXAotCQkJCQkJCTB4MDliNCwgMCwgTVg1MV9JMkNfUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0VJTV9EMTdfX0dQSU9fMl8xICAgICAgICAgICAgICBJT01VWF9QQUQoMHgzZjQsIDB4MDYwLCAxLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0VJTV9EMThfX0dQSU9fMl8yICAgICAgICAgICAgICBJT01VWF9QQUQoMHgzZjgsIDB4MDY0LCAxLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0VJTV9EMTlfX0dQSU9fMl8zICAgICAgICAgICAgICBJT01VWF9QQUQoMHgzZmMsIDB4MDY4LCAxLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0VJTV9EMTlfX0kyQzFfU0NMCQlJT01VWF9QQUQoMHgzZmMsIDB4MDY4LCAoNCB8IElPTVVYX0NPTkZJR19TSU9OKSwgXAotCQkJCQkJCTB4MDliMCwgMCwgTVg1MV9JMkNfUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0VJTV9EMjBfX0dQSU9fMl80ICAgICAgICAgICAgICBJT01VWF9QQUQoMHg0MDAsIDB4MDZjLCAxLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0VJTV9EMjFfX0dQSU9fMl81CQlJT01VWF9QQUQoMHg0MDQsIDB4MDcwLCAxLCAweDAsICAgMCwgTVg1MV9HUElPX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9FSU1fRDIyX19HUElPXzJfNiAgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NDA4LCAweDA3NCwgMSwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9FSU1fRDIzX19HUElPXzJfNyAgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NDBjLCAweDA3OCwgMSwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9FSU1fRDI0X19VQVJUM19DVFMgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NDEwLCAweDA3YywgMywgMHgwLCAgIDAsIE1YNTFfVUFSVDNfUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0VJTV9EMjVfX1VBUlQzX1JYRCAgICAgICAgICAgICBJT01VWF9QQUQoMHg0MTQsIDB4MDgwLCAzLCAweDlmNCwgMCwgTVg1MV9VQVJUM19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfRUlNX0QyNV9fVUFSVDJfQ1RTCQlJT01VWF9QQUQoMHg0MTQsIDB4MDgwLCA0LCAweDAsICAgMCwgTVg1MV9VQVJUMl9QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfRUlNX0QyNl9fVUFSVDNfVFhEICAgICAgICAgICAgIElPTVVYX1BBRCgweDQxOCwgMHgwODQsIDMsIDB4MCwgICAwLCBNWDUxX1VBUlQzX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9FSU1fRDI2X19VQVJUMl9SVFMJCUlPTVVYX1BBRCgweDQxOCwgMHgwODQsIDQsIDB4OWU4LCAzLCBNWDUxX1VBUlQyX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9FSU1fRDI3X19VQVJUM19SVFMgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NDFjLCAweDA4OCwgMywgMHg5ZjAsIDMsIE1YNTFfVUFSVDNfUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0VJTV9EMjhfX0VJTV9EMjggICAgICAgICAgICAgICBJT01VWF9QQUQoMHg0MjAsIDB4MDhjLCAwLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0VJTV9EMjlfX0VJTV9EMjkgICAgICAgICAgICAgICBJT01VWF9QQUQoMHg0MjQsIDB4MDkwLCAwLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0VJTV9EMzBfX0VJTV9EMzAgICAgICAgICAgICAgICBJT01VWF9QQUQoMHg0MjgsIDB4MDk0LCAwLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0VJTV9EMzFfX0VJTV9EMzEgICAgICAgICAgICAgICBJT01VWF9QQUQoMHg0MmMsIDB4MDljLCAwLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0VJTV9BMTZfX0dQSU9fMl8xMCAgICAgICAgICAgICBJT01VWF9QQUQoMHg0MzAsIDB4MDljLCAxLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0VJTV9BMTdfX0dQSU9fMl8xMSAgICAgICAgICAgICBJT01VWF9QQUQoMHg0MzQsIDB4MGEwLCAxLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0VJTV9BMThfX0dQSU9fMl8xMiAgICAgICAgICAgICBJT01VWF9QQUQoMHg0MzgsIDB4MGE0LCAxLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0VJTV9BMTlfX0dQSU9fMl8xMyAgICAgICAgICAgICBJT01VWF9QQUQoMHg0M2MsIDB4MGE4LCAxLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0VJTV9BMjBfX0dQSU9fMl8xNCAgICAgICAgICAgICBJT01VWF9QQUQoMHg0NDAsIDB4MGFjLCAxLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0VJTV9BMjFfX0dQSU9fMl8xNSAgICAgICAgICAgICBJT01VWF9QQUQoMHg0NDQsIDB4MGIwLCAxLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0VJTV9BMjJfX0dQSU9fMl8xNiAgICAgICAgICAgICBJT01VWF9QQUQoMHg0NDgsIDB4MGI0LCAxLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0VJTV9BMjNfX0dQSU9fMl8xNyAgICAgICAgICAgICBJT01VWF9QQUQoMHg0NGMsIDB4MGI4LCAxLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0VJTV9BMjRfX0dQSU9fMl8xOCAgICAgICAgICAgICBJT01VWF9QQUQoMHg0NTAsIDB4MGJjLCAxLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0VJTV9BMjVfX0dQSU9fMl8xOSAgICAgICAgICAgICBJT01VWF9QQUQoMHg0NTQsIDB4MGMwLCAxLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0VJTV9BMjZfX0dQSU9fMl8yMCAgICAgICAgICAgICBJT01VWF9QQUQoMHg0NTgsIDB4MGM0LCAxLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0VJTV9BMjdfX0dQSU9fMl8yMSAgICAgICAgICAgICBJT01VWF9QQUQoMHg0NWMsIDB4MGM4LCAxLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0VJTV9FQjBfX0VJTV9FQjAgICAgICAgICAgICAgICBJT01VWF9QQUQoMHg0NjAsIDB4MGNjLCAwLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0VJTV9FQjFfX0VJTV9FQjEgICAgICAgICAgICAgICBJT01VWF9QQUQoMHg0NjQsIDB4MGQwLCAwLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0VJTV9FQjJfX0dQSU9fMl8yMiAgICAgICAgICAgICBJT01VWF9QQUQoMHg0NjgsIDB4MGQ0LCAxLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0VJTV9FQjJfX0ZFQ19NRElPCQlJT01VWF9QQUQoMHg0NjgsIDB4MGQ0LCAzLCAweDAsICAgMCwgTVg1MV9QQURfQ1RSTF8xIHwgUEFEX0NUTF9QVVNfMjJLX1VQKQotI2RlZmluZSBNWDUxX1BBRF9FSU1fRUIzX19HUElPXzJfMjMgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NDZjLCAweDBkOCwgMSwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9FSU1fRUIzX19GRUNfUkRBVDEJCUlPTVVYX1BBRCgweDQ2YywgMHgwZDgsIDMsIDB4MCwgICAwLCBNWDUxX1BBRF9DVFJMXzIpCi0jZGVmaW5lIE1YNTFfUEFEX0VJTV9PRV9fR1BJT18yXzI0ICAgICAgICAgICAgICBJT01VWF9QQUQoMHg0NzAsIDB4MGRjLCAxLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0VJTV9DUzBfX0dQSU9fMl8yNSAgICAgICAgICAgICBJT01VWF9QQUQoMHg0NzQsIDB4MGUwLCAxLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0VJTV9DUzFfX0dQSU9fMl8yNiAgICAgICAgICAgICBJT01VWF9QQUQoMHg0NzgsIDB4MGU0LCAxLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0VJTV9DUzJfX0dQSU9fMl8yNyAgICAgICAgICAgICBJT01VWF9QQUQoMHg0N2MsIDB4MGU4LCAxLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0VJTV9DUzJfX0ZFQ19SREFUMgkJSU9NVVhfUEFEKDB4NDdjLCAweDBlOCwgMywgMHgwLCAgIDAsIE1YNTFfUEFEX0NUUkxfMikKLSNkZWZpbmUgTVg1MV9QQURfRUlNX0NTM19fR1BJT18yXzI4ICAgICAgICAgICAgIElPTVVYX1BBRCgweDQ4MCwgMHgwZWMsIDEsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfRUlNX0NTM19fRkVDX1JEQVQzCQlJT01VWF9QQUQoMHg0ODAsIDB4MGVjLCAzLCAweDAsICAgMCwgTVg1MV9QQURfQ1RSTF8yKQotI2RlZmluZSBNWDUxX1BBRF9FSU1fQ1M0X19HUElPXzJfMjkgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NDg0LCAweDBmMCwgMSwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9FSU1fQ1M0X19GRUNfUlhfRVIJCUlPTVVYX1BBRCgweDQ4NCwgMHgwZjAsIDMsIDB4MCwgICAwLCBNWDUxX1BBRF9DVFJMXzIpCi0jZGVmaW5lIE1YNTFfUEFEX0VJTV9DUzVfX0dQSU9fMl8zMCAgICAgICAgICAgICBJT01VWF9QQUQoMHg0ODgsIDB4MGY0LCAxLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0VJTV9DUzVfX0ZFQ19DUlMJCUlPTVVYX1BBRCgweDQ4OCwgMHgwZjQsIDMsIDB4MCwgICAwLCBNWDUxX1BBRF9DVFJMXzIpCi0jZGVmaW5lIE1YNTFfUEFEX0VJTV9EVEFDS19fR1BJT18yXzMxICAgICAgICAgICBJT01VWF9QQUQoMHg0OGMsIDB4MGY4LCAxLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0VJTV9MQkFfX0dQSU9fM18xICAgICAgICAgICAgICBJT01VWF9QQUQoMHg0OTQsIDB4MEZDLCAxLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0VJTV9DUkVfX0dQSU9fM18yICAgICAgICAgICAgICBJT01VWF9QQUQoMHg0QTAsIDB4MTAwLCAxLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0RSQU1fQ1MxX19EUkFNX0NTMSAgICAgICAgICAgICBJT01VWF9QQUQoMHg0RDAsIDB4MTA0LCAwLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX05BTkRGX1dFX0JfX0dQSU9fM18zICAgICAgICAgICBJT01VWF9QQUQoMHg0RTQsIDB4MTA4LCAzLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX05BTkRGX1JFX0JfX0dQSU9fM180ICAgICAgICAgICBJT01VWF9QQUQoMHg0RTgsIDB4MTBDLCAzLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX05BTkRGX0FMRV9fR1BJT18zXzUgICAgICAgICAgICBJT01VWF9QQUQoMHg0RUMsIDB4MTEwLCAzLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX05BTkRGX0NMRV9fR1BJT18zXzYgICAgICAgICAgICBJT01VWF9QQUQoMHg0RjAsIDB4MTE0LCAzLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX05BTkRGX1dQX0JfX0dQSU9fM183ICAgICAgICAgICBJT01VWF9QQUQoMHg0RjQsIDB4MTE4LCAzLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX05BTkRGX1JCMF9fR1BJT18zXzggICAgICAgICAgICBJT01VWF9QQUQoMHg0RjgsIDB4MTFDLCAzLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX05BTkRGX1JCMV9fR1BJT18zXzkgICAgICAgICAgICBJT01VWF9QQUQoMHg0RkMsIDB4MTIwLCAzLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX05BTkRGX1JCMl9fR1BJT18zXzEwICAgICAgICAgICBJT01VWF9QQUQoMHg1MDAsIDB4MTI0LCAzLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX05BTkRGX1JCMl9fRUNTUEkyX1NDTEsgICAgICAgICBJT01VWF9QQUQoMHg1MDAsIDB4MTI0LCAyLCAweDAsICAgMCwgTVg1MV9FQ1NQSV9QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfTkFOREZfUkIyX19GRUNfQ09MCQlJT01VWF9QQUQoMHg1MDAsIDB4MTI0LCAxLCAweDAsICAgMCwgTVg1MV9QQURfQ1RSTF8yKQotI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9SQjNfX0dQSU9fM18xMSAgICAgICAgICAgSU9NVVhfUEFEKDB4NTA0LCAweDEyOCwgMywgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9SQjNfX0VDU1BJMl9NSVNPICAgICAgICAgSU9NVVhfUEFEKDB4NTA0LCAweDEyOCwgMiwgMHgwLCAgIDAsIE1YNTFfRUNTUElfUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX05BTkRGX1JCM19fRkVDX1JYQ0xLCQlJT01VWF9QQUQoMHg1MDQsIDB4MTI4LCAxLCAweDAsICAgMCwgTVg1MV9QQURfQ1RSTF8yKQotI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9SQjZfX0ZFQ19SREFUMAkJSU9NVVhfUEFEKDB4NURDLCAweDEzNCwgMSwgMHgwLCAgIDAsIE1YNTFfUEFEX0NUUkxfNCkKLSNkZWZpbmUgTVg1MV9QQURfTkFOREZfUkI3X19GRUNfVERBVDAJCUlPTVVYX1BBRCgweDVFMCwgMHgxMzgsIDEsIDB4MCwgICAwLCBNWDUxX1BBRF9DVFJMXzUpCi0jZGVmaW5lIE1YNTFfUEFEX0dQSU9fTkFORF9fR1BJT18zXzEyICAgICAgICAgICBJT01VWF9QQUQoMHg1MTQsIDB4MTJDLCAzLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX05BTkRGX0NTMF9fR1BJT18zXzE2ICAgICAgICAgICBJT01VWF9QQUQoMHg1MTgsIDB4MTMwLCAzLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX05BTkRGX0NTMV9fR1BJT18zXzE3ICAgICAgICAgICBJT01VWF9QQUQoMHg1MUMsIDB4MTM0LCAzLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX05BTkRGX0NTMl9fR1BJT18zXzE4ICAgICAgICAgICBJT01VWF9QQUQoMHg1MjAsIDB4MTM4LCAzLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX05BTkRGX0NTMl9fRkVDX1RYX0VSCQlJT01VWF9QQUQoMHg1MjAsIDB4MTM4LCAyLCAweDAsICAgMCwgTVg1MV9QQURfQ1RSTF81KQotI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9DUzNfX0dQSU9fM18xOSAgICAgICAgICAgSU9NVVhfUEFEKDB4NTI0LCAweDEzQywgMywgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9DUzNfX0ZFQ19NREMJCUlPTVVYX1BBRCgweDUyNCwgMHgxM0MsIDIsIDB4MCwgICAwLCBNWDUxX1BBRF9DVFJMXzUpCi0jZGVmaW5lIE1YNTFfUEFEX05BTkRGX0NTNF9fR1BJT18zXzIwICAgICAgICAgICBJT01VWF9QQUQoMHg1MjgsIDB4MTQwLCAzLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX05BTkRGX0NTNF9fRkVDX1REQVQxCQlJT01VWF9QQUQoMHg1MjgsIDB4MTQwLCAyLCAweDAsICAgMCwgTVg1MV9QQURfQ1RSTF81KQotI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9DUzVfX0dQSU9fM18yMSAgICAgICAgICAgSU9NVVhfUEFEKDB4NTJDLCAweDE0NCwgMywgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9DUzVfX0ZFQ19UREFUMgkJSU9NVVhfUEFEKDB4NTJDLCAweDE0NCwgMiwgMHgwLCAgIDAsIE1YNTFfUEFEX0NUUkxfNSkKLSNkZWZpbmUgTVg1MV9QQURfTkFOREZfQ1M2X19HUElPXzNfMjIgICAgICAgICAgIElPTVVYX1BBRCgweDUzMCwgMHgxNDgsIDMsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfTkFOREZfQ1M2X19GRUNfVERBVDMJCUlPTVVYX1BBRCgweDUzMCwgMHgxNDgsIDIsIDB4MCwgICAwLCBNWDUxX1BBRF9DVFJMXzUpCi0jZGVmaW5lIE1YNTFfUEFEX05BTkRGX0NTN19fR1BJT18zXzIzICAgICAgICAgICBJT01VWF9QQUQoMHg1MzQsIDB4MTRDLCAzLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX05BTkRGX0NTN19fRkVDX1RYX0VOCQlJT01VWF9QQUQoMHg1MzQsIDB4MTRDLCAxLCAweDAsICAgMCwgTVg1MV9QQURfQ1RSTF81KQotI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9SRFlfSU5UX19HUElPXzNfMjQgICAgICAgSU9NVVhfUEFEKDB4NTM4LCAweDE1MCwgMywgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9SRFlfSU5UX19GRUNfVFhfQ0xLCUlPTVVYX1BBRCgweDUzOCwgMHgxNTAsIDEsIDB4MCwgICAwLCBNWDUxX1BBRF9DVFJMXzQpCi0jZGVmaW5lIE1YNTFfUEFEX05BTkRGX0QxNV9fR1BJT18zXzI1ICAgICAgICAgICBJT01VWF9QQUQoMHg1M0MsIDB4MTU0LCAzLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX05BTkRGX0QxNV9fRUNTUEkyX01PU0kgICAgICAgICBJT01VWF9QQUQoMHg1M0MsIDB4MTU0LCAyLCAweDAsICAgMCwgTVg1MV9FQ1NQSV9QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfTkFOREZfRDE0X19HUElPXzNfMjYgICAgICAgICAgIElPTVVYX1BBRCgweDU0MCwgMHgxNTgsIDMsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfTkFOREZfRDEzX19HUElPXzNfMjcgICAgICAgICAgIElPTVVYX1BBRCgweDU0NCwgMHgxNUMsIDMsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfTkFOREZfRDEyX19HUElPXzNfMjggICAgICAgICAgIElPTVVYX1BBRCgweDU0OCwgMHgxNjAsIDMsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfTkFOREZfRDExX19HUElPXzNfMjkgICAgICAgICAgIElPTVVYX1BBRCgweDU0QywgMHgxNjQsIDMsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfTkFOREZfRDEwX19HUElPXzNfMzAgICAgICAgICAgIElPTVVYX1BBRCgweDU1MCwgMHgxNjgsIDMsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfTkFOREZfRDlfX0dQSU9fM18zMSAgICAgICAgICAgIElPTVVYX1BBRCgweDU1NCwgMHgxNkMsIDMsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfTkFOREZfRDhfX0dQSU9fNF8wICAgICAgICAgICAgIElPTVVYX1BBRCgweDU1OCwgMHgxNzAsIDMsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfTkFOREZfRDdfX0dQSU9fNF8xICAgICAgICAgICAgIElPTVVYX1BBRCgweDU1QywgMHgxNzQsIDMsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfTkFOREZfRDZfX0dQSU9fNF8yICAgICAgICAgICAgIElPTVVYX1BBRCgweDU2MCwgMHgxNzgsIDMsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfTkFOREZfRDVfX0dQSU9fNF8zICAgICAgICAgICAgIElPTVVYX1BBRCgweDU2NCwgMHgxN0MsIDMsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfTkFOREZfRDRfX0dQSU9fNF80ICAgICAgICAgICAgIElPTVVYX1BBRCgweDU2OCwgMHgxODAsIDMsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfTkFOREZfRDNfX0dQSU9fNF81ICAgICAgICAgICAgIElPTVVYX1BBRCgweDU2QywgMHgxODQsIDMsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfTkFOREZfRDJfX0dQSU9fNF82ICAgICAgICAgICAgIElPTVVYX1BBRCgweDU3MCwgMHgxODgsIDMsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfTkFOREZfRDFfX0dQSU9fNF83ICAgICAgICAgICAgIElPTVVYX1BBRCgweDU3NCwgMHgxOEMsIDMsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfTkFOREZfRDBfX0dQSU9fNF84ICAgICAgICAgICAgIElPTVVYX1BBRCgweDU3OCwgMHgxOTAsIDMsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfQ1NJMV9EOF9fR1BJT18zXzEyICAgICAgICAgICAgIElPTVVYX1BBRCgweDU3QywgMHgxOTQsIDMsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfQ1NJMV9EOV9fR1BJT18zXzEzICAgICAgICAgICAgIElPTVVYX1BBRCgweDU4MCwgMHgxOTgsIDMsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfQ1NJMV9EMTBfX0NTSTFfRDEwICAgICAgICAgICAgIElPTVVYX1BBRCgweDU4NCwgMHgxOUMsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfQ1NJMV9EMTFfX0NTSTFfRDExICAgICAgICAgICAgIElPTVVYX1BBRCgweDU4OCwgMHgxQTAsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfQ1NJMV9EMTJfX0NTSTFfRDEyICAgICAgICAgICAgIElPTVVYX1BBRCgweDU4QywgMHgxQTQsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfQ1NJMV9EMTNfX0NTSTFfRDEzICAgICAgICAgICAgIElPTVVYX1BBRCgweDU5MCwgMHgxQTgsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfQ1NJMV9EMTRfX0NTSTFfRDE0ICAgICAgICAgICAgIElPTVVYX1BBRCgweDU5NCwgMHgxQUMsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfQ1NJMV9EMTVfX0NTSTFfRDE1ICAgICAgICAgICAgIElPTVVYX1BBRCgweDU5OCwgMHgxQjAsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfQ1NJMV9EMTZfX0NTSTFfRDE2ICAgICAgICAgICAgIElPTVVYX1BBRCgweDU5QywgMHgxQjQsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfQ1NJMV9EMTdfX0NTSTFfRDE3ICAgICAgICAgICAgIElPTVVYX1BBRCgweDVBMCwgMHgxQjgsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfQ1NJMV9EMThfX0NTSTFfRDE4ICAgICAgICAgICAgIElPTVVYX1BBRCgweDVBNCwgMHgxQkMsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfQ1NJMV9EMTlfX0NTSTFfRDE5ICAgICAgICAgICAgIElPTVVYX1BBRCgweDVBOCwgMHgxQzAsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfQ1NJMV9WU1lOQ19fQ1NJMV9WU1lOQyAgICAgICAgIElPTVVYX1BBRCgweDVBQywgMHgxQzQsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfQ1NJMV9IU1lOQ19fQ1NJMV9IU1lOQyAgICAgICAgIElPTVVYX1BBRCgweDVCMCwgMHgxQzgsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfQ1NJMV9QSVhDTEtfX0NTSTFfUElYQ0xLICAgICAgIElPTVVYX1BBRCgweDVCNCwgMHgwMDAsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfQ1NJMV9NQ0xLX19DU0kxX01DTEsgICAgICAgICAgIElPTVVYX1BBRCgweDVCOCwgMHgwMDAsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfQ1NJMV9QS0UwX19DU0kxX1BLRTAgICAgICAgICAgIElPTVVYX1BBRCgweDg2MCwgMHgwMDAsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfQ1NJMl9EMTJfX0dQSU9fNF85ICAgICAgICAgICAgIElPTVVYX1BBRCgweDVCQywgMHgxQ0MsIDMsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfQ1NJMl9EMTNfX0dQSU9fNF8xMCAgICAgICAgICAgIElPTVVYX1BBRCgweDVDMCwgMHgxRDAsIDMsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfQ1NJMl9EMTRfX0dQSU9fNF8xMSAgICAgICAgICAgIElPTVVYX1BBRCgweDVDNCwgMHgxRDQsIDMsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfQ1NJMl9EMTVfX0dQSU9fNF8xMiAgICAgICAgICAgIElPTVVYX1BBRCgweDVDOCwgMHgxRDgsIDMsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfQ1NJMl9EMTZfX0dQSU9fNF8xMSAgICAgICAgICAgIElPTVVYX1BBRCgweDVDQywgMHgxREMsIDMsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfQ1NJMl9EMTdfX0dQSU9fNF8xMiAgICAgICAgICAgIElPTVVYX1BBRCgweDVEMCwgMHgxRTAsIDMsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfQ1NJMl9EMThfX0dQSU9fNF8xMSAgICAgICAgICAgIElPTVVYX1BBRCgweDVENCwgMHgxRTQsIDMsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfQ1NJMl9EMTlfX0dQSU9fNF8xMiAgICAgICAgICAgIElPTVVYX1BBRCgweDVEOCwgMHgxRTgsIDMsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfQ1NJMl9WU1lOQ19fR1BJT180XzEzICAgICAgICAgIElPTVVYX1BBRCgweDVEQywgMHgxRUMsIDMsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfQ1NJMl9IU1lOQ19fR1BJT180XzE0ICAgICAgICAgIElPTVVYX1BBRCgweDVFMCwgMHgxRjAsIDMsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfQ1NJMl9QSVhDTEtfX0dQSU9fNF8xNSAgICAgICAgIElPTVVYX1BBRCgweDVFNCwgMHgxRjQsIDMsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfSTJDMV9DTEtfX0dQSU9fNF8xNiAgICAgICAgICAgIElPTVVYX1BBRCgweDVFOCwgMHgxRjgsIDMsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfSTJDMV9DTEtfX0hTSTJDX0NMSwkJSU9NVVhfUEFEKDB4NUU4LCAweDFGOCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9JMkMxX0RBVF9fR1BJT180XzE3ICAgICAgICAgICAgSU9NVVhfUEFEKDB4NUVDLCAweDFGQywgMywgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9JMkMxX0RBVF9fSFNJMkNfREFUCQlJT01VWF9QQUQoMHg1RUMsIDB4MUZDLCAwLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0FVRDNfQkJfVFhEX19BVUQzX0JCX1RYRCAgICAgICBJT01VWF9QQUQoMHg1RjAsIDB4MjAwLCBJT01VWF9DT05GSUdfU0lPTiwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9BVUQzX0JCX1RYRF9fR1BJT180XzE4ICAgICAgICAgSU9NVVhfUEFEKDB4NUYwLCAweDIwMCwgMywgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9BVUQzX0JCX1JYRF9fQVVEM19CQl9SWEQgICAgICAgSU9NVVhfUEFEKDB4NUY0LCAweDIwNCwgSU9NVVhfQ09ORklHX1NJT04sIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfQVVEM19CQl9SWERfX0dQSU9fNF8xOSAgICAgICAgIElPTVVYX1BBRCgweDVGNCwgMHgyMDQsIDMsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfQVVEM19CQl9DS19fQVVEM19CQl9DSyAgICAgICAgIElPTVVYX1BBRCgweDVGOCwgMHgyMDgsIElPTVVYX0NPTkZJR19TSU9OLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0FVRDNfQkJfQ0tfX0dQSU9fNF8yMCAgICAgICAgICBJT01VWF9QQUQoMHg1RjgsIDB4MjA4LCAzLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0FVRDNfQkJfRlNfX0FVRDNfQkJfRlMgICAgICAgICBJT01VWF9QQUQoMHg1RkMsIDB4MjBDLCBJT01VWF9DT05GSUdfU0lPTiwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9BVUQzX0JCX0ZTX19HUElPXzRfMjEgICAgICAgICAgSU9NVVhfUEFEKDB4NUZDLCAweDIwQywgMywgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9DU1BJMV9NT1NJX19FQ1NQSTFfTU9TSSAgICAgICAgSU9NVVhfUEFEKDB4NjAwLCAweDIxMCwgMCwgMHgwLCAgIDAsIE1YNTFfRUNTUElfUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0NTUEkxX01PU0lfX0dQSU9fNF8yMiAgICAgICAgICBJT01VWF9QQUQoMHg2MDAsIDB4MjEwLCAzLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0NTUEkxX01JU09fX0VDU1BJMV9NSVNPICAgICAgICBJT01VWF9QQUQoMHg2MDQsIDB4MjE0LCAwLCAweDAsICAgMCwgTVg1MV9FQ1NQSV9QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfQ1NQSTFfTUlTT19fR1BJT180XzIzICAgICAgICAgIElPTVVYX1BBRCgweDYwNCwgMHgyMTQsIDMsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfQ1NQSTFfU1MwX19FQ1NQSTFfU1MwICAgICAgICAgIElPTVVYX1BBRCgweDYwOCwgMHgyMTgsIDAsIDB4MCwgICAwLCBNWDUxX0VDU1BJX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9DU1BJMV9TUzBfX0dQSU9fNF8yNCAgICAgICAgICAgSU9NVVhfUEFEKDB4NjA4LCAweDIxOCwgMywgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9DU1BJMV9TUzFfX0VDU1BJMV9TUzEgICAgICAgICAgSU9NVVhfUEFEKDB4NjBDLCAweDIxQywgMCwgMHgwLCAgIDAsIE1YNTFfRUNTUElfUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0NTUEkxX1NTMV9fR1BJT180XzI1ICAgICAgICAgICBJT01VWF9QQUQoMHg2MEMsIDB4MjFDLCAzLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0NTUEkxX1JEWV9fRUNTUEkxX1JEWSAgICAgICAgICBJT01VWF9QQUQoMHg2MTAsIDB4MjIwLCAwLCAweDAsICAgMCwgTVg1MV9FQ1NQSV9QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfQ1NQSTFfUkRZX19HUElPXzRfMjYgICAgICAgICAgIElPTVVYX1BBRCgweDYxMCwgMHgyMjAsIDMsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfQ1NQSTFfU0NMS19fRUNTUEkxX1NDTEsgICAgICAgIElPTVVYX1BBRCgweDYxNCwgMHgyMjQsIDAsIDB4MCwgICAwLCBNWDUxX0VDU1BJX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9DU1BJMV9TQ0xLX19HUElPXzRfMjcgICAgICAgICAgSU9NVVhfUEFEKDB4NjE0LCAweDIyNCwgMywgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9VQVJUMV9SWERfX1VBUlQxX1JYRCAgICAgICAgICAgSU9NVVhfUEFEKDB4NjE4LCAweDIyOCwgMCwgMHg5ZTQsIDAsIE1YNTFfVUFSVDFfUEFEX0NUUkwgfCBQQURfQ1RMX1NSRV9GQVNUKQotI2RlZmluZSBNWDUxX1BBRF9VQVJUMV9UWERfX1VBUlQxX1RYRCAgICAgICAgICAgSU9NVVhfUEFEKDB4NjFDLCAweDIyQywgMCwgMHgwLCAgIDAsIE1YNTFfVUFSVDFfUEFEX0NUUkwgfCBQQURfQ1RMX1NSRV9GQVNUKQotI2RlZmluZSBNWDUxX1BBRF9VQVJUMV9SVFNfX1VBUlQxX1JUUyAgICAgICAgICAgSU9NVVhfUEFEKDB4NjIwLCAweDIzMCwgMCwgMHg5ZTAsIDAsIE1YNTFfVUFSVDFfUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX1VBUlQxX0NUU19fVUFSVDFfQ1RTICAgICAgICAgICBJT01VWF9QQUQoMHg2MjQsIDB4MjM0LCAwLCAweDAsICAgMCwgTVg1MV9VQVJUMV9QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfVUFSVDJfUlhEX19VQVJUMl9SWEQgICAgICAgICAgIElPTVVYX1BBRCgweDYyOCwgMHgyMzgsIDAsIDB4OWVjLCAyLCBNWDUxX1VBUlQyX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9VQVJUMl9UWERfX1VBUlQyX1RYRCAgICAgICAgICAgSU9NVVhfUEFEKDB4NjJDLCAweDIzQywgMCwgMHgwLCAgIDAsIE1YNTFfVUFSVDJfUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX1VBUlQzX1JYRF9fVUFSVDNfUlhECQlJT01VWF9QQUQoMHg2MzAsIDB4MjQwLCAxLCAweDlmNCwgNCwgTVg1MV9VQVJUM19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfVUFSVDNfUlhEX19HUElPXzFfMjIgICAgICAgICAgIElPTVVYX1BBRCgweDYzMCwgMHgyNDAsIDMsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfVUFSVDNfVFhEX19VQVJUM19UWEQJCUlPTVVYX1BBRCgweDYzNCwgMHgyNDQsIDEsIDB4MCwgICAwLCBNWDUxX1VBUlQzX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9VQVJUM19UWERfX0dQSU9fMV8yMyAgICAgICAgICAgSU9NVVhfUEFEKDB4NjM0LCAweDI0NCwgMywgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9PV0lSRV9MSU5FX19HUElPXzFfMjQgICAgICAgICAgSU9NVVhfUEFEKDB4NjM4LCAweDI0OCwgMywgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9LRVlfUk9XMF9fS0VZX1JPVzAgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NjNDLCAweDI0QywgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9LRVlfUk9XMV9fS0VZX1JPVzEgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NjQwLCAweDI1MCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9LRVlfUk9XMl9fS0VZX1JPVzIgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NjQ0LCAweDI1NCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9LRVlfUk9XM19fS0VZX1JPVzMgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NjQ4LCAweDI1OCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9LRVlfQ09MMF9fS0VZX0NPTDAgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NjRDLCAweDI1QywgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9LRVlfQ09MMV9fS0VZX0NPTDEgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NjUwLCAweDI2MCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9LRVlfQ09MMl9fS0VZX0NPTDIgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NjU0LCAweDI2NCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9LRVlfQ09MM19fS0VZX0NPTDMgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NjU4LCAweDI2OCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9LRVlfQ09MNF9fS0VZX0NPTDQgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NjVDLCAweDI2QywgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9LRVlfQ09MNF9fVUFSVDNfUlRTCQlJT01VWF9QQUQoMHg2NUMsIDB4MjZDLCAyLCAweDlmMCwgNCwgTVg1MV9VQVJUM19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfS0VZX0NPTDRfX0kyQzJfU0NMCQlJT01VWF9QQUQoMHg2NUMsIDB4MjZDLCAoMyB8IElPTVVYX0NPTkZJR19TSU9OKSwgXAotCQkJCQkJCTB4MDliOCwgMSwgTVg1MV9JMkNfUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0tFWV9DT0w1X19LRVlfQ09MNSAgICAgICAgICAgICBJT01VWF9QQUQoMHg2NjAsIDB4MjcwLCAwLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0tFWV9DT0w1X19VQVJUM19DVFMJCUlPTVVYX1BBRCgweDY2MCwgMHgyNzAsIDIsIDAsICAgICAwLCBNWDUxX1VBUlQzX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9LRVlfQ09MNV9fSTJDMl9TREEJCUlPTVVYX1BBRCgweDY2MCwgMHgyNzAsICgzIHwgSU9NVVhfQ09ORklHX1NJT04pLCBcCi0JCQkJCQkJMHgwOWJjLCAxLCBNWDUxX0kyQ19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfVVNCSDFfQ0xLX19VU0JIMV9DTEsgICAgICAgICAgIElPTVVYX1BBRCgweDY3OCwgMHgyNzgsIDAsIDB4MCwgICAwLCBNWDUxX1VTQkgxX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9VU0JIMV9ESVJfX1VTQkgxX0RJUiAgICAgICAgICAgSU9NVVhfUEFEKDB4NjdDLCAweDI3QywgMCwgMHgwLCAgIDAsIE1YNTFfVVNCSDFfUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX1VTQkgxX1NUUF9fVVNCSDFfU1RQICAgICAgICAgICBJT01VWF9QQUQoMHg2ODAsIDB4MjgwLCAwLCAweDAsICAgMCwgTVg1MV9VU0JIMV9QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfVVNCSDFfU1RQX19HUElPXzFfMjcgICAgICAgICAgIElPTVVYX1BBRCgweDY4MCwgMHgyODAsIDIsIDB4MCwgICAwLCBNWDUxX1VTQkgxX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9VU0JIMV9OWFRfX1VTQkgxX05YVCAgICAgICAgICAgSU9NVVhfUEFEKDB4Njg0LCAweDI4NCwgMCwgMHgwLCAgIDAsIE1YNTFfVVNCSDFfUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX1VTQkgxX0RBVEEwX19VU0JIMV9EQVRBMCAgICAgICBJT01VWF9QQUQoMHg2ODgsIDB4Mjg4LCAwLCAweDAsICAgMCwgTVg1MV9VU0JIMV9QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfVVNCSDFfREFUQTFfX1VTQkgxX0RBVEExICAgICAgIElPTVVYX1BBRCgweDY4QywgMHgyOEMsIDAsIDB4MCwgICAwLCBNWDUxX1VTQkgxX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9VU0JIMV9EQVRBMl9fVVNCSDFfREFUQTIgICAgICAgSU9NVVhfUEFEKDB4NjkwLCAweDI5MCwgMCwgMHgwLCAgIDAsIE1YNTFfVVNCSDFfUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX1VTQkgxX0RBVEEzX19VU0JIMV9EQVRBMyAgICAgICBJT01VWF9QQUQoMHg2OTQsIDB4Mjk0LCAwLCAweDAsICAgMCwgTVg1MV9VU0JIMV9QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfVVNCSDFfREFUQTRfX1VTQkgxX0RBVEE0ICAgICAgIElPTVVYX1BBRCgweDY5OCwgMHgyOTgsIDAsIDB4MCwgICAwLCBNWDUxX1VTQkgxX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9VU0JIMV9EQVRBNV9fVVNCSDFfREFUQTUgICAgICAgSU9NVVhfUEFEKDB4NjlDLCAweDI5QywgMCwgMHgwLCAgIDAsIE1YNTFfVVNCSDFfUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX1VTQkgxX0RBVEE2X19VU0JIMV9EQVRBNiAgICAgICBJT01VWF9QQUQoMHg2QTAsIDB4MkEwLCAwLCAweDAsICAgMCwgTVg1MV9VU0JIMV9QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfVVNCSDFfREFUQTdfX1VTQkgxX0RBVEE3ICAgICAgIElPTVVYX1BBRCgweDZBNCwgMHgyQTQsIDAsIDB4MCwgICAwLCBNWDUxX1VTQkgxX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESTFfUElOMTFfX0dQSU9fM18wICAgICAgICAgICAgSU9NVVhfUEFEKDB4NkE4LCAweDJBOCwgNCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESTFfUElOMTJfX0dQSU9fM18xICAgICAgICAgICAgSU9NVVhfUEFEKDB4NkFDLCAweDJBQywgNCwgMHg5NzgsIDEsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESTFfUElOMTNfX0dQSU9fM18yICAgICAgICAgICAgSU9NVVhfUEFEKDB4NkIwLCAweDJCMCwgNCwgMHg5N2MsIDEsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESTFfRDBfQ1NfX0dQSU9fM18zICAgICAgICAgICAgSU9NVVhfUEFEKDB4NkI0LCAweDJCNCwgNCwgMHg5ODAsIDEsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESTFfRDFfQ1NfX0dQSU9fM180ICAgICAgICAgICAgSU9NVVhfUEFEKDB4NkI4LCAweDJCOCwgNCwgMHg5ODQsIDEsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESVNQQjJfU0VSX0RJTl9fR1BJT18zXzUgICAgICAgSU9NVVhfUEFEKDB4NkJDLCAweDJCQywgNCwgMHg5ODgsIDEsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESVNQQjJfU0VSX0RJT19fR1BJT18zXzYgICAgICAgSU9NVVhfUEFEKDB4NkMwLCAweDJDMCwgNCwgMHg5OGMsIDEsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESVNQQjJfU0VSX0NMS19fR1BJT18zXzcgICAgICAgSU9NVVhfUEFEKDB4NkM0LCAweDJDNCwgNCwgMHg5OTAsIDEsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESVNQQjJfU0VSX1JTX19HUElPXzNfOCAgICAgICAgSU9NVVhfUEFEKDB4NkM4LCAweDJDOCwgNCwgMHg5OTQsIDEsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESVNQMV9EQVQwX19ESVNQMV9EQVQwICAgICAgICAgSU9NVVhfUEFEKDB4NkNDLCAweDJDQywgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESVNQMV9EQVQxX19ESVNQMV9EQVQxICAgICAgICAgSU9NVVhfUEFEKDB4NkQwLCAweDJEMCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESVNQMV9EQVQyX19ESVNQMV9EQVQyICAgICAgICAgSU9NVVhfUEFEKDB4NkQ0LCAweDJENCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESVNQMV9EQVQzX19ESVNQMV9EQVQzICAgICAgICAgSU9NVVhfUEFEKDB4NkQ4LCAweDJEOCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESVNQMV9EQVQ0X19ESVNQMV9EQVQ0ICAgICAgICAgSU9NVVhfUEFEKDB4NkRDLCAweDJEQywgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESVNQMV9EQVQ1X19ESVNQMV9EQVQ1ICAgICAgICAgSU9NVVhfUEFEKDB4NkUwLCAweDJFMCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESVNQMV9EQVQ2X19ESVNQMV9EQVQ2ICAgICAgICAgSU9NVVhfUEFEKDB4NkU0LCAweDJFNCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESVNQMV9EQVQ3X19ESVNQMV9EQVQ3ICAgICAgICAgSU9NVVhfUEFEKDB4NkU4LCAweDJFOCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESVNQMV9EQVQ4X19ESVNQMV9EQVQ4ICAgICAgICAgSU9NVVhfUEFEKDB4NkVDLCAweDJFQywgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESVNQMV9EQVQ5X19ESVNQMV9EQVQ5ICAgICAgICAgSU9NVVhfUEFEKDB4NkYwLCAweDJGMCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESVNQMV9EQVQxMF9fRElTUDFfREFUMTAgICAgICAgSU9NVVhfUEFEKDB4NkY0LCAweDJGNCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESVNQMV9EQVQxMV9fRElTUDFfREFUMTEgICAgICAgSU9NVVhfUEFEKDB4NkY4LCAweDJGOCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESVNQMV9EQVQxMl9fRElTUDFfREFUMTIgICAgICAgSU9NVVhfUEFEKDB4NkZDLCAweDJGQywgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESVNQMV9EQVQxM19fRElTUDFfREFUMTMgICAgICAgSU9NVVhfUEFEKDB4NzAwLCAweDMwMCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESVNQMV9EQVQxNF9fRElTUDFfREFUMTQgICAgICAgSU9NVVhfUEFEKDB4NzA0LCAweDMwNCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESVNQMV9EQVQxNV9fRElTUDFfREFUMTUgICAgICAgSU9NVVhfUEFEKDB4NzA4LCAweDMwOCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESVNQMV9EQVQxNl9fRElTUDFfREFUMTYgICAgICAgSU9NVVhfUEFEKDB4NzBDLCAweDMwQywgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESVNQMV9EQVQxN19fRElTUDFfREFUMTcgICAgICAgSU9NVVhfUEFEKDB4NzEwLCAweDMxMCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESVNQMV9EQVQxOF9fRElTUDFfREFUMTggICAgICAgSU9NVVhfUEFEKDB4NzE0LCAweDMxNCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESVNQMV9EQVQxOV9fRElTUDFfREFUMTkgICAgICAgSU9NVVhfUEFEKDB4NzE4LCAweDMxOCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESVNQMV9EQVQyMF9fRElTUDFfREFUMjAgICAgICAgSU9NVVhfUEFEKDB4NzFDLCAweDMxQywgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESVNQMV9EQVQyMV9fRElTUDFfREFUMjEgICAgICAgSU9NVVhfUEFEKDB4NzIwLCAweDMyMCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESVNQMV9EQVQyMl9fRElTUDFfREFUMjIgICAgICAgSU9NVVhfUEFEKDB4NzI0LCAweDMyNCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESVNQMV9EQVQyM19fRElTUDFfREFUMjMgICAgICAgSU9NVVhfUEFEKDB4NzI4LCAweDMyOCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESTFfUElOM19fREkxX1BJTjMgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NzJDLCAweDMyQywgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESTFfUElOMl9fREkxX1BJTjIgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NzM0LCAweDMzMCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESV9HUDFfX0RJX0dQMSAgICAgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NzNDLCAweDMzNCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESV9HUDJfX0RJX0dQMiAgICAgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NzQwLCAweDMzOCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESV9HUDNfX0RJX0dQMyAgICAgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NzQ0LCAweDMzQywgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESTJfUElONF9fREkyX1BJTjQgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NzQ4LCAweDM0MCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESTJfUElOMl9fREkyX1BJTjIgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NzRDLCAweDM0NCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESTJfUElOM19fREkyX1BJTjMgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NzUwLCAweDM0OCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESTJfRElTUF9DTEtfX0RJMl9ESVNQX0NMSyAgICAgSU9NVVhfUEFEKDB4NzU0LCAweDM0QywgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESV9HUDRfX0RJX0dQNCAgICAgICAgICAgICAgICAgSU9NVVhfUEFEKDB4NzU4LCAweDM1MCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESVNQMl9EQVQwX19ESVNQMl9EQVQwICAgICAgICAgSU9NVVhfUEFEKDB4NzVDLCAweDM1NCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESVNQMl9EQVQxX19ESVNQMl9EQVQxICAgICAgICAgSU9NVVhfUEFEKDB4NzYwLCAweDM1OCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESVNQMl9EQVQyX19ESVNQMl9EQVQyICAgICAgICAgSU9NVVhfUEFEKDB4NzY0LCAweDM1QywgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESVNQMl9EQVQzX19ESVNQMl9EQVQzICAgICAgICAgSU9NVVhfUEFEKDB4NzY4LCAweDM2MCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESVNQMl9EQVQ0X19ESVNQMl9EQVQ0ICAgICAgICAgSU9NVVhfUEFEKDB4NzZDLCAweDM2NCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESVNQMl9EQVQ1X19ESVNQMl9EQVQ1ICAgICAgICAgSU9NVVhfUEFEKDB4NzcwLCAweDM2OCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESVNQMl9EQVQ2X19HUElPXzFfMTkgICAgICAgICAgSU9NVVhfUEFEKDB4Nzc0LCAweDM2QywgNSwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESVNQMl9EQVQ3X19HUElPXzFfMjkgICAgICAgICAgSU9NVVhfUEFEKDB4Nzc4LCAweDM3MCwgNSwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESVNQMl9EQVQ4X19HUElPXzFfMzAgICAgICAgICAgSU9NVVhfUEFEKDB4NzdDLCAweDM3NCwgNSwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESVNQMl9EQVQ5X19HUElPXzFfMzEgICAgICAgICAgSU9NVVhfUEFEKDB4NzgwLCAweDM3OCwgNSwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESVNQMl9EQVQxMF9fRElTUDJfREFUMTAgICAgICAgSU9NVVhfUEFEKDB4Nzg0LCAweDM3QywgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESVNQMl9EQVQxMV9fRElTUDJfREFUMTEgICAgICAgSU9NVVhfUEFEKDB4Nzg4LCAweDM4MCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESVNQMl9EQVQxMl9fRElTUDJfREFUMTIgICAgICAgSU9NVVhfUEFEKDB4NzhDLCAweDM4NCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESVNQMl9EQVQxM19fRElTUDJfREFUMTMgICAgICAgSU9NVVhfUEFEKDB4NzkwLCAweDM4OCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESVNQMl9EQVQxNF9fRElTUDJfREFUMTQgICAgICAgSU9NVVhfUEFEKDB4Nzk0LCAweDM4QywgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9ESVNQMl9EQVQxNV9fRElTUDJfREFUMTUgICAgICAgSU9NVVhfUEFEKDB4Nzk4LCAweDM5MCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9TRDFfQ01EX19TRDFfQ01ECQlJT01VWF9QQUQoMHg3OUMsIDB4Mzk0LCBJT01VWF9DT05GSUdfU0lPTiwgMHgwLCAwLCBcCi0JCQkJCQkJTVg1MV9TREhDSV9QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfU0QxX0NNRF9fQVVENV9SWEZTICAgICAgICAgICAgIElPTVVYX1BBRCgweDc5QywgMHgzOTQsIDEsIDB4OGUwLCAxLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfU0QxX0NMS19fU0QxX0NMSwkJSU9NVVhfUEFEKDB4N0EwLCAweDM5OCwgSU9NVVhfQ09ORklHX1NJT04sIDB4MCwgMCwgXAotCQkJCQkJCU1YNTFfU0RIQ0lfUEFEX0NUUkwgfCBQQURfQ1RMX0hZUykKLSNkZWZpbmUgTVg1MV9QQURfU0QxX0NMS19fQVVENV9SWEMgICAgICAgICAgICAgIElPTVVYX1BBRCgweDdBMCwgMHgzOTgsIDEsIDB4OGRjLCAxLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfU0QxX0RBVEEwX19TRDFfREFUQTAJCUlPTVVYX1BBRCgweDdBNCwgMHgzOUMsIElPTVVYX0NPTkZJR19TSU9OLCAweDAsIDAsIFwKLQkJCQkJCQlNWDUxX1NESENJX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9TRDFfREFUQTBfX0FVRDVfVFhEICAgICAgICAgICAgSU9NVVhfUEFEKDB4N0E0LCAweDM5QywgMSwgMHg4ZDgsIDIsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9TRDFfREFUQTFfX1NEMV9EQVRBMQkJSU9NVVhfUEFEKDB4N0E4LCAweDNBMCwgSU9NVVhfQ09ORklHX1NJT04sIDB4MCwgMCwgXAotCQkJCQkJCU1YNTFfU0RIQ0lfUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX1NEMV9EQVRBMV9fQVVENV9SWEQgICAgICAgICAgICBJT01VWF9QQUQoMHg3QTgsIDB4M0EwLCAxLCAweDhkNCwgMiwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX1NEMV9EQVRBMl9fU0QxX0RBVEEyCQlJT01VWF9QQUQoMHg3QUMsIDB4M0E0LCBJT01VWF9DT05GSUdfU0lPTiwgMHgwLCAwLCBcCi0JCQkJCQkJTVg1MV9TREhDSV9QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfU0QxX0RBVEEyX19BVUQ1X1RYQyAgICAgICAgICAgIElPTVVYX1BBRCgweDdBQywgMHgzQTQsIDEsIDB4OGU0LCAyLCBOT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfU0QxX0RBVEEzX19TRDFfREFUQTMJCUlPTVVYX1BBRCgweDdCMCwgMHgzQTgsIElPTVVYX0NPTkZJR19TSU9OLCAweDAsIDAsIFwKLQkJCQkJCQlNWDUxX1NESENJX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9TRDFfREFUQTNfX0FVRDVfVFhGUyAgICAgICAgICAgSU9NVVhfUEFEKDB4N0IwLCAweDNBOCwgMSwgMHg4ZTgsIDIsIE5PX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9TRDJfQ01EX19TRDJfQ01ECQlJT01VWF9QQUQoMHg3QkMsIDB4M0I0LCBJT01VWF9DT05GSUdfU0lPTiwgMHgwLCAxLCBcCi0JCQkJCQkJTVg1MV9TREhDSV9QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfU0QyX0NMS19fU0QyX0NMSwkJSU9NVVhfUEFEKDB4N0MwLCAweDNCOCwgSU9NVVhfQ09ORklHX1NJT04sIDB4MCwgMCwgXAotCQkJCQkJCU1YNTFfU0RIQ0lfUEFEX0NUUkwgfCBQQURfQ1RMX0hZUykKLSNkZWZpbmUgTVg1MV9QQURfU0QyX0RBVEEwX19TRDJfREFUQTAJCUlPTVVYX1BBRCgweDdDNCwgMHgzQkMsIElPTVVYX0NPTkZJR19TSU9OLCAweDAsIDAsIFwKLQkJCQkJCQlNWDUxX1NESENJX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9TRDJfREFUQTFfX1NEMl9EQVRBMQkJSU9NVVhfUEFEKDB4N0M4LCAweDNDMCwgSU9NVVhfQ09ORklHX1NJT04sIDB4MCwgMCwgXAotCQkJCQkJCU1YNTFfU0RIQ0lfUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX1NEMl9EQVRBMl9fU0QyX0RBVEEyCQlJT01VWF9QQUQoMHg3Q0MsIDB4M0M0LCBJT01VWF9DT05GSUdfU0lPTiwgMHgwLCAwLCBcCi0JCQkJCQkJTVg1MV9TREhDSV9QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfU0QyX0RBVEEzX19TRDJfREFUQTMJCUlPTVVYX1BBRCgweDdEMCwgMHgzQzgsIElPTVVYX0NPTkZJR19TSU9OLCAweDAsIDAsIFwKLQkJCQkJCQlNWDUxX1NESENJX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9HUElPXzFfMF9fR1BJT18xXzAJCUlPTVVYX1BBRCgweDdCNCwgMHgzQUMsIDEsIDB4MCwgICAwLCBNWDUxX0dQSU9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0dQSU9fMV8xX19HUElPXzFfMQkJSU9NVVhfUEFEKDB4N0I4LCAweDNCMCwgMSwgMHgwLCAgIDAsIE1YNTFfR1BJT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfR1BJT18xXzJfX0dQSU9fMV8yCQlJT01VWF9QQUQoMHg3RDQsIDB4M0NDLCAxLCAweDAsICAgMCwgTVg1MV9HUElPX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9HUElPXzFfMl9fSTJDMl9TQ0wJCUlPTVVYX1BBRCgweDdENCwgMHgzQ0MsICgyIHwgSU9NVVhfQ09ORklHX1NJT04pLCBcCi0JCQkJCQkJMHg5YjgsICAgMywgTVg1MV9JMkNfUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0dQSU9fMV8zX19HUElPXzFfMwkJSU9NVVhfUEFEKDB4N0Q4LCAweDNEMCwgMSwgMHgwLCAgIDAsIE1YNTFfR1BJT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfR1BJT18xXzNfX0kyQzJfU0RBCQlJT01VWF9QQUQoMHg3RDgsIDB4M0QwLCAoMiB8IElPTVVYX0NPTkZJR19TSU9OKSwgXAotCQkJCQkJCTB4OWJjLCAgIDMsIE1YNTFfSTJDX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9QTUlDX0lOVF9SRVFfX1BNSUNfSU5UX1JFUQlJT01VWF9QQUQoMHg3RkMsIDB4M0Q0LCAwLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0dQSU9fMV80X19HUElPXzFfNAkJSU9NVVhfUEFEKDB4ODA0LCAweDNEOCwgMSwgMHgwLCAgIDAsIE1YNTFfR1BJT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfR1BJT18xXzVfX0dQSU9fMV81CQlJT01VWF9QQUQoMHg4MDgsIDB4M0RDLCAxLCAweDAsICAgMCwgTVg1MV9HUElPX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9HUElPXzFfNl9fR1BJT18xXzYJCUlPTVVYX1BBRCgweDgwQywgMHgzRTAsIDEsIDB4MCwgICAwLCBNWDUxX0dQSU9fUEFEX0NUUkwpCi0jZGVmaW5lIE1YNTFfUEFEX0dQSU9fMV83X19HUElPXzFfNwkJSU9NVVhfUEFEKDB4ODEwLCAweDNFNCwgMSwgMHgwLCAgIDAsIE1YNTFfR1BJT19QQURfQ1RSTCkKLSNkZWZpbmUgTVg1MV9QQURfR1BJT18xXzhfX0dQSU9fMV84CQlJT01VWF9QQUQoMHg4MTQsIDB4M0U4LCAxLCAweDAsICAgMCwgTVg1MV9HUElPX1BBRF9DVFJMKQotI2RlZmluZSBNWDUxX1BBRF9HUElPXzFfOV9fR1BJT18xXzkJCUlPTVVYX1BBRCgweDgxOCwgMHgzRUMsIDEsIDB4MCwgICAwLCBNWDUxX0dQSU9fUEFEX0NUUkwpCisvKiBSYXcgcGluIG1vZGVzIHdpdGhvdXQgcGFkIGNvbnRyb2wgKi8KKy8qCQkJCQkJCSAgUEFEICAgIE1VWCBBTFQgSU5QU0UgUEFUSCBQQURDVFJMICovCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fRDE2X19BVUQ0X1JYRlMJCUlPTVVYX1BBRCgweDNmMCwgMHg1YywgNSwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRUlNX0QxNl9fQVVENV9UWEQJCUlPTVVYX1BBRCgweDNmMCwgMHg1YywgNywgMHgwOGQ4LCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRUlNX0QxNl9fRUlNX0QxNgkJSU9NVVhfUEFEKDB4M2YwLCAweDVjLCAwLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fRDE2X19HUElPMl8wCQlJT01VWF9QQUQoMHgzZjAsIDB4NWMsIDEsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0VJTV9EMTZfX0kyQzFfU0RBCQlJT01VWF9QQUQoMHgzZjAsIDB4NWMsIDB4MTQsIDB4MDliNCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0VJTV9EMTZfX1VBUlQyX0NUUwkJSU9NVVhfUEFEKDB4M2YwLCAweDVjLCAzLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fRDE2X19VU0JIMl9EQVRBMAkJSU9NVVhfUEFEKDB4M2YwLCAweDVjLCAyLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fRDE3X19BVUQ1X1JYRAkJSU9NVVhfUEFEKDB4M2Y0LCAweDYwLCA3LCAweDA4ZDQsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fRDE3X19FSU1fRDE3CQlJT01VWF9QQUQoMHgzZjQsIDB4NjAsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0VJTV9EMTdfX0dQSU8yXzEJCUlPTVVYX1BBRCgweDNmNCwgMHg2MCwgMSwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRUlNX0QxN19fVUFSVDJfUlhECQlJT01VWF9QQUQoMHgzZjQsIDB4NjAsIDMsIDB4MDllYywgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0VJTV9EMTdfX1VBUlQzX0NUUwkJSU9NVVhfUEFEKDB4M2Y0LCAweDYwLCA0LCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fRDE3X19VU0JIMl9EQVRBMQkJSU9NVVhfUEFEKDB4M2Y0LCAweDYwLCAyLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fRDE4X19BVUQ1X1RYQwkJSU9NVVhfUEFEKDB4M2Y4LCAweDY0LCA3LCAweDA4ZTQsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fRDE4X19FSU1fRDE4CQlJT01VWF9QQUQoMHgzZjgsIDB4NjQsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0VJTV9EMThfX0dQSU8yXzIJCUlPTVVYX1BBRCgweDNmOCwgMHg2NCwgMSwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRUlNX0QxOF9fVUFSVDJfVFhECQlJT01VWF9QQUQoMHgzZjgsIDB4NjQsIDMsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0VJTV9EMThfX1VBUlQzX1JUUwkJSU9NVVhfUEFEKDB4M2Y4LCAweDY0LCA0LCAweDA5ZjAsIDEsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fRDE4X19VU0JIMl9EQVRBMgkJSU9NVVhfUEFEKDB4M2Y4LCAweDY0LCAyLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fRDE5X19BVUQ0X1JYQwkJSU9NVVhfUEFEKDB4M2ZjLCAweDY4LCA1LCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fRDE5X19BVUQ1X1RYRlMJCUlPTVVYX1BBRCgweDNmYywgMHg2OCwgNywgMHgwOGU4LCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRUlNX0QxOV9fRUlNX0QxOQkJSU9NVVhfUEFEKDB4M2ZjLCAweDY4LCAwLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fRDE5X19HUElPMl8zCQlJT01VWF9QQUQoMHgzZmMsIDB4NjgsIDEsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0VJTV9EMTlfX0kyQzFfU0NMCQlJT01VWF9QQUQoMHgzZmMsIDB4NjgsIDB4MTQsIDB4MDliMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0VJTV9EMTlfX1VBUlQyX1JUUwkJSU9NVVhfUEFEKDB4M2ZjLCAweDY4LCAzLCAweDA5ZTgsIDEsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fRDE5X19VU0JIMl9EQVRBMwkJSU9NVVhfUEFEKDB4M2ZjLCAweDY4LCAyLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fRDIwX19BVUQ0X1RYRAkJSU9NVVhfUEFEKDB4NDAwLCAweDZjLCA1LCAweDA4YzgsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fRDIwX19FSU1fRDIwCQlJT01VWF9QQUQoMHg0MDAsIDB4NmMsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0VJTV9EMjBfX0dQSU8yXzQJCUlPTVVYX1BBRCgweDQwMCwgMHg2YywgMSwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRUlNX0QyMF9fU1JUQ19BTEFSTV9ERUIJSU9NVVhfUEFEKDB4NDAwLCAweDZjLCA0LCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fRDIwX19VU0JIMl9EQVRBNAkJSU9NVVhfUEFEKDB4NDAwLCAweDZjLCAyLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fRDIxX19BVUQ0X1JYRAkJSU9NVVhfUEFEKDB4NDA0LCAweDcwLCA1LCAweDA4YzQsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fRDIxX19FSU1fRDIxCQlJT01VWF9QQUQoMHg0MDQsIDB4NzAsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0VJTV9EMjFfX0dQSU8yXzUJCUlPTVVYX1BBRCgweDQwNCwgMHg3MCwgMSwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRUlNX0QyMV9fU1JUQ19BTEFSTV9ERUIJSU9NVVhfUEFEKDB4NDA0LCAweDcwLCAzLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fRDIxX19VU0JIMl9EQVRBNQkJSU9NVVhfUEFEKDB4NDA0LCAweDcwLCAyLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fRDIyX19BVUQ0X1RYQwkJSU9NVVhfUEFEKDB4NDA4LCAweDc0LCA1LCAweDA4Y2MsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fRDIyX19FSU1fRDIyCQlJT01VWF9QQUQoMHg0MDgsIDB4NzQsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0VJTV9EMjJfX0dQSU8yXzYJCUlPTVVYX1BBRCgweDQwOCwgMHg3NCwgMSwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRUlNX0QyMl9fVVNCSDJfREFUQTYJCUlPTVVYX1BBRCgweDQwOCwgMHg3NCwgMiwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRUlNX0QyM19fQVVENF9UWEZTCQlJT01VWF9QQUQoMHg0MGMsIDB4NzgsIDUsIDB4MDhkMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0VJTV9EMjNfX0VJTV9EMjMJCUlPTVVYX1BBRCgweDQwYywgMHg3OCwgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRUlNX0QyM19fR1BJTzJfNwkJSU9NVVhfUEFEKDB4NDBjLCAweDc4LCAxLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fRDIzX19TUERJRl9PVVQxCQlJT01VWF9QQUQoMHg0MGMsIDB4NzgsIDQsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0VJTV9EMjNfX1VTQkgyX0RBVEE3CQlJT01VWF9QQUQoMHg0MGMsIDB4NzgsIDIsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0VJTV9EMjRfX0FVRDZfUlhGUwkJSU9NVVhfUEFEKDB4NDEwLCAweDdjLCA1LCAweDA4ZjgsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fRDI0X19FSU1fRDI0CQlJT01VWF9QQUQoMHg0MTAsIDB4N2MsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0VJTV9EMjRfX0dQSU8yXzgJCUlPTVVYX1BBRCgweDQxMCwgMHg3YywgMSwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRUlNX0QyNF9fSTJDMl9TREEJCUlPTVVYX1BBRCgweDQxMCwgMHg3YywgMHgxNCwgMHgwOWJjLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRUlNX0QyNF9fVUFSVDNfQ1RTCQlJT01VWF9QQUQoMHg0MTAsIDB4N2MsIDMsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0VJTV9EMjRfX1VTQk9UR19EQVRBMAkJSU9NVVhfUEFEKDB4NDEwLCAweDdjLCAyLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fRDI1X19FSU1fRDI1CQlJT01VWF9QQUQoMHg0MTQsIDB4ODAsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0VJTV9EMjVfX0tFWV9DT0w2CQlJT01VWF9QQUQoMHg0MTQsIDB4ODAsIDEsIDB4MDljOCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0VJTV9EMjVfX1VBUlQyX0NUUwkJSU9NVVhfUEFEKDB4NDE0LCAweDgwLCA0LCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fRDI1X19VQVJUM19SWEQJCUlPTVVYX1BBRCgweDQxNCwgMHg4MCwgMywgMHgwOWY0LCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRUlNX0QyNV9fVVNCT1RHX0RBVEExCQlJT01VWF9QQUQoMHg0MTQsIDB4ODAsIDIsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0VJTV9EMjZfX0VJTV9EMjYJCUlPTVVYX1BBRCgweDQxOCwgMHg4NCwgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRUlNX0QyNl9fS0VZX0NPTDcJCUlPTVVYX1BBRCgweDQxOCwgMHg4NCwgMSwgMHgwOWNjLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRUlNX0QyNl9fVUFSVDJfUlRTCQlJT01VWF9QQUQoMHg0MTgsIDB4ODQsIDQsIDB4MDllOCwgMywgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0VJTV9EMjZfX1VBUlQzX1RYRAkJSU9NVVhfUEFEKDB4NDE4LCAweDg0LCAzLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fRDI2X19VU0JPVEdfREFUQTIJCUlPTVVYX1BBRCgweDQxOCwgMHg4NCwgMiwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRUlNX0QyN19fQVVENl9SWEMJCUlPTVVYX1BBRCgweDQxYywgMHg4OCwgNSwgMHgwOGY0LCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRUlNX0QyN19fRUlNX0QyNwkJSU9NVVhfUEFEKDB4NDFjLCAweDg4LCAwLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fRDI3X19HUElPMl85CQlJT01VWF9QQUQoMHg0MWMsIDB4ODgsIDEsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0VJTV9EMjdfX0kyQzJfU0NMCQlJT01VWF9QQUQoMHg0MWMsIDB4ODgsIDB4MTQsIDB4MDliOCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0VJTV9EMjdfX1VBUlQzX1JUUwkJSU9NVVhfUEFEKDB4NDFjLCAweDg4LCAzLCAweDA5ZjAsIDMsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fRDI3X19VU0JPVEdfREFUQTMJCUlPTVVYX1BBRCgweDQxYywgMHg4OCwgMiwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRUlNX0QyOF9fQVVENl9UWEQJCUlPTVVYX1BBRCgweDQyMCwgMHg4YywgNSwgMHgwOGYwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRUlNX0QyOF9fRUlNX0QyOAkJSU9NVVhfUEFEKDB4NDIwLCAweDhjLCAwLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fRDI4X19LRVlfUk9XNAkJSU9NVVhfUEFEKDB4NDIwLCAweDhjLCAxLCAweDA5ZDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fRDI4X19VU0JPVEdfREFUQTQJCUlPTVVYX1BBRCgweDQyMCwgMHg4YywgMiwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRUlNX0QyOV9fQVVENl9SWEQJCUlPTVVYX1BBRCgweDQyNCwgMHg5MCwgNSwgMHgwOGVjLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRUlNX0QyOV9fRUlNX0QyOQkJSU9NVVhfUEFEKDB4NDI0LCAweDkwLCAwLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fRDI5X19LRVlfUk9XNQkJSU9NVVhfUEFEKDB4NDI0LCAweDkwLCAxLCAweDA5ZDQsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fRDI5X19VU0JPVEdfREFUQTUJCUlPTVVYX1BBRCgweDQyNCwgMHg5MCwgMiwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRUlNX0QzMF9fQVVENl9UWEMJCUlPTVVYX1BBRCgweDQyOCwgMHg5NCwgNSwgMHgwOGZjLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRUlNX0QzMF9fRUlNX0QzMAkJSU9NVVhfUEFEKDB4NDI4LCAweDk0LCAwLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fRDMwX19LRVlfUk9XNgkJSU9NVVhfUEFEKDB4NDI4LCAweDk0LCAxLCAweDA5ZDgsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fRDMwX19VU0JPVEdfREFUQTYJCUlPTVVYX1BBRCgweDQyOCwgMHg5NCwgMiwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRUlNX0QzMV9fQVVENl9UWEZTCQlJT01VWF9QQUQoMHg0MmMsIDB4OTgsIDUsIDB4MDkwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0VJTV9EMzFfX0VJTV9EMzEJCUlPTVVYX1BBRCgweDQyYywgMHg5OCwgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRUlNX0QzMV9fS0VZX1JPVzcJCUlPTVVYX1BBRCgweDQyYywgMHg5OCwgMSwgMHgwOWRjLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRUlNX0QzMV9fVVNCT1RHX0RBVEE3CQlJT01VWF9QQUQoMHg0MmMsIDB4OTgsIDIsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0VJTV9BMTZfX0VJTV9BMTYJCUlPTVVYX1BBRCgweDQzMCwgMHg5YywgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRUlNX0ExNl9fR1BJTzJfMTAJCUlPTVVYX1BBRCgweDQzMCwgMHg5YywgMSwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRUlNX0ExNl9fT1NDX0ZSRVFfU0VMMAlJT01VWF9QQUQoMHg0MzAsIDB4OWMsIDcsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0VJTV9BMTdfX0VJTV9BMTcJCUlPTVVYX1BBRCgweDQzNCwgMHhhMCwgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRUlNX0ExN19fR1BJTzJfMTEJCUlPTVVYX1BBRCgweDQzNCwgMHhhMCwgMSwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRUlNX0ExN19fT1NDX0ZSRVFfU0VMMQlJT01VWF9QQUQoMHg0MzQsIDB4YTAsIDcsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0VJTV9BMThfX0JPT1RfTFBCMAkJSU9NVVhfUEFEKDB4NDM4LCAweGE0LCA3LCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fQTE4X19FSU1fQTE4CQlJT01VWF9QQUQoMHg0MzgsIDB4YTQsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0VJTV9BMThfX0dQSU8yXzEyCQlJT01VWF9QQUQoMHg0MzgsIDB4YTQsIDEsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0VJTV9BMTlfX0JPT1RfTFBCMQkJSU9NVVhfUEFEKDB4NDNjLCAweGE4LCA3LCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fQTE5X19FSU1fQTE5CQlJT01VWF9QQUQoMHg0M2MsIDB4YTgsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0VJTV9BMTlfX0dQSU8yXzEzCQlJT01VWF9QQUQoMHg0M2MsIDB4YTgsIDEsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0VJTV9BMjBfX0JPT1RfVUFSVF9TUkMwCUlPTVVYX1BBRCgweDQ0MCwgMHhhYywgNywgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRUlNX0EyMF9fRUlNX0EyMAkJSU9NVVhfUEFEKDB4NDQwLCAweGFjLCAwLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fQTIwX19HUElPMl8xNAkJSU9NVVhfUEFEKDB4NDQwLCAweGFjLCAxLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fQTIxX19CT09UX1VBUlRfU1JDMQlJT01VWF9QQUQoMHg0NDQsIDB4YjAsIDcsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0VJTV9BMjFfX0VJTV9BMjEJCUlPTVVYX1BBRCgweDQ0NCwgMHhiMCwgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRUlNX0EyMV9fR1BJTzJfMTUJCUlPTVVYX1BBRCgweDQ0NCwgMHhiMCwgMSwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRUlNX0EyMl9fRUlNX0EyMgkJSU9NVVhfUEFEKDB4NDQ4LCAweGI0LCAwLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fQTIyX19HUElPMl8xNgkJSU9NVVhfUEFEKDB4NDQ4LCAweGI0LCAxLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fQTIzX19CT09UX0hQTl9FTgkJSU9NVVhfUEFEKDB4NDRjLCAweGI4LCA3LCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fQTIzX19FSU1fQTIzCQlJT01VWF9QQUQoMHg0NGMsIDB4YjgsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0VJTV9BMjNfX0dQSU8yXzE3CQlJT01VWF9QQUQoMHg0NGMsIDB4YjgsIDEsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0VJTV9BMjRfX0VJTV9BMjQJCUlPTVVYX1BBRCgweDQ1MCwgMHhiYywgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRUlNX0EyNF9fR1BJTzJfMTgJCUlPTVVYX1BBRCgweDQ1MCwgMHhiYywgMSwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRUlNX0EyNF9fVVNCSDJfQ0xLCQlJT01VWF9QQUQoMHg0NTAsIDB4YmMsIDIsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0VJTV9BMjVfX0RJU1AxX1BJTjQJCUlPTVVYX1BBRCgweDQ1NCwgMHhjMCwgNiwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRUlNX0EyNV9fRUlNX0EyNQkJSU9NVVhfUEFEKDB4NDU0LCAweGMwLCAwLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fQTI1X19HUElPMl8xOQkJSU9NVVhfUEFEKDB4NDU0LCAweGMwLCAxLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fQTI1X19VU0JIMl9ESVIJCUlPTVVYX1BBRCgweDQ1NCwgMHhjMCwgMiwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRUlNX0EyNl9fQ1NJMV9EQVRBX0VOCQlJT01VWF9QQUQoMHg0NTgsIDB4YzQsIDUsIDB4MDlhMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0VJTV9BMjZfX0RJU1AyX0VYVF9DTEsJSU9NVVhfUEFEKDB4NDU4LCAweGM0LCA2LCAweDA5MDgsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fQTI2X19FSU1fQTI2CQlJT01VWF9QQUQoMHg0NTgsIDB4YzQsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0VJTV9BMjZfX0dQSU8yXzIwCQlJT01VWF9QQUQoMHg0NTgsIDB4YzQsIDEsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0VJTV9BMjZfX1VTQkgyX1NUUAkJSU9NVVhfUEFEKDB4NDU4LCAweGM0LCAyLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fQTI3X19DU0kyX0RBVEFfRU4JCUlPTVVYX1BBRCgweDQ1YywgMHhjOCwgNSwgMHgwOTljLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRUlNX0EyN19fRElTUDFfUElOMQkJSU9NVVhfUEFEKDB4NDVjLCAweGM4LCA2LCAweDA5YTQsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fQTI3X19FSU1fQTI3CQlJT01VWF9QQUQoMHg0NWMsIDB4YzgsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0VJTV9BMjdfX0dQSU8yXzIxCQlJT01VWF9QQUQoMHg0NWMsIDB4YzgsIDEsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0VJTV9BMjdfX1VTQkgyX05YVAkJSU9NVVhfUEFEKDB4NDVjLCAweGM4LCAyLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fRUIwX19FSU1fRUIwCQlJT01VWF9QQUQoMHg0NjAsIDB4Y2MsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0VJTV9FQjFfX0VJTV9FQjEJCUlPTVVYX1BBRCgweDQ2NCwgMHhkMCwgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRUlNX0VCMl9fQVVENV9SWEZTCQlJT01VWF9QQUQoMHg0NjgsIDB4ZDQsIDYsIDB4MDhlMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0VJTV9FQjJfX0NTSTFfRDIJCUlPTVVYX1BBRCgweDQ2OCwgMHhkNCwgNSwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRUlNX0VCMl9fRUlNX0VCMgkJSU9NVVhfUEFEKDB4NDY4LCAweGQ0LCAwLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fRUIyX19GRUNfTURJTwkJSU9NVVhfUEFEKDB4NDY4LCAweGQ0LCAzLCAweDA5NTQsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fRUIyX19HUElPMl8yMgkJSU9NVVhfUEFEKDB4NDY4LCAweGQ0LCAxLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fRUIyX19HUFRfQ01QT1VUMQkJSU9NVVhfUEFEKDB4NDY4LCAweGQ0LCA3LCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fRUIzX19BVUQ1X1JYQwkJSU9NVVhfUEFEKDB4NDZjLCAweGQ4LCA2LCAweDA4ZGMsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fRUIzX19DU0kxX0QzCQlJT01VWF9QQUQoMHg0NmMsIDB4ZDgsIDUsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0VJTV9FQjNfX0VJTV9FQjMJCUlPTVVYX1BBRCgweDQ2YywgMHhkOCwgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRUlNX0VCM19fRkVDX1JEQVRBMQkJSU9NVVhfUEFEKDB4NDZjLCAweGQ4LCAzLCAweDA5NWMsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fRUIzX19HUElPMl8yMwkJSU9NVVhfUEFEKDB4NDZjLCAweGQ4LCAxLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fRUIzX19HUFRfQ01QT1VUMgkJSU9NVVhfUEFEKDB4NDZjLCAweGQ4LCA3LCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fT0VfX0VJTV9PRQkJSU9NVVhfUEFEKDB4NDcwLCAweGRjLCAwLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fT0VfX0dQSU8yXzI0CQlJT01VWF9QQUQoMHg0NzAsIDB4ZGMsIDEsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0VJTV9DUzBfX0VJTV9DUzAJCUlPTVVYX1BBRCgweDQ3NCwgMHhlMCwgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRUlNX0NTMF9fR1BJTzJfMjUJCUlPTVVYX1BBRCgweDQ3NCwgMHhlMCwgMSwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRUlNX0NTMV9fRUlNX0NTMQkJSU9NVVhfUEFEKDB4NDc4LCAweGU0LCAwLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fQ1MxX19HUElPMl8yNgkJSU9NVVhfUEFEKDB4NDc4LCAweGU0LCAxLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fQ1MyX19BVUQ1X1RYRAkJSU9NVVhfUEFEKDB4NDdjLCAweGU4LCA2LCAweDA4ZDgsIDEsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fQ1MyX19DU0kxX0Q0CQlJT01VWF9QQUQoMHg0N2MsIDB4ZTgsIDUsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0VJTV9DUzJfX0VJTV9DUzIJCUlPTVVYX1BBRCgweDQ3YywgMHhlOCwgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRUlNX0NTMl9fRkVDX1JEQVRBMgkJSU9NVVhfUEFEKDB4NDdjLCAweGU4LCAzLCAweDA5NjAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fQ1MyX19HUElPMl8yNwkJSU9NVVhfUEFEKDB4NDdjLCAweGU4LCAxLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fQ1MyX19VU0JPVEdfU1RQCQlJT01VWF9QQUQoMHg0N2MsIDB4ZTgsIDIsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0VJTV9DUzNfX0FVRDVfUlhECQlJT01VWF9QQUQoMHg0ODAsIDB4ZWMsIDYsIDB4MDhkNCwgMSwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0VJTV9DUzNfX0NTSTFfRDUJCUlPTVVYX1BBRCgweDQ4MCwgMHhlYywgNSwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRUlNX0NTM19fRUlNX0NTMwkJSU9NVVhfUEFEKDB4NDgwLCAweGVjLCAwLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fQ1MzX19GRUNfUkRBVEEzCQlJT01VWF9QQUQoMHg0ODAsIDB4ZWMsIDMsIDB4MDk2NCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0VJTV9DUzNfX0dQSU8yXzI4CQlJT01VWF9QQUQoMHg0ODAsIDB4ZWMsIDEsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0VJTV9DUzNfX1VTQk9UR19OWFQJCUlPTVVYX1BBRCgweDQ4MCwgMHhlYywgMiwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRUlNX0NTNF9fQVVENV9UWEMJCUlPTVVYX1BBRCgweDQ4NCwgMHhmMCwgNiwgMHgwOGU0LCAxLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRUlNX0NTNF9fQ1NJMV9ENgkJSU9NVVhfUEFEKDB4NDg0LCAweGYwLCA1LCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fQ1M0X19FSU1fQ1M0CQlJT01VWF9QQUQoMHg0ODQsIDB4ZjAsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0VJTV9DUzRfX0ZFQ19SWF9FUgkJSU9NVVhfUEFEKDB4NDg0LCAweGYwLCAzLCAweDA5NzAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fQ1M0X19HUElPMl8yOQkJSU9NVVhfUEFEKDB4NDg0LCAweGYwLCAxLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fQ1M0X19VU0JPVEdfQ0xLCQlJT01VWF9QQUQoMHg0ODQsIDB4ZjAsIDIsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0VJTV9DUzVfX0FVRDVfVFhGUwkJSU9NVVhfUEFEKDB4NDg4LCAweGY0LCA2LCAweDA4ZTgsIDEsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fQ1M1X19DU0kxX0Q3CQlJT01VWF9QQUQoMHg0ODgsIDB4ZjQsIDUsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0VJTV9DUzVfX0RJU1AxX0VYVF9DTEsJSU9NVVhfUEFEKDB4NDg4LCAweGY0LCA0LCAweDA5MDQsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fQ1M1X19FSU1fQ1M1CQlJT01VWF9QQUQoMHg0ODgsIDB4ZjQsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0VJTV9DUzVfX0ZFQ19DUlMJCUlPTVVYX1BBRCgweDQ4OCwgMHhmNCwgMywgMHgwOTUwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRUlNX0NTNV9fR1BJTzJfMzAJCUlPTVVYX1BBRCgweDQ4OCwgMHhmNCwgMSwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRUlNX0NTNV9fVVNCT1RHX0RJUgkJSU9NVVhfUEFEKDB4NDg4LCAweGY0LCAyLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fRFRBQ0tfX0VJTV9EVEFDSwkJSU9NVVhfUEFEKDB4NDhjLCAweGY4LCAwLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fRFRBQ0tfX0dQSU8yXzMxCQlJT01VWF9QQUQoMHg0OGMsIDB4ZjgsIDEsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0VJTV9MQkFfX0VJTV9MQkEJCUlPTVVYX1BBRCgweDQ5NCwgMHhmYywgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRUlNX0xCQV9fR1BJTzNfMQkJSU9NVVhfUEFEKDB4NDk0LCAweGZjLCAxLCAweDA5NzgsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fQ1JFX19FSU1fQ1JFCQlJT01VWF9QQUQoMHg0YTAsIDB4MTAwLCAwLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fQ1JFX19HUElPM18yCQlJT01VWF9QQUQoMHg0YTAsIDB4MTAwLCAxLCAweDA5N2MsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9EUkFNX0NTMV9fRFJBTV9DUzEJCUlPTVVYX1BBRCgweDRkMCwgMHgxMDQsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX05BTkRGX1dFX0JfX0dQSU8zXzMJCUlPTVVYX1BBRCgweDRlNCwgMHgxMDgsIDMsIDB4MDk4MCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX05BTkRGX1dFX0JfX05BTkRGX1dFX0IJSU9NVVhfUEFEKDB4NGU0LCAweDEwOCwgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfTkFOREZfV0VfQl9fUEFUQV9ESU9XCQlJT01VWF9QQUQoMHg0ZTQsIDB4MTA4LCAxLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9OQU5ERl9XRV9CX19TRDNfREFUQTAJCUlPTVVYX1BBRCgweDRlNCwgMHgxMDgsIDIsIDB4MDkzYywgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX05BTkRGX1JFX0JfX0dQSU8zXzQJCUlPTVVYX1BBRCgweDRlOCwgMHgxMGMsIDMsIDB4MDk4NCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX05BTkRGX1JFX0JfX05BTkRGX1JFX0IJSU9NVVhfUEFEKDB4NGU4LCAweDEwYywgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfTkFOREZfUkVfQl9fUEFUQV9ESU9SCQlJT01VWF9QQUQoMHg0ZTgsIDB4MTBjLCAxLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9OQU5ERl9SRV9CX19TRDNfREFUQTEJCUlPTVVYX1BBRCgweDRlOCwgMHgxMGMsIDIsIDB4MDk0MCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX05BTkRGX0FMRV9fR1BJTzNfNQkJSU9NVVhfUEFEKDB4NGVjLCAweDExMCwgMywgMHgwOTg4LCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfTkFOREZfQUxFX19OQU5ERl9BTEUJCUlPTVVYX1BBRCgweDRlYywgMHgxMTAsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX05BTkRGX0FMRV9fUEFUQV9CVUZGRVJfRU4JSU9NVVhfUEFEKDB4NGVjLCAweDExMCwgMSwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfTkFOREZfQ0xFX19HUElPM182CQlJT01VWF9QQUQoMHg0ZjAsIDB4MTE0LCAzLCAweDA5OGMsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9OQU5ERl9DTEVfX05BTkRGX0NMRQkJSU9NVVhfUEFEKDB4NGYwLCAweDExNCwgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfTkFOREZfQ0xFX19QQVRBX1JFU0VUX0IJSU9NVVhfUEFEKDB4NGYwLCAweDExNCwgMSwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfTkFOREZfV1BfQl9fR1BJTzNfNwkJSU9NVVhfUEFEKDB4NGY0LCAweDExOCwgMywgMHgwOTkwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfTkFOREZfV1BfQl9fTkFOREZfV1BfQglJT01VWF9QQUQoMHg0ZjQsIDB4MTE4LCAwLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9OQU5ERl9XUF9CX19QQVRBX0RNQUNLCUlPTVVYX1BBRCgweDRmNCwgMHgxMTgsIDEsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX05BTkRGX1dQX0JfX1NEM19EQVRBMgkJSU9NVVhfUEFEKDB4NGY0LCAweDExOCwgMiwgMHgwOTQ0LCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfTkFOREZfUkIwX19FQ1NQSTJfU1MxCQlJT01VWF9QQUQoMHg0ZjgsIDB4MTFjLCA1LCAweDA5MzAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9OQU5ERl9SQjBfX0dQSU8zXzgJCUlPTVVYX1BBRCgweDRmOCwgMHgxMWMsIDMsIDB4MDk5NCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX05BTkRGX1JCMF9fTkFOREZfUkIwCQlJT01VWF9QQUQoMHg0ZjgsIDB4MTFjLCAwLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9OQU5ERl9SQjBfX1BBVEFfRE1BUlEJCUlPTVVYX1BBRCgweDRmOCwgMHgxMWMsIDEsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX05BTkRGX1JCMF9fU0QzX0RBVEEzCQlJT01VWF9QQUQoMHg0ZjgsIDB4MTFjLCAyLCAweDA5NDgsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9OQU5ERl9SQjFfX0NTUElfTU9TSQkJSU9NVVhfUEFEKDB4NGZjLCAweDEyMCwgNiwgMHgwOTFjLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfTkFOREZfUkIxX19FQ1NQSTJfUkRZCQlJT01VWF9QQUQoMHg0ZmMsIDB4MTIwLCAyLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9OQU5ERl9SQjFfX0dQSU8zXzkJCUlPTVVYX1BBRCgweDRmYywgMHgxMjAsIDMsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX05BTkRGX1JCMV9fTkFOREZfUkIxCQlJT01VWF9QQUQoMHg0ZmMsIDB4MTIwLCAwLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9OQU5ERl9SQjFfX1BBVEFfSU9SRFkJCUlPTVVYX1BBRCgweDRmYywgMHgxMjAsIDEsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX05BTkRGX1JCMV9fU0Q0X0NNRAkJSU9NVVhfUEFEKDB4NGZjLCAweDEyMCwgNSwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfTkFOREZfUkIyX19ESVNQMl9XQUlUCQlJT01VWF9QQUQoMHg1MDAsIDB4MTI0LCA1LCAweDA5YTgsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9OQU5ERl9SQjJfX0VDU1BJMl9TQ0xLCUlPTVVYX1BBRCgweDUwMCwgMHgxMjQsIDIsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX05BTkRGX1JCMl9fRkVDX0NPTAkJSU9NVVhfUEFEKDB4NTAwLCAweDEyNCwgMSwgMHgwOTRjLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfTkFOREZfUkIyX19HUElPM18xMAkJSU9NVVhfUEFEKDB4NTAwLCAweDEyNCwgMywgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfTkFOREZfUkIyX19OQU5ERl9SQjIJCUlPTVVYX1BBRCgweDUwMCwgMHgxMjQsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX05BTkRGX1JCMl9fVVNCSDNfSDNfRFAJSU9NVVhfUEFEKDB4NTAwLCAweDEyNCwgNywgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfTkFOREZfUkIyX19VU0JIM19OWFQJCUlPTVVYX1BBRCgweDUwMCwgMHgxMjQsIDYsIDB4MGEyMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX05BTkRGX1JCM19fRElTUDFfV0FJVAkJSU9NVVhfUEFEKDB4NTA0LCAweDEyOCwgNSwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfTkFOREZfUkIzX19FQ1NQSTJfTUlTTwlJT01VWF9QQUQoMHg1MDQsIDB4MTI4LCAyLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9OQU5ERl9SQjNfX0ZFQ19SWF9DTEsJCUlPTVVYX1BBRCgweDUwNCwgMHgxMjgsIDEsIDB4MDk2OCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX05BTkRGX1JCM19fR1BJTzNfMTEJCUlPTVVYX1BBRCgweDUwNCwgMHgxMjgsIDMsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX05BTkRGX1JCM19fTkFOREZfUkIzCQlJT01VWF9QQUQoMHg1MDQsIDB4MTI4LCAwLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9OQU5ERl9SQjNfX1VTQkgzX0NMSwkJSU9NVVhfUEFEKDB4NTA0LCAweDEyOCwgNiwgMHgwOWY4LCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfTkFOREZfUkIzX19VU0JIM19IM19ETQlJT01VWF9QQUQoMHg1MDQsIDB4MTI4LCA3LCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9HUElPX05BTkRfX0dQSU9fTkFORAkJSU9NVVhfUEFEKDB4NTE0LCAweDEyYywgMCwgMHgwOTk4LCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfR1BJT19OQU5EX19QQVRBX0lOVFJRCQlJT01VWF9QQUQoMHg1MTQsIDB4MTJjLCAxLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9OQU5ERl9DUzBfX0dQSU8zXzE2CQlJT01VWF9QQUQoMHg1MTgsIDB4MTMwLCAzLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9OQU5ERl9DUzBfX05BTkRGX0NTMAkJSU9NVVhfUEFEKDB4NTE4LCAweDEzMCwgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfTkFOREZfQ1MxX19HUElPM18xNwkJSU9NVVhfUEFEKDB4NTFjLCAweDEzNCwgMywgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfTkFOREZfQ1MxX19OQU5ERl9DUzEJCUlPTVVYX1BBRCgweDUxYywgMHgxMzQsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX05BTkRGX0NTMl9fQ1NQSV9TQ0xLCQlJT01VWF9QQUQoMHg1MjAsIDB4MTM4LCA2LCAweDA5MTQsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9OQU5ERl9DUzJfX0ZFQ19UWF9FUgkJSU9NVVhfUEFEKDB4NTIwLCAweDEzOCwgMiwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfTkFOREZfQ1MyX19HUElPM18xOAkJSU9NVVhfUEFEKDB4NTIwLCAweDEzOCwgMywgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfTkFOREZfQ1MyX19OQU5ERl9DUzIJCUlPTVVYX1BBRCgweDUyMCwgMHgxMzgsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX05BTkRGX0NTMl9fUEFUQV9DU18wCQlJT01VWF9QQUQoMHg1MjAsIDB4MTM4LCAxLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9OQU5ERl9DUzJfX1NENF9DTEsJCUlPTVVYX1BBRCgweDUyMCwgMHgxMzgsIDUsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX05BTkRGX0NTMl9fVVNCSDNfSDFfRFAJSU9NVVhfUEFEKDB4NTIwLCAweDEzOCwgNywgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfTkFOREZfQ1MzX19GRUNfTURDCQlJT01VWF9QQUQoMHg1MjQsIDB4MTNjLCAyLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9OQU5ERl9DUzNfX0dQSU8zXzE5CQlJT01VWF9QQUQoMHg1MjQsIDB4MTNjLCAzLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9OQU5ERl9DUzNfX05BTkRGX0NTMwkJSU9NVVhfUEFEKDB4NTI0LCAweDEzYywgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfTkFOREZfQ1MzX19QQVRBX0NTXzEJCUlPTVVYX1BBRCgweDUyNCwgMHgxM2MsIDEsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX05BTkRGX0NTM19fU0Q0X0RBVDAJCUlPTVVYX1BBRCgweDUyNCwgMHgxM2MsIDUsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX05BTkRGX0NTM19fVVNCSDNfSDFfRE0JSU9NVVhfUEFEKDB4NTI0LCAweDEzYywgNywgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfTkFOREZfQ1M0X19GRUNfVERBVEExCQlJT01VWF9QQUQoMHg1MjgsIDB4MTQwLCAyLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9OQU5ERl9DUzRfX0dQSU8zXzIwCQlJT01VWF9QQUQoMHg1MjgsIDB4MTQwLCAzLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9OQU5ERl9DUzRfX05BTkRGX0NTNAkJSU9NVVhfUEFEKDB4NTI4LCAweDE0MCwgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfTkFOREZfQ1M0X19QQVRBX0RBXzAJCUlPTVVYX1BBRCgweDUyOCwgMHgxNDAsIDEsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX05BTkRGX0NTNF9fU0Q0X0RBVDEJCUlPTVVYX1BBRCgweDUyOCwgMHgxNDAsIDUsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX05BTkRGX0NTNF9fVVNCSDNfU1RQCQlJT01VWF9QQUQoMHg1MjgsIDB4MTQwLCA3LCAweDBhMjQsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9OQU5ERl9DUzVfX0ZFQ19UREFUQTIJCUlPTVVYX1BBRCgweDUyYywgMHgxNDQsIDIsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX05BTkRGX0NTNV9fR1BJTzNfMjEJCUlPTVVYX1BBRCgweDUyYywgMHgxNDQsIDMsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX05BTkRGX0NTNV9fTkFOREZfQ1M1CQlJT01VWF9QQUQoMHg1MmMsIDB4MTQ0LCAwLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9OQU5ERl9DUzVfX1BBVEFfREFfMQkJSU9NVVhfUEFEKDB4NTJjLCAweDE0NCwgMSwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfTkFOREZfQ1M1X19TRDRfREFUMgkJSU9NVVhfUEFEKDB4NTJjLCAweDE0NCwgNSwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfTkFOREZfQ1M1X19VU0JIM19ESVIJCUlPTVVYX1BBRCgweDUyYywgMHgxNDQsIDcsIDB4MGExYywgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX05BTkRGX0NTNl9fQ1NQSV9TUzMJCUlPTVVYX1BBRCgweDUzMCwgMHgxNDgsIDcsIDB4MDkyOCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX05BTkRGX0NTNl9fRkVDX1REQVRBMwkJSU9NVVhfUEFEKDB4NTMwLCAweDE0OCwgMiwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfTkFOREZfQ1M2X19HUElPM18yMgkJSU9NVVhfUEFEKDB4NTMwLCAweDE0OCwgMywgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfTkFOREZfQ1M2X19OQU5ERl9DUzYJCUlPTVVYX1BBRCgweDUzMCwgMHgxNDgsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX05BTkRGX0NTNl9fUEFUQV9EQV8yCQlJT01VWF9QQUQoMHg1MzAsIDB4MTQ4LCAxLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9OQU5ERl9DUzZfX1NENF9EQVQzCQlJT01VWF9QQUQoMHg1MzAsIDB4MTQ4LCA1LCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9OQU5ERl9DUzdfX0ZFQ19UWF9FTgkJSU9NVVhfUEFEKDB4NTM0LCAweDE0YywgMSwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfTkFOREZfQ1M3X19HUElPM18yMwkJSU9NVVhfUEFEKDB4NTM0LCAweDE0YywgMywgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfTkFOREZfQ1M3X19OQU5ERl9DUzcJCUlPTVVYX1BBRCgweDUzNCwgMHgxNGMsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX05BTkRGX0NTN19fU0QzX0NMSwkJSU9NVVhfUEFEKDB4NTM0LCAweDE0YywgNSwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfTkFOREZfUkRZX0lOVF9fRUNTUEkyX1NTMAlJT01VWF9QQUQoMHg1MzgsIDB4MTUwLCAyLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9OQU5ERl9SRFlfSU5UX19GRUNfVFhfQ0xLCUlPTVVYX1BBRCgweDUzOCwgMHgxNTAsIDEsIDB4MDk3NCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX05BTkRGX1JEWV9JTlRfX0dQSU8zXzI0CUlPTVVYX1BBRCgweDUzOCwgMHgxNTAsIDMsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX05BTkRGX1JEWV9JTlRfX05BTkRGX1JEWV9JTlQJSU9NVVhfUEFEKDB4NTM4LCAweDE1MCwgMCwgMHgwOTM4LCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfTkFOREZfUkRZX0lOVF9fU0QzX0NNRAlJT01VWF9QQUQoMHg1MzgsIDB4MTUwLCA1LCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9OQU5ERl9EMTVfX0VDU1BJMl9NT1NJCUlPTVVYX1BBRCgweDUzYywgMHgxNTQsIDIsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX05BTkRGX0QxNV9fR1BJTzNfMjUJCUlPTVVYX1BBRCgweDUzYywgMHgxNTQsIDMsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX05BTkRGX0QxNV9fTkFOREZfRDE1CQlJT01VWF9QQUQoMHg1M2MsIDB4MTU0LCAwLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9OQU5ERl9EMTVfX1BBVEFfREFUQTE1CUlPTVVYX1BBRCgweDUzYywgMHgxNTQsIDEsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX05BTkRGX0QxNV9fU0QzX0RBVDcJCUlPTVVYX1BBRCgweDUzYywgMHgxNTQsIDUsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX05BTkRGX0QxNF9fRUNTUEkyX1NTMwkJSU9NVVhfUEFEKDB4NTQwLCAweDE1OCwgMiwgMHgwOTM0LCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfTkFOREZfRDE0X19HUElPM18yNgkJSU9NVVhfUEFEKDB4NTQwLCAweDE1OCwgMywgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfTkFOREZfRDE0X19OQU5ERl9EMTQJCUlPTVVYX1BBRCgweDU0MCwgMHgxNTgsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX05BTkRGX0QxNF9fUEFUQV9EQVRBMTQJSU9NVVhfUEFEKDB4NTQwLCAweDE1OCwgMSwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfTkFOREZfRDE0X19TRDNfREFUNgkJSU9NVVhfUEFEKDB4NTQwLCAweDE1OCwgNSwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfTkFOREZfRDEzX19FQ1NQSTJfU1MyCQlJT01VWF9QQUQoMHg1NDQsIDB4MTVjLCAyLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9OQU5ERl9EMTNfX0dQSU8zXzI3CQlJT01VWF9QQUQoMHg1NDQsIDB4MTVjLCAzLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9OQU5ERl9EMTNfX05BTkRGX0QxMwkJSU9NVVhfUEFEKDB4NTQ0LCAweDE1YywgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfTkFOREZfRDEzX19QQVRBX0RBVEExMwlJT01VWF9QQUQoMHg1NDQsIDB4MTVjLCAxLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9OQU5ERl9EMTNfX1NEM19EQVQ1CQlJT01VWF9QQUQoMHg1NDQsIDB4MTVjLCA1LCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9OQU5ERl9EMTJfX0VDU1BJMl9TUzEJCUlPTVVYX1BBRCgweDU0OCwgMHgxNjAsIDIsIDB4MDkzMCwgMSwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX05BTkRGX0QxMl9fR1BJTzNfMjgJCUlPTVVYX1BBRCgweDU0OCwgMHgxNjAsIDMsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX05BTkRGX0QxMl9fTkFOREZfRDEyCQlJT01VWF9QQUQoMHg1NDgsIDB4MTYwLCAwLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9OQU5ERl9EMTJfX1BBVEFfREFUQTEyCUlPTVVYX1BBRCgweDU0OCwgMHgxNjAsIDEsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX05BTkRGX0QxMl9fU0QzX0RBVDQJCUlPTVVYX1BBRCgweDU0OCwgMHgxNjAsIDUsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX05BTkRGX0QxMV9fRkVDX1JYX0RWCQlJT01VWF9QQUQoMHg1NGMsIDB4MTY0LCAyLCAweDA5NmMsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9OQU5ERl9EMTFfX0dQSU8zXzI5CQlJT01VWF9QQUQoMHg1NGMsIDB4MTY0LCAzLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9OQU5ERl9EMTFfX05BTkRGX0QxMQkJSU9NVVhfUEFEKDB4NTRjLCAweDE2NCwgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfTkFOREZfRDExX19QQVRBX0RBVEExMQlJT01VWF9QQUQoMHg1NGMsIDB4MTY0LCAxLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9OQU5ERl9EMTFfX1NEM19EQVRBMwkJSU9NVVhfUEFEKDB4NTRjLCAweDE2NCwgNSwgMHgwOTQ4LCAxLCAwKQorI2RlZmluZSBfTVg1MV9QQURfTkFOREZfRDEwX19HUElPM18zMAkJSU9NVVhfUEFEKDB4NTUwLCAweDE2OCwgMywgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfTkFOREZfRDEwX19OQU5ERl9EMTAJCUlPTVVYX1BBRCgweDU1MCwgMHgxNjgsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX05BTkRGX0QxMF9fUEFUQV9EQVRBMTAJSU9NVVhfUEFEKDB4NTUwLCAweDE2OCwgMSwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfTkFOREZfRDEwX19TRDNfREFUQTIJCUlPTVVYX1BBRCgweDU1MCwgMHgxNjgsIDUsIDB4MDk0NCwgMSwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX05BTkRGX0Q5X19GRUNfUkRBVEEwCQlJT01VWF9QQUQoMHg1NTQsIDB4MTZjLCAweDEyLCAweDA5NTgsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9OQU5ERl9EOV9fR1BJTzNfMzEJCUlPTVVYX1BBRCgweDU1NCwgMHgxNmMsIDMsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX05BTkRGX0Q5X19OQU5ERl9EOQkJSU9NVVhfUEFEKDB4NTU0LCAweDE2YywgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfTkFOREZfRDlfX1BBVEFfREFUQTkJCUlPTVVYX1BBRCgweDU1NCwgMHgxNmMsIDEsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX05BTkRGX0Q5X19TRDNfREFUQTEJCUlPTVVYX1BBRCgweDU1NCwgMHgxNmMsIDUsIDB4MDk0MCwgMSwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX05BTkRGX0Q4X19GRUNfVERBVEEwCQlJT01VWF9QQUQoMHg1NTgsIDB4MTcwLCAyLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9OQU5ERl9EOF9fR1BJTzRfMAkJSU9NVVhfUEFEKDB4NTU4LCAweDE3MCwgMywgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfTkFOREZfRDhfX05BTkRGX0Q4CQlJT01VWF9QQUQoMHg1NTgsIDB4MTcwLCAwLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9OQU5ERl9EOF9fUEFUQV9EQVRBOAkJSU9NVVhfUEFEKDB4NTU4LCAweDE3MCwgMSwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfTkFOREZfRDhfX1NEM19EQVRBMAkJSU9NVVhfUEFEKDB4NTU4LCAweDE3MCwgNSwgMHgwOTNjLCAxLCAwKQorI2RlZmluZSBfTVg1MV9QQURfTkFOREZfRDdfX0dQSU80XzEJCUlPTVVYX1BBRCgweDU1YywgMHgxNzQsIDMsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX05BTkRGX0Q3X19OQU5ERl9ENwkJSU9NVVhfUEFEKDB4NTVjLCAweDE3NCwgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfTkFOREZfRDdfX1BBVEFfREFUQTcJCUlPTVVYX1BBRCgweDU1YywgMHgxNzQsIDEsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX05BTkRGX0Q3X19VU0JIM19EQVRBMAkJSU9NVVhfUEFEKDB4NTVjLCAweDE3NCwgNSwgMHgwOWZjLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfTkFOREZfRDZfX0dQSU80XzIJCUlPTVVYX1BBRCgweDU2MCwgMHgxNzgsIDMsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX05BTkRGX0Q2X19OQU5ERl9ENgkJSU9NVVhfUEFEKDB4NTYwLCAweDE3OCwgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfTkFOREZfRDZfX1BBVEFfREFUQTYJCUlPTVVYX1BBRCgweDU2MCwgMHgxNzgsIDEsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX05BTkRGX0Q2X19TRDRfTENUTAkJSU9NVVhfUEFEKDB4NTYwLCAweDE3OCwgMiwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfTkFOREZfRDZfX1VTQkgzX0RBVEExCQlJT01VWF9QQUQoMHg1NjAsIDB4MTc4LCA1LCAweDBhMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9OQU5ERl9ENV9fR1BJTzRfMwkJSU9NVVhfUEFEKDB4NTY0LCAweDE3YywgMywgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfTkFOREZfRDVfX05BTkRGX0Q1CQlJT01VWF9QQUQoMHg1NjQsIDB4MTdjLCAwLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9OQU5ERl9ENV9fUEFUQV9EQVRBNQkJSU9NVVhfUEFEKDB4NTY0LCAweDE3YywgMSwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfTkFOREZfRDVfX1NENF9XUAkJSU9NVVhfUEFEKDB4NTY0LCAweDE3YywgMiwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfTkFOREZfRDVfX1VTQkgzX0RBVEEyCQlJT01VWF9QQUQoMHg1NjQsIDB4MTdjLCA1LCAweDBhMDQsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9OQU5ERl9ENF9fR1BJTzRfNAkJSU9NVVhfUEFEKDB4NTY4LCAweDE4MCwgMywgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfTkFOREZfRDRfX05BTkRGX0Q0CQlJT01VWF9QQUQoMHg1NjgsIDB4MTgwLCAwLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9OQU5ERl9ENF9fUEFUQV9EQVRBNAkJSU9NVVhfUEFEKDB4NTY4LCAweDE4MCwgMSwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfTkFOREZfRDRfX1NENF9DRAkJSU9NVVhfUEFEKDB4NTY4LCAweDE4MCwgMiwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfTkFOREZfRDRfX1VTQkgzX0RBVEEzCQlJT01VWF9QQUQoMHg1NjgsIDB4MTgwLCA1LCAweDBhMDgsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9OQU5ERl9EM19fR1BJTzRfNQkJSU9NVVhfUEFEKDB4NTZjLCAweDE4NCwgMywgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfTkFOREZfRDNfX05BTkRGX0QzCQlJT01VWF9QQUQoMHg1NmMsIDB4MTg0LCAwLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9OQU5ERl9EM19fUEFUQV9EQVRBMwkJSU9NVVhfUEFEKDB4NTZjLCAweDE4NCwgMSwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfTkFOREZfRDNfX1NENF9EQVQ0CQlJT01VWF9QQUQoMHg1NmMsIDB4MTg0LCAyLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9OQU5ERl9EM19fVVNCSDNfREFUQTQJCUlPTVVYX1BBRCgweDU2YywgMHgxODQsIDUsIDB4MGEwYywgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX05BTkRGX0QyX19HUElPNF82CQlJT01VWF9QQUQoMHg1NzAsIDB4MTg4LCAzLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9OQU5ERl9EMl9fTkFOREZfRDIJCUlPTVVYX1BBRCgweDU3MCwgMHgxODgsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX05BTkRGX0QyX19QQVRBX0RBVEEyCQlJT01VWF9QQUQoMHg1NzAsIDB4MTg4LCAxLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9OQU5ERl9EMl9fU0Q0X0RBVDUJCUlPTVVYX1BBRCgweDU3MCwgMHgxODgsIDIsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX05BTkRGX0QyX19VU0JIM19EQVRBNQkJSU9NVVhfUEFEKDB4NTcwLCAweDE4OCwgNSwgMHgwYTEwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfTkFOREZfRDFfX0dQSU80XzcJCUlPTVVYX1BBRCgweDU3NCwgMHgxOGMsIDMsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX05BTkRGX0QxX19OQU5ERl9EMQkJSU9NVVhfUEFEKDB4NTc0LCAweDE4YywgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfTkFOREZfRDFfX1BBVEFfREFUQTEJCUlPTVVYX1BBRCgweDU3NCwgMHgxOGMsIDEsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX05BTkRGX0QxX19TRDRfREFUNgkJSU9NVVhfUEFEKDB4NTc0LCAweDE4YywgMiwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfTkFOREZfRDFfX1VTQkgzX0RBVEE2CQlJT01VWF9QQUQoMHg1NzQsIDB4MThjLCA1LCAweDBhMTQsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9OQU5ERl9EMF9fR1BJTzRfOAkJSU9NVVhfUEFEKDB4NTc4LCAweDE5MCwgMywgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfTkFOREZfRDBfX05BTkRGX0QwCQlJT01VWF9QQUQoMHg1NzgsIDB4MTkwLCAwLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9OQU5ERl9EMF9fUEFUQV9EQVRBMAkJSU9NVVhfUEFEKDB4NTc4LCAweDE5MCwgMSwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfTkFOREZfRDBfX1NENF9EQVQ3CQlJT01VWF9QQUQoMHg1NzgsIDB4MTkwLCAyLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9OQU5ERl9EMF9fVVNCSDNfREFUQTcJCUlPTVVYX1BBRCgweDU3OCwgMHgxOTAsIDUsIDB4MGExOCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0NTSTFfRDhfX0NTSTFfRDgJCUlPTVVYX1BBRCgweDU3YywgMHgxOTQsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0NTSTFfRDhfX0dQSU8zXzEyCQlJT01VWF9QQUQoMHg1N2MsIDB4MTk0LCAzLCAweDA5OTgsIDEsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9DU0kxX0Q5X19DU0kxX0Q5CQlJT01VWF9QQUQoMHg1ODAsIDB4MTk4LCAwLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9DU0kxX0Q5X19HUElPM18xMwkJSU9NVVhfUEFEKDB4NTgwLCAweDE5OCwgMywgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfQ1NJMV9EMTBfX0NTSTFfRDEwCQlJT01VWF9QQUQoMHg1ODQsIDB4MTljLCAwLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9DU0kxX0QxMV9fQ1NJMV9EMTEJCUlPTVVYX1BBRCgweDU4OCwgMHgxYTAsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0NTSTFfRDEyX19DU0kxX0QxMgkJSU9NVVhfUEFEKDB4NThjLCAweDFhNCwgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfQ1NJMV9EMTNfX0NTSTFfRDEzCQlJT01VWF9QQUQoMHg1OTAsIDB4MWE4LCAwLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9DU0kxX0QxNF9fQ1NJMV9EMTQJCUlPTVVYX1BBRCgweDU5NCwgMHgxYWMsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0NTSTFfRDE1X19DU0kxX0QxNQkJSU9NVVhfUEFEKDB4NTk4LCAweDFiMCwgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfQ1NJMV9EMTZfX0NTSTFfRDE2CQlJT01VWF9QQUQoMHg1OWMsIDB4MWI0LCAwLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9DU0kxX0QxN19fQ1NJMV9EMTcJCUlPTVVYX1BBRCgweDVhMCwgMHgxYjgsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0NTSTFfRDE4X19DU0kxX0QxOAkJSU9NVVhfUEFEKDB4NWE0LCAweDFiYywgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfQ1NJMV9EMTlfX0NTSTFfRDE5CQlJT01VWF9QQUQoMHg1YTgsIDB4MWMwLCAwLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9DU0kxX1ZTWU5DX19DU0kxX1ZTWU5DCUlPTVVYX1BBRCgweDVhYywgMHgxYzQsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0NTSTFfVlNZTkNfX0dQSU8zXzE0CQlJT01VWF9QQUQoMHg1YWMsIDB4MWM0LCAzLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9DU0kxX0hTWU5DX19DU0kxX0hTWU5DCUlPTVVYX1BBRCgweDViMCwgMHgxYzgsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0NTSTFfSFNZTkNfX0dQSU8zXzE1CQlJT01VWF9QQUQoMHg1YjAsIDB4MWM4LCAzLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9DU0kxX1BJWENMS19fQ1NJMV9QSVhDTEsJSU9NVVhfUEFEKDB4NWI0LCAweDAwMCwgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfQ1NJMV9NQ0xLX19DU0kxX01DTEsJCUlPTVVYX1BBRCgweDViOCwgMHgwMDAsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0NTSTJfRDEyX19DU0kyX0QxMgkJSU9NVVhfUEFEKDB4NWJjLCAweDFjYywgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfQ1NJMl9EMTJfX0dQSU80XzkJCUlPTVVYX1BBRCgweDViYywgMHgxY2MsIDMsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0NTSTJfRDEzX19DU0kyX0QxMwkJSU9NVVhfUEFEKDB4NWMwLCAweDFkMCwgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfQ1NJMl9EMTNfX0dQSU80XzEwCQlJT01VWF9QQUQoMHg1YzAsIDB4MWQwLCAzLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9DU0kyX0QxNF9fQ1NJMl9EMTQJCUlPTVVYX1BBRCgweDVjNCwgMHgxZDQsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0NTSTJfRDE1X19DU0kyX0QxNQkJSU9NVVhfUEFEKDB4NWM4LCAweDFkOCwgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfQ1NJMl9EMTZfX0NTSTJfRDE2CQlJT01VWF9QQUQoMHg1Y2MsIDB4MWRjLCAwLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9DU0kyX0QxN19fQ1NJMl9EMTcJCUlPTVVYX1BBRCgweDVkMCwgMHgxZTAsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0NTSTJfRDE4X19DU0kyX0QxOAkJSU9NVVhfUEFEKDB4NWQ0LCAweDFlNCwgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfQ1NJMl9EMThfX0dQSU80XzExCQlJT01VWF9QQUQoMHg1ZDQsIDB4MWU0LCAzLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9DU0kyX0QxOV9fQ1NJMl9EMTkJCUlPTVVYX1BBRCgweDVkOCwgMHgxZTgsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0NTSTJfRDE5X19HUElPNF8xMgkJSU9NVVhfUEFEKDB4NWQ4LCAweDFlOCwgMywgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfQ1NJMl9WU1lOQ19fQ1NJMl9WU1lOQwlJT01VWF9QQUQoMHg1ZGMsIDB4MWVjLCAwLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9DU0kyX1ZTWU5DX19HUElPNF8xMwkJSU9NVVhfUEFEKDB4NWRjLCAweDFlYywgMywgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfQ1NJMl9IU1lOQ19fQ1NJMl9IU1lOQwlJT01VWF9QQUQoMHg1ZTAsIDB4MWYwLCAwLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9DU0kyX0hTWU5DX19HUElPNF8xNAkJSU9NVVhfUEFEKDB4NWUwLCAweDFmMCwgMywgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfQ1NJMl9QSVhDTEtfX0NTSTJfUElYQ0xLCUlPTVVYX1BBRCgweDVlNCwgMHgxZjQsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0NTSTJfUElYQ0xLX19HUElPNF8xNQkJSU9NVVhfUEFEKDB4NWU0LCAweDFmNCwgMywgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfSTJDMV9DTEtfX0dQSU80XzE2CQlJT01VWF9QQUQoMHg1ZTgsIDB4MWY4LCAzLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9JMkMxX0NMS19fSTJDMV9DTEsJCUlPTVVYX1BBRCgweDVlOCwgMHgxZjgsIDB4MTAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0kyQzFfREFUX19HUElPNF8xNwkJSU9NVVhfUEFEKDB4NWVjLCAweDFmYywgMywgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfSTJDMV9EQVRfX0kyQzFfREFUCQlJT01VWF9QQUQoMHg1ZWMsIDB4MWZjLCAweDEwLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9BVUQzX0JCX1RYRF9fQVVEM19UWEQJCUlPTVVYX1BBRCgweDVmMCwgMHgyMDAsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0FVRDNfQkJfVFhEX19HUElPNF8xOAkJSU9NVVhfUEFEKDB4NWYwLCAweDIwMCwgMywgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfQVVEM19CQl9SWERfX0FVRDNfUlhECQlJT01VWF9QQUQoMHg1ZjQsIDB4MjA0LCAwLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9BVUQzX0JCX1JYRF9fR1BJTzRfMTkJCUlPTVVYX1BBRCgweDVmNCwgMHgyMDQsIDMsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0FVRDNfQkJfUlhEX19VQVJUM19SWEQJSU9NVVhfUEFEKDB4NWY0LCAweDIwNCwgMSwgMHgwOWY0LCAyLCAwKQorI2RlZmluZSBfTVg1MV9QQURfQVVEM19CQl9DS19fQVVEM19UWEMJCUlPTVVYX1BBRCgweDVmOCwgMHgyMDgsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0FVRDNfQkJfQ0tfX0dQSU80XzIwCQlJT01VWF9QQUQoMHg1ZjgsIDB4MjA4LCAzLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9BVUQzX0JCX0ZTX19BVUQzX1RYRlMJCUlPTVVYX1BBRCgweDVmYywgMHgyMGMsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0FVRDNfQkJfRlNfX0dQSU80XzIxCQlJT01VWF9QQUQoMHg1ZmMsIDB4MjBjLCAzLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9BVUQzX0JCX0ZTX19VQVJUM19UWEQJCUlPTVVYX1BBRCgweDVmYywgMHgyMGMsIDEsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0NTUEkxX01PU0lfX0VDU1BJMV9NT1NJCUlPTVVYX1BBRCgweDYwMCwgMHgyMTAsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0NTUEkxX01PU0lfX0dQSU80XzIyCQlJT01VWF9QQUQoMHg2MDAsIDB4MjEwLCAzLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9DU1BJMV9NT1NJX19JMkMxX1NEQQkJSU9NVVhfUEFEKDB4NjAwLCAweDIxMCwgMHgxMSwgMHgwOWI0LCAxLCAwKQorI2RlZmluZSBfTVg1MV9QQURfQ1NQSTFfTUlTT19fQVVENF9SWEQJCUlPTVVYX1BBRCgweDYwNCwgMHgyMTQsIDEsIDB4MDhjNCwgMSwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0NTUEkxX01JU09fX0VDU1BJMV9NSVNPCUlPTVVYX1BBRCgweDYwNCwgMHgyMTQsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0NTUEkxX01JU09fX0dQSU80XzIzCQlJT01VWF9QQUQoMHg2MDQsIDB4MjE0LCAzLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9DU1BJMV9TUzBfX0FVRDRfVFhDCQlJT01VWF9QQUQoMHg2MDgsIDB4MjE4LCAxLCAweDA4Y2MsIDEsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9DU1BJMV9TUzBfX0VDU1BJMV9TUzAJCUlPTVVYX1BBRCgweDYwOCwgMHgyMTgsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0NTUEkxX1NTMF9fR1BJTzRfMjQJCUlPTVVYX1BBRCgweDYwOCwgMHgyMTgsIDMsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0NTUEkxX1NTMV9fQVVENF9UWEQJCUlPTVVYX1BBRCgweDYwYywgMHgyMWMsIDEsIDB4MDhjOCwgMSwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0NTUEkxX1NTMV9fRUNTUEkxX1NTMQkJSU9NVVhfUEFEKDB4NjBjLCAweDIxYywgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfQ1NQSTFfU1MxX19HUElPNF8yNQkJSU9NVVhfUEFEKDB4NjBjLCAweDIxYywgMywgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfQ1NQSTFfUkRZX19BVUQ0X1RYRlMJCUlPTVVYX1BBRCgweDYxMCwgMHgyMjAsIDEsIDB4MDhkMCwgMSwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0NTUEkxX1JEWV9fRUNTUEkxX1JEWQkJSU9NVVhfUEFEKDB4NjEwLCAweDIyMCwgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfQ1NQSTFfUkRZX19HUElPNF8yNgkJSU9NVVhfUEFEKDB4NjEwLCAweDIyMCwgMywgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfQ1NQSTFfU0NMS19fRUNTUEkxX1NDTEsJSU9NVVhfUEFEKDB4NjE0LCAweDIyNCwgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfQ1NQSTFfU0NMS19fR1BJTzRfMjcJCUlPTVVYX1BBRCgweDYxNCwgMHgyMjQsIDMsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0NTUEkxX1NDTEtfX0kyQzFfU0NMCQlJT01VWF9QQUQoMHg2MTQsIDB4MjI0LCAweDExLCAweDA5YjAsIDEsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9VQVJUMV9SWERfX0dQSU80XzI4CQlJT01VWF9QQUQoMHg2MTgsIDB4MjI4LCAzLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9VQVJUMV9SWERfX1VBUlQxX1JYRAkJSU9NVVhfUEFEKDB4NjE4LCAweDIyOCwgMCwgMHgwOWU0LCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfVUFSVDFfVFhEX19HUElPNF8yOQkJSU9NVVhfUEFEKDB4NjFjLCAweDIyYywgMywgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfVUFSVDFfVFhEX19QV00yX1BXTU8JCUlPTVVYX1BBRCgweDYxYywgMHgyMmMsIDEsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX1VBUlQxX1RYRF9fVUFSVDFfVFhECQlJT01VWF9QQUQoMHg2MWMsIDB4MjJjLCAwLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9VQVJUMV9SVFNfX0dQSU80XzMwCQlJT01VWF9QQUQoMHg2MjAsIDB4MjMwLCAzLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9VQVJUMV9SVFNfX1VBUlQxX1JUUwkJSU9NVVhfUEFEKDB4NjIwLCAweDIzMCwgMCwgMHgwOWUwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfVUFSVDFfQ1RTX19HUElPNF8zMQkJSU9NVVhfUEFEKDB4NjI0LCAweDIzNCwgMywgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfVUFSVDFfQ1RTX19VQVJUMV9DVFMJCUlPTVVYX1BBRCgweDYyNCwgMHgyMzQsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX1VBUlQyX1JYRF9fRklSSV9UWEQJCUlPTVVYX1BBRCgweDYyOCwgMHgyMzgsIDEsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX1VBUlQyX1JYRF9fR1BJTzFfMjAJCUlPTVVYX1BBRCgweDYyOCwgMHgyMzgsIDMsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX1VBUlQyX1JYRF9fVUFSVDJfUlhECQlJT01VWF9QQUQoMHg2MjgsIDB4MjM4LCAwLCAweDA5ZWMsIDIsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9VQVJUMl9UWERfX0ZJUklfUlhECQlJT01VWF9QQUQoMHg2MmMsIDB4MjNjLCAxLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9VQVJUMl9UWERfX0dQSU8xXzIxCQlJT01VWF9QQUQoMHg2MmMsIDB4MjNjLCAzLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9VQVJUMl9UWERfX1VBUlQyX1RYRAkJSU9NVVhfUEFEKDB4NjJjLCAweDIzYywgMCwgMHgwOWVjLCAzLCAwKQorI2RlZmluZSBfTVg1MV9QQURfVUFSVDNfUlhEX19DU0kxX0QwCQlJT01VWF9QQUQoMHg2MzAsIDB4MjQwLCAyLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9VQVJUM19SWERfX0dQSU8xXzIyCQlJT01VWF9QQUQoMHg2MzAsIDB4MjQwLCAzLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9VQVJUM19SWERfX1VBUlQxX0RUUgkJSU9NVVhfUEFEKDB4NjMwLCAweDI0MCwgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfVUFSVDNfUlhEX19VQVJUM19SWEQJCUlPTVVYX1BBRCgweDYzMCwgMHgyNDAsIDEsIDB4MDlmNCwgNCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX1VBUlQzX1RYRF9fQ1NJMV9EMQkJSU9NVVhfUEFEKDB4NjM0LCAweDI0NCwgMiwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfVUFSVDNfVFhEX19HUElPMV8yMwkJSU9NVVhfUEFEKDB4NjM0LCAweDI0NCwgMywgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfVUFSVDNfVFhEX19VQVJUMV9EU1IJCUlPTVVYX1BBRCgweDYzNCwgMHgyNDQsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX1VBUlQzX1RYRF9fVUFSVDNfVFhECQlJT01VWF9QQUQoMHg2MzQsIDB4MjQ0LCAxLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9PV0lSRV9MSU5FX19HUElPMV8yNAkJSU9NVVhfUEFEKDB4NjM4LCAweDI0OCwgMywgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfT1dJUkVfTElORV9fT1dJUkVfTElORQlJT01VWF9QQUQoMHg2MzgsIDB4MjQ4LCAwLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9PV0lSRV9MSU5FX19TUERJRl9PVVQJCUlPTVVYX1BBRCgweDYzOCwgMHgyNDgsIDYsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0tFWV9ST1cwX19LRVlfUk9XMAkJSU9NVVhfUEFEKDB4NjNjLCAweDI0YywgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfS0VZX1JPVzFfX0tFWV9ST1cxCQlJT01VWF9QQUQoMHg2NDAsIDB4MjUwLCAwLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9LRVlfUk9XMl9fS0VZX1JPVzIJCUlPTVVYX1BBRCgweDY0NCwgMHgyNTQsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0tFWV9ST1czX19LRVlfUk9XMwkJSU9NVVhfUEFEKDB4NjQ4LCAweDI1OCwgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfS0VZX0NPTDBfX0tFWV9DT0wwCQlJT01VWF9QQUQoMHg2NGMsIDB4MjVjLCAwLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9LRVlfQ09MMF9fUExMMV9CWVAJCUlPTVVYX1BBRCgweDY0YywgMHgyNWMsIDcsIDB4MDkwYywgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0tFWV9DT0wxX19LRVlfQ09MMQkJSU9NVVhfUEFEKDB4NjUwLCAweDI2MCwgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfS0VZX0NPTDFfX1BMTDJfQllQCQlJT01VWF9QQUQoMHg2NTAsIDB4MjYwLCA3LCAweDA5MTAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9LRVlfQ09MMl9fS0VZX0NPTDIJCUlPTVVYX1BBRCgweDY1NCwgMHgyNjQsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0tFWV9DT0wyX19QTEwzX0JZUAkJSU9NVVhfUEFEKDB4NjU0LCAweDI2NCwgNywgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfS0VZX0NPTDNfX0tFWV9DT0wzCQlJT01VWF9QQUQoMHg2NTgsIDB4MjY4LCAwLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9LRVlfQ09MNF9fSTJDMl9TQ0wJCUlPTVVYX1BBRCgweDY1YywgMHgyNmMsIDB4MTMsIDB4MDliOCwgMSwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0tFWV9DT0w0X19LRVlfQ09MNAkJSU9NVVhfUEFEKDB4NjVjLCAweDI2YywgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfS0VZX0NPTDRfX1NQRElGX09VVDEJCUlPTVVYX1BBRCgweDY1YywgMHgyNmMsIDYsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0tFWV9DT0w0X19VQVJUMV9SSQkJSU9NVVhfUEFEKDB4NjVjLCAweDI2YywgMSwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfS0VZX0NPTDRfX1VBUlQzX1JUUwkJSU9NVVhfUEFEKDB4NjVjLCAweDI2YywgMiwgMHgwOWYwLCA0LCAwKQorI2RlZmluZSBfTVg1MV9QQURfS0VZX0NPTDVfX0kyQzJfU0RBCQlJT01VWF9QQUQoMHg2NjAsIDB4MjcwLCAweDEzLCAweDA5YmMsIDEsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9LRVlfQ09MNV9fS0VZX0NPTDUJCUlPTVVYX1BBRCgweDY2MCwgMHgyNzAsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0tFWV9DT0w1X19VQVJUMV9EQ0QJCUlPTVVYX1BBRCgweDY2MCwgMHgyNzAsIDEsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0tFWV9DT0w1X19VQVJUM19DVFMJCUlPTVVYX1BBRCgweDY2MCwgMHgyNzAsIDIsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX1VTQkgxX0NMS19fQ1NQSV9TQ0xLCQlJT01VWF9QQUQoMHg2NzgsIDB4Mjc4LCAxLCAweDA5MTQsIDEsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9VU0JIMV9DTEtfX0dQSU8xXzI1CQlJT01VWF9QQUQoMHg2NzgsIDB4Mjc4LCAyLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9VU0JIMV9DTEtfX0kyQzJfU0NMCQlJT01VWF9QQUQoMHg2NzgsIDB4Mjc4LCAweDE1LCAweDA5YjgsIDIsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9VU0JIMV9DTEtfX1VTQkgxX0NMSwkJSU9NVVhfUEFEKDB4Njc4LCAweDI3OCwgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfVVNCSDFfRElSX19DU1BJX01PU0kJCUlPTVVYX1BBRCgweDY3YywgMHgyN2MsIDEsIDB4MDkxYywgMSwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX1VTQkgxX0RJUl9fR1BJTzFfMjYJCUlPTVVYX1BBRCgweDY3YywgMHgyN2MsIDIsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX1VTQkgxX0RJUl9fSTJDMl9TREEJCUlPTVVYX1BBRCgweDY3YywgMHgyN2MsIDB4MTUsIDB4MDliYywgMiwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX1VTQkgxX0RJUl9fVVNCSDFfRElSCQlJT01VWF9QQUQoMHg2N2MsIDB4MjdjLCAwLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9VU0JIMV9TVFBfX0NTUElfUkRZCQlJT01VWF9QQUQoMHg2ODAsIDB4MjgwLCAxLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9VU0JIMV9TVFBfX0dQSU8xXzI3CQlJT01VWF9QQUQoMHg2ODAsIDB4MjgwLCAyLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9VU0JIMV9TVFBfX1VBUlQzX1JYRAkJSU9NVVhfUEFEKDB4NjgwLCAweDI4MCwgNSwgMHgwOWY0LCA2LCAwKQorI2RlZmluZSBfTVg1MV9QQURfVVNCSDFfU1RQX19VU0JIMV9TVFAJCUlPTVVYX1BBRCgweDY4MCwgMHgyODAsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX1VTQkgxX05YVF9fQ1NQSV9NSVNPCQlJT01VWF9QQUQoMHg2ODQsIDB4Mjg0LCAxLCAweDA5MTgsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9VU0JIMV9OWFRfX0dQSU8xXzI4CQlJT01VWF9QQUQoMHg2ODQsIDB4Mjg0LCAyLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9VU0JIMV9OWFRfX1VBUlQzX1RYRAkJSU9NVVhfUEFEKDB4Njg0LCAweDI4NCwgNSwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfVVNCSDFfTlhUX19VU0JIMV9OWFQJCUlPTVVYX1BBRCgweDY4NCwgMHgyODQsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX1VTQkgxX0RBVEEwX19HUElPMV8xMQkJSU9NVVhfUEFEKDB4Njg4LCAweDI4OCwgMiwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfVVNCSDFfREFUQTBfX1VBUlQyX0NUUwlJT01VWF9QQUQoMHg2ODgsIDB4Mjg4LCAxLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9VU0JIMV9EQVRBMF9fVVNCSDFfREFUQTAJSU9NVVhfUEFEKDB4Njg4LCAweDI4OCwgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfVVNCSDFfREFUQTFfX0dQSU8xXzEyCQlJT01VWF9QQUQoMHg2OGMsIDB4MjhjLCAyLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9VU0JIMV9EQVRBMV9fVUFSVDJfUlhECUlPTVVYX1BBRCgweDY4YywgMHgyOGMsIDEsIDB4MDllYywgNCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX1VTQkgxX0RBVEExX19VU0JIMV9EQVRBMQlJT01VWF9QQUQoMHg2OGMsIDB4MjhjLCAwLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9VU0JIMV9EQVRBMl9fR1BJTzFfMTMJCUlPTVVYX1BBRCgweDY5MCwgMHgyOTAsIDIsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX1VTQkgxX0RBVEEyX19VQVJUMl9UWEQJSU9NVVhfUEFEKDB4NjkwLCAweDI5MCwgMSwgMHgwOWVjLCA1LCAwKQorI2RlZmluZSBfTVg1MV9QQURfVVNCSDFfREFUQTJfX1VTQkgxX0RBVEEyCUlPTVVYX1BBRCgweDY5MCwgMHgyOTAsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX1VTQkgxX0RBVEEzX19HUElPMV8xNAkJSU9NVVhfUEFEKDB4Njk0LCAweDI5NCwgMiwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfVVNCSDFfREFUQTNfX1VBUlQyX1JUUwlJT01VWF9QQUQoMHg2OTQsIDB4Mjk0LCAxLCAweDA5ZTgsIDUsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9VU0JIMV9EQVRBM19fVVNCSDFfREFUQTMJSU9NVVhfUEFEKDB4Njk0LCAweDI5NCwgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfVVNCSDFfREFUQTRfX0NTUElfU1MwCQlJT01VWF9QQUQoMHg2OTgsIDB4Mjk4LCAxLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9VU0JIMV9EQVRBNF9fR1BJTzFfMTUJCUlPTVVYX1BBRCgweDY5OCwgMHgyOTgsIDIsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX1VTQkgxX0RBVEE0X19VU0JIMV9EQVRBNAlJT01VWF9QQUQoMHg2OTgsIDB4Mjk4LCAwLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9VU0JIMV9EQVRBNV9fQ1NQSV9TUzEJCUlPTVVYX1BBRCgweDY5YywgMHgyOWMsIDEsIDB4MDkyMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX1VTQkgxX0RBVEE1X19HUElPMV8xNgkJSU9NVVhfUEFEKDB4NjljLCAweDI5YywgMiwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfVVNCSDFfREFUQTVfX1VTQkgxX0RBVEE1CUlPTVVYX1BBRCgweDY5YywgMHgyOWMsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX1VTQkgxX0RBVEE2X19DU1BJX1NTMwkJSU9NVVhfUEFEKDB4NmEwLCAweDJhMCwgMSwgMHgwOTI4LCAxLCAwKQorI2RlZmluZSBfTVg1MV9QQURfVVNCSDFfREFUQTZfX0dQSU8xXzE3CQlJT01VWF9QQUQoMHg2YTAsIDB4MmEwLCAyLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9VU0JIMV9EQVRBNl9fVVNCSDFfREFUQTYJSU9NVVhfUEFEKDB4NmEwLCAweDJhMCwgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfVVNCSDFfREFUQTdfX0VDU1BJMV9TUzMJSU9NVVhfUEFEKDB4NmE0LCAweDJhNCwgMSwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfVVNCSDFfREFUQTdfX0VDU1BJMl9TUzMJSU9NVVhfUEFEKDB4NmE0LCAweDJhNCwgNSwgMHgwOTM0LCAxLCAwKQorI2RlZmluZSBfTVg1MV9QQURfVVNCSDFfREFUQTdfX0dQSU8xXzE4CQlJT01VWF9QQUQoMHg2YTQsIDB4MmE0LCAyLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9VU0JIMV9EQVRBN19fVVNCSDFfREFUQTcJSU9NVVhfUEFEKDB4NmE0LCAweDJhNCwgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfREkxX1BJTjExX19ESTFfUElOMTEJCUlPTVVYX1BBRCgweDZhOCwgMHgyYTgsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0RJMV9QSU4xMV9fRUNTUEkxX1NTMgkJSU9NVVhfUEFEKDB4NmE4LCAweDJhOCwgNywgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfREkxX1BJTjExX19HUElPM18wCQlJT01VWF9QQUQoMHg2YTgsIDB4MmE4LCA0LCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9ESTFfUElOMTJfX0RJMV9QSU4xMgkJSU9NVVhfUEFEKDB4NmFjLCAweDJhYywgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfREkxX1BJTjEyX19HUElPM18xCQlJT01VWF9QQUQoMHg2YWMsIDB4MmFjLCA0LCAweDA5NzgsIDEsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9ESTFfUElOMTNfX0RJMV9QSU4xMwkJSU9NVVhfUEFEKDB4NmIwLCAweDJiMCwgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfREkxX1BJTjEzX19HUElPM18yCQlJT01VWF9QQUQoMHg2YjAsIDB4MmIwLCA0LCAweDA5N2MsIDEsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9ESTFfRDBfQ1NfX0RJMV9EMF9DUwkJSU9NVVhfUEFEKDB4NmI0LCAweDJiNCwgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfREkxX0QwX0NTX19HUElPM18zCQlJT01VWF9QQUQoMHg2YjQsIDB4MmI0LCA0LCAweDA5ODAsIDEsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9ESTFfRDFfQ1NfX0RJMV9EMV9DUwkJSU9NVVhfUEFEKDB4NmI4LCAweDJiOCwgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfREkxX0QxX0NTX19ESVNQMV9QSU4xNAlJT01VWF9QQUQoMHg2YjgsIDB4MmI4LCAyLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9ESTFfRDFfQ1NfX0RJU1AxX1BJTjUJCUlPTVVYX1BBRCgweDZiOCwgMHgyYjgsIDMsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0RJMV9EMV9DU19fR1BJTzNfNAkJSU9NVVhfUEFEKDB4NmI4LCAweDJiOCwgNCwgMHgwOTg0LCAxLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRElTUEIyX1NFUl9ESU5fX0RJU1AxX1BJTjEJSU9NVVhfUEFEKDB4NmJjLCAweDJiYywgMiwgMHgwOWE0LCAxLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRElTUEIyX1NFUl9ESU5fX0RJU1BCMl9TRVJfRElOCUlPTVVYX1BBRCgweDZiYywgMHgyYmMsIDAsIDB4MDljNCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0RJU1BCMl9TRVJfRElOX19HUElPM181CUlPTVVYX1BBRCgweDZiYywgMHgyYmMsIDQsIDB4MDk4OCwgMSwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0RJU1BCMl9TRVJfRElPX19ESVNQMV9QSU42CUlPTVVYX1BBRCgweDZjMCwgMHgyYzAsIDMsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0RJU1BCMl9TRVJfRElPX19ESVNQQjJfU0VSX0RJTwlJT01VWF9QQUQoMHg2YzAsIDB4MmMwLCAwLCAweDA5YzQsIDEsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9ESVNQQjJfU0VSX0RJT19fR1BJTzNfNglJT01VWF9QQUQoMHg2YzAsIDB4MmMwLCA0LCAweDA5OGMsIDEsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9ESVNQQjJfU0VSX0NMS19fRElTUDFfUElOMTcJSU9NVVhfUEFEKDB4NmM0LCAweDJjNCwgMiwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRElTUEIyX1NFUl9DTEtfX0RJU1AxX1BJTjcJSU9NVVhfUEFEKDB4NmM0LCAweDJjNCwgMywgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRElTUEIyX1NFUl9DTEtfX0RJU1BCMl9TRVJfQ0xLCUlPTVVYX1BBRCgweDZjNCwgMHgyYzQsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0RJU1BCMl9TRVJfQ0xLX19HUElPM183CUlPTVVYX1BBRCgweDZjNCwgMHgyYzQsIDQsIDB4MDk5MCwgMSwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0RJU1BCMl9TRVJfUlNfX0RJU1AxX0VYVF9DTEsJSU9NVVhfUEFEKDB4NmM4LCAweDJjOCwgMiwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRElTUEIyX1NFUl9SU19fRElTUDFfUElOMTYJSU9NVVhfUEFEKDB4NmM4LCAweDJjOCwgMiwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRElTUEIyX1NFUl9SU19fRElTUDFfUElOOAlJT01VWF9QQUQoMHg2YzgsIDB4MmM4LCAzLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9ESVNQQjJfU0VSX1JTX19ESVNQQjJfU0VSX1JTCUlPTVVYX1BBRCgweDZjOCwgMHgyYzgsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0RJU1BCMl9TRVJfUlNfX0RJU1BCMl9TRVJfUlMJSU9NVVhfUEFEKDB4NmM4LCAweDJjOCwgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRElTUEIyX1NFUl9SU19fR1BJTzNfOAlJT01VWF9QQUQoMHg2YzgsIDB4MmM4LCA0LCAweDA5OTQsIDEsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9ESVNQMV9EQVQwX19ESVNQMV9EQVQwCUlPTVVYX1BBRCgweDZjYywgMHgyY2MsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0RJU1AxX0RBVDFfX0RJU1AxX0RBVDEJSU9NVVhfUEFEKDB4NmQwLCAweDJkMCwgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRElTUDFfREFUMl9fRElTUDFfREFUMglJT01VWF9QQUQoMHg2ZDQsIDB4MmQ0LCAwLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9ESVNQMV9EQVQzX19ESVNQMV9EQVQzCUlPTVVYX1BBRCgweDZkOCwgMHgyZDgsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0RJU1AxX0RBVDRfX0RJU1AxX0RBVDQJSU9NVVhfUEFEKDB4NmRjLCAweDJkYywgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRElTUDFfREFUNV9fRElTUDFfREFUNQlJT01VWF9QQUQoMHg2ZTAsIDB4MmUwLCAwLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9ESVNQMV9EQVQ2X19CT09UX1VTQl9TUkMJSU9NVVhfUEFEKDB4NmU0LCAweDJlNCwgNywgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRElTUDFfREFUNl9fRElTUDFfREFUNglJT01VWF9QQUQoMHg2ZTQsIDB4MmU0LCAwLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9ESVNQMV9EQVQ3X19CT09UX0VFUFJPTV9DRkcJSU9NVVhfUEFEKDB4NmU4LCAweDJlOCwgNywgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRElTUDFfREFUN19fRElTUDFfREFUNwlJT01VWF9QQUQoMHg2ZTgsIDB4MmU4LCAwLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9ESVNQMV9EQVQ4X19CT09UX1NSQzAJCUlPTVVYX1BBRCgweDZlYywgMHgyZWMsIDcsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0RJU1AxX0RBVDhfX0RJU1AxX0RBVDgJSU9NVVhfUEFEKDB4NmVjLCAweDJlYywgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRElTUDFfREFUOV9fQk9PVF9TUkMxCQlJT01VWF9QQUQoMHg2ZjAsIDB4MmYwLCA3LCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9ESVNQMV9EQVQ5X19ESVNQMV9EQVQ5CUlPTVVYX1BBRCgweDZmMCwgMHgyZjAsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0RJU1AxX0RBVDEwX19CT09UX1NQQVJFX1NJWkUJSU9NVVhfUEFEKDB4NmY0LCAweDJmNCwgNywgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRElTUDFfREFUMTBfX0RJU1AxX0RBVDEwCUlPTVVYX1BBRCgweDZmNCwgMHgyZjQsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0RJU1AxX0RBVDExX19CT09UX0xQQl9GUkVRMglJT01VWF9QQUQoMHg2ZjgsIDB4MmY4LCA3LCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9ESVNQMV9EQVQxMV9fRElTUDFfREFUMTEJSU9NVVhfUEFEKDB4NmY4LCAweDJmOCwgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRElTUDFfREFUMTJfX0JPT1RfTUxDX1NFTAlJT01VWF9QQUQoMHg2ZmMsIDB4MmZjLCA3LCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9ESVNQMV9EQVQxMl9fRElTUDFfREFUMTIJSU9NVVhfUEFEKDB4NmZjLCAweDJmYywgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRElTUDFfREFUMTNfX0JPT1RfTUVNX0NUTDAJSU9NVVhfUEFEKDB4NzAwLCAweDMwMCwgNywgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRElTUDFfREFUMTNfX0RJU1AxX0RBVDEzCUlPTVVYX1BBRCgweDcwMCwgMHgzMDAsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0RJU1AxX0RBVDE0X19CT09UX01FTV9DVEwxCUlPTVVYX1BBRCgweDcwNCwgMHgzMDQsIDcsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0RJU1AxX0RBVDE0X19ESVNQMV9EQVQxNAlJT01VWF9QQUQoMHg3MDQsIDB4MzA0LCAwLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9ESVNQMV9EQVQxNV9fQk9PVF9CVVNfV0lEVEgJSU9NVVhfUEFEKDB4NzA4LCAweDMwOCwgNywgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRElTUDFfREFUMTVfX0RJU1AxX0RBVDE1CUlPTVVYX1BBRCgweDcwOCwgMHgzMDgsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0RJU1AxX0RBVDE2X19CT09UX1BBR0VfU0laRTAJSU9NVVhfUEFEKDB4NzBjLCAweDMwYywgNywgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRElTUDFfREFUMTZfX0RJU1AxX0RBVDE2CUlPTVVYX1BBRCgweDcwYywgMHgzMGMsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0RJU1AxX0RBVDE3X19CT09UX1BBR0VfU0laRTEJSU9NVVhfUEFEKDB4NzEwLCAweDMxMCwgNywgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRElTUDFfREFUMTdfX0RJU1AxX0RBVDE3CUlPTVVYX1BBRCgweDcxMCwgMHgzMTAsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0RJU1AxX0RBVDE4X19CT09UX1dFSU1fTVVYRUQwCUlPTVVYX1BBRCgweDcxNCwgMHgzMTQsIDcsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0RJU1AxX0RBVDE4X19ESVNQMV9EQVQxOAlJT01VWF9QQUQoMHg3MTQsIDB4MzE0LCAwLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9ESVNQMV9EQVQxOF9fRElTUDJfUElOMTEJSU9NVVhfUEFEKDB4NzE0LCAweDMxNCwgNSwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRElTUDFfREFUMThfX0RJU1AyX1BJTjUJSU9NVVhfUEFEKDB4NzE0LCAweDMxNCwgNCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRElTUDFfREFUMTlfX0JPT1RfV0VJTV9NVVhFRDEJSU9NVVhfUEFEKDB4NzE4LCAweDMxOCwgNywgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRElTUDFfREFUMTlfX0RJU1AxX0RBVDE5CUlPTVVYX1BBRCgweDcxOCwgMHgzMTgsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0RJU1AxX0RBVDE5X19ESVNQMl9QSU4xMglJT01VWF9QQUQoMHg3MTgsIDB4MzE4LCA1LCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9ESVNQMV9EQVQxOV9fRElTUDJfUElONglJT01VWF9QQUQoMHg3MTgsIDB4MzE4LCA0LCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9ESVNQMV9EQVQyMF9fQk9PVF9NRU1fVFlQRTAJSU9NVVhfUEFEKDB4NzFjLCAweDMxYywgNywgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRElTUDFfREFUMjBfX0RJU1AxX0RBVDIwCUlPTVVYX1BBRCgweDcxYywgMHgzMWMsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0RJU1AxX0RBVDIwX19ESVNQMl9QSU4xMwlJT01VWF9QQUQoMHg3MWMsIDB4MzFjLCA1LCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9ESVNQMV9EQVQyMF9fRElTUDJfUElONwlJT01VWF9QQUQoMHg3MWMsIDB4MzFjLCA0LCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9ESVNQMV9EQVQyMV9fQk9PVF9NRU1fVFlQRTEJSU9NVVhfUEFEKDB4NzIwLCAweDMyMCwgNywgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRElTUDFfREFUMjFfX0RJU1AxX0RBVDIxCUlPTVVYX1BBRCgweDcyMCwgMHgzMjAsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0RJU1AxX0RBVDIxX19ESVNQMl9QSU4xNAlJT01VWF9QQUQoMHg3MjAsIDB4MzIwLCA1LCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9ESVNQMV9EQVQyMV9fRElTUDJfUElOOAlJT01VWF9QQUQoMHg3MjAsIDB4MzIwLCA0LCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9ESVNQMV9EQVQyMl9fQk9PVF9MUEJfRlJFUTAJSU9NVVhfUEFEKDB4NzI0LCAweDMyNCwgNywgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRElTUDFfREFUMjJfX0RJU1AxX0RBVDIyCUlPTVVYX1BBRCgweDcyNCwgMHgzMjQsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0RJU1AxX0RBVDIyX19ESVNQMl9EMF9DUwlJT01VWF9QQUQoMHg3MjQsIDB4MzI0LCA2LCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9ESVNQMV9EQVQyMl9fRElTUDJfREFUMTYJSU9NVVhfUEFEKDB4NzI0LCAweDMyNCwgNSwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRElTUDFfREFUMjNfX0JPT1RfTFBCX0ZSRVExCUlPTVVYX1BBRCgweDcyOCwgMHgzMjgsIDcsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0RJU1AxX0RBVDIzX19ESVNQMV9EQVQyMwlJT01VWF9QQUQoMHg3MjgsIDB4MzI4LCAwLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9ESVNQMV9EQVQyM19fRElTUDJfRDFfQ1MJSU9NVVhfUEFEKDB4NzI4LCAweDMyOCwgNiwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRElTUDFfREFUMjNfX0RJU1AyX0RBVDE3CUlPTVVYX1BBRCgweDcyOCwgMHgzMjgsIDUsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0RJU1AxX0RBVDIzX19ESVNQMl9TRVJfQ1MJSU9NVVhfUEFEKDB4NzI4LCAweDMyOCwgNCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfREkxX1BJTjNfX0RJMV9QSU4zCQlJT01VWF9QQUQoMHg3MmMsIDB4MzJjLCAwLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9ESTFfUElOMl9fREkxX1BJTjIJCUlPTVVYX1BBRCgweDczNCwgMHgzMzAsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0RJX0dQMl9fRElTUDFfU0VSX0NMSwkJSU9NVVhfUEFEKDB4NzQwLCAweDMzOCwgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRElfR1AyX19ESVNQMl9XQUlUCQlJT01VWF9QQUQoMHg3NDAsIDB4MzM4LCAyLCAweDA5YTgsIDEsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9ESV9HUDNfX0NTSTFfREFUQV9FTgkJSU9NVVhfUEFEKDB4NzQ0LCAweDMzYywgMywgMHgwOWEwLCAxLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRElfR1AzX19ESVNQMV9TRVJfRElPCQlJT01VWF9QQUQoMHg3NDQsIDB4MzNjLCAwLCAweDA5YzAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9ESV9HUDNfX0ZFQ19UWF9FUgkJSU9NVVhfUEFEKDB4NzQ0LCAweDMzYywgMiwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfREkyX1BJTjRfX0NTSTJfREFUQV9FTglJT01VWF9QQUQoMHg3NDgsIDB4MzQwLCAzLCAweDA5OWMsIDEsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9ESTJfUElONF9fREkyX1BJTjQJCUlPTVVYX1BBRCgweDc0OCwgMHgzNDAsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0RJMl9QSU40X19GRUNfQ1JTCQlJT01VWF9QQUQoMHg3NDgsIDB4MzQwLCAyLCAweDA5NTAsIDEsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9ESTJfUElOMl9fREkyX1BJTjIJCUlPTVVYX1BBRCgweDc0YywgMHgzNDQsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0RJMl9QSU4yX19GRUNfTURDCQlJT01VWF9QQUQoMHg3NGMsIDB4MzQ0LCAyLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9ESTJfUElOM19fREkyX1BJTjMJCUlPTVVYX1BBRCgweDc1MCwgMHgzNDgsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0RJMl9QSU4zX19GRUNfTURJTwkJSU9NVVhfUEFEKDB4NzUwLCAweDM0OCwgMiwgMHgwOTU0LCAxLCAwKQorI2RlZmluZSBfTVg1MV9QQURfREkyX0RJU1BfQ0xLX19ESTJfRElTUF9DTEsJSU9NVVhfUEFEKDB4NzU0LCAweDM0YywgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfREkyX0RJU1BfQ0xLX19GRUNfUkRBVEExCUlPTVVYX1BBRCgweDc1NCwgMHgzNGMsIDIsIDB4MDk1YywgMSwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0RJX0dQNF9fREkyX1BJTjE1CQlJT01VWF9QQUQoMHg3NTgsIDB4MzUwLCA0LCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9ESV9HUDRfX0RJU1AxX1NFUl9ESU4JCUlPTVVYX1BBRCgweDc1OCwgMHgzNTAsIDAsIDB4MDljMCwgMSwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0RJX0dQNF9fRElTUDJfUElOMQkJSU9NVVhfUEFEKDB4NzU4LCAweDM1MCwgMywgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRElfR1A0X19GRUNfUkRBVEEyCQlJT01VWF9QQUQoMHg3NTgsIDB4MzUwLCAyLCAweDA5NjAsIDEsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9ESVNQMl9EQVQwX19ESVNQMl9EQVQwCUlPTVVYX1BBRCgweDc1YywgMHgzNTQsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0RJU1AyX0RBVDBfX0ZFQ19SREFUQTMJSU9NVVhfUEFEKDB4NzVjLCAweDM1NCwgMiwgMHgwOTY0LCAxLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRElTUDJfREFUMF9fS0VZX0NPTDYJCUlPTVVYX1BBRCgweDc1YywgMHgzNTQsIDQsIDB4MDljOCwgMSwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0RJU1AyX0RBVDBfX1VBUlQzX1JYRAkJSU9NVVhfUEFEKDB4NzVjLCAweDM1NCwgNSwgMHgwOWY0LCA4LCAwKQorI2RlZmluZSBfTVg1MV9QQURfRElTUDJfREFUMF9fVVNCSDNfQ0xLCQlJT01VWF9QQUQoMHg3NWMsIDB4MzU0LCAzLCAweDA5ZjgsIDEsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9ESVNQMl9EQVQxX19ESVNQMl9EQVQxCUlPTVVYX1BBRCgweDc2MCwgMHgzNTgsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0RJU1AyX0RBVDFfX0ZFQ19SWF9FUgkJSU9NVVhfUEFEKDB4NzYwLCAweDM1OCwgMiwgMHgwOTcwLCAxLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRElTUDJfREFUMV9fS0VZX0NPTDcJCUlPTVVYX1BBRCgweDc2MCwgMHgzNTgsIDQsIDB4MDljYywgMSwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0RJU1AyX0RBVDFfX1VBUlQzX1RYRAkJSU9NVVhfUEFEKDB4NzYwLCAweDM1OCwgNSwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRElTUDJfREFUMV9fVVNCSDNfRElSCQlJT01VWF9QQUQoMHg3NjAsIDB4MzU4LCAzLCAweDBhMWMsIDEsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9ESVNQMl9EQVQyX19ESVNQMl9EQVQyCUlPTVVYX1BBRCgweDc2NCwgMHgzNWMsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0RJU1AyX0RBVDNfX0RJU1AyX0RBVDMJSU9NVVhfUEFEKDB4NzY4LCAweDM2MCwgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRElTUDJfREFUNF9fRElTUDJfREFUNAlJT01VWF9QQUQoMHg3NmMsIDB4MzY0LCAwLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9ESVNQMl9EQVQ1X19ESVNQMl9EQVQ1CUlPTVVYX1BBRCgweDc3MCwgMHgzNjgsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0RJU1AyX0RBVDZfX0RJU1AyX0RBVDYJSU9NVVhfUEFEKDB4Nzc0LCAweDM2YywgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRElTUDJfREFUNl9fRkVDX1REQVRBMQlJT01VWF9QQUQoMHg3NzQsIDB4MzZjLCAyLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9ESVNQMl9EQVQ2X19HUElPMV8xOQkJSU9NVVhfUEFEKDB4Nzc0LCAweDM2YywgNSwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRElTUDJfREFUNl9fS0VZX1JPVzQJCUlPTVVYX1BBRCgweDc3NCwgMHgzNmMsIDQsIDB4MDlkMCwgMSwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0RJU1AyX0RBVDZfX1VTQkgzX1NUUAkJSU9NVVhfUEFEKDB4Nzc0LCAweDM2YywgMywgMHgwYTI0LCAxLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRElTUDJfREFUN19fRElTUDJfREFUNwlJT01VWF9QQUQoMHg3NzgsIDB4MzcwLCAwLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9ESVNQMl9EQVQ3X19GRUNfVERBVEEyCUlPTVVYX1BBRCgweDc3OCwgMHgzNzAsIDIsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0RJU1AyX0RBVDdfX0dQSU8xXzI5CQlJT01VWF9QQUQoMHg3NzgsIDB4MzcwLCA1LCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9ESVNQMl9EQVQ3X19LRVlfUk9XNQkJSU9NVVhfUEFEKDB4Nzc4LCAweDM3MCwgNCwgMHgwOWQ0LCAxLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRElTUDJfREFUN19fVVNCSDNfTlhUCQlJT01VWF9QQUQoMHg3NzgsIDB4MzcwLCAzLCAweDBhMjAsIDEsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9ESVNQMl9EQVQ4X19ESVNQMl9EQVQ4CUlPTVVYX1BBRCgweDc3YywgMHgzNzQsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0RJU1AyX0RBVDhfX0ZFQ19UREFUQTMJSU9NVVhfUEFEKDB4NzdjLCAweDM3NCwgMiwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRElTUDJfREFUOF9fR1BJTzFfMzAJCUlPTVVYX1BBRCgweDc3YywgMHgzNzQsIDUsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0RJU1AyX0RBVDhfX0tFWV9ST1c2CQlJT01VWF9QQUQoMHg3N2MsIDB4Mzc0LCA0LCAweDA5ZDgsIDEsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9ESVNQMl9EQVQ4X19VU0JIM19EQVRBMAlJT01VWF9QQUQoMHg3N2MsIDB4Mzc0LCAzLCAweDA5ZmMsIDEsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9ESVNQMl9EQVQ5X19BVUQ2X1JYQwkJSU9NVVhfUEFEKDB4NzgwLCAweDM3OCwgNCwgMHgwOGY0LCAxLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRElTUDJfREFUOV9fRElTUDJfREFUOQlJT01VWF9QQUQoMHg3ODAsIDB4Mzc4LCAwLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9ESVNQMl9EQVQ5X19GRUNfVFhfRU4JCUlPTVVYX1BBRCgweDc4MCwgMHgzNzgsIDIsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0RJU1AyX0RBVDlfX0dQSU8xXzMxCQlJT01VWF9QQUQoMHg3ODAsIDB4Mzc4LCA1LCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9ESVNQMl9EQVQ5X19VU0JIM19EQVRBMQlJT01VWF9QQUQoMHg3ODAsIDB4Mzc4LCAzLCAweDBhMDAsIDEsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9ESVNQMl9EQVQxMF9fRElTUDJfREFUMTAJSU9NVVhfUEFEKDB4Nzg0LCAweDM3YywgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRElTUDJfREFUMTBfX0RJU1AyX1NFUl9DUwlJT01VWF9QQUQoMHg3ODQsIDB4MzdjLCA1LCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9ESVNQMl9EQVQxMF9fRkVDX0NPTAkJSU9NVVhfUEFEKDB4Nzg0LCAweDM3YywgMiwgMHgwOTRjLCAxLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRElTUDJfREFUMTBfX0tFWV9ST1c3CQlJT01VWF9QQUQoMHg3ODQsIDB4MzdjLCA0LCAweDA5ZGMsIDEsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9ESVNQMl9EQVQxMF9fVVNCSDNfREFUQTIJSU9NVVhfUEFEKDB4Nzg0LCAweDM3YywgMywgMHgwYTA0LCAxLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRElTUDJfREFUMTFfX0FVRDZfVFhECQlJT01VWF9QQUQoMHg3ODgsIDB4MzgwLCA0LCAweDA4ZjAsIDEsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9ESVNQMl9EQVQxMV9fRElTUDJfREFUMTEJSU9NVVhfUEFEKDB4Nzg4LCAweDM4MCwgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRElTUDJfREFUMTFfX0ZFQ19SWF9DTEsJSU9NVVhfUEFEKDB4Nzg4LCAweDM4MCwgMiwgMHgwOTY4LCAxLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRElTUDJfREFUMTFfX0dQSU8xXzEwCQlJT01VWF9QQUQoMHg3ODgsIDB4MzgwLCA3LCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9ESVNQMl9EQVQxMV9fVVNCSDNfREFUQTMJSU9NVVhfUEFEKDB4Nzg4LCAweDM4MCwgMywgMHgwYTA4LCAxLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRElTUDJfREFUMTJfX0FVRDZfUlhECQlJT01VWF9QQUQoMHg3OGMsIDB4Mzg0LCA0LCAweDA4ZWMsIDEsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9ESVNQMl9EQVQxMl9fRElTUDJfREFUMTIJSU9NVVhfUEFEKDB4NzhjLCAweDM4NCwgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRElTUDJfREFUMTJfX0ZFQ19SWF9EVglJT01VWF9QQUQoMHg3OGMsIDB4Mzg0LCAyLCAweDA5NmMsIDEsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9ESVNQMl9EQVQxMl9fVVNCSDNfREFUQTQJSU9NVVhfUEFEKDB4NzhjLCAweDM4NCwgMywgMHgwYTBjLCAxLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRElTUDJfREFUMTNfX0FVRDZfVFhDCQlJT01VWF9QQUQoMHg3OTAsIDB4Mzg4LCA0LCAweDA4ZmMsIDEsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9ESVNQMl9EQVQxM19fRElTUDJfREFUMTMJSU9NVVhfUEFEKDB4NzkwLCAweDM4OCwgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRElTUDJfREFUMTNfX0ZFQ19UWF9DTEsJSU9NVVhfUEFEKDB4NzkwLCAweDM4OCwgMiwgMHgwOTc0LCAxLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRElTUDJfREFUMTNfX1VTQkgzX0RBVEE1CUlPTVVYX1BBRCgweDc5MCwgMHgzODgsIDMsIDB4MGExMCwgMSwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0RJU1AyX0RBVDE0X19BVUQ2X1RYRlMJSU9NVVhfUEFEKDB4Nzk0LCAweDM4YywgNCwgMHgwOTAwLCAxLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRElTUDJfREFUMTRfX0RJU1AyX0RBVDE0CUlPTVVYX1BBRCgweDc5NCwgMHgzOGMsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0RJU1AyX0RBVDE0X19GRUNfUkRBVEEwCUlPTVVYX1BBRCgweDc5NCwgMHgzOGMsIDIsIDB4MDk1OCwgMSwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0RJU1AyX0RBVDE0X19VU0JIM19EQVRBNglJT01VWF9QQUQoMHg3OTQsIDB4MzhjLCAzLCAweDBhMTQsIDEsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9ESVNQMl9EQVQxNV9fQVVENl9SWEZTCUlPTVVYX1BBRCgweDc5OCwgMHgzOTAsIDQsIDB4MDhmOCwgMSwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0RJU1AyX0RBVDE1X19ESVNQMV9TRVJfQ1MJSU9NVVhfUEFEKDB4Nzk4LCAweDM5MCwgNSwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRElTUDJfREFUMTVfX0RJU1AyX0RBVDE1CUlPTVVYX1BBRCgweDc5OCwgMHgzOTAsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0RJU1AyX0RBVDE1X19GRUNfVERBVEEwCUlPTVVYX1BBRCgweDc5OCwgMHgzOTAsIDIsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0RJU1AyX0RBVDE1X19VU0JIM19EQVRBNwlJT01VWF9QQUQoMHg3OTgsIDB4MzkwLCAzLCAweDBhMTgsIDEsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9TRDFfQ01EX19BVUQ1X1JYRlMJCUlPTVVYX1BBRCgweDc5YywgMHgzOTQsIDEsIDB4MDhlMCwgMSwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX1NEMV9DTURfX0NTUElfTU9TSQkJSU9NVVhfUEFEKDB4NzljLCAweDM5NCwgMiwgMHgwOTFjLCAyLCAwKQorI2RlZmluZSBfTVg1MV9QQURfU0QxX0NNRF9fU0QxX0NNRAkJSU9NVVhfUEFEKDB4NzljLCAweDM5NCwgMHgxMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfU0QxX0NMS19fQVVENV9SWEMJCUlPTVVYX1BBRCgweDdhMCwgMHgzOTgsIDEsIDB4MDhkYywgMSwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX1NEMV9DTEtfX0NTUElfU0NMSwkJSU9NVVhfUEFEKDB4N2EwLCAweDM5OCwgMiwgMHgwOTE0LCAyLCAwKQorI2RlZmluZSBfTVg1MV9QQURfU0QxX0NMS19fU0QxX0NMSwkJSU9NVVhfUEFEKDB4N2EwLCAweDM5OCwgMHgxMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfU0QxX0RBVEEwX19BVUQ1X1RYRAkJSU9NVVhfUEFEKDB4N2E0LCAweDM5YywgMSwgMHgwOGQ4LCAyLCAwKQorI2RlZmluZSBfTVg1MV9QQURfU0QxX0RBVEEwX19DU1BJX01JU08JCUlPTVVYX1BBRCgweDdhNCwgMHgzOWMsIDIsIDB4MDkxOCwgMSwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX1NEMV9EQVRBMF9fU0QxX0RBVEEwCQlJT01VWF9QQUQoMHg3YTQsIDB4MzljLCAweDEwLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fREEwX19FSU1fREEwCQlJT01VWF9QQUQoMHgwMDAsIDB4MDFjLCAwLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fREExX19FSU1fREExCQlJT01VWF9QQUQoMHgwMDAsIDB4MDIwLCAwLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fREEyX19FSU1fREEyCQlJT01VWF9QQUQoMHgwMDAsIDB4MDI0LCAwLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fREEzX19FSU1fREEzCQlJT01VWF9QQUQoMHgwMDAsIDB4MDI4LCAwLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9TRDFfREFUQTFfX0FVRDVfUlhECQlJT01VWF9QQUQoMHg3YTgsIDB4M2EwLCAxLCAweDA4ZDQsIDIsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9TRDFfREFUQTFfX1NEMV9EQVRBMQkJSU9NVVhfUEFEKDB4N2E4LCAweDNhMCwgMHgxMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRUlNX0RBNF9fRUlNX0RBNAkJSU9NVVhfUEFEKDB4MDAwLCAweDAyYywgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRUlNX0RBNV9fRUlNX0RBNQkJSU9NVVhfUEFEKDB4MDAwLCAweDAzMCwgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRUlNX0RBNl9fRUlNX0RBNgkJSU9NVVhfUEFEKDB4MDAwLCAweDAzNCwgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRUlNX0RBN19fRUlNX0RBNwkJSU9NVVhfUEFEKDB4MDAwLCAweDAzOCwgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfU0QxX0RBVEEyX19BVUQ1X1RYQwkJSU9NVVhfUEFEKDB4N2FjLCAweDNhNCwgMSwgMHgwOGU0LCAyLCAwKQorI2RlZmluZSBfTVg1MV9QQURfU0QxX0RBVEEyX19TRDFfREFUQTIJCUlPTVVYX1BBRCgweDdhYywgMHgzYTQsIDB4MTAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0VJTV9EQTEwX19FSU1fREExMAkJSU9NVVhfUEFEKDB4MDAwLCAweDA0NCwgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRUlNX0RBMTFfX0VJTV9EQTExCQlJT01VWF9QQUQoMHgwMDAsIDB4MDQ4LCAwLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fREE4X19FSU1fREE4CQlJT01VWF9QQUQoMHgwMDAsIDB4MDNjLCAwLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fREE5X19FSU1fREE5CQlJT01VWF9QQUQoMHgwMDAsIDB4MDQwLCAwLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9TRDFfREFUQTNfX0FVRDVfVFhGUwkJSU9NVVhfUEFEKDB4N2IwLCAweDNhOCwgMSwgMHgwOGU4LCAyLCAwKQorI2RlZmluZSBfTVg1MV9QQURfU0QxX0RBVEEzX19DU1BJX1NTMQkJSU9NVVhfUEFEKDB4N2IwLCAweDNhOCwgMiwgMHgwOTIwLCAxLCAwKQorI2RlZmluZSBfTVg1MV9QQURfU0QxX0RBVEEzX19TRDFfREFUQTMJCUlPTVVYX1BBRCgweDdiMCwgMHgzYTgsIDB4MTAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0dQSU8xXzBfX0NTUElfU1MyCQlJT01VWF9QQUQoMHg3YjQsIDB4M2FjLCAyLCAweDA5MjQsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9HUElPMV8wX19HUElPMV8wCQlJT01VWF9QQUQoMHg3YjQsIDB4M2FjLCAxLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9HUElPMV8wX19TRDFfQ0QJCUlPTVVYX1BBRCgweDdiNCwgMHgzYWMsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0dQSU8xXzFfX0NTUElfTUlTTwkJSU9NVVhfUEFEKDB4N2I4LCAweDNiMCwgMiwgMHgwOTE4LCAyLCAwKQorI2RlZmluZSBfTVg1MV9QQURfR1BJTzFfMV9fR1BJTzFfMQkJSU9NVVhfUEFEKDB4N2I4LCAweDNiMCwgMSwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfR1BJTzFfMV9fU0QxX1dQCQlJT01VWF9QQUQoMHg3YjgsIDB4M2IwLCAwLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fREExMl9fRUlNX0RBMTIJCUlPTVVYX1BBRCgweDAwMCwgMHgwNGMsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0VJTV9EQTEzX19FSU1fREExMwkJSU9NVVhfUEFEKDB4MDAwLCAweDA1MCwgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfRUlNX0RBMTRfX0VJTV9EQTE0CQlJT01VWF9QQUQoMHgwMDAsIDB4MDU0LCAwLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9FSU1fREExNV9fRUlNX0RBMTUJCUlPTVVYX1BBRCgweDAwMCwgMHgwNTgsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX1NEMl9DTURfX0NTUElfTU9TSQkJSU9NVVhfUEFEKDB4MDAwLCAweDNiNCwgMiwgMHgwOTFjLCAzLCAwKQorI2RlZmluZSBfTVg1MV9QQURfU0QyX0NNRF9fSTJDMV9TQ0wJCUlPTVVYX1BBRCgweDdiYywgMHgzYjQsIDB4MTEsIDB4MDliMCwgMiwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX1NEMl9DTURfX1NEMl9DTUQJCUlPTVVYX1BBRCgweDdiYywgMHgzYjQsIDB4MTAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX1NEMl9DTEtfX0NTUElfU0NMSwkJSU9NVVhfUEFEKDB4N2MwLCAweDNiOCwgMiwgMHgwOTE0LCAzLCAwKQorI2RlZmluZSBfTVg1MV9QQURfU0QyX0NMS19fSTJDMV9TREEJCUlPTVVYX1BBRCgweDdjMCwgMHgzYjgsIDB4MTEsIDB4MDliNCwgMiwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX1NEMl9DTEtfX1NEMl9DTEsJCUlPTVVYX1BBRCgweDdjMCwgMHgzYjgsIDB4MTAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX1NEMl9EQVRBMF9fQ1NQSV9NSVNPCQlJT01VWF9QQUQoMHg3YzQsIDB4M2JjLCAyLCAweDA5MTgsIDMsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9TRDJfREFUQTBfX1NEMV9EQVQ0CQlJT01VWF9QQUQoMHg3YzQsIDB4M2JjLCAxLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9TRDJfREFUQTBfX1NEMl9EQVRBMAkJSU9NVVhfUEFEKDB4N2M0LCAweDNiYywgMHgxMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfU0QyX0RBVEExX19TRDFfREFUNQkJSU9NVVhfUEFEKDB4N2M4LCAweDNjMCwgMSwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfU0QyX0RBVEExX19TRDJfREFUQTEJCUlPTVVYX1BBRCgweDdjOCwgMHgzYzAsIDB4MTAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX1NEMl9EQVRBMV9fVVNCSDNfSDJfRFAJSU9NVVhfUEFEKDB4N2M4LCAweDNjMCwgMiwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfU0QyX0RBVEEyX19TRDFfREFUNgkJSU9NVVhfUEFEKDB4N2NjLCAweDNjNCwgMSwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfU0QyX0RBVEEyX19TRDJfREFUQTIJCUlPTVVYX1BBRCgweDdjYywgMHgzYzQsIDB4MTAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX1NEMl9EQVRBMl9fVVNCSDNfSDJfRE0JSU9NVVhfUEFEKDB4N2NjLCAweDNjNCwgMiwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfU0QyX0RBVEEzX19DU1BJX1NTMgkJSU9NVVhfUEFEKDB4N2QwLCAweDNjOCwgMiwgMHgwOTI0LCAxLCAwKQorI2RlZmluZSBfTVg1MV9QQURfU0QyX0RBVEEzX19TRDFfREFUNwkJSU9NVVhfUEFEKDB4N2QwLCAweDNjOCwgMSwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfU0QyX0RBVEEzX19TRDJfREFUQTMJCUlPTVVYX1BBRCgweDdkMCwgMHgzYzgsIDB4MTAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0dQSU8xXzJfX0NDTV9PVVRfMgkJSU9NVVhfUEFEKDB4N2Q0LCAweDNjYywgNSwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfR1BJTzFfMl9fR1BJTzFfMgkJSU9NVVhfUEFEKDB4N2Q0LCAweDNjYywgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfR1BJTzFfMl9fSTJDMl9TQ0wJCUlPTVVYX1BBRCgweDdkNCwgMHgzY2MsIDB4MTIsIDB4MDliOCwgMywgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0dQSU8xXzJfX1BMTDFfQllQCQlJT01VWF9QQUQoMHg3ZDQsIDB4M2NjLCA3LCAweDA5MGMsIDEsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9HUElPMV8yX19QV00xX1BXTU8JCUlPTVVYX1BBRCgweDdkNCwgMHgzY2MsIDEsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0dQSU8xXzNfX0dQSU8xXzMJCUlPTVVYX1BBRCgweDdkOCwgMHgzZDAsIDAsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0dQSU8xXzNfX0kyQzJfU0RBCQlJT01VWF9QQUQoMHg3ZDgsIDB4M2QwLCAweDEyLCAweDA5YmMsIDMsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9HUElPMV8zX19QTEwyX0JZUAkJSU9NVVhfUEFEKDB4N2Q4LCAweDNkMCwgNywgMHgwOTEwLCAxLCAwKQorI2RlZmluZSBfTVg1MV9QQURfR1BJTzFfM19fUFdNMl9QV01PCQlJT01VWF9QQUQoMHg3ZDgsIDB4M2QwLCAxLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9QTUlDX0lOVF9SRVFfX1BNSUNfSU5UX1JFUQlJT01VWF9QQUQoMHg3ZmMsIDB4M2Q0LCAwLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9QTUlDX0lOVF9SRVFfX1BNSUNfUE1VX0lSUV9CCUlPTVVYX1BBRCgweDdmYywgMHgzZDQsIDEsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0dQSU8xXzRfX0RJU1AyX0VYVF9DTEsJSU9NVVhfUEFEKDB4ODA0LCAweDNkOCwgNCwgMHgwOTA4LCAxLCAwKQorI2RlZmluZSBfTVg1MV9QQURfR1BJTzFfNF9fRUlNX1JEWQkJSU9NVVhfUEFEKDB4ODA0LCAweDNkOCwgMywgMHgwOTM4LCAxLCAwKQorI2RlZmluZSBfTVg1MV9QQURfR1BJTzFfNF9fR1BJTzFfNAkJSU9NVVhfUEFEKDB4ODA0LCAweDNkOCwgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfR1BJTzFfNF9fV0RPRzFfV0RPR19CCQlJT01VWF9QQUQoMHg4MDQsIDB4M2Q4LCAyLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9HUElPMV81X19DU0kyX01DTEsJCUlPTVVYX1BBRCgweDgwOCwgMHgzZGMsIDYsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0dQSU8xXzVfX0RJU1AyX1BJTjE2CQlJT01VWF9QQUQoMHg4MDgsIDB4M2RjLCAzLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9HUElPMV81X19HUElPMV81CQlJT01VWF9QQUQoMHg4MDgsIDB4M2RjLCAwLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9HUElPMV81X19XRE9HMl9XRE9HX0IJCUlPTVVYX1BBRCgweDgwOCwgMHgzZGMsIDIsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0dQSU8xXzZfX0RJU1AyX1BJTjE3CQlJT01VWF9QQUQoMHg4MGMsIDB4M2UwLCA0LCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9HUElPMV82X19HUElPMV82CQlJT01VWF9QQUQoMHg4MGMsIDB4M2UwLCAwLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9HUElPMV82X19SRUZfRU5fQgkJSU9NVVhfUEFEKDB4ODBjLCAweDNlMCwgMywgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfR1BJTzFfN19fQ0NNX09VVF8wCQlJT01VWF9QQUQoMHg4MTAsIDB4M2U0LCAzLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9HUElPMV83X19HUElPMV83CQlJT01VWF9QQUQoMHg4MTAsIDB4M2U0LCAwLCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9HUElPMV83X19TRDJfV1AJCUlPTVVYX1BBRCgweDgxMCwgMHgzZTQsIDYsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0dQSU8xXzdfX1NQRElGX09VVDEJCUlPTVVYX1BBRCgweDgxMCwgMHgzZTQsIDIsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0dQSU8xXzhfX0NTSTJfREFUQV9FTgkJSU9NVVhfUEFEKDB4ODE0LCAweDNlOCwgMiwgMHgwOTljLCAyLCAwKQorI2RlZmluZSBfTVg1MV9QQURfR1BJTzFfOF9fR1BJTzFfOAkJSU9NVVhfUEFEKDB4ODE0LCAweDNlOCwgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfR1BJTzFfOF9fU0QyX0NECQlJT01VWF9QQUQoMHg4MTQsIDB4M2U4LCA2LCAweDAwMDAsIDAsIDApCisjZGVmaW5lIF9NWDUxX1BBRF9HUElPMV84X19VU0JIM19QV1IJCUlPTVVYX1BBRCgweDgxNCwgMHgzZTgsIDEsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0dQSU8xXzlfX0NDTV9PVVRfMQkJSU9NVVhfUEFEKDB4ODE4LCAweDNlYywgMywgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfR1BJTzFfOV9fRElTUDJfRDFfQ1MJCUlPTVVYX1BBRCgweDgxOCwgMHgzZWMsIDIsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0dQSU8xXzlfX0RJU1AyX1NFUl9DUwkJSU9NVVhfUEFEKDB4ODE4LCAweDNlYywgNywgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfR1BJTzFfOV9fR1BJTzFfOQkJSU9NVVhfUEFEKDB4ODE4LCAweDNlYywgMCwgMHgwMDAwLCAwLCAwKQorI2RlZmluZSBfTVg1MV9QQURfR1BJTzFfOV9fU0QyX0xDVEwJCUlPTVVYX1BBRCgweDgxOCwgMHgzZWMsIDYsIDB4MDAwMCwgMCwgMCkKKyNkZWZpbmUgX01YNTFfUEFEX0dQSU8xXzlfX1VTQkgzX09DCQlJT01VWF9QQUQoMHg4MTgsIDB4M2VjLCAxLCAweDAwMDAsIDAsIDApCisKKy8qIFRoZSBzYW1lIHBpbnMgYXMgYWJvdmUgYnV0IHdpdGggdGhlIGRlZmF1bHQgcGFkIGNvbnRyb2wgdmFsdWVzIGFwcGxpZWQgKi8KKyNkZWZpbmUgTVg1MV9QQURfRUlNX0QxNl9fQVVENF9SWEZTCQkoX01YNTFfUEFEX0VJTV9EMTZfX0FVRDRfUlhGUyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9EMTZfX0FVRDVfVFhECQkoX01YNTFfUEFEX0VJTV9EMTZfX0FVRDVfVFhEIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0QxNl9fRUlNX0QxNgkJKF9NWDUxX1BBRF9FSU1fRDE2X19FSU1fRDE2IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0QxNl9fR1BJTzJfMAkJKF9NWDUxX1BBRF9FSU1fRDE2X19HUElPMl8wIHwgTVVYX1BBRF9DVFJMKE1YNTFfR1BJT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9EMTZfX0kyQzFfU0RBCQkoX01YNTFfUEFEX0VJTV9EMTZfX0kyQzFfU0RBIHwgTVVYX1BBRF9DVFJMKE1YNTFfSTJDX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0QxNl9fVUFSVDJfQ1RTCQkoX01YNTFfUEFEX0VJTV9EMTZfX1VBUlQyX0NUUyB8IE1VWF9QQURfQ1RSTChNWDUxX1VBUlRfUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fRDE2X19VU0JIMl9EQVRBMAkJKF9NWDUxX1BBRF9FSU1fRDE2X19VU0JIMl9EQVRBMCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9EMTdfX0FVRDVfUlhECQkoX01YNTFfUEFEX0VJTV9EMTdfX0FVRDVfUlhEIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0QxN19fRUlNX0QxNwkJKF9NWDUxX1BBRF9FSU1fRDE3X19FSU1fRDE3IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0QxN19fR1BJTzJfMQkJKF9NWDUxX1BBRF9FSU1fRDE3X19HUElPMl8xIHwgTVVYX1BBRF9DVFJMKE1YNTFfR1BJT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9EMTdfX1VBUlQyX1JYRAkJKF9NWDUxX1BBRF9FSU1fRDE3X19VQVJUMl9SWEQgfCBNVVhfUEFEX0NUUkwoTVg1MV9VQVJUX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0QxN19fVUFSVDNfQ1RTCQkoX01YNTFfUEFEX0VJTV9EMTdfX1VBUlQzX0NUUyB8IE1VWF9QQURfQ1RSTChNWDUxX1VBUlRfUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fRDE3X19VU0JIMl9EQVRBMQkJKF9NWDUxX1BBRF9FSU1fRDE3X19VU0JIMl9EQVRBMSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9EMThfX0FVRDVfVFhDCQkoX01YNTFfUEFEX0VJTV9EMThfX0FVRDVfVFhDIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0QxOF9fRUlNX0QxOAkJKF9NWDUxX1BBRF9FSU1fRDE4X19FSU1fRDE4IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0QxOF9fR1BJTzJfMgkJKF9NWDUxX1BBRF9FSU1fRDE4X19HUElPMl8yIHwgTVVYX1BBRF9DVFJMKE1YNTFfR1BJT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9EMThfX1VBUlQyX1RYRAkJKF9NWDUxX1BBRF9FSU1fRDE4X19VQVJUMl9UWEQgfCBNVVhfUEFEX0NUUkwoTVg1MV9VQVJUX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0QxOF9fVUFSVDNfUlRTCQkoX01YNTFfUEFEX0VJTV9EMThfX1VBUlQzX1JUUyB8IE1VWF9QQURfQ1RSTChNWDUxX1VBUlRfUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fRDE4X19VU0JIMl9EQVRBMgkJKF9NWDUxX1BBRF9FSU1fRDE4X19VU0JIMl9EQVRBMiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9EMTlfX0FVRDRfUlhDCQkoX01YNTFfUEFEX0VJTV9EMTlfX0FVRDRfUlhDIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0QxOV9fQVVENV9UWEZTCQkoX01YNTFfUEFEX0VJTV9EMTlfX0FVRDVfVFhGUyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9EMTlfX0VJTV9EMTkJCShfTVg1MV9QQURfRUlNX0QxOV9fRUlNX0QxOSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9EMTlfX0dQSU8yXzMJCShfTVg1MV9QQURfRUlNX0QxOV9fR1BJTzJfMyB8IE1VWF9QQURfQ1RSTChNWDUxX0dQSU9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fRDE5X19JMkMxX1NDTAkJKF9NWDUxX1BBRF9FSU1fRDE5X19JMkMxX1NDTCB8IE1VWF9QQURfQ1RSTChNWDUxX0kyQ19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9EMTlfX1VBUlQyX1JUUwkJKF9NWDUxX1BBRF9FSU1fRDE5X19VQVJUMl9SVFMgfCBNVVhfUEFEX0NUUkwoTVg1MV9VQVJUX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0QxOV9fVVNCSDJfREFUQTMJCShfTVg1MV9QQURfRUlNX0QxOV9fVVNCSDJfREFUQTMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fRDIwX19BVUQ0X1RYRAkJKF9NWDUxX1BBRF9FSU1fRDIwX19BVUQ0X1RYRCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9EMjBfX0VJTV9EMjAJCShfTVg1MV9QQURfRUlNX0QyMF9fRUlNX0QyMCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9EMjBfX0dQSU8yXzQJCShfTVg1MV9QQURfRUlNX0QyMF9fR1BJTzJfNCB8IE1VWF9QQURfQ1RSTChNWDUxX0dQSU9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fRDIwX19TUlRDX0FMQVJNX0RFQgkoX01YNTFfUEFEX0VJTV9EMjBfX1NSVENfQUxBUk1fREVCIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0QyMF9fVVNCSDJfREFUQTQJCShfTVg1MV9QQURfRUlNX0QyMF9fVVNCSDJfREFUQTQgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fRDIxX19BVUQ0X1JYRAkJKF9NWDUxX1BBRF9FSU1fRDIxX19BVUQ0X1JYRCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9EMjFfX0VJTV9EMjEJCShfTVg1MV9QQURfRUlNX0QyMV9fRUlNX0QyMSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9EMjFfX0dQSU8yXzUJCShfTVg1MV9QQURfRUlNX0QyMV9fR1BJTzJfNSB8IE1VWF9QQURfQ1RSTChNWDUxX0dQSU9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fRDIxX19TUlRDX0FMQVJNX0RFQgkoX01YNTFfUEFEX0VJTV9EMjFfX1NSVENfQUxBUk1fREVCIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0QyMV9fVVNCSDJfREFUQTUJCShfTVg1MV9QQURfRUlNX0QyMV9fVVNCSDJfREFUQTUgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fRDIyX19BVUQ0X1RYQwkJKF9NWDUxX1BBRF9FSU1fRDIyX19BVUQ0X1RYQyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9EMjJfX0VJTV9EMjIJCShfTVg1MV9QQURfRUlNX0QyMl9fRUlNX0QyMiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9EMjJfX0dQSU8yXzYJCShfTVg1MV9QQURfRUlNX0QyMl9fR1BJTzJfNiB8IE1VWF9QQURfQ1RSTChNWDUxX0dQSU9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fRDIyX19VU0JIMl9EQVRBNgkJKF9NWDUxX1BBRF9FSU1fRDIyX19VU0JIMl9EQVRBNiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9EMjNfX0FVRDRfVFhGUwkJKF9NWDUxX1BBRF9FSU1fRDIzX19BVUQ0X1RYRlMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fRDIzX19FSU1fRDIzCQkoX01YNTFfUEFEX0VJTV9EMjNfX0VJTV9EMjMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fRDIzX19HUElPMl83CQkoX01YNTFfUEFEX0VJTV9EMjNfX0dQSU8yXzcgfCBNVVhfUEFEX0NUUkwoTVg1MV9HUElPX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0QyM19fU1BESUZfT1VUMQkJKF9NWDUxX1BBRF9FSU1fRDIzX19TUERJRl9PVVQxIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0QyM19fVVNCSDJfREFUQTcJCShfTVg1MV9QQURfRUlNX0QyM19fVVNCSDJfREFUQTcgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fRDI0X19BVUQ2X1JYRlMJCShfTVg1MV9QQURfRUlNX0QyNF9fQVVENl9SWEZTIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0QyNF9fRUlNX0QyNAkJKF9NWDUxX1BBRF9FSU1fRDI0X19FSU1fRDI0IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0QyNF9fR1BJTzJfOAkJKF9NWDUxX1BBRF9FSU1fRDI0X19HUElPMl84IHwgTVVYX1BBRF9DVFJMKE1YNTFfR1BJT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9EMjRfX0kyQzJfU0RBCQkoX01YNTFfUEFEX0VJTV9EMjRfX0kyQzJfU0RBIHwgTVVYX1BBRF9DVFJMKE1YNTFfSTJDX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0QyNF9fVUFSVDNfQ1RTCQkoX01YNTFfUEFEX0VJTV9EMjRfX1VBUlQzX0NUUyB8IE1VWF9QQURfQ1RSTChNWDUxX1VBUlRfUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fRDI0X19VU0JPVEdfREFUQTAJCShfTVg1MV9QQURfRUlNX0QyNF9fVVNCT1RHX0RBVEEwIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0QyNV9fRUlNX0QyNQkJKF9NWDUxX1BBRF9FSU1fRDI1X19FSU1fRDI1IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0QyNV9fS0VZX0NPTDYJCShfTVg1MV9QQURfRUlNX0QyNV9fS0VZX0NPTDYgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fRDI1X19VQVJUMl9DVFMJCShfTVg1MV9QQURfRUlNX0QyNV9fVUFSVDJfQ1RTIHwgTVVYX1BBRF9DVFJMKE1YNTFfVUFSVF9QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9EMjVfX1VBUlQzX1JYRAkJKF9NWDUxX1BBRF9FSU1fRDI1X19VQVJUM19SWEQgfCBNVVhfUEFEX0NUUkwoTVg1MV9VQVJUX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0QyNV9fVVNCT1RHX0RBVEExCQkoX01YNTFfUEFEX0VJTV9EMjVfX1VTQk9UR19EQVRBMSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9EMjZfX0VJTV9EMjYJCShfTVg1MV9QQURfRUlNX0QyNl9fRUlNX0QyNiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9EMjZfX0tFWV9DT0w3CQkoX01YNTFfUEFEX0VJTV9EMjZfX0tFWV9DT0w3IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0QyNl9fVUFSVDJfUlRTCQkoX01YNTFfUEFEX0VJTV9EMjZfX1VBUlQyX1JUUyB8IE1VWF9QQURfQ1RSTChNWDUxX1VBUlRfUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fRDI2X19VQVJUM19UWEQJCShfTVg1MV9QQURfRUlNX0QyNl9fVUFSVDNfVFhEIHwgTVVYX1BBRF9DVFJMKE1YNTFfVUFSVF9QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9EMjZfX1VTQk9UR19EQVRBMgkJKF9NWDUxX1BBRF9FSU1fRDI2X19VU0JPVEdfREFUQTIgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fRDI3X19BVUQ2X1JYQwkJKF9NWDUxX1BBRF9FSU1fRDI3X19BVUQ2X1JYQyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9EMjdfX0VJTV9EMjcJCShfTVg1MV9QQURfRUlNX0QyN19fRUlNX0QyNyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9EMjdfX0dQSU8yXzkJCShfTVg1MV9QQURfRUlNX0QyN19fR1BJTzJfOSB8IE1VWF9QQURfQ1RSTChNWDUxX0dQSU9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fRDI3X19JMkMyX1NDTAkJKF9NWDUxX1BBRF9FSU1fRDI3X19JMkMyX1NDTCB8IE1VWF9QQURfQ1RSTChNWDUxX0kyQ19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9EMjdfX1VBUlQzX1JUUwkJKF9NWDUxX1BBRF9FSU1fRDI3X19VQVJUM19SVFMgfCBNVVhfUEFEX0NUUkwoTVg1MV9VQVJUX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0QyN19fVVNCT1RHX0RBVEEzCQkoX01YNTFfUEFEX0VJTV9EMjdfX1VTQk9UR19EQVRBMyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9EMjhfX0FVRDZfVFhECQkoX01YNTFfUEFEX0VJTV9EMjhfX0FVRDZfVFhEIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0QyOF9fRUlNX0QyOAkJKF9NWDUxX1BBRF9FSU1fRDI4X19FSU1fRDI4IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0QyOF9fS0VZX1JPVzQJCShfTVg1MV9QQURfRUlNX0QyOF9fS0VZX1JPVzQgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fRDI4X19VU0JPVEdfREFUQTQJCShfTVg1MV9QQURfRUlNX0QyOF9fVVNCT1RHX0RBVEE0IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0QyOV9fQVVENl9SWEQJCShfTVg1MV9QQURfRUlNX0QyOV9fQVVENl9SWEQgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fRDI5X19FSU1fRDI5CQkoX01YNTFfUEFEX0VJTV9EMjlfX0VJTV9EMjkgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fRDI5X19LRVlfUk9XNQkJKF9NWDUxX1BBRF9FSU1fRDI5X19LRVlfUk9XNSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9EMjlfX1VTQk9UR19EQVRBNQkJKF9NWDUxX1BBRF9FSU1fRDI5X19VU0JPVEdfREFUQTUgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fRDMwX19BVUQ2X1RYQwkJKF9NWDUxX1BBRF9FSU1fRDMwX19BVUQ2X1RYQyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9EMzBfX0VJTV9EMzAJCShfTVg1MV9QQURfRUlNX0QzMF9fRUlNX0QzMCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9EMzBfX0tFWV9ST1c2CQkoX01YNTFfUEFEX0VJTV9EMzBfX0tFWV9ST1c2IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0QzMF9fVVNCT1RHX0RBVEE2CQkoX01YNTFfUEFEX0VJTV9EMzBfX1VTQk9UR19EQVRBNiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9EMzFfX0FVRDZfVFhGUwkJKF9NWDUxX1BBRF9FSU1fRDMxX19BVUQ2X1RYRlMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fRDMxX19FSU1fRDMxCQkoX01YNTFfUEFEX0VJTV9EMzFfX0VJTV9EMzEgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fRDMxX19LRVlfUk9XNwkJKF9NWDUxX1BBRF9FSU1fRDMxX19LRVlfUk9XNyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9EMzFfX1VTQk9UR19EQVRBNwkJKF9NWDUxX1BBRF9FSU1fRDMxX19VU0JPVEdfREFUQTcgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fQTE2X19FSU1fQTE2CQkoX01YNTFfUEFEX0VJTV9BMTZfX0VJTV9BMTYgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fQTE2X19HUElPMl8xMAkJKF9NWDUxX1BBRF9FSU1fQTE2X19HUElPMl8xMCB8IE1VWF9QQURfQ1RSTChNWDUxX0dQSU9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fQTE2X19PU0NfRlJFUV9TRUwwCQkoX01YNTFfUEFEX0VJTV9BMTZfX09TQ19GUkVRX1NFTDAgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fQTE3X19FSU1fQTE3CQkoX01YNTFfUEFEX0VJTV9BMTdfX0VJTV9BMTcgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fQTE3X19HUElPMl8xMQkJKF9NWDUxX1BBRF9FSU1fQTE3X19HUElPMl8xMSB8IE1VWF9QQURfQ1RSTChNWDUxX0dQSU9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fQTE3X19PU0NfRlJFUV9TRUwxCQkoX01YNTFfUEFEX0VJTV9BMTdfX09TQ19GUkVRX1NFTDEgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fQTE4X19CT09UX0xQQjAJCShfTVg1MV9QQURfRUlNX0ExOF9fQk9PVF9MUEIwIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0ExOF9fRUlNX0ExOAkJKF9NWDUxX1BBRF9FSU1fQTE4X19FSU1fQTE4IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0ExOF9fR1BJTzJfMTIJCShfTVg1MV9QQURfRUlNX0ExOF9fR1BJTzJfMTIgfCBNVVhfUEFEX0NUUkwoTVg1MV9HUElPX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0ExOV9fQk9PVF9MUEIxCQkoX01YNTFfUEFEX0VJTV9BMTlfX0JPT1RfTFBCMSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9BMTlfX0VJTV9BMTkJCShfTVg1MV9QQURfRUlNX0ExOV9fRUlNX0ExOSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9BMTlfX0dQSU8yXzEzCQkoX01YNTFfUEFEX0VJTV9BMTlfX0dQSU8yXzEzIHwgTVVYX1BBRF9DVFJMKE1YNTFfR1BJT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9BMjBfX0JPT1RfVUFSVF9TUkMwCShfTVg1MV9QQURfRUlNX0EyMF9fQk9PVF9VQVJUX1NSQzAgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fQTIwX19FSU1fQTIwCQkoX01YNTFfUEFEX0VJTV9BMjBfX0VJTV9BMjAgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fQTIwX19HUElPMl8xNAkJKF9NWDUxX1BBRF9FSU1fQTIwX19HUElPMl8xNCB8IE1VWF9QQURfQ1RSTChNWDUxX0dQSU9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fQTIxX19CT09UX1VBUlRfU1JDMQkoX01YNTFfUEFEX0VJTV9BMjFfX0JPT1RfVUFSVF9TUkMxIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0EyMV9fRUlNX0EyMQkJKF9NWDUxX1BBRF9FSU1fQTIxX19FSU1fQTIxIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0EyMV9fR1BJTzJfMTUJCShfTVg1MV9QQURfRUlNX0EyMV9fR1BJTzJfMTUgfCBNVVhfUEFEX0NUUkwoTVg1MV9HUElPX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0EyMl9fRUlNX0EyMgkJKF9NWDUxX1BBRF9FSU1fQTIyX19FSU1fQTIyIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0EyMl9fR1BJTzJfMTYJCShfTVg1MV9QQURfRUlNX0EyMl9fR1BJTzJfMTYgfCBNVVhfUEFEX0NUUkwoTVg1MV9HUElPX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0EyM19fQk9PVF9IUE5fRU4JCShfTVg1MV9QQURfRUlNX0EyM19fQk9PVF9IUE5fRU4gfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fQTIzX19FSU1fQTIzCQkoX01YNTFfUEFEX0VJTV9BMjNfX0VJTV9BMjMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fQTIzX19HUElPMl8xNwkJKF9NWDUxX1BBRF9FSU1fQTIzX19HUElPMl8xNyB8IE1VWF9QQURfQ1RSTChNWDUxX0dQSU9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fQTI0X19FSU1fQTI0CQkoX01YNTFfUEFEX0VJTV9BMjRfX0VJTV9BMjQgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fQTI0X19HUElPMl8xOAkJKF9NWDUxX1BBRF9FSU1fQTI0X19HUElPMl8xOCB8IE1VWF9QQURfQ1RSTChNWDUxX0dQSU9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fQTI0X19VU0JIMl9DTEsJCShfTVg1MV9QQURfRUlNX0EyNF9fVVNCSDJfQ0xLIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0EyNV9fRElTUDFfUElONAkJKF9NWDUxX1BBRF9FSU1fQTI1X19ESVNQMV9QSU40IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0EyNV9fRUlNX0EyNQkJKF9NWDUxX1BBRF9FSU1fQTI1X19FSU1fQTI1IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0EyNV9fR1BJTzJfMTkJCShfTVg1MV9QQURfRUlNX0EyNV9fR1BJTzJfMTkgfCBNVVhfUEFEX0NUUkwoTVg1MV9HUElPX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0EyNV9fVVNCSDJfRElSCQkoX01YNTFfUEFEX0VJTV9BMjVfX1VTQkgyX0RJUiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9BMjZfX0NTSTFfREFUQV9FTgkJKF9NWDUxX1BBRF9FSU1fQTI2X19DU0kxX0RBVEFfRU4gfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fQTI2X19ESVNQMl9FWFRfQ0xLCQkoX01YNTFfUEFEX0VJTV9BMjZfX0RJU1AyX0VYVF9DTEsgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fQTI2X19FSU1fQTI2CQkoX01YNTFfUEFEX0VJTV9BMjZfX0VJTV9BMjYgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fQTI2X19HUElPMl8yMAkJKF9NWDUxX1BBRF9FSU1fQTI2X19HUElPMl8yMCB8IE1VWF9QQURfQ1RSTChNWDUxX0dQSU9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fQTI2X19VU0JIMl9TVFAJCShfTVg1MV9QQURfRUlNX0EyNl9fVVNCSDJfU1RQIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0EyN19fQ1NJMl9EQVRBX0VOCQkoX01YNTFfUEFEX0VJTV9BMjdfX0NTSTJfREFUQV9FTiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9BMjdfX0RJU1AxX1BJTjEJCShfTVg1MV9QQURfRUlNX0EyN19fRElTUDFfUElOMSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9BMjdfX0VJTV9BMjcJCShfTVg1MV9QQURfRUlNX0EyN19fRUlNX0EyNyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9BMjdfX0dQSU8yXzIxCQkoX01YNTFfUEFEX0VJTV9BMjdfX0dQSU8yXzIxIHwgTVVYX1BBRF9DVFJMKE1YNTFfR1BJT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9BMjdfX1VTQkgyX05YVAkJKF9NWDUxX1BBRF9FSU1fQTI3X19VU0JIMl9OWFQgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fRUIwX19FSU1fRUIwCQkoX01YNTFfUEFEX0VJTV9FQjBfX0VJTV9FQjAgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fRUIxX19FSU1fRUIxCQkoX01YNTFfUEFEX0VJTV9FQjFfX0VJTV9FQjEgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fRUIyX19BVUQ1X1JYRlMJCShfTVg1MV9QQURfRUlNX0VCMl9fQVVENV9SWEZTIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0VCMl9fQ1NJMV9EMgkJKF9NWDUxX1BBRF9FSU1fRUIyX19DU0kxX0QyIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0VCMl9fRUlNX0VCMgkJKF9NWDUxX1BBRF9FSU1fRUIyX19FSU1fRUIyIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0VCMl9fRkVDX01ESU8JCShfTVg1MV9QQURfRUlNX0VCMl9fRkVDX01ESU8gfCBcCisJCU1VWF9QQURfQ1RSTChQQURfQ1RMX1BVU18yMktfVVAgfCBQQURfQ1RMX1BLRSB8IFBBRF9DVExfU1JFX0ZBU1QgfCBcCisJCVBBRF9DVExfRFNFX0hJR0ggfCBQQURfQ1RMX1BVRSB8IFBBRF9DVExfSFlTKSkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0VCMl9fR1BJTzJfMjIJCShfTVg1MV9QQURfRUlNX0VCMl9fR1BJTzJfMjIgfCBNVVhfUEFEX0NUUkwoTVg1MV9HUElPX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0VCMl9fR1BUX0NNUE9VVDEJCShfTVg1MV9QQURfRUlNX0VCMl9fR1BUX0NNUE9VVDEgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fRUIzX19BVUQ1X1JYQwkJKF9NWDUxX1BBRF9FSU1fRUIzX19BVUQ1X1JYQyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9FQjNfX0NTSTFfRDMJCShfTVg1MV9QQURfRUlNX0VCM19fQ1NJMV9EMyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9FQjNfX0VJTV9FQjMJCShfTVg1MV9QQURfRUlNX0VCM19fRUlNX0VCMyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9FQjNfX0ZFQ19SREFUQTEJCShfTVg1MV9QQURfRUlNX0VCM19fRkVDX1JEQVRBMSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9FQjNfX0dQSU8yXzIzCQkoX01YNTFfUEFEX0VJTV9FQjNfX0dQSU8yXzIzIHwgTVVYX1BBRF9DVFJMKE1YNTFfR1BJT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9FQjNfX0dQVF9DTVBPVVQyCQkoX01YNTFfUEFEX0VJTV9FQjNfX0dQVF9DTVBPVVQyIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX09FX19FSU1fT0UJCQkoX01YNTFfUEFEX0VJTV9PRV9fRUlNX09FIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX09FX19HUElPMl8yNAkJKF9NWDUxX1BBRF9FSU1fT0VfX0dQSU8yXzI0IHwgTVVYX1BBRF9DVFJMKE1YNTFfR1BJT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9DUzBfX0VJTV9DUzAJCShfTVg1MV9QQURfRUlNX0NTMF9fRUlNX0NTMCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9DUzBfX0dQSU8yXzI1CQkoX01YNTFfUEFEX0VJTV9DUzBfX0dQSU8yXzI1IHwgTVVYX1BBRF9DVFJMKE1YNTFfR1BJT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9DUzFfX0VJTV9DUzEJCShfTVg1MV9QQURfRUlNX0NTMV9fRUlNX0NTMSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9DUzFfX0dQSU8yXzI2CQkoX01YNTFfUEFEX0VJTV9DUzFfX0dQSU8yXzI2IHwgTVVYX1BBRF9DVFJMKE1YNTFfR1BJT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9DUzJfX0FVRDVfVFhECQkoX01YNTFfUEFEX0VJTV9DUzJfX0FVRDVfVFhEIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0NTMl9fQ1NJMV9ENAkJKF9NWDUxX1BBRF9FSU1fQ1MyX19DU0kxX0Q0IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0NTMl9fRUlNX0NTMgkJKF9NWDUxX1BBRF9FSU1fQ1MyX19FSU1fQ1MyIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0NTMl9fRkVDX1JEQVRBMgkJKF9NWDUxX1BBRF9FSU1fQ1MyX19GRUNfUkRBVEEyIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0NTMl9fR1BJTzJfMjcJCShfTVg1MV9QQURfRUlNX0NTMl9fR1BJTzJfMjcgfCBNVVhfUEFEX0NUUkwoTVg1MV9HUElPX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0NTMl9fVVNCT1RHX1NUUAkJKF9NWDUxX1BBRF9FSU1fQ1MyX19VU0JPVEdfU1RQIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0NTM19fQVVENV9SWEQJCShfTVg1MV9QQURfRUlNX0NTM19fQVVENV9SWEQgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fQ1MzX19DU0kxX0Q1CQkoX01YNTFfUEFEX0VJTV9DUzNfX0NTSTFfRDUgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fQ1MzX19FSU1fQ1MzCQkoX01YNTFfUEFEX0VJTV9DUzNfX0VJTV9DUzMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fQ1MzX19GRUNfUkRBVEEzCQkoX01YNTFfUEFEX0VJTV9DUzNfX0ZFQ19SREFUQTMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fQ1MzX19HUElPMl8yOAkJKF9NWDUxX1BBRF9FSU1fQ1MzX19HUElPMl8yOCB8IE1VWF9QQURfQ1RSTChNWDUxX0dQSU9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fQ1MzX19VU0JPVEdfTlhUCQkoX01YNTFfUEFEX0VJTV9DUzNfX1VTQk9UR19OWFQgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fQ1M0X19BVUQ1X1RYQwkJKF9NWDUxX1BBRF9FSU1fQ1M0X19BVUQ1X1RYQyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9DUzRfX0NTSTFfRDYJCShfTVg1MV9QQURfRUlNX0NTNF9fQ1NJMV9ENiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9DUzRfX0VJTV9DUzQJCShfTVg1MV9QQURfRUlNX0NTNF9fRUlNX0NTNCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9DUzRfX0ZFQ19SWF9FUgkJKF9NWDUxX1BBRF9FSU1fQ1M0X19GRUNfUlhfRVIgfCBNVVhfUEFEX0NUUkwoTVg1MV9QQURfQ1RSTF8yKSkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0NTNF9fR1BJTzJfMjkJCShfTVg1MV9QQURfRUlNX0NTNF9fR1BJTzJfMjkgfCBNVVhfUEFEX0NUUkwoTVg1MV9HUElPX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0NTNF9fVVNCT1RHX0NMSwkJKF9NWDUxX1BBRF9FSU1fQ1M0X19VU0JPVEdfQ0xLIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0NTNV9fQVVENV9UWEZTCQkoX01YNTFfUEFEX0VJTV9DUzVfX0FVRDVfVFhGUyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9DUzVfX0NTSTFfRDcJCShfTVg1MV9QQURfRUlNX0NTNV9fQ1NJMV9ENyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9DUzVfX0RJU1AxX0VYVF9DTEsJCShfTVg1MV9QQURfRUlNX0NTNV9fRElTUDFfRVhUX0NMSyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9DUzVfX0VJTV9DUzUJCShfTVg1MV9QQURfRUlNX0NTNV9fRUlNX0NTNSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9DUzVfX0ZFQ19DUlMJCShfTVg1MV9QQURfRUlNX0NTNV9fRkVDX0NSUyB8IE1VWF9QQURfQ1RSTChNWDUxX1BBRF9DVFJMXzIpKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fQ1M1X19HUElPMl8zMAkJKF9NWDUxX1BBRF9FSU1fQ1M1X19HUElPMl8zMCB8IE1VWF9QQURfQ1RSTChNWDUxX0dQSU9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fQ1M1X19VU0JPVEdfRElSCQkoX01YNTFfUEFEX0VJTV9DUzVfX1VTQk9UR19ESVIgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fRFRBQ0tfX0VJTV9EVEFDSwkJKF9NWDUxX1BBRF9FSU1fRFRBQ0tfX0VJTV9EVEFDSyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9EVEFDS19fR1BJTzJfMzEJCShfTVg1MV9QQURfRUlNX0RUQUNLX19HUElPMl8zMSB8IE1VWF9QQURfQ1RSTChNWDUxX0dQSU9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fTEJBX19FSU1fTEJBCQkoX01YNTFfUEFEX0VJTV9MQkFfX0VJTV9MQkEgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fTEJBX19HUElPM18xCQkoX01YNTFfUEFEX0VJTV9MQkFfX0dQSU8zXzEgfCBNVVhfUEFEX0NUUkwoTVg1MV9HUElPX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0NSRV9fRUlNX0NSRQkJKF9NWDUxX1BBRF9FSU1fQ1JFX19FSU1fQ1JFIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0NSRV9fR1BJTzNfMgkJKF9NWDUxX1BBRF9FSU1fQ1JFX19HUElPM18yIHwgTVVYX1BBRF9DVFJMKE1YNTFfR1BJT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0RSQU1fQ1MxX19EUkFNX0NTMQkJKF9NWDUxX1BBRF9EUkFNX0NTMV9fRFJBTV9DUzEgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9XRV9CX19HUElPM18zCQkoX01YNTFfUEFEX05BTkRGX1dFX0JfX0dQSU8zXzMgfCBNVVhfUEFEX0NUUkwoTVg1MV9HUElPX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfTkFOREZfV0VfQl9fTkFOREZfV0VfQgkJKF9NWDUxX1BBRF9OQU5ERl9XRV9CX19OQU5ERl9XRV9CIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfTkFOREZfV0VfQl9fUEFUQV9ESU9XCQkoX01YNTFfUEFEX05BTkRGX1dFX0JfX1BBVEFfRElPVyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX05BTkRGX1dFX0JfX1NEM19EQVRBMAkJKF9NWDUxX1BBRF9OQU5ERl9XRV9CX19TRDNfREFUQTAgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9SRV9CX19HUElPM180CQkoX01YNTFfUEFEX05BTkRGX1JFX0JfX0dQSU8zXzQgfCBNVVhfUEFEX0NUUkwoTVg1MV9HUElPX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfTkFOREZfUkVfQl9fTkFOREZfUkVfQgkJKF9NWDUxX1BBRF9OQU5ERl9SRV9CX19OQU5ERl9SRV9CIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfTkFOREZfUkVfQl9fUEFUQV9ESU9SCQkoX01YNTFfUEFEX05BTkRGX1JFX0JfX1BBVEFfRElPUiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX05BTkRGX1JFX0JfX1NEM19EQVRBMQkJKF9NWDUxX1BBRF9OQU5ERl9SRV9CX19TRDNfREFUQTEgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9BTEVfX0dQSU8zXzUJCShfTVg1MV9QQURfTkFOREZfQUxFX19HUElPM181IHwgTVVYX1BBRF9DVFJMKE1YNTFfR1BJT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX05BTkRGX0FMRV9fTkFOREZfQUxFCQkoX01YNTFfUEFEX05BTkRGX0FMRV9fTkFOREZfQUxFIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfTkFOREZfQUxFX19QQVRBX0JVRkZFUl9FTgkoX01YNTFfUEFEX05BTkRGX0FMRV9fUEFUQV9CVUZGRVJfRU4gfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9DTEVfX0dQSU8zXzYJCShfTVg1MV9QQURfTkFOREZfQ0xFX19HUElPM182IHwgTVVYX1BBRF9DVFJMKE1YNTFfR1BJT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX05BTkRGX0NMRV9fTkFOREZfQ0xFCQkoX01YNTFfUEFEX05BTkRGX0NMRV9fTkFOREZfQ0xFIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfTkFOREZfQ0xFX19QQVRBX1JFU0VUX0IJKF9NWDUxX1BBRF9OQU5ERl9DTEVfX1BBVEFfUkVTRVRfQiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX05BTkRGX1dQX0JfX0dQSU8zXzcJCShfTVg1MV9QQURfTkFOREZfV1BfQl9fR1BJTzNfNyB8IE1VWF9QQURfQ1RSTChNWDUxX0dQSU9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9XUF9CX19OQU5ERl9XUF9CCQkoX01YNTFfUEFEX05BTkRGX1dQX0JfX05BTkRGX1dQX0IgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9XUF9CX19QQVRBX0RNQUNLCQkoX01YNTFfUEFEX05BTkRGX1dQX0JfX1BBVEFfRE1BQ0sgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9XUF9CX19TRDNfREFUQTIJCShfTVg1MV9QQURfTkFOREZfV1BfQl9fU0QzX0RBVEEyIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfTkFOREZfUkIwX19FQ1NQSTJfU1MxCQkoX01YNTFfUEFEX05BTkRGX1JCMF9fRUNTUEkyX1NTMSB8IE1VWF9QQURfQ1RSTChNWDUxX0VDU1BJX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfTkFOREZfUkIwX19HUElPM184CQkoX01YNTFfUEFEX05BTkRGX1JCMF9fR1BJTzNfOCB8IE1VWF9QQURfQ1RSTChNWDUxX0dQSU9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9SQjBfX05BTkRGX1JCMAkJKF9NWDUxX1BBRF9OQU5ERl9SQjBfX05BTkRGX1JCMCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX05BTkRGX1JCMF9fUEFUQV9ETUFSUQkJKF9NWDUxX1BBRF9OQU5ERl9SQjBfX1BBVEFfRE1BUlEgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9SQjBfX1NEM19EQVRBMwkJKF9NWDUxX1BBRF9OQU5ERl9SQjBfX1NEM19EQVRBMyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX05BTkRGX1JCMV9fQ1NQSV9NT1NJCQkoX01YNTFfUEFEX05BTkRGX1JCMV9fQ1NQSV9NT1NJIHwgTVVYX1BBRF9DVFJMKE1YNTFfRUNTUElfUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9SQjFfX0VDU1BJMl9SRFkJCShfTVg1MV9QQURfTkFOREZfUkIxX19FQ1NQSTJfUkRZIHwgTVVYX1BBRF9DVFJMKE1YNTFfRUNTUElfUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9SQjFfX0dQSU8zXzkJCShfTVg1MV9QQURfTkFOREZfUkIxX19HUElPM185IHwgTVVYX1BBRF9DVFJMKE1YNTFfR1BJT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX05BTkRGX1JCMV9fTkFOREZfUkIxCQkoX01YNTFfUEFEX05BTkRGX1JCMV9fTkFOREZfUkIxIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfTkFOREZfUkIxX19QQVRBX0lPUkRZCQkoX01YNTFfUEFEX05BTkRGX1JCMV9fUEFUQV9JT1JEWSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX05BTkRGX1JCMV9fU0Q0X0NNRAkJKF9NWDUxX1BBRF9OQU5ERl9SQjFfX1NENF9DTUQgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9SQjJfX0RJU1AyX1dBSVQJCShfTVg1MV9QQURfTkFOREZfUkIyX19ESVNQMl9XQUlUIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfTkFOREZfUkIyX19FQ1NQSTJfU0NMSwkJKF9NWDUxX1BBRF9OQU5ERl9SQjJfX0VDU1BJMl9TQ0xLIHwgTVVYX1BBRF9DVFJMKE1YNTFfRUNTUElfUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9SQjJfX0ZFQ19DT0wJCShfTVg1MV9QQURfTkFOREZfUkIyX19GRUNfQ09MIHwgTVVYX1BBRF9DVFJMKE1YNTFfUEFEX0NUUkxfMikpCisjZGVmaW5lIE1YNTFfUEFEX05BTkRGX1JCMl9fR1BJTzNfMTAJCShfTVg1MV9QQURfTkFOREZfUkIyX19HUElPM18xMCB8IE1VWF9QQURfQ1RSTChNWDUxX0dQSU9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9SQjJfX05BTkRGX1JCMgkJKF9NWDUxX1BBRF9OQU5ERl9SQjJfX05BTkRGX1JCMiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX05BTkRGX1JCMl9fVVNCSDNfSDNfRFAJCShfTVg1MV9QQURfTkFOREZfUkIyX19VU0JIM19IM19EUCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX05BTkRGX1JCMl9fVVNCSDNfTlhUCQkoX01YNTFfUEFEX05BTkRGX1JCMl9fVVNCSDNfTlhUIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfTkFOREZfUkIzX19ESVNQMV9XQUlUCQkoX01YNTFfUEFEX05BTkRGX1JCM19fRElTUDFfV0FJVCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX05BTkRGX1JCM19fRUNTUEkyX01JU08JCShfTVg1MV9QQURfTkFOREZfUkIzX19FQ1NQSTJfTUlTTyB8IE1VWF9QQURfQ1RSTChNWDUxX0VDU1BJX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfTkFOREZfUkIzX19GRUNfUlhfQ0xLCQkoX01YNTFfUEFEX05BTkRGX1JCM19fRkVDX1JYX0NMSyB8IE1VWF9QQURfQ1RSTChNWDUxX1BBRF9DVFJMXzIpKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9SQjNfX0dQSU8zXzExCQkoX01YNTFfUEFEX05BTkRGX1JCM19fR1BJTzNfMTEgfCBNVVhfUEFEX0NUUkwoTVg1MV9HUElPX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfTkFOREZfUkIzX19OQU5ERl9SQjMJCShfTVg1MV9QQURfTkFOREZfUkIzX19OQU5ERl9SQjMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9SQjNfX1VTQkgzX0NMSwkJKF9NWDUxX1BBRF9OQU5ERl9SQjNfX1VTQkgzX0NMSyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX05BTkRGX1JCM19fVVNCSDNfSDNfRE0JCShfTVg1MV9QQURfTkFOREZfUkIzX19VU0JIM19IM19ETSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0dQSU9fTkFORF9fR1BJT19OQU5ECQkoX01YNTFfUEFEX0dQSU9fTkFORF9fR1BJT19OQU5EIHwgTVVYX1BBRF9DVFJMKE1YNTFfR1BJT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0dQSU9fTkFORF9fUEFUQV9JTlRSUQkJKF9NWDUxX1BBRF9HUElPX05BTkRfX1BBVEFfSU5UUlEgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9DUzBfX0dQSU8zXzE2CQkoX01YNTFfUEFEX05BTkRGX0NTMF9fR1BJTzNfMTYgfCBNVVhfUEFEX0NUUkwoTVg1MV9HUElPX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfTkFOREZfQ1MwX19OQU5ERl9DUzAJCShfTVg1MV9QQURfTkFOREZfQ1MwX19OQU5ERl9DUzAgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9DUzFfX0dQSU8zXzE3CQkoX01YNTFfUEFEX05BTkRGX0NTMV9fR1BJTzNfMTcgfCBNVVhfUEFEX0NUUkwoTVg1MV9HUElPX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfTkFOREZfQ1MxX19OQU5ERl9DUzEJCShfTVg1MV9QQURfTkFOREZfQ1MxX19OQU5ERl9DUzEgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9DUzJfX0NTUElfU0NMSwkJKF9NWDUxX1BBRF9OQU5ERl9DUzJfX0NTUElfU0NMSyB8IE1VWF9QQURfQ1RSTChNWDUxX0VDU1BJX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfTkFOREZfQ1MyX19GRUNfVFhfRVIJCShfTVg1MV9QQURfTkFOREZfQ1MyX19GRUNfVFhfRVIgfCBNVVhfUEFEX0NUUkwoTVg1MV9QQURfQ1RSTF81KSkKKyNkZWZpbmUgTVg1MV9QQURfTkFOREZfQ1MyX19HUElPM18xOAkJKF9NWDUxX1BBRF9OQU5ERl9DUzJfX0dQSU8zXzE4IHwgTVVYX1BBRF9DVFJMKE1YNTFfR1BJT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX05BTkRGX0NTMl9fTkFOREZfQ1MyCQkoX01YNTFfUEFEX05BTkRGX0NTMl9fTkFOREZfQ1MyIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfTkFOREZfQ1MyX19QQVRBX0NTXzAJCShfTVg1MV9QQURfTkFOREZfQ1MyX19QQVRBX0NTXzAgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9DUzJfX1NENF9DTEsJCShfTVg1MV9QQURfTkFOREZfQ1MyX19TRDRfQ0xLIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfTkFOREZfQ1MyX19VU0JIM19IMV9EUAkJKF9NWDUxX1BBRF9OQU5ERl9DUzJfX1VTQkgzX0gxX0RQIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfTkFOREZfQ1MzX19GRUNfTURDCQkoX01YNTFfUEFEX05BTkRGX0NTM19fRkVDX01EQyB8IE1VWF9QQURfQ1RSTChNWDUxX1BBRF9DVFJMXzUpKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9DUzNfX0dQSU8zXzE5CQkoX01YNTFfUEFEX05BTkRGX0NTM19fR1BJTzNfMTkgfCBNVVhfUEFEX0NUUkwoTVg1MV9HUElPX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfTkFOREZfQ1MzX19OQU5ERl9DUzMJCShfTVg1MV9QQURfTkFOREZfQ1MzX19OQU5ERl9DUzMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9DUzNfX1BBVEFfQ1NfMQkJKF9NWDUxX1BBRF9OQU5ERl9DUzNfX1BBVEFfQ1NfMSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX05BTkRGX0NTM19fU0Q0X0RBVDAJCShfTVg1MV9QQURfTkFOREZfQ1MzX19TRDRfREFUMCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX05BTkRGX0NTM19fVVNCSDNfSDFfRE0JCShfTVg1MV9QQURfTkFOREZfQ1MzX19VU0JIM19IMV9ETSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX05BTkRGX0NTNF9fRkVDX1REQVRBMQkJKF9NWDUxX1BBRF9OQU5ERl9DUzRfX0ZFQ19UREFUQTEgfCBNVVhfUEFEX0NUUkwoTVg1MV9QQURfQ1RSTF81KSkKKyNkZWZpbmUgTVg1MV9QQURfTkFOREZfQ1M0X19HUElPM18yMAkJKF9NWDUxX1BBRF9OQU5ERl9DUzRfX0dQSU8zXzIwIHwgTVVYX1BBRF9DVFJMKE1YNTFfR1BJT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX05BTkRGX0NTNF9fTkFOREZfQ1M0CQkoX01YNTFfUEFEX05BTkRGX0NTNF9fTkFOREZfQ1M0IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfTkFOREZfQ1M0X19QQVRBX0RBXzAJCShfTVg1MV9QQURfTkFOREZfQ1M0X19QQVRBX0RBXzAgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9DUzRfX1NENF9EQVQxCQkoX01YNTFfUEFEX05BTkRGX0NTNF9fU0Q0X0RBVDEgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9DUzRfX1VTQkgzX1NUUAkJKF9NWDUxX1BBRF9OQU5ERl9DUzRfX1VTQkgzX1NUUCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX05BTkRGX0NTNV9fRkVDX1REQVRBMgkJKF9NWDUxX1BBRF9OQU5ERl9DUzVfX0ZFQ19UREFUQTIgfCBNVVhfUEFEX0NUUkwoTVg1MV9QQURfQ1RSTF81KSkKKyNkZWZpbmUgTVg1MV9QQURfTkFOREZfQ1M1X19HUElPM18yMQkJKF9NWDUxX1BBRF9OQU5ERl9DUzVfX0dQSU8zXzIxIHwgTVVYX1BBRF9DVFJMKE1YNTFfR1BJT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX05BTkRGX0NTNV9fTkFOREZfQ1M1CQkoX01YNTFfUEFEX05BTkRGX0NTNV9fTkFOREZfQ1M1IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfTkFOREZfQ1M1X19QQVRBX0RBXzEJCShfTVg1MV9QQURfTkFOREZfQ1M1X19QQVRBX0RBXzEgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9DUzVfX1NENF9EQVQyCQkoX01YNTFfUEFEX05BTkRGX0NTNV9fU0Q0X0RBVDIgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9DUzVfX1VTQkgzX0RJUgkJKF9NWDUxX1BBRF9OQU5ERl9DUzVfX1VTQkgzX0RJUiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX05BTkRGX0NTNl9fQ1NQSV9TUzMJCShfTVg1MV9QQURfTkFOREZfQ1M2X19DU1BJX1NTMyB8IE1VWF9QQURfQ1RSTChNWDUxX0VDU1BJX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfTkFOREZfQ1M2X19GRUNfVERBVEEzCQkoX01YNTFfUEFEX05BTkRGX0NTNl9fRkVDX1REQVRBMyB8IE1VWF9QQURfQ1RSTChNWDUxX1BBRF9DVFJMXzUpKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9DUzZfX0dQSU8zXzIyCQkoX01YNTFfUEFEX05BTkRGX0NTNl9fR1BJTzNfMjIgfCBNVVhfUEFEX0NUUkwoTVg1MV9HUElPX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfTkFOREZfQ1M2X19OQU5ERl9DUzYJCShfTVg1MV9QQURfTkFOREZfQ1M2X19OQU5ERl9DUzYgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9DUzZfX1BBVEFfREFfMgkJKF9NWDUxX1BBRF9OQU5ERl9DUzZfX1BBVEFfREFfMiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX05BTkRGX0NTNl9fU0Q0X0RBVDMJCShfTVg1MV9QQURfTkFOREZfQ1M2X19TRDRfREFUMyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX05BTkRGX0NTN19fRkVDX1RYX0VOCQkoX01YNTFfUEFEX05BTkRGX0NTN19fRkVDX1RYX0VOIHwgTVVYX1BBRF9DVFJMKE1YNTFfUEFEX0NUUkxfNSkpCisjZGVmaW5lIE1YNTFfUEFEX05BTkRGX0NTN19fR1BJTzNfMjMJCShfTVg1MV9QQURfTkFOREZfQ1M3X19HUElPM18yMyB8IE1VWF9QQURfQ1RSTChNWDUxX0dQSU9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9DUzdfX05BTkRGX0NTNwkJKF9NWDUxX1BBRF9OQU5ERl9DUzdfX05BTkRGX0NTNyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX05BTkRGX0NTN19fU0QzX0NMSwkJKF9NWDUxX1BBRF9OQU5ERl9DUzdfX1NEM19DTEsgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9SRFlfSU5UX19FQ1NQSTJfU1MwCShfTVg1MV9QQURfTkFOREZfUkRZX0lOVF9fRUNTUEkyX1NTMCB8IE1VWF9QQURfQ1RSTChNWDUxX0VDU1BJX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfTkFOREZfUkRZX0lOVF9fRkVDX1RYX0NMSwkoX01YNTFfUEFEX05BTkRGX1JEWV9JTlRfX0ZFQ19UWF9DTEsgfCBNVVhfUEFEX0NUUkwoTVg1MV9QQURfQ1RSTF80KSkKKyNkZWZpbmUgTVg1MV9QQURfTkFOREZfUkRZX0lOVF9fR1BJTzNfMjQJKF9NWDUxX1BBRF9OQU5ERl9SRFlfSU5UX19HUElPM18yNCB8IE1VWF9QQURfQ1RSTChNWDUxX0dQSU9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9SRFlfSU5UX19OQU5ERl9SRFlfSU5UCShfTVg1MV9QQURfTkFOREZfUkRZX0lOVF9fTkFOREZfUkRZX0lOVCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX05BTkRGX1JEWV9JTlRfX1NEM19DTUQJCShfTVg1MV9QQURfTkFOREZfUkRZX0lOVF9fU0QzX0NNRCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX05BTkRGX0QxNV9fRUNTUEkyX01PU0kJCShfTVg1MV9QQURfTkFOREZfRDE1X19FQ1NQSTJfTU9TSSB8IE1VWF9QQURfQ1RSTChNWDUxX0VDU1BJX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfTkFOREZfRDE1X19HUElPM18yNQkJKF9NWDUxX1BBRF9OQU5ERl9EMTVfX0dQSU8zXzI1IHwgTVVYX1BBRF9DVFJMKE1YNTFfR1BJT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX05BTkRGX0QxNV9fTkFOREZfRDE1CQkoX01YNTFfUEFEX05BTkRGX0QxNV9fTkFOREZfRDE1IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfTkFOREZfRDE1X19QQVRBX0RBVEExNQkJKF9NWDUxX1BBRF9OQU5ERl9EMTVfX1BBVEFfREFUQTE1IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfTkFOREZfRDE1X19TRDNfREFUNwkJKF9NWDUxX1BBRF9OQU5ERl9EMTVfX1NEM19EQVQ3IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfTkFOREZfRDE0X19FQ1NQSTJfU1MzCQkoX01YNTFfUEFEX05BTkRGX0QxNF9fRUNTUEkyX1NTMyB8IE1VWF9QQURfQ1RSTChNWDUxX0VDU1BJX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfTkFOREZfRDE0X19HUElPM18yNgkJKF9NWDUxX1BBRF9OQU5ERl9EMTRfX0dQSU8zXzI2IHwgTVVYX1BBRF9DVFJMKE1YNTFfR1BJT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX05BTkRGX0QxNF9fTkFOREZfRDE0CQkoX01YNTFfUEFEX05BTkRGX0QxNF9fTkFOREZfRDE0IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfTkFOREZfRDE0X19QQVRBX0RBVEExNAkJKF9NWDUxX1BBRF9OQU5ERl9EMTRfX1BBVEFfREFUQTE0IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfTkFOREZfRDE0X19TRDNfREFUNgkJKF9NWDUxX1BBRF9OQU5ERl9EMTRfX1NEM19EQVQ2IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfTkFOREZfRDEzX19FQ1NQSTJfU1MyCQkoX01YNTFfUEFEX05BTkRGX0QxM19fRUNTUEkyX1NTMiB8IE1VWF9QQURfQ1RSTChNWDUxX0VDU1BJX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfTkFOREZfRDEzX19HUElPM18yNwkJKF9NWDUxX1BBRF9OQU5ERl9EMTNfX0dQSU8zXzI3IHwgTVVYX1BBRF9DVFJMKE1YNTFfR1BJT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX05BTkRGX0QxM19fTkFOREZfRDEzCQkoX01YNTFfUEFEX05BTkRGX0QxM19fTkFOREZfRDEzIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfTkFOREZfRDEzX19QQVRBX0RBVEExMwkJKF9NWDUxX1BBRF9OQU5ERl9EMTNfX1BBVEFfREFUQTEzIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfTkFOREZfRDEzX19TRDNfREFUNQkJKF9NWDUxX1BBRF9OQU5ERl9EMTNfX1NEM19EQVQ1IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfTkFOREZfRDEyX19FQ1NQSTJfU1MxCQkoX01YNTFfUEFEX05BTkRGX0QxMl9fRUNTUEkyX1NTMSB8IE1VWF9QQURfQ1RSTChNWDUxX0VDU1BJX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfTkFOREZfRDEyX19HUElPM18yOAkJKF9NWDUxX1BBRF9OQU5ERl9EMTJfX0dQSU8zXzI4IHwgTVVYX1BBRF9DVFJMKE1YNTFfR1BJT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX05BTkRGX0QxMl9fTkFOREZfRDEyCQkoX01YNTFfUEFEX05BTkRGX0QxMl9fTkFOREZfRDEyIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfTkFOREZfRDEyX19QQVRBX0RBVEExMgkJKF9NWDUxX1BBRF9OQU5ERl9EMTJfX1BBVEFfREFUQTEyIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfTkFOREZfRDEyX19TRDNfREFUNAkJKF9NWDUxX1BBRF9OQU5ERl9EMTJfX1NEM19EQVQ0IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfTkFOREZfRDExX19GRUNfUlhfRFYJCShfTVg1MV9QQURfTkFOREZfRDExX19GRUNfUlhfRFYgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9EMTFfX0dQSU8zXzI5CQkoX01YNTFfUEFEX05BTkRGX0QxMV9fR1BJTzNfMjkgfCBNVVhfUEFEX0NUUkwoTVg1MV9HUElPX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfTkFOREZfRDExX19OQU5ERl9EMTEJCShfTVg1MV9QQURfTkFOREZfRDExX19OQU5ERl9EMTEgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9EMTFfX1BBVEFfREFUQTExCQkoX01YNTFfUEFEX05BTkRGX0QxMV9fUEFUQV9EQVRBMTEgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9EMTFfX1NEM19EQVRBMwkJKF9NWDUxX1BBRF9OQU5ERl9EMTFfX1NEM19EQVRBMyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX05BTkRGX0QxMF9fR1BJTzNfMzAJCShfTVg1MV9QQURfTkFOREZfRDEwX19HUElPM18zMCB8IE1VWF9QQURfQ1RSTChNWDUxX0dQSU9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9EMTBfX05BTkRGX0QxMAkJKF9NWDUxX1BBRF9OQU5ERl9EMTBfX05BTkRGX0QxMCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX05BTkRGX0QxMF9fUEFUQV9EQVRBMTAJCShfTVg1MV9QQURfTkFOREZfRDEwX19QQVRBX0RBVEExMCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX05BTkRGX0QxMF9fU0QzX0RBVEEyCQkoX01YNTFfUEFEX05BTkRGX0QxMF9fU0QzX0RBVEEyIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfTkFOREZfRDlfX0ZFQ19SREFUQTAJCShfTVg1MV9QQURfTkFOREZfRDlfX0ZFQ19SREFUQTAgfCBNVVhfUEFEX0NUUkwoTVg1MV9QQURfQ1RSTF80KSkKKyNkZWZpbmUgTVg1MV9QQURfTkFOREZfRDlfX0dQSU8zXzMxCQkoX01YNTFfUEFEX05BTkRGX0Q5X19HUElPM18zMSB8IE1VWF9QQURfQ1RSTChNWDUxX0dQSU9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9EOV9fTkFOREZfRDkJCShfTVg1MV9QQURfTkFOREZfRDlfX05BTkRGX0Q5IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfTkFOREZfRDlfX1BBVEFfREFUQTkJCShfTVg1MV9QQURfTkFOREZfRDlfX1BBVEFfREFUQTkgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9EOV9fU0QzX0RBVEExCQkoX01YNTFfUEFEX05BTkRGX0Q5X19TRDNfREFUQTEgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9EOF9fRkVDX1REQVRBMAkJKF9NWDUxX1BBRF9OQU5ERl9EOF9fRkVDX1REQVRBMCB8IE1VWF9QQURfQ1RSTChNWDUxX1BBRF9DVFJMXzUpKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9EOF9fR1BJTzRfMAkJKF9NWDUxX1BBRF9OQU5ERl9EOF9fR1BJTzRfMCB8IE1VWF9QQURfQ1RSTChNWDUxX0dQSU9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9EOF9fTkFOREZfRDgJCShfTVg1MV9QQURfTkFOREZfRDhfX05BTkRGX0Q4IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfTkFOREZfRDhfX1BBVEFfREFUQTgJCShfTVg1MV9QQURfTkFOREZfRDhfX1BBVEFfREFUQTggfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9EOF9fU0QzX0RBVEEwCQkoX01YNTFfUEFEX05BTkRGX0Q4X19TRDNfREFUQTAgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9EN19fR1BJTzRfMQkJKF9NWDUxX1BBRF9OQU5ERl9EN19fR1BJTzRfMSB8IE1VWF9QQURfQ1RSTChNWDUxX0dQSU9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9EN19fTkFOREZfRDcJCShfTVg1MV9QQURfTkFOREZfRDdfX05BTkRGX0Q3IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfTkFOREZfRDdfX1BBVEFfREFUQTcJCShfTVg1MV9QQURfTkFOREZfRDdfX1BBVEFfREFUQTcgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9EN19fVVNCSDNfREFUQTAJCShfTVg1MV9QQURfTkFOREZfRDdfX1VTQkgzX0RBVEEwIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfTkFOREZfRDZfX0dQSU80XzIJCShfTVg1MV9QQURfTkFOREZfRDZfX0dQSU80XzIgfCBNVVhfUEFEX0NUUkwoTVg1MV9HUElPX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfTkFOREZfRDZfX05BTkRGX0Q2CQkoX01YNTFfUEFEX05BTkRGX0Q2X19OQU5ERl9ENiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX05BTkRGX0Q2X19QQVRBX0RBVEE2CQkoX01YNTFfUEFEX05BTkRGX0Q2X19QQVRBX0RBVEE2IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfTkFOREZfRDZfX1NENF9MQ1RMCQkoX01YNTFfUEFEX05BTkRGX0Q2X19TRDRfTENUTCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX05BTkRGX0Q2X19VU0JIM19EQVRBMQkJKF9NWDUxX1BBRF9OQU5ERl9ENl9fVVNCSDNfREFUQTEgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9ENV9fR1BJTzRfMwkJKF9NWDUxX1BBRF9OQU5ERl9ENV9fR1BJTzRfMyB8IE1VWF9QQURfQ1RSTChNWDUxX0dQSU9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9ENV9fTkFOREZfRDUJCShfTVg1MV9QQURfTkFOREZfRDVfX05BTkRGX0Q1IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfTkFOREZfRDVfX1BBVEFfREFUQTUJCShfTVg1MV9QQURfTkFOREZfRDVfX1BBVEFfREFUQTUgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9ENV9fU0Q0X1dQCQkoX01YNTFfUEFEX05BTkRGX0Q1X19TRDRfV1AgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9ENV9fVVNCSDNfREFUQTIJCShfTVg1MV9QQURfTkFOREZfRDVfX1VTQkgzX0RBVEEyIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfTkFOREZfRDRfX0dQSU80XzQJCShfTVg1MV9QQURfTkFOREZfRDRfX0dQSU80XzQgfCBNVVhfUEFEX0NUUkwoTVg1MV9HUElPX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfTkFOREZfRDRfX05BTkRGX0Q0CQkoX01YNTFfUEFEX05BTkRGX0Q0X19OQU5ERl9ENCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX05BTkRGX0Q0X19QQVRBX0RBVEE0CQkoX01YNTFfUEFEX05BTkRGX0Q0X19QQVRBX0RBVEE0IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfTkFOREZfRDRfX1NENF9DRAkJKF9NWDUxX1BBRF9OQU5ERl9ENF9fU0Q0X0NEIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfTkFOREZfRDRfX1VTQkgzX0RBVEEzCQkoX01YNTFfUEFEX05BTkRGX0Q0X19VU0JIM19EQVRBMyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX05BTkRGX0QzX19HUElPNF81CQkoX01YNTFfUEFEX05BTkRGX0QzX19HUElPNF81IHwgTVVYX1BBRF9DVFJMKE1YNTFfR1BJT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX05BTkRGX0QzX19OQU5ERl9EMwkJKF9NWDUxX1BBRF9OQU5ERl9EM19fTkFOREZfRDMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9EM19fUEFUQV9EQVRBMwkJKF9NWDUxX1BBRF9OQU5ERl9EM19fUEFUQV9EQVRBMyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX05BTkRGX0QzX19TRDRfREFUNAkJKF9NWDUxX1BBRF9OQU5ERl9EM19fU0Q0X0RBVDQgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9EM19fVVNCSDNfREFUQTQJCShfTVg1MV9QQURfTkFOREZfRDNfX1VTQkgzX0RBVEE0IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfTkFOREZfRDJfX0dQSU80XzYJCShfTVg1MV9QQURfTkFOREZfRDJfX0dQSU80XzYgfCBNVVhfUEFEX0NUUkwoTVg1MV9HUElPX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfTkFOREZfRDJfX05BTkRGX0QyCQkoX01YNTFfUEFEX05BTkRGX0QyX19OQU5ERl9EMiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX05BTkRGX0QyX19QQVRBX0RBVEEyCQkoX01YNTFfUEFEX05BTkRGX0QyX19QQVRBX0RBVEEyIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfTkFOREZfRDJfX1NENF9EQVQ1CQkoX01YNTFfUEFEX05BTkRGX0QyX19TRDRfREFUNSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX05BTkRGX0QyX19VU0JIM19EQVRBNQkJKF9NWDUxX1BBRF9OQU5ERl9EMl9fVVNCSDNfREFUQTUgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9EMV9fR1BJTzRfNwkJKF9NWDUxX1BBRF9OQU5ERl9EMV9fR1BJTzRfNyB8IE1VWF9QQURfQ1RSTChNWDUxX0dQSU9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9EMV9fTkFOREZfRDEJCShfTVg1MV9QQURfTkFOREZfRDFfX05BTkRGX0QxIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfTkFOREZfRDFfX1BBVEFfREFUQTEJCShfTVg1MV9QQURfTkFOREZfRDFfX1BBVEFfREFUQTEgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9EMV9fU0Q0X0RBVDYJCShfTVg1MV9QQURfTkFOREZfRDFfX1NENF9EQVQ2IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfTkFOREZfRDFfX1VTQkgzX0RBVEE2CQkoX01YNTFfUEFEX05BTkRGX0QxX19VU0JIM19EQVRBNiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX05BTkRGX0QwX19HUElPNF84CQkoX01YNTFfUEFEX05BTkRGX0QwX19HUElPNF84IHwgTVVYX1BBRF9DVFJMKE1YNTFfR1BJT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX05BTkRGX0QwX19OQU5ERl9EMAkJKF9NWDUxX1BBRF9OQU5ERl9EMF9fTkFOREZfRDAgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9EMF9fUEFUQV9EQVRBMAkJKF9NWDUxX1BBRF9OQU5ERl9EMF9fUEFUQV9EQVRBMCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX05BTkRGX0QwX19TRDRfREFUNwkJKF9NWDUxX1BBRF9OQU5ERl9EMF9fU0Q0X0RBVDcgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9OQU5ERl9EMF9fVVNCSDNfREFUQTcJCShfTVg1MV9QQURfTkFOREZfRDBfX1VTQkgzX0RBVEE3IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfQ1NJMV9EOF9fQ1NJMV9EOAkJKF9NWDUxX1BBRF9DU0kxX0Q4X19DU0kxX0Q4IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfQ1NJMV9EOF9fR1BJTzNfMTIJCShfTVg1MV9QQURfQ1NJMV9EOF9fR1BJTzNfMTIgfCBNVVhfUEFEX0NUUkwoTVg1MV9HUElPX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfQ1NJMV9EOV9fQ1NJMV9EOQkJKF9NWDUxX1BBRF9DU0kxX0Q5X19DU0kxX0Q5IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfQ1NJMV9EOV9fR1BJTzNfMTMJCShfTVg1MV9QQURfQ1NJMV9EOV9fR1BJTzNfMTMgfCBNVVhfUEFEX0NUUkwoTVg1MV9HUElPX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfQ1NJMV9EMTBfX0NTSTFfRDEwCQkoX01YNTFfUEFEX0NTSTFfRDEwX19DU0kxX0QxMCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0NTSTFfRDExX19DU0kxX0QxMQkJKF9NWDUxX1BBRF9DU0kxX0QxMV9fQ1NJMV9EMTEgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9DU0kxX0QxMl9fQ1NJMV9EMTIJCShfTVg1MV9QQURfQ1NJMV9EMTJfX0NTSTFfRDEyIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfQ1NJMV9EMTNfX0NTSTFfRDEzCQkoX01YNTFfUEFEX0NTSTFfRDEzX19DU0kxX0QxMyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0NTSTFfRDE0X19DU0kxX0QxNAkJKF9NWDUxX1BBRF9DU0kxX0QxNF9fQ1NJMV9EMTQgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9DU0kxX0QxNV9fQ1NJMV9EMTUJCShfTVg1MV9QQURfQ1NJMV9EMTVfX0NTSTFfRDE1IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfQ1NJMV9EMTZfX0NTSTFfRDE2CQkoX01YNTFfUEFEX0NTSTFfRDE2X19DU0kxX0QxNiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0NTSTFfRDE3X19DU0kxX0QxNwkJKF9NWDUxX1BBRF9DU0kxX0QxN19fQ1NJMV9EMTcgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9DU0kxX0QxOF9fQ1NJMV9EMTgJCShfTVg1MV9QQURfQ1NJMV9EMThfX0NTSTFfRDE4IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfQ1NJMV9EMTlfX0NTSTFfRDE5CQkoX01YNTFfUEFEX0NTSTFfRDE5X19DU0kxX0QxOSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0NTSTFfVlNZTkNfX0NTSTFfVlNZTkMJCShfTVg1MV9QQURfQ1NJMV9WU1lOQ19fQ1NJMV9WU1lOQyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0NTSTFfVlNZTkNfX0dQSU8zXzE0CQkoX01YNTFfUEFEX0NTSTFfVlNZTkNfX0dQSU8zXzE0IHwgTVVYX1BBRF9DVFJMKE1YNTFfR1BJT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0NTSTFfSFNZTkNfX0NTSTFfSFNZTkMJCShfTVg1MV9QQURfQ1NJMV9IU1lOQ19fQ1NJMV9IU1lOQyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0NTSTFfSFNZTkNfX0dQSU8zXzE1CQkoX01YNTFfUEFEX0NTSTFfSFNZTkNfX0dQSU8zXzE1IHwgTVVYX1BBRF9DVFJMKE1YNTFfR1BJT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0NTSTFfUElYQ0xLX19DU0kxX1BJWENMSwkoX01YNTFfUEFEX0NTSTFfUElYQ0xLX19DU0kxX1BJWENMSyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0NTSTFfTUNMS19fQ1NJMV9NQ0xLCQkoX01YNTFfUEFEX0NTSTFfTUNMS19fQ1NJMV9NQ0xLIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfQ1NJMl9EMTJfX0NTSTJfRDEyCQkoX01YNTFfUEFEX0NTSTJfRDEyX19DU0kyX0QxMiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0NTSTJfRDEyX19HUElPNF85CQkoX01YNTFfUEFEX0NTSTJfRDEyX19HUElPNF85IHwgTVVYX1BBRF9DVFJMKE1YNTFfR1BJT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0NTSTJfRDEzX19DU0kyX0QxMwkJKF9NWDUxX1BBRF9DU0kyX0QxM19fQ1NJMl9EMTMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9DU0kyX0QxM19fR1BJTzRfMTAJCShfTVg1MV9QQURfQ1NJMl9EMTNfX0dQSU80XzEwIHwgTVVYX1BBRF9DVFJMKE1YNTFfR1BJT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0NTSTJfRDE0X19DU0kyX0QxNAkJKF9NWDUxX1BBRF9DU0kyX0QxNF9fQ1NJMl9EMTQgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9DU0kyX0QxNV9fQ1NJMl9EMTUJCShfTVg1MV9QQURfQ1NJMl9EMTVfX0NTSTJfRDE1IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfQ1NJMl9EMTZfX0NTSTJfRDE2CQkoX01YNTFfUEFEX0NTSTJfRDE2X19DU0kyX0QxNiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0NTSTJfRDE3X19DU0kyX0QxNwkJKF9NWDUxX1BBRF9DU0kyX0QxN19fQ1NJMl9EMTcgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9DU0kyX0QxOF9fQ1NJMl9EMTgJCShfTVg1MV9QQURfQ1NJMl9EMThfX0NTSTJfRDE4IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfQ1NJMl9EMThfX0dQSU80XzExCQkoX01YNTFfUEFEX0NTSTJfRDE4X19HUElPNF8xMSB8IE1VWF9QQURfQ1RSTChNWDUxX0dQSU9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9DU0kyX0QxOV9fQ1NJMl9EMTkJCShfTVg1MV9QQURfQ1NJMl9EMTlfX0NTSTJfRDE5IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfQ1NJMl9EMTlfX0dQSU80XzEyCQkoX01YNTFfUEFEX0NTSTJfRDE5X19HUElPNF8xMiB8IE1VWF9QQURfQ1RSTChNWDUxX0dQSU9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9DU0kyX1ZTWU5DX19DU0kyX1ZTWU5DCQkoX01YNTFfUEFEX0NTSTJfVlNZTkNfX0NTSTJfVlNZTkMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9DU0kyX1ZTWU5DX19HUElPNF8xMwkJKF9NWDUxX1BBRF9DU0kyX1ZTWU5DX19HUElPNF8xMyB8IE1VWF9QQURfQ1RSTChNWDUxX0dQSU9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9DU0kyX0hTWU5DX19DU0kyX0hTWU5DCQkoX01YNTFfUEFEX0NTSTJfSFNZTkNfX0NTSTJfSFNZTkMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9DU0kyX0hTWU5DX19HUElPNF8xNAkJKF9NWDUxX1BBRF9DU0kyX0hTWU5DX19HUElPNF8xNCB8IE1VWF9QQURfQ1RSTChNWDUxX0dQSU9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9DU0kyX1BJWENMS19fQ1NJMl9QSVhDTEsJKF9NWDUxX1BBRF9DU0kyX1BJWENMS19fQ1NJMl9QSVhDTEsgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9DU0kyX1BJWENMS19fR1BJTzRfMTUJCShfTVg1MV9QQURfQ1NJMl9QSVhDTEtfX0dQSU80XzE1IHwgTVVYX1BBRF9DVFJMKE1YNTFfR1BJT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0kyQzFfQ0xLX19HUElPNF8xNgkJKF9NWDUxX1BBRF9JMkMxX0NMS19fR1BJTzRfMTYgfCBNVVhfUEFEX0NUUkwoTVg1MV9HUElPX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfSTJDMV9DTEtfX0kyQzFfQ0xLCQkoX01YNTFfUEFEX0kyQzFfQ0xLX19JMkMxX0NMSyB8IE1VWF9QQURfQ1RSTChNWDUxX0kyQ19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0kyQzFfREFUX19HUElPNF8xNwkJKF9NWDUxX1BBRF9JMkMxX0RBVF9fR1BJTzRfMTcgfCBNVVhfUEFEX0NUUkwoTVg1MV9HUElPX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfSTJDMV9EQVRfX0kyQzFfREFUCQkoX01YNTFfUEFEX0kyQzFfREFUX19JMkMxX0RBVCB8IE1VWF9QQURfQ1RSTChNWDUxX0kyQ19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0FVRDNfQkJfVFhEX19BVUQzX1RYRAkJKF9NWDUxX1BBRF9BVUQzX0JCX1RYRF9fQVVEM19UWEQgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9BVUQzX0JCX1RYRF9fR1BJTzRfMTgJCShfTVg1MV9QQURfQVVEM19CQl9UWERfX0dQSU80XzE4IHwgTVVYX1BBRF9DVFJMKE1YNTFfR1BJT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0FVRDNfQkJfUlhEX19BVUQzX1JYRAkJKF9NWDUxX1BBRF9BVUQzX0JCX1JYRF9fQVVEM19SWEQgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9BVUQzX0JCX1JYRF9fR1BJTzRfMTkJCShfTVg1MV9QQURfQVVEM19CQl9SWERfX0dQSU80XzE5IHwgTVVYX1BBRF9DVFJMKE1YNTFfR1BJT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0FVRDNfQkJfUlhEX19VQVJUM19SWEQJCShfTVg1MV9QQURfQVVEM19CQl9SWERfX1VBUlQzX1JYRCB8IE1VWF9QQURfQ1RSTChNWDUxX1VBUlRfUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9BVUQzX0JCX0NLX19BVUQzX1RYQwkJKF9NWDUxX1BBRF9BVUQzX0JCX0NLX19BVUQzX1RYQyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0FVRDNfQkJfQ0tfX0dQSU80XzIwCQkoX01YNTFfUEFEX0FVRDNfQkJfQ0tfX0dQSU80XzIwIHwgTVVYX1BBRF9DVFJMKE1YNTFfR1BJT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0FVRDNfQkJfRlNfX0FVRDNfVFhGUwkJKF9NWDUxX1BBRF9BVUQzX0JCX0ZTX19BVUQzX1RYRlMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9BVUQzX0JCX0ZTX19HUElPNF8yMQkJKF9NWDUxX1BBRF9BVUQzX0JCX0ZTX19HUElPNF8yMSB8IE1VWF9QQURfQ1RSTChNWDUxX0dQSU9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9BVUQzX0JCX0ZTX19VQVJUM19UWEQJCShfTVg1MV9QQURfQVVEM19CQl9GU19fVUFSVDNfVFhEIHwgTVVYX1BBRF9DVFJMKE1YNTFfVUFSVF9QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0NTUEkxX01PU0lfX0VDU1BJMV9NT1NJCShfTVg1MV9QQURfQ1NQSTFfTU9TSV9fRUNTUEkxX01PU0kgfCBNVVhfUEFEX0NUUkwoTVg1MV9FQ1NQSV9QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0NTUEkxX01PU0lfX0dQSU80XzIyCQkoX01YNTFfUEFEX0NTUEkxX01PU0lfX0dQSU80XzIyIHwgTVVYX1BBRF9DVFJMKE1YNTFfR1BJT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0NTUEkxX01PU0lfX0kyQzFfU0RBCQkoX01YNTFfUEFEX0NTUEkxX01PU0lfX0kyQzFfU0RBIHwgTVVYX1BBRF9DVFJMKE1YNTFfSTJDX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfQ1NQSTFfTUlTT19fQVVENF9SWEQJCShfTVg1MV9QQURfQ1NQSTFfTUlTT19fQVVENF9SWEQgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9DU1BJMV9NSVNPX19FQ1NQSTFfTUlTTwkoX01YNTFfUEFEX0NTUEkxX01JU09fX0VDU1BJMV9NSVNPIHwgTVVYX1BBRF9DVFJMKE1YNTFfRUNTUElfUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9DU1BJMV9NSVNPX19HUElPNF8yMwkJKF9NWDUxX1BBRF9DU1BJMV9NSVNPX19HUElPNF8yMyB8IE1VWF9QQURfQ1RSTChNWDUxX0dQSU9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9DU1BJMV9TUzBfX0FVRDRfVFhDCQkoX01YNTFfUEFEX0NTUEkxX1NTMF9fQVVENF9UWEMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9DU1BJMV9TUzBfX0VDU1BJMV9TUzAJCShfTVg1MV9QQURfQ1NQSTFfU1MwX19FQ1NQSTFfU1MwIHwgTVVYX1BBRF9DVFJMKE1YNTFfRUNTUElfUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9DU1BJMV9TUzBfX0dQSU80XzI0CQkoX01YNTFfUEFEX0NTUEkxX1NTMF9fR1BJTzRfMjQgfCBNVVhfUEFEX0NUUkwoTVg1MV9HUElPX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfQ1NQSTFfU1MxX19BVUQ0X1RYRAkJKF9NWDUxX1BBRF9DU1BJMV9TUzFfX0FVRDRfVFhEIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfQ1NQSTFfU1MxX19FQ1NQSTFfU1MxCQkoX01YNTFfUEFEX0NTUEkxX1NTMV9fRUNTUEkxX1NTMSB8IE1VWF9QQURfQ1RSTChNWDUxX0VDU1BJX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfQ1NQSTFfU1MxX19HUElPNF8yNQkJKF9NWDUxX1BBRF9DU1BJMV9TUzFfX0dQSU80XzI1IHwgTVVYX1BBRF9DVFJMKE1YNTFfR1BJT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0NTUEkxX1JEWV9fQVVENF9UWEZTCQkoX01YNTFfUEFEX0NTUEkxX1JEWV9fQVVENF9UWEZTIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfQ1NQSTFfUkRZX19FQ1NQSTFfUkRZCQkoX01YNTFfUEFEX0NTUEkxX1JEWV9fRUNTUEkxX1JEWSB8IE1VWF9QQURfQ1RSTChNWDUxX0VDU1BJX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfQ1NQSTFfUkRZX19HUElPNF8yNgkJKF9NWDUxX1BBRF9DU1BJMV9SRFlfX0dQSU80XzI2IHwgTVVYX1BBRF9DVFJMKE1YNTFfR1BJT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0NTUEkxX1NDTEtfX0VDU1BJMV9TQ0xLCShfTVg1MV9QQURfQ1NQSTFfU0NMS19fRUNTUEkxX1NDTEsgfCBNVVhfUEFEX0NUUkwoTVg1MV9FQ1NQSV9QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0NTUEkxX1NDTEtfX0dQSU80XzI3CQkoX01YNTFfUEFEX0NTUEkxX1NDTEtfX0dQSU80XzI3IHwgTVVYX1BBRF9DVFJMKE1YNTFfR1BJT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0NTUEkxX1NDTEtfX0kyQzFfU0NMCQkoX01YNTFfUEFEX0NTUEkxX1NDTEtfX0kyQzFfU0NMIHwgTVVYX1BBRF9DVFJMKE1YNTFfSTJDX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfVUFSVDFfUlhEX19HUElPNF8yOAkJKF9NWDUxX1BBRF9VQVJUMV9SWERfX0dQSU80XzI4IHwgTVVYX1BBRF9DVFJMKE1YNTFfR1BJT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX1VBUlQxX1JYRF9fVUFSVDFfUlhECQkoX01YNTFfUEFEX1VBUlQxX1JYRF9fVUFSVDFfUlhEIHwgTVVYX1BBRF9DVFJMKE1YNTFfVUFSVF9QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX1VBUlQxX1RYRF9fR1BJTzRfMjkJCShfTVg1MV9QQURfVUFSVDFfVFhEX19HUElPNF8yOSB8IE1VWF9QQURfQ1RSTChNWDUxX0dQSU9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9VQVJUMV9UWERfX1BXTTJfUFdNTwkJKF9NWDUxX1BBRF9VQVJUMV9UWERfX1BXTTJfUFdNTyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX1VBUlQxX1RYRF9fVUFSVDFfVFhECQkoX01YNTFfUEFEX1VBUlQxX1RYRF9fVUFSVDFfVFhEIHwgTVVYX1BBRF9DVFJMKE1YNTFfVUFSVF9QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX1VBUlQxX1JUU19fR1BJTzRfMzAJCShfTVg1MV9QQURfVUFSVDFfUlRTX19HUElPNF8zMCB8IE1VWF9QQURfQ1RSTChNWDUxX0dQSU9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9VQVJUMV9SVFNfX1VBUlQxX1JUUwkJKF9NWDUxX1BBRF9VQVJUMV9SVFNfX1VBUlQxX1JUUyB8IE1VWF9QQURfQ1RSTChNWDUxX1VBUlRfUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9VQVJUMV9DVFNfX0dQSU80XzMxCQkoX01YNTFfUEFEX1VBUlQxX0NUU19fR1BJTzRfMzEgfCBNVVhfUEFEX0NUUkwoTVg1MV9HUElPX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfVUFSVDFfQ1RTX19VQVJUMV9DVFMJCShfTVg1MV9QQURfVUFSVDFfQ1RTX19VQVJUMV9DVFMgfCBNVVhfUEFEX0NUUkwoTVg1MV9VQVJUX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfVUFSVDJfUlhEX19GSVJJX1RYRAkJKF9NWDUxX1BBRF9VQVJUMl9SWERfX0ZJUklfVFhEIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfVUFSVDJfUlhEX19HUElPMV8yMAkJKF9NWDUxX1BBRF9VQVJUMl9SWERfX0dQSU8xXzIwIHwgTVVYX1BBRF9DVFJMKE1YNTFfR1BJT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX1VBUlQyX1JYRF9fVUFSVDJfUlhECQkoX01YNTFfUEFEX1VBUlQyX1JYRF9fVUFSVDJfUlhEIHwgTVVYX1BBRF9DVFJMKE1YNTFfVUFSVF9QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX1VBUlQyX1RYRF9fRklSSV9SWEQJCShfTVg1MV9QQURfVUFSVDJfVFhEX19GSVJJX1JYRCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX1VBUlQyX1RYRF9fR1BJTzFfMjEJCShfTVg1MV9QQURfVUFSVDJfVFhEX19HUElPMV8yMSB8IE1VWF9QQURfQ1RSTChNWDUxX0dQSU9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9VQVJUMl9UWERfX1VBUlQyX1RYRAkJKF9NWDUxX1BBRF9VQVJUMl9UWERfX1VBUlQyX1RYRCB8IE1VWF9QQURfQ1RSTChNWDUxX1VBUlRfUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9VQVJUM19SWERfX0NTSTFfRDAJCShfTVg1MV9QQURfVUFSVDNfUlhEX19DU0kxX0QwIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfVUFSVDNfUlhEX19HUElPMV8yMgkJKF9NWDUxX1BBRF9VQVJUM19SWERfX0dQSU8xXzIyIHwgTVVYX1BBRF9DVFJMKE1YNTFfR1BJT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX1VBUlQzX1JYRF9fVUFSVDFfRFRSCQkoX01YNTFfUEFEX1VBUlQzX1JYRF9fVUFSVDFfRFRSIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfVUFSVDNfUlhEX19VQVJUM19SWEQJCShfTVg1MV9QQURfVUFSVDNfUlhEX19VQVJUM19SWEQgfCBNVVhfUEFEX0NUUkwoTVg1MV9VQVJUX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfVUFSVDNfVFhEX19DU0kxX0QxCQkoX01YNTFfUEFEX1VBUlQzX1RYRF9fQ1NJMV9EMSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX1VBUlQzX1RYRF9fR1BJTzFfMjMJCShfTVg1MV9QQURfVUFSVDNfVFhEX19HUElPMV8yMyB8IE1VWF9QQURfQ1RSTChNWDUxX0dQSU9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9VQVJUM19UWERfX1VBUlQxX0RTUgkJKF9NWDUxX1BBRF9VQVJUM19UWERfX1VBUlQxX0RTUiB8IE1VWF9QQURfQ1RSTChNWDUxX1VBUlRfUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9VQVJUM19UWERfX1VBUlQzX1RYRAkJKF9NWDUxX1BBRF9VQVJUM19UWERfX1VBUlQzX1RYRCB8IE1VWF9QQURfQ1RSTChNWDUxX1VBUlRfUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9PV0lSRV9MSU5FX19HUElPMV8yNAkJKF9NWDUxX1BBRF9PV0lSRV9MSU5FX19HUElPMV8yNCB8IE1VWF9QQURfQ1RSTChNWDUxX0dQSU9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9PV0lSRV9MSU5FX19PV0lSRV9MSU5FCQkoX01YNTFfUEFEX09XSVJFX0xJTkVfX09XSVJFX0xJTkUgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9PV0lSRV9MSU5FX19TUERJRl9PVVQJCShfTVg1MV9QQURfT1dJUkVfTElORV9fU1BESUZfT1VUIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfS0VZX1JPVzBfX0tFWV9ST1cwCQkoX01YNTFfUEFEX0tFWV9ST1cwX19LRVlfUk9XMCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0tFWV9ST1cxX19LRVlfUk9XMQkJKF9NWDUxX1BBRF9LRVlfUk9XMV9fS0VZX1JPVzEgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9LRVlfUk9XMl9fS0VZX1JPVzIJCShfTVg1MV9QQURfS0VZX1JPVzJfX0tFWV9ST1cyIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfS0VZX1JPVzNfX0tFWV9ST1czCQkoX01YNTFfUEFEX0tFWV9ST1czX19LRVlfUk9XMyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0tFWV9DT0wwX19LRVlfQ09MMAkJKF9NWDUxX1BBRF9LRVlfQ09MMF9fS0VZX0NPTDAgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9LRVlfQ09MMF9fUExMMV9CWVAJCShfTVg1MV9QQURfS0VZX0NPTDBfX1BMTDFfQllQIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfS0VZX0NPTDFfX0tFWV9DT0wxCQkoX01YNTFfUEFEX0tFWV9DT0wxX19LRVlfQ09MMSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0tFWV9DT0wxX19QTEwyX0JZUAkJKF9NWDUxX1BBRF9LRVlfQ09MMV9fUExMMl9CWVAgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9LRVlfQ09MMl9fS0VZX0NPTDIJCShfTVg1MV9QQURfS0VZX0NPTDJfX0tFWV9DT0wyIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfS0VZX0NPTDJfX1BMTDNfQllQCQkoX01YNTFfUEFEX0tFWV9DT0wyX19QTEwzX0JZUCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0tFWV9DT0wzX19LRVlfQ09MMwkJKF9NWDUxX1BBRF9LRVlfQ09MM19fS0VZX0NPTDMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9LRVlfQ09MNF9fSTJDMl9TQ0wJCShfTVg1MV9QQURfS0VZX0NPTDRfX0kyQzJfU0NMIHwgTVVYX1BBRF9DVFJMKE1YNTFfSTJDX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfS0VZX0NPTDRfX0tFWV9DT0w0CQkoX01YNTFfUEFEX0tFWV9DT0w0X19LRVlfQ09MNCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0tFWV9DT0w0X19TUERJRl9PVVQxCQkoX01YNTFfUEFEX0tFWV9DT0w0X19TUERJRl9PVVQxIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfS0VZX0NPTDRfX1VBUlQxX1JJCQkoX01YNTFfUEFEX0tFWV9DT0w0X19VQVJUMV9SSSB8IE1VWF9QQURfQ1RSTChNWDUxX1VBUlRfUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9LRVlfQ09MNF9fVUFSVDNfUlRTCQkoX01YNTFfUEFEX0tFWV9DT0w0X19VQVJUM19SVFMgfCBNVVhfUEFEX0NUUkwoTVg1MV9VQVJUX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfS0VZX0NPTDVfX0kyQzJfU0RBCQkoX01YNTFfUEFEX0tFWV9DT0w1X19JMkMyX1NEQSB8IE1VWF9QQURfQ1RSTChNWDUxX0kyQ19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0tFWV9DT0w1X19LRVlfQ09MNQkJKF9NWDUxX1BBRF9LRVlfQ09MNV9fS0VZX0NPTDUgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9LRVlfQ09MNV9fVUFSVDFfRENECQkoX01YNTFfUEFEX0tFWV9DT0w1X19VQVJUMV9EQ0QgfCBNVVhfUEFEX0NUUkwoTVg1MV9VQVJUX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfS0VZX0NPTDVfX1VBUlQzX0NUUwkJKF9NWDUxX1BBRF9LRVlfQ09MNV9fVUFSVDNfQ1RTIHwgTVVYX1BBRF9DVFJMKE1YNTFfVUFSVF9QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX1VTQkgxX0NMS19fQ1NQSV9TQ0xLCQkoX01YNTFfUEFEX1VTQkgxX0NMS19fQ1NQSV9TQ0xLIHwgTVVYX1BBRF9DVFJMKE1YNTFfRUNTUElfUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9VU0JIMV9DTEtfX0dQSU8xXzI1CQkoX01YNTFfUEFEX1VTQkgxX0NMS19fR1BJTzFfMjUgfCBNVVhfUEFEX0NUUkwoTVg1MV9HUElPX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfVVNCSDFfQ0xLX19JMkMyX1NDTAkJKF9NWDUxX1BBRF9VU0JIMV9DTEtfX0kyQzJfU0NMIHwgTVVYX1BBRF9DVFJMKE1YNTFfSTJDX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfVVNCSDFfQ0xLX19VU0JIMV9DTEsJCShfTVg1MV9QQURfVVNCSDFfQ0xLX19VU0JIMV9DTEsgfCBNVVhfUEFEX0NUUkwoTVg1MV9VU0JIMV9QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX1VTQkgxX0RJUl9fQ1NQSV9NT1NJCQkoX01YNTFfUEFEX1VTQkgxX0RJUl9fQ1NQSV9NT1NJIHwgTVVYX1BBRF9DVFJMKE1YNTFfRUNTUElfUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9VU0JIMV9ESVJfX0dQSU8xXzI2CQkoX01YNTFfUEFEX1VTQkgxX0RJUl9fR1BJTzFfMjYgfCBNVVhfUEFEX0NUUkwoTVg1MV9HUElPX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfVVNCSDFfRElSX19JMkMyX1NEQQkJKF9NWDUxX1BBRF9VU0JIMV9ESVJfX0kyQzJfU0RBIHwgTVVYX1BBRF9DVFJMKE1YNTFfSTJDX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfVVNCSDFfRElSX19VU0JIMV9ESVIJCShfTVg1MV9QQURfVVNCSDFfRElSX19VU0JIMV9ESVIgfCBNVVhfUEFEX0NUUkwoTVg1MV9VU0JIMV9QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX1VTQkgxX1NUUF9fQ1NQSV9SRFkJCShfTVg1MV9QQURfVVNCSDFfU1RQX19DU1BJX1JEWSB8IE1VWF9QQURfQ1RSTChNWDUxX0VDU1BJX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfVVNCSDFfU1RQX19HUElPMV8yNwkJKF9NWDUxX1BBRF9VU0JIMV9TVFBfX0dQSU8xXzI3IHwgTVVYX1BBRF9DVFJMKE1YNTFfR1BJT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX1VTQkgxX1NUUF9fVUFSVDNfUlhECQkoX01YNTFfUEFEX1VTQkgxX1NUUF9fVUFSVDNfUlhEIHwgTVVYX1BBRF9DVFJMKE1YNTFfVUFSVF9QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX1VTQkgxX1NUUF9fVVNCSDFfU1RQCQkoX01YNTFfUEFEX1VTQkgxX1NUUF9fVVNCSDFfU1RQIHwgTVVYX1BBRF9DVFJMKE1YNTFfVVNCSDFfUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9VU0JIMV9OWFRfX0NTUElfTUlTTwkJKF9NWDUxX1BBRF9VU0JIMV9OWFRfX0NTUElfTUlTTyB8IE1VWF9QQURfQ1RSTChNWDUxX0VDU1BJX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfVVNCSDFfTlhUX19HUElPMV8yOAkJKF9NWDUxX1BBRF9VU0JIMV9OWFRfX0dQSU8xXzI4IHwgTVVYX1BBRF9DVFJMKE1YNTFfR1BJT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX1VTQkgxX05YVF9fVUFSVDNfVFhECQkoX01YNTFfUEFEX1VTQkgxX05YVF9fVUFSVDNfVFhEIHwgTVVYX1BBRF9DVFJMKE1YNTFfVUFSVF9QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX1VTQkgxX05YVF9fVVNCSDFfTlhUCQkoX01YNTFfUEFEX1VTQkgxX05YVF9fVVNCSDFfTlhUIHwgTVVYX1BBRF9DVFJMKE1YNTFfVVNCSDFfUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9VU0JIMV9EQVRBMF9fR1BJTzFfMTEJCShfTVg1MV9QQURfVVNCSDFfREFUQTBfX0dQSU8xXzExIHwgTVVYX1BBRF9DVFJMKE1YNTFfR1BJT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX1VTQkgxX0RBVEEwX19VQVJUMl9DVFMJCShfTVg1MV9QQURfVVNCSDFfREFUQTBfX1VBUlQyX0NUUyB8IE1VWF9QQURfQ1RSTChNWDUxX1VBUlRfUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9VU0JIMV9EQVRBMF9fVVNCSDFfREFUQTAJKF9NWDUxX1BBRF9VU0JIMV9EQVRBMF9fVVNCSDFfREFUQTAgfCBNVVhfUEFEX0NUUkwoTVg1MV9VU0JIMV9QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX1VTQkgxX0RBVEExX19HUElPMV8xMgkJKF9NWDUxX1BBRF9VU0JIMV9EQVRBMV9fR1BJTzFfMTIgfCBNVVhfUEFEX0NUUkwoTVg1MV9HUElPX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfVVNCSDFfREFUQTFfX1VBUlQyX1JYRAkJKF9NWDUxX1BBRF9VU0JIMV9EQVRBMV9fVUFSVDJfUlhEIHwgTVVYX1BBRF9DVFJMKE1YNTFfVUFSVF9QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX1VTQkgxX0RBVEExX19VU0JIMV9EQVRBMQkoX01YNTFfUEFEX1VTQkgxX0RBVEExX19VU0JIMV9EQVRBMSB8IE1VWF9QQURfQ1RSTChNWDUxX1VTQkgxX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfVVNCSDFfREFUQTJfX0dQSU8xXzEzCQkoX01YNTFfUEFEX1VTQkgxX0RBVEEyX19HUElPMV8xMyB8IE1VWF9QQURfQ1RSTChNWDUxX0dQSU9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9VU0JIMV9EQVRBMl9fVUFSVDJfVFhECQkoX01YNTFfUEFEX1VTQkgxX0RBVEEyX19VQVJUMl9UWEQgfCBNVVhfUEFEX0NUUkwoTVg1MV9VQVJUX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfVVNCSDFfREFUQTJfX1VTQkgxX0RBVEEyCShfTVg1MV9QQURfVVNCSDFfREFUQTJfX1VTQkgxX0RBVEEyIHwgTVVYX1BBRF9DVFJMKE1YNTFfVVNCSDFfUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9VU0JIMV9EQVRBM19fR1BJTzFfMTQJCShfTVg1MV9QQURfVVNCSDFfREFUQTNfX0dQSU8xXzE0IHwgTVVYX1BBRF9DVFJMKE1YNTFfR1BJT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX1VTQkgxX0RBVEEzX19VQVJUMl9SVFMJCShfTVg1MV9QQURfVVNCSDFfREFUQTNfX1VBUlQyX1JUUyB8IE1VWF9QQURfQ1RSTChNWDUxX1VBUlRfUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9VU0JIMV9EQVRBM19fVVNCSDFfREFUQTMJKF9NWDUxX1BBRF9VU0JIMV9EQVRBM19fVVNCSDFfREFUQTMgfCBNVVhfUEFEX0NUUkwoTVg1MV9VU0JIMV9QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX1VTQkgxX0RBVEE0X19DU1BJX1NTMAkJKF9NWDUxX1BBRF9VU0JIMV9EQVRBNF9fQ1NQSV9TUzAgfCBNVVhfUEFEX0NUUkwoTVg1MV9FQ1NQSV9QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX1VTQkgxX0RBVEE0X19HUElPMV8xNQkJKF9NWDUxX1BBRF9VU0JIMV9EQVRBNF9fR1BJTzFfMTUgfCBNVVhfUEFEX0NUUkwoTVg1MV9HUElPX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfVVNCSDFfREFUQTRfX1VTQkgxX0RBVEE0CShfTVg1MV9QQURfVVNCSDFfREFUQTRfX1VTQkgxX0RBVEE0IHwgTVVYX1BBRF9DVFJMKE1YNTFfVVNCSDFfUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9VU0JIMV9EQVRBNV9fQ1NQSV9TUzEJCShfTVg1MV9QQURfVVNCSDFfREFUQTVfX0NTUElfU1MxIHwgTVVYX1BBRF9DVFJMKE1YNTFfRUNTUElfUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9VU0JIMV9EQVRBNV9fR1BJTzFfMTYJCShfTVg1MV9QQURfVVNCSDFfREFUQTVfX0dQSU8xXzE2IHwgTVVYX1BBRF9DVFJMKE1YNTFfR1BJT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX1VTQkgxX0RBVEE1X19VU0JIMV9EQVRBNQkoX01YNTFfUEFEX1VTQkgxX0RBVEE1X19VU0JIMV9EQVRBNSB8IE1VWF9QQURfQ1RSTChNWDUxX1VTQkgxX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfVVNCSDFfREFUQTZfX0NTUElfU1MzCQkoX01YNTFfUEFEX1VTQkgxX0RBVEE2X19DU1BJX1NTMyB8IE1VWF9QQURfQ1RSTChNWDUxX0VDU1BJX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfVVNCSDFfREFUQTZfX0dQSU8xXzE3CQkoX01YNTFfUEFEX1VTQkgxX0RBVEE2X19HUElPMV8xNyB8IE1VWF9QQURfQ1RSTChNWDUxX0dQSU9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9VU0JIMV9EQVRBNl9fVVNCSDFfREFUQTYJKF9NWDUxX1BBRF9VU0JIMV9EQVRBNl9fVVNCSDFfREFUQTYgfCBNVVhfUEFEX0NUUkwoTVg1MV9VU0JIMV9QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX1VTQkgxX0RBVEE3X19FQ1NQSTFfU1MzCShfTVg1MV9QQURfVVNCSDFfREFUQTdfX0VDU1BJMV9TUzMgfCBNVVhfUEFEX0NUUkwoTVg1MV9FQ1NQSV9QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX1VTQkgxX0RBVEE3X19FQ1NQSTJfU1MzCShfTVg1MV9QQURfVVNCSDFfREFUQTdfX0VDU1BJMl9TUzMgfCBNVVhfUEFEX0NUUkwoTVg1MV9FQ1NQSV9QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX1VTQkgxX0RBVEE3X19HUElPMV8xOAkJKF9NWDUxX1BBRF9VU0JIMV9EQVRBN19fR1BJTzFfMTggfCBNVVhfUEFEX0NUUkwoTVg1MV9HUElPX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfVVNCSDFfREFUQTdfX1VTQkgxX0RBVEE3CShfTVg1MV9QQURfVVNCSDFfREFUQTdfX1VTQkgxX0RBVEE3IHwgTVVYX1BBRF9DVFJMKE1YNTFfVVNCSDFfUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9ESTFfUElOMTFfX0RJMV9QSU4xMQkJKF9NWDUxX1BBRF9ESTFfUElOMTFfX0RJMV9QSU4xMSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0RJMV9QSU4xMV9fRUNTUEkxX1NTMgkJKF9NWDUxX1BBRF9ESTFfUElOMTFfX0VDU1BJMV9TUzIgfCBNVVhfUEFEX0NUUkwoTVg1MV9FQ1NQSV9QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0RJMV9QSU4xMV9fR1BJTzNfMAkJKF9NWDUxX1BBRF9ESTFfUElOMTFfX0dQSU8zXzAgfCBNVVhfUEFEX0NUUkwoTVg1MV9HUElPX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfREkxX1BJTjEyX19ESTFfUElOMTIJCShfTVg1MV9QQURfREkxX1BJTjEyX19ESTFfUElOMTIgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9ESTFfUElOMTJfX0dQSU8zXzEJCShfTVg1MV9QQURfREkxX1BJTjEyX19HUElPM18xIHwgTVVYX1BBRF9DVFJMKE1YNTFfR1BJT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0RJMV9QSU4xM19fREkxX1BJTjEzCQkoX01YNTFfUEFEX0RJMV9QSU4xM19fREkxX1BJTjEzIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfREkxX1BJTjEzX19HUElPM18yCQkoX01YNTFfUEFEX0RJMV9QSU4xM19fR1BJTzNfMiB8IE1VWF9QQURfQ1RSTChNWDUxX0dQSU9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9ESTFfRDBfQ1NfX0RJMV9EMF9DUwkJKF9NWDUxX1BBRF9ESTFfRDBfQ1NfX0RJMV9EMF9DUyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0RJMV9EMF9DU19fR1BJTzNfMwkJKF9NWDUxX1BBRF9ESTFfRDBfQ1NfX0dQSU8zXzMgfCBNVVhfUEFEX0NUUkwoTVg1MV9HUElPX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfREkxX0QxX0NTX19ESTFfRDFfQ1MJCShfTVg1MV9QQURfREkxX0QxX0NTX19ESTFfRDFfQ1MgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9ESTFfRDFfQ1NfX0RJU1AxX1BJTjE0CQkoX01YNTFfUEFEX0RJMV9EMV9DU19fRElTUDFfUElOMTQgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9ESTFfRDFfQ1NfX0RJU1AxX1BJTjUJCShfTVg1MV9QQURfREkxX0QxX0NTX19ESVNQMV9QSU41IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfREkxX0QxX0NTX19HUElPM180CQkoX01YNTFfUEFEX0RJMV9EMV9DU19fR1BJTzNfNCB8IE1VWF9QQURfQ1RSTChNWDUxX0dQSU9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9ESVNQQjJfU0VSX0RJTl9fRElTUDFfUElOMQkoX01YNTFfUEFEX0RJU1BCMl9TRVJfRElOX19ESVNQMV9QSU4xIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRElTUEIyX1NFUl9ESU5fX0RJU1BCMl9TRVJfRElOCShfTVg1MV9QQURfRElTUEIyX1NFUl9ESU5fX0RJU1BCMl9TRVJfRElOIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRElTUEIyX1NFUl9ESU5fX0dQSU8zXzUJKF9NWDUxX1BBRF9ESVNQQjJfU0VSX0RJTl9fR1BJTzNfNSB8IE1VWF9QQURfQ1RSTChNWDUxX0dQSU9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9ESVNQQjJfU0VSX0RJT19fRElTUDFfUElONgkoX01YNTFfUEFEX0RJU1BCMl9TRVJfRElPX19ESVNQMV9QSU42IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRElTUEIyX1NFUl9ESU9fX0RJU1BCMl9TRVJfRElPCShfTVg1MV9QQURfRElTUEIyX1NFUl9ESU9fX0RJU1BCMl9TRVJfRElPIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRElTUEIyX1NFUl9ESU9fX0dQSU8zXzYJKF9NWDUxX1BBRF9ESVNQQjJfU0VSX0RJT19fR1BJTzNfNiB8IE1VWF9QQURfQ1RSTChNWDUxX0dQSU9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9ESVNQQjJfU0VSX0NMS19fRElTUDFfUElOMTcJKF9NWDUxX1BBRF9ESVNQQjJfU0VSX0NMS19fRElTUDFfUElOMTcgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9ESVNQQjJfU0VSX0NMS19fRElTUDFfUElONwkoX01YNTFfUEFEX0RJU1BCMl9TRVJfQ0xLX19ESVNQMV9QSU43IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRElTUEIyX1NFUl9DTEtfX0RJU1BCMl9TRVJfQ0xLCShfTVg1MV9QQURfRElTUEIyX1NFUl9DTEtfX0RJU1BCMl9TRVJfQ0xLIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRElTUEIyX1NFUl9DTEtfX0dQSU8zXzcJKF9NWDUxX1BBRF9ESVNQQjJfU0VSX0NMS19fR1BJTzNfNyB8IE1VWF9QQURfQ1RSTChNWDUxX0dQSU9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9ESVNQQjJfU0VSX1JTX19ESVNQMV9FWFRfQ0xLCShfTVg1MV9QQURfRElTUEIyX1NFUl9SU19fRElTUDFfRVhUX0NMSyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0RJU1BCMl9TRVJfUlNfX0RJU1AxX1BJTjE2CShfTVg1MV9QQURfRElTUEIyX1NFUl9SU19fRElTUDFfUElOMTYgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9ESVNQQjJfU0VSX1JTX19ESVNQMV9QSU44CShfTVg1MV9QQURfRElTUEIyX1NFUl9SU19fRElTUDFfUElOOCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0RJU1BCMl9TRVJfUlNfX0RJU1BCMl9TRVJfUlMJKF9NWDUxX1BBRF9ESVNQQjJfU0VSX1JTX19ESVNQQjJfU0VSX1JTIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRElTUEIyX1NFUl9SU19fRElTUEIyX1NFUl9SUwkoX01YNTFfUEFEX0RJU1BCMl9TRVJfUlNfX0RJU1BCMl9TRVJfUlMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9ESVNQQjJfU0VSX1JTX19HUElPM184CQkoX01YNTFfUEFEX0RJU1BCMl9TRVJfUlNfX0dQSU8zXzggfCBNVVhfUEFEX0NUUkwoTVg1MV9HUElPX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDFfREFUMF9fRElTUDFfREFUMAkJKF9NWDUxX1BBRF9ESVNQMV9EQVQwX19ESVNQMV9EQVQwIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDFfREFUMV9fRElTUDFfREFUMQkJKF9NWDUxX1BBRF9ESVNQMV9EQVQxX19ESVNQMV9EQVQxIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDFfREFUMl9fRElTUDFfREFUMgkJKF9NWDUxX1BBRF9ESVNQMV9EQVQyX19ESVNQMV9EQVQyIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDFfREFUM19fRElTUDFfREFUMwkJKF9NWDUxX1BBRF9ESVNQMV9EQVQzX19ESVNQMV9EQVQzIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDFfREFUNF9fRElTUDFfREFUNAkJKF9NWDUxX1BBRF9ESVNQMV9EQVQ0X19ESVNQMV9EQVQ0IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDFfREFUNV9fRElTUDFfREFUNQkJKF9NWDUxX1BBRF9ESVNQMV9EQVQ1X19ESVNQMV9EQVQ1IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDFfREFUNl9fQk9PVF9VU0JfU1JDCShfTVg1MV9QQURfRElTUDFfREFUNl9fQk9PVF9VU0JfU1JDIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDFfREFUNl9fRElTUDFfREFUNgkJKF9NWDUxX1BBRF9ESVNQMV9EQVQ2X19ESVNQMV9EQVQ2IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDFfREFUN19fQk9PVF9FRVBST01fQ0ZHCShfTVg1MV9QQURfRElTUDFfREFUN19fQk9PVF9FRVBST01fQ0ZHIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDFfREFUN19fRElTUDFfREFUNwkJKF9NWDUxX1BBRF9ESVNQMV9EQVQ3X19ESVNQMV9EQVQ3IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDFfREFUOF9fQk9PVF9TUkMwCQkoX01YNTFfUEFEX0RJU1AxX0RBVDhfX0JPT1RfU1JDMCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0RJU1AxX0RBVDhfX0RJU1AxX0RBVDgJCShfTVg1MV9QQURfRElTUDFfREFUOF9fRElTUDFfREFUOCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0RJU1AxX0RBVDlfX0JPT1RfU1JDMQkJKF9NWDUxX1BBRF9ESVNQMV9EQVQ5X19CT09UX1NSQzEgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9ESVNQMV9EQVQ5X19ESVNQMV9EQVQ5CQkoX01YNTFfUEFEX0RJU1AxX0RBVDlfX0RJU1AxX0RBVDkgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9ESVNQMV9EQVQxMF9fQk9PVF9TUEFSRV9TSVpFCShfTVg1MV9QQURfRElTUDFfREFUMTBfX0JPT1RfU1BBUkVfU0laRSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0RJU1AxX0RBVDEwX19ESVNQMV9EQVQxMAkoX01YNTFfUEFEX0RJU1AxX0RBVDEwX19ESVNQMV9EQVQxMCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0RJU1AxX0RBVDExX19CT09UX0xQQl9GUkVRMgkoX01YNTFfUEFEX0RJU1AxX0RBVDExX19CT09UX0xQQl9GUkVRMiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0RJU1AxX0RBVDExX19ESVNQMV9EQVQxMQkoX01YNTFfUEFEX0RJU1AxX0RBVDExX19ESVNQMV9EQVQxMSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0RJU1AxX0RBVDEyX19CT09UX01MQ19TRUwJKF9NWDUxX1BBRF9ESVNQMV9EQVQxMl9fQk9PVF9NTENfU0VMIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDFfREFUMTJfX0RJU1AxX0RBVDEyCShfTVg1MV9QQURfRElTUDFfREFUMTJfX0RJU1AxX0RBVDEyIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDFfREFUMTNfX0JPT1RfTUVNX0NUTDAJKF9NWDUxX1BBRF9ESVNQMV9EQVQxM19fQk9PVF9NRU1fQ1RMMCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0RJU1AxX0RBVDEzX19ESVNQMV9EQVQxMwkoX01YNTFfUEFEX0RJU1AxX0RBVDEzX19ESVNQMV9EQVQxMyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0RJU1AxX0RBVDE0X19CT09UX01FTV9DVEwxCShfTVg1MV9QQURfRElTUDFfREFUMTRfX0JPT1RfTUVNX0NUTDEgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9ESVNQMV9EQVQxNF9fRElTUDFfREFUMTQJKF9NWDUxX1BBRF9ESVNQMV9EQVQxNF9fRElTUDFfREFUMTQgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9ESVNQMV9EQVQxNV9fQk9PVF9CVVNfV0lEVEgJKF9NWDUxX1BBRF9ESVNQMV9EQVQxNV9fQk9PVF9CVVNfV0lEVEggfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9ESVNQMV9EQVQxNV9fRElTUDFfREFUMTUJKF9NWDUxX1BBRF9ESVNQMV9EQVQxNV9fRElTUDFfREFUMTUgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9ESVNQMV9EQVQxNl9fQk9PVF9QQUdFX1NJWkUwCShfTVg1MV9QQURfRElTUDFfREFUMTZfX0JPT1RfUEFHRV9TSVpFMCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0RJU1AxX0RBVDE2X19ESVNQMV9EQVQxNgkoX01YNTFfUEFEX0RJU1AxX0RBVDE2X19ESVNQMV9EQVQxNiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0RJU1AxX0RBVDE3X19CT09UX1BBR0VfU0laRTEJKF9NWDUxX1BBRF9ESVNQMV9EQVQxN19fQk9PVF9QQUdFX1NJWkUxIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDFfREFUMTdfX0RJU1AxX0RBVDE3CShfTVg1MV9QQURfRElTUDFfREFUMTdfX0RJU1AxX0RBVDE3IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDFfREFUMThfX0JPT1RfV0VJTV9NVVhFRDAJKF9NWDUxX1BBRF9ESVNQMV9EQVQxOF9fQk9PVF9XRUlNX01VWEVEMCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0RJU1AxX0RBVDE4X19ESVNQMV9EQVQxOAkoX01YNTFfUEFEX0RJU1AxX0RBVDE4X19ESVNQMV9EQVQxOCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0RJU1AxX0RBVDE4X19ESVNQMl9QSU4xMQkoX01YNTFfUEFEX0RJU1AxX0RBVDE4X19ESVNQMl9QSU4xMSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0RJU1AxX0RBVDE4X19ESVNQMl9QSU41CShfTVg1MV9QQURfRElTUDFfREFUMThfX0RJU1AyX1BJTjUgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9ESVNQMV9EQVQxOV9fQk9PVF9XRUlNX01VWEVEMQkoX01YNTFfUEFEX0RJU1AxX0RBVDE5X19CT09UX1dFSU1fTVVYRUQxIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDFfREFUMTlfX0RJU1AxX0RBVDE5CShfTVg1MV9QQURfRElTUDFfREFUMTlfX0RJU1AxX0RBVDE5IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDFfREFUMTlfX0RJU1AyX1BJTjEyCShfTVg1MV9QQURfRElTUDFfREFUMTlfX0RJU1AyX1BJTjEyIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDFfREFUMTlfX0RJU1AyX1BJTjYJKF9NWDUxX1BBRF9ESVNQMV9EQVQxOV9fRElTUDJfUElONiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0RJU1AxX0RBVDIwX19CT09UX01FTV9UWVBFMAkoX01YNTFfUEFEX0RJU1AxX0RBVDIwX19CT09UX01FTV9UWVBFMCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0RJU1AxX0RBVDIwX19ESVNQMV9EQVQyMAkoX01YNTFfUEFEX0RJU1AxX0RBVDIwX19ESVNQMV9EQVQyMCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0RJU1AxX0RBVDIwX19ESVNQMl9QSU4xMwkoX01YNTFfUEFEX0RJU1AxX0RBVDIwX19ESVNQMl9QSU4xMyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0RJU1AxX0RBVDIwX19ESVNQMl9QSU43CShfTVg1MV9QQURfRElTUDFfREFUMjBfX0RJU1AyX1BJTjcgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9ESVNQMV9EQVQyMV9fQk9PVF9NRU1fVFlQRTEJKF9NWDUxX1BBRF9ESVNQMV9EQVQyMV9fQk9PVF9NRU1fVFlQRTEgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9ESVNQMV9EQVQyMV9fRElTUDFfREFUMjEJKF9NWDUxX1BBRF9ESVNQMV9EQVQyMV9fRElTUDFfREFUMjEgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9ESVNQMV9EQVQyMV9fRElTUDJfUElOMTQJKF9NWDUxX1BBRF9ESVNQMV9EQVQyMV9fRElTUDJfUElOMTQgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9ESVNQMV9EQVQyMV9fRElTUDJfUElOOAkoX01YNTFfUEFEX0RJU1AxX0RBVDIxX19ESVNQMl9QSU44IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDFfREFUMjJfX0JPT1RfTFBCX0ZSRVEwCShfTVg1MV9QQURfRElTUDFfREFUMjJfX0JPT1RfTFBCX0ZSRVEwIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDFfREFUMjJfX0RJU1AxX0RBVDIyCShfTVg1MV9QQURfRElTUDFfREFUMjJfX0RJU1AxX0RBVDIyIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDFfREFUMjJfX0RJU1AyX0QwX0NTCShfTVg1MV9QQURfRElTUDFfREFUMjJfX0RJU1AyX0QwX0NTIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDFfREFUMjJfX0RJU1AyX0RBVDE2CShfTVg1MV9QQURfRElTUDFfREFUMjJfX0RJU1AyX0RBVDE2IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDFfREFUMjNfX0JPT1RfTFBCX0ZSRVExCShfTVg1MV9QQURfRElTUDFfREFUMjNfX0JPT1RfTFBCX0ZSRVExIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDFfREFUMjNfX0RJU1AxX0RBVDIzCShfTVg1MV9QQURfRElTUDFfREFUMjNfX0RJU1AxX0RBVDIzIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDFfREFUMjNfX0RJU1AyX0QxX0NTCShfTVg1MV9QQURfRElTUDFfREFUMjNfX0RJU1AyX0QxX0NTIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDFfREFUMjNfX0RJU1AyX0RBVDE3CShfTVg1MV9QQURfRElTUDFfREFUMjNfX0RJU1AyX0RBVDE3IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDFfREFUMjNfX0RJU1AyX1NFUl9DUwkoX01YNTFfUEFEX0RJU1AxX0RBVDIzX19ESVNQMl9TRVJfQ1MgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9ESTFfUElOM19fREkxX1BJTjMJCShfTVg1MV9QQURfREkxX1BJTjNfX0RJMV9QSU4zIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfREkxX1BJTjJfX0RJMV9QSU4yCQkoX01YNTFfUEFEX0RJMV9QSU4yX19ESTFfUElOMiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0RJX0dQMl9fRElTUDFfU0VSX0NMSwkJKF9NWDUxX1BBRF9ESV9HUDJfX0RJU1AxX1NFUl9DTEsgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9ESV9HUDJfX0RJU1AyX1dBSVQJCShfTVg1MV9QQURfRElfR1AyX19ESVNQMl9XQUlUIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRElfR1AzX19DU0kxX0RBVEFfRU4JCShfTVg1MV9QQURfRElfR1AzX19DU0kxX0RBVEFfRU4gfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9ESV9HUDNfX0RJU1AxX1NFUl9ESU8JCShfTVg1MV9QQURfRElfR1AzX19ESVNQMV9TRVJfRElPIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRElfR1AzX19GRUNfVFhfRVIJCShfTVg1MV9QQURfRElfR1AzX19GRUNfVFhfRVIgfCBNVVhfUEFEX0NUUkwoTVg1MV9QQURfQ1RSTF81KSkKKyNkZWZpbmUgTVg1MV9QQURfREkyX1BJTjRfX0NTSTJfREFUQV9FTgkJKF9NWDUxX1BBRF9ESTJfUElONF9fQ1NJMl9EQVRBX0VOIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfREkyX1BJTjRfX0RJMl9QSU40CQkoX01YNTFfUEFEX0RJMl9QSU40X19ESTJfUElONCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0RJMl9QSU40X19GRUNfQ1JTCQkoX01YNTFfUEFEX0RJMl9QSU40X19GRUNfQ1JTIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfREkyX1BJTjJfX0RJMl9QSU4yCQkoX01YNTFfUEFEX0RJMl9QSU4yX19ESTJfUElOMiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0RJMl9QSU4yX19GRUNfTURDCQkoX01YNTFfUEFEX0RJMl9QSU4yX19GRUNfTURDIHwgTVVYX1BBRF9DVFJMKE1YNTFfUEFEX0NUUkxfNSkpCisjZGVmaW5lIE1YNTFfUEFEX0RJMl9QSU4zX19ESTJfUElOMwkJKF9NWDUxX1BBRF9ESTJfUElOM19fREkyX1BJTjMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9ESTJfUElOM19fRkVDX01ESU8JCShfTVg1MV9QQURfREkyX1BJTjNfX0ZFQ19NRElPIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfREkyX0RJU1BfQ0xLX19ESTJfRElTUF9DTEsJKF9NWDUxX1BBRF9ESTJfRElTUF9DTEtfX0RJMl9ESVNQX0NMSyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0RJMl9ESVNQX0NMS19fRkVDX1JEQVRBMQkoX01YNTFfUEFEX0RJMl9ESVNQX0NMS19fRkVDX1JEQVRBMSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0RJX0dQNF9fREkyX1BJTjE1CQkoX01YNTFfUEFEX0RJX0dQNF9fREkyX1BJTjE1IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRElfR1A0X19ESVNQMV9TRVJfRElOCQkoX01YNTFfUEFEX0RJX0dQNF9fRElTUDFfU0VSX0RJTiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0RJX0dQNF9fRElTUDJfUElOMQkJKF9NWDUxX1BBRF9ESV9HUDRfX0RJU1AyX1BJTjEgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9ESV9HUDRfX0ZFQ19SREFUQTIJCShfTVg1MV9QQURfRElfR1A0X19GRUNfUkRBVEEyIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDJfREFUMF9fRElTUDJfREFUMAkJKF9NWDUxX1BBRF9ESVNQMl9EQVQwX19ESVNQMl9EQVQwIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDJfREFUMF9fRkVDX1JEQVRBMwkJKF9NWDUxX1BBRF9ESVNQMl9EQVQwX19GRUNfUkRBVEEzIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDJfREFUMF9fS0VZX0NPTDYJCShfTVg1MV9QQURfRElTUDJfREFUMF9fS0VZX0NPTDYgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9ESVNQMl9EQVQwX19VQVJUM19SWEQJCShfTVg1MV9QQURfRElTUDJfREFUMF9fVUFSVDNfUlhEIHwgTVVYX1BBRF9DVFJMKE1YNTFfVUFSVF9QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0RJU1AyX0RBVDBfX1VTQkgzX0NMSwkJKF9NWDUxX1BBRF9ESVNQMl9EQVQwX19VU0JIM19DTEsgfCBNVVhfUEFEX0NUUkwoTVg1MV9VQVJUX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDJfREFUMV9fRElTUDJfREFUMQkJKF9NWDUxX1BBRF9ESVNQMl9EQVQxX19ESVNQMl9EQVQxIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDJfREFUMV9fRkVDX1JYX0VSCQkoX01YNTFfUEFEX0RJU1AyX0RBVDFfX0ZFQ19SWF9FUiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0RJU1AyX0RBVDFfX0tFWV9DT0w3CQkoX01YNTFfUEFEX0RJU1AyX0RBVDFfX0tFWV9DT0w3IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDJfREFUMV9fVUFSVDNfVFhECQkoX01YNTFfUEFEX0RJU1AyX0RBVDFfX1VBUlQzX1RYRCB8IE1VWF9QQURfQ1RSTChNWDUxX1VBUlRfUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9ESVNQMl9EQVQxX19VU0JIM19ESVIJCShfTVg1MV9QQURfRElTUDJfREFUMV9fVVNCSDNfRElSIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDJfREFUMl9fRElTUDJfREFUMgkJKF9NWDUxX1BBRF9ESVNQMl9EQVQyX19ESVNQMl9EQVQyIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDJfREFUM19fRElTUDJfREFUMwkJKF9NWDUxX1BBRF9ESVNQMl9EQVQzX19ESVNQMl9EQVQzIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDJfREFUNF9fRElTUDJfREFUNAkJKF9NWDUxX1BBRF9ESVNQMl9EQVQ0X19ESVNQMl9EQVQ0IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDJfREFUNV9fRElTUDJfREFUNQkJKF9NWDUxX1BBRF9ESVNQMl9EQVQ1X19ESVNQMl9EQVQ1IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDJfREFUNl9fRElTUDJfREFUNgkJKF9NWDUxX1BBRF9ESVNQMl9EQVQ2X19ESVNQMl9EQVQ2IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDJfREFUNl9fRkVDX1REQVRBMQkJKF9NWDUxX1BBRF9ESVNQMl9EQVQ2X19GRUNfVERBVEExIHwgTVVYX1BBRF9DVFJMKE1YNTFfUEFEX0NUUkxfNSkpCisjZGVmaW5lIE1YNTFfUEFEX0RJU1AyX0RBVDZfX0dQSU8xXzE5CQkoX01YNTFfUEFEX0RJU1AyX0RBVDZfX0dQSU8xXzE5IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDJfREFUNl9fS0VZX1JPVzQJCShfTVg1MV9QQURfRElTUDJfREFUNl9fS0VZX1JPVzQgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9ESVNQMl9EQVQ2X19VU0JIM19TVFAJCShfTVg1MV9QQURfRElTUDJfREFUNl9fVVNCSDNfU1RQIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDJfREFUN19fRElTUDJfREFUNwkJKF9NWDUxX1BBRF9ESVNQMl9EQVQ3X19ESVNQMl9EQVQ3IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDJfREFUN19fRkVDX1REQVRBMgkJKF9NWDUxX1BBRF9ESVNQMl9EQVQ3X19GRUNfVERBVEEyIHwgTVVYX1BBRF9DVFJMKE1YNTFfUEFEX0NUUkxfNSkpCisjZGVmaW5lIE1YNTFfUEFEX0RJU1AyX0RBVDdfX0dQSU8xXzI5CQkoX01YNTFfUEFEX0RJU1AyX0RBVDdfX0dQSU8xXzI5IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDJfREFUN19fS0VZX1JPVzUJCShfTVg1MV9QQURfRElTUDJfREFUN19fS0VZX1JPVzUgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9ESVNQMl9EQVQ3X19VU0JIM19OWFQJCShfTVg1MV9QQURfRElTUDJfREFUN19fVVNCSDNfTlhUIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDJfREFUOF9fRElTUDJfREFUOAkJKF9NWDUxX1BBRF9ESVNQMl9EQVQ4X19ESVNQMl9EQVQ4IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDJfREFUOF9fRkVDX1REQVRBMwkJKF9NWDUxX1BBRF9ESVNQMl9EQVQ4X19GRUNfVERBVEEzIHwgTVVYX1BBRF9DVFJMKE1YNTFfUEFEX0NUUkxfNSkpCisjZGVmaW5lIE1YNTFfUEFEX0RJU1AyX0RBVDhfX0dQSU8xXzMwCQkoX01YNTFfUEFEX0RJU1AyX0RBVDhfX0dQSU8xXzMwIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDJfREFUOF9fS0VZX1JPVzYJCShfTVg1MV9QQURfRElTUDJfREFUOF9fS0VZX1JPVzYgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9ESVNQMl9EQVQ4X19VU0JIM19EQVRBMAkoX01YNTFfUEFEX0RJU1AyX0RBVDhfX1VTQkgzX0RBVEEwIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDJfREFUOV9fQVVENl9SWEMJCShfTVg1MV9QQURfRElTUDJfREFUOV9fQVVENl9SWEMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9ESVNQMl9EQVQ5X19ESVNQMl9EQVQ5CQkoX01YNTFfUEFEX0RJU1AyX0RBVDlfX0RJU1AyX0RBVDkgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9ESVNQMl9EQVQ5X19GRUNfVFhfRU4JCShfTVg1MV9QQURfRElTUDJfREFUOV9fRkVDX1RYX0VOIHwgTVVYX1BBRF9DVFJMKE1YNTFfUEFEX0NUUkxfNSkpCisjZGVmaW5lIE1YNTFfUEFEX0RJU1AyX0RBVDlfX0dQSU8xXzMxCQkoX01YNTFfUEFEX0RJU1AyX0RBVDlfX0dQSU8xXzMxIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDJfREFUOV9fVVNCSDNfREFUQTEJKF9NWDUxX1BBRF9ESVNQMl9EQVQ5X19VU0JIM19EQVRBMSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0RJU1AyX0RBVDEwX19ESVNQMl9EQVQxMAkoX01YNTFfUEFEX0RJU1AyX0RBVDEwX19ESVNQMl9EQVQxMCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0RJU1AyX0RBVDEwX19ESVNQMl9TRVJfQ1MJKF9NWDUxX1BBRF9ESVNQMl9EQVQxMF9fRElTUDJfU0VSX0NTIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDJfREFUMTBfX0ZFQ19DT0wJCShfTVg1MV9QQURfRElTUDJfREFUMTBfX0ZFQ19DT0wgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9ESVNQMl9EQVQxMF9fS0VZX1JPVzcJCShfTVg1MV9QQURfRElTUDJfREFUMTBfX0tFWV9ST1c3IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDJfREFUMTBfX1VTQkgzX0RBVEEyCShfTVg1MV9QQURfRElTUDJfREFUMTBfX1VTQkgzX0RBVEEyIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDJfREFUMTFfX0FVRDZfVFhECQkoX01YNTFfUEFEX0RJU1AyX0RBVDExX19BVUQ2X1RYRCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0RJU1AyX0RBVDExX19ESVNQMl9EQVQxMQkoX01YNTFfUEFEX0RJU1AyX0RBVDExX19ESVNQMl9EQVQxMSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0RJU1AyX0RBVDExX19GRUNfUlhfQ0xLCShfTVg1MV9QQURfRElTUDJfREFUMTFfX0ZFQ19SWF9DTEsgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9ESVNQMl9EQVQxMV9fR1BJTzFfMTAJCShfTVg1MV9QQURfRElTUDJfREFUMTFfX0dQSU8xXzEwIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDJfREFUMTFfX1VTQkgzX0RBVEEzCShfTVg1MV9QQURfRElTUDJfREFUMTFfX1VTQkgzX0RBVEEzIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDJfREFUMTJfX0FVRDZfUlhECQkoX01YNTFfUEFEX0RJU1AyX0RBVDEyX19BVUQ2X1JYRCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0RJU1AyX0RBVDEyX19ESVNQMl9EQVQxMgkoX01YNTFfUEFEX0RJU1AyX0RBVDEyX19ESVNQMl9EQVQxMiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0RJU1AyX0RBVDEyX19GRUNfUlhfRFYJCShfTVg1MV9QQURfRElTUDJfREFUMTJfX0ZFQ19SWF9EViB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0RJU1AyX0RBVDEyX19VU0JIM19EQVRBNAkoX01YNTFfUEFEX0RJU1AyX0RBVDEyX19VU0JIM19EQVRBNCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0RJU1AyX0RBVDEzX19BVUQ2X1RYQwkJKF9NWDUxX1BBRF9ESVNQMl9EQVQxM19fQVVENl9UWEMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9ESVNQMl9EQVQxM19fRElTUDJfREFUMTMJKF9NWDUxX1BBRF9ESVNQMl9EQVQxM19fRElTUDJfREFUMTMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9ESVNQMl9EQVQxM19fRkVDX1RYX0NMSwkoX01YNTFfUEFEX0RJU1AyX0RBVDEzX19GRUNfVFhfQ0xLIHwgTVVYX1BBRF9DVFJMKE1YNTFfUEFEX0NUUkxfNCkpCisjZGVmaW5lIE1YNTFfUEFEX0RJU1AyX0RBVDEzX19VU0JIM19EQVRBNQkoX01YNTFfUEFEX0RJU1AyX0RBVDEzX19VU0JIM19EQVRBNSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0RJU1AyX0RBVDE0X19BVUQ2X1RYRlMJCShfTVg1MV9QQURfRElTUDJfREFUMTRfX0FVRDZfVFhGUyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0RJU1AyX0RBVDE0X19ESVNQMl9EQVQxNAkoX01YNTFfUEFEX0RJU1AyX0RBVDE0X19ESVNQMl9EQVQxNCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0RJU1AyX0RBVDE0X19GRUNfUkRBVEEwCShfTVg1MV9QQURfRElTUDJfREFUMTRfX0ZFQ19SREFUQTAgfCBNVVhfUEFEX0NUUkwoTVg1MV9QQURfQ1RSTF80KSkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDJfREFUMTRfX1VTQkgzX0RBVEE2CShfTVg1MV9QQURfRElTUDJfREFUMTRfX1VTQkgzX0RBVEE2IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDJfREFUMTVfX0FVRDZfUlhGUwkJKF9NWDUxX1BBRF9ESVNQMl9EQVQxNV9fQVVENl9SWEZTIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDJfREFUMTVfX0RJU1AxX1NFUl9DUwkoX01YNTFfUEFEX0RJU1AyX0RBVDE1X19ESVNQMV9TRVJfQ1MgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9ESVNQMl9EQVQxNV9fRElTUDJfREFUMTUJKF9NWDUxX1BBRF9ESVNQMl9EQVQxNV9fRElTUDJfREFUMTUgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9ESVNQMl9EQVQxNV9fRkVDX1REQVRBMAkoX01YNTFfUEFEX0RJU1AyX0RBVDE1X19GRUNfVERBVEEwIHwgTVVYX1BBRF9DVFJMKE1YNTFfUEFEX0NUUkxfNSkpCisjZGVmaW5lIE1YNTFfUEFEX0RJU1AyX0RBVDE1X19VU0JIM19EQVRBNwkoX01YNTFfUEFEX0RJU1AyX0RBVDE1X19VU0JIM19EQVRBNyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX1NEMV9DTURfX0FVRDVfUlhGUwkJKF9NWDUxX1BBRF9TRDFfQ01EX19BVUQ1X1JYRlMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9TRDFfQ01EX19DU1BJX01PU0kJCShfTVg1MV9QQURfU0QxX0NNRF9fQ1NQSV9NT1NJIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfU0QxX0NNRF9fU0QxX0NNRAkJKF9NWDUxX1BBRF9TRDFfQ01EX19TRDFfQ01EIHwgTVVYX1BBRF9DVFJMKE1YNTFfU0RIQ0lfUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9TRDFfQ0xLX19BVUQ1X1JYQwkJKF9NWDUxX1BBRF9TRDFfQ0xLX19BVUQ1X1JYQyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX1NEMV9DTEtfX0NTUElfU0NMSwkJKF9NWDUxX1BBRF9TRDFfQ0xLX19DU1BJX1NDTEsgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9TRDFfQ0xLX19TRDFfQ0xLCQkoX01YNTFfUEFEX1NEMV9DTEtfX1NEMV9DTEsgfCBNVVhfUEFEX0NUUkwoTVg1MV9TREhDSV9QQURfQ1RSTCB8IFBBRF9DVExfSFlTKSkKKyNkZWZpbmUgTVg1MV9QQURfU0QxX0RBVEEwX19BVUQ1X1RYRAkJKF9NWDUxX1BBRF9TRDFfREFUQTBfX0FVRDVfVFhEIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfU0QxX0RBVEEwX19DU1BJX01JU08JCShfTVg1MV9QQURfU0QxX0RBVEEwX19DU1BJX01JU08gfCBNVVhfUEFEX0NUUkwoTVg1MV9FQ1NQSV9QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX1NEMV9EQVRBMF9fU0QxX0RBVEEwCQkoX01YNTFfUEFEX1NEMV9EQVRBMF9fU0QxX0RBVEEwIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0RBMF9fRUlNX0RBMAkJKF9NWDUxX1BBRF9FSU1fREEwX19FSU1fREEwIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0RBMV9fRUlNX0RBMQkJKF9NWDUxX1BBRF9FSU1fREExX19FSU1fREExIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0RBMl9fRUlNX0RBMgkJKF9NWDUxX1BBRF9FSU1fREEyX19FSU1fREEyIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0RBM19fRUlNX0RBMwkJKF9NWDUxX1BBRF9FSU1fREEzX19FSU1fREEzIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfU0QxX0RBVEExX19BVUQ1X1JYRAkJKF9NWDUxX1BBRF9TRDFfREFUQTFfX0FVRDVfUlhEIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfU0QxX0RBVEExX19TRDFfREFUQTEJCShfTVg1MV9QQURfU0QxX0RBVEExX19TRDFfREFUQTEgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fREE0X19FSU1fREE0CQkoX01YNTFfUEFEX0VJTV9EQTRfX0VJTV9EQTQgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fREE1X19FSU1fREE1CQkoX01YNTFfUEFEX0VJTV9EQTVfX0VJTV9EQTUgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fREE2X19FSU1fREE2CQkoX01YNTFfUEFEX0VJTV9EQTZfX0VJTV9EQTYgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fREE3X19FSU1fREE3CQkoX01YNTFfUEFEX0VJTV9EQTdfX0VJTV9EQTcgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9TRDFfREFUQTJfX0FVRDVfVFhDCQkoX01YNTFfUEFEX1NEMV9EQVRBMl9fQVVENV9UWEMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9TRDFfREFUQTJfX1NEMV9EQVRBMgkJKF9NWDUxX1BBRF9TRDFfREFUQTJfX1NEMV9EQVRBMiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9EQTEwX19FSU1fREExMAkJKF9NWDUxX1BBRF9FSU1fREExMF9fRUlNX0RBMTAgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fREExMV9fRUlNX0RBMTEJCShfTVg1MV9QQURfRUlNX0RBMTFfX0VJTV9EQTExIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0RBOF9fRUlNX0RBOAkJKF9NWDUxX1BBRF9FSU1fREE4X19FSU1fREE4IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0RBOV9fRUlNX0RBOQkJKF9NWDUxX1BBRF9FSU1fREE5X19FSU1fREE5IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfU0QxX0RBVEEzX19BVUQ1X1RYRlMJCShfTVg1MV9QQURfU0QxX0RBVEEzX19BVUQ1X1RYRlMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9TRDFfREFUQTNfX0NTUElfU1MxCQkoX01YNTFfUEFEX1NEMV9EQVRBM19fQ1NQSV9TUzEgfCBNVVhfUEFEX0NUUkwoTVg1MV9FQ1NQSV9QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX1NEMV9EQVRBM19fU0QxX0RBVEEzCQkoX01YNTFfUEFEX1NEMV9EQVRBM19fU0QxX0RBVEEzIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfR1BJTzFfMF9fQ1NQSV9TUzIJCShfTVg1MV9QQURfR1BJTzFfMF9fQ1NQSV9TUzIgfCBNVVhfUEFEX0NUUkwoTVg1MV9FQ1NQSV9QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0dQSU8xXzBfX0dQSU8xXzAJCShfTVg1MV9QQURfR1BJTzFfMF9fR1BJTzFfMCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0dQSU8xXzBfX1NEMV9DRAkJKF9NWDUxX1BBRF9HUElPMV8wX19TRDFfQ0QgfCBNVVhfUEFEX0NUUkwoTVg1MV9FU0RIQ19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0dQSU8xXzFfX0NTUElfTUlTTwkJKF9NWDUxX1BBRF9HUElPMV8xX19DU1BJX01JU08gfCBNVVhfUEFEX0NUUkwoTVg1MV9FQ1NQSV9QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0dQSU8xXzFfX0dQSU8xXzEJCShfTVg1MV9QQURfR1BJTzFfMV9fR1BJTzFfMSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0dQSU8xXzFfX1NEMV9XUAkJKF9NWDUxX1BBRF9HUElPMV8xX19TRDFfV1AgfCBNVVhfUEFEX0NUUkwoTVg1MV9FU0RIQ19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9EQTEyX19FSU1fREExMgkJKF9NWDUxX1BBRF9FSU1fREExMl9fRUlNX0RBMTIgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fREExM19fRUlNX0RBMTMJCShfTVg1MV9QQURfRUlNX0RBMTNfX0VJTV9EQTEzIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0RBMTRfX0VJTV9EQTE0CQkoX01YNTFfUEFEX0VJTV9EQTE0X19FSU1fREExNCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9EQTE1X19FSU1fREExNQkJKF9NWDUxX1BBRF9FSU1fREExNV9fRUlNX0RBMTUgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9TRDJfQ01EX19DU1BJX01PU0kJCShfTVg1MV9QQURfU0QyX0NNRF9fQ1NQSV9NT1NJIHwgTVVYX1BBRF9DVFJMKE1YNTFfRUNTUElfUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9TRDJfQ01EX19JMkMxX1NDTAkJKF9NWDUxX1BBRF9TRDJfQ01EX19JMkMxX1NDTCB8IE1VWF9QQURfQ1RSTChNWDUxX0kyQ19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX1NEMl9DTURfX1NEMl9DTUQJCShfTVg1MV9QQURfU0QyX0NNRF9fU0QyX0NNRCB8IE1VWF9QQURfQ1RSTChNWDUxX1NESENJX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfU0QyX0NMS19fQ1NQSV9TQ0xLCQkoX01YNTFfUEFEX1NEMl9DTEtfX0NTUElfU0NMSyB8IE1VWF9QQURfQ1RSTChNWDUxX0VDU1BJX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfU0QyX0NMS19fSTJDMV9TREEJCShfTVg1MV9QQURfU0QyX0NMS19fSTJDMV9TREEgfCBNVVhfUEFEX0NUUkwoTVg1MV9JMkNfUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9TRDJfQ0xLX19TRDJfQ0xLCQkoX01YNTFfUEFEX1NEMl9DTEtfX1NEMl9DTEsgfCBNVVhfUEFEX0NUUkwoTVg1MV9TREhDSV9QQURfQ1RSTCB8IFBBRF9DVExfSFlTKSkKKyNkZWZpbmUgTVg1MV9QQURfU0QyX0RBVEEwX19DU1BJX01JU08JCShfTVg1MV9QQURfU0QyX0RBVEEwX19DU1BJX01JU08gfCBNVVhfUEFEX0NUUkwoTVg1MV9FQ1NQSV9QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX1NEMl9EQVRBMF9fU0QxX0RBVDQJCShfTVg1MV9QQURfU0QyX0RBVEEwX19TRDFfREFUNCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX1NEMl9EQVRBMF9fU0QyX0RBVEEwCQkoX01YNTFfUEFEX1NEMl9EQVRBMF9fU0QyX0RBVEEwIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfU0QyX0RBVEExX19TRDFfREFUNQkJKF9NWDUxX1BBRF9TRDJfREFUQTFfX1NEMV9EQVQ1IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfU0QyX0RBVEExX19TRDJfREFUQTEJCShfTVg1MV9QQURfU0QyX0RBVEExX19TRDJfREFUQTEgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9TRDJfREFUQTFfX1VTQkgzX0gyX0RQCQkoX01YNTFfUEFEX1NEMl9EQVRBMV9fVVNCSDNfSDJfRFAgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9TRDJfREFUQTJfX1NEMV9EQVQ2CQkoX01YNTFfUEFEX1NEMl9EQVRBMl9fU0QxX0RBVDYgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9TRDJfREFUQTJfX1NEMl9EQVRBMgkJKF9NWDUxX1BBRF9TRDJfREFUQTJfX1NEMl9EQVRBMiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX1NEMl9EQVRBMl9fVVNCSDNfSDJfRE0JCShfTVg1MV9QQURfU0QyX0RBVEEyX19VU0JIM19IMl9ETSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX1NEMl9EQVRBM19fQ1NQSV9TUzIJCShfTVg1MV9QQURfU0QyX0RBVEEzX19DU1BJX1NTMiB8IE1VWF9QQURfQ1RSTChNWDUxX0VDU1BJX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfU0QyX0RBVEEzX19TRDFfREFUNwkJKF9NWDUxX1BBRF9TRDJfREFUQTNfX1NEMV9EQVQ3IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfU0QyX0RBVEEzX19TRDJfREFUQTMJCShfTVg1MV9QQURfU0QyX0RBVEEzX19TRDJfREFUQTMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9HUElPMV8yX19DQ01fT1VUXzIJCShfTVg1MV9QQURfR1BJTzFfMl9fQ0NNX09VVF8yIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfR1BJTzFfMl9fR1BJTzFfMgkJKF9NWDUxX1BBRF9HUElPMV8yX19HUElPMV8yIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfR1BJTzFfMl9fSTJDMl9TQ0wJCShfTVg1MV9QQURfR1BJTzFfMl9fSTJDMl9TQ0wgfCBNVVhfUEFEX0NUUkwoTVg1MV9JMkNfUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9HUElPMV8yX19QTEwxX0JZUAkJKF9NWDUxX1BBRF9HUElPMV8yX19QTEwxX0JZUCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0dQSU8xXzJfX1BXTTFfUFdNTwkJKF9NWDUxX1BBRF9HUElPMV8yX19QV00xX1BXTU8gfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9HUElPMV8zX19HUElPMV8zCQkoX01YNTFfUEFEX0dQSU8xXzNfX0dQSU8xXzMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9HUElPMV8zX19JMkMyX1NEQQkJKF9NWDUxX1BBRF9HUElPMV8zX19JMkMyX1NEQSB8IE1VWF9QQURfQ1RSTChNWDUxX0kyQ19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0dQSU8xXzNfX1BMTDJfQllQCQkoX01YNTFfUEFEX0dQSU8xXzNfX1BMTDJfQllQIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfR1BJTzFfM19fUFdNMl9QV01PCQkoX01YNTFfUEFEX0dQSU8xXzNfX1BXTTJfUFdNTyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX1BNSUNfSU5UX1JFUV9fUE1JQ19JTlRfUkVRCShfTVg1MV9QQURfUE1JQ19JTlRfUkVRX19QTUlDX0lOVF9SRVEgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9QTUlDX0lOVF9SRVFfX1BNSUNfUE1VX0lSUV9CCShfTVg1MV9QQURfUE1JQ19JTlRfUkVRX19QTUlDX1BNVV9JUlFfQiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0dQSU8xXzRfX0RJU1AyX0VYVF9DTEsJCShfTVg1MV9QQURfR1BJTzFfNF9fRElTUDJfRVhUX0NMSyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0dQSU8xXzRfX0VJTV9SRFkJCShfTVg1MV9QQURfR1BJTzFfNF9fRUlNX1JEWSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0dQSU8xXzRfX0dQSU8xXzQJCShfTVg1MV9QQURfR1BJTzFfNF9fR1BJTzFfNCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0dQSU8xXzRfX1dET0cxX1dET0dfQgkJKF9NWDUxX1BBRF9HUElPMV80X19XRE9HMV9XRE9HX0IgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9HUElPMV81X19DU0kyX01DTEsJCShfTVg1MV9QQURfR1BJTzFfNV9fQ1NJMl9NQ0xLIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfR1BJTzFfNV9fRElTUDJfUElOMTYJCShfTVg1MV9QQURfR1BJTzFfNV9fRElTUDJfUElOMTYgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9HUElPMV81X19HUElPMV81CQkoX01YNTFfUEFEX0dQSU8xXzVfX0dQSU8xXzUgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9HUElPMV81X19XRE9HMl9XRE9HX0IJCShfTVg1MV9QQURfR1BJTzFfNV9fV0RPRzJfV0RPR19CIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfR1BJTzFfNl9fRElTUDJfUElOMTcJCShfTVg1MV9QQURfR1BJTzFfNl9fRElTUDJfUElOMTcgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9HUElPMV82X19HUElPMV82CQkoX01YNTFfUEFEX0dQSU8xXzZfX0dQSU8xXzYgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9HUElPMV82X19SRUZfRU5fQgkJKF9NWDUxX1BBRF9HUElPMV82X19SRUZfRU5fQiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0dQSU8xXzdfX0NDTV9PVVRfMAkJKF9NWDUxX1BBRF9HUElPMV83X19DQ01fT1VUXzAgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9HUElPMV83X19HUElPMV83CQkoX01YNTFfUEFEX0dQSU8xXzdfX0dQSU8xXzcgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9HUElPMV83X19TRDJfV1AJCShfTVg1MV9QQURfR1BJTzFfN19fU0QyX1dQIHwgTVVYX1BBRF9DVFJMKE1YNTFfRVNESENfUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9HUElPMV83X19TUERJRl9PVVQxCQkoX01YNTFfUEFEX0dQSU8xXzdfX1NQRElGX09VVDEgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9HUElPMV84X19DU0kyX0RBVEFfRU4JCShfTVg1MV9QQURfR1BJTzFfOF9fQ1NJMl9EQVRBX0VOIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfR1BJTzFfOF9fR1BJTzFfOAkJKF9NWDUxX1BBRF9HUElPMV84X19HUElPMV84IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfR1BJTzFfOF9fU0QyX0NECQkoX01YNTFfUEFEX0dQSU8xXzhfX1NEMl9DRCB8IE1VWF9QQURfQ1RSTChNWDUxX0VTREhDX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1MV9QQURfR1BJTzFfOF9fVVNCSDNfUFdSCQkoX01YNTFfUEFEX0dQSU8xXzhfX1VTQkgzX1BXUiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0dQSU8xXzlfX0NDTV9PVVRfMQkJKF9NWDUxX1BBRF9HUElPMV85X19DQ01fT1VUXzEgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9HUElPMV85X19ESVNQMl9EMV9DUwkJKF9NWDUxX1BBRF9HUElPMV85X19ESVNQMl9EMV9DUyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0dQSU8xXzlfX0RJU1AyX1NFUl9DUwkJKF9NWDUxX1BBRF9HUElPMV85X19ESVNQMl9TRVJfQ1MgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9HUElPMV85X19HUElPMV85CQkoX01YNTFfUEFEX0dQSU8xXzlfX0dQSU8xXzkgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUxX1BBRF9HUElPMV85X19TRDJfTENUTAkJKF9NWDUxX1BBRF9HUElPMV85X19TRDJfTENUTCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTFfUEFEX0dQSU8xXzlfX1VTQkgzX09DCQkoX01YNTFfUEFEX0dQSU8xXzlfX1VTQkgzX09DIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKIAogI2VuZGlmIC8qIF9fTUFDSF9JT01VWF9NWDUxX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lvbXV4LW14NTMuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC1teDUzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRlZWUwMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC1teDUzLmgKQEAgLTAsMCArMSwzMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4uCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICovCisKKyNpZm5kZWYgX19NQUNIX0lPTVVYX01YNTNfSF9fCisjZGVmaW5lIF9fTUFDSF9JT01VWF9NWDUzX0hfXworCisjaW5jbHVkZSA8bWFjaC9pb211eC12My5oPgorCisvKgorICogdmFyaW91cyBJT01VWCBhbHRlcm5hdGUgb3V0cHV0IGZ1bmN0aW9ucyAoMS03KQorICovCit0eXBlZGVmIGVudW0gaW9tdXhfY29uZmlnIHsKKwlJT01VWF9DT05GSUdfQUxUMCwKKwlJT01VWF9DT05GSUdfQUxUMSwKKwlJT01VWF9DT05GSUdfQUxUMiwKKwlJT01VWF9DT05GSUdfQUxUMywKKwlJT01VWF9DT05GSUdfQUxUNCwKKwlJT01VWF9DT05GSUdfQUxUNSwKKwlJT01VWF9DT05GSUdfQUxUNiwKKwlJT01VWF9DT05GSUdfQUxUNywKKwlJT01VWF9DT05GSUdfR1BJTywgLyogYWRkZWQgdG8gaGVscCB1c2VyIHVzZSBHUElPIG1vZGUgKi8KKwlJT01VWF9DT05GSUdfU0lPTiA9IDB4MSA8PCA0LCAvKiBMT09QQkFDSzpNVVggU0lPTiBiaXQgKi8KK30gaW9tdXhfcGluX2NmZ190OworCisvKiBUaGVzZSAyIGRlZmluZXMgYXJlIGZvciBwaW5zIHRoYXQgbWF5IG5vdCBoYXZlIGEgbXV4IHJlZ2lzdGVyLCBidXQgY291bGQKKyAqIGhhdmUgYSBwYWQgc2V0dGluZyByZWdpc3RlciwgYW5kIHZpY2UtdmVyc2EuICovCisjZGVmaW5lIE5PTl9NVVhfSQkweDAwCisjZGVmaW5lIE5PTl9QQURfSQkweDAwCisKKyNkZWZpbmUgTVg1M19VQVJUX1BBRF9DVFJMCQkoUEFEX0NUTF9QS0UgfCBQQURfQ1RMX1BVRSB8CVwKKwkJUEFEX0NUTF9EU0VfSElHSCB8IFBBRF9DVExfU1JFX0ZBU1QgfCBQQURfQ1RMX0hZUykKKy8qIFVBUlQxICovCisjZGVmaW5lIE1YNTNfUEFEX0NTSTBfRDEwX19VQVJUMV9UWEQJSU9NVVhfUEFEKDB4NDE0LCAweEU4LCAyLCAweDAsIDAsIE1YNTNfVUFSVF9QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfQ1NJMF9EMTFfX1VBUlQxX1JYRAlJT01VWF9QQUQoMHg0MTgsIDB4RUMsIDIsIDB4ODc4LCAxLCBNWDUzX1VBUlRfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0FUQV9ESU9XX19VQVJUMV9UWEQJSU9NVVhfUEFEKDB4NUYwLCAweDI3MCwgMywgMHgwLAkwLCBNWDUzX1VBUlRfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0FUQV9ETUFDS19fVUFSVDFfUlhECUlPTVVYX1BBRCgweDVGNCwgMHgyNzQsIDMsIDB4ODgwLCAzLCBNWDUzX1VBUlRfUEFEX0NUUkwpCisKKy8qIFVBUlQyICovCisjZGVmaW5lIE1YNTNfUEFEX0FUQV9CVUZGRVJfRU5fX1VBUlQyX1JYRAlJT01VWF9QQUQoMHg1RkMsIDB4MjdDLCAzLCAweDg4MCwgMywgTVg1M19VQVJUX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9BVEFfRE1BUlFfX1VBUlQyX1RYRAlJT01VWF9QQUQoMHg1RjgsIDB4Mjc4LCAzLCAweDAsIDAsIE1YNTNfVUFSVF9QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfQVRBX0RJT1JfX1VBUlQyX1JUUwlJT01VWF9QQUQoMHg2MDQsIDB4Mjg0LCAzLCAweDg3QywgMywgTVg1M19VQVJUX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9BVEFfSU5UUlFfX1VBUlQyX0NUUwlJT01VWF9QQUQoMHg2MDAsIDB4MjgwLCAzLCAweDAsIDAsIE1YNTNfVUFSVF9QQURfQ1RSTCkKKworLyogVUFSVDMgKi8KKyNkZWZpbmUgTVg1M19QQURfQVRBX0NTXzBfX1VBUlQzX1RYRAlJT01VWF9QQUQoMHg2MUMsIDB4MjlDLCA0LCAweDAsIDAsIE1YNTNfVUFSVF9QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfQVRBX0NTXzFfX1VBUlQzX1JYRAlJT01VWF9QQUQoMHg2MjAsIDB4MkEwLCA0LCAweDg4OCwgMywgTVg1M19VQVJUX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9BVEFfREFfMV9fVUFSVDNfQ1RTCUlPTVVYX1BBRCgweDYxNCwgMHgyOTQsIDQsIDB4MCwgMCwgTVg1M19VQVJUX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9BVEFfREFfMl9fVUFSVDNfUlRTCUlPTVVYX1BBRCgweDYxOCwgMHgyOTgsIDQsIDB4ODg0LCA1LCBNWDUzX1VBUlRfUEFEX0NUUkwpCisKKyNkZWZpbmUgTVg1M19QQURfR1BJT18xOV9fR1BJT180XzUJCUlPTVVYX1BBRCgweDM0OCwgMHgyMCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfS0VZX0NPTDBfX0dQSU9fNF82CQlJT01VWF9QQUQoMHgzNEMsIDB4MjQsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0tFWV9ST1cwX19HUElPXzRfNwkJSU9NVVhfUEFEKDB4MzUwLCAweDI4LElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9LRVlfQ09MMV9fR1BJT180XzgJCUlPTVVYX1BBRCgweDM1NCwgMHgyQyxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfS0VZX1JPVzFfX0dQSU9fNF85CQlJT01VWF9QQUQoMHgzNTgsIDB4MzAsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0tFWV9DT0wyX19HUElPXzRfMTAJCUlPTVVYX1BBRCgweDM1QywgMHgzNCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfS0VZX1JPVzJfX0dQSU9fNF8xMQlJT01VWF9QQUQoMHgzNjAsIDB4MzgsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0tFWV9DT0wzX19HUElPXzRfMTIJCUlPTVVYX1BBRCgweDM2NCwgMHgzQyxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfS0VZX1JPVzNfX0dQSU9fNF8xMwlJT01VWF9QQUQoMHgzNjgsIDB4NDAsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0tFWV9DT0w0X19HUElPXzRfMTQJCUlPTVVYX1BBRCgweDM2QywgMHg0NCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfS0VZX1JPVzRfX0dQSU9fNF8xNQlJT01VWF9QQUQoMHgzNzAsIDB4NDgsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX05WQ0NfS0VZUEFEX19OVkNDX0tFWVBBRAlJT01VWF9QQUQoMHgzNzQsIE5PTl9NVVhfSSxJT01VWF9DT05GSUdfQUxUMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfREkwX0RJU1BfQ0xLX19HUElPXzRfMTYJSU9NVVhfUEFEKDB4Mzc4LCAweDRDLElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9ESTBfUElOMTVfX0dQSU9fNF8xNwlJT01VWF9QQUQoMHgzN0MsIDB4NTAsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0RJMF9QSU4yX19HUElPXzRfMTgJCUlPTVVYX1BBRCgweDM4MCwgMHg1NCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfREkwX1BJTjNfX0dQSU9fNF8xOQkJSU9NVVhfUEFEKDB4Mzg0LCAweDU4LElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9ESTBfUElONF9fR1BJT180XzIwCQlJT01VWF9QQUQoMHgzODgsIDB4NUMsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDBfX0dQSU9fNF8yMQlJT01VWF9QQUQoMHgzOEMsIDB4NjAsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDFfX0dQSU9fNF8yMglJT01VWF9QQUQoMHgzOTAsIDB4NjQsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDJfX0dQSU9fNF8yMwlJT01VWF9QQUQoMHgzOTQsIDB4NjgsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDNfX0dQSU9fNF8yNAlJT01VWF9QQUQoMHgzOTgsIDB4NkMsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDRfX0dQSU9fNF8yNQlJT01VWF9QQUQoMHgzOUMsIDB4NzAsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDVfX0dQSU9fNF8yNglJT01VWF9QQUQoMHgzQTAsIDB4NzQsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDZfX0dQSU9fNF8yNwlJT01VWF9QQUQoMHgzQTQsIDB4NzgsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDdfX0dQSU9fNF8yOAlJT01VWF9QQUQoMHgzQTgsIDB4N0MsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDhfX0dQSU9fNF8yOQlJT01VWF9QQUQoMHgzQUMsIDB4ODAsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDlfX0dQSU9fNF8zMAlJT01VWF9QQUQoMHgzQjAsIDB4ODQsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDEwX19HUElPXzRfMzEJSU9NVVhfUEFEKDB4M0I0LCAweDg4LElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQxMV9fR1BJT181XzUJSU9NVVhfUEFEKDB4M0I4LCAweDhDLElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQxMl9fR1BJT181XzYJSU9NVVhfUEFEKDB4M0JDLCAweDkwLElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQxM19fR1BJT181XzcJSU9NVVhfUEFEKDB4M0MwLCAweDk0LElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQxNF9fR1BJT181XzgJSU9NVVhfUEFEKDB4M0M0LCAweDk4LElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQxNV9fR1BJT181XzkJSU9NVVhfUEFEKDB4M0M4LCAweDlDLElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQxNl9fR1BJT181XzEwCUlPTVVYX1BBRCgweDNDQywgMHhBMCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfRElTUDBfREFUMTdfX0dQSU9fNV8xMQlJT01VWF9QQUQoMHgzRDAsIDB4QTQsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDE4X19HUElPXzVfMTIJSU9NVVhfUEFEKDB4M0Q0LCAweEE4LElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQxOV9fR1BJT181XzEzCUlPTVVYX1BBRCgweDNEOCwgMHhBQyxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfRElTUDBfREFUMjBfX0dQSU9fNV8xNAlJT01VWF9QQUQoMHgzREMsIDB4QjAsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0RJU1AwX0RBVDIxX19HUElPXzVfMTUJSU9NVVhfUEFEKDB4M0UwLCAweEI0LElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9ESVNQMF9EQVQyMl9fR1BJT181XzE2CUlPTVVYX1BBRCgweDNFNCwgMHhCOCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfRElTUDBfREFUMjNfX0dQSU9fNV8xNwlJT01VWF9QQUQoMHgzRTgsIDB4QkMsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0NTSTBfUElYQ0xLX19HUElPXzVfMTgJSU9NVVhfUEFEKDB4M0VDLCAweEMwLElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9DU0kwX01DTEtfX0dQSU9fNV8xOQlJT01VWF9QQUQoMHgzRjAsIDB4QzQsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0NTSTBfREFUQV9FTl9fR1BJT181XzIwCUlPTVVYX1BBRCgweDNGNCwgMHhDOCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfQ1NJMF9WU1lOQ19fR1BJT181XzIxCUlPTVVYX1BBRCgweDNGOCwgMHhDQyxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfQ1NJMF9ENF9fR1BJT181XzIyCQlJT01VWF9QQUQoMHgzRkMsIDB4RDAsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0NTSTBfRDVfX0dQSU9fNV8yMwkJSU9NVVhfUEFEKDB4NDAwLCAweEQ0LElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9DU0kwX0Q2X19HUElPXzVfMjQJCUlPTVVYX1BBRCgweDQwNCwgMHhEOCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfQ1NJMF9EN19fR1BJT181XzI1CQlJT01VWF9QQUQoMHg0MDgsIDB4REMsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0NTSTBfRDhfX0dQSU9fNV8yNgkJSU9NVVhfUEFEKDB4NDBDLCAweEUwLElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9DU0kwX0Q5X19HUElPXzVfMjcJCUlPTVVYX1BBRCgweDQxMCwgMHhFNCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfQ1NJMF9EMTBfX0dQSU9fNV8yOAkJSU9NVVhfUEFEKDB4NDE0LCAweEU4LElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9DU0kwX0QxMV9fR1BJT181XzI5CQlJT01VWF9QQUQoMHg0MTgsIDB4RUMsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0NTSTBfRDEyX19HUElPXzVfMzAJCUlPTVVYX1BBRCgweDQxQywgMHhGMCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfQ1NJMF9EMTNfX0dQSU9fNV8zMQkJSU9NVVhfUEFEKDB4NDIwLCAweEY0LElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9DU0kwX0QxNF9fR1BJT182XzAJCUlPTVVYX1BBRCgweDQyNCwgMHhGOCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfQ1NJMF9EMTVfX0dQSU9fNl8xCQlJT01VWF9QQUQoMHg0MjgsIDB4RkMsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0NTSTBfRDE2X19HUElPXzZfMgkJSU9NVVhfUEFEKDB4NDJDLCAweDEwMCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfQ1NJMF9EMTdfX0dQSU9fNl8zCQlJT01VWF9QQUQoMHg0MzAsIDB4MTA0LElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9DU0kwX0QxOF9fR1BJT182XzQJCUlPTVVYX1BBRCgweDQzNCwgMHgxMDgsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0NTSTBfRDE5X19HUElPXzZfNQkJSU9NVVhfUEFEKDB4NDM4LCAweDEwQyxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfTlZDQ19DU0kwX19OVkNDX0NTSTAJSU9NVVhfUEFEKDB4NDNDLCBOT05fTVVYX0ksIElPTVVYX0NPTkZJR19BTFQwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9KVEFHX1RNU19fSlRBR19UTVMJCUlPTVVYX1BBRCgweDQ0MCwgTk9OX01VWF9JLElPTVVYX0NPTkZJR19BTFQwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9KVEFHX01PRF9fSlRBR19NT0QJCUlPTVVYX1BBRCgweDQ0NCwgTk9OX01VWF9JLElPTVVYX0NPTkZJR19BTFQwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9KVEFHX1RSU1RCX19KVEFHX1RSU1RCCUlPTVVYX1BBRCgweDQ0OCwgTk9OX01VWF9JLElPTVVYX0NPTkZJR19BTFQwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9KVEFHX1RESV9fSlRBR19UREkJCUlPTVVYX1BBRCgweDQ0QywgTk9OX01VWF9JLCBJT01VWF9DT05GSUdfQUxUMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfSlRBR19UQ0tfX0pUQUdfVENLCQlJT01VWF9QQUQoMHg0NTAsIE5PTl9NVVhfSSwgSU9NVVhfQ09ORklHX0FMVDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0pUQUdfVERPX19KVEFHX1RETwkJSU9NVVhfUEFEKDB4NDU0LCBOT05fTVVYX0ksIElPTVVYX0NPTkZJR19BTFQwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fQTI1X19HUElPXzVfMgkJSU9NVVhfUEFEKDB4NDU4LCAweDExMCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0VCMl9fR1BJT18yXzMwCQlJT01VWF9QQUQoMHg0NUMsIDB4MTE0LElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fRDE2X19HUElPXzNfMTYJCUlPTVVYX1BBRCgweDQ2MCwgMHgxMTgsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EMTdfX0dQSU9fM18xNwkJSU9NVVhfUEFEKDB4NDY0LCAweDExQyxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0QxOF9fR1BJT18zXzE4CQlJT01VWF9QQUQoMHg0NjgsIDB4MTIwLElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fRDE5X19HUElPXzNfMTkJCUlPTVVYX1BBRCgweDQ2QywgMHgxMjQsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EMjBfX0dQSU9fM18yMAkJSU9NVVhfUEFEKDB4NDcwLCAweDEyOCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0QyMV9fR1BJT18zXzIxCQlJT01VWF9QQUQoMHg0NzQsIDB4MTJDLElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fRDIyX19HUElPXzNfMjIJCUlPTVVYX1BBRCgweDQ3OCwgMHgxMzAsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EMjNfX0dQSU9fM18yMwkJSU9NVVhfUEFEKDB4NDdDLCAweDEzNCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0VCM19fR1BJT18yXzMxCQlJT01VWF9QQUQoMHg0ODAsIDB4MTM4LElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fRDI0X19HUElPXzNfMjQJCUlPTVVYX1BBRCgweDQ4NCwgMHgxM0MsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EMjVfX0dQSU9fM18yNQkJSU9NVVhfUEFEKDB4NDg4LCAweDE0MCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0QyNl9fR1BJT18zXzI2CQlJT01VWF9QQUQoMHg0OEMsIDB4MTQ0LElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fRDI3X19HUElPXzNfMjcJCUlPTVVYX1BBRCgweDQ5MCwgMHgxNDgsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EMjhfX0dQSU9fM18yOAkJSU9NVVhfUEFEKDB4NDk0LCAweDE0QyxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0QyOV9fR1BJT18zXzI5CQlJT01VWF9QQUQoMHg0OTgsIDB4MTUwLElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fRDMwX19HUElPXzNfMzAJCUlPTVVYX1BBRCgweDQ5QywgMHgxNTQsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EMzFfX0dQSU9fM18zMQkJSU9NVVhfUEFEKDB4NEEwLCAweDE1OCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfTlZDQ19FSU0xX19OVkNDX0VJTTEJSU9NVVhfUEFEKDB4NEE0LCBOT05fTVVYX0ksIElPTVVYX0NPTkZJR19BTFQwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fQTI0X19HUElPXzVfNAkJSU9NVVhfUEFEKDB4NEE4LCAweDE1QyxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0EyM19fR1BJT182XzYJCUlPTVVYX1BBRCgweDRBQywgMHgxNjAsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9BMjJfX0dQSU9fMl8xNgkJSU9NVVhfUEFEKDB4NEIwLCAweDE2NCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0EyMV9fR1BJT18yXzE3CQlJT01VWF9QQUQoMHg0QjQsIDB4MTY4LElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fQTIwX19HUElPXzJfMTgJCUlPTVVYX1BBRCgweDRCOCwgMHgxNkMsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9BMTlfX0dQSU9fMl8xOQkJSU9NVVhfUEFEKDB4NEJDLCAweDE3MCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0ExOF9fR1BJT18yXzIwCQlJT01VWF9QQUQoMHg0QzAsIDB4MTc0LElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fQTE3X19HUElPXzJfMjEJCUlPTVVYX1BBRCgweDRDNCwgMHgxNzgsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9BMTZfX0dQSU9fMl8yMgkJSU9NVVhfUEFEKDB4NEM4LCAweDE3QyxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0NTMF9fR1BJT18yXzIzCQlJT01VWF9QQUQoMHg0Q0MsIDB4MTgwLElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fQ1MxX19HUElPXzJfMjQJCUlPTVVYX1BBRCgweDREMCwgMHgxODQsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9PRV9fR1BJT18yXzI1CQlJT01VWF9QQUQoMHg0RDQsIDB4MTg4LElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fUldfX0dQSU9fMl8yNgkJSU9NVVhfUEFEKDB4NEQ4LCAweDE4QyxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0xCQV9fR1BJT18yXzI3CQlJT01VWF9QQUQoMHg0REMsIDB4MTkwLElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9OVkNDX0VJTTRfX05WQ0NfRUlNNAlJT01VWF9QQUQoMHg0RTAsIE5PTl9NVVhfSSwgSU9NVVhfQ09ORklHX0FMVDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9FQjBfX0dQSU9fMl8yOAkJSU9NVVhfUEFEKDB4NEU0LCAweDE5NCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0VCMV9fR1BJT18yXzI5CQlJT01VWF9QQUQoMHg0RTgsIDB4MTk4LElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fREEwX19HUElPXzNfMAkJSU9NVVhfUEFEKDB4NEVDLCAweDE5QyxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0RBMV9fR1BJT18zXzEJCUlPTVVYX1BBRCgweDRGMCwgMHgxQTAsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EQTJfX0dQSU9fM18yCQlJT01VWF9QQUQoMHg0RjQsIDB4MUE0LElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fREEzX19HUElPXzNfMwkJSU9NVVhfUEFEKDB4NEY4LCAweDFBOCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0RBNF9fR1BJT18zXzQJCUlPTVVYX1BBRCgweDRGQywgMHgxQUMsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EQTVfX0dQSU9fM181CQlJT01VWF9QQUQoMHg1MDAsIDB4MUIwLElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fREE2X19HUElPXzNfNgkJSU9NVVhfUEFEKDB4NTA0LCAweDFCNCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0RBN19fR1BJT18zXzcJCUlPTVVYX1BBRCgweDUwOCwgMHgxQjgsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EQThfX0dQSU9fM184CQlJT01VWF9QQUQoMHg1MEMsIDB4MUJDLElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fREE5X19HUElPXzNfOQkJSU9NVVhfUEFEKDB4NTEwLCAweDFDMCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0RBMTBfX0dQSU9fM18xMAkJSU9NVVhfUEFEKDB4NTE0LCAweDFDNCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0RBMTFfX0dQSU9fM18xMQkJSU9NVVhfUEFEKDB4NTE4LCAweDFDOCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0RBMTJfX0dQSU9fM18xMgkJSU9NVVhfUEFEKDB4NTFDLCAweDFDQyxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0RBMTNfX0dQSU9fM18xMwkJSU9NVVhfUEFEKDB4NTIwLCAweDFEMCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0RBMTRfX0dQSU9fM18xNAkJSU9NVVhfUEFEKDB4NTI0LCAweDFENCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0RBMTVfX0dQSU9fM18xNQkJSU9NVVhfUEFEKDB4NTI4LCAweDFEOCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfTkFOREZfV0VfQl9fR1BJT182XzEyCUlPTVVYX1BBRCgweDUyQywgMHgxREMsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX05BTkRGX1JFX0JfX0dQSU9fNl8xMwlJT01VWF9QQUQoMHg1MzAsIDB4MUUwLElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fV0FJVF9fR1BJT181XzAJCUlPTVVYX1BBRCgweDUzNCwgMHgxRTQsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9CQ0xLX19FSU1fQkNMSwkJSU9NVVhfUEFEKDB4NTM4LCBOT05fTVVYX0ksIElPTVVYX0NPTkZJR19BTFQwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9OVkNDX0VJTTdfX05WQ0NfRUlNNwlJT01VWF9QQUQoMHg1M0MsIE5PTl9NVVhfSSwgSU9NVVhfQ09ORklHX0FMVDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0xWRFMxX1RYM19QX19HUElPXzZfMjIJSU9NVVhfUEFEKE5PTl9QQURfSSwgMHgxRUMsIElPTVVYX0NPTkZJR19BTFQwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9MVkRTMV9UWDJfUF9fR1BJT182XzI0CUlPTVVYX1BBRChOT05fUEFEX0ksIDB4MUYwLCBJT01VWF9DT05GSUdfQUxUMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfTFZEUzFfQ0xLX1BfX0dQSU9fNl8yNglJT01VWF9QQUQoTk9OX1BBRF9JLCAweDFGNCwgSU9NVVhfQ09ORklHX0FMVDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0xWRFMxX1RYMV9QX19HUElPXzZfMjgJSU9NVVhfUEFEKE5PTl9QQURfSSwgMHgxRjgsIElPTVVYX0NPTkZJR19BTFQwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9MVkRTMV9UWDBfUF9fR1BJT182XzMwCUlPTVVYX1BBRChOT05fUEFEX0ksIDB4MUZDLCBJT01VWF9DT05GSUdfQUxUMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfTFZEUzBfVFgzX1BfX0dQSU9fN18yMglJT01VWF9QQUQoTk9OX1BBRF9JLCAweDIwMCwgSU9NVVhfQ09ORklHX0FMVDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0xWRFMwX0NMS19QX19HUElPXzdfMjQJSU9NVVhfUEFEKE5PTl9QQURfSSwgMHgyMDQsIElPTVVYX0NPTkZJR19BTFQwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9MVkRTMF9UWDJfUF9fR1BJT183XzI2CUlPTVVYX1BBRChOT05fUEFEX0ksIDB4MjA4LCBJT01VWF9DT05GSUdfQUxUMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfTFZEUzBfVFgxX1BfX0dQSU9fN18yOAlJT01VWF9QQUQoTk9OX1BBRF9JLCAweDIwQywgSU9NVVhfQ09ORklHX0FMVDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0xWRFMwX1RYMF9QX19HUElPXzdfMzAJSU9NVVhfUEFEKE5PTl9QQURfSSwgMHgyMTAsIElPTVVYX0NPTkZJR19BTFQwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9HUElPXzEwX19HUElPXzRfMAkJSU9NVVhfUEFEKDB4NTQwLCAweDIxNCwgSU9NVVhfQ09ORklHX0FMVDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0dQSU9fMTFfX0dQSU9fNF8xCQlJT01VWF9QQUQoMHg1NDQsIDB4MjE4LCBJT01VWF9DT05GSUdfQUxUMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfR1BJT18xMl9fR1BJT180XzIJCUlPTVVYX1BBRCgweDU0OCwgMHgyMUMsIElPTVVYX0NPTkZJR19BTFQwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9HUElPXzEzX19HUElPXzRfMwkJSU9NVVhfUEFEKDB4NTRDLCAweDIyMCwgSU9NVVhfQ09ORklHX0FMVDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0dQSU9fMTRfX0dQSU9fNF80CQlJT01VWF9QQUQoMHg1NTAsIDB4MjI0LCBJT01VWF9DT05GSUdfQUxUMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfRFJBTV9EUU0zX19EUkFNX0RRTTMJSU9NVVhfUEFEKDB4NTU0LCBOT05fTVVYX0ksIElPTVVYX0NPTkZJR19BTFQwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9EUkFNX1NEUVMzX19EUkFNX1NEUVMzCUlPTVVYX1BBRCgweDU1OCwgTk9OX01VWF9JLCBJT01VWF9DT05GSUdfQUxUMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfRFJBTV9TRENLRTFfX0RSQU1fU0RDS0UxCUlPTVVYX1BBRCgweDU1QywgTk9OX01VWF9JLCBJT01VWF9DT05GSUdfQUxUMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfRFJBTV9EUU0yX19EUkFNX0RRTTIJSU9NVVhfUEFEKDB4NTYwLCBOT05fTVVYX0ksIElPTVVYX0NPTkZJR19BTFQwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9EUkFNX1NET0RUMV9fRFJBTV9TRE9EVDEJSU9NVVhfUEFEKDB4NTY0LCBOT05fTVVYX0ksIElPTVVYX0NPTkZJR19BTFQwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9EUkFNX1NEUVMyX19EUkFNX1NEUVMyCUlPTVVYX1BBRCgweDU2OCwgTk9OX01VWF9JLCBJT01VWF9DT05GSUdfQUxUMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfRFJBTV9SRVNFVF9fRFJBTV9SRVNFVAlJT01VWF9QQUQoMHg1NkMsIE5PTl9NVVhfSSwgSU9NVVhfQ09ORklHX0FMVDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0RSQU1fU0RDTEsxX19EUkFNX1NEQ0xLMQlJT01VWF9QQUQoMHg1NzAsIE5PTl9NVVhfSSwgSU9NVVhfQ09ORklHX0FMVDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0RSQU1fQ0FTX19EUkFNX0NBUwkJSU9NVVhfUEFEKDB4NTc0LCBOT05fTVVYX0ksIElPTVVYX0NPTkZJR19BTFQwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9EUkFNX1NEQ0xLMF9fRFJBTV9TRENMSzAJSU9NVVhfUEFEKDB4NTc4LCBOT05fTVVYX0ksIElPTVVYX0NPTkZJR19BTFQwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9EUkFNX1NEUVMwX19EUkFNX1NEUVMwCUlPTVVYX1BBRCgweDU3QywgTk9OX01VWF9JLCBJT01VWF9DT05GSUdfQUxUMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfRFJBTV9TRE9EVDBfX0RSQU1fU0RPRFQwCUlPTVVYX1BBRCgweDU4MCwgTk9OX01VWF9JLCBJT01VWF9DT05GSUdfQUxUMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfRFJBTV9EUU0wX19EUkFNX0RRTTAJSU9NVVhfUEFEKDB4NTg0LCBOT05fTVVYX0ksIElPTVVYX0NPTkZJR19BTFQwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9EUkFNX1JBU19fRFJBTV9SQVMJCUlPTVVYX1BBRCgweDU4OCwgTk9OX01VWF9JLCBJT01VWF9DT05GSUdfQUxUMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfRFJBTV9TRENLRTBfX0RSQU1fU0RDS0UwCUlPTVVYX1BBRCgweDU4QywgTk9OX01VWF9JLCBJT01VWF9DT05GSUdfQUxUMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfRFJBTV9TRFFTMV9fRFJBTV9TRFFTMQlJT01VWF9QQUQoMHg1OTAsIE5PTl9NVVhfSSwgSU9NVVhfQ09ORklHX0FMVDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0RSQU1fRFFNMV9fRFJBTV9EUU0xCUlPTVVYX1BBRCgweDU5NCwgTk9OX01VWF9JLCBJT01VWF9DT05GSUdfQUxUMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfUE1JQ19PTl9SRVFfX1BNSUNfT05fUkVRCUlPTVVYX1BBRCgweDU5OCwgTk9OX01VWF9JLCBJT01VWF9DT05GSUdfQUxUMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfUE1JQ19TVEJZX1JFUV9fUE1JQ19TVEJZX1JFUQlJT01VWF9QQUQoMHg1OUMsIE5PTl9NVVhfSSwgSU9NVVhfQ09ORklHX0FMVDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX05BTkRGX0NMRV9fR1BJT182XzcJCUlPTVVYX1BBRCgweDVBMCwgMHgyMjgsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX05BTkRGX0FMRV9fR1BJT182XzgJSU9NVVhfUEFEKDB4NUE0LCAweDIyQyxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfTkFOREZfV1BfQl9fR1BJT182XzkJSU9NVVhfUEFEKDB4NUE4LCAweDIzMCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfTkFOREZfUkIwX19HUElPXzZfMTAJSU9NVVhfUEFEKDB4NUFDLCAweDIzNCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfTkFOREZfQ1MwX19HUElPXzZfMTEJSU9NVVhfUEFEKDB4NUIwLCAweDIzOCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfTkFOREZfQ1MxX19HUElPXzZfMTQJSU9NVVhfUEFEKDB4NUI0LCAweDIzQyxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfTkFOREZfQ1MyX19HUElPXzZfMTUJSU9NVVhfUEFEKDB4NUI4LCAweDI0MCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfTkFOREZfQ1MzX19HUElPXzZfMTYJSU9NVVhfUEFEKDB4NUJDLCAweDI0NCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfTlZDQ19OQU5ERl9fTlZDQ19OQU5ERglJT01VWF9QQUQoMHg1QzAsIE5PTl9NVVhfSSwgSU9NVVhfQ09ORklHX0FMVDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0ZFQ19NRElPX19HUElPXzFfMjIJCUlPTVVYX1BBRCgweDVDNCwgMHgyNDgsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0ZFQ19SRUZfQ0xLX19HUElPXzFfMjMJSU9NVVhfUEFEKDB4NUM4LCAweDI0QyxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfRkVDX1JYX0VSX19HUElPXzFfMjQJSU9NVVhfUEFEKDB4NUNDLCAweDI1MCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfRkVDX0NSU19EVl9fR1BJT18xXzI1CUlPTVVYX1BBRCgweDVEMCwgMHgyNTQsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0ZFQ19SWEQxX19HUElPXzFfMjYJCUlPTVVYX1BBRCgweDVENCwgMHgyNTgsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0ZFQ19SWEQwX19HUElPXzFfMjcJCUlPTVVYX1BBRCgweDVEOCwgMHgyNUMsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0ZFQ19UWF9FTl9fR1BJT18xXzI4CUlPTVVYX1BBRCgweDVEQywgMHgyNjAsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0ZFQ19UWEQxX19HUElPXzFfMjkJCUlPTVVYX1BBRCgweDVFMCwgMHgyNjQsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0ZFQ19UWEQwX19HUElPXzFfMzAJCUlPTVVYX1BBRCgweDVFNCwgMHgyNjgsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0ZFQ19NRENfX0dQSU9fMV8zMQkJSU9NVVhfUEFEKDB4NUU4LCAweDI2QyxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfTlZDQ19GRUNfX05WQ0NfRkVDCQlJT01VWF9QQUQoMHg1RUMsIE5PTl9NVVhfSSwgSU9NVVhfQ09ORklHX0FMVDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0FUQV9ESU9XX19HUElPXzZfMTcJSU9NVVhfUEFEKDB4NUYwLCAweDI3MCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfQVRBX0RNQUNLX19HUElPXzZfMTgJSU9NVVhfUEFEKDB4NUY0LCAweDI3NCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfQVRBX0RNQVJRX19HUElPXzdfMAlJT01VWF9QQUQoMHg1RjgsIDB4Mjc4LElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9BVEFfQlVGRkVSX0VOX19HUElPXzdfMQlJT01VWF9QQUQoMHg1RkMsIDB4MjdDLElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9BVEFfSU5UUlFfX0dQSU9fN18yCQlJT01VWF9QQUQoMHg2MDAsIDB4MjgwLElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9BVEFfRElPUl9fR1BJT183XzMJCUlPTVVYX1BBRCgweDYwNCwgMHgyODQsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0FUQV9SRVNFVF9CX19HUElPXzdfNAlJT01VWF9QQUQoMHg2MDgsIDB4Mjg4LElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9BVEFfSU9SRFlfX0dQSU9fN181CQlJT01VWF9QQUQoMHg2MEMsIDB4MjhDLElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9BVEFfREFfMF9fR1BJT183XzYJCUlPTVVYX1BBRCgweDYxMCwgMHgyOTAsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0FUQV9EQV8xX19HUElPXzdfNwkJSU9NVVhfUEFEKDB4NjE0LCAweDI5NCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfQVRBX0RBXzJfX0dQSU9fN184CQlJT01VWF9QQUQoMHg2MTgsIDB4Mjk4LElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9BVEFfQ1NfMF9fR1BJT183XzkJCUlPTVVYX1BBRCgweDYxQywgMHgyOUMsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0FUQV9DU18xX19HUElPXzdfMTAJCUlPTVVYX1BBRCgweDYyMCwgMHgyQTAsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX05WQ0NfQVRBMl9fTlZDQ19BVEEyCUlPTVVYX1BBRCgweDYyNCwgTk9OX01VWF9JLCBJT01VWF9DT05GSUdfQUxUMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfQVRBX0RBVEEwX19HUElPXzJfMAlJT01VWF9QQUQoMHg2MjgsIDB4MkE0LElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9BVEFfREFUQTFfX0dQSU9fMl8xCUlPTVVYX1BBRCgweDYyQywgMHgyQTgsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0FUQV9EQVRBMl9fR1BJT18yXzIJSU9NVVhfUEFEKDB4NjMwLCAweDJBQyxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfQVRBX0RBVEEzX19HUElPXzJfMwlJT01VWF9QQUQoMHg2MzQsIDB4MkIwLElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9BVEFfREFUQTRfX0dQSU9fMl80CUlPTVVYX1BBRCgweDYzOCwgMHgyQjQsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0FUQV9EQVRBNV9fR1BJT18yXzUJSU9NVVhfUEFEKDB4NjNDLCAweDJCOCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfQVRBX0RBVEE2X19HUElPXzJfNglJT01VWF9QQUQoMHg2NDAsIDB4MkJDLElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9BVEFfREFUQTdfX0dQSU9fMl83CUlPTVVYX1BBRCgweDY0NCwgMHgyQzAsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0FUQV9EQVRBOF9fR1BJT18yXzgJSU9NVVhfUEFEKDB4NjQ4LCAweDJDNCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfQVRBX0RBVEE5X19HUElPXzJfOQlJT01VWF9QQUQoMHg2NEMsIDB4MkM4LElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9BVEFfREFUQTEwX19HUElPXzJfMTAJSU9NVVhfUEFEKDB4NjUwLCAweDJDQyxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfQVRBX0RBVEExMV9fR1BJT18yXzExCUlPTVVYX1BBRCgweDY1NCwgMHgyRDAsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0FUQV9EQVRBMTJfX0dQSU9fMl8xMglJT01VWF9QQUQoMHg2NTgsIDB4MkQ0LElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9BVEFfREFUQTEzX19HUElPXzJfMTMJSU9NVVhfUEFEKDB4NjVDLCAweDJEOCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfQVRBX0RBVEExNF9fR1BJT18yXzE0CUlPTVVYX1BBRCgweDY2MCwgMHgyREMsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0FUQV9EQVRBMTVfX0dQSU9fMl8xNQlJT01VWF9QQUQoMHg2NjQsIDB4MkUwLElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9OVkNDX0FUQTBfX05WQ0NfQVRBMAlJT01VWF9QQUQoMHg2NjgsIE5PTl9NVVhfSSwgSU9NVVhfQ09ORklHX0FMVDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX1NEMV9EQVRBMF9fR1BJT18xXzE2CUlPTVVYX1BBRCgweDY2QywgMHgyRTQsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX1NEMV9EQVRBMV9fR1BJT18xXzE3CUlPTVVYX1BBRCgweDY3MCwgMHgyRTgsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX1NEMV9DTURfX0dQSU9fMV8xOAkJSU9NVVhfUEFEKDB4Njc0LCAweDJFQyxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfU0QxX0RBVEEyX19HUElPXzFfMTkJSU9NVVhfUEFEKDB4Njc4LCAweDJGMCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfU0QxX0NMS19fR1BJT18xXzIwCQlJT01VWF9QQUQoMHg2N0MsIDB4MkY0LElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9TRDFfREFUQTNfX0dQSU9fMV8yMQlJT01VWF9QQUQoMHg2ODAsIDB4MkY4LElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9OVkNDX1NEMV9fTlZDQ19TRDEJCUlPTVVYX1BBRCgweDY4NCwgTk9OX01VWF9JLCBJT01VWF9DT05GSUdfQUxUMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfU0QyX0NMS19fR1BJT18xXzEwCQlJT01VWF9QQUQoMHg2ODgsIDB4MkZDLElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9TRDJfQ01EX19HUElPXzFfMTEJCUlPTVVYX1BBRCgweDY4QywgMHgzMDAsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX1NEMl9EQVRBM19fR1BJT18xXzEyCUlPTVVYX1BBRCgweDY5MCwgMHgzMDQsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX1NEMl9EQVRBMl9fR1BJT18xXzEzCUlPTVVYX1BBRCgweDY5NCwgMHgzMDgsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX1NEMl9EQVRBMV9fR1BJT18xXzE0CUlPTVVYX1BBRCgweDY5OCwgMHgzMEMsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX1NEMl9EQVRBMF9fR1BJT18xXzE1CUlPTVVYX1BBRCgweDY5QywgMHgzMTAsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX05WQ0NfU0QyX19OVkNDX1NEMgkJSU9NVVhfUEFEKDB4NkEwLCBOT05fTVVYX0ksIElPTVVYX0NPTkZJR19BTFQwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9HUElPXzBfX0dQSU9fMV8wCQlJT01VWF9QQUQoMHg2QTQsIDB4MzE0LElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9HUElPXzFfX0dQSU9fMV8xCQlJT01VWF9QQUQoMHg2QTgsIDB4MzE4LElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9HUElPXzlfX0dQSU9fMV85CQlJT01VWF9QQUQoMHg2QUMsIDB4MzFDLElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9HUElPXzNfX0dQSU9fMV8zCQlJT01VWF9QQUQoMHg2QjAsIDB4MzIwLElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9HUElPXzZfX0dQSU9fMV82CQlJT01VWF9QQUQoMHg2QjQsIDB4MzI0LElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9HUElPXzJfX0dQSU9fMV8yCQlJT01VWF9QQUQoMHg2QjgsIDB4MzI4LElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9HUElPXzRfX0dQSU9fMV80CQlJT01VWF9QQUQoMHg2QkMsIDB4MzJDLElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9HUElPXzVfX0dQSU9fMV81CQlJT01VWF9QQUQoMHg2QzAsIDB4MzMwLElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9HUElPXzdfX0dQSU9fMV83CQlJT01VWF9QQUQoMHg2QzQsIDB4MzM0LElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9HUElPXzhfX0dQSU9fMV84CQlJT01VWF9QQUQoMHg2QzgsIDB4MzM4LElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9HUElPXzE2X19HUElPXzdfMTEJCUlPTVVYX1BBRCgweDZDQywgMHgzM0MsSU9NVVhfQ09ORklHX0FMVDEsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0dQSU9fMTdfX0dQSU9fN18xMgkJSU9NVVhfUEFEKDB4NkQwLCAweDM0MCxJT01VWF9DT05GSUdfQUxUMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfR1BJT18xOF9fR1BJT183XzEzCQlJT01VWF9QQUQoMHg2RDQsIDB4MzQ0LElPTVVYX0NPTkZJR19BTFQxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9OVkNDX0dQSU9fX05WQ0NfR1BJTwlJT01VWF9QQUQoMHg2RDgsIE5PTl9NVVhfSSwgSU9NVVhfQ09ORklHX0FMVDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX1BPUl9CX19QT1JfQgkJCUlPTVVYX1BBRCgweDZEQywgTk9OX01VWF9JLCBJT01VWF9DT05GSUdfQUxUMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfQk9PVF9NT0RFMV9fQk9PVF9NT0RFMQlJT01VWF9QQUQoMHg2RTAsIE5PTl9NVVhfSSwgSU9NVVhfQ09ORklHX0FMVDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX1JFU0VUX0lOX0JfX1JFU0VUX0lOX0IJSU9NVVhfUEFEKDB4NkU0LCBOT05fTVVYX0ksIElPTVVYX0NPTkZJR19BTFQwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9CT09UX01PREUwX19CT09UX01PREUwCUlPTVVYX1BBRCgweDZFOCwgTk9OX01VWF9JLCBJT01VWF9DT05GSUdfQUxUMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfVEVTVF9NT0RFX19URVNUX01PREUJSU9NVVhfUEFEKDB4NkVDLCBOT05fTVVYX0ksIElPTVVYX0NPTkZJR19BTFQwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9HUlBfQURERFNfX0dSUF9BREREUwlJT01VWF9QQUQoMHg2RjAsIE5PTl9NVVhfSSwgSU9NVVhfQ09ORklHX0FMVDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0dSUF9ERFJNT0RFX0NUTF9fR1JQX0REUk1PREVfQ1RMCUlPTVVYX1BBRCgweDZGNCwgTk9OX01VWF9JLCBJT01VWF9DT05GSUdfQUxUMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfR1JQX0REUlBLRV9fR1JQX0REUlBLRQlJT01VWF9QQUQoMHg2RkMsIE5PTl9NVVhfSSwgSU9NVVhfQ09ORklHX0FMVDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0dSUF9ERFJQS19fR1JQX0REUlBLCUlPTVVYX1BBRCgweDcwOCwgTk9OX01VWF9JLCBJT01VWF9DT05GSUdfQUxUMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfR1JQX1RFUk1fQ1RMM19fR1JQX1RFUk1fQ1RMMwlJT01VWF9QQUQoMHg3MEMsIE5PTl9NVVhfSSwgSU9NVVhfQ09ORklHX0FMVDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0dSUF9ERFJIWVNfX0dSUF9ERFJIWVMJSU9NVVhfUEFEKDB4NzEwLCBOT05fTVVYX0ksIElPTVVYX0NPTkZJR19BTFQwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9HUlBfRERSTU9ERV9fR1JQX0REUk1PREUJSU9NVVhfUEFEKDB4NzE0LCBOT05fTVVYX0ksIElPTVVYX0NPTkZJR19BTFQwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9HUlBfQjBEU19fR1JQX0IwRFMJCUlPTVVYX1BBRCgweDcxOCwgTk9OX01VWF9JLCBJT01VWF9DT05GSUdfQUxUMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfR1JQX0IxRFNfX0dSUF9CMURTCQlJT01VWF9QQUQoMHg3MUMsIE5PTl9NVVhfSSwgSU9NVVhfQ09ORklHX0FMVDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTNfUEFEX0dSUF9DVExEU19fR1JQX0NUTERTCUlPTVVYX1BBRCgweDcyMCwgTk9OX01VWF9JLCBJT01VWF9DT05GSUdfQUxUMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfR1JQX0REUl9UWVBFX19HUlBfRERSX1RZUEUJSU9NVVhfUEFEKDB4NzI0LCBOT05fTVVYX0ksIElPTVVYX0NPTkZJR19BTFQwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUzX1BBRF9HUlBfQjJEU19fR1JQX0IyRFMJCUlPTVVYX1BBRCgweDcyOCwgTk9OX01VWF9JLCBJT01VWF9DT05GSUdfQUxUMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1M19QQURfR1JQX0IzRFNfX0dSUF9CM0RTCQlJT01VWF9QQUQoMHg3MkMsIE5PTl9NVVhfSSwgSU9NVVhfQ09ORklHX0FMVDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisKKyNlbmRpZgkvKiBfX01BQ0hfSU9NVVhfTVg1M19IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC12My5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lvbXV4LXYzLmgKaW5kZXggMDg4MGE0YS4uMjI3N2IwMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lvbXV4LXYzLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lvbXV4LXYzLmgKQEAgLTQyLDI4ICs0Miw0NCBAQAogICogSWYgPHBhZG5hbWU+IG9yIDxwYWRtb2RlPiByZWZlcnMgdG8gYSBHUElPLCBpdCBpcyBuYW1lZAogICogR1BJT188dW5pdD5fPG51bT4KICAqCi0gKi8KKyAqIElPTVVYL1BBRCBCaXQgZmllbGQgZGVmaW5pdGlvbnMKKyAqCisgKiBNVVhfQ1RSTF9PRlM6CSAgICAwLi4xMSAoMTIpCisgKiBQQURfQ1RSTF9PRlM6CSAgIDEyLi4yMyAoMTIpCisgKiBTRUxfSU5QVVRfT0ZTOgkgICAyNC4uMzUgKDEyKQorICogTVVYX01PREUgKyBTSU9OOgkgICAzNi4uNDAgICg1KQorICogUEFEX0NUUkwgKyBOT19QQURfQ1RSTDogNDEuLjU3ICgxNykKKyAqIFNFTF9JTlA6CQkgICA1OC4uNjEgICg0KQorICogcmVzZXJ2ZWQ6CQkgICAgIDYzICAgICgxKQorKi8KIAotc3RydWN0IHBhZF9kZXNjIHsKLQl1bnNpZ25lZCBtdXhfY3RybF9vZnM6MTI7IC8qIElPTVVYQ19TV19NVVhfQ1RMX1BBRCBvZmZzZXQgKi8KLQl1bnNpZ25lZCBtdXhfbW9kZTo4OwotCXVuc2lnbmVkIHBhZF9jdHJsX29mczoxMjsgLyogSU9NVVhDX1NXX1BBRF9DVFJMIG9mZnNldCAqLwotI2RlZmluZQlOT19QQURfQ1RSTAkoMSA8PCAxNikKLQl1bnNpZ25lZCBwYWRfY3RybDoxNzsKLQl1bnNpZ25lZCBzZWxlY3RfaW5wdXRfb2ZzOjEyOyAvKiBJT01VWENfU0VMRUNUX0lOUFVUIG9mZnNldCAqLwotCXVuc2lnbmVkIHNlbGVjdF9pbnB1dDozOwotfTsKK3R5cGVkZWYgdTY0IGlvbXV4X3YzX2NmZ190OwogCi0jZGVmaW5lIElPTVVYX1BBRChfcGFkX2N0cmxfb2ZzLCBfbXV4X2N0cmxfb2ZzLCBfbXV4X21vZGUsIF9zZWxlY3RfaW5wdXRfb2ZzLCBcCi0JCV9zZWxlY3RfaW5wdXQsIF9wYWRfY3RybCkJCQkJXAotCQl7CQkJCQkJCVwKLQkJCS5tdXhfY3RybF9vZnMgICAgID0gX211eF9jdHJsX29mcywJCVwKLQkJCS5tdXhfbW9kZSAgICAgICAgID0gX211eF9tb2RlLAkJCVwKLQkJCS5wYWRfY3RybF9vZnMgICAgID0gX3BhZF9jdHJsX29mcywJCVwKLQkJCS5wYWRfY3RybCAgICAgICAgID0gX3BhZF9jdHJsLAkJCVwKLQkJCS5zZWxlY3RfaW5wdXRfb2ZzID0gX3NlbGVjdF9pbnB1dF9vZnMsCQlcCi0JCQkuc2VsZWN0X2lucHV0ICAgICA9IF9zZWxlY3RfaW5wdXQsCQlcCi0JCX0KKyNkZWZpbmUgTVVYX0NUUkxfT0ZTX1NISUZUCTAKKyNkZWZpbmUgTVVYX0NUUkxfT0ZTX01BU0sJKChpb211eF92M19jZmdfdCkweGZmZiA8PCBNVVhfQ1RSTF9PRlNfU0hJRlQpCisjZGVmaW5lIE1VWF9QQURfQ1RSTF9PRlNfU0hJRlQJMTIKKyNkZWZpbmUgTVVYX1BBRF9DVFJMX09GU19NQVNLCSgoaW9tdXhfdjNfY2ZnX3QpMHhmZmYgPDwgTVVYX1BBRF9DVFJMX09GU19TSElGVCkKKyNkZWZpbmUgTVVYX1NFTF9JTlBVVF9PRlNfU0hJRlQJMjQKKyNkZWZpbmUgTVVYX1NFTF9JTlBVVF9PRlNfTUFTSwkoKGlvbXV4X3YzX2NmZ190KTB4ZmZmIDw8IE1VWF9TRUxfSU5QVVRfT0ZTX1NISUZUKQorCisjZGVmaW5lIE1VWF9NT0RFX1NISUZUCQkzNgorI2RlZmluZSBNVVhfTU9ERV9NQVNLCQkoKGlvbXV4X3YzX2NmZ190KTB4MWYgPDwgTVVYX01PREVfU0hJRlQpCisjZGVmaW5lIE1VWF9QQURfQ1RSTF9TSElGVAk0MQorI2RlZmluZSBNVVhfUEFEX0NUUkxfTUFTSwkoKGlvbXV4X3YzX2NmZ190KTB4MWZmZmYgPDwgTVVYX1BBRF9DVFJMX1NISUZUKQorI2RlZmluZSBOT19QQURfQ1RSTAkJKChpb211eF92M19jZmdfdCkxIDw8IChNVVhfUEFEX0NUUkxfU0hJRlQgKyAxNikpCisjZGVmaW5lIE1VWF9TRUxfSU5QVVRfU0hJRlQJNTgKKyNkZWZpbmUgTVVYX1NFTF9JTlBVVF9NQVNLCSgoaW9tdXhfdjNfY2ZnX3QpMHhmIDw8IE1VWF9TRUxfSU5QVVRfU0hJRlQpCisKKyNkZWZpbmUgTVVYX1BBRF9DVFJMKHgpCQkoKGlvbXV4X3YzX2NmZ190KSh4KSA8PCBNVVhfUEFEX0NUUkxfU0hJRlQpCisKKyNkZWZpbmUgSU9NVVhfUEFEKF9wYWRfY3RybF9vZnMsIF9tdXhfY3RybF9vZnMsIF9tdXhfbW9kZSwgX3NlbF9pbnB1dF9vZnMsIFwKKwkJX3NlbF9pbnB1dCwgX3BhZF9jdHJsKQkJCQkJXAorCSgoKGlvbXV4X3YzX2NmZ190KShfbXV4X2N0cmxfb2ZzKSA8PCBNVVhfQ1RSTF9PRlNfU0hJRlQpIHwJXAorCQkoKGlvbXV4X3YzX2NmZ190KShfbXV4X21vZGUpIDw8IE1VWF9NT0RFX1NISUZUKSB8CVwKKwkJKChpb211eF92M19jZmdfdCkoX3BhZF9jdHJsX29mcykgPDwgTVVYX1BBRF9DVFJMX09GU19TSElGVCkgfCBcCisJCSgoaW9tdXhfdjNfY2ZnX3QpKF9wYWRfY3RybCkgPDwgTVVYX1BBRF9DVFJMX1NISUZUKSB8CVwKKwkJKChpb211eF92M19jZmdfdCkoX3NlbF9pbnB1dF9vZnMpIDw8IE1VWF9TRUxfSU5QVVRfT0ZTX1NISUZUKSB8IFwKKwkJKChpb211eF92M19jZmdfdCkoX3NlbF9pbnB1dCkgPDwgTVVYX1NFTF9JTlBVVF9TSElGVCkpCiAKIC8qCiAgKiBVc2UgdG8gc2V0IFBBRCBjb250cm9sCkBAIC0xMDcsMTMgKzEyMywxMyBAQAogLyoKICAqIHNldHVwcyBhIHNpbmdsZSBwYWQgaW4gdGhlIGlvbXV4ZXIKICAqLwotaW50IG14Y19pb211eF92M19zZXR1cF9wYWQoc3RydWN0IHBhZF9kZXNjICpwYWQpOworaW50IG14Y19pb211eF92M19zZXR1cF9wYWQoaW9tdXhfdjNfY2ZnX3QgcGFkKTsKIAogLyoKICAqIHNldHVwcyBtdXRsaXBsZSBwYWRzCiAgKiBjb252ZW5pZW50IHdheSB0byBjYWxsIHRoZSBhYm92ZSBmdW5jdGlvbiB3aXRoIHRhYmxlcwogICovCi1pbnQgbXhjX2lvbXV4X3YzX3NldHVwX211bHRpcGxlX3BhZHMoc3RydWN0IHBhZF9kZXNjICpwYWRfbGlzdCwgdW5zaWduZWQgY291bnQpOworaW50IG14Y19pb211eF92M19zZXR1cF9tdWx0aXBsZV9wYWRzKGlvbXV4X3YzX2NmZ190ICpwYWRfbGlzdCwgdW5zaWduZWQgY291bnQpOwogCiAvKgogICogSW5pdGlhbGlzZSB0aGUgaW9tdXggY29udHJvbGxlcgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lycXMuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pcnFzLmgKaW5kZXggODY3ODFmNy4uNThhNDljYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lycXMuaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaXJxcy5oCkBAIC0yMywxMyArMjMsMTcgQEAKICNkZWZpbmUgTVhDX0dQSU9fSVJRX1NUQVJUCU1YQ19JTlRFUk5BTF9JUlFTCiAKIC8qIHRoZXNlIGFyZSBvcmRlcmVkIGJ5IHNpemUgdG8gc3VwcG9ydCBtdWx0aS1Tb0Mga2VybmVscyAqLwotI2lmIGRlZmluZWQgQ09ORklHX0FSQ0hfTVgyCisjaWYgZGVmaW5lZCBDT05GSUdfQVJDSF9NWDUzCisjZGVmaW5lIE1YQ19HUElPX0lSUVMJCSgzMiAqIDcpCisjZWxpZiBkZWZpbmVkIENPTkZJR19BUkNIX01YMgorI2RlZmluZSBNWENfR1BJT19JUlFTCQkoMzIgKiA2KQorI2VsaWYgZGVmaW5lZCBDT05GSUdfQVJDSF9NWDUwCiAjZGVmaW5lIE1YQ19HUElPX0lSUVMJCSgzMiAqIDYpCiAjZWxpZiBkZWZpbmVkIENPTkZJR19BUkNIX01YMQogI2RlZmluZSBNWENfR1BJT19JUlFTCQkoMzIgKiA0KQogI2VsaWYgZGVmaW5lZCBDT05GSUdfQVJDSF9NWDI1CiAjZGVmaW5lIE1YQ19HUElPX0lSUVMJCSgzMiAqIDQpCi0jZWxpZiBkZWZpbmVkIENPTkZJR19BUkNIX01YNQorI2VsaWYgZGVmaW5lZCBDT05GSUdfQVJDSF9NWDUxCiAjZGVmaW5lIE1YQ19HUElPX0lSUVMJCSgzMiAqIDQpCiAjZWxpZiBkZWZpbmVkIENPTkZJR19BUkNIX01YQzkxMjMxCiAjZGVmaW5lIE1YQ19HUElPX0lSUVMJCSgzMiAqIDQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbWVtb3J5LmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbWVtb3J5LmgKaW5kZXggNTY0ZWM5ZC4uODM4NjE0MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL21lbW9yeS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9tZW1vcnkuaApAQCAtMTYsNyArMTYsOSBAQAogI2RlZmluZSBNWDI1X1BIWVNfT0ZGU0VUCVVMKDB4ODAwMDAwMDApCiAjZGVmaW5lIE1YMjdfUEhZU19PRkZTRVQJVUwoMHhhMDAwMDAwMCkKICNkZWZpbmUgTVgzeF9QSFlTX09GRlNFVAlVTCgweDgwMDAwMDAwKQorI2RlZmluZSBNWDUwX1BIWVNfT0ZGU0VUCVVMKDB4NzAwMDAwMDApCiAjZGVmaW5lIE1YNTFfUEhZU19PRkZTRVQJVUwoMHg5MDAwMDAwMCkKKyNkZWZpbmUgTVg1M19QSFlTX09GRlNFVAlVTCgweDcwMDAwMDAwKQogI2RlZmluZSBNWEM5MTIzMV9QSFlTX09GRlNFVAlVTCgweDkwMDAwMDAwKQogCiAjaWYgIWRlZmluZWQoQ09ORklHX1JVTlRJTUVfUEhZU19PRkZTRVQpCkBAIC0zMiw4ICszNCwxMiBAQAogIyAgZGVmaW5lIFBIWVNfT0ZGU0VUCQlNWDN4X1BIWVNfT0ZGU0VUCiAjIGVsaWYgZGVmaW5lZCBDT05GSUdfQVJDSF9NWEM5MTIzMQogIyAgZGVmaW5lIFBIWVNfT0ZGU0VUCQlNWEM5MTIzMV9QSFlTX09GRlNFVAotIyBlbGlmIGRlZmluZWQgQ09ORklHX0FSQ0hfTVg1CisjIGVsaWYgZGVmaW5lZCBDT05GSUdfQVJDSF9NWDUwCisjICBkZWZpbmUgUEhZU19PRkZTRVQJCU1YNTBfUEhZU19PRkZTRVQKKyMgZWxpZiBkZWZpbmVkIENPTkZJR19BUkNIX01YNTEKICMgIGRlZmluZSBQSFlTX09GRlNFVAkJTVg1MV9QSFlTX09GRlNFVAorIyBlbGlmIGRlZmluZWQgQ09ORklHX0FSQ0hfTVg1MworIyAgZGVmaW5lIFBIWVNfT0ZGU0VUCQlNWDUzX1BIWVNfT0ZGU0VUCiAjIGVuZGlmCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214MS5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214MS5oCmluZGV4IDY0MWIyNDYuLjc1ZDk2MjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDEuaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgxLmgKQEAgLTE5LDcgKzE5LDYgQEAKICAqLwogI2RlZmluZSBNWDFfSU9fQkFTRV9BRERSCTB4MDAyMDAwMDAKICNkZWZpbmUgTVgxX0lPX1NJWkUJCVNaXzFNCi0jZGVmaW5lIE1YMV9JT19CQVNFX0FERFJfVklSVAlWTUFMTE9DX0VORAogCiAjZGVmaW5lIE1YMV9DUzBfUEhZUwkJMHgxMDAwMDAwMAogI2RlZmluZSBNWDFfQ1MwX1NJWkUJCTB4MDIwMDAwMDAKQEAgLTY2LDYgKzY1LDEwIEBACiAjZGVmaW5lIE1YMV9DQ01fQkFTRV9BRERSCQkoMHgxQjAwMCArIE1YMV9JT19CQVNFX0FERFIpCiAjZGVmaW5lIE1YMV9TQ01fQkFTRV9BRERSCQkoMHgxQjgwNCArIE1YMV9JT19CQVNFX0FERFIpCiAjZGVmaW5lIE1YMV9HUElPX0JBU0VfQUREUgkJKDB4MUMwMDAgKyBNWDFfSU9fQkFTRV9BRERSKQorI2RlZmluZSBNWDFfR1BJTzFfQkFTRV9BRERSCQkoMHgxQzAwMCArIE1YMV9JT19CQVNFX0FERFIpCisjZGVmaW5lIE1YMV9HUElPMl9CQVNFX0FERFIJCSgweDFDMTAwICsgTVgxX0lPX0JBU0VfQUREUikKKyNkZWZpbmUgTVgxX0dQSU8zX0JBU0VfQUREUgkJKDB4MUMyMDAgKyBNWDFfSU9fQkFTRV9BRERSKQorI2RlZmluZSBNWDFfR1BJTzRfQkFTRV9BRERSCQkoMHgxQzMwMCArIE1YMV9JT19CQVNFX0FERFIpCiAjZGVmaW5lIE1YMV9FSU1fQkFTRV9BRERSCQkoMHgyMDAwMCArIE1YMV9JT19CQVNFX0FERFIpCiAjZGVmaW5lIE1YMV9TRFJBTUNfQkFTRV9BRERSCQkoMHgyMTAwMCArIE1YMV9JT19CQVNFX0FERFIpCiAjZGVmaW5lIE1YMV9NTUFfQkFTRV9BRERSCQkoMHgyMjAwMCArIE1YMV9JT19CQVNFX0FERFIpCkBAIC03MywxMiArNzYsMTIgQEAKICNkZWZpbmUgTVgxX0NTSV9CQVNFX0FERFIJCSgweDI0MDAwICsgTVgxX0lPX0JBU0VfQUREUikKIAogLyogbWFjcm8gdG8gZ2V0IGF0IElPIHNwYWNlIHdoZW4gcnVubmluZyB2aXJ0dWFsbHkgKi8KLSNkZWZpbmUgTVgxX0lPX0FERFJFU1MoeCkgKAkJCQkJCVwKLQlJTVhfSU9fQUREUkVTUyh4LCBNWDFfSU8pKQorI2RlZmluZSBNWDFfSU9fUDJWKHgpCQkJSU1YX0lPX1AyVih4KQorI2RlZmluZSBNWDFfSU9fQUREUkVTUyh4KQkJSU9NRU0oTVgxX0lPX1AyVih4KSkKIAogLyogZml4ZWQgaW50ZXJycHV0IG51bWJlcnMgKi8KICNkZWZpbmUgTVgxX0lOVF9TT0ZUSU5UCQkwCi0jZGVmaW5lIE1YMV9DU0lfSU5UCQk2CisjZGVmaW5lIE1YMV9JTlRfQ1NJCQk2CiAjZGVmaW5lIE1YMV9EU1BBX01BQ19JTlQJNwogI2RlZmluZSBNWDFfRFNQQV9JTlQJCTgKICNkZWZpbmUgTVgxX0NPTVBfSU5UCQk5CkBAIC0xMTUsMTMgKzExOCwxMyBAQAogI2RlZmluZSBNWDFfU1NJX1JYX0lOVAkJNDQKICNkZWZpbmUgTVgxX1NTSV9SWF9FUlJfSU5UCTQ1CiAjZGVmaW5lIE1YMV9UT1VDSF9JTlQJCTQ2Ci0jZGVmaW5lIE1YMV9VU0JEX0lOVDAJCTQ3Ci0jZGVmaW5lIE1YMV9VU0JEX0lOVDEJCTQ4Ci0jZGVmaW5lIE1YMV9VU0JEX0lOVDIJCTQ5Ci0jZGVmaW5lIE1YMV9VU0JEX0lOVDMJCTUwCi0jZGVmaW5lIE1YMV9VU0JEX0lOVDQJCTUxCi0jZGVmaW5lIE1YMV9VU0JEX0lOVDUJCTUyCi0jZGVmaW5lIE1YMV9VU0JEX0lOVDYJCTUzCisjZGVmaW5lIE1YMV9JTlRfVVNCRDAJCTQ3CisjZGVmaW5lIE1YMV9JTlRfVVNCRDEJCTQ4CisjZGVmaW5lIE1YMV9JTlRfVVNCRDIJCTQ5CisjZGVmaW5lIE1YMV9JTlRfVVNCRDMJCTUwCisjZGVmaW5lIE1YMV9JTlRfVVNCRDQJCTUxCisjZGVmaW5lIE1YMV9JTlRfVVNCRDUJCTUyCisjZGVmaW5lIE1YMV9JTlRfVVNCRDYJCTUzCiAjZGVmaW5lIE1YMV9CVFNZU19JTlQJCTU1CiAjZGVmaW5lIE1YMV9CVFRJTV9JTlQJCTU2CiAjZGVmaW5lIE1YMV9CVFdVSV9JTlQJCTU3CkBAIC0xNjQsMTM0ICsxNjcsNiBAQAogICogdG8gbm90IGJyZWFrIGRyaXZlcnMvdXNiL2dhZGdldC9pbXhfdWRjLiAgU2hvdWxkIGdvCiAgKiBhd2F5IGFmdGVyIHRoaXMgZHJpdmVyIHVzZXMgdGhlIG5ldyBuYW1lLgogICovCi0jZGVmaW5lIFVTQkRfSU5UMAkJTVgxX1VTQkRfSU5UMAotCi0jaWZkZWYgSU1YX05FRURTX0RFUFJFQ0FURURfU1lNQk9MUwotLyogdGhlc2Ugc2hvdWxkIGdvIGF3YXkgKi8KLSNkZWZpbmUgSU1YX0lPX1BIWVMgTVgxX0lPX0JBU0VfQUREUgotI2RlZmluZSBJTVhfSU9fU0laRSBNWDFfSU9fU0laRQotI2RlZmluZSBJTVhfSU9fQkFTRSBNWDFfSU9fQkFTRV9BRERSX1ZJUlQKLSNkZWZpbmUgSU1YX0NTMF9QSFlTIE1YMV9DUzBfUEhZUwotI2RlZmluZSBJTVhfQ1MwX1NJWkUgTVgxX0NTMF9TSVpFCi0jZGVmaW5lIElNWF9DUzFfUEhZUyBNWDFfQ1MxX1BIWVMKLSNkZWZpbmUgSU1YX0NTMV9TSVpFIE1YMV9DUzFfU0laRQotI2RlZmluZSBJTVhfQ1MyX1BIWVMgTVgxX0NTMl9QSFlTCi0jZGVmaW5lIElNWF9DUzJfU0laRSBNWDFfQ1MyX1NJWkUKLSNkZWZpbmUgSU1YX0NTM19QSFlTIE1YMV9DUzNfUEhZUwotI2RlZmluZSBJTVhfQ1MzX1NJWkUgTVgxX0NTM19TSVpFCi0jZGVmaW5lIElNWF9DUzRfUEhZUyBNWDFfQ1M0X1BIWVMKLSNkZWZpbmUgSU1YX0NTNF9TSVpFIE1YMV9DUzRfU0laRQotI2RlZmluZSBJTVhfQ1M1X1BIWVMgTVgxX0NTNV9QSFlTCi0jZGVmaW5lIElNWF9DUzVfU0laRSBNWDFfQ1M1X1NJWkUKLSNkZWZpbmUgQUlQSTFfQkFTRV9BRERSIE1YMV9BSVBJMV9CQVNFX0FERFIKLSNkZWZpbmUgV0RUX0JBU0VfQUREUiBNWDFfV0RUX0JBU0VfQUREUgotI2RlZmluZSBUSU0xX0JBU0VfQUREUiBNWDFfVElNMV9CQVNFX0FERFIKLSNkZWZpbmUgVElNMl9CQVNFX0FERFIgTVgxX1RJTTJfQkFTRV9BRERSCi0jZGVmaW5lIFJUQ19CQVNFX0FERFIgTVgxX1JUQ19CQVNFX0FERFIKLSNkZWZpbmUgTENEQ19CQVNFX0FERFIgTVgxX0xDRENfQkFTRV9BRERSCi0jZGVmaW5lIFVBUlQxX0JBU0VfQUREUiBNWDFfVUFSVDFfQkFTRV9BRERSCi0jZGVmaW5lIFVBUlQyX0JBU0VfQUREUiBNWDFfVUFSVDJfQkFTRV9BRERSCi0jZGVmaW5lIFBXTV9CQVNFX0FERFIgTVgxX1BXTV9CQVNFX0FERFIKLSNkZWZpbmUgRE1BX0JBU0VfQUREUiBNWDFfRE1BX0JBU0VfQUREUgotI2RlZmluZSBBSVBJMl9CQVNFX0FERFIgTVgxX0FJUEkyX0JBU0VfQUREUgotI2RlZmluZSBTSU1fQkFTRV9BRERSIE1YMV9TSU1fQkFTRV9BRERSCi0jZGVmaW5lIFVTQkRfQkFTRV9BRERSIE1YMV9VU0JEX0JBU0VfQUREUgotI2RlZmluZSBTUEkxX0JBU0VfQUREUiBNWDFfU1BJMV9CQVNFX0FERFIKLSNkZWZpbmUgTU1DX0JBU0VfQUREUiBNWDFfTU1DX0JBU0VfQUREUgotI2RlZmluZSBBU1BfQkFTRV9BRERSIE1YMV9BU1BfQkFTRV9BRERSCi0jZGVmaW5lIEJUQV9CQVNFX0FERFIgTVgxX0JUQV9CQVNFX0FERFIKLSNkZWZpbmUgSTJDX0JBU0VfQUREUiBNWDFfSTJDX0JBU0VfQUREUgotI2RlZmluZSBTU0lfQkFTRV9BRERSIE1YMV9TU0lfQkFTRV9BRERSCi0jZGVmaW5lIFNQSTJfQkFTRV9BRERSIE1YMV9TUEkyX0JBU0VfQUREUgotI2RlZmluZSBNU0hDX0JBU0VfQUREUiBNWDFfTVNIQ19CQVNFX0FERFIKLSNkZWZpbmUgQ0NNX0JBU0VfQUREUiBNWDFfQ0NNX0JBU0VfQUREUgotI2RlZmluZSBTQ01fQkFTRV9BRERSIE1YMV9TQ01fQkFTRV9BRERSCi0jZGVmaW5lIEdQSU9fQkFTRV9BRERSIE1YMV9HUElPX0JBU0VfQUREUgotI2RlZmluZSBFSU1fQkFTRV9BRERSIE1YMV9FSU1fQkFTRV9BRERSCi0jZGVmaW5lIFNEUkFNQ19CQVNFX0FERFIgTVgxX1NEUkFNQ19CQVNFX0FERFIKLSNkZWZpbmUgTU1BX0JBU0VfQUREUiBNWDFfTU1BX0JBU0VfQUREUgotI2RlZmluZSBBVklDX0JBU0VfQUREUiBNWDFfQVZJQ19CQVNFX0FERFIKLSNkZWZpbmUgQ1NJX0JBU0VfQUREUiBNWDFfQ1NJX0JBU0VfQUREUgotI2RlZmluZSBJT19BRERSRVNTKHgpIE1YMV9JT19BRERSRVNTKHgpCi0jZGVmaW5lIEFWSUNfSU9fQUREUkVTUyh4KSBJT19BRERSRVNTKHgpCi0jZGVmaW5lIElOVF9TT0ZUSU5UIE1YMV9JTlRfU09GVElOVAotI2RlZmluZSBDU0lfSU5UIE1YMV9DU0lfSU5UCi0jZGVmaW5lIERTUEFfTUFDX0lOVCBNWDFfRFNQQV9NQUNfSU5UCi0jZGVmaW5lIERTUEFfSU5UIE1YMV9EU1BBX0lOVAotI2RlZmluZSBDT01QX0lOVCBNWDFfQ09NUF9JTlQKLSNkZWZpbmUgTVNIQ19YSU5UIE1YMV9NU0hDX1hJTlQKLSNkZWZpbmUgR1BJT19JTlRfUE9SVEEgTVgxX0dQSU9fSU5UX1BPUlRBCi0jZGVmaW5lIEdQSU9fSU5UX1BPUlRCIE1YMV9HUElPX0lOVF9QT1JUQgotI2RlZmluZSBHUElPX0lOVF9QT1JUQyBNWDFfR1BJT19JTlRfUE9SVEMKLSNkZWZpbmUgTENEQ19JTlQgTVgxX0xDRENfSU5UCi0jZGVmaW5lIFNJTV9JTlQgTVgxX1NJTV9JTlQKLSNkZWZpbmUgU0lNX0RBVEFfSU5UIE1YMV9TSU1fREFUQV9JTlQKLSNkZWZpbmUgUlRDX0lOVCBNWDFfUlRDX0lOVAotI2RlZmluZSBSVENfU0FNSU5UIE1YMV9SVENfU0FNSU5UCi0jZGVmaW5lIFVBUlQyX01JTlRfUEZFUlIgTVgxX1VBUlQyX01JTlRfUEZFUlIKLSNkZWZpbmUgVUFSVDJfTUlOVF9SVFMgTVgxX1VBUlQyX01JTlRfUlRTCi0jZGVmaW5lIFVBUlQyX01JTlRfRFRSIE1YMV9VQVJUMl9NSU5UX0RUUgotI2RlZmluZSBVQVJUMl9NSU5UX1VBUlRDIE1YMV9VQVJUMl9NSU5UX1VBUlRDCi0jZGVmaW5lIFVBUlQyX01JTlRfVFggTVgxX1VBUlQyX01JTlRfVFgKLSNkZWZpbmUgVUFSVDJfTUlOVF9SWCBNWDFfVUFSVDJfTUlOVF9SWAotI2RlZmluZSBVQVJUMV9NSU5UX1BGRVJSIE1YMV9VQVJUMV9NSU5UX1BGRVJSCi0jZGVmaW5lIFVBUlQxX01JTlRfUlRTIE1YMV9VQVJUMV9NSU5UX1JUUwotI2RlZmluZSBVQVJUMV9NSU5UX0RUUiBNWDFfVUFSVDFfTUlOVF9EVFIKLSNkZWZpbmUgVUFSVDFfTUlOVF9VQVJUQyBNWDFfVUFSVDFfTUlOVF9VQVJUQwotI2RlZmluZSBVQVJUMV9NSU5UX1RYIE1YMV9VQVJUMV9NSU5UX1RYCi0jZGVmaW5lIFVBUlQxX01JTlRfUlggTVgxX1VBUlQxX01JTlRfUlgKLSNkZWZpbmUgVk9JQ0VfREFDX0lOVCBNWDFfVk9JQ0VfREFDX0lOVAotI2RlZmluZSBWT0lDRV9BRENfSU5UIE1YMV9WT0lDRV9BRENfSU5UCi0jZGVmaW5lIFBFTl9EQVRBX0lOVCBNWDFfUEVOX0RBVEFfSU5UCi0jZGVmaW5lIFBXTV9JTlQgTVgxX1BXTV9JTlQKLSNkZWZpbmUgU0RIQ19JTlQgTVgxX1NESENfSU5UCi0jZGVmaW5lIEkyQ19JTlQgTVgxX0lOVF9JMkMKLSNkZWZpbmUgQ1NQSV9JTlQgTVgxX0NTUElfSU5UCi0jZGVmaW5lIFNTSV9UWF9JTlQgTVgxX1NTSV9UWF9JTlQKLSNkZWZpbmUgU1NJX1RYX0VSUl9JTlQgTVgxX1NTSV9UWF9FUlJfSU5UCi0jZGVmaW5lIFNTSV9SWF9JTlQgTVgxX1NTSV9SWF9JTlQKLSNkZWZpbmUgU1NJX1JYX0VSUl9JTlQgTVgxX1NTSV9SWF9FUlJfSU5UCi0jZGVmaW5lIFRPVUNIX0lOVCBNWDFfVE9VQ0hfSU5UCi0jZGVmaW5lIFVTQkRfSU5UMSBNWDFfVVNCRF9JTlQxCi0jZGVmaW5lIFVTQkRfSU5UMiBNWDFfVVNCRF9JTlQyCi0jZGVmaW5lIFVTQkRfSU5UMyBNWDFfVVNCRF9JTlQzCi0jZGVmaW5lIFVTQkRfSU5UNCBNWDFfVVNCRF9JTlQ0Ci0jZGVmaW5lIFVTQkRfSU5UNSBNWDFfVVNCRF9JTlQ1Ci0jZGVmaW5lIFVTQkRfSU5UNiBNWDFfVVNCRF9JTlQ2Ci0jZGVmaW5lIEJUU1lTX0lOVCBNWDFfQlRTWVNfSU5UCi0jZGVmaW5lIEJUVElNX0lOVCBNWDFfQlRUSU1fSU5UCi0jZGVmaW5lIEJUV1VJX0lOVCBNWDFfQlRXVUlfSU5UCi0jZGVmaW5lIFRJTTJfSU5UIE1YMV9USU0yX0lOVAotI2RlZmluZSBUSU0xX0lOVCBNWDFfVElNMV9JTlQKLSNkZWZpbmUgRE1BX0VSUiBNWDFfRE1BX0VSUgotI2RlZmluZSBETUFfSU5UIE1YMV9ETUFfSU5UCi0jZGVmaW5lIEdQSU9fSU5UX1BPUlREIE1YMV9HUElPX0lOVF9QT1JURAotI2RlZmluZSBXRFRfSU5UIE1YMV9XRFRfSU5UCi0jZGVmaW5lIERNQV9SRVFfVUFSVDNfVCBNWDFfRE1BX1JFUV9VQVJUM19UCi0jZGVmaW5lIERNQV9SRVFfVUFSVDNfUiBNWDFfRE1BX1JFUV9VQVJUM19SCi0jZGVmaW5lIERNQV9SRVFfU1NJMl9UIE1YMV9ETUFfUkVRX1NTSTJfVAotI2RlZmluZSBETUFfUkVRX1NTSTJfUiBNWDFfRE1BX1JFUV9TU0kyX1IKLSNkZWZpbmUgRE1BX1JFUV9DU0lfU1RBVCBNWDFfRE1BX1JFUV9DU0lfU1RBVAotI2RlZmluZSBETUFfUkVRX0NTSV9SIE1YMV9ETUFfUkVRX0NTSV9SCi0jZGVmaW5lIERNQV9SRVFfTVNIQyBNWDFfRE1BX1JFUV9NU0hDCi0jZGVmaW5lIERNQV9SRVFfRFNQQV9EQ1RfRE9VVCBNWDFfRE1BX1JFUV9EU1BBX0RDVF9ET1VUCi0jZGVmaW5lIERNQV9SRVFfRFNQQV9EQ1RfRElOIE1YMV9ETUFfUkVRX0RTUEFfRENUX0RJTgotI2RlZmluZSBETUFfUkVRX0RTUEFfTUFDIE1YMV9ETUFfUkVRX0RTUEFfTUFDCi0jZGVmaW5lIERNQV9SRVFfRVhUIE1YMV9ETUFfUkVRX0VYVAotI2RlZmluZSBETUFfUkVRX1NESEMgTVgxX0RNQV9SRVFfU0RIQwotI2RlZmluZSBETUFfUkVRX1NQSTFfUiBNWDFfRE1BX1JFUV9TUEkxX1IKLSNkZWZpbmUgRE1BX1JFUV9TUEkxX1QgTVgxX0RNQV9SRVFfU1BJMV9UCi0jZGVmaW5lIERNQV9SRVFfU1NJX1QgTVgxX0RNQV9SRVFfU1NJX1QKLSNkZWZpbmUgRE1BX1JFUV9TU0lfUiBNWDFfRE1BX1JFUV9TU0lfUgotI2RlZmluZSBETUFfUkVRX0FTUF9EQUMgTVgxX0RNQV9SRVFfQVNQX0RBQwotI2RlZmluZSBETUFfUkVRX0FTUF9BREMgTVgxX0RNQV9SRVFfQVNQX0FEQwotI2RlZmluZSBETUFfUkVRX1VTUF9FUCh4KSBNWDFfRE1BX1JFUV9VU1BfRVAoeCkKLSNkZWZpbmUgRE1BX1JFUV9TUEkyX1IgTVgxX0RNQV9SRVFfU1BJMl9SCi0jZGVmaW5lIERNQV9SRVFfU1BJMl9UIE1YMV9ETUFfUkVRX1NQSTJfVAotI2RlZmluZSBETUFfUkVRX1VBUlQyX1QgTVgxX0RNQV9SRVFfVUFSVDJfVAotI2RlZmluZSBETUFfUkVRX1VBUlQyX1IgTVgxX0RNQV9SRVFfVUFSVDJfUgotI2RlZmluZSBETUFfUkVRX1VBUlQxX1QgTVgxX0RNQV9SRVFfVUFSVDFfVAotI2RlZmluZSBETUFfUkVRX1VBUlQxX1IgTVgxX0RNQV9SRVFfVUFSVDFfUgotI2VuZGlmIC8qIGlmZGVmIElNWF9ORUVEU19ERVBSRUNBVEVEX1NZTUJPTFMgKi8KKyNkZWZpbmUgVVNCRF9JTlQwCQlNWDFfSU5UX1VTQkQwCiAKICNlbmRpZiAvKiBpZm5kZWYgX19NQUNIX01YMV9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDIxLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgyMS5oCmluZGV4IDhiYzU5NzIuLjZjZDA0OWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDIxLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214MjEuaApAQCAtMjYsNyArMjYsNiBAQAogI2RlZmluZSBfX01BQ0hfTVgyMV9IX18KIAogI2RlZmluZSBNWDIxX0FJUElfQkFTRV9BRERSCQkweDEwMDAwMDAwCi0jZGVmaW5lIE1YMjFfQUlQSV9CQVNFX0FERFJfVklSVAkweGY0MDAwMDAwCiAjZGVmaW5lIE1YMjFfQUlQSV9TSVpFCQkJU1pfMU0KICNkZWZpbmUgTVgyMV9ETUFfQkFTRV9BRERSCQkJKE1YMjFfQUlQSV9CQVNFX0FERFIgKyAweDAxMDAwKQogI2RlZmluZSBNWDIxX1dET0dfQkFTRV9BRERSCQkJKE1YMjFfQUlQSV9CQVNFX0FERFIgKyAweDAyMDAwKQpAQCAtNDksNiArNDgsMTIgQEAKICNkZWZpbmUgTVgyMV9TREhDMV9CQVNFX0FERFIJCQkoTVgyMV9BSVBJX0JBU0VfQUREUiArIDB4MTMwMDApCiAjZGVmaW5lIE1YMjFfU0RIQzJfQkFTRV9BRERSCQkJKE1YMjFfQUlQSV9CQVNFX0FERFIgKyAweDE0MDAwKQogI2RlZmluZSBNWDIxX0dQSU9fQkFTRV9BRERSCQkJKE1YMjFfQUlQSV9CQVNFX0FERFIgKyAweDE1MDAwKQorI2RlZmluZSBNWDIxX0dQSU8xX0JBU0VfQUREUgkJCShNWDIxX0dQSU9fQkFTRV9BRERSICsgMHgwMDApCisjZGVmaW5lIE1YMjFfR1BJTzJfQkFTRV9BRERSCQkJKE1YMjFfR1BJT19CQVNFX0FERFIgKyAweDEwMCkKKyNkZWZpbmUgTVgyMV9HUElPM19CQVNFX0FERFIJCQkoTVgyMV9HUElPX0JBU0VfQUREUiArIDB4MjAwKQorI2RlZmluZSBNWDIxX0dQSU80X0JBU0VfQUREUgkJCShNWDIxX0dQSU9fQkFTRV9BRERSICsgMHgzMDApCisjZGVmaW5lIE1YMjFfR1BJTzVfQkFTRV9BRERSCQkJKE1YMjFfR1BJT19CQVNFX0FERFIgKyAweDQwMCkKKyNkZWZpbmUgTVgyMV9HUElPNl9CQVNFX0FERFIJCQkoTVgyMV9HUElPX0JBU0VfQUREUiArIDB4NTAwKQogI2RlZmluZSBNWDIxX0FVRE1VWF9CQVNFX0FERFIJCQkoTVgyMV9BSVBJX0JBU0VfQUREUiArIDB4MTYwMDApCiAjZGVmaW5lIE1YMjFfQ1NQSTNfQkFTRV9BRERSCQkJKE1YMjFfQUlQSV9CQVNFX0FERFIgKyAweDE3MDAwKQogI2RlZmluZSBNWDIxX0xDRENfQkFTRV9BRERSCQkJKE1YMjFfQUlQSV9CQVNFX0FERFIgKyAweDIxMDAwKQpAQCAtNjQsNyArNjksNiBAQAogI2RlZmluZSBNWDIxX0FWSUNfQkFTRV9BRERSCQkweDEwMDQwMDAwCiAKICNkZWZpbmUgTVgyMV9TQUhCMV9CQVNFX0FERFIJCTB4ODAwMDAwMDAKLSNkZWZpbmUgTVgyMV9TQUhCMV9CQVNFX0FERFJfVklSVAkweGY0MTAwMDAwCiAjZGVmaW5lIE1YMjFfU0FIQjFfU0laRQkJCVNaXzFNCiAjZGVmaW5lIE1YMjFfQ1NJX0JBU0VfQUREUgkJCShNWDJ4X1NBSEIxX0JBU0VfQUREUiArIDB4MDAwMCkKIApAQCAtODIsNyArODYsNiBAQAogCiAvKiBOQU5ELCBTRFJBTSwgV0VJTSBldGMgY29udHJvbGxlcnMgKi8KICNkZWZpbmUgTVgyMV9YX01FTUNfQkFTRV9BRERSCQkweGRmMDAwMDAwCi0jZGVmaW5lIE1YMjFfWF9NRU1DX0JBU0VfQUREUl9WSVJUCTB4ZjQyMDAwMDAKICNkZWZpbmUgTVgyMV9YX01FTUNfU0laRQkJU1pfMjU2SwogCiAjZGVmaW5lIE1YMjFfU0RSQU1DX0JBU0VfQUREUgkJKE1YMjFfWF9NRU1DX0JBU0VfQUREUiArIDB4MDAwMCkKQEAgLTkyLDEwICs5NSw4IEBACiAKICNkZWZpbmUgTVgyMV9JUkFNX0JBU0VfQUREUgkJMHhmZmZmZTgwMAkvKiBpbnRlcm5hbCByYW0gKi8KIAotI2RlZmluZSBNWDIxX0lPX0FERFJFU1MoeCkgKAkJCQkJCVwKLQlJTVhfSU9fQUREUkVTUyh4LCBNWDIxX0FJUEkpID86CQkJCQlcCi0JSU1YX0lPX0FERFJFU1MoeCwgTVgyMV9TQUhCMSkgPzoJCQkJXAotCUlNWF9JT19BRERSRVNTKHgsIE1YMjFfWF9NRU1DKSkKKyNkZWZpbmUgTVgyMV9JT19QMlYoeCkJCQlJTVhfSU9fUDJWKHgpCisjZGVmaW5lIE1YMjFfSU9fQUREUkVTUyh4KQkJSU9NRU0oTVgyMV9JT19QMlYoeCkpCiAKIC8qIGZpeGVkIGludGVycnVwdCBudW1iZXJzICovCiAjZGVmaW5lIE1YMjFfSU5UX0NTUEkzCQk2CkBAIC0xODQsMzkgKzE4NSw0IEBACiAjZGVmaW5lIE1YMjFfRE1BX1JFUV9DU0lfU1RBVAkzMAogI2RlZmluZSBNWDIxX0RNQV9SRVFfQ1NJX1JYCTMxCiAKLSNpZmRlZiBJTVhfTkVFRFNfREVQUkVDQVRFRF9TWU1CT0xTCi0vKiB0aGVzZSBzaG91bGQgZ28gYXdheSAqLwotI2RlZmluZSBTRFJBTV9CQVNFX0FERFIgTVgyMV9TRFJBTV9CQVNFX0FERFIKLSNkZWZpbmUgQ1NEMV9CQVNFX0FERFIgTVgyMV9DU0QxX0JBU0VfQUREUgotI2RlZmluZSBDUzBfQkFTRV9BRERSIE1YMjFfQ1MwX0JBU0VfQUREUgotI2RlZmluZSBDUzFfQkFTRV9BRERSIE1YMjFfQ1MxX0JBU0VfQUREUgotI2RlZmluZSBDUzJfQkFTRV9BRERSIE1YMjFfQ1MyX0JBU0VfQUREUgotI2RlZmluZSBDUzNfQkFTRV9BRERSIE1YMjFfQ1MzX0JBU0VfQUREUgotI2RlZmluZSBDUzRfQkFTRV9BRERSIE1YMjFfQ1M0X0JBU0VfQUREUgotI2RlZmluZSBQQ01DSUFfTUVNX0JBU0VfQUREUiBNWDIxX1BDTUNJQV9NRU1fQkFTRV9BRERSCi0jZGVmaW5lIENTNV9CQVNFX0FERFIgTVgyMV9DUzVfQkFTRV9BRERSCi0jZGVmaW5lIFhfTUVNQ19CQVNFX0FERFIgTVgyMV9YX01FTUNfQkFTRV9BRERSCi0jZGVmaW5lIFhfTUVNQ19CQVNFX0FERFJfVklSVCBNWDIxX1hfTUVNQ19CQVNFX0FERFJfVklSVAotI2RlZmluZSBYX01FTUNfU0laRSBNWDIxX1hfTUVNQ19TSVpFCi0jZGVmaW5lIFNEUkFNQ19CQVNFX0FERFIgTVgyMV9TRFJBTUNfQkFTRV9BRERSCi0jZGVmaW5lIEVJTV9CQVNFX0FERFIgTVgyMV9FSU1fQkFTRV9BRERSCi0jZGVmaW5lIFBDTUNJQV9DVExfQkFTRV9BRERSIE1YMjFfUENNQ0lBX0NUTF9CQVNFX0FERFIKLSNkZWZpbmUgTkZDX0JBU0VfQUREUiBNWDIxX05GQ19CQVNFX0FERFIKLSNkZWZpbmUgSVJBTV9CQVNFX0FERFIgTVgyMV9JUkFNX0JBU0VfQUREUgotI2RlZmluZSBNWENfSU5UX0ZJUkkgTVgyMV9JTlRfRklSSQotI2RlZmluZSBNWENfSU5UX0JNSSBNWDIxX0lOVF9CTUkKLSNkZWZpbmUgTVhDX0lOVF9FTU1BRU5DIE1YMjFfSU5UX0VNTUFFTkMKLSNkZWZpbmUgTVhDX0lOVF9FTU1BREVDIE1YMjFfSU5UX0VNTUFERUMKLSNkZWZpbmUgTVhDX0lOVF9VU0JXS1VQIE1YMjFfSU5UX1VTQldLVVAKLSNkZWZpbmUgTVhDX0lOVF9VU0JETUEgTVgyMV9JTlRfVVNCRE1BCi0jZGVmaW5lIE1YQ19JTlRfVVNCSE9TVCBNWDIxX0lOVF9VU0JIT1NUCi0jZGVmaW5lIE1YQ19JTlRfVVNCRlVOQyBNWDIxX0lOVF9VU0JGVU5DCi0jZGVmaW5lIE1YQ19JTlRfVVNCTU5QIE1YMjFfSU5UX1VTQk1OUAotI2RlZmluZSBNWENfSU5UX1VTQkNUUkwgTVgyMV9JTlRfVVNCQ1RSTAotI2RlZmluZSBNWENfSU5UX1VTQkNUUkwgTVgyMV9JTlRfVVNCQ1RSTAotI2RlZmluZSBETUFfUkVRX0ZJUklfUlggTVgyMV9ETUFfUkVRX0ZJUklfUlgKLSNkZWZpbmUgRE1BX1JFUV9CTUlfVFggTVgyMV9ETUFfUkVRX0JNSV9UWAotI2RlZmluZSBETUFfUkVRX0JNSV9SWCBNWDIxX0RNQV9SRVFfQk1JX1JYCi0jZW5kaWYKLQogI2VuZGlmIC8qIGlmbmRlZiBfX01BQ0hfTVgyMV9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDI1LmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgyNS5oCmluZGV4IGNmNDZhNDUuLjA4N2NkN2EgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDI1LmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214MjUuaApAQCAtMiwxMyArMiwxMCBAQAogI2RlZmluZSBfX01BQ0hfTVgyNV9IX18KIAogI2RlZmluZSBNWDI1X0FJUFMxX0JBU0VfQUREUgkJMHg0M2YwMDAwMAotI2RlZmluZSBNWDI1X0FJUFMxX0JBU0VfQUREUl9WSVJUCTB4ZmMwMDAwMDAKICNkZWZpbmUgTVgyNV9BSVBTMV9TSVpFCQkJU1pfMU0KICNkZWZpbmUgTVgyNV9BSVBTMl9CQVNFX0FERFIJCTB4NTNmMDAwMDAKLSNkZWZpbmUgTVgyNV9BSVBTMl9CQVNFX0FERFJfVklSVAkweGZjMjAwMDAwCiAjZGVmaW5lIE1YMjVfQUlQUzJfU0laRQkJCVNaXzFNCiAjZGVmaW5lIE1YMjVfQVZJQ19CQVNFX0FERFIJCTB4NjgwMDAwMDAKLSNkZWZpbmUgTVgyNV9BVklDX0JBU0VfQUREUl9WSVJUCTB4ZmM0MDAwMDAKICNkZWZpbmUgTVgyNV9BVklDX1NJWkUJCQlTWl8xTQogCiAjZGVmaW5lIE1YMjVfSTJDMV9CQVNFX0FERFIJCShNWDI1X0FJUFMxX0JBU0VfQUREUiArIDB4ODAwMDApCkBAIC0yMSwyMCArMTgsMTUgQEAKIAogI2RlZmluZSBNWDI1X0NSTV9CQVNFX0FERFIJCShNWDI1X0FJUFMyX0JBU0VfQUREUiArIDB4ODAwMDApCiAjZGVmaW5lIE1YMjVfR1BUMV9CQVNFX0FERFIJCShNWDI1X0FJUFMyX0JBU0VfQUREUiArIDB4OTAwMDApCisjZGVmaW5lIE1YMjVfR1BJTzRfQkFTRV9BRERSCQkoTVgyNV9BSVBTMl9CQVNFX0FERFIgKyAweDljMDAwKQorI2RlZmluZSBNWDI1X1BXTTJfQkFTRV9BRERSCQkoTVgyNV9BSVBTMl9CQVNFX0FERFIgKyAweGEwMDAwKQorI2RlZmluZSBNWDI1X0dQSU8zX0JBU0VfQUREUgkJKE1YMjVfQUlQUzJfQkFTRV9BRERSICsgMHhhNDAwMCkKKyNkZWZpbmUgTVgyNV9QV00zX0JBU0VfQUREUgkJKE1YMjVfQUlQUzJfQkFTRV9BRERSICsgMHhhODAwMCkKKyNkZWZpbmUgTVgyNV9QV000X0JBU0VfQUREUgkJKE1YMjVfQUlQUzJfQkFTRV9BRERSICsgMHhjODAwMCkKKyNkZWZpbmUgTVgyNV9HUElPMV9CQVNFX0FERFIJCShNWDI1X0FJUFMyX0JBU0VfQUREUiArIDB4Y2MwMDApCisjZGVmaW5lIE1YMjVfR1BJTzJfQkFTRV9BRERSCQkoTVgyNV9BSVBTMl9CQVNFX0FERFIgKyAweGQwMDAwKQogI2RlZmluZSBNWDI1X1dET0dfQkFTRV9BRERSCQkoTVgyNV9BSVBTMl9CQVNFX0FERFIgKyAweGRjMDAwKQotCi0jZGVmaW5lIE1YMjVfR1BJTzFfQkFTRV9BRERSX1ZJUlQJKE1YMjVfQUlQUzJfQkFTRV9BRERSX1ZJUlQgKyAweGNjMDAwKQotI2RlZmluZSBNWDI1X0dQSU8yX0JBU0VfQUREUl9WSVJUCShNWDI1X0FJUFMyX0JBU0VfQUREUl9WSVJUICsgMHhkMDAwMCkKLSNkZWZpbmUgTVgyNV9HUElPM19CQVNFX0FERFJfVklSVAkoTVgyNV9BSVBTMl9CQVNFX0FERFJfVklSVCArIDB4YTQwMDApCi0jZGVmaW5lIE1YMjVfR1BJTzRfQkFTRV9BRERSX1ZJUlQJKE1YMjVfQUlQUzJfQkFTRV9BRERSX1ZJUlQgKyAweDljMDAwKQotCi0jZGVmaW5lIE1YMjVfSU9fQUREUkVTUyh4KSAoCQkJCQlcCi0JSU1YX0lPX0FERFJFU1MoeCwgTVgyNV9BSVBTMSkgPzoJCQlcCi0JSU1YX0lPX0FERFJFU1MoeCwgTVgyNV9BSVBTMikgPzoJCQlcCi0JSU1YX0lPX0FERFJFU1MoeCwgTVgyNV9BVklDKSkKLQotI2RlZmluZSBNWDI1X0FJUFMxX0lPX0FERFJFU1MoeCkgXAotCSgoKHgpIC0gTVgyNV9BSVBTMV9CQVNFX0FERFIpICsgTVgyNV9BSVBTMV9CQVNFX0FERFJfVklSVCkKKyNkZWZpbmUgTVgyNV9QV00xX0JBU0VfQUREUgkJKE1YMjVfQUlQUzJfQkFTRV9BRERSICsgMHhlMDAwMCkKIAogI2RlZmluZSBNWDI1X1VBUlQxX0JBU0VfQUREUgkJMHg0M2Y5MDAwMAogI2RlZmluZSBNWDI1X1VBUlQyX0JBU0VfQUREUgkJMHg0M2Y5NDAwMApAQCAtNTUsOSArNDcsMTkgQEAKICNkZWZpbmUgTVgyNV9MQ0RDX0JBU0VfQUREUgkJMHg1M2ZiYzAwMAogI2RlZmluZSBNWDI1X0tQUF9CQVNFX0FERFIJCTB4NDNmYTgwMDAKICNkZWZpbmUgTVgyNV9TRE1BX0JBU0VfQUREUgkJMHg1M2ZkNDAwMAotI2RlZmluZSBNWDI1X09UR19CQVNFX0FERFIJCTB4NTNmZjQwMDAKKyNkZWZpbmUgTVgyNV9VU0JfQkFTRV9BRERSCQkweDUzZmY0MDAwCisjZGVmaW5lIE1YMjVfVVNCX09UR19CQVNFX0FERFIJCQkoTVgyNV9VU0JfQkFTRV9BRERSICsgMHgwMDAwKQorLyoKKyAqIFRoZSByZWZlcmVuY2UgbWFudWFsIChJTVgyNVJNLCBSZXYuIDEsIDA2LzIwMDkpIHNwZWNpZmllcyBhbiBvZmZzZXQgb2YgMHgyMDAKKyAqIGZvciB0aGUgaG9zdCBjb250cm9sbGVyLiAgRWFybHkgZG9jdW1lbnRhdGlvbiBkcmFmdHMgc3BlY2lmaWVkIDB4NDAwIGFuZAorICogRnJlZXNjYWxlIGludGVybmFsIHNvdXJjZXMgY29uZmlybSBvbmx5IHRoZSBsYXR0ZXIgdmFsdWUgdG8gd29yay4KKyAqLworI2RlZmluZSBNWDI1X1VTQl9IU19CQVNFX0FERFIJCQkoTVgyNV9VU0JfQkFTRV9BRERSICsgMHgwNDAwKQogI2RlZmluZSBNWDI1X0NTSV9CQVNFX0FERFIJCTB4NTNmZjgwMDAKIAorI2RlZmluZSBNWDI1X0lPX1AyVih4KQkJCUlNWF9JT19QMlYoeCkKKyNkZWZpbmUgTVgyNV9JT19BRERSRVNTKHgpCQlJT01FTShNWDI1X0lPX1AyVih4KSkKKwogI2RlZmluZSBNWDI1X0lOVF9DU1BJMwkJMAogI2RlZmluZSBNWDI1X0lOVF9JMkMxCQkzCiAjZGVmaW5lIE1YMjVfSU5UX0kyQzIJCTQKQEAgLTY5LDE4ICs3MSwyOCBAQAogI2RlZmluZSBNWDI1X0lOVF9TU0kxCQkxMgogI2RlZmluZSBNWDI1X0lOVF9DU1BJMgkJMTMKICNkZWZpbmUgTVgyNV9JTlRfQ1NQSTEJCTE0CisjZGVmaW5lIE1YMjVfSU5UX0dQSU8zCQkxNgogI2RlZmluZSBNWDI1X0lOVF9DU0kJCTE3CiAjZGVmaW5lIE1YMjVfSU5UX1VBUlQzCQkxOAorI2RlZmluZSBNWDI1X0lOVF9HUElPNAkJMjMKICNkZWZpbmUgTVgyNV9JTlRfS1BQCQkyNAogI2RlZmluZSBNWDI1X0lOVF9EUllJQ0UJCTI1CisjZGVmaW5lIE1YMjVfSU5UX1BXTTEJCTI2CiAjZGVmaW5lIE1YMjVfSU5UX1VBUlQyCQkzMgogI2RlZmluZSBNWDI1X0lOVF9ORkMJCTMzCiAjZGVmaW5lIE1YMjVfSU5UX1NETUEJCTM0CisjZGVmaW5lIE1YMjVfSU5UX1VTQl9IUwkJMzUKKyNkZWZpbmUgTVgyNV9JTlRfUFdNMgkJMzYKKyNkZWZpbmUgTVgyNV9JTlRfVVNCX09URwkzNwogI2RlZmluZSBNWDI1X0lOVF9MQ0RDCQkzOQogI2RlZmluZSBNWDI1X0lOVF9VQVJUNQkJNDAKKyNkZWZpbmUgTVgyNV9JTlRfUFdNMwkJNDEKKyNkZWZpbmUgTVgyNV9JTlRfUFdNNAkJNDIKICNkZWZpbmUgTVgyNV9JTlRfQ0FOMQkJNDMKICNkZWZpbmUgTVgyNV9JTlRfQ0FOMgkJNDQKICNkZWZpbmUgTVgyNV9JTlRfVUFSVDEJCTQ1CisjZGVmaW5lIE1YMjVfSU5UX0dQSU8yCQk1MQorI2RlZmluZSBNWDI1X0lOVF9HUElPMQkJNTIKICNkZWZpbmUgTVgyNV9JTlRfRkVDCQk1NwogCiAjZGVmaW5lIE1YMjVfRE1BX1JFUV9TU0kyX1JYMQkyMgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214MjcuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDI3LmgKaW5kZXggMjIzN2JhMi4uY2JjNDNhZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214MjcuaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgyNy5oCkBAIC0yOSw3ICsyOSw2IEBACiAjZW5kaWYKIAogI2RlZmluZSBNWDI3X0FJUElfQkFTRV9BRERSCQkweDEwMDAwMDAwCi0jZGVmaW5lIE1YMjdfQUlQSV9CQVNFX0FERFJfVklSVAkweGY0MDAwMDAwCiAjZGVmaW5lIE1YMjdfQUlQSV9TSVpFCQkJU1pfMU0KICNkZWZpbmUgTVgyN19ETUFfQkFTRV9BRERSCQkJKE1YMjdfQUlQSV9CQVNFX0FERFIgKyAweDAxMDAwKQogI2RlZmluZSBNWDI3X1dET0dfQkFTRV9BRERSCQkJKE1YMjdfQUlQSV9CQVNFX0FERFIgKyAweDAyMDAwKQpAQCAtNTIsNiArNTEsMTIgQEAKICNkZWZpbmUgTVgyN19TREhDMV9CQVNFX0FERFIJCQkoTVgyN19BSVBJX0JBU0VfQUREUiArIDB4MTMwMDApCiAjZGVmaW5lIE1YMjdfU0RIQzJfQkFTRV9BRERSCQkJKE1YMjdfQUlQSV9CQVNFX0FERFIgKyAweDE0MDAwKQogI2RlZmluZSBNWDI3X0dQSU9fQkFTRV9BRERSCQkJKE1YMjdfQUlQSV9CQVNFX0FERFIgKyAweDE1MDAwKQorI2RlZmluZSBNWDI3X0dQSU8xX0JBU0VfQUREUgkJCShNWDI3X0dQSU9fQkFTRV9BRERSICsgMHgwMDApCisjZGVmaW5lIE1YMjdfR1BJTzJfQkFTRV9BRERSCQkJKE1YMjdfR1BJT19CQVNFX0FERFIgKyAweDEwMCkKKyNkZWZpbmUgTVgyN19HUElPM19CQVNFX0FERFIJCQkoTVgyN19HUElPX0JBU0VfQUREUiArIDB4MjAwKQorI2RlZmluZSBNWDI3X0dQSU80X0JBU0VfQUREUgkJCShNWDI3X0dQSU9fQkFTRV9BRERSICsgMHgzMDApCisjZGVmaW5lIE1YMjdfR1BJTzVfQkFTRV9BRERSCQkJKE1YMjdfR1BJT19CQVNFX0FERFIgKyAweDQwMCkKKyNkZWZpbmUgTVgyN19HUElPNl9CQVNFX0FERFIJCQkoTVgyN19HUElPX0JBU0VfQUREUiArIDB4NTAwKQogI2RlZmluZSBNWDI3X0FVRE1VWF9CQVNFX0FERFIJCQkoTVgyN19BSVBJX0JBU0VfQUREUiArIDB4MTYwMDApCiAjZGVmaW5lIE1YMjdfQ1NQSTNfQkFTRV9BRERSCQkJKE1YMjdfQUlQSV9CQVNFX0FERFIgKyAweDE3MDAwKQogI2RlZmluZSBNWDI3X01TSENfQkFTRV9BRERSCQkJKE1YMjdfQUlQSV9CQVNFX0FERFIgKyAweDE4MDAwKQpAQCAtNjUsMTEgKzcwLDEzIEBACiAjZGVmaW5lIE1YMjdfTENEQ19CQVNFX0FERFIJCQkoTVgyN19BSVBJX0JBU0VfQUREUiArIDB4MjEwMDApCiAjZGVmaW5lIE1YMjdfU0xDRENfQkFTRV9BRERSCQkJKE1YMjdfQUlQSV9CQVNFX0FERFIgKyAweDIyMDAwKQogI2RlZmluZSBNWDI3X1ZQVV9CQVNFX0FERFIJCQkoTVgyN19BSVBJX0JBU0VfQUREUiArIDB4MjMwMDApCi0jZGVmaW5lIE1YMjdfVVNCT1RHX0JBU0VfQUREUgkJCShNWDI3X0FJUElfQkFTRV9BRERSICsgMHgyNDAwMCkKLSNkZWZpbmUgTVgyN19PVEdfQkFTRV9BRERSCQkJTVgyN19VU0JPVEdfQkFTRV9BRERSCisjZGVmaW5lIE1YMjdfVVNCX0JBU0VfQUREUgkJCShNWDI3X0FJUElfQkFTRV9BRERSICsgMHgyNDAwMCkKKyNkZWZpbmUgTVgyN19VU0JfT1RHX0JBU0VfQUREUgkJCShNWDI3X1VTQl9CQVNFX0FERFIgKyAweDAwMDApCisjZGVmaW5lIE1YMjdfVVNCX0hTMV9CQVNFX0FERFIJCQkoTVgyN19VU0JfQkFTRV9BRERSICsgMHgwMjAwKQorI2RlZmluZSBNWDI3X1VTQl9IUzJfQkFTRV9BRERSCQkJKE1YMjdfVVNCX0JBU0VfQUREUiArIDB4MDQwMCkKICNkZWZpbmUgTVgyN19TQUhBUkFfQkFTRV9BRERSCQkJKE1YMjdfQUlQSV9CQVNFX0FERFIgKyAweDI1MDAwKQotI2RlZmluZSBNWDI3X0VNTUFfUFBfQkFTRV9BRERSCQkJKE1YMjdfQUlQSV9CQVNFX0FERFIgKyAweDI2MDAwKQotI2RlZmluZSBNWDI3X0VNTUFfUFJQX0JBU0VfQUREUgkJCShNWDI3X0FJUElfQkFTRV9BRERSICsgMHgyNjQwMCkKKyNkZWZpbmUgTVgyN19FTU1BUFBfQkFTRV9BRERSCQkJKE1YMjdfQUlQSV9CQVNFX0FERFIgKyAweDI2MDAwKQorI2RlZmluZSBNWDI3X0VNTUFQUlBfQkFTRV9BRERSCQkJKE1YMjdfQUlQSV9CQVNFX0FERFIgKyAweDI2NDAwKQogI2RlZmluZSBNWDI3X0NDTV9CQVNFX0FERFIJCQkoTVgyN19BSVBJX0JBU0VfQUREUiArIDB4MjcwMDApCiAjZGVmaW5lIE1YMjdfU1lTQ1RSTF9CQVNFX0FERFIJCQkoTVgyN19BSVBJX0JBU0VfQUREUiArIDB4Mjc4MDApCiAjZGVmaW5lIE1YMjdfSUlNX0JBU0VfQUREUgkJCShNWDI3X0FJUElfQkFTRV9BRERSICsgMHgyODAwMCkKQEAgLTg3LDcgKzk0LDYgQEAKICNkZWZpbmUgTVgyN19ST01QX0JBU0VfQUREUgkJMHgxMDA0MTAwMAogCiAjZGVmaW5lIE1YMjdfU0FIQjFfQkFTRV9BRERSCQkweDgwMDAwMDAwCi0jZGVmaW5lIE1YMjdfU0FIQjFfQkFTRV9BRERSX1ZJUlQJMHhmNDEwMDAwMAogI2RlZmluZSBNWDI3X1NBSEIxX1NJWkUJCQlTWl8xTQogI2RlZmluZSBNWDI3X0NTSV9CQVNFX0FERFIJCQkoTVgyN19TQUhCMV9CQVNFX0FERFIgKyAweDAwMDApCiAjZGVmaW5lIE1YMjdfQVRBX0JBU0VfQUREUgkJCShNWDI3X1NBSEIxX0JBU0VfQUREUiArIDB4MTAwMCkKQEAgLTEwNSw3ICsxMTEsNiBAQAogCiAvKiBOQU5ELCBTRFJBTSwgV0VJTSwgTTNJRiwgRU1JIGNvbnRyb2xsZXJzICovCiAjZGVmaW5lIE1YMjdfWF9NRU1DX0JBU0VfQUREUgkJMHhkODAwMDAwMAotI2RlZmluZSBNWDI3X1hfTUVNQ19CQVNFX0FERFJfVklSVAkweGY0MjAwMDAwCiAjZGVmaW5lIE1YMjdfWF9NRU1DX1NJWkUJCVNaXzFNCiAjZGVmaW5lIE1YMjdfTkZDX0JBU0VfQUREUgkJCShNWDI3X1hfTUVNQ19CQVNFX0FERFIpCiAjZGVmaW5lIE1YMjdfU0RSQU1DX0JBU0VfQUREUgkJCShNWDI3X1hfTUVNQ19CQVNFX0FERFIgKyAweDEwMDApCkBAIC0xMjMsMTAgKzEyOCw4IEBACiAvKiBJUkFNICovCiAjZGVmaW5lIE1YMjdfSVJBTV9CQVNFX0FERFIJCTB4ZmZmZjRjMDAJLyogaW50ZXJuYWwgcmFtICovCiAKLSNkZWZpbmUgTVgyN19JT19BRERSRVNTKHgpICgJCQkJCQlcCi0JSU1YX0lPX0FERFJFU1MoeCwgTVgyN19BSVBJKSA/OgkJCQkJXAotCUlNWF9JT19BRERSRVNTKHgsIE1YMjdfU0FIQjEpID86CQkJCVwKLQlJTVhfSU9fQUREUkVTUyh4LCBNWDI3X1hfTUVNQykpCisjZGVmaW5lIE1YMjdfSU9fUDJWKHgpCQkJSU1YX0lPX1AyVih4KQorI2RlZmluZSBNWDI3X0lPX0FERFJFU1MoeCkJCUlPTUVNKE1YMjdfSU9fUDJWKHgpKQogCiAjaWZuZGVmIF9fQVNTRU1CTEVSX18KIHN0YXRpYyBpbmxpbmUgdm9pZCBteDI3X3NldHVwX3dlaW1jcyhzaXplX3QgY3MsCkBAIC0xOTIsOSArMTk1LDkgQEAKICNkZWZpbmUgTVgyN19JTlRfRU1NQVBSUAk1MQogI2RlZmluZSBNWDI3X0lOVF9FTU1BUFAJCTUyCiAjZGVmaW5lIE1YMjdfSU5UX1ZQVQkJNTMKLSNkZWZpbmUgTVgyN19JTlRfVVNCMQkJNTQKLSNkZWZpbmUgTVgyN19JTlRfVVNCMgkJNTUKLSNkZWZpbmUgTVgyN19JTlRfVVNCMwkJNTYKKyNkZWZpbmUgTVgyN19JTlRfVVNCX0hTMQk1NAorI2RlZmluZSBNWDI3X0lOVF9VU0JfSFMyCTU1CisjZGVmaW5lIE1YMjdfSU5UX1VTQl9PVEcJNTYKICNkZWZpbmUgTVgyN19JTlRfU0NDX1NNTgk1NwogI2RlZmluZSBNWDI3X0lOVF9TQ0NfU0NNCTU4CiAjZGVmaW5lIE1YMjdfSU5UX1NBSEFSQQkJNTkKQEAgLTI0MSw4MiArMjQ0LDggQEAKICNkZWZpbmUgTVgyN19ETUFfUkVRX1NESEMzCTM2CiAjZGVmaW5lIE1YMjdfRE1BX1JFUV9ORkMJMzcKIAotLyogc2lsaWNvbiByZXZpc2lvbnMgc3BlY2lmaWMgdG8gaS5NWDI3ICovCi0jZGVmaW5lIENISVBfUkVWXzFfMAkJMHgwMAotI2RlZmluZSBDSElQX1JFVl8yXzAJCTB4MDEKLQogI2lmbmRlZiBfX0FTU0VNQkxZX18KIGV4dGVybiBpbnQgbXgyN19yZXZpc2lvbih2b2lkKTsKICNlbmRpZgogCi0jaWZkZWYgSU1YX05FRURTX0RFUFJFQ0FURURfU1lNQk9MUwotLyogdGhlc2Ugc2hvdWxkIGdvIGF3YXkgKi8KLSNkZWZpbmUgTVNIQ19CQVNFX0FERFIgTVgyN19NU0hDX0JBU0VfQUREUgotI2RlZmluZSBHUFQ1X0JBU0VfQUREUiBNWDI3X0dQVDVfQkFTRV9BRERSCi0jZGVmaW5lIEdQVDRfQkFTRV9BRERSIE1YMjdfR1BUNF9CQVNFX0FERFIKLSNkZWZpbmUgVUFSVDVfQkFTRV9BRERSIE1YMjdfVUFSVDVfQkFTRV9BRERSCi0jZGVmaW5lIFVBUlQ2X0JBU0VfQUREUiBNWDI3X1VBUlQ2X0JBU0VfQUREUgotI2RlZmluZSBJMkMyX0JBU0VfQUREUiBNWDI3X0kyQzJfQkFTRV9BRERSCi0jZGVmaW5lIFNESEMzX0JBU0VfQUREUiBNWDI3X1NESEMzX0JBU0VfQUREUgotI2RlZmluZSBHUFQ2X0JBU0VfQUREUiBNWDI3X0dQVDZfQkFTRV9BRERSCi0jZGVmaW5lIFZQVV9CQVNFX0FERFIgTVgyN19WUFVfQkFTRV9BRERSCi0jZGVmaW5lIE9UR19CQVNFX0FERFIgTVgyN19PVEdfQkFTRV9BRERSCi0jZGVmaW5lIFNBSEFSQV9CQVNFX0FERFIgTVgyN19TQUhBUkFfQkFTRV9BRERSCi0jZGVmaW5lIElJTV9CQVNFX0FERFIgTVgyN19JSU1fQkFTRV9BRERSCi0jZGVmaW5lIFJUSUNfQkFTRV9BRERSIE1YMjdfUlRJQ19CQVNFX0FERFIKLSNkZWZpbmUgRkVDX0JBU0VfQUREUiBNWDI3X0ZFQ19CQVNFX0FERFIKLSNkZWZpbmUgU0NDX0JBU0VfQUREUiBNWDI3X1NDQ19CQVNFX0FERFIKLSNkZWZpbmUgRVRCX0JBU0VfQUREUiBNWDI3X0VUQl9CQVNFX0FERFIKLSNkZWZpbmUgRVRCX1JBTV9CQVNFX0FERFIgTVgyN19FVEJfUkFNX0JBU0VfQUREUgotI2RlZmluZSBST01QX0JBU0VfQUREUiBNWDI3X1JPTVBfQkFTRV9BRERSCi0jZGVmaW5lIEFUQV9CQVNFX0FERFIgTVgyN19BVEFfQkFTRV9BRERSCi0jZGVmaW5lIFNEUkFNX0JBU0VfQUREUiBNWDI3X1NEUkFNX0JBU0VfQUREUgotI2RlZmluZSBDU0QxX0JBU0VfQUREUiBNWDI3X0NTRDFfQkFTRV9BRERSCi0jZGVmaW5lIENTMF9CQVNFX0FERFIgTVgyN19DUzBfQkFTRV9BRERSCi0jZGVmaW5lIENTMV9CQVNFX0FERFIgTVgyN19DUzFfQkFTRV9BRERSCi0jZGVmaW5lIENTMl9CQVNFX0FERFIgTVgyN19DUzJfQkFTRV9BRERSCi0jZGVmaW5lIENTM19CQVNFX0FERFIgTVgyN19DUzNfQkFTRV9BRERSCi0jZGVmaW5lIENTNF9CQVNFX0FERFIgTVgyN19DUzRfQkFTRV9BRERSCi0jZGVmaW5lIENTNV9CQVNFX0FERFIgTVgyN19DUzVfQkFTRV9BRERSCi0jZGVmaW5lIFhfTUVNQ19CQVNFX0FERFIgTVgyN19YX01FTUNfQkFTRV9BRERSCi0jZGVmaW5lIFhfTUVNQ19CQVNFX0FERFJfVklSVCBNWDI3X1hfTUVNQ19CQVNFX0FERFJfVklSVAotI2RlZmluZSBYX01FTUNfU0laRSBNWDI3X1hfTUVNQ19TSVpFCi0jZGVmaW5lIE5GQ19CQVNFX0FERFIgTVgyN19ORkNfQkFTRV9BRERSCi0jZGVmaW5lIFNEUkFNQ19CQVNFX0FERFIgTVgyN19TRFJBTUNfQkFTRV9BRERSCi0jZGVmaW5lIFdFSU1fQkFTRV9BRERSIE1YMjdfV0VJTV9CQVNFX0FERFIKLSNkZWZpbmUgTTNJRl9CQVNFX0FERFIgTVgyN19NM0lGX0JBU0VfQUREUgotI2RlZmluZSBQQ01DSUFfQ1RMX0JBU0VfQUREUiBNWDI3X1BDTUNJQV9DVExfQkFTRV9BRERSCi0jZGVmaW5lIFBDTUNJQV9NRU1fQkFTRV9BRERSIE1YMjdfUENNQ0lBX01FTV9CQVNFX0FERFIKLSNkZWZpbmUgSVJBTV9CQVNFX0FERFIgTVgyN19JUkFNX0JBU0VfQUREUgotI2RlZmluZSBNWENfSU5UX0kyQzIgTVgyN19JTlRfSTJDMgotI2RlZmluZSBNWENfSU5UX0dQVDYgTVgyN19JTlRfR1BUNgotI2RlZmluZSBNWENfSU5UX0dQVDUgTVgyN19JTlRfR1BUNQotI2RlZmluZSBNWENfSU5UX0dQVDQgTVgyN19JTlRfR1BUNAotI2RlZmluZSBNWENfSU5UX1JUSUMgTVgyN19JTlRfUlRJQwotI2RlZmluZSBNWENfSU5UX1NESEMgTVgyN19JTlRfU0RIQwotI2RlZmluZSBNWENfSU5UX1NESEMzIE1YMjdfSU5UX1NESEMzCi0jZGVmaW5lIE1YQ19JTlRfQVRBIE1YMjdfSU5UX0FUQQotI2RlZmluZSBNWENfSU5UX1VBUlQ2IE1YMjdfSU5UX1VBUlQ2Ci0jZGVmaW5lIE1YQ19JTlRfVUFSVDUgTVgyN19JTlRfVUFSVDUKLSNkZWZpbmUgTVhDX0lOVF9GRUMgTVgyN19JTlRfRkVDCi0jZGVmaW5lIE1YQ19JTlRfVlBVIE1YMjdfSU5UX1ZQVQotI2RlZmluZSBNWENfSU5UX1VTQjEgTVgyN19JTlRfVVNCMQotI2RlZmluZSBNWENfSU5UX1VTQjIgTVgyN19JTlRfVVNCMgotI2RlZmluZSBNWENfSU5UX1VTQjMgTVgyN19JTlRfVVNCMwotI2RlZmluZSBNWENfSU5UX1NDQ19TTU4gTVgyN19JTlRfU0NDX1NNTgotI2RlZmluZSBNWENfSU5UX1NDQ19TQ00gTVgyN19JTlRfU0NDX1NDTQotI2RlZmluZSBNWENfSU5UX1NBSEFSQSBNWDI3X0lOVF9TQUhBUkEKLSNkZWZpbmUgTVhDX0lOVF9JSU0gTVgyN19JTlRfSUlNCi0jZGVmaW5lIE1YQ19JTlRfQ0NNIE1YMjdfSU5UX0NDTQotI2RlZmluZSBETUFfUkVRX01TSEMgTVgyN19ETUFfUkVRX01TSEMKLSNkZWZpbmUgRE1BX1JFUV9BVEFfVFggTVgyN19ETUFfUkVRX0FUQV9UWAotI2RlZmluZSBETUFfUkVRX0FUQV9SQ1YgTVgyN19ETUFfUkVRX0FUQV9SQ1YKLSNkZWZpbmUgRE1BX1JFUV9VQVJUNV9UWCBNWDI3X0RNQV9SRVFfVUFSVDVfVFgKLSNkZWZpbmUgRE1BX1JFUV9VQVJUNV9SWCBNWDI3X0RNQV9SRVFfVUFSVDVfUlgKLSNkZWZpbmUgRE1BX1JFUV9VQVJUNl9UWCBNWDI3X0RNQV9SRVFfVUFSVDZfVFgKLSNkZWZpbmUgRE1BX1JFUV9VQVJUNl9SWCBNWDI3X0RNQV9SRVFfVUFSVDZfUlgKLSNkZWZpbmUgRE1BX1JFUV9TREhDMyBNWDI3X0RNQV9SRVFfU0RIQzMKLSNkZWZpbmUgRE1BX1JFUV9ORkMgTVgyN19ETUFfUkVRX05GQwotI2VuZGlmCi0KICNlbmRpZiAvKiBpZm5kZWYgX19NQUNIX01YMjdfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgyeC5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214MnguaAppbmRleCBhZmI4OTVhLi42ZDA3ODM5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgyeC5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDJ4LmgKQEAgLTI3LDcgKzI3LDYgQEAKIAogLyogUmVnaXN0ZXIgb2Zmc2V0cyAqLwogI2RlZmluZSBNWDJ4X0FJUElfQkFTRV9BRERSCQkweDEwMDAwMDAwCi0jZGVmaW5lIE1YMnhfQUlQSV9CQVNFX0FERFJfVklSVAkweGY0MDAwMDAwCiAjZGVmaW5lIE1YMnhfQUlQSV9TSVpFCQkJU1pfMU0KICNkZWZpbmUgTVgyeF9ETUFfQkFTRV9BRERSCQkJKE1YMnhfQUlQSV9CQVNFX0FERFIgKyAweDAxMDAwKQogI2RlZmluZSBNWDJ4X1dET0dfQkFTRV9BRERSCQkJKE1YMnhfQUlQSV9CQVNFX0FERFIgKyAweDAyMDAwKQpAQCAtNjUsNDMgKzY0LDkgQEAKICNkZWZpbmUgTVgyeF9BVklDX0JBU0VfQUREUgkJMHgxMDA0MDAwMAogCiAjZGVmaW5lIE1YMnhfU0FIQjFfQkFTRV9BRERSCQkweDgwMDAwMDAwCi0jZGVmaW5lIE1YMnhfU0FIQjFfQkFTRV9BRERSX1ZJUlQJMHhmNDEwMDAwMAogI2RlZmluZSBNWDJ4X1NBSEIxX1NJWkUJCQlTWl8xTQogI2RlZmluZSBNWDJ4X0NTSV9CQVNFX0FERFIJCQkoTVgyeF9TQUhCMV9CQVNFX0FERFIgKyAweDAwMDApCiAKLS8qCi0gKiBUaGlzIG1hY3JvIGRlZmluZXMgdGhlIHBoeXNpY2FsIHRvIHZpcnR1YWwgYWRkcmVzcyBtYXBwaW5nIGZvciBhbGwgdGhlCi0gKiBwZXJpcGhlcmFsIG1vZHVsZXMuIEl0IGlzIHVzZWQgYnkgcGFzc2luZyBpbiB0aGUgcGh5c2ljYWwgYWRkcmVzcyBhcyB4Ci0gKiBhbmQgcmV0dXJuaW5nIHRoZSB2aXJ0dWFsIGFkZHJlc3MuIElmIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGlzIG5vdCBtYXBwZWQsCi0gKiBpdCByZXR1cm5zIDB4REVBREJFRUYKLSAqLwotI2RlZmluZSBJT19BRERSRVNTKHgpICAgXAotCSh2b2lkIF9fZm9yY2UgX19pb21lbSAqKSBcCi0JKCgoeCA+PSBBSVBJX0JBU0VfQUREUikgJiYgKHggPCAoQUlQSV9CQVNFX0FERFIgKyBBSVBJX1NJWkUpKSkgPyBcCi0JCUFJUElfSU9fQUREUkVTUyh4KSA6IFwKLQkoKHggPj0gU0FIQjFfQkFTRV9BRERSKSAmJiAoeCA8IChTQUhCMV9CQVNFX0FERFIgKyBTQUhCMV9TSVpFKSkpID8gXAotCQlTQUhCMV9JT19BRERSRVNTKHgpIDogXAotCSgoeCA+PSBYX01FTUNfQkFTRV9BRERSKSAmJiAoeCA8IChYX01FTUNfQkFTRV9BRERSICsgWF9NRU1DX1NJWkUpKSkgPyBcCi0JCVhfTUVNQ19JT19BRERSRVNTKHgpIDogMHhERUFEQkVFRikKLQotLyogZGVmaW5lIHRoZSBhZGRyZXNzIG1hcHBpbmcgbWFjcm9zOiBpbiBwaHlzaWNhbCBhZGRyZXNzIG9yZGVyICovCi0jZGVmaW5lIEFJUElfSU9fQUREUkVTUyh4KSAgXAotCSgoKHgpIC0gQUlQSV9CQVNFX0FERFIpICsgQUlQSV9CQVNFX0FERFJfVklSVCkKLQotI2RlZmluZSBBVklDX0lPX0FERFJFU1MoeCkJQUlQSV9JT19BRERSRVNTKHgpCi0KLSNkZWZpbmUgU0FIQjFfSU9fQUREUkVTUyh4KSAgXAotCSgoKHgpIC0gU0FIQjFfQkFTRV9BRERSKSArIFNBSEIxX0JBU0VfQUREUl9WSVJUKQotCi0jZGVmaW5lIENTNF9JT19BRERSRVNTKHgpICBcCi0JKCgoeCkgLSBDUzRfQkFTRV9BRERSKSArIENTNF9CQVNFX0FERFJfVklSVCkKLQotI2RlZmluZSBYX01FTUNfSU9fQUREUkVTUyh4KSAgXAotCSgoKHgpIC0gWF9NRU1DX0JBU0VfQUREUikgKyBYX01FTUNfQkFTRV9BRERSX1ZJUlQpCi0KLSNkZWZpbmUgUENNQ0lBX0lPX0FERFJFU1MoeCkgXAotCSgoKHgpIC0gWF9NRU1DX0JBU0VfQUREUikgKyBYX01FTUNfQkFTRV9BRERSX1ZJUlQpCi0KIC8qIGZpeGVkIGludGVycnVwdCBudW1iZXJzICovCiAjZGVmaW5lIE1YMnhfSU5UX0NTUEkzCQk2CiAjZGVmaW5lIE1YMnhfSU5UX0dQSU8JCTgKQEAgLTE3NiwxMTggKzE0MSw0IEBACiAjZGVmaW5lIE1YMnhfRE1BX1JFUV9DU0lfU1RBVAkzMAogI2RlZmluZSBNWDJ4X0RNQV9SRVFfQ1NJX1JYCTMxCiAKLSNpZmRlZiBJTVhfTkVFRFNfREVQUkVDQVRFRF9TWU1CT0xTCi0vKiB0aGVzZSBzaG91bGQgZ28gYXdheSAqLwotI2RlZmluZSBBSVBJX0JBU0VfQUREUiBNWDJ4X0FJUElfQkFTRV9BRERSCi0jZGVmaW5lIEFJUElfQkFTRV9BRERSX1ZJUlQgTVgyeF9BSVBJX0JBU0VfQUREUl9WSVJUCi0jZGVmaW5lIEFJUElfU0laRSBNWDJ4X0FJUElfU0laRQotI2RlZmluZSBETUFfQkFTRV9BRERSIE1YMnhfRE1BX0JBU0VfQUREUgotI2RlZmluZSBXRE9HX0JBU0VfQUREUiBNWDJ4X1dET0dfQkFTRV9BRERSCi0jZGVmaW5lIEdQVDFfQkFTRV9BRERSIE1YMnhfR1BUMV9CQVNFX0FERFIKLSNkZWZpbmUgR1BUMl9CQVNFX0FERFIgTVgyeF9HUFQyX0JBU0VfQUREUgotI2RlZmluZSBHUFQzX0JBU0VfQUREUiBNWDJ4X0dQVDNfQkFTRV9BRERSCi0jZGVmaW5lIFBXTV9CQVNFX0FERFIgTVgyeF9QV01fQkFTRV9BRERSCi0jZGVmaW5lIFJUQ19CQVNFX0FERFIgTVgyeF9SVENfQkFTRV9BRERSCi0jZGVmaW5lIEtQUF9CQVNFX0FERFIgTVgyeF9LUFBfQkFTRV9BRERSCi0jZGVmaW5lIE9XSVJFX0JBU0VfQUREUiBNWDJ4X09XSVJFX0JBU0VfQUREUgotI2RlZmluZSBVQVJUMV9CQVNFX0FERFIgTVgyeF9VQVJUMV9CQVNFX0FERFIKLSNkZWZpbmUgVUFSVDJfQkFTRV9BRERSIE1YMnhfVUFSVDJfQkFTRV9BRERSCi0jZGVmaW5lIFVBUlQzX0JBU0VfQUREUiBNWDJ4X1VBUlQzX0JBU0VfQUREUgotI2RlZmluZSBVQVJUNF9CQVNFX0FERFIgTVgyeF9VQVJUNF9CQVNFX0FERFIKLSNkZWZpbmUgQ1NQSTFfQkFTRV9BRERSIE1YMnhfQ1NQSTFfQkFTRV9BRERSCi0jZGVmaW5lIENTUEkyX0JBU0VfQUREUiBNWDJ4X0NTUEkyX0JBU0VfQUREUgotI2RlZmluZSBTU0kxX0JBU0VfQUREUiBNWDJ4X1NTSTFfQkFTRV9BRERSCi0jZGVmaW5lIFNTSTJfQkFTRV9BRERSIE1YMnhfU1NJMl9CQVNFX0FERFIKLSNkZWZpbmUgSTJDX0JBU0VfQUREUiBNWDJ4X0kyQ19CQVNFX0FERFIKLSNkZWZpbmUgU0RIQzFfQkFTRV9BRERSIE1YMnhfU0RIQzFfQkFTRV9BRERSCi0jZGVmaW5lIFNESEMyX0JBU0VfQUREUiBNWDJ4X1NESEMyX0JBU0VfQUREUgotI2RlZmluZSBHUElPX0JBU0VfQUREUiBNWDJ4X0dQSU9fQkFTRV9BRERSCi0jZGVmaW5lIEFVRE1VWF9CQVNFX0FERFIgTVgyeF9BVURNVVhfQkFTRV9BRERSCi0jZGVmaW5lIENTUEkzX0JBU0VfQUREUiBNWDJ4X0NTUEkzX0JBU0VfQUREUgotI2RlZmluZSBMQ0RDX0JBU0VfQUREUiBNWDJ4X0xDRENfQkFTRV9BRERSCi0jZGVmaW5lIFNMQ0RDX0JBU0VfQUREUiBNWDJ4X1NMQ0RDX0JBU0VfQUREUgotI2RlZmluZSBVU0JPVEdfQkFTRV9BRERSIE1YMnhfVVNCT1RHX0JBU0VfQUREUgotI2RlZmluZSBFTU1BX1BQX0JBU0VfQUREUiBNWDJ4X0VNTUFfUFBfQkFTRV9BRERSCi0jZGVmaW5lIEVNTUFfUFJQX0JBU0VfQUREUiBNWDJ4X0VNTUFfUFJQX0JBU0VfQUREUgotI2RlZmluZSBDQ01fQkFTRV9BRERSIE1YMnhfQ0NNX0JBU0VfQUREUgotI2RlZmluZSBTWVNDVFJMX0JBU0VfQUREUiBNWDJ4X1NZU0NUUkxfQkFTRV9BRERSCi0jZGVmaW5lIEpBTV9CQVNFX0FERFIgTVgyeF9KQU1fQkFTRV9BRERSCi0jZGVmaW5lIE1BWF9CQVNFX0FERFIgTVgyeF9NQVhfQkFTRV9BRERSCi0jZGVmaW5lIEFWSUNfQkFTRV9BRERSIE1YMnhfQVZJQ19CQVNFX0FERFIKLSNkZWZpbmUgU0FIQjFfQkFTRV9BRERSIE1YMnhfU0FIQjFfQkFTRV9BRERSCi0jZGVmaW5lIFNBSEIxX0JBU0VfQUREUl9WSVJUIE1YMnhfU0FIQjFfQkFTRV9BRERSX1ZJUlQKLSNkZWZpbmUgU0FIQjFfU0laRSBNWDJ4X1NBSEIxX1NJWkUKLSNkZWZpbmUgQ1NJX0JBU0VfQUREUiBNWDJ4X0NTSV9CQVNFX0FERFIKLSNkZWZpbmUgTVhDX0lOVF9DU1BJMyBNWDJ4X0lOVF9DU1BJMwotI2RlZmluZSBNWENfSU5UX0dQSU8gTVgyeF9JTlRfR1BJTwotI2RlZmluZSBNWENfSU5UX1NESEMyIE1YMnhfSU5UX1NESEMyCi0jZGVmaW5lIE1YQ19JTlRfU0RIQzEgTVgyeF9JTlRfU0RIQzEKLSNkZWZpbmUgTVhDX0lOVF9JMkMgTVgyeF9JTlRfSTJDCi0jZGVmaW5lIE1YQ19JTlRfU1NJMiBNWDJ4X0lOVF9TU0kyCi0jZGVmaW5lIE1YQ19JTlRfU1NJMSBNWDJ4X0lOVF9TU0kxCi0jZGVmaW5lIE1YQ19JTlRfQ1NQSTIgTVgyeF9JTlRfQ1NQSTIKLSNkZWZpbmUgTVhDX0lOVF9DU1BJMSBNWDJ4X0lOVF9DU1BJMQotI2RlZmluZSBNWENfSU5UX1VBUlQ0IE1YMnhfSU5UX1VBUlQ0Ci0jZGVmaW5lIE1YQ19JTlRfVUFSVDMgTVgyeF9JTlRfVUFSVDMKLSNkZWZpbmUgTVhDX0lOVF9VQVJUMiBNWDJ4X0lOVF9VQVJUMgotI2RlZmluZSBNWENfSU5UX1VBUlQxIE1YMnhfSU5UX1VBUlQxCi0jZGVmaW5lIE1YQ19JTlRfS1BQIE1YMnhfSU5UX0tQUAotI2RlZmluZSBNWENfSU5UX1JUQyBNWDJ4X0lOVF9SVEMKLSNkZWZpbmUgTVhDX0lOVF9QV00gTVgyeF9JTlRfUFdNCi0jZGVmaW5lIE1YQ19JTlRfR1BUMyBNWDJ4X0lOVF9HUFQzCi0jZGVmaW5lIE1YQ19JTlRfR1BUMiBNWDJ4X0lOVF9HUFQyCi0jZGVmaW5lIE1YQ19JTlRfR1BUMSBNWDJ4X0lOVF9HUFQxCi0jZGVmaW5lIE1YQ19JTlRfV0RPRyBNWDJ4X0lOVF9XRE9HCi0jZGVmaW5lIE1YQ19JTlRfUENNQ0lBIE1YMnhfSU5UX1BDTUNJQQotI2RlZmluZSBNWENfSU5UX05BTkRGQyBNWDJ4X0lOVF9OQU5ERkMKLSNkZWZpbmUgTVhDX0lOVF9DU0kgTVgyeF9JTlRfQ1NJCi0jZGVmaW5lIE1YQ19JTlRfRE1BQ0gwIE1YMnhfSU5UX0RNQUNIMAotI2RlZmluZSBNWENfSU5UX0RNQUNIMSBNWDJ4X0lOVF9ETUFDSDEKLSNkZWZpbmUgTVhDX0lOVF9ETUFDSDIgTVgyeF9JTlRfRE1BQ0gyCi0jZGVmaW5lIE1YQ19JTlRfRE1BQ0gzIE1YMnhfSU5UX0RNQUNIMwotI2RlZmluZSBNWENfSU5UX0RNQUNINCBNWDJ4X0lOVF9ETUFDSDQKLSNkZWZpbmUgTVhDX0lOVF9ETUFDSDUgTVgyeF9JTlRfRE1BQ0g1Ci0jZGVmaW5lIE1YQ19JTlRfRE1BQ0g2IE1YMnhfSU5UX0RNQUNINgotI2RlZmluZSBNWENfSU5UX0RNQUNINyBNWDJ4X0lOVF9ETUFDSDcKLSNkZWZpbmUgTVhDX0lOVF9ETUFDSDggTVgyeF9JTlRfRE1BQ0g4Ci0jZGVmaW5lIE1YQ19JTlRfRE1BQ0g5IE1YMnhfSU5UX0RNQUNIOQotI2RlZmluZSBNWENfSU5UX0RNQUNIMTAgTVgyeF9JTlRfRE1BQ0gxMAotI2RlZmluZSBNWENfSU5UX0RNQUNIMTEgTVgyeF9JTlRfRE1BQ0gxMQotI2RlZmluZSBNWENfSU5UX0RNQUNIMTIgTVgyeF9JTlRfRE1BQ0gxMgotI2RlZmluZSBNWENfSU5UX0RNQUNIMTMgTVgyeF9JTlRfRE1BQ0gxMwotI2RlZmluZSBNWENfSU5UX0RNQUNIMTQgTVgyeF9JTlRfRE1BQ0gxNAotI2RlZmluZSBNWENfSU5UX0RNQUNIMTUgTVgyeF9JTlRfRE1BQ0gxNQotI2RlZmluZSBNWENfSU5UX0VNTUFQUlAgTVgyeF9JTlRfRU1NQVBSUAotI2RlZmluZSBNWENfSU5UX0VNTUFQUCBNWDJ4X0lOVF9FTU1BUFAKLSNkZWZpbmUgTVhDX0lOVF9TTENEQyBNWDJ4X0lOVF9TTENEQwotI2RlZmluZSBNWENfSU5UX0xDREMgTVgyeF9JTlRfTENEQwotI2RlZmluZSBETUFfUkVRX0NTUEkzX1JYIE1YMnhfRE1BX1JFUV9DU1BJM19SWAotI2RlZmluZSBETUFfUkVRX0NTUEkzX1RYIE1YMnhfRE1BX1JFUV9DU1BJM19UWAotI2RlZmluZSBETUFfUkVRX0VYVCBNWDJ4X0RNQV9SRVFfRVhUCi0jZGVmaW5lIERNQV9SRVFfU0RIQzIgTVgyeF9ETUFfUkVRX1NESEMyCi0jZGVmaW5lIERNQV9SRVFfU0RIQzEgTVgyeF9ETUFfUkVRX1NESEMxCi0jZGVmaW5lIERNQV9SRVFfU1NJMl9SWDAgTVgyeF9ETUFfUkVRX1NTSTJfUlgwCi0jZGVmaW5lIERNQV9SRVFfU1NJMl9UWDAgTVgyeF9ETUFfUkVRX1NTSTJfVFgwCi0jZGVmaW5lIERNQV9SRVFfU1NJMl9SWDEgTVgyeF9ETUFfUkVRX1NTSTJfUlgxCi0jZGVmaW5lIERNQV9SRVFfU1NJMl9UWDEgTVgyeF9ETUFfUkVRX1NTSTJfVFgxCi0jZGVmaW5lIERNQV9SRVFfU1NJMV9SWDAgTVgyeF9ETUFfUkVRX1NTSTFfUlgwCi0jZGVmaW5lIERNQV9SRVFfU1NJMV9UWDAgTVgyeF9ETUFfUkVRX1NTSTFfVFgwCi0jZGVmaW5lIERNQV9SRVFfU1NJMV9SWDEgTVgyeF9ETUFfUkVRX1NTSTFfUlgxCi0jZGVmaW5lIERNQV9SRVFfU1NJMV9UWDEgTVgyeF9ETUFfUkVRX1NTSTFfVFgxCi0jZGVmaW5lIERNQV9SRVFfQ1NQSTJfUlggTVgyeF9ETUFfUkVRX0NTUEkyX1JYCi0jZGVmaW5lIERNQV9SRVFfQ1NQSTJfVFggTVgyeF9ETUFfUkVRX0NTUEkyX1RYCi0jZGVmaW5lIERNQV9SRVFfQ1NQSTFfUlggTVgyeF9ETUFfUkVRX0NTUEkxX1JYCi0jZGVmaW5lIERNQV9SRVFfQ1NQSTFfVFggTVgyeF9ETUFfUkVRX0NTUEkxX1RYCi0jZGVmaW5lIERNQV9SRVFfVUFSVDRfUlggTVgyeF9ETUFfUkVRX1VBUlQ0X1JYCi0jZGVmaW5lIERNQV9SRVFfVUFSVDRfVFggTVgyeF9ETUFfUkVRX1VBUlQ0X1RYCi0jZGVmaW5lIERNQV9SRVFfVUFSVDNfUlggTVgyeF9ETUFfUkVRX1VBUlQzX1JYCi0jZGVmaW5lIERNQV9SRVFfVUFSVDNfVFggTVgyeF9ETUFfUkVRX1VBUlQzX1RYCi0jZGVmaW5lIERNQV9SRVFfVUFSVDJfUlggTVgyeF9ETUFfUkVRX1VBUlQyX1JYCi0jZGVmaW5lIERNQV9SRVFfVUFSVDJfVFggTVgyeF9ETUFfUkVRX1VBUlQyX1RYCi0jZGVmaW5lIERNQV9SRVFfVUFSVDFfUlggTVgyeF9ETUFfUkVRX1VBUlQxX1JYCi0jZGVmaW5lIERNQV9SRVFfVUFSVDFfVFggTVgyeF9ETUFfUkVRX1VBUlQxX1RYCi0jZGVmaW5lIERNQV9SRVFfQ1NJX1NUQVQgTVgyeF9ETUFfUkVRX0NTSV9TVEFUCi0jZGVmaW5lIERNQV9SRVFfQ1NJX1JYIE1YMnhfRE1BX1JFUV9DU0lfUlgKLSNlbmRpZgotCiAjZW5kaWYgLyogaWZuZGVmIF9fTUFDSF9NWDJ4X0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214MzEuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDMxLmgKaW5kZXggNjFjZmU4Mi4uNzllN2ZjMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214MzEuaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgzMS5oCkBAIC0xNSw3ICsxNSw2IEBACiAjZGVmaW5lIE1YMzFfTDJDQ19TSVpFCQkJU1pfMU0KIAogI2RlZmluZSBNWDMxX0FJUFMxX0JBU0VfQUREUgkJMHg0M2YwMDAwMAotI2RlZmluZSBNWDMxX0FJUFMxX0JBU0VfQUREUl9WSVJUCTB4ZmMwMDAwMDAKICNkZWZpbmUgTVgzMV9BSVBTMV9TSVpFCQkJU1pfMU0KICNkZWZpbmUgTVgzMV9NQVhfQkFTRV9BRERSCQkJKE1YMzFfQUlQUzFfQkFTRV9BRERSICsgMHgwNDAwMCkKICNkZWZpbmUgTVgzMV9FVlRNT05fQkFTRV9BRERSCQkJKE1YMzFfQUlQUzFfQkFTRV9BRERSICsgMHgwODAwMCkKQEAgLTI1LDcgKzI0LDEwIEBACiAjZGVmaW5lIE1YMzFfRUNUX0NUSU9fQkFTRV9BRERSCQkJKE1YMzFfQUlQUzFfQkFTRV9BRERSICsgMHgxODAwMCkKICNkZWZpbmUgTVgzMV9JMkMxX0JBU0VfQUREUgkJCShNWDMxX0FJUFMxX0JBU0VfQUREUiArIDB4ODAwMDApCiAjZGVmaW5lIE1YMzFfSTJDM19CQVNFX0FERFIJCQkoTVgzMV9BSVBTMV9CQVNFX0FERFIgKyAweDg0MDAwKQotI2RlZmluZSBNWDMxX09UR19CQVNFX0FERFIJCQkoTVgzMV9BSVBTMV9CQVNFX0FERFIgKyAweDg4MDAwKQorI2RlZmluZSBNWDMxX1VTQl9CQVNFX0FERFIJCQkoTVgzMV9BSVBTMV9CQVNFX0FERFIgKyAweDg4MDAwKQorI2RlZmluZSBNWDMxX1VTQl9PVEdfQkFTRV9BRERSCQkJKE1YMzFfVVNCX0JBU0VfQUREUiArIDB4MDAwMCkKKyNkZWZpbmUgTVgzMV9VU0JfSFMxX0JBU0VfQUREUgkJCShNWDMxX1VTQl9CQVNFX0FERFIgKyAweDAyMDApCisjZGVmaW5lIE1YMzFfVVNCX0hTMl9CQVNFX0FERFIJCQkoTVgzMV9VU0JfQkFTRV9BRERSICsgMHgwNDAwKQogI2RlZmluZSBNWDMxX0FUQV9CQVNFX0FERFIJCQkoTVgzMV9BSVBTMV9CQVNFX0FERFIgKyAweDhjMDAwKQogI2RlZmluZSBNWDMxX1VBUlQxX0JBU0VfQUREUgkJCShNWDMxX0FJUFMxX0JBU0VfQUREUiArIDB4OTAwMDApCiAjZGVmaW5lIE1YMzFfVUFSVDJfQkFTRV9BRERSCQkJKE1YMzFfQUlQUzFfQkFTRV9BRERSICsgMHg5NDAwMCkKQEAgLTQxLDEwICs0Myw5IEBACiAjZGVmaW5lIE1YMzFfRUNUX0lQMl9CQVNFX0FERFIJCQkoTVgzMV9BSVBTMV9CQVNFX0FERFIgKyAweGJjMDAwKQogCiAjZGVmaW5lIE1YMzFfU1BCQTBfQkFTRV9BRERSCQkweDUwMDAwMDAwCi0jZGVmaW5lIE1YMzFfU1BCQTBfQkFTRV9BRERSX1ZJUlQJMHhmYzEwMDAwMAogI2RlZmluZSBNWDMxX1NQQkEwX1NJWkUJCQlTWl8xTQotI2RlZmluZSBNWDMxX01NQ19TREhDMV9CQVNFX0FERFIJCShNWDMxX1NQQkEwX0JBU0VfQUREUiArIDB4MDQwMDApCi0jZGVmaW5lIE1YMzFfTU1DX1NESEMyX0JBU0VfQUREUgkJKE1YMzFfU1BCQTBfQkFTRV9BRERSICsgMHgwODAwMCkKKyNkZWZpbmUgTVgzMV9TREhDMV9CQVNFX0FERFIJCQkoTVgzMV9TUEJBMF9CQVNFX0FERFIgKyAweDA0MDAwKQorI2RlZmluZSBNWDMxX1NESEMyX0JBU0VfQUREUgkJCShNWDMxX1NQQkEwX0JBU0VfQUREUiArIDB4MDgwMDApCiAjZGVmaW5lIE1YMzFfVUFSVDNfQkFTRV9BRERSCQkJKE1YMzFfU1BCQTBfQkFTRV9BRERSICsgMHgwYzAwMCkKICNkZWZpbmUgTVgzMV9DU1BJMl9CQVNFX0FERFIJCQkoTVgzMV9TUEJBMF9CQVNFX0FERFIgKyAweDEwMDAwKQogI2RlZmluZSBNWDMxX1NTSTJfQkFTRV9BRERSCQkJKE1YMzFfU1BCQTBfQkFTRV9BRERSICsgMHgxNDAwMCkKQEAgLTU1LDcgKzU2LDYgQEAKICNkZWZpbmUgTVgzMV9TUEJBX0NUUkxfQkFTRV9BRERSCQkoTVgzMV9TUEJBMF9CQVNFX0FERFIgKyAweDNjMDAwKQogCiAjZGVmaW5lIE1YMzFfQUlQUzJfQkFTRV9BRERSCQkweDUzZjAwMDAwCi0jZGVmaW5lIE1YMzFfQUlQUzJfQkFTRV9BRERSX1ZJUlQJMHhmYzIwMDAwMAogI2RlZmluZSBNWDMxX0FJUFMyX1NJWkUJCQlTWl8xTQogI2RlZmluZSBNWDMxX0NDTV9CQVNFX0FERFIJCQkoTVgzMV9BSVBTMl9CQVNFX0FERFIgKyAweDgwMDAwKQogI2RlZmluZSBNWDMxX0NTUEkzX0JBU0VfQUREUgkJCShNWDMxX0FJUFMyX0JBU0VfQUREUiArIDB4ODQwMDApCkBAIC04NCw3ICs4NCw2IEBACiAjZGVmaW5lIE1YMzFfUk9NUF9TSVpFCQkJU1pfMU0KIAogI2RlZmluZSBNWDMxX0FWSUNfQkFTRV9BRERSCQkweDY4MDAwMDAwCi0jZGVmaW5lIE1YMzFfQVZJQ19CQVNFX0FERFJfVklSVAkweGZjNDAwMDAwCiAjZGVmaW5lIE1YMzFfQVZJQ19TSVpFCQkJU1pfMU0KIAogI2RlZmluZSBNWDMxX0lQVV9NRU1fQkFTRV9BRERSCQkweDcwMDAwMDAwCkBAIC05NywxNSArOTYsMTQgQEAKICNkZWZpbmUgTVgzMV9DUzNfQkFTRV9BRERSCQkweGIyMDAwMDAwCiAKICNkZWZpbmUgTVgzMV9DUzRfQkFTRV9BRERSCQkweGI0MDAwMDAwCi0jZGVmaW5lIE1YMzFfQ1M0X0JBU0VfQUREUl9WSVJUCQkweGY0MDAwMDAwCisjZGVmaW5lIE1YMzFfQ1M0X0JBU0VfQUREUl9WSVJUCQkweGY2MDAwMDAwCiAjZGVmaW5lIE1YMzFfQ1M0X1NJWkUJCQlTWl8zMk0KIAogI2RlZmluZSBNWDMxX0NTNV9CQVNFX0FERFIJCTB4YjYwMDAwMDAKLSNkZWZpbmUgTVgzMV9DUzVfQkFTRV9BRERSX1ZJUlQJCTB4ZjYwMDAwMDAKKyNkZWZpbmUgTVgzMV9DUzVfQkFTRV9BRERSX1ZJUlQJCTB4ZjgwMDAwMDAKICNkZWZpbmUgTVgzMV9DUzVfU0laRQkJCVNaXzMyTQogCiAjZGVmaW5lIE1YMzFfWF9NRU1DX0JBU0VfQUREUgkJMHhiODAwMDAwMAotI2RlZmluZSBNWDMxX1hfTUVNQ19CQVNFX0FERFJfVklSVAkweGZjMzIwMDAwCiAjZGVmaW5lIE1YMzFfWF9NRU1DX1NJWkUJCVNaXzY0SwogI2RlZmluZSBNWDMxX05GQ19CQVNFX0FERFIJCQkoTVgzMV9YX01FTUNfQkFTRV9BRERSICsgMHgwMDAwKQogI2RlZmluZSBNWDMxX0VTRENUTF9CQVNFX0FERFIJCQkoTVgzMV9YX01FTUNfQkFTRV9BRERSICsgMHgxMDAwKQpAQCAtMTIxLDEyICsxMTksOCBAQAogCiAjZGVmaW5lIE1YMzFfUENNQ0lBX01FTV9CQVNFX0FERFIJMHhiYzAwMDAwMAogCi0jZGVmaW5lIE1YMzFfSU9fQUREUkVTUyh4KSAoCQkJCQkJXAotCUlNWF9JT19BRERSRVNTKHgsIE1YMzFfQUlQUzEpID86CQkJCVwKLQlJTVhfSU9fQUREUkVTUyh4LCBNWDMxX0FJUFMyKSA/OgkJCQlcCi0JSU1YX0lPX0FERFJFU1MoeCwgTVgzMV9BVklDKSA/OgkJCQkJXAotCUlNWF9JT19BRERSRVNTKHgsIE1YMzFfWF9NRU1DKSA/OgkJCQlcCi0JSU1YX0lPX0FERFJFU1MoeCwgTVgzMV9TUEJBMCkpCisjZGVmaW5lIE1YMzFfSU9fUDJWKHgpCQkJSU1YX0lPX1AyVih4KQorI2RlZmluZSBNWDMxX0lPX0FERFJFU1MoeCkJCUlPTUVNKE1YMzFfSU9fUDJWKHgpKQogCiAjaWZuZGVmIF9fQVNTRU1CTEVSX18KIHN0YXRpYyBpbmxpbmUgdm9pZCBteDMxX3NldHVwX3dlaW1jcyhzaXplX3QgY3MsCkBAIC0xNDMsOCArMTM3LDggQEAKICNkZWZpbmUgTVgzMV9JTlRfTVBFRzRfRU5DT0RFUgk1CiAjZGVmaW5lIE1YMzFfSU5UX1JUSUMJCTYKICNkZWZpbmUgTVgzMV9JTlRfRklSSQkJNwotI2RlZmluZSBNWDMxX0lOVF9NTUNfU0RIQzIJOAotI2RlZmluZSBNWDMxX0lOVF9NTUNfU0RIQzEJOQorI2RlZmluZSBNWDMxX0lOVF9TREhDMgkJOAorI2RlZmluZSBNWDMxX0lOVF9TREhDMQkJOQogI2RlZmluZSBNWDMxX0lOVF9JMkMxCQkxMAogI2RlZmluZSBNWDMxX0lOVF9TU0kyCQkxMQogI2RlZmluZSBNWDMxX0lOVF9TU0kxCQkxMgpAQCAtMTcwLDEwICsxNjQsOSBAQAogI2RlZmluZSBNWDMxX0lOVF9VQVJUMgkJMzIKICNkZWZpbmUgTVgzMV9JTlRfTkZDCQkzMwogI2RlZmluZSBNWDMxX0lOVF9TRE1BCQkzNAotI2RlZmluZSBNWDMxX0lOVF9VU0IxCQkzNQotI2RlZmluZSBNWDMxX0lOVF9VU0IyCQkzNgotI2RlZmluZSBNWDMxX0lOVF9VU0IzCQkzNwotI2RlZmluZSBNWDMxX0lOVF9VU0I0CQkzOAorI2RlZmluZSBNWDMxX0lOVF9VU0JfSFMxCTM1CisjZGVmaW5lIE1YMzFfSU5UX1VTQl9IUzIJMzYKKyNkZWZpbmUgTVgzMV9JTlRfVVNCX09URwkzNwogI2RlZmluZSBNWDMxX0lOVF9NU0hDMQkJMzkKICNkZWZpbmUgTVgzMV9JTlRfTVNIQzIJCTQwCiAjZGVmaW5lIE1YMzFfSU5UX0lQVV9FUlIJNDEKQEAgLTE5Nyw2ICsxOTAsOCBAQAogI2RlZmluZSBNWDMxX0lOVF9FWFRfV0RPRwk2MgogI2RlZmluZSBNWDMxX0lOVF9FWFRfVFYJCTYzCiAKKyNkZWZpbmUgTVgzMV9ETUFfUkVRX1NESEMxCTIwCisjZGVmaW5lIE1YMzFfRE1BX1JFUV9TREhDMgkyMQogI2RlZmluZSBNWDMxX0RNQV9SRVFfU1NJMl9SWDEJMjIKICNkZWZpbmUgTVgzMV9ETUFfUkVRX1NTSTJfVFgxCTIzCiAjZGVmaW5lIE1YMzFfRE1BX1JFUV9TU0kyX1JYMAkyNApAQCAtMjA4LDUyICsyMDMsNCBAQAogCiAjZGVmaW5lIE1YMzFfUFJPRF9TSUdOQVRVUkUJCTB4MQkvKiBGb3IgTVgzMSAqLwogCi0vKiBzaWxpY29uIHJldmlzaW9ucyBzcGVjaWZpYyB0byBpLk1YMzEgKi8KLSNkZWZpbmUgTVgzMV9DSElQX1JFVl8xXzAJCTB4MTAKLSNkZWZpbmUgTVgzMV9DSElQX1JFVl8xXzEJCTB4MTEKLSNkZWZpbmUgTVgzMV9DSElQX1JFVl8xXzIJCTB4MTIKLSNkZWZpbmUgTVgzMV9DSElQX1JFVl8xXzMJCTB4MTMKLSNkZWZpbmUgTVgzMV9DSElQX1JFVl8yXzAJCTB4MjAKLSNkZWZpbmUgTVgzMV9DSElQX1JFVl8yXzEJCTB4MjEKLSNkZWZpbmUgTVgzMV9DSElQX1JFVl8yXzIJCTB4MjIKLSNkZWZpbmUgTVgzMV9DSElQX1JFVl8yXzMJCTB4MjMKLSNkZWZpbmUgTVgzMV9DSElQX1JFVl8zXzAJCTB4MzAKLSNkZWZpbmUgTVgzMV9DSElQX1JFVl8zXzEJCTB4MzEKLSNkZWZpbmUgTVgzMV9DSElQX1JFVl8zXzIJCTB4MzIKLQotI2RlZmluZSBNWDMxX1NZU1RFTV9SRVZfTUlOCQlNWDMxX0NISVBfUkVWXzFfMAotI2RlZmluZSBNWDMxX1NZU1RFTV9SRVZfTlVNCQkzCi0KLSNpZmRlZiBJTVhfTkVFRFNfREVQUkVDQVRFRF9TWU1CT0xTCi0vKiB0aGVzZSBzaG91bGQgZ28gYXdheSAqLwotI2RlZmluZSBBVEFfQkFTRV9BRERSIE1YMzFfQVRBX0JBU0VfQUREUgotI2RlZmluZSBVQVJUNF9CQVNFX0FERFIgTVgzMV9VQVJUNF9CQVNFX0FERFIKLSNkZWZpbmUgVUFSVDVfQkFTRV9BRERSIE1YMzFfVUFSVDVfQkFTRV9BRERSCi0jZGVmaW5lIE1NQ19TREhDMV9CQVNFX0FERFIgTVgzMV9NTUNfU0RIQzFfQkFTRV9BRERSCi0jZGVmaW5lIE1NQ19TREhDMl9CQVNFX0FERFIgTVgzMV9NTUNfU0RIQzJfQkFTRV9BRERSCi0jZGVmaW5lIFNJTTFfQkFTRV9BRERSIE1YMzFfU0lNMV9CQVNFX0FERFIKLSNkZWZpbmUgSUlNX0JBU0VfQUREUiBNWDMxX0lJTV9CQVNFX0FERFIKLSNkZWZpbmUgQ1NQSTNfQkFTRV9BRERSIE1YMzFfQ1NQSTNfQkFTRV9BRERSCi0jZGVmaW5lIEZJUklfQkFTRV9BRERSIE1YMzFfRklSSV9CQVNFX0FERFIKLSNkZWZpbmUgU0NNX0JBU0VfQUREUiBNWDMxX1NDTV9CQVNFX0FERFIKLSNkZWZpbmUgU01OX0JBU0VfQUREUiBNWDMxX1NNTl9CQVNFX0FERFIKLSNkZWZpbmUgTVBFRzRfRU5DX0JBU0VfQUREUiBNWDMxX01QRUc0X0VOQ19CQVNFX0FERFIKLSNkZWZpbmUgTVhDX0lOVF9NUEVHNF9FTkNPREVSIE1YMzFfSU5UX01QRUc0X0VOQ09ERVIKLSNkZWZpbmUgTVhDX0lOVF9GSVJJIE1YMzFfSU5UX0ZJUkkKLSNkZWZpbmUgTVhDX0lOVF9NQlggTVgzMV9JTlRfTUJYCi0jZGVmaW5lIE1YQ19JTlRfQ1NQSTMgTVgzMV9JTlRfQ1NQSTMKLSNkZWZpbmUgTVhDX0lOVF9TSU0yIE1YMzFfSU5UX1NJTTIKLSNkZWZpbmUgTVhDX0lOVF9TSU0xIE1YMzFfSU5UX1NJTTEKLSNkZWZpbmUgTVhDX0lOVF9DQ01fRFZGUyBNWDMxX0lOVF9DQ01fRFZGUwotI2RlZmluZSBNWENfSU5UX1VTQjEgTVgzMV9JTlRfVVNCMQotI2RlZmluZSBNWENfSU5UX1VTQjIgTVgzMV9JTlRfVVNCMgotI2RlZmluZSBNWENfSU5UX1VTQjMgTVgzMV9JTlRfVVNCMwotI2RlZmluZSBNWENfSU5UX1VTQjQgTVgzMV9JTlRfVVNCNAotI2RlZmluZSBNWENfSU5UX01TSEMyIE1YMzFfSU5UX01TSEMyCi0jZGVmaW5lIE1YQ19JTlRfVUFSVDQgTVgzMV9JTlRfVUFSVDQKLSNkZWZpbmUgTVhDX0lOVF9VQVJUNSBNWDMxX0lOVF9VQVJUNQotI2RlZmluZSBNWENfSU5UX0NDTSBNWDMxX0lOVF9DQ00KLSNkZWZpbmUgTVhDX0lOVF9QQ01DSUEgTVgzMV9JTlRfUENNQ0lBCi0jZW5kaWYKLQogI2VuZGlmIC8qIGlmbmRlZiBfX01BQ0hfTVgzMV9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDM1LmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgzNS5oCmluZGV4IDYyNjdjZmYuLmQxM2RiZmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDM1LmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214MzUuaApAQCAtMTEsNyArMTEsNiBAQAogI2RlZmluZSBNWDM1X0wyQ0NfU0laRQkJCVNaXzFNCiAKICNkZWZpbmUgTVgzNV9BSVBTMV9CQVNFX0FERFIJCTB4NDNmMDAwMDAKLSNkZWZpbmUgTVgzNV9BSVBTMV9CQVNFX0FERFJfVklSVAkweGZjMDAwMDAwCiAjZGVmaW5lIE1YMzVfQUlQUzFfU0laRQkJCVNaXzFNCiAjZGVmaW5lIE1YMzVfTUFYX0JBU0VfQUREUgkJCShNWDM1X0FJUFMxX0JBU0VfQUREUiArIDB4MDQwMDApCiAjZGVmaW5lIE1YMzVfRVZUTU9OX0JBU0VfQUREUgkJCShNWDM1X0FJUFMxX0JBU0VfQUREUiArIDB4MDgwMDApCkBAIC0zMyw3ICszMiw2IEBACiAjZGVmaW5lIE1YMzVfRUNUX0lQMl9CQVNFX0FERFIJCQkoTVgzNV9BSVBTMV9CQVNFX0FERFIgKyAweGJjMDAwKQogCiAjZGVmaW5lIE1YMzVfU1BCQTBfQkFTRV9BRERSCQkweDUwMDAwMDAwCi0jZGVmaW5lIE1YMzVfU1BCQTBfQkFTRV9BRERSX1ZJUlQJMHhmYzEwMDAwMAogI2RlZmluZSBNWDM1X1NQQkEwX1NJWkUJCQlTWl8xTQogI2RlZmluZSBNWDM1X1VBUlQzX0JBU0VfQUREUgkJCShNWDM1X1NQQkEwX0JBU0VfQUREUiArIDB4MGMwMDApCiAjZGVmaW5lIE1YMzVfQ1NQSTJfQkFTRV9BRERSCQkJKE1YMzVfU1BCQTBfQkFTRV9BRERSICsgMHgxMDAwMCkKQEAgLTQ0LDcgKzQyLDYgQEAKICNkZWZpbmUgTVgzNV9TUEJBX0NUUkxfQkFTRV9BRERSCQkoTVgzNV9TUEJBMF9CQVNFX0FERFIgKyAweDNjMDAwKQogCiAjZGVmaW5lIE1YMzVfQUlQUzJfQkFTRV9BRERSCQkweDUzZjAwMDAwCi0jZGVmaW5lIE1YMzVfQUlQUzJfQkFTRV9BRERSX1ZJUlQJMHhmYzIwMDAwMAogI2RlZmluZSBNWDM1X0FJUFMyX1NJWkUJCQlTWl8xTQogI2RlZmluZSBNWDM1X0NDTV9CQVNFX0FERFIJCQkoTVgzNV9BSVBTMl9CQVNFX0FERFIgKyAweDgwMDAwKQogI2RlZmluZSBNWDM1X0dQVDFfQkFTRV9BRERSCQkJKE1YMzVfQUlQUzJfQkFTRV9BRERSICsgMHg5MDAwMCkKQEAgLTY4LDE1ICs2NSwxOSBAQAogI2RlZmluZSBNWDM1X0NBTjJfQkFTRV9BRERSCQkJKE1YMzVfQUlQUzJfQkFTRV9BRERSICsgMHhlODAwMCkKICNkZWZpbmUgTVgzNV9SVElDX0JBU0VfQUREUgkJCShNWDM1X0FJUFMyX0JBU0VfQUREUiArIDB4ZWMwMDApCiAjZGVmaW5lIE1YMzVfSUlNX0JBU0VfQUREUgkJCShNWDM1X0FJUFMyX0JBU0VfQUREUiArIDB4ZjAwMDApCi0KLSNkZWZpbmUgTVgzNV9PVEdfQkFTRV9BRERSCQkweDUzZmY0MDAwCisjZGVmaW5lIE1YMzVfVVNCX0JBU0VfQUREUgkJCShNWDM1X0FJUFMyX0JBU0VfQUREUiArIDB4ZjQwMDApCisjZGVmaW5lIE1YMzVfVVNCX09UR19CQVNFX0FERFIJCQkoTVgzNV9VU0JfQkFTRV9BRERSICsgMHgwMDAwKQorLyoKKyAqIFRoZSBSZWZlcmVuY2UgTWFudWFsIChJTVgzNVJNLCBSZXYuIDIsIDMvMjAwOSkgY2xhaW1zIGFuIG9mZnNldCBvZiAweDIwMCBmb3IKKyAqIEhTLiAgV2hlbiBob3N0IHN1cHBvcnQgd2FzIGltcGxlbWVudGVkIG9ubHkgYSBwcmVsaW1pbmFyeSBkb2N1bWVudCB3YXMKKyAqIGF2YWlsYWJsZSwgd2hpY2ggdG9sZCAweDQwMC4gIFRoaXMgd29ya3MgZmluZS4KKyAqLworI2RlZmluZSBNWDM1X1VTQl9IU19CQVNFX0FERFIJCQkoTVgzNV9VU0JfQkFTRV9BRERSICsgMHgwNDAwKQogCiAjZGVmaW5lIE1YMzVfUk9NUF9CQVNFX0FERFIJCTB4NjAwMDAwMDAKLSNkZWZpbmUgTVgzNV9ST01QX0JBU0VfQUREUl9WSVJUCTB4ZmM1MDAwMDAKICNkZWZpbmUgTVgzNV9ST01QX1NJWkUJCQlTWl8xTQogCiAjZGVmaW5lIE1YMzVfQVZJQ19CQVNFX0FERFIJCTB4NjgwMDAwMDAKLSNkZWZpbmUgTVgzNV9BVklDX0JBU0VfQUREUl9WSVJUCTB4ZmM0MDAwMDAKICNkZWZpbmUgTVgzNV9BVklDX1NJWkUJCQlTWl8xTQogCiAvKgpAQCAtOTIsMTggKzkzLDE3IEBACiAjZGVmaW5lIE1YMzVfQ1MzX0JBU0VfQUREUgkJMHhiMjAwMDAwMAogCiAjZGVmaW5lIE1YMzVfQ1M0X0JBU0VfQUREUgkJMHhiNDAwMDAwMAotI2RlZmluZSBNWDM1X0NTNF9CQVNFX0FERFJfVklSVAkJMHhmNDAwMDAwMAorI2RlZmluZSBNWDM1X0NTNF9CQVNFX0FERFJfVklSVAkJMHhmNjAwMDAwMAogI2RlZmluZSBNWDM1X0NTNF9TSVpFCQkJU1pfMzJNCiAKICNkZWZpbmUgTVgzNV9DUzVfQkFTRV9BRERSCQkweGI2MDAwMDAwCi0jZGVmaW5lIE1YMzVfQ1M1X0JBU0VfQUREUl9WSVJUCQkweGY2MDAwMDAwCisjZGVmaW5lIE1YMzVfQ1M1X0JBU0VfQUREUl9WSVJUCQkweGY4MDAwMDAwCiAjZGVmaW5lIE1YMzVfQ1M1X1NJWkUJCQlTWl8zMk0KIAogLyoKICAqIE5BTkQsIFNEUkFNLCBXRUlNLCBNM0lGLCBFTUkgY29udHJvbGxlcnMKICAqLwogI2RlZmluZSBNWDM1X1hfTUVNQ19CQVNFX0FERFIJCTB4YjgwMDAwMDAKLSNkZWZpbmUgTVgzNV9YX01FTUNfQkFTRV9BRERSX1ZJUlQJMHhmYzMyMDAwMAogI2RlZmluZSBNWDM1X1hfTUVNQ19TSVpFCQlTWl82NEsKICNkZWZpbmUgTVgzNV9FU0RDVExfQkFTRV9BRERSCQkJKE1YMzVfWF9NRU1DX0JBU0VfQUREUiArIDB4MTAwMCkKICNkZWZpbmUgTVgzNV9XRUlNX0JBU0VfQUREUgkJCShNWDM1X1hfTUVNQ19CQVNFX0FERFIgKyAweDIwMDApCkBAIC0xMTQsMTIgKzExNCw4IEBACiAjZGVmaW5lIE1YMzVfTkZDX0JBU0VfQUREUgkJMHhiYjAwMDAwMAogI2RlZmluZSBNWDM1X1BDTUNJQV9NRU1fQkFTRV9BRERSCTB4YmMwMDAwMDAKIAotI2RlZmluZSBNWDM1X0lPX0FERFJFU1MoeCkgKAkJCQkJCVwKLQlJTVhfSU9fQUREUkVTUyh4LCBNWDM1X0FJUFMxKSA/OgkJCQlcCi0JSU1YX0lPX0FERFJFU1MoeCwgTVgzNV9BSVBTMikgPzoJCQkJXAotCUlNWF9JT19BRERSRVNTKHgsIE1YMzVfQVZJQykgPzoJCQkJCVwKLQlJTVhfSU9fQUREUkVTUyh4LCBNWDM1X1hfTUVNQykgPzoJCQkJXAotCUlNWF9JT19BRERSRVNTKHgsIE1YMzVfU1BCQTApKQorI2RlZmluZSBNWDM1X0lPX1AyVih4KQkJCUlNWF9JT19QMlYoeCkKKyNkZWZpbmUgTVgzNV9JT19BRERSRVNTKHgpCQlJT01FTShNWDM1X0lPX1AyVih4KSkKIAogLyoKICAqIEludGVycnVwdCBudW1iZXJzCkBAIC0xNTMsOCArMTQ5LDggQEAKICNkZWZpbmUgTVgzNV9JTlRfVUFSVDIJCTMyCiAjZGVmaW5lIE1YMzVfSU5UX05GQwkJMzMKICNkZWZpbmUgTVgzNV9JTlRfU0RNQQkJMzQKLSNkZWZpbmUgTVgzNV9JTlRfVVNCSFMJCTM1Ci0jZGVmaW5lIE1YMzVfSU5UX1VTQk9URwkJMzcKKyNkZWZpbmUgTVgzNV9JTlRfVVNCX0hTCQkzNQorI2RlZmluZSBNWDM1X0lOVF9VU0JfT1RHCTM3CiAjZGVmaW5lIE1YMzVfSU5UX01TSEMxCQkzOQogI2RlZmluZSBNWDM1X0lOVF9FU0FJCQk0MAogI2RlZmluZSBNWDM1X0lOVF9JUFVfRVJSCTQxCkBAIC0xOTAsMjMgKzE4Niw0IEBACiAKICNkZWZpbmUgTVgzNV9QUk9EX1NJR05BVFVSRQkJMHgxCS8qIEZvciBNWDMxICovCiAKLSNkZWZpbmUgTVgzNV9TWVNURU1fUkVWX01JTgkJTVgzeF9DSElQX1JFVl8xXzAKLSNkZWZpbmUgTVgzNV9TWVNURU1fUkVWX05VTQkJMwotCi0jaWZkZWYgSU1YX05FRURTX0RFUFJFQ0FURURfU1lNQk9MUwotLyogdGhlc2Ugc2hvdWxkIGdvIGF3YXkgKi8KLSNkZWZpbmUgTVhDX0ZFQ19CQVNFX0FERFIgTVgzNV9GRUNfQkFTRV9BRERSCi0jZGVmaW5lIE1YQ19JTlRfT1dJUkUgTVgzNV9JTlRfT1dJUkUKLSNkZWZpbmUgTVhDX0lOVF9HUFUyRCBNWDM1X0lOVF9HUFUyRAotI2RlZmluZSBNWENfSU5UX0FTUkMgTVgzNV9JTlRfQVNSQwotI2RlZmluZSBNWENfSU5UX1VTQkhTIE1YMzVfSU5UX1VTQkhTCi0jZGVmaW5lIE1YQ19JTlRfVVNCT1RHIE1YMzVfSU5UX1VTQk9URwotI2RlZmluZSBNWENfSU5UX0VTQUkgTVgzNV9JTlRfRVNBSQotI2RlZmluZSBNWENfSU5UX0NBTjEgTVgzNV9JTlRfQ0FOMQotI2RlZmluZSBNWENfSU5UX0NBTjIgTVgzNV9JTlRfQ0FOMgotI2RlZmluZSBNWENfSU5UX01MQiBNWDM1X0lOVF9NTEIKLSNkZWZpbmUgTVhDX0lOVF9TUERJRiBNWDM1X0lOVF9TUERJRgotI2RlZmluZSBNWENfSU5UX0ZFQyBNWDM1X0lOVF9GRUMKLSNlbmRpZgotCiAjZW5kaWYgLyogaWZuZGVmIF9fTUFDSF9NWDM1X0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214M3guaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDN4LmgKaW5kZXggZDFiZDI2ZC4uMzg4YTQwNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214M3guaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgzeC5oCkBAIC00NCw3ICs0NCw2IEBACiAgKiBBSVBTIDEKICAqLwogI2RlZmluZSBNWDN4X0FJUFMxX0JBU0VfQUREUgkJMHg0M2YwMDAwMAotI2RlZmluZSBNWDN4X0FJUFMxX0JBU0VfQUREUl9WSVJUCTB4ZmMwMDAwMDAKICNkZWZpbmUgTVgzeF9BSVBTMV9TSVpFCQkJU1pfMU0KICNkZWZpbmUgTVgzeF9NQVhfQkFTRV9BRERSCQkJKE1YM3hfQUlQUzFfQkFTRV9BRERSICsgMHgwNDAwMCkKICNkZWZpbmUgTVgzeF9FVlRNT05fQkFTRV9BRERSCQkJKE1YM3hfQUlQUzFfQkFTRV9BRERSICsgMHgwODAwMCkKQEAgLTY5LDcgKzY4LDYgQEAKICAqIFNQQkEgZ2xvYmFsIG1vZHVsZSBlbmFibGVkICMwCiAgKi8KICNkZWZpbmUgTVgzeF9TUEJBMF9CQVNFX0FERFIJCTB4NTAwMDAwMDAKLSNkZWZpbmUgTVgzeF9TUEJBMF9CQVNFX0FERFJfVklSVAkweGZjMTAwMDAwCiAjZGVmaW5lIE1YM3hfU1BCQTBfU0laRQkJCVNaXzFNCiAjZGVmaW5lIE1YM3hfVUFSVDNfQkFTRV9BRERSCQkJKE1YM3hfU1BCQTBfQkFTRV9BRERSICsgMHgwYzAwMCkKICNkZWZpbmUgTVgzeF9DU1BJMl9CQVNFX0FERFIJCQkoTVgzeF9TUEJBMF9CQVNFX0FERFIgKyAweDEwMDAwKQpAQCAtODIsNyArODAsNiBAQAogICogQUlQUyAyCiAgKi8KICNkZWZpbmUgTVgzeF9BSVBTMl9CQVNFX0FERFIJCTB4NTNmMDAwMDAKLSNkZWZpbmUgTVgzeF9BSVBTMl9CQVNFX0FERFJfVklSVAkweGZjMjAwMDAwCiAjZGVmaW5lIE1YM3hfQUlQUzJfU0laRQkJCVNaXzFNCiAjZGVmaW5lIE1YM3hfQ0NNX0JBU0VfQUREUgkJCShNWDN4X0FJUFMyX0JBU0VfQUREUiArIDB4ODAwMDApCiAjZGVmaW5lIE1YM3hfR1BUMV9CQVNFX0FERFIJCQkoTVgzeF9BSVBTMl9CQVNFX0FERFIgKyAweDkwMDAwKQpAQCAtMTA1LDExICsxMDIsOSBAQAogICogUk9NUCBhbmQgQVZJQwogICovCiAjZGVmaW5lIE1YM3hfUk9NUF9CQVNFX0FERFIJCTB4NjAwMDAwMDAKLSNkZWZpbmUgTVgzeF9ST01QX0JBU0VfQUREUl9WSVJUCTB4ZmM1MDAwMDAKICNkZWZpbmUgTVgzeF9ST01QX1NJWkUJCQlTWl8xTQogCiAjZGVmaW5lIE1YM3hfQVZJQ19CQVNFX0FERFIJCTB4NjgwMDAwMDAKLSNkZWZpbmUgTVgzeF9BVklDX0JBU0VfQUREUl9WSVJUCTB4ZmM0MDAwMDAKICNkZWZpbmUgTVgzeF9BVklDX1NJWkUJCQlTWl8xTQogCiAvKgpAQCAtMTI1LDE4ICsxMjAsMTcgQEAKICNkZWZpbmUgTVgzeF9DUzNfQkFTRV9BRERSCQkweGIyMDAwMDAwCiAKICNkZWZpbmUgTVgzeF9DUzRfQkFTRV9BRERSCQkweGI0MDAwMDAwCi0jZGVmaW5lIE1YM3hfQ1M0X0JBU0VfQUREUl9WSVJUCQkweGY0MDAwMDAwCisjZGVmaW5lIE1YM3hfQ1M0X0JBU0VfQUREUl9WSVJUCQkweGY2MDAwMDAwCiAjZGVmaW5lIE1YM3hfQ1M0X1NJWkUJCQlTWl8zMk0KIAogI2RlZmluZSBNWDN4X0NTNV9CQVNFX0FERFIJCTB4YjYwMDAwMDAKLSNkZWZpbmUgTVgzeF9DUzVfQkFTRV9BRERSX1ZJUlQJCTB4ZjYwMDAwMDAKKyNkZWZpbmUgTVgzeF9DUzVfQkFTRV9BRERSX1ZJUlQJCTB4ZjgwMDAwMDAKICNkZWZpbmUgTVgzeF9DUzVfU0laRQkJCVNaXzMyTQogCiAvKgogICogTkFORCwgU0RSQU0sIFdFSU0sIE0zSUYsIEVNSSBjb250cm9sbGVycwogICovCiAjZGVmaW5lIE1YM3hfWF9NRU1DX0JBU0VfQUREUgkJMHhiODAwMDAwMAotI2RlZmluZSBNWDN4X1hfTUVNQ19CQVNFX0FERFJfVklSVAkweGZjMzIwMDAwCiAjZGVmaW5lIE1YM3hfWF9NRU1DX1NJWkUJCVNaXzY0SwogI2RlZmluZSBNWDN4X0VTRENUTF9CQVNFX0FERFIJCQkoTVgzeF9YX01FTUNfQkFTRV9BRERSICsgMHgxMDAwKQogI2RlZmluZSBNWDN4X1dFSU1fQkFTRV9BRERSCQkJKE1YM3hfWF9NRU1DX0JBU0VfQUREUiArIDB4MjAwMCkKQEAgLTE0Niw1NiArMTQwLDYgQEAKIAogI2RlZmluZSBNWDN4X1BDTUNJQV9NRU1fQkFTRV9BRERSCTB4YmMwMDAwMDAKIAotLyohCi0gKiBUaGlzIG1hY3JvIGRlZmluZXMgdGhlIHBoeXNpY2FsIHRvIHZpcnR1YWwgYWRkcmVzcyBtYXBwaW5nIGZvciBhbGwgdGhlCi0gKiBwZXJpcGhlcmFsIG1vZHVsZXMuIEl0IGlzIHVzZWQgYnkgcGFzc2luZyBpbiB0aGUgcGh5c2ljYWwgYWRkcmVzcyBhcyB4Ci0gKiBhbmQgcmV0dXJuaW5nIHRoZSB2aXJ0dWFsIGFkZHJlc3MuIElmIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGlzIG5vdCBtYXBwZWQsCi0gKiBpdCByZXR1cm5zIDB4REVBREJFRUYKLSAqLwotI2RlZmluZSBJT19BRERSRVNTKHgpICAgXAotCSh2b2lkIF9fZm9yY2UgX19pb21lbSAqKSBcCi0JKCgoeCA+PSBBSVBTMV9CQVNFX0FERFIpICYmICh4IDwgKEFJUFMxX0JBU0VfQUREUiArIEFJUFMxX1NJWkUpKSkgPyBBSVBTMV9JT19BRERSRVNTKHgpOlwKLQkoKHggPj0gU1BCQTBfQkFTRV9BRERSKSAmJiAoeCA8IChTUEJBMF9CQVNFX0FERFIgKyBTUEJBMF9TSVpFKSkpID8gU1BCQTBfSU9fQUREUkVTUyh4KTpcCi0JKCh4ID49IEFJUFMyX0JBU0VfQUREUikgJiYgKHggPCAoQUlQUzJfQkFTRV9BRERSICsgQUlQUzJfU0laRSkpKSA/IEFJUFMyX0lPX0FERFJFU1MoeCk6XAotCSgoeCA+PSBST01QX0JBU0VfQUREUikgJiYgKHggPCAoUk9NUF9CQVNFX0FERFIgKyBST01QX1NJWkUpKSkgPyBST01QX0lPX0FERFJFU1MoeCk6XAotCSgoeCA+PSBBVklDX0JBU0VfQUREUikgJiYgKHggPCAoQVZJQ19CQVNFX0FERFIgKyBBVklDX1NJWkUpKSkgPyBBVklDX0lPX0FERFJFU1MoeCk6XAotCSgoeCA+PSBDUzRfQkFTRV9BRERSKSAmJiAoeCA8IChDUzRfQkFTRV9BRERSICsgQ1M0X1NJWkUpKSkgPyBDUzRfSU9fQUREUkVTUyh4KTpcCi0JKCh4ID49IFhfTUVNQ19CQVNFX0FERFIpICYmICh4IDwgKFhfTUVNQ19CQVNFX0FERFIgKyBYX01FTUNfU0laRSkpKSA/IFhfTUVNQ19JT19BRERSRVNTKHgpOlwKLQkweERFQURCRUVGKQotCi0vKgotICogZGVmaW5lIHRoZSBhZGRyZXNzIG1hcHBpbmcgbWFjcm9zOiBpbiBwaHlzaWNhbCBhZGRyZXNzIG9yZGVyCi0gKi8KLSNkZWZpbmUgTDJDQ19JT19BRERSRVNTKHgpICBcCi0JKCgoeCkgLSBMMkNDX0JBU0VfQUREUikgKyBMMkNDX0JBU0VfQUREUl9WSVJUKQotCi0jZGVmaW5lIEFJUFMxX0lPX0FERFJFU1MoeCkgIFwKLQkoKCh4KSAtIEFJUFMxX0JBU0VfQUREUikgKyBBSVBTMV9CQVNFX0FERFJfVklSVCkKLQotI2RlZmluZSBTUEJBMF9JT19BRERSRVNTKHgpICBcCi0JKCgoeCkgLSBTUEJBMF9CQVNFX0FERFIpICsgU1BCQTBfQkFTRV9BRERSX1ZJUlQpCi0KLSNkZWZpbmUgQUlQUzJfSU9fQUREUkVTUyh4KSAgXAotCSgoKHgpIC0gQUlQUzJfQkFTRV9BRERSKSArIEFJUFMyX0JBU0VfQUREUl9WSVJUKQotCi0jZGVmaW5lIFJPTVBfSU9fQUREUkVTUyh4KSAgXAotCSgoKHgpIC0gUk9NUF9CQVNFX0FERFIpICsgUk9NUF9CQVNFX0FERFJfVklSVCkKLQotI2RlZmluZSBBVklDX0lPX0FERFJFU1MoeCkgIFwKLQkoKCh4KSAtIEFWSUNfQkFTRV9BRERSKSArIEFWSUNfQkFTRV9BRERSX1ZJUlQpCi0KLSNkZWZpbmUgQ1M0X0lPX0FERFJFU1MoeCkgIFwKLQkoKCh4KSAtIENTNF9CQVNFX0FERFIpICsgQ1M0X0JBU0VfQUREUl9WSVJUKQotCi0jZGVmaW5lIENTNV9JT19BRERSRVNTKHgpICBcCi0JKCgoeCkgLSBDUzVfQkFTRV9BRERSKSArIENTNV9CQVNFX0FERFJfVklSVCkKLQotI2RlZmluZSBYX01FTUNfSU9fQUREUkVTUyh4KSAgXAotCSgoKHgpIC0gWF9NRU1DX0JBU0VfQUREUikgKyBYX01FTUNfQkFTRV9BRERSX1ZJUlQpCi0KLSNkZWZpbmUgUENNQ0lBX0lPX0FERFJFU1MoeCkgXAotCSgoKHgpIC0gWF9NRU1DX0JBU0VfQUREUikgKyBYX01FTUNfQkFTRV9BRERSX1ZJUlQpCi0KIC8qCiAgKiBJbnRlcnJ1cHQgbnVtYmVycwogICovCkBAIC0yNDAsMjIgKzE4NCw2IEBACiAKICNkZWZpbmUgTVgzeF9QUk9EX1NJR05BVFVSRQkJMHgxCS8qIEZvciBNWDMxICovCiAKLS8qIHNpbGljb24gcmV2aXNpb25zIHNwZWNpZmljIHRvIGkuTVgzMSBhbmQgaS5NWDM1ICovCi0jZGVmaW5lIE1YM3hfQ0hJUF9SRVZfMV8wCQkweDEwCi0jZGVmaW5lIE1YM3hfQ0hJUF9SRVZfMV8xCQkweDExCi0jZGVmaW5lIE1YM3hfQ0hJUF9SRVZfMV8yCQkweDEyCi0jZGVmaW5lIE1YM3hfQ0hJUF9SRVZfMV8zCQkweDEzCi0jZGVmaW5lIE1YM3hfQ0hJUF9SRVZfMl8wCQkweDIwCi0jZGVmaW5lIE1YM3hfQ0hJUF9SRVZfMl8xCQkweDIxCi0jZGVmaW5lIE1YM3hfQ0hJUF9SRVZfMl8yCQkweDIyCi0jZGVmaW5lIE1YM3hfQ0hJUF9SRVZfMl8zCQkweDIzCi0jZGVmaW5lIE1YM3hfQ0hJUF9SRVZfM18wCQkweDMwCi0jZGVmaW5lIE1YM3hfQ0hJUF9SRVZfM18xCQkweDMxCi0jZGVmaW5lIE1YM3hfQ0hJUF9SRVZfM18yCQkweDMyCi0KLSNkZWZpbmUgTVgzeF9TWVNURU1fUkVWX01JTgkJTVgzeF9DSElQX1JFVl8xXzAKLSNkZWZpbmUgTVgzeF9TWVNURU1fUkVWX05VTQkJMwotCiAvKiBNYW5kYXRvcnkgZGVmaW5lcyB1c2VkIGdsb2JhbGx5ICovCiAKICNpZiAhZGVmaW5lZChfX0FTU0VNQkxZX18pICYmICFkZWZpbmVkKF9fTVhDX0JPT1RfVU5DT01QUkVTUykKQEAgLTI3NywxMjYgKzIwNSw0IEBACiB9CiAjZW5kaWYKIAotI2lmZGVmIElNWF9ORUVEU19ERVBSRUNBVEVEX1NZTUJPTFMKLS8qIHRoZXNlIHNob3VsZCBnbyBhd2F5ICovCi0jZGVmaW5lIEwyQ0NfQkFTRV9BRERSIE1YM3hfTDJDQ19CQVNFX0FERFIKLSNkZWZpbmUgTDJDQ19TSVpFIE1YM3hfTDJDQ19TSVpFCi0jZGVmaW5lIEFJUFMxX0JBU0VfQUREUiBNWDN4X0FJUFMxX0JBU0VfQUREUgotI2RlZmluZSBBSVBTMV9CQVNFX0FERFJfVklSVCBNWDN4X0FJUFMxX0JBU0VfQUREUl9WSVJUCi0jZGVmaW5lIEFJUFMxX1NJWkUgTVgzeF9BSVBTMV9TSVpFCi0jZGVmaW5lIE1BWF9CQVNFX0FERFIgTVgzeF9NQVhfQkFTRV9BRERSCi0jZGVmaW5lIEVWVE1PTl9CQVNFX0FERFIgTVgzeF9FVlRNT05fQkFTRV9BRERSCi0jZGVmaW5lIENMS0NUTF9CQVNFX0FERFIgTVgzeF9DTEtDVExfQkFTRV9BRERSCi0jZGVmaW5lIEVUQl9TTE9UNF9CQVNFX0FERFIgTVgzeF9FVEJfU0xPVDRfQkFTRV9BRERSCi0jZGVmaW5lIEVUQl9TTE9UNV9CQVNFX0FERFIgTVgzeF9FVEJfU0xPVDVfQkFTRV9BRERSCi0jZGVmaW5lIEVDVF9DVElPX0JBU0VfQUREUiBNWDN4X0VDVF9DVElPX0JBU0VfQUREUgotI2RlZmluZSBJMkNfQkFTRV9BRERSIE1YM3hfSTJDX0JBU0VfQUREUgotI2RlZmluZSBJMkMzX0JBU0VfQUREUiBNWDN4X0kyQzNfQkFTRV9BRERSCi0jZGVmaW5lIFVBUlQxX0JBU0VfQUREUiBNWDN4X1VBUlQxX0JBU0VfQUREUgotI2RlZmluZSBVQVJUMl9CQVNFX0FERFIgTVgzeF9VQVJUMl9CQVNFX0FERFIKLSNkZWZpbmUgSTJDMl9CQVNFX0FERFIgTVgzeF9JMkMyX0JBU0VfQUREUgotI2RlZmluZSBPV0lSRV9CQVNFX0FERFIgTVgzeF9PV0lSRV9CQVNFX0FERFIKLSNkZWZpbmUgU1NJMV9CQVNFX0FERFIgTVgzeF9TU0kxX0JBU0VfQUREUgotI2RlZmluZSBDU1BJMV9CQVNFX0FERFIgTVgzeF9DU1BJMV9CQVNFX0FERFIKLSNkZWZpbmUgS1BQX0JBU0VfQUREUiBNWDN4X0tQUF9CQVNFX0FERFIKLSNkZWZpbmUgSU9NVVhDX0JBU0VfQUREUiBNWDN4X0lPTVVYQ19CQVNFX0FERFIKLSNkZWZpbmUgRUNUX0lQMV9CQVNFX0FERFIgTVgzeF9FQ1RfSVAxX0JBU0VfQUREUgotI2RlZmluZSBFQ1RfSVAyX0JBU0VfQUREUiBNWDN4X0VDVF9JUDJfQkFTRV9BRERSCi0jZGVmaW5lIFNQQkEwX0JBU0VfQUREUiBNWDN4X1NQQkEwX0JBU0VfQUREUgotI2RlZmluZSBTUEJBMF9CQVNFX0FERFJfVklSVCBNWDN4X1NQQkEwX0JBU0VfQUREUl9WSVJUCi0jZGVmaW5lIFNQQkEwX1NJWkUgTVgzeF9TUEJBMF9TSVpFCi0jZGVmaW5lIFVBUlQzX0JBU0VfQUREUiBNWDN4X1VBUlQzX0JBU0VfQUREUgotI2RlZmluZSBDU1BJMl9CQVNFX0FERFIgTVgzeF9DU1BJMl9CQVNFX0FERFIKLSNkZWZpbmUgU1NJMl9CQVNFX0FERFIgTVgzeF9TU0kyX0JBU0VfQUREUgotI2RlZmluZSBBVEFfRE1BX0JBU0VfQUREUiBNWDN4X0FUQV9ETUFfQkFTRV9BRERSCi0jZGVmaW5lIE1TSEMxX0JBU0VfQUREUiBNWDN4X01TSEMxX0JBU0VfQUREUgotI2RlZmluZSBTUEJBX0NUUkxfQkFTRV9BRERSIE1YM3hfU1BCQV9DVFJMX0JBU0VfQUREUgotI2RlZmluZSBBSVBTMl9CQVNFX0FERFIgTVgzeF9BSVBTMl9CQVNFX0FERFIKLSNkZWZpbmUgQUlQUzJfQkFTRV9BRERSX1ZJUlQgTVgzeF9BSVBTMl9CQVNFX0FERFJfVklSVAotI2RlZmluZSBBSVBTMl9TSVpFIE1YM3hfQUlQUzJfU0laRQotI2RlZmluZSBDQ01fQkFTRV9BRERSIE1YM3hfQ0NNX0JBU0VfQUREUgotI2RlZmluZSBHUFQxX0JBU0VfQUREUiBNWDN4X0dQVDFfQkFTRV9BRERSCi0jZGVmaW5lIEVQSVQxX0JBU0VfQUREUiBNWDN4X0VQSVQxX0JBU0VfQUREUgotI2RlZmluZSBFUElUMl9CQVNFX0FERFIgTVgzeF9FUElUMl9CQVNFX0FERFIKLSNkZWZpbmUgR1BJTzNfQkFTRV9BRERSIE1YM3hfR1BJTzNfQkFTRV9BRERSCi0jZGVmaW5lIFNDQ19CQVNFX0FERFIgTVgzeF9TQ0NfQkFTRV9BRERSCi0jZGVmaW5lIFJOR0FfQkFTRV9BRERSIE1YM3hfUk5HQV9CQVNFX0FERFIKLSNkZWZpbmUgSVBVX0NUUkxfQkFTRV9BRERSIE1YM3hfSVBVX0NUUkxfQkFTRV9BRERSCi0jZGVmaW5lIEFVRE1VWF9CQVNFX0FERFIgTVgzeF9BVURNVVhfQkFTRV9BRERSCi0jZGVmaW5lIEdQSU8xX0JBU0VfQUREUiBNWDN4X0dQSU8xX0JBU0VfQUREUgotI2RlZmluZSBHUElPMl9CQVNFX0FERFIgTVgzeF9HUElPMl9CQVNFX0FERFIKLSNkZWZpbmUgU0RNQV9CQVNFX0FERFIgTVgzeF9TRE1BX0JBU0VfQUREUgotI2RlZmluZSBSVENfQkFTRV9BRERSIE1YM3hfUlRDX0JBU0VfQUREUgotI2RlZmluZSBXRE9HX0JBU0VfQUREUiBNWDN4X1dET0dfQkFTRV9BRERSCi0jZGVmaW5lIFBXTV9CQVNFX0FERFIgTVgzeF9QV01fQkFTRV9BRERSCi0jZGVmaW5lIFJUSUNfQkFTRV9BRERSIE1YM3hfUlRJQ19CQVNFX0FERFIKLSNkZWZpbmUgUk9NUF9CQVNFX0FERFIgTVgzeF9ST01QX0JBU0VfQUREUgotI2RlZmluZSBST01QX0JBU0VfQUREUl9WSVJUIE1YM3hfUk9NUF9CQVNFX0FERFJfVklSVAotI2RlZmluZSBST01QX1NJWkUgTVgzeF9ST01QX1NJWkUKLSNkZWZpbmUgQVZJQ19CQVNFX0FERFIgTVgzeF9BVklDX0JBU0VfQUREUgotI2RlZmluZSBBVklDX0JBU0VfQUREUl9WSVJUIE1YM3hfQVZJQ19CQVNFX0FERFJfVklSVAotI2RlZmluZSBBVklDX1NJWkUgTVgzeF9BVklDX1NJWkUKLSNkZWZpbmUgSVBVX01FTV9CQVNFX0FERFIgTVgzeF9JUFVfTUVNX0JBU0VfQUREUgotI2RlZmluZSBDU0QwX0JBU0VfQUREUiBNWDN4X0NTRDBfQkFTRV9BRERSCi0jZGVmaW5lIENTRDFfQkFTRV9BRERSIE1YM3hfQ1NEMV9CQVNFX0FERFIKLSNkZWZpbmUgQ1MwX0JBU0VfQUREUiBNWDN4X0NTMF9CQVNFX0FERFIKLSNkZWZpbmUgQ1MxX0JBU0VfQUREUiBNWDN4X0NTMV9CQVNFX0FERFIKLSNkZWZpbmUgQ1MyX0JBU0VfQUREUiBNWDN4X0NTMl9CQVNFX0FERFIKLSNkZWZpbmUgQ1MzX0JBU0VfQUREUiBNWDN4X0NTM19CQVNFX0FERFIKLSNkZWZpbmUgQ1M0X0JBU0VfQUREUiBNWDN4X0NTNF9CQVNFX0FERFIKLSNkZWZpbmUgQ1M0X0JBU0VfQUREUl9WSVJUIE1YM3hfQ1M0X0JBU0VfQUREUl9WSVJUCi0jZGVmaW5lIENTNF9TSVpFIE1YM3hfQ1M0X1NJWkUKLSNkZWZpbmUgQ1M1X0JBU0VfQUREUiBNWDN4X0NTNV9CQVNFX0FERFIKLSNkZWZpbmUgQ1M1X0JBU0VfQUREUl9WSVJUIE1YM3hfQ1M1X0JBU0VfQUREUl9WSVJUCi0jZGVmaW5lIENTNV9TSVpFIE1YM3hfQ1M1X1NJWkUKLSNkZWZpbmUgWF9NRU1DX0JBU0VfQUREUiBNWDN4X1hfTUVNQ19CQVNFX0FERFIKLSNkZWZpbmUgWF9NRU1DX0JBU0VfQUREUl9WSVJUIE1YM3hfWF9NRU1DX0JBU0VfQUREUl9WSVJUCi0jZGVmaW5lIFhfTUVNQ19TSVpFIE1YM3hfWF9NRU1DX1NJWkUKLSNkZWZpbmUgRVNEQ1RMX0JBU0VfQUREUiBNWDN4X0VTRENUTF9CQVNFX0FERFIKLSNkZWZpbmUgV0VJTV9CQVNFX0FERFIgTVgzeF9XRUlNX0JBU0VfQUREUgotI2RlZmluZSBNM0lGX0JBU0VfQUREUiBNWDN4X00zSUZfQkFTRV9BRERSCi0jZGVmaW5lIEVNSV9DVExfQkFTRV9BRERSIE1YM3hfRU1JX0NUTF9CQVNFX0FERFIKLSNkZWZpbmUgUENNQ0lBX0NUTF9CQVNFX0FERFIgTVgzeF9QQ01DSUFfQ1RMX0JBU0VfQUREUgotI2RlZmluZSBQQ01DSUFfTUVNX0JBU0VfQUREUiBNWDN4X1BDTUNJQV9NRU1fQkFTRV9BRERSCi0jZGVmaW5lIE1YQ19JTlRfSTJDMyBNWDN4X0lOVF9JMkMzCi0jZGVmaW5lIE1YQ19JTlRfSTJDMiBNWDN4X0lOVF9JMkMyCi0jZGVmaW5lIE1YQ19JTlRfUlRJQyBNWDN4X0lOVF9SVElDCi0jZGVmaW5lIE1YQ19JTlRfSTJDIE1YM3hfSU5UX0kyQwotI2RlZmluZSBNWENfSU5UX0NTUEkyIE1YM3hfSU5UX0NTUEkyCi0jZGVmaW5lIE1YQ19JTlRfQ1NQSTEgTVgzeF9JTlRfQ1NQSTEKLSNkZWZpbmUgTVhDX0lOVF9BVEEgTVgzeF9JTlRfQVRBCi0jZGVmaW5lIE1YQ19JTlRfVUFSVDMgTVgzeF9JTlRfVUFSVDMKLSNkZWZpbmUgTVhDX0lOVF9JSU0gTVgzeF9JTlRfSUlNCi0jZGVmaW5lIE1YQ19JTlRfUk5HQSBNWDN4X0lOVF9STkdBCi0jZGVmaW5lIE1YQ19JTlRfRVZUTU9OIE1YM3hfSU5UX0VWVE1PTgotI2RlZmluZSBNWENfSU5UX0tQUCBNWDN4X0lOVF9LUFAKLSNkZWZpbmUgTVhDX0lOVF9SVEMgTVgzeF9JTlRfUlRDCi0jZGVmaW5lIE1YQ19JTlRfUFdNIE1YM3hfSU5UX1BXTQotI2RlZmluZSBNWENfSU5UX0VQSVQyIE1YM3hfSU5UX0VQSVQyCi0jZGVmaW5lIE1YQ19JTlRfRVBJVDEgTVgzeF9JTlRfRVBJVDEKLSNkZWZpbmUgTVhDX0lOVF9HUFQgTVgzeF9JTlRfR1BUCi0jZGVmaW5lIE1YQ19JTlRfUE9XRVJfRkFJTCBNWDN4X0lOVF9QT1dFUl9GQUlMCi0jZGVmaW5lIE1YQ19JTlRfVUFSVDIgTVgzeF9JTlRfVUFSVDIKLSNkZWZpbmUgTVhDX0lOVF9OQU5ERkMgTVgzeF9JTlRfTkFOREZDCi0jZGVmaW5lIE1YQ19JTlRfU0RNQSBNWDN4X0lOVF9TRE1BCi0jZGVmaW5lIE1YQ19JTlRfTVNIQzEgTVgzeF9JTlRfTVNIQzEKLSNkZWZpbmUgTVhDX0lOVF9JUFVfRVJSIE1YM3hfSU5UX0lQVV9FUlIKLSNkZWZpbmUgTVhDX0lOVF9JUFVfU1lOIE1YM3hfSU5UX0lQVV9TWU4KLSNkZWZpbmUgTVhDX0lOVF9VQVJUMSBNWDN4X0lOVF9VQVJUMQotI2RlZmluZSBNWENfSU5UX0VDVCBNWDN4X0lOVF9FQ1QKLSNkZWZpbmUgTVhDX0lOVF9TQ0NfU0NNIE1YM3hfSU5UX1NDQ19TQ00KLSNkZWZpbmUgTVhDX0lOVF9TQ0NfU01OIE1YM3hfSU5UX1NDQ19TTU4KLSNkZWZpbmUgTVhDX0lOVF9HUElPMiBNWDN4X0lOVF9HUElPMgotI2RlZmluZSBNWENfSU5UX0dQSU8xIE1YM3hfSU5UX0dQSU8xCi0jZGVmaW5lIE1YQ19JTlRfV0RPRyBNWDN4X0lOVF9XRE9HCi0jZGVmaW5lIE1YQ19JTlRfR1BJTzMgTVgzeF9JTlRfR1BJTzMKLSNkZWZpbmUgTVhDX0lOVF9FWFRfUE9XRVIgTVgzeF9JTlRfRVhUX1BPV0VSCi0jZGVmaW5lIE1YQ19JTlRfRVhUX1RFTVBFUiBNWDN4X0lOVF9FWFRfVEVNUEVSCi0jZGVmaW5lIE1YQ19JTlRfRVhUX1NFTlNPUjYwIE1YM3hfSU5UX0VYVF9TRU5TT1I2MAotI2RlZmluZSBNWENfSU5UX0VYVF9TRU5TT1I2MSBNWDN4X0lOVF9FWFRfU0VOU09SNjEKLSNkZWZpbmUgTVhDX0lOVF9FWFRfV0RPRyBNWDN4X0lOVF9FWFRfV0RPRwotI2RlZmluZSBNWENfSU5UX0VYVF9UViBNWDN4X0lOVF9FWFRfVFYKLSNkZWZpbmUgUFJPRF9TSUdOQVRVUkUgTVgzeF9QUk9EX1NJR05BVFVSRQotI2VuZGlmCi0KICNlbmRpZiAvKiBpZm5kZWYgX19NQUNIX01YM3hfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXg1MC5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214NTAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWVjMmE2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214NTAuaApAQCAtMCwwICsxLDI4NSBAQAorI2lmbmRlZiBfX01BQ0hfTVg1MF9IX18KKyNkZWZpbmUgX19NQUNIX01YNTBfSF9fCisKKy8qCisgKiBJUk9NCisgKi8KKyNkZWZpbmUgTVg1MF9JUk9NX0JBU0VfQUREUgkJMHgwCisjZGVmaW5lIE1YNTBfSVJPTV9TSVpFCQkJU1pfNjRLCisKKy8qIFRaSUMgKi8KKyNkZWZpbmUgTVg1MF9UWklDX0JBU0VfQUREUgkJMHgwZmZmYzAwMAorI2RlZmluZSBNWDUwX1RaSUNfU0laRQkJCVNaXzE2SworCisvKgorICogSVJBTQorICovCisjZGVmaW5lIE1YNTBfSVJBTV9CQVNFX0FERFIJMHhmODAwMDAwMAkvKiBpbnRlcm5hbCByYW0gKi8KKyNkZWZpbmUgTVg1MF9JUkFNX1BBUlRJVElPTlMJMTYKKyNkZWZpbmUgTVg1MF9JUkFNX1NJWkUJCShNWDUwX0lSQU1fUEFSVElUSU9OUyAqIFNaXzhLKQkvKiAxMjhLQiAqLworCisvKgorICogRGF0YWJhaG4KKyAqLworI2RlZmluZSBNWDUwX0RBVEFCQUhOX0JBU0VfQUREUgkJCTB4MTQwMDAwMDAKKworLyoKKyAqIEdyYXBoaWNzIE1lbW9yeSBvZiBHUFUKKyAqLworI2RlZmluZSBNWDUwX0dQVTJEX0JBU0VfQUREUgkJMHgyMDAwMDAwMAorCisjZGVmaW5lIE1YNTBfREVCVUdfQkFTRV9BRERSCQkweDQwMDAwMDAwCisjZGVmaW5lIE1YNTBfREVCVUdfU0laRQkJCVNaXzFNCisjZGVmaW5lIE1YNTBfRVRCX0JBU0VfQUREUgkJKE1YNTBfREVCVUdfQkFTRV9BRERSICsgMHgwMDAwMTAwMCkKKyNkZWZpbmUgTVg1MF9FVE1fQkFTRV9BRERSCQkoTVg1MF9ERUJVR19CQVNFX0FERFIgKyAweDAwMDAyMDAwKQorI2RlZmluZSBNWDUwX1RQSVVfQkFTRV9BRERSCQkoTVg1MF9ERUJVR19CQVNFX0FERFIgKyAweDAwMDAzMDAwKQorI2RlZmluZSBNWDUwX0NUSTBfQkFTRV9BRERSCQkoTVg1MF9ERUJVR19CQVNFX0FERFIgKyAweDAwMDA0MDAwKQorI2RlZmluZSBNWDUwX0NUSTFfQkFTRV9BRERSCQkoTVg1MF9ERUJVR19CQVNFX0FERFIgKyAweDAwMDA1MDAwKQorI2RlZmluZSBNWDUwX0NUSTJfQkFTRV9BRERSCQkoTVg1MF9ERUJVR19CQVNFX0FERFIgKyAweDAwMDA2MDAwKQorI2RlZmluZSBNWDUwX0NUSTNfQkFTRV9BRERSCQkoTVg1MF9ERUJVR19CQVNFX0FERFIgKyAweDAwMDA3MDAwKQorI2RlZmluZSBNWDUwX0NPUlRFWF9EQkdfQkFTRV9BRERSCShNWDUwX0RFQlVHX0JBU0VfQUREUiArIDB4MDAwMDgwMDApCisKKyNkZWZpbmUgTVg1MF9BUEJIRE1BX0JBU0VfQUREUgkJKE1YNTBfREVCVUdfQkFTRV9BRERSICsgMHgwMTAwMDAwMCkKKyNkZWZpbmUgTVg1MF9PQ09UUF9DVFJMX0JBU0VfQUREUgkoTVg1MF9ERUJVR19CQVNFX0FERFIgKyAweDAxMDAyMDAwKQorI2RlZmluZSBNWDUwX0RJR0NUTF9CQVNFX0FERFIJCShNWDUwX0RFQlVHX0JBU0VfQUREUiArIDB4MDEwMDQwMDApCisjZGVmaW5lIE1YNTBfR1BNSV9CQVNFX0FERFIJCShNWDUwX0RFQlVHX0JBU0VfQUREUiArIDB4MDEwMDYwMDApCisjZGVmaW5lIE1YNTBfQkNIX0JBU0VfQUREUgkJKE1YNTBfREVCVUdfQkFTRV9BRERSICsgMHgwMTAwODAwMCkKKyNkZWZpbmUgTVg1MF9FTENESUZfQkFTRV9BRERSCQkoTVg1MF9ERUJVR19CQVNFX0FERFIgKyAweDAxMDBhMDAwKQorI2RlZmluZSBNWDUwX0VQWFBfQkFTRV9BRERSCQkoTVg1MF9ERUJVR19CQVNFX0FERFIgKyAweDAxMDBjMDAwKQorI2RlZmluZSBNWDUwX0RDUF9CQVNFX0FERFIJCShNWDUwX0RFQlVHX0JBU0VfQUREUiArIDB4MDEwMGUwMDApCisjZGVmaW5lIE1YNTBfRVBEQ19CQVNFX0FERFIJCShNWDUwX0RFQlVHX0JBU0VfQUREUiArIDB4MDEwMTAwMDApCisjZGVmaW5lIE1YNTBfUU9TQ19CQVNFX0FERFIJCShNWDUwX0RFQlVHX0JBU0VfQUREUiArIDB4MDEwMTIwMDApCisjZGVmaW5lIE1YNTBfUEVSRk1PTl9CQVNFX0FERFIJCShNWDUwX0RFQlVHX0JBU0VfQUREUiArIDB4MDEwMTQwMDApCisjZGVmaW5lIE1YNTBfU1NQX0JBU0VfQUREUgkJKE1YNTBfREVCVUdfQkFTRV9BRERSICsgMHgwMTAxNjAwMCkKKyNkZWZpbmUgTVg1MF9BTkFUT1BfQkFTRV9BRERSCQkoTVg1MF9ERUJVR19CQVNFX0FERFIgKyAweDAxMDE4MDAwKQorI2RlZmluZSBNWDUwX05JQ19CQVNFX0FERFIJCShNWDUwX0RFQlVHX0JBU0VfQUREUiArIDB4MDgwMDAwMDApCisKKy8qCisgKiBTUEJBIGdsb2JhbCBtb2R1bGUgZW5hYmxlZCAjMAorICovCisjZGVmaW5lIE1YNTBfU1BCQTBfQkFTRV9BRERSCQkweDUwMDAwMDAwCisjZGVmaW5lIE1YNTBfU1BCQTBfU0laRQkJCVNaXzFNCisKKyNkZWZpbmUgTVg1MF9NTUNfU0RIQzFfQkFTRV9BRERSCShNWDUwX1NQQkEwX0JBU0VfQUREUiArIDB4MDAwMDQwMDApCisjZGVmaW5lIE1YNTBfTU1DX1NESEMyX0JBU0VfQUREUgkoTVg1MF9TUEJBMF9CQVNFX0FERFIgKyAweDAwMDA4MDAwKQorI2RlZmluZSBNWDUwX1VBUlQzX0JBU0VfQUREUgkJKE1YNTBfU1BCQTBfQkFTRV9BRERSICsgMHgwMDAwYzAwMCkKKyNkZWZpbmUgTVg1MF9DU1BJMV9CQVNFX0FERFIJCShNWDUwX1NQQkEwX0JBU0VfQUREUiArIDB4MDAwMTAwMDApCisjZGVmaW5lIE1YNTBfU1NJMl9CQVNFX0FERFIJCShNWDUwX1NQQkEwX0JBU0VfQUREUiArIDB4MDAwMTQwMDApCisjZGVmaW5lIE1YNTBfTU1DX1NESEMzX0JBU0VfQUREUgkoTVg1MF9TUEJBMF9CQVNFX0FERFIgKyAweDAwMDIwMDAwKQorI2RlZmluZSBNWDUwX01NQ19TREhDNF9CQVNFX0FERFIJKE1YNTBfU1BCQTBfQkFTRV9BRERSICsgMHgwMDAyNDAwMCkKKworLyoKKyAqIEFJUFMgMQorICovCisjZGVmaW5lIE1YNTBfQUlQUzFfQkFTRV9BRERSCTB4NTNmMDAwMDAKKyNkZWZpbmUgTVg1MF9BSVBTMV9TSVpFCQlTWl8xTQorCisjZGVmaW5lIE1YNTBfT1RHX0JBU0VfQUREUgkoTVg1MF9BSVBTMV9CQVNFX0FERFIgKyAweDAwMDgwMDAwKQorI2RlZmluZSBNWDUwX0dQSU8xX0JBU0VfQUREUgkoTVg1MF9BSVBTMV9CQVNFX0FERFIgKyAweDAwMDg0MDAwKQorI2RlZmluZSBNWDUwX0dQSU8yX0JBU0VfQUREUgkoTVg1MF9BSVBTMV9CQVNFX0FERFIgKyAweDAwMDg4MDAwKQorI2RlZmluZSBNWDUwX0dQSU8zX0JBU0VfQUREUgkoTVg1MF9BSVBTMV9CQVNFX0FERFIgKyAweDAwMDhjMDAwKQorI2RlZmluZSBNWDUwX0dQSU80X0JBU0VfQUREUgkoTVg1MF9BSVBTMV9CQVNFX0FERFIgKyAweDAwMDkwMDAwKQorI2RlZmluZSBNWDUwX0tQUF9CQVNFX0FERFIJKE1YNTBfQUlQUzFfQkFTRV9BRERSICsgMHgwMDA5NDAwMCkKKyNkZWZpbmUgTVg1MF9XRE9HX0JBU0VfQUREUgkoTVg1MF9BSVBTMV9CQVNFX0FERFIgKyAweDAwMDk4MDAwKQorI2RlZmluZSBNWDUwX0dQVDFfQkFTRV9BRERSCShNWDUwX0FJUFMxX0JBU0VfQUREUiArIDB4MDAwYTAwMDApCisjZGVmaW5lIE1YNTBfU1JUQ19CQVNFX0FERFIJKE1YNTBfQUlQUzFfQkFTRV9BRERSICsgMHgwMDBhNDAwMCkKKyNkZWZpbmUgTVg1MF9JT01VWENfQkFTRV9BRERSCShNWDUwX0FJUFMxX0JBU0VfQUREUiArIDB4MDAwYTgwMDApCisjZGVmaW5lIE1YNTBfRVBJVDFfQkFTRV9BRERSCShNWDUwX0FJUFMxX0JBU0VfQUREUiArIDB4MDAwYWMwMDApCisjZGVmaW5lIE1YNTBfUFdNMV9CQVNFX0FERFIJKE1YNTBfQUlQUzFfQkFTRV9BRERSICsgMHgwMDBiNDAwMCkKKyNkZWZpbmUgTVg1MF9QV00yX0JBU0VfQUREUgkoTVg1MF9BSVBTMV9CQVNFX0FERFIgKyAweDAwMGI4MDAwKQorI2RlZmluZSBNWDUwX1VBUlQxX0JBU0VfQUREUgkoTVg1MF9BSVBTMV9CQVNFX0FERFIgKyAweDAwMGJjMDAwKQorI2RlZmluZSBNWDUwX1VBUlQyX0JBU0VfQUREUgkoTVg1MF9BSVBTMV9CQVNFX0FERFIgKyAweDAwMGMwMDAwKQorI2RlZmluZSBNWDUwX1NSQ19CQVNFX0FERFIJKE1YNTBfQUlQUzFfQkFTRV9BRERSICsgMHgwMDBkMDAwMCkKKyNkZWZpbmUgTVg1MF9DQ01fQkFTRV9BRERSCShNWDUwX0FJUFMxX0JBU0VfQUREUiArIDB4MDAwZDQwMDApCisjZGVmaW5lIE1YNTBfR1BDX0JBU0VfQUREUgkoTVg1MF9BSVBTMV9CQVNFX0FERFIgKyAweDAwMGQ4MDAwKQorI2RlZmluZSBNWDUwX0dQSU81X0JBU0VfQUREUgkoTVg1MF9BSVBTMV9CQVNFX0FERFIgKyAweDAwMGRjMDAwKQorI2RlZmluZSBNWDUwX0dQSU82X0JBU0VfQUREUgkoTVg1MF9BSVBTMV9CQVNFX0FERFIgKyAweDAwMGUwMDAwKQorI2RlZmluZSBNWDUwX0kyQzNfQkFTRV9BRERSCShNWDUwX0FJUFMxX0JBU0VfQUREUiArIDB4MDAwZWMwMDApCisjZGVmaW5lIE1YNTBfVUFSVDRfQkFTRV9BRERSCShNWDUwX0FJUFMxX0JBU0VfQUREUiArIDB4MDAwZjAwMDApCisKKyNkZWZpbmUgTVg1MF9NU0hDX0JBU0VfQUREUgkoTVg1MF9BSVBTMV9CQVNFX0FERFIgKyAweDAwMGY0MDAwKQorI2RlZmluZSBNWDUwX1JOR0JfQkFTRV9BRERSCShNWDUwX0FJUFMxX0JBU0VfQUREUiArIDB4MDAwZjgwMDApCisKKy8qCisgKiBBSVBTIDIKKyAqLworI2RlZmluZSBNWDUwX0FJUFMyX0JBU0VfQUREUgkweDYzZjAwMDAwCisjZGVmaW5lIE1YNTBfQUlQUzJfU0laRQkJU1pfMU0KKworI2RlZmluZSBNWDUwX1BMTDFfQkFTRV9BRERSCShNWDUwX0FJUFMyX0JBU0VfQUREUiArIDB4MDAwODAwMDApCisjZGVmaW5lIE1YNTBfUExMMl9CQVNFX0FERFIJKE1YNTBfQUlQUzJfQkFTRV9BRERSICsgMHgwMDA4NDAwMCkKKyNkZWZpbmUgTVg1MF9QTEwzX0JBU0VfQUREUgkoTVg1MF9BSVBTMl9CQVNFX0FERFIgKyAweDAwMDg4MDAwKQorI2RlZmluZSBNWDUwX1VBUlQ1X0JBU0VfQUREUgkoTVg1MF9BSVBTMl9CQVNFX0FERFIgKyAweDAwMDkwMDAwKQorI2RlZmluZSBNWDUwX0FIQk1BWF9CQVNFX0FERFIJKE1YNTBfQUlQUzJfQkFTRV9BRERSICsgMHgwMDA5NDAwMCkKKyNkZWZpbmUgTVg1MF9BUk1fQkFTRV9BRERSCShNWDUwX0FJUFMyX0JBU0VfQUREUiArIDB4MDAwYTAwMDApCisjZGVmaW5lIE1YNTBfT1dJUkVfQkFTRV9BRERSCShNWDUwX0FJUFMyX0JBU0VfQUREUiArIDB4MDAwYTQwMDApCisjZGVmaW5lIE1YNTBfQ1NQSTJfQkFTRV9BRERSCShNWDUwX0FJUFMyX0JBU0VfQUREUiArIDB4MDAwYWMwMDApCisjZGVmaW5lIE1YNTBfU0RNQV9CQVNFX0FERFIJKE1YNTBfQUlQUzJfQkFTRV9BRERSICsgMHgwMDBiMDAwMCkKKyNkZWZpbmUgTVg1MF9ST01DUF9CQVNFX0FERFIJKE1YNTBfQUlQUzJfQkFTRV9BRERSICsgMHgwMDBiODAwMCkKKyNkZWZpbmUgTVg1MF9DU1BJM19CQVNFX0FERFIJKE1YNTBfQUlQUzJfQkFTRV9BRERSICsgMHgwMDBjMDAwMCkKKyNkZWZpbmUgTVg1MF9JMkMyX0JBU0VfQUREUgkoTVg1MF9BSVBTMl9CQVNFX0FERFIgKyAweDAwMGM0MDAwKQorI2RlZmluZSBNWDUwX0kyQzFfQkFTRV9BRERSCShNWDUwX0FJUFMyX0JBU0VfQUREUiArIDB4MDAwYzgwMDApCisjZGVmaW5lIE1YNTBfU1NJMV9CQVNFX0FERFIJKE1YNTBfQUlQUzJfQkFTRV9BRERSICsgMHgwMDBjYzAwMCkKKyNkZWZpbmUgTVg1MF9BVURNVVhfQkFTRV9BRERSCShNWDUwX0FJUFMyX0JBU0VfQUREUiArIDB4MDAwZDAwMDApCisjZGVmaW5lIE1YNTBfV0VJTV9CQVNFX0FERFIJKE1YNTBfQUlQUzJfQkFTRV9BRERSICsgMHgwMDBkODAwMCkKKyNkZWZpbmUgTVg1MF9GRUNfQkFTRV9BRERSCShNWDUwX0FJUFMyX0JBU0VfQUREUiArIDB4MDAwZWMwMDApCisKKy8qCisgKiBNZW1vcnkgcmVnaW9ucyBhbmQgQ1MKKyAqLworI2RlZmluZSBNWDUwX0NTRDBfQkFTRV9BRERSCQkweDcwMDAwMDAwCisjZGVmaW5lIE1YNTBfQ1NEMV9CQVNFX0FERFIJCTB4YjAwMDAwMDAKKyNkZWZpbmUgTVg1MF9DUzBfQkFTRV9BRERSCQkweGYwMDAwMDAwCisKKyNkZWZpbmUgTVg1MF9JT19QMlYoeCkJCQlJTVhfSU9fUDJWKHgpCisjZGVmaW5lIE1YNTBfSU9fQUREUkVTUyh4KQkJSU9NRU0oTVg1MF9JT19QMlYoeCkpCisKKy8qCisgKiBkZWZpbmVzIGZvciBTUEJBIG1vZHVsZXMKKyAqLworI2RlZmluZSBNWDUwX1NQQkFfU0RIQzEJCTB4MDQKKyNkZWZpbmUgTVg1MF9TUEJBX1NESEMyCQkweDA4CisjZGVmaW5lIE1YNTBfU1BCQV9VQVJUMwkJMHgwYworI2RlZmluZSBNWDUwX1NQQkFfQ1NQSTEJCTB4MTAKKyNkZWZpbmUgTVg1MF9TUEJBX1NTSTIJCTB4MTQKKyNkZWZpbmUgTVg1MF9TUEJBX1NESEMzCQkweDIwCisjZGVmaW5lIE1YNTBfU1BCQV9TREhDNAkJMHgyNAorI2RlZmluZSBNWDUwX1NQQkFfU1BESUYJCTB4MjgKKyNkZWZpbmUgTVg1MF9TUEJBX0FUQQkJMHgzMAorI2RlZmluZSBNWDUwX1NQQkFfU0xJTQkJMHgzNAorI2RlZmluZSBNWDUwX1NQQkFfSFNJMkMJCTB4MzgKKyNkZWZpbmUgTVg1MF9TUEJBX0NUUkwJCTB4M2MKKworLyoKKyAqIERNQSByZXF1ZXN0IGFzc2lnbm1lbnRzCisgKi8KKyNkZWZpbmUgTVg1MF9ETUFfUkVRX0dQQwkJMQorI2RlZmluZSBNWDUwX0RNQV9SRVFfQVRBX1VBUlQ0X1JYCTIKKyNkZWZpbmUgTVg1MF9ETUFfUkVRX0FUQV9VQVJUNF9UWAkzCisjZGVmaW5lIE1YNTBfRE1BX1JFUV9DU1BJMV9SWAkJNgorI2RlZmluZSBNWDUwX0RNQV9SRVFfQ1NQSTFfVFgJCTcKKyNkZWZpbmUgTVg1MF9ETUFfUkVRX0NTUEkyX1JYCQk4CisjZGVmaW5lIE1YNTBfRE1BX1JFUV9DU1BJMl9UWAkJOQorI2RlZmluZSBNWDUwX0RNQV9SRVFfSTJDM19TREhDMwkJMTAKKyNkZWZpbmUgTVg1MF9ETUFfUkVRX1NESEM0CQkxMQorI2RlZmluZSBNWDUwX0RNQV9SRVFfVUFSVDJfRklSSV9SWAkxMgorI2RlZmluZSBNWDUwX0RNQV9SRVFfVUFSVDJfRklSSV9UWAkxMworI2RlZmluZSBNWDUwX0RNQV9SRVFfRVhUMAkJMTQKKyNkZWZpbmUgTVg1MF9ETUFfUkVRX0VYVDEJCTE1CisjZGVmaW5lIE1YNTBfRE1BX1JFUV9VQVJUNV9SWAkJMTYKKyNkZWZpbmUgTVg1MF9ETUFfUkVRX1VBUlQ1X1RYCQkxNworI2RlZmluZSBNWDUwX0RNQV9SRVFfVUFSVDFfUlgJCTE4CisjZGVmaW5lIE1YNTBfRE1BX1JFUV9VQVJUMV9UWAkJMTkKKyNkZWZpbmUgTVg1MF9ETUFfUkVRX0kyQzFfU0RIQzEJCTIwCisjZGVmaW5lIE1YNTBfRE1BX1JFUV9JMkMyX1NESEMyCQkyMQorI2RlZmluZSBNWDUwX0RNQV9SRVFfU1NJMl9SWDIJCTIyCisjZGVmaW5lIE1YNTBfRE1BX1JFUV9TU0kyX1RYMgkJMjMKKyNkZWZpbmUgTVg1MF9ETUFfUkVRX1NTSTJfUlgxCQkyNAorI2RlZmluZSBNWDUwX0RNQV9SRVFfU1NJMl9UWDEJCTI1CisjZGVmaW5lIE1YNTBfRE1BX1JFUV9TU0kxX1JYMgkJMjYKKyNkZWZpbmUgTVg1MF9ETUFfUkVRX1NTSTFfVFgyCQkyNworI2RlZmluZSBNWDUwX0RNQV9SRVFfU1NJMV9SWDEJCTI4CisjZGVmaW5lIE1YNTBfRE1BX1JFUV9TU0kxX1RYMQkJMjkKKyNkZWZpbmUgTVg1MF9ETUFfUkVRX0NTUElfUlgJCTM4CisjZGVmaW5lIE1YNTBfRE1BX1JFUV9DU1BJX1RYCQkzOQorI2RlZmluZSBNWDUwX0RNQV9SRVFfVUFSVDNfUlgJCTQyCisjZGVmaW5lIE1YNTBfRE1BX1JFUV9VQVJUM19UWAkJNDMKKworLyoKKyAqIEludGVycnVwdCBudW1iZXJzCisgKi8KKyNkZWZpbmUgTVg1MF9JTlRfTU1DX1NESEMxCTEKKyNkZWZpbmUgTVg1MF9JTlRfTU1DX1NESEMyCTIKKyNkZWZpbmUgTVg1MF9JTlRfTU1DX1NESEMzCTMKKyNkZWZpbmUgTVg1MF9JTlRfTU1DX1NESEM0CTQKKyNkZWZpbmUgTVg1MF9JTlRfREFQCQk1CisjZGVmaW5lIE1YNTBfSU5UX1NETUEJCTYKKyNkZWZpbmUgTVg1MF9JTlRfSU9NVVgJCTcKKyNkZWZpbmUgTVg1MF9JTlRfVUFSVDQJCTEzCisjZGVmaW5lIE1YNTBfSU5UX1VTQl9IMQkJMTQKKyNkZWZpbmUgTVg1MF9JTlRfVVNCX09URwkxOAorI2RlZmluZSBNWDUwX0lOVF9EQVRBQkFITgkxOQorI2RlZmluZSBNWDUwX0lOVF9FTENESUYJCTIwCisjZGVmaW5lIE1YNTBfSU5UX0VQWFAJCTIxCisjZGVmaW5lIE1YNTBfSU5UX1NSVENfTlRaCTI0CisjZGVmaW5lIE1YNTBfSU5UX1NSVENfVFoJMjUKKyNkZWZpbmUgTVg1MF9JTlRfRVBEQwkJMjcKKyNkZWZpbmUgTVg1MF9JTlRfTklDCQkyOAorI2RlZmluZSBNWDUwX0lOVF9TU0kxCQkyOQorI2RlZmluZSBNWDUwX0lOVF9TU0kyCQkzMAorI2RlZmluZSBNWDUwX0lOVF9VQVJUMQkJMzEKKyNkZWZpbmUgTVg1MF9JTlRfVUFSVDIJCTMyCisjZGVmaW5lIE1YNTBfSU5UX1VBUlQzCQkzMworI2RlZmluZSBNWDUwX0lOVF9SRVNWMzQJCTM0CisjZGVmaW5lIE1YNTBfSU5UX1JFU1YzNQkJMzUKKyNkZWZpbmUgTVg1MF9JTlRfQ1NQSTEJCTM2CisjZGVmaW5lIE1YNTBfSU5UX0NTUEkyCQkzNworI2RlZmluZSBNWDUwX0lOVF9DU1BJCQkzOAorI2RlZmluZSBNWDUwX0lOVF9HUFQJCTM5CisjZGVmaW5lIE1YNTBfSU5UX0VQSVQxCQk0MAorI2RlZmluZSBNWDUwX0lOVF9HUElPMV9JTlQ3CTQyCisjZGVmaW5lIE1YNTBfSU5UX0dQSU8xX0lOVDYJNDMKKyNkZWZpbmUgTVg1MF9JTlRfR1BJTzFfSU5UNQk0NAorI2RlZmluZSBNWDUwX0lOVF9HUElPMV9JTlQ0CTQ1CisjZGVmaW5lIE1YNTBfSU5UX0dQSU8xX0lOVDMJNDYKKyNkZWZpbmUgTVg1MF9JTlRfR1BJTzFfSU5UMgk0NworI2RlZmluZSBNWDUwX0lOVF9HUElPMV9JTlQxCTQ4CisjZGVmaW5lIE1YNTBfSU5UX0dQSU8xX0lOVDAJNDkKKyNkZWZpbmUgTVg1MF9JTlRfR1BJTzFfTE9XCTUwCisjZGVmaW5lIE1YNTBfSU5UX0dQSU8xX0hJR0gJNTEKKyNkZWZpbmUgTVg1MF9JTlRfR1BJTzJfTE9XCTUyCisjZGVmaW5lIE1YNTBfSU5UX0dQSU8yX0hJR0gJNTMKKyNkZWZpbmUgTVg1MF9JTlRfR1BJTzNfTE9XCTU0CisjZGVmaW5lIE1YNTBfSU5UX0dQSU8zX0hJR0gJNTUKKyNkZWZpbmUgTVg1MF9JTlRfR1BJTzRfTE9XCTU2CisjZGVmaW5lIE1YNTBfSU5UX0dQSU80X0hJR0gJNTcKKyNkZWZpbmUgTVg1MF9JTlRfV0RPRzEJCTU4CisjZGVmaW5lIE1YNTBfSU5UX0tQUAkJNjAKKyNkZWZpbmUgTVg1MF9JTlRfUFdNMQkJNjEKKyNkZWZpbmUgTVg1MF9JTlRfSTJDMQkJNjIKKyNkZWZpbmUgTVg1MF9JTlRfSTJDMgkJNjMKKyNkZWZpbmUgTVg1MF9JTlRfSTJDMwkJNjQKKyNkZWZpbmUgTVg1MF9JTlRfUkVTVjY1CQk2NQorI2RlZmluZSBNWDUwX0lOVF9EQ0RDCQk2NgorI2RlZmluZSBNWDUwX0lOVF9USEVSTUFMX0FMQVJNCTY3CisjZGVmaW5lIE1YNTBfSU5UX0FOQTMJCTY4CisjZGVmaW5lIE1YNTBfSU5UX0FOQTQJCTY5CisjZGVmaW5lIE1YNTBfSU5UX0NDTTEJCTcxCisjZGVmaW5lIE1YNTBfSU5UX0NDTTIJCTcyCisjZGVmaW5lIE1YNTBfSU5UX0dQQzEJCTczCisjZGVmaW5lIE1YNTBfSU5UX0dQQzIJCTc0CisjZGVmaW5lIE1YNTBfSU5UX1NSQwkJNzUKKyNkZWZpbmUgTVg1MF9JTlRfTk0JCTc2CisjZGVmaW5lIE1YNTBfSU5UX1BNVQkJNzcKKyNkZWZpbmUgTVg1MF9JTlRfQ1RJX0lSUQk3OAorI2RlZmluZSBNWDUwX0lOVF9DVEkxX1RHMAk3OQorI2RlZmluZSBNWDUwX0lOVF9DVEkxX1RHMQk4MAorI2RlZmluZSBNWDUwX0lOVF9HUFUyX0lSUQk4NAorI2RlZmluZSBNWDUwX0lOVF9HUFUyX0JVU1kJODUKKyNkZWZpbmUgTVg1MF9JTlRfVUFSVDUJCTg2CisjZGVmaW5lIE1YNTBfSU5UX0ZFQwkJODcKKyNkZWZpbmUgTVg1MF9JTlRfT1dJUkUJCTg4CisjZGVmaW5lIE1YNTBfSU5UX0NUSTFfVEcyCTg5CisjZGVmaW5lIE1YNTBfSU5UX1NKQwkJOTAKKyNkZWZpbmUgTVg1MF9JTlRfRENQX0NIQU4xXzMJOTEKKyNkZWZpbmUgTVg1MF9JTlRfRENQX0NIQU4wCTkyCisjZGVmaW5lIE1YNTBfSU5UX1BXTTIJCTk0CisjZGVmaW5lIE1YNTBfSU5UX1JOR0IJCTk3CisjZGVmaW5lIE1YNTBfSU5UX0NUSTFfVEczCTk4CisjZGVmaW5lIE1YNTBfSU5UX1JBV05BTkRfQkNICTEwMAorI2RlZmluZSBNWDUwX0lOVF9SQVdOQU5EX0dQTUkJMTAyCisjZGVmaW5lIE1YNTBfSU5UX0dQSU81X0xPVwkxMDMKKyNkZWZpbmUgTVg1MF9JTlRfR1BJTzVfSElHSAkxMDQKKyNkZWZpbmUgTVg1MF9JTlRfR1BJTzZfTE9XCTEwNQorI2RlZmluZSBNWDUwX0lOVF9HUElPNl9ISUdICTEwNgorI2RlZmluZSBNWDUwX0lOVF9NU0hDCQkxMDkKKyNkZWZpbmUgTVg1MF9JTlRfQVBCSERNQV9DSEFOMAkxMTAKKyNkZWZpbmUgTVg1MF9JTlRfQVBCSERNQV9DSEFOMQkxMTEKKyNkZWZpbmUgTVg1MF9JTlRfQVBCSERNQV9DSEFOMgkxMTIKKyNkZWZpbmUgTVg1MF9JTlRfQVBCSERNQV9DSEFOMwkxMTMKKyNkZWZpbmUgTVg1MF9JTlRfQVBCSERNQV9DSEFONAkxMTQKKyNkZWZpbmUgTVg1MF9JTlRfQVBCSERNQV9DSEFONQkxMTUKKyNkZWZpbmUgTVg1MF9JTlRfQVBCSERNQV9DSEFONgkxMTYKKyNkZWZpbmUgTVg1MF9JTlRfQVBCSERNQV9DSEFONwkxMTcKKworI2VuZGlmIC8qIGlmbmRlZiBfX01BQ0hfTVg1MF9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDUxLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXg1MS5oCmluZGV4IDJhZjdhMTAuLjg3MzgwN2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDUxLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214NTEuaApAQCAtMiwzMSArMiw2IEBACiAjZGVmaW5lIF9fTUFDSF9NWDUxX0hfXwogCiAvKgotICogTVg1MSBtZW1vcnkgbWFwOgotICoKLSAqCi0gKiBWaXJ0CQlQaHlzCQlTaXplCVdoYXQKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogZmEzZTAwMDAJMWZmZTAwMDAJMTI4SwlJUkFNIChTQ0N2MiBSQU0pCi0gKiAgICAgICAgIAkzMDAwMDAwMAkyNTZNCUdQVQotICogICAgICAgICAJNDAwMDAwMDAJNTEyTQlJUFUKLSAqIGZhMjAwMDAwCTYwMDAwMDAwCTFNCURFQlVHCi0gKiBmYjEwMDAwMAk3MDAwMDAwMAkxTQlTUEJBIDAKLSAqIGZiMDAwMDAwCTczZjAwMDAwCTFNCUFJUFMgMQotICogZmIyMDAwMDAJODNmMDAwMDAJMU0JQUlQUyAyCi0gKgkJOGZmZmMwMDAJMTZLCVRaSUMgKGludGVycnVwdCBjb250cm9sbGVyKQotICogICAgICAgICAJOTAwMDAwMDAJMjU2TQlDU0QwIFNEUkFNL0REUgotICogICAgICAgICAJYTAwMDAwMDAJMjU2TQlDU0QxIFNEUkFNL0REUgotICogICAgICAgICAJYjAwMDAwMDAJMTI4TQlDUzAgRmxhc2gKLSAqICAgICAgICAgCWI4MDAwMDAwCTEyOE0JQ1MxIEZsYXNoCi0gKiAgICAgICAgIAljMDAwMDAwMAkxMjhNCUNTMiBGbGFzaAotICogICAgICAgICAJYzgwMDAwMDAJNjRNCUNTMyBGbGFzaAotICogICAgICAgICAJY2MwMDAwMDAJMzJNCUNTNCBTUkFNCi0gKiAgICAgICAgIAljZTAwMDAwMAkzMk0JQ1M1IFNSQU0KLSAqCQljZmZmMDAwMAk2NEsJTkZDIChOQU5EIEZsYXNoIEFYSSkKLSAqLwotCi0vKgogICogSVJPTQogICovCiAjZGVmaW5lIE1YNTFfSVJPTV9CQVNFX0FERFIJCTB4MApAQCAtMzYsNyArMTEsNiBAQAogICogSVJBTQogICovCiAjZGVmaW5lIE1YNTFfSVJBTV9CQVNFX0FERFIJCTB4MWZmZTAwMDAJLyogaW50ZXJuYWwgcmFtICovCi0jZGVmaW5lIE1YNTFfSVJBTV9CQVNFX0FERFJfVklSVAkweGZhM2UwMDAwCiAjZGVmaW5lIE1YNTFfSVJBTV9QQVJUSVRJT05TCQkxNgogI2RlZmluZSBNWDUxX0lSQU1fU0laRQkJKE1YNTFfSVJBTV9QQVJUSVRJT05TICogU1pfOEspCS8qIDEyOEtCICovCiAKQEAgLTQ1LDcgKzE5LDYgQEAKICNkZWZpbmUgTVg1MV9JUFVfQ1RSTF9CQVNFX0FERFIJCTB4NDAwMDAwMDAKIAogI2RlZmluZSBNWDUxX0RFQlVHX0JBU0VfQUREUgkJMHg2MDAwMDAwMAotI2RlZmluZSBNWDUxX0RFQlVHX0JBU0VfQUREUl9WSVJUCTB4ZmEyMDAwMDAKICNkZWZpbmUgTVg1MV9ERUJVR19TSVpFCQkJU1pfMU0KIAogI2RlZmluZSBNWDUxX0VUQl9CQVNFX0FERFIJCShNWDUxX0RFQlVHX0JBU0VfQUREUiArIDB4MDEwMDApCkBAIC02MSw3ICszNCw2IEBACiAgKiBTUEJBIGdsb2JhbCBtb2R1bGUgZW5hYmxlZCAjMAogICovCiAjZGVmaW5lIE1YNTFfU1BCQTBfQkFTRV9BRERSCQkweDcwMDAwMDAwCi0jZGVmaW5lIE1YNTFfU1BCQTBfQkFTRV9BRERSX1ZJUlQJMHhmYjEwMDAwMAogI2RlZmluZSBNWDUxX1NQQkEwX1NJWkUJCQlTWl8xTQogCiAjZGVmaW5lIE1YNTFfRVNESEMxX0JBU0VfQUREUgkJKE1YNTFfU1BCQTBfQkFTRV9BRERSICsgMHgwNDAwMCkKQEAgLTgxLDcgKzUzLDYgQEAKICAqIEFJUFMgMQogICovCiAjZGVmaW5lIE1YNTFfQUlQUzFfQkFTRV9BRERSCQkweDczZjAwMDAwCi0jZGVmaW5lIE1YNTFfQUlQUzFfQkFTRV9BRERSX1ZJUlQJMHhmYjAwMDAwMAogI2RlZmluZSBNWDUxX0FJUFMxX1NJWkUJCQlTWl8xTQogCiAjZGVmaW5lIE1YNTFfT1RHX0JBU0VfQUREUgkJKE1YNTFfQUlQUzFfQkFTRV9BRERSICsgMHg4MDAwMCkKQEAgLTkwLDcgKzYxLDcgQEAKICNkZWZpbmUgTVg1MV9HUElPM19CQVNFX0FERFIJCShNWDUxX0FJUFMxX0JBU0VfQUREUiArIDB4OGMwMDApCiAjZGVmaW5lIE1YNTFfR1BJTzRfQkFTRV9BRERSCQkoTVg1MV9BSVBTMV9CQVNFX0FERFIgKyAweDkwMDAwKQogI2RlZmluZSBNWDUxX0tQUF9CQVNFX0FERFIJCShNWDUxX0FJUFMxX0JBU0VfQUREUiArIDB4OTQwMDApCi0jZGVmaW5lIE1YNTFfV0RPR19CQVNFX0FERFIJCShNWDUxX0FJUFMxX0JBU0VfQUREUiArIDB4OTgwMDApCisjZGVmaW5lIE1YNTFfV0RPRzFfQkFTRV9BRERSCQkoTVg1MV9BSVBTMV9CQVNFX0FERFIgKyAweDk4MDAwKQogI2RlZmluZSBNWDUxX1dET0cyX0JBU0VfQUREUgkJKE1YNTFfQUlQUzFfQkFTRV9BRERSICsgMHg5YzAwMCkKICNkZWZpbmUgTVg1MV9HUFQxX0JBU0VfQUREUgkJKE1YNTFfQUlQUzFfQkFTRV9BRERSICsgMHhhMDAwMCkKICNkZWZpbmUgTVg1MV9TUlRDX0JBU0VfQUREUgkJKE1YNTFfQUlQUzFfQkFTRV9BRERSICsgMHhhNDAwMCkKQEAgLTEwOSw3ICs4MCw2IEBACiAgKiBBSVBTIDIKICAqLwogI2RlZmluZSBNWDUxX0FJUFMyX0JBU0VfQUREUgkJMHg4M2YwMDAwMAotI2RlZmluZSBNWDUxX0FJUFMyX0JBU0VfQUREUl9WSVJUCTB4ZmIyMDAwMDAKICNkZWZpbmUgTVg1MV9BSVBTMl9TSVpFCQkJU1pfMU0KIAogI2RlZmluZSBNWDUxX1BMTDFfQkFTRV9BRERSCQkoTVg1MV9BSVBTMl9CQVNFX0FERFIgKyAweDgwMDAwKQpAQCAtMTM5LDcgKzEwOSw3IEBACiAjZGVmaW5lIE1YNTFfTUlQSV9IU0NfQkFTRV9BRERSCQkoTVg1MV9BSVBTMl9CQVNFX0FERFIgKyAweGRjMDAwKQogI2RlZmluZSBNWDUxX0FUQV9CQVNFX0FERFIJCShNWDUxX0FJUFMyX0JBU0VfQUREUiArIDB4ZTAwMDApCiAjZGVmaW5lIE1YNTFfU0lNX0JBU0VfQUREUgkJKE1YNTFfQUlQUzJfQkFTRV9BRERSICsgMHhlNDAwMCkKLSNkZWZpbmUgTVg1MV9TU0kzQkFTRV9BRERSCQkoTVg1MV9BSVBTMl9CQVNFX0FERFIgKyAweGU4MDAwKQorI2RlZmluZSBNWDUxX1NTSTNfQkFTRV9BRERSCQkoTVg1MV9BSVBTMl9CQVNFX0FERFIgKyAweGU4MDAwKQogI2RlZmluZSBNWDUxX0ZFQ19CQVNFX0FERFIJCShNWDUxX0FJUFMyX0JBU0VfQUREUiArIDB4ZWMwMDApCiAjZGVmaW5lIE1YNTFfVFZFX0JBU0VfQUREUgkJKE1YNTFfQUlQUzJfQkFTRV9BRERSICsgMHhmMDAwMCkKICNkZWZpbmUgTVg1MV9WUFVfQkFTRV9BRERSCQkoTVg1MV9BSVBTMl9CQVNFX0FERFIgKyAweGY0MDAwKQpAQCAtMTYzLDE2ICsxMzMsOCBAQAogI2RlZmluZSBNWDUxX0dQVTJEX0JBU0VfQUREUgkJMHhkMDAwMDAwMAogI2RlZmluZSBNWDUxX1RaSUNfQkFTRV9BRERSCQkweGUwMDAwMDAwCiAKLSNkZWZpbmUgTVg1MV9JT19BRERSRVNTKHgpICgJCQkJCQlcCi0JSU1YX0lPX0FERFJFU1MoeCwgTVg1MV9JUkFNKSA/OgkJCQkJXAotCUlNWF9JT19BRERSRVNTKHgsIE1YNTFfREVCVUcpID86CQkJCVwKLQlJTVhfSU9fQUREUkVTUyh4LCBNWDUxX1NQQkEwKSA/OgkJCQlcCi0JSU1YX0lPX0FERFJFU1MoeCwgTVg1MV9BSVBTMSkgPzoJCQkJXAotCUlNWF9JT19BRERSRVNTKHgsIE1YNTFfQUlQUzIpKQotCi0vKiBUaGlzIGlzIGN1cnJlbnRseSB1c2VkIGluIDxtYWNoL2RlYnVnLW1hY3JvLlM+LCBidXQgc2hvdWxkIGdvIGF3YXkgKi8KLSNkZWZpbmUgTVg1MV9BSVBTMV9JT19BRERSRVNTKHgpICBcCi0JKCgoeCkgLSBNWDUxX0FJUFMxX0JBU0VfQUREUikgKyBNWDUxX0FJUFMxX0JBU0VfQUREUl9WSVJUKQorI2RlZmluZSBNWDUxX0lPX1AyVih4KQkJCUlNWF9JT19QMlYoeCkKKyNkZWZpbmUgTVg1MV9JT19BRERSRVNTKHgpCQlJT01FTShNWDUxX0lPX1AyVih4KSkKIAogLyoKICAqIGRlZmluZXMgZm9yIFNQQkEgbW9kdWxlcwpAQCAtMjYxLDkgKzIyMyw5IEBACiAjZGVmaW5lIE1YNTFfRE1BX1JFUV9FTUlfV1IJCTMyCiAjZGVmaW5lIE1YNTFfRE1BX1JFUV9DVEkyXzEJCTMzCiAjZGVmaW5lIE1YNTFfRE1BX1JFUV9FUElUMgkJMzQKLSNkZWZpbmUgTVg1MV9ETUFfUkVRX1NTSTNfUlgyCQkzNQorI2RlZmluZSBNWDUxX0RNQV9SRVFfU1NJM19SWDEJCTM1CiAjZGVmaW5lIE1YNTFfRE1BX1JFUV9JUFUJCTM2Ci0jZGVmaW5lIE1YNTFfRE1BX1JFUV9TU0kzX1RYMgkJMzcKKyNkZWZpbmUgTVg1MV9ETUFfUkVRX1NTSTNfVFgxCQkzNwogI2RlZmluZSBNWDUxX0RNQV9SRVFfQ1NQSV9SWAkJMzgKICNkZWZpbmUgTVg1MV9ETUFfUkVRX0NTUElfVFgJCTM5CiAjZGVmaW5lIE1YNTFfRE1BX1JFUV9TREhDMwkJNDAKQEAgLTI3Miw4ICsyMzQsOCBAQAogI2RlZmluZSBNWDUxX0RNQV9SRVFfVUFSVDNfUlgJCTQzCiAjZGVmaW5lIE1YNTFfRE1BX1JFUV9VQVJUM19UWAkJNDQKICNkZWZpbmUgTVg1MV9ETUFfUkVRX1NQRElGCQk0NQotI2RlZmluZSBNWDUxX0RNQV9SRVFfU1NJM19SWDEJCTQ2Ci0jZGVmaW5lIE1YNTFfRE1BX1JFUV9TU0kzX1RYMQkJNDcKKyNkZWZpbmUgTVg1MV9ETUFfUkVRX1NTSTNfUlgwCQk0NgorI2RlZmluZSBNWDUxX0RNQV9SRVFfU1NJM19UWDAJCTQ3CiAKIC8qCiAgKiBJbnRlcnJ1cHQgbnVtYmVycwpAQCAtMjg5LDggKzI1MSw4IEBACiAjZGVmaW5lIE1YNTFfTVhDX0lOVF9JT01VWAkJNwogI2RlZmluZSBNWDUxX0lOVF9ORkMJCQk4CiAjZGVmaW5lIE1YNTFfTVhDX0lOVF9WUFUJCTkKLSNkZWZpbmUgTVg1MV9NWENfSU5UX0lQVV9FUlIJCTEwCi0jZGVmaW5lIE1YNTFfTVhDX0lOVF9JUFVfU1lOCQkxMQorI2RlZmluZSBNWDUxX0lOVF9JUFVfRVJSCQkxMAorI2RlZmluZSBNWDUxX0lOVF9JUFVfU1lOCQkxMQogI2RlZmluZSBNWDUxX01YQ19JTlRfR1BVCQkxMgogI2RlZmluZSBNWDUxX01YQ19JTlRfUkVTVjEzCQkxMwogI2RlZmluZSBNWDUxX01YQ19JTlRfVVNCX0gxCQkxNApAQCAtMzc1LDcgKzMzNyw3IEBACiAjZGVmaW5lIE1YNTFfTVhDX0lOVF9GSVJJCQk5MwogI2RlZmluZSBNWDUxX01YQ19JTlRfUFdNMgkJOTQKICNkZWZpbmUgTVg1MV9NWENfSU5UX1NMSU1fRVhQCQk5NQotI2RlZmluZSBNWDUxX01YQ19JTlRfU1NJMwkJOTYKKyNkZWZpbmUgTVg1MV9JTlRfU1NJMwkJCTk2CiAjZGVmaW5lIE1YNTFfTVhDX0lOVF9FTUlfQk9PVAkJOTcKICNkZWZpbmUgTVg1MV9NWENfSU5UX0NUSTFfVEczCQk5OAogI2RlZmluZSBNWDUxX01YQ19JTlRfU01DX1JYCQk5OQpAQCAtMzgzLDE5ICszNDUsNiBAQAogI2RlZmluZSBNWDUxX01YQ19JTlRfRU1JX05GQwkJMTAxCiAjZGVmaW5lIE1YNTFfTVhDX0lOVF9HUFVfSURMRQkJMTAyCiAKLS8qIHNpbGljb24gcmV2aXNpb25zIHNwZWNpZmljIHRvIGkuTVg1MSAqLwotI2RlZmluZSBNWDUxX0NISVBfUkVWXzFfMAkJMHgxMAotI2RlZmluZSBNWDUxX0NISVBfUkVWXzFfMQkJMHgxMQotI2RlZmluZSBNWDUxX0NISVBfUkVWXzFfMgkJMHgxMgotI2RlZmluZSBNWDUxX0NISVBfUkVWXzFfMwkJMHgxMwotI2RlZmluZSBNWDUxX0NISVBfUkVWXzJfMAkJMHgyMAotI2RlZmluZSBNWDUxX0NISVBfUkVWXzJfMQkJMHgyMQotI2RlZmluZSBNWDUxX0NISVBfUkVWXzJfMgkJMHgyMgotI2RlZmluZSBNWDUxX0NISVBfUkVWXzJfMwkJMHgyMwotI2RlZmluZSBNWDUxX0NISVBfUkVWXzNfMAkJMHgzMAotI2RlZmluZSBNWDUxX0NISVBfUkVWXzNfMQkJMHgzMQotI2RlZmluZSBNWDUxX0NISVBfUkVWXzNfMgkJMHgzMgotCiAjaWYgIWRlZmluZWQoX19BU1NFTUJMWV9fKSAmJiAhZGVmaW5lZChfX01YQ19CT09UX1VOQ09NUFJFU1MpCiBleHRlcm4gaW50IG14NTFfcmV2aXNpb24odm9pZCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDUzLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXg1My5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1NzdjZGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXg1My5oCkBAIC0wLDAgKzEsMzUzIEBACisjaWZuZGVmIF9fTUFDSF9NWDUzX0hfXworI2RlZmluZSBfX01BQ0hfTVg1M19IX18KKworLyoKKyAqIElST00KKyAqLworI2RlZmluZSBNWDUzX0lST01fQkFTRV9BRERSCQkweDAKKyNkZWZpbmUgTVg1M19JUk9NX1NJWkUJCQlTWl82NEsKKworLyogVFpJQyAqLworI2RlZmluZSBNWDUzX1RaSUNfQkFTRV9BRERSCQkweDBGRkZDMDAwCisKKy8qCisgKiBBSENJIFNBVEEKKyAqLworI2RlZmluZSBNWDUzX1NBVEFfQkFTRV9BRERSCQkweDEwMDAwMDAwCisKKy8qCisgKiBORkMKKyAqLworI2RlZmluZSBNWDUzX05GQ19BWElfQkFTRV9BRERSCTB4RjdGRjAwMDAJLyogTkFORCBmbGFzaCBBWEkgKi8KKyNkZWZpbmUgTVg1M19ORkNfQVhJX1NJWkUJCVNaXzY0SworCisvKgorICogSVJBTQorICovCisjZGVmaW5lIE1YNTNfSVJBTV9CQVNFX0FERFIJMHhGODAwMDAwMAkvKiBpbnRlcm5hbCByYW0gKi8KKyNkZWZpbmUgTVg1M19JUkFNX1BBUlRJVElPTlMJMTYKKyNkZWZpbmUgTVg1M19JUkFNX1NJWkUJCShNWDUzX0lSQU1fUEFSVElUSU9OUyAqIFNaXzhLKQkvKiAxMjhLQiAqLworCisvKgorICogR3JhcGhpY3MgTWVtb3J5IG9mIEdQVQorICovCisjZGVmaW5lIE1YNTNfSVBVX0NUUkxfQkFTRV9BRERSCTB4MTgwMDAwMDAKKyNkZWZpbmUgTVg1M19HUFUyRF9CQVNFX0FERFIJCTB4MjAwMDAwMDAKKyNkZWZpbmUgTVg1M19HUFVfQkFTRV9BRERSCQkweDMwMDAwMDAwCisjZGVmaW5lIE1YNTNfR1BVX0dNRU1fQkFTRV9BRERSCTB4RjgwMjAwMDAKKworI2RlZmluZSBNWDUzX0RFQlVHX0JBU0VfQUREUgkJMHg0MDAwMDAwMAorI2RlZmluZSBNWDUzX0RFQlVHX1NJWkUJCVNaXzFNCisjZGVmaW5lIE1YNTNfRVRCX0JBU0VfQUREUgkJKE1YNTNfREVCVUdfQkFTRV9BRERSICsgMHgwMDAwMTAwMCkKKyNkZWZpbmUgTVg1M19FVE1fQkFTRV9BRERSCQkoTVg1M19ERUJVR19CQVNFX0FERFIgKyAweDAwMDAyMDAwKQorI2RlZmluZSBNWDUzX1RQSVVfQkFTRV9BRERSCQkoTVg1M19ERUJVR19CQVNFX0FERFIgKyAweDAwMDAzMDAwKQorI2RlZmluZSBNWDUzX0NUSTBfQkFTRV9BRERSCQkoTVg1M19ERUJVR19CQVNFX0FERFIgKyAweDAwMDA0MDAwKQorI2RlZmluZSBNWDUzX0NUSTFfQkFTRV9BRERSCQkoTVg1M19ERUJVR19CQVNFX0FERFIgKyAweDAwMDA1MDAwKQorI2RlZmluZSBNWDUzX0NUSTJfQkFTRV9BRERSCQkoTVg1M19ERUJVR19CQVNFX0FERFIgKyAweDAwMDA2MDAwKQorI2RlZmluZSBNWDUzX0NUSTNfQkFTRV9BRERSCQkoTVg1M19ERUJVR19CQVNFX0FERFIgKyAweDAwMDA3MDAwKQorI2RlZmluZSBNWDUzX0NPUlRFWF9EQkdfQkFTRV9BRERSCShNWDUzX0RFQlVHX0JBU0VfQUREUiArIDB4MDAwMDgwMDApCisKKy8qCisgKiBTUEJBIGdsb2JhbCBtb2R1bGUgZW5hYmxlZCAjMAorICovCisjZGVmaW5lIE1YNTNfU1BCQTBfQkFTRV9BRERSCQkweDUwMDAwMDAwCisjZGVmaW5lIE1YNTNfU1BCQTBfU0laRQkJU1pfMU0KKworI2RlZmluZSBNWDUzX01NQ19TREhDMV9CQVNFX0FERFIJKE1YNTNfU1BCQTBfQkFTRV9BRERSICsgMHgwMDAwNDAwMCkKKyNkZWZpbmUgTVg1M19NTUNfU0RIQzJfQkFTRV9BRERSCShNWDUzX1NQQkEwX0JBU0VfQUREUiArIDB4MDAwMDgwMDApCisjZGVmaW5lIE1YNTNfVUFSVDNfQkFTRV9BRERSCQkoTVg1M19TUEJBMF9CQVNFX0FERFIgKyAweDAwMDBDMDAwKQorI2RlZmluZSBNWDUzX0NTUEkxX0JBU0VfQUREUgkJKE1YNTNfU1BCQTBfQkFTRV9BRERSICsgMHgwMDAxMDAwMCkKKyNkZWZpbmUgTVg1M19TU0kyX0JBU0VfQUREUgkJKE1YNTNfU1BCQTBfQkFTRV9BRERSICsgMHgwMDAxNDAwMCkKKyNkZWZpbmUgTVg1M19NTUNfU0RIQzNfQkFTRV9BRERSCShNWDUzX1NQQkEwX0JBU0VfQUREUiArIDB4MDAwMjAwMDApCisjZGVmaW5lIE1YNTNfTU1DX1NESEM0X0JBU0VfQUREUgkoTVg1M19TUEJBMF9CQVNFX0FERFIgKyAweDAwMDI0MDAwKQorI2RlZmluZSBNWDUzX1NQRElGX0JBU0VfQUREUgkJKE1YNTNfU1BCQTBfQkFTRV9BRERSICsgMHgwMDAyODAwMCkKKyNkZWZpbmUgTVg1M19BU1JDX0JBU0VfQUREUgkJKE1YNTNfU1BCQTBfQkFTRV9BRERSICsgMHgwMDAyQzAwMCkKKyNkZWZpbmUgTVg1M19BVEFfRE1BX0JBU0VfQUREUgkoTVg1M19TUEJBMF9CQVNFX0FERFIgKyAweDAwMDMwMDAwKQorI2RlZmluZSBNWDUzX1NMSU1fRE1BX0JBU0VfQUREUgkoTVg1M19TUEJBMF9CQVNFX0FERFIgKyAweDAwMDM0MDAwKQorI2RlZmluZSBNWDUzX0hTSTJDX0RNQV9CQVNFX0FERFIJKE1YNTNfU1BCQTBfQkFTRV9BRERSICsgMHgwMDAzODAwMCkKKyNkZWZpbmUgTVg1M19TUEJBX0NUUkxfQkFTRV9BRERSCShNWDUzX1NQQkEwX0JBU0VfQUREUiArIDB4MDAwM0MwMDApCisKKy8qCisgKiBBSVBTIDEKKyAqLworI2RlZmluZSBNWDUzX0FJUFMxX0JBU0VfQUREUgkweDUzRjAwMDAwCisjZGVmaW5lIE1YNTNfQUlQUzFfU0laRQkJU1pfMU0KKworI2RlZmluZSBNWDUzX09UR19CQVNFX0FERFIJKE1YNTNfQUlQUzFfQkFTRV9BRERSICsgMHgwMDA4MDAwMCkKKyNkZWZpbmUgTVg1M19HUElPMV9CQVNFX0FERFIJKE1YNTNfQUlQUzFfQkFTRV9BRERSICsgMHgwMDA4NDAwMCkKKyNkZWZpbmUgTVg1M19HUElPMl9CQVNFX0FERFIJKE1YNTNfQUlQUzFfQkFTRV9BRERSICsgMHgwMDA4ODAwMCkKKyNkZWZpbmUgTVg1M19HUElPM19CQVNFX0FERFIJKE1YNTNfQUlQUzFfQkFTRV9BRERSICsgMHgwMDA4QzAwMCkKKyNkZWZpbmUgTVg1M19HUElPNF9CQVNFX0FERFIJKE1YNTNfQUlQUzFfQkFTRV9BRERSICsgMHgwMDA5MDAwMCkKKyNkZWZpbmUgTVg1M19LUFBfQkFTRV9BRERSCShNWDUzX0FJUFMxX0JBU0VfQUREUiArIDB4MDAwOTQwMDApCisjZGVmaW5lIE1YNTNfV0RPR19CQVNFX0FERFIJKE1YNTNfQUlQUzFfQkFTRV9BRERSICsgMHgwMDA5ODAwMCkKKyNkZWZpbmUgTVg1M19XRE9HMl9CQVNFX0FERFIJKE1YNTNfQUlQUzFfQkFTRV9BRERSICsgMHgwMDA5QzAwMCkKKyNkZWZpbmUgTVg1M19HUFQxX0JBU0VfQUREUgkoTVg1M19BSVBTMV9CQVNFX0FERFIgKyAweDAwMEEwMDAwKQorI2RlZmluZSBNWDUzX1NSVENfQkFTRV9BRERSCShNWDUzX0FJUFMxX0JBU0VfQUREUiArIDB4MDAwQTQwMDApCisjZGVmaW5lIE1YNTNfSU9NVVhDX0JBU0VfQUREUgkoTVg1M19BSVBTMV9CQVNFX0FERFIgKyAweDAwMEE4MDAwKQorI2RlZmluZSBNWDUzX0VQSVQxX0JBU0VfQUREUgkoTVg1M19BSVBTMV9CQVNFX0FERFIgKyAweDAwMEFDMDAwKQorI2RlZmluZSBNWDUzX0VQSVQyX0JBU0VfQUREUgkoTVg1M19BSVBTMV9CQVNFX0FERFIgKyAweDAwMEIwMDAwKQorI2RlZmluZSBNWDUzX1BXTTFfQkFTRV9BRERSCShNWDUzX0FJUFMxX0JBU0VfQUREUiArIDB4MDAwQjQwMDApCisjZGVmaW5lIE1YNTNfUFdNMl9CQVNFX0FERFIJKE1YNTNfQUlQUzFfQkFTRV9BRERSICsgMHgwMDBCODAwMCkKKyNkZWZpbmUgTVg1M19VQVJUMV9CQVNFX0FERFIJKE1YNTNfQUlQUzFfQkFTRV9BRERSICsgMHgwMDBCQzAwMCkKKyNkZWZpbmUgTVg1M19VQVJUMl9CQVNFX0FERFIJKE1YNTNfQUlQUzFfQkFTRV9BRERSICsgMHgwMDBDMDAwMCkKKyNkZWZpbmUgTVg1M19TUkNfQkFTRV9BRERSCShNWDUzX0FJUFMxX0JBU0VfQUREUiArIDB4MDAwRDAwMDApCisjZGVmaW5lIE1YNTNfQ0NNX0JBU0VfQUREUgkoTVg1M19BSVBTMV9CQVNFX0FERFIgKyAweDAwMEQ0MDAwKQorI2RlZmluZSBNWDUzX0dQQ19CQVNFX0FERFIJKE1YNTNfQUlQUzFfQkFTRV9BRERSICsgMHgwMDBEODAwMCkKKyNkZWZpbmUgTVg1M19HUElPNV9CQVNFX0FERFIJKE1YNTNfQUlQUzFfQkFTRV9BRERSICsgMHgwMDBEQzAwMCkKKyNkZWZpbmUgTVg1M19HUElPNl9CQVNFX0FERFIJKE1YNTNfQUlQUzFfQkFTRV9BRERSICsgMHgwMDBFMDAwMCkKKyNkZWZpbmUgTVg1M19HUElPN19CQVNFX0FERFIJKE1YNTNfQUlQUzFfQkFTRV9BRERSICsgMHgwMDBFNDAwMCkKKyNkZWZpbmUgTVg1M19BVEFfQkFTRV9BRERSCShNWDUzX0FJUFMxX0JBU0VfQUREUiArIDB4MDAwRTgwMDApCisjZGVmaW5lIE1YNTNfSTJDM19CQVNFX0FERFIJKE1YNTNfQUlQUzFfQkFTRV9BRERSICsgMHgwMDBFQzAwMCkKKyNkZWZpbmUgTVg1M19VQVJUNF9CQVNFX0FERFIJKE1YNTNfQUlQUzFfQkFTRV9BRERSICsgMHgwMDBGMDAwMCkKKworLyoKKyAqIEFJUFMgMgorICovCisjZGVmaW5lIE1YNTNfQUlQUzJfQkFTRV9BRERSCQkweDYzRjAwMDAwCisjZGVmaW5lIE1YNTNfQUlQUzJfU0laRQkJCVNaXzFNCisKKyNkZWZpbmUgTVg1M19QTEwxX0JBU0VfQUREUgkoTVg1M19BSVBTMl9CQVNFX0FERFIgKyAweDAwMDgwMDAwKQorI2RlZmluZSBNWDUzX1BMTDJfQkFTRV9BRERSCShNWDUzX0FJUFMyX0JBU0VfQUREUiArIDB4MDAwODQwMDApCisjZGVmaW5lIE1YNTNfUExMM19CQVNFX0FERFIJKE1YNTNfQUlQUzJfQkFTRV9BRERSICsgMHgwMDA4ODAwMCkKKyNkZWZpbmUgTVg1M19QTEw0X0JBU0VfQUREUgkoTVg1M19BSVBTMl9CQVNFX0FERFIgKyAweDAwMDhDMDAwKQorI2RlZmluZSBNWDUzX1VBUlQ1X0JBU0VfQUREUgkoTVg1M19BSVBTMl9CQVNFX0FERFIgKyAweDAwMDkwMDAwKQorI2RlZmluZSBNWDUzX0FIQk1BWF9CQVNFX0FERFIJKE1YNTNfQUlQUzJfQkFTRV9BRERSICsgMHgwMDA5NDAwMCkKKyNkZWZpbmUgTVg1M19JSU1fQkFTRV9BRERSCShNWDUzX0FJUFMyX0JBU0VfQUREUiArIDB4MDAwOTgwMDApCisjZGVmaW5lIE1YNTNfQ1NVX0JBU0VfQUREUgkoTVg1M19BSVBTMl9CQVNFX0FERFIgKyAweDAwMDlDMDAwKQorI2RlZmluZSBNWDUzX0FSTV9CQVNFX0FERFIJKE1YNTNfQUlQUzJfQkFTRV9BRERSICsgMHgwMDBBMDAwMCkKKyNkZWZpbmUgTVg1M19PV0lSRV9CQVNFX0FERFIJKE1YNTNfQUlQUzJfQkFTRV9BRERSICsgMHgwMDBBNDAwMCkKKyNkZWZpbmUgTVg1M19GSVJJX0JBU0VfQUREUgkoTVg1M19BSVBTMl9CQVNFX0FERFIgKyAweDAwMEE4MDAwKQorI2RlZmluZSBNWDUzX0NTUEkyX0JBU0VfQUREUgkoTVg1M19BSVBTMl9CQVNFX0FERFIgKyAweDAwMEFDMDAwKQorI2RlZmluZSBNWDUzX1NETUFfQkFTRV9BRERSCShNWDUzX0FJUFMyX0JBU0VfQUREUiArIDB4MDAwQjAwMDApCisjZGVmaW5lIE1YNTNfU0NDX0JBU0VfQUREUgkoTVg1M19BSVBTMl9CQVNFX0FERFIgKyAweDAwMEI0MDAwKQorI2RlZmluZSBNWDUzX1JPTUNQX0JBU0VfQUREUgkoTVg1M19BSVBTMl9CQVNFX0FERFIgKyAweDAwMEI4MDAwKQorI2RlZmluZSBNWDUzX1JUSUNfQkFTRV9BRERSCShNWDUzX0FJUFMyX0JBU0VfQUREUiArIDB4MDAwQkMwMDApCisjZGVmaW5lIE1YNTNfQ1NQSTNfQkFTRV9BRERSCShNWDUzX0FJUFMyX0JBU0VfQUREUiArIDB4MDAwQzAwMDApCisjZGVmaW5lIE1YNTNfSTJDMl9CQVNFX0FERFIJKE1YNTNfQUlQUzJfQkFTRV9BRERSICsgMHgwMDBDNDAwMCkKKyNkZWZpbmUgTVg1M19JMkMxX0JBU0VfQUREUgkoTVg1M19BSVBTMl9CQVNFX0FERFIgKyAweDAwMEM4MDAwKQorI2RlZmluZSBNWDUzX1NTSTFfQkFTRV9BRERSCShNWDUzX0FJUFMyX0JBU0VfQUREUiArIDB4MDAwQ0MwMDApCisjZGVmaW5lIE1YNTNfQVVETVVYX0JBU0VfQUREUgkoTVg1M19BSVBTMl9CQVNFX0FERFIgKyAweDAwMEQwMDAwKQorI2RlZmluZSBNWDUzX1JUQ19CQVNFX0FERFIJKE1YNTNfQUlQUzJfQkFTRV9BRERSICsgMHgwMDBENDAwMCkKKyNkZWZpbmUgTVg1M19NNElGX0JBU0VfQUREUgkoTVg1M19BSVBTMl9CQVNFX0FERFIgKyAweDAwMEQ4MDAwKQorI2RlZmluZSBNWDUzX0VTRENUTF9CQVNFX0FERFIJKE1YNTNfQUlQUzJfQkFTRV9BRERSICsgMHgwMDBEOTAwMCkKKyNkZWZpbmUgTVg1M19XRUlNX0JBU0VfQUREUgkoTVg1M19BSVBTMl9CQVNFX0FERFIgKyAweDAwMERBMDAwKQorI2RlZmluZSBNWDUzX05GQ19CQVNFX0FERFIJKE1YNTNfQUlQUzJfQkFTRV9BRERSICsgMHgwMDBEQjAwMCkKKyNkZWZpbmUgTVg1M19FTUlfQkFTRV9BRERSCShNWDUzX0FJUFMyX0JBU0VfQUREUiArIDB4MDAwREJGMDApCisjZGVmaW5lIE1YNTNfTUlQSV9IU0NfQkFTRV9BRERSCShNWDUzX0FJUFMyX0JBU0VfQUREUiArIDB4MDAwREMwMDApCisjZGVmaW5lIE1YNTNfTUxCX0JBU0VfQUREUgkoTVg1M19BSVBTMl9CQVNFX0FERFIgKyAweDAwMEU0MDAwKQorI2RlZmluZSBNWDUzX1NTSTNfQkFTRV9BRERSCShNWDUzX0FJUFMyX0JBU0VfQUREUiArIDB4MDAwRTgwMDApCisjZGVmaW5lIE1YNTNfTVhDX0ZFQ19CQVNFX0FERFIJKE1YNTNfQUlQUzJfQkFTRV9BRERSICsgMHgwMDBFQzAwMCkKKyNkZWZpbmUgTVg1M19UVkVfQkFTRV9BRERSCShNWDUzX0FJUFMyX0JBU0VfQUREUiArIDB4MDAwRjAwMDApCisjZGVmaW5lIE1YNTNfVlBVX0JBU0VfQUREUgkoTVg1M19BSVBTMl9CQVNFX0FERFIgKyAweDAwMEY0MDAwKQorI2RlZmluZSBNWDUzX1NBSEFSQV9CQVNFX0FERFIJKE1YNTNfQUlQUzJfQkFTRV9BRERSICsgMHgwMDBGODAwMCkKKyNkZWZpbmUgTVg1M19QVFBfQkFTRV9BRERSCShNWDUzX0FJUFMyX0JBU0VfQUREUiArIDB4MDAwRkMwMDApCisKKy8qCisgKiBNZW1vcnkgcmVnaW9ucyBhbmQgQ1MKKyAqLworI2RlZmluZSBNWDUzX0NTRDBfQkFTRV9BRERSCQkweDkwMDAwMDAwCisjZGVmaW5lIE1YNTNfQ1NEMV9CQVNFX0FERFIJCTB4QTAwMDAwMDAKKyNkZWZpbmUgTVg1M19DUzBfQkFTRV9BRERSCQkweEIwMDAwMDAwCisjZGVmaW5lIE1YNTNfQ1MxX0JBU0VfQUREUgkJMHhCODAwMDAwMAorI2RlZmluZSBNWDUzX0NTMl9CQVNFX0FERFIJCTB4QzAwMDAwMDAKKyNkZWZpbmUgTVg1M19DUzNfQkFTRV9BRERSCQkweEM4MDAwMDAwCisjZGVmaW5lIE1YNTNfQ1M0X0JBU0VfQUREUgkJMHhDQzAwMDAwMAorI2RlZmluZSBNWDUzX0NTNV9CQVNFX0FERFIJCTB4Q0UwMDAwMDAKKworI2RlZmluZSBNWDUzX0lPX1AyVih4KQkJCUlNWF9JT19QMlYoeCkKKyNkZWZpbmUgTVg1M19JT19BRERSRVNTKHgpCQlJT01FTShNWDUzX0lPX1AyVih4KSkKKworLyoKKyAqIGRlZmluZXMgZm9yIFNQQkEgbW9kdWxlcworICovCisjZGVmaW5lIE1YNTNfU1BCQV9TREhDMQkweDA0CisjZGVmaW5lIE1YNTNfU1BCQV9TREhDMgkweDA4CisjZGVmaW5lIE1YNTNfU1BCQV9VQVJUMwkweDBDCisjZGVmaW5lIE1YNTNfU1BCQV9DU1BJMQkweDEwCisjZGVmaW5lIE1YNTNfU1BCQV9TU0kyCQkweDE0CisjZGVmaW5lIE1YNTNfU1BCQV9TREhDMwkweDIwCisjZGVmaW5lIE1YNTNfU1BCQV9TREhDNAkweDI0CisjZGVmaW5lIE1YNTNfU1BCQV9TUERJRgkweDI4CisjZGVmaW5lIE1YNTNfU1BCQV9BVEEJCTB4MzAKKyNkZWZpbmUgTVg1M19TUEJBX1NMSU0JCTB4MzQKKyNkZWZpbmUgTVg1M19TUEJBX0hTSTJDCTB4MzgKKyNkZWZpbmUgTVg1M19TUEJBX0NUUkwJCTB4M0MKKworLyoKKyAqIERNQSByZXF1ZXN0IGFzc2lnbm1lbnRzCisgKi8KKyNkZWZpbmUgTVg1M19ETUFfUkVRX1NTSTNfVFgxCQk0NworI2RlZmluZSBNWDUzX0RNQV9SRVFfU1NJM19SWDEJCTQ2CisjZGVmaW5lIE1YNTNfRE1BX1JFUV9TU0kzX1RYMgkJNDUKKyNkZWZpbmUgTVg1M19ETUFfUkVRX1NTSTNfUlgyCQk0NAorI2RlZmluZSBNWDUzX0RNQV9SRVFfVUFSVDNfVFgJNDMKKyNkZWZpbmUgTVg1M19ETUFfUkVRX1VBUlQzX1JYCTQyCisjZGVmaW5lIE1YNTNfRE1BX1JFUV9FU0FJX1RYCQk0MQorI2RlZmluZSBNWDUzX0RNQV9SRVFfRVNBSV9SWAkJNDAKKyNkZWZpbmUgTVg1M19ETUFfUkVRX0NTUElfVFgJCTM5CisjZGVmaW5lIE1YNTNfRE1BX1JFUV9DU1BJX1JYCQkzOAorI2RlZmluZSBNWDUzX0RNQV9SRVFfQVNSQ19ETUE2CTM3CisjZGVmaW5lIE1YNTNfRE1BX1JFUV9BU1JDX0RNQTUJMzYKKyNkZWZpbmUgTVg1M19ETUFfUkVRX0FTUkNfRE1BNAkzNQorI2RlZmluZSBNWDUzX0RNQV9SRVFfQVNSQ19ETUEzCTM0CisjZGVmaW5lIE1YNTNfRE1BX1JFUV9BU1JDX0RNQTIJMzMKKyNkZWZpbmUgTVg1M19ETUFfUkVRX0FTUkNfRE1BMQkzMgorI2RlZmluZSBNWDUzX0RNQV9SRVFfRU1JX1dSCQkzMQorI2RlZmluZSBNWDUzX0RNQV9SRVFfRU1JX1JECQkzMAorI2RlZmluZSBNWDUzX0RNQV9SRVFfU1NJMV9UWDEJCTI5CisjZGVmaW5lIE1YNTNfRE1BX1JFUV9TU0kxX1JYMQkJMjgKKyNkZWZpbmUgTVg1M19ETUFfUkVRX1NTSTFfVFgyCQkyNworI2RlZmluZSBNWDUzX0RNQV9SRVFfU1NJMV9SWDIJCTI2CisjZGVmaW5lIE1YNTNfRE1BX1JFUV9TU0kyX1RYMQkJMjUKKyNkZWZpbmUgTVg1M19ETUFfUkVRX1NTSTJfUlgxCQkyNAorI2RlZmluZSBNWDUzX0RNQV9SRVFfU1NJMl9UWDIJCTIzCisjZGVmaW5lIE1YNTNfRE1BX1JFUV9TU0kyX1JYMgkJMjIKKyNkZWZpbmUgTVg1M19ETUFfUkVRX0kyQzJfU0RIQzIJMjEKKyNkZWZpbmUgTVg1M19ETUFfUkVRX0kyQzFfU0RIQzEJMjAKKyNkZWZpbmUgTVg1M19ETUFfUkVRX1VBUlQxX1RYCTE5CisjZGVmaW5lIE1YNTNfRE1BX1JFUV9VQVJUMV9SWAkxOAorI2RlZmluZSBNWDUzX0RNQV9SRVFfVUFSVDVfVFgJMTcKKyNkZWZpbmUgTVg1M19ETUFfUkVRX1VBUlQ1X1JYCTE2CisjZGVmaW5lIE1YNTNfRE1BX1JFUV9TUERJRl9UWAkJMTUKKyNkZWZpbmUgTVg1M19ETUFfUkVRX1NQRElGX1JYCQkxNAorI2RlZmluZSBNWDUzX0RNQV9SRVFfVUFSVDJfRklSSV9UWAkxMworI2RlZmluZSBNWDUzX0RNQV9SRVFfVUFSVDJfRklSSV9SWAkxMgorI2RlZmluZSBNWDUzX0RNQV9SRVFfU0RIQzQJCTExCisjZGVmaW5lIE1YNTNfRE1BX1JFUV9JMkMzX1NESEMzCTEwCisjZGVmaW5lIE1YNTNfRE1BX1JFUV9DU1BJMl9UWAkJOQorI2RlZmluZSBNWDUzX0RNQV9SRVFfQ1NQSTJfUlgJCTgKKyNkZWZpbmUgTVg1M19ETUFfUkVRX0NTUEkxX1RYCQk3CisjZGVmaW5lIE1YNTNfRE1BX1JFUV9DU1BJMV9SWAkJNgorI2RlZmluZSBNWDUzX0RNQV9SRVFfSVBVCQk1CisjZGVmaW5lIE1YNTNfRE1BX1JFUV9BVEFfVFhfRU5ECTQKKyNkZWZpbmUgTVg1M19ETUFfUkVRX0FUQV9VQVJUNF9UWAkzCisjZGVmaW5lIE1YNTNfRE1BX1JFUV9BVEFfVUFSVDRfUlgJMgorI2RlZmluZSBNWDUzX0RNQV9SRVFfR1BDCQkxCisjZGVmaW5lIE1YNTNfRE1BX1JFUV9WUFUJCTAKKworLyoKKyAqIEludGVycnVwdCBudW1iZXJzCisgKi8KKyNkZWZpbmUgTVg1M19JTlRfUkVTVjAJCTAKKyNkZWZpbmUgTVg1M19JTlRfTU1DX1NESEMxCTEKKyNkZWZpbmUgTVg1M19JTlRfTU1DX1NESEMyCTIKKyNkZWZpbmUgTVg1M19JTlRfTU1DX1NESEMzCTMKKyNkZWZpbmUgTVg1M19JTlRfTU1DX1NESEM0CTQKKyNkZWZpbmUgTVg1M19JTlRfUkVTVjUJNQorI2RlZmluZSBNWDUzX0lOVF9TRE1BCTYKKyNkZWZpbmUgTVg1M19JTlRfSU9NVVgJNworI2RlZmluZSBNWDUzX0lOVF9ORkMJOAorI2RlZmluZSBNWDUzX0lOVF9WUFUJOQorI2RlZmluZSBNWDUzX0lOVF9JUFVfRVJSCTEwCisjZGVmaW5lIE1YNTNfSU5UX0lQVV9TWU4JMTEKKyNkZWZpbmUgTVg1M19JTlRfR1BVCTEyCisjZGVmaW5lIE1YNTNfSU5UX1JFU1YxMwkxMworI2RlZmluZSBNWDUzX0lOVF9VU0JfSDEJMTQKKyNkZWZpbmUgTVg1M19JTlRfRU1JCTE1CisjZGVmaW5lIE1YNTNfSU5UX1VTQl9IMgkxNgorI2RlZmluZSBNWDUzX0lOVF9VU0JfSDMJMTcKKyNkZWZpbmUgTVg1M19JTlRfVVNCX09URwkxOAorI2RlZmluZSBNWDUzX0lOVF9TQUhBUkFfSDAJMTkKKyNkZWZpbmUgTVg1M19JTlRfU0FIQVJBX0gxCTIwCisjZGVmaW5lIE1YNTNfSU5UX1NDQ19TTU4JMjEKKyNkZWZpbmUgTVg1M19JTlRfU0NDX1NUWgkyMgorI2RlZmluZSBNWDUzX0lOVF9TQ0NfU0NNCTIzCisjZGVmaW5lIE1YNTNfSU5UX1NSVENfTlRaCTI0CisjZGVmaW5lIE1YNTNfSU5UX1NSVENfVFoJMjUKKyNkZWZpbmUgTVg1M19JTlRfUlRJQwkyNgorI2RlZmluZSBNWDUzX0lOVF9DU1UJMjcKKyNkZWZpbmUgTVg1M19JTlRfU0FUQQkyOAorI2RlZmluZSBNWDUzX0lOVF9TU0kxCTI5CisjZGVmaW5lIE1YNTNfSU5UX1NTSTIJMzAKKyNkZWZpbmUgTVg1M19JTlRfVUFSVDEJMzEKKyNkZWZpbmUgTVg1M19JTlRfVUFSVDIJMzIKKyNkZWZpbmUgTVg1M19JTlRfVUFSVDMJMzMKKyNkZWZpbmUgTVg1M19JTlRfUkVTVjM0CTM0CisjZGVmaW5lIE1YNTNfSU5UX1JFU1YzNQkzNQorI2RlZmluZSBNWDUzX0lOVF9DU1BJMQkzNgorI2RlZmluZSBNWDUzX0lOVF9DU1BJMgkzNworI2RlZmluZSBNWDUzX0lOVF9DU1BJCTM4CisjZGVmaW5lIE1YNTNfSU5UX0dQVAkzOQorI2RlZmluZSBNWDUzX0lOVF9FUElUMQk0MAorI2RlZmluZSBNWDUzX0lOVF9FUElUMgk0MQorI2RlZmluZSBNWDUzX0lOVF9HUElPMV9JTlQ3CTQyCisjZGVmaW5lIE1YNTNfSU5UX0dQSU8xX0lOVDYJNDMKKyNkZWZpbmUgTVg1M19JTlRfR1BJTzFfSU5UNQk0NAorI2RlZmluZSBNWDUzX0lOVF9HUElPMV9JTlQ0CTQ1CisjZGVmaW5lIE1YNTNfSU5UX0dQSU8xX0lOVDMJNDYKKyNkZWZpbmUgTVg1M19JTlRfR1BJTzFfSU5UMgk0NworI2RlZmluZSBNWDUzX0lOVF9HUElPMV9JTlQxCTQ4CisjZGVmaW5lIE1YNTNfSU5UX0dQSU8xX0lOVDAJNDkKKyNkZWZpbmUgTVg1M19JTlRfR1BJTzFfTE9XCTUwCisjZGVmaW5lIE1YNTNfSU5UX0dQSU8xX0hJR0gJNTEKKyNkZWZpbmUgTVg1M19JTlRfR1BJTzJfTE9XCTUyCisjZGVmaW5lIE1YNTNfSU5UX0dQSU8yX0hJR0gJNTMKKyNkZWZpbmUgTVg1M19JTlRfR1BJTzNfTE9XCTU0CisjZGVmaW5lIE1YNTNfSU5UX0dQSU8zX0hJR0gJNTUKKyNkZWZpbmUgTVg1M19JTlRfR1BJTzRfTE9XCTU2CisjZGVmaW5lIE1YNTNfSU5UX0dQSU80X0hJR0gJNTcKKyNkZWZpbmUgTVg1M19JTlRfV0RPRzEJNTgKKyNkZWZpbmUgTVg1M19JTlRfV0RPRzIJNTkKKyNkZWZpbmUgTVg1M19JTlRfS1BQCTYwCisjZGVmaW5lIE1YNTNfSU5UX1BXTTEJNjEKKyNkZWZpbmUgTVg1M19JTlRfSTJDMQk2MgorI2RlZmluZSBNWDUzX0lOVF9JMkMyCTYzCisjZGVmaW5lIE1YNTNfSU5UX0kyQzMJNjQKKyNkZWZpbmUgTVg1M19JTlRfUkVTVjY1CTY1CisjZGVmaW5lIE1YNTNfSU5UX1JFU1Y2Ngk2NgorI2RlZmluZSBNWDUzX0lOVF9TUERJRgk2NworI2RlZmluZSBNWDUzX0lOVF9TSU1fREFUCTY4CisjZGVmaW5lIE1YNTNfSU5UX0lJTQk2OQorI2RlZmluZSBNWDUzX0lOVF9BVEEJNzAKKyNkZWZpbmUgTVg1M19JTlRfQ0NNMQk3MQorI2RlZmluZSBNWDUzX0lOVF9DQ00yCTcyCisjZGVmaW5lIE1YNTNfSU5UX0dQQzEJNzMKKyNkZWZpbmUgTVg1M19JTlRfR1BDMgk3NAorI2RlZmluZSBNWDUzX0lOVF9TUkMJNzUKKyNkZWZpbmUgTVg1M19JTlRfTk0JCTc2CisjZGVmaW5lIE1YNTNfSU5UX1BNVQk3NworI2RlZmluZSBNWDUzX0lOVF9DVElfSVJRCTc4CisjZGVmaW5lIE1YNTNfSU5UX0NUSTFfVEcwCTc5CisjZGVmaW5lIE1YNTNfSU5UX0NUSTFfVEcxCTgwCisjZGVmaW5lIE1YNTNfSU5UX0VTQUkJODEKKyNkZWZpbmUgTVg1M19JTlRfQ0FOMQk4MgorI2RlZmluZSBNWDUzX0lOVF9DQU4yCTgzCisjZGVmaW5lIE1YNTNfSU5UX0dQVTJfSVJRCTg0CisjZGVmaW5lIE1YNTNfSU5UX0dQVTJfQlVTWQk4NQorI2RlZmluZSBNWDUzX0lOVF9SRVNWODYJODYKKyNkZWZpbmUgTVg1M19JTlRfRkVDCTg3CisjZGVmaW5lIE1YNTNfSU5UX09XSVJFCTg4CisjZGVmaW5lIE1YNTNfSU5UX0NUSTFfVEcyCTg5CisjZGVmaW5lIE1YNTNfSU5UX1NKQwk5MAorI2RlZmluZSBNWDUzX0lOVF9UVkUJOTIKKyNkZWZpbmUgTVg1M19JTlRfRklSSQk5MworI2RlZmluZSBNWDUzX0lOVF9QV00yCTk0CisjZGVmaW5lIE1YNTNfSU5UX1NMSU1fRVhQCTk1CisjZGVmaW5lIE1YNTNfSU5UX1NTSTMJOTYKKyNkZWZpbmUgTVg1M19JTlRfRU1JX0JPT1QJOTcKKyNkZWZpbmUgTVg1M19JTlRfQ1RJMV9URzMJOTgKKyNkZWZpbmUgTVg1M19JTlRfU01DX1JYCTk5CisjZGVmaW5lIE1YNTNfSU5UX1ZQVV9JRExFCTEwMAorI2RlZmluZSBNWDUzX0lOVF9FTUlfTkZDCTEwMQorI2RlZmluZSBNWDUzX0lOVF9HUFVfSURMRQkxMDIKKyNkZWZpbmUgTVg1M19JTlRfR1BJTzVfTE9XCTEwMworI2RlZmluZSBNWDUzX0lOVF9HUElPNV9ISUdICTEwNAorI2RlZmluZSBNWDUzX0lOVF9HUElPNl9MT1cJMTA1CisjZGVmaW5lIE1YNTNfSU5UX0dQSU82X0hJR0gJMTA2CisjZGVmaW5lIE1YNTNfSU5UX0dQSU83X0xPVwkxMDcKKyNkZWZpbmUgTVg1M19JTlRfR1BJTzdfSElHSAkxMDgKKworLyogc2lsaWNvbiByZXZpc2lvbnMgc3BlY2lmaWMgdG8gaS5NWDUzICovCisjZGVmaW5lIE1YNTNfQ0hJUF9SRVZfMV8wCQkweDEwCisjZGVmaW5lIE1YNTNfQ0hJUF9SRVZfMV8xCQkweDExCisjZGVmaW5lIE1YNTNfQ0hJUF9SRVZfMV8yCQkweDEyCisjZGVmaW5lIE1YNTNfQ0hJUF9SRVZfMV8zCQkweDEzCisjZGVmaW5lIE1YNTNfQ0hJUF9SRVZfMl8wCQkweDIwCisjZGVmaW5lIE1YNTNfQ0hJUF9SRVZfMl8xCQkweDIxCisjZGVmaW5lIE1YNTNfQ0hJUF9SRVZfMl8yCQkweDIyCisjZGVmaW5lIE1YNTNfQ0hJUF9SRVZfMl8zCQkweDIzCisjZGVmaW5lIE1YNTNfQ0hJUF9SRVZfM18wCQkweDMwCisjZGVmaW5lIE1YNTNfQ0hJUF9SRVZfM18xCQkweDMxCisjZGVmaW5lIE1YNTNfQ0hJUF9SRVZfM18yCQkweDMyCisKKyNlbmRpZiAvKiBpZm5kZWYgX19NQUNIX01YNTNfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXhjLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXhjLmgKaW5kZXggYTQyYzcyMC4uMDRjN2EyNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214Yy5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teGMuaApAQCAtMzIsOSArMzIsMjUgQEAKICNkZWZpbmUgTVhDX0NQVV9NWDI3CQkyNwogI2RlZmluZSBNWENfQ1BVX01YMzEJCTMxCiAjZGVmaW5lIE1YQ19DUFVfTVgzNQkJMzUKKyNkZWZpbmUgTVhDX0NQVV9NWDUwCQk1MAogI2RlZmluZSBNWENfQ1BVX01YNTEJCTUxCisjZGVmaW5lIE1YQ19DUFVfTVg1MwkJNTMKICNkZWZpbmUgTVhDX0NQVV9NWEM5MTIzMQk5MTIzMQogCisjZGVmaW5lIElNWF9DSElQX1JFVklTSU9OXzFfMAkJMHgxMAorI2RlZmluZSBJTVhfQ0hJUF9SRVZJU0lPTl8xXzEJCTB4MTEKKyNkZWZpbmUgSU1YX0NISVBfUkVWSVNJT05fMV8yCQkweDEyCisjZGVmaW5lIElNWF9DSElQX1JFVklTSU9OXzFfMwkJMHgxMworI2RlZmluZSBJTVhfQ0hJUF9SRVZJU0lPTl8yXzAJCTB4MjAKKyNkZWZpbmUgSU1YX0NISVBfUkVWSVNJT05fMl8xCQkweDIxCisjZGVmaW5lIElNWF9DSElQX1JFVklTSU9OXzJfMgkJMHgyMgorI2RlZmluZSBJTVhfQ0hJUF9SRVZJU0lPTl8yXzMJCTB4MjMKKyNkZWZpbmUgSU1YX0NISVBfUkVWSVNJT05fM18wCQkweDMwCisjZGVmaW5lIElNWF9DSElQX1JFVklTSU9OXzNfMQkJMHgzMQorI2RlZmluZSBJTVhfQ0hJUF9SRVZJU0lPTl8zXzIJCTB4MzIKKyNkZWZpbmUgSU1YX0NISVBfUkVWSVNJT05fM18zCQkweDMzCisjZGVmaW5lIElNWF9DSElQX1JFVklTSU9OX1VOS05PV04JMHhmZgorCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogZXh0ZXJuIHVuc2lnbmVkIGludCBfX214Y19jcHVfdHlwZTsKICNlbmRpZgpAQCAtMTExLDcgKzEyNywxOSBAQAogIyBkZWZpbmUgY3B1X2lzX214MzUoKQkJKDApCiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19BUkNIX01YNQorI2lmZGVmIENPTkZJR19BUkNIX01YNTAKKyMgaWZkZWYgbXhjX2NwdV90eXBlCisjICB1bmRlZiBteGNfY3B1X3R5cGUKKyMgIGRlZmluZSBteGNfY3B1X3R5cGUgX19teGNfY3B1X3R5cGUKKyMgZWxzZQorIyAgZGVmaW5lIG14Y19jcHVfdHlwZSBNWENfQ1BVX01YNTAKKyMgZW5kaWYKKyMgZGVmaW5lIGNwdV9pc19teDUwKCkJCShteGNfY3B1X3R5cGUgPT0gTVhDX0NQVV9NWDUwKQorI2Vsc2UKKyMgZGVmaW5lIGNwdV9pc19teDUwKCkJCSgwKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQVJDSF9NWDUxCiAjIGlmZGVmIG14Y19jcHVfdHlwZQogIyAgdW5kZWYgbXhjX2NwdV90eXBlCiAjICBkZWZpbmUgbXhjX2NwdV90eXBlIF9fbXhjX2NwdV90eXBlCkBAIC0xMjMsNiArMTUxLDE4IEBACiAjIGRlZmluZSBjcHVfaXNfbXg1MSgpCQkoMCkKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0FSQ0hfTVg1MworIyBpZmRlZiBteGNfY3B1X3R5cGUKKyMgIHVuZGVmIG14Y19jcHVfdHlwZQorIyAgZGVmaW5lIG14Y19jcHVfdHlwZSBfX214Y19jcHVfdHlwZQorIyBlbHNlCisjICBkZWZpbmUgbXhjX2NwdV90eXBlIE1YQ19DUFVfTVg1MworIyBlbmRpZgorIyBkZWZpbmUgY3B1X2lzX214NTMoKQkJKG14Y19jcHVfdHlwZSA9PSBNWENfQ1BVX01YNTMpCisjZWxzZQorIyBkZWZpbmUgY3B1X2lzX214NTMoKQkJKDApCisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19BUkNIX01YQzkxMjMxCiAjIGlmZGVmIG14Y19jcHVfdHlwZQogIyAgdW5kZWYgbXhjX2NwdV90eXBlCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXhjOTEyMzEuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teGM5MTIzMS5oCmluZGV4IDBjYTMxMDEuLjc2NTE5MGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teGM5MTIzMS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teGM5MTIzMS5oCkBAIC0yMSwxNCArMjEsMTIgQEAKICAqIEwyQ0MKICAqLwogI2RlZmluZSBNWEM5MTIzMV9MMkNDX0JBU0VfQUREUgkJMHgzMDAwMDAwMAotI2RlZmluZSBNWEM5MTIzMV9MMkNDX0JBU0VfQUREUl9WSVJUCTB4RjkwMDAwMDAKICNkZWZpbmUgTVhDOTEyMzFfTDJDQ19TSVpFCQlTWl82NEsKIAogLyoKICAqIEFJUFMgMQogICovCiAjZGVmaW5lIE1YQzkxMjMxX0FJUFMxX0JBU0VfQUREUgkweDQzRjAwMDAwCi0jZGVmaW5lIE1YQzkxMjMxX0FJUFMxX0JBU0VfQUREUl9WSVJUCTB4RkMwMDAwMDAKICNkZWZpbmUgTVhDOTEyMzFfQUlQUzFfU0laRQkJU1pfMU0KIAogI2RlZmluZSBNWEM5MTIzMV9BSVBTMV9DVFJMX0JBU0VfQUREUglNWEM5MTIzMV9BSVBTMV9CQVNFX0FERFIKQEAgLTUzLDcgKzUxLDYgQEAKICAqIEFJUFMgMgogICovCiAjZGVmaW5lIE1YQzkxMjMxX0FJUFMyX0JBU0VfQUREUgkweDUzRjAwMDAwCi0jZGVmaW5lIE1YQzkxMjMxX0FJUFMyX0JBU0VfQUREUl9WSVJUCTB4RkMxMDAwMDAKICNkZWZpbmUgTVhDOTEyMzFfQUlQUzJfU0laRQkJU1pfMU0KIAogI2RlZmluZSBNWEM5MTIzMV9HRU1LX0JBU0VfQUREUgkJKE1YQzkxMjMxX0FJUFMyX0JBU0VfQUREUiArIDB4OEMwMDApCkBAIC03OSw3ICs3Niw2IEBACiAgKiBTUEJBIGdsb2JhbCBtb2R1bGUgMAogICovCiAjZGVmaW5lIE1YQzkxMjMxX1NQQkEwX0JBU0VfQUREUgkweDUwMDAwMDAwCi0jZGVmaW5lIE1YQzkxMjMxX1NQQkEwX0JBU0VfQUREUl9WSVJUCTB4RkMyMDAwMDAKICNkZWZpbmUgTVhDOTEyMzFfU1BCQTBfU0laRQkJU1pfMU0KIAogI2RlZmluZSBNWEM5MTIzMV9NTUNfU0RIQzFfQkFTRV9BRERSCShNWEM5MTIzMV9TUEJBMF9CQVNFX0FERFIgKyAweDA0MDAwKQpAQCAtMTA5LDcgKzEwNSw2IEBACiAgKiBTUEJBIGdsb2JhbCBtb2R1bGUgMQogICovCiAjZGVmaW5lIE1YQzkxMjMxX1NQQkExX0JBU0VfQUREUgkweDUyMDAwMDAwCi0jZGVmaW5lIE1YQzkxMjMxX1NQQkExX0JBU0VfQUREUl9WSVJUCTB4RkMzMDAwMDAKICNkZWZpbmUgTVhDOTEyMzFfU1BCQTFfU0laRQkJU1pfMU0KIAogI2RlZmluZSBNWEM5MTIzMV9NUVNQSV9CQVNFX0FERFIJKE1YQzkxMjMxX1NQQkExX0JBU0VfQUREUiArIDB4MzQwMDApCkBAIC0xNDQsMTggKzEzOSwxNSBAQAogICogUk9NUCBhbmQgQVZJQwogICovCiAjZGVmaW5lIE1YQzkxMjMxX1JPTVBfQkFTRV9BRERSCQkweDYwMDAwMDAwCi0jZGVmaW5lIE1YQzkxMjMxX1JPTVBfQkFTRV9BRERSX1ZJUlQJMHhGQzQwMDAwMAogI2RlZmluZSBNWEM5MTIzMV9ST01QX1NJWkUJCVNaXzY0SwogCiAjZGVmaW5lIE1YQzkxMjMxX0FWSUNfQkFTRV9BRERSCQkweDY4MDAwMDAwCi0jZGVmaW5lIE1YQzkxMjMxX0FWSUNfQkFTRV9BRERSX1ZJUlQJMHhGQzQxMDAwMAogI2RlZmluZSBNWEM5MTIzMV9BVklDX1NJWkUJCVNaXzY0SwogCiAvKgogICogTkFORCwgU0RSQU0sIFdFSU0sIE0zSUYsIEVNSSBjb250cm9sbGVycwogICovCiAjZGVmaW5lIE1YQzkxMjMxX1hfTUVNQ19CQVNFX0FERFIJMHhCODAwMDAwMAotI2RlZmluZSBNWEM5MTIzMV9YX01FTUNfQkFTRV9BRERSX1ZJUlQJMHhGQzQyMDAwMAogI2RlZmluZSBNWEM5MTIzMV9YX01FTUNfU0laRQkJU1pfNjRLCiAKICNkZWZpbmUgTVhDOTEyMzFfTkZDX0JBU0VfQUREUgkJKE1YQzkxMjMxX1hfTUVNQ19CQVNFX0FERFIgKyAweDAwMDApCkBAIC0xODMsMTkgKzE3NSwxMCBAQAogLyoKICAqIFRoaXMgbWFjcm8gZGVmaW5lcyB0aGUgcGh5c2ljYWwgdG8gdmlydHVhbCBhZGRyZXNzIG1hcHBpbmcgZm9yIGFsbCB0aGUKICAqIHBlcmlwaGVyYWwgbW9kdWxlcy4gSXQgaXMgdXNlZCBieSBwYXNzaW5nIGluIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGFzIHgKLSAqIGFuZCByZXR1cm5pbmcgdGhlIHZpcnR1YWwgYWRkcmVzcy4gSWYgdGhlIHBoeXNpY2FsIGFkZHJlc3MgaXMgbm90IG1hcHBlZCwKLSAqIGl0IHJldHVybnMgMC4KKyAqIGFuZCByZXR1cm5pbmcgdGhlIHZpcnR1YWwgYWRkcmVzcy4KICAqLwotCi0jZGVmaW5lIE1YQzkxMjMxX0lPX0FERFJFU1MoeCkgKAkJCQkJXAotCUlNWF9JT19BRERSRVNTKHgsIE1YQzkxMjMxX0wyQ0MpID86CQkJCVwKLQlJTVhfSU9fQUREUkVTUyh4LCBNWEM5MTIzMV9YX01FTUMpID86CQkJCVwKLQlJTVhfSU9fQUREUkVTUyh4LCBNWEM5MTIzMV9ST01QKSA/OgkJCQlcCi0JSU1YX0lPX0FERFJFU1MoeCwgTVhDOTEyMzFfQVZJQykgPzoJCQkJXAotCUlNWF9JT19BRERSRVNTKHgsIE1YQzkxMjMxX0FJUFMxKSA/OgkJCQlcCi0JSU1YX0lPX0FERFJFU1MoeCwgTVhDOTEyMzFfU1BCQTApID86CQkJCVwKLQlJTVhfSU9fQUREUkVTUyh4LCBNWEM5MTIzMV9TUEJBMSkgPzoJCQkJXAotCUlNWF9JT19BRERSRVNTKHgsIE1YQzkxMjMxX0FJUFMyKSkKKyNkZWZpbmUgTVhDOTEyMzFfSU9fUDJWKHgpCQlJTVhfSU9fUDJWKHgpCisjZGVmaW5lIE1YQzkxMjMxX0lPX0FERFJFU1MoeCkJCUlPTUVNKE1YQzkxMjMxX0lPX1AyVih4KSkKIAogLyoKICAqIEludGVycnVwdCBudW1iZXJzCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXhjX2VoY2kuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teGNfZWhjaS5oCmluZGV4IDdmYzVmOTkuLmE1MjNhNDAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teGNfZWhjaS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teGNfZWhjaS5oCkBAIC0zMSw2ICszMSw3IEBACiAjZGVmaW5lIE1YQ19VU0JDVFJMX09GRlNFVAkJMAogI2RlZmluZSBNWENfVVNCX1BIWV9DVFJfRlVOQ19PRkZTRVQJMHg4CiAjZGVmaW5lIE1YQ19VU0JfUEhZX0NUUl9GVU5DMl9PRkZTRVQJMHhjCisjZGVmaW5lIE1YQ19VU0JIMkNUUkxfT0ZGU0VUCQkweDE0CiAKICNkZWZpbmUgTVg1X1VTQk9USEVSX1JFR1NfT0ZGU0VUCTB4ODAwCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9zZG1hLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvc2RtYS5oCmluZGV4IDliZTExMjIuLjkxM2UwNDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9zZG1hLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL3NkbWEuaApAQCAtMiwxNiArMiw2MiBAQAogI2RlZmluZSBfX01BQ0hfTVhDX1NETUFfSF9fCiAKIC8qKgorICogc3RydWN0IHNkbWFfc2NyaXB0X3N0YXJ0X2FkZHJzIC0gU0RNQSBzY3JpcHQgc3RhcnQgcG9pbnRlcnMKKyAqCisgKiBzdGFydCBhZGRyZXNzZXMgb2YgdGhlIGRpZmZlcmVudCBmdW5jdGlvbnMgaW4gdGhlIHBoeXNpY2FsCisgKiBhZGRyZXNzIHNwYWNlIG9mIHRoZSBTRE1BIGVuZ2luZS4KKyAqLworc3RydWN0IHNkbWFfc2NyaXB0X3N0YXJ0X2FkZHJzIHsKKwlzMzIgYXBfMl9hcF9hZGRyOworCXMzMiBhcF8yX2JwX2FkZHI7CisJczMyIGFwXzJfYXBfZml4ZWRfYWRkcjsKKwlzMzIgYnBfMl9hcF9hZGRyOworCXMzMiBsb29wYmFja19vbl9kc3Bfc2lkZV9hZGRyOworCXMzMiBtY3VfaW50ZXJydXB0X29ubHlfYWRkcjsKKwlzMzIgZmlyaV8yX3Blcl9hZGRyOworCXMzMiBmaXJpXzJfbWN1X2FkZHI7CisJczMyIHBlcl8yX2ZpcmlfYWRkcjsKKwlzMzIgbWN1XzJfZmlyaV9hZGRyOworCXMzMiB1YXJ0XzJfcGVyX2FkZHI7CisJczMyIHVhcnRfMl9tY3VfYWRkcjsKKwlzMzIgcGVyXzJfYXBwX2FkZHI7CisJczMyIG1jdV8yX2FwcF9hZGRyOworCXMzMiBwZXJfMl9wZXJfYWRkcjsKKwlzMzIgdWFydHNoXzJfcGVyX2FkZHI7CisJczMyIHVhcnRzaF8yX21jdV9hZGRyOworCXMzMiBwZXJfMl9zaHBfYWRkcjsKKwlzMzIgbWN1XzJfc2hwX2FkZHI7CisJczMyIGF0YV8yX21jdV9hZGRyOworCXMzMiBtY3VfMl9hdGFfYWRkcjsKKwlzMzIgYXBwXzJfcGVyX2FkZHI7CisJczMyIGFwcF8yX21jdV9hZGRyOworCXMzMiBzaHBfMl9wZXJfYWRkcjsKKwlzMzIgc2hwXzJfbWN1X2FkZHI7CisJczMyIG1zaGNfMl9tY3VfYWRkcjsKKwlzMzIgbWN1XzJfbXNoY19hZGRyOworCXMzMiBzcGRpZl8yX21jdV9hZGRyOworCXMzMiBtY3VfMl9zcGRpZl9hZGRyOworCXMzMiBhc3JjXzJfbWN1X2FkZHI7CisJczMyIGV4dF9tZW1fMl9pcHVfYWRkcjsKKwlzMzIgZGVzY3JhbWJsZXJfYWRkcjsKKwlzMzIgZHB0Y19kdmZzX2FkZHI7CisJczMyIHV0cmFfYWRkcjsKKwlzMzIgcmFtX2NvZGVfc3RhcnRfYWRkcjsKK307CisKKy8qKgogICogc3RydWN0IHNkbWFfcGxhdGZvcm1fZGF0YSAtIHBsYXRmb3JtIHNwZWNpZmljIGRhdGEgZm9yIFNETUEgZW5naW5lCiAgKgogICogQHNkbWFfdmVyc2lvbglUaGUgdmVyc2lvbiBvZiB0aGlzIFNETUEgZW5naW5lCiAgKiBAY3B1X25hbWUJCXVzZWQgdG8gZ2VuZXJhdGUgdGhlIGZpcm13YXJlIG5hbWUKICAqIEB0b192ZXJzaW9uCQlDUFUgVGFwZSBvdXQgdmVyc2lvbgorICogQHNjcmlwdF9hZGRycwlTRE1BIHNjcmlwdHMgYWRkcmVzc2VzIGluIFNETUEgUk9NCiAgKi8KIHN0cnVjdCBzZG1hX3BsYXRmb3JtX2RhdGEgewogCWludCBzZG1hX3ZlcnNpb247CiAJY2hhciAqY3B1X25hbWU7CiAJaW50IHRvX3ZlcnNpb247CisJc3RydWN0IHNkbWFfc2NyaXB0X3N0YXJ0X2FkZHJzICpzY3JpcHRfYWRkcnM7CiB9OwogCiAjZW5kaWYgLyogX19NQUNIX01YQ19TRE1BX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKaW5kZXggOWRkOWMyMC4uM2E3MGViZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCkBAIC02Myw2ICs2Myw4IEBACiAjZGVmaW5lIE1YM1hfVUFSVDFfQkFTRV9BRERSCTB4NDNGOTAwMDAKICNkZWZpbmUgTVgzWF9VQVJUMl9CQVNFX0FERFIJMHg0M0Y5NDAwMAogI2RlZmluZSBNWDUxX1VBUlQxX0JBU0VfQUREUgkweDczZmJjMDAwCisjZGVmaW5lIE1YNTBfVUFSVDFfQkFTRV9BRERSCTB4NTNmYmMwMDAKKyNkZWZpbmUgTVg1M19VQVJUMV9CQVNFX0FERFIJMHg1M2ZiYzAwMAogCiBzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fYXJjaF9kZWNvbXBfc2V0dXAodW5zaWduZWQgbG9uZyBhcmNoX2lkKQogewpAQCAtMTAyLDYgKzEwNCwxMiBAQAogCWNhc2UgTUFDSF9UWVBFX0VVS1JFQV9DUFVJTVg1MVNEOgogCQl1YXJ0X2Jhc2UgPSBNWDUxX1VBUlQxX0JBU0VfQUREUjsKIAkJYnJlYWs7CisJY2FzZSBNQUNIX1RZUEVfTVg1MF9SRFA6CisJCXVhcnRfYmFzZSA9IE1YNTBfVUFSVDFfQkFTRV9BRERSOworCQlicmVhazsKKwljYXNlIE1BQ0hfVFlQRV9NWDUzX0VWSzoKKwkJdWFydF9iYXNlID0gTVg1M19VQVJUMV9CQVNFX0FERFI7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2lvbXV4LXYzLmMgYi9hcmNoL2FybS9wbGF0LW14Yy9pb211eC12My5jCmluZGV4IGIzMThjNmEuLjk5YTljZGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2lvbXV4LXYzLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW9tdXgtdjMuYwpAQCAtMzIsMzEgKzMyLDM4IEBACiBzdGF0aWMgdm9pZCBfX2lvbWVtICpiYXNlOwogCiAvKgotICogc2V0dXBzIGEgc2luZ2xlIHBhZCBpbiB0aGUgaW9tdXhlcgorICogY29uZmlndXJlcyBhIHNpbmdsZSBwYWQgaW4gdGhlIGlvbXV4ZXIKICAqLwotaW50IG14Y19pb211eF92M19zZXR1cF9wYWQoc3RydWN0IHBhZF9kZXNjICpwYWQpCitpbnQgbXhjX2lvbXV4X3YzX3NldHVwX3BhZChpb211eF92M19jZmdfdCBwYWQpCiB7Ci0JaWYgKHBhZC0+bXV4X2N0cmxfb2ZzKQotCQlfX3Jhd193cml0ZWwocGFkLT5tdXhfbW9kZSwgYmFzZSArIHBhZC0+bXV4X2N0cmxfb2ZzKTsKKwl1MzIgbXV4X2N0cmxfb2ZzID0gKHBhZCAmIE1VWF9DVFJMX09GU19NQVNLKSA+PiBNVVhfQ1RSTF9PRlNfU0hJRlQ7CisJdTMyIG11eF9tb2RlID0gKHBhZCAmIE1VWF9NT0RFX01BU0spID4+IE1VWF9NT0RFX1NISUZUOworCXUzMiBzZWxfaW5wdXRfb2ZzID0gKHBhZCAmIE1VWF9TRUxfSU5QVVRfT0ZTX01BU0spID4+IE1VWF9TRUxfSU5QVVRfT0ZTX1NISUZUOworCXUzMiBzZWxfaW5wdXQgPSAocGFkICYgTVVYX1NFTF9JTlBVVF9NQVNLKSA+PiBNVVhfU0VMX0lOUFVUX1NISUZUOworCXUzMiBwYWRfY3RybF9vZnMgPSAocGFkICYgTVVYX1BBRF9DVFJMX09GU19NQVNLKSA+PiBNVVhfUEFEX0NUUkxfT0ZTX1NISUZUOworCXUzMiBwYWRfY3RybCA9IChwYWQgJiBNVVhfUEFEX0NUUkxfTUFTSykgPj4gTVVYX1BBRF9DVFJMX1NISUZUOwogCi0JaWYgKHBhZC0+c2VsZWN0X2lucHV0X29mcykKLQkJX19yYXdfd3JpdGVsKHBhZC0+c2VsZWN0X2lucHV0LAotCQkJCWJhc2UgKyBwYWQtPnNlbGVjdF9pbnB1dF9vZnMpOworCWlmIChtdXhfY3RybF9vZnMpCisJCV9fcmF3X3dyaXRlbChtdXhfbW9kZSwgYmFzZSArIG11eF9jdHJsX29mcyk7CiAKLQlpZiAoIShwYWQtPnBhZF9jdHJsICYgTk9fUEFEX0NUUkwpICYmIHBhZC0+cGFkX2N0cmxfb2ZzKQotCQlfX3Jhd193cml0ZWwocGFkLT5wYWRfY3RybCwgYmFzZSArIHBhZC0+cGFkX2N0cmxfb2ZzKTsKKwlpZiAoc2VsX2lucHV0X29mcykKKwkJX19yYXdfd3JpdGVsKHNlbF9pbnB1dCwgYmFzZSArIHNlbF9pbnB1dF9vZnMpOworCisJaWYgKCEocGFkX2N0cmwgJiBOT19QQURfQ1RSTCkgJiYgcGFkX2N0cmxfb2ZzKQorCQlfX3Jhd193cml0ZWwocGFkX2N0cmwsIGJhc2UgKyBwYWRfY3RybF9vZnMpOworCiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKG14Y19pb211eF92M19zZXR1cF9wYWQpOwogCi1pbnQgbXhjX2lvbXV4X3YzX3NldHVwX211bHRpcGxlX3BhZHMoc3RydWN0IHBhZF9kZXNjICpwYWRfbGlzdCwgdW5zaWduZWQgY291bnQpCitpbnQgbXhjX2lvbXV4X3YzX3NldHVwX211bHRpcGxlX3BhZHMoaW9tdXhfdjNfY2ZnX3QgKnBhZF9saXN0LCB1bnNpZ25lZCBjb3VudCkKIHsKLQlzdHJ1Y3QgcGFkX2Rlc2MgKnAgPSBwYWRfbGlzdDsKKwlpb211eF92M19jZmdfdCAqcCA9IHBhZF9saXN0OwogCWludCBpOwogCWludCByZXQ7CiAKIAlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotCQlyZXQgPSBteGNfaW9tdXhfdjNfc2V0dXBfcGFkKHApOworCQlyZXQgPSBteGNfaW9tdXhfdjNfc2V0dXBfcGFkKCpwKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAJCXArKzsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2lycS1jb21tb24uYyBiL2FyY2gvYXJtL3BsYXQtbXhjL2lycS1jb21tb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzc5OWFjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaXJxLWNvbW1vbi5jCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIEJpdEJveCBMdGQgMjAxMAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAorICogTUEgIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisKKyNpbmNsdWRlICJpcnEtY29tbW9uLmgiCisKK2ludCBpbXhfaXJxX3NldF9wcmlvcml0eSh1bnNpZ25lZCBjaGFyIGlycSwgdW5zaWduZWQgY2hhciBwcmlvKQoreworCXN0cnVjdCBteGNfaXJxX2NoaXAgKmNoaXA7CisJc3RydWN0IGlycV9jaGlwICpiYXNlOworCWludCByZXQ7CisKKwlyZXQgPSAtRU5PU1lTOworCisJYmFzZSA9IGdldF9pcnFfY2hpcChpcnEpOworCWlmIChiYXNlKSB7CisJCWNoaXAgPSBjb250YWluZXJfb2YoYmFzZSwgc3RydWN0IG14Y19pcnFfY2hpcCwgYmFzZSk7CisJCWlmIChjaGlwLT5zZXRfcHJpb3JpdHkpCisJCQlyZXQgPSBjaGlwLT5zZXRfcHJpb3JpdHkoaXJxLCBwcmlvKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChpbXhfaXJxX3NldF9wcmlvcml0eSk7CisKK2ludCBteGNfc2V0X2lycV9maXEodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IHR5cGUpCit7CisJc3RydWN0IG14Y19pcnFfY2hpcCAqY2hpcDsKKwlzdHJ1Y3QgaXJxX2NoaXAgKmJhc2U7CisJaW50IHJldDsKKworCXJldCA9IC1FTk9TWVM7CisKKwliYXNlID0gZ2V0X2lycV9jaGlwKGlycSk7CisJaWYgKGJhc2UpIHsKKwkJY2hpcCA9IGNvbnRhaW5lcl9vZihiYXNlLCBzdHJ1Y3QgbXhjX2lycV9jaGlwLCBiYXNlKTsKKwkJaWYgKGNoaXAtPnNldF9pcnFfZmlxKQorCQkJcmV0ID0gY2hpcC0+c2V0X2lycV9maXEoaXJxLCB0eXBlKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChteGNfc2V0X2lycV9maXEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaXJxLWNvbW1vbi5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaXJxLWNvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyMDM1NDMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pcnEtY29tbW9uLmgKQEAgLTAsMCArMSwyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgQml0Qm94IEx0ZCAyMDEwCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sCisgKiBNQSAgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgX19QTEFUX01YQ19JUlFfQ09NTU9OX0hfXworI2RlZmluZSBfX1BMQVRfTVhDX0lSUV9DT01NT05fSF9fCisKK3N0cnVjdCBteGNfaXJxX2NoaXAKK3sKKwlzdHJ1Y3QgaXJxX2NoaXAJYmFzZTsKKwlpbnQgKCpzZXRfcHJpb3JpdHkpKHVuc2lnbmVkIGNoYXIgaXJxLCB1bnNpZ25lZCBjaGFyIHByaW8pOworCWludCAoKnNldF9pcnFfZmlxKSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgdHlwZSk7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2lycS5jIGIvYXJjaC9hcm0vcGxhdC1teGMvaXJxLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczMzFmMmEuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaXJxLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDA0LTIwMDcgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqIENvcHlyaWdodCAyMDA4IEp1ZXJnZW4gQmVpc2VydCwga2VybmVsQHBlbmd1dHJvbml4LmRlCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCi0gKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sCi0gKiBNQSAgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotCi0jZGVmaW5lIEFWSUNfSU5UQ05UTAkJMHgwMAkvKiBpbnQgY29udHJvbCByZWcgKi8KLSNkZWZpbmUgQVZJQ19OSU1BU0sJCTB4MDQJLyogaW50IG1hc2sgcmVnICovCi0jZGVmaW5lIEFWSUNfSU5URU5OVU0JCTB4MDgJLyogaW50IGVuYWJsZSBudW1iZXIgcmVnICovCi0jZGVmaW5lIEFWSUNfSU5URElTTlVNCQkweDBDCS8qIGludCBkaXNhYmxlIG51bWJlciByZWcgKi8KLSNkZWZpbmUgQVZJQ19JTlRFTkFCTEVICQkweDEwCS8qIGludCBlbmFibGUgcmVnIGhpZ2ggKi8KLSNkZWZpbmUgQVZJQ19JTlRFTkFCTEVMCQkweDE0CS8qIGludCBlbmFibGUgcmVnIGxvdyAqLwotI2RlZmluZSBBVklDX0lOVFRZUEVICQkweDE4CS8qIGludCB0eXBlIHJlZyBoaWdoICovCi0jZGVmaW5lIEFWSUNfSU5UVFlQRUwJCTB4MUMJLyogaW50IHR5cGUgcmVnIGxvdyAqLwotI2RlZmluZSBBVklDX05JUFJJT1JJVFkoeCkJKDB4MjAgKyA0ICogKDcgLSAoeCkpKSAvKiBpbnQgcHJpb3JpdHkgKi8KLSNkZWZpbmUgQVZJQ19OSVZFQ1NSCQkweDQwCS8qIG5vcm0gaW50IHZlY3Rvci9zdGF0dXMgKi8KLSNkZWZpbmUgQVZJQ19GSVZFQ1NSCQkweDQ0CS8qIGZhc3QgaW50IHZlY3Rvci9zdGF0dXMgKi8KLSNkZWZpbmUgQVZJQ19JTlRTUkNICQkweDQ4CS8qIGludCBzb3VyY2UgcmVnIGhpZ2ggKi8KLSNkZWZpbmUgQVZJQ19JTlRTUkNMCQkweDRDCS8qIGludCBzb3VyY2UgcmVnIGxvdyAqLwotI2RlZmluZSBBVklDX0lOVEZSQ0gJCTB4NTAJLyogaW50IGZvcmNlIHJlZyBoaWdoICovCi0jZGVmaW5lIEFWSUNfSU5URlJDTAkJMHg1NAkvKiBpbnQgZm9yY2UgcmVnIGxvdyAqLwotI2RlZmluZSBBVklDX05JUE5ESAkJMHg1OAkvKiBub3JtIGludCBwZW5kaW5nIGhpZ2ggKi8KLSNkZWZpbmUgQVZJQ19OSVBOREwJCTB4NUMJLyogbm9ybSBpbnQgcGVuZGluZyBsb3cgKi8KLSNkZWZpbmUgQVZJQ19GSVBOREgJCTB4NjAJLyogZmFzdCBpbnQgcGVuZGluZyBoaWdoICovCi0jZGVmaW5lIEFWSUNfRklQTkRMCQkweDY0CS8qIGZhc3QgaW50IHBlbmRpbmcgbG93ICovCi0KLXZvaWQgX19pb21lbSAqYXZpY19iYXNlOwotCi1pbnQgaW14X2lycV9zZXRfcHJpb3JpdHkodW5zaWduZWQgY2hhciBpcnEsIHVuc2lnbmVkIGNoYXIgcHJpbykKLXsKLSNpZmRlZiBDT05GSUdfTVhDX0lSUV9QUklPUgotCXVuc2lnbmVkIGludCB0ZW1wOwotCXVuc2lnbmVkIGludCBtYXNrID0gMHgwRiA8PCBpcnEgJSA4ICogNDsKLQotCWlmIChpcnEgPj0gTVhDX0lOVEVSTkFMX0lSUVMpCi0JCXJldHVybiAtRUlOVkFMOzsKLQotCXRlbXAgPSBfX3Jhd19yZWFkbChhdmljX2Jhc2UgKyBBVklDX05JUFJJT1JJVFkoaXJxIC8gOCkpOwotCXRlbXAgJj0gfm1hc2s7Ci0JdGVtcCB8PSBwcmlvICYgbWFzazsKLQotCV9fcmF3X3dyaXRlbCh0ZW1wLCBhdmljX2Jhc2UgKyBBVklDX05JUFJJT1JJVFkoaXJxIC8gOCkpOwotCi0JcmV0dXJuIDA7Ci0jZWxzZQotCXJldHVybiAtRU5PU1lTOwotI2VuZGlmCi19Ci1FWFBPUlRfU1lNQk9MKGlteF9pcnFfc2V0X3ByaW9yaXR5KTsKLQotI2lmZGVmIENPTkZJR19GSVEKLWludCBteGNfc2V0X2lycV9maXEodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IHR5cGUpCi17Ci0JdW5zaWduZWQgaW50IGlycXQ7Ci0KLQlpZiAoaXJxID49IE1YQ19JTlRFUk5BTF9JUlFTKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChpcnEgPCBNWENfSU5URVJOQUxfSVJRUyAvIDIpIHsKLQkJaXJxdCA9IF9fcmF3X3JlYWRsKGF2aWNfYmFzZSArIEFWSUNfSU5UVFlQRUwpICYgfigxIDw8IGlycSk7Ci0JCV9fcmF3X3dyaXRlbChpcnF0IHwgKCEhdHlwZSA8PCBpcnEpLCBhdmljX2Jhc2UgKyBBVklDX0lOVFRZUEVMKTsKLQl9IGVsc2UgewotCQlpcnEgLT0gTVhDX0lOVEVSTkFMX0lSUVMgLyAyOwotCQlpcnF0ID0gX19yYXdfcmVhZGwoYXZpY19iYXNlICsgQVZJQ19JTlRUWVBFSCkgJiB+KDEgPDwgaXJxKTsKLQkJX19yYXdfd3JpdGVsKGlycXQgfCAoISF0eXBlIDw8IGlycSksIGF2aWNfYmFzZSArIEFWSUNfSU5UVFlQRUgpOwotCX0KLQotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTChteGNfc2V0X2lycV9maXEpOwotI2VuZGlmIC8qIENPTkZJR19GSVEgKi8KLQotLyogRGlzYWJsZSBpbnRlcnJ1cHQgbnVtYmVyICJpcnEiIGluIHRoZSBBVklDICovCi1zdGF0aWMgdm9pZCBteGNfbWFza19pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQlfX3Jhd193cml0ZWwoaXJxLCBhdmljX2Jhc2UgKyBBVklDX0lOVERJU05VTSk7Ci19Ci0KLS8qIEVuYWJsZSBpbnRlcnJ1cHQgbnVtYmVyICJpcnEiIGluIHRoZSBBVklDICovCi1zdGF0aWMgdm9pZCBteGNfdW5tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCV9fcmF3X3dyaXRlbChpcnEsIGF2aWNfYmFzZSArIEFWSUNfSU5URU5OVU0pOwotfQotCi1zdGF0aWMgc3RydWN0IGlycV9jaGlwIG14Y19hdmljX2NoaXAgPSB7Ci0JLmFjayA9IG14Y19tYXNrX2lycSwKLQkubWFzayA9IG14Y19tYXNrX2lycSwKLQkudW5tYXNrID0gbXhjX3VubWFza19pcnEsCi19OwotCi0vKgotICogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgQVZJQyBoYXJkd2FyZSBhbmQgZGlzYWJsZXMgYWxsIHRoZQotICogaW50ZXJydXB0cy4gSXQgcmVnaXN0ZXJzIHRoZSBpbnRlcnJ1cHQgZW5hYmxlIGFuZCBkaXNhYmxlIGZ1bmN0aW9ucwotICogdG8gdGhlIGtlcm5lbCBmb3IgZWFjaCBpbnRlcnJ1cHQgc291cmNlLgotICovCi12b2lkIF9faW5pdCBteGNfaW5pdF9pcnEodm9pZCBfX2lvbWVtICppcnFiYXNlKQotewotCWludCBpOwotCi0JYXZpY19iYXNlID0gaXJxYmFzZTsKLQotCS8qIHB1dCB0aGUgQVZJQyBpbnRvIHRoZSByZXNldCB2YWx1ZSB3aXRoCi0JICogYWxsIGludGVycnVwdHMgZGlzYWJsZWQKLQkgKi8KLQlfX3Jhd193cml0ZWwoMCwgYXZpY19iYXNlICsgQVZJQ19JTlRDTlRMKTsKLQlfX3Jhd193cml0ZWwoMHgxZiwgYXZpY19iYXNlICsgQVZJQ19OSU1BU0spOwotCi0JLyogZGlzYWJsZSBhbGwgaW50ZXJydXB0cyAqLwotCV9fcmF3X3dyaXRlbCgwLCBhdmljX2Jhc2UgKyBBVklDX0lOVEVOQUJMRUgpOwotCV9fcmF3X3dyaXRlbCgwLCBhdmljX2Jhc2UgKyBBVklDX0lOVEVOQUJMRUwpOwotCi0JLyogYWxsIElSUSBubyBGSVEgKi8KLQlfX3Jhd193cml0ZWwoMCwgYXZpY19iYXNlICsgQVZJQ19JTlRUWVBFSCk7Ci0JX19yYXdfd3JpdGVsKDAsIGF2aWNfYmFzZSArIEFWSUNfSU5UVFlQRUwpOwotCWZvciAoaSA9IDA7IGkgPCBNWENfSU5URVJOQUxfSVJRUzsgaSsrKSB7Ci0JCXNldF9pcnFfY2hpcChpLCAmbXhjX2F2aWNfY2hpcCk7Ci0JCXNldF9pcnFfaGFuZGxlcihpLCBoYW5kbGVfbGV2ZWxfaXJxKTsKLQkJc2V0X2lycV9mbGFncyhpLCBJUlFGX1ZBTElEKTsKLQl9Ci0KLQkvKiBTZXQgZGVmYXVsdCBwcmlvcml0eSB2YWx1ZSAoMCkgZm9yIGFsbCBJUlEncyAqLwotCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCi0JCV9fcmF3X3dyaXRlbCgwLCBhdmljX2Jhc2UgKyBBVklDX05JUFJJT1JJVFkoaSkpOwotCi0jaWZkZWYgQ09ORklHX0ZJUQotCS8qIEluaXRpYWxpemUgRklRICovCi0JaW5pdF9GSVEoKTsKLSNlbmRpZgotCi0JcHJpbnRrKEtFUk5fSU5GTyAiTVhDIElSUSBpbml0aWFsaXplZFxuIik7Ci19Ci0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL3N5c3RlbS5jIGIvYXJjaC9hcm0vcGxhdC1teGMvc3lzdGVtLmMKaW5kZXggOTI1YmNlNC4uMzQ1NWZjMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvc3lzdGVtLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvc3lzdGVtLmMKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgogI2luY2x1ZGUgPGFzbS9wcm9jLWZucy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogCiBzdGF0aWMgdm9pZCBfX2lvbWVtICp3ZG9nX2Jhc2U7CiAKQEAgLTQyLDEyICs0MywxOSBAQAogCQlyZXR1cm47CiAJfQogI2VuZGlmCisjaWZkZWYgQ09ORklHX01BQ0hfTVg1MV9FRklLQU1YCisJaWYgKG1hY2hpbmVfaXNfbXg1MV9lZmlrYW14KCkpIHsKKwkJbXg1MV9lZmlrYW14X3Jlc2V0KCk7CisJCXJldHVybjsKKwl9CisjZW5kaWYKKwogCWlmIChjcHVfaXNfbXgxKCkpIHsKIAkJd2NyX2VuYWJsZSA9ICgxIDw8IDApOwogCX0gZWxzZSB7CiAJCXN0cnVjdCBjbGsgKmNsazsKIAotCQljbGsgPSBjbGtfZ2V0X3N5cygiaW14LXdkdC4wIiwgTlVMTCk7CisJCWNsayA9IGNsa19nZXRfc3lzKCJpbXgyLXdkdC4wIiwgTlVMTCk7CiAJCWlmICghSVNfRVJSKGNsaykpCiAJCQljbGtfZW5hYmxlKGNsayk7CiAJCXdjcl9lbmFibGUgPSAoMSA8PCAyKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL3RpbWUuYyBiL2FyY2gvYXJtL3BsYXQtbXhjL3RpbWUuYwppbmRleCBmOWExYjA1Li45ZjBjMjYxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy90aW1lLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvdGltZS5jCkBAIC0xMjAsNyArMTIwLDYgQEAKIAkucmF0aW5nCQk9IDIwMCwKIAkucmVhZAkJPSBteDFfMl9nZXRfY3ljbGVzLAogCS5tYXNrCQk9IENMT0NLU09VUkNFX01BU0soMzIpLAotCS5zaGlmdCAJCT0gMjAsCiAJLmZsYWdzCQk9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTLAogfTsKIApAQCAtMTMxLDkgKzEzMCw3IEBACiAJaWYgKHRpbWVyX2lzX3YyKCkpCiAJCWNsb2Nrc291cmNlX214Yy5yZWFkID0gdjJfZ2V0X2N5Y2xlczsKIAotCWNsb2Nrc291cmNlX214Yy5tdWx0ID0gY2xvY2tzb3VyY2VfaHoybXVsdChjLAotCQkJCQljbG9ja3NvdXJjZV9teGMuc2hpZnQpOwotCWNsb2Nrc291cmNlX3JlZ2lzdGVyKCZjbG9ja3NvdXJjZV9teGMpOworCWNsb2Nrc291cmNlX3JlZ2lzdGVyX2h6KCZjbG9ja3NvdXJjZV9teGMsIGMpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy90emljLmMgYi9hcmNoL2FybS9wbGF0LW14Yy90emljLmMKaW5kZXggMzcwM2FiMi4uZTY5ZWQ4YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvdHppYy5jCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL3R6aWMuYwpAQCAtMjEsNiArMjEsOCBAQAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgogCisjaW5jbHVkZSAiaXJxLWNvbW1vbi5oIgorCiAvKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBUWklDIFJlZ2lzdGVycyAgICAgICAgICAgICAgICAgICAgICAgICoKQEAgLTQ3LDYgKzQ5LDI1IEBACiAKIHZvaWQgX19pb21lbSAqdHppY19iYXNlOyAvKiBVc2VkIGFzIGlycSBjb250cm9sbGVyIGJhc2UgaW4gZW50cnktbWFjcm8uUyAqLwogCisjaWZkZWYgQ09ORklHX0ZJUQorc3RhdGljIGludCB0emljX3NldF9pcnFfZmlxKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCB0eXBlKQoreworCXVuc2lnbmVkIGludCBpbmRleCwgbWFzaywgdmFsdWU7CisKKwlpbmRleCA9IGlycSA+PiA1OworCWlmICh1bmxpa2VseShpbmRleCA+PSA0KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJbWFzayA9IDFVIDw8IChpcnEgJiAweDFGKTsKKworCXZhbHVlID0gX19yYXdfcmVhZGwodHppY19iYXNlICsgVFpJQ19JTlRTRUMwKGluZGV4KSkgfCBtYXNrOworCWlmICh0eXBlKQorCQl2YWx1ZSAmPSB+bWFzazsKKwlfX3Jhd193cml0ZWwodmFsdWUsIHR6aWNfYmFzZSArIFRaSUNfSU5UU0VDMChpbmRleCkpOworCisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKwogLyoqCiAgKiB0emljX21hc2tfaXJxKCkgLSBEaXNhYmxlIGludGVycnVwdCBudW1iZXIgImlycSIgaW4gdGhlIFRaSUMKICAqCkBAIC0xMDQsMTIgKzEyNSwxNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGlycV9jaGlwIG14Y190emljX2NoaXAgPSB7Ci0JLm5hbWUgPSAiTVhDX1RaSUMiLAotCS5hY2sgPSB0emljX21hc2tfaXJxLAotCS5tYXNrID0gdHppY19tYXNrX2lycSwKLQkudW5tYXNrID0gdHppY191bm1hc2tfaXJxLAotCS5zZXRfd2FrZSA9IHR6aWNfc2V0X3dha2VfaXJxLAorc3RhdGljIHN0cnVjdCBteGNfaXJxX2NoaXAgbXhjX3R6aWNfY2hpcCA9IHsKKwkuYmFzZSA9IHsKKwkJLm5hbWUgPSAiTVhDX1RaSUMiLAorCQkuYWNrID0gdHppY19tYXNrX2lycSwKKwkJLm1hc2sgPSB0emljX21hc2tfaXJxLAorCQkudW5tYXNrID0gdHppY191bm1hc2tfaXJxLAorCQkuc2V0X3dha2UgPSB0emljX3NldF93YWtlX2lycSwKKwl9LAorI2lmZGVmIENPTkZJR19GSVEKKwkuc2V0X2lycV9maXEgPSB0emljX3NldF9pcnFfZmlxLAorI2VuZGlmCiB9OwogCiAvKgpAQCAtMTQxLDEwICsxNjcsMTYgQEAKIAkvKiBhbGwgSVJRIG5vIEZJUSBXYXJuaW5nIDo6IE5vIHNlbGVjdGlvbiAqLwogCiAJZm9yIChpID0gMDsgaSA8IE1YQ19JTlRFUk5BTF9JUlFTOyBpKyspIHsKLQkJc2V0X2lycV9jaGlwKGksICZteGNfdHppY19jaGlwKTsKKwkJc2V0X2lycV9jaGlwKGksICZteGNfdHppY19jaGlwLmJhc2UpOwogCQlzZXRfaXJxX2hhbmRsZXIoaSwgaGFuZGxlX2xldmVsX2lycSk7CiAJCXNldF9pcnFfZmxhZ3MoaSwgSVJRRl9WQUxJRCk7CiAJfQorCisjaWZkZWYgQ09ORklHX0ZJUQorCS8qIEluaXRpYWxpemUgRklRICovCisJaW5pdF9GSVEoKTsKKyNlbmRpZgorCiAJcHJfaW5mbygiVHJ1c3Rab25lIEludGVycnVwdCBDb250cm9sbGVyIChUWklDKSBpbml0aWFsaXplZFxuIik7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbm9tYWRpay9LY29uZmlnIGIvYXJjaC9hcm0vcGxhdC1ub21hZGlrL0tjb25maWcKaW5kZXggNWRhM2Y5Ny4uMTg3ZjRlOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1ub21hZGlrL0tjb25maWcKKysrIGIvYXJjaC9hcm0vcGxhdC1ub21hZGlrL0tjb25maWcKQEAgLTE0LDYgKzE0LDcgQEAKIAogY29uZmlnIEhBU19NVFUKIAlib29sCisJc2VsZWN0IEhBVkVfU0NIRURfQ0xPQ0sKIAloZWxwCiAJICBTdXBwb3J0IGZvciBNdWx0aSBUaW1lciBVbml0LiBNVFUgcHJvdmlkZXMgYWNjZXNzCiAJICB0byBtdWx0aXBsZSBpbnRlcnJ1cHQgZ2VuZXJhdGluZyBwcm9ncmFtbWFibGUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbm9tYWRpay9ncGlvLmMgYi9hcmNoL2FybS9wbGF0LW5vbWFkaWsvZ3Bpby5jCmluZGV4IDg1ZTZmZDIxLi5lZGE0ZTNhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW5vbWFkaWsvZ3Bpby5jCisrKyBiL2FyY2gvYXJtL3BsYXQtbm9tYWRpay9ncGlvLmMKQEAgLTExOSw3ICsxMTksNyBAQAogfQogCiBzdGF0aWMgdm9pZCBfX25ta19jb25maWdfcGluKHN0cnVjdCBubWtfZ3Bpb19jaGlwICpubWtfY2hpcCwgdW5zaWduZWQgb2Zmc2V0LAotCQkJICAgICBwaW5fY2ZnX3QgY2ZnKQorCQkJICAgICBwaW5fY2ZnX3QgY2ZnLCBib29sIHNsZWVwKQogewogCXN0YXRpYyBjb25zdCBjaGFyICphZm5hbWVzW10gPSB7CiAJCVtOTUtfR1BJT19BTFRfR1BJT10JPSAiR1BJTyIsCkBAIC0xNDUsMTEgKzE0NSwzNCBAQAogCWludCBvdXRwdXQgPSBQSU5fRElSKGNmZyk7CiAJaW50IHZhbCA9IFBJTl9WQUwoY2ZnKTsKIAotCWRldl9kYmcobm1rX2NoaXAtPmNoaXAuZGV2LCAicGluICVkOiBhZiAlcywgcHVsbCAlcywgc2xwbSAlcyAoJXMlcylcbiIsCi0JCXBpbiwgYWZuYW1lc1thZl0sIHB1bGxuYW1lc1twdWxsXSwgc2xwbW5hbWVzW3NscG1dLAorCWRldl9kYmcobm1rX2NoaXAtPmNoaXAuZGV2LCAicGluICVkIFslI2x4XTogYWYgJXMsIHB1bGwgJXMsIHNscG0gJXMgKCVzJXMpXG4iLAorCQlwaW4sIGNmZywgYWZuYW1lc1thZl0sIHB1bGxuYW1lc1twdWxsXSwgc2xwbW5hbWVzW3NscG1dLAogCQlvdXRwdXQgPyAib3V0cHV0ICIgOiAiaW5wdXQiLAogCQlvdXRwdXQgPyAodmFsID8gImhpZ2giIDogImxvdyIpIDogIiIpOwogCisJaWYgKHNsZWVwKSB7CisJCWludCBzbHBtX3B1bGwgPSBQSU5fU0xQTV9QVUxMKGNmZyk7CisJCWludCBzbHBtX291dHB1dCA9IFBJTl9TTFBNX0RJUihjZmcpOworCQlpbnQgc2xwbV92YWwgPSBQSU5fU0xQTV9WQUwoY2ZnKTsKKworCQkvKgorCQkgKiBUaGUgU0xQTV8qIHZhbHVlcyBhcmUgbm9ybWFsIHZhbHVlcyArIDEgdG8gYWxsb3cgemVybyB0bworCQkgKiBtZWFuICJzYW1lIGFzIG5vcm1hbCIuCisJCSAqLworCQlpZiAoc2xwbV9wdWxsKQorCQkJcHVsbCA9IHNscG1fcHVsbCAtIDE7CisJCWlmIChzbHBtX291dHB1dCkKKwkJCW91dHB1dCA9IHNscG1fb3V0cHV0IC0gMTsKKwkJaWYgKHNscG1fdmFsKQorCQkJdmFsID0gc2xwbV92YWwgLSAxOworCisJCWRldl9kYmcobm1rX2NoaXAtPmNoaXAuZGV2LCAicGluICVkOiBzbGVlcCBwdWxsICVzLCBkaXIgJXMsIHZhbCAlc1xuIiwKKwkJCXBpbiwKKwkJCXNscG1fcHVsbCA/IHB1bGxuYW1lc1twdWxsXSA6ICJzYW1lIiwKKwkJCXNscG1fb3V0cHV0ID8gKG91dHB1dCA/ICJvdXRwdXQiIDogImlucHV0IikgOiAic2FtZSIsCisJCQlzbHBtX3ZhbCA/ICh2YWwgPyAiaGlnaCIgOiAibG93IikgOiAic2FtZSIpOworCX0KKwogCWlmIChvdXRwdXQpCiAJCV9fbm1rX2dwaW9fbWFrZV9vdXRwdXQobm1rX2NoaXAsIG9mZnNldCwgdmFsKTsKIAllbHNlIHsKQEAgLTE3NSw3ICsxOTgsNyBAQAogICogc2lkZS1lZmZlY3RzLiAgVGhlIGdwaW8gY2FuIGJlIG1hbmlwdWxhdGVkIGxhdGVyIHVzaW5nIHN0YW5kYXJkIEdQSU8gQVBJCiAgKiBjYWxscy4KICAqLwotaW50IG5ta19jb25maWdfcGluKHBpbl9jZmdfdCBjZmcpCitpbnQgbm1rX2NvbmZpZ19waW4ocGluX2NmZ190IGNmZywgYm9vbCBzbGVlcCkKIHsKIAlzdHJ1Y3Qgbm1rX2dwaW9fY2hpcCAqbm1rX2NoaXA7CiAJaW50IGdwaW8gPSBQSU5fTlVNKGNmZyk7CkBAIC0xODYsNyArMjA5LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbm1rX2NoaXAtPmxvY2ssIGZsYWdzKTsKLQlfX25ta19jb25maWdfcGluKG5ta19jaGlwLCBncGlvIC0gbm1rX2NoaXAtPmNoaXAuYmFzZSwgY2ZnKTsKKwlfX25ta19jb25maWdfcGluKG5ta19jaGlwLCBncGlvIC0gbm1rX2NoaXAtPmNoaXAuYmFzZSwgY2ZnLCBzbGVlcCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbm1rX2NoaXAtPmxvY2ssIGZsYWdzKTsKIAogCXJldHVybiAwOwpAQCAtMjA3LDcgKzIzMCw3IEBACiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKLQkJaW50IHJldCA9IG5ta19jb25maWdfcGluKGNmZ3NbaV0pOworCQlyZXQgPSBubWtfY29uZmlnX3BpbihjZmdzW2ldLCBmYWxzZSk7CiAJCWlmIChyZXQpCiAJCQlicmVhazsKIAl9CkBAIC0yMTYsNiArMjM5LDIxIEBACiB9CiBFWFBPUlRfU1lNQk9MKG5ta19jb25maWdfcGlucyk7CiAKK2ludCBubWtfY29uZmlnX3BpbnNfc2xlZXAocGluX2NmZ190ICpjZmdzLCBpbnQgbnVtKQoreworCWludCByZXQgPSAwOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7CisJCXJldCA9IG5ta19jb25maWdfcGluKGNmZ3NbaV0sIHRydWUpOworCQlpZiAocmV0KQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wobm1rX2NvbmZpZ19waW5zX3NsZWVwKTsKKwogLyoqCiAgKiBubWtfZ3Bpb19zZXRfc2xwbSgpIC0gY29uZmlndXJlIHRoZSBzbGVlcCBtb2RlIG9mIGEgcGluCiAgKiBAZ3BpbzogcGluIG51bWJlcgpAQCAtNjM0LDcgKzY3Miw3IEBACiAKIAljaGlwID0gJm5ta19jaGlwLT5jaGlwOwogCWNoaXAtPmJhc2UgPSBwZGF0YS0+Zmlyc3RfZ3BpbzsKLQljaGlwLT5sYWJlbCA9IHBkYXRhLT5uYW1lOworCWNoaXAtPmxhYmVsID0gcGRhdGEtPm5hbWUgPzogZGV2X25hbWUoJmRldi0+ZGV2KTsKIAljaGlwLT5kZXYgPSAmZGV2LT5kZXY7CiAJY2hpcC0+b3duZXIgPSBUSElTX01PRFVMRTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1ub21hZGlrL2luY2x1ZGUvcGxhdC9waW5jZmcuaCBiL2FyY2gvYXJtL3BsYXQtbm9tYWRpay9pbmNsdWRlL3BsYXQvcGluY2ZnLmgKaW5kZXggOGM1YWUzZi4uMDVhMzkzNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1ub21hZGlrL2luY2x1ZGUvcGxhdC9waW5jZmcuaAorKysgYi9hcmNoL2FybS9wbGF0LW5vbWFkaWsvaW5jbHVkZS9wbGF0L3BpbmNmZy5oCkBAIC0xOSwxNiArMTksMjIgQEAKICAqCWJpdCAgOS4uMTAgLSBBbHRlcm5hdGUgRnVuY3Rpb24gU2VsZWN0aW9uCiAgKgliaXQgMTEuLjEyIC0gUHVsbCB1cC9kb3duIHN0YXRlCiAgKgliaXQgICAgIDEzIC0gU2xlZXAgbW9kZSBiZWhhdmlvdXIKLSAqCWJpdCAgICAgMTQgLSAoc2xlZXAgbW9kZSkgRGlyZWN0aW9uCi0gKgliaXQgICAgIDE1IC0gKHNsZWVwIG1vZGUpIFZhbHVlIChpZiBvdXRwdXQpCisgKgliaXQgICAgIDE0IC0gRGlyZWN0aW9uCisgKgliaXQgICAgIDE1IC0gVmFsdWUgKGlmIG91dHB1dCkKKyAqCWJpdCAxNi4uMTggLSBTTFBNIHB1bGwgdXAvZG93biBzdGF0ZQorICoJYml0IDE5Li4yMCAtIFNMUE0gZGlyZWN0aW9uCisgKgliaXQgMjEuLjIyIC0gU0xQTSBWYWx1ZSAoaWYgb3V0cHV0KQogICoKICAqIHRvIGZhY2lsaXRhdGUgdGhlIGRlZmluaXRpb24sIHRoZSBmb2xsb3dpbmcgbWFjcm9zIGFyZSBwcm92aWRlZAogICoKICAqIFBJTl9DRkdfREVGQVVMVCAtIGRlZmF1bHQgY29uZmlnICgwKToKICAqCQkgICAgIHB1bGwgdXAvZG93biA9IGRpc2FibGVkCiAgKgkJICAgICBzbGVlcCBtb2RlID0gaW5wdXQvd2FrZXVwCi0gKgkJICAgICAoc2xlZXAgbW9kZSkgZGlyZWN0aW9uID0gaW5wdXQKLSAqCQkgICAgIChzbGVlcCBtb2RlKSB2YWx1ZSA9IGxvdworICoJCSAgICAgZGlyZWN0aW9uID0gaW5wdXQKKyAqCQkgICAgIHZhbHVlID0gbG93CisgKgkJICAgICBTTFBNIGRpcmVjdGlvbiA9IHNhbWUgYXMgbm9ybWFsCisgKgkJICAgICBTTFBNIHB1bGwgPSBzYW1lIGFzIG5vcm1hbAorICoJCSAgICAgU0xQTSB2YWx1ZSA9IHNhbWUgYXMgbm9ybWFsCiAgKgogICogUElOX0NGRwkgICAtIGRlZmF1bHQgY29uZmlnIHdpdGggYWx0ZXJuYXRlIGZ1bmN0aW9uCiAgKiBQSU5fQ0ZHX1BVTEwJICAgLSBkZWZhdWx0IGNvbmZpZyB3aXRoIGFsdGVybmF0ZSBmdW5jdGlvbiBhbmQgcHVsbCB1cC9kb3duCkBAIC03NSwzMCArODEsNjQgQEAKICNkZWZpbmUgUElOX1ZBTF9MT1cJCSgwIDw8IFBJTl9WQUxfU0hJRlQpCiAjZGVmaW5lIFBJTl9WQUxfSElHSAkJKDEgPDwgUElOX1ZBTF9TSElGVCkKIAotLyogU2hvcnRjdXRzLiAgVXNlIHRoZXNlIGluc3RlYWQgb2Ygc2VwYXJhdGUgRElSIGFuZCBWQUwuICAqLwotI2RlZmluZSBQSU5fSU5QVVQJCVBJTl9ESVJfSU5QVVQKKyNkZWZpbmUgUElOX1NMUE1fUFVMTF9TSElGVAkxNgorI2RlZmluZSBQSU5fU0xQTV9QVUxMX01BU0sJKDB4NyA8PCBQSU5fU0xQTV9QVUxMX1NISUZUKQorI2RlZmluZSBQSU5fU0xQTV9QVUxMKHgpCVwKKwkoKCh4KSAmIFBJTl9TTFBNX1BVTExfTUFTSykgPj4gUElOX1NMUE1fUFVMTF9TSElGVCkKKyNkZWZpbmUgUElOX1NMUE1fUFVMTF9OT05FCVwKKwkoKDEgKyBOTUtfR1BJT19QVUxMX05PTkUpIDw8IFBJTl9TTFBNX1BVTExfU0hJRlQpCisjZGVmaW5lIFBJTl9TTFBNX1BVTExfVVAJXAorCSgoMSArIE5NS19HUElPX1BVTExfVVApIDw8IFBJTl9TTFBNX1BVTExfU0hJRlQpCisjZGVmaW5lIFBJTl9TTFBNX1BVTExfRE9XTglcCisJKCgxICsgTk1LX0dQSU9fUFVMTF9ET1dOKSA8PCBQSU5fU0xQTV9QVUxMX1NISUZUKQorCisjZGVmaW5lIFBJTl9TTFBNX0RJUl9TSElGVAkxOQorI2RlZmluZSBQSU5fU0xQTV9ESVJfTUFTSwkoMHgzIDw8IFBJTl9TTFBNX0RJUl9TSElGVCkKKyNkZWZpbmUgUElOX1NMUE1fRElSKHgpCQlcCisJKCgoeCkgJiBQSU5fU0xQTV9ESVJfTUFTSykgPj4gUElOX1NMUE1fRElSX1NISUZUKQorI2RlZmluZSBQSU5fU0xQTV9ESVJfSU5QVVQJKCgxICsgMCkgPDwgUElOX1NMUE1fRElSX1NISUZUKQorI2RlZmluZSBQSU5fU0xQTV9ESVJfT1VUUFVUCSgoMSArIDEpIDw8IFBJTl9TTFBNX0RJUl9TSElGVCkKKworI2RlZmluZSBQSU5fU0xQTV9WQUxfU0hJRlQJMjEKKyNkZWZpbmUgUElOX1NMUE1fVkFMX01BU0sJKDB4MyA8PCBQSU5fU0xQTV9WQUxfU0hJRlQpCisjZGVmaW5lIFBJTl9TTFBNX1ZBTCh4KQkJXAorCSgoKHgpICYgUElOX1NMUE1fVkFMX01BU0spID4+IFBJTl9TTFBNX1ZBTF9TSElGVCkKKyNkZWZpbmUgUElOX1NMUE1fVkFMX0xPVwkoKDEgKyAwKSA8PCBQSU5fU0xQTV9WQUxfU0hJRlQpCisjZGVmaW5lIFBJTl9TTFBNX1ZBTF9ISUdICSgoMSArIDEpIDw8IFBJTl9TTFBNX1ZBTF9TSElGVCkKKworLyogU2hvcnRjdXRzLiAgVXNlIHRoZXNlIGluc3RlYWQgb2Ygc2VwYXJhdGUgRElSLCBQVUxMLCBhbmQgVkFMLiAgKi8KKyNkZWZpbmUgUElOX0lOUFVUX1BVTExET1dOCShQSU5fRElSX0lOUFVUIHwgUElOX1BVTExfRE9XTikKKyNkZWZpbmUgUElOX0lOUFVUX1BVTExVUAkoUElOX0RJUl9JTlBVVCB8IFBJTl9QVUxMX1VQKQorI2RlZmluZSBQSU5fSU5QVVRfTk9QVUxMCShQSU5fRElSX0lOUFVUIHwgUElOX1BVTExfTk9ORSkKICNkZWZpbmUgUElOX09VVFBVVF9MT1cJCShQSU5fRElSX09VVFBVVCB8IFBJTl9WQUxfTE9XKQogI2RlZmluZSBQSU5fT1VUUFVUX0hJR0gJCShQSU5fRElSX09VVFBVVCB8IFBJTl9WQUxfSElHSCkKIAotLyoKLSAqIFRoZXNlIGFyZSB0aGUgc2FtZSBhcyB0aGUgb25lcyBhYm92ZSwgYnV0IHNob3VsZCBtYWtlIG1vcmUgc2Vuc2UgdG8gdGhlCi0gKiByZWFkZXIgd2hlbiBzZWVuIGFsb25nIHdpdGggYSBzZXR0aW5nIGEgcGluIHRvIEFGIG1vZGUuCi0gKi8KLSNkZWZpbmUgUElOX1NMUE1fSU5QVVQJCVBJTl9JTlBVVAotI2RlZmluZSBQSU5fU0xQTV9PVVRQVVRfTE9XCVBJTl9PVVRQVVRfTE9XCi0jZGVmaW5lIFBJTl9TTFBNX09VVFBVVF9ISUdICVBJTl9PVVRQVVRfSElHSAorI2RlZmluZSBQSU5fU0xQTV9JTlBVVF9QVUxMRE9XTgkoUElOX1NMUE1fRElSX0lOUFVUIHwgUElOX1NMUE1fUFVMTF9ET1dOKQorI2RlZmluZSBQSU5fU0xQTV9JTlBVVF9QVUxMVVAJKFBJTl9TTFBNX0RJUl9JTlBVVCB8IFBJTl9TTFBNX1BVTExfVVApCisjZGVmaW5lIFBJTl9TTFBNX0lOUFVUX05PUFVMTAkoUElOX1NMUE1fRElSX0lOUFVUIHwgUElOX1NMUE1fUFVMTF9OT05FKQorI2RlZmluZSBQSU5fU0xQTV9PVVRQVVRfTE9XCShQSU5fU0xQTV9ESVJfT1VUUFVUIHwgUElOX1NMUE1fVkFMX0xPVykKKyNkZWZpbmUgUElOX1NMUE1fT1VUUFVUX0hJR0gJKFBJTl9TTFBNX0RJUl9PVVRQVVQgfCBQSU5fU0xQTV9WQUxfSElHSCkKIAotI2RlZmluZSBQSU5fQ0ZHX0RFRkFVTFQJCShQSU5fUFVMTF9OT05FIHwgUElOX1NMUE1fSU5QVVQpCisjZGVmaW5lIFBJTl9DRkdfREVGQVVMVAkJKDApCiAKICNkZWZpbmUgUElOX0NGRyhudW0sIGFsdCkJCVwKIAkoUElOX0NGR19ERUZBVUxUIHxcCiAJIChQSU5fTlVNKG51bSkgfCBQSU5fIyNhbHQpKQogCisjZGVmaW5lIFBJTl9DRkdfSU5QVVQobnVtLCBhbHQsIHB1bGwpCQlcCisJKFBJTl9DRkdfREVGQVVMVCB8XAorCSAoUElOX05VTShudW0pIHwgUElOXyMjYWx0IHwgUElOX0lOUFVUXyMjcHVsbCkpCisKKyNkZWZpbmUgUElOX0NGR19PVVRQVVQobnVtLCBhbHQsIHZhbCkJCVwKKwkoUElOX0NGR19ERUZBVUxUIHxcCisJIChQSU5fTlVNKG51bSkgfCBQSU5fIyNhbHQgfCBQSU5fT1VUUFVUXyMjdmFsKSkKKwogI2RlZmluZSBQSU5fQ0ZHX1BVTEwobnVtLCBhbHQsIHB1bGwpCVwKIAkoKFBJTl9DRkdfREVGQVVMVCAmIH5QSU5fUFVMTF9NQVNLKSB8XAogCSAoUElOX05VTShudW0pIHwgUElOXyMjYWx0IHwgUElOX1BVTExfIyNwdWxsKSkKIAotZXh0ZXJuIGludCBubWtfY29uZmlnX3BpbihwaW5fY2ZnX3QgY2ZnKTsKK2V4dGVybiBpbnQgbm1rX2NvbmZpZ19waW4ocGluX2NmZ190IGNmZywgYm9vbCBzbGVlcCk7CiBleHRlcm4gaW50IG5ta19jb25maWdfcGlucyhwaW5fY2ZnX3QgKmNmZ3MsIGludCBudW0pOworZXh0ZXJuIGludCBubWtfY29uZmlnX3BpbnNfc2xlZXAocGluX2NmZ190ICpjZmdzLCBpbnQgbnVtKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW5vbWFkaWsvdGltZXIuYyBiL2FyY2gvYXJtL3BsYXQtbm9tYWRpay90aW1lci5jCmluZGV4IDYzY2RjNjAuLjQxNzIzNDAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbm9tYWRpay90aW1lci5jCisrKyBiL2FyY2gvYXJtL3BsYXQtbm9tYWRpay90aW1lci5jCkBAIC0xNyw5ICsxNyw5IEBACiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgotI2luY2x1ZGUgPGxpbnV4L2NudDMyX3RvXzYzLmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vc2NoZWRfY2xvY2suaD4KIAogI2luY2x1ZGUgPHBsYXQvbXR1Lmg+CiAKQEAgLTUyLDgxICs1MiwyNCBAQAogICogT3ZlcnJpZGUgdGhlIGdsb2JhbCB3ZWFrIHNjaGVkX2Nsb2NrIHN5bWJvbCB3aXRoIHRoaXMKICAqIGxvY2FsIGltcGxlbWVudGF0aW9uIHdoaWNoIHVzZXMgdGhlIGNsb2Nrc291cmNlIHRvIGdldCBzb21lCiAgKiBiZXR0ZXIgcmVzb2x1dGlvbiB3aGVuIHNjaGVkdWxpbmcgdGhlIGtlcm5lbC4KLSAqCi0gKiBCZWNhdXNlIHRoZSBoYXJkd2FyZSB0aW1lciBwZXJpb2QgbWF5IGJlIHF1aXRlIHNob3J0Ci0gKiAoMzIuMyBzZWNzIG9uIHRoZSAxMzMgTUh6IE1UVSB0aW1lciBzZWxlY3Rpb24gb24gdXg1MDApCi0gKiBhbmQgYmVjYXVzZSBjbnQzMl90b182MygpIG5lZWRzIHRvIGJlIGNhbGxlZCBhdCBsZWFzdCBvbmNlIHBlcgotICogaGFsZiBwZXJpb2QgdG8gd29yayBwcm9wZXJseSwgYSBrZXJuZWwga2VlcHdhcm0oKSB0aW1lciBpcyBzZXQgdXAKLSAqIHRvIGVuc3VyZSB0aGlzIHJlcXVpcmVtZW50IGlzIGFsd2F5cyBtZXQuCi0gKgotICogQWxzbyB0aGUgc2NoZWRfY2xvY2sgdGltZXIgd2lsbCB3cmFwIGFyb3VuZCBhdCBzb21lIHBvaW50LAotICogaGVyZSB3ZSBzZXQgaXQgdG8gcnVuIGNvbnRpbm91c2x5IGZvciBhIHllYXIuCiAgKi8KLSNkZWZpbmUgU0NIRURfQ0xPQ0tfTUlOX1dSQVAgMzYwMCoyNCozNjUKLXN0YXRpYyBzdHJ1Y3QgdGltZXJfbGlzdCBjbnQzMl90b182M19rZWVwd2FybV90aW1lcjsKLXN0YXRpYyB1MzIgc2NoZWRfbXVsdDsKLXN0YXRpYyB1MzIgc2NoZWRfc2hpZnQ7CitzdGF0aWMgREVGSU5FX0NMT0NLX0RBVEEoY2QpOwogCiB1bnNpZ25lZCBsb25nIGxvbmcgbm90cmFjZSBzY2hlZF9jbG9jayh2b2lkKQogewotCXU2NCBjeWNsZXM7CisJdTMyIGN5YzsKIAogCWlmICh1bmxpa2VseSghbXR1X2Jhc2UpKQogCQlyZXR1cm4gMDsKIAotCWN5Y2xlcyA9IGNudDMyX3RvXzYzKC1yZWFkbChtdHVfYmFzZSArIE1UVV9WQUwoMCkpKTsKLQkvKgotCSAqIHNjaGVkX211bHQgaXMgZ3VhcmFudGVlZCB0byBiZSBldmVuIHNvIHdpbGwKLQkgKiBzaGlmdCBvdXQgYml0IDYzCi0JICovCi0JcmV0dXJuIChjeWNsZXMgKiBzY2hlZF9tdWx0KSA+PiBzY2hlZF9zaGlmdDsKKwljeWMgPSAtcmVhZGwobXR1X2Jhc2UgKyBNVFVfVkFMKDApKTsKKwlyZXR1cm4gY3ljX3RvX3NjaGVkX2Nsb2NrKCZjZCwgY3ljLCAodTMyKX4wKTsKIH0KIAotLyogSnVzdCBraWNrIHNjaGVkX2Nsb2NrIGV2ZXJ5IHNvIG9mdGVuICovCi1zdGF0aWMgdm9pZCBjbnQzMl90b182M19rZWVwd2FybSh1bnNpZ25lZCBsb25nIGRhdGEpCitzdGF0aWMgdm9pZCBub3RyYWNlIG5vbWFkaWtfdXBkYXRlX3NjaGVkX2Nsb2NrKHZvaWQpCiB7Ci0JbW9kX3RpbWVyKCZjbnQzMl90b182M19rZWVwd2FybV90aW1lciwgcm91bmRfamlmZmllcyhqaWZmaWVzICsgZGF0YSkpOwotCSh2b2lkKSBzY2hlZF9jbG9jaygpOwotfQotCi0vKgotICogU2V0IHVwIGEgdGltZXIgdG8ga2VlcCBzY2hlZF9jbG9jaygpOnMgMzJfdG9fNjMgYWxnb3JpdGhtIHdhcm0KLSAqIG9uY2UgaW4gaGFsZiBhIDMyYml0IHRpbWVyIHdyYXAgaW50ZXJ2YWwuCi0gKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBubWRrX3NjaGVkX2Nsb2NrX2luaXQodW5zaWduZWQgbG9uZyByYXRlKQotewotCXUzMiB2OwotCXVuc2lnbmVkIGxvbmcgZGVsdGE7Ci0JdTY0IGRheXM7Ci0KLQkvKiBGaW5kIHRoZSBhcHJvcHJpYXRlIG11bHQgYW5kIHNoaWZ0IGZhY3RvcnMgKi8KLQljbG9ja3NfY2FsY19tdWx0X3NoaWZ0KCZzY2hlZF9tdWx0LCAmc2NoZWRfc2hpZnQsCi0JCQkgICAgICAgcmF0ZSwgTlNFQ19QRVJfU0VDLCBTQ0hFRF9DTE9DS19NSU5fV1JBUCk7Ci0JLyogV2UgbmVlZCB0byBtdWx0aXBseSBieSBhbiBldmVuIG51bWJlciB0byBnZXQgcmlkIG9mIGJpdCA2MyAqLwotCWlmIChzY2hlZF9tdWx0ICYgMSkKLQkJc2NoZWRfbXVsdCsrOwotCi0JLyogTGV0J3Mgc2VlIHdoYXQgd2UgZ2V0LCB0YWtlIG1heCBjb3VudGVyIGFuZCBzY2FsZSBpdCAqLwotCWRheXMgPSAoMHhGRkZGRkZGRkZGRkZGRkZGTExVICogc2NoZWRfbXVsdCkgPj4gc2NoZWRfc2hpZnQ7Ci0JZG9fZGl2KGRheXMsIE5TRUNfUEVSX1NFQyk7Ci0JZG9fZGl2KGRheXMsICgzNjAwKjI0KSk7Ci0KLQlwcl9pbmZvKCJzY2hlZF9jbG9jazogdXNpbmcgJWQgYml0cyBAICVsdSBIeiB3cmFwIGluICVsdSBkYXlzXG4iLAotCQkoNjQgLSBzY2hlZF9zaGlmdCksIHJhdGUsICh1bnNpZ25lZCBsb25nKSBkYXlzKTsKLQotCS8qCi0JICogUHJvZ3JhbSBhIHRpbWVyIHRvIGtpY2sgdXMgYXQgaGFsZiAzMmJpdCB3cmFwYXJvdW5kCi0JICogRm9ybXVsYTogc2Vjb25kcyBwZXIgd3JhcCA9ICgyXjMyKSAvIGYKLQkgKi8KLQl2ID0gMHhGRkZGRkZGRlVMIC8gcmF0ZTsKLQkvKiBXZSB3YW50IGhhbGYgb2YgdGhlIHdyYXAgdGltZSB0byBrZWVwIGNudDMyX3RvXzYzIHdhcm0gKi8KLQl2IC89IDI7Ci0JcHJfZGVidWcoInNjaGVkX2Nsb2NrOiBwcmVzY2FsZWQgdGltZXIgcmF0ZTogJWx1IEh6LCAiCi0JCSAiaW5pdGlhbGl6ZSBrZWVwd2FybSB0aW1lciBldmVyeSAlZCBzZWNvbmRzXG4iLCByYXRlLCB2KTsKLQkvKiBDb252ZXJ0IHNlY29uZHMgdG8gamlmZmllcyAqLwotCWRlbHRhID0gbXNlY3NfdG9famlmZmllcyh2KjEwMDApOwotCXNldHVwX3RpbWVyKCZjbnQzMl90b182M19rZWVwd2FybV90aW1lciwgY250MzJfdG9fNjNfa2VlcHdhcm0sIGRlbHRhKTsKLQltb2RfdGltZXIoJmNudDMyX3RvXzYzX2tlZXB3YXJtX3RpbWVyLCByb3VuZF9qaWZmaWVzKGppZmZpZXMgKyBkZWx0YSkpOworCXUzMiBjeWMgPSAtcmVhZGwobXR1X2Jhc2UgKyBNVFVfVkFMKDApKTsKKwl1cGRhdGVfc2NoZWRfY2xvY2soJmNkLCBjeWMsICh1MzIpfjApOwogfQogCiAvKiBDbG9ja2V2ZW50IGRldmljZTogdXNlIG9uZS1zaG90IG1vZGUgKi8KQEAgLTIyMiw3ICsxNjUsNiBAQAogCX0gZWxzZSB7CiAJCWNyIHw9IE1UVV9DUm5fUFJFU0NBTEVfMTsKIAl9Ci0JY2xvY2tzb3VyY2VfY2FsY19tdWx0X3NoaWZ0KCZubWRrX2Nsa3NyYywgcmF0ZSwgTVRVX01JTl9SQU5HRSk7CiAKIAkvKiBUaW1lciAwIGlzIHRoZSBmcmVlIHJ1bm5pbmcgY2xvY2tzb3VyY2UgKi8KIAl3cml0ZWwoY3IsIG10dV9iYXNlICsgTVRVX0NSKDApKTsKQEAgLTIzMywxMSArMTc1LDExIEBACiAJLyogTm93IHRoZSBjbG9jayBzb3VyY2UgaXMgcmVhZHkgKi8KIAlubWRrX2Nsa3NyYy5yZWFkID0gbm1ka19yZWFkX3RpbWVyOwogCi0JaWYgKGNsb2Nrc291cmNlX3JlZ2lzdGVyKCZubWRrX2Nsa3NyYykpCisJaWYgKGNsb2Nrc291cmNlX3JlZ2lzdGVyX2h6KCZubWRrX2Nsa3NyYywgcmF0ZSkpCiAJCXByX2VycigidGltZXI6IGZhaWxlZCB0byBpbml0aWFsaXplIGNsb2NrIHNvdXJjZSAlc1xuIiwKIAkJICAgICAgIG5tZGtfY2xrc3JjLm5hbWUpOwogCi0Jbm1ka19zY2hlZF9jbG9ja19pbml0KHJhdGUpOworCWluaXRfc2NoZWRfY2xvY2soJmNkLCBub21hZGlrX3VwZGF0ZV9zY2hlZF9jbG9jaywgMzIsIHJhdGUpOwogCiAJLyogVGltZXIgMSBpcyB1c2VkIGZvciBldmVudHMgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL0tjb25maWcgYi9hcmNoL2FybS9wbGF0LW9tYXAvS2NvbmZpZwppbmRleCA5MmM1YmI3Li4xOGZlM2NiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvS2NvbmZpZworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvS2NvbmZpZwpAQCAtMTEsMTMgKzExLDE0IEBACiAKIGNvbmZpZyBBUkNIX09NQVAxCiAJYm9vbCAiVEkgT01BUDEiCi0Jc2VsZWN0IENPTU1PTl9DTEtERVYKKwlzZWxlY3QgQ0xLREVWX0xPT0tVUAogCWhlbHAKIAkgICJTeXN0ZW1zIGJhc2VkIG9uIG9tYXA3eHgsIG9tYXAxNXh4IG9yIG9tYXAxNnh4IgogCiBjb25maWcgQVJDSF9PTUFQMlBMVVMKIAlib29sICJUSSBPTUFQMi8zLzQiCi0Jc2VsZWN0IENPTU1PTl9DTEtERVYKKwlzZWxlY3QgQ0xLREVWX0xPT0tVUAorCXNlbGVjdCBPTUFQX0RNX1RJTUVSCiAJaGVscAogCSAgIlN5c3RlbXMgYmFzZWQgb24gT01BUDIsIE9NQVAzIG9yIE9NQVA0IgogCkBAIC0zNSw2ICszNiwzNyBAQAogCWRlcGVuZHMgb24gT01BUF9ERUJVR19ERVZJQ0VTCiAJZGVmYXVsdCB5IGlmIExFRFNfQ0xBU1MKIAorY29uZmlnIE9NQVBfU01BUlRSRUZMRVgKKwlib29sICJTbWFydFJlZmxleCBzdXBwb3J0IgorCWRlcGVuZHMgb24gKEFSQ0hfT01BUDMgfHwgQVJDSF9PTUFQNCkgJiYgUE0KKwloZWxwCisJICBTYXkgWSBpZiB5b3Ugd2FudCB0byBlbmFibGUgU21hcnRSZWZsZXguCisKKwkgIFNtYXJ0UmVmbGV4IGNhbiBwZXJmb3JtIGNvbnRpbnVvdXMgZHluYW1pYyB2b2x0YWdlCisJICBzY2FsaW5nIGFyb3VuZCB0aGUgbm9taW5hbCBvcGVyYXRpbmcgcG9pbnQgdm9sdGFnZQorCSAgYWNjb3JkaW5nIHRvIHNpbGljb24gY2hhcmFjdGVyaXN0aWNzIGFuZCBvcGVyYXRpbmcKKwkgIGNvbmRpdGlvbnMuIEVuYWJsaW5nIFNtYXJ0UmVmbGV4IHJlZHVjZXMgcG93ZXIKKwkgIGNvbnN1bXB0aW9uLgorCisJICBQbGVhc2Ugbm90ZSwgdGhhdCBieSBkZWZhdWx0IFNtYXJ0UmVmbGV4IGlzIG9ubHkKKwkgIGluaXRpYWxpemVkLiBUbyBlbmFibGUgdGhlIGF1dG9tYXRpYyB2b2x0YWdlCisJICBjb21wZW5zYXRpb24gZm9yIHZkZCBtcHUgIGFuZCB2ZGQgY29yZSBmcm9tIHVzZXIgc3BhY2UsCisJICB1c2VyIG11c3Qgd3JpdGUgMSB0bworCQkvZGVidWcvdm9sdGFnZS92ZGRfPFg+L3NtYXJ0cmVmbGV4L2F1dG9jb21wLAorCSAgd2hlcmUgWCBpcyBtcHUgb3IgY29yZSBmb3IgT01BUDMuCisJICBPcHRpb25hbGxseSBhdXRvY29tcGVuc2F0aW9uIGNhbiBiZSBlbmFibGVkIGluIHRoZSBrZXJuZWwKKwkgIGJ5IGRlZmF1bHQgZHVyaW5nIHN5c3RlbSBpbml0IHZpYSB0aGUgZW5hYmxlX29uX2luaXQgZmxhZworCSAgd2hpY2ggYW4gYmUgcGFzc2VkIGFzIHBsYXRmb3JtIGRhdGEgdG8gdGhlIHNtYXJ0cmVmbGV4IGRyaXZlci4KKworY29uZmlnIE9NQVBfU01BUlRSRUZMRVhfQ0xBU1MzCisJYm9vbCAiQ2xhc3MgMyBtb2RlIG9mIFNtYXJ0cmVmbGV4IEltcGxlbWVudGF0aW9uIgorCWRlcGVuZHMgb24gT01BUF9TTUFSVFJFRkxFWCAmJiBUV0w0MDMwX0NPUkUKKwloZWxwCisJICBTYXkgWSB0byBlbmFibGUgQ2xhc3MgMyBpbXBsZW1lbnRhdGlvbiBvZiBTbWFydHJlZmxleAorCisJICBDbGFzcyAzIGltcGxlbWVudGF0aW9uIG9mIFNtYXJ0cmVmbGV4IGVtcGxveXMgY29udGludW91cyBoYXJkd2FyZQorCSAgdm9sdGFnZSBjYWxpYnJhdGlvbi4KKwogY29uZmlnIE9NQVBfUkVTRVRfQ0xPQ0tTCiAJYm9vbCAiUmVzZXQgdW51c2VkIGNsb2NrcyBkdXJpbmcgYm9vdCIKIAlkZXBlbmRzIG9uIEFSQ0hfT01BUApAQCAtMTA5LDYgKzE0MSw5IEBACiAKICAgICAgICAgIFNheSBOIHVubGVzcyB5b3Uga25vdyB5b3UgbmVlZCB0aGlzLgogCitjb25maWcgT01BUF9JT01NVV9JVkEyCisJYm9vbAorCiBjaG9pY2UKIAlwcm9tcHQgIlN5c3RlbSB0aW1lciIKIAlkZWZhdWx0IE9NQVBfMzJLX1RJTUVSIGlmICFBUkNIX09NQVAxNVhYCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvY291bnRlcl8zMmsuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9jb3VudGVyXzMyay5jCmluZGV4IDg3MjJhMTMuLmVhNDY0NDAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9jb3VudGVyXzMyay5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9jb3VudGVyXzMyay5jCkBAIC0xNSw4ICsxNSwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKworI2luY2x1ZGUgPGFzbS9zY2hlZF9jbG9jay5oPgogCiAjaW5jbHVkZSA8cGxhdC9jb21tb24uaD4KICNpbmNsdWRlIDxwbGF0L2JvYXJkLmg+CkBAIC00NSw3ICs0OCw3IEBACiBzdGF0aWMgdTMyIG9mZnNldF8zMmsgX19yZWFkX21vc3RseTsKIAogI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNlhYCi1zdGF0aWMgY3ljbGVfdCBvbWFwMTZ4eF8zMmtfcmVhZChzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKQorc3RhdGljIGN5Y2xlX3Qgbm90cmFjZSBvbWFwMTZ4eF8zMmtfcmVhZChzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKQogewogCXJldHVybiBvbWFwX3JlYWRsKE9NQVAxNlhYX1RJTUVSXzMyS19TWU5DSFJPTklaRUQpIC0gb2Zmc2V0XzMyazsKIH0KQEAgLTU0LDcgKzU3LDcgQEAKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDI0MjAKLXN0YXRpYyBjeWNsZV90IG9tYXAyNDIwXzMya19yZWFkKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MpCitzdGF0aWMgY3ljbGVfdCBub3RyYWNlIG9tYXAyNDIwXzMya19yZWFkKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MpCiB7CiAJcmV0dXJuIG9tYXBfcmVhZGwoT01BUDI0MjBfMzJLU1lOQ1RfQkFTRSArIDB4MTApIC0gb2Zmc2V0XzMyazsKIH0KQEAgLTYzLDcgKzY2LDcgQEAKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDI0MzAKLXN0YXRpYyBjeWNsZV90IG9tYXAyNDMwXzMya19yZWFkKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MpCitzdGF0aWMgY3ljbGVfdCBub3RyYWNlIG9tYXAyNDMwXzMya19yZWFkKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MpCiB7CiAJcmV0dXJuIG9tYXBfcmVhZGwoT01BUDI0MzBfMzJLU1lOQ1RfQkFTRSArIDB4MTApIC0gb2Zmc2V0XzMyazsKIH0KQEAgLTcyLDcgKzc1LDcgQEAKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDMKLXN0YXRpYyBjeWNsZV90IG9tYXAzNHh4XzMya19yZWFkKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MpCitzdGF0aWMgY3ljbGVfdCBub3RyYWNlIG9tYXAzNHh4XzMya19yZWFkKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MpCiB7CiAJcmV0dXJuIG9tYXBfcmVhZGwoT01BUDM0MzBfMzJLU1lOQ1RfQkFTRSArIDB4MTApIC0gb2Zmc2V0XzMyazsKIH0KQEAgLTgxLDcgKzg0LDcgQEAKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDQKLXN0YXRpYyBjeWNsZV90IG9tYXA0NHh4XzMya19yZWFkKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MpCitzdGF0aWMgY3ljbGVfdCBub3RyYWNlIG9tYXA0NHh4XzMya19yZWFkKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MpCiB7CiAJcmV0dXJuIG9tYXBfcmVhZGwoT01BUDQ0MzBfMzJLU1lOQ1RfQkFTRSArIDB4MTApIC0gb2Zmc2V0XzMyazsKIH0KQEAgLTkzLDcgKzk2LDcgQEAKICAqIEtlcm5lbCBhc3N1bWVzIHRoYXQgc2NoZWRfY2xvY2sgY2FuIGJlIGNhbGxlZCBlYXJseSBidXQgbWF5IG5vdCBoYXZlCiAgKiB0aGluZ3MgcmVhZHkgeWV0LgogICovCi1zdGF0aWMgY3ljbGVfdCBvbWFwXzMya19yZWFkX2R1bW15KHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MpCitzdGF0aWMgY3ljbGVfdCBub3RyYWNlIG9tYXBfMzJrX3JlYWRfZHVtbXkoc3RydWN0IGNsb2Nrc291cmNlICpjcykKIHsKIAlyZXR1cm4gMDsKIH0KQEAgLTEwMyw3ICsxMDYsNiBAQAogCS5yYXRpbmcJCT0gMjUwLAogCS5yZWFkCQk9IG9tYXBfMzJrX3JlYWRfZHVtbXksCiAJLm1hc2sJCT0gQ0xPQ0tTT1VSQ0VfTUFTSygzMiksCi0JLnNoaWZ0CQk9IDEwLAogCS5mbGFncwkJPSBDTE9DS19TT1VSQ0VfSVNfQ09OVElOVU9VUywKIH07CiAKQEAgLTExMSwxMCArMTEzLDI1IEBACiAgKiBSZXR1cm5zIGN1cnJlbnQgdGltZSBmcm9tIGJvb3QgaW4gbnNlY3MuIEl0J3MgT0sgZm9yIHRoaXMgdG8gd3JhcAogICogYXJvdW5kIGZvciBub3csIGFzIGl0J3MganVzdCBhIHJlbGF0aXZlIHRpbWUgc3RhbXAuCiAgKi8KLXVuc2lnbmVkIGxvbmcgbG9uZyBzY2hlZF9jbG9jayh2b2lkKQorc3RhdGljIERFRklORV9DTE9DS19EQVRBKGNkKTsKKworLyoKKyAqIENvbnN0YW50cyBnZW5lcmF0ZWQgYnkgY2xvY2tzX2NhbGNfbXVsdF9zaGlmdChtLCBzLCAzMjc2OCwgTlNFQ19QRVJfU0VDLCA2MCkuCisgKiBUaGlzIGdpdmVzIGEgcmVzb2x1dGlvbiBvZiBhYm91dCAzMHVzIGFuZCBhIHdyYXAgcGVyaW9kIG9mIGFib3V0IDM2aHJzLgorICovCisjZGVmaW5lIFNDX01VTFQJCTQwMDAwMDAwMDB1CisjZGVmaW5lIFNDX1NISUZUCTE3CisKK3Vuc2lnbmVkIGxvbmcgbG9uZyBub3RyYWNlIHNjaGVkX2Nsb2NrKHZvaWQpCiB7Ci0JcmV0dXJuIGNsb2Nrc291cmNlX2N5YzJucyhjbG9ja3NvdXJjZV8zMmsucmVhZCgmY2xvY2tzb3VyY2VfMzJrKSwKLQkJCQkgIGNsb2Nrc291cmNlXzMyay5tdWx0LCBjbG9ja3NvdXJjZV8zMmsuc2hpZnQpOworCXUzMiBjeWMgPSBjbG9ja3NvdXJjZV8zMmsucmVhZCgmY2xvY2tzb3VyY2VfMzJrKTsKKwlyZXR1cm4gY3ljX3RvX2ZpeGVkX3NjaGVkX2Nsb2NrKCZjZCwgY3ljLCAodTMyKX4wLCBTQ19NVUxULCBTQ19TSElGVCk7Cit9CisKK3N0YXRpYyB2b2lkIG5vdHJhY2Ugb21hcF91cGRhdGVfc2NoZWRfY2xvY2sodm9pZCkKK3sKKwl1MzIgY3ljID0gY2xvY2tzb3VyY2VfMzJrLnJlYWQoJmNsb2Nrc291cmNlXzMyayk7CisJdXBkYXRlX3NjaGVkX2Nsb2NrKCZjZCwgY3ljLCAodTMyKX4wKTsKIH0KIAogLyoqCkBAIC0xNjgsMTMgKzE4NSwxMyBAQAogCQlpZiAoIUlTX0VSUihzeW5jXzMya19pY2spKQogCQkJY2xrX2VuYWJsZShzeW5jXzMya19pY2spOwogCi0JCWNsb2Nrc291cmNlXzMyay5tdWx0ID0gY2xvY2tzb3VyY2VfaHoybXVsdCgzMjc2OCwKLQkJCQkJICAgIGNsb2Nrc291cmNlXzMyay5zaGlmdCk7Ci0KIAkJb2Zmc2V0XzMyayA9IGNsb2Nrc291cmNlXzMyay5yZWFkKCZjbG9ja3NvdXJjZV8zMmspOwogCi0JCWlmIChjbG9ja3NvdXJjZV9yZWdpc3RlcigmY2xvY2tzb3VyY2VfMzJrKSkKKwkJaWYgKGNsb2Nrc291cmNlX3JlZ2lzdGVyX2h6KCZjbG9ja3NvdXJjZV8zMmssIDMyNzY4KSkKIAkJCXByaW50ayhlcnIsIGNsb2Nrc291cmNlXzMyay5uYW1lKTsKKworCQlpbml0X2ZpeGVkX3NjaGVkX2Nsb2NrKCZjZCwgb21hcF91cGRhdGVfc2NoZWRfY2xvY2ssIDMyLAorCQkJCSAgICAgICAzMjc2OCwgU0NfTVVMVCwgU0NfU0hJRlQpOwogCX0KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9kZXZpY2VzLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvZGV2aWNlcy5jCmluZGV4IGZjODE5MTIuLjEwMjQ1YjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2RldmljZXMuYwpAQCAtMjMyLDQ2ICsyMzIsNiBAQAogc3RhdGljIGlubGluZSB2b2lkIG9tYXBfaW5pdF91d2lyZSh2b2lkKSB7fQogI2VuZGlmCiAKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLSNpZglkZWZpbmVkKENPTkZJR19PTUFQX1dBVENIRE9HKSB8fCBkZWZpbmVkKENPTkZJR19PTUFQX1dBVENIRE9HX01PRFVMRSkKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB3ZHRfcmVzb3VyY2VzW10gPSB7Ci0JewotCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG9tYXBfd2R0X2RldmljZSA9IHsKLQkubmFtZQkgICA9ICJvbWFwX3dkdCIsCi0JLmlkCSAgICAgPSAtMSwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUod2R0X3Jlc291cmNlcyksCi0JLnJlc291cmNlCT0gd2R0X3Jlc291cmNlcywKLX07Ci0KLXN0YXRpYyB2b2lkIG9tYXBfaW5pdF93ZHQodm9pZCkKLXsKLQlpZiAoY3B1X2lzX29tYXAxNnh4KCkpCi0JCXdkdF9yZXNvdXJjZXNbMF0uc3RhcnQgPSAweGZmZmViMDAwOwotCWVsc2UgaWYgKGNwdV9pc19vbWFwMjQyMCgpKQotCQl3ZHRfcmVzb3VyY2VzWzBdLnN0YXJ0ID0gMHg0ODAyMjAwMDsgLyogV0RUMiAqLwotCWVsc2UgaWYgKGNwdV9pc19vbWFwMjQzMCgpKQotCQl3ZHRfcmVzb3VyY2VzWzBdLnN0YXJ0ID0gMHg0OTAxNjAwMDsgLyogV0RUMiAqLwotCWVsc2UgaWYgKGNwdV9pc19vbWFwMzQzeCgpKQotCQl3ZHRfcmVzb3VyY2VzWzBdLnN0YXJ0ID0gMHg0ODMxNDAwMDsgLyogV0RUMiAqLwotCWVsc2UgaWYgKGNwdV9pc19vbWFwNDR4eCgpKQotCQl3ZHRfcmVzb3VyY2VzWzBdLnN0YXJ0ID0gMHg0YTMxNDAwMDsKLQllbHNlCi0JCXJldHVybjsKLQotCXdkdF9yZXNvdXJjZXNbMF0uZW5kID0gd2R0X3Jlc291cmNlc1swXS5zdGFydCArIDB4NGY7Ci0KLQkodm9pZCkgcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZvbWFwX3dkdF9kZXZpY2UpOwotfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBvbWFwX2luaXRfd2R0KHZvaWQpIHt9Ci0jZW5kaWYKLQogI2lmIGRlZmluZWQoQ09ORklHX1RJRFNQQlJJREdFKSB8fCBkZWZpbmVkKENPTkZJR19USURTUEJSSURHRV9NT0RVTEUpCiAKIHN0YXRpYyBwaHlzX2FkZHJfdCBvbWFwX2RzcF9waHlzX21lbXBvb2xfYmFzZTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9kbWEuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kbWEuYwppbmRleCAyYzI4MjY1Li5jNGIyYjQ3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvZG1hLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2RtYS5jCkBAIC0xNSw2ICsxNSwxMCBAQAogICoKICAqIFN1cHBvcnQgZnVuY3Rpb25zIGZvciB0aGUgT01BUCBpbnRlcm5hbCBETUEgY2hhbm5lbHMuCiAgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZCAtIGh0dHA6Ly93d3cudGkuY29tLworICogQ29udmVydGVkIERNQSBsaWJyYXJ5IGludG8gRE1BIHBsYXRmb3JtIGRyaXZlci4KKyAqCS0gRywgTWFuanVuYXRoIEtvbmRhaWFoIDxtYW5qdWdrQHRpLmNvbT4KKyAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgpAQCAtNTMsNyArNTcsMTEgQEAKIAogI2RlZmluZSBPTUFQX0ZVTkNfTVVYX0FSTV9CQVNFCQkoMHhmZmZlMTAwMCArIDB4ZWMpCiAKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9zeXN0ZW1fZG1hX3BsYXRfaW5mbyAqcDsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9kbWFfZGV2X2F0dHIgKmQ7CisKIHN0YXRpYyBpbnQgZW5hYmxlXzE1MTBfbW9kZTsKK3N0YXRpYyB1MzIgZXJyYXRhOwogCiBzdGF0aWMgc3RydWN0IG9tYXBfZG1hX2dsb2JhbF9jb250ZXh0X3JlZ2lzdGVycyB7CiAJdTMyIGRtYV9pcnFlbmFibGVfbDA7CkBAIC02MSwyNyArNjksNiBAQAogCXUzMiBkbWFfZ2NyOwogfSBvbWFwX2RtYV9nbG9iYWxfY29udGV4dDsKIAotc3RydWN0IG9tYXBfZG1hX2xjaCB7Ci0JaW50IG5leHRfbGNoOwotCWludCBkZXZfaWQ7Ci0JdTE2IHNhdmVkX2NzcjsKLQl1MTYgZW5hYmxlZF9pcnFzOwotCWNvbnN0IGNoYXIgKmRldl9uYW1lOwotCXZvaWQgKCpjYWxsYmFjaykoaW50IGxjaCwgdTE2IGNoX3N0YXR1cywgdm9pZCAqZGF0YSk7Ci0Jdm9pZCAqZGF0YTsKLQotI2lmbmRlZiBDT05GSUdfQVJDSF9PTUFQMQotCS8qIHJlcXVpcmVkIGZvciBEeW5hbWljIGNoYWluaW5nICovCi0JaW50IHByZXZfbGlua2VkX2NoOwotCWludCBuZXh0X2xpbmtlZF9jaDsKLQlpbnQgc3RhdGU7Ci0JaW50IGNoYWluX2lkOwotCi0JaW50IHN0YXR1czsKLSNlbmRpZgotCWxvbmcgZmxhZ3M7Ci19OwotCiBzdHJ1Y3QgZG1hX2xpbmtfaW5mbyB7CiAJaW50ICpsaW5rZWRfZG1hY2hfcTsKIAlpbnQgbm9fb2ZfbGNoc19saW5rZWQ7CkBAIC0xMzcsMTUgKzEyNCw2IEBACiAKIHN0YXRpYyBzcGlubG9ja190IGRtYV9jaGFuX2xvY2s7CiBzdGF0aWMgc3RydWN0IG9tYXBfZG1hX2xjaCAqZG1hX2NoYW47Ci1zdGF0aWMgdm9pZCBfX2lvbWVtICpvbWFwX2RtYV9iYXNlOwotCi1zdGF0aWMgY29uc3QgdTggb21hcDFfZG1hX2lycVtPTUFQMV9MT0dJQ0FMX0RNQV9DSF9DT1VOVF0gPSB7Ci0JSU5UX0RNQV9DSDBfNiwgSU5UX0RNQV9DSDFfNywgSU5UX0RNQV9DSDJfOCwgSU5UX0RNQV9DSDMsCi0JSU5UX0RNQV9DSDQsIElOVF9ETUFfQ0g1LCBJTlRfMTYxMF9ETUFfQ0g2LCBJTlRfMTYxMF9ETUFfQ0g3LAotCUlOVF8xNjEwX0RNQV9DSDgsIElOVF8xNjEwX0RNQV9DSDksIElOVF8xNjEwX0RNQV9DSDEwLAotCUlOVF8xNjEwX0RNQV9DSDExLCBJTlRfMTYxMF9ETUFfQ0gxMiwgSU5UXzE2MTBfRE1BX0NIMTMsCi0JSU5UXzE2MTBfRE1BX0NIMTQsIElOVF8xNjEwX0RNQV9DSDE1LCBJTlRfRE1BX0xDRAotfTsKIAogc3RhdGljIGlubGluZSB2b2lkIGRpc2FibGVfbG5rKGludCBsY2gpOwogc3RhdGljIHZvaWQgb21hcF9kaXNhYmxlX2NoYW5uZWxfaXJxKGludCBsY2gpOwpAQCAtMTU0LDI0ICsxMzIsNiBAQAogI2RlZmluZSBSRVZJU0lUXzI0WFgoKQkJcHJpbnRrKEtFUk5fRVJSICJGSVhNRTogbm8gJXMgb24gMjR4eFxuIiwgXAogCQkJCQkJX19mdW5jX18pOwogCi0jZGVmaW5lIGRtYV9yZWFkKHJlZykJCQkJCQkJXAotKHsJCQkJCQkJCQlcCi0JdTMyIF9fdmFsOwkJCQkJCQlcCi0JaWYgKGNwdV9jbGFzc19pc19vbWFwMSgpKQkJCQkJXAotCQlfX3ZhbCA9IF9fcmF3X3JlYWR3KG9tYXBfZG1hX2Jhc2UgKyBPTUFQMV9ETUFfIyNyZWcpOwlcCi0JZWxzZQkJCQkJCQkJXAotCQlfX3ZhbCA9IF9fcmF3X3JlYWRsKG9tYXBfZG1hX2Jhc2UgKyBPTUFQX0RNQTRfIyNyZWcpOwlcCi0JX192YWw7CQkJCQkJCQlcCi19KQotCi0jZGVmaW5lIGRtYV93cml0ZSh2YWwsIHJlZykJCQkJCQlcCi0oewkJCQkJCQkJCVwKLQlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkpCQkJCQlcCi0JCV9fcmF3X3dyaXRldygodTE2KSh2YWwpLCBvbWFwX2RtYV9iYXNlICsgT01BUDFfRE1BXyMjcmVnKTsgXAotCWVsc2UJCQkJCQkJCVwKLQkJX19yYXdfd3JpdGVsKCh2YWwpLCBvbWFwX2RtYV9iYXNlICsgT01BUF9ETUE0XyMjcmVnKTsJXAotfSkKLQogI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNVhYCiAvKiBSZXR1cm5zIDEgaWYgdGhlIERNQSBtb2R1bGUgaXMgaW4gT01BUDE1MTAtY29tcGF0aWJsZSBtb2RlLCAwIG90aGVyd2lzZSAqLwogaW50IG9tYXBfZG1hX2luXzE1MTBfbW9kZSh2b2lkKQpAQCAtMjA2LDE2ICsxNjYsNiBAQAogI2RlZmluZSBzZXRfZ2RtYV9kZXYocmVxLCBkZXYpCWRvIHt9IHdoaWxlICgwKQogI2VuZGlmCiAKLS8qIE9tYXAxIG9ubHkgKi8KLXN0YXRpYyB2b2lkIGNsZWFyX2xjaF9yZWdzKGludCBsY2gpCi17Ci0JaW50IGk7Ci0Jdm9pZCBfX2lvbWVtICpsY2hfYmFzZSA9IG9tYXBfZG1hX2Jhc2UgKyBPTUFQMV9ETUFfQ0hfQkFTRShsY2gpOwotCi0JZm9yIChpID0gMDsgaSA8IDB4MmM7IGkgKz0gMikKLQkJX19yYXdfd3JpdGV3KDAsIGxjaF9iYXNlICsgaSk7Ci19Ci0KIHZvaWQgb21hcF9zZXRfZG1hX3ByaW9yaXR5KGludCBsY2gsIGludCBkc3RfcG9ydCwgaW50IHByaW9yaXR5KQogewogCXVuc2lnbmVkIGxvbmcgcmVnOwpAQCAtMjQ4LDEyICsxOTgsMTIgQEAKIAlpZiAoY3B1X2NsYXNzX2lzX29tYXAyKCkpIHsKIAkJdTMyIGNjcjsKIAotCQljY3IgPSBkbWFfcmVhZChDQ1IobGNoKSk7CisJCWNjciA9IHAtPmRtYV9yZWFkKENDUiwgbGNoKTsKIAkJaWYgKHByaW9yaXR5KQogCQkJY2NyIHw9ICgxIDw8IDYpOwogCQllbHNlCiAJCQljY3IgJj0gfigxIDw8IDYpOwotCQlkbWFfd3JpdGUoY2NyLCBDQ1IobGNoKSk7CisJCXAtPmRtYV93cml0ZShjY3IsIENDUiwgbGNoKTsKIAl9CiB9CiBFWFBPUlRfU1lNQk9MKG9tYXBfc2V0X2RtYV9wcmlvcml0eSk7CkBAIC0yNjQsMzEgKzIxNCwzMSBAQAogewogCXUzMiBsOwogCi0JbCA9IGRtYV9yZWFkKENTRFAobGNoKSk7CisJbCA9IHAtPmRtYV9yZWFkKENTRFAsIGxjaCk7CiAJbCAmPSB+MHgwMzsKIAlsIHw9IGRhdGFfdHlwZTsKLQlkbWFfd3JpdGUobCwgQ1NEUChsY2gpKTsKKwlwLT5kbWFfd3JpdGUobCwgQ1NEUCwgbGNoKTsKIAogCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkgewogCQl1MTYgY2NyOwogCi0JCWNjciA9IGRtYV9yZWFkKENDUihsY2gpKTsKKwkJY2NyID0gcC0+ZG1hX3JlYWQoQ0NSLCBsY2gpOwogCQljY3IgJj0gfigxIDw8IDUpOwogCQlpZiAoc3luY19tb2RlID09IE9NQVBfRE1BX1NZTkNfRlJBTUUpCiAJCQljY3IgfD0gMSA8PCA1OwotCQlkbWFfd3JpdGUoY2NyLCBDQ1IobGNoKSk7CisJCXAtPmRtYV93cml0ZShjY3IsIENDUiwgbGNoKTsKIAotCQljY3IgPSBkbWFfcmVhZChDQ1IyKGxjaCkpOworCQljY3IgPSBwLT5kbWFfcmVhZChDQ1IyLCBsY2gpOwogCQljY3IgJj0gfigxIDw8IDIpOwogCQlpZiAoc3luY19tb2RlID09IE9NQVBfRE1BX1NZTkNfQkxPQ0spCiAJCQljY3IgfD0gMSA8PCAyOwotCQlkbWFfd3JpdGUoY2NyLCBDQ1IyKGxjaCkpOworCQlwLT5kbWFfd3JpdGUoY2NyLCBDQ1IyLCBsY2gpOwogCX0KIAogCWlmIChjcHVfY2xhc3NfaXNfb21hcDIoKSAmJiBkbWFfdHJpZ2dlcikgewogCQl1MzIgdmFsOwogCi0JCXZhbCA9IGRtYV9yZWFkKENDUihsY2gpKTsKKwkJdmFsID0gcC0+ZG1hX3JlYWQoQ0NSLCBsY2gpOwogCiAJCS8qIERNQV9TWU5DSFJPX0NPTlRST0xfVVBQRVIgZGVwZW5kcyBvbiB0aGUgY2hhbm5lbCBudW1iZXIgKi8KIAkJdmFsICY9IH4oKDEgPDwgMjMpIHwgKDMgPDwgMTkpIHwgMHgxZik7CkBAIC0zMTMsMTEgKzI2MywxMSBAQAogCQl9IGVsc2UgewogCQkJdmFsICY9IH4oMSA8PCAyNCk7CS8qIGRlc3Qgc3luY2ggKi8KIAkJfQotCQlkbWFfd3JpdGUodmFsLCBDQ1IobGNoKSk7CisJCXAtPmRtYV93cml0ZSh2YWwsIENDUiwgbGNoKTsKIAl9CiAKLQlkbWFfd3JpdGUoZWxlbV9jb3VudCwgQ0VOKGxjaCkpOwotCWRtYV93cml0ZShmcmFtZV9jb3VudCwgQ0ZOKGxjaCkpOworCXAtPmRtYV93cml0ZShlbGVtX2NvdW50LCBDRU4sIGxjaCk7CisJcC0+ZG1hX3dyaXRlKGZyYW1lX2NvdW50LCBDRk4sIGxjaCk7CiB9CiBFWFBPUlRfU1lNQk9MKG9tYXBfc2V0X2RtYV90cmFuc2Zlcl9wYXJhbXMpOwogCkBAIC0zMjgsNyArMjc4LDcgQEAKIAlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkpIHsKIAkJdTE2IHc7CiAKLQkJdyA9IGRtYV9yZWFkKENDUjIobGNoKSk7CisJCXcgPSBwLT5kbWFfcmVhZChDQ1IyLCBsY2gpOwogCQl3ICY9IH4weDAzOwogCiAJCXN3aXRjaCAobW9kZSkgewpAQCAtMzQzLDIzICsyOTMsMjIgQEAKIAkJZGVmYXVsdDoKIAkJCUJVRygpOwogCQl9Ci0JCWRtYV93cml0ZSh3LCBDQ1IyKGxjaCkpOworCQlwLT5kbWFfd3JpdGUodywgQ0NSMiwgbGNoKTsKIAotCQl3ID0gZG1hX3JlYWQoTENIX0NUUkwobGNoKSk7CisJCXcgPSBwLT5kbWFfcmVhZChMQ0hfQ1RSTCwgbGNoKTsKIAkJdyAmPSB+MHgwZjsKIAkJLyogRGVmYXVsdCBpcyBjaGFubmVsIHR5cGUgMkQgKi8KIAkJaWYgKG1vZGUpIHsKLQkJCWRtYV93cml0ZSgodTE2KWNvbG9yLCBDT0xPUl9MKGxjaCkpOwotCQkJZG1hX3dyaXRlKCh1MTYpKGNvbG9yID4+IDE2KSwgQ09MT1JfVShsY2gpKTsKKwkJCXAtPmRtYV93cml0ZShjb2xvciwgQ09MT1IsIGxjaCk7CiAJCQl3IHw9IDE7CQkvKiBDaGFubmVsIHR5cGUgRyAqLwogCQl9Ci0JCWRtYV93cml0ZSh3LCBMQ0hfQ1RSTChsY2gpKTsKKwkJcC0+ZG1hX3dyaXRlKHcsIExDSF9DVFJMLCBsY2gpOwogCX0KIAogCWlmIChjcHVfY2xhc3NfaXNfb21hcDIoKSkgewogCQl1MzIgdmFsOwogCi0JCXZhbCA9IGRtYV9yZWFkKENDUihsY2gpKTsKKwkJdmFsID0gcC0+ZG1hX3JlYWQoQ0NSLCBsY2gpOwogCQl2YWwgJj0gfigoMSA8PCAxNykgfCAoMSA8PCAxNikpOwogCiAJCXN3aXRjaCAobW9kZSkgewpAQCAtMzc0LDEwICszMjMsMTAgQEAKIAkJZGVmYXVsdDoKIAkJCUJVRygpOwogCQl9Ci0JCWRtYV93cml0ZSh2YWwsIENDUihsY2gpKTsKKwkJcC0+ZG1hX3dyaXRlKHZhbCwgQ0NSLCBsY2gpOwogCiAJCWNvbG9yICY9IDB4ZmZmZmZmOwotCQlkbWFfd3JpdGUoY29sb3IsIENPTE9SKGxjaCkpOworCQlwLT5kbWFfd3JpdGUoY29sb3IsIENPTE9SLCBsY2gpOwogCX0KIH0KIEVYUE9SVF9TWU1CT0wob21hcF9zZXRfZG1hX2NvbG9yX21vZGUpOwpAQCAtMzg3LDEwICszMzYsMTAgQEAKIAlpZiAoY3B1X2NsYXNzX2lzX29tYXAyKCkpIHsKIAkJdTMyIGNzZHA7CiAKLQkJY3NkcCA9IGRtYV9yZWFkKENTRFAobGNoKSk7CisJCWNzZHAgPSBwLT5kbWFfcmVhZChDU0RQLCBsY2gpOwogCQljc2RwICY9IH4oMHgzIDw8IDE2KTsKIAkJY3NkcCB8PSAobW9kZSA8PCAxNik7Ci0JCWRtYV93cml0ZShjc2RwLCBDU0RQKGxjaCkpOworCQlwLT5kbWFfd3JpdGUoY3NkcCwgQ1NEUCwgbGNoKTsKIAl9CiB9CiBFWFBPUlRfU1lNQk9MKG9tYXBfc2V0X2RtYV93cml0ZV9tb2RlKTsKQEAgLTQwMCwxMCArMzQ5LDEwIEBACiAJaWYgKGNwdV9jbGFzc19pc19vbWFwMSgpICYmICFjcHVfaXNfb21hcDE1eHgoKSkgewogCQl1MzIgbDsKIAotCQlsID0gZG1hX3JlYWQoTENIX0NUUkwobGNoKSk7CisJCWwgPSBwLT5kbWFfcmVhZChMQ0hfQ1RSTCwgbGNoKTsKIAkJbCAmPSB+MHg3OwogCQlsIHw9IG1vZGU7Ci0JCWRtYV93cml0ZShsLCBMQ0hfQ1RSTChsY2gpKTsKKwkJcC0+ZG1hX3dyaXRlKGwsIExDSF9DVFJMLCBsY2gpOwogCX0KIH0KIEVYUE9SVF9TWU1CT0wob21hcF9zZXRfZG1hX2NoYW5uZWxfbW9kZSk7CkBAIC00MTgsMjcgKzM2NywyMSBAQAogCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkgewogCQl1MTYgdzsKIAotCQl3ID0gZG1hX3JlYWQoQ1NEUChsY2gpKTsKKwkJdyA9IHAtPmRtYV9yZWFkKENTRFAsIGxjaCk7CiAJCXcgJj0gfigweDFmIDw8IDIpOwogCQl3IHw9IHNyY19wb3J0IDw8IDI7Ci0JCWRtYV93cml0ZSh3LCBDU0RQKGxjaCkpOworCQlwLT5kbWFfd3JpdGUodywgQ1NEUCwgbGNoKTsKIAl9CiAKLQlsID0gZG1hX3JlYWQoQ0NSKGxjaCkpOworCWwgPSBwLT5kbWFfcmVhZChDQ1IsIGxjaCk7CiAJbCAmPSB+KDB4MDMgPDwgMTIpOwogCWwgfD0gc3JjX2Ftb2RlIDw8IDEyOwotCWRtYV93cml0ZShsLCBDQ1IobGNoKSk7CisJcC0+ZG1hX3dyaXRlKGwsIENDUiwgbGNoKTsKIAotCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkgewotCQlkbWFfd3JpdGUoc3JjX3N0YXJ0ID4+IDE2LCBDU1NBX1UobGNoKSk7Ci0JCWRtYV93cml0ZSgodTE2KXNyY19zdGFydCwgQ1NTQV9MKGxjaCkpOwotCX0KKwlwLT5kbWFfd3JpdGUoc3JjX3N0YXJ0LCBDU1NBLCBsY2gpOwogCi0JaWYgKGNwdV9jbGFzc19pc19vbWFwMigpKQotCQlkbWFfd3JpdGUoc3JjX3N0YXJ0LCBDU1NBKGxjaCkpOwotCi0JZG1hX3dyaXRlKHNyY19laSwgQ1NFSShsY2gpKTsKLQlkbWFfd3JpdGUoc3JjX2ZpLCBDU0ZJKGxjaCkpOworCXAtPmRtYV93cml0ZShzcmNfZWksIENTRUksIGxjaCk7CisJcC0+ZG1hX3dyaXRlKHNyY19maSwgQ1NGSSwgbGNoKTsKIH0KIEVYUE9SVF9TWU1CT0wob21hcF9zZXRfZG1hX3NyY19wYXJhbXMpOwogCkBAIC00NjYsOCArNDA5LDggQEAKIAlpZiAoY3B1X2NsYXNzX2lzX29tYXAyKCkpCiAJCXJldHVybjsKIAotCWRtYV93cml0ZShlaWR4LCBDU0VJKGxjaCkpOwotCWRtYV93cml0ZShmaWR4LCBDU0ZJKGxjaCkpOworCXAtPmRtYV93cml0ZShlaWR4LCBDU0VJLCBsY2gpOworCXAtPmRtYV93cml0ZShmaWR4LCBDU0ZJLCBsY2gpOwogfQogRVhQT1JUX1NZTUJPTChvbWFwX3NldF9kbWFfc3JjX2luZGV4KTsKIApAQCAtNDc1LDExICs0MTgsMTEgQEAKIHsKIAl1MzIgbDsKIAotCWwgPSBkbWFfcmVhZChDU0RQKGxjaCkpOworCWwgPSBwLT5kbWFfcmVhZChDU0RQLCBsY2gpOwogCWwgJj0gfigxIDw8IDYpOwogCWlmIChlbmFibGUpCiAJCWwgfD0gKDEgPDwgNik7Ci0JZG1hX3dyaXRlKGwsIENTRFAobGNoKSk7CisJcC0+ZG1hX3dyaXRlKGwsIENTRFAsIGxjaCk7CiB9CiBFWFBPUlRfU1lNQk9MKG9tYXBfc2V0X2RtYV9zcmNfZGF0YV9wYWNrKTsKIApAQCAtNDg4LDcgKzQzMSw3IEBACiAJdW5zaWduZWQgaW50IGJ1cnN0ID0gMDsKIAl1MzIgbDsKIAotCWwgPSBkbWFfcmVhZChDU0RQKGxjaCkpOworCWwgPSBwLT5kbWFfcmVhZChDU0RQLCBsY2gpOwogCWwgJj0gfigweDAzIDw8IDcpOwogCiAJc3dpdGNoIChidXJzdF9tb2RlKSB7CkBAIC01MjQsNyArNDY3LDcgQEAKIAl9CiAKIAlsIHw9IChidXJzdCA8PCA3KTsKLQlkbWFfd3JpdGUobCwgQ1NEUChsY2gpKTsKKwlwLT5kbWFfd3JpdGUobCwgQ1NEUCwgbGNoKTsKIH0KIEVYUE9SVF9TWU1CT0wob21hcF9zZXRfZG1hX3NyY19idXJzdF9tb2RlKTsKIApAQCAtNTM2LDI3ICs0NzksMjEgQEAKIAl1MzIgbDsKIAogCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkgewotCQlsID0gZG1hX3JlYWQoQ1NEUChsY2gpKTsKKwkJbCA9IHAtPmRtYV9yZWFkKENTRFAsIGxjaCk7CiAJCWwgJj0gfigweDFmIDw8IDkpOwogCQlsIHw9IGRlc3RfcG9ydCA8PCA5OwotCQlkbWFfd3JpdGUobCwgQ1NEUChsY2gpKTsKKwkJcC0+ZG1hX3dyaXRlKGwsIENTRFAsIGxjaCk7CiAJfQogCi0JbCA9IGRtYV9yZWFkKENDUihsY2gpKTsKKwlsID0gcC0+ZG1hX3JlYWQoQ0NSLCBsY2gpOwogCWwgJj0gfigweDAzIDw8IDE0KTsKIAlsIHw9IGRlc3RfYW1vZGUgPDwgMTQ7Ci0JZG1hX3dyaXRlKGwsIENDUihsY2gpKTsKKwlwLT5kbWFfd3JpdGUobCwgQ0NSLCBsY2gpOwogCi0JaWYgKGNwdV9jbGFzc19pc19vbWFwMSgpKSB7Ci0JCWRtYV93cml0ZShkZXN0X3N0YXJ0ID4+IDE2LCBDRFNBX1UobGNoKSk7Ci0JCWRtYV93cml0ZShkZXN0X3N0YXJ0LCBDRFNBX0wobGNoKSk7Ci0JfQorCXAtPmRtYV93cml0ZShkZXN0X3N0YXJ0LCBDRFNBLCBsY2gpOwogCi0JaWYgKGNwdV9jbGFzc19pc19vbWFwMigpKQotCQlkbWFfd3JpdGUoZGVzdF9zdGFydCwgQ0RTQShsY2gpKTsKLQotCWRtYV93cml0ZShkc3RfZWksIENERUkobGNoKSk7Ci0JZG1hX3dyaXRlKGRzdF9maSwgQ0RGSShsY2gpKTsKKwlwLT5kbWFfd3JpdGUoZHN0X2VpLCBDREVJLCBsY2gpOworCXAtPmRtYV93cml0ZShkc3RfZmksIENERkksIGxjaCk7CiB9CiBFWFBPUlRfU1lNQk9MKG9tYXBfc2V0X2RtYV9kZXN0X3BhcmFtcyk7CiAKQEAgLTU2NSw4ICs1MDIsOCBAQAogCWlmIChjcHVfY2xhc3NfaXNfb21hcDIoKSkKIAkJcmV0dXJuOwogCi0JZG1hX3dyaXRlKGVpZHgsIENERUkobGNoKSk7Ci0JZG1hX3dyaXRlKGZpZHgsIENERkkobGNoKSk7CisJcC0+ZG1hX3dyaXRlKGVpZHgsIENERUksIGxjaCk7CisJcC0+ZG1hX3dyaXRlKGZpZHgsIENERkksIGxjaCk7CiB9CiBFWFBPUlRfU1lNQk9MKG9tYXBfc2V0X2RtYV9kZXN0X2luZGV4KTsKIApAQCAtNTc0LDExICs1MTEsMTEgQEAKIHsKIAl1MzIgbDsKIAotCWwgPSBkbWFfcmVhZChDU0RQKGxjaCkpOworCWwgPSBwLT5kbWFfcmVhZChDU0RQLCBsY2gpOwogCWwgJj0gfigxIDw8IDEzKTsKIAlpZiAoZW5hYmxlKQogCQlsIHw9IDEgPDwgMTM7Ci0JZG1hX3dyaXRlKGwsIENTRFAobGNoKSk7CisJcC0+ZG1hX3dyaXRlKGwsIENTRFAsIGxjaCk7CiB9CiBFWFBPUlRfU1lNQk9MKG9tYXBfc2V0X2RtYV9kZXN0X2RhdGFfcGFjayk7CiAKQEAgLTU4Nyw3ICs1MjQsNyBAQAogCXVuc2lnbmVkIGludCBidXJzdCA9IDA7CiAJdTMyIGw7CiAKLQlsID0gZG1hX3JlYWQoQ1NEUChsY2gpKTsKKwlsID0gcC0+ZG1hX3JlYWQoQ1NEUCwgbGNoKTsKIAlsICY9IH4oMHgwMyA8PCAxNCk7CiAKIAlzd2l0Y2ggKGJ1cnN0X21vZGUpIHsKQEAgLTYyMCw3ICs1NTcsNyBAQAogCQlyZXR1cm47CiAJfQogCWwgfD0gKGJ1cnN0IDw8IDE0KTsKLQlkbWFfd3JpdGUobCwgQ1NEUChsY2gpKTsKKwlwLT5kbWFfd3JpdGUobCwgQ1NEUCwgbGNoKTsKIH0KIEVYUE9SVF9TWU1CT0wob21hcF9zZXRfZG1hX2Rlc3RfYnVyc3RfbW9kZSk7CiAKQEAgLTYzMCwxOCArNTY3LDE4IEBACiAKIAkvKiBDbGVhciBDU1IgKi8KIAlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkpCi0JCXN0YXR1cyA9IGRtYV9yZWFkKENTUihsY2gpKTsKKwkJc3RhdHVzID0gcC0+ZG1hX3JlYWQoQ1NSLCBsY2gpOwogCWVsc2UgaWYgKGNwdV9jbGFzc19pc19vbWFwMigpKQotCQlkbWFfd3JpdGUoT01BUDJfRE1BX0NTUl9DTEVBUl9NQVNLLCBDU1IobGNoKSk7CisJCXAtPmRtYV93cml0ZShPTUFQMl9ETUFfQ1NSX0NMRUFSX01BU0ssIENTUiwgbGNoKTsKIAogCS8qIEVuYWJsZSBzb21lIG5pY2UgaW50ZXJydXB0cy4gKi8KLQlkbWFfd3JpdGUoZG1hX2NoYW5bbGNoXS5lbmFibGVkX2lycXMsIENJQ1IobGNoKSk7CisJcC0+ZG1hX3dyaXRlKGRtYV9jaGFuW2xjaF0uZW5hYmxlZF9pcnFzLCBDSUNSLCBsY2gpOwogfQogCiBzdGF0aWMgdm9pZCBvbWFwX2Rpc2FibGVfY2hhbm5lbF9pcnEoaW50IGxjaCkKIHsKIAlpZiAoY3B1X2NsYXNzX2lzX29tYXAyKCkpCi0JCWRtYV93cml0ZSgwLCBDSUNSKGxjaCkpOworCQlwLT5kbWFfd3JpdGUoMCwgQ0lDUiwgbGNoKTsKIH0KIAogdm9pZCBvbWFwX2VuYWJsZV9kbWFfaXJxKGludCBsY2gsIHUxNiBiaXRzKQpAQCAtNjYwLDcgKzU5Nyw3IEBACiB7CiAJdTMyIGw7CiAKLQlsID0gZG1hX3JlYWQoQ0xOS19DVFJMKGxjaCkpOworCWwgPSBwLT5kbWFfcmVhZChDTE5LX0NUUkwsIGxjaCk7CiAKIAlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkpCiAJCWwgJj0gfigxIDw8IDE0KTsKQEAgLTY3NSwxOCArNjEyLDE4IEBACiAJCQlsID0gZG1hX2NoYW5bbGNoXS5uZXh0X2xpbmtlZF9jaCB8ICgxIDw8IDE1KTsKICNlbmRpZgogCi0JZG1hX3dyaXRlKGwsIENMTktfQ1RSTChsY2gpKTsKKwlwLT5kbWFfd3JpdGUobCwgQ0xOS19DVFJMLCBsY2gpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZGlzYWJsZV9sbmsoaW50IGxjaCkKIHsKIAl1MzIgbDsKIAotCWwgPSBkbWFfcmVhZChDTE5LX0NUUkwobGNoKSk7CisJbCA9IHAtPmRtYV9yZWFkKENMTktfQ1RSTCwgbGNoKTsKIAogCS8qIERpc2FibGUgaW50ZXJydXB0cyAqLwogCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkgewotCQlkbWFfd3JpdGUoMCwgQ0lDUihsY2gpKTsKKwkJcC0+ZG1hX3dyaXRlKDAsIENJQ1IsIGxjaCk7CiAJCS8qIFNldCB0aGUgU1RPUF9MTksgYml0ICovCiAJCWwgfD0gMSA8PCAxNDsKIAl9CkBAIC02OTcsNyArNjM0LDcgQEAKIAkJbCAmPSB+KDEgPDwgMTUpOwogCX0KIAotCWRtYV93cml0ZShsLCBDTE5LX0NUUkwobGNoKSk7CisJcC0+ZG1hX3dyaXRlKGwsIENMTktfQ1RSTCwgbGNoKTsKIAlkbWFfY2hhbltsY2hdLmZsYWdzICY9IH5PTUFQX0RNQV9BQ1RJVkU7CiB9CiAKQEAgLTcxMCw5ICs2NDcsOSBAQAogCQlyZXR1cm47CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZG1hX2NoYW5fbG9jaywgZmxhZ3MpOwotCXZhbCA9IGRtYV9yZWFkKElSUUVOQUJMRV9MMCk7CisJdmFsID0gcC0+ZG1hX3JlYWQoSVJRRU5BQkxFX0wwLCBsY2gpOwogCXZhbCB8PSAxIDw8IGxjaDsKLQlkbWFfd3JpdGUodmFsLCBJUlFFTkFCTEVfTDApOworCXAtPmRtYV93cml0ZSh2YWwsIElSUUVOQUJMRV9MMCwgbGNoKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkbWFfY2hhbl9sb2NrLCBmbGFncyk7CiB9CiAKQEAgLTcyNSw5ICs2NjIsOSBAQAogCQlyZXR1cm47CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZG1hX2NoYW5fbG9jaywgZmxhZ3MpOwotCXZhbCA9IGRtYV9yZWFkKElSUUVOQUJMRV9MMCk7CisJdmFsID0gcC0+ZG1hX3JlYWQoSVJRRU5BQkxFX0wwLCBsY2gpOwogCXZhbCAmPSB+KDEgPDwgbGNoKTsKLQlkbWFfd3JpdGUodmFsLCBJUlFFTkFCTEVfTDApOworCXAtPmRtYV93cml0ZSh2YWwsIElSUUVOQUJMRV9MMCwgbGNoKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkbWFfY2hhbl9sb2NrLCBmbGFncyk7CiB9CiAKQEAgLTc1NCw4ICs2OTEsOCBAQAogCWNoYW4gPSBkbWFfY2hhbiArIGZyZWVfY2g7CiAJY2hhbi0+ZGV2X2lkID0gZGV2X2lkOwogCi0JaWYgKGNwdV9jbGFzc19pc19vbWFwMSgpKQotCQljbGVhcl9sY2hfcmVncyhmcmVlX2NoKTsKKwlpZiAocC0+Y2xlYXJfbGNoX3JlZ3MpCisJCXAtPmNsZWFyX2xjaF9yZWdzKGZyZWVfY2gpOwogCiAJaWYgKGNwdV9jbGFzc19pc19vbWFwMigpKQogCQlvbWFwX2NsZWFyX2RtYShmcmVlX2NoKTsKQEAgLTc5MiwxNyArNzI5LDE3IEBACiAJCSAqIERpc2FibGUgdGhlIDE1MTAgY29tcGF0aWJpbGl0eSBtb2RlIGFuZCBzZXQgdGhlIHN5bmMgZGV2aWNlCiAJCSAqIGlkLgogCQkgKi8KLQkJZG1hX3dyaXRlKGRldl9pZCB8ICgxIDw8IDEwKSwgQ0NSKGZyZWVfY2gpKTsKKwkJcC0+ZG1hX3dyaXRlKGRldl9pZCB8ICgxIDw8IDEwKSwgQ0NSLCBmcmVlX2NoKTsKIAl9IGVsc2UgaWYgKGNwdV9pc19vbWFwN3h4KCkgfHwgY3B1X2lzX29tYXAxNXh4KCkpIHsKLQkJZG1hX3dyaXRlKGRldl9pZCwgQ0NSKGZyZWVfY2gpKTsKKwkJcC0+ZG1hX3dyaXRlKGRldl9pZCwgQ0NSLCBmcmVlX2NoKTsKIAl9CiAKIAlpZiAoY3B1X2NsYXNzX2lzX29tYXAyKCkpIHsKIAkJb21hcDJfZW5hYmxlX2lycV9sY2goZnJlZV9jaCk7CiAJCW9tYXBfZW5hYmxlX2NoYW5uZWxfaXJxKGZyZWVfY2gpOwogCQkvKiBDbGVhciB0aGUgQ1NSIHJlZ2lzdGVyIGFuZCBJUlEgc3RhdHVzIHJlZ2lzdGVyICovCi0JCWRtYV93cml0ZShPTUFQMl9ETUFfQ1NSX0NMRUFSX01BU0ssIENTUihmcmVlX2NoKSk7Ci0JCWRtYV93cml0ZSgxIDw8IGZyZWVfY2gsIElSUVNUQVRVU19MMCk7CisJCXAtPmRtYV93cml0ZShPTUFQMl9ETUFfQ1NSX0NMRUFSX01BU0ssIENTUiwgZnJlZV9jaCk7CisJCXAtPmRtYV93cml0ZSgxIDw8IGZyZWVfY2gsIElSUVNUQVRVU19MMCwgMCk7CiAJfQogCiAJKmRtYV9jaF9vdXQgPSBmcmVlX2NoOwpAQCAtODIzLDIzICs3NjAsMjMgQEAKIAogCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkgewogCQkvKiBEaXNhYmxlIGFsbCBETUEgaW50ZXJydXB0cyBmb3IgdGhlIGNoYW5uZWwuICovCi0JCWRtYV93cml0ZSgwLCBDSUNSKGxjaCkpOworCQlwLT5kbWFfd3JpdGUoMCwgQ0lDUiwgbGNoKTsKIAkJLyogTWFrZSBzdXJlIHRoZSBETUEgdHJhbnNmZXIgaXMgc3RvcHBlZC4gKi8KLQkJZG1hX3dyaXRlKDAsIENDUihsY2gpKTsKKwkJcC0+ZG1hX3dyaXRlKDAsIENDUiwgbGNoKTsKIAl9CiAKIAlpZiAoY3B1X2NsYXNzX2lzX29tYXAyKCkpIHsKIAkJb21hcDJfZGlzYWJsZV9pcnFfbGNoKGxjaCk7CiAKIAkJLyogQ2xlYXIgdGhlIENTUiByZWdpc3RlciBhbmQgSVJRIHN0YXR1cyByZWdpc3RlciAqLwotCQlkbWFfd3JpdGUoT01BUDJfRE1BX0NTUl9DTEVBUl9NQVNLLCBDU1IobGNoKSk7Ci0JCWRtYV93cml0ZSgxIDw8IGxjaCwgSVJRU1RBVFVTX0wwKTsKKwkJcC0+ZG1hX3dyaXRlKE9NQVAyX0RNQV9DU1JfQ0xFQVJfTUFTSywgQ1NSLCBsY2gpOworCQlwLT5kbWFfd3JpdGUoMSA8PCBsY2gsIElSUVNUQVRVU19MMCwgbGNoKTsKIAogCQkvKiBEaXNhYmxlIGFsbCBETUEgaW50ZXJydXB0cyBmb3IgdGhlIGNoYW5uZWwuICovCi0JCWRtYV93cml0ZSgwLCBDSUNSKGxjaCkpOworCQlwLT5kbWFfd3JpdGUoMCwgQ0lDUiwgbGNoKTsKIAogCQkvKiBNYWtlIHN1cmUgdGhlIERNQSB0cmFuc2ZlciBpcyBzdG9wcGVkLiAqLwotCQlkbWFfd3JpdGUoMCwgQ0NSKGxjaCkpOworCQlwLT5kbWFfd3JpdGUoMCwgQ0NSLCBsY2gpOwogCQlvbWFwX2NsZWFyX2RtYShsY2gpOwogCX0KIApAQCAtODgwLDcgKzgxNyw3IEBACiAJcmVnIHw9ICgweDMgJiB0cGFyYW1zKSA8PCAxMjsKIAlyZWcgfD0gKGFyYl9yYXRlICYgMHhmZikgPDwgMTY7CiAKLQlkbWFfd3JpdGUocmVnLCBHQ1IpOworCXAtPmRtYV93cml0ZShyZWcsIEdDUiwgMCk7CiB9CiBFWFBPUlRfU1lNQk9MKG9tYXBfZG1hX3NldF9nbG9iYWxfcGFyYW1zKTsKIApAQCAtOTAzLDE0ICs4NDAsMTQgQEAKIAkJcHJpbnRrKEtFUk5fRVJSICJJbnZhbGlkIGNoYW5uZWwgaWRcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JbCA9IGRtYV9yZWFkKENDUihsY2gpKTsKKwlsID0gcC0+ZG1hX3JlYWQoQ0NSLCBsY2gpOwogCWwgJj0gfigoMSA8PCA2KSB8ICgxIDw8IDI2KSk7CiAJaWYgKGNwdV9pc19vbWFwMjQzMCgpIHx8IGNwdV9pc19vbWFwMzR4eCgpIHx8ICBjcHVfaXNfb21hcDQ0eHgoKSkKIAkJbCB8PSAoKHJlYWRfcHJpbyAmIDB4MSkgPDwgNikgfCAoKHdyaXRlX3ByaW8gJiAweDEpIDw8IDI2KTsKIAllbHNlCiAJCWwgfD0gKChyZWFkX3ByaW8gJiAweDEpIDw8IDYpOwogCi0JZG1hX3dyaXRlKGwsIENDUihsY2gpKTsKKwlwLT5kbWFfd3JpdGUobCwgQ0NSLCBsY2gpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC05MjUsMjUgKzg2Miw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQotCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkgewotCQl1MzIgbDsKLQotCQlsID0gZG1hX3JlYWQoQ0NSKGxjaCkpOwotCQlsICY9IH5PTUFQX0RNQV9DQ1JfRU47Ci0JCWRtYV93cml0ZShsLCBDQ1IobGNoKSk7Ci0KLQkJLyogQ2xlYXIgcGVuZGluZyBpbnRlcnJ1cHRzICovCi0JCWwgPSBkbWFfcmVhZChDU1IobGNoKSk7Ci0JfQotCi0JaWYgKGNwdV9jbGFzc19pc19vbWFwMigpKSB7Ci0JCWludCBpOwotCQl2b2lkIF9faW9tZW0gKmxjaF9iYXNlID0gb21hcF9kbWFfYmFzZSArIE9NQVBfRE1BNF9DSF9CQVNFKGxjaCk7Ci0JCWZvciAoaSA9IDA7IGkgPCAweDQ0OyBpICs9IDQpCi0JCQlfX3Jhd193cml0ZWwoMCwgbGNoX2Jhc2UgKyBpKTsKLQl9Ci0KKwlwLT5jbGVhcl9kbWEobGNoKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiBFWFBPUlRfU1lNQk9MKG9tYXBfY2xlYXJfZG1hKTsKQEAgLTk1NywxMyArODc2LDEzIEBACiAJICogYmVmb3JlIHN0YXJ0aW5nIGRtYSB0cmFuc2Zlci4KIAkgKi8KIAlpZiAoY3B1X2lzX29tYXAxNXh4KCkpCi0JCWRtYV93cml0ZSgwLCBDUEMobGNoKSk7CisJCXAtPmRtYV93cml0ZSgwLCBDUEMsIGxjaCk7CiAJZWxzZQotCQlkbWFfd3JpdGUoMCwgQ0RBQyhsY2gpKTsKKwkJcC0+ZG1hX3dyaXRlKDAsIENEQUMsIGxjaCk7CiAKIAlpZiAoIW9tYXBfZG1hX2luXzE1MTBfbW9kZSgpICYmIGRtYV9jaGFuW2xjaF0ubmV4dF9sY2ggIT0gLTEpIHsKIAkJaW50IG5leHRfbGNoLCBjdXJfbGNoOwotCQljaGFyIGRtYV9jaGFuX2xpbmtfbWFwW09NQVBfRE1BNF9MT0dJQ0FMX0RNQV9DSF9DT1VOVF07CisJCWNoYXIgZG1hX2NoYW5fbGlua19tYXBbZG1hX2xjaF9jb3VudF07CiAKIAkJZG1hX2NoYW5fbGlua19tYXBbbGNoXSA9IDE7CiAJCS8qIFNldCB0aGUgbGluayByZWdpc3RlciBvZiB0aGUgZmlyc3QgY2hhbm5lbCAqLwpAQCAtOTg1LDMyICs5MDQsMTggQEAKIAogCQkJY3VyX2xjaCA9IG5leHRfbGNoOwogCQl9IHdoaWxlIChuZXh0X2xjaCAhPSAtMSk7Ci0JfSBlbHNlIGlmIChjcHVfaXNfb21hcDI0MngoKSB8fAotCQkoY3B1X2lzX29tYXAyNDN4KCkgJiYgIG9tYXBfdHlwZSgpIDw9IE9NQVAyNDMwX1JFVl9FUzFfMCkpIHsKLQotCQkvKiBFcnJhdGE6IE5lZWQgdG8gd3JpdGUgbGNoIGV2ZW4gaWYgbm90IHVzaW5nIGNoYWluaW5nICovCi0JCWRtYV93cml0ZShsY2gsIENMTktfQ1RSTChsY2gpKTsKLQl9CisJfSBlbHNlIGlmIChJU19ETUFfRVJSQVRBKERNQV9FUlJBVEFfUEFSQUxMRUxfQ0hBTk5FTFMpKQorCQlwLT5kbWFfd3JpdGUobGNoLCBDTE5LX0NUUkwsIGxjaCk7CiAKIAlvbWFwX2VuYWJsZV9jaGFubmVsX2lycShsY2gpOwogCi0JbCA9IGRtYV9yZWFkKENDUihsY2gpKTsKKwlsID0gcC0+ZG1hX3JlYWQoQ0NSLCBsY2gpOwogCi0JLyoKLQkgKiBFcnJhdGE6IEludGVyIEZyYW1lIERNQSBidWZmZXJpbmcgaXNzdWUgKEFsbCBPTUFQMjQyMCBhbmQKLQkgKiBPTUFQMjQzMEVTMS4wKTogRE1BIHdpbGwgd3JvbmdseSBidWZmZXIgZWxlbWVudHMgaWYgcGFja2luZyBhbmQKLQkgKiBidXJzdGluZyBpcyBlbmFibGVkLiBUaGlzIG1pZ2h0IHJlc3VsdCBpbiBkYXRhIGdldHMgc3RhbGxlZCBpbgotCSAqIEZJRk8gYXQgdGhlIGVuZCBvZiB0aGUgYmxvY2suCi0JICogV29ya2Fyb3VuZDogRE1BIGNoYW5uZWxzIG11c3QgaGF2ZSBCVUZGRVJJTkdfRElTQUJMRUQgYml0IHNldCB0bwotCSAqIGd1YXJhbnRlZSBubyBkYXRhIHdpbGwgc3RheSBpbiB0aGUgRE1BIEZJRk8gaW4gY2FzZSBpbnRlciBmcmFtZQotCSAqIGJ1ZmZlcmluZyBvY2N1cnMuCi0JICovCi0JaWYgKGNwdV9pc19vbWFwMjQyMCgpIHx8Ci0JICAgIChjcHVfaXNfb21hcDI0MzAoKSAmJiAob21hcF90eXBlKCkgPT0gT01BUDI0MzBfUkVWX0VTMV8wKSkpCi0JCWwgfD0gT01BUF9ETUFfQ0NSX0JVRkZFUklOR19ESVNBQkxFOwotCisJaWYgKElTX0RNQV9FUlJBVEEoRE1BX0VSUkFUQV9JRlJBTUVfQlVGRkVSSU5HKSkKKwkJCWwgfD0gT01BUF9ETUFfQ0NSX0JVRkZFUklOR19ESVNBQkxFOwogCWwgfD0gT01BUF9ETUFfQ0NSX0VOOwotCWRtYV93cml0ZShsLCBDQ1IobGNoKSk7CisKKwlwLT5kbWFfd3JpdGUobCwgQ0NSLCBsY2gpOwogCiAJZG1hX2NoYW5bbGNoXS5mbGFncyB8PSBPTUFQX0RNQV9BQ1RJVkU7CiB9CkBAIC0xMDIyLDQ2ICs5MjcsNDYgQEAKIAogCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMgb24gdGhlIGNoYW5uZWwgKi8KIAlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkpCi0JCWRtYV93cml0ZSgwLCBDSUNSKGxjaCkpOworCQlwLT5kbWFfd3JpdGUoMCwgQ0lDUiwgbGNoKTsKIAotCWwgPSBkbWFfcmVhZChDQ1IobGNoKSk7Ci0JLyogT01BUDMgRXJyYXRhIGk1NDE6IHNETUEgRklGTyBkcmFpbmluZyBkb2VzIG5vdCBmaW5pc2ggKi8KLQlpZiAoY3B1X2lzX29tYXAzNHh4KCkgJiYgKGwgJiBPTUFQX0RNQV9DQ1JfU0VMX1NSQ19EU1RfU1lOQykpIHsKKwlsID0gcC0+ZG1hX3JlYWQoQ0NSLCBsY2gpOworCWlmIChJU19ETUFfRVJSQVRBKERNQV9FUlJBVEFfaTU0MSkgJiYKKwkJCShsICYgT01BUF9ETUFfQ0NSX1NFTF9TUkNfRFNUX1NZTkMpKSB7CiAJCWludCBpID0gMDsKIAkJdTMyIHN5c19jZjsKIAogCQkvKiBDb25maWd1cmUgTm8tU3RhbmRieSAqLwotCQlsID0gZG1hX3JlYWQoT0NQX1NZU0NPTkZJRyk7CisJCWwgPSBwLT5kbWFfcmVhZChPQ1BfU1lTQ09ORklHLCBsY2gpOwogCQlzeXNfY2YgPSBsOwogCQlsICY9IH5ETUFfU1lTQ09ORklHX01JRExFTU9ERV9NQVNLOwogCQlsIHw9IERNQV9TWVNDT05GSUdfTUlETEVNT0RFKERNQV9JRExFTU9ERV9OT19JRExFKTsKLQkJZG1hX3dyaXRlKGwgLCBPQ1BfU1lTQ09ORklHKTsKKwkJcC0+ZG1hX3dyaXRlKGwgLCBPQ1BfU1lTQ09ORklHLCAwKTsKIAotCQlsID0gZG1hX3JlYWQoQ0NSKGxjaCkpOworCQlsID0gcC0+ZG1hX3JlYWQoQ0NSLCBsY2gpOwogCQlsICY9IH5PTUFQX0RNQV9DQ1JfRU47Ci0JCWRtYV93cml0ZShsLCBDQ1IobGNoKSk7CisJCXAtPmRtYV93cml0ZShsLCBDQ1IsIGxjaCk7CiAKIAkJLyogV2FpdCBmb3Igc0RNQSBGSUZPIGRyYWluICovCi0JCWwgPSBkbWFfcmVhZChDQ1IobGNoKSk7CisJCWwgPSBwLT5kbWFfcmVhZChDQ1IsIGxjaCk7CiAJCXdoaWxlIChpIDwgMTAwICYmIChsICYgKE9NQVBfRE1BX0NDUl9SRF9BQ1RJVkUgfAogCQkJCQlPTUFQX0RNQV9DQ1JfV1JfQUNUSVZFKSkpIHsKIAkJCXVkZWxheSg1KTsKIAkJCWkrKzsKLQkJCWwgPSBkbWFfcmVhZChDQ1IobGNoKSk7CisJCQlsID0gcC0+ZG1hX3JlYWQoQ0NSLCBsY2gpOwogCQl9CiAJCWlmIChpID49IDEwMCkKIAkJCXByaW50ayhLRVJOX0VSUiAiRE1BIGRyYWluIGRpZCBub3QgY29tcGxldGUgb24gIgogCQkJCQkibGNoICVkXG4iLCBsY2gpOwogCQkvKiBSZXN0b3JlIE9DUF9TWVNDT05GSUcgKi8KLQkJZG1hX3dyaXRlKHN5c19jZiwgT0NQX1NZU0NPTkZJRyk7CisJCXAtPmRtYV93cml0ZShzeXNfY2YsIE9DUF9TWVNDT05GSUcsIGxjaCk7CiAJfSBlbHNlIHsKIAkJbCAmPSB+T01BUF9ETUFfQ0NSX0VOOwotCQlkbWFfd3JpdGUobCwgQ0NSKGxjaCkpOworCQlwLT5kbWFfd3JpdGUobCwgQ0NSLCBsY2gpOwogCX0KIAogCWlmICghb21hcF9kbWFfaW5fMTUxMF9tb2RlKCkgJiYgZG1hX2NoYW5bbGNoXS5uZXh0X2xjaCAhPSAtMSkgewogCQlpbnQgbmV4dF9sY2gsIGN1cl9sY2ggPSBsY2g7Ci0JCWNoYXIgZG1hX2NoYW5fbGlua19tYXBbT01BUF9ETUE0X0xPR0lDQUxfRE1BX0NIX0NPVU5UXTsKKwkJY2hhciBkbWFfY2hhbl9saW5rX21hcFtkbWFfbGNoX2NvdW50XTsKIAogCQltZW1zZXQoZG1hX2NoYW5fbGlua19tYXAsIDAsIHNpemVvZihkbWFfY2hhbl9saW5rX21hcCkpOwogCQlkbyB7CkBAIC0xMTIyLDE5ICsxMDI3LDE1IEBACiAJZG1hX2FkZHJfdCBvZmZzZXQgPSAwOwogCiAJaWYgKGNwdV9pc19vbWFwMTV4eCgpKQotCQlvZmZzZXQgPSBkbWFfcmVhZChDUEMobGNoKSk7CisJCW9mZnNldCA9IHAtPmRtYV9yZWFkKENQQywgbGNoKTsKIAllbHNlCi0JCW9mZnNldCA9IGRtYV9yZWFkKENTQUMobGNoKSk7CisJCW9mZnNldCA9IHAtPmRtYV9yZWFkKENTQUMsIGxjaCk7CiAKLQkvKgotCSAqIG9tYXAgMy4yLzMuMyBlcnJhdHVtOiBzb21ldGltZXMgMCBpcyByZXR1cm5lZCBpZiBDU0FDL0NEQUMgaXMKLQkgKiByZWFkIGJlZm9yZSB0aGUgRE1BIGNvbnRyb2xsZXIgZmluaXNoZWQgZGlzYWJsaW5nIHRoZSBjaGFubmVsLgotCSAqLwotCWlmICghY3B1X2lzX29tYXAxNXh4KCkgJiYgb2Zmc2V0ID09IDApCi0JCW9mZnNldCA9IGRtYV9yZWFkKENTQUMobGNoKSk7CisJaWYgKElTX0RNQV9FUlJBVEEoRE1BX0VSUkFUQV8zXzMpICYmIG9mZnNldCA9PSAwKQorCQlvZmZzZXQgPSBwLT5kbWFfcmVhZChDU0FDLCBsY2gpOwogCiAJaWYgKGNwdV9jbGFzc19pc19vbWFwMSgpKQotCQlvZmZzZXQgfD0gKGRtYV9yZWFkKENTU0FfVShsY2gpKSA8PCAxNik7CisJCW9mZnNldCB8PSAocC0+ZG1hX3JlYWQoQ1NTQSwgbGNoKSAmIDB4RkZGRjAwMDApOwogCiAJcmV0dXJuIG9mZnNldDsKIH0KQEAgLTExNTMsMTkgKzEwNTQsMTkgQEAKIAlkbWFfYWRkcl90IG9mZnNldCA9IDA7CiAKIAlpZiAoY3B1X2lzX29tYXAxNXh4KCkpCi0JCW9mZnNldCA9IGRtYV9yZWFkKENQQyhsY2gpKTsKKwkJb2Zmc2V0ID0gcC0+ZG1hX3JlYWQoQ1BDLCBsY2gpOwogCWVsc2UKLQkJb2Zmc2V0ID0gZG1hX3JlYWQoQ0RBQyhsY2gpKTsKKwkJb2Zmc2V0ID0gcC0+ZG1hX3JlYWQoQ0RBQywgbGNoKTsKIAogCS8qCiAJICogb21hcCAzLjIvMy4zIGVycmF0dW06IHNvbWV0aW1lcyAwIGlzIHJldHVybmVkIGlmIENTQUMvQ0RBQyBpcwogCSAqIHJlYWQgYmVmb3JlIHRoZSBETUEgY29udHJvbGxlciBmaW5pc2hlZCBkaXNhYmxpbmcgdGhlIGNoYW5uZWwuCiAJICovCiAJaWYgKCFjcHVfaXNfb21hcDE1eHgoKSAmJiBvZmZzZXQgPT0gMCkKLQkJb2Zmc2V0ID0gZG1hX3JlYWQoQ0RBQyhsY2gpKTsKKwkJb2Zmc2V0ID0gcC0+ZG1hX3JlYWQoQ0RBQywgbGNoKTsKIAogCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkKLQkJb2Zmc2V0IHw9IChkbWFfcmVhZChDRFNBX1UobGNoKSkgPDwgMTYpOworCQlvZmZzZXQgfD0gKHAtPmRtYV9yZWFkKENEU0EsIGxjaCkgJiAweEZGRkYwMDAwKTsKIAogCXJldHVybiBvZmZzZXQ7CiB9CkBAIC0xMTczLDcgKzEwNzQsNyBAQAogCiBpbnQgb21hcF9nZXRfZG1hX2FjdGl2ZV9zdGF0dXMoaW50IGxjaCkKIHsKLQlyZXR1cm4gKGRtYV9yZWFkKENDUihsY2gpKSAmIE9NQVBfRE1BX0NDUl9FTikgIT0gMDsKKwlyZXR1cm4gKHAtPmRtYV9yZWFkKENDUiwgbGNoKSAmIE9NQVBfRE1BX0NDUl9FTikgIT0gMDsKIH0KIEVYUE9SVF9TWU1CT0wob21hcF9nZXRfZG1hX2FjdGl2ZV9zdGF0dXMpOwogCkBAIC0xMTg2LDcgKzEwODcsNyBAQAogCQkJcmV0dXJuIDE7CiAKIAlmb3IgKGxjaCA9IDA7IGxjaCA8IGRtYV9jaGFuX2NvdW50OyBsY2grKykKLQkJaWYgKGRtYV9yZWFkKENDUihsY2gpKSAmIE9NQVBfRE1BX0NDUl9FTikKKwkJaWYgKHAtPmRtYV9yZWFkKENDUiwgbGNoKSAmIE9NQVBfRE1BX0NDUl9FTikKIAkJCXJldHVybiAxOwogCiAJcmV0dXJuIDA7CkBAIC0xMjAxLDggKzExMDIsOCBAQAogewogCWlmIChvbWFwX2RtYV9pbl8xNTEwX21vZGUoKSkgewogCQlpZiAobGNoX2hlYWQgPT0gbGNoX3F1ZXVlKSB7Ci0JCQlkbWFfd3JpdGUoZG1hX3JlYWQoQ0NSKGxjaF9oZWFkKSkgfCAoMyA8PCA4KSwKLQkJCQkJCQkJQ0NSKGxjaF9oZWFkKSk7CisJCQlwLT5kbWFfd3JpdGUocC0+ZG1hX3JlYWQoQ0NSLCBsY2hfaGVhZCkgfCAoMyA8PCA4KSwKKwkJCQkJCQkJQ0NSLCBsY2hfaGVhZCk7CiAJCQlyZXR1cm47CiAJCX0KIAkJcHJpbnRrKEtFUk5fRVJSICJETUEgbGlua2luZyBpcyBub3Qgc3VwcG9ydGVkIGluIDE1MTAgbW9kZVxuIik7CkBAIC0xMjI4LDggKzExMjksOCBAQAogewogCWlmIChvbWFwX2RtYV9pbl8xNTEwX21vZGUoKSkgewogCQlpZiAobGNoX2hlYWQgPT0gbGNoX3F1ZXVlKSB7Ci0JCQlkbWFfd3JpdGUoZG1hX3JlYWQoQ0NSKGxjaF9oZWFkKSkgJiB+KDMgPDwgOCksCi0JCQkJCQkJCUNDUihsY2hfaGVhZCkpOworCQkJcC0+ZG1hX3dyaXRlKHAtPmRtYV9yZWFkKENDUiwgbGNoX2hlYWQpICYgfigzIDw8IDgpLAorCQkJCQkJCQlDQ1IsIGxjaF9oZWFkKTsKIAkJCXJldHVybjsKIAkJfQogCQlwcmludGsoS0VSTl9FUlIgIkRNQSBsaW5raW5nIGlzIG5vdCBzdXBwb3J0ZWQgaW4gMTUxMCBtb2RlXG4iKTsKQEAgLTEyNTUsOCArMTE1Niw2IEBACiB9CiBFWFBPUlRfU1lNQk9MKG9tYXBfZG1hX3VubGlua19sY2gpOwogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCiAjaWZuZGVmIENPTkZJR19BUkNIX09NQVAxCiAvKiBDcmVhdGUgY2hhaW4gb2YgRE1BIGNoYW5uZXNscyAqLwogc3RhdGljIHZvaWQgY3JlYXRlX2RtYV9sY2hfY2hhaW4oaW50IGxjaF9oZWFkLCBpbnQgbGNoX3F1ZXVlKQpAQCAtMTI4MSwxNSArMTE4MCwxNSBAQAogCQkJCQlsY2hfcXVldWU7CiAJfQogCi0JbCA9IGRtYV9yZWFkKENMTktfQ1RSTChsY2hfaGVhZCkpOworCWwgPSBwLT5kbWFfcmVhZChDTE5LX0NUUkwsIGxjaF9oZWFkKTsKIAlsICY9IH4oMHgxZik7CiAJbCB8PSBsY2hfcXVldWU7Ci0JZG1hX3dyaXRlKGwsIENMTktfQ1RSTChsY2hfaGVhZCkpOworCXAtPmRtYV93cml0ZShsLCBDTE5LX0NUUkwsIGxjaF9oZWFkKTsKIAotCWwgPSBkbWFfcmVhZChDTE5LX0NUUkwobGNoX3F1ZXVlKSk7CisJbCA9IHAtPmRtYV9yZWFkKENMTktfQ1RSTCwgbGNoX3F1ZXVlKTsKIAlsICY9IH4oMHgxZik7CiAJbCB8PSAoZG1hX2NoYW5bbGNoX3F1ZXVlXS5uZXh0X2xpbmtlZF9jaCk7Ci0JZG1hX3dyaXRlKGwsIENMTktfQ1RSTChsY2hfcXVldWUpKTsKKwlwLT5kbWFfd3JpdGUobCwgQ0xOS19DVFJMLCBsY2hfcXVldWUpOwogfQogCiAvKioKQEAgLTE1NjUsMTMgKzE0NjQsMTMgQEAKIAogCS8qIFNldCB0aGUgcGFyYW1zIHRvIHRoZSBmcmVlIGNoYW5uZWwgKi8KIAlpZiAoc3JjX3N0YXJ0ICE9IDApCi0JCWRtYV93cml0ZShzcmNfc3RhcnQsIENTU0EobGNoKSk7CisJCXAtPmRtYV93cml0ZShzcmNfc3RhcnQsIENTU0EsIGxjaCk7CiAJaWYgKGRlc3Rfc3RhcnQgIT0gMCkKLQkJZG1hX3dyaXRlKGRlc3Rfc3RhcnQsIENEU0EobGNoKSk7CisJCXAtPmRtYV93cml0ZShkZXN0X3N0YXJ0LCBDRFNBLCBsY2gpOwogCiAJLyogV3JpdGUgdGhlIGJ1ZmZlciBzaXplICovCi0JZG1hX3dyaXRlKGVsZW1fY291bnQsIENFTihsY2gpKTsKLQlkbWFfd3JpdGUoZnJhbWVfY291bnQsIENGTihsY2gpKTsKKwlwLT5kbWFfd3JpdGUoZWxlbV9jb3VudCwgQ0VOLCBsY2gpOworCXAtPmRtYV93cml0ZShmcmFtZV9jb3VudCwgQ0ZOLCBsY2gpOwogCiAJLyoKIAkgKiBJZiB0aGUgY2hhaW4gaXMgZHluYW1pY2FsbHkgbGlua2VkLApAQCAtMTYwNCw4ICsxNTAzLDggQEAKIAkJCQllbmFibGVfbG5rKGRtYV9jaGFuW2xjaF0ucHJldl9saW5rZWRfY2gpOwogCQkJCWRtYV9jaGFuW2xjaF0uc3RhdGUgPSBETUFfQ0hfUVVFVUVEOwogCQkJCXN0YXJ0X2RtYSA9IDA7Ci0JCQkJaWYgKDAgPT0gKCgxIDw8IDcpICYgZG1hX3JlYWQoCi0JCQkJCUNDUihkbWFfY2hhbltsY2hdLnByZXZfbGlua2VkX2NoKSkpKSB7CisJCQkJaWYgKDAgPT0gKCgxIDw8IDcpICYgcC0+ZG1hX3JlYWQoCisJCQkJCUNDUiwgZG1hX2NoYW5bbGNoXS5wcmV2X2xpbmtlZF9jaCkpKSB7CiAJCQkJCWRpc2FibGVfbG5rKGRtYV9jaGFuW2xjaF0uCiAJCQkJCQkgICAgcHJldl9saW5rZWRfY2gpOwogCQkJCQlwcl9kZWJ1ZygiXG4gcHJldiBjaCBpcyBzdG9wcGVkXG4iKTsKQEAgLTE2MjEsNyArMTUyMCw3IEBACiAJCQl9CiAJCQlvbWFwX2VuYWJsZV9jaGFubmVsX2lycShsY2gpOwogCi0JCQlsID0gZG1hX3JlYWQoQ0NSKGxjaCkpOworCQkJbCA9IHAtPmRtYV9yZWFkKENDUiwgbGNoKTsKIAogCQkJaWYgKCgwID09IChsICYgKDEgPDwgMjQpKSkpCiAJCQkJbCAmPSB+KDEgPDwgMjUpOwpAQCAtMTYzMiwxMiArMTUzMSwxMiBAQAogCQkJCQlsIHw9ICgxIDw8IDcpOwogCQkJCQlkbWFfY2hhbltsY2hdLnN0YXRlID0gRE1BX0NIX1NUQVJURUQ7CiAJCQkJCXByX2RlYnVnKCJzdGFydGluZyAlZFxuIiwgbGNoKTsKLQkJCQkJZG1hX3dyaXRlKGwsIENDUihsY2gpKTsKKwkJCQkJcC0+ZG1hX3dyaXRlKGwsIENDUiwgbGNoKTsKIAkJCQl9IGVsc2UKIAkJCQkJc3RhcnRfZG1hID0gMDsKIAkJCX0gZWxzZSB7CiAJCQkJaWYgKDAgPT0gKGwgJiAoMSA8PCA3KSkpCi0JCQkJCWRtYV93cml0ZShsLCBDQ1IobGNoKSk7CisJCQkJCXAtPmRtYV93cml0ZShsLCBDQ1IsIGxjaCk7CiAJCQl9CiAJCQlkbWFfY2hhbltsY2hdLmZsYWdzIHw9IE9NQVBfRE1BX0FDVElWRTsKIAkJfQpAQCAtMTY4Miw3ICsxNTgxLDcgQEAKIAkJb21hcF9lbmFibGVfY2hhbm5lbF9pcnEoY2hhbm5lbHNbMF0pOwogCX0KIAotCWwgPSBkbWFfcmVhZChDQ1IoY2hhbm5lbHNbMF0pKTsKKwlsID0gcC0+ZG1hX3JlYWQoQ0NSLCBjaGFubmVsc1swXSk7CiAJbCB8PSAoMSA8PCA3KTsKIAlkbWFfbGlua2VkX2xjaFtjaGFpbl9pZF0uY2hhaW5fc3RhdGUgPSBETUFfQ0hBSU5fU1RBUlRFRDsKIAlkbWFfY2hhbltjaGFubmVsc1swXV0uc3RhdGUgPSBETUFfQ0hfU1RBUlRFRDsKQEAgLTE2OTEsNyArMTU5MCw3IEBACiAJCWwgJj0gfigxIDw8IDI1KTsKIAllbHNlCiAJCWwgfD0gKDEgPDwgMjUpOwotCWRtYV93cml0ZShsLCBDQ1IoY2hhbm5lbHNbMF0pKTsKKwlwLT5kbWFfd3JpdGUobCwgQ0NSLCBjaGFubmVsc1swXSk7CiAKIAlkbWFfY2hhbltjaGFubmVsc1swXV0uZmxhZ3MgfD0gT01BUF9ETUFfQUNUSVZFOwogCkBAIC0xNzExLDcgKzE2MTAsNyBAQAogewogCWludCAqY2hhbm5lbHM7CiAJdTMyIGwsIGk7Ci0JdTMyIHN5c19jZjsKKwl1MzIgc3lzX2NmID0gMDsKIAogCS8qIENoZWNrIGZvciBpbnB1dCBwYXJhbXMgKi8KIAlpZiAodW5saWtlbHkoKGNoYWluX2lkIDwgMCB8fCBjaGFpbl9pZCA+PSBkbWFfbGNoX2NvdW50KSkpIHsKQEAgLTE3MjYsMjIgKzE2MjUsMjAgQEAKIAl9CiAJY2hhbm5lbHMgPSBkbWFfbGlua2VkX2xjaFtjaGFpbl9pZF0ubGlua2VkX2RtYWNoX3E7CiAKLQkvKgotCSAqIERNQSBFcnJhdGE6Ci0JICogU3BlY2lhbCBwcm9ncmFtbWluZyBtb2RlbCBuZWVkZWQgdG8gZGlzYWJsZSBETUEgYmVmb3JlIGVuZCBvZiBibG9jawotCSAqLwotCXN5c19jZiA9IGRtYV9yZWFkKE9DUF9TWVNDT05GSUcpOwotCWwgPSBzeXNfY2Y7Ci0JLyogTWlkZGxlIG1vZGUgcmVnIHNldCBubyBTdGFuZGJ5ICovCi0JbCAmPSB+KCgxIDw8IDEyKXwoMSA8PCAxMykpOwotCWRtYV93cml0ZShsLCBPQ1BfU1lTQ09ORklHKTsKKwlpZiAoSVNfRE1BX0VSUkFUQShETUFfRVJSQVRBX2k4OCkpIHsKKwkJc3lzX2NmID0gcC0+ZG1hX3JlYWQoT0NQX1NZU0NPTkZJRywgMCk7CisJCWwgPSBzeXNfY2Y7CisJCS8qIE1pZGRsZSBtb2RlIHJlZyBzZXQgbm8gU3RhbmRieSAqLworCQlsICY9IH4oKDEgPDwgMTIpfCgxIDw8IDEzKSk7CisJCXAtPmRtYV93cml0ZShsLCBPQ1BfU1lTQ09ORklHLCAwKTsKKwl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgZG1hX2xpbmtlZF9sY2hbY2hhaW5faWRdLm5vX29mX2xjaHNfbGlua2VkOyBpKyspIHsKIAogCQkvKiBTdG9wIHRoZSBDaGFubmVsIHRyYW5zbWlzc2lvbiAqLwotCQlsID0gZG1hX3JlYWQoQ0NSKGNoYW5uZWxzW2ldKSk7CisJCWwgPSBwLT5kbWFfcmVhZChDQ1IsIGNoYW5uZWxzW2ldKTsKIAkJbCAmPSB+KDEgPDwgNyk7Ci0JCWRtYV93cml0ZShsLCBDQ1IoY2hhbm5lbHNbaV0pKTsKKwkJcC0+ZG1hX3dyaXRlKGwsIENDUiwgY2hhbm5lbHNbaV0pOwogCiAJCS8qIERpc2FibGUgdGhlIGxpbmsgaW4gYWxsIHRoZSBjaGFubmVscyAqLwogCQlkaXNhYmxlX2xuayhjaGFubmVsc1tpXSk7CkBAIC0xNzUzLDggKzE2NTAsOCBAQAogCS8qIFJlc2V0IHRoZSBRdWV1ZSBwb2ludGVycyAqLwogCU9NQVBfRE1BX0NIQUlOX1FJTklUKGNoYWluX2lkKTsKIAotCS8qIEVycmF0YSAtIHB1dCBpbiB0aGUgb2xkIHZhbHVlICovCi0JZG1hX3dyaXRlKHN5c19jZiwgT0NQX1NZU0NPTkZJRyk7CisJaWYgKElTX0RNQV9FUlJBVEEoRE1BX0VSUkFUQV9pODgpKQorCQlwLT5kbWFfd3JpdGUoc3lzX2NmLCBPQ1BfU1lTQ09ORklHLCAwKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTc5Niw4ICsxNjkzLDggQEAKIAkvKiBHZXQgdGhlIGN1cnJlbnQgY2hhbm5lbCAqLwogCWxjaCA9IGNoYW5uZWxzW2RtYV9saW5rZWRfbGNoW2NoYWluX2lkXS5xX2hlYWRdOwogCi0JKmVpID0gZG1hX3JlYWQoQ0NFTihsY2gpKTsKLQkqZmkgPSBkbWFfcmVhZChDQ0ZOKGxjaCkpOworCSplaSA9IHAtPmRtYV9yZWFkKENDRU4sIGxjaCk7CisJKmZpID0gcC0+ZG1hX3JlYWQoQ0NGTiwgbGNoKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTgzNCw3ICsxNzMxLDcgQEAKIAkvKiBHZXQgdGhlIGN1cnJlbnQgY2hhbm5lbCAqLwogCWxjaCA9IGNoYW5uZWxzW2RtYV9saW5rZWRfbGNoW2NoYWluX2lkXS5xX2hlYWRdOwogCi0JcmV0dXJuIGRtYV9yZWFkKENEQUMobGNoKSk7CisJcmV0dXJuIHAtPmRtYV9yZWFkKENEQUMsIGxjaCk7CiB9CiBFWFBPUlRfU1lNQk9MKG9tYXBfZ2V0X2RtYV9jaGFpbl9kc3RfcG9zKTsKIApAQCAtMTg2OCw3ICsxNzY1LDcgQEAKIAkvKiBHZXQgdGhlIGN1cnJlbnQgY2hhbm5lbCAqLwogCWxjaCA9IGNoYW5uZWxzW2RtYV9saW5rZWRfbGNoW2NoYWluX2lkXS5xX2hlYWRdOwogCi0JcmV0dXJuIGRtYV9yZWFkKENTQUMobGNoKSk7CisJcmV0dXJuIHAtPmRtYV9yZWFkKENTQUMsIGxjaCk7CiB9CiBFWFBPUlRfU1lNQk9MKG9tYXBfZ2V0X2RtYV9jaGFpbl9zcmNfcG9zKTsKICNlbmRpZgkvKiBpZm5kZWYgQ09ORklHX0FSQ0hfT01BUDEgKi8KQEAgLTE4ODUsNyArMTc4Miw3IEBACiAJCWNzciA9IGRtYV9jaGFuW2NoXS5zYXZlZF9jc3I7CiAJCWRtYV9jaGFuW2NoXS5zYXZlZF9jc3IgPSAwOwogCX0gZWxzZQotCQljc3IgPSBkbWFfcmVhZChDU1IoY2gpKTsKKwkJY3NyID0gcC0+ZG1hX3JlYWQoQ1NSLCBjaCk7CiAJaWYgKGVuYWJsZV8xNTEwX21vZGUgJiYgY2ggPD0gMiAmJiAoY3NyID4+IDcpICE9IDApIHsKIAkJZG1hX2NoYW5bY2ggKyA2XS5zYXZlZF9jc3IgPSBjc3IgPj4gNzsKIAkJY3NyICY9IDB4N2Y7CkBAIC0xOTM4LDEzICsxODM1LDEzIEBACiAKIHN0YXRpYyBpbnQgb21hcDJfZG1hX2hhbmRsZV9jaChpbnQgY2gpCiB7Ci0JdTMyIHN0YXR1cyA9IGRtYV9yZWFkKENTUihjaCkpOworCXUzMiBzdGF0dXMgPSBwLT5kbWFfcmVhZChDU1IsIGNoKTsKIAogCWlmICghc3RhdHVzKSB7CiAJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJTcHVyaW91cyBETUEgSVJRIGZvciBsY2ggJWRcbiIsCiAJCQkJY2gpOwotCQlkbWFfd3JpdGUoMSA8PCBjaCwgSVJRU1RBVFVTX0wwKTsKKwkJcC0+ZG1hX3dyaXRlKDEgPDwgY2gsIElSUVNUQVRVU19MMCwgY2gpOwogCQlyZXR1cm4gMDsKIAl9CiAJaWYgKHVubGlrZWx5KGRtYV9jaGFuW2NoXS5kZXZfaWQgPT0gLTEpKSB7CkBAIC0xOTYwLDE3ICsxODU3LDEyIEBACiAJaWYgKHVubGlrZWx5KHN0YXR1cyAmIE9NQVAyX0RNQV9UUkFOU19FUlJfSVJRKSkgewogCQlwcmludGsoS0VSTl9JTkZPICJETUEgdHJhbnNhY3Rpb24gZXJyb3Igd2l0aCBkZXZpY2UgJWRcbiIsCiAJCSAgICAgICBkbWFfY2hhbltjaF0uZGV2X2lkKTsKLQkJaWYgKGNwdV9jbGFzc19pc19vbWFwMigpKSB7Ci0JCQkvKgotCQkJICogRXJyYXRhOiBzRE1BIENoYW5uZWwgaXMgbm90IGRpc2FibGVkCi0JCQkgKiBhZnRlciBhIHRyYW5zYWN0aW9uIGVycm9yLiBTbyB3ZSBleHBsaWNpdGVseQotCQkJICogZGlzYWJsZSB0aGUgY2hhbm5lbAotCQkJICovCisJCWlmIChJU19ETUFfRVJSQVRBKERNQV9FUlJBVEFfaTM3OCkpIHsKIAkJCXUzMiBjY3I7CiAKLQkJCWNjciA9IGRtYV9yZWFkKENDUihjaCkpOworCQkJY2NyID0gcC0+ZG1hX3JlYWQoQ0NSLCBjaCk7CiAJCQljY3IgJj0gfk9NQVBfRE1BX0NDUl9FTjsKLQkJCWRtYV93cml0ZShjY3IsIENDUihjaCkpOworCQkJcC0+ZG1hX3dyaXRlKGNjciwgQ0NSLCBjaCk7CiAJCQlkbWFfY2hhbltjaF0uZmxhZ3MgJj0gfk9NQVBfRE1BX0FDVElWRTsKIAkJfQogCX0KQEAgLTE5ODEsMTYgKzE4NzMsMTYgQEAKIAkJcHJpbnRrKEtFUk5fSU5GTyAiRE1BIG1pc2FsaWduZWQgZXJyb3Igd2l0aCBkZXZpY2UgJWRcbiIsCiAJCSAgICAgICBkbWFfY2hhbltjaF0uZGV2X2lkKTsKIAotCWRtYV93cml0ZShPTUFQMl9ETUFfQ1NSX0NMRUFSX01BU0ssIENTUihjaCkpOwotCWRtYV93cml0ZSgxIDw8IGNoLCBJUlFTVEFUVVNfTDApOworCXAtPmRtYV93cml0ZShPTUFQMl9ETUFfQ1NSX0NMRUFSX01BU0ssIENTUiwgY2gpOworCXAtPmRtYV93cml0ZSgxIDw8IGNoLCBJUlFTVEFUVVNfTDAsIGNoKTsKIAkvKiByZWFkIGJhY2sgdGhlIHJlZ2lzdGVyIHRvIGZsdXNoIHRoZSB3cml0ZSAqLwotCWRtYV9yZWFkKElSUVNUQVRVU19MMCk7CisJcC0+ZG1hX3JlYWQoSVJRU1RBVFVTX0wwLCBjaCk7CiAKIAkvKiBJZiB0aGUgY2ggaXMgbm90IGNoYWluZWQgdGhlbiBjaGFpbl9pZCB3aWxsIGJlIC0xICovCiAJaWYgKGRtYV9jaGFuW2NoXS5jaGFpbl9pZCAhPSAtMSkgewogCQlpbnQgY2hhaW5faWQgPSBkbWFfY2hhbltjaF0uY2hhaW5faWQ7CiAJCWRtYV9jaGFuW2NoXS5zdGF0ZSA9IERNQV9DSF9OT1RTVEFSVEVEOwotCQlpZiAoZG1hX3JlYWQoQ0xOS19DVFJMKGNoKSkgJiAoMSA8PCAxNSkpCisJCWlmIChwLT5kbWFfcmVhZChDTE5LX0NUUkwsIGNoKSAmICgxIDw8IDE1KSkKIAkJCWRtYV9jaGFuW2RtYV9jaGFuW2NoXS5uZXh0X2xpbmtlZF9jaF0uc3RhdGUgPQogCQkJCQkJCURNQV9DSF9TVEFSVEVEOwogCQlpZiAoZG1hX2xpbmtlZF9sY2hbY2hhaW5faWRdLmNoYWluX21vZGUgPT0KQEAgLTIwMDAsMTAgKzE4OTIsMTAgQEAKIAkJaWYgKCFPTUFQX0RNQV9DSEFJTl9RRU1QVFkoY2hhaW5faWQpKQogCQkJT01BUF9ETUFfQ0hBSU5fSU5DUUhFQUQoY2hhaW5faWQpOwogCi0JCXN0YXR1cyA9IGRtYV9yZWFkKENTUihjaCkpOworCQlzdGF0dXMgPSBwLT5kbWFfcmVhZChDU1IsIGNoKTsKIAl9CiAKLQlkbWFfd3JpdGUoc3RhdHVzLCBDU1IoY2gpKTsKKwlwLT5kbWFfd3JpdGUoc3RhdHVzLCBDU1IsIGNoKTsKIAogCWlmIChsaWtlbHkoZG1hX2NoYW5bY2hdLmNhbGxiYWNrICE9IE5VTEwpKQogCQlkbWFfY2hhbltjaF0uY2FsbGJhY2soY2gsIHN0YXR1cywgZG1hX2NoYW5bY2hdLmRhdGEpOwpAQCAtMjAxNywxMyArMTkwOSwxMyBAQAogCXUzMiB2YWwsIGVuYWJsZV9yZWc7CiAJaW50IGk7CiAKLQl2YWwgPSBkbWFfcmVhZChJUlFTVEFUVVNfTDApOworCXZhbCA9IHAtPmRtYV9yZWFkKElSUVNUQVRVU19MMCwgMCk7CiAJaWYgKHZhbCA9PSAwKSB7CiAJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJTcHVyaW91cyBETUEgSVJRXG4iKTsKIAkJcmV0dXJuIElSUV9IQU5ETEVEOwogCX0KLQllbmFibGVfcmVnID0gZG1hX3JlYWQoSVJRRU5BQkxFX0wwKTsKKwllbmFibGVfcmVnID0gcC0+ZG1hX3JlYWQoSVJRRU5BQkxFX0wwLCAwKTsKIAl2YWwgJj0gZW5hYmxlX3JlZzsgLyogRGlzcGF0Y2ggb25seSByZWxldmFudCBpbnRlcnJ1cHRzICovCiAJZm9yIChpID0gMDsgaSA8IGRtYV9sY2hfY291bnQgJiYgdmFsICE9IDA7IGkrKykgewogCQlpZiAodmFsICYgMSkKQEAgLTIwNDksMTE5ICsxOTQxLDY2IEBACiB2b2lkIG9tYXBfZG1hX2dsb2JhbF9jb250ZXh0X3NhdmUodm9pZCkKIHsKIAlvbWFwX2RtYV9nbG9iYWxfY29udGV4dC5kbWFfaXJxZW5hYmxlX2wwID0KLQkJZG1hX3JlYWQoSVJRRU5BQkxFX0wwKTsKKwkJcC0+ZG1hX3JlYWQoSVJRRU5BQkxFX0wwLCAwKTsKIAlvbWFwX2RtYV9nbG9iYWxfY29udGV4dC5kbWFfb2NwX3N5c2NvbmZpZyA9Ci0JCWRtYV9yZWFkKE9DUF9TWVNDT05GSUcpOwotCW9tYXBfZG1hX2dsb2JhbF9jb250ZXh0LmRtYV9nY3IgPSBkbWFfcmVhZChHQ1IpOworCQlwLT5kbWFfcmVhZChPQ1BfU1lTQ09ORklHLCAwKTsKKwlvbWFwX2RtYV9nbG9iYWxfY29udGV4dC5kbWFfZ2NyID0gcC0+ZG1hX3JlYWQoR0NSLCAwKTsKIH0KIAogdm9pZCBvbWFwX2RtYV9nbG9iYWxfY29udGV4dF9yZXN0b3JlKHZvaWQpCiB7CiAJaW50IGNoOwogCi0JZG1hX3dyaXRlKG9tYXBfZG1hX2dsb2JhbF9jb250ZXh0LmRtYV9nY3IsIEdDUik7Ci0JZG1hX3dyaXRlKG9tYXBfZG1hX2dsb2JhbF9jb250ZXh0LmRtYV9vY3Bfc3lzY29uZmlnLAotCQlPQ1BfU1lTQ09ORklHKTsKLQlkbWFfd3JpdGUob21hcF9kbWFfZ2xvYmFsX2NvbnRleHQuZG1hX2lycWVuYWJsZV9sMCwKLQkJSVJRRU5BQkxFX0wwKTsKKwlwLT5kbWFfd3JpdGUob21hcF9kbWFfZ2xvYmFsX2NvbnRleHQuZG1hX2djciwgR0NSLCAwKTsKKwlwLT5kbWFfd3JpdGUob21hcF9kbWFfZ2xvYmFsX2NvbnRleHQuZG1hX29jcF9zeXNjb25maWcsCisJCU9DUF9TWVNDT05GSUcsIDApOworCXAtPmRtYV93cml0ZShvbWFwX2RtYV9nbG9iYWxfY29udGV4dC5kbWFfaXJxZW5hYmxlX2wwLAorCQlJUlFFTkFCTEVfTDAsIDApOwogCi0JLyoKLQkgKiBBIGJ1ZyBpbiBST00gY29kZSBsZWF2ZXMgSVJRIHN0YXR1cyBmb3IgY2hhbm5lbHMgMCBhbmQgMSB1bmNsZWFyZWQKLQkgKiBhZnRlciBzZWN1cmUgc3JhbSBjb250ZXh0IHNhdmUgYW5kIHJlc3RvcmUuIEhlbmNlIHdlIG5lZWQgdG8KLQkgKiBtYW51YWxseSBjbGVhciB0aG9zZSBJUlFzIHRvIGF2b2lkIHNwdXJpb3VzIGludGVycnVwdHMuIFRoaXMKLQkgKiBhZmZlY3RzIG9ubHkgc2VjdXJlIGRldmljZXMuCi0JICovCi0JaWYgKGNwdV9pc19vbWFwMzR4eCgpICYmIChvbWFwX3R5cGUoKSAhPSBPTUFQMl9ERVZJQ0VfVFlQRV9HUCkpCi0JCWRtYV93cml0ZSgweDMgLCBJUlFTVEFUVVNfTDApOworCWlmIChJU19ETUFfRVJSQVRBKERNQV9ST01DT0RFX0JVRykpCisJCXAtPmRtYV93cml0ZSgweDMgLCBJUlFTVEFUVVNfTDAsIDApOwogCiAJZm9yIChjaCA9IDA7IGNoIDwgZG1hX2NoYW5fY291bnQ7IGNoKyspCiAJCWlmIChkbWFfY2hhbltjaF0uZGV2X2lkICE9IC0xKQogCQkJb21hcF9jbGVhcl9kbWEoY2gpOwogfQogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgaW50IF9faW5pdCBvbWFwX2luaXRfZG1hKHZvaWQpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBvbWFwX3N5c3RlbV9kbWFfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQl1bnNpZ25lZCBsb25nIGJhc2U7Ci0JaW50IGNoLCByOworCWludCBjaCwgcmV0ID0gMDsKKwlpbnQgZG1hX2lycTsKKwljaGFyIGlycV9uYW1lWzRdOworCWludCBpcnFfcmVsOwogCi0JaWYgKGNwdV9jbGFzc19pc19vbWFwMSgpKSB7Ci0JCWJhc2UgPSBPTUFQMV9ETUFfQkFTRTsKLQkJZG1hX2xjaF9jb3VudCA9IE9NQVAxX0xPR0lDQUxfRE1BX0NIX0NPVU5UOwotCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKLQkJYmFzZSA9IE9NQVAyNFhYX0RNQTRfQkFTRTsKLQkJZG1hX2xjaF9jb3VudCA9IE9NQVBfRE1BNF9MT0dJQ0FMX0RNQV9DSF9DT1VOVDsKLQl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMzR4eCgpKSB7Ci0JCWJhc2UgPSBPTUFQMzRYWF9ETUE0X0JBU0U7Ci0JCWRtYV9sY2hfY291bnQgPSBPTUFQX0RNQTRfTE9HSUNBTF9ETUFfQ0hfQ09VTlQ7Ci0JfSBlbHNlIGlmIChjcHVfaXNfb21hcDQ0eHgoKSkgewotCQliYXNlID0gT01BUDQ0WFhfRE1BNF9CQVNFOwotCQlkbWFfbGNoX2NvdW50ID0gT01BUF9ETUE0X0xPR0lDQUxfRE1BX0NIX0NPVU5UOwotCX0gZWxzZSB7Ci0JCXByX2VycigiRE1BIGluaXQgZmFpbGVkIGZvciB1bnN1cHBvcnRlZCBvbWFwXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7CisJcCA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWlmICghcCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICIlczogU3lzdGVtIERNQSBpbml0aWFsaXplZCB3aXRob3V0IgorCQkJInBsYXRmb3JtIGRhdGFcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0Jb21hcF9kbWFfYmFzZSA9IGlvcmVtYXAoYmFzZSwgU1pfNEspOwotCUJVR19PTighb21hcF9kbWFfYmFzZSk7CisJZAkJCT0gcC0+ZG1hX2F0dHI7CisJZXJyYXRhCQkJPSBwLT5lcnJhdGE7CiAKLQlpZiAoY3B1X2NsYXNzX2lzX29tYXAyKCkgJiYgb21hcF9kbWFfcmVzZXJ2ZV9jaGFubmVscworCWlmICgoZC0+ZGV2X2NhcHMgJiBSRVNFUlZFX0NIQU5ORUwpICYmIG9tYXBfZG1hX3Jlc2VydmVfY2hhbm5lbHMKIAkJCSYmIChvbWFwX2RtYV9yZXNlcnZlX2NoYW5uZWxzIDw9IGRtYV9sY2hfY291bnQpKQotCQlkbWFfbGNoX2NvdW50ID0gb21hcF9kbWFfcmVzZXJ2ZV9jaGFubmVsczsKKwkJZC0+bGNoX2NvdW50CT0gb21hcF9kbWFfcmVzZXJ2ZV9jaGFubmVsczsKIAotCWRtYV9jaGFuID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG9tYXBfZG1hX2xjaCkgKiBkbWFfbGNoX2NvdW50LAotCQkJCUdGUF9LRVJORUwpOwotCWlmICghZG1hX2NoYW4pIHsKLQkJciA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0X3VubWFwOwotCX0KKwlkbWFfbGNoX2NvdW50CQk9IGQtPmxjaF9jb3VudDsKKwlkbWFfY2hhbl9jb3VudAkJPSBkbWFfbGNoX2NvdW50OworCWRtYV9jaGFuCQk9IGQtPmNoYW47CisJZW5hYmxlXzE1MTBfbW9kZQk9IGQtPmRldl9jYXBzICYgRU5BQkxFXzE1MTBfTU9ERTsKIAogCWlmIChjcHVfY2xhc3NfaXNfb21hcDIoKSkgewogCQlkbWFfbGlua2VkX2xjaCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkbWFfbGlua19pbmZvKSAqCiAJCQkJCQlkbWFfbGNoX2NvdW50LCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFkbWFfbGlua2VkX2xjaCkgewotCQkJciA9IC1FTk9NRU07Ci0JCQlnb3RvIG91dF9mcmVlOworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gZXhpdF9kbWFfbGNoX2ZhaWw7CiAJCX0KIAl9CiAKLQlpZiAoY3B1X2lzX29tYXAxNXh4KCkpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiRE1BIHN1cHBvcnQgZm9yIE9NQVAxNXh4IGluaXRpYWxpemVkXG4iKTsKLQkJZG1hX2NoYW5fY291bnQgPSA5OwotCQllbmFibGVfMTUxMF9tb2RlID0gMTsKLQl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMTZ4eCgpIHx8IGNwdV9pc19vbWFwN3h4KCkpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiT01BUCBETUEgaGFyZHdhcmUgdmVyc2lvbiAlZFxuIiwKLQkJICAgICAgIGRtYV9yZWFkKEhXX0lEKSk7Ci0JCXByaW50ayhLRVJOX0lORk8gIkRNQSBjYXBhYmlsaXRpZXM6ICUwOHg6JTA4eDolMDR4OiUwNHg6JTA0eFxuIiwKLQkJICAgICAgIChkbWFfcmVhZChDQVBTXzBfVSkgPDwgMTYpIHwKLQkJICAgICAgIGRtYV9yZWFkKENBUFNfMF9MKSwKLQkJICAgICAgIChkbWFfcmVhZChDQVBTXzFfVSkgPDwgMTYpIHwKLQkJICAgICAgIGRtYV9yZWFkKENBUFNfMV9MKSwKLQkJICAgICAgIGRtYV9yZWFkKENBUFNfMiksIGRtYV9yZWFkKENBUFNfMyksCi0JCSAgICAgICBkbWFfcmVhZChDQVBTXzQpKTsKLQkJaWYgKCFlbmFibGVfMTUxMF9tb2RlKSB7Ci0JCQl1MTYgdzsKLQotCQkJLyogRGlzYWJsZSBPTUFQIDMuMC8zLjEgY29tcGF0aWJpbGl0eSBtb2RlLiAqLwotCQkJdyA9IGRtYV9yZWFkKEdTQ1IpOwotCQkJdyB8PSAxIDw8IDM7Ci0JCQlkbWFfd3JpdGUodywgR1NDUik7Ci0JCQlkbWFfY2hhbl9jb3VudCA9IDE2OwotCQl9IGVsc2UKLQkJCWRtYV9jaGFuX2NvdW50ID0gOTsKLQl9IGVsc2UgaWYgKGNwdV9jbGFzc19pc19vbWFwMigpKSB7Ci0JCXU4IHJldmlzaW9uID0gZG1hX3JlYWQoUkVWSVNJT04pICYgMHhmZjsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiT01BUCBETUEgaGFyZHdhcmUgcmV2aXNpb24gJWQuJWRcbiIsCi0JCSAgICAgICByZXZpc2lvbiA+PiA0LCByZXZpc2lvbiAmIDB4Zik7Ci0JCWRtYV9jaGFuX2NvdW50ID0gZG1hX2xjaF9jb3VudDsKLQl9IGVsc2UgewotCQlkbWFfY2hhbl9jb3VudCA9IDA7Ci0JCXJldHVybiAwOwotCX0KLQogCXNwaW5fbG9ja19pbml0KCZkbWFfY2hhbl9sb2NrKTsKLQogCWZvciAoY2ggPSAwOyBjaCA8IGRtYV9jaGFuX2NvdW50OyBjaCsrKSB7CiAJCW9tYXBfY2xlYXJfZG1hKGNoKTsKIAkJaWYgKGNwdV9jbGFzc19pc19vbWFwMigpKQpAQCAtMjE3OCwyMCArMjAxNywyMyBAQAogCQkJICogcmVxdWVzdF9pcnEoKSBkb2Vzbid0IGxpa2UgZGV2X2lkIChpZS4gY2gpIGJlaW5nCiAJCQkgKiB6ZXJvLCBzbyB3ZSBoYXZlIHRvIGtsdWRnZSBhcm91bmQgdGhpcy4KIAkJCSAqLwotCQkJciA9IHJlcXVlc3RfaXJxKG9tYXAxX2RtYV9pcnFbY2hdLAorCQkJc3ByaW50ZigmaXJxX25hbWVbMF0sICIlZCIsIGNoKTsKKwkJCWRtYV9pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxX2J5bmFtZShwZGV2LCBpcnFfbmFtZSk7CisKKwkJCWlmIChkbWFfaXJxIDwgMCkgeworCQkJCXJldCA9IGRtYV9pcnE7CisJCQkJZ290byBleGl0X2RtYV9pcnFfZmFpbDsKKwkJCX0KKworCQkJLyogSU5UX0RNQV9MQ0QgaXMgaGFuZGxlZCBpbiBsY2RfZG1hLmMgKi8KKwkJCWlmIChkbWFfaXJxID09IElOVF9ETUFfTENEKQorCQkJCWNvbnRpbnVlOworCisJCQlyZXQgPSByZXF1ZXN0X2lycShkbWFfaXJxLAogCQkJCQlvbWFwMV9kbWFfaXJxX2hhbmRsZXIsIDAsICJETUEiLAogCQkJCQkodm9pZCAqKSAoY2ggKyAxKSk7Ci0JCQlpZiAociAhPSAwKSB7Ci0JCQkJaW50IGk7Ci0KLQkJCQlwcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byByZXF1ZXN0IElSUSAlZCAiCi0JCQkJICAgICAgICJmb3IgRE1BIChlcnJvciAlZClcbiIsCi0JCQkJICAgICAgIG9tYXAxX2RtYV9pcnFbY2hdLCByKTsKLQkJCQlmb3IgKGkgPSAwOyBpIDwgY2g7IGkrKykKLQkJCQkJZnJlZV9pcnEob21hcDFfZG1hX2lycVtpXSwKLQkJCQkJCSAodm9pZCAqKSAoaSArIDEpKTsKLQkJCQlnb3RvIG91dF9mcmVlOwotCQkJfQorCQkJaWYgKHJldCAhPSAwKQorCQkJCWdvdG8gZXhpdF9kbWFfaXJxX2ZhaWw7CiAJCX0KIAl9CiAKQEAgLTIyMDAsNDYgKzIwNDIsOTEgQEAKIAkJCQlETUFfREVGQVVMVF9GSUZPX0RFUFRILCAwKTsKIAogCWlmIChjcHVfY2xhc3NfaXNfb21hcDIoKSkgewotCQlpbnQgaXJxOwotCQlpZiAoY3B1X2lzX29tYXA0NHh4KCkpCi0JCQlpcnEgPSBPTUFQNDRYWF9JUlFfU0RNQV8wOwotCQllbHNlCi0JCQlpcnEgPSBJTlRfMjRYWF9TRE1BX0lSUTA7Ci0JCXNldHVwX2lycShpcnEsICZvbWFwMjR4eF9kbWFfaXJxKTsKLQl9Ci0KLQlpZiAoY3B1X2lzX29tYXAzNHh4KCkgfHwgY3B1X2lzX29tYXA0NHh4KCkpIHsKLQkJLyogRW5hYmxlIHNtYXJ0aWRsZSBpZGxlbW9kZXMgYW5kIGF1dG9pZGxlICovCi0JCXUzMiB2ID0gZG1hX3JlYWQoT0NQX1NZU0NPTkZJRyk7Ci0JCXYgJj0gfihETUFfU1lTQ09ORklHX01JRExFTU9ERV9NQVNLIHwKLQkJCQlETUFfU1lTQ09ORklHX1NJRExFTU9ERV9NQVNLIHwKLQkJCQlETUFfU1lTQ09ORklHX0FVVE9JRExFKTsKLQkJdiB8PSAoRE1BX1NZU0NPTkZJR19NSURMRU1PREUoRE1BX0lETEVNT0RFX1NNQVJUSURMRSkgfAotCQkJRE1BX1NZU0NPTkZJR19TSURMRU1PREUoRE1BX0lETEVNT0RFX1NNQVJUSURMRSkgfAotCQkJRE1BX1NZU0NPTkZJR19BVVRPSURMRSk7Ci0JCWRtYV93cml0ZSh2ICwgT0NQX1NZU0NPTkZJRyk7Ci0JCS8qIHJlc2VydmUgZG1hIGNoYW5uZWxzIDAgYW5kIDEgaW4gaGlnaCBzZWN1cml0eSBkZXZpY2VzICovCi0JCWlmIChjcHVfaXNfb21hcDM0eHgoKSAmJgotCQkJKG9tYXBfdHlwZSgpICE9IE9NQVAyX0RFVklDRV9UWVBFX0dQKSkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiUmVzZXJ2aW5nIERNQSBjaGFubmVscyAwIGFuZCAxIGZvciAiCi0JCQkJCSJIUyBST00gY29kZVxuIik7Ci0JCQlkbWFfY2hhblswXS5kZXZfaWQgPSAwOwotCQkJZG1hX2NoYW5bMV0uZGV2X2lkID0gMTsKKwkJc3RyY3B5KGlycV9uYW1lLCAiMCIpOworCQlkbWFfaXJxID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUocGRldiwgaXJxX25hbWUpOworCQlpZiAoZG1hX2lycSA8IDApIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZDogcmVxdWVzdCBJUlEgJWQiLCBkbWFfaXJxKTsKKwkJCWdvdG8gZXhpdF9kbWFfbGNoX2ZhaWw7CisJCX0KKwkJcmV0ID0gc2V0dXBfaXJxKGRtYV9pcnEsICZvbWFwMjR4eF9kbWFfaXJxKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAic2V0X3VwIGZhaWxlZCBmb3IgSVJRICVkIgorCQkJCSJmb3IgRE1BIChlcnJvciAlZClcbiIsIGRtYV9pcnEsIHJldCk7CisJCQlnb3RvIGV4aXRfZG1hX2xjaF9mYWlsOwogCQl9CiAJfQogCisJLyogcmVzZXJ2ZSBkbWEgY2hhbm5lbHMgMCBhbmQgMSBpbiBoaWdoIHNlY3VyaXR5IGRldmljZXMgKi8KKwlpZiAoY3B1X2lzX29tYXAzNHh4KCkgJiYKKwkJKG9tYXBfdHlwZSgpICE9IE9NQVAyX0RFVklDRV9UWVBFX0dQKSkgeworCQlwcmludGsoS0VSTl9JTkZPICJSZXNlcnZpbmcgRE1BIGNoYW5uZWxzIDAgYW5kIDEgZm9yICIKKwkJCQkiSFMgUk9NIGNvZGVcbiIpOworCQlkbWFfY2hhblswXS5kZXZfaWQgPSAwOworCQlkbWFfY2hhblsxXS5kZXZfaWQgPSAxOworCX0KKwlwLT5zaG93X2RtYV9jYXBzKCk7CiAJcmV0dXJuIDA7CiAKLW91dF9mcmVlOgorZXhpdF9kbWFfaXJxX2ZhaWw6CisJZGV2X2VycigmcGRldi0+ZGV2LCAidW5hYmxlIHRvIHJlcXVlc3QgSVJRICVkIgorCQkJImZvciBETUEgKGVycm9yICVkKVxuIiwgZG1hX2lycSwgcmV0KTsKKwlmb3IgKGlycV9yZWwgPSAwOyBpcnFfcmVsIDwgY2g7CWlycV9yZWwrKykgeworCQlkbWFfaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCBpcnFfcmVsKTsKKwkJZnJlZV9pcnEoZG1hX2lycSwgKHZvaWQgKikoaXJxX3JlbCArIDEpKTsKKwl9CisKK2V4aXRfZG1hX2xjaF9mYWlsOgorCWtmcmVlKHApOworCWtmcmVlKGQpOwogCWtmcmVlKGRtYV9jaGFuKTsKLQotb3V0X3VubWFwOgotCWlvdW5tYXAob21hcF9kbWFfYmFzZSk7Ci0KLQlyZXR1cm4gcjsKKwlyZXR1cm4gcmV0OwogfQogCi1hcmNoX2luaXRjYWxsKG9tYXBfaW5pdF9kbWEpOworc3RhdGljIGludCBfX2RldmV4aXQgb21hcF9zeXN0ZW1fZG1hX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWludCBkbWFfaXJxOworCisJaWYgKGNwdV9jbGFzc19pc19vbWFwMigpKSB7CisJCWNoYXIgaXJxX25hbWVbNF07CisJCXN0cmNweShpcnFfbmFtZSwgIjAiKTsKKwkJZG1hX2lycSA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKHBkZXYsIGlycV9uYW1lKTsKKwkJcmVtb3ZlX2lycShkbWFfaXJxLCAmb21hcDI0eHhfZG1hX2lycSk7CisJfSBlbHNlIHsKKwkJaW50IGlycV9yZWwgPSAwOworCQlmb3IgKCA7IGlycV9yZWwgPCBkbWFfY2hhbl9jb3VudDsgaXJxX3JlbCsrKSB7CisJCQlkbWFfaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCBpcnFfcmVsKTsKKwkJCWZyZWVfaXJxKGRtYV9pcnEsICh2b2lkICopKGlycV9yZWwgKyAxKSk7CisJCX0KKwl9CisJa2ZyZWUocCk7CisJa2ZyZWUoZCk7CisJa2ZyZWUoZG1hX2NoYW4pOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBvbWFwX3N5c3RlbV9kbWFfZHJpdmVyID0geworCS5wcm9iZQkJPSBvbWFwX3N5c3RlbV9kbWFfcHJvYmUsCisJLnJlbW92ZQkJPSBvbWFwX3N5c3RlbV9kbWFfcmVtb3ZlLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJvbWFwX2RtYV9zeXN0ZW0iCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG9tYXBfc3lzdGVtX2RtYV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmb21hcF9zeXN0ZW1fZG1hX2RyaXZlcik7Cit9CithcmNoX2luaXRjYWxsKG9tYXBfc3lzdGVtX2RtYV9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IG9tYXBfc3lzdGVtX2RtYV9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm9tYXBfc3lzdGVtX2RtYV9kcml2ZXIpOworfQorCitNT0RVTEVfREVTQ1JJUFRJT04oIk9NQVAgU1lTVEVNIERNQSBEUklWRVIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06IiBEUklWRVJfTkFNRSk7CitNT0RVTEVfQVVUSE9SKCJUZXhhcyBJbnN0cnVtZW50cyBJbmMiKTsKIAogLyoKICAqIFJlc2VydmUgdGhlIG9tYXAgU0RNQSBjaGFubmVscyB1c2luZyBjbWRsaW5lIGJvb3RhcmcKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9ncGlvLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvZ3Bpby5jCmluZGV4IGMwNWM2NTMuLjFmOThlMGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9ncGlvLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2dwaW8uYwpAQCAtMjEsMTggKzIxLDE4IEBACiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxtYWNoL2lycXMuaD4KICNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KICNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KLSNpbmNsdWRlIDxwbGF0L3Bvd2VyZG9tYWluLmg+CiAKIC8qCiAgKiBPTUFQMTUxMCBHUElPIHJlZ2lzdGVycwogICovCi0jZGVmaW5lIE9NQVAxNTEwX0dQSU9fQkFTRQkJMHhmZmZjZTAwMAogI2RlZmluZSBPTUFQMTUxMF9HUElPX0RBVEFfSU5QVVQJMHgwMAogI2RlZmluZSBPTUFQMTUxMF9HUElPX0RBVEFfT1VUUFVUCTB4MDQKICNkZWZpbmUgT01BUDE1MTBfR1BJT19ESVJfQ09OVFJPTAkweDA4CkBAIC00NiwxMCArNDYsNiBAQAogLyoKICAqIE9NQVAxNjEwIHNwZWNpZmljIEdQSU8gcmVnaXN0ZXJzCiAgKi8KLSNkZWZpbmUgT01BUDE2MTBfR1BJTzFfQkFTRQkJMHhmZmZiZTQwMAotI2RlZmluZSBPTUFQMTYxMF9HUElPMl9CQVNFCQkweGZmZmJlYzAwCi0jZGVmaW5lIE9NQVAxNjEwX0dQSU8zX0JBU0UJCTB4ZmZmYmI0MDAKLSNkZWZpbmUgT01BUDE2MTBfR1BJTzRfQkFTRQkJMHhmZmZiYmMwMAogI2RlZmluZSBPTUFQMTYxMF9HUElPX1JFVklTSU9OCQkweDAwMDAKICNkZWZpbmUgT01BUDE2MTBfR1BJT19TWVNDT05GSUcJCTB4MDAxMAogI2RlZmluZSBPTUFQMTYxMF9HUElPX1NZU1NUQVRVUwkJMHgwMDE0CkBAIC03MSwxMiArNjcsNiBAQAogLyoKICAqIE9NQVA3WFggc3BlY2lmaWMgR1BJTyByZWdpc3RlcnMKICAqLwotI2RlZmluZSBPTUFQN1hYX0dQSU8xX0JBU0UJCTB4ZmZmYmMwMDAKLSNkZWZpbmUgT01BUDdYWF9HUElPMl9CQVNFCQkweGZmZmJjODAwCi0jZGVmaW5lIE9NQVA3WFhfR1BJTzNfQkFTRQkJMHhmZmZiZDAwMAotI2RlZmluZSBPTUFQN1hYX0dQSU80X0JBU0UJCTB4ZmZmYmQ4MDAKLSNkZWZpbmUgT01BUDdYWF9HUElPNV9CQVNFCQkweGZmZmJlMDAwCi0jZGVmaW5lIE9NQVA3WFhfR1BJTzZfQkFTRQkJMHhmZmZiZTgwMAogI2RlZmluZSBPTUFQN1hYX0dQSU9fREFUQV9JTlBVVAkJMHgwMAogI2RlZmluZSBPTUFQN1hYX0dQSU9fREFUQV9PVVRQVVQJMHgwNAogI2RlZmluZSBPTUFQN1hYX0dQSU9fRElSX0NPTlRST0wJMHgwOApAQCAtODQsMjUgKzc0LDEwIEBACiAjZGVmaW5lIE9NQVA3WFhfR1BJT19JTlRfTUFTSwkJMHgxMAogI2RlZmluZSBPTUFQN1hYX0dQSU9fSU5UX1NUQVRVUwkJMHgxNAogCi0jZGVmaW5lIE9NQVAxX01QVUlPX1ZCQVNFCQlPTUFQMV9NUFVJT19CQVNFCi0KIC8qCi0gKiBvbWFwMjR4eCBzcGVjaWZpYyBHUElPIHJlZ2lzdGVycworICogb21hcDIrIHNwZWNpZmljIEdQSU8gcmVnaXN0ZXJzCiAgKi8KLSNkZWZpbmUgT01BUDI0MlhfR1BJTzFfQkFTRQkJMHg0ODAxODAwMAotI2RlZmluZSBPTUFQMjQyWF9HUElPMl9CQVNFCQkweDQ4MDFhMDAwCi0jZGVmaW5lIE9NQVAyNDJYX0dQSU8zX0JBU0UJCTB4NDgwMWMwMDAKLSNkZWZpbmUgT01BUDI0MlhfR1BJTzRfQkFTRQkJMHg0ODAxZTAwMAotCi0jZGVmaW5lIE9NQVAyNDNYX0dQSU8xX0JBU0UJCTB4NDkwMEMwMDAKLSNkZWZpbmUgT01BUDI0M1hfR1BJTzJfQkFTRQkJMHg0OTAwRTAwMAotI2RlZmluZSBPTUFQMjQzWF9HUElPM19CQVNFCQkweDQ5MDEwMDAwCi0jZGVmaW5lIE9NQVAyNDNYX0dQSU80X0JBU0UJCTB4NDkwMTIwMDAKLSNkZWZpbmUgT01BUDI0M1hfR1BJTzVfQkFTRQkJMHg0ODBCNjAwMAotCiAjZGVmaW5lIE9NQVAyNFhYX0dQSU9fUkVWSVNJT04JCTB4MDAwMAotI2RlZmluZSBPTUFQMjRYWF9HUElPX1NZU0NPTkZJRwkJMHgwMDEwCi0jZGVmaW5lIE9NQVAyNFhYX0dQSU9fU1lTU1RBVFVTCQkweDAwMTQKICNkZWZpbmUgT01BUDI0WFhfR1BJT19JUlFTVEFUVVMxCTB4MDAxOAogI2RlZmluZSBPTUFQMjRYWF9HUElPX0lSUVNUQVRVUzIJMHgwMDI4CiAjZGVmaW5lIE9NQVAyNFhYX0dQSU9fSVJRRU5BQkxFMgkweDAwMmMKQEAgLTEyNiw3ICsxMDEsNiBAQAogI2RlZmluZSBPTUFQMjRYWF9HUElPX1NFVERBVEFPVVQJMHgwMDk0CiAKICNkZWZpbmUgT01BUDRfR1BJT19SRVZJU0lPTgkJMHgwMDAwCi0jZGVmaW5lIE9NQVA0X0dQSU9fU1lTQ09ORklHCQkweDAwMTAKICNkZWZpbmUgT01BUDRfR1BJT19FT0kJCQkweDAwMjAKICNkZWZpbmUgT01BUDRfR1BJT19JUlFTVEFUVVNSQVcwCTB4MDAyNAogI2RlZmluZSBPTUFQNF9HUElPX0lSUVNUQVRVU1JBVzEJMHgwMDI4CkBAIC0xMzgsNyArMTEyLDYgQEAKICNkZWZpbmUgT01BUDRfR1BJT19JUlFTVEFUVVNDTFIxCTB4MDA0MAogI2RlZmluZSBPTUFQNF9HUElPX0lSUVdBS0VOMAkJMHgwMDQ0CiAjZGVmaW5lIE9NQVA0X0dQSU9fSVJRV0FLRU4xCQkweDAwNDgKLSNkZWZpbmUgT01BUDRfR1BJT19TWVNTVEFUVVMJCTB4MDExNAogI2RlZmluZSBPTUFQNF9HUElPX0lSUUVOQUJMRTEJCTB4MDExYwogI2RlZmluZSBPTUFQNF9HUElPX1dBS0VfRU4JCTB4MDEyMAogI2RlZmluZSBPTUFQNF9HUElPX0lSUVNUQVRVUzIJCTB4MDEyOApAQCAtMTU5LDI2ICsxMzIsNiBAQAogI2RlZmluZSBPTUFQNF9HUElPX1NFVFdLVUVOQQkJMHgwMTg0CiAjZGVmaW5lIE9NQVA0X0dQSU9fQ0xFQVJEQVRBT1VUCQkweDAxOTAKICNkZWZpbmUgT01BUDRfR1BJT19TRVREQVRBT1VUCQkweDAxOTQKLS8qCi0gKiBvbWFwMzR4eCBzcGVjaWZpYyBHUElPIHJlZ2lzdGVycwotICovCi0KLSNkZWZpbmUgT01BUDM0WFhfR1BJTzFfQkFTRQkJMHg0ODMxMDAwMAotI2RlZmluZSBPTUFQMzRYWF9HUElPMl9CQVNFCQkweDQ5MDUwMDAwCi0jZGVmaW5lIE9NQVAzNFhYX0dQSU8zX0JBU0UJCTB4NDkwNTIwMDAKLSNkZWZpbmUgT01BUDM0WFhfR1BJTzRfQkFTRQkJMHg0OTA1NDAwMAotI2RlZmluZSBPTUFQMzRYWF9HUElPNV9CQVNFCQkweDQ5MDU2MDAwCi0jZGVmaW5lIE9NQVAzNFhYX0dQSU82X0JBU0UJCTB4NDkwNTgwMDAKLQotLyoKLSAqIE9NQVA0NFhYICBzcGVjaWZpYyBHUElPIHJlZ2lzdGVycwotICovCi0jZGVmaW5lIE9NQVA0NFhYX0dQSU8xX0JBU0UgICAgICAgICAgICAgMHg0YTMxMDAwMAotI2RlZmluZSBPTUFQNDRYWF9HUElPMl9CQVNFICAgICAgICAgICAgIDB4NDgwNTUwMDAKLSNkZWZpbmUgT01BUDQ0WFhfR1BJTzNfQkFTRSAgICAgICAgICAgICAweDQ4MDU3MDAwCi0jZGVmaW5lIE9NQVA0NFhYX0dQSU80X0JBU0UgICAgICAgICAgICAgMHg0ODA1OTAwMAotI2RlZmluZSBPTUFQNDRYWF9HUElPNV9CQVNFICAgICAgICAgICAgIDB4NDgwNUIwMDAKLSNkZWZpbmUgT01BUDQ0WFhfR1BJTzZfQkFTRSAgICAgICAgICAgICAweDQ4MDVEMDAwCiAKIHN0cnVjdCBncGlvX2JhbmsgewogCXVuc2lnbmVkIGxvbmcgcGJhc2U7CkBAIC0xOTAsMTQgKzE0MywxMiBAQAogCXUzMiBzdXNwZW5kX3dha2V1cDsKIAl1MzIgc2F2ZWRfd2FrZXVwOwogI2VuZGlmCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDJQTFVTCiAJdTMyIG5vbl93YWtldXBfZ3Bpb3M7CiAJdTMyIGVuYWJsZWRfbm9uX3dha2V1cF9ncGlvczsKIAogCXUzMiBzYXZlZF9kYXRhaW47CiAJdTMyIHNhdmVkX2ZhbGxpbmdkZXRlY3Q7CiAJdTMyIHNhdmVkX3Jpc2luZ2RldGVjdDsKLSNlbmRpZgogCXUzMiBsZXZlbF9tYXNrOwogCXUzMiB0b2dnbGVfbWFzazsKIAlzcGlubG9ja190IGxvY2s7CkBAIC0yMDUsMTA0ICsxNTYsMTMgQEAKIAlzdHJ1Y3QgY2xrICpkYmNrOwogCXUzMiBtb2RfdXNhZ2U7CiAJdTMyIGRiY2tfZW5hYmxlX21hc2s7CisJc3RydWN0IGRldmljZSAqZGV2OworCWJvb2wgZGJja19mbGFnOworCWludCBzdHJpZGU7CiB9OwogCi0jZGVmaW5lIE1FVEhPRF9NUFVJTwkJMAotI2RlZmluZSBNRVRIT0RfR1BJT18xNTEwCTEKLSNkZWZpbmUgTUVUSE9EX0dQSU9fMTYxMAkyCi0jZGVmaW5lIE1FVEhPRF9HUElPXzdYWAkJMwotI2RlZmluZSBNRVRIT0RfR1BJT18yNFhYCTUKLSNkZWZpbmUgTUVUSE9EX0dQSU9fNDRYWAk2Ci0KLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTZYWAotc3RhdGljIHN0cnVjdCBncGlvX2JhbmsgZ3Bpb19iYW5rXzE2MTBbNV0gPSB7Ci0JeyBPTUFQMV9NUFVJT19WQkFTRSwgTlVMTCwgSU5UX01QVUlPLCBJSF9NUFVJT19CQVNFLAotCQlNRVRIT0RfTVBVSU8gfSwKLQl7IE9NQVAxNjEwX0dQSU8xX0JBU0UsIE5VTEwsIElOVF9HUElPX0JBTksxLCBJSF9HUElPX0JBU0UsCi0JCU1FVEhPRF9HUElPXzE2MTAgfSwKLQl7IE9NQVAxNjEwX0dQSU8yX0JBU0UsIE5VTEwsIElOVF8xNjEwX0dQSU9fQkFOSzIsIElIX0dQSU9fQkFTRSArIDE2LAotCQlNRVRIT0RfR1BJT18xNjEwIH0sCi0JeyBPTUFQMTYxMF9HUElPM19CQVNFLCBOVUxMLCBJTlRfMTYxMF9HUElPX0JBTkszLCBJSF9HUElPX0JBU0UgKyAzMiwKLQkJTUVUSE9EX0dQSU9fMTYxMCB9LAotCXsgT01BUDE2MTBfR1BJTzRfQkFTRSwgTlVMTCwgSU5UXzE2MTBfR1BJT19CQU5LNCwgSUhfR1BJT19CQVNFICsgNDgsCi0JCU1FVEhPRF9HUElPXzE2MTAgfSwKLX07Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNVhYCi1zdGF0aWMgc3RydWN0IGdwaW9fYmFuayBncGlvX2JhbmtfMTUxMFsyXSA9IHsKLQl7IE9NQVAxX01QVUlPX1ZCQVNFLCBOVUxMLCBJTlRfTVBVSU8sIElIX01QVUlPX0JBU0UsCi0JCU1FVEhPRF9NUFVJTyB9LAotCXsgT01BUDE1MTBfR1BJT19CQVNFLCBOVUxMLCBJTlRfR1BJT19CQU5LMSwgSUhfR1BJT19CQVNFLAotCQlNRVRIT0RfR1BJT18xNTEwIH0KLX07Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDczMCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQODUwKQotc3RhdGljIHN0cnVjdCBncGlvX2JhbmsgZ3Bpb19iYW5rXzd4eFs3XSA9IHsKLQl7IE9NQVAxX01QVUlPX1ZCQVNFLCBOVUxMLCBJTlRfN1hYX01QVUlPLCBJSF9NUFVJT19CQVNFLAotCQlNRVRIT0RfTVBVSU8gfSwKLQl7IE9NQVA3WFhfR1BJTzFfQkFTRSwgTlVMTCwgSU5UXzdYWF9HUElPX0JBTksxLCBJSF9HUElPX0JBU0UsCi0JCU1FVEhPRF9HUElPXzdYWCB9LAotCXsgT01BUDdYWF9HUElPMl9CQVNFLCBOVUxMLCBJTlRfN1hYX0dQSU9fQkFOSzIsIElIX0dQSU9fQkFTRSArIDMyLAotCQlNRVRIT0RfR1BJT183WFggfSwKLQl7IE9NQVA3WFhfR1BJTzNfQkFTRSwgTlVMTCwgSU5UXzdYWF9HUElPX0JBTkszLCBJSF9HUElPX0JBU0UgKyA2NCwKLQkJTUVUSE9EX0dQSU9fN1hYIH0sCi0JeyBPTUFQN1hYX0dQSU80X0JBU0UsIE5VTEwsIElOVF83WFhfR1BJT19CQU5LNCwgIElIX0dQSU9fQkFTRSArIDk2LAotCQlNRVRIT0RfR1BJT183WFggfSwKLQl7IE9NQVA3WFhfR1BJTzVfQkFTRSwgTlVMTCwgSU5UXzdYWF9HUElPX0JBTks1LCAgSUhfR1BJT19CQVNFICsgMTI4LAotCQlNRVRIT0RfR1BJT183WFggfSwKLQl7IE9NQVA3WFhfR1BJTzZfQkFTRSwgTlVMTCwgSU5UXzdYWF9HUElPX0JBTks2LCAgSUhfR1BJT19CQVNFICsgMTYwLAotCQlNRVRIT0RfR1BJT183WFggfSwKLX07Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19BUkNIX09NQVAyCi0KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19iYW5rIGdwaW9fYmFua18yNDJ4WzRdID0gewotCXsgT01BUDI0MlhfR1BJTzFfQkFTRSwgTlVMTCwgSU5UXzI0WFhfR1BJT19CQU5LMSwgSUhfR1BJT19CQVNFLAotCQlNRVRIT0RfR1BJT18yNFhYIH0sCi0JeyBPTUFQMjQyWF9HUElPMl9CQVNFLCBOVUxMLCBJTlRfMjRYWF9HUElPX0JBTksyLCBJSF9HUElPX0JBU0UgKyAzMiwKLQkJTUVUSE9EX0dQSU9fMjRYWCB9LAotCXsgT01BUDI0MlhfR1BJTzNfQkFTRSwgTlVMTCwgSU5UXzI0WFhfR1BJT19CQU5LMywgSUhfR1BJT19CQVNFICsgNjQsCi0JCU1FVEhPRF9HUElPXzI0WFggfSwKLQl7IE9NQVAyNDJYX0dQSU80X0JBU0UsIE5VTEwsIElOVF8yNFhYX0dQSU9fQkFOSzQsIElIX0dQSU9fQkFTRSArIDk2LAotCQlNRVRIT0RfR1BJT18yNFhYIH0sCi19OwotCi1zdGF0aWMgc3RydWN0IGdwaW9fYmFuayBncGlvX2JhbmtfMjQzeFs1XSA9IHsKLQl7IE9NQVAyNDNYX0dQSU8xX0JBU0UsIE5VTEwsIElOVF8yNFhYX0dQSU9fQkFOSzEsIElIX0dQSU9fQkFTRSwKLQkJTUVUSE9EX0dQSU9fMjRYWCB9LAotCXsgT01BUDI0M1hfR1BJTzJfQkFTRSwgTlVMTCwgSU5UXzI0WFhfR1BJT19CQU5LMiwgSUhfR1BJT19CQVNFICsgMzIsCi0JCU1FVEhPRF9HUElPXzI0WFggfSwKLQl7IE9NQVAyNDNYX0dQSU8zX0JBU0UsIE5VTEwsIElOVF8yNFhYX0dQSU9fQkFOSzMsIElIX0dQSU9fQkFTRSArIDY0LAotCQlNRVRIT0RfR1BJT18yNFhYIH0sCi0JeyBPTUFQMjQzWF9HUElPNF9CQVNFLCBOVUxMLCBJTlRfMjRYWF9HUElPX0JBTks0LCBJSF9HUElPX0JBU0UgKyA5NiwKLQkJTUVUSE9EX0dQSU9fMjRYWCB9LAotCXsgT01BUDI0M1hfR1BJTzVfQkFTRSwgTlVMTCwgSU5UXzI0WFhfR1BJT19CQU5LNSwgSUhfR1BJT19CQVNFICsgMTI4LAotCQlNRVRIT0RfR1BJT18yNFhYIH0sCi19OwotCi0jZW5kaWYKLQogI2lmZGVmIENPTkZJR19BUkNIX09NQVAzCi1zdGF0aWMgc3RydWN0IGdwaW9fYmFuayBncGlvX2JhbmtfMzR4eFs2XSA9IHsKLQl7IE9NQVAzNFhYX0dQSU8xX0JBU0UsIE5VTEwsIElOVF8zNFhYX0dQSU9fQkFOSzEsIElIX0dQSU9fQkFTRSwKLQkJTUVUSE9EX0dQSU9fMjRYWCB9LAotCXsgT01BUDM0WFhfR1BJTzJfQkFTRSwgTlVMTCwgSU5UXzM0WFhfR1BJT19CQU5LMiwgSUhfR1BJT19CQVNFICsgMzIsCi0JCU1FVEhPRF9HUElPXzI0WFggfSwKLQl7IE9NQVAzNFhYX0dQSU8zX0JBU0UsIE5VTEwsIElOVF8zNFhYX0dQSU9fQkFOSzMsIElIX0dQSU9fQkFTRSArIDY0LAotCQlNRVRIT0RfR1BJT18yNFhYIH0sCi0JeyBPTUFQMzRYWF9HUElPNF9CQVNFLCBOVUxMLCBJTlRfMzRYWF9HUElPX0JBTks0LCBJSF9HUElPX0JBU0UgKyA5NiwKLQkJTUVUSE9EX0dQSU9fMjRYWCB9LAotCXsgT01BUDM0WFhfR1BJTzVfQkFTRSwgTlVMTCwgSU5UXzM0WFhfR1BJT19CQU5LNSwgSUhfR1BJT19CQVNFICsgMTI4LAotCQlNRVRIT0RfR1BJT18yNFhYIH0sCi0JeyBPTUFQMzRYWF9HUElPNl9CQVNFLCBOVUxMLCBJTlRfMzRYWF9HUElPX0JBTks2LCBJSF9HUElPX0JBU0UgKyAxNjAsCi0JCU1FVEhPRF9HUElPXzI0WFggfSwKLX07Ci0KIHN0cnVjdCBvbWFwM19ncGlvX3JlZ3MgewotCXUzMiBzeXNjb25maWc7CiAJdTMyIGlycWVuYWJsZTE7CiAJdTMyIGlycWVuYWJsZTI7CiAJdTMyIHdha2VfZW47CkBAIC0zMTgsMjYgKzE3OCwxNiBAQAogc3RhdGljIHN0cnVjdCBvbWFwM19ncGlvX3JlZ3MgZ3Bpb19jb250ZXh0W09NQVAzNFhYX05SX0dQSU9TXTsKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDQKLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19iYW5rIGdwaW9fYmFua180NHh4WzZdID0gewotCXsgT01BUDQ0WFhfR1BJTzFfQkFTRSwgTlVMTCwgT01BUDQ0WFhfSVJRX0dQSU8xLCBJSF9HUElPX0JBU0UsCi0JCU1FVEhPRF9HUElPXzQ0WFggfSwKLQl7IE9NQVA0NFhYX0dQSU8yX0JBU0UsIE5VTEwsIE9NQVA0NFhYX0lSUV9HUElPMiwgSUhfR1BJT19CQVNFICsgMzIsCi0JCU1FVEhPRF9HUElPXzQ0WFggfSwKLQl7IE9NQVA0NFhYX0dQSU8zX0JBU0UsIE5VTEwsIE9NQVA0NFhYX0lSUV9HUElPMywgSUhfR1BJT19CQVNFICsgNjQsCi0JCU1FVEhPRF9HUElPXzQ0WFggfSwKLQl7IE9NQVA0NFhYX0dQSU80X0JBU0UsIE5VTEwsIE9NQVA0NFhYX0lSUV9HUElPNCwgSUhfR1BJT19CQVNFICsgOTYsCi0JCU1FVEhPRF9HUElPXzQ0WFggfSwKLQl7IE9NQVA0NFhYX0dQSU81X0JBU0UsIE5VTEwsIE9NQVA0NFhYX0lSUV9HUElPNSwgSUhfR1BJT19CQVNFICsgMTI4LAotCQlNRVRIT0RfR1BJT180NFhYIH0sCi0JeyBPTUFQNDRYWF9HUElPNl9CQVNFLCBOVUxMLCBPTUFQNDRYWF9JUlFfR1BJTzYsIElIX0dQSU9fQkFTRSArIDE2MCwKLQkJTUVUSE9EX0dQSU9fNDRYWCB9LAotfTsKLQotI2VuZGlmCi0KKy8qCisgKiBUT0RPOiBDbGVhbnVwIGdwaW9fYmFuayB1c2FnZSBhcyBpdCBpcyBoYXZpbmcgaW5mb3JtYXRpb24KKyAqIHJlbGF0ZWQgdG8gYWxsIGluc3RhbmNlcyBvZiB0aGUgZGV2aWNlCisgKi8KIHN0YXRpYyBzdHJ1Y3QgZ3Bpb19iYW5rICpncGlvX2Jhbms7Ci1zdGF0aWMgaW50IGdwaW9fYmFua19jb3VudDsKKworc3RhdGljIGludCBiYW5rX3dpZHRoOworCisvKiBUT0RPOiBBbmFseXplIHJlbW92aW5nIGdwaW9fYmFua19jb3VudCB1c2FnZSBmcm9tIGRyaXZlciBjb2RlICovCitpbnQgZ3Bpb19iYW5rX2NvdW50OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBncGlvX2JhbmsgKmdldF9ncGlvX2JhbmsoaW50IGdwaW8pCiB7CkBAIC00MTcsNyArMjY3LDcgQEAKIAlzd2l0Y2ggKGJhbmstPm1ldGhvZCkgewogI2lmZGVmIENPTkZJR19BUkNIX09NQVAxCiAJY2FzZSBNRVRIT0RfTVBVSU86Ci0JCXJlZyArPSBPTUFQX01QVUlPX0lPX0NOVEw7CisJCXJlZyArPSBPTUFQX01QVUlPX0lPX0NOVEwgLyBiYW5rLT5zdHJpZGU7CiAJCWJyZWFrOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1WFgKQEAgLTQ2NSw3ICszMTUsNyBAQAogCXN3aXRjaCAoYmFuay0+bWV0aG9kKSB7CiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDEKIAljYXNlIE1FVEhPRF9NUFVJTzoKLQkJcmVnICs9IE9NQVBfTVBVSU9fT1VUUFVUOworCQlyZWcgKz0gT01BUF9NUFVJT19PVVRQVVQgLyBiYW5rLT5zdHJpZGU7CiAJCWwgPSBfX3Jhd19yZWFkbChyZWcpOwogCQlpZiAoZW5hYmxlKQogCQkJbCB8PSAxIDw8IGdwaW87CkBAIC01MzcsNyArMzg3LDcgQEAKIAlzd2l0Y2ggKGJhbmstPm1ldGhvZCkgewogI2lmZGVmIENPTkZJR19BUkNIX09NQVAxCiAJY2FzZSBNRVRIT0RfTVBVSU86Ci0JCXJlZyArPSBPTUFQX01QVUlPX0lOUFVUX0xBVENIOworCQlyZWcgKz0gT01BUF9NUFVJT19JTlBVVF9MQVRDSCAvIGJhbmstPnN0cmlkZTsKIAkJYnJlYWs7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWApAQCAtNTgzLDcgKzQzMyw3IEBACiAJc3dpdGNoIChiYW5rLT5tZXRob2QpIHsKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMQogCWNhc2UgTUVUSE9EX01QVUlPOgotCQlyZWcgKz0gT01BUF9NUFVJT19PVVRQVVQ7CisJCXJlZyArPSBPTUFQX01QVUlPX09VVFBVVCAvIGJhbmstPnN0cmlkZTsKIAkJYnJlYWs7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWApAQCAtNjQyLDYgKzQ5Miw5IEBACiAJdTMyCQkJdmFsOwogCXUzMgkJCWw7CiAKKwlpZiAoIWJhbmstPmRiY2tfZmxhZykKKwkJcmV0dXJuOworCiAJaWYgKGRlYm91bmNlIDwgMzIpCiAJCWRlYm91bmNlID0gMHgwMTsKIAllbHNlIGlmIChkZWJvdW5jZSA+IDc5MzYpCkBAIC02NTEsNyArNTA0LDcgQEAKIAogCWwgPSAxIDw8IGdldF9ncGlvX2luZGV4KGdwaW8pOwogCi0JaWYgKGNwdV9pc19vbWFwNDR4eCgpKQorCWlmIChiYW5rLT5tZXRob2QgPT0gTUVUSE9EX0dQSU9fNDRYWCkKIAkJcmVnICs9IE9NQVA0X0dQSU9fREVCT1VOQ0lOR1RJTUU7CiAJZWxzZQogCQlyZWcgKz0gT01BUDI0WFhfR1BJT19ERUJPVU5DRV9WQUw7CkBAIC02NTksNyArNTEyLDcgQEAKIAlfX3Jhd193cml0ZWwoZGVib3VuY2UsIHJlZyk7CiAKIAlyZWcgPSBiYW5rLT5iYXNlOwotCWlmIChjcHVfaXNfb21hcDQ0eHgoKSkKKwlpZiAoYmFuay0+bWV0aG9kID09IE1FVEhPRF9HUElPXzQ0WFgpCiAJCXJlZyArPSBPTUFQNF9HUElPX0RFQk9VTkNFTkFCTEU7CiAJZWxzZQogCQlyZWcgKz0gT01BUDI0WFhfR1BJT19ERUJPVU5DRV9FTjsKQEAgLTY2OCwxMiArNTIxLDEwIEBACiAKIAlpZiAoZGVib3VuY2UpIHsKIAkJdmFsIHw9IGw7Ci0JCWlmIChjcHVfaXNfb21hcDM0eHgoKSB8fCBjcHVfaXNfb21hcDQ0eHgoKSkKLQkJCWNsa19lbmFibGUoYmFuay0+ZGJjayk7CisJCWNsa19lbmFibGUoYmFuay0+ZGJjayk7CiAJfSBlbHNlIHsKIAkJdmFsICY9IH5sOwotCQlpZiAoY3B1X2lzX29tYXAzNHh4KCkgfHwgY3B1X2lzX29tYXA0NHh4KCkpCi0JCQljbGtfZGlzYWJsZShiYW5rLT5kYmNrKTsKKwkJY2xrX2Rpc2FibGUoYmFuay0+ZGJjayk7CiAJfQogCWJhbmstPmRiY2tfZW5hYmxlX21hc2sgPSB2YWw7CiAKQEAgLTc2OSw3ICs2MjAsNyBAQAogCiAJc3dpdGNoIChiYW5rLT5tZXRob2QpIHsKIAljYXNlIE1FVEhPRF9NUFVJTzoKLQkJcmVnICs9IE9NQVBfTVBVSU9fR1BJT19JTlRfRURHRTsKKwkJcmVnICs9IE9NQVBfTVBVSU9fR1BJT19JTlRfRURHRSAvIGJhbmstPnN0cmlkZTsKIAkJYnJlYWs7CiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1WFgKIAljYXNlIE1FVEhPRF9HUElPXzE1MTA6CkBAIC04MDMsNyArNjU0LDcgQEAKIAlzd2l0Y2ggKGJhbmstPm1ldGhvZCkgewogI2lmZGVmIENPTkZJR19BUkNIX09NQVAxCiAJY2FzZSBNRVRIT0RfTVBVSU86Ci0JCXJlZyArPSBPTUFQX01QVUlPX0dQSU9fSU5UX0VER0U7CisJCXJlZyArPSBPTUFQX01QVUlPX0dQSU9fSU5UX0VER0UgLyBiYW5rLT5zdHJpZGU7CiAJCWwgPSBfX3Jhd19yZWFkbChyZWcpOwogCQlpZiAoKHRyaWdnZXIgJiBJUlFfVFlQRV9TRU5TRV9NQVNLKSA9PSBJUlFfVFlQRV9FREdFX0JPVEgpCiAJCQliYW5rLT50b2dnbGVfbWFzayB8PSAxIDw8IGdwaW87CkBAIC05ODksNyArODQwLDcgQEAKIAlzd2l0Y2ggKGJhbmstPm1ldGhvZCkgewogI2lmZGVmIENPTkZJR19BUkNIX09NQVAxCiAJY2FzZSBNRVRIT0RfTVBVSU86Ci0JCXJlZyArPSBPTUFQX01QVUlPX0dQSU9fTUFTS0lUOworCQlyZWcgKz0gT01BUF9NUFVJT19HUElPX01BU0tJVCAvIGJhbmstPnN0cmlkZTsKIAkJbWFzayA9IDB4ZmZmZjsKIAkJaW52ID0gMTsKIAkJYnJlYWs7CkBAIC0xMDQ2LDcgKzg5Nyw3IEBACiAJc3dpdGNoIChiYW5rLT5tZXRob2QpIHsKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMQogCWNhc2UgTUVUSE9EX01QVUlPOgotCQlyZWcgKz0gT01BUF9NUFVJT19HUElPX01BU0tJVDsKKwkJcmVnICs9IE9NQVBfTVBVSU9fR1BJT19NQVNLSVQgLyBiYW5rLT5zdHJpZGU7CiAJCWwgPSBfX3Jhd19yZWFkbChyZWcpOwogCQlpZiAoZW5hYmxlKQogCQkJbCAmPSB+KGdwaW9fbWFzayk7CkBAIC0xMjk2LDcgKzExNDcsOCBAQAogCWJhbmsgPSBnZXRfaXJxX2RhdGEoaXJxKTsKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMQogCWlmIChiYW5rLT5tZXRob2QgPT0gTUVUSE9EX01QVUlPKQotCQlpc3JfcmVnID0gYmFuay0+YmFzZSArIE9NQVBfTVBVSU9fR1BJT19JTlQ7CisJCWlzcl9yZWcgPSBiYW5rLT5iYXNlICsKKwkJCQlPTUFQX01QVUlPX0dQSU9fSU5UIC8gYmFuay0+c3RyaWRlOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1WFgKIAlpZiAoYmFuay0+bWV0aG9kID09IE1FVEhPRF9HUElPXzE1MTApCkBAIC0xMzE4LDYgKzExNzAsMTAgQEAKIAlpZiAoYmFuay0+bWV0aG9kID09IE1FVEhPRF9HUElPXzQ0WFgpCiAJCWlzcl9yZWcgPSBiYW5rLT5iYXNlICsgT01BUDRfR1BJT19JUlFTVEFUVVMwOwogI2VuZGlmCisKKwlpZiAoV0FSTl9PTighaXNyX3JlZykpCisJCWdvdG8gZXhpdDsKKwogCXdoaWxlKDEpIHsKIAkJdTMyIGlzcl9zYXZlZCwgbGV2ZWxfbWFzayA9IDA7CiAJCXUzMiBlbmFibGVkOwpAQCAtMTM3Nyw2ICsxMjMzLDcgQEAKIAljb25maWd1cmVkLCB3ZSBtdXN0IHVubWFzayB0aGUgYmFuayBpbnRlcnJ1cHQgb25seSBhZnRlcgogCWhhbmRsZXIocykgYXJlIGV4ZWN1dGVkIGluIG9yZGVyIHRvIGF2b2lkIHNwdXJpb3VzIGJhbmsKIAlpbnRlcnJ1cHQgKi8KK2V4aXQ6CiAJaWYgKCF1bm1hc2tlZCkKIAkJZGVzYy0+Y2hpcC0+dW5tYXNrKGlycSk7CiAKQEAgLTE0ODksNyArMTM0Niw4IEBACiB7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXN0cnVjdCBncGlvX2JhbmsJKmJhbmsgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQl2b2lkIF9faW9tZW0JCSptYXNrX3JlZyA9IGJhbmstPmJhc2UgKyBPTUFQX01QVUlPX0dQSU9fTUFTS0lUOworCXZvaWQgX19pb21lbQkJKm1hc2tfcmVnID0gYmFuay0+YmFzZSArCisJCQkJCU9NQVBfTVBVSU9fR1BJT19NQVNLSVQgLyBiYW5rLT5zdHJpZGU7CiAJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYmFuay0+bG9jaywgZmxhZ3MpOwpAQCAtMTUwNCw3ICsxMzYyLDggQEAKIHsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJc3RydWN0IGdwaW9fYmFuawkqYmFuayA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXZvaWQgX19pb21lbQkJKm1hc2tfcmVnID0gYmFuay0+YmFzZSArIE9NQVBfTVBVSU9fR1BJT19NQVNLSVQ7CisJdm9pZCBfX2lvbWVtCQkqbWFza19yZWcgPSBiYW5rLT5iYXNlICsKKwkJCQkJT01BUF9NUFVJT19HUElPX01BU0tJVCAvIGJhbmstPnN0cmlkZTsKIAl1bnNpZ25lZCBsb25nCQlmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZiYW5rLT5sb2NrLCBmbGFncyk7CkBAIC0xNTQwLDcgKzEzOTksOCBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgbXB1aW9faW5pdCh2b2lkKQogewotCXBsYXRmb3JtX3NldF9kcnZkYXRhKCZvbWFwX21wdWlvX2RldmljZSwgJmdwaW9fYmFua18xNjEwWzBdKTsKKwlzdHJ1Y3QgZ3Bpb19iYW5rICpiYW5rID0gZ2V0X2dwaW9fYmFuayhPTUFQX01QVUlPKDApKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YSgmb21hcF9tcHVpb19kZXZpY2UsIGJhbmspOwogCiAJaWYgKHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmb21hcF9tcHVpb19kcml2ZXIpID09IDApCiAJCSh2b2lkKSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm9tYXBfbXB1aW9fZGV2aWNlKTsKQEAgLTE1ODMsNyArMTQ0Myw3IEBACiAKIAlzd2l0Y2ggKGJhbmstPm1ldGhvZCkgewogCWNhc2UgTUVUSE9EX01QVUlPOgotCQlyZWcgKz0gT01BUF9NUFVJT19JT19DTlRMOworCQlyZWcgKz0gT01BUF9NUFVJT19JT19DTlRMIC8gYmFuay0+c3RyaWRlOwogCQlicmVhazsKIAljYXNlIE1FVEhPRF9HUElPXzE1MTA6CiAJCXJlZyArPSBPTUFQMTUxMF9HUElPX0RJUl9DT05UUk9MOwpAQCAtMTY0NSw2ICsxNTA1LDEzIEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWJhbmsgPSBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IGdwaW9fYmFuaywgY2hpcCk7CisKKwlpZiAoIWJhbmstPmRiY2spIHsKKwkJYmFuay0+ZGJjayA9IGNsa19nZXQoYmFuay0+ZGV2LCAiZGJjbGsiKTsKKwkJaWYgKElTX0VSUihiYW5rLT5kYmNrKSkKKwkJCWRldl9lcnIoYmFuay0+ZGV2LCAiQ291bGQgbm90IGdldCBncGlvIGRiY2tcbiIpOworCX0KKwogCXNwaW5fbG9ja19pcnFzYXZlKCZiYW5rLT5sb2NrLCBmbGFncyk7CiAJX3NldF9ncGlvX2RlYm91bmNlKGJhbmssIG9mZnNldCwgZGVib3VuY2UpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJhbmstPmxvY2ssIGZsYWdzKTsKQEAgLTE2NzMsMzQgKzE1NDAsMTYgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgaW50IGluaXRpYWxpemVkOwotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDEpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDIpCi1zdGF0aWMgc3RydWN0IGNsayAqIGdwaW9faWNrOwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyKQotc3RhdGljIHN0cnVjdCBjbGsgKiBncGlvX2ZjazsKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjQzMCkKLXN0YXRpYyBzdHJ1Y3QgY2xrICogZ3BpbzVfaWNrOwotc3RhdGljIHN0cnVjdCBjbGsgKiBncGlvNV9mY2s7Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDQpCi1zdGF0aWMgc3RydWN0IGNsayAqZ3Bpb19pY2xrc1tPTUFQMzRYWF9OUl9HUElPU107Ci0jZW5kaWYKLQotc3RhdGljIHZvaWQgX19pbml0IG9tYXBfZ3Bpb19zaG93X3Jldih2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IG9tYXBfZ3Bpb19zaG93X3JldihzdHJ1Y3QgZ3Bpb19iYW5rICpiYW5rKQogewogCXUzMiByZXY7CiAKLQlpZiAoY3B1X2lzX29tYXAxNnh4KCkpCi0JCXJldiA9IF9fcmF3X3JlYWR3KGdwaW9fYmFua1sxXS5iYXNlICsgT01BUDE2MTBfR1BJT19SRVZJU0lPTik7CisJaWYgKGNwdV9pc19vbWFwMTZ4eCgpICYmICEoYmFuay0+bWV0aG9kICE9IE1FVEhPRF9NUFVJTykpCisJCXJldiA9IF9fcmF3X3JlYWR3KGJhbmstPmJhc2UgKyBPTUFQMTYxMF9HUElPX1JFVklTSU9OKTsKIAllbHNlIGlmIChjcHVfaXNfb21hcDI0eHgoKSB8fCBjcHVfaXNfb21hcDM0eHgoKSkKLQkJcmV2ID0gX19yYXdfcmVhZGwoZ3Bpb19iYW5rWzBdLmJhc2UgKyBPTUFQMjRYWF9HUElPX1JFVklTSU9OKTsKKwkJcmV2ID0gX19yYXdfcmVhZGwoYmFuay0+YmFzZSArIE9NQVAyNFhYX0dQSU9fUkVWSVNJT04pOwogCWVsc2UgaWYgKGNwdV9pc19vbWFwNDR4eCgpKQotCQlyZXYgPSBfX3Jhd19yZWFkbChncGlvX2JhbmtbMF0uYmFzZSArIE9NQVA0X0dQSU9fUkVWSVNJT04pOworCQlyZXYgPSBfX3Jhd19yZWFkbChiYW5rLT5iYXNlICsgT01BUDRfR1BJT19SRVZJU0lPTik7CiAJZWxzZQogCQlyZXR1cm47CiAKQEAgLTE3MTMsMjUwICsxNTYyLDE5MCBAQAogICovCiBzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGdwaW9fbG9ja19jbGFzczsKIAotc3RhdGljIGludCBfX2luaXQgX29tYXBfZ3Bpb19pbml0KHZvaWQpCitzdGF0aWMgaW5saW5lIGludCBpbml0X2dwaW9faW5mbyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCWludCBpOwotCWludCBncGlvID0gMDsKLQlzdHJ1Y3QgZ3Bpb19iYW5rICpiYW5rOwotCWludCBiYW5rX3NpemUgPSBTWl84SzsJLyogTW9kdWxlIDRLQiArIEw0IDRLQiBleGNlcHQgb24gb21hcDEgKi8KLQljaGFyIGNsa19uYW1lWzExXTsKLQotCWluaXRpYWxpemVkID0gMTsKLQotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDEpCi0JaWYgKGNwdV9pc19vbWFwMTV4eCgpKSB7Ci0JCWdwaW9faWNrID0gY2xrX2dldChOVUxMLCAiYXJtX2dwaW9fY2siKTsKLQkJaWYgKElTX0VSUihncGlvX2ljaykpCi0JCQlwcmludGsoIkNvdWxkIG5vdCBnZXQgYXJtX2dwaW9fY2tcbiIpOwotCQllbHNlCi0JCQljbGtfZW5hYmxlKGdwaW9faWNrKTsKKwkvKiBUT0RPOiBBbmFseXplIHJlbW92aW5nIGdwaW9fYmFua19jb3VudCB1c2FnZSBmcm9tIGRyaXZlciBjb2RlICovCisJZ3Bpb19iYW5rID0ga3phbGxvYyhncGlvX2JhbmtfY291bnQgKiBzaXplb2Yoc3RydWN0IGdwaW9fYmFuayksCisJCQkJR0ZQX0tFUk5FTCk7CisJaWYgKCFncGlvX2JhbmspIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiTWVtb3J5IGFsbG9jIGZhaWxlZCBmb3IgZ3Bpb19iYW5rXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CiAJfQotI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMikKKwlyZXR1cm4gMDsKK30KKworLyogVE9ETzogQ2xlYW51cCBjcHVfaXNfKiBjaGVja3MgKi8KK3N0YXRpYyB2b2lkIG9tYXBfZ3Bpb19tb2RfaW5pdChzdHJ1Y3QgZ3Bpb19iYW5rICpiYW5rLCBpbnQgaWQpCit7CiAJaWYgKGNwdV9jbGFzc19pc19vbWFwMigpKSB7Ci0JCWdwaW9faWNrID0gY2xrX2dldChOVUxMLCAiZ3Bpb3NfaWNrIik7Ci0JCWlmIChJU19FUlIoZ3Bpb19pY2spKQotCQkJcHJpbnRrKCJDb3VsZCBub3QgZ2V0IGdwaW9zX2lja1xuIik7Ci0JCWVsc2UKLQkJCWNsa19lbmFibGUoZ3Bpb19pY2spOwotCQlncGlvX2ZjayA9IGNsa19nZXQoTlVMTCwgImdwaW9zX2ZjayIpOwotCQlpZiAoSVNfRVJSKGdwaW9fZmNrKSkKLQkJCXByaW50aygiQ291bGQgbm90IGdldCBncGlvc19mY2tcbiIpOwotCQllbHNlCi0JCQljbGtfZW5hYmxlKGdwaW9fZmNrKTsKKwkJaWYgKGNwdV9pc19vbWFwNDR4eCgpKSB7CisJCQlfX3Jhd193cml0ZWwoMHhmZmZmZmZmZiwgYmFuay0+YmFzZSArCisJCQkJCU9NQVA0X0dQSU9fSVJRU1RBVFVTQ0xSMCk7CisJCQlfX3Jhd193cml0ZWwoMHgwMDAwMDAwMCwgYmFuay0+YmFzZSArCisJCQkJCSBPTUFQNF9HUElPX0RFQk9VTkNFTkFCTEUpOworCQkJLyogSW5pdGlhbGl6ZSBpbnRlcmZhY2UgY2xrIHVuZ2F0ZWQsIG1vZHVsZSBlbmFibGVkICovCisJCQlfX3Jhd193cml0ZWwoMCwgYmFuay0+YmFzZSArIE9NQVA0X0dQSU9fQ1RSTCk7CisJCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAzNHh4KCkpIHsKKwkJCV9fcmF3X3dyaXRlbCgweDAwMDAwMDAwLCBiYW5rLT5iYXNlICsKKwkJCQkJT01BUDI0WFhfR1BJT19JUlFFTkFCTEUxKTsKKwkJCV9fcmF3X3dyaXRlbCgweGZmZmZmZmZmLCBiYW5rLT5iYXNlICsKKwkJCQkJT01BUDI0WFhfR1BJT19JUlFTVEFUVVMxKTsKKwkJCV9fcmF3X3dyaXRlbCgweDAwMDAwMDAwLCBiYW5rLT5iYXNlICsKKwkJCQkJT01BUDI0WFhfR1BJT19ERUJPVU5DRV9FTik7CiAKLQkJLyoKLQkJICogT24gMjQzMCAmIDM0MzAgR1BJTyA1IHVzZXMgQ09SRSBMNCBJQ0xLCi0JCSAqLwotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0MzApCi0JCWlmIChjcHVfaXNfb21hcDI0MzAoKSkgewotCQkJZ3BpbzVfaWNrID0gY2xrX2dldChOVUxMLCAiZ3BpbzVfaWNrIik7Ci0JCQlpZiAoSVNfRVJSKGdwaW81X2ljaykpCi0JCQkJcHJpbnRrKCJDb3VsZCBub3QgZ2V0IGdwaW81X2lja1xuIik7Ci0JCQllbHNlCi0JCQkJY2xrX2VuYWJsZShncGlvNV9pY2spOwotCQkJZ3BpbzVfZmNrID0gY2xrX2dldChOVUxMLCAiZ3BpbzVfZmNrIik7Ci0JCQlpZiAoSVNfRVJSKGdwaW81X2ZjaykpCi0JCQkJcHJpbnRrKCJDb3VsZCBub3QgZ2V0IGdwaW81X2Zja1xuIik7Ci0JCQllbHNlCi0JCQkJY2xrX2VuYWJsZShncGlvNV9mY2spOwotCQl9Ci0jZW5kaWYKLQl9Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDQpCi0JaWYgKGNwdV9pc19vbWFwMzR4eCgpIHx8IGNwdV9pc19vbWFwNDR4eCgpKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBPTUFQMzRYWF9OUl9HUElPUzsgaSsrKSB7Ci0JCQlzcHJpbnRmKGNsa19uYW1lLCAiZ3BpbyVkX2ljayIsIGkgKyAxKTsKLQkJCWdwaW9faWNsa3NbaV0gPSBjbGtfZ2V0KE5VTEwsIGNsa19uYW1lKTsKLQkJCWlmIChJU19FUlIoZ3Bpb19pY2xrc1tpXSkpCi0JCQkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZCBub3QgZ2V0ICVzXG4iLCBjbGtfbmFtZSk7Ci0JCQllbHNlCi0JCQkJY2xrX2VuYWJsZShncGlvX2ljbGtzW2ldKTsKLQkJfQotCX0KLSNlbmRpZgotCi0KLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAotCWlmIChjcHVfaXNfb21hcDE1eHgoKSkgewotCQlncGlvX2JhbmtfY291bnQgPSAyOwotCQlncGlvX2JhbmsgPSBncGlvX2JhbmtfMTUxMDsKLQkJYmFua19zaXplID0gU1pfMks7Ci0JfQotI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTZYWCkKLQlpZiAoY3B1X2lzX29tYXAxNnh4KCkpIHsKLQkJZ3Bpb19iYW5rX2NvdW50ID0gNTsKLQkJZ3Bpb19iYW5rID0gZ3Bpb19iYW5rXzE2MTA7Ci0JCWJhbmtfc2l6ZSA9IFNaXzJLOwotCX0KLSNlbmRpZgotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDczMCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQODUwKQotCWlmIChjcHVfaXNfb21hcDd4eCgpKSB7Ci0JCWdwaW9fYmFua19jb3VudCA9IDc7Ci0JCWdwaW9fYmFuayA9IGdwaW9fYmFua183eHg7Ci0JCWJhbmtfc2l6ZSA9IFNaXzJLOwotCX0KLSNlbmRpZgotI2lmZGVmIENPTkZJR19BUkNIX09NQVAyCi0JaWYgKGNwdV9pc19vbWFwMjQyeCgpKSB7Ci0JCWdwaW9fYmFua19jb3VudCA9IDQ7Ci0JCWdwaW9fYmFuayA9IGdwaW9fYmFua18yNDJ4OwotCX0KLQlpZiAoY3B1X2lzX29tYXAyNDN4KCkpIHsKLQkJZ3Bpb19iYW5rX2NvdW50ID0gNTsKLQkJZ3Bpb19iYW5rID0gZ3Bpb19iYW5rXzI0M3g7Ci0JfQotI2VuZGlmCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDMKLQlpZiAoY3B1X2lzX29tYXAzNHh4KCkpIHsKLQkJZ3Bpb19iYW5rX2NvdW50ID0gT01BUDM0WFhfTlJfR1BJT1M7Ci0JCWdwaW9fYmFuayA9IGdwaW9fYmFua18zNHh4OwotCX0KLSNlbmRpZgotI2lmZGVmIENPTkZJR19BUkNIX09NQVA0Ci0JaWYgKGNwdV9pc19vbWFwNDR4eCgpKSB7Ci0JCWdwaW9fYmFua19jb3VudCA9IE9NQVAzNFhYX05SX0dQSU9TOwotCQlncGlvX2JhbmsgPSBncGlvX2JhbmtfNDR4eDsKLQl9Ci0jZW5kaWYKLQlmb3IgKGkgPSAwOyBpIDwgZ3Bpb19iYW5rX2NvdW50OyBpKyspIHsKLQkJaW50IGosIGdwaW9fY291bnQgPSAxNjsKLQotCQliYW5rID0gJmdwaW9fYmFua1tpXTsKLQkJc3Bpbl9sb2NrX2luaXQoJmJhbmstPmxvY2spOwotCi0JCS8qIFN0YXRpYyBtYXBwaW5nLCBuZXZlciByZWxlYXNlZCAqLwotCQliYW5rLT5iYXNlID0gaW9yZW1hcChiYW5rLT5wYmFzZSwgYmFua19zaXplKTsKLQkJaWYgKCFiYW5rLT5iYXNlKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIkNvdWxkIG5vdCBpb3JlbWFwIGdwaW8gYmFuayVpXG4iLCBpKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJaWYgKGJhbmtfaXNfbXB1aW8oYmFuaykpCi0JCQlfX3Jhd193cml0ZXcoMHhmZmZmLCBiYW5rLT5iYXNlICsgT01BUF9NUFVJT19HUElPX01BU0tJVCk7Ci0JCWlmIChjcHVfaXNfb21hcDE1eHgoKSAmJiBiYW5rLT5tZXRob2QgPT0gTUVUSE9EX0dQSU9fMTUxMCkgewotCQkJX19yYXdfd3JpdGV3KDB4ZmZmZiwgYmFuay0+YmFzZSArIE9NQVAxNTEwX0dQSU9fSU5UX01BU0spOwotCQkJX19yYXdfd3JpdGV3KDB4MDAwMCwgYmFuay0+YmFzZSArIE9NQVAxNTEwX0dQSU9fSU5UX1NUQVRVUyk7Ci0JCX0KLQkJaWYgKGNwdV9pc19vbWFwMTZ4eCgpICYmIGJhbmstPm1ldGhvZCA9PSBNRVRIT0RfR1BJT18xNjEwKSB7Ci0JCQlfX3Jhd193cml0ZXcoMHgwMDAwLCBiYW5rLT5iYXNlICsgT01BUDE2MTBfR1BJT19JUlFFTkFCTEUxKTsKLQkJCV9fcmF3X3dyaXRldygweGZmZmYsIGJhbmstPmJhc2UgKyBPTUFQMTYxMF9HUElPX0lSUVNUQVRVUzEpOwotCQkJX19yYXdfd3JpdGV3KDB4MDAxNCwgYmFuay0+YmFzZSArIE9NQVAxNjEwX0dQSU9fU1lTQ09ORklHKTsKLQkJfQotCQlpZiAoY3B1X2lzX29tYXA3eHgoKSAmJiBiYW5rLT5tZXRob2QgPT0gTUVUSE9EX0dQSU9fN1hYKSB7Ci0JCQlfX3Jhd193cml0ZWwoMHhmZmZmZmZmZiwgYmFuay0+YmFzZSArIE9NQVA3WFhfR1BJT19JTlRfTUFTSyk7Ci0JCQlfX3Jhd193cml0ZWwoMHgwMDAwMDAwMCwgYmFuay0+YmFzZSArIE9NQVA3WFhfR1BJT19JTlRfU1RBVFVTKTsKLQotCQkJZ3Bpb19jb3VudCA9IDMyOyAvKiA3eHggaGFzIDMyLWJpdCBHUElPcyAqLwotCQl9Ci0KLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMlBMVVMKLQkJaWYgKChiYW5rLT5tZXRob2QgPT0gTUVUSE9EX0dQSU9fMjRYWCkgfHwKLQkJCQkoYmFuay0+bWV0aG9kID09IE1FVEhPRF9HUElPXzQ0WFgpKSB7CisJCQkvKiBJbml0aWFsaXplIGludGVyZmFjZSBjbGsgdW5nYXRlZCwgbW9kdWxlIGVuYWJsZWQgKi8KKwkJCV9fcmF3X3dyaXRlbCgwLCBiYW5rLT5iYXNlICsgT01BUDI0WFhfR1BJT19DVFJMKTsKKwkJfSBlbHNlIGlmIChjcHVfaXNfb21hcDI0eHgoKSkgewogCQkJc3RhdGljIGNvbnN0IHUzMiBub25fd2FrZXVwX2dwaW9zW10gPSB7CiAJCQkJMHhlMjAzZmZjMCwgMHgwODcwMDA0MAogCQkJfTsKLQotCQkJaWYgKGNwdV9pc19vbWFwNDR4eCgpKSB7Ci0JCQkJX19yYXdfd3JpdGVsKDB4ZmZmZmZmZmYsIGJhbmstPmJhc2UgKwotCQkJCQkJT01BUDRfR1BJT19JUlFTVEFUVVNDTFIwKTsKLQkJCQlfX3Jhd193cml0ZXcoMHgwMDE1LCBiYW5rLT5iYXNlICsKLQkJCQkJCU9NQVA0X0dQSU9fU1lTQ09ORklHKTsKLQkJCQlfX3Jhd193cml0ZWwoMHgwMDAwMDAwMCwgYmFuay0+YmFzZSArCi0JCQkJCQkgT01BUDRfR1BJT19ERUJPVU5DRU5BQkxFKTsKLQkJCQkvKgotCQkJCSAqIEluaXRpYWxpemUgaW50ZXJmYWNlIGNsb2NrIHVuZ2F0ZWQsCi0JCQkJICogbW9kdWxlIGVuYWJsZWQKLQkJCQkgKi8KLQkJCQlfX3Jhd193cml0ZWwoMCwgYmFuay0+YmFzZSArIE9NQVA0X0dQSU9fQ1RSTCk7Ci0JCQl9IGVsc2UgewotCQkJCV9fcmF3X3dyaXRlbCgweDAwMDAwMDAwLCBiYW5rLT5iYXNlICsKLQkJCQkJCU9NQVAyNFhYX0dQSU9fSVJRRU5BQkxFMSk7Ci0JCQkJX19yYXdfd3JpdGVsKDB4ZmZmZmZmZmYsIGJhbmstPmJhc2UgKwotCQkJCQkJT01BUDI0WFhfR1BJT19JUlFTVEFUVVMxKTsKLQkJCQlfX3Jhd193cml0ZXcoMHgwMDE1LCBiYW5rLT5iYXNlICsKLQkJCQkJCU9NQVAyNFhYX0dQSU9fU1lTQ09ORklHKTsKLQkJCQlfX3Jhd193cml0ZWwoMHgwMDAwMDAwMCwgYmFuay0+YmFzZSArCi0JCQkJCQlPTUFQMjRYWF9HUElPX0RFQk9VTkNFX0VOKTsKLQotCQkJCS8qCi0JCQkJICogSW5pdGlhbGl6ZSBpbnRlcmZhY2UgY2xvY2sgdW5nYXRlZCwKLQkJCQkgKiBtb2R1bGUgZW5hYmxlZAotCQkJCSAqLwotCQkJCV9fcmF3X3dyaXRlbCgwLCBiYW5rLT5iYXNlICsKLQkJCQkJCU9NQVAyNFhYX0dQSU9fQ1RSTCk7Ci0JCQl9Ci0JCQlpZiAoY3B1X2lzX29tYXAyNHh4KCkgJiYKLQkJCSAgICBpIDwgQVJSQVlfU0laRShub25fd2FrZXVwX2dwaW9zKSkKLQkJCQliYW5rLT5ub25fd2FrZXVwX2dwaW9zID0gbm9uX3dha2V1cF9ncGlvc1tpXTsKLQkJCWdwaW9fY291bnQgPSAzMjsKKwkJCWlmIChpZCA8IEFSUkFZX1NJWkUobm9uX3dha2V1cF9ncGlvcykpCisJCQkJYmFuay0+bm9uX3dha2V1cF9ncGlvcyA9IG5vbl93YWtldXBfZ3Bpb3NbaWRdOwogCQl9Ci0jZW5kaWYKLQotCQliYW5rLT5tb2RfdXNhZ2UgPSAwOwotCQkvKiBSRVZJU0lUIGV2ZW50dWFsbHkgc3dpdGNoIGZyb20gT01BUC1zcGVjaWZpYyBncGlvIHN0cnVjdHMKLQkJICogb3ZlciB0byB0aGUgZ2VuZXJpYyBvbmVzCi0JCSAqLwotCQliYW5rLT5jaGlwLnJlcXVlc3QgPSBvbWFwX2dwaW9fcmVxdWVzdDsKLQkJYmFuay0+Y2hpcC5mcmVlID0gb21hcF9ncGlvX2ZyZWU7Ci0JCWJhbmstPmNoaXAuZGlyZWN0aW9uX2lucHV0ID0gZ3Bpb19pbnB1dDsKLQkJYmFuay0+Y2hpcC5nZXQgPSBncGlvX2dldDsKLQkJYmFuay0+Y2hpcC5kaXJlY3Rpb25fb3V0cHV0ID0gZ3Bpb19vdXRwdXQ7Ci0JCWJhbmstPmNoaXAuc2V0X2RlYm91bmNlID0gZ3Bpb19kZWJvdW5jZTsKLQkJYmFuay0+Y2hpcC5zZXQgPSBncGlvX3NldDsKLQkJYmFuay0+Y2hpcC50b19pcnEgPSBncGlvXzJpcnE7Ci0JCWlmIChiYW5rX2lzX21wdWlvKGJhbmspKSB7Ci0JCQliYW5rLT5jaGlwLmxhYmVsID0gIm1wdWlvIjsKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTZYWAotCQkJYmFuay0+Y2hpcC5kZXYgPSAmb21hcF9tcHVpb19kZXZpY2UuZGV2OwotI2VuZGlmCi0JCQliYW5rLT5jaGlwLmJhc2UgPSBPTUFQX01QVUlPKDApOwotCQl9IGVsc2UgewotCQkJYmFuay0+Y2hpcC5sYWJlbCA9ICJncGlvIjsKLQkJCWJhbmstPmNoaXAuYmFzZSA9IGdwaW87Ci0JCQlncGlvICs9IGdwaW9fY291bnQ7CisJfSBlbHNlIGlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkgeworCQlpZiAoYmFua19pc19tcHVpbyhiYW5rKSkKKwkJCV9fcmF3X3dyaXRldygweGZmZmYsIGJhbmstPmJhc2UgKworCQkJCU9NQVBfTVBVSU9fR1BJT19NQVNLSVQgLyBiYW5rLT5zdHJpZGUpOworCQlpZiAoY3B1X2lzX29tYXAxNXh4KCkgJiYgYmFuay0+bWV0aG9kID09IE1FVEhPRF9HUElPXzE1MTApIHsKKwkJCV9fcmF3X3dyaXRldygweGZmZmYsIGJhbmstPmJhc2UKKwkJCQkJCSsgT01BUDE1MTBfR1BJT19JTlRfTUFTSyk7CisJCQlfX3Jhd193cml0ZXcoMHgwMDAwLCBiYW5rLT5iYXNlCisJCQkJCQkrIE9NQVAxNTEwX0dQSU9fSU5UX1NUQVRVUyk7CiAJCX0KLQkJYmFuay0+Y2hpcC5uZ3BpbyA9IGdwaW9fY291bnQ7CisJCWlmIChjcHVfaXNfb21hcDE2eHgoKSAmJiBiYW5rLT5tZXRob2QgPT0gTUVUSE9EX0dQSU9fMTYxMCkgeworCQkJX19yYXdfd3JpdGV3KDB4MDAwMCwgYmFuay0+YmFzZQorCQkJCQkJKyBPTUFQMTYxMF9HUElPX0lSUUVOQUJMRTEpOworCQkJX19yYXdfd3JpdGV3KDB4ZmZmZiwgYmFuay0+YmFzZQorCQkJCQkJKyBPTUFQMTYxMF9HUElPX0lSUVNUQVRVUzEpOworCQkJX19yYXdfd3JpdGV3KDB4MDAxNCwgYmFuay0+YmFzZQorCQkJCQkJKyBPTUFQMTYxMF9HUElPX1NZU0NPTkZJRyk7CiAKLQkJZ3Bpb2NoaXBfYWRkKCZiYW5rLT5jaGlwKTsKLQotCQlmb3IgKGogPSBiYW5rLT52aXJ0dWFsX2lycV9zdGFydDsKLQkJICAgICBqIDwgYmFuay0+dmlydHVhbF9pcnFfc3RhcnQgKyBncGlvX2NvdW50OyBqKyspIHsKLQkJCWxvY2tkZXBfc2V0X2NsYXNzKCZpcnFfZGVzY1tqXS5sb2NrLCAmZ3Bpb19sb2NrX2NsYXNzKTsKLQkJCXNldF9pcnFfY2hpcF9kYXRhKGosIGJhbmspOwotCQkJaWYgKGJhbmtfaXNfbXB1aW8oYmFuaykpCi0JCQkJc2V0X2lycV9jaGlwKGosICZtcHVpb19pcnFfY2hpcCk7Ci0JCQllbHNlCi0JCQkJc2V0X2lycV9jaGlwKGosICZncGlvX2lycV9jaGlwKTsKLQkJCXNldF9pcnFfaGFuZGxlcihqLCBoYW5kbGVfc2ltcGxlX2lycSk7Ci0JCQlzZXRfaXJxX2ZsYWdzKGosIElSUUZfVkFMSUQpOworCQkJLyoKKwkJCSAqIEVuYWJsZSBzeXN0ZW0gY2xvY2sgZm9yIEdQSU8gbW9kdWxlLgorCQkJICogVGhlIENBTV9DTEtfQ1RSTCAqaXMqIHJlYWxseSB0aGUgcmlnaHQgcGxhY2UuCisJCQkgKi8KKwkJCW9tYXBfd3JpdGVsKG9tYXBfcmVhZGwoVUxQRF9DQU1fQ0xLX0NUUkwpIHwgMHgwNCwKKwkJCQkJCVVMUERfQ0FNX0NMS19DVFJMKTsKIAkJfQotCQlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihiYW5rLT5pcnEsIGdwaW9faXJxX2hhbmRsZXIpOwotCQlzZXRfaXJxX2RhdGEoYmFuay0+aXJxLCBiYW5rKTsKLQotCQlpZiAoY3B1X2lzX29tYXAzNHh4KCkgfHwgY3B1X2lzX29tYXA0NHh4KCkpIHsKLQkJCXNwcmludGYoY2xrX25hbWUsICJncGlvJWRfZGJjayIsIGkgKyAxKTsKLQkJCWJhbmstPmRiY2sgPSBjbGtfZ2V0KE5VTEwsIGNsa19uYW1lKTsKLQkJCWlmIChJU19FUlIoYmFuay0+ZGJjaykpCi0JCQkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZCBub3QgZ2V0ICVzXG4iLCBjbGtfbmFtZSk7CisJCWlmIChjcHVfaXNfb21hcDd4eCgpICYmIGJhbmstPm1ldGhvZCA9PSBNRVRIT0RfR1BJT183WFgpIHsKKwkJCV9fcmF3X3dyaXRlbCgweGZmZmZmZmZmLCBiYW5rLT5iYXNlCisJCQkJCQkrIE9NQVA3WFhfR1BJT19JTlRfTUFTSyk7CisJCQlfX3Jhd193cml0ZWwoMHgwMDAwMDAwMCwgYmFuay0+YmFzZQorCQkJCQkJKyBPTUFQN1hYX0dQSU9fSU5UX1NUQVRVUyk7CiAJCX0KIAl9Cit9CiAKLQkvKiBFbmFibGUgc3lzdGVtIGNsb2NrIGZvciBHUElPIG1vZHVsZS4KLQkgKiBUaGUgQ0FNX0NMS19DVFJMICppcyogcmVhbGx5IHRoZSByaWdodCBwbGFjZS4gKi8KLQlpZiAoY3B1X2lzX29tYXAxNnh4KCkpCi0JCW9tYXBfd3JpdGVsKG9tYXBfcmVhZGwoVUxQRF9DQU1fQ0xLX0NUUkwpIHwgMHgwNCwgVUxQRF9DQU1fQ0xLX0NUUkwpOworc3RhdGljIHZvaWQgX19pbml0IG9tYXBfZ3Bpb19jaGlwX2luaXQoc3RydWN0IGdwaW9fYmFuayAqYmFuaykKK3sKKwlpbnQgajsKKwlzdGF0aWMgaW50IGdwaW87CiAKLQkvKiBFbmFibGUgYXV0b2lkbGUgZm9yIHRoZSBPQ1AgaW50ZXJmYWNlICovCi0JaWYgKGNwdV9pc19vbWFwMjR4eCgpKQotCQlvbWFwX3dyaXRlbCgxIDw8IDAsIDB4NDgwMTkwMTApOwotCWlmIChjcHVfaXNfb21hcDM0eHgoKSkKLQkJb21hcF93cml0ZWwoMSA8PCAwLCAweDQ4MzA2ODE0KTsKKwliYW5rLT5tb2RfdXNhZ2UgPSAwOworCS8qCisJICogUkVWSVNJVCBldmVudHVhbGx5IHN3aXRjaCBmcm9tIE9NQVAtc3BlY2lmaWMgZ3BpbyBzdHJ1Y3RzCisJICogb3ZlciB0byB0aGUgZ2VuZXJpYyBvbmVzCisJICovCisJYmFuay0+Y2hpcC5yZXF1ZXN0ID0gb21hcF9ncGlvX3JlcXVlc3Q7CisJYmFuay0+Y2hpcC5mcmVlID0gb21hcF9ncGlvX2ZyZWU7CisJYmFuay0+Y2hpcC5kaXJlY3Rpb25faW5wdXQgPSBncGlvX2lucHV0OworCWJhbmstPmNoaXAuZ2V0ID0gZ3Bpb19nZXQ7CisJYmFuay0+Y2hpcC5kaXJlY3Rpb25fb3V0cHV0ID0gZ3Bpb19vdXRwdXQ7CisJYmFuay0+Y2hpcC5zZXRfZGVib3VuY2UgPSBncGlvX2RlYm91bmNlOworCWJhbmstPmNoaXAuc2V0ID0gZ3Bpb19zZXQ7CisJYmFuay0+Y2hpcC50b19pcnEgPSBncGlvXzJpcnE7CisJaWYgKGJhbmtfaXNfbXB1aW8oYmFuaykpIHsKKwkJYmFuay0+Y2hpcC5sYWJlbCA9ICJtcHVpbyI7CisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE2WFgKKwkJYmFuay0+Y2hpcC5kZXYgPSAmb21hcF9tcHVpb19kZXZpY2UuZGV2OworI2VuZGlmCisJCWJhbmstPmNoaXAuYmFzZSA9IE9NQVBfTVBVSU8oMCk7CisJfSBlbHNlIHsKKwkJYmFuay0+Y2hpcC5sYWJlbCA9ICJncGlvIjsKKwkJYmFuay0+Y2hpcC5iYXNlID0gZ3BpbzsKKwkJZ3BpbyArPSBiYW5rX3dpZHRoOworCX0KKwliYW5rLT5jaGlwLm5ncGlvID0gYmFua193aWR0aDsKIAotCW9tYXBfZ3Bpb19zaG93X3JldigpOworCWdwaW9jaGlwX2FkZCgmYmFuay0+Y2hpcCk7CisKKwlmb3IgKGogPSBiYW5rLT52aXJ0dWFsX2lycV9zdGFydDsKKwkJICAgICBqIDwgYmFuay0+dmlydHVhbF9pcnFfc3RhcnQgKyBiYW5rX3dpZHRoOyBqKyspIHsKKwkJbG9ja2RlcF9zZXRfY2xhc3MoJmlycV9kZXNjW2pdLmxvY2ssICZncGlvX2xvY2tfY2xhc3MpOworCQlzZXRfaXJxX2NoaXBfZGF0YShqLCBiYW5rKTsKKwkJaWYgKGJhbmtfaXNfbXB1aW8oYmFuaykpCisJCQlzZXRfaXJxX2NoaXAoaiwgJm1wdWlvX2lycV9jaGlwKTsKKwkJZWxzZQorCQkJc2V0X2lycV9jaGlwKGosICZncGlvX2lycV9jaGlwKTsKKwkJc2V0X2lycV9oYW5kbGVyKGosIGhhbmRsZV9zaW1wbGVfaXJxKTsKKwkJc2V0X2lycV9mbGFncyhqLCBJUlFGX1ZBTElEKTsKKwl9CisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoYmFuay0+aXJxLCBncGlvX2lycV9oYW5kbGVyKTsKKwlzZXRfaXJxX2RhdGEoYmFuay0+aXJxLCBiYW5rKTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgb21hcF9ncGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RhdGljIGludCBncGlvX2luaXRfZG9uZTsKKwlzdHJ1Y3Qgb21hcF9ncGlvX3BsYXRmb3JtX2RhdGEgKnBkYXRhOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCBpZDsKKwlzdHJ1Y3QgZ3Bpb19iYW5rICpiYW5rOworCisJaWYgKCFwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCisJaWYgKCFncGlvX2luaXRfZG9uZSkgeworCQlpbnQgcmV0OworCisJCXJldCA9IGluaXRfZ3Bpb19pbmZvKHBkZXYpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlpZCA9IHBkZXYtPmlkOworCWJhbmsgPSAmZ3Bpb19iYW5rW2lkXTsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgMCk7CisJaWYgKHVubGlrZWx5KCFyZXMpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkdQSU8gQmFuayAlaSBJbnZhbGlkIElSUSByZXNvdXJjZVxuIiwgaWQpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwliYW5rLT5pcnEgPSByZXMtPnN0YXJ0OworCWJhbmstPnZpcnR1YWxfaXJxX3N0YXJ0ID0gcGRhdGEtPnZpcnR1YWxfaXJxX3N0YXJ0OworCWJhbmstPm1ldGhvZCA9IHBkYXRhLT5iYW5rX3R5cGU7CisJYmFuay0+ZGV2ID0gJnBkZXYtPmRldjsKKwliYW5rLT5kYmNrX2ZsYWcgPSBwZGF0YS0+ZGJja19mbGFnOworCWJhbmstPnN0cmlkZSA9IHBkYXRhLT5iYW5rX3N0cmlkZTsKKwliYW5rX3dpZHRoID0gcGRhdGEtPmJhbmtfd2lkdGg7CisKKwlzcGluX2xvY2tfaW5pdCgmYmFuay0+bG9jayk7CisKKwkvKiBTdGF0aWMgbWFwcGluZywgbmV2ZXIgcmVsZWFzZWQgKi8KKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICh1bmxpa2VseSghcmVzKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJHUElPIEJhbmsgJWkgSW52YWxpZCBtZW0gcmVzb3VyY2VcbiIsIGlkKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJYmFuay0+YmFzZSA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwlpZiAoIWJhbmstPmJhc2UpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ291bGQgbm90IGlvcmVtYXAgZ3BpbyBiYW5rJWlcbiIsIGlkKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcG1fcnVudGltZV9lbmFibGUoYmFuay0+ZGV2KTsKKwlwbV9ydW50aW1lX2dldF9zeW5jKGJhbmstPmRldik7CisKKwlvbWFwX2dwaW9fbW9kX2luaXQoYmFuaywgaWQpOworCW9tYXBfZ3Bpb19jaGlwX2luaXQoYmFuayk7CisJb21hcF9ncGlvX3Nob3dfcmV2KGJhbmspOworCisJaWYgKCFncGlvX2luaXRfZG9uZSkKKwkJZ3Bpb19pbml0X2RvbmUgPSAxOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yMDc0LDcgKzE4NjMsNyBAQAogCiBzdGF0aWMgaW50IHdvcmthcm91bmRfZW5hYmxlZDsKIAotdm9pZCBvbWFwMl9ncGlvX3ByZXBhcmVfZm9yX2lkbGUoaW50IHBvd2VyX3N0YXRlKQordm9pZCBvbWFwMl9ncGlvX3ByZXBhcmVfZm9yX2lkbGUoaW50IG9mZl9tb2RlKQogewogCWludCBpLCBjID0gMDsKIAlpbnQgbWluID0gMDsKQEAgLTIwOTAsNyArMTg3OSw3IEBACiAJCWZvciAoaiA9IDA7IGogPCBod2VpZ2h0X2xvbmcoYmFuay0+ZGJja19lbmFibGVfbWFzayk7IGorKykKIAkJCWNsa19kaXNhYmxlKGJhbmstPmRiY2spOwogCi0JCWlmIChwb3dlcl9zdGF0ZSA+IFBXUkRNX1BPV0VSX09GRikKKwkJaWYgKCFvZmZfbW9kZSkKIAkJCWNvbnRpbnVlOwogCiAJCS8qIElmIGdvaW5nIHRvIE9GRiwgcmVtb3ZlIHRyaWdnZXJpbmcgZm9yIGFsbApAQCAtMjI1MSw4ICsyMDQwLDYgQEAKIAkvKiBzYXZpbmcgYmFua3MgZnJvbSAyLTYgb25seSBzaW5jZSBHUElPMSBpcyBpbiBXS1VQICovCiAJZm9yIChpID0gMTsgaSA8IGdwaW9fYmFua19jb3VudDsgaSsrKSB7CiAJCXN0cnVjdCBncGlvX2JhbmsgKmJhbmsgPSAmZ3Bpb19iYW5rW2ldOwotCQlncGlvX2NvbnRleHRbaV0uc3lzY29uZmlnID0KLQkJCV9fcmF3X3JlYWRsKGJhbmstPmJhc2UgKyBPTUFQMjRYWF9HUElPX1NZU0NPTkZJRyk7CiAJCWdwaW9fY29udGV4dFtpXS5pcnFlbmFibGUxID0KIAkJCV9fcmF3X3JlYWRsKGJhbmstPmJhc2UgKyBPTUFQMjRYWF9HUElPX0lSUUVOQUJMRTEpOwogCQlncGlvX2NvbnRleHRbaV0uaXJxZW5hYmxlMiA9CkBAIC0yMjgzLDggKzIwNzAsNiBAQAogCiAJZm9yIChpID0gMTsgaSA8IGdwaW9fYmFua19jb3VudDsgaSsrKSB7CiAJCXN0cnVjdCBncGlvX2JhbmsgKmJhbmsgPSAmZ3Bpb19iYW5rW2ldOwotCQlfX3Jhd193cml0ZWwoZ3Bpb19jb250ZXh0W2ldLnN5c2NvbmZpZywKLQkJCQliYW5rLT5iYXNlICsgT01BUDI0WFhfR1BJT19TWVNDT05GSUcpOwogCQlfX3Jhd193cml0ZWwoZ3Bpb19jb250ZXh0W2ldLmlycWVuYWJsZTEsCiAJCQkJYmFuay0+YmFzZSArIE9NQVAyNFhYX0dQSU9fSVJRRU5BQkxFMSk7CiAJCV9fcmF3X3dyaXRlbChncGlvX2NvbnRleHRbaV0uaXJxZW5hYmxlMiwKQEAgLTIzMDksMjUgKzIwOTQsMjggQEAKIH0KICNlbmRpZgogCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBvbWFwX2dwaW9fZHJpdmVyID0geworCS5wcm9iZQkJPSBvbWFwX2dwaW9fcHJvYmUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gIm9tYXBfZ3BpbyIsCisJfSwKK307CisKIC8qCi0gKiBUaGlzIG1heSBnZXQgY2FsbGVkIGVhcmx5IGZyb20gYm9hcmQgc3BlY2lmaWMgaW5pdAotICogZm9yIGJvYXJkcyB0aGF0IGhhdmUgaW50ZXJydXB0cyByb3V0ZWQgdmlhIEZQR0EuCisgKiBncGlvIGRyaXZlciByZWdpc3RlciBuZWVkcyB0byBiZSBkb25lIGJlZm9yZQorICogbWFjaGluZV9pbml0IGZ1bmN0aW9ucyBhY2Nlc3MgZ3BpbyBBUElzLgorICogSGVuY2Ugb21hcF9ncGlvX2Rydl9yZWcoKSBpcyBhIHBvc3Rjb3JlX2luaXRjYWxsLgogICovCi1pbnQgX19pbml0IG9tYXBfZ3Bpb19pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBvbWFwX2dwaW9fZHJ2X3JlZyh2b2lkKQogewotCWlmICghaW5pdGlhbGl6ZWQpCi0JCXJldHVybiBfb21hcF9ncGlvX2luaXQoKTsKLQllbHNlCi0JCXJldHVybiAwOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm9tYXBfZ3Bpb19kcml2ZXIpOwogfQorcG9zdGNvcmVfaW5pdGNhbGwob21hcF9ncGlvX2Rydl9yZWcpOwogCiBzdGF0aWMgaW50IF9faW5pdCBvbWFwX2dwaW9fc3lzaW5pdCh2b2lkKQogewogCWludCByZXQgPSAwOwogCi0JaWYgKCFpbml0aWFsaXplZCkKLQkJcmV0ID0gX29tYXBfZ3Bpb19pbml0KCk7Ci0KIAltcHVpb19pbml0KCk7CiAKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNlhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyUExVUykKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pMmMuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pMmMuYwppbmRleCBhNWNlNGYwLi5hNGY4MDAzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaTJjLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2kyYy5jCkBAIC0yNywyMCArMjcsMjAgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMtb21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KIAogI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgogI2luY2x1ZGUgPHBsYXQvbXV4Lmg+CiAjaW5jbHVkZSA8cGxhdC9pMmMuaD4KICNpbmNsdWRlIDxwbGF0L29tYXAtcG0uaD4KKyNpbmNsdWRlIDxwbGF0L29tYXBfZGV2aWNlLmg+CiAKICNkZWZpbmUgT01BUF9JMkNfU0laRQkJMHgzZgogI2RlZmluZSBPTUFQMV9JMkNfQkFTRQkJMHhmZmZiMzgwMAotI2RlZmluZSBPTUFQMl9JMkNfQkFTRTEJCTB4NDgwNzAwMDAKLSNkZWZpbmUgT01BUDJfSTJDX0JBU0UyCQkweDQ4MDcyMDAwCi0jZGVmaW5lIE9NQVAyX0kyQ19CQVNFMwkJMHg0ODA2MDAwMAotI2RlZmluZSBPTUFQNF9JMkNfQkFTRTQJCTB4NDgzNTAwMDAKIAotc3RhdGljIGNvbnN0IGNoYXIgbmFtZVtdID0gImkyY19vbWFwIjsKK3N0YXRpYyBjb25zdCBjaGFyIG5hbWVbXSA9ICJvbWFwX2kyYyI7CiAKICNkZWZpbmUgSTJDX1JFU09VUkNFX0JVSUxERVIoYmFzZSwgaXJxKQkJCVwKIAl7CQkJCQkJXApAQCAtNTUsMTUgKzU1LDYgQEAKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpMmNfcmVzb3VyY2VzW11bMl0gPSB7CiAJeyBJMkNfUkVTT1VSQ0VfQlVJTERFUigwLCAwKSB9LAotI2lmCWRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDJQTFVTKQotCXsgSTJDX1JFU09VUkNFX0JVSUxERVIoT01BUDJfSTJDX0JBU0UyLCAwKSB9LAotI2VuZGlmCi0jaWYJZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNCkKLQl7IEkyQ19SRVNPVVJDRV9CVUlMREVSKE9NQVAyX0kyQ19CQVNFMywgMCkgfSwKLSNlbmRpZgotI2lmCWRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDQpCi0JeyBJMkNfUkVTT1VSQ0VfQlVJTERFUihPTUFQNF9JMkNfQkFTRTQsIDApIH0sCi0jZW5kaWYKIH07CiAKICNkZWZpbmUgSTJDX0RFVl9CVUlMREVSKGJ1c19pZCwgcmVzLCBkYXRhKQkJXApAQCAtNzcsMTggKzY4LDExIEBACiAJCX0sCQkJCQlcCiAJfQogCi1zdGF0aWMgc3RydWN0IG9tYXBfaTJjX2J1c19wbGF0Zm9ybV9kYXRhIGkyY19wZGF0YVtBUlJBWV9TSVpFKGkyY19yZXNvdXJjZXMpXTsKKyNkZWZpbmUgTUFYX09NQVBfSTJDX0hXTU9EX05BTUVfTEVOCTE2CisjZGVmaW5lIE9NQVBfSTJDX01BWF9DT05UUk9MTEVSUyA0CitzdGF0aWMgc3RydWN0IG9tYXBfaTJjX2J1c19wbGF0Zm9ybV9kYXRhIGkyY19wZGF0YVtPTUFQX0kyQ19NQVhfQ09OVFJPTExFUlNdOwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb21hcF9pMmNfZGV2aWNlc1tdID0gewogCUkyQ19ERVZfQlVJTERFUigxLCBpMmNfcmVzb3VyY2VzWzBdLCAmaTJjX3BkYXRhWzBdKSwKLSNpZglkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyUExVUykKLQlJMkNfREVWX0JVSUxERVIoMiwgaTJjX3Jlc291cmNlc1sxXSwgJmkyY19wZGF0YVsxXSksCi0jZW5kaWYKLSNpZglkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQotCUkyQ19ERVZfQlVJTERFUigzLCBpMmNfcmVzb3VyY2VzWzJdLCAmaTJjX3BkYXRhWzJdKSwKLSNlbmRpZgotI2lmCWRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDQpCi0JSTJDX0RFVl9CVUlMREVSKDQsIGkyY19yZXNvdXJjZXNbM10sICZpMmNfcGRhdGFbM10pLAotI2VuZGlmCiB9OwogCiAjZGVmaW5lIE9NQVBfSTJDX0NNRExJTkVfU0VUVVAJKEJJVCgzMSkpCkBAIC0xMDksMzUgKzkzLDI1IEBACiAJcmV0dXJuIHBvcnRzOwogfQogCi0vKiBTaGFyZWQgYmV0d2VlbiBvbWFwMiBhbmQgMyAqLwotc3RhdGljIHJlc291cmNlX3NpemVfdCBvbWFwMl9pMmNfaXJxWzNdIF9faW5pdGRhdGEgPSB7Ci0JSU5UXzI0WFhfSTJDMV9JUlEsCi0JSU5UXzI0WFhfSTJDMl9JUlEsCi0JSU5UXzM0WFhfSTJDM19JUlEsCi19OwotCi1zdGF0aWMgcmVzb3VyY2Vfc2l6ZV90IG9tYXA0X2kyY19pcnFbNF0gX19pbml0ZGF0YSA9IHsKLQlPTUFQNDRYWF9JUlFfSTJDMSwKLQlPTUFQNDRYWF9JUlFfSTJDMiwKLQlPTUFQNDRYWF9JUlFfSTJDMywKLQlPTUFQNDRYWF9JUlFfSTJDNCwKLX07Ci0KLXN0YXRpYyBpbmxpbmUgaW50IG9tYXAxX2kyY19hZGRfYnVzKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIGludCBidXNfaWQpCitzdGF0aWMgaW5saW5lIGludCBvbWFwMV9pMmNfYWRkX2J1cyhpbnQgYnVzX2lkKQogewotCXN0cnVjdCBvbWFwX2kyY19idXNfcGxhdGZvcm1fZGF0YSAqcGQ7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKwlzdHJ1Y3Qgb21hcF9pMmNfYnVzX3BsYXRmb3JtX2RhdGEgKnBkYXRhOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCi0JcGQgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlvbWFwMV9pMmNfbXV4X3BpbnMoYnVzX2lkKTsKKworCXBkZXYgPSAmb21hcF9pMmNfZGV2aWNlc1tidXNfaWQgLSAxXTsKIAlyZXMgPSBwZGV2LT5yZXNvdXJjZTsKIAlyZXNbMF0uc3RhcnQgPSBPTUFQMV9JMkNfQkFTRTsKIAlyZXNbMF0uZW5kID0gcmVzWzBdLnN0YXJ0ICsgT01BUF9JMkNfU0laRTsKIAlyZXNbMV0uc3RhcnQgPSBJTlRfSTJDOwotCW9tYXAxX2kyY19tdXhfcGlucyhidXNfaWQpOworCXBkYXRhID0gJmkyY19wZGF0YVtidXNfaWQgLSAxXTsKIAogCXJldHVybiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIocGRldik7CiB9CiAKKwogLyoKICAqIFhYWCBUaGlzIGZ1bmN0aW9uIGlzIGEgdGVtcG9yYXJ5IGNvbXBhdGliaWxpdHkgd3JhcHBlciAtIG9ubHkKICAqIG5lZWRlZCB1bnRpbCB0aGUgSTJDIGRyaXZlciBjYW4gYmUgY29udmVydGVkIHRvIGNhbGwKQEAgLTE0OCw1MiArMTIyLDY0IEBACiAJb21hcF9wbV9zZXRfbWF4X21wdV93YWtldXBfbGF0KGRldiwgdCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IG9tYXAyX2kyY19hZGRfYnVzKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIGludCBidXNfaWQpCitzdGF0aWMgc3RydWN0IG9tYXBfZGV2aWNlX3BtX2xhdGVuY3kgb21hcF9pMmNfbGF0ZW5jeVtdID0geworCVswXSA9IHsKKwkJLmRlYWN0aXZhdGVfZnVuYwk9IG9tYXBfZGV2aWNlX2lkbGVfaHdtb2RzLAorCQkuYWN0aXZhdGVfZnVuYwkJPSBvbWFwX2RldmljZV9lbmFibGVfaHdtb2RzLAorCQkuZmxhZ3MJCQk9IE9NQVBfREVWSUNFX0xBVEVOQ1lfQVVUT19BREpVU1QsCisJfSwKK307CisKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMlBMVVMKK3N0YXRpYyBpbmxpbmUgaW50IG9tYXAyX2kyY19hZGRfYnVzKGludCBidXNfaWQpCiB7Ci0Jc3RydWN0IHJlc291cmNlICpyZXM7Ci0JcmVzb3VyY2Vfc2l6ZV90ICppcnE7CisJaW50IGw7CisJc3RydWN0IG9tYXBfaHdtb2QgKm9oOworCXN0cnVjdCBvbWFwX2RldmljZSAqb2Q7CisJY2hhciBvaF9uYW1lW01BWF9PTUFQX0kyQ19IV01PRF9OQU1FX0xFTl07CisJc3RydWN0IG9tYXBfaTJjX2J1c19wbGF0Zm9ybV9kYXRhICpwZGF0YTsKIAotCXJlcyA9IHBkZXYtPnJlc291cmNlOwotCi0JaWYgKCFjcHVfaXNfb21hcDQ0eHgoKSkKLQkJaXJxID0gb21hcDJfaTJjX2lycTsKLQllbHNlCi0JCWlycSA9IG9tYXA0X2kyY19pcnE7Ci0KLQlpZiAoYnVzX2lkID09IDEpIHsKLQkJcmVzWzBdLnN0YXJ0ID0gT01BUDJfSTJDX0JBU0UxOwotCQlyZXNbMF0uZW5kID0gcmVzWzBdLnN0YXJ0ICsgT01BUF9JMkNfU0laRTsKLQl9Ci0KLQlyZXNbMV0uc3RhcnQgPSBpcnFbYnVzX2lkIC0gMV07CiAJb21hcDJfaTJjX211eF9waW5zKGJ1c19pZCk7CiAKKwlsID0gc25wcmludGYob2hfbmFtZSwgTUFYX09NQVBfSTJDX0hXTU9EX05BTUVfTEVOLCAiaTJjJWQiLCBidXNfaWQpOworCVdBUk4obCA+PSBNQVhfT01BUF9JMkNfSFdNT0RfTkFNRV9MRU4sCisJCSJTdHJpbmcgYnVmZmVyIG92ZXJmbG93IGluIEkyQyVkIGRldmljZSBzZXR1cFxuIiwgYnVzX2lkKTsKKwlvaCA9IG9tYXBfaHdtb2RfbG9va3VwKG9oX25hbWUpOworCWlmICghb2gpIHsKKwkJCXByX2VycigiQ291bGQgbm90IGxvb2sgdXAgJXNcbiIsIG9oX25hbWUpOworCQkJcmV0dXJuIC1FRVhJU1Q7CisJfQorCisJcGRhdGEgPSAmaTJjX3BkYXRhW2J1c19pZCAtIDFdOwogCS8qCiAJICogV2hlbiB3YWl0aW5nIGZvciBjb21wbGV0aW9uIG9mIGEgaTJjIHRyYW5zZmVyLCB3ZSBuZWVkIHRvCiAJICogc2V0IGEgd2FrZSB1cCBsYXRlbmN5IGNvbnN0cmFpbnQgZm9yIHRoZSBNUFUuIFRoaXMgaXMgdG8KIAkgKiBlbnN1cmUgcXVpY2sgZW5vdWdoIHdha2V1cCBmcm9tIGlkbGUsIHdoZW4gdHJhbnNmZXIKIAkgKiBjb21wbGV0ZXMuCisJICogT25seSBvbWFwMyBoYXMgc3VwcG9ydCBmb3IgY29uc3RyYWludHMKIAkgKi8KLQlpZiAoY3B1X2lzX29tYXAzNHh4KCkpIHsKLQkJc3RydWN0IG9tYXBfaTJjX2J1c19wbGF0Zm9ybV9kYXRhICpwZDsKKwlpZiAoY3B1X2lzX29tYXAzNHh4KCkpCisJCXBkYXRhLT5zZXRfbXB1X3drdXBfbGF0ID0gb21hcF9wbV9zZXRfbWF4X21wdV93YWtldXBfbGF0X2NvbXBhdDsKKwlvZCA9IG9tYXBfZGV2aWNlX2J1aWxkKG5hbWUsIGJ1c19pZCwgb2gsIHBkYXRhLAorCQkJc2l6ZW9mKHN0cnVjdCBvbWFwX2kyY19idXNfcGxhdGZvcm1fZGF0YSksCisJCQlvbWFwX2kyY19sYXRlbmN5LCBBUlJBWV9TSVpFKG9tYXBfaTJjX2xhdGVuY3kpLCAwKTsKKwlXQVJOKElTX0VSUihvZCksICJDb3VsZCBub3QgYnVpbGQgb21hcF9kZXZpY2UgZm9yICVzXG4iLCBuYW1lKTsKIAotCQlwZCA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwotCQlwZC0+c2V0X21wdV93a3VwX2xhdCA9IG9tYXBfcG1fc2V0X21heF9tcHVfd2FrZXVwX2xhdF9jb21wYXQ7Ci0JfQotCi0JcmV0dXJuIHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcihwZGV2KTsKKwlyZXR1cm4gUFRSX0VSUihvZCk7CiB9CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgb21hcDJfaTJjX2FkZF9idXMoaW50IGJ1c19pZCkKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgogCiBzdGF0aWMgaW50IF9faW5pdCBvbWFwX2kyY19hZGRfYnVzKGludCBidXNfaWQpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKLQotCXBkZXYgPSAmb21hcF9pMmNfZGV2aWNlc1tidXNfaWQgLSAxXTsKLQogCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkKLQkJcmV0dXJuIG9tYXAxX2kyY19hZGRfYnVzKHBkZXYsIGJ1c19pZCk7CisJCXJldHVybiBvbWFwMV9pMmNfYWRkX2J1cyhidXNfaWQpOwogCWVsc2UKLQkJcmV0dXJuIG9tYXAyX2kyY19hZGRfYnVzKHBkZXYsIGJ1c19pZCk7CisJCXJldHVybiBvbWFwMl9pMmNfYWRkX2J1cyhidXNfaWQpOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvY2xrZGV2X29tYXAuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvY2xrZGV2X29tYXAuaAppbmRleCBiYjkzN2YzLi4yNTZhYjNmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2Nsa2Rldl9vbWFwLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9jbGtkZXZfb21hcC5oCkBAIC04LDcgKzgsNyBAQAogI2lmbmRlZiBfX0FSQ0hfQVJNX1BMQVRfT01BUF9JTkNMVURFX1BMQVRfQ0xLREVWX09NQVBfSAogI2RlZmluZSBfX0FSQ0hfQVJNX1BMQVRfT01BUF9JTkNMVURFX1BMQVRfQ0xLREVWX09NQVBfSAogCi0jaW5jbHVkZSA8YXNtL2Nsa2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsa2Rldi5oPgogCiBzdHJ1Y3Qgb21hcF9jbGsgewogCXUxNgkJCQljcHU7CkBAIC0zMSwxOCArMzEsMTggQEAKICNkZWZpbmUgQ0tfMTUxMAkJKDEgPDwgMikKICNkZWZpbmUgQ0tfMTZYWAkJKDEgPDwgMykJLyogMTZ4eCwgMTd4eCwgNTkxMiAqLwogI2RlZmluZSBDS18yNDJYCQkoMSA8PCA0KQotI2RlZmluZSBDS18yNDNYCQkoMSA8PCA1KQotI2RlZmluZSBDS18zWFhYCQkoMSA8PCA2KQkvKiBPTUFQMyArIEFNMyBjb21tb24gY2xvY2tzKi8KLSNkZWZpbmUgQ0tfMzQzWAkJKDEgPDwgNykJLyogT01BUDM0eHggY29tbW9uIGNsb2NrcyAqLwotI2RlZmluZSBDS18zNDMwRVMxCSgxIDw8IDgpCS8qIDM0eHhFUzEgb25seSAqLwotI2RlZmluZSBDS18zNDMwRVMyCSgxIDw8IDkpCS8qIDM0eHhFUzIsIEVTMywgbm9uLVNpdGFyYSAzNXh4IG9ubHkgKi8KLSNkZWZpbmUgQ0tfMzUwNQkJKDEgPDwgMTApCi0jZGVmaW5lIENLXzM1MTcJCSgxIDw8IDExKQotI2RlZmluZSBDS18zNlhYCQkoMSA8PCAxMikJLyogT01BUDM2eHgvMzd4eC1zcGVjaWZpYyBjbG9ja3MgKi8KLSNkZWZpbmUgQ0tfNDQzWAkJKDEgPDwgMTMpCisjZGVmaW5lIENLXzI0M1gJCSgxIDw8IDUpCS8qIDI0M3gsIDI1M3ggKi8KKyNkZWZpbmUgQ0tfMzQzMEVTMQkoMSA8PCA2KQkvKiAzNHh4RVMxIG9ubHkgKi8KKyNkZWZpbmUgQ0tfMzQzMEVTMlBMVVMJKDEgPDwgNykJLyogMzR4eEVTMiwgRVMzLCBub24tU2l0YXJhIDM1eHggb25seSAqLworI2RlZmluZSBDS18zNTA1CQkoMSA8PCA4KQorI2RlZmluZSBDS18zNTE3CQkoMSA8PCA5KQorI2RlZmluZSBDS18zNlhYCQkoMSA8PCAxMCkJLyogMzZ4eC8zN3h4LXNwZWNpZmljIGNsb2NrcyAqLworI2RlZmluZSBDS180NDNYCQkoMSA8PCAxMSkKIAorCisjZGVmaW5lIENLXzM0WFgJCShDS18zNDMwRVMxIHwgQ0tfMzQzMEVTMlBMVVMpCiAjZGVmaW5lIENLX0FNMzVYWAkoQ0tfMzUwNSB8IENLXzM1MTcpCS8qIGFsbCBTaXRhcmEgQU0zNXh4ICovCi0KKyNkZWZpbmUgQ0tfM1hYWAkJKENLXzM0WFggfCBDS19BTTM1WFggfCBDS18zNlhYKQogCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9jbG9jay5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9jbG9jay5oCmluZGV4IGZlZjQ2OTYuLjhlYjBhZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvY2xvY2suaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2Nsb2NrLmgKQEAgLTQ5LDEzICs0OSwxOCBAQAogLyogc3RydWN0IGNsa3NlbF9yYXRlLmZsYWdzIHBvc3NpYmlsaXRpZXMgKi8KICNkZWZpbmUgUkFURV9JTl8yNDJYCQkoMSA8PCAwKQogI2RlZmluZSBSQVRFX0lOXzI0M1gJCSgxIDw8IDEpCi0jZGVmaW5lIFJBVEVfSU5fM1hYWAkJKDEgPDwgMikJLyogcmF0ZXMgY29tbW9uIHRvIGFsbCBPTUFQMyAqLwotI2RlZmluZSBSQVRFX0lOXzM0MzBFUzIJCSgxIDw8IDMpCS8qIDM0MzBFUzIgcmF0ZXMgb25seSAqLworI2RlZmluZSBSQVRFX0lOXzM0MzBFUzEJCSgxIDw8IDIpCS8qIDM0MzBFUzEgcmF0ZXMgb25seSAqLworI2RlZmluZSBSQVRFX0lOXzM0MzBFUzJQTFVTCSgxIDw8IDMpCS8qIDM0MzAgRVMgPj0gMiByYXRlcyBvbmx5ICovCiAjZGVmaW5lIFJBVEVfSU5fMzZYWAkJKDEgPDwgNCkKICNkZWZpbmUgUkFURV9JTl80NDMwCQkoMSA8PCA1KQogCiAjZGVmaW5lIFJBVEVfSU5fMjRYWAkJKFJBVEVfSU5fMjQyWCB8IFJBVEVfSU5fMjQzWCkKLSNkZWZpbmUgUkFURV9JTl8zNDMwRVMyUExVUwkoUkFURV9JTl8zNDMwRVMyIHwgUkFURV9JTl8zNlhYKQorI2RlZmluZSBSQVRFX0lOXzM0WFgJCShSQVRFX0lOXzM0MzBFUzEgfCBSQVRFX0lOXzM0MzBFUzJQTFVTKQorI2RlZmluZSBSQVRFX0lOXzNYWFgJCShSQVRFX0lOXzM0WFggfCBSQVRFX0lOXzM2WFgpCisKKy8qIFJBVEVfSU5fMzQzMEVTMlBMVVNfMzZYWCBpbmNsdWRlcyAzNHh4LzM1eHggd2l0aCBFUyA+PTIsIGFuZCBhbGwgMzZ4eC8zN3h4ICovCisjZGVmaW5lIFJBVEVfSU5fMzQzMEVTMlBMVVNfMzZYWAkoUkFURV9JTl8zNDMwRVMyUExVUyB8IFJBVEVfSU5fMzZYWCkKKwogCiAvKioKICAqIHN0cnVjdCBjbGtzZWxfcmF0ZSAtIHJlZ2lzdGVyIGJpdGZpZWxkIHZhbHVlcyBjb3JyZXNwb25kaW5nIHRvIGNsayBkaXZpc29ycwpAQCAtMTE5LDggKzEyNCw3IEBACiAgKgogICogUG9zc2libGUgdmFsdWVzIGZvciBAZmxhZ3M6CiAgKiBEUExMX0pfVFlQRTogIkotdHlwZSBEUExMIiAob25seSBzb21lIDM2eHgsIDR4eHggRFBMTHMpCi0gKiBOT19EQ09fU0VMOiBkb24ndCBwcm9ncmFtIERDTyAob25seSBmb3Igc29tZSBKLXR5cGUgRFBMTHMpCi0KKyAqCiAgKiBAZnJlcXNlbF9tYXNrIGlzIG9ubHkgdXNlZCBvbiB0aGUgT01BUDM0eHggZmFtaWx5IGFuZCBBTTM1eHguCiAgKgogICogWFhYIFNvbWUgRFBMTHMgaGF2ZSBtdWx0aXBsZSBieXBhc3MgaW5wdXRzLCBzbyBpdCdzIG5vdCB0ZWNobmljYWxseQpAQCAtMTU2LDYgKzE2MCw4IEBACiAJdTMyCQkJYXV0b2lkbGVfbWFzazsKIAl1MzIJCQlmcmVxc2VsX21hc2s7CiAJdTMyCQkJaWRsZXN0X21hc2s7CisJdTMyCQkJZGNvX21hc2s7CisJdTMyCQkJc2RkaXZfbWFzazsKIAl1OAkJCWF1dG9fcmVjYWxfYml0OwogCXU4CQkJcmVjYWxfZW5fYml0OwogCXU4CQkJcmVjYWxfc3RfYml0OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9jbG9ja2RvbWFpbi5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9jbG9ja2RvbWFpbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYTBhNmMwLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvY2xvY2tkb21haW4uaAorKysgL2Rldi9udWxsCkBAIC0xLDE0MSArMCwwIEBACi0vKgotICogYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9jbG9ja2RvbWFpbi5oCi0gKgotICogT01BUDIvMyBjbG9ja2RvbWFpbiBmcmFtZXdvcmsgZnVuY3Rpb25zCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgotICoKLSAqIFdyaXR0ZW4gYnkgUGF1bCBXYWxtc2xleQotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLQotI2lmbmRlZiBfX0FTTV9BUk1fQVJDSF9PTUFQX0NMT0NLRE9NQUlOX0gKLSNkZWZpbmUgX19BU01fQVJNX0FSQ0hfT01BUF9DTE9DS0RPTUFJTl9ICi0KLSNpbmNsdWRlIDxwbGF0L3Bvd2VyZG9tYWluLmg+Ci0jaW5jbHVkZSA8cGxhdC9jbG9jay5oPgotI2luY2x1ZGUgPHBsYXQvY3B1Lmg+Ci0KLS8qIENsb2NrZG9tYWluIGNhcGFiaWxpdHkgZmxhZ3MgKi8KLSNkZWZpbmUgQ0xLRE1fQ0FOX0ZPUkNFX1NMRUVQCQkJKDEgPDwgMCkKLSNkZWZpbmUgQ0xLRE1fQ0FOX0ZPUkNFX1dBS0VVUAkJCSgxIDw8IDEpCi0jZGVmaW5lIENMS0RNX0NBTl9FTkFCTEVfQVVUTwkJCSgxIDw8IDIpCi0jZGVmaW5lIENMS0RNX0NBTl9ESVNBQkxFX0FVVE8JCQkoMSA8PCAzKQotCi0jZGVmaW5lIENMS0RNX0NBTl9IV1NVUAkJKENMS0RNX0NBTl9FTkFCTEVfQVVUTyB8IENMS0RNX0NBTl9ESVNBQkxFX0FVVE8pCi0jZGVmaW5lIENMS0RNX0NBTl9TV1NVUAkJKENMS0RNX0NBTl9GT1JDRV9TTEVFUCB8IENMS0RNX0NBTl9GT1JDRV9XQUtFVVApCi0jZGVmaW5lIENMS0RNX0NBTl9IV1NVUF9TV1NVUAkoQ0xLRE1fQ0FOX1NXU1VQIHwgQ0xLRE1fQ0FOX0hXU1VQKQotCi0vKiBPTUFQMjRYWCBDTV9DTEtTVENUUkxfKi5BVVRPU1RBVEVfKiByZWdpc3RlciBiaXQgdmFsdWVzICovCi0jZGVmaW5lIE9NQVAyNFhYX0NMS1NUQ1RSTF9ESVNBQkxFX0FVVE8JCTB4MAotI2RlZmluZSBPTUFQMjRYWF9DTEtTVENUUkxfRU5BQkxFX0FVVE8JCTB4MQotCi0vKiBPTUFQM1hYWCBDTV9DTEtTVENUUkxfKi5DTEtUUkNUUkxfKiByZWdpc3RlciBiaXQgdmFsdWVzICovCi0jZGVmaW5lIE9NQVAzNFhYX0NMS1NUQ1RSTF9ESVNBQkxFX0FVVE8JCTB4MAotI2RlZmluZSBPTUFQMzRYWF9DTEtTVENUUkxfRk9SQ0VfU0xFRVAJCTB4MQotI2RlZmluZSBPTUFQMzRYWF9DTEtTVENUUkxfRk9SQ0VfV0FLRVVQCQkweDIKLSNkZWZpbmUgT01BUDM0WFhfQ0xLU1RDVFJMX0VOQUJMRV9BVVRPCQkweDMKLQotLyoqCi0gKiBzdHJ1Y3QgY2xrZG1fYXV0b2RlcCAtIGNsa2RtIGRlcHMgdG8gYWRkIHdoZW4gZW50ZXJpbmcvZXhpdGluZyBod3N1cCBtb2RlCi0gKiBAY2xrZG06IGNsb2NrZG9tYWluIHRvIGFkZCB3a2RlcCtzbGVlcGRlcCBvbiAtIHNldCBuYW1lIG1lbWJlciBvbmx5Ci0gKiBAb21hcF9jaGlwOiBPTUFQIGNoaXAgdHlwZXMgdGhhdCB0aGlzIGF1dG9kZXAgaXMgdmFsaWQgb24KLSAqCi0gKiBBIGNsb2NrZG9tYWluIHRoYXQgc2hvdWxkIGhhdmUgd2tkZXBzIGFuZCBzbGVlcGRlcHMgYWRkZWQgd2hlbiBhCi0gKiBjbG9ja2RvbWFpbiBzaG91bGQgc3RheSBhY3RpdmUgaW4gaHdzdXAgbW9kZTsgYW5kIGNvbnZlcnNlbHksCi0gKiByZW1vdmVkIHdoZW4gdGhlIGNsb2NrZG9tYWluIHNob3VsZCBiZSBhbGxvd2VkIHRvIGdvIGluYWN0aXZlIGluCi0gKiBod3N1cCBtb2RlLgotICoKLSAqIEF1dG9kZXBzIGFyZSBkZXByZWNhdGVkIGFuZCBzaG91bGQgYmUgcmVtb3ZlZCBhZnRlcgotICogb21hcF9od21vZC1iYXNlZCBmaW5lLWdyYWluZWQgbW9kdWxlIGlkbGUgY29udHJvbCBpcyBhZGRlZC4KLSAqLwotc3RydWN0IGNsa2RtX2F1dG9kZXAgewotCXVuaW9uIHsKLQkJY29uc3QgY2hhciAqbmFtZTsKLQkJc3RydWN0IGNsb2NrZG9tYWluICpwdHI7Ci0JfSBjbGtkbTsKLQljb25zdCBzdHJ1Y3Qgb21hcF9jaGlwX2lkIG9tYXBfY2hpcDsKLX07Ci0KLS8qKgotICogc3RydWN0IGNsa2RtX2RlcCAtIGVuY29kZSBkZXBlbmRlbmNpZXMgYmV0d2VlbiBjbG9ja2RvbWFpbnMKLSAqIEBjbGtkbV9uYW1lOiBjbG9ja2RvbWFpbiBuYW1lCi0gKiBAY2xrZG06IHBvaW50ZXIgdG8gdGhlIHN0cnVjdCBjbG9ja2RvbWFpbiBvZiBAY2xrZG1fbmFtZQotICogQG9tYXBfY2hpcDogT01BUCBjaGlwIHR5cGVzIHRoYXQgdGhpcyBkZXBlbmRlbmN5IGlzIHZhbGlkIG9uCi0gKiBAd2tkZXBfdXNlY291bnQ6IE51bWJlciBvZiB3YWtldXAgZGVwZW5kZW5jaWVzIGNhdXNpbmcgdGhpcyBjbGtkbSB0byB3YWtlCi0gKiBAc2xlZXBkZXBfdXNlY291bnQ6IE51bWJlciBvZiBzbGVlcCBkZXBzIHRoYXQgY291bGQgcHJldmVudCBjbGtkbSBmcm9tIGlkbGUKLSAqCi0gKiBTdGF0aWNhbGx5IGRlZmluZWQuICBAY2xrZG0gaXMgcmVzb2x2ZWQgZnJvbSBAY2xrZG1fbmFtZSBhdCBydW50aW1lIGFuZAotICogc2hvdWxkIG5vdCBiZSBwcmUtaW5pdGlhbGl6ZWQuCi0gKgotICogWFhYIFNob3VsZCBhbHNvIGluY2x1ZGUgaGFyZHdhcmUgKGZpeGVkKSBkZXBlbmRlbmNpZXMuCi0gKi8KLXN0cnVjdCBjbGtkbV9kZXAgewotCWNvbnN0IGNoYXIgKmNsa2RtX25hbWU7Ci0Jc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbTsKLQlhdG9taWNfdCB3a2RlcF91c2Vjb3VudDsKLQlhdG9taWNfdCBzbGVlcGRlcF91c2Vjb3VudDsKLQljb25zdCBzdHJ1Y3Qgb21hcF9jaGlwX2lkIG9tYXBfY2hpcDsKLX07Ci0KLS8qKgotICogc3RydWN0IGNsb2NrZG9tYWluIC0gT01BUCBjbG9ja2RvbWFpbgotICogQG5hbWU6IGNsb2NrZG9tYWluIG5hbWUKLSAqIEBwd3JkbTogcG93ZXJkb21haW4gY29udGFpbmluZyB0aGlzIGNsb2NrZG9tYWluCi0gKiBAY2xrdHJjdHJsX3JlZzogQ0xLU1RDVFJMIHJlZyBmb3IgdGhlIGdpdmVuIGNsb2NrIGRvbWFpbgotICogQGNsa3RyY3RybF9tYXNrOiBDTEtUUkNUUkwvQVVUT1NUQVRFIGZpZWxkIG1hc2sgaW4gQ01fQ0xLU1RDVFJMIHJlZwotICogQGZsYWdzOiBDbG9ja2RvbWFpbiBjYXBhYmlsaXR5IGZsYWdzCi0gKiBAZGVwX2JpdDogQml0IHNoaWZ0IG9mIHRoaXMgY2xvY2tkb21haW4ncyBQTV9XS0RFUC9DTV9TTEVFUERFUCBiaXQKLSAqIEB3a2RlcF9zcmNzOiBDbG9ja2RvbWFpbnMgdGhhdCBjYW4gYmUgdG9sZCB0byB3YWtlIHRoaXMgcG93ZXJkb21haW4gdXAKLSAqIEBzbGVlcGRlcF9zcmNzOiBDbG9ja2RvbWFpbnMgdGhhdCBjYW4gYmUgdG9sZCB0byBrZWVwIHRoaXMgY2xrZG0gZnJvbSBpbmFjdAotICogQG9tYXBfY2hpcDogT01BUCBjaGlwIHR5cGVzIHRoYXQgdGhpcyBjbG9ja2RvbWFpbiBpcyB2YWxpZCBvbgotICogQHVzZWNvdW50OiBVc2Vjb3VudCB0cmFja2luZwotICogQG5vZGU6IGxpc3RfaGVhZCB0byBsaW5rIGFsbCBjbG9ja2RvbWFpbnMgdG9nZXRoZXIKLSAqLwotc3RydWN0IGNsb2NrZG9tYWluIHsKLQljb25zdCBjaGFyICpuYW1lOwotCXVuaW9uIHsKLQkJY29uc3QgY2hhciAqbmFtZTsKLQkJc3RydWN0IHBvd2VyZG9tYWluICpwdHI7Ci0JfSBwd3JkbTsKLQl2b2lkIF9faW9tZW0gKmNsa3N0Y3RybF9yZWc7Ci0JY29uc3QgdTE2IGNsa3RyY3RybF9tYXNrOwotCWNvbnN0IHU4IGZsYWdzOwotCWNvbnN0IHU4IGRlcF9iaXQ7Ci0Jc3RydWN0IGNsa2RtX2RlcCAqd2tkZXBfc3JjczsKLQlzdHJ1Y3QgY2xrZG1fZGVwICpzbGVlcGRlcF9zcmNzOwotCWNvbnN0IHN0cnVjdCBvbWFwX2NoaXBfaWQgb21hcF9jaGlwOwotCWF0b21pY190IHVzZWNvdW50OwotCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKLX07Ci0KLXZvaWQgY2xrZG1faW5pdChzdHJ1Y3QgY2xvY2tkb21haW4gKipjbGtkbXMsIHN0cnVjdCBjbGtkbV9hdXRvZGVwICphdXRvZGVwcyk7Ci1zdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtX2xvb2t1cChjb25zdCBjaGFyICpuYW1lKTsKLQotaW50IGNsa2RtX2Zvcl9lYWNoKGludCAoKmZuKShzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtLCB2b2lkICp1c2VyKSwKLQkJCXZvaWQgKnVzZXIpOwotc3RydWN0IHBvd2VyZG9tYWluICpjbGtkbV9nZXRfcHdyZG0oc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSk7Ci0KLWludCBjbGtkbV9hZGRfd2tkZXAoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbTEsIHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0yKTsKLWludCBjbGtkbV9kZWxfd2tkZXAoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbTEsIHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0yKTsKLWludCBjbGtkbV9yZWFkX3drZGVwKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0xLCBzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtMik7Ci1pbnQgY2xrZG1fY2xlYXJfYWxsX3drZGVwcyhzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKTsKLWludCBjbGtkbV9hZGRfc2xlZXBkZXAoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbTEsIHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0yKTsKLWludCBjbGtkbV9kZWxfc2xlZXBkZXAoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbTEsIHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0yKTsKLWludCBjbGtkbV9yZWFkX3NsZWVwZGVwKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0xLCBzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtMik7Ci1pbnQgY2xrZG1fY2xlYXJfYWxsX3NsZWVwZGVwcyhzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKTsKLQotdm9pZCBvbWFwMl9jbGtkbV9hbGxvd19pZGxlKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pOwotdm9pZCBvbWFwMl9jbGtkbV9kZW55X2lkbGUoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSk7Ci0KLWludCBvbWFwMl9jbGtkbV93YWtldXAoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSk7Ci1pbnQgb21hcDJfY2xrZG1fc2xlZXAoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSk7Ci0KLWludCBvbWFwMl9jbGtkbV9jbGtfZW5hYmxlKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0sIHN0cnVjdCBjbGsgKmNsayk7Ci1pbnQgb21hcDJfY2xrZG1fY2xrX2Rpc2FibGUoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSwgc3RydWN0IGNsayAqY2xrKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2NvbW1vbi5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9jb21tb24uaAppbmRleCBhOWQ2OWEwLi42YjgwODhlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2NvbW1vbi5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvY29tbW9uLmgKQEAgLTI3LDYgKzI3LDggQEAKICNpZm5kZWYgX19BUkNIX0FSTV9NQUNIX09NQVBfQ09NTU9OX0gKICNkZWZpbmUgX19BUkNIX0FSTV9NQUNIX09NQVBfQ09NTU9OX0gKIAorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKICNpbmNsdWRlIDxwbGF0L2kyYy5oPgogCiBzdHJ1Y3Qgc3lzX3RpbWVyOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9kbWEuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvZG1hLmgKaW5kZXggMGNjZTRjYS4uZDFjOTE2ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9kbWEuaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2RtYS5oCkBAIC0yMSwxNDIgKzIxLDE2IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfRE1BX0gKICNkZWZpbmUgX19BU01fQVJDSF9ETUFfSAogCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKy8qCisgKiBUT0RPOiBUaGVzZSBkbWEgY2hhbm5lbCBkZWZpbmVzIHNob3VsZCBnbyBhd2F5IG9uY2UgYWxsCisgKiB0aGUgb21hcCBkcml2ZXJzIGh3bW9kIGFkYXB0ZWQuCisgKi8KKwogLyogTW92ZSBvbWFwNCBzcGVjaWZpYyBkZWZpbmVzIHRvIGRtYS00NHh4LmggKi8KICNpbmNsdWRlICJkbWEtNDR4eC5oIgogCi0vKiBIYXJkd2FyZSByZWdpc3RlcnMgZm9yIG9tYXAxICovCi0jZGVmaW5lIE9NQVAxX0RNQV9CQVNFCQkJKDB4ZmZmZWQ4MDApCi0KLSNkZWZpbmUgT01BUDFfRE1BX0dDUgkJCTB4NDAwCi0jZGVmaW5lIE9NQVAxX0RNQV9HU0NSCQkJMHg0MDQKLSNkZWZpbmUgT01BUDFfRE1BX0dSU1QJCQkweDQwOAotI2RlZmluZSBPTUFQMV9ETUFfSFdfSUQJCQkweDQ0MgotI2RlZmluZSBPTUFQMV9ETUFfUENIMl9JRAkJMHg0NDQKLSNkZWZpbmUgT01BUDFfRE1BX1BDSDBfSUQJCTB4NDQ2Ci0jZGVmaW5lIE9NQVAxX0RNQV9QQ0gxX0lECQkweDQ0OAotI2RlZmluZSBPTUFQMV9ETUFfUENIR19JRAkJMHg0NGEKLSNkZWZpbmUgT01BUDFfRE1BX1BDSERfSUQJCTB4NDRjCi0jZGVmaW5lIE9NQVAxX0RNQV9DQVBTXzBfVQkJMHg0NGUKLSNkZWZpbmUgT01BUDFfRE1BX0NBUFNfMF9MCQkweDQ1MAotI2RlZmluZSBPTUFQMV9ETUFfQ0FQU18xX1UJCTB4NDUyCi0jZGVmaW5lIE9NQVAxX0RNQV9DQVBTXzFfTAkJMHg0NTQKLSNkZWZpbmUgT01BUDFfRE1BX0NBUFNfMgkJMHg0NTYKLSNkZWZpbmUgT01BUDFfRE1BX0NBUFNfMwkJMHg0NTgKLSNkZWZpbmUgT01BUDFfRE1BX0NBUFNfNAkJMHg0NWEKLSNkZWZpbmUgT01BUDFfRE1BX1BDSDJfU1IJCTB4NDYwCi0jZGVmaW5lIE9NQVAxX0RNQV9QQ0gwX1NSCQkweDQ4MAotI2RlZmluZSBPTUFQMV9ETUFfUENIMV9TUgkJMHg0ODIKLSNkZWZpbmUgT01BUDFfRE1BX1BDSERfU1IJCTB4NGMwCi0KLS8qIEhhcmR3YXJlIHJlZ2lzdGVycyBmb3Igb21hcDIgYW5kIG9tYXAzICovCi0jZGVmaW5lIE9NQVAyNFhYX0RNQTRfQkFTRQkJKEw0XzI0WFhfQkFTRSArIDB4NTYwMDApCi0jZGVmaW5lIE9NQVAzNFhYX0RNQTRfQkFTRQkJKEw0XzM0WFhfQkFTRSArIDB4NTYwMDApCi0jZGVmaW5lIE9NQVA0NFhYX0RNQTRfQkFTRQkJKEw0XzQ0WFhfQkFTRSArIDB4NTYwMDApCi0KLSNkZWZpbmUgT01BUF9ETUE0X1JFVklTSU9OCQkweDAwCi0jZGVmaW5lIE9NQVBfRE1BNF9HQ1IJCQkweDc4Ci0jZGVmaW5lIE9NQVBfRE1BNF9JUlFTVEFUVVNfTDAJCTB4MDgKLSNkZWZpbmUgT01BUF9ETUE0X0lSUVNUQVRVU19MMQkJMHgwYwotI2RlZmluZSBPTUFQX0RNQTRfSVJRU1RBVFVTX0wyCQkweDEwCi0jZGVmaW5lIE9NQVBfRE1BNF9JUlFTVEFUVVNfTDMJCTB4MTQKLSNkZWZpbmUgT01BUF9ETUE0X0lSUUVOQUJMRV9MMAkJMHgxOAotI2RlZmluZSBPTUFQX0RNQTRfSVJRRU5BQkxFX0wxCQkweDFjCi0jZGVmaW5lIE9NQVBfRE1BNF9JUlFFTkFCTEVfTDIJCTB4MjAKLSNkZWZpbmUgT01BUF9ETUE0X0lSUUVOQUJMRV9MMwkJMHgyNAotI2RlZmluZSBPTUFQX0RNQTRfU1lTU1RBVFVTCQkweDI4Ci0jZGVmaW5lIE9NQVBfRE1BNF9PQ1BfU1lTQ09ORklHCQkweDJjCi0jZGVmaW5lIE9NQVBfRE1BNF9DQVBTXzAJCTB4NjQKLSNkZWZpbmUgT01BUF9ETUE0X0NBUFNfMgkJMHg2YwotI2RlZmluZSBPTUFQX0RNQTRfQ0FQU18zCQkweDcwCi0jZGVmaW5lIE9NQVBfRE1BNF9DQVBTXzQJCTB4NzQKLQotI2RlZmluZSBPTUFQMV9MT0dJQ0FMX0RNQV9DSF9DT1VOVAkxNwotI2RlZmluZSBPTUFQX0RNQTRfTE9HSUNBTF9ETUFfQ0hfQ09VTlQJMzIJLyogUkVWSVNJVDogSXMgdGhpcyAzMiArIDI/ICovCi0KLS8qIENvbW1vbiBjaGFubmVsIHNwZWNpZmljIHJlZ2lzdGVycyBmb3Igb21hcDEgKi8KLSNkZWZpbmUgT01BUDFfRE1BX0NIX0JBU0UobikJCSgweDQwICogKG4pICsgMHgwMCkKLSNkZWZpbmUgT01BUDFfRE1BX0NTRFAobikJCSgweDQwICogKG4pICsgMHgwMCkKLSNkZWZpbmUgT01BUDFfRE1BX0NDUihuKQkJKDB4NDAgKiAobikgKyAweDAyKQotI2RlZmluZSBPTUFQMV9ETUFfQ0lDUihuKQkJKDB4NDAgKiAobikgKyAweDA0KQotI2RlZmluZSBPTUFQMV9ETUFfQ1NSKG4pCQkoMHg0MCAqIChuKSArIDB4MDYpCi0jZGVmaW5lIE9NQVAxX0RNQV9DRU4obikJCSgweDQwICogKG4pICsgMHgxMCkKLSNkZWZpbmUgT01BUDFfRE1BX0NGTihuKQkJKDB4NDAgKiAobikgKyAweDEyKQotI2RlZmluZSBPTUFQMV9ETUFfQ1NGSShuKQkJKDB4NDAgKiAobikgKyAweDE0KQotI2RlZmluZSBPTUFQMV9ETUFfQ1NFSShuKQkJKDB4NDAgKiAobikgKyAweDE2KQotI2RlZmluZSBPTUFQMV9ETUFfQ1BDKG4pCQkoMHg0MCAqIChuKSArIDB4MTgpCS8qIDE1eHggb25seSAqLwotI2RlZmluZSBPTUFQMV9ETUFfQ1NBQyhuKQkJKDB4NDAgKiAobikgKyAweDE4KQotI2RlZmluZSBPTUFQMV9ETUFfQ0RBQyhuKQkJKDB4NDAgKiAobikgKyAweDFhKQotI2RlZmluZSBPTUFQMV9ETUFfQ0RFSShuKQkJKDB4NDAgKiAobikgKyAweDFjKQotI2RlZmluZSBPTUFQMV9ETUFfQ0RGSShuKQkJKDB4NDAgKiAobikgKyAweDFlKQotI2RlZmluZSBPTUFQMV9ETUFfQ0xOS19DVFJMKG4pCQkoMHg0MCAqIChuKSArIDB4MjgpCi0KLS8qIENvbW1vbiBjaGFubmVsIHNwZWNpZmljIHJlZ2lzdGVycyBmb3Igb21hcDIgKi8KLSNkZWZpbmUgT01BUF9ETUE0X0NIX0JBU0UobikJCSgweDYwICogKG4pICsgMHg4MCkKLSNkZWZpbmUgT01BUF9ETUE0X0NDUihuKQkJKDB4NjAgKiAobikgKyAweDgwKQotI2RlZmluZSBPTUFQX0RNQTRfQ0xOS19DVFJMKG4pCQkoMHg2MCAqIChuKSArIDB4ODQpCi0jZGVmaW5lIE9NQVBfRE1BNF9DSUNSKG4pCQkoMHg2MCAqIChuKSArIDB4ODgpCi0jZGVmaW5lIE9NQVBfRE1BNF9DU1IobikJCSgweDYwICogKG4pICsgMHg4YykKLSNkZWZpbmUgT01BUF9ETUE0X0NTRFAobikJCSgweDYwICogKG4pICsgMHg5MCkKLSNkZWZpbmUgT01BUF9ETUE0X0NFTihuKQkJKDB4NjAgKiAobikgKyAweDk0KQotI2RlZmluZSBPTUFQX0RNQTRfQ0ZOKG4pCQkoMHg2MCAqIChuKSArIDB4OTgpCi0jZGVmaW5lIE9NQVBfRE1BNF9DU0VJKG4pCQkoMHg2MCAqIChuKSArIDB4YTQpCi0jZGVmaW5lIE9NQVBfRE1BNF9DU0ZJKG4pCQkoMHg2MCAqIChuKSArIDB4YTgpCi0jZGVmaW5lIE9NQVBfRE1BNF9DREVJKG4pCQkoMHg2MCAqIChuKSArIDB4YWMpCi0jZGVmaW5lIE9NQVBfRE1BNF9DREZJKG4pCQkoMHg2MCAqIChuKSArIDB4YjApCi0jZGVmaW5lIE9NQVBfRE1BNF9DU0FDKG4pCQkoMHg2MCAqIChuKSArIDB4YjQpCi0jZGVmaW5lIE9NQVBfRE1BNF9DREFDKG4pCQkoMHg2MCAqIChuKSArIDB4YjgpCi0KLS8qIENoYW5uZWwgc3BlY2lmaWMgcmVnaXN0ZXJzIG9ubHkgb24gb21hcDEgKi8KLSNkZWZpbmUgT01BUDFfRE1BX0NTU0FfTChuKQkJKDB4NDAgKiAobikgKyAweDA4KQotI2RlZmluZSBPTUFQMV9ETUFfQ1NTQV9VKG4pCQkoMHg0MCAqIChuKSArIDB4MGEpCi0jZGVmaW5lIE9NQVAxX0RNQV9DRFNBX0wobikJCSgweDQwICogKG4pICsgMHgwYykKLSNkZWZpbmUgT01BUDFfRE1BX0NEU0FfVShuKQkJKDB4NDAgKiAobikgKyAweDBlKQotI2RlZmluZSBPTUFQMV9ETUFfQ09MT1JfTChuKQkJKDB4NDAgKiAobikgKyAweDIwKQotI2RlZmluZSBPTUFQMV9ETUFfQ09MT1JfVShuKQkJKDB4NDAgKiAobikgKyAweDIyKQotI2RlZmluZSBPTUFQMV9ETUFfQ0NSMihuKQkJKDB4NDAgKiAobikgKyAweDI0KQotI2RlZmluZSBPTUFQMV9ETUFfTENIX0NUUkwobikJCSgweDQwICogKG4pICsgMHgyYSkJLyogbm90IG9uIDE1eHggKi8KLSNkZWZpbmUgT01BUDFfRE1BX0NDRU4obikJCTAKLSNkZWZpbmUgT01BUDFfRE1BX0NDRk4obikJCTAKLQotLyogQ2hhbm5lbCBzcGVjaWZpYyByZWdpc3RlcnMgb25seSBvbiBvbWFwMiAqLwotI2RlZmluZSBPTUFQX0RNQTRfQ1NTQShuKQkJKDB4NjAgKiAobikgKyAweDljKQotI2RlZmluZSBPTUFQX0RNQTRfQ0RTQShuKQkJKDB4NjAgKiAobikgKyAweGEwKQotI2RlZmluZSBPTUFQX0RNQTRfQ0NFTihuKQkJKDB4NjAgKiAobikgKyAweGJjKQotI2RlZmluZSBPTUFQX0RNQTRfQ0NGTihuKQkJKDB4NjAgKiAobikgKyAweGMwKQotI2RlZmluZSBPTUFQX0RNQTRfQ09MT1IobikJCSgweDYwICogKG4pICsgMHhjNCkKLQotLyogQWRkaXRpb25hbCByZWdpc3RlcnMgYXZhaWxhYmxlIG9uIE9NQVA0ICovCi0jZGVmaW5lIE9NQVBfRE1BNF9DRFAobikJCSgweDYwICogKG4pICsgMHhkMCkKLSNkZWZpbmUgT01BUF9ETUE0X0NORFAobikJCSgweDYwICogKG4pICsgMHhkNCkKLSNkZWZpbmUgT01BUF9ETUE0X0NDRE4obikJCSgweDYwICogKG4pICsgMHhkOCkKLQotLyogRHVtbXkgZGVmaW5lcyB0byBrZWVwIG11bHRpLW9tYXAgY29tcGlsZXMgaGFwcHkgKi8KLSNkZWZpbmUgT01BUDFfRE1BX1JFVklTSU9OCQkwCi0jZGVmaW5lIE9NQVAxX0RNQV9JUlFTVEFUVVNfTDAJCTAKLSNkZWZpbmUgT01BUDFfRE1BX0lSUUVOQUJMRV9MMAkJMAotI2RlZmluZSBPTUFQMV9ETUFfT0NQX1NZU0NPTkZJRwkJMAotI2RlZmluZSBPTUFQX0RNQTRfSFdfSUQJCQkwCi0jZGVmaW5lIE9NQVBfRE1BNF9DQVBTXzBfTAkJMAotI2RlZmluZSBPTUFQX0RNQTRfQ0FQU18wX1UJCTAKLSNkZWZpbmUgT01BUF9ETUE0X0NBUFNfMV9MCQkwCi0jZGVmaW5lIE9NQVBfRE1BNF9DQVBTXzFfVQkJMAotI2RlZmluZSBPTUFQX0RNQTRfR1NDUgkJCTAKLSNkZWZpbmUgT01BUF9ETUE0X0NQQyhuKQkJMAotCi0jZGVmaW5lIE9NQVBfRE1BNF9MQ0hfQ1RSTChuKQkJMAotI2RlZmluZSBPTUFQX0RNQTRfQ09MT1JfTChuKQkJMAotI2RlZmluZSBPTUFQX0RNQTRfQ09MT1JfVShuKQkJMAotI2RlZmluZSBPTUFQX0RNQTRfQ0NSMihuKQkJMAotI2RlZmluZSBPTUFQMV9ETUFfQ1NTQShuKQkJMAotI2RlZmluZSBPTUFQMV9ETUFfQ0RTQShuKQkJMAotI2RlZmluZSBPTUFQX0RNQTRfQ1NTQV9MKG4pCQkwCi0jZGVmaW5lIE9NQVBfRE1BNF9DU1NBX1UobikJCTAKLSNkZWZpbmUgT01BUF9ETUE0X0NEU0FfTChuKQkJMAotI2RlZmluZSBPTUFQX0RNQTRfQ0RTQV9VKG4pCQkwCi0jZGVmaW5lIE9NQVAxX0RNQV9DT0xPUihuKQkJMAotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCiAvKiBETUEgY2hhbm5lbHMgZm9yIG9tYXAxICovCiAjZGVmaW5lIE9NQVBfRE1BX05PX0RFVklDRQkJMAogI2RlZmluZSBPTUFQX0RNQV9NQ1NJMV9UWAkJMQpAQCAtNDA1LDYgKzI3OSw2MyBAQAogI2RlZmluZSBETUFfQ0hfUFJJT19ISUdICQkweDEKICNkZWZpbmUgRE1BX0NIX1BSSU9fTE9XCQkJMHgwIC8qIERlZiAqLwogCisvKiBFcnJhdGEgaGFuZGxpbmcgKi8KKyNkZWZpbmUgSVNfRE1BX0VSUkFUQShpZCkJCShlcnJhdGEgJiAoaWQpKQorI2RlZmluZSBTRVRfRE1BX0VSUkFUQShpZCkJCShlcnJhdGEgfD0gKGlkKSkKKworI2RlZmluZSBETUFfRVJSQVRBX0lGUkFNRV9CVUZGRVJJTkcJQklUKDB4MCkKKyNkZWZpbmUgRE1BX0VSUkFUQV9QQVJBTExFTF9DSEFOTkVMUwlCSVQoMHgxKQorI2RlZmluZSBETUFfRVJSQVRBX2kzNzgJCQlCSVQoMHgyKQorI2RlZmluZSBETUFfRVJSQVRBX2k1NDEJCQlCSVQoMHgzKQorI2RlZmluZSBETUFfRVJSQVRBX2k4OAkJCUJJVCgweDQpCisjZGVmaW5lIERNQV9FUlJBVEFfM18zCQkJQklUKDB4NSkKKyNkZWZpbmUgRE1BX1JPTUNPREVfQlVHCQkJQklUKDB4NikKKworLyogQXR0cmlidXRlcyBmb3IgT01BUCBETUEgQ29udHJsbGVyICovCisjZGVmaW5lIERNQV9MSU5LRURfTENICQkJQklUKDB4MCkKKyNkZWZpbmUgR0xPQkFMX1BSSU9SSVRZCQkJQklUKDB4MSkKKyNkZWZpbmUgUkVTRVJWRV9DSEFOTkVMCQkJQklUKDB4MikKKyNkZWZpbmUgSVNfQ1NTQV8zMgkJCUJJVCgweDMpCisjZGVmaW5lIElTX0NEU0FfMzIJCQlCSVQoMHg0KQorI2RlZmluZSBJU19SV19QUklPUklUWQkJCUJJVCgweDUpCisjZGVmaW5lIEVOQUJMRV8xNTEwX01PREUJCUJJVCgweDYpCisjZGVmaW5lIFNSQ19QT1JUCQkJQklUKDB4NykKKyNkZWZpbmUgRFNUX1BPUlQJCQlCSVQoMHg4KQorI2RlZmluZSBTUkNfSU5ERVgJCQlCSVQoMHg5KQorI2RlZmluZSBEU1RfSU5ERVgJCQlCSVQoMHhBKQorI2RlZmluZSBJU19CVVJTVF9PTkxZNAkJCUJJVCgweEIpCisjZGVmaW5lIENMRUFSX0NTUl9PTl9SRUFECQlCSVQoMHhDKQorI2RlZmluZSBJU19XT1JEXzE2CQkJQklUKDB4RCkKKworZW51bSBvbWFwX3JlZ19vZmZzZXRzIHsKKworR0NSLAkJR1NDUiwJCUdSU1QxLAkJSFdfSUQsCitQQ0gyX0lELAlQQ0gwX0lELAlQQ0gxX0lELAlQQ0hHX0lELAorUENIRF9JRCwJQ0FQU18wLAkJQ0FQU18xLAkJQ0FQU18yLAorQ0FQU18zLAkJQ0FQU180LAkJUENIMl9TUiwJUENIMF9TUiwKK1BDSDFfU1IsCVBDSERfU1IsCVJFVklTSU9OLAlJUlFTVEFUVVNfTDAsCitJUlFTVEFUVVNfTDEsCUlSUVNUQVRVU19MMiwJSVJRU1RBVFVTX0wzLAlJUlFFTkFCTEVfTDAsCitJUlFFTkFCTEVfTDEsCUlSUUVOQUJMRV9MMiwJSVJRRU5BQkxFX0wzLAlTWVNTVEFUVVMsCitPQ1BfU1lTQ09ORklHLAorCisvKiBvbWFwMSsgc3BlY2lmaWMgKi8KK0NQQywgQ0NSMiwgTENIX0NUUkwsCisKKy8qIENvbW1vbiByZWdpc3RlcnMgZm9yIGFsbCBvbWFwJ3MgKi8KK0NTRFAsCQlDQ1IsCQlDSUNSLAkJQ1NSLAorQ0VOLAkJQ0ZOLAkJQ1NGSSwJCUNTRUksCitDU0FDLAkJQ0RBQywJCUNERUksCitDREZJLAkJQ0xOS19DVFJMLAorCisvKiBDaGFubmVsIHNwZWNpZmljIHJlZ2lzdGVycyAqLworQ1NTQSwJCUNEU0EsCQlDT0xPUiwKK0NDRU4sCQlDQ0ZOLAorCisvKiBvbWFwMzYzMCBhbmQgb21hcDQgc3BlY2lmaWMgKi8KK0NEUCwJCUNORFAsCQlDQ0ROLAorCit9OworCiBlbnVtIG9tYXBfZG1hX2J1cnN0X21vZGUgewogCU9NQVBfRE1BX0RBVEFfQlVSU1RfRElTID0gMCwKIAlPTUFQX0RNQV9EQVRBX0JVUlNUXzQsCkBAIC00NzAsNiArNDAxLDQxIEBACiAjZW5kaWYKIH07CiAKK3N0cnVjdCBvbWFwX2RtYV9sY2ggeworCWludCBuZXh0X2xjaDsKKwlpbnQgZGV2X2lkOworCXUxNiBzYXZlZF9jc3I7CisJdTE2IGVuYWJsZWRfaXJxczsKKwljb25zdCBjaGFyICpkZXZfbmFtZTsKKwl2b2lkICgqY2FsbGJhY2spKGludCBsY2gsIHUxNiBjaF9zdGF0dXMsIHZvaWQgKmRhdGEpOworCXZvaWQgKmRhdGE7CisJbG9uZyBmbGFnczsKKwkvKiByZXF1aXJlZCBmb3IgRHluYW1pYyBjaGFpbmluZyAqLworCWludCBwcmV2X2xpbmtlZF9jaDsKKwlpbnQgbmV4dF9saW5rZWRfY2g7CisJaW50IHN0YXRlOworCWludCBjaGFpbl9pZDsKKwlpbnQgc3RhdHVzOworfTsKKworc3RydWN0IG9tYXBfZG1hX2Rldl9hdHRyIHsKKwl1MzIgZGV2X2NhcHM7CisJdTE2IGxjaF9jb3VudDsKKwl1MTYgY2hhbl9jb3VudDsKKwlzdHJ1Y3Qgb21hcF9kbWFfbGNoICpjaGFuOworfTsKKworLyogU3lzdGVtIERNQSBwbGF0Zm9ybSBkYXRhIHN0cnVjdHVyZSAqLworc3RydWN0IG9tYXBfc3lzdGVtX2RtYV9wbGF0X2luZm8geworCXN0cnVjdCBvbWFwX2RtYV9kZXZfYXR0ciAqZG1hX2F0dHI7CisJdTMyIGVycmF0YTsKKwl2b2lkICgqZGlzYWJsZV9pcnFfbGNoKShpbnQgbGNoKTsKKwl2b2lkICgqc2hvd19kbWFfY2Fwcykodm9pZCk7CisJdm9pZCAoKmNsZWFyX2xjaF9yZWdzKShpbnQgbGNoKTsKKwl2b2lkICgqY2xlYXJfZG1hKShpbnQgbGNoKTsKKwl2b2lkICgqZG1hX3dyaXRlKSh1MzIgdmFsLCBpbnQgcmVnLCBpbnQgbGNoKTsKKwl1MzIgKCpkbWFfcmVhZCkoaW50IHJlZywgaW50IGxjaCk7Cit9OwogCiBleHRlcm4gdm9pZCBvbWFwX3NldF9kbWFfcHJpb3JpdHkoaW50IGxjaCwgaW50IGRzdF9wb3J0LCBpbnQgcHJpb3JpdHkpOwogZXh0ZXJuIGludCBvbWFwX3JlcXVlc3RfZG1hKGludCBkZXZfaWQsIGNvbnN0IGNoYXIgKmRldl9uYW1lLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9mcGdhLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2ZwZ2EuaAppbmRleCBmMTg2NGE2Li5hZTM5YmNiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2ZwZ2EuaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2ZwZ2EuaApAQCAtMTksMTEgKzE5LDcgQEAKICNpZm5kZWYgX19BU01fQVJDSF9PTUFQX0ZQR0FfSAogI2RlZmluZSBfX0FTTV9BUkNIX09NQVBfRlBHQV9ICiAKLSNpZiBkZWZpbmVkKENPTkZJR19NQUNIX09NQVBfSU5OT1ZBVE9SKSAmJiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNVhYKQogZXh0ZXJuIHZvaWQgb21hcDE1MTBfZnBnYV9pbml0X2lycSh2b2lkKTsKLSNlbHNlCi0jZGVmaW5lIG9tYXAxNTEwX2ZwZ2FfaW5pdF9pcnEoKQkoMCkKLSNlbmRpZgogCiAjZGVmaW5lIGZwZ2FfcmVhZChyZWcpCQkJX19yYXdfcmVhZGIocmVnKQogI2RlZmluZSBmcGdhX3dyaXRlKHZhbCwgcmVnKQkJX19yYXdfd3JpdGViKHZhbCwgcmVnKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9ncGlvLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2dwaW8uaAppbmRleCBkZTFjNjA0Li5kNmY5ZmEwZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9ncGlvLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9ncGlvLmgKQEAgLTI3LDI2ICsyNywxNSBAQAogI2RlZmluZSBfX0FTTV9BUkNIX09NQVBfR1BJT19ICiAKICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgogCiAjZGVmaW5lIE9NQVAxX01QVUlPX0JBU0UJCQkweGZmZmI1MDAwCiAKLSNpZiAoZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNzMwKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA4NTApKQotCi0jZGVmaW5lIE9NQVBfTVBVSU9fSU5QVVRfTEFUQ0gJCTB4MDAKLSNkZWZpbmUgT01BUF9NUFVJT19PVVRQVVQJCTB4MDIKLSNkZWZpbmUgT01BUF9NUFVJT19JT19DTlRMCQkweDA0Ci0jZGVmaW5lIE9NQVBfTVBVSU9fS0JSX0xBVENICQkweDA4Ci0jZGVmaW5lIE9NQVBfTVBVSU9fS0JDCQkJMHgwYQotI2RlZmluZSBPTUFQX01QVUlPX0dQSU9fRVZFTlRfTU9ERQkweDBjCi0jZGVmaW5lIE9NQVBfTVBVSU9fR1BJT19JTlRfRURHRQkweDBlCi0jZGVmaW5lIE9NQVBfTVBVSU9fS0JEX0lOVAkJMHgxMAotI2RlZmluZSBPTUFQX01QVUlPX0dQSU9fSU5UCQkweDEyCi0jZGVmaW5lIE9NQVBfTVBVSU9fS0JEX01BU0tJVAkJMHgxNAotI2RlZmluZSBPTUFQX01QVUlPX0dQSU9fTUFTS0lUCQkweDE2Ci0jZGVmaW5lIE9NQVBfTVBVSU9fR1BJT19ERUJPVU5DSU5HCTB4MTgKLSNkZWZpbmUgT01BUF9NUFVJT19MQVRDSAkJMHgxYQotI2Vsc2UKKy8qCisgKiBUaGVzZSBhcmUgdGhlIG9tYXAxNXh4LzE2eHggb2Zmc2V0cy4gVGhlIG9tYXA3eHggb2Zmc2V0IGFyZQorICogT01BUF9NUFVJT18gLyAyIG9mZnNldHMgYmVsb3cuCisgKi8KICNkZWZpbmUgT01BUF9NUFVJT19JTlBVVF9MQVRDSAkJMHgwMAogI2RlZmluZSBPTUFQX01QVUlPX09VVFBVVAkJMHgwNAogI2RlZmluZSBPTUFQX01QVUlPX0lPX0NOVEwJCTB4MDgKQEAgLTYwLDcgKzQ5LDYgQEAKICNkZWZpbmUgT01BUF9NUFVJT19HUElPX01BU0tJVAkJMHgyYwogI2RlZmluZSBPTUFQX01QVUlPX0dQSU9fREVCT1VOQ0lORwkweDMwCiAjZGVmaW5lIE9NQVBfTVBVSU9fTEFUQ0gJCTB4MzQKLSNlbmRpZgogCiAjZGVmaW5lIE9NQVAzNFhYX05SX0dQSU9TCQk2CiAKQEAgLTcxLDggKzU5LDMwIEBACiAJCQkJIElIX01QVUlPX0JBU0UgKyAoKG5yKSAmIDB4MGYpIDogXAogCQkJCSBJSF9HUElPX0JBU0UgKyAobnIpKQogCi1leHRlcm4gaW50IG9tYXBfZ3Bpb19pbml0KHZvaWQpOwkvKiBDYWxsIGZyb20gYm9hcmQgaW5pdCBvbmx5ICovCi1leHRlcm4gdm9pZCBvbWFwMl9ncGlvX3ByZXBhcmVfZm9yX2lkbGUoaW50IHBvd2VyX3N0YXRlKTsKKyNkZWZpbmUgTUVUSE9EX01QVUlPCQkwCisjZGVmaW5lIE1FVEhPRF9HUElPXzE1MTAJMQorI2RlZmluZSBNRVRIT0RfR1BJT18xNjEwCTIKKyNkZWZpbmUgTUVUSE9EX0dQSU9fN1hYCQkzCisjZGVmaW5lIE1FVEhPRF9HUElPXzI0WFgJNQorI2RlZmluZSBNRVRIT0RfR1BJT180NFhYCTYKKworc3RydWN0IG9tYXBfZ3Bpb19kZXZfYXR0ciB7CisJaW50IGJhbmtfd2lkdGg7CQkvKiBHUElPIGJhbmsgd2lkdGggKi8KKwlib29sIGRiY2tfZmxhZzsJCS8qIGRiY2sgcmVxdWlyZWQgb3Igbm90IC0gVHJ1ZSBmb3IgT01BUDMmNCAqLworfTsKKworc3RydWN0IG9tYXBfZ3Bpb19wbGF0Zm9ybV9kYXRhIHsKKwl1MTYgdmlydHVhbF9pcnFfc3RhcnQ7CisJaW50IGJhbmtfdHlwZTsKKwlpbnQgYmFua193aWR0aDsJCS8qIEdQSU8gYmFuayB3aWR0aCAqLworCWludCBiYW5rX3N0cmlkZTsJLyogT25seSBuZWVkZWQgZm9yIG9tYXAxIE1QVUlPICovCisJYm9vbCBkYmNrX2ZsYWc7CQkvKiBkYmNrIHJlcXVpcmVkIG9yIG5vdCAtIFRydWUgZm9yIE9NQVAzJjQgKi8KK307CisKKy8qIFRPRE86IEFuYWx5emUgcmVtb3ZpbmcgZ3Bpb19iYW5rX2NvdW50IHVzYWdlIGZyb20gZHJpdmVyIGNvZGUgKi8KK2V4dGVybiBpbnQgZ3Bpb19iYW5rX2NvdW50OworCitleHRlcm4gdm9pZCBvbWFwMl9ncGlvX3ByZXBhcmVfZm9yX2lkbGUoaW50IG9mZl9tb2RlKTsKIGV4dGVybiB2b2lkIG9tYXAyX2dwaW9fcmVzdW1lX2FmdGVyX2lkbGUodm9pZCk7CiBleHRlcm4gdm9pZCBvbWFwX3NldF9ncGlvX2RlYm91bmNlKGludCBncGlvLCBpbnQgZW5hYmxlKTsKIGV4dGVybiB2b2lkIG9tYXBfc2V0X2dwaW9fZGVib3VuY2VfdGltZShpbnQgZ3BpbywgaW50IGVuYWJsZSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2dwbWMuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvZ3BtYy5oCmluZGV4IDlmZDk5YjkuLjg1ZGVkNTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvZ3BtYy5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvZ3BtYy5oCkBAIC04MCwxMiArODAsMTIgQEAKICNkZWZpbmUgR1BNQ19QUkVGRVRDSF9TVEFUVVNfQ09VTlQodmFsKQkodmFsICYgMHgwMDAwM2ZmZikKIAogLyoKLSAqIE5vdGUgdGhhdCBhbGwgdmFsdWVzIGluIHRoaXMgc3RydWN0IGFyZSBpbiBuYW5vc2Vjb25kcywgd2hpbGUKLSAqIHRoZSByZWdpc3RlciB2YWx1ZXMgYXJlIGluIGdwbWNfZmNrIGN5Y2xlcy4KKyAqIE5vdGUgdGhhdCBhbGwgdmFsdWVzIGluIHRoaXMgc3RydWN0IGFyZSBpbiBuYW5vc2Vjb25kcyBleGNlcHQgc3luY19jbGsKKyAqICh3aGljaCBpcyBpbiBwaWNvc2Vjb25kcyksIHdoaWxlIHRoZSByZWdpc3RlciB2YWx1ZXMgYXJlIGluIGdwbWNfZmNrIGN5Y2xlcy4KICAqLwogc3RydWN0IGdwbWNfdGltaW5ncyB7Ci0JLyogTWluaW11bSBjbG9jayBwZXJpb2QgZm9yIHN5bmNocm9ub3VzIG1vZGUgKi8KLQl1MTYgc3luY19jbGs7CisJLyogTWluaW11bSBjbG9jayBwZXJpb2QgZm9yIHN5bmNocm9ub3VzIG1vZGUgKGluIHBpY29zZWNvbmRzKSAqLworCXUzMiBzeW5jX2NsazsKIAogCS8qIENoaXAtc2VsZWN0IHNpZ25hbCB0aW1pbmdzIGNvcnJlc3BvbmRpbmcgdG8gR1BNQ19DU19DT05GSUcyICovCiAJdTE2IGNzX29uOwkJLyogQXNzZXJ0aW9uIHRpbWUgKi8KQEAgLTExNyw2ICsxMTcsNyBAQAogfTsKIAogZXh0ZXJuIHVuc2lnbmVkIGludCBncG1jX25zX3RvX3RpY2tzKHVuc2lnbmVkIGludCB0aW1lX25zKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgZ3BtY19wc190b190aWNrcyh1bnNpZ25lZCBpbnQgdGltZV9wcyk7CiBleHRlcm4gdW5zaWduZWQgaW50IGdwbWNfdGlja3NfdG9fbnModW5zaWduZWQgaW50IHRpY2tzKTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgZ3BtY19yb3VuZF9uc190b190aWNrcyh1bnNpZ25lZCBpbnQgdGltZV9ucyk7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBncG1jX2dldF9mY2xrX3BlcmlvZCh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvaTJjLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2kyYy5oCmluZGV4IDM2YTBiZWYuLjg3OGQ2MzIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvaTJjLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9pMmMuaApAQCAtMzYsNiArMzYsMTkgQEAKIH0KICNlbmRpZgogCisvKioKKyAqIGkyY19kZXZfYXR0ciAtIE9NQVAgSTJDIGNvbnRyb2xsZXIgZGV2aWNlIGF0dHJpYnV0ZXMgZm9yIG9tYXBfaHdtb2QKKyAqIEBmaWZvX2RlcHRoOiB0b3RhbCBjb250cm9sbGVyIEZJRk8gc2l6ZSAoaW4gYnl0ZXMpCisgKiBAZmxhZ3M6IGRpZmZlcmVuY2VzIGluIGhhcmR3YXJlIHN1cHBvcnQgY2FwYWJpbGl0eQorICoKKyAqIEBmaWZvX2RlcHRoIHJlcHJlc2VudHMgd2hhdCBleGlzdHMgb24gdGhlIGhhcmR3YXJlLCBub3Qgd2hhdCBpcworICogYWN0dWFsbHkgY29uZmlndXJlZCBhdCBydW50aW1lIGJ5IHRoZSBkZXZpY2UgZHJpdmVyLgorICovCitzdHJ1Y3Qgb21hcF9pMmNfZGV2X2F0dHIgeworCXU4CWZpZm9fZGVwdGg7CisJdTgJZmxhZ3M7Cit9OworCiB2b2lkIF9faW5pdCBvbWFwMV9pMmNfbXV4X3BpbnMoaW50IGJ1c19pZCk7CiB2b2lkIF9faW5pdCBvbWFwMl9pMmNfbXV4X3BpbnMoaW50IGJ1c19pZCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvaW8uaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvaW8uaAppbmRleCAxMjhiNTQ5Li5lZjQxMDZjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2lvLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9pby5oCkBAIC0yOTEsMTEgKzI5MSwxMiBAQAogfQogI2VuZGlmCiAKLWV4dGVybiB2b2lkIG9tYXAyX2luaXRfY29tbW9uX2h3KHN0cnVjdCBvbWFwX3NkcmNfcGFyYW1zICpzZHJjX2NzMCwKLQkJCQkgc3RydWN0IG9tYXBfc2RyY19wYXJhbXMgKnNkcmNfY3MxKTsKK2V4dGVybiB2b2lkIG9tYXAyX2luaXRfY29tbW9uX2luZnJhc3RydWN0dXJlKHZvaWQpOworZXh0ZXJuIHZvaWQgb21hcDJfaW5pdF9jb21tb25fZGV2aWNlcyhzdHJ1Y3Qgb21hcF9zZHJjX3BhcmFtcyAqc2RyY19jczAsCisJCQkJICAgICAgc3RydWN0IG9tYXBfc2RyY19wYXJhbXMgKnNkcmNfY3MxKTsKIAotI2RlZmluZSBfX2FyY2hfaW9yZW1hcChwLHMsdCkJb21hcF9pb3JlbWFwKHAscyx0KQotI2RlZmluZSBfX2FyY2hfaW91bm1hcCh2KQlvbWFwX2lvdW5tYXAodikKKyNkZWZpbmUgX19hcmNoX2lvcmVtYXAJb21hcF9pb3JlbWFwCisjZGVmaW5lIF9fYXJjaF9pb3VubWFwCW9tYXBfaW91bm1hcAogCiB2b2lkIF9faW9tZW0gKm9tYXBfaW9yZW1hcCh1bnNpZ25lZCBsb25nIHBoeXMsIHNpemVfdCBzaXplLCB1bnNpZ25lZCBpbnQgdHlwZSk7CiB2b2lkIG9tYXBfaW91bm1hcCh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9pb21tdS5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9pb21tdS5oCmluZGV4IDMzYzdkNDEuLjY5MjMwZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvaW9tbXUuaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2lvbW11LmgKQEAgLTUwLDYgKzUwLDggQEAKIAlpbnQgKCppc3IpKHN0cnVjdCBpb21tdSAqb2JqKTsKIAogCXZvaWQgKmN0eDsgLyogaW9tbXUgY29udGV4dDogcmVnaXN0cmVzIHNhdmVkIGFyZWEgKi8KKwl1MzIgZGFfc3RhcnQ7CisJdTMyIGRhX2VuZDsKIH07CiAKIHN0cnVjdCBjcl9yZWdzIHsKQEAgLTEwMyw2ICsxMDUsOCBAQAogCWNvbnN0IGNoYXIgKm5hbWU7CiAJY29uc3QgY2hhciAqY2xrX25hbWU7CiAJY29uc3QgaW50IG5yX3RsYl9lbnRyaWVzOworCXUzMiBkYV9zdGFydDsKKwl1MzIgZGFfZW5kOwogfTsKIAogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDEpCkBAIC0xNTIsNiArMTU2LDcgQEAKIGV4dGVybiBpbnQgaW9wZ3RhYmxlX3N0b3JlX2VudHJ5KHN0cnVjdCBpb21tdSAqb2JqLCBzdHJ1Y3QgaW90bGJfZW50cnkgKmUpOwogZXh0ZXJuIHNpemVfdCBpb3BndGFibGVfY2xlYXJfZW50cnkoc3RydWN0IGlvbW11ICpvYmosIHUzMiBpb3ZhKTsKIAorZXh0ZXJuIGludCBpb21tdV9zZXRfZGFfcmFuZ2Uoc3RydWN0IGlvbW11ICpvYmosIHUzMiBzdGFydCwgdTMyIGVuZCk7CiBleHRlcm4gc3RydWN0IGlvbW11ICppb21tdV9nZXQoY29uc3QgY2hhciAqbmFtZSk7CiBleHRlcm4gdm9pZCBpb21tdV9wdXQoc3RydWN0IGlvbW11ICpvYmopOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2lycXMuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvaXJxcy5oCmluZGV4IDY1ZTIwYTYuLjI5MTBkZTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvaXJxcy5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvaXJxcy5oCkBAIC03Nyw3ICs3Nyw3IEBACiAvKgogICogT01BUC0xNjEwIHNwZWNpZmljIElSUSBudW1iZXJzIGZvciBpbnRlcnJ1cHQgaGFuZGxlciAxCiAgKi8KLSNkZWZpbmUgSU5UXzE2MTBfSUgyX0lSUQkwCisjZGVmaW5lIElOVF8xNjEwX0lIMl9JUlEJSU5UXzE1MTBfSUgyX0lSUQogI2RlZmluZSBJTlRfMTYxMF9JSDJfRklRCTIKICNkZWZpbmUgSU5UXzE2MTBfTWNCU1AyX1RYCTQKICNkZWZpbmUgSU5UXzE2MTBfTWNCU1AyX1JYCTUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQva2V5cGFkLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2tleXBhZC5oCmluZGV4IDNhZTUyY2MuLjc5M2NlOWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQva2V5cGFkLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9rZXlwYWQuaApAQCAtMTAsMTYgKzEwLDE4IEBACiAjaWZuZGVmIEFTTUFSTV9BUkNIX0tFWVBBRF9ICiAjZGVmaW5lIEFTTUFSTV9BUkNIX0tFWVBBRF9ICiAKLSN3YXJuaW5nOiBQbGVhc2UgdXBkYXRlIHRoZSBib2FyZCB0byB1c2UgbWF0cml4X2tleXBhZC5oIGluc3RlYWQKKyNpZm5kZWYgQ09ORklHX0FSQ0hfT01BUDEKKyN3YXJuaW5nIFBsZWFzZSB1cGRhdGUgdGhlIGJvYXJkIHRvIHVzZSBtYXRyaXgta2V5cGFkIGRyaXZlcgorI2VuZGlmCisjaW5jbHVkZSA8bGludXgvaW5wdXQvbWF0cml4X2tleXBhZC5oPgogCiBzdHJ1Y3Qgb21hcF9rcF9wbGF0Zm9ybV9kYXRhIHsKIAlpbnQgcm93czsKIAlpbnQgY29sczsKLQlpbnQgKmtleW1hcDsKLQl1bnNpZ25lZCBpbnQga2V5bWFwc2l6ZTsKLQl1bnNpZ25lZCBpbnQgcmVwOjE7CisJY29uc3Qgc3RydWN0IG1hdHJpeF9rZXltYXBfZGF0YSAqa2V5bWFwX2RhdGE7CisJYm9vbCByZXA7CiAJdW5zaWduZWQgbG9uZyBkZWxheTsKLQl1bnNpZ25lZCBpbnQgZGJvdW5jZToxOworCWJvb2wgZGJvdW5jZTsKIAkvKiBzcGVjaWZpYyB0byBPTUFQMjQyeCovCiAJdW5zaWduZWQgaW50ICpyb3dfZ3Bpb3M7CiAJdW5zaWduZWQgaW50ICpjb2xfZ3Bpb3M7CkBAIC0yOCwxOCArMzAsMjEgQEAKIC8qIEdyb3VwICgwLi4zKSAtLSB3aGVuIG11bHRpcGxlIGtleXMgYXJlIHByZXNzZWQsIG9ubHkgdGhlCiAgKiBrZXlzIHByZXNzZWQgaW4gdGhlIHNhbWUgZ3JvdXAgYXJlIGNvbnNpZGVyZWQgYXMgcHJlc3NlZC4gVGhpcyBpcwogICogaW4gb3JkZXIgdG8gd29ya2Fyb3VuZCBjZXJ0YWluIGNyYXBweSBIVyBkZXNpZ25zIHRoYXQgcHJvZHVjZSBnaG9zdAotICoga2V5cHJlc3Nlcy4gKi8KLSNkZWZpbmUgR1JPVVBfMAkJKDAgPDwgMTYpCi0jZGVmaW5lIEdST1VQXzEJCSgxIDw8IDE2KQotI2RlZmluZSBHUk9VUF8yCQkoMiA8PCAxNikKLSNkZWZpbmUgR1JPVVBfMwkJKDMgPDwgMTYpCisgKiBrZXlwcmVzc2VzLiBUd28gZnJlZSBiaXRzLCBub3QgdXNlZCBieSBuZWl0aGVyIHJvdy9jb2wgbm9yIGtleW51bSwKKyAqIG11c3QgYmUgYXZhaWxhYmxlIGZvciB1c2UgYXMgZ3JvdXAgYml0cy4gVGhlIGJlbG93IEdST1VQX1NISUZUCisgKiBtYWNybyBkZWZpbml0aW9uIGlzIGJhc2VkIG9uIHNvbWUgcHJpb3Iga25vd2xlZGdlIG9mIHRoZQorICogbWF0cml4X2tleXBhZCBkZWZpbmVkIEtFWSgpIG1hY3JvIGludGVybmFscy4KKyAqLworI2RlZmluZSBHUk9VUF9TSElGVAkxNAorI2RlZmluZSBHUk9VUF8wCQkoMCA8PCBHUk9VUF9TSElGVCkKKyNkZWZpbmUgR1JPVVBfMQkJKDEgPDwgR1JPVVBfU0hJRlQpCisjZGVmaW5lIEdST1VQXzIJCSgyIDw8IEdST1VQX1NISUZUKQorI2RlZmluZSBHUk9VUF8zCQkoMyA8PCBHUk9VUF9TSElGVCkKICNkZWZpbmUgR1JPVVBfTUFTSwlHUk9VUF8zCisjaWYgS0VZX01BWCAmIEdST1VQX01BU0sKKyNlcnJvciBHcm91cCBiaXRzIGluIGNvbmZsaWN0IHdpdGgga2V5bnVtIGJpdHMKKyNlbmRpZgogCi0jZGVmaW5lIEtFWV9QRVJTSVNURU5UCQkweDAwODAwMDAwCi0jZGVmaW5lIEtFWU5VTV9NQVNLCQkweDAwRUZGRkZGCi0jZGVmaW5lIEtFWShjb2wsIHJvdywgdmFsKSAoKChjb2wpIDw8IDI4KSB8ICgocm93KSA8PCAyNCkgfCAodmFsKSkKLSNkZWZpbmUgUEVSU0lTVEVOVF9LRVkoY29sLCByb3cpICgoKGNvbCkgPDwgMjgpIHwgKChyb3cpIDw8IDI0KSB8IFwKLQkJCQkJCUtFWV9QRVJTSVNURU5UKQogCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9sNF8zeHh4LmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2w0XzN4eHguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTE5NDkzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9sNF8zeHh4LmgKQEAgLTAsMCArMSwyNCBAQAorLyoKKyAqIGFyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvbDRfM3h4eC5oIC0gTDQgZmlyZXdhbGwgZGVmaW5pdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24KKyAqIFBhdWwgV2FsbXNsZXkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworI2lmbmRlZiBfX0FSQ0hfQVJNX1BMQVRfT01BUF9JTkNMVURFX01BQ0hfTDRfM1hYWF9ICisjZGVmaW5lIF9fQVJDSF9BUk1fUExBVF9PTUFQX0lOQ0xVREVfTUFDSF9MNF8zWFhYX0gKKworLyogTDQgQ09SRSAqLworI2RlZmluZSBPTUFQM19MNF9DT1JFX0ZXX0kyQzFfUkVHSU9OCQkJCTIxCisjZGVmaW5lIE9NQVAzX0w0X0NPUkVfRldfSTJDMV9UQV9SRUdJT04JCQkJMjIKKyNkZWZpbmUgT01BUDNfTDRfQ09SRV9GV19JMkMyX1JFR0lPTgkJCQkyMworI2RlZmluZSBPTUFQM19MNF9DT1JFX0ZXX0kyQzJfVEFfUkVHSU9OCQkJCTI0CisjZGVmaW5lIE9NQVAzX0w0X0NPUkVfRldfSTJDM19SRUdJT04JCQkJNzMKKyNkZWZpbmUgT01BUDNfTDRfQ09SRV9GV19JMkMzX1RBX1JFR0lPTgkJCQk3NAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvbWFpbGJveC5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9tYWlsYm94LmgKaW5kZXggOTk3NjU2NS4uY2MzOTIxZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9tYWlsYm94LmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9tYWlsYm94LmgKQEAgLTQ2LDggKzQ2LDggQEAKIAlzdHJ1Y3Qga2ZpZm8JCWZpZm87CiAJc3RydWN0IHdvcmtfc3RydWN0CXdvcms7CiAJc3RydWN0IHRhc2tsZXRfc3RydWN0CXRhc2tsZXQ7Ci0JaW50CSgqY2FsbGJhY2spKHZvaWQgKik7CiAJc3RydWN0IG9tYXBfbWJveAkqbWJveDsKKwlib29sIGZ1bGw7CiB9OwogCiBzdHJ1Y3Qgb21hcF9tYm94IHsKQEAgLTU3LDEzICs1NywxNSBAQAogCXN0cnVjdCBvbWFwX21ib3hfb3BzCSpvcHM7CiAJc3RydWN0IGRldmljZQkJKmRldjsKIAl2b2lkCQkJKnByaXY7CisJaW50CQkJdXNlX2NvdW50OworCXN0cnVjdCBibG9ja2luZ19ub3RpZmllcl9oZWFkICAgbm90aWZpZXI7CiB9OwogCiBpbnQgb21hcF9tYm94X21zZ19zZW5kKHN0cnVjdCBvbWFwX21ib3ggKiwgbWJveF9tc2dfdCBtc2cpOwogdm9pZCBvbWFwX21ib3hfaW5pdF9zZXEoc3RydWN0IG9tYXBfbWJveCAqKTsKIAotc3RydWN0IG9tYXBfbWJveCAqb21hcF9tYm94X2dldChjb25zdCBjaGFyICopOwotdm9pZCBvbWFwX21ib3hfcHV0KHN0cnVjdCBvbWFwX21ib3ggKik7CitzdHJ1Y3Qgb21hcF9tYm94ICpvbWFwX21ib3hfZ2V0KGNvbnN0IGNoYXIgKiwgc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7Cit2b2lkIG9tYXBfbWJveF9wdXQoc3RydWN0IG9tYXBfbWJveCAqbWJveCwgc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7CiAKIGludCBvbWFwX21ib3hfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqcGFyZW50LCBzdHJ1Y3Qgb21hcF9tYm94ICoqKTsKIGludCBvbWFwX21ib3hfdW5yZWdpc3Rlcih2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvbWVtb3J5LmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L21lbW9yeS5oCmluZGV4IGQ1MzA2YmUuLmY4ZDkyMmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvbWVtb3J5LmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9tZW1vcnkuaApAQCAtNjEsMTcgKzYxLDE3IEBACiAjZGVmaW5lIGxidXNfdG9fdmlydCh4KQkJKCh4KSAtIE9NQVAxNTEwX0xCX09GRlNFVCArIFBBR0VfT0ZGU0VUKQogI2RlZmluZSBpc19sYnVzX2RldmljZShkZXYpCShjcHVfaXNfb21hcDE1eHgoKSAmJiBkZXYgJiYgKHN0cm5jbXAoZGV2X25hbWUoZGV2KSwgIm9oY2kiLCA0KSA9PSAwKSkKIAotI2RlZmluZSBfX2FyY2hfcGFnZV90b19kbWEoZGV2LCBwYWdlKQlcCi0JKHsgZG1hX2FkZHJfdCBfX2RtYSA9IHBhZ2VfdG9fcGh5cyhwYWdlKTsgXAorI2RlZmluZSBfX2FyY2hfcGZuX3RvX2RtYShkZXYsIHBmbikJXAorCSh7IGRtYV9hZGRyX3QgX19kbWEgPSBfX3Bmbl90b19waHlzKHBmbik7IFwKIAkgICBpZiAoaXNfbGJ1c19kZXZpY2UoZGV2KSkgXAogCQlfX2RtYSA9IF9fZG1hIC0gUEhZU19PRkZTRVQgKyBPTUFQMTUxMF9MQl9PRkZTRVQ7IFwKIAkgICBfX2RtYTsgfSkKIAotI2RlZmluZSBfX2FyY2hfZG1hX3RvX3BhZ2UoZGV2LCBhZGRyKQlcCisjZGVmaW5lIF9fYXJjaF9kbWFfdG9fcGZuKGRldiwgYWRkcikJXAogCSh7IGRtYV9hZGRyX3QgX19kbWEgPSBhZGRyOwkJCQlcCiAJICAgaWYgKGlzX2xidXNfZGV2aWNlKGRldikpCQkJCVwKIAkJX19kbWEgKz0gUEhZU19PRkZTRVQgLSBPTUFQMTUxMF9MQl9PRkZTRVQ7CVwKLQkgICBwaHlzX3RvX3BhZ2UoX19kbWEpOwkJCQkJXAorCSAgIF9fcGh5c190b19wZm4oX19kbWEpOwkJCQlcCiAJfSkKIAogI2RlZmluZSBfX2FyY2hfZG1hX3RvX3ZpcnQoZGV2LCBhZGRyKQkoeyAodm9pZCAqKSAoaXNfbGJ1c19kZXZpY2UoZGV2KSA/IFwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvb21hcC1wbS5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9vbWFwLXBtLmgKaW5kZXggNzI4ZmJiOS4uYzBhNzUyMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9vbWFwLXBtLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9vbWFwLXBtLmgKQEAgLTE3LDI2ICsxNyw3IEBACiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1ZnJlcS5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgotCi0jaW5jbHVkZSAicG93ZXJkb21haW4uaCIKLQotLyoqCi0gKiBzdHJ1Y3Qgb21hcF9vcHAgLSBjbG9jayBmcmVxdWVuY3ktdG8tT1BQIElEIHRhYmxlIGZvciBEU1AsIE1QVQotICogQHJhdGU6IHRhcmdldCBjbG9jayByYXRlCi0gKiBAb3BwX2lkOiBPUFAgSUQKLSAqIEBtaW5fdmRkOiBtaW5pbXVtIFZERDEgdm9sdGFnZSAoaW4gbWlsbGl2b2x0cykgZm9yIHRoaXMgT1BQCi0gKgotICogT3BlcmF0aW5nIHBlcmZvcm1hbmNlIHBvaW50IGRhdGEuICBDYW4gdmFyeSBieSBPTUFQIGNoaXAgYW5kIGJvYXJkLgotICovCi1zdHJ1Y3Qgb21hcF9vcHAgewotCXVuc2lnbmVkIGxvbmcgcmF0ZTsKLQl1OCBvcHBfaWQ7Ci0JdTE2IG1pbl92ZGQ7Ci19OwotCi1leHRlcm4gc3RydWN0IG9tYXBfb3BwICptcHVfb3BwczsKLWV4dGVybiBzdHJ1Y3Qgb21hcF9vcHAgKmRzcF9vcHBzOwotZXh0ZXJuIHN0cnVjdCBvbWFwX29wcCAqbDNfb3BwczsKKyNpbmNsdWRlIDxsaW51eC9vcHAuaD4KIAogLyoKICAqIGFnZW50X2lkIHZhbHVlcyBmb3IgdXNlIHdpdGggb21hcF9wbV9zZXRfbWluX2J1c190cHV0KCk6CkBAIC01OSw5ICs0MCwxMSBAQAogICogZnJhbWV3b3JrIHN0YXJ0cy4gIFRoZSAiX2lmXyIgaXMgdG8gYXZvaWQgbmFtZSBjb2xsaXNpb25zIHdpdGggdGhlCiAgKiBQTSBpZGxlLWxvb3AgY29kZS4KICAqLwotaW50IF9faW5pdCBvbWFwX3BtX2lmX2Vhcmx5X2luaXQoc3RydWN0IG9tYXBfb3BwICptcHVfb3BwX3RhYmxlLAotCQkJCSBzdHJ1Y3Qgb21hcF9vcHAgKmRzcF9vcHBfdGFibGUsCi0JCQkJIHN0cnVjdCBvbWFwX29wcCAqbDNfb3BwX3RhYmxlKTsKKyNpZmRlZiBDT05GSUdfT01BUF9QTV9OT05FCisjZGVmaW5lIG9tYXBfcG1faWZfZWFybHlfaW5pdCgpIDAKKyNlbHNlCitpbnQgX19pbml0IG9tYXBfcG1faWZfZWFybHlfaW5pdCh2b2lkKTsKKyNlbmRpZgogCiAvKioKICAqIG9tYXBfcG1faWZfaW5pdCAtIE9NQVAgUE0gaW5pdCBjb2RlIGNhbGxlZCBhZnRlciBjbG9jayBmdyBpbml0CkBAIC02OSw3ICs1MiwxMSBAQAogICogVGhlIG1haW4gaW5pdGlhbGl6YXRpb24gY29kZS4gIE9QUCB0YWJsZXMgYXJlIHBhc3NlZCBpbiBoZXJlLiAgVGhlCiAgKiAiX2lmXyIgaXMgdG8gYXZvaWQgbmFtZSBjb2xsaXNpb25zIHdpdGggdGhlIFBNIGlkbGUtbG9vcCBjb2RlLgogICovCisjaWZkZWYgQ09ORklHX09NQVBfUE1fTk9ORQorI2RlZmluZSBvbWFwX3BtX2lmX2luaXQoKSAwCisjZWxzZQogaW50IF9faW5pdCBvbWFwX3BtX2lmX2luaXQodm9pZCk7CisjZW5kaWYKIAogLyoqCiAgKiBvbWFwX3BtX2lmX2V4aXQgLSBPTUFQIFBNIGV4aXQgY29kZQpAQCAtMzYzLDkgKzM1MCwxMSBAQAogICogZHJpdmVyIG11c3QgcmVzdG9yZSBkZXZpY2UgY29udGV4dC4gICBJZiB0aGUgbnVtYmVyIG9mIGNvbnRleHQgbG9zc2VzCiAgKiBleGNlZWRzIHRoZSBtYXhpbXVtIHBvc2l0aXZlIGludGVnZXIsIHRoZSBmdW5jdGlvbiB3aWxsIHdyYXAgdG8gMCBhbmQKICAqIGNvbnRpbnVlIGNvdW50aW5nLiAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGNvbnRleHQgbG9zc2VzIGZvciB0aGlzIGRldmljZSwKLSAqIG9yIC1FSU5WQUwgdXBvbiBlcnJvci4KKyAqIG9yIHplcm8gdXBvbiBlcnJvci4KICAqLwotaW50IG9tYXBfcG1fZ2V0X2Rldl9jb250ZXh0X2xvc3NfY291bnQoc3RydWN0IGRldmljZSAqZGV2KTsKK3UzMiBvbWFwX3BtX2dldF9kZXZfY29udGV4dF9sb3NzX2NvdW50KHN0cnVjdCBkZXZpY2UgKmRldik7CiAKK3ZvaWQgb21hcF9wbV9lbmFibGVfb2ZmX21vZGUodm9pZCk7Cit2b2lkIG9tYXBfcG1fZGlzYWJsZV9vZmZfbW9kZSh2b2lkKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L29tYXAtc2VyaWFsLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L29tYXAtc2VyaWFsLmgKaW5kZXggYzhkYWUwMi4uMjY4MjA0MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9vbWFwLXNlcmlhbC5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvb21hcC1zZXJpYWwuaApAQCAtMjIsNyArMjIsNyBAQAogCiAjaW5jbHVkZSA8cGxhdC9tdXguaD4KIAotI2RlZmluZSBEUklWRVJfTkFNRQkib21hcC1oc3VhcnQiCisjZGVmaW5lIERSSVZFUl9OQU1FCSJvbWFwX3VhcnQiCiAKIC8qCiAgKiBVc2UgdHR5IGRldmljZSBuYW1lIGFzIHR0eU8sIFtPIC0+IE9NQVBdCkBAIC0zMSwyMCArMzEsOCBAQAogICovCiAjZGVmaW5lIE9NQVBfU0VSSUFMX05BTUUJInR0eU8iCiAKLSNkZWZpbmUgT01BUF9NRFIxX0RJU0FCTEUJMHgwNwotI2RlZmluZSBPTUFQX01EUjFfTU9ERTEzWAkweDAzCi0jZGVmaW5lIE9NQVBfTURSMV9NT0RFMTZYCTB4MDAKICNkZWZpbmUgT01BUF9NT0RFMTNYX1NQRUVECTIzMDQwMAogCi0vKgotICogTENSID0gMFhCRjogU3dpdGNoIHRvIENvbmZpZ3VyYXRpb24gTW9kZSBCLgotICogSW4gY29uZmlndXJhdGlvbiBtb2RlIGIgYWxsb3cgYWNjZXNzCi0gKiB0byBFRlIsRExMLERMSC4KLSAqIFJlZmVyZW5jZSBPTUFQIFRSTSBDaGFwdGVyIDE3Ci0gKiBTZWN0aW9uOiAxLjQuMyBNb2RlIFNlbGVjdGlvbgotICovCi0jZGVmaW5lIE9NQVBfVUFSVF9MQ1JfQ09ORl9NREIJMFhCRgotCiAvKiBXRVIgPSAweDdGCiAgKiBFbmFibGUgbW9kdWxlIGxldmVsIHdha2V1cCBpbiBXRVIgcmVnCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvb21hcDQ0eHguaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvb21hcDQ0eHguaAppbmRleCA4YjNmMTJmLi5lYTJiOGE2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L29tYXA0NHh4LmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9vbWFwNDR4eC5oCkBAIC01Miw1ICs1MiwxMCBAQAogI2RlZmluZSBPTUFQNF9NTVUxX0JBU0UJCQkweDU1MDgyMDAwCiAjZGVmaW5lIE9NQVA0X01NVTJfQkFTRQkJCTB4NEEwNjYwMDAKIAorI2RlZmluZSBPTUFQNDRYWF9VU0JUTExfQkFTRQkJKEw0XzQ0WFhfQkFTRSArIDB4NjIwMDApCisjZGVmaW5lIE9NQVA0NFhYX1VISF9DT05GSUdfQkFTRQkoTDRfNDRYWF9CQVNFICsgMHg2NDAwMCkKKyNkZWZpbmUgT01BUDQ0WFhfSFNVU0JfT0hDSV9CQVNFCShMNF80NFhYX0JBU0UgKyAweDY0ODAwKQorI2RlZmluZSBPTUFQNDRYWF9IU1VTQl9FSENJX0JBU0UJKEw0XzQ0WFhfQkFTRSArIDB4NjRDMDApCisKICNlbmRpZiAvKiBfX0FTTV9BUkNIX09NQVA0NFhYX0ggKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9vbWFwX2RldmljZS5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9vbWFwX2RldmljZS5oCmluZGV4IDI4ZTJkMWEuLmU0YzM0OWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvb21hcF9kZXZpY2UuaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L29tYXBfZGV2aWNlLmgKQEAgLTEwNyw2ICsxMDcsNyBAQAogaW50IG9tYXBfZGV2aWNlX2FsaWduX3BtX2xhdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAogCQkJICAgICB1MzIgbmV3X3dha2V1cF9sYXRfbGltaXQpOwogc3RydWN0IHBvd2VyZG9tYWluICpvbWFwX2RldmljZV9nZXRfcHdyZG0oc3RydWN0IG9tYXBfZGV2aWNlICpvZCk7Cit1MzIgb21hcF9kZXZpY2VfZ2V0X2NvbnRleHRfbG9zc19jb3VudChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKIAogLyogT3RoZXIgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9vbWFwX2h3bW9kLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L29tYXBfaHdtb2QuaAppbmRleCA3ZWFhOGVkLi42ODY0YTk5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L29tYXBfaHdtb2QuaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L29tYXBfaHdtb2QuaApAQCAtMjMsNyArMjMsNyBAQAogICogLSBhZGQgcGlubXV4aW5nCiAgKiAtIGluaXRfY29ubl9pZF9iaXQgKENPTk5JRF9CSVRfVkVDVE9SKQogICogLSBpbXBsZW1lbnQgZGVmYXVsdCBod21vZCBTTVMvU0RSQyBmbGFncz8KLSAqIC0gcmVtb3ZlIHVudXNlZCBmaWVsZHMKKyAqIC0gbW92ZSBMaW51eC1zcGVjaWZpYyBkYXRhICgibm9uLVJPTSBkYXRhIikgb3V0CiAgKgogICovCiAjaWZuZGVmIF9fQVJDSF9BUk1fUExBVF9PTUFQX0lOQ0xVREVfTUFDSF9PTUFQX0hXTU9EX0gKQEAgLTMyLDggKzMyLDkgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC92b2x0YWdlLmg+CiAKIHN0cnVjdCBvbWFwX2RldmljZTsKIApAQCAtNzYsNiArNzcsMjAgQEAKICNkZWZpbmUgSFdNT0RfSURMRU1PREVfRk9SQ0UJCSgxIDw8IDApCiAjZGVmaW5lIEhXTU9EX0lETEVNT0RFX05PCQkoMSA8PCAxKQogI2RlZmluZSBIV01PRF9JRExFTU9ERV9TTUFSVAkJKDEgPDwgMikKKy8qIFNsYXZlIGlkbGUgbW9kZSBmbGFnIG9ubHkgKi8KKyNkZWZpbmUgSFdNT0RfSURMRU1PREVfU01BUlRfV0tVUAkoMSA8PCAzKQorCisvKioKKyAqIHN0cnVjdCBvbWFwX2h3bW9kX211eF9pbmZvIC0gaHdtb2Qgc3BlY2lmaWMgbXV4IGNvbmZpZ3VyYXRpb24KKyAqIEBwYWRzOiAgICAgICAgICAgICAgYXJyYXkgb2Ygb21hcF9kZXZpY2VfcGFkIGVudHJpZXMKKyAqIEBucl9wYWRzOiAgICAgICAgICAgbnVtYmVyIG9mIG9tYXBfZGV2aWNlX3BhZCBlbnRyaWVzCisgKgorICogTm90ZSB0aGF0IHRoaXMgaXMgY3VycmVudGx5IGJ1aWx0IGR1cmluZyBpbml0IGFzIG5lZWRlZC4KKyAqLworc3RydWN0IG9tYXBfaHdtb2RfbXV4X2luZm8geworCWludAkJCQlucl9wYWRzOworCXN0cnVjdCBvbWFwX2RldmljZV9wYWQJCSpwYWRzOworfTsKIAogLyoqCiAgKiBzdHJ1Y3Qgb21hcF9od21vZF9pcnFfaW5mbyAtIE1QVSBJUlFzIHVzZWQgYnkgdGhlIGh3bW9kCkBAIC0xNTksNyArMTc0LDcgQEAKICAqIEFERFJfTUFQX09OX0lOSVQ6IE1hcCB0aGlzIGFkZHJlc3Mgc3BhY2UgZHVyaW5nIG9tYXBfaHdtb2QgaW5pdC4KICAqIEFERFJfVFlQRV9SVDogQWRkcmVzcyBzcGFjZSBjb250YWlucyBtb2R1bGUgcmVnaXN0ZXIgdGFyZ2V0IGRhdGEuCiAgKi8KLSNkZWZpbmUgQUREUl9NQVBfT05fSU5JVAkoMSA8PCAwKQorI2RlZmluZSBBRERSX01BUF9PTl9JTklUCSgxIDw8IDApCS8qIFhYWCBkb2VzIG5vdCBiZWxvbmcgKi8KICNkZWZpbmUgQUREUl9UWVBFX1JUCQkoMSA8PCAxKQogCiAvKioKQEAgLTIwMCw4ICsyMTUsNiBAQAogICogQGZ3OiBpbnRlcmZhY2UgZmlyZXdhbGwgZGF0YQogICogQGFkZHJfY250OiBBUlJBWV9TSVpFKEBhZGRyKQogICogQHdpZHRoOiBPQ1AgZGF0YSB3aWR0aAotICogQHRocmVhZF9jbnQ6IG51bWJlciBvZiB0aHJlYWRzCi0gKiBAbWF4X2J1cnN0X2xlbjogbWF4aW11bSBidXJzdCBsZW5ndGggaW4gQHdpZHRoIHNpemVkIHdvcmRzICgwIGlmIHVubGltaXRlZCkKICAqIEB1c2VyOiBpbml0aWF0b3JzIHVzaW5nIHRoaXMgaW50ZXJmYWNlIChzZWUgT0NQX1VTRVJfKiBtYWNyb3MgYWJvdmUpCiAgKiBAZmxhZ3M6IE9DUCBpbnRlcmZhY2UgZmxhZ3MgKHNlZSBPQ1BJRl8qIG1hY3JvcyBhYm92ZSkKICAqCkBAIC0yMjEsOCArMjM0LDYgQEAKIAl9CQkJCWZ3OwogCXU4CQkJCWFkZHJfY250OwogCXU4CQkJCXdpZHRoOwotCXU4CQkJCXRocmVhZF9jbnQ7Ci0JdTgJCQkJbWF4X2J1cnN0X2xlbjsKIAl1OAkJCQl1c2VyOwogCXU4CQkJCWZsYWdzOwogfTsKQEAgLTIzMSwxMSArMjQyLDEyIEBACiAvKiBNYWNyb3MgZm9yIHVzZSBpbiBzdHJ1Y3Qgb21hcF9od21vZF9zeXNjb25maWcgKi8KIAogLyogRmxhZ3MgZm9yIHVzZSBpbiBvbWFwX2h3bW9kX3N5c2NvbmZpZy5pZGxlbW9kZXMgKi8KLSNkZWZpbmUgTUFTVEVSX1NUQU5EQllfU0hJRlQJMgorI2RlZmluZSBNQVNURVJfU1RBTkRCWV9TSElGVAk0CiAjZGVmaW5lIFNMQVZFX0lETEVfU0hJRlQJMAogI2RlZmluZSBTSURMRV9GT1JDRQkJKEhXTU9EX0lETEVNT0RFX0ZPUkNFIDw8IFNMQVZFX0lETEVfU0hJRlQpCiAjZGVmaW5lIFNJRExFX05PCQkoSFdNT0RfSURMRU1PREVfTk8gPDwgU0xBVkVfSURMRV9TSElGVCkKICNkZWZpbmUgU0lETEVfU01BUlQJCShIV01PRF9JRExFTU9ERV9TTUFSVCA8PCBTTEFWRV9JRExFX1NISUZUKQorI2RlZmluZSBTSURMRV9TTUFSVF9XS1VQCShIV01PRF9JRExFTU9ERV9TTUFSVF9XS1VQIDw8IFNMQVZFX0lETEVfU0hJRlQpCiAjZGVmaW5lIE1TVEFOREJZX0ZPUkNFCQkoSFdNT0RfSURMRU1PREVfRk9SQ0UgPDwgTUFTVEVSX1NUQU5EQllfU0hJRlQpCiAjZGVmaW5lIE1TVEFOREJZX05PCQkoSFdNT0RfSURMRU1PREVfTk8gPDwgTUFTVEVSX1NUQU5EQllfU0hJRlQpCiAjZGVmaW5lIE1TVEFOREJZX1NNQVJUCQkoSFdNT0RfSURMRU1PREVfU01BUlQgPDwgTUFTVEVSX1NUQU5EQllfU0hJRlQpCkBAIC0zNTcsMTQgKzM2OSwxNCBAQAogICogSFdNT0RfU1dTVVBfTVNUREJZOiBvbWFwX2h3bW9kIGNvZGUgc2hvdWxkIG1hbnVhbGx5IGJyaW5nIG1vZHVsZSBpbiBhbmQgb3V0CiAgKiAgICAgb2Ygc3RhbmRieSwgcmF0aGVyIHRoYW4gcmVseWluZyBvbiBtb2R1bGUgc21hcnQtc3RhbmRieQogICogSFdNT0RfSU5JVF9OT19SRVNFVDogZG9uJ3QgcmVzZXQgdGhpcyBtb2R1bGUgYXQgYm9vdCAtIGltcG9ydGFudCBmb3IKLSAqICAgICBTRFJBTSBjb250cm9sbGVyLCBldGMuCisgKiAgICAgU0RSQU0gY29udHJvbGxlciwgZXRjLiBYWFggcHJvYmFibHkgYmVsb25ncyBvdXRzaWRlIHRoZSBtYWluIGh3bW9kIGZpbGUKICAqIEhXTU9EX0lOSVRfTk9fSURMRTogZG9uJ3QgaWRsZSB0aGlzIG1vZHVsZSBhdCBib290IC0gaW1wb3J0YW50IGZvciBTRFJBTQotICogICAgIGNvbnRyb2xsZXIsIGV0Yy4KKyAqICAgICBjb250cm9sbGVyLCBldGMuIFhYWCBwcm9iYWJseSBiZWxvbmdzIG91dHNpZGUgdGhlIG1haW4gaHdtb2QgZmlsZQogICogSFdNT0RfTk9fQVVUT0lETEU6IGRpc2FibGUgbW9kdWxlIGF1dG9pZGxlIChPQ1BfU1lTQ09ORklHLkFVVE9JRExFKQogICogICAgIHdoZW4gbW9kdWxlIGlzIGVuYWJsZWQsIHJhdGhlciB0aGFuIHRoZSBkZWZhdWx0LCB3aGljaCBpcyB0bwogICogICAgIGVuYWJsZSBhdXRvaWRsZQogICogSFdNT0RfU0VUX0RFRkFVTFRfQ0xPQ0tBQ1Q6IHByb2dyYW0gQ0xPQ0tBQ1RJVklUWSBiaXRzIGF0IHN0YXJ0dXAKLSAqIEhXTU9EX05PX0lETEVTVCA6IHRoaXMgbW9kdWxlIGRvZXMgbm90IGhhdmUgaWRsZSBzdGF0dXMgLSB0aGlzIGlzIHRoZSBjYXNlCisgKiBIV01PRF9OT19JRExFU1Q6IHRoaXMgbW9kdWxlIGRvZXMgbm90IGhhdmUgaWRsZSBzdGF0dXMgLSB0aGlzIGlzIHRoZSBjYXNlCiAgKiAgICAgb25seSBmb3IgZmV3IGluaXRpYXRvciBtb2R1bGVzIG9uIE9NQVAyICYgMy4KICAqIEhXTU9EX0NPTlRST0xfT1BUX0NMS1NfSU5fUkVTRVQ6IEVuYWJsZSBhbGwgb3B0aW9uYWwgY2xvY2tzIGR1cmluZyByZXNldC4KICAqICAgICBUaGlzIGlzIG5lZWRlZCBmb3IgZGV2aWNlcyBsaWtlIERTUyB0aGF0IHJlcXVpcmUgb3B0aW9uYWwgY2xvY2tzIGVuYWJsZWQKQEAgLTQxNSwxNCArNDI3LDMxIEBACiAgKiBAbmFtZTogbmFtZSBvZiB0aGUgaHdtb2RfY2xhc3MKICAqIEBzeXNjOiBkZXZpY2UgU1lTQ09ORklHL1NZU1NUQVRVUyByZWdpc3RlciBkYXRhCiAgKiBAcmV2OiByZXZpc2lvbiBvZiB0aGUgSVAgY2xhc3MKKyAqIEBwcmVfc2h1dGRvd246IHB0ciB0byBmbiB0byBiZSBleGVjdXRlZCBpbW1lZGlhdGVseSBwcmlvciB0byBkZXZpY2Ugc2h1dGRvd24KKyAqIEByZXNldDogcHRyIHRvIGZuIHRvIGJlIGV4ZWN1dGVkIGluIHBsYWNlIG9mIHRoZSBzdGFuZGFyZCBod21vZCByZXNldCBmbgogICoKICAqIFJlcHJlc2VudCB0aGUgY2xhc3Mgb2YgYSBPTUFQIGhhcmR3YXJlICJtb2R1bGVzIiAoZS5nLiB0aW1lciwKICAqIHNtYXJ0cmVmbGV4LCBncGlvLCB1YXJ0Li4uKQorICoKKyAqIEBwcmVfc2h1dGRvd24gaXMgYSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgcnVuIGltbWVkaWF0ZWx5IGJlZm9yZQorICogaHdtb2QgY2xvY2tzIGFyZSBkaXNhYmxlZCwgZXRjLiAgSXQgaXMgaW50ZW5kZWQgZm9yIHVzZSBmb3IgaHdtb2RzCisgKiBsaWtlIHRoZSBNUFUgd2F0Y2hkb2csIHdoaWNoIGNhbm5vdCBiZSBkaXNhYmxlZCB3aXRoIHRoZSBzdGFuZGFyZAorICogb21hcF9od21vZF9zaHV0ZG93bigpLiAgVGhlIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gMCB1cG9uIHN1Y2Nlc3MsCisgKiBvciBzb21lIG5lZ2F0aXZlIGVycm9yIHVwb24gZmFpbHVyZS4gIFJldHVybmluZyBhbiBlcnJvciB3aWxsIGNhdXNlCisgKiBvbWFwX2h3bW9kX3NodXRkb3duKCkgdG8gYWJvcnQgdGhlIGRldmljZSBzaHV0ZG93biBhbmQgcmV0dXJuIGFuCisgKiBlcnJvci4KKyAqCisgKiBJZiBAcmVzZXQgaXMgZGVmaW5lZCwgdGhlbiB0aGUgZnVuY3Rpb24gaXQgcG9pbnRzIHRvIHdpbGwgYmUKKyAqIGV4ZWN1dGVkIGluIHBsYWNlIG9mIHRoZSBzdGFuZGFyZCBod21vZCBfcmVzZXQoKSBjb2RlIGluCisgKiBtYWNoLW9tYXAyL29tYXBfaHdtb2QuYy4gIFRoaXMgaXMgbmVlZGVkIGZvciBJUCBibG9ja3Mgd2hpY2ggaGF2ZQorICogdW51c3VhbCByZXNldCBzZXF1ZW5jZXMgLSB1c3VhbGx5IHByb2Nlc3NvciBJUCBibG9ja3MgbGlrZSB0aGUgSVZBLgogICovCiBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzcyB7CiAJY29uc3QgY2hhcgkJCQkqbmFtZTsKIAlzdHJ1Y3Qgb21hcF9od21vZF9jbGFzc19zeXNjb25maWcJKnN5c2M7CiAJdTMyCQkJCQlyZXY7CisJaW50CQkJCQkoKnByZV9zaHV0ZG93bikoc3RydWN0IG9tYXBfaHdtb2QgKm9oKTsKKwlpbnQJCQkJCSgqcmVzZXQpKHN0cnVjdCBvbWFwX2h3bW9kICpvaCk7CiB9OwogCiAvKioKQEAgLTQzNiwxNCArNDY1LDE0IEBACiAgKiBAbWFpbl9jbGs6IG1haW4gY2xvY2s6IE9NQVAgY2xvY2sgbmFtZQogICogQF9jbGs6IHBvaW50ZXIgdG8gdGhlIG1haW4gc3RydWN0IGNsayAoZmlsbGVkIGluIGF0IHJ1bnRpbWUpCiAgKiBAb3B0X2Nsa3M6IG90aGVyIGRldmljZSBjbG9ja3MgdGhhdCBkcml2ZXJzIGNhbiByZXF1ZXN0ICgwLi4qKQorICogQHZkZF9uYW1lOiB2b2x0YWdlIGRvbWFpbiBuYW1lCisgKiBAdm9sdGRtOiBwb2ludGVyIHRvIHZvbHRhZ2UgZG9tYWluIChmaWxsZWQgaW4gYXQgcnVudGltZSkKICAqIEBtYXN0ZXJzOiBwdHIgdG8gYXJyYXkgb2YgT0NQIGlmcyB0aGF0IHRoaXMgaHdtb2QgY2FuIGluaXRpYXRlIG9uCiAgKiBAc2xhdmVzOiBwdHIgdG8gYXJyYXkgb2YgT0NQIGlmcyB0aGF0IHRoaXMgaHdtb2QgY2FuIHJlc3BvbmQgb24KICAqIEBkZXZfYXR0cjogYXJiaXRyYXJ5IGRldmljZSBhdHRyaWJ1dGVzIHRoYXQgY2FuIGJlIHBhc3NlZCB0byB0aGUgZHJpdmVyCiAgKiBAX3N5c2NfY2FjaGU6IGludGVybmFsLXVzZSBod21vZCBmbGFncwogICogQF9tcHVfcnRfdmE6IGNhY2hlZCByZWdpc3RlciB0YXJnZXQgc3RhcnQgYWRkcmVzcyAoaW50ZXJuYWwgdXNlKQogICogQF9tcHVfcG9ydF9pbmRleDogY2FjaGVkIE1QVSByZWdpc3RlciB0YXJnZXQgc2xhdmUgSUQgKGludGVybmFsIHVzZSkKLSAqIEBtc3VzcGVuZG11eF9yZWdfaWQ6IENPTlRST0xfTVNVU1BFTkRNVVggcmVnaXN0ZXIgSUQgKDEtNikKLSAqIEBtc3VzcGVuZG11eF9zaGlmdDogQ09OVFJPTF9NU1VTUEVORE1VWCByZWdpc3RlciBiaXQgc2hpZnQKICAqIEBtcHVfaXJxc19jbnQ6IG51bWJlciBvZiBAbXB1X2lycXMKICAqIEBzZG1hX3JlcXNfY250OiBudW1iZXIgb2YgQHNkbWFfcmVxcwogICogQG9wdF9jbGtzX2NudDogbnVtYmVyIG9mIEBvcHRfY2xrcwpAQCAtNDUyLDkgKzQ4MSwxMCBAQAogICogQHJlc3BvbnNlX2xhdDogZGV2aWNlIE9DUCByZXNwb25zZSBsYXRlbmN5IChpbiBpbnRlcmZhY2UgY2xvY2sgY3ljbGVzKQogICogQF9pbnRfZmxhZ3M6IGludGVybmFsLXVzZSBod21vZCBmbGFncwogICogQF9zdGF0ZTogaW50ZXJuYWwtdXNlIGh3bW9kIHN0YXRlCisgKiBAX3Bvc3RzZXR1cF9zdGF0ZTogaW50ZXJuYWwtdXNlIHN0YXRlIHRvIGxlYXZlIHRoZSBod21vZCBpbiBhZnRlciBfc2V0dXAoKQogICogQGZsYWdzOiBod21vZCBmbGFncyAoZG9jdW1lbnRlZCBiZWxvdykKICAqIEBvbWFwX2NoaXA6IE9NQVAgY2hpcHMgdGhpcyBod21vZCBpcyBwcmVzZW50IG9uCi0gKiBAX211dGV4OiBtdXRleCBzZXJpYWxpemluZyBvcGVyYXRpb25zIG9uIHRoaXMgaHdtb2QKKyAqIEBfbG9jazogc3BpbmxvY2sgc2VyaWFsaXppbmcgb3BlcmF0aW9ucyBvbiB0aGlzIGh3bW9kCiAgKiBAbm9kZTogbGlzdCBub2RlIGZvciBod21vZCBsaXN0IChpbnRlcm5hbCB1c2UpCiAgKgogICogQG1haW5fY2xrIHJlZmVycyB0byB0aGlzIG1vZHVsZSdzICJtYWluIGNsb2NrLCIgd2hpY2ggZm9yIG91cgpAQCAtNDY5LDYgKzQ5OSw3IEBACiAJY29uc3QgY2hhcgkJCSpuYW1lOwogCXN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzCQkqY2xhc3M7CiAJc3RydWN0IG9tYXBfZGV2aWNlCQkqb2Q7CisJc3RydWN0IG9tYXBfaHdtb2RfbXV4X2luZm8JKm11eDsKIAlzdHJ1Y3Qgb21hcF9od21vZF9pcnFfaW5mbwkqbXB1X2lycXM7CiAJc3RydWN0IG9tYXBfaHdtb2RfZG1hX2luZm8JKnNkbWFfcmVxczsKIAlzdHJ1Y3Qgb21hcF9od21vZF9yc3RfaW5mbwkqcnN0X2xpbmVzOwpAQCAtNDc5LDE3ICs1MTAsMTcgQEAKIAljb25zdCBjaGFyCQkJKm1haW5fY2xrOwogCXN0cnVjdCBjbGsJCQkqX2NsazsKIAlzdHJ1Y3Qgb21hcF9od21vZF9vcHRfY2xrCSpvcHRfY2xrczsKKwljaGFyCQkJCSp2ZGRfbmFtZTsKKwlzdHJ1Y3Qgdm9sdGFnZWRvbWFpbgkJKnZvbHRkbTsKIAlzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYJKiptYXN0ZXJzOyAvKiBjb25uZWN0IHRvICpfSUEgKi8KIAlzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYJKipzbGF2ZXM7ICAvKiBjb25uZWN0IHRvICpfVEEgKi8KIAl2b2lkCQkJCSpkZXZfYXR0cjsKIAl1MzIJCQkJX3N5c2NfY2FjaGU7CiAJdm9pZCBfX2lvbWVtCQkJKl9tcHVfcnRfdmE7Ci0Jc3RydWN0IG11dGV4CQkJX211dGV4OworCXNwaW5sb2NrX3QJCQlfbG9jazsKIAlzdHJ1Y3QgbGlzdF9oZWFkCQlub2RlOwogCXUxNgkJCQlmbGFnczsKIAl1OAkJCQlfbXB1X3BvcnRfaW5kZXg7Ci0JdTgJCQkJbXN1c3BlbmRtdXhfcmVnX2lkOwotCXU4CQkJCW1zdXNwZW5kbXV4X3NoaWZ0OwogCXU4CQkJCXJlc3BvbnNlX2xhdDsKIAl1OAkJCQltcHVfaXJxc19jbnQ7CiAJdTgJCQkJc2RtYV9yZXFzX2NudDsKQEAgLTUwMCwxNiArNTMxLDE1IEBACiAJdTgJCQkJaHdtb2RzX2NudDsKIAl1OAkJCQlfaW50X2ZsYWdzOwogCXU4CQkJCV9zdGF0ZTsKKwl1OAkJCQlfcG9zdHNldHVwX3N0YXRlOwogCWNvbnN0IHN0cnVjdCBvbWFwX2NoaXBfaWQJb21hcF9jaGlwOwogfTsKIAogaW50IG9tYXBfaHdtb2RfaW5pdChzdHJ1Y3Qgb21hcF9od21vZCAqKm9ocyk7Ci1pbnQgb21hcF9od21vZF9yZWdpc3RlcihzdHJ1Y3Qgb21hcF9od21vZCAqb2gpOwotaW50IG9tYXBfaHdtb2RfdW5yZWdpc3RlcihzdHJ1Y3Qgb21hcF9od21vZCAqb2gpOwogc3RydWN0IG9tYXBfaHdtb2QgKm9tYXBfaHdtb2RfbG9va3VwKGNvbnN0IGNoYXIgKm5hbWUpOwogaW50IG9tYXBfaHdtb2RfZm9yX2VhY2goaW50ICgqZm4pKHN0cnVjdCBvbWFwX2h3bW9kICpvaCwgdm9pZCAqZGF0YSksCiAJCQl2b2lkICpkYXRhKTsKLWludCBvbWFwX2h3bW9kX2xhdGVfaW5pdCh1OCBza2lwX3NldHVwX2lkbGUpOworaW50IG9tYXBfaHdtb2RfbGF0ZV9pbml0KHZvaWQpOwogCiBpbnQgb21hcF9od21vZF9lbmFibGUoc3RydWN0IG9tYXBfaHdtb2QgKm9oKTsKIGludCBfb21hcF9od21vZF9lbmFibGUoc3RydWN0IG9tYXBfaHdtb2QgKm9oKTsKQEAgLTU1Niw2ICs1ODYsOSBAQAogCQkJCQkgICB2b2lkICp1c2VyKSwKIAkJCQkgdm9pZCAqdXNlcik7CiAKK2ludCBvbWFwX2h3bW9kX3NldF9wb3N0c2V0dXBfc3RhdGUoc3RydWN0IG9tYXBfaHdtb2QgKm9oLCB1OCBzdGF0ZSk7Cit1MzIgb21hcF9od21vZF9nZXRfY29udGV4dF9sb3NzX2NvdW50KHN0cnVjdCBvbWFwX2h3bW9kICpvaCk7CisKIC8qCiAgKiBDaGlwIHZhcmlhbnQtc3BlY2lmaWMgaHdtb2QgaW5pdCByb3V0aW5lcyAtIFhYWCBzaG91bGQgYmUgY29udmVydGVkCiAgKiB0byB1c2UgaW5pdGNhbGxzIG9uY2UgdGhlIGluaXRpYWwgYm9vdCBvcmRlcmluZyBpcyBzdHJhaWdodGVuZWQgb3V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L3Bvd2VyZG9tYWluLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L3Bvd2VyZG9tYWluLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljYTQyMGQuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9wb3dlcmRvbWFpbi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTY3ICswLDAgQEAKLS8qCi0gKiBPTUFQMi8zIHBvd2VyZG9tYWluIGNvbnRyb2wKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgTm9raWEgQ29ycG9yYXRpb24KLSAqCi0gKiBXcml0dGVuIGJ5IFBhdWwgV2FsbXNsZXkKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpZm5kZWYgQVNNX0FSTV9BUkNIX09NQVBfUE9XRVJET01BSU4KLSNkZWZpbmUgQVNNX0FSTV9BUkNIX09NQVBfUE9XRVJET01BSU4KLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgotCi0jaW5jbHVkZSA8YXNtL2F0b21pYy5oPgotCi0jaW5jbHVkZSA8cGxhdC9jcHUuaD4KLQotCi0vKiBQb3dlcmRvbWFpbiBiYXNpYyBwb3dlciBzdGF0ZXMgKi8KLSNkZWZpbmUgUFdSRE1fUE9XRVJfT0ZGCQkweDAKLSNkZWZpbmUgUFdSRE1fUE9XRVJfUkVUCQkweDEKLSNkZWZpbmUgUFdSRE1fUE9XRVJfSU5BQ1RJVkUJMHgyCi0jZGVmaW5lIFBXUkRNX1BPV0VSX09OCQkweDMKLQotI2RlZmluZSBQV1JETV9NQVhfUFdSU1RTCTQKLQotLyogUG93ZXJkb21haW4gYWxsb3dhYmxlIHN0YXRlIGJpdGZpZWxkcyAqLwotI2RlZmluZSBQV1JTVFNfT04JCSgxIDw8IFBXUkRNX1BPV0VSX09OKQotI2RlZmluZSBQV1JTVFNfT0ZGCQkoMSA8PCBQV1JETV9QT1dFUl9PRkYpCi0jZGVmaW5lIFBXUlNUU19PRkZfT04JCSgoMSA8PCBQV1JETV9QT1dFUl9PRkYpIHwgXAotCQkJCSAoMSA8PCBQV1JETV9QT1dFUl9PTikpCi0KLSNkZWZpbmUgUFdSU1RTX09GRl9SRVQJCSgoMSA8PCBQV1JETV9QT1dFUl9PRkYpIHwgXAotCQkJCSAoMSA8PCBQV1JETV9QT1dFUl9SRVQpKQotCi0jZGVmaW5lIFBXUlNUU19SRVRfT04JCSgoMSA8PCBQV1JETV9QT1dFUl9SRVQpIHwgXAotCQkJCSAoMSA8PCBQV1JETV9QT1dFUl9PTikpCi0KLSNkZWZpbmUgUFdSU1RTX09GRl9SRVRfT04JKFBXUlNUU19PRkZfUkVUIHwgKDEgPDwgUFdSRE1fUE9XRVJfT04pKQotCi0KLS8qIFBvd2VyZG9tYWluIGZsYWdzICovCi0jZGVmaW5lIFBXUkRNX0hBU19IRFdSX1NBUgkoMSA8PCAwKSAvKiBoYXJkd2FyZSBzYXZlLWFuZC1yZXN0b3JlIHN1cHBvcnQgKi8KLSNkZWZpbmUgUFdSRE1fSEFTX01QVV9RVUlSSwkoMSA8PCAxKSAvKiBNUFUgcHdyIGRvbWFpbiBoYXMgTUVNIGJhbmsgMCBiaXRzCi0JCQkJCSAgKiBpbiBNRU0gYmFuayAxIHBvc2l0aW9uLiBUaGlzIGlzCi0JCQkJCSAgKiB0cnVlIGZvciBPTUFQMzQzMAotCQkJCQkgICovCi0jZGVmaW5lIFBXUkRNX0hBU19MT1dQT1dFUlNUQVRFQ0hBTkdFCSgxIDw8IDIpIC8qCi0JCQkJCQkgICogc3VwcG9ydCB0byB0cmFuc2l0aW9uIGZyb20gYQotCQkJCQkJICAqIHNsZWVwIHN0YXRlIHRvIGEgbG93ZXIgc2xlZXAKLQkJCQkJCSAgKiBzdGF0ZSB3aXRob3V0IHdha2luZyB1cCB0aGUKLQkJCQkJCSAgKiBwb3dlcmRvbWFpbgotCQkJCQkJICAqLwotCi0vKgotICogTnVtYmVyIG9mIG1lbW9yeSBiYW5rcyB0aGF0IGFyZSBwb3dlci1jb250cm9sbGFibGUuCU9uIE9NQVA0NDMwLCB0aGUKLSAqIG1heGltdW0gaXMgNS4KLSAqLwotI2RlZmluZSBQV1JETV9NQVhfTUVNX0JBTktTCTUKLQotLyoKLSAqIE1heGltdW0gbnVtYmVyIG9mIGNsb2NrZG9tYWlucyB0aGF0IGNhbiBiZSBhc3NvY2lhdGVkIHdpdGggYSBwb3dlcmRvbWFpbi4KLSAqIENPUkUgcG93ZXJkb21haW4gb24gT01BUDQgaXMgdGhlIHdvcnN0IGNhc2UKLSAqLwotI2RlZmluZSBQV1JETV9NQVhfQ0xLRE1TCTkKLQotLyogWFhYIEEgY29tcGxldGVseSBhcmJpdHJhcnkgbnVtYmVyLiBXaGF0IGlzIHJlYXNvbmFibGUgaGVyZT8gKi8KLSNkZWZpbmUgUFdSRE1fVFJBTlNJVElPTl9CQUlMT1VUIDEwMDAwMAotCi1zdHJ1Y3QgY2xvY2tkb21haW47Ci1zdHJ1Y3QgcG93ZXJkb21haW47Ci0KLS8qKgotICogc3RydWN0IHBvd2VyZG9tYWluIC0gT01BUCBwb3dlcmRvbWFpbgotICogQG5hbWU6IFBvd2VyZG9tYWluIG5hbWUKLSAqIEBvbWFwX2NoaXA6IHJlcHJlc2VudHMgdGhlIE9NQVAgY2hpcCB0eXBlcyBjb250YWluaW5nIHRoaXMgcHdyZG0KLSAqIEBwcmNtX29mZnM6IHRoZSBhZGRyZXNzIG9mZnNldCBmcm9tIENNX0JBU0UvUFJNX0JBU0UKLSAqIEBwd3JzdHM6IFBvc3NpYmxlIHBvd2VyZG9tYWluIHBvd2VyIHN0YXRlcwotICogQHB3cnN0c19sb2dpY19yZXQ6IFBvc3NpYmxlIGxvZ2ljIHBvd2VyIHN0YXRlcyB3aGVuIHB3cmRtIGluIFJFVEVOVElPTgotICogQGZsYWdzOiBQb3dlcmRvbWFpbiBmbGFncwotICogQGJhbmtzOiBOdW1iZXIgb2Ygc29mdHdhcmUtY29udHJvbGxhYmxlIG1lbW9yeSBiYW5rcyBpbiB0aGlzIHBvd2VyZG9tYWluCi0gKiBAcHdyc3RzX21lbV9yZXQ6IFBvc3NpYmxlIG1lbW9yeSBiYW5rIHB3cnN0YXRlcyB3aGVuIHB3cmRtIGluIFJFVEVOVElPTgotICogQHB3cnN0c19tZW1fb246IFBvc3NpYmxlIG1lbW9yeSBiYW5rIHB3cnN0YXRlcyB3aGVuIHB3cmRtIGluIE9OCi0gKiBAcHdyZG1fY2xrZG1zOiBDbG9ja2RvbWFpbnMgaW4gdGhpcyBwb3dlcmRvbWFpbgotICogQG5vZGU6IGxpc3RfaGVhZCBsaW5raW5nIGFsbCBwb3dlcmRvbWFpbnMKLSAqIEBzdGF0ZToKLSAqIEBzdGF0ZV9jb3VudGVyOgotICogQHRpbWVyOgotICogQHN0YXRlX3RpbWVyOgotICovCi1zdHJ1Y3QgcG93ZXJkb21haW4gewotCWNvbnN0IGNoYXIgKm5hbWU7Ci0JY29uc3Qgc3RydWN0IG9tYXBfY2hpcF9pZCBvbWFwX2NoaXA7Ci0JY29uc3QgczE2IHByY21fb2ZmczsKLQljb25zdCB1OCBwd3JzdHM7Ci0JY29uc3QgdTggcHdyc3RzX2xvZ2ljX3JldDsKLQljb25zdCB1OCBmbGFnczsKLQljb25zdCB1OCBiYW5rczsKLQljb25zdCB1OCBwd3JzdHNfbWVtX3JldFtQV1JETV9NQVhfTUVNX0JBTktTXTsKLQljb25zdCB1OCBwd3JzdHNfbWVtX29uW1BXUkRNX01BWF9NRU1fQkFOS1NdOwotCXN0cnVjdCBjbG9ja2RvbWFpbiAqcHdyZG1fY2xrZG1zW1BXUkRNX01BWF9DTEtETVNdOwotCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKLQlpbnQgc3RhdGU7Ci0JdW5zaWduZWQgc3RhdGVfY291bnRlcltQV1JETV9NQVhfUFdSU1RTXTsKLQl1bnNpZ25lZCByZXRfbG9naWNfb2ZmX2NvdW50ZXI7Ci0JdW5zaWduZWQgcmV0X21lbV9vZmZfY291bnRlcltQV1JETV9NQVhfTUVNX0JBTktTXTsKLQotI2lmZGVmIENPTkZJR19QTV9ERUJVRwotCXM2NCB0aW1lcjsKLQlzNjQgc3RhdGVfdGltZXJbUFdSRE1fTUFYX1BXUlNUU107Ci0jZW5kaWYKLX07Ci0KLQotdm9pZCBwd3JkbV9pbml0KHN0cnVjdCBwb3dlcmRvbWFpbiAqKnB3cmRtX2xpc3QpOwotCi1zdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtX2xvb2t1cChjb25zdCBjaGFyICpuYW1lKTsKLQotaW50IHB3cmRtX2Zvcl9lYWNoKGludCAoKmZuKShzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCB2b2lkICp1c2VyKSwKLQkJCXZvaWQgKnVzZXIpOwotaW50IHB3cmRtX2Zvcl9lYWNoX25vbG9jayhpbnQgKCpmbikoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgdm9pZCAqdXNlciksCi0JCQl2b2lkICp1c2VyKTsKLQotaW50IHB3cmRtX2FkZF9jbGtkbShzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCBzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKTsKLWludCBwd3JkbV9kZWxfY2xrZG0oc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSk7Ci1pbnQgcHdyZG1fZm9yX2VhY2hfY2xrZG0oc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwKLQkJCSBpbnQgKCpmbikoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwKLQkJCQkgICBzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKSk7Ci0KLWludCBwd3JkbV9nZXRfbWVtX2JhbmtfY291bnQoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSk7Ci0KLWludCBwd3JkbV9zZXRfbmV4dF9wd3JzdChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCB1OCBwd3JzdCk7Ci1pbnQgcHdyZG1fcmVhZF9uZXh0X3B3cnN0KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pOwotaW50IHB3cmRtX3JlYWRfcHdyc3Qoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSk7Ci1pbnQgcHdyZG1fcmVhZF9wcmV2X3B3cnN0KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pOwotaW50IHB3cmRtX2NsZWFyX2FsbF9wcmV2X3B3cnN0KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pOwotCi1pbnQgcHdyZG1fc2V0X2xvZ2ljX3JldHN0KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0sIHU4IHB3cnN0KTsKLWludCBwd3JkbV9zZXRfbWVtX29uc3Qoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgdTggYmFuaywgdTggcHdyc3QpOwotaW50IHB3cmRtX3NldF9tZW1fcmV0c3Qoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgdTggYmFuaywgdTggcHdyc3QpOwotCi1pbnQgcHdyZG1fcmVhZF9sb2dpY19wd3JzdChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKTsKLWludCBwd3JkbV9yZWFkX3ByZXZfbG9naWNfcHdyc3Qoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSk7Ci1pbnQgcHdyZG1fcmVhZF9sb2dpY19yZXRzdChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKTsKLWludCBwd3JkbV9yZWFkX21lbV9wd3JzdChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCB1OCBiYW5rKTsKLWludCBwd3JkbV9yZWFkX3ByZXZfbWVtX3B3cnN0KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0sIHU4IGJhbmspOwotaW50IHB3cmRtX3JlYWRfbWVtX3JldHN0KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0sIHU4IGJhbmspOwotCi1pbnQgcHdyZG1fZW5hYmxlX2hkd3Jfc2FyKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pOwotaW50IHB3cmRtX2Rpc2FibGVfaGR3cl9zYXIoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSk7Ci1ib29sIHB3cmRtX2hhc19oZHdyX3NhcihzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKTsKLQotaW50IHB3cmRtX3dhaXRfdHJhbnNpdGlvbihzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKTsKLQotaW50IHB3cmRtX3N0YXRlX3N3aXRjaChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKTsKLWludCBwd3JkbV9jbGtkbV9zdGF0ZV9zd2l0Y2goc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSk7Ci1pbnQgcHdyZG1fcHJlX3RyYW5zaXRpb24odm9pZCk7Ci1pbnQgcHdyZG1fcG9zdF90cmFuc2l0aW9uKHZvaWQpOwotaW50IHB3cmRtX3NldF9sb3dwd3JzdGNoYW5nZShzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L3ByY20uaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvcHJjbS5oCmluZGV4IGFiNzc0NDIuLjJmZGY4YzggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvcHJjbS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvcHJjbS5oCkBAIC0xOCw2ICsxOCwxMCBAQAogICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICoKKyAqIFhYWCBUaGlzIGZpbGUgaXMgZGVwcmVjYXRlZC4gIFRoZSBQUkNNIGlzIGFuIE9NQVAyKy1vbmx5IHN1YnN5c3RlbSwKKyAqIHNvIHRoaXMgZmlsZSBkb2Vzbid0IGJlbG9uZyBpbiBwbGF0LW9tYXAvaW5jbHVkZS9wbGF0LiAgUGxlYXNlCisgKiBkbyBub3QgYWRkIGFueXRoaW5nIG5ldyB0byB0aGlzIGZpbGUuCiAgKi8KIAogI2lmbmRlZiBfX0FTTV9BUk1fQVJDSF9PTUFQX1BSQ01fSApAQCAtMjgsMjIgKzMyLDYgQEAKIGludCBvbWFwMl9jbV93YWl0X2lkbGVzdCh2b2lkIF9faW9tZW0gKnJlZywgdTMyIG1hc2ssIHU4IGlkbGVzdCwKIAkJCSBjb25zdCBjaGFyICpuYW1lKTsKIAotI2RlZmluZSBTVEFSVF9QQURDT05GX1NBVkUgMHgyCi0jZGVmaW5lIFBBRENPTkZfU0FWRV9ET05FICAweDEKLQotdm9pZCBvbWFwM19wcmNtX3NhdmVfY29udGV4dCh2b2lkKTsKLXZvaWQgb21hcDNfcHJjbV9yZXN0b3JlX2NvbnRleHQodm9pZCk7Ci0KLXUzMiBwcm1fcmVhZF9tb2RfcmVnKHMxNiBtb2R1bGUsIHUxNiBpZHgpOwotdm9pZCBwcm1fd3JpdGVfbW9kX3JlZyh1MzIgdmFsLCBzMTYgbW9kdWxlLCB1MTYgaWR4KTsKLXUzMiBwcm1fcm13X21vZF9yZWdfYml0cyh1MzIgbWFzaywgdTMyIGJpdHMsIHMxNiBtb2R1bGUsIHMxNiBpZHgpOwotdTMyIHBybV9yZWFkX21vZF9iaXRzX3NoaWZ0KHMxNiBkb21haW4sIHMxNiBpZHgsIHUzMiBtYXNrKTsKLXUzMiBvbWFwNF9wcm1fcmVhZF9iaXRzX3NoaWZ0KHZvaWQgX19pb21lbSAqcmVnLCB1MzIgbWFzayk7Ci11MzIgb21hcDRfcHJtX3Jtd19yZWdfYml0cyh1MzIgbWFzaywgdTMyIGJpdHMsIHZvaWQgX19pb21lbSAqcmVnKTsKLXUzMiBjbV9yZWFkX21vZF9yZWcoczE2IG1vZHVsZSwgdTE2IGlkeCk7Ci12b2lkIGNtX3dyaXRlX21vZF9yZWcodTMyIHZhbCwgczE2IG1vZHVsZSwgdTE2IGlkeCk7Ci11MzIgY21fcm13X21vZF9yZWdfYml0cyh1MzIgbWFzaywgdTMyIGJpdHMsIHMxNiBtb2R1bGUsIHMxNiBpZHgpOwotCiAjZW5kaWYKIAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L3NlcmlhbC5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9zZXJpYWwuaAppbmRleCAxOTE0NWY1Li5jZWM1ZDU2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L3NlcmlhbC5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvc2VyaWFsLmgKQEAgLTkzLDkgKzkzLDEyIEBACiAJCQl9KQogCiAjaWZuZGVmIF9fQVNTRU1CTEVSX18KKworc3RydWN0IG9tYXBfYm9hcmRfZGF0YTsKKwogZXh0ZXJuIHZvaWQgX19pbml0IG9tYXBfc2VyaWFsX2Vhcmx5X2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCBvbWFwX3NlcmlhbF9pbml0KHZvaWQpOwotZXh0ZXJuIHZvaWQgb21hcF9zZXJpYWxfaW5pdF9wb3J0KGludCBwb3J0KTsKK2V4dGVybiB2b2lkIG9tYXBfc2VyaWFsX2luaXRfcG9ydChzdHJ1Y3Qgb21hcF9ib2FyZF9kYXRhICpiZGF0YSk7CiBleHRlcm4gaW50IG9tYXBfdWFydF9jYW5fc2xlZXAodm9pZCk7CiBleHRlcm4gdm9pZCBvbWFwX3VhcnRfY2hlY2tfd2FrZXVwKHZvaWQpOwogZXh0ZXJuIHZvaWQgb21hcF91YXJ0X3ByZXBhcmVfc3VzcGVuZCh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvc21hcnRyZWZsZXguaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvc21hcnRyZWZsZXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTY4Yzg4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9zbWFydHJlZmxleC5oCkBAIC0wLDAgKzEsMjQ1IEBACisvKgorICogT01BUCBTbWFydHJlZmxleCBEZWZpbmVzIGFuZCBSb3V0aW5lcworICoKKyAqIEF1dGhvcjogVGhhcmEgR29waW5hdGgJPHRoYXJhQHRpLmNvbT4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIFRoYXJhIEdvcGluYXRoIDx0aGFyYUB0aS5jb20+CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uCisgKiBLYWxsZSBKb2tpbmllbWkKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIExlc2x5IEEgTSA8eDAwODA5NzBAdGkuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUk1fT01BUF9TTUFSVFJFRkxFWF9ICisjZGVmaW5lIF9fQVNNX0FSTV9PTUFQX1NNQVJUUkVGTEVYX0gKKworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPHBsYXQvdm9sdGFnZS5oPgorCisvKgorICogRGlmZmVyZW50IFNtYXJ0cmVmbGV4IElQcyB2ZXJzaW9uLiBUaGUgdjEgaXMgdGhlIDY1bm0gdmVyc2lvbiB1c2VkIGluCisgKiBPTUFQMzQzMC4gVGhlIHYyIGlzIHRoZSB1cGRhdGUgZm9yIHRoZSA0NW5tIHZlcnNpb24gb2YgdGhlIElQCisgKiB1c2VkIGluIE9NQVAzNjMwIGFuZCBPTUFQNDQzMAorICovCisjZGVmaW5lIFNSX1RZUEVfVjEJMQorI2RlZmluZSBTUl9UWVBFX1YyCTIKKworLyogU01BUlQgUkVGTEVYIFJFRyBBRERSRVNTIE9GRlNFVCAqLworI2RlZmluZSBTUkNPTkZJRwkJMHgwMAorI2RlZmluZSBTUlNUQVRVUwkJMHgwNAorI2RlZmluZSBTRU5WQUwJCQkweDA4CisjZGVmaW5lIFNFTk1JTgkJCTB4MEMKKyNkZWZpbmUgU0VOTUFYCQkJMHgxMAorI2RlZmluZSBTRU5BVkcJCQkweDE0CisjZGVmaW5lIEFWR1dFSUdIVAkJMHgxOAorI2RlZmluZSBOVkFMVUVSRUNJUFJPQ0FMCTB4MWMKKyNkZWZpbmUgU0VORVJST1JfVjEJCTB4MjAKKyNkZWZpbmUgRVJSQ09ORklHX1YxCQkweDI0CisjZGVmaW5lIElSUV9FT0kJCQkweDIwCisjZGVmaW5lIElSUVNUQVRVU19SQVcJCTB4MjQKKyNkZWZpbmUgSVJRU1RBVFVTCQkweDI4CisjZGVmaW5lIElSUUVOQUJMRV9TRVQJCTB4MkMKKyNkZWZpbmUgSVJRRU5BQkxFX0NMUgkJMHgzMAorI2RlZmluZSBTRU5FUlJPUl9WMgkJMHgzNAorI2RlZmluZSBFUlJDT05GSUdfVjIJCTB4MzgKKworLyogQml0L1NoaWZ0IFBvc2l0aW9ucyAqLworCisvKiBTUkNPTkZJRyAqLworI2RlZmluZSBTUkNPTkZJR19BQ0NVTURBVEFfU0hJRlQJMjIKKyNkZWZpbmUgU1JDT05GSUdfU1JDTEtMRU5HVEhfU0hJRlQJMTIKKyNkZWZpbmUgU1JDT05GSUdfU0VOTkVOQUJMRV9WMV9TSElGVAk1CisjZGVmaW5lIFNSQ09ORklHX1NFTlBFTkFCTEVfVjFfU0hJRlQJMworI2RlZmluZSBTUkNPTkZJR19TRU5ORU5BQkxFX1YyX1NISUZUCTEKKyNkZWZpbmUgU1JDT05GSUdfU0VOUEVOQUJMRV9WMl9TSElGVAkwCisjZGVmaW5lIFNSQ09ORklHX0NMS0NUUkxfU0hJRlQJCTAKKworI2RlZmluZSBTUkNPTkZJR19BQ0NVTURBVEFfTUFTSwkJKDB4M2ZmIDw8IDIyKQorCisjZGVmaW5lIFNSQ09ORklHX1NSRU5BQkxFCQlCSVQoMTEpCisjZGVmaW5lIFNSQ09ORklHX1NFTkVOQUJMRQkJQklUKDEwKQorI2RlZmluZSBTUkNPTkZJR19FUlJHRU5fRU4JCUJJVCg5KQorI2RlZmluZSBTUkNPTkZJR19NSU5NQVhBVkdfRU4JCUJJVCg4KQorI2RlZmluZSBTUkNPTkZJR19ERUxBWUNUUkwJCUJJVCgyKQorCisvKiBBVkdXRUlHSFQgKi8KKyNkZWZpbmUgQVZHV0VJR0hUX1NFTlBBVkdXRUlHSFRfU0hJRlQJMgorI2RlZmluZSBBVkdXRUlHSFRfU0VOTkFWR1dFSUdIVF9TSElGVAkwCisKKy8qIE5WQUxVRVJFQ0lQUk9DQUwgKi8KKyNkZWZpbmUgTlZBTFVFUkVDSVBST0NBTF9TRU5QR0FJTl9TSElGVAkyMAorI2RlZmluZSBOVkFMVUVSRUNJUFJPQ0FMX1NFTk5HQUlOX1NISUZUCTE2CisjZGVmaW5lIE5WQUxVRVJFQ0lQUk9DQUxfUk5TRU5QX1NISUZUCTgKKyNkZWZpbmUgTlZBTFVFUkVDSVBST0NBTF9STlNFTk5fU0hJRlQJMAorCisvKiBFUlJDT05GSUcgKi8KKyNkZWZpbmUgRVJSQ09ORklHX0VSUldFSUdIVF9TSElGVAkxNgorI2RlZmluZSBFUlJDT05GSUdfRVJSTUFYTElNSVRfU0hJRlQJOAorI2RlZmluZSBFUlJDT05GSUdfRVJSTUlOTElNSVRfU0hJRlQJMAorCisjZGVmaW5lIFNSX0VSUldFSUdIVF9NQVNLCQkoMHgwNyA8PCAxNikKKyNkZWZpbmUgU1JfRVJSTUFYTElNSVRfTUFTSwkJKDB4ZmYgPDwgOCkKKyNkZWZpbmUgU1JfRVJSTUlOTElNSVRfTUFTSwkJKDB4ZmYgPDwgMCkKKworI2RlZmluZSBFUlJDT05GSUdfVlBCT1VORElOVEVOX1YxCUJJVCgzMSkKKyNkZWZpbmUgRVJSQ09ORklHX1ZQQk9VTkRJTlRTVF9WMQlCSVQoMzApCisjZGVmaW5lCUVSUkNPTkZJR19NQ1VBQ0NVTUlOVEVOCQlCSVQoMjkpCisjZGVmaW5lIEVSUkNPTkZJR19NQ1VBQ0NVTUlOVFNUCQlCSVQoMjgpCisjZGVmaW5lCUVSUkNPTkZJR19NQ1VWQUxJRElOVEVOCQlCSVQoMjcpCisjZGVmaW5lIEVSUkNPTkZJR19NQ1VWQUxJRElOVFNUCQlCSVQoMjYpCisjZGVmaW5lIEVSUkNPTkZJR19NQ1VCT1VORElOVEVOCQlCSVQoMjUpCisjZGVmaW5lCUVSUkNPTkZJR19NQ1VCT1VORElOVFNUCQlCSVQoMjQpCisjZGVmaW5lCUVSUkNPTkZJR19NQ1VESVNBQ0tJTlRFTglCSVQoMjMpCisjZGVmaW5lIEVSUkNPTkZJR19WUEJPVU5ESU5UU1RfVjIJQklUKDIzKQorI2RlZmluZSBFUlJDT05GSUdfTUNVRElTQUNLSU5UU1QJQklUKDIyKQorI2RlZmluZSBFUlJDT05GSUdfVlBCT1VORElOVEVOX1YyCUJJVCgyMikKKworI2RlZmluZSBFUlJDT05GSUdfU1RBVFVTX1YxX01BU0sJKEVSUkNPTkZJR19WUEJPVU5ESU5UU1RfVjEgfCBcCisJCQkJCUVSUkNPTkZJR19NQ1VBQ0NVTUlOVFNUIHwgXAorCQkJCQlFUlJDT05GSUdfTUNVVkFMSURJTlRTVCB8IFwKKwkJCQkJRVJSQ09ORklHX01DVUJPVU5ESU5UU1QgfCBcCisJCQkJCUVSUkNPTkZJR19NQ1VESVNBQ0tJTlRTVCkKKy8qIElSUVNUQVRVUyAqLworI2RlZmluZSBJUlFTVEFUVVNfTUNVQUNDVU1JTlQJCUJJVCgzKQorI2RlZmluZSBJUlFTVEFUVVNfTUNWQUxJRElOVAkJQklUKDIpCisjZGVmaW5lIElSUVNUQVRVU19NQ0JPVU5EU0lOVAkJQklUKDEpCisjZGVmaW5lIElSUVNUQVRVU19NQ1VESVNBQkxFQUNLSU5UCUJJVCgwKQorCisvKiBJUlFFTkFCTEVfU0VUIGFuZCBJUlFFTkFCTEVfQ0xFQVIgKi8KKyNkZWZpbmUgSVJRRU5BQkxFX01DVUFDQ1VNSU5UCQlCSVQoMykKKyNkZWZpbmUgSVJRRU5BQkxFX01DVVZBTElESU5UCQlCSVQoMikKKyNkZWZpbmUgSVJRRU5BQkxFX01DVUJPVU5EU0lOVAkJQklUKDEpCisjZGVmaW5lIElSUUVOQUJMRV9NQ1VESVNBQkxFQUNLSU5UCUJJVCgwKQorCisvKiBDb21tb24gQml0IHZhbHVlcyAqLworCisjZGVmaW5lIFNSQ0xLTEVOR1RIXzEyTUhaX1NZU0NMSwkweDNjCisjZGVmaW5lIFNSQ0xLTEVOR1RIXzEzTUhaX1NZU0NMSwkweDQxCisjZGVmaW5lIFNSQ0xLTEVOR1RIXzE5TUhaX1NZU0NMSwkweDYwCisjZGVmaW5lIFNSQ0xLTEVOR1RIXzI2TUhaX1NZU0NMSwkweDgyCisjZGVmaW5lIFNSQ0xLTEVOR1RIXzM4TUhaX1NZU0NMSwkweEMwCisKKy8qCisgKiAzNDMwIHNwZWNpZmljIHZhbHVlcy4gTWF5YmUgdGhlc2Ugc2hvdWxkIGJlIHBhc3NlZCBmcm9tIGJvYXJkIGZpbGUgb3IKKyAqIHBtaWMgc3RydWN0dXJlcy4KKyAqLworI2RlZmluZSBPTUFQMzQzMF9TUl9BQ0NVTURBVEEJCTB4MWY0CisKKyNkZWZpbmUgT01BUDM0MzBfU1IxX1NFTlBBVkdXRUlHSFQJMHgwMworI2RlZmluZSBPTUFQMzQzMF9TUjFfU0VOTkFWR1dFSUdIVAkweDAzCisKKyNkZWZpbmUgT01BUDM0MzBfU1IyX1NFTlBBVkdXRUlHSFQJMHgwMQorI2RlZmluZSBPTUFQMzQzMF9TUjJfU0VOTkFWR1dFSUdIVAkweDAxCisKKyNkZWZpbmUgT01BUDM0MzBfU1JfRVJSV0VJR0hUCQkweDA0CisjZGVmaW5lIE9NQVAzNDMwX1NSX0VSUk1BWExJTUlUCQkweDAyCisKKy8qKgorICogc3RydWN0IG9tYXBfc3JfcG1pY19kYXRhIC0gU3RydWN1dHJlIHRvIGJlIHBvcHVsYXRlZCBieSBwbWljIGNvZGUgdG8gcGFzcworICoJCQkJcG1pYyBzcGVjaWZpYyBpbmZvIHRvIHNtYXJ0cmVmbGV4IGRyaXZlcgorICoKKyAqIEBzcl9wbWljX2luaXQ6CUFQSSB0byBpbml0aWFsaXplIHNtYXJ0cmVmbGV4IG9uIHRoZSBQTUlDIHNpZGUuCisgKi8KK3N0cnVjdCBvbWFwX3NyX3BtaWNfZGF0YSB7CisJdm9pZCAoKnNyX3BtaWNfaW5pdCkgKHZvaWQpOworfTsKKworI2lmZGVmIENPTkZJR19PTUFQX1NNQVJUUkVGTEVYCisvKgorICogVGhlIHNtYXJ0IHJlZmxleCBkcml2ZXIgc3VwcG9ydHMgQ0xBU1MxIENMQVNTMiBhbmQgQ0xBU1MzIFNSLgorICogVGhlIHNtYXJ0cmVmbGV4IGNsYXNzIGRyaXZlciBzaG91bGQgcGFzcyB0aGUgY2xhc3MgdHlwZS4KKyAqIFNob3VsZCBiZSB1c2VkIHRvIHBvcHVsYXRlIHRoZSBjbGFzc190eXBlIGZpZWxkIG9mIHRoZQorICogb21hcF9zbWFydHJlZmxleF9jbGFzc19kYXRhIHN0cnVjdHVyZS4KKyAqLworI2RlZmluZSBTUl9DTEFTUzEJMHgxCisjZGVmaW5lIFNSX0NMQVNTMgkweDIKKyNkZWZpbmUgU1JfQ0xBU1MzCTB4MworCisvKioKKyAqIHN0cnVjdCBvbWFwX3NyX2NsYXNzX2RhdGEgLSBTbWFydHJlZmxleCBjbGFzcyBkcml2ZXIgaW5mbworICoKKyAqIEBlbmFibGU6CQlBUEkgdG8gZW5hYmxlIGEgcGFydGljdWxhciBjbGFzcyBzbWFhcnRyZWZsZXguCisgKiBAZGlzYWJsZToJCUFQSSB0byBkaXNhYmxlIGEgcGFydGljdWxhciBjbGFzcyBzbWFydHJlZmxleC4KKyAqIEBjb25maWd1cmU6CQlBUEkgdG8gY29uZmlndXJlIGEgcGFydGljdWxhciBjbGFzcyBzbWFydHJlZmxleC4KKyAqIEBub3RpZnk6CQlBUEkgdG8gbm90aWZ5IHRoZSBjbGFzcyBkcml2ZXIgYWJvdXQgYW4gZXZlbnQgaW4gU1IuCisgKgkJCU5vdCBuZWVkZWQgZm9yIGNsYXNzMy4KKyAqIEBub3RpZnlfZmxhZ3M6CXNwZWNpZnkgdGhlIGV2ZW50cyB0byBiZSBub3RpZmllZCB0byB0aGUgY2xhc3MgZHJpdmVyCisgKiBAY2xhc3NfdHlwZToJCXNwZWNpZnkgd2hpY2ggc21hcnRyZWZsZXggY2xhc3MuCisgKgkJCUNhbiBiZSB1c2VkIGJ5IHRoZSBTUiBkcml2ZXIgdG8gdGFrZSBhbnkgY2xhc3MKKyAqCQkJYmFzZWQgZGVjaXNpb25zLgorICovCitzdHJ1Y3Qgb21hcF9zcl9jbGFzc19kYXRhIHsKKwlpbnQgKCplbmFibGUpKHN0cnVjdCB2b2x0YWdlZG9tYWluICp2b2x0ZG0pOworCWludCAoKmRpc2FibGUpKHN0cnVjdCB2b2x0YWdlZG9tYWluICp2b2x0ZG0sIGludCBpc192b2x0X3Jlc2V0KTsKKwlpbnQgKCpjb25maWd1cmUpKHN0cnVjdCB2b2x0YWdlZG9tYWluICp2b2x0ZG0pOworCWludCAoKm5vdGlmeSkoc3RydWN0IHZvbHRhZ2Vkb21haW4gKnZvbHRkbSwgdTMyIHN0YXR1cyk7CisJdTggbm90aWZ5X2ZsYWdzOworCXU4IGNsYXNzX3R5cGU7Cit9OworCisvKioKKyAqIHN0cnVjdCBvbWFwX3NyX252YWx1ZV90YWJsZQktIFNtYXJ0cmVmbGV4IG4tdGFyZ2V0IHZhbHVlIGluZm8KKyAqCisgKiBAZWZ1c2Vfb2ZmczoJVGhlIG9mZnNldCBvZiB0aGUgZWZ1c2Ugd2hlcmUgbi10YXJnZXQgdmFsdWVzIGFyZSBzdG9yZWQuCisgKiBAbnZhbHVlOglUaGUgbi10YXJnZXQgdmFsdWUuCisgKi8KK3N0cnVjdCBvbWFwX3NyX252YWx1ZV90YWJsZSB7CisJdTMyIGVmdXNlX29mZnM7CisJdTMyIG52YWx1ZTsKK307CisKKy8qKgorICogc3RydWN0IG9tYXBfc3JfZGF0YSAtIFNtYXJ0cmVmbGV4IHBsYXRmb3JtIGRhdGEuCisgKgorICogQGlwX3R5cGU6CQlTbWFydHJlZmxleCBJUCB0eXBlLgorICogQHNlbnBfbW9kOgkJU0VOUEVOQUJMRSB2YWx1ZSBmb3IgdGhlIHNyCisgKiBAc2Vubl9tb2Q6CQlTRU5ORU5BQkxFIHZhbHVlIGZvciBzcgorICogQG52YWx1ZV9jb3VudDoJTnVtYmVyIG9mIGRpc3RpbmN0IG52YWx1ZXMgaW4gdGhlIG52YWx1ZSB0YWJsZQorICogQGVuYWJsZV9vbl9pbml0Ogl3aGV0aGVyIHRoaXMgc3IgbW9kdWxlIG5lZWRzIHRvIGVuYWJsZWQgYXQKKyAqCQkJYm9vdCB1cCBvciBub3QuCisgKiBAbnZhbHVlX3RhYmxlOgl0YWJsZSBjb250YWluaW5nIHRoZSAgZWZ1c2Ugb2Zmc2V0cyBhbmQgbnZhbHVlcworICoJCQljb3JyZXNwb25kaW5nIHRvIHRoZW0uCisgKiBAdm9sdGRtOgkJUG9pbnRlciB0byB0aGUgdm9sdGFnZSBkb21haW4gYXNzb2NpYXRlZCB3aXRoIHRoZSBTUgorICovCitzdHJ1Y3Qgb21hcF9zcl9kYXRhIHsKKwlpbnQJCQkJaXBfdHlwZTsKKwl1MzIJCQkJc2VucF9tb2Q7CisJdTMyCQkJCXNlbm5fbW9kOworCWludAkJCQludmFsdWVfY291bnQ7CisJYm9vbAkJCQllbmFibGVfb25faW5pdDsKKwlzdHJ1Y3Qgb21hcF9zcl9udmFsdWVfdGFibGUJKm52YWx1ZV90YWJsZTsKKwlzdHJ1Y3Qgdm9sdGFnZWRvbWFpbgkJKnZvbHRkbTsKK307CisKKy8qIFNtYXJ0cmVmbGV4IG1vZHVsZSBlbmFibGUvZGlzYWJsZSBpbnRlcmZhY2UgKi8KK3ZvaWQgb21hcF9zcl9lbmFibGUoc3RydWN0IHZvbHRhZ2Vkb21haW4gKnZvbHRkbSk7Cit2b2lkIG9tYXBfc3JfZGlzYWJsZShzdHJ1Y3Qgdm9sdGFnZWRvbWFpbiAqdm9sdGRtKTsKK3ZvaWQgb21hcF9zcl9kaXNhYmxlX3Jlc2V0X3ZvbHQoc3RydWN0IHZvbHRhZ2Vkb21haW4gKnZvbHRkbSk7CisKKy8qIEFQSSB0byByZWdpc3RlciB0aGUgcG1pYyBzcGVjaWZpYyBkYXRhIHdpdGggdGhlIHNtYXJ0cmVmbGV4IGRyaXZlci4gKi8KK3ZvaWQgb21hcF9zcl9yZWdpc3Rlcl9wbWljKHN0cnVjdCBvbWFwX3NyX3BtaWNfZGF0YSAqcG1pY19kYXRhKTsKKworLyogU21hcnRyZWZsZXggZHJpdmVyIGhvb2tzIHRvIGJlIGNhbGxlZCBmcm9tIFNtYXJ0cmVmbGV4IGNsYXNzIGRyaXZlciAqLworaW50IHNyX2VuYWJsZShzdHJ1Y3Qgdm9sdGFnZWRvbWFpbiAqdm9sdGRtLCB1bnNpZ25lZCBsb25nIHZvbHQpOwordm9pZCBzcl9kaXNhYmxlKHN0cnVjdCB2b2x0YWdlZG9tYWluICp2b2x0ZG0pOworaW50IHNyX2NvbmZpZ3VyZV9lcnJnZW4oc3RydWN0IHZvbHRhZ2Vkb21haW4gKnZvbHRkbSk7CitpbnQgc3JfY29uZmlndXJlX21pbm1heChzdHJ1Y3Qgdm9sdGFnZWRvbWFpbiAqdm9sdGRtKTsKKworLyogQVBJIHRvIHJlZ2lzdGVyIHRoZSBzbWFydHJlZmxleCBjbGFzcyBkcml2ZXIgd2l0aCB0aGUgc21hcnRyZWZsZXggZHJpdmVyICovCitpbnQgc3JfcmVnaXN0ZXJfY2xhc3Moc3RydWN0IG9tYXBfc3JfY2xhc3NfZGF0YSAqY2xhc3NfZGF0YSk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIG9tYXBfc3JfZW5hYmxlKHN0cnVjdCB2b2x0YWdlZG9tYWluICp2b2x0ZG0pIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgb21hcF9zcl9kaXNhYmxlKHN0cnVjdCB2b2x0YWdlZG9tYWluICp2b2x0ZG0pIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgb21hcF9zcl9kaXNhYmxlX3Jlc2V0X3ZvbHQoCisJCXN0cnVjdCB2b2x0YWdlZG9tYWluICp2b2x0ZG0pIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgb21hcF9zcl9yZWdpc3Rlcl9wbWljKAorCQlzdHJ1Y3Qgb21hcF9zcl9wbWljX2RhdGEgKnBtaWNfZGF0YSkge30KKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L3NtcC5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9zbXAuaAppbmRleCBlY2Q2YTQ4Li43YTEwMjU3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L3NtcC5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvc21wLmgKQEAgLTE4LDcgKzE4LDYgQEAKICNkZWZpbmUgT01BUF9BUkNIX1NNUF9ICiAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvZ2ljLmg+Ci0jaW5jbHVkZSA8YXNtL3NtcF9tcGlkci5oPgogCiAvKiBOZWVkZWQgZm9yIHNlY29uZGFyeSBjb3JlIGJvb3QgKi8KIGV4dGVybiB2b2lkIG9tYXBfc2Vjb25kYXJ5X3N0YXJ0dXAodm9pZCk7CkBAIC0yOSw5ICsyOCw5IEBACiAvKgogICogV2UgdXNlIFNvZnQgSVJRMSBhcyB0aGUgSVBJCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBzbXBfY3Jvc3NfY2FsbChjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaykKK3N0YXRpYyBpbmxpbmUgdm9pZCBzbXBfY3Jvc3NfY2FsbChjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywgaW50IGlwaSkKIHsKLQlnaWNfcmFpc2Vfc29mdGlycShtYXNrLCAxKTsKKwlnaWNfcmFpc2Vfc29mdGlycShtYXNrLCBpcGkpOwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvc3JhbS5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9zcmFtLmgKaW5kZXggNTkwNTEwMC4uOTk2N2Q1ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9zcmFtLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9zcmFtLmgKQEAgLTExLDYgKzExLDcgQEAKICNpZm5kZWYgX19BUkNIX0FSTV9PTUFQX1NSQU1fSAogI2RlZmluZSBfX0FSQ0hfQVJNX09NQVBfU1JBTV9ICiAKKyNpZm5kZWYgX19BU1NFTUJMWV9fCiBleHRlcm4gdm9pZCAqIG9tYXBfc3JhbV9wdXNoKHZvaWQgKiBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKTsKIGV4dGVybiB2b2lkIG9tYXBfc3JhbV9yZXByb2dyYW1fY2xvY2sodTMyIGRwbGxjdGwsIHUzMiBja2N0bCk7CiAKQEAgLTc0LDQgKzc1LDE0IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgb21hcF9wdXNoX3NyYW1faWRsZSh2b2lkKSB7fQogI2VuZGlmIC8qIENPTkZJR19QTSAqLwogCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKy8qCisgKiBPTUFQMis6IGRlZmluZSB0aGUgU1JBTSBQQSBhZGRyZXNzZXMuCisgKiBVc2VkIGJ5IHRoZSBTUkFNIG1hbmFnZW1lbnQgY29kZSBhbmQgdGhlIGlkbGUgc2xlZXAgY29kZS4KKyAqLworI2RlZmluZSBPTUFQMl9TUkFNX1BBCQkweDQwMjAwMDAwCisjZGVmaW5lIE9NQVAzX1NSQU1fUEEgICAgICAgICAgIDB4NDAyMDAwMDAKKyNkZWZpbmUgT01BUDRfU1JBTV9QQQkJMHg0MDMwMDAwMAorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvdW5jb21wcmVzcy5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC91bmNvbXByZXNzLmgKaW5kZXggOTAzNmUzNy4uYWQ5OGI4NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC91bmNvbXByZXNzLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC91bmNvbXByZXNzLmgKQEAgLTE0NSw4ICsxNDUsMTEgQEAKIAkJLyogb21hcDMgYmFzZWQgYm9hcmRzIHVzaW5nIFVBUlQzICovCiAJCURFQlVHX0xMX09NQVAzKDMsIGNtX3QzNSk7CiAJCURFQlVHX0xMX09NQVAzKDMsIGNtX3QzNTE3KTsKKwkJREVCVUdfTExfT01BUDMoMywgY3JhbmVib2FyZCk7CisJCURFQlVHX0xMX09NQVAzKDMsIGRldmtpdDgwMDApOwogCQlERUJVR19MTF9PTUFQMygzLCBpZ2VwMDAyMCk7CiAJCURFQlVHX0xMX09NQVAzKDMsIGlnZXAwMDMwKTsKKwkJREVCVUdfTExfT01BUDMoMywgbm9raWFfcm02ODApOwogCQlERUJVR19MTF9PTUFQMygzLCBub2tpYV9yeDUxKTsKIAkJREVCVUdfTExfT01BUDMoMywgb21hcDM1MTdldm0pOwogCQlERUJVR19MTF9PTUFQMygzLCBvbWFwM19iZWFnbGUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC91c2IuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvdXNiLmgKaW5kZXggNTljN2ZlNy4uNDUwYTMzMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC91c2IuaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L3VzYi5oCkBAIC0xMSw2ICsxMSw3IEBACiAJRUhDSV9IQ0RfT01BUF9NT0RFX1VOS05PV04sCiAJRUhDSV9IQ0RfT01BUF9NT0RFX1BIWSwKIAlFSENJX0hDRF9PTUFQX01PREVfVExMLAorCUVIQ0lfSENEX09NQVBfTU9ERV9IU0lDLAogfTsKIAogZW51bSBvaGNpX29tYXAzX3BvcnRfbW9kZSB7CkBAIC02OSw2ICs3MCwxMCBAQAogCXU4CW1vZGU7CiAJdTE2CXBvd2VyOwogCXVuc2lnbmVkIGV4dHZidXM6MTsKKwl2b2lkCSgqc2V0X3BoeV9wb3dlcikodTggb24pOworCXZvaWQJKCpjbGVhcl9pcnEpKHZvaWQpOworCXZvaWQJKCpzZXRfbW9kZSkodTggbW9kZSk7CisJdm9pZAkoKnJlc2V0KSh2b2lkKTsKIH07CiAKIGVudW0gbXVzYl9pbnRlcmZhY2UgICAge01VU0JfSU5URVJGQUNFX1VMUEksIE1VU0JfSU5URVJGQUNFX1VUTUl9OwpAQCAtNzksNiArODQsMTEgQEAKIAogZXh0ZXJuIHZvaWQgdXNiX29oY2lfaW5pdChjb25zdCBzdHJ1Y3Qgb2hjaV9oY2Rfb21hcF9wbGF0Zm9ybV9kYXRhICpwZGF0YSk7CiAKK2V4dGVybiBpbnQgb21hcDQ0MzBfcGh5X3Bvd2VyKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IElELCBpbnQgb24pOworZXh0ZXJuIGludCBvbWFwNDQzMF9waHlfc2V0X2NsayhzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBvbik7CitleHRlcm4gaW50IG9tYXA0NDMwX3BoeV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldik7CitleHRlcm4gaW50IG9tYXA0NDMwX3BoeV9leGl0KHN0cnVjdCBkZXZpY2UgKmRldik7CisKICNlbmRpZgogCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvdm9sdGFnZS5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC92b2x0YWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZmMTIzMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvdm9sdGFnZS5oCkBAIC0wLDAgKzEsMTQ2IEBACisvKgorICogT01BUCBWb2x0YWdlIE1hbmFnZW1lbnQgUm91dGluZXMKKyAqCisgKiBBdXRob3I6IFRoYXJhIEdvcGluYXRoCTx0aGFyYUB0aS5jb20+CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKiBUaGFyYSBHb3BpbmF0aCA8dGhhcmFAdGkuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfVk9MVEFHRV9ICisjZGVmaW5lIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9WT0xUQUdFX0gKKworI2RlZmluZSBWT0xUU0NBTEVfVlBGT1JDRVVQREFURQkJMQorI2RlZmluZSBWT0xUU0NBTEVfVkNCWVBBU1MJCTIKKworLyoKKyAqIE9NQVAzIEdFTkVSSUMgc2V0dXAgdGltZXMuIFJldmlzaXQgdG8gc2VlIGlmIHRoZXNlIG5lZWRzIHRvIGJlCisgKiBwYXNzZWQgZnJvbSBib2FyZCBvciBQTUlDIGZpbGUKKyAqLworI2RlZmluZSBPTUFQM19DTEtTRVRVUAkJMHhmZgorI2RlZmluZSBPTUFQM19WT0xUT0ZGU0VUCTB4ZmYKKyNkZWZpbmUgT01BUDNfVk9MVFNFVFVQMgkweGZmCisKKy8qIFZvbHRhZ2UgdmFsdWUgZGVmaW5lcyAqLworI2RlZmluZSBPTUFQMzQzMF9WRERfTVBVX09QUDFfVVYJCTk3NTAwMAorI2RlZmluZSBPTUFQMzQzMF9WRERfTVBVX09QUDJfVVYJCTEwNzUwMDAKKyNkZWZpbmUgT01BUDM0MzBfVkREX01QVV9PUFAzX1VWCQkxMjAwMDAwCisjZGVmaW5lIE9NQVAzNDMwX1ZERF9NUFVfT1BQNF9VVgkJMTI3MDAwMAorI2RlZmluZSBPTUFQMzQzMF9WRERfTVBVX09QUDVfVVYJCTEzNTAwMDAKKworI2RlZmluZSBPTUFQMzQzMF9WRERfQ09SRV9PUFAxX1VWCQk5NzUwMDAKKyNkZWZpbmUgT01BUDM0MzBfVkREX0NPUkVfT1BQMl9VVgkJMTA1MDAwMAorI2RlZmluZSBPTUFQMzQzMF9WRERfQ09SRV9PUFAzX1VWCQkxMTUwMDAwCisKKyNkZWZpbmUgT01BUDM2MzBfVkREX01QVV9PUFA1MF9VVgkJMTAxMjUwMAorI2RlZmluZSBPTUFQMzYzMF9WRERfTVBVX09QUDEwMF9VVgkJMTIwMDAwMAorI2RlZmluZSBPTUFQMzYzMF9WRERfTVBVX09QUDEyMF9VVgkJMTMyNTAwMAorI2RlZmluZSBPTUFQMzYzMF9WRERfTVBVX09QUDFHX1VWCQkxMzc1MDAwCisKKyNkZWZpbmUgT01BUDM2MzBfVkREX0NPUkVfT1BQNTBfVVYJCTEwMDAwMDAKKyNkZWZpbmUgT01BUDM2MzBfVkREX0NPUkVfT1BQMTAwX1VWCQkxMjAwMDAwCisKKyNkZWZpbmUgT01BUDQ0MzBfVkREX01QVV9PUFA1MF9VVgkJOTMwMDAwCisjZGVmaW5lIE9NQVA0NDMwX1ZERF9NUFVfT1BQMTAwX1VWCQkxMTAwMDAwCisjZGVmaW5lIE9NQVA0NDMwX1ZERF9NUFVfT1BQVFVSQk9fVVYJCTEyNjAwMDAKKyNkZWZpbmUgT01BUDQ0MzBfVkREX01QVV9PUFBOSVRST19VVgkJMTM1MDAwMAorCisjZGVmaW5lIE9NQVA0NDMwX1ZERF9JVkFfT1BQNTBfVVYJCTkzMDAwMAorI2RlZmluZSBPTUFQNDQzMF9WRERfSVZBX09QUDEwMF9VVgkJMTEwMDAwMAorI2RlZmluZSBPTUFQNDQzMF9WRERfSVZBX09QUFRVUkJPX1VWCQkxMjYwMDAwCisKKyNkZWZpbmUgT01BUDQ0MzBfVkREX0NPUkVfT1BQNTBfVVYJCTkzMDAwMAorI2RlZmluZSBPTUFQNDQzMF9WRERfQ09SRV9PUFAxMDBfVVYJCTExMDAwMDAKKworLyoqCisgKiBzdHJ1Y3Qgdm9sdGFnZWRvbWFpbiAtIG9tYXAgdm9sdGFnZSBkb21haW4gZ2xvYmFsIHN0cnVjdHVyZS4KKyAqIEBuYW1lOglOYW1lIG9mIHRoZSB2b2x0YWdlIGRvbWFpbiB3aGljaCBjYW4gYmUgdXNlZCBhcyBhIHVuaXF1ZQorICoJCWlkZW50aWZpZXIuCisgKi8KK3N0cnVjdCB2b2x0YWdlZG9tYWluIHsKKwljaGFyICpuYW1lOworfTsKKworLyogQVBJIHRvIGdldCB0aGUgdm9sdGFnZWRvbWFpbiBwb2ludGVyICovCitzdHJ1Y3Qgdm9sdGFnZWRvbWFpbiAqb21hcF92b2x0YWdlX2RvbWFpbl9sb29rdXAoY2hhciAqbmFtZSk7CisKKy8qKgorICogc3RydWN0IG9tYXBfdm9sdF9kYXRhIC0gT21hcCB2b2x0YWdlIHNwZWNpZmljIGRhdGEuCisgKiBAdm9sdGFnZV9ub21pbmFsOglUaGUgcG9zc2libGUgdm9sdGFnZSB2YWx1ZSBpbiB1VgorICogQHNyX2VmdXNlX29mZnM6CVRoZSBvZmZzZXQgb2YgdGhlIGVmdXNlIHJlZ2lzdGVyKGZyb20gc3lzdGVtCisgKgkJCWNvbnRyb2wgbW9kdWxlIGJhc2UgYWRkcmVzcykgZnJvbSB3aGVyZSB0byByZWFkCisgKgkJCXRoZSBuLXRhcmdldCB2YWx1ZSBmb3IgdGhlIHNtYXJ0cmVmbGV4IG1vZHVsZS4KKyAqIEBzcl9lcnJtaW5saW1pdDoJRXJyb3IgbWluIGxpbWl0IHZhbHVlIGZvciBzbWFydHJlZmxleC4gVGhpcyB2YWx1ZQorICoJCQlkaWZmZXJzIGF0IGRpZmZlcm5ldCBvcHAgYW5kIHRodXMgaXMgbGlua2VkCisgKgkJCXdpdGggdm9sdGFnZS4KKyAqIEB2cF9lcnJvcmdhaW46CUVycm9yIGdhaW4gdmFsdWUgZm9yIHRoZSB2b2x0YWdlIHByb2Nlc3Nvci4gVGhpcworICoJCQlmaWVsZCBhbHNvIGRpZmZlcnMgYWNjb3JkaW5nIHRvIHRoZSB2b2x0YWdlL29wcC4KKyAqLworc3RydWN0IG9tYXBfdm9sdF9kYXRhIHsKKwl1MzIJdm9sdF9ub21pbmFsOworCXUzMglzcl9lZnVzZV9vZmZzOworCXU4CXNyX2Vycm1pbmxpbWl0OworCXU4CXZwX2VycmdhaW47Cit9OworCisvKioKKyAqIHN0cnVjdCBvbWFwX3ZvbHRfcG1pY19pbmZvIC0gUE1JQyBzcGVjaWZpYyBkYXRhIHJlcXVpcmVkIGJ5IHZvbHRhZ2UgZHJpdmVyLgorICogQHNsZXdfcmF0ZToJUE1JQyBzbGV3IHJhdGUgKGluIHV2L3VzKQorICogQHN0ZXBfc2l6ZToJUE1JQyB2b2x0YWdlIHN0ZXAgc2l6ZSAoaW4gdXYpCisgKiBAdnNlbF90b191djoJUE1JQyBBUEkgdG8gY29udmVydCB2c2VsIHZhbHVlIHRvIGFjdHVhbCB2b2x0YWdlIGluIHVWLgorICogQHV2X3RvX3ZzZWw6CVBNSUMgQVBJIHRvIGNvbnZlcnQgdm9sdGFnZSBpbiB1ViB0byB2c2VsIHZhbHVlLgorICovCitzdHJ1Y3Qgb21hcF92b2x0X3BtaWNfaW5mbyB7CisJaW50IHNsZXdfcmF0ZTsKKwlpbnQgc3RlcF9zaXplOworCXUzMiBvbl92b2x0OworCXUzMiBvbmxwX3ZvbHQ7CisJdTMyIHJldF92b2x0OworCXUzMiBvZmZfdm9sdDsKKwl1MTYgdm9sdF9zZXR1cF90aW1lOworCXU4IHZwX2Vycm9yb2Zmc2V0OworCXU4IHZwX3ZzdGVwbWluOworCXU4IHZwX3ZzdGVwbWF4OworCXU4IHZwX3ZkZG1pbjsKKwl1OCB2cF92ZGRtYXg7CisJdTggdnBfdGltZW91dF91czsKKwl1OCBpMmNfc2xhdmVfYWRkcjsKKwl1OCBwbWljX3JlZzsKKwl1bnNpZ25lZCBsb25nICgqdnNlbF90b191dikgKGNvbnN0IHU4IHZzZWwpOworCXU4ICgqdXZfdG9fdnNlbCkgKHVuc2lnbmVkIGxvbmcgdVYpOworfTsKKwordW5zaWduZWQgbG9uZyBvbWFwX3ZwX2dldF9jdXJyX3ZvbHQoc3RydWN0IHZvbHRhZ2Vkb21haW4gKnZvbHRkbSk7Cit2b2lkIG9tYXBfdnBfZW5hYmxlKHN0cnVjdCB2b2x0YWdlZG9tYWluICp2b2x0ZG0pOwordm9pZCBvbWFwX3ZwX2Rpc2FibGUoc3RydWN0IHZvbHRhZ2Vkb21haW4gKnZvbHRkbSk7CitpbnQgb21hcF92b2x0YWdlX3NjYWxlX3ZkZChzdHJ1Y3Qgdm9sdGFnZWRvbWFpbiAqdm9sdGRtLAorCQl1bnNpZ25lZCBsb25nIHRhcmdldF92b2x0KTsKK3ZvaWQgb21hcF92b2x0YWdlX3Jlc2V0KHN0cnVjdCB2b2x0YWdlZG9tYWluICp2b2x0ZG0pOwordm9pZCBvbWFwX3ZvbHRhZ2VfZ2V0X3ZvbHR0YWJsZShzdHJ1Y3Qgdm9sdGFnZWRvbWFpbiAqdm9sdGRtLAorCQlzdHJ1Y3Qgb21hcF92b2x0X2RhdGEgKip2b2x0X2RhdGEpOworc3RydWN0IG9tYXBfdm9sdF9kYXRhICpvbWFwX3ZvbHRhZ2VfZ2V0X3ZvbHRkYXRhKHN0cnVjdCB2b2x0YWdlZG9tYWluICp2b2x0ZG0sCisJCXVuc2lnbmVkIGxvbmcgdm9sdCk7Cit1bnNpZ25lZCBsb25nIG9tYXBfdm9sdGFnZV9nZXRfbm9tX3ZvbHQoc3RydWN0IHZvbHRhZ2Vkb21haW4gKnZvbHRkbSk7CitzdHJ1Y3QgZGVudHJ5ICpvbWFwX3ZvbHRhZ2VfZ2V0X2RiZ2RpcihzdHJ1Y3Qgdm9sdGFnZWRvbWFpbiAqdm9sdGRtKTsKKyNpZmRlZiBDT05GSUdfUE0KK2ludCBvbWFwX3ZvbHRhZ2VfcmVnaXN0ZXJfcG1pYyhzdHJ1Y3Qgdm9sdGFnZWRvbWFpbiAqdm9sdGRtLAorCQlzdHJ1Y3Qgb21hcF92b2x0X3BtaWNfaW5mbyAqcG1pY19pbmZvKTsKK3ZvaWQgb21hcF9jaGFuZ2Vfdm9sdHNjYWxlX21ldGhvZChzdHJ1Y3Qgdm9sdGFnZWRvbWFpbiAqdm9sdGRtLAorCQlpbnQgdm9sdHNjYWxlX21ldGhvZCk7CitpbnQgb21hcF92b2x0YWdlX2xhdGVfaW5pdCh2b2lkKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBvbWFwX3ZvbHRhZ2VfcmVnaXN0ZXJfcG1pYyhzdHJ1Y3Qgdm9sdGFnZWRvbWFpbiAqdm9sdGRtLAorCQlzdHJ1Y3Qgb21hcF92b2x0X3BtaWNfaW5mbyAqcG1pY19pbmZvKSB7fQorc3RhdGljIGlubGluZSAgdm9pZCBvbWFwX2NoYW5nZV92b2x0c2NhbGVfbWV0aG9kKHN0cnVjdCB2b2x0YWdlZG9tYWluICp2b2x0ZG0sCisJCWludCB2b2x0c2NhbGVfbWV0aG9kKSB7fQorc3RhdGljIGlubGluZSBpbnQgb21hcF92b2x0YWdlX2xhdGVfaW5pdCh2b2lkKQoreworCXJldHVybiAtRUlOVkFMOworfQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2lvLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW8uYwppbmRleCBiMDA3OGNmLi5mMTI5NWZhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW8uYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW8uYwpAQCAtMTM2LDYxICsxMzYsMyBAQAogCQlfX2lvdW5tYXAoYWRkcik7CiB9CiBFWFBPUlRfU1lNQk9MKG9tYXBfaW91bm1hcCk7Ci0KLS8qCi0gKiBOT1RFOiBQbGVhc2UgdXNlIGlvcmVtYXAgKyBfX3Jhd19yZWFkL3dyaXRlIHdoZXJlIHBvc3NpYmxlIGluc3RlYWQgb2YgdGhlc2UKLSAqLwotCi11OCBvbWFwX3JlYWRiKHUzMiBwYSkKLXsKLQlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkpCi0JCXJldHVybiBfX3Jhd19yZWFkYihPTUFQMV9JT19BRERSRVNTKHBhKSk7Ci0JZWxzZQotCQlyZXR1cm4gX19yYXdfcmVhZGIoT01BUDJfTDRfSU9fQUREUkVTUyhwYSkpOwotfQotRVhQT1JUX1NZTUJPTChvbWFwX3JlYWRiKTsKLQotdTE2IG9tYXBfcmVhZHcodTMyIHBhKQotewotCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkKLQkJcmV0dXJuIF9fcmF3X3JlYWR3KE9NQVAxX0lPX0FERFJFU1MocGEpKTsKLQllbHNlCi0JCXJldHVybiBfX3Jhd19yZWFkdyhPTUFQMl9MNF9JT19BRERSRVNTKHBhKSk7Ci19Ci1FWFBPUlRfU1lNQk9MKG9tYXBfcmVhZHcpOwotCi11MzIgb21hcF9yZWFkbCh1MzIgcGEpCi17Ci0JaWYgKGNwdV9jbGFzc19pc19vbWFwMSgpKQotCQlyZXR1cm4gX19yYXdfcmVhZGwoT01BUDFfSU9fQUREUkVTUyhwYSkpOwotCWVsc2UKLQkJcmV0dXJuIF9fcmF3X3JlYWRsKE9NQVAyX0w0X0lPX0FERFJFU1MocGEpKTsKLX0KLUVYUE9SVF9TWU1CT0wob21hcF9yZWFkbCk7Ci0KLXZvaWQgb21hcF93cml0ZWIodTggdiwgdTMyIHBhKQotewotCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkKLQkJX19yYXdfd3JpdGViKHYsIE9NQVAxX0lPX0FERFJFU1MocGEpKTsKLQllbHNlCi0JCV9fcmF3X3dyaXRlYih2LCBPTUFQMl9MNF9JT19BRERSRVNTKHBhKSk7Ci19Ci1FWFBPUlRfU1lNQk9MKG9tYXBfd3JpdGViKTsKLQotdm9pZCBvbWFwX3dyaXRldyh1MTYgdiwgdTMyIHBhKQotewotCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkKLQkJX19yYXdfd3JpdGV3KHYsIE9NQVAxX0lPX0FERFJFU1MocGEpKTsKLQllbHNlCi0JCV9fcmF3X3dyaXRldyh2LCBPTUFQMl9MNF9JT19BRERSRVNTKHBhKSk7Ci19Ci1FWFBPUlRfU1lNQk9MKG9tYXBfd3JpdGV3KTsKLQotdm9pZCBvbWFwX3dyaXRlbCh1MzIgdiwgdTMyIHBhKQotewotCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkKLQkJX19yYXdfd3JpdGVsKHYsIE9NQVAxX0lPX0FERFJFU1MocGEpKTsKLQllbHNlCi0JCV9fcmF3X3dyaXRlbCh2LCBPTUFQMl9MNF9JT19BRERSRVNTKHBhKSk7Ci19Ci1FWFBPUlRfU1lNQk9MKG9tYXBfd3JpdGVsKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pb21tdS5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2lvbW11LmMKaW5kZXggNmNkMTUxYi4uYjExMDdjMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2lvbW11LmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2lvbW11LmMKQEAgLTgzMCw2ICs4MzAsMjggQEAKIH0KIAogLyoqCisgKiBpb21tdV9zZXRfZGFfcmFuZ2UgLSBTZXQgYSB2YWxpZCBkZXZpY2UgYWRkcmVzcyByYW5nZQorICogQG9iajoJCXRhcmdldCBpb21tdQorICogQHN0YXJ0CQlTdGFydCBvZiB2YWxpZCByYW5nZQorICogQGVuZAkJCUVuZCBvZiB2YWxpZCByYW5nZQorICoqLworaW50IGlvbW11X3NldF9kYV9yYW5nZShzdHJ1Y3QgaW9tbXUgKm9iaiwgdTMyIHN0YXJ0LCB1MzIgZW5kKQoreworCisJaWYgKCFvYmopCisJCXJldHVybiAtRUZBVUxUOworCisJaWYgKGVuZCA8IHN0YXJ0IHx8ICFQQUdFX0FMSUdOKHN0YXJ0IHwgZW5kKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlvYmotPmRhX3N0YXJ0ID0gc3RhcnQ7CisJb2JqLT5kYV9lbmQgPSBlbmQ7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlvbW11X3NldF9kYV9yYW5nZSk7CisKKy8qKgogICogaW9tbXVfZ2V0IC0gR2V0IGlvbW11IGhhbmRsZXIKICAqIEBuYW1lOgl0YXJnZXQgaW9tbXUgbmFtZQogICoqLwpAQCAtOTIyLDYgKzk0NCw4IEBACiAJb2JqLT5uYW1lID0gcGRhdGEtPm5hbWU7CiAJb2JqLT5kZXYgPSAmcGRldi0+ZGV2OwogCW9iai0+Y3R4ID0gKHZvaWQgKilvYmogKyBzaXplb2YoKm9iaik7CisJb2JqLT5kYV9zdGFydCA9IHBkYXRhLT5kYV9zdGFydDsKKwlvYmotPmRhX2VuZCA9IHBkYXRhLT5kYV9lbmQ7CiAKIAltdXRleF9pbml0KCZvYmotPmlvbW11X2xvY2spOwogCW11dGV4X2luaXQoJm9iai0+bW1hcF9sb2NrKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pb3ZtbS5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2lvdm1tLmMKaW5kZXggOGNlMGRlMi4uNmRjMTI5NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2lvdm1tLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2lvdm1tLmMKQEAgLTg3LDM1ICs4Nyw0MyBAQAogfQogI2RlZmluZSBzZ3RhYmxlX29rKHgpCSghIXNndGFibGVfbGVuKHgpKQogCitzdGF0aWMgdW5zaWduZWQgbWF4X2FsaWdubWVudCh1MzIgYWRkcikKK3sKKwlpbnQgaTsKKwl1bnNpZ25lZCBwYWdlc2l6ZVtdID0geyBTWl8xNk0sIFNaXzFNLCBTWl82NEssIFNaXzRLLCB9OworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBhZ2VzaXplKSAmJiBhZGRyICYgKHBhZ2VzaXplW2ldIC0gMSk7IGkrKykKKwkJOworCXJldHVybiAoaSA8IEFSUkFZX1NJWkUocGFnZXNpemUpKSA/IHBhZ2VzaXplW2ldIDogMDsKK30KKwogLyoKICAqIGNhbGN1bGF0ZSB0aGUgb3B0aW1hbCBudW1iZXIgc2cgZWxlbWVudHMgZnJvbSB0b3RhbCBieXRlcyBiYXNlZCBvbgogICogaW9tbXUgc3VwZXJwYWdlcwogICovCi1zdGF0aWMgdW5zaWduZWQgaW50IHNndGFibGVfbmVudHMoc2l6ZV90IGJ5dGVzKQorc3RhdGljIHVuc2lnbmVkIHNndGFibGVfbmVudHMoc2l6ZV90IGJ5dGVzLCB1MzIgZGEsIHUzMiBwYSkKIHsKLQlpbnQgaTsKLQl1bnNpZ25lZCBpbnQgbnJfZW50cmllczsKLQljb25zdCB1bnNpZ25lZCBsb25nIHBhZ2VzaXplW10gPSB7IFNaXzE2TSwgU1pfMU0sIFNaXzY0SywgU1pfNEssIH07CisJdW5zaWduZWQgbnJfZW50cmllcyA9IDAsIGVudF9zejsKIAogCWlmICghSVNfQUxJR05FRChieXRlcywgUEFHRV9TSVpFKSkgewogCQlwcl9lcnIoIiVzOiB3cm9uZyBzaXplICUwOHhcbiIsIF9fZnVuY19fLCBieXRlcyk7CiAJCXJldHVybiAwOwogCX0KIAotCW5yX2VudHJpZXMgPSAwOwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBhZ2VzaXplKTsgaSsrKSB7Ci0JCWlmIChieXRlcyA+PSBwYWdlc2l6ZVtpXSkgewotCQkJbnJfZW50cmllcyArPSAoYnl0ZXMgLyBwYWdlc2l6ZVtpXSk7Ci0JCQlieXRlcyAlPSBwYWdlc2l6ZVtpXTsKLQkJfQorCXdoaWxlIChieXRlcykgeworCQllbnRfc3ogPSBtYXhfYWxpZ25tZW50KGRhIHwgcGEpOworCQllbnRfc3ogPSBtaW5fdCh1bnNpZ25lZCwgZW50X3N6LCBpb3Bnc3pfbWF4KGJ5dGVzKSk7CisJCW5yX2VudHJpZXMrKzsKKwkJZGEgKz0gZW50X3N6OworCQlwYSArPSBlbnRfc3o7CisJCWJ5dGVzIC09IGVudF9zejsKIAl9Ci0JQlVHX09OKGJ5dGVzKTsKIAogCXJldHVybiBucl9lbnRyaWVzOwogfQogCiAvKiBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBzZ190YWJsZSBoZWFkZXIoYSBraW5kIG9mICdzdXBlcmJsb2NrJykgKi8KLXN0YXRpYyBzdHJ1Y3Qgc2dfdGFibGUgKnNndGFibGVfYWxsb2MoY29uc3Qgc2l6ZV90IGJ5dGVzLCB1MzIgZmxhZ3MpCitzdGF0aWMgc3RydWN0IHNnX3RhYmxlICpzZ3RhYmxlX2FsbG9jKGNvbnN0IHNpemVfdCBieXRlcywgdTMyIGZsYWdzLAorCQkJCQkJCXUzMiBkYSwgdTMyIHBhKQogewogCXVuc2lnbmVkIGludCBucl9lbnRyaWVzOwogCWludCBlcnI7CkBAIC0xMjcsOSArMTM1LDggQEAKIAlpZiAoIUlTX0FMSUdORUQoYnl0ZXMsIFBBR0VfU0laRSkpCiAJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCi0JLyogRklYTUU6IElPVk1GX0RBX0ZJWEVEIHNob3VsZCBzdXBwb3J0ICdzdXBlcnBhZ2VzJyAqLwotCWlmICgoZmxhZ3MgJiBJT1ZNRl9MSU5FQVIpICYmIChmbGFncyAmIElPVk1GX0RBX0FOT04pKSB7Ci0JCW5yX2VudHJpZXMgPSBzZ3RhYmxlX25lbnRzKGJ5dGVzKTsKKwlpZiAoZmxhZ3MgJiBJT1ZNRl9MSU5FQVIpIHsKKwkJbnJfZW50cmllcyA9IHNndGFibGVfbmVudHMoYnl0ZXMsIGRhLCBwYSk7CiAJCWlmICghbnJfZW50cmllcykKIAkJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCX0gZWxzZQpAQCAtMjczLDEzICsyODAsMTQgQEAKIAlhbGlnbmVtZW50ID0gUEFHRV9TSVpFOwogCiAJaWYgKGZsYWdzICYgSU9WTUZfREFfQU5PTikgewotCQkvKgotCQkgKiBSZXNlcnZlIHRoZSBmaXJzdCBwYWdlIGZvciBOVUxMCi0JCSAqLwotCQlzdGFydCA9IFBBR0VfU0laRTsKKwkJc3RhcnQgPSBvYmotPmRhX3N0YXJ0OworCiAJCWlmIChmbGFncyAmIElPVk1GX0xJTkVBUikKIAkJCWFsaWduZW1lbnQgPSBpb3Bnc3pfbWF4KGJ5dGVzKTsKIAkJc3RhcnQgPSByb3VuZHVwKHN0YXJ0LCBhbGlnbmVtZW50KTsKKwl9IGVsc2UgaWYgKHN0YXJ0IDwgb2JqLT5kYV9zdGFydCB8fCBzdGFydCA+IG9iai0+ZGFfZW5kIHx8CisJCQkJCW9iai0+ZGFfZW5kIC0gc3RhcnQgPCBieXRlcykgeworCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAl9CiAKIAl0bXAgPSBOVUxMOwpAQCAtMjg5LDE5ICsyOTcsMTkgQEAKIAlwcmV2X2VuZCA9IDA7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeSh0bXAsICZvYmotPm1tYXAsIGxpc3QpIHsKIAotCQlpZiAocHJldl9lbmQgPj0gc3RhcnQpCisJCWlmIChwcmV2X2VuZCA+IHN0YXJ0KQogCQkJYnJlYWs7CiAKLQkJaWYgKHN0YXJ0ICsgYnl0ZXMgPCB0bXAtPmRhX3N0YXJ0KQorCQlpZiAodG1wLT5kYV9zdGFydCA+IHN0YXJ0ICYmICh0bXAtPmRhX3N0YXJ0IC0gc3RhcnQpID49IGJ5dGVzKQogCQkJZ290byBmb3VuZDsKIAotCQlpZiAoZmxhZ3MgJiBJT1ZNRl9EQV9BTk9OKQorCQlpZiAodG1wLT5kYV9lbmQgPj0gc3RhcnQgJiYgZmxhZ3MgJiBJT1ZNRl9EQV9BTk9OKQogCQkJc3RhcnQgPSByb3VuZHVwKHRtcC0+ZGFfZW5kICsgMSwgYWxpZ25lbWVudCk7CiAKIAkJcHJldl9lbmQgPSB0bXAtPmRhX2VuZDsKIAl9CiAKLQlpZiAoKHN0YXJ0ID4gcHJldl9lbmQpICYmIChVTE9OR19NQVggLSBzdGFydCA+PSBieXRlcykpCisJaWYgKChzdGFydCA+PSBwcmV2X2VuZCkgJiYgKG9iai0+ZGFfZW5kIC0gc3RhcnQgPj0gYnl0ZXMpKQogCQlnb3RvIGZvdW5kOwogCiAJZGV2X2RiZyhvYmotPmRldiwgIiVzOiBubyBzcGFjZSB0byBmaXQgJTA4eCgleCkgZmxhZ3M6ICUwOHhcbiIsCkBAIC00MDksNyArNDE3LDggQEAKIAlCVUdfT04oIXNndCk7CiB9CiAKLXN0YXRpYyB2b2lkIHNndGFibGVfZmlsbF9rbWFsbG9jKHN0cnVjdCBzZ190YWJsZSAqc2d0LCB1MzIgcGEsIHNpemVfdCBsZW4pCitzdGF0aWMgdm9pZCBzZ3RhYmxlX2ZpbGxfa21hbGxvYyhzdHJ1Y3Qgc2dfdGFibGUgKnNndCwgdTMyIHBhLCB1MzIgZGEsCisJCQkJCQkJCXNpemVfdCBsZW4pCiB7CiAJdW5zaWduZWQgaW50IGk7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKQEAgLTQxOCw5ICs0MjcsMTAgQEAKIAl2YSA9IHBoeXNfdG9fdmlydChwYSk7CiAKIAlmb3JfZWFjaF9zZyhzZ3QtPnNnbCwgc2csIHNndC0+bmVudHMsIGkpIHsKLQkJc2l6ZV90IGJ5dGVzOworCQl1bnNpZ25lZCBieXRlczsKIAotCQlieXRlcyA9IGlvcGdzel9tYXgobGVuKTsKKwkJYnl0ZXMgPSBtYXhfYWxpZ25tZW50KGRhIHwgcGEpOworCQlieXRlcyA9IG1pbl90KHVuc2lnbmVkLCBieXRlcywgaW9wZ3N6X21heChsZW4pKTsKIAogCQlCVUdfT04oIWlvcGdzel9vayhieXRlcykpOwogCkBAIC00MjksNiArNDM5LDcgQEAKIAkJICogJ3BhJyBpcyBjb3RpbnVvdXMobGluZWFyKS4KIAkJICovCiAJCXBhICs9IGJ5dGVzOworCQlkYSArPSBieXRlczsKIAkJbGVuIC09IGJ5dGVzOwogCX0KIAlCVUdfT04obGVuKTsKQEAgLTY5NSwxOCArNzA2LDE4IEBACiAJaWYgKCF2YSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlzZ3QgPSBzZ3RhYmxlX2FsbG9jKGJ5dGVzLCBmbGFncyk7CisJZmxhZ3MgJj0gSU9WTUZfSFdfTUFTSzsKKwlmbGFncyB8PSBJT1ZNRl9ESVNDT05UOworCWZsYWdzIHw9IElPVk1GX0FMTE9DOworCWZsYWdzIHw9IChkYSA/IElPVk1GX0RBX0ZJWEVEIDogSU9WTUZfREFfQU5PTik7CisKKwlzZ3QgPSBzZ3RhYmxlX2FsbG9jKGJ5dGVzLCBmbGFncywgZGEsIDApOwogCWlmIChJU19FUlIoc2d0KSkgewogCQlkYSA9IFBUUl9FUlIoc2d0KTsKIAkJZ290byBlcnJfc2d0X2FsbG9jOwogCX0KIAlzZ3RhYmxlX2ZpbGxfdm1hbGxvYyhzZ3QsIHZhKTsKIAotCWZsYWdzICY9IElPVk1GX0hXX01BU0s7Ci0JZmxhZ3MgfD0gSU9WTUZfRElTQ09OVDsKLQlmbGFncyB8PSBJT1ZNRl9BTExPQzsKLQlmbGFncyB8PSAoZGEgPyBJT1ZNRl9EQV9GSVhFRCA6IElPVk1GX0RBX0FOT04pOwotCiAJZGEgPSBfX2lvbW11X3ZtYXAob2JqLCBkYSwgc2d0LCB2YSwgYnl0ZXMsIGZsYWdzKTsKIAlpZiAoSVNfRVJSX1ZBTFVFKGRhKSkKIAkJZ290byBlcnJfaW9tbXVfdm1hcDsKQEAgLTc0NiwxMSArNzU3LDExIEBACiB7CiAJc3RydWN0IHNnX3RhYmxlICpzZ3Q7CiAKLQlzZ3QgPSBzZ3RhYmxlX2FsbG9jKGJ5dGVzLCBmbGFncyk7CisJc2d0ID0gc2d0YWJsZV9hbGxvYyhieXRlcywgZmxhZ3MsIGRhLCBwYSk7CiAJaWYgKElTX0VSUihzZ3QpKQogCQlyZXR1cm4gUFRSX0VSUihzZ3QpOwogCi0Jc2d0YWJsZV9maWxsX2ttYWxsb2Moc2d0LCBwYSwgYnl0ZXMpOworCXNndGFibGVfZmlsbF9rbWFsbG9jKHNndCwgcGEsIGRhLCBieXRlcyk7CiAKIAlkYSA9IG1hcF9pb21tdV9yZWdpb24ob2JqLCBkYSwgc2d0LCB2YSwgYnl0ZXMsIGZsYWdzKTsKIAlpZiAoSVNfRVJSX1ZBTFVFKGRhKSkgewpAQCAtODExLDcgKzgyMiw3IEBACiAJc3RydWN0IHNnX3RhYmxlICpzZ3Q7CiAJdHlwZWRlZiB2b2lkICgqZnVuY190KShjb25zdCB2b2lkICopOwogCi0Jc2d0ID0gdW5tYXBfdm1fYXJlYShvYmosIGRhLCAoZnVuY190KV9faW91bm1hcCwKKwlzZ3QgPSB1bm1hcF92bV9hcmVhKG9iaiwgZGEsIChmdW5jX3QpaW91bm1hcCwKIAkJCSAgICBJT1ZNRl9MSU5FQVIgfCBJT1ZNRl9NTUlPKTsKIAlpZiAoIXNndCkKIAkJZGV2X2RiZyhvYmotPmRldiwgIiVzOiBObyBzZ3RcbiIsIF9fZnVuY19fKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9tYWlsYm94LmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvbWFpbGJveC5jCmluZGV4IGQyZmFmYjguLjQ1OWIzMTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9tYWlsYm94LmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL21haWxib3guYwpAQCAtMjgsMTIgKzI4LDEyIEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2tmaWZvLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KIAogI2luY2x1ZGUgPHBsYXQvbWFpbGJveC5oPgogCiBzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm1ib3hkOwogc3RhdGljIHN0cnVjdCBvbWFwX21ib3ggKiptYm94ZXM7Ci1zdGF0aWMgYm9vbCBycV9mdWxsOwogCiBzdGF0aWMgaW50IG1ib3hfY29uZmlndXJlZDsKIHN0YXRpYyBERUZJTkVfTVVURVgobWJveF9jb25maWd1cmVkX2xvY2spOwpAQCAtOTMsMjAgKzkzLDI1IEBACiAJc3RydWN0IG9tYXBfbWJveF9xdWV1ZSAqbXEgPSBtYm94LT50eHE7CiAJaW50IHJldCA9IDAsIGxlbjsKIAotCXNwaW5fbG9jaygmbXEtPmxvY2spOworCXNwaW5fbG9ja19iaCgmbXEtPmxvY2spOwogCiAJaWYgKGtmaWZvX2F2YWlsKCZtcS0+ZmlmbykgPCBzaXplb2YobXNnKSkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKIAl9CiAKKwlpZiAoa2ZpZm9faXNfZW1wdHkoJm1xLT5maWZvKSAmJiAhX19tYm94X3BvbGxfZm9yX3NwYWNlKG1ib3gpKSB7CisJCW1ib3hfZmlmb193cml0ZShtYm94LCBtc2cpOworCQlnb3RvIG91dDsKKwl9CisKIAlsZW4gPSBrZmlmb19pbigmbXEtPmZpZm8sICh1bnNpZ25lZCBjaGFyICopJm1zZywgc2l6ZW9mKG1zZykpOwogCVdBUk5fT04obGVuICE9IHNpemVvZihtc2cpKTsKIAogCXRhc2tsZXRfc2NoZWR1bGUoJm1ib3gtPnR4cS0+dGFza2xldCk7CiAKIG91dDoKLQlzcGluX3VubG9jaygmbXEtPmxvY2spOworCXNwaW5fdW5sb2NrX2JoKCZtcS0+bG9jayk7CiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0wob21hcF9tYm94X21zZ19zZW5kKTsKQEAgLTE0Niw4ICsxNTEsMTQgQEAKIAkJbGVuID0ga2ZpZm9fb3V0KCZtcS0+ZmlmbywgKHVuc2lnbmVkIGNoYXIgKikmbXNnLCBzaXplb2YobXNnKSk7CiAJCVdBUk5fT04obGVuICE9IHNpemVvZihtc2cpKTsKIAotCQlpZiAobXEtPmNhbGxiYWNrKQotCQkJbXEtPmNhbGxiYWNrKCh2b2lkICopbXNnKTsKKwkJYmxvY2tpbmdfbm90aWZpZXJfY2FsbF9jaGFpbigmbXEtPm1ib3gtPm5vdGlmaWVyLCBsZW4sCisJCQkJCQkJCSh2b2lkICopbXNnKTsKKwkJc3Bpbl9sb2NrX2lycSgmbXEtPmxvY2spOworCQlpZiAobXEtPmZ1bGwpIHsKKwkJCW1xLT5mdWxsID0gZmFsc2U7CisJCQlvbWFwX21ib3hfZW5hYmxlX2lycShtcS0+bWJveCwgSVJRX1JYKTsKKwkJfQorCQlzcGluX3VubG9ja19pcnEoJm1xLT5sb2NrKTsKIAl9CiB9CiAKQEAgLTE3MCw3ICsxODEsNyBAQAogCXdoaWxlICghbWJveF9maWZvX2VtcHR5KG1ib3gpKSB7CiAJCWlmICh1bmxpa2VseShrZmlmb19hdmFpbCgmbXEtPmZpZm8pIDwgc2l6ZW9mKG1zZykpKSB7CiAJCQlvbWFwX21ib3hfZGlzYWJsZV9pcnEobWJveCwgSVJRX1JYKTsKLQkJCXJxX2Z1bGwgPSB0cnVlOworCQkJbXEtPmZ1bGwgPSB0cnVlOwogCQkJZ290byBub21lbTsKIAkJfQogCkBAIC0yMzksNzMgKzI1MCw3NyBAQAogCWludCByZXQgPSAwOwogCXN0cnVjdCBvbWFwX21ib3hfcXVldWUgKm1xOwogCi0JaWYgKG1ib3gtPm9wcy0+c3RhcnR1cCkgewotCQltdXRleF9sb2NrKCZtYm94X2NvbmZpZ3VyZWRfbG9jayk7Ci0JCWlmICghbWJveF9jb25maWd1cmVkKQorCW11dGV4X2xvY2soJm1ib3hfY29uZmlndXJlZF9sb2NrKTsKKwlpZiAoIW1ib3hfY29uZmlndXJlZCsrKSB7CisJCWlmIChsaWtlbHkobWJveC0+b3BzLT5zdGFydHVwKSkgewogCQkJcmV0ID0gbWJveC0+b3BzLT5zdGFydHVwKG1ib3gpOworCQkJaWYgKHVubGlrZWx5KHJldCkpCisJCQkJZ290byBmYWlsX3N0YXJ0dXA7CisJCX0gZWxzZQorCQkJZ290byBmYWlsX3N0YXJ0dXA7CisJfQogCi0JCWlmIChyZXQpIHsKLQkJCW11dGV4X3VubG9jaygmbWJveF9jb25maWd1cmVkX2xvY2spOwotCQkJcmV0dXJuIHJldDsKKwlpZiAoIW1ib3gtPnVzZV9jb3VudCsrKSB7CisJCXJldCA9IHJlcXVlc3RfaXJxKG1ib3gtPmlycSwgbWJveF9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELAorCQkJCQkJCW1ib3gtPm5hbWUsIG1ib3gpOworCQlpZiAodW5saWtlbHkocmV0KSkgeworCQkJcHJfZXJyKCJmYWlsZWQgdG8gcmVnaXN0ZXIgbWFpbGJveCBpbnRlcnJ1cHQ6JWRcbiIsCisJCQkJCQkJCQlyZXQpOworCQkJZ290byBmYWlsX3JlcXVlc3RfaXJxOwogCQl9Ci0JCW1ib3hfY29uZmlndXJlZCsrOwotCQltdXRleF91bmxvY2soJm1ib3hfY29uZmlndXJlZF9sb2NrKTsKLQl9CisJCW1xID0gbWJveF9xdWV1ZV9hbGxvYyhtYm94LCBOVUxMLCBtYm94X3R4X3Rhc2tsZXQpOworCQlpZiAoIW1xKSB7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBmYWlsX2FsbG9jX3R4cTsKKwkJfQorCQltYm94LT50eHEgPSBtcTsKIAotCXJldCA9IHJlcXVlc3RfaXJxKG1ib3gtPmlycSwgbWJveF9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELAotCQkJCW1ib3gtPm5hbWUsIG1ib3gpOwotCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkiZmFpbGVkIHRvIHJlZ2lzdGVyIG1haWxib3ggaW50ZXJydXB0OiVkXG4iLCByZXQpOwotCQlnb3RvIGZhaWxfcmVxdWVzdF9pcnE7CisJCW1xID0gbWJveF9xdWV1ZV9hbGxvYyhtYm94LCBtYm94X3J4X3dvcmssIE5VTEwpOworCQlpZiAoIW1xKSB7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBmYWlsX2FsbG9jX3J4cTsKKwkJfQorCQltYm94LT5yeHEgPSBtcTsKKwkJbXEtPm1ib3ggPSBtYm94OwogCX0KLQotCW1xID0gbWJveF9xdWV1ZV9hbGxvYyhtYm94LCBOVUxMLCBtYm94X3R4X3Rhc2tsZXQpOwotCWlmICghbXEpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBmYWlsX2FsbG9jX3R4cTsKLQl9Ci0JbWJveC0+dHhxID0gbXE7Ci0KLQltcSA9IG1ib3hfcXVldWVfYWxsb2MobWJveCwgbWJveF9yeF93b3JrLCBOVUxMKTsKLQlpZiAoIW1xKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZmFpbF9hbGxvY19yeHE7Ci0JfQotCW1ib3gtPnJ4cSA9IG1xOwotCisJbXV0ZXhfdW5sb2NrKCZtYm94X2NvbmZpZ3VyZWRfbG9jayk7CiAJcmV0dXJuIDA7CiAKLSBmYWlsX2FsbG9jX3J4cToKK2ZhaWxfYWxsb2NfcnhxOgogCW1ib3hfcXVldWVfZnJlZShtYm94LT50eHEpOwotIGZhaWxfYWxsb2NfdHhxOgorZmFpbF9hbGxvY190eHE6CiAJZnJlZV9pcnEobWJveC0+aXJxLCBtYm94KTsKLSBmYWlsX3JlcXVlc3RfaXJxOgorZmFpbF9yZXF1ZXN0X2lycToKIAlpZiAobWJveC0+b3BzLT5zaHV0ZG93bikKIAkJbWJveC0+b3BzLT5zaHV0ZG93bihtYm94KTsKLQorCW1ib3gtPnVzZV9jb3VudC0tOworZmFpbF9zdGFydHVwOgorCW1ib3hfY29uZmlndXJlZC0tOworCW11dGV4X3VubG9jaygmbWJveF9jb25maWd1cmVkX2xvY2spOwogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIG9tYXBfbWJveF9maW5pKHN0cnVjdCBvbWFwX21ib3ggKm1ib3gpCiB7Ci0JZnJlZV9pcnEobWJveC0+aXJxLCBtYm94KTsKLQl0YXNrbGV0X2tpbGwoJm1ib3gtPnR4cS0+dGFza2xldCk7Ci0JZmx1c2hfd29yaygmbWJveC0+cnhxLT53b3JrKTsKLQltYm94X3F1ZXVlX2ZyZWUobWJveC0+dHhxKTsKLQltYm94X3F1ZXVlX2ZyZWUobWJveC0+cnhxKTsKKwltdXRleF9sb2NrKCZtYm94X2NvbmZpZ3VyZWRfbG9jayk7CiAKLQlpZiAobWJveC0+b3BzLT5zaHV0ZG93bikgewotCQltdXRleF9sb2NrKCZtYm94X2NvbmZpZ3VyZWRfbG9jayk7Ci0JCWlmIChtYm94X2NvbmZpZ3VyZWQgPiAwKQotCQkJbWJveF9jb25maWd1cmVkLS07Ci0JCWlmICghbWJveF9jb25maWd1cmVkKQotCQkJbWJveC0+b3BzLT5zaHV0ZG93bihtYm94KTsKLQkJbXV0ZXhfdW5sb2NrKCZtYm94X2NvbmZpZ3VyZWRfbG9jayk7CisJaWYgKCEtLW1ib3gtPnVzZV9jb3VudCkgeworCQlmcmVlX2lycShtYm94LT5pcnEsIG1ib3gpOworCQl0YXNrbGV0X2tpbGwoJm1ib3gtPnR4cS0+dGFza2xldCk7CisJCWZsdXNoX3dvcmsoJm1ib3gtPnJ4cS0+d29yayk7CisJCW1ib3hfcXVldWVfZnJlZShtYm94LT50eHEpOworCQltYm94X3F1ZXVlX2ZyZWUobWJveC0+cnhxKTsKIAl9CisKKwlpZiAobGlrZWx5KG1ib3gtPm9wcy0+c2h1dGRvd24pKSB7CisJCWlmICghLS1tYm94X2NvbmZpZ3VyZWQpCisJCQltYm94LT5vcHMtPnNodXRkb3duKG1ib3gpOworCX0KKworCW11dGV4X3VubG9jaygmbWJveF9jb25maWd1cmVkX2xvY2spOwogfQogCi1zdHJ1Y3Qgb21hcF9tYm94ICpvbWFwX21ib3hfZ2V0KGNvbnN0IGNoYXIgKm5hbWUpCitzdHJ1Y3Qgb21hcF9tYm94ICpvbWFwX21ib3hfZ2V0KGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCiB7CiAJc3RydWN0IG9tYXBfbWJveCAqbWJveDsKIAlpbnQgcmV0OwpAQCAtMzI0LDEyICszMzksMTYgQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKIAorCWlmIChuYikKKwkJYmxvY2tpbmdfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJm1ib3gtPm5vdGlmaWVyLCBuYik7CisKIAlyZXR1cm4gbWJveDsKIH0KIEVYUE9SVF9TWU1CT0wob21hcF9tYm94X2dldCk7CiAKLXZvaWQgb21hcF9tYm94X3B1dChzdHJ1Y3Qgb21hcF9tYm94ICptYm94KQordm9pZCBvbWFwX21ib3hfcHV0KHN0cnVjdCBvbWFwX21ib3ggKm1ib3gsIHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCiB7CisJYmxvY2tpbmdfbm90aWZpZXJfY2hhaW5fdW5yZWdpc3RlcigmbWJveC0+bm90aWZpZXIsIG5iKTsKIAlvbWFwX21ib3hfZmluaShtYm94KTsKIH0KIEVYUE9SVF9TWU1CT0wob21hcF9tYm94X3B1dCk7CkBAIC0zNTMsNiArMzcyLDggQEAKIAkJCXJldCA9IFBUUl9FUlIobWJveC0+ZGV2KTsKIAkJCWdvdG8gZXJyX291dDsKIAkJfQorCisJCUJMT0NLSU5HX0lOSVRfTk9USUZJRVJfSEVBRCgmbWJveC0+bm90aWZpZXIpOwogCX0KIAlyZXR1cm4gMDsKIApAQCAtMzkxLDcgKzQxMiw4IEBACiAKIAkvKiBrZmlmbyBzaXplIHNhbml0eSBjaGVjazogYWxpZ25tZW50IGFuZCBtaW5pbWFsIHNpemUgKi8KIAltYm94X2tmaWZvX3NpemUgPSBBTElHTihtYm94X2tmaWZvX3NpemUsIHNpemVvZihtYm94X21zZ190KSk7Ci0JbWJveF9rZmlmb19zaXplID0gbWF4X3QodW5zaWduZWQgaW50LCBtYm94X2tmaWZvX3NpemUsIHNpemVvZihtYm94X21zZ190KSk7CisJbWJveF9rZmlmb19zaXplID0gbWF4X3QodW5zaWduZWQgaW50LCBtYm94X2tmaWZvX3NpemUsCisJCQkJCQkJc2l6ZW9mKG1ib3hfbXNnX3QpKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL21jYnNwLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvbWNic3AuYwppbmRleCBlYWM0Yjk3Li5iNWE2ZTE3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvbWNic3AuYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvbWNic3AuYwpAQCAtMjgsNiArMjgsOCBAQAogI2luY2x1ZGUgPHBsYXQvZG1hLmg+CiAjaW5jbHVkZSA8cGxhdC9tY2JzcC5oPgogCisvKiBYWFggVGhlc2UgInNpZGV3YXlzIiBpbmNsdWRlcyBhcmUgYSBzaWduIHRoYXQgc29tZXRoaW5nIGlzIHdyb25nICovCisjaW5jbHVkZSAiLi4vbWFjaC1vbWFwMi9jbTJ4eHhfM3h4eC5oIgogI2luY2x1ZGUgIi4uL21hY2gtb21hcDIvY20tcmVnYml0cy0zNHh4LmgiCiAKIHN0cnVjdCBvbWFwX21jYnNwICoqbWNic3BfcHRyOwpAQCAtMjM0LDkgKzIzNiw5IEBACiAJICogU2lkZXRvbmUgdXNlcyBNY0JTUCBJQ0xLIC0gd2hpY2ggbXVzdCBub3QgaWRsZSB3aGVuIHNpZGV0b25lcwogCSAqIGFyZSBlbmFibGVkIG9yIHNpZGV0b25lcyBzdGFydCBzb3VuZGluZyB1Z2x5LgogCSAqLwotCXcgPSBjbV9yZWFkX21vZF9yZWcoT01BUDM0MzBfUEVSX01PRCwgQ01fQVVUT0lETEUpOworCXcgPSBvbWFwMl9jbV9yZWFkX21vZF9yZWcoT01BUDM0MzBfUEVSX01PRCwgQ01fQVVUT0lETEUpOwogCXcgJj0gfigxIDw8IChtY2JzcC0+aWQgLSAyKSk7Ci0JY21fd3JpdGVfbW9kX3JlZyh3LCBPTUFQMzQzMF9QRVJfTU9ELCBDTV9BVVRPSURMRSk7CisJb21hcDJfY21fd3JpdGVfbW9kX3JlZyh3LCBPTUFQMzQzMF9QRVJfTU9ELCBDTV9BVVRPSURMRSk7CiAKIAkvKiBFbmFibGUgTWNCU1AgU2lkZXRvbmUgKi8KIAl3ID0gTUNCU1BfUkVBRChtY2JzcCwgU1NFTENSKTsKQEAgLTI2Myw5ICsyNjUsOSBAQAogCXcgPSBNQ0JTUF9SRUFEKG1jYnNwLCBTU0VMQ1IpOwogCU1DQlNQX1dSSVRFKG1jYnNwLCBTU0VMQ1IsIHcgJiB+KFNJREVUT05FRU4pKTsKIAotCXcgPSBjbV9yZWFkX21vZF9yZWcoT01BUDM0MzBfUEVSX01PRCwgQ01fQVVUT0lETEUpOworCXcgPSBvbWFwMl9jbV9yZWFkX21vZF9yZWcoT01BUDM0MzBfUEVSX01PRCwgQ01fQVVUT0lETEUpOwogCXcgfD0gMSA8PCAobWNic3AtPmlkIC0gMik7Ci0JY21fd3JpdGVfbW9kX3JlZyh3LCBPTUFQMzQzMF9QRVJfTU9ELCBDTV9BVVRPSURMRSk7CisJb21hcDJfY21fd3JpdGVfbW9kX3JlZyh3LCBPTUFQMzQzMF9QRVJfTU9ELCBDTV9BVVRPSURMRSk7CiB9CiAKIHN0YXRpYyB2b2lkIG9tYXBfc3RfZmlyX3dyaXRlKHN0cnVjdCBvbWFwX21jYnNwICptY2JzcCwgczE2ICpmaXIpCkBAIC03NTUsNyArNzU3LDcgQEAKIAkJZ290byBlcnJfa2ZyZWU7CiAJfQogCi0JbWNic3AtPmZyZWUgPSAwOworCW1jYnNwLT5mcmVlID0gZmFsc2U7CiAJbWNic3AtPnJlZ19jYWNoZSA9IHJlZ19jYWNoZTsKIAlzcGluX3VubG9jaygmbWNic3AtPmxvY2spOwogCkBAIC04MTUsNyArODE3LDcgQEAKIAljbGtfZGlzYWJsZShtY2JzcC0+aWNsayk7CiAKIAlzcGluX2xvY2soJm1jYnNwLT5sb2NrKTsKLQltY2JzcC0+ZnJlZSA9IDE7CisJbWNic3AtPmZyZWUgPSB0cnVlOwogCW1jYnNwLT5yZWdfY2FjaGUgPSBOVUxMOwogZXJyX2tmcmVlOgogCXNwaW5fdW5sb2NrKCZtY2JzcC0+bG9jayk7CkBAIC04NTgsNyArODYwLDcgQEAKIAlpZiAobWNic3AtPmZyZWUpCiAJCWRldl9lcnIobWNic3AtPmRldiwgIk1jQlNQJWQgd2FzIG5vdCByZXNlcnZlZFxuIiwgbWNic3AtPmlkKTsKIAllbHNlCi0JCW1jYnNwLT5mcmVlID0gMTsKKwkJbWNic3AtPmZyZWUgPSB0cnVlOwogCW1jYnNwLT5yZWdfY2FjaGUgPSBOVUxMOwogCXNwaW5fdW5sb2NrKCZtY2JzcC0+bG9jayk7CiAKQEAgLTE3NzEsNyArMTc3Myw3IEBACiAKIAlzcGluX2xvY2tfaW5pdCgmbWNic3AtPmxvY2spOwogCW1jYnNwLT5pZCA9IGlkICsgMTsKLQltY2JzcC0+ZnJlZSA9IDE7CisJbWNic3AtPmZyZWUgPSB0cnVlOwogCW1jYnNwLT5kbWFfdHhfbGNoID0gLTE7CiAJbWNic3AtPmRtYV9yeF9sY2ggPSAtMTsKIApAQCAtMTgzNiwxNyArMTgzOCwxMSBAQAogCiAJCW9tYXAzNHh4X2RldmljZV9leGl0KG1jYnNwKTsKIAotCQljbGtfZGlzYWJsZShtY2JzcC0+ZmNsayk7Ci0JCWNsa19kaXNhYmxlKG1jYnNwLT5pY2xrKTsKIAkJY2xrX3B1dChtY2JzcC0+ZmNsayk7CiAJCWNsa19wdXQobWNic3AtPmljbGspOwogCiAJCWlvdW5tYXAobWNic3AtPmlvX2Jhc2UpOwotCi0JCW1jYnNwLT5mY2xrID0gTlVMTDsKLQkJbWNic3AtPmljbGsgPSBOVUxMOwotCQltY2JzcC0+ZnJlZSA9IDA7Ci0JCW1jYnNwLT5kZXYgPSBOVUxMOworCQlrZnJlZShtY2JzcCk7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvb21hcC1wbS1ub29wLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvb21hcC1wbS1ub29wLmMKaW5kZXggZTEyOWNlOC4uYjA0NzFiYjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9vbWFwLXBtLW5vb3AuYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvb21hcC1wbS1ub29wLmMKQEAgLTIwLDE1ICsyMCwxNCBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVmcmVxLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAKIC8qIEludGVyZmFjZSBkb2N1bWVudGF0aW9uIGlzIGluIG1hY2gvb21hcC1wbS5oICovCiAjaW5jbHVkZSA8cGxhdC9vbWFwLXBtLmg+CisjaW5jbHVkZSA8cGxhdC9vbWFwX2RldmljZS5oPgogCi0jaW5jbHVkZSA8cGxhdC9wb3dlcmRvbWFpbi5oPgotCi1zdHJ1Y3Qgb21hcF9vcHAgKmRzcF9vcHBzOwotc3RydWN0IG9tYXBfb3BwICptcHVfb3BwczsKLXN0cnVjdCBvbWFwX29wcCAqbDNfb3BwczsKK3N0YXRpYyBib29sIG9mZl9tb2RlX2VuYWJsZWQ7CitzdGF0aWMgdTMyIGR1bW15X2NvbnRleHRfbG9zc19jb3VudGVyOwogCiAvKgogICogRGV2aWNlLWRyaXZlci1vcmlnaW5hdGVkIGNvbnN0cmFpbnRzICh2aWEgYm9hcmQtKi5jIGZpbGVzKQpAQCAtMjg0LDM3ICsyODMsNzAgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKiBvbWFwX3BtX2VuYWJsZV9vZmZfbW9kZSAtIG5vdGlmeSBPTUFQIFBNIHRoYXQgb2ZmLW1vZGUgaXMgZW5hYmxlZAorICoKKyAqIEludGVuZGVkIGZvciB1c2Ugb25seSBieSBPTUFQIFBNIGNvcmUgY29kZSB0byBub3RpZnkgdGhpcyBsYXllcgorICogdGhhdCBvZmYgbW9kZSBoYXMgYmVlbiBlbmFibGVkLgorICovCit2b2lkIG9tYXBfcG1fZW5hYmxlX29mZl9tb2RlKHZvaWQpCit7CisJb2ZmX21vZGVfZW5hYmxlZCA9IHRydWU7Cit9CisKKy8qKgorICogb21hcF9wbV9kaXNhYmxlX29mZl9tb2RlIC0gbm90aWZ5IE9NQVAgUE0gdGhhdCBvZmYtbW9kZSBpcyBkaXNhYmxlZAorICoKKyAqIEludGVuZGVkIGZvciB1c2Ugb25seSBieSBPTUFQIFBNIGNvcmUgY29kZSB0byBub3RpZnkgdGhpcyBsYXllcgorICogdGhhdCBvZmYgbW9kZSBoYXMgYmVlbiBkaXNhYmxlZC4KKyAqLwordm9pZCBvbWFwX3BtX2Rpc2FibGVfb2ZmX21vZGUodm9pZCkKK3sKKwlvZmZfbW9kZV9lbmFibGVkID0gZmFsc2U7Cit9CisKIC8qCiAgKiBEZXZpY2UgY29udGV4dCBsb3NzIHRyYWNraW5nCiAgKi8KIAotaW50IG9tYXBfcG1fZ2V0X2Rldl9jb250ZXh0X2xvc3NfY291bnQoc3RydWN0IGRldmljZSAqZGV2KQorI2lmZGVmIENPTkZJR19BUkNIX09NQVAyUExVUworCit1MzIgb21hcF9wbV9nZXRfZGV2X2NvbnRleHRfbG9zc19jb3VudChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0JaWYgKCFkZXYpIHsKLQkJV0FSTl9PTigxKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJdTMyIGNvdW50OwogCi0JcHJfZGVidWcoIk9NQVAgUE06IHJldHVybmluZyBjb250ZXh0IGxvc3MgY291bnQgZm9yIGRldiAlc1xuIiwKLQkJIGRldl9uYW1lKGRldikpOworCWlmIChXQVJOX09OKCFkZXYpKQorCQlyZXR1cm4gMDsKIAotCS8qCi0JICogTWFwIHRoZSBkZXZpY2UgdG8gdGhlIHBvd2VyZG9tYWluLiAgUmV0dXJuIHRoZSBwb3dlcmRvbWFpbgotCSAqIG9mZiBjb3VudGVyLgotCSAqLworCWlmIChkZXYtPnBhcmVudCA9PSAmb21hcF9kZXZpY2VfcGFyZW50KSB7CisJCWNvdW50ID0gb21hcF9kZXZpY2VfZ2V0X2NvbnRleHRfbG9zc19jb3VudChwZGV2KTsKKwl9IGVsc2UgeworCQlXQVJOX09OQ0Uob2ZmX21vZGVfZW5hYmxlZCwgIm9tYXBfcG06IHVzaW5nIGR1bW15IGNvbnRleHQgbG9zcyBjb3VudGVyOyBkZXZpY2UgJXMgc2hvdWxkIGJlIGNvbnZlcnRlZCB0byBvbWFwX2RldmljZSIsCisJCQkgIGRldl9uYW1lKGRldikpOworCQlpZiAob2ZmX21vZGVfZW5hYmxlZCkKKwkJCWR1bW15X2NvbnRleHRfbG9zc19jb3VudGVyKys7CisJCWNvdW50ID0gZHVtbXlfY29udGV4dF9sb3NzX2NvdW50ZXI7CisJfQogCi0JcmV0dXJuIDA7CisJcHJfZGVidWcoIk9NQVAgUE06IGNvbnRleHQgbG9zcyBjb3VudCBmb3IgZGV2ICVzID0gJWRcbiIsCisJCSBkZXZfbmFtZShkZXYpLCBjb3VudCk7CisKKwlyZXR1cm4gY291bnQ7CiB9CiAKKyNlbHNlCisKK3UzMiBvbWFwX3BtX2dldF9kZXZfY29udGV4dF9sb3NzX2NvdW50KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gZHVtbXlfY29udGV4dF9sb3NzX2NvdW50ZXI7Cit9CisKKyNlbmRpZgogCiAvKiBTaG91bGQgYmUgY2FsbGVkIGJlZm9yZSBjbGsgZnJhbWV3b3JrIGluaXQgKi8KLWludCBfX2luaXQgb21hcF9wbV9pZl9lYXJseV9pbml0KHN0cnVjdCBvbWFwX29wcCAqbXB1X29wcF90YWJsZSwKLQkJCQkgc3RydWN0IG9tYXBfb3BwICpkc3Bfb3BwX3RhYmxlLAotCQkJCSBzdHJ1Y3Qgb21hcF9vcHAgKmwzX29wcF90YWJsZSkKK2ludCBfX2luaXQgb21hcF9wbV9pZl9lYXJseV9pbml0KHZvaWQpCiB7Ci0JbXB1X29wcHMgPSBtcHVfb3BwX3RhYmxlOwotCWRzcF9vcHBzID0gZHNwX29wcF90YWJsZTsKLQlsM19vcHBzID0gbDNfb3BwX3RhYmxlOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvb21hcF9kZXZpY2UuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9vbWFwX2RldmljZS5jCmluZGV4IGFiZTkzM2MuLjU3YWRiMjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9vbWFwX2RldmljZS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9vbWFwX2RldmljZS5jCkBAIC0yODAsNiArMjgwLDM0IEBACiAvKiBQdWJsaWMgZnVuY3Rpb25zIGZvciB1c2UgYnkgY29yZSBjb2RlICovCiAKIC8qKgorICogb21hcF9kZXZpY2VfZ2V0X2NvbnRleHRfbG9zc19jb3VudCAtIGdldCBsb3N0IGNvbnRleHQgY291bnQKKyAqIEBvZDogc3RydWN0IG9tYXBfZGV2aWNlICoKKyAqCisgKiBVc2luZyB0aGUgcHJpbWFyeSBod21vZCwgcXVlcnkgdGhlIGNvbnRleHQgbG9zcyBjb3VudCBmb3IgdGhpcworICogZGV2aWNlLgorICoKKyAqIENhbGxlcnMgc2hvdWxkIGNvbnNpZGVyIGNvbnRleHQgZm9yIHRoaXMgZGV2aWNlIGxvc3QgYW55IHRpbWUgdGhpcworICogZnVuY3Rpb24gcmV0dXJucyBhIHZhbHVlIGRpZmZlcmVudCB0aGFuIHRoZSB2YWx1ZSB0aGUgY2FsbGVyIGdvdAorICogdGhlIGxhc3QgdGltZSBpdCBjYWxsZWQgdGhpcyBmdW5jdGlvbi4KKyAqCisgKiBJZiBhbnkgaHdtb2RzIGV4aXN0IGZvciB0aGUgb21hcF9kZXZpY2UgYXNzb2lhdGVkIHdpdGggQHBkZXYsCisgKiByZXR1cm4gdGhlIGNvbnRleHQgbG9zcyBjb3VudGVyIGZvciB0aGF0IGh3bW9kLCBvdGhlcndpc2UgcmV0dXJuCisgKiB6ZXJvLgorICovCit1MzIgb21hcF9kZXZpY2VfZ2V0X2NvbnRleHRfbG9zc19jb3VudChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBvbWFwX2RldmljZSAqb2Q7CisJdTMyIHJldCA9IDA7CisKKwlvZCA9IF9maW5kX2J5X3BkZXYocGRldik7CisKKwlpZiAob2QtPmh3bW9kc19jbnQpCisJCXJldCA9IG9tYXBfaHdtb2RfZ2V0X2NvbnRleHRfbG9zc19jb3VudChvZC0+aHdtb2RzWzBdKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qKgogICogb21hcF9kZXZpY2VfY291bnRfcmVzb3VyY2VzIC0gY291bnQgbnVtYmVyIG9mIHN0cnVjdCByZXNvdXJjZSBlbnRyaWVzIG5lZWRlZAogICogQG9kOiBzdHJ1Y3Qgb21hcF9kZXZpY2UgKgogICoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9zcmFtLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvc3JhbS5jCmluZGV4IDc0ZGFjNDEuLmUyNmU1MDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9zcmFtLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL3NyYW0uYwpAQCAtMzMsMjMgKzMzLDIxIEBACiAKICNpbmNsdWRlICJzcmFtLmgiCiAjaW5jbHVkZSAiZmIuaCIKKworLyogWFhYIFRoZXNlICJzaWRld2F5cyIgaW5jbHVkZXMgYXJlIGEgc2lnbiB0aGF0IHNvbWV0aGluZyBpcyB3cm9uZyAqLwogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDIpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpCi0jIGluY2x1ZGUgIi4uL21hY2gtb21hcDIvcHJtLmgiCi0jIGluY2x1ZGUgIi4uL21hY2gtb21hcDIvY20uaCIKKyMgaW5jbHVkZSAiLi4vbWFjaC1vbWFwMi9wcm0yeHh4XzN4eHguaCIKICMgaW5jbHVkZSAiLi4vbWFjaC1vbWFwMi9zZHJjLmgiCiAjZW5kaWYKIAogI2RlZmluZSBPTUFQMV9TUkFNX1BBCQkweDIwMDAwMDAwCiAjZGVmaW5lIE9NQVAxX1NSQU1fVkEJCVZNQUxMT0NfRU5ECi0jZGVmaW5lIE9NQVAyX1NSQU1fUEEJCTB4NDAyMDAwMDAKLSNkZWZpbmUgT01BUDJfU1JBTV9QVUJfUEEJMHg0MDIwZjgwMAorI2RlZmluZSBPTUFQMl9TUkFNX1BVQl9QQQkoT01BUDJfU1JBTV9QQSArIDB4ZjgwMCkKICNkZWZpbmUgT01BUDJfU1JBTV9WQQkJMHhmZTQwMDAwMAogI2RlZmluZSBPTUFQMl9TUkFNX1BVQl9WQQkoT01BUDJfU1JBTV9WQSArIDB4ODAwKQotI2RlZmluZSBPTUFQM19TUkFNX1BBICAgICAgICAgICAweDQwMjAwMDAwCiAjZGVmaW5lIE9NQVAzX1NSQU1fVkEgICAgICAgICAgIDB4ZmU0MDAwMDAKLSNkZWZpbmUgT01BUDNfU1JBTV9QVUJfUEEgICAgICAgMHg0MDIwODAwMAorI2RlZmluZSBPTUFQM19TUkFNX1BVQl9QQSAgICAgICAoT01BUDNfU1JBTV9QQSArIDB4ODAwMCkKICNkZWZpbmUgT01BUDNfU1JBTV9QVUJfVkEgICAgICAgKE9NQVAzX1NSQU1fVkEgKyAweDgwMDApCi0jZGVmaW5lIE9NQVA0X1NSQU1fUEEJCTB4NDAzMDAwMDAKICNkZWZpbmUgT01BUDRfU1JBTV9WQQkJMHhmZTQwMDAwMAogI2RlZmluZSBPTUFQNF9TUkFNX1BVQl9QQQkoT01BUDRfU1JBTV9QQSArIDB4NDAwMCkKICNkZWZpbmUgT01BUDRfU1JBTV9QVUJfVkEJKE9NQVA0X1NSQU1fVkEgKyAweDQwMDApCkBAIC0yNzAsNyArMjY4LDcgQEAKIAlfb21hcF9zcmFtX3JlcHJvZ3JhbV9jbG9jayhkcGxsY3RsLCBja2N0bCk7CiB9CiAKLWludCBfX2luaXQgb21hcDFfc3JhbV9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBvbWFwMV9zcmFtX2luaXQodm9pZCkKIHsKIAlfb21hcF9zcmFtX3JlcHJvZ3JhbV9jbG9jayA9CiAJCQlvbWFwX3NyYW1fcHVzaChvbWFwMV9zcmFtX3JlcHJvZ3JhbV9jbG9jaywKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb3Jpb24vdGltZS5jIGIvYXJjaC9hcm0vcGxhdC1vcmlvbi90aW1lLmMKaW5kZXggNzE1YTMwMS4uYzNkYTI0NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vcmlvbi90aW1lLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vcmlvbi90aW1lLmMKQEAgLTEzLDExICsxMywxMSBAQAogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9jbnQzMl90b182My5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvY2xvY2tjaGlwcy5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGFzbS9zY2hlZF9jbG9jay5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KICNpbmNsdWRlIDxtYWNoL2JyaWRnZS1yZWdzLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgpAQCAtNDQsNTIgKzQ0LDI2IEBACiAKIC8qCiAgKiBPcmlvbidzIHNjaGVkX2Nsb2NrIGltcGxlbWVudGF0aW9uLiBJdCBoYXMgYSByZXNvbHV0aW9uIG9mCi0gKiBhdCBsZWFzdCA3LjVucyAoMTMzTUh6IFRDTEspIGFuZCBhIG1heGltdW0gdmFsdWUgb2YgODM0IGRheXMuCi0gKgotICogQmVjYXVzZSB0aGUgaGFyZHdhcmUgdGltZXIgcGVyaW9kIGlzIHF1aXRlIHNob3J0ICgyMSBzZWNzIGlmCi0gKiAyMDBNSHogVENMSykgYW5kIGJlY2F1c2UgY250MzJfdG9fNjMoKSBuZWVkcyB0byBiZSBjYWxsZWQgYXQKLSAqIGxlYXN0IG9uY2UgcGVyIGhhbGYgcGVyaW9kIHRvIHdvcmsgcHJvcGVybHksIGEga2VybmVsIHRpbWVyIGlzCi0gKiBzZXQgdXAgdG8gZW5zdXJlIHRoaXMgcmVxdWlyZW1lbnQgaXMgYWx3YXlzIG1ldC4KKyAqIGF0IGxlYXN0IDcuNW5zICgxMzNNSHogVENMSykuCiAgKi8KLSNkZWZpbmUgVENMSzJOU19TQ0FMRV9GQUNUT1IgOAorc3RhdGljIERFRklORV9DTE9DS19EQVRBKGNkKTsKIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgdGNsazJuc19zY2FsZTsKLQotdW5zaWduZWQgbG9uZyBsb25nIHNjaGVkX2Nsb2NrKHZvaWQpCit1bnNpZ25lZCBsb25nIGxvbmcgbm90cmFjZSBzY2hlZF9jbG9jayh2b2lkKQogewotCXVuc2lnbmVkIGxvbmcgbG9uZyB2ID0gY250MzJfdG9fNjMoMHhmZmZmZmZmZiAtIHJlYWRsKFRJTUVSMF9WQUwpKTsKLQlyZXR1cm4gKHYgKiB0Y2xrMm5zX3NjYWxlKSA+PiBUQ0xLMk5TX1NDQUxFX0ZBQ1RPUjsKKwl1MzIgY3ljID0gMHhmZmZmZmZmZiAtIHJlYWRsKFRJTUVSMF9WQUwpOworCXJldHVybiBjeWNfdG9fc2NoZWRfY2xvY2soJmNkLCBjeWMsICh1MzIpfjApOwogfQogCi1zdGF0aWMgc3RydWN0IHRpbWVyX2xpc3QgY250MzJfdG9fNjNfa2VlcHdhcm1fdGltZXI7CiAKLXN0YXRpYyB2b2lkIGNudDMyX3RvXzYzX2tlZXB3YXJtKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3N0YXRpYyB2b2lkIG5vdHJhY2Ugb3Jpb25fdXBkYXRlX3NjaGVkX2Nsb2NrKHZvaWQpCiB7Ci0JbW9kX3RpbWVyKCZjbnQzMl90b182M19rZWVwd2FybV90aW1lciwgcm91bmRfamlmZmllcyhqaWZmaWVzICsgZGF0YSkpOwotCSh2b2lkKSBzY2hlZF9jbG9jaygpOworCXUzMiBjeWMgPSAweGZmZmZmZmZmIC0gcmVhZGwoVElNRVIwX1ZBTCk7CisJdXBkYXRlX3NjaGVkX2Nsb2NrKCZjZCwgY3ljLCAodTMyKX4wKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IHNldHVwX3NjaGVkX2Nsb2NrKHVuc2lnbmVkIGxvbmcgdGNsaykKIHsKLQl1bnNpZ25lZCBsb25nIGxvbmcgdjsKLQl1bnNpZ25lZCBsb25nIGRhdGE7Ci0KLQl2ID0gTlNFQ19QRVJfU0VDOwotCXYgPDw9IFRDTEsyTlNfU0NBTEVfRkFDVE9SOwotCXYgKz0gdGNsay8yOwotCWRvX2Rpdih2LCB0Y2xrKTsKLQkvKgotCSAqIFdlIHdhbnQgYW4gZXZlbiB2YWx1ZSB0byBhdXRvbWF0aWNhbGx5IGNsZWFyIHRoZSB0b3AgYml0Ci0JICogcmV0dXJuZWQgYnkgY250MzJfdG9fNjMoKSB3aXRob3V0IGFuIGFkZGl0aW9uYWwgcnVuIHRpbWUKLQkgKiBpbnN0cnVjdGlvbi4gU28gaWYgdGhlIExTQiBpcyAxIHRoZW4gcm91bmQgaXQgdXAuCi0JICovCi0JaWYgKHYgJiAxKQotCQl2Kys7Ci0JdGNsazJuc19zY2FsZSA9IHY7Ci0KLQlkYXRhID0gKDB4ZmZmZmZmZmZVTCAvIHRjbGsgLyAyIC0gMikgKiBIWjsKLQlzZXR1cF90aW1lcigmY250MzJfdG9fNjNfa2VlcHdhcm1fdGltZXIsIGNudDMyX3RvXzYzX2tlZXB3YXJtLCBkYXRhKTsKLQltb2RfdGltZXIoJmNudDMyX3RvXzYzX2tlZXB3YXJtX3RpbWVyLCByb3VuZF9qaWZmaWVzKGppZmZpZXMgKyBkYXRhKSk7CisJaW5pdF9zY2hlZF9jbG9jaygmY2QsIG9yaW9uX3VwZGF0ZV9zY2hlZF9jbG9jaywgMzIsIHRjbGspOwogfQogCiAvKgpAQCAtMTAyLDcgKzc2LDYgQEAKIAogc3RhdGljIHN0cnVjdCBjbG9ja3NvdXJjZSBvcmlvbl9jbGtzcmMgPSB7CiAJLm5hbWUJCT0gIm9yaW9uX2Nsb2Nrc291cmNlIiwKLQkuc2hpZnQJCT0gMjAsCiAJLnJhdGluZwkJPSAzMDAsCiAJLnJlYWQJCT0gb3Jpb25fY2xrc3JjX3JlYWQsCiAJLm1hc2sJCT0gQ0xPQ0tTT1VSQ0VfTUFTSygzMiksCkBAIC0yNDUsOCArMjE4LDcgQEAKIAl3cml0ZWwodSAmIH5CUklER0VfSU5UX1RJTUVSMCwgQlJJREdFX01BU0spOwogCXUgPSByZWFkbChUSU1FUl9DVFJMKTsKIAl3cml0ZWwodSB8IFRJTUVSMF9FTiB8IFRJTUVSMF9SRUxPQURfRU4sIFRJTUVSX0NUUkwpOwotCW9yaW9uX2Nsa3NyYy5tdWx0ID0gY2xvY2tzb3VyY2VfaHoybXVsdCh0Y2xrLCBvcmlvbl9jbGtzcmMuc2hpZnQpOwotCWNsb2Nrc291cmNlX3JlZ2lzdGVyKCZvcmlvbl9jbGtzcmMpOworCWNsb2Nrc291cmNlX3JlZ2lzdGVyX2h6KCZvcmlvbl9jbGtzcmMsIHRjbGspOwogCiAJLyoKIAkgKiBTZXR1cCBjbG9ja2V2ZW50IHRpbWVyIChpbnRlcnJ1cHQtZHJpdmVuLikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtcHhhL01ha2VmaWxlIGIvYXJjaC9hcm0vcGxhdC1weGEvTWFrZWZpbGUKaW5kZXggNGFhY2RkMS4uM2FjYTViYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1weGEvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vcGxhdC1weGEvTWFrZWZpbGUKQEAgLTYsNiArNiw3IEBACiAKIG9iai0kKENPTkZJR19HRU5FUklDX0dQSU8pCSs9IGdwaW8ubwogb2JqLSQoQ09ORklHX1BYQTN4eCkJCSs9IG1mcC5vCitvYmotJChDT05GSUdfUFhBOTV4KQkJKz0gbWZwLm8KIG9iai0kKENPTkZJR19BUkNIX01NUCkJCSs9IG1mcC5vCiAKIG9iai0kKENPTkZJR19IQVZFX1BXTSkJCSs9IHB3bS5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXB4YS9pbmNsdWRlL3BsYXQvbWZwLmggYi9hcmNoL2FybS9wbGF0LXB4YS9pbmNsdWRlL3BsYXQvbWZwLmgKaW5kZXggOWU2MDRjOC4uNzVmNjU2NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1weGEvaW5jbHVkZS9wbGF0L21mcC5oCisrKyBiL2FyY2gvYXJtL3BsYXQtcHhhL2luY2x1ZGUvcGxhdC9tZnAuaApAQCAtNDIzLDcgKzQyMyw3IEBACiAJKChNRlBfQ0ZHX0RFRkFVTFQgJiB+KE1GUF9BRl9NQVNLIHwgTUZQX0RTX01BU0sgfCBNRlBfTFBNX1NUQVRFX01BU0spKSB8XAogCSAoTUZQX1BJTihNRlBfUElOXyMjcGluKSB8IE1GUF8jI2FmIHwgTUZQXyMjZHJ2IHwgTUZQX0xQTV8jI2xwbSkpCiAKLSNpZiBkZWZpbmVkKENPTkZJR19QWEEzeHgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfTU1QKQorI2lmIGRlZmluZWQoQ09ORklHX1BYQTN4eCkgfHwgZGVmaW5lZChDT05GSUdfUFhBOTV4KSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX01NUCkKIC8qCiAgKiBlYWNoIE1GUCBwaW4gd2lsbCBoYXZlIGEgTUZQUiByZWdpc3Rlciwgc2luY2UgdGhlIG9mZnNldCBvZiB0aGUKICAqIHJlZ2lzdGVyIHZhcmllcyBiZXR3ZWVuIHByb2Nlc3NvcnMsIHRoZSBwcm9jZXNzb3Igc3BlY2lmaWMgY29kZQpAQCAtNDcwLDYgKzQ3MCw2IEBACiB2b2lkIG1mcF9jb25maWcodW5zaWduZWQgbG9uZyAqbWZwX2NmZ3MsIGludCBudW0pOwogdm9pZCBtZnBfY29uZmlnX3J1bih2b2lkKTsKIHZvaWQgbWZwX2NvbmZpZ19scG0odm9pZCk7Ci0jZW5kaWYgLyogQ09ORklHX1BYQTN4eCB8fCBDT05GSUdfQVJDSF9NTVAgKi8KKyNlbmRpZiAvKiBDT05GSUdfUFhBM3h4IHx8IENPTkZJR19QWEE5NXggfHwgQ09ORklHX0FSQ0hfTU1QICovCiAKICNlbmRpZiAvKiBfX0FTTV9QTEFUX01GUF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXB4YS9pbmNsdWRlL3BsYXQvc3NwLmggYi9hcmNoL2FybS9wbGF0LXB4YS9pbmNsdWRlL3BsYXQvc3NwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlNDMxNTAuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vcGxhdC1weGEvaW5jbHVkZS9wbGF0L3NzcC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTg2ICswLDAgQEAKLS8qCi0gKiAgc3NwLmgKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzIFJ1c3NlbGwgS2luZywgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgUFhBIENQVS9TU1AgcG9ydHM6LQotICoKLSAqICAgICAgIFBYQTI1MCAgICAgU1NQCi0gKiAgICAgICBQWEEyNTUgICAgIFNTUCwgTlNTUAotICogICAgICAgUFhBMjZ4ICAgICBTU1AsIE5TU1AsIEFTU1AKLSAqICAgICAgIFBYQTI3eCAgICAgU1NQMSwgU1NQMiwgU1NQMwotICogICAgICAgUFhBM3h4ICAgICBTU1AxLCBTU1AyLCBTU1AzLCBTU1A0Ci0gKi8KLQotI2lmbmRlZiBfX0FTTV9BUkNIX1NTUF9ICi0jZGVmaW5lIF9fQVNNX0FSQ0hfU1NQX0gKLQotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotCi0vKgotICogU1NQIFNlcmlhbCBQb3J0IFJlZ2lzdGVycwotICogUFhBMjUwLCBQWEEyNTUsIFBYQTI2eCBhbmQgUFhBMjd4IFNTUCBjb250cm9sbGVycyBhcmUgYWxsIHNsaWdodGx5IGRpZmZlcmVudC4KLSAqIFBYQTI1NSwgUFhBMjZ4IGFuZCBQWEEyN3ggaGF2ZSBleHRyYSBwb3J0cywgcmVnaXN0ZXJzIGFuZCBiaXRzLgotICovCi0KLSNkZWZpbmUgU1NDUjAJCSgweDAwKSAgLyogU1NQIENvbnRyb2wgUmVnaXN0ZXIgMCAqLwotI2RlZmluZSBTU0NSMQkJKDB4MDQpICAvKiBTU1AgQ29udHJvbCBSZWdpc3RlciAxICovCi0jZGVmaW5lIFNTU1IJCSgweDA4KSAgLyogU1NQIFN0YXR1cyBSZWdpc3RlciAqLwotI2RlZmluZSBTU0lUUgkJKDB4MEMpICAvKiBTU1AgSW50ZXJydXB0IFRlc3QgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgU1NEUgkJKDB4MTApICAvKiBTU1AgRGF0YSBXcml0ZS9EYXRhIFJlYWQgUmVnaXN0ZXIgKi8KLQotI2RlZmluZSBTU1RPCQkoMHgyOCkgIC8qIFNTUCBUaW1lIE91dCBSZWdpc3RlciAqLwotI2RlZmluZSBTU1BTUAkJKDB4MkMpICAvKiBTU1AgUHJvZ3JhbW1hYmxlIFNlcmlhbCBQcm90b2NvbCAqLwotI2RlZmluZSBTU1RTQQkJKDB4MzApICAvKiBTU1AgVHggVGltZXNsb3QgQWN0aXZlICovCi0jZGVmaW5lIFNTUlNBCQkoMHgzNCkgIC8qIFNTUCBSeCBUaW1lc2xvdCBBY3RpdmUgKi8KLSNkZWZpbmUgU1NUU1MJCSgweDM4KSAgLyogU1NQIFRpbWVzbG90IFN0YXR1cyAqLwotI2RlZmluZSBTU0FDRAkJKDB4M0MpICAvKiBTU1AgQXVkaW8gQ2xvY2sgRGl2aWRlciAqLwotI2RlZmluZSBTU0FDREQJCSgweDQwKQkvKiBTU1AgQXVkaW8gQ2xvY2sgRGl0aGVyIERpdmlkZXIgKi8KLQotLyogQ29tbW9uIFBYQTJ4eCBiaXRzIGZpcnN0ICovCi0jZGVmaW5lIFNTQ1IwX0RTUwkoMHgwMDAwMDAwZikJLyogRGF0YSBTaXplIFNlbGVjdCAobWFzaykgKi8KLSNkZWZpbmUgU1NDUjBfRGF0YVNpemUoeCkgICgoeCkgLSAxKQkvKiBEYXRhIFNpemUgU2VsZWN0IFs0Li4xNl0gKi8KLSNkZWZpbmUgU1NDUjBfRlJGCSgweDAwMDAwMDMwKQkvKiBGUmFtZSBGb3JtYXQgKG1hc2spICovCi0jZGVmaW5lIFNTQ1IwX01vdG9yb2xhCSgweDAgPDwgNCkJLyogTW90b3JvbGEncyBTZXJpYWwgUGVyaXBoZXJhbCBJbnRlcmZhY2UgKFNQSSkgKi8KLSNkZWZpbmUgU1NDUjBfVEkJKDB4MSA8PCA0KQkvKiBUZXhhcyBJbnN0cnVtZW50cycgU3luY2hyb25vdXMgU2VyaWFsIFByb3RvY29sIChTU1ApICovCi0jZGVmaW5lIFNTQ1IwX05hdGlvbmFsCSgweDIgPDwgNCkJLyogTmF0aW9uYWwgTWljcm93aXJlICovCi0jZGVmaW5lIFNTQ1IwX0VDUwkoMSA8PCA2KQkvKiBFeHRlcm5hbCBjbG9jayBzZWxlY3QgKi8KLSNkZWZpbmUgU1NDUjBfU1NFCSgxIDw8IDcpCS8qIFN5bmNocm9ub3VzIFNlcmlhbCBQb3J0IEVuYWJsZSAqLwotI2RlZmluZSBTU0NSMF9TQ1IoeCkJKCh4KSA8PCA4KQkvKiBTZXJpYWwgQ2xvY2sgUmF0ZSAobWFzaykgKi8KLQotLyogUFhBMjd4LCBQWEEzeHggKi8KLSNkZWZpbmUgU1NDUjBfRURTUwkoMSA8PCAyMCkJLyogRXh0ZW5kZWQgZGF0YSBzaXplIHNlbGVjdCAqLwotI2RlZmluZSBTU0NSMF9OQ1MJKDEgPDwgMjEpCS8qIE5ldHdvcmsgY2xvY2sgc2VsZWN0ICovCi0jZGVmaW5lIFNTQ1IwX1JJTQkoMSA8PCAyMikJLyogUmVjZWl2ZSBGSUZPIG92ZXJycnVuIGludGVycnVwdCBtYXNrICovCi0jZGVmaW5lIFNTQ1IwX1RVTQkoMSA8PCAyMykJLyogVHJhbnNtaXQgRklGTyB1bmRlcnJ1biBpbnRlcnJ1cHQgbWFzayAqLwotI2RlZmluZSBTU0NSMF9GUkRDCSgweDA3MDAwMDAwKQkvKiBGcmFtZSByYXRlIGRpdmlkZXIgY29udHJvbCAobWFzaykgKi8KLSNkZWZpbmUgU1NDUjBfU2xvdHNQZXJGcm0oeCkgKCgoeCkgLSAxKSA8PCAyNCkJLyogVGltZSBzbG90cyBwZXIgZnJhbWUgWzEuLjhdICovCi0jZGVmaW5lIFNTQ1IwX0ZQQ0tFCSgxIDw8IDI5KQkvKiBGSUZPIHBhY2tpbmcgZW5hYmxlICovCi0jZGVmaW5lIFNTQ1IwX0FDUwkoMSA8PCAzMCkJLyogQXVkaW8gY2xvY2sgc2VsZWN0ICovCi0jZGVmaW5lIFNTQ1IwX01PRAkoMSA8PCAzMSkJLyogTW9kZSAobm9ybWFsIG9yIG5ldHdvcmspICovCi0KLQotI2RlZmluZSBTU0NSMV9SSUUJKDEgPDwgMCkJLyogUmVjZWl2ZSBGSUZPIEludGVycnVwdCBFbmFibGUgKi8KLSNkZWZpbmUgU1NDUjFfVElFCSgxIDw8IDEpCS8qIFRyYW5zbWl0IEZJRk8gSW50ZXJydXB0IEVuYWJsZSAqLwotI2RlZmluZSBTU0NSMV9MQk0JKDEgPDwgMikJLyogTG9vcC1CYWNrIE1vZGUgKi8KLSNkZWZpbmUgU1NDUjFfU1BPCSgxIDw8IDMpCS8qIE1vdG9yb2xhIFNQSSBTU1BTQ0xLIHBvbGFyaXR5IHNldHRpbmcgKi8KLSNkZWZpbmUgU1NDUjFfU1BICSgxIDw8IDQpCS8qIE1vdG9yb2xhIFNQSSBTU1BTQ0xLIHBoYXNlIHNldHRpbmcgKi8KLSNkZWZpbmUgU1NDUjFfTVdEUwkoMSA8PCA1KQkvKiBNaWNyb3dpcmUgVHJhbnNtaXQgRGF0YSBTaXplICovCi0jZGVmaW5lIFNTQ1IxX1RGVAkoMHgwMDAwMDNjMCkJLyogVHJhbnNtaXQgRklGTyBUaHJlc2hvbGQgKG1hc2spICovCi0jZGVmaW5lIFNTQ1IxX1R4VHJlc2goeCkgKCgoeCkgLSAxKSA8PCA2KSAvKiBsZXZlbCBbMS4uMTZdICovCi0jZGVmaW5lIFNTQ1IxX1JGVAkoMHgwMDAwM2MwMCkJLyogUmVjZWl2ZSBGSUZPIFRocmVzaG9sZCAobWFzaykgKi8KLSNkZWZpbmUgU1NDUjFfUnhUcmVzaCh4KSAoKCh4KSAtIDEpIDw8IDEwKSAvKiBsZXZlbCBbMS4uMTZdICovCi0KLSNkZWZpbmUgU1NTUl9UTkYJKDEgPDwgMikJLyogVHJhbnNtaXQgRklGTyBOb3QgRnVsbCAqLwotI2RlZmluZSBTU1NSX1JORQkoMSA8PCAzKQkvKiBSZWNlaXZlIEZJRk8gTm90IEVtcHR5ICovCi0jZGVmaW5lIFNTU1JfQlNZCSgxIDw8IDQpCS8qIFNTUCBCdXN5ICovCi0jZGVmaW5lIFNTU1JfVEZTCSgxIDw8IDUpCS8qIFRyYW5zbWl0IEZJRk8gU2VydmljZSBSZXF1ZXN0ICovCi0jZGVmaW5lIFNTU1JfUkZTCSgxIDw8IDYpCS8qIFJlY2VpdmUgRklGTyBTZXJ2aWNlIFJlcXVlc3QgKi8KLSNkZWZpbmUgU1NTUl9ST1IJKDEgPDwgNykJLyogUmVjZWl2ZSBGSUZPIE92ZXJydW4gKi8KLQotCi0vKiBleHRyYSBiaXRzIGluIFBYQTI1NSwgUFhBMjZ4IGFuZCBQWEEyN3ggU1NQIHBvcnRzICovCi0jZGVmaW5lIFNTQ1IwX1RJU1NQCQkoMSA8PCA0KQkvKiBUSSBTeW5jIFNlcmlhbCBQcm90b2NvbCAqLwotI2RlZmluZSBTU0NSMF9QU1AJCSgzIDw8IDQpCS8qIFBTUCAtIFByb2dyYW1tYWJsZSBTZXJpYWwgUHJvdG9jb2wgKi8KLSNkZWZpbmUgU1NDUjFfVFRFTFAJCSgxIDw8IDMxKQkvKiBUWEQgVHJpc3RhdGUgRW5hYmxlIExhc3QgUGhhc2UgKi8KLSNkZWZpbmUgU1NDUjFfVFRFCQkoMSA8PCAzMCkJLyogVFhEIFRyaXN0YXRlIEVuYWJsZSAqLwotI2RlZmluZSBTU0NSMV9FQkNFSQkJKDEgPDwgMjkpCS8qIEVuYWJsZSBCaXQgQ291bnQgRXJyb3IgaW50ZXJydXB0ICovCi0jZGVmaW5lIFNTQ1IxX1NDRlIJCSgxIDw8IDI4KQkvKiBTbGF2ZSBDbG9jayBmcmVlIFJ1bm5pbmcgKi8KLSNkZWZpbmUgU1NDUjFfRUNSQQkJKDEgPDwgMjcpCS8qIEVuYWJsZSBDbG9jayBSZXF1ZXN0IEEgKi8KLSNkZWZpbmUgU1NDUjFfRUNSQgkJKDEgPDwgMjYpCS8qIEVuYWJsZSBDbG9jayByZXF1ZXN0IEIgKi8KLSNkZWZpbmUgU1NDUjFfU0NMS0RJUgkJKDEgPDwgMjUpCS8qIFNlcmlhbCBCaXQgUmF0ZSBDbG9jayBEaXJlY3Rpb24gKi8KLSNkZWZpbmUgU1NDUjFfU0ZSTURJUgkJKDEgPDwgMjQpCS8qIEZyYW1lIERpcmVjdGlvbiAqLwotI2RlZmluZSBTU0NSMV9SV09UCQkoMSA8PCAyMykJLyogUmVjZWl2ZSBXaXRob3V0IFRyYW5zbWl0ICovCi0jZGVmaW5lIFNTQ1IxX1RSQUlMCQkoMSA8PCAyMikJLyogVHJhaWxpbmcgQnl0ZSAqLwotI2RlZmluZSBTU0NSMV9UU1JFCQkoMSA8PCAyMSkJLyogVHJhbnNtaXQgU2VydmljZSBSZXF1ZXN0IEVuYWJsZSAqLwotI2RlZmluZSBTU0NSMV9SU1JFCQkoMSA8PCAyMCkJLyogUmVjZWl2ZSBTZXJ2aWNlIFJlcXVlc3QgRW5hYmxlICovCi0jZGVmaW5lIFNTQ1IxX1RJTlRFCQkoMSA8PCAxOSkJLyogUmVjZWl2ZXIgVGltZS1vdXQgSW50ZXJydXB0IGVuYWJsZSAqLwotI2RlZmluZSBTU0NSMV9QSU5URQkJKDEgPDwgMTgpCS8qIFBlcmlwaGVyYWwgVHJhaWxpbmcgQnl0ZSBJbnRlcnVwdCBFbmFibGUgKi8KLSNkZWZpbmUgU1NDUjFfSUZTCQkoMSA8PCAxNikJLyogSW52ZXJ0IEZyYW1lIFNpZ25hbCAqLwotI2RlZmluZSBTU0NSMV9TVFJGCQkoMSA8PCAxNSkJLyogU2VsZWN0IEZJRk8gb3IgRUZXUiAqLwotI2RlZmluZSBTU0NSMV9FRldSCQkoMSA8PCAxNCkJLyogRW5hYmxlIEZJRk8gV3JpdGUvUmVhZCAqLwotCi0jZGVmaW5lIFNTU1JfQkNFCQkoMSA8PCAyMykJLyogQml0IENvdW50IEVycm9yICovCi0jZGVmaW5lIFNTU1JfQ1NTCQkoMSA8PCAyMikJLyogQ2xvY2sgU3luY2hyb25pc2F0aW9uIFN0YXR1cyAqLwotI2RlZmluZSBTU1NSX1RVUgkJKDEgPDwgMjEpCS8qIFRyYW5zbWl0IEZJRk8gVW5kZXIgUnVuICovCi0jZGVmaW5lIFNTU1JfRU9DCQkoMSA8PCAyMCkJLyogRW5kIE9mIENoYWluICovCi0jZGVmaW5lIFNTU1JfVElOVAkJKDEgPDwgMTkpCS8qIFJlY2VpdmVyIFRpbWUtb3V0IEludGVycnVwdCAqLwotI2RlZmluZSBTU1NSX1BJTlQJCSgxIDw8IDE4KQkvKiBQZXJpcGhlcmFsIFRyYWlsaW5nIEJ5dGUgSW50ZXJydXB0ICovCi0KLQotI2RlZmluZSBTU1BTUF9TQ01PREUoeCkJCSgoeCkgPDwgMCkJLyogU2VyaWFsIEJpdCBSYXRlIENsb2NrIE1vZGUgKi8KLSNkZWZpbmUgU1NQU1BfU0ZSTVAJCSgxIDw8IDIpCS8qIFNlcmlhbCBGcmFtZSBQb2xhcml0eSAqLwotI2RlZmluZSBTU1BTUF9FVERTCQkoMSA8PCAzKQkvKiBFbmQgb2YgVHJhbnNmZXIgZGF0YSBTdGF0ZSAqLwotI2RlZmluZSBTU1BTUF9TVFJURExZKHgpCSgoeCkgPDwgNCkJLyogU3RhcnQgRGVsYXkgKi8KLSNkZWZpbmUgU1NQU1BfRE1ZU1RSVCh4KQkoKHgpIDw8IDcpCS8qIER1bW15IFN0YXJ0ICovCi0jZGVmaW5lIFNTUFNQX1NGUk1ETFkoeCkJKCh4KSA8PCA5KQkvKiBTZXJpYWwgRnJhbWUgRGVsYXkgKi8KLSNkZWZpbmUgU1NQU1BfU0ZSTVdEVEgoeCkJKCh4KSA8PCAxNikJLyogU2VyaWFsIEZyYW1lIFdpZHRoICovCi0jZGVmaW5lIFNTUFNQX0RNWVNUT1AoeCkJKCh4KSA8PCAyMykJLyogRHVtbXkgU3RvcCAqLwotI2RlZmluZSBTU1BTUF9GU1JUCQkoMSA8PCAyNSkJLyogRnJhbWUgU3luYyBSZWxhdGl2ZSBUaW1pbmcgKi8KLQotLyogUFhBM3h4ICovCi0jZGVmaW5lIFNTUFNQX0VETVlTVFJUKHgpCSgoeCkgPDwgMjYpICAgICAvKiBFeHRlbmRlZCBEdW1teSBTdGFydCAqLwotI2RlZmluZSBTU1BTUF9FRE1ZU1RPUCh4KQkoKHgpIDw8IDI4KSAgICAgLyogRXh0ZW5kZWQgRHVtbXkgU3RvcCAqLwotI2RlZmluZSBTU1BTUF9USU1JTkdfTUFTSwkoMHg3ZjgwMDFmMCkKLQotI2RlZmluZSBTU0FDRF9TQ0RCCQkoMSA8PCAzKQkvKiBTU1BTWVNDTEsgRGl2aWRlciBCeXBhc3MgKi8KLSNkZWZpbmUgU1NBQ0RfQUNQUyh4KQkJKCh4KSA8PCA0KQkvKiBBdWRpbyBjbG9jayBQTEwgc2VsZWN0ICovCi0jZGVmaW5lIFNTQUNEX0FDRFMoeCkJCSgoeCkgPDwgMCkJLyogQXVkaW8gY2xvY2sgZGl2aWRlciBzZWxlY3QgKi8KLSNkZWZpbmUgU1NBQ0RfU0NEWDgJCSgxIDw8IDcpCS8qIFNZU0NMSyBkaXZpc2lvbiByYXRpbyBzZWxlY3QgKi8KLQotZW51bSBweGFfc3NwX3R5cGUgewotCVNTUF9VTkRFRklORUQgPSAwLAotCVBYQTI1eF9TU1AsICAvKiBweGEgMjEwLCAyNTAsIDI1NSwgMjZ4ICovCi0JUFhBMjV4X05TU1AsIC8qIHB4YSAyNTUsIDI2eCAoaW5jbHVkaW5nIEFTU1ApICovCi0JUFhBMjd4X1NTUCwKLQlQWEExNjhfU1NQLAotfTsKLQotc3RydWN0IHNzcF9kZXZpY2UgewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7Ci0Jc3RydWN0IGxpc3RfaGVhZAlub2RlOwotCi0Jc3RydWN0IGNsawkqY2xrOwotCXZvaWQgX19pb21lbQkqbW1pb19iYXNlOwotCXVuc2lnbmVkIGxvbmcJcGh5c19iYXNlOwotCi0JY29uc3QgY2hhcgkqbGFiZWw7Ci0JaW50CQlwb3J0X2lkOwotCWludAkJdHlwZTsKLQlpbnQJCXVzZV9jb3VudDsKLQlpbnQJCWlycTsKLQlpbnQJCWRyY21yX3J4OwotCWludAkJZHJjbXJfdHg7Ci19OwotCi0vKioKLSAqIHB4YV9zc3Bfd3JpdGVfcmVnIC0gV3JpdGUgdG8gYSBTU1AgcmVnaXN0ZXIKLSAqCi0gKiBAZGV2OiBTU1AgZGV2aWNlIHRvIGFjY2VzcwotICogQHJlZzogUmVnaXN0ZXIgdG8gd3JpdGUgdG8KLSAqIEB2YWw6IFZhbHVlIHRvIGJlIHdyaXR0ZW4uCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBweGFfc3NwX3dyaXRlX3JlZyhzdHJ1Y3Qgc3NwX2RldmljZSAqZGV2LCB1MzIgcmVnLCB1MzIgdmFsKQotewotCV9fcmF3X3dyaXRlbCh2YWwsIGRldi0+bW1pb19iYXNlICsgcmVnKTsKLX0KLQotLyoqCi0gKiBweGFfc3NwX3JlYWRfcmVnIC0gUmVhZCBmcm9tIGEgU1NQIHJlZ2lzdGVyCi0gKgotICogQGRldjogU1NQIGRldmljZSB0byBhY2Nlc3MKLSAqIEByZWc6IFJlZ2lzdGVyIHRvIHJlYWQgZnJvbQotICovCi1zdGF0aWMgaW5saW5lIHUzMiBweGFfc3NwX3JlYWRfcmVnKHN0cnVjdCBzc3BfZGV2aWNlICpkZXYsIHUzMiByZWcpCi17Ci0JcmV0dXJuIF9fcmF3X3JlYWRsKGRldi0+bW1pb19iYXNlICsgcmVnKTsKLX0KLQotc3RydWN0IHNzcF9kZXZpY2UgKnB4YV9zc3BfcmVxdWVzdChpbnQgcG9ydCwgY29uc3QgY2hhciAqbGFiZWwpOwotdm9pZCBweGFfc3NwX2ZyZWUoc3RydWN0IHNzcF9kZXZpY2UgKik7Ci0jZW5kaWYgLyogX19BU01fQVJDSF9TU1BfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1weGEvc3NwLmMgYi9hcmNoL2FybS9wbGF0LXB4YS9zc3AuYwppbmRleCBjNjM1N2U1Li41OGI3OTgwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXB4YS9zc3AuYworKysgYi9hcmNoL2FybS9wbGF0LXB4YS9zc3AuYwpAQCAtMjgsMTEgKzI4LDExIEBACiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3B4YTJ4eF9zcGkuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxwbGF0L3NzcC5oPgogCiBzdGF0aWMgREVGSU5FX01VVEVYKHNzcF9sb2NrKTsKIHN0YXRpYyBMSVNUX0hFQUQoc3NwX2xpc3QpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zcGVhci9pbmNsdWRlL3BsYXQvY2xvY2suaCBiL2FyY2gvYXJtL3BsYXQtc3BlYXIvaW5jbHVkZS9wbGF0L2Nsb2NrLmgKaW5kZXggMjk4YmFmYy4uMjU3MjI2MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zcGVhci9pbmNsdWRlL3BsYXQvY2xvY2suaAorKysgYi9hcmNoL2FybS9wbGF0LXNwZWFyL2luY2x1ZGUvcGxhdC9jbG9jay5oCkBAIC0xNSw3ICsxNSw3IEBACiAjZGVmaW5lIF9fUExBVF9DTE9DS19ICiAKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8YXNtL2Nsa2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKIC8qIGNsayBzdHJ1Y3R1cmUgZmxhZ3MgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc3BlYXIvaW5jbHVkZS9wbGF0L2tleWJvYXJkLmggYi9hcmNoL2FybS9wbGF0LXNwZWFyL2luY2x1ZGUvcGxhdC9rZXlib2FyZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4YjUzOTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXNwZWFyL2luY2x1ZGUvcGxhdC9rZXlib2FyZC5oCkBAIC0wLDAgKzEsMTQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFNUIE1pY3JvZWxlY3Ryb25pY3MKKyAqIFJhamVldiBLdW1hcjxyYWplZXYtZGxoLmt1bWFyQHN0LmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKyNpZm5kZWYgX19QTEFUX0tFWUJPQVJEX0gKKyNkZWZpbmUgX19QTEFUX0tFWUJPQVJEX0gKKworI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQvbWF0cml4X2tleXBhZC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNkZWZpbmUgREVDTEFSRV9LRVlNQVAoX25hbWUpIFwKK2ludCBfbmFtZVtdID0geyBcCisJS0VZKDAsIDAsIEtFWV9FU0MpLCBcCisJS0VZKDAsIDEsIEtFWV8xKSwgXAorCUtFWSgwLCAyLCBLRVlfMiksIFwKKwlLRVkoMCwgMywgS0VZXzMpLCBcCisJS0VZKDAsIDQsIEtFWV80KSwgXAorCUtFWSgwLCA1LCBLRVlfNSksIFwKKwlLRVkoMCwgNiwgS0VZXzYpLCBcCisJS0VZKDAsIDcsIEtFWV83KSwgXAorCUtFWSgwLCA4LCBLRVlfOCksIFwKKwlLRVkoMSwgMCwgS0VZXzkpLCBcCisJS0VZKDEsIDEsIEtFWV9NSU5VUyksIFwKKwlLRVkoMSwgMiwgS0VZX0VRVUFMKSwgXAorCUtFWSgxLCAzLCBLRVlfQkFDS1NQQUNFKSwgXAorCUtFWSgxLCA0LCBLRVlfVEFCKSwgXAorCUtFWSgxLCA1LCBLRVlfUSksIFwKKwlLRVkoMSwgNiwgS0VZX1cpLCBcCisJS0VZKDEsIDcsIEtFWV9FKSwgXAorCUtFWSgxLCA4LCBLRVlfUiksIFwKKwlLRVkoMiwgMCwgS0VZX1QpLCBcCisJS0VZKDIsIDEsIEtFWV9ZKSwgXAorCUtFWSgyLCAyLCBLRVlfVSksIFwKKwlLRVkoMiwgMywgS0VZX0kpLCBcCisJS0VZKDIsIDQsIEtFWV9PKSwgXAorCUtFWSgyLCA1LCBLRVlfUCksIFwKKwlLRVkoMiwgNiwgS0VZX0xFRlRCUkFDRSksIFwKKwlLRVkoMiwgNywgS0VZX1JJR0hUQlJBQ0UpLCBcCisJS0VZKDIsIDgsIEtFWV9FTlRFUiksIFwKKwlLRVkoMywgMCwgS0VZX0xFRlRDVFJMKSwgXAorCUtFWSgzLCAxLCBLRVlfQSksIFwKKwlLRVkoMywgMiwgS0VZX1MpLCBcCisJS0VZKDMsIDMsIEtFWV9EKSwgXAorCUtFWSgzLCA0LCBLRVlfRiksIFwKKwlLRVkoMywgNSwgS0VZX0cpLCBcCisJS0VZKDMsIDYsIEtFWV9IKSwgXAorCUtFWSgzLCA3LCBLRVlfSiksIFwKKwlLRVkoMywgOCwgS0VZX0spLCBcCisJS0VZKDQsIDAsIEtFWV9MKSwgXAorCUtFWSg0LCAxLCBLRVlfU0VNSUNPTE9OKSwgXAorCUtFWSg0LCAyLCBLRVlfQVBPU1RST1BIRSksIFwKKwlLRVkoNCwgMywgS0VZX0dSQVZFKSwgXAorCUtFWSg0LCA0LCBLRVlfTEVGVFNISUZUKSwgXAorCUtFWSg0LCA1LCBLRVlfQkFDS1NMQVNIKSwgXAorCUtFWSg0LCA2LCBLRVlfWiksIFwKKwlLRVkoNCwgNywgS0VZX1gpLCBcCisJS0VZKDQsIDgsIEtFWV9DKSwgXAorCUtFWSg0LCAwLCBLRVlfTCksIFwKKwlLRVkoNCwgMSwgS0VZX1NFTUlDT0xPTiksIFwKKwlLRVkoNCwgMiwgS0VZX0FQT1NUUk9QSEUpLCBcCisJS0VZKDQsIDMsIEtFWV9HUkFWRSksIFwKKwlLRVkoNCwgNCwgS0VZX0xFRlRTSElGVCksIFwKKwlLRVkoNCwgNSwgS0VZX0JBQ0tTTEFTSCksIFwKKwlLRVkoNCwgNiwgS0VZX1opLCBcCisJS0VZKDQsIDcsIEtFWV9YKSwgXAorCUtFWSg0LCA4LCBLRVlfQyksIFwKKwlLRVkoNCwgMCwgS0VZX0wpLCBcCisJS0VZKDQsIDEsIEtFWV9TRU1JQ09MT04pLCBcCisJS0VZKDQsIDIsIEtFWV9BUE9TVFJPUEhFKSwgXAorCUtFWSg0LCAzLCBLRVlfR1JBVkUpLCBcCisJS0VZKDQsIDQsIEtFWV9MRUZUU0hJRlQpLCBcCisJS0VZKDQsIDUsIEtFWV9CQUNLU0xBU0gpLCBcCisJS0VZKDQsIDYsIEtFWV9aKSwgXAorCUtFWSg0LCA3LCBLRVlfWCksIFwKKwlLRVkoNCwgOCwgS0VZX0MpLCBcCisJS0VZKDUsIDAsIEtFWV9WKSwgXAorCUtFWSg1LCAxLCBLRVlfQiksIFwKKwlLRVkoNSwgMiwgS0VZX04pLCBcCisJS0VZKDUsIDMsIEtFWV9NKSwgXAorCUtFWSg1LCA0LCBLRVlfQ09NTUEpLCBcCisJS0VZKDUsIDUsIEtFWV9ET1QpLCBcCisJS0VZKDUsIDYsIEtFWV9TTEFTSCksIFwKKwlLRVkoNSwgNywgS0VZX1JJR0hUU0hJRlQpLCBcCisJS0VZKDUsIDgsIEtFWV9LUEFTVEVSSVNLKSwgXAorCUtFWSg2LCAwLCBLRVlfTEVGVEFMVCksIFwKKwlLRVkoNiwgMSwgS0VZX1NQQUNFKSwgXAorCUtFWSg2LCAyLCBLRVlfQ0FQU0xPQ0spLCBcCisJS0VZKDYsIDMsIEtFWV9GMSksIFwKKwlLRVkoNiwgNCwgS0VZX0YyKSwgXAorCUtFWSg2LCA1LCBLRVlfRjMpLCBcCisJS0VZKDYsIDYsIEtFWV9GNCksIFwKKwlLRVkoNiwgNywgS0VZX0Y1KSwgXAorCUtFWSg2LCA4LCBLRVlfRjYpLCBcCisJS0VZKDcsIDAsIEtFWV9GNyksIFwKKwlLRVkoNywgMSwgS0VZX0Y4KSwgXAorCUtFWSg3LCAyLCBLRVlfRjkpLCBcCisJS0VZKDcsIDMsIEtFWV9GMTApLCBcCisJS0VZKDcsIDQsIEtFWV9OVU1MT0NLKSwgXAorCUtFWSg3LCA1LCBLRVlfU0NST0xMTE9DSyksIFwKKwlLRVkoNywgNiwgS0VZX0tQNyksIFwKKwlLRVkoNywgNywgS0VZX0tQOCksIFwKKwlLRVkoNywgOCwgS0VZX0tQOSksIFwKKwlLRVkoOCwgMCwgS0VZX0tQTUlOVVMpLCBcCisJS0VZKDgsIDEsIEtFWV9LUDQpLCBcCisJS0VZKDgsIDIsIEtFWV9LUDUpLCBcCisJS0VZKDgsIDMsIEtFWV9LUDYpLCBcCisJS0VZKDgsIDQsIEtFWV9LUFBMVVMpLCBcCisJS0VZKDgsIDUsIEtFWV9LUDEpLCBcCisJS0VZKDgsIDYsIEtFWV9LUDIpLCBcCisJS0VZKDgsIDcsIEtFWV9LUDMpLCBcCisJS0VZKDgsIDgsIEtFWV9LUDApLCBcCit9CisKKy8qKgorICogc3RydWN0IGtiZF9wbGF0Zm9ybV9kYXRhIC0gc3BlYXIga2V5Ym9hcmQgcGxhdGZvcm0gZGF0YQorICoga2V5bWFwOiBwb2ludGVyIHRvIGtleW1hcCBkYXRhICh0YWJsZSBhbmQgc2l6ZSkKKyAqIHJlcDogZW5hYmxlcyBrZXkgYXV0b3JlcGVhdAorICoKKyAqIFRoaXMgc3RydWN0dXJlIGlzIHN1cHBvc2VkIHRvIGJlIHVzZWQgYnkgcGxhdGZvcm0gY29kZSB0byBzdXBwbHkKKyAqIGtleW1hcHMgdG8gZHJpdmVycyB0aGF0IGltcGxlbWVudCBrZXlib2FyZHMuCisgKi8KK3N0cnVjdCBrYmRfcGxhdGZvcm1fZGF0YSB7CisJY29uc3Qgc3RydWN0IG1hdHJpeF9rZXltYXBfZGF0YSAqa2V5bWFwOworCWJvb2wgcmVwOworfTsKKworLyogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHNldCBwbGF0Zm9ybSBkYXRhIGZpZWxkIG9mIHBkZXYtPmRldiAqLworc3RhdGljIGlubGluZSB2b2lkCitrYmRfc2V0X3BsYXRfZGF0YShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBzdHJ1Y3Qga2JkX3BsYXRmb3JtX2RhdGEgKmRhdGEpCit7CisJcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEgPSBkYXRhOworfQorCisjZW5kaWYgLyogX19QTEFUX0tFWUJPQVJEX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc3BlYXIvdGltZS5jIGIvYXJjaC9hcm0vcGxhdC1zcGVhci90aW1lLmMKaW5kZXggYWIyMTE2NS4uODM5Yzg4ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zcGVhci90aW1lLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zcGVhci90aW1lLmMKQEAgLTgxLDggKzgxLDYgQEAKIAkucmF0aW5nID0gMjAwLAkJLyogaXRzIGEgcHJldHR5IGRlY2VudCBjbG9jayAqLwogCS5yZWFkID0gY2xvY2tzb3VyY2VfcmVhZF9jeWNsZXMsCiAJLm1hc2sgPSAweEZGRkYsCQkvKiAxNiBiaXRzICovCi0JLm11bHQgPSAwLAkJLyogdG8gYmUgY29tcHV0ZWQgKi8KLQkuc2hpZnQgPSAwLAkJLyogdG8gYmUgY29tcHV0ZWQgKi8KIAkuZmxhZ3MgPSBDTE9DS19TT1VSQ0VfSVNfQ09OVElOVU9VUywKIH07CiAKQEAgLTEwNSwxMCArMTAzLDggQEAKIAl2YWwgfD0gQ1RSTF9FTkFCTEUgOwogCXdyaXRldyh2YWwsIGdwdF9iYXNlICsgQ1IoQ0xLU1JDKSk7CiAKLQljbG9ja3NvdXJjZV9jYWxjX211bHRfc2hpZnQoJmNsa3NyYywgdGlja19yYXRlLCBTUEVBUl9NSU5fUkFOR0UpOwotCiAJLyogcmVnaXN0ZXIgdGhlIGNsb2Nrc291cmNlICovCi0JY2xvY2tzb3VyY2VfcmVnaXN0ZXIoJmNsa3NyYyk7CisJY2xvY2tzb3VyY2VfcmVnaXN0ZXJfaHooJmNsa3NyYywgdGlja19yYXRlKTsKIH0KIAogc3RhdGljIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgY2xrZXZ0ID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zdG1wM3h4eC9jbG9jay5jIGIvYXJjaC9hcm0vcGxhdC1zdG1wM3h4eC9jbG9jay5jCmluZGV4IGU1OTNhMmEuLjJlNzEyZTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtc3RtcDN4eHgvY2xvY2suYworKysgYi9hcmNoL2FybS9wbGF0LXN0bXAzeHh4L2Nsb2NrLmMKQEAgLTI1LDkgKzI1LDkgQEAKICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvY2xrZGV2Lmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9jbGtkZXYuaD4KICNpbmNsdWRlIDxtYWNoL3BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWNsa2N0cmwuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zdG1wM3h4eC90aW1lci5jIGIvYXJjaC9hcm0vcGxhdC1zdG1wM3h4eC90aW1lci5jCmluZGV4IDA2M2M3YmMuLmMzOTU2MzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtc3RtcDN4eHgvdGltZXIuYworKysgYi9hcmNoL2FybS9wbGF0LXN0bXAzeHh4L3RpbWVyLmMKQEAgLTg5LDcgKzg5LDYgQEAKIAkucmF0aW5nICAgICAgICAgPSAyNTAsCiAJLnJlYWQgICAgICAgICAgID0gc3RtcDN4eHhfY2xvY2tfcmVhZCwKIAkubWFzayAgICAgICAgICAgPSBDTE9DS1NPVVJDRV9NQVNLKDE2KSwKLQkuc2hpZnQgICAgICAgICAgPSAxMCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVMsCiB9OwogCkBAIC0xMDYsOCArMTA1LDYgQEAKICAqLwogc3RhdGljIHZvaWQgX19pbml0IHN0bXAzeHh4X2luaXRfdGltZXIodm9pZCkKIHsKLQlja3NyY19zdG1wM3h4eC5tdWx0ID0gY2xvY2tzb3VyY2VfaHoybXVsdChDTE9DS19USUNLX1JBVEUsCi0JCQkJY2tzcmNfc3RtcDN4eHguc2hpZnQpOwogCWNrZXZ0X3RpbXJvdC5tdWx0ID0gZGl2X3NjKENMT0NLX1RJQ0tfUkFURSwgTlNFQ19QRVJfU0VDLAogCQkJCWNrZXZ0X3RpbXJvdC5zaGlmdCk7CiAJY2tldnRfdGltcm90Lm1pbl9kZWx0YV9ucyA9IGNsb2NrZXZlbnRfZGVsdGEybnMoMiwgJmNrZXZ0X3RpbXJvdCk7CkBAIC0xNDAsNyArMTM3LDcgQEAKIAogCXNldHVwX2lycShJUlFfVElNRVIwLCAmc3RtcDN4eHhfdGltZXJfaXJxKTsKIAotCWNsb2Nrc291cmNlX3JlZ2lzdGVyKCZja3NyY19zdG1wM3h4eCk7CisJY2xvY2tzb3VyY2VfcmVnaXN0ZXJfaHooJmNrc3JjX3N0bXAzeHh4LCBDTE9DS19USUNLX1JBVEUpOwogCWNsb2NrZXZlbnRzX3JlZ2lzdGVyX2RldmljZSgmY2tldnRfdGltcm90KTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC12ZXJzYXRpbGUvTWFrZWZpbGUgYi9hcmNoL2FybS9wbGF0LXZlcnNhdGlsZS9NYWtlZmlsZQppbmRleCA1Y2Y4OGU4Li4xNmRkZTA4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXZlcnNhdGlsZS9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9wbGF0LXZlcnNhdGlsZS9NYWtlZmlsZQpAQCAtMSw3ICsxLDcgQEAKIG9iai15CTo9IGNsb2NrLm8KLW9iai0kKENPTkZJR19BUk1fVElNRVJfU1A4MDQpICs9IHRpbWVyLXNwLm8KLW9iai0kKENPTkZJR19BUkNIX1JFQUxWSUVXKSArPSBzY2hlZC1jbG9jay5vCi1vYmotJChDT05GSUdfQVJDSF9WRVJTQVRJTEUpICs9IHNjaGVkLWNsb2NrLm8KK2lmbmVxICgkKENPTkZJR19BUkNIX0lOVEVHUkFUT1IpLHkpCitvYmoteQkrPSBzY2hlZC1jbG9jay5vCitlbmRpZgogaWZlcSAoJChDT05GSUdfTEVEU19DTEFTUykseSkKIG9iai0kKENPTkZJR19BUkNIX1JFQUxWSUVXKSArPSBsZWRzLm8KIG9iai0kKENPTkZJR19BUkNIX1ZFUlNBVElMRSkgKz0gbGVkcy5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXZlcnNhdGlsZS9pbmNsdWRlL3BsYXQvc2NoZWRfY2xvY2suaCBiL2FyY2gvYXJtL3BsYXQtdmVyc2F0aWxlL2luY2x1ZGUvcGxhdC9zY2hlZF9jbG9jay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjM2U0ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXZlcnNhdGlsZS9pbmNsdWRlL3BsYXQvc2NoZWRfY2xvY2suaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgQVJNX1BMQVRfU0NIRURfQ0xPQ0tfSAorI2RlZmluZSBBUk1fUExBVF9TQ0hFRF9DTE9DS19ICisKK3ZvaWQgdmVyc2F0aWxlX3NjaGVkX2Nsb2NrX2luaXQodm9pZCBfX2lvbWVtICosIHVuc2lnbmVkIGxvbmcpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtdmVyc2F0aWxlL3NjaGVkLWNsb2NrLmMgYi9hcmNoL2FybS9wbGF0LXZlcnNhdGlsZS9zY2hlZC1jbG9jay5jCmluZGV4IDk3NjhjZjcuLjNkNmE0YzIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtdmVyc2F0aWxlL3NjaGVkLWNsb2NrLmMKKysrIGIvYXJjaC9hcm0vcGxhdC12ZXJzYXRpbGUvc2NoZWQtY2xvY2suYwpAQCAtMTgsMzYgKzE4LDQxIEBACiAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogICovCi0jaW5jbHVkZSA8bGludXgvY250MzJfdG9fNjMuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGFzbS9zY2hlZF9jbG9jay5oPgorI2luY2x1ZGUgPHBsYXQvc2NoZWRfY2xvY2suaD4KIAotI2lmZGVmIFZFUlNBVElMRV9TWVNfQkFTRQotI2RlZmluZSBSRUZDT1VOVEVSCShfX2lvX2FkZHJlc3MoVkVSU0FUSUxFX1NZU19CQVNFKSArIFZFUlNBVElMRV9TWVNfMjRNSHpfT0ZGU0VUKQotI2VuZGlmCi0KLSNpZmRlZiBSRUFMVklFV19TWVNfQkFTRQotI2RlZmluZSBSRUZDT1VOVEVSCShfX2lvX2FkZHJlc3MoUkVBTFZJRVdfU1lTX0JBU0UpICsgUkVBTFZJRVdfU1lTXzI0TUh6X09GRlNFVCkKLSNlbmRpZgorc3RhdGljIERFRklORV9DTE9DS19EQVRBKGNkKTsKK3N0YXRpYyB2b2lkIF9faW9tZW0gKmN0cjsKIAogLyoKLSAqIFRoaXMgaXMgdGhlIFJlYWx2aWV3IGFuZCBWZXJzYXRpbGUgc2NoZWRfY2xvY2sgaW1wbGVtZW50YXRpb24uICBUaGlzCi0gKiBoYXMgYSByZXNvbHV0aW9uIG9mIDQxLjducywgYW5kIGEgbWF4aW11bSB2YWx1ZSBvZiBhYm91dCAzNTU4MyBkYXlzLgotICoKLSAqIFRoZSByZXR1cm4gdmFsdWUgaXMgZ3VhcmFudGVlZCB0byBiZSBtb25vdG9uaWMgaW4gdGhhdCByYW5nZSBhcwotICogbG9uZyBhcyB0aGVyZSBpcyBhbHdheXMgbGVzcyB0aGFuIDg5IHNlY29uZHMgYmV0d2VlbiBzdWNjZXNzaXZlCi0gKiBjYWxscyB0byB0aGlzIGZ1bmN0aW9uLgorICogQ29uc3RhbnRzIGdlbmVyYXRlZCBieSBjbG9ja3NfY2FsY19tdWx0X3NoaWZ0KG0sIHMsIDI0TUh6LCBOU0VDX1BFUl9TRUMsIDYwKS4KKyAqIFRoaXMgZ2l2ZXMgYSByZXNvbHV0aW9uIG9mIGFib3V0IDQxbnMgYW5kIGEgd3JhcCBwZXJpb2Qgb2YgYWJvdXQgMTc4cy4KICAqLwotdW5zaWduZWQgbG9uZyBsb25nIHNjaGVkX2Nsb2NrKHZvaWQpCisjZGVmaW5lIFNDX01VTFQJCTI3OTYyMDI2Njd1CisjZGVmaW5lIFNDX1NISUZUCTI2CisKK3Vuc2lnbmVkIGxvbmcgbG9uZyBub3RyYWNlIHNjaGVkX2Nsb2NrKHZvaWQpCiB7Ci0JdW5zaWduZWQgbG9uZyBsb25nIHYgPSBjbnQzMl90b182MyhyZWFkbChSRUZDT1VOVEVSKSk7CisJaWYgKGN0cikgeworCQl1MzIgY3ljID0gcmVhZGwoY3RyKTsKKwkJcmV0dXJuIGN5Y190b19maXhlZF9zY2hlZF9jbG9jaygmY2QsIGN5YywgKHUzMil+MCwKKwkJCQkJCVNDX01VTFQsIFNDX1NISUZUKTsKKwl9IGVsc2UKKwkJcmV0dXJuIDA7Cit9CiAKLQkvKiB0aGUgPDwxIGdldHMgcmlkIG9mIHRoZSBjbnRfMzJfdG9fNjMgdG9wIGJpdCBzYXZpbmcgb24gYSBiaWMgaW5zbiAqLwotCXYgKj0gMTI1PDwxOwotCWRvX2Rpdih2LCAzPDwxKTsKK3N0YXRpYyB2b2lkIG5vdHJhY2UgdmVyc2F0aWxlX3VwZGF0ZV9zY2hlZF9jbG9jayh2b2lkKQoreworCXUzMiBjeWMgPSByZWFkbChjdHIpOworCXVwZGF0ZV9zY2hlZF9jbG9jaygmY2QsIGN5YywgKHUzMil+MCk7Cit9CiAKLQlyZXR1cm4gdjsKK3ZvaWQgX19pbml0IHZlcnNhdGlsZV9zY2hlZF9jbG9ja19pbml0KHZvaWQgX19pb21lbSAqcmVnLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJY3RyID0gcmVnOworCWluaXRfZml4ZWRfc2NoZWRfY2xvY2soJmNkLCB2ZXJzYXRpbGVfdXBkYXRlX3NjaGVkX2Nsb2NrLAorCQkJICAgICAgIDMyLCByYXRlLCBTQ19NVUxULCBTQ19TSElGVCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXZlcnNhdGlsZS90aW1lci1zcC5jIGIvYXJjaC9hcm0vcGxhdC12ZXJzYXRpbGUvdGltZXItc3AuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmIwZDFjMi4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9wbGF0LXZlcnNhdGlsZS90aW1lci1zcC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTU2ICswLDAgQEAKLS8qCi0gKiAgbGludXgvYXJjaC9hcm0vcGxhdC12ZXJzYXRpbGUvdGltZXItc3AuYwotICoKLSAqICBDb3B5cmlnaHQgKEMpIDE5OTkgLSAyMDAzIEFSTSBMaW1pdGVkCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAwIERlZXAgQmx1ZSBTb2x1dGlvbnMgTHRkCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0jaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9jbG9ja2NoaXBzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLQotI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9hcm1fdGltZXIuaD4KLQotI2luY2x1ZGUgPHBsYXQvdGltZXItc3AuaD4KLQotLyoKLSAqIFRoZXNlIHRpbWVycyBhcmUgY3VycmVudGx5IGFsd2F5cyBzZXR1cCB0byBiZSBjbG9ja2VkIGF0IDFNSHouCi0gKi8KLSNkZWZpbmUgVElNRVJfRlJFUV9LSFoJKDEwMDApCi0jZGVmaW5lIFRJTUVSX1JFTE9BRAkoVElNRVJfRlJFUV9LSFogKiAxMDAwIC8gSFopCi0KLXN0YXRpYyB2b2lkIF9faW9tZW0gKmNsa3NyY19iYXNlOwotCi1zdGF0aWMgY3ljbGVfdCBzcDgwNF9yZWFkKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MpCi17Ci0JcmV0dXJuIH5yZWFkbChjbGtzcmNfYmFzZSArIFRJTUVSX1ZBTFVFKTsKLX0KLQotc3RhdGljIHN0cnVjdCBjbG9ja3NvdXJjZSBjbG9ja3NvdXJjZV9zcDgwNCA9IHsKLQkubmFtZQkJPSAidGltZXIzIiwKLQkucmF0aW5nCQk9IDIwMCwKLQkucmVhZAkJPSBzcDgwNF9yZWFkLAotCS5tYXNrCQk9IENMT0NLU09VUkNFX01BU0soMzIpLAotCS5zaGlmdAkJPSAyMCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVMsCi19OwotCi12b2lkIF9faW5pdCBzcDgwNF9jbG9ja3NvdXJjZV9pbml0KHZvaWQgX19pb21lbSAqYmFzZSkKLXsKLQlzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzID0gJmNsb2Nrc291cmNlX3NwODA0OwotCi0JY2xrc3JjX2Jhc2UgPSBiYXNlOwotCi0JLyogc2V0dXAgdGltZXIgMCBhcyBmcmVlLXJ1bm5pbmcgY2xvY2tzb3VyY2UgKi8KLQl3cml0ZWwoMCwgY2xrc3JjX2Jhc2UgKyBUSU1FUl9DVFJMKTsKLQl3cml0ZWwoMHhmZmZmZmZmZiwgY2xrc3JjX2Jhc2UgKyBUSU1FUl9MT0FEKTsKLQl3cml0ZWwoMHhmZmZmZmZmZiwgY2xrc3JjX2Jhc2UgKyBUSU1FUl9WQUxVRSk7Ci0Jd3JpdGVsKFRJTUVSX0NUUkxfMzJCSVQgfCBUSU1FUl9DVFJMX0VOQUJMRSB8IFRJTUVSX0NUUkxfUEVSSU9ESUMsCi0JCWNsa3NyY19iYXNlICsgVElNRVJfQ1RSTCk7Ci0KLQljcy0+bXVsdCA9IGNsb2Nrc291cmNlX2toejJtdWx0KFRJTUVSX0ZSRVFfS0haLCBjcy0+c2hpZnQpOwotCWNsb2Nrc291cmNlX3JlZ2lzdGVyKGNzKTsKLX0KLQotCi1zdGF0aWMgdm9pZCBfX2lvbWVtICpjbGtldnRfYmFzZTsKLQotLyoKLSAqIElSUSBoYW5kbGVyIGZvciB0aGUgdGltZXIKLSAqLwotc3RhdGljIGlycXJldHVybl90IHNwODA0X3RpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCi17Ci0Jc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0ID0gZGV2X2lkOwotCi0JLyogY2xlYXIgdGhlIGludGVycnVwdCAqLwotCXdyaXRlbCgxLCBjbGtldnRfYmFzZSArIFRJTUVSX0lOVENMUik7Ci0KLQlldnQtPmV2ZW50X2hhbmRsZXIoZXZ0KTsKLQotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotc3RhdGljIHZvaWQgc3A4MDRfc2V0X21vZGUoZW51bSBjbG9ja19ldmVudF9tb2RlIG1vZGUsCi0Jc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0KQotewotCXVuc2lnbmVkIGxvbmcgY3RybCA9IFRJTUVSX0NUUkxfMzJCSVQgfCBUSU1FUl9DVFJMX0lFOwotCi0Jd3JpdGVsKGN0cmwsIGNsa2V2dF9iYXNlICsgVElNRVJfQ1RSTCk7Ci0KLQlzd2l0Y2ggKG1vZGUpIHsKLQljYXNlIENMT0NLX0VWVF9NT0RFX1BFUklPRElDOgotCQl3cml0ZWwoVElNRVJfUkVMT0FELCBjbGtldnRfYmFzZSArIFRJTUVSX0xPQUQpOwotCQljdHJsIHw9IFRJTUVSX0NUUkxfUEVSSU9ESUMgfCBUSU1FUl9DVFJMX0VOQUJMRTsKLQkJYnJlYWs7Ci0KLQljYXNlIENMT0NLX0VWVF9NT0RFX09ORVNIT1Q6Ci0JCS8qIHBlcmlvZCBzZXQsIGFuZCB0aW1lciBlbmFibGVkIGluICduZXh0X2V2ZW50JyBob29rICovCi0JCWN0cmwgfD0gVElNRVJfQ1RSTF9PTkVTSE9UOwotCQlicmVhazsKLQotCWNhc2UgQ0xPQ0tfRVZUX01PREVfVU5VU0VEOgotCWNhc2UgQ0xPQ0tfRVZUX01PREVfU0hVVERPV046Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCi0Jd3JpdGVsKGN0cmwsIGNsa2V2dF9iYXNlICsgVElNRVJfQ1RSTCk7Ci19Ci0KLXN0YXRpYyBpbnQgc3A4MDRfc2V0X25leHRfZXZlbnQodW5zaWduZWQgbG9uZyBuZXh0LAotCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCkKLXsKLQl1bnNpZ25lZCBsb25nIGN0cmwgPSByZWFkbChjbGtldnRfYmFzZSArIFRJTUVSX0NUUkwpOwotCi0Jd3JpdGVsKG5leHQsIGNsa2V2dF9iYXNlICsgVElNRVJfTE9BRCk7Ci0Jd3JpdGVsKGN0cmwgfCBUSU1FUl9DVFJMX0VOQUJMRSwgY2xrZXZ0X2Jhc2UgKyBUSU1FUl9DVFJMKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSBzcDgwNF9jbG9ja2V2ZW50ID0gewotCS5uYW1lCQk9ICJ0aW1lcjAiLAotCS5zaGlmdAkJPSAzMiwKLQkuZmVhdHVyZXMgICAgICAgPSBDTE9DS19FVlRfRkVBVF9QRVJJT0RJQyB8IENMT0NLX0VWVF9GRUFUX09ORVNIT1QsCi0JLnNldF9tb2RlCT0gc3A4MDRfc2V0X21vZGUsCi0JLnNldF9uZXh0X2V2ZW50CT0gc3A4MDRfc2V0X25leHRfZXZlbnQsCi0JLnJhdGluZwkJPSAzMDAsCi0JLmNwdW1hc2sJPSBjcHVfYWxsX21hc2ssCi19OwotCi1zdGF0aWMgc3RydWN0IGlycWFjdGlvbiBzcDgwNF90aW1lcl9pcnEgPSB7Ci0JLm5hbWUJCT0gInRpbWVyIiwKLQkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIgfCBJUlFGX0lSUVBPTEwsCi0JLmhhbmRsZXIJPSBzcDgwNF90aW1lcl9pbnRlcnJ1cHQsCi0JLmRldl9pZAkJPSAmc3A4MDRfY2xvY2tldmVudCwKLX07Ci0KLXZvaWQgX19pbml0IHNwODA0X2Nsb2NrZXZlbnRzX2luaXQodm9pZCBfX2lvbWVtICpiYXNlLCB1bnNpZ25lZCBpbnQgdGltZXJfaXJxKQotewotCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCA9ICZzcDgwNF9jbG9ja2V2ZW50OwotCi0JY2xrZXZ0X2Jhc2UgPSBiYXNlOwotCi0JZXZ0LT5pcnEgPSB0aW1lcl9pcnE7Ci0JZXZ0LT5tdWx0ID0gZGl2X3NjKFRJTUVSX0ZSRVFfS0haLCBOU0VDX1BFUl9NU0VDLCBldnQtPnNoaWZ0KTsKLQlldnQtPm1heF9kZWx0YV9ucyA9IGNsb2NrZXZlbnRfZGVsdGEybnMoMHhmZmZmZmZmZiwgZXZ0KTsKLQlldnQtPm1pbl9kZWx0YV9ucyA9IGNsb2NrZXZlbnRfZGVsdGEybnMoMHhmLCBldnQpOwotCi0Jc2V0dXBfaXJxKHRpbWVyX2lycSwgJnNwODA0X3RpbWVyX2lycSk7Ci0JY2xvY2tldmVudHNfcmVnaXN0ZXJfZGV2aWNlKGV2dCk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL2FybS92ZnAvdmZwbW9kdWxlLmMgYi9hcmNoL2FybS92ZnAvdmZwbW9kdWxlLmMKaW5kZXggODA2M2EzMi4uMDc5N2NiNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vdmZwL3ZmcG1vZHVsZS5jCisrKyBiL2FyY2gvYXJtL3ZmcC92ZnBtb2R1bGUuYwpAQCAtMTAsOSArMTAsMTIgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KICNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KIAogI2luY2x1ZGUgPGFzbS9jcHV0eXBlLmg+CkBAIC00ODQsNyArNDg3LDI0IEBACiAJcHV0X2NwdSgpOwogfQogCi0jaW5jbHVkZSA8bGludXgvc21wLmg+CisvKgorICogVkZQIGhhcmR3YXJlIGNhbiBsb3NlIGFsbCBjb250ZXh0IHdoZW4gYSBDUFUgZ29lcyBvZmZsaW5lLgorICogU2FmZWx5IGNsZWFyIG91ciBoZWxkIHN0YXRlIHdoZW4gYSBDUFUgaGFzIGJlZW4ga2lsbGVkLCBhbmQKKyAqIHJlLWVuYWJsZSBhY2Nlc3MgdG8gVkZQIHdoZW4gdGhlIENQVSBjb21lcyBiYWNrIG9ubGluZS4KKyAqCisgKiBCb3RoIENQVV9EWUlORyBhbmQgQ1BVX1NUQVJUSU5HIGFyZSBjYWxsZWQgb24gdGhlIENQVSB3aGljaAorICogaXMgYmVpbmcgb2ZmbGluZWQvb25saW5lZC4KKyAqLworc3RhdGljIGludCB2ZnBfaG90cGx1ZyhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKmIsIHVuc2lnbmVkIGxvbmcgYWN0aW9uLAorCXZvaWQgKmhjcHUpCit7CisJaWYgKGFjdGlvbiA9PSBDUFVfRFlJTkcgfHwgYWN0aW9uID09IENQVV9EWUlOR19GUk9aRU4pIHsKKwkJdW5zaWduZWQgaW50IGNwdSA9IChsb25nKWhjcHU7CisJCWxhc3RfVkZQX2NvbnRleHRbY3B1XSA9IE5VTEw7CisJfSBlbHNlIGlmIChhY3Rpb24gPT0gQ1BVX1NUQVJUSU5HIHx8IGFjdGlvbiA9PSBDUFVfU1RBUlRJTkdfRlJPWkVOKQorCQl2ZnBfZW5hYmxlKE5VTEwpOworCXJldHVybiBOT1RJRllfT0s7Cit9CiAKIC8qCiAgKiBWRlAgc3VwcG9ydCBjb2RlIGluaXRpYWxpc2F0aW9uLgpAQCAtNTE0LDYgKzUzNCw4IEBACiAJZWxzZSBpZiAodmZwc2lkICYgRlBTSURfTk9ET1VCTEUpIHsKIAkJcHJpbnRrKCJubyBkb3VibGUgcHJlY2lzaW9uIHN1cHBvcnRcbiIpOwogCX0gZWxzZSB7CisJCWhvdGNwdV9ub3RpZmllcih2ZnBfaG90cGx1ZywgMCk7CisKIAkJc21wX2NhbGxfZnVuY3Rpb24odmZwX2VuYWJsZSwgTlVMTCwgMSk7CiAKIAkJVkZQX2FyY2ggPSAodmZwc2lkICYgRlBTSURfQVJDSF9NQVNLKSA+PiBGUFNJRF9BUkNIX0JJVDsgIC8qIEV4dHJhY3QgdGhlIGFyY2hpdGVjdHVyZSB2ZXJzaW9uICovCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvYm9hcmRzL2FkNzE2MGV2YWwuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9ib2FyZHMvYWQ3MTYwZXZhbC5jCmluZGV4IGZjNzY3YWMuLjUyMjk1ZmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9ib2FyZHMvYWQ3MTYwZXZhbC5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9ib2FyZHMvYWQ3MTYwZXZhbC5jCkBAIC04Myw3ICs4Myw3IEBACiBzdGF0aWMgdTY0IG11c2JfZG1hbWFzayA9IH4odTMyKTA7CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG11c2JfZGV2aWNlID0gewotCS5uYW1lCQk9ICJtdXNiX2hkcmMiLAorCS5uYW1lCQk9ICJtdXNiLWJsYWNrZmluIiwKIAkuaWQJCT0gMCwKIAkuZGV2ID0gewogCQkuZG1hX21hc2sJCT0gJm11c2JfZG1hbWFzaywKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9ib2FyZHMvY21fYmY1MjcuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9ib2FyZHMvY21fYmY1MjcuYwppbmRleCAyYzMxYWY3Li41MDUzM2VkIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvYm9hcmRzL2NtX2JmNTI3LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2JvYXJkcy9jbV9iZjUyNy5jCkBAIC04MiwxMSArODIsMTMgQEAKIAkJLnN0YXJ0CT0gSVJRX1VTQl9JTlQwLAogCQkuZW5kCT0gSVJRX1VTQl9JTlQwLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSB8IElPUkVTT1VSQ0VfSVJRX0hJR0hMRVZFTCwKKwkJLm5hbWUJPSAibWMiCiAJfSwKIAlbMl0gPSB7CS8qIERNQSBJUlEgKi8KIAkJLnN0YXJ0CT0gSVJRX1VTQl9ETUEsCiAJCS5lbmQJPSBJUlFfVVNCX0RNQSwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEgfCBJT1JFU09VUkNFX0lSUV9ISUdITEVWRUwsCisJCS5uYW1lCT0gImRtYSIKIAl9LAogfTsKIApAQCAtMTE4LDcgKzEyMCw3IEBACiBzdGF0aWMgdTY0IG11c2JfZG1hbWFzayA9IH4odTMyKTA7CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG11c2JfZGV2aWNlID0gewotCS5uYW1lCQk9ICJtdXNiX2hkcmMiLAorCS5uYW1lCQk9ICJtdXNiLWJsYWNrZmluIiwKIAkuaWQJCT0gMCwKIAkuZGV2ID0gewogCQkuZG1hX21hc2sJCT0gJm11c2JfZG1hbWFzaywKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9ib2FyZHMvZXpicmQuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9ib2FyZHMvZXpicmQuYwppbmRleCA5YTczNmE4Li5kMDYxNzdiIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvYm9hcmRzL2V6YnJkLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2JvYXJkcy9lemJyZC5jCkBAIC00NiwxMSArNDYsMTMgQEAKIAkJLnN0YXJ0CT0gSVJRX1VTQl9JTlQwLAogCQkuZW5kCT0gSVJRX1VTQl9JTlQwLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSB8IElPUkVTT1VSQ0VfSVJRX0hJR0hMRVZFTCwKKwkJLm5hbWUJPSAibWMiCiAJfSwKIAlbMl0gPSB7CS8qIERNQSBJUlEgKi8KIAkJLnN0YXJ0CT0gSVJRX1VTQl9ETUEsCiAJCS5lbmQJPSBJUlFfVVNCX0RNQSwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEgfCBJT1JFU09VUkNFX0lSUV9ISUdITEVWRUwsCisJCS5uYW1lCT0gImRtYSIKIAl9LAogfTsKIApAQCAtODIsNyArODQsNyBAQAogc3RhdGljIHU2NCBtdXNiX2RtYW1hc2sgPSB+KHUzMikwOwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtdXNiX2RldmljZSA9IHsKLQkubmFtZQkJPSAibXVzYl9oZHJjIiwKKwkubmFtZQkJPSAibXVzYi1ibGFja2ZpbiIsCiAJLmlkCQk9IDAsCiAJLmRldiA9IHsKIAkJLmRtYV9tYXNrCQk9ICZtdXNiX2RtYW1hc2ssCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvYm9hcmRzL2V6a2l0LmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvYm9hcmRzL2V6a2l0LmMKaW5kZXggOTIyMmJjMC4uMzVhODhhNSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2JvYXJkcy9lemtpdC5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9ib2FyZHMvZXpraXQuYwpAQCAtODYsMTEgKzg2LDEzIEBACiAJCS5zdGFydAk9IElSUV9VU0JfSU5UMCwKIAkJLmVuZAk9IElSUV9VU0JfSU5UMCwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEgfCBJT1JFU09VUkNFX0lSUV9ISUdITEVWRUwsCisJCS5uYW1lCT0gIm1jIgogCX0sCiAJWzJdID0gewkvKiBETUEgSVJRICovCiAJCS5zdGFydAk9IElSUV9VU0JfRE1BLAogCQkuZW5kCT0gSVJRX1VTQl9ETUEsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRIHwgSU9SRVNPVVJDRV9JUlFfSElHSExFVkVMLAorCQkubmFtZQk9ICJkbWEiCiAJfSwKIH07CiAKQEAgLTEyMiw3ICsxMjQsNyBAQAogc3RhdGljIHU2NCBtdXNiX2RtYW1hc2sgPSB+KHUzMikwOwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtdXNiX2RldmljZSA9IHsKLQkubmFtZQkJPSAibXVzYl9oZHJjIiwKKwkubmFtZQkJPSAibXVzYi1ibGFja2ZpbiIsCiAJLmlkCQk9IDAsCiAJLmRldiA9IHsKIAkJLmRtYV9tYXNrCQk9ICZtdXNiX2RtYW1hc2ssCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvYm9hcmRzL3RsbDY1MjdtLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvYm9hcmRzL3RsbDY1MjdtLmMKaW5kZXggOWVjNTc1Ny4uMTMwODYxYiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2JvYXJkcy90bGw2NTI3bS5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9ib2FyZHMvdGxsNjUyN20uYwpAQCAtOTEsNyArOTEsNyBAQAogc3RhdGljIHU2NCBtdXNiX2RtYW1hc2sgPSB+KHUzMikwOwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtdXNiX2RldmljZSA9IHsKLQkubmFtZQkJPSAibXVzYl9oZHJjIiwKKwkubmFtZQkJPSAibXVzYi1ibGFja2ZpbiIsCiAJLmlkCQk9IDAsCiAJLmRldiA9IHsKIAkJLmRtYV9tYXNrCQk9ICZtdXNiX2RtYW1hc2ssCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvYm9hcmRzL2NtX2JmNTQ4LmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvYm9hcmRzL2NtX2JmNTQ4LmMKaW5kZXggZjBjMGVlZi4uNGMyZWU2NyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2JvYXJkcy9jbV9iZjU0OC5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9ib2FyZHMvY21fYmY1NDguYwpAQCAtNDgyLDExICs0ODIsMTMgQEAKIAkJLnN0YXJ0CT0gSVJRX1VTQl9JTlQwLAogCQkuZW5kCT0gSVJRX1VTQl9JTlQwLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSB8IElPUkVTT1VSQ0VfSVJRX0hJR0hMRVZFTCwKKwkJLm5hbWUJPSAibWMiCiAJfSwKIAlbMl0gPSB7CS8qIERNQSBJUlEgKi8KIAkJLnN0YXJ0CT0gSVJRX1VTQl9ETUEsCiAJCS5lbmQJPSBJUlFfVVNCX0RNQSwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEgfCBJT1JFU09VUkNFX0lSUV9ISUdITEVWRUwsCisJCS5uYW1lCT0gImRtYSIKIAl9LAogfTsKIApAQCAtNTE4LDcgKzUyMCw3IEBACiBzdGF0aWMgdTY0IG11c2JfZG1hbWFzayA9IH4odTMyKTA7CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG11c2JfZGV2aWNlID0gewotCS5uYW1lCQk9ICJtdXNiX2hkcmMiLAorCS5uYW1lCQk9ICJtdXNiLWJsYWNrZmluIiwKIAkuaWQJCT0gMCwKIAkuZGV2ID0gewogCQkuZG1hX21hc2sJCT0gJm11c2JfZG1hbWFzaywKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9ib2FyZHMvZXpraXQuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9ib2FyZHMvZXpraXQuYwppbmRleCAyMTZlMjY5Li40ZjAzZmJjIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvYm9hcmRzL2V6a2l0LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2JvYXJkcy9lemtpdC5jCkBAIC01ODcsMTEgKzU4NywxMyBAQAogCQkuc3RhcnQJPSBJUlFfVVNCX0lOVDAsCiAJCS5lbmQJPSBJUlFfVVNCX0lOVDAsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRIHwgSU9SRVNPVVJDRV9JUlFfSElHSExFVkVMLAorCQkubmFtZQk9ICJtYyIKIAl9LAogCVsyXSA9IHsJLyogRE1BIElSUSAqLwogCQkuc3RhcnQJPSBJUlFfVVNCX0RNQSwKIAkJLmVuZAk9IElSUV9VU0JfRE1BLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSB8IElPUkVTT1VSQ0VfSVJRX0hJR0hMRVZFTCwKKwkJLm5hbWUJPSAiZG1hIgogCX0sCiB9OwogCkBAIC02MjMsNyArNjI1LDcgQEAKIHN0YXRpYyB1NjQgbXVzYl9kbWFtYXNrID0gfih1MzIpMDsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXVzYl9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gIm11c2JfaGRyYyIsCisJLm5hbWUJCT0gIm11c2ItYmxhY2tmaW4iLAogCS5pZAkJPSAwLAogCS5kZXYgPSB7CiAJCS5kbWFfbWFzawkJPSAmbXVzYl9kbWFtYXNrLApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9wZXJmbW9uLmMgYi9hcmNoL2lhNjQva2VybmVsL3BlcmZtb24uYwppbmRleCAzOWU1MzRmLi5mMDk5YjgyIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3BlcmZtb24uYworKysgYi9hcmNoL2lhNjQva2VybmVsL3BlcmZtb24uYwpAQCAtMTU0Miw3ICsxNTQyLDcgQEAKICAqIGFueSBvcGVyYXRpb25zIG9uIHRoZSByb290IGRpcmVjdG9yeS4gSG93ZXZlciwgd2UgbmVlZCBhIG5vbi10cml2aWFsCiAgKiBkX25hbWUgLSBwZm06IHdpbGwgZ28gbmljZWx5IGFuZCBraWxsIHRoZSBzcGVjaWFsLWNhc2luZyBpbiBwcm9jZnMuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgKnBmbWZzX21udDsKK3N0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgKnBmbWZzX21udCBfX3JlYWRfbW9zdGx5OwogCiBzdGF0aWMgaW50IF9faW5pdAogaW5pdF9wZm1fZnModm9pZCkKQEAgLTIxODUsNyArMjE4NSw3IEBACiB9OwogCiBzdGF0aWMgaW50Ci1wZm1mc19kZWxldGVfZGVudHJ5KHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3BmbWZzX2RlbGV0ZV9kZW50cnkoY29uc3Qgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogewogCXJldHVybiAxOwogfQpAQCAtMjIzMyw3ICsyMjMzLDcgQEAKIAl9CiAJcGF0aC5tbnQgPSBtbnRnZXQocGZtZnNfbW50KTsKIAotCXBhdGguZGVudHJ5LT5kX29wID0gJnBmbWZzX2RlbnRyeV9vcGVyYXRpb25zOworCWRfc2V0X2Rfb3AocGF0aC5kZW50cnksICZwZm1mc19kZW50cnlfb3BlcmF0aW9ucyk7CiAJZF9hZGQocGF0aC5kZW50cnksIGlub2RlKTsKIAogCWZpbGUgPSBhbGxvY19maWxlKCZwYXRoLCBGTU9ERV9SRUFELCAmcGZtX2ZpbGVfb3BzKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9pb2N0bHMuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9pb2N0bHMuaAppbmRleCBkODdjYjA0Li5kOTY3Yjg5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vaW9jdGxzLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2lvY3Rscy5oCkBAIC04Myw2ICs4Myw3IEBACiAjZGVmaW5lIFRDU0VUU0YyCV9JT1coJ1QnLCAweDJELCBzdHJ1Y3QgdGVybWlvczIpCiAjZGVmaW5lIFRJT0NHUFROCV9JT1IoJ1QnLCAweDMwLCB1bnNpZ25lZCBpbnQpIC8qIEdldCBQdHkgTnVtYmVyIChvZiBwdHktbXV4IGRldmljZSkgKi8KICNkZWZpbmUgVElPQ1NQVExDSwlfSU9XKCdUJywgMHgzMSwgaW50KSAgLyogTG9jay91bmxvY2sgUHR5ICovCisjZGVmaW5lIFRJT0NHREVWCV9JT1IoJ1QnLCAweDMyLCB1bnNpZ25lZCBpbnQpIC8qIEdldCBwcmltYXJ5IGRldmljZSBub2RlIG9mIC9kZXYvY29uc29sZSAqLwogI2RlZmluZSBUSU9DU0lHCQlfSU9XKCdUJywgMHgzNiwgaW50KSAgLyogR2VuZXJhdGUgc2lnbmFsIG9uIFB0eSBzbGF2ZSAqLwogCiAvKiBJIGhvcGUgdGhlIHJhbmdlIGZyb20gMHg1NDgwIG9uIGlzIGZyZWUgLi4uICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3BlcmZfZXZlbnRfbWlwc3h4LmMgYi9hcmNoL21pcHMva2VybmVsL3BlcmZfZXZlbnRfbWlwc3h4LmMKaW5kZXggNWM3YzZmYy4uMTgzZTBkMiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9wZXJmX2V2ZW50X21pcHN4eC5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvcGVyZl9ldmVudF9taXBzeHguYwpAQCAtMTA0Nyw2ICsxMDQ3LDYgQEAKIAogCXJldHVybiAwOwogfQotYXJjaF9pbml0Y2FsbChpbml0X2h3X3BlcmZfZXZlbnRzKTsKK2Vhcmx5X2luaXRjYWxsKGluaXRfaHdfcGVyZl9ldmVudHMpOwogCiAjZW5kaWYgLyogZGVmaW5lZChDT05GSUdfQ1BVX01JUFMzMikuLi4gKi8KZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2lvY3Rscy5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vaW9jdGxzLmgKaW5kZXggNGUwNjE0NC4uNmJhODBkMCAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vaW9jdGxzLmgKKysrIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vaW9jdGxzLmgKQEAgLTUyLDYgKzUyLDcgQEAKICNkZWZpbmUgVENTRVRTRjIJX0lPVygnVCcsMHgyRCwgc3RydWN0IHRlcm1pb3MyKQogI2RlZmluZSBUSU9DR1BUTglfSU9SKCdUJywweDMwLCB1bnNpZ25lZCBpbnQpIC8qIEdldCBQdHkgTnVtYmVyIChvZiBwdHktbXV4IGRldmljZSkgKi8KICNkZWZpbmUgVElPQ1NQVExDSwlfSU9XKCdUJywweDMxLCBpbnQpICAvKiBMb2NrL3VubG9jayBQdHkgKi8KKyNkZWZpbmUgVElPQ0dERVYJX0lPUignVCcsMHgzMiwgaW50KSAgLyogR2V0IHByaW1hcnkgZGV2aWNlIG5vZGUgb2YgL2Rldi9jb25zb2xlICovCiAjZGVmaW5lIFRJT0NTSUcJCV9JT1coJ1QnLDB4MzYsIGludCkgIC8qIEdlbmVyYXRlIHNpZ25hbCBvbiBQdHkgc2xhdmUgKi8KIAogI2RlZmluZSBGSU9OQ0xFWAkweDU0NTAgIC8qIHRoZXNlIG51bWJlcnMgbmVlZCB0byBiZSBhZGp1c3RlZC4gKi8KZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9wZGNfY29ucy5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL3BkY19jb25zLmMKaW5kZXggNjZkMWYxNy4uMTFiZGQ2OCAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL3BkY19jb25zLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3BkY19jb25zLmMKQEAgLTkyLDggKzkyLDYgQEAKIAogc3RhdGljIHN0cnVjdCB0aW1lcl9saXN0IHBkY19jb25zb2xlX3RpbWVyOwogCi1leHRlcm4gc3RydWN0IGNvbnNvbGUgKiBjb25zb2xlX2RyaXZlcnM7Ci0KIHN0YXRpYyBpbnQgcGRjX2NvbnNvbGVfdHR5X29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHApCiB7CiAKQEAgLTE2OSwxMSArMTY3LDEzIEBACiAJICogSXQgaXMgdW5yZWdpc3RlcmVkIGlmIHRoZSBwZGMgY29uc29sZSB3YXMgbm90IHNlbGVjdGVkIGFzIHRoZQogCSAqIHByaW1hcnkgY29uc29sZS4gKi8KIAotCXN0cnVjdCBjb25zb2xlICp0bXAgPSBjb25zb2xlX2RyaXZlcnM7CisJc3RydWN0IGNvbnNvbGUgKnRtcDsKIAotCWZvciAodG1wID0gY29uc29sZV9kcml2ZXJzOyB0bXA7IHRtcCA9IHRtcC0+bmV4dCkKKwlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJZm9yX2VhY2hfY29uc29sZSh0bXApCiAJCWlmICh0bXAgPT0gJnBkY19jb25zKQogCQkJYnJlYWs7CisJcmVsZWFzZV9jb25zb2xlX3NlbSgpOwogCiAJaWYgKCF0bXApIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiUERDIGNvbnNvbGUgZHJpdmVyIG5vdCByZWdpc3RlcmVkIGFueW1vcmUsIG5vdCBjcmVhdGluZyAlc1xuIiwgcGRjX2NvbnMubmFtZSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaW9jdGxzLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaW9jdGxzLmgKaW5kZXggODUxOTIwMC4uYzdkYzE3YyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2lvY3Rscy5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9pb2N0bHMuaApAQCAtOTQsNiArOTQsNyBAQAogI2RlZmluZSBUSU9DU1JTNDg1CTB4NTQyZgogI2RlZmluZSBUSU9DR1BUTglfSU9SKCdUJywweDMwLCB1bnNpZ25lZCBpbnQpIC8qIEdldCBQdHkgTnVtYmVyIChvZiBwdHktbXV4IGRldmljZSkgKi8KICNkZWZpbmUgVElPQ1NQVExDSwlfSU9XKCdUJywweDMxLCBpbnQpICAvKiBMb2NrL3VubG9jayBQdHkgKi8KKyNkZWZpbmUgVElPQ0dERVYJX0lPUignVCcsMHgzMiwgdW5zaWduZWQgaW50KSAvKiBHZXQgcHJpbWFyeSBkZXZpY2Ugbm9kZSBvZiAvZGV2L2NvbnNvbGUgKi8KICNkZWZpbmUgVElPQ1NJRwkJX0lPVygnVCcsMHgzNiwgaW50KSAgLyogR2VuZXJhdGUgc2lnbmFsIG9uIFB0eSBzbGF2ZSAqLwogCiAjZGVmaW5lIFRJT0NTRVJDT05GSUcJMHg1NDUzCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2U1MDAtcG11LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2U1MDAtcG11LmMKaW5kZXggN2MwN2RlMC4uYjE1MGI1MSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9lNTAwLXBtdS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZTUwMC1wbXUuYwpAQCAtMTI2LDQgKzEyNiw0IEBACiAJcmV0dXJuIHJlZ2lzdGVyX2ZzbF9lbWJfcG11KCZlNTAwX3BtdSk7CiB9CiAKLWFyY2hfaW5pdGNhbGwoaW5pdF9lNTAwX3BtdSk7CitlYXJseV9pbml0Y2FsbChpbml0X2U1MDBfcG11KTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvbXBjNzQ1MC1wbXUuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbXBjNzQ1MC1wbXUuYwppbmRleCAwOWQ3MjAyLi4yY2M1ZTAzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL21wYzc0NTAtcG11LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9tcGM3NDUwLXBtdS5jCkBAIC00MTQsNCArNDE0LDQgQEAKIAlyZXR1cm4gcmVnaXN0ZXJfcG93ZXJfcG11KCZtcGM3NDUwX3BtdSk7CiB9CiAKLWFyY2hfaW5pdGNhbGwoaW5pdF9tcGM3NDUwX3BtdSk7CitlYXJseV9pbml0Y2FsbChpbml0X21wYzc0NTBfcG11KTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGVyZl9ldmVudC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wZXJmX2V2ZW50LmMKaW5kZXggMzEyOWM4NS4uNTY3NDgwNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wZXJmX2V2ZW50LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wZXJmX2V2ZW50LmMKQEAgLTEzNzksNyArMTM3OSw3IEBACiAJCWZyZWV6ZV9ldmVudHNfa2VybmVsID0gTU1DUjBfRkNIVjsKICNlbmRpZiAvKiBDT05GSUdfUFBDNjQgKi8KIAotCXBlcmZfcG11X3JlZ2lzdGVyKCZwb3dlcl9wbXUpOworCXBlcmZfcG11X3JlZ2lzdGVyKCZwb3dlcl9wbXUsICJjcHUiLCBQRVJGX1RZUEVfUkFXKTsKIAlwZXJmX2NwdV9ub3RpZmllcihwb3dlcl9wbXVfbm90aWZpZXIpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BlcmZfZXZlbnRfZnNsX2VtYi5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wZXJmX2V2ZW50X2ZzbF9lbWIuYwppbmRleCA3ZWNjYTU5Li40ZGNmNWY4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3BlcmZfZXZlbnRfZnNsX2VtYi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGVyZl9ldmVudF9mc2xfZW1iLmMKQEAgLTY4MSw3ICs2ODEsNyBAQAogCXByX2luZm8oIiVzIHBlcmZvcm1hbmNlIG1vbml0b3IgaGFyZHdhcmUgc3VwcG9ydCByZWdpc3RlcmVkXG4iLAogCQlwbXUtPm5hbWUpOwogCi0JcGVyZl9wbXVfcmVnaXN0ZXIoJmZzbF9lbWJfcG11KTsKKwlwZXJmX3BtdV9yZWdpc3RlcigmZnNsX2VtYl9wbXUsICJjcHUiLCBQRVJGX1RZUEVfUkFXKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wb3dlcjQtcG11LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Bvd2VyNC1wbXUuYwppbmRleCAyYTM2MWNkLi5lYWQ4YjNjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Bvd2VyNC1wbXUuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Bvd2VyNC1wbXUuYwpAQCAtNjEzLDQgKzYxMyw0IEBACiAJcmV0dXJuIHJlZ2lzdGVyX3Bvd2VyX3BtdSgmcG93ZXI0X3BtdSk7CiB9CiAKLWFyY2hfaW5pdGNhbGwoaW5pdF9wb3dlcjRfcG11KTsKK2Vhcmx5X2luaXRjYWxsKGluaXRfcG93ZXI0X3BtdSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Bvd2VyNSstcG11LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Bvd2VyNSstcG11LmMKaW5kZXggMTk5ZGU1Mi4uZWNhMGFjNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wb3dlcjUrLXBtdS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcG93ZXI1Ky1wbXUuYwpAQCAtNjgyLDQgKzY4Miw0IEBACiAJcmV0dXJuIHJlZ2lzdGVyX3Bvd2VyX3BtdSgmcG93ZXI1cF9wbXUpOwogfQogCi1hcmNoX2luaXRjYWxsKGluaXRfcG93ZXI1cF9wbXUpOworZWFybHlfaW5pdGNhbGwoaW5pdF9wb3dlcjVwX3BtdSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Bvd2VyNS1wbXUuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcG93ZXI1LXBtdS5jCmluZGV4IDk4YjZhNzIuLmQ1ZmYwZjYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcG93ZXI1LXBtdS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcG93ZXI1LXBtdS5jCkBAIC02MjEsNCArNjIxLDQgQEAKIAlyZXR1cm4gcmVnaXN0ZXJfcG93ZXJfcG11KCZwb3dlcjVfcG11KTsKIH0KIAotYXJjaF9pbml0Y2FsbChpbml0X3Bvd2VyNV9wbXUpOworZWFybHlfaW5pdGNhbGwoaW5pdF9wb3dlcjVfcG11KTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcG93ZXI2LXBtdS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wb3dlcjYtcG11LmMKaW5kZXggODRhNjA3Yi4uMzE2MDM5MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wb3dlcjYtcG11LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wb3dlcjYtcG11LmMKQEAgLTU0NCw0ICs1NDQsNCBAQAogCXJldHVybiByZWdpc3Rlcl9wb3dlcl9wbXUoJnBvd2VyNl9wbXUpOwogfQogCi1hcmNoX2luaXRjYWxsKGluaXRfcG93ZXI2X3BtdSk7CitlYXJseV9pbml0Y2FsbChpbml0X3Bvd2VyNl9wbXUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wb3dlcjctcG11LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Bvd2VyNy1wbXUuYwppbmRleCA4NTJmN2I3Li41OTM3NDBmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Bvd2VyNy1wbXUuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Bvd2VyNy1wbXUuYwpAQCAtMzY5LDQgKzM2OSw0IEBACiAJcmV0dXJuIHJlZ2lzdGVyX3Bvd2VyX3BtdSgmcG93ZXI3X3BtdSk7CiB9CiAKLWFyY2hfaW5pdGNhbGwoaW5pdF9wb3dlcjdfcG11KTsKK2Vhcmx5X2luaXRjYWxsKGluaXRfcG93ZXI3X3BtdSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BwYzk3MC1wbXUuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHBjOTcwLXBtdS5jCmluZGV4IDNmZWU2ODUuLjlhNmUwOTMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHBjOTcwLXBtdS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHBjOTcwLXBtdS5jCkBAIC00OTQsNCArNDk0LDQgQEAKIAlyZXR1cm4gcmVnaXN0ZXJfcG93ZXJfcG11KCZwcGM5NzBfcG11KTsKIH0KIAotYXJjaF9pbml0Y2FsbChpbml0X3BwYzk3MF9wbXUpOworZWFybHlfaW5pdGNhbGwoaW5pdF9wcGM5NzBfcG11KTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9pbm9kZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2lub2RlLmMKaW5kZXggMzUzMmI5Mi4uODU2ZTljMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2lub2RlLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2lub2RlLmMKQEAgLTcxLDEyICs3MSwxOCBAQAogCXJldHVybiAmZWktPnZmc19pbm9kZTsKIH0KIAotc3RhdGljIHZvaWQKLXNwdWZzX2Rlc3Ryb3lfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKK3N0YXRpYyB2b2lkIHNwdWZzX2lfY2FsbGJhY2soc3RydWN0IHJjdV9oZWFkICpoZWFkKQogeworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGlub2RlLCBpX3JjdSk7CisJSU5JVF9MSVNUX0hFQUQoJmlub2RlLT5pX2RlbnRyeSk7CiAJa21lbV9jYWNoZV9mcmVlKHNwdWZzX2lub2RlX2NhY2hlLCBTUFVGU19JKGlub2RlKSk7CiB9CiAKK3N0YXRpYyB2b2lkIHNwdWZzX2Rlc3Ryb3lfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwljYWxsX3JjdSgmaW5vZGUtPmlfcmN1LCBzcHVmc19pX2NhbGxiYWNrKTsKK30KKwogc3RhdGljIHZvaWQKIHNwdWZzX2luaXRfb25jZSh2b2lkICpwKQogewpAQCAtMTU5LDE4ICsxNjUsMTggQEAKIAogCW11dGV4X2xvY2soJmRpci0+ZF9pbm9kZS0+aV9tdXRleCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRlbnRyeSwgdG1wLCAmZGlyLT5kX3N1YmRpcnMsIGRfdS5kX2NoaWxkKSB7Ci0JCXNwaW5fbG9jaygmZGNhY2hlX2xvY2spOwogCQlzcGluX2xvY2soJmRlbnRyeS0+ZF9sb2NrKTsKIAkJaWYgKCEoZF91bmhhc2hlZChkZW50cnkpKSAmJiBkZW50cnktPmRfaW5vZGUpIHsKLQkJCWRnZXRfbG9ja2VkKGRlbnRyeSk7CisJCQlkZ2V0X2Rsb2NrKGRlbnRyeSk7CiAJCQlfX2RfZHJvcChkZW50cnkpOwogCQkJc3Bpbl91bmxvY2soJmRlbnRyeS0+ZF9sb2NrKTsKIAkJCXNpbXBsZV91bmxpbmsoZGlyLT5kX2lub2RlLCBkZW50cnkpOwotCQkJc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKKwkJCS8qIFhYWDogd2hhdCB3YXMgZGNhY2hlX2xvY2sgcHJvdGVjdGluZyBoZXJlPyBPdGhlcgorCQkJICogZmlsZXN5c3RlbXMgKElCLCBjb25maWdmcykgcmVsZWFzZSBkY2FjaGVfbG9jaworCQkJICogYmVmb3JlIHVubGluayAqLwogCQkJZHB1dChkZW50cnkpOwogCQl9IGVsc2UgewogCQkJc3Bpbl91bmxvY2soJmRlbnRyeS0+ZF9sb2NrKTsKLQkJCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7CiAJCX0KIAl9CiAJc2hyaW5rX2RjYWNoZV9wYXJlbnQoZGlyKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9LY29uZmlnIGIvYXJjaC9zMzkwL0tjb25maWcKaW5kZXggZTBiOThlNy4uZmYxOWVmZCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL0tjb25maWcKKysrIGIvYXJjaC9zMzkwL0tjb25maWcKQEAgLTEsMTMgKzEsOCBAQAotY29uZmlnIFNDSEVEX01DCi0JZGVmX2Jvb2wgeQotCWRlcGVuZHMgb24gU01QCi0KIGNvbmZpZyBNTVUKIAlkZWZfYm9vbCB5CiAKIGNvbmZpZyBaT05FX0RNQQotCWRlZl9ib29sIHkKLQlkZXBlbmRzIG9uIDY0QklUCisJZGVmX2Jvb2wgeSBpZiA2NEJJVAogCiBjb25maWcgTE9DS0RFUF9TVVBQT1JUCiAJZGVmX2Jvb2wgeQpAQCAtMjUsMTIgKzIwLDEwIEBACiAJZGVmX2Jvb2wgeQogCiBjb25maWcgQVJDSF9IQVNfSUxPRzJfVTMyCi0JYm9vbAotCWRlZmF1bHQgbgorCWRlZl9ib29sIG4KIAogY29uZmlnIEFSQ0hfSEFTX0lMT0cyX1U2NAotCWJvb2wKLQlkZWZhdWx0IG4KKwlkZWZfYm9vbCBuCiAKIGNvbmZpZyBHRU5FUklDX0hXRUlHSFQKIAlkZWZfYm9vbCB5CkBAIC00Miw5ICszNSw3IEBACiAJZGVmX2Jvb2wgeQogCiBjb25maWcgR0VORVJJQ19CVUcKLQlib29sCi0JZGVwZW5kcyBvbiBCVUcKLQlkZWZhdWx0IHkKKwlkZWZfYm9vbCB5IGlmIEJVRwogCiBjb25maWcgR0VORVJJQ19CVUdfUkVMQVRJVkVfUE9JTlRFUlMKIAlkZWZfYm9vbCB5CkBAIC01OSwxMyArNTAsMTAgQEAKIAlkZWZfYm9vbCA2NEJJVAogCiBjb25maWcgR0VORVJJQ19MT0NLQlJFQUsKLQlib29sCi0JZGVmYXVsdCB5Ci0JZGVwZW5kcyBvbiBTTVAgJiYgUFJFRU1QVAorCWRlZl9ib29sIHkgaWYgU01QICYmIFBSRUVNUFQKIAogY29uZmlnIFBHU1RFCi0JYm9vbAotCWRlZmF1bHQgeSBpZiBLVk0KKwlkZWZfYm9vbCB5IGlmIEtWTQogCiBjb25maWcgVklSVF9DUFVfQUNDT1VOVElORwogCWRlZl9ib29sIHkKQEAgLTg1LDcgKzczLDYgQEAKIAlzZWxlY3QgSEFWRV9EWU5BTUlDX0ZUUkFDRQogCXNlbGVjdCBIQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUgogCXNlbGVjdCBIQVZFX1JFR1NfQU5EX1NUQUNLX0FDQ0VTU19BUEkKLQlzZWxlY3QgSEFWRV9ERUZBVUxUX05PX1NQSU5fTVVURVhFUwogCXNlbGVjdCBIQVZFX09QUk9GSUxFCiAJc2VsZWN0IEhBVkVfS1BST0JFUwogCXNlbGVjdCBIQVZFX0tSRVRQUk9CRVMKQEAgLTk5LDYgKzg2LDcgQEAKIAlzZWxlY3QgSEFWRV9LRVJORUxfTFpNQQogCXNlbGVjdCBIQVZFX0tFUk5FTF9MWk8KIAlzZWxlY3QgSEFWRV9HRVRfVVNFUl9QQUdFU19GQVNUCisJc2VsZWN0IEhBVkVfQVJDSF9NVVRFWF9DUFVfUkVMQVgKIAlzZWxlY3QgQVJDSF9JTkxJTkVfU1BJTl9UUllMT0NLCiAJc2VsZWN0IEFSQ0hfSU5MSU5FX1NQSU5fVFJZTE9DS19CSAogCXNlbGVjdCBBUkNIX0lOTElORV9TUElOX0xPQ0sKQEAgLTEyOSw4ICsxMTcsNyBAQAogCXNlbGVjdCBBUkNIX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRQogCiBjb25maWcgU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSCi0JYm9vbAotCWRlZmF1bHQgeQorCWRlZl9ib29sIHkKIAogc291cmNlICJpbml0L0tjb25maWciCiAKQEAgLTE0MywyMCArMTMwLDIxIEBACiBzb3VyY2UgImtlcm5lbC90aW1lL0tjb25maWciCiAKIGNvbmZpZyA2NEJJVAotCWJvb2wgIjY0IGJpdCBrZXJuZWwiCisJZGVmX2Jvb2wgeQorCXByb21wdCAiNjQgYml0IGtlcm5lbCIKIAloZWxwCiAJICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IGhhdmUgYW4gSUJNIHovQXJjaGl0ZWN0dXJlIG1hY2hpbmUKIAkgIGFuZCB3YW50IHRvIHVzZSB0aGUgNjQgYml0IGFkZHJlc3NpbmcgbW9kZS4KIAogY29uZmlnIDMyQklUCi0JYm9vbAotCWRlZmF1bHQgeSBpZiAhNjRCSVQKKwlkZWZfYm9vbCB5IGlmICE2NEJJVAogCiBjb25maWcgS1RJTUVfU0NBTEFSCiAJZGVmX2Jvb2wgMzJCSVQKIAogY29uZmlnIFNNUAotCWJvb2wgIlN5bW1ldHJpYyBtdWx0aS1wcm9jZXNzaW5nIHN1cHBvcnQiCisJZGVmX2Jvb2wgeQorCXByb21wdCAiU3ltbWV0cmljIG11bHRpLXByb2Nlc3Npbmcgc3VwcG9ydCIKIAktLS1oZWxwLS0tCiAJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3Igc3lzdGVtcyB3aXRoIG1vcmUgdGhhbiBvbmUgQ1BVLiBJZiB5b3UgaGF2ZQogCSAgYSBzeXN0ZW0gd2l0aCBvbmx5IG9uZSBDUFUsIGxpa2UgbW9zdCBwZXJzb25hbCBjb21wdXRlcnMsIHNheSBOLiBJZgpAQCAtMTg4LDEwICsxNzYsMTAgQEAKIAkgIGFwcHJveGltYXRlbHkgc2l4dGVlbiBraWxvYnl0ZXMgdG8gdGhlIGtlcm5lbCBpbWFnZS4KIAogY29uZmlnIEhPVFBMVUdfQ1BVCi0JYm9vbCAiU3VwcG9ydCBmb3IgaG90LXBsdWdnYWJsZSBDUFVzIgorCWRlZl9ib29sIHkKKwlwcm9tcHQgIlN1cHBvcnQgZm9yIGhvdC1wbHVnZ2FibGUgQ1BVcyIKIAlkZXBlbmRzIG9uIFNNUAogCXNlbGVjdCBIT1RQTFVHCi0JZGVmYXVsdCBuCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBiZSBhYmxlIHRvIHR1cm4gQ1BVcyBvZmYgYW5kIG9uLiBDUFVzCiAJICBjYW4gYmUgY29udHJvbGxlZCB0aHJvdWdoIC9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdSMuCkBAIC0yMDcsMTQgKzE5NSwxNiBAQAogCSAgaW5jcmVhc2VkIG92ZXJoZWFkIGluIHNvbWUgcGxhY2VzLgogCiBjb25maWcgU0NIRURfQk9PSwotCWJvb2wgIkJvb2sgc2NoZWR1bGVyIHN1cHBvcnQiCisJZGVmX2Jvb2wgeQorCXByb21wdCAiQm9vayBzY2hlZHVsZXIgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFNNUCAmJiBTQ0hFRF9NQwogCWhlbHAKIAkgIEJvb2sgc2NoZWR1bGVyIHN1cHBvcnQgaW1wcm92ZXMgdGhlIENQVSBzY2hlZHVsZXIncyBkZWNpc2lvbiBtYWtpbmcKIAkgIHdoZW4gZGVhbGluZyB3aXRoIG1hY2hpbmVzIHRoYXQgaGF2ZSBzZXZlcmFsIGJvb2tzLgogCiBjb25maWcgTUFUSEVNVQotCWJvb2wgIklFRUUgRlBVIGVtdWxhdGlvbiIKKwlkZWZfYm9vbCB5CisJcHJvbXB0ICJJRUVFIEZQVSBlbXVsYXRpb24iCiAJZGVwZW5kcyBvbiBNQVJDSF9HNQogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGlzIHJlcXVpcmVkIGZvciBJRUVFIGNvbXBsaWFudCBmbG9hdGluZyBwb2ludCBhcml0aG1ldGljCkBAIC0yMjIsNyArMjEyLDggQEAKIAkgIG5lZWQgdGhpcy4KIAogY29uZmlnIENPTVBBVAotCWJvb2wgIktlcm5lbCBzdXBwb3J0IGZvciAzMSBiaXQgZW11bGF0aW9uIgorCWRlZl9ib29sIHkKKwlwcm9tcHQgIktlcm5lbCBzdXBwb3J0IGZvciAzMSBiaXQgZW11bGF0aW9uIgogCWRlcGVuZHMgb24gNjRCSVQKIAlzZWxlY3QgQ09NUEFUX0JJTkZNVF9FTEYKIAloZWxwCkBAIC0yMzIsMTYgKzIyMywxNCBAQAogCSAgZXhlY3V0aW5nIDMxIGJpdCBhcHBsaWNhdGlvbnMuICBJdCBpcyBzYWZlIHRvIHNheSAiWSIuCiAKIGNvbmZpZyBTWVNWSVBDX0NPTVBBVAotCWJvb2wKLQlkZXBlbmRzIG9uIENPTVBBVCAmJiBTWVNWSVBDCi0JZGVmYXVsdCB5CisJZGVmX2Jvb2wgeSBpZiBDT01QQVQgJiYgU1lTVklQQwogCiBjb25maWcgQVVESVRfQVJDSAotCWJvb2wKLQlkZWZhdWx0IHkKKwlkZWZfYm9vbCB5CiAKIGNvbmZpZyBTMzkwX0VYRUNfUFJPVEVDVAotCWJvb2wgIkRhdGEgZXhlY3V0ZSBwcm90ZWN0aW9uIgorCWRlZl9ib29sIHkKKwlwcm9tcHQgIkRhdGEgZXhlY3V0ZSBwcm90ZWN0aW9uIgogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGFsbG93cyB0byBlbmFibGUgYSBidWZmZXIgb3ZlcmZsb3cgcHJvdGVjdGlvbiBmb3IgdXNlcgogCSAgc3BhY2UgcHJvZ3JhbXMgYW5kIGl0IGFsc28gc2VsZWN0cyB0aGUgYWRkcmVzc2luZyBtb2RlIG9wdGlvbiBhYm92ZS4KQEAgLTMwMSw3ICsyOTAsOCBAQAogZW5kY2hvaWNlCiAKIGNvbmZpZyBQQUNLX1NUQUNLCi0JYm9vbCAiUGFjayBrZXJuZWwgc3RhY2siCisJZGVmX2Jvb2wgeQorCXByb21wdCAiUGFjayBrZXJuZWwgc3RhY2siCiAJaGVscAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgY29tcGlsZXIgb3B0aW9uIC1ta2VybmVsLWJhY2tjaGFpbiBpZiBpdAogCSAgaXMgYXZhaWxhYmxlLiBJZiB0aGUgb3B0aW9uIGlzIGF2YWlsYWJsZSB0aGUgY29tcGlsZXIgc3VwcG9ydHMKQEAgLTMxNCw3ICszMDQsOCBAQAogCSAgU2F5IFkgaWYgeW91IGFyZSB1bnN1cmUuCiAKIGNvbmZpZyBTTUFMTF9TVEFDSwotCWJvb2wgIlVzZSA4a2IgZm9yIGtlcm5lbCBzdGFjayBpbnN0ZWFkIG9mIDE2a2IiCisJZGVmX2Jvb2wgbgorCXByb21wdCAiVXNlIDhrYiBmb3Iga2VybmVsIHN0YWNrIGluc3RlYWQgb2YgMTZrYiIKIAlkZXBlbmRzIG9uIFBBQ0tfU1RBQ0sgJiYgNjRCSVQgJiYgIUxPQ0tERVAKIAloZWxwCiAJICBJZiB5b3Ugc2F5IFkgaGVyZSBhbmQgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIHRoZSAtbWtlcm5lbC1iYWNrY2hhaW4KQEAgLTMyNiw3ICszMTcsOCBAQAogCSAgU2F5IE4gaWYgeW91IGFyZSB1bnN1cmUuCiAKIGNvbmZpZyBDSEVDS19TVEFDSwotCWJvb2wgIkRldGVjdCBrZXJuZWwgc3RhY2sgb3ZlcmZsb3ciCisJZGVmX2Jvb2wgeQorCXByb21wdCAiRGV0ZWN0IGtlcm5lbCBzdGFjayBvdmVyZmxvdyIKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBjb21waWxlciBvcHRpb24gLW1zdGFjay1ndWFyZCBhbmQKIAkgIC1tc3RhY2stc2l6ZSBpZiB0aGV5IGFyZSBhdmFpbGFibGUuIElmIHRoZSBjb21waWxlciBzdXBwb3J0cyB0aGVtCkBAIC0zNTAsNyArMzQyLDggQEAKIAkgIDUxMiBmb3IgNjQgYml0LgogCiBjb25maWcgV0FSTl9TVEFDSwotCWJvb2wgIkVtaXQgY29tcGlsZXIgd2FybmluZ3MgZm9yIGZ1bmN0aW9uIHdpdGggYnJva2VuIHN0YWNrIHVzYWdlIgorCWRlZl9ib29sIG4KKwlwcm9tcHQgIkVtaXQgY29tcGlsZXIgd2FybmluZ3MgZm9yIGZ1bmN0aW9uIHdpdGggYnJva2VuIHN0YWNrIHVzYWdlIgogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGNvbXBpbGVyIG9wdGlvbnMgLW13YXJuLWZyYW1lc2l6ZSBhbmQKIAkgIC1td2Fybi1keW5hbWljc3RhY2suIElmIHRoZSBjb21waWxlciBzdXBwb3J0cyB0aGVzZSBvcHRpb25zIGl0CkBAIC0zODUsMjQgKzM3OCwyNCBAQAogCWRlZl9ib29sIHkKIAogY29uZmlnIEFSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTAotICAgICAgIGRlZl9ib29sIHkKKwlkZWZfYm9vbCB5CiAKIGNvbmZpZyBBUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRwotCWRlZl9ib29sIHkKLQlkZXBlbmRzIG9uIFNQQVJTRU1FTQorCWRlZl9ib29sIHkgaWYgU1BBUlNFTUVNCiAKIGNvbmZpZyBBUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFCiAJZGVmX2Jvb2wgeQogCiBjb25maWcgQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRQotICAgICAgIGRlZl9ib29sIHkgaWYgNjRCSVQKKwlkZWZfYm9vbCB5IGlmIDY0QklUCiAKIHNvdXJjZSAibW0vS2NvbmZpZyIKIAogY29tbWVudCAiSS9PIHN1YnN5c3RlbSBjb25maWd1cmF0aW9uIgogCiBjb25maWcgUURJTwotCXRyaXN0YXRlICJRRElPIHN1cHBvcnQiCisJZGVmX3RyaXN0YXRlIHkKKwlwcm9tcHQgIlFESU8gc3VwcG9ydCIKIAktLS1oZWxwLS0tCiAJICBUaGlzIGRyaXZlciBwcm92aWRlcyB0aGUgUXVldWVkIERpcmVjdCBJL08gYmFzZSBzdXBwb3J0IGZvcgogCSAgSUJNIFN5c3RlbSB6LgpAQCAtNDEzLDcgKzQwNiw4IEBACiAJICBJZiB1bnN1cmUsIHNheSBZLgogCiBjb25maWcgQ0hTQ19TQ0gKLQl0cmlzdGF0ZSAiU3VwcG9ydCBmb3IgQ0hTQyBzdWJjaGFubmVscyIKKwlkZWZfdHJpc3RhdGUgeQorCXByb21wdCAiU3VwcG9ydCBmb3IgQ0hTQyBzdWJjaGFubmVscyIKIAloZWxwCiAJICBUaGlzIGRyaXZlciBhbGxvd3MgdXNhZ2Ugb2YgQ0hTQyBzdWJjaGFubmVscy4gQSBDSFNDIHN1YmNoYW5uZWwKIAkgIGlzIHVzdWFsbHkgcHJlc2VudCBvbiBMUEFSIG9ubHkuCkBAIC00MzEsNyArNDI1LDggQEAKIGNvbW1lbnQgIk1pc2MiCiAKIGNvbmZpZyBJUEwKLQlib29sICJCdWlsdGluIElQTCByZWNvcmQgc3VwcG9ydCIKKwlkZWZfYm9vbCB5CisJcHJvbXB0ICJCdWlsdGluIElQTCByZWNvcmQgc3VwcG9ydCIKIAloZWxwCiAJICBJZiB5b3Ugd2FudCB0byB1c2UgdGhlIHByb2R1Y2VkIGtlcm5lbCB0byBJUEwgZGlyZWN0bHkgZnJvbSBhCiAJICBkZXZpY2UsIHlvdSBoYXZlIHRvIG1lcmdlIGEgYm9vdHNlY3RvciBzcGVjaWZpYyB0byB0aGUgZGV2aWNlCkBAIC00NjMsNyArNDU4LDggQEAKIAlkZWZhdWx0ICI5IgogCiBjb25maWcgUEZBVUxUCi0JYm9vbCAiUHNldWRvIHBhZ2UgZmF1bHQgc3VwcG9ydCIKKwlkZWZfYm9vbCB5CisJcHJvbXB0ICJQc2V1ZG8gcGFnZSBmYXVsdCBzdXBwb3J0IgogCWhlbHAKIAkgIFNlbGVjdCB0aGlzIG9wdGlvbiwgaWYgeW91IHdhbnQgdG8gdXNlIFBGQVVMVCBwc2V1ZG8gcGFnZSBmYXVsdAogCSAgaGFuZGxpbmcgdW5kZXIgVk0uIElmIHJ1bm5pbmcgbmF0aXZlIG9yIGluIExQQVIsIHRoaXMgb3B0aW9uCkBAIC00NzUsNyArNDcxLDggQEAKIAkgIHRoaXMgb3B0aW9uLgogCiBjb25maWcgU0hBUkVEX0tFUk5FTAotCWJvb2wgIlZNIHNoYXJlZCBrZXJuZWwgc3VwcG9ydCIKKwlkZWZfYm9vbCB5CisJcHJvbXB0ICJWTSBzaGFyZWQga2VybmVsIHN1cHBvcnQiCiAJaGVscAogCSAgU2VsZWN0IHRoaXMgb3B0aW9uLCBpZiB5b3Ugd2FudCB0byBzaGFyZSB0aGUgdGV4dCBzZWdtZW50IG9mIHRoZQogCSAgTGludXgga2VybmVsIGJldHdlZW4gZGlmZmVyZW50IFZNIGd1ZXN0cy4gVGhpcyByZWR1Y2VzIG1lbW9yeQpAQCAtNDg2LDcgKzQ4Myw4IEBACiAJICBkb2luZyBhbmQgd2FudCB0byBleHBsb2l0IHRoaXMgZmVhdHVyZS4KIAogY29uZmlnIENNTQotCXRyaXN0YXRlICJDb29wZXJhdGl2ZSBtZW1vcnkgbWFuYWdlbWVudCIKKwlkZWZfdHJpc3RhdGUgbgorCXByb21wdCAiQ29vcGVyYXRpdmUgbWVtb3J5IG1hbmFnZW1lbnQiCiAJaGVscAogCSAgU2VsZWN0IHRoaXMgb3B0aW9uLCBpZiB5b3Ugd2FudCB0byBlbmFibGUgdGhlIGtlcm5lbCBpbnRlcmZhY2UKIAkgIHRvIHJlZHVjZSB0aGUgbWVtb3J5IHNpemUgb2YgdGhlIHN5c3RlbS4gVGhpcyBpcyBhY2NvbXBsaXNoZWQKQEAgLTQ5OCwxNCArNDk2LDE2IEBACiAJICBvcHRpb24uCiAKIGNvbmZpZyBDTU1fSVVDVgotCWJvb2wgIklVQ1Ygc3BlY2lhbCBtZXNzYWdlIGludGVyZmFjZSB0byBjb29wZXJhdGl2ZSBtZW1vcnkgbWFuYWdlbWVudCIKKwlkZWZfYm9vbCB5CisJcHJvbXB0ICJJVUNWIHNwZWNpYWwgbWVzc2FnZSBpbnRlcmZhY2UgdG8gY29vcGVyYXRpdmUgbWVtb3J5IG1hbmFnZW1lbnQiCiAJZGVwZW5kcyBvbiBDTU0gJiYgKFNNU0dJVUNWPXkgfHwgQ01NPVNNU0dJVUNWKQogCWhlbHAKIAkgIFNlbGVjdCB0aGlzIG9wdGlvbiB0byBlbmFibGUgdGhlIHNwZWNpYWwgbWVzc2FnZSBpbnRlcmZhY2UgdG8KIAkgIHRoZSBjb29wZXJhdGl2ZSBtZW1vcnkgbWFuYWdlbWVudC4KIAogY29uZmlnIEFQUExEQVRBX0JBU0UKLQlib29sICJMaW51eCAtIFZNIE1vbml0b3IgU3RyZWFtLCBiYXNlIGluZnJhc3RydWN0dXJlIgorCWRlZl9ib29sIG4KKwlwcm9tcHQgIkxpbnV4IC0gVk0gTW9uaXRvciBTdHJlYW0sIGJhc2UgaW5mcmFzdHJ1Y3R1cmUiCiAJZGVwZW5kcyBvbiBQUk9DX0ZTCiAJaGVscAogCSAgVGhpcyBwcm92aWRlcyBhIGtlcm5lbCBpbnRlcmZhY2UgZm9yIGNyZWF0aW5nIGFuZCB1cGRhdGluZyB6L1ZNIEFQUExEQVRBCkBAIC01MjAsNyArNTIwLDggQEAKIAkgIFRoZSAvcHJvYyBlbnRyaWVzIGNhbiBhbHNvIGJlIHJlYWQgZnJvbSwgc2hvd2luZyB0aGUgY3VycmVudCBzZXR0aW5ncy4KIAogY29uZmlnIEFQUExEQVRBX01FTQotCXRyaXN0YXRlICJNb25pdG9yIG1lbW9yeSBtYW5hZ2VtZW50IHN0YXRpc3RpY3MiCisJZGVmX3RyaXN0YXRlIG0KKwlwcm9tcHQgIk1vbml0b3IgbWVtb3J5IG1hbmFnZW1lbnQgc3RhdGlzdGljcyIKIAlkZXBlbmRzIG9uIEFQUExEQVRBX0JBU0UgJiYgVk1fRVZFTlRfQ09VTlRFUlMKIAloZWxwCiAJICBUaGlzIHByb3ZpZGVzIG1lbW9yeSBtYW5hZ2VtZW50IHJlbGF0ZWQgZGF0YSB0byB0aGUgTGludXggLSBWTSBNb25pdG9yCkBAIC01MzYsNyArNTM3LDggQEAKIAkgIGFwcGxkYXRhX21lbS5vLgogCiBjb25maWcgQVBQTERBVEFfT1MKLQl0cmlzdGF0ZSAiTW9uaXRvciBPUyBzdGF0aXN0aWNzIgorCWRlZl90cmlzdGF0ZSBtCisJcHJvbXB0ICJNb25pdG9yIE9TIHN0YXRpc3RpY3MiCiAJZGVwZW5kcyBvbiBBUFBMREFUQV9CQVNFCiAJaGVscAogCSAgVGhpcyBwcm92aWRlcyBPUyByZWxhdGVkIGRhdGEgdG8gdGhlIExpbnV4IC0gVk0gTW9uaXRvciBTdHJlYW0sIGxpa2UKQEAgLTU1MCw3ICs1NTIsOCBAQAogCSAgYXBwbGRhdGFfb3Muby4KIAogY29uZmlnIEFQUExEQVRBX05FVF9TVU0KLQl0cmlzdGF0ZSAiTW9uaXRvciBvdmVyYWxsIG5ldHdvcmsgc3RhdGlzdGljcyIKKwlkZWZfdHJpc3RhdGUgbQorCXByb21wdCAiTW9uaXRvciBvdmVyYWxsIG5ldHdvcmsgc3RhdGlzdGljcyIKIAlkZXBlbmRzIG9uIEFQUExEQVRBX0JBU0UgJiYgTkVUCiAJaGVscAogCSAgVGhpcyBwcm92aWRlcyBuZXR3b3JrIHJlbGF0ZWQgZGF0YSB0byB0aGUgTGludXggLSBWTSBNb25pdG9yIFN0cmVhbSwKQEAgLTU2NywzMCArNTcwLDMyIEBACiBzb3VyY2Uga2VybmVsL0tjb25maWcuaHoKIAogY29uZmlnIFMzOTBfSFlQRlNfRlMKLQlib29sICJzMzkwIGh5cGVydmlzb3IgZmlsZSBzeXN0ZW0gc3VwcG9ydCIKKwlkZWZfYm9vbCB5CisJcHJvbXB0ICJzMzkwIGh5cGVydmlzb3IgZmlsZSBzeXN0ZW0gc3VwcG9ydCIKIAlzZWxlY3QgU1lTX0hZUEVSVklTT1IKLQlkZWZhdWx0IHkKIAloZWxwCiAJICBUaGlzIGlzIGEgdmlydHVhbCBmaWxlIHN5c3RlbSBpbnRlbmRlZCB0byBwcm92aWRlIGFjY291bnRpbmcKIAkgIGluZm9ybWF0aW9uIGluIGFuIHMzOTAgaHlwZXJ2aXNvciBlbnZpcm9ubWVudC4KIAogY29uZmlnIEtFWEVDCi0JYm9vbCAia2V4ZWMgc3lzdGVtIGNhbGwiCisJZGVmX2Jvb2wgbgorCXByb21wdCAia2V4ZWMgc3lzdGVtIGNhbGwiCiAJaGVscAogCSAga2V4ZWMgaXMgYSBzeXN0ZW0gY2FsbCB0aGF0IGltcGxlbWVudHMgdGhlIGFiaWxpdHkgdG8gc2h1dGRvd24geW91cgogCSAgY3VycmVudCBrZXJuZWwsIGFuZCB0byBzdGFydCBhbm90aGVyIGtlcm5lbC4gIEl0IGlzIGxpa2UgYSByZWJvb3QKIAkgIGJ1dCBpcyBpbmRlcGVuZGVudCBvZiBoYXJkd2FyZS9taWNyb2NvZGUgc3VwcG9ydC4KIAogY29uZmlnIFpGQ1BEVU1QCi0JYm9vbCAiemZjcGR1bXAgc3VwcG9ydCIKKwlkZWZfYm9vbCBuCisJcHJvbXB0ICJ6ZmNwZHVtcCBzdXBwb3J0IgogCXNlbGVjdCBTTVAKLQlkZWZhdWx0IG4KIAloZWxwCiAJICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gYnVpbGQgYW4gemZjcGR1bXAgZW5hYmxlZCBrZXJuZWwuCiAJICBSZWZlciB0byA8ZmlsZTpEb2N1bWVudGF0aW9uL3MzOTAvemZjcGR1bXAudHh0PiBmb3IgbW9yZSBkZXRhaWxzIG9uIHRoaXMuCiAKIGNvbmZpZyBTMzkwX0dVRVNUCi1ib29sICJzMzkwIGd1ZXN0IHN1cHBvcnQgZm9yIEtWTSAoRVhQRVJJTUVOVEFMKSIKKwlkZWZfYm9vbCB5CisJcHJvbXB0ICJzMzkwIGd1ZXN0IHN1cHBvcnQgZm9yIEtWTSAoRVhQRVJJTUVOVEFMKSIKIAlkZXBlbmRzIG9uIDY0QklUICYmIEVYUEVSSU1FTlRBTAogCXNlbGVjdCBWSVJUSU8KIAlzZWxlY3QgVklSVElPX1JJTkcKQEAgLTYwMiw5ICs2MDcsOSBAQAogCSAgdGhlIGRlZmF1bHQgY29uc29sZS4KIAogY29uZmlnIFNFQ0NPTVAKLQlib29sICJFbmFibGUgc2VjY29tcCB0byBzYWZlbHkgY29tcHV0ZSB1bnRydXN0ZWQgYnl0ZWNvZGUiCisJZGVmX2Jvb2wgeQorCXByb21wdCAiRW5hYmxlIHNlY2NvbXAgdG8gc2FmZWx5IGNvbXB1dGUgdW50cnVzdGVkIGJ5dGVjb2RlIgogCWRlcGVuZHMgb24gUFJPQ19GUwotCWRlZmF1bHQgeQogCWhlbHAKIAkgIFRoaXMga2VybmVsIGZlYXR1cmUgaXMgdXNlZnVsIGZvciBudW1iZXIgY3J1bmNoaW5nIGFwcGxpY2F0aW9ucwogCSAgdGhhdCBtYXkgbmVlZCB0byBjb21wdXRlIHVudHJ1c3RlZCBieXRlY29kZSBkdXJpbmcgdGhlaXIKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9LY29uZmlnLmRlYnVnIGIvYXJjaC9zMzkwL0tjb25maWcuZGVidWcKaW5kZXggMDUyMjFiMS4uMmIzODBkZiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL0tjb25maWcuZGVidWcKKysrIGIvYXJjaC9zMzkwL0tjb25maWcuZGVidWcKQEAgLTEsOCArMSw3IEBACiBtZW51ICJLZXJuZWwgaGFja2luZyIKIAogY29uZmlnIFRSQUNFX0lSUUZMQUdTX1NVUFBPUlQKLQlib29sCi0JZGVmYXVsdCB5CisJZGVmX2Jvb2wgeQogCiBzb3VyY2UgImxpYi9LY29uZmlnLmRlYnVnIgogCkBAIC0xOSw3ICsxOCw4IEBACiAJICBJZiB5b3UgYXJlIHVuc3VyZSwgc2F5IFkuCiAKIGNvbmZpZyBERUJVR19TVFJJQ1RfVVNFUl9DT1BZX0NIRUNLUwotCWJvb2wgIlN0cmljdCB1c2VyIGNvcHkgc2l6ZSBjaGVja3MiCisJZGVmX2Jvb2wgbgorCXByb21wdCAiU3RyaWN0IHVzZXIgY29weSBzaXplIGNoZWNrcyIKIAktLS1oZWxwLS0tCiAJICBFbmFibGluZyB0aGlzIG9wdGlvbiB0dXJucyBhIGNlcnRhaW4gc2V0IG9mIHNhbml0eSBjaGVja3MgZm9yIHVzZXIKIAkgIGNvcHkgb3BlcmF0aW9ucyBpbnRvIGNvbXBpbGUgdGltZSB3YXJuaW5ncy4KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9kZWZjb25maWcgYi9hcmNoL3MzOTAvZGVmY29uZmlnCmluZGV4IGU0MGFjNmUuLmQ3OTY5NzEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9kZWZjb25maWcKKysrIGIvYXJjaC9zMzkwL2RlZmNvbmZpZwpAQCAtMiwxNiArMiwxMiBAQAogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1BPU0lYX01RVUVVRT15CiBDT05GSUdfQVVESVQ9eQorQ09ORklHX1JDVV9UUkFDRT15CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX0NHUk9VUFM9eQotQ09ORklHX0NHUk9VUF9OUz15Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci1DT05GSUdfVVRTX05TPXkKLUNPTkZJR19JUENfTlM9eQogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAorQ09ORklHX1BFUkZfRVZFTlRTPXkKIENPTkZJR19TTEFCPXkKIENPTkZJR19LUFJPQkVTPXkKIENPTkZJR19NT0RVTEVTPXkKQEAgLTIwLDI0ICsxNiwxMiBAQAogQ09ORklHX0RFRkFVTFRfREVBRExJTkU9eQogQ09ORklHX05PX0haPXkKIENPTkZJR19ISUdIX1JFU19USU1FUlM9eQotQ09ORklHXzY0QklUPXkKLUNPTkZJR19TTVA9eQotQ09ORklHX05SX0NQVVM9MzIKLUNPTkZJR19DT01QQVQ9eQotQ09ORklHX1MzOTBfRVhFQ19QUk9URUNUPXkKLUNPTkZJR19QQUNLX1NUQUNLPXkKLUNPTkZJR19DSEVDS19TVEFDSz15CiBDT05GSUdfUFJFRU1QVD15CiBDT05GSUdfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX01FTU9SWV9IT1RSRU1PVkU9eQotQ09ORklHX1FESU89eQotQ09ORklHX0NIU0NfU0NIPW0KLUNPTkZJR19JUEw9eQogQ09ORklHX0JJTkZNVF9NSVNDPW0KLUNPTkZJR19QRkFVTFQ9eQogQ09ORklHX0haXzEwMD15CiBDT05GSUdfS0VYRUM9eQotQ09ORklHX1MzOTBfR1VFU1Q9eQogQ09ORklHX1BNPXkKIENPTkZJR19ISUJFUk5BVElPTj15CiBDT05GSUdfUEFDS0VUPXkKQEAgLTQ2LDE2ICszMCwxNSBAQAogQ09ORklHX0FGSVVDVj1tCiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKIENPTkZJR19JUFY2PXkKLUNPTkZJR19ORVRGSUxURVI9eQotQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFPW0KLUNPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0c9bQotQ09ORklHX05GX0NPTk5UUkFDSz1tCi0jIENPTkZJR19ORl9DVF9QUk9UT19TQ1RQIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfU0NUUFBST0JFPW0KK0NPTkZJR19MMlRQPW0KK0NPTkZJR19MMlRQX0RFQlVHRlM9bQorQ09ORklHX1ZMQU5fODAyMVE9eQogQ09ORklHX05FVF9TQ0hFRD15CiBDT05GSUdfTkVUX1NDSF9DQlE9bQogQ09ORklHX05FVF9TQ0hfUFJJTz1tCi1DT05GSUdfTkVUX1NDSF9NVUxUSVE9eQogQ09ORklHX05FVF9TQ0hfUkVEPW0KIENPTkZJR19ORVRfU0NIX1NGUT1tCiBDT05GSUdfTkVUX1NDSF9URVFMPW0KQEAgLTY5LDI4ICs1MiwxNCBAQAogQ09ORklHX0NMU19VMzJfTUFSSz15CiBDT05GSUdfTkVUX0NMU19SU1ZQPW0KIENPTkZJR19ORVRfQ0xTX1JTVlA2PW0KLUNPTkZJR19ORVRfQ0xTX0ZMT1c9bQogQ09ORklHX05FVF9DTFNfQUNUPXkKIENPTkZJR19ORVRfQUNUX1BPTElDRT15Ci1DT05GSUdfTkVUX0FDVF9OQVQ9bQotQ09ORklHX0NBTj1tCi1DT05GSUdfQ0FOX1JBVz1tCi1DT05GSUdfQ0FOX0JDTT1tCi1DT05GSUdfQ0FOX1ZDQU49bQogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKICMgQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9MT09QPW0KIENPTkZJR19CTEtfREVWX05CRD1tCiBDT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfWElQPXkKLUNPTkZJR19CTEtfREVWX1hQUkFNPW0KLUNPTkZJR19EQVNEPXkKLUNPTkZJR19EQVNEX1BST0ZJTEU9eQotQ09ORklHX0RBU0RfRUNLRD15Ci1DT05GSUdfREFTRF9GQkE9eQotQ09ORklHX0RBU0RfRElBRz15Ci1DT05GSUdfREFTRF9FRVI9eQotQ09ORklHX1ZJUlRJT19CTEs9bQorQ09ORklHX1ZJUlRJT19CTEs9eQogQ09ORklHX1NDU0k9eQogQ09ORklHX0JMS19ERVZfU0Q9eQogQ09ORklHX0NIUl9ERVZfU1Q9eQpAQCAtMTAyLDEwMSArNzEsOTIgQEAKIENPTkZJR19TQ1NJX0xPR0dJTkc9eQogQ09ORklHX1NDU0lfU0NBTl9BU1lOQz15CiBDT05GSUdfWkZDUD15Ci1DT05GSUdfU0NTSV9ESD1tCi1DT05GSUdfU0NTSV9ESF9SREFDPW0KLUNPTkZJR19TQ1NJX0RIX0hQX1NXPW0KLUNPTkZJR19TQ1NJX0RIX0VNQz1tCi1DT05GSUdfU0NTSV9ESF9BTFVBPW0KLUNPTkZJR19TQ1NJX09TRF9JTklUSUFUT1I9bQotQ09ORklHX1NDU0lfT1NEX1VMRD1tCi1DT05GSUdfTUQ9eQotQ09ORklHX0JMS19ERVZfTUQ9eQotQ09ORklHX01EX0xJTkVBUj1tCi1DT05GSUdfTURfUkFJRDA9bQotQ09ORklHX01EX1JBSUQxPW0KLUNPTkZJR19NRF9NVUxUSVBBVEg9bQotQ09ORklHX0JMS19ERVZfRE09eQotQ09ORklHX0RNX0NSWVBUPXkKLUNPTkZJR19ETV9TTkFQU0hPVD15Ci1DT05GSUdfRE1fTUlSUk9SPXkKLUNPTkZJR19ETV9aRVJPPXkKLUNPTkZJR19ETV9NVUxUSVBBVEg9bQorQ09ORklHX1pGQ1BfRElGPXkKIENPTkZJR19ORVRERVZJQ0VTPXkKIENPTkZJR19EVU1NWT1tCiBDT05GSUdfQk9ORElORz1tCiBDT05GSUdfRVFVQUxJWkVSPW0KIENPTkZJR19UVU49bQotQ09ORklHX1ZFVEg9bQogQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTENTPW0KLUNPTkZJR19DVENNPW0KLUNPTkZJR19RRVRIPXkKLUNPTkZJR19RRVRIX0wyPXkKLUNPTkZJR19RRVRIX0wzPXkKLUNPTkZJR19WSVJUSU9fTkVUPW0KLUNPTkZJR19IV19SQU5ET01fVklSVElPPW0KK0NPTkZJR19WSVJUSU9fTkVUPXkKIENPTkZJR19SQVdfRFJJVkVSPW0KLUNPTkZJR19UTjMyNzA9eQotQ09ORklHX1ROMzI3MF9UVFk9eQotQ09ORklHX1ROMzI3MF9GUz1tCi1DT05GSUdfVE4zMjcwX0NPTlNPTEU9eQotQ09ORklHX1ROMzIxNT15Ci1DT05GSUdfVE4zMjE1X0NPTlNPTEU9eQotQ09ORklHX1NDTFBfVFRZPXkKLUNPTkZJR19TQ0xQX0NPTlNPTEU9eQotQ09ORklHX1NDTFBfVlQyMjBfVFRZPXkKLUNPTkZJR19TQ0xQX1ZUMjIwX0NPTlNPTEU9eQotQ09ORklHX1NDTFBfQ1BJPW0KLUNPTkZJR19TQ0xQX0FTWU5DPW0KLUNPTkZJR19TMzkwX1RBUEU9bQotQ09ORklHX1MzOTBfVEFQRV9CTE9DSz15Ci1DT05GSUdfUzM5MF9UQVBFXzM0WFg9bQotQ09ORklHX0FDQ0VTU0lCSUxJVFk9eQogQ09ORklHX0VYVDJfRlM9eQogQ09ORklHX0VYVDNfRlM9eQogIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQ0X0ZTPXkKK0NPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTD15CitDT05GSUdfRVhUNF9GU19TRUNVUklUWT15CiBDT05GSUdfUFJPQ19LQ09SRT15CiBDT05GSUdfVE1QRlM9eQogQ09ORklHX1RNUEZTX1BPU0lYX0FDTD15Ci1DT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ORlNfVjM9eQotQ09ORklHX05GU0Q9eQotQ09ORklHX05GU0RfVjM9eQorIyBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUyBpcyBub3Qgc2V0CiBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKIENPTkZJR19JQk1fUEFSVElUSU9OPXkKIENPTkZJR19ETE09bQogQ09ORklHX01BR0lDX1NZU1JRPXkKIENPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfU0NIRURfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX1NQSU5MT0NLPXkKLUNPTkZJR19ERUJVR19NVVRFWEVTPXkKK0NPTkZJR19USU1FUl9TVEFUUz15CitDT05GSUdfUFJPVkVfTE9DS0lORz15CitDT05GSUdfUFJPVkVfUkNVPXkKK0NPTkZJR19MT0NLX1NUQVQ9eQorQ09ORklHX0RFQlVHX0xPQ0tERVA9eQogQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQPXkKK0NPTkZJR19ERUJVR19MSVNUPXkKK0NPTkZJR19ERUJVR19OT1RJRklFUlM9eQogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVPXkKK0NPTkZJR19LUFJPQkVTX1NBTklUWV9URVNUPXkKK0NPTkZJR19DUFVfTk9USUZJRVJfRVJST1JfSU5KRUNUPW0KK0NPTkZJR19MQVRFTkNZVE9QPXkKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15Ci1DT05GSUdfU0FNUExFUz15Ci1DT05GSUdfQ1JZUFRPX0ZJUFM9eQorQ09ORklHX0RFQlVHX1BBR0VBTExPQz15CisjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSUNUX0RFVk1FTSBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX05VTEw9bQorQ09ORklHX0NSWVBUT19DUllQVEQ9bQogQ09ORklHX0NSWVBUT19BVVRIRU5DPW0KK0NPTkZJR19DUllQVE9fVEVTVD1tCiBDT05GSUdfQ1JZUFRPX0NDTT1tCiBDT05GSUdfQ1JZUFRPX0dDTT1tCitDT05GSUdfQ1JZUFRPX0NCQz15CiBDT05GSUdfQ1JZUFRPX0NUUz1tCiBDT05GSUdfQ1JZUFRPX0VDQj1tCitDT05GSUdfQ1JZUFRPX0xSVz1tCiBDT05GSUdfQ1JZUFRPX1BDQkM9bQorQ09ORklHX0NSWVBUT19YVFM9bQorQ09ORklHX0NSWVBUT19YQ0JDPW0KIENPTkZJR19DUllQVE9fVk1BQz1tCitDT05GSUdfQ1JZUFRPX01END1tCitDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KIENPTkZJR19DUllQVE9fUk1EMTI4PW0KIENPTkZJR19DUllQVE9fUk1EMTYwPW0KIENPTkZJR19DUllQVE9fUk1EMjU2PW0KIENPTkZJR19DUllQVE9fUk1EMzIwPW0KK0NPTkZJR19DUllQVE9fU0hBMjU2PW0KK0NPTkZJR19DUllQVE9fU0hBNTEyPW0KK0NPTkZJR19DUllQVE9fVEdSMTkyPW0KK0NPTkZJR19DUllQVE9fV1A1MTI9bQorQ09ORklHX0NSWVBUT19BTlVCSVM9bQorQ09ORklHX0NSWVBUT19BUkM0PW0KK0NPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQogQ09ORklHX0NSWVBUT19DQU1FTExJQT1tCitDT05GSUdfQ1JZUFRPX0NBU1Q1PW0KK0NPTkZJR19DUllQVE9fQ0FTVDY9bQorQ09ORklHX0NSWVBUT19ERVM9bQogQ09ORklHX0NSWVBUT19GQ1JZUFQ9bQorQ09ORklHX0NSWVBUT19LSEFaQUQ9bQogQ09ORklHX0NSWVBUT19TQUxTQTIwPW0KIENPTkZJR19DUllQVE9fU0VFRD1tCitDT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQorQ09ORklHX0NSWVBUT19URUE9bQorQ09ORklHX0NSWVBUT19UV09GSVNIPW0KK0NPTkZJR19DUllQVE9fREVGTEFURT1tCiBDT05GSUdfQ1JZUFRPX1pMSUI9bQogQ09ORklHX0NSWVBUT19MWk89bQogQ09ORklHX1pDUllQVD1tCitDT05GSUdfQ1JZUFRPX1NIQTFfUzM5MD1tCitDT05GSUdfQ1JZUFRPX1NIQTI1Nl9TMzkwPW0KIENPTkZJR19DUllQVE9fU0hBNTEyX1MzOTA9bQotQ09ORklHX0NSQ19UMTBESUY9eQotQ09ORklHX0NSQzMyPW0KK0NPTkZJR19DUllQVE9fREVTX1MzOTA9bQorQ09ORklHX0NSWVBUT19BRVNfUzM5MD1tCiBDT05GSUdfQ1JDNz1tCi1DT05GSUdfS1ZNPW0KLUNPTkZJR19WSVJUSU9fQkFMTE9PTj1tCitDT05GSUdfVklSVElPX0JBTExPT049eQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2h5cGZzL01ha2VmaWxlIGIvYXJjaC9zMzkwL2h5cGZzL01ha2VmaWxlCmluZGV4IGIwOGQyYWIuLjJlNjcxZDUgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9oeXBmcy9NYWtlZmlsZQorKysgYi9hcmNoL3MzOTAvaHlwZnMvTWFrZWZpbGUKQEAgLTQsNCArNCw0IEBACiAKIG9iai0kKENPTkZJR19TMzkwX0hZUEZTX0ZTKSArPSBzMzkwX2h5cGZzLm8KIAotczM5MF9oeXBmcy1vYmpzIDo9IGlub2RlLm8gaHlwZnNfZGlhZy5vIGh5cGZzX3ZtLm8KK3MzOTBfaHlwZnMtb2JqcyA6PSBpbm9kZS5vIGh5cGZzX2RpYWcubyBoeXBmc192bS5vIGh5cGZzX2RiZnMubwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2h5cGZzL2h5cGZzLmggYi9hcmNoL3MzOTAvaHlwZnMvaHlwZnMuaAppbmRleCBmYTQ4N2Q0Li44MGMxNTI2IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaHlwZnMvaHlwZnMuaAorKysgYi9hcmNoL3MzOTAvaHlwZnMvaHlwZnMuaApAQCAtMTIsNiArMTIsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgva3JlZi5oPgogCiAjZGVmaW5lIFJFR19GSUxFX01PREUgICAgMDQ0MAogI2RlZmluZSBVUERBVEVfRklMRV9NT0RFIDAyMjAKQEAgLTM4LDYgKzQwLDMzIEBACiBleHRlcm4gdm9pZCBoeXBmc192bV9leGl0KHZvaWQpOwogZXh0ZXJuIGludCBoeXBmc192bV9jcmVhdGVfZmlsZXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGRlbnRyeSAqcm9vdCk7CiAKLS8qIERpcmVjdG9yeSBmb3IgZGVidWdmcyBmaWxlcyAqLwotZXh0ZXJuIHN0cnVjdCBkZW50cnkgKmh5cGZzX2RiZnNfZGlyOworLyogZGVidWdmcyBpbnRlcmZhY2UgKi8KK3N0cnVjdCBoeXBmc19kYmZzX2ZpbGU7CisKK3N0cnVjdCBoeXBmc19kYmZzX2RhdGEgeworCXZvaWQJCQkqYnVmOworCXZvaWQJCQkqYnVmX2ZyZWVfcHRyOworCXNpemVfdAkJCXNpemU7CisJc3RydWN0IGh5cGZzX2RiZnNfZmlsZQkqZGJmc19maWxlOzsKKwlzdHJ1Y3Qga3JlZgkJa3JlZjsKK307CisKK3N0cnVjdCBoeXBmc19kYmZzX2ZpbGUgeworCWNvbnN0IGNoYXIJKm5hbWU7CisJaW50CQkoKmRhdGFfY3JlYXRlKSh2b2lkICoqZGF0YSwgdm9pZCAqKmRhdGFfZnJlZV9wdHIsCisJCQkJICAgICAgIHNpemVfdCAqc2l6ZSk7CisJdm9pZAkJKCpkYXRhX2ZyZWUpKGNvbnN0IHZvaWQgKmJ1Zl9mcmVlX3B0cik7CisKKwkvKiBQcml2YXRlIGRhdGEgZm9yIGh5cGZzX2RiZnMuYyAqLworCXN0cnVjdCBoeXBmc19kYmZzX2RhdGEJKmRhdGE7CisJc3RydWN0IGRlbGF5ZWRfd29yawlkYXRhX2ZyZWVfd29yazsKKwlzdHJ1Y3QgbXV0ZXgJCWxvY2s7CisJc3RydWN0IGRlbnRyeQkJKmRlbnRyeTsKK307CisKK2V4dGVybiBpbnQgaHlwZnNfZGJmc19pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgaHlwZnNfZGJmc19leGl0KHZvaWQpOworZXh0ZXJuIGludCBoeXBmc19kYmZzX2NyZWF0ZV9maWxlKHN0cnVjdCBoeXBmc19kYmZzX2ZpbGUgKmRmKTsKK2V4dGVybiB2b2lkIGh5cGZzX2RiZnNfcmVtb3ZlX2ZpbGUoc3RydWN0IGh5cGZzX2RiZnNfZmlsZSAqZGYpOworCiAjZW5kaWYgLyogX0hZUEZTX0hfICovCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGJmcy5jIGIvYXJjaC9zMzkwL2h5cGZzL2h5cGZzX2RiZnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDc4MDEzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zMzkwL2h5cGZzL2h5cGZzX2RiZnMuYwpAQCAtMCwwICsxLDExNiBAQAorLyoKKyAqIEh5cGVydmlzb3IgZmlsZXN5c3RlbSBmb3IgTGludXggb24gczM5MCAtIGRlYnVnZnMgaW50ZXJmYWNlCisgKgorICogQ29weXJpZ2h0IChDKSBJQk0gQ29ycC4gMjAxMAorICogQXV0aG9yKHMpOiBNaWNoYWVsIEhvbHpoZXUgPGhvbHpoZXVAbGludXgudm5ldC5pYm0uY29tPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSAiaHlwZnMuaCIKKworc3RhdGljIHN0cnVjdCBkZW50cnkgKmRiZnNfZGlyOworCitzdGF0aWMgc3RydWN0IGh5cGZzX2RiZnNfZGF0YSAqaHlwZnNfZGJmc19kYXRhX2FsbG9jKHN0cnVjdCBoeXBmc19kYmZzX2ZpbGUgKmYpCit7CisJc3RydWN0IGh5cGZzX2RiZnNfZGF0YSAqZGF0YTsKKworCWRhdGEgPSBrbWFsbG9jKHNpemVvZigqZGF0YSksIEdGUF9LRVJORUwpOworCWlmICghZGF0YSkKKwkJcmV0dXJuIE5VTEw7CisJa3JlZl9pbml0KCZkYXRhLT5rcmVmKTsKKwlkYXRhLT5kYmZzX2ZpbGUgPSBmOworCXJldHVybiBkYXRhOworfQorCitzdGF0aWMgdm9pZCBoeXBmc19kYmZzX2RhdGFfZnJlZShzdHJ1Y3Qga3JlZiAqa3JlZikKK3sKKwlzdHJ1Y3QgaHlwZnNfZGJmc19kYXRhICpkYXRhOworCisJZGF0YSA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgaHlwZnNfZGJmc19kYXRhLCBrcmVmKTsKKwlkYXRhLT5kYmZzX2ZpbGUtPmRhdGFfZnJlZShkYXRhLT5idWZfZnJlZV9wdHIpOworCWtmcmVlKGRhdGEpOworfQorCitzdGF0aWMgdm9pZCBkYXRhX2ZyZWVfZGVsYXllZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGh5cGZzX2RiZnNfZGF0YSAqZGF0YTsKKwlzdHJ1Y3QgaHlwZnNfZGJmc19maWxlICpkZjsKKworCWRmID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBoeXBmc19kYmZzX2ZpbGUsIGRhdGFfZnJlZV93b3JrLndvcmspOworCW11dGV4X2xvY2soJmRmLT5sb2NrKTsKKwlkYXRhID0gZGYtPmRhdGE7CisJZGYtPmRhdGEgPSBOVUxMOworCW11dGV4X3VubG9jaygmZGYtPmxvY2spOworCWtyZWZfcHV0KCZkYXRhLT5rcmVmLCBoeXBmc19kYmZzX2RhdGFfZnJlZSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGRiZnNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCSBzaXplX3Qgc2l6ZSwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBoeXBmc19kYmZzX2RhdGEgKmRhdGE7CisJc3RydWN0IGh5cGZzX2RiZnNfZmlsZSAqZGY7CisJc3NpemVfdCByYzsKKworCWlmICgqcHBvcyAhPSAwKQorCQlyZXR1cm4gMDsKKworCWRmID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9wcml2YXRlOworCW11dGV4X2xvY2soJmRmLT5sb2NrKTsKKwlpZiAoIWRmLT5kYXRhKSB7CisJCWRhdGEgPSBoeXBmc19kYmZzX2RhdGFfYWxsb2MoZGYpOworCQlpZiAoIWRhdGEpIHsKKwkJCW11dGV4X3VubG9jaygmZGYtPmxvY2spOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJcmMgPSBkZi0+ZGF0YV9jcmVhdGUoJmRhdGEtPmJ1ZiwgJmRhdGEtPmJ1Zl9mcmVlX3B0ciwKKwkJCQkgICAgICZkYXRhLT5zaXplKTsKKwkJaWYgKHJjKSB7CisJCQltdXRleF91bmxvY2soJmRmLT5sb2NrKTsKKwkJCWtmcmVlKGRhdGEpOworCQkJcmV0dXJuIHJjOworCQl9CisJCWRmLT5kYXRhID0gZGF0YTsKKwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZkZi0+ZGF0YV9mcmVlX3dvcmssIEhaKTsKKwl9CisJZGF0YSA9IGRmLT5kYXRhOworCWtyZWZfZ2V0KCZkYXRhLT5rcmVmKTsKKwltdXRleF91bmxvY2soJmRmLT5sb2NrKTsKKworCXJjID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIoYnVmLCBzaXplLCBwcG9zLCBkYXRhLT5idWYsIGRhdGEtPnNpemUpOworCWtyZWZfcHV0KCZkYXRhLT5rcmVmLCBoeXBmc19kYmZzX2RhdGFfZnJlZSk7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkYmZzX29wcyA9IHsKKwkucmVhZAkJPSBkYmZzX3JlYWQsCisJLmxsc2VlawkJPSBub19sbHNlZWssCit9OworCitpbnQgaHlwZnNfZGJmc19jcmVhdGVfZmlsZShzdHJ1Y3QgaHlwZnNfZGJmc19maWxlICpkZikKK3sKKwlkZi0+ZGVudHJ5ID0gZGVidWdmc19jcmVhdGVfZmlsZShkZi0+bmFtZSwgMDQwMCwgZGJmc19kaXIsIGRmLAorCQkJCQkgJmRiZnNfb3BzKTsKKwlpZiAoSVNfRVJSKGRmLT5kZW50cnkpKQorCQlyZXR1cm4gUFRSX0VSUihkZi0+ZGVudHJ5KTsKKwltdXRleF9pbml0KCZkZi0+bG9jayk7CisJSU5JVF9ERUxBWUVEX1dPUksoJmRmLT5kYXRhX2ZyZWVfd29yaywgZGF0YV9mcmVlX2RlbGF5ZWQpOworCXJldHVybiAwOworfQorCit2b2lkIGh5cGZzX2RiZnNfcmVtb3ZlX2ZpbGUoc3RydWN0IGh5cGZzX2RiZnNfZmlsZSAqZGYpCit7CisJZGVidWdmc19yZW1vdmUoZGYtPmRlbnRyeSk7Cit9CisKK2ludCBoeXBmc19kYmZzX2luaXQodm9pZCkKK3sKKwlkYmZzX2RpciA9IGRlYnVnZnNfY3JlYXRlX2RpcigiczM5MF9oeXBmcyIsIE5VTEwpOworCWlmIChJU19FUlIoZGJmc19kaXIpKQorCQlyZXR1cm4gUFRSX0VSUihkYmZzX2Rpcik7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgaHlwZnNfZGJmc19leGl0KHZvaWQpCit7CisJZGVidWdmc19yZW1vdmUoZGJmc19kaXIpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2h5cGZzL2h5cGZzX2RpYWcuYyBiL2FyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnLmMKaW5kZXggY2Q0YTgxYi4uNjAyM2M2ZCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2h5cGZzL2h5cGZzX2RpYWcuYworKysgYi9hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZy5jCkBAIC01NTUsODEgKzU1NSwzOCBAQAogCWNoYXIJCQlidWZbXTsJLyogZDIwNCBidWZmZXIgKi8KIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi1zdHJ1Y3QgZGJmc19kMjA0X3ByaXZhdGUgewotCXN0cnVjdCBkYmZzX2QyMDQJKmQyMDQ7CS8qIEFsaWduZWQgZDIwNCBkYXRhIHdpdGggaGVhZGVyICovCi0Jdm9pZAkJCSpiYXNlOwkvKiBCYXNlIHBvaW50ZXIgKG5lZWRlZCBmb3IgdmZyZWUpICovCi19OwotCi1zdGF0aWMgaW50IGRiZnNfZDIwNF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQorc3RhdGljIGludCBkYmZzX2QyMDRfY3JlYXRlKHZvaWQgKipkYXRhLCB2b2lkICoqZGF0YV9mcmVlX3B0ciwgc2l6ZV90ICpzaXplKQogewotCXN0cnVjdCBkYmZzX2QyMDRfcHJpdmF0ZSAqZGF0YTsKIAlzdHJ1Y3QgZGJmc19kMjA0ICpkMjA0OwogCWludCByYywgYnVmX3NpemU7CisJdm9pZCAqYmFzZTsKIAotCWRhdGEgPSBremFsbG9jKHNpemVvZigqZGF0YSksIEdGUF9LRVJORUwpOwotCWlmICghZGF0YSkKLQkJcmV0dXJuIC1FTk9NRU07CiAJYnVmX3NpemUgPSBQQUdFX1NJWkUgKiAoZGlhZzIwNF9idWZfcGFnZXMgKyAxKSArIHNpemVvZihkMjA0LT5oZHIpOwotCWRhdGEtPmJhc2UgPSB2bWFsbG9jKGJ1Zl9zaXplKTsKLQlpZiAoIWRhdGEtPmJhc2UpIHsKLQkJcmMgPSAtRU5PTUVNOwotCQlnb3RvIGZhaWxfa2ZyZWVfZGF0YTsKKwliYXNlID0gdm1hbGxvYyhidWZfc2l6ZSk7CisJaWYgKCFiYXNlKQorCQlyZXR1cm4gLUVOT01FTTsKKwltZW1zZXQoYmFzZSwgMCwgYnVmX3NpemUpOworCWQyMDQgPSBwYWdlX2FsaWduX3B0cihiYXNlICsgc2l6ZW9mKGQyMDQtPmhkcikpIC0gc2l6ZW9mKGQyMDQtPmhkcik7CisJcmMgPSBkaWFnMjA0X2RvX3N0b3JlKGQyMDQtPmJ1ZiwgZGlhZzIwNF9idWZfcGFnZXMpOworCWlmIChyYykgeworCQl2ZnJlZShiYXNlKTsKKwkJcmV0dXJuIHJjOwogCX0KLQltZW1zZXQoZGF0YS0+YmFzZSwgMCwgYnVmX3NpemUpOwotCWQyMDQgPSBwYWdlX2FsaWduX3B0cihkYXRhLT5iYXNlICsgc2l6ZW9mKGQyMDQtPmhkcikpCi0JCS0gc2l6ZW9mKGQyMDQtPmhkcik7Ci0JcmMgPSBkaWFnMjA0X2RvX3N0b3JlKCZkMjA0LT5idWYsIGRpYWcyMDRfYnVmX3BhZ2VzKTsKLQlpZiAocmMpCi0JCWdvdG8gZmFpbF92ZnJlZV9iYXNlOwogCWQyMDQtPmhkci52ZXJzaW9uID0gREJGU19EMjA0X0hEUl9WRVJTSU9OOwogCWQyMDQtPmhkci5sZW4gPSBQQUdFX1NJWkUgKiBkaWFnMjA0X2J1Zl9wYWdlczsKIAlkMjA0LT5oZHIuc2MgPSBkaWFnMjA0X3N0b3JlX3NjOwotCWRhdGEtPmQyMDQgPSBkMjA0OwotCWZpbGUtPnByaXZhdGVfZGF0YSA9IGRhdGE7Ci0JcmV0dXJuIG5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbGUpOwotCi1mYWlsX3ZmcmVlX2Jhc2U6Ci0JdmZyZWUoZGF0YS0+YmFzZSk7Ci1mYWlsX2tmcmVlX2RhdGE6Ci0Ja2ZyZWUoZGF0YSk7Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRiZnNfZDIwNF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXN0cnVjdCBkYmZzX2QyMDRfcHJpdmF0ZSAqZGF0YSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQotCXZmcmVlKGRhdGEtPmJhc2UpOwotCWtmcmVlKGRhdGEpOworCSpkYXRhID0gZDIwNDsKKwkqZGF0YV9mcmVlX3B0ciA9IGJhc2U7CisJKnNpemUgPSBkMjA0LT5oZHIubGVuICsgc2l6ZW9mKHN0cnVjdCBkYmZzX2QyMDRfaGRyKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHNzaXplX3QgZGJmc19kMjA0X3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCi0JCQkgICAgICBzaXplX3Qgc2l6ZSwgbG9mZl90ICpwcG9zKQotewotCXN0cnVjdCBkYmZzX2QyMDRfcHJpdmF0ZSAqZGF0YSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQotCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcihidWYsIHNpemUsIHBwb3MsIGRhdGEtPmQyMDQsCi0JCQkJICAgICAgIGRhdGEtPmQyMDQtPmhkci5sZW4gKwotCQkJCSAgICAgICBzaXplb2YoZGF0YS0+ZDIwNC0+aGRyKSk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRiZnNfZDIwNF9vcHMgPSB7Ci0JLm9wZW4JCT0gZGJmc19kMjA0X29wZW4sCi0JLnJlYWQJCT0gZGJmc19kMjA0X3JlYWQsCi0JLnJlbGVhc2UJPSBkYmZzX2QyMDRfcmVsZWFzZSwKLQkubGxzZWVrCQk9IG5vX2xsc2VlaywKK3N0YXRpYyBzdHJ1Y3QgaHlwZnNfZGJmc19maWxlIGRiZnNfZmlsZV9kMjA0ID0geworCS5uYW1lCQk9ICJkaWFnXzIwNCIsCisJLmRhdGFfY3JlYXRlCT0gZGJmc19kMjA0X2NyZWF0ZSwKKwkuZGF0YV9mcmVlCT0gdmZyZWUsCiB9OwogCi1zdGF0aWMgaW50IGh5cGZzX2RiZnNfaW5pdCh2b2lkKQotewotCWRiZnNfZDIwNF9maWxlID0gZGVidWdmc19jcmVhdGVfZmlsZSgiZGlhZ18yMDQiLCAwNDAwLCBoeXBmc19kYmZzX2RpciwKLQkJCQkJICAgICBOVUxMLCAmZGJmc19kMjA0X29wcyk7Ci0JaWYgKElTX0VSUihkYmZzX2QyMDRfZmlsZSkpCi0JCXJldHVybiBQVFJfRVJSKGRiZnNfZDIwNF9maWxlKTsKLQlyZXR1cm4gMDsKLX0KLQogX19pbml0IGludCBoeXBmc19kaWFnX2luaXQodm9pZCkKIHsKIAlpbnQgcmM7CkBAIC02MzksNyArNTk2LDcgQEAKIAkJcmV0dXJuIC1FTk9EQVRBOwogCX0KIAlpZiAoZGlhZzIwNF9pbmZvX3R5cGUgPT0gSU5GT19FWFQpIHsKLQkJcmMgPSBoeXBmc19kYmZzX2luaXQoKTsKKwkJcmMgPSBoeXBmc19kYmZzX2NyZWF0ZV9maWxlKCZkYmZzX2ZpbGVfZDIwNCk7CiAJCWlmIChyYykKIAkJCXJldHVybiByYzsKIAl9CkBAIC02NjAsNiArNjE3LDcgQEAKIAlkZWJ1Z2ZzX3JlbW92ZShkYmZzX2QyMDRfZmlsZSk7CiAJZGlhZzIyNF9kZWxldGVfbmFtZV90YWJsZSgpOwogCWRpYWcyMDRfZnJlZV9idWZmZXIoKTsKKwloeXBmc19kYmZzX3JlbW92ZV9maWxlKCZkYmZzX2ZpbGVfZDIwNCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaHlwZnMvaHlwZnNfdm0uYyBiL2FyY2gvczM5MC9oeXBmcy9oeXBmc192bS5jCmluZGV4IDI2Y2YxNzcuLmU1NDc5NjAgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9oeXBmcy9oeXBmc192bS5jCisrKyBiL2FyY2gvczM5MC9oeXBmcy9oeXBmc192bS5jCkBAIC0yMCw4ICsyMCw2IEBACiBzdGF0aWMgY2hhciBhbGxfZ3Vlc3RzW10gPSAiKiAgICAgICAiOwogc3RhdGljIGNoYXIgKmd1ZXN0X3F1ZXJ5OwogCi1zdGF0aWMgc3RydWN0IGRlbnRyeSAqZGJmc19kMmZjX2ZpbGU7Ci0KIHN0cnVjdCBkaWFnMmZjX2RhdGEgewogCV9fdTMyIHZlcnNpb247CiAJX191MzIgZmxhZ3M7CkBAIC0xMDQsNyArMTAyLDcgQEAKIAlyZXR1cm4gZGF0YTsKIH0KIAotc3RhdGljIHZvaWQgZGlhZzJmY19mcmVlKHZvaWQgKmRhdGEpCitzdGF0aWMgdm9pZCBkaWFnMmZjX2ZyZWUoY29uc3Qgdm9pZCAqZGF0YSkKIHsKIAl2ZnJlZShkYXRhKTsKIH0KQEAgLTIzOSw0MyArMjM3LDI5IEBACiAJY2hhcgkJCWJ1ZltdOwkvKiBkMmZjIGJ1ZmZlciAqLwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLXN0YXRpYyBpbnQgZGJmc19kMmZjX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCitzdGF0aWMgaW50IGRiZnNfZGlhZzJmY19jcmVhdGUodm9pZCAqKmRhdGEsIHZvaWQgKipkYXRhX2ZyZWVfcHRyLCBzaXplX3QgKnNpemUpCiB7Ci0Jc3RydWN0IGRiZnNfZDJmYyAqZGF0YTsKKwlzdHJ1Y3QgZGJmc19kMmZjICpkMmZjOwogCXVuc2lnbmVkIGludCBjb3VudDsKIAotCWRhdGEgPSBkaWFnMmZjX3N0b3JlKGd1ZXN0X3F1ZXJ5LCAmY291bnQsIHNpemVvZihkYXRhLT5oZHIpKTsKLQlpZiAoSVNfRVJSKGRhdGEpKQotCQlyZXR1cm4gUFRSX0VSUihkYXRhKTsKLQlnZXRfY2xvY2tfZXh0KGRhdGEtPmhkci50b2RfZXh0KTsKLQlkYXRhLT5oZHIubGVuID0gY291bnQgKiBzaXplb2Yoc3RydWN0IGRpYWcyZmNfZGF0YSk7Ci0JZGF0YS0+aGRyLnZlcnNpb24gPSBEQkZTX0QyRkNfSERSX1ZFUlNJT047Ci0JZGF0YS0+aGRyLmNvdW50ID0gY291bnQ7Ci0JbWVtc2V0KCZkYXRhLT5oZHIucmVzZXJ2ZWQsIDAsIHNpemVvZihkYXRhLT5oZHIucmVzZXJ2ZWQpKTsKLQlmaWxlLT5wcml2YXRlX2RhdGEgPSBkYXRhOwotCXJldHVybiBub25zZWVrYWJsZV9vcGVuKGlub2RlLCBmaWxlKTsKLX0KLQotc3RhdGljIGludCBkYmZzX2QyZmNfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlkaWFnMmZjX2ZyZWUoZmlsZS0+cHJpdmF0ZV9kYXRhKTsKKwlkMmZjID0gZGlhZzJmY19zdG9yZShndWVzdF9xdWVyeSwgJmNvdW50LCBzaXplb2YoZDJmYy0+aGRyKSk7CisJaWYgKElTX0VSUihkMmZjKSkKKwkJcmV0dXJuIFBUUl9FUlIoZDJmYyk7CisJZ2V0X2Nsb2NrX2V4dChkMmZjLT5oZHIudG9kX2V4dCk7CisJZDJmYy0+aGRyLmxlbiA9IGNvdW50ICogc2l6ZW9mKHN0cnVjdCBkaWFnMmZjX2RhdGEpOworCWQyZmMtPmhkci52ZXJzaW9uID0gREJGU19EMkZDX0hEUl9WRVJTSU9OOworCWQyZmMtPmhkci5jb3VudCA9IGNvdW50OworCW1lbXNldCgmZDJmYy0+aGRyLnJlc2VydmVkLCAwLCBzaXplb2YoZDJmYy0+aGRyLnJlc2VydmVkKSk7CisJKmRhdGEgPSBkMmZjOworCSpkYXRhX2ZyZWVfcHRyID0gZDJmYzsKKwkqc2l6ZSA9IGQyZmMtPmhkci5sZW4gKyBzaXplb2Yoc3RydWN0IGRiZnNfZDJmY19oZHIpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3NpemVfdCBkYmZzX2QyZmNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKLQkJCQkgICAgc2l6ZV90IHNpemUsIGxvZmZfdCAqcHBvcykKLXsKLQlzdHJ1Y3QgZGJmc19kMmZjICpkYXRhID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCi0JcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKGJ1Ziwgc2l6ZSwgcHBvcywgZGF0YSwgZGF0YS0+aGRyLmxlbiArCi0JCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgZGJmc19kMmZjX2hkcikpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkYmZzX2QyZmNfb3BzID0gewotCS5vcGVuCQk9IGRiZnNfZDJmY19vcGVuLAotCS5yZWFkCQk9IGRiZnNfZDJmY19yZWFkLAotCS5yZWxlYXNlCT0gZGJmc19kMmZjX3JlbGVhc2UsCi0JLmxsc2VlawkJPSBub19sbHNlZWssCitzdGF0aWMgc3RydWN0IGh5cGZzX2RiZnNfZmlsZSBkYmZzX2ZpbGVfMmZjID0geworCS5uYW1lCQk9ICJkaWFnXzJmYyIsCisJLmRhdGFfY3JlYXRlCT0gZGJmc19kaWFnMmZjX2NyZWF0ZSwKKwkuZGF0YV9mcmVlCT0gZGlhZzJmY19mcmVlLAogfTsKIAogaW50IGh5cGZzX3ZtX2luaXQodm9pZCkKQEAgLTI4OCwxOCArMjcyLDEyIEBACiAJCWd1ZXN0X3F1ZXJ5ID0gbG9jYWxfZ3Vlc3Q7CiAJZWxzZQogCQlyZXR1cm4gLUVBQ0NFUzsKLQotCWRiZnNfZDJmY19maWxlID0gZGVidWdmc19jcmVhdGVfZmlsZSgiZGlhZ18yZmMiLCAwNDAwLCBoeXBmc19kYmZzX2RpciwKLQkJCQkJICAgICBOVUxMLCAmZGJmc19kMmZjX29wcyk7Ci0JaWYgKElTX0VSUihkYmZzX2QyZmNfZmlsZSkpCi0JCXJldHVybiBQVFJfRVJSKGRiZnNfZDJmY19maWxlKTsKLQotCXJldHVybiAwOworCXJldHVybiBoeXBmc19kYmZzX2NyZWF0ZV9maWxlKCZkYmZzX2ZpbGVfMmZjKTsKIH0KIAogdm9pZCBoeXBmc192bV9leGl0KHZvaWQpCiB7CiAJaWYgKCFNQUNISU5FX0lTX1ZNKQogCQlyZXR1cm47Ci0JZGVidWdmc19yZW1vdmUoZGJmc19kMmZjX2ZpbGUpOworCWh5cGZzX2RiZnNfcmVtb3ZlX2ZpbGUoJmRiZnNfZmlsZV8yZmMpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2h5cGZzL2lub2RlLmMgYi9hcmNoL3MzOTAvaHlwZnMvaW5vZGUuYwppbmRleCA0N2NjNDQ2Li42ZmU4NzRmIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaHlwZnMvaW5vZGUuYworKysgYi9hcmNoL3MzOTAvaHlwZnMvaW5vZGUuYwpAQCAtNDYsOCArNDYsNiBAQAogLyogc3RhcnQgb2YgbGlzdCBvZiBhbGwgZGVudHJpZXMsIHdoaWNoIGhhdmUgdG8gYmUgZGVsZXRlZCBvbiB1cGRhdGUgKi8KIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpoeXBmc19sYXN0X2RlbnRyeTsKIAotc3RydWN0IGRlbnRyeSAqaHlwZnNfZGJmc19kaXI7Ci0KIHN0YXRpYyB2b2lkIGh5cGZzX3VwZGF0ZV91cGRhdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKIAlzdHJ1Y3QgaHlwZnNfc2JfaW5mbyAqc2JfaW5mbyA9IHNiLT5zX2ZzX2luZm87CkBAIC00NzEsMTMgKzQ2OSwxMiBAQAogewogCWludCByYzsKIAotCWh5cGZzX2RiZnNfZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKCJzMzkwX2h5cGZzIiwgTlVMTCk7Ci0JaWYgKElTX0VSUihoeXBmc19kYmZzX2RpcikpCi0JCXJldHVybiBQVFJfRVJSKGh5cGZzX2RiZnNfZGlyKTsKLQorCXJjID0gaHlwZnNfZGJmc19pbml0KCk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CiAJaWYgKGh5cGZzX2RpYWdfaW5pdCgpKSB7CiAJCXJjID0gLUVOT0RBVEE7Ci0JCWdvdG8gZmFpbF9kZWJ1Z2ZzX3JlbW92ZTsKKwkJZ290byBmYWlsX2RiZnNfZXhpdDsKIAl9CiAJaWYgKGh5cGZzX3ZtX2luaXQoKSkgewogCQlyYyA9IC1FTk9EQVRBOwpAQCAtNDk5LDkgKzQ5Niw4IEBACiAJaHlwZnNfdm1fZXhpdCgpOwogZmFpbF9oeXBmc19kaWFnX2V4aXQ6CiAJaHlwZnNfZGlhZ19leGl0KCk7Ci1mYWlsX2RlYnVnZnNfcmVtb3ZlOgotCWRlYnVnZnNfcmVtb3ZlKGh5cGZzX2RiZnNfZGlyKTsKLQorZmFpbF9kYmZzX2V4aXQ6CisJaHlwZnNfZGJmc19leGl0KCk7CiAJcHJfZXJyKCJJbml0aWFsaXphdGlvbiBvZiBoeXBmcyBmYWlsZWQgd2l0aCByYz0laVxuIiwgcmMpOwogCXJldHVybiByYzsKIH0KQEAgLTUxMCw3ICs1MDYsNyBAQAogewogCWh5cGZzX2RpYWdfZXhpdCgpOwogCWh5cGZzX3ZtX2V4aXQoKTsKLQlkZWJ1Z2ZzX3JlbW92ZShoeXBmc19kYmZzX2Rpcik7CisJaHlwZnNfZGJmc19leGl0KCk7CiAJdW5yZWdpc3Rlcl9maWxlc3lzdGVtKCZoeXBmc190eXBlKTsKIAlrb2JqZWN0X3B1dChzMzkwX2tvYmopOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2Njd2Rldi5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2Njd2Rldi5oCmluZGV4IGU4NTAxMTEuLmZmNmY2MmUgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jY3dkZXYuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY2N3ZGV2LmgKQEAgLTIwNCw2ICsyMDQsOCBAQAogCQkJICAgIHVuc2lnbmVkIGxvbmcsIHU4LCBpbnQpOwogaW50IGNjd19kZXZpY2VfdG1faW50cmcoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYpOwogCitpbnQgY2N3X2RldmljZV9nZXRfbWRjKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LCB1OCBtYXNrKTsKKwogZXh0ZXJuIGludCBjY3dfZGV2aWNlX3NldF9vbmxpbmUoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYpOwogZXh0ZXJuIGludCBjY3dfZGV2aWNlX3NldF9vZmZsaW5lKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NwdXRpbWUuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jcHV0aW1lLmgKaW5kZXggNDBlMmFiMC4uMDgxNDM0OCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NwdXRpbWUuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY3B1dGltZS5oCkBAIC0yMDIsNyArMjAyLDcgQEAKIAogc3RhdGljIGlubGluZSBpbnQgczM5MF9ub2h6X2RlbGF5KGludCBjcHUpCiB7Ci0JcmV0dXJuIHBlcl9jcHUoczM5MF9pZGxlLCBjcHUpLm5vaHpfZGVsYXkgIT0gMDsKKwlyZXR1cm4gX19nZXRfY3B1X3ZhcihzMzkwX2lkbGUpLm5vaHpfZGVsYXkgIT0gMDsKIH0KIAogI2RlZmluZSBhcmNoX25lZWRzX2NwdShjcHUpIHMzOTBfbm9oel9kZWxheShjcHUpCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vZGFzZC5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2Rhc2QuaAppbmRleCBiNjA0YTkxLi4wYmUyOGVmIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vZGFzZC5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9kYXNkLmgKQEAgLTczLDYgKzczLDcgQEAKICAqIDB4MDI6IHVzZSBkaWFnIGRpc2NpcGxpbmUgKGRpYWcpCiAgKiAweDA0OiBzZXQgdGhlIGRldmljZSBpbml0aWFsbHkgb25saW5lIChpbnRlcm5hbCB1c2Ugb25seSkKICAqIDB4MDg6IGVuYWJsZSBFUlAgcmVsYXRlZCBsb2dnaW5nCisgKiAweDIwOiBnaXZlIGFjY2VzcyB0byByYXcgZWNrZCBkYXRhCiAgKi8KICNkZWZpbmUgREFTRF9GRUFUVVJFX0RFRkFVTFQJICAgICAweDAwCiAjZGVmaW5lIERBU0RfRkVBVFVSRV9SRUFET05MWQkgICAgIDB4MDEKQEAgLTgwLDYgKzgxLDggQEAKICNkZWZpbmUgREFTRF9GRUFUVVJFX0lOSVRJQUxfT05MSU5FICAweDA0CiAjZGVmaW5lIERBU0RfRkVBVFVSRV9FUlBMT0cJICAgICAweDA4CiAjZGVmaW5lIERBU0RfRkVBVFVSRV9GQUlMRkFTVAkgICAgIDB4MTAKKyNkZWZpbmUgREFTRF9GRUFUVVJFX0ZBSUxPTlNMQ0sgICAgICAweDIwCisjZGVmaW5lIERBU0RfRkVBVFVSRV9VU0VSQVcJICAgICAweDQwCiAKICNkZWZpbmUgREFTRF9QQVJUTl9CSVRTIDIKIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2Z0cmFjZS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2Z0cmFjZS5oCmluZGV4IDk2YzE0YTkuLjNjMjliZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9mdHJhY2UuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vZnRyYWNlLmgKQEAgLTQsMjAgKzQsMTcgQEAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKIGV4dGVybiB2b2lkIF9tY291bnQodm9pZCk7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBmdHJhY2VfZHluX2Z1bmM7CiAKIHN0cnVjdCBkeW5fYXJjaF9mdHJhY2UgeyB9OwogCiAjZGVmaW5lIE1DT1VOVF9BRERSICgobG9uZylfbWNvdW50KQogCiAjaWZkZWYgQ09ORklHXzY0QklUCi0jZGVmaW5lIE1DT1VOVF9PRkZTRVRfUkVUIDE4Ci0jZGVmaW5lIE1DT1VOVF9JTlNOX1NJWkUgIDI0Ci0jZGVmaW5lIE1DT1VOVF9PRkZTRVQJICAxNAotI2Vsc2UKLSNkZWZpbmUgTUNPVU5UX09GRlNFVF9SRVQgMjYKLSNkZWZpbmUgTUNPVU5UX0lOU05fU0laRSAgMzAKKyNkZWZpbmUgTUNPVU5UX0lOU05fU0laRSAgMTIKICNkZWZpbmUgTUNPVU5UX09GRlNFVAkgICA4CisjZWxzZQorI2RlZmluZSBNQ09VTlRfSU5TTl9TSVpFICAyMAorI2RlZmluZSBNQ09VTlRfT0ZGU0VUCSAgIDQKICNlbmRpZgogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZnRyYWNlX2NhbGxfYWRqdXN0KHVuc2lnbmVkIGxvbmcgYWRkcikKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9oYXJkaXJxLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vaGFyZGlycS5oCmluZGV4IDg4MWQ5NDUuLmU0MTU1ZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9oYXJkaXJxLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2hhcmRpcnEuaApAQCAtMjEsMjAgKzIxLDQgQEAKIAogI2RlZmluZSBIQVJESVJRX0JJVFMJOAogCi12b2lkIGNsb2NrX2NvbXBhcmF0b3Jfd29yayh2b2lkKTsKLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgbG9jYWxfdGlja19kaXNhYmxlKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBsb25nIG9sZDsKLQotCW9sZCA9IFMzOTBfbG93Y29yZS5jbG9ja19jb21wYXJhdG9yOwotCVMzOTBfbG93Y29yZS5jbG9ja19jb21wYXJhdG9yID0gLTFVTEw7Ci0JcmV0dXJuIG9sZDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGxvY2FsX3RpY2tfZW5hYmxlKHVuc2lnbmVkIGxvbmcgbG9uZyBjb21wKQotewotCVMzOTBfbG93Y29yZS5jbG9ja19jb21wYXJhdG9yID0gY29tcDsKLX0KLQogI2VuZGlmIC8qIF9fQVNNX0hBUkRJUlFfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2lycS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2lycS5oCmluZGV4IDdkYTk5MWEuLmRiMTRhMzEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9pcnEuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vaXJxLmgKQEAgLTEsMjMgKzEsMzMgQEAKICNpZm5kZWYgX0FTTV9JUlFfSAogI2RlZmluZSBfQVNNX0lSUV9ICiAKLSNpZmRlZiBfX0tFUk5FTF9fCiAjaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPgogCi0vKgotICogdGhlIGRlZmluaXRpb24gb2YgaXJxcyBoYXMgY2hhbmdlZCBpbiAyLjUuNDY6Ci0gKiBOUl9JUlFTIGlzIG5vIGxvbmdlciB0aGUgbnVtYmVyIG9mIGkvbwotICogaW50ZXJydXB0cyAoNjU1MzYpLCBidXQgcmF0aGVyIHRoZSBudW1iZXIKLSAqIG9mIGludGVycnVwdCBjbGFzc2VzICgyKS4KLSAqIE9ubHkgZXh0ZXJuYWwgYW5kIGkvbyBpbnRlcnJ1cHRzIG1ha2UgbXVjaCBzZW5zZSBoZXJlIChDSCkuCi0gKi8KLQogZW51bSBpbnRlcnJ1cHRpb25fY2xhc3MgewogCUVYVEVSTkFMX0lOVEVSUlVQVCwKIAlJT19JTlRFUlJVUFQsCi0KKwlFWFRJTlRfQ0xLLAorCUVYVElOVF9JUEksCisJRVhUSU5UX1RNUiwKKwlFWFRJTlRfVExBLAorCUVYVElOVF9QRkwsCisJRVhUSU5UX0RTRCwKKwlFWFRJTlRfVlJULAorCUVYVElOVF9TQ1AsCisJRVhUSU5UX0lVQywKKwlJT0lOVF9RQUksCisJSU9JTlRfUURJLAorCUlPSU5UX0RBUywKKwlJT0lOVF9DMTUsCisJSU9JTlRfQzcwLAorCUlPSU5UX1RBUCwKKwlJT0lOVF9WTVIsCisJSU9JTlRfTENTLAorCUlPSU5UX0NMVywKKwlJT0lOVF9DVEMsCisJSU9JTlRfQVBCLAorCU5NSV9OTUksCiAJTlJfSVJRUywKIH07CiAKLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCi0jZW5kaWYKKyNlbmRpZiAvKiBfQVNNX0lSUV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3Byb2Jlcy5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2twcm9iZXMuaAppbmRleCAzMzBmNjhjLi5hMjMxYTk0IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3Byb2Jlcy5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rcHJvYmVzLmgKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KIAotI2RlZmluZSAgX19BUkNIX1dBTlRfS1BST0JFU19JTlNOX1NMT1QKIHN0cnVjdCBwdF9yZWdzOwogc3RydWN0IGtwcm9iZTsKIApAQCAtNTgsMjMgKzU3LDEyIEBACiAvKiBBcmNoaXRlY3R1cmUgc3BlY2lmaWMgY29weSBvZiBvcmlnaW5hbCBpbnN0cnVjdGlvbiAqLwogc3RydWN0IGFyY2hfc3BlY2lmaWNfaW5zbiB7CiAJLyogY29weSBvZiBvcmlnaW5hbCBpbnN0cnVjdGlvbiAqLwotCWtwcm9iZV9vcGNvZGVfdCAqaW5zbjsKLQlpbnQgZml4dXA7Ci0JaW50IGlsZW47Ci0JaW50IHJlZzsKKwlrcHJvYmVfb3Bjb2RlX3QgaW5zbltNQVhfSU5TTl9TSVpFXTsKIH07CiAKLXN0cnVjdCBpbnNfcmVwbGFjZV9hcmdzIHsKLQlrcHJvYmVfb3Bjb2RlX3QgKnB0cjsKLQlrcHJvYmVfb3Bjb2RlX3Qgb2xkOwotCWtwcm9iZV9vcGNvZGVfdCBuZXc7Ci19Owogc3RydWN0IHByZXZfa3Byb2JlIHsKIAlzdHJ1Y3Qga3Byb2JlICprcDsKIAl1bnNpZ25lZCBsb25nIHN0YXR1czsKLQl1bnNpZ25lZCBsb25nIHNhdmVkX3BzdzsKLQl1bnNpZ25lZCBsb25nIGtwcm9iZV9zYXZlZF9pbWFzazsKLQl1bnNpZ25lZCBsb25nIGtwcm9iZV9zYXZlZF9jdGxbM107CiB9OwogCiAvKiBwZXItY3B1IGtwcm9iZSBjb250cm9sIGJsb2NrICovCkBAIC04MiwxNyArNzAsMTMgQEAKIAl1bnNpZ25lZCBsb25nIGtwcm9iZV9zdGF0dXM7CiAJdW5zaWduZWQgbG9uZyBrcHJvYmVfc2F2ZWRfaW1hc2s7CiAJdW5zaWduZWQgbG9uZyBrcHJvYmVfc2F2ZWRfY3RsWzNdOwotCXN0cnVjdCBwdF9yZWdzIGpwcm9iZV9zYXZlZF9yZWdzOwotCXVuc2lnbmVkIGxvbmcganByb2JlX3NhdmVkX3IxNDsKLQl1bnNpZ25lZCBsb25nIGpwcm9iZV9zYXZlZF9yMTU7CiAJc3RydWN0IHByZXZfa3Byb2JlIHByZXZfa3Byb2JlOworCXN0cnVjdCBwdF9yZWdzIGpwcm9iZV9zYXZlZF9yZWdzOwogCWtwcm9iZV9vcGNvZGVfdCBqcHJvYmVzX3N0YWNrW01BWF9TVEFDS19TSVpFXTsKIH07CiAKIHZvaWQgYXJjaF9yZW1vdmVfa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnApOwogdm9pZCBrcmV0cHJvYmVfdHJhbXBvbGluZSh2b2lkKTsKLWludCAgaXNfcHJvaGliaXRlZF9vcGNvZGUoa3Byb2JlX29wY29kZV90ICppbnN0cnVjdGlvbik7Ci12b2lkIGdldF9pbnN0cnVjdGlvbl90eXBlKHN0cnVjdCBhcmNoX3NwZWNpZmljX2luc24gKmFpbnNuKTsKIAogaW50IGtwcm9iZV9mYXVsdF9oYW5kbGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgdHJhcG5yKTsKIGludCBrcHJvYmVfZXhjZXB0aW9uc19ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL211dGV4LmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbXV0ZXguaAppbmRleCA0NThjMWY3Li42ODgyNzFmIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbXV0ZXguaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbXV0ZXguaApAQCAtNywzICs3LDUgQEAKICAqLwogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvbXV0ZXgtZGVjLmg+CisKKyNkZWZpbmUgYXJjaF9tdXRleF9jcHVfcmVsYXgoKQliYXJyaWVyKCkKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAppbmRleCA4ZDZmODcxLi5iZjNkZTA0IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCkBAIC0zMiw3ICszMiw2IEBACiB9CiAKIGV4dGVybiB2b2lkIHMzOTBfYWRqdXN0X2ppZmZpZXModm9pZCk7Ci1leHRlcm4gdm9pZCBwcmludF9jcHVfaW5mbyh2b2lkKTsKIGV4dGVybiBpbnQgZ2V0X2NwdV9jYXBhYmlsaXR5KHVuc2lnbmVkIGludCAqKTsKIAogLyoKQEAgLTgxLDcgKzgwLDggQEAKIAltbV9zZWdtZW50X3QgbW1fc2VnbWVudDsKICAgICAgICAgdW5zaWduZWQgbG9uZyBwcm90X2FkZHI7ICAgICAgICAvKiBhZGRyZXNzIG9mIHByb3RlY3Rpb24tZXhjZXAuICAgICAqLwogICAgICAgICB1bnNpZ25lZCBpbnQgdHJhcF9ubzsKLSAgICAgICAgcGVyX3N0cnVjdCBwZXJfaW5mbzsKKwlzdHJ1Y3QgcGVyX3JlZ3MgcGVyX3VzZXI7CS8qIFVzZXIgc3BlY2lmaWVkIFBFUiByZWdpc3RlcnMgKi8KKwlzdHJ1Y3QgcGVyX2V2ZW50IHBlcl9ldmVudDsJLyogQ2F1c2Ugb2YgdGhlIGxhc3QgUEVSIHRyYXAgKi8KICAgICAgICAgLyogcGZhdWx0X3dhaXQgaXMgdXNlZCB0byBibG9jayB0aGUgcHJvY2VzcyBvbiBhIHBmYXVsdCBldmVudCAqLwogCXVuc2lnbmVkIGxvbmcgcGZhdWx0X3dhaXQ7CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3B0cmFjZS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3B0cmFjZS5oCmluZGV4IGQ5ZDQyYjEuLjlhZDYyOGEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wdHJhY2UuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcHRyYWNlLmgKQEAgLTMzMSwxMCArMzMxLDYwIEBACiAJdW5zaWduZWQgc2hvcnQgaWxjOwogCXVuc2lnbmVkIHNob3J0IHN2Y25yOwogfTsKKworLyoKKyAqIFByb2dyYW0gZXZlbnQgcmVjb3JkaW5nIChQRVIpIHJlZ2lzdGVyIHNldC4KKyAqLworc3RydWN0IHBlcl9yZWdzIHsKKwl1bnNpZ25lZCBsb25nIGNvbnRyb2w7CQkvKiBQRVIgY29udHJvbCBiaXRzICovCisJdW5zaWduZWQgbG9uZyBzdGFydDsJCS8qIFBFUiBzdGFydGluZyBhZGRyZXNzICovCisJdW5zaWduZWQgbG9uZyBlbmQ7CQkvKiBQRVIgZW5kaW5nIGFkZHJlc3MgKi8KK307CisKKy8qCisgKiBQRVIgZXZlbnQgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNhdXNlIG9mIHRoZSBsYXN0IFBFUiBleGNlcHRpb24uCisgKi8KK3N0cnVjdCBwZXJfZXZlbnQgeworCXVuc2lnbmVkIHNob3J0IGNhdXNlOwkJLyogUEVSIGNvZGUsIEFUTUlEIGFuZCBBSSAqLworCXVuc2lnbmVkIGxvbmcgYWRkcmVzczsJCS8qIFBFUiBhZGRyZXNzICovCisJdW5zaWduZWQgY2hhciBwYWlkOwkJLyogUEVSIGFjY2VzcyBpZGVudGlmaWNhdGlvbiAqLworfTsKKworLyoKKyAqIFNpbXBsaWZpZWQgcGVyX2luZm8gc3RydWN0dXJlIHVzZWQgdG8gZGVjb2RlIHRoZSBwdHJhY2UgdXNlciBzcGFjZSBBQkkuCisgKi8KK3N0cnVjdCBwZXJfc3RydWN0X2tlcm5lbCB7CisJdW5zaWduZWQgbG9uZyBjcjk7CQkvKiBQRVIgY29udHJvbCBiaXRzICovCisJdW5zaWduZWQgbG9uZyBjcjEwOwkJLyogUEVSIHN0YXJ0aW5nIGFkZHJlc3MgKi8KKwl1bnNpZ25lZCBsb25nIGNyMTE7CQkvKiBQRVIgZW5kaW5nIGFkZHJlc3MgKi8KKwl1bnNpZ25lZCBsb25nIGJpdHM7CQkvKiBPYnNvbGV0ZSBzb2Z0d2FyZSBiaXRzICovCisJdW5zaWduZWQgbG9uZyBzdGFydGluZ19hZGRyOwkvKiBVc2VyIHNwZWNpZmllZCBzdGFydCBhZGRyZXNzICovCisJdW5zaWduZWQgbG9uZyBlbmRpbmdfYWRkcjsJLyogVXNlciBzcGVjaWZpZWQgZW5kIGFkZHJlc3MgKi8KKwl1bnNpZ25lZCBzaG9ydCBwZXJjX2F0bWlkOwkvKiBQRVIgdHJhcCBBVE1JRCAqLworCXVuc2lnbmVkIGxvbmcgYWRkcmVzczsJCS8qIFBFUiB0cmFwIGluc3RydWN0aW9uIGFkZHJlc3MgKi8KKwl1bnNpZ25lZCBjaGFyIGFjY2Vzc19pZDsJLyogUEVSIHRyYXAgYWNjZXNzIGlkZW50aWZpY2F0aW9uICovCit9OworCisjZGVmaW5lIFBFUl9FVkVOVF9NQVNLCQkJMHhFOTAwMDAwMFVMCisKKyNkZWZpbmUgUEVSX0VWRU5UX0JSQU5DSAkJMHg4MDAwMDAwMFVMCisjZGVmaW5lIFBFUl9FVkVOVF9JRkVUQ0gJCTB4NDAwMDAwMDBVTAorI2RlZmluZSBQRVJfRVZFTlRfU1RPUkUJCQkweDIwMDAwMDAwVUwKKyNkZWZpbmUgUEVSX0VWRU5UX1NUT1JFX1JFQUwJCTB4MDgwMDAwMDBVTAorI2RlZmluZSBQRVJfRVZFTlRfTlVMTElGSUNBVElPTgkJMHgwMTAwMDAwMFVMCisKKyNkZWZpbmUgUEVSX0NPTlRST0xfTUFTSwkJMHgwMGEwMDAwMFVMCisKKyNkZWZpbmUgUEVSX0NPTlRST0xfQlJBTkNIX0FERFJFU1MJMHgwMDgwMDAwMFVMCisjZGVmaW5lIFBFUl9DT05UUk9MX0FMVEVSQVRJT04JCTB4MDAyMDAwMDBVTAorCiAjZW5kaWYKIAogLyoKLSAqIE5vdyBmb3IgdGhlIHByb2dyYW0gZXZlbnQgcmVjb3JkaW5nICh0cmFjZSkgZGVmaW5pdGlvbnMuCisgKiBOb3cgZm9yIHRoZSB1c2VyIHNwYWNlIHByb2dyYW0gZXZlbnQgcmVjb3JkaW5nICh0cmFjZSkgZGVmaW5pdGlvbnMuCisgKiBUaGUgZm9sbG93aW5nIHN0cnVjdHVyZXMgYXJlIHVzZWQgb25seSBmb3IgdGhlIHB0cmFjZSBpbnRlcmZhY2UsIGRvbid0CisgKiB0b3VjaCBvciBldmVuIGxvb2sgYXQgaXQgaWYgeW91IGRvbid0IHdhbnQgdG8gbW9kaWZ5IHRoZSB1c2VyLXNwYWNlCisgKiBwdHJhY2UgaW50ZXJmYWNlLiBJbiBwYXJ0aWN1bGFyIHN0YXkgYXdheSBmcm9tIGl0IGZvciBpbi1rZXJuZWwgUEVSLgogICovCiB0eXBlZGVmIHN0cnVjdAogewpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3FkaW8uaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9xZGlvLmgKaW5kZXggNDZlOTZiYy4uMzUwZTdlZSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3FkaW8uaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcWRpby5oCkBAIC0zNjEsNiArMzYxLDcgQEAKIAlxZGlvX2hhbmRsZXJfdCAqaW5wdXRfaGFuZGxlcjsKIAlxZGlvX2hhbmRsZXJfdCAqb3V0cHV0X2hhbmRsZXI7CiAJdm9pZCAoKnF1ZXVlX3N0YXJ0X3BvbGwpIChzdHJ1Y3QgY2N3X2RldmljZSAqLCBpbnQsIHVuc2lnbmVkIGxvbmcpOworCWludCBzY2FuX3RocmVzaG9sZDsKIAl1bnNpZ25lZCBsb25nIGludF9wYXJtOwogCXZvaWQgKippbnB1dF9zYmFsX2FkZHJfYXJyYXk7CiAJdm9pZCAqKm91dHB1dF9zYmFsX2FkZHJfYXJyYXk7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcWV0aC5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3FldGguaAppbmRleCAwNmNiZDFlLi45MGVmZGEwIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcWV0aC5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9xZXRoLmgKQEAgLTI4LDM5ICsyOCw3MCBAQAogCV9fdTggIHJlc2VydmVkMlszMl07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAorZW51bSBxZXRoX2FycF9pcGFkZHJ0eXBlIHsKKwlRRVRIQVJQX0lQX0FERFJfVjQgPSAxLAorCVFFVEhBUlBfSVBfQUREUl9WNiA9IDIsCit9Oworc3RydWN0IHFldGhfYXJwX2VudHJ5dHlwZSB7CisJX191OCBtYWM7CisJX191OCBpcDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgUUVUSF9RQVJQX01FRElBU1BFQ0lGSUNfQllURVMgMzIKKyNkZWZpbmUgUUVUSF9RQVJQX01BQ0FERFJUWVBFX0JZVEVTIDEKIHN0cnVjdCBxZXRoX2FycF9xaV9lbnRyeTcgewotCV9fdTggbWVkaWFfc3BlY2lmaWNbMzJdOwotCV9fdTggbWFjYWRkcl90eXBlOwotCV9fdTggaXBhZGRyX3R5cGU7CisJX191OCBtZWRpYV9zcGVjaWZpY1tRRVRIX1FBUlBfTUVESUFTUEVDSUZJQ19CWVRFU107CisJc3RydWN0IHFldGhfYXJwX2VudHJ5dHlwZSB0eXBlOwogCV9fdTggbWFjYWRkcls2XTsKIAlfX3U4IGlwYWRkcls0XTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKK3N0cnVjdCBxZXRoX2FycF9xaV9lbnRyeTdfaXB2NiB7CisJX191OCBtZWRpYV9zcGVjaWZpY1tRRVRIX1FBUlBfTUVESUFTUEVDSUZJQ19CWVRFU107CisJc3RydWN0IHFldGhfYXJwX2VudHJ5dHlwZSB0eXBlOworCV9fdTggbWFjYWRkcls2XTsKKwlfX3U4IGlwYWRkclsxNl07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCiBzdHJ1Y3QgcWV0aF9hcnBfcWlfZW50cnk3X3Nob3J0IHsKLQlfX3U4IG1hY2FkZHJfdHlwZTsKLQlfX3U4IGlwYWRkcl90eXBlOworCXN0cnVjdCBxZXRoX2FycF9lbnRyeXR5cGUgdHlwZTsKIAlfX3U4IG1hY2FkZHJbNl07CiAJX191OCBpcGFkZHJbNF07CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCitzdHJ1Y3QgcWV0aF9hcnBfcWlfZW50cnk3X3Nob3J0X2lwdjYgeworCXN0cnVjdCBxZXRoX2FycF9lbnRyeXR5cGUgdHlwZTsKKwlfX3U4IG1hY2FkZHJbNl07CisJX191OCBpcGFkZHJbMTZdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwogc3RydWN0IHFldGhfYXJwX3FpX2VudHJ5NSB7Ci0JX191OCBtZWRpYV9zcGVjaWZpY1szMl07Ci0JX191OCBtYWNhZGRyX3R5cGU7Ci0JX191OCBpcGFkZHJfdHlwZTsKKwlfX3U4IG1lZGlhX3NwZWNpZmljW1FFVEhfUUFSUF9NRURJQVNQRUNJRklDX0JZVEVTXTsKKwlzdHJ1Y3QgcWV0aF9hcnBfZW50cnl0eXBlIHR5cGU7CiAJX191OCBpcGFkZHJbNF07CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCitzdHJ1Y3QgcWV0aF9hcnBfcWlfZW50cnk1X2lwdjYgeworCV9fdTggbWVkaWFfc3BlY2lmaWNbUUVUSF9RQVJQX01FRElBU1BFQ0lGSUNfQllURVNdOworCXN0cnVjdCBxZXRoX2FycF9lbnRyeXR5cGUgdHlwZTsKKwlfX3U4IGlwYWRkclsxNl07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCiBzdHJ1Y3QgcWV0aF9hcnBfcWlfZW50cnk1X3Nob3J0IHsKLQlfX3U4IG1hY2FkZHJfdHlwZTsKLQlfX3U4IGlwYWRkcl90eXBlOworCXN0cnVjdCBxZXRoX2FycF9lbnRyeXR5cGUgdHlwZTsKIAlfX3U4IGlwYWRkcls0XTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKK3N0cnVjdCBxZXRoX2FycF9xaV9lbnRyeTVfc2hvcnRfaXB2NiB7CisJc3RydWN0IHFldGhfYXJwX2VudHJ5dHlwZSB0eXBlOworCV9fdTggaXBhZGRyWzE2XTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAvKgogICogY2FuIGJlIHNldCBieSB1c2VyIGlmIG5vICJtZWRpYSBzcGVjaWZpYyBpbmZvcm1hdGlvbiIgaXMgd2FudGVkCiAgKiAtPiBzYXZlcyBhIGxvdCBvZiBzcGFjZSBpbiB1c2VyIHNwYWNlIGJ1ZmZlcgogICovCiAjZGVmaW5lIFFFVEhfUUFSUF9TVFJJUF9FTlRSSUVTICAweDgwMDAKKyNkZWZpbmUgUUVUSF9RQVJQX1dJVEhfSVBWNgkgMHg0MDAwCiAjZGVmaW5lIFFFVEhfUUFSUF9SRVFVRVNUX01BU0sgICAweDAwZmYKIAogLyogZGF0YSBzZW50IHRvIHVzZXIgc3BhY2UgYXMgcmVzdWx0IG9mIHF1ZXJ5IGFycCBpb2N0bCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3MzOTBfZXh0LmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vczM5MF9leHQuaAppbmRleCAxYTkzMDdlLi4wODA4NzZkIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vczM5MF9leHQuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vczM5MF9leHQuaApAQCAtMSwzMiArMSwxNyBAQAorLyoKKyAqICAgIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OSwyMDEwCisgKiAgICBBdXRob3Iocyk6IEhvbGdlciBTbW9saW5za2kgPEhvbGdlci5TbW9saW5za2lAZGUuaWJtLmNvbT4sCisgKgkJIE1hcnRpbiBTY2h3aWRlZnNreSA8c2Nod2lkZWZza3lAZGUuaWJtLmNvbT4sCisgKi8KKwogI2lmbmRlZiBfUzM5MF9FWFRJTlRfSAogI2RlZmluZSBfUzM5MF9FWFRJTlRfSAogCi0vKgotICogIGluY2x1ZGUvYXNtLXMzOTAvczM5MF9leHQuaAotICoKLSAqICBTMzkwIHZlcnNpb24KLSAqICAgIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OSwyMDA3Ci0gKiAgICBBdXRob3Iocyk6IEhvbGdlciBTbW9saW5za2kgKEhvbGdlci5TbW9saW5za2lAZGUuaWJtLmNvbSksCi0gKiAgICAgICAgICAgICAgIE1hcnRpbiBTY2h3aWRlZnNreSAoc2Nod2lkZWZza3lAZGUuaWJtLmNvbSkKLSAqLwotCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogdHlwZWRlZiB2b2lkICgqZXh0X2ludF9oYW5kbGVyX3QpKHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTsKIAotdHlwZWRlZiBzdHJ1Y3QgZXh0X2ludF9pbmZvX3QgewotCXN0cnVjdCBleHRfaW50X2luZm9fdCAqbmV4dDsKLQlleHRfaW50X2hhbmRsZXJfdCBoYW5kbGVyOwotCV9fdTE2IGNvZGU7Ci19IGV4dF9pbnRfaW5mb190OwotCi1leHRlcm4gZXh0X2ludF9pbmZvX3QgKmV4dF9pbnRfaGFzaFtdOwotCiBpbnQgcmVnaXN0ZXJfZXh0ZXJuYWxfaW50ZXJydXB0KF9fdTE2IGNvZGUsIGV4dF9pbnRfaGFuZGxlcl90IGhhbmRsZXIpOwotaW50IHJlZ2lzdGVyX2Vhcmx5X2V4dGVybmFsX2ludGVycnVwdChfX3UxNiBjb2RlLCBleHRfaW50X2hhbmRsZXJfdCBoYW5kbGVyLAotCQkJCSAgICAgIGV4dF9pbnRfaW5mb190ICppbmZvKTsKIGludCB1bnJlZ2lzdGVyX2V4dGVybmFsX2ludGVycnVwdChfX3UxNiBjb2RlLCBleHRfaW50X2hhbmRsZXJfdCBoYW5kbGVyKTsKLWludCB1bnJlZ2lzdGVyX2Vhcmx5X2V4dGVybmFsX2ludGVycnVwdChfX3UxNiBjb2RlLCBleHRfaW50X2hhbmRsZXJfdCBoYW5kbGVyLAotCQkJCQlleHRfaW50X2luZm9fdCAqaW5mbyk7CiAKLSNlbmRpZgorI2VuZGlmIC8qIF9TMzkwX0VYVElOVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc21wLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc21wLmgKaW5kZXggZWRjMDNjYi4uMDQ1ZTAwOWYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zbXAuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc21wLmgKQEAgLTIwLDcgKzIwLDYgQEAKIAogZXh0ZXJuIGludCBfX2NwdV9kaXNhYmxlICh2b2lkKTsKIGV4dGVybiB2b2lkIF9fY3B1X2RpZSAodW5zaWduZWQgaW50IGNwdSk7Ci1leHRlcm4gdm9pZCBjcHVfZGllICh2b2lkKSBfX2F0dHJpYnV0ZV9fICgobm9yZXR1cm4pKTsKIGV4dGVybiBpbnQgX19jcHVfdXAgKHVuc2lnbmVkIGludCBjcHUpOwogCiBleHRlcm4gc3RydWN0IG11dGV4IHNtcF9jcHVfc3RhdGVfbXV0ZXg7CkBAIC03MSw4ICs3MCwxMCBAQAogCiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCiBleHRlcm4gaW50IHNtcF9yZXNjYW5fY3B1cyh2b2lkKTsKK2V4dGVybiB2b2lkIF9fbm9yZXR1cm4gY3B1X2RpZSh2b2lkKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIGludCBzbXBfcmVzY2FuX2NwdXModm9pZCkgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSB2b2lkIGNwdV9kaWUodm9pZCkgeyB9CiAjZW5kaWYKIAogI2VuZGlmIC8qIF9fQVNNX1NNUF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3lzdGVtLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3lzdGVtLmgKaW5kZXggM2FkMTZkYi4uNjcxMGIwZSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3N5c3RlbS5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zeXN0ZW0uaApAQCAtMjAsNiArMjAsNyBAQAogc3RydWN0IHRhc2tfc3RydWN0OwogCiBleHRlcm4gc3RydWN0IHRhc2tfc3RydWN0ICpfX3N3aXRjaF90byh2b2lkICosIHZvaWQgKik7CitleHRlcm4gdm9pZCB1cGRhdGVfcGVyX3JlZ3Moc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTsKIAogc3RhdGljIGlubGluZSB2b2lkIHNhdmVfZnBfcmVncyhzMzkwX2ZwX3JlZ3MgKmZwcmVncykKIHsKQEAgLTkzLDYgKzk0LDcgQEAKIAlpZiAobmV4dC0+bW0pIHsJCQkJCQkJXAogCQlyZXN0b3JlX2ZwX3JlZ3MoJm5leHQtPnRocmVhZC5mcF9yZWdzKTsJCQlcCiAJCXJlc3RvcmVfYWNjZXNzX3JlZ3MoJm5leHQtPnRocmVhZC5hY3JzWzBdKTsJCVwKKwkJdXBkYXRlX3Blcl9yZWdzKG5leHQpOwkJCQkJXAogCX0JCQkJCQkJCVwKIAlwcmV2ID0gX19zd2l0Y2hfdG8ocHJldixuZXh0KTsJCQkJCVwKIH0gd2hpbGUgKDApCkBAIC0xMDEsMTEgKzEwMyw5IEBACiBleHRlcm4gdm9pZCBhY2NvdW50X3RpY2tfdnRpbWUoc3RydWN0IHRhc2tfc3RydWN0ICopOwogCiAjaWZkZWYgQ09ORklHX1BGQVVMVAotZXh0ZXJuIHZvaWQgcGZhdWx0X2lycV9pbml0KHZvaWQpOwogZXh0ZXJuIGludCBwZmF1bHRfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIHBmYXVsdF9maW5pKHZvaWQpOwogI2Vsc2UgLyogQ09ORklHX1BGQVVMVCAqLwotI2RlZmluZSBwZmF1bHRfaXJxX2luaXQoKQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIHBmYXVsdF9pbml0KCkJCSh7LTE7fSkKICNkZWZpbmUgcGZhdWx0X2ZpbmkoKQkJZG8geyB9IHdoaWxlICgwKQogI2VuZGlmIC8qIENPTkZJR19QRkFVTFQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKaW5kZXggNWJhZjAyMy4uZWJjNzcwOSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKQEAgLTc0LDcgKzc0LDcgQEAKIC8qIGhvdyB0byBnZXQgdGhlIHRocmVhZCBpbmZvcm1hdGlvbiBzdHJ1Y3QgZnJvbSBDICovCiBzdGF0aWMgaW5saW5lIHN0cnVjdCB0aHJlYWRfaW5mbyAqY3VycmVudF90aHJlYWRfaW5mbyh2b2lkKQogewotCXJldHVybiAoc3RydWN0IHRocmVhZF9pbmZvICopKFMzOTBfbG93Y29yZS5rZXJuZWxfc3RhY2sgLSBUSFJFQURfU0laRSk7CisJcmV0dXJuIChzdHJ1Y3QgdGhyZWFkX2luZm8gKikgUzM5MF9sb3djb3JlLnRocmVhZF9pbmZvOwogfQogCiAjZGVmaW5lIFRIUkVBRF9TSVpFX09SREVSIFRIUkVBRF9PUkRFUgpAQCAtODgsNyArODgsNyBAQAogI2RlZmluZSBUSUZfU0lHUEVORElORwkJMgkvKiBzaWduYWwgcGVuZGluZyAqLwogI2RlZmluZSBUSUZfTkVFRF9SRVNDSEVECTMJLyogcmVzY2hlZHVsaW5nIG5lY2Vzc2FyeSAqLwogI2RlZmluZSBUSUZfUkVTVEFSVF9TVkMJCTQJLyogcmVzdGFydCBzdmMgd2l0aCBuZXcgc3ZjIG51bWJlciAqLwotI2RlZmluZSBUSUZfU0lOR0xFX1NURVAJCTYJLyogZGVsaXZlciBzaWd0cmFwIG9uIHJldHVybiB0byB1c2VyICovCisjZGVmaW5lIFRJRl9QRVJfVFJBUAkJNgkvKiBkZWxpdmVyIHNpZ3RyYXAgb24gcmV0dXJuIHRvIHVzZXIgKi8KICNkZWZpbmUgVElGX01DQ0tfUEVORElORwk3CS8qIG1hY2hpbmUgY2hlY2sgaGFuZGxpbmcgaXMgcGVuZGluZyAqLwogI2RlZmluZSBUSUZfU1lTQ0FMTF9UUkFDRQk4CS8qIHN5c2NhbGwgdHJhY2UgYWN0aXZlICovCiAjZGVmaW5lIFRJRl9TWVNDQUxMX0FVRElUCTkJLyogc3lzY2FsbCBhdWRpdGluZyBhY3RpdmUgKi8KQEAgLTk5LDE0ICs5OSwxNSBAQAogI2RlZmluZSBUSUZfMzFCSVQJCTE3CS8qIDMyYml0IHByb2Nlc3MgKi8KICNkZWZpbmUgVElGX01FTURJRQkJMTgJLyogaXMgdGVybWluYXRpbmcgZHVlIHRvIE9PTSBraWxsZXIgKi8KICNkZWZpbmUgVElGX1JFU1RPUkVfU0lHTUFTSwkxOQkvKiByZXN0b3JlIHNpZ25hbCBtYXNrIGluIGRvX3NpZ25hbCgpICovCi0jZGVmaW5lIFRJRl9GUkVFWkUJCTIwCS8qIHRocmVhZCBpcyBmcmVlemluZyBmb3Igc3VzcGVuZCAqLworI2RlZmluZSBUSUZfU0lOR0xFX1NURVAJCTIwCS8qIFRoaXMgdGFzayBpcyBzaW5nbGUgc3RlcHBlZCAqLworI2RlZmluZSBUSUZfRlJFRVpFCQkyMQkvKiB0aHJlYWQgaXMgZnJlZXppbmcgZm9yIHN1c3BlbmQgKi8KIAogI2RlZmluZSBfVElGX05PVElGWV9SRVNVTUUJKDE8PFRJRl9OT1RJRllfUkVTVU1FKQogI2RlZmluZSBfVElGX1JFU1RPUkVfU0lHTUFTSwkoMTw8VElGX1JFU1RPUkVfU0lHTUFTSykKICNkZWZpbmUgX1RJRl9TSUdQRU5ESU5HCQkoMTw8VElGX1NJR1BFTkRJTkcpCiAjZGVmaW5lIF9USUZfTkVFRF9SRVNDSEVECSgxPDxUSUZfTkVFRF9SRVNDSEVEKQogI2RlZmluZSBfVElGX1JFU1RBUlRfU1ZDCSgxPDxUSUZfUkVTVEFSVF9TVkMpCi0jZGVmaW5lIF9USUZfU0lOR0xFX1NURVAJKDE8PFRJRl9TSU5HTEVfU1RFUCkKKyNkZWZpbmUgX1RJRl9QRVJfVFJBUAkJKDE8PFRJRl9QRVJfVFJBUCkKICNkZWZpbmUgX1RJRl9NQ0NLX1BFTkRJTkcJKDE8PFRJRl9NQ0NLX1BFTkRJTkcpCiAjZGVmaW5lIF9USUZfU1lTQ0FMTF9UUkFDRQkoMTw8VElGX1NZU0NBTExfVFJBQ0UpCiAjZGVmaW5lIF9USUZfU1lTQ0FMTF9BVURJVAkoMTw8VElGX1NZU0NBTExfQVVESVQpCkBAIC0xMTQsNiArMTE1LDcgQEAKICNkZWZpbmUgX1RJRl9TWVNDQUxMX1RSQUNFUE9JTlQJKDE8PFRJRl9TWVNDQUxMX1RSQUNFUE9JTlQpCiAjZGVmaW5lIF9USUZfUE9MTElOR19OUkZMQUcJKDE8PFRJRl9QT0xMSU5HX05SRkxBRykKICNkZWZpbmUgX1RJRl8zMUJJVAkJKDE8PFRJRl8zMUJJVCkKKyNkZWZpbmUgX1RJRl9TSU5HTEVfU1RFUAkoMTw8VElGX0ZSRUVaRSkKICNkZWZpbmUgX1RJRl9GUkVFWkUJCSgxPDxUSUZfRlJFRVpFKQogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RpbWV4LmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdGltZXguaAppbmRleCAwOWQzNDVhLi44ODgyOWE0IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdGltZXguaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdGltZXguaApAQCAtMTEsNiArMTEsOCBAQAogI2lmbmRlZiBfQVNNX1MzOTBfVElNRVhfSAogI2RlZmluZSBfQVNNX1MzOTBfVElNRVhfSAogCisjaW5jbHVkZSA8YXNtL2xvd2NvcmUuaD4KKwogLyogVGhlIHZhbHVlIG9mIHRoZSBUT0QgY2xvY2sgZm9yIDEuMS4xOTcwLiAqLwogI2RlZmluZSBUT0RfVU5JWF9FUE9DSCAweDdkOTEwNDhiY2EwMDAwMDBVTEwKIApAQCAtNDksNiArNTEsMjQgQEAKIAlhc20gdm9sYXRpbGUoInN0Y2tjICUwIiA6ICI9USIgKCp0aW1lKSk7CiB9CiAKK3ZvaWQgY2xvY2tfY29tcGFyYXRvcl93b3JrKHZvaWQpOworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBsb2NhbF90aWNrX2Rpc2FibGUodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgb2xkOworCisJb2xkID0gUzM5MF9sb3djb3JlLmNsb2NrX2NvbXBhcmF0b3I7CisJUzM5MF9sb3djb3JlLmNsb2NrX2NvbXBhcmF0b3IgPSAtMVVMTDsKKwlzZXRfY2xvY2tfY29tcGFyYXRvcihTMzkwX2xvd2NvcmUuY2xvY2tfY29tcGFyYXRvcik7CisJcmV0dXJuIG9sZDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGxvY2FsX3RpY2tfZW5hYmxlKHVuc2lnbmVkIGxvbmcgbG9uZyBjb21wKQoreworCVMzOTBfbG93Y29yZS5jbG9ja19jb21wYXJhdG9yID0gY29tcDsKKwlzZXRfY2xvY2tfY29tcGFyYXRvcihTMzkwX2xvd2NvcmUuY2xvY2tfY29tcGFyYXRvcik7Cit9CisKICNkZWZpbmUgQ0xPQ0tfVElDS19SQVRFCTExOTMxODAgLyogVW5kZXJseWluZyBIWiAqLwogCiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBjeWNsZXNfdDsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvYXNtLW9mZnNldHMuYyBiL2FyY2gvczM5MC9rZXJuZWwvYXNtLW9mZnNldHMuYwppbmRleCAzMzk4MmU3Li5mZTAzYzE0IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2FzbS1vZmZzZXRzLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9hc20tb2Zmc2V0cy5jCkBAIC0yMywxNCArMjMsMTYgQEAKIHsKIAlERUZJTkUoX19USFJFQURfaW5mbywgb2Zmc2V0b2Yoc3RydWN0IHRhc2tfc3RydWN0LCBzdGFjaykpOwogCURFRklORShfX1RIUkVBRF9rc3AsIG9mZnNldG9mKHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLmtzcCkpOwotCURFRklORShfX1RIUkVBRF9wZXIsIG9mZnNldG9mKHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLnBlcl9pbmZvKSk7CiAJREVGSU5FKF9fVEhSRUFEX21tX3NlZ21lbnQsIG9mZnNldG9mKHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLm1tX3NlZ21lbnQpKTsKIAlCTEFOSygpOwogCURFRklORShfX1RBU0tfcGlkLCBvZmZzZXRvZihzdHJ1Y3QgdGFza19zdHJ1Y3QsIHBpZCkpOwogCUJMQU5LKCk7Ci0JREVGSU5FKF9fUEVSX2F0bWlkLCBvZmZzZXRvZihwZXJfc3RydWN0LCBsb3djb3JlLndvcmRzLnBlcmNfYXRtaWQpKTsKLQlERUZJTkUoX19QRVJfYWRkcmVzcywgb2Zmc2V0b2YocGVyX3N0cnVjdCwgbG93Y29yZS53b3Jkcy5hZGRyZXNzKSk7Ci0JREVGSU5FKF9fUEVSX2FjY2Vzc19pZCwgb2Zmc2V0b2YocGVyX3N0cnVjdCwgbG93Y29yZS53b3Jkcy5hY2Nlc3NfaWQpKTsKKwlERUZJTkUoX19USFJFQURfcGVyX2NhdXNlLAorCSAgICAgICBvZmZzZXRvZihzdHJ1Y3QgdGFza19zdHJ1Y3QsIHRocmVhZC5wZXJfZXZlbnQuY2F1c2UpKTsKKwlERUZJTkUoX19USFJFQURfcGVyX2FkZHJlc3MsCisJICAgICAgIG9mZnNldG9mKHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLnBlcl9ldmVudC5hZGRyZXNzKSk7CisJREVGSU5FKF9fVEhSRUFEX3Blcl9wYWlkLAorCSAgICAgICBvZmZzZXRvZihzdHJ1Y3QgdGFza19zdHJ1Y3QsIHRocmVhZC5wZXJfZXZlbnQucGFpZCkpOwogCUJMQU5LKCk7CiAJREVGSU5FKF9fVElfdGFzaywgb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9pbmZvLCB0YXNrKSk7CiAJREVGSU5FKF9fVElfZG9tYWluLCBvZmZzZXRvZihzdHJ1Y3QgdGhyZWFkX2luZm8sIGV4ZWNfZG9tYWluKSk7CkBAIC04NSw5ICs4Nyw5IEBACiAJREVGSU5FKF9fTENfUEdNX0lMQywgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBwZ21faWxjKSk7CiAJREVGSU5FKF9fTENfUEdNX0lOVF9DT0RFLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIHBnbV9jb2RlKSk7CiAJREVGSU5FKF9fTENfVFJBTlNfRVhDX0NPREUsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgdHJhbnNfZXhjX2NvZGUpKTsKLQlERUZJTkUoX19MQ19QRVJfQVRNSUQsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgcGVyX3BlcmNfYXRtaWQpKTsKKwlERUZJTkUoX19MQ19QRVJfQ0FVU0UsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgcGVyX3BlcmNfYXRtaWQpKTsKIAlERUZJTkUoX19MQ19QRVJfQUREUkVTUywgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBwZXJfYWRkcmVzcykpOwotCURFRklORShfX0xDX1BFUl9BQ0NFU1NfSUQsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgcGVyX2FjY2Vzc19pZCkpOworCURFRklORShfX0xDX1BFUl9QQUlELCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIHBlcl9hY2Nlc3NfaWQpKTsKIAlERUZJTkUoX19MQ19BUl9NT0RFX0lELCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIGFyX2FjY2Vzc19pZCkpOwogCURFRklORShfX0xDX1NVQkNIQU5ORUxfSUQsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgc3ViY2hhbm5lbF9pZCkpOwogCURFRklORShfX0xDX1NVQkNIQU5ORUxfTlIsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgc3ViY2hhbm5lbF9ucikpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfcHRyYWNlLmggYi9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF9wdHJhY2UuaAppbmRleCAzMTQxMDI1Li4xMmI4MjM4IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF9wdHJhY2UuaAorKysgYi9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF9wdHJhY2UuaApAQCAtNCw0MCArNCwxOSBAQAogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4gICAgLyogbmVlZGVkIGZvciBOVU1fQ1JfV09SRFMgKi8KICNpbmNsdWRlICJjb21wYXRfbGludXguaCIgIC8qIG5lZWRlZCBmb3IgcHN3X2NvbXBhdF90ICovCiAKLXR5cGVkZWYgc3RydWN0IHsKLQlfX3UzMiBjcltOVU1fQ1JfV09SRFNdOwotfSBwZXJfY3Jfd29yZHMzMjsKK3N0cnVjdCBjb21wYXRfcGVyX3N0cnVjdF9rZXJuZWwgeworCV9fdTMyIGNyOTsJCS8qIFBFUiBjb250cm9sIGJpdHMgKi8KKwlfX3UzMiBjcjEwOwkJLyogUEVSIHN0YXJ0aW5nIGFkZHJlc3MgKi8KKwlfX3UzMiBjcjExOwkJLyogUEVSIGVuZGluZyBhZGRyZXNzICovCisJX191MzIgYml0czsJCS8qIE9ic29sZXRlIHNvZnR3YXJlIGJpdHMgKi8KKwlfX3UzMiBzdGFydGluZ19hZGRyOwkvKiBVc2VyIHNwZWNpZmllZCBzdGFydCBhZGRyZXNzICovCisJX191MzIgZW5kaW5nX2FkZHI7CS8qIFVzZXIgc3BlY2lmaWVkIGVuZCBhZGRyZXNzICovCisJX191MTYgcGVyY19hdG1pZDsJLyogUEVSIHRyYXAgQVRNSUQgKi8KKwlfX3UzMiBhZGRyZXNzOwkJLyogUEVSIHRyYXAgaW5zdHJ1Y3Rpb24gYWRkcmVzcyAqLworCV9fdTggIGFjY2Vzc19pZDsJLyogUEVSIHRyYXAgYWNjZXNzIGlkZW50aWZpY2F0aW9uICovCit9OwogCi10eXBlZGVmIHN0cnVjdCB7Ci0JX191MTYgICAgICAgICAgcGVyY19hdG1pZDsgICAgICAgICAgLyogMHgwOTYgKi8KLQlfX3UzMiAgICAgICAgICBhZGRyZXNzOyAgICAgICAgICAgICAvKiAweDA5OCAqLwotCV9fdTggICAgICAgICAgIGFjY2Vzc19pZDsgICAgICAgICAgIC8qIDB4MGExICovCi19IHBlcl9sb3djb3JlX3dvcmRzMzI7Ci0KLXR5cGVkZWYgc3RydWN0IHsKLQl1bmlvbiB7Ci0JCXBlcl9jcl93b3JkczMyICAgd29yZHM7Ci0JfSBjb250cm9sX3JlZ3M7Ci0JLyoKLQkgKiBVc2UgdGhlc2UgZmxhZ3MgaW5zdGVhZCBvZiBzZXR0aW5nIGVtX2luc3RydWN0aW9uX2ZldGNoCi0JICogZGlyZWN0bHkgdGhleSBhcmUgdXNlZCBzbyB0aGF0IHNpbmdsZSBzdGVwcGluZyBjYW4gYmUKLQkgKiBzd2l0Y2hlZCBvbiAmIG9mZiB3aGlsZSBub3QgYWZmZWN0aW5nIG90aGVyIHRyYWNpbmcKLQkgKi8KLQl1bnNpZ25lZCAgc2luZ2xlX3N0ZXAgICAgICAgOiAxOwotCXVuc2lnbmVkICBpbnN0cnVjdGlvbl9mZXRjaCA6IDE7Ci0JdW5zaWduZWQgICAgICAgICAgICAgICAgICAgIDogMzA7Ci0JLyoKLQkgKiBUaGVzZSBhZGRyZXNzZXMgYXJlIGNvcGllZCBpbnRvIGNyMTAgJiBjcjExIGlmIHNpbmdsZQotCSAqIHN0ZXBwaW5nIGlzIHN3aXRjaGVkIG9mZgotCSAqLwotCV9fdTMyICAgICBzdGFydGluZ19hZGRyOwotCV9fdTMyICAgICBlbmRpbmdfYWRkcjsKLQl1bmlvbiB7Ci0JCXBlcl9sb3djb3JlX3dvcmRzMzIgd29yZHM7Ci0JfSBsb3djb3JlOyAKLX0gcGVyX3N0cnVjdDMyOwotCi1zdHJ1Y3QgdXNlcl9yZWdzX3N0cnVjdDMyCitzdHJ1Y3QgY29tcGF0X3VzZXJfcmVnc19zdHJ1Y3QKIHsKIAlwc3dfY29tcGF0X3QgcHN3OwogCXUzMiBncHJzW05VTV9HUFJTXTsKQEAgLTUwLDE0ICsyOSwxNCBAQAogCSAqIGl0c2VsZiBhcyB0aGVyZSBpcyBubyAib2ZmaWNpYWwiIHB0cmFjZSBpbnRlcmZhY2UgZm9yIGhhcmR3YXJlCiAJICogd2F0Y2hwb2ludHMuIFRoaXMgaXMgdGhlIHdheSBpbnRlbCBkb2VzIGl0LgogCSAqLwotCXBlcl9zdHJ1Y3QzMiBwZXJfaW5mbzsKKwlzdHJ1Y3QgY29tcGF0X3Blcl9zdHJ1Y3Rfa2VybmVsIHBlcl9pbmZvOwogCXUzMiAgaWVlZV9pbnN0cnVjdGlvbl9wb2ludGVyOwkvKiBvYnNvbGV0ZSwgYWx3YXlzIDAgKi8KIH07CiAKLXN0cnVjdCB1c2VyMzIgeworc3RydWN0IGNvbXBhdF91c2VyIHsKIAkvKiBXZSBzdGFydCB3aXRoIHRoZSByZWdpc3RlcnMsIHRvIG1pbWljIHRoZSB3YXkgdGhhdCAibWVtb3J5IgogCSAgIGlzIHJldHVybmVkIGZyb20gdGhlIHB0cmFjZSgzLC4uLikgZnVuY3Rpb24uICAqLwotCXN0cnVjdCB1c2VyX3JlZ3Nfc3RydWN0MzIgcmVnczsgLyogV2hlcmUgdGhlIHJlZ2lzdGVycyBhcmUgYWN0dWFsbHkgc3RvcmVkICovCisJc3RydWN0IGNvbXBhdF91c2VyX3JlZ3Nfc3RydWN0IHJlZ3M7CiAJLyogVGhlIHJlc3Qgb2YgdGhpcyBqdW5rIGlzIHRvIGhlbHAgZ2RiIGZpZ3VyZSBvdXQgd2hhdCBnb2VzIHdoZXJlICovCiAJdTMyIHVfdHNpemU7CQkvKiBUZXh0IHNlZ21lbnQgc2l6ZSAocGFnZXMpLiAqLwogCXUzMiB1X2RzaXplOwkgICAgICAgIC8qIERhdGEgc2VnbWVudCBzaXplIChwYWdlcykuICovCkBAIC03OSw2ICs1OCw2IEBACiAJX191MzIgICBsZW47CiAJX191MzIgICBrZXJuZWxfYWRkcjsKIAlfX3UzMiAgIHByb2Nlc3NfYWRkcjsKLX0gcHRyYWNlX2FyZWFfZW11MzE7Cit9IGNvbXBhdF9wdHJhY2VfYXJlYTsKIAogI2VuZGlmIC8qIF9QVFJBQ0UzMl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2VudHJ5LlMgYi9hcmNoL3MzOTAva2VybmVsL2VudHJ5LlMKaW5kZXggMWVjYzMzNy4uNjQ4ZjY0MiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvZW50cnkuUwpAQCAtOSw3ICs5LDYgQEAKICAqCQkgSGVpa28gQ2Fyc3RlbnMgPGhlaWtvLmNhcnN0ZW5zQGRlLmlibS5jb20+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L3N5cy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CkBAIC00OSw3ICs0OCw3IEBACiBTUF9TSVpFICAgICAgPQlTVEFDS19GUkFNRV9PVkVSSEVBRCArIF9fUFRfU0laRQogCiBfVElGX1dPUktfU1ZDID0gKF9USUZfU0lHUEVORElORyB8IF9USUZfTk9USUZZX1JFU1VNRSB8IF9USUZfTkVFRF9SRVNDSEVEIHwgXAotCQkgX1RJRl9NQ0NLX1BFTkRJTkcgfCBfVElGX1JFU1RBUlRfU1ZDIHwgX1RJRl9TSU5HTEVfU1RFUCApCisJCSBfVElGX01DQ0tfUEVORElORyB8IF9USUZfUkVTVEFSVF9TVkMgfCBfVElGX1BFUl9UUkFQICkKIF9USUZfV09SS19JTlQgPSAoX1RJRl9TSUdQRU5ESU5HIHwgX1RJRl9OT1RJRllfUkVTVU1FIHwgX1RJRl9ORUVEX1JFU0NIRUQgfCBcCiAJCSBfVElGX01DQ0tfUEVORElORykKIF9USUZfU1lTQ0FMTCA9IChfVElGX1NZU0NBTExfVFJBQ0U+PjggfCBfVElGX1NZU0NBTExfQVVESVQ+PjggfCBcCkBAIC0xMTAsMzEgKzEwOSwzNiBAQAogMToJc3RtCSVyMTAsJXIxMSxcbGNfc3VtCiAJLmVuZG0KIAorCS5tYWNybwlTQVZFX0FMTF9TVkMgcHN3b3JnLHNhdmVhcmVhCisJc3RtCSVyMTIsJXIxNSxcc2F2ZWFyZWEKKwlsCSVyMTMsX19MQ19TVkNfTkVXX1BTVys0CSMgbG9hZCAmc3lzdGVtX2NhbGwgdG8gJXIxMworCWwJJXIxNSxfX0xDX0tFUk5FTF9TVEFDSwkjIHByb2JsZW0gc3RhdGUgLT4gbG9hZCBrc3AKKwlzCSVyMTUsQkFTRUQoLkxjX3Nwc2l6ZSkJIyBtYWtlIHJvb20gZm9yIHJlZ2lzdGVycyAmIHBzdworCS5lbmRtCisKIAkubWFjcm8JU0FWRV9BTExfQkFTRSBzYXZlYXJlYQogCXN0bQklcjEyLCVyMTUsXHNhdmVhcmVhCiAJbAklcjEzLF9fTENfU1ZDX05FV19QU1crNAkjIGxvYWQgJnN5c3RlbV9jYWxsIHRvICVyMTMKIAkuZW5kbQogCi0JLm1hY3JvCVNBVkVfQUxMX1NWQyBwc3dvcmcsc2F2ZWFyZWEKLQlsYQklcjEyLFxwc3dvcmcKLQlsCSVyMTUsX19MQ19LRVJORUxfU1RBQ0sJIyBwcm9ibGVtIHN0YXRlIC0+IGxvYWQga3NwCi0JLmVuZG0KLQotCS5tYWNybwlTQVZFX0FMTF9TWU5DIHBzd29yZyxzYXZlYXJlYQotCWxhCSVyMTIsXHBzd29yZworCS5tYWNybwlTQVZFX0FMTF9QR00gcHN3b3JnLHNhdmVhcmVhCiAJdG0JXHBzd29yZysxLDB4MDEJCSMgdGVzdCBwcm9ibGVtIHN0YXRlIGJpdAotCWJ6CUJBU0VEKDJmKQkJIyBza2lwIHN0YWNrIHNldHVwIHNhdmUKLQlsCSVyMTUsX19MQ19LRVJORUxfU1RBQ0sJIyBwcm9ibGVtIHN0YXRlIC0+IGxvYWQga3NwCiAjaWZkZWYgQ09ORklHX0NIRUNLX1NUQUNLCi0JYglCQVNFRCgzZikKLTI6CXRtbAklcjE1LFNUQUNLX1NJWkUgLSBDT05GSUdfU1RBQ0tfR1VBUkQKLQlieglCQVNFRChzdGFja19vdmVyZmxvdykKLTM6CisJYm56CUJBU0VEKDFmKQorCXRtbAklcjE1LFNUQUNLX1NJWkUgLSBDT05GSUdfU1RBQ0tfR1VBUkQKKwlibnoJQkFTRUQoMmYpCisJbGEJJXIxMixccHN3b3JnCisJYglCQVNFRChzdGFja19vdmVyZmxvdykKKyNlbHNlCisJYnoJQkFTRUQoMmYpCiAjZW5kaWYKLTI6CisxOglsCSVyMTUsX19MQ19LRVJORUxfU1RBQ0sJIyBwcm9ibGVtIHN0YXRlIC0+IGxvYWQga3NwCisyOglzCSVyMTUsQkFTRUQoLkxjX3Nwc2l6ZSkJIyBtYWtlIHJvb20gZm9yIHJlZ2lzdGVycyAmIHBzdwogCS5lbmRtCiAKIAkubWFjcm8JU0FWRV9BTExfQVNZTkMgcHN3b3JnLHNhdmVhcmVhCisJc3RtCSVyMTIsJXIxNSxcc2F2ZWFyZWEKKwlsCSVyMTMsX19MQ19TVkNfTkVXX1BTVys0CSMgbG9hZCAmc3lzdGVtX2NhbGwgdG8gJXIxMwogCWxhCSVyMTIsXHBzd29yZwogCXRtCVxwc3dvcmcrMSwweDAxCQkjIHRlc3QgcHJvYmxlbSBzdGF0ZSBiaXQKIAlibnoJQkFTRUQoMWYpCQkjIGZyb20gdXNlciAtPiBsb2FkIGFzeW5jIHN0YWNrCkBAIC0xNDksMjcgKzE1MywyMyBAQAogMDoJbAklcjE0LF9fTENfQVNZTkNfU1RBQ0sJIyBhcmUgd2UgYWxyZWFkeSBvbiB0aGUgYXN5bmMgc3RhY2sgPwogCXNscgklcjE0LCVyMTUKIAlzcmEJJXIxNCxTVEFDS19TSElGVAotCWJlCUJBU0VEKDJmKQotMToJbAklcjE1LF9fTENfQVNZTkNfU1RBQ0sKICNpZmRlZiBDT05GSUdfQ0hFQ0tfU1RBQ0sKLQliCUJBU0VEKDNmKQotMjoJdG1sCSVyMTUsU1RBQ0tfU0laRSAtIENPTkZJR19TVEFDS19HVUFSRAotCWJ6CUJBU0VEKHN0YWNrX292ZXJmbG93KQotMzoKKwlibnoJQkFTRUQoMWYpCisJdG1sCSVyMTUsU1RBQ0tfU0laRSAtIENPTkZJR19TVEFDS19HVUFSRAorCWJueglCQVNFRCgyZikKKwliCUJBU0VEKHN0YWNrX292ZXJmbG93KQorI2Vsc2UKKwlieglCQVNFRCgyZikKICNlbmRpZgotMjoKKzE6CWwJJXIxNSxfX0xDX0FTWU5DX1NUQUNLCisyOglzCSVyMTUsQkFTRUQoLkxjX3Nwc2l6ZSkJIyBtYWtlIHJvb20gZm9yIHJlZ2lzdGVycyAmIHBzdwogCS5lbmRtCiAKLQkubWFjcm8JQ1JFQVRFX1NUQUNLX0ZSQU1FIHBzd29yZyxzYXZlYXJlYQotCXMJJXIxNSxCQVNFRCguTGNfc3BzaXplKQkjIG1ha2Ugcm9vbSBmb3IgcmVnaXN0ZXJzICYgcHN3Ci0JbXZjCVNQX1BTVyg4LCVyMTUpLDAoJXIxMikJIyBtb3ZlIHVzZXIgUFNXIHRvIHN0YWNrCisJLm1hY3JvCUNSRUFURV9TVEFDS19GUkFNRSBzYXZlYXJlYQorCXhjCV9fU0ZfQkFDS0NIQUlOKDQsJXIxNSksX19TRl9CQUNLQ0hBSU4oJXIxNSkKIAlzdAklcjIsU1BfT1JJR19SMiglcjE1KQkjIHN0b3JlIG9yaWdpbmFsIGNvbnRlbnQgb2YgZ3ByIDIKLQlpY20JJXIxMiwxMixfX0xDX1NWQ19JTEMKLQlzdG0JJXIwLCVyMTEsU1BfUjAoJXIxNSkJIyBzdG9yZSBncHJzICVyMC0lcjExIHRvIGtlcm5lbCBzdGFjawotCXN0CSVyMTIsU1BfSUxDKCVyMTUpCiAJbXZjCVNQX1IxMigxNiwlcjE1KSxcc2F2ZWFyZWEgIyBtb3ZlICVyMTItJXIxNSB0byBzdGFjawotCWxhCSVyMTIsMAotCXN0CSVyMTIsX19TRl9CQUNLQ0hBSU4oJXIxNSkJIyBjbGVhciBiYWNrIGNoYWluCisJc3RtCSVyMCwlcjExLFNQX1IwKCVyMTUpCSMgc3RvcmUgZ3BycyAlcjAtJXIxMSB0byBrZXJuZWwgc3RhY2sKIAkuZW5kbQogCiAJLm1hY3JvCVJFU1RPUkVfQUxMIHBzd29yZyxzeW5jCkBAIC0xODgsNiArMTg4LDggQEAKIAlzc20JX19TRl9FTVBUWSglcjE1KQogCS5lbmRtCiAKKwkuc2VjdGlvbiAua3Byb2Jlcy50ZXh0LCAiYXgiCisKIC8qCiAgKiBTY2hlZHVsZXIgcmVzdW1lIGZ1bmN0aW9uLCBjYWxsZWQgYnkgc3dpdGNoX3RvCiAgKiAgZ3ByMiA9ICh0YXNrX3N0cnVjdCAqKSBwcmV2CkBAIC0xOTgsMzEgKzIwMCwyMSBAQAogCS5nbG9ibAlfX3N3aXRjaF90bwogX19zd2l0Y2hfdG86CiAJYmFzcgklcjEsMAotX19zd2l0Y2hfdG9fYmFzZToKLQl0bQlfX1RIUkVBRF9wZXIoJXIzKSwweGU4CQkjIG5ldyBwcm9jZXNzIGlzIHVzaW5nIHBlciA/Ci0JYnoJX19zd2l0Y2hfdG9fbm9wZXItX19zd2l0Y2hfdG9fYmFzZSglcjEpCSMgaWYgbm90IHdlJ3JlIGZpbmUKLQlzdGN0bAklYzksJWMxMSxfX1NGX0VNUFRZKCVyMTUpCSMgV2UgYXJlIHVzaW5nIHBlciBzdHVmZgotCWNsYwlfX1RIUkVBRF9wZXIoMTIsJXIzKSxfX1NGX0VNUFRZKCVyMTUpCi0JYmUJX19zd2l0Y2hfdG9fbm9wZXItX19zd2l0Y2hfdG9fYmFzZSglcjEpCSMgd2UgZ290IGF3YXkgdy9vIGJhc2hpbmcgVExCJ3MKLQlsY3RsCSVjOSwlYzExLF9fVEhSRUFEX3BlciglcjMpCSMgTm9wZSB3ZSBkaWRuJ3QKLV9fc3dpdGNoX3RvX25vcGVyOgotCWwJJXI0LF9fVEhSRUFEX2luZm8oJXIyKQkJIyBnZXQgdGhyZWFkX2luZm8gb2YgcHJldgorMDoJbAklcjQsX19USFJFQURfaW5mbyglcjIpCQkjIGdldCB0aHJlYWRfaW5mbyBvZiBwcmV2CisJbAklcjUsX19USFJFQURfaW5mbyglcjMpCQkjIGdldCB0aHJlYWRfaW5mbyBvZiBuZXh0CiAJdG0JX19USV9mbGFncyszKCVyNCksX1RJRl9NQ0NLX1BFTkRJTkcgIyBtYWNoaW5lIGNoZWNrIHBlbmRpbmc/Ci0JYnoJX19zd2l0Y2hfdG9fbm9fbWNjay1fX3N3aXRjaF90b19iYXNlKCVyMSkKLQluaQlfX1RJX2ZsYWdzKzMoJXI0KSwyNTUtX1RJRl9NQ0NLX1BFTkRJTkcgIyBjbGVhciBmbGFnIGluIHByZXYKLQlsCSVyNCxfX1RIUkVBRF9pbmZvKCVyMykJCSMgZ2V0IHRocmVhZF9pbmZvIG9mIG5leHQKLQlvaQlfX1RJX2ZsYWdzKzMoJXI0KSxfVElGX01DQ0tfUEVORElORyAjIHNldCBpdCBpbiBuZXh0Ci1fX3N3aXRjaF90b19ub19tY2NrOgotCXN0bQklcjYsJXIxNSxfX1NGX0dQUlMoJXIxNSkjIHN0b3JlIF9fc3dpdGNoX3RvIHJlZ2lzdGVycyBvZiBwcmV2IHRhc2sKLQlzdAklcjE1LF9fVEhSRUFEX2tzcCglcjIpCSMgc3RvcmUga2VybmVsIHN0YWNrIHRvIHByZXYtPnRzcy5rc3AKLQlsCSVyMTUsX19USFJFQURfa3NwKCVyMykJIyBsb2FkIGtlcm5lbCBzdGFjayBmcm9tIG5leHQtPnRzcy5rc3AKLQlsbQklcjYsJXIxNSxfX1NGX0dQUlMoJXIxNSkjIGxvYWQgX19zd2l0Y2hfdG8gcmVnaXN0ZXJzIG9mIG5leHQgdGFzawotCXN0CSVyMyxfX0xDX0NVUlJFTlQJIyBfX0xDX0NVUlJFTlQgPSBjdXJyZW50IHRhc2sgc3RydWN0Ci0JbGN0bAklYzQsJWM0LF9fVEFTS19waWQoJXIzKSAjIGxvYWQgcGlkIHRvIGNvbnRyb2wgcmVnLiA0Ci0JbAklcjMsX19USFJFQURfaW5mbyglcjMpCSMgbG9hZCB0aHJlYWRfaW5mbyBmcm9tIHRhc2sgc3RydWN0Ci0Jc3QJJXIzLF9fTENfVEhSRUFEX0lORk8KLQlhaGkJJXIzLFNUQUNLX1NJWkUKLQlzdAklcjMsX19MQ19LRVJORUxfU1RBQ0sJIyBfX0xDX0tFUk5FTF9TVEFDSyA9IG5ldyBrZXJuZWwgc3RhY2sKKwliegkxZi0wYiglcjEpCisJbmkJX19USV9mbGFncyszKCVyNCksMjU1LV9USUZfTUNDS19QRU5ESU5HCSMgY2xlYXIgZmxhZyBpbiBwcmV2CisJb2kJX19USV9mbGFncyszKCVyNSksX1RJRl9NQ0NLX1BFTkRJTkcJIyBzZXQgaXQgaW4gbmV4dAorMToJc3RtCSVyNiwlcjE1LF9fU0ZfR1BSUyglcjE1KQkjIHN0b3JlIGdwcnMgb2YgcHJldiB0YXNrCisJc3QJJXIxNSxfX1RIUkVBRF9rc3AoJXIyKQkJIyBzdG9yZSBrZXJuZWwgc3RhY2sgb2YgcHJldgorCWwJJXIxNSxfX1RIUkVBRF9rc3AoJXIzKQkJIyBsb2FkIGtlcm5lbCBzdGFjayBvZiBuZXh0CisJbGN0bAklYzQsJWM0LF9fVEFTS19waWQoJXIzKQkJIyBsb2FkIHBpZCB0byBjb250cm9sIHJlZy4gNAorCWxtCSVyNiwlcjE1LF9fU0ZfR1BSUyglcjE1KQkjIGxvYWQgZ3BycyBvZiBuZXh0IHRhc2sKKwlzdAklcjMsX19MQ19DVVJSRU5UCQkjIHN0b3JlIHRhc2sgc3RydWN0IG9mIG5leHQKKwlzdAklcjUsX19MQ19USFJFQURfSU5GTwkJIyBzdG9yZSB0aHJlYWQgaW5mbyBvZiBuZXh0CisJYWhpCSVyNSxTVEFDS19TSVpFCQkJIyBlbmQgb2Yga2VybmVsIHN0YWNrIG9mIG5leHQKKwlzdAklcjUsX19MQ19LRVJORUxfU1RBQ0sJCSMgc3RvcmUgZW5kIG9mIGtlcm5lbCBzdGFjawogCWJyCSVyMTQKIAogX19jcml0aWNhbF9zdGFydDoKQEAgLTIzNSwxMCArMjI3LDExIEBACiBzeXN0ZW1fY2FsbDoKIAlzdHB0CV9fTENfU1lOQ19FTlRFUl9USU1FUgogc3lzY19zYXZlYWxsOgotCVNBVkVfQUxMX0JBU0UgX19MQ19TQVZFX0FSRUEKIAlTQVZFX0FMTF9TVkMgX19MQ19TVkNfT0xEX1BTVyxfX0xDX1NBVkVfQVJFQQotCUNSRUFURV9TVEFDS19GUkFNRSBfX0xDX1NWQ19PTERfUFNXLF9fTENfU0FWRV9BUkVBCi0JbGgJJXI3LDB4OGEJICAjIGdldCBzdmMgbnVtYmVyIGZyb20gbG93Y29yZQorCUNSRUFURV9TVEFDS19GUkFNRSBfX0xDX1NBVkVfQVJFQQorCW12YwlTUF9QU1coOCwlcjE1KSxfX0xDX1NWQ19PTERfUFNXCisJbXZjCVNQX0lMQyg0LCVyMTUpLF9fTENfU1ZDX0lMQworCWwJJXIxMixfX0xDX1RIUkVBRF9JTkZPCSMgbG9hZCBwb2ludGVyIHRvIHRocmVhZF9pbmZvIHN0cnVjdAogc3lzY192dGltZToKIAlVUERBVEVfVlRJTUUgX19MQ19FWElUX1RJTUVSLF9fTENfU1lOQ19FTlRFUl9USU1FUixfX0xDX1VTRVJfVElNRVIKIHN5c2Nfc3RpbWU6CkBAIC0yNDYsMjAgKzIzOSwyMCBAQAogc3lzY191cGRhdGU6CiAJbXZjCV9fTENfTEFTVF9VUERBVEVfVElNRVIoOCksX19MQ19TWU5DX0VOVEVSX1RJTUVSCiBzeXNjX2RvX3N2YzoKLQlsCSVyOSxfX0xDX1RIUkVBRF9JTkZPCSMgbG9hZCBwb2ludGVyIHRvIHRocmVhZF9pbmZvIHN0cnVjdAotCWx0cgklcjcsJXI3CQkJIyB0ZXN0IGZvciBzdmMgMAorCXhyCSVyNywlcjcKKwlpY20JJXI3LDMsU1BfU1ZDTlIoJXIxNSkJIyBsb2FkIHN2YyBudW1iZXIgYW5kIHRlc3QgZm9yIHN2YyAwCiAJYm56CUJBU0VEKHN5c2NfbnJfb2spCSMgc3ZjIG51bWJlciA+IDAKIAkjIHN2YyAwOiBzeXN0ZW0gY2FsbCBudW1iZXIgaW4gJXIxCiAJY2wJJXIxLEJBU0VEKC5MbnJfc3lzY2FsbHMpCiAJYm5sCUJBU0VEKHN5c2NfbnJfb2spCisJc3RoCSVyMSxTUF9TVkNOUiglcjE1KQogCWxyCSVyNywlcjEgCSAgIyBjb3B5IHN2YyBudW1iZXIgdG8gJXI3CiBzeXNjX25yX29rOgotCXN0aAklcjcsU1BfU1ZDTlIoJXIxNSkKIAlzbGwJJXI3LDIJCSAgIyBzdmMgbnVtYmVyICo0Ci0JbAklcjgsQkFTRUQoLkxzeXNjX3RhYmxlKQotCXRtCV9fVElfZmxhZ3MrMiglcjkpLF9USUZfU1lTQ0FMTAorCWwJJXIxMCxCQVNFRCguTHN5c2NfdGFibGUpCisJdG0JX19USV9mbGFncysyKCVyMTIpLF9USUZfU1lTQ0FMTAogCW12YwlTUF9BUkdTKDQsJXIxNSksU1BfUjcoJXIxNSkKLQlsCSVyOCwwKCVyNywlcjgpCSAgIyBnZXQgc3lzdGVtIGNhbGwgYWRkci4KKwlsCSVyOCwwKCVyNywlcjEwKQkgICMgZ2V0IHN5c3RlbSBjYWxsIGFkZHIuCiAJYm56CUJBU0VEKHN5c2NfdHJhY2VzeXMpCiAJYmFzcgklcjE0LCVyOAkgICMgY2FsbCBzeXNfeHh4eAogCXN0CSVyMixTUF9SMiglcjE1KSAgICMgc3RvcmUgcmV0dXJuIHZhbHVlIChjaGFuZ2UgUjIgb24gc3RhY2spCkBAIC0yNjcsNyArMjYwLDcgQEAKIHN5c2NfcmV0dXJuOgogCUxPQ0tERVBfU1lTX0VYSVQKIHN5c2NfdGlmOgotCXRtCV9fVElfZmxhZ3MrMyglcjkpLF9USUZfV09SS19TVkMKKwl0bQlfX1RJX2ZsYWdzKzMoJXIxMiksX1RJRl9XT1JLX1NWQwogCWJueglCQVNFRChzeXNjX3dvcmspICAjIHRoZXJlIGlzIHdvcmsgdG8gZG8gKHNpZ25hbHMgZXRjLikKIHN5c2NfcmVzdG9yZToKIAlSRVNUT1JFX0FMTCBfX0xDX1JFVFVSTl9QU1csMQpAQCAtMjg0LDE3ICsyNzcsMTcgQEAKICMgT25lIG9mIHRoZSB3b3JrIGJpdHMgaXMgb24uIEZpbmQgb3V0IHdoaWNoIG9uZS4KICMKIHN5c2Nfd29ya190aWY6Ci0JdG0JX19USV9mbGFncyszKCVyOSksX1RJRl9NQ0NLX1BFTkRJTkcKKwl0bQlfX1RJX2ZsYWdzKzMoJXIxMiksX1RJRl9NQ0NLX1BFTkRJTkcKIAlibwlCQVNFRChzeXNjX21jY2tfcGVuZGluZykKLQl0bQlfX1RJX2ZsYWdzKzMoJXI5KSxfVElGX05FRURfUkVTQ0hFRAorCXRtCV9fVElfZmxhZ3MrMyglcjEyKSxfVElGX05FRURfUkVTQ0hFRAogCWJvCUJBU0VEKHN5c2NfcmVzY2hlZHVsZSkKLQl0bQlfX1RJX2ZsYWdzKzMoJXI5KSxfVElGX1NJR1BFTkRJTkcKKwl0bQlfX1RJX2ZsYWdzKzMoJXIxMiksX1RJRl9TSUdQRU5ESU5HCiAJYm8JQkFTRUQoc3lzY19zaWdwZW5kaW5nKQotCXRtCV9fVElfZmxhZ3MrMyglcjkpLF9USUZfTk9USUZZX1JFU1VNRQorCXRtCV9fVElfZmxhZ3MrMyglcjEyKSxfVElGX05PVElGWV9SRVNVTUUKIAlibwlCQVNFRChzeXNjX25vdGlmeV9yZXN1bWUpCi0JdG0JX19USV9mbGFncyszKCVyOSksX1RJRl9SRVNUQVJUX1NWQworCXRtCV9fVElfZmxhZ3MrMyglcjEyKSxfVElGX1JFU1RBUlRfU1ZDCiAJYm8JQkFTRUQoc3lzY19yZXN0YXJ0KQotCXRtCV9fVElfZmxhZ3MrMyglcjkpLF9USUZfU0lOR0xFX1NURVAKKwl0bQlfX1RJX2ZsYWdzKzMoJXIxMiksX1RJRl9QRVJfVFJBUAogCWJvCUJBU0VEKHN5c2Nfc2luZ2xlc3RlcCkKIAliCUJBU0VEKHN5c2NfcmV0dXJuKQkjIGJld2FyZSBvZiBjcml0aWNhbCBzZWN0aW9uIGNsZWFudXAKIApAQCAtMzE4LDEzICszMTEsMTMgQEAKICMgX1RJRl9TSUdQRU5ESU5HIGlzIHNldCwgY2FsbCBkb19zaWduYWwKICMKIHN5c2Nfc2lncGVuZGluZzoKLQluaQlfX1RJX2ZsYWdzKzMoJXI5KSwyNTUtX1RJRl9TSU5HTEVfU1RFUCAjIGNsZWFyIFRJRl9TSU5HTEVfU1RFUAorCW5pCV9fVElfZmxhZ3MrMyglcjEyKSwyNTUtX1RJRl9QRVJfVFJBUCAjIGNsZWFyIFRJRl9QRVJfVFJBUAogCWxhCSVyMixTUF9QVFJFR1MoJXIxNSkJIyBsb2FkIHB0X3JlZ3MKIAlsCSVyMSxCQVNFRCguTGRvX3NpZ25hbCkKIAliYXNyCSVyMTQsJXIxCQkjIGNhbGwgZG9fc2lnbmFsCi0JdG0JX19USV9mbGFncyszKCVyOSksX1RJRl9SRVNUQVJUX1NWQworCXRtCV9fVElfZmxhZ3MrMyglcjEyKSxfVElGX1JFU1RBUlRfU1ZDCiAJYm8JQkFTRUQoc3lzY19yZXN0YXJ0KQotCXRtCV9fVElfZmxhZ3MrMyglcjkpLF9USUZfU0lOR0xFX1NURVAKKwl0bQlfX1RJX2ZsYWdzKzMoJXIxMiksX1RJRl9QRVJfVFJBUAogCWJvCUJBU0VEKHN5c2Nfc2luZ2xlc3RlcCkKIAliCUJBU0VEKHN5c2NfcmV0dXJuKQogCkBAIC0zNDIsMjMgKzMzNSwyMyBAQAogIyBfVElGX1JFU1RBUlRfU1ZDIGlzIHNldCwgc2V0IHVwIHJlZ2lzdGVycyBhbmQgcmVzdGFydCBzdmMKICMKIHN5c2NfcmVzdGFydDoKLQluaQlfX1RJX2ZsYWdzKzMoJXI5KSwyNTUtX1RJRl9SRVNUQVJUX1NWQyAjIGNsZWFyIFRJRl9SRVNUQVJUX1NWQworCW5pCV9fVElfZmxhZ3MrMyglcjEyKSwyNTUtX1RJRl9SRVNUQVJUX1NWQyAjIGNsZWFyIFRJRl9SRVNUQVJUX1NWQwogCWwJJXI3LFNQX1IyKCVyMTUpIAkjIGxvYWQgbmV3IHN2YyBudW1iZXIKIAltdmMJU1BfUjIoNCwlcjE1KSxTUF9PUklHX1IyKCVyMTUpICMgcmVzdG9yZSBmaXJzdCBhcmd1bWVudAogCWxtCSVyMiwlcjYsU1BfUjIoJXIxNSkJIyBsb2FkIHN2YyBhcmd1bWVudHMKKwlzdGgJJXI3LFNQX1NWQ05SKCVyMTUpCiAJYglCQVNFRChzeXNjX25yX29rKQkjIHJlc3RhcnQgc3ZjCiAKICMKLSMgX1RJRl9TSU5HTEVfU1RFUCBpcyBzZXQsIGNhbGwgZG9fc2luZ2xlX3N0ZXAKKyMgX1RJRl9QRVJfVFJBUCBpcyBzZXQsIGNhbGwgZG9fcGVyX3RyYXAKICMKIHN5c2Nfc2luZ2xlc3RlcDoKLQluaQlfX1RJX2ZsYWdzKzMoJXI5KSwyNTUtX1RJRl9TSU5HTEVfU1RFUCAjIGNsZWFyIFRJRl9TSU5HTEVfU1RFUAotCW12aQlTUF9TVkNOUiglcjE1KSwweGZmCSMgc2V0IHRyYXAgaW5kaWNhdGlvbiB0byBwZ20gY2hlY2sKLQltdmkJU1BfU1ZDTlIrMSglcjE1KSwweGZmCisJbmkJX19USV9mbGFncyszKCVyMTIpLDI1NS1fVElGX1BFUl9UUkFQICMgY2xlYXIgVElGX1BFUl9UUkFQCisJeGMJU1BfU1ZDTlIoMiwlcjE1KSxTUF9TVkNOUiglcjE1KQkJIyBjbGVhciBzdmMgbnVtYmVyCiAJbGEJJXIyLFNQX1BUUkVHUyglcjE1KQkjIGFkZHJlc3Mgb2YgcmVnaXN0ZXItc2F2ZSBhcmVhCiAJbAklcjEsQkFTRUQoLkxoYW5kbGVfcGVyKQkjIGxvYWQgYWRyLiBvZiBwZXIgaGFuZGxlcgogCWxhCSVyMTQsQkFTRUQoc3lzY19yZXR1cm4pCSMgbG9hZCBhZHIuIG9mIHN5c3RlbSByZXR1cm4KLQlicgklcjEJCQkjIGJyYW5jaCB0byBkb19zaW5nbGVfc3RlcAorCWJyCSVyMQkJCSMgYnJhbmNoIHRvIGRvX3Blcl90cmFwCiAKICMKICMgY2FsbCB0cmFjZWhvb2tfcmVwb3J0X3N5c2NhbGxfZW50cnkvdHJhY2Vob29rX3JlcG9ydF9zeXNjYWxsX2V4aXQgYmVmb3JlCkBAIC0zNjgsMTUgKzM2MSwxNSBAQAogCWwJJXIxLEJBU0VEKC5MdHJhY2VfZW50cnkpCiAJbGEJJXIyLFNQX1BUUkVHUyglcjE1KQkjIGxvYWQgcHRfcmVncwogCWxhCSVyMywwCi0Jc3JsCSVyNywyCi0Jc3QJJXI3LFNQX1IyKCVyMTUpCisJeHIJJXIwLCVyMAorCWljbQklcjAsMyxTUF9TVkNOUiglcjE1KQorCXN0CSVyMCxTUF9SMiglcjE1KQogCWJhc3IJJXIxNCwlcjEKIAljbAklcjIsQkFTRUQoLkxucl9zeXNjYWxscykKIAlibmwJQkFTRUQoc3lzY190cmFjZW5vZ28pCi0JbAklcjgsQkFTRUQoLkxzeXNjX3RhYmxlKQogCWxyCSVyNywlcjIKIAlzbGwJJXI3LDIJCQkjIHN2YyBudW1iZXIgKjQKLQlsCSVyOCwwKCVyNywlcjgpCisJbAklcjgsMCglcjcsJXIxMCkKIHN5c2NfdHJhY2VnbzoKIAlsbQklcjMsJXI2LFNQX1IzKCVyMTUpCiAJbXZjCVNQX0FSR1MoNCwlcjE1KSxTUF9SNyglcjE1KQpAQCAtMzg0LDcgKzM3Nyw3IEBACiAJYmFzcgklcjE0LCVyOAkJIyBjYWxsIHN5c194eHgKIAlzdAklcjIsU1BfUjIoJXIxNSkJCSMgc3RvcmUgcmV0dXJuIHZhbHVlCiBzeXNjX3RyYWNlbm9nbzoKLQl0bQlfX1RJX2ZsYWdzKzIoJXI5KSxfVElGX1NZU0NBTEwKKwl0bQlfX1RJX2ZsYWdzKzIoJXIxMiksX1RJRl9TWVNDQUxMCiAJYnoJQkFTRUQoc3lzY19yZXR1cm4pCiAJbAklcjEsQkFTRUQoLkx0cmFjZV9leGl0KQogCWxhCSVyMixTUF9QVFJFR1MoJXIxNSkJIyBsb2FkIHB0X3JlZ3MKQEAgLTM5Nyw3ICszOTAsNyBAQAogCS5nbG9ibAlyZXRfZnJvbV9mb3JrCiByZXRfZnJvbV9mb3JrOgogCWwJJXIxMyxfX0xDX1NWQ19ORVdfUFNXKzQKLQlsCSVyOSxfX0xDX1RIUkVBRF9JTkZPCSMgbG9hZCBwb2ludGVyIHRvIHRocmVhZF9pbmZvIHN0cnVjdAorCWwJJXIxMixfX0xDX1RIUkVBRF9JTkZPCSMgbG9hZCBwb2ludGVyIHRvIHRocmVhZF9pbmZvIHN0cnVjdAogCXRtCVNQX1BTVysxKCVyMTUpLDB4MDEJIyBmb3JraW5nIGEga2VybmVsIHRocmVhZCA/CiAJYm8JQkFTRUQoMGYpCiAJc3QJJXIxNSxTUF9SMTUoJXIxNSkJIyBzdG9yZSBzdGFjayBwb2ludGVyIGZvciBuZXcga3RocmVhZApAQCAtNDMyLDggKzQyNSw4IEBACiAwOglzdG5zbQlfX1NGX0VNUFRZKCVyMTUpLDB4ZmMJIyBkaXNhYmxlIGludGVycnVwdHMKIAlsCSVyMTUsX19MQ19LRVJORUxfU1RBQ0sJIyBsb2FkIGtzcAogCXMJJXIxNSxCQVNFRCguTGNfc3BzaXplKQkjIG1ha2Ugcm9vbSBmb3IgcmVnaXN0ZXJzICYgcHN3Ci0JbAklcjksX19MQ19USFJFQURfSU5GTwogCW12YwlTUF9QVFJFR1MoX19QVF9TSVpFLCVyMTUpLDAoJXIxMikJIyBjb3B5IHB0X3JlZ3MKKwlsCSVyMTIsX19MQ19USFJFQURfSU5GTwogCXhjCV9fU0ZfQkFDS0NIQUlOKDQsJXIxNSksX19TRl9CQUNLQ0hBSU4oJXIxNSkKIAlzdG9zbQlfX1NGX0VNUFRZKCVyMTUpLDB4MDMJIyByZWVuYWJsZSBpbnRlcnJ1cHRzCiAJbAklcjEsQkFTRUQoLkxleGVjdmVfdGFpbCkKQEAgLTQ2MywyNiArNDU2LDI3IEBACiAJU0FWRV9BTExfQkFTRSBfX0xDX1NBVkVfQVJFQQogCXRtCV9fTENfUEdNX0lOVF9DT0RFKzEsMHg4MCAjIGNoZWNrIHdoZXRoZXIgd2UgZ290IGEgcGVyIGV4Y2VwdGlvbgogCWJueglCQVNFRChwZ21fcGVyKQkJIyBnb3QgcGVyIGV4Y2VwdGlvbiAtPiBzcGVjaWFsIGNhc2UKLQlTQVZFX0FMTF9TWU5DIF9fTENfUEdNX09MRF9QU1csX19MQ19TQVZFX0FSRUEKLQlDUkVBVEVfU1RBQ0tfRlJBTUUgX19MQ19QR01fT0xEX1BTVyxfX0xDX1NBVkVfQVJFQQorCVNBVkVfQUxMX1BHTSBfX0xDX1BHTV9PTERfUFNXLF9fTENfU0FWRV9BUkVBCisJQ1JFQVRFX1NUQUNLX0ZSQU1FIF9fTENfU0FWRV9BUkVBCisJeGMJU1BfSUxDKDQsJXIxNSksU1BfSUxDKCVyMTUpCisJbXZjCVNQX1BTVyg4LCVyMTUpLF9fTENfUEdNX09MRF9QU1cKKwlsCSVyMTIsX19MQ19USFJFQURfSU5GTwkjIGxvYWQgcG9pbnRlciB0byB0aHJlYWRfaW5mbyBzdHJ1Y3QKIAl0bQlTUF9QU1crMSglcjE1KSwweDAxCSMgaW50ZXJydXB0aW5nIGZyb20gdXNlciA/CiAJYnoJQkFTRUQocGdtX25vX3Z0aW1lKQogCVVQREFURV9WVElNRSBfX0xDX0VYSVRfVElNRVIsX19MQ19TWU5DX0VOVEVSX1RJTUVSLF9fTENfVVNFUl9USU1FUgogCVVQREFURV9WVElNRSBfX0xDX0xBU1RfVVBEQVRFX1RJTUVSLF9fTENfRVhJVF9USU1FUixfX0xDX1NZU1RFTV9USU1FUgogCW12YwlfX0xDX0xBU1RfVVBEQVRFX1RJTUVSKDgpLF9fTENfU1lOQ19FTlRFUl9USU1FUgogcGdtX25vX3Z0aW1lOgotCWwJJXI5LF9fTENfVEhSRUFEX0lORk8JIyBsb2FkIHBvaW50ZXIgdG8gdGhyZWFkX2luZm8gc3RydWN0CiAJbAklcjMsX19MQ19QR01fSUxDCSMgbG9hZCBwcm9ncmFtIGludGVycnVwdGlvbiBjb2RlCiAJbAklcjQsX19MQ19UUkFOU19FWENfQ09ERQogCVJFRU5BQkxFX0lSUVMKIAlsYQklcjgsMHg3ZgogCW5yCSVyOCwlcjMKLXBnbV9kb19jYWxsOgotCWwJJXI3LEJBU0VEKC5ManVtcF90YWJsZSkKIAlzbGwJJXI4LDIKLQlsCSVyNywwKCVyOCwlcjcpCQkjIGxvYWQgYWRkcmVzcyBvZiBoYW5kbGVyIHJvdXRpbmUKKwlsCSVyMSxCQVNFRCguTGp1bXBfdGFibGUpCisJbAklcjEsMCglcjgsJXIxKQkJIyBsb2FkIGFkZHJlc3Mgb2YgaGFuZGxlciByb3V0aW5lCiAJbGEJJXIyLFNQX1BUUkVHUyglcjE1KQkjIGFkZHJlc3Mgb2YgcmVnaXN0ZXItc2F2ZSBhcmVhCi0JYmFzcgklcjE0LCVyNwkJIyBicmFuY2ggdG8gaW50ZXJydXB0LWhhbmRsZXIKKwliYXNyCSVyMTQsJXIxCQkjIGJyYW5jaCB0byBpbnRlcnJ1cHQtaGFuZGxlcgogcGdtX2V4aXQ6CiAJYglCQVNFRChzeXNjX3JldHVybikKIApAQCAtNTAzLDMzICs0OTcsMzQgQEAKICMgTm9ybWFsIHBlciBleGNlcHRpb24KICMKIHBnbV9wZXJfc3RkOgotCVNBVkVfQUxMX1NZTkMgX19MQ19QR01fT0xEX1BTVyxfX0xDX1NBVkVfQVJFQQotCUNSRUFURV9TVEFDS19GUkFNRSBfX0xDX1BHTV9PTERfUFNXLF9fTENfU0FWRV9BUkVBCisJU0FWRV9BTExfUEdNIF9fTENfUEdNX09MRF9QU1csX19MQ19TQVZFX0FSRUEKKwlDUkVBVEVfU1RBQ0tfRlJBTUUgX19MQ19TQVZFX0FSRUEKKwltdmMJU1BfUFNXKDgsJXIxNSksX19MQ19QR01fT0xEX1BTVworCWwJJXIxMixfX0xDX1RIUkVBRF9JTkZPCSMgbG9hZCBwb2ludGVyIHRvIHRocmVhZF9pbmZvIHN0cnVjdAogCXRtCVNQX1BTVysxKCVyMTUpLDB4MDEJIyBpbnRlcnJ1cHRpbmcgZnJvbSB1c2VyID8KIAlieglCQVNFRChwZ21fbm9fdnRpbWUyKQogCVVQREFURV9WVElNRSBfX0xDX0VYSVRfVElNRVIsX19MQ19TWU5DX0VOVEVSX1RJTUVSLF9fTENfVVNFUl9USU1FUgogCVVQREFURV9WVElNRSBfX0xDX0xBU1RfVVBEQVRFX1RJTUVSLF9fTENfRVhJVF9USU1FUixfX0xDX1NZU1RFTV9USU1FUgogCW12YwlfX0xDX0xBU1RfVVBEQVRFX1RJTUVSKDgpLF9fTENfU1lOQ19FTlRFUl9USU1FUgogcGdtX25vX3Z0aW1lMjoKLQlsCSVyOSxfX0xDX1RIUkVBRF9JTkZPCSMgbG9hZCBwb2ludGVyIHRvIHRocmVhZF9pbmZvIHN0cnVjdAotCWwJJXIxLF9fVElfdGFzayglcjkpCisJbAklcjEsX19USV90YXNrKCVyMTIpCiAJdG0JU1BfUFNXKzEoJXIxNSksMHgwMQkjIGtlcm5lbCBwZXIgZXZlbnQgPwogCWJ6CUJBU0VEKGtlcm5lbF9wZXIpCi0JbXZjCV9fVEhSRUFEX3BlcitfX1BFUl9hdG1pZCgyLCVyMSksX19MQ19QRVJfQVRNSUQKLQltdmMJX19USFJFQURfcGVyK19fUEVSX2FkZHJlc3MoNCwlcjEpLF9fTENfUEVSX0FERFJFU1MKLQltdmMJX19USFJFQURfcGVyK19fUEVSX2FjY2Vzc19pZCgxLCVyMSksX19MQ19QRVJfQUNDRVNTX0lECi0Jb2kJX19USV9mbGFncyszKCVyOSksX1RJRl9TSU5HTEVfU1RFUCAjIHNldCBUSUZfU0lOR0xFX1NURVAKKwltdmMJX19USFJFQURfcGVyX2NhdXNlKDIsJXIxKSxfX0xDX1BFUl9DQVVTRQorCW12YwlfX1RIUkVBRF9wZXJfYWRkcmVzcyg0LCVyMSksX19MQ19QRVJfQUREUkVTUworCW12YwlfX1RIUkVBRF9wZXJfcGFpZCgxLCVyMSksX19MQ19QRVJfUEFJRAorCW9pCV9fVElfZmxhZ3MrMyglcjEyKSxfVElGX1BFUl9UUkFQICMgc2V0IFRJRl9QRVJfVFJBUAogCWwJJXIzLF9fTENfUEdNX0lMQwkjIGxvYWQgcHJvZ3JhbSBpbnRlcnJ1cHRpb24gY29kZQogCWwJJXI0LF9fTENfVFJBTlNfRVhDX0NPREUKIAlSRUVOQUJMRV9JUlFTCiAJbGEJJXI4LDB4N2YKIAlucgklcjgsJXIzIAkJIyBjbGVhciBwZXItZXZlbnQtYml0IGFuZCBpbGMKIAliZQlCQVNFRChwZ21fZXhpdDIpCSMgb25seSBwZXIgb3IgcGVyK2NoZWNrID8KLQlsCSVyNyxCQVNFRCguTGp1bXBfdGFibGUpCiAJc2xsCSVyOCwyCi0JbAklcjcsMCglcjgsJXI3KQkJIyBsb2FkIGFkZHJlc3Mgb2YgaGFuZGxlciByb3V0aW5lCisJbAklcjEsQkFTRUQoLkxqdW1wX3RhYmxlKQorCWwJJXIxLDAoJXI4LCVyMSkJCSMgbG9hZCBhZGRyZXNzIG9mIGhhbmRsZXIgcm91dGluZQogCWxhCSVyMixTUF9QVFJFR1MoJXIxNSkJIyBhZGRyZXNzIG9mIHJlZ2lzdGVyLXNhdmUgYXJlYQotCWJhc3IJJXIxNCwlcjcJCSMgYnJhbmNoIHRvIGludGVycnVwdC1oYW5kbGVyCisJYmFzcgklcjE0LCVyMQkJIyBicmFuY2ggdG8gaW50ZXJydXB0LWhhbmRsZXIKIHBnbV9leGl0MjoKIAliCUJBU0VEKHN5c2NfcmV0dXJuKQogCkBAIC01MzcsMTggKzUzMiwxOSBAQAogIyBpdCB3YXMgYSBzaW5nbGUgc3RlcHBlZCBTVkMgdGhhdCBpcyBjYXVzaW5nIGFsbCB0aGUgdHJvdWJsZQogIwogcGdtX3N2Y3BlcjoKLQlTQVZFX0FMTF9TWU5DIF9fTENfU1ZDX09MRF9QU1csX19MQ19TQVZFX0FSRUEKLQlDUkVBVEVfU1RBQ0tfRlJBTUUgX19MQ19TVkNfT0xEX1BTVyxfX0xDX1NBVkVfQVJFQQorCVNBVkVfQUxMX1BHTSBfX0xDX1NWQ19PTERfUFNXLF9fTENfU0FWRV9BUkVBCisJQ1JFQVRFX1NUQUNLX0ZSQU1FIF9fTENfU0FWRV9BUkVBCisJbXZjCVNQX1BTVyg4LCVyMTUpLF9fTENfU1ZDX09MRF9QU1cKKwltdmMJU1BfSUxDKDQsJXIxNSksX19MQ19TVkNfSUxDCisJbAklcjEyLF9fTENfVEhSRUFEX0lORk8JIyBsb2FkIHBvaW50ZXIgdG8gdGhyZWFkX2luZm8gc3RydWN0CiAJVVBEQVRFX1ZUSU1FIF9fTENfRVhJVF9USU1FUixfX0xDX1NZTkNfRU5URVJfVElNRVIsX19MQ19VU0VSX1RJTUVSCiAJVVBEQVRFX1ZUSU1FIF9fTENfTEFTVF9VUERBVEVfVElNRVIsX19MQ19FWElUX1RJTUVSLF9fTENfU1lTVEVNX1RJTUVSCiAJbXZjCV9fTENfTEFTVF9VUERBVEVfVElNRVIoOCksX19MQ19TWU5DX0VOVEVSX1RJTUVSCi0JbGgJJXI3LDB4OGEJCSMgZ2V0IHN2YyBudW1iZXIgZnJvbSBsb3djb3JlCi0JbAklcjksX19MQ19USFJFQURfSU5GTwkjIGxvYWQgcG9pbnRlciB0byB0aHJlYWRfaW5mbyBzdHJ1Y3QKLQlsCSVyOCxfX1RJX3Rhc2soJXI5KQotCW12YwlfX1RIUkVBRF9wZXIrX19QRVJfYXRtaWQoMiwlcjgpLF9fTENfUEVSX0FUTUlECi0JbXZjCV9fVEhSRUFEX3BlcitfX1BFUl9hZGRyZXNzKDQsJXI4KSxfX0xDX1BFUl9BRERSRVNTCi0JbXZjCV9fVEhSRUFEX3BlcitfX1BFUl9hY2Nlc3NfaWQoMSwlcjgpLF9fTENfUEVSX0FDQ0VTU19JRAotCW9pCV9fVElfZmxhZ3MrMyglcjkpLF9USUZfU0lOR0xFX1NURVAgIyBzZXQgVElGX1NJTkdMRV9TVEVQCisJbAklcjgsX19USV90YXNrKCVyMTIpCisJbXZjCV9fVEhSRUFEX3Blcl9jYXVzZSgyLCVyOCksX19MQ19QRVJfQ0FVU0UKKwltdmMJX19USFJFQURfcGVyX2FkZHJlc3MoNCwlcjgpLF9fTENfUEVSX0FERFJFU1MKKwltdmMJX19USFJFQURfcGVyX3BhaWQoMSwlcjgpLF9fTENfUEVSX1BBSUQKKwlvaQlfX1RJX2ZsYWdzKzMoJXIxMiksX1RJRl9QRVJfVFJBUCAjIHNldCBUSUZfUEVSX1RSQVAKIAlzdG9zbQlfX1NGX0VNUFRZKCVyMTUpLDB4MDMJIyByZWVuYWJsZSBpbnRlcnJ1cHRzCiAJbG0JJXIyLCVyNixTUF9SMiglcjE1KQkjIGxvYWQgc3ZjIGFyZ3VtZW50cwogCWIJQkFTRUQoc3lzY19kb19zdmMpCkBAIC01NTgsOCArNTU0LDcgQEAKICMKIGtlcm5lbF9wZXI6CiAJUkVFTkFCTEVfSVJRUwotCW12aQlTUF9TVkNOUiglcjE1KSwweGZmCSMgc2V0IHRyYXAgaW5kaWNhdGlvbiB0byBwZ20gY2hlY2sKLQltdmkJU1BfU1ZDTlIrMSglcjE1KSwweGZmCisJeGMJU1BfU1ZDTlIoMiwlcjE1KSxTUF9TVkNOUiglcjE1KQogCWxhCSVyMixTUF9QVFJFR1MoJXIxNSkJIyBhZGRyZXNzIG9mIHJlZ2lzdGVyLXNhdmUgYXJlYQogCWwJJXIxLEJBU0VEKC5MaGFuZGxlX3BlcikJIyBsb2FkIGFkci4gb2YgcGVyIGhhbmRsZXIKIAliYXNyCSVyMTQsJXIxCQkjIGJyYW5jaCB0byBkb19zaW5nbGVfc3RlcApAQCAtNTczLDkgKzU2OCwxMCBAQAogaW9faW50X2hhbmRsZXI6CiAJc3RjawlfX0xDX0lOVF9DTE9DSwogCXN0cHQJX19MQ19BU1lOQ19FTlRFUl9USU1FUgotCVNBVkVfQUxMX0JBU0UgX19MQ19TQVZFX0FSRUErMTYKIAlTQVZFX0FMTF9BU1lOQyBfX0xDX0lPX09MRF9QU1csX19MQ19TQVZFX0FSRUErMTYKLQlDUkVBVEVfU1RBQ0tfRlJBTUUgX19MQ19JT19PTERfUFNXLF9fTENfU0FWRV9BUkVBKzE2CisJQ1JFQVRFX1NUQUNLX0ZSQU1FIF9fTENfU0FWRV9BUkVBKzE2CisJbXZjCVNQX1BTVyg4LCVyMTUpLDAoJXIxMikJIyBtb3ZlIHVzZXIgUFNXIHRvIHN0YWNrCisJbAklcjEyLF9fTENfVEhSRUFEX0lORk8JIyBsb2FkIHBvaW50ZXIgdG8gdGhyZWFkX2luZm8gc3RydWN0CiAJdG0JU1BfUFNXKzEoJXIxNSksMHgwMQkjIGludGVycnVwdGluZyBmcm9tIHVzZXIgPwogCWJ6CUJBU0VEKGlvX25vX3Z0aW1lKQogCVVQREFURV9WVElNRSBfX0xDX0VYSVRfVElNRVIsX19MQ19BU1lOQ19FTlRFUl9USU1FUixfX0xDX1VTRVJfVElNRVIKQEAgLTU4Myw3ICs1NzksNiBAQAogCW12YwlfX0xDX0xBU1RfVVBEQVRFX1RJTUVSKDgpLF9fTENfQVNZTkNfRU5URVJfVElNRVIKIGlvX25vX3Z0aW1lOgogCVRSQUNFX0lSUVNfT0ZGCi0JbAklcjksX19MQ19USFJFQURfSU5GTwkjIGxvYWQgcG9pbnRlciB0byB0aHJlYWRfaW5mbyBzdHJ1Y3QKIAlsCSVyMSxCQVNFRCguTGRvX0lSUSkJIyBsb2FkIGFkZHJlc3Mgb2YgZG9fSVJRCiAJbGEJJXIyLFNQX1BUUkVHUyglcjE1KQkjIGFkZHJlc3Mgb2YgcmVnaXN0ZXItc2F2ZSBhcmVhCiAJYmFzcgklcjE0LCVyMQkJIyBicmFuY2ggdG8gc3RhbmRhcmQgaXJxIGhhbmRsZXIKQEAgLTU5MSw3ICs1ODYsNyBAQAogCUxPQ0tERVBfU1lTX0VYSVQKIAlUUkFDRV9JUlFTX09OCiBpb190aWY6Ci0JdG0JX19USV9mbGFncyszKCVyOSksX1RJRl9XT1JLX0lOVAorCXRtCV9fVElfZmxhZ3MrMyglcjEyKSxfVElGX1dPUktfSU5UCiAJYm56CUJBU0VEKGlvX3dvcmspCQkjIHRoZXJlIGlzIHdvcmsgdG8gZG8gKHNpZ25hbHMgZXRjLikKIGlvX3Jlc3RvcmU6CiAJUkVTVE9SRV9BTEwgX19MQ19SRVRVUk5fUFNXLDAKQEAgLTYwOSw5ICs2MDQsOSBAQAogCWJvCUJBU0VEKGlvX3dvcmtfdXNlcikJIyB5ZXMgLT4gZG8gcmVzY2hlZCAmIHNpZ25hbAogI2lmZGVmIENPTkZJR19QUkVFTVBUCiAJIyBjaGVjayBmb3IgcHJlZW1wdGl2ZSBzY2hlZHVsaW5nCi0JaWNtCSVyMCwxNSxfX1RJX3ByZWNvdW50KCVyOSkKKwlpY20JJXIwLDE1LF9fVElfcHJlY291bnQoJXIxMikKIAlibnoJQkFTRUQoaW9fcmVzdG9yZSkJIyBwcmVlbXB0aW9uIGRpc2FibGVkCi0JdG0JX19USV9mbGFncyszKCVyOSksX1RJRl9ORUVEX1JFU0NIRUQKKwl0bQlfX1RJX2ZsYWdzKzMoJXIxMiksX1RJRl9ORUVEX1JFU0NIRUQKIAlibm8JQkFTRUQoaW9fcmVzdG9yZSkKIAkjIHN3aXRjaCB0byBrZXJuZWwgc3RhY2sKIAlsCSVyMSxTUF9SMTUoJXIxNSkKQEAgLTY0NSwxMyArNjQwLDEzIEBACiAjCQlhbmQgX1RJRl9NQ0NLX1BFTkRJTkcKICMKIGlvX3dvcmtfdGlmOgotCXRtCV9fVElfZmxhZ3MrMyglcjkpLF9USUZfTUNDS19QRU5ESU5HCisJdG0JX19USV9mbGFncyszKCVyMTIpLF9USUZfTUNDS19QRU5ESU5HCiAJYm8JQkFTRUQoaW9fbWNja19wZW5kaW5nKQotCXRtCV9fVElfZmxhZ3MrMyglcjkpLF9USUZfTkVFRF9SRVNDSEVECisJdG0JX19USV9mbGFncyszKCVyMTIpLF9USUZfTkVFRF9SRVNDSEVECiAJYm8JQkFTRUQoaW9fcmVzY2hlZHVsZSkKLQl0bQlfX1RJX2ZsYWdzKzMoJXI5KSxfVElGX1NJR1BFTkRJTkcKKwl0bQlfX1RJX2ZsYWdzKzMoJXIxMiksX1RJRl9TSUdQRU5ESU5HCiAJYm8JQkFTRUQoaW9fc2lncGVuZGluZykKLQl0bQlfX1RJX2ZsYWdzKzMoJXI5KSxfVElGX05PVElGWV9SRVNVTUUKKwl0bQlfX1RJX2ZsYWdzKzMoJXIxMiksX1RJRl9OT1RJRllfUkVTVU1FCiAJYm8JQkFTRUQoaW9fbm90aWZ5X3Jlc3VtZSkKIAliCUJBU0VEKGlvX3JldHVybikJIyBiZXdhcmUgb2YgY3JpdGljYWwgc2VjdGlvbiBjbGVhbnVwCiAKQEAgLTcxMSwxNiArNzA2LDE2IEBACiBleHRfaW50X2hhbmRsZXI6CiAJc3RjawlfX0xDX0lOVF9DTE9DSwogCXN0cHQJX19MQ19BU1lOQ19FTlRFUl9USU1FUgotCVNBVkVfQUxMX0JBU0UgX19MQ19TQVZFX0FSRUErMTYKIAlTQVZFX0FMTF9BU1lOQyBfX0xDX0VYVF9PTERfUFNXLF9fTENfU0FWRV9BUkVBKzE2Ci0JQ1JFQVRFX1NUQUNLX0ZSQU1FIF9fTENfRVhUX09MRF9QU1csX19MQ19TQVZFX0FSRUErMTYKKwlDUkVBVEVfU1RBQ0tfRlJBTUUgX19MQ19TQVZFX0FSRUErMTYKKwltdmMJU1BfUFNXKDgsJXIxNSksMCglcjEyKQkjIG1vdmUgdXNlciBQU1cgdG8gc3RhY2sKKwlsCSVyMTIsX19MQ19USFJFQURfSU5GTwkjIGxvYWQgcG9pbnRlciB0byB0aHJlYWRfaW5mbyBzdHJ1Y3QKIAl0bQlTUF9QU1crMSglcjE1KSwweDAxCSMgaW50ZXJydXB0aW5nIGZyb20gdXNlciA/CiAJYnoJQkFTRUQoZXh0X25vX3Z0aW1lKQogCVVQREFURV9WVElNRSBfX0xDX0VYSVRfVElNRVIsX19MQ19BU1lOQ19FTlRFUl9USU1FUixfX0xDX1VTRVJfVElNRVIKIAlVUERBVEVfVlRJTUUgX19MQ19MQVNUX1VQREFURV9USU1FUixfX0xDX0VYSVRfVElNRVIsX19MQ19TWVNURU1fVElNRVIKIAltdmMJX19MQ19MQVNUX1VQREFURV9USU1FUig4KSxfX0xDX0FTWU5DX0VOVEVSX1RJTUVSCiBleHRfbm9fdnRpbWU6Ci0JbAklcjksX19MQ19USFJFQURfSU5GTwkjIGxvYWQgcG9pbnRlciB0byB0aHJlYWRfaW5mbyBzdHJ1Y3QKIAlUUkFDRV9JUlFTX09GRgogCWxhCSVyMixTUF9QVFJFR1MoJXIxNSkJIyBhZGRyZXNzIG9mIHJlZ2lzdGVyLXNhdmUgYXJlYQogCWwJJXIzLF9fTENfQ1BVX0FERFJFU1MJIyBnZXQgY3B1IGFkZHJlc3MgKyBpbnRlcnJ1cHRpb24gY29kZQpAQCAtNzc1LDcgKzc3MCwxMCBAQAogCXNyYQklcjE0LFBBR0VfU0hJRlQKIAliZQlCQVNFRCgwZikKIAlsCSVyMTUsX19MQ19QQU5JQ19TVEFDSwkjIGxvYWQgcGFuaWMgc3RhY2sKLTA6CUNSRUFURV9TVEFDS19GUkFNRSBfX0xDX01DS19PTERfUFNXLF9fTENfU0FWRV9BUkVBKzMyCiswOglzCSVyMTUsQkFTRUQoLkxjX3Nwc2l6ZSkJIyBtYWtlIHJvb20gZm9yIHJlZ2lzdGVycyAmIHBzdworCUNSRUFURV9TVEFDS19GUkFNRSBfX0xDX1NBVkVfQVJFQSszMgorCW12YwlTUF9QU1coOCwlcjE1KSwwKCVyMTIpCisJbAklcjEyLF9fTENfVEhSRUFEX0lORk8JIyBsb2FkIHBvaW50ZXIgdG8gdGhyZWFkX2luZm8gc3RydWN0CiAJdG0JX19MQ19NQ0NLX0NPREUrMiwweDA4CSMgbXdwIG9mIG9sZCBwc3cgdmFsaWQ/CiAJYm5vCUJBU0VEKG1jY2tfbm9fdnRpbWUpCSMgbm8gLT4gc2tpcCBjbGVhbnVwIGNyaXRpY2FsCiAJdG0JU1BfUFNXKzEoJXIxNSksMHgwMQkjIGludGVycnVwdGluZyBmcm9tIHVzZXIgPwpAQCAtNzg0LDcgKzc4Miw2IEBACiAJVVBEQVRFX1ZUSU1FIF9fTENfTEFTVF9VUERBVEVfVElNRVIsX19MQ19FWElUX1RJTUVSLF9fTENfU1lTVEVNX1RJTUVSCiAJbXZjCV9fTENfTEFTVF9VUERBVEVfVElNRVIoOCksX19MQ19NQ0NLX0VOVEVSX1RJTUVSCiBtY2NrX25vX3Z0aW1lOgotCWwJJXI5LF9fTENfVEhSRUFEX0lORk8JIyBsb2FkIHBvaW50ZXIgdG8gdGhyZWFkX2luZm8gc3RydWN0CiAJbGEJJXIyLFNQX1BUUkVHUyglcjE1KQkjIGxvYWQgcHRfcmVncwogCWwJJXIxLEJBU0VEKC5MczM5MF9tY2NrKQogCWJhc3IJJXIxNCwlcjEJCSMgY2FsbCBtYWNoaW5lIGNoZWNrIGhhbmRsZXIKQEAgLTc5Niw3ICs3OTMsNyBAQAogCXhjCV9fU0ZfQkFDS0NIQUlOKDQsJXIxKSxfX1NGX0JBQ0tDSEFJTiglcjEpICMgY2xlYXIgYmFjayBjaGFpbgogCWxyCSVyMTUsJXIxCiAJc3Rvc20JX19TRl9FTVBUWSglcjE1KSwweDA0CSMgdHVybiBkYXQgb24KLQl0bQlfX1RJX2ZsYWdzKzMoJXI5KSxfVElGX01DQ0tfUEVORElORworCXRtCV9fVElfZmxhZ3MrMyglcjEyKSxfVElGX01DQ0tfUEVORElORwogCWJubwlCQVNFRChtY2NrX3JldHVybikKIAlUUkFDRV9JUlFTX09GRgogCWwJJXIxLEJBU0VEKC5MczM5MF9oYW5kbGVfbWNjaykKQEAgLTg2MSw2ICs4NTgsOCBAQAogcmVzdGFydF9nbzoKICNlbmRpZgogCisJLnNlY3Rpb24gLmtwcm9iZXMudGV4dCwgImF4IgorCiAjaWZkZWYgQ09ORklHX0NIRUNLX1NUQUNLCiAvKgogICogVGhlIHN5bmNocm9ub3VzIG9yIHRoZSBhc3luY2hyb25vdXMgc3RhY2sgb3ZlcmZsb3dlZC4gV2UgYXJlIGRlYWQuCkBAIC05NDMsMTIgKzk0MiwxMyBAQAogCWJoCUJBU0VEKDBmKQogCW12YwlfX0xDX1NBVkVfQVJFQSgxNiksMCglcjEyKQogMDoJc3QJJXIxMyw0KCVyMTIpCi0Jc3QJJXIxMixfX0xDX1NBVkVfQVJFQSs0OAkjIGFyZ2gKLQlTQVZFX0FMTF9TWU5DIF9fTENfU1ZDX09MRF9QU1csX19MQ19TQVZFX0FSRUEKLQlDUkVBVEVfU1RBQ0tfRlJBTUUgX19MQ19TVkNfT0xEX1BTVyxfX0xDX1NBVkVfQVJFQQotCWwJJXIxMixfX0xDX1NBVkVfQVJFQSs0OAkjIGFyZ2gKKwlsCSVyMTUsX19MQ19LRVJORUxfU1RBQ0sJIyBwcm9ibGVtIHN0YXRlIC0+IGxvYWQga3NwCisJcwklcjE1LEJBU0VEKC5MY19zcHNpemUpCSMgbWFrZSByb29tIGZvciByZWdpc3RlcnMgJiBwc3cKIAlzdAklcjE1LDEyKCVyMTIpCi0JbGgJJXI3LDB4OGEKKwlDUkVBVEVfU1RBQ0tfRlJBTUUgX19MQ19TQVZFX0FSRUEKKwltdmMJU1BfUFNXKDgsJXIxNSksX19MQ19TVkNfT0xEX1BTVworCW12YwlTUF9JTEMoNCwlcjE1KSxfX0xDX1NWQ19JTEMKKwltdmMJMCg0LCVyMTIpLF9fTENfVEhSRUFEX0lORk8KIGNsZWFudXBfdnRpbWU6CiAJY2xjCV9fTENfUkVUVVJOX1BTVys0KDQpLEJBU0VEKGNsZWFudXBfc3lzdGVtX2NhbGxfaW5zbisxMikKIAliaGUJQkFTRUQoY2xlYW51cF9zdGltZSkKQEAgLTEwNDYsNyArMTA0Niw3IEBACiAuTGRvX3NpZ25hbDoJLmxvbmcJZG9fc2lnbmFsCiAuTGRvX25vdGlmeV9yZXN1bWU6CiAJCS5sb25nCWRvX25vdGlmeV9yZXN1bWUKLS5MaGFuZGxlX3BlcjoJLmxvbmcJZG9fc2luZ2xlX3N0ZXAKKy5MaGFuZGxlX3BlcjoJLmxvbmcJZG9fcGVyX3RyYXAKIC5MZG9fZXhlY3ZlOgkubG9uZwlkb19leGVjdmUKIC5MZXhlY3ZlX3RhaWw6CS5sb25nCWV4ZWN2ZV90YWlsCiAuTGp1bXBfdGFibGU6CS5sb25nCXBnbV9jaGVja190YWJsZQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeS5oIGIvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeS5oCmluZGV4IDk1YzFkZmMuLjE3YTZmODMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvZW50cnkuaAorKysgYi9hcmNoL3MzOTAva2VybmVsL2VudHJ5LmgKQEAgLTEyLDcgKzEyLDcgQEAKIAogZXh0ZXJuIGludCBzeXNjdGxfdXNlcnByb2Nlc3NfZGVidWc7CiAKLXZvaWQgZG9fc2luZ2xlX3N0ZXAoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwordm9pZCBkb19wZXJfdHJhcChzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiB2b2lkIHN5c2NhbGxfdHJhY2Uoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBlbnRyeWV4aXQpOwogdm9pZCBrZXJuZWxfc3RhY2tfb3ZlcmZsb3coc3RydWN0IHB0X3JlZ3MgKiByZWdzKTsKIHZvaWQgZG9fc2lnbmFsKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvZW50cnk2NC5TIGIvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeTY0LlMKaW5kZXggOGYzZTgwMi4uOWQzNjAzZCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeTY0LlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeTY0LlMKQEAgLTUxLDcgKzUxLDcgQEAKIFNUQUNLX1NJWkUgID0gMSA8PCBTVEFDS19TSElGVAogCiBfVElGX1dPUktfU1ZDID0gKF9USUZfU0lHUEVORElORyB8IF9USUZfTk9USUZZX1JFU1VNRSB8IF9USUZfTkVFRF9SRVNDSEVEIHwgXAotCQkgX1RJRl9NQ0NLX1BFTkRJTkcgfCBfVElGX1JFU1RBUlRfU1ZDIHwgX1RJRl9TSU5HTEVfU1RFUCApCisJCSBfVElGX01DQ0tfUEVORElORyB8IF9USUZfUkVTVEFSVF9TVkMgfCBfVElGX1BFUl9UUkFQICkKIF9USUZfV09SS19JTlQgPSAoX1RJRl9TSUdQRU5ESU5HIHwgX1RJRl9OT1RJRllfUkVTVU1FIHwgX1RJRl9ORUVEX1JFU0NIRUQgfCBcCiAJCSBfVElGX01DQ0tfUEVORElORykKIF9USUZfU1lTQ0FMTCA9IChfVElGX1NZU0NBTExfVFJBQ0U+PjggfCBfVElGX1NZU0NBTExfQVVESVQ+PjggfCBcCkBAIC0xOTcsNiArMTk3LDggQEAKIAlzc20JX19TRl9FTVBUWSglcjE1KQogCS5lbmRtCiAKKwkuc2VjdGlvbiAua3Byb2Jlcy50ZXh0LCAiYXgiCisKIC8qCiAgKiBTY2hlZHVsZXIgcmVzdW1lIGZ1bmN0aW9uLCBjYWxsZWQgYnkgc3dpdGNoX3RvCiAgKiAgZ3ByMiA9ICh0YXNrX3N0cnVjdCAqKSBwcmV2CkBAIC0yMDYsMzAgKzIwOCwyMSBAQAogICovCiAJLmdsb2JsCV9fc3dpdGNoX3RvCiBfX3N3aXRjaF90bzoKLQl0bQlfX1RIUkVBRF9wZXIrNCglcjMpLDB4ZTggIyBpcyB0aGUgbmV3IHByb2Nlc3MgdXNpbmcgcGVyID8KLQlqeglfX3N3aXRjaF90b19ub3BlcgkJIyBpZiBub3Qgd2UncmUgZmluZQotCXN0Y3RnCSVjOSwlYzExLF9fU0ZfRU1QVFkoJXIxNSkjIFdlIGFyZSB1c2luZyBwZXIgc3R1ZmYKLQljbGMJX19USFJFQURfcGVyKDI0LCVyMyksX19TRl9FTVBUWSglcjE1KQotCWplCV9fc3dpdGNoX3RvX25vcGVyCSAgICAgIyB3ZSBnb3QgYXdheSB3aXRob3V0IGJhc2hpbmcgVExCJ3MKLQlsY3RsZwklYzksJWMxMSxfX1RIUkVBRF9wZXIoJXIzKQkjIE5vcGUgd2UgZGlkbid0Ci1fX3N3aXRjaF90b19ub3BlcjoKLQlsZwklcjQsX19USFJFQURfaW5mbyglcjIpCQkgICAgIyBnZXQgdGhyZWFkX2luZm8gb2YgcHJldgorCWxnCSVyNCxfX1RIUkVBRF9pbmZvKCVyMikJCSMgZ2V0IHRocmVhZF9pbmZvIG9mIHByZXYKKwlsZwklcjUsX19USFJFQURfaW5mbyglcjMpCQkjIGdldCB0aHJlYWRfaW5mbyBvZiBuZXh0CiAJdG0JX19USV9mbGFncys3KCVyNCksX1RJRl9NQ0NLX1BFTkRJTkcgIyBtYWNoaW5lIGNoZWNrIHBlbmRpbmc/Ci0JanoJX19zd2l0Y2hfdG9fbm9fbWNjawotCW5pCV9fVElfZmxhZ3MrNyglcjQpLDI1NS1fVElGX01DQ0tfUEVORElORyAjIGNsZWFyIGZsYWcgaW4gcHJldgotCWxnCSVyNCxfX1RIUkVBRF9pbmZvKCVyMykJCSAgICAjIGdldCB0aHJlYWRfaW5mbyBvZiBuZXh0Ci0Jb2kJX19USV9mbGFncys3KCVyNCksX1RJRl9NQ0NLX1BFTkRJTkcgIyBzZXQgaXQgaW4gbmV4dAotX19zd2l0Y2hfdG9fbm9fbWNjazoKLQlzdG1nCSVyNiwlcjE1LF9fU0ZfR1BSUyglcjE1KSMgc3RvcmUgX19zd2l0Y2hfdG8gcmVnaXN0ZXJzIG9mIHByZXYgdGFzawotCXN0ZwklcjE1LF9fVEhSRUFEX2tzcCglcjIpCSMgc3RvcmUga2VybmVsIHN0YWNrIHRvIHByZXYtPnRzcy5rc3AKLQlsZwklcjE1LF9fVEhSRUFEX2tzcCglcjMpCSMgbG9hZCBrZXJuZWwgc3RhY2sgZnJvbSBuZXh0LT50c3Mua3NwCi0JbG1nCSVyNiwlcjE1LF9fU0ZfR1BSUyglcjE1KSMgbG9hZCBfX3N3aXRjaF90byByZWdpc3RlcnMgb2YgbmV4dCB0YXNrCi0Jc3RnCSVyMyxfX0xDX0NVUlJFTlQJIyBfX0xDX0NVUlJFTlQgPSBjdXJyZW50IHRhc2sgc3RydWN0Ci0JbGN0bAklYzQsJWM0LF9fVEFTS19waWQoJXIzKSAjIGxvYWQgcGlkIHRvIGNvbnRyb2wgcmVnLiA0Ci0JbGcJJXIzLF9fVEhSRUFEX2luZm8oJXIzKQkjIGxvYWQgdGhyZWFkX2luZm8gZnJvbSB0YXNrIHN0cnVjdAotCXN0ZwklcjMsX19MQ19USFJFQURfSU5GTwotCWFnaGkJJXIzLFNUQUNLX1NJWkUKLQlzdGcJJXIzLF9fTENfS0VSTkVMX1NUQUNLCSMgX19MQ19LRVJORUxfU1RBQ0sgPSBuZXcga2VybmVsIHN0YWNrCisJanoJMGYKKwluaQlfX1RJX2ZsYWdzKzcoJXI0KSwyNTUtX1RJRl9NQ0NLX1BFTkRJTkcJIyBjbGVhciBmbGFnIGluIHByZXYKKwlvaQlfX1RJX2ZsYWdzKzcoJXI1KSxfVElGX01DQ0tfUEVORElORwkjIHNldCBpdCBpbiBuZXh0CiswOglzdG1nCSVyNiwlcjE1LF9fU0ZfR1BSUyglcjE1KQkjIHN0b3JlIGdwcnMgb2YgcHJldiB0YXNrCisJc3RnCSVyMTUsX19USFJFQURfa3NwKCVyMikJCSMgc3RvcmUga2VybmVsIHN0YWNrIG9mIHByZXYKKwlsZwklcjE1LF9fVEhSRUFEX2tzcCglcjMpCQkjIGxvYWQga2VybmVsIHN0YWNrIG9mIG5leHQKKwlsY3RsCSVjNCwlYzQsX19UQVNLX3BpZCglcjMpCQkjIGxvYWQgcGlkIHRvIGNvbnRyb2wgcmVnLiA0CisJbG1nCSVyNiwlcjE1LF9fU0ZfR1BSUyglcjE1KQkjIGxvYWQgZ3BycyBvZiBuZXh0IHRhc2sKKwlzdGcJJXIzLF9fTENfQ1VSUkVOVAkJIyBzdG9yZSB0YXNrIHN0cnVjdCBvZiBuZXh0CisJc3RnCSVyNSxfX0xDX1RIUkVBRF9JTkZPCQkjIHN0b3JlIHRocmVhZCBpbmZvIG9mIG5leHQKKwlhZ2hpCSVyNSxTVEFDS19TSVpFCQkJIyBlbmQgb2Yga2VybmVsIHN0YWNrIG9mIG5leHQKKwlzdGcJJXI1LF9fTENfS0VSTkVMX1NUQUNLCQkjIHN0b3JlIGVuZCBvZiBrZXJuZWwgc3RhY2sKIAlicgklcjE0CiAKIF9fY3JpdGljYWxfc3RhcnQ6CkBAIC0zMDksNyArMzAyLDcgQEAKIAlqbwlzeXNjX25vdGlmeV9yZXN1bWUKIAl0bQlfX1RJX2ZsYWdzKzcoJXIxMiksX1RJRl9SRVNUQVJUX1NWQwogCWpvCXN5c2NfcmVzdGFydAotCXRtCV9fVElfZmxhZ3MrNyglcjEyKSxfVElGX1NJTkdMRV9TVEVQCisJdG0JX19USV9mbGFncys3KCVyMTIpLF9USUZfUEVSX1RSQVAKIAlqbwlzeXNjX3NpbmdsZXN0ZXAKIAlqCXN5c2NfcmV0dXJuCQkjIGJld2FyZSBvZiBjcml0aWNhbCBzZWN0aW9uIGNsZWFudXAKIApAQCAtMzMxLDEyICszMjQsMTIgQEAKICMgX1RJRl9TSUdQRU5ESU5HIGlzIHNldCwgY2FsbCBkb19zaWduYWwKICMKIHN5c2Nfc2lncGVuZGluZzoKLQluaQlfX1RJX2ZsYWdzKzcoJXIxMiksMjU1LV9USUZfU0lOR0xFX1NURVAgIyBjbGVhciBUSUZfU0lOR0xFX1NURVAKKwluaQlfX1RJX2ZsYWdzKzcoJXIxMiksMjU1LV9USUZfUEVSX1RSQVAgIyBjbGVhciBUSUZfUEVSX1RSQVAKIAlsYQklcjIsU1BfUFRSRUdTKCVyMTUpCSMgbG9hZCBwdF9yZWdzCiAJYnJhc2wJJXIxNCxkb19zaWduYWwJCSMgY2FsbCBkb19zaWduYWwKIAl0bQlfX1RJX2ZsYWdzKzcoJXIxMiksX1RJRl9SRVNUQVJUX1NWQwogCWpvCXN5c2NfcmVzdGFydAotCXRtCV9fVElfZmxhZ3MrNyglcjEyKSxfVElGX1NJTkdMRV9TVEVQCisJdG0JX19USV9mbGFncys3KCVyMTIpLF9USUZfUEVSX1RSQVAKIAlqbwlzeXNjX3NpbmdsZXN0ZXAKIAlqCXN5c2NfcmV0dXJuCiAKQEAgLTM2MSwxNCArMzU0LDE0IEBACiAJaglzeXNjX25yX29rCQkjIHJlc3RhcnQgc3ZjCiAKICMKLSMgX1RJRl9TSU5HTEVfU1RFUCBpcyBzZXQsIGNhbGwgZG9fc2luZ2xlX3N0ZXAKKyMgX1RJRl9QRVJfVFJBUCBpcyBzZXQsIGNhbGwgZG9fcGVyX3RyYXAKICMKIHN5c2Nfc2luZ2xlc3RlcDoKLQluaQlfX1RJX2ZsYWdzKzcoJXIxMiksMjU1LV9USUZfU0lOR0xFX1NURVAJIyBjbGVhciBUSUZfU0lOR0xFX1NURVAKKwluaQlfX1RJX2ZsYWdzKzcoJXIxMiksMjU1LV9USUZfUEVSX1RSQVAJIyBjbGVhciBUSUZfUEVSX1RSQVAKIAl4YwlTUF9TVkNOUigyLCVyMTUpLFNQX1NWQ05SKCVyMTUpCQkjIGNsZWFyIHN2YyBudW1iZXIKIAlsYQklcjIsU1BfUFRSRUdTKCVyMTUpCSMgYWRkcmVzcyBvZiByZWdpc3Rlci1zYXZlIGFyZWEKIAlsYXJsCSVyMTQsc3lzY19yZXR1cm4JIyBsb2FkIGFkci4gb2Ygc3lzdGVtIHJldHVybgotCWpnCWRvX3NpbmdsZV9zdGVwCQkjIGJyYW5jaCB0byBkb19zaWd0cmFwCisJamcJZG9fcGVyX3RyYXAKIAogIwogIyBjYWxsIHRyYWNlaG9va19yZXBvcnRfc3lzY2FsbF9lbnRyeS90cmFjZWhvb2tfcmVwb3J0X3N5c2NhbGxfZXhpdCBiZWZvcmUKQEAgLTUyNCwxMCArNTE3LDEwIEBACiAJbGcJJXIxLF9fVElfdGFzayglcjEyKQogCXRtCVNQX1BTVysxKCVyMTUpLDB4MDEJIyBrZXJuZWwgcGVyIGV2ZW50ID8KIAlqeglrZXJuZWxfcGVyCi0JbXZjCV9fVEhSRUFEX3BlcitfX1BFUl9hdG1pZCgyLCVyMSksX19MQ19QRVJfQVRNSUQKLQltdmMJX19USFJFQURfcGVyK19fUEVSX2FkZHJlc3MoOCwlcjEpLF9fTENfUEVSX0FERFJFU1MKLQltdmMJX19USFJFQURfcGVyK19fUEVSX2FjY2Vzc19pZCgxLCVyMSksX19MQ19QRVJfQUNDRVNTX0lECi0Jb2kJX19USV9mbGFncys3KCVyMTIpLF9USUZfU0lOR0xFX1NURVAgIyBzZXQgVElGX1NJTkdMRV9TVEVQCisJbXZjCV9fVEhSRUFEX3Blcl9jYXVzZSgyLCVyMSksX19MQ19QRVJfQ0FVU0UKKwltdmMJX19USFJFQURfcGVyX2FkZHJlc3MoOCwlcjEpLF9fTENfUEVSX0FERFJFU1MKKwltdmMJX19USFJFQURfcGVyX3BhaWQoMSwlcjEpLF9fTENfUEVSX1BBSUQKKwlvaQlfX1RJX2ZsYWdzKzcoJXIxMiksX1RJRl9QRVJfVFJBUCAjIHNldCBUSUZfUEVSX1RSQVAKIAlsZ2YJJXIzLF9fTENfUEdNX0lMQwkjIGxvYWQgcHJvZ3JhbSBpbnRlcnJ1cHRpb24gY29kZQogCWxnCSVyNCxfX0xDX1RSQU5TX0VYQ19DT0RFCiAJUkVFTkFCTEVfSVJRUwpAQCAtNTU2LDEwICs1NDksMTAgQEAKIAltdmMJX19MQ19MQVNUX1VQREFURV9USU1FUig4KSxfX0xDX1NZTkNfRU5URVJfVElNRVIKIAlMQVNUX0JSRUFLCiAJbGcJJXI4LF9fVElfdGFzayglcjEyKQotCW12YwlfX1RIUkVBRF9wZXIrX19QRVJfYXRtaWQoMiwlcjgpLF9fTENfUEVSX0FUTUlECi0JbXZjCV9fVEhSRUFEX3BlcitfX1BFUl9hZGRyZXNzKDgsJXI4KSxfX0xDX1BFUl9BRERSRVNTCi0JbXZjCV9fVEhSRUFEX3BlcitfX1BFUl9hY2Nlc3NfaWQoMSwlcjgpLF9fTENfUEVSX0FDQ0VTU19JRAotCW9pCV9fVElfZmxhZ3MrNyglcjEyKSxfVElGX1NJTkdMRV9TVEVQICMgc2V0IFRJRl9TSU5HTEVfU1RFUAorCW12YwlfX1RIUkVBRF9wZXJfY2F1c2UoMiwlcjgpLF9fTENfUEVSX0NBVVNFCisJbXZjCV9fVEhSRUFEX3Blcl9hZGRyZXNzKDgsJXI4KSxfX0xDX1BFUl9BRERSRVNTCisJbXZjCV9fVEhSRUFEX3Blcl9wYWlkKDEsJXI4KSxfX0xDX1BFUl9QQUlECisJb2kJX19USV9mbGFncys3KCVyMTIpLF9USUZfUEVSX1RSQVAgIyBzZXQgVElGX1BFUl9UUkFQCiAJc3Rvc20JX19TRl9FTVBUWSglcjE1KSwweDAzCSMgcmVlbmFibGUgaW50ZXJydXB0cwogCWxtZwklcjIsJXI2LFNQX1IyKCVyMTUpCSMgbG9hZCBzdmMgYXJndW1lbnRzCiAJaglzeXNjX2RvX3N2YwpAQCAtNTcxLDcgKzU2NCw3IEBACiAJUkVFTkFCTEVfSVJRUwogCXhjCVNQX1NWQ05SKDIsJXIxNSksU1BfU1ZDTlIoJXIxNSkJIyBjbGVhciBzdmMgbnVtYmVyCiAJbGEJJXIyLFNQX1BUUkVHUyglcjE1KQkjIGFkZHJlc3Mgb2YgcmVnaXN0ZXItc2F2ZSBhcmVhCi0JYnJhc2wJJXIxNCxkb19zaW5nbGVfc3RlcAorCWJyYXNsCSVyMTQsZG9fcGVyX3RyYXAKIAlqCXBnbV9leGl0CiAKIC8qCkBAIC04NjgsNiArODYxLDggQEAKIHJlc3RhcnRfZ286CiAjZW5kaWYKIAorCS5zZWN0aW9uIC5rcHJvYmVzLnRleHQsICJheCIKKwogI2lmZGVmIENPTkZJR19DSEVDS19TVEFDSwogLyoKICAqIFRoZSBzeW5jaHJvbm91cyBvciB0aGUgYXN5bmNocm9ub3VzIHN0YWNrIG92ZXJmbG93ZWQuIFdlIGFyZSBkZWFkLgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9mdHJhY2UuYyBiL2FyY2gvczM5MC9rZXJuZWwvZnRyYWNlLmMKaW5kZXggNmE4M2QwNS4uNzhiZGYwZSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9mdHJhY2UuYworKysgYi9hcmNoL3MzOTAva2VybmVsL2Z0cmFjZS5jCkBAIC00LDcgKzQsNyBAQAogICogQ29weXJpZ2h0IElCTSBDb3JwLiAyMDA5CiAgKgogICogICBBdXRob3Iocyk6IEhlaWtvIENhcnN0ZW5zIDxoZWlrby5jYXJzdGVuc0BkZS5pYm0uY29tPiwKLSAqCisgKgkJTWFydGluIFNjaHdpZGVmc2t5IDxzY2h3aWRlZnNreUBkZS5pYm0uY29tPgogICovCiAKICNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+CkBAIC0xMiwxNzYgKzEyLDE0NCBAQAogI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva3Byb2Jlcy5oPgogI2luY2x1ZGUgPHRyYWNlL3N5c2NhbGwuaD4KICNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KIAorI2lmZGVmIENPTkZJR182NEJJVAorI2RlZmluZSBNQ09VTlRfT0ZGU0VUX1JFVCAxMgorI2Vsc2UKKyNkZWZpbmUgTUNPVU5UX09GRlNFVF9SRVQgMjIKKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFCiAKIHZvaWQgZnRyYWNlX2Rpc2FibGVfY29kZSh2b2lkKTsKLXZvaWQgZnRyYWNlX2Rpc2FibGVfcmV0dXJuKHZvaWQpOwotdm9pZCBmdHJhY2VfY2FsbF9jb2RlKHZvaWQpOwotdm9pZCBmdHJhY2Vfbm9wX2NvZGUodm9pZCk7Ci0KLSNkZWZpbmUgRlRSQUNFX0lOU05fU0laRSA0Cit2b2lkIGZ0cmFjZV9lbmFibGVfaW5zbih2b2lkKTsKIAogI2lmZGVmIENPTkZJR182NEJJVAotCisvKgorICogVGhlIDY0LWJpdCBtY291bnQgY29kZSBsb29rcyBsaWtlIHRoaXM6CisgKglzdGcJJXIxNCw4KCVyMTUpCQkjIG9mZnNldCAwCisgKiA+CWxhcmwJJXIxLDwmY291bnRlcj4JCSMgb2Zmc2V0IDYKKyAqID4JYnJhc2wJJXIxNCxfbWNvdW50CQkjIG9mZnNldCAxMgorICoJbGcJJXIxNCw4KCVyMTUpCQkjIG9mZnNldCAxOAorICogVG90YWwgbGVuZ3RoIGlzIDI0IGJ5dGVzLiBUaGUgbWlkZGxlIHR3byBpbnN0cnVjdGlvbnMgb2YgdGhlIG1jb3VudAorICogYmxvY2sgZ2V0IG92ZXJ3cml0dGVuIGJ5IGZ0cmFjZV9tYWtlX25vcCAvIGZ0cmFjZV9tYWtlX2NhbGwuCisgKiBUaGUgNjQtYml0IGVuYWJsZWQgZnRyYWNlIGNvZGUgYmxvY2sgbG9va3MgbGlrZSB0aGlzOgorICoJc3RnCSVyMTQsOCglcjE1KQkJIyBvZmZzZXQgMAorICogPglsZwklcjEsX19MQ19GVFJBQ0VfRlVOQwkjIG9mZnNldCA2CisgKiA+CWxncgklcjAsJXIwCQkJIyBvZmZzZXQgMTIKKyAqID4JYmFzcgklcjE0LCVyMQkJIyBvZmZzZXQgMTYKKyAqCWxnCSVyMTQsOCglMTUpCQkjIG9mZnNldCAxOAorICogVGhlIHJldHVybiBwb2ludHMgb2YgdGhlIG1jb3VudC9mdHJhY2UgZnVuY3Rpb24gaGF2ZSB0aGUgc2FtZSBvZmZzZXQgMTguCisgKiBUaGUgNjQtYml0IGRpc2FibGUgZnRyYWNlIGNvZGUgYmxvY2sgbG9va3MgbGlrZSB0aGlzOgorICoJc3RnCSVyMTQsOCglcjE1KQkJIyBvZmZzZXQgMAorICogPglqZwkuKzE4CQkJIyBvZmZzZXQgNgorICogPglsZ3IJJXIwLCVyMAkJCSMgb2Zmc2V0IDEyCisgKiA+CWJhc3IJJXIxNCwlcjEJCSMgb2Zmc2V0IDE2CisgKglsZwklcjE0LDgoJTE1KQkJIyBvZmZzZXQgMTgKKyAqIFRoZSBqZyBpbnN0cnVjdGlvbiBicmFuY2hlcyB0byBvZmZzZXQgMjQgdG8gc2tpcCBhcyBtYW55IGluc3RydWN0aW9ucworICogYXMgcG9zc2libGUuCisgKi8KIGFzbSgKIAkiCS5hbGlnbgk0XG4iCiAJImZ0cmFjZV9kaXNhYmxlX2NvZGU6XG4iCi0JIglqCTBmXG4iCi0JIgkud29yZAkweDAwMjRcbiIKLQkiCWxnCSVyMSwiX19zdHJpbmdpZnkoX19MQ19GVFJBQ0VfRlVOQykiXG4iCi0JIgliYXNyCSVyMTQsJXIxXG4iCi0JImZ0cmFjZV9kaXNhYmxlX3JldHVybjpcbiIKLQkiCWxnCSVyMTQsOCgxNSlcbiIKKwkiCWpnCTBmXG4iCiAJIglsZ3IJJXIwLCVyMFxuIgotCSIwOlxuIik7Ci0KLWFzbSgKKwkiCWJhc3IJJXIxNCwlcjFcbiIKKwkiMDpcbiIKIAkiCS5hbGlnbgk0XG4iCi0JImZ0cmFjZV9ub3BfY29kZTpcbiIKLQkiCWoJLisiX19zdHJpbmdpZnkoTUNPVU5UX0lOU05fU0laRSkiXG4iKTsKKwkiZnRyYWNlX2VuYWJsZV9pbnNuOlxuIgorCSIJbGcJJXIxLCJfX3N0cmluZ2lmeShfX0xDX0ZUUkFDRV9GVU5DKSJcbiIpOwogCi1hc20oCi0JIgkuYWxpZ24JNFxuIgotCSJmdHJhY2VfY2FsbF9jb2RlOlxuIgotCSIJc3RnCSVyMTQsOCglcjE1KVxuIik7CisjZGVmaW5lIEZUUkFDRV9JTlNOX1NJWkUJNgogCiAjZWxzZSAvKiBDT05GSUdfNjRCSVQgKi8KLQorLyoKKyAqIFRoZSAzMS1iaXQgbWNvdW50IGNvZGUgbG9va3MgbGlrZSB0aGlzOgorICoJc3QJJXIxNCw0KCVyMTUpCQkjIG9mZnNldCAwCisgKiA+CWJyYXMJJXIxLDBmCQkJIyBvZmZzZXQgNAorICogPgkubG9uZwlfbWNvdW50CQkJIyBvZmZzZXQgOAorICogPgkubG9uZwk8JmNvdW50ZXI+CQkjIG9mZnNldCAxMgorICogPiAwOglsCSVyMTQsMCglcjEpCQkjIG9mZnNldCAxNgorICogPglsCSVyMSw0KCVyMSkJCSMgb2Zmc2V0IDIwCisgKgliYXNyCSVyMTQsJXIxNAkJIyBvZmZzZXQgMjQKKyAqCWwJJXIxNCw0KCVyMTUpCQkjIG9mZnNldCAyNgorICogVG90YWwgbGVuZ3RoIGlzIDMwIGJ5dGVzLiBUaGUgdHdlbnR5IGJ5dGVzIHN0YXJ0aW5nIGZyb20gb2Zmc2V0IDQKKyAqIHRvIG9mZnNldCAyNCBnZXQgb3ZlcndyaXR0ZW4gYnkgZnRyYWNlX21ha2Vfbm9wIC8gZnRyYWNlX21ha2VfY2FsbC4KKyAqIFRoZSAzMS1iaXQgZW5hYmxlZCBmdHJhY2UgY29kZSBibG9jayBsb29rcyBsaWtlIHRoaXM6CisgKglzdAklcjE0LDQoJXIxNSkJCSMgb2Zmc2V0IDAKKyAqID4JbAklcjE0LF9fTENfRlRSQUNFX0ZVTkMJIyBvZmZzZXQgNAorICogPglqCTBmCQkJIyBvZmZzZXQgOAorICogPgkuZmlsbAkxMiwxLDB4MDcJCSMgb2Zmc2V0IDEyCisgKiAgIDA6CWJhc3IJJXIxNCwlcjE0CQkjIG9mZnNldCAyNAorICoJbAklcjE0LDQoJXIxNCkJCSMgb2Zmc2V0IDI2CisgKiBUaGUgcmV0dXJuIHBvaW50cyBvZiB0aGUgbWNvdW50L2Z0cmFjZSBmdW5jdGlvbiBoYXZlIHRoZSBzYW1lIG9mZnNldCAyNi4KKyAqIFRoZSAzMS1iaXQgZGlzYWJsZWQgZnRyYWNlIGNvZGUgYmxvY2sgbG9va3MgbGlrZSB0aGlzOgorICoJc3QJJXIxNCw0KCVyMTUpCQkjIG9mZnNldCAwCisgKiA+CWoJLisyNgkJCSMgb2Zmc2V0IDQKKyAqID4JagkwZgkJCSMgb2Zmc2V0IDgKKyAqID4JLmZpbGwJMTIsMSwweDA3CQkjIG9mZnNldCAxMgorICogICAwOgliYXNyCSVyMTQsJXIxNAkJIyBvZmZzZXQgMjQKKyAqCWwJJXIxNCw0KCVyMTQpCQkjIG9mZnNldCAyNgorICogVGhlIGogaW5zdHJ1Y3Rpb24gYnJhbmNoZXMgdG8gb2Zmc2V0IDMwIHRvIHNraXAgYXMgbWFueSBpbnN0cnVjdGlvbnMKKyAqIGFzIHBvc3NpYmxlLgorICovCiBhc20oCiAJIgkuYWxpZ24JNFxuIgogCSJmdHJhY2VfZGlzYWJsZV9jb2RlOlxuIgorCSIJagkxZlxuIgogCSIJagkwZlxuIgotCSIJbAklcjEsIl9fc3RyaW5naWZ5KF9fTENfRlRSQUNFX0ZVTkMpIlxuIgotCSIJYmFzcgklcjE0LCVyMVxuIgotCSJmdHJhY2VfZGlzYWJsZV9yZXR1cm46XG4iCi0JIglsCSVyMTQsNCglcjE1KVxuIgotCSIJagkwZlxuIgotCSIJYmNyCTAsJXI3XG4iCi0JIgliY3IJMCwlcjdcbiIKLQkiCWJjcgkwLCVyN1xuIgotCSIJYmNyCTAsJXI3XG4iCi0JIgliY3IJMCwlcjdcbiIKLQkiCWJjcgkwLCVyN1xuIgotCSIwOlxuIik7Ci0KLWFzbSgKKwkiCS5maWxsCTEyLDEsMHgwN1xuIgorCSIwOgliYXNyCSVyMTQsJXIxNFxuIgorCSIxOlxuIgogCSIJLmFsaWduCTRcbiIKLQkiZnRyYWNlX25vcF9jb2RlOlxuIgotCSIJagkuKyJfX3N0cmluZ2lmeShNQ09VTlRfSU5TTl9TSVpFKSJcbiIpOworCSJmdHJhY2VfZW5hYmxlX2luc246XG4iCisJIglsCSVyMTQsIl9fc3RyaW5naWZ5KF9fTENfRlRSQUNFX0ZVTkMpIlxuIik7CiAKLWFzbSgKLQkiCS5hbGlnbgk0XG4iCi0JImZ0cmFjZV9jYWxsX2NvZGU6XG4iCi0JIglzdAklcjE0LDQoJXIxNSlcbiIpOworI2RlZmluZSBGVFJBQ0VfSU5TTl9TSVpFCTQKIAogI2VuZGlmIC8qIENPTkZJR182NEJJVCAqLwogCi1zdGF0aWMgaW50IGZ0cmFjZV9tb2RpZnlfY29kZSh1bnNpZ25lZCBsb25nIGlwLAotCQkJICAgICAgdm9pZCAqb2xkX2NvZGUsIGludCBvbGRfc2l6ZSwKLQkJCSAgICAgIHZvaWQgKm5ld19jb2RlLCBpbnQgbmV3X3NpemUpCi17Ci0JdW5zaWduZWQgY2hhciByZXBsYWNlZFtNQ09VTlRfSU5TTl9TSVpFXTsKLQotCS8qCi0JICogTm90ZTogRHVlIHRvIG1vZHVsZXMgY29kZSBjYW4gZGlzYXBwZWFyIGFuZCBjaGFuZ2UuCi0JICogIFdlIG5lZWQgdG8gcHJvdGVjdCBhZ2FpbnN0IGZhdWx0aW5nIGFzIHdlbGwgYXMgY29kZQotCSAqICBjaGFuZ2luZy4gV2UgZG8gdGhpcyBieSB1c2luZyB0aGUgcHJvYmVfa2VybmVsXyoKLQkgKiAgZnVuY3Rpb25zLgotCSAqICBUaGlzIGhvd2V2ZXIgaXMganVzdCBhIHNpbXBsZSBzYW5pdHkgY2hlY2suCi0JICovCi0JaWYgKHByb2JlX2tlcm5lbF9yZWFkKHJlcGxhY2VkLCAodm9pZCAqKWlwLCBvbGRfc2l6ZSkpCi0JCXJldHVybiAtRUZBVUxUOwotCWlmIChtZW1jbXAocmVwbGFjZWQsIG9sZF9jb2RlLCBvbGRfc2l6ZSkgIT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKHByb2JlX2tlcm5lbF93cml0ZSgodm9pZCAqKWlwLCBuZXdfY29kZSwgbmV3X3NpemUpKQotCQlyZXR1cm4gLUVQRVJNOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGZ0cmFjZV9tYWtlX2luaXRpYWxfbm9wKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGR5bl9mdHJhY2UgKnJlYywKLQkJCQkgICB1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JcmV0dXJuIGZ0cmFjZV9tb2RpZnlfY29kZShyZWMtPmlwLAotCQkJCSAgZnRyYWNlX2NhbGxfY29kZSwgRlRSQUNFX0lOU05fU0laRSwKLQkJCQkgIGZ0cmFjZV9kaXNhYmxlX2NvZGUsIE1DT1VOVF9JTlNOX1NJWkUpOwotfQogCiBpbnQgZnRyYWNlX21ha2Vfbm9wKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGR5bl9mdHJhY2UgKnJlYywKIAkJICAgIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKLQlpZiAoYWRkciA9PSBNQ09VTlRfQUREUikKLQkJcmV0dXJuIGZ0cmFjZV9tYWtlX2luaXRpYWxfbm9wKG1vZCwgcmVjLCBhZGRyKTsKLQlyZXR1cm4gZnRyYWNlX21vZGlmeV9jb2RlKHJlYy0+aXAsCi0JCQkJICBmdHJhY2VfY2FsbF9jb2RlLCBGVFJBQ0VfSU5TTl9TSVpFLAotCQkJCSAgZnRyYWNlX25vcF9jb2RlLCBGVFJBQ0VfSU5TTl9TSVpFKTsKKwlpZiAocHJvYmVfa2VybmVsX3dyaXRlKCh2b2lkICopIHJlYy0+aXAsIGZ0cmFjZV9kaXNhYmxlX2NvZGUsCisJCQkgICAgICAgTUNPVU5UX0lOU05fU0laRSkpCisJCXJldHVybiAtRVBFUk07CisJcmV0dXJuIDA7CiB9CiAKIGludCBmdHJhY2VfbWFrZV9jYWxsKHN0cnVjdCBkeW5fZnRyYWNlICpyZWMsIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKLQlyZXR1cm4gZnRyYWNlX21vZGlmeV9jb2RlKHJlYy0+aXAsCi0JCQkJICBmdHJhY2Vfbm9wX2NvZGUsIEZUUkFDRV9JTlNOX1NJWkUsCi0JCQkJICBmdHJhY2VfY2FsbF9jb2RlLCBGVFJBQ0VfSU5TTl9TSVpFKTsKKwlpZiAocHJvYmVfa2VybmVsX3dyaXRlKCh2b2lkICopIHJlYy0+aXAsIGZ0cmFjZV9lbmFibGVfaW5zbiwKKwkJCSAgICAgICBGVFJBQ0VfSU5TTl9TSVpFKSkKKwkJcmV0dXJuIC1FUEVSTTsKKwlyZXR1cm4gMDsKIH0KIAogaW50IGZ0cmFjZV91cGRhdGVfZnRyYWNlX2Z1bmMoZnRyYWNlX2Z1bmNfdCBmdW5jKQogewotCWZ0cmFjZV9keW5fZnVuYyA9ICh1bnNpZ25lZCBsb25nKWZ1bmM7CiAJcmV0dXJuIDA7CiB9CiAKIGludCBfX2luaXQgZnRyYWNlX2R5bl9hcmNoX2luaXQodm9pZCAqZGF0YSkKIHsKLQkqKHVuc2lnbmVkIGxvbmcgKilkYXRhID0gMDsKKwkqKHVuc2lnbmVkIGxvbmcgKikgZGF0YSA9IDA7CiAJcmV0dXJuIDA7CiB9CiAKICNlbmRpZiAvKiBDT05GSUdfRFlOQU1JQ19GVFJBQ0UgKi8KIAogI2lmZGVmIENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVIKLSNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0UKLS8qCi0gKiBQYXRjaCB0aGUga2VybmVsIGNvZGUgYXQgZnRyYWNlX2dyYXBoX2NhbGxlciBsb2NhdGlvbjoKLSAqIFRoZSBpbnN0cnVjdGlvbiB0aGVyZSBpcyBicmFuY2ggcmVsYXRpdmUgb24gY29uZGl0aW9uLiBUaGUgY29uZGl0aW9uIG1hc2sKLSAqIGlzIGVpdGhlciBhbGwgb25lcyAoYWx3YXlzIGJyYW5jaCBha2EgZGlzYWJsZSBmdHJhY2VfZ3JhcGhfY2FsbGVyKSBvciBhbGwKLSAqIHplcm9lcyAobm9wIGFrYSBlbmFibGUgZnRyYWNlX2dyYXBoX2NhbGxlcikuCi0gKiBJbnN0cnVjdGlvbiBmb3JtYXQgZm9yIGJyYyBpcyBhN200eHh4eCB3aGVyZSBtIGlzIHRoZSBjb25kaXRpb24gbWFzay4KLSAqLwotaW50IGZ0cmFjZV9lbmFibGVfZnRyYWNlX2dyYXBoX2NhbGxlcih2b2lkKQotewotCXVuc2lnbmVkIHNob3J0IG9wY29kZSA9IDB4YTcwNDsKLQotCXJldHVybiBwcm9iZV9rZXJuZWxfd3JpdGUoZnRyYWNlX2dyYXBoX2NhbGxlciwgJm9wY29kZSwgc2l6ZW9mKG9wY29kZSkpOwotfQotCi1pbnQgZnRyYWNlX2Rpc2FibGVfZnRyYWNlX2dyYXBoX2NhbGxlcih2b2lkKQotewotCXVuc2lnbmVkIHNob3J0IG9wY29kZSA9IDB4YTdmNDsKLQotCXJldHVybiBwcm9iZV9rZXJuZWxfd3JpdGUoZnRyYWNlX2dyYXBoX2NhbGxlciwgJm9wY29kZSwgc2l6ZW9mKG9wY29kZSkpOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZnRyYWNlX21jb3VudF9jYWxsX2FkanVzdCh1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JcmV0dXJuIGFkZHIgLSAoZnRyYWNlX2Rpc2FibGVfcmV0dXJuIC0gZnRyYWNlX2Rpc2FibGVfY29kZSk7Ci19Ci0KLSNlbHNlIC8qIENPTkZJR19EWU5BTUlDX0ZUUkFDRSAqLwotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZnRyYWNlX21jb3VudF9jYWxsX2FkanVzdCh1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JcmV0dXJuIGFkZHIgLSBNQ09VTlRfT0ZGU0VUX1JFVDsKLX0KLQotI2VuZGlmIC8qIENPTkZJR19EWU5BTUlDX0ZUUkFDRSAqLwotCiAvKgogICogSG9vayB0aGUgcmV0dXJuIGFkZHJlc3MgYW5kIHB1c2ggaXQgaW4gdGhlIHN0YWNrIG9mIHJldHVybiBhZGRyZXNzZXMKICAqIGluIGN1cnJlbnQgdGhyZWFkIGluZm8uCiAgKi8KLXVuc2lnbmVkIGxvbmcgcHJlcGFyZV9mdHJhY2VfcmV0dXJuKHVuc2lnbmVkIGxvbmcgaXAsIHVuc2lnbmVkIGxvbmcgcGFyZW50KQordW5zaWduZWQgbG9uZyBfX2twcm9iZXMgcHJlcGFyZV9mdHJhY2VfcmV0dXJuKHVuc2lnbmVkIGxvbmcgcGFyZW50LAorCQkJCQkgICAgICB1bnNpZ25lZCBsb25nIGlwKQogewogCXN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50IHRyYWNlOwogCkBAIC0xODksMTQgKzE1Nyw0MiBAQAogCQlnb3RvIG91dDsKIAlpZiAoZnRyYWNlX3B1c2hfcmV0dXJuX3RyYWNlKHBhcmVudCwgaXAsICZ0cmFjZS5kZXB0aCwgMCkgPT0gLUVCVVNZKQogCQlnb3RvIG91dDsKLQl0cmFjZS5mdW5jID0gZnRyYWNlX21jb3VudF9jYWxsX2FkanVzdChpcCkgJiBQU1dfQUREUl9JTlNOOworCXRyYWNlLmZ1bmMgPSAoaXAgJiBQU1dfQUREUl9JTlNOKSAtIE1DT1VOVF9PRkZTRVRfUkVUOwogCS8qIE9ubHkgdHJhY2UgaWYgdGhlIGNhbGxpbmcgZnVuY3Rpb24gZXhwZWN0cyB0by4gKi8KIAlpZiAoIWZ0cmFjZV9ncmFwaF9lbnRyeSgmdHJhY2UpKSB7CiAJCWN1cnJlbnQtPmN1cnJfcmV0X3N0YWNrLS07CiAJCWdvdG8gb3V0OwogCX0KLQlwYXJlbnQgPSAodW5zaWduZWQgbG9uZylyZXR1cm5fdG9faGFuZGxlcjsKKwlwYXJlbnQgPSAodW5zaWduZWQgbG9uZykgcmV0dXJuX3RvX2hhbmRsZXI7CiBvdXQ6CiAJcmV0dXJuIHBhcmVudDsKIH0KKworI2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRQorLyoKKyAqIFBhdGNoIHRoZSBrZXJuZWwgY29kZSBhdCBmdHJhY2VfZ3JhcGhfY2FsbGVyIGxvY2F0aW9uLiBUaGUgaW5zdHJ1Y3Rpb24KKyAqIHRoZXJlIGlzIGJyYW5jaCByZWxhdGl2ZSBhbmQgc2F2ZSB0byBwcmVwYXJlX2Z0cmFjZV9yZXR1cm4uIFRvIGRpc2FibGUKKyAqIHRoZSBjYWxsIHRvIHByZXBhcmVfZnRyYWNlX3JldHVybiB3ZSBwYXRjaCB0aGUgYnJhcyBvZmZzZXQgdG8gcG9pbnQKKyAqIGRpcmVjdGx5IGFmdGVyIHRoZSBpbnN0cnVjdGlvbnMuIFRvIGVuYWJsZSB0aGUgY2FsbCB3ZSBjYWxjdWxhdGUKKyAqIHRoZSBvcmlnaW5hbCBvZmZzZXQgdG8gcHJlcGFyZV9mdHJhY2VfcmV0dXJuIGFuZCBwdXQgaXQgYmFjay4KKyAqLworaW50IGZ0cmFjZV9lbmFibGVfZnRyYWNlX2dyYXBoX2NhbGxlcih2b2lkKQoreworCXVuc2lnbmVkIHNob3J0IG9mZnNldDsKKworCW9mZnNldCA9ICgodm9pZCAqKSBwcmVwYXJlX2Z0cmFjZV9yZXR1cm4gLQorCQkgICh2b2lkICopIGZ0cmFjZV9ncmFwaF9jYWxsZXIpIC8gMjsKKwlyZXR1cm4gcHJvYmVfa2VybmVsX3dyaXRlKGZ0cmFjZV9ncmFwaF9jYWxsZXIgKyAyLAorCQkJCSAgJm9mZnNldCwgc2l6ZW9mKG9mZnNldCkpOworfQorCitpbnQgZnRyYWNlX2Rpc2FibGVfZnRyYWNlX2dyYXBoX2NhbGxlcih2b2lkKQoreworCXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBvZmZzZXQgPSAweDAwMDI7CisKKwlyZXR1cm4gcHJvYmVfa2VybmVsX3dyaXRlKGZ0cmFjZV9ncmFwaF9jYWxsZXIgKyAyLAorCQkJCSAgJm9mZnNldCwgc2l6ZW9mKG9mZnNldCkpOworfQorCisjZW5kaWYgLyogQ09ORklHX0RZTkFNSUNfRlRSQUNFICovCiAjZW5kaWYgLyogQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9pcnEuYyBiL2FyY2gvczM5MC9rZXJuZWwvaXJxLmMKaW5kZXggMDI2YTM3YS4uZWE1MDk5YyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL3MzOTAva2VybmVsL2lycS5jCkBAIC0xLDcgKzEsNSBAQAogLyoKLSAqICBhcmNoL3MzOTAva2VybmVsL2lycS5jCi0gKgotICogICAgQ29weXJpZ2h0IElCTSBDb3JwLiAyMDA0LDIwMDcKKyAqICAgIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwNCwyMDEwCiAgKiAgICBBdXRob3Iocyk6IE1hcnRpbiBTY2h3aWRlZnNreSAoc2Nod2lkZWZza3lAZGUuaWJtLmNvbSksCiAgKgkJIFRob21hcyBTcGF0emllciAodHNwYXRAZGUuaWJtLmNvbSkKICAqCkBAIC0xNywxMiArMTUsNDIgQEAKICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvZmlsZS5oPgogCitzdHJ1Y3QgaXJxX2NsYXNzIHsKKwljaGFyICpuYW1lOworCWNoYXIgKmRlc2M7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGlycV9jbGFzcyBpbnRyY2xhc3NfbmFtZXNbXSA9IHsKKwl7Lm5hbWUgPSAiRVhUIiB9LAorCXsubmFtZSA9ICJJL08iIH0sCisJey5uYW1lID0gIkNMSyIsIC5kZXNjID0gIltFWFRdIENsb2NrIENvbXBhcmF0b3IiIH0sCisJey5uYW1lID0gIklQSSIsIC5kZXNjID0gIltFWFRdIFNpZ25hbCBQcm9jZXNzb3IiIH0sCisJey5uYW1lID0gIlRNUiIsIC5kZXNjID0gIltFWFRdIENQVSBUaW1lciIgfSwKKwl7Lm5hbWUgPSAiVEFMIiwgLmRlc2MgPSAiW0VYVF0gVGltaW5nIEFsZXJ0IiB9LAorCXsubmFtZSA9ICJQRkwiLCAuZGVzYyA9ICJbRVhUXSBQc2V1ZG8gUGFnZSBGYXVsdCIgfSwKKwl7Lm5hbWUgPSAiRFNEIiwgLmRlc2MgPSAiW0VYVF0gREFTRCBEaWFnIiB9LAorCXsubmFtZSA9ICJWUlQiLCAuZGVzYyA9ICJbRVhUXSBWaXJ0aW8iIH0sCisJey5uYW1lID0gIlNDUCIsIC5kZXNjID0gIltFWFRdIFNlcnZpY2UgQ2FsbCIgfSwKKwl7Lm5hbWUgPSAiSVVDIiwgLmRlc2MgPSAiW0VYVF0gSVVDViIgfSwKKwl7Lm5hbWUgPSAiUUFJIiwgLmRlc2MgPSAiW0kvT10gUURJTyBBZGFwdGVyIEludGVycnVwdCIgfSwKKwl7Lm5hbWUgPSAiUURJIiwgLmRlc2MgPSAiW0kvT10gUURJTyBJbnRlcnJ1cHQiIH0sCisJey5uYW1lID0gIkRBUyIsIC5kZXNjID0gIltJL09dIERBU0QiIH0sCisJey5uYW1lID0gIkMxNSIsIC5kZXNjID0gIltJL09dIDMyMTUiIH0sCisJey5uYW1lID0gIkM3MCIsIC5kZXNjID0gIltJL09dIDMyNzAiIH0sCisJey5uYW1lID0gIlRBUCIsIC5kZXNjID0gIltJL09dIFRhcGUiIH0sCisJey5uYW1lID0gIlZNUiIsIC5kZXNjID0gIltJL09dIFVuaXQgUmVjb3JkIERldmljZXMiIH0sCisJey5uYW1lID0gIkxDUyIsIC5kZXNjID0gIltJL09dIExDUyIgfSwKKwl7Lm5hbWUgPSAiQ0xXIiwgLmRlc2MgPSAiW0kvT10gQ0xBVyIgfSwKKwl7Lm5hbWUgPSAiQ1RDIiwgLmRlc2MgPSAiW0kvT10gQ1RDIiB9LAorCXsubmFtZSA9ICJBUEIiLCAuZGVzYyA9ICJbSS9PXSBBUCBCdXMiIH0sCisJey5uYW1lID0gIk5NSSIsIC5kZXNjID0gIltOTUldIE1hY2hpbmUgQ2hlY2siIH0sCit9OworCiAvKgogICogc2hvd19pbnRlcnJ1cHRzIGlzIG5lZWRlZCBieSAvcHJvYy9pbnRlcnJ1cHRzLgogICovCiBpbnQgc2hvd19pbnRlcnJ1cHRzKHN0cnVjdCBzZXFfZmlsZSAqcCwgdm9pZCAqdikKIHsKLQlzdGF0aWMgY29uc3QgY2hhciAqaW50cmNsYXNzX25hbWVzW10gPSB7ICJFWFQiLCAiSS9PIiwgfTsKIAlpbnQgaSA9ICoobG9mZl90ICopIHYsIGo7CiAKIAlnZXRfb25saW5lX2NwdXMoKTsKQEAgLTM0LDE1ICs2MiwxNiBAQAogCX0KIAogCWlmIChpIDwgTlJfSVJRUykgewotCQlzZXFfcHJpbnRmKHAsICIlczogIiwgaW50cmNsYXNzX25hbWVzW2ldKTsKKwkJc2VxX3ByaW50ZihwLCAiJXM6ICIsIGludHJjbGFzc19uYW1lc1tpXS5uYW1lKTsKICNpZm5kZWYgQ09ORklHX1NNUAogCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXMoaSkpOwogI2Vsc2UKIAkJZm9yX2VhY2hfb25saW5lX2NwdShqKQogCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9jcHUoaikuaXJxc1tpXSk7CiAjZW5kaWYKKwkJaWYgKGludHJjbGFzc19uYW1lc1tpXS5kZXNjKQorCQkJc2VxX3ByaW50ZihwLCAiICAlcyIsIGludHJjbGFzc19uYW1lc1tpXS5kZXNjKTsKICAgICAgICAgICAgICAgICBzZXFfcHV0YyhwLCAnXG4nKTsKLQogICAgICAgICB9CiAJcHV0X29ubGluZV9jcHVzKCk7CiAgICAgICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9rcHJvYmVzLmMgYi9hcmNoL3MzOTAva2VybmVsL2twcm9iZXMuYwppbmRleCAyNTY0NzkzLi4xZDA1ZDY2IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2twcm9iZXMuYworKysgYi9hcmNoL3MzOTAva2VybmVsL2twcm9iZXMuYwpAQCAtMzIsMzQgKzMyLDE0IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KIAotREVGSU5FX1BFUl9DUFUoc3RydWN0IGtwcm9iZSAqLCBjdXJyZW50X2twcm9iZSkgPSBOVUxMOworREVGSU5FX1BFUl9DUFUoc3RydWN0IGtwcm9iZSAqLCBjdXJyZW50X2twcm9iZSk7CiBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qga3Byb2JlX2N0bGJsaywga3Byb2JlX2N0bGJsayk7CiAKLXN0cnVjdCBrcmV0cHJvYmVfYmxhY2twb2ludCBrcmV0cHJvYmVfYmxhY2tsaXN0W10gPSB7e05VTEwsIE5VTEx9fTsKK3N0cnVjdCBrcmV0cHJvYmVfYmxhY2twb2ludCBrcmV0cHJvYmVfYmxhY2tsaXN0W10gPSB7IH07CiAKLWludCBfX2twcm9iZXMgYXJjaF9wcmVwYXJlX2twcm9iZShzdHJ1Y3Qga3Byb2JlICpwKQorc3RhdGljIGludCBfX2twcm9iZXMgaXNfcHJvaGliaXRlZF9vcGNvZGUoa3Byb2JlX29wY29kZV90ICppbnNuKQogewotCS8qIE1ha2Ugc3VyZSB0aGUgcHJvYmUgaXNuJ3QgZ29pbmcgb24gYSBkaWZmaWN1bHQgaW5zdHJ1Y3Rpb24gKi8KLQlpZiAoaXNfcHJvaGliaXRlZF9vcGNvZGUoKGtwcm9iZV9vcGNvZGVfdCAqKSBwLT5hZGRyKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoKHVuc2lnbmVkIGxvbmcpcC0+YWRkciAmIDB4MDEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JLyogVXNlIHRoZSBnZXRfaW5zbl9zbG90KCkgZmFjaWxpdHkgZm9yIGNvcnJlY3RuZXNzICovCi0JaWYgKCEocC0+YWluc24uaW5zbiA9IGdldF9pbnNuX3Nsb3QoKSkpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JbWVtY3B5KHAtPmFpbnNuLmluc24sIHAtPmFkZHIsIE1BWF9JTlNOX1NJWkUgKiBzaXplb2Yoa3Byb2JlX29wY29kZV90KSk7Ci0KLQlnZXRfaW5zdHJ1Y3Rpb25fdHlwZSgmcC0+YWluc24pOwotCXAtPm9wY29kZSA9ICpwLT5hZGRyOwotCXJldHVybiAwOwotfQotCi1pbnQgX19rcHJvYmVzIGlzX3Byb2hpYml0ZWRfb3Bjb2RlKGtwcm9iZV9vcGNvZGVfdCAqaW5zdHJ1Y3Rpb24pCi17Ci0Jc3dpdGNoICgqKF9fdTggKikgaW5zdHJ1Y3Rpb24pIHsKKwlzd2l0Y2ggKGluc25bMF0gPj4gOCkgewogCWNhc2UgMHgwYzoJLyogYmFzc20gKi8KIAljYXNlIDB4MGI6CS8qIGJzbQkgKi8KIAljYXNlIDB4ODM6CS8qIGRpYWcgICovCkBAIC02OCw3ICs0OCw3IEBACiAJY2FzZSAweGFkOgkvKiBzdG9zbSAqLwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0Jc3dpdGNoICgqKF9fdTE2ICopIGluc3RydWN0aW9uKSB7CisJc3dpdGNoIChpbnNuWzBdKSB7CiAJY2FzZSAweDAxMDE6CS8qIHByCSAqLwogCWNhc2UgMHhiMjVhOgkvKiBic2EJICovCiAJY2FzZSAweGIyNDA6CS8qIGJha3IgICovCkBAIC04MSw5MyArNjEsOTIgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBfX2twcm9iZXMgZ2V0X2luc3RydWN0aW9uX3R5cGUoc3RydWN0IGFyY2hfc3BlY2lmaWNfaW5zbiAqYWluc24pCitzdGF0aWMgaW50IF9fa3Byb2JlcyBnZXRfZml4dXBfdHlwZShrcHJvYmVfb3Bjb2RlX3QgKmluc24pCiB7CiAJLyogZGVmYXVsdCBmaXh1cCBtZXRob2QgKi8KLQlhaW5zbi0+Zml4dXAgPSBGSVhVUF9QU1dfTk9STUFMOworCWludCBmaXh1cCA9IEZJWFVQX1BTV19OT1JNQUw7CiAKLQkvKiBzYXZlIHIxIG9wZXJhbmQgKi8KLQlhaW5zbi0+cmVnID0gKCphaW5zbi0+aW5zbiAmIDB4ZjApID4+IDQ7Ci0KLQkvKiBzYXZlIHRoZSBpbnN0cnVjdGlvbiBsZW5ndGggKHBvcCA1LTUpIGluIGJ5dGVzICovCi0Jc3dpdGNoICgqKF9fdTggKikgKGFpbnNuLT5pbnNuKSA+PiA2KSB7Ci0JY2FzZSAwOgotCQlhaW5zbi0+aWxlbiA9IDI7Ci0JCWJyZWFrOwotCWNhc2UgMToKLQljYXNlIDI6Ci0JCWFpbnNuLT5pbGVuID0gNDsKLQkJYnJlYWs7Ci0JY2FzZSAzOgotCQlhaW5zbi0+aWxlbiA9IDY7Ci0JCWJyZWFrOwotCX0KLQotCXN3aXRjaCAoKihfX3U4ICopIGFpbnNuLT5pbnNuKSB7CisJc3dpdGNoIChpbnNuWzBdID4+IDgpIHsKIAljYXNlIDB4MDU6CS8qIGJhbHIJKi8KIAljYXNlIDB4MGQ6CS8qIGJhc3IgKi8KLQkJYWluc24tPmZpeHVwID0gRklYVVBfUkVUVVJOX1JFR0lTVEVSOworCQlmaXh1cCA9IEZJWFVQX1JFVFVSTl9SRUdJU1RFUjsKIAkJLyogaWYgcjIgPSAwLCBubyBicmFuY2ggd2lsbCBiZSB0YWtlbiAqLwotCQlpZiAoKCphaW5zbi0+aW5zbiAmIDB4MGYpID09IDApCi0JCQlhaW5zbi0+Zml4dXAgfD0gRklYVVBfQlJBTkNIX05PVF9UQUtFTjsKKwkJaWYgKChpbnNuWzBdICYgMHgwZikgPT0gMCkKKwkJCWZpeHVwIHw9IEZJWFVQX0JSQU5DSF9OT1RfVEFLRU47CiAJCWJyZWFrOwogCWNhc2UgMHgwNjoJLyogYmN0cgkqLwogCWNhc2UgMHgwNzoJLyogYmNyCSovCi0JCWFpbnNuLT5maXh1cCA9IEZJWFVQX0JSQU5DSF9OT1RfVEFLRU47CisJCWZpeHVwID0gRklYVVBfQlJBTkNIX05PVF9UQUtFTjsKIAkJYnJlYWs7CiAJY2FzZSAweDQ1OgkvKiBiYWwJKi8KIAljYXNlIDB4NGQ6CS8qIGJhcwkqLwotCQlhaW5zbi0+Zml4dXAgPSBGSVhVUF9SRVRVUk5fUkVHSVNURVI7CisJCWZpeHVwID0gRklYVVBfUkVUVVJOX1JFR0lTVEVSOwogCQlicmVhazsKIAljYXNlIDB4NDc6CS8qIGJjCSovCiAJY2FzZSAweDQ2OgkvKiBiY3QJKi8KIAljYXNlIDB4ODY6CS8qIGJ4aAkqLwogCWNhc2UgMHg4NzoJLyogYnhsZQkqLwotCQlhaW5zbi0+Zml4dXAgPSBGSVhVUF9CUkFOQ0hfTk9UX1RBS0VOOworCQlmaXh1cCA9IEZJWFVQX0JSQU5DSF9OT1RfVEFLRU47CiAJCWJyZWFrOwogCWNhc2UgMHg4MjoJLyogbHBzdwkqLwotCQlhaW5zbi0+Zml4dXAgPSBGSVhVUF9OT1RfUkVRVUlSRUQ7CisJCWZpeHVwID0gRklYVVBfTk9UX1JFUVVJUkVEOwogCQlicmVhazsKIAljYXNlIDB4YjI6CS8qIGxwc3dlICovCi0JCWlmICgqKCgoX191OCAqKSBhaW5zbi0+aW5zbikgKyAxKSA9PSAweGIyKSB7Ci0JCQlhaW5zbi0+Zml4dXAgPSBGSVhVUF9OT1RfUkVRVUlSRUQ7Ci0JCX0KKwkJaWYgKChpbnNuWzBdICYgMHhmZikgPT0gMHhiMikKKwkJCWZpeHVwID0gRklYVVBfTk9UX1JFUVVJUkVEOwogCQlicmVhazsKIAljYXNlIDB4YTc6CS8qIGJyYXMJKi8KLQkJaWYgKCgqYWluc24tPmluc24gJiAweDBmKSA9PSAweDA1KSB7Ci0JCQlhaW5zbi0+Zml4dXAgfD0gRklYVVBfUkVUVVJOX1JFR0lTVEVSOwotCQl9CisJCWlmICgoaW5zblswXSAmIDB4MGYpID09IDB4MDUpCisJCQlmaXh1cCB8PSBGSVhVUF9SRVRVUk5fUkVHSVNURVI7CiAJCWJyZWFrOwogCWNhc2UgMHhjMDoKLQkJaWYgKCgqYWluc24tPmluc24gJiAweDBmKSA9PSAweDAwICAvKiBsYXJsICAqLwotCQkJfHwgKCphaW5zbi0+aW5zbiAmIDB4MGYpID09IDB4MDUpIC8qIGJyYXNsICovCi0JCWFpbnNuLT5maXh1cCB8PSBGSVhVUF9SRVRVUk5fUkVHSVNURVI7CisJCWlmICgoaW5zblswXSAmIDB4MGYpID09IDB4MDAgfHwJLyogbGFybCAgKi8KKwkJICAgIChpbnNuWzBdICYgMHgwZikgPT0gMHgwNSkJLyogYnJhc2wgKi8KKwkJZml4dXAgfD0gRklYVVBfUkVUVVJOX1JFR0lTVEVSOwogCQlicmVhazsKIAljYXNlIDB4ZWI6Ci0JCWlmICgqKCgoX191OCAqKSBhaW5zbi0+aW5zbikgKyA1ICkgPT0gMHg0NCB8fAkvKiBieGhnICAqLwotCQkJKigoKF9fdTggKikgYWluc24tPmluc24pICsgNSkgPT0gMHg0NSkgey8qIGJ4bGVnICovCi0JCQlhaW5zbi0+Zml4dXAgPSBGSVhVUF9CUkFOQ0hfTk9UX1RBS0VOOwotCQl9CisJCWlmICgoaW5zblsyXSAmIDB4ZmYpID09IDB4NDQgfHwJLyogYnhoZyAgKi8KKwkJICAgIChpbnNuWzJdICYgMHhmZikgPT0gMHg0NSkJLyogYnhsZWcgKi8KKwkJCWZpeHVwID0gRklYVVBfQlJBTkNIX05PVF9UQUtFTjsKIAkJYnJlYWs7CiAJY2FzZSAweGUzOgkvKiBiY3RnCSovCi0JCWlmICgqKCgoX191OCAqKSBhaW5zbi0+aW5zbikgKyA1KSA9PSAweDQ2KSB7Ci0JCQlhaW5zbi0+Zml4dXAgPSBGSVhVUF9CUkFOQ0hfTk9UX1RBS0VOOwotCQl9CisJCWlmICgoaW5zblsyXSAmIDB4ZmYpID09IDB4NDYpCisJCQlmaXh1cCA9IEZJWFVQX0JSQU5DSF9OT1RfVEFLRU47CiAJCWJyZWFrOwogCX0KKwlyZXR1cm4gZml4dXA7CiB9CiAKK2ludCBfX2twcm9iZXMgYXJjaF9wcmVwYXJlX2twcm9iZShzdHJ1Y3Qga3Byb2JlICpwKQoreworCWlmICgodW5zaWduZWQgbG9uZykgcC0+YWRkciAmIDB4MDEpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogTWFrZSBzdXJlIHRoZSBwcm9iZSBpc24ndCBnb2luZyBvbiBhIGRpZmZpY3VsdCBpbnN0cnVjdGlvbiAqLworCWlmIChpc19wcm9oaWJpdGVkX29wY29kZShwLT5hZGRyKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwLT5vcGNvZGUgPSAqcC0+YWRkcjsKKwltZW1jcHkocC0+YWluc24uaW5zbiwgcC0+YWRkciwgKChwLT5vcGNvZGUgPj4gMTQpICsgMykgJiAtMik7CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IGluc19yZXBsYWNlX2FyZ3MgeworCWtwcm9iZV9vcGNvZGVfdCAqcHRyOworCWtwcm9iZV9vcGNvZGVfdCBvcGNvZGU7Cit9OworCiBzdGF0aWMgaW50IF9fa3Byb2JlcyBzd2FwX2luc3RydWN0aW9uKHZvaWQgKmFyZWYpCiB7CiAJc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYiA9IGdldF9rcHJvYmVfY3RsYmxrKCk7CiAJdW5zaWduZWQgbG9uZyBzdGF0dXMgPSBrY2ItPmtwcm9iZV9zdGF0dXM7CiAJc3RydWN0IGluc19yZXBsYWNlX2FyZ3MgKmFyZ3MgPSBhcmVmOwotCWludCByYzsKIAogCWtjYi0+a3Byb2JlX3N0YXR1cyA9IEtQUk9CRV9TV0FQX0lOU1Q7Ci0JcmMgPSBwcm9iZV9rZXJuZWxfd3JpdGUoYXJncy0+cHRyLCAmYXJncy0+bmV3LCBzaXplb2YoYXJncy0+bmV3KSk7CisJcHJvYmVfa2VybmVsX3dyaXRlKGFyZ3MtPnB0ciwgJmFyZ3MtPm9wY29kZSwgc2l6ZW9mKGFyZ3MtPm9wY29kZSkpOwogCWtjYi0+a3Byb2JlX3N0YXR1cyA9IHN0YXR1czsKLQlyZXR1cm4gcmM7CisJcmV0dXJuIDA7CiB9CiAKIHZvaWQgX19rcHJvYmVzIGFyY2hfYXJtX2twcm9iZShzdHJ1Y3Qga3Byb2JlICpwKQpAQCAtMTc1LDggKzE1NCw3IEBACiAJc3RydWN0IGluc19yZXBsYWNlX2FyZ3MgYXJnczsKIAogCWFyZ3MucHRyID0gcC0+YWRkcjsKLQlhcmdzLm9sZCA9IHAtPm9wY29kZTsKLQlhcmdzLm5ldyA9IEJSRUFLUE9JTlRfSU5TVFJVQ1RJT047CisJYXJncy5vcGNvZGUgPSBCUkVBS1BPSU5UX0lOU1RSVUNUSU9OOwogCXN0b3BfbWFjaGluZShzd2FwX2luc3RydWN0aW9uLCAmYXJncywgTlVMTCk7CiB9CiAKQEAgLTE4NSw2NCArMTYzLDY5IEBACiAJc3RydWN0IGluc19yZXBsYWNlX2FyZ3MgYXJnczsKIAogCWFyZ3MucHRyID0gcC0+YWRkcjsKLQlhcmdzLm9sZCA9IEJSRUFLUE9JTlRfSU5TVFJVQ1RJT047Ci0JYXJncy5uZXcgPSBwLT5vcGNvZGU7CisJYXJncy5vcGNvZGUgPSBwLT5vcGNvZGU7CiAJc3RvcF9tYWNoaW5lKHN3YXBfaW5zdHJ1Y3Rpb24sICZhcmdzLCBOVUxMKTsKIH0KIAogdm9pZCBfX2twcm9iZXMgYXJjaF9yZW1vdmVfa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnApCiB7Ci0JaWYgKHAtPmFpbnNuLmluc24pIHsKLQkJZnJlZV9pbnNuX3Nsb3QocC0+YWluc24uaW5zbiwgMCk7Ci0JCXAtPmFpbnNuLmluc24gPSBOVUxMOwotCX0KIH0KIAotc3RhdGljIHZvaWQgX19rcHJvYmVzIHByZXBhcmVfc2luZ2xlc3RlcChzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyB2b2lkIF9fa3Byb2JlcyBlbmFibGVfc2luZ2xlc3RlcChzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiLAorCQkJCQlzdHJ1Y3QgcHRfcmVncyAqcmVncywKKwkJCQkJdW5zaWduZWQgbG9uZyBpcCkKIHsKLQlwZXJfY3JfYml0cyBrcHJvYmVfcGVyX3JlZ3NbMV07CisJc3RydWN0IHBlcl9yZWdzIHBlcl9rcHJvYmU7CiAKLQltZW1zZXQoa3Byb2JlX3Blcl9yZWdzLCAwLCBzaXplb2YocGVyX2NyX2JpdHMpKTsKLQlyZWdzLT5wc3cuYWRkciA9ICh1bnNpZ25lZCBsb25nKXAtPmFpbnNuLmluc24gfCBQU1dfQUREUl9BTU9ERTsKKwkvKiBTZXQgdXAgdGhlIFBFUiBjb250cm9sIHJlZ2lzdGVycyAlY3I5LSVjcjExICovCisJcGVyX2twcm9iZS5jb250cm9sID0gUEVSX0VWRU5UX0lGRVRDSDsKKwlwZXJfa3Byb2JlLnN0YXJ0ID0gaXA7CisJcGVyX2twcm9iZS5lbmQgPSBpcDsKIAotCS8qIFNldCB1cCB0aGUgcGVyIGNvbnRyb2wgcmVnIGluZm8sIHdpbGwgcGFzcyB0byBsY3RsICovCi0Ja3Byb2JlX3Blcl9yZWdzWzBdLmVtX2luc3RydWN0aW9uX2ZldGNoID0gMTsKLQlrcHJvYmVfcGVyX3JlZ3NbMF0uc3RhcnRpbmdfYWRkciA9ICh1bnNpZ25lZCBsb25nKXAtPmFpbnNuLmluc247Ci0Ja3Byb2JlX3Blcl9yZWdzWzBdLmVuZGluZ19hZGRyID0gKHVuc2lnbmVkIGxvbmcpcC0+YWluc24uaW5zbiArIDE7CisJLyogU2F2ZSBjb250cm9sIHJlZ3MgYW5kIHBzdyBtYXNrICovCisJX19jdGxfc3RvcmUoa2NiLT5rcHJvYmVfc2F2ZWRfY3RsLCA5LCAxMSk7CisJa2NiLT5rcHJvYmVfc2F2ZWRfaW1hc2sgPSByZWdzLT5wc3cubWFzayAmCisJCShQU1dfTUFTS19QRVIgfCBQU1dfTUFTS19JTyB8IFBTV19NQVNLX0VYVCk7CiAKLQkvKiBTZXQgdGhlIFBFUiBjb250cm9sIHJlZ3MsIHR1cm5zIG9uIHNpbmdsZSBzdGVwIGZvciB0aGlzIGFkZHJlc3MgKi8KLQlfX2N0bF9sb2FkKGtwcm9iZV9wZXJfcmVncywgOSwgMTEpOworCS8qIFNldCBQRVIgY29udHJvbCByZWdzLCB0dXJucyBvbiBzaW5nbGUgc3RlcCBmb3IgdGhlIGdpdmVuIGFkZHJlc3MgKi8KKwlfX2N0bF9sb2FkKHBlcl9rcHJvYmUsIDksIDExKTsKIAlyZWdzLT5wc3cubWFzayB8PSBQU1dfTUFTS19QRVI7CiAJcmVncy0+cHN3Lm1hc2sgJj0gfihQU1dfTUFTS19JTyB8IFBTV19NQVNLX0VYVCk7CisJcmVncy0+cHN3LmFkZHIgPSBpcCB8IFBTV19BRERSX0FNT0RFOwogfQogCi1zdGF0aWMgdm9pZCBfX2twcm9iZXMgc2F2ZV9wcmV2aW91c19rcHJvYmUoc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYikKK3N0YXRpYyB2b2lkIF9fa3Byb2JlcyBkaXNhYmxlX3NpbmdsZXN0ZXAoc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYiwKKwkJCQkJIHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkJCQkgdW5zaWduZWQgbG9uZyBpcCkKIHsKLQlrY2ItPnByZXZfa3Byb2JlLmtwID0ga3Byb2JlX3J1bm5pbmcoKTsKLQlrY2ItPnByZXZfa3Byb2JlLnN0YXR1cyA9IGtjYi0+a3Byb2JlX3N0YXR1czsKLQlrY2ItPnByZXZfa3Byb2JlLmtwcm9iZV9zYXZlZF9pbWFzayA9IGtjYi0+a3Byb2JlX3NhdmVkX2ltYXNrOwotCW1lbWNweShrY2ItPnByZXZfa3Byb2JlLmtwcm9iZV9zYXZlZF9jdGwsIGtjYi0+a3Byb2JlX3NhdmVkX2N0bCwKLQkJCQkJc2l6ZW9mKGtjYi0+a3Byb2JlX3NhdmVkX2N0bCkpOworCS8qIFJlc3RvcmUgY29udHJvbCByZWdzIGFuZCBwc3cgbWFzaywgc2V0IG5ldyBwc3cgYWRkcmVzcyAqLworCV9fY3RsX2xvYWQoa2NiLT5rcHJvYmVfc2F2ZWRfY3RsLCA5LCAxMSk7CisJcmVncy0+cHN3Lm1hc2sgJj0gflBTV19NQVNLX1BFUjsKKwlyZWdzLT5wc3cubWFzayB8PSBrY2ItPmtwcm9iZV9zYXZlZF9pbWFzazsKKwlyZWdzLT5wc3cuYWRkciA9IGlwIHwgUFNXX0FERFJfQU1PREU7CiB9CiAKLXN0YXRpYyB2b2lkIF9fa3Byb2JlcyByZXN0b3JlX3ByZXZpb3VzX2twcm9iZShzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiKQorLyoKKyAqIEFjdGl2YXRlIGEga3Byb2JlIGJ5IHN0b3JpbmcgaXRzIHBvaW50ZXIgdG8gY3VycmVudF9rcHJvYmUuIFRoZQorICogcHJldmlvdXMga3Byb2JlIGlzIHN0b3JlZCBpbiBrY2ItPnByZXZfa3Byb2JlLiBBIHN0YWNrIG9mIHVwIHRvCisgKiB0d28ga3Byb2JlcyBjYW4gYmUgYWN0aXZlLCBzZWUgS1BST0JFX1JFRU5URVIuCisgKi8KK3N0YXRpYyB2b2lkIF9fa3Byb2JlcyBwdXNoX2twcm9iZShzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiLCBzdHJ1Y3Qga3Byb2JlICpwKQoreworCWtjYi0+cHJldl9rcHJvYmUua3AgPSBfX2dldF9jcHVfdmFyKGN1cnJlbnRfa3Byb2JlKTsKKwlrY2ItPnByZXZfa3Byb2JlLnN0YXR1cyA9IGtjYi0+a3Byb2JlX3N0YXR1czsKKwlfX2dldF9jcHVfdmFyKGN1cnJlbnRfa3Byb2JlKSA9IHA7Cit9CisKKy8qCisgKiBEZWFjdGl2YXRlIGEga3Byb2JlIGJ5IGJhY2tpbmcgdXAgdG8gdGhlIHByZXZpb3VzIHN0YXRlLiBJZiB0aGUKKyAqIGN1cnJlbnQgc3RhdGUgaXMgS1BST0JFX1JFRU5URVIgcHJldl9rcHJvYmUua3Agd2lsbCBiZSBub24tTlVMTCwKKyAqIGZvciBhbnkgb3RoZXIgc3RhdGUgcHJldl9rcHJvYmUua3Agd2lsbCBiZSBOVUxMLgorICovCitzdGF0aWMgdm9pZCBfX2twcm9iZXMgcG9wX2twcm9iZShzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiKQogewogCV9fZ2V0X2NwdV92YXIoY3VycmVudF9rcHJvYmUpID0ga2NiLT5wcmV2X2twcm9iZS5rcDsKIAlrY2ItPmtwcm9iZV9zdGF0dXMgPSBrY2ItPnByZXZfa3Byb2JlLnN0YXR1czsKLQlrY2ItPmtwcm9iZV9zYXZlZF9pbWFzayA9IGtjYi0+cHJldl9rcHJvYmUua3Byb2JlX3NhdmVkX2ltYXNrOwotCW1lbWNweShrY2ItPmtwcm9iZV9zYXZlZF9jdGwsIGtjYi0+cHJldl9rcHJvYmUua3Byb2JlX3NhdmVkX2N0bCwKLQkJCQkJc2l6ZW9mKGtjYi0+a3Byb2JlX3NhdmVkX2N0bCkpOwotfQotCi1zdGF0aWMgdm9pZCBfX2twcm9iZXMgc2V0X2N1cnJlbnRfa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzLAotCQkJCQkJc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYikKLXsKLQlfX2dldF9jcHVfdmFyKGN1cnJlbnRfa3Byb2JlKSA9IHA7Ci0JLyogU2F2ZSB0aGUgaW50ZXJydXB0IGFuZCBwZXIgZmxhZ3MgKi8KLQlrY2ItPmtwcm9iZV9zYXZlZF9pbWFzayA9IHJlZ3MtPnBzdy5tYXNrICYKLQkJKFBTV19NQVNLX1BFUiB8IFBTV19NQVNLX0lPIHwgUFNXX01BU0tfRVhUKTsKLQkvKiBTYXZlIHRoZSBjb250cm9sIHJlZ3MgdGhhdCBnb3Zlcm4gUEVSICovCi0JX19jdGxfc3RvcmUoa2NiLT5rcHJvYmVfc2F2ZWRfY3RsLCA5LCAxMSk7CiB9CiAKIHZvaWQgX19rcHJvYmVzIGFyY2hfcHJlcGFyZV9rcmV0cHJvYmUoc3RydWN0IGtyZXRwcm9iZV9pbnN0YW5jZSAqcmksCkBAIC0yNTEsNzkgKzIzNCwxMDQgQEAKIAlyaS0+cmV0X2FkZHIgPSAoa3Byb2JlX29wY29kZV90ICopIHJlZ3MtPmdwcnNbMTRdOwogCiAJLyogUmVwbGFjZSB0aGUgcmV0dXJuIGFkZHIgd2l0aCB0cmFtcG9saW5lIGFkZHIgKi8KLQlyZWdzLT5ncHJzWzE0XSA9ICh1bnNpZ25lZCBsb25nKSZrcmV0cHJvYmVfdHJhbXBvbGluZTsKKwlyZWdzLT5ncHJzWzE0XSA9ICh1bnNpZ25lZCBsb25nKSAma3JldHByb2JlX3RyYW1wb2xpbmU7Cit9CisKK3N0YXRpYyB2b2lkIF9fa3Byb2JlcyBrcHJvYmVfcmVlbnRlcl9jaGVjayhzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiLAorCQkJCQkgICBzdHJ1Y3Qga3Byb2JlICpwKQoreworCXN3aXRjaCAoa2NiLT5rcHJvYmVfc3RhdHVzKSB7CisJY2FzZSBLUFJPQkVfSElUX1NTRE9ORToKKwljYXNlIEtQUk9CRV9ISVRfQUNUSVZFOgorCQlrcHJvYmVzX2luY19ubWlzc2VkX2NvdW50KHApOworCQlicmVhazsKKwljYXNlIEtQUk9CRV9ISVRfU1M6CisJY2FzZSBLUFJPQkVfUkVFTlRFUjoKKwlkZWZhdWx0OgorCQkvKgorCQkgKiBBIGtwcm9iZSBvbiB0aGUgY29kZSBwYXRoIHRvIHNpbmdsZSBzdGVwIGFuIGluc3RydWN0aW9uCisJCSAqIGlzIGEgQlVHLiBUaGUgY29kZSBwYXRoIHJlc2lkZXMgaW4gdGhlIC5rcHJvYmVzLnRleHQKKwkJICogc2VjdGlvbiBhbmQgaXMgZXhlY3V0ZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLgorCQkgKi8KKwkJcHJpbnRrKEtFUk5fRU1FUkcgIkludmFsaWQga3Byb2JlIGRldGVjdGVkIGF0ICVwLlxuIiwgcC0+YWRkcik7CisJCWR1bXBfa3Byb2JlKHApOworCQlCVUcoKTsKKwl9CiB9CiAKIHN0YXRpYyBpbnQgX19rcHJvYmVzIGtwcm9iZV9oYW5kbGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCXN0cnVjdCBrcHJvYmUgKnA7Ci0JaW50IHJldCA9IDA7Ci0JdW5zaWduZWQgbG9uZyAqYWRkciA9ICh1bnNpZ25lZCBsb25nICopCi0JCSgocmVncy0+cHN3LmFkZHIgJiBQU1dfQUREUl9JTlNOKSAtIDIpOwogCXN0cnVjdCBrcHJvYmVfY3RsYmxrICprY2I7CisJc3RydWN0IGtwcm9iZSAqcDsKIAogCS8qCi0JICogV2UgZG9uJ3Qgd2FudCB0byBiZSBwcmVlbXB0ZWQgZm9yIHRoZSBlbnRpcmUKLQkgKiBkdXJhdGlvbiBvZiBrcHJvYmUgcHJvY2Vzc2luZworCSAqIFdlIHdhbnQgdG8gZGlzYWJsZSBwcmVlbXB0aW9uIGZvciB0aGUgZW50aXJlIGR1cmF0aW9uIG9mIGtwcm9iZQorCSAqIHByb2Nlc3NpbmcuIFRoYXQgaW5jbHVkZXMgdGhlIGNhbGxzIHRvIHRoZSBwcmUvcG9zdCBoYW5kbGVycworCSAqIGFuZCBzaW5nbGUgc3RlcHBpbmcgdGhlIGtwcm9iZSBpbnN0cnVjdGlvbi4KIAkgKi8KIAlwcmVlbXB0X2Rpc2FibGUoKTsKIAlrY2IgPSBnZXRfa3Byb2JlX2N0bGJsaygpOworCXAgPSBnZXRfa3Byb2JlKCh2b2lkICopKChyZWdzLT5wc3cuYWRkciAmIFBTV19BRERSX0lOU04pIC0gMikpOwogCi0JLyogQ2hlY2sgd2UncmUgbm90IGFjdHVhbGx5IHJlY3Vyc2luZyAqLwotCWlmIChrcHJvYmVfcnVubmluZygpKSB7Ci0JCXAgPSBnZXRfa3Byb2JlKGFkZHIpOwotCQlpZiAocCkgewotCQkJaWYgKGtjYi0+a3Byb2JlX3N0YXR1cyA9PSBLUFJPQkVfSElUX1NTICYmCi0JCQkgICAgKnAtPmFpbnNuLmluc24gPT0gQlJFQUtQT0lOVF9JTlNUUlVDVElPTikgewotCQkJCXJlZ3MtPnBzdy5tYXNrICY9IH5QU1dfTUFTS19QRVI7Ci0JCQkJcmVncy0+cHN3Lm1hc2sgfD0ga2NiLT5rcHJvYmVfc2F2ZWRfaW1hc2s7Ci0JCQkJZ290byBub19rcHJvYmU7Ci0JCQl9Ci0JCQkvKiBXZSBoYXZlIHJlZW50ZXJlZCB0aGUga3Byb2JlX2hhbmRsZXIoKSwgc2luY2UKLQkJCSAqIGFub3RoZXIgcHJvYmUgd2FzIGhpdCB3aGlsZSB3aXRoaW4gdGhlIGhhbmRsZXIuCi0JCQkgKiBXZSBoZXJlIHNhdmUgdGhlIG9yaWdpbmFsIGtwcm9iZXMgdmFyaWFibGVzIGFuZAotCQkJICoganVzdCBzaW5nbGUgc3RlcCBvbiB0aGUgaW5zdHJ1Y3Rpb24gb2YgdGhlIG5ldyBwcm9iZQotCQkJICogd2l0aG91dCBjYWxsaW5nIGFueSB1c2VyIGhhbmRsZXJzLgorCWlmIChwKSB7CisJCWlmIChrcHJvYmVfcnVubmluZygpKSB7CisJCQkvKgorCQkJICogV2UgaGF2ZSBoaXQgYSBrcHJvYmUgd2hpbGUgYW5vdGhlciBpcyBzdGlsbAorCQkJICogYWN0aXZlLiBUaGlzIGNhbiBoYXBwZW4gaW4gdGhlIHByZSBhbmQgcG9zdAorCQkJICogaGFuZGxlci4gU2luZ2xlIHN0ZXAgdGhlIGluc3RydWN0aW9uIG9mIHRoZQorCQkJICogbmV3IHByb2JlIGJ1dCBkbyBub3QgY2FsbCBhbnkgaGFuZGxlciBmdW5jdGlvbgorCQkJICogb2YgdGhpcyBzZWNvbmRhcnkga3Byb2JlLgorCQkJICogcHVzaF9rcHJvYmUgYW5kIHBvcF9rcHJvYmUgc2F2ZXMgYW5kIHJlc3RvcmVzCisJCQkgKiB0aGUgY3VycmVudGx5IGFjdGl2ZSBrcHJvYmUuCiAJCQkgKi8KLQkJCXNhdmVfcHJldmlvdXNfa3Byb2JlKGtjYik7Ci0JCQlzZXRfY3VycmVudF9rcHJvYmUocCwgcmVncywga2NiKTsKLQkJCWtwcm9iZXNfaW5jX25taXNzZWRfY291bnQocCk7Ci0JCQlwcmVwYXJlX3NpbmdsZXN0ZXAocCwgcmVncyk7CisJCQlrcHJvYmVfcmVlbnRlcl9jaGVjayhrY2IsIHApOworCQkJcHVzaF9rcHJvYmUoa2NiLCBwKTsKIAkJCWtjYi0+a3Byb2JlX3N0YXR1cyA9IEtQUk9CRV9SRUVOVEVSOwotCQkJcmV0dXJuIDE7CiAJCX0gZWxzZSB7Ci0JCQlwID0gX19nZXRfY3B1X3ZhcihjdXJyZW50X2twcm9iZSk7Ci0JCQlpZiAocC0+YnJlYWtfaGFuZGxlciAmJiBwLT5icmVha19oYW5kbGVyKHAsIHJlZ3MpKSB7Ci0JCQkJZ290byBzc19wcm9iZTsKLQkJCX0KKwkJCS8qCisJCQkgKiBJZiB3ZSBoYXZlIG5vIHByZS1oYW5kbGVyIG9yIGl0IHJldHVybmVkIDAsIHdlCisJCQkgKiBjb250aW51ZSB3aXRoIHNpbmdsZSBzdGVwcGluZy4gSWYgd2UgaGF2ZSBhCisJCQkgKiBwcmUtaGFuZGxlciBhbmQgaXQgcmV0dXJuZWQgbm9uLXplcm8sIGl0IHByZXBwZWQKKwkJCSAqIGZvciBjYWxsaW5nIHRoZSBicmVha19oYW5kbGVyIGJlbG93IG9uIHJlLWVudHJ5CisJCQkgKiBmb3IganByb2JlIHByb2Nlc3NpbmcsIHNvIGdldCBvdXQgZG9pbmcgbm90aGluZworCQkJICogbW9yZSBoZXJlLgorCQkJICovCisJCQlwdXNoX2twcm9iZShrY2IsIHApOworCQkJa2NiLT5rcHJvYmVfc3RhdHVzID0gS1BST0JFX0hJVF9BQ1RJVkU7CisJCQlpZiAocC0+cHJlX2hhbmRsZXIgJiYgcC0+cHJlX2hhbmRsZXIocCwgcmVncykpCisJCQkJcmV0dXJuIDE7CisJCQlrY2ItPmtwcm9iZV9zdGF0dXMgPSBLUFJPQkVfSElUX1NTOwogCQl9Ci0JCWdvdG8gbm9fa3Byb2JlOwotCX0KLQotCXAgPSBnZXRfa3Byb2JlKGFkZHIpOwotCWlmICghcCkKLQkJLyoKLQkJICogTm8ga3Byb2JlIGF0IHRoaXMgYWRkcmVzcy4gVGhlIGZhdWx0IGhhcyBub3QgYmVlbgotCQkgKiBjYXVzZWQgYnkgYSBrcHJvYmUgYnJlYWtwb2ludC4gVGhlIHJhY2Ugb2YgYnJlYWtwb2ludAotCQkgKiB2cy4ga3Byb2JlIHJlbW92ZSBkb2VzIG5vdCBleGlzdCBiZWNhdXNlIG9uIHMzOTAgd2UKLQkJICogdXNlIHN0b3BfbWFjaGluZSB0byBhcm0vZGlzYXJtIHRoZSBicmVha3BvaW50cy4KLQkJICovCi0JCWdvdG8gbm9fa3Byb2JlOwotCi0Ja2NiLT5rcHJvYmVfc3RhdHVzID0gS1BST0JFX0hJVF9BQ1RJVkU7Ci0Jc2V0X2N1cnJlbnRfa3Byb2JlKHAsIHJlZ3MsIGtjYik7Ci0JaWYgKHAtPnByZV9oYW5kbGVyICYmIHAtPnByZV9oYW5kbGVyKHAsIHJlZ3MpKQotCQkvKiBoYW5kbGVyIGhhcyBhbHJlYWR5IHNldCB0aGluZ3MgdXAsIHNvIHNraXAgc3Mgc2V0dXAgKi8KKwkJZW5hYmxlX3NpbmdsZXN0ZXAoa2NiLCByZWdzLCAodW5zaWduZWQgbG9uZykgcC0+YWluc24uaW5zbik7CiAJCXJldHVybiAxOwotCi1zc19wcm9iZToKLQlwcmVwYXJlX3NpbmdsZXN0ZXAocCwgcmVncyk7Ci0Ja2NiLT5rcHJvYmVfc3RhdHVzID0gS1BST0JFX0hJVF9TUzsKLQlyZXR1cm4gMTsKLQotbm9fa3Byb2JlOgorCX0gZWxzZSBpZiAoa3Byb2JlX3J1bm5pbmcoKSkgeworCQlwID0gX19nZXRfY3B1X3ZhcihjdXJyZW50X2twcm9iZSk7CisJCWlmIChwLT5icmVha19oYW5kbGVyICYmIHAtPmJyZWFrX2hhbmRsZXIocCwgcmVncykpIHsKKwkJCS8qCisJCQkgKiBDb250aW51YXRpb24gYWZ0ZXIgdGhlIGpwcm9iZSBjb21wbGV0ZWQgYW5kCisJCQkgKiBjYXVzZWQgdGhlIGpwcm9iZV9yZXR1cm4gdHJhcC4gVGhlIGpwcm9iZQorCQkJICogYnJlYWtfaGFuZGxlciAicmV0dXJucyIgdG8gdGhlIG9yaWdpbmFsCisJCQkgKiBmdW5jdGlvbiB0aGF0IHN0aWxsIGhhcyB0aGUga3Byb2JlIGJyZWFrcG9pbnQKKwkJCSAqIGluc3RhbGxlZC4gV2UgY29udGludWUgd2l0aCBzaW5nbGUgc3RlcHBpbmcuCisJCQkgKi8KKwkJCWtjYi0+a3Byb2JlX3N0YXR1cyA9IEtQUk9CRV9ISVRfU1M7CisJCQllbmFibGVfc2luZ2xlc3RlcChrY2IsIHJlZ3MsCisJCQkJCSAgKHVuc2lnbmVkIGxvbmcpIHAtPmFpbnNuLmluc24pOworCQkJcmV0dXJuIDE7CisJCX0gLyogZWxzZToKKwkJICAgKiBObyBrcHJvYmUgYXQgdGhpcyBhZGRyZXNzIGFuZCB0aGUgY3VycmVudCBrcHJvYmUKKwkJICAgKiBoYXMgbm8gYnJlYWsgaGFuZGxlciAobm8ganByb2JlISkuIFRoZSBrZXJuZWwganVzdAorCQkgICAqIGV4cGxvZGVkLCBsZXQgdGhlIHN0YW5kYXJkIHRyYXAgaGFuZGxlciBwaWNrIHVwIHRoZQorCQkgICAqIHBpZWNlcy4KKwkJICAgKi8KKwl9IC8qIGVsc2U6CisJICAgKiBObyBrcHJvYmUgYXQgdGhpcyBhZGRyZXNzIGFuZCBubyBhY3RpdmUga3Byb2JlLiBUaGUgdHJhcCBoYXMKKwkgICAqIG5vdCBiZWVuIGNhdXNlZCBieSBhIGtwcm9iZSBicmVha3BvaW50LiBUaGUgcmFjZSBvZiBicmVha3BvaW50CisJICAgKiB2cy4ga3Byb2JlIHJlbW92ZSBkb2VzIG5vdCBleGlzdCBiZWNhdXNlIG9uIHMzOTAgYXMgd2UgdXNlCisJICAgKiBzdG9wX21hY2hpbmUgdG8gYXJtL2Rpc2FybSB0aGUgYnJlYWtwb2ludHMuCisJICAgKi8KIAlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIH0KIAogLyoKQEAgLTM0NCwxMiArMzUyLDEyIEBACiBzdGF0aWMgaW50IF9fa3Byb2JlcyB0cmFtcG9saW5lX3Byb2JlX2hhbmRsZXIoc3RydWN0IGtwcm9iZSAqcCwKIAkJCQkJICAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0Jc3RydWN0IGtyZXRwcm9iZV9pbnN0YW5jZSAqcmkgPSBOVUxMOworCXN0cnVjdCBrcmV0cHJvYmVfaW5zdGFuY2UgKnJpOwogCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkLCBlbXB0eV9ycDsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSwgKnRtcDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzLCBvcmlnX3JldF9hZGRyZXNzID0gMDsKLQl1bnNpZ25lZCBsb25nIHRyYW1wb2xpbmVfYWRkcmVzcyA9ICh1bnNpZ25lZCBsb25nKSZrcmV0cHJvYmVfdHJhbXBvbGluZTsKLQlrcHJvYmVfb3Bjb2RlX3QgKmNvcnJlY3RfcmV0X2FkZHIgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIG9yaWdfcmV0X2FkZHJlc3M7CisJdW5zaWduZWQgbG9uZyB0cmFtcG9saW5lX2FkZHJlc3M7CisJa3Byb2JlX29wY29kZV90ICpjb3JyZWN0X3JldF9hZGRyOwogCiAJSU5JVF9ITElTVF9IRUFEKCZlbXB0eV9ycCk7CiAJa3JldHByb2JlX2hhc2hfbG9jayhjdXJyZW50LCAmaGVhZCwgJmZsYWdzKTsKQEAgLTM2NywxMiArMzc1LDE2IEBACiAJICoJIHJlYWwgcmV0dXJuIGFkZHJlc3MsIGFuZCBhbGwgdGhlIHJlc3Qgd2lsbCBwb2ludCB0bwogCSAqCSBrcmV0cHJvYmVfdHJhbXBvbGluZQogCSAqLworCXJpID0gTlVMTDsKKwlvcmlnX3JldF9hZGRyZXNzID0gMDsKKwljb3JyZWN0X3JldF9hZGRyID0gTlVMTDsKKwl0cmFtcG9saW5lX2FkZHJlc3MgPSAodW5zaWduZWQgbG9uZykgJmtyZXRwcm9iZV90cmFtcG9saW5lOwogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmksIG5vZGUsIHRtcCwgaGVhZCwgaGxpc3QpIHsKIAkJaWYgKHJpLT50YXNrICE9IGN1cnJlbnQpCiAJCQkvKiBhbm90aGVyIHRhc2sgaXMgc2hhcmluZyBvdXIgaGFzaCBidWNrZXQgKi8KIAkJCWNvbnRpbnVlOwogCi0JCW9yaWdfcmV0X2FkZHJlc3MgPSAodW5zaWduZWQgbG9uZylyaS0+cmV0X2FkZHI7CisJCW9yaWdfcmV0X2FkZHJlc3MgPSAodW5zaWduZWQgbG9uZykgcmktPnJldF9hZGRyOwogCiAJCWlmIChvcmlnX3JldF9hZGRyZXNzICE9IHRyYW1wb2xpbmVfYWRkcmVzcykKIAkJCS8qCkBAIC0zOTEsNyArNDAzLDcgQEAKIAkJCS8qIGFub3RoZXIgdGFzayBpcyBzaGFyaW5nIG91ciBoYXNoIGJ1Y2tldCAqLwogCQkJY29udGludWU7CiAKLQkJb3JpZ19yZXRfYWRkcmVzcyA9ICh1bnNpZ25lZCBsb25nKXJpLT5yZXRfYWRkcjsKKwkJb3JpZ19yZXRfYWRkcmVzcyA9ICh1bnNpZ25lZCBsb25nKSByaS0+cmV0X2FkZHI7CiAKIAkJaWYgKHJpLT5ycCAmJiByaS0+cnAtPmhhbmRsZXIpIHsKIAkJCXJpLT5yZXRfYWRkciA9IGNvcnJlY3RfcmV0X2FkZHI7CkBAIC00MDAsMTkgKzQxMiwxOCBAQAogCiAJCXJlY3ljbGVfcnBfaW5zdChyaSwgJmVtcHR5X3JwKTsKIAotCQlpZiAob3JpZ19yZXRfYWRkcmVzcyAhPSB0cmFtcG9saW5lX2FkZHJlc3MpIHsKKwkJaWYgKG9yaWdfcmV0X2FkZHJlc3MgIT0gdHJhbXBvbGluZV9hZGRyZXNzKQogCQkJLyoKIAkJCSAqIFRoaXMgaXMgdGhlIHJlYWwgcmV0dXJuIGFkZHJlc3MuIEFueSBvdGhlcgogCQkJICogaW5zdGFuY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHRhc2sgYXJlIGZvcgogCQkJICogb3RoZXIgY2FsbHMgZGVlcGVyIG9uIHRoZSBjYWxsIHN0YWNrCiAJCQkgKi8KIAkJCWJyZWFrOwotCQl9CiAJfQogCiAJcmVncy0+cHN3LmFkZHIgPSBvcmlnX3JldF9hZGRyZXNzIHwgUFNXX0FERFJfQU1PREU7CiAKLQlyZXNldF9jdXJyZW50X2twcm9iZSgpOworCXBvcF9rcHJvYmUoZ2V0X2twcm9iZV9jdGxibGsoKSk7CiAJa3JldHByb2JlX2hhc2hfdW5sb2NrKGN1cnJlbnQsICZmbGFncyk7CiAJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOwogCkBAIC00MzksNTUgKzQ1MCw0MiBAQAogc3RhdGljIHZvaWQgX19rcHJvYmVzIHJlc3VtZV9leGVjdXRpb24oc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYiA9IGdldF9rcHJvYmVfY3RsYmxrKCk7CisJdW5zaWduZWQgbG9uZyBpcCA9IHJlZ3MtPnBzdy5hZGRyICYgUFNXX0FERFJfSU5TTjsKKwlpbnQgZml4dXAgPSBnZXRfZml4dXBfdHlwZShwLT5haW5zbi5pbnNuKTsKIAotCXJlZ3MtPnBzdy5hZGRyICY9IFBTV19BRERSX0lOU047CisJaWYgKGZpeHVwICYgRklYVVBfUFNXX05PUk1BTCkKKwkJaXAgKz0gKHVuc2lnbmVkIGxvbmcpIHAtPmFkZHIgLSAodW5zaWduZWQgbG9uZykgcC0+YWluc24uaW5zbjsKIAotCWlmIChwLT5haW5zbi5maXh1cCAmIEZJWFVQX1BTV19OT1JNQUwpCi0JCXJlZ3MtPnBzdy5hZGRyID0gKHVuc2lnbmVkIGxvbmcpcC0+YWRkciArCi0JCQkJKCh1bnNpZ25lZCBsb25nKXJlZ3MtPnBzdy5hZGRyIC0KLQkJCQkgKHVuc2lnbmVkIGxvbmcpcC0+YWluc24uaW5zbik7CisJaWYgKGZpeHVwICYgRklYVVBfQlJBTkNIX05PVF9UQUtFTikgeworCQlpbnQgaWxlbiA9ICgocC0+YWluc24uaW5zblswXSA+PiAxNCkgKyAzKSAmIC0yOworCQlpZiAoaXAgLSAodW5zaWduZWQgbG9uZykgcC0+YWluc24uaW5zbiA9PSBpbGVuKQorCQkJaXAgPSAodW5zaWduZWQgbG9uZykgcC0+YWRkciArIGlsZW47CisJfQogCi0JaWYgKHAtPmFpbnNuLmZpeHVwICYgRklYVVBfQlJBTkNIX05PVF9UQUtFTikKLQkJaWYgKCh1bnNpZ25lZCBsb25nKXJlZ3MtPnBzdy5hZGRyIC0KLQkJICAgICh1bnNpZ25lZCBsb25nKXAtPmFpbnNuLmluc24gPT0gcC0+YWluc24uaWxlbikKLQkJCXJlZ3MtPnBzdy5hZGRyID0gKHVuc2lnbmVkIGxvbmcpcC0+YWRkciArIHAtPmFpbnNuLmlsZW47CisJaWYgKGZpeHVwICYgRklYVVBfUkVUVVJOX1JFR0lTVEVSKSB7CisJCWludCByZWcgPSAocC0+YWluc24uaW5zblswXSAmIDB4ZjApID4+IDQ7CisJCXJlZ3MtPmdwcnNbcmVnXSArPSAodW5zaWduZWQgbG9uZykgcC0+YWRkciAtCisJCQkJICAgKHVuc2lnbmVkIGxvbmcpIHAtPmFpbnNuLmluc247CisJfQogCi0JaWYgKHAtPmFpbnNuLmZpeHVwICYgRklYVVBfUkVUVVJOX1JFR0lTVEVSKQotCQlyZWdzLT5ncHJzW3AtPmFpbnNuLnJlZ10gPSAoKHVuc2lnbmVkIGxvbmcpcC0+YWRkciArCi0JCQkJCQkocmVncy0+Z3Byc1twLT5haW5zbi5yZWddIC0KLQkJCQkJCSh1bnNpZ25lZCBsb25nKXAtPmFpbnNuLmluc24pKQotCQkJCQkJfCBQU1dfQUREUl9BTU9ERTsKLQotCXJlZ3MtPnBzdy5hZGRyIHw9IFBTV19BRERSX0FNT0RFOwotCS8qIHR1cm4gb2ZmIFBFUiBtb2RlICovCi0JcmVncy0+cHN3Lm1hc2sgJj0gflBTV19NQVNLX1BFUjsKLQkvKiBSZXN0b3JlIHRoZSBvcmlnaW5hbCBwZXIgY29udHJvbCByZWdzICovCi0JX19jdGxfbG9hZChrY2ItPmtwcm9iZV9zYXZlZF9jdGwsIDksIDExKTsKLQlyZWdzLT5wc3cubWFzayB8PSBrY2ItPmtwcm9iZV9zYXZlZF9pbWFzazsKKwlkaXNhYmxlX3NpbmdsZXN0ZXAoa2NiLCByZWdzLCBpcCk7CiB9CiAKIHN0YXRpYyBpbnQgX19rcHJvYmVzIHBvc3Rfa3Byb2JlX2hhbmRsZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0Jc3RydWN0IGtwcm9iZSAqY3VyID0ga3Byb2JlX3J1bm5pbmcoKTsKIAlzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiID0gZ2V0X2twcm9iZV9jdGxibGsoKTsKKwlzdHJ1Y3Qga3Byb2JlICpwID0ga3Byb2JlX3J1bm5pbmcoKTsKIAotCWlmICghY3VyKQorCWlmICghcCkKIAkJcmV0dXJuIDA7CiAKLQlpZiAoKGtjYi0+a3Byb2JlX3N0YXR1cyAhPSBLUFJPQkVfUkVFTlRFUikgJiYgY3VyLT5wb3N0X2hhbmRsZXIpIHsKKwlpZiAoa2NiLT5rcHJvYmVfc3RhdHVzICE9IEtQUk9CRV9SRUVOVEVSICYmIHAtPnBvc3RfaGFuZGxlcikgewogCQlrY2ItPmtwcm9iZV9zdGF0dXMgPSBLUFJPQkVfSElUX1NTRE9ORTsKLQkJY3VyLT5wb3N0X2hhbmRsZXIoY3VyLCByZWdzLCAwKTsKKwkJcC0+cG9zdF9oYW5kbGVyKHAsIHJlZ3MsIDApOwogCX0KIAotCXJlc3VtZV9leGVjdXRpb24oY3VyLCByZWdzKTsKLQotCS8qUmVzdG9yZSBiYWNrIHRoZSBvcmlnaW5hbCBzYXZlZCBrcHJvYmVzIHZhcmlhYmxlcyBhbmQgY29udGludWUuICovCi0JaWYgKGtjYi0+a3Byb2JlX3N0YXR1cyA9PSBLUFJPQkVfUkVFTlRFUikgewotCQlyZXN0b3JlX3ByZXZpb3VzX2twcm9iZShrY2IpOwotCQlnb3RvIG91dDsKLQl9Ci0JcmVzZXRfY3VycmVudF9rcHJvYmUoKTsKLW91dDoKKwlyZXN1bWVfZXhlY3V0aW9uKHAsIHJlZ3MpOworCXBvcF9rcHJvYmUoa2NiKTsKIAlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7CiAKIAkvKgpAQCAtNDk1LDE3ICs0OTMsMTYgQEAKIAkgKiB3aWxsIGhhdmUgUEVSIHNldCwgaW4gd2hpY2ggY2FzZSwgY29udGludWUgdGhlIHJlbWFpbmluZyBwcm9jZXNzaW5nCiAJICogb2YgZG9fc2luZ2xlX3N0ZXAsIGFzIGlmIHRoaXMgaXMgbm90IGEgcHJvYmUgaGl0LgogCSAqLwotCWlmIChyZWdzLT5wc3cubWFzayAmIFBTV19NQVNLX1BFUikgeworCWlmIChyZWdzLT5wc3cubWFzayAmIFBTV19NQVNLX1BFUikKIAkJcmV0dXJuIDA7Ci0JfQogCiAJcmV0dXJuIDE7CiB9CiAKIHN0YXRpYyBpbnQgX19rcHJvYmVzIGtwcm9iZV90cmFwX2hhbmRsZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCB0cmFwbnIpCiB7Ci0Jc3RydWN0IGtwcm9iZSAqY3VyID0ga3Byb2JlX3J1bm5pbmcoKTsKIAlzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiID0gZ2V0X2twcm9iZV9jdGxibGsoKTsKKwlzdHJ1Y3Qga3Byb2JlICpwID0ga3Byb2JlX3J1bm5pbmcoKTsKIAljb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICplbnRyeTsKIAogCXN3aXRjaChrY2ItPmtwcm9iZV9zdGF0dXMpIHsKQEAgLTUyMSwxNCArNTE4LDggQEAKIAkJICogYW5kIGFsbG93IHRoZSBwYWdlIGZhdWx0IGhhbmRsZXIgdG8gY29udGludWUgYXMgYQogCQkgKiBub3JtYWwgcGFnZSBmYXVsdC4KIAkJICovCi0JCXJlZ3MtPnBzdy5hZGRyID0gKHVuc2lnbmVkIGxvbmcpY3VyLT5hZGRyIHwgUFNXX0FERFJfQU1PREU7Ci0JCXJlZ3MtPnBzdy5tYXNrICY9IH5QU1dfTUFTS19QRVI7Ci0JCXJlZ3MtPnBzdy5tYXNrIHw9IGtjYi0+a3Byb2JlX3NhdmVkX2ltYXNrOwotCQlpZiAoa2NiLT5rcHJvYmVfc3RhdHVzID09IEtQUk9CRV9SRUVOVEVSKQotCQkJcmVzdG9yZV9wcmV2aW91c19rcHJvYmUoa2NiKTsKLQkJZWxzZSB7Ci0JCQlyZXNldF9jdXJyZW50X2twcm9iZSgpOwotCQl9CisJCWRpc2FibGVfc2luZ2xlc3RlcChrY2IsIHJlZ3MsICh1bnNpZ25lZCBsb25nKSBwLT5hZGRyKTsKKwkJcG9wX2twcm9iZShrY2IpOwogCQlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7CiAJCWJyZWFrOwogCWNhc2UgS1BST0JFX0hJVF9BQ1RJVkU6CkBAIC01MzgsNyArNTI5LDcgQEAKIAkJICogd2UgY2FuIGFsc28gdXNlIG5wcmUvbnBvc3RmYXVsdCBjb3VudCBmb3IgYWNjb3V0aW5nCiAJCSAqIHRoZXNlIHNwZWNpZmljIGZhdWx0IGNhc2VzLgogCQkgKi8KLQkJa3Byb2Jlc19pbmNfbm1pc3NlZF9jb3VudChjdXIpOworCQlrcHJvYmVzX2luY19ubWlzc2VkX2NvdW50KHApOwogCiAJCS8qCiAJCSAqIFdlIGNvbWUgaGVyZSBiZWNhdXNlIGluc3RydWN0aW9ucyBpbiB0aGUgcHJlL3Bvc3QKQEAgLTU0Nyw3ICs1MzgsNyBAQAogCQkgKiBjb3B5X2Zyb21fdXNlcigpLCBnZXRfdXNlcigpIGV0Yy4gTGV0IHRoZQogCQkgKiB1c2VyLXNwZWNpZmllZCBoYW5kbGVyIHRyeSB0byBmaXggaXQgZmlyc3QuCiAJCSAqLwotCQlpZiAoY3VyLT5mYXVsdF9oYW5kbGVyICYmIGN1ci0+ZmF1bHRfaGFuZGxlcihjdXIsIHJlZ3MsIHRyYXBucikpCisJCWlmIChwLT5mYXVsdF9oYW5kbGVyICYmIHAtPmZhdWx0X2hhbmRsZXIocCwgcmVncywgdHJhcG5yKSkKIAkJCXJldHVybiAxOwogCiAJCS8qCkBAIC01ODksNyArNTgwLDcgQEAKIGludCBfX2twcm9iZXMga3Byb2JlX2V4Y2VwdGlvbnNfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKIAkJCQkgICAgICAgdW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKmRhdGEpCiB7Ci0Jc3RydWN0IGRpZV9hcmdzICphcmdzID0gKHN0cnVjdCBkaWVfYXJncyAqKWRhdGE7CisJc3RydWN0IGRpZV9hcmdzICphcmdzID0gKHN0cnVjdCBkaWVfYXJncyAqKSBkYXRhOwogCXN0cnVjdCBwdF9yZWdzICpyZWdzID0gYXJncy0+cmVnczsKIAlpbnQgcmV0ID0gTk9USUZZX0RPTkU7CiAKQEAgLTU5OCwxNiArNTg5LDE2IEBACiAKIAlzd2l0Y2ggKHZhbCkgewogCWNhc2UgRElFX0JQVDoKLQkJaWYgKGtwcm9iZV9oYW5kbGVyKGFyZ3MtPnJlZ3MpKQorCQlpZiAoa3Byb2JlX2hhbmRsZXIocmVncykpCiAJCQlyZXQgPSBOT1RJRllfU1RPUDsKIAkJYnJlYWs7CiAJY2FzZSBESUVfU1NURVA6Ci0JCWlmIChwb3N0X2twcm9iZV9oYW5kbGVyKGFyZ3MtPnJlZ3MpKQorCQlpZiAocG9zdF9rcHJvYmVfaGFuZGxlcihyZWdzKSkKIAkJCXJldCA9IE5PVElGWV9TVE9QOwogCQlicmVhazsKIAljYXNlIERJRV9UUkFQOgogCQlpZiAoIXByZWVtcHRpYmxlKCkgJiYga3Byb2JlX3J1bm5pbmcoKSAmJgotCQkgICAga3Byb2JlX3RyYXBfaGFuZGxlcihhcmdzLT5yZWdzLCBhcmdzLT50cmFwbnIpKQorCQkgICAga3Byb2JlX3RyYXBfaGFuZGxlcihyZWdzLCBhcmdzLT50cmFwbnIpKQogCQkJcmV0ID0gTk9USUZZX1NUT1A7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC02MjMsMjMgKzYxNCwxOSBAQAogaW50IF9fa3Byb2JlcyBzZXRqbXBfcHJlX2hhbmRsZXIoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJc3RydWN0IGpwcm9iZSAqanAgPSBjb250YWluZXJfb2YocCwgc3RydWN0IGpwcm9iZSwga3ApOwotCXVuc2lnbmVkIGxvbmcgYWRkcjsKIAlzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiID0gZ2V0X2twcm9iZV9jdGxibGsoKTsKKwl1bnNpZ25lZCBsb25nIHN0YWNrOwogCiAJbWVtY3B5KCZrY2ItPmpwcm9iZV9zYXZlZF9yZWdzLCByZWdzLCBzaXplb2Yoc3RydWN0IHB0X3JlZ3MpKTsKIAogCS8qIHNldHVwIHJldHVybiBhZGRyIHRvIHRoZSBqcHJvYmUgaGFuZGxlciByb3V0aW5lICovCi0JcmVncy0+cHN3LmFkZHIgPSAodW5zaWduZWQgbG9uZykoanAtPmVudHJ5KSB8IFBTV19BRERSX0FNT0RFOworCXJlZ3MtPnBzdy5hZGRyID0gKHVuc2lnbmVkIGxvbmcpIGpwLT5lbnRyeSB8IFBTV19BRERSX0FNT0RFOwogCXJlZ3MtPnBzdy5tYXNrICY9IH4oUFNXX01BU0tfSU8gfCBQU1dfTUFTS19FWFQpOwogCi0JLyogcjE0IGlzIHRoZSBmdW5jdGlvbiByZXR1cm4gYWRkcmVzcyAqLwotCWtjYi0+anByb2JlX3NhdmVkX3IxNCA9ICh1bnNpZ25lZCBsb25nKXJlZ3MtPmdwcnNbMTRdOwogCS8qIHIxNSBpcyB0aGUgc3RhY2sgcG9pbnRlciAqLwotCWtjYi0+anByb2JlX3NhdmVkX3IxNSA9ICh1bnNpZ25lZCBsb25nKXJlZ3MtPmdwcnNbMTVdOwotCWFkZHIgPSAodW5zaWduZWQgbG9uZylrY2ItPmpwcm9iZV9zYXZlZF9yMTU7CisJc3RhY2sgPSAodW5zaWduZWQgbG9uZykgcmVncy0+Z3Byc1sxNV07CiAKLQltZW1jcHkoa2NiLT5qcHJvYmVzX3N0YWNrLCAoa3Byb2JlX29wY29kZV90ICopIGFkZHIsCi0JICAgICAgIE1JTl9TVEFDS19TSVpFKGFkZHIpKTsKKwltZW1jcHkoa2NiLT5qcHJvYmVzX3N0YWNrLCAodm9pZCAqKSBzdGFjaywgTUlOX1NUQUNLX1NJWkUoc3RhY2spKTsKIAlyZXR1cm4gMTsKIH0KIApAQCAtNjU2LDMwICs2NDMsMjkgQEAKIGludCBfX2twcm9iZXMgbG9uZ2ptcF9icmVha19oYW5kbGVyKHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXN0cnVjdCBrcHJvYmVfY3RsYmxrICprY2IgPSBnZXRfa3Byb2JlX2N0bGJsaygpOwotCXVuc2lnbmVkIGxvbmcgc3RhY2tfYWRkciA9ICh1bnNpZ25lZCBsb25nKShrY2ItPmpwcm9iZV9zYXZlZF9yMTUpOworCXVuc2lnbmVkIGxvbmcgc3RhY2s7CisKKwlzdGFjayA9ICh1bnNpZ25lZCBsb25nKSBrY2ItPmpwcm9iZV9zYXZlZF9yZWdzLmdwcnNbMTVdOwogCiAJLyogUHV0IHRoZSByZWdzIGJhY2sgKi8KIAltZW1jcHkocmVncywgJmtjYi0+anByb2JlX3NhdmVkX3JlZ3MsIHNpemVvZihzdHJ1Y3QgcHRfcmVncykpOwogCS8qIHB1dCB0aGUgc3RhY2sgYmFjayAqLwotCW1lbWNweSgoa3Byb2JlX29wY29kZV90ICopIHN0YWNrX2FkZHIsIGtjYi0+anByb2Jlc19zdGFjaywKLQkgICAgICAgTUlOX1NUQUNLX1NJWkUoc3RhY2tfYWRkcikpOworCW1lbWNweSgodm9pZCAqKSBzdGFjaywga2NiLT5qcHJvYmVzX3N0YWNrLCBNSU5fU1RBQ0tfU0laRShzdGFjaykpOwogCXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWQoKTsKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIHN0cnVjdCBrcHJvYmUgdHJhbXBvbGluZV9wID0gewotCS5hZGRyID0gKGtwcm9iZV9vcGNvZGVfdCAqKSAmIGtyZXRwcm9iZV90cmFtcG9saW5lLAorc3RhdGljIHN0cnVjdCBrcHJvYmUgdHJhbXBvbGluZSA9IHsKKwkuYWRkciA9IChrcHJvYmVfb3Bjb2RlX3QgKikgJmtyZXRwcm9iZV90cmFtcG9saW5lLAogCS5wcmVfaGFuZGxlciA9IHRyYW1wb2xpbmVfcHJvYmVfaGFuZGxlcgogfTsKIAogaW50IF9faW5pdCBhcmNoX2luaXRfa3Byb2Jlcyh2b2lkKQogewotCXJldHVybiByZWdpc3Rlcl9rcHJvYmUoJnRyYW1wb2xpbmVfcCk7CisJcmV0dXJuIHJlZ2lzdGVyX2twcm9iZSgmdHJhbXBvbGluZSk7CiB9CiAKIGludCBfX2twcm9iZXMgYXJjaF90cmFtcG9saW5lX2twcm9iZShzdHJ1Y3Qga3Byb2JlICpwKQogewotCWlmIChwLT5hZGRyID09IChrcHJvYmVfb3Bjb2RlX3QgKikgJiBrcmV0cHJvYmVfdHJhbXBvbGluZSkKLQkJcmV0dXJuIDE7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHAtPmFkZHIgPT0gKGtwcm9iZV9vcGNvZGVfdCAqKSAma3JldHByb2JlX3RyYW1wb2xpbmU7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL21jb3VudC5TIGIvYXJjaC9zMzkwL2tlcm5lbC9tY291bnQuUwppbmRleCBkZmUwMTVkLi4xZTZhNTU3IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL21jb3VudC5TCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvbWNvdW50LlMKQEAgLTcsNiArNyw4IEBACiAKICNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KIAorCS5zZWN0aW9uIC5rcHJvYmVzLnRleHQsICJheCIKKwogCS5nbG9ibCBmdHJhY2Vfc3R1YgogZnRyYWNlX3N0dWI6CiAJYnIJJXIxNApAQCAtMTYsMjIgKzE4LDEyIEBACiAjaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFCiAJYnIJJXIxNAogCi0JLmRhdGEKLQkuZ2xvYmwJZnRyYWNlX2R5bl9mdW5jCi1mdHJhY2VfZHluX2Z1bmM6Ci0JLmxvbmcJZnRyYWNlX3N0dWIKLQkucHJldmlvdXMKLQogCS5nbG9ibCBmdHJhY2VfY2FsbGVyCiBmdHJhY2VfY2FsbGVyOgogI2VuZGlmCiAJc3RtCSVyMiwlcjUsMTYoJXIxNSkKIAlicmFzCSVyMSwyZgotI2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRQotMDoJLmxvbmcJZnRyYWNlX2R5bl9mdW5jCi0jZWxzZQogMDoJLmxvbmcJZnRyYWNlX3RyYWNlX2Z1bmN0aW9uCi0jZW5kaWYKIDE6CS5sb25nCWZ1bmN0aW9uX3RyYWNlX3N0b3AKIDI6CWwJJXIyLDFiLTBiKCVyMSkKIAlpY20JJXIyLDB4ZiwwKCVyMikKQEAgLTQ3LDIxICszOSwxNSBAQAogCWwJJXIxNCwwKCVyMTQpCiAJYmFzcgklcjE0LCVyMTQKICNpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCi0jaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFCisJbAklcjIsMTAwKCVyMTUpCisJbAklcjMsMTUyKCVyMTUpCiAJLmdsb2JsCWZ0cmFjZV9ncmFwaF9jYWxsZXIKIGZ0cmFjZV9ncmFwaF9jYWxsZXI6Ci0JIyBUaGlzIHVuY29uZGl0aW9uYWwgYnJhbmNoIGdldHMgcnVudGltZSBwYXRjaGVkLiBDaGFuZ2Ugb25seSBpZgotCSMgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLiBTZWUgZnRyYWNlX2VuYWJsZV9ncmFwaF9jYWxsZXIoKS4KLQlqCTFmCi0jZW5kaWYKLQlicmFzCSVyMSwwZgotCS5sb25nCXByZXBhcmVfZnRyYWNlX3JldHVybgotMDoJbAklcjIsMTUyKCVyMTUpCi0JbAklcjQsMCglcjEpCi0JbAklcjMsMTAwKCVyMTUpCi0JYmFzcgklcjE0LCVyNAotCXN0CSVyMiwxMDAoJXIxNSkKLTE6CisjIFRoZSBicmFzIGluc3RydWN0aW9uIGdldHMgcnVudGltZSBwYXRjaGVkIHRvIGNhbGwgcHJlcGFyZV9mdHJhY2VfcmV0dXJuLgorIyBTZWUgZnRyYWNlX2VuYWJsZV9mdHJhY2VfZ3JhcGhfY2FsbGVyLiBUaGUgcGF0Y2hlZCBpbnN0cnVjdGlvbiBpczoKKyMJYnJhcwklcjE0LHByZXBhcmVfZnRyYWNlX3JldHVybgorCWJyYXMJJXIxNCwwZgorMDoJc3QJJXIyLDEwMCglcjE1KQogI2VuZGlmCiAJYWhpCSVyMTUsOTYKIAlsCSVyMTQsNTYoJXIxNSkKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvbWNvdW50NjQuUyBiL2FyY2gvczM5MC9rZXJuZWwvbWNvdW50NjQuUwppbmRleCBjMzcyMTFjLi5lNzM2NjcyIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL21jb3VudDY0LlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9tY291bnQ2NC5TCkBAIC03LDYgKzcsOCBAQAogCiAjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CiAKKwkuc2VjdGlvbiAua3Byb2Jlcy50ZXh0LCAiYXgiCisKIAkuZ2xvYmwgZnRyYWNlX3N0dWIKIGZ0cmFjZV9zdHViOgogCWJyCSVyMTQKQEAgLTE2LDEyICsxOCw2IEBACiAjaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFCiAJYnIJJXIxNAogCi0JLmRhdGEKLQkuZ2xvYmwJZnRyYWNlX2R5bl9mdW5jCi1mdHJhY2VfZHluX2Z1bmM6Ci0JLnF1YWQJZnRyYWNlX3N0dWIKLQkucHJldmlvdXMKLQogCS5nbG9ibCBmdHJhY2VfY2FsbGVyCiBmdHJhY2VfY2FsbGVyOgogI2VuZGlmCkBAIC0zNSwyNiArMzEsMTkgQEAKIAlzdGcJJXIxLF9fU0ZfQkFDS0NIQUlOKCVyMTUpCiAJbGdyCSVyMiwlcjE0CiAJbGcJJXIzLDE2OCglcjE1KQotI2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRQotCWxhcmwJJXIxNCxmdHJhY2VfZHluX2Z1bmMKLSNlbHNlCiAJbGFybAklcjE0LGZ0cmFjZV90cmFjZV9mdW5jdGlvbgotI2VuZGlmCiAJbGcJJXIxNCwwKCVyMTQpCiAJYmFzcgklcjE0LCVyMTQKICNpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCi0jaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFCisJbGcJJXIyLDE2OCglcjE1KQorCWxnCSVyMywyNzIoJXIxNSkKIAkuZ2xvYmwJZnRyYWNlX2dyYXBoX2NhbGxlcgogZnRyYWNlX2dyYXBoX2NhbGxlcjoKLQkjIFRoaXMgdW5jb25kaXRpb25hbCBicmFuY2ggZ2V0cyBydW50aW1lIHBhdGNoZWQuIENoYW5nZSBvbmx5IGlmCi0JIyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuIFNlZSBmdHJhY2VfZW5hYmxlX2dyYXBoX2NhbGxlcigpLgotCWoJMGYKLSNlbmRpZgotCWxnCSVyMiwyNzIoJXIxNSkKLQlsZwklcjMsMTY4KCVyMTUpCi0JYnJhc2wJJXIxNCxwcmVwYXJlX2Z0cmFjZV9yZXR1cm4KLQlzdGcJJXIyLDE2OCglcjE1KQotMDoKKyMgVGhlIGJyYXMgaW5zdHJ1Y3Rpb24gZ2V0cyBydW50aW1lIHBhdGNoZWQgdG8gY2FsbCBwcmVwYXJlX2Z0cmFjZV9yZXR1cm4uCisjIFNlZSBmdHJhY2VfZW5hYmxlX2Z0cmFjZV9ncmFwaF9jYWxsZXIuIFRoZSBwYXRjaGVkIGluc3RydWN0aW9uIGlzOgorIwlicmFzCSVyMTQscHJlcGFyZV9mdHJhY2VfcmV0dXJuCisJYnJhcwklcjE0LDBmCiswOglzdGcJJXIyLDE2OCglcjE1KQogI2VuZGlmCiAJYWdoaQklcjE1LDE2MAogCWxtZwklcjIsJXI1LDMyKCVyMTUpCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL25taS5jIGIvYXJjaC9zMzkwL2tlcm5lbC9ubWkuYwppbmRleCAxOTk1YzE3Li5mYWI4ODQzIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL25taS5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvbm1pLmMKQEAgLTgsNiArOCw3IEBACiAgKgkJIEhlaWtvIENhcnN0ZW5zIDxoZWlrby5jYXJzdGVuc0BkZS5pYm0uY29tPiwKICAqLwogCisjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+CkBAIC0yNTUsNyArMjU2LDcgQEAKIAlubWlfZW50ZXIoKTsKIAlzMzkwX2lkbGVfY2hlY2socmVncywgUzM5MF9sb3djb3JlLm1jY2tfY2xvY2ssCiAJCQlTMzkwX2xvd2NvcmUubWNja19lbnRlcl90aW1lcik7Ci0KKwlrc3RhdF9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpKS5pcnFzW05NSV9OTUldKys7CiAJbWNpID0gKHN0cnVjdCBtY2kgKikgJlMzOTBfbG93Y29yZS5tY2NrX2ludGVycnVwdGlvbl9jb2RlOwogCW1jY2sgPSAmX19nZXRfY3B1X3ZhcihjcHVfbWNjayk7CiAJdW1vZGUgPSB1c2VyX21vZGUocmVncyk7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvczM5MC9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IGVjMmUwM2IuLjZiYTQyMjIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgorI2luY2x1ZGUgPGxpbnV4L2twcm9iZXMuaD4KICNpbmNsdWRlIDxhc20vY29tcGF0Lmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgpAQCAtNDEsNiArNDIsNyBAQAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vdGltZXIuaD4KICNpbmNsdWRlIDxhc20vbm1pLmg+CisjaW5jbHVkZSA8YXNtL3NtcC5oPgogI2luY2x1ZGUgImVudHJ5LmgiCiAKIGFzbWxpbmthZ2Ugdm9pZCByZXRfZnJvbV9mb3JrKHZvaWQpIGFzbSAoInJldF9mcm9tX2ZvcmsiKTsKQEAgLTc1LDEzICs3Nyw4IEBACiAgKi8KIHN0YXRpYyB2b2lkIGRlZmF1bHRfaWRsZSh2b2lkKQogewotCS8qIENQVSBpcyBnb2luZyBpZGxlLiAqLwotI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQotCWlmIChjcHVfaXNfb2ZmbGluZShzbXBfcHJvY2Vzc29yX2lkKCkpKSB7Ci0JCXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWQoKTsKKwlpZiAoY3B1X2lzX29mZmxpbmUoc21wX3Byb2Nlc3Nvcl9pZCgpKSkKIAkJY3B1X2RpZSgpOwotCX0KLSNlbmRpZgogCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAJaWYgKG5lZWRfcmVzY2hlZCgpKSB7CiAJCWxvY2FsX2lycV9lbmFibGUoKTsKQEAgLTExNiwxNSArMTEzLDE3IEBACiAJfQogfQogCi1leHRlcm4gdm9pZCBrZXJuZWxfdGhyZWFkX3N0YXJ0ZXIodm9pZCk7CitleHRlcm4gdm9pZCBfX2twcm9iZXMga2VybmVsX3RocmVhZF9zdGFydGVyKHZvaWQpOwogCiBhc20oCi0JIi5hbGlnbiA0XG4iCisJIi5zZWN0aW9uIC5rcHJvYmVzLnRleHQsIFwiYXhcIlxuIgorCSIuZ2xvYmFsIGtlcm5lbF90aHJlYWRfc3RhcnRlclxuIgogCSJrZXJuZWxfdGhyZWFkX3N0YXJ0ZXI6XG4iCiAJIiAgICBsYSAgICAyLDAoMTApXG4iCiAJIiAgICBiYXNyICAxNCw5XG4iCiAJIiAgICBsYSAgICAyLDBcbiIKLQkiICAgIGJyICAgIDExXG4iKTsKKwkiICAgIGJyICAgIDExXG4iCisJIi5wcmV2aW91c1xuIik7CiAKIGludCBrZXJuZWxfdGhyZWFkKGludCAoKmZuKSh2b2lkICopLCB2b2lkICogYXJnLCB1bnNpZ25lZCBsb25nIGZsYWdzKQogewpAQCAtMjE0LDggKzIxMywxMCBAQAogCS8qIHN0YXJ0IG5ldyBwcm9jZXNzIHdpdGggYXI0IHBvaW50aW5nIHRvIHRoZSBjb3JyZWN0IGFkZHJlc3Mgc3BhY2UgKi8KIAlwLT50aHJlYWQubW1fc2VnbWVudCA9IGdldF9mcygpOwogCS8qIERvbid0IGNvcHkgZGVidWcgcmVnaXN0ZXJzICovCi0JbWVtc2V0KCZwLT50aHJlYWQucGVyX2luZm8sIDAsIHNpemVvZihwLT50aHJlYWQucGVyX2luZm8pKTsKKwltZW1zZXQoJnAtPnRocmVhZC5wZXJfdXNlciwgMCwgc2l6ZW9mKHAtPnRocmVhZC5wZXJfdXNlcikpOworCW1lbXNldCgmcC0+dGhyZWFkLnBlcl9ldmVudCwgMCwgc2l6ZW9mKHAtPnRocmVhZC5wZXJfZXZlbnQpKTsKIAljbGVhcl90c2tfdGhyZWFkX2ZsYWcocCwgVElGX1NJTkdMRV9TVEVQKTsKKwljbGVhcl90c2tfdGhyZWFkX2ZsYWcocCwgVElGX1BFUl9UUkFQKTsKIAkvKiBJbml0aWFsaXplIHBlciB0aHJlYWQgdXNlciBhbmQgc3lzdGVtIHRpbWVyIHZhbHVlcyAqLwogCXRpID0gdGFza190aHJlYWRfaW5mbyhwKTsKIAl0aS0+dXNlcl90aW1lciA9IDA7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3Byb2Nlc3Nvci5jIGIvYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzb3IuYwppbmRleCA2NDQ1NDhlLi4zMTFlOWQ3IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3Byb2Nlc3Nvci5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvcHJvY2Vzc29yLmMKQEAgLTEzLDcgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0KKyNpbmNsdWRlIDxsaW51eC9jcHUuaD4KICNpbmNsdWRlIDxhc20vZWxmLmg+CiAjaW5jbHVkZSA8YXNtL2xvd2NvcmUuaD4KICNpbmNsdWRlIDxhc20vcGFyYW0uaD4KQEAgLTM1LDE3ICszNSw2IEBACiB9CiAKIC8qCi0gKiBwcmludF9jcHVfaW5mbyAtIHByaW50IGJhc2ljIGluZm9ybWF0aW9uIGFib3V0IGEgY3B1Ci0gKi8KLXZvaWQgX19jcHVpbml0IHByaW50X2NwdV9pbmZvKHZvaWQpCi17Ci0Jc3RydWN0IGNwdWlkICppZCA9ICZwZXJfY3B1KGNwdV9pZCwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQotCXByX2luZm8oIlByb2Nlc3NvciAlZCBzdGFydGVkLCBhZGRyZXNzICVkLCBpZGVudGlmaWNhdGlvbiAlMDZYXG4iLAotCQlTMzkwX2xvd2NvcmUuY3B1X25yLCBzdGFwKCksIGlkLT5pZGVudCk7Ci19Ci0KLS8qCiAgKiBzaG93X2NwdWluZm8gLSBHZXQgaW5mb3JtYXRpb24gb24gb25lIENQVSBmb3IgdXNlIGJ5IHByb2Nmcy4KICAqLwogc3RhdGljIGludCBzaG93X2NwdWluZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQpAQCAtNTcsOSArNDYsOCBAQAogCXVuc2lnbmVkIGxvbmcgbiA9ICh1bnNpZ25lZCBsb25nKSB2IC0gMTsKIAlpbnQgaTsKIAotCXMzOTBfYWRqdXN0X2ppZmZpZXMoKTsKLQlwcmVlbXB0X2Rpc2FibGUoKTsKIAlpZiAoIW4pIHsKKwkJczM5MF9hZGp1c3RfamlmZmllcygpOwogCQlzZXFfcHJpbnRmKG0sICJ2ZW5kb3JfaWQgICAgICAgOiBJQk0vUzM5MFxuIgogCQkJICAgIiMgcHJvY2Vzc29ycyAgICA6ICVpXG4iCiAJCQkgICAiYm9nb21pcHMgcGVyIGNwdTogJWx1LiUwMmx1XG4iLApAQCAtNzEsNyArNTksNyBAQAogCQkJCXNlcV9wcmludGYobSwgIiVzICIsIGh3Y2FwX3N0cltpXSk7CiAJCXNlcV9wdXRzKG0sICJcbiIpOwogCX0KLQorCWdldF9vbmxpbmVfY3B1cygpOwogCWlmIChjcHVfb25saW5lKG4pKSB7CiAJCXN0cnVjdCBjcHVpZCAqaWQgPSAmcGVyX2NwdShjcHVfaWQsIG4pOwogCQlzZXFfcHJpbnRmKG0sICJwcm9jZXNzb3IgJWxpOiAiCkBAIC04MCw3ICs2OCw3IEBACiAJCQkgICAibWFjaGluZSA9ICUwNFhcbiIsCiAJCQkgICBuLCBpZC0+dmVyc2lvbiwgaWQtPmlkZW50LCBpZC0+bWFjaGluZSk7CiAJfQotCXByZWVtcHRfZW5hYmxlKCk7CisJcHV0X29ubGluZV9jcHVzKCk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL3MzOTAva2VybmVsL3B0cmFjZS5jCmluZGV4IDAxOWJiNzEuLmVmODZhZDIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9wdHJhY2UuYwpAQCAtMSwyNSArMSw5IEBACiAvKgotICogIGFyY2gvczM5MC9rZXJuZWwvcHRyYWNlLmMKKyAqICBQdHJhY2UgdXNlciBzcGFjZSBpbnRlcmZhY2UuCiAgKgotICogIFMzOTAgdmVyc2lvbgotICogICAgQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgSUJNIERldXRzY2hsYW5kIEVudHdpY2tsdW5nIEdtYkgsIElCTSBDb3Jwb3JhdGlvbgotICogICAgQXV0aG9yKHMpOiBEZW5pcyBKb3NlcGggQmFycm93IChkamJhcnJvd0BkZS5pYm0uY29tLGJhcnJvd19kakB5YWhvby5jb20pLAorICogICAgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk5LDIwMTAKKyAqICAgIEF1dGhvcihzKTogRGVuaXMgSm9zZXBoIEJhcnJvdwogICogICAgICAgICAgICAgICBNYXJ0aW4gU2Nod2lkZWZza3kgKHNjaHdpZGVmc2t5QGRlLmlibS5jb20pCi0gKgotICogIEJhc2VkIG9uIFBvd2VyUEMgdmVyc2lvbiAKLSAqICAgIENvcHlyaWdodCAoQykgMTk5NS0xOTk2IEdhcnkgVGhvbWFzIChnZHRAbGludXhwcGMub3JnKQotICoKLSAqICBEZXJpdmVkIGZyb20gImFyY2gvbTY4ay9rZXJuZWwvcHRyYWNlLmMiCi0gKiAgQ29weXJpZ2h0IChDKSAxOTk0IGJ5IEhhbWlzaCBNYWNkb25hbGQKLSAqICBUYWtlbiBmcm9tIGxpbnV4L2tlcm5lbC9wdHJhY2UuYyBhbmQgbW9kaWZpZWQgZm9yIE02ODB4MC4KLSAqICBsaW51eC9rZXJuZWwvcHRyYWNlLmMgaXMgYnkgUm9zcyBCaXJvIDEvMjMvOTIsIGVkaXRlZCBieSBMaW51cyBUb3J2YWxkcwotICoKLSAqIE1vZGlmaWVkIGJ5IENvcnQgRG91Z2FuIChjb3J0QGNzLm5tdC5lZHUpIAotICoKLSAqCi0gKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsCi0gKiBQdWJsaWMgTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBSRUFETUUubGVnYWwgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mCi0gKiB0aGlzIGFyY2hpdmUgZm9yIG1vcmUgZGV0YWlscy4KICAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC02MSw3NiArNDUsNTggQEAKIAlSRUdTRVRfR0VORVJBTF9FWFRFTkRFRCwKIH07CiAKLXN0YXRpYyB2b2lkCi1GaXhQZXJSZWdpc3RlcnMoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQordm9pZCB1cGRhdGVfcGVyX3JlZ3Moc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQogewotCXN0cnVjdCBwdF9yZWdzICpyZWdzOwotCXBlcl9zdHJ1Y3QgKnBlcl9pbmZvOwotCXBlcl9jcl93b3JkcyBjcl93b3JkczsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IHBlcl9yZWdzIHBlcl9zaW5nbGVfc3RlcCA9IHsKKwkJLmNvbnRyb2wgPSBQRVJfRVZFTlRfSUZFVENILAorCQkuc3RhcnQgPSAwLAorCQkuZW5kID0gUFNXX0FERFJfSU5TTiwKKwl9OworCXN0cnVjdCBwdF9yZWdzICpyZWdzID0gdGFza19wdF9yZWdzKHRhc2spOworCXN0cnVjdCB0aHJlYWRfc3RydWN0ICp0aHJlYWQgPSAmdGFzay0+dGhyZWFkOworCWNvbnN0IHN0cnVjdCBwZXJfcmVncyAqbmV3OworCXN0cnVjdCBwZXJfcmVncyBvbGQ7CiAKLQlyZWdzID0gdGFza19wdF9yZWdzKHRhc2spOwotCXBlcl9pbmZvID0gKHBlcl9zdHJ1Y3QgKikgJnRhc2stPnRocmVhZC5wZXJfaW5mbzsKLQlwZXJfaW5mby0+Y29udHJvbF9yZWdzLmJpdHMuZW1faW5zdHJ1Y3Rpb25fZmV0Y2ggPQotCQlwZXJfaW5mby0+c2luZ2xlX3N0ZXAgfCBwZXJfaW5mby0+aW5zdHJ1Y3Rpb25fZmV0Y2g7Ci0JCi0JaWYgKHBlcl9pbmZvLT5zaW5nbGVfc3RlcCkgewotCQlwZXJfaW5mby0+Y29udHJvbF9yZWdzLmJpdHMuc3RhcnRpbmdfYWRkciA9IDA7Ci0jaWZkZWYgQ09ORklHX0NPTVBBVAotCQlpZiAoaXNfY29tcGF0X3Rhc2soKSkKLQkJCXBlcl9pbmZvLT5jb250cm9sX3JlZ3MuYml0cy5lbmRpbmdfYWRkciA9IDB4N2ZmZmZmZmZVTDsKLQkJZWxzZQotI2VuZGlmCi0JCQlwZXJfaW5mby0+Y29udHJvbF9yZWdzLmJpdHMuZW5kaW5nX2FkZHIgPSBQU1dfQUREUl9JTlNOOwotCX0gZWxzZSB7Ci0JCXBlcl9pbmZvLT5jb250cm9sX3JlZ3MuYml0cy5zdGFydGluZ19hZGRyID0KLQkJCXBlcl9pbmZvLT5zdGFydGluZ19hZGRyOwotCQlwZXJfaW5mby0+Y29udHJvbF9yZWdzLmJpdHMuZW5kaW5nX2FkZHIgPQotCQkJcGVyX2luZm8tPmVuZGluZ19hZGRyOwotCX0KLQkvKgotCSAqIGlmIGFueSBvZiB0aGUgY29udHJvbCByZWcgdHJhY2luZyBiaXRzIGFyZSBvbiAKLQkgKiB3ZSBzd2l0Y2ggb24gcGVyIGluIHRoZSBwc3cKLQkgKi8KLQlpZiAocGVyX2luZm8tPmNvbnRyb2xfcmVncy53b3Jkcy5jclswXSAmIFBFUl9FTV9NQVNLKQotCQlyZWdzLT5wc3cubWFzayB8PSBQU1dfTUFTS19QRVI7Ci0JZWxzZQorCS8qIFRJRl9TSU5HTEVfU1RFUCBvdmVycmlkZXMgdGhlIHVzZXIgc3BlY2lmaWVkIFBFUiByZWdpc3RlcnMuICovCisJbmV3ID0gdGVzdF90c2tfdGhyZWFkX2ZsYWcodGFzaywgVElGX1NJTkdMRV9TVEVQKSA/CisJCSZwZXJfc2luZ2xlX3N0ZXAgOiAmdGhyZWFkLT5wZXJfdXNlcjsKKworCS8qIFRha2UgY2FyZSBvZiB0aGUgUEVSIGVuYWJsZW1lbnQgYml0IGluIHRoZSBQU1cuICovCisJaWYgKCEobmV3LT5jb250cm9sICYgUEVSX0VWRU5UX01BU0spKSB7CiAJCXJlZ3MtPnBzdy5tYXNrICY9IH5QU1dfTUFTS19QRVI7Ci0KLQlpZiAocGVyX2luZm8tPmNvbnRyb2xfcmVncy5iaXRzLmVtX3N0b3JhZ2VfYWx0ZXJhdGlvbikKLQkJcGVyX2luZm8tPmNvbnRyb2xfcmVncy5iaXRzLnN0b3JhZ2VfYWx0X3NwYWNlX2N0bCA9IDE7Ci0JZWxzZQotCQlwZXJfaW5mby0+Y29udHJvbF9yZWdzLmJpdHMuc3RvcmFnZV9hbHRfc3BhY2VfY3RsID0gMDsKLQotCWlmICh0YXNrID09IGN1cnJlbnQpIHsKLQkJX19jdGxfc3RvcmUoY3Jfd29yZHMsIDksIDExKTsKLQkJaWYgKG1lbWNtcCgmY3Jfd29yZHMsICZwZXJfaW5mby0+Y29udHJvbF9yZWdzLndvcmRzLAotCQkJICAgc2l6ZW9mKGNyX3dvcmRzKSkgIT0gMCkKLQkJCV9fY3RsX2xvYWQocGVyX2luZm8tPmNvbnRyb2xfcmVncy53b3JkcywgOSwgMTEpOworCQlyZXR1cm47CiAJfQorCXJlZ3MtPnBzdy5tYXNrIHw9IFBTV19NQVNLX1BFUjsKKwlfX2N0bF9zdG9yZShvbGQsIDksIDExKTsKKwlpZiAobWVtY21wKG5ldywgJm9sZCwgc2l6ZW9mKHN0cnVjdCBwZXJfcmVncykpICE9IDApCisJCV9fY3RsX2xvYWQoKm5ldywgOSwgMTEpOwogfQogCiB2b2lkIHVzZXJfZW5hYmxlX3NpbmdsZV9zdGVwKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKIHsKLQl0YXNrLT50aHJlYWQucGVyX2luZm8uc2luZ2xlX3N0ZXAgPSAxOwotCUZpeFBlclJlZ2lzdGVycyh0YXNrKTsKKwlzZXRfdHNrX3RocmVhZF9mbGFnKHRhc2ssIFRJRl9TSU5HTEVfU1RFUCk7CisJaWYgKHRhc2sgPT0gY3VycmVudCkKKwkJdXBkYXRlX3Blcl9yZWdzKHRhc2spOwogfQogCiB2b2lkIHVzZXJfZGlzYWJsZV9zaW5nbGVfc3RlcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCiB7Ci0JdGFzay0+dGhyZWFkLnBlcl9pbmZvLnNpbmdsZV9zdGVwID0gMDsKLQlGaXhQZXJSZWdpc3RlcnModGFzayk7CisJY2xlYXJfdHNrX3RocmVhZF9mbGFnKHRhc2ssIFRJRl9TSU5HTEVfU1RFUCk7CisJaWYgKHRhc2sgPT0gY3VycmVudCkKKwkJdXBkYXRlX3Blcl9yZWdzKHRhc2spOwogfQogCiAvKgogICogQ2FsbGVkIGJ5IGtlcm5lbC9wdHJhY2UuYyB3aGVuIGRldGFjaGluZy4uCiAgKgotICogTWFrZSBzdXJlIHNpbmdsZSBzdGVwIGJpdHMgZXRjIGFyZSBub3Qgc2V0LgorICogQ2xlYXIgYWxsIGRlYnVnZ2luZyByZWxhdGVkIGZpZWxkcy4KICAqLwotdm9pZAotcHRyYWNlX2Rpc2FibGUoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCkKK3ZvaWQgcHRyYWNlX2Rpc2FibGUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQogewotCS8qIG1ha2Ugc3VyZSB0aGUgc2luZ2xlIHN0ZXAgYml0IGlzIG5vdCBzZXQuICovCi0JdXNlcl9kaXNhYmxlX3NpbmdsZV9zdGVwKGNoaWxkKTsKKwltZW1zZXQoJnRhc2stPnRocmVhZC5wZXJfdXNlciwgMCwgc2l6ZW9mKHRhc2stPnRocmVhZC5wZXJfdXNlcikpOworCW1lbXNldCgmdGFzay0+dGhyZWFkLnBlcl9ldmVudCwgMCwgc2l6ZW9mKHRhc2stPnRocmVhZC5wZXJfZXZlbnQpKTsKKwljbGVhcl90c2tfdGhyZWFkX2ZsYWcodGFzaywgVElGX1NJTkdMRV9TVEVQKTsKKwljbGVhcl90c2tfdGhyZWFkX2ZsYWcodGFzaywgVElGX1BFUl9UUkFQKTsKIH0KIAogI2lmbmRlZiBDT05GSUdfNjRCSVQKQEAgLTEzOSw2ICsxMDUsNDcgQEAKICMgZGVmaW5lIF9fQUREUl9NQVNLIDcKICNlbmRpZgogCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19wZWVrX3VzZXJfcGVyKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsCisJCQkJCSAgICBhZGRyX3QgYWRkcikKK3sKKwlzdHJ1Y3QgcGVyX3N0cnVjdF9rZXJuZWwgKmR1bW15ID0gTlVMTDsKKworCWlmIChhZGRyID09IChhZGRyX3QpICZkdW1teS0+Y3I5KQorCQkvKiBDb250cm9sIGJpdHMgb2YgdGhlIGFjdGl2ZSBwZXIgc2V0LiAqLworCQlyZXR1cm4gdGVzdF90aHJlYWRfZmxhZyhUSUZfU0lOR0xFX1NURVApID8KKwkJCVBFUl9FVkVOVF9JRkVUQ0ggOiBjaGlsZC0+dGhyZWFkLnBlcl91c2VyLmNvbnRyb2w7CisJZWxzZSBpZiAoYWRkciA9PSAoYWRkcl90KSAmZHVtbXktPmNyMTApCisJCS8qIFN0YXJ0IGFkZHJlc3Mgb2YgdGhlIGFjdGl2ZSBwZXIgc2V0LiAqLworCQlyZXR1cm4gdGVzdF90aHJlYWRfZmxhZyhUSUZfU0lOR0xFX1NURVApID8KKwkJCTAgOiBjaGlsZC0+dGhyZWFkLnBlcl91c2VyLnN0YXJ0OworCWVsc2UgaWYgKGFkZHIgPT0gKGFkZHJfdCkgJmR1bW15LT5jcjExKQorCQkvKiBFbmQgYWRkcmVzcyBvZiB0aGUgYWN0aXZlIHBlciBzZXQuICovCisJCXJldHVybiB0ZXN0X3RocmVhZF9mbGFnKFRJRl9TSU5HTEVfU1RFUCkgPworCQkJUFNXX0FERFJfSU5TTiA6IGNoaWxkLT50aHJlYWQucGVyX3VzZXIuZW5kOworCWVsc2UgaWYgKGFkZHIgPT0gKGFkZHJfdCkgJmR1bW15LT5iaXRzKQorCQkvKiBTaW5nbGUtc3RlcCBiaXQuICovCisJCXJldHVybiB0ZXN0X3RocmVhZF9mbGFnKFRJRl9TSU5HTEVfU1RFUCkgPworCQkJKDFVTCA8PCAoQklUU19QRVJfTE9ORyAtIDEpKSA6IDA7CisJZWxzZSBpZiAoYWRkciA9PSAoYWRkcl90KSAmZHVtbXktPnN0YXJ0aW5nX2FkZHIpCisJCS8qIFN0YXJ0IGFkZHJlc3Mgb2YgdGhlIHVzZXIgc3BlY2lmaWVkIHBlciBzZXQuICovCisJCXJldHVybiBjaGlsZC0+dGhyZWFkLnBlcl91c2VyLnN0YXJ0OworCWVsc2UgaWYgKGFkZHIgPT0gKGFkZHJfdCkgJmR1bW15LT5lbmRpbmdfYWRkcikKKwkJLyogRW5kIGFkZHJlc3Mgb2YgdGhlIHVzZXIgc3BlY2lmaWVkIHBlciBzZXQuICovCisJCXJldHVybiBjaGlsZC0+dGhyZWFkLnBlcl91c2VyLmVuZDsKKwllbHNlIGlmIChhZGRyID09IChhZGRyX3QpICZkdW1teS0+cGVyY19hdG1pZCkKKwkJLyogUEVSIGNvZGUsIEFUTUlEIGFuZCBBSSBvZiB0aGUgbGFzdCBQRVIgdHJhcCAqLworCQlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpCisJCQljaGlsZC0+dGhyZWFkLnBlcl9ldmVudC5jYXVzZSA8PCAoQklUU19QRVJfTE9ORyAtIDE2KTsKKwllbHNlIGlmIChhZGRyID09IChhZGRyX3QpICZkdW1teS0+YWRkcmVzcykKKwkJLyogQWRkcmVzcyBvZiB0aGUgbGFzdCBQRVIgdHJhcCAqLworCQlyZXR1cm4gY2hpbGQtPnRocmVhZC5wZXJfZXZlbnQuYWRkcmVzczsKKwllbHNlIGlmIChhZGRyID09IChhZGRyX3QpICZkdW1teS0+YWNjZXNzX2lkKQorCQkvKiBBY2Nlc3MgaWQgb2YgdGhlIGxhc3QgUEVSIHRyYXAgKi8KKwkJcmV0dXJuICh1bnNpZ25lZCBsb25nKQorCQkJY2hpbGQtPnRocmVhZC5wZXJfZXZlbnQucGFpZCA8PCAoQklUU19QRVJfTE9ORyAtIDgpOworCXJldHVybiAwOworfQorCiAvKgogICogUmVhZCB0aGUgd29yZCBhdCBvZmZzZXQgYWRkciBmcm9tIHRoZSB1c2VyIGFyZWEgb2YgYSBwcm9jZXNzLiBUaGUKICAqIHRyb3VibGUgaGVyZSBpcyB0aGF0IHRoZSBpbmZvcm1hdGlvbiBpcyBsaXR0ZXJlZCBvdmVyIGRpZmZlcmVudApAQCAtMjA0LDEwICsyMTEsMTAgQEAKIAogCX0gZWxzZSBpZiAoYWRkciA8IChhZGRyX3QpICgmZHVtbXktPnJlZ3MucGVyX2luZm8gKyAxKSkgewogCQkvKgotCQkgKiBwZXJfaW5mbyBpcyBmb3VuZCBpbiB0aGUgdGhyZWFkIHN0cnVjdHVyZQorCQkgKiBIYW5kbGUgYWNjZXNzIHRvIHRoZSBwZXJfaW5mbyBzdHJ1Y3R1cmUuCiAJCSAqLwotCQlvZmZzZXQgPSBhZGRyIC0gKGFkZHJfdCkgJmR1bW15LT5yZWdzLnBlcl9pbmZvOwotCQl0bXAgPSAqKGFkZHJfdCAqKSgoYWRkcl90KSAmY2hpbGQtPnRocmVhZC5wZXJfaW5mbyArIG9mZnNldCk7CisJCWFkZHIgLT0gKGFkZHJfdCkgJmR1bW15LT5yZWdzLnBlcl9pbmZvOworCQl0bXAgPSBfX3BlZWtfdXNlcl9wZXIoY2hpbGQsIGFkZHIpOwogCiAJfSBlbHNlCiAJCXRtcCA9IDA7CkBAIC0yMzcsNiArMjQ0LDM1IEBACiAJcmV0dXJuIHB1dF91c2VyKHRtcCwgKGFkZHJfdCBfX3VzZXIgKikgZGF0YSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3Bva2VfdXNlcl9wZXIoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwKKwkJCQkgICBhZGRyX3QgYWRkciwgYWRkcl90IGRhdGEpCit7CisJc3RydWN0IHBlcl9zdHJ1Y3Rfa2VybmVsICpkdW1teSA9IE5VTEw7CisKKwkvKgorCSAqIFRoZXJlIGFyZSBvbmx5IHRocmVlIGZpZWxkcyBpbiB0aGUgcGVyX2luZm8gc3RydWN0IHRoYXQgdGhlCisJICogZGVidWdnZXIgdXNlciBjYW4gd3JpdGUgdG8uCisJICogMSkgY3I5OiB0aGUgZGVidWdnZXIgd2FudHMgdG8gc2V0IGEgbmV3IFBFUiBldmVudCBtYXNrCisJICogMikgc3RhcnRpbmdfYWRkcjogdGhlIGRlYnVnZ2VyIHdhbnRzIHRvIHNldCBhIG5ldyBzdGFydGluZworCSAqICAgIGFkZHJlc3MgdG8gdXNlIHdpdGggdGhlIFBFUiBldmVudCBtYXNrLgorCSAqIDMpIGVuZGluZ19hZGRyOiB0aGUgZGVidWdnZXIgd2FudHMgdG8gc2V0IGEgbmV3IGVuZGluZworCSAqICAgIGFkZHJlc3MgdG8gdXNlIHdpdGggdGhlIFBFUiBldmVudCBtYXNrLgorCSAqIFRoZSB1c2VyIHNwZWNpZmllZCBQRVIgZXZlbnQgbWFzayBhbmQgdGhlIHN0YXJ0IGFuZCBlbmQKKwkgKiBhZGRyZXNzZXMgYXJlIHVzZWQgb25seSBpZiBzaW5nbGUgc3RlcHBpbmcgaXMgbm90IGluIGVmZmVjdC4KKwkgKiBXcml0ZXMgdG8gYW55IG90aGVyIGZpZWxkIGluIHBlcl9pbmZvIGFyZSBpZ25vcmVkLgorCSAqLworCWlmIChhZGRyID09IChhZGRyX3QpICZkdW1teS0+Y3I5KQorCQkvKiBQRVIgZXZlbnQgbWFzayBvZiB0aGUgdXNlciBzcGVjaWZpZWQgcGVyIHNldC4gKi8KKwkJY2hpbGQtPnRocmVhZC5wZXJfdXNlci5jb250cm9sID0KKwkJCWRhdGEgJiAoUEVSX0VWRU5UX01BU0sgfCBQRVJfQ09OVFJPTF9NQVNLKTsKKwllbHNlIGlmIChhZGRyID09IChhZGRyX3QpICZkdW1teS0+c3RhcnRpbmdfYWRkcikKKwkJLyogU3RhcnRpbmcgYWRkcmVzcyBvZiB0aGUgdXNlciBzcGVjaWZpZWQgcGVyIHNldC4gKi8KKwkJY2hpbGQtPnRocmVhZC5wZXJfdXNlci5zdGFydCA9IGRhdGE7CisJZWxzZSBpZiAoYWRkciA9PSAoYWRkcl90KSAmZHVtbXktPmVuZGluZ19hZGRyKQorCQkvKiBFbmRpbmcgYWRkcmVzcyBvZiB0aGUgdXNlciBzcGVjaWZpZWQgcGVyIHNldC4gKi8KKwkJY2hpbGQtPnRocmVhZC5wZXJfdXNlci5lbmQgPSBkYXRhOworfQorCiAvKgogICogV3JpdGUgYSB3b3JkIHRvIHRoZSB1c2VyIGFyZWEgb2YgYSBwcm9jZXNzIGF0IGxvY2F0aW9uIGFkZHIuIFRoaXMKICAqIG9wZXJhdGlvbiBkb2VzIGhhdmUgYW4gYWRkaXRpb25hbCBwcm9ibGVtIGNvbXBhcmVkIHRvIHBlZWtfdXNlci4KQEAgLTMxMSwxOSArMzQ3LDE3IEBACiAKIAl9IGVsc2UgaWYgKGFkZHIgPCAoYWRkcl90KSAoJmR1bW15LT5yZWdzLnBlcl9pbmZvICsgMSkpIHsKIAkJLyoKLQkJICogcGVyX2luZm8gaXMgZm91bmQgaW4gdGhlIHRocmVhZCBzdHJ1Y3R1cmUgCisJCSAqIEhhbmRsZSBhY2Nlc3MgdG8gdGhlIHBlcl9pbmZvIHN0cnVjdHVyZS4KIAkJICovCi0JCW9mZnNldCA9IGFkZHIgLSAoYWRkcl90KSAmZHVtbXktPnJlZ3MucGVyX2luZm87Ci0JCSooYWRkcl90ICopKChhZGRyX3QpICZjaGlsZC0+dGhyZWFkLnBlcl9pbmZvICsgb2Zmc2V0KSA9IGRhdGE7CisJCWFkZHIgLT0gKGFkZHJfdCkgJmR1bW15LT5yZWdzLnBlcl9pbmZvOworCQlfX3Bva2VfdXNlcl9wZXIoY2hpbGQsIGFkZHIsIGRhdGEpOwogCiAJfQogCi0JRml4UGVyUmVnaXN0ZXJzKGNoaWxkKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotcG9rZV91c2VyKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIGFkZHJfdCBhZGRyLCBhZGRyX3QgZGF0YSkKK3N0YXRpYyBpbnQgcG9rZV91c2VyKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIGFkZHJfdCBhZGRyLCBhZGRyX3QgZGF0YSkKIHsKIAlhZGRyX3QgbWFzazsKIApAQCAtNDEwLDEyICs0NDQsNTMgQEAKICAqLwogCiAvKgorICogU2FtZSBhcyBwZWVrX3VzZXJfcGVyIGJ1dCBmb3IgYSAzMSBiaXQgcHJvZ3JhbS4KKyAqLworc3RhdGljIGlubGluZSBfX3UzMiBfX3BlZWtfdXNlcl9wZXJfY29tcGF0KHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsCisJCQkJCSAgIGFkZHJfdCBhZGRyKQoreworCXN0cnVjdCBjb21wYXRfcGVyX3N0cnVjdF9rZXJuZWwgKmR1bW15MzIgPSBOVUxMOworCisJaWYgKGFkZHIgPT0gKGFkZHJfdCkgJmR1bW15MzItPmNyOSkKKwkJLyogQ29udHJvbCBiaXRzIG9mIHRoZSBhY3RpdmUgcGVyIHNldC4gKi8KKwkJcmV0dXJuIChfX3UzMikgdGVzdF90aHJlYWRfZmxhZyhUSUZfU0lOR0xFX1NURVApID8KKwkJCVBFUl9FVkVOVF9JRkVUQ0ggOiBjaGlsZC0+dGhyZWFkLnBlcl91c2VyLmNvbnRyb2w7CisJZWxzZSBpZiAoYWRkciA9PSAoYWRkcl90KSAmZHVtbXkzMi0+Y3IxMCkKKwkJLyogU3RhcnQgYWRkcmVzcyBvZiB0aGUgYWN0aXZlIHBlciBzZXQuICovCisJCXJldHVybiAoX191MzIpIHRlc3RfdGhyZWFkX2ZsYWcoVElGX1NJTkdMRV9TVEVQKSA/CisJCQkwIDogY2hpbGQtPnRocmVhZC5wZXJfdXNlci5zdGFydDsKKwllbHNlIGlmIChhZGRyID09IChhZGRyX3QpICZkdW1teTMyLT5jcjExKQorCQkvKiBFbmQgYWRkcmVzcyBvZiB0aGUgYWN0aXZlIHBlciBzZXQuICovCisJCXJldHVybiB0ZXN0X3RocmVhZF9mbGFnKFRJRl9TSU5HTEVfU1RFUCkgPworCQkJUFNXMzJfQUREUl9JTlNOIDogY2hpbGQtPnRocmVhZC5wZXJfdXNlci5lbmQ7CisJZWxzZSBpZiAoYWRkciA9PSAoYWRkcl90KSAmZHVtbXkzMi0+Yml0cykKKwkJLyogU2luZ2xlLXN0ZXAgYml0LiAqLworCQlyZXR1cm4gKF9fdTMyKSB0ZXN0X3RocmVhZF9mbGFnKFRJRl9TSU5HTEVfU1RFUCkgPworCQkJMHg4MDAwMDAwMCA6IDA7CisJZWxzZSBpZiAoYWRkciA9PSAoYWRkcl90KSAmZHVtbXkzMi0+c3RhcnRpbmdfYWRkcikKKwkJLyogU3RhcnQgYWRkcmVzcyBvZiB0aGUgdXNlciBzcGVjaWZpZWQgcGVyIHNldC4gKi8KKwkJcmV0dXJuIChfX3UzMikgY2hpbGQtPnRocmVhZC5wZXJfdXNlci5zdGFydDsKKwllbHNlIGlmIChhZGRyID09IChhZGRyX3QpICZkdW1teTMyLT5lbmRpbmdfYWRkcikKKwkJLyogRW5kIGFkZHJlc3Mgb2YgdGhlIHVzZXIgc3BlY2lmaWVkIHBlciBzZXQuICovCisJCXJldHVybiAoX191MzIpIGNoaWxkLT50aHJlYWQucGVyX3VzZXIuZW5kOworCWVsc2UgaWYgKGFkZHIgPT0gKGFkZHJfdCkgJmR1bW15MzItPnBlcmNfYXRtaWQpCisJCS8qIFBFUiBjb2RlLCBBVE1JRCBhbmQgQUkgb2YgdGhlIGxhc3QgUEVSIHRyYXAgKi8KKwkJcmV0dXJuIChfX3UzMikgY2hpbGQtPnRocmVhZC5wZXJfZXZlbnQuY2F1c2UgPDwgMTY7CisJZWxzZSBpZiAoYWRkciA9PSAoYWRkcl90KSAmZHVtbXkzMi0+YWRkcmVzcykKKwkJLyogQWRkcmVzcyBvZiB0aGUgbGFzdCBQRVIgdHJhcCAqLworCQlyZXR1cm4gKF9fdTMyKSBjaGlsZC0+dGhyZWFkLnBlcl9ldmVudC5hZGRyZXNzOworCWVsc2UgaWYgKGFkZHIgPT0gKGFkZHJfdCkgJmR1bW15MzItPmFjY2Vzc19pZCkKKwkJLyogQWNjZXNzIGlkIG9mIHRoZSBsYXN0IFBFUiB0cmFwICovCisJCXJldHVybiAoX191MzIpIGNoaWxkLT50aHJlYWQucGVyX2V2ZW50LnBhaWQgPDwgMjQ7CisJcmV0dXJuIDA7Cit9CisKKy8qCiAgKiBTYW1lIGFzIHBlZWtfdXNlciBidXQgZm9yIGEgMzEgYml0IHByb2dyYW0uCiAgKi8KIHN0YXRpYyB1MzIgX19wZWVrX3VzZXJfY29tcGF0KHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIGFkZHJfdCBhZGRyKQogewotCXN0cnVjdCB1c2VyMzIgKmR1bW15MzIgPSBOVUxMOwotCXBlcl9zdHJ1Y3QzMiAqZHVtbXlfcGVyMzIgPSBOVUxMOworCXN0cnVjdCBjb21wYXRfdXNlciAqZHVtbXkzMiA9IE5VTEw7CiAJYWRkcl90IG9mZnNldDsKIAlfX3UzMiB0bXA7CiAKQEAgLTQ2NSwxOSArNTQwLDEwIEBACiAKIAl9IGVsc2UgaWYgKGFkZHIgPCAoYWRkcl90KSAoJmR1bW15MzItPnJlZ3MucGVyX2luZm8gKyAxKSkgewogCQkvKgotCQkgKiBwZXJfaW5mbyBpcyBmb3VuZCBpbiB0aGUgdGhyZWFkIHN0cnVjdHVyZQorCQkgKiBIYW5kbGUgYWNjZXNzIHRvIHRoZSBwZXJfaW5mbyBzdHJ1Y3R1cmUuCiAJCSAqLwotCQlvZmZzZXQgPSBhZGRyIC0gKGFkZHJfdCkgJmR1bW15MzItPnJlZ3MucGVyX2luZm87Ci0JCS8qIFRoaXMgaXMgbWFnaWMuIFNlZSBwZXJfc3RydWN0IGFuZCBwZXJfc3RydWN0MzIuICovCi0JCWlmICgob2Zmc2V0ID49IChhZGRyX3QpICZkdW1teV9wZXIzMi0+Y29udHJvbF9yZWdzICYmCi0JCSAgICAgb2Zmc2V0IDwgKGFkZHJfdCkgKCZkdW1teV9wZXIzMi0+Y29udHJvbF9yZWdzICsgMSkpIHx8Ci0JCSAgICAob2Zmc2V0ID49IChhZGRyX3QpICZkdW1teV9wZXIzMi0+c3RhcnRpbmdfYWRkciAmJgotCQkgICAgIG9mZnNldCA8PSAoYWRkcl90KSAmZHVtbXlfcGVyMzItPmVuZGluZ19hZGRyKSB8fAotCQkgICAgb2Zmc2V0ID09IChhZGRyX3QpICZkdW1teV9wZXIzMi0+bG93Y29yZS53b3Jkcy5hZGRyZXNzKQotCQkJb2Zmc2V0ID0gb2Zmc2V0KjIgKyA0OwotCQllbHNlCi0JCQlvZmZzZXQgPSBvZmZzZXQqMjsKLQkJdG1wID0gKihfX3UzMiAqKSgoYWRkcl90KSAmY2hpbGQtPnRocmVhZC5wZXJfaW5mbyArIG9mZnNldCk7CisJCWFkZHIgLT0gKGFkZHJfdCkgJmR1bW15MzItPnJlZ3MucGVyX2luZm87CisJCXRtcCA9IF9fcGVla191c2VyX3Blcl9jb21wYXQoY2hpbGQsIGFkZHIpOwogCiAJfSBlbHNlCiAJCXRtcCA9IDA7CkBAIC00OTgsMTMgKzU2NCwzMiBAQAogfQogCiAvKgorICogU2FtZSBhcyBwb2tlX3VzZXJfcGVyIGJ1dCBmb3IgYSAzMSBiaXQgcHJvZ3JhbS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIF9fcG9rZV91c2VyX3Blcl9jb21wYXQoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwKKwkJCQkJICBhZGRyX3QgYWRkciwgX191MzIgZGF0YSkKK3sKKwlzdHJ1Y3QgY29tcGF0X3Blcl9zdHJ1Y3Rfa2VybmVsICpkdW1teTMyID0gTlVMTDsKKworCWlmIChhZGRyID09IChhZGRyX3QpICZkdW1teTMyLT5jcjkpCisJCS8qIFBFUiBldmVudCBtYXNrIG9mIHRoZSB1c2VyIHNwZWNpZmllZCBwZXIgc2V0LiAqLworCQljaGlsZC0+dGhyZWFkLnBlcl91c2VyLmNvbnRyb2wgPQorCQkJZGF0YSAmIChQRVJfRVZFTlRfTUFTSyB8IFBFUl9DT05UUk9MX01BU0spOworCWVsc2UgaWYgKGFkZHIgPT0gKGFkZHJfdCkgJmR1bW15MzItPnN0YXJ0aW5nX2FkZHIpCisJCS8qIFN0YXJ0aW5nIGFkZHJlc3Mgb2YgdGhlIHVzZXIgc3BlY2lmaWVkIHBlciBzZXQuICovCisJCWNoaWxkLT50aHJlYWQucGVyX3VzZXIuc3RhcnQgPSBkYXRhOworCWVsc2UgaWYgKGFkZHIgPT0gKGFkZHJfdCkgJmR1bW15MzItPmVuZGluZ19hZGRyKQorCQkvKiBFbmRpbmcgYWRkcmVzcyBvZiB0aGUgdXNlciBzcGVjaWZpZWQgcGVyIHNldC4gKi8KKwkJY2hpbGQtPnRocmVhZC5wZXJfdXNlci5lbmQgPSBkYXRhOworfQorCisvKgogICogU2FtZSBhcyBwb2tlX3VzZXIgYnV0IGZvciBhIDMxIGJpdCBwcm9ncmFtLgogICovCiBzdGF0aWMgaW50IF9fcG9rZV91c2VyX2NvbXBhdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLAogCQkJICAgICAgYWRkcl90IGFkZHIsIGFkZHJfdCBkYXRhKQogewotCXN0cnVjdCB1c2VyMzIgKmR1bW15MzIgPSBOVUxMOwotCXBlcl9zdHJ1Y3QzMiAqZHVtbXlfcGVyMzIgPSBOVUxMOworCXN0cnVjdCBjb21wYXRfdXNlciAqZHVtbXkzMiA9IE5VTEw7CiAJX191MzIgdG1wID0gKF9fdTMyKSBkYXRhOwogCWFkZHJfdCBvZmZzZXQ7CiAKQEAgLTU2MSwzNyArNjQ2LDIwIEBACiAKIAl9IGVsc2UgaWYgKGFkZHIgPCAoYWRkcl90KSAoJmR1bW15MzItPnJlZ3MucGVyX2luZm8gKyAxKSkgewogCQkvKgotCQkgKiBwZXJfaW5mbyBpcyBmb3VuZCBpbiB0aGUgdGhyZWFkIHN0cnVjdHVyZS4KKwkJICogSGFuZGxlIGFjY2VzcyB0byB0aGUgcGVyX2luZm8gc3RydWN0dXJlLgogCQkgKi8KLQkJb2Zmc2V0ID0gYWRkciAtIChhZGRyX3QpICZkdW1teTMyLT5yZWdzLnBlcl9pbmZvOwotCQkvKgotCQkgKiBUaGlzIGlzIG1hZ2ljLiBTZWUgcGVyX3N0cnVjdCBhbmQgcGVyX3N0cnVjdDMyLgotCQkgKiBCeSBpbmNpZGVudCB0aGUgb2Zmc2V0cyBpbiBwZXJfc3RydWN0IGFyZSBleGFjdGx5Ci0JCSAqIHR3aWNlIHRoZSBvZmZzZXRzIGluIHBlcl9zdHJ1Y3QzMiBmb3IgYWxsIGZpZWxkcy4KLQkJICogVGhlIDggYnl0ZSBmaWVsZHMgbmVlZCBzcGVjaWFsIGhhbmRsaW5nIHRob3VnaCwKLQkJICogYmVjYXVzZSB0aGUgc2Vjb25kIGhhbGYgKGJ5dGVzIDQtNykgaXMgbmVlZGVkIGFuZAotCQkgKiBub3QgdGhlIGZpcnN0IGhhbGYuCi0JCSAqLwotCQlpZiAoKG9mZnNldCA+PSAoYWRkcl90KSAmZHVtbXlfcGVyMzItPmNvbnRyb2xfcmVncyAmJgotCQkgICAgIG9mZnNldCA8IChhZGRyX3QpICgmZHVtbXlfcGVyMzItPmNvbnRyb2xfcmVncyArIDEpKSB8fAotCQkgICAgKG9mZnNldCA+PSAoYWRkcl90KSAmZHVtbXlfcGVyMzItPnN0YXJ0aW5nX2FkZHIgJiYKLQkJICAgICBvZmZzZXQgPD0gKGFkZHJfdCkgJmR1bW15X3BlcjMyLT5lbmRpbmdfYWRkcikgfHwKLQkJICAgIG9mZnNldCA9PSAoYWRkcl90KSAmZHVtbXlfcGVyMzItPmxvd2NvcmUud29yZHMuYWRkcmVzcykKLQkJCW9mZnNldCA9IG9mZnNldCoyICsgNDsKLQkJZWxzZQotCQkJb2Zmc2V0ID0gb2Zmc2V0KjI7Ci0JCSooX191MzIgKikoKGFkZHJfdCkgJmNoaWxkLT50aHJlYWQucGVyX2luZm8gKyBvZmZzZXQpID0gdG1wOwotCisJCWFkZHIgLT0gKGFkZHJfdCkgJmR1bW15MzItPnJlZ3MucGVyX2luZm87CisJCV9fcG9rZV91c2VyX3Blcl9jb21wYXQoY2hpbGQsIGFkZHIsIGRhdGEpOwogCX0KIAotCUZpeFBlclJlZ2lzdGVycyhjaGlsZCk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgcG9rZV91c2VyX2NvbXBhdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLAogCQkJICAgIGFkZHJfdCBhZGRyLCBhZGRyX3QgZGF0YSkKIHsKLQlpZiAoIWlzX2NvbXBhdF90YXNrKCkgfHwgKGFkZHIgJiAzKSB8fCBhZGRyID4gc2l6ZW9mKHN0cnVjdCB1c2VyMzIpIC0gMykKKwlpZiAoIWlzX2NvbXBhdF90YXNrKCkgfHwgKGFkZHIgJiAzKSB8fAorCSAgICBhZGRyID4gc2l6ZW9mKHN0cnVjdCBjb21wYXRfdXNlcikgLSAzKQogCQlyZXR1cm4gLUVJTzsKIAogCXJldHVybiBfX3Bva2VfdXNlcl9jb21wYXQoY2hpbGQsIGFkZHIsIGRhdGEpOwpAQCAtNjAyLDcgKzY3MCw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyBhZGRyID0gY2FkZHI7CiAJdW5zaWduZWQgbG9uZyBkYXRhID0gY2RhdGE7Ci0JcHRyYWNlX2FyZWFfZW11MzEgcGFyZWE7IAorCWNvbXBhdF9wdHJhY2VfYXJlYSBwYXJlYTsKIAlpbnQgY29waWVkLCByZXQ7CiAKIAlzd2l0Y2ggKHJlcXVlc3QpIHsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvczM5MF9leHQuYyBiL2FyY2gvczM5MC9rZXJuZWwvczM5MF9leHQuYwppbmRleCBiZDFkYjUwLi4xODUwMjk5IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3MzOTBfZXh0LmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zMzkwX2V4dC5jCkBAIC0xLDMzICsxLDM2IEBACiAvKgotICogIGFyY2gvczM5MC9rZXJuZWwvczM5MF9leHQuYwotICoKLSAqICBTMzkwIHZlcnNpb24KLSAqICAgIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIElCTSBEZXV0c2NobGFuZCBFbnR3aWNrbHVuZyBHbWJILCBJQk0gQ29ycG9yYXRpb24KLSAqICAgIEF1dGhvcihzKTogSG9sZ2VyIFNtb2xpbnNraSAoSG9sZ2VyLlNtb2xpbnNraUBkZS5pYm0uY29tKSwKLSAqICAgICAgICAgICAgICAgTWFydGluIFNjaHdpZGVmc2t5IChzY2h3aWRlZnNreUBkZS5pYm0uY29tKQorICogICAgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk5LDIwMTAKKyAqICAgIEF1dGhvcihzKTogSG9sZ2VyIFNtb2xpbnNraSA8SG9sZ2VyLlNtb2xpbnNraUBkZS5pYm0uY29tPiwKKyAqCQkgTWFydGluIFNjaHdpZGVmc2t5IDxzY2h3aWRlZnNreUBkZS5pYm0uY29tPiwKICAqLwogCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZS5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxhc20vY3B1dGltZS5oPgotI2luY2x1ZGUgPGFzbS9sb3djb3JlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8YXNtL3MzOTBfZXh0Lmg+CiAjaW5jbHVkZSA8YXNtL2lycV9yZWdzLmg+CisjaW5jbHVkZSA8YXNtL2NwdXRpbWUuaD4KKyNpbmNsdWRlIDxhc20vbG93Y29yZS5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlICJlbnRyeS5oIgogCitzdHJ1Y3QgZXh0X2ludF9pbmZvIHsKKwlzdHJ1Y3QgZXh0X2ludF9pbmZvICpuZXh0OworCWV4dF9pbnRfaGFuZGxlcl90IGhhbmRsZXI7CisJX191MTYgY29kZTsKK307CisKIC8qCiAgKiBleHRfaW50X2hhc2hbaW5kZXhdIGlzIHRoZSBzdGFydCBvZiB0aGUgbGlzdCBmb3IgYWxsIGV4dGVybmFsIGludGVycnVwdHMKICAqIHRoYXQgaGFzaCB0byB0aGlzIGluZGV4LiBXaXRoIHRoZSBjdXJyZW50IHNldCBvZiBleHRlcm5hbCBpbnRlcnJ1cHRzIAogICogKDB4MTIwMiBleHRlcm5hbCBjYWxsLCAweDEwMDQgY3B1IHRpbWVyLCAweDI0MDEgaHdjIGNvbnNvbGUsIDB4NDAwMAogICogaXVjdiBhbmQgMHgyNjAzIHBmYXVsdCkgdGhpcyBpcyBhbHdheXMgdGhlIGZpcnN0IGVsZW1lbnQuIAogICovCi1leHRfaW50X2luZm9fdCAqZXh0X2ludF9oYXNoWzI1Nl0gPSB7IE5VTEwsIH07CitzdGF0aWMgc3RydWN0IGV4dF9pbnRfaW5mbyAqZXh0X2ludF9oYXNoWzI1Nl07CiAKIHN0YXRpYyBpbmxpbmUgaW50IGV4dF9oYXNoKF9fdTE2IGNvZGUpCiB7CkBAIC0zNiw5MCArMzksNTMgQEAKIAogaW50IHJlZ2lzdGVyX2V4dGVybmFsX2ludGVycnVwdChfX3UxNiBjb2RlLCBleHRfaW50X2hhbmRsZXJfdCBoYW5kbGVyKQogewotICAgICAgICBleHRfaW50X2luZm9fdCAqcDsKLSAgICAgICAgaW50IGluZGV4OworCXN0cnVjdCBleHRfaW50X2luZm8gKnA7CisJaW50IGluZGV4OwogCi0JcCA9IGttYWxsb2Moc2l6ZW9mKGV4dF9pbnRfaW5mb190KSwgR0ZQX0FUT01JQyk7Ci0gICAgICAgIGlmIChwID09IE5VTEwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07Ci0gICAgICAgIHAtPmNvZGUgPSBjb2RlOwotICAgICAgICBwLT5oYW5kbGVyID0gaGFuZGxlcjsKKwlwID0ga21hbGxvYyhzaXplb2YoKnApLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXApCisJCXJldHVybiAtRU5PTUVNOworCXAtPmNvZGUgPSBjb2RlOworCXAtPmhhbmRsZXIgPSBoYW5kbGVyOwogCWluZGV4ID0gZXh0X2hhc2goY29kZSk7Ci0gICAgICAgIHAtPm5leHQgPSBleHRfaW50X2hhc2hbaW5kZXhdOwotICAgICAgICBleHRfaW50X2hhc2hbaW5kZXhdID0gcDsKLSAgICAgICAgcmV0dXJuIDA7CisJcC0+bmV4dCA9IGV4dF9pbnRfaGFzaFtpbmRleF07CisJZXh0X2ludF9oYXNoW2luZGV4XSA9IHA7CisJcmV0dXJuIDA7CiB9Ci0KLWludCByZWdpc3Rlcl9lYXJseV9leHRlcm5hbF9pbnRlcnJ1cHQoX191MTYgY29kZSwgZXh0X2ludF9oYW5kbGVyX3QgaGFuZGxlciwKLQkJCQkgICAgICBleHRfaW50X2luZm9fdCAqcCkKLXsKLSAgICAgICAgaW50IGluZGV4OwotCi0gICAgICAgIGlmIChwID09IE5VTEwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgICAgIHAtPmNvZGUgPSBjb2RlOwotICAgICAgICBwLT5oYW5kbGVyID0gaGFuZGxlcjsKLQlpbmRleCA9IGV4dF9oYXNoKGNvZGUpOwotICAgICAgICBwLT5uZXh0ID0gZXh0X2ludF9oYXNoW2luZGV4XTsKLSAgICAgICAgZXh0X2ludF9oYXNoW2luZGV4XSA9IHA7Ci0gICAgICAgIHJldHVybiAwOwotfQorRVhQT1JUX1NZTUJPTChyZWdpc3Rlcl9leHRlcm5hbF9pbnRlcnJ1cHQpOwogCiBpbnQgdW5yZWdpc3Rlcl9leHRlcm5hbF9pbnRlcnJ1cHQoX191MTYgY29kZSwgZXh0X2ludF9oYW5kbGVyX3QgaGFuZGxlcikKIHsKLSAgICAgICAgZXh0X2ludF9pbmZvX3QgKnAsICpxOwotICAgICAgICBpbnQgaW5kZXg7Ci0KLQlpbmRleCA9IGV4dF9oYXNoKGNvZGUpOwotICAgICAgICBxID0gTlVMTDsKLSAgICAgICAgcCA9IGV4dF9pbnRfaGFzaFtpbmRleF07Ci0gICAgICAgIHdoaWxlIChwICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBpZiAocC0+Y29kZSA9PSBjb2RlICYmIHAtPmhhbmRsZXIgPT0gaGFuZGxlcikKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIHEgPSBwOwotICAgICAgICAgICAgICAgIHAgPSBwLT5uZXh0OwotICAgICAgICB9Ci0gICAgICAgIGlmIChwID09IE5VTEwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9FTlQ7Ci0gICAgICAgIGlmIChxICE9IE5VTEwpCi0gICAgICAgICAgICAgICAgcS0+bmV4dCA9IHAtPm5leHQ7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBleHRfaW50X2hhc2hbaW5kZXhdID0gcC0+bmV4dDsKLQlrZnJlZShwKTsKLSAgICAgICAgcmV0dXJuIDA7Ci19Ci0KLWludCB1bnJlZ2lzdGVyX2Vhcmx5X2V4dGVybmFsX2ludGVycnVwdChfX3UxNiBjb2RlLCBleHRfaW50X2hhbmRsZXJfdCBoYW5kbGVyLAotCQkJCQlleHRfaW50X2luZm9fdCAqcCkKLXsKLQlleHRfaW50X2luZm9fdCAqcTsKKwlzdHJ1Y3QgZXh0X2ludF9pbmZvICpwLCAqcTsKIAlpbnQgaW5kZXg7CiAKLQlpZiAocCA9PSBOVUxMIHx8IHAtPmNvZGUgIT0gY29kZSB8fCBwLT5oYW5kbGVyICE9IGhhbmRsZXIpCi0JCXJldHVybiAtRUlOVkFMOwogCWluZGV4ID0gZXh0X2hhc2goY29kZSk7Ci0JcSA9IGV4dF9pbnRfaGFzaFtpbmRleF07Ci0JaWYgKHAgIT0gcSkgewotCQl3aGlsZSAocSAhPSBOVUxMKSB7Ci0JCQlpZiAocS0+bmV4dCA9PSBwKQotCQkJCWJyZWFrOwotCQkJcSA9IHEtPm5leHQ7Ci0JCX0KLQkJaWYgKHEgPT0gTlVMTCkKLQkJCXJldHVybiAtRU5PRU5UOworCXEgPSBOVUxMOworCXAgPSBleHRfaW50X2hhc2hbaW5kZXhdOworCXdoaWxlIChwKSB7CisJCWlmIChwLT5jb2RlID09IGNvZGUgJiYgcC0+aGFuZGxlciA9PSBoYW5kbGVyKQorCQkJYnJlYWs7CisJCXEgPSBwOworCQlwID0gcC0+bmV4dDsKKwl9CisJaWYgKCFwKQorCQlyZXR1cm4gLUVOT0VOVDsKKwlpZiAocSkKIAkJcS0+bmV4dCA9IHAtPm5leHQ7Ci0JfSBlbHNlCisJZWxzZQogCQlleHRfaW50X2hhc2hbaW5kZXhdID0gcC0+bmV4dDsKKwlrZnJlZShwKTsKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0wodW5yZWdpc3Rlcl9leHRlcm5hbF9pbnRlcnJ1cHQpOwogCiB2b2lkIF9faXJxX2VudHJ5IGRvX2V4dGludChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgaW50IGV4dF9pbnRfY29kZSwKIAkJCSAgIHVuc2lnbmVkIGludCBwYXJhbTMyLCB1bnNpZ25lZCBsb25nIHBhcmFtNjQpCiB7CiAJc3RydWN0IHB0X3JlZ3MgKm9sZF9yZWdzOwogCXVuc2lnbmVkIHNob3J0IGNvZGU7Ci0gICAgICAgIGV4dF9pbnRfaW5mb190ICpwOwotICAgICAgICBpbnQgaW5kZXg7CisJc3RydWN0IGV4dF9pbnRfaW5mbyAqcDsKKwlpbnQgaW5kZXg7CiAKIAljb2RlID0gKHVuc2lnbmVkIHNob3J0KSBleHRfaW50X2NvZGU7CiAJb2xkX3JlZ3MgPSBzZXRfaXJxX3JlZ3MocmVncyk7CkBAIC0xMzIsNyArOTgsNyBAQAogCWtzdGF0X2NwdShzbXBfcHJvY2Vzc29yX2lkKCkpLmlycXNbRVhURVJOQUxfSU5URVJSVVBUXSsrOwogCWlmIChjb2RlICE9IDB4MTAwNCkKIAkJX19nZXRfY3B1X3ZhcihzMzkwX2lkbGUpLm5vaHpfZGVsYXkgPSAxOwotICAgICAgICBpbmRleCA9IGV4dF9oYXNoKGNvZGUpOworCWluZGV4ID0gZXh0X2hhc2goY29kZSk7CiAJZm9yIChwID0gZXh0X2ludF9oYXNoW2luZGV4XTsgcDsgcCA9IHAtPm5leHQpIHsKIAkJaWYgKGxpa2VseShwLT5jb2RlID09IGNvZGUpKQogCQkJcC0+aGFuZGxlcihleHRfaW50X2NvZGUsIHBhcmFtMzIsIHBhcmFtNjQpOwpAQCAtMTQwLDYgKzEwNiwzIEBACiAJaXJxX2V4aXQoKTsKIAlzZXRfaXJxX3JlZ3Mob2xkX3JlZ3MpOwogfQotCi1FWFBPUlRfU1lNQk9MKHJlZ2lzdGVyX2V4dGVybmFsX2ludGVycnVwdCk7Ci1FWFBPUlRfU1lNQk9MKHVucmVnaXN0ZXJfZXh0ZXJuYWxfaW50ZXJydXB0KTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvc2lnbmFsLmMgYi9hcmNoL3MzOTAva2VybmVsL3NpZ25hbC5jCmluZGV4IGVlN2FjOGIuLmFiYmIzYzMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvc2lnbmFsLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zaWduYWwuYwpAQCAtNTA1LDcgKzUwNSw3IEBACiAJCQkgKiBMZXQgdHJhY2luZyBrbm93IHRoYXQgd2UndmUgZG9uZSB0aGUgaGFuZGxlciBzZXR1cC4KIAkJCSAqLwogCQkJdHJhY2Vob29rX3NpZ25hbF9oYW5kbGVyKHNpZ25yLCAmaW5mbywgJmthLCByZWdzLAotCQkJCQljdXJyZW50LT50aHJlYWQucGVyX2luZm8uc2luZ2xlX3N0ZXApOworCQkJCQl0ZXN0X3RocmVhZF9mbGFnKFRJRl9TSU5HTEVfU1RFUCkpOwogCQl9CiAJCXJldHVybjsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3NtcC5jIGIvYXJjaC9zMzkwL2tlcm5lbC9zbXAuYwppbmRleCA5NGNmNTEwLi42M2E5N2RiIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvc21wLmMKQEAgLTIzLDYgKzIzLDcgQEAKICNkZWZpbmUgS01TR19DT01QT05FTlQgImNwdSIKICNkZWZpbmUgcHJfZm10KGZtdCkgS01TR19DT01QT05FTlQgIjogIiBmbXQKIAorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgpAQCAtMTYxLDYgKzE2Miw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyBiaXRzOwogCisJa3N0YXRfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSkuaXJxc1tFWFRJTlRfSVBJXSsrOwogCS8qCiAJICogaGFuZGxlIGJpdCBzaWduYWwgZXh0ZXJuYWwgY2FsbHMKIAkgKgpAQCAtNDY5LDI1ICs0NzEsMjUgQEAKIAlpcGlfY2FsbF91bmxvY2soKTsKIAkvKiBTd2l0Y2ggb24gaW50ZXJydXB0cyAqLwogCWxvY2FsX2lycV9lbmFibGUoKTsKLQkvKiBQcmludCBpbmZvIGFib3V0IHRoaXMgcHJvY2Vzc29yICovCi0JcHJpbnRfY3B1X2luZm8oKTsKIAkvKiBjcHVfaWRsZSB3aWxsIGNhbGwgc2NoZWR1bGUgZm9yIHVzICovCiAJY3B1X2lkbGUoKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IHNtcF9jcmVhdGVfaWRsZSh1bnNpZ25lZCBpbnQgY3B1KQotewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKK3N0cnVjdCBjcmVhdGVfaWRsZSB7CisJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CisJc3RydWN0IHRhc2tfc3RydWN0ICppZGxlOworCXN0cnVjdCBjb21wbGV0aW9uIGRvbmU7CisJaW50IGNwdTsKK307CiAKLQkvKgotCSAqICBkb24ndCBjYXJlIGFib3V0IHRoZSBwc3cgYW5kIHJlZ3Mgc2V0dGluZ3Mgc2luY2Ugd2UnbGwgbmV2ZXIKLQkgKiAgcmVzY2hlZHVsZSB0aGUgZm9ya2VkIHRhc2suCi0JICovCi0JcCA9IGZvcmtfaWRsZShjcHUpOwotCWlmIChJU19FUlIocCkpCi0JCXBhbmljKCJmYWlsZWQgZm9yayBmb3IgQ1BVICV1OiAlbGkiLCBjcHUsIFBUUl9FUlIocCkpOwotCWN1cnJlbnRfc2V0W2NwdV0gPSBwOworc3RhdGljIHZvaWQgX19jcHVpbml0IHNtcF9mb3JrX2lkbGUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBjcmVhdGVfaWRsZSAqY19pZGxlOworCisJY19pZGxlID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBjcmVhdGVfaWRsZSwgd29yayk7CisJY19pZGxlLT5pZGxlID0gZm9ya19pZGxlKGNfaWRsZS0+Y3B1KTsKKwljb21wbGV0ZSgmY19pZGxlLT5kb25lKTsKIH0KIAogc3RhdGljIGludCBfX2NwdWluaXQgc21wX2FsbG9jX2xvd2NvcmUoaW50IGNwdSkKQEAgLTU1MSw2ICs1NTMsNyBAQAogaW50IF9fY3B1aW5pdCBfX2NwdV91cCh1bnNpZ25lZCBpbnQgY3B1KQogewogCXN0cnVjdCBfbG93Y29yZSAqY3B1X2xvd2NvcmU7CisJc3RydWN0IGNyZWF0ZV9pZGxlIGNfaWRsZTsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmlkbGU7CiAJc3RydWN0IHN0YWNrX2ZyYW1lICpzZjsKIAl1MzIgbG93Y29yZTsKQEAgLTU1OCw2ICs1NjEsMTkgQEAKIAogCWlmIChzbXBfY3B1X3N0YXRlW2NwdV0gIT0gQ1BVX1NUQVRFX0NPTkZJR1VSRUQpCiAJCXJldHVybiAtRUlPOworCWlkbGUgPSBjdXJyZW50X3NldFtjcHVdOworCWlmICghaWRsZSkgeworCQljX2lkbGUuZG9uZSA9IENPTVBMRVRJT05fSU5JVElBTElaRVJfT05TVEFDSyhjX2lkbGUuZG9uZSk7CisJCUlOSVRfV09SS19PTlNUQUNLKCZjX2lkbGUud29yaywgc21wX2ZvcmtfaWRsZSk7CisJCWNfaWRsZS5jcHUgPSBjcHU7CisJCXNjaGVkdWxlX3dvcmsoJmNfaWRsZS53b3JrKTsKKwkJd2FpdF9mb3JfY29tcGxldGlvbigmY19pZGxlLmRvbmUpOworCQlpZiAoSVNfRVJSKGNfaWRsZS5pZGxlKSkKKwkJCXJldHVybiBQVFJfRVJSKGNfaWRsZS5pZGxlKTsKKwkJaWRsZSA9IGNfaWRsZS5pZGxlOworCQljdXJyZW50X3NldFtjcHVdID0gY19pZGxlLmlkbGU7CisJfQorCWluaXRfaWRsZShpZGxlLCBjcHUpOwogCWlmIChzbXBfYWxsb2NfbG93Y29yZShjcHUpKQogCQlyZXR1cm4gLUVOT01FTTsKIAlkbyB7CkBAIC01NzIsNyArNTg4LDYgQEAKIAl3aGlsZSAoc2lncF9wKGxvd2NvcmUsIGNwdSwgc2lncF9zZXRfcHJlZml4KSA9PSBzaWdwX2J1c3kpCiAJCXVkZWxheSgxMCk7CiAKLQlpZGxlID0gY3VycmVudF9zZXRbY3B1XTsKIAljcHVfbG93Y29yZSA9IGxvd2NvcmVfcHRyW2NwdV07CiAJY3B1X2xvd2NvcmUtPmtlcm5lbF9zdGFjayA9ICh1bnNpZ25lZCBsb25nKQogCQl0YXNrX3N0YWNrX3BhZ2UoaWRsZSkgKyBUSFJFQURfU0laRTsKQEAgLTY2NCw3ICs2NzksNiBAQAogCQl1ZGVsYXkoMTApOwogCXNtcF9mcmVlX2xvd2NvcmUoY3B1KTsKIAlhdG9taWNfZGVjKCZpbml0X21tLmNvbnRleHQuYXR0YWNoX2NvdW50KTsKLQlwcl9pbmZvKCJQcm9jZXNzb3IgJWQgc3RvcHBlZFxuIiwgY3B1KTsKIH0KIAogdm9pZCBjcHVfZGllKHZvaWQpCkBAIC02ODQsMTQgKzY5OCwxMiBAQAogI2VuZGlmCiAJdW5zaWduZWQgbG9uZyBhc3luY19zdGFjaywgcGFuaWNfc3RhY2s7CiAJc3RydWN0IF9sb3djb3JlICpsb3djb3JlOwotCXVuc2lnbmVkIGludCBjcHU7CiAKIAlzbXBfZGV0ZWN0X2NwdXMoKTsKIAogCS8qIHJlcXVlc3QgdGhlIDB4MTIwMSBlbWVyZ2VuY3kgc2lnbmFsIGV4dGVybmFsIGludGVycnVwdCAqLwogCWlmIChyZWdpc3Rlcl9leHRlcm5hbF9pbnRlcnJ1cHQoMHgxMjAxLCBkb19leHRfY2FsbF9pbnRlcnJ1cHQpICE9IDApCiAJCXBhbmljKCJDb3VsZG4ndCByZXF1ZXN0IGV4dGVybmFsIGludGVycnVwdCAweDEyMDEiKTsKLQlwcmludF9jcHVfaW5mbygpOwogCiAJLyogUmVhbGxvY2F0ZSBjdXJyZW50IGxvd2NvcmUsIGJ1dCBrZWVwIGl0cyBjb250ZW50cy4gKi8KIAlsb3djb3JlID0gKHZvaWQgKikgX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMIHwgR0ZQX0RNQSwgTENfT1JERVIpOwpAQCAtNzE5LDkgKzczMSw2IEBACiAJaWYgKHZkc29fYWxsb2NfcGVyX2NwdShzbXBfcHJvY2Vzc29yX2lkKCksICZTMzkwX2xvd2NvcmUpKQogCQlCVUcoKTsKICNlbmRpZgotCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpCi0JCWlmIChjcHUgIT0gc21wX3Byb2Nlc3Nvcl9pZCgpKQotCQkJc21wX2NyZWF0ZV9pZGxlKGNwdSk7CiB9CiAKIHZvaWQgX19pbml0IHNtcF9wcmVwYXJlX2Jvb3RfY3B1KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3RpbWUuYyBiL2FyY2gvczM5MC9rZXJuZWwvdGltZS5jCmluZGV4IGY3NTRhNmQuLjllN2IwMzkgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvdGltZS5jCkBAIC0xNSw2ICsxNSw3IEBACiAjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJ0aW1lIgogI2RlZmluZSBwcl9mbXQoZm10KSBLTVNHX0NPTVBPTkVOVCAiOiAiIGZtdAogCisjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CkBAIC0zNyw2ICszOCw3IEBACiAjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KICNpbmNsdWRlIDxsaW51eC9jbG9ja2NoaXBzLmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZwLmg+CisjaW5jbHVkZSA8bGludXgva3Byb2Jlcy5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2RlbGF5Lmg+CiAjaW5jbHVkZSA8YXNtL3MzOTBfZXh0Lmg+CkBAIC02MCw3ICs2Miw3IEBACiAvKgogICogU2NoZWR1bGVyIGNsb2NrIC0gcmV0dXJucyBjdXJyZW50IHRpbWUgaW4gbmFub3NlYyB1bml0cy4KICAqLwotdW5zaWduZWQgbG9uZyBsb25nIG5vdHJhY2Ugc2NoZWRfY2xvY2sodm9pZCkKK3Vuc2lnbmVkIGxvbmcgbG9uZyBub3RyYWNlIF9fa3Byb2JlcyBzY2hlZF9jbG9jayh2b2lkKQogewogCXJldHVybiAoZ2V0X2Nsb2NrX21vbm90b25pYygpICogMTI1KSA+PiA5OwogfQpAQCAtMTU5LDYgKzE2MSw3IEBACiAJCQkJICAgICAgIHVuc2lnbmVkIGludCBwYXJhbTMyLAogCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIHBhcmFtNjQpCiB7CisJa3N0YXRfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSkuaXJxc1tFWFRJTlRfQ0xLXSsrOwogCWlmIChTMzkwX2xvd2NvcmUuY2xvY2tfY29tcGFyYXRvciA9PSAtMVVMTCkKIAkJc2V0X2Nsb2NrX2NvbXBhcmF0b3IoUzM5MF9sb3djb3JlLmNsb2NrX2NvbXBhcmF0b3IpOwogfQpAQCAtMTY5LDYgKzE3Miw3IEBACiBzdGF0aWMgdm9pZCB0aW1pbmdfYWxlcnRfaW50ZXJydXB0KHVuc2lnbmVkIGludCBleHRfaW50X2NvZGUsCiAJCQkJICAgdW5zaWduZWQgaW50IHBhcmFtMzIsIHVuc2lnbmVkIGxvbmcgcGFyYW02NCkKIHsKKwlrc3RhdF9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpKS5pcnFzW0VYVElOVF9UTEFdKys7CiAJaWYgKHBhcmFtMzIgJiAweDAwYzQwMDAwKQogCQlldHJfdGltaW5nX2FsZXJ0KChzdHJ1Y3QgZXRyX2lycV9wYXJtICopICZwYXJhbTMyKTsKIAlpZiAocGFyYW0zMiAmIDB4MDAwMzgwMDApCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3RyYXBzLmMgYi9hcmNoL3MzOTAva2VybmVsL3RyYXBzLmMKaW5kZXggNzA2NDA4Mi4uNWViNzhkZCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvdHJhcHMuYwpAQCAtMzY1LDEyICszNjUsMTAgQEAKIAkJKChyZWdzLT5wc3cuYWRkciAtIChwZ21faW50X2NvZGUgPj4gMTYpKSAmIFBTV19BRERSX0lOU04pOwogfQogCi12b2lkIF9fa3Byb2JlcyBkb19zaW5nbGVfc3RlcChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3ZvaWQgX19rcHJvYmVzIGRvX3Blcl90cmFwKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCWlmIChub3RpZnlfZGllKERJRV9TU1RFUCwgInNzdGVwIiwgcmVncywgMCwgMCwKLQkJCQkJU0lHVFJBUCkgPT0gTk9USUZZX1NUT1ApeworCWlmIChub3RpZnlfZGllKERJRV9TU1RFUCwgInNzdGVwIiwgcmVncywgMCwgMCwgU0lHVFJBUCkgPT0gTk9USUZZX1NUT1ApCiAJCXJldHVybjsKLQl9CiAJaWYgKHRyYWNlaG9va19jb25zaWRlcl9mYXRhbF9zaWduYWwoY3VycmVudCwgU0lHVFJBUCkpCiAJCWZvcmNlX3NpZyhTSUdUUkFQLCBjdXJyZW50KTsKIH0KQEAgLTQ1MSw4ICs0NDksOCBAQAogCQkiZmxvYXRpbmcgcG9pbnQgZXhjZXB0aW9uIiwgcmVncywgJnNpKTsKIH0KIAotc3RhdGljIHZvaWQgaWxsZWdhbF9vcChzdHJ1Y3QgcHRfcmVncyAqcmVncywgbG9uZyBwZ21faW50X2NvZGUsCi0JCSAgICAgICB1bnNpZ25lZCBsb25nIHRyYW5zX2V4Y19jb2RlKQorc3RhdGljIHZvaWQgX19rcHJvYmVzIGlsbGVnYWxfb3Aoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGxvbmcgcGdtX2ludF9jb2RlLAorCQkJCSB1bnNpZ25lZCBsb25nIHRyYW5zX2V4Y19jb2RlKQogewogCXNpZ2luZm9fdCBpbmZvOwogICAgICAgICBfX3U4IG9wY29kZVs2XTsKQEAgLTY4OCw3ICs2ODYsNyBAQAogCWRvX3RyYXAocGdtX2ludF9jb2RlLCBTSUdJTEwsICJzcGFjZSBzd2l0Y2ggZXZlbnQiLCByZWdzLCAmaW5mbyk7CiB9CiAKLWFzbWxpbmthZ2Ugdm9pZCBrZXJuZWxfc3RhY2tfb3ZlcmZsb3coc3RydWN0IHB0X3JlZ3MgKiByZWdzKQorYXNtbGlua2FnZSB2b2lkIF9fa3Byb2JlcyBrZXJuZWxfc3RhY2tfb3ZlcmZsb3coc3RydWN0IHB0X3JlZ3MgKiByZWdzKQogewogCWJ1c3Rfc3BpbmxvY2tzKDEpOwogCXByaW50aygiS2VybmVsIHN0YWNrIG92ZXJmbG93LlxuIik7CkBAIC03MzMsNSArNzMxLDYgQEAKICAgICAgICAgcGdtX2NoZWNrX3RhYmxlWzB4MTVdID0gJm9wZXJhbmRfZXhjZXB0aW9uOwogICAgICAgICBwZ21fY2hlY2tfdGFibGVbMHgxQ10gPSAmc3BhY2Vfc3dpdGNoX2V4Y2VwdGlvbjsKICAgICAgICAgcGdtX2NoZWNrX3RhYmxlWzB4MURdID0gJmhmcF9zcXJ0X2V4Y2VwdGlvbjsKLQlwZmF1bHRfaXJxX2luaXQoKTsKKwkvKiBFbmFibGUgbWFjaGluZSBjaGVja3MgZWFybHkuICovCisJbG9jYWxfbWNja19lbmFibGUoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdnRpbWUuYyBiL2FyY2gvczM5MC9rZXJuZWwvdnRpbWUuYwppbmRleCA3ZWZmOWI3Li4xY2NkZjRkIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3Z0aW1lLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC92dGltZS5jCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KICNpbmNsdWRlIDxsaW51eC9wb3NpeC10aW1lcnMuaD4KICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9rcHJvYmVzLmg+CiAKICNpbmNsdWRlIDxhc20vczM5MF9leHQuaD4KICNpbmNsdWRlIDxhc20vdGltZXIuaD4KQEAgLTEyMiw3ICsxMjMsNyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoYWNjb3VudF9zeXN0ZW1fdnRpbWUpOwogCi12b2lkIHZ0aW1lX3N0YXJ0X2NwdShfX3U2NCBpbnRfY2xvY2ssIF9fdTY0IGVudGVyX3RpbWVyKQordm9pZCBfX2twcm9iZXMgdnRpbWVfc3RhcnRfY3B1KF9fdTY0IGludF9jbG9jaywgX191NjQgZW50ZXJfdGltZXIpCiB7CiAJc3RydWN0IHMzOTBfaWRsZV9kYXRhICppZGxlID0gJl9fZ2V0X2NwdV92YXIoczM5MF9pZGxlKTsKIAlzdHJ1Y3QgdnRpbWVyX3F1ZXVlICp2cSA9ICZfX2dldF9jcHVfdmFyKHZpcnRfY3B1X3RpbWVyKTsKQEAgLTE2Miw3ICsxNjMsNyBAQAogCWlkbGUtPnNlcXVlbmNlKys7CiB9CiAKLXZvaWQgdnRpbWVfc3RvcF9jcHUodm9pZCkKK3ZvaWQgX19rcHJvYmVzIHZ0aW1lX3N0b3BfY3B1KHZvaWQpCiB7CiAJc3RydWN0IHMzOTBfaWRsZV9kYXRhICppZGxlID0gJl9fZ2V0X2NwdV92YXIoczM5MF9pZGxlKTsKIAlzdHJ1Y3QgdnRpbWVyX3F1ZXVlICp2cSA9ICZfX2dldF9jcHVfdmFyKHZpcnRfY3B1X3RpbWVyKTsKQEAgLTMyMyw2ICszMjQsNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQgY2JfbGlzdDsJLyogdGhlIGNhbGxiYWNrIHF1ZXVlICovCiAJX191NjQgZWxhcHNlZCwgbmV4dDsKIAorCWtzdGF0X2NwdShzbXBfcHJvY2Vzc29yX2lkKCkpLmlycXNbRVhUSU5UX1RNUl0rKzsKIAlJTklUX0xJU1RfSEVBRCgmY2JfbGlzdCk7CiAJdnEgPSAmX19nZXRfY3B1X3Zhcih2aXJ0X2NwdV90aW1lcik7CiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vS2NvbmZpZyBiL2FyY2gvczM5MC9rdm0vS2NvbmZpZwppbmRleCBhNzI1MTU4Li5mNjZhMWJkIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL0tjb25maWcKKysrIGIvYXJjaC9zMzkwL2t2bS9LY29uZmlnCkBAIC00LDggKzQsOCBAQAogc291cmNlICJ2aXJ0L2t2bS9LY29uZmlnIgogCiBtZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OCi0JYm9vbCAiVmlydHVhbGl6YXRpb24iCi0JZGVmYXVsdCB5CisJZGVmX2Jvb2wgeQorCXByb21wdCAiVmlydHVhbGl6YXRpb24iCiAJLS0taGVscC0tLQogCSAgU2F5IFkgaGVyZSB0byBnZXQgdG8gc2VlIG9wdGlvbnMgZm9yIHVzaW5nIHlvdXIgTGludXggaG9zdCB0byBydW4gb3RoZXIKIAkgIG9wZXJhdGluZyBzeXN0ZW1zIGluc2lkZSB2aXJ0dWFsIG1hY2hpbmVzIChndWVzdHMpLgpAQCAtMTYsNyArMTYsOCBAQAogaWYgVklSVFVBTElaQVRJT04KIAogY29uZmlnIEtWTQotCXRyaXN0YXRlICJLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnQiCisJZGVmX3RyaXN0YXRlIHkKKwlwcm9tcHQgIktlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIEhBVkVfS1ZNICYmIEVYUEVSSU1FTlRBTAogCXNlbGVjdCBQUkVFTVBUX05PVElGSUVSUwogCXNlbGVjdCBBTk9OX0lOT0RFUwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2xpYi9kZWxheS5jIGIvYXJjaC9zMzkwL2xpYi9kZWxheS5jCmluZGV4IDdjMzdlYzMuLjBmNTMxMTAgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9saWIvZGVsYXkuYworKysgYi9hcmNoL3MzOTAvbGliL2RlbGF5LmMKQEAgLTQ3LDcgKzQ3LDYgQEAKIAlsb2NrZGVwX29uKCk7CiAJX19jdGxfbG9hZChjcjBfc2F2ZWQsIDAsIDApOwogCWxvY2FsX3RpY2tfZW5hYmxlKGNsb2NrX3NhdmVkKTsKLQlzZXRfY2xvY2tfY29tcGFyYXRvcihTMzkwX2xvd2NvcmUuY2xvY2tfY29tcGFyYXRvcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fdWRlbGF5X2VuYWJsZWQodW5zaWduZWQgbG9uZyBsb25nIHVzZWNzKQpAQCAtNzAsNyArNjksNiBAQAogCQlpZiAoY2xvY2tfc2F2ZWQpCiAJCQlsb2NhbF90aWNrX2VuYWJsZShjbG9ja19zYXZlZCk7CiAJfSB3aGlsZSAoZ2V0X2Nsb2NrKCkgPCBlbmQpOwotCXNldF9jbG9ja19jb21wYXJhdG9yKFMzOTBfbG93Y29yZS5jbG9ja19jb21wYXJhdG9yKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9mYXVsdC5jIGIvYXJjaC9zMzkwL21tL2ZhdWx0LmMKaW5kZXggZmU1NzAxZS4uMmM1NzgwNiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL21tL2ZhdWx0LmMKKysrIGIvYXJjaC9zMzkwL21tL2ZhdWx0LmMKQEAgLTEwLDYgKzEwLDcgQEAKICAqICAgIENvcHlyaWdodCAoQykgMTk5NSAgTGludXMgVG9ydmFsZHMKICAqLwogCisjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KICNpbmNsdWRlIDxsaW51eC9wZXJmX2V2ZW50Lmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KQEAgLTIzNCwxMyArMjM1LDEzIEBACiAJcmMgPSBfX2dldF91c2VyKGluc3RydWN0aW9uLCAodTE2IF9fdXNlciAqKSByZWdzLT5wc3cuYWRkcik7CiAKIAlpZiAoIXJjICYmIGluc3RydWN0aW9uID09IDB4MGE3NykgewotCQljbGVhcl90c2tfdGhyZWFkX2ZsYWcoY3VycmVudCwgVElGX1NJTkdMRV9TVEVQKTsKKwkJY2xlYXJfdHNrX3RocmVhZF9mbGFnKGN1cnJlbnQsIFRJRl9QRVJfVFJBUCk7CiAJCWlmIChpc19jb21wYXRfdGFzaygpKQogCQkJc3lzMzJfc2lncmV0dXJuKCk7CiAJCWVsc2UKIAkJCXN5c19zaWdyZXR1cm4oKTsKIAl9IGVsc2UgaWYgKCFyYyAmJiBpbnN0cnVjdGlvbiA9PSAweDBhYWQpIHsKLQkJY2xlYXJfdHNrX3RocmVhZF9mbGFnKGN1cnJlbnQsIFRJRl9TSU5HTEVfU1RFUCk7CisJCWNsZWFyX3Rza190aHJlYWRfZmxhZyhjdXJyZW50LCBUSUZfUEVSX1RSQVApOwogCQlpZiAoaXNfY29tcGF0X3Rhc2soKSkKIAkJCXN5czMyX3J0X3NpZ3JldHVybigpOwogCQllbHNlCkBAIC0zNzgsNyArMzc5LDcgQEAKIAkgKiBUaGUgaW5zdHJ1Y3Rpb24gdGhhdCBjYXVzZWQgdGhlIHByb2dyYW0gY2hlY2sgd2lsbAogCSAqIGJlIHJlcGVhdGVkLiBEb24ndCBzaWduYWwgc2luZ2xlIHN0ZXAgdmlhIFNJR1RSQVAuCiAJICovCi0JY2xlYXJfdHNrX3RocmVhZF9mbGFnKHRzaywgVElGX1NJTkdMRV9TVEVQKTsKKwljbGVhcl90c2tfdGhyZWFkX2ZsYWcodHNrLCBUSUZfUEVSX1RSQVApOwogCWZhdWx0ID0gMDsKIG91dF91cDoKIAl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOwpAQCAtNDgwLDggKzQ4MSw3IEBACiAvKgogICogJ3BmYXVsdCcgcHNldWRvIHBhZ2UgZmF1bHRzIHJvdXRpbmVzLgogICovCi1zdGF0aWMgZXh0X2ludF9pbmZvX3QgZXh0X2ludF9wZmF1bHQ7Ci1zdGF0aWMgaW50IHBmYXVsdF9kaXNhYmxlID0gMDsKK3N0YXRpYyBpbnQgcGZhdWx0X2Rpc2FibGU7CiAKIHN0YXRpYyBpbnQgX19pbml0IG5vcGZhdWx0KGNoYXIgKnN0cikKIHsKQEAgLTU0Myw2ICs1NDMsNyBAQAogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrOwogCV9fdTE2IHN1YmNvZGU7CiAKKwlrc3RhdF9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpKS5pcnFzW0VYVElOVF9QRkxdKys7CiAJLyoKIAkgKiBHZXQgdGhlIGV4dGVybmFsIGludGVycnVwdGlvbiBzdWJjb2RlICYgcGZhdWx0CiAJICogaW5pdGlhbC9jb21wbGV0aW9uIHNpZ25hbCBiaXQuIFZNIHN0b3JlcyB0aGlzIApAQCAtNTkyLDI0ICs1OTMsMjggQEAKIAl9CiB9CiAKLXZvaWQgX19pbml0IHBmYXVsdF9pcnFfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgcGZhdWx0X2lycV9pbml0KHZvaWQpCiB7Ci0JaWYgKCFNQUNISU5FX0lTX1ZNKQotCQlyZXR1cm47CisJaW50IHJjOwogCisJaWYgKCFNQUNISU5FX0lTX1ZNKQorCQlyZXR1cm4gMDsKIAkvKgogCSAqIFRyeSB0byBnZXQgcGZhdWx0IHBzZXVkbyBwYWdlIGZhdWx0cyBnb2luZy4KIAkgKi8KLQlpZiAocmVnaXN0ZXJfZWFybHlfZXh0ZXJuYWxfaW50ZXJydXB0KDB4MjYwMywgcGZhdWx0X2ludGVycnVwdCwKLQkJCQkJICAgICAgJmV4dF9pbnRfcGZhdWx0KSAhPSAwKQotCQlwYW5pYygiQ291bGRuJ3QgcmVxdWVzdCBleHRlcm5hbCBpbnRlcnJ1cHQgMHgyNjAzIik7Ci0KKwlyYyA9IHJlZ2lzdGVyX2V4dGVybmFsX2ludGVycnVwdCgweDI2MDMsIHBmYXVsdF9pbnRlcnJ1cHQpOworCWlmIChyYykgeworCQlwZmF1bHRfZGlzYWJsZSA9IDE7CisJCXJldHVybiByYzsKKwl9CiAJaWYgKHBmYXVsdF9pbml0KCkgPT0gMCkKLQkJcmV0dXJuOworCQlyZXR1cm4gMDsKIAogCS8qIFRvdWdoIGx1Y2ssIG5vIHBmYXVsdC4gKi8KIAlwZmF1bHRfZGlzYWJsZSA9IDE7Ci0JdW5yZWdpc3Rlcl9lYXJseV9leHRlcm5hbF9pbnRlcnJ1cHQoMHgyNjAzLCBwZmF1bHRfaW50ZXJydXB0LAotCQkJCQkgICAgJmV4dF9pbnRfcGZhdWx0KTsKKwl1bnJlZ2lzdGVyX2V4dGVybmFsX2ludGVycnVwdCgweDI2MDMsIHBmYXVsdF9pbnRlcnJ1cHQpOworCXJldHVybiAwOwogfQorZWFybHlfaW5pdGNhbGwocGZhdWx0X2lycV9pbml0KTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3NoL0tjb25maWcgYi9hcmNoL3NoL0tjb25maWcKaW5kZXggMmU5ZDc4ZC4uZmZmMjUyMiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9LY29uZmlnCisrKyBiL2FyY2gvc2gvS2NvbmZpZwpAQCAtMSw3ICsxLDcgQEAKIGNvbmZpZyBTVVBFUkgKIAlkZWZfYm9vbCB5CiAJc2VsZWN0IEVNQkVEREVECi0Jc2VsZWN0IEhBVkVfQ0xLCisJc2VsZWN0IENMS0RFVl9MT09LVVAKIAlzZWxlY3QgSEFWRV9JREUgaWYgSEFTX0lPUE9SVAogCXNlbGVjdCBIQVZFX01FTUJMT0NLCiAJc2VsZWN0IEhBVkVfT1BST0ZJTEUKQEAgLTE2Miw3ICsxNjIsOCBAQAogCWRlZl9ib29sIHkKIAogY29uZmlnIE5PX0lPUE9SVAotCWJvb2wKKwlkZWZfYm9vbCAhUENJCisJZGVwZW5kcyBvbiAhU0hfQ0FZTUFOICYmICFTSF9TSDQyMDJfTUlDUk9ERVYKIAogY29uZmlnIElPX1RSQVBQRUQKIAlib29sCkBAIC0yNzUsNiArMjc2LDcgQEAKIAlzZWxlY3QgQ1BVX0hBU19GUFUKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0NNVAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTVRVMgorCXNlbGVjdCBBUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQgogCiBjb25maWcgQ1BVX1NVQlRZUEVfU0g3MjA2CiAJYm9vbCAiU3VwcG9ydCBTSDcyMDYgcHJvY2Vzc29yIgpAQCAtMzQ2LDYgKzM0OCw4IEBACiAJc2VsZWN0IENQVV9TSDMKIAlzZWxlY3QgQ1BVX0hBU19EU1AKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0NNVAorCXNlbGVjdCBBUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQgorCXNlbGVjdCBVU0JfQVJDSF9IQVNfT0hDSQogCWhlbHAKIAkgIFNlbGVjdCBTSDc3MjAgaWYgeW91IGhhdmUgYSBTSDMtRFNQIFNINzcyMCBDUFUuCiAKQEAgLTM1NCw2ICszNTgsNyBAQAogCXNlbGVjdCBDUFVfU0gzCiAJc2VsZWN0IENQVV9IQVNfRFNQCiAJc2VsZWN0IFNZU19TVVBQT1JUU19DTVQKKwlzZWxlY3QgVVNCX0FSQ0hfSEFTX09IQ0kKIAloZWxwCiAJICBTZWxlY3QgU0g3NzIxIGlmIHlvdSBoYXZlIGEgU0gzLURTUCBTSDc3MjEgQ1BVLgogCkBAIC00MDgsNiArNDEzLDcgQEAKIAlzZWxlY3QgQVJDSF9TSE1PQklMRQogCXNlbGVjdCBBUkNIX1NQQVJTRU1FTV9FTkFCTEUKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0NNVAorCXNlbGVjdCBBUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQgogCWhlbHAKIAkgIFNlbGVjdCBTSDc3MjMgaWYgeW91IGhhdmUgYW4gU0gtTW9iaWxlUjIgQ1BVLgogCkBAIC00MTgsNiArNDI0LDcgQEAKIAlzZWxlY3QgQVJDSF9TSE1PQklMRQogCXNlbGVjdCBBUkNIX1NQQVJTRU1FTV9FTkFCTEUKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0NNVAorCXNlbGVjdCBBUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQgogCWhlbHAKIAkgIFNlbGVjdCBTSDc3MjQgaWYgeW91IGhhdmUgYW4gU0gtTW9iaWxlUjJSIENQVS4KIApAQCAtNDI1LDEyICs0MzIsMTQgQEAKIAlib29sICJTdXBwb3J0IFNINzc1NyBwcm9jZXNzb3IiCiAJc2VsZWN0IENQVV9TSDRBCiAJc2VsZWN0IENQVV9TSFgyCisJc2VsZWN0IEFSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCCiAJaGVscAogCSAgU2VsZWN0IFNINzc1NyBpZiB5b3UgaGF2ZSBhIFNINEEgU0g3NzU3IENQVS4KIAogY29uZmlnIENQVV9TVUJUWVBFX1NINzc2MwogCWJvb2wgIlN1cHBvcnQgU0g3NzYzIHByb2Nlc3NvciIKIAlzZWxlY3QgQ1BVX1NINEEKKwlzZWxlY3QgVVNCX0FSQ0hfSEFTX09IQ0kKIAloZWxwCiAJICBTZWxlY3QgU0g3NzYzIGlmIHlvdSBoYXZlIGEgU0g0QSBTSDc3NjMoUjVTNzc2MzEpIENQVS4KIApAQCAtNDQ4LDYgKzQ1Nyw3IEBACiAJc2VsZWN0IENQVV9TSFgyCiAJc2VsZWN0IEFSQ0hfU1BBUlNFTUVNX0VOQUJMRQogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTlVNQQorCXNlbGVjdCBBUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQgogCiBjb25maWcgQ1BVX1NVQlRZUEVfU0g3Nzg2CiAJYm9vbCAiU3VwcG9ydCBTSDc3ODYgcHJvY2Vzc29yIgpAQCAtNDU1LDYgKzQ2NSw5IEBACiAJc2VsZWN0IENQVV9TSFgzCiAJc2VsZWN0IENQVV9IQVNfUFRFQUVYCiAJc2VsZWN0IEdFTkVSSUNfQ0xPQ0tFVkVOVFNfQlJPQURDQVNUIGlmIFNNUAorCXNlbGVjdCBBUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQgorCXNlbGVjdCBVU0JfQVJDSF9IQVNfT0hDSQorCXNlbGVjdCBVU0JfQVJDSF9IQVNfRUhDSQogCiBjb25maWcgQ1BVX1NVQlRZUEVfU0hYMwogCWJvb2wgIlN1cHBvcnQgU0gtWDMgcHJvY2Vzc29yIgpAQCAtNDc5LDYgKzQ5Miw3IEBACiAJc2VsZWN0IEFSQ0hfU1BBUlNFTUVNX0VOQUJMRQogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTlVNQQogCXNlbGVjdCBTWVNfU1VQUE9SVFNfQ01UCisJc2VsZWN0IEFSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCCiAKIGNvbmZpZyBDUFVfU1VCVFlQRV9TSDczNjYKIAlib29sICJTdXBwb3J0IFNINzM2NiBwcm9jZXNzb3IiCkBAIC01NjgsMTUgKzU4Miw2IEBACiAJZGVmX2Jvb2wgeSBpZiAhQ1BVX1NVQlRZUEVfU0g3Nzg1ICYmICFBUkNIX1NITU9CSUxFICYmIFwKIAkJICAgICAgIUNQVV9TSFgzICYmICFDUFVfU1VCVFlQRV9TSDc3NTcKIAotY29uZmlnIFNIX0NMS19NRAotCWludCAiQ1BVIE1vZGUgUGluIFNldHRpbmciCi0JZGVwZW5kcyBvbiBDUFVfU0gyCi0JZGVmYXVsdCA2IGlmIENQVV9TVUJUWVBFX1NINzIwNgotCWRlZmF1bHQgNSBpZiBDUFVfU1VCVFlQRV9TSDc2MTkKLQlkZWZhdWx0IDAKLQloZWxwCi0JICBNRDIgLSBNRDAgcGluIHNldHRpbmcuCi0KIHNvdXJjZSAia2VybmVsL3RpbWUvS2NvbmZpZyIKIAogZW5kbWVudQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtc2VjdXJlZWRnZTU0MTAuYyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLXNlY3VyZWVkZ2U1NDEwLmMKaW5kZXggMzJmODc1ZS4uZjk2OGYxNyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtc2VjdXJlZWRnZTU0MTAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC1zZWN1cmVlZGdlNTQxMC5jCkBAIC0yOSw4ICsyOSw2IEBACiAgKi8KIHN0YXRpYyBpcnFyZXR1cm5fdCBlcmFzZWNvbmZpZ19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewotCWN0cmxfZGVsYXkoKTsJLyogZHVtbXkgcmVhZCAqLwotCiAJcHJpbnRrKCJTbmFwR2VhcjogZXJhc2Ugc3dpdGNoIGludGVycnVwdCFcbiIpOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvc2V0dXAuYwppbmRleCBhNWVjZmJhLi44NzYxOGM5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvc2V0dXAuYwpAQCAtMjQsMTAgKzI0LDEwIEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL3I4YTY2NTk3Lmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL202NjU5Mi5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsa2Rldi5oPgogI2luY2x1ZGUgPG5ldC9heDg4Nzk2Lmg+CiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KICNpbmNsdWRlIDxtYWNoL2hpZ2hsYW5kZXIuaD4KLSNpbmNsdWRlIDxhc20vY2xrZGV2Lmg+CiAjaW5jbHVkZSA8YXNtL2Nsb2NrLmg+CiAjaW5jbHVkZSA8YXNtL2hlYXJ0YmVhdC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1yc2svZGV2aWNlcy1yc2s3MjAzLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXJzay9kZXZpY2VzLXJzazcyMDMuYwppbmRleCA0ZmEwOGJhLi5hODA4OWY3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXJzay9kZXZpY2VzLXJzazcyMDMuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXJzay9kZXZpY2VzLXJzazcyMDMuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBSZW5lc2FzIFRlY2hub2xvZ3kgRXVyb3BlIFJTSysgNzIwMyBTdXBwb3J0LgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBQYXVsIE11bmR0CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggLSAyMDEwICBQYXVsIE11bmR0CiAgKgogICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKQEAgLTEyLDcgKzEyLDkgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9zbXNjOTExeC5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW9fa2V5cy5oPgogI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KICNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpAQCAtODQsOSArODYsNDIgQEAKIAl9LAogfTsKIAorc3RhdGljIHN0cnVjdCBncGlvX2tleXNfYnV0dG9uIHJzazcyMDNfZ3Bpb19rZXlzX3RhYmxlW10gPSB7CisJeworCQkuY29kZQkJPSBCVE5fMCwKKwkJLmdwaW8JCT0gR1BJT19QQjAsCisJCS5hY3RpdmVfbG93CT0gMSwKKwkJLmRlc2MJCT0gIlNXMSIsCisJfSwgeworCQkuY29kZQkJPSBCVE5fMSwKKwkJLmdwaW8JCT0gR1BJT19QQjEsCisJCS5hY3RpdmVfbG93CT0gMSwKKwkJLmRlc2MJCT0gIlNXMiIsCisJfSwgeworCQkuY29kZQkJPSBCVE5fMiwKKwkJLmdwaW8JCT0gR1BJT19QQjIsCisJCS5hY3RpdmVfbG93CT0gMSwKKwkJLmRlc2MJCT0gIlNXMyIsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX3BsYXRmb3JtX2RhdGEgcnNrNzIwM19ncGlvX2tleXNfaW5mbyA9IHsKKwkuYnV0dG9ucwk9IHJzazcyMDNfZ3Bpb19rZXlzX3RhYmxlLAorCS5uYnV0dG9ucwk9IEFSUkFZX1NJWkUocnNrNzIwM19ncGlvX2tleXNfdGFibGUpLAorCS5wb2xsX2ludGVydmFsCT0gNTAsIC8qIGRlZmF1bHQgdG8gNTBtcyAqLworfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Uga2V5c19kZXZpY2UgPSB7CisJLm5hbWUJCT0gImdwaW8ta2V5cy1wb2xsZWQiLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZyc2s3MjAzX2dwaW9fa2V5c19pbmZvLAorCX0sCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcnNrNzIwM19kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmc21zYzkxMXhfZGV2aWNlLAogCSZsZWRfZGV2aWNlLAorCSZrZXlzX2RldmljZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHJzazcyMDNfZGV2aWNlc19zZXR1cCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZGs3Nzg2L01ha2VmaWxlIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZGs3Nzg2L01ha2VmaWxlCmluZGV4IDIzZmY3ZDQuLjhhZTU2ZTkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2RrNzc4Ni9NYWtlZmlsZQorKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNkazc3ODYvTWFrZWZpbGUKQEAgLTEsNCArMSw0IEBACi1vYmoteQk6PSBmcGdhLm8gaXJxLm8gc2V0dXAubworb2JqLXkJOj0gZnBnYS5vIGlycS5vIG5taS5vIHNldHVwLm8KIAogb2JqLSQoQ09ORklHX0dFTkVSSUNfR1BJTykJKz0gZ3Bpby5vCiBvYmotJChDT05GSUdfSEFWRV9TUkFNX1BPT0wpCSs9IHNyYW0ubwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZGs3Nzg2L25taS5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZGs3Nzg2L25taS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkY2ZhMWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNkazc3ODYvbm1pLmMKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIFNESzc3ODYgRlBHQSBOTUkgU3VwcG9ydC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgIFBhdWwgTXVuZHQKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxtYWNoL2ZwZ2EuaD4KKworZW51bSB7CisJTk1JX01PREVfTUFOVUFMLAorCU5NSV9NT0RFX0FVWCwKKwlOTUlfTU9ERV9NQVNLRUQsCisJTk1JX01PREVfQU5ZLAorCU5NSV9NT0RFX1VOS05PV04sCit9OworCisvKgorICogRGVmYXVsdCB0byB0aGUgbWFudWFsIE5NSSBzd2l0Y2guCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgX19pbml0ZGF0YSBubWlfbW9kZSA9IE5NSV9NT0RFX0FOWTsKKworc3RhdGljIGludCBfX2luaXQgbm1pX21vZGVfc2V0dXAoY2hhciAqc3RyKQoreworCWlmICghc3RyKQorCQlyZXR1cm4gMDsKKworCWlmIChzdHJjbXAoc3RyLCAibWFudWFsIikgPT0gMCkKKwkJbm1pX21vZGUgPSBOTUlfTU9ERV9NQU5VQUw7CisJZWxzZSBpZiAoc3RyY21wKHN0ciwgImF1eCIpID09IDApCisJCW5taV9tb2RlID0gTk1JX01PREVfQVVYOworCWVsc2UgaWYgKHN0cmNtcChzdHIsICJtYXNrZWQiKSA9PSAwKQorCQlubWlfbW9kZSA9IE5NSV9NT0RFX01BU0tFRDsKKwllbHNlIGlmIChzdHJjbXAoc3RyLCAiYW55IikgPT0gMCkKKwkJbm1pX21vZGUgPSBOTUlfTU9ERV9BTlk7CisJZWxzZSB7CisJCW5taV9tb2RlID0gTk1JX01PREVfVU5LTk9XTjsKKwkJcHJfd2FybmluZygiVW5rbm93biBOTUkgbW9kZSAlc1xuIiwgc3RyKTsKKwl9CisKKwlwcmludGsoIlNldCBOTUkgbW9kZSB0byAlZFxuIiwgbm1pX21vZGUpOworCXJldHVybiAwOworfQorZWFybHlfcGFyYW0oIm5taV9tb2RlIiwgbm1pX21vZGVfc2V0dXApOworCit2b2lkIF9faW5pdCBzZGs3Nzg2X25taV9pbml0KHZvaWQpCit7CisJdW5zaWduZWQgaW50IHNvdXJjZSwgbWFzaywgdG1wOworCisJc3dpdGNoIChubWlfbW9kZSkgeworCWNhc2UgTk1JX01PREVfTUFOVUFMOgorCQlzb3VyY2UgPSBOTUlTUl9NQU5fTk1JOworCQltYXNrID0gTk1JTVJfTUFOX05NSU07CisJCWJyZWFrOworCWNhc2UgTk1JX01PREVfQVVYOgorCQlzb3VyY2UgPSBOTUlTUl9BVVhfTk1JOworCQltYXNrID0gTk1JTVJfQVVYX05NSU07CisJCWJyZWFrOworCWNhc2UgTk1JX01PREVfQU5ZOgorCQlzb3VyY2UgPSBOTUlTUl9NQU5fTk1JIHwgTk1JU1JfQVVYX05NSTsKKwkJbWFzayA9IE5NSU1SX01BTl9OTUlNIHwgTk1JTVJfQVVYX05NSU07CisJCWJyZWFrOworCWNhc2UgTk1JX01PREVfTUFTS0VEOgorCWNhc2UgTk1JX01PREVfVU5LTk9XTjoKKwlkZWZhdWx0OgorCQlzb3VyY2UgPSBtYXNrID0gMDsKKwkJYnJlYWs7CisJfQorCisJLyogU2V0IHRoZSBOTUkgc291cmNlICovCisJdG1wID0gZnBnYV9yZWFkX3JlZyhOTUlTUik7CisJdG1wICY9IH5OTUlTUl9NQVNLOworCXRtcCB8PSBzb3VyY2U7CisJZnBnYV93cml0ZV9yZWcodG1wLCBOTUlTUik7CisKKwkvKiBBbmQgdGhlIElSUSBtYXNraW5nICovCisJZnBnYV93cml0ZV9yZWcoTk1JTVJfTUFTSyBeIG1hc2ssIE5NSU1SKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2RrNzc4Ni9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZGs3Nzg2L3NldHVwLmMKaW5kZXggN2UwYzRlMy4uNzVlNGRkYiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZGs3Nzg2L3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZGs3Nzg2L3NldHVwLmMKQEAgLTIzNyw2ICsyMzcsNyBAQAogCXByX2luZm8oIlJlbmVzYXMgVGVjaG5vbG9neSBFdXJvcGUgU0RLNzc4NiBzdXBwb3J0OlxuIik7CiAKIAlzZGs3Nzg2X2ZwZ2FfaW5pdCgpOworCXNkazc3ODZfbm1pX2luaXQoKTsKIAogCXByX2luZm8oIlx0UENCIHJldmlzaW9uOlx0JWRcbiIsIGZwZ2FfcmVhZF9yZWcoUENCUlIpICYgMHhmKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83MjA2L3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzcyMDYvc2V0dXAuYwppbmRleCA3ZjQ4NzFjLi4zMzAzOWUwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzcyMDYvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzcyMDYvc2V0dXAuYwpAQCAtNzksNiArNzksMTEgQEAKIH0KIF9faW5pdGNhbGwoc2U3MjA2X2RldmljZXNfc2V0dXApOwogCitzdGF0aWMgaW50IHNlNzIwNl9tb2RlX3BpbnModm9pZCkKK3sKKwlyZXR1cm4gTU9ERV9QSU4xIHwgTU9ERV9QSU4yOworfQorCiAvKgogICogVGhlIE1hY2hpbmUgVmVjdG9yCiAgKi8KQEAgLTg3LDQgKzkyLDUgQEAKIAkubXZfbmFtZQkJPSAiU29sdXRpb25FbmdpbmUiLAogCS5tdl9ucl9pcnFzCQk9IDI1NiwKIAkubXZfaW5pdF9pcnEJCT0gaW5pdF9zZTcyMDZfSVJRLAorCS5tdl9tb2RlX3BpbnMJCT0gc2U3MjA2X21vZGVfcGlucywKIH07CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlL2JvYXJkLXNlNzYxOS5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS9ib2FyZC1zZTc2MTkuYwppbmRleCAxZDBlZjdmLi44MmI2ZDRhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlL2JvYXJkLXNlNzYxOS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvYm9hcmQtc2U3NjE5LmMKQEAgLTExLDYgKzExLDExIEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KIAorc3RhdGljIGludCBzZTc2MTlfbW9kZV9waW5zKHZvaWQpCit7CisJcmV0dXJuIE1PREVfUElOMiB8IE1PREVfUElOMDsKK30KKwogLyoKICAqIFRoZSBNYWNoaW5lIFZlY3RvcgogICovCkBAIC0xOCw0ICsyMyw1IEBACiBzdGF0aWMgc3RydWN0IHNoX21hY2hpbmVfdmVjdG9yIG12X3NlIF9faW5pdG12ID0gewogCS5tdl9uYW1lCQk9ICJTb2x1dGlvbkVuZ2luZSIsCiAJLm12X25yX2lycXMJCT0gMTA4LAorCS5tdl9tb2RlX3BpbnMJCT0gc2U3NjE5X21vZGVfcGlucywKIH07CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvbWlnb3JfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL21pZ29yX2RlZmNvbmZpZwppbmRleCA5YWQ5MDRhLi5jYzYxZWRhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvbWlnb3JfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9taWdvcl9kZWZjb25maWcKQEAgLTU0LDYgKzU0LDggQEAKICMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKIENPTkZJR19LRVlCT0FSRF9TSF9LRVlTQz15CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQorQ09ORklHX1RPVUNIU0NSRUVOX01JR09SPXkKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkc9eQogQ09ORklHX1NFUklBTF9TSF9TQ0k9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2kuYyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLmMKaW5kZXggNjBlZTA5YS4uYTA5Yzc3ZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2kuYworKysgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS5jCkBAIC0zODIsMTQgKzM4MiwxMyBAQAogCXN0cnVjdCBwY2lfY2hhbm5lbCAqY2hhbiA9IGRldi0+c3lzZGF0YTsKIAogCWlmICh1bmxpa2VseSghY2hhbi0+aW9fbWFwX2Jhc2UpKSB7Ci0JCWNoYW4tPmlvX21hcF9iYXNlID0gZ2VuZXJpY19pb19iYXNlOworCQljaGFuLT5pb19tYXBfYmFzZSA9IHNoX2lvX3BvcnRfYmFzZTsKIAogCQlpZiAocGNpX2RvbWFpbnNfc3VwcG9ydGVkKQogCQkJcGFuaWMoIlRvIGF2b2lkIGRhdGEgY29ycnVwdGlvbiBpb19tYXBfYmFzZSBNVVNUIGJlICIKIAkJCSAgICAgICJzZXQgd2l0aCBtdWx0aXBsZSBQQ0kgZG9tYWlucy4iKTsKIAl9CiAKLQogCXJldHVybiAodm9pZCBfX2lvbWVtICopKGNoYW4tPmlvX21hcF9iYXNlICsgcG9ydCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9wdXNoLXN3aXRjaC5jIGIvYXJjaC9zaC9kcml2ZXJzL3B1c2gtc3dpdGNoLmMKaW5kZXggN2I0MmMyNC4uYWZjMjQ1NSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL3B1c2gtc3dpdGNoLmMKKysrIGIvYXJjaC9zaC9kcml2ZXJzL3B1c2gtc3dpdGNoLmMKQEAgLTEwNyw3ICsxMDcsNyBAQAogCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnBkZXYtPmRldiwgJmRldl9hdHRyX3N3aXRjaCk7CiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCWZsdXNoX3dvcmtfc3luYygmcHN3LT53b3JrKTsKIAlkZWxfdGltZXJfc3luYygmcHN3LT5kZWJvdW5jZSk7CiAJZnJlZV9pcnEoaXJxLCBwZGV2KTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9jbGtkZXYuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vY2xrZGV2LmgKaW5kZXggNTY0NWYzNS4uNmJhOTE4NiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9jbGtkZXYuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2Nsa2Rldi5oCkBAIC0xLDkgKzEsNSBAQAogLyoKLSAqICBhcmNoL3NoL2luY2x1ZGUvYXNtL2Nsa2Rldi5oCi0gKgotICogQ2xvbmVkIGZyb20gYXJjaC9hcm0vaW5jbHVkZS9hc20vY2xrZGV2Lmg6Ci0gKgotICogIENvcHlyaWdodCAoQykgMjAwOCBSdXNzZWxsIEtpbmcuCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIFBhdWwgTXVuZHQgPGxldGhhbEBsaW51eC1zaC5vcmc+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCkBAIC0xMSwyNSArNywyNSBAQAogICoKICAqIEhlbHBlciBmb3IgdGhlIGNsayBBUEkgdG8gYXNzaXN0IGxvb2tpbmcgdXAgYSBzdHJ1Y3QgY2xrLgogICovCi0jaWZuZGVmIF9fQVNNX0NMS0RFVl9ICi0jZGVmaW5lIF9fQVNNX0NMS0RFVl9ICiAKLXN0cnVjdCBjbGs7CisjaWZuZGVmIF9fQ0xLREVWX19IXworI2RlZmluZSBfX0NMS0RFVl9fSF8KIAotc3RydWN0IGNsa19sb29rdXAgewotCXN0cnVjdCBsaXN0X2hlYWQJbm9kZTsKLQljb25zdCBjaGFyCQkqZGV2X2lkOwotCWNvbnN0IGNoYXIJCSpjb25faWQ7Ci0Jc3RydWN0IGNsawkJKmNsazsKLX07CisjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogCi1zdHJ1Y3QgY2xrX2xvb2t1cCAqY2xrZGV2X2FsbG9jKHN0cnVjdCBjbGsgKmNsaywgY29uc3QgY2hhciAqY29uX2lkLAotCWNvbnN0IGNoYXIgKmRldl9mbXQsIC4uLik7CisjaW5jbHVkZSA8YXNtL2Nsb2NrLmg+CiAKLXZvaWQgY2xrZGV2X2FkZChzdHJ1Y3QgY2xrX2xvb2t1cCAqY2wpOwotdm9pZCBjbGtkZXZfZHJvcChzdHJ1Y3QgY2xrX2xvb2t1cCAqY2wpOworc3RhdGljIGlubGluZSBzdHJ1Y3QgY2xrX2xvb2t1cF9hbGxvYyAqX19jbGtkZXZfYWxsb2Moc2l6ZV90IHNpemUpCit7CisJaWYgKCFzbGFiX2lzX2F2YWlsYWJsZSgpKQorCQlyZXR1cm4gYWxsb2NfYm9vdG1lbV9sb3dfcGFnZXMoc2l6ZSk7CisJZWxzZQorCQlyZXR1cm4ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKK30KIAotdm9pZCBjbGtkZXZfYWRkX3RhYmxlKHN0cnVjdCBjbGtfbG9va3VwICosIHNpemVfdCk7Ci1pbnQgY2xrX2FkZF9hbGlhcyhjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY2hhciAqLCBzdHJ1Y3QgZGV2aWNlICopOworI2RlZmluZSBfX2Nsa19wdXQoY2xrKQorI2RlZmluZSBfX2Nsa19nZXQoY2xrKSAoeyAxOyB9KQogCi0jZW5kaWYKKyNlbmRpZiAvKiBfX0NMS0RFVl9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vaW8uaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vaW8uaAppbmRleCBiMjM3ZDUyLi44OWFiMmM1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2lvLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9pby5oCkBAIC0xLDUgKzEsNiBAQAogI2lmbmRlZiBfX0FTTV9TSF9JT19ICiAjZGVmaW5lIF9fQVNNX1NIX0lPX0gKKwogLyoKICAqIENvbnZlbnRpb246CiAgKiAgICByZWFke2IsdyxsLHF9L3dyaXRle2IsdyxsLHF9IGFyZSBmb3IgUENJLApAQCAtMTUsMTIgKzE2LDYgQEAKICAqIFN1cGVySCBzcGVjaWZpYyBJL08gKHJhdyBJL08gdG8gb24tY2hpcCBDUFUgcGVyaXBoZXJhbHMpLiBJbiBwcmFjdGljZQogICogdGhlc2UgaGF2ZSB0aGUgc2FtZSBzZW1hbnRpY3MgYXMgdGhlIF9fcmF3IHZhcmlhbnRzLCBhbmQgYXMgc3VjaCwgYWxsCiAgKiBuZXcgY29kZSBzaG91bGQgYmUgdXNpbmcgdGhlIF9fcmF3IHZlcnNpb25zLgotICoKLSAqIEFsbCBJU0EgSS9PIHJvdXRpbmVzIGFyZSB3cmFwcGVkIHRocm91Z2ggdGhlIG1hY2hpbmUgdmVjdG9yLiBJZiBhCi0gKiBib2FyZCBkb2VzIG5vdCBwcm92aWRlIG92ZXJyaWRlcywgYSBnZW5lcmljIHNldCB0aGF0IGFyZSBjb3BpZWQgaW4KLSAqIGZyb20gdGhlIGRlZmF1bHQgbWFjaGluZSB2ZWN0b3IgYXJlIHVzZWQgaW5zdGVhZC4gVGhlc2UgYXJlIGxhcmdlbHkKLSAqIGZvciBvbGQgY29tcGF0IGNvZGUgZm9yIEkvTyBvZmZzZXRpbmcgdG8gU3VwZXJJT3MsIGFsbCBvZiB3aGljaCBhcmUKLSAqIGJldHRlciBoYW5kbGVkIHRocm91Z2ggdGhlIG1hY2h2ZWMgaW9wb3J0IG1hcHBpbmcgcm91dGluZXMgdGhlc2UgZGF5cy4KICAqLwogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CkBAIC0zMSwzOSArMjYsMTAgQEAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pb21hcC5oPgogCiAjaWZkZWYgX19LRVJORUxfXwotLyoKLSAqIERlcGVuZGluZyBvbiB3aGljaCBwbGF0Zm9ybSB3ZSBhcmUgcnVubmluZyBvbiwgd2UgbmVlZCBkaWZmZXJlbnQKLSAqIEkvTyBmdW5jdGlvbnMuCi0gKi8KLSNkZWZpbmUgX19JT19QUkVGSVgJZ2VuZXJpYworI2RlZmluZSBfX0lPX1BSRUZJWCAgICAgZ2VuZXJpYwogI2luY2x1ZGUgPGFzbS9pb19nZW5lcmljLmg+CiAjaW5jbHVkZSA8YXNtL2lvX3RyYXBwZWQuaD4KIAotI2lmZGVmIENPTkZJR19IQVNfSU9QT1JUCi0KLSNkZWZpbmUgaW5iKHApCQkJc2hfbXYubXZfaW5iKChwKSkKLSNkZWZpbmUgaW53KHApCQkJc2hfbXYubXZfaW53KChwKSkKLSNkZWZpbmUgaW5sKHApCQkJc2hfbXYubXZfaW5sKChwKSkKLSNkZWZpbmUgb3V0Yih4LHApCQlzaF9tdi5tdl9vdXRiKCh4KSwocCkpCi0jZGVmaW5lIG91dHcoeCxwKQkJc2hfbXYubXZfb3V0dygoeCksKHApKQotI2RlZmluZSBvdXRsKHgscCkJCXNoX212Lm12X291dGwoKHgpLChwKSkKLQotI2RlZmluZSBpbmJfcChwKQkJc2hfbXYubXZfaW5iX3AoKHApKQotI2RlZmluZSBpbndfcChwKQkJc2hfbXYubXZfaW53X3AoKHApKQotI2RlZmluZSBpbmxfcChwKQkJc2hfbXYubXZfaW5sX3AoKHApKQotI2RlZmluZSBvdXRiX3AoeCxwKQkJc2hfbXYubXZfb3V0Yl9wKCh4KSwocCkpCi0jZGVmaW5lIG91dHdfcCh4LHApCQlzaF9tdi5tdl9vdXR3X3AoKHgpLChwKSkKLSNkZWZpbmUgb3V0bF9wKHgscCkJCXNoX212Lm12X291dGxfcCgoeCksKHApKQotCi0jZGVmaW5lIGluc2IocCxiLGMpCQlzaF9tdi5tdl9pbnNiKChwKSwgKGIpLCAoYykpCi0jZGVmaW5lIGluc3cocCxiLGMpCQlzaF9tdi5tdl9pbnN3KChwKSwgKGIpLCAoYykpCi0jZGVmaW5lIGluc2wocCxiLGMpCQlzaF9tdi5tdl9pbnNsKChwKSwgKGIpLCAoYykpCi0jZGVmaW5lIG91dHNiKHAsYixjKQkJc2hfbXYubXZfb3V0c2IoKHApLCAoYiksIChjKSkKLSNkZWZpbmUgb3V0c3cocCxiLGMpCQlzaF9tdi5tdl9vdXRzdygocCksIChiKSwgKGMpKQotI2RlZmluZSBvdXRzbChwLGIsYykJCXNoX212Lm12X291dHNsKChwKSwgKGIpLCAoYykpCi0KLSNlbmRpZgotCiAjZGVmaW5lIF9fcmF3X3dyaXRlYih2LGEpCShfX2Noa19pb19wdHIoYSksICoodm9sYXRpbGUgdTggIF9fZm9yY2UgKikoYSkgPSAodikpCiAjZGVmaW5lIF9fcmF3X3dyaXRldyh2LGEpCShfX2Noa19pb19wdHIoYSksICoodm9sYXRpbGUgdTE2IF9fZm9yY2UgKikoYSkgPSAodikpCiAjZGVmaW5lIF9fcmF3X3dyaXRlbCh2LGEpCShfX2Noa19pb19wdHIoYSksICoodm9sYXRpbGUgdTMyIF9fZm9yY2UgKikoYSkgPSAodikpCkBAIC03NCwxNSArNDAsMTk2IEBACiAjZGVmaW5lIF9fcmF3X3JlYWRsKGEpCQkoX19jaGtfaW9fcHRyKGEpLCAqKHZvbGF0aWxlIHUzMiBfX2ZvcmNlICopKGEpKQogI2RlZmluZSBfX3Jhd19yZWFkcShhKQkJKF9fY2hrX2lvX3B0cihhKSwgKih2b2xhdGlsZSB1NjQgX19mb3JjZSAqKShhKSkKIAotI2RlZmluZSByZWFkYihhKQkJKHsgdTggIHJfID0gX19yYXdfcmVhZGIoYSk7IG1iKCk7IHJfOyB9KQotI2RlZmluZSByZWFkdyhhKQkJKHsgdTE2IHJfID0gX19yYXdfcmVhZHcoYSk7IG1iKCk7IHJfOyB9KQotI2RlZmluZSByZWFkbChhKQkJKHsgdTMyIHJfID0gX19yYXdfcmVhZGwoYSk7IG1iKCk7IHJfOyB9KQotI2RlZmluZSByZWFkcShhKQkJKHsgdTY0IHJfID0gX19yYXdfcmVhZHEoYSk7IG1iKCk7IHJfOyB9KQorI2RlZmluZSByZWFkYl9yZWxheGVkKGMpCSh7IHU4ICBfX3YgPSBfX3Jhd19yZWFkYihjKTsgX192OyB9KQorI2RlZmluZSByZWFkd19yZWxheGVkKGMpCSh7IHUxNiBfX3YgPSBsZTE2X3RvX2NwdSgoX19mb3JjZSBfX2xlMTYpIFwKKwkJCQkJX19yYXdfcmVhZHcoYykpOyBfX3Y7IH0pCisjZGVmaW5lIHJlYWRsX3JlbGF4ZWQoYykJKHsgdTMyIF9fdiA9IGxlMzJfdG9fY3B1KChfX2ZvcmNlIF9fbGUzMikgXAorCQkJCQlfX3Jhd19yZWFkbChjKSk7IF9fdjsgfSkKKyNkZWZpbmUgcmVhZHFfcmVsYXhlZChjKQkoeyB1NjQgX192ID0gbGU2NF90b19jcHUoKF9fZm9yY2UgX19sZTY0KSBcCisJCQkJCV9fcmF3X3JlYWRxKGMpKTsgX192OyB9KQogCi0jZGVmaW5lIHdyaXRlYih2LGEpCQkoeyBfX3Jhd193cml0ZWIoKHYpLChhKSk7IG1iKCk7IH0pCi0jZGVmaW5lIHdyaXRldyh2LGEpCQkoeyBfX3Jhd193cml0ZXcoKHYpLChhKSk7IG1iKCk7IH0pCi0jZGVmaW5lIHdyaXRlbCh2LGEpCQkoeyBfX3Jhd193cml0ZWwoKHYpLChhKSk7IG1iKCk7IH0pCi0jZGVmaW5lIHdyaXRlcSh2LGEpCQkoeyBfX3Jhd193cml0ZXEoKHYpLChhKSk7IG1iKCk7IH0pCisjZGVmaW5lIHdyaXRlYl9yZWxheGVkKHYsYykJKCh2b2lkKV9fcmF3X3dyaXRlYih2LGMpKQorI2RlZmluZSB3cml0ZXdfcmVsYXhlZCh2LGMpCSgodm9pZClfX3Jhd193cml0ZXcoKF9fZm9yY2UgdTE2KSBcCisJCQkJCWNwdV90b19sZTE2KHYpLGMpKQorI2RlZmluZSB3cml0ZWxfcmVsYXhlZCh2LGMpCSgodm9pZClfX3Jhd193cml0ZWwoKF9fZm9yY2UgdTMyKSBcCisJCQkJCWNwdV90b19sZTMyKHYpLGMpKQorI2RlZmluZSB3cml0ZXFfcmVsYXhlZCh2LGMpCSgodm9pZClfX3Jhd193cml0ZXEoKF9fZm9yY2UgdTY0KSBcCisJCQkJCWNwdV90b19sZTY0KHYpLGMpKQorCisjZGVmaW5lIHJlYWRiKGEpCQkoeyB1OCAgcl8gPSByZWFkYl9yZWxheGVkKGEpOyBybWIoKTsgcl87IH0pCisjZGVmaW5lIHJlYWR3KGEpCQkoeyB1MTYgcl8gPSByZWFkd19yZWxheGVkKGEpOyBybWIoKTsgcl87IH0pCisjZGVmaW5lIHJlYWRsKGEpCQkoeyB1MzIgcl8gPSByZWFkbF9yZWxheGVkKGEpOyBybWIoKTsgcl87IH0pCisjZGVmaW5lIHJlYWRxKGEpCQkoeyB1NjQgcl8gPSByZWFkcV9yZWxheGVkKGEpOyBybWIoKTsgcl87IH0pCisKKyNkZWZpbmUgd3JpdGViKHYsYSkJCSh7IHdtYigpOyB3cml0ZWJfcmVsYXhlZCgodiksKGEpKTsgfSkKKyNkZWZpbmUgd3JpdGV3KHYsYSkJCSh7IHdtYigpOyB3cml0ZXdfcmVsYXhlZCgodiksKGEpKTsgfSkKKyNkZWZpbmUgd3JpdGVsKHYsYSkJCSh7IHdtYigpOyB3cml0ZWxfcmVsYXhlZCgodiksKGEpKTsgfSkKKyNkZWZpbmUgd3JpdGVxKHYsYSkJCSh7IHdtYigpOyB3cml0ZXFfcmVsYXhlZCgodiksKGEpKTsgfSkKKworI2RlZmluZSByZWFkc2IocCxkLGwpCQlfX3Jhd19yZWFkc2IocCxkLGwpCisjZGVmaW5lIHJlYWRzdyhwLGQsbCkJCV9fcmF3X3JlYWRzdyhwLGQsbCkKKyNkZWZpbmUgcmVhZHNsKHAsZCxsKQkJX19yYXdfcmVhZHNsKHAsZCxsKQorCisjZGVmaW5lIHdyaXRlc2IocCxkLGwpCQlfX3Jhd193cml0ZXNiKHAsZCxsKQorI2RlZmluZSB3cml0ZXN3KHAsZCxsKQkJX19yYXdfd3JpdGVzdyhwLGQsbCkKKyNkZWZpbmUgd3JpdGVzbChwLGQsbCkJCV9fcmF3X3dyaXRlc2wocCxkLGwpCisKKyNkZWZpbmUgX19CVUlMRF9VTkNBQ0hFRF9JTyhid2xxLCB0eXBlKQkJCQkJXAorc3RhdGljIGlubGluZSB0eXBlIHJlYWQjI2J3bHEjI191bmNhY2hlZCh1bnNpZ25lZCBsb25nIGFkZHIpCQlcCit7CQkJCQkJCQkJXAorCXR5cGUgcmV0OwkJCQkJCQlcCisJanVtcF90b191bmNhY2hlZCgpOwkJCQkJCVwKKwlyZXQgPSBfX3Jhd19yZWFkIyNid2xxKGFkZHIpOwkJCQkJXAorCWJhY2tfdG9fY2FjaGVkKCk7CQkJCQkJXAorCXJldHVybiByZXQ7CQkJCQkJCVwKK30JCQkJCQkJCQlcCisJCQkJCQkJCQlcCitzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGUjI2J3bHEjI191bmNhY2hlZCh0eXBlIHYsIHVuc2lnbmVkIGxvbmcgYWRkcikJXAorewkJCQkJCQkJCVwKKwlqdW1wX3RvX3VuY2FjaGVkKCk7CQkJCQkJXAorCV9fcmF3X3dyaXRlIyNid2xxKHYsIGFkZHIpOwkJCQkJXAorCWJhY2tfdG9fY2FjaGVkKCk7CQkJCQkJXAorfQorCitfX0JVSUxEX1VOQ0FDSEVEX0lPKGIsIHU4KQorX19CVUlMRF9VTkNBQ0hFRF9JTyh3LCB1MTYpCitfX0JVSUxEX1VOQ0FDSEVEX0lPKGwsIHUzMikKK19fQlVJTERfVU5DQUNIRURfSU8ocSwgdTY0KQorCisjZGVmaW5lIF9fQlVJTERfTUVNT1JZX1NUUklORyhwZngsIGJ3bHEsIHR5cGUpCQkJCVwKKwkJCQkJCQkJCVwKK3N0YXRpYyBpbmxpbmUgdm9pZAkJCQkJCQlcCitwZngjI3dyaXRlcyMjYndscSh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKm1lbSwgY29uc3Qgdm9pZCAqYWRkciwJCVwKKwkJICB1bnNpZ25lZCBpbnQgY291bnQpCQkJCQlcCit7CQkJCQkJCQkJXAorCWNvbnN0IHZvbGF0aWxlIHR5cGUgKl9fYWRkciA9IGFkZHI7CQkJCVwKKwkJCQkJCQkJCVwKKwl3aGlsZSAoY291bnQtLSkgewkJCQkJCVwKKwkJX19yYXdfd3JpdGUjI2J3bHEoKl9fYWRkciwgbWVtKTsJCQlcCisJCV9fYWRkcisrOwkJCQkJCVwKKwl9CQkJCQkJCQlcCit9CQkJCQkJCQkJXAorCQkJCQkJCQkJXAorc3RhdGljIGlubGluZSB2b2lkIHBmeCMjcmVhZHMjI2J3bHEodm9sYXRpbGUgdm9pZCBfX2lvbWVtICptZW0sCQlcCisJCQkJICAgIHZvaWQgKmFkZHIsIHVuc2lnbmVkIGludCBjb3VudCkJXAorewkJCQkJCQkJCVwKKwl2b2xhdGlsZSB0eXBlICpfX2FkZHIgPSBhZGRyOwkJCQkJXAorCQkJCQkJCQkJXAorCXdoaWxlIChjb3VudC0tKSB7CQkJCQkJXAorCQkqX19hZGRyID0gX19yYXdfcmVhZCMjYndscShtZW0pOwkJCVwKKwkJX19hZGRyKys7CQkJCQkJXAorCX0JCQkJCQkJCVwKK30KKworX19CVUlMRF9NRU1PUllfU1RSSU5HKF9fcmF3XywgYiwgdTgpCitfX0JVSUxEX01FTU9SWV9TVFJJTkcoX19yYXdfLCB3LCB1MTYpCisKKyNpZmRlZiBDT05GSUdfU1VQRVJIMzIKK3ZvaWQgX19yYXdfd3JpdGVzbCh2b2lkIF9faW9tZW0gKmFkZHIsIGNvbnN0IHZvaWQgKmRhdGEsIGludCBsb25nbGVuKTsKK3ZvaWQgX19yYXdfcmVhZHNsKGNvbnN0IHZvaWQgX19pb21lbSAqYWRkciwgdm9pZCAqZGF0YSwgaW50IGxvbmdsZW4pOworI2Vsc2UKK19fQlVJTERfTUVNT1JZX1NUUklORyhfX3Jhd18sIGwsIHUzMikKKyNlbmRpZgorCitfX0JVSUxEX01FTU9SWV9TVFJJTkcoX19yYXdfLCBxLCB1NjQpCisKKyNpZmRlZiBDT05GSUdfSEFTX0lPUE9SVAorCisvKgorICogU2xvd2Rvd24gSS9PIHBvcnQgc3BhY2UgYWNjZXNzZXMgZm9yIGFudGlxdWUgaGFyZHdhcmUuCisgKi8KKyN1bmRlZiBDT05GX1NMT1dET1dOX0lPCisKKy8qCisgKiBPbiBTdXBlckggSS9PIHBvcnRzIGFyZSBtZW1vcnkgbWFwcGVkLCBzbyB3ZSBhY2Nlc3MgdGhlbSB1c2luZyBub3JtYWwKKyAqIGxvYWQvc3RvcmUgaW5zdHJ1Y3Rpb25zLiBzaF9pb19wb3J0X2Jhc2UgaXMgdGhlIHZpcnR1YWwgYWRkcmVzcyB0bworICogd2hpY2ggYWxsIHBvcnRzIGFyZSBiZWluZyBtYXBwZWQuCisgKi8KK2V4dGVybiBjb25zdCB1bnNpZ25lZCBsb25nIHNoX2lvX3BvcnRfYmFzZTsKKworc3RhdGljIGlubGluZSB2b2lkIF9fc2V0X2lvX3BvcnRfYmFzZSh1bnNpZ25lZCBsb25nIHBiYXNlKQoreworCSoodW5zaWduZWQgbG9uZyAqKSZzaF9pb19wb3J0X2Jhc2UgPSBwYmFzZTsKKwliYXJyaWVyKCk7Cit9CisKKyNpZmRlZiBDT05GSUdfR0VORVJJQ19JT01BUAorI2RlZmluZSBfX2lvcG9ydF9tYXAgaW9wb3J0X21hcAorI2Vsc2UKK2V4dGVybiB2b2lkIF9faW9tZW0gKl9faW9wb3J0X21hcCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGludCBzaXplKTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORl9TTE9XRE9XTl9JTworI2RlZmluZSBTTE9XX0RPV05fSU8gX19yYXdfcmVhZHcoc2hfaW9fcG9ydF9iYXNlKQorI2Vsc2UKKyNkZWZpbmUgU0xPV19ET1dOX0lPCisjZW5kaWYKKworI2RlZmluZSBfX0JVSUxEX0lPUE9SVF9TSU5HTEUocGZ4LCBid2xxLCB0eXBlLCBwLCBzbG93KQkJCVwKKwkJCQkJCQkJCVwKK3N0YXRpYyBpbmxpbmUgdm9pZCBwZngjI291dCMjYndscSMjcCh0eXBlIHZhbCwgdW5zaWduZWQgbG9uZyBwb3J0KQlcCit7CQkJCQkJCQkJXAorCXZvbGF0aWxlIHR5cGUgKl9fYWRkcjsJCQkJCQlcCisJCQkJCQkJCQlcCisJX19hZGRyID0gX19pb3BvcnRfbWFwKHBvcnQsIHNpemVvZih0eXBlKSk7CQkJXAorCSpfX2FkZHIgPSB2YWw7CQkJCQkJCVwKKwlzbG93OwkJCQkJCQkJXAorfQkJCQkJCQkJCVwKKwkJCQkJCQkJCVwKK3N0YXRpYyBpbmxpbmUgdHlwZSBwZngjI2luIyNid2xxIyNwKHVuc2lnbmVkIGxvbmcgcG9ydCkJCQlcCit7CQkJCQkJCQkJXAorCXZvbGF0aWxlIHR5cGUgKl9fYWRkcjsJCQkJCQlcCisJdHlwZSBfX3ZhbDsJCQkJCQkJXAorCQkJCQkJCQkJXAorCV9fYWRkciA9IF9faW9wb3J0X21hcChwb3J0LCBzaXplb2YodHlwZSkpOwkJCVwKKwlfX3ZhbCA9ICpfX2FkZHI7CQkJCQkJXAorCXNsb3c7CQkJCQkJCQlcCisJCQkJCQkJCQlcCisJcmV0dXJuIF9fdmFsOwkJCQkJCQlcCit9CisKKyNkZWZpbmUgX19CVUlMRF9JT1BPUlRfUEZYKGJ1cywgYndscSwgdHlwZSkJCQkJXAorCV9fQlVJTERfSU9QT1JUX1NJTkdMRShidXMsIGJ3bHEsIHR5cGUsICwpCQkJXAorCV9fQlVJTERfSU9QT1JUX1NJTkdMRShidXMsIGJ3bHEsIHR5cGUsIF9wLCBTTE9XX0RPV05fSU8pCisKKyNkZWZpbmUgQlVJTERJT19JT1BPUlQoYndscSwgdHlwZSkJCQkJCVwKKwlfX0JVSUxEX0lPUE9SVF9QRlgoLCBid2xxLCB0eXBlKQorCitCVUlMRElPX0lPUE9SVChiLCB1OCkKK0JVSUxESU9fSU9QT1JUKHcsIHUxNikKK0JVSUxESU9fSU9QT1JUKGwsIHUzMikKK0JVSUxESU9fSU9QT1JUKHEsIHU2NCkKKworI2RlZmluZSBfX0JVSUxEX0lPUE9SVF9TVFJJTkcoYndscSwgdHlwZSkJCQkJXAorCQkJCQkJCQkJXAorc3RhdGljIGlubGluZSB2b2lkIG91dHMjI2J3bHEodW5zaWduZWQgbG9uZyBwb3J0LCBjb25zdCB2b2lkICphZGRyLAlcCisJCQkgICAgICB1bnNpZ25lZCBpbnQgY291bnQpCQkJXAorewkJCQkJCQkJCVwKKwljb25zdCB2b2xhdGlsZSB0eXBlICpfX2FkZHIgPSBhZGRyOwkJCQlcCisJCQkJCQkJCQlcCisJd2hpbGUgKGNvdW50LS0pIHsJCQkJCQlcCisJCW91dCMjYndscSgqX19hZGRyLCBwb3J0KTsJCQkJXAorCQlfX2FkZHIrKzsJCQkJCQlcCisJfQkJCQkJCQkJXAorfQkJCQkJCQkJCVwKKwkJCQkJCQkJCVwKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbnMjI2J3bHEodW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICphZGRyLAkJXAorCQkJICAgICB1bnNpZ25lZCBpbnQgY291bnQpCQkJXAorewkJCQkJCQkJCVwKKwl2b2xhdGlsZSB0eXBlICpfX2FkZHIgPSBhZGRyOwkJCQkJXAorCQkJCQkJCQkJXAorCXdoaWxlIChjb3VudC0tKSB7CQkJCQkJXAorCQkqX19hZGRyID0gaW4jI2J3bHEocG9ydCk7CQkJCVwKKwkJX19hZGRyKys7CQkJCQkJXAorCX0JCQkJCQkJCVwKK30KKworX19CVUlMRF9JT1BPUlRfU1RSSU5HKGIsIHU4KQorX19CVUlMRF9JT1BPUlRfU1RSSU5HKHcsIHUxNikKK19fQlVJTERfSU9QT1JUX1NUUklORyhsLCB1MzIpCitfX0JVSUxEX0lPUE9SVF9TVFJJTkcocSwgdTY0KQorCisjZW5kaWYKIAogLyoKICAqIExlZ2FjeSBTdXBlckggb24tY2hpcCBJL08gZnVuY3Rpb25zCkBAIC0xMzAsMTM5ICsyNzcsMTEgQEAKIAlfX3Jhd193cml0ZXEodiwgYWRkcik7CiB9CiAKLWV4dGVybiB1bnNpZ25lZCBsb25nIGdlbmVyaWNfaW9fYmFzZTsKLQotc3RhdGljIGlubGluZSB2b2lkIGN0cmxfZGVsYXkodm9pZCkKLXsKLQlfX3Jhd19yZWFkdyhnZW5lcmljX2lvX2Jhc2UpOwotfQotCi0jZGVmaW5lIF9fQlVJTERfVU5DQUNIRURfSU8oYndscSwgdHlwZSkJCQkJCVwKLXN0YXRpYyBpbmxpbmUgdHlwZSByZWFkIyNid2xxIyNfdW5jYWNoZWQodW5zaWduZWQgbG9uZyBhZGRyKQkJXAotewkJCQkJCQkJCVwKLQl0eXBlIHJldDsJCQkJCQkJXAotCWp1bXBfdG9fdW5jYWNoZWQoKTsJCQkJCQlcCi0JcmV0ID0gX19yYXdfcmVhZCMjYndscShhZGRyKTsJCQkJCVwKLQliYWNrX3RvX2NhY2hlZCgpOwkJCQkJCVwKLQlyZXR1cm4gcmV0OwkJCQkJCQlcCi19CQkJCQkJCQkJXAotCQkJCQkJCQkJXAotc3RhdGljIGlubGluZSB2b2lkIHdyaXRlIyNid2xxIyNfdW5jYWNoZWQodHlwZSB2LCB1bnNpZ25lZCBsb25nIGFkZHIpCVwKLXsJCQkJCQkJCQlcCi0JanVtcF90b191bmNhY2hlZCgpOwkJCQkJCVwKLQlfX3Jhd193cml0ZSMjYndscSh2LCBhZGRyKTsJCQkJCVwKLQliYWNrX3RvX2NhY2hlZCgpOwkJCQkJCVwKLX0KLQotX19CVUlMRF9VTkNBQ0hFRF9JTyhiLCB1OCkKLV9fQlVJTERfVU5DQUNIRURfSU8odywgdTE2KQotX19CVUlMRF9VTkNBQ0hFRF9JTyhsLCB1MzIpCi1fX0JVSUxEX1VOQ0FDSEVEX0lPKHEsIHU2NCkKLQotI2RlZmluZSBfX0JVSUxEX01FTU9SWV9TVFJJTkcoYndscSwgdHlwZSkJCQkJXAotCQkJCQkJCQkJXAotc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3dyaXRlcyMjYndscSh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKm1lbSwJXAotCQkJCWNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGludCBjb3VudCkJXAotewkJCQkJCQkJCVwKLQljb25zdCB2b2xhdGlsZSB0eXBlICpfX2FkZHIgPSBhZGRyOwkJCQlcCi0JCQkJCQkJCQlcCi0Jd2hpbGUgKGNvdW50LS0pIHsJCQkJCQlcCi0JCV9fcmF3X3dyaXRlIyNid2xxKCpfX2FkZHIsIG1lbSk7CQkJXAotCQlfX2FkZHIrKzsJCQkJCQlcCi0JfQkJCQkJCQkJXAotfQkJCQkJCQkJCVwKLQkJCQkJCQkJCVwKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3Jhd19yZWFkcyMjYndscSh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKm1lbSwJXAotCQkJICAgICAgIHZvaWQgKmFkZHIsIHVuc2lnbmVkIGludCBjb3VudCkJCVwKLXsJCQkJCQkJCQlcCi0Jdm9sYXRpbGUgdHlwZSAqX19hZGRyID0gYWRkcjsJCQkJCVwKLQkJCQkJCQkJCVwKLQl3aGlsZSAoY291bnQtLSkgewkJCQkJCVwKLQkJKl9fYWRkciA9IF9fcmF3X3JlYWQjI2J3bHEobWVtKTsJCQlcCi0JCV9fYWRkcisrOwkJCQkJCVwKLQl9CQkJCQkJCQlcCi19Ci0KLV9fQlVJTERfTUVNT1JZX1NUUklORyhiLCB1OCkKLV9fQlVJTERfTUVNT1JZX1NUUklORyh3LCB1MTYpCi0KLSNpZmRlZiBDT05GSUdfU1VQRVJIMzIKLXZvaWQgX19yYXdfd3JpdGVzbCh2b2lkIF9faW9tZW0gKmFkZHIsIGNvbnN0IHZvaWQgKmRhdGEsIGludCBsb25nbGVuKTsKLXZvaWQgX19yYXdfcmVhZHNsKGNvbnN0IHZvaWQgX19pb21lbSAqYWRkciwgdm9pZCAqZGF0YSwgaW50IGxvbmdsZW4pOwotI2Vsc2UKLV9fQlVJTERfTUVNT1JZX1NUUklORyhsLCB1MzIpCi0jZW5kaWYKLQotX19CVUlMRF9NRU1PUllfU1RSSU5HKHEsIHU2NCkKLQotI2RlZmluZSB3cml0ZXNiCQkJX19yYXdfd3JpdGVzYgotI2RlZmluZSB3cml0ZXN3CQkJX19yYXdfd3JpdGVzdwotI2RlZmluZSB3cml0ZXNsCQkJX19yYXdfd3JpdGVzbAotCi0jZGVmaW5lIHJlYWRzYgkJCV9fcmF3X3JlYWRzYgotI2RlZmluZSByZWFkc3cJCQlfX3Jhd19yZWFkc3cKLSNkZWZpbmUgcmVhZHNsCQkJX19yYXdfcmVhZHNsCi0KLSNkZWZpbmUgcmVhZGJfcmVsYXhlZChhKQlyZWFkYihhKQotI2RlZmluZSByZWFkd19yZWxheGVkKGEpCXJlYWR3KGEpCi0jZGVmaW5lIHJlYWRsX3JlbGF4ZWQoYSkJcmVhZGwoYSkKLSNkZWZpbmUgcmVhZHFfcmVsYXhlZChhKQlyZWFkcShhKQotCi0jaWZuZGVmIENPTkZJR19HRU5FUklDX0lPTUFQCi0vKiBTaW1wbGUgTU1JTyAqLwotI2RlZmluZSBpb3JlYWQ4KGEpCQlfX3Jhd19yZWFkYihhKQotI2RlZmluZSBpb3JlYWQxNihhKQkJX19yYXdfcmVhZHcoYSkKLSNkZWZpbmUgaW9yZWFkMTZiZShhKQkJYmUxNl90b19jcHUoX19yYXdfcmVhZHcoKGEpKSkKLSNkZWZpbmUgaW9yZWFkMzIoYSkJCV9fcmF3X3JlYWRsKGEpCi0jZGVmaW5lIGlvcmVhZDMyYmUoYSkJCWJlMzJfdG9fY3B1KF9fcmF3X3JlYWRsKChhKSkpCi0KLSNkZWZpbmUgaW93cml0ZTgodixhKQkJX19yYXdfd3JpdGViKCh2KSwoYSkpCi0jZGVmaW5lIGlvd3JpdGUxNih2LGEpCQlfX3Jhd193cml0ZXcoKHYpLChhKSkKLSNkZWZpbmUgaW93cml0ZTE2YmUodixhKQlfX3Jhd193cml0ZXcoY3B1X3RvX2JlMTYoKHYpKSwoYSkpCi0jZGVmaW5lIGlvd3JpdGUzMih2LGEpCQlfX3Jhd193cml0ZWwoKHYpLChhKSkKLSNkZWZpbmUgaW93cml0ZTMyYmUodixhKQlfX3Jhd193cml0ZWwoY3B1X3RvX2JlMzIoKHYpKSwoYSkpCi0KLSNkZWZpbmUgaW9yZWFkOF9yZXAoYSwgZCwgYykJX19yYXdfcmVhZHNiKChhKSwgKGQpLCAoYykpCi0jZGVmaW5lIGlvcmVhZDE2X3JlcChhLCBkLCBjKQlfX3Jhd19yZWFkc3coKGEpLCAoZCksIChjKSkKLSNkZWZpbmUgaW9yZWFkMzJfcmVwKGEsIGQsIGMpCV9fcmF3X3JlYWRzbCgoYSksIChkKSwgKGMpKQotCi0jZGVmaW5lIGlvd3JpdGU4X3JlcChhLCBzLCBjKQlfX3Jhd193cml0ZXNiKChhKSwgKHMpLCAoYykpCi0jZGVmaW5lIGlvd3JpdGUxNl9yZXAoYSwgcywgYykJX19yYXdfd3JpdGVzdygoYSksIChzKSwgKGMpKQotI2RlZmluZSBpb3dyaXRlMzJfcmVwKGEsIHMsIGMpCV9fcmF3X3dyaXRlc2woKGEpLCAocyksIChjKSkKLSNlbmRpZgotCi0jZGVmaW5lIG1taW9faW5zYihwLGQsYykJX19yYXdfcmVhZHNiKHAsZCxjKQotI2RlZmluZSBtbWlvX2luc3cocCxkLGMpCV9fcmF3X3JlYWRzdyhwLGQsYykKLSNkZWZpbmUgbW1pb19pbnNsKHAsZCxjKQlfX3Jhd19yZWFkc2wocCxkLGMpCi0KLSNkZWZpbmUgbW1pb19vdXRzYihwLHMsYykJX19yYXdfd3JpdGVzYihwLHMsYykKLSNkZWZpbmUgbW1pb19vdXRzdyhwLHMsYykJX19yYXdfd3JpdGVzdyhwLHMsYykKLSNkZWZpbmUgbW1pb19vdXRzbChwLHMsYykJX19yYXdfd3JpdGVzbChwLHMsYykKKyNkZWZpbmUgSU9fU1BBQ0VfTElNSVQgMHhmZmZmZmZmZgogCiAvKiBzeW5jbyBvbiBTSC00QSwgb3RoZXJ3aXNlIGEgbm9wICovCiAjZGVmaW5lIG1taW93YigpCQl3bWIoKQogCi0jZGVmaW5lIElPX1NQQUNFX0xJTUlUIDB4ZmZmZmZmZmYKLQotI2lmZGVmIENPTkZJR19IQVNfSU9QT1JUCi0KLS8qCi0gKiBUaGlzIGZ1bmN0aW9uIHByb3ZpZGVzIGEgbWV0aG9kIGZvciB0aGUgZ2VuZXJpYyBjYXNlIHdoZXJlIGEKLSAqIGJvYXJkLXNwZWNpZmljIGlvcG9ydF9tYXAgc2ltcGx5IG5lZWRzIHRvIHJldHVybiB0aGUgcG9ydCArIHNvbWUKLSAqIGFyYml0cmFyeSBwb3J0IGJhc2UuCi0gKgotICogV2UgdXNlIHRoaXMgYXQgYm9hcmQgc2V0dXAgdGltZSB0byBpbXBsaWNpdGx5IHNldCB0aGUgcG9ydCBiYXNlLCBhbmQKLSAqIGFzIGEgcmVzdWx0LCB3ZSBjYW4gdXNlIHRoZSBnZW5lcmljIGlvcG9ydF9tYXAuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3NldF9pb19wb3J0X2Jhc2UodW5zaWduZWQgbG9uZyBwYmFzZSkKLXsKLQlnZW5lcmljX2lvX2Jhc2UgPSBwYmFzZTsKLX0KLQotI2RlZmluZSBfX2lvcG9ydF9tYXAocCwgbikgc2hfbXYubXZfaW9wb3J0X21hcCgocCksIChuKSkKLQotI2VuZGlmCi0KIC8qIFdlIHJlYWxseSB3YW50IHRvIHRyeSBhbmQgZ2V0IHRoZXNlIHRvIG1lbWNweSBldGMgKi8KIHZvaWQgbWVtY3B5X2Zyb21pbyh2b2lkICosIGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqLCB1bnNpZ25lZCBsb25nKTsKIHZvaWQgbWVtY3B5X3RvaW8odm9sYXRpbGUgdm9pZCBfX2lvbWVtICosIGNvbnN0IHZvaWQgKiwgdW5zaWduZWQgbG9uZyk7CkBAIC0zOTUsMTAgKzQxNCw2IEBACiAjZGVmaW5lIGlvcmVtYXBfbm9jYWNoZQlpb3JlbWFwCiAjZGVmaW5lIGlvdW5tYXAJCV9faW91bm1hcAogCi0jZGVmaW5lIG1heWJlYmFkaW8ocG9ydCkgXAotCXByaW50ayhLRVJOX0VSUiAiYmFkIFBDLWxpa2UgaW8gJXM6JXUgZm9yIHBvcnQgMHglbHggYXQgMHglMDh4XG4iLCBcCi0JICAgICAgIF9fZnVuY19fLCBfX0xJTkVfXywgKHBvcnQpLCAodTMyKV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSkKLQogLyoKICAqIENvbnZlcnQgYSBwaHlzaWNhbCBwb2ludGVyIHRvIGEgdmlydHVhbCBrZXJuZWwgcG9pbnRlciBmb3IgL2Rldi9tZW0KICAqIGFjY2VzcwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9pb19nZW5lcmljLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2lvX2dlbmVyaWMuaAppbmRleCA0OTFkZjkzLi5iNWY2OTU2IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2lvX2dlbmVyaWMuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2lvX2dlbmVyaWMuaApAQCAtMTEsMzEgKzExLDYgQEAKICNlcnJvciAiRG9uJ3QgaW5jbHVkZSB0aGlzIGhlYWRlciB3aXRob3V0IGEgdmFsaWQgc3lzdGVtIHByZWZpeCIKICNlbmRpZgogCi11OCBJT19DT05DQVQoX19JT19QUkVGSVgsaW5iKSh1bnNpZ25lZCBsb25nKTsKLXUxNiBJT19DT05DQVQoX19JT19QUkVGSVgsaW53KSh1bnNpZ25lZCBsb25nKTsKLXUzMiBJT19DT05DQVQoX19JT19QUkVGSVgsaW5sKSh1bnNpZ25lZCBsb25nKTsKLQotdm9pZCBJT19DT05DQVQoX19JT19QUkVGSVgsb3V0YikodTgsIHVuc2lnbmVkIGxvbmcpOwotdm9pZCBJT19DT05DQVQoX19JT19QUkVGSVgsb3V0dykodTE2LCB1bnNpZ25lZCBsb25nKTsKLXZvaWQgSU9fQ09OQ0FUKF9fSU9fUFJFRklYLG91dGwpKHUzMiwgdW5zaWduZWQgbG9uZyk7Ci0KLXU4IElPX0NPTkNBVChfX0lPX1BSRUZJWCxpbmJfcCkodW5zaWduZWQgbG9uZyk7Ci11MTYgSU9fQ09OQ0FUKF9fSU9fUFJFRklYLGlud19wKSh1bnNpZ25lZCBsb25nKTsKLXUzMiBJT19DT05DQVQoX19JT19QUkVGSVgsaW5sX3ApKHVuc2lnbmVkIGxvbmcpOwotdm9pZCBJT19DT05DQVQoX19JT19QUkVGSVgsb3V0Yl9wKSh1OCwgdW5zaWduZWQgbG9uZyk7Ci12b2lkIElPX0NPTkNBVChfX0lPX1BSRUZJWCxvdXR3X3ApKHUxNiwgdW5zaWduZWQgbG9uZyk7Ci12b2lkIElPX0NPTkNBVChfX0lPX1BSRUZJWCxvdXRsX3ApKHUzMiwgdW5zaWduZWQgbG9uZyk7Ci0KLXZvaWQgSU9fQ09OQ0FUKF9fSU9fUFJFRklYLGluc2IpKHVuc2lnbmVkIGxvbmcsIHZvaWQgKmRzdCwgdW5zaWduZWQgbG9uZyBjb3VudCk7Ci12b2lkIElPX0NPTkNBVChfX0lPX1BSRUZJWCxpbnN3KSh1bnNpZ25lZCBsb25nLCB2b2lkICpkc3QsIHVuc2lnbmVkIGxvbmcgY291bnQpOwotdm9pZCBJT19DT05DQVQoX19JT19QUkVGSVgsaW5zbCkodW5zaWduZWQgbG9uZywgdm9pZCAqZHN0LCB1bnNpZ25lZCBsb25nIGNvdW50KTsKLXZvaWQgSU9fQ09OQ0FUKF9fSU9fUFJFRklYLG91dHNiKSh1bnNpZ25lZCBsb25nLCBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIGxvbmcgY291bnQpOwotdm9pZCBJT19DT05DQVQoX19JT19QUkVGSVgsb3V0c3cpKHVuc2lnbmVkIGxvbmcsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgbG9uZyBjb3VudCk7Ci12b2lkIElPX0NPTkNBVChfX0lPX1BSRUZJWCxvdXRzbCkodW5zaWduZWQgbG9uZywgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKLQotdm9pZCAqSU9fQ09OQ0FUKF9fSU9fUFJFRklYLGlvcmVtYXApKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUpOwotdm9pZCBJT19DT05DQVQoX19JT19QUkVGSVgsaW91bm1hcCkodm9pZCAqYWRkcik7Ci0KIHZvaWQgX19pb21lbSAqSU9fQ09OQ0FUKF9fSU9fUFJFRklYLGlvcG9ydF9tYXApKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgaW50IHNpemUpOwogdm9pZCBJT19DT05DQVQoX19JT19QUkVGSVgsaW9wb3J0X3VubWFwKSh2b2lkIF9faW9tZW0gKmFkZHIpOwogdm9pZCBJT19DT05DQVQoX19JT19QUkVGSVgsbWVtX2luaXQpKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9pb2N0bHMuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vaW9jdGxzLmgKaW5kZXggZWI2YzRjNi4uODRlODVhNyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9pb2N0bHMuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2lvY3Rscy5oCkBAIC04NSw2ICs4NSw3IEBACiAjZGVmaW5lIFRDU0VUU0YyCV9JT1coJ1QnLCA0NSwgc3RydWN0IHRlcm1pb3MyKQogI2RlZmluZSBUSU9DR1BUTglfSU9SKCdUJywweDMwLCB1bnNpZ25lZCBpbnQpIC8qIEdldCBQdHkgTnVtYmVyIChvZiBwdHktbXV4IGRldmljZSkgKi8KICNkZWZpbmUgVElPQ1NQVExDSwlfSU9XKCdUJywweDMxLCBpbnQpICAvKiBMb2NrL3VubG9jayBQdHkgKi8KKyNkZWZpbmUgVElPQ0dERVYJX0lPUignVCcsMHgzMiwgdW5zaWduZWQgaW50KSAvKiBHZXQgcHJpbWFyeSBkZXZpY2Ugbm9kZSBvZiAvZGV2L2NvbnNvbGUgKi8KICNkZWZpbmUgVElPQ1NJRwkJX0lPVygnVCcsMHgzNiwgaW50KSAgLyogR2VuZXJhdGUgc2lnbmFsIG9uIFB0eSBzbGF2ZSAqLwogCiAjZGVmaW5lIFRJT0NTRVJDT05GSUcJX0lPKCdUJywgODMpIC8qIDB4NTQ1MyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9tYWNodmVjLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL21hY2h2ZWMuaAppbmRleCBhMGIwY2Y3Li5kZDVkNmU1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL21hY2h2ZWMuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL21hY2h2ZWMuaApAQCAtMjMsMjcgKzIzLDYgQEAKIAl2b2lkICgqbXZfaW5pdF9pcnEpKHZvaWQpOwogCiAjaWZkZWYgQ09ORklHX0hBU19JT1BPUlQKLQl1OCAoKm12X2luYikodW5zaWduZWQgbG9uZyk7Ci0JdTE2ICgqbXZfaW53KSh1bnNpZ25lZCBsb25nKTsKLQl1MzIgKCptdl9pbmwpKHVuc2lnbmVkIGxvbmcpOwotCXZvaWQgKCptdl9vdXRiKSh1OCwgdW5zaWduZWQgbG9uZyk7Ci0Jdm9pZCAoKm12X291dHcpKHUxNiwgdW5zaWduZWQgbG9uZyk7Ci0Jdm9pZCAoKm12X291dGwpKHUzMiwgdW5zaWduZWQgbG9uZyk7Ci0KLQl1OCAoKm12X2luYl9wKSh1bnNpZ25lZCBsb25nKTsKLQl1MTYgKCptdl9pbndfcCkodW5zaWduZWQgbG9uZyk7Ci0JdTMyICgqbXZfaW5sX3ApKHVuc2lnbmVkIGxvbmcpOwotCXZvaWQgKCptdl9vdXRiX3ApKHU4LCB1bnNpZ25lZCBsb25nKTsKLQl2b2lkICgqbXZfb3V0d19wKSh1MTYsIHVuc2lnbmVkIGxvbmcpOwotCXZvaWQgKCptdl9vdXRsX3ApKHUzMiwgdW5zaWduZWQgbG9uZyk7Ci0KLQl2b2lkICgqbXZfaW5zYikodW5zaWduZWQgbG9uZywgdm9pZCAqZHN0LCB1bnNpZ25lZCBsb25nIGNvdW50KTsKLQl2b2lkICgqbXZfaW5zdykodW5zaWduZWQgbG9uZywgdm9pZCAqZHN0LCB1bnNpZ25lZCBsb25nIGNvdW50KTsKLQl2b2lkICgqbXZfaW5zbCkodW5zaWduZWQgbG9uZywgdm9pZCAqZHN0LCB1bnNpZ25lZCBsb25nIGNvdW50KTsKLQl2b2lkICgqbXZfb3V0c2IpKHVuc2lnbmVkIGxvbmcsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgbG9uZyBjb3VudCk7Ci0Jdm9pZCAoKm12X291dHN3KSh1bnNpZ25lZCBsb25nLCBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIGxvbmcgY291bnQpOwotCXZvaWQgKCptdl9vdXRzbCkodW5zaWduZWQgbG9uZywgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKLQogCXZvaWQgX19pb21lbSAqKCptdl9pb3BvcnRfbWFwKSh1bnNpZ25lZCBsb25nIHBvcnQsIHVuc2lnbmVkIGludCBzaXplKTsKIAl2b2lkICgqbXZfaW9wb3J0X3VubWFwKSh2b2lkIF9faW9tZW0gKik7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcHRyYWNlLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3B0cmFjZS5oCmluZGV4IGY2ZWRjMTAuLmRlMTY3ZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcHRyYWNlLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wdHJhY2UuaApAQCAtNDAsOCArNDAsOCBAQAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIAogI2RlZmluZSB1c2VyX21vZGUocmVncykJCQkoKChyZWdzKS0+c3IgJiAweDQwMDAwMDAwKT09MCkKLSNkZWZpbmUgdXNlcl9zdGFja19wb2ludGVyKHJlZ3MpCSgodW5zaWduZWQgbG9uZykocmVncyktPnJlZ3NbMTVdKQotI2RlZmluZSBrZXJuZWxfc3RhY2tfcG9pbnRlcihyZWdzKQkoKHVuc2lnbmVkIGxvbmcpKHJlZ3MpLT5yZWdzWzE1XSkKKyNkZWZpbmUgdXNlcl9zdGFja19wb2ludGVyKF9yZWdzKQkoKHVuc2lnbmVkIGxvbmcpKF9yZWdzKS0+cmVnc1sxNV0pCisjZGVmaW5lIGtlcm5lbF9zdGFja19wb2ludGVyKF9yZWdzKQkoKHVuc2lnbmVkIGxvbmcpKF9yZWdzKS0+cmVnc1sxNV0pCiAjZGVmaW5lIGluc3RydWN0aW9uX3BvaW50ZXIocmVncykJKCh1bnNpZ25lZCBsb25nKShyZWdzKS0+cGMpCiAKIGV4dGVybiB2b2lkIHNob3dfcmVncyhzdHJ1Y3QgcHRfcmVncyAqKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcHRyYWNlXzMyLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3B0cmFjZV8zMi5oCmluZGV4IDM1ZDllMjUuLjZjMjIzOWMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcHRyYWNlXzMyLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wdHJhY2VfMzIuaApAQCAtNzYsNyArNzYsNyBAQAogI2lmZGVmIF9fS0VSTkVMX18KIAogI2RlZmluZSBNQVhfUkVHX09GRlNFVAkJb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHRyYSkKLSNkZWZpbmUgcmVnc19yZXR1cm5fdmFsdWUocmVncykJKChyZWdzKS0+cmVnc1swXSkKKyNkZWZpbmUgcmVnc19yZXR1cm5fdmFsdWUoX3JlZ3MpCSgoX3JlZ3MpLT5yZWdzWzBdKQogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3B0cmFjZV82NC5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wdHJhY2VfNjQuaAppbmRleCBkNDNjMWNiLi5iZjliZTc3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3B0cmFjZV82NC5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcHRyYWNlXzY0LmgKQEAgLTEzLDcgKzEzLDcgQEAKICNpZmRlZiBfX0tFUk5FTF9fCiAKICNkZWZpbmUgTUFYX1JFR19PRkZTRVQJCW9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCB0cmVnc1s3XSkKLSNkZWZpbmUgcmVnc19yZXR1cm5fdmFsdWUocmVncykJKChyZWdzKS0+cmVnc1szXSkKKyNkZWZpbmUgcmVnc19yZXR1cm5fdmFsdWUoX3JlZ3MpCSgoX3JlZ3MpLT5yZWdzWzNdKQogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3VuYWxpZ25lZC1zaDRhLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3VuYWxpZ25lZC1zaDRhLmgKaW5kZXggOWY0ZGQyNS4uYzQ4YTljMyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS91bmFsaWduZWQtc2g0YS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vdW5hbGlnbmVkLXNoNGEuaApAQCAtMTgsMTAgKzE4LDIwIEBACiAgKiBvZiBzcGlsbCByZWdpc3RlcnMgYW5kIGJsb3dpbmcgdXAgd2hlbiBidWlsZGluZyBhdCBsb3cgb3B0aW1pemF0aW9uCiAgKiBsZXZlbHMuIFNlZSBodHRwOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTM0Nzc3LgogICovCisjaW5jbHVkZSA8bGludXgvdW5hbGlnbmVkL3BhY2tlZF9zdHJ1Y3QuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KIAotc3RhdGljIF9fYWx3YXlzX2lubGluZSB1MzIgX19nZXRfdW5hbGlnbmVkX2NwdTMyKGNvbnN0IHU4ICpwKQorc3RhdGljIGlubGluZSB1MTYgc2g0YV9nZXRfdW5hbGlnbmVkX2NwdTE2KGNvbnN0IHU4ICpwKQoreworI2lmZGVmIF9fTElUVExFX0VORElBTgorCXJldHVybiBwWzBdIHwgcFsxXSA8PCA4OworI2Vsc2UKKwlyZXR1cm4gcFswXSA8PCA4IHwgcFsxXTsKKyNlbmRpZgorfQorCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHUzMiBzaDRhX2dldF91bmFsaWduZWRfY3B1MzIoY29uc3QgdTggKnApCiB7CiAJdW5zaWduZWQgbG9uZyB1bmFsaWduZWQ7CiAKQEAgLTM0LDIxOCArNDQsMTQ4IEBACiAJcmV0dXJuIHVuYWxpZ25lZDsKIH0KIAotc3RydWN0IF9fdW5hX3UxNiB7IHUxNiB4IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOyB9Owotc3RydWN0IF9fdW5hX3UzMiB7IHUzMiB4IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOyB9Owotc3RydWN0IF9fdW5hX3U2NCB7IHU2NCB4IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOyB9OwotCi1zdGF0aWMgaW5saW5lIHUxNiBfX2dldF91bmFsaWduZWRfY3B1MTYoY29uc3QgdTggKnApCi17Ci0jaWZkZWYgX19MSVRUTEVfRU5ESUFOCi0JcmV0dXJuIHBbMF0gfCBwWzFdIDw8IDg7Ci0jZWxzZQotCXJldHVybiBwWzBdIDw8IDggfCBwWzFdOwotI2VuZGlmCi19Ci0KIC8qCiAgKiBFdmVuIHRob3VnaCBtb3Z1YS5sIHN1cHBvcnRzIGF1dG8taW5jcmVtZW50IG9uIHRoZSByZWFkIHNpZGUsIGl0IGNhbgogICogb25seSBzdG9yZSB0byByMCBkdWUgdG8gaW5zdHJ1Y3Rpb24gZW5jb2RpbmcgY29uc3RyYWludHMsIHNvIGp1c3QgbGV0CiAgKiB0aGUgY29tcGlsZXIgc29ydCBpdCBvdXQgb24gaXRzIG93bi4KICAqLwotc3RhdGljIGlubGluZSB1NjQgX19nZXRfdW5hbGlnbmVkX2NwdTY0KGNvbnN0IHU4ICpwKQorc3RhdGljIGlubGluZSB1NjQgc2g0YV9nZXRfdW5hbGlnbmVkX2NwdTY0KGNvbnN0IHU4ICpwKQogewogI2lmZGVmIF9fTElUVExFX0VORElBTgotCXJldHVybiAodTY0KV9fZ2V0X3VuYWxpZ25lZF9jcHUzMihwICsgNCkgPDwgMzIgfAotCQkgICAgX19nZXRfdW5hbGlnbmVkX2NwdTMyKHApOworCXJldHVybiAodTY0KXNoNGFfZ2V0X3VuYWxpZ25lZF9jcHUzMihwICsgNCkgPDwgMzIgfAorCQkgICAgc2g0YV9nZXRfdW5hbGlnbmVkX2NwdTMyKHApOwogI2Vsc2UKLQlyZXR1cm4gKHU2NClfX2dldF91bmFsaWduZWRfY3B1MzIocCkgPDwgMzIgfAotCQkgICAgX19nZXRfdW5hbGlnbmVkX2NwdTMyKHAgKyA0KTsKKwlyZXR1cm4gKHU2NClzaDRhX2dldF91bmFsaWduZWRfY3B1MzIocCkgPDwgMzIgfAorCQkgICAgc2g0YV9nZXRfdW5hbGlnbmVkX2NwdTMyKHAgKyA0KTsKICNlbmRpZgogfQogCiBzdGF0aWMgaW5saW5lIHUxNiBnZXRfdW5hbGlnbmVkX2xlMTYoY29uc3Qgdm9pZCAqcCkKIHsKLQlyZXR1cm4gbGUxNl90b19jcHUoX19nZXRfdW5hbGlnbmVkX2NwdTE2KHApKTsKKwlyZXR1cm4gbGUxNl90b19jcHUoc2g0YV9nZXRfdW5hbGlnbmVkX2NwdTE2KHApKTsKIH0KIAogc3RhdGljIGlubGluZSB1MzIgZ2V0X3VuYWxpZ25lZF9sZTMyKGNvbnN0IHZvaWQgKnApCiB7Ci0JcmV0dXJuIGxlMzJfdG9fY3B1KF9fZ2V0X3VuYWxpZ25lZF9jcHUzMihwKSk7CisJcmV0dXJuIGxlMzJfdG9fY3B1KHNoNGFfZ2V0X3VuYWxpZ25lZF9jcHUzMihwKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdTY0IGdldF91bmFsaWduZWRfbGU2NChjb25zdCB2b2lkICpwKQogewotCXJldHVybiBsZTY0X3RvX2NwdShfX2dldF91bmFsaWduZWRfY3B1NjQocCkpOworCXJldHVybiBsZTY0X3RvX2NwdShzaDRhX2dldF91bmFsaWduZWRfY3B1NjQocCkpOwogfQogCiBzdGF0aWMgaW5saW5lIHUxNiBnZXRfdW5hbGlnbmVkX2JlMTYoY29uc3Qgdm9pZCAqcCkKIHsKLQlyZXR1cm4gYmUxNl90b19jcHUoX19nZXRfdW5hbGlnbmVkX2NwdTE2KHApKTsKKwlyZXR1cm4gYmUxNl90b19jcHUoc2g0YV9nZXRfdW5hbGlnbmVkX2NwdTE2KHApKTsKIH0KIAogc3RhdGljIGlubGluZSB1MzIgZ2V0X3VuYWxpZ25lZF9iZTMyKGNvbnN0IHZvaWQgKnApCiB7Ci0JcmV0dXJuIGJlMzJfdG9fY3B1KF9fZ2V0X3VuYWxpZ25lZF9jcHUzMihwKSk7CisJcmV0dXJuIGJlMzJfdG9fY3B1KHNoNGFfZ2V0X3VuYWxpZ25lZF9jcHUzMihwKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdTY0IGdldF91bmFsaWduZWRfYmU2NChjb25zdCB2b2lkICpwKQogewotCXJldHVybiBiZTY0X3RvX2NwdShfX2dldF91bmFsaWduZWRfY3B1NjQocCkpOworCXJldHVybiBiZTY0X3RvX2NwdShzaDRhX2dldF91bmFsaWduZWRfY3B1NjQocCkpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgX19wdXRfbGUxNl9ub2FsaWduKHU4ICpwLCB1MTYgdmFsKQorc3RhdGljIGlubGluZSB2b2lkIG5vbm5hdGl2ZV9wdXRfbGUxNih1MTYgdmFsLCB1OCAqcCkKIHsKIAkqcCsrID0gdmFsOwogCSpwKysgPSB2YWwgPj4gODsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIF9fcHV0X2xlMzJfbm9hbGlnbih1OCAqcCwgdTMyIHZhbCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBub25uYXRpdmVfcHV0X2xlMzIodTMyIHZhbCwgdTggKnApCiB7Ci0JX19wdXRfbGUxNl9ub2FsaWduKHAsIHZhbCk7Ci0JX19wdXRfbGUxNl9ub2FsaWduKHAgKyAyLCB2YWwgPj4gMTYpOworCW5vbm5hdGl2ZV9wdXRfbGUxNih2YWwsIHApOworCW5vbm5hdGl2ZV9wdXRfbGUxNih2YWwgPj4gMTYsIHAgKyAyKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIF9fcHV0X2xlNjRfbm9hbGlnbih1OCAqcCwgdTY0IHZhbCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBub25uYXRpdmVfcHV0X2xlNjQodTY0IHZhbCwgdTggKnApCiB7Ci0JX19wdXRfbGUzMl9ub2FsaWduKHAsIHZhbCk7Ci0JX19wdXRfbGUzMl9ub2FsaWduKHAgKyA0LCB2YWwgPj4gMzIpOworCW5vbm5hdGl2ZV9wdXRfbGUzMih2YWwsIHApOworCW5vbm5hdGl2ZV9wdXRfbGUzMih2YWwgPj4gMzIsIHAgKyA0KTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIF9fcHV0X2JlMTZfbm9hbGlnbih1OCAqcCwgdTE2IHZhbCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBub25uYXRpdmVfcHV0X2JlMTYodTE2IHZhbCwgdTggKnApCiB7CiAJKnArKyA9IHZhbCA+PiA4OwogCSpwKysgPSB2YWw7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3B1dF9iZTMyX25vYWxpZ24odTggKnAsIHUzMiB2YWwpCitzdGF0aWMgaW5saW5lIHZvaWQgbm9ubmF0aXZlX3B1dF9iZTMyKHUzMiB2YWwsIHU4ICpwKQogewotCV9fcHV0X2JlMTZfbm9hbGlnbihwLCB2YWwgPj4gMTYpOwotCV9fcHV0X2JlMTZfbm9hbGlnbihwICsgMiwgdmFsKTsKKwlub25uYXRpdmVfcHV0X2JlMTYodmFsID4+IDE2LCBwKTsKKwlub25uYXRpdmVfcHV0X2JlMTYodmFsLCBwICsgMik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3B1dF9iZTY0X25vYWxpZ24odTggKnAsIHU2NCB2YWwpCitzdGF0aWMgaW5saW5lIHZvaWQgbm9ubmF0aXZlX3B1dF9iZTY0KHU2NCB2YWwsIHU4ICpwKQogewotCV9fcHV0X2JlMzJfbm9hbGlnbihwLCB2YWwgPj4gMzIpOwotCV9fcHV0X2JlMzJfbm9hbGlnbihwICsgNCwgdmFsKTsKKwlub25uYXRpdmVfcHV0X2JlMzIodmFsID4+IDMyLCBwKTsKKwlub25uYXRpdmVfcHV0X2JlMzIodmFsLCBwICsgNCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfdW5hbGlnbmVkX2xlMTYodTE2IHZhbCwgdm9pZCAqcCkKIHsKICNpZmRlZiBfX0xJVFRMRV9FTkRJQU4KLQkoKHN0cnVjdCBfX3VuYV91MTYgKilwKS0+eCA9IHZhbDsKKwlfX3B1dF91bmFsaWduZWRfY3B1MTYodmFsLCBwKTsKICNlbHNlCi0JX19wdXRfbGUxNl9ub2FsaWduKHAsIHZhbCk7CisJbm9ubmF0aXZlX3B1dF9sZTE2KHZhbCwgcCk7CiAjZW5kaWYKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHB1dF91bmFsaWduZWRfbGUzMih1MzIgdmFsLCB2b2lkICpwKQogewogI2lmZGVmIF9fTElUVExFX0VORElBTgotCSgoc3RydWN0IF9fdW5hX3UzMiAqKXApLT54ID0gdmFsOworCV9fcHV0X3VuYWxpZ25lZF9jcHUzMih2YWwsIHApOwogI2Vsc2UKLQlfX3B1dF9sZTMyX25vYWxpZ24ocCwgdmFsKTsKKwlub25uYXRpdmVfcHV0X2xlMzIodmFsLCBwKTsKICNlbmRpZgogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcHV0X3VuYWxpZ25lZF9sZTY0KHU2NCB2YWwsIHZvaWQgKnApCiB7CiAjaWZkZWYgX19MSVRUTEVfRU5ESUFOCi0JKChzdHJ1Y3QgX191bmFfdTY0ICopcCktPnggPSB2YWw7CisJX19wdXRfdW5hbGlnbmVkX2NwdTY0KHZhbCwgcCk7CiAjZWxzZQotCV9fcHV0X2xlNjRfbm9hbGlnbihwLCB2YWwpOworCW5vbm5hdGl2ZV9wdXRfbGU2NCh2YWwsIHApOwogI2VuZGlmCiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfdW5hbGlnbmVkX2JlMTYodTE2IHZhbCwgdm9pZCAqcCkKIHsKICNpZmRlZiBfX0JJR19FTkRJQU4KLQkoKHN0cnVjdCBfX3VuYV91MTYgKilwKS0+eCA9IHZhbDsKKwlfX3B1dF91bmFsaWduZWRfY3B1MTYodmFsLCBwKTsKICNlbHNlCi0JX19wdXRfYmUxNl9ub2FsaWduKHAsIHZhbCk7CisJbm9ubmF0aXZlX3B1dF9iZTE2KHZhbCwgcCk7CiAjZW5kaWYKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHB1dF91bmFsaWduZWRfYmUzMih1MzIgdmFsLCB2b2lkICpwKQogewogI2lmZGVmIF9fQklHX0VORElBTgotCSgoc3RydWN0IF9fdW5hX3UzMiAqKXApLT54ID0gdmFsOworCV9fcHV0X3VuYWxpZ25lZF9jcHUzMih2YWwsIHApOwogI2Vsc2UKLQlfX3B1dF9iZTMyX25vYWxpZ24ocCwgdmFsKTsKKwlub25uYXRpdmVfcHV0X2JlMzIodmFsLCBwKTsKICNlbmRpZgogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcHV0X3VuYWxpZ25lZF9iZTY0KHU2NCB2YWwsIHZvaWQgKnApCiB7CiAjaWZkZWYgX19CSUdfRU5ESUFOCi0JKChzdHJ1Y3QgX191bmFfdTY0ICopcCktPnggPSB2YWw7CisJX19wdXRfdW5hbGlnbmVkX2NwdTY0KHZhbCwgcCk7CiAjZWxzZQotCV9fcHV0X2JlNjRfbm9hbGlnbihwLCB2YWwpOworCW5vbm5hdGl2ZV9wdXRfYmU2NCh2YWwsIHApOwogI2VuZGlmCiB9CiAKIC8qCi0gKiBDYXVzZSBhIGxpbmstdGltZSBlcnJvciBpZiB3ZSB0cnkgYW4gdW5hbGlnbmVkIGFjY2VzcyBvdGhlciB0aGFuCi0gKiAxLDIsNCBvciA4IGJ5dGVzIGxvbmcKKyAqIFdoaWxlIGl0J3MgYSBiaXQgbm9uLW9idmlvdXMsIGV2ZW4gdGhvdWdoIHRoZSBnZW5lcmljIGxlL2JlIHdyYXBwZXJzCisgKiB1c2UgdGhlIF9fZ2V0L3B1dF94eHggcHJlZml4aW5nLCB0aGV5IGFjdHVhbGx5IHdyYXAgaW4gdG8gdGhlCisgKiBub24tcHJlZml4ZWQgZ2V0L3B1dF94eHggdmFyaWFudHMgYXMgcHJvdmlkZWQgYWJvdmUuCiAgKi8KLWV4dGVybiB2b2lkIF9fYmFkX3VuYWxpZ25lZF9hY2Nlc3Nfc2l6ZSh2b2lkKTsKLQotI2RlZmluZSBfX2dldF91bmFsaWduZWRfbGUocHRyKSAoKF9fZm9yY2UgdHlwZW9mKCoocHRyKSkpKHsJCQlcCi0JX19idWlsdGluX2Nob29zZV9leHByKHNpemVvZigqKHB0cikpID09IDEsICoocHRyKSwJCQlcCi0JX19idWlsdGluX2Nob29zZV9leHByKHNpemVvZigqKHB0cikpID09IDIsIGdldF91bmFsaWduZWRfbGUxNigocHRyKSksCVwKLQlfX2J1aWx0aW5fY2hvb3NlX2V4cHIoc2l6ZW9mKCoocHRyKSkgPT0gNCwgZ2V0X3VuYWxpZ25lZF9sZTMyKChwdHIpKSwJXAotCV9fYnVpbHRpbl9jaG9vc2VfZXhwcihzaXplb2YoKihwdHIpKSA9PSA4LCBnZXRfdW5hbGlnbmVkX2xlNjQoKHB0cikpLAlcCi0JX19iYWRfdW5hbGlnbmVkX2FjY2Vzc19zaXplKCkpKSkpOwkJCQkJXAotCX0pKQotCi0jZGVmaW5lIF9fZ2V0X3VuYWxpZ25lZF9iZShwdHIpICgoX19mb3JjZSB0eXBlb2YoKihwdHIpKSkoewkJCVwKLQlfX2J1aWx0aW5fY2hvb3NlX2V4cHIoc2l6ZW9mKCoocHRyKSkgPT0gMSwgKihwdHIpLAkJCVwKLQlfX2J1aWx0aW5fY2hvb3NlX2V4cHIoc2l6ZW9mKCoocHRyKSkgPT0gMiwgZ2V0X3VuYWxpZ25lZF9iZTE2KChwdHIpKSwJXAotCV9fYnVpbHRpbl9jaG9vc2VfZXhwcihzaXplb2YoKihwdHIpKSA9PSA0LCBnZXRfdW5hbGlnbmVkX2JlMzIoKHB0cikpLAlcCi0JX19idWlsdGluX2Nob29zZV9leHByKHNpemVvZigqKHB0cikpID09IDgsIGdldF91bmFsaWduZWRfYmU2NCgocHRyKSksCVwKLQlfX2JhZF91bmFsaWduZWRfYWNjZXNzX3NpemUoKSkpKSk7CQkJCQlcCi0JfSkpCi0KLSNkZWZpbmUgX19wdXRfdW5hbGlnbmVkX2xlKHZhbCwgcHRyKSAoewkJCQkJXAotCXZvaWQgKl9fZ3VfcCA9IChwdHIpOwkJCQkJCVwKLQlzd2l0Y2ggKHNpemVvZigqKHB0cikpKSB7CQkJCQlcCi0JY2FzZSAxOgkJCQkJCQkJXAotCQkqKHU4ICopX19ndV9wID0gKF9fZm9yY2UgdTgpKHZhbCk7CQkJXAotCQlicmVhazsJCQkJCQkJXAotCWNhc2UgMjoJCQkJCQkJCVwKLQkJcHV0X3VuYWxpZ25lZF9sZTE2KChfX2ZvcmNlIHUxNikodmFsKSwgX19ndV9wKTsJCVwKLQkJYnJlYWs7CQkJCQkJCVwKLQljYXNlIDQ6CQkJCQkJCQlcCi0JCXB1dF91bmFsaWduZWRfbGUzMigoX19mb3JjZSB1MzIpKHZhbCksIF9fZ3VfcCk7CQlcCi0JCWJyZWFrOwkJCQkJCQlcCi0JY2FzZSA4OgkJCQkJCQkJXAotCQlwdXRfdW5hbGlnbmVkX2xlNjQoKF9fZm9yY2UgdTY0KSh2YWwpLCBfX2d1X3ApOwkJXAotCQlicmVhazsJCQkJCQkJXAotCWRlZmF1bHQ6CQkJCQkJCVwKLQkJX19iYWRfdW5hbGlnbmVkX2FjY2Vzc19zaXplKCk7CQkJCVwKLQkJYnJlYWs7CQkJCQkJCVwKLQl9CQkJCQkJCQlcCi0JKHZvaWQpMDsgfSkKLQotI2RlZmluZSBfX3B1dF91bmFsaWduZWRfYmUodmFsLCBwdHIpICh7CQkJCQlcCi0Jdm9pZCAqX19ndV9wID0gKHB0cik7CQkJCQkJXAotCXN3aXRjaCAoc2l6ZW9mKCoocHRyKSkpIHsJCQkJCVwKLQljYXNlIDE6CQkJCQkJCQlcCi0JCSoodTggKilfX2d1X3AgPSAoX19mb3JjZSB1OCkodmFsKTsJCQlcCi0JCWJyZWFrOwkJCQkJCQlcCi0JY2FzZSAyOgkJCQkJCQkJXAotCQlwdXRfdW5hbGlnbmVkX2JlMTYoKF9fZm9yY2UgdTE2KSh2YWwpLCBfX2d1X3ApOwkJXAotCQlicmVhazsJCQkJCQkJXAotCWNhc2UgNDoJCQkJCQkJCVwKLQkJcHV0X3VuYWxpZ25lZF9iZTMyKChfX2ZvcmNlIHUzMikodmFsKSwgX19ndV9wKTsJCVwKLQkJYnJlYWs7CQkJCQkJCVwKLQljYXNlIDg6CQkJCQkJCQlcCi0JCXB1dF91bmFsaWduZWRfYmU2NCgoX19mb3JjZSB1NjQpKHZhbCksIF9fZ3VfcCk7CQlcCi0JCWJyZWFrOwkJCQkJCQlcCi0JZGVmYXVsdDoJCQkJCQkJXAotCQlfX2JhZF91bmFsaWduZWRfYWNjZXNzX3NpemUoKTsJCQkJXAotCQlicmVhazsJCQkJCQkJXAotCX0JCQkJCQkJCVwKLQkodm9pZCkwOyB9KQorI2luY2x1ZGUgPGxpbnV4L3VuYWxpZ25lZC9nZW5lcmljLmg+CiAKICNpZmRlZiBfX0xJVFRMRV9FTkRJQU4KICMgZGVmaW5lIGdldF91bmFsaWduZWQgX19nZXRfdW5hbGlnbmVkX2xlCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC9yb21pbWFnZS5oIGIvYXJjaC9zaC9pbmNsdWRlL21hY2gtY29tbW9uL21hY2gvcm9taW1hZ2UuaAppbmRleCAwOGZiNDIyLi4zNjcwNDU1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC9yb21pbWFnZS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL3JvbWltYWdlLmgKQEAgLTQsNyArNCw3IEBACiAKICNlbHNlIC8qIF9fQVNTRU1CTFlfXyAqLwogCi1leHRlcm4gaW5saW5lIHZvaWQgbW1jaWZfdXBkYXRlX3Byb2dyZXNzKGludCBucikKK3N0YXRpYyBpbmxpbmUgdm9pZCBtbWNpZl91cGRhdGVfcHJvZ3Jlc3MoaW50IG5yKQogewogfQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvbWFjaC1lY292ZWMyNC9tYWNoL3JvbWltYWdlLmggYi9hcmNoL3NoL2luY2x1ZGUvbWFjaC1lY292ZWMyNC9tYWNoL3JvbWltYWdlLmgKaW5kZXggMWRjZjVlNi4uZDYzZWY1MSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL21hY2gtZWNvdmVjMjQvbWFjaC9yb21pbWFnZS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9tYWNoLWVjb3ZlYzI0L21hY2gvcm9taW1hZ2UuaApAQCAtMzUsNyArMzUsNyBAQAogI2RlZmluZSBISVpDUkEJCTB4YTQwNTAxNTgKICNkZWZpbmUgUEdEUgkJMHhhNDA1MDEyYwogCi1leHRlcm4gaW5saW5lIHZvaWQgbW1jaWZfdXBkYXRlX3Byb2dyZXNzKGludCBucikKK3N0YXRpYyBpbmxpbmUgdm9pZCBtbWNpZl91cGRhdGVfcHJvZ3Jlc3MoaW50IG5yKQogewogCS8qIGRpc2FibGUgSGktWiBmb3IgTEVEIHBpbnMgKi8KIAlfX3Jhd193cml0ZXcoX19yYXdfcmVhZHcoSElaQ1JBKSAmIH4oMSA8PCAxKSwgSElaQ1JBKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9tYWNoLWtmcjJyMDkvbWFjaC9yb21pbWFnZS5oIGIvYXJjaC9zaC9pbmNsdWRlL21hY2gta2ZyMnIwOS9tYWNoL3JvbWltYWdlLmgKaW5kZXggOTc2MjU2YS4uN2E4ODMxNiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL21hY2gta2ZyMnIwOS9tYWNoL3JvbWltYWdlLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL21hY2gta2ZyMnIwOS9tYWNoL3JvbWltYWdlLmgKQEAgLTIzLDcgKzIzLDcgQEAKIAogI2Vsc2UgLyogX19BU1NFTUJMWV9fICovCiAKLWV4dGVybiBpbmxpbmUgdm9pZCBtbWNpZl91cGRhdGVfcHJvZ3Jlc3MoaW50IG5yKQorc3RhdGljIGlubGluZSB2b2lkIG1tY2lmX3VwZGF0ZV9wcm9ncmVzcyhpbnQgbnIpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9tYWNoLXNkazc3ODYvbWFjaC9mcGdhLmggYi9hcmNoL3NoL2luY2x1ZGUvbWFjaC1zZGs3Nzg2L21hY2gvZnBnYS5oCmluZGV4IDQwZjBjMmQuLmE5Y2RhYzQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9tYWNoLXNkazc3ODYvbWFjaC9mcGdhLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL21hY2gtc2RrNzc4Ni9tYWNoL2ZwZ2EuaApAQCAtMTQsMTEgKzE0LDE2IEBACiAjZGVmaW5lIElOVFRFU1RSCTB4MDQwCiAjZGVmaW5lIFNZU1NSCQkweDA1MAogI2RlZmluZSBOUkdQUgkJMHgwNjAKKwogI2RlZmluZSBOTUlTUgkJMHgwNzAKKyNkZWZpbmUgIE5NSVNSX01BTl9OTUkJQklUKDApCisjZGVmaW5lICBOTUlTUl9BVVhfTk1JCUJJVCgxKQorI2RlZmluZSAgTk1JU1JfTUFTSwkoTk1JU1JfTUFOX05NSSB8IE5NSVNSX0FVWF9OTUkpCiAKICNkZWZpbmUgTk1JTVIJCTB4MDgwCiAjZGVmaW5lICBOTUlNUl9NQU5fTk1JTQlCSVQoMCkJLyogTWFudWFsIE5NSSBtYXNrICovCiAjZGVmaW5lICBOTUlNUl9BVVhfTk1JTQlCSVQoMSkJLyogQXV4aWxpYXJ5IE5NSSBtYXNrICovCisjZGVmaW5lICBOTUlNUl9NQVNLCShOTUlNUl9NQU5fTk1JTSB8IE5NSU1SX0FVWF9OTUlNKQogCiAjZGVmaW5lIElOVEJTUgkJMHgwOTAKICNkZWZpbmUgSU5UQk1SCQkweDBhMApAQCAtMTI2LDYgKzEzMSw5IEBACiBleHRlcm4gdm9pZCBfX2lvbWVtICpzZGs3Nzg2X2ZwZ2FfYmFzZTsKIGV4dGVybiB2b2lkIHNkazc3ODZfZnBnYV9pbml0KHZvaWQpOwogCisvKiBhcmNoL3NoL2JvYXJkcy9tYWNoLXNkazc3ODYvbm1pLmMgKi8KK2V4dGVybiB2b2lkIHNkazc3ODZfbm1pX2luaXQodm9pZCk7CisKICNkZWZpbmUgU0RLNzc4Nl9GUEdBX1JFR0FERFIocmVnKQkoc2RrNzc4Nl9mcGdhX2Jhc2UgKyAocmVnKSkKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL01ha2VmaWxlIGIvYXJjaC9zaC9rZXJuZWwvTWFrZWZpbGUKaW5kZXggOGVlZDZhNC4uNzdmN2FlMSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9rZXJuZWwvTWFrZWZpbGUKQEAgLTExLDcgKzExLDcgQEAKIAogQ0ZMQUdTX1JFTU9WRV9yZXR1cm5fYWRkcmVzcy5vID0gLXBnCiAKLW9iai15CTo9IGNsa2Rldi5vIGRlYnVndHJhcHMubyBkbWEtbm9tbXUubyBkdW1wc3RhY2subyAJCVwKK29iai15CTo9IGRlYnVndHJhcHMubyBkbWEtbm9tbXUubyBkdW1wc3RhY2subyAJCVwKIAkgICBpZGxlLm8gaW8ubyBpcnEubyBpcnFfJChCSVRTKS5vIGtkZWJ1Z2ZzLm8JCQlcCiAJICAgbWFjaHZlYy5vIG5taV9kZWJ1Zy5vIHByb2Nlc3MubwkJCQlcCiAJICAgcHJvY2Vzc18kKEJJVFMpLm8gcHRyYWNlLm8gcHRyYWNlXyQoQklUUykubwkJCVwKQEAgLTIwLDYgKzIwLDExIEBACiAJICAgc3lzY2FsbHNfJChCSVRTKS5vIHRpbWUubyB0b3BvbG9neS5vIHRyYXBzLm8JCQlcCiAJICAgdHJhcHNfJChCSVRTKS5vIHVud2luZGVyLm8KIAoraWZuZGVmIENPTkZJR19HRU5FUklDX0lPTUFQCitvYmoteQkJCQkrPSBpb21hcC5vCitvYmotJChDT05GSUdfSEFTX0lPUE9SVCkJKz0gaW9wb3J0Lm8KK2VuZGlmCisKIG9iai15CQkJCSs9IGNwdS8KIG9iai0kKENPTkZJR19WU1lTQ0FMTCkJCSs9IHZzeXNjYWxsLwogb2JqLSQoQ09ORklHX1NNUCkJCSs9IHNtcC5vCkBAIC0zOSw3ICs0NCw2IEBACiBvYmotJChDT05GSUdfSElCRVJOQVRJT04pCSs9IHN3c3VzcC5vCiBvYmotJChDT05GSUdfRFdBUkZfVU5XSU5ERVIpCSs9IGR3YXJmLm8KIG9iai0kKENPTkZJR19QRVJGX0VWRU5UUykJKz0gcGVyZl9ldmVudC5vIHBlcmZfY2FsbGNoYWluLm8KLW9iai0kKENPTkZJR19IQVNfSU9QT1JUKQkrPSBpb19nZW5lcmljLm8KIAogb2JqLSQoQ09ORklHX0hBVkVfSFdfQlJFQUtQT0lOVCkJCSs9IGh3X2JyZWFrcG9pbnQubwogb2JqLSQoQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlJPQURDQVNUKQkrPSBsb2NhbHRpbWVyLm8KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2Nsa2Rldi5jIGIvYXJjaC9zaC9rZXJuZWwvY2xrZGV2LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmODAwZWYuLjAwMDAwMDAKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY2xrZGV2LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNzEgKzAsMCBAQAotLyoKLSAqIGFyY2gvc2gva2VybmVsL2Nsa2Rldi5jCi0gKgotICogQ2xvbmVkIGZyb20gYXJjaC9hcm0vY29tbW9uL2Nsa2Rldi5jOgotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDggUnVzc2VsbCBLaW5nLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogSGVscGVyIGZvciB0aGUgY2xrIEFQSSB0byBhc3Npc3QgbG9va2luZyB1cCBhIHN0cnVjdCBjbGsuCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9lcnIuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxhc20vY2xvY2suaD4KLSNpbmNsdWRlIDxhc20vY2xrZGV2Lmg+Ci0KLXN0YXRpYyBMSVNUX0hFQUQoY2xvY2tzKTsKLXN0YXRpYyBERUZJTkVfTVVURVgoY2xvY2tzX211dGV4KTsKLQotLyoKLSAqIEZpbmQgdGhlIGNvcnJlY3Qgc3RydWN0IGNsayBmb3IgdGhlIGRldmljZSBhbmQgY29ubmVjdGlvbiBJRC4KLSAqIFdlIGRvIHNsaWdodGx5IGZ1enp5IG1hdGNoaW5nIGhlcmU6Ci0gKiAgQW4gZW50cnkgd2l0aCBhIE5VTEwgSUQgaXMgYXNzdW1lZCB0byBiZSBhIHdpbGRjYXJkLgotICogIElmIGFuIGVudHJ5IGhhcyBhIGRldmljZSBJRCwgaXQgbXVzdCBtYXRjaAotICogIElmIGFuIGVudHJ5IGhhcyBhIGNvbm5lY3Rpb24gSUQsIGl0IG11c3QgbWF0Y2gKLSAqIFRoZW4gd2UgdGFrZSB0aGUgbW9zdCBzcGVjaWZpYyBlbnRyeSAtIHdpdGggdGhlIGZvbGxvd2luZwotICogb3JkZXIgb2YgcHJlY2VkZW5jZTogZGV2K2NvbiA+IGRldiBvbmx5ID4gY29uIG9ubHkuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrICpjbGtfZmluZChjb25zdCBjaGFyICpkZXZfaWQsIGNvbnN0IGNoYXIgKmNvbl9pZCkKLXsKLQlzdHJ1Y3QgY2xrX2xvb2t1cCAqcDsKLQlzdHJ1Y3QgY2xrICpjbGsgPSBOVUxMOwotCWludCBtYXRjaCwgYmVzdCA9IDA7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsICZjbG9ja3MsIG5vZGUpIHsKLQkJbWF0Y2ggPSAwOwotCQlpZiAocC0+ZGV2X2lkKSB7Ci0JCQlpZiAoIWRldl9pZCB8fCBzdHJjbXAocC0+ZGV2X2lkLCBkZXZfaWQpKQotCQkJCWNvbnRpbnVlOwotCQkJbWF0Y2ggKz0gMjsKLQkJfQotCQlpZiAocC0+Y29uX2lkKSB7Ci0JCQlpZiAoIWNvbl9pZCB8fCBzdHJjbXAocC0+Y29uX2lkLCBjb25faWQpKQotCQkJCWNvbnRpbnVlOwotCQkJbWF0Y2ggKz0gMTsKLQkJfQotCQlpZiAobWF0Y2ggPT0gMCkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChtYXRjaCA+IGJlc3QpIHsKLQkJCWNsayA9IHAtPmNsazsKLQkJCWJlc3QgPSBtYXRjaDsKLQkJfQotCX0KLQlyZXR1cm4gY2xrOwotfQotCi1zdHJ1Y3QgY2xrICpjbGtfZ2V0X3N5cyhjb25zdCBjaGFyICpkZXZfaWQsIGNvbnN0IGNoYXIgKmNvbl9pZCkKLXsKLQlzdHJ1Y3QgY2xrICpjbGs7Ci0KLQltdXRleF9sb2NrKCZjbG9ja3NfbXV0ZXgpOwotCWNsayA9IGNsa19maW5kKGRldl9pZCwgY29uX2lkKTsKLQltdXRleF91bmxvY2soJmNsb2Nrc19tdXRleCk7Ci0KLQlyZXR1cm4gY2xrID8gY2xrIDogRVJSX1BUUigtRU5PRU5UKTsKLX0KLUVYUE9SVF9TWU1CT0woY2xrX2dldF9zeXMpOwotCi12b2lkIGNsa2Rldl9hZGQoc3RydWN0IGNsa19sb29rdXAgKmNsKQotewotCW11dGV4X2xvY2soJmNsb2Nrc19tdXRleCk7Ci0JbGlzdF9hZGRfdGFpbCgmY2wtPm5vZGUsICZjbG9ja3MpOwotCW11dGV4X3VubG9jaygmY2xvY2tzX211dGV4KTsKLX0KLUVYUE9SVF9TWU1CT0woY2xrZGV2X2FkZCk7Ci0KLXZvaWQgX19pbml0IGNsa2Rldl9hZGRfdGFibGUoc3RydWN0IGNsa19sb29rdXAgKmNsLCBzaXplX3QgbnVtKQotewotCW11dGV4X2xvY2soJmNsb2Nrc19tdXRleCk7Ci0Jd2hpbGUgKG51bS0tKSB7Ci0JCWxpc3RfYWRkX3RhaWwoJmNsLT5ub2RlLCAmY2xvY2tzKTsKLQkJY2wrKzsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZjbG9ja3NfbXV0ZXgpOwotfQotCi0jZGVmaW5lIE1BWF9ERVZfSUQJMjAKLSNkZWZpbmUgTUFYX0NPTl9JRAkxNgotCi1zdHJ1Y3QgY2xrX2xvb2t1cF9hbGxvYyB7Ci0Jc3RydWN0IGNsa19sb29rdXAgY2w7Ci0JY2hhcglkZXZfaWRbTUFYX0RFVl9JRF07Ci0JY2hhcgljb25faWRbTUFYX0NPTl9JRF07Ci19OwotCi1zdHJ1Y3QgY2xrX2xvb2t1cCAqIF9faW5pdF9yZWZvawotY2xrZGV2X2FsbG9jKHN0cnVjdCBjbGsgKmNsaywgY29uc3QgY2hhciAqY29uX2lkLCBjb25zdCBjaGFyICpkZXZfZm10LCAuLi4pCi17Ci0Jc3RydWN0IGNsa19sb29rdXBfYWxsb2MgKmNsYTsKLQotCWlmICghc2xhYl9pc19hdmFpbGFibGUoKSkKLQkJY2xhID0gYWxsb2NfYm9vdG1lbV9sb3dfcGFnZXMoc2l6ZW9mKCpjbGEpKTsKLQllbHNlCi0JCWNsYSA9IGt6YWxsb2Moc2l6ZW9mKCpjbGEpLCBHRlBfS0VSTkVMKTsKLQotCWlmICghY2xhKQotCQlyZXR1cm4gTlVMTDsKLQotCWNsYS0+Y2wuY2xrID0gY2xrOwotCWlmIChjb25faWQpIHsKLQkJc3RybGNweShjbGEtPmNvbl9pZCwgY29uX2lkLCBzaXplb2YoY2xhLT5jb25faWQpKTsKLQkJY2xhLT5jbC5jb25faWQgPSBjbGEtPmNvbl9pZDsKLQl9Ci0KLQlpZiAoZGV2X2ZtdCkgewotCQl2YV9saXN0IGFwOwotCi0JCXZhX3N0YXJ0KGFwLCBkZXZfZm10KTsKLQkJdnNjbnByaW50ZihjbGEtPmRldl9pZCwgc2l6ZW9mKGNsYS0+ZGV2X2lkKSwgZGV2X2ZtdCwgYXApOwotCQljbGEtPmNsLmRldl9pZCA9IGNsYS0+ZGV2X2lkOwotCQl2YV9lbmQoYXApOwotCX0KLQotCXJldHVybiAmY2xhLT5jbDsKLX0KLUVYUE9SVF9TWU1CT0woY2xrZGV2X2FsbG9jKTsKLQotaW50IGNsa19hZGRfYWxpYXMoY29uc3QgY2hhciAqYWxpYXMsIGNvbnN0IGNoYXIgKmFsaWFzX2Rldl9uYW1lLCBjaGFyICppZCwKLQlzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGNsayAqciA9IGNsa19nZXQoZGV2LCBpZCk7Ci0Jc3RydWN0IGNsa19sb29rdXAgKmw7Ci0KLQlpZiAoSVNfRVJSKHIpKQotCQlyZXR1cm4gUFRSX0VSUihyKTsKLQotCWwgPSBjbGtkZXZfYWxsb2MociwgYWxpYXMsIGFsaWFzX2Rldl9uYW1lKTsKLQljbGtfcHV0KHIpOwotCWlmICghbCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JY2xrZGV2X2FkZChsKTsKLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0woY2xrX2FkZF9hbGlhcyk7Ci0KLS8qCi0gKiBjbGtkZXZfZHJvcCAtIHJlbW92ZSBhIGNsb2NrIGR5bmFtaWNhbGx5IGFsbG9jYXRlZAotICovCi12b2lkIGNsa2Rldl9kcm9wKHN0cnVjdCBjbGtfbG9va3VwICpjbCkKLXsKLQlzdHJ1Y3QgY2xrX2xvb2t1cF9hbGxvYyAqY2xhID0gY29udGFpbmVyX29mKGNsLCBzdHJ1Y3QgY2xrX2xvb2t1cF9hbGxvYywgY2wpOwotCi0JbXV0ZXhfbG9jaygmY2xvY2tzX211dGV4KTsKLQlsaXN0X2RlbCgmY2wtPm5vZGUpOwotCW11dGV4X3VubG9jaygmY2xvY2tzX211dGV4KTsKLQlrZnJlZShjbGEpOwotfQotRVhQT1JUX1NZTUJPTChjbGtkZXZfZHJvcCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvTWFrZWZpbGUgYi9hcmNoL3NoL2tlcm5lbC9jcHUvTWFrZWZpbGUKaW5kZXggNGVkY2I2MC4uZDQ5YzIxMyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L01ha2VmaWxlCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9NYWtlZmlsZQpAQCAtMjAsNCArMjAsNCBAQAogb2JqLSQoQ09ORklHX1NIX0ZQVSkJCSs9IGZwdS5vCiBvYmotJChDT05GSUdfU0hfRlBVX0VNVSkJKz0gZnB1Lm8KIAotb2JqLXkJKz0gaXJxLyBpbml0Lm8gY2xvY2subyBod2Jsay5vCitvYmoteQkrPSBpcnEvIGluaXQubyBjbG9jay5vIGh3YmxrLm8gcHJvYy5vCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvY2xvY2stY3BnLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvY2xvY2stY3BnLmMKaW5kZXggZTJmNjNkNi4uZGQwZTBmMiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L2Nsb2NrLWNwZy5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9jbG9jay1jcGcuYwpAQCAtMiw3ICsyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGFzbS9jbGtkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGtkZXYuaD4KICNpbmNsdWRlIDxhc20vY2xvY2suaD4KIAogc3RhdGljIHN0cnVjdCBjbGsgbWFzdGVyX2NsayA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9jbG9jay5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L2Nsb2NrLmMKaW5kZXggNTBmODg3ZC4uNDE4N2NmNCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L2Nsb2NrLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L2Nsb2NrLmMKQEAgLTQ4LDIwICs0OCw0IEBACiAJcmV0dXJuIHJldDsKIH0KIAotLyoKLSAqIFJldHVybnMgYSBjbG9jay4gTm90ZSB0aGF0IHdlIGZpcnN0IHRyeSB0byB1c2UgZGV2aWNlIGlkIG9uIHRoZSBidXMKLSAqIGFuZCBjbG9jayBuYW1lLiBJZiB0aGlzIGZhaWxzLCB3ZSB0cnkgdG8gdXNlIGNsb2NrIG5hbWUgb25seS4KLSAqLwotc3RydWN0IGNsayAqY2xrX2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmNvbl9pZCkKLXsKLQljb25zdCBjaGFyICpkZXZfaWQgPSBkZXYgPyBkZXZfbmFtZShkZXYpIDogTlVMTDsKLQotCXJldHVybiBjbGtfZ2V0X3N5cyhkZXZfaWQsIGNvbl9pZCk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChjbGtfZ2V0KTsKLQotdm9pZCBjbGtfcHV0KHN0cnVjdCBjbGsgKmNsaykKLXsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGNsa19wdXQpOwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvcHJvYy5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3Byb2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODBhOTM2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3Byb2MuYwpAQCAtMCwwICsxLDE0OCBAQAorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisKK3N0YXRpYyBjb25zdCBjaGFyICpjcHVfbmFtZVtdID0geworCVtDUFVfU0g3MjAxXQk9ICJTSDcyMDEiLAorCVtDUFVfU0g3MjAzXQk9ICJTSDcyMDMiLAlbQ1BVX1NINzI2M10JPSAiU0g3MjYzIiwKKwlbQ1BVX1NINzIwNl0JPSAiU0g3MjA2IiwJW0NQVV9TSDc2MTldCT0gIlNINzYxOSIsCisJW0NQVV9TSDc3MDVdCT0gIlNINzcwNSIsCVtDUFVfU0g3NzA2XQk9ICJTSDc3MDYiLAorCVtDUFVfU0g3NzA3XQk9ICJTSDc3MDciLAlbQ1BVX1NINzcwOF0JPSAiU0g3NzA4IiwKKwlbQ1BVX1NINzcwOV0JPSAiU0g3NzA5IiwJW0NQVV9TSDc3MTBdCT0gIlNINzcxMCIsCisJW0NQVV9TSDc3MTJdCT0gIlNINzcxMiIsCVtDUFVfU0g3NzIwXQk9ICJTSDc3MjAiLAorCVtDUFVfU0g3NzIxXQk9ICJTSDc3MjEiLAlbQ1BVX1NINzcyOV0JPSAiU0g3NzI5IiwKKwlbQ1BVX1NINzc1MF0JPSAiU0g3NzUwIiwJW0NQVV9TSDc3NTBTXQk9ICJTSDc3NTBTIiwKKwlbQ1BVX1NINzc1MFJdCT0gIlNINzc1MFIiLAlbQ1BVX1NINzc1MV0JPSAiU0g3NzUxIiwKKwlbQ1BVX1NINzc1MVJdCT0gIlNINzc1MVIiLAlbQ1BVX1NINzc2MF0JPSAiU0g3NzYwIiwKKwlbQ1BVX1NINF8yMDJdCT0gIlNINC0yMDIiLAlbQ1BVX1NINF81MDFdCT0gIlNINC01MDEiLAorCVtDUFVfU0g3NzYzXQk9ICJTSDc3NjMiLAlbQ1BVX1NINzc3MF0JPSAiU0g3NzcwIiwKKwlbQ1BVX1NINzc4MF0JPSAiU0g3NzgwIiwJW0NQVV9TSDc3ODFdCT0gIlNINzc4MSIsCisJW0NQVV9TSDczNDNdCT0gIlNINzM0MyIsCVtDUFVfU0g3Nzg1XQk9ICJTSDc3ODUiLAorCVtDUFVfU0g3Nzg2XQk9ICJTSDc3ODYiLAlbQ1BVX1NINzc1N10JPSAiU0g3NzU3IiwKKwlbQ1BVX1NINzcyMl0JPSAiU0g3NzIyIiwJW0NQVV9TSFgzXQk9ICJTSC1YMyIsCisJW0NQVV9TSDVfMTAxXQk9ICJTSDUtMTAxIiwJW0NQVV9TSDVfMTAzXQk9ICJTSDUtMTAzIiwKKwlbQ1BVX01YR10JPSAiTVgtRyIsCVtDUFVfU0g3NzIzXQk9ICJTSDc3MjMiLAorCVtDUFVfU0g3MzY2XQk9ICJTSDczNjYiLAlbQ1BVX1NINzcyNF0JPSAiU0g3NzI0IiwKKwlbQ1BVX1NIX05PTkVdCT0gIlVua25vd24iCit9OworCitjb25zdCBjaGFyICpnZXRfY3B1X3N1YnR5cGUoc3RydWN0IHNoX2NwdWluZm8gKmMpCit7CisJcmV0dXJuIGNwdV9uYW1lW2MtPnR5cGVdOworfQorRVhQT1JUX1NZTUJPTChnZXRfY3B1X3N1YnR5cGUpOworCisjaWZkZWYgQ09ORklHX1BST0NfRlMKKy8qIFN5bWJvbGljIENQVSBmbGFncywga2VlcCBpbiBzeW5jIHdpdGggYXNtL2NwdS1mZWF0dXJlcy5oICovCitzdGF0aWMgY29uc3QgY2hhciAqY3B1X2ZsYWdzW10gPSB7CisJIm5vbmUiLCAiZnB1IiwgInAyZmx1c2giLCAibW11YXNzb2MiLCAiZHNwIiwgInBlcmZjdHIiLAorCSJwdGVhIiwgImxsc2MiLCAibDIiLCAib3AzMiIsICJwdGVhZXgiLCBOVUxMCit9OworCitzdGF0aWMgdm9pZCBzaG93X2NwdWZsYWdzKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHNoX2NwdWluZm8gKmMpCit7CisJdW5zaWduZWQgbG9uZyBpOworCisJc2VxX3ByaW50ZihtLCAiY3B1IGZsYWdzXHQ6Iik7CisKKwlpZiAoIWMtPmZsYWdzKSB7CisJCXNlcV9wcmludGYobSwgIiAlc1xuIiwgY3B1X2ZsYWdzWzBdKTsKKwkJcmV0dXJuOworCX0KKworCWZvciAoaSA9IDA7IGNwdV9mbGFnc1tpXTsgaSsrKQorCQlpZiAoKGMtPmZsYWdzICYgKDEgPDwgaSkpKQorCQkJc2VxX3ByaW50ZihtLCAiICVzIiwgY3B1X2ZsYWdzW2krMV0pOworCisJc2VxX3ByaW50ZihtLCAiXG4iKTsKK30KKworc3RhdGljIHZvaWQgc2hvd19jYWNoZWluZm8oc3RydWN0IHNlcV9maWxlICptLCBjb25zdCBjaGFyICp0eXBlLAorCQkJICAgc3RydWN0IGNhY2hlX2luZm8gaW5mbykKK3sKKwl1bnNpZ25lZCBpbnQgY2FjaGVfc2l6ZTsKKworCWNhY2hlX3NpemUgPSBpbmZvLndheXMgKiBpbmZvLnNldHMgKiBpbmZvLmxpbmVzejsKKworCXNlcV9wcmludGYobSwgIiVzIHNpemVcdDogJTJkS2lCICglZC13YXkpXG4iLAorCQkgICB0eXBlLCBjYWNoZV9zaXplID4+IDEwLCBpbmZvLndheXMpOworfQorCisvKgorICoJR2V0IENQVSBpbmZvcm1hdGlvbiBmb3IgdXNlIGJ5IHRoZSBwcm9jZnMuCisgKi8KK3N0YXRpYyBpbnQgc2hvd19jcHVpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKK3sKKwlzdHJ1Y3Qgc2hfY3B1aW5mbyAqYyA9IHY7CisJdW5zaWduZWQgaW50IGNwdSA9IGMgLSBjcHVfZGF0YTsKKworCWlmICghY3B1X29ubGluZShjcHUpKQorCQlyZXR1cm4gMDsKKworCWlmIChjcHUgPT0gMCkKKwkJc2VxX3ByaW50ZihtLCAibWFjaGluZVx0XHQ6ICVzXG4iLCBnZXRfc3lzdGVtX3R5cGUoKSk7CisJZWxzZQorCQlzZXFfcHJpbnRmKG0sICJcbiIpOworCisJc2VxX3ByaW50ZihtLCAicHJvY2Vzc29yXHQ6ICVkXG4iLCBjcHUpOworCXNlcV9wcmludGYobSwgImNwdSBmYW1pbHlcdDogJXNcbiIsIGluaXRfdXRzbmFtZSgpLT5tYWNoaW5lKTsKKwlzZXFfcHJpbnRmKG0sICJjcHUgdHlwZVx0OiAlc1xuIiwgZ2V0X2NwdV9zdWJ0eXBlKGMpKTsKKwlpZiAoYy0+Y3V0X21ham9yID09IC0xKQorCQlzZXFfcHJpbnRmKG0sICJjdXRcdFx0OiB1bmtub3duXG4iKTsKKwllbHNlIGlmIChjLT5jdXRfbWlub3IgPT0gLTEpCisJCXNlcV9wcmludGYobSwgImN1dFx0XHQ6ICVkLnhcbiIsIGMtPmN1dF9tYWpvcik7CisJZWxzZQorCQlzZXFfcHJpbnRmKG0sICJjdXRcdFx0OiAlZC4lZFxuIiwgYy0+Y3V0X21ham9yLCBjLT5jdXRfbWlub3IpOworCisJc2hvd19jcHVmbGFncyhtLCBjKTsKKworCXNlcV9wcmludGYobSwgImNhY2hlIHR5cGVcdDogIik7CisKKwkvKgorCSAqIENoZWNrIGZvciB3aGF0IHR5cGUgb2YgY2FjaGUgd2UgaGF2ZSwgd2Ugc3VwcG9ydCBib3RoIHRoZQorCSAqIHVuaWZpZWQgY2FjaGUgb24gdGhlIFNILTIgYW5kIFNILTMsIGFzIHdlbGwgYXMgdGhlIGhhcnZhcmQKKwkgKiBzdHlsZSBjYWNoZSBvbiB0aGUgU0gtNC4KKwkgKi8KKwlpZiAoYy0+aWNhY2hlLmZsYWdzICYgU0hfQ0FDSEVfQ09NQklORUQpIHsKKwkJc2VxX3ByaW50ZihtLCAidW5pZmllZFxuIik7CisJCXNob3dfY2FjaGVpbmZvKG0sICJjYWNoZSIsIGMtPmljYWNoZSk7CisJfSBlbHNlIHsKKwkJc2VxX3ByaW50ZihtLCAic3BsaXQgKGhhcnZhcmQpXG4iKTsKKwkJc2hvd19jYWNoZWluZm8obSwgImljYWNoZSIsIGMtPmljYWNoZSk7CisJCXNob3dfY2FjaGVpbmZvKG0sICJkY2FjaGUiLCBjLT5kY2FjaGUpOworCX0KKworCS8qIE9wdGlvbmFsIHNlY29uZGFyeSBjYWNoZSAqLworCWlmIChjLT5mbGFncyAmIENQVV9IQVNfTDJfQ0FDSEUpCisJCXNob3dfY2FjaGVpbmZvKG0sICJzY2FjaGUiLCBjLT5zY2FjaGUpOworCisJc2VxX3ByaW50ZihtLCAiYWRkcmVzcyBzaXplc1x0OiAldSBiaXRzIHBoeXNpY2FsXG4iLCBjLT5waHlzX2JpdHMpOworCisJc2VxX3ByaW50ZihtLCAiYm9nb21pcHNcdDogJWx1LiUwMmx1XG4iLAorCQkgICAgIGMtPmxvb3BzX3Blcl9qaWZmeS8oNTAwMDAwL0haKSwKKwkJICAgICAoYy0+bG9vcHNfcGVyX2ppZmZ5Lyg1MDAwL0haKSkgJSAxMDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkICpjX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwb3MpCit7CisJcmV0dXJuICpwb3MgPCBOUl9DUFVTID8gY3B1X2RhdGEgKyAqcG9zIDogTlVMTDsKK30KK3N0YXRpYyB2b2lkICpjX25leHQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKK3sKKwkrKypwb3M7CisJcmV0dXJuIGNfc3RhcnQobSwgcG9zKTsKK30KK3N0YXRpYyB2b2lkIGNfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCit7Cit9Citjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgY3B1aW5mb19vcCA9IHsKKwkuc3RhcnQJPSBjX3N0YXJ0LAorCS5uZXh0CT0gY19uZXh0LAorCS5zdG9wCT0gY19zdG9wLAorCS5zaG93CT0gc2hvd19jcHVpbmZvLAorfTsKKyNlbmRpZiAvKiBDT05GSUdfUFJPQ19GUyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMi9jbG9jay1zaDc2MTkuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDIvY2xvY2stc2g3NjE5LmMKaW5kZXggMGM5ZjI0ZC4uNWI3ZjEyZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMi9jbG9jay1zaDc2MTkuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyL2Nsb2NrLXNoNzYxOS5jCkBAIC0xNCwyNCArMTQsMTggQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGFzbS9jbG9jay5oPgogI2luY2x1ZGUgPGFzbS9mcmVxLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogCiBzdGF0aWMgY29uc3QgaW50IHBsbDFyYXRlW10gPSB7MSwyfTsKIHN0YXRpYyBjb25zdCBpbnQgcGZjX2Rpdmlzb3JzW10gPSB7MSwyLDAsNH07Ci0KLSNpZiAoQ09ORklHX1NIX0NMS19NRCA9PSAxKSB8fCAoQ09ORklHX1NIX0NMS19NRCA9PSAyKQotI2RlZmluZSBQTEwyICg0KQotI2VsaWYgKENPTkZJR19TSF9DTEtfTUQgPT0gNSkgfHwgKENPTkZJR19TSF9DTEtfTUQgPT0gNikKLSNkZWZpbmUgUExMMiAoMikKLSNlbHNlCi0jZXJyb3IgIklsbGlnYWwgQ2xvY2sgTW9kZSEiCi0jZW5kaWYKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcGxsMl9tdWx0OwogCiBzdGF0aWMgdm9pZCBtYXN0ZXJfY2xrX2luaXQoc3RydWN0IGNsayAqY2xrKQogewotCWNsay0+cmF0ZSAqPSBQTEwyICogcGxsMXJhdGVbKF9fcmF3X3JlYWR3KEZSRVFDUikgPj4gOCkgJiA3XTsKKwljbGstPnJhdGUgKj0gcGxsMl9tdWx0ICogcGxsMXJhdGVbKF9fcmF3X3JlYWR3KEZSRVFDUikgPj4gOCkgJiA3XTsKIH0KIAogc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoNzYxOV9tYXN0ZXJfY2xrX29wcyA9IHsKQEAgLTcwLDYgKzY0LDE0IEBACiAKIHZvaWQgX19pbml0IGFyY2hfaW5pdF9jbGtfb3BzKHN0cnVjdCBjbGtfb3BzICoqb3BzLCBpbnQgaWR4KQogeworCWlmICh0ZXN0X21vZGVfcGluKE1PREVfUElOMiB8IE1PREVfUElOMCkgfHwKKwkgICAgdGVzdF9tb2RlX3BpbihNT0RFX1BJTjIgfCBNT0RFX1BJTjEpKQorCQlwbGwyX211bHQgPSAyOworCWVsc2UgaWYgKHRlc3RfbW9kZV9waW4oTU9ERV9QSU4wKSB8fCB0ZXN0X21vZGVfcGluKE1PREVfUElOMSkpCisJCXBsbDJfbXVsdCA9IDQ7CisKKwlCVUdfT04oIXBsbDJfbXVsdCk7CisKIAlpZiAoaWR4IDwgQVJSQVlfU0laRShzaDc2MTlfY2xrX29wcykpCiAJCSpvcHMgPSBzaDc2MTlfY2xrX29wc1tpZHhdOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvY2xvY2stc2g3MjAxLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9jbG9jay1zaDcyMDEuYwppbmRleCBjNTA5YzQwLi4xMTc0ZTJkIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9jbG9jay1zaDcyMDEuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9jbG9jay1zaDcyMDEuYwpAQCAtMjIsMTkgKzIyLDEyIEBACiBzdGF0aWMgY29uc3QgaW50IHBmY19kaXZpc29yc1tdPXsxLDIsMyw0LDYsOCwxMn07CiAjZGVmaW5lIGlmY19kaXZpc29ycyBwZmNfZGl2aXNvcnMKIAotI2lmIChDT05GSUdfU0hfQ0xLX01EID09IDApCi0jZGVmaW5lIFBMTDIgKDQpCi0jZWxpZiAoQ09ORklHX1NIX0NMS19NRCA9PSAyKQotI2RlZmluZSBQTEwyICgyKQotI2VsaWYgKENPTkZJR19TSF9DTEtfTUQgPT0gMykKLSNkZWZpbmUgUExMMiAoMSkKLSNlbHNlCi0jZXJyb3IgIklsbGVnYWwgQ2xvY2sgTW9kZSEiCi0jZW5kaWYKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcGxsMl9tdWx0OwogCiBzdGF0aWMgdm9pZCBtYXN0ZXJfY2xrX2luaXQoc3RydWN0IGNsayAqY2xrKQogewotCWNsay0+cmF0ZSA9IDEwMDAwMDAwICogUExMMiAqIHBsbDFyYXRlWyhfX3Jhd19yZWFkdyhGUkVRQ1IpID4+IDgpICYgMHgwMDA3XTsKKwljbGstPnJhdGUgPSAxMDAwMDAwMCAqIHBsbDJfbXVsdCAqCisJICAgICAgIHBsbDFyYXRlWyhfX3Jhd19yZWFkdyhGUkVRQ1IpID4+IDgpICYgMHgwMDA3XTsKIH0KIAogc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoNzIwMV9tYXN0ZXJfY2xrX29wcyA9IHsKQEAgLTgwLDYgKzczLDEzIEBACiAKIHZvaWQgX19pbml0IGFyY2hfaW5pdF9jbGtfb3BzKHN0cnVjdCBjbGtfb3BzICoqb3BzLCBpbnQgaWR4KQogeworCWlmICh0ZXN0X21vZGVfcGluKE1PREVfUElOMSB8IE1PREVfUElOMCkpCisJCXBsbDJfbXVsdCA9IDE7CisJZWxzZSBpZiAodGVzdF9tb2RlX3BpbihNT0RFX1BJTjEpKQorCQlwbGwyX211bHQgPSAyOworCWVsc2UKKwkJcGxsMl9tdWx0ID0gNDsKKwogCWlmIChpZHggPCBBUlJBWV9TSVpFKHNoNzIwMV9jbGtfb3BzKSkKIAkJKm9wcyA9IHNoNzIwMV9jbGtfb3BzW2lkeF07CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9jbG9jay1zaDcyMDMuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL2Nsb2NrLXNoNzIwMy5jCmluZGV4IDdlNzVkOGYuLjk1YTAwOGUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL2Nsb2NrLXNoNzIwMy5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL2Nsb2NrLXNoNzIwMy5jCkBAIC0yNSwyMSArMjUsMTEgQEAKIHN0YXRpYyBjb25zdCBpbnQgcGZjX2Rpdmlzb3JzW109ezEsMiwzLDQsNiw4LDEyfTsKICNkZWZpbmUgaWZjX2Rpdmlzb3JzIHBmY19kaXZpc29ycwogCi0jaWYgKENPTkZJR19TSF9DTEtfTUQgPT0gMCkKLSNkZWZpbmUgUExMMiAoMSkKLSNlbGlmIChDT05GSUdfU0hfQ0xLX01EID09IDEpCi0jZGVmaW5lIFBMTDIgKDIpCi0jZWxpZiAoQ09ORklHX1NIX0NMS19NRCA9PSAyKQotI2RlZmluZSBQTEwyICg0KQotI2VsaWYgKENPTkZJR19TSF9DTEtfTUQgPT0gMykKLSNkZWZpbmUgUExMMiAoNCkKLSNlbHNlCi0jZXJyb3IgIklsbGVnYWwgQ2xvY2sgTW9kZSEiCi0jZW5kaWYKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcGxsMl9tdWx0OwogCiBzdGF0aWMgdm9pZCBtYXN0ZXJfY2xrX2luaXQoc3RydWN0IGNsayAqY2xrKQogewotCWNsay0+cmF0ZSAqPSBwbGwxcmF0ZVsoX19yYXdfcmVhZHcoRlJFUUNSKSA+PiA4KSAmIDB4MDAwM10gKiBQTEwyIDsKKwljbGstPnJhdGUgKj0gcGxsMXJhdGVbKF9fcmF3X3JlYWR3KEZSRVFDUikgPj4gOCkgJiAweDAwMDNdICogcGxsMl9tdWx0OwogfQogCiBzdGF0aWMgc3RydWN0IGNsa19vcHMgc2g3MjAzX21hc3Rlcl9jbGtfb3BzID0gewpAQCAtNzksNiArNjksMTMgQEAKIAogdm9pZCBfX2luaXQgYXJjaF9pbml0X2Nsa19vcHMoc3RydWN0IGNsa19vcHMgKipvcHMsIGludCBpZHgpCiB7CisJaWYgKHRlc3RfbW9kZV9waW4oTU9ERV9QSU4xKSkKKwkJcGxsMl9tdWx0ID0gNDsKKwllbHNlIGlmICh0ZXN0X21vZGVfcGluKE1PREVfUElOMCkpCisJCXBsbDJfbXVsdCA9IDI7CisJZWxzZQorCQlwbGwyX211bHQgPSAxOworCiAJaWYgKGlkeCA8IEFSUkFZX1NJWkUoc2g3MjAzX2Nsa19vcHMpKQogCQkqb3BzID0gc2g3MjAzX2Nsa19vcHNbaWR4XTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL2Nsb2NrLXNoNzIwNi5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvY2xvY2stc2g3MjA2LmMKaW5kZXggYjI3YTVlMi4uM2MzMTRkNyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvY2xvY2stc2g3MjA2LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvY2xvY2stc2g3MjA2LmMKQEAgLTIyLDE5ICsyMiwxMSBAQAogc3RhdGljIGNvbnN0IGludCBwZmNfZGl2aXNvcnNbXT17MSwyLDMsNCw2LDgsMTJ9OwogI2RlZmluZSBpZmNfZGl2aXNvcnMgcGZjX2Rpdmlzb3JzCiAKLSNpZiAoQ09ORklHX1NIX0NMS19NRCA9PSAyKQotI2RlZmluZSBQTEwyICg0KQotI2VsaWYgKENPTkZJR19TSF9DTEtfTUQgPT0gNikKLSNkZWZpbmUgUExMMiAoMikKLSNlbGlmIChDT05GSUdfU0hfQ0xLX01EID09IDcpCi0jZGVmaW5lIFBMTDIgKDEpCi0jZWxzZQotI2Vycm9yICJJbGxpZ2FsIENsb2NrIE1vZGUhIgotI2VuZGlmCitzdGF0aWMgdW5zaWduZWQgaW50IHBsbDJfbXVsdDsKIAogc3RhdGljIHZvaWQgbWFzdGVyX2Nsa19pbml0KHN0cnVjdCBjbGsgKmNsaykKIHsKLQljbGstPnJhdGUgKj0gUExMMiAqIHBsbDFyYXRlWyhfX3Jhd19yZWFkdyhGUkVRQ1IpID4+IDgpICYgMHgwMDA3XTsKKwljbGstPnJhdGUgKj0gcGxsMl9tdWx0ICogcGxsMXJhdGVbKF9fcmF3X3JlYWR3KEZSRVFDUikgPj4gOCkgJiAweDAwMDddOwogfQogCiBzdGF0aWMgc3RydWN0IGNsa19vcHMgc2g3MjA2X21hc3Rlcl9jbGtfb3BzID0gewpAQCAtNzksNyArNzEsMTMgQEAKIAogdm9pZCBfX2luaXQgYXJjaF9pbml0X2Nsa19vcHMoc3RydWN0IGNsa19vcHMgKipvcHMsIGludCBpZHgpCiB7CisJaWYgKHRlc3RfbW9kZV9waW4oTU9ERV9QSU4yIHwgTU9ERV9QSU4xIHwgTU9ERV9QSU4wKSkKKwkJcGxsMl9tdWx0ID0gMTsKKwllbHNlIGlmICh0ZXN0X21vZGVfcGluKE1PREVfUElOMiB8IE1PREVfUElOMSkpCisJCXBsbDJfbXVsdCA9IDI7CisJZWxzZSBpZiAodGVzdF9tb2RlX3BpbihNT0RFX1BJTjEpKQorCQlwbGwyX211bHQgPSA0OworCiAJaWYgKGlkeCA8IEFSUkFZX1NJWkUoc2g3MjA2X2Nsa19vcHMpKQogCQkqb3BzID0gc2g3MjA2X2Nsa19vcHNbaWR4XTsKIH0KLQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9jbG9jay1zaDQtMjAyLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L2Nsb2NrLXNoNC0yMDIuYwppbmRleCA2MjgyYTgzLi4zZjZmOGU5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L2Nsb2NrLXNoNC0yMDIuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L2Nsb2NrLXNoNC0yMDIuYwpAQCAtMTMsNyArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2Nsa2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsa2Rldi5oPgogI2luY2x1ZGUgPGFzbS9jbG9jay5oPgogI2luY2x1ZGUgPGFzbS9mcmVxLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvcGVyZl9ldmVudC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9wZXJmX2V2ZW50LmMKaW5kZXggZGJmM2I0Yi4uNzQ4OTU1ZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9wZXJmX2V2ZW50LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9wZXJmX2V2ZW50LmMKQEAgLTI1MCw0ICsyNTAsNCBAQAogCiAJcmV0dXJuIHJlZ2lzdGVyX3NoX3BtdSgmc2g3NzUwX3BtdSk7CiB9Ci1hcmNoX2luaXRjYWxsKHNoNzc1MF9wbXVfaW5pdCk7CitlYXJseV9pbml0Y2FsbChzaDc3NTBfcG11X2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3MzQzLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDczNDMuYwppbmRleCA3MTI5MWFlLi45M2M2NDYwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDczNDMuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDczNDMuYwpAQCAtMjEsNyArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGFzbS9jbGtkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGtkZXYuaD4KICNpbmNsdWRlIDxhc20vY2xvY2suaD4KIAogLyogU0g3MzQzIHJlZ2lzdGVycyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3MzY2LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDczNjYuYwppbmRleCA3Y2U1YmJjLi4wNDlkYzA2MiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3MzY2LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3MzY2LmMKQEAgLTIxLDcgKzIxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxhc20vY2xrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvY2xrZGV2Lmg+CiAjaW5jbHVkZSA8YXNtL2Nsb2NrLmg+CiAKIC8qIFNINzM2NiByZWdpc3RlcnMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzcyMi5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzIyLmMKaW5kZXggMjAzMGYzZC4uOWQyM2EzNiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzIyLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzIyLmMKQEAgLTIxLDcgKzIxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxhc20vY2xrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvY2xrZGV2Lmg+CiAjaW5jbHVkZSA8YXNtL2Nsb2NrLmg+CiAjaW5jbHVkZSA8YXNtL2h3YmxrLmg+CiAjaW5jbHVkZSA8Y3B1L3NoNzcyMi5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzIzLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3MjMuYwppbmRleCBkMzkzOGYwLi41NTQ5M2NkIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3MjMuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3MjMuYwpAQCAtMjIsNyArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+Ci0jaW5jbHVkZSA8YXNtL2Nsa2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsa2Rldi5oPgogI2luY2x1ZGUgPGFzbS9jbG9jay5oPgogI2luY2x1ZGUgPGFzbS9od2Jsay5oPgogI2luY2x1ZGUgPGNwdS9zaDc3MjMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzcyNC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzI0LmMKaW5kZXggMjcxYzBiMzIuLmQwOGZhOTUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzcyNC5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzcyNC5jCkBAIC0yMiw3ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KLSNpbmNsdWRlIDxhc20vY2xrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvY2xrZGV2Lmg+CiAjaW5jbHVkZSA8YXNtL2Nsb2NrLmg+CiAjaW5jbHVkZSA8YXNtL2h3YmxrLmg+CiAjaW5jbHVkZSA8Y3B1L3NoNzcyNC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzU3LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3NTcuYwppbmRleCBjZTM5YTJhLi5lMDczZTNlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3NTcuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3NTcuYwpAQCAtMTIsNyArMTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGFzbS9jbGtkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGtkZXYuaD4KICNpbmNsdWRlIDxhc20vY2xvY2suaD4KICNpbmNsdWRlIDxhc20vZnJlcS5oPgogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3NjMuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc2My5jCmluZGV4IDFmMWRmNDguLjU5OTYzMGYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc2My5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc2My5jCkBAIC0xMyw3ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2Nsa2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsa2Rldi5oPgogI2luY2x1ZGUgPGFzbS9jbG9jay5oPgogI2luY2x1ZGUgPGFzbS9mcmVxLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3ODAuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc4MC5jCmluZGV4IDYyZDcwNjMuLjg4OTQ5MjYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc4MC5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc4MC5jCkBAIC0xMiw3ICsxMiw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2Nsa2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsa2Rldi5oPgogI2luY2x1ZGUgPGFzbS9jbG9jay5oPgogI2luY2x1ZGUgPGFzbS9mcmVxLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3ODUuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc4NS5jCmluZGV4IGMzZTQ1OGEuLjJkOTYwMjQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc4NS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc4NS5jCkBAIC0xNCw3ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9jcHVmcmVxLmg+Ci0jaW5jbHVkZSA8YXNtL2Nsa2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsa2Rldi5oPgogI2luY2x1ZGUgPGFzbS9jbG9jay5oPgogI2luY2x1ZGUgPGFzbS9mcmVxLmg+CiAjaW5jbHVkZSA8Y3B1L3NoNzc4NS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3Nzg2LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3ODYuYwppbmRleCA1OTdjOWZiLi40MmU0MDNiIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3ODYuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3ODYuYwpAQCAtMTMsNyArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2Nsa2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsa2Rldi5oPgogI2luY2x1ZGUgPGFzbS9jbG9jay5oPgogI2luY2x1ZGUgPGFzbS9mcmVxLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoeDMuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoeDMuYwppbmRleCA0ZjcwZGY2Li4xYWZkYjkzIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaHgzLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2h4My5jCkBAIC0xNCw3ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2Nsa2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsa2Rldi5oPgogI2luY2x1ZGUgPGFzbS9jbG9jay5oPgogI2luY2x1ZGUgPGFzbS9mcmVxLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3BlcmZfZXZlbnQuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3BlcmZfZXZlbnQuYwppbmRleCA1ODAyNzY1Li4xN2U2YmViIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9wZXJmX2V2ZW50LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvcGVyZl9ldmVudC5jCkBAIC0yODQsNCArMjg0LDQgQEAKIAogCXJldHVybiByZWdpc3Rlcl9zaF9wbXUoJnNoNGFfcG11KTsKIH0KLWFyY2hfaW5pdGNhbGwoc2g0YV9wbXVfaW5pdCk7CitlYXJseV9pbml0Y2FsbChzaDRhX3BtdV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4Ni5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3Nzg2LmMKaW5kZXggYzAxNmMwMC4uMDE3MGRiZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3Nzg2LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3Nzg2LmMKQEAgLTUyMiwxMCArNTIyLDEzIEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdXNiX29oY2lfcmVzb3VyY2VzW10gPSB7CisjZGVmaW5lIFVTQl9FSENJX1NUQVJUIDB4ZmZlNzAwMDAKKyNkZWZpbmUgVVNCX09IQ0lfU1RBUlQgMHhmZmU3MDQwMAorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHVzYl9laGNpX3Jlc291cmNlc1tdID0gewogCVswXSA9IHsKLQkJLnN0YXJ0CT0gMHhmZmU3MDQwMCwKLQkJLmVuZAk9IDB4ZmZlNzA0ZmYsCisJCS5zdGFydAk9IFVTQl9FSENJX1NUQVJULAorCQkuZW5kCT0gVVNCX0VIQ0lfU1RBUlQgKyAweDNmZiwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKIAlbMV0gPSB7CkBAIC01MzUsMTIgKzUzOCwzNSBAQAogCX0sCiB9OwogCi1zdGF0aWMgdTY0IHVzYl9vaGNpX2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHVzYl9laGNpX2RldmljZSA9IHsKKwkubmFtZQkJPSAic2hfZWhjaSIsCisJLmlkCQk9IC0xLAorCS5kZXYgPSB7CisJCS5kbWFfbWFzawkJPSAmdXNiX2VoY2lfZGV2aWNlLmRldi5jb2hlcmVudF9kbWFfbWFzaywKKwkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh1c2JfZWhjaV9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IHVzYl9laGNpX3Jlc291cmNlcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdXNiX29oY2lfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBVU0JfT0hDSV9TVEFSVCwKKwkJLmVuZAk9IFVTQl9PSENJX1NUQVJUICsgMHgzZmYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSA3NywKKwkJLmVuZAk9IDc3LAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdXNiX29oY2lfZGV2aWNlID0gewogCS5uYW1lCQk9ICJzaF9vaGNpIiwKIAkuaWQJCT0gLTEsCiAJLmRldiA9IHsKLQkJLmRtYV9tYXNrCQk9ICZ1c2Jfb2hjaV9kbWFfbWFzaywKKwkJLmRtYV9tYXNrCQk9ICZ1c2Jfb2hjaV9kZXZpY2UuZGV2LmNvaGVyZW50X2RtYV9tYXNrLAogCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAogCX0sCiAJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHVzYl9vaGNpX3Jlc291cmNlcyksCkBAIC01NzAsNiArNTk2LDcgQEAKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNoNzc4Nl9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmZG1hMF9kZXZpY2UsCisJJnVzYl9laGNpX2RldmljZSwKIAkmdXNiX29oY2lfZGV2aWNlLAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvaW9fZ2VuZXJpYy5jIGIvYXJjaC9zaC9rZXJuZWwvaW9fZ2VuZXJpYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NDdkNzhmLi4wMDAwMDAwCi0tLSBhL2FyY2gvc2gva2VybmVsL2lvX2dlbmVyaWMuYworKysgL2Rldi9udWxsCkBAIC0xLDE4MCArMCwwIEBACi0vKgotICogYXJjaC9zaC9rZXJuZWwvaW9fZ2VuZXJpYy5jCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAwICBOaWliZSBZdXRha2EKLSAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMDcgUGF1bCBNdW5kdAotICoKLSAqIEdlbmVyaWMgSS9PIHJvdXRpbmUuIFRoZXNlIGNhbiBiZSB1c2VkIHdoZXJlIGEgbWFjaGluZSBzcGVjaWZpYyB2ZXJzaW9uCi0gKiBpcyBub3QgcmVxdWlyZWQuCi0gKgotICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKLSAqIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+Ci0KLSNpZmRlZiBDT05GSUdfQ1BVX1NIMwotLyogU0gzIGhhcyBhIFBDTUNJQSBidWcgdGhhdCBuZWVkcyBhIGR1bW15IHJlYWQgZnJvbSBhcmVhIDYgZm9yIGEKLSAqIHdvcmthcm91bmQuICovCi0vKiBJJ20gbm90IHN1cmUgU0g3NzA5IGhhcyB0aGlzIGtpbmQgb2YgYnVnICovCi0jZGVmaW5lIGR1bW15X3JlYWQoKQlfX3Jhd19yZWFkYigweGJhMDAwMDAwKQotI2Vsc2UKLSNkZWZpbmUgZHVtbXlfcmVhZCgpCi0jZW5kaWYKLQotdW5zaWduZWQgbG9uZyBnZW5lcmljX2lvX2Jhc2UgPSAwOwotCi11OCBnZW5lcmljX2luYih1bnNpZ25lZCBsb25nIHBvcnQpCi17Ci0JcmV0dXJuIF9fcmF3X3JlYWRiKF9faW9wb3J0X21hcChwb3J0LCAxKSk7Ci19Ci0KLXUxNiBnZW5lcmljX2ludyh1bnNpZ25lZCBsb25nIHBvcnQpCi17Ci0JcmV0dXJuIF9fcmF3X3JlYWR3KF9faW9wb3J0X21hcChwb3J0LCAyKSk7Ci19Ci0KLXUzMiBnZW5lcmljX2lubCh1bnNpZ25lZCBsb25nIHBvcnQpCi17Ci0JcmV0dXJuIF9fcmF3X3JlYWRsKF9faW9wb3J0X21hcChwb3J0LCA0KSk7Ci19Ci0KLXU4IGdlbmVyaWNfaW5iX3AodW5zaWduZWQgbG9uZyBwb3J0KQotewotCXVuc2lnbmVkIGxvbmcgdiA9IGdlbmVyaWNfaW5iKHBvcnQpOwotCi0JY3RybF9kZWxheSgpOwotCXJldHVybiB2OwotfQotCi11MTYgZ2VuZXJpY19pbndfcCh1bnNpZ25lZCBsb25nIHBvcnQpCi17Ci0JdW5zaWduZWQgbG9uZyB2ID0gZ2VuZXJpY19pbncocG9ydCk7Ci0KLQljdHJsX2RlbGF5KCk7Ci0JcmV0dXJuIHY7Ci19Ci0KLXUzMiBnZW5lcmljX2lubF9wKHVuc2lnbmVkIGxvbmcgcG9ydCkKLXsKLQl1bnNpZ25lZCBsb25nIHYgPSBnZW5lcmljX2lubChwb3J0KTsKLQotCWN0cmxfZGVsYXkoKTsKLQlyZXR1cm4gdjsKLX0KLQotLyoKLSAqIGluc2Ivdy9sIGFsbCByZWFkIGEgc2VyaWVzIG9mIGJ5dGVzL3dvcmRzL2xvbmdzIGZyb20gYSBmaXhlZCBwb3J0Ci0gKiBhZGRyZXNzLiBIb3dldmVyIGFzIHRoZSBwb3J0IGFkZHJlc3MgZG9lc24ndCBjaGFuZ2Ugd2Ugb25seSBuZWVkIHRvCi0gKiBjb252ZXJ0IHRoZSBwb3J0IGFkZHJlc3MgdG8gcmVhbCBhZGRyZXNzIG9uY2UuCi0gKi8KLQotdm9pZCBnZW5lcmljX2luc2IodW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICpkc3QsIHVuc2lnbmVkIGxvbmcgY291bnQpCi17Ci0JX19yYXdfcmVhZHNiKF9faW9wb3J0X21hcChwb3J0LCAxKSwgZHN0LCBjb3VudCk7Ci0JZHVtbXlfcmVhZCgpOwotfQotCi12b2lkIGdlbmVyaWNfaW5zdyh1bnNpZ25lZCBsb25nIHBvcnQsIHZvaWQgKmRzdCwgdW5zaWduZWQgbG9uZyBjb3VudCkKLXsKLQlfX3Jhd19yZWFkc3coX19pb3BvcnRfbWFwKHBvcnQsIDIpLCBkc3QsIGNvdW50KTsKLQlkdW1teV9yZWFkKCk7Ci19Ci0KLXZvaWQgZ2VuZXJpY19pbnNsKHVuc2lnbmVkIGxvbmcgcG9ydCwgdm9pZCAqZHN0LCB1bnNpZ25lZCBsb25nIGNvdW50KQotewotCV9fcmF3X3JlYWRzbChfX2lvcG9ydF9tYXAocG9ydCwgNCksIGRzdCwgY291bnQpOwotCWR1bW15X3JlYWQoKTsKLX0KLQotdm9pZCBnZW5lcmljX291dGIodTggYiwgdW5zaWduZWQgbG9uZyBwb3J0KQotewotCV9fcmF3X3dyaXRlYihiLCBfX2lvcG9ydF9tYXAocG9ydCwgMSkpOwotfQotCi12b2lkIGdlbmVyaWNfb3V0dyh1MTYgYiwgdW5zaWduZWQgbG9uZyBwb3J0KQotewotCV9fcmF3X3dyaXRldyhiLCBfX2lvcG9ydF9tYXAocG9ydCwgMikpOwotfQotCi12b2lkIGdlbmVyaWNfb3V0bCh1MzIgYiwgdW5zaWduZWQgbG9uZyBwb3J0KQotewotCV9fcmF3X3dyaXRlbChiLCBfX2lvcG9ydF9tYXAocG9ydCwgNCkpOwotfQotCi12b2lkIGdlbmVyaWNfb3V0Yl9wKHU4IGIsIHVuc2lnbmVkIGxvbmcgcG9ydCkKLXsKLQlnZW5lcmljX291dGIoYiwgcG9ydCk7Ci0JY3RybF9kZWxheSgpOwotfQotCi12b2lkIGdlbmVyaWNfb3V0d19wKHUxNiBiLCB1bnNpZ25lZCBsb25nIHBvcnQpCi17Ci0JZ2VuZXJpY19vdXR3KGIsIHBvcnQpOwotCWN0cmxfZGVsYXkoKTsKLX0KLQotdm9pZCBnZW5lcmljX291dGxfcCh1MzIgYiwgdW5zaWduZWQgbG9uZyBwb3J0KQotewotCWdlbmVyaWNfb3V0bChiLCBwb3J0KTsKLQljdHJsX2RlbGF5KCk7Ci19Ci0KLS8qCi0gKiBvdXRzYi93L2wgYWxsIHdyaXRlIGEgc2VyaWVzIG9mIGJ5dGVzL3dvcmRzL2xvbmdzIHRvIGEgZml4ZWQgcG9ydAotICogYWRkcmVzcy4gSG93ZXZlciBhcyB0aGUgcG9ydCBhZGRyZXNzIGRvZXNuJ3QgY2hhbmdlIHdlIG9ubHkgbmVlZCB0bwotICogY29udmVydCB0aGUgcG9ydCBhZGRyZXNzIHRvIHJlYWwgYWRkcmVzcyBvbmNlLgotICovCi12b2lkIGdlbmVyaWNfb3V0c2IodW5zaWduZWQgbG9uZyBwb3J0LCBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIGxvbmcgY291bnQpCi17Ci0JX19yYXdfd3JpdGVzYihfX2lvcG9ydF9tYXAocG9ydCwgMSksIHNyYywgY291bnQpOwotCWR1bW15X3JlYWQoKTsKLX0KLQotdm9pZCBnZW5lcmljX291dHN3KHVuc2lnbmVkIGxvbmcgcG9ydCwgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBsb25nIGNvdW50KQotewotCV9fcmF3X3dyaXRlc3coX19pb3BvcnRfbWFwKHBvcnQsIDIpLCBzcmMsIGNvdW50KTsKLQlkdW1teV9yZWFkKCk7Ci19Ci0KLXZvaWQgZ2VuZXJpY19vdXRzbCh1bnNpZ25lZCBsb25nIHBvcnQsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgbG9uZyBjb3VudCkKLXsKLQlfX3Jhd193cml0ZXNsKF9faW9wb3J0X21hcChwb3J0LCA0KSwgc3JjLCBjb3VudCk7Ci0JZHVtbXlfcmVhZCgpOwotfQotCi12b2lkIF9faW9tZW0gKmdlbmVyaWNfaW9wb3J0X21hcCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGludCBzaXplKQotewotI2lmZGVmIFAxU0VHCi0JaWYgKFBYU0VHKGFkZHIpID49IFAxU0VHKQotCQlyZXR1cm4gKHZvaWQgX19pb21lbSAqKWFkZHI7Ci0jZW5kaWYKLQotCXJldHVybiAodm9pZCBfX2lvbWVtICopKGFkZHIgKyBnZW5lcmljX2lvX2Jhc2UpOwotfQotCi12b2lkIGdlbmVyaWNfaW9wb3J0X3VubWFwKHZvaWQgX19pb21lbSAqYWRkcikKLXsKLX0KLQotI2lmbmRlZiBDT05GSUdfR0VORVJJQ19JT01BUAotdm9pZCBfX2lvbWVtICppb3BvcnRfbWFwKHVuc2lnbmVkIGxvbmcgcG9ydCwgdW5zaWduZWQgaW50IG5yKQotewotCXZvaWQgX19pb21lbSAqcmV0OwotCi0JcmV0ID0gX19pb3BvcnRfbWFwX3RyYXBwZWQocG9ydCwgbnIpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlyZXR1cm4gX19pb3BvcnRfbWFwKHBvcnQsIG5yKTsKLX0KLUVYUE9SVF9TWU1CT0woaW9wb3J0X21hcCk7Ci0KLXZvaWQgaW9wb3J0X3VubWFwKHZvaWQgX19pb21lbSAqYWRkcikKLXsKLQlzaF9tdi5tdl9pb3BvcnRfdW5tYXAoYWRkcik7Ci19Ci1FWFBPUlRfU1lNQk9MKGlvcG9ydF91bm1hcCk7Ci0jZW5kaWYgLyogQ09ORklHX0dFTkVSSUNfSU9NQVAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2lvbWFwLmMgYi9hcmNoL3NoL2tlcm5lbC9pb21hcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlOGU4YjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2tlcm5lbC9pb21hcC5jCkBAIC0wLDAgKzEsMTY1IEBACisvKgorICogYXJjaC9zaC9rZXJuZWwvaW9tYXAuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCAgTmlpYmUgWXV0YWthCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDA3IFBhdWwgTXVuZHQKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKK3Vuc2lnbmVkIGludCBpb3JlYWQ4KHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlyZXR1cm4gcmVhZGIoYWRkcik7Cit9CitFWFBPUlRfU1lNQk9MKGlvcmVhZDgpOworCit1bnNpZ25lZCBpbnQgaW9yZWFkMTYodm9pZCBfX2lvbWVtICphZGRyKQoreworCXJldHVybiByZWFkdyhhZGRyKTsKK30KK0VYUE9SVF9TWU1CT0woaW9yZWFkMTYpOworCit1bnNpZ25lZCBpbnQgaW9yZWFkMTZiZSh2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJcmV0dXJuIGJlMTZfdG9fY3B1KF9fcmF3X3JlYWR3KGFkZHIpKTsKK30KK0VYUE9SVF9TWU1CT0woaW9yZWFkMTZiZSk7CisKK3Vuc2lnbmVkIGludCBpb3JlYWQzMih2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJcmV0dXJuIHJlYWRsKGFkZHIpOworfQorRVhQT1JUX1NZTUJPTChpb3JlYWQzMik7CisKK3Vuc2lnbmVkIGludCBpb3JlYWQzMmJlKHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlyZXR1cm4gYmUzMl90b19jcHUoX19yYXdfcmVhZGwoYWRkcikpOworfQorRVhQT1JUX1NZTUJPTChpb3JlYWQzMmJlKTsKKwordm9pZCBpb3dyaXRlOCh1OCB2YWwsIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwl3cml0ZWIodmFsLCBhZGRyKTsKK30KK0VYUE9SVF9TWU1CT0woaW93cml0ZTgpOworCit2b2lkIGlvd3JpdGUxNih1MTYgdmFsLCB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJd3JpdGV3KHZhbCwgYWRkcik7Cit9CitFWFBPUlRfU1lNQk9MKGlvd3JpdGUxNik7CisKK3ZvaWQgaW93cml0ZTE2YmUodTE2IHZhbCwgdm9pZCBfX2lvbWVtICphZGRyKQoreworCV9fcmF3X3dyaXRldyhjcHVfdG9fYmUxNih2YWwpLCBhZGRyKTsKK30KK0VYUE9SVF9TWU1CT0woaW93cml0ZTE2YmUpOworCit2b2lkIGlvd3JpdGUzMih1MzIgdmFsLCB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJd3JpdGVsKHZhbCwgYWRkcik7Cit9CitFWFBPUlRfU1lNQk9MKGlvd3JpdGUzMik7CisKK3ZvaWQgaW93cml0ZTMyYmUodTMyIHZhbCwgdm9pZCBfX2lvbWVtICphZGRyKQoreworCV9fcmF3X3dyaXRlbChjcHVfdG9fYmUzMih2YWwpLCBhZGRyKTsKK30KK0VYUE9SVF9TWU1CT0woaW93cml0ZTMyYmUpOworCisvKgorICogVGhlc2UgYXJlIHRoZSAicmVwZWF0IE1NSU8gcmVhZC93cml0ZSIgZnVuY3Rpb25zLgorICogTm90ZSB0aGUgIl9fcmF3IiBhY2Nlc3Nlcywgc2luY2Ugd2UgZG9uJ3Qgd2FudCB0bworICogY29udmVydCB0byBDUFUgYnl0ZSBvcmRlci4gV2Ugd3JpdGUgaW4gIklPIGJ5dGUKKyAqIG9yZGVyIiAod2UgYWxzbyBkb24ndCBoYXZlIElPIGJhcnJpZXJzKS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIG1taW9faW5zYih2b2lkIF9faW9tZW0gKmFkZHIsIHU4ICpkc3QsIGludCBjb3VudCkKK3sKKwl3aGlsZSAoLS1jb3VudCA+PSAwKSB7CisJCXU4IGRhdGEgPSBfX3Jhd19yZWFkYihhZGRyKTsKKwkJKmRzdCA9IGRhdGE7CisJCWRzdCsrOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIG1taW9faW5zdyh2b2lkIF9faW9tZW0gKmFkZHIsIHUxNiAqZHN0LCBpbnQgY291bnQpCit7CisJd2hpbGUgKC0tY291bnQgPj0gMCkgeworCQl1MTYgZGF0YSA9IF9fcmF3X3JlYWR3KGFkZHIpOworCQkqZHN0ID0gZGF0YTsKKwkJZHN0Kys7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbW1pb19pbnNsKHZvaWQgX19pb21lbSAqYWRkciwgdTMyICpkc3QsIGludCBjb3VudCkKK3sKKwl3aGlsZSAoLS1jb3VudCA+PSAwKSB7CisJCXUzMiBkYXRhID0gX19yYXdfcmVhZGwoYWRkcik7CisJCSpkc3QgPSBkYXRhOworCQlkc3QrKzsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtbWlvX291dHNiKHZvaWQgX19pb21lbSAqYWRkciwgY29uc3QgdTggKnNyYywgaW50IGNvdW50KQoreworCXdoaWxlICgtLWNvdW50ID49IDApIHsKKwkJX19yYXdfd3JpdGViKCpzcmMsIGFkZHIpOworCQlzcmMrKzsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtbWlvX291dHN3KHZvaWQgX19pb21lbSAqYWRkciwgY29uc3QgdTE2ICpzcmMsIGludCBjb3VudCkKK3sKKwl3aGlsZSAoLS1jb3VudCA+PSAwKSB7CisJCV9fcmF3X3dyaXRldygqc3JjLCBhZGRyKTsKKwkJc3JjKys7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbW1pb19vdXRzbCh2b2lkIF9faW9tZW0gKmFkZHIsIGNvbnN0IHUzMiAqc3JjLCBpbnQgY291bnQpCit7CisJd2hpbGUgKC0tY291bnQgPj0gMCkgeworCQlfX3Jhd193cml0ZWwoKnNyYywgYWRkcik7CisJCXNyYysrOworCX0KK30KKwordm9pZCBpb3JlYWQ4X3JlcCh2b2lkIF9faW9tZW0gKmFkZHIsIHZvaWQgKmRzdCwgdW5zaWduZWQgbG9uZyBjb3VudCkKK3sKKwltbWlvX2luc2IoYWRkciwgZHN0LCBjb3VudCk7Cit9CitFWFBPUlRfU1lNQk9MKGlvcmVhZDhfcmVwKTsKKwordm9pZCBpb3JlYWQxNl9yZXAodm9pZCBfX2lvbWVtICphZGRyLCB2b2lkICpkc3QsIHVuc2lnbmVkIGxvbmcgY291bnQpCit7CisJbW1pb19pbnN3KGFkZHIsIGRzdCwgY291bnQpOworfQorRVhQT1JUX1NZTUJPTChpb3JlYWQxNl9yZXApOworCit2b2lkIGlvcmVhZDMyX3JlcCh2b2lkIF9faW9tZW0gKmFkZHIsIHZvaWQgKmRzdCwgdW5zaWduZWQgbG9uZyBjb3VudCkKK3sKKwltbWlvX2luc2woYWRkciwgZHN0LCBjb3VudCk7Cit9CitFWFBPUlRfU1lNQk9MKGlvcmVhZDMyX3JlcCk7CisKK3ZvaWQgaW93cml0ZThfcmVwKHZvaWQgX19pb21lbSAqYWRkciwgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBsb25nIGNvdW50KQoreworCW1taW9fb3V0c2IoYWRkciwgc3JjLCBjb3VudCk7Cit9CitFWFBPUlRfU1lNQk9MKGlvd3JpdGU4X3JlcCk7CisKK3ZvaWQgaW93cml0ZTE2X3JlcCh2b2lkIF9faW9tZW0gKmFkZHIsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgbG9uZyBjb3VudCkKK3sKKwltbWlvX291dHN3KGFkZHIsIHNyYywgY291bnQpOworfQorRVhQT1JUX1NZTUJPTChpb3dyaXRlMTZfcmVwKTsKKwordm9pZCBpb3dyaXRlMzJfcmVwKHZvaWQgX19pb21lbSAqYWRkciwgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBsb25nIGNvdW50KQoreworCW1taW9fb3V0c2woYWRkciwgc3JjLCBjb3VudCk7Cit9CitFWFBPUlRfU1lNQk9MKGlvd3JpdGUzMl9yZXApOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvaW9wb3J0LmMgYi9hcmNoL3NoL2tlcm5lbC9pb3BvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2FkNjEwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvaW9wb3J0LmMKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIGFyY2gvc2gva2VybmVsL2lvcG9ydC5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwICBOaWliZSBZdXRha2EKKyAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMDcgUGF1bCBNdW5kdAorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworY29uc3QgdW5zaWduZWQgbG9uZyBzaF9pb19wb3J0X2Jhc2UgX19yZWFkX21vc3RseSA9IC0xOworRVhQT1JUX1NZTUJPTChzaF9pb19wb3J0X2Jhc2UpOworCit2b2lkIF9faW9tZW0gKl9faW9wb3J0X21hcCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGludCBzaXplKQoreworCWlmIChzaF9tdi5tdl9pb3BvcnRfbWFwKQorCQlyZXR1cm4gc2hfbXYubXZfaW9wb3J0X21hcChhZGRyLCBzaXplKTsKKworCXJldHVybiAodm9pZCBfX2lvbWVtICopKGFkZHIgKyBzaF9pb19wb3J0X2Jhc2UpOworfQorRVhQT1JUX1NZTUJPTChfX2lvcG9ydF9tYXApOworCit2b2lkIF9faW9tZW0gKmlvcG9ydF9tYXAodW5zaWduZWQgbG9uZyBwb3J0LCB1bnNpZ25lZCBpbnQgbnIpCit7CisJdm9pZCBfX2lvbWVtICpyZXQ7CisKKwlyZXQgPSBfX2lvcG9ydF9tYXBfdHJhcHBlZChwb3J0LCBucik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBfX2lvcG9ydF9tYXAocG9ydCwgbnIpOworfQorRVhQT1JUX1NZTUJPTChpb3BvcnRfbWFwKTsKKwordm9pZCBpb3BvcnRfdW5tYXAodm9pZCBfX2lvbWVtICphZGRyKQoreworCWlmIChzaF9tdi5tdl9pb3BvcnRfdW5tYXApCisJCXNoX212Lm12X2lvcG9ydF91bm1hcChhZGRyKTsKK30KK0VYUE9SVF9TWU1CT0woaW9wb3J0X3VubWFwKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL21hY2h2ZWMuYyBiL2FyY2gvc2gva2VybmVsL21hY2h2ZWMuYwppbmRleCA5ZjliYjYzLi4zZDcyMmU0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9tYWNodmVjLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvbWFjaHZlYy5jCkBAIC0xMTgsMjggKzExOCw2IEBACiAJCXNoX212Lm12XyMjZWxlbSA9IGdlbmVyaWNfIyNlbGVtOyBcCiB9IHdoaWxlICgwKQogCi0jaWZkZWYgQ09ORklHX0hBU19JT1BPUlQKLQotI2lmZGVmIFAyU0VHCi0JX19zZXRfaW9fcG9ydF9iYXNlKFAyU0VHKTsKLSNlbHNlCi0JX19zZXRfaW9fcG9ydF9iYXNlKDApOwotI2VuZGlmCi0KLQltdl9zZXQoaW5iKTsJbXZfc2V0KGludyk7CW12X3NldChpbmwpOwotCW12X3NldChvdXRiKTsJbXZfc2V0KG91dHcpOwltdl9zZXQob3V0bCk7Ci0KLQltdl9zZXQoaW5iX3ApOwltdl9zZXQoaW53X3ApOwltdl9zZXQoaW5sX3ApOwotCW12X3NldChvdXRiX3ApOwltdl9zZXQob3V0d19wKTsJbXZfc2V0KG91dGxfcCk7Ci0KLQltdl9zZXQoaW5zYik7CW12X3NldChpbnN3KTsJbXZfc2V0KGluc2wpOwotCW12X3NldChvdXRzYik7CW12X3NldChvdXRzdyk7CW12X3NldChvdXRzbCk7Ci0KLQltdl9zZXQoaW9wb3J0X21hcCk7Ci0JbXZfc2V0KGlvcG9ydF91bm1hcCk7Ci0KLSNlbmRpZgotCiAJbXZfc2V0KGlycV9kZW11eCk7CiAJbXZfc2V0KG1vZGVfcGlucyk7CiAJbXZfc2V0KG1lbV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3BlcmZfZXZlbnQuYyBiL2FyY2gvc2gva2VybmVsL3BlcmZfZXZlbnQuYwppbmRleCA1YTRiMzM0Li4yZWUyMWE0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9wZXJmX2V2ZW50LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvcGVyZl9ldmVudC5jCkBAIC0zODksNyArMzg5LDcgQEAKIAogCVdBUk5fT04oX3BtdS0+bnVtX2V2ZW50cyA+IE1BWF9IV0VWRU5UUyk7CiAKLQlwZXJmX3BtdV9yZWdpc3RlcigmcG11KTsKKwlwZXJmX3BtdV9yZWdpc3RlcigmcG11LCAiY3B1IiwgUEVSRl9UWVBFX1JBVyk7CiAJcGVyZl9jcHVfbm90aWZpZXIoc2hfcG11X25vdGlmaWVyKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3NldHVwLmMgYi9hcmNoL3NoL2tlcm5lbC9zZXR1cC5jCmluZGV4IGQ2YjAxOGMuLjRmMjY3MTYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvc2V0dXAuYwpAQCAtMTIsNyArMTIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXRyZC5oPgogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KICNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9yb290X2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L3V0c25hbWUuaD4KICNpbmNsdWRlIDxsaW51eC9ub2RlbWFzay5oPgpAQCAtMzE5LDE0NiArMzE4LDMgQEAKIHsKIAlyZXR1cm4gc2hfbXYubXZfbW9kZV9waW5zKCkgJiBwaW47CiB9Ci0KLXN0YXRpYyBjb25zdCBjaGFyICpjcHVfbmFtZVtdID0gewotCVtDUFVfU0g3MjAxXQk9ICJTSDcyMDEiLAotCVtDUFVfU0g3MjAzXQk9ICJTSDcyMDMiLAlbQ1BVX1NINzI2M10JPSAiU0g3MjYzIiwKLQlbQ1BVX1NINzIwNl0JPSAiU0g3MjA2IiwJW0NQVV9TSDc2MTldCT0gIlNINzYxOSIsCi0JW0NQVV9TSDc3MDVdCT0gIlNINzcwNSIsCVtDUFVfU0g3NzA2XQk9ICJTSDc3MDYiLAotCVtDUFVfU0g3NzA3XQk9ICJTSDc3MDciLAlbQ1BVX1NINzcwOF0JPSAiU0g3NzA4IiwKLQlbQ1BVX1NINzcwOV0JPSAiU0g3NzA5IiwJW0NQVV9TSDc3MTBdCT0gIlNINzcxMCIsCi0JW0NQVV9TSDc3MTJdCT0gIlNINzcxMiIsCVtDUFVfU0g3NzIwXQk9ICJTSDc3MjAiLAotCVtDUFVfU0g3NzIxXQk9ICJTSDc3MjEiLAlbQ1BVX1NINzcyOV0JPSAiU0g3NzI5IiwKLQlbQ1BVX1NINzc1MF0JPSAiU0g3NzUwIiwJW0NQVV9TSDc3NTBTXQk9ICJTSDc3NTBTIiwKLQlbQ1BVX1NINzc1MFJdCT0gIlNINzc1MFIiLAlbQ1BVX1NINzc1MV0JPSAiU0g3NzUxIiwKLQlbQ1BVX1NINzc1MVJdCT0gIlNINzc1MVIiLAlbQ1BVX1NINzc2MF0JPSAiU0g3NzYwIiwKLQlbQ1BVX1NINF8yMDJdCT0gIlNINC0yMDIiLAlbQ1BVX1NINF81MDFdCT0gIlNINC01MDEiLAotCVtDUFVfU0g3NzYzXQk9ICJTSDc3NjMiLAlbQ1BVX1NINzc3MF0JPSAiU0g3NzcwIiwKLQlbQ1BVX1NINzc4MF0JPSAiU0g3NzgwIiwJW0NQVV9TSDc3ODFdCT0gIlNINzc4MSIsCi0JW0NQVV9TSDczNDNdCT0gIlNINzM0MyIsCVtDUFVfU0g3Nzg1XQk9ICJTSDc3ODUiLAotCVtDUFVfU0g3Nzg2XQk9ICJTSDc3ODYiLAlbQ1BVX1NINzc1N10JPSAiU0g3NzU3IiwKLQlbQ1BVX1NINzcyMl0JPSAiU0g3NzIyIiwJW0NQVV9TSFgzXQk9ICJTSC1YMyIsCi0JW0NQVV9TSDVfMTAxXQk9ICJTSDUtMTAxIiwJW0NQVV9TSDVfMTAzXQk9ICJTSDUtMTAzIiwKLQlbQ1BVX01YR10JPSAiTVgtRyIsCVtDUFVfU0g3NzIzXQk9ICJTSDc3MjMiLAotCVtDUFVfU0g3MzY2XQk9ICJTSDczNjYiLAlbQ1BVX1NINzcyNF0JPSAiU0g3NzI0IiwKLQlbQ1BVX1NIX05PTkVdCT0gIlVua25vd24iCi19OwotCi1jb25zdCBjaGFyICpnZXRfY3B1X3N1YnR5cGUoc3RydWN0IHNoX2NwdWluZm8gKmMpCi17Ci0JcmV0dXJuIGNwdV9uYW1lW2MtPnR5cGVdOwotfQotRVhQT1JUX1NZTUJPTChnZXRfY3B1X3N1YnR5cGUpOwotCi0jaWZkZWYgQ09ORklHX1BST0NfRlMKLS8qIFN5bWJvbGljIENQVSBmbGFncywga2VlcCBpbiBzeW5jIHdpdGggYXNtL2NwdS1mZWF0dXJlcy5oICovCi1zdGF0aWMgY29uc3QgY2hhciAqY3B1X2ZsYWdzW10gPSB7Ci0JIm5vbmUiLCAiZnB1IiwgInAyZmx1c2giLCAibW11YXNzb2MiLCAiZHNwIiwgInBlcmZjdHIiLAotCSJwdGVhIiwgImxsc2MiLCAibDIiLCAib3AzMiIsICJwdGVhZXgiLCBOVUxMCi19OwotCi1zdGF0aWMgdm9pZCBzaG93X2NwdWZsYWdzKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHNoX2NwdWluZm8gKmMpCi17Ci0JdW5zaWduZWQgbG9uZyBpOwotCi0Jc2VxX3ByaW50ZihtLCAiY3B1IGZsYWdzXHQ6Iik7Ci0KLQlpZiAoIWMtPmZsYWdzKSB7Ci0JCXNlcV9wcmludGYobSwgIiAlc1xuIiwgY3B1X2ZsYWdzWzBdKTsKLQkJcmV0dXJuOwotCX0KLQotCWZvciAoaSA9IDA7IGNwdV9mbGFnc1tpXTsgaSsrKQotCQlpZiAoKGMtPmZsYWdzICYgKDEgPDwgaSkpKQotCQkJc2VxX3ByaW50ZihtLCAiICVzIiwgY3B1X2ZsYWdzW2krMV0pOwotCi0Jc2VxX3ByaW50ZihtLCAiXG4iKTsKLX0KLQotc3RhdGljIHZvaWQgc2hvd19jYWNoZWluZm8oc3RydWN0IHNlcV9maWxlICptLCBjb25zdCBjaGFyICp0eXBlLAotCQkJICAgc3RydWN0IGNhY2hlX2luZm8gaW5mbykKLXsKLQl1bnNpZ25lZCBpbnQgY2FjaGVfc2l6ZTsKLQotCWNhY2hlX3NpemUgPSBpbmZvLndheXMgKiBpbmZvLnNldHMgKiBpbmZvLmxpbmVzejsKLQotCXNlcV9wcmludGYobSwgIiVzIHNpemVcdDogJTJkS2lCICglZC13YXkpXG4iLAotCQkgICB0eXBlLCBjYWNoZV9zaXplID4+IDEwLCBpbmZvLndheXMpOwotfQotCi0vKgotICoJR2V0IENQVSBpbmZvcm1hdGlvbiBmb3IgdXNlIGJ5IHRoZSBwcm9jZnMuCi0gKi8KLXN0YXRpYyBpbnQgc2hvd19jcHVpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKLXsKLQlzdHJ1Y3Qgc2hfY3B1aW5mbyAqYyA9IHY7Ci0JdW5zaWduZWQgaW50IGNwdSA9IGMgLSBjcHVfZGF0YTsKLQotCWlmICghY3B1X29ubGluZShjcHUpKQotCQlyZXR1cm4gMDsKLQotCWlmIChjcHUgPT0gMCkKLQkJc2VxX3ByaW50ZihtLCAibWFjaGluZVx0XHQ6ICVzXG4iLCBnZXRfc3lzdGVtX3R5cGUoKSk7Ci0JZWxzZQotCQlzZXFfcHJpbnRmKG0sICJcbiIpOwotCi0Jc2VxX3ByaW50ZihtLCAicHJvY2Vzc29yXHQ6ICVkXG4iLCBjcHUpOwotCXNlcV9wcmludGYobSwgImNwdSBmYW1pbHlcdDogJXNcbiIsIGluaXRfdXRzbmFtZSgpLT5tYWNoaW5lKTsKLQlzZXFfcHJpbnRmKG0sICJjcHUgdHlwZVx0OiAlc1xuIiwgZ2V0X2NwdV9zdWJ0eXBlKGMpKTsKLQlpZiAoYy0+Y3V0X21ham9yID09IC0xKQotCQlzZXFfcHJpbnRmKG0sICJjdXRcdFx0OiB1bmtub3duXG4iKTsKLQllbHNlIGlmIChjLT5jdXRfbWlub3IgPT0gLTEpCi0JCXNlcV9wcmludGYobSwgImN1dFx0XHQ6ICVkLnhcbiIsIGMtPmN1dF9tYWpvcik7Ci0JZWxzZQotCQlzZXFfcHJpbnRmKG0sICJjdXRcdFx0OiAlZC4lZFxuIiwgYy0+Y3V0X21ham9yLCBjLT5jdXRfbWlub3IpOwotCi0Jc2hvd19jcHVmbGFncyhtLCBjKTsKLQotCXNlcV9wcmludGYobSwgImNhY2hlIHR5cGVcdDogIik7Ci0KLQkvKgotCSAqIENoZWNrIGZvciB3aGF0IHR5cGUgb2YgY2FjaGUgd2UgaGF2ZSwgd2Ugc3VwcG9ydCBib3RoIHRoZQotCSAqIHVuaWZpZWQgY2FjaGUgb24gdGhlIFNILTIgYW5kIFNILTMsIGFzIHdlbGwgYXMgdGhlIGhhcnZhcmQKLQkgKiBzdHlsZSBjYWNoZSBvbiB0aGUgU0gtNC4KLQkgKi8KLQlpZiAoYy0+aWNhY2hlLmZsYWdzICYgU0hfQ0FDSEVfQ09NQklORUQpIHsKLQkJc2VxX3ByaW50ZihtLCAidW5pZmllZFxuIik7Ci0JCXNob3dfY2FjaGVpbmZvKG0sICJjYWNoZSIsIGMtPmljYWNoZSk7Ci0JfSBlbHNlIHsKLQkJc2VxX3ByaW50ZihtLCAic3BsaXQgKGhhcnZhcmQpXG4iKTsKLQkJc2hvd19jYWNoZWluZm8obSwgImljYWNoZSIsIGMtPmljYWNoZSk7Ci0JCXNob3dfY2FjaGVpbmZvKG0sICJkY2FjaGUiLCBjLT5kY2FjaGUpOwotCX0KLQotCS8qIE9wdGlvbmFsIHNlY29uZGFyeSBjYWNoZSAqLwotCWlmIChjLT5mbGFncyAmIENQVV9IQVNfTDJfQ0FDSEUpCi0JCXNob3dfY2FjaGVpbmZvKG0sICJzY2FjaGUiLCBjLT5zY2FjaGUpOwotCi0Jc2VxX3ByaW50ZihtLCAiYWRkcmVzcyBzaXplc1x0OiAldSBiaXRzIHBoeXNpY2FsXG4iLCBjLT5waHlzX2JpdHMpOwotCi0Jc2VxX3ByaW50ZihtLCAiYm9nb21pcHNcdDogJWx1LiUwMmx1XG4iLAotCQkgICAgIGMtPmxvb3BzX3Blcl9qaWZmeS8oNTAwMDAwL0haKSwKLQkJICAgICAoYy0+bG9vcHNfcGVyX2ppZmZ5Lyg1MDAwL0haKSkgJSAxMDApOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkICpjX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwb3MpCi17Ci0JcmV0dXJuICpwb3MgPCBOUl9DUFVTID8gY3B1X2RhdGEgKyAqcG9zIDogTlVMTDsKLX0KLXN0YXRpYyB2b2lkICpjX25leHQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKLXsKLQkrKypwb3M7Ci0JcmV0dXJuIGNfc3RhcnQobSwgcG9zKTsKLX0KLXN0YXRpYyB2b2lkIGNfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCi17Ci19Ci1jb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgY3B1aW5mb19vcCA9IHsKLQkuc3RhcnQJPSBjX3N0YXJ0LAotCS5uZXh0CT0gY19uZXh0LAotCS5zdG9wCT0gY19zdG9wLAotCS5zaG93CT0gc2hvd19jcHVpbmZvLAotfTsKLSNlbmRpZiAvKiBDT05GSUdfUFJPQ19GUyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9ib290L01ha2VmaWxlIGIvYXJjaC9zcGFyYy9ib290L01ha2VmaWxlCmluZGV4IDk3ZTNmZWIuLmEyYzU4OTggMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvYm9vdC9NYWtlZmlsZQorKysgYi9hcmNoL3NwYXJjL2Jvb3QvTWFrZWZpbGUKQEAgLTYsMjUgKzYsMjQgQEAKIFJPT1RfSU1HCTo9IC91c3Ivc3JjL3Jvb3QuaW1nCiBFTEZUT0FPVVQJOj0gZWxmdG9hb3V0CiAKLWhvc3Rwcm9ncy15CTo9IHBpZ2d5YmFja18zMiBwaWdneWJhY2tfNjQgYnRmaXh1cHByZXAKK2hvc3Rwcm9ncy15CTo9IHBpZ2d5YmFjayBidGZpeHVwcHJlcAogdGFyZ2V0cwkJOj0gdGZ0cGJvb3QuaW1nIGJ0Zml4Lm8gYnRmaXguUyBpbWFnZSB6SW1hZ2Ugdm1saW51eC5hb3V0CiBjbGVhbi1maWxlcwk6PSBTeXN0ZW0ubWFwCiAKIHF1aWV0X2NtZF9lbGZ0b2FvdXQJPSBFTEZUT0FPVVQgJEAKICAgICAgIGNtZF9lbGZ0b2FvdXQJPSAkKEVMRlRPQU9VVCkgJChvYmopL2ltYWdlIC1vICRACitxdWlldF9jbWRfcGlnZ3kJCT0gUElHR1kgICAkQAorICAgICAgY21kX3BpZ2d5CQk9ICQob2JqKS9waWdneWJhY2sgJChCSVRTKSAkQCBTeXN0ZW0ubWFwICQoUk9PVF9JTUcpCitxdWlldF9jbWRfc3RyaXAJCT0gU1RSSVAgICAkQAorICAgICAgY21kX3N0cmlwCQk9ICQoU1RSSVApIC1SIC5jb21tZW50IC1SIC5ub3RlIC1LIHN1bjR1X2luaXQgLUsgX2VuZCAtSyBfc3RhcnQgJDwgLW8gJEAKIAogaWZlcSAoJChDT05GSUdfU1BBUkMzMikseSkKLXF1aWV0X2NtZF9waWdneQkJPSBQSUdHWSAgICRACi0gICAgICBjbWRfcGlnZ3kJCT0gJChvYmopL3BpZ2d5YmFja18zMiAkQCBTeXN0ZW0ubWFwICQoUk9PVF9JTUcpCiBxdWlldF9jbWRfYnRmaXgJCT0gQlRGSVggICAkQAogICAgICAgY21kX2J0Zml4CQk9ICQoT0JKRFVNUCkgLXggdm1saW51eCB8ICQob2JqKS9idGZpeHVwcHJlcCA+ICRACiBxdWlldF9jbWRfc3lzbWFwICAgICAgICA9IFNZU01BUCAgJChvYmopL1N5c3RlbS5tYXAKICAgICAgIGNtZF9zeXNtYXAgICAgICAgID0gJChDT05GSUdfU0hFTEwpICQoc3JjdHJlZSkvc2NyaXB0cy9ta3N5c21hcAogcXVpZXRfY21kX2ltYWdlID0gTEQgICAgICAkQAogICAgICAgY21kX2ltYWdlID0gJChMRCkgJChMREZMQUdTKSAkKEVYVFJBX0xERkxBR1MpICQoTERGTEFHU18kKEBGKSkgLW8gJEAKLXF1aWV0X2NtZF9zdHJpcCA9IFNUUklQICAgJEAKLSAgICAgIGNtZF9zdHJpcCA9ICQoU1RSSVApIC1SIC5jb21tZW50IC1SIC5ub3RlIC1LIHN1bjR1X2luaXQgLUsgX2VuZCAtSyBfc3RhcnQgJChvYmopL2ltYWdlIC1vICRACi0KIAogZGVmaW5lIHJ1bGVfaW1hZ2UKIAkkKGlmICQoJChxdWlldCljbWRfaW1hZ2UpLCAgICAgICAgICAgICAgIFwKQEAgLTU3LDEwICs1Niw3IEBACiAKICQob2JqKS96SW1hZ2U6ICQob2JqKS9pbWFnZQogCSQoY2FsbCBpZl9jaGFuZ2VkLHN0cmlwKQotCi0kKG9iaikvdGZ0cGJvb3QuaW1nOiAkKG9iaikvaW1hZ2UgJChvYmopL3BpZ2d5YmFja18zMiBTeXN0ZW0ubWFwICQoUk9PVF9JTUcpIEZPUkNFCi0JJChjYWxsIGlmX2NoYW5nZWQsZWxmdG9hb3V0KQotCSQoY2FsbCBpZl9jaGFuZ2VkLHBpZ2d5KQorCUBlY2hvICcgIGtlcm5lbDogJEAgaXMgcmVhZHknCiAKICQob2JqKS9idGZpeC5TOiAkKG9iaikvYnRmaXh1cHByZXAgdm1saW51eCBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLGJ0Zml4KQpAQCAtNjgsMTEgKzY0LDYgQEAKIGVuZGlmCiAKIGlmZXEgKCQoQ09ORklHX1NQQVJDNjQpLHkpCi1xdWlldF9jbWRfcGlnZ3kgICAgID0gUElHR1kgICAkQAotICAgICAgY21kX3BpZ2d5ICAgICA9ICQob2JqKS9waWdneWJhY2tfNjQgJEAgU3lzdGVtLm1hcCAkKFJPT1RfSU1HKQotcXVpZXRfY21kX3N0cmlwICAgICA9IFNUUklQICAgJEAKLSAgICAgIGNtZF9zdHJpcCAgICAgPSAkKFNUUklQKSAtUiAuY29tbWVudCAtUiAubm90ZSAtSyBzdW40dV9pbml0IC1LIF9lbmQgLUsgX3N0YXJ0IHZtbGludXggLW8gJEAKLQogCiAjIEFjdHVhbCBsaW5raW5nCiAkKG9iaikvaW1hZ2U6IHZtbGludXggRk9SQ0UKQEAgLTgxLDEwICs3Miw2IEBACiAKICQob2JqKS96SW1hZ2U6ICQob2JqKS9pbWFnZQogCSQoY2FsbCBpZl9jaGFuZ2VkLGd6aXApCi0KLSQob2JqKS90ZnRwYm9vdC5pbWc6ICQob2JqKS9pbWFnZSAkKG9iaikvcGlnZ3liYWNrXzY0IFN5c3RlbS5tYXAgJChST09UX0lNRykgRk9SQ0UKLQkkKGNhbGwgaWZfY2hhbmdlZCxlbGZ0b2FvdXQpCi0JJChjYWxsIGlmX2NoYW5nZWQscGlnZ3kpCiAJQGVjaG8gJyAga2VybmVsOiAkQCBpcyByZWFkeScKIAogJChvYmopL3ZtbGludXguYW91dDogdm1saW51eCBGT1JDRQpAQCAtOTIsMyArNzksNiBAQAogCUBlY2hvICcgIGtlcm5lbDogJEAgaXMgcmVhZHknCiBlbmRpZgogCiskKG9iaikvdGZ0cGJvb3QuaW1nOiAkKG9iaikvaW1hZ2UgJChvYmopL3BpZ2d5YmFjayBTeXN0ZW0ubWFwICQoUk9PVF9JTUcpIEZPUkNFCisJJChjYWxsIGlmX2NoYW5nZWQsZWxmdG9hb3V0KQorCSQoY2FsbCBpZl9jaGFuZ2VkLHBpZ2d5KQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9ib290L3BpZ2d5YmFjay5jIGIvYXJjaC9zcGFyYy9ib290L3BpZ2d5YmFjay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwYTc5OGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NwYXJjL2Jvb3QvcGlnZ3liYWNrLmMKQEAgLTAsMCArMSwyNzIgQEAKKy8qCisgICBTaW1wbGUgdXRpbGl0eSB0byBtYWtlIGEgc2luZ2xlLWltYWdlIGluc3RhbGwga2VybmVsIHdpdGggaW5pdGlhbCByYW1kaXNrCisgICBmb3IgU3BhcmMgdGZ0cGJvb3Rpbmcgd2l0aG91dCBuZWVkIHRvIHNldCB1cCBuZnMuCisKKyAgIENvcHlyaWdodCAoQykgMTk5NiwxOTk3IEpha3ViIEplbGluZWsgKGpqQHN1bnNpdGUubWZmLmN1bmkuY3opCisgICBQZXRlIFphaXRjZXYgPHphaXRjZXZAeWFob28uY29tPiBlbmRpYW4gZml4ZXMgZm9yIGNyb3NzLWNvbXBpbGVzLCAyMDAwLgorICAgQ29weXJpZ2h0IChDKSAyMDExIFNhbSBSYXZuYm9yZyA8c2FtQHJhdm5ib3JnLm9yZz4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4gICovCisKKyNpbmNsdWRlIDxkaXJlbnQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKworLyoKKyAqIE5vdGU6IHJ1biB0aGlzIG9uIGFuIGEub3V0IGtlcm5lbCAodXNlIGVsZnRvYW91dCBmb3IgaXQpLAorICogYXMgUFJPTSBsb29rcyBmb3IgYS5vdXQgaW1hZ2Ugb25seS4KKyAqLworCisjZGVmaW5lIEFPVVRfVEVYVF9PRkZTRVQgICAzMgorCitzdGF0aWMgaW50IGlzNjRiaXQgPSAwOworCisvKiBhbGlnbiB0byBwb3dlci1vZi10d28gc2l6ZSAqLworc3RhdGljIGludCBhbGlnbihpbnQgbikKK3sKKwlpZiAoaXM2NGJpdCkKKwkJcmV0dXJuIChuICsgMHgxZmZmKSAmIH4weDFmZmY7CisJZWxzZQorCQlyZXR1cm4gKG4gKyAweGZmZikgJiB+MHhmZmY7Cit9CisKKy8qIHJlYWQgdHdvIGJ5dGVzIGFzIGJpZyBlbmRpYW4gKi8KK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBsZDIoY2hhciAqcCkKK3sKKwlyZXR1cm4gKHBbMF0gPDwgOCkgfCBwWzFdOworfQorCisvKiBzYXZlIDQgYnl0ZXMgYXMgYmlnIGVuZGlhbiAqLworc3RhdGljIHZvaWQgc3Q0KGNoYXIgKnAsIHVuc2lnbmVkIGludCB4KQoreworCXBbMF0gPSB4ID4+IDI0OworCXBbMV0gPSB4ID4+IDE2OworCXBbMl0gPSB4ID4+IDg7CisJcFszXSA9IHg7Cit9CisKK3N0YXRpYyB2b2lkIGRpZShjb25zdCBjaGFyICpzdHIpCit7CisJcGVycm9yKHN0cik7CisJZXhpdCgxKTsKK30KKworc3RhdGljIHZvaWQgdXNhZ2Uodm9pZCkKK3sKKwkvKiBmc19pbWcuZ3ogaXMgYW4gaW1hZ2Ugb2YgaW5pdGlhbCByYW1kaXNrLiAqLworCWZwcmludGYoc3RkZXJyLCAiVXNhZ2U6IHBpZ2d5YmFjayBiaXRzIHZtbGludXguYW91dCBTeXN0ZW0ubWFwIGZzX2ltZy5nelxuIik7CisJZnByaW50ZihzdGRlcnIsICJcdEtlcm5lbCBpbWFnZSB3aWxsIGJlIG1vZGlmaWVkIGluIHBsYWNlLlxuIik7CisJZXhpdCgxKTsKK30KKworc3RhdGljIGludCBzdGFydF9saW5lKGNvbnN0IGNoYXIgKmxpbmUpCit7CisJaWYgKHN0cmNtcChsaW5lICsgOCwgIiBUIF9zdGFydFxuIikgPT0gMCkKKwkJcmV0dXJuIDE7CisJZWxzZSBpZiAoc3RyY21wKGxpbmUgKyAxNiwgIiBUIF9zdGFydFxuIikgPT0gMCkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZW5kX2xpbmUoY29uc3QgY2hhciAqbGluZSkKK3sKKwlpZiAoc3RyY21wKGxpbmUgKyA4LCAiIEEgX2VuZFxuIikgPT0gMCkKKwkJcmV0dXJuIDE7CisJZWxzZSBpZiAoc3RyY21wIChsaW5lICsgMTYsICIgQSBfZW5kXG4iKSA9PSAwKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEZpbmQgYWRkcmVzcyBmb3Igc3RhcnQgYW5kIGVuZCBpbiBTeXN0ZW0ubWFwLgorICogVGhlIGZpbGUgbG9va3MgbGlrZSB0aGlzOgorICogZjAwMDQwMDAgVCBfc3RhcnQKKyAqIGYwMzc5Zjc5IEEgX2VuZAorICogMTIzNDU2Nzg5MDEyMzQ1NgorICogXmNvbG91bW4gMQorICogVGhlcmUgaXMgc3VwcG9ydCBmb3IgNjQgYml0IGFkZHJlc3NlcyB0b28uCisgKgorICogUmV0dXJuIDAgaWYgZWl0aGVyIHN0YXJ0IG9yIGVuZCBpcyBub3QgZm91bmQKKyAqLworc3RhdGljIGludCBnZXRfc3RhcnRfZW5kKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCB1bnNpZ25lZCBpbnQgKnN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmVuZCkKK3sKKwlGSUxFICptYXA7CisJY2hhciBidWZmZXJbMTAyNF07CisKKwkqc3RhcnQgPSAwOworCSplbmQgPSAwOworCW1hcCA9IGZvcGVuKGZpbGVuYW1lLCAiciIpOworCWlmICghbWFwKQorCQlkaWUoZmlsZW5hbWUpOworCXdoaWxlIChmZ2V0cyhidWZmZXIsIDEwMjQsIG1hcCkpIHsKKwkJaWYgKHN0YXJ0X2xpbmUoYnVmZmVyKSkKKwkJCSpzdGFydCA9IHN0cnRvdWwoYnVmZmVyLCBOVUxMLCAxNik7CisJCWVsc2UgaWYgKGVuZF9saW5lKGJ1ZmZlcikpCisJCQkqZW5kID0gc3RydG91bChidWZmZXIsIE5VTEwsIDE2KTsKKwl9CisJZmNsb3NlIChtYXApOworCisJaWYgKCpzdGFydCA9PSAwIHx8ICplbmQgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gMTsKK30KKworI2RlZmluZSBMT09LQkFDSyAoMTI4ICogNCkKKyNkZWZpbmUgQlVGU0laRSAxMDI0CisvKgorICogRmluZCB0aGUgSGRyUyBlbnRyeSBmcm9tIGhlYWRfMzIvaGVhZF82NC4KKyAqIFdlIGNoZWNrIGlmIGl0IGlzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUgKHNwYXJjNjQgY2FzZSkKKyAqIGFuZCBpZiBub3Qgd2Ugc2VhcmNoIGZvciBpdC4KKyAqIFdoZW4gd2Ugc2VhcmNoIGRvIHNvIGluIHN0ZXBzIG9mIDQgYXMgSGRyUyBpcyBvbiBhIDQtYnl0ZSBhbGlnbmVkCisgKiBhZGRyZXNzIChpdCBpcyBvbiBzYW1lIGFsaWdubWVudCBhcyBzcGFyYyBpbnN0cnVjdGlvbnMpCisgKiBSZXR1cm4gdGhlIG9mZnNldCB0byB0aGUgSGRyUyBlbnRyeSAoYXMgb2ZmX3QpCisgKi8KK3N0YXRpYyBvZmZfdCBnZXRfaGRyc19vZmZzZXQoaW50IGtlcm5lbGZkLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKwljaGFyIGJ1ZmZlcltCVUZTSVpFXTsKKwlvZmZfdCBvZmZzZXQ7CisJaW50IGk7CisKKwlpZiAobHNlZWsoa2VybmVsZmQsIDAsIFNFRUtfU0VUKSA8IDApCisJCWRpZSgibHNlZWsiKTsKKwlpZiAocmVhZChrZXJuZWxmZCwgYnVmZmVyLCBCVUZTSVpFKSAhPSBCVUZTSVpFKQorCQlkaWUoZmlsZW5hbWUpOworCisJaWYgKGJ1ZmZlcls0MF0gPT0gJ0gnICYmIGJ1ZmZlcls0MV0gPT0gJ2QnICYmCisJICAgIGJ1ZmZlcls0Ml0gPT0gJ3InICYmIGJ1ZmZlcls0M10gPT0gJ1MnKSB7CisJCXJldHVybiA0MDsKKwl9IGVsc2UgeworCQkvKiAgRmluZCB0aGUgZ29rZXJuZWwgbGFiZWwgKi8KKwkJLyogRGVjb2RlIG9mZnNldCBmcm9tIGJyYW5jaCBpbnN0cnVjdGlvbiAqLworCQlvZmZzZXQgPSBsZDIoYnVmZmVyICsgQU9VVF9URVhUX09GRlNFVCArIDIpIDw8IDI7CisJCS8qIEdvIGJhY2sgNTEyIGJ5dGVzIHNvIHdlIGRvIG5vdCBtaXNzIEhkclMgKi8KKwkJb2Zmc2V0IC09IExPT0tCQUNLOworCQkvKiBza2lwIGEub3V0IGhlYWRlciAqLworCQlvZmZzZXQgKz0gQU9VVF9URVhUX09GRlNFVDsKKwkJaWYgKGxzZWVrKGtlcm5lbGZkLCBvZmZzZXQsIFNFRUtfU0VUKSA8IDApCisJCQlkaWUoImxzZWVrIik7CisJCWlmIChyZWFkKGtlcm5lbGZkLCBidWZmZXIsIEJVRlNJWkUpICE9IEJVRlNJWkUpCisJCQlkaWUoZmlsZW5hbWUpOworCisJCWZvciAoaSA9IDA7IGkgPCBMT09LQkFDSzsgaSArPSA0KSB7CisJCQlpZiAoYnVmZmVyW2kgKyAwXSA9PSAnSCcgJiYgYnVmZmVyW2kgKyAxXSA9PSAnZCcgJiYKKwkJCSAgICBidWZmZXJbaSArIDJdID09ICdyJyAmJiBidWZmZXJbaSArIDNdID09ICdTJykgeworCQkJCXJldHVybiBvZmZzZXQgKyBpOworCQkJfQorCQl9CisJfQorCWZwcmludGYgKHN0ZGVyciwgIkNvdWxkbid0IGZpbmQgaGVhZGVycyBzaWduYXR1cmUgaW4gJXNcbiIsIGZpbGVuYW1lKTsKKwlleGl0KDEpOworfQorCitpbnQgbWFpbihpbnQgYXJnYyxjaGFyICoqYXJndikKK3sKKwlzdGF0aWMgY2hhciBhb3V0X21hZ2ljW10gPSB7IDB4MDEsIDB4MDMsIDB4MDEsIDB4MDcgfTsKKwljaGFyIGJ1ZmZlclsxMDI0XTsKKwl1bnNpZ25lZCBpbnQgaSwgc3RhcnQsIGVuZDsKKwlvZmZfdCBvZmZzZXQ7CisJc3RydWN0IHN0YXQgczsKKwlpbnQgaW1hZ2UsIHRhaWw7CisKKwlpZiAoYXJnYyAhPSA1KQorCQl1c2FnZSgpOworCWlmIChzdHJjbXAoYXJndlsxXSwgIjY0IikgPT0gMCkKKwkJaXM2NGJpdCA9IDE7CisJaWYgKHN0YXQgKGFyZ3ZbNF0sICZzKSA8IDApCisJCWRpZShhcmd2WzRdKTsKKworCWlmICghZ2V0X3N0YXJ0X2VuZChhcmd2WzNdLCAmc3RhcnQsICZlbmQpKSB7CisJCWZwcmludGYoc3RkZXJyLCAiQ291bGQgbm90IGRldGVybWluZSBzdGFydCBhbmQgZW5kIGZyb20gJXNcbiIsCisJCSAgICAgICAgYXJndlszXSk7CisJCWV4aXQoMSk7CisJfQorCWlmICgoaW1hZ2UgPSBvcGVuKGFyZ3ZbMl0sIE9fUkRXUikpIDwgMCkKKwkJZGllKGFyZ3ZbMl0pOworCWlmIChyZWFkKGltYWdlLCBidWZmZXIsIDUxMikgIT0gNTEyKQorCQlkaWUoYXJndlsyXSk7CisJaWYgKG1lbWNtcChidWZmZXIsIGFvdXRfbWFnaWMsIDQpICE9IDApIHsKKwkJZnByaW50ZiAoc3RkZXJyLCAiTm90IGEub3V0LiBEb24ndCBibGFtZSBtZS5cbiIpOworCQlleGl0KDEpOworCX0KKwkvKgorCSAqIFdlIG5lZWQgdG8gZmlsbCBpbiB2YWx1ZXMgZm9yCisJICogc3BhcmNfcmFtZGlza19pbWFnZSArIHNwYXJjX3JhbWRpc2tfc2l6ZQorCSAqIFRvIGxvY2F0ZSB0aGVzZSBzeW1ib2xzIHNlYXJjaCBmb3IgdGhlICJIZHJTIiB0ZXh0IHdoaWNoIGFwcGVhcgorCSAqIGluIHRoZSBpbWFnZSBhIGxpdHRsZSBiZWZvcmUgdGhlIGdva2VybmVsIHN5bWJvbC4KKwkgKiBTZWUgZGVmaW5pdGlvbiBvZiB0aGVzZSBpbiBpbml0XzMyLlMKKwkgKi8KKworCW9mZnNldCA9IGdldF9oZHJzX29mZnNldChpbWFnZSwgYXJndlsyXSk7CisJLyogc2tpcCBIZHJTICsgTElOVVhfVkVSU0lPTl9DT0RFICsgSGRyUyB2ZXJzaW9uICovCisJb2Zmc2V0ICs9IDEwOworCisJaWYgKGxzZWVrKGltYWdlLCBvZmZzZXQsIDApIDwgMCkKKwkJZGllKCJsc2VlayIpOworCisJLyoKKwkgKiByb290X2ZsYWdzID0gMAorCSAqIHJvb3RfZGV2ID0gMSAoUkFNRElTS19NQUpPUikKKwkgKiByYW1fZmxhZ3MgPSAwCisJICogc3BhcmNfcmFtZGlza19pbWFnZSA9ICJQQUdFIGFsaWduZWQgYWRkcmVzcyBhZnRlciBfZW5kIikKKwkgKiBzcGFyY19yYW1kaXNrX3NpemUgPSBzaXplIG9mIGltYWdlCisJICovCisJc3Q0KGJ1ZmZlciwgMCk7CisJc3Q0KGJ1ZmZlciArIDQsIDB4MDEwMDAwMDApOworCXN0NChidWZmZXIgKyA4LCBhbGlnbihlbmQgKyAzMikpOworCXN0NChidWZmZXIgKyAxMiwgcy5zdF9zaXplKTsKKworCWlmICh3cml0ZShpbWFnZSwgYnVmZmVyICsgMiwgMTQpICE9IDE0KQorCQlkaWUoYXJndlsyXSk7CisKKwkvKiBGb3Igc3BhcmM2NCB1cGRhdGUgYV90ZXh0IGFuZCBjbGVhciBhX2RhdGEgKyBhX2JzcyAqLworCWlmIChpczY0Yml0KQorCXsKKwkJaWYgKGxzZWVrKGltYWdlLCA0LCAwKSA8IDApCisJCQlkaWUoImxzZWVrIik7CisJCS8qIGFfdGV4dCAqLworCQlzdDQoYnVmZmVyLCBhbGlnbihlbmQgKyAzMiArIDgxOTEpIC0gKHN0YXJ0ICYgfjB4M2ZmZmZmVUwpICsKKwkJICAgICAgICAgICAgcy5zdF9zaXplKTsKKwkJLyogYV9kYXRhICovCisJCXN0NChidWZmZXIgKyA0LCAwKTsKKwkJLyogYV9ic3MgKi8KKwkJc3Q0KGJ1ZmZlciArIDgsIDApOworCQlpZiAod3JpdGUoaW1hZ2UsIGJ1ZmZlciwgMTIpICE9IDEyKQorCQkJZGllKGFyZ3ZbMl0pOworCX0KKworCS8qIHNlZWsgcGFnZSBhbGlnbmVkIGJvdW5kYXJ5IGluIHRoZSBpbWFnZSBmaWxlIGFuZCBhZGQgYm9vdCBpbWFnZSAqLworCWlmIChsc2VlayhpbWFnZSwgQU9VVF9URVhUX09GRlNFVCAtIHN0YXJ0ICsgYWxpZ24oZW5kICsgMzIpLCAwKSA8IDApCisJCWRpZSgibHNlZWsiKTsKKwlpZiAoKHRhaWwgPSBvcGVuKGFyZ3ZbNF0sIE9fUkRPTkxZKSkgPCAwKQorCQlkaWUoYXJndls0XSk7CisJd2hpbGUgKChpID0gcmVhZCh0YWlsLCBidWZmZXIsIDEwMjQpKSA+IDApCisJCWlmICh3cml0ZShpbWFnZSwgYnVmZmVyLCBpKSAhPSBpKQorCQkJZGllKGFyZ3ZbMl0pOworCWlmIChjbG9zZShpbWFnZSkgPCAwKQorCQlkaWUoImNsb3NlIik7CisJaWYgKGNsb3NlKHRhaWwpIDwgMCkKKwkJZGllKCJjbG9zZSIpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9ib290L3BpZ2d5YmFja18zMi5jIGIvYXJjaC9zcGFyYy9ib290L3BpZ2d5YmFja18zMi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYzk0NGFlLi4wMDAwMDAwCi0tLSBhL2FyY2gvc3BhcmMvYm9vdC9waWdneWJhY2tfMzIuYworKysgL2Rldi9udWxsCkBAIC0xLDEzNyArMCwwIEBACi0vKgotICAgU2ltcGxlIHV0aWxpdHkgdG8gbWFrZSBhIHNpbmdsZS1pbWFnZSBpbnN0YWxsIGtlcm5lbCB3aXRoIGluaXRpYWwgcmFtZGlzawotICAgZm9yIFNwYXJjIHRmdHBib290aW5nIHdpdGhvdXQgbmVlZCB0byBzZXQgdXAgbmZzLgotCi0gICBDb3B5cmlnaHQgKEMpIDE5OTYgSmFrdWIgSmVsaW5layAoampAc3Vuc2l0ZS5tZmYuY3VuaS5jeikKLSAgIFBldGUgWmFpdGNldiA8emFpdGNldkB5YWhvby5jb20+IGVuZGlhbiBmaXhlcyBmb3IgY3Jvc3MtY29tcGlsZXMsIDIwMDAuCi0KLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gICAKLSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuICAqLwotICAgCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxjdHlwZS5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8ZmNudGwuaD4KLSNpbmNsdWRlIDxkaXJlbnQuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotCi0vKgotICogTm90ZTogcnVuIHRoaXMgb24gYW4gYS5vdXQga2VybmVsICh1c2UgZWxmdG9hb3V0IGZvciBpdCksCi0gKiBhcyBQUk9NIGxvb2tzIGZvciBhLm91dCBpbWFnZSBvbmx5LgotICovCi0KLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBsZDIoY2hhciAqcCkKLXsKLQlyZXR1cm4gKHBbMF0gPDwgOCkgfCBwWzFdOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IGxkNChjaGFyICpwKQotewotCXJldHVybiAocFswXSA8PCAyNCkgfCAocFsxXSA8PCAxNikgfCAocFsyXSA8PCA4KSB8IHBbM107Ci19Ci0KLXN0YXRpYyB2b2lkIHN0NChjaGFyICpwLCB1bnNpZ25lZCBpbnQgeCkKLXsKLQlwWzBdID0geCA+PiAyNDsKLQlwWzFdID0geCA+PiAxNjsKLQlwWzJdID0geCA+PiA4OwotCXBbM10gPSB4OwotfQotCi1zdGF0aWMgdm9pZCB1c2FnZSh2b2lkKQotewotCS8qIGZzX2ltZy5neiBpcyBhbiBpbWFnZSBvZiBpbml0aWFsIHJhbWRpc2suICovCi0JZnByaW50ZihzdGRlcnIsICJVc2FnZTogcGlnZ3liYWNrIHZtbGludXguYW91dCBTeXN0ZW0ubWFwIGZzX2ltZy5nelxuIik7Ci0JZnByaW50ZihzdGRlcnIsICJcdEtlcm5lbCBpbWFnZSB3aWxsIGJlIG1vZGlmaWVkIGluIHBsYWNlLlxuIik7Ci0JZXhpdCgxKTsKLX0KLQotc3RhdGljIHZvaWQgZGllKGNoYXIgKnN0cikKLXsKLQlwZXJyb3IgKHN0cik7Ci0JZXhpdCgxKTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsY2hhciAqKmFyZ3YpCi17Ci0Jc3RhdGljIGNoYXIgYW91dF9tYWdpY1tdID0geyAweDAxLCAweDAzLCAweDAxLCAweDA3IH07Ci0JY2hhciBidWZmZXJbMTAyNF0sICpxLCAqcjsKLQl1bnNpZ25lZCBpbnQgaSwgaiwgaywgc3RhcnQsIGVuZCwgb2Zmc2V0OwotCUZJTEUgKm1hcDsKLQlzdHJ1Y3Qgc3RhdCBzOwotCWludCBpbWFnZSwgdGFpbDsKLQotCWlmIChhcmdjICE9IDQpIHVzYWdlKCk7Ci0Jc3RhcnQgPSBlbmQgPSAwOwotCWlmIChzdGF0IChhcmd2WzNdLCAmcykgPCAwKSBkaWUgKGFyZ3ZbM10pOwotCW1hcCA9IGZvcGVuIChhcmd2WzJdLCAiciIpOwotCWlmICghbWFwKSBkaWUoYXJndlsyXSk7Ci0Jd2hpbGUgKGZnZXRzIChidWZmZXIsIDEwMjQsIG1hcCkpIHsKLQkJaWYgKCFzdHJjbXAgKGJ1ZmZlciArIDgsICIgVCBzdGFydFxuIikgfHwgIXN0cmNtcCAoYnVmZmVyICsgMTYsICIgVCBzdGFydFxuIikpCi0JCQlzdGFydCA9IHN0cnRvdWwgKGJ1ZmZlciwgTlVMTCwgMTYpOwotCQllbHNlIGlmICghc3RyY21wIChidWZmZXIgKyA4LCAiIEEgX2VuZFxuIikgfHwgIXN0cmNtcCAoYnVmZmVyICsgMTYsICIgQSBfZW5kXG4iKSkKLQkJCWVuZCA9IHN0cnRvdWwgKGJ1ZmZlciwgTlVMTCwgMTYpOwotCX0KLQlmY2xvc2UgKG1hcCk7Ci0JaWYgKCFzdGFydCB8fCAhZW5kKSB7Ci0JCWZwcmludGYgKHN0ZGVyciwgIkNvdWxkIG5vdCBkZXRlcm1pbmUgc3RhcnQgYW5kIGVuZCBmcm9tIFN5c3RlbS5tYXBcbiIpOwotCQlleGl0KDEpOwotCX0KLQlpZiAoKGltYWdlID0gb3Blbihhcmd2WzFdLE9fUkRXUikpIDwgMCkgZGllKGFyZ3ZbMV0pOwotCWlmIChyZWFkKGltYWdlLGJ1ZmZlciw1MTIpICE9IDUxMikgZGllKGFyZ3ZbMV0pOwotCWlmIChtZW1jbXAgKGJ1ZmZlciwgIlwxNzdFTEYiLCA0KSA9PSAwKSB7Ci0JCXEgPSBidWZmZXIgKyBsZDQoYnVmZmVyICsgMjgpOwotCQlpID0gbGQ0KHEgKyA0KSArIGxkNChidWZmZXIgKyAyNCkgLSBsZDQocSArIDgpOwotCQlpZiAobHNlZWsoaW1hZ2UsaSwwKSA8IDApIGRpZSgibHNlZWsiKTsKLQkJaWYgKHJlYWQoaW1hZ2UsYnVmZmVyLDUxMikgIT0gNTEyKSBkaWUoYXJndlsxXSk7Ci0JCWogPSAwOwotCX0gZWxzZSBpZiAobWVtY21wKGJ1ZmZlciwgYW91dF9tYWdpYywgNCkgPT0gMCkgewotCQlpID0gaiA9IDMyOwotCX0gZWxzZSB7Ci0JCWZwcmludGYgKHN0ZGVyciwgIk5vdCBFTEYgbm9yIGEub3V0LiBEb24ndCBibGFtZSBtZS5cbiIpOwotCQlleGl0KDEpOwotCX0KLQlrID0gaTsKLQlpICs9IChsZDIoYnVmZmVyICsgaiArIDIpPDwyKSAtIDUxMjsKLQlpZiAobHNlZWsoaW1hZ2UsaSwwKSA8IDApIGRpZSgibHNlZWsiKTsKLQlpZiAocmVhZChpbWFnZSxidWZmZXIsMTAyNCkgIT0gMTAyNCkgZGllKGFyZ3ZbMV0pOwotCWZvciAocSA9IGJ1ZmZlciwgciA9IHEgKyA1MTI7IHEgPCByOyBxICs9IDQpIHsKLQkJaWYgKCpxID09ICdIJyAmJiBxWzFdID09ICdkJyAmJiBxWzJdID09ICdyJyAmJiBxWzNdID09ICdTJykKLQkJCWJyZWFrOwotCX0KLQlpZiAocSA9PSByKSB7Ci0JCWZwcmludGYgKHN0ZGVyciwgIkNvdWxkbid0IGZpbmQgaGVhZGVycyBzaWduYXR1cmUgaW4gdGhlIGtlcm5lbC5cbiIpOwotCQlleGl0KDEpOwotCX0KLQlvZmZzZXQgPSBpICsgKHEgLSBidWZmZXIpICsgMTA7Ci0JaWYgKGxzZWVrKGltYWdlLCBvZmZzZXQsIDApIDwgMCkgZGllICgibHNlZWsiKTsKLQotCXN0NChidWZmZXIsIDApOwotCXN0NChidWZmZXIgKyA0LCAweDAxMDAwMDAwKTsKLQlzdDQoYnVmZmVyICsgOCwgKGVuZCArIDMyICsgNDA5NSkgJiB+NDA5NSk7Ci0Jc3Q0KGJ1ZmZlciArIDEyLCBzLnN0X3NpemUpOwotCi0JaWYgKHdyaXRlKGltYWdlLGJ1ZmZlcisyLDE0KSAhPSAxNCkgZGllIChhcmd2WzFdKTsKLQlpZiAobHNlZWsoaW1hZ2UsIGsgLSBzdGFydCArICgoZW5kICsgMzIgKyA0MDk1KSAmIH40MDk1KSwgMCkgPCAwKSBkaWUgKCJsc2VlayIpOwotCWlmICgodGFpbCA9IG9wZW4oYXJndlszXSxPX1JET05MWSkpIDwgMCkgZGllKGFyZ3ZbM10pOwotCXdoaWxlICgoaSA9IHJlYWQgKHRhaWwsYnVmZmVyLDEwMjQpKSA+IDApCi0JCWlmICh3cml0ZShpbWFnZSxidWZmZXIsaSkgIT0gaSkgZGllIChhcmd2WzFdKTsKLQlpZiAoY2xvc2UoaW1hZ2UpIDwgMCkgZGllKCJjbG9zZSIpOwotCWlmIChjbG9zZSh0YWlsKSA8IDApIGRpZSgiY2xvc2UiKTsKLSAgICAJcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2Jvb3QvcGlnZ3liYWNrXzY0LmMgYi9hcmNoL3NwYXJjL2Jvb3QvcGlnZ3liYWNrXzY0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyNmE2ODYuLjAwMDAwMDAKLS0tIGEvYXJjaC9zcGFyYy9ib290L3BpZ2d5YmFja182NC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTEwICswLDAgQEAKLS8qCi0gICBTaW1wbGUgdXRpbGl0eSB0byBtYWtlIGEgc2luZ2xlLWltYWdlIGluc3RhbGwga2VybmVsIHdpdGggaW5pdGlhbCByYW1kaXNrCi0gICBmb3IgU3BhcmM2NCB0ZnRwYm9vdGluZyB3aXRob3V0IG5lZWQgdG8gc2V0IHVwIG5mcy4KLSAgIAotICAgQ29weXJpZ2h0IChDKSAxOTk3IEpha3ViIEplbGluZWsgKGpqQHN1bnNpdGUubWZmLmN1bmkuY3opCi0gICAKLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gICAKLSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuICAqLwotICAgCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxjdHlwZS5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8ZmNudGwuaD4KLSNpbmNsdWRlIDxkaXJlbnQuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotCi0vKiBOb3RlOiBydW4gdGhpcyBvbiBhbiBhLm91dCBrZXJuZWwgKHVzZSBlbGZ0b2FvdXQgZm9yIGl0KSwgYXMgUFJPTSBsb29rcyBmb3IgYS5vdXQgaW1hZ2Ugb25sbHkKLSAgIHVzYWdlOiBwaWdneWJhY2sgdm1saW51eCBTeXN0ZW0ubWFwIHRhaWwsIHdoZXJlIHRhaWwgaXMgZ3ppcHBlZCBmcyBvZiB0aGUgaW5pdGlhbCByYW1kaXNrICovCi0KLXN0YXRpYyB2b2lkIGRpZShjaGFyICpzdHIpCi17Ci0JcGVycm9yIChzdHIpOwotCWV4aXQoMSk7Ci19Ci0KLWludCBtYWluKGludCBhcmdjLGNoYXIgKiphcmd2KQotewotCWNoYXIgYnVmZmVyIFsxMDI0XSwgKnEsICpyOwotCXVuc2lnbmVkIGludCBpLCBqLCBrLCBzdGFydCwgZW5kLCBvZmZzZXQ7Ci0JRklMRSAqbWFwOwotCXN0cnVjdCBzdGF0IHM7Ci0JaW50IGltYWdlLCB0YWlsOwotCQotCXN0YXJ0ID0gZW5kID0gMDsKLQlpZiAoc3RhdCAoYXJndlszXSwgJnMpIDwgMCkgZGllIChhcmd2WzNdKTsKLQltYXAgPSBmb3BlbiAoYXJndlsyXSwgInIiKTsKLQlpZiAoIW1hcCkgZGllKGFyZ3ZbMl0pOwotCXdoaWxlIChmZ2V0cyAoYnVmZmVyLCAxMDI0LCBtYXApKSB7Ci0JCWlmICghc3RyY21wIChidWZmZXIgKyAxOSwgIl9zdGFydFxuIikpCi0JCXN0YXJ0ID0gc3RydG91bCAoYnVmZmVyICsgOCwgTlVMTCwgMTYpOwotCQllbHNlIGlmICghc3RyY21wIChidWZmZXIgKyAxOSwgIl9lbmRcbiIpKQotCQllbmQgPSBzdHJ0b3VsIChidWZmZXIgKyA4LCBOVUxMLCAxNik7Ci0JfQotCWZjbG9zZSAobWFwKTsKLQlpZiAoKGltYWdlID0gb3Blbihhcmd2WzFdLE9fUkRXUikpIDwgMCkgZGllKGFyZ3ZbMV0pOwotCWlmIChyZWFkKGltYWdlLGJ1ZmZlciw1MTIpICE9IDUxMikgZGllKGFyZ3ZbMV0pOwotCWlmICghbWVtY21wIChidWZmZXIsICJcMTc3RUxGIiwgNCkpIHsKLQkJdW5zaWduZWQgaW50ICpwID0gKHVuc2lnbmVkIGludCAqKShidWZmZXIgKyAqKHVuc2lnbmVkIGludCAqKShidWZmZXIgKyAyOCkpOwotCQkKLQkJaSA9IHBbMV0gKyAqKHVuc2lnbmVkIGludCAqKShidWZmZXIgKyAyNCkgLSBwWzJdOwotCQlpZiAobHNlZWsoaW1hZ2UsaSwwKSA8IDApIGRpZSgibHNlZWsiKTsKLQkJaWYgKHJlYWQoaW1hZ2UsYnVmZmVyLDUxMikgIT0gNTEyKSBkaWUoYXJndlsxXSk7Ci0JCWogPSAwOwotCX0gZWxzZSBpZiAoKih1bnNpZ25lZCBpbnQgKilidWZmZXIgPT0gMHgwMTAzMDEwNykgewotCQlpID0gaiA9IDMyOwotCX0gZWxzZSB7Ci0JCWZwcmludGYgKHN0ZGVyciwgIk5vdCBFTEYgbm9yIGEub3V0LiBEb24ndCBibGFtZSBtZS5cbiIpOwotCQlleGl0KDEpOwotCX0KLQlrID0gaTsKLQlpZiAoaiA9PSAzMiAmJiBidWZmZXJbNDBdID09ICdIJyAmJiBidWZmZXJbNDFdID09ICdkJyAmJiBidWZmZXJbNDJdID09ICdyJyAmJiBidWZmZXJbNDNdID09ICdTJykgewotCQlvZmZzZXQgPSA0MCArIDEwOwotCX0gZWxzZSB7Ci0JCWkgKz0gKCgqKHVuc2lnbmVkIHNob3J0ICopKGJ1ZmZlciArIGogKyAyKSk8PDIpIC0gNTEyOwotCQlpZiAobHNlZWsoaW1hZ2UsaSwwKSA8IDApIGRpZSgibHNlZWsiKTsKLQkJaWYgKHJlYWQoaW1hZ2UsYnVmZmVyLDEwMjQpICE9IDEwMjQpIGRpZShhcmd2WzFdKTsKLQkJZm9yIChxID0gYnVmZmVyLCByID0gcSArIDUxMjsgcSA8IHI7IHEgKz0gNCkgewotCQkJaWYgKCpxID09ICdIJyAmJiBxWzFdID09ICdkJyAmJiBxWzJdID09ICdyJyAmJiBxWzNdID09ICdTJykKLQkJCQlicmVhazsKLQkJfQotCQlpZiAocSA9PSByKSB7Ci0JCQlmcHJpbnRmIChzdGRlcnIsICJDb3VsZG4ndCBmaW5kIGhlYWRlcnMgc2lnbmF0dXJlIGluIHRoZSBrZXJuZWwuXG4iKTsKLQkJCWV4aXQoMSk7Ci0JCX0KLQkJb2Zmc2V0ID0gaSArIChxIC0gYnVmZmVyKSArIDEwOwotCX0KLQlpZiAobHNlZWsoaW1hZ2UsIG9mZnNldCwgMCkgPCAwKSBkaWUgKCJsc2VlayIpOwotCSoodW5zaWduZWQgKilidWZmZXIgPSAwOwotCSoodW5zaWduZWQgKikoYnVmZmVyICsgNCkgPSAweDAxMDAwMDAwOwotCSoodW5zaWduZWQgKikoYnVmZmVyICsgOCkgPSAoKGVuZCArIDMyICsgODE5MSkgJiB+ODE5MSk7Ci0JKih1bnNpZ25lZCAqKShidWZmZXIgKyAxMikgPSBzLnN0X3NpemU7Ci0JaWYgKHdyaXRlKGltYWdlLGJ1ZmZlcisyLDE0KSAhPSAxNCkgZGllIChhcmd2WzFdKTsKLQlpZiAobHNlZWsoaW1hZ2UsIDQsIDApIDwgMCkgZGllICgibHNlZWsiKTsKLQkqKHVuc2lnbmVkICopYnVmZmVyID0gKChlbmQgKyAzMiArIDgxOTEpICYgfjgxOTEpIC0gKHN0YXJ0ICYgfjB4M2ZmZmZmVUwpICsgcy5zdF9zaXplOwotCSoodW5zaWduZWQgKikoYnVmZmVyICsgNCkgPSAwOwotCSoodW5zaWduZWQgKikoYnVmZmVyICsgOCkgPSAwOwotCWlmICh3cml0ZShpbWFnZSxidWZmZXIsMTIpICE9IDEyKSBkaWUgKGFyZ3ZbMV0pOwotCWlmIChsc2VlayhpbWFnZSwgayAtIHN0YXJ0ICsgKChlbmQgKyAzMiArIDgxOTEpICYgfjgxOTEpLCAwKSA8IDApIGRpZSAoImxzZWVrIik7Ci0JaWYgKCh0YWlsID0gb3Blbihhcmd2WzNdLE9fUkRPTkxZKSkgPCAwKSBkaWUoYXJndlszXSk7Ci0Jd2hpbGUgKChpID0gcmVhZCAodGFpbCxidWZmZXIsMTAyNCkpID4gMCkKLQkJaWYgKHdyaXRlKGltYWdlLGJ1ZmZlcixpKSAhPSBpKSBkaWUgKGFyZ3ZbMV0pOwotCWlmIChjbG9zZShpbWFnZSkgPCAwKSBkaWUoImNsb3NlIik7Ci0JaWYgKGNsb3NlKHRhaWwpIDwgMCkgZGllKCJjbG9zZSIpOwotICAgIAlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vaW9jdGxzLmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2lvY3Rscy5oCmluZGV4IDUzZjRlZTAuLmVkMzgwN2IgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vaW9jdGxzLmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9pb2N0bHMuaApAQCAtMTksNiArMTksNyBAQAogI2RlZmluZSBUQ1NFVFMyCQlfSU9XKCdUJywgMTMsIHN0cnVjdCB0ZXJtaW9zMikKICNkZWZpbmUgVENTRVRTVzIJX0lPVygnVCcsIDE0LCBzdHJ1Y3QgdGVybWlvczIpCiAjZGVmaW5lIFRDU0VUU0YyCV9JT1coJ1QnLCAxNSwgc3RydWN0IHRlcm1pb3MyKQorI2RlZmluZSBUSU9DR0RFVglfSU9SKCdUJywweDMyLCB1bnNpZ25lZCBpbnQpIC8qIEdldCBwcmltYXJ5IGRldmljZSBub2RlIG9mIC9kZXYvY29uc29sZSAqLwogCiAvKiBOb3RlIHRoYXQgYWxsIHRoZSBpb2N0bHMgdGhhdCBhcmUgbm90IGF2YWlsYWJsZSBpbiBMaW51eCBoYXZlIGEgCiAgKiBkb3VibGUgdW5kZXJzY29yZSBvbiB0aGUgZnJvbnQgdG86IGEpIGF2b2lkIHNvbWUgcHJvZ3JhbXMgdG8KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vbGVvbi5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9sZW9uLmgKaW5kZXggM2VhNTk2NC4uODU4MGQxNyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9sZW9uLmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9sZW9uLmgKQEAgLTIyNCw2ICsyMjQsMTggQEAKIAkJCSAgInN0YSAlJWwyLCBbJSVnMF0gMlxuXHQiIDogOiA6ICJsMSIsICJsMiIpOwogfTsKIAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHNwYXJjX2xlb24zX2FzcjE3KHZvaWQpCit7CisJdTMyIGFzcjE3OworCV9fYXNtX18gX192b2xhdGlsZV9fICgicmQgJSVhc3IxNywgJTBcblx0IiA6ICI9ciIoYXNyMTcpKTsKKwlyZXR1cm4gYXNyMTc7Cit9OworCitzdGF0aWMgaW5saW5lIGludCBzcGFyY19sZW9uM19jcHVpZCh2b2lkKQoreworCXJldHVybiBzcGFyY19sZW9uM19hc3IxNygpID4+IDI4OworfQorCiAjZW5kaWYgLyohX19BU1NFTUJMWV9fKi8KIAogI2lmZGVmIENPTkZJR19TTVAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vbGVvbl9hbWJhLmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2xlb25fYW1iYS5oCmluZGV4IDYxOGU4ODguLjI2M2M3MTkgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vbGVvbl9hbWJhLmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9sZW9uX2FtYmEuaApAQCAtMTAwLDkgKzEwMCw4IEBACiAJdTMyIG1wYnJvYWRjYXN0OwogCXUzMiBub3R1c2VkMDI7CiAJdTMyIG5vdHVzZWQwMzsKLQl1MzIgbm90dXNlZDEwOwotCXUzMiBub3R1c2VkMTE7Ci0JdTMyIG5vdHVzZWQxMjsKKwl1MzIgYW1wY3RybDsKKwl1MzIgaWNzZWxbMl07CiAJdTMyIG5vdHVzZWQxMzsKIAl1MzIgbm90dXNlZDIwOwogCXUzMiBub3R1c2VkMjE7CkBAIC0xMTIsNiArMTExLDcgQEAKIAl1MzIgZm9yY2VbMTZdOwogCS8qIEV4dGVuZGVkIElSUSByZWdpc3RlcnMgKi8KIAl1MzIgaW50aWRbMTZdOwkvKiAweGMwICovCisJdTMyIHVudXNlZFsoMHgxMDAwLTB4MTAwKS80XTsKIH07CiAKIHN0cnVjdCBsZW9uM19hcGJ1YXJ0X3JlZ3NfbWFwIHsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vb3BsaWJfMzIuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vb3BsaWJfMzIuaAppbmRleCA5ZTVjNjQwLi43MWU1ZTlhIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL29wbGliXzMyLmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9vcGxpYl8zMi5oCkBAIC00OCwxOCArNDgsNiBAQAogLyogQm9vdCBhcmd1bWVudCBhY3F1aXNpdGlvbiwgcmV0dXJucyB0aGUgYm9vdCBjb21tYW5kIGxpbmUgc3RyaW5nLiAqLwogZXh0ZXJuIGNoYXIgKnByb21fZ2V0Ym9vdGFyZ3Modm9pZCk7CiAKLS8qIERldmljZSB1dGlsaXRpZXMuICovCi0KLS8qIE1hcCBhbmQgdW5tYXAgZGV2aWNlcyBpbiBJTyBzcGFjZSBhdCB2aXJ0dWFsIGFkZHJlc3Nlcy4gTm90ZSB0aGF0IHRoZQotICogdmlydHVhbCBhZGRyZXNzIHlvdSBwYXNzIGlzIGEgcmVxdWVzdCBhbmQgdGhlIHByb20gbWF5IHB1dCB5b3VyIG1hcHBpbmdzCi0gKiBzb21ld2hlcmUgZWxzZSwgc28gY2hlY2sgeW91ciByZXR1cm4gdmFsdWUgYXMgdGhhdCBpcyB3aGVyZSB5b3VyIG5ldwotICogbWFwcGluZ3MgcmVhbGx5IGFyZSEKLSAqCi0gKiBBbm90aGVyIG5vdGUsIHRoZXNlIGFyZSBvbmx5IGF2YWlsYWJsZSBvbiBWMiBvciBoaWdoZXIgcHJvbXMhCi0gKi8KLWV4dGVybiBjaGFyICpwcm9tX21hcGlvKGNoYXIgKnZpcnRfaGludCwgaW50IGlvX3NwYWNlLCB1bnNpZ25lZCBpbnQgcGh5c19hZGRyLCB1bnNpZ25lZCBpbnQgbnVtX2J5dGVzKTsKLWV4dGVybiB2b2lkIHByb21fdW5tYXBpbyhjaGFyICp2aXJ0X2FkZHIsIHVuc2lnbmVkIGludCBudW1fYnl0ZXMpOwotCiAvKiBNaXNjZWxsYW5lb3VzIHJvdXRpbmVzLCBkb24ndCByZWFsbHkgZml0IGluIGFueSBjYXRlZ29yeSBwZXIgc2UuICovCiAKIC8qIFJlYm9vdCB0aGUgbWFjaGluZSB3aXRoIHRoZSBjb21tYW5kIGxpbmUgcGFzc2VkLiAqLwpAQCAtNzYsNyArNjQsNyBAQAogLyogRW50ZXIgdGhlIHByb20sIHdpdGggbm8gY2hhbmNlIG9mIGNvbnRpbnVhdGlvbiBmb3IgdGhlIHN0YW5kLWFsb25lCiAgKiB3aGljaCBjYWxscyB0aGlzLgogICovCi1leHRlcm4gdm9pZCBwcm9tX2hhbHQodm9pZCkgX19hdHRyaWJ1dGVfXyAoKG5vcmV0dXJuKSk7CitleHRlcm4gdm9pZCBfX25vcmV0dXJuIHByb21faGFsdCh2b2lkKTsKIAogLyogU2V0IHRoZSBQUk9NICdzeW5jJyBjYWxsYmFjayBmdW5jdGlvbiB0byB0aGUgcGFzc2VkIGZ1bmN0aW9uIHBvaW50ZXIuCiAgKiBXaGVuIHRoZSB1c2VyIGdpdmVzIHRoZSAnc3luYycgY29tbWFuZCBhdCB0aGUgcHJvbSBwcm9tcHQgd2hpbGUgdGhlCkBAIC0xMTcsMjUgKzEwNSw2IEBACiBleHRlcm4gaW50IHByb21fc3RhcnRjcHUoaW50IGNwdW5vZGUsIHN0cnVjdCBsaW51eF9wcm9tX3JlZ2lzdGVycyAqY29udGV4dF90YWJsZSwKIAkJCSBpbnQgY29udGV4dCwgY2hhciAqcHJvZ3JhbV9jb3VudGVyKTsKIAotLyogU3RvcCB0aGUgQ1BVIHdpdGggdGhlIHBhc3NlZCBkZXZpY2UgdHJlZSBub2RlLiAqLwotZXh0ZXJuIGludCBwcm9tX3N0b3BjcHUoaW50IGNwdW5vZGUpOwotCi0vKiBJZGxlIHRoZSBDUFUgd2l0aCB0aGUgcGFzc2VkIGRldmljZSB0cmVlIG5vZGUuICovCi1leHRlcm4gaW50IHByb21faWRsZWNwdShpbnQgY3B1bm9kZSk7Ci0KLS8qIFJlLVN0YXJ0IHRoZSBDUFUgd2l0aCB0aGUgcGFzc2VkIGRldmljZSB0cmVlIG5vZGUuICovCi1leHRlcm4gaW50IHByb21fcmVzdGFydGNwdShpbnQgY3B1bm9kZSk7Ci0KLS8qIFBST00gbWVtb3J5IGFsbG9jYXRpb24gZmFjaWxpdGllcy4uLiAqLwotCi0vKiBBbGxvY2F0ZWQgYXQgcG9zc2libHkgdGhlIGdpdmVuIHZpcnR1YWwgYWRkcmVzcyBhIGNodW5rIG9mIHRoZQotICogaW5kaWNhdGVkIHNpemUuCi0gKi8KLWV4dGVybiBjaGFyICpwcm9tX2FsbG9jKGNoYXIgKnZpcnRfaGludCwgdW5zaWduZWQgaW50IHNpemUpOwotCi0vKiBGcmVlIGEgcHJldmlvdXNseSBhbGxvY2F0ZWQgY2h1bmsuICovCi1leHRlcm4gdm9pZCBwcm9tX2ZyZWUoY2hhciAqdmlydF9hZGRyLCB1bnNpZ25lZCBpbnQgc2l6ZSk7Ci0KIC8qIFN1bjQvc3VuNGMgc3BlY2lmaWMgbWVtb3J5LW1hbmFnZW1lbnQgc3RhcnR1cCBob29rLiAqLwogCiAvKiBNYXAgdGhlIHBhc3NlZCBzZWdtZW50IGluIHRoZSBnaXZlbiBjb250ZXh0IGF0IHRoZSBwYXNzZWQKQEAgLTE0NCw2ICsxMTMsOCBAQAogZXh0ZXJuIHZvaWQgcHJvbV9wdXRzZWdtZW50KGludCBjb250ZXh0LCB1bnNpZ25lZCBsb25nIHZpcnRfYWRkciwKIAkJCSAgICBpbnQgcGh5c2ljYWxfc2VnbWVudCk7CiAKKy8qIEluaXRpYWxpemUgdGhlIG1lbW9yeSBsaXN0cyBiYXNlZCB1cG9uIHRoZSBwcm9tIHZlcnNpb24uICovCit2b2lkIHByb21fbWVtaW5pdCh2b2lkKTsKIAogLyogUFJPTSBkZXZpY2UgdHJlZSB0cmF2ZXJzYWwgZnVuY3Rpb25zLi4uICovCiAKQEAgLTE3OCwxOSArMTQ5LDExIEBACiAvKiBBY3F1aXJlIGEgc3RyaW5nIHByb3BlcnR5LCBudWxsIHN0cmluZyBvbiBlcnJvci4gKi8KIGV4dGVybiB2b2lkIHByb21fZ2V0c3RyaW5nKHBoYW5kbGUgbm9kZSwgY2hhciAqcHJvcCwgY2hhciAqYnVmLCBpbnQgYnVmc2l6ZSk7CiAKLS8qIERvZXMgdGhlIHBhc3NlZCBub2RlIGhhdmUgdGhlIGdpdmVuICJuYW1lIj8gWUVTPTEgTk89MCAqLwotZXh0ZXJuIGludCBwcm9tX25vZGVtYXRjaChwaGFuZGxlIHRoaXNub2RlLCBjaGFyICpuYW1lKTsKLQogLyogU2VhcmNoIGFsbCBzaWJsaW5ncyBzdGFydGluZyBhdCB0aGUgcGFzc2VkIG5vZGUgZm9yICJuYW1lIiBtYXRjaGluZwogICogdGhlIGdpdmVuIHN0cmluZy4gIFJldHVybnMgdGhlIG5vZGUgb24gc3VjY2VzcywgemVybyBvbiBmYWlsdXJlLgogICovCiBleHRlcm4gcGhhbmRsZSBwcm9tX3NlYXJjaHNpYmxpbmdzKHBoYW5kbGUgbm9kZV9zdGFydCwgY2hhciAqbmFtZSk7CiAKLS8qIFJldHVybiB0aGUgZmlyc3QgcHJvcGVydHkgdHlwZSwgYXMgYSBzdHJpbmcsIGZvciB0aGUgZ2l2ZW4gbm9kZS4KLSAqIFJldHVybnMgYSBudWxsIHN0cmluZyBvbiBlcnJvci4KLSAqLwotZXh0ZXJuIGNoYXIgKnByb21fZmlyc3Rwcm9wKHBoYW5kbGUgbm9kZSwgY2hhciAqYnVmZmVyKTsKLQogLyogUmV0dXJucyB0aGUgbmV4dCBwcm9wZXJ0eSBhZnRlciB0aGUgcGFzc2VkIHByb3BlcnR5IGZvciB0aGUgZ2l2ZW4KICAqIG5vZGUuICBSZXR1cm5zIG51bGwgc3RyaW5nIG9uIGZhaWx1cmUuCiAgKi8KQEAgLTE5OSw5ICsxNjIsNiBAQAogLyogUmV0dXJucyBwaGFuZGxlIG9mIHRoZSBwYXRoIHNwZWNpZmllZCAqLwogZXh0ZXJuIHBoYW5kbGUgcHJvbV9maW5kZGV2aWNlKGNoYXIgKm5hbWUpOwogCi0vKiBSZXR1cm5zIDEgaWYgdGhlIHNwZWNpZmllZCBub2RlIGhhcyBnaXZlbiBwcm9wZXJ0eS4gKi8KLWV4dGVybiBpbnQgcHJvbV9ub2RlX2hhc19wcm9wZXJ0eShwaGFuZGxlIG5vZGUsIGNoYXIgKnByb3BlcnR5KTsKLQogLyogU2V0IHRoZSBpbmRpY2F0ZWQgcHJvcGVydHkgYXQgdGhlIGdpdmVuIG5vZGUgd2l0aCB0aGUgcGFzc2VkIHZhbHVlLgogICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIG9mIHlvdXIgdmFsdWUgdGhhdCB0aGUgcHJvbSB0b29rLgogICovCkBAIC0yMTksNiArMTc5LDggQEAKIGV4dGVybiB2b2lkIHByb21fYXBwbHlfZ2VuZXJpY19yYW5nZXMocGhhbmRsZSBub2RlLCBwaGFuZGxlIHBhcmVudCwKIAkJCQkgICAgICBzdHJ1Y3QgbGludXhfcHJvbV9yZWdpc3RlcnMgKnNidXNyZWdzLCBpbnQgbnJlZ3MpOwogCit2b2lkIHByb21fcmFuZ2VzX2luaXQodm9pZCk7CisKIC8qIENQVSBwcm9iaW5nIGhlbHBlcnMuICAqLwogaW50IGNwdV9maW5kX2J5X2luc3RhbmNlKGludCBpbnN0YW5jZSwgcGhhbmRsZSAqcHJvbV9ub2RlLCBpbnQgKm1pZCk7CiBpbnQgY3B1X2ZpbmRfYnlfbWlkKGludCBtaWQsIHBoYW5kbGUgKnByb21fbm9kZSk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL29wbGliXzY0LmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL29wbGliXzY0LmgKaW5kZXggOGNkMGRmMy4uOTdhOTA0NyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9vcGxpYl82NC5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vb3BsaWJfNjQuaApAQCAtMTgsOCArMTgsOCBAQAogICovCiBleHRlcm4gcGhhbmRsZSBwcm9tX3Jvb3Rfbm9kZTsKIAotLyogUFJPTSBzdGRpbiBhbmQgc3Rkb3V0ICovCi1leHRlcm4gaW50IHByb21fc3RkaW4sIHByb21fc3Rkb3V0OworLyogUFJPTSBzdGRvdXQgKi8KK2V4dGVybiBpbnQgcHJvbV9zdGRvdXQ7CiAKIC8qIC9jaG9zZW4gbm9kZSBvZiB0aGUgcHJvbSBkZXZpY2UgdHJlZSwgdGhpcyBzdGF5cyBjb25zdGFudCBhZnRlcgogICogaW5pdGlhbGl6YXRpb24gaXMgY29tcGxldGUuCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oCmluZGV4IDZlOGJmYTEuLjRkM2RiZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oCkBAIC00LDggKzQsNiBAQAogI2lmZGVmIENPTkZJR19QRVJGX0VWRU5UUwogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KIAotZXh0ZXJuIHZvaWQgaW5pdF9od19wZXJmX2V2ZW50cyh2b2lkKTsKLQogI2RlZmluZSBwZXJmX2FyY2hfZmV0Y2hfY2FsbGVyX3JlZ3MocmVncywgaXApCQlcCiBkbyB7CQkJCQkJCVwKIAl1bnNpZ25lZCBsb25nIF9wc3RhdGUsIF9hc2ksIF9waWwsIF9pNywgX2ZwOwlcCkBAIC0yNiw4ICsyNCw2IEBACiAJKHJlZ3MpLT51X3JlZ3NbVVJFR19JNl0gPSBfZnA7CQkJXAogCShyZWdzKS0+dV9yZWdzW1VSRUdfSTddID0gX2k3OwkJCVwKIH0gd2hpbGUgKDApCi0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIGluaXRfaHdfcGVyZl9ldmVudHModm9pZCkJeyB9CiAjZW5kaWYKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9oZWFkXzMyLlMgYi9hcmNoL3NwYXJjL2tlcm5lbC9oZWFkXzMyLlMKaW5kZXggMjFiYjI1OS4uNTk0MjM0OSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvaGVhZF8zMi5TCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL2hlYWRfMzIuUwpAQCAtNzMsMTIgKzczLDExIEBACiAKIAkvKiBUaGUgU3BhcmMgdHJhcCB0YWJsZSwgYm9vdGxvYWRlciBnaXZlcyB1cyBjb250cm9sIGF0IF9zdGFydC4gKi8KIAlfX0hFQUQKLQkuZ2xvYmwJc3RhcnQsIF9zdGV4dCwgX3N0YXJ0LCBfX3N0ZXh0CisJLmdsb2JsCV9zdGV4dCwgX3N0YXJ0LCBfX3N0ZXh0CiAJLmdsb2JsICB0cmFwYmFzZQogX3N0YXJ0OiAgIC8qIGRhbmdlciBkYW5nZXIgKi8KIF9fc3RleHQ6CiBfc3RleHQ6Ci1zdGFydDoKIHRyYXBiYXNlOgogI2lmZGVmIENPTkZJR19TTVAKIHRyYXBiYXNlX2NwdTA6CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9sZW9uX2tlcm5lbC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvbGVvbl9rZXJuZWwuYwppbmRleCBmMDFjNDI2Li5mZGFiN2Y4IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9sZW9uX2tlcm5lbC5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL2xlb25fa2VybmVsLmMKQEAgLTIzLDE1ICsyMywxNiBAQAogI2luY2x1ZGUgInByb20uaCIKICNpbmNsdWRlICJpcnEuaCIKIAotc3RydWN0IGxlb24zX2lycWN0cmxfcmVnc19tYXAgKmxlb24zX2lycWN0cmxfcmVnczsgLyogaW50ZXJydXB0IGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzLCBpbml0aWFsaXplZCBieSBhbWJhX2luaXQoKSAqLwotc3RydWN0IGxlb24zX2dwdGltZXJfcmVnc19tYXAgKmxlb24zX2dwdGltZXJfcmVnczsgLyogdGltZXIgY29udHJvbGxlciBiYXNlIGFkZHJlc3MsIGluaXRpYWxpemVkIGJ5IGFtYmFfaW5pdCgpICovCitzdHJ1Y3QgbGVvbjNfaXJxY3RybF9yZWdzX21hcCAqbGVvbjNfaXJxY3RybF9yZWdzOyAvKiBpbnRlcnJ1cHQgY29udHJvbGxlciBiYXNlIGFkZHJlc3MgKi8KK3N0cnVjdCBsZW9uM19ncHRpbWVyX3JlZ3NfbWFwICpsZW9uM19ncHRpbWVyX3JlZ3M7IC8qIHRpbWVyIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzICovCiBzdHJ1Y3QgYW1iYV9hcGJfZGV2aWNlIGxlb25fcGVyY3B1X3RpbWVyX2RldlsxNl07CiAKIGludCBsZW9uZGVidWdfaXJxX2Rpc2FibGU7CiBpbnQgbGVvbl9kZWJ1Z19pcnFvdXQ7CiBzdGF0aWMgaW50IGR1bW15X21hc3Rlcl9sMTBfY291bnRlcjsKIAotdW5zaWduZWQgbG9uZyBsZW9uM19ncHRpbWVyX2lycTsgLyogaW50ZXJydXB0IGNvbnRyb2xsZXIgaXJxIG51bWJlciwgaW5pdGlhbGl6ZWQgYnkgYW1iYV9pbml0KCkgKi8KK3Vuc2lnbmVkIGxvbmcgbGVvbjNfZ3B0aW1lcl9pcnE7IC8qIGludGVycnVwdCBjb250cm9sbGVyIGlycSBudW1iZXIgKi8KK3Vuc2lnbmVkIGxvbmcgbGVvbjNfZ3B0aW1lcl9pZHg7IC8qIFRpbWVyIEluZGV4ICgwLi42KSB3aXRoaW4gVGltZXIgQ29yZSAqLwogdW5zaWduZWQgaW50IHNwYXJjX2xlb25fZWlycTsKICNkZWZpbmUgTEVPTl9JTUFTSyAoKCZsZW9uM19pcnFjdHJsX3JlZ3MtPm1hc2tbMF0pKQogCkBAIC0xMDUsMjEgKzEwNiw3OSBAQAogdm9pZCBfX2luaXQgbGVvbl9pbml0X3RpbWVycyhpcnFfaGFuZGxlcl90IGNvdW50ZXJfZm4pCiB7CiAJaW50IGlycTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnJvb3RucCwgKm5wLCAqbm5wOworCXN0cnVjdCBwcm9wZXJ0eSAqcHA7CisJaW50IGxlbjsKKwlpbnQgY3B1LCBpY3NlbDsKKwlpbnQgYW1wb3B0czsKIAogCWxlb25kZWJ1Z19pcnFfZGlzYWJsZSA9IDA7CiAJbGVvbl9kZWJ1Z19pcnFvdXQgPSAwOwogCW1hc3Rlcl9sMTBfY291bnRlciA9ICh1bnNpZ25lZCBpbnQgKikmZHVtbXlfbWFzdGVyX2wxMF9jb3VudGVyOwogCWR1bW15X21hc3Rlcl9sMTBfY291bnRlciA9IDA7CiAKLQlpZiAobGVvbjNfZ3B0aW1lcl9yZWdzICYmIGxlb24zX2lycWN0cmxfcmVncykgewotCQlMRU9OM19CWVBBU1NfU1RPUkVfUEEoJmxlb24zX2dwdGltZXJfcmVncy0+ZVswXS52YWwsIDApOwotCQlMRU9OM19CWVBBU1NfU1RPUkVfUEEoJmxlb24zX2dwdGltZXJfcmVncy0+ZVswXS5ybGQsCi0JCQkJICAgICAgKCgoMTAwMDAwMCAvIEhaKSAtIDEpKSk7Ci0JCUxFT04zX0JZUEFTU19TVE9SRV9QQSgmbGVvbjNfZ3B0aW1lcl9yZWdzLT5lWzBdLmN0cmwsIDApOworCS8qRmluZCBJUlFNUCBJUlEgQ29udHJvbGxlciBSZWdpc3RlcnMgYmFzZSBhZGRyZXNzIG90aGVyd2lzZSBiYWlsIG91dC4qLworCXJvb3RucCA9IG9mX2ZpbmRfbm9kZV9ieV9wYXRoKCIvYW1iYXBwMCIpOworCWlmICghcm9vdG5wKQorCQlnb3RvIGJhZDsKKwlucCA9IG9mX2ZpbmRfbm9kZV9ieV9uYW1lKHJvb3RucCwgIkdBSVNMRVJfSVJRTVAiKTsKKwlpZiAoIW5wKSB7CisJCW5wID0gb2ZfZmluZF9ub2RlX2J5X25hbWUocm9vdG5wLCAiMDFfMDBkIik7CisJCWlmICghbnApCisJCQlnb3RvIGJhZDsKKwl9CisJcHAgPSBvZl9maW5kX3Byb3BlcnR5KG5wLCAicmVnIiwgJmxlbik7CisJaWYgKCFwcCkKKwkJZ290byBiYWQ7CisJbGVvbjNfaXJxY3RybF9yZWdzID0gKihzdHJ1Y3QgbGVvbjNfaXJxY3RybF9yZWdzX21hcCAqKilwcC0+dmFsdWU7CisKKwkvKiBGaW5kIEdQVElNRVIgVGltZXIgUmVnaXN0ZXJzIGJhc2UgYWRkcmVzcyBvdGhlcndpc2UgYmFpbCBvdXQuICovCisJbm5wID0gcm9vdG5wOworCWRvIHsKKwkJbnAgPSBvZl9maW5kX25vZGVfYnlfbmFtZShubnAsICJHQUlTTEVSX0dQVElNRVIiKTsKKwkJaWYgKCFucCkgeworCQkJbnAgPSBvZl9maW5kX25vZGVfYnlfbmFtZShubnAsICIwMV8wMTEiKTsKKwkJCWlmICghbnApCisJCQkJZ290byBiYWQ7CisJCX0KKworCQlhbXBvcHRzID0gMDsKKwkJcHAgPSBvZl9maW5kX3Byb3BlcnR5KG5wLCAiYW1wb3B0cyIsICZsZW4pOworCQlpZiAocHApIHsKKwkJCWFtcG9wdHMgPSAqKGludCAqKXBwLT52YWx1ZTsKKwkJCWlmIChhbXBvcHRzID09IDApIHsKKwkJCQkvKiBTa2lwIHRoaXMgaW5zdGFuY2UsIHJlc291cmNlIGFscmVhZHkKKwkJCQkgKiBhbGxvY2F0ZWQgYnkgb3RoZXIgT1MgKi8KKwkJCQlubnAgPSBucDsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCisJCS8qIFNlbGVjdCBUaW1lci1JbnN0YW5jZSBvbiBUaW1lciBDb3JlLiBEZWZhdWx0IGlzIHplcm8gKi8KKwkJbGVvbjNfZ3B0aW1lcl9pZHggPSBhbXBvcHRzICYgMHg3OworCisJCXBwID0gb2ZfZmluZF9wcm9wZXJ0eShucCwgInJlZyIsICZsZW4pOworCQlpZiAocHApCisJCQlsZW9uM19ncHRpbWVyX3JlZ3MgPSAqKHN0cnVjdCBsZW9uM19ncHRpbWVyX3JlZ3NfbWFwICoqKQorCQkJCQkJcHAtPnZhbHVlOworCQlwcCA9IG9mX2ZpbmRfcHJvcGVydHkobnAsICJpbnRlcnJ1cHRzIiwgJmxlbik7CisJCWlmIChwcCkKKwkJCWxlb24zX2dwdGltZXJfaXJxID0gKih1bnNpZ25lZCBpbnQgKilwcC0+dmFsdWU7CisJfSB3aGlsZSAoMCk7CisKKwlpZiAobGVvbjNfZ3B0aW1lcl9yZWdzICYmIGxlb24zX2lycWN0cmxfcmVncyAmJiBsZW9uM19ncHRpbWVyX2lycSkgeworCQlMRU9OM19CWVBBU1NfU1RPUkVfUEEoCisJCQkmbGVvbjNfZ3B0aW1lcl9yZWdzLT5lW2xlb24zX2dwdGltZXJfaWR4XS52YWwsIDApOworCQlMRU9OM19CWVBBU1NfU1RPUkVfUEEoCisJCQkmbGVvbjNfZ3B0aW1lcl9yZWdzLT5lW2xlb24zX2dwdGltZXJfaWR4XS5ybGQsCisJCQkoKCgxMDAwMDAwIC8gSFopIC0gMSkpKTsKKwkJTEVPTjNfQllQQVNTX1NUT1JFX1BBKAorCQkJJmxlb24zX2dwdGltZXJfcmVncy0+ZVtsZW9uM19ncHRpbWVyX2lkeF0uY3RybCwgMCk7CiAKICNpZmRlZiBDT05GSUdfU01QCiAJCWxlb25fcGVyY3B1X3RpbWVyX2RldlswXS5zdGFydCA9IChpbnQpbGVvbjNfZ3B0aW1lcl9yZWdzOwotCQlsZW9uX3BlcmNwdV90aW1lcl9kZXZbMF0uaXJxID0gbGVvbjNfZ3B0aW1lcl9pcnErMTsKKwkJbGVvbl9wZXJjcHVfdGltZXJfZGV2WzBdLmlycSA9IGxlb24zX2dwdGltZXJfaXJxICsgMSArCisJCQkJCSAgICAgICBsZW9uM19ncHRpbWVyX2lkeDsKIAogCQlpZiAoIShMRU9OM19CWVBBU1NfTE9BRF9QQSgmbGVvbjNfZ3B0aW1lcl9yZWdzLT5jb25maWcpICYKIAkJICAgICAgKDE8PExFT04zX0dQVElNRVJfU0VQSVJRKSkpIHsKQEAgLTEyNywxNyArMTg2LDMzIEBACiAJCQlCVUcoKTsKIAkJfQogCi0JCUxFT04zX0JZUEFTU19TVE9SRV9QQSgmbGVvbjNfZ3B0aW1lcl9yZWdzLT5lWzFdLnZhbCwgMCk7Ci0JCUxFT04zX0JZUEFTU19TVE9SRV9QQSgmbGVvbjNfZ3B0aW1lcl9yZWdzLT5lWzFdLnJsZCwgKCgoMTAwMDAwMC9IWikgLSAxKSkpOwotCQlMRU9OM19CWVBBU1NfU1RPUkVfUEEoJmxlb24zX2dwdGltZXJfcmVncy0+ZVsxXS5jdHJsLCAwKTsKKwkJTEVPTjNfQllQQVNTX1NUT1JFX1BBKAorCQkJJmxlb24zX2dwdGltZXJfcmVncy0+ZVtsZW9uM19ncHRpbWVyX2lkeCsxXS52YWwsIDApOworCQlMRU9OM19CWVBBU1NfU1RPUkVfUEEoCisJCQkmbGVvbjNfZ3B0aW1lcl9yZWdzLT5lW2xlb24zX2dwdGltZXJfaWR4KzFdLnJsZCwKKwkJCSgoKDEwMDAwMDAvSFopIC0gMSkpKTsKKwkJTEVPTjNfQllQQVNTX1NUT1JFX1BBKAorCQkJJmxlb24zX2dwdGltZXJfcmVncy0+ZVtsZW9uM19ncHRpbWVyX2lkeCsxXS5jdHJsLCAwKTsKICMgZW5kaWYKIAorCQkvKgorCQkgKiBUaGUgSVJRIGNvbnRyb2xsZXIgbWF5IChpZiBpbXBsZW1lbnRlZCkgY29uc2lzdCBvZiBtdWx0aXBsZQorCQkgKiBJUlEgY29udHJvbGxlcnMsIGVhY2ggbWFwcGVkIG9uIGEgNEtiIGJvdW5kYXJ5LgorCQkgKiBFYWNoIENQVSBtYXkgYmUgcm91dGVkIHRvIGRpZmZlcmVudCBJUlFDVFJMcywgaG93ZXZlcgorCQkgKiB3ZSBhc3N1bWUgdGhhdCBhbGwgQ1BVcyAoaW4gU01QIHN5c3RlbSkgaXMgcm91dGVkIHRvIHRoZQorCQkgKiBzYW1lIElSUSBDb250cm9sbGVyLCBhbmQgZm9yIG5vbi1TTVAgb25seSBvbmUgSVJRQ1RSTCBpcworCQkgKiBhY2Nlc3NlZCBhbnl3YXkuCisJCSAqIEluIEFNUCBzeXN0ZW1zLCBMaW51eCBtdXN0IHJ1biBvbiBDUFUwIGZvciB0aGUgdGltZSBiZWluZy4KKwkJICovCisJCWNwdSA9IHNwYXJjX2xlb24zX2NwdWlkKCk7CisJCWljc2VsID0gTEVPTjNfQllQQVNTX0xPQURfUEEoJmxlb24zX2lycWN0cmxfcmVncy0+aWNzZWxbY3B1LzhdKTsKKwkJaWNzZWwgPSAoaWNzZWwgPj4gKCg3IC0gKGNwdSYweDcpKSAqIDQpKSAmIDB4ZjsKKwkJbGVvbjNfaXJxY3RybF9yZWdzICs9IGljc2VsOwogCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiTm8gVGltZXIvaXJxY3RybCBmb3VuZFxuIik7Ci0JCUJVRygpOworCQlnb3RvIGJhZDsKIAl9CiAKLQlpcnEgPSByZXF1ZXN0X2lycShsZW9uM19ncHRpbWVyX2lycSwKKwlpcnEgPSByZXF1ZXN0X2lycShsZW9uM19ncHRpbWVyX2lycStsZW9uM19ncHRpbWVyX2lkeCwKIAkJCSAgY291bnRlcl9mbiwKIAkJCSAgKElSUUZfRElTQUJMRUQgfCBTQV9TVEFUSUNfQUxMT0MpLCAidGltZXIiLCBOVUxMKTsKIApAQCAtMTY5LDEzICsyNDQsMTMgQEAKICMgZW5kaWYKIAogCWlmIChsZW9uM19ncHRpbWVyX3JlZ3MpIHsKLQkJTEVPTjNfQllQQVNTX1NUT1JFX1BBKCZsZW9uM19ncHRpbWVyX3JlZ3MtPmVbMF0uY3RybCwKKwkJTEVPTjNfQllQQVNTX1NUT1JFX1BBKCZsZW9uM19ncHRpbWVyX3JlZ3MtPmVbbGVvbjNfZ3B0aW1lcl9pZHhdLmN0cmwsCiAJCQkJICAgICAgTEVPTjNfR1BUSU1FUl9FTiB8CiAJCQkJICAgICAgTEVPTjNfR1BUSU1FUl9STCB8CiAJCQkJICAgICAgTEVPTjNfR1BUSU1FUl9MRCB8IExFT04zX0dQVElNRVJfSVJRRU4pOwogCiAjaWZkZWYgQ09ORklHX1NNUAotCQlMRU9OM19CWVBBU1NfU1RPUkVfUEEoJmxlb24zX2dwdGltZXJfcmVncy0+ZVsxXS5jdHJsLAorCQlMRU9OM19CWVBBU1NfU1RPUkVfUEEoJmxlb24zX2dwdGltZXJfcmVncy0+ZVtsZW9uM19ncHRpbWVyX2lkeCsxXS5jdHJsLAogCQkJCSAgICAgIExFT04zX0dQVElNRVJfRU4gfAogCQkJCSAgICAgIExFT04zX0dQVElNRVJfUkwgfAogCQkJCSAgICAgIExFT04zX0dQVElNRVJfTEQgfApAQCAtMTgzLDYgKzI1OCwxMSBAQAogI2VuZGlmCiAKIAl9CisJcmV0dXJuOworYmFkOgorCXByaW50ayhLRVJOX0VSUiAiTm8gVGltZXIvaXJxY3RybCBmb3VuZFxuIik7CisJQlVHKCk7CisJcmV0dXJuOwogfQogCiB2b2lkIGxlb25fY2xlYXJfY2xvY2tfaXJxKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9ubWkuYyBiL2FyY2gvc3BhcmMva2VybmVsL25taS5jCmluZGV4IGE0YmQ3YmEuLjMwMGY4MTAgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL25taS5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL25taS5jCkBAIC0yNzAsOCArMjcwLDYgQEAKIAkJCWF0b21pY19zZXQoJm5taV9hY3RpdmUsIC0xKTsKIAkJfQogCX0KLQlpZiAoIWVycikKLQkJaW5pdF9od19wZXJmX2V2ZW50cygpOwogCiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3BlcmZfZXZlbnQuYyBiL2FyY2gvc3BhcmMva2VybmVsL3BlcmZfZXZlbnQuYwppbmRleCAwZDZkZWI1Li43NjA1Nzg2IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9wZXJmX2V2ZW50LmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvcGVyZl9ldmVudC5jCkBAIC0xMzA3LDIwICsxMzA3LDIzIEBACiAJcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIF9faW5pdCBpbml0X2h3X3BlcmZfZXZlbnRzKHZvaWQpCitpbnQgX19pbml0IGluaXRfaHdfcGVyZl9ldmVudHModm9pZCkKIHsKIAlwcl9pbmZvKCJQZXJmb3JtYW5jZSBldmVudHM6ICIpOwogCiAJaWYgKCFzdXBwb3J0ZWRfcG11KCkpIHsKIAkJcHJfY29udCgiTm8gc3VwcG9ydCBmb3IgUE1VIHR5cGUgJyVzJ1xuIiwgc3BhcmNfcG11X3R5cGUpOwotCQlyZXR1cm47CisJCXJldHVybiAwOwogCX0KIAogCXByX2NvbnQoIlN1cHBvcnRlZCBQTVUgdHlwZSBpcyAnJXMnXG4iLCBzcGFyY19wbXVfdHlwZSk7CiAKLQlwZXJmX3BtdV9yZWdpc3RlcigmcG11KTsKKwlwZXJmX3BtdV9yZWdpc3RlcigmcG11LCAiY3B1IiwgUEVSRl9UWVBFX1JBVyk7CiAJcmVnaXN0ZXJfZGllX25vdGlmaWVyKCZwZXJmX2V2ZW50X25taV9ub3RpZmllcik7CisKKwlyZXR1cm4gMDsKIH0KK2Vhcmx5X2luaXRjYWxsKGluaXRfaHdfcGVyZl9ldmVudHMpOwogCiB2b2lkIHBlcmZfY2FsbGNoYWluX2tlcm5lbChzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKmVudHJ5LAogCQkJICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9wcm9tXzMyLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9wcm9tXzMyLmMKaW5kZXggMGEzN2U4Yy4uMDVmYjI1MyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvcHJvbV8zMi5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3Byb21fMzIuYwpAQCAtMTM2LDE4ICsxMzYsMjkgQEAKIC8qICJuYW1lOnZlbmRvcjpkZXZpY2VAaXJxLGFkZHJsbyIgKi8KIHN0YXRpYyB2b2lkIF9faW5pdCBhbWJhcHBfcGF0aF9jb21wb25lbnQoc3RydWN0IGRldmljZV9ub2RlICpkcCwgY2hhciAqdG1wX2J1ZikKIHsKLQlzdHJ1Y3QgYW1iYV9wcm9tX3JlZ2lzdGVycyAqcmVnczsgdW5zaWduZWQgaW50ICppbnRyOwotCXVuc2lnbmVkIGludCAqZGV2aWNlLCAqdmVuZG9yOworCXN0cnVjdCBhbWJhX3Byb21fcmVnaXN0ZXJzICpyZWdzOworCXVuc2lnbmVkIGludCAqaW50ciwgKmRldmljZSwgKnZlbmRvciwgcmVnMDsKIAlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CisJaW50IGludGVycnVwdCA9IDA7CiAKKwkvKiBJbiBvcmRlciB0byBnZXQgYSB1bmlxdWUgSUQgaW4gdGhlIGRldmljZSB0cmVlIChtdWx0aXBsZSBBTUJBIGRldmljZXMKKwkgKiBtYXkgaGF2ZSB0aGUgc2FtZSBuYW1lKSB0aGUgbm9kZSBudW1iZXIgaXMgcHJpbnRlZAorCSAqLwogCXByb3AgPSBvZl9maW5kX3Byb3BlcnR5KGRwLCAicmVnIiwgTlVMTCk7Ci0JaWYgKCFwcm9wKQotCQlyZXR1cm47Ci0JcmVncyA9IHByb3AtPnZhbHVlOworCWlmICghcHJvcCkgeworCQlyZWcwID0gKHVuc2lnbmVkIGludClkcC0+cGhhbmRsZTsKKwl9IGVsc2UgeworCQlyZWdzID0gcHJvcC0+dmFsdWU7CisJCXJlZzAgPSByZWdzLT5waHlzX2FkZHI7CisJfQorCisJLyogTm90IGFsbCBjb3JlcyBoYXZlIEludGVycnVwdCAqLwogCXByb3AgPSBvZl9maW5kX3Byb3BlcnR5KGRwLCAiaW50ZXJydXB0cyIsIE5VTEwpOwogCWlmICghcHJvcCkKLQkJcmV0dXJuOwotCWludHIgPSBwcm9wLT52YWx1ZTsKKwkJaW50ciA9ICZpbnRlcnJ1cHQ7IC8qIElSUTAgZG9lcyBub3QgZXhpc3QgKi8KKwllbHNlCisJCWludHIgPSBwcm9wLT52YWx1ZTsKKwogCXByb3AgPSBvZl9maW5kX3Byb3BlcnR5KGRwLCAidmVuZG9yIiwgTlVMTCk7CiAJaWYgKCFwcm9wKQogCQlyZXR1cm47CkBAIC0xNTksNyArMTcwLDcgQEAKIAogCXNwcmludGYodG1wX2J1ZiwgIiVzOiVkOiVkQCV4LCV4IiwKIAkJZHAtPm5hbWUsICp2ZW5kb3IsICpkZXZpY2UsCi0JCSppbnRyLCByZWdzLT5waHlzX2FkZHIpOworCQkqaW50ciwgcmVnMCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBfX2J1aWxkX3BhdGhfY29tcG9uZW50KHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAsIGNoYXIgKnRtcF9idWYpCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9zZXR1cF8zMi5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvc2V0dXBfMzIuYwppbmRleCBiMjJjZTYxLi42NDhmMjE2IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zZXR1cF8zMi5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3NldHVwXzMyLmMKQEAgLTE4NSw3ICsxODUsNiBAQAogCiBleHRlcm4gdm9pZCBzdW40Y19wcm9iZV92YWModm9pZCk7CiBleHRlcm4gY2hhciBjcHV0eXB2YWw7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBzdGFydCwgZW5kOwogCiBleHRlcm4gdW5zaWduZWQgc2hvcnQgcm9vdF9mbGFnczsKIGV4dGVybiB1bnNpZ25lZCBzaG9ydCByb290X2RldjsKQEAgLTIxMCw3ICsyMDksNyBAQAogCWludCBpOwogCXVuc2lnbmVkIGxvbmcgaGlnaGVzdF9wYWRkcjsKIAotCXNwYXJjX3R0YWJsZSA9IChzdHJ1Y3QgdHRfZW50cnkgKikgJnN0YXJ0OworCXNwYXJjX3R0YWJsZSA9IChzdHJ1Y3QgdHRfZW50cnkgKikgJnRyYXBiYXNlOwogCiAJLyogSW5pdGlhbGl6ZSBQUk9NIGNvbnNvbGUgYW5kIGNvbW1hbmQgbGluZS4gKi8KIAkqY21kbGluZV9wID0gcHJvbV9nZXRib290YXJncygpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9tbS9zdW40Yy5jIGIvYXJjaC9zcGFyYy9tbS9zdW40Yy5jCmluZGV4IGRkZDBkODYuLmI1MTM3Y2MgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvbW0vc3VuNGMuYworKysgYi9hcmNoL3NwYXJjL21tL3N1bjRjLmMKQEAgLTQzNSwxNiArNDM1LDE0IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzdW40Y19pbml0X3NzMl9jYWNoZV9idWcodm9pZCkKIHsKLQlleHRlcm4gdW5zaWduZWQgbG9uZyBzdGFydDsKLQogCWlmICgoaWRwcm9tLT5pZF9tYWNodHlwZSA9PSAoU01fU1VONEMgfCBTTV80Q19TUzIpKSB8fAogCSAgICAoaWRwcm9tLT5pZF9tYWNodHlwZSA9PSAoU01fU1VONEMgfCBTTV80Q19JUFgpKSB8fAogCSAgICAoaWRwcm9tLT5pZF9tYWNodHlwZSA9PSAoU01fU1VONEMgfCBTTV80Q19FTEMpKSkgewogCQkvKiBXaGVlLi4gKi8KIAkJcHJpbnRrKCJTUzIgY2FjaGUgYnVnIGRldGVjdGVkLCB1bmNhY2hpbmcgdHJhcCB0YWJsZSBwYWdlXG4iKTsKLQkJc3VuNGNfZmx1c2hfcGFnZSgodW5zaWduZWQgaW50KSAmc3RhcnQpOwotCQlzdW40Y19wdXRfcHRlKCgodW5zaWduZWQgbG9uZykgJnN0YXJ0KSwKLQkJCShzdW40Y19nZXRfcHRlKCh1bnNpZ25lZCBsb25nKSAmc3RhcnQpIHwgX1NVTjRDX1BBR0VfTk9DQUNIRSkpOworCQlzdW40Y19mbHVzaF9wYWdlKCh1bnNpZ25lZCBpbnQpICZfc3RhcnQpOworCQlzdW40Y19wdXRfcHRlKCgodW5zaWduZWQgbG9uZykgJl9zdGFydCksCisJCQkoc3VuNGNfZ2V0X3B0ZSgodW5zaWduZWQgbG9uZykgJl9zdGFydCkgfCBfU1VONENfUEFHRV9OT0NBQ0hFKSk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL3Byb20vTWFrZWZpbGUgYi9hcmNoL3NwYXJjL3Byb20vTWFrZWZpbGUKaW5kZXggODE2YzBmYS4uODI4N2JiZSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9wcm9tL01ha2VmaWxlCisrKyBiL2FyY2gvc3BhcmMvcHJvbS9NYWtlZmlsZQpAQCAtNSwxMiArNSwxMCBAQAogY2NmbGFncyA6PSAtV2Vycm9yCiAKIGxpYi15ICAgICAgICAgICAgICAgICA6PSBib290c3RyXyQoQklUUykubwotbGliLSQoQ09ORklHX1NQQVJDMzIpICs9IGRldm1hcC5vCiBsaWIteSAgICAgICAgICAgICAgICAgKz0gaW5pdF8kKEJJVFMpLm8KIGxpYi0kKENPTkZJR19TUEFSQzMyKSArPSBtZW1vcnkubwogbGliLXkgICAgICAgICAgICAgICAgICs9IG1pc2NfJChCSVRTKS5vCiBsaWItJChDT05GSUdfU1BBUkMzMikgKz0gbXAubwotbGliLSQoQ09ORklHX1NQQVJDMzIpICs9IHBhbGxvYy5vCiBsaWItJChDT05GSUdfU1BBUkMzMikgKz0gcmFuZ2VzLm8KIGxpYi0kKENPTkZJR19TUEFSQzMyKSArPSBzZWdtZW50Lm8KIGxpYi15ICAgICAgICAgICAgICAgICArPSBjb25zb2xlXyQoQklUUykubwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9wcm9tL2Jvb3RzdHJfMzIuYyBiL2FyY2gvc3BhcmMvcHJvbS9ib290c3RyXzMyLmMKaW5kZXggOTE2ODMxZC4uZjVlYzMyZSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9wcm9tL2Jvb3RzdHJfMzIuYworKysgYi9hcmNoL3NwYXJjL3Byb20vYm9vdHN0cl8zMi5jCkBAIC0yOSw3ICsyOSw4IEBACiAJCS8qIFN0YXJ0IGZyb20gMSBhbmQgZ28gb3ZlciBmZCgwLDAsMClrZXJuZWwgKi8KIAkJZm9yKGl0ZXIgPSAxOyBpdGVyIDwgODsgaXRlcisrKSB7CiAJCQlhcmcgPSAoKihyb212ZWMtPnB2X3YwYm9vdGFyZ3MpKS0+YXJndltpdGVyXTsKLQkJCWlmKGFyZyA9PSAwKSBicmVhazsKKwkJCWlmIChhcmcgPT0gTlVMTCkKKwkJCQlicmVhazsKIAkJCXdoaWxlKCphcmcgIT0gMCkgewogCQkJCS8qIExlYXZlIHBsYWNlIGZvciBzcGFjZSBhbmQgbnVsbC4gKi8KIAkJCQlpZihjcCA+PSBiYXJnX2J1ZiArIEJBUkdfTEVOLTIpewpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9wcm9tL2NvbnNvbGVfMzIuYyBiL2FyY2gvc3BhcmMvcHJvbS9jb25zb2xlXzMyLmMKaW5kZXggNDg4NjMxMC4uYjA1ZTNkYiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9wcm9tL2NvbnNvbGVfMzIuYworKysgYi9hcmNoL3NwYXJjL3Byb20vY29uc29sZV8zMi5jCkBAIC0yNywxMyArMjcsMTQgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJvbV9sb2NrLCBmbGFncyk7CiAJc3dpdGNoKHByb21fdmVycykgewogCWNhc2UgUFJPTV9WMDoKLQkJaSA9ICgqKHJvbXZlYy0+cHZfbmJwdXRjaGFyKSkoKmJ1Zik7CisJCWlmICgoKihyb212ZWMtPnB2X25icHV0Y2hhcikpKCpidWYpKQorCQkJaSA9IDE7CiAJCWJyZWFrOwogCWNhc2UgUFJPTV9WMjoKIAljYXNlIFBST01fVjM6CiAJCWlmICgoKihyb212ZWMtPnB2X3YyZGV2b3BzKS52Ml9kZXZfd3JpdGUpKCpyb212ZWMtPnB2X3YyYm9vdGFyZ3MuZmRfc3Rkb3V0LAogCQkJCQkJCSAgYnVmLCAweDEpID09IDEpCi0JCQlpID0gMDsKKwkJCWkgPSAxOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKQEAgLTQ3LDcgKzQ4LDcgQEAKIHsKIAl3aGlsZSAobGVuKSB7CiAJCWludCBuID0gcHJvbV9uYnB1dGNoYXIoYnVmKTsKLQkJaWYgKG4pCisJCWlmIChuIDwgMCkKIAkJCWNvbnRpbnVlOwogCQlsZW4tLTsKIAkJYnVmKys7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL3Byb20vY29uc29sZV82NC5jIGIvYXJjaC9zcGFyYy9wcm9tL2NvbnNvbGVfNjQuYwppbmRleCBlZDM5ZTc1Li45ZGU2YzhjIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL3Byb20vY29uc29sZV82NC5jCisrKyBiL2FyY2gvc3BhcmMvcHJvbS9jb25zb2xlXzY0LmMKQEAgLTEzLDggKzEzLDYgQEAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAKLWV4dGVybiBpbnQgcHJvbV9zdGRpbiwgcHJvbV9zdGRvdXQ7Ci0KIHN0YXRpYyBpbnQgX19wcm9tX2NvbnNvbGVfd3JpdGVfYnVmKGNvbnN0IGNoYXIgKmJ1ZiwgaW50IGxlbikKIHsKIAl1bnNpZ25lZCBsb25nIGFyZ3NbN107CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL3Byb20vZGV2bWFwLmMgYi9hcmNoL3NwYXJjL3Byb20vZGV2bWFwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2MTU3ZDIuLjAwMDAwMDAKLS0tIGEvYXJjaC9zcGFyYy9wcm9tL2Rldm1hcC5jCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyoKLSAqIHByb21kZXZtYXAuYzogIE1hcCBkZXZpY2UvSU8gYXJlYXMgdG8gdmlydHVhbCBhZGRyZXNzZXMuCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk1IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotCi0jaW5jbHVkZSA8YXNtL29wZW5wcm9tLmg+Ci0jaW5jbHVkZSA8YXNtL29wbGliLmg+Ci0KLWV4dGVybiB2b2lkIHJlc3RvcmVfY3VycmVudCh2b2lkKTsKLQotLyogSnVzdCBsaWtlIHRoZSByb3V0aW5lcyBpbiBwYWxsb2MuYywgdGhlc2Ugc2hvdWxkIG5vdCBiZSB1c2VkCi0gKiBieSB0aGUga2VybmVsIGF0IGFsbC4gIEJvb3Rsb2FkZXIgZmFjaWxpdHkgbWFpbmx5LiAgQW5kIGFnYWluLAotICogdGhpcyBpcyBvbmx5IGF2YWlsYWJsZSBvbiBWMiBwcm9tcyBhbmQgYWJvdmUuCi0gKi8KLQotLyogTWFwIHBoeXNpY2FsIGRldmljZSBhZGRyZXNzICdwYWRkcicgaW4gSU8gc3BhY2UgJ2lvcycgb2Ygc2l6ZQotICogJ251bV9ieXRlcycgdG8gYSB2aXJ0dWFsIGFkZHJlc3MsIHdpdGggJ3ZoaW50JyBiZWluZyBhIGhpbnQgdG8KLSAqIHRoZSBwcm9tIGFzIHRvIHdoZXJlIHlvdSB3b3VsZCBwcmVmZXIgdGhlIG1hcHBpbmcuICBXZSByZXR1cm4KLSAqIHdoZXJlIHRoZSBwcm9tIGFjdHVhbGx5IG1hcHBlZCBpdC4KLSAqLwotY2hhciAqCi1wcm9tX21hcGlvKGNoYXIgKnZoaW50LCBpbnQgaW9zLCB1bnNpZ25lZCBpbnQgcGFkZHIsIHVuc2lnbmVkIGludCBudW1fYnl0ZXMpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQljaGFyICpyZXQ7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJvbV9sb2NrLCBmbGFncyk7Ci0JaWYoKG51bV9ieXRlcyA9PSAwKSB8fCAocGFkZHIgPT0gMCkpIHJldCA9IChjaGFyICopIDB4MDsKLQllbHNlCi0JcmV0ID0gKCoocm9tdmVjLT5wdl92MmRldm9wcy52Ml9kdW1iX21tYXApKSh2aGludCwgaW9zLCBwYWRkciwKLQkJCQkJCSAgICBudW1fYnl0ZXMpOwotCXJlc3RvcmVfY3VycmVudCgpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByb21fbG9jaywgZmxhZ3MpOwotCXJldHVybiByZXQ7Ci19Ci0KLS8qIFVubWFwIGFuIElPL2RldmljZSBhcmVhIHRoYXQgd2FzIG1hcHBlZCB1c2luZyB0aGUgYWJvdmUgcm91dGluZS4gKi8KLXZvaWQKLXByb21fdW5tYXBpbyhjaGFyICp2YWRkciwgdW5zaWduZWQgaW50IG51bV9ieXRlcykKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYobnVtX2J5dGVzID09IDB4MCkgcmV0dXJuOwotCXNwaW5fbG9ja19pcnFzYXZlKCZwcm9tX2xvY2ssIGZsYWdzKTsKLQkoKihyb212ZWMtPnB2X3YyZGV2b3BzLnYyX2R1bWJfbXVubWFwKSkodmFkZHIsIG51bV9ieXRlcyk7Ci0JcmVzdG9yZV9jdXJyZW50KCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJvbV9sb2NrLCBmbGFncyk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL3Byb20vaW5pdF82NC5jIGIvYXJjaC9zcGFyYy9wcm9tL2luaXRfNjQuYwppbmRleCAzZmY5MTFlLi45YzZhYzRiIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL3Byb20vaW5pdF82NC5jCisrKyBiL2FyY2gvc3BhcmMvcHJvbS9pbml0XzY0LmMKQEAgLTE4LDcgKzE4LDcgQEAKIGNoYXIgcHJvbV92ZXJzaW9uWzgwXTsKIAogLyogVGhlIHJvb3Qgbm9kZSBvZiB0aGUgcHJvbSBkZXZpY2UgdHJlZS4gKi8KLWludCBwcm9tX3N0ZGluLCBwcm9tX3N0ZG91dDsKK2ludCBwcm9tX3N0ZG91dDsKIHBoYW5kbGUgcHJvbV9jaG9zZW5fbm9kZTsKIAogLyogWW91IG11c3QgY2FsbCBwcm9tX2luaXQoKSBiZWZvcmUgeW91IGF0dGVtcHQgdG8gdXNlIGFueSBvZiB0aGUKQEAgLTM4LDcgKzM4LDYgQEAKIAlpZiAoIXByb21fY2hvc2VuX25vZGUgfHwgcHJvbV9jaG9zZW5fbm9kZSA9PSAtMSkKIAkJcHJvbV9oYWx0KCk7CiAKLQlwcm9tX3N0ZGluID0gcHJvbV9nZXRpbnQocHJvbV9jaG9zZW5fbm9kZSwgInN0ZGluIik7CiAJcHJvbV9zdGRvdXQgPSBwcm9tX2dldGludChwcm9tX2Nob3Nlbl9ub2RlLCAic3Rkb3V0Iik7CiAKIAlub2RlID0gcHJvbV9maW5kZGV2aWNlKCIvb3BlbnByb20iKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvcHJvbS9taXNjXzMyLmMgYi9hcmNoL3NwYXJjL3Byb20vbWlzY18zMi5jCmluZGV4IDRkNjFjNTQuLjhjMjc4YzMgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvcHJvbS9taXNjXzMyLmMKKysrIGIvYXJjaC9zcGFyYy9wcm9tL21pc2NfMzIuYwpAQCAtNzAsNyArNzAsNyBAQAogLyogRHJvcCBpbnRvIHRoZSBwcm9tLCBidXQgY29tcGxldGVseSB0ZXJtaW5hdGUgdGhlIHByb2dyYW0uCiAgKiBObyBjaGFuY2Ugb2YgY29udGludWluZy4KICAqLwotdm9pZAordm9pZCBfX25vcmV0dXJuCiBwcm9tX2hhbHQodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9wcm9tL21wLmMgYi9hcmNoL3NwYXJjL3Byb20vbXAuYwppbmRleCA0YzRkYzc5Li45N2M0NGM5IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL3Byb20vbXAuYworKysgYi9hcmNoL3NwYXJjL3Byb20vbXAuYwpAQCAtNDEsODEgKzQxLDMgQEAKIAogCXJldHVybiByZXQ7CiB9Ci0KLS8qIFN0b3AgQ1BVIHdpdGggZGV2aWNlIHByb20tdHJlZSBub2RlICdjcHVub2RlJy4KLSAqIFhYWCBBZ2Fpbiwgd2hhdCBkb2VzIHRoZSByZXR1cm4gdmFsdWUgcmVhbGx5IG1lYW4/IFhYWAotICovCi1pbnQKLXByb21fc3RvcGNwdShpbnQgY3B1bm9kZSkKLXsKLQlpbnQgcmV0OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJvbV9sb2NrLCBmbGFncyk7Ci0Jc3dpdGNoKHByb21fdmVycykgewotCWNhc2UgUFJPTV9WMDoKLQljYXNlIFBST01fVjI6Ci0JZGVmYXVsdDoKLQkJcmV0ID0gLTE7Ci0JCWJyZWFrOwotCWNhc2UgUFJPTV9WMzoKLQkJcmV0ID0gKCoocm9tdmVjLT52M19jcHVzdG9wKSkoY3B1bm9kZSk7Ci0JCWJyZWFrOwotCX07Ci0JcmVzdG9yZV9jdXJyZW50KCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJvbV9sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0vKiBNYWtlIENQVSB3aXRoIGRldmljZSBwcm9tLXRyZWUgbm9kZSAnY3B1bm9kZScgaWRsZS4KLSAqIFhYWCBSZXR1cm4gdmFsdWUsIGFueW9uZT8gWFhYCi0gKi8KLWludAotcHJvbV9pZGxlY3B1KGludCBjcHVub2RlKQotewotCWludCByZXQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwcm9tX2xvY2ssIGZsYWdzKTsKLQlzd2l0Y2gocHJvbV92ZXJzKSB7Ci0JY2FzZSBQUk9NX1YwOgotCWNhc2UgUFJPTV9WMjoKLQlkZWZhdWx0OgotCQlyZXQgPSAtMTsKLQkJYnJlYWs7Ci0JY2FzZSBQUk9NX1YzOgotCQlyZXQgPSAoKihyb212ZWMtPnYzX2NwdWlkbGUpKShjcHVub2RlKTsKLQkJYnJlYWs7Ci0JfTsKLQlyZXN0b3JlX2N1cnJlbnQoKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcm9tX2xvY2ssIGZsYWdzKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLS8qIFJlc3VtZSB0aGUgZXhlY3V0aW9uIG9mIENQVSB3aXRoIG5vZGVpZCAnY3B1bm9kZScuCi0gKiBYWFggQ29tZSBvbiwgc29tZWJvZHkgaGFzIHRvIGtub3cuLi4gWFhYCi0gKi8KLWludAotcHJvbV9yZXN0YXJ0Y3B1KGludCBjcHVub2RlKQotewotCWludCByZXQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwcm9tX2xvY2ssIGZsYWdzKTsKLQlzd2l0Y2gocHJvbV92ZXJzKSB7Ci0JY2FzZSBQUk9NX1YwOgotCWNhc2UgUFJPTV9WMjoKLQlkZWZhdWx0OgotCQlyZXQgPSAtMTsKLQkJYnJlYWs7Ci0JY2FzZSBQUk9NX1YzOgotCQlyZXQgPSAoKihyb212ZWMtPnYzX2NwdXJlc3VtZSkpKGNwdW5vZGUpOwotCQlicmVhazsKLQl9OwotCXJlc3RvcmVfY3VycmVudCgpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByb21fbG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIHJldDsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvcHJvbS9wYWxsb2MuYyBiL2FyY2gvc3BhcmMvcHJvbS9wYWxsb2MuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmUyYTg4Yi4uMDAwMDAwMAotLS0gYS9hcmNoL3NwYXJjL3Byb20vcGFsbG9jLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0vKgotICogcGFsbG9jLmM6ICBNZW1vcnkgYWxsb2NhdGlvbiBmcm9tIHRoZSBTdW4gUFJPTS4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQotICovCi0KLSNpbmNsdWRlIDxhc20vb3BlbnByb20uaD4KLSNpbmNsdWRlIDxhc20vb3BsaWIuaD4KLQotLyogWW91IHNob3VsZCBub3QgY2FsbCB0aGVzZSByb3V0aW5lcyBhZnRlciBtZW1vcnkgbWFuYWdlbWVudAotICogaGFzIGJlZW4gaW5pdGlhbGl6ZWQgaW4gdGhlIGtlcm5lbCwgaWYgZmFjdCB5b3Ugc2hvdWxkIG5vdAotICogdXNlIHRoZXNlIGlmIGF0IGFsbCBwb3NzaWJsZSBpbiB0aGUga2VybmVsLiAgVGhleSBhcmUgbWFpbmx5Ci0gKiB0byBiZSB1c2VkIGZvciBhIGJvb3Rsb2FkZXIgZm9yIHRlbXBvcmFyeSBhbGxvY2F0aW9ucyB3aGljaAotICogaXQgd2lsbCBmcmVlIGJlZm9yZSBqdW1waW5nIGludG8gdGhlIGtlcm5lbCBpdCBoYXMgbG9hZGVkLgotICoKLSAqIEFsc28sIHRoZXNlIHJvdXRpbmVzIGRvbid0IHdvcmsgb24gVjAgcHJvbXMsIG9ubHkgVjIgYW5kIGxhdGVyLgotICovCi0KLS8qIEFsbG9jYXRlIGEgY2h1bmsgb2YgbWVtb3J5IG9mIHNpemUgJ251bV9ieXRlcycgZ2l2aW5nIGEgc3VnZ2VzdGlvbgotICogb2YgdmlydHVhbF9oaW50IGFzIHRoZSBwcmVmZXJyZWQgdmlydHVhbCBiYXNlIGFkZHJlc3Mgb2YgdGhpcyBjaHVuay4KLSAqIFRoZXJlIGFyZSBubyBndWFyYW50ZWVzIHRoYXQgeW91IHdpbGwgZ2V0IHRoZSBhbGxvY2F0aW9uLCBvciB0aGF0Ci0gKiB0aGUgcHJvbSB3aWxsIGFiaWRlIGJ5IHlvdXIgImhpbnQiLiAgU28gY2hlY2sgeW91ciByZXR1cm4gdmFsdWUuCi0gKi8KLWNoYXIgKgotcHJvbV9hbGxvYyhjaGFyICp2aXJ0dWFsX2hpbnQsIHVuc2lnbmVkIGludCBudW1fYnl0ZXMpCi17Ci0JaWYocHJvbV92ZXJzID09IFBST01fVjApIHJldHVybiAoY2hhciAqKSAweDA7Ci0JaWYobnVtX2J5dGVzID09IDB4MCkgcmV0dXJuIChjaGFyICopIDB4MDsKLQlyZXR1cm4gKCoocm9tdmVjLT5wdl92MmRldm9wcy52Ml9kdW1iX21lbV9hbGxvYykpKHZpcnR1YWxfaGludCwgbnVtX2J5dGVzKTsKLX0KLQotLyogRnJlZSBhIHByZXZpb3VzbHkgYWxsb2NhdGVkIGNodW5rIGJhY2sgdG8gdGhlIHByb20gYXQgdmlydHVhbCBhZGRyZXNzCi0gKiAndmFkZHInIG9mIHNpemUgJ251bV9ieXRlcycuICBOT1RFOiBUaGlzIHZhZGRyIGlzIG5vdCB0aGUgaGludCB5b3UKLSAqIHVzZWQgZm9yIHRoZSBhbGxvY2F0aW9uLCBidXQgdGhlIHZpcnR1YWwgYWRkcmVzcyB0aGUgcHJvbSBhY3R1YWxseQotICogcmV0dXJuZWQgdG8geW91LiAgVGhleSBtYXkgYmUgaGF2ZSBiZWVuIHRoZSBzYW1lLCB0aGV5IG1heSBoYXZlIG5vdCwKLSAqIGRvZXNuJ3QgbWF0dGVyLgotICovCi12b2lkCi1wcm9tX2ZyZWUoY2hhciAqdmFkZHIsIHVuc2lnbmVkIGludCBudW1fYnl0ZXMpCi17Ci0JaWYoKHByb21fdmVycyA9PSBQUk9NX1YwKSB8fCAobnVtX2J5dGVzID09IDB4MCkpIHJldHVybjsKLQkoKihyb212ZWMtPnB2X3YyZGV2b3BzLnYyX2R1bWJfbWVtX2ZyZWUpKSh2YWRkciwgbnVtX2J5dGVzKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvcHJvbS9yYW5nZXMuYyBiL2FyY2gvc3BhcmMvcHJvbS9yYW5nZXMuYwppbmRleCA1NDFmYzgyLi4wODU3YWE5IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL3Byb20vcmFuZ2VzLmMKKysrIGIvYXJjaC9zcGFyYy9wcm9tL3Jhbmdlcy5jCkBAIC0xMyw4ICsxMyw4IEBACiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCi1zdHJ1Y3QgbGludXhfcHJvbV9yYW5nZXMgcHJvbWxpYl9vYmlvX3Jhbmdlc1tQUk9NUkVHX01BWF07Ci1pbnQgbnVtX29iaW9fcmFuZ2VzOworc3RhdGljIHN0cnVjdCBsaW51eF9wcm9tX3JhbmdlcyBwcm9tbGliX29iaW9fcmFuZ2VzW1BST01SRUdfTUFYXTsKK3N0YXRpYyBpbnQgbnVtX29iaW9fcmFuZ2VzOwogCiAvKiBBZGp1c3QgcmVnaXN0ZXIgdmFsdWVzIGJhc2VkIHVwb24gdGhlIHJhbmdlcyBwYXJhbWV0ZXJzLiAqLwogc3RhdGljIHZvaWQKQEAgLTM1LDcgKzM1LDcgQEAKIAl9CiB9CiAKLXZvaWQKK3N0YXRpYyB2b2lkCiBwcm9tX2FkanVzdF9yYW5nZXMoc3RydWN0IGxpbnV4X3Byb21fcmFuZ2VzICpyYW5nZXMxLCBpbnQgbnJhbmdlczEsCiAJCSAgIHN0cnVjdCBsaW51eF9wcm9tX3JhbmdlcyAqcmFuZ2VzMiwgaW50IG5yYW5nZXMyKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9wcm9tL3RyZWVfMzIuYyBiL2FyY2gvc3BhcmMvcHJvbS90cmVlXzMyLmMKaW5kZXggNTM1ZTJlNi4uYmM4ZTRjYiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9wcm9tL3RyZWVfMzIuYworKysgYi9hcmNoL3NwYXJjL3Byb20vdHJlZV8zMi5jCkBAIC0yMCw3ICsyMCw3IEBACiBzdGF0aWMgY2hhciBwcm9tbGliX2J1ZlsxMjhdOwogCiAvKiBJbnRlcm5hbCB2ZXJzaW9uIG9mIHByb21fZ2V0Y2hpbGQgdGhhdCBkb2VzIG5vdCBhbHRlciByZXR1cm4gdmFsdWVzLiAqLwotcGhhbmRsZSBfX3Byb21fZ2V0Y2hpbGQocGhhbmRsZSBub2RlKQorc3RhdGljIHBoYW5kbGUgX19wcm9tX2dldGNoaWxkKHBoYW5kbGUgbm9kZSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXBoYW5kbGUgY25vZGU7CkBAIC01Miw3ICs1Miw3IEBACiBFWFBPUlRfU1lNQk9MKHByb21fZ2V0Y2hpbGQpOwogCiAvKiBJbnRlcm5hbCB2ZXJzaW9uIG9mIHByb21fZ2V0c2libGluZyB0aGF0IGRvZXMgbm90IGFsdGVyIHJldHVybiB2YWx1ZXMuICovCi1waGFuZGxlIF9fcHJvbV9nZXRzaWJsaW5nKHBoYW5kbGUgbm9kZSkKK3N0YXRpYyBwaGFuZGxlIF9fcHJvbV9nZXRzaWJsaW5nKHBoYW5kbGUgbm9kZSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXBoYW5kbGUgY25vZGU7CkBAIC0xNzcsMjAgKzE3Nyw2IEBACiBFWFBPUlRfU1lNQk9MKHByb21fZ2V0c3RyaW5nKTsKIAogCi0vKiBEb2VzIHRoZSBkZXZpY2UgYXQgbm9kZSAnbm9kZScgaGF2ZSBuYW1lICduYW1lJz8KLSAqIFlFUyA9IDEgICBOTyA9IDAKLSAqLwotaW50IHByb21fbm9kZW1hdGNoKHBoYW5kbGUgbm9kZSwgY2hhciAqbmFtZSkKLXsKLQlpbnQgZXJyb3I7Ci0KLQlzdGF0aWMgY2hhciBuYW1lYnVmWzEyOF07Ci0JZXJyb3IgPSBwcm9tX2dldHByb3BlcnR5KG5vZGUsICJuYW1lIiwgbmFtZWJ1Ziwgc2l6ZW9mKG5hbWVidWYpKTsKLQlpZiAoZXJyb3IgPT0gLTEpIHJldHVybiAwOwotCWlmKHN0cmNtcChuYW1lYnVmLCBuYW1lKSA9PSAwKSByZXR1cm4gMTsKLQlyZXR1cm4gMDsKLX0KLQogLyogU2VhcmNoIHNpYmxpbmdzIGF0ICdub2RlX3N0YXJ0JyBmb3IgYSBub2RlIHdpdGggbmFtZQogICogJ25vZGVuYW1lJy4gIFJldHVybiBub2RlIGlmIHN1Y2Nlc3NmdWwsIHplcm8gaWYgbm90LgogICovCkBAIC0yMTQsNyArMjAwLDcgQEAKIEVYUE9SVF9TWU1CT0wocHJvbV9zZWFyY2hzaWJsaW5ncyk7CiAKIC8qIEludGVyYWwgdmVyc2lvbiBvZiBuZXh0cHJvcCB0aGF0IGRvZXMgbm90IGFsdGVyIHJldHVybiB2YWx1ZXMuICovCi1jaGFyICpfX3Byb21fbmV4dHByb3AocGhhbmRsZSBub2RlLCBjaGFyICogb3Byb3ApCitzdGF0aWMgY2hhciAqX19wcm9tX25leHRwcm9wKHBoYW5kbGUgbm9kZSwgY2hhciAqIG9wcm9wKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJY2hhciAqcHJvcDsKQEAgLTIyNywxNyArMjEzLDYgQEAKIAlyZXR1cm4gcHJvcDsKIH0KIAotLyogUmV0dXJuIHRoZSBmaXJzdCBwcm9wZXJ0eSBuYW1lIGZvciBub2RlICdub2RlJy4gKi8KLS8qIGJ1ZmZlciBpcyB1bnVzZWQgYXJndW1lbnQsIGJ1dCBhcyB2OSB1c2VzIGl0LCB3ZSBuZWVkIHRvIGhhdmUgdGhlIHNhbWUgaW50ZXJmYWNlICovCi1jaGFyICpwcm9tX2ZpcnN0cHJvcChwaGFuZGxlIG5vZGUsIGNoYXIgKmJ1ZmVyKQotewotCWlmIChub2RlID09IDAgfHwgbm9kZSA9PSAtMSkKLQkJcmV0dXJuICIiOwotCi0JcmV0dXJuIF9fcHJvbV9uZXh0cHJvcChub2RlLCAiIik7Ci19Ci1FWFBPUlRfU1lNQk9MKHByb21fZmlyc3Rwcm9wKTsKLQogLyogUmV0dXJuIHRoZSBwcm9wZXJ0eSB0eXBlIHN0cmluZyBhZnRlciBwcm9wZXJ0eSB0eXBlICdvcHJvcCcKICAqIGF0IG5vZGUgJ25vZGUnIC4gIFJldHVybnMgZW1wdHkgc3RyaW5nIGlmIG5vIG1vcmUKICAqIHByb3BlcnR5IHR5cGVzIGZvciB0aGlzIG5vZGUuCkBAIC0yOTksMTkgKzI3NCw2IEBACiB9CiBFWFBPUlRfU1lNQk9MKHByb21fZmluZGRldmljZSk7CiAKLWludCBwcm9tX25vZGVfaGFzX3Byb3BlcnR5KHBoYW5kbGUgbm9kZSwgY2hhciAqcHJvcCkKLXsKLQljaGFyICpjdXJyZW50X3Byb3BlcnR5ID0gIiI7Ci0KLQlkbyB7Ci0JCWN1cnJlbnRfcHJvcGVydHkgPSBwcm9tX25leHRwcm9wKG5vZGUsIGN1cnJlbnRfcHJvcGVydHksIE5VTEwpOwotCQlpZighc3RyY21wKGN1cnJlbnRfcHJvcGVydHksIHByb3ApKQotCQkgICByZXR1cm4gMTsKLQl9IHdoaWxlICgqY3VycmVudF9wcm9wZXJ0eSk7Ci0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MKHByb21fbm9kZV9oYXNfcHJvcGVydHkpOwotCiAvKiBTZXQgcHJvcGVydHkgJ3BuYW1lJyBhdCBub2RlICdub2RlJyB0byB2YWx1ZSAndmFsdWUnIHdoaWNoIGhhcyBhIGxlbmd0aAogICogb2YgJ3NpemUnIGJ5dGVzLiAgUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhlIHByb20gYWNjZXB0ZWQuCiAgKi8KQEAgLTMyMCw4ICsyODIsMTAgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQ7CiAKLQlpZihzaXplID09IDApIHJldHVybiAwOwotCWlmKChwbmFtZSA9PSAwKSB8fCAodmFsdWUgPT0gMCkpIHJldHVybiAwOworCWlmIChzaXplID09IDApCisJCXJldHVybiAwOworCWlmICgocG5hbWUgPT0gTlVMTCkgfHwgKHZhbHVlID09IE5VTEwpKQorCQlyZXR1cm4gMDsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJvbV9sb2NrLCBmbGFncyk7CiAJcmV0ID0gcHJvbV9ub2Rlb3BzLT5ub19zZXRwcm9wKG5vZGUsIHBuYW1lLCB2YWx1ZSwgc2l6ZSk7CiAJcmVzdG9yZV9jdXJyZW50KCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9LY29uZmlnIGIvYXJjaC94ODYvS2NvbmZpZwppbmRleCBlMzMwZGEyLi5iNmZjY2IwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9LY29uZmlnCisrKyBiL2FyY2gveDg2L0tjb25maWcKQEAgLTM3Nyw2ICszNzcsMTggQEAKIAogCSAgSWYgdW5zdXJlLCBjaG9vc2UgIlBDLWNvbXBhdGlibGUiIGluc3RlYWQuCiAKK2NvbmZpZyBYODZfSU5URUxfQ0UKKwlib29sICJDRTQxMDAgVFYgcGxhdGZvcm0iCisJZGVwZW5kcyBvbiBQQ0kKKwlkZXBlbmRzIG9uIFBDSV9HT0RJUkVDVAorCWRlcGVuZHMgb24gWDg2XzMyCisJZGVwZW5kcyBvbiBYODZfRVhURU5ERURfUExBVEZPUk0KKwlzZWxlY3QgWDg2X1JFQk9PVEZJWFVQUworCS0tLWhlbHAtLS0KKwkgIFNlbGVjdCBmb3IgdGhlIEludGVsIENFIG1lZGlhIHByb2Nlc3NvciAoQ0U0MTAwKSBTT0MuCisJICBUaGlzIG9wdGlvbiBjb21waWxlcyBpbiBzdXBwb3J0IGZvciB0aGUgQ0U0MTAwIFNPQyBmb3Igc2V0dG9wCisJICBib3hlcyBhbmQgbWVkaWEgZGV2aWNlcy4KKwogY29uZmlnIFg4Nl9NUlNUCiAgICAgICAgYm9vbCAiTW9vcmVzdG93biBNSUQgcGxhdGZvcm0iCiAJZGVwZW5kcyBvbiBQQ0kKQEAgLTM4NSw2ICszOTcsMTAgQEAKIAlkZXBlbmRzIG9uIFg4Nl9FWFRFTkRFRF9QTEFURk9STQogCWRlcGVuZHMgb24gWDg2X0lPX0FQSUMKIAlzZWxlY3QgQVBCX1RJTUVSCisJc2VsZWN0IEkyQworCXNlbGVjdCBTUEkKKwlzZWxlY3QgSU5URUxfU0NVX0lQQworCXNlbGVjdCBYODZfUExBVEZPUk1fREVWSUNFUwogCS0tLWhlbHAtLS0KIAkgIE1vb3Jlc3Rvd24gaXMgSW50ZWwncyBMb3cgUG93ZXIgSW50ZWwgQXJjaGl0ZWN0dXJlIChMUElBKSBiYXNlZCBNb2JsaW4KIAkgIEludGVybmV0IERldmljZShNSUQpIHBsYXRmb3JtLiBNb29yZXN0b3duIGNvbnNpc3RzIG9mIHR3byBjaGlwczoKQEAgLTQ2Niw2ICs0ODIsMTkgQEAKIAkgIFN1cHBvcnQgZm9yIFVuaXN5cyBFUzcwMDAgc3lzdGVtcy4gIFNheSAnWScgaGVyZSBpZiB0aGlzIGtlcm5lbCBpcwogCSAgc3VwcG9zZWQgdG8gcnVuIG9uIGFuIElBMzItYmFzZWQgVW5pc3lzIEVTNzAwMCBzeXN0ZW0uCiAKK2NvbmZpZyBYODZfMzJfSVJJUworCXRyaXN0YXRlICJFdXJvYnJhaWxsZS9JcmlzIHBvd2Vyb2ZmIG1vZHVsZSIKKwlkZXBlbmRzIG9uIFg4Nl8zMgorCS0tLWhlbHAtLS0KKwkgIFRoZSBJcmlzIG1hY2hpbmVzIGZyb20gRXVyb0JyYWlsbGUgZG8gbm90IGhhdmUgQVBNIG9yIEFDUEkgc3VwcG9ydAorCSAgdG8gc2h1dCB0aGVtc2VsdmVzIGRvd24gcHJvcGVybHkuICBBIHNwZWNpYWwgSS9PIHNlcXVlbmNlIGlzCisJICBuZWVkZWQgdG8gZG8gc28sIHdoaWNoIGlzIHdoYXQgdGhpcyBtb2R1bGUgZG9lcyBhdAorCSAga2VybmVsIHNodXRkb3duLgorCisJICBUaGlzIGlzIG9ubHkgZm9yIElyaXMgbWFjaGluZXMgZnJvbSBFdXJvQnJhaWxsZS4KKworCSAgSWYgdW51c2VkLCBzYXkgTi4KKwogY29uZmlnIFNDSEVEX09NSVRfRlJBTUVfUE9JTlRFUgogCWRlZl9ib29sIHkKIAlwcm9tcHQgIlNpbmdsZS1kZXB0aCBXQ0hBTiBvdXRwdXQiCkBAIC0xMTQxLDE2ICsxMTcwLDE2IEBACiBjb21tZW50ICJOVU1BIChTdW1taXQpIHJlcXVpcmVzIFNNUCwgNjRHQiBoaWdobWVtIHN1cHBvcnQsIEFDUEkiCiAJZGVwZW5kcyBvbiBYODZfMzIgJiYgWDg2X1NVTU1JVCAmJiAoIUhJR0hNRU02NEcgfHwgIUFDUEkpCiAKLWNvbmZpZyBLOF9OVU1BCitjb25maWcgQU1EX05VTUEKIAlkZWZfYm9vbCB5CiAJcHJvbXB0ICJPbGQgc3R5bGUgQU1EIE9wdGVyb24gTlVNQSBkZXRlY3Rpb24iCiAJZGVwZW5kcyBvbiBYODZfNjQgJiYgTlVNQSAmJiBQQ0kKIAktLS1oZWxwLS0tCi0JICBFbmFibGUgSzggTlVNQSBub2RlIHRvcG9sb2d5IGRldGVjdGlvbi4gIFlvdSBzaG91bGQgc2F5IFkgaGVyZSBpZgotCSAgeW91IGhhdmUgYSBtdWx0aSBwcm9jZXNzb3IgQU1EIEs4IHN5c3RlbS4gVGhpcyB1c2VzIGFuIG9sZAotCSAgbWV0aG9kIHRvIHJlYWQgdGhlIE5VTUEgY29uZmlndXJhdGlvbiBkaXJlY3RseSBmcm9tIHRoZSBidWlsdGluCi0JICBOb3J0aGJyaWRnZSBvZiBPcHRlcm9uLiBJdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgWDg2XzY0X0FDUElfTlVNQQotCSAgaW5zdGVhZCwgd2hpY2ggYWxzbyB0YWtlcyBwcmlvcml0eSBpZiBib3RoIGFyZSBjb21waWxlZCBpbi4KKwkgIEVuYWJsZSBBTUQgTlVNQSBub2RlIHRvcG9sb2d5IGRldGVjdGlvbi4gIFlvdSBzaG91bGQgc2F5IFkgaGVyZSBpZgorCSAgeW91IGhhdmUgYSBtdWx0aSBwcm9jZXNzb3IgQU1EIHN5c3RlbS4gVGhpcyB1c2VzIGFuIG9sZCBtZXRob2QgdG8KKwkgIHJlYWQgdGhlIE5VTUEgY29uZmlndXJhdGlvbiBkaXJlY3RseSBmcm9tIHRoZSBidWlsdGluIE5vcnRoYnJpZGdlCisJICBvZiBPcHRlcm9uLiBJdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgWDg2XzY0X0FDUElfTlVNQSBpbnN0ZWFkLAorCSAgd2hpY2ggYWxzbyB0YWtlcyBwcmlvcml0eSBpZiBib3RoIGFyZSBjb21waWxlZCBpbi4KIAogY29uZmlnIFg4Nl82NF9BQ1BJX05VTUEKIAlkZWZfYm9vbCB5CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9LY29uZmlnLmNwdSBiL2FyY2gveDg2L0tjb25maWcuY3B1CmluZGV4IDJhYzkwNjkuLjE1NTg4YTAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L0tjb25maWcuY3B1CisrKyBiL2FyY2gveDg2L0tjb25maWcuY3B1CkBAIC0zMTAsNiArMzEwLDkgQEAKIGNvbmZpZyBYODZfQ01QWENIRwogCWRlZl9ib29sIFg4Nl82NCB8fCAoWDg2XzMyICYmICFNMzg2KQogCitjb25maWcgQ01QWENIR19MT0NBTAorCWRlZl9ib29sIFg4Nl82NCB8fCAoWDg2XzMyICYmICFNMzg2KQorCiBjb25maWcgWDg2X0wxX0NBQ0hFX1NISUZUCiAJaW50CiAJZGVmYXVsdCAiNyIgaWYgTVBFTlRJVU00IHx8IE1QU0MKZGlmZiAtLWdpdCBhL2FyY2gveDg2L0tjb25maWcuZGVidWcgYi9hcmNoL3g4Ni9LY29uZmlnLmRlYnVnCmluZGV4IGI1OWVlNzYuLjQ1MTQzYmIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L0tjb25maWcuZGVidWcKKysrIGIvYXJjaC94ODYvS2NvbmZpZy5kZWJ1ZwpAQCAtMTE3LDYgKzExNywxNyBAQAogCSAgZmVhdHVyZSBhcyB3ZWxsIGFzIGZvciB0aGUgY2hhbmdlX3BhZ2VfYXR0cigpIGluZnJhc3RydWN0dXJlLgogCSAgSWYgaW4gZG91YnQsIHNheSAiTiIKIAorY29uZmlnIERFQlVHX1NFVF9NT0RVTEVfUk9OWAorCWJvb2wgIlNldCBsb2FkYWJsZSBrZXJuZWwgbW9kdWxlIGRhdGEgYXMgTlggYW5kIHRleHQgYXMgUk8iCisJZGVwZW5kcyBvbiBNT0RVTEVTCisJLS0taGVscC0tLQorCSAgVGhpcyBvcHRpb24gaGVscHMgY2F0Y2ggdW5pbnRlbmRlZCBtb2RpZmljYXRpb25zIHRvIGxvYWRhYmxlCisJICBrZXJuZWwgbW9kdWxlJ3MgdGV4dCBhbmQgcmVhZC1vbmx5IGRhdGEuIEl0IGFsc28gcHJldmVudHMgZXhlY3V0aW9uCisJICBvZiBtb2R1bGUgZGF0YS4gU3VjaCBwcm90ZWN0aW9uIG1heSBpbnRlcmZlcmUgd2l0aCBydW4tdGltZSBjb2RlCisJICBwYXRjaGluZyBhbmQgZHluYW1pYyBrZXJuZWwgdHJhY2luZyAtIGFuZCB0aGV5IG1pZ2h0IGFsc28gcHJvdGVjdAorCSAgYWdhaW5zdCBjZXJ0YWluIGNsYXNzZXMgb2Yga2VybmVsIGV4cGxvaXRzLgorCSAgSWYgaW4gZG91YnQsIHNheSAiTiIuCisKIGNvbmZpZyBERUJVR19OWF9URVNUCiAJdHJpc3RhdGUgIlRlc3RjYXNlIGZvciB0aGUgTlggbm9uLWV4ZWN1dGFibGUgc3RhY2sgZmVhdHVyZSIKIAlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTCAmJiBtCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvaGVhZF82NC5TIGIvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2hlYWRfNjQuUwppbmRleCA1MmY4NWExLi4zNWFmMDlkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvaGVhZF82NC5TCisrKyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9oZWFkXzY0LlMKQEAgLTE4Miw3ICsxODIsNyBAQAogCWhsdAogCWptcCAgICAgMWIKIAotI2luY2x1ZGUgIi4uLy4uL2tlcm5lbC92ZXJpZnlfY3B1XzY0LlMiCisjaW5jbHVkZSAiLi4vLi4va2VybmVsL3ZlcmlmeV9jcHUuUyIKIAogCS8qCiAJICogQmUgY2FyZWZ1bCBoZXJlIHN0YXJ0dXBfNjQgbmVlZHMgdG8gYmUgYXQgYSBwcmVkaWN0YWJsZQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYWx0ZXJuYXRpdmUuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FsdGVybmF0aXZlLmgKaW5kZXggNzY1NjFkMi4uMTMwMDlkMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYWx0ZXJuYXRpdmUuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hbHRlcm5hdGl2ZS5oCkBAIC02Niw2ICs2Niw3IEBACiBleHRlcm4gdm9pZCBhbHRlcm5hdGl2ZXNfc21wX21vZHVsZV9kZWwoc3RydWN0IG1vZHVsZSAqbW9kKTsKIGV4dGVybiB2b2lkIGFsdGVybmF0aXZlc19zbXBfc3dpdGNoKGludCBzbXApOwogZXh0ZXJuIGludCBhbHRlcm5hdGl2ZXNfdGV4dF9yZXNlcnZlZCh2b2lkICpzdGFydCwgdm9pZCAqZW5kKTsKK2V4dGVybiBib29sIHNraXBfc21wX2FsdGVybmF0aXZlczsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgYWx0ZXJuYXRpdmVzX3NtcF9tb2R1bGVfYWRkKHN0cnVjdCBtb2R1bGUgKm1vZCwgY2hhciAqbmFtZSwKIAkJCQkJICAgICAgIHZvaWQgKmxvY2tzLCB2b2lkICpsb2Nrc19lbmQsCkBAIC0xODAsOCArMTgxLDE1IEBACiAgKiBPbiB0aGUgbG9jYWwgQ1BVIHlvdSBuZWVkIHRvIGJlIHByb3RlY3RlZCBhZ2FpbiBOTUkgb3IgTUNFIGhhbmRsZXJzIHNlZWluZyBhbgogICogaW5jb25zaXN0ZW50IGluc3RydWN0aW9uIHdoaWxlIHlvdSBwYXRjaC4KICAqLworc3RydWN0IHRleHRfcG9rZV9wYXJhbSB7CisJdm9pZCAqYWRkcjsKKwljb25zdCB2b2lkICpvcGNvZGU7CisJc2l6ZV90IGxlbjsKK307CisKIGV4dGVybiB2b2lkICp0ZXh0X3Bva2Uodm9pZCAqYWRkciwgY29uc3Qgdm9pZCAqb3Bjb2RlLCBzaXplX3QgbGVuKTsKIGV4dGVybiB2b2lkICp0ZXh0X3Bva2Vfc21wKHZvaWQgKmFkZHIsIGNvbnN0IHZvaWQgKm9wY29kZSwgc2l6ZV90IGxlbik7CitleHRlcm4gdm9pZCB0ZXh0X3Bva2Vfc21wX2JhdGNoKHN0cnVjdCB0ZXh0X3Bva2VfcGFyYW0gKnBhcmFtcywgaW50IG4pOwogCiAjaWYgZGVmaW5lZChDT05GSUdfRFlOQU1JQ19GVFJBQ0UpIHx8IGRlZmluZWQoSEFWRV9KVU1QX0xBQkVMKQogI2RlZmluZSBJREVBTF9OT1BfU0laRV81IDUKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FtZF9uYi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYW1kX25iLmgKaW5kZXggYzg1MTdmOC4uNmFlZTUwZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYW1kX25iLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYW1kX25iLmgKQEAgLTMsMzYgKzMsNTMgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogCi1leHRlcm4gc3RydWN0IHBjaV9kZXZpY2VfaWQgazhfbmJfaWRzW107CitleHRlcm4gc3RydWN0IHBjaV9kZXZpY2VfaWQgYW1kX25iX21pc2NfaWRzW107CiBzdHJ1Y3QgYm9vdG5vZGU7CiAKLWV4dGVybiBpbnQgZWFybHlfaXNfazhfbmIodTMyIHZhbHVlKTsKLWV4dGVybiBpbnQgY2FjaGVfazhfbm9ydGhicmlkZ2VzKHZvaWQpOwotZXh0ZXJuIHZvaWQgazhfZmx1c2hfZ2FydHModm9pZCk7Ci1leHRlcm4gaW50IGs4X2dldF9ub2RlcyhzdHJ1Y3QgYm9vdG5vZGUgKm5vZGVzKTsKLWV4dGVybiBpbnQgazhfbnVtYV9pbml0KHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4pOwotZXh0ZXJuIGludCBrOF9zY2FuX25vZGVzKHZvaWQpOworZXh0ZXJuIGludCBlYXJseV9pc19hbWRfbmIodTMyIHZhbHVlKTsKK2V4dGVybiBpbnQgYW1kX2NhY2hlX25vcnRoYnJpZGdlcyh2b2lkKTsKK2V4dGVybiB2b2lkIGFtZF9mbHVzaF9nYXJ0cyh2b2lkKTsKK2V4dGVybiBpbnQgYW1kX2dldF9ub2RlcyhzdHJ1Y3QgYm9vdG5vZGUgKm5vZGVzKTsKK2V4dGVybiBpbnQgYW1kX251bWFfaW5pdCh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuKTsKK2V4dGVybiBpbnQgYW1kX3NjYW5fbm9kZXModm9pZCk7CiAKLXN0cnVjdCBrOF9ub3J0aGJyaWRnZV9pbmZvIHsKLQl1MTYgbnVtOwotCXU4IGdhcnRfc3VwcG9ydGVkOwotCXN0cnVjdCBwY2lfZGV2ICoqbmJfbWlzYzsKK3N0cnVjdCBhbWRfbm9ydGhicmlkZ2UgeworCXN0cnVjdCBwY2lfZGV2ICptaXNjOwogfTsKLWV4dGVybiBzdHJ1Y3Qgazhfbm9ydGhicmlkZ2VfaW5mbyBrOF9ub3J0aGJyaWRnZXM7CisKK3N0cnVjdCBhbWRfbm9ydGhicmlkZ2VfaW5mbyB7CisJdTE2IG51bTsKKwl1NjQgZmxhZ3M7CisJc3RydWN0IGFtZF9ub3J0aGJyaWRnZSAqbmI7Cit9OworZXh0ZXJuIHN0cnVjdCBhbWRfbm9ydGhicmlkZ2VfaW5mbyBhbWRfbm9ydGhicmlkZ2VzOworCisjZGVmaW5lIEFNRF9OQl9HQVJUCQkJMHgxCisjZGVmaW5lIEFNRF9OQl9MM19JTkRFWF9ESVNBQkxFCQkweDIKIAogI2lmZGVmIENPTkZJR19BTURfTkIKIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgcGNpX2RldiAqbm9kZV90b19rOF9uYl9taXNjKGludCBub2RlKQorc3RhdGljIGlubGluZSBpbnQgYW1kX25iX251bSh2b2lkKQogewotCXJldHVybiAobm9kZSA8IGs4X25vcnRoYnJpZGdlcy5udW0pID8gazhfbm9ydGhicmlkZ2VzLm5iX21pc2Nbbm9kZV0gOiBOVUxMOworCXJldHVybiBhbWRfbm9ydGhicmlkZ2VzLm51bTsKK30KKworc3RhdGljIGlubGluZSBpbnQgYW1kX25iX2hhc19mZWF0dXJlKGludCBmZWF0dXJlKQoreworCXJldHVybiAoKGFtZF9ub3J0aGJyaWRnZXMuZmxhZ3MgJiBmZWF0dXJlKSA9PSBmZWF0dXJlKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgYW1kX25vcnRoYnJpZGdlICpub2RlX3RvX2FtZF9uYihpbnQgbm9kZSkKK3sKKwlyZXR1cm4gKG5vZGUgPCBhbWRfbm9ydGhicmlkZ2VzLm51bSkgPyAmYW1kX25vcnRoYnJpZGdlcy5uYltub2RlXSA6IE5VTEw7CiB9CiAKICNlbHNlCiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHBjaV9kZXYgKm5vZGVfdG9fazhfbmJfbWlzYyhpbnQgbm9kZSkKLXsKLQlyZXR1cm4gTlVMTDsKLX0KKyNkZWZpbmUgYW1kX25iX251bSh4KQkJMAorI2RlZmluZSBhbWRfbmJfaGFzX2ZlYXR1cmUoeCkJZmFsc2UKKyNkZWZpbmUgbm9kZV90b19hbWRfbmIoeCkJTlVMTAorCiAjZW5kaWYKIAogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljLmgKaW5kZXggZjZjZTBiZC4uNWUzOTY5YyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYXBpYy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FwaWMuaApAQCAtMjM0LDE2ICsyMzQsMTcgQEAKIGV4dGVybiB2b2lkIHNldHVwX2xvY2FsX0FQSUModm9pZCk7CiBleHRlcm4gdm9pZCBlbmRfbG9jYWxfQVBJQ19zZXR1cCh2b2lkKTsKIGV4dGVybiB2b2lkIGluaXRfYXBpY19tYXBwaW5ncyh2b2lkKTsKK3ZvaWQgcmVnaXN0ZXJfbGFwaWNfYWRkcmVzcyh1bnNpZ25lZCBsb25nIGFkZHJlc3MpOwogZXh0ZXJuIHZvaWQgc2V0dXBfYm9vdF9BUElDX2Nsb2NrKHZvaWQpOwogZXh0ZXJuIHZvaWQgc2V0dXBfc2Vjb25kYXJ5X0FQSUNfY2xvY2sodm9pZCk7CiBleHRlcm4gaW50IEFQSUNfaW5pdF91bmlwcm9jZXNzb3Iodm9pZCk7CiBleHRlcm4gdm9pZCBlbmFibGVfTk1JX3Rocm91Z2hfTFZUMCh2b2lkKTsKK2V4dGVybiBpbnQgYXBpY19mb3JjZV9lbmFibGUodm9pZCk7CiAKIC8qCiAgKiBPbiAzMmJpdCB0aGlzIGlzIG1hY2gteHh4IGxvY2FsCiAgKi8KICNpZmRlZiBDT05GSUdfWDg2XzY0Ci1leHRlcm4gdm9pZCBlYXJseV9pbml0X2xhcGljX21hcHBpbmcodm9pZCk7CiBleHRlcm4gaW50IGFwaWNfaXNfY2x1c3RlcmVkX2JveCh2b2lkKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIGludCBhcGljX2lzX2NsdXN0ZXJlZF9ib3godm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FwaWNkZWYuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FwaWNkZWYuaAppbmRleCBhODU5Y2E0Li40N2EzMGZmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljZGVmLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYXBpY2RlZi5oCkBAIC0xNDUsNiArMTQ1LDcgQEAKIAogI2lmZGVmIENPTkZJR19YODZfMzIKICMgZGVmaW5lIE1BWF9JT19BUElDUyA2NAorIyBkZWZpbmUgTUFYX0xPQ0FMX0FQSUMgMjU2CiAjZWxzZQogIyBkZWZpbmUgTUFYX0lPX0FQSUNTIDEyOAogIyBkZWZpbmUgTUFYX0xPQ0FMX0FQSUMgMzI3NjgKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Jvb3RwYXJhbS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYm9vdHBhcmFtLmgKaW5kZXggOGU2MjE4NS4uYzhiZmU2MyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYm9vdHBhcmFtLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYm9vdHBhcmFtLmgKQEAgLTEyNCw2ICsxMjQsNyBAQAogCVg4Nl9TVUJBUkNIX0xHVUVTVCwKIAlYODZfU1VCQVJDSF9YRU4sCiAJWDg2X1NVQkFSQ0hfTVJTVCwKKwlYODZfU1VCQVJDSF9DRTQxMDAsCiAJWDg2X05SX1NVQkFSQ0hTLAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZGVidWdyZWcuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2RlYnVncmVnLmgKaW5kZXggYjgxMDAyZi4uMDc4YWQwYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZGVidWdyZWcuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kZWJ1Z3JlZy5oCkBAIC05NCw3ICs5NCw3IEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IGh3X2JyZWFrcG9pbnRfYWN0aXZlKHZvaWQpCiB7Ci0JcmV0dXJuIF9fZ2V0X2NwdV92YXIoY3B1X2RyNykgJiBEUl9HTE9CQUxfRU5BQkxFX01BU0s7CisJcmV0dXJuIF9fdGhpc19jcHVfcmVhZChjcHVfZHI3KSAmIERSX0dMT0JBTF9FTkFCTEVfTUFTSzsKIH0KIAogZXh0ZXJuIHZvaWQgYW91dF9kdW1wX2RlYnVncmVncyhzdHJ1Y3QgdXNlciAqZHVtcCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9maXhtYXAuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2ZpeG1hcC5oCmluZGV4IDk0NzlhMDMuLjAxNDFiMjMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2ZpeG1hcC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2ZpeG1hcC5oCkBAIC0xMTcsNiArMTE3LDEwIEBACiAJRklYX1RFWFRfUE9LRTEsCS8qIHJlc2VydmUgMiBwYWdlcyBmb3IgdGV4dF9wb2tlKCkgKi8KIAlGSVhfVEVYVF9QT0tFMCwgLyogZmlyc3QgcGFnZSBpcyBsYXN0LCBiZWNhdXNlIGFsbG9jYXRpb24gaXMgYmFja3dhcmQgKi8KIAlfX2VuZF9vZl9wZXJtYW5lbnRfZml4ZWRfYWRkcmVzc2VzLAorCisjaWZkZWYJQ09ORklHX1g4Nl9NUlNUCisJRklYX0xOV19WUlRDLAorI2VuZGlmCiAJLyoKIAkgKiAyNTYgdGVtcG9yYXJ5IGJvb3QtdGltZSBtYXBwaW5ncywgdXNlZCBieSBlYXJseV9pb3JlbWFwKCksCiAJICogYmVmb3JlIGlvcmVtYXAoKSBpcyBmdW5jdGlvbmFsLgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaTM4Ny5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaTM4Ny5oCmluZGV4IDRhYTJiYjMuLmVmMzI4OTAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2kzODcuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pMzg3LmgKQEAgLTkzLDYgKzkzLDE3IEBACiAJaW50IGVycjsKIAogCS8qIFNlZSBjb21tZW50IGluIGZ4c2F2ZSgpIGJlbG93LiAqLworI2lmZGVmIENPTkZJR19BU19GWFNBVkVRCisJYXNtIHZvbGF0aWxlKCIxOiAgZnhyc3RvcnEgJVtmeF1cblx0IgorCQkgICAgICIyOlxuIgorCQkgICAgICIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iCisJCSAgICAgIjM6ICBtb3ZsICQtMSwlW2Vycl1cbiIKKwkJICAgICAiICAgIGptcCAgMmJcbiIKKwkJICAgICAiLnByZXZpb3VzXG4iCisJCSAgICAgX0FTTV9FWFRBQkxFKDFiLCAzYikKKwkJICAgICA6IFtlcnJdICI9ciIgKGVycikKKwkJICAgICA6IFtmeF0gIm0iICgqZngpLCAiMCIgKDApKTsKKyNlbHNlCiAJYXNtIHZvbGF0aWxlKCIxOiAgcmV4NjQvZnhyc3RvciAoJVtmeF0pXG5cdCIKIAkJICAgICAiMjpcbiIKIAkJICAgICAiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIgpAQCAtMTAyLDYgKzExMyw3IEBACiAJCSAgICAgX0FTTV9FWFRBQkxFKDFiLCAzYikKIAkJICAgICA6IFtlcnJdICI9ciIgKGVycikKIAkJICAgICA6IFtmeF0gIlIiIChmeCksICJtIiAoKmZ4KSwgIjAiICgwKSk7CisjZW5kaWYKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xMTksNiArMTMxLDE3IEBACiAJCXJldHVybiAtRUZBVUxUOwogCiAJLyogU2VlIGNvbW1lbnQgaW4gZnhzYXZlKCkgYmVsb3cuICovCisjaWZkZWYgQ09ORklHX0FTX0ZYU0FWRVEKKwlhc20gdm9sYXRpbGUoIjE6ICBmeHNhdmVxICVbZnhdXG5cdCIKKwkJICAgICAiMjpcbiIKKwkJICAgICAiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIgorCQkgICAgICIzOiAgbW92bCAkLTEsJVtlcnJdXG4iCisJCSAgICAgIiAgICBqbXAgIDJiXG4iCisJCSAgICAgIi5wcmV2aW91c1xuIgorCQkgICAgIF9BU01fRVhUQUJMRSgxYiwgM2IpCisJCSAgICAgOiBbZXJyXSAiPXIiIChlcnIpLCBbZnhdICI9bSIgKCpmeCkKKwkJICAgICA6ICIwIiAoMCkpOworI2Vsc2UKIAlhc20gdm9sYXRpbGUoIjE6ICByZXg2NC9meHNhdmUgKCVbZnhdKVxuXHQiCiAJCSAgICAgIjI6XG4iCiAJCSAgICAgIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIKQEAgLTEyOCw2ICsxNTEsNyBAQAogCQkgICAgIF9BU01fRVhUQUJMRSgxYiwgM2IpCiAJCSAgICAgOiBbZXJyXSAiPXIiIChlcnIpLCAiPW0iICgqZngpCiAJCSAgICAgOiBbZnhdICJSIiAoZngpLCAiMCIgKDApKTsKKyNlbmRpZgogCWlmICh1bmxpa2VseShlcnIpICYmCiAJICAgIF9fY2xlYXJfdXNlcihmeCwgc2l6ZW9mKHN0cnVjdCBpMzg3X2Z4c2F2ZV9zdHJ1Y3QpKSkKIAkJZXJyID0gLUVGQVVMVDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvX2FwaWMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvX2FwaWMuaAppbmRleCBhNmIyOGQwLi5mMzI3ZDM4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pb19hcGljLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9fYXBpYy5oCkBAIC0xNTksNyArMTU5LDcgQEAKIGV4dGVybiBpbnQgaW9fYXBpY19zZXRfcGNpX3JvdXRpbmcoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgaXJxLAogCQkgc3RydWN0IGlvX2FwaWNfaXJxX2F0dHIgKmlycV9hdHRyKTsKIHZvaWQgc2V0dXBfSU9fQVBJQ19pcnFfZXh0cmEodTMyIGdzaSk7Ci1leHRlcm4gdm9pZCBpb2FwaWNfaW5pdF9tYXBwaW5ncyh2b2lkKTsKK2V4dGVybiB2b2lkIGlvYXBpY19hbmRfZ3NpX2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCBpb2FwaWNfaW5zZXJ0X3Jlc291cmNlcyh2b2lkKTsKIAogZXh0ZXJuIHN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5ICoqYWxsb2NfaW9hcGljX2VudHJpZXModm9pZCk7CkBAIC0xNjgsMTAgKzE2OCwxMCBAQAogZXh0ZXJuIHZvaWQgbWFza19JT19BUElDX3NldHVwKHN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5ICoqaW9hcGljX2VudHJpZXMpOwogZXh0ZXJuIGludCByZXN0b3JlX0lPX0FQSUNfc2V0dXAoc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgKippb2FwaWNfZW50cmllcyk7CiAKLWV4dGVybiB2b2lkIHByb2JlX25yX2lycXNfZ3NpKHZvaWQpOwogZXh0ZXJuIGludCBnZXRfbnJfaXJxc19nc2kodm9pZCk7CiAKIGV4dGVybiB2b2lkIHNldHVwX2lvYXBpY19pZHNfZnJvbV9tcGModm9pZCk7CitleHRlcm4gdm9pZCBzZXR1cF9pb2FwaWNfaWRzX2Zyb21fbXBjX25vY2hlY2sodm9pZCk7CiAKIHN0cnVjdCBtcF9pb2FwaWNfZ3NpewogCXUzMiBnc2lfYmFzZTsKQEAgLTE4NCwxNCArMTg0LDE1IEBACiB2b2lkIF9faW5pdCBtcF9yZWdpc3Rlcl9pb2FwaWMoaW50IGlkLCB1MzIgYWRkcmVzcywgdTMyIGdzaV9iYXNlKTsKIGV4dGVybiB2b2lkIF9faW5pdCBwcmVfaW5pdF9hcGljX0lSUTAodm9pZCk7CiAKK2V4dGVybiB2b2lkIG1wX3NhdmVfaXJxKHN0cnVjdCBtcGNfaW50c3JjICptKTsKKwogI2Vsc2UgIC8qICFDT05GSUdfWDg2X0lPX0FQSUMgKi8KIAogI2RlZmluZSBpb19hcGljX2Fzc2lnbl9wY2lfaXJxcyAwCiAjZGVmaW5lIHNldHVwX2lvYXBpY19pZHNfZnJvbV9tcGMgeDg2X2luaXRfbm9vcAogc3RhdGljIGNvbnN0IGludCB0aW1lcl90aHJvdWdoXzgyNTkgPSAwOwotc3RhdGljIGlubGluZSB2b2lkIGlvYXBpY19pbml0X21hcHBpbmdzKHZvaWQpCXsgfQorc3RhdGljIGlubGluZSB2b2lkIGlvYXBpY19hbmRfZ3NpX2luaXQodm9pZCkgeyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgaW9hcGljX2luc2VydF9yZXNvdXJjZXModm9pZCkgeyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgcHJvYmVfbnJfaXJxc19nc2kodm9pZCkJeyB9CiAjZGVmaW5lIGdzaV90b3AgKE5SX0lSUVNfTEVHQUNZKQogc3RhdGljIGlubGluZSBpbnQgbXBfZmluZF9pb2FwaWModTMyIGdzaSkgeyByZXR1cm4gMDsgfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnEuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycS5oCmluZGV4IDEzYjBlYmEuLmJhODcwYmIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycS5oCkBAIC0xNSwxMCArMTUsNiBAQAogCXJldHVybiAoKGlycSA9PSAyKSA/IDkgOiBpcnEpOwogfQogCi0jaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCi0jIGRlZmluZSBBUkNIX0hBU19OTUlfV0FUQ0hET0cKLSNlbmRpZgotCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgogZXh0ZXJuIHZvaWQgaXJxX2N0eF9pbml0KGludCBjcHUpOwogI2Vsc2UKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2tkZWJ1Zy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va2RlYnVnLmgKaW5kZXggNWJkZmNhOC4uZjIzZWIyNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va2RlYnVnLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va2RlYnVnLmgKQEAgLTI4LDcgKzI4LDcgQEAKIGV4dGVybiBpbnQgX19tdXN0X2NoZWNrIF9fZGllKGNvbnN0IGNoYXIgKiwgc3RydWN0IHB0X3JlZ3MgKiwgbG9uZyk7CiBleHRlcm4gdm9pZCBzaG93X3JlZ2lzdGVycyhzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiBleHRlcm4gdm9pZCBzaG93X3RyYWNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCi0JCSAgICAgICB1bnNpZ25lZCBsb25nICpzcCwgdW5zaWduZWQgbG9uZyBicCk7CisJCSAgICAgICB1bnNpZ25lZCBsb25nICpzcCk7CiBleHRlcm4gdm9pZCBfX3Nob3dfcmVncyhzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGFsbCk7CiBleHRlcm4gdm9pZCBzaG93X3JlZ3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgb29wc19iZWdpbih2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21jZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbWNlLmgKaW5kZXggYzYyYzEzYy4uZWIxNmU5NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbWNlLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbWNlLmgKQEAgLTIyMyw2ICsyMjMsOSBAQAogCiB2b2lkIG1jZV9sb2dfdGhlcm1fdGhyb3RfZXZlbnQoX191NjQgc3RhdHVzKTsKIAorLyogSW50ZXJydXB0IEhhbmRsZXIgZm9yIGNvcmUgdGhlcm1hbCB0aHJlc2hvbGRzICovCitleHRlcm4gaW50ICgqcGxhdGZvcm1fdGhlcm1hbF9ub3RpZnkpKF9fdTY0IG1zcl92YWwpOworCiAjaWZkZWYgQ09ORklHX1g4Nl9USEVSTUFMX1ZFQ1RPUgogZXh0ZXJuIHZvaWQgbWNoZWNrX2ludGVsX3RoZXJtX2luaXQodm9pZCk7CiAjZWxzZQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbWljcm9jb2RlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9taWNyb2NvZGUuaAppbmRleCBlZjUxYjUwLi4yNDIxNTA3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9taWNyb2NvZGUuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9taWNyb2NvZGUuaApAQCAtNDgsNiArNDgsMTIgQEAKIAogI2lmZGVmIENPTkZJR19NSUNST0NPREVfQU1ECiBleHRlcm4gc3RydWN0IG1pY3JvY29kZV9vcHMgKiBfX2luaXQgaW5pdF9hbWRfbWljcm9jb2RlKHZvaWQpOworCitzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X3Vjb2RlX2RhdGEodm9pZCAqdG8sIGNvbnN0IHU4ICpmcm9tLCBzaXplX3QgbikKK3sKKwltZW1jcHkodG8sIGZyb20sIG4pOworfQorCiAjZWxzZQogc3RhdGljIGlubGluZSBzdHJ1Y3QgbWljcm9jb2RlX29wcyAqIF9faW5pdCBpbml0X2FtZF9taWNyb2NvZGUodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21wc3BlYy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXBzcGVjLmgKaW5kZXggYzgyODY4ZS4uMGM5MGRkOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbXBzcGVjLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXBzcGVjLmgKQEAgLTUsOCArNSw5IEBACiAKICNpbmNsdWRlIDxhc20vbXBzcGVjX2RlZi5oPgogI2luY2x1ZGUgPGFzbS94ODZfaW5pdC5oPgorI2luY2x1ZGUgPGFzbS9hcGljZGVmLmg+CiAKLWV4dGVybiBpbnQgYXBpY192ZXJzaW9uW01BWF9BUElDU107CitleHRlcm4gaW50IGFwaWNfdmVyc2lvbltdOwogZXh0ZXJuIGludCBwaWNfbW9kZTsKIAogI2lmZGVmIENPTkZJR19YODZfMzIKQEAgLTEwNyw3ICsxMDgsNyBAQAogCQkJCSBpbnQgYWN0aXZlX2hpZ2hfbG93KTsKICNlbmRpZiAvKiBDT05GSUdfQUNQSSAqLwogCi0jZGVmaW5lIFBIWVNJRF9BUlJBWV9TSVpFCUJJVFNfVE9fTE9OR1MoTUFYX0FQSUNTKQorI2RlZmluZSBQSFlTSURfQVJSQVlfU0laRQlCSVRTX1RPX0xPTkdTKE1BWF9MT0NBTF9BUElDKQogCiBzdHJ1Y3QgcGh5c2lkX21hc2sgewogCXVuc2lnbmVkIGxvbmcgbWFza1tQSFlTSURfQVJSQVlfU0laRV07CkBAIC0xMjIsMzEgKzEyMywzMSBAQAogCXRlc3RfYW5kX3NldF9iaXQocGh5c2lkLCAobWFwKS5tYXNrKQogCiAjZGVmaW5lIHBoeXNpZHNfYW5kKGRzdCwgc3JjMSwgc3JjMikJCQkJCVwKLQliaXRtYXBfYW5kKChkc3QpLm1hc2ssIChzcmMxKS5tYXNrLCAoc3JjMikubWFzaywgTUFYX0FQSUNTKQorCWJpdG1hcF9hbmQoKGRzdCkubWFzaywgKHNyYzEpLm1hc2ssIChzcmMyKS5tYXNrLCBNQVhfTE9DQUxfQVBJQykKIAogI2RlZmluZSBwaHlzaWRzX29yKGRzdCwgc3JjMSwgc3JjMikJCQkJCVwKLQliaXRtYXBfb3IoKGRzdCkubWFzaywgKHNyYzEpLm1hc2ssIChzcmMyKS5tYXNrLCBNQVhfQVBJQ1MpCisJYml0bWFwX29yKChkc3QpLm1hc2ssIChzcmMxKS5tYXNrLCAoc3JjMikubWFzaywgTUFYX0xPQ0FMX0FQSUMpCiAKICNkZWZpbmUgcGh5c2lkc19jbGVhcihtYXApCQkJCQlcCi0JYml0bWFwX3plcm8oKG1hcCkubWFzaywgTUFYX0FQSUNTKQorCWJpdG1hcF96ZXJvKChtYXApLm1hc2ssIE1BWF9MT0NBTF9BUElDKQogCiAjZGVmaW5lIHBoeXNpZHNfY29tcGxlbWVudChkc3QsIHNyYykJCQkJXAotCWJpdG1hcF9jb21wbGVtZW50KChkc3QpLm1hc2ssIChzcmMpLm1hc2ssIE1BWF9BUElDUykKKwliaXRtYXBfY29tcGxlbWVudCgoZHN0KS5tYXNrLCAoc3JjKS5tYXNrLCBNQVhfTE9DQUxfQVBJQykKIAogI2RlZmluZSBwaHlzaWRzX2VtcHR5KG1hcCkJCQkJCVwKLQliaXRtYXBfZW1wdHkoKG1hcCkubWFzaywgTUFYX0FQSUNTKQorCWJpdG1hcF9lbXB0eSgobWFwKS5tYXNrLCBNQVhfTE9DQUxfQVBJQykKIAogI2RlZmluZSBwaHlzaWRzX2VxdWFsKG1hcDEsIG1hcDIpCQkJCVwKLQliaXRtYXBfZXF1YWwoKG1hcDEpLm1hc2ssIChtYXAyKS5tYXNrLCBNQVhfQVBJQ1MpCisJYml0bWFwX2VxdWFsKChtYXAxKS5tYXNrLCAobWFwMikubWFzaywgTUFYX0xPQ0FMX0FQSUMpCiAKICNkZWZpbmUgcGh5c2lkc193ZWlnaHQobWFwKQkJCQkJXAotCWJpdG1hcF93ZWlnaHQoKG1hcCkubWFzaywgTUFYX0FQSUNTKQorCWJpdG1hcF93ZWlnaHQoKG1hcCkubWFzaywgTUFYX0xPQ0FMX0FQSUMpCiAKICNkZWZpbmUgcGh5c2lkc19zaGlmdF9yaWdodChkLCBzLCBuKQkJCQlcCi0JYml0bWFwX3NoaWZ0X3JpZ2h0KChkKS5tYXNrLCAocykubWFzaywgbiwgTUFYX0FQSUNTKQorCWJpdG1hcF9zaGlmdF9yaWdodCgoZCkubWFzaywgKHMpLm1hc2ssIG4sIE1BWF9MT0NBTF9BUElDKQogCiAjZGVmaW5lIHBoeXNpZHNfc2hpZnRfbGVmdChkLCBzLCBuKQkJCQlcCi0JYml0bWFwX3NoaWZ0X2xlZnQoKGQpLm1hc2ssIChzKS5tYXNrLCBuLCBNQVhfQVBJQ1MpCisJYml0bWFwX3NoaWZ0X2xlZnQoKGQpLm1hc2ssIChzKS5tYXNrLCBuLCBNQVhfTE9DQUxfQVBJQykKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHBoeXNpZHNfY29lcmNlKHBoeXNpZF9tYXNrX3QgKm1hcCkKIHsKQEAgLTE1OSwxNCArMTYwLDYgQEAKIAltYXAtPm1hc2tbMF0gPSBwaHlzaWRzOwogfQogCi0vKiBOb3RlOiB3aWxsIGNyZWF0ZSB2ZXJ5IGxhcmdlIHN0YWNrIGZyYW1lcyBpZiBwaHlzaWRfbWFza190IGlzIGJpZyAqLwotI2RlZmluZSBwaHlzaWRfbWFza19vZl9waHlzaWQocGh5c2lkKQkJCQkJXAotCSh7CQkJCQkJCQlcCi0JCXBoeXNpZF9tYXNrX3QgX19waHlzaWRfbWFzayA9IFBIWVNJRF9NQVNLX05PTkU7CQlcCi0JCXBoeXNpZF9zZXQocGh5c2lkLCBfX3BoeXNpZF9tYXNrKTsJCQlcCi0JCV9fcGh5c2lkX21hc2s7CQkJCQkJXAotCX0pCi0KIHN0YXRpYyBpbmxpbmUgdm9pZCBwaHlzaWRfc2V0X21hc2tfb2ZfcGh5c2lkKGludCBwaHlzaWQsIHBoeXNpZF9tYXNrX3QgKm1hcCkKIHsKIAlwaHlzaWRzX2NsZWFyKCptYXApOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbXBzcGVjX2RlZi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXBzcGVjX2RlZi5oCmluZGV4IDRhN2Y5NmQuLmMwYTk1NWEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21wc3BlY19kZWYuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tcHNwZWNfZGVmLmgKQEAgLTE1LDEzICsxNSw2IEBACiAKICNpZmRlZiBDT05GSUdfWDg2XzMyCiAjIGRlZmluZSBNQVhfTVBDX0VOVFJZIDEwMjQKLSMgZGVmaW5lIE1BWF9BUElDUyAgICAgIDI1NgotI2Vsc2UKLSMgaWYgTlJfQ1BVUyA8PSAyNTUKLSMgIGRlZmluZSBNQVhfQVBJQ1MgICAgIDI1NQotIyBlbHNlCi0jICBkZWZpbmUgTUFYX0FQSUNTICAgMzI3NjgKLSMgZW5kaWYKICNlbmRpZgogCiAvKiBJbnRlbCBNUCBGbG9hdGluZyBQb2ludGVyIFN0cnVjdHVyZSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbXJzdC12cnRjLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tcnN0LXZydGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzY2OGFiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXJzdC12cnRjLmgKQEAgLTAsMCArMSw5IEBACisjaWZuZGVmIF9NUlNUX1ZSVENfSAorI2RlZmluZSBfTVJTVF9WUlRDX0gKKworZXh0ZXJuIHVuc2lnbmVkIGNoYXIgdnJ0Y19jbW9zX3JlYWQodW5zaWduZWQgY2hhciByZWcpOworZXh0ZXJuIHZvaWQgdnJ0Y19jbW9zX3dyaXRlKHVuc2lnbmVkIGNoYXIgdmFsLCB1bnNpZ25lZCBjaGFyIHJlZyk7CitleHRlcm4gdW5zaWduZWQgbG9uZyB2cnRjX2dldF90aW1lKHZvaWQpOworZXh0ZXJuIGludCB2cnRjX3NldF9tbXNzKHVuc2lnbmVkIGxvbmcgbm93dGltZSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbXJzdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXJzdC5oCmluZGV4IDRhNzExYTYuLjcxOWYwMGIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21yc3QuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tcnN0LmgKQEAgLTE0LDcgKzE0LDkgQEAKICNpbmNsdWRlIDxsaW51eC9zZmkuaD4KIAogZXh0ZXJuIGludCBwY2lfbXJzdF9pbml0KHZvaWQpOwotaW50IF9faW5pdCBzZmlfcGFyc2VfbXJ0YyhzdHJ1Y3Qgc2ZpX3RhYmxlX2hlYWRlciAqdGFibGUpOworZXh0ZXJuIGludCBfX2luaXQgc2ZpX3BhcnNlX21ydGMoc3RydWN0IHNmaV90YWJsZV9oZWFkZXIgKnRhYmxlKTsKK2V4dGVybiBpbnQgc2ZpX21ydGNfbnVtOworZXh0ZXJuIHN0cnVjdCBzZmlfcnRjX3RhYmxlX2VudHJ5IHNmaV9tcnRjX2FycmF5W107CiAKIC8qCiAgKiBNZWRmaWVsZCBpcyB0aGUgZm9sbG93LXVwIG9mIE1vb3Jlc3Rvd24sIGl0IGNvbWJpbmVzIHR3byBjaGlwIHNvbHV0aW9uIGludG8KQEAgLTUwLDQgKzUyLDE0IEBACiAKIGV4dGVybiBzdHJ1Y3QgY29uc29sZSBlYXJseV9oc3VfY29uc29sZTsKIGV4dGVybiB2b2lkIGhzdV9lYXJseV9jb25zb2xlX2luaXQodm9pZCk7CisKK2V4dGVybiB2b2lkIGludGVsX3NjdV9kZXZpY2VzX2NyZWF0ZSh2b2lkKTsKK2V4dGVybiB2b2lkIGludGVsX3NjdV9kZXZpY2VzX2Rlc3Ryb3kodm9pZCk7CisKKy8qIFZSVEMgdGltZXIgKi8KKyNkZWZpbmUgTVJTVF9WUlRDX01BUF9TWgkoMTAyNCkKKy8qI2RlZmluZSBNUlNUX1ZSVENfUEdPRkZTRVQJKDB4YzAwKSAqLworCitleHRlcm4gdm9pZCBtcnN0X3J0Y19pbml0KHZvaWQpOworCiAjZW5kaWYgLyogX0FTTV9YODZfTVJTVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oCmluZGV4IDZiODlmNWUuLjRkMGRmYTAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oCkBAIC0xMjMsNiArMTIzLDEwIEBACiAjZGVmaW5lIE1TUl9BTUQ2NF9JQlNDVEwJCTB4YzAwMTEwM2EKICNkZWZpbmUgTVNSX0FNRDY0X0lCU0JSVEFSR0VUCQkweGMwMDExMDNiCiAKKy8qIEZhbSAxNWggTVNScyAqLworI2RlZmluZSBNU1JfRjE1SF9QRVJGX0NUTAkJMHhjMDAxMDIwMAorI2RlZmluZSBNU1JfRjE1SF9QRVJGX0NUUgkJMHhjMDAxMDIwMQorCiAvKiBGYW0gMTBoIE1TUnMgKi8KICNkZWZpbmUgTVNSX0ZBTTEwSF9NTUlPX0NPTkZfQkFTRQkweGMwMDEwMDU4CiAjZGVmaW5lIEZBTTEwSF9NTUlPX0NPTkZfRU5BQkxFCQkoMTw8MCkKQEAgLTI1Myw2ICsyNTcsMTggQEAKICNkZWZpbmUgUEFDS0FHRV9USEVSTV9JTlRfTE9XX0VOQUJMRQkJKDEgPDwgMSkKICNkZWZpbmUgUEFDS0FHRV9USEVSTV9JTlRfUExOX0VOQUJMRQkJKDEgPDwgMjQpCiAKKy8qIFRoZXJtYWwgVGhyZXNob2xkcyBTdXBwb3J0ICovCisjZGVmaW5lIFRIRVJNX0lOVF9USFJFU0hPTEQwX0VOQUJMRSAgICAoMSA8PCAxNSkKKyNkZWZpbmUgVEhFUk1fU0hJRlRfVEhSRVNIT0xEMCAgICAgICAgOAorI2RlZmluZSBUSEVSTV9NQVNLX1RIUkVTSE9MRDAgICAgICAgICAgKDB4N2YgPDwgVEhFUk1fU0hJRlRfVEhSRVNIT0xEMCkKKyNkZWZpbmUgVEhFUk1fSU5UX1RIUkVTSE9MRDFfRU5BQkxFICAgICgxIDw8IDIzKQorI2RlZmluZSBUSEVSTV9TSElGVF9USFJFU0hPTEQxICAgICAgICAxNgorI2RlZmluZSBUSEVSTV9NQVNLX1RIUkVTSE9MRDEgICAgICAgICAgKDB4N2YgPDwgVEhFUk1fU0hJRlRfVEhSRVNIT0xEMSkKKyNkZWZpbmUgVEhFUk1fU1RBVFVTX1RIUkVTSE9MRDAgICAgICAgICgxIDw8IDYpCisjZGVmaW5lIFRIRVJNX0xPR19USFJFU0hPTEQwICAgICAgICAgICAoMSA8PCA3KQorI2RlZmluZSBUSEVSTV9TVEFUVVNfVEhSRVNIT0xEMSAgICAgICAgKDEgPDwgOCkKKyNkZWZpbmUgVEhFUk1fTE9HX1RIUkVTSE9MRDEgICAgICAgICAgICgxIDw8IDkpCisKIC8qIE1JU0NfRU5BQkxFIGJpdHM6IGFyY2hpdGVjdHVyYWwgKi8KICNkZWZpbmUgTVNSX0lBMzJfTUlTQ19FTkFCTEVfRkFTVF9TVFJJTkcJKDFVTEwgPDwgMCkKICNkZWZpbmUgTVNSX0lBMzJfTUlTQ19FTkFCTEVfVENDCQkoMVVMTCA8PCAxKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbm1pLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9ubWkuaAppbmRleCA5MzJmMGY4Li5jNDAyMWI5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9ubWkuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9ubWkuaApAQCAtNSw0MSArNSwxNSBAQAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAotI2lmZGVmIEFSQ0hfSEFTX05NSV9XQVRDSERPRwotCi0vKioKLSAqIGRvX25taV9jYWxsYmFjawotICoKLSAqIENoZWNrIHRvIHNlZSBpZiBhIGNhbGxiYWNrIGV4aXN0cyBhbmQgZXhlY3V0ZSBpdC4gIFJldHVybiAxCi0gKiBpZiB0aGUgaGFuZGxlciBleGlzdHMgYW5kIHdhcyBoYW5kbGVkIHN1Y2Nlc3NmdWxseS4KLSAqLwotaW50IGRvX25taV9jYWxsYmFjayhzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGNwdSk7CisjaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCiAKIGV4dGVybiB2b2lkIGRpZV9ubWkoY2hhciAqc3RyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGRvX3BhbmljKTsKLWV4dGVybiBpbnQgY2hlY2tfbm1pX3dhdGNoZG9nKHZvaWQpOwotI2lmICFkZWZpbmVkKENPTkZJR19MT0NLVVBfREVURUNUT1IpCi1leHRlcm4gaW50IG5taV93YXRjaGRvZ19lbmFibGVkOwotI2VuZGlmCiBleHRlcm4gaW50IGF2YWlsX3RvX3Jlc3J2X3BlcmZjdHJfbm1pX2JpdCh1bnNpZ25lZCBpbnQpOwogZXh0ZXJuIGludCByZXNlcnZlX3BlcmZjdHJfbm1pKHVuc2lnbmVkIGludCk7CiBleHRlcm4gdm9pZCByZWxlYXNlX3BlcmZjdHJfbm1pKHVuc2lnbmVkIGludCk7CiBleHRlcm4gaW50IHJlc2VydmVfZXZudHNlbF9ubWkodW5zaWduZWQgaW50KTsKIGV4dGVybiB2b2lkIHJlbGVhc2VfZXZudHNlbF9ubWkodW5zaWduZWQgaW50KTsKIAotZXh0ZXJuIHZvaWQgc2V0dXBfYXBpY19ubWlfd2F0Y2hkb2codm9pZCAqKTsKLWV4dGVybiB2b2lkIHN0b3BfYXBpY19ubWlfd2F0Y2hkb2codm9pZCAqKTsKLWV4dGVybiB2b2lkIGRpc2FibGVfdGltZXJfbm1pX3dhdGNoZG9nKHZvaWQpOwotZXh0ZXJuIHZvaWQgZW5hYmxlX3RpbWVyX25taV93YXRjaGRvZyh2b2lkKTsKLWV4dGVybiBpbnQgbm1pX3dhdGNoZG9nX3RpY2soc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIHJlYXNvbik7Ci1leHRlcm4gdm9pZCBjcHVfbm1pX3NldF93ZF9lbmFibGVkKHZvaWQpOwotCi1leHRlcm4gYXRvbWljX3Qgbm1pX2FjdGl2ZTsKLWV4dGVybiB1bnNpZ25lZCBpbnQgbm1pX3dhdGNoZG9nOwotI2RlZmluZSBOTUlfTk9ORQkwCi0jZGVmaW5lIE5NSV9JT19BUElDCTEKLSNkZWZpbmUgTk1JX0xPQ0FMX0FQSUMJMgotI2RlZmluZSBOTUlfSU5WQUxJRAkzCi0KIHN0cnVjdCBjdGxfdGFibGU7CiBleHRlcm4gaW50IHByb2Nfbm1pX2VuYWJsZWQoc3RydWN0IGN0bF90YWJsZSAqLCBpbnQgLAogCQkJdm9pZCBfX3VzZXIgKiwgc2l6ZV90ICosIGxvZmZfdCAqKTsKQEAgLTQ3LDMzICsyMSw4IEBACiAKIHZvaWQgYXJjaF90cmlnZ2VyX2FsbF9jcHVfYmFja3RyYWNlKHZvaWQpOwogI2RlZmluZSBhcmNoX3RyaWdnZXJfYWxsX2NwdV9iYWNrdHJhY2UgYXJjaF90cmlnZ2VyX2FsbF9jcHVfYmFja3RyYWNlCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBsb2NhbGlzZV9ubWlfd2F0Y2hkb2codm9pZCkKLXsKLQlpZiAobm1pX3dhdGNoZG9nID09IE5NSV9JT19BUElDKQotCQlubWlfd2F0Y2hkb2cgPSBOTUlfTE9DQUxfQVBJQzsKLX0KLQotLyogY2hlY2sgaWYgbm1pX3dhdGNoZG9nIGlzIGFjdGl2ZSAoaWUgd2FzIHNwZWNpZmllZCBhdCBib290KSAqLwotc3RhdGljIGlubGluZSBpbnQgbm1pX3dhdGNoZG9nX2FjdGl2ZSh2b2lkKQotewotCS8qCi0JICogYWN0dWFsbHkgaXQgc2hvdWxkIGJlOgotCSAqIAlyZXR1cm4gKG5taV93YXRjaGRvZyA9PSBOTUlfTE9DQUxfQVBJQyB8fAotCSAqIAkJbm1pX3dhdGNoZG9nID09IE5NSV9JT19BUElDKQotCSAqIGJ1dCBzaW5jZSB0aGV5IGFyZSBwb3dlciBvZiB0d28gd2UgY291bGQgdXNlIGEKLQkgKiBjaGVhcGVyIHdheSAtLWN2ZwotCSAqLwotCXJldHVybiBubWlfd2F0Y2hkb2cgJiAoTk1JX0xPQ0FMX0FQSUMgfCBOTUlfSU9fQVBJQyk7Ci19CiAjZW5kaWYKIAotdm9pZCBsYXBpY193YXRjaGRvZ19zdG9wKHZvaWQpOwotaW50IGxhcGljX3dhdGNoZG9nX2luaXQodW5zaWduZWQgbm1pX2h6KTsKLWludCBsYXBpY193ZF9ldmVudCh1bnNpZ25lZCBubWlfaHopOwotdW5zaWduZWQgbGFwaWNfYWRqdXN0X25taV9oeih1bnNpZ25lZCBoeik7Ci12b2lkIGRpc2FibGVfbGFwaWNfbm1pX3dhdGNoZG9nKHZvaWQpOwotdm9pZCBlbmFibGVfbGFwaWNfbm1pX3dhdGNoZG9nKHZvaWQpOwogdm9pZCBzdG9wX25taSh2b2lkKTsKIHZvaWQgcmVzdGFydF9ubWkodm9pZCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydC5oCmluZGV4IGVmOTk3NTguLjc3MDljMTIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnQuaApAQCAtMTEyLDcgKzExMiw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBoYWx0KHZvaWQpCiB7Ci0JUFZPUF9WQ0FMTDAocHZfaXJxX29wcy5zYWZlX2hhbHQpOworCVBWT1BfVkNBTEwwKHB2X2lycV9vcHMuaGFsdCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB3YmludmQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BjaS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGNpLmgKaW5kZXggY2EwNDM3Yy4uNjc2MTI5MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGNpLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGNpLmgKQEAgLTY1LDYgKzY1LDcgQEAKIAogI2RlZmluZSBQQ0lCSU9TX01JTl9DQVJEQlVTX0lPCTB4NDAwMAogCitleHRlcm4gaW50IHBjaWJpb3NfZW5hYmxlZDsKIHZvaWQgcGNpYmlvc19jb25maWdfaW5pdCh2b2lkKTsKIHN0cnVjdCBwY2lfYnVzICpwY2liaW9zX3NjYW5fcm9vdChpbnQgYnVzKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyY3B1LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJjcHUuaAppbmRleCBmODk5ZTAxLi44ZWU0NTE2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJjcHUuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJjcHUuaApAQCAtMjMwLDYgKzIzMCwxMjUgQEAKIH0pCiAKIC8qCisgKiBBZGQgcmV0dXJuIG9wZXJhdGlvbgorICovCisjZGVmaW5lIHBlcmNwdV9hZGRfcmV0dXJuX29wKHZhciwgdmFsKQkJCQkJXAorKHsJCQkJCQkJCQlcCisJdHlwZW9mKHZhcikgcGFyb19yZXRfXyA9IHZhbDsJCQkJCVwKKwlzd2l0Y2ggKHNpemVvZih2YXIpKSB7CQkJCQkJXAorCWNhc2UgMToJCQkJCQkJCVwKKwkJYXNtKCJ4YWRkYiAlMCwgIl9fcGVyY3B1X2FyZygxKQkJCQlcCisJCQkgICAgOiAiK3EiIChwYXJvX3JldF9fKSwgIittIiAodmFyKQkJXAorCQkJICAgIDogOiAibWVtb3J5Iik7CQkJCVwKKwkJYnJlYWs7CQkJCQkJCVwKKwljYXNlIDI6CQkJCQkJCQlcCisJCWFzbSgieGFkZHcgJTAsICJfX3BlcmNwdV9hcmcoMSkJCQkJXAorCQkJICAgIDogIityIiAocGFyb19yZXRfXyksICIrbSIgKHZhcikJCVwKKwkJCSAgICA6IDogIm1lbW9yeSIpOwkJCQlcCisJCWJyZWFrOwkJCQkJCQlcCisJY2FzZSA0OgkJCQkJCQkJXAorCQlhc20oInhhZGRsICUwLCAiX19wZXJjcHVfYXJnKDEpCQkJCVwKKwkJCSAgICA6ICIrciIgKHBhcm9fcmV0X18pLCAiK20iICh2YXIpCQlcCisJCQkgICAgOiA6ICJtZW1vcnkiKTsJCQkJXAorCQlicmVhazsJCQkJCQkJXAorCWNhc2UgODoJCQkJCQkJCVwKKwkJYXNtKCJ4YWRkcSAlMCwgIl9fcGVyY3B1X2FyZygxKQkJCQlcCisJCQkgICAgOiAiK3JlIiAocGFyb19yZXRfXyksICIrbSIgKHZhcikJCVwKKwkJCSAgICA6IDogIm1lbW9yeSIpOwkJCQlcCisJCWJyZWFrOwkJCQkJCQlcCisJZGVmYXVsdDogX19iYWRfcGVyY3B1X3NpemUoKTsJCQkJCVwKKwl9CQkJCQkJCQlcCisJcGFyb19yZXRfXyArPSB2YWw7CQkJCQkJXAorCXBhcm9fcmV0X187CQkJCQkJCVwKK30pCisKKy8qCisgKiB4Y2hnIGlzIGltcGxlbWVudGVkIHVzaW5nIGNtcHhjaGcgd2l0aG91dCBhIGxvY2sgcHJlZml4LiB4Y2hnIGlzCisgKiBleHBlbnNpdmUgZHVlIHRvIHRoZSBpbXBsaWVkIGxvY2sgcHJlZml4LiAgVGhlIHByb2Nlc3NvciBjYW5ub3QgcHJlZmV0Y2gKKyAqIGNhY2hlbGluZXMgaWYgeGNoZyBpcyB1c2VkLgorICovCisjZGVmaW5lIHBlcmNwdV94Y2hnX29wKHZhciwgbnZhbCkJCQkJCVwKKyh7CQkJCQkJCQkJXAorCXR5cGVvZih2YXIpIHB4b19yZXRfXzsJCQkJCQlcCisJdHlwZW9mKHZhcikgcHhvX25ld19fID0gKG52YWwpOwkJCQkJXAorCXN3aXRjaCAoc2l6ZW9mKHZhcikpIHsJCQkJCQlcCisJY2FzZSAxOgkJCQkJCQkJXAorCQlhc20oIlxuMTptb3YgIl9fcGVyY3B1X2FyZygxKSIsJSVhbCIJCQlcCisJCSAgICAiXG5cdGNtcHhjaGdiICUyLCAiX19wZXJjcHVfYXJnKDEpCQkJXAorCQkgICAgIlxuXHRqbnogMWIiCQkJCQlcCisJCQkgICAgOiAiPWEiIChweG9fcmV0X18pLCAiK20iICh2YXIpCQlcCisJCQkgICAgOiAicSIgKHB4b19uZXdfXykJCQkJXAorCQkJICAgIDogIm1lbW9yeSIpOwkJCQlcCisJCWJyZWFrOwkJCQkJCQlcCisJY2FzZSAyOgkJCQkJCQkJXAorCQlhc20oIlxuMTptb3YgIl9fcGVyY3B1X2FyZygxKSIsJSVheCIJCQlcCisJCSAgICAiXG5cdGNtcHhjaGd3ICUyLCAiX19wZXJjcHVfYXJnKDEpCQkJXAorCQkgICAgIlxuXHRqbnogMWIiCQkJCQlcCisJCQkgICAgOiAiPWEiIChweG9fcmV0X18pLCAiK20iICh2YXIpCQlcCisJCQkgICAgOiAiciIgKHB4b19uZXdfXykJCQkJXAorCQkJICAgIDogIm1lbW9yeSIpOwkJCQlcCisJCWJyZWFrOwkJCQkJCQlcCisJY2FzZSA0OgkJCQkJCQkJXAorCQlhc20oIlxuMTptb3YgIl9fcGVyY3B1X2FyZygxKSIsJSVlYXgiCQkJXAorCQkgICAgIlxuXHRjbXB4Y2hnbCAlMiwgIl9fcGVyY3B1X2FyZygxKQkJCVwKKwkJICAgICJcblx0am56IDFiIgkJCQkJXAorCQkJICAgIDogIj1hIiAocHhvX3JldF9fKSwgIittIiAodmFyKQkJXAorCQkJICAgIDogInIiIChweG9fbmV3X18pCQkJCVwKKwkJCSAgICA6ICJtZW1vcnkiKTsJCQkJXAorCQlicmVhazsJCQkJCQkJXAorCWNhc2UgODoJCQkJCQkJCVwKKwkJYXNtKCJcbjE6bW92ICJfX3BlcmNwdV9hcmcoMSkiLCUlcmF4IgkJCVwKKwkJICAgICJcblx0Y21weGNoZ3EgJTIsICJfX3BlcmNwdV9hcmcoMSkJCQlcCisJCSAgICAiXG5cdGpueiAxYiIJCQkJCVwKKwkJCSAgICA6ICI9YSIgKHB4b19yZXRfXyksICIrbSIgKHZhcikJCVwKKwkJCSAgICA6ICJyIiAocHhvX25ld19fKQkJCQlcCisJCQkgICAgOiAibWVtb3J5Iik7CQkJCVwKKwkJYnJlYWs7CQkJCQkJCVwKKwlkZWZhdWx0OiBfX2JhZF9wZXJjcHVfc2l6ZSgpOwkJCQkJXAorCX0JCQkJCQkJCVwKKwlweG9fcmV0X187CQkJCQkJCVwKK30pCisKKy8qCisgKiBjbXB4Y2hnIGhhcyBubyBzdWNoIGltcGxpZWQgbG9jayBzZW1hbnRpY3MgYXMgYSByZXN1bHQgaXQgaXMgbXVjaAorICogbW9yZSBlZmZpY2llbnQgZm9yIGNwdSBsb2NhbCBvcGVyYXRpb25zLgorICovCisjZGVmaW5lIHBlcmNwdV9jbXB4Y2hnX29wKHZhciwgb3ZhbCwgbnZhbCkJCQkJXAorKHsJCQkJCQkJCQlcCisJdHlwZW9mKHZhcikgcGNvX3JldF9fOwkJCQkJCVwKKwl0eXBlb2YodmFyKSBwY29fb2xkX18gPSAob3ZhbCk7CQkJCQlcCisJdHlwZW9mKHZhcikgcGNvX25ld19fID0gKG52YWwpOwkJCQkJXAorCXN3aXRjaCAoc2l6ZW9mKHZhcikpIHsJCQkJCQlcCisJY2FzZSAxOgkJCQkJCQkJXAorCQlhc20oImNtcHhjaGdiICUyLCAiX19wZXJjcHVfYXJnKDEpCQkJXAorCQkJICAgIDogIj1hIiAocGNvX3JldF9fKSwgIittIiAodmFyKQkJXAorCQkJICAgIDogInEiIChwY29fbmV3X18pLCAiMCIgKHBjb19vbGRfXykJCVwKKwkJCSAgICA6ICJtZW1vcnkiKTsJCQkJXAorCQlicmVhazsJCQkJCQkJXAorCWNhc2UgMjoJCQkJCQkJCVwKKwkJYXNtKCJjbXB4Y2hndyAlMiwgIl9fcGVyY3B1X2FyZygxKQkJCVwKKwkJCSAgICA6ICI9YSIgKHBjb19yZXRfXyksICIrbSIgKHZhcikJCVwKKwkJCSAgICA6ICJyIiAocGNvX25ld19fKSwgIjAiIChwY29fb2xkX18pCQlcCisJCQkgICAgOiAibWVtb3J5Iik7CQkJCVwKKwkJYnJlYWs7CQkJCQkJCVwKKwljYXNlIDQ6CQkJCQkJCQlcCisJCWFzbSgiY21weGNoZ2wgJTIsICJfX3BlcmNwdV9hcmcoMSkJCQlcCisJCQkgICAgOiAiPWEiIChwY29fcmV0X18pLCAiK20iICh2YXIpCQlcCisJCQkgICAgOiAiciIgKHBjb19uZXdfXyksICIwIiAocGNvX29sZF9fKQkJXAorCQkJICAgIDogIm1lbW9yeSIpOwkJCQlcCisJCWJyZWFrOwkJCQkJCQlcCisJY2FzZSA4OgkJCQkJCQkJXAorCQlhc20oImNtcHhjaGdxICUyLCAiX19wZXJjcHVfYXJnKDEpCQkJXAorCQkJICAgIDogIj1hIiAocGNvX3JldF9fKSwgIittIiAodmFyKQkJXAorCQkJICAgIDogInIiIChwY29fbmV3X18pLCAiMCIgKHBjb19vbGRfXykJCVwKKwkJCSAgICA6ICJtZW1vcnkiKTsJCQkJXAorCQlicmVhazsJCQkJCQkJXAorCWRlZmF1bHQ6IF9fYmFkX3BlcmNwdV9zaXplKCk7CQkJCQlcCisJfQkJCQkJCQkJXAorCXBjb19yZXRfXzsJCQkJCQkJXAorfSkKKworLyoKICAqIHBlcmNwdV9yZWFkKCkgbWFrZXMgZ2NjIGxvYWQgdGhlIHBlcmNwdSB2YXJpYWJsZSBldmVyeSB0aW1lIGl0IGlzCiAgKiBhY2Nlc3NlZCB3aGlsZSBwZXJjcHVfcmVhZF9zdGFibGUoKSBhbGxvd3MgdGhlIHZhbHVlIHRvIGJlIGNhY2hlZC4KICAqIHBlcmNwdV9yZWFkX3N0YWJsZSgpIGlzIG1vcmUgZWZmaWNpZW50IGFuZCBjYW4gYmUgdXNlZCBpZiBpdHMgdmFsdWUKQEAgLTI2Nyw2ICszODYsMTIgQEAKICNkZWZpbmUgX190aGlzX2NwdV94b3JfMShwY3AsIHZhbCkJcGVyY3B1X3RvX29wKCJ4b3IiLCAocGNwKSwgdmFsKQogI2RlZmluZSBfX3RoaXNfY3B1X3hvcl8yKHBjcCwgdmFsKQlwZXJjcHVfdG9fb3AoInhvciIsIChwY3ApLCB2YWwpCiAjZGVmaW5lIF9fdGhpc19jcHVfeG9yXzQocGNwLCB2YWwpCXBlcmNwdV90b19vcCgieG9yIiwgKHBjcCksIHZhbCkKKy8qCisgKiBHZW5lcmljIGZhbGxiYWNrIG9wZXJhdGlvbnMgZm9yIF9fdGhpc19jcHVfeGNoZ19bMS00XSBhcmUgb2theSBhbmQgbXVjaAorICogZmFzdGVyIHRoYW4gYW4geGNoZyB3aXRoIGZvcmNlZCBsb2NrIHNlbWFudGljcy4KKyAqLworI2RlZmluZSBfX3RoaXNfY3B1X3hjaGdfOChwY3AsIG52YWwpCXBlcmNwdV94Y2hnX29wKHBjcCwgbnZhbCkKKyNkZWZpbmUgX190aGlzX2NwdV9jbXB4Y2hnXzgocGNwLCBvdmFsLCBudmFsKQlwZXJjcHVfY21weGNoZ19vcChwY3AsIG92YWwsIG52YWwpCiAKICNkZWZpbmUgdGhpc19jcHVfcmVhZF8xKHBjcCkJCXBlcmNwdV9mcm9tX29wKCJtb3YiLCAocGNwKSwgIm0iKHBjcCkpCiAjZGVmaW5lIHRoaXNfY3B1X3JlYWRfMihwY3ApCQlwZXJjcHVfZnJvbV9vcCgibW92IiwgKHBjcCksICJtIihwY3ApKQpAQCAtMjg2LDYgKzQxMSwxMSBAQAogI2RlZmluZSB0aGlzX2NwdV94b3JfMShwY3AsIHZhbCkJcGVyY3B1X3RvX29wKCJ4b3IiLCAocGNwKSwgdmFsKQogI2RlZmluZSB0aGlzX2NwdV94b3JfMihwY3AsIHZhbCkJcGVyY3B1X3RvX29wKCJ4b3IiLCAocGNwKSwgdmFsKQogI2RlZmluZSB0aGlzX2NwdV94b3JfNChwY3AsIHZhbCkJcGVyY3B1X3RvX29wKCJ4b3IiLCAocGNwKSwgdmFsKQorI2RlZmluZSB0aGlzX2NwdV94Y2hnXzEocGNwLCBudmFsKQlwZXJjcHVfeGNoZ19vcChwY3AsIG52YWwpCisjZGVmaW5lIHRoaXNfY3B1X3hjaGdfMihwY3AsIG52YWwpCXBlcmNwdV94Y2hnX29wKHBjcCwgbnZhbCkKKyNkZWZpbmUgdGhpc19jcHVfeGNoZ180KHBjcCwgbnZhbCkJcGVyY3B1X3hjaGdfb3AocGNwLCBudmFsKQorI2RlZmluZSB0aGlzX2NwdV94Y2hnXzgocGNwLCBudmFsKQlwZXJjcHVfeGNoZ19vcChwY3AsIG52YWwpCisjZGVmaW5lIHRoaXNfY3B1X2NtcHhjaGdfOChwY3AsIG92YWwsIG52YWwpCXBlcmNwdV9jbXB4Y2hnX29wKHBjcCwgb3ZhbCwgbnZhbCkKIAogI2RlZmluZSBpcnFzYWZlX2NwdV9hZGRfMShwY3AsIHZhbCkJcGVyY3B1X2FkZF9vcCgocGNwKSwgdmFsKQogI2RlZmluZSBpcnFzYWZlX2NwdV9hZGRfMihwY3AsIHZhbCkJcGVyY3B1X2FkZF9vcCgocGNwKSwgdmFsKQpAQCAtMjk5LDYgKzQyOSwzMSBAQAogI2RlZmluZSBpcnFzYWZlX2NwdV94b3JfMShwY3AsIHZhbCkJcGVyY3B1X3RvX29wKCJ4b3IiLCAocGNwKSwgdmFsKQogI2RlZmluZSBpcnFzYWZlX2NwdV94b3JfMihwY3AsIHZhbCkJcGVyY3B1X3RvX29wKCJ4b3IiLCAocGNwKSwgdmFsKQogI2RlZmluZSBpcnFzYWZlX2NwdV94b3JfNChwY3AsIHZhbCkJcGVyY3B1X3RvX29wKCJ4b3IiLCAocGNwKSwgdmFsKQorI2RlZmluZSBpcnFzYWZlX2NwdV94Y2hnXzEocGNwLCBudmFsKQlwZXJjcHVfeGNoZ19vcChwY3AsIG52YWwpCisjZGVmaW5lIGlycXNhZmVfY3B1X3hjaGdfMihwY3AsIG52YWwpCXBlcmNwdV94Y2hnX29wKHBjcCwgbnZhbCkKKyNkZWZpbmUgaXJxc2FmZV9jcHVfeGNoZ180KHBjcCwgbnZhbCkJcGVyY3B1X3hjaGdfb3AocGNwLCBudmFsKQorI2RlZmluZSBpcnFzYWZlX2NwdV94Y2hnXzgocGNwLCBudmFsKQlwZXJjcHVfeGNoZ19vcChwY3AsIG52YWwpCisjZGVmaW5lIGlycXNhZmVfY3B1X2NtcHhjaGdfOChwY3AsIG92YWwsIG52YWwpCXBlcmNwdV9jbXB4Y2hnX29wKHBjcCwgb3ZhbCwgbnZhbCkKKworI2lmbmRlZiBDT05GSUdfTTM4NgorI2RlZmluZSBfX3RoaXNfY3B1X2FkZF9yZXR1cm5fMShwY3AsIHZhbCkgcGVyY3B1X2FkZF9yZXR1cm5fb3AocGNwLCB2YWwpCisjZGVmaW5lIF9fdGhpc19jcHVfYWRkX3JldHVybl8yKHBjcCwgdmFsKSBwZXJjcHVfYWRkX3JldHVybl9vcChwY3AsIHZhbCkKKyNkZWZpbmUgX190aGlzX2NwdV9hZGRfcmV0dXJuXzQocGNwLCB2YWwpIHBlcmNwdV9hZGRfcmV0dXJuX29wKHBjcCwgdmFsKQorI2RlZmluZSBfX3RoaXNfY3B1X2NtcHhjaGdfMShwY3AsIG92YWwsIG52YWwpCXBlcmNwdV9jbXB4Y2hnX29wKHBjcCwgb3ZhbCwgbnZhbCkKKyNkZWZpbmUgX190aGlzX2NwdV9jbXB4Y2hnXzIocGNwLCBvdmFsLCBudmFsKQlwZXJjcHVfY21weGNoZ19vcChwY3AsIG92YWwsIG52YWwpCisjZGVmaW5lIF9fdGhpc19jcHVfY21weGNoZ180KHBjcCwgb3ZhbCwgbnZhbCkJcGVyY3B1X2NtcHhjaGdfb3AocGNwLCBvdmFsLCBudmFsKQorCisjZGVmaW5lIHRoaXNfY3B1X2FkZF9yZXR1cm5fMShwY3AsIHZhbCkJcGVyY3B1X2FkZF9yZXR1cm5fb3AocGNwLCB2YWwpCisjZGVmaW5lIHRoaXNfY3B1X2FkZF9yZXR1cm5fMihwY3AsIHZhbCkJcGVyY3B1X2FkZF9yZXR1cm5fb3AocGNwLCB2YWwpCisjZGVmaW5lIHRoaXNfY3B1X2FkZF9yZXR1cm5fNChwY3AsIHZhbCkJcGVyY3B1X2FkZF9yZXR1cm5fb3AocGNwLCB2YWwpCisjZGVmaW5lIHRoaXNfY3B1X2NtcHhjaGdfMShwY3AsIG92YWwsIG52YWwpCXBlcmNwdV9jbXB4Y2hnX29wKHBjcCwgb3ZhbCwgbnZhbCkKKyNkZWZpbmUgdGhpc19jcHVfY21weGNoZ18yKHBjcCwgb3ZhbCwgbnZhbCkJcGVyY3B1X2NtcHhjaGdfb3AocGNwLCBvdmFsLCBudmFsKQorI2RlZmluZSB0aGlzX2NwdV9jbXB4Y2hnXzQocGNwLCBvdmFsLCBudmFsKQlwZXJjcHVfY21weGNoZ19vcChwY3AsIG92YWwsIG52YWwpCisKKyNkZWZpbmUgaXJxc2FmZV9jcHVfY21weGNoZ18xKHBjcCwgb3ZhbCwgbnZhbCkJcGVyY3B1X2NtcHhjaGdfb3AocGNwLCBvdmFsLCBudmFsKQorI2RlZmluZSBpcnFzYWZlX2NwdV9jbXB4Y2hnXzIocGNwLCBvdmFsLCBudmFsKQlwZXJjcHVfY21weGNoZ19vcChwY3AsIG92YWwsIG52YWwpCisjZGVmaW5lIGlycXNhZmVfY3B1X2NtcHhjaGdfNChwY3AsIG92YWwsIG52YWwpCXBlcmNwdV9jbXB4Y2hnX29wKHBjcCwgb3ZhbCwgbnZhbCkKKyNlbmRpZiAvKiAhQ09ORklHX00zODYgKi8KIAogLyoKICAqIFBlciBjcHUgYXRvbWljIDY0IGJpdCBvcGVyYXRpb25zIGFyZSBvbmx5IGF2YWlsYWJsZSB1bmRlciA2NCBiaXQuCkBAIC0zMTEsNiArNDY2LDcgQEAKICNkZWZpbmUgX190aGlzX2NwdV9hbmRfOChwY3AsIHZhbCkJcGVyY3B1X3RvX29wKCJhbmQiLCAocGNwKSwgdmFsKQogI2RlZmluZSBfX3RoaXNfY3B1X29yXzgocGNwLCB2YWwpCXBlcmNwdV90b19vcCgib3IiLCAocGNwKSwgdmFsKQogI2RlZmluZSBfX3RoaXNfY3B1X3hvcl84KHBjcCwgdmFsKQlwZXJjcHVfdG9fb3AoInhvciIsIChwY3ApLCB2YWwpCisjZGVmaW5lIF9fdGhpc19jcHVfYWRkX3JldHVybl84KHBjcCwgdmFsKSBwZXJjcHVfYWRkX3JldHVybl9vcChwY3AsIHZhbCkKIAogI2RlZmluZSB0aGlzX2NwdV9yZWFkXzgocGNwKQkJcGVyY3B1X2Zyb21fb3AoIm1vdiIsIChwY3ApLCAibSIocGNwKSkKICNkZWZpbmUgdGhpc19jcHVfd3JpdGVfOChwY3AsIHZhbCkJcGVyY3B1X3RvX29wKCJtb3YiLCAocGNwKSwgdmFsKQpAQCAtMzE4LDEyICs0NzQsMTIgQEAKICNkZWZpbmUgdGhpc19jcHVfYW5kXzgocGNwLCB2YWwpCXBlcmNwdV90b19vcCgiYW5kIiwgKHBjcCksIHZhbCkKICNkZWZpbmUgdGhpc19jcHVfb3JfOChwY3AsIHZhbCkJCXBlcmNwdV90b19vcCgib3IiLCAocGNwKSwgdmFsKQogI2RlZmluZSB0aGlzX2NwdV94b3JfOChwY3AsIHZhbCkJcGVyY3B1X3RvX29wKCJ4b3IiLCAocGNwKSwgdmFsKQorI2RlZmluZSB0aGlzX2NwdV9hZGRfcmV0dXJuXzgocGNwLCB2YWwpCXBlcmNwdV9hZGRfcmV0dXJuX29wKHBjcCwgdmFsKQogCiAjZGVmaW5lIGlycXNhZmVfY3B1X2FkZF84KHBjcCwgdmFsKQlwZXJjcHVfYWRkX29wKChwY3ApLCB2YWwpCiAjZGVmaW5lIGlycXNhZmVfY3B1X2FuZF84KHBjcCwgdmFsKQlwZXJjcHVfdG9fb3AoImFuZCIsIChwY3ApLCB2YWwpCiAjZGVmaW5lIGlycXNhZmVfY3B1X29yXzgocGNwLCB2YWwpCXBlcmNwdV90b19vcCgib3IiLCAocGNwKSwgdmFsKQogI2RlZmluZSBpcnFzYWZlX2NwdV94b3JfOChwY3AsIHZhbCkJcGVyY3B1X3RvX29wKCJ4b3IiLCAocGNwKSwgdmFsKQotCiAjZW5kaWYKIAogLyogVGhpcyBpcyBub3QgYXRvbWljIGFnYWluc3Qgb3RoZXIgQ1BVcyAtLSBDUFUgcHJlZW1wdGlvbiBuZWVkcyB0byBiZSBvZmYgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaAppbmRleCA1NTBlMjZiLi5kOWQ0ZGFlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oCkBAIC0xMjUsNyArMTI1LDYgQEAKICNkZWZpbmUgSUJTX09QX01BWF9DTlRfRVhUCTB4MDA3RkZGRkZVTEwJLyogbm90IGEgcmVnaXN0ZXIgYml0IG1hc2sgKi8KIAogI2lmZGVmIENPTkZJR19QRVJGX0VWRU5UUwotZXh0ZXJuIHZvaWQgaW5pdF9od19wZXJmX2V2ZW50cyh2b2lkKTsKIGV4dGVybiB2b2lkIHBlcmZfZXZlbnRzX2xhcGljX2luaXQodm9pZCk7CiAKICNkZWZpbmUgUEVSRl9FVkVOVF9JTkRFWF9PRkZTRVQJCQkwCkBAIC0xNTYsNyArMTU1LDYgQEAKIH0KIAogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X2h3X3BlcmZfZXZlbnRzKHZvaWQpCQl7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2V2ZW50c19sYXBpY19pbml0KHZvaWQpCXsgfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmZfZXZlbnRfcDQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmZfZXZlbnRfcDQuaAppbmRleCBhNzBjZDIxLi4yOTVlMmZmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50X3A0LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyZl9ldmVudF9wNC5oCkBAIC03NDQsMTQgKzc0NCw2IEBACiB9OwogCiAvKgotICogUDQgUEVCUyBzcGVjaWZpY3MgKFJlcGxheSBFdmVudCBvbmx5KQotICoKLSAqIEZvcm1hdCAoYml0cyk6Ci0gKiAgIDAtNjogbWV0cmljIGZyb20gUDRfUEVCU19NRVRSSUMgZW51bQotICogICAgNyA6IHJlc2VydmVkCi0gKiAgICA4IDogcmVzZXJ2ZWQKLSAqIDktMTEgOiByZXNlcnZlZAotICoKICAqIE5vdGUgd2UgaGF2ZSBVT1AgYW5kIFBFQlMgYml0cyByZXNlcnZlZCBmb3Igbm93CiAgKiBqdXN0IGluIGNhc2UgaWYgd2Ugd2lsbCBuZWVkIHRoZW0gb25jZQogICovCkBAIC03ODgsNSArNzgwLDYwIEBACiAJUDRfUEVCU19NRVRSSUNfX21heAogfTsKIAorLyoKKyAqIE5vdGVzIG9uIGludGVybmFsIGNvbmZpZ3VyYXRpb24gb2YgRVNDUitDQ0NSIHR1cGxlcworICoKKyAqIFNpbmNlIFA0IGhhcyBxdWl0ZSB0aGUgZGlmZmVyZW50IGFyY2hpdGVjdHVyZSBvZgorICogcGVyZm9ybWFuY2UgcmVnaXN0ZXJzIGluIGNvbXBhcmUgd2l0aCAiYXJjaGl0ZWN0dXJhbCIKKyAqIG9uY2UgYW5kIHdlIGhhdmUgb24gNjQgYml0cyB0byBrZWVwIGNvbmZpZ3VyYXRpb24KKyAqIG9mIHBlcmZvcm1hbmNlIGV2ZW50LCB0aGUgZm9sbG93aW5nIHRyaWNrIGlzIHVzZWQuCisgKgorICogMSkgU2luY2UgYm90aCBFU0NSIGFuZCBDQ0NSIHJlZ2lzdGVycyBoYXZlIG9ubHkgbG93CisgKiAgICAzMiBiaXRzIHZhbHVhYmxlLCB3ZSBwYWNrIHRoZW0gaW50byBhIHNpbmdsZSA2NCBiaXQKKyAqICAgIGNvbmZpZ3VyYXRpb24uIExvdyAzMiBiaXRzIG9mIHN1Y2ggY29uZmlnIGNvcnJlc3BvbmQKKyAqICAgIHRvIGxvdyAzMiBiaXRzIG9mIENDQ1IgcmVnaXN0ZXIgYW5kIGhpZ2ggMzIgYml0cworICogICAgY29ycmVzcG9uZCB0byBsb3cgMzIgYml0cyBvZiBFU0NSIHJlZ2lzdGVyLgorICoKKyAqIDIpIFRoZSBtZWFuaW5nIG9mIGV2ZXJ5IGJpdCBvZiBzdWNoIGNvbmZpZyBmaWVsZCBjYW4KKyAqICAgIGJlIGZvdW5kIGluIEludGVsIFNETSBidXQgaXQgc2hvdWxkIGJlIG5vdGVkIHRoYXQKKyAqICAgIHdlICJib3Jyb3ciIHNvbWUgcmVzZXJ2ZWQgYml0cyBmb3Igb3duIHVzYWdlIGFuZAorICogICAgY2xlYW4gdGhlbSBvciBzZXQgdG8gYSBwcm9wZXIgdmFsdWUgd2hlbiB3ZSBkbworICogICAgYSByZWFsIHdyaXRlIHRvIGhhcmR3YXJlIHJlZ2lzdGVycy4KKyAqCisgKiAzKSBUaGUgZm9ybWF0IG9mIGJpdHMgb2YgY29uZmlnIGlzIHRoZSBmb2xsb3dpbmcKKyAqICAgIGFuZCBzaG91bGQgYmUgZWl0aGVyIDAgb3Igc2V0IHRvIHNvbWUgcHJlZGVmaW5lZAorICogICAgdmFsdWVzOgorICoKKyAqICAgIExvdyAzMiBiaXRzCisgKiAgICAtLS0tLS0tLS0tLQorICogICAgICAwLTY6IFA0X1BFQlNfTUVUUklDIGVudW0KKyAqICAgICA3LTExOiAgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQKKyAqICAgICAgIDEyOiAgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQgKEVuYWJsZSkKKyAqICAgIDEzLTE1OiAgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQgKEVTQ1Igc2VsZWN0KQorICogICAgMTYtMTc6IEFjdGl2ZSBUaHJlYWQKKyAqICAgICAgIDE4OiBDb21wYXJlCisgKiAgICAgICAxOTogQ29tcGxlbWVudAorICogICAgMjAtMjM6IFRocmVzaG9sZAorICogICAgICAgMjQ6IEVkZ2UKKyAqICAgICAgIDI1OiAgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQgKEZPUkNFX09WRikKKyAqICAgICAgIDI2OiAgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQgKE9WRl9QTUlfVDApCisgKiAgICAgICAyNzogICAgICAgICAgICAgICAgICAgIHJlc2VydmVkIChPVkZfUE1JX1QxKQorICogICAgMjgtMjk6ICAgICAgICAgICAgICAgICAgICByZXNlcnZlZAorICogICAgICAgMzA6ICAgICAgICAgICAgICAgICAgICByZXNlcnZlZCAoQ2FzY2FkZSkKKyAqICAgICAgIDMxOiAgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQgKE9WRikKKyAqCisgKiAgICBIaWdoIDMyIGJpdHMKKyAqICAgIC0tLS0tLS0tLS0tLQorICogICAgICAgIDA6ICAgICAgICAgICAgICAgICAgICByZXNlcnZlZCAoVDFfVVNSKQorICogICAgICAgIDE6ICAgICAgICAgICAgICAgICAgICByZXNlcnZlZCAoVDFfT1MpCisgKiAgICAgICAgMjogICAgICAgICAgICAgICAgICAgIHJlc2VydmVkIChUMF9VU1IpCisgKiAgICAgICAgMzogICAgICAgICAgICAgICAgICAgIHJlc2VydmVkIChUMF9PUykKKyAqICAgICAgICA0OiBUYWcgRW5hYmxlCisgKiAgICAgIDUtODogVGFnIFZhbHVlCisgKiAgICAgOS0yNDogRXZlbnQgTWFzayAobWF5IHVzZSBQNF9FU0NSX0VNQVNLX0JJVCBoZWxwZXIpCisgKiAgICAyNS0zMDogZW51bSBQNF9FVkVOVFMKKyAqICAgICAgIDMxOiAgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQgKEhUIHRocmVhZCkKKyAqLworCiAjZW5kaWYgLyogUEVSRl9FVkVOVF9QNF9IICovCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKaW5kZXggY2FlOWMzYy4uYzZlZmVjZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKQEAgLTE0MSwxMCArMTQxLDkgQEAKICNpZmRlZiBDT05GSUdfU01QCiBERUNMQVJFX1BFUl9DUFVfU0hBUkVEX0FMSUdORUQoc3RydWN0IGNwdWluZm9feDg2LCBjcHVfaW5mbyk7CiAjZGVmaW5lIGNwdV9kYXRhKGNwdSkJCXBlcl9jcHUoY3B1X2luZm8sIGNwdSkKLSNkZWZpbmUgY3VycmVudF9jcHVfZGF0YQlfX2dldF9jcHVfdmFyKGNwdV9pbmZvKQogI2Vsc2UKKyNkZWZpbmUgY3B1X2luZm8JCWJvb3RfY3B1X2RhdGEKICNkZWZpbmUgY3B1X2RhdGEoY3B1KQkJYm9vdF9jcHVfZGF0YQotI2RlZmluZSBjdXJyZW50X2NwdV9kYXRhCWJvb3RfY3B1X2RhdGEKICNlbmRpZgogCiBleHRlcm4gY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGNwdWluZm9fb3A7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXR1cC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0dXAuaAppbmRleCBkNjc2M2IxMzlhLi5kYjhhYTE5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXR1cC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NldHVwLmgKQEAgLTUzLDYgKzUzLDEyIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgeDg2X21yc3RfZWFybHlfc2V0dXAodm9pZCkgeyB9CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19YODZfSU5URUxfQ0UKK2V4dGVybiB2b2lkIHg4Nl9jZTQxMDBfZWFybHlfc2V0dXAodm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHg4Nl9jZTQxMDBfZWFybHlfc2V0dXAodm9pZCkgeyB9CisjZW5kaWYKKwogI2lmbmRlZiBfU0VUVVAKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NtcGJvb3RfaG9va3MuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NtcGJvb3RfaG9va3MuaAppbmRleCAxZGVmNjAxLi42YzIyYmYzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zbXBib290X2hvb2tzLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc21wYm9vdF9ob29rcy5oCkBAIC00OCw3ICs0OCw2IEBACiAJCXNldHVwX0lPX0FQSUMoKTsKIAllbHNlIHsKIAkJbnJfaW9hcGljcyA9IDA7Ci0JCWxvY2FsaXNlX25taV93YXRjaGRvZygpOwogCX0KICNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RhY2t0cmFjZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RhY2t0cmFjZS5oCmluZGV4IDJiMTZhMmEuLjUyYjVjN2UgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0YWNrdHJhY2UuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdGFja3RyYWNlLmgKQEAgLTcsNiArNyw3IEBACiAjZGVmaW5lIF9BU01fWDg2X1NUQUNLVFJBQ0VfSAogCiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogCiBleHRlcm4gaW50IGtzdGFja19kZXB0aF90b19wcmludDsKIApAQCAtNDYsNyArNDcsNyBAQAogfTsKIAogdm9pZCBkdW1wX3RyYWNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKLQkJdW5zaWduZWQgbG9uZyAqc3RhY2ssIHVuc2lnbmVkIGxvbmcgYnAsCisJCXVuc2lnbmVkIGxvbmcgKnN0YWNrLAogCQljb25zdCBzdHJ1Y3Qgc3RhY2t0cmFjZV9vcHMgKm9wcywgdm9pZCAqZGF0YSk7CiAKICNpZmRlZiBDT05GSUdfWDg2XzMyCkBAIC01NywxMyArNTgsMzkgQEAKICNkZWZpbmUgZ2V0X2JwKGJwKSBhc20oIm1vdnEgJSVyYnAsICUwIiA6ICI9ciIgKGJwKSA6KQogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfRlJBTUVfUE9JTlRFUgorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCitzdGFja19mcmFtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIGxvbmcgYnA7CisKKwlpZiAocmVncykKKwkJcmV0dXJuIHJlZ3MtPmJwOworCisJaWYgKHRhc2sgPT0gY3VycmVudCkgeworCQkvKiBHcmFiIGJwIHJpZ2h0IGZyb20gb3VyIHJlZ3MgKi8KKwkJZ2V0X2JwKGJwKTsKKwkJcmV0dXJuIGJwOworCX0KKworCS8qIGJwIGlzIHRoZSBsYXN0IHJlZyBwdXNoZWQgYnkgc3dpdGNoX3RvICovCisJcmV0dXJuICoodW5zaWduZWQgbG9uZyAqKXRhc2stPnRocmVhZC5zcDsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK3N0YWNrX2ZyYW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKwogZXh0ZXJuIHZvaWQKIHNob3dfdHJhY2VfbG9nX2x2bChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBwdF9yZWdzICpyZWdzLAotCQl1bnNpZ25lZCBsb25nICpzdGFjaywgdW5zaWduZWQgbG9uZyBicCwgY2hhciAqbG9nX2x2bCk7CisJCSAgIHVuc2lnbmVkIGxvbmcgKnN0YWNrLCBjaGFyICpsb2dfbHZsKTsKIAogZXh0ZXJuIHZvaWQKIHNob3dfc3RhY2tfbG9nX2x2bChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBwdF9yZWdzICpyZWdzLAotCQl1bnNpZ25lZCBsb25nICpzcCwgdW5zaWduZWQgbG9uZyBicCwgY2hhciAqbG9nX2x2bCk7CisJCSAgIHVuc2lnbmVkIGxvbmcgKnNwLCBjaGFyICpsb2dfbHZsKTsKIAogZXh0ZXJuIHVuc2lnbmVkIGludCBjb2RlX2J5dGVzOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90aW1lci5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGltZXIuaAppbmRleCA1NDY5NjMwLi5mYTdiOTE3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90aW1lci5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RpbWVyLmgKQEAgLTEwLDEyICsxMCw2IEBACiB1bnNpZ25lZCBsb25nIGxvbmcgbmF0aXZlX3NjaGVkX2Nsb2NrKHZvaWQpOwogZXh0ZXJuIGludCByZWNhbGlicmF0ZV9jcHVfa2h6KHZvaWQpOwogCi0jaWYgZGVmaW5lZChDT05GSUdfWDg2XzMyKSAmJiBkZWZpbmVkKENPTkZJR19YODZfSU9fQVBJQykKLWV4dGVybiBpbnQgdGltZXJfYWNrOwotI2Vsc2UKLSMgZGVmaW5lIHRpbWVyX2FjayAoMCkKLSNlbmRpZgotCiBleHRlcm4gaW50IG5vX3RpbWVyX2NoZWNrOwogCiAvKiBBY2NlbGVyYXRvcnMgZm9yIHNjaGVkX2Nsb2NrKCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L3V2X2JhdS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfYmF1LmgKaW5kZXggNDJkNDEyZi4uY2UxZDU0YyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfYmF1LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfYmF1LmgKQEAgLTI2LDIwICsyNiwyMiBAQAogICogQkFVX1NCX0RFU0NSSVBUT1JfQkFTRSByZWdpc3Rlciwgc2V0IDEgaXMgbG9jYXRlZCBhdCBCQVNFICsgNTEyLAogICogc2V0IDIgaXMgYXQgQkFTRSArIDIqNTEyLCBzZXQgMyBhdCBCQVNFICsgMyo1MTIsIGFuZCBzbyBvbi4KICAqCi0gKiBXZSB3aWxsIHVzZSAzMSBzZXRzLCBvbmUgZm9yIHNlbmRpbmcgQkFVIG1lc3NhZ2VzIGZyb20gZWFjaCBvZiB0aGUgMzIKKyAqIFdlIHdpbGwgdXNlIG9uZSBzZXQgZm9yIHNlbmRpbmcgQkFVIG1lc3NhZ2VzIGZyb20gZWFjaCBvZiB0aGUKICAqIGNwdSdzIG9uIHRoZSB1dmh1Yi4KICAqCiAgKiBUTEIgc2hvb3Rkb3duIHdpbGwgdXNlIHRoZSBmaXJzdCBvZiB0aGUgOCBkZXNjcmlwdG9ycyBvZiBlYWNoIHNldC4KICAqIEVhY2ggb2YgdGhlIGRlc2NyaXB0b3JzIGlzIDY0IGJ5dGVzIGluIHNpemUgKDgqNjQgPSA1MTIgYnl0ZXMgaW4gYSBzZXQpLgogICovCiAKKyNkZWZpbmUgTUFYX0NQVVNfUEVSX1VWSFVCCQk2NAorI2RlZmluZSBNQVhfQ1BVU19QRVJfU09DS0VUCQkzMgorI2RlZmluZSBVVl9BRFBfU0laRQkJCTY0IC8qIGhhcmR3YXJlLXByb3ZpZGVkIG1heC4gKi8KKyNkZWZpbmUgVVZfQ1BVU19QRVJfQUNUX1NUQVRVUwkJMzIgLyogaGFyZHdhcmUtcHJvdmlkZWQgbWF4LiAqLwogI2RlZmluZSBVVl9JVEVNU19QRVJfREVTQ1JJUFRPUgkJOAogLyogdGhlICd0aHJvdHRsZScgdG8gcHJldmVudCB0aGUgaGFyZHdhcmUgc3RheS1idXN5IGJ1ZyAqLwogI2RlZmluZSBNQVhfQkFVX0NPTkNVUlJFTlQJCTMKLSNkZWZpbmUgVVZfQ1BVU19QRVJfQUNUX1NUQVRVUwkJMzIKICNkZWZpbmUgVVZfQUNUX1NUQVRVU19NQVNLCQkweDMKICNkZWZpbmUgVVZfQUNUX1NUQVRVU19TSVpFCQkyCi0jZGVmaW5lIFVWX0FEUF9TSVpFCQkJMzIKICNkZWZpbmUgVVZfRElTVFJJQlVUSU9OX1NJWkUJCTI1NgogI2RlZmluZSBVVl9TV19BQ0tfTlBFTkRJTkcJCTgKICNkZWZpbmUgVVZfTkVUX0VORFBPSU5UX0lOVEQJCTB4MzgKQEAgLTEwMCw3ICsxMDIsNiBAQAogICogbnVtYmVyIG9mIGRlc3RpbmF0aW9uIHNpZGUgc29mdHdhcmUgYWNrIHJlc291cmNlcwogICovCiAjZGVmaW5lIERFU1RfTlVNX1JFU09VUkNFUwkJOAotI2RlZmluZSBNQVhfQ1BVU19QRVJfTk9ERQkJMzIKIC8qCiAgKiBjb21wbGV0aW9uIHN0YXR1c2VzIGZvciBzZW5kaW5nIGEgVExCIGZsdXNoIG1lc3NhZ2UKICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL01ha2VmaWxlIGIvYXJjaC94ODYva2VybmVsL01ha2VmaWxlCmluZGV4IDFlOTk0NzUuLjM0MjQ0YjIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9rZXJuZWwvTWFrZWZpbGUKQEAgLTg1LDcgKzg1LDYgQEAKIG9iai0kKENPTkZJR19LR0RCKQkJKz0ga2dkYi5vCiBvYmotJChDT05GSUdfVk04NikJCSs9IHZtODZfMzIubwogb2JqLSQoQ09ORklHX0VBUkxZX1BSSU5USykJKz0gZWFybHlfcHJpbnRrLm8KLW9iai0kKENPTkZJR19FQVJMWV9QUklOVEtfTVJTVCkJKz0gZWFybHlfcHJpbnRrX21yc3QubwogCiBvYmotJChDT05GSUdfSFBFVF9USU1FUikgCSs9IGhwZXQubwogb2JqLSQoQ09ORklHX0FQQl9USU1FUikJCSs9IGFwYl90aW1lci5vCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9ib290LmMgYi9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9ib290LmMKaW5kZXggNzEyMzJiOS4uZWM4ODFjNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FjcGkvYm9vdC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL2Jvb3QuYwpAQCAtMTk4LDYgKzE5OCwxMSBAQAogewogCXVuc2lnbmVkIGludCB2ZXIgPSAwOwogCisJaWYgKGlkID49IChNQVhfTE9DQUxfQVBJQy0xKSkgeworCQlwcmludGsoS0VSTl9JTkZPIFBSRUZJWCAic2tpcHBlZCBhcGljaWQgdGhhdCBpcyB0b28gYmlnXG4iKTsKKwkJcmV0dXJuOworCX0KKwogCWlmICghZW5hYmxlZCkgewogCQkrK2Rpc2FibGVkX2NwdXM7CiAJCXJldHVybjsKQEAgLTg0NywxOCArODUyLDYgQEAKICAqIHJldHVybnMgMCBvbiBzdWNjZXNzLCA8IDAgb24gZXJyb3IKICAqLwogCi1zdGF0aWMgdm9pZCBfX2luaXQgYWNwaV9yZWdpc3Rlcl9sYXBpY19hZGRyZXNzKHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKLXsKLQltcF9sYXBpY19hZGRyID0gYWRkcmVzczsKLQotCXNldF9maXhtYXBfbm9jYWNoZShGSVhfQVBJQ19CQVNFLCBhZGRyZXNzKTsKLQlpZiAoYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkID09IC0xVSkgewotCQlib290X2NwdV9waHlzaWNhbF9hcGljaWQgID0gcmVhZF9hcGljX2lkKCk7Ci0JCWFwaWNfdmVyc2lvbltib290X2NwdV9waHlzaWNhbF9hcGljaWRdID0KLQkJCSBHRVRfQVBJQ19WRVJTSU9OKGFwaWNfcmVhZChBUElDX0xWUikpOwotCX0KLX0KLQogc3RhdGljIGludCBfX2luaXQgZWFybHlfYWNwaV9wYXJzZV9tYWR0X2xhcGljX2FkZHJfb3ZyKHZvaWQpCiB7CiAJaW50IGNvdW50OwpAQCAtODgwLDcgKzg3Myw3IEBACiAJCXJldHVybiBjb3VudDsKIAl9CiAKLQlhY3BpX3JlZ2lzdGVyX2xhcGljX2FkZHJlc3MoYWNwaV9sYXBpY19hZGRyKTsKKwlyZWdpc3Rlcl9sYXBpY19hZGRyZXNzKGFjcGlfbGFwaWNfYWRkcik7CiAKIAlyZXR1cm4gY291bnQ7CiB9CkBAIC05MDcsMTYgKzkwMCwxNiBAQAogCQlyZXR1cm4gY291bnQ7CiAJfQogCi0JYWNwaV9yZWdpc3Rlcl9sYXBpY19hZGRyZXNzKGFjcGlfbGFwaWNfYWRkcik7CisJcmVnaXN0ZXJfbGFwaWNfYWRkcmVzcyhhY3BpX2xhcGljX2FkZHIpOwogCiAJY291bnQgPSBhY3BpX3RhYmxlX3BhcnNlX21hZHQoQUNQSV9NQURUX1RZUEVfTE9DQUxfU0FQSUMsCi0JCQkJICAgICAgYWNwaV9wYXJzZV9zYXBpYywgTUFYX0FQSUNTKTsKKwkJCQkgICAgICBhY3BpX3BhcnNlX3NhcGljLCBNQVhfTE9DQUxfQVBJQyk7CiAKIAlpZiAoIWNvdW50KSB7CiAJCXgyY291bnQgPSBhY3BpX3RhYmxlX3BhcnNlX21hZHQoQUNQSV9NQURUX1RZUEVfTE9DQUxfWDJBUElDLAotCQkJCQkJYWNwaV9wYXJzZV94MmFwaWMsIE1BWF9BUElDUyk7CisJCQkJCWFjcGlfcGFyc2VfeDJhcGljLCBNQVhfTE9DQUxfQVBJQyk7CiAJCWNvdW50ID0gYWNwaV90YWJsZV9wYXJzZV9tYWR0KEFDUElfTUFEVF9UWVBFX0xPQ0FMX0FQSUMsCi0JCQkJCSAgICAgIGFjcGlfcGFyc2VfbGFwaWMsIE1BWF9BUElDUyk7CisJCQkJCWFjcGlfcGFyc2VfbGFwaWMsIE1BWF9MT0NBTF9BUElDKTsKIAl9CiAJaWYgKCFjb3VudCAmJiAheDJjb3VudCkgewogCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICJObyBMQVBJQyBlbnRyaWVzIHByZXNlbnRcbiIpOwpAQCAtOTQ5LDMyICs5NDIsNiBAQAogZXh0ZXJuIGludCBlczcwMDBfcGxhdDsKICNlbmRpZgogCi1zdGF0aWMgdm9pZCBhc3NpZ25fdG9fbXBfaXJxKHN0cnVjdCBtcGNfaW50c3JjICptLAotCQkJCSAgICBzdHJ1Y3QgbXBjX2ludHNyYyAqbXBfaXJxKQotewotCW1lbWNweShtcF9pcnEsIG0sIHNpemVvZihzdHJ1Y3QgbXBjX2ludHNyYykpOwotfQotCi1zdGF0aWMgaW50IG1wX2lycV9jbXAoc3RydWN0IG1wY19pbnRzcmMgKm1wX2lycSwKLQkJCQlzdHJ1Y3QgbXBjX2ludHNyYyAqbSkKLXsKLQlyZXR1cm4gbWVtY21wKG1wX2lycSwgbSwgc2l6ZW9mKHN0cnVjdCBtcGNfaW50c3JjKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNhdmVfbXBfaXJxKHN0cnVjdCBtcGNfaW50c3JjICptKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IG1wX2lycV9lbnRyaWVzOyBpKyspIHsKLQkJaWYgKCFtcF9pcnFfY21wKCZtcF9pcnFzW2ldLCBtKSkKLQkJCXJldHVybjsKLQl9Ci0KLQlhc3NpZ25fdG9fbXBfaXJxKG0sICZtcF9pcnFzW21wX2lycV9lbnRyaWVzXSk7Ci0JaWYgKCsrbXBfaXJxX2VudHJpZXMgPT0gTUFYX0lSUV9TT1VSQ0VTKQotCQlwYW5pYygiTWF4ICMgb2YgaXJxIHNvdXJjZXMgZXhjZWVkZWQhIVxuIik7Ci19Ci0KIHZvaWQgX19pbml0IG1wX292ZXJyaWRlX2xlZ2FjeV9pcnEodTggYnVzX2lycSwgdTggcG9sYXJpdHksIHU4IHRyaWdnZXIsIHUzMiBnc2kpCiB7CiAJaW50IGlvYXBpYzsKQEAgLTEwMDUsNyArOTcyLDcgQEAKIAltcF9pcnEuZHN0YXBpYyA9IG1wX2lvYXBpY3NbaW9hcGljXS5hcGljaWQ7IC8qIEFQSUMgSUQgKi8KIAltcF9pcnEuZHN0aXJxID0gcGluOwkvKiBJTlRJTiMgKi8KIAotCXNhdmVfbXBfaXJxKCZtcF9pcnEpOworCW1wX3NhdmVfaXJxKCZtcF9pcnEpOwogCiAJaXNhX2lycV90b19nc2lbYnVzX2lycV0gPSBnc2k7CiB9CkBAIC0xMDgwLDcgKzEwNDcsNyBAQAogCQltcF9pcnEuc3JjYnVzaXJxID0gaTsgLyogSWRlbnRpdHkgbWFwcGVkICovCiAJCW1wX2lycS5kc3RpcnEgPSBwaW47CiAKLQkJc2F2ZV9tcF9pcnEoJm1wX2lycSk7CisJCW1wX3NhdmVfaXJxKCZtcF9pcnEpOwogCX0KIH0KIApAQCAtMTExNyw3ICsxMDg0LDcgQEAKIAltcF9pcnEuZHN0YXBpYyA9IG1wX2lvYXBpY3NbaW9hcGljXS5hcGljaWQ7CiAJbXBfaXJxLmRzdGlycSA9IG1wX2ZpbmRfaW9hcGljX3Bpbihpb2FwaWMsIGdzaSk7CiAKLQlzYXZlX21wX2lycSgmbXBfaXJxKTsKKwltcF9zYXZlX2lycSgmbXBfaXJxKTsKICNlbmRpZgogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYwppbmRleCA1MDc5ZjI0Li4xMjM2MDg1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYwpAQCAtMzUzLDYgKzM1Myw3IEBACiAJbXV0ZXhfdW5sb2NrKCZzbXBfYWx0KTsKIH0KIAorYm9vbCBza2lwX3NtcF9hbHRlcm5hdGl2ZXM7CiB2b2lkIGFsdGVybmF0aXZlc19zbXBfc3dpdGNoKGludCBzbXApCiB7CiAJc3RydWN0IHNtcF9hbHRfbW9kdWxlICptb2Q7CkBAIC0zNjgsNyArMzY5LDcgQEAKIAlwcmludGsoImxvY2tkZXA6IGZpeGluZyB1cCBhbHRlcm5hdGl2ZXMuXG4iKTsKICNlbmRpZgogCi0JaWYgKG5vcmVwbGFjZV9zbXAgfHwgc21wX2FsdF9vbmNlKQorCWlmIChub3JlcGxhY2Vfc21wIHx8IHNtcF9hbHRfb25jZSB8fCBza2lwX3NtcF9hbHRlcm5hdGl2ZXMpCiAJCXJldHVybjsKIAlCVUdfT04oIXNtcCAmJiAobnVtX29ubGluZV9jcHVzKCkgPiAxKSk7CiAKQEAgLTU5MSwxNyArNTkyLDIxIEBACiBzdGF0aWMgaW50IHdyb3RlX3RleHQ7CiAKIHN0cnVjdCB0ZXh0X3Bva2VfcGFyYW1zIHsKLQl2b2lkICphZGRyOwotCWNvbnN0IHZvaWQgKm9wY29kZTsKLQlzaXplX3QgbGVuOworCXN0cnVjdCB0ZXh0X3Bva2VfcGFyYW0gKnBhcmFtczsKKwlpbnQgbnBhcmFtczsKIH07CiAKIHN0YXRpYyBpbnQgX19rcHJvYmVzIHN0b3BfbWFjaGluZV90ZXh0X3Bva2Uodm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgdGV4dF9wb2tlX3BhcmFtcyAqdHBwID0gZGF0YTsKKwlzdHJ1Y3QgdGV4dF9wb2tlX3BhcmFtICpwOworCWludCBpOwogCiAJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnN0b3BfbWFjaGluZV9maXJzdCkpIHsKLQkJdGV4dF9wb2tlKHRwcC0+YWRkciwgdHBwLT5vcGNvZGUsIHRwcC0+bGVuKTsKKwkJZm9yIChpID0gMDsgaSA8IHRwcC0+bnBhcmFtczsgaSsrKSB7CisJCQlwID0gJnRwcC0+cGFyYW1zW2ldOworCQkJdGV4dF9wb2tlKHAtPmFkZHIsIHAtPm9wY29kZSwgcC0+bGVuKTsKKwkJfQogCQlzbXBfd21iKCk7CS8qIE1ha2Ugc3VyZSBvdGhlciBjcHVzIHNlZSB0aGF0IHRoaXMgaGFzIHJ1biAqLwogCQl3cm90ZV90ZXh0ID0gMTsKIAl9IGVsc2UgewpAQCAtNjEwLDggKzYxNSwxMiBAQAogCQlzbXBfbWIoKTsJLyogTG9hZCB3cm90ZV90ZXh0IGJlZm9yZSBmb2xsb3dpbmcgZXhlY3V0aW9uICovCiAJfQogCi0JZmx1c2hfaWNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKXRwcC0+YWRkciwKLQkJCSAgICh1bnNpZ25lZCBsb25nKXRwcC0+YWRkciArIHRwcC0+bGVuKTsKKwlmb3IgKGkgPSAwOyBpIDwgdHBwLT5ucGFyYW1zOyBpKyspIHsKKwkJcCA9ICZ0cHAtPnBhcmFtc1tpXTsKKwkJZmx1c2hfaWNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKXAtPmFkZHIsCisJCQkJICAgKHVuc2lnbmVkIGxvbmcpcC0+YWRkciArIHAtPmxlbik7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTYzMSwxMCArNjQwLDEzIEBACiB2b2lkICpfX2twcm9iZXMgdGV4dF9wb2tlX3NtcCh2b2lkICphZGRyLCBjb25zdCB2b2lkICpvcGNvZGUsIHNpemVfdCBsZW4pCiB7CiAJc3RydWN0IHRleHRfcG9rZV9wYXJhbXMgdHBwOworCXN0cnVjdCB0ZXh0X3Bva2VfcGFyYW0gcDsKIAotCXRwcC5hZGRyID0gYWRkcjsKLQl0cHAub3Bjb2RlID0gb3Bjb2RlOwotCXRwcC5sZW4gPSBsZW47CisJcC5hZGRyID0gYWRkcjsKKwlwLm9wY29kZSA9IG9wY29kZTsKKwlwLmxlbiA9IGxlbjsKKwl0cHAucGFyYW1zID0gJnA7CisJdHBwLm5wYXJhbXMgPSAxOwogCWF0b21pY19zZXQoJnN0b3BfbWFjaGluZV9maXJzdCwgMSk7CiAJd3JvdGVfdGV4dCA9IDA7CiAJLyogVXNlIF9fc3RvcF9tYWNoaW5lKCkgYmVjYXVzZSB0aGUgY2FsbGVyIGFscmVhZHkgZ290IG9ubGluZV9jcHVzLiAqLwpAQCAtNjQyLDYgKzY1NCwyNiBAQAogCXJldHVybiBhZGRyOwogfQogCisvKioKKyAqIHRleHRfcG9rZV9zbXBfYmF0Y2ggLSBVcGRhdGUgaW5zdHJ1Y3Rpb25zIG9uIGEgbGl2ZSBrZXJuZWwgb24gU01QCisgKiBAcGFyYW1zOiBhbiBhcnJheSBvZiB0ZXh0X3Bva2UgcGFyYW1ldGVycworICogQG46IHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gcGFyYW1zLgorICoKKyAqIE1vZGlmeSBtdWx0aS1ieXRlIGluc3RydWN0aW9uIGJ5IHVzaW5nIHN0b3BfbWFjaGluZSgpIG9uIFNNUC4gU2luY2UgdGhlCisgKiBzdG9wX21hY2hpbmUoKSBpcyBoZWF2eSB0YXNrLCBpdCBpcyBiZXR0ZXIgdG8gYWdncmVnYXRlIHRleHRfcG9rZSByZXF1ZXN0cworICogYW5kIGRvIGl0IG9uY2UgaWYgcG9zc2libGUuCisgKgorICogTm90ZTogTXVzdCBiZSBjYWxsZWQgdW5kZXIgZ2V0X29ubGluZV9jcHVzKCkgYW5kIHRleHRfbXV0ZXguCisgKi8KK3ZvaWQgX19rcHJvYmVzIHRleHRfcG9rZV9zbXBfYmF0Y2goc3RydWN0IHRleHRfcG9rZV9wYXJhbSAqcGFyYW1zLCBpbnQgbikKK3sKKwlzdHJ1Y3QgdGV4dF9wb2tlX3BhcmFtcyB0cHAgPSB7LnBhcmFtcyA9IHBhcmFtcywgLm5wYXJhbXMgPSBufTsKKworCWF0b21pY19zZXQoJnN0b3BfbWFjaGluZV9maXJzdCwgMSk7CisJd3JvdGVfdGV4dCA9IDA7CisJc3RvcF9tYWNoaW5lKHN0b3BfbWFjaGluZV90ZXh0X3Bva2UsICh2b2lkICopJnRwcCwgTlVMTCk7Cit9CisKICNpZiBkZWZpbmVkKENPTkZJR19EWU5BTUlDX0ZUUkFDRSkgfHwgZGVmaW5lZChIQVZFX0pVTVBfTEFCRUwpCiAKICNpZmRlZiBDT05GSUdfWDg2XzY0CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYW1kX25iLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYW1kX25iLmMKaW5kZXggOGY2NDYzZC4uYWZmYWNiNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FtZF9uYi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hbWRfbmIuYwpAQCAtMTIsOTUgKzEyLDExNiBAQAogCiBzdGF0aWMgdTMyICpmbHVzaF93b3JkczsKIAotc3RydWN0IHBjaV9kZXZpY2VfaWQgazhfbmJfaWRzW10gPSB7CitzdHJ1Y3QgcGNpX2RldmljZV9pZCBhbWRfbmJfbWlzY19pZHNbXSA9IHsKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BTUQsIFBDSV9ERVZJQ0VfSURfQU1EX0s4X05CX01JU0MpIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF8xMEhfTkJfTUlTQykgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BTUQsIFBDSV9ERVZJQ0VfSURfQU1EXzE1SF9OQl9NSVNDKSB9LAogCXt9CiB9OwotRVhQT1JUX1NZTUJPTChrOF9uYl9pZHMpOworRVhQT1JUX1NZTUJPTChhbWRfbmJfbWlzY19pZHMpOwogCi1zdHJ1Y3Qgazhfbm9ydGhicmlkZ2VfaW5mbyBrOF9ub3J0aGJyaWRnZXM7Ci1FWFBPUlRfU1lNQk9MKGs4X25vcnRoYnJpZGdlcyk7CitzdHJ1Y3QgYW1kX25vcnRoYnJpZGdlX2luZm8gYW1kX25vcnRoYnJpZGdlczsKK0VYUE9SVF9TWU1CT0woYW1kX25vcnRoYnJpZGdlcyk7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldiAqbmV4dF9rOF9ub3J0aGJyaWRnZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQorc3RhdGljIHN0cnVjdCBwY2lfZGV2ICpuZXh0X25vcnRoYnJpZGdlKHN0cnVjdCBwY2lfZGV2ICpkZXYsCisJCQkJCXN0cnVjdCBwY2lfZGV2aWNlX2lkICppZHMpCiB7CiAJZG8gewogCQlkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBkZXYpOwogCQlpZiAoIWRldikKIAkJCWJyZWFrOwotCX0gd2hpbGUgKCFwY2lfbWF0Y2hfaWQoJms4X25iX2lkc1swXSwgZGV2KSk7CisJfSB3aGlsZSAoIXBjaV9tYXRjaF9pZChpZHMsIGRldikpOwogCXJldHVybiBkZXY7CiB9CiAKLWludCBjYWNoZV9rOF9ub3J0aGJyaWRnZXModm9pZCkKK2ludCBhbWRfY2FjaGVfbm9ydGhicmlkZ2VzKHZvaWQpCiB7Ci0JaW50IGk7Ci0Jc3RydWN0IHBjaV9kZXYgKmRldjsKKwlpbnQgaSA9IDA7CisJc3RydWN0IGFtZF9ub3J0aGJyaWRnZSAqbmI7CisJc3RydWN0IHBjaV9kZXYgKm1pc2M7CiAKLQlpZiAoazhfbm9ydGhicmlkZ2VzLm51bSkKKwlpZiAoYW1kX25iX251bSgpKQogCQlyZXR1cm4gMDsKIAotCWRldiA9IE5VTEw7Ci0Jd2hpbGUgKChkZXYgPSBuZXh0X2s4X25vcnRoYnJpZGdlKGRldikpICE9IE5VTEwpCi0JCWs4X25vcnRoYnJpZGdlcy5udW0rKzsKKwltaXNjID0gTlVMTDsKKwl3aGlsZSAoKG1pc2MgPSBuZXh0X25vcnRoYnJpZGdlKG1pc2MsIGFtZF9uYl9taXNjX2lkcykpICE9IE5VTEwpCisJCWkrKzsKKworCWlmIChpID09IDApCisJCXJldHVybiAwOworCisJbmIgPSBremFsbG9jKGkgKiBzaXplb2Yoc3RydWN0IGFtZF9ub3J0aGJyaWRnZSksIEdGUF9LRVJORUwpOworCWlmICghbmIpCisJCXJldHVybiAtRU5PTUVNOworCisJYW1kX25vcnRoYnJpZGdlcy5uYiA9IG5iOworCWFtZF9ub3J0aGJyaWRnZXMubnVtID0gaTsKKworCW1pc2MgPSBOVUxMOworCWZvciAoaSA9IDA7IGkgIT0gYW1kX25iX251bSgpOyBpKyspIHsKKwkJbm9kZV90b19hbWRfbmIoaSktPm1pc2MgPSBtaXNjID0KKwkJCW5leHRfbm9ydGhicmlkZ2UobWlzYywgYW1kX25iX21pc2NfaWRzKTsKKyAgICAgICAgfQogCiAJLyogc29tZSBDUFUgZmFtaWxpZXMgKGUuZy4gZmFtaWx5IDB4MTEpIGRvIG5vdCBzdXBwb3J0IEdBUlQgKi8KIAlpZiAoYm9vdF9jcHVfZGF0YS54ODYgPT0gMHhmIHx8IGJvb3RfY3B1X2RhdGEueDg2ID09IDB4MTAgfHwKIAkgICAgYm9vdF9jcHVfZGF0YS54ODYgPT0gMHgxNSkKLQkJazhfbm9ydGhicmlkZ2VzLmdhcnRfc3VwcG9ydGVkID0gMTsKKwkJYW1kX25vcnRoYnJpZGdlcy5mbGFncyB8PSBBTURfTkJfR0FSVDsKIAotCWs4X25vcnRoYnJpZGdlcy5uYl9taXNjID0ga21hbGxvYygoazhfbm9ydGhicmlkZ2VzLm51bSArIDEpICoKLQkJCQkJICBzaXplb2Yodm9pZCAqKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFrOF9ub3J0aGJyaWRnZXMubmJfbWlzYykKLQkJcmV0dXJuIC1FTk9NRU07CisJLyoKKwkgKiBTb21lIENQVSBmYW1pbGllcyBzdXBwb3J0IEwzIENhY2hlIEluZGV4IERpc2FibGUuIFRoZXJlIGFyZSBzb21lCisJICogbGltaXRhdGlvbnMgYmVjYXVzZSBvZiBFMzgyIGFuZCBFMzg4IG9uIGZhbWlseSAweDEwLgorCSAqLworCWlmIChib290X2NwdV9kYXRhLng4NiA9PSAweDEwICYmCisJICAgIGJvb3RfY3B1X2RhdGEueDg2X21vZGVsID49IDB4OCAmJgorCSAgICAoYm9vdF9jcHVfZGF0YS54ODZfbW9kZWwgPiAweDkgfHwKKwkgICAgIGJvb3RfY3B1X2RhdGEueDg2X21hc2sgPj0gMHgxKSkKKwkJYW1kX25vcnRoYnJpZGdlcy5mbGFncyB8PSBBTURfTkJfTDNfSU5ERVhfRElTQUJMRTsKIAotCWlmICghazhfbm9ydGhicmlkZ2VzLm51bSkgewotCQlrOF9ub3J0aGJyaWRnZXMubmJfbWlzY1swXSA9IE5VTEw7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmIChrOF9ub3J0aGJyaWRnZXMuZ2FydF9zdXBwb3J0ZWQpIHsKLQkJZmx1c2hfd29yZHMgPSBrbWFsbG9jKGs4X25vcnRoYnJpZGdlcy5udW0gKiBzaXplb2YodTMyKSwKLQkJCQkgICAgICBHRlBfS0VSTkVMKTsKLQkJaWYgKCFmbHVzaF93b3JkcykgewotCQkJa2ZyZWUoazhfbm9ydGhicmlkZ2VzLm5iX21pc2MpOwotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCX0KLQl9Ci0KLQlkZXYgPSBOVUxMOwotCWkgPSAwOwotCXdoaWxlICgoZGV2ID0gbmV4dF9rOF9ub3J0aGJyaWRnZShkZXYpKSAhPSBOVUxMKSB7Ci0JCWs4X25vcnRoYnJpZGdlcy5uYl9taXNjW2ldID0gZGV2OwotCQlpZiAoazhfbm9ydGhicmlkZ2VzLmdhcnRfc3VwcG9ydGVkKQotCQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgMHg5YywgJmZsdXNoX3dvcmRzW2krK10pOwotCX0KLQlrOF9ub3J0aGJyaWRnZXMubmJfbWlzY1tpXSA9IE5VTEw7CiAJcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChjYWNoZV9rOF9ub3J0aGJyaWRnZXMpOworRVhQT1JUX1NZTUJPTF9HUEwoYW1kX2NhY2hlX25vcnRoYnJpZGdlcyk7CiAKIC8qIElnbm9yZXMgc3ViZGV2aWNlL3N1YnZlbmRvciBidXQgYXMgZmFyIGFzIEkgY2FuIGZpZ3VyZSBvdXQKICAgIHRoZXkncmUgdXNlbGVzcyBhbnl3YXlzICovCi1pbnQgX19pbml0IGVhcmx5X2lzX2s4X25iKHUzMiBkZXZpY2UpCitpbnQgX19pbml0IGVhcmx5X2lzX2FtZF9uYih1MzIgZGV2aWNlKQogewogCXN0cnVjdCBwY2lfZGV2aWNlX2lkICppZDsKIAl1MzIgdmVuZG9yID0gZGV2aWNlICYgMHhmZmZmOwogCWRldmljZSA+Pj0gMTY7Ci0JZm9yIChpZCA9IGs4X25iX2lkczsgaWQtPnZlbmRvcjsgaWQrKykKKwlmb3IgKGlkID0gYW1kX25iX21pc2NfaWRzOyBpZC0+dmVuZG9yOyBpZCsrKQogCQlpZiAodmVuZG9yID09IGlkLT52ZW5kb3IgJiYgZGV2aWNlID09IGlkLT5kZXZpY2UpCiAJCQlyZXR1cm4gMTsKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBrOF9mbHVzaF9nYXJ0cyh2b2lkKQoraW50IGFtZF9jYWNoZV9nYXJ0KHZvaWQpCit7CisgICAgICAgaW50IGk7CisKKyAgICAgICBpZiAoIWFtZF9uYl9oYXNfZmVhdHVyZShBTURfTkJfR0FSVCkpCisgICAgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgIGZsdXNoX3dvcmRzID0ga21hbGxvYyhhbWRfbmJfbnVtKCkgKiBzaXplb2YodTMyKSwgR0ZQX0tFUk5FTCk7CisgICAgICAgaWYgKCFmbHVzaF93b3JkcykgeworICAgICAgICAgICAgICAgYW1kX25vcnRoYnJpZGdlcy5mbGFncyAmPSB+QU1EX05CX0dBUlQ7CisgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKKyAgICAgICB9CisKKyAgICAgICBmb3IgKGkgPSAwOyBpICE9IGFtZF9uYl9udW0oKTsgaSsrKQorICAgICAgICAgICAgICAgcGNpX3JlYWRfY29uZmlnX2R3b3JkKG5vZGVfdG9fYW1kX25iKGkpLT5taXNjLCAweDljLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmbHVzaF93b3Jkc1tpXSk7CisKKyAgICAgICByZXR1cm4gMDsKK30KKwordm9pZCBhbWRfZmx1c2hfZ2FydHModm9pZCkKIHsKIAlpbnQgZmx1c2hlZCwgaTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soZ2FydF9sb2NrKTsKIAotCWlmICghazhfbm9ydGhicmlkZ2VzLmdhcnRfc3VwcG9ydGVkKQorCWlmICghYW1kX25iX2hhc19mZWF0dXJlKEFNRF9OQl9HQVJUKSkKIAkJcmV0dXJuOwogCiAJLyogQXZvaWQgcmFjZXMgYmV0d2VlbiBBR1AgYW5kIElPTU1VLiBJbiB0aGVvcnkgaXQncyBub3QgbmVlZGVkCkBAIC0xMDksMTYgKzEzMCwxNiBAQAogCSAgIHRoYXQgaXQgZG9lc24ndCBtYXR0ZXIgdG8gc2VyaWFsaXplIG1vcmUuIC1BSyAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZnYXJ0X2xvY2ssIGZsYWdzKTsKIAlmbHVzaGVkID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgazhfbm9ydGhicmlkZ2VzLm51bTsgaSsrKSB7Ci0JCXBjaV93cml0ZV9jb25maWdfZHdvcmQoazhfbm9ydGhicmlkZ2VzLm5iX21pc2NbaV0sIDB4OWMsCi0JCQkJICAgICAgIGZsdXNoX3dvcmRzW2ldfDEpOworCWZvciAoaSA9IDA7IGkgPCBhbWRfbmJfbnVtKCk7IGkrKykgeworCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKG5vZGVfdG9fYW1kX25iKGkpLT5taXNjLCAweDljLAorCQkJCSAgICAgICBmbHVzaF93b3Jkc1tpXSB8IDEpOwogCQlmbHVzaGVkKys7CiAJfQotCWZvciAoaSA9IDA7IGkgPCBrOF9ub3J0aGJyaWRnZXMubnVtOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgYW1kX25iX251bSgpOyBpKyspIHsKIAkJdTMyIHc7CiAJCS8qIE1ha2Ugc3VyZSB0aGUgaGFyZHdhcmUgYWN0dWFsbHkgZXhlY3V0ZWQgdGhlIGZsdXNoKi8KIAkJZm9yICg7OykgewotCQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGs4X25vcnRoYnJpZGdlcy5uYl9taXNjW2ldLAorCQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKG5vZGVfdG9fYW1kX25iKGkpLT5taXNjLAogCQkJCQkgICAgICAweDljLCAmdyk7CiAJCQlpZiAoISh3ICYgMSkpCiAJCQkJYnJlYWs7CkBAIC0xMjksMTkgKzE1MCwyMyBAQAogCWlmICghZmx1c2hlZCkKIAkJcHJpbnRrKCJub3RoaW5nIHRvIGZsdXNoP1xuIik7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChrOF9mbHVzaF9nYXJ0cyk7CitFWFBPUlRfU1lNQk9MX0dQTChhbWRfZmx1c2hfZ2FydHMpOwogCi1zdGF0aWMgX19pbml0IGludCBpbml0X2s4X25icyh2b2lkKQorc3RhdGljIF9faW5pdCBpbnQgaW5pdF9hbWRfbmJzKHZvaWQpCiB7CiAJaW50IGVyciA9IDA7CiAKLQllcnIgPSBjYWNoZV9rOF9ub3J0aGJyaWRnZXMoKTsKKwllcnIgPSBhbWRfY2FjaGVfbm9ydGhicmlkZ2VzKCk7CiAKIAlpZiAoZXJyIDwgMCkKLQkJcHJpbnRrKEtFUk5fTk9USUNFICJLOCBOQjogQ2Fubm90IGVudW1lcmF0ZSBBTUQgbm9ydGhicmlkZ2VzLlxuIik7CisJCXByaW50ayhLRVJOX05PVElDRSAiQU1EIE5COiBDYW5ub3QgZW51bWVyYXRlIEFNRCBub3J0aGJyaWRnZXMuXG4iKTsKKworCWlmIChhbWRfY2FjaGVfZ2FydCgpIDwgMCkKKwkJcHJpbnRrKEtFUk5fTk9USUNFICJBTUQgTkI6IENhbm5vdCBpbml0aWFsaXplIEdBUlQgZmx1c2ggd29yZHMsICIKKwkJICAgICAgICJHQVJUIHN1cHBvcnQgZGlzYWJsZWQuXG4iKTsKIAogCXJldHVybiBlcnI7CiB9CiAKIC8qIFRoaXMgaGFzIHRvIGdvIGFmdGVyIHRoZSBQQ0kgc3Vic3lzdGVtICovCi1mc19pbml0Y2FsbChpbml0X2s4X25icyk7Citmc19pbml0Y2FsbChpbml0X2FtZF9uYnMpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwYl90aW1lci5jIGIvYXJjaC94ODYva2VybmVsL2FwYl90aW1lci5jCmluZGV4IDkyNTQzYzcuLjdjOWFiNTkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGJfdGltZXIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBiX3RpbWVyLmMKQEAgLTMxNSw2ICszMTUsNyBAQAogCiAJaWYgKHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fQk9PVElORykgewogCQlpcnFfbW9kaWZ5X3N0YXR1cyhhZGV2LT5pcnEsIDAsIElSUV9NT1ZFX1BDTlRYVCk7CisJCWlycV9zZXRfYWZmaW5pdHkoYWRldi0+aXJxLCBjcHVtYXNrX29mKGFkZXYtPmNwdSkpOwogCQkvKiBBUEIgdGltZXIgaXJxcyBhcmUgc2V0IHVwIGFzIG1wX2lycXMsIHRpbWVyIGlzIGVkZ2UgdHlwZSAqLwogCQlfX3NldF9pcnFfaGFuZGxlcihhZGV2LT5pcnEsIGhhbmRsZV9lZGdlX2lycSwgMCwgImVkZ2UiKTsKIAkJaWYgKHJlcXVlc3RfaXJxKGFkZXYtPmlycSwgYXBidF9pbnRlcnJ1cHRfaGFuZGxlciwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGVydHVyZV82NC5jIGIvYXJjaC94ODYva2VybmVsL2FwZXJ0dXJlXzY0LmMKaW5kZXggYjNhMTZlOC4uZGNkN2M4MyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwZXJ0dXJlXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwZXJ0dXJlXzY0LmMKQEAgLTIwNiw3ICsyMDYsNyBAQAogICogRG8gYW4gUENJIGJ1cyBzY2FuIGJ5IGhhbmQgYmVjYXVzZSB3ZSdyZSBydW5uaW5nIGJlZm9yZSB0aGUgUENJCiAgKiBzdWJzeXN0ZW0uCiAgKgotICogQWxsIEs4IEFHUCBicmlkZ2VzIGFyZSBBR1B2MyBjb21wbGlhbnQsIHNvIHdlIGNhbiBkbyB0aGlzIHNjYW4KKyAqIEFsbCBBTUQgQUdQIGJyaWRnZXMgYXJlIEFHUHYzIGNvbXBsaWFudCwgc28gd2UgY2FuIGRvIHRoaXMgc2NhbgogICogZ2VuZXJpY2FsbHkuIEl0J3MgcHJvYmFibHkgb3ZlcmtpbGwgdG8gYWx3YXlzIHNjYW4gYWxsIHNsb3RzIGJlY2F1c2UKICAqIHRoZSBBR1AgYnJpZGdlcyBzaG91bGQgYmUgYWx3YXlzIGFuIG93biBidXMgb24gdGhlIEhUIGhpZXJhcmNoeSwKICAqIGJ1dCBkbyBpdCBoZXJlIGZvciBmdXR1cmUgc2FmZXR5LgpAQCAtMzAzLDcgKzMwMyw3IEBACiAJCWRldl9saW1pdCA9IGJ1c19kZXZfcmFuZ2VzW2ldLmRldl9saW1pdDsKIAogCQlmb3IgKHNsb3QgPSBkZXZfYmFzZTsgc2xvdCA8IGRldl9saW1pdDsgc2xvdCsrKSB7Ci0JCQlpZiAoIWVhcmx5X2lzX2s4X25iKHJlYWRfcGNpX2NvbmZpZyhidXMsIHNsb3QsIDMsIDB4MDApKSkKKwkJCWlmICghZWFybHlfaXNfYW1kX25iKHJlYWRfcGNpX2NvbmZpZyhidXMsIHNsb3QsIDMsIDB4MDApKSkKIAkJCQljb250aW51ZTsKIAogCQkJY3RsID0gcmVhZF9wY2lfY29uZmlnKGJ1cywgc2xvdCwgMywgQU1ENjRfR0FSVEFQRVJUVVJFQ1RMKTsKQEAgLTM1OCw3ICszNTgsNyBAQAogCQlkZXZfbGltaXQgPSBidXNfZGV2X3Jhbmdlc1tpXS5kZXZfbGltaXQ7CiAKIAkJZm9yIChzbG90ID0gZGV2X2Jhc2U7IHNsb3QgPCBkZXZfbGltaXQ7IHNsb3QrKykgewotCQkJaWYgKCFlYXJseV9pc19rOF9uYihyZWFkX3BjaV9jb25maWcoYnVzLCBzbG90LCAzLCAweDAwKSkpCisJCQlpZiAoIWVhcmx5X2lzX2FtZF9uYihyZWFkX3BjaV9jb25maWcoYnVzLCBzbG90LCAzLCAweDAwKSkpCiAJCQkJY29udGludWU7CiAKIAkJCWN0bCA9IHJlYWRfcGNpX2NvbmZpZyhidXMsIHNsb3QsIDMsIEFNRDY0X0dBUlRBUEVSVFVSRUNUTCk7CkBAIC00MDAsNyArNDAwLDcgQEAKIAkJZGV2X2xpbWl0ID0gYnVzX2Rldl9yYW5nZXNbaV0uZGV2X2xpbWl0OwogCiAJCWZvciAoc2xvdCA9IGRldl9iYXNlOyBzbG90IDwgZGV2X2xpbWl0OyBzbG90KyspIHsKLQkJCWlmICghZWFybHlfaXNfazhfbmIocmVhZF9wY2lfY29uZmlnKGJ1cywgc2xvdCwgMywgMHgwMCkpKQorCQkJaWYgKCFlYXJseV9pc19hbWRfbmIocmVhZF9wY2lfY29uZmlnKGJ1cywgc2xvdCwgMywgMHgwMCkpKQogCQkJCWNvbnRpbnVlOwogCiAJCQlpb21tdV9kZXRlY3RlZCA9IDE7CkBAIC01MTgsNyArNTE4LDcgQEAKIAkJZGV2X2Jhc2UgPSBidXNfZGV2X3Jhbmdlc1tpXS5kZXZfYmFzZTsKIAkJZGV2X2xpbWl0ID0gYnVzX2Rldl9yYW5nZXNbaV0uZGV2X2xpbWl0OwogCQlmb3IgKHNsb3QgPSBkZXZfYmFzZTsgc2xvdCA8IGRldl9saW1pdDsgc2xvdCsrKSB7Ci0JCQlpZiAoIWVhcmx5X2lzX2s4X25iKHJlYWRfcGNpX2NvbmZpZyhidXMsIHNsb3QsIDMsIDB4MDApKSkKKwkJCWlmICghZWFybHlfaXNfYW1kX25iKHJlYWRfcGNpX2NvbmZpZyhidXMsIHNsb3QsIDMsIDB4MDApKSkKIAkJCQljb250aW51ZTsKIAogCQkJd3JpdGVfcGNpX2NvbmZpZyhidXMsIHNsb3QsIDMsIEFNRDY0X0dBUlRBUEVSVFVSRUNUTCwgY3RsKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL01ha2VmaWxlIGIvYXJjaC94ODYva2VybmVsL2FwaWMvTWFrZWZpbGUKaW5kZXggOTEwZjIwYi4uMzk2NmI1NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMvTWFrZWZpbGUKKysrIGIvYXJjaC94ODYva2VybmVsL2FwaWMvTWFrZWZpbGUKQEAgLTMsMTAgKzMsNyBAQAogIwogCiBvYmotJChDT05GSUdfWDg2X0xPQ0FMX0FQSUMpCSs9IGFwaWMubyBhcGljX25vb3AubyBwcm9iZV8kKEJJVFMpLm8gaXBpLm8KLWlmbmVxICgkKENPTkZJR19IQVJETE9DS1VQX0RFVEVDVE9SKSx5KQotb2JqLSQoQ09ORklHX1g4Nl9MT0NBTF9BUElDKQkrPSBubWkubwotZW5kaWYKLW9iai0kKENPTkZJR19IQVJETE9DS1VQX0RFVEVDVE9SKQkrPSBod19ubWkubworb2JqLXkJCQkJKz0gaHdfbm1pLm8KIAogb2JqLSQoQ09ORklHX1g4Nl9JT19BUElDKQkrPSBpb19hcGljLm8KIG9iai0kKENPTkZJR19TTVApCQkrPSBpcGkubwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMvYXBpYy5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMvYXBpYy5jCmluZGV4IDc4MjE4MTMuLjc5ZTZiYWEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljLmMKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvZG1pLmg+Ci0jaW5jbHVkZSA8bGludXgvbm1pLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KIApAQCAtNDMyLDE3ICs0MzEsMTggQEAKIAlyZXNlcnZlZCA9IHJlc2VydmVfZWlsdnRfb2Zmc2V0KG9mZnNldCwgbmV3KTsKIAogCWlmIChyZXNlcnZlZCAhPSBuZXcpIHsKLQkJcHJfZXJyKEZXX0JVRyAiY3B1ICVkLCB0cnkgdG8gc2V0dXAgdmVjdG9yIDB4JXgsIGJ1dCAiCi0JCSAgICAgICAidmVjdG9yIDB4JXggd2FzIGFscmVhZHkgcmVzZXJ2ZWQgYnkgYW5vdGhlciBjb3JlLCAiCi0JCSAgICAgICAiQVBJQyVsWD0weCV4XG4iLAotCQkgICAgICAgc21wX3Byb2Nlc3Nvcl9pZCgpLCBuZXcsIHJlc2VydmVkLCByZWcsIG9sZCk7CisJCXByX2VycihGV19CVUcgImNwdSAlZCwgdHJ5IHRvIHVzZSBBUElDJWxYIChMVlQgb2Zmc2V0ICVkKSBmb3IgIgorCQkgICAgICAgInZlY3RvciAweCV4LCBidXQgdGhlIHJlZ2lzdGVyIGlzIGFscmVhZHkgaW4gdXNlIGZvciAiCisJCSAgICAgICAidmVjdG9yIDB4JXggb24gYW5vdGhlciBjcHVcbiIsCisJCSAgICAgICBzbXBfcHJvY2Vzc29yX2lkKCksIHJlZywgb2Zmc2V0LCBuZXcsIHJlc2VydmVkKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaWYgKCFlaWx2dF9lbnRyeV9pc19jaGFuZ2VhYmxlKG9sZCwgbmV3KSkgewotCQlwcl9lcnIoRldfQlVHICJjcHUgJWQsIHRyeSB0byBzZXR1cCB2ZWN0b3IgMHgleCBidXQgIgotCQkgICAgICAgInJlZ2lzdGVyIGFscmVhZHkgaW4gdXNlLCBBUElDJWxYPTB4JXhcbiIsCi0JCSAgICAgICBzbXBfcHJvY2Vzc29yX2lkKCksIG5ldywgcmVnLCBvbGQpOworCQlwcl9lcnIoRldfQlVHICJjcHUgJWQsIHRyeSB0byB1c2UgQVBJQyVsWCAoTFZUIG9mZnNldCAlZCkgZm9yICIKKwkJICAgICAgICJ2ZWN0b3IgMHgleCwgYnV0IHRoZSByZWdpc3RlciBpcyBhbHJlYWR5IGluIHVzZSBmb3IgIgorCQkgICAgICAgInZlY3RvciAweCV4IG9uIHRoaXMgY3B1XG4iLAorCQkgICAgICAgc21wX3Byb2Nlc3Nvcl9pZCgpLCByZWcsIG9mZnNldCwgbmV3LCBvbGQpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIApAQCAtNTE2LDcgKzUxNiw3IEBACiB7CiAJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqbGV2dCA9ICZfX2dldF9jcHVfdmFyKGxhcGljX2V2ZW50cyk7CiAKLQlpZiAoY3B1X2hhcygmY3VycmVudF9jcHVfZGF0YSwgWDg2X0ZFQVRVUkVfQVJBVCkpIHsKKwlpZiAoY3B1X2hhcyhfX3RoaXNfY3B1X3B0cigmY3B1X2luZm8pLCBYODZfRkVBVFVSRV9BUkFUKSkgewogCQlsYXBpY19jbG9ja2V2ZW50LmZlYXR1cmVzICY9IH5DTE9DS19FVlRfRkVBVF9DM1NUT1A7CiAJCS8qIE1ha2UgTEFQSUMgdGltZXIgcHJlZmVycmFibGUgb3ZlciBwZXJjcHUgSFBFVCAqLwogCQlsYXBpY19jbG9ja2V2ZW50LnJhdGluZyA9IDE1MDsKQEAgLTc5OSwxMSArNzk5LDcgQEAKIAkgKiBQSVQvSFBFVCBnb2luZy4gIE90aGVyd2lzZSByZWdpc3RlciBsYXBpYyBhcyBhIGR1bW15CiAJICogZGV2aWNlLgogCSAqLwotCWlmIChubWlfd2F0Y2hkb2cgIT0gTk1JX0lPX0FQSUMpCi0JCWxhcGljX2Nsb2NrZXZlbnQuZmVhdHVyZXMgJj0gfkNMT0NLX0VWVF9GRUFUX0RVTU1ZOwotCWVsc2UKLQkJcHJfd2FybmluZygiQVBJQyB0aW1lciByZWdpc3RlcmVkIGFzIGR1bW15LCIKLQkJCSIgZHVlIHRvIG5taV93YXRjaGRvZz0lZCFcbiIsIG5taV93YXRjaGRvZyk7CisJbGFwaWNfY2xvY2tldmVudC5mZWF0dXJlcyAmPSB+Q0xPQ0tfRVZUX0ZFQVRfRFVNTVk7CiAKIAkvKiBTZXR1cCB0aGUgbGFwaWMgb3IgcmVxdWVzdCB0aGUgYnJvYWRjYXN0ICovCiAJc2V0dXBfQVBJQ190aW1lcigpOwpAQCAtMTE5NSwxMiArMTE5MSwxNSBAQAogCQkJb2xkdmFsdWUsIHZhbHVlKTsKIH0KIAotCiAvKioKICAqIHNldHVwX2xvY2FsX0FQSUMgLSBzZXR1cCB0aGUgbG9jYWwgQVBJQworICoKKyAqIFVzZWQgdG8gc2V0dXAgbG9jYWwgQVBJQyB3aGlsZSBpbml0aWFsaXppbmcgQlNQIG9yIGJyaW5naW4gdXAgQVBzLgorICogQWx3YXlzIGNhbGxlZCB3aXRoIHByZWVtcHRpb24gZGlzYWJsZWQuCiAgKi8KIHZvaWQgX19jcHVpbml0IHNldHVwX2xvY2FsX0FQSUModm9pZCkKIHsKKwlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCXVuc2lnbmVkIGludCB2YWx1ZSwgcXVldWVkOwogCWludCBpLCBqLCBhY2tlZCA9IDA7CiAJdW5zaWduZWQgbG9uZyBsb25nIHRzYyA9IDAsIG50c2M7CkBAIC0xMjI1LDggKzEyMjQsNiBAQAogI2VuZGlmCiAJcGVyZl9ldmVudHNfbGFwaWNfaW5pdCgpOwogCi0JcHJlZW1wdF9kaXNhYmxlKCk7Ci0KIAkvKgogCSAqIERvdWJsZS1jaGVjayB3aGV0aGVyIHRoaXMgQVBJQyBpcyByZWFsbHkgcmVnaXN0ZXJlZC4KIAkgKiBUaGlzIGlzIG1lYW5pbmdsZXNzIGluIGNsdXN0ZXJlZCBhcGljIG1vZGUsIHNvIHdlIHNraXAgaXQuCkBAIC0xMzQyLDIxICsxMzM5LDE5IEBACiAJICogVE9ETzogc2V0IHVwIHRocm91Z2gtbG9jYWwtQVBJQyBmcm9tIHRocm91Z2gtSS9PLUFQSUM/IC0tbWFjcm8KIAkgKi8KIAl2YWx1ZSA9IGFwaWNfcmVhZChBUElDX0xWVDApICYgQVBJQ19MVlRfTUFTS0VEOwotCWlmICghc21wX3Byb2Nlc3Nvcl9pZCgpICYmIChwaWNfbW9kZSB8fCAhdmFsdWUpKSB7CisJaWYgKCFjcHUgJiYgKHBpY19tb2RlIHx8ICF2YWx1ZSkpIHsKIAkJdmFsdWUgPSBBUElDX0RNX0VYVElOVDsKLQkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiZW5hYmxlZCBFeHRJTlQgb24gQ1BVIyVkXG4iLAotCQkJCXNtcF9wcm9jZXNzb3JfaWQoKSk7CisJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgImVuYWJsZWQgRXh0SU5UIG9uIENQVSMlZFxuIiwgY3B1KTsKIAl9IGVsc2UgewogCQl2YWx1ZSA9IEFQSUNfRE1fRVhUSU5UIHwgQVBJQ19MVlRfTUFTS0VEOwotCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICJtYXNrZWQgRXh0SU5UIG9uIENQVSMlZFxuIiwKLQkJCQlzbXBfcHJvY2Vzc29yX2lkKCkpOworCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICJtYXNrZWQgRXh0SU5UIG9uIENQVSMlZFxuIiwgY3B1KTsKIAl9CiAJYXBpY193cml0ZShBUElDX0xWVDAsIHZhbHVlKTsKIAogCS8qCiAJICogb25seSB0aGUgQlAgc2hvdWxkIHNlZSB0aGUgTElOVDEgTk1JIHNpZ25hbCwgb2J2aW91c2x5LgogCSAqLwotCWlmICghc21wX3Byb2Nlc3Nvcl9pZCgpKQorCWlmICghY3B1KQogCQl2YWx1ZSA9IEFQSUNfRE1fTk1JOwogCWVsc2UKIAkJdmFsdWUgPSBBUElDX0RNX05NSSB8IEFQSUNfTFZUX01BU0tFRDsKQEAgLTEzNjQsMTEgKzEzNTksOSBAQAogCQl2YWx1ZSB8PSBBUElDX0xWVF9MRVZFTF9UUklHR0VSOwogCWFwaWNfd3JpdGUoQVBJQ19MVlQxLCB2YWx1ZSk7CiAKLQlwcmVlbXB0X2VuYWJsZSgpOwotCiAjaWZkZWYgQ09ORklHX1g4Nl9NQ0VfSU5URUwKIAkvKiBSZWNoZWNrIENNQ0kgaW5mb3JtYXRpb24gYWZ0ZXIgbG9jYWwgQVBJQyBpcyB1cCBvbiBDUFUgIzAgKi8KLQlpZiAoc21wX3Byb2Nlc3Nvcl9pZCgpID09IDApCisJaWYgKCFjcHUpCiAJCWNtY2lfcmVjaGVjaygpOwogI2VuZGlmCiB9CkBAIC0xMzg3LDcgKzEzODAsNiBAQAogCX0KICNlbmRpZgogCi0Jc2V0dXBfYXBpY19ubWlfd2F0Y2hkb2coTlVMTCk7CiAJYXBpY19wbV9hY3RpdmF0ZSgpOwogCiAJLyoKQEAgLTE1MzgsMTMgKzE1MzAsNjAgQEAKIAlyZXR1cm4gMDsKIH0KICNlbHNlCisKK3N0YXRpYyBpbnQgYXBpY192ZXJpZnkodm9pZCkKK3sKKwl1MzIgZmVhdHVyZXMsIGgsIGw7CisKKwkvKgorCSAqIFRoZSBBUElDIGZlYXR1cmUgYml0IHNob3VsZCBub3cgYmUgZW5hYmxlZAorCSAqIGluIGBjcHVpZCcKKwkgKi8KKwlmZWF0dXJlcyA9IGNwdWlkX2VkeCgxKTsKKwlpZiAoIShmZWF0dXJlcyAmICgxIDw8IFg4Nl9GRUFUVVJFX0FQSUMpKSkgeworCQlwcl93YXJuaW5nKCJDb3VsZCBub3QgZW5hYmxlIEFQSUMhXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKwlzZXRfY3B1X2NhcCgmYm9vdF9jcHVfZGF0YSwgWDg2X0ZFQVRVUkVfQVBJQyk7CisJbXBfbGFwaWNfYWRkciA9IEFQSUNfREVGQVVMVF9QSFlTX0JBU0U7CisKKwkvKiBUaGUgQklPUyBtYXkgaGF2ZSBzZXQgdXAgdGhlIEFQSUMgYXQgc29tZSBvdGhlciBhZGRyZXNzICovCisJcmRtc3IoTVNSX0lBMzJfQVBJQ0JBU0UsIGwsIGgpOworCWlmIChsICYgTVNSX0lBMzJfQVBJQ0JBU0VfRU5BQkxFKQorCQltcF9sYXBpY19hZGRyID0gbCAmIE1TUl9JQTMyX0FQSUNCQVNFX0JBU0U7CisKKwlwcl9pbmZvKCJGb3VuZCBhbmQgZW5hYmxlZCBsb2NhbCBBUElDIVxuIik7CisJcmV0dXJuIDA7Cit9CisKK2ludCBhcGljX2ZvcmNlX2VuYWJsZSh2b2lkKQoreworCXUzMiBoLCBsOworCisJaWYgKGRpc2FibGVfYXBpYykKKwkJcmV0dXJuIC0xOworCisJLyoKKwkgKiBTb21lIEJJT1NlcyBkaXNhYmxlIHRoZSBsb2NhbCBBUElDIGluIHRoZSBBUElDX0JBU0UKKwkgKiBNU1IuIFRoaXMgY2FuIG9ubHkgYmUgZG9uZSBpbiBzb2Z0d2FyZSBmb3IgSW50ZWwgUDYgb3IgbGF0ZXIKKwkgKiBhbmQgQU1EIEs3IChNb2RlbCA+IDEpIG9yIGxhdGVyLgorCSAqLworCXJkbXNyKE1TUl9JQTMyX0FQSUNCQVNFLCBsLCBoKTsKKwlpZiAoIShsICYgTVNSX0lBMzJfQVBJQ0JBU0VfRU5BQkxFKSkgeworCQlwcl9pbmZvKCJMb2NhbCBBUElDIGRpc2FibGVkIGJ5IEJJT1MgLS0gcmVlbmFibGluZy5cbiIpOworCQlsICY9IH5NU1JfSUEzMl9BUElDQkFTRV9CQVNFOworCQlsIHw9IE1TUl9JQTMyX0FQSUNCQVNFX0VOQUJMRSB8IEFQSUNfREVGQVVMVF9QSFlTX0JBU0U7CisJCXdybXNyKE1TUl9JQTMyX0FQSUNCQVNFLCBsLCBoKTsKKwkJZW5hYmxlZF92aWFfYXBpY2Jhc2UgPSAxOworCX0KKwlyZXR1cm4gYXBpY192ZXJpZnkoKTsKK30KKwogLyoKICAqIERldGVjdCBhbmQgaW5pdGlhbGl6ZSBBUElDCiAgKi8KIHN0YXRpYyBpbnQgX19pbml0IGRldGVjdF9pbml0X0FQSUModm9pZCkKIHsKLQl1MzIgaCwgbCwgZmVhdHVyZXM7Ci0KIAkvKiBEaXNhYmxlZCBieSBrZXJuZWwgb3B0aW9uPyAqLwogCWlmIChkaXNhYmxlX2FwaWMpCiAJCXJldHVybiAtMTsKQEAgLTE1NzQsMzggKzE2MTMsMTIgQEAKIAkJCQkieW91IGNhbiBlbmFibGUgaXQgd2l0aCBcImxhcGljXCJcbiIpOwogCQkJcmV0dXJuIC0xOwogCQl9Ci0JCS8qCi0JCSAqIFNvbWUgQklPU2VzIGRpc2FibGUgdGhlIGxvY2FsIEFQSUMgaW4gdGhlIEFQSUNfQkFTRQotCQkgKiBNU1IuIFRoaXMgY2FuIG9ubHkgYmUgZG9uZSBpbiBzb2Z0d2FyZSBmb3IgSW50ZWwgUDYgb3IgbGF0ZXIKLQkJICogYW5kIEFNRCBLNyAoTW9kZWwgPiAxKSBvciBsYXRlci4KLQkJICovCi0JCXJkbXNyKE1TUl9JQTMyX0FQSUNCQVNFLCBsLCBoKTsKLQkJaWYgKCEobCAmIE1TUl9JQTMyX0FQSUNCQVNFX0VOQUJMRSkpIHsKLQkJCXByX2luZm8oIkxvY2FsIEFQSUMgZGlzYWJsZWQgYnkgQklPUyAtLSByZWVuYWJsaW5nLlxuIik7Ci0JCQlsICY9IH5NU1JfSUEzMl9BUElDQkFTRV9CQVNFOwotCQkJbCB8PSBNU1JfSUEzMl9BUElDQkFTRV9FTkFCTEUgfCBBUElDX0RFRkFVTFRfUEhZU19CQVNFOwotCQkJd3Jtc3IoTVNSX0lBMzJfQVBJQ0JBU0UsIGwsIGgpOwotCQkJZW5hYmxlZF92aWFfYXBpY2Jhc2UgPSAxOwotCQl9CisJCWlmIChhcGljX2ZvcmNlX2VuYWJsZSgpKQorCQkJcmV0dXJuIC0xOworCX0gZWxzZSB7CisJCWlmIChhcGljX3ZlcmlmeSgpKQorCQkJcmV0dXJuIC0xOwogCX0KLQkvKgotCSAqIFRoZSBBUElDIGZlYXR1cmUgYml0IHNob3VsZCBub3cgYmUgZW5hYmxlZAotCSAqIGluIGBjcHVpZCcKLQkgKi8KLQlmZWF0dXJlcyA9IGNwdWlkX2VkeCgxKTsKLQlpZiAoIShmZWF0dXJlcyAmICgxIDw8IFg4Nl9GRUFUVVJFX0FQSUMpKSkgewotCQlwcl93YXJuaW5nKCJDb3VsZCBub3QgZW5hYmxlIEFQSUMhXG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQlzZXRfY3B1X2NhcCgmYm9vdF9jcHVfZGF0YSwgWDg2X0ZFQVRVUkVfQVBJQyk7Ci0JbXBfbGFwaWNfYWRkciA9IEFQSUNfREVGQVVMVF9QSFlTX0JBU0U7Ci0KLQkvKiBUaGUgQklPUyBtYXkgaGF2ZSBzZXQgdXAgdGhlIEFQSUMgYXQgc29tZSBvdGhlciBhZGRyZXNzICovCi0JcmRtc3IoTVNSX0lBMzJfQVBJQ0JBU0UsIGwsIGgpOwotCWlmIChsICYgTVNSX0lBMzJfQVBJQ0JBU0VfRU5BQkxFKQotCQltcF9sYXBpY19hZGRyID0gbCAmIE1TUl9JQTMyX0FQSUNCQVNFX0JBU0U7Ci0KLQlwcl9pbmZvKCJGb3VuZCBhbmQgZW5hYmxlZCBsb2NhbCBBUElDIVxuIik7CiAKIAlhcGljX3BtX2FjdGl2YXRlKCk7CiAKQEAgLTE2MTcsMjggKzE2MzAsNiBAQAogfQogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci12b2lkIF9faW5pdCBlYXJseV9pbml0X2xhcGljX21hcHBpbmcodm9pZCkKLXsKLQkvKgotCSAqIElmIG5vIGxvY2FsIEFQSUMgY2FuIGJlIGZvdW5kIHRoZW4gZ28gb3V0Ci0JICogOiBpdCBtZWFucyB0aGVyZSBpcyBubyBtcGF0YWJsZSBhbmQgTUFEVAotCSAqLwotCWlmICghc21wX2ZvdW5kX2NvbmZpZykKLQkJcmV0dXJuOwotCi0Jc2V0X2ZpeG1hcF9ub2NhY2hlKEZJWF9BUElDX0JBU0UsIG1wX2xhcGljX2FkZHIpOwotCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIm1hcHBlZCBBUElDIHRvICUxNmx4ICglMTZseClcbiIsCi0JCSAgICBBUElDX0JBU0UsIG1wX2xhcGljX2FkZHIpOwotCi0JLyoKLQkgKiBGZXRjaCB0aGUgQVBJQyBJRCBvZiB0aGUgQlNQIGluIGNhc2Ugd2UgaGF2ZSBhCi0JICogZGVmYXVsdCBjb25maWd1cmF0aW9uIChvciB0aGUgTVAgdGFibGUgaXMgYnJva2VuKS4KLQkgKi8KLQlib290X2NwdV9waHlzaWNhbF9hcGljaWQgPSByZWFkX2FwaWNfaWQoKTsKLX0KLSNlbmRpZgotCiAvKioKICAqIGluaXRfYXBpY19tYXBwaW5ncyAtIGluaXRpYWxpemUgQVBJQyBtYXBwaW5ncwogICovCkBAIC0xNjY0LDEwICsxNjU1LDcgQEAKIAkJICogYWNwaV9yZWdpc3Rlcl9sYXBpY19hZGRyZXNzKCkKIAkJICovCiAJCWlmICghYWNwaV9sYXBpYyAmJiAhc21wX2ZvdW5kX2NvbmZpZykKLQkJCXNldF9maXhtYXBfbm9jYWNoZShGSVhfQVBJQ19CQVNFLCBhcGljX3BoeXMpOwotCi0JCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIm1hcHBlZCBBUElDIHRvICUwOGx4ICglMDhseClcbiIsCi0JCQkJCUFQSUNfQkFTRSwgYXBpY19waHlzKTsKKwkJCXJlZ2lzdGVyX2xhcGljX2FkZHJlc3MoYXBpY19waHlzKTsKIAl9CiAKIAkvKgpAQCAtMTY4OSwxMSArMTY3NywyNyBAQAogCX0KIH0KIAordm9pZCBfX2luaXQgcmVnaXN0ZXJfbGFwaWNfYWRkcmVzcyh1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisJbXBfbGFwaWNfYWRkciA9IGFkZHJlc3M7CisKKwlpZiAoIXgyYXBpY19tb2RlKSB7CisJCXNldF9maXhtYXBfbm9jYWNoZShGSVhfQVBJQ19CQVNFLCBhZGRyZXNzKTsKKwkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAibWFwcGVkIEFQSUMgdG8gJTE2bHggKCUxNmx4KVxuIiwKKwkJCSAgICBBUElDX0JBU0UsIG1wX2xhcGljX2FkZHIpOworCX0KKwlpZiAoYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkID09IC0xVSkgeworCQlib290X2NwdV9waHlzaWNhbF9hcGljaWQgID0gcmVhZF9hcGljX2lkKCk7CisJCWFwaWNfdmVyc2lvbltib290X2NwdV9waHlzaWNhbF9hcGljaWRdID0KKwkJCSBHRVRfQVBJQ19WRVJTSU9OKGFwaWNfcmVhZChBUElDX0xWUikpOworCX0KK30KKwogLyoKICAqIFRoaXMgaW5pdGlhbGl6ZXMgdGhlIElPLUFQSUMgYW5kIEFQSUMgaGFyZHdhcmUgaWYgdGhpcyBpcwogICogYSBVUCBrZXJuZWwuCiAgKi8KLWludCBhcGljX3ZlcnNpb25bTUFYX0FQSUNTXTsKK2ludCBhcGljX3ZlcnNpb25bTUFYX0xPQ0FMX0FQSUNdOwogCiBpbnQgX19pbml0IEFQSUNfaW5pdF91bmlwcm9jZXNzb3Iodm9pZCkKIHsKQEAgLTE3NTgsMTcgKzE3NjIsMTAgQEAKIAkJc2V0dXBfSU9fQVBJQygpOwogCWVsc2UgewogCQlucl9pb2FwaWNzID0gMDsKLQkJbG9jYWxpc2Vfbm1pX3dhdGNoZG9nKCk7CiAJfQotI2Vsc2UKLQlsb2NhbGlzZV9ubWlfd2F0Y2hkb2coKTsKICNlbmRpZgogCiAJeDg2X2luaXQudGltZXJzLnNldHVwX3BlcmNwdV9jbG9ja2V2KCk7Ci0jaWZkZWYgQ09ORklHX1g4Nl82NAotCWNoZWNrX25taV93YXRjaGRvZygpOwotI2VuZGlmCi0KIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMvaHdfbm1pLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9od19ubWkuYwppbmRleCA2MmY2ZTFlLi43MmVjMjllIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9od19ubWkuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9od19ubWkuYwpAQCAtMTcsMjAgKzE3LDMxIEBACiAjaW5jbHVkZSA8bGludXgvbm1pLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKKyNpZmRlZiBDT05GSUdfSEFSRExPQ0tVUF9ERVRFQ1RPUgogdTY0IGh3X25taV9nZXRfc2FtcGxlX3BlcmlvZCh2b2lkKQogewogCXJldHVybiAodTY0KShjcHVfa2h6KSAqIDEwMDAgKiA2MDsKIH0KKyNlbmRpZgogCi0jaWZkZWYgQVJDSF9IQVNfTk1JX1dBVENIRE9HCi0KKyNpZmRlZiBhcmNoX3RyaWdnZXJfYWxsX2NwdV9iYWNrdHJhY2UKIC8qIEZvciByZWxpYWJpbGl0eSwgd2UncmUgcHJlcGFyZWQgdG8gd2FzdGUgYml0cyBoZXJlLiAqLwogc3RhdGljIERFQ0xBUkVfQklUTUFQKGJhY2t0cmFjZV9tYXNrLCBOUl9DUFVTKSBfX3JlYWRfbW9zdGx5OwogCisvKiAiaW4gcHJvZ3Jlc3MiIGZsYWcgb2YgYXJjaF90cmlnZ2VyX2FsbF9jcHVfYmFja3RyYWNlICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBiYWNrdHJhY2VfZmxhZzsKKwogdm9pZCBhcmNoX3RyaWdnZXJfYWxsX2NwdV9iYWNrdHJhY2Uodm9pZCkKIHsKIAlpbnQgaTsKIAorCWlmICh0ZXN0X2FuZF9zZXRfYml0KDAsICZiYWNrdHJhY2VfZmxhZykpCisJCS8qCisJCSAqIElmIHRoZXJlIGlzIGFscmVhZHkgYSB0cmlnZ2VyX2FsbF9jcHVfYmFja3RyYWNlKCkgaW4gcHJvZ3Jlc3MKKwkJICogKGJhY2t0cmFjZV9mbGFnID09IDEpLCBkb24ndCBvdXRwdXQgZG91YmxlIGNwdSBkdW1wIGluZm9zLgorCQkgKi8KKwkJcmV0dXJuOworCiAJY3B1bWFza19jb3B5KHRvX2NwdW1hc2soYmFja3RyYWNlX21hc2spLCBjcHVfb25saW5lX21hc2spOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAic2VuZGluZyBOTUkgdG8gYWxsIENQVXM6XG4iKTsKQEAgLTQyLDYgKzUzLDkgQEAKIAkJCWJyZWFrOwogCQltZGVsYXkoMSk7CiAJfQorCisJY2xlYXJfYml0KDAsICZiYWNrdHJhY2VfZmxhZyk7CisJc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKIH0KIAogc3RhdGljIGludCBfX2twcm9iZXMKQEAgLTUwLDcgKzY0LDcgQEAKIHsKIAlzdHJ1Y3QgZGllX2FyZ3MgKmFyZ3MgPSBfX2FyZ3M7CiAJc3RydWN0IHB0X3JlZ3MgKnJlZ3M7Ci0JaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlpbnQgY3B1OwogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIERJRV9OTUk6CkBAIC02Miw2ICs3Niw3IEBACiAJfQogCiAJcmVncyA9IGFyZ3MtPnJlZ3M7CisJY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCiAJaWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCB0b19jcHVtYXNrKGJhY2t0cmFjZV9tYXNrKSkpIHsKIAkJc3RhdGljIGFyY2hfc3BpbmxvY2tfdCBsb2NrID0gX19BUkNIX1NQSU5fTE9DS19VTkxPQ0tFRDsKQEAgLTkxLDE4ICsxMDYsMyBAQAogfQogZWFybHlfaW5pdGNhbGwocmVnaXN0ZXJfdHJpZ2dlcl9hbGxfY3B1X2JhY2t0cmFjZSk7CiAjZW5kaWYKLQotLyogU1RVQiBjYWxscyB0byBtaW1pYyBvbGQgbm1pX3dhdGNoZG9nIGJlaGF2aW91ciAqLwotI2lmIGRlZmluZWQoQ09ORklHX1g4Nl9MT0NBTF9BUElDKQotdW5zaWduZWQgaW50IG5taV93YXRjaGRvZyA9IE5NSV9OT05FOwotRVhQT1JUX1NZTUJPTChubWlfd2F0Y2hkb2cpOwotdm9pZCBhY3BpX25taV9lbmFibGUodm9pZCkgeyByZXR1cm47IH0KLXZvaWQgYWNwaV9ubWlfZGlzYWJsZSh2b2lkKSB7IHJldHVybjsgfQotI2VuZGlmCi1hdG9taWNfdCBubWlfYWN0aXZlID0gQVRPTUlDX0lOSVQoMCk7ICAgICAgICAgICAvKiBvcHJvZmlsZSB1c2VzIHRoaXMgKi8KLUVYUE9SVF9TWU1CT0wobm1pX2FjdGl2ZSk7Ci1pbnQgdW5rbm93bl9ubWlfcGFuaWM7Ci12b2lkIGNwdV9ubWlfc2V0X3dkX2VuYWJsZWQodm9pZCkgeyByZXR1cm47IH0KLXZvaWQgc3RvcF9hcGljX25taV93YXRjaGRvZyh2b2lkICp1bnVzZWQpIHsgcmV0dXJuOyB9Ci12b2lkIHNldHVwX2FwaWNfbm1pX3dhdGNoZG9nKHZvaWQgKnVudXNlZCkgeyByZXR1cm47IH0KLWludCBfX2luaXQgY2hlY2tfbm1pX3dhdGNoZG9nKHZvaWQpIHsgcmV0dXJuIDA7IH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2lvX2FwaWMuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2lvX2FwaWMuYwppbmRleCBmYWRjZDc0Li42OTdkYzM0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pb19hcGljLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwaWMvaW9fYXBpYy5jCkBAIC01NCw3ICs1NCw2IEBACiAjaW5jbHVkZSA8YXNtL2RtYS5oPgogI2luY2x1ZGUgPGFzbS90aW1lci5oPgogI2luY2x1ZGUgPGFzbS9pODI1OS5oPgotI2luY2x1ZGUgPGFzbS9ubWkuaD4KICNpbmNsdWRlIDxhc20vbXNpZGVmLmg+CiAjaW5jbHVkZSA8YXNtL2h5cGVydHJhbnNwb3J0Lmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CkBAIC0xMjYsNiArMTI1LDI2IEBACiB9CiBlYXJseV9wYXJhbSgibm9hcGljIiwgcGFyc2Vfbm9hcGljKTsKIAorLyogV2lsbCBiZSBjYWxsZWQgaW4gbXBwYXJzZS9hY3BpL3NmaSBjb2RlcyBmb3Igc2F2aW5nIElSUSBpbmZvICovCit2b2lkIG1wX3NhdmVfaXJxKHN0cnVjdCBtcGNfaW50c3JjICptKQoreworCWludCBpOworCisJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiSW50OiB0eXBlICVkLCBwb2wgJWQsIHRyaWcgJWQsIGJ1cyAlMDJ4LCIKKwkJIiBJUlEgJTAyeCwgQVBJQyBJRCAleCwgQVBJQyBJTlQgJTAyeFxuIiwKKwkJbS0+aXJxdHlwZSwgbS0+aXJxZmxhZyAmIDMsIChtLT5pcnFmbGFnID4+IDIpICYgMywgbS0+c3JjYnVzLAorCQltLT5zcmNidXNpcnEsIG0tPmRzdGFwaWMsIG0tPmRzdGlycSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbXBfaXJxX2VudHJpZXM7IGkrKykgeworCQlpZiAoIW1lbWNtcCgmbXBfaXJxc1tpXSwgbSwgc2l6ZW9mKCptKSkpCisJCQlyZXR1cm47CisJfQorCisJbWVtY3B5KCZtcF9pcnFzW21wX2lycV9lbnRyaWVzXSwgbSwgc2l6ZW9mKCptKSk7CisJaWYgKCsrbXBfaXJxX2VudHJpZXMgPT0gTUFYX0lSUV9TT1VSQ0VTKQorCQlwYW5pYygiTWF4ICMgb2YgaXJxIHNvdXJjZXMgZXhjZWVkZWQhIVxuIik7Cit9CisKIHN0cnVjdCBpcnFfcGluX2xpc3QgewogCWludCBhcGljLCBwaW47CiAJc3RydWN0IGlycV9waW5fbGlzdCAqbmV4dDsKQEAgLTEzNiw2ICsxNTUsNyBAQAogCXJldHVybiBremFsbG9jX25vZGUoc2l6ZW9mKHN0cnVjdCBpcnFfcGluX2xpc3QpLCBHRlBfS0VSTkVMLCBub2RlKTsKIH0KIAorCiAvKiBpcnFfY2ZnIGlzIGluZGV4ZWQgYnkgdGhlIHN1bSBvZiBhbGwgUlRFcyBpbiBhbGwgSS9PIEFQSUNzLiAqLwogI2lmZGVmIENPTkZJR19TUEFSU0VfSVJRCiBzdGF0aWMgc3RydWN0IGlycV9jZmcgaXJxX2NmZ3hbTlJfSVJRU19MRUdBQ1ldOwpAQCAtMTkzNCw4ICsxOTU0LDcgQEAKICAqCiAgKiBieSBNYXR0IERvbXNjaCA8TWF0dF9Eb21zY2hAZGVsbC5jb20+ICBUdWUgRGVjIDIxIDEyOjI1OjA1IENTVCAxOTk5CiAgKi8KLQotdm9pZCBfX2luaXQgc2V0dXBfaW9hcGljX2lkc19mcm9tX21wYyh2b2lkKQordm9pZCBfX2luaXQgc2V0dXBfaW9hcGljX2lkc19mcm9tX21wY19ub2NoZWNrKHZvaWQpCiB7CiAJdW5pb24gSU9fQVBJQ19yZWdfMDAgcmVnXzAwOwogCXBoeXNpZF9tYXNrX3QgcGh5c19pZF9wcmVzZW50X21hcDsKQEAgLTE5NDQsMTUgKzE5NjMsNiBAQAogCXVuc2lnbmVkIGNoYXIgb2xkX2lkOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAoYWNwaV9pb2FwaWMpCi0JCXJldHVybjsKLQkvKgotCSAqIERvbid0IGNoZWNrIEkvTyBBUElDIElEcyBmb3IgeEFQSUMgc3lzdGVtcy4gIFRoZXkgaGF2ZQotCSAqIG5vIG1lYW5pbmcgd2l0aG91dCB0aGUgc2VyaWFsIEFQSUMgYnVzLgotCSAqLwotCWlmICghKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0lOVEVMKQotCQl8fCBBUElDX1hBUElDKGFwaWNfdmVyc2lvbltib290X2NwdV9waHlzaWNhbF9hcGljaWRdKSkKLQkJcmV0dXJuOwogCS8qCiAJICogVGhpcyBpcyBicm9rZW47IGFueXRoaW5nIHdpdGggYSByZWFsIGNwdSBjb3VudCBoYXMgdG8KIAkgKiBjaXJjdW12ZW50IHRoaXMgaWRpb2N5IHJlZ2FyZGxlc3MuCkBAIC0yMDA2LDcgKzIwMTYsNiBAQAogCQkJcGh5c2lkc19vcihwaHlzX2lkX3ByZXNlbnRfbWFwLCBwaHlzX2lkX3ByZXNlbnRfbWFwLCB0bXApOwogCQl9CiAKLQogCQkvKgogCQkgKiBXZSBuZWVkIHRvIGFkanVzdCB0aGUgSVJRIHJvdXRpbmcgdGFibGUKIAkJICogaWYgdGhlIElEIGNoYW5nZWQuCkBAIC0yMDE4LDkgKzIwMjcsMTIgQEAKIAkJCQkJCT0gbXBfaW9hcGljc1thcGljX2lkXS5hcGljaWQ7CiAKIAkJLyoKLQkJICogUmVhZCB0aGUgcmlnaHQgdmFsdWUgZnJvbSB0aGUgTVBDIHRhYmxlIGFuZAotCQkgKiB3cml0ZSBpdCBpbnRvIHRoZSBJRCByZWdpc3Rlci4KKwkJICogVXBkYXRlIHRoZSBJRCByZWdpc3RlciBhY2NvcmRpbmcgdG8gdGhlIHJpZ2h0IHZhbHVlCisJCSAqIGZyb20gdGhlIE1QQyB0YWJsZSBpZiB0aGV5IGFyZSBkaWZmZXJlbnQuCiAJCSAqLworCQlpZiAobXBfaW9hcGljc1thcGljX2lkXS5hcGljaWQgPT0gcmVnXzAwLmJpdHMuSUQpCisJCQljb250aW51ZTsKKwogCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsIEtFUk5fSU5GTwogCQkJIi4uLmNoYW5naW5nIElPLUFQSUMgcGh5c2ljYWwgQVBJQyBJRCB0byAlZCAuLi4iLAogCQkJbXBfaW9hcGljc1thcGljX2lkXS5hcGljaWQpOwpAQCAtMjA0Miw2ICsyMDU0LDIxIEBACiAJCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICIgb2suXG4iKTsKIAl9CiB9CisKK3ZvaWQgX19pbml0IHNldHVwX2lvYXBpY19pZHNfZnJvbV9tcGModm9pZCkKK3sKKworCWlmIChhY3BpX2lvYXBpYykKKwkJcmV0dXJuOworCS8qCisJICogRG9uJ3QgY2hlY2sgSS9PIEFQSUMgSURzIGZvciB4QVBJQyBzeXN0ZW1zLiAgVGhleSBoYXZlCisJICogbm8gbWVhbmluZyB3aXRob3V0IHRoZSBzZXJpYWwgQVBJQyBidXMuCisJICovCisJaWYgKCEoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfSU5URUwpCisJCXx8IEFQSUNfWEFQSUMoYXBpY192ZXJzaW9uW2Jvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZF0pKQorCQlyZXR1cm47CisJc2V0dXBfaW9hcGljX2lkc19mcm9tX21wY19ub2NoZWNrKCk7Cit9CiAjZW5kaWYKIAogaW50IG5vX3RpbWVyX2NoZWNrIF9faW5pdGRhdGE7CkBAIC0yMzAyLDcgKzIzMjksNyBAQAogCQl1bnNpZ25lZCBpbnQgaXJyOwogCQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CiAJCXN0cnVjdCBpcnFfY2ZnICpjZmc7Ci0JCWlycSA9IF9fZ2V0X2NwdV92YXIodmVjdG9yX2lycSlbdmVjdG9yXTsKKwkJaXJxID0gX190aGlzX2NwdV9yZWFkKHZlY3Rvcl9pcnFbdmVjdG9yXSk7CiAKIAkJaWYgKGlycSA9PSAtMSkKIAkJCWNvbnRpbnVlOwpAQCAtMjMzNiw3ICsyMzYzLDcgQEAKIAkJCWFwaWMtPnNlbmRfSVBJX3NlbGYoSVJRX01PVkVfQ0xFQU5VUF9WRUNUT1IpOwogCQkJZ290byB1bmxvY2s7CiAJCX0KLQkJX19nZXRfY3B1X3Zhcih2ZWN0b3JfaXJxKVt2ZWN0b3JdID0gLTE7CisJCV9fdGhpc19jcHVfd3JpdGUodmVjdG9yX2lycVt2ZWN0b3JdLCAtMSk7CiB1bmxvY2s6CiAJCXJhd19zcGluX3VubG9jaygmZGVzYy0+bG9jayk7CiAJfQpAQCAtMjY0MiwyNCArMjY2OSw2IEBACiAJCQkJICAgICAgImVkZ2UiKTsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IHNldHVwX25taSh2b2lkKQotewotCS8qCi0JICogRGlydHkgdHJpY2sgdG8gZW5hYmxlIHRoZSBOTUkgd2F0Y2hkb2cgLi4uCi0JICogV2UgcHV0IHRoZSA4MjU5QSBtYXN0ZXIgaW50byBBRU9JIG1vZGUgYW5kCi0JICogdW5tYXNrIG9uIGFsbCBsb2NhbCBBUElDcyBMVlQwIGFzIE5NSS4KLQkgKgotCSAqIFRoZSBpZGVhIHRvIHVzZSB0aGUgODI1OUEgaW4gQUVPSSBtb2RlICgnODI1OUEgVmlydHVhbCBXaXJlJykKLQkgKiBpcyBmcm9tIE1hY2llaiBXLiBSb3p5Y2tpIC0gc28gd2UgZG8gbm90IGhhdmUgdG8gRU9JIGZyb20KLQkgKiB0aGUgTk1JIGhhbmRsZXIgb3IgdGhlIHRpbWVyIGludGVycnVwdC4KLQkgKi8KLQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsIEtFUk5fSU5GTyAiYWN0aXZhdGluZyBOTUkgV2F0Y2hkb2cgLi4uIik7Ci0KLQllbmFibGVfTk1JX3Rocm91Z2hfTFZUMCgpOwotCi0JYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiIGRvbmUuXG4iKTsKLX0KLQogLyoKICAqIFRoaXMgbG9va3MgYSBiaXQgaGFja2lzaCBidXQgaXQncyBhYm91dCB0aGUgb25seSBvbmUgd2F5IG9mIHNlbmRpbmcKICAqIGEgZmV3IElOVEEgY3ljbGVzIHRvIDgyNTlBcyBhbmQgYW55IGFzc29jaWF0ZWQgZ2x1ZSBsb2dpYy4gIElDUiBkb2VzCkBAIC0yNzY1LDE1ICsyNzc0LDYgQEAKIAkgKi8KIAlhcGljX3dyaXRlKEFQSUNfTFZUMCwgQVBJQ19MVlRfTUFTS0VEIHwgQVBJQ19ETV9FWFRJTlQpOwogCWxlZ2FjeV9waWMtPmluaXQoMSk7Ci0jaWZkZWYgQ09ORklHX1g4Nl8zMgotCXsKLQkJdW5zaWduZWQgaW50IHZlcjsKLQotCQl2ZXIgPSBhcGljX3JlYWQoQVBJQ19MVlIpOwotCQl2ZXIgPSBHRVRfQVBJQ19WRVJTSU9OKHZlcik7Ci0JCXRpbWVyX2FjayA9IChubWlfd2F0Y2hkb2cgPT0gTk1JX0lPX0FQSUMgJiYgIUFQSUNfSU5URUdSQVRFRCh2ZXIpKTsKLQl9Ci0jZW5kaWYKIAogCXBpbjEgID0gZmluZF9pc2FfaXJxX3BpbigwLCBtcF9JTlQpOwogCWFwaWMxID0gZmluZF9pc2FfaXJxX2FwaWMoMCwgbXBfSU5UKTsKQEAgLTI4MjEsMTAgKzI4MjEsNiBAQAogCQkJCXVubWFza19pb2FwaWMoY2ZnKTsKIAkJfQogCQlpZiAodGltZXJfaXJxX3dvcmtzKCkpIHsKLQkJCWlmIChubWlfd2F0Y2hkb2cgPT0gTk1JX0lPX0FQSUMpIHsKLQkJCQlzZXR1cF9ubWkoKTsKLQkJCQlsZWdhY3lfcGljLT51bm1hc2soMCk7Ci0JCQl9CiAJCQlpZiAoZGlzYWJsZV90aW1lcl9waW5fMSA+IDApCiAJCQkJY2xlYXJfSU9fQVBJQ19waW4oMCwgcGluMSk7CiAJCQlnb3RvIG91dDsKQEAgLTI4NTAsMTEgKzI4NDYsNiBAQAogCQlpZiAodGltZXJfaXJxX3dvcmtzKCkpIHsKIAkJCWFwaWNfcHJpbnRrKEFQSUNfUVVJRVQsIEtFUk5fSU5GTyAiLi4uLi4uLiB3b3Jrcy5cbiIpOwogCQkJdGltZXJfdGhyb3VnaF84MjU5ID0gMTsKLQkJCWlmIChubWlfd2F0Y2hkb2cgPT0gTk1JX0lPX0FQSUMpIHsKLQkJCQlsZWdhY3lfcGljLT5tYXNrKDApOwotCQkJCXNldHVwX25taSgpOwotCQkJCWxlZ2FjeV9waWMtPnVubWFzaygwKTsKLQkJCX0KIAkJCWdvdG8gb3V0OwogCQl9CiAJCS8qCkBAIC0yODY2LDE1ICsyODU3LDYgQEAKIAkJYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9JTkZPICIuLi4uLi4uIGZhaWxlZC5cbiIpOwogCX0KIAotCWlmIChubWlfd2F0Y2hkb2cgPT0gTk1JX0lPX0FQSUMpIHsKLQkJYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9XQVJOSU5HICJ0aW1lciBkb2Vzbid0IHdvcmsgIgotCQkJICAgICJ0aHJvdWdoIHRoZSBJTy1BUElDIC0gZGlzYWJsaW5nIE5NSSBXYXRjaGRvZyFcbiIpOwotCQlubWlfd2F0Y2hkb2cgPSBOTUlfTk9ORTsKLQl9Ci0jaWZkZWYgQ09ORklHX1g4Nl8zMgotCXRpbWVyX2FjayA9IDA7Ci0jZW5kaWYKLQogCWFwaWNfcHJpbnRrKEFQSUNfUVVJRVQsIEtFUk5fSU5GTwogCQkgICAgIi4uLnRyeWluZyB0byBzZXQgdXAgdGltZXIgYXMgVmlydHVhbCBXaXJlIElSUS4uLlxuIik7CiAKQEAgLTM2MzksNyArMzYyMSw3IEBACiAJcmV0dXJuIHJlZ18wMS5iaXRzLmVudHJpZXMgKyAxOwogfQogCi12b2lkIF9faW5pdCBwcm9iZV9ucl9pcnFzX2dzaSh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IHByb2JlX25yX2lycXNfZ3NpKHZvaWQpCiB7CiAJaW50IG5yOwogCkBAIC0zOTU2LDcgKzM5MzgsNyBAQAogCXJldHVybiByZXM7CiB9CiAKLXZvaWQgX19pbml0IGlvYXBpY19pbml0X21hcHBpbmdzKHZvaWQpCit2b2lkIF9faW5pdCBpb2FwaWNfYW5kX2dzaV9pbml0KHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBpb2FwaWNfcGh5cywgaWR4ID0gRklYX0lPX0FQSUNfQkFTRV8wOwogCXN0cnVjdCByZXNvdXJjZSAqaW9hcGljX3JlczsKQEAgLTM5OTQsNiArMzk3Niw4IEBACiAJCWlvYXBpY19yZXMtPmVuZCA9IGlvYXBpY19waHlzICsgSU9fQVBJQ19TTE9UX1NJWkUgLSAxOwogCQlpb2FwaWNfcmVzKys7CiAJfQorCisJcHJvYmVfbnJfaXJxc19nc2koKTsKIH0KIAogdm9pZCBfX2luaXQgaW9hcGljX2luc2VydF9yZXNvdXJjZXModm9pZCkKQEAgLTQxMDMsNyArNDA4Nyw4IEBACiAKIAlwcmludGsoS0VSTl9JTkZPICJFYXJseSBBUElDIHNldHVwIGZvciBzeXN0ZW0gdGltZXIwXG4iKTsKICNpZm5kZWYgQ09ORklHX1NNUAotCXBoeXNfY3B1X3ByZXNlbnRfbWFwID0gcGh5c2lkX21hc2tfb2ZfcGh5c2lkKGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCk7CisJcGh5c2lkX3NldF9tYXNrX29mX3BoeXNpZChib290X2NwdV9waHlzaWNhbF9hcGljaWQsCisJCQkJCSAmcGh5c19jcHVfcHJlc2VudF9tYXApOwogI2VuZGlmCiAJLyogTWFrZSBzdXJlIHRoZSBpcnEgZGVzY3JpcHRvciBpcyBzZXQgdXAgKi8KIAljZmcgPSBhbGxvY19pcnFfYW5kX2NmZ19hdCgwLCAwKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL25taS5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMvbm1pLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5MDA0MWMuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMvbm1pLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1NjcgKzAsMCBAQAotLyoKLSAqICBOTUkgd2F0Y2hkb2cgc3VwcG9ydCBvbiBBUElDIHN5c3RlbXMKLSAqCi0gKiAgU3RhcnRlZCBieSBJbmdvIE1vbG5hciA8bWluZ29AcmVkaGF0LmNvbT4KLSAqCi0gKiAgRml4ZXM6Ci0gKiAgTWlrYWVsIFBldHRlcnNzb24JOiBBTUQgSzcgc3VwcG9ydCBmb3IgbG9jYWwgQVBJQyBOTUkgd2F0Y2hkb2cuCi0gKiAgTWlrYWVsIFBldHRlcnNzb24JOiBQb3dlciBNYW5hZ2VtZW50IGZvciBsb2NhbCBBUElDIE5NSSB3YXRjaGRvZy4KLSAqICBNaWthZWwgUGV0dGVyc3Nvbgk6IFBlbnRpdW0gNCBzdXBwb3J0IGZvciBsb2NhbCBBUElDIE5NSSB3YXRjaGRvZy4KLSAqICBQYXZlbCBNYWNoZWsgYW5kCi0gKiAgTWlrYWVsIFBldHRlcnNzb24JOiBQTSBjb252ZXJ0ZWQgdG8gZHJpdmVyIG1vZGVsLiBEaXNhYmxlL2VuYWJsZSBBUEkuCi0gKi8KLQotI2luY2x1ZGUgPGFzbS9hcGljLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9ubWkuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgotI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgotI2luY2x1ZGUgPGxpbnV4L2twcm9iZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KLSNpbmNsdWRlIDxsaW51eC9rZGVidWcuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLQotI2luY2x1ZGUgPGFzbS9pODI1OS5oPgotI2luY2x1ZGUgPGFzbS9pb19hcGljLmg+Ci0jaW5jbHVkZSA8YXNtL3Byb3RvLmg+Ci0jaW5jbHVkZSA8YXNtL3RpbWVyLmg+Ci0KLSNpbmNsdWRlIDxhc20vbWNlLmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaF90cmFwcy5oPgotCi1pbnQgdW5rbm93bl9ubWlfcGFuaWM7Ci1pbnQgbm1pX3dhdGNoZG9nX2VuYWJsZWQ7Ci0KLS8qIEZvciByZWxpYWJpbGl0eSwgd2UncmUgcHJlcGFyZWQgdG8gd2FzdGUgYml0cyBoZXJlLiAqLwotc3RhdGljIERFQ0xBUkVfQklUTUFQKGJhY2t0cmFjZV9tYXNrLCBOUl9DUFVTKSBfX3JlYWRfbW9zdGx5OwotCi0vKiBubWlfYWN0aXZlOgotICogPjA6IHRoZSBsYXBpYyBOTUkgd2F0Y2hkb2cgaXMgYWN0aXZlLCBidXQgY2FuIGJlIGRpc2FibGVkCi0gKiA8MDogdGhlIGxhcGljIE5NSSB3YXRjaGRvZyBoYXMgbm90IGJlZW4gc2V0IHVwLCBhbmQgY2Fubm90Ci0gKiAgICAgYmUgZW5hYmxlZAotICogIDA6IHRoZSBsYXBpYyBOTUkgd2F0Y2hkb2cgaXMgZGlzYWJsZWQsIGJ1dCBjYW4gYmUgZW5hYmxlZAotICovCi1hdG9taWNfdCBubWlfYWN0aXZlID0gQVRPTUlDX0lOSVQoMCk7CQkvKiBvcHJvZmlsZSB1c2VzIHRoaXMgKi8KLUVYUE9SVF9TWU1CT0wobm1pX2FjdGl2ZSk7Ci0KLXVuc2lnbmVkIGludCBubWlfd2F0Y2hkb2cgPSBOTUlfTk9ORTsKLUVYUE9SVF9TWU1CT0wobm1pX3dhdGNoZG9nKTsKLQotc3RhdGljIGludCBwYW5pY19vbl90aW1lb3V0OwotCi1zdGF0aWMgdW5zaWduZWQgaW50IG5taV9oeiA9IEhaOwotc3RhdGljIERFRklORV9QRVJfQ1BVKHNob3J0LCB3ZF9lbmFibGVkKTsKLXN0YXRpYyBpbnQgZW5kZmxhZyBfX2luaXRkYXRhOwotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnZXRfbm1pX2NvdW50KGludCBjcHUpCi17Ci0JcmV0dXJuIHBlcl9jcHUoaXJxX3N0YXQsIGNwdSkuX19ubWlfY291bnQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IG1jZV9pbl9wcm9ncmVzcyh2b2lkKQotewotI2lmIGRlZmluZWQoQ09ORklHX1g4Nl9NQ0UpCi0JcmV0dXJuIGF0b21pY19yZWFkKCZtY2VfZW50cnkpID4gMDsKLSNlbmRpZgotCXJldHVybiAwOwotfQotCi0vKgotICogVGFrZSB0aGUgbG9jYWwgYXBpYyB0aW1lciBhbmQgUElUL0hQRVQgaW50byBhY2NvdW50LiBXZSBkb24ndAotICoga25vdyB3aGljaCBvbmUgaXMgYWN0aXZlLCB3aGVuIHdlIGhhdmUgaGlnaHJlcy9keW50aWNrIG9uCi0gKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdldF90aW1lcl9pcnFzKGludCBjcHUpCi17Ci0JcmV0dXJuIHBlcl9jcHUoaXJxX3N0YXQsIGNwdSkuYXBpY190aW1lcl9pcnFzICsKLQkJcGVyX2NwdShpcnFfc3RhdCwgY3B1KS5pcnEwX2lycXM7Ci19Ci0KLSNpZmRlZiBDT05GSUdfU01QCi0vKgotICogVGhlIHBlcmZvcm1hbmNlIGNvdW50ZXJzIHVzZWQgYnkgTk1JX0xPQ0FMX0FQSUMgZG9uJ3QgdHJpZ2dlciB3aGVuCi0gKiB0aGUgQ1BVIGlzIGlkbGUuIFRvIG1ha2Ugc3VyZSB0aGUgTk1JIHdhdGNoZG9nIHJlYWxseSB0aWNrcyBvbiBhbGwKLSAqIENQVXMgZHVyaW5nIHRoZSB0ZXN0IG1ha2UgdGhlbSBidXN5LgotICovCi1zdGF0aWMgX19pbml0IHZvaWQgbm1pX2NwdV9idXN5KHZvaWQgKmRhdGEpCi17Ci0JbG9jYWxfaXJxX2VuYWJsZV9pbl9oYXJkaXJxKCk7Ci0JLyoKLQkgKiBJbnRlbnRpb25hbGx5IGRvbid0IHVzZSBjcHVfcmVsYXggaGVyZS4gVGhpcyBpcwotCSAqIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBwZXJmb3JtYW5jZSBjb3VudGVyIHJlYWxseSB0aWNrcywKLQkgKiBldmVuIGlmIHRoZXJlIGlzIGEgc2ltdWxhdG9yIG9yIHNpbWlsYXIgdGhhdCBjYXRjaGVzIHRoZQotCSAqIHBhdXNlIGluc3RydWN0aW9uLiBPbiBhIHJlYWwgSFQgbWFjaGluZSB0aGlzIGlzIGZpbmUgYmVjYXVzZQotCSAqIGFsbCBvdGhlciBDUFVzIGFyZSBidXN5IHdpdGggInVzZWxlc3MiIGRlbGF5IGxvb3BzIGFuZCBkb24ndAotCSAqIGNhcmUgaWYgdGhleSBnZXQgc29tZXdoYXQgbGVzcyBjeWNsZXMuCi0JICovCi0Jd2hpbGUgKGVuZGZsYWcgPT0gMCkKLQkJbWIoKTsKLX0KLSNlbmRpZgotCi1zdGF0aWMgdm9pZCByZXBvcnRfYnJva2VuX25taShpbnQgY3B1LCB1bnNpZ25lZCBpbnQgKnByZXZfbm1pX2NvdW50KQotewotCXByaW50ayhLRVJOX0NPTlQgIlxuIik7Ci0KLQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSJXQVJOSU5HOiBDUFUjJWQ6IE5NSSBhcHBlYXJzIHRvIGJlIHN0dWNrICglZC0+JWQpIVxuIiwKLQkJCWNwdSwgcHJldl9ubWlfY291bnRbY3B1XSwgZ2V0X25taV9jb3VudChjcHUpKTsKLQotCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJIlBsZWFzZSByZXBvcnQgdGhpcyB0byBidWd6aWxsYS5rZXJuZWwub3JnLFxuIik7Ci0JcHJpbnRrKEtFUk5fV0FSTklORwotCQkiYW5kIGF0dGFjaCB0aGUgb3V0cHV0IG9mIHRoZSAnZG1lc2cnIGNvbW1hbmQuXG4iKTsKLQotCXBlcl9jcHUod2RfZW5hYmxlZCwgY3B1KSA9IDA7Ci0JYXRvbWljX2RlYygmbm1pX2FjdGl2ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fYWNwaV9ubWlfZGlzYWJsZSh2b2lkICpfX3VudXNlZCkKLXsKLQlhcGljX3dyaXRlKEFQSUNfTFZUMCwgQVBJQ19ETV9OTUkgfCBBUElDX0xWVF9NQVNLRUQpOwotfQotCi1pbnQgX19pbml0IGNoZWNrX25taV93YXRjaGRvZyh2b2lkKQotewotCXVuc2lnbmVkIGludCAqcHJldl9ubWlfY291bnQ7Ci0JaW50IGNwdTsKLQotCWlmICghbm1pX3dhdGNoZG9nX2FjdGl2ZSgpIHx8ICFhdG9taWNfcmVhZCgmbm1pX2FjdGl2ZSkpCi0JCXJldHVybiAwOwotCi0JcHJldl9ubWlfY291bnQgPSBrbWFsbG9jKG5yX2NwdV9pZHMgKiBzaXplb2YoaW50KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFwcmV2X25taV9jb3VudCkKLQkJZ290byBlcnJvcjsKLQotCXByaW50ayhLRVJOX0lORk8gIlRlc3RpbmcgTk1JIHdhdGNoZG9nIC4uLiAiKTsKLQotI2lmZGVmIENPTkZJR19TTVAKLQlpZiAobm1pX3dhdGNoZG9nID09IE5NSV9MT0NBTF9BUElDKQotCQlzbXBfY2FsbF9mdW5jdGlvbihubWlfY3B1X2J1c3ksICh2b2lkICopJmVuZGZsYWcsIDApOwotI2VuZGlmCi0KLQlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KQotCQlwcmV2X25taV9jb3VudFtjcHVdID0gZ2V0X25taV9jb3VudChjcHUpOwotCWxvY2FsX2lycV9lbmFibGUoKTsKLQltZGVsYXkoKDIwICogMTAwMCkgLyBubWlfaHopOyAvKiB3YWl0IDIwIHRpY2tzICovCi0KLQlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewotCQlpZiAoIXBlcl9jcHUod2RfZW5hYmxlZCwgY3B1KSkKLQkJCWNvbnRpbnVlOwotCQlpZiAoZ2V0X25taV9jb3VudChjcHUpIC0gcHJldl9ubWlfY291bnRbY3B1XSA8PSA1KQotCQkJcmVwb3J0X2Jyb2tlbl9ubWkoY3B1LCBwcmV2X25taV9jb3VudCk7Ci0JfQotCWVuZGZsYWcgPSAxOwotCWlmICghYXRvbWljX3JlYWQoJm5taV9hY3RpdmUpKSB7Ci0JCWtmcmVlKHByZXZfbm1pX2NvdW50KTsKLQkJYXRvbWljX3NldCgmbm1pX2FjdGl2ZSwgLTEpOwotCQlnb3RvIGVycm9yOwotCX0KLQlwcmludGsoIk9LLlxuIik7Ci0KLQkvKgotCSAqIG5vdyB0aGF0IHdlIGtub3cgaXQgd29ya3Mgd2UgY2FuIHJlZHVjZSBOTUkgZnJlcXVlbmN5IHRvCi0JICogc29tZXRoaW5nIG1vcmUgcmVhc29uYWJsZTsgbWFrZXMgYSBkaWZmZXJlbmNlIGluIHNvbWUgY29uZmlncwotCSAqLwotCWlmIChubWlfd2F0Y2hkb2cgPT0gTk1JX0xPQ0FMX0FQSUMpCi0JCW5taV9oeiA9IGxhcGljX2FkanVzdF9ubWlfaHooMSk7Ci0KLQlrZnJlZShwcmV2X25taV9jb3VudCk7Ci0JcmV0dXJuIDA7Ci1lcnJvcjoKLQlpZiAobm1pX3dhdGNoZG9nID09IE5NSV9JT19BUElDKSB7Ci0JCWlmICghdGltZXJfdGhyb3VnaF84MjU5KQotCQkJbGVnYWN5X3BpYy0+bWFzaygwKTsKLQkJb25fZWFjaF9jcHUoX19hY3BpX25taV9kaXNhYmxlLCBOVUxMLCAxKTsKLQl9Ci0KLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0JdGltZXJfYWNrID0gMDsKLSNlbmRpZgotCXJldHVybiAtMTsKLX0KLQotc3RhdGljIGludCBfX2luaXQgc2V0dXBfbm1pX3dhdGNoZG9nKGNoYXIgKnN0cikKLXsKLQl1bnNpZ25lZCBpbnQgbm1pOwotCi0JaWYgKCFzdHJuY21wKHN0ciwgInBhbmljIiwgNSkpIHsKLQkJcGFuaWNfb25fdGltZW91dCA9IDE7Ci0JCXN0ciA9IHN0cmNocihzdHIsICcsJyk7Ci0JCWlmICghc3RyKQotCQkJcmV0dXJuIDE7Ci0JCSsrc3RyOwotCX0KLQotCWlmICghc3RybmNtcChzdHIsICJsYXBpYyIsIDUpKQotCQlubWlfd2F0Y2hkb2cgPSBOTUlfTE9DQUxfQVBJQzsKLQllbHNlIGlmICghc3RybmNtcChzdHIsICJpb2FwaWMiLCA2KSkKLQkJbm1pX3dhdGNoZG9nID0gTk1JX0lPX0FQSUM7Ci0JZWxzZSB7Ci0JCWdldF9vcHRpb24oJnN0ciwgJm5taSk7Ci0JCWlmIChubWkgPj0gTk1JX0lOVkFMSUQpCi0JCQlyZXR1cm4gMDsKLQkJbm1pX3dhdGNoZG9nID0gbm1pOwotCX0KLQotCXJldHVybiAxOwotfQotX19zZXR1cCgibm1pX3dhdGNoZG9nPSIsIHNldHVwX25taV93YXRjaGRvZyk7Ci0KLS8qCi0gKiBTdXNwZW5kL3Jlc3VtZSBzdXBwb3J0Ci0gKi8KLSNpZmRlZiBDT05GSUdfUE0KLQotc3RhdGljIGludCBubWlfcG1fYWN0aXZlOyAvKiBubWlfYWN0aXZlIGJlZm9yZSBzdXNwZW5kICovCi0KLXN0YXRpYyBpbnQgbGFwaWNfbm1pX3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQotewotCS8qIG9ubHkgQ1BVMCBnb2VzIGhlcmUsIG90aGVyIENQVXMgc2hvdWxkIGJlIG9mZmxpbmUgKi8KLQlubWlfcG1fYWN0aXZlID0gYXRvbWljX3JlYWQoJm5taV9hY3RpdmUpOwotCXN0b3BfYXBpY19ubWlfd2F0Y2hkb2coTlVMTCk7Ci0JQlVHX09OKGF0b21pY19yZWFkKCZubWlfYWN0aXZlKSAhPSAwKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBsYXBpY19ubWlfcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCi17Ci0JLyogb25seSBDUFUwIGdvZXMgaGVyZSwgb3RoZXIgQ1BVcyBzaG91bGQgYmUgb2ZmbGluZSAqLwotCWlmIChubWlfcG1fYWN0aXZlID4gMCkgewotCQlzZXR1cF9hcGljX25taV93YXRjaGRvZyhOVUxMKTsKLQkJdG91Y2hfbm1pX3dhdGNoZG9nKCk7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IHN5c2Rldl9jbGFzcyBubWlfc3lzY2xhc3MgPSB7Ci0JLm5hbWUJCT0gImxhcGljX25taSIsCi0JLnJlc3VtZQkJPSBsYXBpY19ubWlfcmVzdW1lLAotCS5zdXNwZW5kCT0gbGFwaWNfbm1pX3N1c3BlbmQsCi19OwotCi1zdGF0aWMgc3RydWN0IHN5c19kZXZpY2UgZGV2aWNlX2xhcGljX25taSA9IHsKLQkuaWQJPSAwLAotCS5jbHMJPSAmbm1pX3N5c2NsYXNzLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgaW5pdF9sYXBpY19ubWlfc3lzZnModm9pZCkKLXsKLQlpbnQgZXJyb3I7Ci0KLQkvKgotCSAqIHNob3VsZCByZWFsbHkgYmUgYSBCVUdfT04gYnV0IGIvYyB0aGlzIGlzIGFuCi0JICogaW5pdCBjYWxsLCBpdCBqdXN0IGRvZXNuJ3Qgd29yay4gIC1kY3oKLQkgKi8KLQlpZiAobm1pX3dhdGNoZG9nICE9IE5NSV9MT0NBTF9BUElDKQotCQlyZXR1cm4gMDsKLQotCWlmIChhdG9taWNfcmVhZCgmbm1pX2FjdGl2ZSkgPCAwKQotCQlyZXR1cm4gMDsKLQotCWVycm9yID0gc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZubWlfc3lzY2xhc3MpOwotCWlmICghZXJyb3IpCi0JCWVycm9yID0gc3lzZGV2X3JlZ2lzdGVyKCZkZXZpY2VfbGFwaWNfbm1pKTsKLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLS8qIG11c3QgY29tZSBhZnRlciB0aGUgbG9jYWwgQVBJQydzIGRldmljZV9pbml0Y2FsbCgpICovCi1sYXRlX2luaXRjYWxsKGluaXRfbGFwaWNfbm1pX3N5c2ZzKTsKLQotI2VuZGlmCS8qIENPTkZJR19QTSAqLwotCi1zdGF0aWMgdm9pZCBfX2FjcGlfbm1pX2VuYWJsZSh2b2lkICpfX3VudXNlZCkKLXsKLQlhcGljX3dyaXRlKEFQSUNfTFZUMCwgQVBJQ19ETV9OTUkpOwotfQotCi0vKgotICogRW5hYmxlIHRpbWVyIGJhc2VkIE5NSXMgb24gYWxsIENQVXM6Ci0gKi8KLXZvaWQgYWNwaV9ubWlfZW5hYmxlKHZvaWQpCi17Ci0JaWYgKGF0b21pY19yZWFkKCZubWlfYWN0aXZlKSAmJiBubWlfd2F0Y2hkb2cgPT0gTk1JX0lPX0FQSUMpCi0JCW9uX2VhY2hfY3B1KF9fYWNwaV9ubWlfZW5hYmxlLCBOVUxMLCAxKTsKLX0KLQotLyoKLSAqIERpc2FibGUgdGltZXIgYmFzZWQgTk1JcyBvbiBhbGwgQ1BVczoKLSAqLwotdm9pZCBhY3BpX25taV9kaXNhYmxlKHZvaWQpCi17Ci0JaWYgKGF0b21pY19yZWFkKCZubWlfYWN0aXZlKSAmJiBubWlfd2F0Y2hkb2cgPT0gTk1JX0lPX0FQSUMpCi0JCW9uX2VhY2hfY3B1KF9fYWNwaV9ubWlfZGlzYWJsZSwgTlVMTCwgMSk7Ci19Ci0KLS8qCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhcyBzb29uIHRoZSBMQVBJQyBOTUkgd2F0Y2hkb2cgZHJpdmVyIGhhcyBldmVyeXRoaW5nCi0gKiBpbiBwbGFjZSBhbmQgaXQncyByZWFkeSB0byBjaGVjayBpZiB0aGUgTk1JcyBiZWxvbmcgdG8gdGhlIE5NSSB3YXRjaGRvZwotICovCi12b2lkIGNwdV9ubWlfc2V0X3dkX2VuYWJsZWQodm9pZCkKLXsKLQlfX2dldF9jcHVfdmFyKHdkX2VuYWJsZWQpID0gMTsKLX0KLQotdm9pZCBzZXR1cF9hcGljX25taV93YXRjaGRvZyh2b2lkICp1bnVzZWQpCi17Ci0JaWYgKF9fZ2V0X2NwdV92YXIod2RfZW5hYmxlZCkpCi0JCXJldHVybjsKLQotCS8qIGNoZWFwIGhhY2sgdG8gc3VwcG9ydCBzdXNwZW5kL3Jlc3VtZSAqLwotCS8qIGlmIGNwdTAgaXMgbm90IGFjdGl2ZSBuZWl0aGVyIHNob3VsZCB0aGUgb3RoZXIgY3B1cyAqLwotCWlmIChzbXBfcHJvY2Vzc29yX2lkKCkgIT0gMCAmJiBhdG9taWNfcmVhZCgmbm1pX2FjdGl2ZSkgPD0gMCkKLQkJcmV0dXJuOwotCi0Jc3dpdGNoIChubWlfd2F0Y2hkb2cpIHsKLQljYXNlIE5NSV9MT0NBTF9BUElDOgotCQlpZiAobGFwaWNfd2F0Y2hkb2dfaW5pdChubWlfaHopIDwgMCkgewotCQkJX19nZXRfY3B1X3Zhcih3ZF9lbmFibGVkKSA9IDA7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJLyogRkFMTCBUSFJPVUdIICovCi0JY2FzZSBOTUlfSU9fQVBJQzoKLQkJX19nZXRfY3B1X3Zhcih3ZF9lbmFibGVkKSA9IDE7Ci0JCWF0b21pY19pbmMoJm5taV9hY3RpdmUpOwotCX0KLX0KLQotdm9pZCBzdG9wX2FwaWNfbm1pX3dhdGNoZG9nKHZvaWQgKnVudXNlZCkKLXsKLQkvKiBvbmx5IHN1cHBvcnQgTE9DQUwgYW5kIElPIEFQSUNzIGZvciBub3cgKi8KLQlpZiAoIW5taV93YXRjaGRvZ19hY3RpdmUoKSkKLQkJcmV0dXJuOwotCWlmIChfX2dldF9jcHVfdmFyKHdkX2VuYWJsZWQpID09IDApCi0JCXJldHVybjsKLQlpZiAobm1pX3dhdGNoZG9nID09IE5NSV9MT0NBTF9BUElDKQotCQlsYXBpY193YXRjaGRvZ19zdG9wKCk7Ci0JZWxzZQotCQlfX2FjcGlfbm1pX2Rpc2FibGUoTlVMTCk7Ci0JX19nZXRfY3B1X3Zhcih3ZF9lbmFibGVkKSA9IDA7Ci0JYXRvbWljX2RlYygmbm1pX2FjdGl2ZSk7Ci19Ci0KLS8qCi0gKiB0aGUgYmVzdCB3YXkgdG8gZGV0ZWN0IHdoZXRoZXIgYSBDUFUgaGFzIGEgJ2hhcmQgbG9ja3VwJyBwcm9ibGVtCi0gKiBpcyB0byBjaGVjayBpdCdzIGxvY2FsIEFQSUMgdGltZXIgSVJRIGNvdW50cy4gSWYgdGhleSBhcmUgbm90Ci0gKiBjaGFuZ2luZyB0aGVuIHRoYXQgQ1BVIGhhcyBzb21lIHByb2JsZW0uCi0gKgotICogYXMgdGhlc2Ugd2F0Y2hkb2cgTk1JIElSUXMgYXJlIGdlbmVyYXRlZCBvbiBldmVyeSBDUFUsIHdlIG9ubHkKLSAqIGhhdmUgdG8gY2hlY2sgdGhlIGN1cnJlbnQgcHJvY2Vzc29yLgotICoKLSAqIHNpbmNlIE5NSXMgZG9uJ3QgbGlzdGVuIHRvIF9hbnlfIGxvY2tzLCB3ZSBoYXZlIHRvIGJlIGV4dHJlbWVseQotICogY2FyZWZ1bCBub3QgdG8gcmVseSBvbiB1bnNhZmUgdmFyaWFibGVzLiBUaGUgcHJpbnRrIG1pZ2h0IGxvY2sKLSAqIHVwIHRob3VnaCwgc28gd2UgaGF2ZSB0byBicmVhayB1cCBhbnkgY29uc29sZSBsb2NrcyBmaXJzdCAuLi4KLSAqIFt3aGVuIHRoZXJlIHdpbGwgYmUgbW9yZSB0dHktcmVsYXRlZCBsb2NrcywgYnJlYWsgdGhlbSB1cCBoZXJlIHRvbyFdCi0gKi8KLQotc3RhdGljIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkLCBsYXN0X2lycV9zdW0pOwotc3RhdGljIERFRklORV9QRVJfQ1BVKGxvbmcsIGFsZXJ0X2NvdW50ZXIpOwotc3RhdGljIERFRklORV9QRVJfQ1BVKGludCwgbm1pX3RvdWNoKTsKLQotdm9pZCB0b3VjaF9ubWlfd2F0Y2hkb2codm9pZCkKLXsKLQlpZiAobm1pX3dhdGNoZG9nX2FjdGl2ZSgpKSB7Ci0JCXVuc2lnbmVkIGNwdTsKLQotCQkvKgotCQkgKiBUZWxsIG90aGVyIENQVXMgdG8gcmVzZXQgdGhlaXIgYWxlcnQgY291bnRlcnMuIFdlIGNhbm5vdAotCQkgKiBkbyBpdCBvdXJzZWx2ZXMgYmVjYXVzZSB0aGUgYWxlcnQgY291bnQgaW5jcmVhc2UgaXMgbm90Ci0JCSAqIGF0b21pYy4KLQkJICovCi0JCWZvcl9lYWNoX3ByZXNlbnRfY3B1KGNwdSkgewotCQkJaWYgKHBlcl9jcHUobm1pX3RvdWNoLCBjcHUpICE9IDEpCi0JCQkJcGVyX2NwdShubWlfdG91Y2gsIGNwdSkgPSAxOwotCQl9Ci0JfQotCi0JLyoKLQkgKiBUaWNrbGUgdGhlIHNvZnRsb2NrdXAgZGV0ZWN0b3IgdG9vOgotCSAqLwotCXRvdWNoX3NvZnRsb2NrdXBfd2F0Y2hkb2coKTsKLX0KLUVYUE9SVF9TWU1CT0wodG91Y2hfbm1pX3dhdGNoZG9nKTsKLQotbm90cmFjZSBfX2twcm9iZXMgaW50Ci1ubWlfd2F0Y2hkb2dfdGljayhzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgcmVhc29uKQotewotCS8qCi0JICogU2luY2UgY3VycmVudF90aHJlYWRfaW5mbygpLT4gaXMgYWx3YXlzIG9uIHRoZSBzdGFjaywgYW5kIHdlCi0JICogYWx3YXlzIHN3aXRjaCB0aGUgc3RhY2sgTk1JLWF0b21pY2FsbHksIGl0J3Mgc2FmZSB0byB1c2UKLQkgKiBzbXBfcHJvY2Vzc29yX2lkKCkuCi0JICovCi0JdW5zaWduZWQgaW50IHN1bTsKLQlpbnQgdG91Y2hlZCA9IDA7Ci0JaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQlpbnQgcmMgPSAwOwotCi0Jc3VtID0gZ2V0X3RpbWVyX2lycXMoY3B1KTsKLQotCWlmIChfX2dldF9jcHVfdmFyKG5taV90b3VjaCkpIHsKLQkJX19nZXRfY3B1X3ZhcihubWlfdG91Y2gpID0gMDsKLQkJdG91Y2hlZCA9IDE7Ci0JfQotCi0JLyogV2UgY2FuIGJlIGNhbGxlZCBiZWZvcmUgY2hlY2tfbm1pX3dhdGNoZG9nLCBoZW5jZSBOVUxMIGNoZWNrLiAqLwotCWlmIChjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgdG9fY3B1bWFzayhiYWNrdHJhY2VfbWFzaykpKSB7Ci0JCXN0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKGxvY2spOyAvKiBTZXJpYWxpc2UgdGhlIHByaW50a3MgKi8KLQotCQlyYXdfc3Bpbl9sb2NrKCZsb2NrKTsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiTk1JIGJhY2t0cmFjZSBmb3IgY3B1ICVkXG4iLCBjcHUpOwotCQlzaG93X3JlZ3MocmVncyk7Ci0JCWR1bXBfc3RhY2soKTsKLQkJcmF3X3NwaW5fdW5sb2NrKCZsb2NrKTsKLQkJY3B1bWFza19jbGVhcl9jcHUoY3B1LCB0b19jcHVtYXNrKGJhY2t0cmFjZV9tYXNrKSk7Ci0KLQkJcmMgPSAxOwotCX0KLQotCS8qIENvdWxkIGNoZWNrIG9vcHNfaW5fcHJvZ3Jlc3MgaGVyZSB0b28sIGJ1dCBpdCdzIHNhZmVyIG5vdCB0byAqLwotCWlmIChtY2VfaW5fcHJvZ3Jlc3MoKSkKLQkJdG91Y2hlZCA9IDE7Ci0KLQkvKiBpZiB0aGUgbm9uZSBvZiB0aGUgdGltZXJzIGlzbid0IGZpcmluZywgdGhpcyBjcHUgaXNuJ3QgZG9pbmcgbXVjaCAqLwotCWlmICghdG91Y2hlZCAmJiBfX2dldF9jcHVfdmFyKGxhc3RfaXJxX3N1bSkgPT0gc3VtKSB7Ci0JCS8qCi0JCSAqIEF5aWVlLCBsb29rcyBsaWtlIHRoaXMgQ1BVIGlzIHN0dWNrIC4uLgotCQkgKiB3YWl0IGEgZmV3IElSUXMgKDUgc2Vjb25kcykgYmVmb3JlIGRvaW5nIHRoZSBvb3BzIC4uLgotCQkgKi8KLQkJX190aGlzX2NwdV9pbmMoYWxlcnRfY291bnRlcik7Ci0JCWlmIChfX3RoaXNfY3B1X3JlYWQoYWxlcnRfY291bnRlcikgPT0gNSAqIG5taV9oeikKLQkJCS8qCi0JCQkgKiBkaWVfbm1pIHdpbGwgcmV0dXJuIE9OTFkgaWYgTk9USUZZX1NUT1AgaGFwcGVucy4uCi0JCQkgKi8KLQkJCWRpZV9ubWkoIkJVRzogTk1JIFdhdGNoZG9nIGRldGVjdGVkIExPQ0tVUCIsCi0JCQkJcmVncywgcGFuaWNfb25fdGltZW91dCk7Ci0JfSBlbHNlIHsKLQkJX19nZXRfY3B1X3ZhcihsYXN0X2lycV9zdW0pID0gc3VtOwotCQlfX3RoaXNfY3B1X3dyaXRlKGFsZXJ0X2NvdW50ZXIsIDApOwotCX0KLQotCS8qIHNlZSBpZiB0aGUgbm1pIHdhdGNoZG9nIHdlbnQgb2ZmICovCi0JaWYgKCFfX2dldF9jcHVfdmFyKHdkX2VuYWJsZWQpKQotCQlyZXR1cm4gcmM7Ci0Jc3dpdGNoIChubWlfd2F0Y2hkb2cpIHsKLQljYXNlIE5NSV9MT0NBTF9BUElDOgotCQlyYyB8PSBsYXBpY193ZF9ldmVudChubWlfaHopOwotCQlicmVhazsKLQljYXNlIE5NSV9JT19BUElDOgotCQkvKgotCQkgKiBkb24ndCBrbm93IGhvdyB0byBhY2N1cmF0ZWx5IGNoZWNrIGZvciB0aGlzLgotCQkgKiBqdXN0IGFzc3VtZSBpdCB3YXMgYSB3YXRjaGRvZyB0aW1lciBpbnRlcnJ1cHQKLQkJICogVGhpcyBtYXRjaGVzIHRoZSBvbGQgYmVoYXZpb3VyLgotCQkgKi8KLQkJcmMgPSAxOwotCQlicmVhazsKLQl9Ci0JcmV0dXJuIHJjOwotfQotCi0jaWZkZWYgQ09ORklHX1NZU0NUTAotCi1zdGF0aWMgdm9pZCBlbmFibGVfaW9hcGljX25taV93YXRjaGRvZ19zaW5nbGUodm9pZCAqdW51c2VkKQotewotCV9fZ2V0X2NwdV92YXIod2RfZW5hYmxlZCkgPSAxOwotCWF0b21pY19pbmMoJm5taV9hY3RpdmUpOwotCV9fYWNwaV9ubWlfZW5hYmxlKE5VTEwpOwotfQotCi1zdGF0aWMgdm9pZCBlbmFibGVfaW9hcGljX25taV93YXRjaGRvZyh2b2lkKQotewotCW9uX2VhY2hfY3B1KGVuYWJsZV9pb2FwaWNfbm1pX3dhdGNoZG9nX3NpbmdsZSwgTlVMTCwgMSk7Ci0JdG91Y2hfbm1pX3dhdGNoZG9nKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRpc2FibGVfaW9hcGljX25taV93YXRjaGRvZyh2b2lkKQotewotCW9uX2VhY2hfY3B1KHN0b3BfYXBpY19ubWlfd2F0Y2hkb2csIE5VTEwsIDEpOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBzZXR1cF91bmtub3duX25taV9wYW5pYyhjaGFyICpzdHIpCi17Ci0JdW5rbm93bl9ubWlfcGFuaWMgPSAxOwotCXJldHVybiAxOwotfQotX19zZXR1cCgidW5rbm93bl9ubWlfcGFuaWMiLCBzZXR1cF91bmtub3duX25taV9wYW5pYyk7Ci0KLXN0YXRpYyBpbnQgdW5rbm93bl9ubWlfcGFuaWNfY2FsbGJhY2soc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBjcHUpCi17Ci0JdW5zaWduZWQgY2hhciByZWFzb24gPSBnZXRfbm1pX3JlYXNvbigpOwotCWNoYXIgYnVmWzY0XTsKLQotCXNwcmludGYoYnVmLCAiTk1JIHJlY2VpdmVkIGZvciB1bmtub3duIHJlYXNvbiAlMDJ4XG4iLCByZWFzb24pOwotCWRpZV9ubWkoYnVmLCByZWdzLCAxKTsgLyogQWx3YXlzIHBhbmljIGhlcmUgKi8KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIHByb2MgaGFuZGxlciBmb3IgL3Byb2Mvc3lzL2tlcm5lbC9ubWkKLSAqLwotaW50IHByb2Nfbm1pX2VuYWJsZWQoc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwKLQkJCXZvaWQgX191c2VyICpidWZmZXIsIHNpemVfdCAqbGVuZ3RoLCBsb2ZmX3QgKnBwb3MpCi17Ci0JaW50IG9sZF9zdGF0ZTsKLQotCW5taV93YXRjaGRvZ19lbmFibGVkID0gKGF0b21pY19yZWFkKCZubWlfYWN0aXZlKSA+IDApID8gMSA6IDA7Ci0Jb2xkX3N0YXRlID0gbm1pX3dhdGNoZG9nX2VuYWJsZWQ7Ci0JcHJvY19kb2ludHZlYyh0YWJsZSwgd3JpdGUsIGJ1ZmZlciwgbGVuZ3RoLCBwcG9zKTsKLQlpZiAoISFvbGRfc3RhdGUgPT0gISFubWlfd2F0Y2hkb2dfZW5hYmxlZCkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoYXRvbWljX3JlYWQoJm5taV9hY3RpdmUpIDwgMCB8fCAhbm1pX3dhdGNoZG9nX2FjdGl2ZSgpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSJOTUkgd2F0Y2hkb2cgaXMgcGVybWFuZW50bHkgZGlzYWJsZWRcbiIpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQlpZiAobm1pX3dhdGNoZG9nID09IE5NSV9MT0NBTF9BUElDKSB7Ci0JCWlmIChubWlfd2F0Y2hkb2dfZW5hYmxlZCkKLQkJCWVuYWJsZV9sYXBpY19ubWlfd2F0Y2hkb2coKTsKLQkJZWxzZQotCQkJZGlzYWJsZV9sYXBpY19ubWlfd2F0Y2hkb2coKTsKLQl9IGVsc2UgaWYgKG5taV93YXRjaGRvZyA9PSBOTUlfSU9fQVBJQykgewotCQlpZiAobm1pX3dhdGNoZG9nX2VuYWJsZWQpCi0JCQllbmFibGVfaW9hcGljX25taV93YXRjaGRvZygpOwotCQllbHNlCi0JCQlkaXNhYmxlX2lvYXBpY19ubWlfd2F0Y2hkb2coKTsKLQl9IGVsc2UgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkiTk1JIHdhdGNoZG9nIGRvZXNuJ3Qga25vdyB3aGF0IGhhcmR3YXJlIHRvIHRvdWNoXG4iKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCXJldHVybiAwOwotfQotCi0jZW5kaWYgLyogQ09ORklHX1NZU0NUTCAqLwotCi1pbnQgZG9fbm1pX2NhbGxiYWNrKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgY3B1KQotewotI2lmZGVmIENPTkZJR19TWVNDVEwKLQlpZiAodW5rbm93bl9ubWlfcGFuaWMpCi0JCXJldHVybiB1bmtub3duX25taV9wYW5pY19jYWxsYmFjayhyZWdzLCBjcHUpOwotI2VuZGlmCi0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgYXJjaF90cmlnZ2VyX2FsbF9jcHVfYmFja3RyYWNlKHZvaWQpCi17Ci0JaW50IGk7Ci0KLQljcHVtYXNrX2NvcHkodG9fY3B1bWFzayhiYWNrdHJhY2VfbWFzayksIGNwdV9vbmxpbmVfbWFzayk7Ci0KLQlwcmludGsoS0VSTl9JTkZPICJzZW5kaW5nIE5NSSB0byBhbGwgQ1BVczpcbiIpOwotCWFwaWMtPnNlbmRfSVBJX2FsbChOTUlfVkVDVE9SKTsKLQotCS8qIFdhaXQgZm9yIHVwIHRvIDEwIHNlY29uZHMgZm9yIGFsbCBDUFVzIHRvIGRvIHRoZSBiYWNrdHJhY2UgKi8KLQlmb3IgKGkgPSAwOyBpIDwgMTAgKiAxMDAwOyBpKyspIHsKLQkJaWYgKGNwdW1hc2tfZW1wdHkodG9fY3B1bWFzayhiYWNrdHJhY2VfbWFzaykpKQotCQkJYnJlYWs7Ci0JCW1kZWxheSgxKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfdXZfeC5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3V2X3guYwppbmRleCBjMWM1MmMzLi5lY2NhNWY0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfdXZfeC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL3gyYXBpY191dl94LmMKQEAgLTQ4LDYgKzQ4LDE2IEBACiBFWFBPUlRfU1lNQk9MX0dQTCh1dl9hcGljaWRfaGliaXRzKTsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodXZfbm1pX2xvY2spOwogCitzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgdXZfZWFybHlfcmVhZF9tbXIodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXVuc2lnbmVkIGxvbmcgdmFsLCAqbW1yOworCisJbW1yID0gZWFybHlfaW9yZW1hcChVVl9MT0NBTF9NTVJfQkFTRSB8IGFkZHIsIHNpemVvZigqbW1yKSk7CisJdmFsID0gKm1tcjsKKwllYXJseV9pb3VubWFwKG1tciwgc2l6ZW9mKCptbXIpKTsKKwlyZXR1cm4gdmFsOworfQorCiBzdGF0aWMgaW5saW5lIGJvb2wgaXNfR1JVX3JhbmdlKHU2NCBzdGFydCwgdTY0IGVuZCkKIHsKIAlyZXR1cm4gc3RhcnQgPj0gZ3J1X3N0YXJ0X3BhZGRyICYmIGVuZCA8PSBncnVfZW5kX3BhZGRyOwpAQCAtNTgsMjggKzY4LDI0IEBACiAJcmV0dXJuIGlzX0lTQV9yYW5nZShzdGFydCwgZW5kKSB8fCBpc19HUlVfcmFuZ2Uoc3RhcnQsIGVuZCk7CiB9CiAKLXN0YXRpYyBpbnQgZWFybHlfZ2V0X25vZGVpZCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgZWFybHlfZ2V0X3Bub2RlaWQodm9pZCkKIHsKIAl1bmlvbiB1dmhfbm9kZV9pZF91IG5vZGVfaWQ7Ci0JdW5zaWduZWQgbG9uZyAqbW1yOwotCi0JbW1yID0gZWFybHlfaW9yZW1hcChVVl9MT0NBTF9NTVJfQkFTRSB8IFVWSF9OT0RFX0lELCBzaXplb2YoKm1tcikpOwotCW5vZGVfaWQudiA9ICptbXI7Ci0JZWFybHlfaW91bm1hcChtbXIsIHNpemVvZigqbW1yKSk7CisJdW5pb24gdXZoX3JoX2dhbV9jb25maWdfbW1yX3UgIG1fbl9jb25maWc7CisJaW50IHBub2RlOwogCiAJLyogQ3VycmVudGx5LCBhbGwgYmxhZGVzIGhhdmUgc2FtZSByZXZpc2lvbiBudW1iZXIgKi8KKwlub2RlX2lkLnYgPSB1dl9lYXJseV9yZWFkX21tcihVVkhfTk9ERV9JRCk7CisJbV9uX2NvbmZpZy52ID0gdXZfZWFybHlfcmVhZF9tbXIoVVZIX1JIX0dBTV9DT05GSUdfTU1SKTsKIAl1dl9taW5faHViX3JldmlzaW9uX2lkID0gbm9kZV9pZC5zLnJldmlzaW9uOwogCi0JcmV0dXJuIG5vZGVfaWQucy5ub2RlX2lkOworCXBub2RlID0gKG5vZGVfaWQucy5ub2RlX2lkID4+IDEpICYgKCgxIDw8IG1fbl9jb25maWcucy5uX3NrdCkgLSAxKTsKKwlyZXR1cm4gcG5vZGU7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBlYXJseV9nZXRfYXBpY19wbm9kZV9zaGlmdCh2b2lkKQogewotCXVuc2lnbmVkIGxvbmcgKm1tcjsKLQotCW1tciA9IGVhcmx5X2lvcmVtYXAoVVZfTE9DQUxfTU1SX0JBU0UgfCBVVkhfQVBJQ0lELCBzaXplb2YoKm1tcikpOwotCXV2aF9hcGljaWQudiA9ICptbXI7Ci0JZWFybHlfaW91bm1hcChtbXIsIHNpemVvZigqbW1yKSk7CisJdXZoX2FwaWNpZC52ID0gdXZfZWFybHlfcmVhZF9tbXIoVVZIX0FQSUNJRCk7CiAJaWYgKCF1dmhfYXBpY2lkLnYpCiAJCS8qCiAJCSAqIE9sZCBiaW9zLCB1c2UgZGVmYXVsdCB2YWx1ZQpAQCAtOTUsMjEgKzEwMSwxNyBAQAogc3RhdGljIHZvaWQgX19pbml0IHV2X3NldF9hcGljaWRfaGliaXQodm9pZCkKIHsKIAl1bmlvbiB1dmhfbGJfdGFyZ2V0X3BoeXNpY2FsX2FwaWNfaWRfbWFza191IGFwaWNpZF9tYXNrOwotCXVuc2lnbmVkIGxvbmcgKm1tcjsKIAotCW1tciA9IGVhcmx5X2lvcmVtYXAoVVZfTE9DQUxfTU1SX0JBU0UgfAotCQlVVkhfTEJfVEFSR0VUX1BIWVNJQ0FMX0FQSUNfSURfTUFTSywgc2l6ZW9mKCptbXIpKTsKLQlhcGljaWRfbWFzay52ID0gKm1tcjsKLQllYXJseV9pb3VubWFwKG1tciwgc2l6ZW9mKCptbXIpKTsKKwlhcGljaWRfbWFzay52ID0gdXZfZWFybHlfcmVhZF9tbXIoVVZIX0xCX1RBUkdFVF9QSFlTSUNBTF9BUElDX0lEX01BU0spOwogCXV2X2FwaWNpZF9oaWJpdHMgPSBhcGljaWRfbWFzay5zLmJpdF9lbmFibGVzICYgVVZfQVBJQ0lEX0hJQklUX01BU0s7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IHV2X2FjcGlfbWFkdF9vZW1fY2hlY2soY2hhciAqb2VtX2lkLCBjaGFyICpvZW1fdGFibGVfaWQpCiB7Ci0JaW50IG5vZGVpZDsKKwlpbnQgcG5vZGVpZDsKIAogCWlmICghc3RyY21wKG9lbV9pZCwgIlNHSSIpKSB7Ci0JCW5vZGVpZCA9IGVhcmx5X2dldF9ub2RlaWQoKTsKKwkJcG5vZGVpZCA9IGVhcmx5X2dldF9wbm9kZWlkKCk7CiAJCWVhcmx5X2dldF9hcGljX3Bub2RlX3NoaWZ0KCk7CiAJCXg4Nl9wbGF0Zm9ybS5pc191bnRyYWNrZWRfcGF0X3JhbmdlID0gIHV2X2lzX3VudHJhY2tlZF9wYXRfcmFuZ2U7CiAJCXg4Nl9wbGF0Zm9ybS5ubWlfaW5pdCA9IHV2X25taV9pbml0OwpAQCAtMTE4LDggKzEyMCw4IEBACiAJCWVsc2UgaWYgKCFzdHJjbXAob2VtX3RhYmxlX2lkLCAiVVZYIikpCiAJCQl1dl9zeXN0ZW1fdHlwZSA9IFVWX1gyQVBJQzsKIAkJZWxzZSBpZiAoIXN0cmNtcChvZW1fdGFibGVfaWQsICJVVkgiKSkgewotCQkJX19nZXRfY3B1X3Zhcih4MmFwaWNfZXh0cmFfYml0cykgPQotCQkJCW5vZGVpZCA8PCAodXZoX2FwaWNpZC5zLnBub2RlX3NoaWZ0IC0gMSk7CisJCQlfX3RoaXNfY3B1X3dyaXRlKHgyYXBpY19leHRyYV9iaXRzLAorCQkJCXBub2RlaWQgPDwgdXZoX2FwaWNpZC5zLnBub2RlX3NoaWZ0KTsKIAkJCXV2X3N5c3RlbV90eXBlID0gVVZfTk9OX1VOSVFVRV9BUElDOwogCQkJdXZfc2V0X2FwaWNpZF9oaWJpdCgpOwogCQkJcmV0dXJuIDE7CkBAIC0yODQsNyArMjg2LDcgQEAKIAl1bnNpZ25lZCBpbnQgaWQ7CiAKIAlXQVJOX09OKHByZWVtcHRpYmxlKCkgJiYgbnVtX29ubGluZV9jcHVzKCkgPiAxKTsKLQlpZCA9IHggfCBfX2dldF9jcHVfdmFyKHgyYXBpY19leHRyYV9iaXRzKTsKKwlpZCA9IHggfCBfX3RoaXNfY3B1X3JlYWQoeDJhcGljX2V4dHJhX2JpdHMpOwogCiAJcmV0dXJuIGlkOwogfQpAQCAtMzc2LDcgKzM3OCw3IEBACiAKIHN0YXRpYyBfX2NwdWluaXQgdm9pZCBzZXRfeDJhcGljX2V4dHJhX2JpdHMoaW50IHBub2RlKQogewotCV9fZ2V0X2NwdV92YXIoeDJhcGljX2V4dHJhX2JpdHMpID0gKHBub2RlIDw8IDYpOworCV9fdGhpc19jcHVfd3JpdGUoeDJhcGljX2V4dHJhX2JpdHMsIChwbm9kZSA8PCA2KSk7CiB9CiAKIC8qCkBAIC02ODIsMjcgKzY4NCwzMiBAQAogdm9pZCBfX2luaXQgdXZfc3lzdGVtX2luaXQodm9pZCkKIHsKIAl1bmlvbiB1dmhfcmhfZ2FtX2NvbmZpZ19tbXJfdSAgbV9uX2NvbmZpZzsKKwl1bmlvbiB1dmhfcmhfZ2FtX21taW9oX292ZXJsYXlfY29uZmlnX21tcl91IG1taW9oOwogCXVuaW9uIHV2aF9ub2RlX2lkX3Ugbm9kZV9pZDsKIAl1bnNpZ25lZCBsb25nIGdub2RlX3VwcGVyLCBsb3dtZW1fcmVkaXJfYmFzZSwgbG93bWVtX3JlZGlyX3NpemU7Ci0JaW50IGJ5dGVzLCBuaWQsIGNwdSwgbGNwdSwgcG5vZGUsIGJsYWRlLCBpLCBqLCBtX3ZhbCwgbl92YWw7CisJaW50IGJ5dGVzLCBuaWQsIGNwdSwgbGNwdSwgcG5vZGUsIGJsYWRlLCBpLCBqLCBtX3ZhbCwgbl92YWwsIG5faW87CiAJaW50IGdub2RlX2V4dHJhLCBtYXhfcG5vZGUgPSAwOwogCXVuc2lnbmVkIGxvbmcgbW1yX2Jhc2UsIHByZXNlbnQsIHBhZGRyOwotCXVuc2lnbmVkIHNob3J0IHBub2RlX21hc2s7CisJdW5zaWduZWQgc2hvcnQgcG5vZGVfbWFzaywgcG5vZGVfaW9fbWFzazsKIAogCW1hcF9sb3dfbW1ycygpOwogCiAJbV9uX2NvbmZpZy52ID0gdXZfcmVhZF9sb2NhbF9tbXIoVVZIX1JIX0dBTV9DT05GSUdfTU1SICk7CiAJbV92YWwgPSBtX25fY29uZmlnLnMubV9za3Q7CiAJbl92YWwgPSBtX25fY29uZmlnLnMubl9za3Q7CisJbW1pb2gudiA9IHV2X3JlYWRfbG9jYWxfbW1yKFVWSF9SSF9HQU1fTU1JT0hfT1ZFUkxBWV9DT05GSUdfTU1SKTsKKwluX2lvID0gbW1pb2gucy5uX2lvOwogCW1tcl9iYXNlID0KIAkgICAgdXZfcmVhZF9sb2NhbF9tbXIoVVZIX1JIX0dBTV9NTVJfT1ZFUkxBWV9DT05GSUdfTU1SKSAmCiAJICAgIH5VVl9NTVJfRU5BQkxFOwogCXBub2RlX21hc2sgPSAoMSA8PCBuX3ZhbCkgLSAxOworCXBub2RlX2lvX21hc2sgPSAoMSA8PCBuX2lvKSAtIDE7CisKIAlub2RlX2lkLnYgPSB1dl9yZWFkX2xvY2FsX21tcihVVkhfTk9ERV9JRCk7CiAJZ25vZGVfZXh0cmEgPSAobm9kZV9pZC5zLm5vZGVfaWQgJiB+KCgxIDw8IG5fdmFsKSAtIDEpKSA+PiAxOwogCWdub2RlX3VwcGVyID0gKCh1bnNpZ25lZCBsb25nKWdub2RlX2V4dHJhICA8PCBtX3ZhbCk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIlVWOiBOICVkLCBNICVkLCBnbm9kZV91cHBlciAweCVseCwgZ25vZGVfZXh0cmEgMHgleFxuIiwKLQkJCW5fdmFsLCBtX3ZhbCwgZ25vZGVfdXBwZXIsIGdub2RlX2V4dHJhKTsKKwlwcmludGsoS0VSTl9JTkZPICJVVjogTiAlZCwgTSAlZCwgTl9JTzogJWQsIGdub2RlX3VwcGVyIDB4JWx4LCBnbm9kZV9leHRyYSAweCV4LCBwbm9kZV9tYXNrIDB4JXgsIHBub2RlX2lvX21hc2sgMHgleFxuIiwKKwkJCW5fdmFsLCBtX3ZhbCwgbl9pbywgZ25vZGVfdXBwZXIsIGdub2RlX2V4dHJhLCBwbm9kZV9tYXNrLCBwbm9kZV9pb19tYXNrKTsKIAogCXByaW50ayhLRVJOX0RFQlVHICJVVjogZ2xvYmFsIE1NUiBiYXNlIDB4JWx4XG4iLCBtbXJfYmFzZSk7CiAKQEAgLTczNSw3ICs3NDIsNyBAQAogCQlmb3IgKGogPSAwOyBqIDwgNjQ7IGorKykgewogCQkJaWYgKCF0ZXN0X2JpdChqLCAmcHJlc2VudCkpCiAJCQkJY29udGludWU7Ci0JCQlwbm9kZSA9IChpICogNjQgKyBqKTsKKwkJCXBub2RlID0gKGkgKiA2NCArIGopICYgcG5vZGVfbWFzazsKIAkJCXV2X2JsYWRlX2luZm9bYmxhZGVdLnBub2RlID0gcG5vZGU7CiAJCQl1dl9ibGFkZV9pbmZvW2JsYWRlXS5ucl9wb3NzaWJsZV9jcHVzID0gMDsKIAkJCXV2X2JsYWRlX2luZm9bYmxhZGVdLm5yX29ubGluZV9jcHVzID0gMDsKQEAgLTc1Niw2ICs3NjMsNyBAQAogCQkvKgogCQkgKiBhcGljX3Bub2RlX3NoaWZ0IG11c3QgYmUgc2V0IGJlZm9yZSBjYWxsaW5nIHV2X2FwaWNpZF90b19wbm9kZSgpOwogCQkgKi8KKwkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPnBub2RlX21hc2sgPSBwbm9kZV9tYXNrOwogCQl1dl9jcHVfaHViX2luZm8oY3B1KS0+YXBpY19wbm9kZV9zaGlmdCA9IHV2aF9hcGljaWQucy5wbm9kZV9zaGlmdDsKIAkJcG5vZGUgPSB1dl9hcGljaWRfdG9fcG5vZGUoYXBpY2lkKTsKIAkJYmxhZGUgPSBib290X3Bub2RlX3RvX2JsYWRlKHBub2RlKTsKQEAgLTc3Miw3ICs3ODAsNiBAQAogCQl1dl9jcHVfaHViX2luZm8oY3B1KS0+bnVtYV9ibGFkZV9pZCA9IGJsYWRlOwogCQl1dl9jcHVfaHViX2luZm8oY3B1KS0+YmxhZGVfcHJvY2Vzc29yX2lkID0gbGNwdTsKIAkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPnBub2RlID0gcG5vZGU7Ci0JCXV2X2NwdV9odWJfaW5mbyhjcHUpLT5wbm9kZV9tYXNrID0gcG5vZGVfbWFzazsKIAkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPmdwYV9tYXNrID0gKDFVTCA8PCAobV92YWwgKyBuX3ZhbCkpIC0gMTsKIAkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPmdub2RlX3VwcGVyID0gZ25vZGVfdXBwZXI7CiAJCXV2X2NwdV9odWJfaW5mbyhjcHUpLT5nbm9kZV9leHRyYSA9IGdub2RlX2V4dHJhOwpAQCAtNzk2LDcgKzgwMyw3IEBACiAKIAltYXBfZ3J1X2hpZ2gobWF4X3Bub2RlKTsKIAltYXBfbW1yX2hpZ2gobWF4X3Bub2RlKTsKLQltYXBfbW1pb2hfaGlnaChtYXhfcG5vZGUpOworCW1hcF9tbWlvaF9oaWdoKG1heF9wbm9kZSAmIHBub2RlX2lvX21hc2spOwogCiAJdXZfY3B1X2luaXQoKTsKIAl1dl9zY2lyX3JlZ2lzdGVyX2NwdV9ub3RpZmllcigpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMKaW5kZXggOWUwOTNmOC4uN2M3YmVkYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jCkBAIC02NjgsNyArNjY4LDcgQEAKIAogYm9vbCBjcHVfaGFzX2FtZF9lcnJhdHVtKGNvbnN0IGludCAqZXJyYXR1bSkKIHsKLQlzdHJ1Y3QgY3B1aW5mb194ODYgKmNwdSA9ICZjdXJyZW50X2NwdV9kYXRhOworCXN0cnVjdCBjcHVpbmZvX3g4NiAqY3B1ID0gX190aGlzX2NwdV9wdHIoJmNwdV9pbmZvKTsKIAlpbnQgb3N2d19pZCA9ICplcnJhdHVtKys7CiAJdTMyIHJhbmdlOwogCXUzMiBtczsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jCmluZGV4IDRiNjhiZGEuLjFkNTk4MzQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYwpAQCAtODk0LDcgKzg5NCw2IEBACiAjZWxzZQogCXZnZXRjcHVfc2V0X21vZGUoKTsKICNlbmRpZgotCWluaXRfaHdfcGVyZl9ldmVudHMoKTsKIH0KIAogdm9pZCBfX2NwdWluaXQgaWRlbnRpZnlfc2Vjb25kYXJ5X2NwdShzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5jCmluZGV4IDQ5MTk3N2IuLjM1YzdlNjUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5jCkBAIC01MjEsNyArNTIxLDcgQEAKIAogCSpyYyA9IC1FTk9ERVY7CiAKLQlpZiAoY3VycmVudF9jcHVfZGF0YS54ODZfdmVuZG9yICE9IFg4Nl9WRU5ET1JfQU1EKQorCWlmIChfX3RoaXNfY3B1X3JlYWQoY3B1X2luZm8ueDg2X3ZlbmRvcikgIT0gWDg2X1ZFTkRPUl9BTUQpCiAJCXJldHVybjsKIAogCWVheCA9IGNwdWlkX2VheChDUFVJRF9QUk9DRVNTT1JfU0lHTkFUVVJFKTsKQEAgLTEzNzcsNyArMTM3Nyw3IEBACiBzdGF0aWMgdm9pZCBxdWVyeV92YWx1ZXNfb25fY3B1KHZvaWQgKl9lcnIpCiB7CiAJaW50ICplcnIgPSBfZXJyOwotCXN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhID0gX19nZXRfY3B1X3Zhcihwb3dlcm5vd19kYXRhKTsKKwlzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSA9IF9fdGhpc19jcHVfcmVhZChwb3dlcm5vd19kYXRhKTsKIAogCSplcnIgPSBxdWVyeV9jdXJyZW50X3ZhbHVlc193aXRoX3BlbmRpbmdfd2FpdChkYXRhKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWxfY2FjaGVpbmZvLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsX2NhY2hlaW5mby5jCmluZGV4IDE3YWQwMzMuLjcyODNlOTggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWxfY2FjaGVpbmZvLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbF9jYWNoZWluZm8uYwpAQCAtMTQ5LDggKzE0OSw3IEBACiB9OwogCiBzdHJ1Y3QgYW1kX2wzX2NhY2hlIHsKLQlzdHJ1Y3QJIHBjaV9kZXYgKmRldjsKLQlib29sCSBjYW5fZGlzYWJsZTsKKwlzdHJ1Y3QJIGFtZF9ub3J0aGJyaWRnZSAqbmI7CiAJdW5zaWduZWQgaW5kaWNlczsKIAl1OAkgc3ViY2FjaGVzWzRdOwogfTsKQEAgLTI2Niw3ICsyNjUsNyBAQAogCQlsaW5lX3NpemUgPSBsMi5saW5lX3NpemU7CiAJCWxpbmVzX3Blcl90YWcgPSBsMi5saW5lc19wZXJfdGFnOwogCQkvKiBjcHVfZGF0YSBoYXMgZXJyYXRhIGNvcnJlY3Rpb25zIGZvciBLNyBhcHBsaWVkICovCi0JCXNpemVfaW5fa2IgPSBjdXJyZW50X2NwdV9kYXRhLng4Nl9jYWNoZV9zaXplOworCQlzaXplX2luX2tiID0gX190aGlzX2NwdV9yZWFkKGNwdV9pbmZvLng4Nl9jYWNoZV9zaXplKTsKIAkJYnJlYWs7CiAJY2FzZSAzOgogCQlpZiAoIWwzLnZhbCkKQEAgLTI4OCw3ICsyODcsNyBAQAogCWVheC0+c3BsaXQudHlwZSA9IHR5cGVzW2xlYWZdOwogCWVheC0+c3BsaXQubGV2ZWwgPSBsZXZlbHNbbGVhZl07CiAJZWF4LT5zcGxpdC5udW1fdGhyZWFkc19zaGFyaW5nID0gMDsKLQllYXgtPnNwbGl0Lm51bV9jb3Jlc19vbl9kaWUgPSBjdXJyZW50X2NwdV9kYXRhLng4Nl9tYXhfY29yZXMgLSAxOworCWVheC0+c3BsaXQubnVtX2NvcmVzX29uX2RpZSA9IF9fdGhpc19jcHVfcmVhZChjcHVfaW5mby54ODZfbWF4X2NvcmVzKSAtIDE7CiAKIAogCWlmIChhc3NvYyA9PSAweGZmZmYpCkBAIC0zMTEsMTQgKzMxMCwxMiBAQAogLyoKICAqIEwzIGNhY2hlIGRlc2NyaXB0b3JzCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgYW1kX2wzX2NhY2hlICoqX19jcHVpbml0ZGF0YSBsM19jYWNoZXM7Ci0KIHN0YXRpYyB2b2lkIF9fY3B1aW5pdCBhbWRfY2FsY19sM19pbmRpY2VzKHN0cnVjdCBhbWRfbDNfY2FjaGUgKmwzKQogewogCXVuc2lnbmVkIGludCBzYzAsIHNjMSwgc2MyLCBzYzM7CiAJdTMyIHZhbCA9IDA7CiAKLQlwY2lfcmVhZF9jb25maWdfZHdvcmQobDMtPmRldiwgMHgxQzQsICZ2YWwpOworCXBjaV9yZWFkX2NvbmZpZ19kd29yZChsMy0+bmItPm1pc2MsIDB4MUM0LCAmdmFsKTsKIAogCS8qIGNhbGN1bGF0ZSBzdWJjYWNoZSBzaXplcyAqLwogCWwzLT5zdWJjYWNoZXNbMF0gPSBzYzAgPSAhKHZhbCAmIEJJVCgwKSk7CkBAIC0zMzAsNDcgKzMyNywxNCBAQAogCWwzLT5pbmRpY2VzID0gKG1heChtYXgzKHNjMCwgc2MxLCBzYzIpLCBzYzMpIDw8IDEwKSAtIDE7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYW1kX2wzX2NhY2hlICogX19jcHVpbml0IGFtZF9pbml0X2wzX2NhY2hlKGludCBub2RlKQorc3RhdGljIHZvaWQgX19jcHVpbml0IGFtZF9pbml0X2wzX2NhY2hlKHN0cnVjdCBfY3B1aWQ0X2luZm9fcmVncyAqdGhpc19sZWFmLAorCQkJCQlpbnQgaW5kZXgpCiB7Ci0Jc3RydWN0IGFtZF9sM19jYWNoZSAqbDM7Ci0Jc3RydWN0IHBjaV9kZXYgKmRldiA9IG5vZGVfdG9fazhfbmJfbWlzYyhub2RlKTsKLQotCWwzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFtZF9sM19jYWNoZSksIEdGUF9BVE9NSUMpOwotCWlmICghbDMpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiRXJyb3IgYWxsb2NhdGluZyBMMyBzdHJ1Y3RcbiIpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlsMy0+ZGV2ID0gZGV2OwotCi0JYW1kX2NhbGNfbDNfaW5kaWNlcyhsMyk7Ci0KLQlyZXR1cm4gbDM7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fY3B1aW5pdCBhbWRfY2hlY2tfbDNfZGlzYWJsZShzdHJ1Y3QgX2NwdWlkNF9pbmZvX3JlZ3MgKnRoaXNfbGVhZiwKLQkJCQkJICAgaW50IGluZGV4KQoteworCXN0YXRpYyBzdHJ1Y3QgYW1kX2wzX2NhY2hlICpfX2NwdWluaXRkYXRhIGwzX2NhY2hlczsKIAlpbnQgbm9kZTsKIAotCWlmIChib290X2NwdV9kYXRhLng4NiAhPSAweDEwKQotCQlyZXR1cm47Ci0KLQlpZiAoaW5kZXggPCAzKQotCQlyZXR1cm47Ci0KLQkvKiBzZWUgZXJyYXRhICMzODIgYW5kICMzODggKi8KLQlpZiAoYm9vdF9jcHVfZGF0YS54ODZfbW9kZWwgPCAweDgpCi0JCXJldHVybjsKLQotCWlmICgoYm9vdF9jcHVfZGF0YS54ODZfbW9kZWwgPT0gMHg4IHx8Ci0JICAgICBib290X2NwdV9kYXRhLng4Nl9tb2RlbCA9PSAweDkpCi0JCSYmCi0JICAgICBib290X2NwdV9kYXRhLng4Nl9tYXNrIDwgMHgxKQotCQkJcmV0dXJuOwotCi0JLyogbm90IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAqLwotCWlmIChrOF9ub3J0aGJyaWRnZXMubnVtID09IDApCisJLyogb25seSBmb3IgTDMsIGFuZCBub3QgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzICovCisJaWYgKGluZGV4IDwgMyB8fCBhbWRfbmJfbnVtKCkgPT0gMCkKIAkJcmV0dXJuOwogCiAJLyoKQEAgLTM3OCw3ICszNDIsNyBAQAogCSAqIG5ldmVyIGZyZWVkIGJ1dCB0aGlzIGlzIGRvbmUgb25seSBvbiBzaHV0ZG93biBzbyBpdCBkb2Vzbid0IG1hdHRlci4KIAkgKi8KIAlpZiAoIWwzX2NhY2hlcykgewotCQlpbnQgc2l6ZSA9IGs4X25vcnRoYnJpZGdlcy5udW0gKiBzaXplb2Yoc3RydWN0IGFtZF9sM19jYWNoZSAqKTsKKwkJaW50IHNpemUgPSBhbWRfbmJfbnVtKCkgKiBzaXplb2Yoc3RydWN0IGFtZF9sM19jYWNoZSk7CiAKIAkJbDNfY2FjaGVzID0ga3phbGxvYyhzaXplLCBHRlBfQVRPTUlDKTsKIAkJaWYgKCFsM19jYWNoZXMpCkBAIC0zODcsMTQgKzM1MSwxMiBAQAogCiAJbm9kZSA9IGFtZF9nZXRfbmJfaWQoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAotCWlmICghbDNfY2FjaGVzW25vZGVdKSB7Ci0JCWwzX2NhY2hlc1tub2RlXSA9IGFtZF9pbml0X2wzX2NhY2hlKG5vZGUpOwotCQlsM19jYWNoZXNbbm9kZV0tPmNhbl9kaXNhYmxlID0gdHJ1ZTsKKwlpZiAoIWwzX2NhY2hlc1tub2RlXS5uYikgeworCQlsM19jYWNoZXNbbm9kZV0ubmIgPSBub2RlX3RvX2FtZF9uYihub2RlKTsKKwkJYW1kX2NhbGNfbDNfaW5kaWNlcygmbDNfY2FjaGVzW25vZGVdKTsKIAl9CiAKLQlXQVJOX09OKCFsM19jYWNoZXNbbm9kZV0pOwotCi0JdGhpc19sZWFmLT5sMyA9IGwzX2NhY2hlc1tub2RlXTsKKwl0aGlzX2xlYWYtPmwzID0gJmwzX2NhY2hlc1tub2RlXTsKIH0KIAogLyoKQEAgLTQwOCw3ICszNzAsNyBAQAogewogCXVuc2lnbmVkIGludCByZWcgPSAwOwogCi0JcGNpX3JlYWRfY29uZmlnX2R3b3JkKGwzLT5kZXYsIDB4MUJDICsgc2xvdCAqIDQsICZyZWcpOworCXBjaV9yZWFkX2NvbmZpZ19kd29yZChsMy0+bmItPm1pc2MsIDB4MUJDICsgc2xvdCAqIDQsICZyZWcpOwogCiAJLyogY2hlY2sgd2hldGhlciB0aGlzIHNsb3QgaXMgYWN0aXZhdGVkIGFscmVhZHkgKi8KIAlpZiAocmVnICYgKDNVTCA8PCAzMCkpCkBAIC00MjIsNyArMzg0LDggQEAKIHsKIAlpbnQgaW5kZXg7CiAKLQlpZiAoIXRoaXNfbGVhZi0+bDMgfHwgIXRoaXNfbGVhZi0+bDMtPmNhbl9kaXNhYmxlKQorCWlmICghdGhpc19sZWFmLT5sMyB8fAorCSAgICAhYW1kX25iX2hhc19mZWF0dXJlKEFNRF9OQl9MM19JTkRFWF9ESVNBQkxFKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpbmRleCA9IGFtZF9nZXRfbDNfZGlzYWJsZV9zbG90KHRoaXNfbGVhZi0+bDMsIHNsb3QpOwpAQCAtNDU3LDcgKzQyMCw3IEBACiAJCWlmICghbDMtPnN1YmNhY2hlc1tpXSkKIAkJCWNvbnRpbnVlOwogCi0JCXBjaV93cml0ZV9jb25maWdfZHdvcmQobDMtPmRldiwgMHgxQkMgKyBzbG90ICogNCwgcmVnKTsKKwkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChsMy0+bmItPm1pc2MsIDB4MUJDICsgc2xvdCAqIDQsIHJlZyk7CiAKIAkJLyoKIAkJICogV2UgbmVlZCB0byBXQklOVkQgb24gYSBjb3JlIG9uIHRoZSBub2RlIGNvbnRhaW5pbmcgdGhlIEwzCkBAIC00NjcsNyArNDMwLDcgQEAKIAkJd2JpbnZkX29uX2NwdShjcHUpOwogCiAJCXJlZyB8PSBCSVQoMzEpOwotCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGwzLT5kZXYsIDB4MUJDICsgc2xvdCAqIDQsIHJlZyk7CisJCXBjaV93cml0ZV9jb25maWdfZHdvcmQobDMtPm5iLT5taXNjLCAweDFCQyArIHNsb3QgKiA0LCByZWcpOwogCX0KIH0KIApAQCAtNTI0LDcgKzQ4Nyw4IEBACiAJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQogCQlyZXR1cm4gLUVQRVJNOwogCi0JaWYgKCF0aGlzX2xlYWYtPmwzIHx8ICF0aGlzX2xlYWYtPmwzLT5jYW5fZGlzYWJsZSkKKwlpZiAoIXRoaXNfbGVhZi0+bDMgfHwKKwkgICAgIWFtZF9uYl9oYXNfZmVhdHVyZShBTURfTkJfTDNfSU5ERVhfRElTQUJMRSkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJY3B1ID0gY3B1bWFza19maXJzdCh0b19jcHVtYXNrKHRoaXNfbGVhZi0+c2hhcmVkX2NwdV9tYXApKTsKQEAgLTU0NSw3ICs1MDksNyBAQAogI2RlZmluZSBTVE9SRV9DQUNIRV9ESVNBQkxFKHNsb3QpCQkJCQlcCiBzdGF0aWMgc3NpemVfdAkJCQkJCQkJXAogc3RvcmVfY2FjaGVfZGlzYWJsZV8jI3Nsb3Qoc3RydWN0IF9jcHVpZDRfaW5mbyAqdGhpc19sZWFmLAkJXAotCQkJICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQkJXAorCQkJICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCQlcCiB7CQkJCQkJCQkJXAogCXJldHVybiBzdG9yZV9jYWNoZV9kaXNhYmxlKHRoaXNfbGVhZiwgYnVmLCBjb3VudCwgc2xvdCk7CVwKIH0KQEAgLTU1OCwxMCArNTIyLDcgQEAKIAkJc2hvd19jYWNoZV9kaXNhYmxlXzEsIHN0b3JlX2NhY2hlX2Rpc2FibGVfMSk7CiAKICNlbHNlCS8qIENPTkZJR19BTURfTkIgKi8KLXN0YXRpYyB2b2lkIF9fY3B1aW5pdAotYW1kX2NoZWNrX2wzX2Rpc2FibGUoc3RydWN0IF9jcHVpZDRfaW5mb19yZWdzICp0aGlzX2xlYWYsIGludCBpbmRleCkKLXsKLX07CisjZGVmaW5lIGFtZF9pbml0X2wzX2NhY2hlKHgsIHkpCiAjZW5kaWYgLyogQ09ORklHX0FNRF9OQiAqLwogCiBzdGF0aWMgaW50CkBAIC01NzUsNyArNTM2LDcgQEAKIAogCWlmIChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9BTUQpIHsKIAkJYW1kX2NwdWlkNChpbmRleCwgJmVheCwgJmVieCwgJmVjeCk7Ci0JCWFtZF9jaGVja19sM19kaXNhYmxlKHRoaXNfbGVhZiwgaW5kZXgpOworCQlhbWRfaW5pdF9sM19jYWNoZSh0aGlzX2xlYWYsIGluZGV4KTsKIAl9IGVsc2UgewogCQljcHVpZF9jb3VudCg0LCBpbmRleCwgJmVheC5mdWxsLCAmZWJ4LmZ1bGwsICZlY3guZnVsbCwgJmVkeCk7CiAJfQpAQCAtOTgzLDMwICs5NDQsNDggQEAKIGRlZmluZV9vbmVfcm8oc2hhcmVkX2NwdV9tYXApOwogZGVmaW5lX29uZV9ybyhzaGFyZWRfY3B1X2xpc3QpOwogCi0jZGVmaW5lIERFRkFVTFRfU1lTRlNfQ0FDSEVfQVRUUlMJXAotCSZ0eXBlLmF0dHIsCQkJXAotCSZsZXZlbC5hdHRyLAkJCVwKLQkmY29oZXJlbmN5X2xpbmVfc2l6ZS5hdHRyLAlcCi0JJnBoeXNpY2FsX2xpbmVfcGFydGl0aW9uLmF0dHIsCVwKLQkmd2F5c19vZl9hc3NvY2lhdGl2aXR5LmF0dHIsCVwKLQkmbnVtYmVyX29mX3NldHMuYXR0ciwJCVwKLQkmc2l6ZS5hdHRyLAkJCVwKLQkmc2hhcmVkX2NwdV9tYXAuYXR0ciwJCVwKLQkmc2hhcmVkX2NwdV9saXN0LmF0dHIKLQogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRlZmF1bHRfYXR0cnNbXSA9IHsKLQlERUZBVUxUX1NZU0ZTX0NBQ0hFX0FUVFJTLAorCSZ0eXBlLmF0dHIsCisJJmxldmVsLmF0dHIsCisJJmNvaGVyZW5jeV9saW5lX3NpemUuYXR0ciwKKwkmcGh5c2ljYWxfbGluZV9wYXJ0aXRpb24uYXR0ciwKKwkmd2F5c19vZl9hc3NvY2lhdGl2aXR5LmF0dHIsCisJJm51bWJlcl9vZl9zZXRzLmF0dHIsCisJJnNpemUuYXR0ciwKKwkmc2hhcmVkX2NwdV9tYXAuYXR0ciwKKwkmc2hhcmVkX2NwdV9saXN0LmF0dHIsCiAJTlVMTAogfTsKIAotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRlZmF1bHRfbDNfYXR0cnNbXSA9IHsKLQlERUZBVUxUX1NZU0ZTX0NBQ0hFX0FUVFJTLAogI2lmZGVmIENPTkZJR19BTURfTkIKLQkmY2FjaGVfZGlzYWJsZV8wLmF0dHIsCi0JJmNhY2hlX2Rpc2FibGVfMS5hdHRyLAorc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKiogX19jcHVpbml0IGFtZF9sM19hdHRycyh2b2lkKQoreworCXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICoqYXR0cnM7CisJaW50IG47CisKKwlpZiAoYXR0cnMpCisJCXJldHVybiBhdHRyczsKKworCW4gPSBzaXplb2YgKGRlZmF1bHRfYXR0cnMpIC8gc2l6ZW9mIChzdHJ1Y3QgYXR0cmlidXRlICopOworCisJaWYgKGFtZF9uYl9oYXNfZmVhdHVyZShBTURfTkJfTDNfSU5ERVhfRElTQUJMRSkpCisJCW4gKz0gMjsKKworCWF0dHJzID0ga3phbGxvYyhuICogc2l6ZW9mIChzdHJ1Y3QgYXR0cmlidXRlICopLCBHRlBfS0VSTkVMKTsKKwlpZiAoYXR0cnMgPT0gTlVMTCkKKwkJcmV0dXJuIGF0dHJzID0gZGVmYXVsdF9hdHRyczsKKworCWZvciAobiA9IDA7IGRlZmF1bHRfYXR0cnNbbl07IG4rKykKKwkJYXR0cnNbbl0gPSBkZWZhdWx0X2F0dHJzW25dOworCisJaWYgKGFtZF9uYl9oYXNfZmVhdHVyZShBTURfTkJfTDNfSU5ERVhfRElTQUJMRSkpIHsKKwkJYXR0cnNbbisrXSA9ICZjYWNoZV9kaXNhYmxlXzAuYXR0cjsKKwkJYXR0cnNbbisrXSA9ICZjYWNoZV9kaXNhYmxlXzEuYXR0cjsKKwl9CisKKwlyZXR1cm4gYXR0cnM7Cit9CiAjZW5kaWYKLQlOVUxMCi19OwogCiBzdGF0aWMgc3NpemVfdCBzaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CkBAIC0xMTE3LDExICsxMDk2LDExIEBACiAKIAkJdGhpc19sZWFmID0gQ1BVSUQ0X0lORk9fSURYKGNwdSwgaSk7CiAKLQkJaWYgKHRoaXNfbGVhZi0+bDMgJiYgdGhpc19sZWFmLT5sMy0+Y2FuX2Rpc2FibGUpCi0JCQlrdHlwZV9jYWNoZS5kZWZhdWx0X2F0dHJzID0gZGVmYXVsdF9sM19hdHRyczsKLQkJZWxzZQotCQkJa3R5cGVfY2FjaGUuZGVmYXVsdF9hdHRycyA9IGRlZmF1bHRfYXR0cnM7Ci0KKwkJa3R5cGVfY2FjaGUuZGVmYXVsdF9hdHRycyA9IGRlZmF1bHRfYXR0cnM7CisjaWZkZWYgQ09ORklHX0FNRF9OQgorCQlpZiAodGhpc19sZWFmLT5sMykKKwkJCWt0eXBlX2NhY2hlLmRlZmF1bHRfYXR0cnMgPSBhbWRfbDNfYXR0cnMoKTsKKyNlbmRpZgogCQlyZXR2YWwgPSBrb2JqZWN0X2luaXRfYW5kX2FkZCgmKHRoaXNfb2JqZWN0LT5rb2JqKSwKIAkJCQkJICAgICAgJmt0eXBlX2NhY2hlLAogCQkJCQkgICAgICBwZXJfY3B1KGljaV9jYWNoZV9rb2JqZWN0LCBjcHUpLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2UuYwppbmRleCA3YTM1YjcyLi5kOTE2MTgzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2UuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2UuYwpAQCAtMzI2LDcgKzMyNiw3IEBACiAKIHN0YXRpYyBpbnQgbXNyX3RvX29mZnNldCh1MzIgbXNyKQogewotCXVuc2lnbmVkIGJhbmsgPSBfX2dldF9jcHVfdmFyKGluamVjdG0uYmFuayk7CisJdW5zaWduZWQgYmFuayA9IF9fdGhpc19jcHVfcmVhZChpbmplY3RtLmJhbmspOwogCiAJaWYgKG1zciA9PSByaXBfbXNyKQogCQlyZXR1cm4gb2Zmc2V0b2Yoc3RydWN0IG1jZSwgaXApOwpAQCAtMzQ2LDcgKzM0Niw3IEBACiB7CiAJdTY0IHY7CiAKLQlpZiAoX19nZXRfY3B1X3ZhcihpbmplY3RtKS5maW5pc2hlZCkgeworCWlmIChfX3RoaXNfY3B1X3JlYWQoaW5qZWN0bS5maW5pc2hlZCkpIHsKIAkJaW50IG9mZnNldCA9IG1zcl90b19vZmZzZXQobXNyKTsKIAogCQlpZiAob2Zmc2V0IDwgMCkKQEAgLTM2OSw3ICszNjksNyBAQAogCiBzdGF0aWMgdm9pZCBtY2Vfd3Jtc3JsKHUzMiBtc3IsIHU2NCB2KQogewotCWlmIChfX2dldF9jcHVfdmFyKGluamVjdG0pLmZpbmlzaGVkKSB7CisJaWYgKF9fdGhpc19jcHVfcmVhZChpbmplY3RtLmZpbmlzaGVkKSkgewogCQlpbnQgb2Zmc2V0ID0gbXNyX3RvX29mZnNldChtc3IpOwogCiAJCWlmIChvZmZzZXQgPj0gMCkKQEAgLTExNTksNyArMTE1OSw3IEBACiAKIAlXQVJOX09OKHNtcF9wcm9jZXNzb3JfaWQoKSAhPSBkYXRhKTsKIAotCWlmIChtY2VfYXZhaWxhYmxlKCZjdXJyZW50X2NwdV9kYXRhKSkgeworCWlmIChtY2VfYXZhaWxhYmxlKF9fdGhpc19jcHVfcHRyKCZjcHVfaW5mbykpKSB7CiAJCW1hY2hpbmVfY2hlY2tfcG9sbChNQ1BfVElNRVNUQU1QLAogCQkJCSZfX2dldF9jcHVfdmFyKG1jZV9wb2xsX2JhbmtzKSk7CiAJfQpAQCAtMTc2Nyw3ICsxNzY3LDcgQEAKIHN0YXRpYyBpbnQgbWNlX3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KQogewogCV9fbWNoZWNrX2NwdV9pbml0X2dlbmVyaWMoKTsKLQlfX21jaGVja19jcHVfaW5pdF92ZW5kb3IoJmN1cnJlbnRfY3B1X2RhdGEpOworCV9fbWNoZWNrX2NwdV9pbml0X3ZlbmRvcihfX3RoaXNfY3B1X3B0cigmY3B1X2luZm8pKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTc3NSw3ICsxNzc1LDcgQEAKIHN0YXRpYyB2b2lkIG1jZV9jcHVfcmVzdGFydCh2b2lkICpkYXRhKQogewogCWRlbF90aW1lcl9zeW5jKCZfX2dldF9jcHVfdmFyKG1jZV90aW1lcikpOwotCWlmICghbWNlX2F2YWlsYWJsZSgmY3VycmVudF9jcHVfZGF0YSkpCisJaWYgKCFtY2VfYXZhaWxhYmxlKF9fdGhpc19jcHVfcHRyKCZjcHVfaW5mbykpKQogCQlyZXR1cm47CiAJX19tY2hlY2tfY3B1X2luaXRfZ2VuZXJpYygpOwogCV9fbWNoZWNrX2NwdV9pbml0X3RpbWVyKCk7CkBAIC0xNzkwLDcgKzE3OTAsNyBAQAogLyogVG9nZ2xlIGZlYXR1cmVzIGZvciBjb3JyZWN0ZWQgZXJyb3JzICovCiBzdGF0aWMgdm9pZCBtY2VfZGlzYWJsZV9jZSh2b2lkICphbGwpCiB7Ci0JaWYgKCFtY2VfYXZhaWxhYmxlKCZjdXJyZW50X2NwdV9kYXRhKSkKKwlpZiAoIW1jZV9hdmFpbGFibGUoX190aGlzX2NwdV9wdHIoJmNwdV9pbmZvKSkpCiAJCXJldHVybjsKIAlpZiAoYWxsKQogCQlkZWxfdGltZXJfc3luYygmX19nZXRfY3B1X3ZhcihtY2VfdGltZXIpKTsKQEAgLTE3OTksNyArMTc5OSw3IEBACiAKIHN0YXRpYyB2b2lkIG1jZV9lbmFibGVfY2Uodm9pZCAqYWxsKQogewotCWlmICghbWNlX2F2YWlsYWJsZSgmY3VycmVudF9jcHVfZGF0YSkpCisJaWYgKCFtY2VfYXZhaWxhYmxlKF9fdGhpc19jcHVfcHRyKCZjcHVfaW5mbykpKQogCQlyZXR1cm47CiAJY21jaV9yZWVuYWJsZSgpOwogCWNtY2lfcmVjaGVjaygpOwpAQCAtMjAyMiw3ICsyMDIyLDcgQEAKIAl1bnNpZ25lZCBsb25nIGFjdGlvbiA9ICoodW5zaWduZWQgbG9uZyAqKWg7CiAJaW50IGk7CiAKLQlpZiAoIW1jZV9hdmFpbGFibGUoJmN1cnJlbnRfY3B1X2RhdGEpKQorCWlmICghbWNlX2F2YWlsYWJsZShfX3RoaXNfY3B1X3B0cigmY3B1X2luZm8pKSkKIAkJcmV0dXJuOwogCiAJaWYgKCEoYWN0aW9uICYgQ1BVX1RBU0tTX0ZST1pFTikpCkBAIC0yMDQwLDcgKzIwNDAsNyBAQAogCXVuc2lnbmVkIGxvbmcgYWN0aW9uID0gKih1bnNpZ25lZCBsb25nICopaDsKIAlpbnQgaTsKIAotCWlmICghbWNlX2F2YWlsYWJsZSgmY3VycmVudF9jcHVfZGF0YSkpCisJaWYgKCFtY2VfYXZhaWxhYmxlKF9fdGhpc19jcHVfcHRyKCZjcHVfaW5mbykpKQogCQlyZXR1cm47CiAKIAlpZiAoIShhY3Rpb24gJiBDUFVfVEFTS1NfRlJPWkVOKSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV9hbWQuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV9hbWQuYwppbmRleCA4MGM0ODIzLi41YmYyZmFjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfYW1kLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlX2FtZC5jCkBAIC0zMSw4ICszMSw2IEBACiAjaW5jbHVkZSA8YXNtL21jZS5oPgogI2luY2x1ZGUgPGFzbS9tc3IuaD4KIAotI2RlZmluZSBQRlggICAgICAgICAgICAgICAibWNlX3RocmVzaG9sZDogIgotI2RlZmluZSBWRVJTSU9OICAgICAgICAgICAidmVyc2lvbiAxLjEuMSIKICNkZWZpbmUgTlJfQkFOS1MgICAgICAgICAgNgogI2RlZmluZSBOUl9CTE9DS1MgICAgICAgICA5CiAjZGVmaW5lIFRIUkVTSE9MRF9NQVggICAgIDB4RkZGCkBAIC01OSwxMiArNTcsNiBAQAogCXN0cnVjdCBsaXN0X2hlYWQJbWlzY2o7CiB9OwogCi0vKiBkZWZhdWx0cyB1c2VkIGVhcmx5IG9uIGJvb3QgKi8KLXN0YXRpYyBzdHJ1Y3QgdGhyZXNob2xkX2Jsb2NrIHRocmVzaG9sZF9kZWZhdWx0cyA9IHsKLQkuaW50ZXJydXB0X2VuYWJsZQk9IDAsCi0JLnRocmVzaG9sZF9saW1pdAk9IFRIUkVTSE9MRF9NQVgsCi19OwotCiBzdHJ1Y3QgdGhyZXNob2xkX2JhbmsgewogCXN0cnVjdCBrb2JqZWN0CQkqa29iajsKIAlzdHJ1Y3QgdGhyZXNob2xkX2Jsb2NrCSpibG9ja3M7CkBAIC04OSw1MCArODEsMTAxIEBACiBzdHJ1Y3QgdGhyZXNoX3Jlc3RhcnQgewogCXN0cnVjdCB0aHJlc2hvbGRfYmxvY2sJKmI7CiAJaW50CQkJcmVzZXQ7CisJaW50CQkJc2V0X2x2dF9vZmY7CisJaW50CQkJbHZ0X29mZjsKIAl1MTYJCQlvbGRfbGltaXQ7CiB9OwogCitzdGF0aWMgaW50IGx2dF9vZmZfdmFsaWQoc3RydWN0IHRocmVzaG9sZF9ibG9jayAqYiwgaW50IGFwaWMsIHUzMiBsbywgdTMyIGhpKQoreworCWludCBtc3IgPSAoaGkgJiBNQVNLX0xWVE9GRl9ISSkgPj4gMjA7CisKKwlpZiAoYXBpYyA8IDApIHsKKwkJcHJfZXJyKEZXX0JVRyAiY3B1ICVkLCBmYWlsZWQgdG8gc2V0dXAgdGhyZXNob2xkIGludGVycnVwdCAiCisJCSAgICAgICAiZm9yIGJhbmsgJWQsIGJsb2NrICVkIChNU1IlMDhYPTB4JXglMDh4KVxuIiwgYi0+Y3B1LAorCQkgICAgICAgYi0+YmFuaywgYi0+YmxvY2ssIGItPmFkZHJlc3MsIGhpLCBsbyk7CisJCXJldHVybiAwOworCX0KKworCWlmIChhcGljICE9IG1zcikgeworCQlwcl9lcnIoRldfQlVHICJjcHUgJWQsIGludmFsaWQgdGhyZXNob2xkIGludGVycnVwdCBvZmZzZXQgJWQgIgorCQkgICAgICAgImZvciBiYW5rICVkLCBibG9jayAlZCAoTVNSJTA4WD0weCV4JTA4eClcbiIsCisJCSAgICAgICBiLT5jcHUsIGFwaWMsIGItPmJhbmssIGItPmJsb2NrLCBiLT5hZGRyZXNzLCBoaSwgbG8pOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMTsKK307CisKIC8qIG11c3QgYmUgY2FsbGVkIHdpdGggY29ycmVjdCBjcHUgYWZmaW5pdHkgKi8KIC8qIENhbGxlZCB2aWEgc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKCkgKi8KIHN0YXRpYyB2b2lkIHRocmVzaG9sZF9yZXN0YXJ0X2Jhbmsodm9pZCAqX3RyKQogewogCXN0cnVjdCB0aHJlc2hfcmVzdGFydCAqdHIgPSBfdHI7Ci0JdTMyIG1jaV9taXNjX2hpLCBtY2lfbWlzY19sbzsKKwl1MzIgaGksIGxvOwogCi0JcmRtc3IodHItPmItPmFkZHJlc3MsIG1jaV9taXNjX2xvLCBtY2lfbWlzY19oaSk7CisJcmRtc3IodHItPmItPmFkZHJlc3MsIGxvLCBoaSk7CiAKLQlpZiAodHItPmItPnRocmVzaG9sZF9saW1pdCA8IChtY2lfbWlzY19oaSAmIFRIUkVTSE9MRF9NQVgpKQorCWlmICh0ci0+Yi0+dGhyZXNob2xkX2xpbWl0IDwgKGhpICYgVEhSRVNIT0xEX01BWCkpCiAJCXRyLT5yZXNldCA9IDE7CS8qIGxpbWl0IGNhbm5vdCBiZSBsb3dlciB0aGFuIGVyciBjb3VudCAqLwogCiAJaWYgKHRyLT5yZXNldCkgewkJLyogcmVzZXQgZXJyIGNvdW50IGFuZCBvdmVyZmxvdyBiaXQgKi8KLQkJbWNpX21pc2NfaGkgPQotCQkgICAgKG1jaV9taXNjX2hpICYgfihNQVNLX0VSUl9DT1VOVF9ISSB8IE1BU0tfT1ZFUkZMT1dfSEkpKSB8CisJCWhpID0KKwkJICAgIChoaSAmIH4oTUFTS19FUlJfQ09VTlRfSEkgfCBNQVNLX09WRVJGTE9XX0hJKSkgfAogCQkgICAgKFRIUkVTSE9MRF9NQVggLSB0ci0+Yi0+dGhyZXNob2xkX2xpbWl0KTsKIAl9IGVsc2UgaWYgKHRyLT5vbGRfbGltaXQpIHsJLyogY2hhbmdlIGxpbWl0IHcvbyByZXNldCAqLwotCQlpbnQgbmV3X2NvdW50ID0gKG1jaV9taXNjX2hpICYgVEhSRVNIT0xEX01BWCkgKworCQlpbnQgbmV3X2NvdW50ID0gKGhpICYgVEhSRVNIT0xEX01BWCkgKwogCQkgICAgKHRyLT5vbGRfbGltaXQgLSB0ci0+Yi0+dGhyZXNob2xkX2xpbWl0KTsKIAotCQltY2lfbWlzY19oaSA9IChtY2lfbWlzY19oaSAmIH5NQVNLX0VSUl9DT1VOVF9ISSkgfAorCQloaSA9IChoaSAmIH5NQVNLX0VSUl9DT1VOVF9ISSkgfAogCQkgICAgKG5ld19jb3VudCAmIFRIUkVTSE9MRF9NQVgpOwogCX0KIAotCXRyLT5iLT5pbnRlcnJ1cHRfZW5hYmxlID8KLQkgICAgKG1jaV9taXNjX2hpID0gKG1jaV9taXNjX2hpICYgfk1BU0tfSU5UX1RZUEVfSEkpIHwgSU5UX1RZUEVfQVBJQykgOgotCSAgICAobWNpX21pc2NfaGkgJj0gfk1BU0tfSU5UX1RZUEVfSEkpOworCWlmICh0ci0+c2V0X2x2dF9vZmYpIHsKKwkJaWYgKGx2dF9vZmZfdmFsaWQodHItPmIsIHRyLT5sdnRfb2ZmLCBsbywgaGkpKSB7CisJCQkvKiBzZXQgbmV3IGx2dCBvZmZzZXQgKi8KKwkJCWhpICY9IH5NQVNLX0xWVE9GRl9ISTsKKwkJCWhpIHw9IHRyLT5sdnRfb2ZmIDw8IDIwOworCQl9CisJfQogCi0JbWNpX21pc2NfaGkgfD0gTUFTS19DT1VOVF9FTl9ISTsKLQl3cm1zcih0ci0+Yi0+YWRkcmVzcywgbWNpX21pc2NfbG8sIG1jaV9taXNjX2hpKTsKKwl0ci0+Yi0+aW50ZXJydXB0X2VuYWJsZSA/CisJICAgIChoaSA9IChoaSAmIH5NQVNLX0lOVF9UWVBFX0hJKSB8IElOVF9UWVBFX0FQSUMpIDoKKwkgICAgKGhpICY9IH5NQVNLX0lOVF9UWVBFX0hJKTsKKworCWhpIHw9IE1BU0tfQ09VTlRfRU5fSEk7CisJd3Jtc3IodHItPmItPmFkZHJlc3MsIGxvLCBoaSk7Cit9CisKK3N0YXRpYyB2b2lkIG1jZV90aHJlc2hvbGRfYmxvY2tfaW5pdChzdHJ1Y3QgdGhyZXNob2xkX2Jsb2NrICpiLCBpbnQgb2Zmc2V0KQoreworCXN0cnVjdCB0aHJlc2hfcmVzdGFydCB0ciA9IHsKKwkJLmIJCQk9IGIsCisJCS5zZXRfbHZ0X29mZgkJPSAxLAorCQkubHZ0X29mZgkJPSBvZmZzZXQsCisJfTsKKworCWItPnRocmVzaG9sZF9saW1pdAkJPSBUSFJFU0hPTERfTUFYOworCXRocmVzaG9sZF9yZXN0YXJ0X2JhbmsoJnRyKTsKK307CisKK3N0YXRpYyBpbnQgc2V0dXBfQVBJQ19tY2UoaW50IHJlc2VydmVkLCBpbnQgbmV3KQoreworCWlmIChyZXNlcnZlZCA8IDAgJiYgIXNldHVwX0FQSUNfZWlsdnQobmV3LCBUSFJFU0hPTERfQVBJQ19WRUNUT1IsCisJCQkJCSAgICAgIEFQSUNfRUlMVlRfTVNHX0ZJWCwgMCkpCisJCXJldHVybiBuZXc7CisKKwlyZXR1cm4gcmVzZXJ2ZWQ7CiB9CiAKIC8qIGNwdSBpbml0IGVudHJ5IHBvaW50LCBjYWxsZWQgZnJvbSBtY2UuYyB3aXRoIHByZWVtcHQgb2ZmICovCiB2b2lkIG1jZV9hbWRfZmVhdHVyZV9pbml0KHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKIHsKKwlzdHJ1Y3QgdGhyZXNob2xkX2Jsb2NrIGI7CiAJdW5zaWduZWQgaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAl1MzIgbG93ID0gMCwgaGlnaCA9IDAsIGFkZHJlc3MgPSAwOwogCXVuc2lnbmVkIGludCBiYW5rLCBibG9jazsKLQlzdHJ1Y3QgdGhyZXNoX3Jlc3RhcnQgdHI7Ci0JaW50IGx2dF9vZmYgPSAtMTsKLQl1OCBvZmZzZXQ7CisJaW50IG9mZnNldCA9IC0xOwogCiAJZm9yIChiYW5rID0gMDsgYmFuayA8IE5SX0JBTktTOyArK2JhbmspIHsKIAkJZm9yIChibG9jayA9IDA7IGJsb2NrIDwgTlJfQkxPQ0tTOyArK2Jsb2NrKSB7CkBAIC0xNjMsMzkgKzIwNiwxNiBAQAogCQkJaWYgKHNoYXJlZF9iYW5rW2JhbmtdICYmIGMtPmNwdV9jb3JlX2lkKQogCQkJCWJyZWFrOwogI2VuZGlmCi0JCQlvZmZzZXQgPSAoaGlnaCAmIE1BU0tfTFZUT0ZGX0hJKSA+PiAyMDsKLQkJCWlmIChsdnRfb2ZmIDwgMCkgewotCQkJCWlmIChzZXR1cF9BUElDX2VpbHZ0KG9mZnNldCwKLQkJCQkJCSAgICAgVEhSRVNIT0xEX0FQSUNfVkVDVE9SLAotCQkJCQkJICAgICBBUElDX0VJTFZUX01TR19GSVgsIDApKSB7Ci0JCQkJCXByX2VycihGV19CVUcgImNwdSAlZCwgZmFpbGVkIHRvICIKLQkJCQkJICAgICAgICJzZXR1cCB0aHJlc2hvbGQgaW50ZXJydXB0ICIKLQkJCQkJICAgICAgICJmb3IgYmFuayAlZCwgYmxvY2sgJWQgIgotCQkJCQkgICAgICAgIihNU1IlMDhYPTB4JXglMDh4KSIsCi0JCQkJCSAgICAgICBzbXBfcHJvY2Vzc29yX2lkKCksIGJhbmssIGJsb2NrLAotCQkJCQkgICAgICAgYWRkcmVzcywgaGlnaCwgbG93KTsKLQkJCQkJY29udGludWU7Ci0JCQkJfQotCQkJCWx2dF9vZmYgPSBvZmZzZXQ7Ci0JCQl9IGVsc2UgaWYgKGx2dF9vZmYgIT0gb2Zmc2V0KSB7Ci0JCQkJcHJfZXJyKEZXX0JVRyAiY3B1ICVkLCBpbnZhbGlkIHRocmVzaG9sZCAiCi0JCQkJICAgICAgICJpbnRlcnJ1cHQgb2Zmc2V0ICVkIGZvciBiYW5rICVkLCIKLQkJCQkgICAgICAgImJsb2NrICVkIChNU1IlMDhYPTB4JXglMDh4KSIsCi0JCQkJICAgICAgIHNtcF9wcm9jZXNzb3JfaWQoKSwgbHZ0X29mZiwgYmFuaywKLQkJCQkgICAgICAgYmxvY2ssIGFkZHJlc3MsIGhpZ2gsIGxvdyk7Ci0JCQkJY29udGludWU7Ci0JCQl9CisJCQlvZmZzZXQgPSBzZXR1cF9BUElDX21jZShvZmZzZXQsCisJCQkJCQkoaGlnaCAmIE1BU0tfTFZUT0ZGX0hJKSA+PiAyMCk7CiAKLQkJCWhpZ2ggJj0gfk1BU0tfTFZUT0ZGX0hJOwotCQkJaGlnaCB8PSBsdnRfb2ZmIDw8IDIwOwotCQkJd3Jtc3IoYWRkcmVzcywgbG93LCBoaWdoKTsKKwkJCW1lbXNldCgmYiwgMCwgc2l6ZW9mKGIpKTsKKwkJCWIuY3B1CQk9IGNwdTsKKwkJCWIuYmFuawkJPSBiYW5rOworCQkJYi5ibG9jawkJPSBibG9jazsKKwkJCWIuYWRkcmVzcwk9IGFkZHJlc3M7CiAKLQkJCXRocmVzaG9sZF9kZWZhdWx0cy5hZGRyZXNzID0gYWRkcmVzczsKLQkJCXRyLmIgPSAmdGhyZXNob2xkX2RlZmF1bHRzOwotCQkJdHIucmVzZXQgPSAwOwotCQkJdHIub2xkX2xpbWl0ID0gMDsKLQkJCXRocmVzaG9sZF9yZXN0YXJ0X2JhbmsoJnRyKTsKLQorCQkJbWNlX3RocmVzaG9sZF9ibG9ja19pbml0KCZiLCBvZmZzZXQpOwogCQkJbWNlX3RocmVzaG9sZF92ZWN0b3IgPSBhbWRfdGhyZXNob2xkX2ludGVycnVwdDsKIAkJfQogCX0KQEAgLTI5OCw5ICszMTgsOCBAQAogCiAJYi0+aW50ZXJydXB0X2VuYWJsZSA9ICEhbmV3OwogCisJbWVtc2V0KCZ0ciwgMCwgc2l6ZW9mKHRyKSk7CiAJdHIuYgkJPSBiOwotCXRyLnJlc2V0CT0gMDsKLQl0ci5vbGRfbGltaXQJPSAwOwogCiAJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGItPmNwdSwgdGhyZXNob2xkX3Jlc3RhcnRfYmFuaywgJnRyLCAxKTsKIApAQCAtMzIxLDEwICszNDAsMTAgQEAKIAlpZiAobmV3IDwgMSkKIAkJbmV3ID0gMTsKIAorCW1lbXNldCgmdHIsIDAsIHNpemVvZih0cikpOwogCXRyLm9sZF9saW1pdCA9IGItPnRocmVzaG9sZF9saW1pdDsKIAliLT50aHJlc2hvbGRfbGltaXQgPSBuZXc7CiAJdHIuYiA9IGI7Ci0JdHIucmVzZXQgPSAwOwogCiAJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGItPmNwdSwgdGhyZXNob2xkX3Jlc3RhcnRfYmFuaywgJnRyLCAxKTsKIApAQCAtNjAzLDkgKzYyMiw5IEBACiAJCQljb250aW51ZTsKIAkJZXJyID0gdGhyZXNob2xkX2NyZWF0ZV9iYW5rKGNwdSwgYmFuayk7CiAJCWlmIChlcnIpCi0JCQlnb3RvIG91dDsKKwkJCXJldHVybiBlcnI7CiAJfQotb3V0OgorCiAJcmV0dXJuIGVycjsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlX2ludGVsLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfaW50ZWwuYwppbmRleCA2ZmNkMDkzLi44Njk0ZWY1NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlX2ludGVsLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlX2ludGVsLmMKQEAgLTEzMCw3ICsxMzAsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGJhbmtzOwogCi0JaWYgKCFtY2VfYXZhaWxhYmxlKCZjdXJyZW50X2NwdV9kYXRhKSB8fCAhY21jaV9zdXBwb3J0ZWQoJmJhbmtzKSkKKwlpZiAoIW1jZV9hdmFpbGFibGUoX190aGlzX2NwdV9wdHIoJmNwdV9pbmZvKSkgfHwgIWNtY2lfc3VwcG9ydGVkKCZiYW5rcykpCiAJCXJldHVybjsKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJbWFjaGluZV9jaGVja19wb2xsKE1DUF9USU1FU1RBTVAsICZfX2dldF9jcHVfdmFyKG1jZV9iYW5rc19vd25lZCkpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svdGhlcm1fdGhyb3QuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL3RoZXJtX3Rocm90LmMKaW5kZXggNGI2ODMyNi4uZTEyMjQ2ZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svdGhlcm1fdGhyb3QuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay90aGVybV90aHJvdC5jCkBAIC01Myw4ICs1MywxMyBAQAogCXN0cnVjdCBfdGhlcm1hbF9zdGF0ZSBjb3JlX3Bvd2VyX2xpbWl0OwogCXN0cnVjdCBfdGhlcm1hbF9zdGF0ZSBwYWNrYWdlX3Rocm90dGxlOwogCXN0cnVjdCBfdGhlcm1hbF9zdGF0ZSBwYWNrYWdlX3Bvd2VyX2xpbWl0OworCXN0cnVjdCBfdGhlcm1hbF9zdGF0ZSBjb3JlX3RocmVzaDA7CisJc3RydWN0IF90aGVybWFsX3N0YXRlIGNvcmVfdGhyZXNoMTsKIH07CiAKKy8qIENhbGxiYWNrIHRvIGhhbmRsZSBjb3JlIHRocmVzaG9sZCBpbnRlcnJ1cHRzICovCitpbnQgKCpwbGF0Zm9ybV90aGVybWFsX25vdGlmeSkoX191NjQgbXNyX3ZhbCk7CisKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgdGhlcm1hbF9zdGF0ZSwgdGhlcm1hbF9zdGF0ZSk7CiAKIHN0YXRpYyBhdG9taWNfdCB0aGVybV90aHJvdF9lbgk9IEFUT01JQ19JTklUKDApOwpAQCAtMjAwLDYgKzIwNSwyMiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHRocmVzaF9ldmVudF92YWxpZChpbnQgZXZlbnQpCit7CisJc3RydWN0IF90aGVybWFsX3N0YXRlICpzdGF0ZTsKKwl1bnNpZ25lZCBpbnQgdGhpc19jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJc3RydWN0IHRoZXJtYWxfc3RhdGUgKnBzdGF0ZSA9ICZwZXJfY3B1KHRoZXJtYWxfc3RhdGUsIHRoaXNfY3B1KTsKKwl1NjQgbm93ID0gZ2V0X2ppZmZpZXNfNjQoKTsKKworCXN0YXRlID0gKGV2ZW50ID09IDApID8gJnBzdGF0ZS0+Y29yZV90aHJlc2gwIDogJnBzdGF0ZS0+Y29yZV90aHJlc2gxOworCisJaWYgKHRpbWVfYmVmb3JlNjQobm93LCBzdGF0ZS0+bmV4dF9jaGVjaykpCisJCXJldHVybiAwOworCisJc3RhdGUtPm5leHRfY2hlY2sgPSBub3cgKyBDSEVDS19JTlRFUlZBTDsKKwlyZXR1cm4gMTsKK30KKwogI2lmZGVmIENPTkZJR19TWVNGUwogLyogQWRkL1JlbW92ZSB0aGVybWFsX3Rocm90dGxlIGludGVyZmFjZSBmb3IgQ1BVIGRldmljZTogKi8KIHN0YXRpYyBfX2NwdWluaXQgaW50IHRoZXJtYWxfdGhyb3R0bGVfYWRkX2RldihzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzX2RldiwKQEAgLTMxMyw2ICszMzQsMjIgQEAKICNkZWZpbmUgUEFDS0FHRV9USFJPVFRMRUQJKChfX3U2NCkyIDw8IDYyKQogI2RlZmluZSBQQUNLQUdFX1BPV0VSX0xJTUlUCSgoX191NjQpMyA8PCA2MikKIAorc3RhdGljIHZvaWQgbm90aWZ5X3RocmVzaG9sZHMoX191NjQgbXNyX3ZhbCkKK3sKKwkvKiBjaGVjayB3aGV0aGVyIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBpcyBkZWZpbmVkOworCSAqIG90aGVyd2lzZSBzaW1wbHkgcmV0dXJuCisJICovCisJaWYgKCFwbGF0Zm9ybV90aGVybWFsX25vdGlmeSkKKwkJcmV0dXJuOworCisJLyogbG93ZXIgdGhyZXNob2xkIHJlYWNoZWQgKi8KKwlpZiAoKG1zcl92YWwgJiBUSEVSTV9MT0dfVEhSRVNIT0xEMCkgJiYJdGhyZXNoX2V2ZW50X3ZhbGlkKDApKQorCQlwbGF0Zm9ybV90aGVybWFsX25vdGlmeShtc3JfdmFsKTsKKwkvKiBoaWdoZXIgdGhyZXNob2xkIHJlYWNoZWQgKi8KKwlpZiAoKG1zcl92YWwgJiBUSEVSTV9MT0dfVEhSRVNIT0xEMSkgJiYgdGhyZXNoX2V2ZW50X3ZhbGlkKDEpKQorCQlwbGF0Zm9ybV90aGVybWFsX25vdGlmeShtc3JfdmFsKTsKK30KKwogLyogVGhlcm1hbCB0cmFuc2l0aW9uIGludGVycnVwdCBoYW5kbGVyICovCiBzdGF0aWMgdm9pZCBpbnRlbF90aGVybWFsX2ludGVycnVwdCh2b2lkKQogewpAQCAtMzIxLDYgKzM1OCw5IEBACiAKIAlyZG1zcmwoTVNSX0lBMzJfVEhFUk1fU1RBVFVTLCBtc3JfdmFsKTsKIAorCS8qIENoZWNrIGZvciB2aW9sYXRpb24gb2YgY29yZSB0aGVybWFsIHRocmVzaG9sZHMqLworCW5vdGlmeV90aHJlc2hvbGRzKG1zcl92YWwpOworCiAJaWYgKHRoZXJtX3Rocm90X3Byb2Nlc3MobXNyX3ZhbCAmIFRIRVJNX1NUQVRVU19QUk9DSE9ULAogCQkJCVRIRVJNQUxfVEhST1RUTElOR19FVkVOVCwKIAkJCQlDT1JFX0xFVkVMKSAhPSAwKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnQuYwppbmRleCA2ZDc1YjkxLi4wNDkyMTAxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnQuYwpAQCAtMzMwLDkgKzMzMCw2IEBACiB7CiAJaW50IGk7CiAKLQlpZiAobm1pX3dhdGNoZG9nID09IE5NSV9MT0NBTF9BUElDKQotCQlkaXNhYmxlX2xhcGljX25taV93YXRjaGRvZygpOwotCiAJZm9yIChpID0gMDsgaSA8IHg4Nl9wbXUubnVtX2NvdW50ZXJzOyBpKyspIHsKIAkJaWYgKCFyZXNlcnZlX3BlcmZjdHJfbm1pKHg4Nl9wbXUucGVyZmN0ciArIGkpKQogCQkJZ290byBwZXJmY3RyX2ZhaWw7CkBAIC0zNTUsOSArMzUyLDYgQEAKIAlmb3IgKGktLTsgaSA+PSAwOyBpLS0pCiAJCXJlbGVhc2VfcGVyZmN0cl9ubWkoeDg2X3BtdS5wZXJmY3RyICsgaSk7CiAKLQlpZiAobm1pX3dhdGNoZG9nID09IE5NSV9MT0NBTF9BUElDKQotCQllbmFibGVfbGFwaWNfbm1pX3dhdGNoZG9nKCk7Ci0KIAlyZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTM2OSw5ICszNjMsNiBAQAogCQlyZWxlYXNlX3BlcmZjdHJfbm1pKHg4Nl9wbXUucGVyZmN0ciArIGkpOwogCQlyZWxlYXNlX2V2bnRzZWxfbm1pKHg4Nl9wbXUuZXZlbnRzZWwgKyBpKTsKIAl9Ci0KLQlpZiAobm1pX3dhdGNoZG9nID09IE5NSV9MT0NBTF9BUElDKQotCQllbmFibGVfbGFwaWNfbm1pX3dhdGNoZG9nKCk7CiB9CiAKICNlbHNlCkBAIC0zODQsMTUgKzM3NSw1MyBAQAogc3RhdGljIGJvb2wgY2hlY2tfaHdfZXhpc3RzKHZvaWQpCiB7CiAJdTY0IHZhbCwgdmFsX25ldyA9IDA7Ci0JaW50IHJldCA9IDA7CisJaW50IGksIHJlZywgcmV0ID0gMDsKIAorCS8qCisJICogQ2hlY2sgdG8gc2VlIGlmIHRoZSBCSU9TIGVuYWJsZWQgYW55IG9mIHRoZSBjb3VudGVycywgaWYgc28KKwkgKiBjb21wbGFpbiBhbmQgYmFpbC4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgeDg2X3BtdS5udW1fY291bnRlcnM7IGkrKykgeworCQlyZWcgPSB4ODZfcG11LmV2ZW50c2VsICsgaTsKKwkJcmV0ID0gcmRtc3JsX3NhZmUocmVnLCAmdmFsKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gbXNyX2ZhaWw7CisJCWlmICh2YWwgJiBBUkNIX1BFUkZNT05fRVZFTlRTRUxfRU5BQkxFKQorCQkJZ290byBiaW9zX2ZhaWw7CisJfQorCisJaWYgKHg4Nl9wbXUubnVtX2NvdW50ZXJzX2ZpeGVkKSB7CisJCXJlZyA9IE1TUl9BUkNIX1BFUkZNT05fRklYRURfQ1RSX0NUUkw7CisJCXJldCA9IHJkbXNybF9zYWZlKHJlZywgJnZhbCk7CisJCWlmIChyZXQpCisJCQlnb3RvIG1zcl9mYWlsOworCQlmb3IgKGkgPSAwOyBpIDwgeDg2X3BtdS5udW1fY291bnRlcnNfZml4ZWQ7IGkrKykgeworCQkJaWYgKHZhbCAmICgweDAzIDw8IGkqNCkpCisJCQkJZ290byBiaW9zX2ZhaWw7CisJCX0KKwl9CisKKwkvKgorCSAqIE5vdyB3cml0ZSBhIHZhbHVlIGFuZCByZWFkIGl0IGJhY2sgdG8gc2VlIGlmIGl0IG1hdGNoZXMsCisJICogdGhpcyBpcyBuZWVkZWQgdG8gZGV0ZWN0IGNlcnRhaW4gaGFyZHdhcmUgZW11bGF0b3JzIChxZW11L2t2bSkKKwkgKiB0aGF0IGRvbid0IHRyYXAgb24gdGhlIE1TUiBhY2Nlc3MgYW5kIGFsd2F5cyByZXR1cm4gMHMuCisJICovCiAJdmFsID0gMHhhYmNkVUw7Ci0JcmV0IHw9IGNoZWNraW5nX3dybXNybCh4ODZfcG11LnBlcmZjdHIsIHZhbCk7CisJcmV0ID0gY2hlY2tpbmdfd3Jtc3JsKHg4Nl9wbXUucGVyZmN0ciwgdmFsKTsKIAlyZXQgfD0gcmRtc3JsX3NhZmUoeDg2X3BtdS5wZXJmY3RyLCAmdmFsX25ldyk7CiAJaWYgKHJldCB8fCB2YWwgIT0gdmFsX25ldykKLQkJcmV0dXJuIGZhbHNlOworCQlnb3RvIG1zcl9mYWlsOwogCiAJcmV0dXJuIHRydWU7CisKK2Jpb3NfZmFpbDoKKwlwcmludGsoS0VSTl9DT05UICJCcm9rZW4gQklPUyBkZXRlY3RlZCwgdXNpbmcgc29mdHdhcmUgZXZlbnRzIG9ubHkuXG4iKTsKKwlwcmludGsoS0VSTl9FUlIgRldfQlVHICJ0aGUgQklPUyBoYXMgY29ycnVwdGVkIGh3LVBNVSByZXNvdXJjZXMgKE1TUiAleCBpcyAlTHgpXG4iLCByZWcsIHZhbCk7CisJcmV0dXJuIGZhbHNlOworCittc3JfZmFpbDoKKwlwcmludGsoS0VSTl9DT05UICJCcm9rZW4gUE1VIGhhcmR3YXJlIGRldGVjdGVkLCB1c2luZyBzb2Z0d2FyZSBldmVudHMgb25seS5cbiIpOworCXJldHVybiBmYWxzZTsKIH0KIAogc3RhdGljIHZvaWQgcmVzZXJ2ZV9kc19idWZmZXJzKHZvaWQpOwpAQCAtNDUxLDcgKzQ4MCw3IEBACiAJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7CiAJdTY0IGNvbmZpZzsKIAotCWlmICghaHdjLT5zYW1wbGVfcGVyaW9kKSB7CisJaWYgKCFpc19zYW1wbGluZ19ldmVudChldmVudCkpIHsKIAkJaHdjLT5zYW1wbGVfcGVyaW9kID0geDg2X3BtdS5tYXhfcGVyaW9kOwogCQlod2MtPmxhc3RfcGVyaW9kID0gaHdjLT5zYW1wbGVfcGVyaW9kOwogCQlsb2NhbDY0X3NldCgmaHdjLT5wZXJpb2RfbGVmdCwgaHdjLT5zYW1wbGVfcGVyaW9kKTsKQEAgLTk2OCw4ICs5OTcsNyBAQAogCiBzdGF0aWMgdm9pZCB4ODZfcG11X2VuYWJsZV9ldmVudChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCiB7Ci0Jc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKLQlpZiAoY3B1Yy0+ZW5hYmxlZCkKKwlpZiAoX190aGlzX2NwdV9yZWFkKGNwdV9od19ldmVudHMuZW5hYmxlZCkpCiAJCV9feDg2X3BtdV9lbmFibGVfZXZlbnQoJmV2ZW50LT5odywKIAkJCQkgICAgICAgQVJDSF9QRVJGTU9OX0VWRU5UU0VMX0VOQUJMRSk7CiB9CkBAIC0xMjQzLDcgKzEyNzEsNyBAQAogCQlicmVhazsKIAljYXNlIERJRV9OTUlVTktOT1dOOgogCQl0aGlzX25taSA9IHBlcmNwdV9yZWFkKGlycV9zdGF0Ll9fbm1pX2NvdW50KTsKLQkJaWYgKHRoaXNfbm1pICE9IF9fZ2V0X2NwdV92YXIocG11X25taSkubWFya2VkKQorCQlpZiAodGhpc19ubWkgIT0gX190aGlzX2NwdV9yZWFkKHBtdV9ubWkubWFya2VkKSkKIAkJCS8qIGxldCB0aGUga2VybmVsIGhhbmRsZSB0aGUgdW5rbm93biBubWkgKi8KIAkJCXJldHVybiBOT1RJRllfRE9ORTsKIAkJLyoKQEAgLTEyNjcsOCArMTI5NSw4IEBACiAJdGhpc19ubWkgPSBwZXJjcHVfcmVhZChpcnFfc3RhdC5fX25taV9jb3VudCk7CiAJaWYgKChoYW5kbGVkID4gMSkgfHwKIAkJLyogdGhlIG5leHQgbm1pIGNvdWxkIGJlIGEgYmFjay10by1iYWNrIG5taSAqLwotCSAgICAoKF9fZ2V0X2NwdV92YXIocG11X25taSkubWFya2VkID09IHRoaXNfbm1pKSAmJgotCSAgICAgKF9fZ2V0X2NwdV92YXIocG11X25taSkuaGFuZGxlZCA+IDEpKSkgeworCSAgICAoKF9fdGhpc19jcHVfcmVhZChwbXVfbm1pLm1hcmtlZCkgPT0gdGhpc19ubWkpICYmCisJICAgICAoX190aGlzX2NwdV9yZWFkKHBtdV9ubWkuaGFuZGxlZCkgPiAxKSkpIHsKIAkJLyoKIAkJICogV2UgY291bGQgaGF2ZSB0d28gc3Vic2VxdWVudCBiYWNrLXRvLWJhY2sgbm1pczogVGhlCiAJCSAqIGZpcnN0IGhhbmRsZXMgbW9yZSB0aGFuIG9uZSBjb3VudGVyLCB0aGUgMm5kCkBAIC0xMjc5LDggKzEzMDcsOCBAQAogCQkgKiBoYW5kbGluZyBtb3JlIHRoYW4gb25lIGNvdW50ZXIuIFdlIHdpbGwgbWFyayB0aGUKIAkJICogbmV4dCAoM3JkKSBhbmQgdGhlbiBkcm9wIGl0IGlmIHVuaGFuZGxlZC4KIAkJICovCi0JCV9fZ2V0X2NwdV92YXIocG11X25taSkubWFya2VkCT0gdGhpc19ubWkgKyAxOwotCQlfX2dldF9jcHVfdmFyKHBtdV9ubWkpLmhhbmRsZWQJPSBoYW5kbGVkOworCQlfX3RoaXNfY3B1X3dyaXRlKHBtdV9ubWkubWFya2VkLCB0aGlzX25taSArIDEpOworCQlfX3RoaXNfY3B1X3dyaXRlKHBtdV9ubWkuaGFuZGxlZCwgaGFuZGxlZCk7CiAJfQogCiAJcmV0dXJuIE5PVElGWV9TVE9QOwpAQCAtMTM2Miw3ICsxMzkwLDcgQEAKIAlwcl9pbmZvKCJubyBoYXJkd2FyZSBzYW1wbGluZyBpbnRlcnJ1cHQgYXZhaWxhYmxlLlxuIik7CiB9CiAKLXZvaWQgX19pbml0IGluaXRfaHdfcGVyZl9ldmVudHModm9pZCkKK2ludCBfX2luaXQgaW5pdF9od19wZXJmX2V2ZW50cyh2b2lkKQogewogCXN0cnVjdCBldmVudF9jb25zdHJhaW50ICpjOwogCWludCBlcnI7CkBAIC0xMzc3LDIwICsxNDA1LDE4IEBACiAJCWVyciA9IGFtZF9wbXVfaW5pdCgpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlyZXR1cm47CisJCXJldHVybiAwOwogCX0KIAlpZiAoZXJyICE9IDApIHsKIAkJcHJfY29udCgibm8gUE1VIGRyaXZlciwgc29mdHdhcmUgZXZlbnRzIG9ubHkuXG4iKTsKLQkJcmV0dXJuOworCQlyZXR1cm4gMDsKIAl9CiAKIAlwbXVfY2hlY2tfYXBpYygpOwogCiAJLyogc2FuaXR5IGNoZWNrIHRoYXQgdGhlIGhhcmR3YXJlIGV4aXN0cyBvciBpcyBlbXVsYXRlZCAqLwotCWlmICghY2hlY2tfaHdfZXhpc3RzKCkpIHsKLQkJcHJfY29udCgiQnJva2VuIFBNVSBoYXJkd2FyZSBkZXRlY3RlZCwgc29mdHdhcmUgZXZlbnRzIG9ubHkuXG4iKTsKLQkJcmV0dXJuOwotCX0KKwlpZiAoIWNoZWNrX2h3X2V4aXN0cygpKQorCQlyZXR1cm4gMDsKIAogCXByX2NvbnQoIiVzIFBNVSBkcml2ZXIuXG4iLCB4ODZfcG11Lm5hbWUpOwogCkBAIC0xNDM4LDkgKzE0NjQsMTIgQEAKIAlwcl9pbmZvKCIuLi4gZml4ZWQtcHVycG9zZSBldmVudHM6ICAgJWRcbiIsICAgICB4ODZfcG11Lm51bV9jb3VudGVyc19maXhlZCk7CiAJcHJfaW5mbygiLi4uIGV2ZW50IG1hc2s6ICAgICAgICAgICAgICUwMTZMeFxuIiwgeDg2X3BtdS5pbnRlbF9jdHJsKTsKIAotCXBlcmZfcG11X3JlZ2lzdGVyKCZwbXUpOworCXBlcmZfcG11X3JlZ2lzdGVyKCZwbXUsICJjcHUiLCBQRVJGX1RZUEVfUkFXKTsKIAlwZXJmX2NwdV9ub3RpZmllcih4ODZfcG11X25vdGlmaWVyKTsKKworCXJldHVybiAwOwogfQorZWFybHlfaW5pdGNhbGwoaW5pdF9od19wZXJmX2V2ZW50cyk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB4ODZfcG11X3JlYWQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQogewpAQCAtMTQ1NCwxMSArMTQ4Myw5IEBACiAgKi8KIHN0YXRpYyB2b2lkIHg4Nl9wbXVfc3RhcnRfdHhuKHN0cnVjdCBwbXUgKnBtdSkKIHsKLQlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOwotCiAJcGVyZl9wbXVfZGlzYWJsZShwbXUpOwotCWNwdWMtPmdyb3VwX2ZsYWcgfD0gUEVSRl9FVkVOVF9UWE47Ci0JY3B1Yy0+bl90eG4gPSAwOworCV9fdGhpc19jcHVfb3IoY3B1X2h3X2V2ZW50cy5ncm91cF9mbGFnLCBQRVJGX0VWRU5UX1RYTik7CisJX190aGlzX2NwdV93cml0ZShjcHVfaHdfZXZlbnRzLm5fdHhuLCAwKTsKIH0KIAogLyoKQEAgLTE0NjgsMTQgKzE0OTUsMTIgQEAKICAqLwogc3RhdGljIHZvaWQgeDg2X3BtdV9jYW5jZWxfdHhuKHN0cnVjdCBwbXUgKnBtdSkKIHsKLQlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOwotCi0JY3B1Yy0+Z3JvdXBfZmxhZyAmPSB+UEVSRl9FVkVOVF9UWE47CisJX190aGlzX2NwdV9hbmQoY3B1X2h3X2V2ZW50cy5ncm91cF9mbGFnLCB+UEVSRl9FVkVOVF9UWE4pOwogCS8qCiAJICogVHJ1bmNhdGUgdGhlIGNvbGxlY3RlZCBldmVudHMuCiAJICovCi0JY3B1Yy0+bl9hZGRlZCAtPSBjcHVjLT5uX3R4bjsKLQljcHVjLT5uX2V2ZW50cyAtPSBjcHVjLT5uX3R4bjsKKwlfX3RoaXNfY3B1X3N1YihjcHVfaHdfZXZlbnRzLm5fYWRkZWQsIF9fdGhpc19jcHVfcmVhZChjcHVfaHdfZXZlbnRzLm5fdHhuKSk7CisJX190aGlzX2NwdV9zdWIoY3B1X2h3X2V2ZW50cy5uX2V2ZW50cywgX190aGlzX2NwdV9yZWFkKGNwdV9od19ldmVudHMubl90eG4pKTsKIAlwZXJmX3BtdV9lbmFibGUocG11KTsKIH0KIApAQCAtMTY4Niw3ICsxNzExLDcgQEAKIAogCXBlcmZfY2FsbGNoYWluX3N0b3JlKGVudHJ5LCByZWdzLT5pcCk7CiAKLQlkdW1wX3RyYWNlKE5VTEwsIHJlZ3MsIE5VTEwsIHJlZ3MtPmJwLCAmYmFja3RyYWNlX29wcywgZW50cnkpOworCWR1bXBfdHJhY2UoTlVMTCwgcmVncywgTlVMTCwgJmJhY2t0cmFjZV9vcHMsIGVudHJ5KTsKIH0KIAogI2lmZGVmIENPTkZJR19DT01QQVQKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9hbWQuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9hbWQuYwppbmRleCBlNDIxYjhjLi42N2UyMjAyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfYW1kLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X2FtZC5jCkBAIC0xLDcgKzEsNSBAQAogI2lmZGVmIENPTkZJR19DUFVfU1VQX0FNRAogCi1zdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyhhbWRfbmJfbG9jayk7Ci0KIHN0YXRpYyBfX2luaXRjb25zdCBjb25zdCB1NjQgYW1kX2h3X2NhY2hlX2V2ZW50X2lkcwogCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX01BWF0KIAkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9PUF9NQVhdCkBAIC0yNzUsNyArMjczLDcgQEAKIAlyZXR1cm4gJmVtcHR5Y29uc3RyYWludDsKIH0KIAotc3RhdGljIHN0cnVjdCBhbWRfbmIgKmFtZF9hbGxvY19uYihpbnQgY3B1LCBpbnQgbmJfaWQpCitzdGF0aWMgc3RydWN0IGFtZF9uYiAqYW1kX2FsbG9jX25iKGludCBjcHUpCiB7CiAJc3RydWN0IGFtZF9uYiAqbmI7CiAJaW50IGk7CkBAIC0yODUsNyArMjgzLDcgQEAKIAlpZiAoIW5iKQogCQlyZXR1cm4gTlVMTDsKIAotCW5iLT5uYl9pZCA9IG5iX2lkOworCW5iLT5uYl9pZCA9IC0xOwogCiAJLyoKIAkgKiBpbml0aWFsaXplIGFsbCBwb3NzaWJsZSBOQiBjb25zdHJhaW50cwpAQCAtMzA2LDcgKzMwNCw3IEBACiAJaWYgKGJvb3RfY3B1X2RhdGEueDg2X21heF9jb3JlcyA8IDIpCiAJCXJldHVybiBOT1RJRllfT0s7CiAKLQljcHVjLT5hbWRfbmIgPSBhbWRfYWxsb2NfbmIoY3B1LCAtMSk7CisJY3B1Yy0+YW1kX25iID0gYW1kX2FsbG9jX25iKGNwdSk7CiAJaWYgKCFjcHVjLT5hbWRfbmIpCiAJCXJldHVybiBOT1RJRllfQkFEOwogCkBAIC0zMjUsOCArMzIzLDYgQEAKIAluYl9pZCA9IGFtZF9nZXRfbmJfaWQoY3B1KTsKIAlXQVJOX09OX09OQ0UobmJfaWQgPT0gQkFEX0FQSUNJRCk7CiAKLQlyYXdfc3Bpbl9sb2NrKCZhbWRfbmJfbG9jayk7Ci0KIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGkpIHsKIAkJbmIgPSBwZXJfY3B1KGNwdV9od19ldmVudHMsIGkpLmFtZF9uYjsKIAkJaWYgKFdBUk5fT05fT05DRSghbmIpKQpAQCAtMzQxLDggKzMzNyw2IEBACiAKIAljcHVjLT5hbWRfbmItPm5iX2lkID0gbmJfaWQ7CiAJY3B1Yy0+YW1kX25iLT5yZWZjbnQrKzsKLQotCXJhd19zcGluX3VubG9jaygmYW1kX25iX2xvY2spOwogfQogCiBzdGF0aWMgdm9pZCBhbWRfcG11X2NwdV9kZWFkKGludCBjcHUpCkBAIC0zNTQsOCArMzQ4LDYgQEAKIAogCWNwdWh3ID0gJnBlcl9jcHUoY3B1X2h3X2V2ZW50cywgY3B1KTsKIAotCXJhd19zcGluX2xvY2soJmFtZF9uYl9sb2NrKTsKLQogCWlmIChjcHVody0+YW1kX25iKSB7CiAJCXN0cnVjdCBhbWRfbmIgKm5iID0gY3B1aHctPmFtZF9uYjsKIApAQCAtMzY0LDggKzM1Niw2IEBACiAKIAkJY3B1aHctPmFtZF9uYiA9IE5VTEw7CiAJfQotCi0JcmF3X3NwaW5fdW5sb2NrKCZhbWRfbmJfbG9jayk7CiB9CiAKIHN0YXRpYyBfX2luaXRjb25zdCBjb25zdCBzdHJ1Y3QgeDg2X3BtdSBhbWRfcG11ID0gewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X2ludGVsLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfaW50ZWwuYwppbmRleCBjOGY1YzA4Li4wMDg4MzVjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfaW50ZWwuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfaW50ZWwuYwpAQCAtNjQ5LDcgKzY0OSw3IEBACiAJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7CiAKIAlpZiAodW5saWtlbHkoaHdjLT5pZHggPT0gWDg2X1BNQ19JRFhfRklYRURfQlRTKSkgewotCQlpZiAoIV9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cykuZW5hYmxlZCkKKwkJaWYgKCFfX3RoaXNfY3B1X3JlYWQoY3B1X2h3X2V2ZW50cy5lbmFibGVkKSkKIAkJCXJldHVybjsKIAogCQlpbnRlbF9wbXVfZW5hYmxlX2J0cyhod2MtPmNvbmZpZyk7CkBAIC02NzksNyArNjc5LDcgQEAKIAogc3RhdGljIHZvaWQgaW50ZWxfcG11X3Jlc2V0KHZvaWQpCiB7Ci0Jc3RydWN0IGRlYnVnX3N0b3JlICpkcyA9IF9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cykuZHM7CisJc3RydWN0IGRlYnVnX3N0b3JlICpkcyA9IF9fdGhpc19jcHVfcmVhZChjcHVfaHdfZXZlbnRzLmRzKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBpZHg7CiAKQEAgLTgxNiw2ICs4MTYsMzIgQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCisJaWYgKGV2ZW50LT5hdHRyLnByZWNpc2VfaXAgJiYKKwkgICAgKGV2ZW50LT5ody5jb25maWcgJiBYODZfUkFXX0VWRU5UX01BU0spID09IDB4MDAzYykgeworCQkvKgorCQkgKiBVc2UgYW4gYWx0ZXJuYXRpdmUgZW5jb2RpbmcgZm9yIENQVV9DTEtfVU5IQUxURUQuVEhSRUFEX1AKKwkJICogKDB4MDAzYykgc28gdGhhdCB3ZSBjYW4gdXNlIGl0IHdpdGggUEVCUy4KKwkJICoKKwkJICogVGhlIHJlZ3VsYXIgQ1BVX0NMS19VTkhBTFRFRC5USFJFQURfUCBldmVudCAoMHgwMDNjKSBpc24ndAorCQkgKiBQRUJTIGNhcGFibGUuIEhvd2V2ZXIgd2UgY2FuIHVzZSBJTlNUX1JFVElSRUQuQU5ZX1AKKwkJICogKDB4MDBjMCksIHdoaWNoIGlzIGEgUEVCUyBjYXBhYmxlIGV2ZW50LCB0byBnZXQgdGhlIHNhbWUKKwkJICogY291bnQuCisJCSAqCisJCSAqIElOU1RfUkVUSVJFRC5BTllfUCBjb3VudHMgdGhlIG51bWJlciBvZiBjeWNsZXMgdGhhdCByZXRpcmVzCisJCSAqIENOVE1BU0sgaW5zdHJ1Y3Rpb25zLiBCeSBzZXR0aW5nIENOVE1BU0sgdG8gYSB2YWx1ZSAoMTYpCisJCSAqIGxhcmdlciB0aGFuIHRoZSBtYXhpbXVtIG51bWJlciBvZiBpbnN0cnVjdGlvbnMgdGhhdCBjYW4gYmUKKwkJICogcmV0aXJlZCBwZXIgY3ljbGUgKDQpIGFuZCB0aGVuIGludmVydGluZyB0aGUgY29uZGl0aW9uLCB3ZQorCQkgKiBjb3VudCBhbGwgY3ljbGVzIHRoYXQgcmV0aXJlIDE2IG9yIGxlc3MgaW5zdHJ1Y3Rpb25zLCB3aGljaAorCQkgKiBpcyBldmVyeSBjeWNsZS4KKwkJICoKKwkJICogVGhlcmVieSB3ZSBnYWluIGEgUEVCUyBjYXBhYmxlIGN5Y2xlIGNvdW50ZXIuCisJCSAqLworCQl1NjQgYWx0X2NvbmZpZyA9IDB4MTA4MDAwYzA7IC8qIElOU1RfUkVUSVJFRC5UT1RBTF9DWUNMRVMgKi8KKworCQlhbHRfY29uZmlnIHw9IChldmVudC0+aHcuY29uZmlnICYgflg4Nl9SQVdfRVZFTlRfTUFTSyk7CisJCWV2ZW50LT5ody5jb25maWcgPSBhbHRfY29uZmlnOworCX0KKwogCWlmIChldmVudC0+YXR0ci50eXBlICE9IFBFUkZfVFlQRV9SQVcpCiAJCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZjdHItd2F0Y2hkb2cuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZmN0ci13YXRjaGRvZy5jCmluZGV4IGQ5ZjRmZjguLmQ1YTIzNjYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZmN0ci13YXRjaGRvZy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZmN0ci13YXRjaGRvZy5jCkBAIC0xNiwzMiArMTYsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLSNpbmNsdWRlIDxsaW51eC9ubWkuaD4KKyNpbmNsdWRlIDxhc20vbm1pLmg+CiAjaW5jbHVkZSA8bGludXgva3Byb2Jlcy5oPgogCiAjaW5jbHVkZSA8YXNtL2FwaWMuaD4KICNpbmNsdWRlIDxhc20vcGVyZl9ldmVudC5oPgogCi1zdHJ1Y3Qgbm1pX3dhdGNoZG9nX2N0bGJsayB7Ci0JdW5zaWduZWQgaW50IGNjY3JfbXNyOwotCXVuc2lnbmVkIGludCBwZXJmY3RyX21zcjsgIC8qIHRoZSBNU1IgdG8gcmVzZXQgaW4gTk1JIGhhbmRsZXIgKi8KLQl1bnNpZ25lZCBpbnQgZXZudHNlbF9tc3I7ICAvKiB0aGUgTVNSIHRvIHNlbGVjdCB0aGUgZXZlbnRzIHRvIGhhbmRsZSAqLwotfTsKLQotLyogSW50ZXJmYWNlIGRlZmluaW5nIGEgQ1BVIHNwZWNpZmljIHBlcmZjdHIgd2F0Y2hkb2cgKi8KLXN0cnVjdCB3ZF9vcHMgewotCWludCAoKnJlc2VydmUpKHZvaWQpOwotCXZvaWQgKCp1bnJlc2VydmUpKHZvaWQpOwotCWludCAoKnNldHVwKSh1bnNpZ25lZCBubWlfaHopOwotCXZvaWQgKCpyZWFybSkoc3RydWN0IG5taV93YXRjaGRvZ19jdGxibGsgKndkLCB1bnNpZ25lZCBubWlfaHopOwotCXZvaWQgKCpzdG9wKSh2b2lkKTsKLQl1bnNpZ25lZCBwZXJmY3RyOwotCXVuc2lnbmVkIGV2bnRzZWw7Ci0JdTY0IGNoZWNrYml0OwotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCB3ZF9vcHMgKndkX29wczsKLQogLyoKICAqIHRoaXMgbnVtYmVyIGlzIGNhbGN1bGF0ZWQgZnJvbSBJbnRlbCdzIE1TUl9QNF9DUlVfRVNDUjUgcmVnaXN0ZXIgYW5kIGl0J3MKICAqIG9mZnNldCBmcm9tIE1TUl9QNF9CU1VfRVNDUjAuCkBAIC02MCw4ICs0MCw2IEBACiBzdGF0aWMgREVDTEFSRV9CSVRNQVAocGVyZmN0cl9ubWlfb3duZXIsIE5NSV9NQVhfQ09VTlRFUl9CSVRTKTsKIHN0YXRpYyBERUNMQVJFX0JJVE1BUChldm50c2VsX25taV9vd25lciwgTk1JX01BWF9DT1VOVEVSX0JJVFMpOwogCi1zdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IG5taV93YXRjaGRvZ19jdGxibGssIG5taV93YXRjaGRvZ19jdGxibGspOwotCiAvKiBjb252ZXJ0cyBhbiBtc3IgdG8gYW4gYXBwcm9wcmlhdGUgcmVzZXJ2YXRpb24gYml0ICovCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBubWlfcGVyZmN0cl9tc3JfdG9fYml0KHVuc2lnbmVkIGludCBtc3IpCiB7CkBAIC0xNzIsNjIzICsxNTAsMyBAQAogCWNsZWFyX2JpdChjb3VudGVyLCBldm50c2VsX25taV9vd25lcik7CiB9CiBFWFBPUlRfU1lNQk9MKHJlbGVhc2VfZXZudHNlbF9ubWkpOwotCi12b2lkIGRpc2FibGVfbGFwaWNfbm1pX3dhdGNoZG9nKHZvaWQpCi17Ci0JQlVHX09OKG5taV93YXRjaGRvZyAhPSBOTUlfTE9DQUxfQVBJQyk7Ci0KLQlpZiAoYXRvbWljX3JlYWQoJm5taV9hY3RpdmUpIDw9IDApCi0JCXJldHVybjsKLQotCW9uX2VhY2hfY3B1KHN0b3BfYXBpY19ubWlfd2F0Y2hkb2csIE5VTEwsIDEpOwotCi0JaWYgKHdkX29wcykKLQkJd2Rfb3BzLT51bnJlc2VydmUoKTsKLQotCUJVR19PTihhdG9taWNfcmVhZCgmbm1pX2FjdGl2ZSkgIT0gMCk7Ci19Ci0KLXZvaWQgZW5hYmxlX2xhcGljX25taV93YXRjaGRvZyh2b2lkKQotewotCUJVR19PTihubWlfd2F0Y2hkb2cgIT0gTk1JX0xPQ0FMX0FQSUMpOwotCi0JLyogYXJlIHdlIGFscmVhZHkgZW5hYmxlZCAqLwotCWlmIChhdG9taWNfcmVhZCgmbm1pX2FjdGl2ZSkgIT0gMCkKLQkJcmV0dXJuOwotCi0JLyogYXJlIHdlIGxhcGljIGF3YXJlICovCi0JaWYgKCF3ZF9vcHMpCi0JCXJldHVybjsKLQlpZiAoIXdkX29wcy0+cmVzZXJ2ZSgpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiTk1JIHdhdGNoZG9nOiBjYW5ub3QgcmVzZXJ2ZSBwZXJmY3Ryc1xuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlvbl9lYWNoX2NwdShzZXR1cF9hcGljX25taV93YXRjaGRvZywgTlVMTCwgMSk7Ci0JdG91Y2hfbm1pX3dhdGNoZG9nKCk7Ci19Ci0KLS8qCi0gKiBBY3RpdmF0ZSB0aGUgTk1JIHdhdGNoZG9nIHZpYSB0aGUgbG9jYWwgQVBJQy4KLSAqLwotCi1zdGF0aWMgdW5zaWduZWQgaW50IGFkanVzdF9mb3JfMzJiaXRfY3RyKHVuc2lnbmVkIGludCBoeikKLXsKLQl1NjQgY291bnRlcl92YWw7Ci0JdW5zaWduZWQgaW50IHJldHZhbCA9IGh6OwotCi0JLyoKLQkgKiBPbiBJbnRlbCBDUFVzIHdpdGggUDYvQVJDSF9QRVJGTU9OIG9ubHkgMzIgYml0cyBpbiB0aGUgY291bnRlcgotCSAqIGFyZSB3cml0YWJsZSwgd2l0aCBoaWdoZXIgYml0cyBzaWduIGV4dGVuZGluZyBmcm9tIGJpdCAzMS4KLQkgKiBTbywgd2UgY2FuIG9ubHkgcHJvZ3JhbSB0aGUgY291bnRlciB3aXRoIDMxIGJpdCB2YWx1ZXMgYW5kCi0JICogMzJuZCBiaXQgc2hvdWxkIGJlIDEsIGZvciAzMy4uIHRvIGJlIDEuCi0JICogRmluZCB0aGUgYXBwcm9wcmlhdGUgbm1pX2h6Ci0JICovCi0JY291bnRlcl92YWwgPSAodTY0KWNwdV9raHogKiAxMDAwOwotCWRvX2Rpdihjb3VudGVyX3ZhbCwgcmV0dmFsKTsKLQlpZiAoY291bnRlcl92YWwgPiAweDdmZmZmZmZmVUxMKSB7Ci0JCXU2NCBjb3VudCA9ICh1NjQpY3B1X2toeiAqIDEwMDA7Ci0JCWRvX2Rpdihjb3VudCwgMHg3ZmZmZmZmZlVMKTsKLQkJcmV0dmFsID0gY291bnQgKyAxOwotCX0KLQlyZXR1cm4gcmV0dmFsOwotfQotCi1zdGF0aWMgdm9pZCB3cml0ZV93YXRjaGRvZ19jb3VudGVyKHVuc2lnbmVkIGludCBwZXJmY3RyX21zciwKLQkJCQljb25zdCBjaGFyICpkZXNjciwgdW5zaWduZWQgbm1pX2h6KQotewotCXU2NCBjb3VudCA9ICh1NjQpY3B1X2toeiAqIDEwMDA7Ci0KLQlkb19kaXYoY291bnQsIG5taV9oeik7Ci0JaWYgKGRlc2NyKQotCQlwcl9kZWJ1Zygic2V0dGluZyAlcyB0byAtMHglMDhMeFxuIiwgZGVzY3IsIGNvdW50KTsKLQl3cm1zcmwocGVyZmN0cl9tc3IsIDAgLSBjb3VudCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdyaXRlX3dhdGNoZG9nX2NvdW50ZXIzMih1bnNpZ25lZCBpbnQgcGVyZmN0cl9tc3IsCi0JCQkJY29uc3QgY2hhciAqZGVzY3IsIHVuc2lnbmVkIG5taV9oeikKLXsKLQl1NjQgY291bnQgPSAodTY0KWNwdV9raHogKiAxMDAwOwotCi0JZG9fZGl2KGNvdW50LCBubWlfaHopOwotCWlmIChkZXNjcikKLQkJcHJfZGVidWcoInNldHRpbmcgJXMgdG8gLTB4JTA4THhcbiIsIGRlc2NyLCBjb3VudCk7Ci0Jd3Jtc3IocGVyZmN0cl9tc3IsICh1MzIpKC1jb3VudCksIDApOwotfQotCi0vKgotICogQU1EIEs3L0s4L0ZhbWlseTEwaC9GYW1pbHkxMWggc3VwcG9ydC4KLSAqIEFNRCBrZWVwcyB0aGlzIGludGVyZmFjZSBuaWNlbHkgc3RhYmxlIHNvIHRoZXJlIGlzIG5vdCBtdWNoIHZhcmlldHkKLSAqLwotI2RlZmluZSBLN19FVk5UU0VMX0VOQUJMRQkoMSA8PCAyMikKLSNkZWZpbmUgSzdfRVZOVFNFTF9JTlQJCSgxIDw8IDIwKQotI2RlZmluZSBLN19FVk5UU0VMX09TCQkoMSA8PCAxNykKLSNkZWZpbmUgSzdfRVZOVFNFTF9VU1IJCSgxIDw8IDE2KQotI2RlZmluZSBLN19FVkVOVF9DWUNMRVNfUFJPQ0VTU09SX0lTX1JVTk5JTkcJMHg3NgotI2RlZmluZSBLN19OTUlfRVZFTlQJCUs3X0VWRU5UX0NZQ0xFU19QUk9DRVNTT1JfSVNfUlVOTklORwotCi1zdGF0aWMgaW50IHNldHVwX2s3X3dhdGNoZG9nKHVuc2lnbmVkIG5taV9oeikKLXsKLQl1bnNpZ25lZCBpbnQgcGVyZmN0cl9tc3IsIGV2bnRzZWxfbXNyOwotCXVuc2lnbmVkIGludCBldm50c2VsOwotCXN0cnVjdCBubWlfd2F0Y2hkb2dfY3RsYmxrICp3ZCA9ICZfX2dldF9jcHVfdmFyKG5taV93YXRjaGRvZ19jdGxibGspOwotCi0JcGVyZmN0cl9tc3IgPSB3ZF9vcHMtPnBlcmZjdHI7Ci0JZXZudHNlbF9tc3IgPSB3ZF9vcHMtPmV2bnRzZWw7Ci0KLQl3cm1zcmwocGVyZmN0cl9tc3IsIDBVTCk7Ci0KLQlldm50c2VsID0gSzdfRVZOVFNFTF9JTlQKLQkJfCBLN19FVk5UU0VMX09TCi0JCXwgSzdfRVZOVFNFTF9VU1IKLQkJfCBLN19OTUlfRVZFTlQ7Ci0KLQkvKiBzZXR1cCB0aGUgdGltZXIgKi8KLQl3cm1zcihldm50c2VsX21zciwgZXZudHNlbCwgMCk7Ci0Jd3JpdGVfd2F0Y2hkb2dfY291bnRlcihwZXJmY3RyX21zciwgIks3X1BFUkZDVFIwIiwgbm1pX2h6KTsKLQotCS8qIGluaXRpYWxpemUgdGhlIHdkIHN0cnVjdCBiZWZvcmUgZW5hYmxpbmcgKi8KLQl3ZC0+cGVyZmN0cl9tc3IgPSBwZXJmY3RyX21zcjsKLQl3ZC0+ZXZudHNlbF9tc3IgPSBldm50c2VsX21zcjsKLQl3ZC0+Y2Njcl9tc3IgPSAwOyAgLyogdW51c2VkICovCi0KLQkvKiBvaywgZXZlcnl0aGluZyBpcyBpbml0aWFsaXplZCwgYW5ub3VuY2UgdGhhdCB3ZSdyZSBzZXQgKi8KLQljcHVfbm1pX3NldF93ZF9lbmFibGVkKCk7Ci0KLQlhcGljX3dyaXRlKEFQSUNfTFZUUEMsIEFQSUNfRE1fTk1JKTsKLQlldm50c2VsIHw9IEs3X0VWTlRTRUxfRU5BQkxFOwotCXdybXNyKGV2bnRzZWxfbXNyLCBldm50c2VsLCAwKTsKLQotCXJldHVybiAxOwotfQotCi1zdGF0aWMgdm9pZCBzaW5nbGVfbXNyX3N0b3Bfd2F0Y2hkb2codm9pZCkKLXsKLQlzdHJ1Y3Qgbm1pX3dhdGNoZG9nX2N0bGJsayAqd2QgPSAmX19nZXRfY3B1X3ZhcihubWlfd2F0Y2hkb2dfY3RsYmxrKTsKLQotCXdybXNyKHdkLT5ldm50c2VsX21zciwgMCwgMCk7Ci19Ci0KLXN0YXRpYyBpbnQgc2luZ2xlX21zcl9yZXNlcnZlKHZvaWQpCi17Ci0JaWYgKCFyZXNlcnZlX3BlcmZjdHJfbm1pKHdkX29wcy0+cGVyZmN0cikpCi0JCXJldHVybiAwOwotCi0JaWYgKCFyZXNlcnZlX2V2bnRzZWxfbm1pKHdkX29wcy0+ZXZudHNlbCkpIHsKLQkJcmVsZWFzZV9wZXJmY3RyX25taSh3ZF9vcHMtPnBlcmZjdHIpOwotCQlyZXR1cm4gMDsKLQl9Ci0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyB2b2lkIHNpbmdsZV9tc3JfdW5yZXNlcnZlKHZvaWQpCi17Ci0JcmVsZWFzZV9ldm50c2VsX25taSh3ZF9vcHMtPmV2bnRzZWwpOwotCXJlbGVhc2VfcGVyZmN0cl9ubWkod2Rfb3BzLT5wZXJmY3RyKTsKLX0KLQotc3RhdGljIHZvaWQgX19rcHJvYmVzCi1zaW5nbGVfbXNyX3JlYXJtKHN0cnVjdCBubWlfd2F0Y2hkb2dfY3RsYmxrICp3ZCwgdW5zaWduZWQgbm1pX2h6KQotewotCS8qIHN0YXJ0IHRoZSBjeWNsZSBvdmVyIGFnYWluICovCi0Jd3JpdGVfd2F0Y2hkb2dfY291bnRlcih3ZC0+cGVyZmN0cl9tc3IsIE5VTEwsIG5taV9oeik7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Rfb3BzIGs3X3dkX29wcyA9IHsKLQkucmVzZXJ2ZQk9IHNpbmdsZV9tc3JfcmVzZXJ2ZSwKLQkudW5yZXNlcnZlCT0gc2luZ2xlX21zcl91bnJlc2VydmUsCi0JLnNldHVwCQk9IHNldHVwX2s3X3dhdGNoZG9nLAotCS5yZWFybQkJPSBzaW5nbGVfbXNyX3JlYXJtLAotCS5zdG9wCQk9IHNpbmdsZV9tc3Jfc3RvcF93YXRjaGRvZywKLQkucGVyZmN0cgk9IE1TUl9LN19QRVJGQ1RSMCwKLQkuZXZudHNlbAk9IE1TUl9LN19FVk5UU0VMMCwKLQkuY2hlY2tiaXQJPSAxVUxMIDw8IDQ3LAotfTsKLQotLyoKLSAqIEludGVsIE1vZGVsIDYgKFBQcm8rLFAyLFAzLFAtTSxDb3JlMSkKLSAqLwotI2RlZmluZSBQNl9FVk5UU0VMMF9FTkFCTEUJKDEgPDwgMjIpCi0jZGVmaW5lIFA2X0VWTlRTRUxfSU5UCQkoMSA8PCAyMCkKLSNkZWZpbmUgUDZfRVZOVFNFTF9PUwkJKDEgPDwgMTcpCi0jZGVmaW5lIFA2X0VWTlRTRUxfVVNSCQkoMSA8PCAxNikKLSNkZWZpbmUgUDZfRVZFTlRfQ1BVX0NMT0NLU19OT1RfSEFMVEVECTB4NzkKLSNkZWZpbmUgUDZfTk1JX0VWRU5UCQlQNl9FVkVOVF9DUFVfQ0xPQ0tTX05PVF9IQUxURUQKLQotc3RhdGljIGludCBzZXR1cF9wNl93YXRjaGRvZyh1bnNpZ25lZCBubWlfaHopCi17Ci0JdW5zaWduZWQgaW50IHBlcmZjdHJfbXNyLCBldm50c2VsX21zcjsKLQl1bnNpZ25lZCBpbnQgZXZudHNlbDsKLQlzdHJ1Y3Qgbm1pX3dhdGNoZG9nX2N0bGJsayAqd2QgPSAmX19nZXRfY3B1X3ZhcihubWlfd2F0Y2hkb2dfY3RsYmxrKTsKLQotCXBlcmZjdHJfbXNyID0gd2Rfb3BzLT5wZXJmY3RyOwotCWV2bnRzZWxfbXNyID0gd2Rfb3BzLT5ldm50c2VsOwotCi0JLyogS1ZNIGRvZXNuJ3QgaW1wbGVtZW50IHRoaXMgTVNSICovCi0JaWYgKHdybXNyX3NhZmUocGVyZmN0cl9tc3IsIDAsIDApIDwgMCkKLQkJcmV0dXJuIDA7Ci0KLQlldm50c2VsID0gUDZfRVZOVFNFTF9JTlQKLQkJfCBQNl9FVk5UU0VMX09TCi0JCXwgUDZfRVZOVFNFTF9VU1IKLQkJfCBQNl9OTUlfRVZFTlQ7Ci0KLQkvKiBzZXR1cCB0aGUgdGltZXIgKi8KLQl3cm1zcihldm50c2VsX21zciwgZXZudHNlbCwgMCk7Ci0Jbm1pX2h6ID0gYWRqdXN0X2Zvcl8zMmJpdF9jdHIobm1pX2h6KTsKLQl3cml0ZV93YXRjaGRvZ19jb3VudGVyMzIocGVyZmN0cl9tc3IsICJQNl9QRVJGQ1RSMCIsIG5taV9oeik7Ci0KLQkvKiBpbml0aWFsaXplIHRoZSB3ZCBzdHJ1Y3QgYmVmb3JlIGVuYWJsaW5nICovCi0Jd2QtPnBlcmZjdHJfbXNyID0gcGVyZmN0cl9tc3I7Ci0Jd2QtPmV2bnRzZWxfbXNyID0gZXZudHNlbF9tc3I7Ci0Jd2QtPmNjY3JfbXNyID0gMDsgIC8qIHVudXNlZCAqLwotCi0JLyogb2ssIGV2ZXJ5dGhpbmcgaXMgaW5pdGlhbGl6ZWQsIGFubm91bmNlIHRoYXQgd2UncmUgc2V0ICovCi0JY3B1X25taV9zZXRfd2RfZW5hYmxlZCgpOwotCi0JYXBpY193cml0ZShBUElDX0xWVFBDLCBBUElDX0RNX05NSSk7Ci0JZXZudHNlbCB8PSBQNl9FVk5UU0VMMF9FTkFCTEU7Ci0Jd3Jtc3IoZXZudHNlbF9tc3IsIGV2bnRzZWwsIDApOwotCi0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fa3Byb2JlcyBwNl9yZWFybShzdHJ1Y3Qgbm1pX3dhdGNoZG9nX2N0bGJsayAqd2QsIHVuc2lnbmVkIG5taV9oeikKLXsKLQkvKgotCSAqIFA2IGJhc2VkIFBlbnRpdW0gTSBuZWVkIHRvIHJlLXVubWFzawotCSAqIHRoZSBhcGljIHZlY3RvciBidXQgaXQgZG9lc24ndCBodXJ0Ci0JICogb3RoZXIgUDYgdmFyaWFudC4KLQkgKiBBcmNoUGVyZm9tL0NvcmUgRHVvIGFsc28gbmVlZHMgdGhpcwotCSAqLwotCWFwaWNfd3JpdGUoQVBJQ19MVlRQQywgQVBJQ19ETV9OTUkpOwotCi0JLyogUDYvQVJDSF9QRVJGTU9OIGhhcyAzMiBiaXQgY291bnRlciB3cml0ZSAqLwotCXdyaXRlX3dhdGNoZG9nX2NvdW50ZXIzMih3ZC0+cGVyZmN0cl9tc3IsIE5VTEwsIG5taV9oeik7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Rfb3BzIHA2X3dkX29wcyA9IHsKLQkucmVzZXJ2ZQk9IHNpbmdsZV9tc3JfcmVzZXJ2ZSwKLQkudW5yZXNlcnZlCT0gc2luZ2xlX21zcl91bnJlc2VydmUsCi0JLnNldHVwCQk9IHNldHVwX3A2X3dhdGNoZG9nLAotCS5yZWFybQkJPSBwNl9yZWFybSwKLQkuc3RvcAkJPSBzaW5nbGVfbXNyX3N0b3Bfd2F0Y2hkb2csCi0JLnBlcmZjdHIJPSBNU1JfUDZfUEVSRkNUUjAsCi0JLmV2bnRzZWwJPSBNU1JfUDZfRVZOVFNFTDAsCi0JLmNoZWNrYml0CT0gMVVMTCA8PCAzOSwKLX07Ci0KLS8qCi0gKiBJbnRlbCBQNCBwZXJmb3JtYW5jZSBjb3VudGVycy4KLSAqIEJ5IGZhciB0aGUgbW9zdCBjb21wbGljYXRlZCBvZiBhbGwuCi0gKi8KLSNkZWZpbmUgTVNSX1A0X01JU0NfRU5BQkxFX1BFUkZfQVZBSUwJKDEgPDwgNykKLSNkZWZpbmUgUDRfRVNDUl9FVkVOVF9TRUxFQ1QoTikJKChOKSA8PCAyNSkKLSNkZWZpbmUgUDRfRVNDUl9PUwkJKDEgPDwgMykKLSNkZWZpbmUgUDRfRVNDUl9VU1IJCSgxIDw8IDIpCi0jZGVmaW5lIFA0X0NDQ1JfT1ZGX1BNSTAJKDEgPDwgMjYpCi0jZGVmaW5lIFA0X0NDQ1JfT1ZGX1BNSTEJKDEgPDwgMjcpCi0jZGVmaW5lIFA0X0NDQ1JfVEhSRVNIT0xEKE4pCSgoTikgPDwgMjApCi0jZGVmaW5lIFA0X0NDQ1JfQ09NUExFTUVOVAkoMSA8PCAxOSkKLSNkZWZpbmUgUDRfQ0NDUl9DT01QQVJFCQkoMSA8PCAxOCkKLSNkZWZpbmUgUDRfQ0NDUl9SRVFVSVJFRAkoMyA8PCAxNikKLSNkZWZpbmUgUDRfQ0NDUl9FU0NSX1NFTEVDVChOKQkoKE4pIDw8IDEzKQotI2RlZmluZSBQNF9DQ0NSX0VOQUJMRQkJKDEgPDwgMTIpCi0jZGVmaW5lIFA0X0NDQ1JfT1ZGIAkJKDEgPDwgMzEpCi0KLSNkZWZpbmUgUDRfQ09OVFJPTFMgMTgKLXN0YXRpYyB1bnNpZ25lZCBpbnQgcDRfY29udHJvbHNbMThdID0gewotCU1TUl9QNF9CUFVfQ0NDUjAsCi0JTVNSX1A0X0JQVV9DQ0NSMSwKLQlNU1JfUDRfQlBVX0NDQ1IyLAotCU1TUl9QNF9CUFVfQ0NDUjMsCi0JTVNSX1A0X01TX0NDQ1IwLAotCU1TUl9QNF9NU19DQ0NSMSwKLQlNU1JfUDRfTVNfQ0NDUjIsCi0JTVNSX1A0X01TX0NDQ1IzLAotCU1TUl9QNF9GTEFNRV9DQ0NSMCwKLQlNU1JfUDRfRkxBTUVfQ0NDUjEsCi0JTVNSX1A0X0ZMQU1FX0NDQ1IyLAotCU1TUl9QNF9GTEFNRV9DQ0NSMywKLQlNU1JfUDRfSVFfQ0NDUjAsCi0JTVNSX1A0X0lRX0NDQ1IxLAotCU1TUl9QNF9JUV9DQ0NSMiwKLQlNU1JfUDRfSVFfQ0NDUjMsCi0JTVNSX1A0X0lRX0NDQ1I0LAotCU1TUl9QNF9JUV9DQ0NSNSwKLX07Ci0vKgotICogU2V0IHVwIElRX0NPVU5URVIwIHRvIGJlaGF2ZSBsaWtlIGEgY2xvY2ssIGJ5IGhhdmluZyBJUV9DQ0NSMCBmaWx0ZXIKLSAqIENSVV9FU0NSMCAod2l0aCBhbnkgbm9uLW51bGwgZXZlbnQgc2VsZWN0b3IpIHRocm91Z2ggYSBjb21wbGVtZW50ZWQKLSAqIG1heCB0aHJlc2hvbGQuIFtJQTMyLVZvbDMsIFNlY3Rpb24gMTQuOS45XQotICovCi1zdGF0aWMgaW50IHNldHVwX3A0X3dhdGNoZG9nKHVuc2lnbmVkIG5taV9oeikKLXsKLQl1bnNpZ25lZCBpbnQgcGVyZmN0cl9tc3IsIGV2bnRzZWxfbXNyLCBjY2NyX21zcjsKLQl1bnNpZ25lZCBpbnQgZXZudHNlbCwgY2Njcl92YWw7Ci0JdW5zaWduZWQgaW50IG1pc2NfZW5hYmxlLCBkdW1teTsKLQl1bnNpZ25lZCBpbnQgaHRfbnVtOwotCXN0cnVjdCBubWlfd2F0Y2hkb2dfY3RsYmxrICp3ZCA9ICZfX2dldF9jcHVfdmFyKG5taV93YXRjaGRvZ19jdGxibGspOwotCi0JcmRtc3IoTVNSX0lBMzJfTUlTQ19FTkFCTEUsIG1pc2NfZW5hYmxlLCBkdW1teSk7Ci0JaWYgKCEobWlzY19lbmFibGUgJiBNU1JfUDRfTUlTQ19FTkFCTEVfUEVSRl9BVkFJTCkpCi0JCXJldHVybiAwOwotCi0jaWZkZWYgQ09ORklHX1NNUAotCS8qIGRldGVjdCB3aGljaCBoeXBlcnRocmVhZCB3ZSBhcmUgb24gKi8KLQlpZiAoc21wX251bV9zaWJsaW5ncyA9PSAyKSB7Ci0JCXVuc2lnbmVkIGludCBlYngsIGFwaWNpZDsKLQotCQllYnggPSBjcHVpZF9lYngoMSk7Ci0JCWFwaWNpZCA9IChlYnggPj4gMjQpICYgMHhmZjsKLQkJaHRfbnVtID0gYXBpY2lkICYgMTsKLQl9IGVsc2UKLSNlbmRpZgotCQlodF9udW0gPSAwOwotCi0JLyoKLQkgKiBwZXJmb3JtYW5jZSBjb3VudGVycyBhcmUgc2hhcmVkIHJlc291cmNlcwotCSAqIGFzc2lnbiBlYWNoIGh5cGVydGhyZWFkIGl0cyBvd24gc2V0Ci0JICogKHJlLXVzZSB0aGUgRVNDUjAgcmVnaXN0ZXIsIHNlZW1zIHNhZmUKLQkgKiBhbmQga2VlcHMgdGhlIGNjY3JfdmFsIHRoZSBzYW1lKQotCSAqLwotCWlmICghaHRfbnVtKSB7Ci0JCS8qIGxvZ2ljYWwgY3B1IDAgKi8KLQkJcGVyZmN0cl9tc3IgPSBNU1JfUDRfSVFfUEVSRkNUUjA7Ci0JCWV2bnRzZWxfbXNyID0gTVNSX1A0X0NSVV9FU0NSMDsKLQkJY2Njcl9tc3IgPSBNU1JfUDRfSVFfQ0NDUjA7Ci0JCWNjY3JfdmFsID0gUDRfQ0NDUl9PVkZfUE1JMCB8IFA0X0NDQ1JfRVNDUl9TRUxFQ1QoNCk7Ci0KLQkJLyoKLQkJICogSWYgd2UncmUgb24gdGhlIGtkdW1wIGtlcm5lbCBvciBvdGhlciBzaXR1YXRpb24sIHdlIG1heQotCQkgKiBzdGlsbCBoYXZlIG90aGVyIHBlcmZvcm1hbmNlIGNvdW50ZXIgcmVnaXN0ZXJzIHNldCB0bwotCQkgKiBpbnRlcnJ1cHQgYW5kIHRoZXknbGwga2VlcCBpbnRlcnJ1cHRpbmcgZm9yZXZlciBiZWNhdXNlCi0JCSAqIG9mIHRoZSBQNF9DQ0NSX09WRiBxdWlyay4gU28gd2UgbmVlZCB0byBBQ0sgYWxsIHRoZQotCQkgKiBwZW5kaW5nIGludGVycnVwdHMgYW5kIGRpc2FibGUgYWxsIHRoZSByZWdpc3RlcnMgaGVyZSwKLQkJICogYmVmb3JlIHJlZW5hYmxpbmcgdGhlIE5NSSBkZWxpdmVyeS4gUmVmZXIgdG8gcDRfcmVhcm0oKQotCQkgKiBhYm91dCB0aGUgUDRfQ0NDUl9PVkYgcXVpcmsuCi0JCSAqLwotCQlpZiAocmVzZXRfZGV2aWNlcykgewotCQkJdW5zaWduZWQgaW50IGxvdywgaGlnaDsKLQkJCWludCBpOwotCi0JCQlmb3IgKGkgPSAwOyBpIDwgUDRfQ09OVFJPTFM7IGkrKykgewotCQkJCXJkbXNyKHA0X2NvbnRyb2xzW2ldLCBsb3csIGhpZ2gpOwotCQkJCWxvdyAmPSB+KFA0X0NDQ1JfRU5BQkxFIHwgUDRfQ0NDUl9PVkYpOwotCQkJCXdybXNyKHA0X2NvbnRyb2xzW2ldLCBsb3csIGhpZ2gpOwotCQkJfQotCQl9Ci0JfSBlbHNlIHsKLQkJLyogbG9naWNhbCBjcHUgMSAqLwotCQlwZXJmY3RyX21zciA9IE1TUl9QNF9JUV9QRVJGQ1RSMTsKLQkJZXZudHNlbF9tc3IgPSBNU1JfUDRfQ1JVX0VTQ1IwOwotCQljY2NyX21zciA9IE1TUl9QNF9JUV9DQ0NSMTsKLQotCQkvKiBQZW50aXVtIDQgRCBwcm9jZXNzb3JzIGRvbid0IHN1cHBvcnQgUDRfQ0NDUl9PVkZfUE1JMSAqLwotCQlpZiAoYm9vdF9jcHVfZGF0YS54ODZfbW9kZWwgPT0gNCAmJiBib290X2NwdV9kYXRhLng4Nl9tYXNrID09IDQpCi0JCQljY2NyX3ZhbCA9IFA0X0NDQ1JfT1ZGX1BNSTA7Ci0JCWVsc2UKLQkJCWNjY3JfdmFsID0gUDRfQ0NDUl9PVkZfUE1JMTsKLQkJY2Njcl92YWwgfD0gUDRfQ0NDUl9FU0NSX1NFTEVDVCg0KTsKLQl9Ci0KLQlldm50c2VsID0gUDRfRVNDUl9FVkVOVF9TRUxFQ1QoMHgzRikKLQkJfCBQNF9FU0NSX09TCi0JCXwgUDRfRVNDUl9VU1I7Ci0KLQljY2NyX3ZhbCB8PSBQNF9DQ0NSX1RIUkVTSE9MRCgxNSkKLQkJIHwgUDRfQ0NDUl9DT01QTEVNRU5UCi0JCSB8IFA0X0NDQ1JfQ09NUEFSRQotCQkgfCBQNF9DQ0NSX1JFUVVJUkVEOwotCi0Jd3Jtc3IoZXZudHNlbF9tc3IsIGV2bnRzZWwsIDApOwotCXdybXNyKGNjY3JfbXNyLCBjY2NyX3ZhbCwgMCk7Ci0Jd3JpdGVfd2F0Y2hkb2dfY291bnRlcihwZXJmY3RyX21zciwgIlA0X0lRX0NPVU5URVIwIiwgbm1pX2h6KTsKLQotCXdkLT5wZXJmY3RyX21zciA9IHBlcmZjdHJfbXNyOwotCXdkLT5ldm50c2VsX21zciA9IGV2bnRzZWxfbXNyOwotCXdkLT5jY2NyX21zciA9IGNjY3JfbXNyOwotCi0JLyogb2ssIGV2ZXJ5dGhpbmcgaXMgaW5pdGlhbGl6ZWQsIGFubm91bmNlIHRoYXQgd2UncmUgc2V0ICovCi0JY3B1X25taV9zZXRfd2RfZW5hYmxlZCgpOwotCi0JYXBpY193cml0ZShBUElDX0xWVFBDLCBBUElDX0RNX05NSSk7Ci0JY2Njcl92YWwgfD0gUDRfQ0NDUl9FTkFCTEU7Ci0Jd3Jtc3IoY2Njcl9tc3IsIGNjY3JfdmFsLCAwKTsKLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIHZvaWQgc3RvcF9wNF93YXRjaGRvZyh2b2lkKQotewotCXN0cnVjdCBubWlfd2F0Y2hkb2dfY3RsYmxrICp3ZCA9ICZfX2dldF9jcHVfdmFyKG5taV93YXRjaGRvZ19jdGxibGspOwotCXdybXNyKHdkLT5jY2NyX21zciwgMCwgMCk7Ci0Jd3Jtc3Iod2QtPmV2bnRzZWxfbXNyLCAwLCAwKTsKLX0KLQotc3RhdGljIGludCBwNF9yZXNlcnZlKHZvaWQpCi17Ci0JaWYgKCFyZXNlcnZlX3BlcmZjdHJfbm1pKE1TUl9QNF9JUV9QRVJGQ1RSMCkpCi0JCXJldHVybiAwOwotI2lmZGVmIENPTkZJR19TTVAKLQlpZiAoc21wX251bV9zaWJsaW5ncyA+IDEgJiYgIXJlc2VydmVfcGVyZmN0cl9ubWkoTVNSX1A0X0lRX1BFUkZDVFIxKSkKLQkJZ290byBmYWlsMTsKLSNlbmRpZgotCWlmICghcmVzZXJ2ZV9ldm50c2VsX25taShNU1JfUDRfQ1JVX0VTQ1IwKSkKLQkJZ290byBmYWlsMjsKLQkvKiBSRUQtUEVOIHdoeSBpcyBFU0NSMSBub3QgcmVzZXJ2ZWQgaGVyZT8gKi8KLQlyZXR1cm4gMTsKLSBmYWlsMjoKLSNpZmRlZiBDT05GSUdfU01QCi0JaWYgKHNtcF9udW1fc2libGluZ3MgPiAxKQotCQlyZWxlYXNlX3BlcmZjdHJfbm1pKE1TUl9QNF9JUV9QRVJGQ1RSMSk7Ci0gZmFpbDE6Ci0jZW5kaWYKLQlyZWxlYXNlX3BlcmZjdHJfbm1pKE1TUl9QNF9JUV9QRVJGQ1RSMCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHA0X3VucmVzZXJ2ZSh2b2lkKQotewotI2lmZGVmIENPTkZJR19TTVAKLQlpZiAoc21wX251bV9zaWJsaW5ncyA+IDEpCi0JCXJlbGVhc2VfcGVyZmN0cl9ubWkoTVNSX1A0X0lRX1BFUkZDVFIxKTsKLSNlbmRpZgotCXJlbGVhc2VfZXZudHNlbF9ubWkoTVNSX1A0X0NSVV9FU0NSMCk7Ci0JcmVsZWFzZV9wZXJmY3RyX25taShNU1JfUDRfSVFfUEVSRkNUUjApOwotfQotCi1zdGF0aWMgdm9pZCBfX2twcm9iZXMgcDRfcmVhcm0oc3RydWN0IG5taV93YXRjaGRvZ19jdGxibGsgKndkLCB1bnNpZ25lZCBubWlfaHopCi17Ci0JdW5zaWduZWQgZHVtbXk7Ci0JLyoKLQkgKiBQNCBxdWlya3M6Ci0JICogLSBBbiBvdmVyZmxvd24gcGVyZmN0ciB3aWxsIGFzc2VydCBpdHMgaW50ZXJydXB0Ci0JICogICB1bnRpbCB0aGUgT1ZGIGZsYWcgaW4gaXRzIENDQ1IgaXMgY2xlYXJlZC4KLQkgKiAtIExWVFBDIGlzIG1hc2tlZCBvbiBpbnRlcnJ1cHQgYW5kIG11c3QgYmUKLQkgKiAgIHVubWFza2VkIGJ5IHRoZSBMVlRQQyBoYW5kbGVyLgotCSAqLwotCXJkbXNybCh3ZC0+Y2Njcl9tc3IsIGR1bW15KTsKLQlkdW1teSAmPSB+UDRfQ0NDUl9PVkY7Ci0Jd3Jtc3JsKHdkLT5jY2NyX21zciwgZHVtbXkpOwotCWFwaWNfd3JpdGUoQVBJQ19MVlRQQywgQVBJQ19ETV9OTUkpOwotCS8qIHN0YXJ0IHRoZSBjeWNsZSBvdmVyIGFnYWluICovCi0Jd3JpdGVfd2F0Y2hkb2dfY291bnRlcih3ZC0+cGVyZmN0cl9tc3IsIE5VTEwsIG5taV9oeik7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Rfb3BzIHA0X3dkX29wcyA9IHsKLQkucmVzZXJ2ZQk9IHA0X3Jlc2VydmUsCi0JLnVucmVzZXJ2ZQk9IHA0X3VucmVzZXJ2ZSwKLQkuc2V0dXAJCT0gc2V0dXBfcDRfd2F0Y2hkb2csCi0JLnJlYXJtCQk9IHA0X3JlYXJtLAotCS5zdG9wCQk9IHN0b3BfcDRfd2F0Y2hkb2csCi0JLyogUkVELVBFTiB0aGlzIGlzIHdyb25nIGZvciB0aGUgb3RoZXIgc2libGluZyAqLwotCS5wZXJmY3RyCT0gTVNSX1A0X0JQVV9QRVJGQ1RSMCwKLQkuZXZudHNlbAk9IE1TUl9QNF9CU1VfRVNDUjAsCi0JLmNoZWNrYml0CT0gMVVMTCA8PCAzOSwKLX07Ci0KLS8qCi0gKiBXYXRjaGRvZyB1c2luZyB0aGUgSW50ZWwgYXJjaGl0ZWN0ZWQgUGVyZk1vbi4KLSAqIFVzZWQgZm9yIENvcmUyIGFuZCBob3BlZnVsbHkgYWxsIGZ1dHVyZSBJbnRlbCBDUFVzLgotICovCi0jZGVmaW5lIEFSQ0hfUEVSRk1PTl9OTUlfRVZFTlRfU0VMCUFSQ0hfUEVSRk1PTl9VTkhBTFRFRF9DT1JFX0NZQ0xFU19TRUwKLSNkZWZpbmUgQVJDSF9QRVJGTU9OX05NSV9FVkVOVF9VTUFTSwlBUkNIX1BFUkZNT05fVU5IQUxURURfQ09SRV9DWUNMRVNfVU1BU0sKLQotc3RhdGljIHN0cnVjdCB3ZF9vcHMgaW50ZWxfYXJjaF93ZF9vcHM7Ci0KLXN0YXRpYyBpbnQgc2V0dXBfaW50ZWxfYXJjaF93YXRjaGRvZyh1bnNpZ25lZCBubWlfaHopCi17Ci0JdW5zaWduZWQgaW50IGVieDsKLQl1bmlvbiBjcHVpZDEwX2VheCBlYXg7Ci0JdW5zaWduZWQgaW50IHVudXNlZDsKLQl1bnNpZ25lZCBpbnQgcGVyZmN0cl9tc3IsIGV2bnRzZWxfbXNyOwotCXVuc2lnbmVkIGludCBldm50c2VsOwotCXN0cnVjdCBubWlfd2F0Y2hkb2dfY3RsYmxrICp3ZCA9ICZfX2dldF9jcHVfdmFyKG5taV93YXRjaGRvZ19jdGxibGspOwotCi0JLyoKLQkgKiBDaGVjayB3aGV0aGVyIHRoZSBBcmNoaXRlY3R1cmFsIFBlcmZNb24gc3VwcG9ydHMKLQkgKiBVbmhhbHRlZCBDb3JlIEN5Y2xlcyBFdmVudCBvciBub3QuCi0JICogTk9URTogQ29ycmVzcG9uZGluZyBiaXQgPSAwIGluIGVieCBpbmRpY2F0ZXMgZXZlbnQgcHJlc2VudC4KLQkgKi8KLQljcHVpZCgxMCwgJihlYXguZnVsbCksICZlYngsICZ1bnVzZWQsICZ1bnVzZWQpOwotCWlmICgoZWF4LnNwbGl0Lm1hc2tfbGVuZ3RoIDwKLQkJCShBUkNIX1BFUkZNT05fVU5IQUxURURfQ09SRV9DWUNMRVNfSU5ERVgrMSkpIHx8Ci0JICAgIChlYnggJiBBUkNIX1BFUkZNT05fVU5IQUxURURfQ09SRV9DWUNMRVNfUFJFU0VOVCkpCi0JCXJldHVybiAwOwotCi0JcGVyZmN0cl9tc3IgPSB3ZF9vcHMtPnBlcmZjdHI7Ci0JZXZudHNlbF9tc3IgPSB3ZF9vcHMtPmV2bnRzZWw7Ci0KLQl3cm1zcmwocGVyZmN0cl9tc3IsIDBVTCk7Ci0KLQlldm50c2VsID0gQVJDSF9QRVJGTU9OX0VWRU5UU0VMX0lOVAotCQl8IEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9PUwotCQl8IEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9VU1IKLQkJfCBBUkNIX1BFUkZNT05fTk1JX0VWRU5UX1NFTAotCQl8IEFSQ0hfUEVSRk1PTl9OTUlfRVZFTlRfVU1BU0s7Ci0KLQkvKiBzZXR1cCB0aGUgdGltZXIgKi8KLQl3cm1zcihldm50c2VsX21zciwgZXZudHNlbCwgMCk7Ci0Jbm1pX2h6ID0gYWRqdXN0X2Zvcl8zMmJpdF9jdHIobm1pX2h6KTsKLQl3cml0ZV93YXRjaGRvZ19jb3VudGVyMzIocGVyZmN0cl9tc3IsICJJTlRFTF9BUkNIX1BFUkZDVFIwIiwgbm1pX2h6KTsKLQotCXdkLT5wZXJmY3RyX21zciA9IHBlcmZjdHJfbXNyOwotCXdkLT5ldm50c2VsX21zciA9IGV2bnRzZWxfbXNyOwotCXdkLT5jY2NyX21zciA9IDA7ICAvKiB1bnVzZWQgKi8KLQotCS8qIG9rLCBldmVyeXRoaW5nIGlzIGluaXRpYWxpemVkLCBhbm5vdW5jZSB0aGF0IHdlJ3JlIHNldCAqLwotCWNwdV9ubWlfc2V0X3dkX2VuYWJsZWQoKTsKLQotCWFwaWNfd3JpdGUoQVBJQ19MVlRQQywgQVBJQ19ETV9OTUkpOwotCWV2bnRzZWwgfD0gQVJDSF9QRVJGTU9OX0VWRU5UU0VMX0VOQUJMRTsKLQl3cm1zcihldm50c2VsX21zciwgZXZudHNlbCwgMCk7Ci0JaW50ZWxfYXJjaF93ZF9vcHMuY2hlY2tiaXQgPSAxVUxMIDw8IChlYXguc3BsaXQuYml0X3dpZHRoIC0gMSk7Ci0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgd2Rfb3BzIGludGVsX2FyY2hfd2Rfb3BzIF9fcmVhZF9tb3N0bHkgPSB7Ci0JLnJlc2VydmUJPSBzaW5nbGVfbXNyX3Jlc2VydmUsCi0JLnVucmVzZXJ2ZQk9IHNpbmdsZV9tc3JfdW5yZXNlcnZlLAotCS5zZXR1cAkJPSBzZXR1cF9pbnRlbF9hcmNoX3dhdGNoZG9nLAotCS5yZWFybQkJPSBwNl9yZWFybSwKLQkuc3RvcAkJPSBzaW5nbGVfbXNyX3N0b3Bfd2F0Y2hkb2csCi0JLnBlcmZjdHIJPSBNU1JfQVJDSF9QRVJGTU9OX1BFUkZDVFIxLAotCS5ldm50c2VsCT0gTVNSX0FSQ0hfUEVSRk1PTl9FVkVOVFNFTDEsCi19OwotCi1zdGF0aWMgdm9pZCBwcm9iZV9ubWlfd2F0Y2hkb2codm9pZCkKLXsKLQlzd2l0Y2ggKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvcikgewotCWNhc2UgWDg2X1ZFTkRPUl9BTUQ6Ci0JCWlmIChib290X2NwdV9kYXRhLng4NiA9PSA2IHx8Ci0JCSAgICAoYm9vdF9jcHVfZGF0YS54ODYgPj0gMHhmICYmIGJvb3RfY3B1X2RhdGEueDg2IDw9IDB4MTUpKQotCQkJd2Rfb3BzID0gJms3X3dkX29wczsKLQkJcmV0dXJuOwotCWNhc2UgWDg2X1ZFTkRPUl9JTlRFTDoKLQkJLyogV29yayBhcm91bmQgd2hlcmUgcGVyZmN0cjEgZG9lc24ndCBoYXZlIGEgd29ya2luZyBlbmFibGUKLQkJICogYml0IGFzIGRlc2NyaWJlZCBpbiB0aGUgZm9sbG93aW5nIGVycmF0YToKLQkJICogQUU0OSBDb3JlIER1byBhbmQgSW50ZWwgQ29yZSBTb2xvIDY1IG5tCi0JCSAqIEFONDkgSW50ZWwgUGVudGl1bSBEdWFsLUNvcmUKLQkJICogQUY0OSBEdWFsLUNvcmUgSW50ZWwgWGVvbiBQcm9jZXNzb3IgTFYKLQkJICovCi0JCWlmICgoYm9vdF9jcHVfZGF0YS54ODYgPT0gNiAmJiBib290X2NwdV9kYXRhLng4Nl9tb2RlbCA9PSAxNCkgfHwKLQkJICAgICgoYm9vdF9jcHVfZGF0YS54ODYgPT0gNiAmJiBib290X2NwdV9kYXRhLng4Nl9tb2RlbCA9PSAxNSAmJgotCQkgICAgIGJvb3RfY3B1X2RhdGEueDg2X21hc2sgPT0gNCkpKSB7Ci0JCQlpbnRlbF9hcmNoX3dkX29wcy5wZXJmY3RyID0gTVNSX0FSQ0hfUEVSRk1PTl9QRVJGQ1RSMDsKLQkJCWludGVsX2FyY2hfd2Rfb3BzLmV2bnRzZWwgPSBNU1JfQVJDSF9QRVJGTU9OX0VWRU5UU0VMMDsKLQkJfQotCQlpZiAoY3B1X2hhcygmYm9vdF9jcHVfZGF0YSwgWDg2X0ZFQVRVUkVfQVJDSF9QRVJGTU9OKSkgewotCQkJd2Rfb3BzID0gJmludGVsX2FyY2hfd2Rfb3BzOwotCQkJYnJlYWs7Ci0JCX0KLQkJc3dpdGNoIChib290X2NwdV9kYXRhLng4NikgewotCQljYXNlIDY6Ci0JCQlpZiAoYm9vdF9jcHVfZGF0YS54ODZfbW9kZWwgPiAxMykKLQkJCQlyZXR1cm47Ci0KLQkJCXdkX29wcyA9ICZwNl93ZF9vcHM7Ci0JCQlicmVhazsKLQkJY2FzZSAxNToKLQkJCXdkX29wcyA9ICZwNF93ZF9vcHM7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybjsKLQkJfQotCQlicmVhazsKLQl9Ci19Ci0KLS8qIEludGVyZmFjZSB0byBubWkuYyAqLwotCi1pbnQgbGFwaWNfd2F0Y2hkb2dfaW5pdCh1bnNpZ25lZCBubWlfaHopCi17Ci0JaWYgKCF3ZF9vcHMpIHsKLQkJcHJvYmVfbm1pX3dhdGNoZG9nKCk7Ci0JCWlmICghd2Rfb3BzKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJOTUkgd2F0Y2hkb2c6IENQVSBub3Qgc3VwcG9ydGVkXG4iKTsKLQkJCXJldHVybiAtMTsKLQkJfQotCi0JCWlmICghd2Rfb3BzLT5yZXNlcnZlKCkpIHsKLQkJCXByaW50ayhLRVJOX0VSUgotCQkJCSJOTUkgd2F0Y2hkb2c6IGNhbm5vdCByZXNlcnZlIHBlcmZjdHJzXG4iKTsKLQkJCXJldHVybiAtMTsKLQkJfQotCX0KLQotCWlmICghKHdkX29wcy0+c2V0dXAobm1pX2h6KSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJDYW5ub3Qgc2V0dXAgTk1JIHdhdGNoZG9nIG9uIENQVSAlZFxuIiwKLQkJICAgICAgIHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgbGFwaWNfd2F0Y2hkb2dfc3RvcCh2b2lkKQotewotCWlmICh3ZF9vcHMpCi0JCXdkX29wcy0+c3RvcCgpOwotfQotCi11bnNpZ25lZCBsYXBpY19hZGp1c3Rfbm1pX2h6KHVuc2lnbmVkIGh6KQotewotCXN0cnVjdCBubWlfd2F0Y2hkb2dfY3RsYmxrICp3ZCA9ICZfX2dldF9jcHVfdmFyKG5taV93YXRjaGRvZ19jdGxibGspOwotCWlmICh3ZC0+cGVyZmN0cl9tc3IgPT0gTVNSX1A2X1BFUkZDVFIwIHx8Ci0JICAgIHdkLT5wZXJmY3RyX21zciA9PSBNU1JfQVJDSF9QRVJGTU9OX1BFUkZDVFIxKQotCQloeiA9IGFkanVzdF9mb3JfMzJiaXRfY3RyKGh6KTsKLQlyZXR1cm4gaHo7Ci19Ci0KLWludCBfX2twcm9iZXMgbGFwaWNfd2RfZXZlbnQodW5zaWduZWQgbm1pX2h6KQotewotCXN0cnVjdCBubWlfd2F0Y2hkb2dfY3RsYmxrICp3ZCA9ICZfX2dldF9jcHVfdmFyKG5taV93YXRjaGRvZ19jdGxibGspOwotCXU2NCBjdHI7Ci0KLQlyZG1zcmwod2QtPnBlcmZjdHJfbXNyLCBjdHIpOwotCWlmIChjdHIgJiB3ZF9vcHMtPmNoZWNrYml0KSAvKiBwZXJmY3RyIHN0aWxsIHJ1bm5pbmc/ICovCi0JCXJldHVybiAwOwotCi0Jd2Rfb3BzLT5yZWFybSh3ZCwgbm1pX2h6KTsKLQlyZXR1cm4gMTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2suYyBiL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2suYwppbmRleCA2ZTg3NTJjLi44NDc0Yzk5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2R1bXBzdGFjay5jCkBAIC0xNzUsMjEgKzE3NSwyMSBAQAogCiB2b2lkCiBzaG93X3RyYWNlX2xvZ19sdmwoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKLQkJdW5zaWduZWQgbG9uZyAqc3RhY2ssIHVuc2lnbmVkIGxvbmcgYnAsIGNoYXIgKmxvZ19sdmwpCisJCXVuc2lnbmVkIGxvbmcgKnN0YWNrLCBjaGFyICpsb2dfbHZsKQogewogCXByaW50aygiJXNDYWxsIFRyYWNlOlxuIiwgbG9nX2x2bCk7Ci0JZHVtcF90cmFjZSh0YXNrLCByZWdzLCBzdGFjaywgYnAsICZwcmludF90cmFjZV9vcHMsIGxvZ19sdmwpOworCWR1bXBfdHJhY2UodGFzaywgcmVncywgc3RhY2ssICZwcmludF90cmFjZV9vcHMsIGxvZ19sdmwpOwogfQogCiB2b2lkIHNob3dfdHJhY2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKLQkJdW5zaWduZWQgbG9uZyAqc3RhY2ssIHVuc2lnbmVkIGxvbmcgYnApCisJCXVuc2lnbmVkIGxvbmcgKnN0YWNrKQogewotCXNob3dfdHJhY2VfbG9nX2x2bCh0YXNrLCByZWdzLCBzdGFjaywgYnAsICIiKTsKKwlzaG93X3RyYWNlX2xvZ19sdmwodGFzaywgcmVncywgc3RhY2ssICIiKTsKIH0KIAogdm9pZCBzaG93X3N0YWNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdW5zaWduZWQgbG9uZyAqc3ApCiB7Ci0Jc2hvd19zdGFja19sb2dfbHZsKHRhc2ssIE5VTEwsIHNwLCAwLCAiIik7CisJc2hvd19zdGFja19sb2dfbHZsKHRhc2ssIE5VTEwsIHNwLCAiIik7CiB9CiAKIC8qCkBAIC0yMTAsNyArMjEwLDcgQEAKIAkJaW5pdF91dHNuYW1lKCktPnJlbGVhc2UsCiAJCShpbnQpc3RyY3Nwbihpbml0X3V0c25hbWUoKS0+dmVyc2lvbiwgIiAiKSwKIAkJaW5pdF91dHNuYW1lKCktPnZlcnNpb24pOwotCXNob3dfdHJhY2UoTlVMTCwgTlVMTCwgJnN0YWNrLCBicCk7CisJc2hvd190cmFjZShOVUxMLCBOVUxMLCAmc3RhY2spOwogfQogRVhQT1JUX1NZTUJPTChkdW1wX3N0YWNrKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2R1bXBzdGFja18zMi5jIGIvYXJjaC94ODYva2VybmVsL2R1bXBzdGFja18zMi5jCmluZGV4IDFiYzdmNzUuLjc0Y2MxZWQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2tfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrXzMyLmMKQEAgLTE3LDExICsxNywxMiBAQAogI2luY2x1ZGUgPGFzbS9zdGFja3RyYWNlLmg+CiAKIAotdm9pZCBkdW1wX3RyYWNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCi0JCXVuc2lnbmVkIGxvbmcgKnN0YWNrLCB1bnNpZ25lZCBsb25nIGJwLAordm9pZCBkdW1wX3RyYWNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKKwkJc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgKnN0YWNrLAogCQljb25zdCBzdHJ1Y3Qgc3RhY2t0cmFjZV9vcHMgKm9wcywgdm9pZCAqZGF0YSkKIHsKIAlpbnQgZ3JhcGggPSAwOworCXVuc2lnbmVkIGxvbmcgYnA7CiAKIAlpZiAoIXRhc2spCiAJCXRhc2sgPSBjdXJyZW50OwpAQCAtMzQsMTggKzM1LDcgQEAKIAkJCXN0YWNrID0gKHVuc2lnbmVkIGxvbmcgKil0YXNrLT50aHJlYWQuc3A7CiAJfQogCi0jaWZkZWYgQ09ORklHX0ZSQU1FX1BPSU5URVIKLQlpZiAoIWJwKSB7Ci0JCWlmICh0YXNrID09IGN1cnJlbnQpIHsKLQkJCS8qIEdyYWIgYnAgcmlnaHQgZnJvbSBvdXIgcmVncyAqLwotCQkJZ2V0X2JwKGJwKTsKLQkJfSBlbHNlIHsKLQkJCS8qIGJwIGlzIHRoZSBsYXN0IHJlZyBwdXNoZWQgYnkgc3dpdGNoX3RvICovCi0JCQlicCA9ICoodW5zaWduZWQgbG9uZyAqKSB0YXNrLT50aHJlYWQuc3A7Ci0JCX0KLQl9Ci0jZW5kaWYKLQorCWJwID0gc3RhY2tfZnJhbWUodGFzaywgcmVncyk7CiAJZm9yICg7OykgewogCQlzdHJ1Y3QgdGhyZWFkX2luZm8gKmNvbnRleHQ7CiAKQEAgLTY1LDcgKzU1LDcgQEAKIAogdm9pZAogc2hvd19zdGFja19sb2dfbHZsKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCi0JCSAgIHVuc2lnbmVkIGxvbmcgKnNwLCB1bnNpZ25lZCBsb25nIGJwLCBjaGFyICpsb2dfbHZsKQorCQkgICB1bnNpZ25lZCBsb25nICpzcCwgY2hhciAqbG9nX2x2bCkKIHsKIAl1bnNpZ25lZCBsb25nICpzdGFjazsKIAlpbnQgaTsKQEAgLTg3LDcgKzc3LDcgQEAKIAkJdG91Y2hfbm1pX3dhdGNoZG9nKCk7CiAJfQogCXByaW50ayhLRVJOX0NPTlQgIlxuIik7Ci0Jc2hvd190cmFjZV9sb2dfbHZsKHRhc2ssIHJlZ3MsIHNwLCBicCwgbG9nX2x2bCk7CisJc2hvd190cmFjZV9sb2dfbHZsKHRhc2ssIHJlZ3MsIHNwLCBsb2dfbHZsKTsKIH0KIAogCkBAIC0xMTIsOCArMTAyLDcgQEAKIAkJdTggKmlwOwogCiAJCXByaW50ayhLRVJOX0VNRVJHICJTdGFjazpcbiIpOwotCQlzaG93X3N0YWNrX2xvZ19sdmwoTlVMTCwgcmVncywgJnJlZ3MtPnNwLAotCQkJCTAsIEtFUk5fRU1FUkcpOworCQlzaG93X3N0YWNrX2xvZ19sdmwoTlVMTCwgcmVncywgJnJlZ3MtPnNwLCBLRVJOX0VNRVJHKTsKIAogCQlwcmludGsoS0VSTl9FTUVSRyAiQ29kZTogIik7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2tfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2tfNjQuYwppbmRleCA2YTM0MDQ4Li42NDEwMTMzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2R1bXBzdGFja182NC5jCkBAIC0xMzksOCArMTM5LDggQEAKICAqIHNldmVyZSBleGNlcHRpb24gKGRvdWJsZSBmYXVsdCwgbm1pLCBzdGFjayBmYXVsdCwgZGVidWcsIG1jZSkgaGFyZHdhcmUgc3RhY2sKICAqLwogCi12b2lkIGR1bXBfdHJhY2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKLQkJdW5zaWduZWQgbG9uZyAqc3RhY2ssIHVuc2lnbmVkIGxvbmcgYnAsCit2b2lkIGR1bXBfdHJhY2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAorCQlzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyAqc3RhY2ssCiAJCWNvbnN0IHN0cnVjdCBzdGFja3RyYWNlX29wcyAqb3BzLCB2b2lkICpkYXRhKQogewogCWNvbnN0IHVuc2lnbmVkIGNwdSA9IGdldF9jcHUoKTsKQEAgLTE0OSw2ICsxNDksNyBAQAogCXVuc2lnbmVkIHVzZWQgPSAwOwogCXN0cnVjdCB0aHJlYWRfaW5mbyAqdGluZm87CiAJaW50IGdyYXBoID0gMDsKKwl1bnNpZ25lZCBsb25nIGJwOwogCiAJaWYgKCF0YXNrKQogCQl0YXNrID0gY3VycmVudDsKQEAgLTE2MCwxOCArMTYxLDcgQEAKIAkJCXN0YWNrID0gKHVuc2lnbmVkIGxvbmcgKil0YXNrLT50aHJlYWQuc3A7CiAJfQogCi0jaWZkZWYgQ09ORklHX0ZSQU1FX1BPSU5URVIKLQlpZiAoIWJwKSB7Ci0JCWlmICh0YXNrID09IGN1cnJlbnQpIHsKLQkJCS8qIEdyYWIgYnAgcmlnaHQgZnJvbSBvdXIgcmVncyAqLwotCQkJZ2V0X2JwKGJwKTsKLQkJfSBlbHNlIHsKLQkJCS8qIGJwIGlzIHRoZSBsYXN0IHJlZyBwdXNoZWQgYnkgc3dpdGNoX3RvICovCi0JCQlicCA9ICoodW5zaWduZWQgbG9uZyAqKSB0YXNrLT50aHJlYWQuc3A7Ci0JCX0KLQl9Ci0jZW5kaWYKLQorCWJwID0gc3RhY2tfZnJhbWUodGFzaywgcmVncyk7CiAJLyoKIAkgKiBQcmludCBmdW5jdGlvbiBjYWxsIGVudHJpZXMgaW4gYWxsIHN0YWNrcywgc3RhcnRpbmcgYXQgdGhlCiAJICogY3VycmVudCBzdGFjayBhZGRyZXNzLiBJZiB0aGUgc3RhY2tzIGNvbnNpc3Qgb2YgbmVzdGVkCkBAIC0yMzUsNyArMjI1LDcgQEAKIAogdm9pZAogc2hvd19zdGFja19sb2dfbHZsKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCi0JCSAgIHVuc2lnbmVkIGxvbmcgKnNwLCB1bnNpZ25lZCBsb25nIGJwLCBjaGFyICpsb2dfbHZsKQorCQkgICB1bnNpZ25lZCBsb25nICpzcCwgY2hhciAqbG9nX2x2bCkKIHsKIAl1bnNpZ25lZCBsb25nICppcnFfc3RhY2tfZW5kOwogCXVuc2lnbmVkIGxvbmcgKmlycV9zdGFjazsKQEAgLTI3OSw3ICsyNjksNyBAQAogCXByZWVtcHRfZW5hYmxlKCk7CiAKIAlwcmludGsoS0VSTl9DT05UICJcbiIpOwotCXNob3dfdHJhY2VfbG9nX2x2bCh0YXNrLCByZWdzLCBzcCwgYnAsIGxvZ19sdmwpOworCXNob3dfdHJhY2VfbG9nX2x2bCh0YXNrLCByZWdzLCBzcCwgbG9nX2x2bCk7CiB9CiAKIHZvaWQgc2hvd19yZWdpc3RlcnMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCkBAIC0zMDgsNyArMjk4LDcgQEAKIAogCQlwcmludGsoS0VSTl9FTUVSRyAiU3RhY2s6XG4iKTsKIAkJc2hvd19zdGFja19sb2dfbHZsKE5VTEwsIHJlZ3MsICh1bnNpZ25lZCBsb25nICopc3AsCi0JCQkJcmVncy0+YnAsIEtFUk5fRU1FUkcpOworCQkJCSAgIEtFUk5fRU1FUkcpOwogCiAJCXByaW50ayhLRVJOX0VNRVJHICJDb2RlOiAiKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2Vhcmx5X3ByaW50ay5jIGIvYXJjaC94ODYva2VybmVsL2Vhcmx5X3ByaW50ay5jCmluZGV4IDQ1NzJmMjUuLmNkMjhhMzUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9lYXJseV9wcmludGsuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZWFybHlfcHJpbnRrLmMKQEAgLTI0MCw3ICsyNDAsNyBAQAogCQlpZiAoIXN0cm5jbXAoYnVmLCAieGVuIiwgMykpCiAJCQllYXJseV9jb25zb2xlX3JlZ2lzdGVyKCZ4ZW5ib290X2NvbnNvbGUsIGtlZXApOwogI2VuZGlmCi0jaWZkZWYgQ09ORklHX1g4Nl9NUlNUX0VBUkxZX1BSSU5USworI2lmZGVmIENPTkZJR19FQVJMWV9QUklOVEtfTVJTVAogCQlpZiAoIXN0cm5jbXAoYnVmLCAibXJzdCIsIDQpKSB7CiAJCQltcnN0X2Vhcmx5X2NvbnNvbGVfaW5pdCgpOwogCQkJZWFybHlfY29uc29sZV9yZWdpc3RlcigmZWFybHlfbXJzdF9jb25zb2xlLCBrZWVwKTsKQEAgLTI1MCw3ICsyNTAsNiBAQAogCQkJaHN1X2Vhcmx5X2NvbnNvbGVfaW5pdCgpOwogCQkJZWFybHlfY29uc29sZV9yZWdpc3RlcigmZWFybHlfaHN1X2NvbnNvbGUsIGtlZXApOwogCQl9Ci0KICNlbmRpZgogCQlidWYrKzsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZnRyYWNlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvZnRyYWNlLmMKaW5kZXggM2FmYjMzZi4uMzgyZWIyOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2Z0cmFjZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9mdHJhY2UuYwpAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAogI2luY2x1ZGUgPHRyYWNlL3N5c2NhbGwuaD4KIApAQCAtNDksNiArNTAsNyBAQAogaW50IGZ0cmFjZV9hcmNoX2NvZGVfbW9kaWZ5X3ByZXBhcmUodm9pZCkKIHsKIAlzZXRfa2VybmVsX3RleHRfcncoKTsKKwlzZXRfYWxsX21vZHVsZXNfdGV4dF9ydygpOwogCW1vZGlmeWluZ19jb2RlID0gMTsKIAlyZXR1cm4gMDsKIH0KQEAgLTU2LDYgKzU4LDcgQEAKIGludCBmdHJhY2VfYXJjaF9jb2RlX21vZGlmeV9wb3N0X3Byb2Nlc3Modm9pZCkKIHsKIAltb2RpZnlpbmdfY29kZSA9IDA7CisJc2V0X2FsbF9tb2R1bGVzX3RleHRfcm8oKTsKIAlzZXRfa2VybmVsX3RleHRfcm8oKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTE2Nyw5ICsxNzAsOSBAQAogCiB2b2lkIGZ0cmFjZV9ubWlfZW50ZXIodm9pZCkKIHsKLQlfX2dldF9jcHVfdmFyKHNhdmVfbW9kaWZ5aW5nX2NvZGUpID0gbW9kaWZ5aW5nX2NvZGU7CisJX190aGlzX2NwdV93cml0ZShzYXZlX21vZGlmeWluZ19jb2RlLCBtb2RpZnlpbmdfY29kZSk7CiAKLQlpZiAoIV9fZ2V0X2NwdV92YXIoc2F2ZV9tb2RpZnlpbmdfY29kZSkpCisJaWYgKCFfX3RoaXNfY3B1X3JlYWQoc2F2ZV9tb2RpZnlpbmdfY29kZSkpCiAJCXJldHVybjsKIAogCWlmIChhdG9taWNfaW5jX3JldHVybigmbm1pX3J1bm5pbmcpICYgTU9EX0NPREVfV1JJVEVfRkxBRykgewpAQCAtMTgzLDcgKzE4Niw3IEBACiAKIHZvaWQgZnRyYWNlX25taV9leGl0KHZvaWQpCiB7Ci0JaWYgKCFfX2dldF9jcHVfdmFyKHNhdmVfbW9kaWZ5aW5nX2NvZGUpKQorCWlmICghX190aGlzX2NwdV9yZWFkKHNhdmVfbW9kaWZ5aW5nX2NvZGUpKQogCQlyZXR1cm47CiAKIAkvKiBGaW5pc2ggYWxsIGV4ZWN1dGlvbnMgYmVmb3JlIGNsZWFyaW5nIG5taV9ydW5uaW5nICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaGVhZDMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvaGVhZDMyLmMKaW5kZXggNzYzMzEwMS4uN2YxMzhiMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2hlYWQzMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9oZWFkMzIuYwpAQCAtNjEsNiArNjEsOSBAQAogCWNhc2UgWDg2X1NVQkFSQ0hfTVJTVDoKIAkJeDg2X21yc3RfZWFybHlfc2V0dXAoKTsKIAkJYnJlYWs7CisJY2FzZSBYODZfU1VCQVJDSF9DRTQxMDA6CisJCXg4Nl9jZTQxMDBfZWFybHlfc2V0dXAoKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJaTM4Nl9kZWZhdWx0X2Vhcmx5X3NldHVwKCk7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2hlYWRfMzIuUyBiL2FyY2gveDg2L2tlcm5lbC9oZWFkXzMyLlMKaW5kZXggYzBkYmQ5YS4uOWY1NGIyMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2hlYWRfMzIuUworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaGVhZF8zMi5TCkBAIC0xMzksMzkgKzEzOSw2IEBACiAJbW92bCAlZWF4LCBwYShvbHBjX29md19wZ2QpCiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19QQVJBVklSVAotCS8qIFRoaXMgaXMgY2FuIG9ubHkgdHJpcCBmb3IgYSBicm9rZW4gYm9vdGxvYWRlci4uLiAqLwotCWNtcHcgJDB4MjA3LCBwYShib290X3BhcmFtcyArIEJQX3ZlcnNpb24pCi0JamIgZGVmYXVsdF9lbnRyeQotCi0JLyogUGFyYXZpcnQtY29tcGF0aWJsZSBib290IHBhcmFtZXRlcnMuICBMb29rIHRvIHNlZSB3aGF0IGFyY2hpdGVjdHVyZQotCQl3ZSdyZSBib290aW5nIHVuZGVyLiAqLwotCW1vdmwgcGEoYm9vdF9wYXJhbXMgKyBCUF9oYXJkd2FyZV9zdWJhcmNoKSwgJWVheAotCWNtcGwgJG51bV9zdWJhcmNoX2VudHJpZXMsICVlYXgKLQlqYWUgYmFkX3N1YmFyY2gKLQotCW1vdmwgcGEoc3ViYXJjaF9lbnRyaWVzKSgsJWVheCw0KSwgJWVheAotCXN1YmwgJF9fUEFHRV9PRkZTRVQsICVlYXgKLQlqbXAgKiVlYXgKLQotYmFkX3N1YmFyY2g6Ci1XRUFLKGxndWVzdF9lbnRyeSkKLVdFQUsoeGVuX2VudHJ5KQotCS8qIFVua25vd24gaW1wbGVtZW50YXRpb247IHRoZXJlJ3MgcmVhbGx5Ci0JICAgbm90aGluZyB3ZSBjYW4gZG8gYXQgdGhpcyBwb2ludC4gKi8KLQl1ZDJhCi0KLQlfX0lOSVREQVRBCi0KLXN1YmFyY2hfZW50cmllczoKLQkubG9uZyBkZWZhdWx0X2VudHJ5CQkvKiBub3JtYWwgeDg2L1BDICovCi0JLmxvbmcgbGd1ZXN0X2VudHJ5CQkvKiBsZ3Vlc3QgaHlwZXJ2aXNvciAqLwotCS5sb25nIHhlbl9lbnRyeQkJCS8qIFhlbiBoeXBlcnZpc29yICovCi0JLmxvbmcgZGVmYXVsdF9lbnRyeQkJLyogTW9vcmVzdG93biBNSUQgKi8KLW51bV9zdWJhcmNoX2VudHJpZXMgPSAoLiAtIHN1YmFyY2hfZW50cmllcykgLyA0Ci0ucHJldmlvdXMKLSNlbmRpZiAvKiBDT05GSUdfUEFSQVZJUlQgKi8KLQogLyoKICAqIEluaXRpYWxpemUgcGFnZSB0YWJsZXMuICBUaGlzIGNyZWF0ZXMgYSBQREUgYW5kIGEgc2V0IG9mIHBhZ2UKICAqIHRhYmxlcywgd2hpY2ggYXJlIGxvY2F0ZWQgaW1tZWRpYXRlbHkgYmV5b25kIF9fYnJrX2Jhc2UuICBUaGUgdmFyaWFibGUKQEAgLTE4MSw3ICsxNDgsNiBAQAogICoKICAqIE5vdGUgdGhhdCB0aGUgc3RhY2sgaXMgbm90IHlldCBzZXQgdXAhCiAgKi8KLWRlZmF1bHRfZW50cnk6CiAjaWZkZWYgQ09ORklHX1g4Nl9QQUUKIAogCS8qCkBAIC0yNjEsNyArMjI3LDQyIEBACiAJbW92bCAkcGEoaW5pdGlhbF9wZ19maXhtYXApK1BERV9JREVOVF9BVFRSLCVlYXgKIAltb3ZsICVlYXgscGEoaW5pdGlhbF9wYWdlX3RhYmxlKzB4ZmZjKQogI2VuZGlmCi0Jam1wIDNmCisKKyNpZmRlZiBDT05GSUdfUEFSQVZJUlQKKwkvKiBUaGlzIGlzIGNhbiBvbmx5IHRyaXAgZm9yIGEgYnJva2VuIGJvb3Rsb2FkZXIuLi4gKi8KKwljbXB3ICQweDIwNywgcGEoYm9vdF9wYXJhbXMgKyBCUF92ZXJzaW9uKQorCWpiIGRlZmF1bHRfZW50cnkKKworCS8qIFBhcmF2aXJ0LWNvbXBhdGlibGUgYm9vdCBwYXJhbWV0ZXJzLiAgTG9vayB0byBzZWUgd2hhdCBhcmNoaXRlY3R1cmUKKwkJd2UncmUgYm9vdGluZyB1bmRlci4gKi8KKwltb3ZsIHBhKGJvb3RfcGFyYW1zICsgQlBfaGFyZHdhcmVfc3ViYXJjaCksICVlYXgKKwljbXBsICRudW1fc3ViYXJjaF9lbnRyaWVzLCAlZWF4CisJamFlIGJhZF9zdWJhcmNoCisKKwltb3ZsIHBhKHN1YmFyY2hfZW50cmllcykoLCVlYXgsNCksICVlYXgKKwlzdWJsICRfX1BBR0VfT0ZGU0VULCAlZWF4CisJam1wIColZWF4CisKK2JhZF9zdWJhcmNoOgorV0VBSyhsZ3Vlc3RfZW50cnkpCitXRUFLKHhlbl9lbnRyeSkKKwkvKiBVbmtub3duIGltcGxlbWVudGF0aW9uOyB0aGVyZSdzIHJlYWxseQorCSAgIG5vdGhpbmcgd2UgY2FuIGRvIGF0IHRoaXMgcG9pbnQuICovCisJdWQyYQorCisJX19JTklUREFUQQorCitzdWJhcmNoX2VudHJpZXM6CisJLmxvbmcgZGVmYXVsdF9lbnRyeQkJLyogbm9ybWFsIHg4Ni9QQyAqLworCS5sb25nIGxndWVzdF9lbnRyeQkJLyogbGd1ZXN0IGh5cGVydmlzb3IgKi8KKwkubG9uZyB4ZW5fZW50cnkJCQkvKiBYZW4gaHlwZXJ2aXNvciAqLworCS5sb25nIGRlZmF1bHRfZW50cnkJCS8qIE1vb3Jlc3Rvd24gTUlEICovCitudW1fc3ViYXJjaF9lbnRyaWVzID0gKC4gLSBzdWJhcmNoX2VudHJpZXMpIC8gNAorLnByZXZpb3VzCisjZWxzZQorCWptcCBkZWZhdWx0X2VudHJ5CisjZW5kaWYgLyogQ09ORklHX1BBUkFWSVJUICovCisKIC8qCiAgKiBOb24tYm9vdCBDUFUgZW50cnkgcG9pbnQ7IGVudGVyZWQgZnJvbSB0cmFtcG9saW5lLlMKICAqIFdlIGNhbid0IGxnZHQgaGVyZSwgYmVjYXVzZSBsZ2R0IGl0c2VsZiB1c2VzIGEgZGF0YSBzZWdtZW50LCBidXQKQEAgLTI4Miw3ICsyODMsNyBAQAogCW1vdmwgJWVheCwlZnMKIAltb3ZsICVlYXgsJWdzCiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwotMzoKK2RlZmF1bHRfZW50cnk6CiAKIC8qCiAgKglOZXcgcGFnZSB0YWJsZXMgbWF5IGJlIGluIDRNYnl0ZSBwYWdlIG1vZGUgYW5kIG1heQpAQCAtMzE2LDYgKzMxNywxMCBAQAogCXN1YmwgJDB4ODAwMDAwMDEsICVlYXgKIAljbXBsICQoMHg4MDAwZmZmZi0weDgwMDAwMDAxKSwgJWVheAogCWphIDZmCisKKwkvKiBDbGVhciBib2d1cyBYRF9ESVNBQkxFIGJpdHMgKi8KKwljYWxsIHZlcmlmeV9jcHUKKwogCW1vdiAkMHg4MDAwMDAwMSwgJWVheAogCWNwdWlkCiAJLyogRXhlY3V0ZSBEaXNhYmxlIGJpdCBzdXBwb3J0ZWQ/ICovCkBAIC02MTEsNiArNjE2LDggQEAKICNlbmRpZgogCWlyZXQKIAorI2luY2x1ZGUgInZlcmlmeV9jcHUuUyIKKwogCV9fUkVGREFUQQogLmFsaWduIDQKIEVOVFJZKGluaXRpYWxfY29kZSkKQEAgLTYyMiwxMyArNjI5LDEzIEBACiBfX1BBR0VfQUxJR05FRF9CU1MKIAkuYWxpZ24gUEFHRV9TSVpFX2FzbQogI2lmZGVmIENPTkZJR19YODZfUEFFCi1FTlRSWShpbml0aWFsX3BnX3BtZCkKK2luaXRpYWxfcGdfcG1kOgogCS5maWxsIDEwMjQqS1BNRFMsNCwwCiAjZWxzZQogRU5UUlkoaW5pdGlhbF9wYWdlX3RhYmxlKQogCS5maWxsIDEwMjQsNCwwCiAjZW5kaWYKLUVOVFJZKGluaXRpYWxfcGdfZml4bWFwKQoraW5pdGlhbF9wZ19maXhtYXA6CiAJLmZpbGwgMTAyNCw0LDAKIEVOVFJZKGVtcHR5X3plcm9fcGFnZSkKIAkuZmlsbCA0MDk2LDEsMApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2h3X2JyZWFrcG9pbnQuYyBiL2FyY2gveDg2L2tlcm5lbC9od19icmVha3BvaW50LmMKaW5kZXggNDJjNTk0Mi4uMDJmMDc2MyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2h3X2JyZWFrcG9pbnQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaHdfYnJlYWtwb2ludC5jCkBAIC0xMjIsNyArMTIyLDcgQEAKIAkJcmV0dXJuIC1FQlVTWTsKIAogCXNldF9kZWJ1Z3JlZyhpbmZvLT5hZGRyZXNzLCBpKTsKLQlfX2dldF9jcHVfdmFyKGNwdV9kZWJ1Z3JlZ1tpXSkgPSBpbmZvLT5hZGRyZXNzOworCV9fdGhpc19jcHVfd3JpdGUoY3B1X2RlYnVncmVnW2ldLCBpbmZvLT5hZGRyZXNzKTsKIAogCWRyNyA9ICZfX2dldF9jcHVfdmFyKGNwdV9kcjcpOwogCSpkcjcgfD0gZW5jb2RlX2RyNyhpLCBpbmZvLT5sZW4sIGluZm8tPnR5cGUpOwpAQCAtMzk3LDEyICszOTcsMTIgQEAKIAogdm9pZCBod19icmVha3BvaW50X3Jlc3RvcmUodm9pZCkKIHsKLQlzZXRfZGVidWdyZWcoX19nZXRfY3B1X3ZhcihjcHVfZGVidWdyZWdbMF0pLCAwKTsKLQlzZXRfZGVidWdyZWcoX19nZXRfY3B1X3ZhcihjcHVfZGVidWdyZWdbMV0pLCAxKTsKLQlzZXRfZGVidWdyZWcoX19nZXRfY3B1X3ZhcihjcHVfZGVidWdyZWdbMl0pLCAyKTsKLQlzZXRfZGVidWdyZWcoX19nZXRfY3B1X3ZhcihjcHVfZGVidWdyZWdbM10pLCAzKTsKKwlzZXRfZGVidWdyZWcoX190aGlzX2NwdV9yZWFkKGNwdV9kZWJ1Z3JlZ1swXSksIDApOworCXNldF9kZWJ1Z3JlZyhfX3RoaXNfY3B1X3JlYWQoY3B1X2RlYnVncmVnWzFdKSwgMSk7CisJc2V0X2RlYnVncmVnKF9fdGhpc19jcHVfcmVhZChjcHVfZGVidWdyZWdbMl0pLCAyKTsKKwlzZXRfZGVidWdyZWcoX190aGlzX2NwdV9yZWFkKGNwdV9kZWJ1Z3JlZ1szXSksIDMpOwogCXNldF9kZWJ1Z3JlZyhjdXJyZW50LT50aHJlYWQuZGVidWdyZWc2LCA2KTsKLQlzZXRfZGVidWdyZWcoX19nZXRfY3B1X3ZhcihjcHVfZHI3KSwgNyk7CisJc2V0X2RlYnVncmVnKF9fdGhpc19jcHVfcmVhZChjcHVfZHI3KSwgNyk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChod19icmVha3BvaW50X3Jlc3RvcmUpOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaXJxLmMgYi9hcmNoL3g4Ni9rZXJuZWwvaXJxLmMKaW5kZXggODNlYzAxNy4uM2E0M2NhYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2lycS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9pcnEuYwpAQCAtMjM0LDcgKzIzNCw3IEBACiAJZXhpdF9pZGxlKCk7CiAJaXJxX2VudGVyKCk7CiAKLQlpcnEgPSBfX2dldF9jcHVfdmFyKHZlY3Rvcl9pcnEpW3ZlY3Rvcl07CisJaXJxID0gX190aGlzX2NwdV9yZWFkKHZlY3Rvcl9pcnFbdmVjdG9yXSk7CiAKIAlpZiAoIWhhbmRsZV9pcnEoaXJxLCByZWdzKSkgewogCQlhY2tfQVBJQ19pcnEoKTsKQEAgLTM1MCwxMiArMzUwLDEyIEBACiAJZm9yICh2ZWN0b3IgPSBGSVJTVF9FWFRFUk5BTF9WRUNUT1I7IHZlY3RvciA8IE5SX1ZFQ1RPUlM7IHZlY3RvcisrKSB7CiAJCXVuc2lnbmVkIGludCBpcnI7CiAKLQkJaWYgKF9fZ2V0X2NwdV92YXIodmVjdG9yX2lycSlbdmVjdG9yXSA8IDApCisJCWlmIChfX3RoaXNfY3B1X3JlYWQodmVjdG9yX2lycVt2ZWN0b3JdKSA8IDApCiAJCQljb250aW51ZTsKIAogCQlpcnIgPSBhcGljX3JlYWQoQVBJQ19JUlIgKyAodmVjdG9yIC8gMzIgKiAweDEwKSk7CiAJCWlmIChpcnIgICYgKDEgPDwgKHZlY3RvciAlIDMyKSkpIHsKLQkJCWlycSA9IF9fZ2V0X2NwdV92YXIodmVjdG9yX2lycSlbdmVjdG9yXTsKKwkJCWlycSA9IF9fdGhpc19jcHVfcmVhZCh2ZWN0b3JfaXJxW3ZlY3Rvcl0pOwogCiAJCQlkYXRhID0gaXJxX2dldF9pcnFfZGF0YShpcnEpOwogCQkJcmF3X3NwaW5fbG9jaygmZGVzYy0+bG9jayk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaXJxXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvaXJxXzMyLmMKaW5kZXggOTY2NTZmMi4uNDhmZjZkYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2lycV8zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9pcnFfMzIuYwpAQCAtNzksNyArNzksNyBAQAogCXUzMiAqaXNwLCBhcmcxLCBhcmcyOwogCiAJY3VyY3R4ID0gKHVuaW9uIGlycV9jdHggKikgY3VycmVudF90aHJlYWRfaW5mbygpOwotCWlycWN0eCA9IF9fZ2V0X2NwdV92YXIoaGFyZGlycV9jdHgpOworCWlycWN0eCA9IF9fdGhpc19jcHVfcmVhZChoYXJkaXJxX2N0eCk7CiAKIAkvKgogCSAqIHRoaXMgaXMgd2hlcmUgd2Ugc3dpdGNoIHRvIHRoZSBJUlEgc3RhY2suIEhvd2V2ZXIsIGlmIHdlIGFyZQpAQCAtMTY2LDcgKzE2Niw3IEBACiAKIAlpZiAobG9jYWxfc29mdGlycV9wZW5kaW5nKCkpIHsKIAkJY3VyY3R4ID0gY3VycmVudF90aHJlYWRfaW5mbygpOwotCQlpcnFjdHggPSBfX2dldF9jcHVfdmFyKHNvZnRpcnFfY3R4KTsKKwkJaXJxY3R4ID0gX190aGlzX2NwdV9yZWFkKHNvZnRpcnFfY3R4KTsKIAkJaXJxY3R4LT50aW5mby50YXNrID0gY3VyY3R4LT50YXNrOwogCQlpcnFjdHgtPnRpbmZvLnByZXZpb3VzX2VzcCA9IGN1cnJlbnRfc3RhY2tfcG9pbnRlcjsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2twcm9iZXMuYyBiL2FyY2gveDg2L2tlcm5lbC9rcHJvYmVzLmMKaW5kZXggMWNiZDU0Yy4uZDkxYzQ3NyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2twcm9iZXMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwva3Byb2Jlcy5jCkBAIC00MDMsNyArNDAzLDcgQEAKIAogc3RhdGljIHZvaWQgX19rcHJvYmVzIHJlc3RvcmVfcHJldmlvdXNfa3Byb2JlKHN0cnVjdCBrcHJvYmVfY3RsYmxrICprY2IpCiB7Ci0JX19nZXRfY3B1X3ZhcihjdXJyZW50X2twcm9iZSkgPSBrY2ItPnByZXZfa3Byb2JlLmtwOworCV9fdGhpc19jcHVfd3JpdGUoY3VycmVudF9rcHJvYmUsIGtjYi0+cHJldl9rcHJvYmUua3ApOwogCWtjYi0+a3Byb2JlX3N0YXR1cyA9IGtjYi0+cHJldl9rcHJvYmUuc3RhdHVzOwogCWtjYi0+a3Byb2JlX29sZF9mbGFncyA9IGtjYi0+cHJldl9rcHJvYmUub2xkX2ZsYWdzOwogCWtjYi0+a3Byb2JlX3NhdmVkX2ZsYWdzID0ga2NiLT5wcmV2X2twcm9iZS5zYXZlZF9mbGFnczsKQEAgLTQxMiw3ICs0MTIsNyBAQAogc3RhdGljIHZvaWQgX19rcHJvYmVzIHNldF9jdXJyZW50X2twcm9iZShzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKIAkJCQlzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiKQogewotCV9fZ2V0X2NwdV92YXIoY3VycmVudF9rcHJvYmUpID0gcDsKKwlfX3RoaXNfY3B1X3dyaXRlKGN1cnJlbnRfa3Byb2JlLCBwKTsKIAlrY2ItPmtwcm9iZV9zYXZlZF9mbGFncyA9IGtjYi0+a3Byb2JlX29sZF9mbGFncwogCQk9IChyZWdzLT5mbGFncyAmIChYODZfRUZMQUdTX1RGIHwgWDg2X0VGTEFHU19JRikpOwogCWlmIChpc19JRl9tb2RpZmllcihwLT5haW5zbi5pbnNuKSkKQEAgLTU4Niw3ICs1ODYsNyBAQAogCQlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7CiAJCXJldHVybiAxOwogCX0gZWxzZSBpZiAoa3Byb2JlX3J1bm5pbmcoKSkgewotCQlwID0gX19nZXRfY3B1X3ZhcihjdXJyZW50X2twcm9iZSk7CisJCXAgPSBfX3RoaXNfY3B1X3JlYWQoY3VycmVudF9rcHJvYmUpOwogCQlpZiAocC0+YnJlYWtfaGFuZGxlciAmJiBwLT5icmVha19oYW5kbGVyKHAsIHJlZ3MpKSB7CiAJCQlzZXR1cF9zaW5nbGVzdGVwKHAsIHJlZ3MsIGtjYiwgMCk7CiAJCQlyZXR1cm4gMTsKQEAgLTc1OSwxMSArNzU5LDExIEBACiAKIAkJb3JpZ19yZXRfYWRkcmVzcyA9ICh1bnNpZ25lZCBsb25nKXJpLT5yZXRfYWRkcjsKIAkJaWYgKHJpLT5ycCAmJiByaS0+cnAtPmhhbmRsZXIpIHsKLQkJCV9fZ2V0X2NwdV92YXIoY3VycmVudF9rcHJvYmUpID0gJnJpLT5ycC0+a3A7CisJCQlfX3RoaXNfY3B1X3dyaXRlKGN1cnJlbnRfa3Byb2JlLCAmcmktPnJwLT5rcCk7CiAJCQlnZXRfa3Byb2JlX2N0bGJsaygpLT5rcHJvYmVfc3RhdHVzID0gS1BST0JFX0hJVF9BQ1RJVkU7CiAJCQlyaS0+cmV0X2FkZHIgPSBjb3JyZWN0X3JldF9hZGRyOwogCQkJcmktPnJwLT5oYW5kbGVyKHJpLCByZWdzKTsKLQkJCV9fZ2V0X2NwdV92YXIoY3VycmVudF9rcHJvYmUpID0gTlVMTDsKKwkJCV9fdGhpc19jcHVfd3JpdGUoY3VycmVudF9rcHJvYmUsIE5VTEwpOwogCQl9CiAKIAkJcmVjeWNsZV9ycF9pbnN0KHJpLCAmZW1wdHlfcnApOwpAQCAtMTE4NCw2ICsxMTg0LDEwIEBACiB7CiAJc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYiA9IGdldF9rcHJvYmVfY3RsYmxrKCk7CiAKKwkvKiBUaGlzIGlzIHBvc3NpYmxlIGlmIG9wIGlzIHVuZGVyIGRlbGF5ZWQgdW5vcHRpbWl6aW5nICovCisJaWYgKGtwcm9iZV9kaXNhYmxlZCgmb3AtPmtwKSkKKwkJcmV0dXJuOworCiAJcHJlZW1wdF9kaXNhYmxlKCk7CiAJaWYgKGtwcm9iZV9ydW5uaW5nKCkpIHsKIAkJa3Byb2Jlc19pbmNfbm1pc3NlZF9jb3VudCgmb3AtPmtwKTsKQEAgLTExOTgsMTAgKzEyMDIsMTAgQEAKIAkJcmVncy0+aXAgPSAodW5zaWduZWQgbG9uZylvcC0+a3AuYWRkciArIElOVDNfU0laRTsKIAkJcmVncy0+b3JpZ19heCA9IH4wVUw7CiAKLQkJX19nZXRfY3B1X3ZhcihjdXJyZW50X2twcm9iZSkgPSAmb3AtPmtwOworCQlfX3RoaXNfY3B1X3dyaXRlKGN1cnJlbnRfa3Byb2JlLCAmb3AtPmtwKTsKIAkJa2NiLT5rcHJvYmVfc3RhdHVzID0gS1BST0JFX0hJVF9BQ1RJVkU7CiAJCW9wdF9wcmVfaGFuZGxlcigmb3AtPmtwLCByZWdzKTsKLQkJX19nZXRfY3B1X3ZhcihjdXJyZW50X2twcm9iZSkgPSBOVUxMOworCQlfX3RoaXNfY3B1X3dyaXRlKGN1cnJlbnRfa3Byb2JlLCBOVUxMKTsKIAl9CiAJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOwogfQpAQCAtMTQwMSwxMCArMTQwNSwxNiBAQAogCXJldHVybiAwOwogfQogCi0vKiBSZXBsYWNlIGEgYnJlYWtwb2ludCAoaW50Mykgd2l0aCBhIHJlbGF0aXZlIGp1bXAuICAqLwotaW50IF9fa3Byb2JlcyBhcmNoX29wdGltaXplX2twcm9iZShzdHJ1Y3Qgb3B0aW1pemVkX2twcm9iZSAqb3ApCisjZGVmaW5lIE1BWF9PUFRJTUlaRV9QUk9CRVMgMjU2CitzdGF0aWMgc3RydWN0IHRleHRfcG9rZV9wYXJhbSAqanVtcF9wb2tlX3BhcmFtczsKK3N0YXRpYyBzdHJ1Y3QganVtcF9wb2tlX2J1ZmZlciB7CisJdTggYnVmW1JFTEFUSVZFSlVNUF9TSVpFXTsKK30gKmp1bXBfcG9rZV9idWZzOworCitzdGF0aWMgdm9pZCBfX2twcm9iZXMgc2V0dXBfb3B0aW1pemVfa3Byb2JlKHN0cnVjdCB0ZXh0X3Bva2VfcGFyYW0gKnRwcm0sCisJCQkJCSAgICB1OCAqaW5zbl9idWYsCisJCQkJCSAgICBzdHJ1Y3Qgb3B0aW1pemVkX2twcm9iZSAqb3ApCiB7Ci0JdW5zaWduZWQgY2hhciBqbXBfY29kZVtSRUxBVElWRUpVTVBfU0laRV07CiAJczMyIHJlbCA9IChzMzIpKChsb25nKW9wLT5vcHRpbnNuLmluc24gLQogCQkJKChsb25nKW9wLT5rcC5hZGRyICsgUkVMQVRJVkVKVU1QX1NJWkUpKTsKIApAQCAtMTQxMiwxNiArMTQyMiw3OSBAQAogCW1lbWNweShvcC0+b3B0aW5zbi5jb3BpZWRfaW5zbiwgb3AtPmtwLmFkZHIgKyBJTlQzX1NJWkUsCiAJICAgICAgIFJFTEFUSVZFX0FERFJfU0laRSk7CiAKLQlqbXBfY29kZVswXSA9IFJFTEFUSVZFSlVNUF9PUENPREU7Ci0JKihzMzIgKikoJmptcF9jb2RlWzFdKSA9IHJlbDsKKwlpbnNuX2J1ZlswXSA9IFJFTEFUSVZFSlVNUF9PUENPREU7CisJKihzMzIgKikoJmluc25fYnVmWzFdKSA9IHJlbDsKKworCXRwcm0tPmFkZHIgPSBvcC0+a3AuYWRkcjsKKwl0cHJtLT5vcGNvZGUgPSBpbnNuX2J1ZjsKKwl0cHJtLT5sZW4gPSBSRUxBVElWRUpVTVBfU0laRTsKK30KKworLyoKKyAqIFJlcGxhY2UgYnJlYWtwb2ludHMgKGludDMpIHdpdGggcmVsYXRpdmUganVtcHMuCisgKiBDYWxsZXIgbXVzdCBjYWxsIHdpdGggbG9ja2luZyBrcHJvYmVfbXV0ZXggYW5kIHRleHRfbXV0ZXguCisgKi8KK3ZvaWQgX19rcHJvYmVzIGFyY2hfb3B0aW1pemVfa3Byb2JlcyhzdHJ1Y3QgbGlzdF9oZWFkICpvcGxpc3QpCit7CisJc3RydWN0IG9wdGltaXplZF9rcHJvYmUgKm9wLCAqdG1wOworCWludCBjID0gMDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShvcCwgdG1wLCBvcGxpc3QsIGxpc3QpIHsKKwkJV0FSTl9PTihrcHJvYmVfZGlzYWJsZWQoJm9wLT5rcCkpOworCQkvKiBTZXR1cCBwYXJhbSAqLworCQlzZXR1cF9vcHRpbWl6ZV9rcHJvYmUoJmp1bXBfcG9rZV9wYXJhbXNbY10sCisJCQkJICAgICAganVtcF9wb2tlX2J1ZnNbY10uYnVmLCBvcCk7CisJCWxpc3RfZGVsX2luaXQoJm9wLT5saXN0KTsKKwkJaWYgKCsrYyA+PSBNQVhfT1BUSU1JWkVfUFJPQkVTKQorCQkJYnJlYWs7CisJfQogCiAJLyoKIAkgKiB0ZXh0X3Bva2Vfc21wIGRvZXNuJ3Qgc3VwcG9ydCBOTUkvTUNFIGNvZGUgbW9kaWZ5aW5nLgogCSAqIEhvd2V2ZXIsIHNpbmNlIGtwcm9iZXMgaXRzZWxmIGFsc28gZG9lc24ndCBzdXBwb3J0IE5NSS9NQ0UKIAkgKiBjb2RlIHByb2JpbmcsIGl0J3Mgbm90IGEgcHJvYmxlbS4KIAkgKi8KLQl0ZXh0X3Bva2Vfc21wKG9wLT5rcC5hZGRyLCBqbXBfY29kZSwgUkVMQVRJVkVKVU1QX1NJWkUpOwotCXJldHVybiAwOworCXRleHRfcG9rZV9zbXBfYmF0Y2goanVtcF9wb2tlX3BhcmFtcywgYyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fa3Byb2JlcyBzZXR1cF91bm9wdGltaXplX2twcm9iZShzdHJ1Y3QgdGV4dF9wb2tlX3BhcmFtICp0cHJtLAorCQkJCQkgICAgICB1OCAqaW5zbl9idWYsCisJCQkJCSAgICAgIHN0cnVjdCBvcHRpbWl6ZWRfa3Byb2JlICpvcCkKK3sKKwkvKiBTZXQgaW50MyB0byBmaXJzdCBieXRlIGZvciBrcHJvYmVzICovCisJaW5zbl9idWZbMF0gPSBCUkVBS1BPSU5UX0lOU1RSVUNUSU9OOworCW1lbWNweShpbnNuX2J1ZiArIDEsIG9wLT5vcHRpbnNuLmNvcGllZF9pbnNuLCBSRUxBVElWRV9BRERSX1NJWkUpOworCisJdHBybS0+YWRkciA9IG9wLT5rcC5hZGRyOworCXRwcm0tPm9wY29kZSA9IGluc25fYnVmOworCXRwcm0tPmxlbiA9IFJFTEFUSVZFSlVNUF9TSVpFOworfQorCisvKgorICogUmVjb3ZlciBvcmlnaW5hbCBpbnN0cnVjdGlvbnMgYW5kIGJyZWFrcG9pbnRzIGZyb20gcmVsYXRpdmUganVtcHMuCisgKiBDYWxsZXIgbXVzdCBjYWxsIHdpdGggbG9ja2luZyBrcHJvYmVfbXV0ZXguCisgKi8KK2V4dGVybiB2b2lkIGFyY2hfdW5vcHRpbWl6ZV9rcHJvYmVzKHN0cnVjdCBsaXN0X2hlYWQgKm9wbGlzdCwKKwkJCQkgICAgc3RydWN0IGxpc3RfaGVhZCAqZG9uZV9saXN0KQoreworCXN0cnVjdCBvcHRpbWl6ZWRfa3Byb2JlICpvcCwgKnRtcDsKKwlpbnQgYyA9IDA7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUob3AsIHRtcCwgb3BsaXN0LCBsaXN0KSB7CisJCS8qIFNldHVwIHBhcmFtICovCisJCXNldHVwX3Vub3B0aW1pemVfa3Byb2JlKCZqdW1wX3Bva2VfcGFyYW1zW2NdLAorCQkJCQlqdW1wX3Bva2VfYnVmc1tjXS5idWYsIG9wKTsKKwkJbGlzdF9tb3ZlKCZvcC0+bGlzdCwgZG9uZV9saXN0KTsKKwkJaWYgKCsrYyA+PSBNQVhfT1BUSU1JWkVfUFJPQkVTKQorCQkJYnJlYWs7CisJfQorCisJLyoKKwkgKiB0ZXh0X3Bva2Vfc21wIGRvZXNuJ3Qgc3VwcG9ydCBOTUkvTUNFIGNvZGUgbW9kaWZ5aW5nLgorCSAqIEhvd2V2ZXIsIHNpbmNlIGtwcm9iZXMgaXRzZWxmIGFsc28gZG9lc24ndCBzdXBwb3J0IE5NSS9NQ0UKKwkgKiBjb2RlIHByb2JpbmcsIGl0J3Mgbm90IGEgcHJvYmxlbS4KKwkgKi8KKwl0ZXh0X3Bva2Vfc21wX2JhdGNoKGp1bXBfcG9rZV9wYXJhbXMsIGMpOwogfQogCiAvKiBSZXBsYWNlIGEgcmVsYXRpdmUganVtcCB3aXRoIGEgYnJlYWtwb2ludCAoaW50MykuICAqLwpAQCAtMTQ1MywxMSArMTUyNiwzNSBAQAogCX0KIAlyZXR1cm4gMDsKIH0KKworc3RhdGljIGludCBfX2twcm9iZXMgaW5pdF9wb2tlX3BhcmFtcyh2b2lkKQoreworCS8qIEFsbG9jYXRlIGNvZGUgYnVmZmVyIGFuZCBwYXJhbWV0ZXIgYXJyYXkgKi8KKwlqdW1wX3Bva2VfYnVmcyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBqdW1wX3Bva2VfYnVmZmVyKSAqCisJCQkJIE1BWF9PUFRJTUlaRV9QUk9CRVMsIEdGUF9LRVJORUwpOworCWlmICghanVtcF9wb2tlX2J1ZnMpCisJCXJldHVybiAtRU5PTUVNOworCisJanVtcF9wb2tlX3BhcmFtcyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB0ZXh0X3Bva2VfcGFyYW0pICoKKwkJCQkgICBNQVhfT1BUSU1JWkVfUFJPQkVTLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWp1bXBfcG9rZV9wYXJhbXMpIHsKKwkJa2ZyZWUoanVtcF9wb2tlX2J1ZnMpOworCQlqdW1wX3Bva2VfYnVmcyA9IE5VTEw7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXJldHVybiAwOworfQorI2Vsc2UJLyogIUNPTkZJR19PUFRQUk9CRVMgKi8KK3N0YXRpYyBpbnQgX19rcHJvYmVzIGluaXRfcG9rZV9wYXJhbXModm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KICNlbmRpZgogCiBpbnQgX19pbml0IGFyY2hfaW5pdF9rcHJvYmVzKHZvaWQpCiB7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGluaXRfcG9rZV9wYXJhbXMoKTsKIH0KIAogaW50IF9fa3Byb2JlcyBhcmNoX3RyYW1wb2xpbmVfa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnApCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvbWljcm9jb2RlX2FtZC5jIGIvYXJjaC94ODYva2VybmVsL21pY3JvY29kZV9hbWQuYwppbmRleCBjZTBjYjQ3Li4wZmU2ZDFhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvbWljcm9jb2RlX2FtZC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9taWNyb2NvZGVfYW1kLmMKQEAgLTE1NSwxMiArMTU1LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBnZXRfdWNvZGVfZGF0YSh2b2lkICp0bywgY29uc3QgdTggKmZyb20sIHNpemVfdCBuKQotewotCW1lbWNweSh0bywgZnJvbSwgbik7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyB2b2lkICoKIGdldF9uZXh0X3Vjb2RlKGNvbnN0IHU4ICpidWYsIHVuc2lnbmVkIGludCBzaXplLCB1bnNpZ25lZCBpbnQgKm1jX3NpemUpCiB7CkBAIC0xNjgsOCArMTYyLDcgQEAKIAl1OCBzZWN0aW9uX2hkcltVQ09ERV9DT05UQUlORVJfU0VDVElPTl9IRFJdOwogCXZvaWQgKm1jOwogCi0JaWYgKGdldF91Y29kZV9kYXRhKHNlY3Rpb25faGRyLCBidWYsIFVDT0RFX0NPTlRBSU5FUl9TRUNUSU9OX0hEUikpCi0JCXJldHVybiBOVUxMOworCWdldF91Y29kZV9kYXRhKHNlY3Rpb25faGRyLCBidWYsIFVDT0RFX0NPTlRBSU5FUl9TRUNUSU9OX0hEUik7CiAKIAlpZiAoc2VjdGlvbl9oZHJbMF0gIT0gVUNPREVfVUNPREVfVFlQRSkgewogCQlwcl9lcnIoImVycm9yOiBpbnZhbGlkIHR5cGUgZmllbGQgaW4gY29udGFpbmVyIGZpbGUgc2VjdGlvbiBoZWFkZXJcbiIpOwpAQCAtMTgzLDE2ICsxNzYsMTMgQEAKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0JbWMgPSB2bWFsbG9jKFVDT0RFX01BWF9TSVpFKTsKLQlpZiAobWMpIHsKLQkJbWVtc2V0KG1jLCAwLCBVQ09ERV9NQVhfU0laRSk7Ci0JCWlmIChnZXRfdWNvZGVfZGF0YShtYywgYnVmICsgVUNPREVfQ09OVEFJTkVSX1NFQ1RJT05fSERSLAotCQkJCSAgIHRvdGFsX3NpemUpKSB7Ci0JCQl2ZnJlZShtYyk7Ci0JCQltYyA9IE5VTEw7Ci0JCX0gZWxzZQotCQkJKm1jX3NpemUgPSB0b3RhbF9zaXplICsgVUNPREVfQ09OVEFJTkVSX1NFQ1RJT05fSERSOwotCX0KKwltYyA9IHZ6YWxsb2MoVUNPREVfTUFYX1NJWkUpOworCWlmICghbWMpCisJCXJldHVybiBOVUxMOworCisJZ2V0X3Vjb2RlX2RhdGEobWMsIGJ1ZiArIFVDT0RFX0NPTlRBSU5FUl9TRUNUSU9OX0hEUiwgdG90YWxfc2l6ZSk7CisJKm1jX3NpemUgPSB0b3RhbF9zaXplICsgVUNPREVfQ09OVEFJTkVSX1NFQ1RJT05fSERSOworCiAJcmV0dXJuIG1jOwogfQogCkBAIC0yMDIsOCArMTkyLDcgQEAKIAl1bnNpZ25lZCBpbnQgKmJ1Zl9wb3MgPSAodW5zaWduZWQgaW50ICopY29udGFpbmVyX2hkcjsKIAl1bnNpZ25lZCBsb25nIHNpemU7CiAKLQlpZiAoZ2V0X3Vjb2RlX2RhdGEoJmNvbnRhaW5lcl9oZHIsIGJ1ZiwgVUNPREVfQ09OVEFJTkVSX0hFQURFUl9TSVpFKSkKLQkJcmV0dXJuIDA7CisJZ2V0X3Vjb2RlX2RhdGEoJmNvbnRhaW5lcl9oZHIsIGJ1ZiwgVUNPREVfQ09OVEFJTkVSX0hFQURFUl9TSVpFKTsKIAogCXNpemUgPSBidWZfcG9zWzJdOwogCkBAIC0yMTksMTAgKzIwOCw3IEBACiAJfQogCiAJYnVmICs9IFVDT0RFX0NPTlRBSU5FUl9IRUFERVJfU0laRTsKLQlpZiAoZ2V0X3Vjb2RlX2RhdGEoZXF1aXZfY3B1X3RhYmxlLCBidWYsIHNpemUpKSB7Ci0JCXZmcmVlKGVxdWl2X2NwdV90YWJsZSk7Ci0JCXJldHVybiAwOwotCX0KKwlnZXRfdWNvZGVfZGF0YShlcXVpdl9jcHVfdGFibGUsIGJ1Ziwgc2l6ZSk7CiAKIAlyZXR1cm4gc2l6ZSArIFVDT0RFX0NPTlRBSU5FUl9IRUFERVJfU0laRTsgLyogYWRkIGhlYWRlciBsZW5ndGggKi8KIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9tcHBhcnNlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvbXBwYXJzZS5jCmluZGV4IDlhZjY0ZDkuLjAxYjBmNmQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9tcHBhcnNlLmMKKysrIGIvYXJjaC94ODYva2VybmVsL21wcGFyc2UuYwpAQCAtMTE4LDIxICsxMTgsOCBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgTVBfaW9hcGljX2luZm8oc3RydWN0IG1wY19pb2FwaWMgKm0pCiB7Ci0JaWYgKCEobS0+ZmxhZ3MgJiBNUENfQVBJQ19VU0FCTEUpKQotCQlyZXR1cm47Ci0KLQlwcmludGsoS0VSTl9JTkZPICJJL08gQVBJQyAjJWQgVmVyc2lvbiAlZCBhdCAweCVYLlxuIiwKLQkgICAgICAgbS0+YXBpY2lkLCBtLT5hcGljdmVyLCBtLT5hcGljYWRkcik7Ci0KLQltcF9yZWdpc3Rlcl9pb2FwaWMobS0+YXBpY2lkLCBtLT5hcGljYWRkciwgZ3NpX3RvcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHByaW50X01QX2ludHNyY19pbmZvKHN0cnVjdCBtcGNfaW50c3JjICptKQotewotCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIkludDogdHlwZSAlZCwgcG9sICVkLCB0cmlnICVkLCBidXMgJTAyeCwiCi0JCSIgSVJRICUwMngsIEFQSUMgSUQgJXgsIEFQSUMgSU5UICUwMnhcbiIsCi0JCW0tPmlycXR5cGUsIG0tPmlycWZsYWcgJiAzLCAobS0+aXJxZmxhZyA+PiAyKSAmIDMsIG0tPnNyY2J1cywKLQkJbS0+c3JjYnVzaXJxLCBtLT5kc3RhcGljLCBtLT5kc3RpcnEpOworCWlmIChtLT5mbGFncyAmIE1QQ19BUElDX1VTQUJMRSkKKwkJbXBfcmVnaXN0ZXJfaW9hcGljKG0tPmFwaWNpZCwgbS0+YXBpY2FkZHIsIGdzaV90b3ApOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgcHJpbnRfbXBfaXJxX2luZm8oc3RydWN0IG1wY19pbnRzcmMgKm1wX2lycSkKQEAgLTE0NCw3MyArMTMxLDExIEBACiAJCW1wX2lycS0+c3JjYnVzaXJxLCBtcF9pcnEtPmRzdGFwaWMsIG1wX2lycS0+ZHN0aXJxKTsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IGFzc2lnbl90b19tcF9pcnEoc3RydWN0IG1wY19pbnRzcmMgKm0sCi0JCQkJICAgIHN0cnVjdCBtcGNfaW50c3JjICptcF9pcnEpCi17Ci0JbXBfaXJxLT5kc3RhcGljID0gbS0+ZHN0YXBpYzsKLQltcF9pcnEtPnR5cGUgPSBtLT50eXBlOwotCW1wX2lycS0+aXJxdHlwZSA9IG0tPmlycXR5cGU7Ci0JbXBfaXJxLT5pcnFmbGFnID0gbS0+aXJxZmxhZzsKLQltcF9pcnEtPnNyY2J1cyA9IG0tPnNyY2J1czsKLQltcF9pcnEtPnNyY2J1c2lycSA9IG0tPnNyY2J1c2lycTsKLQltcF9pcnEtPmRzdGlycSA9IG0tPmRzdGlycTsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0IGFzc2lnbl90b19tcGNfaW50c3JjKHN0cnVjdCBtcGNfaW50c3JjICptcF9pcnEsCi0JCQkJCXN0cnVjdCBtcGNfaW50c3JjICptKQotewotCW0tPmRzdGFwaWMgPSBtcF9pcnEtPmRzdGFwaWM7Ci0JbS0+dHlwZSA9IG1wX2lycS0+dHlwZTsKLQltLT5pcnF0eXBlID0gbXBfaXJxLT5pcnF0eXBlOwotCW0tPmlycWZsYWcgPSBtcF9pcnEtPmlycWZsYWc7Ci0JbS0+c3JjYnVzID0gbXBfaXJxLT5zcmNidXM7Ci0JbS0+c3JjYnVzaXJxID0gbXBfaXJxLT5zcmNidXNpcnE7Ci0JbS0+ZHN0aXJxID0gbXBfaXJxLT5kc3RpcnE7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IG1wX2lycV9tcGNfaW50c3JjX2NtcChzdHJ1Y3QgbXBjX2ludHNyYyAqbXBfaXJxLAotCQkJCQlzdHJ1Y3QgbXBjX2ludHNyYyAqbSkKLXsKLQlpZiAobXBfaXJxLT5kc3RhcGljICE9IG0tPmRzdGFwaWMpCi0JCXJldHVybiAxOwotCWlmIChtcF9pcnEtPnR5cGUgIT0gbS0+dHlwZSkKLQkJcmV0dXJuIDI7Ci0JaWYgKG1wX2lycS0+aXJxdHlwZSAhPSBtLT5pcnF0eXBlKQotCQlyZXR1cm4gMzsKLQlpZiAobXBfaXJxLT5pcnFmbGFnICE9IG0tPmlycWZsYWcpCi0JCXJldHVybiA0OwotCWlmIChtcF9pcnEtPnNyY2J1cyAhPSBtLT5zcmNidXMpCi0JCXJldHVybiA1OwotCWlmIChtcF9pcnEtPnNyY2J1c2lycSAhPSBtLT5zcmNidXNpcnEpCi0JCXJldHVybiA2OwotCWlmIChtcF9pcnEtPmRzdGlycSAhPSBtLT5kc3RpcnEpCi0JCXJldHVybiA3OwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBNUF9pbnRzcmNfaW5mbyhzdHJ1Y3QgbXBjX2ludHNyYyAqbSkKLXsKLQlpbnQgaTsKLQotCXByaW50X01QX2ludHNyY19pbmZvKG0pOwotCi0JZm9yIChpID0gMDsgaSA8IG1wX2lycV9lbnRyaWVzOyBpKyspIHsKLQkJaWYgKCFtcF9pcnFfbXBjX2ludHNyY19jbXAoJm1wX2lycXNbaV0sIG0pKQotCQkJcmV0dXJuOwotCX0KLQotCWFzc2lnbl90b19tcF9pcnEobSwgJm1wX2lycXNbbXBfaXJxX2VudHJpZXNdKTsKLQlpZiAoKyttcF9pcnFfZW50cmllcyA9PSBNQVhfSVJRX1NPVVJDRVMpCi0JCXBhbmljKCJNYXggIyBvZiBpcnEgc291cmNlcyBleGNlZWRlZCEhXG4iKTsKLX0KICNlbHNlIC8qIENPTkZJR19YODZfSU9fQVBJQyAqLwogc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBNUF9idXNfaW5mbyhzdHJ1Y3QgbXBjX2J1cyAqbSkge30KIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgTVBfaW9hcGljX2luZm8oc3RydWN0IG1wY19pb2FwaWMgKm0pIHt9Ci1zdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IE1QX2ludHNyY19pbmZvKHN0cnVjdCBtcGNfaW50c3JjICptKSB7fQogI2VuZGlmIC8qIENPTkZJR19YODZfSU9fQVBJQyAqLwogCi0KIHN0YXRpYyB2b2lkIF9faW5pdCBNUF9saW50c3JjX2luZm8oc3RydWN0IG1wY19saW50c3JjICptKQogewogCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIkxpbnQ6IHR5cGUgJWQsIHBvbCAlZCwgdHJpZyAlZCwgYnVzICUwMngsIgpAQCAtMjIyLDcgKzE0Nyw2IEBACiAvKgogICogUmVhZC9wYXJzZSB0aGUgTVBDCiAgKi8KLQogc3RhdGljIGludCBfX2luaXQgc21wX2NoZWNrX21wYyhzdHJ1Y3QgbXBjX3RhYmxlICptcGMsIGNoYXIgKm9lbSwgY2hhciAqc3RyKQogewogCkBAIC0yNzUsMTggKzE5OSw2IEBACiAKIHZvaWQgX19pbml0IGRlZmF1bHRfc21wX3JlYWRfbXBjX29lbShzdHJ1Y3QgbXBjX3RhYmxlICptcGMpIHsgfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgc21wX3JlZ2lzdGVyX2xhcGljX2FkZHJlc3ModW5zaWduZWQgbG9uZyBhZGRyZXNzKQotewotCW1wX2xhcGljX2FkZHIgPSBhZGRyZXNzOwotCi0Jc2V0X2ZpeG1hcF9ub2NhY2hlKEZJWF9BUElDX0JBU0UsIGFkZHJlc3MpOwotCWlmIChib290X2NwdV9waHlzaWNhbF9hcGljaWQgPT0gLTFVKSB7Ci0JCWJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCAgPSByZWFkX2FwaWNfaWQoKTsKLQkJYXBpY192ZXJzaW9uW2Jvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZF0gPQotCQkJIEdFVF9BUElDX1ZFUlNJT04oYXBpY19yZWFkKEFQSUNfTFZSKSk7Ci0JfQotfQotCiBzdGF0aWMgaW50IF9faW5pdCBzbXBfcmVhZF9tcGMoc3RydWN0IG1wY190YWJsZSAqbXBjLCB1bnNpZ25lZCBlYXJseSkKIHsKIAljaGFyIHN0clsxNl07CkBAIC0zMDEsMTcgKzIxMywxMyBAQAogI2lmZGVmIENPTkZJR19YODZfMzIKIAlnZW5lcmljX21wc19vZW1fY2hlY2sobXBjLCBvZW0sIHN0cik7CiAjZW5kaWYKLQkvKiBzYXZlIHRoZSBsb2NhbCBBUElDIGFkZHJlc3MsIGl0IG1pZ2h0IGJlIG5vbi1kZWZhdWx0ICovCisJLyogSW5pdGlhbGl6ZSB0aGUgbGFwaWMgbWFwcGluZyAqLwogCWlmICghYWNwaV9sYXBpYykKLQkJbXBfbGFwaWNfYWRkciA9IG1wYy0+bGFwaWM7CisJCXJlZ2lzdGVyX2xhcGljX2FkZHJlc3MobXBjLT5sYXBpYyk7CiAKIAlpZiAoZWFybHkpCiAJCXJldHVybiAxOwogCi0JLyogSW5pdGlhbGl6ZSB0aGUgbGFwaWMgbWFwcGluZyAqLwotCWlmICghYWNwaV9sYXBpYykKLQkJc21wX3JlZ2lzdGVyX2xhcGljX2FkZHJlc3MobXBjLT5sYXBpYyk7Ci0KIAlpZiAobXBjLT5vZW1wdHIpCiAJCXg4Nl9pbml0Lm1wcGFyc2Uuc21wX3JlYWRfbXBjX29lbShtcGMpOwogCkBAIC0zMzcsNyArMjQ1LDcgQEAKIAkJCXNraXBfZW50cnkoJm1wdCwgJmNvdW50LCBzaXplb2Yoc3RydWN0IG1wY19pb2FwaWMpKTsKIAkJCWJyZWFrOwogCQljYXNlIE1QX0lOVFNSQzoKLQkJCU1QX2ludHNyY19pbmZvKChzdHJ1Y3QgbXBjX2ludHNyYyAqKW1wdCk7CisJCQltcF9zYXZlX2lycSgoc3RydWN0IG1wY19pbnRzcmMgKiltcHQpOwogCQkJc2tpcF9lbnRyeSgmbXB0LCAmY291bnQsIHNpemVvZihzdHJ1Y3QgbXBjX2ludHNyYykpOwogCQkJYnJlYWs7CiAJCWNhc2UgTVBfTElOVFNSQzoKQEAgLTQyOSwxMyArMzM3LDEzIEBACiAKIAkJaW50c3JjLnNyY2J1c2lycSA9IGk7CiAJCWludHNyYy5kc3RpcnEgPSBpID8gaSA6IDI7CS8qIElSUTAgdG8gSU5USU4yICovCi0JCU1QX2ludHNyY19pbmZvKCZpbnRzcmMpOworCQltcF9zYXZlX2lycSgmaW50c3JjKTsKIAl9CiAKIAlpbnRzcmMuaXJxdHlwZSA9IG1wX0V4dElOVDsKIAlpbnRzcmMuc3JjYnVzaXJxID0gMDsKIAlpbnRzcmMuZHN0aXJxID0gMDsJLyogODI1OUEgdG8gSU5USU4wICovCi0JTVBfaW50c3JjX2luZm8oJmludHNyYyk7CisJbXBfc2F2ZV9pcnEoJmludHNyYyk7CiB9CiAKIApAQCAtNzg0LDExICs2OTIsMTEgQEAKIAlpbnQgaTsKIAogCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIk9MRCAiKTsKLQlwcmludF9NUF9pbnRzcmNfaW5mbyhtKTsKKwlwcmludF9tcF9pcnFfaW5mbyhtKTsKIAogCWkgPSBnZXRfTVBfaW50c3JjX2luZGV4KG0pOwogCWlmIChpID4gMCkgewotCQlhc3NpZ25fdG9fbXBjX2ludHNyYygmbXBfaXJxc1tpXSwgbSk7CisJCW1lbWNweShtLCAmbXBfaXJxc1tpXSwgc2l6ZW9mKCptKSk7CiAJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIk5FVyAiKTsKIAkJcHJpbnRfbXBfaXJxX2luZm8oJm1wX2lycXNbaV0pOwogCQlyZXR1cm47CkBAIC04NzUsMTQgKzc4MywxNCBAQAogCQlpZiAobnJfbV9zcGFyZSA+IDApIHsKIAkJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIipORVcqIGZvdW5kXG4iKTsKIAkJCW5yX21fc3BhcmUtLTsKLQkJCWFzc2lnbl90b19tcGNfaW50c3JjKCZtcF9pcnFzW2ldLCBtX3NwYXJlW25yX21fc3BhcmVdKTsKKwkJCW1lbWNweShtX3NwYXJlW25yX21fc3BhcmVdLCAmbXBfaXJxc1tpXSwgc2l6ZW9mKG1wX2lycXNbaV0pKTsKIAkJCW1fc3BhcmVbbnJfbV9zcGFyZV0gPSBOVUxMOwogCQl9IGVsc2UgewogCQkJc3RydWN0IG1wY19pbnRzcmMgKm0gPSAoc3RydWN0IG1wY19pbnRzcmMgKiltcHQ7CiAJCQljb3VudCArPSBzaXplb2Yoc3RydWN0IG1wY19pbnRzcmMpOwogCQkJaWYgKGNoZWNrX3Nsb3QobXBjX25ld19waHlzLCBtcGNfbmV3X2xlbmd0aCwgY291bnQpIDwgMCkKIAkJCQlnb3RvIG91dDsKLQkJCWFzc2lnbl90b19tcGNfaW50c3JjKCZtcF9pcnFzW2ldLCBtKTsKKwkJCW1lbWNweShtLCAmbXBfaXJxc1tpXSwgc2l6ZW9mKCptKSk7CiAJCQltcGMtPmxlbmd0aCA9IGNvdW50OwogCQkJbXB0ICs9IHNpemVvZihzdHJ1Y3QgbXBjX2ludHNyYyk7CiAJCX0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wY2ktZ2FydF82NC5jIGIvYXJjaC94ODYva2VybmVsL3BjaS1nYXJ0XzY0LmMKaW5kZXggYmEwZjBjYS4uYzAxZmZhNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3BjaS1nYXJ0XzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3BjaS1nYXJ0XzY0LmMKQEAgLTE0Myw3ICsxNDMsNyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmlvbW11X2JpdG1hcF9sb2NrLCBmbGFncyk7CiAJaWYgKG5lZWRfZmx1c2gpIHsKLQkJazhfZmx1c2hfZ2FydHMoKTsKKwkJYW1kX2ZsdXNoX2dhcnRzKCk7CiAJCW5lZWRfZmx1c2ggPSBmYWxzZTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9tbXVfYml0bWFwX2xvY2ssIGZsYWdzKTsKQEAgLTU2MSwxNyArNTYxLDE3IEBACiB7CiAJaW50IGk7CiAKLQlpZiAoIWs4X25vcnRoYnJpZGdlcy5nYXJ0X3N1cHBvcnRlZCkKKwlpZiAoIWFtZF9uYl9oYXNfZmVhdHVyZShBTURfTkJfR0FSVCkpCiAJCXJldHVybjsKIAotCWZvciAoaSA9IDA7IGkgPCBrOF9ub3J0aGJyaWRnZXMubnVtOyBpKyspIHsKLQkJc3RydWN0IHBjaV9kZXYgKmRldiA9IGs4X25vcnRoYnJpZGdlcy5uYl9taXNjW2ldOworCWZvciAoaSA9IDA7IGkgPCBhbWRfbmJfbnVtKCk7IGkrKykgeworCQlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gbm9kZV90b19hbWRfbmIoaSktPm1pc2M7CiAKIAkJZW5hYmxlX2dhcnRfdHJhbnNsYXRpb24oZGV2LCBfX3BhKGFncF9nYXR0X3RhYmxlKSk7CiAJfQogCiAJLyogRmx1c2ggdGhlIEdBUlQtVExCIHRvIHJlbW92ZSBzdGFsZSBlbnRyaWVzICovCi0JazhfZmx1c2hfZ2FydHMoKTsKKwlhbWRfZmx1c2hfZ2FydHMoKTsKIH0KIAogLyoKQEAgLTU5NiwxMyArNTk2LDEzIEBACiAJaWYgKCFmaXhfdXBfbm9ydGhfYnJpZGdlcykKIAkJcmV0dXJuOwogCi0JaWYgKCFrOF9ub3J0aGJyaWRnZXMuZ2FydF9zdXBwb3J0ZWQpCisJaWYgKCFhbWRfbmJfaGFzX2ZlYXR1cmUoQU1EX05CX0dBUlQpKQogCQlyZXR1cm47CiAKIAlwcl9pbmZvKCJQQ0ktRE1BOiBSZXN0b3JpbmcgR0FSVCBhcGVydHVyZSBzZXR0aW5nc1xuIik7CiAKLQlmb3IgKGkgPSAwOyBpIDwgazhfbm9ydGhicmlkZ2VzLm51bTsgaSsrKSB7Ci0JCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBrOF9ub3J0aGJyaWRnZXMubmJfbWlzY1tpXTsKKwlmb3IgKGkgPSAwOyBpIDwgYW1kX25iX251bSgpOyBpKyspIHsKKwkJc3RydWN0IHBjaV9kZXYgKmRldiA9IG5vZGVfdG9fYW1kX25iKGkpLT5taXNjOwogCiAJCS8qCiAJCSAqIERvbid0IGVuYWJsZSB0cmFuc2xhdGlvbnMganVzdCB5ZXQuICBUaGF0IGlzIHRoZSBuZXh0CkBAIC02NDQsNyArNjQ0LDcgQEAKICAqIFByaXZhdGUgTm9ydGhicmlkZ2UgR0FUVCBpbml0aWFsaXphdGlvbiBpbiBjYXNlIHdlIGNhbm5vdCB1c2UgdGhlCiAgKiBBR1AgZHJpdmVyIGZvciBzb21lIHJlYXNvbi4KICAqLwotc3RhdGljIF9faW5pdCBpbnQgaW5pdF9rOF9nYXR0KHN0cnVjdCBhZ3Bfa2Vybl9pbmZvICppbmZvKQorc3RhdGljIF9faW5pdCBpbnQgaW5pdF9hbWRfZ2F0dChzdHJ1Y3QgYWdwX2tlcm5faW5mbyAqaW5mbykKIHsKIAl1bnNpZ25lZCBhcGVyX3NpemUsIGdhdHRfc2l6ZSwgbmV3X2FwZXJfc2l6ZTsKIAl1bnNpZ25lZCBhcGVyX2Jhc2UsIG5ld19hcGVyX2Jhc2U7CkBAIC02NTYsOCArNjU2LDggQEAKIAogCWFwZXJfc2l6ZSA9IGFwZXJfYmFzZSA9IGluZm8tPmFwZXJfc2l6ZSA9IDA7CiAJZGV2ID0gTlVMTDsKLQlmb3IgKGkgPSAwOyBpIDwgazhfbm9ydGhicmlkZ2VzLm51bTsgaSsrKSB7Ci0JCWRldiA9IGs4X25vcnRoYnJpZGdlcy5uYl9taXNjW2ldOworCWZvciAoaSA9IDA7IGkgPCBhbWRfbmJfbnVtKCk7IGkrKykgeworCQlkZXYgPSBub2RlX3RvX2FtZF9uYihpKS0+bWlzYzsKIAkJbmV3X2FwZXJfYmFzZSA9IHJlYWRfYXBlcnR1cmUoZGV2LCAmbmV3X2FwZXJfc2l6ZSk7CiAJCWlmICghbmV3X2FwZXJfYmFzZSkKIAkJCWdvdG8gbm9tbXU7CkBAIC03MjUsMTMgKzcyNSwxMyBAQAogCWlmICghbm9fYWdwKQogCQlyZXR1cm47CiAKLQlpZiAoIWs4X25vcnRoYnJpZGdlcy5nYXJ0X3N1cHBvcnRlZCkKKwlpZiAoIWFtZF9uYl9oYXNfZmVhdHVyZShBTURfTkJfR0FSVCkpCiAJCXJldHVybjsKIAotCWZvciAoaSA9IDA7IGkgPCBrOF9ub3J0aGJyaWRnZXMubnVtOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgYW1kX25iX251bSgpOyBpKyspIHsKIAkJdTMyIGN0bDsKIAotCQlkZXYgPSBrOF9ub3J0aGJyaWRnZXMubmJfbWlzY1tpXTsKKwkJZGV2ID0gbm9kZV90b19hbWRfbmIoaSktPm1pc2M7CiAJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIEFNRDY0X0dBUlRBUEVSVFVSRUNUTCwgJmN0bCk7CiAKIAkJY3RsICY9IH5HQVJURU47CkBAIC03NDksMTQgKzc0OSwxNCBAQAogCXVuc2lnbmVkIGxvbmcgc2NyYXRjaDsKIAlsb25nIGk7CiAKLQlpZiAoIWs4X25vcnRoYnJpZGdlcy5nYXJ0X3N1cHBvcnRlZCkKKwlpZiAoIWFtZF9uYl9oYXNfZmVhdHVyZShBTURfTkJfR0FSVCkpCiAJCXJldHVybiAwOwogCiAjaWZuZGVmIENPTkZJR19BR1BfQU1ENjQKIAlub19hZ3AgPSAxOwogI2Vsc2UKIAkvKiBNYWtlZmlsZSBwdXRzIFBDSSBpbml0aWFsaXphdGlvbiB2aWEgc3Vic3lzX2luaXRjYWxsIGZpcnN0LiAqLwotCS8qIEFkZCBvdGhlciBLOCBBR1AgYnJpZGdlIGRyaXZlcnMgaGVyZSAqLworCS8qIEFkZCBvdGhlciBBTUQgQUdQIGJyaWRnZSBkcml2ZXJzIGhlcmUgKi8KIAlub19hZ3AgPSBub19hZ3AgfHwKIAkJKGFncF9hbWQ2NF9pbml0KCkgPCAwKSB8fAogCQkoYWdwX2NvcHlfaW5mbyhhZ3BfYnJpZGdlLCAmaW5mbykgPCAwKTsKQEAgLTc2NSw3ICs3NjUsNyBAQAogCWlmIChub19pb21tdSB8fAogCSAgICAoIWZvcmNlX2lvbW11ICYmIG1heF9wZm4gPD0gTUFYX0RNQTMyX1BGTikgfHwKIAkgICAgIWdhcnRfaW9tbXVfYXBlcnR1cmUgfHwKLQkgICAgKG5vX2FncCAmJiBpbml0X2s4X2dhdHQoJmluZm8pIDwgMCkpIHsKKwkgICAgKG5vX2FncCAmJiBpbml0X2FtZF9nYXR0KCZpbmZvKSA8IDApKSB7CiAJCWlmIChtYXhfcGZuID4gTUFYX0RNQTMyX1BGTikgewogCQkJcHJfd2FybmluZygiTW9yZSB0aGFuIDRHQiBvZiBtZW1vcnkgYnV0IEdBUlQgSU9NTVUgbm90IGF2YWlsYWJsZS5cbiIpOwogCQkJcHJfd2FybmluZygiZmFsbGluZyBiYWNrIHRvIGlvbW11PXNvZnQuXG4iKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDU3ZDE4NjguLjA5YzA4YTEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYwpAQCAtOTEsOCArOTEsNyBAQAogdm9pZCBzaG93X3JlZ3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJc2hvd19yZWdpc3RlcnMocmVncyk7Ci0Jc2hvd190cmFjZShOVUxMLCByZWdzLCAodW5zaWduZWQgbG9uZyAqKWtlcm5lbF9zdGFja19wb2ludGVyKHJlZ3MpLAotCQkgICByZWdzLT5icCk7CisJc2hvd190cmFjZShOVUxMLCByZWdzLCAodW5zaWduZWQgbG9uZyAqKWtlcm5lbF9zdGFja19wb2ludGVyKHJlZ3MpKTsKIH0KIAogdm9pZCBzaG93X3JlZ3NfY29tbW9uKHZvaWQpCkBAIC0zNzQsNiArMzczLDcgQEAKIHsKIAlpZiAoaGx0X3VzZV9oYWx0KCkpIHsKIAkJdHJhY2VfcG93ZXJfc3RhcnQoUE9XRVJfQ1NUQVRFLCAxLCBzbXBfcHJvY2Vzc29yX2lkKCkpOworCQl0cmFjZV9jcHVfaWRsZSgxLCBzbXBfcHJvY2Vzc29yX2lkKCkpOwogCQljdXJyZW50X3RocmVhZF9pbmZvKCktPnN0YXR1cyAmPSB+VFNfUE9MTElORzsKIAkJLyoKIAkJICogVFNfUE9MTElORy1jbGVhcmVkIHN0YXRlIG11c3QgYmUgdmlzaWJsZSBiZWZvcmUgd2UKQEAgLTQ0NCw4ICs0NDQsOSBAQAogdm9pZCBtd2FpdF9pZGxlX3dpdGhfaGludHModW5zaWduZWQgbG9uZyBheCwgdW5zaWduZWQgbG9uZyBjeCkKIHsKIAl0cmFjZV9wb3dlcl9zdGFydChQT1dFUl9DU1RBVEUsIChheD4+NCkrMSwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwl0cmFjZV9jcHVfaWRsZSgoYXg+PjQpKzEsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CiAJaWYgKCFuZWVkX3Jlc2NoZWQoKSkgewotCQlpZiAoY3B1X2hhcygmY3VycmVudF9jcHVfZGF0YSwgWDg2X0ZFQVRVUkVfQ0xGTFVTSF9NT05JVE9SKSkKKwkJaWYgKGNwdV9oYXMoX190aGlzX2NwdV9wdHIoJmNwdV9pbmZvKSwgWDg2X0ZFQVRVUkVfQ0xGTFVTSF9NT05JVE9SKSkKIAkJCWNsZmx1c2goKHZvaWQgKikmY3VycmVudF90aHJlYWRfaW5mbygpLT5mbGFncyk7CiAKIAkJX19tb25pdG9yKCh2b2lkICopJmN1cnJlbnRfdGhyZWFkX2luZm8oKS0+ZmxhZ3MsIDAsIDApOwpAQCAtNDYwLDcgKzQ2MSw4IEBACiB7CiAJaWYgKCFuZWVkX3Jlc2NoZWQoKSkgewogCQl0cmFjZV9wb3dlcl9zdGFydChQT1dFUl9DU1RBVEUsIDEsIHNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0JCWlmIChjcHVfaGFzKCZjdXJyZW50X2NwdV9kYXRhLCBYODZfRkVBVFVSRV9DTEZMVVNIX01PTklUT1IpKQorCQl0cmFjZV9jcHVfaWRsZSgxLCBzbXBfcHJvY2Vzc29yX2lkKCkpOworCQlpZiAoY3B1X2hhcyhfX3RoaXNfY3B1X3B0cigmY3B1X2luZm8pLCBYODZfRkVBVFVSRV9DTEZMVVNIX01PTklUT1IpKQogCQkJY2xmbHVzaCgodm9pZCAqKSZjdXJyZW50X3RocmVhZF9pbmZvKCktPmZsYWdzKTsKIAogCQlfX21vbml0b3IoKHZvaWQgKikmY3VycmVudF90aHJlYWRfaW5mbygpLT5mbGFncywgMCwgMCk7CkBAIC00ODEsMTAgKzQ4MywxMiBAQAogc3RhdGljIHZvaWQgcG9sbF9pZGxlKHZvaWQpCiB7CiAJdHJhY2VfcG93ZXJfc3RhcnQoUE9XRVJfQ1NUQVRFLCAwLCBzbXBfcHJvY2Vzc29yX2lkKCkpOworCXRyYWNlX2NwdV9pZGxlKDAsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CiAJbG9jYWxfaXJxX2VuYWJsZSgpOwogCXdoaWxlICghbmVlZF9yZXNjaGVkKCkpCiAJCWNwdV9yZWxheCgpOwotCXRyYWNlX3Bvd2VyX2VuZCgwKTsKKwl0cmFjZV9wb3dlcl9lbmQoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwl0cmFjZV9jcHVfaWRsZShQV1JfRVZFTlRfRVhJVCwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc18zMi5jCmluZGV4IDk2NTg2YzMuLjRiOWJlZmEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfMzIuYwpAQCAtMTEzLDggKzExMyw4IEBACiAJCQlzdG9wX2NyaXRpY2FsX3RpbWluZ3MoKTsKIAkJCXBtX2lkbGUoKTsKIAkJCXN0YXJ0X2NyaXRpY2FsX3RpbWluZ3MoKTsKLQogCQkJdHJhY2VfcG93ZXJfZW5kKHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJCQl0cmFjZV9jcHVfaWRsZShQV1JfRVZFTlRfRVhJVCwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAkJfQogCQl0aWNrX25vaHpfcmVzdGFydF9zY2hlZF90aWNrKCk7CiAJCXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWQoKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc182NC5jCmluZGV4IGIzZDdhM2EuLjRjODE4YTcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfNjQuYwpAQCAtMTQyLDYgKzE0Miw4IEBACiAJCQlzdGFydF9jcml0aWNhbF90aW1pbmdzKCk7CiAKIAkJCXRyYWNlX3Bvd2VyX2VuZChzbXBfcHJvY2Vzc29yX2lkKCkpOworCQkJdHJhY2VfY3B1X2lkbGUoUFdSX0VWRU5UX0VYSVQsCisJCQkJICAgICAgIHNtcF9wcm9jZXNzb3JfaWQoKSk7CiAKIAkJCS8qIEluIG1hbnkgY2FzZXMgdGhlIGludGVycnVwdCB0aGF0IGVuZGVkIGlkbGUKIAkJCSAgIGhhcyBhbHJlYWR5IGNhbGxlZCBleGl0X2lkbGUuIEJ1dCBzb21lIGlkbGUKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9yZWJvb3RfZml4dXBzXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvcmVib290X2ZpeHVwc18zMi5jCmluZGV4IGZkYTMxM2UuLmM4ZTQxZTkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9yZWJvb3RfZml4dXBzXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3JlYm9vdF9maXh1cHNfMzIuYwpAQCAtNDMsMTcgKzQzLDMzIEBACiAJb3V0YigxLCAweDkyKTsKIH0KIAorc3RhdGljIHZvaWQgY2U0MTAwX3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeworCQlvdXRiKDB4MiwgMHhjZjkpOworCQl1ZGVsYXkoNTApOworCX0KK30KKwogc3RydWN0IGRldmljZV9maXh1cCB7CiAJdW5zaWduZWQgaW50IHZlbmRvcjsKIAl1bnNpZ25lZCBpbnQgZGV2aWNlOwogCXZvaWQgKCpyZWJvb3RfZml4dXApKHN0cnVjdCBwY2lfZGV2ICopOwogfTsKIAorLyoKKyAqIFBDSSBpZHMgc29sZWx5IHVzZWQgZm9yIGZpeHVwc190YWJsZSBnbyBoZXJlCisgKi8KKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9DRTQxMDAJMHgwNzA4CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2aWNlX2ZpeHVwIGZpeHVwc190YWJsZVtdID0gewogeyBQQ0lfVkVORE9SX0lEX0NZUklYLCBQQ0lfREVWSUNFX0lEX0NZUklYXzU1MzBfTEVHQUNZLCBjczU1MzBhX3dhcm1fcmVzZXQgfSwKIHsgUENJX1ZFTkRPUl9JRF9BTUQsIFBDSV9ERVZJQ0VfSURfQU1EX0NTNTUzNl9JU0EsIGNzNTUzNl93YXJtX3Jlc2V0IH0sCiB7IFBDSV9WRU5ET1JfSURfTlMsIFBDSV9ERVZJQ0VfSURfTlNfU0MxMTAwX0JSSURHRSwgY3M1NTMwYV93YXJtX3Jlc2V0IH0sCiB7IFBDSV9WRU5ET1JfSURfUkRDLCBQQ0lfREVWSUNFX0lEX1JEQ19SNjAzMCwgcmRjMzIxeF9yZXNldCB9LAoreyBQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMX0NFNDEwMCwgY2U0MTAwX3Jlc2V0IH0sCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3NldHVwLmMgYi9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYwppbmRleCBhMGY1MmFmLi5kM2NmZTI2YyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3NldHVwLmMKQEAgLTcwNSw3ICs3MDUsNyBAQAogdm9pZCBfX2luaXQgc2V0dXBfYXJjaChjaGFyICoqY21kbGluZV9wKQogewogCWludCBhY3BpID0gMDsKLQlpbnQgazggPSAwOworCWludCBhbWQgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKICNpZmRlZiBDT05GSUdfWDg2XzMyCkBAIC05OTEsMTIgKzk5MSwxMiBAQAogCWFjcGkgPSBhY3BpX251bWFfaW5pdCgpOwogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfSzhfTlVNQQorI2lmZGVmIENPTkZJR19BTURfTlVNQQogCWlmICghYWNwaSkKLQkJazggPSAhazhfbnVtYV9pbml0KDAsIG1heF9wZm4pOworCQlhbWQgPSAhYW1kX251bWFfaW5pdCgwLCBtYXhfcGZuKTsKICNlbmRpZgogCi0JaW5pdG1lbV9pbml0KDAsIG1heF9wZm4sIGFjcGksIGs4KTsKKwlpbml0bWVtX2luaXQoMCwgbWF4X3BmbiwgYWNwaSwgYW1kKTsKIAltZW1ibG9ja19maW5kX2RtYV9yZXNlcnZlKCk7CiAJZG1hMzJfcmVzZXJ2ZV9ib290bWVtKCk7CiAKQEAgLTEwNDUsMTAgKzEwNDUsNyBAQAogI2VuZGlmCiAKIAlpbml0X2FwaWNfbWFwcGluZ3MoKTsKLQlpb2FwaWNfaW5pdF9tYXBwaW5ncygpOwotCi0JLyogbmVlZCB0byB3YWl0IGZvciBpb19hcGljIGlzIG1hcHBlZCAqLwotCXByb2JlX25yX2lycXNfZ3NpKCk7CisJaW9hcGljX2FuZF9nc2lfaW5pdCgpOwogCiAJa3ZtX2d1ZXN0X2luaXQoKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYyBiL2FyY2gveDg2L2tlcm5lbC9zbXBib290LmMKaW5kZXggMDgzZTk5ZC4uYzcxNDljOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jCkBAIC0yODEsNiArMjgxLDEzIEBACiAJICovCiAJc21wX3N0b3JlX2NwdV9pbmZvKGNwdWlkKTsKIAorCS8qCisJICogVGhpcyBtdXN0IGJlIGRvbmUgYmVmb3JlIHNldHRpbmcgY3B1X29ubGluZV9tYXNrCisJICogb3IgY2FsbGluZyBub3RpZnlfY3B1X3N0YXJ0aW5nLgorCSAqLworCXNldF9jcHVfc2libGluZ19tYXAocmF3X3NtcF9wcm9jZXNzb3JfaWQoKSk7CisJd21iKCk7CisKIAlub3RpZnlfY3B1X3N0YXJ0aW5nKGNwdWlkKTsKIAogCS8qCkBAIC0zMTYsMTYgKzMyMyw2IEBACiAJICovCiAJY2hlY2tfdHNjX3N5bmNfdGFyZ2V0KCk7CiAKLQlpZiAobm1pX3dhdGNoZG9nID09IE5NSV9JT19BUElDKSB7Ci0JCWxlZ2FjeV9waWMtPm1hc2soMCk7Ci0JCWVuYWJsZV9OTUlfdGhyb3VnaF9MVlQwKCk7Ci0JCWxlZ2FjeV9waWMtPnVubWFzaygwKTsKLQl9Ci0KLQkvKiBUaGlzIG11c3QgYmUgZG9uZSBiZWZvcmUgc2V0dGluZyBjcHVfb25saW5lX21hc2sgKi8KLQlzZXRfY3B1X3NpYmxpbmdfbWFwKHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpOwotCXdtYigpOwotCiAJLyoKIAkgKiBXZSBuZWVkIHRvIGhvbGQgY2FsbF9sb2NrLCBzbyB0aGVyZSBpcyBubyBpbmNvbnNpc3RlbmN5CiAJICogYmV0d2VlbiB0aGUgdGltZSBzbXBfY2FsbF9mdW5jdGlvbigpIGRldGVybWluZXMgbnVtYmVyIG9mCkBAIC00MzAsNyArNDI3LDcgQEAKIAogCWNwdW1hc2tfc2V0X2NwdShjcHUsIGMtPmxsY19zaGFyZWRfbWFwKTsKIAotCWlmIChjdXJyZW50X2NwdV9kYXRhLng4Nl9tYXhfY29yZXMgPT0gMSkgeworCWlmIChfX3RoaXNfY3B1X3JlYWQoY3B1X2luZm8ueDg2X21heF9jb3JlcykgPT0gMSkgewogCQljcHVtYXNrX2NvcHkoY3B1X2NvcmVfbWFzayhjcHUpLCBjcHVfc2libGluZ19tYXNrKGNwdSkpOwogCQljLT5ib290ZWRfY29yZXMgPSAxOwogCQlyZXR1cm47CkBAIC0xMDYxLDggKzEwNTgsNiBAQAogCQlwcmludGsoS0VSTl9JTkZPICJTTVAgbW9kZSBkZWFjdGl2YXRlZC5cbiIpOwogCQlzbXBib290X2NsZWFyX2lvX2FwaWMoKTsKIAotCQlsb2NhbGlzZV9ubWlfd2F0Y2hkb2coKTsKLQogCQljb25uZWN0X2JzcF9BUElDKCk7CiAJCXNldHVwX2xvY2FsX0FQSUMoKTsKIAkJZW5kX2xvY2FsX0FQSUNfc2V0dXAoKTsKQEAgLTEwOTQsNyArMTA4OSw3IEBACiAKIAlwcmVlbXB0X2Rpc2FibGUoKTsKIAlzbXBfY3B1X2luZGV4X2RlZmF1bHQoKTsKLQljdXJyZW50X2NwdV9kYXRhID0gYm9vdF9jcHVfZGF0YTsKKwltZW1jcHkoX190aGlzX2NwdV9wdHIoJmNwdV9pbmZvKSwgJmJvb3RfY3B1X2RhdGEsIHNpemVvZihjcHVfaW5mbykpOwogCWNwdW1hc2tfY29weShjcHVfY2FsbGluX21hc2ssIGNwdW1hc2tfb2YoMCkpOwogCW1iKCk7CiAJLyoKQEAgLTExNjYsNiArMTE2MSwyMCBAQAogCXByZWVtcHRfZW5hYmxlKCk7CiB9CiAKK3ZvaWQgYXJjaF9kaXNhYmxlX25vbmJvb3RfY3B1c19iZWdpbih2b2lkKQoreworCS8qCisJICogQXZvaWQgdGhlIHNtcCBhbHRlcm5hdGl2ZXMgc3dpdGNoIGR1cmluZyB0aGUgZGlzYWJsZV9ub25ib290X2NwdXMoKS4KKwkgKiBJbiB0aGUgc3VzcGVuZCBwYXRoLCB3ZSB3aWxsIGJlIGJhY2sgaW4gdGhlIFNNUCBtb2RlIHNob3J0bHkgYW55d2F5cy4KKwkgKi8KKwlza2lwX3NtcF9hbHRlcm5hdGl2ZXMgPSB0cnVlOworfQorCit2b2lkIGFyY2hfZGlzYWJsZV9ub25ib290X2NwdXNfZW5kKHZvaWQpCit7CisJc2tpcF9zbXBfYWx0ZXJuYXRpdmVzID0gZmFsc2U7Cit9CisKIHZvaWQgYXJjaF9lbmFibGVfbm9uYm9vdF9jcHVzX2JlZ2luKHZvaWQpCiB7CiAJc2V0X210cnJfYXBzX2RlbGF5ZWRfaW5pdCgpOwpAQCAtMTE5Niw3ICsxMjA1LDYgQEAKICNpZmRlZiBDT05GSUdfWDg2X0lPX0FQSUMKIAlzZXR1cF9pb2FwaWNfZGVzdCgpOwogI2VuZGlmCi0JY2hlY2tfbm1pX3dhdGNoZG9nKCk7CiAJbXRycl9hcHNfaW5pdCgpOwogfQogCkBAIC0xMzQxLDggKzEzNDksNiBAQAogCWlmIChjcHUgPT0gMCkKIAkJcmV0dXJuIC1FQlVTWTsKIAotCWlmIChubWlfd2F0Y2hkb2cgPT0gTk1JX0xPQ0FMX0FQSUMpCi0JCXN0b3BfYXBpY19ubWlfd2F0Y2hkb2coTlVMTCk7CiAJY2xlYXJfbG9jYWxfQVBJQygpOwogCiAJY3B1X2Rpc2FibGVfY29tbW9uKCk7CkBAIC0xMzc3LDcgKzEzODMsNyBAQAogCiAJbWIoKTsKIAkvKiBBY2sgaXQgKi8KLQlfX2dldF9jcHVfdmFyKGNwdV9zdGF0ZSkgPSBDUFVfREVBRDsKKwlfX3RoaXNfY3B1X3dyaXRlKGNwdV9zdGF0ZSwgQ1BVX0RFQUQpOwogCiAJLyoKIAkgKiBXaXRoIHBoeXNpY2FsIENQVSBob3RwbHVnLCB3ZSBzaG91bGQgaGFsdCB0aGUgY3B1CkBAIC0xMzk3LDExICsxNDAzLDExIEBACiAJaW50IGk7CiAJdm9pZCAqbXdhaXRfcHRyOwogCi0JaWYgKCFjcHVfaGFzKCZjdXJyZW50X2NwdV9kYXRhLCBYODZfRkVBVFVSRV9NV0FJVCkpCisJaWYgKCFjcHVfaGFzKF9fdGhpc19jcHVfcHRyKCZjcHVfaW5mbyksIFg4Nl9GRUFUVVJFX01XQUlUKSkKIAkJcmV0dXJuOwotCWlmICghY3B1X2hhcygmY3VycmVudF9jcHVfZGF0YSwgWDg2X0ZFQVRVUkVfQ0xGTFNIKSkKKwlpZiAoIWNwdV9oYXMoX190aGlzX2NwdV9wdHIoJmNwdV9pbmZvKSwgWDg2X0ZFQVRVUkVfQ0xGTFNIKSkKIAkJcmV0dXJuOwotCWlmIChjdXJyZW50X2NwdV9kYXRhLmNwdWlkX2xldmVsIDwgQ1BVSURfTVdBSVRfTEVBRikKKwlpZiAoX190aGlzX2NwdV9yZWFkKGNwdV9pbmZvLmNwdWlkX2xldmVsKSA8IENQVUlEX01XQUlUX0xFQUYpCiAJCXJldHVybjsKIAogCWVheCA9IENQVUlEX01XQUlUX0xFQUY7CkBAIC0xNDUyLDcgKzE0NTgsNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgaGx0X3BsYXlfZGVhZCh2b2lkKQogewotCWlmIChjdXJyZW50X2NwdV9kYXRhLng4NiA+PSA0KQorCWlmIChfX3RoaXNfY3B1X3JlYWQoY3B1X2luZm8ueDg2KSA+PSA0KQogCQl3YmludmQoKTsKIAogCXdoaWxlICgxKSB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc3RhY2t0cmFjZS5jIGIvYXJjaC94ODYva2VybmVsL3N0YWNrdHJhY2UuYwppbmRleCBiNTNjNTI1Li45MzhjOGUxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc3RhY2t0cmFjZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9zdGFja3RyYWNlLmMKQEAgLTczLDIyICs3MywyMiBAQAogICovCiB2b2lkIHNhdmVfc3RhY2tfdHJhY2Uoc3RydWN0IHN0YWNrX3RyYWNlICp0cmFjZSkKIHsKLQlkdW1wX3RyYWNlKGN1cnJlbnQsIE5VTEwsIE5VTEwsIDAsICZzYXZlX3N0YWNrX29wcywgdHJhY2UpOworCWR1bXBfdHJhY2UoY3VycmVudCwgTlVMTCwgTlVMTCwgJnNhdmVfc3RhY2tfb3BzLCB0cmFjZSk7CiAJaWYgKHRyYWNlLT5ucl9lbnRyaWVzIDwgdHJhY2UtPm1heF9lbnRyaWVzKQogCQl0cmFjZS0+ZW50cmllc1t0cmFjZS0+bnJfZW50cmllcysrXSA9IFVMT05HX01BWDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNhdmVfc3RhY2tfdHJhY2UpOwogCi12b2lkIHNhdmVfc3RhY2tfdHJhY2VfYnAoc3RydWN0IHN0YWNrX3RyYWNlICp0cmFjZSwgdW5zaWduZWQgbG9uZyBicCkKK3ZvaWQgc2F2ZV9zdGFja190cmFjZV9yZWdzKHN0cnVjdCBzdGFja190cmFjZSAqdHJhY2UsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCWR1bXBfdHJhY2UoY3VycmVudCwgTlVMTCwgTlVMTCwgYnAsICZzYXZlX3N0YWNrX29wcywgdHJhY2UpOworCWR1bXBfdHJhY2UoY3VycmVudCwgcmVncywgTlVMTCwgJnNhdmVfc3RhY2tfb3BzLCB0cmFjZSk7CiAJaWYgKHRyYWNlLT5ucl9lbnRyaWVzIDwgdHJhY2UtPm1heF9lbnRyaWVzKQogCQl0cmFjZS0+ZW50cmllc1t0cmFjZS0+bnJfZW50cmllcysrXSA9IFVMT05HX01BWDsKIH0KIAogdm9pZCBzYXZlX3N0YWNrX3RyYWNlX3RzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IHN0YWNrX3RyYWNlICp0cmFjZSkKIHsKLQlkdW1wX3RyYWNlKHRzaywgTlVMTCwgTlVMTCwgMCwgJnNhdmVfc3RhY2tfb3BzX25vc2NoZWQsIHRyYWNlKTsKKwlkdW1wX3RyYWNlKHRzaywgTlVMTCwgTlVMTCwgJnNhdmVfc3RhY2tfb3BzX25vc2NoZWQsIHRyYWNlKTsKIAlpZiAodHJhY2UtPm5yX2VudHJpZXMgPCB0cmFjZS0+bWF4X2VudHJpZXMpCiAJCXRyYWNlLT5lbnRyaWVzW3RyYWNlLT5ucl9lbnRyaWVzKytdID0gVUxPTkdfTUFYOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3RpbWUuYyBiL2FyY2gveDg2L2tlcm5lbC90aW1lLmMKaW5kZXggZmI1Y2M1ZTEuLjI1YTI4YTIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3RpbWUuYwpAQCAtMjIsMTAgKzIyLDYgQEAKICNpbmNsdWRlIDxhc20vaHBldC5oPgogI2luY2x1ZGUgPGFzbS90aW1lLmg+CiAKLSNpZiBkZWZpbmVkKENPTkZJR19YODZfMzIpICYmIGRlZmluZWQoQ09ORklHX1g4Nl9JT19BUElDKQotaW50IHRpbWVyX2FjazsKLSNlbmRpZgotCiAjaWZkZWYgQ09ORklHX1g4Nl82NAogdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBfX2ppZmZpZXMgX19zZWN0aW9uX2ppZmZpZXMgPSBJTklUSUFMX0pJRkZJRVM7CiAjZW5kaWYKQEAgLTYzLDIwICs1OSw2IEBACiAJLyogS2VlcCBubWkgd2F0Y2hkb2cgdXAgdG8gZGF0ZSAqLwogCWluY19pcnFfc3RhdChpcnEwX2lycXMpOwogCi0JLyogT3B0aW1pemVkIG91dCBmb3IgIUlPX0FQSUMgYW5kIHg4Nl82NCAqLwotCWlmICh0aW1lcl9hY2spIHsKLQkJLyoKLQkJICogU3VidGxlLCB3aGVuIEkvTyBBUElDcyBhcmUgdXNlZCB3ZSBoYXZlIHRvIGFjayB0aW1lciBJUlEKLQkJICogbWFudWFsbHkgdG8gZGVhc3NlcnQgTk1JIGxpbmVzIGZvciB0aGUgd2F0Y2hkb2cgaWYgcnVuCi0JCSAqIG9uIGFuIDgyNDg5RFgtYmFzZWQgc3lzdGVtLgotCQkgKi8KLQkJcmF3X3NwaW5fbG9jaygmaTgyNTlBX2xvY2spOwotCQlvdXRiKDB4MGMsIFBJQ19NQVNURVJfT0NXMyk7Ci0JCS8qIEFjayB0aGUgSVJROyBBRU9JIHdpbGwgZW5kIGl0IGF1dG9tYXRpY2FsbHkuICovCi0JCWluYihQSUNfTUFTVEVSX1BPTEwpOwotCQlyYXdfc3Bpbl91bmxvY2soJmk4MjU5QV9sb2NrKTsKLQl9Ci0KIAlnbG9iYWxfY2xvY2tfZXZlbnQtPmV2ZW50X2hhbmRsZXIoZ2xvYmFsX2Nsb2NrX2V2ZW50KTsKIAogCS8qIE1DQSBidXMgcXVpcms6IEFja25vd2xlZGdlIGlycTAgYnkgc2V0dGluZyBiaXQgNyBpbiBwb3J0IDB4NjEgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC90cmFtcG9saW5lXzY0LlMgYi9hcmNoL3g4Ni9rZXJuZWwvdHJhbXBvbGluZV82NC5TCmluZGV4IDNhZjJkZmYuLjA3NWQxMzAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC90cmFtcG9saW5lXzY0LlMKKysrIGIvYXJjaC94ODYva2VybmVsL3RyYW1wb2xpbmVfNjQuUwpAQCAtMTI3LDcgKzEyNyw3IEBACiBub19sb25nbW9kZToKIAlobHQKIAlqbXAgbm9fbG9uZ21vZGUKLSNpbmNsdWRlICJ2ZXJpZnlfY3B1XzY0LlMiCisjaW5jbHVkZSAidmVyaWZ5X2NwdS5TIgogCiAJIyBDYXJlZnVsIHRoZXNlIG5lZWQgdG8gYmUgaW4gdGhlIHNhbWUgNjRLIHNlZ21lbnQgYXMgdGhlIGFib3ZlOwogdGlkdDoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC90cmFwcy5jIGIvYXJjaC94ODYva2VybmVsL3RyYXBzLmMKaW5kZXggY2I4MzhjYS4uYzc2YWFjYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3RyYXBzLmMKQEAgLTgzLDYgKzgzLDggQEAKIAogc3RhdGljIGludCBpZ25vcmVfbm1pczsKIAoraW50IHVua25vd25fbm1pX3BhbmljOworCiBzdGF0aWMgaW5saW5lIHZvaWQgY29uZGl0aW9uYWxfc3RpKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCWlmIChyZWdzLT5mbGFncyAmIFg4Nl9FRkxBR1NfSUYpCkBAIC0zMDAsNiArMzAyLDEzIEBACiAJZGllKCJnZW5lcmFsIHByb3RlY3Rpb24gZmF1bHQiLCByZWdzLCBlcnJvcl9jb2RlKTsKIH0KIAorc3RhdGljIGludCBfX2luaXQgc2V0dXBfdW5rbm93bl9ubWlfcGFuaWMoY2hhciAqc3RyKQoreworCXVua25vd25fbm1pX3BhbmljID0gMTsKKwlyZXR1cm4gMTsKK30KK19fc2V0dXAoInVua25vd25fbm1pX3BhbmljIiwgc2V0dXBfdW5rbm93bl9ubWlfcGFuaWMpOworCiBzdGF0aWMgbm90cmFjZSBfX2twcm9iZXMgdm9pZAogbWVtX3Bhcml0eV9lcnJvcih1bnNpZ25lZCBjaGFyIHJlYXNvbiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CkBAIC0zNDIsOSArMzUxLDExIEBACiAJcmVhc29uID0gKHJlYXNvbiAmIDB4ZikgfCA4OwogCW91dGIocmVhc29uLCAweDYxKTsKIAotCWkgPSAyMDAwOwotCXdoaWxlICgtLWkpCi0JCXVkZWxheSgxMDAwKTsKKwlpID0gMjAwMDA7CisJd2hpbGUgKC0taSkgeworCQl0b3VjaF9ubWlfd2F0Y2hkb2coKTsKKwkJdWRlbGF5KDEwMCk7CisJfQogCiAJcmVhc29uICY9IH44OwogCW91dGIocmVhc29uLCAweDYxKTsKQEAgLTM3MSw3ICszODIsNyBAQAogCQkJcmVhc29uLCBzbXBfcHJvY2Vzc29yX2lkKCkpOwogCiAJcHJpbnRrKEtFUk5fRU1FUkcgIkRvIHlvdSBoYXZlIGEgc3RyYW5nZSBwb3dlciBzYXZpbmcgbW9kZSBlbmFibGVkP1xuIik7Ci0JaWYgKHBhbmljX29uX3VucmVjb3ZlcmVkX25taSkKKwlpZiAodW5rbm93bl9ubWlfcGFuaWMgfHwgcGFuaWNfb25fdW5yZWNvdmVyZWRfbm1pKQogCQlwYW5pYygiTk1JOiBOb3QgY29udGludWluZyIpOwogCiAJcHJpbnRrKEtFUk5fRU1FUkcgIkRhemVkIGFuZCBjb25mdXNlZCwgYnV0IHRyeWluZyB0byBjb250aW51ZVxuIik7CkBAIC0zOTcsMjAgKzQwOCw4IEBACiAJCWlmIChub3RpZnlfZGllKERJRV9OTUksICJubWkiLCByZWdzLCByZWFzb24sIDIsIFNJR0lOVCkKIAkJCQkJCQk9PSBOT1RJRllfU1RPUCkKIAkJCXJldHVybjsKLQotI2lmbmRlZiBDT05GSUdfTE9DS1VQX0RFVEVDVE9SCi0JCS8qCi0JCSAqIE9rLCBzbyB0aGlzIGlzIG5vbmUgb2YgdGhlIGRvY3VtZW50ZWQgTk1JIHNvdXJjZXMsCi0JCSAqIHNvIGl0IG11c3QgYmUgdGhlIE5NSSB3YXRjaGRvZy4KLQkJICovCi0JCWlmIChubWlfd2F0Y2hkb2dfdGljayhyZWdzLCByZWFzb24pKQotCQkJcmV0dXJuOwotCQlpZiAoIWRvX25taV9jYWxsYmFjayhyZWdzLCBjcHUpKQotI2VuZGlmIC8qICFDT05GSUdfTE9DS1VQX0RFVEVDVE9SICovCi0JCQl1bmtub3duX25taV9lcnJvcihyZWFzb24sIHJlZ3MpOwotI2Vsc2UKLQkJdW5rbm93bl9ubWlfZXJyb3IocmVhc29uLCByZWdzKTsKICNlbmRpZgorCQl1bmtub3duX25taV9lcnJvcihyZWFzb24sIHJlZ3MpOwogCiAJCXJldHVybjsKIAl9CkBAIC00NDYsMTQgKzQ0NSwxMiBAQAogCiB2b2lkIHN0b3Bfbm1pKHZvaWQpCiB7Ci0JYWNwaV9ubWlfZGlzYWJsZSgpOwogCWlnbm9yZV9ubWlzKys7CiB9CiAKIHZvaWQgcmVzdGFydF9ubWkodm9pZCkKIHsKIAlpZ25vcmVfbm1pcy0tOwotCWFjcGlfbm1pX2VuYWJsZSgpOwogfQogCiAvKiBNYXkgcnVuIG9uIElTVCBzdGFjay4gKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC90c2MuYyBiL2FyY2gveDg2L2tlcm5lbC90c2MuYwppbmRleCAwYzQwZDhiLi4wM2QyZWE4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdHNjLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3RzYy5jCkBAIC02NTksNyArNjU5LDcgQEAKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAotCV9fZ2V0X2NwdV92YXIoY3ljMm5zX29mZnNldCkgPSAwOworCV9fdGhpc19jcHVfd3JpdGUoY3ljMm5zX29mZnNldCwgMCk7CiAJb2Zmc2V0ID0gY3ljMm5zX3N1c3BlbmQgLSBzY2hlZF9jbG9jaygpOwogCiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkKQEAgLTg3Miw2ICs4NzIsOSBAQAogCiAJaWYgKGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9DT05TVEFOVF9UU0MpKQogCQlyZXR1cm4gMDsKKworCWlmICh0c2NfY2xvY2tzb3VyY2VfcmVsaWFibGUpCisJCXJldHVybiAwOwogCS8qCiAJICogSW50ZWwgc3lzdGVtcyBhcmUgbm9ybWFsbHkgYWxsIHN5bmNocm9uaXplZC4KIAkgKiBFeGNlcHRpb25zIG11c3QgbWFyayBUU0MgYXMgdW5zdGFibGU6CkBAIC04NzksMTQgKzg4Miw5MiBAQAogCWlmIChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgIT0gWDg2X1ZFTkRPUl9JTlRFTCkgewogCQkvKiBhc3N1bWUgbXVsdGkgc29ja2V0IHN5c3RlbXMgYXJlIG5vdCBzeW5jaHJvbml6ZWQ6ICovCiAJCWlmIChudW1fcG9zc2libGVfY3B1cygpID4gMSkKLQkJCXRzY191bnN0YWJsZSA9IDE7CisJCQlyZXR1cm4gMTsKIAl9CiAKLQlyZXR1cm4gdHNjX3Vuc3RhYmxlOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgaW5pdF90c2NfY2xvY2tzb3VyY2Uodm9pZCkKKworc3RhdGljIHZvaWQgdHNjX3JlZmluZV9jYWxpYnJhdGlvbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CitzdGF0aWMgREVDTEFSRV9ERUxBWUVEX1dPUksodHNjX2lycXdvcmssIHRzY19yZWZpbmVfY2FsaWJyYXRpb25fd29yayk7CisvKioKKyAqIHRzY19yZWZpbmVfY2FsaWJyYXRpb25fd29yayAtIEZ1cnRoZXIgcmVmaW5lIHRzYyBmcmVxIGNhbGlicmF0aW9uCisgKiBAd29yayAtIGlnbm9yZWQuCisgKgorICogVGhpcyBmdW5jdGlvbnMgdXNlcyBkZWxheWVkIHdvcmsgb3ZlciBhIHBlcmlvZCBvZiBhCisgKiBzZWNvbmQgdG8gZnVydGhlciByZWZpbmUgdGhlIFRTQyBmcmVxIHZhbHVlLiBTaW5jZSB0aGlzIGlzCisgKiB0aW1lciBiYXNlZCwgaW5zdGVhZCBvZiBsb29wIGJhc2VkLCB3ZSBkb24ndCBibG9jayB0aGUgYm9vdAorICogcHJvY2VzcyB3aGlsZSB0aGlzIGxvbmdlciBjYWxpYnJhdGlvbiBpcyBkb25lLgorICoKKyAqIElmIHRoZXJlIGFyZSBhbnkgY2FsaWJyYXRpb24gYW5vbW9saWVzICh0b28gbWFueSBTTUlzLCBldGMpLAorICogb3IgdGhlIHJlZmluZWQgY2FsaWJyYXRpb24gaXMgb2ZmIGJ5IDElIG9mIHRoZSBmYXN0IGVhcmx5CisgKiBjYWxpYnJhdGlvbiwgd2UgdGhyb3cgb3V0IHRoZSBuZXcgY2FsaWJyYXRpb24gYW5kIHVzZSB0aGUKKyAqIGVhcmx5IGNhbGlicmF0aW9uLgorICovCitzdGF0aWMgdm9pZCB0c2NfcmVmaW5lX2NhbGlicmF0aW9uX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogeworCXN0YXRpYyB1NjQgdHNjX3N0YXJ0ID0gLTEsIHJlZl9zdGFydDsKKwlzdGF0aWMgaW50IGhwZXQ7CisJdTY0IHRzY19zdG9wLCByZWZfc3RvcCwgZGVsdGE7CisJdW5zaWduZWQgbG9uZyBmcmVxOworCisJLyogRG9uJ3QgYm90aGVyIHJlZmluaW5nIFRTQyBvbiB1bnN0YWJsZSBzeXN0ZW1zICovCisJaWYgKGNoZWNrX3RzY191bnN0YWJsZSgpKQorCQlnb3RvIG91dDsKKworCS8qCisJICogU2luY2UgdGhlIHdvcmsgaXMgc3RhcnRlZCBlYXJseSBpbiBib290LCB3ZSBtYXkgYmUKKwkgKiBkZWxheWVkIHRoZSBmaXJzdCB0aW1lIHdlIGV4cGlyZS4gU28gc2V0IHRoZSB3b3JrcXVldWUKKwkgKiBhZ2FpbiBvbmNlIHdlIGtub3cgdGltZXJzIGFyZSB3b3JraW5nLgorCSAqLworCWlmICh0c2Nfc3RhcnQgPT0gLTEpIHsKKwkJLyoKKwkJICogT25seSBzZXQgaHBldCBvbmNlLCB0byBhdm9pZCBtaXhpbmcgaGFyZHdhcmUKKwkJICogaWYgdGhlIGhwZXQgYmVjb21lcyBlbmFibGVkIGxhdGVyLgorCQkgKi8KKwkJaHBldCA9IGlzX2hwZXRfZW5hYmxlZCgpOworCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnRzY19pcnF3b3JrLCBIWik7CisJCXRzY19zdGFydCA9IHRzY19yZWFkX3JlZnMoJnJlZl9zdGFydCwgaHBldCk7CisJCXJldHVybjsKKwl9CisKKwl0c2Nfc3RvcCA9IHRzY19yZWFkX3JlZnMoJnJlZl9zdG9wLCBocGV0KTsKKworCS8qIGhwZXQgb3IgcG10aW1lciBhdmFpbGFibGUgPyAqLworCWlmICghaHBldCAmJiAhcmVmX3N0YXJ0ICYmICFyZWZfc3RvcCkKKwkJZ290byBvdXQ7CisKKwkvKiBDaGVjaywgd2hldGhlciB0aGUgc2FtcGxpbmcgd2FzIGRpc3R1cmJlZCBieSBhbiBTTUkgKi8KKwlpZiAodHNjX3N0YXJ0ID09IFVMTE9OR19NQVggfHwgdHNjX3N0b3AgPT0gVUxMT05HX01BWCkKKwkJZ290byBvdXQ7CisKKwlkZWx0YSA9IHRzY19zdG9wIC0gdHNjX3N0YXJ0OworCWRlbHRhICo9IDEwMDAwMDBMTDsKKwlpZiAoaHBldCkKKwkJZnJlcSA9IGNhbGNfaHBldF9yZWYoZGVsdGEsIHJlZl9zdGFydCwgcmVmX3N0b3ApOworCWVsc2UKKwkJZnJlcSA9IGNhbGNfcG10aW1lcl9yZWYoZGVsdGEsIHJlZl9zdGFydCwgcmVmX3N0b3ApOworCisJLyogTWFrZSBzdXJlIHdlJ3JlIHdpdGhpbiAxJSAqLworCWlmIChhYnModHNjX2toeiAtIGZyZXEpID4gdHNjX2toei8xMDApCisJCWdvdG8gb3V0OworCisJdHNjX2toeiA9IGZyZXE7CisJcHJpbnRrKEtFUk5fSU5GTyAiUmVmaW5lZCBUU0MgY2xvY2tzb3VyY2UgY2FsaWJyYXRpb246ICIKKwkJIiVsdS4lMDNsdSBNSHouXG4iLCAodW5zaWduZWQgbG9uZyl0c2Nfa2h6IC8gMTAwMCwKKwkJCQkJKHVuc2lnbmVkIGxvbmcpdHNjX2toeiAlIDEwMDApOworCitvdXQ6CisJY2xvY2tzb3VyY2VfcmVnaXN0ZXJfa2h6KCZjbG9ja3NvdXJjZV90c2MsIHRzY19raHopOworfQorCisKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfdHNjX2Nsb2Nrc291cmNlKHZvaWQpCit7CisJaWYgKCFjcHVfaGFzX3RzYyB8fCB0c2NfZGlzYWJsZWQgPiAwKQorCQlyZXR1cm4gMDsKKwogCWlmICh0c2NfY2xvY2tzb3VyY2VfcmVsaWFibGUpCiAJCWNsb2Nrc291cmNlX3RzYy5mbGFncyAmPSB+Q0xPQ0tfU09VUkNFX01VU1RfVkVSSUZZOwogCS8qIGxvd2VyIHRoZSByYXRpbmcgaWYgd2UgYWxyZWFkeSBrbm93IGl0cyB1bnN0YWJsZTogKi8KQEAgLTg5NCw4ICs5NzUsMTQgQEAKIAkJY2xvY2tzb3VyY2VfdHNjLnJhdGluZyA9IDA7CiAJCWNsb2Nrc291cmNlX3RzYy5mbGFncyAmPSB+Q0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVM7CiAJfQotCWNsb2Nrc291cmNlX3JlZ2lzdGVyX2toeigmY2xvY2tzb3VyY2VfdHNjLCB0c2Nfa2h6KTsKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnRzY19pcnF3b3JrLCAwKTsKKwlyZXR1cm4gMDsKIH0KKy8qCisgKiBXZSB1c2UgZGV2aWNlX2luaXRjYWxsIGhlcmUsIHRvIGVuc3VyZSB3ZSBydW4gYWZ0ZXIgdGhlIGhwZXQKKyAqIGlzIGZ1bGx5IGluaXRpYWxpemVkLCB3aGljaCBtYXkgb2NjdXIgYXQgZnNfaW5pdGNhbGwgdGltZS4KKyAqLworZGV2aWNlX2luaXRjYWxsKGluaXRfdHNjX2Nsb2Nrc291cmNlKTsKIAogdm9pZCBfX2luaXQgdHNjX2luaXQodm9pZCkKIHsKQEAgLTk0OSw2ICsxMDM2LDUgQEAKIAkJbWFya190c2NfdW5zdGFibGUoIlRTQ3MgdW5zeW5jaHJvbml6ZWQiKTsKIAogCWNoZWNrX3N5c3RlbV90c2NfcmVsaWFibGUoKTsKLQlpbml0X3RzY19jbG9ja3NvdXJjZSgpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdmVyaWZ5X2NwdS5TIGIvYXJjaC94ODYva2VybmVsL3ZlcmlmeV9jcHUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWRlZmMxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYva2VybmVsL3ZlcmlmeV9jcHUuUwpAQCAtMCwwICsxLDEzOSBAQAorLyoKKyAqCisgKgl2ZXJpZnlfY3B1LlMgLSBDb2RlIGZvciBjcHUgbG9uZyBtb2RlIGFuZCBTU0UgdmVyaWZpY2F0aW9uLiBUaGlzCisgKgljb2RlIGhhcyBiZWVuIGJvcnJvd2VkIGZyb20gYm9vdC9zZXR1cC5TIGFuZCB3YXMgaW50cm9kdWNlZCBieQorICogCUFuZGkgS2xlZW4uCisgKgorICoJQ29weXJpZ2h0IChjKSAyMDA3ICBBbmRpIEtsZWVuIChha0BzdXNlLmRlKQorICoJQ29weXJpZ2h0IChjKSAyMDA3ICBFcmljIEJpZWRlcm1hbiAoZWJpZWRlcm1AeG1pc3Npb24uY29tKQorICoJQ29weXJpZ2h0IChjKSAyMDA3ICBWaXZlayBHb3lhbCAodmdveWFsQGluLmlibS5jb20pCisgKglDb3B5cmlnaHQgKGMpIDIwMTAgIEtlZXMgQ29vayAoa2Vlcy5jb29rQGNhbm9uaWNhbC5jb20pCisgKgorICogCVRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogCVZlcnNpb24gMi4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGZvciBtb3JlIGRldGFpbHMuCisgKgorICoJVGhpcyBpcyBhIGNvbW1vbiBjb2RlIGZvciB2ZXJpZmljYXRpb24gd2hldGhlciBDUFUgc3VwcG9ydHMKKyAqIAlsb25nIG1vZGUgYW5kIFNTRSBvciBub3QuIEl0IGlzIG5vdCBjYWxsZWQgZGlyZWN0bHkgaW5zdGVhZCB0aGlzCisgKglmaWxlIGlzIGluY2x1ZGVkIGF0IHZhcmlvdXMgcGxhY2VzIGFuZCBjb21waWxlZCBpbiB0aGF0IGNvbnRleHQuCisgKglUaGlzIGZpbGUgaXMgZXhwZWN0ZWQgdG8gcnVuIGluIDMyYml0IGNvZGUuICBDdXJyZW50bHk6CisgKgorICoJYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2hlYWRfNjQuUzogQm9vdCBjcHUgdmVyaWZpY2F0aW9uCisgKglhcmNoL3g4Ni9rZXJuZWwvdHJhbXBvbGluZV82NC5TOiBzZWNvbmRhcnkgcHJvY2Vzc29yIHZlcmZpY2F0aW9uCisgKglhcmNoL3g4Ni9rZXJuZWwvaGVhZF8zMi5TOiBwcm9jZXNzb3Igc3RhcnR1cAorICoKKyAqCXZlcmlmeV9jcHUsIHJldHVybnMgdGhlIHN0YXR1cyBvZiBsb25nbW9kZSBhbmQgU1NFIGluIHJlZ2lzdGVyICVlYXguCisgKgkJMDogU3VjY2VzcyAgICAxOiBGYWlsdXJlCisgKgorICoJT24gSW50ZWwsIHRoZSBYRF9ESVNBQkxFIGZsYWcgd2lsbCBiZSBjbGVhcmVkIGFzIGEgc2lkZS1lZmZlY3QuCisgKgorICogCVRoZSBjYWxsZXIgbmVlZHMgdG8gY2hlY2sgZm9yIHRoZSBlcnJvciBjb2RlIGFuZCB0YWtlIHRoZSBhY3Rpb24KKyAqIAlhcHByb3ByaWF0ZWx5LiBFaXRoZXIgZGlzcGxheSBhIG1lc3NhZ2Ugb3IgaGFsdC4KKyAqLworCisjaW5jbHVkZSA8YXNtL2NwdWZlYXR1cmUuaD4KKyNpbmNsdWRlIDxhc20vbXNyLWluZGV4Lmg+CisKK3ZlcmlmeV9jcHU6CisJcHVzaGZsCQkJCSMgU2F2ZSBjYWxsZXIgcGFzc2VkIGZsYWdzCisJcHVzaGwJJDAJCQkjIEtpbGwgYW55IGRhbmdlcm91cyBmbGFncworCXBvcGZsCisKKwlwdXNoZmwJCQkJIyBzdGFuZGFyZCB3YXkgdG8gY2hlY2sgZm9yIGNwdWlkCisJcG9wbAklZWF4CisJbW92bAklZWF4LCVlYngKKwl4b3JsCSQweDIwMDAwMCwlZWF4CisJcHVzaGwJJWVheAorCXBvcGZsCisJcHVzaGZsCisJcG9wbAklZWF4CisJY21wbAklZWF4LCVlYngKKwlqegl2ZXJpZnlfY3B1X25vX2xvbmdtb2RlCSMgY3B1IGhhcyBubyBjcHVpZAorCisJbW92bAkkMHgwLCVlYXgJCSMgU2VlIGlmIGNwdWlkIDEgaXMgaW1wbGVtZW50ZWQKKwljcHVpZAorCWNtcGwJJDB4MSwlZWF4CisJamIJdmVyaWZ5X2NwdV9ub19sb25nbW9kZQkjIG5vIGNwdWlkIDEKKworCXhvcgklZGksJWRpCisJY21wbAkkMHg2ODc0NzU0MSwlZWJ4CSMgQXV0aGVudGljQU1ECisJam56CXZlcmlmeV9jcHVfbm9hbWQKKwljbXBsCSQweDY5NzQ2ZTY1LCVlZHgKKwlqbnoJdmVyaWZ5X2NwdV9ub2FtZAorCWNtcGwJJDB4NDQ0ZDQxNjMsJWVjeAorCWpuegl2ZXJpZnlfY3B1X25vYW1kCisJbW92CSQxLCVkaQkJCSMgY3B1IGlzIGZyb20gQU1ECisJam1wCXZlcmlmeV9jcHVfY2hlY2sKKwordmVyaWZ5X2NwdV9ub2FtZDoKKwljbXBsCSQweDc1NmU2NTQ3LCVlYnggICAgICAgICMgR2VudWluZUludGVsPworCWpuegl2ZXJpZnlfY3B1X2NoZWNrCisJY21wbAkkMHg0OTY1NmU2OSwlZWR4CisJam56CXZlcmlmeV9jcHVfY2hlY2sKKwljbXBsCSQweDZjNjU3NDZlLCVlY3gKKwlqbnoJdmVyaWZ5X2NwdV9jaGVjaworCisJIyBvbmx5IGNhbGwgSUEzMl9NSVNDX0VOQUJMRSB3aGVuOgorCSMgZmFtaWx5ID4gNiB8fCAoZmFtaWx5ID09IDYgJiYgbW9kZWwgPj0gMHhkKQorCW1vdmwJJDB4MSwgJWVheAkJIyBjaGVjayBDUFUgZmFtaWx5IGFuZCBtb2RlbAorCWNwdWlkCisJbW92bAklZWF4LCAlZWN4CisKKwlhbmRsCSQweDBmZjAwZjAwLCAlZWF4CSMgbWFzayBmYW1pbHkgYW5kIGV4dGVuZGVkIGZhbWlseQorCXNocmwJJDgsICVlYXgKKwljbXBsCSQ2LCAlZWF4CisJamEJdmVyaWZ5X2NwdV9jbGVhcl94ZAkjIGZhbWlseSA+IDYsIG9rCisJamIJdmVyaWZ5X2NwdV9jaGVjawkjIGZhbWlseSA8IDYsIHNraXAKKworCWFuZGwJJDB4MDAwZjAwZjAsICVlY3gJIyBtYXNrIG1vZGVsIGFuZCBleHRlbmRlZCBtb2RlbAorCXNocmwJJDQsICVlY3gKKwljbXBsCSQweGQsICVlY3gKKwlqYgl2ZXJpZnlfY3B1X2NoZWNrCSMgZmFtaWx5ID09IDYsIG1vZGVsIDwgMHhkLCBza2lwCisKK3ZlcmlmeV9jcHVfY2xlYXJfeGQ6CisJbW92bAkkTVNSX0lBMzJfTUlTQ19FTkFCTEUsICVlY3gKKwlyZG1zcgorCWJ0cmwJJDIsICVlZHgJCSMgY2xlYXIgTVNSX0lBMzJfTUlTQ19FTkFCTEVfWERfRElTQUJMRQorCWpuYwl2ZXJpZnlfY3B1X2NoZWNrCSMgb25seSB3cml0ZSBNU1IgaWYgYml0IHdhcyBjaGFuZ2VkCisJd3Jtc3IKKwordmVyaWZ5X2NwdV9jaGVjazoKKwltb3ZsICAgICQweDEsJWVheAkJIyBEb2VzIHRoZSBjcHUgaGF2ZSB3aGF0IGl0IHRha2VzCisJY3B1aWQKKwlhbmRsCSRSRVFVSVJFRF9NQVNLMCwlZWR4CisJeG9ybAkkUkVRVUlSRURfTUFTSzAsJWVkeAorCWpuegl2ZXJpZnlfY3B1X25vX2xvbmdtb2RlCisKKwltb3ZsICAgICQweDgwMDAwMDAwLCVlYXgJIyBTZWUgaWYgZXh0ZW5kZWQgY3B1aWQgaXMgaW1wbGVtZW50ZWQKKwljcHVpZAorCWNtcGwgICAgJDB4ODAwMDAwMDEsJWVheAorCWpiICAgICAgdmVyaWZ5X2NwdV9ub19sb25nbW9kZQkjIG5vIGV4dGVuZGVkIGNwdWlkCisKKwltb3ZsICAgICQweDgwMDAwMDAxLCVlYXgJIyBEb2VzIHRoZSBjcHUgaGF2ZSB3aGF0IGl0IHRha2VzCisJY3B1aWQKKwlhbmRsICAgICRSRVFVSVJFRF9NQVNLMSwlZWR4CisJeG9ybCAgICAkUkVRVUlSRURfTUFTSzEsJWVkeAorCWpueiAgICAgdmVyaWZ5X2NwdV9ub19sb25nbW9kZQorCit2ZXJpZnlfY3B1X3NzZV90ZXN0OgorCW1vdmwJJDEsJWVheAorCWNwdWlkCisJYW5kbAkkU1NFX01BU0ssJWVkeAorCWNtcGwJJFNTRV9NQVNLLCVlZHgKKwlqZQl2ZXJpZnlfY3B1X3NzZV9vaworCXRlc3QJJWRpLCVkaQorCWp6CXZlcmlmeV9jcHVfbm9fbG9uZ21vZGUJIyBvbmx5IHRyeSB0byBmb3JjZSBTU0Ugb24gQU1ECisJbW92bAkkTVNSX0s3X0hXQ1IsJWVjeAorCXJkbXNyCisJYnRyCSQxNSwlZWF4CQkjIGVuYWJsZSBTU0UKKwl3cm1zcgorCXhvcgklZGksJWRpCQkJIyBkb24ndCBsb29wCisJam1wCXZlcmlmeV9jcHVfc3NlX3Rlc3QJIyB0cnkgYWdhaW4KKwordmVyaWZ5X2NwdV9ub19sb25nbW9kZToKKwlwb3BmbAkJCQkjIFJlc3RvcmUgY2FsbGVyIHBhc3NlZCBmbGFncworCW1vdmwgJDEsJWVheAorCXJldAordmVyaWZ5X2NwdV9zc2Vfb2s6CisJcG9wZmwJCQkJIyBSZXN0b3JlIGNhbGxlciBwYXNzZWQgZmxhZ3MKKwl4b3JsICVlYXgsICVlYXgKKwlyZXQKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC92ZXJpZnlfY3B1XzY0LlMgYi9hcmNoL3g4Ni9rZXJuZWwvdmVyaWZ5X2NwdV82NC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NmE4YzJhLi4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2tlcm5lbC92ZXJpZnlfY3B1XzY0LlMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDYgKzAsMCBAQAotLyoKLSAqCi0gKgl2ZXJpZnlfY3B1LlMgLSBDb2RlIGZvciBjcHUgbG9uZyBtb2RlIGFuZCBTU0UgdmVyaWZpY2F0aW9uLiBUaGlzCi0gKgljb2RlIGhhcyBiZWVuIGJvcnJvd2VkIGZyb20gYm9vdC9zZXR1cC5TIGFuZCB3YXMgaW50cm9kdWNlZCBieQotICogCUFuZGkgS2xlZW4uCi0gKgotICoJQ29weXJpZ2h0IChjKSAyMDA3ICBBbmRpIEtsZWVuIChha0BzdXNlLmRlKQotICoJQ29weXJpZ2h0IChjKSAyMDA3ICBFcmljIEJpZWRlcm1hbiAoZWJpZWRlcm1AeG1pc3Npb24uY29tKQotICoJQ29weXJpZ2h0IChjKSAyMDA3ICBWaXZlayBHb3lhbCAodmdveWFsQGluLmlibS5jb20pCi0gKgotICogCVRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAotICogCVZlcnNpb24gMi4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICoJVGhpcyBpcyBhIGNvbW1vbiBjb2RlIGZvciB2ZXJpZmljYXRpb24gd2hldGhlciBDUFUgc3VwcG9ydHMKLSAqIAlsb25nIG1vZGUgYW5kIFNTRSBvciBub3QuIEl0IGlzIG5vdCBjYWxsZWQgZGlyZWN0bHkgaW5zdGVhZCB0aGlzCi0gKglmaWxlIGlzIGluY2x1ZGVkIGF0IHZhcmlvdXMgcGxhY2VzIGFuZCBjb21waWxlZCBpbiB0aGF0IGNvbnRleHQuCi0gKiAJRm9sbG93aW5nIGFyZSB0aGUgY3VycmVudCB1c2FnZS4KLSAqCi0gKiAJVGhpcyBmaWxlIGlzIGluY2x1ZGVkIGJ5IGJvdGggMTZiaXQgYW5kIDMyYml0IGNvZGUuCi0gKgotICoJYXJjaC94ODZfNjQvYm9vdC9zZXR1cC5TIDogQm9vdCBjcHUgdmVyaWZpY2F0aW9uICgxNmJpdCkKLSAqCWFyY2gveDg2XzY0L2Jvb3QvY29tcHJlc3NlZC9oZWFkLlM6IEJvb3QgY3B1IHZlcmlmaWNhdGlvbiAoMzJiaXQpCi0gKglhcmNoL3g4Nl82NC9rZXJuZWwvdHJhbXBvbGluZS5TOiBzZWNvbmRhcnkgcHJvY2Vzc29yIHZlcmZpY2F0aW9uICgxNmJpdCkKLSAqCWFyY2gveDg2XzY0L2tlcm5lbC9hY3BpL3dha2V1cC5TOlZlcmZpY2F0aW9uIGF0IHJlc3VtZSAoMTZiaXQpCi0gKgotICoJdmVyaWZ5X2NwdSwgcmV0dXJucyB0aGUgc3RhdHVzIG9mIGNwdSBjaGVjayBpbiByZWdpc3RlciAlZWF4LgotICoJCTA6IFN1Y2Nlc3MgICAgMTogRmFpbHVyZQotICoKLSAqIAlUaGUgY2FsbGVyIG5lZWRzIHRvIGNoZWNrIGZvciB0aGUgZXJyb3IgY29kZSBhbmQgdGFrZSB0aGUgYWN0aW9uCi0gKiAJYXBwcm9wcmlhdGVseS4gRWl0aGVyIGRpc3BsYXkgYSBtZXNzYWdlIG9yIGhhbHQuCi0gKi8KLQotI2luY2x1ZGUgPGFzbS9jcHVmZWF0dXJlLmg+Ci0jaW5jbHVkZSA8YXNtL21zci1pbmRleC5oPgotCi12ZXJpZnlfY3B1OgotCXB1c2hmbAkJCQkjIFNhdmUgY2FsbGVyIHBhc3NlZCBmbGFncwotCXB1c2hsCSQwCQkJIyBLaWxsIGFueSBkYW5nZXJvdXMgZmxhZ3MKLQlwb3BmbAotCi0JcHVzaGZsCQkJCSMgc3RhbmRhcmQgd2F5IHRvIGNoZWNrIGZvciBjcHVpZAotCXBvcGwJJWVheAotCW1vdmwJJWVheCwlZWJ4Ci0JeG9ybAkkMHgyMDAwMDAsJWVheAotCXB1c2hsCSVlYXgKLQlwb3BmbAotCXB1c2hmbAotCXBvcGwJJWVheAotCWNtcGwJJWVheCwlZWJ4Ci0JanoJdmVyaWZ5X2NwdV9ub19sb25nbW9kZQkjIGNwdSBoYXMgbm8gY3B1aWQKLQotCW1vdmwJJDB4MCwlZWF4CQkjIFNlZSBpZiBjcHVpZCAxIGlzIGltcGxlbWVudGVkCi0JY3B1aWQKLQljbXBsCSQweDEsJWVheAotCWpiCXZlcmlmeV9jcHVfbm9fbG9uZ21vZGUJIyBubyBjcHVpZCAxCi0KLQl4b3IJJWRpLCVkaQotCWNtcGwJJDB4Njg3NDc1NDEsJWVieAkjIEF1dGhlbnRpY0FNRAotCWpuegl2ZXJpZnlfY3B1X25vYW1kCi0JY21wbAkkMHg2OTc0NmU2NSwlZWR4Ci0Jam56CXZlcmlmeV9jcHVfbm9hbWQKLQljbXBsCSQweDQ0NGQ0MTYzLCVlY3gKLQlqbnoJdmVyaWZ5X2NwdV9ub2FtZAotCW1vdgkkMSwlZGkJCQkjIGNwdSBpcyBmcm9tIEFNRAotCi12ZXJpZnlfY3B1X25vYW1kOgotCW1vdmwgICAgJDB4MSwlZWF4CQkjIERvZXMgdGhlIGNwdSBoYXZlIHdoYXQgaXQgdGFrZXMKLQljcHVpZAotCWFuZGwJJFJFUVVJUkVEX01BU0swLCVlZHgKLQl4b3JsCSRSRVFVSVJFRF9NQVNLMCwlZWR4Ci0Jam56CXZlcmlmeV9jcHVfbm9fbG9uZ21vZGUKLQotCW1vdmwgICAgJDB4ODAwMDAwMDAsJWVheAkjIFNlZSBpZiBleHRlbmRlZCBjcHVpZCBpcyBpbXBsZW1lbnRlZAotCWNwdWlkCi0JY21wbCAgICAkMHg4MDAwMDAwMSwlZWF4Ci0JamIgICAgICB2ZXJpZnlfY3B1X25vX2xvbmdtb2RlCSMgbm8gZXh0ZW5kZWQgY3B1aWQKLQotCW1vdmwgICAgJDB4ODAwMDAwMDEsJWVheAkjIERvZXMgdGhlIGNwdSBoYXZlIHdoYXQgaXQgdGFrZXMKLQljcHVpZAotCWFuZGwgICAgJFJFUVVJUkVEX01BU0sxLCVlZHgKLQl4b3JsICAgICRSRVFVSVJFRF9NQVNLMSwlZWR4Ci0Jam56ICAgICB2ZXJpZnlfY3B1X25vX2xvbmdtb2RlCi0KLXZlcmlmeV9jcHVfc3NlX3Rlc3Q6Ci0JbW92bAkkMSwlZWF4Ci0JY3B1aWQKLQlhbmRsCSRTU0VfTUFTSywlZWR4Ci0JY21wbAkkU1NFX01BU0ssJWVkeAotCWplCXZlcmlmeV9jcHVfc3NlX29rCi0JdGVzdAklZGksJWRpCi0JanoJdmVyaWZ5X2NwdV9ub19sb25nbW9kZQkjIG9ubHkgdHJ5IHRvIGZvcmNlIFNTRSBvbiBBTUQKLQltb3ZsCSRNU1JfSzdfSFdDUiwlZWN4Ci0JcmRtc3IKLQlidHIJJDE1LCVlYXgJCSMgZW5hYmxlIFNTRQotCXdybXNyCi0JeG9yCSVkaSwlZGkJCQkjIGRvbid0IGxvb3AKLQlqbXAJdmVyaWZ5X2NwdV9zc2VfdGVzdAkjIHRyeSBhZ2FpbgotCi12ZXJpZnlfY3B1X25vX2xvbmdtb2RlOgotCXBvcGZsCQkJCSMgUmVzdG9yZSBjYWxsZXIgcGFzc2VkIGZsYWdzCi0JbW92bCAkMSwlZWF4Ci0JcmV0Ci12ZXJpZnlfY3B1X3NzZV9vazoKLQlwb3BmbAkJCQkjIFJlc3RvcmUgY2FsbGVyIHBhc3NlZCBmbGFncwotCXhvcmwgJWVheCwgJWVheAotCXJldApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL3g4Ni9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCBlMDM1MzBhLi5iZjQ3MDA3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtNjksNyArNjksNyBAQAogCiBQSERSUyB7CiAJdGV4dCBQVF9MT0FEIEZMQUdTKDUpOyAgICAgICAgICAvKiBSX0UgKi8KLQlkYXRhIFBUX0xPQUQgRkxBR1MoNyk7ICAgICAgICAgIC8qIFJXRSAqLworCWRhdGEgUFRfTE9BRCBGTEFHUyg2KTsgICAgICAgICAgLyogUldfICovCiAjaWZkZWYgQ09ORklHX1g4Nl82NAogCXVzZXIgUFRfTE9BRCBGTEFHUyg1KTsgICAgICAgICAgLyogUl9FICovCiAjaWZkZWYgQ09ORklHX1NNUApAQCAtMTE2LDYgKzExNiwxMCBAQAogCiAJRVhDRVBUSU9OX1RBQkxFKDE2KSA6dGV4dCA9IDB4OTA5MAogCisjaWYgZGVmaW5lZChDT05GSUdfREVCVUdfUk9EQVRBKQorCS8qIC50ZXh0IHNob3VsZCBvY2N1cHkgd2hvbGUgbnVtYmVyIG9mIHBhZ2VzICovCisJLiA9IEFMSUdOKFBBR0VfU0laRSk7CisjZW5kaWYKIAlYNjRfQUxJR05fREVCVUdfUk9EQVRBX0JFR0lOCiAJUk9fREFUQShQQUdFX1NJWkUpCiAJWDY0X0FMSUdOX0RFQlVHX1JPREFUQV9FTkQKQEAgLTMzNSw3ICszMzksNyBAQAogCQlfX2Jzc19zdGFydCA9IC47CiAJCSooLmJzcy4ucGFnZV9hbGlnbmVkKQogCQkqKC5ic3MpCi0JCS4gPSBBTElHTig0KTsKKwkJLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAJCV9fYnNzX3N0b3AgPSAuOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5jIGIvYXJjaC94ODYva3ZtL3g4Ni5jCmluZGV4IGI5ODllMWYuLjQ2YTM2OGMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS94ODYuYworKysgYi9hcmNoL3g4Ni9rdm0veDg2LmMKQEAgLTk3Niw3ICs5NzYsNyBAQAogCWlmIChrdm1fdHNjX2NoYW5nZXNfZnJlcSgpKQogCQlwcmludGtfb25jZShLRVJOX1dBUk5JTkcKIAkJICJrdm06IHVucmVsaWFibGUgY3ljbGUgY29udmVyc2lvbiBvbiBhZGp1c3RhYmxlIHJhdGUgVFNDXG4iKTsKLQlyZXQgPSBuc2VjICogX19nZXRfY3B1X3ZhcihjcHVfdHNjX2toeik7CisJcmV0ID0gbnNlYyAqIF9fdGhpc19jcHVfcmVhZChjcHVfdHNjX2toeik7CiAJZG9fZGl2KHJldCwgVVNFQ19QRVJfU0VDKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTA2MSw3ICsxMDYxLDcgQEAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJa3ZtX2dldF9tc3IodiwgTVNSX0lBMzJfVFNDLCAmdHNjX3RpbWVzdGFtcCk7CiAJa2VybmVsX25zID0gZ2V0X2tlcm5lbF9ucygpOwotCXRoaXNfdHNjX2toeiA9IF9fZ2V0X2NwdV92YXIoY3B1X3RzY19raHopOworCXRoaXNfdHNjX2toeiA9IF9fdGhpc19jcHVfcmVhZChjcHVfdHNjX2toeik7CiAKIAlpZiAodW5saWtlbHkodGhpc190c2Nfa2h6ID09IDApKSB7CiAJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKQEAgLTQ0MjcsNyArNDQyNyw3IEBACiAKIHN0YXRpYyB2b2lkIHRzY19iYWQodm9pZCAqaW5mbykKIHsKLQlfX2dldF9jcHVfdmFyKGNwdV90c2Nfa2h6KSA9IDA7CisJX190aGlzX2NwdV93cml0ZShjcHVfdHNjX2toeiwgMCk7CiB9CiAKIHN0YXRpYyB2b2lkIHRzY19raHpfY2hhbmdlZCh2b2lkICpkYXRhKQpAQCAtNDQ0MSw3ICs0NDQxLDcgQEAKIAkJa2h6ID0gY3B1ZnJlcV9xdWlja19nZXQocmF3X3NtcF9wcm9jZXNzb3JfaWQoKSk7CiAJaWYgKCFraHopCiAJCWtoeiA9IHRzY19raHo7Ci0JX19nZXRfY3B1X3ZhcihjcHVfdHNjX2toeikgPSBraHo7CisJX190aGlzX2NwdV93cml0ZShjcHVfdHNjX2toeiwga2h6KTsKIH0KIAogc3RhdGljIGludCBrdm1jbG9ja19jcHVmcmVxX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgdmFsLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbGd1ZXN0L2kzODZfaGVhZC5TIGIvYXJjaC94ODYvbGd1ZXN0L2kzODZfaGVhZC5TCmluZGV4IGU3ZDUzODIuLjRmNDIwYzJmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9sZ3Vlc3QvaTM4Nl9oZWFkLlMKKysrIGIvYXJjaC94ODYvbGd1ZXN0L2kzODZfaGVhZC5TCkBAIC00LDcgKzQsNiBAQAogI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgogI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3ItZmxhZ3MuaD4KLSNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogCiAvKkc6MDIwCiAgKiBPdXIgc3Rvcnkgc3RhcnRzIHdpdGggdGhlIGtlcm5lbCBib290aW5nIGludG8gc3RhcnR1cF8zMiBpbgpAQCAtMzgsMTEzICszNyw5IEBACiAJLyogU2V0IHVwIHRoZSBpbml0aWFsIHN0YWNrIHNvIHdlIGNhbiBydW4gQyBjb2RlLiAqLwogCW1vdmwgJChpbml0X3RocmVhZF91bmlvbitUSFJFQURfU0laRSksJWVzcAogCi0JY2FsbCBpbml0X3BhZ2V0YWJsZXMKLQogCS8qIEp1bXBzIGFyZSByZWxhdGl2ZTogd2UncmUgcnVubmluZyBfX1BBR0VfT0ZGU0VUIHRvbyBsb3cuICovCiAJam1wIGxndWVzdF9pbml0K19fUEFHRV9PRkZTRVQKIAotLyoKLSAqIEluaXRpYWxpemUgcGFnZSB0YWJsZXMuICBUaGlzIGNyZWF0ZXMgYSBQREUgYW5kIGEgc2V0IG9mIHBhZ2UKLSAqIHRhYmxlcywgd2hpY2ggYXJlIGxvY2F0ZWQgaW1tZWRpYXRlbHkgYmV5b25kIF9fYnJrX2Jhc2UuICBUaGUgdmFyaWFibGUKLSAqIF9icmtfZW5kIGlzIHNldCB1cCB0byBwb2ludCB0byB0aGUgZmlyc3QgInNhZmUiIGxvY2F0aW9uLgotICogTWFwcGluZ3MgYXJlIGNyZWF0ZWQgYm90aCBhdCB2aXJ0dWFsIGFkZHJlc3MgMCAoaWRlbnRpdHkgbWFwcGluZykKLSAqIGFuZCBQQUdFX09GRlNFVCBmb3IgdXAgdG8gX2VuZC4KLSAqCi0gKiBGSVhNRTogVGhpcyBjb2RlIGlzIHRha2VuIHZlcmJhdGltIGZyb20gYXJjaC94ODYva2VybmVsL2hlYWRfMzIuUzogdGhleQotICogZG9uJ3QgaGF2ZSBhIHN0YWNrIGF0IHRoaXMgcG9pbnQsIHNvIHdlIGNhbid0IGp1c3QgdXNlIGNhbGwgYW5kIHJldC4KLSAqLwotaW5pdF9wYWdldGFibGVzOgotI2lmIFBUUlNfUEVSX1BNRCA+IDEKLSNkZWZpbmUgUEFHRV9UQUJMRV9TSVpFKHBhZ2VzKSAoKChwYWdlcykgLyBQVFJTX1BFUl9QTUQpICsgUFRSU19QRVJfUEdEKQotI2Vsc2UKLSNkZWZpbmUgUEFHRV9UQUJMRV9TSVpFKHBhZ2VzKSAoKHBhZ2VzKSAvIFBUUlNfUEVSX1BHRCkKLSNlbmRpZgotI2RlZmluZSBwYShYKSAoKFgpIC0gX19QQUdFX09GRlNFVCkKLQotLyogRW5vdWdoIHNwYWNlIHRvIGZpdCBwYWdldGFibGVzIGZvciB0aGUgbG93IG1lbW9yeSBsaW5lYXIgbWFwICovCi1NQVBQSU5HX0JFWU9ORF9FTkQgPSBcCi0JUEFHRV9UQUJMRV9TSVpFKCgoMTw8MzIpIC0gX19QQUdFX09GRlNFVCkgPj4gUEFHRV9TSElGVCkgPDwgUEFHRV9TSElGVAotI2lmZGVmIENPTkZJR19YODZfUEFFCi0KLQkvKgotCSAqIEluIFBBRSBtb2RlIGluaXRpYWxfcGFnZV90YWJsZSBpcyBzdGF0aWNhbGx5IGRlZmluZWQgdG8gY29udGFpbgotCSAqIGVub3VnaCBlbnRyaWVzIHRvIGNvdmVyIHRoZSBWTVNQTElUIG9wdGlvbiAodGhhdCBpcyB0aGUgdG9wIDEsIDIgb3IgMwotCSAqIGVudHJpZXMpLiBUaGUgaWRlbnRpdHkgbWFwcGluZyBpcyBoYW5kbGVkIGJ5IHBvaW50aW5nIHR3byBQR0QgZW50cmllcwotCSAqIHRvIHRoZSBmaXJzdCBrZXJuZWwgUE1ELgotCSAqCi0JICogTm90ZSB0aGUgdXBwZXIgaGFsZiBvZiBlYWNoIFBNRCBvciBQVEUgYXJlIGFsd2F5cyB6ZXJvIGF0IHRoaXMgc3RhZ2UuCi0JICovCi0KLSNkZWZpbmUgS1BNRFMgKCgoLV9fUEFHRV9PRkZTRVQpID4+IDMwKSAmIDMpIC8qIE51bWJlciBvZiBrZXJuZWwgUE1EcyAqLwotCi0JeG9ybCAlZWJ4LCVlYngJCQkJLyogJWVieCBpcyBrZXB0IGF0IHplcm8gKi8KLQotCW1vdmwgJHBhKF9fYnJrX2Jhc2UpLCAlZWRpCi0JbW92bCAkcGEoaW5pdGlhbF9wZ19wbWQpLCAlZWR4Ci0JbW92bCAkUFRFX0lERU5UX0FUVFIsICVlYXgKLTEwOgotCWxlYWwgUERFX0lERU5UX0FUVFIoJWVkaSksJWVjeAkJLyogQ3JlYXRlIFBNRCBlbnRyeSAqLwotCW1vdmwgJWVjeCwoJWVkeCkJCQkvKiBTdG9yZSBQTUQgZW50cnkgKi8KLQkJCQkJCS8qIFVwcGVyIGhhbGYgYWxyZWFkeSB6ZXJvICovCi0JYWRkbCAkOCwlZWR4Ci0JbW92bCAkNTEyLCVlY3gKLTExOgotCXN0b3NsCi0JeGNoZ2wgJWVheCwlZWJ4Ci0Jc3Rvc2wKLQl4Y2hnbCAlZWF4LCVlYngKLQlhZGRsICQweDEwMDAsJWVheAotCWxvb3AgMTFiCi0KLQkvKgotCSAqIEVuZCBjb25kaXRpb246IHdlIG11c3QgbWFwIHVwIHRvIHRoZSBlbmQgKyBNQVBQSU5HX0JFWU9ORF9FTkQuCi0JICovCi0JbW92bCAkcGEoX2VuZCkgKyBNQVBQSU5HX0JFWU9ORF9FTkQgKyBQVEVfSURFTlRfQVRUUiwgJWVicAotCWNtcGwgJWVicCwlZWF4Ci0JamIgMTBiCi0xOgotCWFkZGwgJF9fUEFHRV9PRkZTRVQsICVlZGkKLQltb3ZsICVlZGksIHBhKF9icmtfZW5kKQotCXNocmwgJDEyLCAlZWF4Ci0JbW92bCAlZWF4LCBwYShtYXhfcGZuX21hcHBlZCkKLQotCS8qIERvIGVhcmx5IGluaXRpYWxpemF0aW9uIG9mIHRoZSBmaXhtYXAgYXJlYSAqLwotCW1vdmwgJHBhKGluaXRpYWxfcGdfZml4bWFwKStQREVfSURFTlRfQVRUUiwlZWF4Ci0JbW92bCAlZWF4LHBhKGluaXRpYWxfcGdfcG1kKzB4MTAwMCpLUE1EUy04KQotI2Vsc2UJLyogTm90IFBBRSAqLwotCi1wYWdlX3BkZV9vZmZzZXQgPSAoX19QQUdFX09GRlNFVCA+PiAyMCk7Ci0KLQltb3ZsICRwYShfX2Jya19iYXNlKSwgJWVkaQotCW1vdmwgJHBhKGluaXRpYWxfcGFnZV90YWJsZSksICVlZHgKLQltb3ZsICRQVEVfSURFTlRfQVRUUiwgJWVheAotMTA6Ci0JbGVhbCBQREVfSURFTlRfQVRUUiglZWRpKSwlZWN4CQkvKiBDcmVhdGUgUERFIGVudHJ5ICovCi0JbW92bCAlZWN4LCglZWR4KQkJCS8qIFN0b3JlIGlkZW50aXR5IFBERSBlbnRyeSAqLwotCW1vdmwgJWVjeCxwYWdlX3BkZV9vZmZzZXQoJWVkeCkJCS8qIFN0b3JlIGtlcm5lbCBQREUgZW50cnkgKi8KLQlhZGRsICQ0LCVlZHgKLQltb3ZsICQxMDI0LCAlZWN4Ci0xMToKLQlzdG9zbAotCWFkZGwgJDB4MTAwMCwlZWF4Ci0JbG9vcCAxMWIKLQkvKgotCSAqIEVuZCBjb25kaXRpb246IHdlIG11c3QgbWFwIHVwIHRvIHRoZSBlbmQgKyBNQVBQSU5HX0JFWU9ORF9FTkQuCi0JICovCi0JbW92bCAkcGEoX2VuZCkgKyBNQVBQSU5HX0JFWU9ORF9FTkQgKyBQVEVfSURFTlRfQVRUUiwgJWVicAotCWNtcGwgJWVicCwlZWF4Ci0JamIgMTBiCi0JYWRkbCAkX19QQUdFX09GRlNFVCwgJWVkaQotCW1vdmwgJWVkaSwgcGEoX2Jya19lbmQpCi0Jc2hybCAkMTIsICVlYXgKLQltb3ZsICVlYXgsIHBhKG1heF9wZm5fbWFwcGVkKQotCi0JLyogRG8gZWFybHkgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGZpeG1hcCBhcmVhICovCi0JbW92bCAkcGEoaW5pdGlhbF9wZ19maXhtYXApK1BERV9JREVOVF9BVFRSLCVlYXgKLQltb3ZsICVlYXgscGEoaW5pdGlhbF9wYWdlX3RhYmxlKzB4ZmZjKQotI2VuZGlmCi0JcmV0Ci0KIC8qRzowNTUKICAqIFdlIGNyZWF0ZSBhIG1hY3JvIHdoaWNoIHB1dHMgdGhlIGFzc2VtYmxlciBjb2RlIGJldHdlZW4gbGdzdGFydF8gYW5kIGxnZW5kXwogICogbWFya2Vycy4gIFRoZXNlIHRlbXBsYXRlcyBhcmUgcHV0IGluIHRoZSAudGV4dCBzZWN0aW9uOiB0aGV5IGNhbid0IGJlCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9saWIvZGVsYXkuYyBiL2FyY2gveDg2L2xpYi9kZWxheS5jCmluZGV4IGZmNDg1ZDMuLmZjNDViYTggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2xpYi9kZWxheS5jCisrKyBiL2FyY2gveDg2L2xpYi9kZWxheS5jCkBAIC0xMjEsNyArMTIxLDcgQEAKIAlhc20oIm11bGwgJSVlZHgiCiAJCToiPWQiICh4bG9vcHMpLCAiPSZhIiAoZDApCiAJCToiMSIgKHhsb29wcyksICIwIgotCQkoY3B1X2RhdGEocmF3X3NtcF9wcm9jZXNzb3JfaWQoKSkubG9vcHNfcGVyX2ppZmZ5ICogKEhaLzQpKSk7CisJCSh0aGlzX2NwdV9yZWFkKGNwdV9pbmZvLmxvb3BzX3Blcl9qaWZmeSkgKiAoSFovNCkpKTsKIAogCV9fZGVsYXkoKyt4bG9vcHMpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vTWFrZWZpbGUgYi9hcmNoL3g4Ni9tbS9NYWtlZmlsZQppbmRleCA1NTU0MzM5Li4wOWRmMmY5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9tbS9NYWtlZmlsZQpAQCAtMjMsNyArMjMsNyBAQAogb2JqLSQoQ09ORklHX01NSU9UUkFDRV9URVNUKQkrPSB0ZXN0bW1pb3RyYWNlLm8KIAogb2JqLSQoQ09ORklHX05VTUEpCQkrPSBudW1hLm8gbnVtYV8kKEJJVFMpLm8KLW9iai0kKENPTkZJR19LOF9OVU1BKQkJKz0gazh0b3BvbG9neV82NC5vCitvYmotJChDT05GSUdfQU1EX05VTUEpCQkrPSBhbWR0b3BvbG9neV82NC5vCiBvYmotJChDT05GSUdfQUNQSV9OVU1BKQkJKz0gc3JhdF8kKEJJVFMpLm8KIAogb2JqLSQoQ09ORklHX0hBVkVfTUVNQkxPQ0spCQkrPSBtZW1ibG9jay5vCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9hbWR0b3BvbG9neV82NC5jIGIvYXJjaC94ODYvbW0vYW1kdG9wb2xvZ3lfNjQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGEwMDY5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvbW0vYW1kdG9wb2xvZ3lfNjQuYwpAQCAtMCwwICsxLDIzNiBAQAorLyoKKyAqIEFNRCBOVU1BIHN1cHBvcnQuCisgKiBEaXNjb3ZlciB0aGUgbWVtb3J5IG1hcCBhbmQgYXNzb2NpYXRlZCBub2Rlcy4KKyAqCisgKiBUaGlzIHZlcnNpb24gcmVhZHMgaXQgZGlyZWN0bHkgZnJvbSB0aGUgQU1EIG5vcnRoYnJpZGdlLgorICoKKyAqIENvcHlyaWdodCAyMDAyLDIwMDMgQW5kaSBLbGVlbiwgU3VTRSBMYWJzLgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L25vZGVtYXNrLmg+CisjaW5jbHVkZSA8bGludXgvbWVtYmxvY2suaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaV9pZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21tem9uZS5oPgorI2luY2x1ZGUgPGFzbS9wcm90by5oPgorI2luY2x1ZGUgPGFzbS9lODIwLmg+CisjaW5jbHVkZSA8YXNtL3BjaS1kaXJlY3QuaD4KKyNpbmNsdWRlIDxhc20vbnVtYS5oPgorI2luY2x1ZGUgPGFzbS9tcHNwZWMuaD4KKyNpbmNsdWRlIDxhc20vYXBpYy5oPgorI2luY2x1ZGUgPGFzbS9hbWRfbmIuaD4KKworc3RhdGljIHN0cnVjdCBib290bm9kZSBfX2luaXRkYXRhIG5vZGVzWzhdOworc3RhdGljIG5vZGVtYXNrX3QgX19pbml0ZGF0YSBub2Rlc19wYXJzZWQgPSBOT0RFX01BU0tfTk9ORTsKKworc3RhdGljIF9faW5pdCBpbnQgZmluZF9ub3J0aGJyaWRnZSh2b2lkKQoreworCWludCBudW07CisKKwlmb3IgKG51bSA9IDA7IG51bSA8IDMyOyBudW0rKykgeworCQl1MzIgaGVhZGVyOworCisJCWhlYWRlciA9IHJlYWRfcGNpX2NvbmZpZygwLCBudW0sIDAsIDB4MDApOworCQlpZiAoaGVhZGVyICE9IChQQ0lfVkVORE9SX0lEX0FNRCB8ICgweDExMDA8PDE2KSkgJiYKKwkJCWhlYWRlciAhPSAoUENJX1ZFTkRPUl9JRF9BTUQgfCAoMHgxMjAwPDwxNikpICYmCisJCQloZWFkZXIgIT0gKFBDSV9WRU5ET1JfSURfQU1EIHwgKDB4MTMwMDw8MTYpKSkKKwkJCWNvbnRpbnVlOworCisJCWhlYWRlciA9IHJlYWRfcGNpX2NvbmZpZygwLCBudW0sIDEsIDB4MDApOworCQlpZiAoaGVhZGVyICE9IChQQ0lfVkVORE9SX0lEX0FNRCB8ICgweDExMDE8PDE2KSkgJiYKKwkJCWhlYWRlciAhPSAoUENJX1ZFTkRPUl9JRF9BTUQgfCAoMHgxMjAxPDwxNikpICYmCisJCQloZWFkZXIgIT0gKFBDSV9WRU5ET1JfSURfQU1EIHwgKDB4MTMwMTw8MTYpKSkKKwkJCWNvbnRpbnVlOworCQlyZXR1cm4gbnVtOworCX0KKworCXJldHVybiAtMTsKK30KKworc3RhdGljIF9faW5pdCB2b2lkIGVhcmx5X2dldF9ib290X2NwdV9pZCh2b2lkKQoreworCS8qCisJICogbmVlZCB0byBnZXQgdGhlIEFQSUMgSUQgb2YgdGhlIEJTUCBzbyBjYW4gdXNlIHRoYXQgdG8KKwkgKiBjcmVhdGUgYXBpY2lkX3RvX25vZGUgaW4gYW1kX3NjYW5fbm9kZXMoKQorCSAqLworI2lmZGVmIENPTkZJR19YODZfTVBQQVJTRQorCS8qCisJICogZ2V0IGJvb3QtdGltZSBTTVAgY29uZmlndXJhdGlvbjoKKwkgKi8KKwlpZiAoc21wX2ZvdW5kX2NvbmZpZykKKwkJZWFybHlfZ2V0X3NtcF9jb25maWcoKTsKKyNlbmRpZgorfQorCitpbnQgX19pbml0IGFtZF9nZXRfbm9kZXMoc3RydWN0IGJvb3Rub2RlICpwaHlzbm9kZXMpCit7CisJaW50IGk7CisJaW50IHJldCA9IDA7CisKKwlmb3JfZWFjaF9ub2RlX21hc2soaSwgbm9kZXNfcGFyc2VkKSB7CisJCXBoeXNub2Rlc1tyZXRdLnN0YXJ0ID0gbm9kZXNbaV0uc3RhcnQ7CisJCXBoeXNub2Rlc1tyZXRdLmVuZCA9IG5vZGVzW2ldLmVuZDsKKwkJcmV0Kys7CisJfQorCXJldHVybiByZXQ7Cit9CisKK2ludCBfX2luaXQgYW1kX251bWFfaW5pdCh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuKQoreworCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBQRk5fUEhZUyhzdGFydF9wZm4pOworCXVuc2lnbmVkIGxvbmcgZW5kID0gUEZOX1BIWVMoZW5kX3Bmbik7CisJdW5zaWduZWQgbnVtbm9kZXM7CisJdW5zaWduZWQgbG9uZyBwcmV2YmFzZTsKKwlpbnQgaSwgbmIsIGZvdW5kID0gMDsKKwl1MzIgbm9kZWlkLCByZWc7CisKKwlpZiAoIWVhcmx5X3BjaV9hbGxvd2VkKCkpCisJCXJldHVybiAtMTsKKworCW5iID0gZmluZF9ub3J0aGJyaWRnZSgpOworCWlmIChuYiA8IDApCisJCXJldHVybiBuYjsKKworCXByX2luZm8oIlNjYW5uaW5nIE5VTUEgdG9wb2xvZ3kgaW4gTm9ydGhicmlkZ2UgJWRcbiIsIG5iKTsKKworCXJlZyA9IHJlYWRfcGNpX2NvbmZpZygwLCBuYiwgMCwgMHg2MCk7CisJbnVtbm9kZXMgPSAoKHJlZyA+PiA0KSAmIDB4RikgKyAxOworCWlmIChudW1ub2RlcyA8PSAxKQorCQlyZXR1cm4gLTE7CisKKwlwcl9pbmZvKCJOdW1iZXIgb2YgcGh5c2ljYWwgbm9kZXMgJWRcbiIsIG51bW5vZGVzKTsKKworCXByZXZiYXNlID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCXVuc2lnbmVkIGxvbmcgYmFzZSwgbGltaXQ7CisKKwkJYmFzZSA9IHJlYWRfcGNpX2NvbmZpZygwLCBuYiwgMSwgMHg0MCArIGkqOCk7CisJCWxpbWl0ID0gcmVhZF9wY2lfY29uZmlnKDAsIG5iLCAxLCAweDQ0ICsgaSo4KTsKKworCQlub2RlaWQgPSBsaW1pdCAmIDc7CisJCWlmICgoYmFzZSAmIDMpID09IDApIHsKKwkJCWlmIChpIDwgbnVtbm9kZXMpCisJCQkJcHJfaW5mbygiU2tpcHBpbmcgZGlzYWJsZWQgbm9kZSAlZFxuIiwgaSk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAobm9kZWlkID49IG51bW5vZGVzKSB7CisJCQlwcl9pbmZvKCJJZ25vcmluZyBleGNlc3Mgbm9kZSAlZCAoJWx4OiVseClcbiIsIG5vZGVpZCwKKwkJCQliYXNlLCBsaW1pdCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmICghbGltaXQpIHsKKwkJCXByX2luZm8oIlNraXBwaW5nIG5vZGUgZW50cnkgJWQgKGJhc2UgJWx4KVxuIiwKKwkJCQlpLCBiYXNlKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICgoYmFzZSA+PiA4KSAmIDMgfHwgKGxpbWl0ID4+IDgpICYgMykgeworCQkJcHJfZXJyKCJOb2RlICVkIHVzaW5nIGludGVybGVhdmluZyBtb2RlICVseC8lbHhcbiIsCisJCQkgICAgICAgbm9kZWlkLCAoYmFzZSA+PiA4KSAmIDMsIChsaW1pdCA+PiA4KSAmIDMpOworCQkJcmV0dXJuIC0xOworCQl9CisJCWlmIChub2RlX2lzc2V0KG5vZGVpZCwgbm9kZXNfcGFyc2VkKSkgeworCQkJcHJfaW5mbygiTm9kZSAlZCBhbHJlYWR5IHByZXNlbnQsIHNraXBwaW5nXG4iLAorCQkJCW5vZGVpZCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWxpbWl0ID4+PSAxNjsKKwkJbGltaXQgPDw9IDI0OworCQlsaW1pdCB8PSAoMTw8MjQpLTE7CisJCWxpbWl0Kys7CisKKwkJaWYgKGxpbWl0ID4gZW5kKQorCQkJbGltaXQgPSBlbmQ7CisJCWlmIChsaW1pdCA8PSBiYXNlKQorCQkJY29udGludWU7CisKKwkJYmFzZSA+Pj0gMTY7CisJCWJhc2UgPDw9IDI0OworCisJCWlmIChiYXNlIDwgc3RhcnQpCisJCQliYXNlID0gc3RhcnQ7CisJCWlmIChsaW1pdCA+IGVuZCkKKwkJCWxpbWl0ID0gZW5kOworCQlpZiAobGltaXQgPT0gYmFzZSkgeworCQkJcHJfZXJyKCJFbXB0eSBub2RlICVkXG4iLCBub2RlaWQpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGxpbWl0IDwgYmFzZSkgeworCQkJcHJfZXJyKCJOb2RlICVkIGJvZ3VzIHNldHRpbmdzICVseC0lbHguXG4iLAorCQkJICAgICAgIG5vZGVpZCwgYmFzZSwgbGltaXQpOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBDb3VsZCBzb3J0IGhlcmUsIGJ1dCBwdW4gZm9yIG5vdy4gU2hvdWxkIG5vdCBoYXBwZW4gYW55cm9hZHMuICovCisJCWlmIChwcmV2YmFzZSA+IGJhc2UpIHsKKwkJCXByX2VycigiTm9kZSBtYXAgbm90IHNvcnRlZCAlbHgsJWx4XG4iLAorCQkJICAgICAgIHByZXZiYXNlLCBiYXNlKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCisJCXByX2luZm8oIk5vZGUgJWQgTWVtQmFzZSAlMDE2bHggTGltaXQgJTAxNmx4XG4iLAorCQkJbm9kZWlkLCBiYXNlLCBsaW1pdCk7CisKKwkJZm91bmQrKzsKKworCQlub2Rlc1tub2RlaWRdLnN0YXJ0ID0gYmFzZTsKKwkJbm9kZXNbbm9kZWlkXS5lbmQgPSBsaW1pdDsKKworCQlwcmV2YmFzZSA9IGJhc2U7CisKKwkJbm9kZV9zZXQobm9kZWlkLCBub2Rlc19wYXJzZWQpOworCX0KKworCWlmICghZm91bmQpCisJCXJldHVybiAtMTsKKwlyZXR1cm4gMDsKK30KKworaW50IF9faW5pdCBhbWRfc2Nhbl9ub2Rlcyh2b2lkKQoreworCXVuc2lnbmVkIGludCBiaXRzOworCXVuc2lnbmVkIGludCBjb3JlczsKKwl1bnNpZ25lZCBpbnQgYXBpY2lkX2Jhc2U7CisJaW50IGk7CisKKwlCVUdfT04obm9kZXNfZW1wdHkobm9kZXNfcGFyc2VkKSk7CisJbm9kZV9wb3NzaWJsZV9tYXAgPSBub2Rlc19wYXJzZWQ7CisJbWVtbm9kZV9zaGlmdCA9IGNvbXB1dGVfaGFzaF9zaGlmdChub2RlcywgOCwgTlVMTCk7CisJaWYgKG1lbW5vZGVfc2hpZnQgPCAwKSB7CisJCXByX2VycigiTm8gTlVNQSBub2RlIGhhc2ggZnVuY3Rpb24gZm91bmQuIENvbnRhY3QgbWFpbnRhaW5lclxuIik7CisJCXJldHVybiAtMTsKKwl9CisJcHJfaW5mbygiVXNpbmcgbm9kZSBoYXNoIHNoaWZ0IG9mICVkXG4iLCBtZW1ub2RlX3NoaWZ0KTsKKworCS8qIHVzZSB0aGUgY29yZWlkIGJpdHMgZnJvbSBlYXJseV9pZGVudGlmeV9jcHUgKi8KKwliaXRzID0gYm9vdF9jcHVfZGF0YS54ODZfY29yZWlkX2JpdHM7CisJY29yZXMgPSAoMTw8Yml0cyk7CisJYXBpY2lkX2Jhc2UgPSAwOworCS8qIGdldCB0aGUgQVBJQyBJRCBvZiB0aGUgQlNQIGVhcmx5IGZvciBzeXN0ZW1zIHdpdGggYXBpY2lkIGxpZnRpbmcgKi8KKwllYXJseV9nZXRfYm9vdF9jcHVfaWQoKTsKKwlpZiAoYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkID4gMCkgeworCQlwcl9pbmZvKCJCU1AgQVBJQyBJRDogJTAyeFxuIiwgYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkKTsKKwkJYXBpY2lkX2Jhc2UgPSBib290X2NwdV9waHlzaWNhbF9hcGljaWQ7CisJfQorCisJZm9yX2VhY2hfbm9kZV9tYXNrKGksIG5vZGVfcG9zc2libGVfbWFwKSB7CisJCWludCBqOworCisJCW1lbWJsb2NrX3g4Nl9yZWdpc3Rlcl9hY3RpdmVfcmVnaW9ucyhpLAorCQkJCW5vZGVzW2ldLnN0YXJ0ID4+IFBBR0VfU0hJRlQsCisJCQkJbm9kZXNbaV0uZW5kID4+IFBBR0VfU0hJRlQpOworCQlmb3IgKGogPSBhcGljaWRfYmFzZTsgaiA8IGNvcmVzICsgYXBpY2lkX2Jhc2U7IGorKykKKwkJCWFwaWNpZF90b19ub2RlWyhpIDw8IGJpdHMpICsgal0gPSBpOworCQlzZXR1cF9ub2RlX2Jvb3RtZW0oaSwgbm9kZXNbaV0uc3RhcnQsIG5vZGVzW2ldLmVuZCk7CisJfQorCisJbnVtYV9pbml0X2FycmF5KCk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9pbml0LmMgYi9hcmNoL3g4Ni9tbS9pbml0LmMKaW5kZXggYzBlMjhhMS4uOTQ3ZjQyYWIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2luaXQuYworKysgYi9hcmNoL3g4Ni9tbS9pbml0LmMKQEAgLTM2NCw4ICszNjQsOSBAQAogCS8qCiAJICogV2UganVzdCBtYXJrZWQgdGhlIGtlcm5lbCB0ZXh0IHJlYWQgb25seSBhYm92ZSwgbm93IHRoYXQKIAkgKiB3ZSBhcmUgZ29pbmcgdG8gZnJlZSBwYXJ0IG9mIHRoYXQsIHdlIG5lZWQgdG8gbWFrZSB0aGF0Ci0JICogd3JpdGVhYmxlIGZpcnN0LgorCSAqIHdyaXRlYWJsZSBhbmQgbm9uLWV4ZWN1dGFibGUgZmlyc3QuCiAJICovCisJc2V0X21lbW9yeV9ueChiZWdpbiwgKGVuZCAtIGJlZ2luKSA+PiBQQUdFX1NISUZUKTsKIAlzZXRfbWVtb3J5X3J3KGJlZ2luLCAoZW5kIC0gYmVnaW4pID4+IFBBR0VfU0hJRlQpOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiRnJlZWluZyAlczogJWx1ayBmcmVlZFxuIiwgd2hhdCwgKGVuZCAtIGJlZ2luKSA+PiAxMCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9pbml0XzMyLmMgYi9hcmNoL3g4Ni9tbS9pbml0XzMyLmMKaW5kZXggMGU5NjlmOS4uZjg5YjViYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vaW5pdF8zMi5jCisrKyBiL2FyY2gveDg2L21tL2luaXRfMzIuYwpAQCAtMjI2LDcgKzIyNiw3IEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IGlzX2tlcm5lbF90ZXh0KHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKLQlpZiAoYWRkciA+PSBQQUdFX09GRlNFVCAmJiBhZGRyIDw9ICh1bnNpZ25lZCBsb25nKV9faW5pdF9lbmQpCisJaWYgKGFkZHIgPj0gKHVuc2lnbmVkIGxvbmcpX3RleHQgJiYgYWRkciA8PSAodW5zaWduZWQgbG9uZylfX2luaXRfZW5kKQogCQlyZXR1cm4gMTsKIAlyZXR1cm4gMDsKIH0KQEAgLTkxMiw2ICs5MTIsMjMgQEAKIAlzZXRfcGFnZXNfcm8odmlydF90b19wYWdlKHN0YXJ0KSwgc2l6ZSA+PiBQQUdFX1NISUZUKTsKIH0KIAorc3RhdGljIHZvaWQgbWFya19ueGRhdGFfbngodm9pZCkKK3sKKwkvKgorCSAqIFdoZW4gdGhpcyBjYWxsZWQsIGluaXQgaGFzIGFscmVhZHkgYmVlbiBleGVjdXRlZCBhbmQgcmVsZWFzZWQsCisJICogc28gZXZlcnl0aGluZyBwYXN0IF9ldGV4dCBzb3VsZCBiZSBOWC4KKwkgKi8KKwl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gUEZOX0FMSUdOKF9ldGV4dCk7CisJLyoKKwkgKiBUaGlzIGNvbWVzIGZyb20gaXNfa2VybmVsX3RleHQgdXBwZXIgbGltaXQuIEFsc28gSFBBR0Ugd2hlcmUgdXNlZDoKKwkgKi8KKwl1bnNpZ25lZCBsb25nIHNpemUgPSAoKCh1bnNpZ25lZCBsb25nKV9faW5pdF9lbmQgKyBIUEFHRV9TSVpFKSAmIEhQQUdFX01BU0spIC0gc3RhcnQ7CisKKwlpZiAoX19zdXBwb3J0ZWRfcHRlX21hc2sgJiBfUEFHRV9OWCkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiTlgtcHJvdGVjdGluZyB0aGUga2VybmVsIGRhdGE6ICVsdWtcbiIsIHNpemUgPj4gMTApOworCXNldF9wYWdlc19ueCh2aXJ0X3RvX3BhZ2Uoc3RhcnQpLCBzaXplID4+IFBBR0VfU0hJRlQpOworfQorCiB2b2lkIG1hcmtfcm9kYXRhX3JvKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBzdGFydCA9IFBGTl9BTElHTihfdGV4dCk7CkBAIC05NDYsNiArOTYzLDcgQEAKIAlwcmludGsoS0VSTl9JTkZPICJUZXN0aW5nIENQQTogd3JpdGUgcHJvdGVjdGluZyBhZ2FpblxuIik7CiAJc2V0X3BhZ2VzX3JvKHZpcnRfdG9fcGFnZShzdGFydCksIHNpemUgPj4gUEFHRV9TSElGVCk7CiAjZW5kaWYKKwltYXJrX254ZGF0YV9ueCgpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2s4dG9wb2xvZ3lfNjQuYyBiL2FyY2gveDg2L21tL2s4dG9wb2xvZ3lfNjQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODA0YTNiNi4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9tbS9rOHRvcG9sb2d5XzY0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMzcgKzAsMCBAQAotLyoKLSAqIEFNRCBLOCBOVU1BIHN1cHBvcnQuCi0gKiBEaXNjb3ZlciB0aGUgbWVtb3J5IG1hcCBhbmQgYXNzb2NpYXRlZCBub2Rlcy4KLSAqCi0gKiBUaGlzIHZlcnNpb24gcmVhZHMgaXQgZGlyZWN0bHkgZnJvbSB0aGUgSzggbm9ydGhicmlkZ2UuCi0gKgotICogQ29weXJpZ2h0IDIwMDIsMjAwMyBBbmRpIEtsZWVuLCBTdVNFIExhYnMuCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvbm9kZW1hc2suaD4KLSNpbmNsdWRlIDxsaW51eC9tZW1ibG9jay5oPgotCi0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpX2lkcy5oPgotI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vbW16b25lLmg+Ci0jaW5jbHVkZSA8YXNtL3Byb3RvLmg+Ci0jaW5jbHVkZSA8YXNtL2U4MjAuaD4KLSNpbmNsdWRlIDxhc20vcGNpLWRpcmVjdC5oPgotI2luY2x1ZGUgPGFzbS9udW1hLmg+Ci0jaW5jbHVkZSA8YXNtL21wc3BlYy5oPgotI2luY2x1ZGUgPGFzbS9hcGljLmg+Ci0jaW5jbHVkZSA8YXNtL2FtZF9uYi5oPgotCi1zdGF0aWMgc3RydWN0IGJvb3Rub2RlIF9faW5pdGRhdGEgbm9kZXNbOF07Ci1zdGF0aWMgbm9kZW1hc2tfdCBfX2luaXRkYXRhIG5vZGVzX3BhcnNlZCA9IE5PREVfTUFTS19OT05FOwotCi1zdGF0aWMgX19pbml0IGludCBmaW5kX25vcnRoYnJpZGdlKHZvaWQpCi17Ci0JaW50IG51bTsKLQotCWZvciAobnVtID0gMDsgbnVtIDwgMzI7IG51bSsrKSB7Ci0JCXUzMiBoZWFkZXI7Ci0KLQkJaGVhZGVyID0gcmVhZF9wY2lfY29uZmlnKDAsIG51bSwgMCwgMHgwMCk7Ci0JCWlmIChoZWFkZXIgIT0gKFBDSV9WRU5ET1JfSURfQU1EIHwgKDB4MTEwMDw8MTYpKSAmJgotCQkJaGVhZGVyICE9IChQQ0lfVkVORE9SX0lEX0FNRCB8ICgweDEyMDA8PDE2KSkgJiYKLQkJCWhlYWRlciAhPSAoUENJX1ZFTkRPUl9JRF9BTUQgfCAoMHgxMzAwPDwxNikpKQotCQkJY29udGludWU7Ci0KLQkJaGVhZGVyID0gcmVhZF9wY2lfY29uZmlnKDAsIG51bSwgMSwgMHgwMCk7Ci0JCWlmIChoZWFkZXIgIT0gKFBDSV9WRU5ET1JfSURfQU1EIHwgKDB4MTEwMTw8MTYpKSAmJgotCQkJaGVhZGVyICE9IChQQ0lfVkVORE9SX0lEX0FNRCB8ICgweDEyMDE8PDE2KSkgJiYKLQkJCWhlYWRlciAhPSAoUENJX1ZFTkRPUl9JRF9BTUQgfCAoMHgxMzAxPDwxNikpKQotCQkJY29udGludWU7Ci0JCXJldHVybiBudW07Ci0JfQotCi0JcmV0dXJuIC0xOwotfQotCi1zdGF0aWMgX19pbml0IHZvaWQgZWFybHlfZ2V0X2Jvb3RfY3B1X2lkKHZvaWQpCi17Ci0JLyoKLQkgKiBuZWVkIHRvIGdldCB0aGUgQVBJQyBJRCBvZiB0aGUgQlNQIHNvIGNhbiB1c2UgdGhhdCB0bwotCSAqIGNyZWF0ZSBhcGljaWRfdG9fbm9kZSBpbiBrOF9zY2FuX25vZGVzKCkKLQkgKi8KLSNpZmRlZiBDT05GSUdfWDg2X01QUEFSU0UKLQkvKgotCSAqIGdldCBib290LXRpbWUgU01QIGNvbmZpZ3VyYXRpb246Ci0JICovCi0JaWYgKHNtcF9mb3VuZF9jb25maWcpCi0JCWVhcmx5X2dldF9zbXBfY29uZmlnKCk7Ci0jZW5kaWYKLQllYXJseV9pbml0X2xhcGljX21hcHBpbmcoKTsKLX0KLQotaW50IF9faW5pdCBrOF9nZXRfbm9kZXMoc3RydWN0IGJvb3Rub2RlICpwaHlzbm9kZXMpCi17Ci0JaW50IGk7Ci0JaW50IHJldCA9IDA7Ci0KLQlmb3JfZWFjaF9ub2RlX21hc2soaSwgbm9kZXNfcGFyc2VkKSB7Ci0JCXBoeXNub2Rlc1tyZXRdLnN0YXJ0ID0gbm9kZXNbaV0uc3RhcnQ7Ci0JCXBoeXNub2Rlc1tyZXRdLmVuZCA9IG5vZGVzW2ldLmVuZDsKLQkJcmV0Kys7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLWludCBfX2luaXQgazhfbnVtYV9pbml0KHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4pCi17Ci0JdW5zaWduZWQgbG9uZyBzdGFydCA9IFBGTl9QSFlTKHN0YXJ0X3Bmbik7Ci0JdW5zaWduZWQgbG9uZyBlbmQgPSBQRk5fUEhZUyhlbmRfcGZuKTsKLQl1bnNpZ25lZCBudW1ub2RlczsKLQl1bnNpZ25lZCBsb25nIHByZXZiYXNlOwotCWludCBpLCBuYiwgZm91bmQgPSAwOwotCXUzMiBub2RlaWQsIHJlZzsKLQotCWlmICghZWFybHlfcGNpX2FsbG93ZWQoKSkKLQkJcmV0dXJuIC0xOwotCi0JbmIgPSBmaW5kX25vcnRoYnJpZGdlKCk7Ci0JaWYgKG5iIDwgMCkKLQkJcmV0dXJuIG5iOwotCi0JcHJfaW5mbygiU2Nhbm5pbmcgTlVNQSB0b3BvbG9neSBpbiBOb3J0aGJyaWRnZSAlZFxuIiwgbmIpOwotCi0JcmVnID0gcmVhZF9wY2lfY29uZmlnKDAsIG5iLCAwLCAweDYwKTsKLQludW1ub2RlcyA9ICgocmVnID4+IDQpICYgMHhGKSArIDE7Ci0JaWYgKG51bW5vZGVzIDw9IDEpCi0JCXJldHVybiAtMTsKLQotCXByX2luZm8oIk51bWJlciBvZiBwaHlzaWNhbCBub2RlcyAlZFxuIiwgbnVtbm9kZXMpOwotCi0JcHJldmJhc2UgPSAwOwotCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKLQkJdW5zaWduZWQgbG9uZyBiYXNlLCBsaW1pdDsKLQotCQliYXNlID0gcmVhZF9wY2lfY29uZmlnKDAsIG5iLCAxLCAweDQwICsgaSo4KTsKLQkJbGltaXQgPSByZWFkX3BjaV9jb25maWcoMCwgbmIsIDEsIDB4NDQgKyBpKjgpOwotCi0JCW5vZGVpZCA9IGxpbWl0ICYgNzsKLQkJaWYgKChiYXNlICYgMykgPT0gMCkgewotCQkJaWYgKGkgPCBudW1ub2RlcykKLQkJCQlwcl9pbmZvKCJTa2lwcGluZyBkaXNhYmxlZCBub2RlICVkXG4iLCBpKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmIChub2RlaWQgPj0gbnVtbm9kZXMpIHsKLQkJCXByX2luZm8oIklnbm9yaW5nIGV4Y2VzcyBub2RlICVkICglbHg6JWx4KVxuIiwgbm9kZWlkLAotCQkJCWJhc2UsIGxpbWl0KTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJaWYgKCFsaW1pdCkgewotCQkJcHJfaW5mbygiU2tpcHBpbmcgbm9kZSBlbnRyeSAlZCAoYmFzZSAlbHgpXG4iLAotCQkJCWksIGJhc2UpOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKChiYXNlID4+IDgpICYgMyB8fCAobGltaXQgPj4gOCkgJiAzKSB7Ci0JCQlwcl9lcnIoIk5vZGUgJWQgdXNpbmcgaW50ZXJsZWF2aW5nIG1vZGUgJWx4LyVseFxuIiwKLQkJCSAgICAgICBub2RlaWQsIChiYXNlID4+IDgpICYgMywgKGxpbWl0ID4+IDgpICYgMyk7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQkJaWYgKG5vZGVfaXNzZXQobm9kZWlkLCBub2Rlc19wYXJzZWQpKSB7Ci0JCQlwcl9pbmZvKCJOb2RlICVkIGFscmVhZHkgcHJlc2VudCwgc2tpcHBpbmdcbiIsCi0JCQkJbm9kZWlkKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJbGltaXQgPj49IDE2OwotCQlsaW1pdCA8PD0gMjQ7Ci0JCWxpbWl0IHw9ICgxPDwyNCktMTsKLQkJbGltaXQrKzsKLQotCQlpZiAobGltaXQgPiBlbmQpCi0JCQlsaW1pdCA9IGVuZDsKLQkJaWYgKGxpbWl0IDw9IGJhc2UpCi0JCQljb250aW51ZTsKLQotCQliYXNlID4+PSAxNjsKLQkJYmFzZSA8PD0gMjQ7Ci0KLQkJaWYgKGJhc2UgPCBzdGFydCkKLQkJCWJhc2UgPSBzdGFydDsKLQkJaWYgKGxpbWl0ID4gZW5kKQotCQkJbGltaXQgPSBlbmQ7Ci0JCWlmIChsaW1pdCA9PSBiYXNlKSB7Ci0JCQlwcl9lcnIoIkVtcHR5IG5vZGUgJWRcbiIsIG5vZGVpZCk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAobGltaXQgPCBiYXNlKSB7Ci0JCQlwcl9lcnIoIk5vZGUgJWQgYm9ndXMgc2V0dGluZ3MgJWx4LSVseC5cbiIsCi0JCQkgICAgICAgbm9kZWlkLCBiYXNlLCBsaW1pdCk7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCS8qIENvdWxkIHNvcnQgaGVyZSwgYnV0IHB1biBmb3Igbm93LiBTaG91bGQgbm90IGhhcHBlbiBhbnlyb2Fkcy4gKi8KLQkJaWYgKHByZXZiYXNlID4gYmFzZSkgewotCQkJcHJfZXJyKCJOb2RlIG1hcCBub3Qgc29ydGVkICVseCwlbHhcbiIsCi0JCQkgICAgICAgcHJldmJhc2UsIGJhc2UpOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0KLQkJcHJfaW5mbygiTm9kZSAlZCBNZW1CYXNlICUwMTZseCBMaW1pdCAlMDE2bHhcbiIsCi0JCQlub2RlaWQsIGJhc2UsIGxpbWl0KTsKLQotCQlmb3VuZCsrOwotCi0JCW5vZGVzW25vZGVpZF0uc3RhcnQgPSBiYXNlOwotCQlub2Rlc1tub2RlaWRdLmVuZCA9IGxpbWl0OwotCi0JCXByZXZiYXNlID0gYmFzZTsKLQotCQlub2RlX3NldChub2RlaWQsIG5vZGVzX3BhcnNlZCk7Ci0JfQotCi0JaWYgKCFmb3VuZCkKLQkJcmV0dXJuIC0xOwotCXJldHVybiAwOwotfQotCi1pbnQgX19pbml0IGs4X3NjYW5fbm9kZXModm9pZCkKLXsKLQl1bnNpZ25lZCBpbnQgYml0czsKLQl1bnNpZ25lZCBpbnQgY29yZXM7Ci0JdW5zaWduZWQgaW50IGFwaWNpZF9iYXNlOwotCWludCBpOwotCi0JQlVHX09OKG5vZGVzX2VtcHR5KG5vZGVzX3BhcnNlZCkpOwotCW5vZGVfcG9zc2libGVfbWFwID0gbm9kZXNfcGFyc2VkOwotCW1lbW5vZGVfc2hpZnQgPSBjb21wdXRlX2hhc2hfc2hpZnQobm9kZXMsIDgsIE5VTEwpOwotCWlmIChtZW1ub2RlX3NoaWZ0IDwgMCkgewotCQlwcl9lcnIoIk5vIE5VTUEgbm9kZSBoYXNoIGZ1bmN0aW9uIGZvdW5kLiBDb250YWN0IG1haW50YWluZXJcbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCXByX2luZm8oIlVzaW5nIG5vZGUgaGFzaCBzaGlmdCBvZiAlZFxuIiwgbWVtbm9kZV9zaGlmdCk7Ci0KLQkvKiB1c2UgdGhlIGNvcmVpZCBiaXRzIGZyb20gZWFybHlfaWRlbnRpZnlfY3B1ICovCi0JYml0cyA9IGJvb3RfY3B1X2RhdGEueDg2X2NvcmVpZF9iaXRzOwotCWNvcmVzID0gKDE8PGJpdHMpOwotCWFwaWNpZF9iYXNlID0gMDsKLQkvKiBnZXQgdGhlIEFQSUMgSUQgb2YgdGhlIEJTUCBlYXJseSBmb3Igc3lzdGVtcyB3aXRoIGFwaWNpZCBsaWZ0aW5nICovCi0JZWFybHlfZ2V0X2Jvb3RfY3B1X2lkKCk7Ci0JaWYgKGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCA+IDApIHsKLQkJcHJfaW5mbygiQlNQIEFQSUMgSUQ6ICUwMnhcbiIsIGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCk7Ci0JCWFwaWNpZF9iYXNlID0gYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkOwotCX0KLQotCWZvcl9lYWNoX25vZGVfbWFzayhpLCBub2RlX3Bvc3NpYmxlX21hcCkgewotCQlpbnQgajsKLQotCQltZW1ibG9ja194ODZfcmVnaXN0ZXJfYWN0aXZlX3JlZ2lvbnMoaSwKLQkJCQlub2Rlc1tpXS5zdGFydCA+PiBQQUdFX1NISUZULAotCQkJCW5vZGVzW2ldLmVuZCA+PiBQQUdFX1NISUZUKTsKLQkJZm9yIChqID0gYXBpY2lkX2Jhc2U7IGogPCBjb3JlcyArIGFwaWNpZF9iYXNlOyBqKyspCi0JCQlhcGljaWRfdG9fbm9kZVsoaSA8PCBiaXRzKSArIGpdID0gaTsKLQkJc2V0dXBfbm9kZV9ib290bWVtKGksIG5vZGVzW2ldLnN0YXJ0LCBub2Rlc1tpXS5lbmQpOwotCX0KLQotCW51bWFfaW5pdF9hcnJheSgpOwotCXJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0va21lbWNoZWNrL2Vycm9yLmMgYi9hcmNoL3g4Ni9tbS9rbWVtY2hlY2svZXJyb3IuYwppbmRleCBhZjNiNmM4Li43MDRhMzdjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9rbWVtY2hlY2svZXJyb3IuYworKysgYi9hcmNoL3g4Ni9tbS9rbWVtY2hlY2svZXJyb3IuYwpAQCAtMTg1LDcgKzE4NSw3IEBACiAJZS0+dHJhY2UuZW50cmllcyA9IGUtPnRyYWNlX2VudHJpZXM7CiAJZS0+dHJhY2UubWF4X2VudHJpZXMgPSBBUlJBWV9TSVpFKGUtPnRyYWNlX2VudHJpZXMpOwogCWUtPnRyYWNlLnNraXAgPSAwOwotCXNhdmVfc3RhY2tfdHJhY2VfYnAoJmUtPnRyYWNlLCByZWdzLT5icCk7CisJc2F2ZV9zdGFja190cmFjZV9yZWdzKCZlLT50cmFjZSwgcmVncyk7CiAKIAkvKiBSb3VuZCBhZGRyZXNzIGRvd24gdG8gbmVhcmVzdCAxNiBieXRlcyAqLwogCXNoYWRvd19jb3B5ID0ga21lbWNoZWNrX3NoYWRvd19sb29rdXAoYWRkcmVzcwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vbnVtYV82NC5jIGIvYXJjaC94ODYvbW0vbnVtYV82NC5jCmluZGV4IDdmZmM5YjcuLjc3NjJhNTEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL251bWFfNjQuYworKysgYi9hcmNoL3g4Ni9tbS9udW1hXzY0LmMKQEAgLTI2NCw3ICsyNjQsNyBAQAogc3RhdGljIGNoYXIgKmNtZGxpbmUgX19pbml0ZGF0YTsKIAogc3RhdGljIGludCBfX2luaXQgc2V0dXBfcGh5c25vZGVzKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAotCQkJCQlpbnQgYWNwaSwgaW50IGs4KQorCQkJCQlpbnQgYWNwaSwgaW50IGFtZCkKIHsKIAlpbnQgbnJfbm9kZXMgPSAwOwogCWludCByZXQgPSAwOwpAQCAtMjc0LDEzICsyNzQsMTMgQEAKIAlpZiAoYWNwaSkKIAkJbnJfbm9kZXMgPSBhY3BpX2dldF9ub2RlcyhwaHlzbm9kZXMpOwogI2VuZGlmCi0jaWZkZWYgQ09ORklHX0s4X05VTUEKLQlpZiAoazgpCi0JCW5yX25vZGVzID0gazhfZ2V0X25vZGVzKHBoeXNub2Rlcyk7CisjaWZkZWYgQ09ORklHX0FNRF9OVU1BCisJaWYgKGFtZCkKKwkJbnJfbm9kZXMgPSBhbWRfZ2V0X25vZGVzKHBoeXNub2Rlcyk7CiAjZW5kaWYKIAkvKgogCSAqIEJhc2ljIHNhbml0eSBjaGVja2luZyBvbiB0aGUgcGh5c2ljYWwgbm9kZSBtYXA6IHRoZXJlIG1heSBiZSBlcnJvcnMKLQkgKiBpZiB0aGUgU1JBVCBvciBLOCBpbmNvcnJlY3RseSByZXBvcnRlZCB0aGUgdG9wb2xvZ3kgb3IgdGhlIG1lbT0KKwkgKiBpZiB0aGUgU1JBVCBvciBBTUQgY29kZSBpbmNvcnJlY3RseSByZXBvcnRlZCB0aGUgdG9wb2xvZ3kgb3IgdGhlIG1lbT0KIAkgKiBrZXJuZWwgcGFyYW1ldGVyIGlzIHVzZWQuCiAJICovCiAJZm9yIChpID0gMDsgaSA8IG5yX25vZGVzOyBpKyspIHsKQEAgLTU0OSw3ICs1NDksNyBAQAogICogbnVtYT1mYWtlIGNvbW1hbmQtbGluZSBvcHRpb24uCiAgKi8KIHN0YXRpYyBpbnQgX19pbml0IG51bWFfZW11bGF0aW9uKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLAotCQkJdW5zaWduZWQgbG9uZyBsYXN0X3BmbiwgaW50IGFjcGksIGludCBrOCkKKwkJCXVuc2lnbmVkIGxvbmcgbGFzdF9wZm4sIGludCBhY3BpLCBpbnQgYW1kKQogewogCXU2NCBhZGRyID0gc3RhcnRfcGZuIDw8IFBBR0VfU0hJRlQ7CiAJdTY0IG1heF9hZGRyID0gbGFzdF9wZm4gPDwgUEFHRV9TSElGVDsKQEAgLTU1Nyw3ICs1NTcsNyBAQAogCWludCBudW1fbm9kZXM7CiAJaW50IGk7CiAKLQludW1fcGh5c19ub2RlcyA9IHNldHVwX3BoeXNub2RlcyhhZGRyLCBtYXhfYWRkciwgYWNwaSwgazgpOworCW51bV9waHlzX25vZGVzID0gc2V0dXBfcGh5c25vZGVzKGFkZHIsIG1heF9hZGRyLCBhY3BpLCBhbWQpOwogCS8qCiAJICogSWYgdGhlIG51bWE9ZmFrZSBjb21tYW5kLWxpbmUgY29udGFpbnMgYSAnTScgb3IgJ0cnLCBpdCByZXByZXNlbnRzCiAJICogdGhlIGZpeGVkIG5vZGUgc2l6ZS4gIE90aGVyd2lzZSwgaWYgaXQgaXMganVzdCBhIHNpbmdsZSBudW1iZXIgTiwKQEAgLTYwMiw3ICs2MDIsNyBAQAogI2VuZGlmIC8qIENPTkZJR19OVU1BX0VNVSAqLwogCiB2b2lkIF9faW5pdCBpbml0bWVtX2luaXQodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgbGFzdF9wZm4sCi0JCQkJaW50IGFjcGksIGludCBrOCkKKwkJCQlpbnQgYWNwaSwgaW50IGFtZCkKIHsKIAlpbnQgaTsKIApAQCAtNjEwLDcgKzYxMCw3IEBACiAJbm9kZXNfY2xlYXIobm9kZV9vbmxpbmVfbWFwKTsKIAogI2lmZGVmIENPTkZJR19OVU1BX0VNVQotCWlmIChjbWRsaW5lICYmICFudW1hX2VtdWxhdGlvbihzdGFydF9wZm4sIGxhc3RfcGZuLCBhY3BpLCBrOCkpCisJaWYgKGNtZGxpbmUgJiYgIW51bWFfZW11bGF0aW9uKHN0YXJ0X3BmbiwgbGFzdF9wZm4sIGFjcGksIGFtZCkpCiAJCXJldHVybjsKIAlub2Rlc19jbGVhcihub2RlX3Bvc3NpYmxlX21hcCk7CiAJbm9kZXNfY2xlYXIobm9kZV9vbmxpbmVfbWFwKTsKQEAgLTYyNCw4ICs2MjQsOCBAQAogCW5vZGVzX2NsZWFyKG5vZGVfb25saW5lX21hcCk7CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19LOF9OVU1BCi0JaWYgKCFudW1hX29mZiAmJiBrOCAmJiAhazhfc2Nhbl9ub2RlcygpKQorI2lmZGVmIENPTkZJR19BTURfTlVNQQorCWlmICghbnVtYV9vZmYgJiYgYW1kICYmICFhbWRfc2Nhbl9ub2RlcygpKQogCQlyZXR1cm47CiAJbm9kZXNfY2xlYXIobm9kZV9wb3NzaWJsZV9tYXApOwogCW5vZGVzX2NsZWFyKG5vZGVfb25saW5lX21hcCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9wYWdlYXR0ci5jIGIvYXJjaC94ODYvbW0vcGFnZWF0dHIuYwppbmRleCA1MzJlNzkzLi44YjgzMGNhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9wYWdlYXR0ci5jCisrKyBiL2FyY2gveDg2L21tL3BhZ2VhdHRyLmMKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9wZm4uaD4KICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KICNpbmNsdWRlIDxsaW51eC9nZnAuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KIAogI2luY2x1ZGUgPGFzbS9lODIwLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgpAQCAtMjU1LDEzICsyNTYsMTYgQEAKIAkJCQkgICB1bnNpZ25lZCBsb25nIHBmbikKIHsKIAlwZ3Byb3RfdCBmb3JiaWRkZW4gPSBfX3BncHJvdCgwKTsKKwlwZ3Byb3RfdCByZXF1aXJlZCA9IF9fcGdwcm90KDApOwogCiAJLyoKIAkgKiBUaGUgQklPUyBhcmVhIGJldHdlZW4gNjQwayBhbmQgMU1iIG5lZWRzIHRvIGJlIGV4ZWN1dGFibGUgZm9yCiAJICogUENJIEJJT1MgYmFzZWQgY29uZmlnIGFjY2VzcyAoQ09ORklHX1BDSV9HT0JJT1MpIHN1cHBvcnQuCiAJICovCi0JaWYgKHdpdGhpbihwZm4sIEJJT1NfQkVHSU4gPj4gUEFHRV9TSElGVCwgQklPU19FTkQgPj4gUEFHRV9TSElGVCkpCisjaWZkZWYgQ09ORklHX1BDSV9CSU9TCisJaWYgKHBjaWJpb3NfZW5hYmxlZCAmJiB3aXRoaW4ocGZuLCBCSU9TX0JFR0lOID4+IFBBR0VfU0hJRlQsIEJJT1NfRU5EID4+IFBBR0VfU0hJRlQpKQogCQlwZ3Byb3RfdmFsKGZvcmJpZGRlbikgfD0gX1BBR0VfTlg7CisjZW5kaWYKIAogCS8qCiAJICogVGhlIGtlcm5lbCB0ZXh0IG5lZWRzIHRvIGJlIGV4ZWN1dGFibGUgZm9yIG9idmlvdXMgcmVhc29ucwpAQCAtMjc4LDYgKzI4MiwxMiBAQAogCWlmICh3aXRoaW4ocGZuLCBfX3BhKCh1bnNpZ25lZCBsb25nKV9fc3RhcnRfcm9kYXRhKSA+PiBQQUdFX1NISUZULAogCQkgICBfX3BhKCh1bnNpZ25lZCBsb25nKV9fZW5kX3JvZGF0YSkgPj4gUEFHRV9TSElGVCkpCiAJCXBncHJvdF92YWwoZm9yYmlkZGVuKSB8PSBfUEFHRV9SVzsKKwkvKgorCSAqIC5kYXRhIGFuZCAuYnNzIHNob3VsZCBhbHdheXMgYmUgd3JpdGFibGUuCisJICovCisJaWYgKHdpdGhpbihhZGRyZXNzLCAodW5zaWduZWQgbG9uZylfc2RhdGEsICh1bnNpZ25lZCBsb25nKV9lZGF0YSkgfHwKKwkgICAgd2l0aGluKGFkZHJlc3MsICh1bnNpZ25lZCBsb25nKV9fYnNzX3N0YXJ0LCAodW5zaWduZWQgbG9uZylfX2Jzc19zdG9wKSkKKwkJcGdwcm90X3ZhbChyZXF1aXJlZCkgfD0gX1BBR0VfUlc7CiAKICNpZiBkZWZpbmVkKENPTkZJR19YODZfNjQpICYmIGRlZmluZWQoQ09ORklHX0RFQlVHX1JPREFUQSkKIAkvKgpAQCAtMzE3LDYgKzMyNyw3IEBACiAjZW5kaWYKIAogCXByb3QgPSBfX3BncHJvdChwZ3Byb3RfdmFsKHByb3QpICYgfnBncHJvdF92YWwoZm9yYmlkZGVuKSk7CisJcHJvdCA9IF9fcGdwcm90KHBncHJvdF92YWwocHJvdCkgfCBwZ3Byb3RfdmFsKHJlcXVpcmVkKSk7CiAKIAlyZXR1cm4gcHJvdDsKIH0KQEAgLTM5Myw3ICs0MDQsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgbmV4dHBhZ2VfYWRkciwgbnVtcGFnZXMsIHBtYXNrLCBwc2l6ZSwgZmxhZ3MsIGFkZHIsIHBmbjsKIAlwdGVfdCBuZXdfcHRlLCBvbGRfcHRlLCAqdG1wOwotCXBncHJvdF90IG9sZF9wcm90LCBuZXdfcHJvdDsKKwlwZ3Byb3RfdCBvbGRfcHJvdCwgbmV3X3Byb3QsIHJlcV9wcm90OwogCWludCBpLCBkb19zcGxpdCA9IDE7CiAJdW5zaWduZWQgaW50IGxldmVsOwogCkBAIC00MzgsMTAgKzQ0OSwxMCBAQAogCSAqIFdlIGFyZSBzYWZlIG5vdy4gQ2hlY2sgd2hldGhlciB0aGUgbmV3IHBncHJvdCBpcyB0aGUgc2FtZToKIAkgKi8KIAlvbGRfcHRlID0gKmtwdGU7Ci0Jb2xkX3Byb3QgPSBuZXdfcHJvdCA9IHB0ZV9wZ3Byb3Qob2xkX3B0ZSk7CisJb2xkX3Byb3QgPSBuZXdfcHJvdCA9IHJlcV9wcm90ID0gcHRlX3BncHJvdChvbGRfcHRlKTsKIAotCXBncHJvdF92YWwobmV3X3Byb3QpICY9IH5wZ3Byb3RfdmFsKGNwYS0+bWFza19jbHIpOwotCXBncHJvdF92YWwobmV3X3Byb3QpIHw9IHBncHJvdF92YWwoY3BhLT5tYXNrX3NldCk7CisJcGdwcm90X3ZhbChyZXFfcHJvdCkgJj0gfnBncHJvdF92YWwoY3BhLT5tYXNrX2Nscik7CisJcGdwcm90X3ZhbChyZXFfcHJvdCkgfD0gcGdwcm90X3ZhbChjcGEtPm1hc2tfc2V0KTsKIAogCS8qCiAJICogb2xkX3B0ZSBwb2ludHMgdG8gdGhlIGxhcmdlIHBhZ2UgYmFzZSBhZGRyZXNzLiBTbyB3ZSBuZWVkCkBAIC00NTAsMTcgKzQ2MSwxNyBAQAogCXBmbiA9IHB0ZV9wZm4ob2xkX3B0ZSkgKyAoKGFkZHJlc3MgJiAocHNpemUgLSAxKSkgPj4gUEFHRV9TSElGVCk7CiAJY3BhLT5wZm4gPSBwZm47CiAKLQluZXdfcHJvdCA9IHN0YXRpY19wcm90ZWN0aW9ucyhuZXdfcHJvdCwgYWRkcmVzcywgcGZuKTsKKwluZXdfcHJvdCA9IHN0YXRpY19wcm90ZWN0aW9ucyhyZXFfcHJvdCwgYWRkcmVzcywgcGZuKTsKIAogCS8qCiAJICogV2UgbmVlZCB0byBjaGVjayB0aGUgZnVsbCByYW5nZSwgd2hldGhlcgogCSAqIHN0YXRpY19wcm90ZWN0aW9uKCkgcmVxdWlyZXMgYSBkaWZmZXJlbnQgcGdwcm90IGZvciBvbmUgb2YKIAkgKiB0aGUgcGFnZXMgaW4gdGhlIHJhbmdlIHdlIHRyeSB0byBwcmVzZXJ2ZToKIAkgKi8KLQlhZGRyID0gYWRkcmVzcyArIFBBR0VfU0laRTsKLQlwZm4rKzsKLQlmb3IgKGkgPSAxOyBpIDwgY3BhLT5udW1wYWdlczsgaSsrLCBhZGRyICs9IFBBR0VfU0laRSwgcGZuKyspIHsKLQkJcGdwcm90X3QgY2hrX3Byb3QgPSBzdGF0aWNfcHJvdGVjdGlvbnMobmV3X3Byb3QsIGFkZHIsIHBmbik7CisJYWRkciA9IGFkZHJlc3MgJiBwbWFzazsKKwlwZm4gPSBwdGVfcGZuKG9sZF9wdGUpOworCWZvciAoaSA9IDA7IGkgPCAocHNpemUgPj4gUEFHRV9TSElGVCk7IGkrKywgYWRkciArPSBQQUdFX1NJWkUsIHBmbisrKSB7CisJCXBncHJvdF90IGNoa19wcm90ID0gc3RhdGljX3Byb3RlY3Rpb25zKHJlcV9wcm90LCBhZGRyLCBwZm4pOwogCiAJCWlmIChwZ3Byb3RfdmFsKGNoa19wcm90KSAhPSBwZ3Byb3RfdmFsKG5ld19wcm90KSkKIAkJCWdvdG8gb3V0X3VubG9jazsKQEAgLTQ4Myw3ICs0OTQsNyBAQAogCSAqIHRoYXQgd2UgbGltaXRlZCB0aGUgbnVtYmVyIG9mIHBvc3NpYmxlIHBhZ2VzIGFscmVhZHkgdG8KIAkgKiB0aGUgbnVtYmVyIG9mIHBhZ2VzIGluIHRoZSBsYXJnZSBwYWdlLgogCSAqLwotCWlmIChhZGRyZXNzID09IChuZXh0cGFnZV9hZGRyIC0gcHNpemUpICYmIGNwYS0+bnVtcGFnZXMgPT0gbnVtcGFnZXMpIHsKKwlpZiAoYWRkcmVzcyA9PSAoYWRkcmVzcyAmIHBtYXNrKSAmJiBjcGEtPm51bXBhZ2VzID09IChwc2l6ZSA+PiBQQUdFX1NISUZUKSkgewogCQkvKgogCQkgKiBUaGUgYWRkcmVzcyBpcyBhbGlnbmVkIGFuZCB0aGUgbnVtYmVyIG9mIHBhZ2VzCiAJCSAqIGNvdmVycyB0aGUgZnVsbCBwYWdlLgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vc2V0dXBfbnguYyBiL2FyY2gveDg2L21tL3NldHVwX254LmMKaW5kZXggYTMyNTBhYS4uNDEwNTMxZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vc2V0dXBfbnguYworKysgYi9hcmNoL3g4Ni9tbS9zZXR1cF9ueC5jCkBAIC00MSw3ICs0MSw3IEBACiB7CiAJaWYgKCFjcHVfaGFzX254KSB7CiAJCXByaW50ayhLRVJOX05PVElDRSAiTm90aWNlOiBOWCAoRXhlY3V0ZSBEaXNhYmxlKSBwcm90ZWN0aW9uICIKLQkJICAgICAgICJtaXNzaW5nIGluIENQVSBvciBkaXNhYmxlZCBpbiBCSU9TIVxuIik7CisJCSAgICAgICAibWlzc2luZyBpbiBDUFUhXG4iKTsKIAl9IGVsc2UgewogI2lmIGRlZmluZWQoQ09ORklHX1g4Nl82NCkgfHwgZGVmaW5lZChDT05GSUdfWDg2X1BBRSkKIAkJaWYgKGRpc2FibGVfbngpIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3NyYXRfMzIuYyBiL2FyY2gveDg2L21tL3NyYXRfMzIuYwppbmRleCBhMTdkZmZkLi5mMTY0MzQ1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9zcmF0XzMyLmMKKysrIGIvYXJjaC94ODYvbW0vc3JhdF8zMi5jCkBAIC05Miw2ICs5Miw3IEBACiAJLyogbWFyayB0aGlzIG5vZGUgYXMgInNlZW4iIGluIG5vZGUgYml0bWFwICovCiAJQk1BUF9TRVQocHhtX2JpdG1hcCwgY3B1X2FmZmluaXR5LT5wcm94aW1pdHlfZG9tYWluX2xvKTsKIAorCS8qIGRvbid0IG5lZWQgdG8gY2hlY2sgYXBpY19pZCBoZXJlLCBiZWNhdXNlIGl0IGlzIGFsd2F5cyA4IGJpdHMgKi8KIAlhcGljaWRfdG9fcHhtW2NwdV9hZmZpbml0eS0+YXBpY19pZF0gPSBjcHVfYWZmaW5pdHktPnByb3hpbWl0eV9kb21haW5fbG87CiAKIAlwcmludGsoS0VSTl9ERUJVRyAiQ1BVICUwMnggaW4gcHJveGltaXR5IGRvbWFpbiAlMDJ4XG4iLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vc3JhdF82NC5jIGIvYXJjaC94ODYvbW0vc3JhdF82NC5jCmluZGV4IGEzNWNiOWQuLjE3MWEwYWEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL3NyYXRfNjQuYworKysgYi9hcmNoL3g4Ni9tbS9zcmF0XzY0LmMKQEAgLTEzNCw2ICsxMzQsMTAgQEAKIAl9CiAKIAlhcGljX2lkID0gcGEtPmFwaWNfaWQ7CisJaWYgKGFwaWNfaWQgPj0gTUFYX0xPQ0FMX0FQSUMpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiU1JBVDogUFhNICV1IC0+IEFQSUMgMHglMDR4IC0+IE5vZGUgJXUgc2tpcHBlZCBhcGljaWQgdGhhdCBpcyB0b28gYmlnXG4iLCBweG0sIGFwaWNfaWQsIG5vZGUpOworCQlyZXR1cm47CisJfQogCWFwaWNpZF90b19ub2RlW2FwaWNfaWRdID0gbm9kZTsKIAlub2RlX3NldChub2RlLCBjcHVfbm9kZXNfcGFyc2VkKTsKIAlhY3BpX251bWEgPSAxOwpAQCAtMTY4LDYgKzE3MiwxMiBAQAogCQlhcGljX2lkID0gKHBhLT5hcGljX2lkIDw8IDgpIHwgcGEtPmxvY2FsX3NhcGljX2VpZDsKIAllbHNlCiAJCWFwaWNfaWQgPSBwYS0+YXBpY19pZDsKKworCWlmIChhcGljX2lkID49IE1BWF9MT0NBTF9BUElDKSB7CisJCXByaW50ayhLRVJOX0lORk8gIlNSQVQ6IFBYTSAldSAtPiBBUElDIDB4JTAyeCAtPiBOb2RlICV1IHNraXBwZWQgYXBpY2lkIHRoYXQgaXMgdG9vIGJpZ1xuIiwgcHhtLCBhcGljX2lkLCBub2RlKTsKKwkJcmV0dXJuOworCX0KKwogCWFwaWNpZF90b19ub2RlW2FwaWNfaWRdID0gbm9kZTsKIAlub2RlX3NldChub2RlLCBjcHVfbm9kZXNfcGFyc2VkKTsKIAlhY3BpX251bWEgPSAxOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvb3Byb2ZpbGUvYmFja3RyYWNlLmMgYi9hcmNoL3g4Ni9vcHJvZmlsZS9iYWNrdHJhY2UuYwppbmRleCAyZDQ5ZDRlLi43MmNiZWMxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9vcHJvZmlsZS9iYWNrdHJhY2UuYworKysgYi9hcmNoL3g4Ni9vcHJvZmlsZS9iYWNrdHJhY2UuYwpAQCAtMTI2LDcgKzEyNiw3IEBACiAJaWYgKCF1c2VyX21vZGVfdm0ocmVncykpIHsKIAkJdW5zaWduZWQgbG9uZyBzdGFjayA9IGtlcm5lbF9zdGFja19wb2ludGVyKHJlZ3MpOwogCQlpZiAoZGVwdGgpCi0JCQlkdW1wX3RyYWNlKE5VTEwsIHJlZ3MsICh1bnNpZ25lZCBsb25nICopc3RhY2ssIDAsCisJCQlkdW1wX3RyYWNlKE5VTEwsIHJlZ3MsICh1bnNpZ25lZCBsb25nICopc3RhY2ssCiAJCQkJICAgJmJhY2t0cmFjZV9vcHMsICZkZXB0aCk7CiAJCXJldHVybjsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9vcHJvZmlsZS9ubWlfaW50LmMgYi9hcmNoL3g4Ni9vcHJvZmlsZS9ubWlfaW50LmMKaW5kZXggNGU4YmFhZC4uZjI0YTg1MyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvb3Byb2ZpbGUvbm1pX2ludC5jCisrKyBiL2FyY2gveDg2L29wcm9maWxlL25taV9pbnQuYwpAQCAtMTQzLDcgKzE0Myw3IEBACiAKIGlubGluZSBpbnQgb3BfeDg2X3BoeXNfdG9fdmlydChpbnQgcGh5cykKIHsKLQlyZXR1cm4gX19nZXRfY3B1X3Zhcihzd2l0Y2hfaW5kZXgpICsgcGh5czsKKwlyZXR1cm4gX190aGlzX2NwdV9yZWFkKHN3aXRjaF9pbmRleCkgKyBwaHlzOwogfQogCiBpbmxpbmUgaW50IG9wX3g4Nl92aXJ0X3RvX3BoeXMoaW50IHZpcnQpCkBAIC03MzIsNiArNzMyLDkgQEAKIAkJY2FzZSAweDE0OgogCQkJY3B1X3R5cGUgPSAieDg2LTY0L2ZhbWlseTE0aCI7CiAJCQlicmVhazsKKwkJY2FzZSAweDE1OgorCQkJY3B1X3R5cGUgPSAieDg2LTY0L2ZhbWlseTE1aCI7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXJldHVybiAtRU5PREVWOwogCQl9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9vcHJvZmlsZS9ubWlfdGltZXJfaW50LmMgYi9hcmNoL3g4Ni9vcHJvZmlsZS9ubWlfdGltZXJfaW50LmMKaW5kZXggZTNlY2I3MS4uMDYzNmRkOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvb3Byb2ZpbGUvbm1pX3RpbWVyX2ludC5jCisrKyBiL2FyY2gveDg2L29wcm9maWxlL25taV90aW1lcl9pbnQuYwpAQCAtNTgsOSArNTgsNiBAQAogCiBpbnQgX19pbml0IG9wX25taV90aW1lcl9pbml0KHN0cnVjdCBvcHJvZmlsZV9vcGVyYXRpb25zICpvcHMpCiB7Ci0JaWYgKChubWlfd2F0Y2hkb2cgIT0gTk1JX0lPX0FQSUMpIHx8IChhdG9taWNfcmVhZCgmbm1pX2FjdGl2ZSkgPD0gMCkpCi0JCXJldHVybiAtRU5PREVWOwotCiAJb3BzLT5zdGFydCA9IHRpbWVyX3N0YXJ0OwogCW9wcy0+c3RvcCA9IHRpbWVyX3N0b3A7CiAJb3BzLT5jcHVfdHlwZSA9ICJ0aW1lciI7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9vcHJvZmlsZS9vcF9tb2RlbF9hbWQuYyBiL2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX2FtZC5jCmluZGV4IDdkOTBkNDcuLmMzYjhlMjQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX2FtZC5jCisrKyBiL2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX2FtZC5jCkBAIC0yOSwxMSArMjksMTIgQEAKICNpbmNsdWRlICJvcF94ODZfbW9kZWwuaCIKICNpbmNsdWRlICJvcF9jb3VudGVyLmgiCiAKLSNkZWZpbmUgTlVNX0NPVU5URVJTIDQKKyNkZWZpbmUgTlVNX0NPVU5URVJTCQk0CisjZGVmaW5lIE5VTV9DT1VOVEVSU19GMTVICTYKICNpZmRlZiBDT05GSUdfT1BST0ZJTEVfRVZFTlRfTVVMVElQTEVYCi0jZGVmaW5lIE5VTV9WSVJUX0NPVU5URVJTIDMyCisjZGVmaW5lIE5VTV9WSVJUX0NPVU5URVJTCTMyCiAjZWxzZQotI2RlZmluZSBOVU1fVklSVF9DT1VOVEVSUyBOVU1fQ09VTlRFUlMKKyNkZWZpbmUgTlVNX1ZJUlRfQ09VTlRFUlMJMAogI2VuZGlmCiAKICNkZWZpbmUgT1BfRVZFTlRfTUFTSwkJCTB4MEZGRgpAQCAtNDEsNyArNDIsOCBAQAogCiAjZGVmaW5lIE1TUl9BTURfRVZFTlRTRUxfUkVTRVJWRUQJKCgweEZGRkZGQ0YwVUxMPDwzMil8KDFVTEw8PDIxKSkKIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgcmVzZXRfdmFsdWVbTlVNX1ZJUlRfQ09VTlRFUlNdOworc3RhdGljIGludCBudW1fY291bnRlcnM7CitzdGF0aWMgdW5zaWduZWQgbG9uZyByZXNldF92YWx1ZVtPUF9NQVhfQ09VTlRFUl07CiAKICNkZWZpbmUgSUJTX0ZFVENIX1NJWkUJCQk2CiAjZGVmaW5lIElCU19PUF9TSVpFCQkJMTIKQEAgLTM4Nyw3ICszODksNyBAQAogCWludCBpOwogCiAJLyogZW5hYmxlIGFjdGl2ZSBjb3VudGVycyAqLwotCWZvciAoaSA9IDA7IGkgPCBOVU1fQ09VTlRFUlM7ICsraSkgeworCWZvciAoaSA9IDA7IGkgPCBudW1fY291bnRlcnM7ICsraSkgewogCQlpbnQgdmlydCA9IG9wX3g4Nl9waHlzX3RvX3ZpcnQoaSk7CiAJCWlmICghcmVzZXRfdmFsdWVbdmlydF0pCiAJCQljb250aW51ZTsKQEAgLTQwNiw3ICs0MDgsNyBAQAogewogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IE5VTV9DT1VOVEVSUzsgKytpKSB7CisJZm9yIChpID0gMDsgaSA8IG51bV9jb3VudGVyczsgKytpKSB7CiAJCWlmICghbXNycy0+Y291bnRlcnNbaV0uYWRkcikKIAkJCWNvbnRpbnVlOwogCQlyZWxlYXNlX3BlcmZjdHJfbm1pKE1TUl9LN19QRVJGQ1RSMCArIGkpOwpAQCAtNDE4LDcgKzQyMCw3IEBACiB7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgTlVNX0NPVU5URVJTOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2NvdW50ZXJzOyBpKyspIHsKIAkJaWYgKCFyZXNlcnZlX3BlcmZjdHJfbm1pKE1TUl9LN19QRVJGQ1RSMCArIGkpKQogCQkJZ290byBmYWlsOwogCQlpZiAoIXJlc2VydmVfZXZudHNlbF9ubWkoTVNSX0s3X0VWTlRTRUwwICsgaSkpIHsKQEAgLTQyNiw4ICs0MjgsMTMgQEAKIAkJCWdvdG8gZmFpbDsKIAkJfQogCQkvKiBib3RoIHJlZ2lzdGVycyBtdXN0IGJlIHJlc2VydmVkICovCi0JCW1zcnMtPmNvdW50ZXJzW2ldLmFkZHIgPSBNU1JfSzdfUEVSRkNUUjAgKyBpOwotCQltc3JzLT5jb250cm9sc1tpXS5hZGRyID0gTVNSX0s3X0VWTlRTRUwwICsgaTsKKwkJaWYgKG51bV9jb3VudGVycyA9PSBOVU1fQ09VTlRFUlNfRjE1SCkgeworCQkJbXNycy0+Y291bnRlcnNbaV0uYWRkciA9IE1TUl9GMTVIX1BFUkZfQ1RSICsgKGkgPDwgMSk7CisJCQltc3JzLT5jb250cm9sc1tpXS5hZGRyID0gTVNSX0YxNUhfUEVSRl9DVEwgKyAoaSA8PCAxKTsKKwkJfSBlbHNlIHsKKwkJCW1zcnMtPmNvbnRyb2xzW2ldLmFkZHIgPSBNU1JfSzdfRVZOVFNFTDAgKyBpOworCQkJbXNycy0+Y291bnRlcnNbaV0uYWRkciA9IE1TUl9LN19QRVJGQ1RSMCArIGk7CisJCX0KIAkJY29udGludWU7CiAJZmFpbDoKIAkJaWYgKCFjb3VudGVyX2NvbmZpZ1tpXS5lbmFibGVkKQpAQCAtNDQ3LDcgKzQ1NCw3IEBACiAJaW50IGk7CiAKIAkvKiBzZXR1cCByZXNldF92YWx1ZSAqLwotCWZvciAoaSA9IDA7IGkgPCBOVU1fVklSVF9DT1VOVEVSUzsgKytpKSB7CisJZm9yIChpID0gMDsgaSA8IE9QX01BWF9DT1VOVEVSOyArK2kpIHsKIAkJaWYgKGNvdW50ZXJfY29uZmlnW2ldLmVuYWJsZWQKIAkJICAgICYmIG1zcnMtPmNvdW50ZXJzW29wX3g4Nl92aXJ0X3RvX3BoeXMoaSldLmFkZHIpCiAJCQlyZXNldF92YWx1ZVtpXSA9IGNvdW50ZXJfY29uZmlnW2ldLmNvdW50OwpAQCAtNDU2LDcgKzQ2Myw3IEBACiAJfQogCiAJLyogY2xlYXIgYWxsIGNvdW50ZXJzICovCi0JZm9yIChpID0gMDsgaSA8IE5VTV9DT1VOVEVSUzsgKytpKSB7CisJZm9yIChpID0gMDsgaSA8IG51bV9jb3VudGVyczsgKytpKSB7CiAJCWlmICghbXNycy0+Y29udHJvbHNbaV0uYWRkcikKIAkJCWNvbnRpbnVlOwogCQlyZG1zcmwobXNycy0+Y29udHJvbHNbaV0uYWRkciwgdmFsKTsKQEAgLTQ3Miw3ICs0NzksNyBAQAogCX0KIAogCS8qIGVuYWJsZSBhY3RpdmUgY291bnRlcnMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgTlVNX0NPVU5URVJTOyArK2kpIHsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2NvdW50ZXJzOyArK2kpIHsKIAkJaW50IHZpcnQgPSBvcF94ODZfcGh5c190b192aXJ0KGkpOwogCQlpZiAoIXJlc2V0X3ZhbHVlW3ZpcnRdKQogCQkJY29udGludWU7CkBAIC01MDMsNyArNTEwLDcgQEAKIAl1NjQgdmFsOwogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IE5VTV9DT1VOVEVSUzsgKytpKSB7CisJZm9yIChpID0gMDsgaSA8IG51bV9jb3VudGVyczsgKytpKSB7CiAJCWludCB2aXJ0ID0gb3BfeDg2X3BoeXNfdG9fdmlydChpKTsKIAkJaWYgKCFyZXNldF92YWx1ZVt2aXJ0XSkKIAkJCWNvbnRpbnVlOwpAQCAtNTI2LDcgKzUzMyw3IEBACiAJdTY0IHZhbDsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBOVU1fQ09VTlRFUlM7ICsraSkgeworCWZvciAoaSA9IDA7IGkgPCBudW1fY291bnRlcnM7ICsraSkgewogCQlpZiAoIXJlc2V0X3ZhbHVlW29wX3g4Nl9waHlzX3RvX3ZpcnQoaSldKQogCQkJY29udGludWU7CiAJCXJkbXNybChtc3JzLT5jb250cm9sc1tpXS5hZGRyLCB2YWwpOwpAQCAtNTQ2LDcgKzU1Myw3IEBACiAJICogU3VidGxlOiBzdG9wIG9uIGFsbCBjb3VudGVycyB0byBhdm9pZCByYWNlIHdpdGggc2V0dGluZyBvdXIKIAkgKiBwbSBjYWxsYmFjawogCSAqLwotCWZvciAoaSA9IDA7IGkgPCBOVU1fQ09VTlRFUlM7ICsraSkgeworCWZvciAoaSA9IDA7IGkgPCBudW1fY291bnRlcnM7ICsraSkgewogCQlpZiAoIXJlc2V0X3ZhbHVlW29wX3g4Nl9waHlzX3RvX3ZpcnQoaSldKQogCQkJY29udGludWU7CiAJCXJkbXNybChtc3JzLT5jb250cm9sc1tpXS5hZGRyLCB2YWwpOwpAQCAtNjAzLDYgKzYxMCw3IEBACiAJCXJldCA9IHNldHVwX2lic19jdGwoaSk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OworCQlwcl9lcnIoRldfQlVHICJ1c2luZyBvZmZzZXQgJWQgZm9yIElCUyBpbnRlcnJ1cHRzXG4iLCBpKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC03MDYsMTggKzcxNCwyOSBAQAogCXJldHVybiAwOwogfQogCitzdHJ1Y3Qgb3BfeDg2X21vZGVsX3NwZWMgb3BfYW1kX3NwZWM7CisKIHN0YXRpYyBpbnQgb3BfYW1kX2luaXQoc3RydWN0IG9wcm9maWxlX29wZXJhdGlvbnMgKm9wcykKIHsKIAlpbml0X2licygpOwogCWNyZWF0ZV9hcmNoX2ZpbGVzID0gb3BzLT5jcmVhdGVfZmlsZXM7CiAJb3BzLT5jcmVhdGVfZmlsZXMgPSBzZXR1cF9pYnNfZmlsZXM7CisKKwlpZiAoYm9vdF9jcHVfZGF0YS54ODYgPT0gMHgxNSkgeworCQludW1fY291bnRlcnMgPSBOVU1fQ09VTlRFUlNfRjE1SDsKKwl9IGVsc2UgeworCQludW1fY291bnRlcnMgPSBOVU1fQ09VTlRFUlM7CisJfQorCisJb3BfYW1kX3NwZWMubnVtX2NvdW50ZXJzID0gbnVtX2NvdW50ZXJzOworCW9wX2FtZF9zcGVjLm51bV9jb250cm9scyA9IG51bV9jb3VudGVyczsKKwlvcF9hbWRfc3BlYy5udW1fdmlydF9jb3VudGVycyA9IG1heChudW1fY291bnRlcnMsIE5VTV9WSVJUX0NPVU5URVJTKTsKKwogCXJldHVybiAwOwogfQogCiBzdHJ1Y3Qgb3BfeDg2X21vZGVsX3NwZWMgb3BfYW1kX3NwZWMgPSB7Ci0JLm51bV9jb3VudGVycwkJPSBOVU1fQ09VTlRFUlMsCi0JLm51bV9jb250cm9scwkJPSBOVU1fQ09VTlRFUlMsCi0JLm51bV92aXJ0X2NvdW50ZXJzCT0gTlVNX1ZJUlRfQ09VTlRFUlMsCisJLyogbnVtX2NvdW50ZXJzL251bV9jb250cm9scyBmaWxsZWQgaW4gYXQgcnVudGltZSAqLwogCS5yZXNlcnZlZAkJPSBNU1JfQU1EX0VWRU5UU0VMX1JFU0VSVkVELAogCS5ldmVudF9tYXNrCQk9IE9QX0VWRU5UX01BU0ssCiAJLmluaXQJCQk9IG9wX2FtZF9pbml0LApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvb3Byb2ZpbGUvb3BfbW9kZWxfcDQuYyBiL2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX3A0LmMKaW5kZXggMTgyNTU4ZC4uOWZhZGVjMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvb3Byb2ZpbGUvb3BfbW9kZWxfcDQuYworKysgYi9hcmNoL3g4Ni9vcHJvZmlsZS9vcF9tb2RlbF9wNC5jCkBAIC0xMSw3ICsxMSw3IEBACiAjaW5jbHVkZSA8bGludXgvb3Byb2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9ubWkuaD4KKyNpbmNsdWRlIDxhc20vbm1pLmg+CiAjaW5jbHVkZSA8YXNtL21zci5oPgogI2luY2x1ZGUgPGFzbS9maXhtYXAuaD4KICNpbmNsdWRlIDxhc20vYXBpYy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvb3Byb2ZpbGUvb3BfbW9kZWxfcHByby5jIGIvYXJjaC94ODYvb3Byb2ZpbGUvb3BfbW9kZWxfcHByby5jCmluZGV4IGQ3NjljZGEuLjk0Yjc0NTAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX3Bwcm8uYworKysgYi9hcmNoL3g4Ni9vcHJvZmlsZS9vcF9tb2RlbF9wcHJvLmMKQEAgLTk1LDggKzk1LDggQEAKIAkJICogY291bnRlciB3aWR0aDoKIAkJICovCiAJCWlmICghKGVheC5zcGxpdC52ZXJzaW9uX2lkID09IDAgJiYKLQkJCWN1cnJlbnRfY3B1X2RhdGEueDg2ID09IDYgJiYKLQkJCQljdXJyZW50X2NwdV9kYXRhLng4Nl9tb2RlbCA9PSAxNSkpIHsKKwkJCV9fdGhpc19jcHVfcmVhZChjcHVfaW5mby54ODYpID09IDYgJiYKKwkJCQlfX3RoaXNfY3B1X3JlYWQoY3B1X2luZm8ueDg2X21vZGVsKSA9PSAxNSkpIHsKIAogCQkJaWYgKGNvdW50ZXJfd2lkdGggPCBlYXguc3BsaXQuYml0X3dpZHRoKQogCQkJCWNvdW50ZXJfd2lkdGggPSBlYXguc3BsaXQuYml0X3dpZHRoOwpAQCAtMjM1LDggKzIzNSw4IEBACiAJZWF4LmZ1bGwgPSBjcHVpZF9lYXgoMHhhKTsKIAogCS8qIFdvcmthcm91bmQgZm9yIEJJT1MgYnVncyBpbiA2LzE1LiBUYWtlbiBmcm9tIHBlcmZtb24yICovCi0JaWYgKGVheC5zcGxpdC52ZXJzaW9uX2lkID09IDAgJiYgY3VycmVudF9jcHVfZGF0YS54ODYgPT0gNiAmJgotCQljdXJyZW50X2NwdV9kYXRhLng4Nl9tb2RlbCA9PSAxNSkgeworCWlmIChlYXguc3BsaXQudmVyc2lvbl9pZCA9PSAwICYmIF9fdGhpc19jcHVfcmVhZChjcHVfaW5mby54ODYpID09IDYgJiYKKwkJX190aGlzX2NwdV9yZWFkKGNwdV9pbmZvLng4Nl9tb2RlbCkgPT0gMTUpIHsKIAkJZWF4LnNwbGl0LnZlcnNpb25faWQgPSAyOwogCQllYXguc3BsaXQubnVtX2NvdW50ZXJzID0gMjsKIAkJZWF4LnNwbGl0LmJpdF93aWR0aCA9IDQwOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcGNpL01ha2VmaWxlIGIvYXJjaC94ODYvcGNpL01ha2VmaWxlCmluZGV4IGVmZmQ5NmUuLjZiODc1OWYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BjaS9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9wY2kvTWFrZWZpbGUKQEAgLTcsNiArNyw3IEBACiBvYmotJChDT05GSUdfUENJX1hFTikJCSs9IHhlbi5vCiAKIG9iai15CQkJCSs9IGZpeHVwLm8KK29iai0kKENPTkZJR19YODZfSU5URUxfQ0UpICAgICAgKz0gY2U0MTAwLm8KIG9iai0kKENPTkZJR19BQ1BJKQkJKz0gYWNwaS5vCiBvYmoteQkJCQkrPSBsZWdhY3kubyBpcnEubwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wY2kvY2U0MTAwLmMgYi9hcmNoL3g4Ni9wY2kvY2U0MTAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODViNjhlZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L3BjaS9jZTQxMDAuYwpAQCAtMCwwICsxLDMxNSBAQAorLyoKKyAqICBHUEwgTElDRU5TRSBTVU1NQVJZCisgKgorICogIENvcHlyaWdodChjKSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICogIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uCisgKiAgaW4gdGhlIGZpbGUgY2FsbGVkIExJQ0VOU0UuR1BMLgorICoKKyAqICBDb250YWN0IEluZm9ybWF0aW9uOgorICogICAgSW50ZWwgQ29ycG9yYXRpb24KKyAqICAgIDIyMDAgTWlzc2lvbiBDb2xsZWdlIEJsdmQuCisgKiAgICBTYW50YSBDbGFyYSwgQ0EgIDk3MDUyCisgKgorICogVGhpcyBwcm92aWRlcyBhY2Nlc3MgbWV0aG9kcyBmb3IgUENJIHJlZ2lzdGVycyB0aGF0IG1pcy1iZWhhdmUgb24KKyAqIHRoZSBDRTQxMDAuIEVhY2ggcmVnaXN0ZXIgY2FuIGJlIGFzc2lnbmVkIGEgcHJpdmF0ZSBpbml0LCByZWFkIGFuZAorICogd3JpdGUgcm91dGluZS4gVGhlIGV4Y2VwdGlvbiB0byB0aGlzIGlzIHRoZSBicmlkZ2UgZGV2aWNlLiAgVGhlCisgKiBicmlkZ2UgZGV2aWNlIGlzIHRoZSBvbmx5IGRldmljZSBvbiBidXMgemVybyAoMCkgdGhhdCByZXF1aXJlcyBhbnkKKyAqIGZpeHVwIHNvIGl0IGlzIGEgc3BlY2lhbCBjYXNlIEFUTQorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNpbmNsdWRlIDxhc20vcGNpX3g4Ni5oPgorCitzdHJ1Y3Qgc2ltX3JlZyB7CisJdTMyIHZhbHVlOworCXUzMiBtYXNrOworfTsKKworc3RydWN0IHNpbV9kZXZfcmVnIHsKKwlpbnQgZGV2X2Z1bmM7CisJaW50IHJlZzsKKwl2b2lkICgqaW5pdCkoc3RydWN0IHNpbV9kZXZfcmVnICpyZWcpOworCXZvaWQgKCpyZWFkKShzdHJ1Y3Qgc2ltX2Rldl9yZWcgKnJlZywgdTMyICp2YWx1ZSk7CisJdm9pZCAoKndyaXRlKShzdHJ1Y3Qgc2ltX2Rldl9yZWcgKnJlZywgdTMyIHZhbHVlKTsKKwlzdHJ1Y3Qgc2ltX3JlZyBzaW1fcmVnOworfTsKKworc3RydWN0IHNpbV9yZWdfb3AgeworCXZvaWQgKCppbml0KShzdHJ1Y3Qgc2ltX2Rldl9yZWcgKnJlZyk7CisJdm9pZCAoKnJlYWQpKHN0cnVjdCBzaW1fZGV2X3JlZyAqcmVnLCB1MzIgdmFsdWUpOworCXZvaWQgKCp3cml0ZSkoc3RydWN0IHNpbV9kZXZfcmVnICpyZWcsIHUzMiB2YWx1ZSk7Cit9OworCisjZGVmaW5lIE1CICgxMDI0ICogMTAyNCkKKyNkZWZpbmUgS0IgKDEwMjQpCisjZGVmaW5lIFNJWkVfVE9fTUFTSyhzaXplKSAofihzaXplIC0gMSkpCisKKyNkZWZpbmUgREVGSU5FX1JFRyhkZXZpY2UsIGZ1bmMsIG9mZnNldCwgc2l6ZSwgaW5pdF9vcCwgcmVhZF9vcCwgd3JpdGVfb3ApXAoreyBQQ0lfREVWRk4oZGV2aWNlLCBmdW5jKSwgb2Zmc2V0LCBpbml0X29wLCByZWFkX29wLCB3cml0ZV9vcCxcCisJezAsIFNJWkVfVE9fTUFTSyhzaXplKX0gfSwKKworc3RhdGljIHZvaWQgcmVnX2luaXQoc3RydWN0IHNpbV9kZXZfcmVnICpyZWcpCit7CisJcGNpX2RpcmVjdF9jb25mMS5yZWFkKDAsIDEsIHJlZy0+ZGV2X2Z1bmMsIHJlZy0+cmVnLCA0LAorCQkJICAgICAgJnJlZy0+c2ltX3JlZy52YWx1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHJlZ19yZWFkKHN0cnVjdCBzaW1fZGV2X3JlZyAqcmVnLCB1MzIgKnZhbHVlKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnBjaV9jb25maWdfbG9jaywgZmxhZ3MpOworCSp2YWx1ZSA9IHJlZy0+c2ltX3JlZy52YWx1ZTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGNpX2NvbmZpZ19sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIHJlZ193cml0ZShzdHJ1Y3Qgc2ltX2Rldl9yZWcgKnJlZywgdTMyIHZhbHVlKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnBjaV9jb25maWdfbG9jaywgZmxhZ3MpOworCXJlZy0+c2ltX3JlZy52YWx1ZSA9ICh2YWx1ZSAmIHJlZy0+c2ltX3JlZy5tYXNrKSB8CisJCShyZWctPnNpbV9yZWcudmFsdWUgJiB+cmVnLT5zaW1fcmVnLm1hc2spOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZwY2lfY29uZmlnX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgc2F0YV9yZWdfaW5pdChzdHJ1Y3Qgc2ltX2Rldl9yZWcgKnJlZykKK3sKKwlwY2lfZGlyZWN0X2NvbmYxLnJlYWQoMCwgMSwgUENJX0RFVkZOKDE0LCAwKSwgMHgxMCwgNCwKKwkJCSAgICAgICZyZWctPnNpbV9yZWcudmFsdWUpOworCXJlZy0+c2ltX3JlZy52YWx1ZSArPSAweDQwMDsKK30KKworc3RhdGljIHZvaWQgZWhjaV9yZWdfcmVhZChzdHJ1Y3Qgc2ltX2Rldl9yZWcgKnJlZywgdTMyICp2YWx1ZSkKK3sKKwlyZWdfcmVhZChyZWcsIHZhbHVlKTsKKwlpZiAoKnZhbHVlICE9IHJlZy0+c2ltX3JlZy5tYXNrKQorCQkqdmFsdWUgfD0gMHgxMDA7Cit9CisKK3ZvaWQgc2F0YV9yZXZpZF9pbml0KHN0cnVjdCBzaW1fZGV2X3JlZyAqcmVnKQoreworCXJlZy0+c2ltX3JlZy52YWx1ZSA9IDB4MDEwNjAxMDA7CisJcmVnLT5zaW1fcmVnLm1hc2sgPSAwOworfQorCitzdGF0aWMgdm9pZCBzYXRhX3JldmlkX3JlYWQoc3RydWN0IHNpbV9kZXZfcmVnICpyZWcsIHUzMiAqdmFsdWUpCit7CisJcmVnX3JlYWQocmVnLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2ltX2Rldl9yZWcgYnVzMV9maXh1cHNbXSA9IHsKKwlERUZJTkVfUkVHKDIsIDAsIDB4MTAsICgxNipNQiksIHJlZ19pbml0LCByZWdfcmVhZCwgcmVnX3dyaXRlKQorCURFRklORV9SRUcoMiwgMCwgMHgxNCwgKDI1NiksIHJlZ19pbml0LCByZWdfcmVhZCwgcmVnX3dyaXRlKQorCURFRklORV9SRUcoMiwgMSwgMHgxMCwgKDY0KktCKSwgcmVnX2luaXQsIHJlZ19yZWFkLCByZWdfd3JpdGUpCisJREVGSU5FX1JFRygzLCAwLCAweDEwLCAoNjQqS0IpLCByZWdfaW5pdCwgcmVnX3JlYWQsIHJlZ193cml0ZSkKKwlERUZJTkVfUkVHKDQsIDAsIDB4MTAsICgxMjgqS0IpLCByZWdfaW5pdCwgcmVnX3JlYWQsIHJlZ193cml0ZSkKKwlERUZJTkVfUkVHKDQsIDEsIDB4MTAsICgxMjgqS0IpLCByZWdfaW5pdCwgcmVnX3JlYWQsIHJlZ193cml0ZSkKKwlERUZJTkVfUkVHKDYsIDAsIDB4MTAsICg1MTIqS0IpLCByZWdfaW5pdCwgcmVnX3JlYWQsIHJlZ193cml0ZSkKKwlERUZJTkVfUkVHKDYsIDEsIDB4MTAsICg1MTIqS0IpLCByZWdfaW5pdCwgcmVnX3JlYWQsIHJlZ193cml0ZSkKKwlERUZJTkVfUkVHKDYsIDIsIDB4MTAsICg2NCpLQiksIHJlZ19pbml0LCByZWdfcmVhZCwgcmVnX3dyaXRlKQorCURFRklORV9SRUcoOCwgMCwgMHgxMCwgKDEqTUIpLCByZWdfaW5pdCwgcmVnX3JlYWQsIHJlZ193cml0ZSkKKwlERUZJTkVfUkVHKDgsIDEsIDB4MTAsICg2NCpLQiksIHJlZ19pbml0LCByZWdfcmVhZCwgcmVnX3dyaXRlKQorCURFRklORV9SRUcoOCwgMiwgMHgxMCwgKDY0KktCKSwgcmVnX2luaXQsIHJlZ19yZWFkLCByZWdfd3JpdGUpCisJREVGSU5FX1JFRyg5LCAwLCAweDEwICwgKDEqTUIpLCByZWdfaW5pdCwgcmVnX3JlYWQsIHJlZ193cml0ZSkKKwlERUZJTkVfUkVHKDksIDAsIDB4MTQsICg2NCpLQiksIHJlZ19pbml0LCByZWdfcmVhZCwgcmVnX3dyaXRlKQorCURFRklORV9SRUcoMTAsIDAsIDB4MTAsICgyNTYpLCByZWdfaW5pdCwgcmVnX3JlYWQsIHJlZ193cml0ZSkKKwlERUZJTkVfUkVHKDEwLCAwLCAweDE0LCAoMjU2Kk1CKSwgcmVnX2luaXQsIHJlZ19yZWFkLCByZWdfd3JpdGUpCisJREVGSU5FX1JFRygxMSwgMCwgMHgxMCwgKDI1NiksIHJlZ19pbml0LCByZWdfcmVhZCwgcmVnX3dyaXRlKQorCURFRklORV9SRUcoMTEsIDAsIDB4MTQsICgyNTYpLCByZWdfaW5pdCwgcmVnX3JlYWQsIHJlZ193cml0ZSkKKwlERUZJTkVfUkVHKDExLCAxLCAweDEwLCAoMjU2KSwgcmVnX2luaXQsIHJlZ19yZWFkLCByZWdfd3JpdGUpCisJREVGSU5FX1JFRygxMSwgMiwgMHgxMCwgKDI1NiksIHJlZ19pbml0LCByZWdfcmVhZCwgcmVnX3dyaXRlKQorCURFRklORV9SRUcoMTEsIDIsIDB4MTQsICgyNTYpLCByZWdfaW5pdCwgcmVnX3JlYWQsIHJlZ193cml0ZSkKKwlERUZJTkVfUkVHKDExLCAyLCAweDE4LCAoMjU2KSwgcmVnX2luaXQsIHJlZ19yZWFkLCByZWdfd3JpdGUpCisJREVGSU5FX1JFRygxMSwgMywgMHgxMCwgKDI1NiksIHJlZ19pbml0LCByZWdfcmVhZCwgcmVnX3dyaXRlKQorCURFRklORV9SRUcoMTEsIDMsIDB4MTQsICgyNTYpLCByZWdfaW5pdCwgcmVnX3JlYWQsIHJlZ193cml0ZSkKKwlERUZJTkVfUkVHKDExLCA0LCAweDEwLCAoMjU2KSwgcmVnX2luaXQsIHJlZ19yZWFkLCByZWdfd3JpdGUpCisJREVGSU5FX1JFRygxMSwgNSwgMHgxMCwgKDY0KktCKSwgcmVnX2luaXQsIHJlZ19yZWFkLCByZWdfd3JpdGUpCisJREVGSU5FX1JFRygxMSwgNiwgMHgxMCwgKDI1NiksIHJlZ19pbml0LCByZWdfcmVhZCwgcmVnX3dyaXRlKQorCURFRklORV9SRUcoMTEsIDcsIDB4MTAsICg2NCpLQiksIHJlZ19pbml0LCByZWdfcmVhZCwgcmVnX3dyaXRlKQorCURFRklORV9SRUcoMTIsIDAsIDB4MTAsICgxMjgqS0IpLCByZWdfaW5pdCwgcmVnX3JlYWQsIHJlZ193cml0ZSkKKwlERUZJTkVfUkVHKDEyLCAwLCAweDE0LCAoMjU2KSwgcmVnX2luaXQsIHJlZ19yZWFkLCByZWdfd3JpdGUpCisJREVGSU5FX1JFRygxMiwgMSwgMHgxMCwgKDEwMjQpLCByZWdfaW5pdCwgcmVnX3JlYWQsIHJlZ193cml0ZSkKKwlERUZJTkVfUkVHKDEzLCAwLCAweDEwLCAoMzIqS0IpLCByZWdfaW5pdCwgZWhjaV9yZWdfcmVhZCwgcmVnX3dyaXRlKQorCURFRklORV9SRUcoMTMsIDEsIDB4MTAsICgzMipLQiksIHJlZ19pbml0LCBlaGNpX3JlZ19yZWFkLCByZWdfd3JpdGUpCisJREVGSU5FX1JFRygxNCwgMCwgMHg4LCAgMCwgc2F0YV9yZXZpZF9pbml0LCBzYXRhX3JldmlkX3JlYWQsIDApCisJREVGSU5FX1JFRygxNCwgMCwgMHgxMCwgMCwgcmVnX2luaXQsIHJlZ19yZWFkLCByZWdfd3JpdGUpCisJREVGSU5FX1JFRygxNCwgMCwgMHgxNCwgMCwgcmVnX2luaXQsIHJlZ19yZWFkLCByZWdfd3JpdGUpCisJREVGSU5FX1JFRygxNCwgMCwgMHgxOCwgMCwgcmVnX2luaXQsIHJlZ19yZWFkLCByZWdfd3JpdGUpCisJREVGSU5FX1JFRygxNCwgMCwgMHgxQywgMCwgcmVnX2luaXQsIHJlZ19yZWFkLCByZWdfd3JpdGUpCisJREVGSU5FX1JFRygxNCwgMCwgMHgyMCwgMCwgcmVnX2luaXQsIHJlZ19yZWFkLCByZWdfd3JpdGUpCisJREVGSU5FX1JFRygxNCwgMCwgMHgyNCwgKDB4MjAwKSwgc2F0YV9yZWdfaW5pdCwgcmVnX3JlYWQsIHJlZ193cml0ZSkKKwlERUZJTkVfUkVHKDE1LCAwLCAweDEwLCAoNjQqS0IpLCByZWdfaW5pdCwgcmVnX3JlYWQsIHJlZ193cml0ZSkKKwlERUZJTkVfUkVHKDE1LCAwLCAweDE0LCAoNjQqS0IpLCByZWdfaW5pdCwgcmVnX3JlYWQsIHJlZ193cml0ZSkKKwlERUZJTkVfUkVHKDE2LCAwLCAweDEwLCAoNjQqS0IpLCByZWdfaW5pdCwgcmVnX3JlYWQsIHJlZ193cml0ZSkKKwlERUZJTkVfUkVHKDE2LCAwLCAweDE0LCAoNjQqTUIpLCByZWdfaW5pdCwgcmVnX3JlYWQsIHJlZ193cml0ZSkKKwlERUZJTkVfUkVHKDE2LCAwLCAweDE4LCAoNjQqTUIpLCByZWdfaW5pdCwgcmVnX3JlYWQsIHJlZ193cml0ZSkKKwlERUZJTkVfUkVHKDE3LCAwLCAweDEwLCAoMTI4KktCKSwgcmVnX2luaXQsIHJlZ19yZWFkLCByZWdfd3JpdGUpCisJREVGSU5FX1JFRygxOCwgMCwgMHgxMCwgKDEqS0IpLCByZWdfaW5pdCwgcmVnX3JlYWQsIHJlZ193cml0ZSkKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBpbml0X3NpbV9yZWdzKHZvaWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShidXMxX2ZpeHVwcyk7IGkrKykgeworCQlpZiAoYnVzMV9maXh1cHNbaV0uaW5pdCkKKwkJCWJ1czFfZml4dXBzW2ldLmluaXQoJmJ1czFfZml4dXBzW2ldKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBleHRyYWN0X2J5dGVzKHUzMiAqdmFsdWUsIGludCByZWcsIGludCBsZW4pCit7CisJdWludDMyX3QgbWFzazsKKworCSp2YWx1ZSA+Pj0gKChyZWcgJiAzKSAqIDgpOworCW1hc2sgPSAweEZGRkZGRkZGID4+ICgoNCAtIGxlbikgKiA4KTsKKwkqdmFsdWUgJj0gbWFzazsKK30KKworaW50IGJyaWRnZV9yZWFkKHVuc2lnbmVkIGludCBkZXZmbiwgaW50IHJlZywgaW50IGxlbiwgdTMyICp2YWx1ZSkKK3sKKwl1MzIgYXZfYnJpZGdlX2Jhc2UsIGF2X2JyaWRnZV9saW1pdDsKKwlpbnQgcmV0dmFsID0gMDsKKworCXN3aXRjaCAocmVnKSB7CisJLyogTWFrZSBCQVJzIGFwcGVhciB0byBub3QgcmVxdWVzdCBhbnkgbWVtb3J5LiAqLworCWNhc2UgUENJX0JBU0VfQUREUkVTU18wOgorCWNhc2UgUENJX0JBU0VfQUREUkVTU18wICsgMToKKwljYXNlIFBDSV9CQVNFX0FERFJFU1NfMCArIDI6CisJY2FzZSBQQ0lfQkFTRV9BRERSRVNTXzAgKyAzOgorCQkqdmFsdWUgPSAwOworCQlicmVhazsKKworCQkvKiBTaW5jZSBzdWJvcmRpbmF0ZSBidXMgbnVtYmVyIHJlZ2lzdGVyIGlzIGhhcmR3aXJlZAorCQkgKiB0byB6ZXJvIGFuZCByZWFkIG9ubHksIHNvIGRvIHRoZSBzaW11bGF0aW9uLgorCQkgKi8KKwljYXNlIFBDSV9QUklNQVJZX0JVUzoKKwkJaWYgKGxlbiA9PSA0KQorCQkJKnZhbHVlID0gMHgwMDAxMDEwMDsKKwkJYnJlYWs7CisKKwljYXNlIFBDSV9TVUJPUkRJTkFURV9CVVM6CisJCSp2YWx1ZSA9IDE7CisJCWJyZWFrOworCisJY2FzZSBQQ0lfTUVNT1JZX0JBU0U6CisJY2FzZSBQQ0lfTUVNT1JZX0xJTUlUOgorCQkvKiBHZXQgdGhlIEEvViBicmlkZ2UgYmFzZSBhZGRyZXNzLiAqLworCQlwY2lfZGlyZWN0X2NvbmYxLnJlYWQoMCwgMCwgZGV2Zm4sCisJCQkJUENJX0JBU0VfQUREUkVTU18wLCA0LCAmYXZfYnJpZGdlX2Jhc2UpOworCisJCWF2X2JyaWRnZV9saW1pdCA9IGF2X2JyaWRnZV9iYXNlICsgKDUxMipNQiAtIDEpOworCQlhdl9icmlkZ2VfbGltaXQgPj49IDE2OworCQlhdl9icmlkZ2VfbGltaXQgJj0gMHhGRkYwOworCisJCWF2X2JyaWRnZV9iYXNlID4+PSAxNjsKKwkJYXZfYnJpZGdlX2Jhc2UgJj0gMHhGRkYwOworCisJCWlmIChyZWcgPT0gUENJX01FTU9SWV9MSU1JVCkKKwkJCSp2YWx1ZSA9IGF2X2JyaWRnZV9saW1pdDsKKwkJZWxzZSBpZiAobGVuID09IDIpCisJCQkqdmFsdWUgPSBhdl9icmlkZ2VfYmFzZTsKKwkJZWxzZQorCQkJKnZhbHVlID0gKGF2X2JyaWRnZV9saW1pdCA8PCAxNikgfCBhdl9icmlkZ2VfYmFzZTsKKwkJYnJlYWs7CisJCS8qIE1ha2UgcHJlZmV0Y2hhYmxlIG1lbW9yeSBsaW1pdCBzbWFsbGVyIHRoYW4gcHJlZmV0Y2hhYmxlCisJCSAqIG1lbW9yeSBiYXNlLCBzbyBub3QgY2xhaW0gcHJlZmV0Y2hhYmxlIG1lbW9yeSBzcGFjZS4KKwkJICovCisJY2FzZSBQQ0lfUFJFRl9NRU1PUllfQkFTRToKKwkJKnZhbHVlID0gMHhGRkYwOworCQlicmVhazsKKwljYXNlIFBDSV9QUkVGX01FTU9SWV9MSU1JVDoKKwkJKnZhbHVlID0gMHgwOworCQlicmVhazsKKwkJLyogTWFrZSBJTyBsaW1pdCBzbWFsbGVyIHRoYW4gSU8gYmFzZSwgc28gbm90IGNsYWltIElPIHNwYWNlLiAqLworCWNhc2UgUENJX0lPX0JBU0U6CisJCSp2YWx1ZSA9IDB4RjA7CisJCWJyZWFrOworCWNhc2UgUENJX0lPX0xJTUlUOgorCQkqdmFsdWUgPSAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR2YWwgPSAxOworCX0KKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IGNlNDEwMF9jb25mX3JlYWQodW5zaWduZWQgaW50IHNlZywgdW5zaWduZWQgaW50IGJ1cywKKwkJCSAgICB1bnNpZ25lZCBpbnQgZGV2Zm4sIGludCByZWcsIGludCBsZW4sIHUzMiAqdmFsdWUpCit7CisJaW50IGksIHJldHZhbCA9IDE7CisKKwlpZiAoYnVzID09IDEpIHsKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYnVzMV9maXh1cHMpOyBpKyspIHsKKwkJCWlmIChidXMxX2ZpeHVwc1tpXS5kZXZfZnVuYyA9PSBkZXZmbiAmJgorCQkJICAgIGJ1czFfZml4dXBzW2ldLnJlZyA9PSAocmVnICYgfjMpICYmCisJCQkgICAgYnVzMV9maXh1cHNbaV0ucmVhZCkgeworCQkJCWJ1czFfZml4dXBzW2ldLnJlYWQoJihidXMxX2ZpeHVwc1tpXSksCisJCQkJCQkgICAgdmFsdWUpOworCQkJCWV4dHJhY3RfYnl0ZXModmFsdWUsIHJlZywgbGVuKTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJfQorCX0KKworCWlmIChidXMgPT0gMCAmJiAoUENJX0RFVkZOKDEsIDApID09IGRldmZuKSAmJgorCSAgICAhYnJpZGdlX3JlYWQoZGV2Zm4sIHJlZywgbGVuLCB2YWx1ZSkpCisJCXJldHVybiAwOworCisJcmV0dXJuIHBjaV9kaXJlY3RfY29uZjEucmVhZChzZWcsIGJ1cywgZGV2Zm4sIHJlZywgbGVuLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyBpbnQgY2U0MTAwX2NvbmZfd3JpdGUodW5zaWduZWQgaW50IHNlZywgdW5zaWduZWQgaW50IGJ1cywKKwkJCSAgICAgdW5zaWduZWQgaW50IGRldmZuLCBpbnQgcmVnLCBpbnQgbGVuLCB1MzIgdmFsdWUpCit7CisJaW50IGk7CisKKwlpZiAoYnVzID09IDEpIHsKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYnVzMV9maXh1cHMpOyBpKyspIHsKKwkJCWlmIChidXMxX2ZpeHVwc1tpXS5kZXZfZnVuYyA9PSBkZXZmbiAmJgorCQkJICAgIGJ1czFfZml4dXBzW2ldLnJlZyA9PSAocmVnICYgfjMpICYmCisJCQkgICAgYnVzMV9maXh1cHNbaV0ud3JpdGUpIHsKKwkJCQlidXMxX2ZpeHVwc1tpXS53cml0ZSgmKGJ1czFfZml4dXBzW2ldKSwKKwkJCQkJCSAgICAgdmFsdWUpOworCQkJCXJldHVybiAwOworCQkJfQorCQl9CisJfQorCisJLyogRGlzY2FyZCB3cml0ZXMgdG8gQS9WIGJyaWRnZSBCQVIuICovCisJaWYgKGJ1cyA9PSAwICYmIFBDSV9ERVZGTigxLCAwKSA9PSBkZXZmbiAmJgorCSAgICAoKHJlZyAmIH4zKSA9PSBQQ0lfQkFTRV9BRERSRVNTXzApKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBwY2lfZGlyZWN0X2NvbmYxLndyaXRlKHNlZywgYnVzLCBkZXZmbiwgcmVnLCBsZW4sIHZhbHVlKTsKK30KKworc3RydWN0IHBjaV9yYXdfb3BzIGNlNDEwMF9wY2lfY29uZiA9IHsKKwkucmVhZCA9CWNlNDEwMF9jb25mX3JlYWQsCisJLndyaXRlID0gY2U0MTAwX2NvbmZfd3JpdGUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBjZTQxMDBfcGNpX2luaXQodm9pZCkKK3sKKwlpbml0X3NpbV9yZWdzKCk7CisJcmF3X3BjaV9vcHMgPSAmY2U0MTAwX3BjaV9jb25mOworCXJldHVybiAwOworfQorc3Vic3lzX2luaXRjYWxsKGNlNDEwMF9wY2lfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wY2kvcGNiaW9zLmMgYi9hcmNoL3g4Ni9wY2kvcGNiaW9zLmMKaW5kZXggMjQ5MmQxNi4uYTVmN2QwZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGNpL3BjYmlvcy5jCisrKyBiL2FyY2gveDg2L3BjaS9wY2Jpb3MuYwpAQCAtOSw2ICs5LDcgQEAKICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3BjaV94ODYuaD4KICNpbmNsdWRlIDxhc20vcGNpLWZ1bmN0aW9ucy5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAKIC8qIEJJT1MzMiBzaWduYXR1cmU6ICJfMzJfIiAqLwogI2RlZmluZSBCSU9TMzJfU0lHTkFUVVJFCSgoJ18nIDw8IDApICsgKCczJyA8PCA4KSArICgnMicgPDwgMTYpICsgKCdfJyA8PCAyNCkpCkBAIC0yNSw2ICsyNiwyNyBAQAogI2RlZmluZSBQQ0lCSU9TX0hXX1RZUEUxX1NQRUMJCTB4MTAKICNkZWZpbmUgUENJQklPU19IV19UWVBFMl9TUEVDCQkweDIwCiAKK2ludCBwY2liaW9zX2VuYWJsZWQ7CisKKy8qIEFjY29yZGluZyB0byB0aGUgQklPUyBzcGVjaWZpY2F0aW9uIGF0OgorICogaHR0cDovL21lbWJlcnMuZGF0YWZhc3QubmV0LmF1L2RmdDA4MDIvc3BlY3MvYmlvczIxLnBkZiwgd2UgY291bGQKKyAqIHJlc3RyaWN0IHRoZSB4IHpvbmUgdG8gc29tZSBwYWdlcyBhbmQgbWFrZSBpdCByby4gQnV0IHRoaXMgbWF5IGJlCisgKiBicm9rZW4gb24gc29tZSBiaW9zLCBjb21wbGV4IHRvIGhhbmRsZSB3aXRoIHN0YXRpY19wcm90ZWN0aW9ucy4KKyAqIFdlIGNvdWxkIG1ha2UgdGhlIDB4ZTAwMDAtMHgxMDAwMDAgcmFuZ2Ugcm94LCBidXQgdGhpcyBjYW4gYnJlYWsKKyAqIHNvbWUgSVNBIG1hcHBpbmcuCisgKgorICogU28gd2UgbGV0J3MgYW4gcncgYW5kIHggaG9sZSB3aGVuIHBjaWJpb3MgaXMgdXNlZC4gVGhpcyBzaG91bGRuJ3QKKyAqIGhhcHBlbiBmb3IgbW9kZXJuIHN5c3RlbSB3aXRoIG1tY29uZmlnLCBhbmQgaWYgeW91IGRvbid0IHdhbnQgaXQKKyAqIHlvdSBjb3VsZCBkaXNhYmxlIHBjaWJpb3MuLi4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHNldF9iaW9zX3godm9pZCkKK3sKKwlwY2liaW9zX2VuYWJsZWQgPSAxOworCXNldF9tZW1vcnlfeChQQUdFX09GRlNFVCArIEJJT1NfQkVHSU4sIChCSU9TX0VORCAtIEJJT1NfQkVHSU4pID4+IFBBR0VfU0hJRlQpOworCWlmIChfX3N1cHBvcnRlZF9wdGVfbWFzayAmIF9QQUdFX05YKQorCQlwcmludGsoS0VSTl9JTkZPICJQQ0kgOiBQQ0kgQklPUyBhZXJhIGlzIHJ3IGFuZCB4LiBVc2UgcGNpPW5vYmlvcyBpZiB5b3Ugd2FudCBpdCBOWC5cbiIpOworfQorCiAvKgogICogVGhpcyBpcyB0aGUgc3RhbmRhcmQgc3RydWN0dXJlIHVzZWQgdG8gaWRlbnRpZnkgdGhlIGVudHJ5IHBvaW50CiAgKiB0byB0aGUgQklPUzMyIFNlcnZpY2UgRGlyZWN0b3J5LCBhcyBkb2N1bWVudGVkIGluCkBAIC0zMzIsNiArMzU0LDcgQEAKIAkJCURCRygiUENJOiBCSU9TMzIgU2VydmljZSBEaXJlY3RvcnkgZW50cnkgYXQgMHglbHhcbiIsCiAJCQkJCWJpb3MzMl9lbnRyeSk7CiAJCQliaW9zMzJfaW5kaXJlY3QuYWRkcmVzcyA9IGJpb3MzMl9lbnRyeSArIFBBR0VfT0ZGU0VUOworCQkJc2V0X2Jpb3NfeCgpOwogCQkJaWYgKGNoZWNrX3BjaWJpb3MoKSkKIAkJCQlyZXR1cm4gJnBjaV9iaW9zX2FjY2VzczsKIAkJfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcGxhdGZvcm0vTWFrZWZpbGUgYi9hcmNoL3g4Ni9wbGF0Zm9ybS9NYWtlZmlsZQppbmRleCA3YmY3MGI4Li4wMjFlZWU5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wbGF0Zm9ybS9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9wbGF0Zm9ybS9NYWtlZmlsZQpAQCAtMSw1ICsxLDcgQEAKICMgUGxhdGZvcm0gc3BlY2lmaWMgY29kZSBnb2VzIGhlcmUKK29iai15CSs9IGNlNDEwMC8KIG9iai15CSs9IGVmaS8KK29iai15CSs9IGlyaXMvCiBvYmoteQkrPSBtcnN0Lwogb2JqLXkJKz0gb2xwYy8KIG9iai15CSs9IHNjeDIwMC8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BsYXRmb3JtL2NlNDEwMC9NYWtlZmlsZSBiL2FyY2gveDg2L3BsYXRmb3JtL2NlNDEwMC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWZjOTI5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvcGxhdGZvcm0vY2U0MTAwL01ha2VmaWxlCkBAIC0wLDAgKzEgQEAKK29iai0kKENPTkZJR19YODZfSU5URUxfQ0UpCSs9IGNlNDEwMC5vCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wbGF0Zm9ybS9jZTQxMDAvY2U0MTAwLmMgYi9hcmNoL3g4Ni9wbGF0Zm9ybS9jZTQxMDAvY2U0MTAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJjMGQ1MQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L3BsYXRmb3JtL2NlNDEwMC9jZTQxMDAuYwpAQCAtMCwwICsxLDEzMiBAQAorLyoKKyAqIEludGVsIENFNDEwMCAgcGxhdGZvcm0gc3BlY2lmaWMgc2V0dXAgY29kZQorICoKKyAqIChDKSBDb3B5cmlnaHQgMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZS4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfcmVnLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsXzgyNTAuaD4KKworI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCitzdGF0aWMgaW50IGNlNDEwMF9pODA0Ml9kZXRlY3Qodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19pbml0IHNkdl9maW5kX3NtcF9jb25maWcodm9pZCkKK3sKK30KKworI2lmZGVmIENPTkZJR19TRVJJQUxfODI1MAorCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbWVtX3NlcmlhbF9pbihzdHJ1Y3QgdWFydF9wb3J0ICpwLCBpbnQgb2Zmc2V0KQoreworCW9mZnNldCA9IG9mZnNldCA8PCBwLT5yZWdzaGlmdDsKKwlyZXR1cm4gcmVhZGwocC0+bWVtYmFzZSArIG9mZnNldCk7Cit9CisKKy8qCisgKiBUaGUgVUFSVCBUeCBpbnRlcnJ1cHRzIGFyZSBub3Qgc2V0IHVuZGVyIHNvbWUgY29uZGl0aW9ucyBhbmQgdGhlcmVmb3JlIHNlcmlhbAorICogdHJhbnNtaXNzaW9uIGhhbmdzLiBUaGlzIGlzIGEgc2lsaWNvbiBpc3N1ZSBhbmQgaGFzIG5vdCBiZWVuIHJvb3QgY2F1c2VkLiBUaGUKKyAqIHdvcmthcm91bmQgZm9yIHRoaXMgc2lsaWNvbiBpc3N1ZSBjaGVja3MgVUFSVF9MU1JfVEhSRSBiaXQgYW5kIFVBUlRfTFNSX1RFTVQKKyAqIGJpdCBvZiBMU1IgcmVnaXN0ZXIgaW4gaW50ZXJydXB0IGhhbmRsZXIgdG8gc2VlIHdoZXRoZXIgYXQgbGVhc3Qgb25lIG9mIHRoZXNlCisgKiB0d28gYml0cyBpcyBzZXQsIGlmIHNvIHRoZW4gcHJvY2VzcyB0aGUgdHJhbnNtaXQgcmVxdWVzdC4gSWYgdGhpcyB3b3JrYXJvdW5kCisgKiBpcyBub3QgYXBwbGllZCwgdGhlbiB0aGUgc2VyaWFsIHRyYW5zbWlzc2lvbiBtYXkgaGFuZy4gVGhpcyB3b3JrYXJvdW5kIGlzIGZvcgorICogZXJyYXRhIG51bWJlciA5IGluIEVycmF0YSAtIEIgc3RlcC4KKyovCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY2U0MTAwX21lbV9zZXJpYWxfaW4oc3RydWN0IHVhcnRfcG9ydCAqcCwgaW50IG9mZnNldCkKK3sKKwl1bnNpZ25lZCBpbnQgcmV0LCBpZXIsIGxzcjsKKworCWlmIChvZmZzZXQgPT0gVUFSVF9JSVIpIHsKKwkJb2Zmc2V0ID0gb2Zmc2V0IDw8IHAtPnJlZ3NoaWZ0OworCQlyZXQgPSByZWFkbChwLT5tZW1iYXNlICsgb2Zmc2V0KTsKKwkJaWYgKHJldCAmIFVBUlRfSUlSX05PX0lOVCkgeworCQkJLyogc2VlIGlmIHRoZSBUWCBpbnRlcnJ1cHQgc2hvdWxkIGhhdmUgcmVhbGx5IHNldCAqLworCQkJaWVyID0gbWVtX3NlcmlhbF9pbihwLCBVQVJUX0lFUik7CisJCQkvKiBzZWUgaWYgdGhlIFVBUlQncyBYTUlUIGludGVycnVwdCBpcyBlbmFibGVkICovCisJCQlpZiAoaWVyICYgVUFSVF9JRVJfVEhSSSkgeworCQkJCWxzciA9IG1lbV9zZXJpYWxfaW4ocCwgVUFSVF9MU1IpOworCQkJCS8qIG5vdyBjaGVjayB0byBzZWUgaWYgdGhlIFVBUlQgc2hvdWxkIGJlCisJCQkJICAgZ2VuZXJhdGluZyBhbiBpbnRlcnJ1cHQgKGJ1dCBpc24ndCkgKi8KKwkJCQlpZiAobHNyICYgKFVBUlRfTFNSX1RIUkUgfCBVQVJUX0xTUl9URU1UKSkKKwkJCQkJcmV0ICY9IH5VQVJUX0lJUl9OT19JTlQ7CisJCQl9CisJCX0KKwl9IGVsc2UKKwkJcmV0ID0gIG1lbV9zZXJpYWxfaW4ocCwgb2Zmc2V0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBjZTQxMDBfbWVtX3NlcmlhbF9vdXQoc3RydWN0IHVhcnRfcG9ydCAqcCwgaW50IG9mZnNldCwgaW50IHZhbHVlKQoreworCW9mZnNldCA9IG9mZnNldCA8PCBwLT5yZWdzaGlmdDsKKwl3cml0ZWwodmFsdWUsIHAtPm1lbWJhc2UgKyBvZmZzZXQpOworfQorCitzdGF0aWMgdm9pZCBjZTQxMDBfc2VyaWFsX2ZpeHVwKGludCBwb3J0LCBzdHJ1Y3QgdWFydF9wb3J0ICp1cCwKKwl1bnNpZ25lZCBzaG9ydCAqY2FwYWJpbGl0ZXMpCit7CisjaWZkZWYgQ09ORklHX0VBUkxZX1BSSU5USworCS8qCisJICogT3ZlciByaWRlIHRoZSBsZWdhY3kgcG9ydCBjb25maWd1cmF0aW9uIHRoYXQgY29tZXMgZnJvbQorCSAqIGFzbS9zZXJpYWwuaC4gVXNpbmcgdGhlIGlvcG9ydCBkcml2ZXIgdGhlbiBzd2l0Y2hpbmcgdG8gdGhlCisJICogUENJIG1lbW1hcGVkIGRyaXZlciBoYW5ncyB0aGUgSU9BUElDCisJICovCisJaWYgKHVwLT5pb3R5cGUgIT0gIFVQSU9fTUVNMzIpIHsKKwkJdXAtPnVhcnRjbGsgID0gMTQ3NDU2MDA7CisJCXVwLT5tYXBiYXNlID0gMHhkZmZlMDIwMDsKKwkJc2V0X2ZpeG1hcF9ub2NhY2hlKEZJWF9FQVJMWUNPTl9NRU1fQkFTRSwKKwkJCQl1cC0+bWFwYmFzZSAmIFBBR0VfTUFTSyk7CisJCXVwLT5tZW1iYXNlID0KKwkJCSh2b2lkIF9faW9tZW0gKilfX2ZpeF90b192aXJ0KEZJWF9FQVJMWUNPTl9NRU1fQkFTRSk7CisJCXVwLT5tZW1iYXNlICs9IHVwLT5tYXBiYXNlICYgflBBR0VfTUFTSzsKKwkJdXAtPmlvdHlwZSAgID0gVVBJT19NRU0zMjsKKwkJdXAtPnJlZ3NoaWZ0ID0gMjsKKwl9CisjZW5kaWYKKwl1cC0+aW9iYXNlID0gMDsKKwl1cC0+c2VyaWFsX2luID0gY2U0MTAwX21lbV9zZXJpYWxfaW47CisJdXAtPnNlcmlhbF9vdXQgPSBjZTQxMDBfbWVtX3NlcmlhbF9vdXQ7CisKKwkqY2FwYWJpbGl0ZXMgfD0gKDEgPDwgMTIpOworfQorCitzdGF0aWMgX19pbml0IHZvaWQgc2R2X3NlcmlhbF9maXh1cCh2b2lkKQoreworCXNlcmlhbDgyNTBfc2V0X2lzYV9jb25maWd1cmF0b3IoY2U0MTAwX3NlcmlhbF9maXh1cCk7Cit9CisKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgc2R2X3NlcmlhbF9maXh1cCh2b2lkKTsKKyNlbmRpZgorCitzdGF0aWMgdm9pZCBfX2luaXQgc2R2X2FyY2hfc2V0dXAodm9pZCkKK3sKKwlzZHZfc2VyaWFsX2ZpeHVwKCk7Cit9CisKKy8qCisgKiBDRTQxMDAgc3BlY2lmaWMgeDg2X2luaXQgZnVuY3Rpb24gb3ZlcnJpZGVzIGFuZCBlYXJseSBzZXR1cAorICogY2FsbHMuCisgKi8KK3ZvaWQgX19pbml0IHg4Nl9jZTQxMDBfZWFybHlfc2V0dXAodm9pZCkKK3sKKwl4ODZfaW5pdC5vZW0uYXJjaF9zZXR1cCA9IHNkdl9hcmNoX3NldHVwOworCXg4Nl9wbGF0Zm9ybS5pODA0Ml9kZXRlY3QgPSBjZTQxMDBfaTgwNDJfZGV0ZWN0OworCXg4Nl9pbml0LnJlc291cmNlcy5wcm9iZV9yb21zID0geDg2X2luaXRfbm9vcDsKKwl4ODZfaW5pdC5tcHBhcnNlLmdldF9zbXBfY29uZmlnID0geDg2X2luaXRfdWludF9ub29wOworCXg4Nl9pbml0Lm1wcGFyc2UuZmluZF9zbXBfY29uZmlnID0gc2R2X2ZpbmRfc21wX2NvbmZpZzsKK30KZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BsYXRmb3JtL2lyaXMvTWFrZWZpbGUgYi9hcmNoL3g4Ni9wbGF0Zm9ybS9pcmlzL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiOTIxOTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9wbGF0Zm9ybS9pcmlzL01ha2VmaWxlCkBAIC0wLDAgKzEgQEAKK29iai0kKENPTkZJR19YODZfMzJfSVJJUykJCSs9IGlyaXMubwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcGxhdGZvcm0vaXJpcy9pcmlzLmMgYi9hcmNoL3g4Ni9wbGF0Zm9ybS9pcmlzL2lyaXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmE3ZjVlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvcGxhdGZvcm0vaXJpcy9pcmlzLmMKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIEV1cm9icmFpbGxlL0lyaXMgcG93ZXIgb2ZmIHN1cHBvcnQuCisgKgorICogRXVyb2JyYWlsbGUncyBJcmlzIG1hY2hpbmUgaXMgYSBQQyB3aXRoIG5vIEFQTSBvciBBQ1BJIHN1cHBvcnQuCisgKiBJdCBpcyBzaHV0ZG93biBieSBhIHNwZWNpYWwgSS9PIHNlcXVlbmNlIHdoaWNoIHRoaXMgbW9kdWxlIHByb3ZpZGVzLgorICoKKyAqICBDb3B5cmlnaHQgKEMpIFNow6lyYWIgPFNlYmFzdGllbi5IaW5kZXJlckBlbnMtbHlvbi5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmUgOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiA7IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZIDsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhlIHByb2dyYW0gOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKyNkZWZpbmUgSVJJU19HSU9fQkFTRQkJMHgzNDAKKyNkZWZpbmUgSVJJU19HSU9fSU5QVVQJCUlSSVNfR0lPX0JBU0UKKyNkZWZpbmUgSVJJU19HSU9fT1VUUFVUCQkoSVJJU19HSU9fQkFTRSArIDEpCisjZGVmaW5lIElSSVNfR0lPX1BVTFNFCQkweDgwIC8qIEZpcnN0IGJ5dGUgdG8gc2VuZCAqLworI2RlZmluZSBJUklTX0dJT19SRVNUCQkweDAwIC8qIFNlY29uZCBieXRlIHRvIHNlbmQgKi8KKyNkZWZpbmUgSVJJU19HSU9fTk9ERVYJCTB4ZmYgLyogTGlrZWx5IG5vdCBhbiBJcmlzICovCisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIlPDqWJhc3RpZW4gSGluZGVyZXIgPFNlYmFzdGllbi5IaW5kZXJlckBlbnMtbHlvbi5vcmc+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkEgcG93ZXJfb2ZmIGhhbmRsZXIgZm9yIElyaXMgZGV2aWNlcyBmcm9tIEV1cm9CcmFpbGxlIik7CitNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgiRXVyb2JyYWlsbGUvSXJpcyIpOworCitzdGF0aWMgaW50IGZvcmNlOworCittb2R1bGVfcGFyYW0oZm9yY2UsIGJvb2wsIDApOworTU9EVUxFX1BBUk1fREVTQyhmb3JjZSwgIlNldCB0byBvbmUgdG8gZm9yY2UgcG93ZXJvZmYgaGFuZGxlciBpbnN0YWxsYXRpb24uIik7CisKK3N0YXRpYyB2b2lkICgqb2xkX3BtX3Bvd2VyX29mZikodm9pZCk7CisKK3N0YXRpYyB2b2lkIGlyaXNfcG93ZXJfb2ZmKHZvaWQpCit7CisJb3V0YihJUklTX0dJT19QVUxTRSwgSVJJU19HSU9fT1VUUFVUKTsKKwltc2xlZXAoODUwKTsKKwlvdXRiKElSSVNfR0lPX1JFU1QsIElSSVNfR0lPX09VVFBVVCk7Cit9CisKKy8qCisgKiBCZWZvcmUgaW5zdGFsbGluZyB0aGUgcG93ZXJfb2ZmIGhhbmRsZXIsIHRyeSB0byBtYWtlIHN1cmUgdGhlIE9TIGlzCisgKiBydW5uaW5nIG9uIGFuIElyaXMuICBTaW5jZSBJcmlzIGRvZXMgbm90IHN1cHBvcnQgRE1JLCB0aGlzIGlzIGRvbmUKKyAqIGJ5IHJlYWRpbmcgaXRzIGlucHV0IHBvcnQgYW5kIHNlZWluZyB3aGV0aGVyIHRoZSByZWFkIHZhbHVlIGlzCisgKiBtZWFuaW5nZnVsLgorICovCitzdGF0aWMgaW50IGlyaXNfaW5pdCh2b2lkKQoreworCXVuc2lnbmVkIGNoYXIgc3RhdHVzOworCWlmIChmb3JjZSAhPSAxKSB7CisJCXByaW50ayhLRVJOX0VSUiAiVGhlIGZvcmNlIHBhcmFtZXRlciBoYXMgbm90IGJlZW4gc2V0IHRvIDEgc28gdGhlIElyaXMgcG93ZXJvZmYgaGFuZGxlciB3aWxsIG5vdCBiZSBpbnN0YWxsZWQuXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCXN0YXR1cyA9IGluYihJUklTX0dJT19JTlBVVCk7CisJaWYgKHN0YXR1cyA9PSBJUklTX0dJT19OT0RFVikgeworCQlwcmludGsoS0VSTl9FUlIgIlRoaXMgbWFjaGluZSBkb2VzIG5vdCBzZWVtIHRvIGJlIGFuIElyaXMuIFBvd2VyX29mZiBoYW5kbGVyIG5vdCBpbnN0YWxsZWQuXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCW9sZF9wbV9wb3dlcl9vZmYgPSBwbV9wb3dlcl9vZmY7CisJcG1fcG93ZXJfb2ZmID0gJmlyaXNfcG93ZXJfb2ZmOworCXByaW50ayhLRVJOX0lORk8gIklyaXMgcG93ZXJfb2ZmIGhhbmRsZXIgaW5zdGFsbGVkLlxuIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaXJpc19leGl0KHZvaWQpCit7CisJcG1fcG93ZXJfb2ZmID0gb2xkX3BtX3Bvd2VyX29mZjsKKwlwcmludGsoS0VSTl9JTkZPICJJcmlzIHBvd2VyX29mZiBoYW5kbGVyIHVuaW5zdGFsbGVkLlxuIik7Cit9CisKK21vZHVsZV9pbml0KGlyaXNfaW5pdCk7Cittb2R1bGVfZXhpdChpcmlzX2V4aXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcGxhdGZvcm0vbXJzdC9NYWtlZmlsZSBiL2FyY2gveDg2L3BsYXRmb3JtL21yc3QvTWFrZWZpbGUKaW5kZXggZWZiYmM1NS4uZjYxY2NkZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGxhdGZvcm0vbXJzdC9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9wbGF0Zm9ybS9tcnN0L01ha2VmaWxlCkBAIC0xICsxLDMgQEAKIG9iai0kKENPTkZJR19YODZfTVJTVCkJCSs9IG1yc3Qubworb2JqLSQoQ09ORklHX1g4Nl9NUlNUKQkJKz0gdnJ0Yy5vCitvYmotJChDT05GSUdfRUFSTFlfUFJJTlRLX01SU1QpCSs9IGVhcmx5X3ByaW50a19tcnN0Lm8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9lYXJseV9wcmludGtfbXJzdC5jIGIvYXJjaC94ODYvcGxhdGZvcm0vbXJzdC9lYXJseV9wcmludGtfbXJzdC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3g4Ni9rZXJuZWwvZWFybHlfcHJpbnRrX21yc3QuYwpyZW5hbWUgdG8gYXJjaC94ODYvcGxhdGZvcm0vbXJzdC9lYXJseV9wcmludGtfbXJzdC5jCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wbGF0Zm9ybS9tcnN0L21yc3QuYyBiL2FyY2gveDg2L3BsYXRmb3JtL21yc3QvbXJzdC5jCmluZGV4IDc5YWU2ODEuLmVhNjUyOWUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BsYXRmb3JtL21yc3QvbXJzdC5jCisrKyBiL2FyY2gveDg2L3BsYXRmb3JtL21yc3QvbXJzdC5jCkBAIC05LDkgKzksMTkgQEAKICAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIKICAqIG9mIHRoZSBMaWNlbnNlLgogICovCisKKyNkZWZpbmUgcHJfZm10KGZtdCkgIm1yc3Q6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2ZpLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZWxfcG1pY19ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy9wY2E5NTN4Lmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIApAQCAtMjMsNyArMzMsOSBAQAogI2luY2x1ZGUgPGFzbS9tcnN0Lmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2k4MjU5Lmg+CisjaW5jbHVkZSA8YXNtL2ludGVsX3NjdV9pcGMuaD4KICNpbmNsdWRlIDxhc20vYXBiX3RpbWVyLmg+CisjaW5jbHVkZSA8YXNtL3JlYm9vdC5oPgogCiAvKgogICogdGhlIGNsb2NrZXZlbnQgZGV2aWNlcyBvbiBNb29yZXN0b3duL01lZGZpZWxkIGNhbiBiZSBBUEJUIG9yIExBUElDIGNsb2NrLApAQCAtNTksMzIgKzcxLDYgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHNmaV9tcnRjX2FycmF5KTsKIGludCBzZmlfbXJ0Y19udW07CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBhc3NpZ25fdG9fbXBfaXJxKHN0cnVjdCBtcGNfaW50c3JjICptLAotCQkJCSAgICBzdHJ1Y3QgbXBjX2ludHNyYyAqbXBfaXJxKQotewotCW1lbWNweShtcF9pcnEsIG0sIHNpemVvZihzdHJ1Y3QgbXBjX2ludHNyYykpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBtcF9pcnFfY21wKHN0cnVjdCBtcGNfaW50c3JjICptcF9pcnEsCi0JCQkJc3RydWN0IG1wY19pbnRzcmMgKm0pCi17Ci0JcmV0dXJuIG1lbWNtcChtcF9pcnEsIG0sIHNpemVvZihzdHJ1Y3QgbXBjX2ludHNyYykpOwotfQotCi1zdGF0aWMgdm9pZCBzYXZlX21wX2lycShzdHJ1Y3QgbXBjX2ludHNyYyAqbSkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBtcF9pcnFfZW50cmllczsgaSsrKSB7Ci0JCWlmICghbXBfaXJxX2NtcCgmbXBfaXJxc1tpXSwgbSkpCi0JCQlyZXR1cm47Ci0JfQotCi0JYXNzaWduX3RvX21wX2lycShtLCAmbXBfaXJxc1ttcF9pcnFfZW50cmllc10pOwotCWlmICgrK21wX2lycV9lbnRyaWVzID09IE1BWF9JUlFfU09VUkNFUykKLQkJcGFuaWMoIk1heCAjIG9mIGlycSBzb3VyY2VzIGV4Y2VlZGVkISFcbiIpOwotfQotCiAvKiBwYXJzZSBhbGwgdGhlIG10aW1lciBpbmZvIHRvIGEgc3RhdGljIG10aW1lciBhcnJheSAqLwogc3RhdGljIGludCBfX2luaXQgc2ZpX3BhcnNlX210bXIoc3RydWN0IHNmaV90YWJsZV9oZWFkZXIgKnRhYmxlKQogewpAQCAtMTAyLDEwICs4OCwxMCBAQAogCQltZW1jcHkoc2ZpX210aW1lcl9hcnJheSwgcGVudHJ5LCB0b3RhbGxlbik7CiAJfQogCi0JcHJpbnRrKEtFUk5fSU5GTyAiU0ZJOiBNVElNRVIgaW5mbyAobnVtID0gJWQpOlxuIiwgc2ZpX210aW1lcl9udW0pOworCXByX2RlYnVnKCJTRkkgTVRJTUVSIGluZm8gKG51bSA9ICVkKTpcbiIsIHNmaV9tdGltZXJfbnVtKTsKIAlwZW50cnkgPSBzZmlfbXRpbWVyX2FycmF5OwogCWZvciAodG90YWxsZW4gPSAwOyB0b3RhbGxlbiA8IHNmaV9tdGltZXJfbnVtOyB0b3RhbGxlbisrLCBwZW50cnkrKykgewotCQlwcmludGsoS0VSTl9JTkZPICJ0aW1lclslZF06IHBhZGRyID0gMHglMDh4LCBmcmVxID0gJWRIeiwiCisJCXByX2RlYnVnKCJ0aW1lclslZF06IHBhZGRyID0gMHglMDh4LCBmcmVxID0gJWRIeiwiCiAJCQkiIGlycSA9ICVkXG4iLCB0b3RhbGxlbiwgKHUzMilwZW50cnktPnBoeXNfYWRkciwKIAkJCXBlbnRyeS0+ZnJlcV9oeiwgcGVudHJ5LT5pcnEpOwogCQkJaWYgKCFwZW50cnktPmlycSkKQEAgLTExOCw3ICsxMDQsNyBAQAogCQkJbXBfaXJxLnNyY2J1c2lycSA9IHBlbnRyeS0+aXJxOwkvKiBJUlEgKi8KIAkJCW1wX2lycS5kc3RhcGljID0gTVBfQVBJQ19BTEw7CiAJCQltcF9pcnEuZHN0aXJxID0gcGVudHJ5LT5pcnE7Ci0JCQlzYXZlX21wX2lycSgmbXBfaXJxKTsKKwkJCW1wX3NhdmVfaXJxKCZtcF9pcnEpOwogCX0KIAogCXJldHVybiAwOwpAQCAtMTc2LDE5ICsxNjIsMTkgQEAKIAkJbWVtY3B5KHNmaV9tcnRjX2FycmF5LCBwZW50cnksIHRvdGFsbGVuKTsKIAl9CiAKLQlwcmludGsoS0VSTl9JTkZPICJTRkk6IFJUQyBpbmZvIChudW0gPSAlZCk6XG4iLCBzZmlfbXJ0Y19udW0pOworCXByX2RlYnVnKCJTRkkgUlRDIGluZm8gKG51bSA9ICVkKTpcbiIsIHNmaV9tcnRjX251bSk7CiAJcGVudHJ5ID0gc2ZpX21ydGNfYXJyYXk7CiAJZm9yICh0b3RhbGxlbiA9IDA7IHRvdGFsbGVuIDwgc2ZpX21ydGNfbnVtOyB0b3RhbGxlbisrLCBwZW50cnkrKykgewotCQlwcmludGsoS0VSTl9JTkZPICJSVENbJWRdOiBwYWRkciA9IDB4JTA4eCwgaXJxID0gJWRcbiIsCisJCXByX2RlYnVnKCJSVENbJWRdOiBwYWRkciA9IDB4JTA4eCwgaXJxID0gJWRcbiIsCiAJCQl0b3RhbGxlbiwgKHUzMilwZW50cnktPnBoeXNfYWRkciwgcGVudHJ5LT5pcnEpOwogCQltcF9pcnEudHlwZSA9IE1QX0lPQVBJQzsKIAkJbXBfaXJxLmlycXR5cGUgPSBtcF9JTlQ7Ci0JCW1wX2lycS5pcnFmbGFnID0gMDsKKwkJbXBfaXJxLmlycWZsYWcgPSAweGY7CS8qIGxldmVsIHRyaWdnZXIgYW5kIGFjdGl2ZSBsb3cgKi8KIAkJbXBfaXJxLnNyY2J1cyA9IDA7CiAJCW1wX2lycS5zcmNidXNpcnEgPSBwZW50cnktPmlycTsJLyogSVJRICovCiAJCW1wX2lycS5kc3RhcGljID0gTVBfQVBJQ19BTEw7CiAJCW1wX2lycS5kc3RpcnEgPSBwZW50cnktPmlycTsKLQkJc2F2ZV9tcF9pcnEoJm1wX2lycSk7CisJCW1wX3NhdmVfaXJxKCZtcF9pcnEpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTIwOSw2ICsxOTUsNyBAQAogCiB2b2lkIF9faW5pdCBtcnN0X3RpbWVfaW5pdCh2b2lkKQogeworCXNmaV90YWJsZV9wYXJzZShTRklfU0lHX01UTVIsIE5VTEwsIE5VTEwsIHNmaV9wYXJzZV9tdG1yKTsKIAlzd2l0Y2ggKG1yc3RfdGltZXJfb3B0aW9ucykgewogCWNhc2UgTVJTVF9USU1FUl9BUEJUX09OTFk6CiAJCWJyZWFrOwpAQCAtMjI0LDE2ICsyMTEsMTAgQEAKIAkJcmV0dXJuOwogCX0KIAkvKiB3ZSBuZWVkIGF0IGxlYXN0IG9uZSBBUEIgdGltZXIgKi8KLQlzZmlfdGFibGVfcGFyc2UoU0ZJX1NJR19NVE1SLCBOVUxMLCBOVUxMLCBzZmlfcGFyc2VfbXRtcik7CiAJcHJlX2luaXRfYXBpY19JUlEwKCk7CiAJYXBidF90aW1lX2luaXQoKTsKIH0KIAotdm9pZCBfX2luaXQgbXJzdF9ydGNfaW5pdCh2b2lkKQotewotCXNmaV90YWJsZV9wYXJzZShTRklfU0lHX01SVEMsIE5VTEwsIE5VTEwsIHNmaV9wYXJzZV9tcnRjKTsKLX0KLQogdm9pZCBfX2NwdWluaXQgbXJzdF9hcmNoX3NldHVwKHZvaWQpCiB7CiAJaWYgKGJvb3RfY3B1X2RhdGEueDg2ID09IDYgJiYgYm9vdF9jcHVfZGF0YS54ODZfbW9kZWwgPT0gMHgyNykKQEAgLTI1Niw2ICsyMzcsMTcgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyogUmVib290IGFuZCBwb3dlciBvZmYgYXJlIGhhbmRsZWQgYnkgdGhlIFNDVSBvbiBhIE1JRCBkZXZpY2UgKi8KK3N0YXRpYyB2b2lkIG1yc3RfcG93ZXJfb2ZmKHZvaWQpCit7CisJaW50ZWxfc2N1X2lwY19zaW1wbGVfY29tbWFuZCgweGYxLCAxKTsKK30KKworc3RhdGljIHZvaWQgbXJzdF9yZWJvb3Qodm9pZCkKK3sKKwlpbnRlbF9zY3VfaXBjX3NpbXBsZV9jb21tYW5kKDB4ZjEsIDApOworfQorCiAvKgogICogTW9vcmVzdG93biBzcGVjaWZpYyB4ODZfaW5pdCBmdW5jdGlvbiBvdmVycmlkZXMgYW5kIGVhcmx5IHNldHVwCiAgKiBjYWxscy4KQEAgLTI4MSw2ICsyNzMsMTAgQEAKIAogCWxlZ2FjeV9waWMgPSAmbnVsbF9sZWdhY3lfcGljOwogCisJLyogTW9vcmVzdG93biBzcGVjaWZpYyBwb3dlcl9vZmYvcmVzdGFydCBtZXRob2QgKi8KKwlwbV9wb3dlcl9vZmYgPSBtcnN0X3Bvd2VyX29mZjsKKwltYWNoaW5lX29wcy5lbWVyZ2VuY3lfcmVzdGFydCAgPSBtcnN0X3JlYm9vdDsKKwogCS8qIEF2b2lkIHNlYXJjaGluZyBmb3IgQklPUyBNUCB0YWJsZXMgKi8KIAl4ODZfaW5pdC5tcHBhcnNlLmZpbmRfc21wX2NvbmZpZyA9IHg4Nl9pbml0X25vb3A7CiAJeDg2X2luaXQubXBwYXJzZS5nZXRfc21wX2NvbmZpZyA9IHg4Nl9pbml0X3VpbnRfbm9vcDsKQEAgLTMwOSwzICszMDUsNTA1IEBACiAJcmV0dXJuIDA7CiB9CiBfX3NldHVwKCJ4ODZfbXJzdF90aW1lcj0iLCBzZXR1cF94ODZfbXJzdF90aW1lcik7CisKKy8qCisgKiBQYXJzaW5nIEdQSU8gdGFibGUgZmlyc3QsIHNpbmNlIHRoZSBERVZTIHRhYmxlIHdpbGwgbmVlZCB0aGlzIHRhYmxlCisgKiB0byBtYXAgdGhlIHBpbiBuYW1lIHRvIHRoZSBhY3R1YWwgcGluLgorICovCitzdGF0aWMgc3RydWN0IHNmaV9ncGlvX3RhYmxlX2VudHJ5ICpncGlvX3RhYmxlOworc3RhdGljIGludCBncGlvX251bV9lbnRyeTsKKworc3RhdGljIGludCBfX2luaXQgc2ZpX3BhcnNlX2dwaW8oc3RydWN0IHNmaV90YWJsZV9oZWFkZXIgKnRhYmxlKQoreworCXN0cnVjdCBzZmlfdGFibGVfc2ltcGxlICpzYjsKKwlzdHJ1Y3Qgc2ZpX2dwaW9fdGFibGVfZW50cnkgKnBlbnRyeTsKKwlpbnQgbnVtLCBpOworCisJaWYgKGdwaW9fdGFibGUpCisJCXJldHVybiAwOworCXNiID0gKHN0cnVjdCBzZmlfdGFibGVfc2ltcGxlICopdGFibGU7CisJbnVtID0gU0ZJX0dFVF9OVU1fRU5UUklFUyhzYiwgc3RydWN0IHNmaV9ncGlvX3RhYmxlX2VudHJ5KTsKKwlwZW50cnkgPSAoc3RydWN0IHNmaV9ncGlvX3RhYmxlX2VudHJ5ICopc2ItPnBlbnRyeTsKKworCWdwaW9fdGFibGUgPSAoc3RydWN0IHNmaV9ncGlvX3RhYmxlX2VudHJ5ICopCisJCQkJa21hbGxvYyhudW0gKiBzaXplb2YoKnBlbnRyeSksIEdGUF9LRVJORUwpOworCWlmICghZ3Bpb190YWJsZSkKKwkJcmV0dXJuIC0xOworCW1lbWNweShncGlvX3RhYmxlLCBwZW50cnksIG51bSAqIHNpemVvZigqcGVudHJ5KSk7CisJZ3Bpb19udW1fZW50cnkgPSBudW07CisKKwlwcl9kZWJ1ZygiR1BJTyBwaW4gaW5mbzpcbiIpOworCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKywgcGVudHJ5KyspCisJCXByX2RlYnVnKCJpbmZvWyUyZF06IGNvbnRyb2xsZXIgPSAlMTYuMTZzLCBwaW5fbmFtZSA9ICUxNi4xNnMsIgorCQkiIHBpbiA9ICVkXG4iLCBpLAorCQkJcGVudHJ5LT5jb250cm9sbGVyX25hbWUsCisJCQlwZW50cnktPnBpbl9uYW1lLAorCQkJcGVudHJ5LT5waW5fbm8pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdldF9ncGlvX2J5X25hbWUoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3Qgc2ZpX2dwaW9fdGFibGVfZW50cnkgKnBlbnRyeSA9IGdwaW9fdGFibGU7CisJaW50IGk7CisKKwlpZiAoIXBlbnRyeSkKKwkJcmV0dXJuIC0xOworCWZvciAoaSA9IDA7IGkgPCBncGlvX251bV9lbnRyeTsgaSsrLCBwZW50cnkrKykgeworCQlpZiAoIXN0cm5jbXAobmFtZSwgcGVudHJ5LT5waW5fbmFtZSwgU0ZJX05BTUVfTEVOKSkKKwkJCXJldHVybiBwZW50cnktPnBpbl9ubzsKKwl9CisJcmV0dXJuIC0xOworfQorCisvKgorICogSGVyZSBkZWZpbmVzIHRoZSBhcnJheSBvZiBkZXZpY2VzIHBsYXRmb3JtIGRhdGEgdGhhdCBJQUZXIHdvdWxkIGV4cG9ydAorICogdGhyb3VnaCBTRkkgIkRFVlMiIHRhYmxlLCB3ZSB1c2UgbmFtZSBhbmQgdHlwZSB0byBtYXRjaCB0aGUgZGV2aWNlIGFuZAorICogaXRzIHBsYXRmb3JtIGRhdGEuCisgKi8KK3N0cnVjdCBkZXZzX2lkIHsKKwljaGFyIG5hbWVbU0ZJX05BTUVfTEVOICsgMV07CisJdTggdHlwZTsKKwl1OCBkZWxheTsKKwl2b2lkICooKmdldF9wbGF0Zm9ybV9kYXRhKSh2b2lkICppbmZvKTsKK307CisKKy8qIHRoZSBvZmZzZXQgZm9yIHRoZSBtYXBwaW5nIG9mIGdsb2JhbCBncGlvIHBpbiB0byBpcnEgKi8KKyNkZWZpbmUgTVJTVF9JUlFfT0ZGU0VUIDB4MTAwCisKK3N0YXRpYyB2b2lkIF9faW5pdCAqcG1pY19ncGlvX3BsYXRmb3JtX2RhdGEodm9pZCAqaW5mbykKK3sKKwlzdGF0aWMgc3RydWN0IGludGVsX3BtaWNfZ3Bpb19wbGF0Zm9ybV9kYXRhIHBtaWNfZ3Bpb19wZGF0YTsKKwlpbnQgZ3Bpb19iYXNlID0gZ2V0X2dwaW9fYnlfbmFtZSgicG1pY19ncGlvX2Jhc2UiKTsKKworCWlmIChncGlvX2Jhc2UgPT0gLTEpCisJCWdwaW9fYmFzZSA9IDY0OworCXBtaWNfZ3Bpb19wZGF0YS5ncGlvX2Jhc2UgPSBncGlvX2Jhc2U7CisJcG1pY19ncGlvX3BkYXRhLmlycV9iYXNlID0gZ3Bpb19iYXNlICsgTVJTVF9JUlFfT0ZGU0VUOworCXBtaWNfZ3Bpb19wZGF0YS5ncGlvaW50ciA9IDB4ZmZmZmVmZjg7CisKKwlyZXR1cm4gJnBtaWNfZ3Bpb19wZGF0YTsKK30KKworc3RhdGljIHZvaWQgX19pbml0ICptYXgzMTExX3BsYXRmb3JtX2RhdGEodm9pZCAqaW5mbykKK3sKKwlzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gKnNwaV9pbmZvID0gaW5mbzsKKwlpbnQgaW50ciA9IGdldF9ncGlvX2J5X25hbWUoIm1heDMxMTFfaW50Iik7CisKKwlpZiAoaW50ciA9PSAtMSkKKwkJcmV0dXJuIE5VTEw7CisJc3BpX2luZm8tPmlycSA9IGludHIgKyBNUlNUX0lSUV9PRkZTRVQ7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qIHdlIGhhdmUgbXVsdGlwbGUgbWF4NzMxNSBvbiB0aGUgYm9hcmQgLi4uICovCisjZGVmaW5lIE1BWDczMTVfTlVNIDIKK3N0YXRpYyB2b2lkIF9faW5pdCAqbWF4NzMxNV9wbGF0Zm9ybV9kYXRhKHZvaWQgKmluZm8pCit7CisJc3RhdGljIHN0cnVjdCBwY2E5NTN4X3BsYXRmb3JtX2RhdGEgbWF4NzMxNV9wZGF0YVtNQVg3MzE1X05VTV07CisJc3RhdGljIGludCBucjsKKwlzdHJ1Y3QgcGNhOTUzeF9wbGF0Zm9ybV9kYXRhICptYXg3MzE1ID0gJm1heDczMTVfcGRhdGFbbnJdOworCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaTJjX2luZm8gPSBpbmZvOworCWludCBncGlvX2Jhc2UsIGludHI7CisJY2hhciBiYXNlX3Bpbl9uYW1lW1NGSV9OQU1FX0xFTiArIDFdOworCWNoYXIgaW50cl9waW5fbmFtZVtTRklfTkFNRV9MRU4gKyAxXTsKKworCWlmIChuciA9PSBNQVg3MzE1X05VTSkgeworCQlwcl9lcnIoInRvbyBtYW55IG1heDczMTVzLCB3ZSBvbmx5IHN1cHBvcnQgJWRcbiIsCisJCQkJTUFYNzMxNV9OVU0pOworCQlyZXR1cm4gTlVMTDsKKwl9CisJLyogd2UgaGF2ZSBzZXZlcmFsIG1heDczMTUgb24gdGhlIGJvYXJkLCB3ZSBvbmx5IG5lZWQgbG9hZCBzZXZlcmFsCisJICogaW5zdGFuY2VzIG9mIHRoZSBzYW1lIHBjYTk1M3ggZHJpdmVyIHRvIGNvdmVyIHRoZW0KKwkgKi8KKwlzdHJjcHkoaTJjX2luZm8tPnR5cGUsICJtYXg3MzE1Iik7CisJaWYgKG5yKyspIHsKKwkJc3ByaW50ZihiYXNlX3Bpbl9uYW1lLCAibWF4NzMxNV8lZF9iYXNlIiwgbnIpOworCQlzcHJpbnRmKGludHJfcGluX25hbWUsICJtYXg3MzE1XyVkX2ludCIsIG5yKTsKKwl9IGVsc2UgeworCQlzdHJjcHkoYmFzZV9waW5fbmFtZSwgIm1heDczMTVfYmFzZSIpOworCQlzdHJjcHkoaW50cl9waW5fbmFtZSwgIm1heDczMTVfaW50Iik7CisJfQorCisJZ3Bpb19iYXNlID0gZ2V0X2dwaW9fYnlfbmFtZShiYXNlX3Bpbl9uYW1lKTsKKwlpbnRyID0gZ2V0X2dwaW9fYnlfbmFtZShpbnRyX3Bpbl9uYW1lKTsKKworCWlmIChncGlvX2Jhc2UgPT0gLTEpCisJCXJldHVybiBOVUxMOworCW1heDczMTUtPmdwaW9fYmFzZSA9IGdwaW9fYmFzZTsKKwlpZiAoaW50ciAhPSAtMSkgeworCQlpMmNfaW5mby0+aXJxID0gaW50ciArIE1SU1RfSVJRX09GRlNFVDsKKwkJbWF4NzMxNS0+aXJxX2Jhc2UgPSBncGlvX2Jhc2UgKyBNUlNUX0lSUV9PRkZTRVQ7CisJfSBlbHNlIHsKKwkJaTJjX2luZm8tPmlycSA9IC0xOworCQltYXg3MzE1LT5pcnFfYmFzZSA9IC0xOworCX0KKwlyZXR1cm4gbWF4NzMxNTsKK30KKworc3RhdGljIHZvaWQgX19pbml0ICplbWMxNDAzX3BsYXRmb3JtX2RhdGEodm9pZCAqaW5mbykKK3sKKwlzdGF0aWMgc2hvcnQgaW50cjJuZF9wZGF0YTsKKwlzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmkyY19pbmZvID0gaW5mbzsKKwlpbnQgaW50ciA9IGdldF9ncGlvX2J5X25hbWUoInRoZXJtYWxfaW50Iik7CisJaW50IGludHIybmQgPSBnZXRfZ3Bpb19ieV9uYW1lKCJ0aGVybWFsX2FsZXJ0Iik7CisKKwlpZiAoaW50ciA9PSAtMSB8fCBpbnRyMm5kID09IC0xKQorCQlyZXR1cm4gTlVMTDsKKworCWkyY19pbmZvLT5pcnEgPSBpbnRyICsgTVJTVF9JUlFfT0ZGU0VUOworCWludHIybmRfcGRhdGEgPSBpbnRyMm5kICsgTVJTVF9JUlFfT0ZGU0VUOworCisJcmV0dXJuICZpbnRyMm5kX3BkYXRhOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgKmxpczMzMWRsX3BsYXRmb3JtX2RhdGEodm9pZCAqaW5mbykKK3sKKwlzdGF0aWMgc2hvcnQgaW50cjJuZF9wZGF0YTsKKwlzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmkyY19pbmZvID0gaW5mbzsKKwlpbnQgaW50ciA9IGdldF9ncGlvX2J5X25hbWUoImFjY2VsX2ludCIpOworCWludCBpbnRyMm5kID0gZ2V0X2dwaW9fYnlfbmFtZSgiYWNjZWxfMiIpOworCisJaWYgKGludHIgPT0gLTEgfHwgaW50cjJuZCA9PSAtMSkKKwkJcmV0dXJuIE5VTEw7CisKKwlpMmNfaW5mby0+aXJxID0gaW50ciArIE1SU1RfSVJRX09GRlNFVDsKKwlpbnRyMm5kX3BkYXRhID0gaW50cjJuZCArIE1SU1RfSVJRX09GRlNFVDsKKworCXJldHVybiAmaW50cjJuZF9wZGF0YTsKK30KKworc3RhdGljIHZvaWQgX19pbml0ICpub19wbGF0Zm9ybV9kYXRhKHZvaWQgKmluZm8pCit7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2c19pZCBfX2luaXRjb25zdCBkZXZpY2VfaWRzW10gPSB7CisJeyJwbWljX2dwaW8iLCBTRklfREVWX1RZUEVfU1BJLCAxLCAmcG1pY19ncGlvX3BsYXRmb3JtX2RhdGF9LAorCXsic3BpX21heDMxMTEiLCBTRklfREVWX1RZUEVfU1BJLCAwLCAmbWF4MzExMV9wbGF0Zm9ybV9kYXRhfSwKKwl7ImkyY19tYXg3MzE1IiwgU0ZJX0RFVl9UWVBFX0kyQywgMSwgJm1heDczMTVfcGxhdGZvcm1fZGF0YX0sCisJeyJpMmNfbWF4NzMxNV8yIiwgU0ZJX0RFVl9UWVBFX0kyQywgMSwgJm1heDczMTVfcGxhdGZvcm1fZGF0YX0sCisJeyJlbWMxNDAzIiwgU0ZJX0RFVl9UWVBFX0kyQywgMSwgJmVtYzE0MDNfcGxhdGZvcm1fZGF0YX0sCisJeyJpMmNfYWNjZWwiLCBTRklfREVWX1RZUEVfSTJDLCAwLCAmbGlzMzMxZGxfcGxhdGZvcm1fZGF0YX0sCisJeyJwbWljX2F1ZGlvIiwgU0ZJX0RFVl9UWVBFX0lQQywgMSwgJm5vX3BsYXRmb3JtX2RhdGF9LAorCXsibXNpY19hdWRpbyIsIFNGSV9ERVZfVFlQRV9JUEMsIDEsICZub19wbGF0Zm9ybV9kYXRhfSwKKwl7fSwKK307CisKKyNkZWZpbmUgTUFYX0lQQ0RFVlMJMjQKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICppcGNfZGV2c1tNQVhfSVBDREVWU107CitzdGF0aWMgaW50IGlwY19uZXh0X2RldjsKKworI2RlZmluZSBNQVhfU0NVX1NQSQkyNAorc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyAqc3BpX2RldnNbTUFYX1NDVV9TUEldOworc3RhdGljIGludCBzcGlfbmV4dF9kZXY7CisKKyNkZWZpbmUgTUFYX1NDVV9JMkMJMjQKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmkyY19kZXZzW01BWF9TQ1VfSTJDXTsKK3N0YXRpYyBpbnQgaTJjX2J1c1tNQVhfU0NVX0kyQ107CitzdGF0aWMgaW50IGkyY19uZXh0X2RldjsKKworc3RhdGljIHZvaWQgX19pbml0IGludGVsX3NjdV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlpZihpcGNfbmV4dF9kZXYgPT0gTUFYX0lQQ0RFVlMpCisJCXByX2VycigidG9vIG1hbnkgU0NVIElQQyBkZXZpY2VzIik7CisJZWxzZQorCQlpcGNfZGV2c1tpcGNfbmV4dF9kZXYrK10gPSBwZGV2OworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgaW50ZWxfc2N1X3NwaV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHNwaV9ib2FyZF9pbmZvICpzZGV2KQoreworCXN0cnVjdCBzcGlfYm9hcmRfaW5mbyAqbmV3X2RldjsKKworCWlmIChzcGlfbmV4dF9kZXYgPT0gTUFYX1NDVV9TUEkpIHsKKwkJcHJfZXJyKCJ0b28gbWFueSBTQ1UgU1BJIGRldmljZXMiKTsKKwkJcmV0dXJuOworCX0KKworCW5ld19kZXYgPSBremFsbG9jKHNpemVvZigqc2RldiksIEdGUF9LRVJORUwpOworCWlmICghbmV3X2RldikgeworCQlwcl9lcnIoImZhaWxlZCB0byBhbGxvYyBtZW0gZm9yIGRlbGF5ZWQgc3BpIGRldiAlc1xuIiwKKwkJCXNkZXYtPm1vZGFsaWFzKTsKKwkJcmV0dXJuOworCX0KKwltZW1jcHkobmV3X2Rldiwgc2Rldiwgc2l6ZW9mKCpzZGV2KSk7CisKKwlzcGlfZGV2c1tzcGlfbmV4dF9kZXYrK10gPSBuZXdfZGV2OworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgaW50ZWxfc2N1X2kyY19kZXZpY2VfcmVnaXN0ZXIoaW50IGJ1cywKKwkJCQkJCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaWRldikKK3sKKwlzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKm5ld19kZXY7CisKKwlpZiAoaTJjX25leHRfZGV2ID09IE1BWF9TQ1VfSTJDKSB7CisJCXByX2VycigidG9vIG1hbnkgU0NVIEkyQyBkZXZpY2VzIik7CisJCXJldHVybjsKKwl9CisKKwluZXdfZGV2ID0ga3phbGxvYyhzaXplb2YoKmlkZXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW5ld19kZXYpIHsKKwkJcHJfZXJyKCJmYWlsZWQgdG8gYWxsb2MgbWVtIGZvciBkZWxheWVkIGkyYyBkZXYgJXNcbiIsCisJCQlpZGV2LT50eXBlKTsKKwkJcmV0dXJuOworCX0KKwltZW1jcHkobmV3X2RldiwgaWRldiwgc2l6ZW9mKCppZGV2KSk7CisKKwlpMmNfYnVzW2kyY19uZXh0X2Rldl0gPSBidXM7CisJaTJjX2RldnNbaTJjX25leHRfZGV2KytdID0gbmV3X2RldjsKK30KKworLyogQ2FsbGVkIGJ5IElQQyBkcml2ZXIgKi8KK3ZvaWQgaW50ZWxfc2N1X2RldmljZXNfY3JlYXRlKHZvaWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaXBjX25leHRfZGV2OyBpKyspCisJCXBsYXRmb3JtX2RldmljZV9hZGQoaXBjX2RldnNbaV0pOworCisJZm9yIChpID0gMDsgaSA8IHNwaV9uZXh0X2RldjsgaSsrKQorCQlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyhzcGlfZGV2c1tpXSwgMSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaTJjX25leHRfZGV2OyBpKyspIHsKKwkJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyOworCQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCisJCWFkYXB0ZXIgPSBpMmNfZ2V0X2FkYXB0ZXIoaTJjX2J1c1tpXSk7CisJCWlmIChhZGFwdGVyKSB7CisJCQljbGllbnQgPSBpMmNfbmV3X2RldmljZShhZGFwdGVyLCBpMmNfZGV2c1tpXSk7CisJCQlpZiAoIWNsaWVudCkKKwkJCQlwcl9lcnIoImNhbid0IGNyZWF0ZSBpMmMgZGV2aWNlICVzXG4iLAorCQkJCQlpMmNfZGV2c1tpXS0+dHlwZSk7CisJCX0gZWxzZQorCQkJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oaTJjX2J1c1tpXSwgaTJjX2RldnNbaV0sIDEpOworCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKGludGVsX3NjdV9kZXZpY2VzX2NyZWF0ZSk7CisKKy8qIENhbGxlZCBieSBJUEMgZHJpdmVyICovCit2b2lkIGludGVsX3NjdV9kZXZpY2VzX2Rlc3Ryb3kodm9pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBpcGNfbmV4dF9kZXY7IGkrKykKKwkJcGxhdGZvcm1fZGV2aWNlX2RlbChpcGNfZGV2c1tpXSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpbnRlbF9zY3VfZGV2aWNlc19kZXN0cm95KTsKKworc3RhdGljIHZvaWQgX19pbml0IGluc3RhbGxfaXJxX3Jlc291cmNlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIGludCBpcnEpCit7CisJLyogU2luZ2xlIHRocmVhZGVkICovCisJc3RhdGljIHN0cnVjdCByZXNvdXJjZSBfX2luaXRkYXRhIHJlcyA9IHsKKwkJLm5hbWUgPSAiSVJRIiwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfTsKKwlyZXMuc3RhcnQgPSBpcnE7CisJcGxhdGZvcm1fZGV2aWNlX2FkZF9yZXNvdXJjZXMocGRldiwgJnJlcywgMSk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBzZmlfaGFuZGxlX2lwY19kZXYoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwljb25zdCBzdHJ1Y3QgZGV2c19pZCAqZGV2ID0gZGV2aWNlX2lkczsKKwl2b2lkICpwZGF0YSA9IE5VTEw7CisKKwl3aGlsZSAoZGV2LT5uYW1lWzBdKSB7CisJCWlmIChkZXYtPnR5cGUgPT0gU0ZJX0RFVl9UWVBFX0lQQyAmJgorCQkJIXN0cm5jbXAoZGV2LT5uYW1lLCBwZGV2LT5uYW1lLCBTRklfTkFNRV9MRU4pKSB7CisJCQlwZGF0YSA9IGRldi0+Z2V0X3BsYXRmb3JtX2RhdGEocGRldik7CisJCQlicmVhazsKKwkJfQorCQlkZXYrKzsKKwl9CisJcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEgPSBwZGF0YTsKKwlpbnRlbF9zY3VfZGV2aWNlX3JlZ2lzdGVyKHBkZXYpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgc2ZpX2hhbmRsZV9zcGlfZGV2KHN0cnVjdCBzcGlfYm9hcmRfaW5mbyAqc3BpX2luZm8pCit7CisJY29uc3Qgc3RydWN0IGRldnNfaWQgKmRldiA9IGRldmljZV9pZHM7CisJdm9pZCAqcGRhdGEgPSBOVUxMOworCisJd2hpbGUgKGRldi0+bmFtZVswXSkgeworCQlpZiAoZGV2LT50eXBlID09IFNGSV9ERVZfVFlQRV9TUEkgJiYKKwkJCQkhc3RybmNtcChkZXYtPm5hbWUsIHNwaV9pbmZvLT5tb2RhbGlhcywgU0ZJX05BTUVfTEVOKSkgeworCQkJcGRhdGEgPSBkZXYtPmdldF9wbGF0Zm9ybV9kYXRhKHNwaV9pbmZvKTsKKwkJCWJyZWFrOworCQl9CisJCWRldisrOworCX0KKwlzcGlfaW5mby0+cGxhdGZvcm1fZGF0YSA9IHBkYXRhOworCWlmIChkZXYtPmRlbGF5KQorCQlpbnRlbF9zY3Vfc3BpX2RldmljZV9yZWdpc3RlcihzcGlfaW5mbyk7CisJZWxzZQorCQlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyhzcGlfaW5mbywgMSk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBzZmlfaGFuZGxlX2kyY19kZXYoaW50IGJ1cywgc3RydWN0IGkyY19ib2FyZF9pbmZvICppMmNfaW5mbykKK3sKKwljb25zdCBzdHJ1Y3QgZGV2c19pZCAqZGV2ID0gZGV2aWNlX2lkczsKKwl2b2lkICpwZGF0YSA9IE5VTEw7CisKKwl3aGlsZSAoZGV2LT5uYW1lWzBdKSB7CisJCWlmIChkZXYtPnR5cGUgPT0gU0ZJX0RFVl9UWVBFX0kyQyAmJgorCQkJIXN0cm5jbXAoZGV2LT5uYW1lLCBpMmNfaW5mby0+dHlwZSwgU0ZJX05BTUVfTEVOKSkgeworCQkJcGRhdGEgPSBkZXYtPmdldF9wbGF0Zm9ybV9kYXRhKGkyY19pbmZvKTsKKwkJCWJyZWFrOworCQl9CisJCWRldisrOworCX0KKwlpMmNfaW5mby0+cGxhdGZvcm1fZGF0YSA9IHBkYXRhOworCisJaWYgKGRldi0+ZGVsYXkpCisJCWludGVsX3NjdV9pMmNfZGV2aWNlX3JlZ2lzdGVyKGJ1cywgaTJjX2luZm8pOworCWVsc2UKKwkJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oYnVzLCBpMmNfaW5mbywgMSk7CisgfQorCisKK3N0YXRpYyBpbnQgX19pbml0IHNmaV9wYXJzZV9kZXZzKHN0cnVjdCBzZmlfdGFibGVfaGVhZGVyICp0YWJsZSkKK3sKKwlzdHJ1Y3Qgc2ZpX3RhYmxlX3NpbXBsZSAqc2I7CisJc3RydWN0IHNmaV9kZXZpY2VfdGFibGVfZW50cnkgKnBlbnRyeTsKKwlzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gc3BpX2luZm87CisJc3RydWN0IGkyY19ib2FyZF9pbmZvIGkyY19pbmZvOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJaW50IG51bSwgaSwgYnVzOworCWludCBpb2FwaWM7CisJc3RydWN0IGlvX2FwaWNfaXJxX2F0dHIgaXJxX2F0dHI7CisKKwlzYiA9IChzdHJ1Y3Qgc2ZpX3RhYmxlX3NpbXBsZSAqKXRhYmxlOworCW51bSA9IFNGSV9HRVRfTlVNX0VOVFJJRVMoc2IsIHN0cnVjdCBzZmlfZGV2aWNlX3RhYmxlX2VudHJ5KTsKKwlwZW50cnkgPSAoc3RydWN0IHNmaV9kZXZpY2VfdGFibGVfZW50cnkgKilzYi0+cGVudHJ5OworCisJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrLCBwZW50cnkrKykgeworCQlpZiAocGVudHJ5LT5pcnEgIT0gKHU4KTB4ZmYpIHsgLyogbmF0aXZlIFJURSBjYXNlICovCisJCQkvKiB0aGVzZSBTUEkyIGRldmljZXMgYXJlIG5vdCBleHBvc2VkIHRvIHN5c3RlbSBhcyBQQ0kKKwkJCSAqIGRldmljZXMsIGJ1dCB0aGV5IGhhdmUgc2VwYXJhdGUgUlRFIGVudHJ5IGluIElPQVBJQworCQkJICogc28gd2UgaGF2ZSB0byBlbmFibGUgdGhlbSBvbmUgYnkgb25lIGhlcmUKKwkJCSAqLworCQkJaW9hcGljID0gbXBfZmluZF9pb2FwaWMocGVudHJ5LT5pcnEpOworCQkJaXJxX2F0dHIuaW9hcGljID0gaW9hcGljOworCQkJaXJxX2F0dHIuaW9hcGljX3BpbiA9IHBlbnRyeS0+aXJxOworCQkJaXJxX2F0dHIudHJpZ2dlciA9IDE7CisJCQlpcnFfYXR0ci5wb2xhcml0eSA9IDE7CisJCQlpb19hcGljX3NldF9wY2lfcm91dGluZyhOVUxMLCBwZW50cnktPmlycSwgJmlycV9hdHRyKTsKKwkJfQorCQlzd2l0Y2ggKHBlbnRyeS0+dHlwZSkgeworCQljYXNlIFNGSV9ERVZfVFlQRV9JUEM6CisJCQkvKiBJRCBhcyBJUlEgaXMgYSBoYWNrIHRoYXQgd2lsbCBnbyBhd2F5ICovCisJCQlwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKHBlbnRyeS0+bmFtZSwgcGVudHJ5LT5pcnEpOworCQkJaWYgKHBkZXYgPT0gTlVMTCkgeworCQkJCXByX2Vycigib3V0IG9mIG1lbW9yeSBmb3IgU0ZJIHBsYXRmb3JtIGRldmljZSAnJXMnLlxuIiwKKwkJCQkJCQlwZW50cnktPm5hbWUpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaW5zdGFsbF9pcnFfcmVzb3VyY2UocGRldiwgcGVudHJ5LT5pcnEpOworCQkJcHJfZGVidWcoImluZm9bJTJkXTogSVBDIGJ1cywgbmFtZSA9ICUxNi4xNnMsICIKKwkJCQkiaXJxID0gMHglMnhcbiIsIGksIHBlbnRyeS0+bmFtZSwgcGVudHJ5LT5pcnEpOworCQkJc2ZpX2hhbmRsZV9pcGNfZGV2KHBkZXYpOworCQkJYnJlYWs7CisJCWNhc2UgU0ZJX0RFVl9UWVBFX1NQSToKKwkJCW1lbXNldCgmc3BpX2luZm8sIDAsIHNpemVvZihzcGlfaW5mbykpOworCQkJc3RybmNweShzcGlfaW5mby5tb2RhbGlhcywgcGVudHJ5LT5uYW1lLCBTRklfTkFNRV9MRU4pOworCQkJc3BpX2luZm8uaXJxID0gcGVudHJ5LT5pcnE7CisJCQlzcGlfaW5mby5idXNfbnVtID0gcGVudHJ5LT5ob3N0X251bTsKKwkJCXNwaV9pbmZvLmNoaXBfc2VsZWN0ID0gcGVudHJ5LT5hZGRyOworCQkJc3BpX2luZm8ubWF4X3NwZWVkX2h6ID0gcGVudHJ5LT5tYXhfZnJlcTsKKwkJCXByX2RlYnVnKCJpbmZvWyUyZF06IFNQSSBidXMgPSAlZCwgbmFtZSA9ICUxNi4xNnMsICIKKwkJCQkiaXJxID0gMHglMngsIG1heF9mcmVxID0gJWQsIGNzID0gJWRcbiIsIGksCisJCQkJc3BpX2luZm8uYnVzX251bSwKKwkJCQlzcGlfaW5mby5tb2RhbGlhcywKKwkJCQlzcGlfaW5mby5pcnEsCisJCQkJc3BpX2luZm8ubWF4X3NwZWVkX2h6LAorCQkJCXNwaV9pbmZvLmNoaXBfc2VsZWN0KTsKKwkJCXNmaV9oYW5kbGVfc3BpX2Rldigmc3BpX2luZm8pOworCQkJYnJlYWs7CisJCWNhc2UgU0ZJX0RFVl9UWVBFX0kyQzoKKwkJCW1lbXNldCgmaTJjX2luZm8sIDAsIHNpemVvZihpMmNfaW5mbykpOworCQkJYnVzID0gcGVudHJ5LT5ob3N0X251bTsKKwkJCXN0cm5jcHkoaTJjX2luZm8udHlwZSwgcGVudHJ5LT5uYW1lLCBTRklfTkFNRV9MRU4pOworCQkJaTJjX2luZm8uaXJxID0gcGVudHJ5LT5pcnE7CisJCQlpMmNfaW5mby5hZGRyID0gcGVudHJ5LT5hZGRyOworCQkJcHJfZGVidWcoImluZm9bJTJkXTogSTJDIGJ1cyA9ICVkLCBuYW1lID0gJTE2LjE2cywgIgorCQkJCSJpcnEgPSAweCUyeCwgYWRkciA9IDB4JXhcbiIsIGksIGJ1cywKKwkJCQlpMmNfaW5mby50eXBlLAorCQkJCWkyY19pbmZvLmlycSwKKwkJCQlpMmNfaW5mby5hZGRyKTsKKwkJCXNmaV9oYW5kbGVfaTJjX2RldihidXMsICZpMmNfaW5mbyk7CisJCQlicmVhazsKKwkJY2FzZSBTRklfREVWX1RZUEVfVUFSVDoKKwkJY2FzZSBTRklfREVWX1RZUEVfSFNJOgorCQlkZWZhdWx0OgorCQkJOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9faW5pdCBtcnN0X3BsYXRmb3JtX2luaXQodm9pZCkKK3sKKwlzZmlfdGFibGVfcGFyc2UoU0ZJX1NJR19HUElPLCBOVUxMLCBOVUxMLCBzZmlfcGFyc2VfZ3Bpbyk7CisJc2ZpX3RhYmxlX3BhcnNlKFNGSV9TSUdfREVWUywgTlVMTCwgTlVMTCwgc2ZpX3BhcnNlX2RldnMpOworCXJldHVybiAwOworfQorYXJjaF9pbml0Y2FsbChtcnN0X3BsYXRmb3JtX2luaXQpOworCisvKgorICogd2Ugd2lsbCBzZWFyY2ggdGhlc2UgYnV0dG9ucyBpbiBTRkkgR1BJTyB0YWJsZSAoYnkgbmFtZSkKKyAqIGFuZCByZWdpc3RlciB0aGVtIGR5bmFtaWNhbGx5LiBQbGVhc2UgYWRkIGFsbCBwb3NzaWJsZQorICogYnV0dG9ucyBoZXJlLCB3ZSB3aWxsIHNocmluayB0aGVtIGlmIG5vIEdQSU8gZm91bmQuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX2J1dHRvbiBncGlvX2J1dHRvbltdID0geworCXtLRVlfUE9XRVIsCQktMSwgMSwgInBvd2VyX2J0biIsCUVWX0tFWSwgMCwgMzAwMH0sCisJe0tFWV9QUk9HMSwJCS0xLCAxLCAicHJvZ19idG4xIiwJRVZfS0VZLCAwLCAyMH0sCisJe0tFWV9QUk9HMiwJCS0xLCAxLCAicHJvZ19idG4yIiwJRVZfS0VZLCAwLCAyMH0sCisJe1NXX0xJRCwJCS0xLCAxLCAibGlkX3N3aXRjaCIsCUVWX1NXLCAgMCwgMjB9LAorCXtLRVlfVk9MVU1FVVAsCQktMSwgMSwgInZvbF91cCIsCUVWX0tFWSwgMCwgMjB9LAorCXtLRVlfVk9MVU1FRE9XTiwJLTEsIDEsICJ2b2xfZG93biIsCUVWX0tFWSwgMCwgMjB9LAorCXtLRVlfQ0FNRVJBLAkJLTEsIDEsICJjYW1lcmFfZnVsbCIsCUVWX0tFWSwgMCwgMjB9LAorCXtLRVlfQ0FNRVJBX0ZPQ1VTLAktMSwgMSwgImNhbWVyYV9oYWxmIiwJRVZfS0VZLCAwLCAyMH0sCisJe1NXX0tFWVBBRF9TTElERSwJLTEsIDEsICJNYWdTdzEiLAlFVl9TVywgIDAsIDIwfSwKKwl7U1dfS0VZUEFEX1NMSURFLAktMSwgMSwgIk1hZ1N3MiIsCUVWX1NXLCAgMCwgMjB9LAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2tleXNfcGxhdGZvcm1fZGF0YSBtcnN0X2dwaW9fa2V5cyA9IHsKKwkuYnV0dG9ucwk9IGdwaW9fYnV0dG9uLAorCS5yZXAJCT0gMSwKKwkubmJ1dHRvbnMJPSAtMSwgLyogd2lsbCBmaWxsIGl0IGFmdGVyIHNlYXJjaCAqLworfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGJfZGV2aWNlID0geworCS5uYW1lCQk9ICJncGlvLWtleXMiLAorCS5pZAkJPSAtMSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmbXJzdF9ncGlvX2tleXMsCisJfSwKK307CisKKy8qCisgKiBTaHJpbmsgdGhlIG5vbi1leGlzdGVudCBidXR0b25zLCByZWdpc3RlciB0aGUgZ3BpbyBidXR0b24KKyAqIGRldmljZSBpZiB0aGVyZSBpcyBzb21lCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IHBiX2tleXNfaW5pdCh2b2lkKQoreworCXN0cnVjdCBncGlvX2tleXNfYnV0dG9uICpnYiA9IGdwaW9fYnV0dG9uOworCWludCBpLCBudW0sIGdvb2QgPSAwOworCisJbnVtID0gc2l6ZW9mKGdwaW9fYnV0dG9uKSAvIHNpemVvZihzdHJ1Y3QgZ3Bpb19rZXlzX2J1dHRvbik7CisJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7CisJCWdiW2ldLmdwaW8gPSBnZXRfZ3Bpb19ieV9uYW1lKGdiW2ldLmRlc2MpOworCQlpZiAoZ2JbaV0uZ3BpbyA9PSAtMSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChpICE9IGdvb2QpCisJCQlnYltnb29kXSA9IGdiW2ldOworCQlnb29kKys7CisJfQorCisJaWYgKGdvb2QpIHsKKwkJbXJzdF9ncGlvX2tleXMubmJ1dHRvbnMgPSBnb29kOworCQlyZXR1cm4gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZwYl9kZXZpY2UpOworCX0KKwlyZXR1cm4gMDsKK30KK2xhdGVfaW5pdGNhbGwocGJfa2V5c19pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BsYXRmb3JtL21yc3QvdnJ0Yy5jIGIvYXJjaC94ODYvcGxhdGZvcm0vbXJzdC92cnRjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJjZDdlZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L3BsYXRmb3JtL21yc3QvdnJ0Yy5jCkBAIC0wLDAgKzEsMTY1IEBACisvKgorICogdnJ0Yy5jOiBEcml2ZXIgZm9yIHZpcnR1YWwgUlRDIGRldmljZSBvbiBJbnRlbCBNSUQgcGxhdGZvcm0KKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDkgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UuCisgKgorICogTm90ZToKKyAqIFZSVEMgaXMgZW11bGF0ZWQgYnkgc3lzdGVtIGNvbnRyb2xsZXIgZmlybXdhcmUsIHRoZSByZWFsIEhXCisgKiBSVEMgaXMgbG9jYXRlZCBpbiB0aGUgUE1JQyBkZXZpY2UuIFNDVSBGVyBzaGFkb3dzIFBNSUMgUlRDCisgKiBpbiBhIG1lbW9yeSBtYXBwZWQgSU8gc3BhY2UgdGhhdCBpcyB2aXNpYmxlIHRvIHRoZSBob3N0IElBCisgKiBwcm9jZXNzb3IuCisgKgorICogVGhpcyBkcml2ZXIgaXMgYmFzZWQgb24gUlRDIENNT1MgZHJpdmVyLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2ZpLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxhc20vbXJzdC5oPgorI2luY2x1ZGUgPGFzbS9tcnN0LXZydGMuaD4KKyNpbmNsdWRlIDxhc20vdGltZS5oPgorI2luY2x1ZGUgPGFzbS9maXhtYXAuaD4KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgX19pb21lbSAqdnJ0Y192aXJ0X2Jhc2U7CisKK3Vuc2lnbmVkIGNoYXIgdnJ0Y19jbW9zX3JlYWQodW5zaWduZWQgY2hhciByZWcpCit7CisJdW5zaWduZWQgY2hhciByZXR2YWw7CisKKwkvKiB2UlRDJ3MgcmVnaXN0ZXJzIHJhbmdlIGZyb20gMHgwIHRvIDB4RCAqLworCWlmIChyZWcgPiAweGQgfHwgIXZydGNfdmlydF9iYXNlKQorCQlyZXR1cm4gMHhmZjsKKworCWxvY2tfY21vc19wcmVmaXgocmVnKTsKKwlyZXR2YWwgPSBfX3Jhd19yZWFkYih2cnRjX3ZpcnRfYmFzZSArIChyZWcgPDwgMikpOworCWxvY2tfY21vc19zdWZmaXgocmVnKTsKKwlyZXR1cm4gcmV0dmFsOworfQorRVhQT1JUX1NZTUJPTF9HUEwodnJ0Y19jbW9zX3JlYWQpOworCit2b2lkIHZydGNfY21vc193cml0ZSh1bnNpZ25lZCBjaGFyIHZhbCwgdW5zaWduZWQgY2hhciByZWcpCit7CisJaWYgKHJlZyA+IDB4ZCB8fCAhdnJ0Y192aXJ0X2Jhc2UpCisJCXJldHVybjsKKworCWxvY2tfY21vc19wcmVmaXgocmVnKTsKKwlfX3Jhd193cml0ZWIodmFsLCB2cnRjX3ZpcnRfYmFzZSArIChyZWcgPDwgMikpOworCWxvY2tfY21vc19zdWZmaXgocmVnKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHZydGNfY21vc193cml0ZSk7CisKK3Vuc2lnbmVkIGxvbmcgdnJ0Y19nZXRfdGltZSh2b2lkKQoreworCXU4IHNlYywgbWluLCBob3VyLCBtZGF5LCBtb247CisJdTMyIHllYXI7CisKKwl3aGlsZSAoKHZydGNfY21vc19yZWFkKFJUQ19GUkVRX1NFTEVDVCkgJiBSVENfVUlQKSkKKwkJY3B1X3JlbGF4KCk7CisKKwlzZWMgPSB2cnRjX2Ntb3NfcmVhZChSVENfU0VDT05EUyk7CisJbWluID0gdnJ0Y19jbW9zX3JlYWQoUlRDX01JTlVURVMpOworCWhvdXIgPSB2cnRjX2Ntb3NfcmVhZChSVENfSE9VUlMpOworCW1kYXkgPSB2cnRjX2Ntb3NfcmVhZChSVENfREFZX09GX01PTlRIKTsKKwltb24gPSB2cnRjX2Ntb3NfcmVhZChSVENfTU9OVEgpOworCXllYXIgPSB2cnRjX2Ntb3NfcmVhZChSVENfWUVBUik7CisKKwkvKiB2UlRDIFlFQVIgcmVnIGNvbnRhaW5zIHRoZSBvZmZzZXQgdG8gMTk2MCAqLworCXllYXIgKz0gMTk2MDsKKworCXByaW50ayhLRVJOX0lORk8gInZSVEM6IHNlYzogJWQgbWluOiAlZCBob3VyOiAlZCBkYXk6ICVkICIKKwkJIm1vbjogJWQgeWVhcjogJWRcbiIsIHNlYywgbWluLCBob3VyLCBtZGF5LCBtb24sIHllYXIpOworCisJcmV0dXJuIG1rdGltZSh5ZWFyLCBtb24sIG1kYXksIGhvdXIsIG1pbiwgc2VjKTsKK30KKworLyogT25seSBjYXJlIGFib3V0IHRoZSBtaW51dGVzIGFuZCBzZWNvbmRzICovCitpbnQgdnJ0Y19zZXRfbW1zcyh1bnNpZ25lZCBsb25nIG5vd3RpbWUpCit7CisJaW50IHJlYWxfc2VjLCByZWFsX21pbjsKKwlpbnQgdnJ0Y19taW47CisKKwl2cnRjX21pbiA9IHZydGNfY21vc19yZWFkKFJUQ19NSU5VVEVTKTsKKworCXJlYWxfc2VjID0gbm93dGltZSAlIDYwOworCXJlYWxfbWluID0gbm93dGltZSAvIDYwOworCWlmICgoKGFicyhyZWFsX21pbiAtIHZydGNfbWluKSArIDE1KS8zMCkgJiAxKQorCQlyZWFsX21pbiArPSAzMDsKKwlyZWFsX21pbiAlPSA2MDsKKworCXZydGNfY21vc193cml0ZShyZWFsX3NlYywgUlRDX1NFQ09ORFMpOworCXZydGNfY21vc193cml0ZShyZWFsX21pbiwgUlRDX01JTlVURVMpOworCXJldHVybiAwOworfQorCit2b2lkIF9faW5pdCBtcnN0X3J0Y19pbml0KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBydGNfcGFkZHI7CisJdm9pZCBfX2lvbWVtICp2aXJ0X2Jhc2U7CisKKwlzZmlfdGFibGVfcGFyc2UoU0ZJX1NJR19NUlRDLCBOVUxMLCBOVUxMLCBzZmlfcGFyc2VfbXJ0Yyk7CisJaWYgKCFzZmlfbXJ0Y19udW0pCisJCXJldHVybjsKKworCXJ0Y19wYWRkciA9IHNmaV9tcnRjX2FycmF5WzBdLnBoeXNfYWRkcjsKKworCS8qIHZSVEMncyByZWdpc3RlciBhZGRyZXNzIG1heSBub3QgYmUgcGFnZSBhbGlnbmVkICovCisJc2V0X2ZpeG1hcF9ub2NhY2hlKEZJWF9MTldfVlJUQywgcnRjX3BhZGRyKTsKKworCXZpcnRfYmFzZSA9ICh2b2lkIF9faW9tZW0gKilfX2ZpeF90b192aXJ0KEZJWF9MTldfVlJUQyk7CisJdmlydF9iYXNlICs9IHJ0Y19wYWRkciAmIH5QQUdFX01BU0s7CisJdnJ0Y192aXJ0X2Jhc2UgPSB2aXJ0X2Jhc2U7CisKKwl4ODZfcGxhdGZvcm0uZ2V0X3dhbGxjbG9jayA9IHZydGNfZ2V0X3RpbWU7CisJeDg2X3BsYXRmb3JtLnNldF93YWxsY2xvY2sgPSB2cnRjX3NldF9tbXNzOworfQorCisvKgorICogVGhlIE1vb3Jlc3Rvd24gcGxhdGZvcm0gaGFzIGEgbWVtb3J5IG1hcHBlZCB2aXJ0dWFsIFJUQyBkZXZpY2UgdGhhdCBlbXVsYXRlcworICogdGhlIHByb2dyYW1taW5nIGludGVyZmFjZSBvZiB0aGUgUlRDLgorICovCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdnJ0Y19yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB2cnRjX2RldmljZSA9IHsKKwkubmFtZQkJPSAicnRjX21yc3QiLAorCS5pZAkJPSAtMSwKKwkucmVzb3VyY2UJPSB2cnRjX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodnJ0Y19yZXNvdXJjZXMpLAorfTsKKworLyogUmVnaXN0ZXIgdGhlIFJUQyBkZXZpY2UgaWYgYXBwcm9wcmlhdGUgKi8KK3N0YXRpYyBpbnQgX19pbml0IG1yc3RfZGV2aWNlX2NyZWF0ZSh2b2lkKQoreworCS8qIE5vIE1vb3Jlc3Rvd24sIG5vIGRldmljZSAqLworCWlmICghbXJzdF9pZGVudGlmeV9jcHUoKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisJLyogTm8gdGltZXIsIG5vIGRldmljZSAqLworCWlmICghc2ZpX21ydGNfbnVtKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIGlvbWVtIHJlc291cmNlICovCisJdnJ0Y19yZXNvdXJjZXNbMF0uc3RhcnQgPSBzZmlfbXJ0Y19hcnJheVswXS5waHlzX2FkZHI7CisJdnJ0Y19yZXNvdXJjZXNbMF0uZW5kID0gc2ZpX21ydGNfYXJyYXlbMF0ucGh5c19hZGRyICsKKwkJCQlNUlNUX1ZSVENfTUFQX1NaOworCS8qIGlycSByZXNvdXJjZSAqLworCXZydGNfcmVzb3VyY2VzWzFdLnN0YXJ0ID0gc2ZpX21ydGNfYXJyYXlbMF0uaXJxOworCXZydGNfcmVzb3VyY2VzWzFdLmVuZCA9IHNmaV9tcnRjX2FycmF5WzBdLmlycTsKKworCXJldHVybiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnZydGNfZGV2aWNlKTsKK30KKworbW9kdWxlX2luaXQobXJzdF9kZXZpY2VfY3JlYXRlKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BsYXRmb3JtL3NmaS9zZmkuYyBiL2FyY2gveDg2L3BsYXRmb3JtL3NmaS9zZmkuYwppbmRleCBkZDRjMjgxLi43Nzg1YjcyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wbGF0Zm9ybS9zZmkvc2ZpLmMKKysrIGIvYXJjaC94ODYvcGxhdGZvcm0vc2ZpL3NmaS5jCkBAIC0zNCwyMyArMzQsMTIgQEAKICNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNmaV9sYXBpY19hZGRyIF9faW5pdGRhdGEgPSBBUElDX0RFRkFVTFRfUEhZU19CQVNFOwogCi1zdGF0aWMgdm9pZCBfX2luaXQgbXBfc2ZpX3JlZ2lzdGVyX2xhcGljX2FkZHJlc3ModW5zaWduZWQgbG9uZyBhZGRyZXNzKQotewotCW1wX2xhcGljX2FkZHIgPSBhZGRyZXNzOwotCi0Jc2V0X2ZpeG1hcF9ub2NhY2hlKEZJWF9BUElDX0JBU0UsIG1wX2xhcGljX2FkZHIpOwotCWlmIChib290X2NwdV9waHlzaWNhbF9hcGljaWQgPT0gLTFVKQotCQlib290X2NwdV9waHlzaWNhbF9hcGljaWQgPSByZWFkX2FwaWNfaWQoKTsKLQotCXByX2luZm8oIkJvb3QgQ1BVID0gJWRcbiIsIGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCk7Ci19Ci0KIC8qIEFsbCBDUFVzIGVudW1lcmF0ZWQgYnkgU0ZJIG11c3QgYmUgcHJlc2VudCBhbmQgZW5hYmxlZCAqLwogc3RhdGljIHZvaWQgX19jcHVpbml0IG1wX3NmaV9yZWdpc3Rlcl9sYXBpYyh1OCBpZCkKIHsKLQlpZiAoTUFYX0FQSUNTIC0gaWQgPD0gMCkgeworCWlmIChNQVhfTE9DQUxfQVBJQyAtIGlkIDw9IDApIHsKIAkJcHJfd2FybmluZygiUHJvY2Vzc29yICMlZCBpbnZhbGlkIChtYXggJWQpXG4iLAotCQkJaWQsIE1BWF9BUElDUyk7CisJCQlpZCwgTUFYX0xPQ0FMX0FQSUMpOwogCQlyZXR1cm47CiAJfQogCkBAIC0xMTAsNyArOTksNyBAQAogaW50IF9faW5pdCBzZmlfcGxhdGZvcm1faW5pdCh2b2lkKQogewogI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQwotCW1wX3NmaV9yZWdpc3Rlcl9sYXBpY19hZGRyZXNzKHNmaV9sYXBpY19hZGRyKTsKKwlyZWdpc3Rlcl9sYXBpY19hZGRyZXNzKHNmaV9sYXBpY19hZGRyKTsKIAlzZmlfdGFibGVfcGFyc2UoU0ZJX1NJR19DUFVTLCBOVUxMLCBOVUxMLCBzZmlfcGFyc2VfY3B1cyk7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfWDg2X0lPX0FQSUMKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BsYXRmb3JtL3V2L3RsYl91di5jIGIvYXJjaC94ODYvcGxhdGZvcm0vdXYvdGxiX3V2LmMKaW5kZXggYmE5Y2FhOC4uZGY1OGU5YyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGxhdGZvcm0vdXYvdGxiX3V2LmMKKysrIGIvYXJjaC94ODYvcGxhdGZvcm0vdXYvdGxiX3V2LmMKQEAgLTEzNDEsNyArMTM0MSw3IEBACiAKIAkvKgogCSAqIGVhY2ggYmF1X2Rlc2MgaXMgNjQgYnl0ZXM7IHRoZXJlIGFyZSA4IChVVl9JVEVNU19QRVJfREVTQ1JJUFRPUikKLQkgKiBwZXIgY3B1OyBhbmQgdXAgdG8gMzIgKFVWX0FEUF9TSVpFKSBjcHUncyBwZXIgdXZodWIKKwkgKiBwZXIgY3B1OyBhbmQgb25lIHBlciBjcHUgb24gdGhlIHV2aHViIChVVl9BRFBfU0laRSkKIAkgKi8KIAliYXVfZGVzYyA9IGttYWxsb2Nfbm9kZShzaXplb2Yoc3RydWN0IGJhdV9kZXNjKSAqIFVWX0FEUF9TSVpFCiAJCQkJKiBVVl9JVEVNU19QRVJfREVTQ1JJUFRPUiwgR0ZQX0tFUk5FTCwgbm9kZSk7CkBAIC0xNDkwLDcgKzE0OTAsNyBAQAogLyoKICAqIGluaXRpYWxpemUgdGhlIGJhdV9jb250cm9sIHN0cnVjdHVyZSBmb3IgZWFjaCBjcHUKICAqLwotc3RhdGljIHZvaWQgX19pbml0IHV2X2luaXRfcGVyX2NwdShpbnQgbnV2aHVicykKK3N0YXRpYyBpbnQgX19pbml0IHV2X2luaXRfcGVyX2NwdShpbnQgbnV2aHVicykKIHsKIAlpbnQgaTsKIAlpbnQgY3B1OwpAQCAtMTUwNyw3ICsxNTA3LDcgQEAKIAlzdHJ1Y3QgYmF1X2NvbnRyb2wgKnNtYXN0ZXIgPSBOVUxMOwogCXN0cnVjdCBzb2NrZXRfZGVzYyB7CiAJCXNob3J0IG51bV9jcHVzOwotCQlzaG9ydCBjcHVfbnVtYmVyWzE2XTsKKwkJc2hvcnQgY3B1X251bWJlcltNQVhfQ1BVU19QRVJfU09DS0VUXTsKIAl9OwogCXN0cnVjdCB1dmh1Yl9kZXNjIHsKIAkJdW5zaWduZWQgc2hvcnQgc29ja2V0X21hc2s7CkBAIC0xNTQwLDYgKzE1NDAsMTAgQEAKIAkJc2RwID0gJmJkcC0+c29ja2V0W3NvY2tldF07CiAJCXNkcC0+Y3B1X251bWJlcltzZHAtPm51bV9jcHVzXSA9IGNwdTsKIAkJc2RwLT5udW1fY3B1cysrOworCQlpZiAoc2RwLT5udW1fY3B1cyA+IE1BWF9DUFVTX1BFUl9TT0NLRVQpIHsKKwkJCXByaW50ayhLRVJOX0VNRVJHICIlZCBjcHVzIHBlciBzb2NrZXQgaW52YWxpZFxuIiwgc2RwLT5udW1fY3B1cyk7CisJCQlyZXR1cm4gMTsKKwkJfQogCX0KIAlmb3IgKHV2aHViID0gMDsgdXZodWIgPCBudXZodWJzOyB1dmh1YisrKSB7CiAJCWlmICghKCoodXZodWJfbWFzayArICh1dmh1Yi84KSkgJiAoMSA8PCAodXZodWIlOCkpKSkKQEAgLTE1NzAsNiArMTU3NCwxMiBAQAogCQkJCWJjcC0+dXZodWJfbWFzdGVyID0gaG1hc3RlcjsKIAkJCQliY3AtPnV2aHViX2NwdSA9IHV2X2NwdV9odWJfaW5mbyhjcHUpLT4KIAkJCQkJCWJsYWRlX3Byb2Nlc3Nvcl9pZDsKKwkJCQlpZiAoYmNwLT51dmh1Yl9jcHUgPj0gTUFYX0NQVVNfUEVSX1VWSFVCKSB7CisJCQkJCXByaW50ayhLRVJOX0VNRVJHCisJCQkJCQkiJWQgY3B1cyBwZXIgdXZodWIgaW52YWxpZFxuIiwKKwkJCQkJCWJjcC0+dXZodWJfY3B1KTsKKwkJCQkJcmV0dXJuIDE7CisJCQkJfQogCQkJfQogbmV4dHNvY2tldDoKIAkJCXNvY2tldCsrOwpAQCAtMTU5NSw2ICsxNjA1LDcgQEAKIAkJYmNwLT5jb25nZXN0ZWRfcmVwcyA9IGNvbmdlc3RlZF9yZXBzOwogCQliY3AtPmNvbmdlc3RlZF9wZXJpb2QgPSBjb25nZXN0ZWRfcGVyaW9kOwogCX0KKwlyZXR1cm4gMDsKIH0KIAogLyoKQEAgLTE2MjUsNyArMTYzNiwxMCBAQAogCXNwaW5fbG9ja19pbml0KCZkaXNhYmxlX2xvY2spOwogCWNvbmdlc3RlZF9jeWNsZXMgPSBtaWNyb3NlY18yX2N5Y2xlcyhjb25nZXN0ZWRfcmVzcG9uc2VfdXMpOwogCi0JdXZfaW5pdF9wZXJfY3B1KG51dmh1YnMpOworCWlmICh1dl9pbml0X3Blcl9jcHUobnV2aHVicykpIHsKKwkJbm9iYXUgPSAxOworCQlyZXR1cm4gMDsKKwl9CiAKIAl1dl9wYXJ0aXRpb25fYmFzZV9wbm9kZSA9IDB4N2ZmZmZmZmY7CiAJZm9yICh1dmh1YiA9IDA7IHV2aHViIDwgbnV2aHViczsgdXZodWIrKykKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BsYXRmb3JtL3Zpc3dzL3Zpc3dzX3F1aXJrcy5jIGIvYXJjaC94ODYvcGxhdGZvcm0vdmlzd3Mvdmlzd3NfcXVpcmtzLmMKaW5kZXggMzM3MWJkMC4uNjMyMDM3NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGxhdGZvcm0vdmlzd3Mvdmlzd3NfcXVpcmtzLmMKKysrIGIvYXJjaC94ODYvcGxhdGZvcm0vdmlzd3Mvdmlzd3NfcXVpcmtzLmMKQEAgLTE3MSw3ICsxNzEsNyBAQAogCXZlciA9IG0tPmFwaWN2ZXI7CiAJaWYgKCh2ZXIgPj0gMHgxNCAmJiBtLT5hcGljaWQgPj0gMHhmZikgfHwgbS0+YXBpY2lkID49IDB4ZikgewogCQlwcmludGsoS0VSTl9FUlIgIlByb2Nlc3NvciAjJWQgSU5WQUxJRC4gKE1heCBJRDogJWQpLlxuIiwKLQkJCW0tPmFwaWNpZCwgTUFYX0FQSUNTKTsKKwkJCW0tPmFwaWNpZCwgTUFYX0xPQ0FMX0FQSUMpOwogCQlyZXR1cm47CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4vZW5saWdodGVuLmMgYi9hcmNoL3g4Ni94ZW4vZW5saWdodGVuLmMKaW5kZXggNDRkY2FkNC4uYWE4Yzg5YSAxMDA2NDQKLS0tIGEvYXJjaC94ODYveGVuL2VubGlnaHRlbi5jCisrKyBiL2FyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYwpAQCAtNTc0LDggKzU3NCw4IEBACiAKIAlwcmVlbXB0X2Rpc2FibGUoKTsKIAotCXN0YXJ0ID0gX19nZXRfY3B1X3ZhcihpZHRfZGVzYykuYWRkcmVzczsKLQllbmQgPSBzdGFydCArIF9fZ2V0X2NwdV92YXIoaWR0X2Rlc2MpLnNpemUgKyAxOworCXN0YXJ0ID0gX190aGlzX2NwdV9yZWFkKGlkdF9kZXNjLmFkZHJlc3MpOworCWVuZCA9IHN0YXJ0ICsgX190aGlzX2NwdV9yZWFkKGlkdF9kZXNjLnNpemUpICsgMTsKIAogCXhlbl9tY19mbHVzaCgpOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4vbXVsdGljYWxscy5oIGIvYXJjaC94ODYveGVuL211bHRpY2FsbHMuaAppbmRleCA5ZTU2NWRhLi40ZWM4MDM1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vbXVsdGljYWxscy5oCisrKyBiL2FyY2gveDg2L3hlbi9tdWx0aWNhbGxzLmgKQEAgLTIyLDcgKzIyLDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCS8qIG5lZWQgdG8gZGlzYWJsZSBpbnRlcnJ1cHRzIHVudGlsIHRoaXMgZW50cnkgaXMgY29tcGxldGUgKi8KIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JX19nZXRfY3B1X3Zhcih4ZW5fbWNfaXJxX2ZsYWdzKSA9IGZsYWdzOworCV9fdGhpc19jcHVfd3JpdGUoeGVuX21jX2lycV9mbGFncywgZmxhZ3MpOwogfQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBtdWx0aWNhbGxfc3BhY2UgeGVuX21jX2VudHJ5KHNpemVfdCBhcmdzKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL3NwaW5sb2NrLmMgYi9hcmNoL3g4Ni94ZW4vc3BpbmxvY2suYwppbmRleCAyM2UwNjFiLi5jYzliMWUxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vc3BpbmxvY2suYworKysgYi9hcmNoL3g4Ni94ZW4vc3BpbmxvY2suYwpAQCAtMTU5LDggKzE1OSw4IEBACiB7CiAJc3RydWN0IHhlbl9zcGlubG9jayAqcHJldjsKIAotCXByZXYgPSBfX2dldF9jcHVfdmFyKGxvY2tfc3Bpbm5lcnMpOwotCV9fZ2V0X2NwdV92YXIobG9ja19zcGlubmVycykgPSB4bDsKKwlwcmV2ID0gX190aGlzX2NwdV9yZWFkKGxvY2tfc3Bpbm5lcnMpOworCV9fdGhpc19jcHVfd3JpdGUobG9ja19zcGlubmVycywgeGwpOwogCiAJd21iKCk7CQkJLyogc2V0IGxvY2sgb2YgaW50ZXJlc3QgYmVmb3JlIGNvdW50ICovCiAKQEAgLTE3OSwxNCArMTc5LDE0IEBACiAJYXNtKExPQ0tfUFJFRklYICIgZGVjdyAlMCIKIAkgICAgOiAiK20iICh4bC0+c3Bpbm5lcnMpIDogOiAibWVtb3J5Iik7CiAJd21iKCk7CQkJLyogZGVjcmVtZW50IGNvdW50IGJlZm9yZSByZXN0b3JpbmcgbG9jayAqLwotCV9fZ2V0X2NwdV92YXIobG9ja19zcGlubmVycykgPSBwcmV2OworCV9fdGhpc19jcHVfd3JpdGUobG9ja19zcGlubmVycywgcHJldik7CiB9CiAKIHN0YXRpYyBub2lubGluZSBpbnQgeGVuX3NwaW5fbG9ja19zbG93KHN0cnVjdCBhcmNoX3NwaW5sb2NrICpsb2NrLCBib29sIGlycV9lbmFibGUpCiB7CiAJc3RydWN0IHhlbl9zcGlubG9jayAqeGwgPSAoc3RydWN0IHhlbl9zcGlubG9jayAqKWxvY2s7CiAJc3RydWN0IHhlbl9zcGlubG9jayAqcHJldjsKLQlpbnQgaXJxID0gX19nZXRfY3B1X3Zhcihsb2NrX2tpY2tlcl9pcnEpOworCWludCBpcnEgPSBfX3RoaXNfY3B1X3JlYWQobG9ja19raWNrZXJfaXJxKTsKIAlpbnQgcmV0OwogCXU2NCBzdGFydDsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL3RpbWUuYyBiL2FyY2gveDg2L3hlbi90aW1lLmMKaW5kZXggNWRhNWU1My4uMDY3NzU5ZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYveGVuL3RpbWUuYworKysgYi9hcmNoL3g4Ni94ZW4vdGltZS5jCkBAIC0xMzUsMjQgKzEzNSwyNCBAQAogCiAJLyogQWRkIHRoZSBhcHByb3ByaWF0ZSBudW1iZXIgb2YgdGlja3Mgb2Ygc3RvbGVuIHRpbWUsCiAJICAgaW5jbHVkaW5nIGFueSBsZWZ0LW92ZXJzIGZyb20gbGFzdCB0aW1lLiAqLwotCXN0b2xlbiA9IHJ1bm5hYmxlICsgb2ZmbGluZSArIF9fZ2V0X2NwdV92YXIoeGVuX3Jlc2lkdWFsX3N0b2xlbik7CisJc3RvbGVuID0gcnVubmFibGUgKyBvZmZsaW5lICsgX190aGlzX2NwdV9yZWFkKHhlbl9yZXNpZHVhbF9zdG9sZW4pOwogCiAJaWYgKHN0b2xlbiA8IDApCiAJCXN0b2xlbiA9IDA7CiAKIAl0aWNrcyA9IGl0ZXJfZGl2X3U2NF9yZW0oc3RvbGVuLCBOU19QRVJfVElDSywgJnN0b2xlbik7Ci0JX19nZXRfY3B1X3Zhcih4ZW5fcmVzaWR1YWxfc3RvbGVuKSA9IHN0b2xlbjsKKwlfX3RoaXNfY3B1X3dyaXRlKHhlbl9yZXNpZHVhbF9zdG9sZW4sIHN0b2xlbik7CiAJYWNjb3VudF9zdGVhbF90aWNrcyh0aWNrcyk7CiAKIAkvKiBBZGQgdGhlIGFwcHJvcHJpYXRlIG51bWJlciBvZiB0aWNrcyBvZiBibG9ja2VkIHRpbWUsCiAJICAgaW5jbHVkaW5nIGFueSBsZWZ0LW92ZXJzIGZyb20gbGFzdCB0aW1lLiAqLwotCWJsb2NrZWQgKz0gX19nZXRfY3B1X3Zhcih4ZW5fcmVzaWR1YWxfYmxvY2tlZCk7CisJYmxvY2tlZCArPSBfX3RoaXNfY3B1X3JlYWQoeGVuX3Jlc2lkdWFsX2Jsb2NrZWQpOwogCiAJaWYgKGJsb2NrZWQgPCAwKQogCQlibG9ja2VkID0gMDsKIAogCXRpY2tzID0gaXRlcl9kaXZfdTY0X3JlbShibG9ja2VkLCBOU19QRVJfVElDSywgJmJsb2NrZWQpOwotCV9fZ2V0X2NwdV92YXIoeGVuX3Jlc2lkdWFsX2Jsb2NrZWQpID0gYmxvY2tlZDsKKwlfX3RoaXNfY3B1X3dyaXRlKHhlbl9yZXNpZHVhbF9ibG9ja2VkLCBibG9ja2VkKTsKIAlhY2NvdW50X2lkbGVfdGlja3ModGlja3MpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9pb2N0bHMuaCBiL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL2lvY3Rscy5oCmluZGV4IGFiMTgwMDAuLmNjZjE4MDAgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL2lvY3Rscy5oCisrKyBiL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL2lvY3Rscy5oCkBAIC05OCw2ICs5OCw3IEBACiAjZGVmaW5lIFRDU0VUU0YyCV9JT1coJ1QnLCA0NSwgc3RydWN0IHRlcm1pb3MyKQogI2RlZmluZSBUSU9DR1BUTglfSU9SKCdUJywweDMwLCB1bnNpZ25lZCBpbnQpIC8qIEdldCBQdHkgTnVtYmVyIChvZiBwdHktbXV4IGRldmljZSkgKi8KICNkZWZpbmUgVElPQ1NQVExDSwlfSU9XKCdUJywweDMxLCBpbnQpICAvKiBMb2NrL3VubG9jayBQdHkgKi8KKyNkZWZpbmUgVElPQ0dERVYJX0lPUignVCcsMHgzMiwgdW5zaWduZWQgaW50KSAvKiBHZXQgcHJpbWFyeSBkZXZpY2Ugbm9kZSBvZiAvZGV2L2NvbnNvbGUgKi8KICNkZWZpbmUgVElPQ1NJRwkJX0lPVygnVCcsMHgzNiwgaW50KSAgLyogR2VuZXJhdGUgc2lnbmFsIG9uIFB0eSBzbGF2ZSAqLwogCiAjZGVmaW5lIFRJT0NTRVJDT05GSUcJX0lPKCdUJywgODMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL0tjb25maWcgYi9kcml2ZXJzL0tjb25maWcKaW5kZXggYTJiOTAyZi4uM2Q5M2IzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9LY29uZmlnCisrKyBiL2RyaXZlcnMvS2NvbmZpZwpAQCAtMTExLDQgKzExMSw2IEBACiBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9LY29uZmlnIgogCiBzb3VyY2UgImRyaXZlcnMvcGxhdGZvcm0vS2NvbmZpZyIKKworc291cmNlICJkcml2ZXJzL2Nsay9LY29uZmlnIgogZW5kbWVudQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9NYWtlZmlsZSBiL2RyaXZlcnMvTWFrZWZpbGUKaW5kZXggZjNlYmIzMC4uYmYxNWNlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL01ha2VmaWxlCkBAIC0xMTUsMyArMTE1LDUgQEAKIG9iai0kKENPTkZJR19TVEFHSU5HKQkJKz0gc3RhZ2luZy8KIG9iai15CQkJCSs9IHBsYXRmb3JtLwogb2JqLXkJCQkJKz0gaWVlZTgwMjE1NC8KKyNjb21tb24gY2xrIGNvZGUKK29iai15CQkJCSs9IGNsay8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNpbml0LmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zaW5pdC5jCmluZGV4IDY2MGEyNzIuLjBjYWM3ZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNpbml0LmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc2luaXQuYwpAQCAtNTc3LDkgKzU3Nyw3IEBACiAJICogYXMgcG9zc2libGUgKHdpdGhvdXQgYW4gTk1JIGJlaW5nIHJlY2VpdmVkIGluIHRoZSBtaWRkbGUgb2YKIAkgKiB0aGlzKSAtIHNvIGRpc2FibGUgTk1JcyBhbmQgaW5pdGlhbGl6ZSB0aGUgZGV2aWNlOgogCSAqLwotCWFjcGlfbm1pX2Rpc2FibGUoKTsKIAlzdGF0dXMgPSBhY3BpX25zX2V2YWx1YXRlKGluZm8pOwotCWFjcGlfbm1pX2VuYWJsZSgpOwogCiAJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKSB7CiAJCXdhbGtfaW5mby0+bnVtX0lOSSsrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL251bWEuYyBiL2RyaXZlcnMvYWNwaS9udW1hLmMKaW5kZXggNTcxODU2Ni4uZDk5MjZhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL251bWEuYworKysgYi9kcml2ZXJzL2FjcGkvbnVtYS5jCkBAIC0yNzUsMTMgKzI3NSwyMyBAQAogaW50IF9faW5pdCBhY3BpX251bWFfaW5pdCh2b2lkKQogewogCWludCByZXQgPSAwOworCWludCBucl9jcHVfZW50cmllcyA9IG5yX2NwdV9pZHM7CisKKyNpZmRlZiBDT05GSUdfWDg2CisJLyoKKwkgKiBTaG91bGQgbm90IGxpbWl0IG51bWJlciB3aXRoIGNwdSBudW0gdGhhdCBpcyBmcm9tIE5SX0NQVVMgb3IgbnJfY3B1cz0KKwkgKiBTUkFUIGNwdSBlbnRyaWVzIGNvdWxkIGhhdmUgZGlmZmVyZW50IG9yZGVyIHdpdGggdGhhdCBpbiBNQURULgorCSAqIFNvIGdvIG92ZXIgYWxsIGNwdSBlbnRyaWVzIGluIFNSQVQgdG8gZ2V0IGFwaWNpZCB0byBub2RlIG1hcHBpbmcuCisJICovCisJbnJfY3B1X2VudHJpZXMgPSBNQVhfTE9DQUxfQVBJQzsKKyNlbmRpZgogCiAJLyogU1JBVDogU3RhdGljIFJlc291cmNlIEFmZmluaXR5IFRhYmxlICovCiAJaWYgKCFhY3BpX3RhYmxlX3BhcnNlKEFDUElfU0lHX1NSQVQsIGFjcGlfcGFyc2Vfc3JhdCkpIHsKIAkJYWNwaV90YWJsZV9wYXJzZV9zcmF0KEFDUElfU1JBVF9UWVBFX1gyQVBJQ19DUFVfQUZGSU5JVFksCi0JCQkJICAgICBhY3BpX3BhcnNlX3gyYXBpY19hZmZpbml0eSwgbnJfY3B1X2lkcyk7CisJCQkJICAgICBhY3BpX3BhcnNlX3gyYXBpY19hZmZpbml0eSwgbnJfY3B1X2VudHJpZXMpOwogCQlhY3BpX3RhYmxlX3BhcnNlX3NyYXQoQUNQSV9TUkFUX1RZUEVfQ1BVX0FGRklOSVRZLAotCQkJCSAgICAgYWNwaV9wYXJzZV9wcm9jZXNzb3JfYWZmaW5pdHksIG5yX2NwdV9pZHMpOworCQkJCSAgICAgYWNwaV9wYXJzZV9wcm9jZXNzb3JfYWZmaW5pdHksIG5yX2NwdV9lbnRyaWVzKTsKIAkJcmV0ID0gYWNwaV90YWJsZV9wYXJzZV9zcmF0KEFDUElfU1JBVF9UWVBFX01FTU9SWV9BRkZJTklUWSwKIAkJCQkJICAgIGFjcGlfcGFyc2VfbWVtb3J5X2FmZmluaXR5LAogCQkJCQkgICAgTlJfTk9ERV9NRU1CTEtTKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfaWRsZS5jIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9pZGxlLmMKaW5kZXggZGNiMzhmOC4uYTc2NWI4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9pZGxlLmMKKysrIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9pZGxlLmMKQEAgLTc0Niw3ICs3NDYsNyBAQAogCXN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHI7CiAJc3RydWN0IGFjcGlfcHJvY2Vzc29yX2N4ICpjeCA9IGNwdWlkbGVfZ2V0X3N0YXRlZGF0YShzdGF0ZSk7CiAKLQlwciA9IF9fZ2V0X2NwdV92YXIocHJvY2Vzc29ycyk7CisJcHIgPSBfX3RoaXNfY3B1X3JlYWQocHJvY2Vzc29ycyk7CiAKIAlpZiAodW5saWtlbHkoIXByKSkKIAkJcmV0dXJuIDA7CkBAIC03ODcsNyArNzg3LDcgQEAKIAlzNjQgaWRsZV90aW1lX25zOwogCXM2NCBpZGxlX3RpbWU7CiAKLQlwciA9IF9fZ2V0X2NwdV92YXIocHJvY2Vzc29ycyk7CisJcHIgPSBfX3RoaXNfY3B1X3JlYWQocHJvY2Vzc29ycyk7CiAKIAlpZiAodW5saWtlbHkoIXByKSkKIAkJcmV0dXJuIDA7CkBAIC04NjQsNyArODY0LDcgQEAKIAlzNjQgaWRsZV90aW1lOwogCiAKLQlwciA9IF9fZ2V0X2NwdV92YXIocHJvY2Vzc29ycyk7CisJcHIgPSBfX3RoaXNfY3B1X3JlYWQocHJvY2Vzc29ycyk7CiAKIAlpZiAodW5saWtlbHkoIXByKSkKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FtYmEvYnVzLmMgYi9kcml2ZXJzL2FtYmEvYnVzLmMKaW5kZXggMjczN2I5Ny4uZTdkZjAxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hbWJhL2J1cy5jCisrKyBiL2RyaXZlcnMvYW1iYS9idXMuYwpAQCAtMTQ3LDYgKzE0NywzOSBAQAogCWNsa19wdXQocGNsayk7CiB9CiAKK3N0YXRpYyBpbnQgYW1iYV9nZXRfZW5hYmxlX3Zjb3JlKHN0cnVjdCBhbWJhX2RldmljZSAqcGNkZXYpCit7CisJc3RydWN0IHJlZ3VsYXRvciAqdmNvcmUgPSByZWd1bGF0b3JfZ2V0KCZwY2Rldi0+ZGV2LCAidmNvcmUiKTsKKwlpbnQgcmV0OworCisJcGNkZXYtPnZjb3JlID0gdmNvcmU7CisKKwlpZiAoSVNfRVJSKHZjb3JlKSkgeworCQkvKiBJdCBpcyBPSyBub3QgdG8gc3VwcGx5IGEgdmNvcmUgcmVndWxhdG9yICovCisJCWlmIChQVFJfRVJSKHZjb3JlKSA9PSAtRU5PREVWKQorCQkJcmV0dXJuIDA7CisJCXJldHVybiBQVFJfRVJSKHZjb3JlKTsKKwl9CisKKwlyZXQgPSByZWd1bGF0b3JfZW5hYmxlKHZjb3JlKTsKKwlpZiAocmV0KSB7CisJCXJlZ3VsYXRvcl9wdXQodmNvcmUpOworCQlwY2Rldi0+dmNvcmUgPSBFUlJfUFRSKC1FTk9ERVYpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGFtYmFfcHV0X2Rpc2FibGVfdmNvcmUoc3RydWN0IGFtYmFfZGV2aWNlICpwY2RldikKK3sKKwlzdHJ1Y3QgcmVndWxhdG9yICp2Y29yZSA9IHBjZGV2LT52Y29yZTsKKworCWlmICghSVNfRVJSKHZjb3JlKSkgeworCQlyZWd1bGF0b3JfZGlzYWJsZSh2Y29yZSk7CisJCXJlZ3VsYXRvcl9wdXQodmNvcmUpOworCX0KK30KKwogLyoKICAqIFRoZXNlIGFyZSB0aGUgZGV2aWNlIG1vZGVsIGNvbnZlcnNpb24gdmVuZWVyczsgdGhleSBjb252ZXJ0IHRoZQogICogZGV2aWNlIG1vZGVsIHN0cnVjdHVyZXMgdG8gb3VyIG1vcmUgc3BlY2lmaWMgc3RydWN0dXJlcy4KQEAgLTE1OSw2ICsxOTIsMTAgQEAKIAlpbnQgcmV0OwogCiAJZG8geworCQlyZXQgPSBhbWJhX2dldF9lbmFibGVfdmNvcmUocGNkZXYpOworCQlpZiAocmV0KQorCQkJYnJlYWs7CisKIAkJcmV0ID0gYW1iYV9nZXRfZW5hYmxlX3BjbGsocGNkZXYpOwogCQlpZiAocmV0KQogCQkJYnJlYWs7CkBAIC0xNjgsNiArMjA1LDcgQEAKIAkJCWJyZWFrOwogCiAJCWFtYmFfcHV0X2Rpc2FibGVfcGNsayhwY2Rldik7CisJCWFtYmFfcHV0X2Rpc2FibGVfdmNvcmUocGNkZXYpOwogCX0gd2hpbGUgKDApOwogCiAJcmV0dXJuIHJldDsKQEAgLTE4MCw2ICsyMTgsNyBAQAogCWludCByZXQgPSBkcnYtPnJlbW92ZShwY2Rldik7CiAKIAlhbWJhX3B1dF9kaXNhYmxlX3BjbGsocGNkZXYpOworCWFtYmFfcHV0X2Rpc2FibGVfdmNvcmUocGNkZXYpOwogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL0tjb25maWcgYi9kcml2ZXJzL2F0YS9LY29uZmlnCmluZGV4IDM2ZTIzMTkuLmM2YjI5OGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL0tjb25maWcKKysrIGIvZHJpdmVycy9hdGEvS2NvbmZpZwpAQCAtMiw2ICsyLDE0IEBACiAjIFNBVEEvUEFUQSBkcml2ZXIgY29uZmlndXJhdGlvbgogIwogCitjb25maWcgSEFWRV9QQVRBX1BMQVRGT1JNCisJYm9vbAorCWhlbHAKKwkgIFRoaXMgaXMgYW4gaW50ZXJuYWwgY29uZmlndXJhdGlvbiBub2RlIGZvciBhbnkgbWFjaGluZSB0aGF0CisJICB1c2VzIHBhdGEtcGxhdGZvcm0gZHJpdmVyIHRvIGVuYWJsZSB0aGUgcmVsZXZhbnQgZHJpdmVyIGluIHRoZQorCSAgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgd2l0aG91dCBoYXZpbmcgdG8gc3VibWl0IGVuZGxlc3MgcGF0Y2hlcworCSAgdG8gdXBkYXRlIHRoZSBQQVRBX1BMQVRGT1JNIGVudHJ5LgorCiBtZW51Y29uZmlnIEFUQQogCXRyaXN0YXRlICJTZXJpYWwgQVRBIGFuZCBQYXJhbGxlbCBBVEEgZHJpdmVycyIKIAlkZXBlbmRzIG9uIEhBU19JT01FTQpAQCAtOTAsNiArOTgsMTQgQEAKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIEluaXRpbyAxNjJ4IFNlcmlhbCBBVEEuCiAKK2NvbmZpZyBTQVRBX0FDQVJEX0FIQ0kKKwl0cmlzdGF0ZSAiQUNhcmQgQUhDSSB2YXJpYW50IChBVFAgODYyMCkiCisJZGVwZW5kcyBvbiBQQ0kKKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIEFjYXJkLgorCisJICBJZiB1bnN1cmUsIHNheSBOLgorCiBjb25maWcgU0FUQV9TSUwyNAogCXRyaXN0YXRlICJTaWxpY29uIEltYWdlIDMxMjQvMzEzMiBTQVRBIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBQQ0kKQEAgLTQwMCwxMSArNDE2LDExIEBACiAJICBJZiB1bnN1cmUsIHNheSBOLgogCiBjb25maWcgUEFUQV9IUFQzWDJOCi0JdHJpc3RhdGUgIkhQVCAzNzJOLzMwMk4gUEFUQSBzdXBwb3J0IgorCXRyaXN0YXRlICJIUFQgMzcxTi8zNzJOLzMwMk4gUEFUQSBzdXBwb3J0IgogCWRlcGVuZHMgb24gUENJCiAJaGVscAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTiB2YXJpYW50IEhQVCBQQVRBCi0JICBjb250cm9sbGVycyB2aWEgdGhlIG5ldyBBVEEgbGF5ZXIKKwkgIGNvbnRyb2xsZXJzIHZpYSB0aGUgbmV3IEFUQSBsYXllci4KIAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIApAQCAtNzY1LDE0ICs3ODEsNiBAQAogCiAJICBJZiB1bnN1cmUsIHNheSBOLgogCi1jb25maWcgSEFWRV9QQVRBX1BMQVRGT1JNCi0JYm9vbAotCWhlbHAKLQkgIFRoaXMgaXMgYW4gaW50ZXJuYWwgY29uZmlndXJhdGlvbiBub2RlIGZvciBhbnkgbWFjaGluZSB0aGF0Ci0JICB1c2VzIHBhdGEtcGxhdGZvcm0gZHJpdmVyIHRvIGVuYWJsZSB0aGUgcmVsZXZhbnQgZHJpdmVyIGluIHRoZQotCSAgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgd2l0aG91dCBoYXZpbmcgdG8gc3VibWl0IGVuZGxlc3MgcGF0Y2hlcwotCSAgdG8gdXBkYXRlIHRoZSBQQVRBX1BMQVRGT1JNIGVudHJ5LgotCiBjb25maWcgUEFUQV9QTEFURk9STQogCXRyaXN0YXRlICJHZW5lcmljIHBsYXRmb3JtIGRldmljZSBQQVRBIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBFTUJFRERFRCB8fCBQUEMgfHwgSEFWRV9QQVRBX1BMQVRGT1JNCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9NYWtlZmlsZSBiL2RyaXZlcnMvYXRhL01ha2VmaWxlCmluZGV4IDJiNjdjOTAuLjI3MjkxYWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvYXRhL01ha2VmaWxlCkBAIC0zLDYgKzMsNyBAQAogCiAjIG5vbi1TRkYgaW50ZXJmYWNlCiBvYmotJChDT05GSUdfU0FUQV9BSENJKQkJKz0gYWhjaS5vIGxpYmFoY2kubworb2JqLSQoQ09ORklHX1NBVEFfQUNBUkRfQUhDSSkJKz0gYWNhcmQtYWhjaS5vIGxpYmFoY2kubwogb2JqLSQoQ09ORklHX1NBVEFfQUhDSV9QTEFURk9STSkgKz0gYWhjaV9wbGF0Zm9ybS5vIGxpYmFoY2kubwogb2JqLSQoQ09ORklHX1NBVEFfRlNMKQkJKz0gc2F0YV9mc2wubwogb2JqLSQoQ09ORklHX1NBVEFfSU5JQzE2MlgpCSs9IHNhdGFfaW5pYzE2MngubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvYWNhcmQtYWhjaS5jIGIvZHJpdmVycy9hdGEvYWNhcmQtYWhjaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzOWMyMTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2F0YS9hY2FyZC1haGNpLmMKQEAgLTAsMCArMSw1MjggQEAKKworLyoKKyAqICBhY2FyZC1haGNpLmMgLSBBQ2FyZCBBSENJIFNBVEEgc3VwcG9ydAorICoKKyAqICBNYWludGFpbmVkIGJ5OiAgSmVmZiBHYXJ6aWsgPGpnYXJ6aWtAcG9ib3guY29tPgorICoJCSAgICBQbGVhc2UgQUxXQVlTIGNvcHkgbGludXgtaWRlQHZnZXIua2VybmVsLm9yZworICoJCSAgICBvbiBlbWFpbHMuCisgKgorICogIENvcHlyaWdodCAyMDEwIFJlZCBIYXQsIEluYy4KKyAqCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiAgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqCisgKiBsaWJhdGEgZG9jdW1lbnRhdGlvbiBpcyBhdmFpbGFibGUgdmlhICdtYWtlIHtwc3xwZGZ9ZG9jcycsCisgKiBhcyBEb2N1bWVudGF0aW9uL0RvY0Jvb2svbGliYXRhLioKKyAqCisgKiBBSENJIGhhcmR3YXJlIGRvY3VtZW50YXRpb246CisgKiBodHRwOi8vd3d3LmludGVsLmNvbS90ZWNobm9sb2d5L3NlcmlhbGF0YS9wZGYvcmV2MV8wLnBkZgorICogaHR0cDovL3d3dy5pbnRlbC5jb20vdGVjaG5vbG9neS9zZXJpYWxhdGEvcGRmL3JldjFfMS5wZGYKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZG1pLmg+CisjaW5jbHVkZSA8bGludXgvZ2ZwLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpYmF0YS5oPgorI2luY2x1ZGUgImFoY2kuaCIKKworI2RlZmluZSBEUlZfTkFNRQkiYWNhcmQtYWhjaSIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JIjEuMCIKKworLyoKKyAgUmVjZWl2ZWQgRklTIHN0cnVjdHVyZSBsaW1pdGVkIHRvIDgwaC4KKyovCisKKyNkZWZpbmUgQUNBUkRfQUhDSV9SWF9GSVNfU1ogMTI4CisKK2VudW0geworCUFIQ0lfUENJX0JBUgkJPSA1LAorfTsKKworZW51bSBib2FyZF9pZHMgeworCWJvYXJkX2FjYXJkX2FoY2ksCit9OworCitzdHJ1Y3QgYWNhcmRfc2cgeworCV9fbGUzMgkJCWFkZHI7CisJX19sZTMyCQkJYWRkcl9oaTsKKwlfX2xlMzIJCQlyZXNlcnZlZDsKKwlfX2xlMzIJCQlzaXplOwkgLyogYml0IDMxIChFT1QpIG1heD09MHgxMDAwMCAoNjRrKSAqLworfTsKKworc3RhdGljIHZvaWQgYWNhcmRfYWhjaV9xY19wcmVwKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOworc3RhdGljIGJvb2wgYWNhcmRfYWhjaV9xY19maWxsX3J0ZihzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKK3N0YXRpYyBpbnQgYWNhcmRfYWhjaV9wb3J0X3N0YXJ0KHN0cnVjdCBhdGFfcG9ydCAqYXApOworc3RhdGljIGludCBhY2FyZF9haGNpX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KTsKKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBhY2FyZF9haGNpX3BjaV9kZXZpY2Vfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IG1lc2cpOworc3RhdGljIGludCBhY2FyZF9haGNpX3BjaV9kZXZpY2VfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBhY2FyZF9haGNpX3NodCA9IHsKKwlBSENJX1NIVCgiYWNhcmQtYWhjaSIpLAorfTsKKworc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIGFjYXJkX29wcyA9IHsKKwkuaW5oZXJpdHMJCT0gJmFoY2lfb3BzLAorCS5xY19wcmVwCQk9IGFjYXJkX2FoY2lfcWNfcHJlcCwKKwkucWNfZmlsbF9ydGYJCT0gYWNhcmRfYWhjaV9xY19maWxsX3J0ZiwKKwkucG9ydF9zdGFydCAgICAgICAgICAgICA9IGFjYXJkX2FoY2lfcG9ydF9zdGFydCwKK307CisKKyNkZWZpbmUgQUhDSV9IRkxBR1MoZmxhZ3MpCS5wcml2YXRlX2RhdGEJPSAodm9pZCAqKShmbGFncykKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGFjYXJkX2FoY2lfcG9ydF9pbmZvW10gPSB7CisJW2JvYXJkX2FjYXJkX2FoY2ldID0KKwl7CisJCUFIQ0lfSEZMQUdTCShBSENJX0hGTEFHX05PX05DUSksCisJCS5mbGFncwkJPSBBSENJX0ZMQUdfQ09NTU9OLAorCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKKwkJLnBvcnRfb3BzCT0gJmFjYXJkX29wcywKKwl9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGFjYXJkX2FoY2lfcGNpX3RibFtdID0geworCS8qIEFDYXJkICovCisJeyBQQ0lfVkRFVklDRShBUlRPUCwgMHgwMDBkKSwgYm9hcmRfYWNhcmRfYWhjaSB9LCAvKiBBVFA4NjIwICovCisKKwl7IH0gICAgLyogdGVybWluYXRlIGxpc3QgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBhY2FyZF9haGNpX3BjaV9kcml2ZXIgPSB7CisJLm5hbWUJCQk9IERSVl9OQU1FLAorCS5pZF90YWJsZQkJPSBhY2FyZF9haGNpX3BjaV90YmwsCisJLnByb2JlCQkJPSBhY2FyZF9haGNpX2luaXRfb25lLAorCS5yZW1vdmUJCQk9IGF0YV9wY2lfcmVtb3ZlX29uZSwKKyNpZmRlZiBDT05GSUdfUE0KKwkuc3VzcGVuZAkJPSBhY2FyZF9haGNpX3BjaV9kZXZpY2Vfc3VzcGVuZCwKKwkucmVzdW1lCQkJPSBhY2FyZF9haGNpX3BjaV9kZXZpY2VfcmVzdW1lLAorI2VuZGlmCit9OworCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IGFjYXJkX2FoY2lfcGNpX2RldmljZV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3QgbWVzZykKK3sKKwlzdHJ1Y3QgYXRhX2hvc3QgKmhvc3QgPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CisJc3RydWN0IGFoY2lfaG9zdF9wcml2ICpocHJpdiA9IGhvc3QtPnByaXZhdGVfZGF0YTsKKwl2b2lkIF9faW9tZW0gKm1taW8gPSBocHJpdi0+bW1pbzsKKwl1MzIgY3RsOworCisJaWYgKG1lc2cuZXZlbnQgJiBQTV9FVkVOVF9TVVNQRU5EICYmCisJICAgIGhwcml2LT5mbGFncyAmIEFIQ0lfSEZMQUdfTk9fU1VTUEVORCkgeworCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmcGRldi0+ZGV2LAorCQkJICAgIkJJT1MgdXBkYXRlIHJlcXVpcmVkIGZvciBzdXNwZW5kL3Jlc3VtZVxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCWlmIChtZXNnLmV2ZW50ICYgUE1fRVZFTlRfU0xFRVApIHsKKwkJLyogQUhDSSBzcGVjIHJldjEuMSBzZWN0aW9uIDguMy4zOgorCQkgKiBTb2Z0d2FyZSBtdXN0IGRpc2FibGUgaW50ZXJydXB0cyBwcmlvciB0byByZXF1ZXN0aW5nIGEKKwkJICogdHJhbnNpdGlvbiBvZiB0aGUgSEJBIHRvIEQzIHN0YXRlLgorCQkgKi8KKwkJY3RsID0gcmVhZGwobW1pbyArIEhPU1RfQ1RMKTsKKwkJY3RsICY9IH5IT1NUX0lSUV9FTjsKKwkJd3JpdGVsKGN0bCwgbW1pbyArIEhPU1RfQ1RMKTsKKwkJcmVhZGwobW1pbyArIEhPU1RfQ1RMKTsgLyogZmx1c2ggKi8KKwl9CisKKwlyZXR1cm4gYXRhX3BjaV9kZXZpY2Vfc3VzcGVuZChwZGV2LCBtZXNnKTsKK30KKworc3RhdGljIGludCBhY2FyZF9haGNpX3BjaV9kZXZpY2VfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBhdGFfaG9zdCAqaG9zdCA9IGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKKwlpbnQgcmM7CisKKwlyYyA9IGF0YV9wY2lfZGV2aWNlX2RvX3Jlc3VtZShwZGV2KTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCWlmIChwZGV2LT5kZXYucG93ZXIucG93ZXJfc3RhdGUuZXZlbnQgPT0gUE1fRVZFTlRfU1VTUEVORCkgeworCQlyYyA9IGFoY2lfcmVzZXRfY29udHJvbGxlcihob3N0KTsKKwkJaWYgKHJjKQorCQkJcmV0dXJuIHJjOworCisJCWFoY2lfaW5pdF9jb250cm9sbGVyKGhvc3QpOworCX0KKworCWF0YV9ob3N0X3Jlc3VtZShob3N0KTsKKworCXJldHVybiAwOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgYWNhcmRfYWhjaV9jb25maWd1cmVfZG1hX21hc2tzKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgdXNpbmdfZGFjKQoreworCWludCByYzsKKworCWlmICh1c2luZ19kYWMgJiYKKwkgICAgIXBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDY0KSkpIHsKKwkJcmMgPSBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDY0KSk7CisJCWlmIChyYykgeworCQkJcmMgPSBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDMyKSk7CisJCQlpZiAocmMpIHsKKwkJCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmcGRldi0+ZGV2LAorCQkJCQkgICAiNjQtYml0IERNQSBlbmFibGUgZmFpbGVkXG4iKTsKKwkJCQlyZXR1cm4gcmM7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQlyYyA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDMyKSk7CisJCWlmIChyYykgeworCQkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJnBkZXYtPmRldiwKKwkJCQkgICAiMzItYml0IERNQSBlbmFibGUgZmFpbGVkXG4iKTsKKwkJCXJldHVybiByYzsKKwkJfQorCQlyYyA9IHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soMzIpKTsKKwkJaWYgKHJjKSB7CisJCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmcGRldi0+ZGV2LAorCQkJCSAgICIzMi1iaXQgY29uc2lzdGVudCBETUEgZW5hYmxlIGZhaWxlZFxuIik7CisJCQlyZXR1cm4gcmM7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGFjYXJkX2FoY2lfcGNpX3ByaW50X2luZm8oc3RydWN0IGF0YV9ob3N0ICpob3N0KQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2Rldihob3N0LT5kZXYpOworCXUxNiBjYzsKKwljb25zdCBjaGFyICpzY2NfczsKKworCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIDB4MGEsICZjYyk7CisJaWYgKGNjID09IFBDSV9DTEFTU19TVE9SQUdFX0lERSkKKwkJc2NjX3MgPSAiSURFIjsKKwllbHNlIGlmIChjYyA9PSBQQ0lfQ0xBU1NfU1RPUkFHRV9TQVRBKQorCQlzY2NfcyA9ICJTQVRBIjsKKwllbHNlIGlmIChjYyA9PSBQQ0lfQ0xBU1NfU1RPUkFHRV9SQUlEKQorCQlzY2NfcyA9ICJSQUlEIjsKKwllbHNlCisJCXNjY19zID0gInVua25vd24iOworCisJYWhjaV9wcmludF9pbmZvKGhvc3QsIHNjY19zKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBhY2FyZF9haGNpX2ZpbGxfc2coc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYywgdm9pZCAqY21kX3RibCkKK3sKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOworCXN0cnVjdCBhY2FyZF9zZyAqYWNhcmRfc2cgPSBjbWRfdGJsICsgQUhDSV9DTURfVEJMX0hEUl9TWjsKKwl1bnNpZ25lZCBpbnQgc2ksIGxhc3Rfc2kgPSAwOworCisJVlBSSU5USygiRU5URVJcbiIpOworCisJLyoKKwkgKiBOZXh0LCB0aGUgUy9HIGxpc3QuCisJICovCisJZm9yX2VhY2hfc2cocWMtPnNnLCBzZywgcWMtPm5fZWxlbSwgc2kpIHsKKwkJZG1hX2FkZHJfdCBhZGRyID0gc2dfZG1hX2FkZHJlc3Moc2cpOworCQl1MzIgc2dfbGVuID0gc2dfZG1hX2xlbihzZyk7CisKKwkJLyoKKwkJICogQUNhcmQgbm90ZToKKwkJICogV2UgbXVzdCBzZXQgYW4gZW5kLW9mLXRhYmxlIChFT1QpIGJpdCwKKwkJICogYW5kIHRoZSBzZWdtZW50IGNhbm5vdCBleGNlZWQgNjRrICgweDEwMDAwKQorCQkgKi8KKwkJYWNhcmRfc2dbc2ldLmFkZHIgPSBjcHVfdG9fbGUzMihhZGRyICYgMHhmZmZmZmZmZik7CisJCWFjYXJkX3NnW3NpXS5hZGRyX2hpID0gY3B1X3RvX2xlMzIoKGFkZHIgPj4gMTYpID4+IDE2KTsKKwkJYWNhcmRfc2dbc2ldLnNpemUgPSBjcHVfdG9fbGUzMihzZ19sZW4pOworCQlsYXN0X3NpID0gc2k7CisJfQorCisJYWNhcmRfc2dbbGFzdF9zaV0uc2l6ZSB8PSBjcHVfdG9fbGUzMigxIDw8IDMxKTsJLyogc2V0IEVPVCAqLworCisJcmV0dXJuIHNpOworfQorCitzdGF0aWMgdm9pZCBhY2FyZF9haGNpX3FjX3ByZXAoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKK3sKKwlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gcWMtPmFwOworCXN0cnVjdCBhaGNpX3BvcnRfcHJpdiAqcHAgPSBhcC0+cHJpdmF0ZV9kYXRhOworCWludCBpc19hdGFwaSA9IGF0YV9pc19hdGFwaShxYy0+dGYucHJvdG9jb2wpOworCXZvaWQgKmNtZF90Ymw7CisJdTMyIG9wdHM7CisJY29uc3QgdTMyIGNtZF9maXNfbGVuID0gNTsgLyogZml2ZSBkd29yZHMgKi8KKwl1bnNpZ25lZCBpbnQgbl9lbGVtOworCisJLyoKKwkgKiBGaWxsIGluIGNvbW1hbmQgdGFibGUgaW5mb3JtYXRpb24uICBGaXJzdCwgdGhlIGhlYWRlciwKKwkgKiBhIFNBVEEgUmVnaXN0ZXIgLSBIb3N0IHRvIERldmljZSBjb21tYW5kIEZJUy4KKwkgKi8KKwljbWRfdGJsID0gcHAtPmNtZF90YmwgKyBxYy0+dGFnICogQUhDSV9DTURfVEJMX1NaOworCisJYXRhX3RmX3RvX2ZpcygmcWMtPnRmLCBxYy0+ZGV2LT5saW5rLT5wbXAsIDEsIGNtZF90YmwpOworCWlmIChpc19hdGFwaSkgeworCQltZW1zZXQoY21kX3RibCArIEFIQ0lfQ01EX1RCTF9DREIsIDAsIDMyKTsKKwkJbWVtY3B5KGNtZF90YmwgKyBBSENJX0NNRF9UQkxfQ0RCLCBxYy0+Y2RiLCBxYy0+ZGV2LT5jZGJfbGVuKTsKKwl9CisKKwluX2VsZW0gPSAwOworCWlmIChxYy0+ZmxhZ3MgJiBBVEFfUUNGTEFHX0RNQU1BUCkKKwkJbl9lbGVtID0gYWNhcmRfYWhjaV9maWxsX3NnKHFjLCBjbWRfdGJsKTsKKworCS8qCisJICogRmlsbCBpbiBjb21tYW5kIHNsb3QgaW5mb3JtYXRpb24uCisJICoKKwkgKiBBQ2FyZCBub3RlOiBwcmQgdGFibGUgbGVuZ3RoIG5vdCBmaWxsZWQgaW4KKwkgKi8KKwlvcHRzID0gY21kX2Zpc19sZW4gfCAocWMtPmRldi0+bGluay0+cG1wIDw8IDEyKTsKKwlpZiAocWMtPnRmLmZsYWdzICYgQVRBX1RGTEFHX1dSSVRFKQorCQlvcHRzIHw9IEFIQ0lfQ01EX1dSSVRFOworCWlmIChpc19hdGFwaSkKKwkJb3B0cyB8PSBBSENJX0NNRF9BVEFQSSB8IEFIQ0lfQ01EX1BSRUZFVENIOworCisJYWhjaV9maWxsX2NtZF9zbG90KHBwLCBxYy0+dGFnLCBvcHRzKTsKK30KKworc3RhdGljIGJvb2wgYWNhcmRfYWhjaV9xY19maWxsX3J0ZihzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQoreworCXN0cnVjdCBhaGNpX3BvcnRfcHJpdiAqcHAgPSBxYy0+YXAtPnByaXZhdGVfZGF0YTsKKwl1OCAqcnhfZmlzID0gcHAtPnJ4X2ZpczsKKworCWlmIChwcC0+ZmJzX2VuYWJsZWQpCisJCXJ4X2ZpcyArPSBxYy0+ZGV2LT5saW5rLT5wbXAgKiBBQ0FSRF9BSENJX1JYX0ZJU19TWjsKKworCS8qCisJICogQWZ0ZXIgYSBzdWNjZXNzZnVsIGV4ZWN1dGlvbiBvZiBhbiBBVEEgUElPIGRhdGEtaW4gY29tbWFuZCwKKwkgKiB0aGUgZGV2aWNlIGRvZXNuJ3Qgc2VuZCBEMkggUmVnIEZJUyB0byB1cGRhdGUgdGhlIFRGIGFuZAorCSAqIHRoZSBob3N0IHNob3VsZCB0YWtlIFRGIGFuZCBFX1N0YXR1cyBmcm9tIHRoZSBwcmVjZWRpbmcgUElPCisJICogU2V0dXAgRklTLgorCSAqLworCWlmIChxYy0+dGYucHJvdG9jb2wgPT0gQVRBX1BST1RfUElPICYmIHFjLT5kbWFfZGlyID09IERNQV9GUk9NX0RFVklDRSAmJgorCSAgICAhKHFjLT5mbGFncyAmIEFUQV9RQ0ZMQUdfRkFJTEVEKSkgeworCQlhdGFfdGZfZnJvbV9maXMocnhfZmlzICsgUlhfRklTX1BJT19TRVRVUCwgJnFjLT5yZXN1bHRfdGYpOworCQlxYy0+cmVzdWx0X3RmLmNvbW1hbmQgPSAocnhfZmlzICsgUlhfRklTX1BJT19TRVRVUClbMTVdOworCX0gZWxzZQorCQlhdGFfdGZfZnJvbV9maXMocnhfZmlzICsgUlhfRklTX0QySF9SRUcsICZxYy0+cmVzdWx0X3RmKTsKKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgaW50IGFjYXJkX2FoY2lfcG9ydF9zdGFydChzdHJ1Y3QgYXRhX3BvcnQgKmFwKQoreworCXN0cnVjdCBhaGNpX2hvc3RfcHJpdiAqaHByaXYgPSBhcC0+aG9zdC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGFwLT5ob3N0LT5kZXY7CisJc3RydWN0IGFoY2lfcG9ydF9wcml2ICpwcDsKKwl2b2lkICptZW07CisJZG1hX2FkZHJfdCBtZW1fZG1hOworCXNpemVfdCBkbWFfc3osIHJ4X2Zpc19zejsKKworCXBwID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcCksIEdGUF9LRVJORUwpOworCWlmICghcHApCisJCXJldHVybiAtRU5PTUVNOworCisJLyogY2hlY2sgRkJTIGNhcGFiaWxpdHkgKi8KKwlpZiAoKGhwcml2LT5jYXAgJiBIT1NUX0NBUF9GQlMpICYmIHNhdGFfcG1wX3N1cHBvcnRlZChhcCkpIHsKKwkJdm9pZCBfX2lvbWVtICpwb3J0X21taW8gPSBhaGNpX3BvcnRfYmFzZShhcCk7CisJCXUzMiBjbWQgPSByZWFkbChwb3J0X21taW8gKyBQT1JUX0NNRCk7CisJCWlmIChjbWQgJiBQT1JUX0NNRF9GQlNDUCkKKwkJCXBwLT5mYnNfc3VwcG9ydGVkID0gdHJ1ZTsKKwkJZWxzZSBpZiAoaHByaXYtPmZsYWdzICYgQUhDSV9IRkxBR19ZRVNfRkJTKSB7CisJCQlkZXZfcHJpbnRrKEtFUk5fSU5GTywgZGV2LAorCQkJCSAgICJwb3J0ICVkIGNhbiBkbyBGQlMsIGZvcmNpbmcgRkJTQ1BcbiIsCisJCQkJICAgYXAtPnBvcnRfbm8pOworCQkJcHAtPmZic19zdXBwb3J0ZWQgPSB0cnVlOworCQl9IGVsc2UKKwkJCWRldl9wcmludGsoS0VSTl9XQVJOSU5HLCBkZXYsCisJCQkJICAgInBvcnQgJWQgaXMgbm90IGNhcGFibGUgb2YgRkJTXG4iLAorCQkJCSAgIGFwLT5wb3J0X25vKTsKKwl9CisKKwlpZiAocHAtPmZic19zdXBwb3J0ZWQpIHsKKwkJZG1hX3N6ID0gQUhDSV9QT1JUX1BSSVZfRkJTX0RNQV9TWjsKKwkJcnhfZmlzX3N6ID0gQUNBUkRfQUhDSV9SWF9GSVNfU1ogKiAxNjsKKwl9IGVsc2UgeworCQlkbWFfc3ogPSBBSENJX1BPUlRfUFJJVl9ETUFfU1o7CisJCXJ4X2Zpc19zeiA9IEFDQVJEX0FIQ0lfUlhfRklTX1NaOworCX0KKworCW1lbSA9IGRtYW1fYWxsb2NfY29oZXJlbnQoZGV2LCBkbWFfc3osICZtZW1fZG1hLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1lbSkKKwkJcmV0dXJuIC1FTk9NRU07CisJbWVtc2V0KG1lbSwgMCwgZG1hX3N6KTsKKworCS8qCisJICogRmlyc3QgaXRlbSBpbiBjaHVuayBvZiBETUEgbWVtb3J5OiAzMi1zbG90IGNvbW1hbmQgdGFibGUsCisJICogMzIgYnl0ZXMgZWFjaCBpbiBzaXplCisJICovCisJcHAtPmNtZF9zbG90ID0gbWVtOworCXBwLT5jbWRfc2xvdF9kbWEgPSBtZW1fZG1hOworCisJbWVtICs9IEFIQ0lfQ01EX1NMT1RfU1o7CisJbWVtX2RtYSArPSBBSENJX0NNRF9TTE9UX1NaOworCisJLyoKKwkgKiBTZWNvbmQgaXRlbTogUmVjZWl2ZWQtRklTIGFyZWEKKwkgKi8KKwlwcC0+cnhfZmlzID0gbWVtOworCXBwLT5yeF9maXNfZG1hID0gbWVtX2RtYTsKKworCW1lbSArPSByeF9maXNfc3o7CisJbWVtX2RtYSArPSByeF9maXNfc3o7CisKKwkvKgorCSAqIFRoaXJkIGl0ZW06IGRhdGEgYXJlYSBmb3Igc3RvcmluZyBhIHNpbmdsZSBjb21tYW5kCisJICogYW5kIGl0cyBzY2F0dGVyLWdhdGhlciB0YWJsZQorCSAqLworCXBwLT5jbWRfdGJsID0gbWVtOworCXBwLT5jbWRfdGJsX2RtYSA9IG1lbV9kbWE7CisKKwkvKgorCSAqIFNhdmUgb2ZmIGluaXRpYWwgbGlzdCBvZiBpbnRlcnJ1cHRzIHRvIGJlIGVuYWJsZWQuCisJICogVGhpcyBjb3VsZCBiZSBjaGFuZ2VkIGxhdGVyCisJICovCisJcHAtPmludHJfbWFzayA9IERFRl9QT1JUX0lSUTsKKworCWFwLT5wcml2YXRlX2RhdGEgPSBwcDsKKworCS8qIGVuZ2FnZSBlbmdpbmVzLCBjYXB0YWluICovCisJcmV0dXJuIGFoY2lfcG9ydF9yZXN1bWUoYXApOworfQorCitzdGF0aWMgaW50IGFjYXJkX2FoY2lfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCit7CisJc3RhdGljIGludCBwcmludGVkX3ZlcnNpb247CisJdW5zaWduZWQgaW50IGJvYXJkX2lkID0gZW50LT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBwaSA9IGFjYXJkX2FoY2lfcG9ydF9pbmZvW2JvYXJkX2lkXTsKKwljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZwaSwgTlVMTCB9OworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IGFoY2lfaG9zdF9wcml2ICpocHJpdjsKKwlzdHJ1Y3QgYXRhX2hvc3QgKmhvc3Q7CisJaW50IG5fcG9ydHMsIGksIHJjOworCisJVlBSSU5USygiRU5URVJcbiIpOworCisJV0FSTl9PTihBVEFfTUFYX1FVRVVFID4gQUhDSV9NQVhfQ01EUyk7CisKKwlpZiAoIXByaW50ZWRfdmVyc2lvbisrKQorCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZwZGV2LT5kZXYsICJ2ZXJzaW9uICIgRFJWX1ZFUlNJT04gIlxuIik7CisKKwkvKiBhY3F1aXJlIHJlc291cmNlcyAqLworCXJjID0gcGNpbV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJLyogQUhDSSBjb250cm9sbGVycyBvZnRlbiBpbXBsZW1lbnQgU0ZGIGNvbXBhdGlibGUgaW50ZXJmYWNlLgorCSAqIEdyYWIgYWxsIFBDSSBCQVJzIGp1c3QgaW4gY2FzZS4KKwkgKi8KKwlyYyA9IHBjaW1faW9tYXBfcmVnaW9uc19yZXF1ZXN0X2FsbChwZGV2LCAxIDw8IEFIQ0lfUENJX0JBUiwgRFJWX05BTUUpOworCWlmIChyYyA9PSAtRUJVU1kpCisJCXBjaW1fcGluX2RldmljZShwZGV2KTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCWhwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpocHJpdiksIEdGUF9LRVJORUwpOworCWlmICghaHByaXYpCisJCXJldHVybiAtRU5PTUVNOworCWhwcml2LT5mbGFncyB8PSAodW5zaWduZWQgbG9uZylwaS5wcml2YXRlX2RhdGE7CisKKwlpZiAoIShocHJpdi0+ZmxhZ3MgJiBBSENJX0hGTEFHX05PX01TSSkpCisJCXBjaV9lbmFibGVfbXNpKHBkZXYpOworCisJaHByaXYtPm1taW8gPSBwY2ltX2lvbWFwX3RhYmxlKHBkZXYpW0FIQ0lfUENJX0JBUl07CisKKwkvKiBzYXZlIGluaXRpYWwgY29uZmlnICovCisJYWhjaV9zYXZlX2luaXRpYWxfY29uZmlnKCZwZGV2LT5kZXYsIGhwcml2LCAwLCAwKTsKKworCS8qIHByZXBhcmUgaG9zdCAqLworCWlmIChocHJpdi0+Y2FwICYgSE9TVF9DQVBfTkNRKQorCQlwaS5mbGFncyB8PSBBVEFfRkxBR19OQ1E7CisKKwlpZiAoaHByaXYtPmNhcCAmIEhPU1RfQ0FQX1BNUCkKKwkJcGkuZmxhZ3MgfD0gQVRBX0ZMQUdfUE1QOworCisJYWhjaV9zZXRfZW1fbWVzc2FnZXMoaHByaXYsICZwaSk7CisKKwkvKiBDQVAuTlAgc29tZXRpbWVzIGluZGljYXRlIHRoZSBpbmRleCBvZiB0aGUgbGFzdCBlbmFibGVkCisJICogcG9ydCwgYXQgb3RoZXIgdGltZXMsIHRoYXQgb2YgdGhlIGxhc3QgcG9zc2libGUgcG9ydCwgc28KKwkgKiBkZXRlcm1pbmluZyB0aGUgbWF4aW11bSBwb3J0IG51bWJlciByZXF1aXJlcyBsb29raW5nIGF0CisJICogYm90aCBDQVAuTlAgYW5kIHBvcnRfbWFwLgorCSAqLworCW5fcG9ydHMgPSBtYXgoYWhjaV9ucl9wb3J0cyhocHJpdi0+Y2FwKSwgZmxzKGhwcml2LT5wb3J0X21hcCkpOworCisJaG9zdCA9IGF0YV9ob3N0X2FsbG9jX3BpbmZvKCZwZGV2LT5kZXYsIHBwaSwgbl9wb3J0cyk7CisJaWYgKCFob3N0KQorCQlyZXR1cm4gLUVOT01FTTsKKwlob3N0LT5wcml2YXRlX2RhdGEgPSBocHJpdjsKKworCWlmICghKGhwcml2LT5jYXAgJiBIT1NUX0NBUF9TU1MpIHx8IGFoY2lfaWdub3JlX3NzcykKKwkJaG9zdC0+ZmxhZ3MgfD0gQVRBX0hPU1RfUEFSQUxMRUxfU0NBTjsKKwllbHNlCisJCXByaW50ayhLRVJOX0lORk8gImFoY2k6IFNTUyBmbGFnIHNldCwgcGFyYWxsZWwgYnVzIHNjYW4gZGlzYWJsZWRcbiIpOworCisJZm9yIChpID0gMDsgaSA8IGhvc3QtPm5fcG9ydHM7IGkrKykgeworCQlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gaG9zdC0+cG9ydHNbaV07CisKKwkJYXRhX3BvcnRfcGJhcl9kZXNjKGFwLCBBSENJX1BDSV9CQVIsIC0xLCAiYWJhciIpOworCQlhdGFfcG9ydF9wYmFyX2Rlc2MoYXAsIEFIQ0lfUENJX0JBUiwKKwkJCQkgICAweDEwMCArIGFwLT5wb3J0X25vICogMHg4MCwgInBvcnQiKTsKKworCQkvKiBzZXQgaW5pdGlhbCBsaW5rIHBtIHBvbGljeSAqLworCQkvKgorCQlhcC0+cG1fcG9saWN5ID0gTk9UX0FWQUlMQUJMRTsKKwkJKi8KKwkJLyogZGlzYWJsZWQvbm90LWltcGxlbWVudGVkIHBvcnQgKi8KKwkJaWYgKCEoaHByaXYtPnBvcnRfbWFwICYgKDEgPDwgaSkpKQorCQkJYXAtPm9wcyA9ICZhdGFfZHVtbXlfcG9ydF9vcHM7CisJfQorCisJLyogaW5pdGlhbGl6ZSBhZGFwdGVyICovCisJcmMgPSBhY2FyZF9haGNpX2NvbmZpZ3VyZV9kbWFfbWFza3MocGRldiwgaHByaXYtPmNhcCAmIEhPU1RfQ0FQXzY0KTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCXJjID0gYWhjaV9yZXNldF9jb250cm9sbGVyKGhvc3QpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJYWhjaV9pbml0X2NvbnRyb2xsZXIoaG9zdCk7CisJYWNhcmRfYWhjaV9wY2lfcHJpbnRfaW5mbyhob3N0KTsKKworCXBjaV9zZXRfbWFzdGVyKHBkZXYpOworCXJldHVybiBhdGFfaG9zdF9hY3RpdmF0ZShob3N0LCBwZGV2LT5pcnEsIGFoY2lfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKKwkJCQkgJmFjYXJkX2FoY2lfc2h0KTsKK30KKworc3RhdGljIGludCBfX2luaXQgYWNhcmRfYWhjaV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmFjYXJkX2FoY2lfcGNpX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhY2FyZF9haGNpX2V4aXQodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmFjYXJkX2FoY2lfcGNpX2RyaXZlcik7Cit9CisKK01PRFVMRV9BVVRIT1IoIkplZmYgR2FyemlrIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkFDYXJkIEFIQ0kgU0FUQSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYWNhcmRfYWhjaV9wY2lfdGJsKTsKK01PRFVMRV9WRVJTSU9OKERSVl9WRVJTSU9OKTsKKworbW9kdWxlX2luaXQoYWNhcmRfYWhjaV9pbml0KTsKK21vZHVsZV9leGl0KGFjYXJkX2FoY2lfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9haGNpLmggYi9kcml2ZXJzL2F0YS9haGNpLmgKaW5kZXggMzI5Y2JiYi4uM2U2MDZjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvYWhjaS5oCisrKyBiL2RyaXZlcnMvYXRhL2FoY2kuaApAQCAtMzExLDYgKzMxMSw4IEBACiAKIGV4dGVybiBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBhaGNpX29wczsKIAordm9pZCBhaGNpX2ZpbGxfY21kX3Nsb3Qoc3RydWN0IGFoY2lfcG9ydF9wcml2ICpwcCwgdW5zaWduZWQgaW50IHRhZywKKwkJCXUzMiBvcHRzKTsKIHZvaWQgYWhjaV9zYXZlX2luaXRpYWxfY29uZmlnKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCSAgICAgIHN0cnVjdCBhaGNpX2hvc3RfcHJpdiAqaHByaXYsCiAJCQkgICAgICB1bnNpZ25lZCBpbnQgZm9yY2VfcG9ydF9tYXAsCkBAIC0zMjYsNiArMzI4LDcgQEAKIHZvaWQgYWhjaV9zdGFydF9lbmdpbmUoc3RydWN0IGF0YV9wb3J0ICphcCk7CiBpbnQgYWhjaV9jaGVja19yZWFkeShzdHJ1Y3QgYXRhX2xpbmsgKmxpbmspOwogaW50IGFoY2lfa2lja19lbmdpbmUoc3RydWN0IGF0YV9wb3J0ICphcCk7CitpbnQgYWhjaV9wb3J0X3Jlc3VtZShzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKIHZvaWQgYWhjaV9zZXRfZW1fbWVzc2FnZXMoc3RydWN0IGFoY2lfaG9zdF9wcml2ICpocHJpdiwKIAkJCSAgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBpKTsKIGludCBhaGNpX3Jlc2V0X2VtKHN0cnVjdCBhdGFfaG9zdCAqaG9zdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9saWJhaGNpLmMgYi9kcml2ZXJzL2F0YS9saWJhaGNpLmMKaW5kZXggZWJjMDhkNi4uMjZkNDUyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvbGliYWhjaS5jCisrKyBiL2RyaXZlcnMvYXRhL2xpYmFoY2kuYwpAQCAtODcsMTAgKzg3LDcgQEAKIHN0YXRpYyB2b2lkIGFoY2lfcG9zdHJlc2V0KHN0cnVjdCBhdGFfbGluayAqbGluaywgdW5zaWduZWQgaW50ICpjbGFzcyk7CiBzdGF0aWMgdm9pZCBhaGNpX2Vycm9yX2hhbmRsZXIoc3RydWN0IGF0YV9wb3J0ICphcCk7CiBzdGF0aWMgdm9pZCBhaGNpX3Bvc3RfaW50ZXJuYWxfY21kKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOwotc3RhdGljIGludCBhaGNpX3BvcnRfcmVzdW1lKHN0cnVjdCBhdGFfcG9ydCAqYXApOwogc3RhdGljIHZvaWQgYWhjaV9kZXZfY29uZmlnKHN0cnVjdCBhdGFfZGV2aWNlICpkZXYpOwotc3RhdGljIHZvaWQgYWhjaV9maWxsX2NtZF9zbG90KHN0cnVjdCBhaGNpX3BvcnRfcHJpdiAqcHAsIHVuc2lnbmVkIGludCB0YWcsCi0JCQkgICAgICAgdTMyIG9wdHMpOwogI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCBhaGNpX3BvcnRfc3VzcGVuZChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBwbV9tZXNzYWdlX3QgbWVzZyk7CiAjZW5kaWYKQEAgLTExMzMsOCArMTEzMCw4IEBACiAJcmV0dXJuIGF0YV9kZXZfY2xhc3NpZnkoJnRmKTsKIH0KIAotc3RhdGljIHZvaWQgYWhjaV9maWxsX2NtZF9zbG90KHN0cnVjdCBhaGNpX3BvcnRfcHJpdiAqcHAsIHVuc2lnbmVkIGludCB0YWcsCi0JCQkgICAgICAgdTMyIG9wdHMpCit2b2lkIGFoY2lfZmlsbF9jbWRfc2xvdChzdHJ1Y3QgYWhjaV9wb3J0X3ByaXYgKnBwLCB1bnNpZ25lZCBpbnQgdGFnLAorCQkJdTMyIG9wdHMpCiB7CiAJZG1hX2FkZHJfdCBjbWRfdGJsX2RtYTsKIApAQCAtMTE0NSw2ICsxMTQyLDcgQEAKIAlwcC0+Y21kX3Nsb3RbdGFnXS50YmxfYWRkciA9IGNwdV90b19sZTMyKGNtZF90YmxfZG1hICYgMHhmZmZmZmZmZik7CiAJcHAtPmNtZF9zbG90W3RhZ10udGJsX2FkZHJfaGkgPSBjcHVfdG9fbGUzMigoY21kX3RibF9kbWEgPj4gMTYpID4+IDE2KTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGFoY2lfZmlsbF9jbWRfc2xvdCk7CiAKIGludCBhaGNpX2tpY2tfZW5naW5lKHN0cnVjdCBhdGFfcG9ydCAqYXApCiB7CkBAIC0xOTE4LDcgKzE5MTYsNyBAQAogCXdyaXRlbChwcC0+aW50cl9tYXNrLCBwb3J0X21taW8gKyBQT1JUX0lSUV9NQVNLKTsKIH0KIAotc3RhdGljIGludCBhaGNpX3BvcnRfcmVzdW1lKHN0cnVjdCBhdGFfcG9ydCAqYXApCitpbnQgYWhjaV9wb3J0X3Jlc3VtZShzdHJ1Y3QgYXRhX3BvcnQgKmFwKQogewogCWFoY2lfcG93ZXJfdXAoYXApOwogCWFoY2lfc3RhcnRfcG9ydChhcCk7CkBAIC0xOTMwLDYgKzE5MjgsNyBAQAogCiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChhaGNpX3BvcnRfcmVzdW1lKTsKIAogI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCBhaGNpX3BvcnRfc3VzcGVuZChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBwbV9tZXNzYWdlX3QgbWVzZykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmMgYi9kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jCmluZGV4IGYyM2Q2ZDQuLjBhNmE5NDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmMKKysrIGIvZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYwpAQCAtNjEyOCw3ICs2MTI4LDcgQEAKIAkvKiBpdCBiZXR0ZXIgYmUgZGVhZCBub3cgKi8KIAlXQVJOX09OKCEoYXAtPnBmbGFncyAmIEFUQV9QRkxBR19VTkxPQURFRCkpOwogCi0JY2FuY2VsX3JlYXJtaW5nX2RlbGF5ZWRfd29yaygmYXAtPmhvdHBsdWdfdGFzayk7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZhcC0+aG90cGx1Z190YXNrKTsKIAogIHNraXBfZWg6CiAJaWYgKGFwLT5wbXBfbGluaykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvbGliYXRhLXNjc2kuYyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1zY3NpLmMKaW5kZXggNjZhYTRiZS4uNWRlZmM3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvbGliYXRhLXNjc2kuYworKysgYi9kcml2ZXJzL2F0YS9saWJhdGEtc2NzaS5jCkBAIC0zNDYsMTIgKzM0NiwxMSBAQAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKGF0YV9jb21tb25fc2Rldl9hdHRycyk7CiAKLXN0YXRpYyB2b2lkIGF0YV9zY3NpX2ludmFsaWRfZmllbGQoc3RydWN0IHNjc2lfY21uZCAqY21kLAotCQkJCSAgIHZvaWQgKCpkb25lKShzdHJ1Y3Qgc2NzaV9jbW5kICopKQorc3RhdGljIHZvaWQgYXRhX3Njc2lfaW52YWxpZF9maWVsZChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCiB7CiAJYXRhX3Njc2lfc2V0X3NlbnNlKGNtZCwgSUxMRUdBTF9SRVFVRVNULCAweDI0LCAweDApOwogCS8qICJJbnZhbGlkIGZpZWxkIGluIGNiZCIgKi8KLQlkb25lKGNtZCk7CisJY21kLT5zY3NpX2RvbmUoY21kKTsKIH0KIAogLyoqCkBAIC03MTksNyArNzE4LDYgQEAKICAqCWF0YV9zY3NpX3FjX25ldyAtIGFjcXVpcmUgbmV3IGF0YV9xdWV1ZWRfY21kIHJlZmVyZW5jZQogICoJQGRldjogQVRBIGRldmljZSB0byB3aGljaCB0aGUgbmV3IGNvbW1hbmQgaXMgYXR0YWNoZWQKICAqCUBjbWQ6IFNDU0kgY29tbWFuZCB0aGF0IG9yaWdpbmF0ZWQgdGhpcyBBVEEgY29tbWFuZAotICoJQGRvbmU6IFNDU0kgY29tbWFuZCBjb21wbGV0aW9uIGZ1bmN0aW9uCiAgKgogICoJT2J0YWluIGEgcmVmZXJlbmNlIHRvIGFuIHVudXNlZCBhdGFfcXVldWVkX2NtZCBzdHJ1Y3R1cmUsCiAgKgl3aGljaCBpcyB0aGUgYmFzaWMgbGliYXRhIHN0cnVjdHVyZSByZXByZXNlbnRpbmcgYSBzaW5nbGUKQEAgLTczNiwyMSArNzM0LDIwIEBACiAgKglDb21tYW5kIGFsbG9jYXRlZCwgb3IgJU5VTEwgaWYgbm9uZSBhdmFpbGFibGUuCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKmF0YV9zY3NpX3FjX25ldyhzdHJ1Y3QgYXRhX2RldmljZSAqZGV2LAotCQkJCQkgICAgICBzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsCi0JCQkJCSAgICAgIHZvaWQgKCpkb25lKShzdHJ1Y3Qgc2NzaV9jbW5kICopKQorCQkJCQkgICAgICBzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCiB7CiAJc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYzsKIAogCXFjID0gYXRhX3FjX25ld19pbml0KGRldik7CiAJaWYgKHFjKSB7CiAJCXFjLT5zY3NpY21kID0gY21kOwotCQlxYy0+c2NzaWRvbmUgPSBkb25lOworCQlxYy0+c2NzaWRvbmUgPSBjbWQtPnNjc2lfZG9uZTsKIAogCQlxYy0+c2cgPSBzY3NpX3NnbGlzdChjbWQpOwogCQlxYy0+bl9lbGVtID0gc2NzaV9zZ19jb3VudChjbWQpOwogCX0gZWxzZSB7CiAJCWNtZC0+cmVzdWx0ID0gKERJRF9PSyA8PCAxNikgfCAoUVVFVUVfRlVMTCA8PCAxKTsKLQkJZG9uZShjbWQpOworCQljbWQtPnNjc2lfZG9uZShjbWQpOwogCX0KIAogCXJldHVybiBxYzsKQEAgLTE3MzUsNyArMTczMiw2IEBACiAgKglhdGFfc2NzaV90cmFuc2xhdGUgLSBUcmFuc2xhdGUgdGhlbiBpc3N1ZSBTQ1NJIGNvbW1hbmQgdG8gQVRBIGRldmljZQogICoJQGRldjogQVRBIGRldmljZSB0byB3aGljaCB0aGUgY29tbWFuZCBpcyBhZGRyZXNzZWQKICAqCUBjbWQ6IFNDU0kgY29tbWFuZCB0byBleGVjdXRlCi0gKglAZG9uZTogU0NTSSBjb21tYW5kIGNvbXBsZXRpb24gZnVuY3Rpb24KICAqCUB4bGF0X2Z1bmM6IEFjdG9yIHdoaWNoIHRyYW5zbGF0ZXMgQGNtZCB0byBhbiBBVEEgdGFza2ZpbGUKICAqCiAgKglPdXIgLT5xdWV1ZWNvbW1hbmQoKSBmdW5jdGlvbiBoYXMgZGVjaWRlZCB0aGF0IHRoZSBTQ1NJCkBAIC0xNzU5LDcgKzE3NTUsNiBAQAogICoJbmVlZHMgdG8gYmUgZGVmZXJyZWQuCiAgKi8KIHN0YXRpYyBpbnQgYXRhX3Njc2lfdHJhbnNsYXRlKHN0cnVjdCBhdGFfZGV2aWNlICpkZXYsIHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwKLQkJCSAgICAgIHZvaWQgKCpkb25lKShzdHJ1Y3Qgc2NzaV9jbW5kICopLAogCQkJICAgICAgYXRhX3hsYXRfZnVuY190IHhsYXRfZnVuYykKIHsKIAlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gZGV2LT5saW5rLT5hcDsKQEAgLTE3NjgsNyArMTc2Myw3IEBACiAKIAlWUFJJTlRLKCJFTlRFUlxuIik7CiAKLQlxYyA9IGF0YV9zY3NpX3FjX25ldyhkZXYsIGNtZCwgZG9uZSk7CisJcWMgPSBhdGFfc2NzaV9xY19uZXcoZGV2LCBjbWQpOwogCWlmICghcWMpCiAJCWdvdG8gZXJyX21lbTsKIApAQCAtMTgwNCwxNCArMTc5OSwxNCBAQAogCiBlYXJseV9maW5pc2g6CiAJYXRhX3FjX2ZyZWUocWMpOwotCXFjLT5zY3NpZG9uZShjbWQpOworCWNtZC0+c2NzaV9kb25lKGNtZCk7CiAJRFBSSU5USygiRVhJVCAtIGVhcmx5IGZpbmlzaCAoZ29vZCBvciBlcnJvcilcbiIpOwogCXJldHVybiAwOwogCiBlcnJfZGlkOgogCWF0YV9xY19mcmVlKHFjKTsKIAljbWQtPnJlc3VsdCA9IChESURfRVJST1IgPDwgMTYpOwotCXFjLT5zY3NpZG9uZShjbWQpOworCWNtZC0+c2NzaV9kb25lKGNtZCk7CiBlcnJfbWVtOgogCURQUklOVEsoIkVYSVQgLSBpbnRlcm5hbFxuIik7CiAJcmV0dXJuIDA7CkBAIC0zMTE2LDcgKzMxMTEsNiBAQAogfQogCiBzdGF0aWMgaW5saW5lIGludCBfX2F0YV9zY3NpX3F1ZXVlY21kKHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQsCi0JCQkJICAgICAgdm9pZCAoKmRvbmUpKHN0cnVjdCBzY3NpX2NtbmQgKiksCiAJCQkJICAgICAgc3RydWN0IGF0YV9kZXZpY2UgKmRldikKIHsKIAl1OCBzY3NpX29wID0gc2NtZC0+Y21uZFswXTsKQEAgLTMxNTAsOSArMzE0NCw5IEBACiAJfQogCiAJaWYgKHhsYXRfZnVuYykKLQkJcmMgPSBhdGFfc2NzaV90cmFuc2xhdGUoZGV2LCBzY21kLCBkb25lLCB4bGF0X2Z1bmMpOworCQlyYyA9IGF0YV9zY3NpX3RyYW5zbGF0ZShkZXYsIHNjbWQsIHhsYXRfZnVuYyk7CiAJZWxzZQotCQlhdGFfc2NzaV9zaW11bGF0ZShkZXYsIHNjbWQsIGRvbmUpOworCQlhdGFfc2NzaV9zaW11bGF0ZShkZXYsIHNjbWQpOwogCiAJcmV0dXJuIHJjOwogCkBAIC0zMTYwLDcgKzMxNTQsNyBAQAogCURQUklOVEsoImJhZCBDREIgbGVuPSV1LCBzY3NpX29wPTB4JTAyeCwgbWF4PSV1XG4iLAogCQlzY21kLT5jbWRfbGVuLCBzY3NpX29wLCBkZXYtPmNkYl9sZW4pOwogCXNjbWQtPnJlc3VsdCA9IERJRF9FUlJPUiA8PCAxNjsKLQlkb25lKHNjbWQpOworCXNjbWQtPnNjc2lfZG9uZShzY21kKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzE5OSw3ICszMTkzLDcgQEAKIAogCWRldiA9IGF0YV9zY3NpX2ZpbmRfZGV2KGFwLCBzY3NpZGV2KTsKIAlpZiAobGlrZWx5KGRldikpCi0JCXJjID0gX19hdGFfc2NzaV9xdWV1ZWNtZChjbWQsIGNtZC0+c2NzaV9kb25lLCBkZXYpOworCQlyYyA9IF9fYXRhX3Njc2lfcXVldWVjbWQoY21kLCBkZXYpOwogCWVsc2UgewogCQljbWQtPnJlc3VsdCA9IChESURfQkFEX1RBUkdFVCA8PCAxNik7CiAJCWNtZC0+c2NzaV9kb25lKGNtZCk7CkBAIC0zMjE0LDcgKzMyMDgsNiBAQAogICoJYXRhX3Njc2lfc2ltdWxhdGUgLSBzaW11bGF0ZSBTQ1NJIGNvbW1hbmQgb24gQVRBIGRldmljZQogICoJQGRldjogdGhlIHRhcmdldCBkZXZpY2UKICAqCUBjbWQ6IFNDU0kgY29tbWFuZCBiZWluZyBzZW50IHRvIGRldmljZS4KLSAqCUBkb25lOiBTQ1NJIGNvbW1hbmQgY29tcGxldGlvbiBmdW5jdGlvbi4KICAqCiAgKglJbnRlcnByZXRzIGFuZCBkaXJlY3RseSBleGVjdXRlcyBhIHNlbGVjdCBsaXN0IG9mIFNDU0kgY29tbWFuZHMKICAqCXRoYXQgY2FuIGJlIGhhbmRsZWQgaW50ZXJuYWxseS4KQEAgLTMyMjMsOCArMzIxNiw3IEBACiAgKglzcGluX2xvY2tfaXJxc2F2ZShob3N0IGxvY2spCiAgKi8KIAotdm9pZCBhdGFfc2NzaV9zaW11bGF0ZShzdHJ1Y3QgYXRhX2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsCi0JCSAgICAgIHZvaWQgKCpkb25lKShzdHJ1Y3Qgc2NzaV9jbW5kICopKQordm9pZCBhdGFfc2NzaV9zaW11bGF0ZShzdHJ1Y3QgYXRhX2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCiB7CiAJc3RydWN0IGF0YV9zY3NpX2FyZ3MgYXJnczsKIAljb25zdCB1OCAqc2NzaWNtZCA9IGNtZC0+Y21uZDsKQEAgLTMyMzMsMTcgKzMyMjUsMTcgQEAKIAlhcmdzLmRldiA9IGRldjsKIAlhcmdzLmlkID0gZGV2LT5pZDsKIAlhcmdzLmNtZCA9IGNtZDsKLQlhcmdzLmRvbmUgPSBkb25lOworCWFyZ3MuZG9uZSA9IGNtZC0+c2NzaV9kb25lOwogCiAJc3dpdGNoKHNjc2ljbWRbMF0pIHsKIAkvKiBUT0RPOiB3b3J0aCBpbXByb3Zpbmc/ICovCiAJY2FzZSBGT1JNQVRfVU5JVDoKLQkJYXRhX3Njc2lfaW52YWxpZF9maWVsZChjbWQsIGRvbmUpOworCQlhdGFfc2NzaV9pbnZhbGlkX2ZpZWxkKGNtZCk7CiAJCWJyZWFrOwogCiAJY2FzZSBJTlFVSVJZOgogCQlpZiAoc2NzaWNtZFsxXSAmIDIpCSAgICAgICAgICAgLyogaXMgQ21kRHQgc2V0PyAgKi8KLQkJCWF0YV9zY3NpX2ludmFsaWRfZmllbGQoY21kLCBkb25lKTsKKwkJCWF0YV9zY3NpX2ludmFsaWRfZmllbGQoY21kKTsKIAkJZWxzZSBpZiAoKHNjc2ljbWRbMV0gJiAxKSA9PSAwKSAgICAvKiBpcyBFVlBEIGNsZWFyPyAqLwogCQkJYXRhX3Njc2lfcmJ1Zl9maWxsKCZhcmdzLCBhdGFfc2NzaW9wX2lucV9zdGQpOwogCQllbHNlIHN3aXRjaCAoc2NzaWNtZFsyXSkgewpAQCAtMzI2OSw3ICszMjYxLDcgQEAKIAkJCWF0YV9zY3NpX3JidWZfZmlsbCgmYXJncywgYXRhX3Njc2lvcF9pbnFfYjIpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlhdGFfc2NzaV9pbnZhbGlkX2ZpZWxkKGNtZCwgZG9uZSk7CisJCQlhdGFfc2NzaV9pbnZhbGlkX2ZpZWxkKGNtZCk7CiAJCQlicmVhazsKIAkJfQogCQlicmVhazsKQEAgLTMyODEsNyArMzI3Myw3IEBACiAKIAljYXNlIE1PREVfU0VMRUNUOgkvKiB1bmNvbmRpdGlvbmFsbHkgcmV0dXJuICovCiAJY2FzZSBNT0RFX1NFTEVDVF8xMDoJLyogYmFkLWZpZWxkLWluLWNkYiAqLwotCQlhdGFfc2NzaV9pbnZhbGlkX2ZpZWxkKGNtZCwgZG9uZSk7CisJCWF0YV9zY3NpX2ludmFsaWRfZmllbGQoY21kKTsKIAkJYnJlYWs7CiAKIAljYXNlIFJFQURfQ0FQQUNJVFk6CkBAIC0zMjkyLDcgKzMyODQsNyBAQAogCQlpZiAoKHNjc2ljbWRbMV0gJiAweDFmKSA9PSBTQUlfUkVBRF9DQVBBQ0lUWV8xNikKIAkJCWF0YV9zY3NpX3JidWZfZmlsbCgmYXJncywgYXRhX3Njc2lvcF9yZWFkX2NhcCk7CiAJCWVsc2UKLQkJCWF0YV9zY3NpX2ludmFsaWRfZmllbGQoY21kLCBkb25lKTsKKwkJCWF0YV9zY3NpX2ludmFsaWRfZmllbGQoY21kKTsKIAkJYnJlYWs7CiAKIAljYXNlIFJFUE9SVF9MVU5TOgpAQCAtMzMwMiw3ICszMjk0LDcgQEAKIAljYXNlIFJFUVVFU1RfU0VOU0U6CiAJCWF0YV9zY3NpX3NldF9zZW5zZShjbWQsIDAsIDAsIDApOwogCQljbWQtPnJlc3VsdCA9IChEUklWRVJfU0VOU0UgPDwgMjQpOwotCQlkb25lKGNtZCk7CisJCWNtZC0+c2NzaV9kb25lKGNtZCk7CiAJCWJyZWFrOwogCiAJLyogaWYgd2UgcmVhY2ggdGhpcywgdGhlbiB3cml0ZWJhY2sgY2FjaGluZyBpcyBkaXNhYmxlZCwKQEAgLTMzMjQsMTQgKzMzMTYsMTQgQEAKIAkJaWYgKCh0bXA4ID09IDB4NCkgJiYgKCFzY3NpY21kWzNdKSAmJiAoIXNjc2ljbWRbNF0pKQogCQkJYXRhX3Njc2lfcmJ1Zl9maWxsKCZhcmdzLCBhdGFfc2NzaW9wX25vb3ApOwogCQllbHNlCi0JCQlhdGFfc2NzaV9pbnZhbGlkX2ZpZWxkKGNtZCwgZG9uZSk7CisJCQlhdGFfc2NzaV9pbnZhbGlkX2ZpZWxkKGNtZCk7CiAJCWJyZWFrOwogCiAJLyogYWxsIG90aGVyIGNvbW1hbmRzICovCiAJZGVmYXVsdDoKIAkJYXRhX3Njc2lfc2V0X3NlbnNlKGNtZCwgSUxMRUdBTF9SRVFVRVNULCAweDIwLCAweDApOwogCQkvKiAiSW52YWxpZCBjb21tYW5kIG9wZXJhdGlvbiBjb2RlIiAqLwotCQlkb25lKGNtZCk7CisJCWNtZC0+c2NzaV9kb25lKGNtZCk7CiAJCWJyZWFrOwogCX0KIH0KQEAgLTM4NTgsNyArMzg1MCw2IEBACiAvKioKICAqCWF0YV9zYXNfcXVldWVjbWQgLSBJc3N1ZSBTQ1NJIGNkYiB0byBsaWJhdGEtbWFuYWdlZCBkZXZpY2UKICAqCUBjbWQ6IFNDU0kgY29tbWFuZCB0byBiZSBzZW50Ci0gKglAZG9uZTogQ29tcGxldGlvbiBmdW5jdGlvbiwgY2FsbGVkIHdoZW4gY29tbWFuZCBpcyBjb21wbGV0ZQogICoJQGFwOglBVEEgcG9ydCB0byB3aGljaCB0aGUgY29tbWFuZCBpcyBiZWluZyBzZW50CiAgKgogICoJUkVUVVJOUzoKQEAgLTM4NjYsMTggKzM4NTcsMTcgQEAKICAqCTAgb3RoZXJ3aXNlLgogICovCiAKLWludCBhdGFfc2FzX3F1ZXVlY21kKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwgdm9pZCAoKmRvbmUpKHN0cnVjdCBzY3NpX2NtbmQgKiksCi0JCSAgICAgc3RydWN0IGF0YV9wb3J0ICphcCkKK2ludCBhdGFfc2FzX3F1ZXVlY21kKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwgc3RydWN0IGF0YV9wb3J0ICphcCkKIHsKIAlpbnQgcmMgPSAwOwogCiAJYXRhX3Njc2lfZHVtcF9jZGIoYXAsIGNtZCk7CiAKIAlpZiAobGlrZWx5KGF0YV9kZXZfZW5hYmxlZChhcC0+bGluay5kZXZpY2UpKSkKLQkJcmMgPSBfX2F0YV9zY3NpX3F1ZXVlY21kKGNtZCwgZG9uZSwgYXAtPmxpbmsuZGV2aWNlKTsKKwkJcmMgPSBfX2F0YV9zY3NpX3F1ZXVlY21kKGNtZCwgYXAtPmxpbmsuZGV2aWNlKTsKIAllbHNlIHsKIAkJY21kLT5yZXN1bHQgPSAoRElEX0JBRF9UQVJHRVQgPDwgMTYpOwotCQlkb25lKGNtZCk7CisJCWNtZC0+c2NzaV9kb25lKGNtZCk7CiAJfQogCXJldHVybiByYzsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2xpYmF0YS1zZmYuYyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1zZmYuYwppbmRleCA0ODQ2OTdmLi5hZjYxNDFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9saWJhdGEtc2ZmLmMKKysrIGIvZHJpdmVycy9hdGEvbGliYXRhLXNmZi5jCkBAIC0xMzIwLDcgKzEzMjAsNyBAQAogewogCURQUklOVEsoIkVOVEVSXG4iKTsKIAotCWNhbmNlbF9yZWFybWluZ19kZWxheWVkX3dvcmsoJmFwLT5zZmZfcGlvX3Rhc2spOworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmYXAtPnNmZl9waW9fdGFzayk7CiAJYXAtPmhzbV90YXNrX3N0YXRlID0gSFNNX1NUX0lETEU7CiAKIAlpZiAoYXRhX21zZ19jdGwoYXApKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9ocHQzNjYuYyBiL2RyaXZlcnMvYXRhL3BhdGFfaHB0MzY2LmMKaW5kZXggNzY4ODg2OC4uZDdlNTdkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9ocHQzNjYuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2hwdDM2Ni5jCkBAIC0yNSw3ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvbGliYXRhLmg+CiAKICNkZWZpbmUgRFJWX05BTUUJInBhdGFfaHB0MzY2IgotI2RlZmluZSBEUlZfVkVSU0lPTgkiMC42LjgiCisjZGVmaW5lIERSVl9WRVJTSU9OCSIwLjYuOSIKIAogc3RydWN0IGhwdF9jbG9jayB7CiAJdTgJeGZlcl9tb2RlOwpAQCAtMTEwLDE4ICsxMTAsMjMgQEAKIAl7CTAsCQkweDAxMjA4NTg1CX0KIH07CiAKLXN0YXRpYyBjb25zdCBjaGFyICpiYWRfYXRhMzNbXSA9IHsKLQkiTWF4dG9yIDkyNzIwVTgiLCAiTWF4dG9yIDkyMDQwVTYiLCAiTWF4dG9yIDkxMzYwVTQiLCAiTWF4dG9yIDkxMDIwVTMiLCAiTWF4dG9yIDkwODQ1VTMiLCAiTWF4dG9yIDkwNjUwVTIiLAotCSJNYXh0b3IgOTEzNjBEOCIsICJNYXh0b3IgOTExOTBENyIsICJNYXh0b3IgOTEwMjBENiIsICJNYXh0b3IgOTA4NDVENSIsICJNYXh0b3IgOTA2ODBENCIsICJNYXh0b3IgOTA1MTBEMyIsICJNYXh0b3IgOTAzNDBEMiIsCi0JIk1heHRvciA5MTE1MkQ4IiwgIk1heHRvciA5MTAwOEQ3IiwgIk1heHRvciA5MDg0NUQ2IiwgIk1heHRvciA5MDg0MEQ2IiwgIk1heHRvciA5MDcyMEQ1IiwgIk1heHRvciA5MDY0OEQ1IiwgIk1heHRvciA5MDU3NkQ0IiwKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYmFkX2F0YTMzW10gPSB7CisJIk1heHRvciA5MjcyMFU4IiwgIk1heHRvciA5MjA0MFU2IiwgIk1heHRvciA5MTM2MFU0IiwgIk1heHRvciA5MTAyMFUzIiwKKwkiTWF4dG9yIDkwODQ1VTMiLCAiTWF4dG9yIDkwNjUwVTIiLAorCSJNYXh0b3IgOTEzNjBEOCIsICJNYXh0b3IgOTExOTBENyIsICJNYXh0b3IgOTEwMjBENiIsICJNYXh0b3IgOTA4NDVENSIsCisJIk1heHRvciA5MDY4MEQ0IiwgIk1heHRvciA5MDUxMEQzIiwgIk1heHRvciA5MDM0MEQyIiwKKwkiTWF4dG9yIDkxMTUyRDgiLCAiTWF4dG9yIDkxMDA4RDciLCAiTWF4dG9yIDkwODQ1RDYiLCAiTWF4dG9yIDkwODQwRDYiLAorCSJNYXh0b3IgOTA3MjBENSIsICJNYXh0b3IgOTA2NDhENSIsICJNYXh0b3IgOTA1NzZENCIsCiAJIk1heHRvciA5MDUxMEQ0IiwKIAkiTWF4dG9yIDkwNDMyRDMiLCAiTWF4dG9yIDkwMjg4RDIiLCAiTWF4dG9yIDkwMjU2RDIiLAotCSJNYXh0b3IgOTEwMDBEOCIsICJNYXh0b3IgOTA5MTBEOCIsICJNYXh0b3IgOTA4NzVENyIsICJNYXh0b3IgOTA4NDBENyIsICJNYXh0b3IgOTA3NTBENiIsICJNYXh0b3IgOTA2MjVENSIsICJNYXh0b3IgOTA1MDBENCIsCi0JIk1heHRvciA5MTcyOEQ4IiwgIk1heHRvciA5MTUxMkQ3IiwgIk1heHRvciA5MTMwM0Q2IiwgIk1heHRvciA5MTA4MEQ1IiwgIk1heHRvciA5MDg0NUQ0IiwgIk1heHRvciA5MDY4MEQ0IiwgIk1heHRvciA5MDY0OEQzIiwgIk1heHRvciA5MDQzMkQyIiwKKwkiTWF4dG9yIDkxMDAwRDgiLCAiTWF4dG9yIDkwOTEwRDgiLCAiTWF4dG9yIDkwODc1RDciLCAiTWF4dG9yIDkwODQwRDciLAorCSJNYXh0b3IgOTA3NTBENiIsICJNYXh0b3IgOTA2MjVENSIsICJNYXh0b3IgOTA1MDBENCIsCisJIk1heHRvciA5MTcyOEQ4IiwgIk1heHRvciA5MTUxMkQ3IiwgIk1heHRvciA5MTMwM0Q2IiwgIk1heHRvciA5MTA4MEQ1IiwKKwkiTWF4dG9yIDkwODQ1RDQiLCAiTWF4dG9yIDkwNjgwRDQiLCAiTWF4dG9yIDkwNjQ4RDMiLCAiTWF4dG9yIDkwNDMyRDIiLAogCU5VTEwKIH07CiAKLXN0YXRpYyBjb25zdCBjaGFyICpiYWRfYXRhNjZfNFtdID0geworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBiYWRfYXRhNjZfNFtdID0gewogCSJJQk0tRFRMQS0zMDcwNzUiLAogCSJJQk0tRFRMQS0zMDcwNjAiLAogCSJJQk0tRFRMQS0zMDcwNDUiLApAQCAtMTQwLDEyICsxNDUsMTMgQEAKIAlOVUxMCiB9OwogCi1zdGF0aWMgY29uc3QgY2hhciAqYmFkX2F0YTY2XzNbXSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYmFkX2F0YTY2XzNbXSA9IHsKIAkiV0RDIEFDMzEwMjAwUiIsCiAJTlVMTAogfTsKIAotc3RhdGljIGludCBocHRfZG1hX2JsYWNrbGlzdGVkKGNvbnN0IHN0cnVjdCBhdGFfZGV2aWNlICpkZXYsIGNoYXIgKm1vZGVzdHIsIGNvbnN0IGNoYXIgKmxpc3RbXSkKK3N0YXRpYyBpbnQgaHB0X2RtYV9ibGFja2xpc3RlZChjb25zdCBzdHJ1Y3QgYXRhX2RldmljZSAqZGV2LCBjaGFyICptb2Rlc3RyLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKiBjb25zdCBsaXN0W10pCiB7CiAJdW5zaWduZWQgY2hhciBtb2RlbF9udW1bQVRBX0lEX1BST0RfTEVOICsgMV07CiAJaW50IGkgPSAwOwpAQCAtMjg4LDYgKzI5NCw3IEBACiBzdGF0aWMgdm9pZCBocHQzNnhfaW5pdF9jaGlwc2V0KHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJdTggZHJpdmVfZmFzdDsKKwogCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIFBDSV9DQUNIRV9MSU5FX1NJWkUsIChMMV9DQUNIRV9CWVRFUyAvIDQpKTsKIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBQQ0lfTEFURU5DWV9USU1FUiwgMHg3OCk7CiAJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgUENJX01JTl9HTlQsIDB4MDgpOwpAQCAtMzQ5LDE2ICszNTYsMTYgQEAKIAogCS8qIFBDSSBjbG9ja2luZyBkZXRlcm1pbmVzIHRoZSBBVEEgdGltaW5nIHZhbHVlcyB0byB1c2UgKi8KIAkvKiBpbmZvX2hwdDM2NiBpcyBzYWZlIGFnYWluc3QgcmUtZW50cnkgc28gd2UgY2FuIHNjcmliYmxlIG9uIGl0ICovCi0Jc3dpdGNoKChyZWcxICYgMHg3MDApID4+IDgpIHsKLQkJY2FzZSA5OgotCQkJaHByaXYgPSAmaHB0MzY2XzQwOwotCQkJYnJlYWs7Ci0JCWNhc2UgNToKLQkJCWhwcml2ID0gJmhwdDM2Nl8yNTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJaHByaXYgPSAmaHB0MzY2XzMzOwotCQkJYnJlYWs7CisJc3dpdGNoICgocmVnMSAmIDB4NzAwKSA+PiA4KSB7CisJY2FzZSA5OgorCQlocHJpdiA9ICZocHQzNjZfNDA7CisJCWJyZWFrOworCWNhc2UgNToKKwkJaHByaXYgPSAmaHB0MzY2XzI1OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlocHJpdiA9ICZocHQzNjZfMzM7CisJCWJyZWFrOwogCX0KIAkvKiBOb3cga2ljayBvZmYgQVRBIHNldCB1cCAqLwogCXJldHVybiBhdGFfcGNpX2JtZG1hX2luaXRfb25lKGRldiwgcHBpLCAmaHB0MzZ4X3NodCwgaHByaXYsIDApOwpAQCAtMzg1LDkgKzM5Miw5IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgaHB0MzZ4X3BjaV9kcml2ZXIgPSB7Ci0JLm5hbWUgCQk9IERSVl9OQU1FLAorCS5uYW1lCQk9IERSVl9OQU1FLAogCS5pZF90YWJsZQk9IGhwdDM2eCwKLQkucHJvYmUgCQk9IGhwdDM2eF9pbml0X29uZSwKKwkucHJvYmUJCT0gaHB0MzZ4X2luaXRfb25lLAogCS5yZW1vdmUJCT0gYXRhX3BjaV9yZW1vdmVfb25lLAogI2lmZGVmIENPTkZJR19QTQogCS5zdXNwZW5kCT0gYXRhX3BjaV9kZXZpY2Vfc3VzcGVuZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfaHB0Mzd4LmMgYi9kcml2ZXJzL2F0YS9wYXRhX2hwdDM3eC5jCmluZGV4IDlhZTRjMDguLmVmZGQxOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfaHB0Mzd4LmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9ocHQzN3guYwpAQCAtOCw3ICs4LDcgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OS0yMDAzCQlBbmRyZSBIZWRyaWNrIDxhbmRyZUBsaW51eC1pZGUub3JnPgogICogUG9ydGlvbnMgQ29weXJpZ2h0IChDKSAyMDAxCSAgICAgICAgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgogICogUG9ydGlvbnMgQ29weXJpZ2h0IChDKSAyMDAzCQlSZWQgSGF0IEluYwotICogUG9ydGlvbnMgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDkJTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChDKSAyMDA1LTIwMTAJTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgogICoKICAqIFRPRE8KICAqCUxvb2sgaW50byBlbmdpbmUgcmVzZXQgb24gdGltZW91dCBlcnJvcnMuIFNob3VsZCBub3QgYmUJcmVxdWlyZWQuCkBAIC0yNCw3ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvbGliYXRhLmg+CiAKICNkZWZpbmUgRFJWX05BTUUJInBhdGFfaHB0Mzd4IgotI2RlZmluZSBEUlZfVkVSU0lPTgkiMC42LjE1IgorI2RlZmluZSBEUlZfVkVSU0lPTgkiMC42LjE4IgogCiBzdHJ1Y3QgaHB0X2Nsb2NrIHsKIAl1OAl4ZmVyX3NwZWVkOwpAQCAtMjEwLDcgKzIxMCw3IEBACiB7CiAJc3RydWN0IGhwdF9jbG9jayAqY2xvY2tzID0gYXAtPmhvc3QtPnByaXZhdGVfZGF0YTsKIAotCXdoaWxlKGNsb2Nrcy0+eGZlcl9zcGVlZCkgeworCXdoaWxlIChjbG9ja3MtPnhmZXJfc3BlZWQpIHsKIAkJaWYgKGNsb2Nrcy0+eGZlcl9zcGVlZCA9PSBzcGVlZCkKIAkJCXJldHVybiBjbG9ja3MtPnRpbWluZzsKIAkJY2xvY2tzKys7CkBAIC0yMTksNyArMjE5LDggQEAKIAlyZXR1cm4gMHhmZmZmZmZmZlU7CS8qIHNpbGVuY2UgY29tcGlsZXIgd2FybmluZyAqLwogfQogCi1zdGF0aWMgaW50IGhwdF9kbWFfYmxhY2tsaXN0ZWQoY29uc3Qgc3RydWN0IGF0YV9kZXZpY2UgKmRldiwgY2hhciAqbW9kZXN0ciwgY29uc3QgY2hhciAqbGlzdFtdKQorc3RhdGljIGludCBocHRfZG1hX2JsYWNrbGlzdGVkKGNvbnN0IHN0cnVjdCBhdGFfZGV2aWNlICpkZXYsIGNoYXIgKm1vZGVzdHIsCisJCQkgICAgICAgY29uc3QgY2hhciAqIGNvbnN0IGxpc3RbXSkKIHsKIAl1bnNpZ25lZCBjaGFyIG1vZGVsX251bVtBVEFfSURfUFJPRF9MRU4gKyAxXTsKIAlpbnQgaSA9IDA7CkBAIC0yMzcsMTggKzIzOCwyMyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgY29uc3QgY2hhciAqYmFkX2F0YTMzW10gPSB7Ci0JIk1heHRvciA5MjcyMFU4IiwgIk1heHRvciA5MjA0MFU2IiwgIk1heHRvciA5MTM2MFU0IiwgIk1heHRvciA5MTAyMFUzIiwgIk1heHRvciA5MDg0NVUzIiwgIk1heHRvciA5MDY1MFUyIiwKLQkiTWF4dG9yIDkxMzYwRDgiLCAiTWF4dG9yIDkxMTkwRDciLCAiTWF4dG9yIDkxMDIwRDYiLCAiTWF4dG9yIDkwODQ1RDUiLCAiTWF4dG9yIDkwNjgwRDQiLCAiTWF4dG9yIDkwNTEwRDMiLCAiTWF4dG9yIDkwMzQwRDIiLAotCSJNYXh0b3IgOTExNTJEOCIsICJNYXh0b3IgOTEwMDhENyIsICJNYXh0b3IgOTA4NDVENiIsICJNYXh0b3IgOTA4NDBENiIsICJNYXh0b3IgOTA3MjBENSIsICJNYXh0b3IgOTA2NDhENSIsICJNYXh0b3IgOTA1NzZENCIsCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJhZF9hdGEzM1tdID0geworCSJNYXh0b3IgOTI3MjBVOCIsICJNYXh0b3IgOTIwNDBVNiIsICJNYXh0b3IgOTEzNjBVNCIsICJNYXh0b3IgOTEwMjBVMyIsCisJIk1heHRvciA5MDg0NVUzIiwgIk1heHRvciA5MDY1MFUyIiwKKwkiTWF4dG9yIDkxMzYwRDgiLCAiTWF4dG9yIDkxMTkwRDciLCAiTWF4dG9yIDkxMDIwRDYiLCAiTWF4dG9yIDkwODQ1RDUiLAorCSJNYXh0b3IgOTA2ODBENCIsICJNYXh0b3IgOTA1MTBEMyIsICJNYXh0b3IgOTAzNDBEMiIsCisJIk1heHRvciA5MTE1MkQ4IiwgIk1heHRvciA5MTAwOEQ3IiwgIk1heHRvciA5MDg0NUQ2IiwgIk1heHRvciA5MDg0MEQ2IiwKKwkiTWF4dG9yIDkwNzIwRDUiLCAiTWF4dG9yIDkwNjQ4RDUiLCAiTWF4dG9yIDkwNTc2RDQiLAogCSJNYXh0b3IgOTA1MTBENCIsCiAJIk1heHRvciA5MDQzMkQzIiwgIk1heHRvciA5MDI4OEQyIiwgIk1heHRvciA5MDI1NkQyIiwKLQkiTWF4dG9yIDkxMDAwRDgiLCAiTWF4dG9yIDkwOTEwRDgiLCAiTWF4dG9yIDkwODc1RDciLCAiTWF4dG9yIDkwODQwRDciLCAiTWF4dG9yIDkwNzUwRDYiLCAiTWF4dG9yIDkwNjI1RDUiLCAiTWF4dG9yIDkwNTAwRDQiLAotCSJNYXh0b3IgOTE3MjhEOCIsICJNYXh0b3IgOTE1MTJENyIsICJNYXh0b3IgOTEzMDNENiIsICJNYXh0b3IgOTEwODBENSIsICJNYXh0b3IgOTA4NDVENCIsICJNYXh0b3IgOTA2ODBENCIsICJNYXh0b3IgOTA2NDhEMyIsICJNYXh0b3IgOTA0MzJEMiIsCisJIk1heHRvciA5MTAwMEQ4IiwgIk1heHRvciA5MDkxMEQ4IiwgIk1heHRvciA5MDg3NUQ3IiwgIk1heHRvciA5MDg0MEQ3IiwKKwkiTWF4dG9yIDkwNzUwRDYiLCAiTWF4dG9yIDkwNjI1RDUiLCAiTWF4dG9yIDkwNTAwRDQiLAorCSJNYXh0b3IgOTE3MjhEOCIsICJNYXh0b3IgOTE1MTJENyIsICJNYXh0b3IgOTEzMDNENiIsICJNYXh0b3IgOTEwODBENSIsCisJIk1heHRvciA5MDg0NUQ0IiwgIk1heHRvciA5MDY4MEQ0IiwgIk1heHRvciA5MDY0OEQzIiwgIk1heHRvciA5MDQzMkQyIiwKIAlOVUxMCiB9OwogCi1zdGF0aWMgY29uc3QgY2hhciAqYmFkX2F0YTEwMF81W10gPSB7CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJhZF9hdGExMDBfNVtdID0gewogCSJJQk0tRFRMQS0zMDcwNzUiLAogCSJJQk0tRFRMQS0zMDcwNjAiLAogCSJJQk0tRFRMQS0zMDcwNDUiLApAQCAtMzAyLDYgKzMwOCwyMiBAQAogfQogCiAvKioKKyAqCWhwdDM3Ml9maWx0ZXIJLQltb2RlIHNlbGVjdGlvbiBmaWx0ZXIKKyAqCUBhZGV2OiBBVEEgZGV2aWNlCisgKglAbWFzazogbW9kZSBtYXNrCisgKgorICoJVGhlIE1hcnZlbGwgYnJpZGdlIGNoaXBzIHVzZWQgb24gdGhlIEhpZ2hQb2ludCBTQVRBIGNhcmRzIGRvIG5vdCBzZWVtCisgKgl0byBzdXBwb3J0IHRoZSBVbHRyYURNQSBtb2RlcyAxLCAyLCBhbmQgMyBhcyB3ZWxsIGFzIGFueSBNV0RNQSBtb2Rlcy4uLgorICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBocHQzNzJfZmlsdGVyKHN0cnVjdCBhdGFfZGV2aWNlICphZGV2LCB1bnNpZ25lZCBsb25nIG1hc2spCit7CisJaWYgKGF0YV9pZF9pc19zYXRhKGFkZXYtPmlkKSkKKwkJbWFzayAmPSB+KCgweEUgPDwgQVRBX1NISUZUX1VETUEpIHwgQVRBX01BU0tfTVdETUEpOworCisJcmV0dXJuIG1hc2s7Cit9CisKKy8qKgogICoJaHB0Mzd4X2NhYmxlX2RldGVjdAktCURldGVjdCB0aGUgY2FibGUgdHlwZQogICoJQGFwOiBBVEEgcG9ydCB0byBkZXRlY3Qgb24KICAqCkBAIC0zNzMsNiArMzk1LDcgQEAKIAkJeyAweDUwLCAxLCAweDA0LCAweDA0IH0sCiAJCXsgMHg1NCwgMSwgMHgwNCwgMHgwNCB9CiAJfTsKKwogCWlmICghcGNpX3Rlc3RfY29uZmlnX2JpdHMocGRldiwgJmhwdDM3eF9lbmFibGVfYml0c1thcC0+cG9ydF9ub10pKQogCQlyZXR1cm4gLUVOT0VOVDsKIApAQCAtNTg2LDExICs2MDksMTEgQEAKIH07CiAKIC8qCi0gKglDb25maWd1cmF0aW9uIGZvciBIUFQzNzIsIEhQVDM3MSwgSFBUMzAyLiBTbGlnaHRseSBkaWZmZXJlbnQgUElPCi0gKglhbmQgRE1BIG1vZGUgc2V0dGluZyBmdW5jdGlvbmFsaXR5LgorICoJQ29uZmlndXJhdGlvbiBmb3IgSFBUMzcxIGFuZCBIUFQzMDIuIFNsaWdodGx5IGRpZmZlcmVudCBQSU8gYW5kIERNQQorICoJbW9kZSBzZXR0aW5nIGZ1bmN0aW9uYWxpdHkuCiAgKi8KIAotc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIGhwdDM3Ml9wb3J0X29wcyA9IHsKK3N0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBocHQzMDJfcG9ydF9vcHMgPSB7CiAJLmluaGVyaXRzCT0gJmF0YV9ibWRtYV9wb3J0X29wcywKIAogCS5ibWRtYV9zdG9wCT0gaHB0Mzd4X2JtZG1hX3N0b3AsCkBAIC02MDIsNyArNjI1LDE3IEBACiB9OwogCiAvKgotICoJQ29uZmlndXJhdGlvbiBmb3IgSFBUMzc0LiBNb2RlIHNldHRpbmcgd29ya3MgbGlrZSAzNzIgYW5kIGZyaWVuZHMKKyAqCUNvbmZpZ3VyYXRpb24gZm9yIEhQVDM3Mi4gTW9kZSBzZXR0aW5nIHdvcmtzIGxpa2UgMzcxIGFuZCAzMDIKKyAqCWJ1dCB3ZSBoYXZlIGEgbW9kZSBmaWx0ZXIuCisgKi8KKworc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIGhwdDM3Ml9wb3J0X29wcyA9IHsKKwkuaW5oZXJpdHMJPSAmaHB0MzAyX3BvcnRfb3BzLAorCS5tb2RlX2ZpbHRlcgk9IGhwdDM3Ml9maWx0ZXIsCit9OworCisvKgorICoJQ29uZmlndXJhdGlvbiBmb3IgSFBUMzc0LiBNb2RlIHNldHRpbmcgYW5kIGZpbHRlcmluZyB3b3JrcyBsaWtlIDM3MgogICoJYnV0IHdlIGhhdmUgYSBkaWZmZXJlbnQgY2FibGUgZGV0ZWN0aW9uIHByb2NlZHVyZSBmb3IgZnVuY3Rpb24gMS4KICAqLwogCkBAIC02NDcsMTIgKzY4MCwxMiBAQAogCXUzMiByZWc1YzsKIAlpbnQgdHJpZXM7CiAKLQlmb3IodHJpZXMgPSAwOyB0cmllcyA8IDB4NTAwMDsgdHJpZXMrKykgeworCWZvciAodHJpZXMgPSAwOyB0cmllcyA8IDB4NTAwMDsgdHJpZXMrKykgewogCQl1ZGVsYXkoNTApOwogCQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIDB4NWIsICZyZWc1Yik7CiAJCWlmIChyZWc1YiAmIDB4ODApIHsKIAkJCS8qIFNlZSBpZiBpdCBzdGF5cyBzZXQgKi8KLQkJCWZvcih0cmllcyA9IDA7IHRyaWVzIDwgMHgxMDAwOyB0cmllcyArKykgeworCQkJZm9yICh0cmllcyA9IDA7IHRyaWVzIDwgMHgxMDAwOyB0cmllcysrKSB7CiAJCQkJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCAweDViLCAmcmVnNWIpOwogCQkJCS8qIEZhaWxlZCA/ICovCiAJCQkJaWYgKChyZWc1YiAmIDB4ODApID09IDApCkBAIC02NjAsNyArNjkzLDcgQEAKIAkJCX0KIAkJCS8qIFR1cm4gb2ZmIHR1bmluZywgd2UgaGF2ZSB0aGUgRFBMTCBzZXQgKi8KIAkJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIDB4NWMsICZyZWc1Yyk7Ci0JCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgMHg1YywgcmVnNWMgJiB+IDB4MTAwKTsKKwkJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCAweDVjLCByZWc1YyAmIH4weDEwMCk7CiAJCQlyZXR1cm4gMTsKIAkJfQogCX0KQEAgLTY3Miw2ICs3MDUsNyBAQAogewogCXUzMiBmcmVxOwogCXVuc2lnbmVkIGxvbmcgaW9fYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCA0KTsKKwogCWlmIChQQ0lfRlVOQyhwZGV2LT5kZXZmbikgJiAxKSB7CiAJCXN0cnVjdCBwY2lfZGV2ICpwZGV2XzA7CiAKQEAgLTczNywyMyArNzcxLDIzIEBACiAJCS51ZG1hX21hc2sgPSBBVEFfVURNQTUsCiAJCS5wb3J0X29wcyA9ICZocHQzNzBhX3BvcnRfb3BzCiAJfTsKLQkvKiBIUFQzNzAgLSBVRE1BMTAwICovCisJLyogSFBUMzcwIC0gVURNQTY2ICovCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9faHB0MzcwXzMzID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAogCQkucGlvX21hc2sgPSBBVEFfUElPNCwKIAkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAotCQkudWRtYV9tYXNrID0gQVRBX1VETUE1LAorCQkudWRtYV9tYXNrID0gQVRBX1VETUE0LAogCQkucG9ydF9vcHMgPSAmaHB0MzcwX3BvcnRfb3BzCiAJfTsKLQkvKiBIUFQzNzBBIC0gVURNQTEwMCAqLworCS8qIEhQVDM3MEEgLSBVRE1BNjYgKi8KIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19ocHQzNzBhXzMzID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAogCQkucGlvX21hc2sgPSBBVEFfUElPNCwKIAkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAotCQkudWRtYV9tYXNrID0gQVRBX1VETUE1LAorCQkudWRtYV9tYXNrID0gQVRBX1VETUE0LAogCQkucG9ydF9vcHMgPSAmaHB0MzcwYV9wb3J0X29wcwogCX07Ci0JLyogSFBUMzcxLCAzNzIgYW5kIGZyaWVuZHMgLSBVRE1BMTMzICovCisJLyogSFBUMzcyIC0gVURNQTEzMyAqLwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvX2hwdDM3MiA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKIAkJLnBpb19tYXNrID0gQVRBX1BJTzQsCkBAIC03NjEsNiArNzk1LDE0IEBACiAJCS51ZG1hX21hc2sgPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcyA9ICZocHQzNzJfcG9ydF9vcHMKIAl9OworCS8qIEhQVDM3MSwgMzAyIC0gVURNQTEzMyAqLworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvX2hwdDMwMiA9IHsKKwkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKKwkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNiwKKwkJLnBvcnRfb3BzID0gJmhwdDMwMl9wb3J0X29wcworCX07CiAJLyogSFBUMzc0IC0gVURNQTEwMCwgZnVuY3Rpb24gMSB1c2VzIGRpZmZlcmVudCBwcmVyZXNldCBtZXRob2QgKi8KIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19ocHQzNzRfZm4wID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLApAQCAtODA1LDY0ICs4NDcsNjggQEAKIAkJaWYgKHJldiA9PSA2KQogCQkJcmV0dXJuIC1FTk9ERVY7CiAKLQkJc3dpdGNoKHJldikgewotCQkJY2FzZSAzOgotCQkJCXBwaVswXSA9ICZpbmZvX2hwdDM3MDsKLQkJCQljaGlwX3RhYmxlID0gJmhwdDM3MDsKLQkJCQlwcmVmZXJfZHBsbCA9IDA7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIDQ6Ci0JCQkJcHBpWzBdID0gJmluZm9faHB0MzcwYTsKLQkJCQljaGlwX3RhYmxlID0gJmhwdDM3MGE7Ci0JCQkJcHJlZmVyX2RwbGwgPSAwOwotCQkJCWJyZWFrOwotCQkJY2FzZSA1OgotCQkJCXBwaVswXSA9ICZpbmZvX2hwdDM3MjsKLQkJCQljaGlwX3RhYmxlID0gJmhwdDM3MjsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICJwYXRhX2hwdDM3eDogVW5rbm93biBIUFQzNjYgIgotCQkJCSAgICAgICAic3VidHlwZSwgcGxlYXNlIHJlcG9ydCAoJWQpLlxuIiwgcmV2KTsKLQkJCQlyZXR1cm4gLUVOT0RFVjsKKwkJc3dpdGNoIChyZXYpIHsKKwkJY2FzZSAzOgorCQkJcHBpWzBdID0gJmluZm9faHB0MzcwOworCQkJY2hpcF90YWJsZSA9ICZocHQzNzA7CisJCQlwcmVmZXJfZHBsbCA9IDA7CisJCQlicmVhazsKKwkJY2FzZSA0OgorCQkJcHBpWzBdID0gJmluZm9faHB0MzcwYTsKKwkJCWNoaXBfdGFibGUgPSAmaHB0MzcwYTsKKwkJCXByZWZlcl9kcGxsID0gMDsKKwkJCWJyZWFrOworCQljYXNlIDU6CisJCQlwcGlbMF0gPSAmaW5mb19ocHQzNzI7CisJCQljaGlwX3RhYmxlID0gJmhwdDM3MjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHJpbnRrKEtFUk5fRVJSICJwYXRhX2hwdDM3eDogVW5rbm93biBIUFQzNjYgc3VidHlwZSwgIgorCQkJICAgICAgICJwbGVhc2UgcmVwb3J0ICglZCkuXG4iLCByZXYpOworCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KIAl9IGVsc2UgewotCQlzd2l0Y2goZGV2LT5kZXZpY2UpIHsKLQkJCWNhc2UgUENJX0RFVklDRV9JRF9UVElfSFBUMzcyOgotCQkJCS8qIDM3Mk4gaWYgcmV2ID49IDIqLwotCQkJCWlmIChyZXYgPj0gMikKLQkJCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCQkJcHBpWzBdID0gJmluZm9faHB0MzcyOwotCQkJCWNoaXBfdGFibGUgPSAmaHB0MzcyYTsKLQkJCQlicmVhazsKLQkJCWNhc2UgUENJX0RFVklDRV9JRF9UVElfSFBUMzAyOgotCQkJCS8qIDMwMk4gaWYgcmV2ID4gMSAqLwotCQkJCWlmIChyZXYgPiAxKQotCQkJCQlyZXR1cm4gLUVOT0RFVjsKLQkJCQlwcGlbMF0gPSAmaW5mb19ocHQzNzI7Ci0JCQkJLyogQ2hlY2sgdGhpcyAqLwotCQkJCWNoaXBfdGFibGUgPSAmaHB0MzAyOwotCQkJCWJyZWFrOwotCQkJY2FzZSBQQ0lfREVWSUNFX0lEX1RUSV9IUFQzNzE6Ci0JCQkJaWYgKHJldiA+IDEpCi0JCQkJCXJldHVybiAtRU5PREVWOwotCQkJCXBwaVswXSA9ICZpbmZvX2hwdDM3MjsKLQkJCQljaGlwX3RhYmxlID0gJmhwdDM3MTsKLQkJCQkvKiBTaW5nbGUgY2hhbm5lbCBkZXZpY2UsIG1hc3RlciBpcyBub3QgcHJlc2VudAotCQkJCSAgIGJ1dCB0aGUgQklPUyAob3IgdXMgZm9yIG5vbiB4ODYpIG11c3QgbWFyayBpdAotCQkJCSAgIGFic2VudCAqLwotCQkJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgMHg1MCwgJm1jcjEpOwotCQkJCW1jcjEgJj0gfjB4MDQ7Ci0JCQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg1MCwgbWNyMSk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFBDSV9ERVZJQ0VfSURfVFRJX0hQVDM3NDoKLQkJCQljaGlwX3RhYmxlID0gJmhwdDM3NDsKLQkJCQlpZiAoIShQQ0lfRlVOQyhkZXYtPmRldmZuKSAmIDEpKQotCQkJCQkqcHBpID0gJmluZm9faHB0Mzc0X2ZuMDsKLQkJCQllbHNlCi0JCQkJCSpwcGkgPSAmaW5mb19ocHQzNzRfZm4xOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQlwcmludGsoS0VSTl9FUlIgInBhdGFfaHB0Mzd4OiBQQ0kgdGFibGUgaXMgYm9ndXMgcGxlYXNlIHJlcG9ydCAoJWQpLlxuIiwgZGV2LT5kZXZpY2UpOworCQlzd2l0Y2ggKGRldi0+ZGV2aWNlKSB7CisJCWNhc2UgUENJX0RFVklDRV9JRF9UVElfSFBUMzcyOgorCQkJLyogMzcyTiBpZiByZXYgPj0gMiAqLworCQkJaWYgKHJldiA+PSAyKQorCQkJCXJldHVybiAtRU5PREVWOworCQkJcHBpWzBdID0gJmluZm9faHB0MzcyOworCQkJY2hpcF90YWJsZSA9ICZocHQzNzJhOworCQkJYnJlYWs7CisJCWNhc2UgUENJX0RFVklDRV9JRF9UVElfSFBUMzAyOgorCQkJLyogMzAyTiBpZiByZXYgPiAxICovCisJCQlpZiAocmV2ID4gMSkKKwkJCQlyZXR1cm4gLUVOT0RFVjsKKwkJCXBwaVswXSA9ICZpbmZvX2hwdDMwMjsKKwkJCS8qIENoZWNrIHRoaXMgKi8KKwkJCWNoaXBfdGFibGUgPSAmaHB0MzAyOworCQkJYnJlYWs7CisJCWNhc2UgUENJX0RFVklDRV9JRF9UVElfSFBUMzcxOgorCQkJaWYgKHJldiA+IDEpCisJCQkJcmV0dXJuIC1FTk9ERVY7CisJCQlwcGlbMF0gPSAmaW5mb19ocHQzMDI7CisJCQljaGlwX3RhYmxlID0gJmhwdDM3MTsKKwkJCS8qCisJCQkgKiBTaW5nbGUgY2hhbm5lbCBkZXZpY2UsIG1hc3RlciBpcyBub3QgcHJlc2VudAorCQkJICogYnV0IHRoZSBCSU9TIChvciB1cyBmb3Igbm9uIHg4NikgbXVzdCBtYXJrIGl0CisJCQkgKiBhYnNlbnQKKwkJCSAqLworCQkJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCAweDUwLCAmbWNyMSk7CisJCQltY3IxICY9IH4weDA0OworCQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg1MCwgbWNyMSk7CisJCQlicmVhazsKKwkJY2FzZSBQQ0lfREVWSUNFX0lEX1RUSV9IUFQzNzQ6CisJCQljaGlwX3RhYmxlID0gJmhwdDM3NDsKKwkJCWlmICghKFBDSV9GVU5DKGRldi0+ZGV2Zm4pICYgMSkpCisJCQkJKnBwaSA9ICZpbmZvX2hwdDM3NF9mbjA7CisJCQllbHNlCisJCQkJKnBwaSA9ICZpbmZvX2hwdDM3NF9mbjE7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJwYXRhX2hwdDM3eDogUENJIHRhYmxlIGlzIGJvZ3VzLCBwbGVhc2UgcmVwb3J0ICglZCkuXG4iLAorCQkJICAgICAgIGRldi0+ZGV2aWNlKTsKIAkJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQogCX0KQEAgLTg5Myw5ICs5MzksMTEgQEAKIAlpZiAoY2hpcF90YWJsZSA9PSAmaHB0MzcyYSkKIAkJb3V0YigweDBlLCBpb2Jhc2UgKyAweDljKTsKIAotCS8qIFNvbWUgZGV2aWNlcyBkbyBub3QgbGV0IHRoaXMgdmFsdWUgYmUgYWNjZXNzZWQgdmlhIFBDSSBzcGFjZQotCSAgIGFjY29yZGluZyB0byB0aGUgb2xkIGRyaXZlci4gSW4gYWRkaXRpb24gd2UgbXVzdCB1c2UgdGhlIHZhbHVlCi0JICAgZnJvbSBGTiAwIG9uIHRoZSBIUFQzNzQgKi8KKwkvKgorCSAqIFNvbWUgZGV2aWNlcyBkbyBub3QgbGV0IHRoaXMgdmFsdWUgYmUgYWNjZXNzZWQgdmlhIFBDSSBzcGFjZQorCSAqIGFjY29yZGluZyB0byB0aGUgb2xkIGRyaXZlci4gSW4gYWRkaXRpb24gd2UgbXVzdCB1c2UgdGhlIHZhbHVlCisJICogZnJvbSBGTiAwIG9uIHRoZSBIUFQzNzQuCisJICovCiAKIAlpZiAoY2hpcF90YWJsZSA9PSAmaHB0Mzc0KSB7CiAJCWZyZXEgPSBocHQzNzRfcmVhZF9mcmVxKGRldik7CkBAIC05MDksMTAgKzk1NywxMSBAQAogCQl1OCBzcjsKIAkJdTMyIHRvdGFsID0gMDsKIAotCQlwcmludGsoS0VSTl9XQVJOSU5HICJwYXRhX2hwdDM3eDogQklPUyBoYXMgbm90IHNldCB0aW1pbmcgY2xvY2tzLlxuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJICAgICAgICJwYXRhX2hwdDM3eDogQklPUyBoYXMgbm90IHNldCB0aW1pbmcgY2xvY2tzLlxuIik7CiAKIAkJLyogVGhpcyBpcyB0aGUgcHJvY2VzcyB0aGUgSFBUMzcxIEJJT1MgaXMgcmVwb3J0ZWQgdG8gdXNlICovCi0JCWZvcihpID0gMDsgaSA8IDEyODsgaSsrKSB7CisJCWZvciAoaSA9IDA7IGkgPCAxMjg7IGkrKykgewogCQkJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCAweDc4LCAmc3IpOwogCQkJdG90YWwgKz0gc3IgJiAweDFGRjsKIAkJCXVkZWxheSgxNSk7CkBAIC05NDcsMTcgKzk5NiwyMiBAQAogCiAJCS8qIFNlbGVjdCB0aGUgRFBMTCBjbG9jay4gKi8KIAkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg1YiwgMHgyMSk7Ci0JCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCAweDVDLCAoZl9oaWdoIDw8IDE2KSB8IGZfbG93IHwgMHgxMDApOworCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgMHg1QywKKwkJCQkgICAgICAgKGZfaGlnaCA8PCAxNikgfCBmX2xvdyB8IDB4MTAwKTsKIAotCQlmb3IoYWRqdXN0ID0gMDsgYWRqdXN0IDwgODsgYWRqdXN0KyspIHsKKwkJZm9yIChhZGp1c3QgPSAwOyBhZGp1c3QgPCA4OyBhZGp1c3QrKykgewogCQkJaWYgKGhwdDM3eF9jYWxpYnJhdGVfZHBsbChkZXYpKQogCQkJCWJyZWFrOwotCQkJLyogU2VlIGlmIGl0J2xsIHNldHRsZSBhdCBhIGZyYWN0aW9uYWxseSBkaWZmZXJlbnQgY2xvY2sgKi8KKwkJCS8qCisJCQkgKiBTZWUgaWYgaXQnbGwgc2V0dGxlIGF0IGEgZnJhY3Rpb25hbGx5CisJCQkgKiBkaWZmZXJlbnQgY2xvY2sKKwkJCSAqLwogCQkJaWYgKGFkanVzdCAmIDEpCiAJCQkJZl9sb3cgLT0gYWRqdXN0ID4+IDE7CiAJCQllbHNlCiAJCQkJZl9oaWdoICs9IGFkanVzdCA+PiAxOwotCQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIDB4NUMsIChmX2hpZ2ggPDwgMTYpIHwgZl9sb3cgfCAweDEwMCk7CisJCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgMHg1QywKKwkJCQkJICAgICAgIChmX2hpZ2ggPDwgMTYpIHwgZl9sb3cgfCAweDEwMCk7CiAJCX0KIAkJaWYgKGFkanVzdCA9PSA4KSB7CiAJCQlwcmludGsoS0VSTl9FUlIgInBhdGFfaHB0Mzd4OiBEUExMIGRpZCBub3Qgc3RhYmlsaXplIVxuIik7CkBAIC05NzYsNyArMTAzMCw3IEBACiAJCSAqCVBlcmZvcm0gYSBmaW5hbCBmaXh1cC4gTm90ZSB0aGF0IHdlIHdpbGwgaGF2ZSB1c2VkIHRoZQogCQkgKglEUExMIG9uIHRoZSBIUFQzNzIgd2hpY2ggbWVhbnMgd2UgZG9uJ3QgaGF2ZSB0byB3b3JyeQogCQkgKglhYm91dCBsYWNrIG9mIFVETUExMzMgc3VwcG9ydCBvbiBsb3dlciBjbG9ja3MKLSAJCSAqLworCQkgKi8KIAogCQlpZiAoY2xvY2tfc2xvdCA8IDIgJiYgcHBpWzBdID09ICZpbmZvX2hwdDM3MCkKIAkJCXBwaVswXSA9ICZpbmZvX2hwdDM3MF8zMzsKQEAgLTEwMDEsOSArMTA1NSw5IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgaHB0Mzd4X3BjaV9kcml2ZXIgPSB7Ci0JLm5hbWUgCQk9IERSVl9OQU1FLAorCS5uYW1lCQk9IERSVl9OQU1FLAogCS5pZF90YWJsZQk9IGhwdDM3eCwKLQkucHJvYmUgCQk9IGhwdDM3eF9pbml0X29uZSwKKwkucHJvYmUJCT0gaHB0Mzd4X2luaXRfb25lLAogCS5yZW1vdmUJCT0gYXRhX3BjaV9yZW1vdmVfb25lCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2hwdDN4Mm4uYyBiL2RyaXZlcnMvYXRhL3BhdGFfaHB0M3gybi5jCmluZGV4IDMyZjM0NjMuLmQyMjM5YmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfaHB0M3gybi5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfaHB0M3gybi5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIExpYmF0YSBkcml2ZXIgZm9yIHRoZSBoaWdocG9pbnQgMzcyTiBhbmQgMzAyTiBVRE1BNjYgQVRBIGNvbnRyb2xsZXJzLgorICogTGliYXRhIGRyaXZlciBmb3IgdGhlIEhpZ2hQb2ludCAzNzFOLCAzNzJOLCBhbmQgMzAyTiBVRE1BNjYgQVRBIGNvbnRyb2xsZXJzLgogICoKICAqIFRoaXMgZHJpdmVyIGlzIGhlYXZpbHkgYmFzZWQgdXBvbjoKICAqCkBAIC04LDcgKzgsNyBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDMJCUFuZHJlIEhlZHJpY2sgPGFuZHJlQGxpbnV4LWlkZS5vcmc+CiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKEMpIDIwMDEJICAgICAgICBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuCiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKEMpIDIwMDMJCVJlZCBIYXQgSW5jCi0gKiBQb3J0aW9ucyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOQlNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMAlNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCiAgKgogICoKICAqIFRPRE8KQEAgLTI1LDcgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9saWJhdGEuaD4KIAogI2RlZmluZSBEUlZfTkFNRQkicGF0YV9ocHQzeDJuIgotI2RlZmluZSBEUlZfVkVSU0lPTgkiMC4zLjEwIgorI2RlZmluZSBEUlZfVkVSU0lPTgkiMC4zLjEzIgogCiBlbnVtIHsKIAlIUFRfUENJX0ZBU1QJPQkoMSA8PCAzMSksCkBAIC0xMDMsNyArMTAzLDcgQEAKIHsKIAlzdHJ1Y3QgaHB0X2Nsb2NrICpjbG9ja3MgPSBocHQzeDJuX2Nsb2NrczsKIAotCXdoaWxlKGNsb2Nrcy0+eGZlcl9zcGVlZCkgeworCXdoaWxlIChjbG9ja3MtPnhmZXJfc3BlZWQpIHsKIAkJaWYgKGNsb2Nrcy0+eGZlcl9zcGVlZCA9PSBzcGVlZCkKIAkJCXJldHVybiBjbG9ja3MtPnRpbWluZzsKIAkJY2xvY2tzKys7CkBAIC0xMTMsNiArMTEzLDIyIEBACiB9CiAKIC8qKgorICoJaHB0Mzcybl9maWx0ZXIJLQltb2RlIHNlbGVjdGlvbiBmaWx0ZXIKKyAqCUBhZGV2OiBBVEEgZGV2aWNlCisgKglAbWFzazogbW9kZSBtYXNrCisgKgorICoJVGhlIE1hcnZlbGwgYnJpZGdlIGNoaXBzIHVzZWQgb24gdGhlIEhpZ2hQb2ludCBTQVRBIGNhcmRzIGRvIG5vdCBzZWVtCisgKgl0byBzdXBwb3J0IHRoZSBVbHRyYURNQSBtb2RlcyAxLCAyLCBhbmQgMyBhcyB3ZWxsIGFzIGFueSBNV0RNQSBtb2Rlcy4uLgorICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBocHQzNzJuX2ZpbHRlcihzdHJ1Y3QgYXRhX2RldmljZSAqYWRldiwgdW5zaWduZWQgbG9uZyBtYXNrKQoreworCWlmIChhdGFfaWRfaXNfc2F0YShhZGV2LT5pZCkpCisJCW1hc2sgJj0gfigoMHhFIDw8IEFUQV9TSElGVF9VRE1BKSB8IEFUQV9NQVNLX01XRE1BKTsKKworCXJldHVybiBtYXNrOworfQorCisvKioKICAqCWhwdDN4Mm5fY2FibGVfZGV0ZWN0CS0JRGV0ZWN0IHRoZSBjYWJsZSB0eXBlCiAgKglAYXA6IEFUQSBwb3J0IHRvIGRldGVjdCBvbgogICoKQEAgLTE1Myw2ICsxNjksNyBAQAogewogCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBsaW5rLT5hcDsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoYXAtPmhvc3QtPmRldik7CisKIAkvKiBSZXNldCB0aGUgc3RhdGUgbWFjaGluZSAqLwogCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCAweDUwICsgNCAqIGFwLT5wb3J0X25vLCAweDM3KTsKIAl1ZGVsYXkoMTAwKTsKQEAgLTMyOCwxMCArMzQ1LDEwIEBACiB9OwogCiAvKgotICoJQ29uZmlndXJhdGlvbiBmb3IgSFBUM3gybi4KKyAqCUNvbmZpZ3VyYXRpb24gZm9yIEhQVDMwMk4vMzcxTi4KICAqLwogCi1zdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgaHB0M3gybl9wb3J0X29wcyA9IHsKK3N0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBocHQzeHhuX3BvcnRfb3BzID0gewogCS5pbmhlcml0cwk9ICZhdGFfYm1kbWFfcG9ydF9vcHMsCiAKIAkuYm1kbWFfc3RvcAk9IGhwdDN4Mm5fYm1kbWFfc3RvcCwKQEAgLTM0NSw2ICszNjIsMTUgQEAKIAkucHJlcmVzZXQJPSBocHQzeDJuX3ByZV9yZXNldCwKIH07CiAKKy8qCisgKglDb25maWd1cmF0aW9uIGZvciBIUFQzNzJOLiBTYW1lIGFzIDMwMk4vMzcxTiBidXQgd2UgaGF2ZSBhIG1vZGUgZmlsdGVyLgorICovCisKK3N0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBocHQzNzJuX3BvcnRfb3BzID0geworCS5pbmhlcml0cwk9ICZocHQzeHhuX3BvcnRfb3BzLAorCS5tb2RlX2ZpbHRlcgk9ICZocHQzNzJuX2ZpbHRlciwKK307CisKIC8qKgogICoJaHB0M3huX2NhbGlicmF0ZV9kcGxsCQktCUNhbGlicmF0ZSB0aGUgRFBMTCBsb29wCiAgKglAZGV2OiBQQ0kgZGV2aWNlCkBAIC0zNTksMTIgKzM4NSwxMiBAQAogCXUzMiByZWc1YzsKIAlpbnQgdHJpZXM7CiAKLQlmb3IodHJpZXMgPSAwOyB0cmllcyA8IDB4NTAwMDsgdHJpZXMrKykgeworCWZvciAodHJpZXMgPSAwOyB0cmllcyA8IDB4NTAwMDsgdHJpZXMrKykgewogCQl1ZGVsYXkoNTApOwogCQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIDB4NWIsICZyZWc1Yik7CiAJCWlmIChyZWc1YiAmIDB4ODApIHsKIAkJCS8qIFNlZSBpZiBpdCBzdGF5cyBzZXQgKi8KLQkJCWZvcih0cmllcyA9IDA7IHRyaWVzIDwgMHgxMDAwOyB0cmllcyArKykgeworCQkJZm9yICh0cmllcyA9IDA7IHRyaWVzIDwgMHgxMDAwOyB0cmllcysrKSB7CiAJCQkJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCAweDViLCAmcmVnNWIpOwogCQkJCS8qIEZhaWxlZCA/ICovCiAJCQkJaWYgKChyZWc1YiAmIDB4ODApID09IDApCkBAIC0zNzIsNyArMzk4LDcgQEAKIAkJCX0KIAkJCS8qIFR1cm4gb2ZmIHR1bmluZywgd2UgaGF2ZSB0aGUgRFBMTCBzZXQgKi8KIAkJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIDB4NWMsICZyZWc1Yyk7Ci0JCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgMHg1YywgcmVnNWMgJiB+IDB4MTAwKTsKKwkJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCAweDVjLCByZWc1YyAmIH4weDEwMCk7CiAJCQlyZXR1cm4gMTsKIAkJfQogCX0KQEAgLTM4OCw4ICs0MTQsMTkgQEAKIAogCWZjbnQgPSBpbmwoaW9iYXNlICsgMHg5MCk7CS8qIE5vdCBQQ0kgcmVhZGFibGUgZm9yIHNvbWUgY2hpcHMgKi8KIAlpZiAoKGZjbnQgPj4gMTIpICE9IDB4QUJDREUpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiaHB0M3huOiBCSU9TIGNsb2NrIGRhdGEgbm90IHNldC5cbiIpOwotCQlyZXR1cm4gMzM7CS8qIE5vdCBCSU9TIHNldCAqLworCQlpbnQgaTsKKwkJdTE2IHNyOworCQl1MzIgdG90YWwgPSAwOworCisJCXByaW50ayhLRVJOX1dBUk5JTkcgInBhdGFfaHB0M3gybjogQklPUyBjbG9jayBkYXRhIG5vdCBzZXQuXG4iKTsKKworCQkvKiBUaGlzIGlzIHRoZSBwcm9jZXNzIHRoZSBIUFQzNzEgQklPUyBpcyByZXBvcnRlZCB0byB1c2UgKi8KKwkJZm9yIChpID0gMDsgaSA8IDEyODsgaSsrKSB7CisJCQlwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCAweDc4LCAmc3IpOworCQkJdG90YWwgKz0gc3IgJiAweDFGRjsKKwkJCXVkZWxheSgxNSk7CisJCX0KKwkJZmNudCA9IHRvdGFsIC8gMTI4OwogCX0KIAlmY250ICY9IDB4MUZGOwogCkBAIC00MzEsMjEgKzQ2OCwyNyBAQAogICoJSFBUMzcyTgkJCTkgKEhQVDM3Mk4pCSoJVURNQTEzMwogICoKICAqCSgxKSBVRE1BMTMzIHN1cHBvcnQgZGVwZW5kcyBvbiB0aGUgYnVzIGNsb2NrCi0gKgotICoJVG8gcGluIGRvd24JCUhQVDM3MU4KICAqLwogCiBzdGF0aWMgaW50IGhwdDN4Mm5faW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQogewotCS8qIEhQVDM3Mk4gYW5kIGZyaWVuZHMgLSBVRE1BMTMzICovCi0Jc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7CisJLyogSFBUMzcyTiAtIFVETUExMzMgKi8KKwlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19ocHQzNzJuID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAogCQkucGlvX21hc2sgPSBBVEFfUElPNCwKIAkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrID0gQVRBX1VETUE2LAotCQkucG9ydF9vcHMgPSAmaHB0M3gybl9wb3J0X29wcworCQkucG9ydF9vcHMgPSAmaHB0Mzcybl9wb3J0X29wcwogCX07Ci0JY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaVtdID0geyAmaW5mbywgTlVMTCB9OworCS8qIEhQVDMwMk4gYW5kIEhQVDM3MU4gLSBVRE1BMTMzICovCisJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9faHB0M3h4biA9IHsKKwkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKKwkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNiwKKwkJLnBvcnRfb3BzID0gJmhwdDN4eG5fcG9ydF9vcHMKKwl9OworCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbXSA9IHsgJmluZm9faHB0M3h4biwgTlVMTCB9OwogCXU4IHJldiA9IGRldi0+cmV2aXNpb247CiAJdTggaXJxbWFzazsKIAl1bnNpZ25lZCBpbnQgcGNpX21oejsKQEAgLTQ1OSwzMCArNTAyLDM2IEBACiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKLQlzd2l0Y2goZGV2LT5kZXZpY2UpIHsKLQkJY2FzZSBQQ0lfREVWSUNFX0lEX1RUSV9IUFQzNjY6Ci0JCQlpZiAocmV2IDwgNikKLQkJCQlyZXR1cm4gLUVOT0RFVjsKLQkJCWJyZWFrOwotCQljYXNlIFBDSV9ERVZJQ0VfSURfVFRJX0hQVDM3MToKLQkJCWlmIChyZXYgPCAyKQotCQkJCXJldHVybiAtRU5PREVWOwotCQkJLyogMzcxTiBpZiByZXYgPiAxICovCi0JCQlicmVhazsKLQkJY2FzZSBQQ0lfREVWSUNFX0lEX1RUSV9IUFQzNzI6Ci0JCQkvKiAzNzJOIGlmIHJldiA+PSAyKi8KLQkJCWlmIChyZXYgPCAyKQotCQkJCXJldHVybiAtRU5PREVWOwotCQkJYnJlYWs7Ci0JCWNhc2UgUENJX0RFVklDRV9JRF9UVElfSFBUMzAyOgotCQkJaWYgKHJldiA8IDIpCi0JCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCQlicmVhazsKLQkJY2FzZSBQQ0lfREVWSUNFX0lEX1RUSV9IUFQzNzJOOgotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlwcmludGsoS0VSTl9FUlIgInBhdGFfaHB0M3gybjogUENJIHRhYmxlIGlzIGJvZ3VzIHBsZWFzZSByZXBvcnQgKCVkKS5cbiIsIGRldi0+ZGV2aWNlKTsKKwlzd2l0Y2ggKGRldi0+ZGV2aWNlKSB7CisJY2FzZSBQQ0lfREVWSUNFX0lEX1RUSV9IUFQzNjY6CisJCS8qIDM3Mk4gaWYgcmV2ID49IDYgKi8KKwkJaWYgKHJldiA8IDYpCiAJCQlyZXR1cm4gLUVOT0RFVjsKKwkJZ290byBocHQzNzJuOworCWNhc2UgUENJX0RFVklDRV9JRF9UVElfSFBUMzcxOgorCQkvKiAzNzFOIGlmIHJldiA+PSAyICovCisJCWlmIChyZXYgPCAyKQorCQkJcmV0dXJuIC1FTk9ERVY7CisJCWJyZWFrOworCWNhc2UgUENJX0RFVklDRV9JRF9UVElfSFBUMzcyOgorCQkvKiAzNzJOIGlmIHJldiA+PSAyICovCisJCWlmIChyZXYgPCAyKQorCQkJcmV0dXJuIC1FTk9ERVY7CisJCWdvdG8gaHB0MzcybjsKKwljYXNlIFBDSV9ERVZJQ0VfSURfVFRJX0hQVDMwMjoKKwkJLyogMzAyTiBpZiByZXYgPj0gMiAqLworCQlpZiAocmV2IDwgMikKKwkJCXJldHVybiAtRU5PREVWOworCQlicmVhazsKKwljYXNlIFBDSV9ERVZJQ0VfSURfVFRJX0hQVDM3Mk46CitocHQzNzJuOgorCQlwcGlbMF0gPSAmaW5mb19ocHQzNzJuOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJwYXRhX2hwdDN4Mm46IFBDSSB0YWJsZSBpcyBib2d1cyBwbGVhc2UgcmVwb3J0ICglZCkuXG4iLAorCQkgICAgICAgZGV2LT5kZXZpY2UpOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAkvKiBPayBzbyB0aGlzIGlzIGEgY2hpcCB3ZSBzdXBwb3J0ICovCkBAIC01MDksOCArNTU4LDEwIEBACiAJCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4NTAsIG1jcjEpOwogCX0KIAotCS8qIFR1bmUgdGhlIFBMTC4gSFBUIHJlY29tbWVuZCB1c2luZyA3NSBmb3IgU0FUQSwgNjYgZm9yIFVETUExMzMgb3IKLQkgICA1MCBmb3IgVURNQTEwMC4gUmlnaHQgbm93IHdlIGFsd2F5cyB1c2UgNjYgKi8KKwkvKgorCSAqIFR1bmUgdGhlIFBMTC4gSFBUIHJlY29tbWVuZCB1c2luZyA3NSBmb3IgU0FUQSwgNjYgZm9yIFVETUExMzMgb3IKKwkgKiA1MCBmb3IgVURNQTEwMC4gUmlnaHQgbm93IHdlIGFsd2F5cyB1c2UgNjYKKwkgKi8KIAogCXBjaV9taHogPSBocHQzeDJuX3BjaV9jbG9jayhkZXYpOwogCkBAIC01MjIsNyArNTczLDcgQEAKIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDVCLCAweDIxKTsKIAogCS8qIFVubGlrZSB0aGUgMzd4IHdlIGRvbid0IHRyeSBqaWdnbGluZyB0aGUgZnJlcXVlbmN5ICovCi0JZm9yKGFkanVzdCA9IDA7IGFkanVzdCA8IDg7IGFkanVzdCsrKSB7CisJZm9yIChhZGp1c3QgPSAwOyBhZGp1c3QgPCA4OyBhZGp1c3QrKykgewogCQlpZiAoaHB0M3huX2NhbGlicmF0ZV9kcGxsKGRldikpCiAJCQlicmVhazsKIAkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIDB4NUMsIChmX2hpZ2ggPDwgMTYpIHwgZl9sb3cpOwpAQCAtNTM0LDggKzU4NSwxMSBAQAogCiAJcHJpbnRrKEtFUk5fSU5GTyAicGF0YV9ocHQzN3g6IGJ1cyBjbG9jayAlZE1IeiwgdXNpbmcgNjZNSHogRFBMTC5cbiIsCiAJICAgICAgIHBjaV9taHopOwotCS8qIFNldCBvdXIgcHJpdmF0ZSBkYXRhIHVwLiBXZSBvbmx5IG5lZWQgYSBmZXcgZmxhZ3Mgc28gd2UgdXNlCi0JICAgaXQgZGlyZWN0bHkgKi8KKworCS8qCisJICogU2V0IG91ciBwcml2YXRlIGRhdGEgdXAuIFdlIG9ubHkgbmVlZCBhIGZldyBmbGFncworCSAqIHNvIHdlIHVzZSBpdCBkaXJlY3RseS4KKwkgKi8KIAlpZiAocGNpX21oeiA+IDYwKQogCQlocHJpdiA9ICh2b2lkICopKFBDSTY2IHwgVVNFX0RQTEwpOwogCkBAIC01NjIsOSArNjE2LDkgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBocHQzeDJuX3BjaV9kcml2ZXIgPSB7Ci0JLm5hbWUgCQk9IERSVl9OQU1FLAorCS5uYW1lCQk9IERSVl9OQU1FLAogCS5pZF90YWJsZQk9IGhwdDN4Mm4sCi0JLnByb2JlIAkJPSBocHQzeDJuX2luaXRfb25lLAorCS5wcm9iZQkJPSBocHQzeDJuX2luaXRfb25lLAogCS5yZW1vdmUJCT0gYXRhX3BjaV9yZW1vdmVfb25lCiB9OwogCkBAIC01NzksNyArNjMzLDcgQEAKIH0KIAogTU9EVUxFX0FVVEhPUigiQWxhbiBDb3giKTsKLU1PRFVMRV9ERVNDUklQVElPTigibG93LWxldmVsIGRyaXZlciBmb3IgdGhlIEhpZ2hwb2ludCBIUFQzeDJuLzMweCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJsb3ctbGV2ZWwgZHJpdmVyIGZvciB0aGUgSGlnaHBvaW50IEhQVDN4eE4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBocHQzeDJuKTsKIE1PRFVMRV9WRVJTSU9OKERSVl9WRVJTSU9OKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRtL2ZvcmUyMDBlLmMgYi9kcml2ZXJzL2F0bS9mb3JlMjAwZS5jCmluZGV4IDk2MmMzMDkuLjQ0Zjc3ODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRtL2ZvcmUyMDBlLmMKKysrIGIvZHJpdmVycy9hdG0vZm9yZTIwMGUuYwpAQCAtOTIsNyArOTIsNyBAQAogCiAjZGVmaW5lIEZPUkUyMDBFX0lOREVYKHZpcnRfYWRkciwgdHlwZSwgaW5kZXgpICAgICAoJigodHlwZSAqKSh2aXJ0X2FkZHIpKVsgaW5kZXggXSkKIAotI2RlZmluZSBGT1JFMjAwRV9ORVhUX0VOVFJZKGluZGV4LCBtb2R1bG8pICAgICAgICAgKGluZGV4ID0gKysoaW5kZXgpICUgKG1vZHVsbykpCisjZGVmaW5lIEZPUkUyMDBFX05FWFRfRU5UUlkoaW5kZXgsIG1vZHVsbykgICAgICAgICAoaW5kZXggPSAoKGluZGV4KSArIDEpICUgKG1vZHVsbykpCiAKICNpZiAxCiAjZGVmaW5lIEFTU0VSVChleHByKSAgICAgaWYgKCEoZXhwcikpIHsgXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vbGFuYWkuYyBiL2RyaXZlcnMvYXRtL2xhbmFpLmMKaW5kZXggYTM5NWM5YS4uNTI4ODBjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdG0vbGFuYWkuYworKysgYi9kcml2ZXJzL2F0bS9sYW5haS5jCkBAIC0yMjQxLDExICsyMjQxLDggQEAKIAltZW1jcHkoYXRtZGV2LT5lc2ksIGVlcHJvbV9tYWMobGFuYWkpLCBFU0lfTEVOKTsKIAlsYW5haV90aW1lZF9wb2xsX3N0YXJ0KGxhbmFpKTsKIAlwcmludGsoS0VSTl9OT1RJQ0UgREVWX0xBQkVMICIoaXRmICVkKTogcmV2LiVkLCBiYXNlPTB4JWx4LCBpcnE9JXUgIgotCSAgICAiKCUwMlgtJTAyWC0lMDJYLSUwMlgtJTAyWC0lMDJYKVxuIiwgbGFuYWktPm51bWJlciwKLQkgICAgKGludCkgbGFuYWktPnBjaS0+cmV2aXNpb24sICh1bnNpZ25lZCBsb25nKSBsYW5haS0+YmFzZSwKLQkgICAgbGFuYWktPnBjaS0+aXJxLAotCSAgICBhdG1kZXYtPmVzaVswXSwgYXRtZGV2LT5lc2lbMV0sIGF0bWRldi0+ZXNpWzJdLAotCSAgICBhdG1kZXYtPmVzaVszXSwgYXRtZGV2LT5lc2lbNF0sIGF0bWRldi0+ZXNpWzVdKTsKKwkJIiglcE1GKVxuIiwgbGFuYWktPm51bWJlciwgKGludCkgbGFuYWktPnBjaS0+cmV2aXNpb24sCisJCSh1bnNpZ25lZCBsb25nKSBsYW5haS0+YmFzZSwgbGFuYWktPnBjaS0+aXJxLCBhdG1kZXYtPmVzaSk7CiAJcHJpbnRrKEtFUk5fTk9USUNFIERFVl9MQUJFTCAiKGl0ZiAlZCk6IExBTkFJJXMsIHNlcmlhbG5vPSV1KDB4JVgpLCAiCiAJICAgICJib2FyZF9yZXY9JWRcbiIsIGxhbmFpLT5udW1iZXIsCiAJICAgIGxhbmFpLT50eXBlPT1sYW5haTIgPyAiMiIgOiAiSEIiLCAodW5zaWduZWQgaW50KSBsYW5haS0+c2VyaWFsbm8sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvY29yZS5jIGIvZHJpdmVycy9iYXNlL2NvcmUuYwppbmRleCA2ZWQ2NDU0Li43NjEzNTkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvY29yZS5jCisrKyBiL2RyaXZlcnMvYmFzZS9jb3JlLmMKQEAgLTMzOCw2ICszMzgsMzUgQEAKIAkJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZhdHRyc1tpXSk7CiB9CiAKK3N0YXRpYyBpbnQgZGV2aWNlX2FkZF9iaW5fYXR0cmlidXRlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0cnMpCit7CisJaW50IGVycm9yID0gMDsKKwlpbnQgaTsKKworCWlmIChhdHRycykgeworCQlmb3IgKGkgPSAwOyBhdHRyX25hbWUoYXR0cnNbaV0pOyBpKyspIHsKKwkJCWVycm9yID0gZGV2aWNlX2NyZWF0ZV9iaW5fZmlsZShkZXYsICZhdHRyc1tpXSk7CisJCQlpZiAoZXJyb3IpCisJCQkJYnJlYWs7CisJCX0KKwkJaWYgKGVycm9yKQorCQkJd2hpbGUgKC0taSA+PSAwKQorCQkJCWRldmljZV9yZW1vdmVfYmluX2ZpbGUoZGV2LCAmYXR0cnNbaV0pOworCX0KKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyB2b2lkIGRldmljZV9yZW1vdmVfYmluX2F0dHJpYnV0ZXMoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHJzKQoreworCWludCBpOworCisJaWYgKGF0dHJzKQorCQlmb3IgKGkgPSAwOyBhdHRyX25hbWUoYXR0cnNbaV0pOyBpKyspCisJCQlkZXZpY2VfcmVtb3ZlX2Jpbl9maWxlKGRldiwgJmF0dHJzW2ldKTsKK30KKwogc3RhdGljIGludCBkZXZpY2VfYWRkX2dyb3VwcyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkgICAgIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKipncm91cHMpCiB7CkBAIC0zNzgsMTIgKzQwNywxNSBAQAogCQllcnJvciA9IGRldmljZV9hZGRfYXR0cmlidXRlcyhkZXYsIGNsYXNzLT5kZXZfYXR0cnMpOwogCQlpZiAoZXJyb3IpCiAJCQlyZXR1cm4gZXJyb3I7CisJCWVycm9yID0gZGV2aWNlX2FkZF9iaW5fYXR0cmlidXRlcyhkZXYsIGNsYXNzLT5kZXZfYmluX2F0dHJzKTsKKwkJaWYgKGVycm9yKQorCQkJZ290byBlcnJfcmVtb3ZlX2NsYXNzX2F0dHJzOwogCX0KIAogCWlmICh0eXBlKSB7CiAJCWVycm9yID0gZGV2aWNlX2FkZF9ncm91cHMoZGV2LCB0eXBlLT5ncm91cHMpOwogCQlpZiAoZXJyb3IpCi0JCQlnb3RvIGVycl9yZW1vdmVfY2xhc3NfYXR0cnM7CisJCQlnb3RvIGVycl9yZW1vdmVfY2xhc3NfYmluX2F0dHJzOwogCX0KIAogCWVycm9yID0gZGV2aWNlX2FkZF9ncm91cHMoZGV2LCBkZXYtPmdyb3Vwcyk7CkBAIC0zOTUsNiArNDI3LDkgQEAKICBlcnJfcmVtb3ZlX3R5cGVfZ3JvdXBzOgogCWlmICh0eXBlKQogCQlkZXZpY2VfcmVtb3ZlX2dyb3VwcyhkZXYsIHR5cGUtPmdyb3Vwcyk7CisgZXJyX3JlbW92ZV9jbGFzc19iaW5fYXR0cnM6CisJaWYgKGNsYXNzKQorCQlkZXZpY2VfcmVtb3ZlX2Jpbl9hdHRyaWJ1dGVzKGRldiwgY2xhc3MtPmRldl9iaW5fYXR0cnMpOwogIGVycl9yZW1vdmVfY2xhc3NfYXR0cnM6CiAJaWYgKGNsYXNzKQogCQlkZXZpY2VfcmVtb3ZlX2F0dHJpYnV0ZXMoZGV2LCBjbGFzcy0+ZGV2X2F0dHJzKTsKQEAgLTQxMiw4ICs0NDcsMTAgQEAKIAlpZiAodHlwZSkKIAkJZGV2aWNlX3JlbW92ZV9ncm91cHMoZGV2LCB0eXBlLT5ncm91cHMpOwogCi0JaWYgKGNsYXNzKQorCWlmIChjbGFzcykgewogCQlkZXZpY2VfcmVtb3ZlX2F0dHJpYnV0ZXMoZGV2LCBjbGFzcy0+ZGV2X2F0dHJzKTsKKwkJZGV2aWNlX3JlbW92ZV9iaW5fYXR0cmlidXRlcyhkZXYsIGNsYXNzLT5kZXZfYmluX2F0dHJzKTsKKwl9CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3Bvd2VyL2dlbmVyaWNfb3BzLmMgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvZ2VuZXJpY19vcHMuYwppbmRleCA4MWYyYzg0Li40MmY5N2Y5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvcG93ZXIvZ2VuZXJpY19vcHMuYworKysgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvZ2VuZXJpY19vcHMuYwpAQCAtMzksNyArMzksNyBAQAogICoKICAqIElmIFBNIG9wZXJhdGlvbnMgYXJlIGRlZmluZWQgZm9yIHRoZSBAZGV2J3MgZHJpdmVyIGFuZCB0aGV5IGluY2x1ZGUKICAqIC0+cnVudGltZV9zdXNwZW5kKCksIGV4ZWN1dGUgaXQgYW5kIHJldHVybiBpdHMgZXJyb3IgY29kZS4gIE90aGVyd2lzZSwKLSAqIHJldHVybiAtRUlOVkFMLgorICogcmV0dXJuIDAuCiAgKi8KIGludCBwbV9nZW5lcmljX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CkBAIC01OCw3ICs1OCw3IEBACiAgKgogICogSWYgUE0gb3BlcmF0aW9ucyBhcmUgZGVmaW5lZCBmb3IgdGhlIEBkZXYncyBkcml2ZXIgYW5kIHRoZXkgaW5jbHVkZQogICogLT5ydW50aW1lX3Jlc3VtZSgpLCBleGVjdXRlIGl0IGFuZCByZXR1cm4gaXRzIGVycm9yIGNvZGUuICBPdGhlcndpc2UsCi0gKiByZXR1cm4gLUVJTlZBTC4KKyAqIHJldHVybiAwLgogICovCiBpbnQgcG1fZ2VuZXJpY19ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CkBAIC0xODUsNyArMTg1LDcgQEAKIAkJcmV0dXJuIDA7CiAKIAlyZXQgPSBjYWxsYmFjayhkZXYpOwotCWlmICghcmV0KSB7CisJaWYgKCFyZXQgJiYgcG1fcnVudGltZV9lbmFibGVkKGRldikpIHsKIAkJcG1fcnVudGltZV9kaXNhYmxlKGRldik7CiAJCXBtX3J1bnRpbWVfc2V0X2FjdGl2ZShkZXYpOwogCQlwbV9ydW50aW1lX2VuYWJsZShkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3Bvd2VyL21haW4uYyBiL2RyaXZlcnMvYmFzZS9wb3dlci9tYWluLmMKaW5kZXggZWFkM2U3OS4uMmE1MjI3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3Bvd2VyL21haW4uYworKysgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9hc3luYy5oPgorI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KIAogI2luY2x1ZGUgIi4uL2Jhc2UuaCIKICNpbmNsdWRlICJwb3dlci5oIgpAQCAtNDEsMTYgKzQyLDEzIEBACiAgKi8KIAogTElTVF9IRUFEKGRwbV9saXN0KTsKK0xJU1RfSEVBRChkcG1fcHJlcGFyZWRfbGlzdCk7CitMSVNUX0hFQUQoZHBtX3N1c3BlbmRlZF9saXN0KTsKK0xJU1RfSEVBRChkcG1fbm9pcnFfbGlzdCk7CiAKIHN0YXRpYyBERUZJTkVfTVVURVgoZHBtX2xpc3RfbXR4KTsKIHN0YXRpYyBwbV9tZXNzYWdlX3QgcG1fdHJhbnNpdGlvbjsKIAotLyoKLSAqIFNldCBvbmNlIHRoZSBwcmVwYXJhdGlvbiBvZiBkZXZpY2VzIGZvciBhIFBNIHRyYW5zaXRpb24gaGFzIHN0YXJ0ZWQsIHJlc2V0Ci0gKiBiZWZvcmUgc3RhcnRpbmcgdG8gcmVzdW1lIGRldmljZXMuICBQcm90ZWN0ZWQgYnkgZHBtX2xpc3RfbXR4LgotICovCi1zdGF0aWMgYm9vbCB0cmFuc2l0aW9uX3N0YXJ0ZWQ7Ci0KIHN0YXRpYyBpbnQgYXN5bmNfZXJyb3I7CiAKIC8qKgpAQCAtNTksNyArNTcsNyBAQAogICovCiB2b2lkIGRldmljZV9wbV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlkZXYtPnBvd2VyLnN0YXR1cyA9IERQTV9PTjsKKwlkZXYtPnBvd2VyLmluX3N1c3BlbmQgPSBmYWxzZTsKIAlpbml0X2NvbXBsZXRpb24oJmRldi0+cG93ZXIuY29tcGxldGlvbik7CiAJY29tcGxldGVfYWxsKCZkZXYtPnBvd2VyLmNvbXBsZXRpb24pOwogCWRldi0+cG93ZXIud2FrZXVwID0gTlVMTDsKQEAgLTkwLDIyICs4OCwxMSBAQAogdm9pZCBkZXZpY2VfcG1fYWRkKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlwcl9kZWJ1ZygiUE06IEFkZGluZyBpbmZvIGZvciAlczolc1xuIiwKLQkJIGRldi0+YnVzID8gZGV2LT5idXMtPm5hbWUgOiAiTm8gQnVzIiwKLQkJIGtvYmplY3RfbmFtZSgmZGV2LT5rb2JqKSk7CisJCSBkZXYtPmJ1cyA/IGRldi0+YnVzLT5uYW1lIDogIk5vIEJ1cyIsIGRldl9uYW1lKGRldikpOwogCW11dGV4X2xvY2soJmRwbV9saXN0X210eCk7Ci0JaWYgKGRldi0+cGFyZW50KSB7Ci0JCWlmIChkZXYtPnBhcmVudC0+cG93ZXIuc3RhdHVzID49IERQTV9TVVNQRU5ESU5HKQotCQkJZGV2X3dhcm4oZGV2LCAicGFyZW50ICVzIHNob3VsZCBub3QgYmUgc2xlZXBpbmdcbiIsCi0JCQkJIGRldl9uYW1lKGRldi0+cGFyZW50KSk7Ci0JfSBlbHNlIGlmICh0cmFuc2l0aW9uX3N0YXJ0ZWQpIHsKLQkJLyoKLQkJICogV2UgcmVmdXNlIHRvIHJlZ2lzdGVyIHBhcmVudGxlc3MgZGV2aWNlcyB3aGlsZSBhIFBNCi0JCSAqIHRyYW5zaXRpb24gaXMgaW4gcHJvZ3Jlc3MgaW4gb3JkZXIgdG8gYXZvaWQgbGVhdmluZyB0aGVtCi0JCSAqIHVuaGFuZGxlZCBkb3duIHRoZSByb2FkCi0JCSAqLwotCQlkZXZfV0FSTihkZXYsICJQYXJlbnRsZXNzIGRldmljZSByZWdpc3RlcmVkIGR1cmluZyBhIFBNIHRyYW5zYWN0aW9uXG4iKTsKLQl9Ci0KKwlpZiAoZGV2LT5wYXJlbnQgJiYgZGV2LT5wYXJlbnQtPnBvd2VyLmluX3N1c3BlbmQpCisJCWRldl93YXJuKGRldiwgInBhcmVudCAlcyBzaG91bGQgbm90IGJlIHNsZWVwaW5nXG4iLAorCQkJZGV2X25hbWUoZGV2LT5wYXJlbnQpKTsKIAlsaXN0X2FkZF90YWlsKCZkZXYtPnBvd2VyLmVudHJ5LCAmZHBtX2xpc3QpOwogCW11dGV4X3VubG9jaygmZHBtX2xpc3RfbXR4KTsKIH0KQEAgLTExNyw4ICsxMDQsNyBAQAogdm9pZCBkZXZpY2VfcG1fcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlwcl9kZWJ1ZygiUE06IFJlbW92aW5nIGluZm8gZm9yICVzOiVzXG4iLAotCQkgZGV2LT5idXMgPyBkZXYtPmJ1cy0+bmFtZSA6ICJObyBCdXMiLAotCQkga29iamVjdF9uYW1lKCZkZXYtPmtvYmopKTsKKwkJIGRldi0+YnVzID8gZGV2LT5idXMtPm5hbWUgOiAiTm8gQnVzIiwgZGV2X25hbWUoZGV2KSk7CiAJY29tcGxldGVfYWxsKCZkZXYtPnBvd2VyLmNvbXBsZXRpb24pOwogCW11dGV4X2xvY2soJmRwbV9saXN0X210eCk7CiAJbGlzdF9kZWxfaW5pdCgmZGV2LT5wb3dlci5lbnRyeSk7CkBAIC0xMzUsMTAgKzEyMSw4IEBACiB2b2lkIGRldmljZV9wbV9tb3ZlX2JlZm9yZShzdHJ1Y3QgZGV2aWNlICpkZXZhLCBzdHJ1Y3QgZGV2aWNlICpkZXZiKQogewogCXByX2RlYnVnKCJQTTogTW92aW5nICVzOiVzIGJlZm9yZSAlczolc1xuIiwKLQkJIGRldmEtPmJ1cyA/IGRldmEtPmJ1cy0+bmFtZSA6ICJObyBCdXMiLAotCQkga29iamVjdF9uYW1lKCZkZXZhLT5rb2JqKSwKLQkJIGRldmItPmJ1cyA/IGRldmItPmJ1cy0+bmFtZSA6ICJObyBCdXMiLAotCQkga29iamVjdF9uYW1lKCZkZXZiLT5rb2JqKSk7CisJCSBkZXZhLT5idXMgPyBkZXZhLT5idXMtPm5hbWUgOiAiTm8gQnVzIiwgZGV2X25hbWUoZGV2YSksCisJCSBkZXZiLT5idXMgPyBkZXZiLT5idXMtPm5hbWUgOiAiTm8gQnVzIiwgZGV2X25hbWUoZGV2YikpOwogCS8qIERlbGV0ZSBkZXZhIGZyb20gZHBtX2xpc3QgYW5kIHJlaW5zZXJ0IGJlZm9yZSBkZXZiLiAqLwogCWxpc3RfbW92ZV90YWlsKCZkZXZhLT5wb3dlci5lbnRyeSwgJmRldmItPnBvd2VyLmVudHJ5KTsKIH0KQEAgLTE1MSwxMCArMTM1LDggQEAKIHZvaWQgZGV2aWNlX3BtX21vdmVfYWZ0ZXIoc3RydWN0IGRldmljZSAqZGV2YSwgc3RydWN0IGRldmljZSAqZGV2YikKIHsKIAlwcl9kZWJ1ZygiUE06IE1vdmluZyAlczolcyBhZnRlciAlczolc1xuIiwKLQkJIGRldmEtPmJ1cyA/IGRldmEtPmJ1cy0+bmFtZSA6ICJObyBCdXMiLAotCQkga29iamVjdF9uYW1lKCZkZXZhLT5rb2JqKSwKLQkJIGRldmItPmJ1cyA/IGRldmItPmJ1cy0+bmFtZSA6ICJObyBCdXMiLAotCQkga29iamVjdF9uYW1lKCZkZXZiLT5rb2JqKSk7CisJCSBkZXZhLT5idXMgPyBkZXZhLT5idXMtPm5hbWUgOiAiTm8gQnVzIiwgZGV2X25hbWUoZGV2YSksCisJCSBkZXZiLT5idXMgPyBkZXZiLT5idXMtPm5hbWUgOiAiTm8gQnVzIiwgZGV2X25hbWUoZGV2YikpOwogCS8qIERlbGV0ZSBkZXZhIGZyb20gZHBtX2xpc3QgYW5kIHJlaW5zZXJ0IGFmdGVyIGRldmIuICovCiAJbGlzdF9tb3ZlKCZkZXZhLT5wb3dlci5lbnRyeSwgJmRldmItPnBvd2VyLmVudHJ5KTsKIH0KQEAgLTE2Niw4ICsxNDgsNyBAQAogdm9pZCBkZXZpY2VfcG1fbW92ZV9sYXN0KHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlwcl9kZWJ1ZygiUE06IE1vdmluZyAlczolcyB0byBlbmQgb2YgbGlzdFxuIiwKLQkJIGRldi0+YnVzID8gZGV2LT5idXMtPm5hbWUgOiAiTm8gQnVzIiwKLQkJIGtvYmplY3RfbmFtZSgmZGV2LT5rb2JqKSk7CisJCSBkZXYtPmJ1cyA/IGRldi0+YnVzLT5uYW1lIDogIk5vIEJ1cyIsIGRldl9uYW1lKGRldikpOwogCWxpc3RfbW92ZV90YWlsKCZkZXYtPnBvd2VyLmVudHJ5LCAmZHBtX2xpc3QpOwogfQogCkBAIC0zMDMsNyArMjg0LDcgQEAKIAkJCXBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlpbnQgZXJyb3IgPSAwOwotCWt0aW1lX3QgY2FsbHRpbWUsIGRlbHRhLCByZXR0aW1lOworCWt0aW1lX3QgY2FsbHRpbWUgPSBrdGltZV9zZXQoMCwgMCksIGRlbHRhLCByZXR0aW1lOwogCiAJaWYgKGluaXRjYWxsX2RlYnVnKSB7CiAJCXByX2luZm8oImNhbGxpbmcgICVzKyBAICVpLCBwYXJlbnQ6ICVzXG4iLApAQCAtNDA1LDcgKzM4Niw3IEBACiAJCQlpbnQgZXJyb3IpCiB7CiAJcHJpbnRrKEtFUk5fRVJSICJQTTogRGV2aWNlICVzIGZhaWxlZCB0byAlcyVzOiBlcnJvciAlZFxuIiwKLQkJa29iamVjdF9uYW1lKCZkZXYtPmtvYmopLCBwbV92ZXJiKHN0YXRlLmV2ZW50KSwgaW5mbywgZXJyb3IpOworCQlkZXZfbmFtZShkZXYpLCBwbV92ZXJiKHN0YXRlLmV2ZW50KSwgaW5mbywgZXJyb3IpOwogfQogCiBzdGF0aWMgdm9pZCBkcG1fc2hvd190aW1lKGt0aW1lX3Qgc3RhcnR0aW1lLCBwbV9tZXNzYWdlX3Qgc3RhdGUsIGNoYXIgKmluZm8pCkBAIC00NzUsMzMgKzQ1NiwyNCBAQAogICovCiB2b2lkIGRwbV9yZXN1bWVfbm9pcnEocG1fbWVzc2FnZV90IHN0YXRlKQogewotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAlrdGltZV90IHN0YXJ0dGltZSA9IGt0aW1lX2dldCgpOwogCi0JSU5JVF9MSVNUX0hFQUQoJmxpc3QpOwogCW11dGV4X2xvY2soJmRwbV9saXN0X210eCk7Ci0JdHJhbnNpdGlvbl9zdGFydGVkID0gZmFsc2U7Ci0Jd2hpbGUgKCFsaXN0X2VtcHR5KCZkcG1fbGlzdCkpIHsKLQkJc3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKGRwbV9saXN0Lm5leHQpOworCXdoaWxlICghbGlzdF9lbXB0eSgmZHBtX25vaXJxX2xpc3QpKSB7CisJCXN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShkcG1fbm9pcnFfbGlzdC5uZXh0KTsKKwkJaW50IGVycm9yOwogCiAJCWdldF9kZXZpY2UoZGV2KTsKLQkJaWYgKGRldi0+cG93ZXIuc3RhdHVzID4gRFBNX09GRikgewotCQkJaW50IGVycm9yOworCQlsaXN0X21vdmVfdGFpbCgmZGV2LT5wb3dlci5lbnRyeSwgJmRwbV9zdXNwZW5kZWRfbGlzdCk7CisJCW11dGV4X3VubG9jaygmZHBtX2xpc3RfbXR4KTsKIAotCQkJZGV2LT5wb3dlci5zdGF0dXMgPSBEUE1fT0ZGOwotCQkJbXV0ZXhfdW5sb2NrKCZkcG1fbGlzdF9tdHgpOworCQllcnJvciA9IGRldmljZV9yZXN1bWVfbm9pcnEoZGV2LCBzdGF0ZSk7CisJCWlmIChlcnJvcikKKwkJCXBtX2Rldl9lcnIoZGV2LCBzdGF0ZSwgIiBlYXJseSIsIGVycm9yKTsKIAotCQkJZXJyb3IgPSBkZXZpY2VfcmVzdW1lX25vaXJxKGRldiwgc3RhdGUpOwotCi0JCQltdXRleF9sb2NrKCZkcG1fbGlzdF9tdHgpOwotCQkJaWYgKGVycm9yKQotCQkJCXBtX2Rldl9lcnIoZGV2LCBzdGF0ZSwgIiBlYXJseSIsIGVycm9yKTsKLQkJfQotCQlpZiAoIWxpc3RfZW1wdHkoJmRldi0+cG93ZXIuZW50cnkpKQotCQkJbGlzdF9tb3ZlX3RhaWwoJmRldi0+cG93ZXIuZW50cnksICZsaXN0KTsKKwkJbXV0ZXhfbG9jaygmZHBtX2xpc3RfbXR4KTsKIAkJcHV0X2RldmljZShkZXYpOwogCX0KLQlsaXN0X3NwbGljZSgmbGlzdCwgJmRwbV9saXN0KTsKIAltdXRleF91bmxvY2soJmRwbV9saXN0X210eCk7CiAJZHBtX3Nob3dfdGltZShzdGFydHRpbWUsIHN0YXRlLCAiZWFybHkiKTsKIAlyZXN1bWVfZGV2aWNlX2lycXMoKTsKQEAgLTU0NCw3ICs1MTYsNyBAQAogCWRwbV93YWl0KGRldi0+cGFyZW50LCBhc3luYyk7CiAJZGV2aWNlX2xvY2soZGV2KTsKIAotCWRldi0+cG93ZXIuc3RhdHVzID0gRFBNX1JFU1VNSU5HOworCWRldi0+cG93ZXIuaW5fc3VzcGVuZCA9IGZhbHNlOwogCiAJaWYgKGRldi0+YnVzKSB7CiAJCWlmIChkZXYtPmJ1cy0+cG0pIHsKQEAgLTYxMCwxOSArNTgyLDE0IEBACiAgKi8KIHN0YXRpYyB2b2lkIGRwbV9yZXN1bWUocG1fbWVzc2FnZV90IHN0YXRlKQogewotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAJa3RpbWVfdCBzdGFydHRpbWUgPSBrdGltZV9nZXQoKTsKIAotCUlOSVRfTElTVF9IRUFEKCZsaXN0KTsKIAltdXRleF9sb2NrKCZkcG1fbGlzdF9tdHgpOwogCXBtX3RyYW5zaXRpb24gPSBzdGF0ZTsKIAlhc3luY19lcnJvciA9IDA7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmRwbV9saXN0LCBwb3dlci5lbnRyeSkgewotCQlpZiAoZGV2LT5wb3dlci5zdGF0dXMgPCBEUE1fT0ZGKQotCQkJY29udGludWU7Ci0KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmRwbV9zdXNwZW5kZWRfbGlzdCwgcG93ZXIuZW50cnkpIHsKIAkJSU5JVF9DT01QTEVUSU9OKGRldi0+cG93ZXIuY29tcGxldGlvbik7CiAJCWlmIChpc19hc3luYyhkZXYpKSB7CiAJCQlnZXRfZGV2aWNlKGRldik7CkBAIC02MzAsMjggKzU5NywyNCBAQAogCQl9CiAJfQogCi0Jd2hpbGUgKCFsaXN0X2VtcHR5KCZkcG1fbGlzdCkpIHsKLQkJZGV2ID0gdG9fZGV2aWNlKGRwbV9saXN0Lm5leHQpOworCXdoaWxlICghbGlzdF9lbXB0eSgmZHBtX3N1c3BlbmRlZF9saXN0KSkgeworCQlkZXYgPSB0b19kZXZpY2UoZHBtX3N1c3BlbmRlZF9saXN0Lm5leHQpOwogCQlnZXRfZGV2aWNlKGRldik7Ci0JCWlmIChkZXYtPnBvd2VyLnN0YXR1cyA+PSBEUE1fT0ZGICYmICFpc19hc3luYyhkZXYpKSB7CisJCWlmICghaXNfYXN5bmMoZGV2KSkgewogCQkJaW50IGVycm9yOwogCiAJCQltdXRleF91bmxvY2soJmRwbV9saXN0X210eCk7CiAKIAkJCWVycm9yID0gZGV2aWNlX3Jlc3VtZShkZXYsIHN0YXRlLCBmYWxzZSk7Ci0KLQkJCW11dGV4X2xvY2soJmRwbV9saXN0X210eCk7CiAJCQlpZiAoZXJyb3IpCiAJCQkJcG1fZGV2X2VycihkZXYsIHN0YXRlLCAiIiwgZXJyb3IpOwotCQl9IGVsc2UgaWYgKGRldi0+cG93ZXIuc3RhdHVzID09IERQTV9TVVNQRU5ESU5HKSB7Ci0JCQkvKiBBbGxvdyBuZXcgY2hpbGRyZW4gb2YgdGhlIGRldmljZSB0byBiZSByZWdpc3RlcmVkICovCi0JCQlkZXYtPnBvd2VyLnN0YXR1cyA9IERQTV9SRVNVTUlORzsKKworCQkJbXV0ZXhfbG9jaygmZHBtX2xpc3RfbXR4KTsKIAkJfQogCQlpZiAoIWxpc3RfZW1wdHkoJmRldi0+cG93ZXIuZW50cnkpKQotCQkJbGlzdF9tb3ZlX3RhaWwoJmRldi0+cG93ZXIuZW50cnksICZsaXN0KTsKKwkJCWxpc3RfbW92ZV90YWlsKCZkZXYtPnBvd2VyLmVudHJ5LCAmZHBtX3ByZXBhcmVkX2xpc3QpOwogCQlwdXRfZGV2aWNlKGRldik7CiAJfQotCWxpc3Rfc3BsaWNlKCZsaXN0LCAmZHBtX2xpc3QpOwogCW11dGV4X3VubG9jaygmZHBtX2xpc3RfbXR4KTsKIAlhc3luY19zeW5jaHJvbml6ZV9mdWxsKCk7CiAJZHBtX3Nob3dfdGltZShzdGFydHRpbWUsIHN0YXRlLCBOVUxMKTsKQEAgLTY5NywyMiArNjYwLDE4IEBACiAKIAlJTklUX0xJU1RfSEVBRCgmbGlzdCk7CiAJbXV0ZXhfbG9jaygmZHBtX2xpc3RfbXR4KTsKLQl0cmFuc2l0aW9uX3N0YXJ0ZWQgPSBmYWxzZTsKLQl3aGlsZSAoIWxpc3RfZW1wdHkoJmRwbV9saXN0KSkgewotCQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UoZHBtX2xpc3QucHJldik7CisJd2hpbGUgKCFsaXN0X2VtcHR5KCZkcG1fcHJlcGFyZWRfbGlzdCkpIHsKKwkJc3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKGRwbV9wcmVwYXJlZF9saXN0LnByZXYpOwogCiAJCWdldF9kZXZpY2UoZGV2KTsKLQkJaWYgKGRldi0+cG93ZXIuc3RhdHVzID4gRFBNX09OKSB7Ci0JCQlkZXYtPnBvd2VyLnN0YXR1cyA9IERQTV9PTjsKLQkJCW11dGV4X3VubG9jaygmZHBtX2xpc3RfbXR4KTsKKwkJZGV2LT5wb3dlci5pbl9zdXNwZW5kID0gZmFsc2U7CisJCWxpc3RfbW92ZSgmZGV2LT5wb3dlci5lbnRyeSwgJmxpc3QpOworCQltdXRleF91bmxvY2soJmRwbV9saXN0X210eCk7CiAKLQkJCWRldmljZV9jb21wbGV0ZShkZXYsIHN0YXRlKTsKLQkJCXBtX3J1bnRpbWVfcHV0X3N5bmMoZGV2KTsKKwkJZGV2aWNlX2NvbXBsZXRlKGRldiwgc3RhdGUpOworCQlwbV9ydW50aW1lX3B1dF9zeW5jKGRldik7CiAKLQkJCW11dGV4X2xvY2soJmRwbV9saXN0X210eCk7Ci0JCX0KLQkJaWYgKCFsaXN0X2VtcHR5KCZkZXYtPnBvd2VyLmVudHJ5KSkKLQkJCWxpc3RfbW92ZSgmZGV2LT5wb3dlci5lbnRyeSwgJmxpc3QpOworCQltdXRleF9sb2NrKCZkcG1fbGlzdF9tdHgpOwogCQlwdXRfZGV2aWNlKGRldik7CiAJfQogCWxpc3Rfc3BsaWNlKCZsaXN0LCAmZHBtX2xpc3QpOwpAQCAtODAyLDE1ICs3NjEsMTMgQEAKICAqLwogaW50IGRwbV9zdXNwZW5kX25vaXJxKHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJa3RpbWVfdCBzdGFydHRpbWUgPSBrdGltZV9nZXQoKTsKIAlpbnQgZXJyb3IgPSAwOwogCi0JSU5JVF9MSVNUX0hFQUQoJmxpc3QpOwogCXN1c3BlbmRfZGV2aWNlX2lycXMoKTsKIAltdXRleF9sb2NrKCZkcG1fbGlzdF9tdHgpOwotCXdoaWxlICghbGlzdF9lbXB0eSgmZHBtX2xpc3QpKSB7Ci0JCXN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShkcG1fbGlzdC5wcmV2KTsKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmRwbV9zdXNwZW5kZWRfbGlzdCkpIHsKKwkJc3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKGRwbV9zdXNwZW5kZWRfbGlzdC5wcmV2KTsKIAogCQlnZXRfZGV2aWNlKGRldik7CiAJCW11dGV4X3VubG9jaygmZHBtX2xpc3RfbXR4KTsKQEAgLTgyMywxMiArNzgwLDEwIEBACiAJCQlwdXRfZGV2aWNlKGRldik7CiAJCQlicmVhazsKIAkJfQotCQlkZXYtPnBvd2VyLnN0YXR1cyA9IERQTV9PRkZfSVJROwogCQlpZiAoIWxpc3RfZW1wdHkoJmRldi0+cG93ZXIuZW50cnkpKQotCQkJbGlzdF9tb3ZlKCZkZXYtPnBvd2VyLmVudHJ5LCAmbGlzdCk7CisJCQlsaXN0X21vdmUoJmRldi0+cG93ZXIuZW50cnksICZkcG1fbm9pcnFfbGlzdCk7CiAJCXB1dF9kZXZpY2UoZGV2KTsKIAl9Ci0JbGlzdF9zcGxpY2VfdGFpbCgmbGlzdCwgJmRwbV9saXN0KTsKIAltdXRleF91bmxvY2soJmRwbV9saXN0X210eCk7CiAJaWYgKGVycm9yKQogCQlkcG1fcmVzdW1lX25vaXJxKHJlc3VtZV9ldmVudChzdGF0ZSkpOwpAQCAtODc2LDYgKzgzMSwxMSBAQAogCWlmIChhc3luY19lcnJvcikKIAkJZ290byBFbmQ7CiAKKwlpZiAocG1fd2FrZXVwX3BlbmRpbmcoKSkgeworCQlhc3luY19lcnJvciA9IC1FQlVTWTsKKwkJZ290byBFbmQ7CisJfQorCiAJaWYgKGRldi0+Y2xhc3MpIHsKIAkJaWYgKGRldi0+Y2xhc3MtPnBtKSB7CiAJCQlwbV9kZXZfZGJnKGRldiwgc3RhdGUsICJjbGFzcyAiKTsKQEAgLTkwNyw5ICs4NjcsNiBAQAogCQl9CiAJfQogCi0JaWYgKCFlcnJvcikKLQkJZGV2LT5wb3dlci5zdGF0dXMgPSBEUE1fT0ZGOwotCiAgRW5kOgogCWRldmljZV91bmxvY2soZGV2KTsKIAljb21wbGV0ZV9hbGwoJmRldi0+cG93ZXIuY29tcGxldGlvbik7CkBAIC05NTEsMTYgKzkwOCwxNCBAQAogICovCiBzdGF0aWMgaW50IGRwbV9zdXNwZW5kKHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJa3RpbWVfdCBzdGFydHRpbWUgPSBrdGltZV9nZXQoKTsKIAlpbnQgZXJyb3IgPSAwOwogCi0JSU5JVF9MSVNUX0hFQUQoJmxpc3QpOwogCW11dGV4X2xvY2soJmRwbV9saXN0X210eCk7CiAJcG1fdHJhbnNpdGlvbiA9IHN0YXRlOwogCWFzeW5jX2Vycm9yID0gMDsKLQl3aGlsZSAoIWxpc3RfZW1wdHkoJmRwbV9saXN0KSkgewotCQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UoZHBtX2xpc3QucHJldik7CisJd2hpbGUgKCFsaXN0X2VtcHR5KCZkcG1fcHJlcGFyZWRfbGlzdCkpIHsKKwkJc3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKGRwbV9wcmVwYXJlZF9saXN0LnByZXYpOwogCiAJCWdldF9kZXZpY2UoZGV2KTsKIAkJbXV0ZXhfdW5sb2NrKCZkcG1fbGlzdF9tdHgpOwpAQCAtOTc0LDEyICs5MjksMTEgQEAKIAkJCWJyZWFrOwogCQl9CiAJCWlmICghbGlzdF9lbXB0eSgmZGV2LT5wb3dlci5lbnRyeSkpCi0JCQlsaXN0X21vdmUoJmRldi0+cG93ZXIuZW50cnksICZsaXN0KTsKKwkJCWxpc3RfbW92ZSgmZGV2LT5wb3dlci5lbnRyeSwgJmRwbV9zdXNwZW5kZWRfbGlzdCk7CiAJCXB1dF9kZXZpY2UoZGV2KTsKIAkJaWYgKGFzeW5jX2Vycm9yKQogCQkJYnJlYWs7CiAJfQotCWxpc3Rfc3BsaWNlKCZsaXN0LCBkcG1fbGlzdC5wcmV2KTsKIAltdXRleF91bmxvY2soJmRwbV9saXN0X210eCk7CiAJYXN5bmNfc3luY2hyb25pemVfZnVsbCgpOwogCWlmICghZXJyb3IpCkBAIC0xMDM4LDIyICs5OTIsMjAgQEAKICAqLwogc3RhdGljIGludCBkcG1fcHJlcGFyZShwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCWludCBlcnJvciA9IDA7CiAKLQlJTklUX0xJU1RfSEVBRCgmbGlzdCk7CiAJbXV0ZXhfbG9jaygmZHBtX2xpc3RfbXR4KTsKLQl0cmFuc2l0aW9uX3N0YXJ0ZWQgPSB0cnVlOwogCXdoaWxlICghbGlzdF9lbXB0eSgmZHBtX2xpc3QpKSB7CiAJCXN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShkcG1fbGlzdC5uZXh0KTsKIAogCQlnZXRfZGV2aWNlKGRldik7Ci0JCWRldi0+cG93ZXIuc3RhdHVzID0gRFBNX1BSRVBBUklORzsKIAkJbXV0ZXhfdW5sb2NrKCZkcG1fbGlzdF9tdHgpOwogCiAJCXBtX3J1bnRpbWVfZ2V0X25vcmVzdW1lKGRldik7Ci0JCWlmIChwbV9ydW50aW1lX2JhcnJpZXIoZGV2KSAmJiBkZXZpY2VfbWF5X3dha2V1cChkZXYpKSB7Ci0JCQkvKiBXYWtlLXVwIHJlcXVlc3RlZCBkdXJpbmcgc3lzdGVtIHNsZWVwIHRyYW5zaXRpb24uICovCisJCWlmIChwbV9ydW50aW1lX2JhcnJpZXIoZGV2KSAmJiBkZXZpY2VfbWF5X3dha2V1cChkZXYpKQorCQkJcG1fd2FrZXVwX2V2ZW50KGRldiwgMCk7CisKKwkJaWYgKHBtX3dha2V1cF9wZW5kaW5nKCkpIHsKIAkJCXBtX3J1bnRpbWVfcHV0X3N5bmMoZGV2KTsKIAkJCWVycm9yID0gLUVCVVNZOwogCQl9IGVsc2UgewpAQCAtMTA2MiwyNCArMTAxNCwyMiBAQAogCiAJCW11dGV4X2xvY2soJmRwbV9saXN0X210eCk7CiAJCWlmIChlcnJvcikgewotCQkJZGV2LT5wb3dlci5zdGF0dXMgPSBEUE1fT047CiAJCQlpZiAoZXJyb3IgPT0gLUVBR0FJTikgewogCQkJCXB1dF9kZXZpY2UoZGV2KTsKIAkJCQllcnJvciA9IDA7CiAJCQkJY29udGludWU7CiAJCQl9Ci0JCQlwcmludGsoS0VSTl9FUlIgIlBNOiBGYWlsZWQgdG8gcHJlcGFyZSBkZXZpY2UgJXMgIgotCQkJCSJmb3IgcG93ZXIgdHJhbnNpdGlvbjogZXJyb3IgJWRcbiIsCi0JCQkJa29iamVjdF9uYW1lKCZkZXYtPmtvYmopLCBlcnJvcik7CisJCQlwcmludGsoS0VSTl9JTkZPICJQTTogRGV2aWNlICVzIG5vdCBwcmVwYXJlZCAiCisJCQkJImZvciBwb3dlciB0cmFuc2l0aW9uOiBjb2RlICVkXG4iLAorCQkJCWRldl9uYW1lKGRldiksIGVycm9yKTsKIAkJCXB1dF9kZXZpY2UoZGV2KTsKIAkJCWJyZWFrOwogCQl9Ci0JCWRldi0+cG93ZXIuc3RhdHVzID0gRFBNX1NVU1BFTkRJTkc7CisJCWRldi0+cG93ZXIuaW5fc3VzcGVuZCA9IHRydWU7CiAJCWlmICghbGlzdF9lbXB0eSgmZGV2LT5wb3dlci5lbnRyeSkpCi0JCQlsaXN0X21vdmVfdGFpbCgmZGV2LT5wb3dlci5lbnRyeSwgJmxpc3QpOworCQkJbGlzdF9tb3ZlX3RhaWwoJmRldi0+cG93ZXIuZW50cnksICZkcG1fcHJlcGFyZWRfbGlzdCk7CiAJCXB1dF9kZXZpY2UoZGV2KTsKIAl9Ci0JbGlzdF9zcGxpY2UoJmxpc3QsICZkcG1fbGlzdCk7CiAJbXV0ZXhfdW5sb2NrKCZkcG1fbGlzdF9tdHgpOwogCXJldHVybiBlcnJvcjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9wb3dlci9ydW50aW1lLmMgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvcnVudGltZS5jCmluZGV4IDAyYzY1MmIuLjY1NjQ5M2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wb3dlci9ydW50aW1lLmMKKysrIGIvZHJpdmVycy9iYXNlL3Bvd2VyL3J1bnRpbWUuYwpAQCAtMjUwLDEzICsyNTAsMTYgQEAKIAlpZiAoIWNiKQogCQlyZXR1cm4gLUVOT1NZUzsKIAotCXNwaW5fdW5sb2NrX2lycSgmZGV2LT5wb3dlci5sb2NrKTsKKwlpZiAoZGV2LT5wb3dlci5pcnFfc2FmZSkgeworCQlyZXR2YWwgPSBjYihkZXYpOworCX0gZWxzZSB7CisJCXNwaW5fdW5sb2NrX2lycSgmZGV2LT5wb3dlci5sb2NrKTsKIAotCXJldHZhbCA9IGNiKGRldik7CisJCXJldHZhbCA9IGNiKGRldik7CiAKLQlzcGluX2xvY2tfaXJxKCZkZXYtPnBvd2VyLmxvY2spOworCQlzcGluX2xvY2tfaXJxKCZkZXYtPnBvd2VyLmxvY2spOworCX0KIAlkZXYtPnBvd2VyLnJ1bnRpbWVfZXJyb3IgPSByZXR2YWw7Ci0KIAlyZXR1cm4gcmV0dmFsOwogfQogCkBAIC00MDQsNyArNDA3LDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKHBhcmVudCAmJiAhcGFyZW50LT5wb3dlci5pZ25vcmVfY2hpbGRyZW4pIHsKKwlpZiAocGFyZW50ICYmICFwYXJlbnQtPnBvd2VyLmlnbm9yZV9jaGlsZHJlbiAmJiAhZGV2LT5wb3dlci5pcnFfc2FmZSkgewogCQlzcGluX3VubG9ja19pcnEoJmRldi0+cG93ZXIubG9jayk7CiAKIAkJcG1fcmVxdWVzdF9pZGxlKHBhcmVudCk7CkBAIC01MjcsMTAgKzUzMCwxMyBAQAogCiAJaWYgKCFwYXJlbnQgJiYgZGV2LT5wYXJlbnQpIHsKIAkJLyoKLQkJICogSW5jcmVtZW50IHRoZSBwYXJlbnQncyByZXN1bWUgY291bnRlciBhbmQgcmVzdW1lIGl0IGlmCi0JCSAqIG5lY2Vzc2FyeS4KKwkJICogSW5jcmVtZW50IHRoZSBwYXJlbnQncyB1c2FnZSBjb3VudGVyIGFuZCByZXN1bWUgaXQgaWYKKwkJICogbmVjZXNzYXJ5LiAgTm90IG5lZWRlZCBpZiBkZXYgaXMgaXJxLXNhZmU7IHRoZW4gdGhlCisJCSAqIHBhcmVudCBpcyBwZXJtYW5lbnRseSByZXN1bWVkLgogCQkgKi8KIAkJcGFyZW50ID0gZGV2LT5wYXJlbnQ7CisJCWlmIChkZXYtPnBvd2VyLmlycV9zYWZlKQorCQkJZ290byBza2lwX3BhcmVudDsKIAkJc3Bpbl91bmxvY2soJmRldi0+cG93ZXIubG9jayk7CiAKIAkJcG1fcnVudGltZV9nZXRfbm9yZXN1bWUocGFyZW50KTsKQEAgLTU1Myw2ICs1NTksNyBAQAogCQkJZ290byBvdXQ7CiAJCWdvdG8gcmVwZWF0OwogCX0KKyBza2lwX3BhcmVudDoKIAogCWlmIChkZXYtPnBvd2VyLm5vX2NhbGxiYWNrcykKIAkJZ290byBub19jYWxsYmFjazsJLyogQXNzdW1lIHN1Y2Nlc3MuICovCkBAIC01ODQsNyArNTkxLDcgQEAKIAkJcnBtX2lkbGUoZGV2LCBSUE1fQVNZTkMpOwogCiAgb3V0OgotCWlmIChwYXJlbnQpIHsKKwlpZiAocGFyZW50ICYmICFkZXYtPnBvd2VyLmlycV9zYWZlKSB7CiAJCXNwaW5fdW5sb2NrX2lycSgmZGV2LT5wb3dlci5sb2NrKTsKIAogCQlwbV9ydW50aW1lX3B1dChwYXJlbnQpOwpAQCAtMTA2NSw3ICsxMDcyLDYgQEAKICAqIFNldCB0aGUgcG93ZXIubm9fY2FsbGJhY2tzIGZsYWcsIHdoaWNoIHRlbGxzIHRoZSBQTSBjb3JlIHRoYXQgdGhpcwogICogZGV2aWNlIGlzIHBvd2VyLW1hbmFnZWQgdGhyb3VnaCBpdHMgcGFyZW50IGFuZCBoYXMgbm8gcnVuLXRpbWUgUE0KICAqIGNhbGxiYWNrcyBvZiBpdHMgb3duLiAgVGhlIHJ1bi10aW1lIHN5c2ZzIGF0dHJpYnV0ZXMgd2lsbCBiZSByZW1vdmVkLgotICoKICAqLwogdm9pZCBwbV9ydW50aW1lX25vX2NhbGxiYWNrcyhzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CkBAIC0xMDc4LDYgKzEwODQsMjcgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHBtX3J1bnRpbWVfbm9fY2FsbGJhY2tzKTsKIAogLyoqCisgKiBwbV9ydW50aW1lX2lycV9zYWZlIC0gTGVhdmUgaW50ZXJydXB0cyBkaXNhYmxlZCBkdXJpbmcgY2FsbGJhY2tzLgorICogQGRldjogRGV2aWNlIHRvIGhhbmRsZQorICoKKyAqIFNldCB0aGUgcG93ZXIuaXJxX3NhZmUgZmxhZywgd2hpY2ggdGVsbHMgdGhlIFBNIGNvcmUgdGhhdCB0aGUKKyAqIC0+cnVudGltZV9zdXNwZW5kKCkgYW5kIC0+cnVudGltZV9yZXN1bWUoKSBjYWxsYmFja3MgZm9yIHRoaXMgZGV2aWNlIHNob3VsZAorICogYWx3YXlzIGJlIGludm9rZWQgd2l0aCB0aGUgc3BpbmxvY2sgaGVsZCBhbmQgaW50ZXJydXB0cyBkaXNhYmxlZC4gIEl0IGFsc28KKyAqIGNhdXNlcyB0aGUgcGFyZW50J3MgdXNhZ2UgY291bnRlciB0byBiZSBwZXJtYW5lbnRseSBpbmNyZW1lbnRlZCwgcHJldmVudGluZworICogdGhlIHBhcmVudCBmcm9tIHJ1bnRpbWUgc3VzcGVuZGluZyAtLSBvdGhlcndpc2UgYW4gaXJxLXNhZmUgY2hpbGQgbWlnaHQgaGF2ZQorICogdG8gd2FpdCBmb3IgYSBub24taXJxLXNhZmUgcGFyZW50LgorICovCit2b2lkIHBtX3J1bnRpbWVfaXJxX3NhZmUoc3RydWN0IGRldmljZSAqZGV2KQoreworCWlmIChkZXYtPnBhcmVudCkKKwkJcG1fcnVudGltZV9nZXRfc3luYyhkZXYtPnBhcmVudCk7CisJc3Bpbl9sb2NrX2lycSgmZGV2LT5wb3dlci5sb2NrKTsKKwlkZXYtPnBvd2VyLmlycV9zYWZlID0gMTsKKwlzcGluX3VubG9ja19pcnEoJmRldi0+cG93ZXIubG9jayk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwbV9ydW50aW1lX2lycV9zYWZlKTsKKworLyoqCiAgKiB1cGRhdGVfYXV0b3N1c3BlbmQgLSBIYW5kbGUgYSBjaGFuZ2UgdG8gYSBkZXZpY2UncyBhdXRvc3VzcGVuZCBzZXR0aW5ncy4KICAqIEBkZXY6IERldmljZSB0byBoYW5kbGUuCiAgKiBAb2xkX2RlbGF5OiBUaGUgZm9ybWVyIGF1dG9zdXNwZW5kX2RlbGF5IHZhbHVlLgpAQCAtMTE5OSw0ICsxMjI2LDYgQEAKIAkvKiBDaGFuZ2UgdGhlIHN0YXR1cyBiYWNrIHRvICdzdXNwZW5kZWQnIHRvIG1hdGNoIHRoZSBpbml0aWFsIHN0YXR1cy4gKi8KIAlpZiAoZGV2LT5wb3dlci5ydW50aW1lX3N0YXR1cyA9PSBSUE1fQUNUSVZFKQogCQlwbV9ydW50aW1lX3NldF9zdXNwZW5kZWQoZGV2KTsKKwlpZiAoZGV2LT5wb3dlci5pcnFfc2FmZSAmJiBkZXYtPnBhcmVudCkKKwkJcG1fcnVudGltZV9wdXRfc3luYyhkZXYtPnBhcmVudCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcG93ZXIvd2FrZXVwLmMgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvd2FrZXVwLmMKaW5kZXggNzFjNTUyOC4uOGVjNDA2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3Bvd2VyL3dha2V1cC5jCisrKyBiL2RyaXZlcnMvYmFzZS9wb3dlci93YWtldXAuYwpAQCAtNTQyLDI2ICs1NDIsMjYgQEAKIH0KIAogLyoqCi0gKiBwbV9jaGVja193YWtldXBfZXZlbnRzIC0gQ2hlY2sgZm9yIG5ldyB3YWtldXAgZXZlbnRzLgorICogcG1fd2FrZXVwX3BlbmRpbmcgLSBDaGVjayBpZiBwb3dlciB0cmFuc2l0aW9uIGluIHByb2dyZXNzIHNob3VsZCBiZSBhYm9ydGVkLgogICoKICAqIENvbXBhcmUgdGhlIGN1cnJlbnQgbnVtYmVyIG9mIHJlZ2lzdGVyZWQgd2FrZXVwIGV2ZW50cyB3aXRoIGl0cyBwcmVzZXJ2ZWQKLSAqIHZhbHVlIGZyb20gdGhlIHBhc3QgdG8gY2hlY2sgaWYgbmV3IHdha2V1cCBldmVudHMgaGF2ZSBiZWVuIHJlZ2lzdGVyZWQgc2luY2UKLSAqIHRoZSBvbGQgdmFsdWUgd2FzIHN0b3JlZC4gIENoZWNrIGlmIHRoZSBjdXJyZW50IG51bWJlciBvZiB3YWtldXAgZXZlbnRzIGJlaW5nCi0gKiBwcm9jZXNzZWQgaXMgemVyby4KKyAqIHZhbHVlIGZyb20gdGhlIHBhc3QgYW5kIHJldHVybiB0cnVlIGlmIG5ldyB3YWtldXAgZXZlbnRzIGhhdmUgYmVlbiByZWdpc3RlcmVkCisgKiBzaW5jZSB0aGUgb2xkIHZhbHVlIHdhcyBzdG9yZWQuICBBbHNvIHJldHVybiB0cnVlIGlmIHRoZSBjdXJyZW50IG51bWJlciBvZgorICogd2FrZXVwIGV2ZW50cyBiZWluZyBwcm9jZXNzZWQgaXMgZGlmZmVyZW50IGZyb20gemVyby4KICAqLwotYm9vbCBwbV9jaGVja193YWtldXBfZXZlbnRzKHZvaWQpCitib29sIHBtX3dha2V1cF9wZW5kaW5nKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlib29sIHJldCA9IHRydWU7CisJYm9vbCByZXQgPSBmYWxzZTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZldmVudHNfbG9jaywgZmxhZ3MpOwogCWlmIChldmVudHNfY2hlY2tfZW5hYmxlZCkgewotCQlyZXQgPSAoKHVuc2lnbmVkIGludClhdG9taWNfcmVhZCgmZXZlbnRfY291bnQpID09IHNhdmVkX2NvdW50KQotCQkJJiYgIWF0b21pY19yZWFkKCZldmVudHNfaW5fcHJvZ3Jlc3MpOwotCQlldmVudHNfY2hlY2tfZW5hYmxlZCA9IHJldDsKKwkJcmV0ID0gKCh1bnNpZ25lZCBpbnQpYXRvbWljX3JlYWQoJmV2ZW50X2NvdW50KSAhPSBzYXZlZF9jb3VudCkKKwkJCXx8IGF0b21pY19yZWFkKCZldmVudHNfaW5fcHJvZ3Jlc3MpOworCQlldmVudHNfY2hlY2tfZW5hYmxlZCA9ICFyZXQ7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmV2ZW50c19sb2NrLCBmbGFncyk7Ci0JaWYgKCFyZXQpCisJaWYgKHJldCkKIAkJcG1fd2FrZXVwX3VwZGF0ZV9oaXRfY291bnRzKCk7CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svYW9lL2FvZWNtZC5jIGIvZHJpdmVycy9ibG9jay9hb2UvYW9lY21kLmMKaW5kZXggNTY3NGJkMC4uZGUwNDM1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9hb2UvYW9lY21kLmMKKysrIGIvZHJpdmVycy9ibG9jay9hb2UvYW9lY21kLmMKQEAgLTI5Nyw4ICsyOTcsOCBAQAogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmlmcDsKIAotCXJlYWRfbG9jaygmZGV2X2Jhc2VfbG9jayk7Ci0JZm9yX2VhY2hfbmV0ZGV2KCZpbml0X25ldCwgaWZwKSB7CisJcmN1X3JlYWRfbG9jaygpOworCWZvcl9lYWNoX25ldGRldl9yY3UoJmluaXRfbmV0LCBpZnApIHsKIAkJZGV2X2hvbGQoaWZwKTsKIAkJaWYgKCFpc19hb2VfbmV0aWYoaWZwKSkKIAkJCWdvdG8gY29udDsKQEAgLTMyNSw3ICszMjUsNyBAQAogY29udDoKIAkJZGV2X3B1dChpZnApOwogCX0KLQlyZWFkX3VubG9jaygmZGV2X2Jhc2VfbG9jayk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKIHN0YXRpYyB2b2lkCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2Zsb3BweS5jIGIvZHJpdmVycy9ibG9jay9mbG9wcHkuYwppbmRleCAzOTUxMDIwLi4yNWU0ZGZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2Zsb3BweS5jCisrKyBiL2RyaXZlcnMvYmxvY2svZmxvcHB5LmMKQEAgLTQzNTIsNyArNDM1Miw3IEBACiBvdXRfdW5yZWdfcGxhdGZvcm1fZGV2OgogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKCZmbG9wcHlfZGV2aWNlW2RyaXZlXSk7CiBvdXRfZmx1c2hfd29yazoKLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCWZsdXNoX3dvcmtfc3luYygmZmxvcHB5X3dvcmspOwogCWlmIChhdG9taWNfcmVhZCgmdXNhZ2VfY291bnQpKQogCQlmbG9wcHlfcmVsZWFzZV9pcnFfYW5kX2RtYSgpOwogb3V0X3VucmVnX3JlZ2lvbjoKQEAgLTQ0MjIsNyArNDQyMiw3IEBACiAJICogV2UgbWlnaHQgaGF2ZSBzY2hlZHVsZWQgYSBmcmVlX2lycSgpLCB3YWl0IGl0IHRvCiAJICogZHJhaW4gZmlyc3Q6CiAJICovCi0JZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwlmbHVzaF93b3JrX3N5bmMoJmZsb3BweV93b3JrKTsKIAogCWlmIChmZF9yZXF1ZXN0X2lycSgpKSB7CiAJCURQUklOVCgiVW5hYmxlIHRvIGdyYWIgSVJRJWQgZm9yIHRoZSBmbG9wcHkgZHJpdmVyXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay94ZW4tYmxrZnJvbnQuYyBiL2RyaXZlcnMvYmxvY2sveGVuLWJsa2Zyb250LmMKaW5kZXggNjU3ODczZS4uZDdhYTM5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay94ZW4tYmxrZnJvbnQuYworKysgYi9kcml2ZXJzL2Jsb2NrL3hlbi1ibGtmcm9udC5jCkBAIC01NDcsNyArNTQ3LDcgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZibGtpZl9pb19sb2NrLCBmbGFncyk7CiAKIAkvKiBGbHVzaCBnbnR0YWIgY2FsbGJhY2sgd29yay4gTXVzdCBiZSBkb25lIHdpdGggbm8gbG9ja3MgaGVsZC4gKi8KLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCWZsdXNoX3dvcmtfc3luYygmaW5mby0+d29yayk7CiAKIAlkZWxfZ2VuZGlzayhpbmZvLT5nZCk7CiAKQEAgLTU5Niw3ICs1OTYsNyBAQAogCXNwaW5fdW5sb2NrX2lycSgmYmxraWZfaW9fbG9jayk7CiAKIAkvKiBGbHVzaCBnbnR0YWIgY2FsbGJhY2sgd29yay4gTXVzdCBiZSBkb25lIHdpdGggbm8gbG9ja3MgaGVsZC4gKi8KLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCWZsdXNoX3dvcmtfc3luYygmaW5mby0+d29yayk7CiAKIAkvKiBGcmVlIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggb2xkIGRldmljZSBjaGFubmVsLiAqLwogCWlmIChpbmZvLT5yaW5nX3JlZiAhPSBHUkFOVF9JTlZBTElEX1JFRikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jZHJvbS9nZHJvbS5jIGIvZHJpdmVycy9jZHJvbS9nZHJvbS5jCmluZGV4IGRlNjU5MTUuLjY0YTIxNDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2Ryb20vZ2Ryb20uYworKysgYi9kcml2ZXJzL2Nkcm9tL2dkcm9tLmMKQEAgLTgzNyw3ICs4MzcsNyBAQAogCiBzdGF0aWMgaW50IF9fZGV2ZXhpdCByZW1vdmVfZ2Ryb20oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2cHRyKQogewotCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisJZmx1c2hfd29ya19zeW5jKCZ3b3JrKTsKIAlibGtfY2xlYW51cF9xdWV1ZShnZC5nZHJvbV9ycSk7CiAJZnJlZV9pcnEoSFdfRVZFTlRfR0RST01fQ01ELCAmZ2QpOwogCWZyZWVfaXJxKEhXX0VWRU5UX0dEUk9NX0RNQSwgJmdkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9LY29uZmlnIGIvZHJpdmVycy9jaGFyL0tjb25maWcKaW5kZXggNDNkMzM5NS4uZDRhNzc3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL0tjb25maWcKKysrIGIvZHJpdmVycy9jaGFyL0tjb25maWcKQEAgLTY4Miw2ICs2ODIsMTUgQEAKICAgICAgICBzZWxlY3QgSFZDX0RSSVZFUgogICAgICAgIGRlZmF1bHQgbgogCitjb25maWcgSFZDX0RDQworICAgICAgIGJvb2wgIkFSTSBKVEFHIERDQyBjb25zb2xlIgorICAgICAgIGRlcGVuZHMgb24gQVJNCisgICAgICAgc2VsZWN0IEhWQ19EUklWRVIKKyAgICAgICBoZWxwCisgICAgICAgICBUaGlzIGNvbnNvbGUgdXNlcyB0aGUgSlRBRyBEQ0Mgb24gQVJNIHRvIGNyZWF0ZSBhIGNvbnNvbGUgdW5kZXIgdGhlIEhWQworCSBkcml2ZXIuIFRoaXMgY29uc29sZSBpcyB1c2VkIHRocm91Z2ggYSBKVEFHIG9ubHkgb24gQVJNLiBJZiB5b3UgZG9uJ3QgaGF2ZQorCSBhIEpUQUcgdGhlbiB5b3UgcHJvYmFibHkgZG9uJ3Qgd2FudCB0aGlzIG9wdGlvbi4KKwogY29uZmlnIFZJUlRJT19DT05TT0xFCiAJdHJpc3RhdGUgIlZpcnRpbyBjb25zb2xlIgogCWRlcGVuZHMgb24gVklSVElPCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvTWFrZWZpbGUgYi9kcml2ZXJzL2NoYXIvTWFrZWZpbGUKaW5kZXggYmE1M2VjOS4uZmEwYjgyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvY2hhci9NYWtlZmlsZQpAQCAtMzQsNiArMzQsNyBAQAogb2JqLSQoQ09ORklHX0hWQ19JU0VSSUVTKQkrPSBodmNfaXNlcmllcy5vCiBvYmotJChDT05GSUdfSFZDX1JUQVMpCQkrPSBodmNfcnRhcy5vCiBvYmotJChDT05GSUdfSFZDX1RJTEUpCQkrPSBodmNfdGlsZS5vCitvYmotJChDT05GSUdfSFZDX0RDQykJCSs9IGh2Y19kY2Mubwogb2JqLSQoQ09ORklHX0hWQ19CRUFUKQkJKz0gaHZjX2JlYXQubwogb2JqLSQoQ09ORklHX0hWQ19EUklWRVIpCSs9IGh2Y19jb25zb2xlLm8KIG9iai0kKENPTkZJR19IVkNfSVJRKQkJKz0gaHZjX2lycS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2FtZDY0LWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9hbWQ2NC1hZ3AuYwppbmRleCA0MjM5NmRmLi45MjUyZTg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2FtZDY0LWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvYW1kNjQtYWdwLmMKQEAgLTM4LDcgKzM4LDcgQEAKIAogc3RhdGljIHZvaWQgYW1kNjRfdGxiZmx1c2goc3RydWN0IGFncF9tZW1vcnkgKnRlbXApCiB7Ci0JazhfZmx1c2hfZ2FydHMoKTsKKwlhbWRfZmx1c2hfZ2FydHMoKTsKIH0KIAogc3RhdGljIGludCBhbWQ2NF9pbnNlcnRfbWVtb3J5KHN0cnVjdCBhZ3BfbWVtb3J5ICptZW0sIG9mZl90IHBnX3N0YXJ0LCBpbnQgdHlwZSkKQEAgLTEyNCw3ICsxMjQsNyBAQAogCXUzMiB0ZW1wOwogCXN0cnVjdCBhcGVyX3NpemVfaW5mb18zMiAqdmFsdWVzOwogCi0JZGV2ID0gazhfbm9ydGhicmlkZ2VzLm5iX21pc2NbMF07CisJZGV2ID0gbm9kZV90b19hbWRfbmIoMCktPm1pc2M7CiAJaWYgKGRldj09TlVMTCkKIAkJcmV0dXJuIDA7CiAKQEAgLTE4MSwxNiArMTgxLDE1IEBACiAJdW5zaWduZWQgbG9uZyBnYXR0X2J1cyA9IHZpcnRfdG9fcGh5cyhhZ3BfYnJpZGdlLT5nYXR0X3RhYmxlX3JlYWwpOwogCWludCBpOwogCi0JaWYgKCFrOF9ub3J0aGJyaWRnZXMuZ2FydF9zdXBwb3J0ZWQpCisJaWYgKCFhbWRfbmJfaGFzX2ZlYXR1cmUoQU1EX05CX0dBUlQpKQogCQlyZXR1cm4gMDsKIAogCS8qIENvbmZpZ3VyZSBBR1AgcmVncyBpbiBlYWNoIHg4Ni02NCBob3N0IGJyaWRnZS4gKi8KLQlmb3IgKGkgPSAwOyBpIDwgazhfbm9ydGhicmlkZ2VzLm51bTsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IGFtZF9uYl9udW0oKTsgaSsrKSB7CiAJCWFncF9icmlkZ2UtPmdhcnRfYnVzX2FkZHIgPQotCQkJCWFtZDY0X2NvbmZpZ3VyZShrOF9ub3J0aGJyaWRnZXMubmJfbWlzY1tpXSwKLQkJCQkJCWdhdHRfYnVzKTsKKwkJCWFtZDY0X2NvbmZpZ3VyZShub2RlX3RvX2FtZF9uYihpKS0+bWlzYywgZ2F0dF9idXMpOwogCX0KLQlrOF9mbHVzaF9nYXJ0cygpOworCWFtZF9mbHVzaF9nYXJ0cygpOwogCXJldHVybiAwOwogfQogCkBAIC0yMDAsMTEgKzE5OSwxMSBAQAogCXUzMiB0bXA7CiAJaW50IGk7CiAKLQlpZiAoIWs4X25vcnRoYnJpZGdlcy5nYXJ0X3N1cHBvcnRlZCkKKwlpZiAoIWFtZF9uYl9oYXNfZmVhdHVyZShBTURfTkJfR0FSVCkpCiAJCXJldHVybjsKIAotCWZvciAoaSA9IDA7IGkgPCBrOF9ub3J0aGJyaWRnZXMubnVtOyBpKyspIHsKLQkJc3RydWN0IHBjaV9kZXYgKmRldiA9IGs4X25vcnRoYnJpZGdlcy5uYl9taXNjW2ldOworCWZvciAoaSA9IDA7IGkgPCBhbWRfbmJfbnVtKCk7IGkrKykgeworCQlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gbm9kZV90b19hbWRfbmIoaSktPm1pc2M7CiAJCS8qIGRpc2FibGUgZ2FydCB0cmFuc2xhdGlvbiAqLwogCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBBTUQ2NF9HQVJUQVBFUlRVUkVDVEwsICZ0bXApOwogCQl0bXAgJj0gfkdBUlRFTjsKQEAgLTMzMSwxNSArMzMwLDE1IEBACiB7CiAJaW50IGk7CiAKLQlpZiAoY2FjaGVfazhfbm9ydGhicmlkZ2VzKCkgPCAwKQorCWlmIChhbWRfY2FjaGVfbm9ydGhicmlkZ2VzKCkgPCAwKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWlmICghazhfbm9ydGhicmlkZ2VzLmdhcnRfc3VwcG9ydGVkKQorCWlmICghYW1kX25iX2hhc19mZWF0dXJlKEFNRF9OQl9HQVJUKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlpID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgazhfbm9ydGhicmlkZ2VzLm51bTsgaSsrKSB7Ci0JCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBrOF9ub3J0aGJyaWRnZXMubmJfbWlzY1tpXTsKKwlmb3IgKGkgPSAwOyBpIDwgYW1kX25iX251bSgpOyBpKyspIHsKKwkJc3RydWN0IHBjaV9kZXYgKmRldiA9IG5vZGVfdG9fYW1kX25iKGkpLT5taXNjOwogCQlpZiAoZml4X25vcnRoYnJpZGdlKGRldiwgcGRldiwgY2FwX3B0cikgPCAwKSB7CiAJCQlkZXZfZXJyKCZkZXYtPmRldiwgIm5vIHVzYWJsZSBhcGVydHVyZSBmb3VuZFxuIik7CiAjaWZkZWYgX194ODZfNjRfXwpAQCAtNDE2LDcgKzQxNSw3IEBACiAJfQogCiAJLyogc2hhZG93IHg4Ni02NCByZWdpc3RlcnMgaW50byBVTGkgcmVnaXN0ZXJzICovCi0JcGNpX3JlYWRfY29uZmlnX2R3b3JkIChrOF9ub3J0aGJyaWRnZXMubmJfbWlzY1swXSwgQU1ENjRfR0FSVEFQRVJUVVJFQkFTRSwKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQgKG5vZGVfdG9fYW1kX25iKDApLT5taXNjLCBBTUQ2NF9HQVJUQVBFUlRVUkVCQVNFLAogCQkJICAgICAgICZodHRmZWEpOwogCiAJLyogaWYgeDg2LTY0IGFwZXJ0dXJlIGJhc2UgaXMgYmV5b25kIDRHLCBleGl0IGhlcmUgKi8KQEAgLTQ4NCw3ICs0ODMsNyBAQAogCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2MSwgTlZJRElBX1g4Nl82NF8xX0FQU0laRSwgdG1wKTsKIAogCS8qIHNoYWRvdyB4ODYtNjQgcmVnaXN0ZXJzIGludG8gTlZJRElBIHJlZ2lzdGVycyAqLwotCXBjaV9yZWFkX2NvbmZpZ19kd29yZCAoazhfbm9ydGhicmlkZ2VzLm5iX21pc2NbMF0sIEFNRDY0X0dBUlRBUEVSVFVSRUJBU0UsCisJcGNpX3JlYWRfY29uZmlnX2R3b3JkIChub2RlX3RvX2FtZF9uYigwKS0+bWlzYywgQU1ENjRfR0FSVEFQRVJUVVJFQkFTRSwKIAkJCSAgICAgICAmYXBiYXNlKTsKIAogCS8qIGlmIHg4Ni02NCBhcGVydHVyZSBiYXNlIGlzIGJleW9uZCA0RywgZXhpdCBoZXJlICovCkBAIC03NzgsNyArNzc3LDcgQEAKIAkJfQogCiAJCS8qIEZpcnN0IGNoZWNrIHRoYXQgd2UgaGF2ZSBhdCBsZWFzdCBvbmUgQU1ENjQgTkIgKi8KLQkJaWYgKCFwY2lfZGV2X3ByZXNlbnQoazhfbmJfaWRzKSkKKwkJaWYgKCFwY2lfZGV2X3ByZXNlbnQoYW1kX25iX21pc2NfaWRzKSkKIAkJCXJldHVybiAtRU5PREVWOwogCiAJCS8qIExvb2sgZm9yIGFueSBBR1AgYnJpZGdlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHZjX2RjYy5jIGIvZHJpdmVycy9jaGFyL2h2Y19kY2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDcwZjYzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jaGFyL2h2Y19kY2MuYwpAQCAtMCwwICsxLDEzMyBAQAorLyogQ29weXJpZ2h0IChjKSAyMDEwLCBDb2RlIEF1cm9yYSBGb3J1bS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCisgKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorCisjaW5jbHVkZSAiaHZjX2NvbnNvbGUuaCIKKworLyogRENDIFN0YXR1cyBCaXRzICovCisjZGVmaW5lIERDQ19TVEFUVVNfUlgJCSgxIDw8IDMwKQorI2RlZmluZSBEQ0NfU1RBVFVTX1RYCQkoMSA8PCAyOSkKKworc3RhdGljIGlubGluZSB1MzIgX19kY2NfZ2V0c3RhdHVzKHZvaWQpCit7CisJdTMyIF9fcmV0OworCisJYXNtKCJtcmMgcDE0LCAwLCAlMCwgYzAsIGMxLCAwCUAgcmVhZCBjb21tcyBjdHJsIHJlZyIKKwkJOiAiPXIiIChfX3JldCkgOiA6ICJjYyIpOworCisJcmV0dXJuIF9fcmV0OworfQorCisKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfVjcpCitzdGF0aWMgaW5saW5lIGNoYXIgX19kY2NfZ2V0Y2hhcih2b2lkKQoreworCWNoYXIgX19jOworCisJYXNtKCJnZXRfd2FpdDoJbXJjIHAxNCwgMCwgcGMsIGMwLCBjMSwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cCisJCQlibmUgZ2V0X3dhaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblwKKwkJCW1yYyBwMTQsIDAsICUwLCBjMCwgYzUsIDAJQCByZWFkIGNvbW1zIGRhdGEgcmVnIgorCQk6ICI9ciIgKF9fYykgOiA6ICJjYyIpOworCisJcmV0dXJuIF9fYzsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIGNoYXIgX19kY2NfZ2V0Y2hhcih2b2lkKQoreworCWNoYXIgX19jOworCisJYXNtKCJtcmMgcDE0LCAwLCAlMCwgYzAsIGM1LCAwCUAgcmVhZCBjb21tcyBkYXRhIHJlZyIKKwkJOiAiPXIiIChfX2MpKTsKKworCXJldHVybiBfX2M7Cit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0NQVV9WNykKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2RjY19wdXRjaGFyKGNoYXIgYykKK3sKKwlhc20oInB1dF93YWl0OgltcmMgcDE0LCAwLCBwYywgYzAsIGMxLCAwICAgICAgICAgICAgICAgICBcblwKKwkJCWJjcyBwdXRfd2FpdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXAorCQkJbWNyIHAxNCwgMCwgJTAsIGMwLCBjNSwgMCAgICAgICAgICAgICAgICAgICAiCisJOiA6ICJyIiAoYykgOiAiY2MiKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgX19kY2NfcHV0Y2hhcihjaGFyIGMpCit7CisJYXNtKCJtY3IgcDE0LCAwLCAlMCwgYzAsIGM1LCAwCUAgd3JpdGUgYSBjaGFyIgorCQk6IC8qIG5vIG91dHB1dCByZWdpc3RlciAqLworCQk6ICJyIiAoYykpOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgaHZjX2RjY19wdXRfY2hhcnModWludDMyX3QgdnQsIGNvbnN0IGNoYXIgKmJ1ZiwgaW50IGNvdW50KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJd2hpbGUgKF9fZGNjX2dldHN0YXR1cygpICYgRENDX1NUQVRVU19UWCkKKwkJCWNwdV9yZWxheCgpOworCisJCV9fZGNjX3B1dGNoYXIoKGNoYXIpKGJ1ZltpXSAmIDB4RkYpKTsKKwl9CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBpbnQgaHZjX2RjY19nZXRfY2hhcnModWludDMyX3QgdnQsIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKwkJaW50IGMgPSAtMTsKKworCQlpZiAoX19kY2NfZ2V0c3RhdHVzKCkgJiBEQ0NfU1RBVFVTX1JYKQorCQkJYyA9IF9fZGNjX2dldGNoYXIoKTsKKwkJaWYgKGMgPCAwKQorCQkJYnJlYWs7CisJCWJ1ZltpXSA9IGM7CisJfQorCisJcmV0dXJuIGk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaHZfb3BzIGh2Y19kY2NfZ2V0X3B1dF9vcHMgPSB7CisJLmdldF9jaGFycyA9IGh2Y19kY2NfZ2V0X2NoYXJzLAorCS5wdXRfY2hhcnMgPSBodmNfZGNjX3B1dF9jaGFycywKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGh2Y19kY2NfY29uc29sZV9pbml0KHZvaWQpCit7CisJaHZjX2luc3RhbnRpYXRlKDAsIDAsICZodmNfZGNjX2dldF9wdXRfb3BzKTsKKwlyZXR1cm4gMDsKK30KK2NvbnNvbGVfaW5pdGNhbGwoaHZjX2RjY19jb25zb2xlX2luaXQpOworCitzdGF0aWMgaW50IF9faW5pdCBodmNfZGNjX2luaXQodm9pZCkKK3sKKwlodmNfYWxsb2MoMCwgMCwgJmh2Y19kY2NfZ2V0X3B1dF9vcHMsIDEyOCk7CisJcmV0dXJuIDA7Cit9CitkZXZpY2VfaW5pdGNhbGwoaHZjX2RjY19pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9odnNpLmMgYi9kcml2ZXJzL2NoYXIvaHZzaS5jCmluZGV4IGEyYmM4ODUuLjY3YTc1YTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9odnNpLmMKKysrIGIvZHJpdmVycy9jaGFyL2h2c2kuYwpAQCAtODUwLDggKzg1MCw4IEBACiAJd2FpdF9ldmVudF90aW1lb3V0KGhwLT5lbXB0eXEsIChocC0+bl9vdXRidWYgPD0gMCksIEhWU0lfVElNRU9VVCk7CiAKIAkvKiAnd3JpdGVyJyBjb3VsZCBzdGlsbCBiZSBwZW5kaW5nIGlmIGl0IGRpZG4ndCBzZWUgbl9vdXRidWYgPSAwIHlldCAqLwotCWNhbmNlbF9kZWxheWVkX3dvcmsoJmhwLT53cml0ZXIpOwotCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZocC0+d3JpdGVyKTsKKwlmbHVzaF93b3JrX3N5bmMoJmhwLT5oYW5kc2hha2VyKTsKIAogCS8qCiAJICogaXQncyBhbHNvIHBvc3NpYmxlIHRoYXQgb3VyIHRpbWVvdXQgZXhwaXJlZCBhbmQgaHZzaV93cml0ZV93b3JrZXIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9pcDIvaXAybWFpbi5jIGIvZHJpdmVycy9jaGFyL2lwMi9pcDJtYWluLmMKaW5kZXggZmNkMDJiYS4uYzNhMDI1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2lwMi9pcDJtYWluLmMKKysrIGIvZHJpdmVycy9jaGFyL2lwMi9pcDJtYWluLmMKQEAgLTMyMjQsNyArMzIyNCw3IEBACiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGlwMm1haW5fcGNpX3RibFtdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgaXAybWFpbl9wY2lfdGJsW10gX19kZXZpbml0ZGF0YSBfX3VzZWQgPSB7CiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQ09NUFVUT05FLCBQQ0lfREVWSUNFX0lEX0NPTVBVVE9ORV9JUDJFWCkgfSwKIAl7IH0KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcGNtY2lhL2lwd2lyZWxlc3MvaGFyZHdhcmUuYyBiL2RyaXZlcnMvY2hhci9wY21jaWEvaXB3aXJlbGVzcy9oYXJkd2FyZS5jCmluZGV4IDk5Y2ZmZGEuLjBhZWI1YTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9wY21jaWEvaXB3aXJlbGVzcy9oYXJkd2FyZS5jCisrKyBiL2RyaXZlcnMvY2hhci9wY21jaWEvaXB3aXJlbGVzcy9oYXJkd2FyZS5jCkBAIC0xNzI5LDcgKzE3MjksNyBAQAogCiAJaXB3aXJlbGVzc19zdG9wX2ludGVycnVwdHMoaHcpOwogCi0JZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwlmbHVzaF93b3JrX3N5bmMoJmh3LT53b3JrX3J4KTsKIAogCWZvciAoaSA9IDA7IGkgPCBOTF9OVU1fT0ZfQUREUkVTU0VTOyBpKyspCiAJCWlmIChody0+cGFja2V0X2Fzc2VtYmxlcltpXSAhPSBOVUxMKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3BjbWNpYS9pcHdpcmVsZXNzL25ldHdvcmsuYyBiL2RyaXZlcnMvY2hhci9wY21jaWEvaXB3aXJlbGVzcy9uZXR3b3JrLmMKaW5kZXggOWZlNTM4My4uZjdkYWVlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3BjbWNpYS9pcHdpcmVsZXNzL25ldHdvcmsuYworKysgYi9kcml2ZXJzL2NoYXIvcGNtY2lhL2lwd2lyZWxlc3MvbmV0d29yay5jCkBAIC00MzAsNyArNDMwLDggQEAKIAluZXR3b3JrLT5zaHV0dGluZ19kb3duID0gMTsKIAogCWlwd2lyZWxlc3NfcHBwX2Nsb3NlKG5ldHdvcmspOwotCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisJZmx1c2hfd29ya19zeW5jKCZuZXR3b3JrLT53b3JrX2dvX29ubGluZSk7CisJZmx1c2hfd29ya19zeW5jKCZuZXR3b3JrLT53b3JrX2dvX29mZmxpbmUpOwogCiAJaXB3aXJlbGVzc19zdG9wX2ludGVycnVwdHMobmV0d29yay0+aGFyZHdhcmUpOwogCWlwd2lyZWxlc3NfYXNzb2NpYXRlX25ldHdvcmsobmV0d29yay0+aGFyZHdhcmUsIE5VTEwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3BjbWNpYS9pcHdpcmVsZXNzL3R0eS5jIGIvZHJpdmVycy9jaGFyL3BjbWNpYS9pcHdpcmVsZXNzL3R0eS5jCmluZGV4IDFhMmMyYzMuLmY1ZWIyOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9wY21jaWEvaXB3aXJlbGVzcy90dHkuYworKysgYi9kcml2ZXJzL2NoYXIvcGNtY2lhL2lwd2lyZWxlc3MvdHR5LmMKQEAgLTU3Nyw3ICs1NzcsNyBAQAogCQkJCW11dGV4X3VubG9jaygmdHR5ai0+aXB3X3R0eV9tdXRleCk7CiAJCQkJdHR5X2hhbmd1cCh0dHlqLT5saW51eF90dHkpOwogCQkJCS8qIFdhaXQgdGlsbCB0aGUgdHR5X2hhbmd1cCBoYXMgY29tcGxldGVkICovCi0JCQkJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwkJCQlmbHVzaF93b3JrX3N5bmMoJnR0eWotPmxpbnV4X3R0eS0+aGFuZ3VwX3dvcmspOwogCQkJCS8qIEZJWE1FOiBFeGFjdGx5IGhvdyBpcyB0aGUgdHR5IG9iamVjdCBsb2NrZWQgaGVyZQogCQkJCSAgIGFnYWluc3QgYSBwYXJhbGxlbCBpb2N0bCBldGMgKi8KIAkJCQltdXRleF9sb2NrKCZ0dHlqLT5pcHdfdHR5X211dGV4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yYW5kb20uYyBiL2RyaXZlcnMvY2hhci9yYW5kb20uYwppbmRleCA1YTFhYTY0Li43MmE0ZmNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmFuZG9tLmMKKysrIGIvZHJpdmVycy9jaGFyL3JhbmRvbS5jCkBAIC02MjYsNyArNjI2LDcgQEAKIAlwcmVlbXB0X2Rpc2FibGUoKTsKIAkvKiBpZiBvdmVyIHRoZSB0cmlja2xlIHRocmVzaG9sZCwgdXNlIG9ubHkgMSBpbiA0MDk2IHNhbXBsZXMgKi8KIAlpZiAoaW5wdXRfcG9vbC5lbnRyb3B5X2NvdW50ID4gdHJpY2tsZV90aHJlc2ggJiYKLQkgICAgKF9fZ2V0X2NwdV92YXIodHJpY2tsZV9jb3VudCkrKyAmIDB4ZmZmKSkKKwkgICAgKChfX3RoaXNfY3B1X2luY19yZXR1cm4odHJpY2tsZV9jb3VudCkgLSAxKSAmIDB4ZmZmKSkKIAkJZ290byBvdXQ7CiAKIAlzYW1wbGUuamlmZmllcyA9IGppZmZpZXM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcm9ja2V0LmMgYi9kcml2ZXJzL2NoYXIvcm9ja2V0LmMKaW5kZXggODYzMDg4MzAuLjNlNGU3M2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yb2NrZXQuYworKysgYi9kcml2ZXJzL2NoYXIvcm9ja2V0LmMKQEAgLTE3NjQsNyArMTc2NCw3IEBACiAKICNpZmRlZiBDT05GSUdfUENJCiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBfX2RldmluaXRkYXRhIHJvY2tldF9wY2lfaWRzW10gPSB7CitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgX19kZXZpbml0ZGF0YSBfX3VzZWQgcm9ja2V0X3BjaV9pZHNbXSA9IHsKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9SUCwgUENJX0FOWV9JRCkgfSwKIAl7IH0KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvc29ueXBpLmMgYi9kcml2ZXJzL2NoYXIvc29ueXBpLmMKaW5kZXggNzNmNjZkMC4uNzllMzZjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3NvbnlwaS5jCisrKyBiL2RyaXZlcnMvY2hhci9zb255cGkuYwpAQCAtMTQzNCw3ICsxNDM0LDcgQEAKIAlzb255cGlfZGlzYWJsZSgpOwogCiAJc3luY2hyb25pemVfaXJxKHNvbnlwaV9kZXZpY2UuaXJxKTsKLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCWZsdXNoX3dvcmtfc3luYygmc29ueXBpX2RldmljZS5pbnB1dF93b3JrKTsKIAogCWlmICh1c2VpbnB1dCkgewogCQlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShzb255cGlfZGV2aWNlLmlucHV0X2tleV9kZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3NwZWNpYWxpeC5jIGIvZHJpdmVycy9jaGFyL3NwZWNpYWxpeC5jCmluZGV4IGE3NjE2ZDIuLmMyYmNhM2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zcGVjaWFsaXguYworKysgYi9kcml2ZXJzL2NoYXIvc3BlY2lhbGl4LmMKQEAgLTIzNTUsNyArMjM1NSw3IEBACiAJZnVuY19leGl0KCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzcGVjaWFseF9wY2lfdGJsW10gX19kZXZpbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzcGVjaWFseF9wY2lfdGJsW10gX19kZXZpbml0ZGF0YSBfX3VzZWQgPSB7CiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfU1BFQ0lBTElYLCBQQ0lfREVWSUNFX0lEX1NQRUNJQUxJWF9JTzgpIH0sCiAJeyB9CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3RwbS90cG0uYyBiL2RyaXZlcnMvY2hhci90cG0vdHBtLmMKaW5kZXggN2M0MTMzNS4uMGIzYWYzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3RwbS90cG0uYworKysgYi9kcml2ZXJzL2NoYXIvdHBtL3RwbS5jCkBAIC05ODYsNyArOTg2LDcgQEAKIAlzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAKIAlkZWxfc2luZ2xlc2hvdF90aW1lcl9zeW5jKCZjaGlwLT51c2VyX3JlYWRfdGltZXIpOwotCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisJZmx1c2hfd29ya19zeW5jKCZjaGlwLT53b3JrKTsKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOwogCWF0b21pY19zZXQoJmNoaXAtPmRhdGFfcGVuZGluZywgMCk7CiAJa2ZyZWUoY2hpcC0+ZGF0YV9idWZmZXIpOwpAQCAtMTAzOCw3ICsxMDM4LDcgQEAKIAlzc2l6ZV90IHJldF9zaXplOwogCiAJZGVsX3NpbmdsZXNob3RfdGltZXJfc3luYygmY2hpcC0+dXNlcl9yZWFkX3RpbWVyKTsKLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCWZsdXNoX3dvcmtfc3luYygmY2hpcC0+d29yayk7CiAJcmV0X3NpemUgPSBhdG9taWNfcmVhZCgmY2hpcC0+ZGF0YV9wZW5kaW5nKTsKIAlhdG9taWNfc2V0KCZjaGlwLT5kYXRhX3BlbmRpbmcsIDApOwogCWlmIChyZXRfc2l6ZSA+IDApIHsJLyogcmVsYXkgZGF0YSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvS2NvbmZpZyBiL2RyaXZlcnMvY2xrL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE2OGM4OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY2xrL0tjb25maWcKQEAgLTAsMCArMSw0IEBACisKK2NvbmZpZyBDTEtERVZfTE9PS1VQCisJYm9vbAorCXNlbGVjdCBIQVZFX0NMSwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvTWFrZWZpbGUgYi9kcml2ZXJzL2Nsay9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzYxM2ZhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jbGsvTWFrZWZpbGUKQEAgLTAsMCArMSwyIEBACisKK29iai0kKENPTkZJR19DTEtERVZfTE9PS1VQKQkrPSBjbGtkZXYubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvY2xrZGV2LmMgYi9kcml2ZXJzL2Nsay9jbGtkZXYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmMwYTc5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jbGsvY2xrZGV2LmMKQEAgLTAsMCArMSwxNzYgQEAKKy8qCisgKiBkcml2ZXJzL2Nsay9jbGtkZXYuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggUnVzc2VsbCBLaW5nLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogSGVscGVyIGZvciB0aGUgY2xrIEFQSSB0byBhc3Npc3QgbG9va2luZyB1cCBhIHN0cnVjdCBjbGsuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsa2Rldi5oPgorCitzdGF0aWMgTElTVF9IRUFEKGNsb2Nrcyk7CitzdGF0aWMgREVGSU5FX01VVEVYKGNsb2Nrc19tdXRleCk7CisKKy8qCisgKiBGaW5kIHRoZSBjb3JyZWN0IHN0cnVjdCBjbGsgZm9yIHRoZSBkZXZpY2UgYW5kIGNvbm5lY3Rpb24gSUQuCisgKiBXZSBkbyBzbGlnaHRseSBmdXp6eSBtYXRjaGluZyBoZXJlOgorICogIEFuIGVudHJ5IHdpdGggYSBOVUxMIElEIGlzIGFzc3VtZWQgdG8gYmUgYSB3aWxkY2FyZC4KKyAqICBJZiBhbiBlbnRyeSBoYXMgYSBkZXZpY2UgSUQsIGl0IG11c3QgbWF0Y2gKKyAqICBJZiBhbiBlbnRyeSBoYXMgYSBjb25uZWN0aW9uIElELCBpdCBtdXN0IG1hdGNoCisgKiBUaGVuIHdlIHRha2UgdGhlIG1vc3Qgc3BlY2lmaWMgZW50cnkgLSB3aXRoIHRoZSBmb2xsb3dpbmcKKyAqIG9yZGVyIG9mIHByZWNlZGVuY2U6IGRlditjb24gPiBkZXYgb25seSA+IGNvbiBvbmx5LgorICovCitzdGF0aWMgc3RydWN0IGNsayAqY2xrX2ZpbmQoY29uc3QgY2hhciAqZGV2X2lkLCBjb25zdCBjaGFyICpjb25faWQpCit7CisJc3RydWN0IGNsa19sb29rdXAgKnA7CisJc3RydWN0IGNsayAqY2xrID0gTlVMTDsKKwlpbnQgbWF0Y2gsIGJlc3QgPSAwOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShwLCAmY2xvY2tzLCBub2RlKSB7CisJCW1hdGNoID0gMDsKKwkJaWYgKHAtPmRldl9pZCkgeworCQkJaWYgKCFkZXZfaWQgfHwgc3RyY21wKHAtPmRldl9pZCwgZGV2X2lkKSkKKwkJCQljb250aW51ZTsKKwkJCW1hdGNoICs9IDI7CisJCX0KKwkJaWYgKHAtPmNvbl9pZCkgeworCQkJaWYgKCFjb25faWQgfHwgc3RyY21wKHAtPmNvbl9pZCwgY29uX2lkKSkKKwkJCQljb250aW51ZTsKKwkJCW1hdGNoICs9IDE7CisJCX0KKworCQlpZiAobWF0Y2ggPiBiZXN0KSB7CisJCQljbGsgPSBwLT5jbGs7CisJCQlpZiAobWF0Y2ggIT0gMykKKwkJCQliZXN0ID0gbWF0Y2g7CisJCQllbHNlCisJCQkJYnJlYWs7CisJCX0KKwl9CisJcmV0dXJuIGNsazsKK30KKworc3RydWN0IGNsayAqY2xrX2dldF9zeXMoY29uc3QgY2hhciAqZGV2X2lkLCBjb25zdCBjaGFyICpjb25faWQpCit7CisJc3RydWN0IGNsayAqY2xrOworCisJbXV0ZXhfbG9jaygmY2xvY2tzX211dGV4KTsKKwljbGsgPSBjbGtfZmluZChkZXZfaWQsIGNvbl9pZCk7CisJaWYgKGNsayAmJiAhX19jbGtfZ2V0KGNsaykpCisJCWNsayA9IE5VTEw7CisJbXV0ZXhfdW5sb2NrKCZjbG9ja3NfbXV0ZXgpOworCisJcmV0dXJuIGNsayA/IGNsayA6IEVSUl9QVFIoLUVOT0VOVCk7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19nZXRfc3lzKTsKKworc3RydWN0IGNsayAqY2xrX2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmNvbl9pZCkKK3sKKwljb25zdCBjaGFyICpkZXZfaWQgPSBkZXYgPyBkZXZfbmFtZShkZXYpIDogTlVMTDsKKworCXJldHVybiBjbGtfZ2V0X3N5cyhkZXZfaWQsIGNvbl9pZCk7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19nZXQpOworCit2b2lkIGNsa19wdXQoc3RydWN0IGNsayAqY2xrKQoreworCV9fY2xrX3B1dChjbGspOworfQorRVhQT1JUX1NZTUJPTChjbGtfcHV0KTsKKwordm9pZCBjbGtkZXZfYWRkKHN0cnVjdCBjbGtfbG9va3VwICpjbCkKK3sKKwltdXRleF9sb2NrKCZjbG9ja3NfbXV0ZXgpOworCWxpc3RfYWRkX3RhaWwoJmNsLT5ub2RlLCAmY2xvY2tzKTsKKwltdXRleF91bmxvY2soJmNsb2Nrc19tdXRleCk7Cit9CitFWFBPUlRfU1lNQk9MKGNsa2Rldl9hZGQpOworCit2b2lkIF9faW5pdCBjbGtkZXZfYWRkX3RhYmxlKHN0cnVjdCBjbGtfbG9va3VwICpjbCwgc2l6ZV90IG51bSkKK3sKKwltdXRleF9sb2NrKCZjbG9ja3NfbXV0ZXgpOworCXdoaWxlIChudW0tLSkgeworCQlsaXN0X2FkZF90YWlsKCZjbC0+bm9kZSwgJmNsb2Nrcyk7CisJCWNsKys7CisJfQorCW11dGV4X3VubG9jaygmY2xvY2tzX211dGV4KTsKK30KKworI2RlZmluZSBNQVhfREVWX0lECTIwCisjZGVmaW5lIE1BWF9DT05fSUQJMTYKKworc3RydWN0IGNsa19sb29rdXBfYWxsb2MgeworCXN0cnVjdCBjbGtfbG9va3VwIGNsOworCWNoYXIJZGV2X2lkW01BWF9ERVZfSURdOworCWNoYXIJY29uX2lkW01BWF9DT05fSURdOworfTsKKworc3RydWN0IGNsa19sb29rdXAgKiBfX2luaXRfcmVmb2sKK2Nsa2Rldl9hbGxvYyhzdHJ1Y3QgY2xrICpjbGssIGNvbnN0IGNoYXIgKmNvbl9pZCwgY29uc3QgY2hhciAqZGV2X2ZtdCwgLi4uKQoreworCXN0cnVjdCBjbGtfbG9va3VwX2FsbG9jICpjbGE7CisKKwljbGEgPSBfX2Nsa2Rldl9hbGxvYyhzaXplb2YoKmNsYSkpOworCWlmICghY2xhKQorCQlyZXR1cm4gTlVMTDsKKworCWNsYS0+Y2wuY2xrID0gY2xrOworCWlmIChjb25faWQpIHsKKwkJc3RybGNweShjbGEtPmNvbl9pZCwgY29uX2lkLCBzaXplb2YoY2xhLT5jb25faWQpKTsKKwkJY2xhLT5jbC5jb25faWQgPSBjbGEtPmNvbl9pZDsKKwl9CisKKwlpZiAoZGV2X2ZtdCkgeworCQl2YV9saXN0IGFwOworCisJCXZhX3N0YXJ0KGFwLCBkZXZfZm10KTsKKwkJdnNjbnByaW50ZihjbGEtPmRldl9pZCwgc2l6ZW9mKGNsYS0+ZGV2X2lkKSwgZGV2X2ZtdCwgYXApOworCQljbGEtPmNsLmRldl9pZCA9IGNsYS0+ZGV2X2lkOworCQl2YV9lbmQoYXApOworCX0KKworCXJldHVybiAmY2xhLT5jbDsKK30KK0VYUE9SVF9TWU1CT0woY2xrZGV2X2FsbG9jKTsKKworaW50IGNsa19hZGRfYWxpYXMoY29uc3QgY2hhciAqYWxpYXMsIGNvbnN0IGNoYXIgKmFsaWFzX2Rldl9uYW1lLCBjaGFyICppZCwKKwlzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGNsayAqciA9IGNsa19nZXQoZGV2LCBpZCk7CisJc3RydWN0IGNsa19sb29rdXAgKmw7CisKKwlpZiAoSVNfRVJSKHIpKQorCQlyZXR1cm4gUFRSX0VSUihyKTsKKworCWwgPSBjbGtkZXZfYWxsb2MociwgYWxpYXMsIGFsaWFzX2Rldl9uYW1lKTsKKwljbGtfcHV0KHIpOworCWlmICghbCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJY2xrZGV2X2FkZChsKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woY2xrX2FkZF9hbGlhcyk7CisKKy8qCisgKiBjbGtkZXZfZHJvcCAtIHJlbW92ZSBhIGNsb2NrIGR5bmFtaWNhbGx5IGFsbG9jYXRlZAorICovCit2b2lkIGNsa2Rldl9kcm9wKHN0cnVjdCBjbGtfbG9va3VwICpjbCkKK3sKKwltdXRleF9sb2NrKCZjbG9ja3NfbXV0ZXgpOworCWxpc3RfZGVsKCZjbC0+bm9kZSk7CisJbXV0ZXhfdW5sb2NrKCZjbG9ja3NfbXV0ZXgpOworCWtmcmVlKGNsKTsKK30KK0VYUE9SVF9TWU1CT0woY2xrZGV2X2Ryb3ApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jb25uZWN0b3IvY25fcHJvYy5jIGIvZHJpdmVycy9jb25uZWN0b3IvY25fcHJvYy5jCmluZGV4IGE3ZjA0NmIuLjJiNDZhN2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY29ubmVjdG9yL2NuX3Byb2MuYworKysgYi9kcml2ZXJzL2Nvbm5lY3Rvci9jbl9wcm9jLmMKQEAgLTQzLDkgKzQzLDEwIEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBnZXRfc2VxKF9fdTMyICp0cywgaW50ICpjcHUpCiB7Ci0JKnRzID0gZ2V0X2NwdV92YXIocHJvY19ldmVudF9jb3VudHMpKys7CisJcHJlZW1wdF9kaXNhYmxlKCk7CisJKnRzID0gX190aGlzX2NwdV9pbmNfcmV0dXJuKHByb2NfZXZlbnRfY291bnRzKSAtMTsKIAkqY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCXB1dF9jcHVfdmFyKHByb2NfZXZlbnRfY291bnRzKTsKKwlwcmVlbXB0X2VuYWJsZSgpOwogfQogCiB2b2lkIHByb2NfZm9ya19jb25uZWN0b3Ioc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEuYyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLmMKaW5kZXggYzYzYTQzOC4uMTEwOWY2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEuYworKysgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcS5jCkBAIC0zNTUsNiArMzU1LDcgQEAKIAkJZHByaW50aygiRlJFUTogJWx1IC0gQ1BVOiAlbHUiLCAodW5zaWduZWQgbG9uZylmcmVxcy0+bmV3LAogCQkJKHVuc2lnbmVkIGxvbmcpZnJlcXMtPmNwdSk7CiAJCXRyYWNlX3Bvd2VyX2ZyZXF1ZW5jeShQT1dFUl9QU1RBVEUsIGZyZXFzLT5uZXcsIGZyZXFzLT5jcHUpOworCQl0cmFjZV9jcHVfZnJlcXVlbmN5KGZyZXFzLT5uZXcsIGZyZXFzLT5jcHUpOwogCQlzcmN1X25vdGlmaWVyX2NhbGxfY2hhaW4oJmNwdWZyZXFfdHJhbnNpdGlvbl9ub3RpZmllcl9saXN0LAogCQkJCUNQVUZSRVFfUE9TVENIQU5HRSwgZnJlcXMpOwogCQlpZiAobGlrZWx5KHBvbGljeSkgJiYgbGlrZWx5KHBvbGljeS0+Y3B1ID09IGZyZXFzLT5jcHUpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVpZGxlL2NwdWlkbGUuYyBiL2RyaXZlcnMvY3B1aWRsZS9jcHVpZGxlLmMKaW5kZXggYTUwNzEwOC4uMzg2ODg4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVpZGxlL2NwdWlkbGUuYworKysgYi9kcml2ZXJzL2NwdWlkbGUvY3B1aWRsZS5jCkBAIC00OSw3ICs0OSw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIGNwdWlkbGVfaWRsZV9jYWxsKHZvaWQpCiB7Ci0Jc3RydWN0IGNwdWlkbGVfZGV2aWNlICpkZXYgPSBfX2dldF9jcHVfdmFyKGNwdWlkbGVfZGV2aWNlcyk7CisJc3RydWN0IGNwdWlkbGVfZGV2aWNlICpkZXYgPSBfX3RoaXNfY3B1X3JlYWQoY3B1aWRsZV9kZXZpY2VzKTsKIAlzdHJ1Y3QgY3B1aWRsZV9zdGF0ZSAqdGFyZ2V0X3N0YXRlOwogCWludCBuZXh0X3N0YXRlOwogCkBAIC0xMDcsNiArMTA3LDcgQEAKIAlpZiAoY3B1aWRsZV9jdXJyX2dvdmVybm9yLT5yZWZsZWN0KQogCQljcHVpZGxlX2N1cnJfZ292ZXJub3ItPnJlZmxlY3QoZGV2KTsKIAl0cmFjZV9wb3dlcl9lbmQoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwl0cmFjZV9jcHVfaWRsZShQV1JfRVZFTlRfRVhJVCwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9pbXgtc2RtYS5jIGIvZHJpdmVycy9kbWEvaW14LXNkbWEuYwppbmRleCBkMDYwMmRkLi5kNWE1ZDRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9pbXgtc2RtYS5jCisrKyBiL2RyaXZlcnMvZG1hL2lteC1zZG1hLmMKQEAgLTI3Myw1MCArMjczLDYgQEAKICNkZWZpbmUgTVhDX1NETUFfTUlOX1BSSU9SSVRZIDEKICNkZWZpbmUgTVhDX1NETUFfTUFYX1BSSU9SSVRZIDcKIAotLyoqCi0gKiBzdHJ1Y3Qgc2RtYV9zY3JpcHRfc3RhcnRfYWRkcnMgLSBTRE1BIHNjcmlwdCBzdGFydCBwb2ludGVycwotICoKLSAqIHN0YXJ0IGFkZHJlc3NlcyBvZiB0aGUgZGlmZmVyZW50IGZ1bmN0aW9ucyBpbiB0aGUgcGh5c2ljYWwKLSAqIGFkZHJlc3Mgc3BhY2Ugb2YgdGhlIFNETUEgZW5naW5lLgotICovCi1zdHJ1Y3Qgc2RtYV9zY3JpcHRfc3RhcnRfYWRkcnMgewotCXUzMiBhcF8yX2FwX2FkZHI7Ci0JdTMyIGFwXzJfYnBfYWRkcjsKLQl1MzIgYXBfMl9hcF9maXhlZF9hZGRyOwotCXUzMiBicF8yX2FwX2FkZHI7Ci0JdTMyIGxvb3BiYWNrX29uX2RzcF9zaWRlX2FkZHI7Ci0JdTMyIG1jdV9pbnRlcnJ1cHRfb25seV9hZGRyOwotCXUzMiBmaXJpXzJfcGVyX2FkZHI7Ci0JdTMyIGZpcmlfMl9tY3VfYWRkcjsKLQl1MzIgcGVyXzJfZmlyaV9hZGRyOwotCXUzMiBtY3VfMl9maXJpX2FkZHI7Ci0JdTMyIHVhcnRfMl9wZXJfYWRkcjsKLQl1MzIgdWFydF8yX21jdV9hZGRyOwotCXUzMiBwZXJfMl9hcHBfYWRkcjsKLQl1MzIgbWN1XzJfYXBwX2FkZHI7Ci0JdTMyIHBlcl8yX3Blcl9hZGRyOwotCXUzMiB1YXJ0c2hfMl9wZXJfYWRkcjsKLQl1MzIgdWFydHNoXzJfbWN1X2FkZHI7Ci0JdTMyIHBlcl8yX3NocF9hZGRyOwotCXUzMiBtY3VfMl9zaHBfYWRkcjsKLQl1MzIgYXRhXzJfbWN1X2FkZHI7Ci0JdTMyIG1jdV8yX2F0YV9hZGRyOwotCXUzMiBhcHBfMl9wZXJfYWRkcjsKLQl1MzIgYXBwXzJfbWN1X2FkZHI7Ci0JdTMyIHNocF8yX3Blcl9hZGRyOwotCXUzMiBzaHBfMl9tY3VfYWRkcjsKLQl1MzIgbXNoY18yX21jdV9hZGRyOwotCXUzMiBtY3VfMl9tc2hjX2FkZHI7Ci0JdTMyIHNwZGlmXzJfbWN1X2FkZHI7Ci0JdTMyIG1jdV8yX3NwZGlmX2FkZHI7Ci0JdTMyIGFzcmNfMl9tY3VfYWRkcjsKLQl1MzIgZXh0X21lbV8yX2lwdV9hZGRyOwotCXUzMiBkZXNjcmFtYmxlcl9hZGRyOwotCXUzMiBkcHRjX2R2ZnNfYWRkcjsKLQl1MzIgdXRyYV9hZGRyOwotCXUzMiByYW1fY29kZV9zdGFydF9hZGRyOwotfTsKLQogI2RlZmluZSBTRE1BX0ZJUk1XQVJFX01BR0lDIDB4NDE0ZDQ0NTMKIAogLyoqCkBAIC0xMTI3LDggKzEwODMsNzQgQEAKIAkgKi8KIH0KIAotc3RhdGljIGludCBfX2luaXQgc2RtYV9pbml0KHN0cnVjdCBzZG1hX2VuZ2luZSAqc2RtYSwKLQkJdm9pZCAqcmFtX2NvZGUsIGludCByYW1fY29kZV9zaXplKQorI2RlZmluZSBTRE1BX1NDUklQVF9BRERSU19BUlJBWV9TSVpFX1YxCTM0CisKK3N0YXRpYyB2b2lkIHNkbWFfYWRkX3NjcmlwdHMoc3RydWN0IHNkbWFfZW5naW5lICpzZG1hLAorCQljb25zdCBzdHJ1Y3Qgc2RtYV9zY3JpcHRfc3RhcnRfYWRkcnMgKmFkZHIpCit7CisJczMyICphZGRyX2FyciA9ICh1MzIgKilhZGRyOworCXMzMiAqc2FkZHJfYXJyID0gKHUzMiAqKXNkbWEtPnNjcmlwdF9hZGRyczsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBTRE1BX1NDUklQVF9BRERSU19BUlJBWV9TSVpFX1YxOyBpKyspCisJCWlmIChhZGRyX2FycltpXSA+IDApCisJCQlzYWRkcl9hcnJbaV0gPSBhZGRyX2FycltpXTsKK30KKworc3RhdGljIGludCBfX2luaXQgc2RtYV9nZXRfZmlybXdhcmUoc3RydWN0IHNkbWFfZW5naW5lICpzZG1hLAorCQljb25zdCBjaGFyICpjcHVfbmFtZSwgaW50IHRvX3ZlcnNpb24pCit7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKKwljaGFyICpmd25hbWU7CisJY29uc3Qgc3RydWN0IHNkbWFfZmlybXdhcmVfaGVhZGVyICpoZWFkZXI7CisJaW50IHJldDsKKwljb25zdCBzdHJ1Y3Qgc2RtYV9zY3JpcHRfc3RhcnRfYWRkcnMgKmFkZHI7CisJdW5zaWduZWQgc2hvcnQgKnJhbV9jb2RlOworCisJZnduYW1lID0ga2FzcHJpbnRmKEdGUF9LRVJORUwsICJzZG1hLSVzLXRvJWQuYmluIiwgY3B1X25hbWUsIHRvX3ZlcnNpb24pOworCWlmICghZnduYW1lKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBmd25hbWUsIHNkbWEtPmRldik7CisJaWYgKHJldCkgeworCQlrZnJlZShmd25hbWUpOworCQlyZXR1cm4gcmV0OworCX0KKwlrZnJlZShmd25hbWUpOworCisJaWYgKGZ3LT5zaXplIDwgc2l6ZW9mKCpoZWFkZXIpKQorCQlnb3RvIGVycl9maXJtd2FyZTsKKworCWhlYWRlciA9IChzdHJ1Y3Qgc2RtYV9maXJtd2FyZV9oZWFkZXIgKilmdy0+ZGF0YTsKKworCWlmIChoZWFkZXItPm1hZ2ljICE9IFNETUFfRklSTVdBUkVfTUFHSUMpCisJCWdvdG8gZXJyX2Zpcm13YXJlOworCWlmIChoZWFkZXItPnJhbV9jb2RlX3N0YXJ0ICsgaGVhZGVyLT5yYW1fY29kZV9zaXplID4gZnctPnNpemUpCisJCWdvdG8gZXJyX2Zpcm13YXJlOworCisJYWRkciA9ICh2b2lkICopaGVhZGVyICsgaGVhZGVyLT5zY3JpcHRfYWRkcnNfc3RhcnQ7CisJcmFtX2NvZGUgPSAodm9pZCAqKWhlYWRlciArIGhlYWRlci0+cmFtX2NvZGVfc3RhcnQ7CisKKwljbGtfZW5hYmxlKHNkbWEtPmNsayk7CisJLyogZG93bmxvYWQgdGhlIFJBTSBpbWFnZSBmb3IgU0RNQSAqLworCXNkbWFfbG9hZF9zY3JpcHQoc2RtYSwgcmFtX2NvZGUsCisJCQloZWFkZXItPnJhbV9jb2RlX3NpemUsCisJCQlzZG1hLT5zY3JpcHRfYWRkcnMtPnJhbV9jb2RlX3N0YXJ0X2FkZHIpOworCWNsa19kaXNhYmxlKHNkbWEtPmNsayk7CisKKwlzZG1hX2FkZF9zY3JpcHRzKHNkbWEsIGFkZHIpOworCisJZGV2X2luZm8oc2RtYS0+ZGV2LCAibG9hZGVkIGZpcm13YXJlICVkLiVkXG4iLAorCQkJaGVhZGVyLT52ZXJzaW9uX21ham9yLAorCQkJaGVhZGVyLT52ZXJzaW9uX21pbm9yKTsKKworZXJyX2Zpcm13YXJlOgorCXJlbGVhc2VfZmlybXdhcmUoZncpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2luaXQgc2RtYV9pbml0KHN0cnVjdCBzZG1hX2VuZ2luZSAqc2RtYSkKIHsKIAlpbnQgaSwgcmV0OwogCWRtYV9hZGRyX3QgY2NiX3BoeXM7CkBAIC0xMTkyLDExICsxMjE0LDYgQEAKIAogCV9fcmF3X3dyaXRlbChjY2JfcGh5cywgc2RtYS0+cmVncyArIFNETUFfSF9DMFBUUik7CiAKLQkvKiBkb3dubG9hZCB0aGUgUkFNIGltYWdlIGZvciBTRE1BICovCi0Jc2RtYV9sb2FkX3NjcmlwdChzZG1hLCByYW1fY29kZSwKLQkJCXJhbV9jb2RlX3NpemUsCi0JCQlzZG1hLT5zY3JpcHRfYWRkcnMtPnJhbV9jb2RlX3N0YXJ0X2FkZHIpOwotCiAJLyogU2V0IGJpdHMgb2YgQ09ORklHIHJlZ2lzdGVyIHdpdGggZ2l2ZW4gY29udGV4dCBzd2l0Y2hpbmcgbW9kZSAqLwogCV9fcmF3X3dyaXRlbChTRE1BX0hfQ09ORklHX0NTTSwgc2RtYS0+cmVncyArIFNETUFfSF9DT05GSUcpOwogCkBAIC0xMjE2LDE0ICsxMjMzLDkgQEAKIHN0YXRpYyBpbnQgX19pbml0IHNkbWFfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlpbnQgcmV0OwotCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7Ci0JY29uc3Qgc3RydWN0IHNkbWFfZmlybXdhcmVfaGVhZGVyICpoZWFkZXI7Ci0JY29uc3Qgc3RydWN0IHNkbWFfc2NyaXB0X3N0YXJ0X2FkZHJzICphZGRyOwogCWludCBpcnE7Ci0JdW5zaWduZWQgc2hvcnQgKnJhbV9jb2RlOwogCXN0cnVjdCByZXNvdXJjZSAqaW9yZXM7CiAJc3RydWN0IHNkbWFfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKLQljaGFyICpmd25hbWU7CiAJaW50IGk7CiAJZG1hX2NhcF9tYXNrX3QgbWFzazsKIAlzdHJ1Y3Qgc2RtYV9lbmdpbmUgKnNkbWE7CkBAIC0xMjYyLDM4ICsxMjc0LDkgQEAKIAlpZiAocmV0KQogCQlnb3RvIGVycl9yZXF1ZXN0X2lycTsKIAotCWZ3bmFtZSA9IGthc3ByaW50ZihHRlBfS0VSTkVMLCAic2RtYS0lcy10byVkLmJpbiIsCi0JCQlwZGF0YS0+Y3B1X25hbWUsIHBkYXRhLT50b192ZXJzaW9uKTsKLQlpZiAoIWZ3bmFtZSkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycl9jcHV0eXBlOwotCX0KLQotCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBmd25hbWUsICZwZGV2LT5kZXYpOwotCWlmIChyZXQpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAicmVxdWVzdCBmaXJtd2FyZSBcIiVzXCIgZmFpbGVkIHdpdGggJWRcbiIsCi0JCQkJZnduYW1lLCByZXQpOwotCQlrZnJlZShmd25hbWUpOwotCQlnb3RvIGVycl9jcHV0eXBlOwotCX0KLQlrZnJlZShmd25hbWUpOwotCi0JaWYgKGZ3LT5zaXplIDwgc2l6ZW9mKCpoZWFkZXIpKQotCQlnb3RvIGVycl9maXJtd2FyZTsKLQotCWhlYWRlciA9IChzdHJ1Y3Qgc2RtYV9maXJtd2FyZV9oZWFkZXIgKilmdy0+ZGF0YTsKLQotCWlmIChoZWFkZXItPm1hZ2ljICE9IFNETUFfRklSTVdBUkVfTUFHSUMpCi0JCWdvdG8gZXJyX2Zpcm13YXJlOwotCWlmIChoZWFkZXItPnJhbV9jb2RlX3N0YXJ0ICsgaGVhZGVyLT5yYW1fY29kZV9zaXplID4gZnctPnNpemUpCi0JCWdvdG8gZXJyX2Zpcm13YXJlOwotCi0JYWRkciA9ICh2b2lkICopaGVhZGVyICsgaGVhZGVyLT5zY3JpcHRfYWRkcnNfc3RhcnQ7Ci0JcmFtX2NvZGUgPSAodm9pZCAqKWhlYWRlciArIGhlYWRlci0+cmFtX2NvZGVfc3RhcnQ7Ci0Jc2RtYS0+c2NyaXB0X2FkZHJzID0ga21hbGxvYyhzaXplb2YoKmFkZHIpLCBHRlBfS0VSTkVMKTsKKwlzZG1hLT5zY3JpcHRfYWRkcnMgPSBremFsbG9jKHNpemVvZigqc2RtYS0+c2NyaXB0X2FkZHJzKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzZG1hLT5zY3JpcHRfYWRkcnMpCi0JCWdvdG8gZXJyX2Zpcm13YXJlOwotCW1lbWNweShzZG1hLT5zY3JpcHRfYWRkcnMsIGFkZHIsIHNpemVvZigqYWRkcikpOworCQlnb3RvIGVycl9hbGxvYzsKIAogCXNkbWEtPnZlcnNpb24gPSBwZGF0YS0+c2RtYV92ZXJzaW9uOwogCkBAIC0xMzE2LDEwICsxMjk5LDE1IEBACiAJCWxpc3RfYWRkX3RhaWwoJnNkbWFjLT5jaGFuLmRldmljZV9ub2RlLCAmc2RtYS0+ZG1hX2RldmljZS5jaGFubmVscyk7CiAJfQogCi0JcmV0ID0gc2RtYV9pbml0KHNkbWEsIHJhbV9jb2RlLCBoZWFkZXItPnJhbV9jb2RlX3NpemUpOworCXJldCA9IHNkbWFfaW5pdChzZG1hKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycl9pbml0OwogCisJaWYgKHBkYXRhLT5zY3JpcHRfYWRkcnMpCisJCXNkbWFfYWRkX3NjcmlwdHMoc2RtYSwgcGRhdGEtPnNjcmlwdF9hZGRycyk7CisKKwlzZG1hX2dldF9maXJtd2FyZShzZG1hLCBwZGF0YS0+Y3B1X25hbWUsIHBkYXRhLT50b192ZXJzaW9uKTsKKwogCXNkbWEtPmRtYV9kZXZpY2UuZGV2ID0gJnBkZXYtPmRldjsKIAogCXNkbWEtPmRtYV9kZXZpY2UuZGV2aWNlX2FsbG9jX2NoYW5fcmVzb3VyY2VzID0gc2RtYV9hbGxvY19jaGFuX3Jlc291cmNlczsKQEAgLTEzMzYsMTAgKzEzMjQsNiBAQAogCQlnb3RvIGVycl9pbml0OwogCX0KIAotCWRldl9pbmZvKCZwZGV2LT5kZXYsICJpbml0aWFsaXplZCAoZmlybXdhcmUgJWQuJWQpXG4iLAotCQkJaGVhZGVyLT52ZXJzaW9uX21ham9yLAotCQkJaGVhZGVyLT52ZXJzaW9uX21pbm9yKTsKLQogCS8qIHJlcXVlc3QgY2hhbm5lbCAwLiBUaGlzIGlzIGFuIGludGVybmFsIGNvbnRyb2wgY2hhbm5lbAogCSAqIHRvIHRoZSBTRE1BIGVuZ2luZSBhbmQgbm90IGF2YWlsYWJsZSB0byBjbGllbnRzLgogCSAqLwpAQCAtMTM0NywxNSArMTMzMSwxMyBAQAogCWRtYV9jYXBfc2V0KERNQV9TTEFWRSwgbWFzayk7CiAJZG1hX3JlcXVlc3RfY2hhbm5lbChtYXNrLCBOVUxMLCBOVUxMKTsKIAotCXJlbGVhc2VfZmlybXdhcmUoZncpOworCWRldl9pbmZvKHNkbWEtPmRldiwgImluaXRpYWxpemVkXG4iKTsKIAogCXJldHVybiAwOwogCiBlcnJfaW5pdDoKIAlrZnJlZShzZG1hLT5zY3JpcHRfYWRkcnMpOwotZXJyX2Zpcm13YXJlOgotCXJlbGVhc2VfZmlybXdhcmUoZncpOwotZXJyX2NwdXR5cGU6CitlcnJfYWxsb2M6CiAJZnJlZV9pcnEoaXJxLCBzZG1hKTsKIGVycl9yZXF1ZXN0X2lycToKIAlpb3VubWFwKHNkbWEtPnJlZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvc2hkbWEuYyBiL2RyaXZlcnMvZG1hL3NoZG1hLmMKaW5kZXggODVmZmQ1ZS4uMjg3MjBkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvc2hkbWEuYworKysgYi9kcml2ZXJzL2RtYS9zaGRtYS5jCkBAIC0yNyw3ICsyNywxMCBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9zaF9kbWEuaD4KLQorI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CisjaW5jbHVkZSA8bGludXgva2RlYnVnLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9yY3VsaXN0Lmg+CiAjaW5jbHVkZSAic2hkbWEuaCIKIAogLyogRE1BIGRlc2NyaXB0b3IgY29udHJvbCAqLwpAQCAtNDMsNiArNDYsMTMgQEAKIC8qIERlZmF1bHQgTUVNQ1BZIHRyYW5zZmVyIHNpemUgPSAyXjIgPSA0IGJ5dGVzICovCiAjZGVmaW5lIExPRzJfREVGQVVMVF9YRkVSX1NJWkUJMgogCisvKgorICogVXNlZCBmb3Igd3JpdGUtc2lkZSBtdXR1YWwgZXhjbHVzaW9uIGZvciB0aGUgZ2xvYmFsIGRldmljZSBsaXN0LAorICogcmVhZC1zaWRlIHN5bmNocm9uaXphdGlvbiBieSB3YXkgb2YgUkNVLgorICovCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHNoX2RtYWVfbG9jayk7CitzdGF0aWMgTElTVF9IRUFEKHNoX2RtYWVfZGV2aWNlcyk7CisKIC8qIEEgYml0bWFzayB3aXRoIGJpdHMgZW5vdWdoIGZvciBlbnVtIHNoX2RtYWVfc2xhdmVfY2hhbl9pZCAqLwogc3RhdGljIHVuc2lnbmVkIGxvbmcgc2hfZG1hZV9zbGF2ZV91c2VkW0JJVFNfVE9fTE9OR1MoU0hfRE1BX1NMQVZFX05VTUJFUildOwogCkBAIC04MTcsMTAgKzgyNyw5IEBACiAJcmV0dXJuIHJldDsKIH0KIAotI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TSDQpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfU0hNT0JJTEUpCi1zdGF0aWMgaXJxcmV0dXJuX3Qgc2hfZG1hZV9lcnIoaW50IGlycSwgdm9pZCAqZGF0YSkKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc2hfZG1hZV9yZXNldChzdHJ1Y3Qgc2hfZG1hZV9kZXZpY2UgKnNoZGV2KQogewotCXN0cnVjdCBzaF9kbWFlX2RldmljZSAqc2hkZXYgPSAoc3RydWN0IHNoX2RtYWVfZGV2aWNlICopZGF0YTsKKwl1bnNpZ25lZCBpbnQgaGFuZGxlZCA9IDA7CiAJaW50IGk7CiAKIAkvKiBoYWx0IHRoZSBkbWEgY29udHJvbGxlciAqLwpAQCAtODI5LDI1ICs4MzgsMzUgQEAKIAkvKiBXZSBjYW5ub3QgZGV0ZWN0LCB3aGljaCBjaGFubmVsIGNhdXNlZCB0aGUgZXJyb3IsIGhhdmUgdG8gcmVzZXQgYWxsICovCiAJZm9yIChpID0gMDsgaSA8IFNIX0RNQUNfTUFYX0NIQU5ORUxTOyBpKyspIHsKIAkJc3RydWN0IHNoX2RtYWVfY2hhbiAqc2hfY2hhbiA9IHNoZGV2LT5jaGFuW2ldOwotCQlpZiAoc2hfY2hhbikgewotCQkJc3RydWN0IHNoX2Rlc2MgKmRlc2M7Ci0JCQkvKiBTdG9wIHRoZSBjaGFubmVsICovCi0JCQlkbWFlX2hhbHQoc2hfY2hhbik7Ci0JCQkvKiBDb21wbGV0ZSBhbGwgICovCi0JCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRlc2MsICZzaF9jaGFuLT5sZF9xdWV1ZSwgbm9kZSkgewotCQkJCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqdHggPSAmZGVzYy0+YXN5bmNfdHg7Ci0JCQkJZGVzYy0+bWFyayA9IERFU0NfSURMRTsKLQkJCQlpZiAodHgtPmNhbGxiYWNrKQotCQkJCQl0eC0+Y2FsbGJhY2sodHgtPmNhbGxiYWNrX3BhcmFtKTsKLQkJCX0KLQkJCWxpc3Rfc3BsaWNlX2luaXQoJnNoX2NoYW4tPmxkX3F1ZXVlLCAmc2hfY2hhbi0+bGRfZnJlZSk7CisJCXN0cnVjdCBzaF9kZXNjICpkZXNjOworCisJCWlmICghc2hfY2hhbikKKwkJCWNvbnRpbnVlOworCisJCS8qIFN0b3AgdGhlIGNoYW5uZWwgKi8KKwkJZG1hZV9oYWx0KHNoX2NoYW4pOworCisJCS8qIENvbXBsZXRlIGFsbCAgKi8KKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXNjLCAmc2hfY2hhbi0+bGRfcXVldWUsIG5vZGUpIHsKKwkJCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqdHggPSAmZGVzYy0+YXN5bmNfdHg7CisJCQlkZXNjLT5tYXJrID0gREVTQ19JRExFOworCQkJaWYgKHR4LT5jYWxsYmFjaykKKwkJCQl0eC0+Y2FsbGJhY2sodHgtPmNhbGxiYWNrX3BhcmFtKTsKIAkJfQorCisJCWxpc3Rfc3BsaWNlX2luaXQoJnNoX2NoYW4tPmxkX3F1ZXVlLCAmc2hfY2hhbi0+bGRfZnJlZSk7CisJCWhhbmRsZWQrKzsKIAl9CisKIAlzaF9kbWFlX3JzdChzaGRldik7CiAKLQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJcmV0dXJuICEhaGFuZGxlZDsKIH0KLSNlbmRpZgorCitzdGF0aWMgaXJxcmV0dXJuX3Qgc2hfZG1hZV9lcnIoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlyZXR1cm4gSVJRX1JFVFZBTChzaF9kbWFlX3Jlc2V0KGRhdGEpKTsKK30KIAogc3RhdGljIHZvaWQgZG1hZV9kb190YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKQEAgLTg3Niw2ICs4OTUsNjAgQEAKIAlzaF9kbWFlX2NoYW5fbGRfY2xlYW51cChzaF9jaGFuLCBmYWxzZSk7CiB9CiAKK3N0YXRpYyBib29sIHNoX2RtYWVfbm1pX25vdGlmeShzdHJ1Y3Qgc2hfZG1hZV9kZXZpY2UgKnNoZGV2KQoreworCXVuc2lnbmVkIGludCBoYW5kbGVkOworCisJLyogRmFzdCBwYXRoIG91dCBpZiBOTUlGIGlzIG5vdCBhc3NlcnRlZCBmb3IgdGhpcyBjb250cm9sbGVyICovCisJaWYgKChkbWFvcl9yZWFkKHNoZGV2KSAmIERNQU9SX05NSUYpID09IDApCisJCXJldHVybiBmYWxzZTsKKworCWhhbmRsZWQgPSBzaF9kbWFlX3Jlc2V0KHNoZGV2KTsKKwlpZiAoaGFuZGxlZCkKKwkJcmV0dXJuIHRydWU7CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBpbnQgc2hfZG1hZV9ubWlfaGFuZGxlcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyBjbWQsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHNoX2RtYWVfZGV2aWNlICpzaGRldjsKKwlpbnQgcmV0ID0gTk9USUZZX0RPTkU7CisJYm9vbCB0cmlnZ2VyZWQ7CisKKwkvKgorCSAqIE9ubHkgY29uY2VybiBvdXJzZWx2ZXMgd2l0aCBOTUkgZXZlbnRzLgorCSAqCisJICogTm9ybWFsbHkgd2Ugd291bGQgY2hlY2sgdGhlIGRpZSBjaGFpbiB2YWx1ZSwgYnV0IGFzIHRoaXMgbmVlZHMKKwkgKiB0byBiZSBhcmNoaXRlY3R1cmUgaW5kZXBlbmRlbnQsIGNoZWNrIGZvciBOTUkgY29udGV4dCBpbnN0ZWFkLgorCSAqLworCWlmICghaW5fbm1pKCkpCisJCXJldHVybiBOT1RJRllfRE9ORTsKKworCXJjdV9yZWFkX2xvY2soKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzaGRldiwgJnNoX2RtYWVfZGV2aWNlcywgbm9kZSkgeworCQkvKgorCQkgKiBPbmx5IHN0b3AgaWYgb25lIG9mIHRoZSBjb250cm9sbGVycyBoYXMgTk1JRiBhc3NlcnRlZCwKKwkJICogd2UgZG8gbm90IHdhbnQgdG8gaW50ZXJmZXJlIHdpdGggcmVndWxhciBhZGRyZXNzIGVycm9yCisJCSAqIGhhbmRsaW5nIG9yIE5NSSBldmVudHMgdGhhdCBkb24ndCBjb25jZXJuIHRoZSBETUFDcy4KKwkJICovCisJCXRyaWdnZXJlZCA9IHNoX2RtYWVfbm1pX25vdGlmeShzaGRldik7CisJCWlmICh0cmlnZ2VyZWQgPT0gdHJ1ZSkKKwkJCXJldCA9IE5PVElGWV9PSzsKKwl9CisJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHNoX2RtYWVfbm1pX25vdGlmaWVyIF9fcmVhZF9tb3N0bHkgPSB7CisJLm5vdGlmaWVyX2NhbGwJPSBzaF9kbWFlX25taV9oYW5kbGVyLAorCisJLyogUnVuIGJlZm9yZSBOTUkgZGVidWcgaGFuZGxlciBhbmQgS0dEQiAqLworCS5wcmlvcml0eQk9IDEsCit9OworCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBzaF9kbWFlX2NoYW5fcHJvYmUoc3RydWN0IHNoX2RtYWVfZGV2aWNlICpzaGRldiwgaW50IGlkLAogCQkJCQlpbnQgaXJxLCB1bnNpZ25lZCBsb25nIGZsYWdzKQogewpAQCAtOTY3LDYgKzEwNDAsNyBAQAogCXN0cnVjdCBzaF9kbWFlX3BkYXRhICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3MgPSBJUlFGX0RJU0FCTEVELAogCQljaGFuX2ZsYWdbU0hfRE1BQ19NQVhfQ0hBTk5FTFNdID0ge307CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgZXJyaXJxLCBjaGFuX2lycVtTSF9ETUFDX01BWF9DSEFOTkVMU107CiAJaW50IGVyciwgaSwgaXJxX2NudCA9IDAsIGlycXJlcyA9IDA7CiAJc3RydWN0IHNoX2RtYWVfZGV2aWNlICpzaGRldjsKQEAgLTEwMzIsNiArMTEwNiwxMCBAQAogCXBtX3J1bnRpbWVfZW5hYmxlKCZwZGV2LT5kZXYpOwogCXBtX3J1bnRpbWVfZ2V0X3N5bmMoJnBkZXYtPmRldik7CiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2hfZG1hZV9sb2NrLCBmbGFncyk7CisJbGlzdF9hZGRfdGFpbF9yY3UoJnNoZGV2LT5ub2RlLCAmc2hfZG1hZV9kZXZpY2VzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzaF9kbWFlX2xvY2ssIGZsYWdzKTsKKwogCS8qIHJlc2V0IGRtYSBjb250cm9sbGVyICovCiAJZXJyID0gc2hfZG1hZV9yc3Qoc2hkZXYpOwogCWlmIChlcnIpCkBAIC0xMTM1LDYgKzEyMTMsMTAgQEAKIGVpcnFfZXJyOgogI2VuZGlmCiByc3RfZXJyOgorCXNwaW5fbG9ja19pcnFzYXZlKCZzaF9kbWFlX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2RlbF9yY3UoJnNoZGV2LT5ub2RlKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzaF9kbWFlX2xvY2ssIGZsYWdzKTsKKwogCXBtX3J1bnRpbWVfcHV0KCZwZGV2LT5kZXYpOwogCWlmIChkbWFycykKIAkJaW91bm1hcChzaGRldi0+ZG1hcnMpOwpAQCAtMTE1NSw2ICsxMjM3LDcgQEAKIHsKIAlzdHJ1Y3Qgc2hfZG1hZV9kZXZpY2UgKnNoZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgZXJyaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKIAogCWRtYV9hc3luY19kZXZpY2VfdW5yZWdpc3Rlcigmc2hkZXYtPmNvbW1vbik7CkBAIC0xMTYyLDYgKzEyNDUsMTAgQEAKIAlpZiAoZXJyaXJxID4gMCkKIAkJZnJlZV9pcnEoZXJyaXJxLCBzaGRldik7CiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2hfZG1hZV9sb2NrLCBmbGFncyk7CisJbGlzdF9kZWxfcmN1KCZzaGRldi0+bm9kZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2hfZG1hZV9sb2NrLCBmbGFncyk7CisKIAkvKiBjaGFubmVsIGRhdGEgcmVtb3ZlICovCiAJc2hfZG1hZV9jaGFuX3JlbW92ZShzaGRldik7CiAKQEAgLTEyMDAsNiArMTI4NywxMSBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBzaF9kbWFlX2luaXQodm9pZCkKIHsKKwkvKiBXaXJlIHVwIE5NSSBoYW5kbGluZyAqLworCWludCBlcnIgPSByZWdpc3Rlcl9kaWVfbm90aWZpZXIoJnNoX2RtYWVfbm1pX25vdGlmaWVyKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCiAJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9wcm9iZSgmc2hfZG1hZV9kcml2ZXIsIHNoX2RtYWVfcHJvYmUpOwogfQogbW9kdWxlX2luaXQoc2hfZG1hZV9pbml0KTsKQEAgLTEyMDcsNiArMTI5OSw4IEBACiBzdGF0aWMgdm9pZCBfX2V4aXQgc2hfZG1hZV9leGl0KHZvaWQpCiB7CiAJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNoX2RtYWVfZHJpdmVyKTsKKworCXVucmVnaXN0ZXJfZGllX25vdGlmaWVyKCZzaF9kbWFlX25taV9ub3RpZmllcik7CiB9CiBtb2R1bGVfZXhpdChzaF9kbWFlX2V4aXQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9zaGRtYS5oIGIvZHJpdmVycy9kbWEvc2hkbWEuaAppbmRleCA0MDIxMjc1Li41MmU0ZmIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9zaGRtYS5oCisrKyBiL2RyaXZlcnMvZG1hL3NoZG1hLmgKQEAgLTQzLDYgKzQzLDcgQEAKIAlzdHJ1Y3QgZG1hX2RldmljZSBjb21tb247CiAJc3RydWN0IHNoX2RtYWVfY2hhbiAqY2hhbltTSF9ETUFDX01BWF9DSEFOTkVMU107CiAJc3RydWN0IHNoX2RtYWVfcGRhdGEgKnBkYXRhOworCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKIAl1MzIgX19pb21lbSAqY2hhbl9yZWc7CiAJdTE2IF9faW9tZW0gKmRtYXJzOwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9LY29uZmlnIGIvZHJpdmVycy9lZGFjL0tjb25maWcKaW5kZXggZjQzNmEyZi4uZmU3MGEzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL0tjb25maWcKKysrIGIvZHJpdmVycy9lZGFjL0tjb25maWcKQEAgLTc1LDExICs3NSwxMSBAQAogCWJvb2wKIAogY29uZmlnIEVEQUNfQU1ENjQKLQl0cmlzdGF0ZSAiQU1ENjQgKE9wdGVyb24sIEF0aGxvbjY0KSBLOCwgRjEwaCwgRjExaCIKLQlkZXBlbmRzIG9uIEVEQUNfTU1fRURBQyAmJiBBTURfTkIgJiYgWDg2XzY0ICYmIFBDSSAmJiBFREFDX0RFQ09ERV9NQ0UKKwl0cmlzdGF0ZSAiQU1ENjQgKE9wdGVyb24sIEF0aGxvbjY0KSBLOCwgRjEwaCIKKwlkZXBlbmRzIG9uIEVEQUNfTU1fRURBQyAmJiBBTURfTkIgJiYgWDg2XzY0ICYmIEVEQUNfREVDT0RFX01DRQogCWhlbHAKLQkgIFN1cHBvcnQgZm9yIGVycm9yIGRldGVjdGlvbiBhbmQgY29ycmVjdGlvbiBvbiB0aGUgQU1EIDY0Ci0JICBGYW1pbGllcyBvZiBNZW1vcnkgQ29udHJvbGxlcnMgKEs4LCBGMTBoIGFuZCBGMTFoKQorCSAgU3VwcG9ydCBmb3IgZXJyb3IgZGV0ZWN0aW9uIGFuZCBjb3JyZWN0aW9uIG9mIERSQU0gRUNDIGVycm9ycyBvbgorCSAgdGhlIEFNRDY0IGZhbWlsaWVzIG9mIG1lbW9yeSBjb250cm9sbGVycyAoSzggYW5kIEYxMGgpCiAKIGNvbmZpZyBFREFDX0FNRDY0X0VSUk9SX0lOSkVDVElPTgogCWJvb2wgIlN5c2ZzIEhXIEVycm9yIGluamVjdGlvbiBmYWNpbGl0aWVzIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuYyBiL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjLmMKaW5kZXggZWNhOWJhMS4uNGE1ZWNjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuYworKysgYi9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhYy5jCkBAIC0xNSwxMCArMTUsMTQgQEAKIAogc3RhdGljIHN0cnVjdCBtc3IgX19wZXJjcHUgKm1zcnM7CiAKLS8qIExvb2t1cCB0YWJsZSBmb3IgYWxsIHBvc3NpYmxlIE1DIGNvbnRyb2wgaW5zdGFuY2VzICovCi1zdHJ1Y3QgYW1kNjRfcHZ0Owotc3RhdGljIHN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaV9sb29rdXBbRURBQ19NQVhfTlVNTk9ERVNdOwotc3RhdGljIHN0cnVjdCBhbWQ2NF9wdnQgKnB2dF9sb29rdXBbRURBQ19NQVhfTlVNTk9ERVNdOworLyoKKyAqIGNvdW50IHN1Y2Nlc3NmdWxseSBpbml0aWFsaXplZCBkcml2ZXIgaW5zdGFuY2VzIGZvciBzZXR1cF9wY2lfZGV2aWNlKCkKKyAqLworc3RhdGljIGF0b21pY190IGRydl9pbnN0YW5jZXMgPSBBVE9NSUNfSU5JVCgwKTsKKworLyogUGVyLW5vZGUgZHJpdmVyIGluc3RhbmNlcyAqLworc3RhdGljIHN0cnVjdCBtZW1fY3RsX2luZm8gKiptY2lzOworc3RhdGljIHN0cnVjdCBlY2Nfc2V0dGluZ3MgKiplY2Nfc3RuZ3M7CiAKIC8qCiAgKiBBZGRyZXNzIHRvIERSQU0gYmFuayBtYXBwaW5nOiBzZWUgRjJ4ODAgZm9yIEs4IGFuZCBGMnhbMSwwXTgwIGZvciBGYW0xMCBhbmQKQEAgLTYyLDcgKzY2LDcgQEAKIAkJCSAgIFs1IC4uLiA2XQk9IDEwMjQsCiAJCQkgICBbNyAuLi4gOF0JPSAyMDQ4LAogCQkJICAgWzkgLi4uIDEwXQk9IDQwOTYsCi0JCQkgICBbMTFdCT0gODE5MiwKKwkJCSAgIFsxMV0JCT0gODE5MiwKIH07CiAKIC8qCkBAIC03Myw3ICs3NywxMSBAQAogICpGSVhNRTogUHJvZHVjZSBhIGJldHRlciBtYXBwaW5nL2xpbmVhcmlzYXRpb24uCiAgKi8KIAotc3RydWN0IHNjcnVicmF0ZSBzY3J1YnJhdGVzW10gPSB7CisKK3N0cnVjdCBzY3J1YnJhdGUgeworICAgICAgIHUzMiBzY3J1YnZhbDsgICAgICAgICAgIC8qIGJpdCBwYXR0ZXJuIGZvciBzY3J1YiByYXRlICovCisgICAgICAgdTMyIGJhbmR3aWR0aDsgICAgICAgICAgLyogYmFuZHdpZHRoIGNvbnN1bWVkIChieXRlcy9zZWMpICovCit9IHNjcnVicmF0ZXNbXSA9IHsKIAl7IDB4MDEsIDE2MDAwMDAwMDBVTH0sCiAJeyAweDAyLCA4MDAwMDAwMDBVTH0sCiAJeyAweDAzLCA0MDAwMDAwMDBVTH0sCkBAIC0xMTcsOCArMTI1LDcgQEAKICAqIHNjYW4gdGhlIHNjcnViIHJhdGUgbWFwcGluZyB0YWJsZSBmb3IgYSBjbG9zZSBvciBtYXRjaGluZyBiYW5kd2lkdGggdmFsdWUgdG8KICAqIGlzc3VlLiBJZiByZXF1ZXN0ZWQgaXMgdG9vIGJpZywgdGhlbiB1c2UgbGFzdCBtYXhpbXVtIHZhbHVlIGZvdW5kLgogICovCi1zdGF0aWMgaW50IGFtZDY0X3NlYXJjaF9zZXRfc2NydWJfcmF0ZShzdHJ1Y3QgcGNpX2RldiAqY3RsLCB1MzIgbmV3X2J3LAotCQkJCSAgICAgICB1MzIgbWluX3NjcnVicmF0ZSkKK3N0YXRpYyBpbnQgX19hbWQ2NF9zZXRfc2NydWJfcmF0ZShzdHJ1Y3QgcGNpX2RldiAqY3RsLCB1MzIgbmV3X2J3LCB1MzIgbWluX3JhdGUpCiB7CiAJdTMyIHNjcnVidmFsOwogCWludCBpOwpAQCAtMTM0LDcgKzE0MSw3IEBACiAJCSAqIHNraXAgc2NydWIgcmF0ZXMgd2hpY2ggYXJlbid0IHJlY29tbWVuZGVkCiAJCSAqIChzZWUgRjEwIEJLREcsIEYzeDU4KQogCQkgKi8KLQkJaWYgKHNjcnVicmF0ZXNbaV0uc2NydWJ2YWwgPCBtaW5fc2NydWJyYXRlKQorCQlpZiAoc2NydWJyYXRlc1tpXS5zY3J1YnZhbCA8IG1pbl9yYXRlKQogCQkJY29udGludWU7CiAKIAkJaWYgKHNjcnVicmF0ZXNbaV0uYmFuZHdpZHRoIDw9IG5ld19idykKQEAgLTE0OCw2NCArMTU1LDQxIEBACiAJfQogCiAJc2NydWJ2YWwgPSBzY3J1YnJhdGVzW2ldLnNjcnVidmFsOwotCWlmIChzY3J1YnZhbCkKLQkJZWRhY19wcmludGsoS0VSTl9ERUJVRywgRURBQ19NQywKLQkJCSAgICAiU2V0dGluZyBzY3J1YiByYXRlIGJhbmR3aWR0aDogJXVcbiIsCi0JCQkgICAgc2NydWJyYXRlc1tpXS5iYW5kd2lkdGgpOwotCWVsc2UKLQkJZWRhY19wcmludGsoS0VSTl9ERUJVRywgRURBQ19NQywgIlR1cm5pbmcgc2NydWJiaW5nIG9mZi5cbiIpOwogCiAJcGNpX3dyaXRlX2JpdHMzMihjdGwsIEs4X1NDUkNUUkwsIHNjcnVidmFsLCAweDAwMUYpOwogCisJaWYgKHNjcnVidmFsKQorCQlyZXR1cm4gc2NydWJyYXRlc1tpXS5iYW5kd2lkdGg7CisKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBhbWQ2NF9zZXRfc2NydWJfcmF0ZShzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2ksIHUzMiBiYW5kd2lkdGgpCitzdGF0aWMgaW50IGFtZDY0X3NldF9zY3J1Yl9yYXRlKHN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSwgdTMyIGJ3KQogewogCXN0cnVjdCBhbWQ2NF9wdnQgKnB2dCA9IG1jaS0+cHZ0X2luZm87Ci0JdTMyIG1pbl9zY3J1YnJhdGUgPSAweDA7CiAKLQlzd2l0Y2ggKGJvb3RfY3B1X2RhdGEueDg2KSB7Ci0JY2FzZSAweGY6Ci0JCW1pbl9zY3J1YnJhdGUgPSBLOF9NSU5fU0NSVUJfUkFURV9CSVRTOwotCQlicmVhazsKLQljYXNlIDB4MTA6Ci0JCW1pbl9zY3J1YnJhdGUgPSBGMTBfTUlOX1NDUlVCX1JBVEVfQklUUzsKLQkJYnJlYWs7Ci0JY2FzZSAweDExOgotCQltaW5fc2NydWJyYXRlID0gRjExX01JTl9TQ1JVQl9SQVRFX0JJVFM7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJYW1kNjRfcHJpbnRrKEtFUk5fRVJSLCAiVW5zdXBwb3J0ZWQgZmFtaWx5IVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlyZXR1cm4gYW1kNjRfc2VhcmNoX3NldF9zY3J1Yl9yYXRlKHB2dC0+bWlzY19mM19jdGwsIGJhbmR3aWR0aCwKLQkJCQkJICAgbWluX3NjcnVicmF0ZSk7CisJcmV0dXJuIF9fYW1kNjRfc2V0X3NjcnViX3JhdGUocHZ0LT5GMywgYncsIHB2dC0+bWluX3NjcnVicmF0ZSk7CiB9CiAKLXN0YXRpYyBpbnQgYW1kNjRfZ2V0X3NjcnViX3JhdGUoc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpLCB1MzIgKmJ3KQorc3RhdGljIGludCBhbWQ2NF9nZXRfc2NydWJfcmF0ZShzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2kpCiB7CiAJc3RydWN0IGFtZDY0X3B2dCAqcHZ0ID0gbWNpLT5wdnRfaW5mbzsKIAl1MzIgc2NydWJ2YWwgPSAwOwotCWludCBzdGF0dXMgPSAtMSwgaTsKKwlpbnQgaSwgcmV0dmFsID0gLUVJTlZBTDsKIAotCWFtZDY0X3JlYWRfcGNpX2NmZyhwdnQtPm1pc2NfZjNfY3RsLCBLOF9TQ1JDVFJMLCAmc2NydWJ2YWwpOworCWFtZDY0X3JlYWRfcGNpX2NmZyhwdnQtPkYzLCBLOF9TQ1JDVFJMLCAmc2NydWJ2YWwpOwogCiAJc2NydWJ2YWwgPSBzY3J1YnZhbCAmIDB4MDAxRjsKIAotCWVkYWNfcHJpbnRrKEtFUk5fREVCVUcsIEVEQUNfTUMsCi0JCSAgICAicGNpLXJlYWQsIHNkcmFtIHNjcnViIGNvbnRyb2wgdmFsdWU6ICVkIFxuIiwgc2NydWJ2YWwpOworCWFtZDY0X2RlYnVnKCJwY2ktcmVhZCwgc2RyYW0gc2NydWIgY29udHJvbCB2YWx1ZTogJWRcbiIsIHNjcnVidmFsKTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNjcnVicmF0ZXMpOyBpKyspIHsKIAkJaWYgKHNjcnVicmF0ZXNbaV0uc2NydWJ2YWwgPT0gc2NydWJ2YWwpIHsKLQkJCSpidyA9IHNjcnVicmF0ZXNbaV0uYmFuZHdpZHRoOwotCQkJc3RhdHVzID0gMDsKKwkJCXJldHZhbCA9IHNjcnVicmF0ZXNbaV0uYmFuZHdpZHRoOwogCQkJYnJlYWs7CiAJCX0KIAl9Ci0KLQlyZXR1cm4gc3RhdHVzOworCXJldHVybiByZXR2YWw7CiB9CiAKIC8qIE1hcCBmcm9tIGEgQ1NST1cgZW50cnkgdG8gdGhlIG1hc2sgZW50cnkgdGhhdCBvcGVyYXRlcyBvbiBpdCAqLwpAQCAtMzE0LDkgKzI5OCw3IEBACiAJaWYgKHVubGlrZWx5KChpbnRsdl9lbiAhPSAweDAxKSAmJgogCQkgICAgIChpbnRsdl9lbiAhPSAweDAzKSAmJgogCQkgICAgIChpbnRsdl9lbiAhPSAweDA3KSkpIHsKLQkJYW1kNjRfcHJpbnRrKEtFUk5fV0FSTklORywgImp1bmsgdmFsdWUgb2YgMHgleCBleHRyYWN0ZWQgZnJvbSAiCi0JCQkgICAgICJJbnRsdkVuIGZpZWxkIG9mIERSQU0gQmFzZSBSZWdpc3RlciBmb3Igbm9kZSAwOiAiCi0JCQkgICAgICJ0aGlzIHByb2JhYmx5IGluZGljYXRlcyBhIEJJT1MgYnVnLlxuIiwgaW50bHZfZW4pOworCQlhbWQ2NF93YXJuKCJEUkFNIEJhc2VbSW50bHZFbl0ganVuayB2YWx1ZTogMHgleCwgQklPUyBidWc/XG4iLCBpbnRsdl9lbik7CiAJCXJldHVybiBOVUxMOwogCX0KIApAQCAtMzMyLDExICszMTQsOSBAQAogCiAJLyogc2FuaXR5IHRlc3QgZm9yIHN5c19hZGRyICovCiAJaWYgKHVubGlrZWx5KCFhbWQ2NF9iYXNlX2xpbWl0X21hdGNoKHB2dCwgc3lzX2FkZHIsIG5vZGVfaWQpKSkgewotCQlhbWQ2NF9wcmludGsoS0VSTl9XQVJOSU5HLAotCQkJICAgICAiJXMoKTogc3lzX2FkZHIgMHglbGx4IGZhbGxzIG91dHNpZGUgYmFzZS9saW1pdCAiCi0JCQkgICAgICJhZGRyZXNzIHJhbmdlIGZvciBub2RlICVkIHdpdGggbm9kZSBpbnRlcmxlYXZpbmcgIgotCQkJICAgICAiZW5hYmxlZC5cbiIsCi0JCQkgICAgIF9fZnVuY19fLCBzeXNfYWRkciwgbm9kZV9pZCk7CisJCWFtZDY0X3dhcm4oIiVzOiBzeXNfYWRkciAweCVsbHggZmFsbHMgb3V0c2lkZSBiYXNlL2xpbWl0IGFkZHJlc3MiCisJCQkgICAicmFuZ2UgZm9yIG5vZGUgJWQgd2l0aCBub2RlIGludGVybGVhdmluZyBlbmFibGVkLlxuIiwKKwkJCSAgIF9fZnVuY19fLCBzeXNfYWRkciwgbm9kZV9pZCk7CiAJCXJldHVybiBOVUxMOwogCX0KIApAQCAtNzg4LDkgKzc2OCw4IEBACiAJY3Nyb3cgPSBpbnB1dF9hZGRyX3RvX2Nzcm93KG1jaSwgc3lzX2FkZHJfdG9faW5wdXRfYWRkcihtY2ksIHN5c19hZGRyKSk7CiAKIAlpZiAoY3Nyb3cgPT0gLTEpCi0JCWFtZDY0X21jX3ByaW50ayhtY2ksIEtFUk5fRVJSLAotCQkJICAgICAiRmFpbGVkIHRvIHRyYW5zbGF0ZSBJbnB1dEFkZHIgdG8gY3Nyb3cgZm9yICIKLQkJCSAgICAgImFkZHJlc3MgMHglbHhcbiIsICh1bnNpZ25lZCBsb25nKXN5c19hZGRyKTsKKwkJYW1kNjRfbWNfZXJyKG1jaSwgIkZhaWxlZCB0byB0cmFuc2xhdGUgSW5wdXRBZGRyIHRvIGNzcm93IGZvciAiCisJCQkJICAiYWRkcmVzcyAweCVseFxuIiwgKHVuc2lnbmVkIGxvbmcpc3lzX2FkZHIpOwogCXJldHVybiBjc3JvdzsKIH0KIApAQCAtODAxLDIxICs3ODAsNiBAQAogCXJldHVybiAoKGVyci0+bmJzaCA+PiAxNSkgJiAweGZmKSB8ICgoZXJyLT5uYnNsID4+IDE2KSAmIDB4ZmYwMCk7CiB9CiAKLXN0YXRpYyB2b2lkIGFtZDY0X2NwdV9kaXNwbGF5X2luZm8oc3RydWN0IGFtZDY0X3B2dCAqcHZ0KQotewotCWlmIChib290X2NwdV9kYXRhLng4NiA9PSAweDExKQotCQllZGFjX3ByaW50ayhLRVJOX0RFQlVHLCBFREFDX01DLCAiRjExaCBDUFUgZGV0ZWN0ZWRcbiIpOwotCWVsc2UgaWYgKGJvb3RfY3B1X2RhdGEueDg2ID09IDB4MTApCi0JCWVkYWNfcHJpbnRrKEtFUk5fREVCVUcsIEVEQUNfTUMsICJGMTBoIENQVSBkZXRlY3RlZFxuIik7Ci0JZWxzZSBpZiAoYm9vdF9jcHVfZGF0YS54ODYgPT0gMHhmKQotCQllZGFjX3ByaW50ayhLRVJOX0RFQlVHLCBFREFDX01DLCAiJXMgZGV0ZWN0ZWRcbiIsCi0JCQkocHZ0LT5leHRfbW9kZWwgPj0gSzhfUkVWX0YpID8KLQkJCSJSZXYgRiBvciBsYXRlciIgOiAiUmV2IEUgb3IgZWFybGllciIpOwotCWVsc2UKLQkJLyogd2UnbGwgaGFyZGx5IGV2ZXIgZXZlciBnZXQgaGVyZSAqLwotCQllZGFjX3ByaW50ayhLRVJOX0VSUiwgRURBQ19NQywgIlVua25vd24gY3B1IVxuIik7Ci19Ci0KIC8qCiAgKiBEZXRlcm1pbmUgaWYgdGhlIERJTU1zIGhhdmUgRUNDIGVuYWJsZWQuIEVDQyBpcyBlbmFibGVkIE9OTFkgaWYgYWxsIHRoZSBESU1NcwogICogYXJlIEVDQyBjYXBhYmxlLgpAQCAtODkzLDggKzg1Nyw3IEBACiAJCXJldHVybjsKIAl9CiAKLQlhbWQ2NF9wcmludGsoS0VSTl9JTkZPLCAidXNpbmcgJXMgc3luZHJvbWVzLlxuIiwKLQkJICAgICAoKHB2dC0+c3luX3R5cGUgPT0gOCkgPyAieDgiIDogIng0IikpOworCWFtZDY0X2luZm8oInVzaW5nICVzIHN5bmRyb21lcy5cbiIsICgocHZ0LT5zeW5fdHlwZSA9PSA4KSA/ICJ4OCIgOiAieDQiKSk7CiAKIAkvKiBPbmx5IGlmIE5PVCBnYW5nZWQgZG9lcyBkY2xyMSBoYXZlIHZhbGlkIGluZm8gKi8KIAlpZiAoIWRjdF9nYW5naW5nX2VuYWJsZWQocHZ0KSkKQEAgLTkxNSwxMCArODc4LDEwIEBACiAvKiBSZWFkIGluIGJvdGggb2YgREJBTSByZWdpc3RlcnMgKi8KIHN0YXRpYyB2b2lkIGFtZDY0X3JlYWRfZGJhbV9yZWcoc3RydWN0IGFtZDY0X3B2dCAqcHZ0KQogewotCWFtZDY0X3JlYWRfcGNpX2NmZyhwdnQtPmRyYW1fZjJfY3RsLCBEQkFNMCwgJnB2dC0+ZGJhbTApOworCWFtZDY0X3JlYWRfcGNpX2NmZyhwdnQtPkYyLCBEQkFNMCwgJnB2dC0+ZGJhbTApOwogCiAJaWYgKGJvb3RfY3B1X2RhdGEueDg2ID49IDB4MTApCi0JCWFtZDY0X3JlYWRfcGNpX2NmZyhwdnQtPmRyYW1fZjJfY3RsLCBEQkFNMSwgJnB2dC0+ZGJhbTEpOworCQlhbWQ2NF9yZWFkX3BjaV9jZmcocHZ0LT5GMiwgREJBTTEsICZwdnQtPmRiYW0xKTsKIH0KIAogLyoKQEAgLTk2NSwxNCArOTI4LDggQEAKIAkJcHZ0LT5kY3NtX21hc2sJCT0gUkVWX0ZfRjFYaF9EQ1NNX01BU0tfQklUUzsKIAkJcHZ0LT5kY3NfbWFza19ub3R1c2VkCT0gUkVWX0ZfRjFYaF9EQ1NfTk9UVVNFRF9CSVRTOwogCQlwdnQtPmRjc19zaGlmdAkJPSBSRVZfRl9GMVhoX0RDU19TSElGVDsKLQotCQlpZiAoYm9vdF9jcHVfZGF0YS54ODYgPT0gMHgxMSkgewotCQkJcHZ0LT5jc19jb3VudCA9IDQ7Ci0JCQlwdnQtPm51bV9kY3NtID0gMjsKLQkJfSBlbHNlIHsKLQkJCXB2dC0+Y3NfY291bnQgPSA4OwotCQkJcHZ0LT5udW1fZGNzbSA9IDQ7Ci0JCX0KKwkJcHZ0LT5jc19jb3VudAkJPSA4OworCQlwdnQtPm51bV9kY3NtCQk9IDQ7CiAJfQogfQogCkBAIC05ODcsMTQgKzk0NCwxNCBAQAogCiAJZm9yIChjcyA9IDA7IGNzIDwgcHZ0LT5jc19jb3VudDsgY3MrKykgewogCQlyZWcgPSBLOF9EQ1NCMCArIChjcyAqIDQpOwotCQlpZiAoIWFtZDY0X3JlYWRfcGNpX2NmZyhwdnQtPmRyYW1fZjJfY3RsLCByZWcsICZwdnQtPmRjc2IwW2NzXSkpCisJCWlmICghYW1kNjRfcmVhZF9wY2lfY2ZnKHB2dC0+RjIsIHJlZywgJnB2dC0+ZGNzYjBbY3NdKSkKIAkJCWRlYnVnZjAoIiAgRENTQjBbJWRdPTB4JTA4eCByZWc6IEYyeCV4XG4iLAogCQkJCWNzLCBwdnQtPmRjc2IwW2NzXSwgcmVnKTsKIAogCQkvKiBJZiBEQ1QgYXJlIE5PVCBnYW5nZWQsIHRoZW4gcmVhZCBpbiBEQ1QxJ3MgYmFzZSAqLwogCQlpZiAoYm9vdF9jcHVfZGF0YS54ODYgPj0gMHgxMCAmJiAhZGN0X2dhbmdpbmdfZW5hYmxlZChwdnQpKSB7CiAJCQlyZWcgPSBGMTBfRENTQjEgKyAoY3MgKiA0KTsKLQkJCWlmICghYW1kNjRfcmVhZF9wY2lfY2ZnKHB2dC0+ZHJhbV9mMl9jdGwsIHJlZywKKwkJCWlmICghYW1kNjRfcmVhZF9wY2lfY2ZnKHB2dC0+RjIsIHJlZywKIAkJCQkJCSZwdnQtPmRjc2IxW2NzXSkpCiAJCQkJZGVidWdmMCgiICBEQ1NCMVslZF09MHglMDh4IHJlZzogRjJ4JXhcbiIsCiAJCQkJCWNzLCBwdnQtPmRjc2IxW2NzXSwgcmVnKTsKQEAgLTEwMDUsMTQgKzk2MiwxNCBAQAogCiAJZm9yIChjcyA9IDA7IGNzIDwgcHZ0LT5udW1fZGNzbTsgY3MrKykgewogCQlyZWcgPSBLOF9EQ1NNMCArIChjcyAqIDQpOwotCQlpZiAoIWFtZDY0X3JlYWRfcGNpX2NmZyhwdnQtPmRyYW1fZjJfY3RsLCByZWcsICZwdnQtPmRjc20wW2NzXSkpCisJCWlmICghYW1kNjRfcmVhZF9wY2lfY2ZnKHB2dC0+RjIsIHJlZywgJnB2dC0+ZGNzbTBbY3NdKSkKIAkJCWRlYnVnZjAoIiAgICBEQ1NNMFslZF09MHglMDh4IHJlZzogRjJ4JXhcbiIsCiAJCQkJY3MsIHB2dC0+ZGNzbTBbY3NdLCByZWcpOwogCiAJCS8qIElmIERDVCBhcmUgTk9UIGdhbmdlZCwgdGhlbiByZWFkIGluIERDVDEncyBtYXNrICovCiAJCWlmIChib290X2NwdV9kYXRhLng4NiA+PSAweDEwICYmICFkY3RfZ2FuZ2luZ19lbmFibGVkKHB2dCkpIHsKIAkJCXJlZyA9IEYxMF9EQ1NNMSArIChjcyAqIDQpOwotCQkJaWYgKCFhbWQ2NF9yZWFkX3BjaV9jZmcocHZ0LT5kcmFtX2YyX2N0bCwgcmVnLAorCQkJaWYgKCFhbWQ2NF9yZWFkX3BjaV9jZmcocHZ0LT5GMiwgcmVnLAogCQkJCQkJJnB2dC0+ZGNzbTFbY3NdKSkKIAkJCQlkZWJ1Z2YwKCIgICAgRENTTTFbJWRdPTB4JTA4eCByZWc6IEYyeCV4XG4iLAogCQkJCQljcywgcHZ0LT5kY3NtMVtjc10sIHJlZyk7CkBAIC0xMDIyLDcgKzk3OSw3IEBACiAJfQogfQogCi1zdGF0aWMgZW51bSBtZW1fdHlwZSBhbWQ2NF9kZXRlcm1pbmVfbWVtb3J5X3R5cGUoc3RydWN0IGFtZDY0X3B2dCAqcHZ0KQorc3RhdGljIGVudW0gbWVtX3R5cGUgYW1kNjRfZGV0ZXJtaW5lX21lbW9yeV90eXBlKHN0cnVjdCBhbWQ2NF9wdnQgKnB2dCwgaW50IGNzKQogewogCWVudW0gbWVtX3R5cGUgdHlwZTsKIApAQCAtMTAzNSw3ICs5OTIsNyBAQAogCQl0eXBlID0gKHB2dC0+ZGNscjAgJiBCSVQoMTgpKSA/IE1FTV9ERFIgOiBNRU1fUkREUjsKIAl9CiAKLQlkZWJ1Z2YxKCIgIE1lbW9yeSB0eXBlIGlzOiAlc1xuIiwgZWRhY19tZW1fdHlwZXNbdHlwZV0pOworCWFtZDY0X2luZm8oIkNTJWQ6ICVzXG4iLCBjcywgZWRhY19tZW1fdHlwZXNbdHlwZV0pOwogCiAJcmV0dXJuIHR5cGU7CiB9CkBAIC0xMDUzLDE3ICsxMDEwLDE2IEBACiB7CiAJaW50IGZsYWcsIGVyciA9IDA7CiAKLQllcnIgPSBhbWQ2NF9yZWFkX3BjaV9jZmcocHZ0LT5kcmFtX2YyX2N0bCwgRjEwX0RDTFJfMCwgJnB2dC0+ZGNscjApOworCWVyciA9IGFtZDY0X3JlYWRfcGNpX2NmZyhwdnQtPkYyLCBGMTBfRENMUl8wLCAmcHZ0LT5kY2xyMCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCWlmICgoYm9vdF9jcHVfZGF0YS54ODZfbW9kZWwgPj4gNCkgPj0gSzhfUkVWX0YpIHsKKwlpZiAocHZ0LT5leHRfbW9kZWwgPj0gSzhfUkVWX0YpCiAJCS8qIFJldkYgKE5QVCkgYW5kIGxhdGVyICovCiAJCWZsYWcgPSBwdnQtPmRjbHIwICYgRjEwX1dJRFRIXzEyODsKLQl9IGVsc2UgeworCWVsc2UKIAkJLyogUmV2RSBhbmQgZWFybGllciAqLwogCQlmbGFnID0gcHZ0LT5kY2xyMCAmIFJFVkVfV0lEVEhfMTI4OwotCX0KIAogCS8qIG5vdCB1c2VkICovCiAJcHZ0LT5kY2xyMSA9IDA7CkBAIC0xMDkwLDE0ICsxMDQ2LDE0IEBACiAJdTMyIGxvdzsKIAl1MzIgb2ZmID0gZHJhbSA8PCAzOwkvKiA4IGJ5dGVzIGJldHdlZW4gRFJBTSBlbnRyaWVzICovCiAKLQlhbWQ2NF9yZWFkX3BjaV9jZmcocHZ0LT5hZGRyX2YxX2N0bCwgSzhfRFJBTV9CQVNFX0xPVyArIG9mZiwgJmxvdyk7CisJYW1kNjRfcmVhZF9wY2lfY2ZnKHB2dC0+RjEsIEs4X0RSQU1fQkFTRV9MT1cgKyBvZmYsICZsb3cpOwogCiAJLyogRXh0cmFjdCBwYXJ0cyBpbnRvIHNlcGFyYXRlIGRhdGEgZW50cmllcyAqLwogCXB2dC0+ZHJhbV9iYXNlW2RyYW1dID0gKCh1NjQpIGxvdyAmIDB4RkZGRjAwMDApIDw8IDg7CiAJcHZ0LT5kcmFtX0ludGx2RW5bZHJhbV0gPSAobG93ID4+IDgpICYgMHg3OwogCXB2dC0+ZHJhbV9yd19lbltkcmFtXSA9IChsb3cgJiAweDMpOwogCi0JYW1kNjRfcmVhZF9wY2lfY2ZnKHB2dC0+YWRkcl9mMV9jdGwsIEs4X0RSQU1fTElNSVRfTE9XICsgb2ZmLCAmbG93KTsKKwlhbWQ2NF9yZWFkX3BjaV9jZmcocHZ0LT5GMSwgSzhfRFJBTV9MSU1JVF9MT1cgKyBvZmYsICZsb3cpOwogCiAJLyoKIAkgKiBFeHRyYWN0IHBhcnRzIGludG8gc2VwYXJhdGUgZGF0YSBlbnRyaWVzLiBMaW1pdCBpcyB0aGUgSElHSEVTVCBtZW1vcnkKQEAgLTExMjcsOSArMTA4Myw4IEBACiAJCQkgKiAyIERJTU1zIGlzIGluIGVycm9yLiBTbyB3ZSBuZWVkIHRvIElEICdib3RoJyBvZiB0aGVtCiAJCQkgKiBhcyBzdXNwZWN0LgogCQkJICovCi0JCQlhbWQ2NF9tY19wcmludGsobWNpLCBLRVJOX1dBUk5JTkcsCi0JCQkJCSJ1bmtub3duIHN5bmRyb21lIDB4JTA0eCAtIHBvc3NpYmxlICIKLQkJCQkJImVycm9yIHJlcG9ydGluZyByYWNlXG4iLCBzeW5kcm9tZSk7CisJCQlhbWQ2NF9tY193YXJuKG1jaSwgInVua25vd24gc3luZHJvbWUgMHglMDR4IC0gcG9zc2libGUgIgorCQkJCQkgICAiZXJyb3IgcmVwb3J0aW5nIHJhY2VcbiIsIHN5bmRyb21lKTsKIAkJCWVkYWNfbWNfaGFuZGxlX2NlX25vX2luZm8obWNpLCBFREFDX01PRF9TVFIpOwogCQkJcmV0dXJuOwogCQl9CkBAIC0xMTUxLDggKzExMDYsNyBAQAogCSAqLwogCXNyY19tY2kgPSBmaW5kX21jX2J5X3N5c19hZGRyKG1jaSwgc3lzX2FkZHIpOwogCWlmICghc3JjX21jaSkgewotCQlhbWQ2NF9tY19wcmludGsobWNpLCBLRVJOX0VSUiwKLQkJCSAgICAgImZhaWxlZCB0byBtYXAgZXJyb3IgYWRkcmVzcyAweCVseCB0byBhIG5vZGVcbiIsCisJCWFtZDY0X21jX2VycihtY2ksICJmYWlsZWQgdG8gbWFwIGVycm9yIGFkZHIgMHglbHggdG8gYSBub2RlXG4iLAogCQkJICAgICAodW5zaWduZWQgbG9uZylzeXNfYWRkcik7CiAJCWVkYWNfbWNfaGFuZGxlX2NlX25vX2luZm8obWNpLCBFREFDX01PRF9TVFIpOwogCQlyZXR1cm47CkBAIC0xMjIwLDcgKzExNzQsNyBAQAogCSAqIGJvdGggY29udHJvbGxlcnMgc2luY2UgRElNTXMgY2FuIGJlIHBsYWNlZCBpbiBlaXRoZXIgb25lLgogCSAqLwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRiYW1zKTsgaSsrKSB7Ci0JCWlmIChhbWQ2NF9yZWFkX3BjaV9jZmcocHZ0LT5kcmFtX2YyX2N0bCwgZGJhbXNbaV0sICZkYmFtKSkKKwkJaWYgKGFtZDY0X3JlYWRfcGNpX2NmZyhwdnQtPkYyLCBkYmFtc1tpXSwgJmRiYW0pKQogCQkJZ290byBlcnJfcmVnOwogCiAJCWZvciAoaiA9IDA7IGogPCA0OyBqKyspIHsKQEAgLTEyMzQsNyArMTE4OCw3IEBACiAJaWYgKGNoYW5uZWxzID4gMikKIAkJY2hhbm5lbHMgPSAyOwogCi0JZGVidWdmMCgiTUNUIGNoYW5uZWwgY291bnQ6ICVkXG4iLCBjaGFubmVscyk7CisJYW1kNjRfaW5mbygiTUNUIGNoYW5uZWwgY291bnQ6ICVkXG4iLCBjaGFubmVscyk7CiAKIAlyZXR1cm4gY2hhbm5lbHM7CiAKQEAgLTEyNTUsMzEgKzEyMDksNiBAQAogCXJldHVybiBkYmFtX21hcFtjc19tb2RlXTsKIH0KIAotLyogRW5hYmxlIGV4dGVuZGVkIGNvbmZpZ3VyYXRpb24gYWNjZXNzIHZpYSAweENGOCBmZWF0dXJlICovCi1zdGF0aWMgdm9pZCBhbWQ2NF9zZXR1cChzdHJ1Y3QgYW1kNjRfcHZ0ICpwdnQpCi17Ci0JdTMyIHJlZzsKLQotCWFtZDY0X3JlYWRfcGNpX2NmZyhwdnQtPm1pc2NfZjNfY3RsLCBGMTBfTkJfQ0ZHX0hJR0gsICZyZWcpOwotCi0JcHZ0LT5mbGFncy5jZjhfZXh0Y2ZnID0gISEocmVnICYgRjEwX05CX0NGR19MT1dfRU5BQkxFX0VYVF9DRkcpOwotCXJlZyB8PSBGMTBfTkJfQ0ZHX0xPV19FTkFCTEVfRVhUX0NGRzsKLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHB2dC0+bWlzY19mM19jdGwsIEYxMF9OQl9DRkdfSElHSCwgcmVnKTsKLX0KLQotLyogUmVzdG9yZSB0aGUgZXh0ZW5kZWQgY29uZmlndXJhdGlvbiBhY2Nlc3MgdmlhIDB4Q0Y4IGZlYXR1cmUgKi8KLXN0YXRpYyB2b2lkIGFtZDY0X3RlYXJkb3duKHN0cnVjdCBhbWQ2NF9wdnQgKnB2dCkKLXsKLQl1MzIgcmVnOwotCi0JYW1kNjRfcmVhZF9wY2lfY2ZnKHB2dC0+bWlzY19mM19jdGwsIEYxMF9OQl9DRkdfSElHSCwgJnJlZyk7Ci0KLQlyZWcgJj0gfkYxMF9OQl9DRkdfTE9XX0VOQUJMRV9FWFRfQ0ZHOwotCWlmIChwdnQtPmZsYWdzLmNmOF9leHRjZmcpCi0JCXJlZyB8PSBGMTBfTkJfQ0ZHX0xPV19FTkFCTEVfRVhUX0NGRzsKLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHB2dC0+bWlzY19mM19jdGwsIEYxMF9OQl9DRkdfSElHSCwgcmVnKTsKLX0KLQogc3RhdGljIHU2NCBmMTBfZ2V0X2Vycm9yX2FkZHJlc3Moc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpLAogCQkJc3RydWN0IGVycl9yZWdzICppbmZvKQogewpAQCAtMTMwMSwxMCArMTIzMCw4IEBACiAJaGlnaF9vZmZzZXQgPSBGMTBfRFJBTV9CQVNFX0hJR0ggKyAoZHJhbSA8PCAzKTsKIAogCS8qIHJlYWQgdGhlICdyYXcnIERSQU0gQkFTRSBBZGRyZXNzIHJlZ2lzdGVyICovCi0JYW1kNjRfcmVhZF9wY2lfY2ZnKHB2dC0+YWRkcl9mMV9jdGwsIGxvd19vZmZzZXQsICZsb3dfYmFzZSk7Ci0KLQkvKiBSZWFkIGZyb20gdGhlIEVDUyBkYXRhIHJlZ2lzdGVyICovCi0JYW1kNjRfcmVhZF9wY2lfY2ZnKHB2dC0+YWRkcl9mMV9jdGwsIGhpZ2hfb2Zmc2V0LCAmaGlnaF9iYXNlKTsKKwlhbWQ2NF9yZWFkX3BjaV9jZmcocHZ0LT5GMSwgbG93X29mZnNldCwgJmxvd19iYXNlKTsKKwlhbWQ2NF9yZWFkX3BjaV9jZmcocHZ0LT5GMSwgaGlnaF9vZmZzZXQsICZoaWdoX2Jhc2UpOwogCiAJLyogRXh0cmFjdCBwYXJ0cyBpbnRvIHNlcGFyYXRlIGRhdGEgZW50cmllcyAqLwogCXB2dC0+ZHJhbV9yd19lbltkcmFtXSA9IChsb3dfYmFzZSAmIDB4Myk7CkBAIC0xMzIxLDEwICsxMjQ4LDggQEAKIAloaWdoX29mZnNldCA9IEYxMF9EUkFNX0xJTUlUX0hJR0ggKyAoZHJhbSA8PCAzKTsKIAogCS8qIHJlYWQgdGhlICdyYXcnIExJTUlUIHJlZ2lzdGVycyAqLwotCWFtZDY0X3JlYWRfcGNpX2NmZyhwdnQtPmFkZHJfZjFfY3RsLCBsb3dfb2Zmc2V0LCAmbG93X2xpbWl0KTsKLQotCS8qIFJlYWQgZnJvbSB0aGUgRUNTIGRhdGEgcmVnaXN0ZXIgZm9yIHRoZSBISUdIIHBvcnRpb24gKi8KLQlhbWQ2NF9yZWFkX3BjaV9jZmcocHZ0LT5hZGRyX2YxX2N0bCwgaGlnaF9vZmZzZXQsICZoaWdoX2xpbWl0KTsKKwlhbWQ2NF9yZWFkX3BjaV9jZmcocHZ0LT5GMSwgbG93X29mZnNldCwgJmxvd19saW1pdCk7CisJYW1kNjRfcmVhZF9wY2lfY2ZnKHB2dC0+RjEsIGhpZ2hfb2Zmc2V0LCAmaGlnaF9saW1pdCk7CiAKIAlwdnQtPmRyYW1fRHN0Tm9kZVtkcmFtXSA9IChsb3dfbGltaXQgJiAweDcpOwogCXB2dC0+ZHJhbV9JbnRsdlNlbFtkcmFtXSA9IChsb3dfbGltaXQgPj4gOCkgJiAweDc7CkBAIC0xMzQxLDcgKzEyNjYsNyBAQAogc3RhdGljIHZvaWQgZjEwX3JlYWRfZHJhbV9jdGxfcmVnaXN0ZXIoc3RydWN0IGFtZDY0X3B2dCAqcHZ0KQogewogCi0JaWYgKCFhbWQ2NF9yZWFkX3BjaV9jZmcocHZ0LT5kcmFtX2YyX2N0bCwgRjEwX0RDVExfU0VMX0xPVywKKwlpZiAoIWFtZDY0X3JlYWRfcGNpX2NmZyhwdnQtPkYyLCBGMTBfRENUTF9TRUxfTE9XLAogCQkJCSZwdnQtPmRyYW1fY3RsX3NlbGVjdF9sb3cpKSB7CiAJCWRlYnVnZjAoIkYyeDExMCAoRENUTCBTZWwuIExvdyk6IDB4JTA4eCwgIgogCQkJIkhpZ2ggcmFuZ2UgYWRkcmVzc2VzIGF0OiAweCV4XG4iLApAQCAtMTM2Nyw3ICsxMjkyLDcgQEAKIAkJCWRjdF9zZWxfaW50ZXJsZWF2ZV9hZGRyKHB2dCkpOwogCX0KIAotCWFtZDY0X3JlYWRfcGNpX2NmZyhwdnQtPmRyYW1fZjJfY3RsLCBGMTBfRENUTF9TRUxfSElHSCwKKwlhbWQ2NF9yZWFkX3BjaV9jZmcocHZ0LT5GMiwgRjEwX0RDVExfU0VMX0hJR0gsCiAJCQkgICAmcHZ0LT5kcmFtX2N0bF9zZWxlY3RfaGlnaCk7CiB9CiAKQEAgLTE0OTYsNyArMTQyMSw3IEBACiAJaW50IGNzX2ZvdW5kID0gLUVJTlZBTDsKIAlpbnQgY3Nyb3c7CiAKLQltY2kgPSBtY2lfbG9va3VwW25pZF07CisJbWNpID0gbWNpc1tuaWRdOwogCWlmICghbWNpKQogCQlyZXR1cm4gY3NfZm91bmQ7CiAKQEAgLTE3MzgsMjggKzE2NjMsMTcgQEAKIAkJaWYgKGRjc2JbZGltbSoyICsgMV0gJiBLOF9EQ1NCX0NTX0VOQUJMRSkKIAkJCXNpemUxID0gcHZ0LT5vcHMtPmRiYW1fdG9fY3MocHZ0LCBEQkFNX0RJTU0oZGltbSwgZGJhbSkpOwogCi0JCWVkYWNfcHJpbnRrKEtFUk5fREVCVUcsIEVEQUNfTUMsICIgJWQ6ICU1ZE1CICVkOiAlNWRNQlxuIiwKLQkJCSAgICBkaW1tICogMiwgICAgIHNpemUwIDw8IGZhY3RvciwKLQkJCSAgICBkaW1tICogMiArIDEsIHNpemUxIDw8IGZhY3Rvcik7CisJCWFtZDY0X2luZm8oRURBQ19NQyAiOiAlZDogJTVkTUIgJWQ6ICU1ZE1CXG4iLAorCQkJCWRpbW0gKiAyLCAgICAgc2l6ZTAgPDwgZmFjdG9yLAorCQkJCWRpbW0gKiAyICsgMSwgc2l6ZTEgPDwgZmFjdG9yKTsKIAl9CiB9CiAKLS8qCi0gKiBUaGVyZSBjdXJyZW50bHkgYXJlIDMgdHlwZXMgdHlwZSBvZiBNQyBkZXZpY2VzIGZvciBBTUQgQXRobG9uL09wdGVyb25zCi0gKiAoYXMgcGVyIFBDSSBERVZJQ0VfSURzKToKLSAqCi0gKiBGYW1pbHkgSzg6IFRoYXQgaXMgdGhlIEF0aGxvbjY0IGFuZCBPcHRlcm9uIENQVXMuIFRoZXkgYWxsIGhhdmUgdGhlIHNhbWUgUENJCi0gKiBERVZJQ0UgSUQsIGV2ZW4gdGhvdWdoIHRoZXJlIGlzIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIGRpZmZlcmVudCBSZXZpc2lvbnMKLSAqIChDRyxELEUsRikuCi0gKgotICogRmFtaWx5IEYxMGggYW5kIEYxMWguCi0gKgotICovCiBzdGF0aWMgc3RydWN0IGFtZDY0X2ZhbWlseV90eXBlIGFtZDY0X2ZhbWlseV90eXBlc1tdID0gewogCVtLOF9DUFVTXSA9IHsKLQkJLmN0bF9uYW1lID0gIlJldkYiLAotCQkuYWRkcl9mMV9jdGwgPSBQQ0lfREVWSUNFX0lEX0FNRF9LOF9OQl9BRERSTUFQLAotCQkubWlzY19mM19jdGwgPSBQQ0lfREVWSUNFX0lEX0FNRF9LOF9OQl9NSVNDLAorCQkuY3RsX25hbWUgPSAiSzgiLAorCQkuZjFfaWQgPSBQQ0lfREVWSUNFX0lEX0FNRF9LOF9OQl9BRERSTUFQLAorCQkuZjNfaWQgPSBQQ0lfREVWSUNFX0lEX0FNRF9LOF9OQl9NSVNDLAogCQkub3BzID0gewogCQkJLmVhcmx5X2NoYW5uZWxfY291bnQJPSBrOF9lYXJseV9jaGFubmVsX2NvdW50LAogCQkJLmdldF9lcnJvcl9hZGRyZXNzCT0gazhfZ2V0X2Vycm9yX2FkZHJlc3MsCkBAIC0xNzY5LDIyICsxNjgzLDkgQEAKIAkJfQogCX0sCiAJW0YxMF9DUFVTXSA9IHsKLQkJLmN0bF9uYW1lID0gIkZhbWlseSAxMGgiLAotCQkuYWRkcl9mMV9jdGwgPSBQQ0lfREVWSUNFX0lEX0FNRF8xMEhfTkJfTUFQLAotCQkubWlzY19mM19jdGwgPSBQQ0lfREVWSUNFX0lEX0FNRF8xMEhfTkJfTUlTQywKLQkJLm9wcyA9IHsKLQkJCS5lYXJseV9jaGFubmVsX2NvdW50CT0gZjEwX2Vhcmx5X2NoYW5uZWxfY291bnQsCi0JCQkuZ2V0X2Vycm9yX2FkZHJlc3MJPSBmMTBfZ2V0X2Vycm9yX2FkZHJlc3MsCi0JCQkucmVhZF9kcmFtX2Jhc2VfbGltaXQJPSBmMTBfcmVhZF9kcmFtX2Jhc2VfbGltaXQsCi0JCQkucmVhZF9kcmFtX2N0bF9yZWdpc3Rlcgk9IGYxMF9yZWFkX2RyYW1fY3RsX3JlZ2lzdGVyLAotCQkJLm1hcF9zeXNhZGRyX3RvX2Nzcm93CT0gZjEwX21hcF9zeXNhZGRyX3RvX2Nzcm93LAotCQkJLmRiYW1fdG9fY3MJCT0gZjEwX2RiYW1fdG9fY2hpcF9zZWxlY3QsCi0JCX0KLQl9LAotCVtGMTFfQ1BVU10gPSB7Ci0JCS5jdGxfbmFtZSA9ICJGYW1pbHkgMTFoIiwKLQkJLmFkZHJfZjFfY3RsID0gUENJX0RFVklDRV9JRF9BTURfMTFIX05CX01BUCwKLQkJLm1pc2NfZjNfY3RsID0gUENJX0RFVklDRV9JRF9BTURfMTFIX05CX01JU0MsCisJCS5jdGxfbmFtZSA9ICJGMTBoIiwKKwkJLmYxX2lkID0gUENJX0RFVklDRV9JRF9BTURfMTBIX05CX01BUCwKKwkJLmYzX2lkID0gUENJX0RFVklDRV9JRF9BTURfMTBIX05CX01JU0MsCiAJCS5vcHMgPSB7CiAJCQkuZWFybHlfY2hhbm5lbF9jb3VudAk9IGYxMF9lYXJseV9jaGFubmVsX2NvdW50LAogCQkJLmdldF9lcnJvcl9hZGRyZXNzCT0gZjEwX2dldF9lcnJvcl9hZGRyZXNzLApAQCAtMTk3MCw4ICsxODcxLDcgQEAKIAkJCQkJICBBUlJBWV9TSVpFKHg0X3ZlY3RvcnMpLAogCQkJCQkgIHB2dC0+c3luX3R5cGUpOwogCWVsc2UgewotCQlhbWQ2NF9wcmludGsoS0VSTl9XQVJOSU5HLCAiJXM6IElsbGVnYWwgc3luZHJvbWUgdHlwZTogJXVcbiIsCi0JCQkJCSAgIF9fZnVuY19fLCBwdnQtPnN5bl90eXBlKTsKKwkJYW1kNjRfd2FybigiSWxsZWdhbCBzeW5kcm9tZSB0eXBlOiAldVxuIiwgcHZ0LT5zeW5fdHlwZSk7CiAJCXJldHVybiBlcnJfc3ltOwogCX0KIApAQCAtMTk4OSwxNyArMTg4OSwxNSBAQAogCXU2NCBzeXNfYWRkcjsKIAogCS8qIEVuc3VyZSB0aGF0IHRoZSBFcnJvciBBZGRyZXNzIGlzIFZBTElEICovCi0JaWYgKChpbmZvLT5uYnNoICYgSzhfTkJTSF9WQUxJRF9FUlJPUl9BRERSKSA9PSAwKSB7Ci0JCWFtZDY0X21jX3ByaW50ayhtY2ksIEtFUk5fRVJSLAotCQkJIkhXIGhhcyBubyBFUlJPUl9BRERSRVNTIGF2YWlsYWJsZVxuIik7CisJaWYgKCEoaW5mby0+bmJzaCAmIEs4X05CU0hfVkFMSURfRVJST1JfQUREUikpIHsKKwkJYW1kNjRfbWNfZXJyKG1jaSwgIkhXIGhhcyBubyBFUlJPUl9BRERSRVNTIGF2YWlsYWJsZVxuIik7CiAJCWVkYWNfbWNfaGFuZGxlX2NlX25vX2luZm8obWNpLCBFREFDX01PRF9TVFIpOwogCQlyZXR1cm47CiAJfQogCiAJc3lzX2FkZHIgPSBwdnQtPm9wcy0+Z2V0X2Vycm9yX2FkZHJlc3MobWNpLCBpbmZvKTsKIAotCWFtZDY0X21jX3ByaW50ayhtY2ksIEtFUk5fRVJSLAotCQkiQ0UgRVJST1JfQUREUkVTUz0gMHglbGx4XG4iLCBzeXNfYWRkcik7CisJYW1kNjRfbWNfZXJyKG1jaSwgIkNFIEVSUk9SX0FERFJFU1M9IDB4JWxseFxuIiwgc3lzX2FkZHIpOwogCiAJcHZ0LT5vcHMtPm1hcF9zeXNhZGRyX3RvX2Nzcm93KG1jaSwgaW5mbywgc3lzX2FkZHIpOwogfQpAQCAtMjAxNiw5ICsxOTE0LDggQEAKIAogCWxvZ19tY2kgPSBtY2k7CiAKLQlpZiAoKGluZm8tPm5ic2ggJiBLOF9OQlNIX1ZBTElEX0VSUk9SX0FERFIpID09IDApIHsKLQkJYW1kNjRfbWNfcHJpbnRrKG1jaSwgS0VSTl9DUklULAotCQkJIkhXIGhhcyBubyBFUlJPUl9BRERSRVNTIGF2YWlsYWJsZVxuIik7CisJaWYgKCEoaW5mby0+bmJzaCAmIEs4X05CU0hfVkFMSURfRVJST1JfQUREUikpIHsKKwkJYW1kNjRfbWNfZXJyKG1jaSwgIkhXIGhhcyBubyBFUlJPUl9BRERSRVNTIGF2YWlsYWJsZVxuIik7CiAJCWVkYWNfbWNfaGFuZGxlX3VlX25vX2luZm8obG9nX21jaSwgRURBQ19NT0RfU1RSKTsKIAkJcmV0dXJuOwogCX0KQEAgLTIwMzEsOSArMTkyOCw4IEBACiAJICovCiAJc3JjX21jaSA9IGZpbmRfbWNfYnlfc3lzX2FkZHIobWNpLCBzeXNfYWRkcik7CiAJaWYgKCFzcmNfbWNpKSB7Ci0JCWFtZDY0X21jX3ByaW50ayhtY2ksIEtFUk5fQ1JJVCwKLQkJCSJFUlJPUiBBRERSRVNTICgweCVseCkgdmFsdWUgTk9UIG1hcHBlZCB0byBhIE1DXG4iLAotCQkJKHVuc2lnbmVkIGxvbmcpc3lzX2FkZHIpOworCQlhbWQ2NF9tY19lcnIobWNpLCAiRVJST1IgQUREUkVTUyAoMHglbHgpIE5PVCBtYXBwZWQgdG8gYSBNQ1xuIiwKKwkJCQkgICh1bnNpZ25lZCBsb25nKXN5c19hZGRyKTsKIAkJZWRhY19tY19oYW5kbGVfdWVfbm9faW5mbyhsb2dfbWNpLCBFREFDX01PRF9TVFIpOwogCQlyZXR1cm47CiAJfQpAQCAtMjA0Miw5ICsxOTM4LDggQEAKIAogCWNzcm93ID0gc3lzX2FkZHJfdG9fY3Nyb3cobG9nX21jaSwgc3lzX2FkZHIpOwogCWlmIChjc3JvdyA8IDApIHsKLQkJYW1kNjRfbWNfcHJpbnRrKG1jaSwgS0VSTl9DUklULAotCQkJIkVSUk9SX0FERFJFU1MgKDB4JWx4KSB2YWx1ZSBOT1QgbWFwcGVkIHRvICdjc3JvdydcbiIsCi0JCQkodW5zaWduZWQgbG9uZylzeXNfYWRkcik7CisJCWFtZDY0X21jX2VycihtY2ksICJFUlJPUl9BRERSRVNTICgweCVseCkgTk9UIG1hcHBlZCB0byBDU1xuIiwKKwkJCQkgICh1bnNpZ25lZCBsb25nKXN5c19hZGRyKTsKIAkJZWRhY19tY19oYW5kbGVfdWVfbm9faW5mbyhsb2dfbWNpLCBFREFDX01PRF9TVFIpOwogCX0gZWxzZSB7CiAJCWVycm9yX2FkZHJlc3NfdG9fcGFnZV9hbmRfb2Zmc2V0KHN5c19hZGRyLCAmcGFnZSwgJm9mZnNldCk7CkBAIC0yMDU1LDggKzE5NTAsOCBAQAogc3RhdGljIGlubGluZSB2b2lkIF9fYW1kNjRfZGVjb2RlX2J1c19lcnJvcihzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2ksCiAJCQkJCSAgICBzdHJ1Y3QgZXJyX3JlZ3MgKmluZm8pCiB7Ci0JdTMyIGVjICA9IEVSUk9SX0NPREUoaW5mby0+bmJzbCk7Ci0JdTMyIHhlYyA9IEVYVF9FUlJPUl9DT0RFKGluZm8tPm5ic2wpOworCXUxNiBlYyA9IEVDKGluZm8tPm5ic2wpOworCXU4IHhlYyA9IFhFQyhpbmZvLT5uYnNsLCAweDFmKTsKIAlpbnQgZWNjX3R5cGUgPSAoaW5mby0+bmJzaCA+PiAxMykgJiAweDM7CiAKIAkvKiBCYWlsIGVhcmx5IG91dCBpZiB0aGlzIHdhcyBhbiAnb2JzZXJ2ZWQnIGVycm9yICovCkBAIC0yMDc1LDcgKzE5NzAsNyBAQAogCiB2b2lkIGFtZDY0X2RlY29kZV9idXNfZXJyb3IoaW50IG5vZGVfaWQsIHN0cnVjdCBtY2UgKm0sIHUzMiBuYmNmZykKIHsKLQlzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2kgPSBtY2lfbG9va3VwW25vZGVfaWRdOworCXN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSA9IG1jaXNbbm9kZV9pZF07CiAJc3RydWN0IGVycl9yZWdzIHJlZ3M7CiAKIAlyZWdzLm5ic2wgID0gKHUzMikgbS0+c3RhdHVzOwpAQCAtMjA5OSw3NSArMTk5NCw1MCBAQAogfQogCiAvKgotICogSW5wdXQ6Ci0gKgkxKSBzdHJ1Y3QgYW1kNjRfcHZ0IHdoaWNoIGNvbnRhaW5zIHB2dC0+ZHJhbV9mMl9jdGwgcG9pbnRlcgotICoJMikgQU1EIEZhbWlseSBpbmRleCB2YWx1ZQotICoKLSAqIE91cHV0OgotICoJVXBvbiByZXR1cm4gb2YgMCwgdGhlIGZvbGxvd2luZyBmaWxsZWQgaW46Ci0gKgotICoJCXN0cnVjdCBwdnQtPmFkZHJfZjFfY3RsCi0gKgkJc3RydWN0IHB2dC0+bWlzY19mM19jdGwKLSAqCi0gKglGaWxsZWQgaW4gd2l0aCByZWxhdGVkIGRldmljZSBmdW5jaXRpb25zIG9mICdkcmFtX2YyX2N0bCcKLSAqCVRoZXNlIGRldmljZXMgYXJlICJyZXNlcnZlZCIgdmlhIHRoZSBwY2lfZ2V0X2RldmljZSgpCi0gKgotICoJVXBvbiByZXR1cm4gb2YgMSAoZXJyb3Igc3RhdHVzKToKLSAqCi0gKgkJTm90aGluZyByZXNlcnZlZAorICogVXNlIHB2dC0+RjIgd2hpY2ggY29udGFpbnMgdGhlIEYyIENQVSBQQ0kgZGV2aWNlIHRvIGdldCB0aGUgcmVsYXRlZAorICogRjEgKEFkZHJNYXApIGFuZCBGMyAoTWlzYykgZGV2aWNlcy4gUmV0dXJuIG5lZ2F0aXZlIHZhbHVlIG9uIGVycm9yLgogICovCi1zdGF0aWMgaW50IGFtZDY0X3Jlc2VydmVfbWNfc2libGluZ19kZXZpY2VzKHN0cnVjdCBhbWQ2NF9wdnQgKnB2dCwgaW50IG1jX2lkeCkKK3N0YXRpYyBpbnQgcmVzZXJ2ZV9tY19zaWJsaW5nX2RldnMoc3RydWN0IGFtZDY0X3B2dCAqcHZ0LCB1MTYgZjFfaWQsIHUxNiBmM19pZCkKIHsKLQljb25zdCBzdHJ1Y3QgYW1kNjRfZmFtaWx5X3R5cGUgKmFtZDY0X2RldiA9ICZhbWQ2NF9mYW1pbHlfdHlwZXNbbWNfaWR4XTsKLQogCS8qIFJlc2VydmUgdGhlIEFERFJFU1MgTUFQIERldmljZSAqLwotCXB2dC0+YWRkcl9mMV9jdGwgPSBwY2lfZ2V0X3JlbGF0ZWRfZnVuY3Rpb24ocHZ0LT5kcmFtX2YyX2N0bC0+dmVuZG9yLAotCQkJCQkJICAgIGFtZDY0X2Rldi0+YWRkcl9mMV9jdGwsCi0JCQkJCQkgICAgcHZ0LT5kcmFtX2YyX2N0bCk7Ci0KLQlpZiAoIXB2dC0+YWRkcl9mMV9jdGwpIHsKLQkJYW1kNjRfcHJpbnRrKEtFUk5fRVJSLCAiZXJyb3IgYWRkcmVzcyBtYXAgZGV2aWNlIG5vdCBmb3VuZDogIgotCQkJICAgICAidmVuZG9yICV4IGRldmljZSAweCV4IChicm9rZW4gQklPUz8pXG4iLAotCQkJICAgICBQQ0lfVkVORE9SX0lEX0FNRCwgYW1kNjRfZGV2LT5hZGRyX2YxX2N0bCk7Ci0JCXJldHVybiAxOworCXB2dC0+RjEgPSBwY2lfZ2V0X3JlbGF0ZWRfZnVuY3Rpb24ocHZ0LT5GMi0+dmVuZG9yLCBmMV9pZCwgcHZ0LT5GMik7CisJaWYgKCFwdnQtPkYxKSB7CisJCWFtZDY0X2VycigiZXJyb3IgYWRkcmVzcyBtYXAgZGV2aWNlIG5vdCBmb3VuZDogIgorCQkJICAidmVuZG9yICV4IGRldmljZSAweCV4IChicm9rZW4gQklPUz8pXG4iLAorCQkJICBQQ0lfVkVORE9SX0lEX0FNRCwgZjFfaWQpOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAkvKiBSZXNlcnZlIHRoZSBNSVNDIERldmljZSAqLwotCXB2dC0+bWlzY19mM19jdGwgPSBwY2lfZ2V0X3JlbGF0ZWRfZnVuY3Rpb24ocHZ0LT5kcmFtX2YyX2N0bC0+dmVuZG9yLAotCQkJCQkJICAgIGFtZDY0X2Rldi0+bWlzY19mM19jdGwsCi0JCQkJCQkgICAgcHZ0LT5kcmFtX2YyX2N0bCk7CisJcHZ0LT5GMyA9IHBjaV9nZXRfcmVsYXRlZF9mdW5jdGlvbihwdnQtPkYyLT52ZW5kb3IsIGYzX2lkLCBwdnQtPkYyKTsKKwlpZiAoIXB2dC0+RjMpIHsKKwkJcGNpX2Rldl9wdXQocHZ0LT5GMSk7CisJCXB2dC0+RjEgPSBOVUxMOwogCi0JaWYgKCFwdnQtPm1pc2NfZjNfY3RsKSB7Ci0JCXBjaV9kZXZfcHV0KHB2dC0+YWRkcl9mMV9jdGwpOwotCQlwdnQtPmFkZHJfZjFfY3RsID0gTlVMTDsKKwkJYW1kNjRfZXJyKCJlcnJvciBGMyBkZXZpY2Ugbm90IGZvdW5kOiAiCisJCQkgICJ2ZW5kb3IgJXggZGV2aWNlIDB4JXggKGJyb2tlbiBCSU9TPylcbiIsCisJCQkgIFBDSV9WRU5ET1JfSURfQU1ELCBmM19pZCk7CiAKLQkJYW1kNjRfcHJpbnRrKEtFUk5fRVJSLCAiZXJyb3IgbWlzY2VsbGFuZW91cyBkZXZpY2Ugbm90IGZvdW5kOiAiCi0JCQkgICAgICJ2ZW5kb3IgJXggZGV2aWNlIDB4JXggKGJyb2tlbiBCSU9TPylcbiIsCi0JCQkgICAgIFBDSV9WRU5ET1JfSURfQU1ELCBhbWQ2NF9kZXYtPm1pc2NfZjNfY3RsKTsKLQkJcmV0dXJuIDE7CisJCXJldHVybiAtRU5PREVWOwogCX0KLQotCWRlYnVnZjEoIiAgICBBZGRyIE1hcCBkZXZpY2UgUENJIEJ1cyBJRDpcdCVzXG4iLAotCQlwY2lfbmFtZShwdnQtPmFkZHJfZjFfY3RsKSk7Ci0JZGVidWdmMSgiICAgIERSQU0gTUVNLUNUTCBQQ0kgQnVzIElEOlx0JXNcbiIsCi0JCXBjaV9uYW1lKHB2dC0+ZHJhbV9mMl9jdGwpKTsKLQlkZWJ1Z2YxKCIgICAgTWlzYyBkZXZpY2UgUENJIEJ1cyBJRDpcdCVzXG4iLAotCQlwY2lfbmFtZShwdnQtPm1pc2NfZjNfY3RsKSk7CisJZGVidWdmMSgiRjE6ICVzXG4iLCBwY2lfbmFtZShwdnQtPkYxKSk7CisJZGVidWdmMSgiRjI6ICVzXG4iLCBwY2lfbmFtZShwdnQtPkYyKSk7CisJZGVidWdmMSgiRjM6ICVzXG4iLCBwY2lfbmFtZShwdnQtPkYzKSk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgYW1kNjRfZnJlZV9tY19zaWJsaW5nX2RldmljZXMoc3RydWN0IGFtZDY0X3B2dCAqcHZ0KQorc3RhdGljIHZvaWQgZnJlZV9tY19zaWJsaW5nX2RldnMoc3RydWN0IGFtZDY0X3B2dCAqcHZ0KQogewotCXBjaV9kZXZfcHV0KHB2dC0+YWRkcl9mMV9jdGwpOwotCXBjaV9kZXZfcHV0KHB2dC0+bWlzY19mM19jdGwpOworCXBjaV9kZXZfcHV0KHB2dC0+RjEpOworCXBjaV9kZXZfcHV0KHB2dC0+RjMpOwogfQogCiAvKgogICogUmV0cmlldmUgdGhlIGhhcmR3YXJlIHJlZ2lzdGVycyBvZiB0aGUgbWVtb3J5IGNvbnRyb2xsZXIgKHRoaXMgaW5jbHVkZXMgdGhlCiAgKiAnQWRkcmVzcyBNYXAnIGFuZCAnTWlzYycgZGV2aWNlIHJlZ3MpCiAgKi8KLXN0YXRpYyB2b2lkIGFtZDY0X3JlYWRfbWNfcmVnaXN0ZXJzKHN0cnVjdCBhbWQ2NF9wdnQgKnB2dCkKK3N0YXRpYyB2b2lkIHJlYWRfbWNfcmVncyhzdHJ1Y3QgYW1kNjRfcHZ0ICpwdnQpCiB7CiAJdTY0IG1zcl92YWw7CiAJdTMyIHRtcDsKQEAgLTIxODgsOSArMjA1OCw3IEBACiAJfSBlbHNlCiAJCWRlYnVnZjAoIiAgVE9QX01FTTIgZGlzYWJsZWQuXG4iKTsKIAotCWFtZDY0X2NwdV9kaXNwbGF5X2luZm8ocHZ0KTsKLQotCWFtZDY0X3JlYWRfcGNpX2NmZyhwdnQtPm1pc2NfZjNfY3RsLCBLOF9OQkNBUCwgJnB2dC0+bmJjYXApOworCWFtZDY0X3JlYWRfcGNpX2NmZyhwdnQtPkYzLCBLOF9OQkNBUCwgJnB2dC0+bmJjYXApOwogCiAJaWYgKHB2dC0+b3BzLT5yZWFkX2RyYW1fY3RsX3JlZ2lzdGVyKQogCQlwdnQtPm9wcy0+cmVhZF9kcmFtX2N0bF9yZWdpc3RlcihwdnQpOwpAQCAtMjIyNywyMSArMjA5NSwyMCBAQAogCiAJYW1kNjRfcmVhZF9kY3RfYmFzZV9tYXNrKHB2dCk7CiAKLQlhbWQ2NF9yZWFkX3BjaV9jZmcocHZ0LT5hZGRyX2YxX2N0bCwgSzhfREhBUiwgJnB2dC0+ZGhhcik7CisJYW1kNjRfcmVhZF9wY2lfY2ZnKHB2dC0+RjEsIEs4X0RIQVIsICZwdnQtPmRoYXIpOwogCWFtZDY0X3JlYWRfZGJhbV9yZWcocHZ0KTsKIAotCWFtZDY0X3JlYWRfcGNpX2NmZyhwdnQtPm1pc2NfZjNfY3RsLAotCQkJICAgRjEwX09OTElORV9TUEFSRSwgJnB2dC0+b25saW5lX3NwYXJlKTsKKwlhbWQ2NF9yZWFkX3BjaV9jZmcocHZ0LT5GMywgRjEwX09OTElORV9TUEFSRSwgJnB2dC0+b25saW5lX3NwYXJlKTsKIAotCWFtZDY0X3JlYWRfcGNpX2NmZyhwdnQtPmRyYW1fZjJfY3RsLCBGMTBfRENMUl8wLCAmcHZ0LT5kY2xyMCk7Ci0JYW1kNjRfcmVhZF9wY2lfY2ZnKHB2dC0+ZHJhbV9mMl9jdGwsIEYxMF9EQ0hSXzAsICZwdnQtPmRjaHIwKTsKKwlhbWQ2NF9yZWFkX3BjaV9jZmcocHZ0LT5GMiwgRjEwX0RDTFJfMCwgJnB2dC0+ZGNscjApOworCWFtZDY0X3JlYWRfcGNpX2NmZyhwdnQtPkYyLCBGMTBfRENIUl8wLCAmcHZ0LT5kY2hyMCk7CiAKIAlpZiAoYm9vdF9jcHVfZGF0YS54ODYgPj0gMHgxMCkgewogCQlpZiAoIWRjdF9nYW5naW5nX2VuYWJsZWQocHZ0KSkgewotCQkJYW1kNjRfcmVhZF9wY2lfY2ZnKHB2dC0+ZHJhbV9mMl9jdGwsIEYxMF9EQ0xSXzEsICZwdnQtPmRjbHIxKTsKLQkJCWFtZDY0X3JlYWRfcGNpX2NmZyhwdnQtPmRyYW1fZjJfY3RsLCBGMTBfRENIUl8xLCAmcHZ0LT5kY2hyMSk7CisJCQlhbWQ2NF9yZWFkX3BjaV9jZmcocHZ0LT5GMiwgRjEwX0RDTFJfMSwgJnB2dC0+ZGNscjEpOworCQkJYW1kNjRfcmVhZF9wY2lfY2ZnKHB2dC0+RjIsIEYxMF9EQ0hSXzEsICZwdnQtPmRjaHIxKTsKIAkJfQotCQlhbWQ2NF9yZWFkX3BjaV9jZmcocHZ0LT5taXNjX2YzX2N0bCwgRVhUX05CX01DQV9DRkcsICZ0bXApOworCQlhbWQ2NF9yZWFkX3BjaV9jZmcocHZ0LT5GMywgRVhUX05CX01DQV9DRkcsICZ0bXApOwogCX0KIAogCWlmIChib290X2NwdV9kYXRhLng4NiA9PSAweDEwICYmCkBAIC0yMzIxLDIxICsyMTg4LDIyIEBACiAgKiBJbml0aWFsaXplIHRoZSBhcnJheSBvZiBjc3JvdyBhdHRyaWJ1dGUgaW5zdGFuY2VzLCBiYXNlZCBvbiB0aGUgdmFsdWVzCiAgKiBmcm9tIHBjaSBjb25maWcgaGFyZHdhcmUgcmVnaXN0ZXJzLgogICovCi1zdGF0aWMgaW50IGFtZDY0X2luaXRfY3Nyb3dzKHN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSkKK3N0YXRpYyBpbnQgaW5pdF9jc3Jvd3Moc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpKQogewogCXN0cnVjdCBjc3Jvd19pbmZvICpjc3JvdzsKLQlzdHJ1Y3QgYW1kNjRfcHZ0ICpwdnQ7CisJc3RydWN0IGFtZDY0X3B2dCAqcHZ0ID0gbWNpLT5wdnRfaW5mbzsKIAl1NjQgaW5wdXRfYWRkcl9taW4sIGlucHV0X2FkZHJfbWF4LCBzeXNfYWRkcjsKKwl1MzIgdmFsOwogCWludCBpLCBlbXB0eSA9IDE7CiAKLQlwdnQgPSBtY2ktPnB2dF9pbmZvOworCWFtZDY0X3JlYWRfcGNpX2NmZyhwdnQtPkYzLCBLOF9OQkNGRywgJnZhbCk7CiAKLQlhbWQ2NF9yZWFkX3BjaV9jZmcocHZ0LT5taXNjX2YzX2N0bCwgSzhfTkJDRkcsICZwdnQtPm5iY2ZnKTsKKwlwdnQtPm5iY2ZnID0gdmFsOworCXB2dC0+Y3RsX2Vycm9yX2luZm8ubmJjZmcgPSB2YWw7CiAKLQlkZWJ1Z2YwKCJOQkNGRz0gMHgleCAgQ0hJUEtJTEw9ICVzIERSQU0gRUNDPSAlc1xuIiwgcHZ0LT5uYmNmZywKLQkJKHB2dC0+bmJjZmcgJiBLOF9OQkNGR19DSElQS0lMTCkgPyAiRW5hYmxlZCIgOiAiRGlzYWJsZWQiLAotCQkocHZ0LT5uYmNmZyAmIEs4X05CQ0ZHX0VDQ19FTkFCTEUpID8gIkVuYWJsZWQiIDogIkRpc2FibGVkIgotCQkpOworCWRlYnVnZjAoIm5vZGUgJWQsIE5CQ0ZHPTB4JTA4eFtDaGlwS2lsbEVjY0NhcDogJWR8RHJhbUVjY0VuOiAlZF1cbiIsCisJCXB2dC0+bWNfbm9kZV9pZCwgdmFsLAorCQkhISh2YWwgJiBLOF9OQkNGR19DSElQS0lMTCksICEhKHZhbCAmIEs4X05CQ0ZHX0VDQ19FTkFCTEUpKTsKIAogCWZvciAoaSA9IDA7IGkgPCBwdnQtPmNzX2NvdW50OyBpKyspIHsKIAkJY3Nyb3cgPSAmbWNpLT5jc3Jvd3NbaV07CkBAIC0yMzU5LDcgKzIyMjcsNyBAQAogCQljc3Jvdy0+cGFnZV9tYXNrID0gfm1hc2tfZnJvbV9kY3RfbWFzayhwdnQsIGkpOwogCQkvKiA4IGJ5dGVzIG9mIHJlc29sdXRpb24gKi8KIAotCQljc3Jvdy0+bXR5cGUgPSBhbWQ2NF9kZXRlcm1pbmVfbWVtb3J5X3R5cGUocHZ0KTsKKwkJY3Nyb3ctPm10eXBlID0gYW1kNjRfZGV0ZXJtaW5lX21lbW9yeV90eXBlKHB2dCwgaSk7CiAKIAkJZGVidWdmMSgiICBmb3IgTUMgbm9kZSAlZCBjc3JvdyAlZDpcbiIsIHB2dC0+bWNfbm9kZV9pZCwgaSk7CiAJCWRlYnVnZjEoIiAgICBpbnB1dF9hZGRyX21pbjogMHglbHggaW5wdXRfYWRkcl9tYXg6IDB4JWx4XG4iLApAQCAtMjQwNCw4ICsyMjcyLDcgQEAKIAlib29sIHJldCA9IGZhbHNlOwogCiAJaWYgKCF6YWxsb2NfY3B1bWFza192YXIoJm1hc2ssIEdGUF9LRVJORUwpKSB7Ci0JCWFtZDY0X3ByaW50ayhLRVJOX1dBUk5JTkcsICIlczogZXJyb3IgYWxsb2NhdGluZyBtYXNrXG4iLAotCQkJICAgICBfX2Z1bmNfXyk7CisJCWFtZDY0X3dhcm4oIiVzOiBFcnJvciBhbGxvY2F0aW5nIG1hc2tcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KIApAQCAtMjQzMSwxOCArMjI5OCwxNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgYW1kNjRfdG9nZ2xlX2VjY19lcnJfcmVwb3J0aW5nKHN0cnVjdCBhbWQ2NF9wdnQgKnB2dCwgYm9vbCBvbikKK3N0YXRpYyBpbnQgdG9nZ2xlX2VjY19lcnJfcmVwb3J0aW5nKHN0cnVjdCBlY2Nfc2V0dGluZ3MgKnMsIHU4IG5pZCwgYm9vbCBvbikKIHsKIAljcHVtYXNrX3Zhcl90IGNtYXNrOwogCWludCBjcHU7CiAKIAlpZiAoIXphbGxvY19jcHVtYXNrX3ZhcigmY21hc2ssIEdGUF9LRVJORUwpKSB7Ci0JCWFtZDY0X3ByaW50ayhLRVJOX1dBUk5JTkcsICIlczogZXJyb3IgYWxsb2NhdGluZyBtYXNrXG4iLAotCQkJICAgICBfX2Z1bmNfXyk7CisJCWFtZDY0X3dhcm4oIiVzOiBlcnJvciBhbGxvY2F0aW5nIG1hc2tcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAotCWdldF9jcHVzX29uX3RoaXNfZGN0X2NwdW1hc2soY21hc2ssIHB2dC0+bWNfbm9kZV9pZCk7CisJZ2V0X2NwdXNfb25fdGhpc19kY3RfY3B1bWFzayhjbWFzaywgbmlkKTsKIAogCXJkbXNyX29uX2NwdXMoY21hc2ssIE1TUl9JQTMyX01DR19DVEwsIG1zcnMpOwogCkBAIC0yNDUyLDE0ICsyMzE4LDE0IEBACiAKIAkJaWYgKG9uKSB7CiAJCQlpZiAocmVnLT5sICYgSzhfTVNSX01DR0NUTF9OQkUpCi0JCQkJcHZ0LT5mbGFncy5uYl9tY2VfZW5hYmxlID0gMTsKKwkJCQlzLT5mbGFncy5uYl9tY2VfZW5hYmxlID0gMTsKIAogCQkJcmVnLT5sIHw9IEs4X01TUl9NQ0dDVExfTkJFOwogCQl9IGVsc2UgewogCQkJLyoKIAkJCSAqIFR1cm4gb2ZmIE5CIE1DRSByZXBvcnRpbmcgb25seSB3aGVuIGl0IHdhcyBvZmYgYmVmb3JlCiAJCQkgKi8KLQkJCWlmICghcHZ0LT5mbGFncy5uYl9tY2VfZW5hYmxlKQorCQkJaWYgKCFzLT5mbGFncy5uYl9tY2VfZW5hYmxlKQogCQkJCXJlZy0+bCAmPSB+SzhfTVNSX01DR0NUTF9OQkU7CiAJCX0KIAl9CkBAIC0yNDcwLDkyICsyMzM2LDkyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGFtZDY0X2VuYWJsZV9lY2NfZXJyb3JfcmVwb3J0aW5nKHN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSkKK3N0YXRpYyBib29sIGVuYWJsZV9lY2NfZXJyb3JfcmVwb3J0aW5nKHN0cnVjdCBlY2Nfc2V0dGluZ3MgKnMsIHU4IG5pZCwKKwkJCQkgICAgICAgc3RydWN0IHBjaV9kZXYgKkYzKQogewotCXN0cnVjdCBhbWQ2NF9wdnQgKnB2dCA9IG1jaS0+cHZ0X2luZm87CisJYm9vbCByZXQgPSB0cnVlOwogCXUzMiB2YWx1ZSwgbWFzayA9IEs4X05CQ1RMX0NFQ0NFbiB8IEs4X05CQ1RMX1VFQ0NFbjsKIAotCWFtZDY0X3JlYWRfcGNpX2NmZyhwdnQtPm1pc2NfZjNfY3RsLCBLOF9OQkNUTCwgJnZhbHVlKTsKKwlpZiAodG9nZ2xlX2VjY19lcnJfcmVwb3J0aW5nKHMsIG5pZCwgT04pKSB7CisJCWFtZDY0X3dhcm4oIkVycm9yIGVuYWJsaW5nIEVDQyByZXBvcnRpbmcgb3ZlciBNQ0dDVEwhXG4iKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KIAotCS8qIHR1cm4gb24gVUVDQ24gYW5kIENFQ0NFbiBiaXRzICovCi0JcHZ0LT5vbGRfbmJjdGwgPSB2YWx1ZSAmIG1hc2s7Ci0JcHZ0LT5uYmN0bF9tY2djdGxfc2F2ZWQgPSAxOworCWFtZDY0X3JlYWRfcGNpX2NmZyhGMywgSzhfTkJDVEwsICZ2YWx1ZSk7CisKKwkvKiB0dXJuIG9uIFVFQ0NFbiBhbmQgQ0VDQ0VuIGJpdHMgKi8KKwlzLT5vbGRfbmJjdGwgICA9IHZhbHVlICYgbWFzazsKKwlzLT5uYmN0bF92YWxpZCA9IHRydWU7CiAKIAl2YWx1ZSB8PSBtYXNrOwotCXBjaV93cml0ZV9jb25maWdfZHdvcmQocHZ0LT5taXNjX2YzX2N0bCwgSzhfTkJDVEwsIHZhbHVlKTsKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKEYzLCBLOF9OQkNUTCwgdmFsdWUpOwogCi0JaWYgKGFtZDY0X3RvZ2dsZV9lY2NfZXJyX3JlcG9ydGluZyhwdnQsIE9OKSkKLQkJYW1kNjRfcHJpbnRrKEtFUk5fV0FSTklORywgIkVycm9yIGVuYWJsaW5nIEVDQyByZXBvcnRpbmcgb3ZlciAiCi0JCQkJCSAgICJNQ0dDVEwhXG4iKTsKKwlhbWQ2NF9yZWFkX3BjaV9jZmcoRjMsIEs4X05CQ0ZHLCAmdmFsdWUpOwogCi0JYW1kNjRfcmVhZF9wY2lfY2ZnKHB2dC0+bWlzY19mM19jdGwsIEs4X05CQ0ZHLCAmdmFsdWUpOwotCi0JZGVidWdmMCgiTkJDRkcoMSk9IDB4JXggIENISVBLSUxMPSAlcyBFQ0NfRU5BQkxFPSAlc1xuIiwgdmFsdWUsCi0JCSh2YWx1ZSAmIEs4X05CQ0ZHX0NISVBLSUxMKSA/ICJFbmFibGVkIiA6ICJEaXNhYmxlZCIsCi0JCSh2YWx1ZSAmIEs4X05CQ0ZHX0VDQ19FTkFCTEUpID8gIkVuYWJsZWQiIDogIkRpc2FibGVkIik7CisJZGVidWdmMCgiMTogbm9kZSAlZCwgTkJDRkc9MHglMDh4W0NoaXBLaWxsRWNjQ2FwOiAlZHxEcmFtRWNjRW46ICVkXVxuIiwKKwkJbmlkLCB2YWx1ZSwKKwkJISEodmFsdWUgJiBLOF9OQkNGR19DSElQS0lMTCksICEhKHZhbHVlICYgSzhfTkJDRkdfRUNDX0VOQUJMRSkpOwogCiAJaWYgKCEodmFsdWUgJiBLOF9OQkNGR19FQ0NfRU5BQkxFKSkgewotCQlhbWQ2NF9wcmludGsoS0VSTl9XQVJOSU5HLAotCQkJIlRoaXMgbm9kZSByZXBvcnRzIHRoYXQgRFJBTSBFQ0MgaXMgIgotCQkJImN1cnJlbnRseSBEaXNhYmxlZDsgRU5BQkxJTkcgbm93XG4iKTsKKwkJYW1kNjRfd2FybigiRFJBTSBFQ0MgZGlzYWJsZWQgb24gdGhpcyBub2RlLCBlbmFibGluZy4uLlxuIik7CiAKLQkJcHZ0LT5mbGFncy5uYl9lY2NfcHJldiA9IDA7CisJCXMtPmZsYWdzLm5iX2VjY19wcmV2ID0gMDsKIAogCQkvKiBBdHRlbXB0IHRvIHR1cm4gb24gRFJBTSBFQ0MgRW5hYmxlICovCiAJCXZhbHVlIHw9IEs4X05CQ0ZHX0VDQ19FTkFCTEU7Ci0JCXBjaV93cml0ZV9jb25maWdfZHdvcmQocHZ0LT5taXNjX2YzX2N0bCwgSzhfTkJDRkcsIHZhbHVlKTsKKwkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChGMywgSzhfTkJDRkcsIHZhbHVlKTsKIAotCQlhbWQ2NF9yZWFkX3BjaV9jZmcocHZ0LT5taXNjX2YzX2N0bCwgSzhfTkJDRkcsICZ2YWx1ZSk7CisJCWFtZDY0X3JlYWRfcGNpX2NmZyhGMywgSzhfTkJDRkcsICZ2YWx1ZSk7CiAKIAkJaWYgKCEodmFsdWUgJiBLOF9OQkNGR19FQ0NfRU5BQkxFKSkgewotCQkJYW1kNjRfcHJpbnRrKEtFUk5fV0FSTklORywKLQkJCQkiSGFyZHdhcmUgcmVqZWN0cyBFbmFibGluZyBEUkFNIEVDQyBjaGVja2luZ1xuIgotCQkJCSJDaGVjayBtZW1vcnkgRElNTSBjb25maWd1cmF0aW9uXG4iKTsKKwkJCWFtZDY0X3dhcm4oIkhhcmR3YXJlIHJlamVjdGVkIERSQU0gRUNDIGVuYWJsZSwiCisJCQkJICAgImNoZWNrIG1lbW9yeSBESU1NIGNvbmZpZ3VyYXRpb24uXG4iKTsKKwkJCXJldCA9IGZhbHNlOwogCQl9IGVsc2UgewotCQkJYW1kNjRfcHJpbnRrKEtFUk5fREVCVUcsCi0JCQkJIkhhcmR3YXJlIGFjY2VwdGVkIERSQU0gRUNDIEVuYWJsZVxuIik7CisJCQlhbWQ2NF9pbmZvKCJIYXJkd2FyZSBhY2NlcHRlZCBEUkFNIEVDQyBFbmFibGVcbiIpOwogCQl9CiAJfSBlbHNlIHsKLQkJcHZ0LT5mbGFncy5uYl9lY2NfcHJldiA9IDE7CisJCXMtPmZsYWdzLm5iX2VjY19wcmV2ID0gMTsKIAl9CiAKLQlkZWJ1Z2YwKCJOQkNGRygyKT0gMHgleCAgQ0hJUEtJTEw9ICVzIEVDQ19FTkFCTEU9ICVzXG4iLCB2YWx1ZSwKLQkJKHZhbHVlICYgSzhfTkJDRkdfQ0hJUEtJTEwpID8gIkVuYWJsZWQiIDogIkRpc2FibGVkIiwKLQkJKHZhbHVlICYgSzhfTkJDRkdfRUNDX0VOQUJMRSkgPyAiRW5hYmxlZCIgOiAiRGlzYWJsZWQiKTsKKwlkZWJ1Z2YwKCIyOiBub2RlICVkLCBOQkNGRz0weCUwOHhbQ2hpcEtpbGxFY2NDYXA6ICVkfERyYW1FY2NFbjogJWRdXG4iLAorCQluaWQsIHZhbHVlLAorCQkhISh2YWx1ZSAmIEs4X05CQ0ZHX0NISVBLSUxMKSwgISEodmFsdWUgJiBLOF9OQkNGR19FQ0NfRU5BQkxFKSk7CiAKLQlwdnQtPmN0bF9lcnJvcl9pbmZvLm5iY2ZnID0gdmFsdWU7CisJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgYW1kNjRfcmVzdG9yZV9lY2NfZXJyb3JfcmVwb3J0aW5nKHN0cnVjdCBhbWQ2NF9wdnQgKnB2dCkKK3N0YXRpYyB2b2lkIHJlc3RvcmVfZWNjX2Vycm9yX3JlcG9ydGluZyhzdHJ1Y3QgZWNjX3NldHRpbmdzICpzLCB1OCBuaWQsCisJCQkJCXN0cnVjdCBwY2lfZGV2ICpGMykKIHsKIAl1MzIgdmFsdWUsIG1hc2sgPSBLOF9OQkNUTF9DRUNDRW4gfCBLOF9OQkNUTF9VRUNDRW47CiAKLQlpZiAoIXB2dC0+bmJjdGxfbWNnY3RsX3NhdmVkKQorCWlmICghcy0+bmJjdGxfdmFsaWQpCiAJCXJldHVybjsKIAotCWFtZDY0X3JlYWRfcGNpX2NmZyhwdnQtPm1pc2NfZjNfY3RsLCBLOF9OQkNUTCwgJnZhbHVlKTsKKwlhbWQ2NF9yZWFkX3BjaV9jZmcoRjMsIEs4X05CQ1RMLCAmdmFsdWUpOwogCXZhbHVlICY9IH5tYXNrOwotCXZhbHVlIHw9IHB2dC0+b2xkX25iY3RsOworCXZhbHVlIHw9IHMtPm9sZF9uYmN0bDsKIAotCXBjaV93cml0ZV9jb25maWdfZHdvcmQocHZ0LT5taXNjX2YzX2N0bCwgSzhfTkJDVEwsIHZhbHVlKTsKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKEYzLCBLOF9OQkNUTCwgdmFsdWUpOwogCi0JLyogcmVzdG9yZSBwcmV2aW91cyBCSU9TIERSQU0gRUNDICJvZmYiIHNldHRpbmcgd2hpY2ggd2UgZm9yY2UtZW5hYmxlZCAqLwotCWlmICghcHZ0LT5mbGFncy5uYl9lY2NfcHJldikgewotCQlhbWQ2NF9yZWFkX3BjaV9jZmcocHZ0LT5taXNjX2YzX2N0bCwgSzhfTkJDRkcsICZ2YWx1ZSk7CisJLyogcmVzdG9yZSBwcmV2aW91cyBCSU9TIERSQU0gRUNDICJvZmYiIHNldHRpbmcgd2UgZm9yY2UtZW5hYmxlZCAqLworCWlmICghcy0+ZmxhZ3MubmJfZWNjX3ByZXYpIHsKKwkJYW1kNjRfcmVhZF9wY2lfY2ZnKEYzLCBLOF9OQkNGRywgJnZhbHVlKTsKIAkJdmFsdWUgJj0gfks4X05CQ0ZHX0VDQ19FTkFCTEU7Ci0JCXBjaV93cml0ZV9jb25maWdfZHdvcmQocHZ0LT5taXNjX2YzX2N0bCwgSzhfTkJDRkcsIHZhbHVlKTsKKwkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChGMywgSzhfTkJDRkcsIHZhbHVlKTsKIAl9CiAKIAkvKiByZXN0b3JlIHRoZSBOQiBFbmFibGUgTUNHQ1RMIGJpdCAqLwotCWlmIChhbWQ2NF90b2dnbGVfZWNjX2Vycl9yZXBvcnRpbmcocHZ0LCBPRkYpKQotCQlhbWQ2NF9wcmludGsoS0VSTl9XQVJOSU5HLCAiRXJyb3IgcmVzdG9yaW5nIE5CIE1DR0NUTCBzZXR0aW5ncyFcbiIpOworCWlmICh0b2dnbGVfZWNjX2Vycl9yZXBvcnRpbmcocywgbmlkLCBPRkYpKQorCQlhbWQ2NF93YXJuKCJFcnJvciByZXN0b3JpbmcgTkIgTUNHQ1RMIHNldHRpbmdzIVxuIik7CiB9CiAKIC8qCi0gKiBFREFDIHJlcXVpcmVzIHRoYXQgdGhlIEJJT1MgaGF2ZSBFQ0MgZW5hYmxlZCBiZWZvcmUgdGFraW5nIG92ZXIgdGhlCi0gKiBwcm9jZXNzaW5nIG9mIEVDQyBlcnJvcnMuIFRoaXMgaXMgYmVjYXVzZSB0aGUgQklPUyBjYW4gcHJvcGVybHkgaW5pdGlhbGl6ZQotICogdGhlIG1lbW9yeSBzeXN0ZW0gY29tcGxldGVseS4gQSBjb21tYW5kIGxpbmUgb3B0aW9uIGFsbG93cyB0byBmb3JjZS1lbmFibGUKLSAqIGhhcmR3YXJlIEVDQyBsYXRlciBpbiBhbWQ2NF9lbmFibGVfZWNjX2Vycm9yX3JlcG9ydGluZygpLgorICogRURBQyByZXF1aXJlcyB0aGF0IHRoZSBCSU9TIGhhdmUgRUNDIGVuYWJsZWQgYmVmb3JlCisgKiB0YWtpbmcgb3ZlciB0aGUgcHJvY2Vzc2luZyBvZiBFQ0MgZXJyb3JzLiBBIGNvbW1hbmQgbGluZQorICogb3B0aW9uIGFsbG93cyB0byBmb3JjZS1lbmFibGUgaGFyZHdhcmUgRUNDIGxhdGVyIGluCisgKiBlbmFibGVfZWNjX2Vycm9yX3JlcG9ydGluZygpLgogICovCiBzdGF0aWMgY29uc3QgY2hhciAqZWNjX21zZyA9CiAJIkVDQyBkaXNhYmxlZCBpbiB0aGUgQklPUyBvciBubyBFQ0MgY2FwYWJpbGl0eSwgbW9kdWxlIHdpbGwgbm90IGxvYWQuXG4iCkBAIC0yNTYzLDM4ICsyNDI5LDI4IEBACiAJIidlY2NfZW5hYmxlX292ZXJyaWRlJy5cbiIKIAkiIChOb3RlIHRoYXQgdXNlIG9mIHRoZSBvdmVycmlkZSBtYXkgY2F1c2UgdW5rbm93biBzaWRlIGVmZmVjdHMuKVxuIjsKIAotc3RhdGljIGludCBhbWQ2NF9jaGVja19lY2NfZW5hYmxlZChzdHJ1Y3QgYW1kNjRfcHZ0ICpwdnQpCitzdGF0aWMgYm9vbCBlY2NfZW5hYmxlZChzdHJ1Y3QgcGNpX2RldiAqRjMsIHU4IG5pZCkKIHsKIAl1MzIgdmFsdWU7Ci0JdTggZWNjX2VuYWJsZWQgPSAwOworCXU4IGVjY19lbiA9IDA7CiAJYm9vbCBuYl9tY2VfZW4gPSBmYWxzZTsKIAotCWFtZDY0X3JlYWRfcGNpX2NmZyhwdnQtPm1pc2NfZjNfY3RsLCBLOF9OQkNGRywgJnZhbHVlKTsKKwlhbWQ2NF9yZWFkX3BjaV9jZmcoRjMsIEs4X05CQ0ZHLCAmdmFsdWUpOwogCi0JZWNjX2VuYWJsZWQgPSAhISh2YWx1ZSAmIEs4X05CQ0ZHX0VDQ19FTkFCTEUpOwotCWlmICghZWNjX2VuYWJsZWQpCi0JCWFtZDY0X3ByaW50ayhLRVJOX05PVElDRSwgIlRoaXMgbm9kZSByZXBvcnRzIHRoYXQgTWVtb3J5IEVDQyAiCi0JCQkgICAgICJpcyBjdXJyZW50bHkgZGlzYWJsZWQsIHNldCBGM3gleFsyMl0gKCVzKS5cbiIsCi0JCQkgICAgIEs4X05CQ0ZHLCBwY2lfbmFtZShwdnQtPm1pc2NfZjNfY3RsKSk7Ci0JZWxzZQotCQlhbWQ2NF9wcmludGsoS0VSTl9JTkZPLCAiRUNDIGlzIGVuYWJsZWQgYnkgQklPUy5cbiIpOworCWVjY19lbiA9ICEhKHZhbHVlICYgSzhfTkJDRkdfRUNDX0VOQUJMRSk7CisJYW1kNjRfaW5mbygiRFJBTSBFQ0MgJXMuXG4iLCAoZWNjX2VuID8gImVuYWJsZWQiIDogImRpc2FibGVkIikpOwogCi0JbmJfbWNlX2VuID0gYW1kNjRfbmJfbWNlX2JhbmtfZW5hYmxlZF9vbl9ub2RlKHB2dC0+bWNfbm9kZV9pZCk7CisJbmJfbWNlX2VuID0gYW1kNjRfbmJfbWNlX2JhbmtfZW5hYmxlZF9vbl9ub2RlKG5pZCk7CiAJaWYgKCFuYl9tY2VfZW4pCi0JCWFtZDY0X3ByaW50ayhLRVJOX05PVElDRSwgIk5CIE1DRSBiYW5rIGRpc2FibGVkLCBzZXQgTVNSICIKKwkJYW1kNjRfbm90aWNlKCJOQiBNQ0UgYmFuayBkaXNhYmxlZCwgc2V0IE1TUiAiCiAJCQkgICAgICIweCUwOHhbNF0gb24gbm9kZSAlZCB0byBlbmFibGUuXG4iLAotCQkJICAgICBNU1JfSUEzMl9NQ0dfQ1RMLCBwdnQtPm1jX25vZGVfaWQpOworCQkJICAgICBNU1JfSUEzMl9NQ0dfQ1RMLCBuaWQpOwogCi0JaWYgKCFlY2NfZW5hYmxlZCB8fCAhbmJfbWNlX2VuKSB7Ci0JCWlmICghZWNjX2VuYWJsZV9vdmVycmlkZSkgewotCQkJYW1kNjRfcHJpbnRrKEtFUk5fTk9USUNFLCAiJXMiLCBlY2NfbXNnKTsKLQkJCXJldHVybiAtRU5PREVWOwotCQl9IGVsc2UgewotCQkJYW1kNjRfcHJpbnRrKEtFUk5fV0FSTklORywgIkZvcmNpbmcgRUNDIGNoZWNraW5nIG9uIVxuIik7Ci0JCX0KKwlpZiAoIWVjY19lbiB8fCAhbmJfbWNlX2VuKSB7CisJCWFtZDY0X25vdGljZSgiJXMiLCBlY2NfbXNnKTsKKwkJcmV0dXJuIGZhbHNlOwogCX0KLQotCXJldHVybiAwOworCXJldHVybiB0cnVlOwogfQogCiBzdHJ1Y3QgbWNpZGV2X3N5c2ZzX2F0dHJpYnV0ZSBzeXNmc19hdHRyc1tBUlJBWV9TSVpFKGFtZDY0X2RiZ19hdHRycykgKwpAQCAtMjYwMywyMiArMjQ1OSwyMyBAQAogCiBzdHJ1Y3QgbWNpZGV2X3N5c2ZzX2F0dHJpYnV0ZSB0ZXJtaW5hdG9yID0geyAuYXR0ciA9IHsgLm5hbWUgPSBOVUxMIH0gfTsKIAotc3RhdGljIHZvaWQgYW1kNjRfc2V0X21jX3N5c2ZzX2F0dHJpYnV0ZXMoc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpKQorc3RhdGljIHZvaWQgc2V0X21jX3N5c2ZzX2F0dHJzKHN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSkKIHsKIAl1bnNpZ25lZCBpbnQgaSA9IDAsIGogPSAwOwogCiAJZm9yICg7IGkgPCBBUlJBWV9TSVpFKGFtZDY0X2RiZ19hdHRycyk7IGkrKykKIAkJc3lzZnNfYXR0cnNbaV0gPSBhbWQ2NF9kYmdfYXR0cnNbaV07CiAKLQlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShhbWQ2NF9pbmpfYXR0cnMpOyBqKyssIGkrKykKLQkJc3lzZnNfYXR0cnNbaV0gPSBhbWQ2NF9pbmpfYXR0cnNbal07CisJaWYgKGJvb3RfY3B1X2RhdGEueDg2ID49IDB4MTApCisJCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKGFtZDY0X2lual9hdHRycyk7IGorKywgaSsrKQorCQkJc3lzZnNfYXR0cnNbaV0gPSBhbWQ2NF9pbmpfYXR0cnNbal07CiAKIAlzeXNmc19hdHRyc1tpXSA9IHRlcm1pbmF0b3I7CiAKIAltY2ktPm1jX2RyaXZlcl9zeXNmc19hdHRyaWJ1dGVzID0gc3lzZnNfYXR0cnM7CiB9CiAKLXN0YXRpYyB2b2lkIGFtZDY0X3NldHVwX21jaV9taXNjX2F0dHJpYnV0ZXMoc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpKQorc3RhdGljIHZvaWQgc2V0dXBfbWNpX21pc2NfYXR0cnMoc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpKQogewogCXN0cnVjdCBhbWQ2NF9wdnQgKnB2dCA9IG1jaS0+cHZ0X2luZm87CiAKQEAgLTI2MzQsOCArMjQ5MSw4IEBACiAJbWNpLT5lZGFjX2NhcAkJPSBhbWQ2NF9kZXRlcm1pbmVfZWRhY19jYXAocHZ0KTsKIAltY2ktPm1vZF9uYW1lCQk9IEVEQUNfTU9EX1NUUjsKIAltY2ktPm1vZF92ZXIJCT0gRURBQ19BTUQ2NF9WRVJTSU9OOwotCW1jaS0+Y3RsX25hbWUJCT0gZ2V0X2FtZF9mYW1pbHlfbmFtZShwdnQtPm1jX3R5cGVfaW5kZXgpOwotCW1jaS0+ZGV2X25hbWUJCT0gcGNpX25hbWUocHZ0LT5kcmFtX2YyX2N0bCk7CisJbWNpLT5jdGxfbmFtZQkJPSBwdnQtPmN0bF9uYW1lOworCW1jaS0+ZGV2X25hbWUJCT0gcGNpX25hbWUocHZ0LT5GMik7CiAJbWNpLT5jdGxfcGFnZV90b19waHlzCT0gTlVMTDsKIAogCS8qIG1lbW9yeSBzY3J1YmJlciBpbnRlcmZhY2UgKi8KQEAgLTI2NDQsMTExICsyNTAxLDk0IEBACiB9CiAKIC8qCi0gKiBJbml0IHN0dWZmIGZvciB0aGlzIERSQU0gQ29udHJvbGxlciBkZXZpY2UuCi0gKgotICogRHVlIHRvIGEgaGFyZHdhcmUgZmVhdHVyZSBvbiBGYW0xMGggQ1BVcywgdGhlIEVuYWJsZSBFeHRlbmRlZCBDb25maWd1cmF0aW9uCi0gKiBTcGFjZSBmZWF0dXJlIE1VU1QgYmUgZW5hYmxlZCBvbiBBTEwgUHJvY2Vzc29ycyBwcmlvciB0byBhY3R1YWxseSByZWFkaW5nCi0gKiBmcm9tIHRoZSBFQ1MgcmVnaXN0ZXJzLiBTaW5jZSB0aGUgbG9hZGluZyBvZiB0aGUgbW9kdWxlIGNhbiBvY2N1ciBvbiBhbnkKLSAqICdjb3JlJywgYW5kIGNvcmVzIGRvbid0ICdzZWUnIGFsbCB0aGUgb3RoZXIgcHJvY2Vzc29ycyBFQ1MgZGF0YSB3aGVuIHRoZQotICogb3RoZXJzIGFyZSBOT1QgZW5hYmxlZC4gT3VyIHNvbHV0aW9uIGlzIHRvIGZpcnN0IGVuYWJsZSBFQ1MgYWNjZXNzIGluIHRoaXMKLSAqIHJvdXRpbmUgb24gYWxsIHByb2Nlc3NvcnMsIGdhdGhlciBzb21lIGRhdGEgaW4gYSBhbWQ2NF9wdnQgc3RydWN0dXJlIGFuZAotICogbGF0ZXIgY29tZSBiYWNrIGluIGEgZmluaXNoLXNldHVwIGZ1bmN0aW9uIHRvIHBlcmZvcm0gdGhhdCBmaW5hbAotICogaW5pdGlhbGl6YXRpb24uIFNlZSBhbHNvIGFtZDY0X2luaXRfMm5kX3N0YWdlKCkgZm9yIHRoYXQuCisgKiByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgZmFtaWx5IGRlc2NyaXB0b3Igb24gc3VjY2VzcywgTlVMTCBvdGhlcndpc2UuCiAgKi8KLXN0YXRpYyBpbnQgYW1kNjRfcHJvYmVfb25lX2luc3RhbmNlKHN0cnVjdCBwY2lfZGV2ICpkcmFtX2YyX2N0bCwKLQkJCQkgICAgaW50IG1jX3R5cGVfaW5kZXgpCitzdGF0aWMgc3RydWN0IGFtZDY0X2ZhbWlseV90eXBlICphbWQ2NF9wZXJfZmFtaWx5X2luaXQoc3RydWN0IGFtZDY0X3B2dCAqcHZ0KQoreworCXU4IGZhbSA9IGJvb3RfY3B1X2RhdGEueDg2OworCXN0cnVjdCBhbWQ2NF9mYW1pbHlfdHlwZSAqZmFtX3R5cGUgPSBOVUxMOworCisJc3dpdGNoIChmYW0pIHsKKwljYXNlIDB4ZjoKKwkJZmFtX3R5cGUJCT0gJmFtZDY0X2ZhbWlseV90eXBlc1tLOF9DUFVTXTsKKwkJcHZ0LT5vcHMJCT0gJmFtZDY0X2ZhbWlseV90eXBlc1tLOF9DUFVTXS5vcHM7CisJCXB2dC0+Y3RsX25hbWUJCT0gZmFtX3R5cGUtPmN0bF9uYW1lOworCQlwdnQtPm1pbl9zY3J1YnJhdGUJPSBLOF9NSU5fU0NSVUJfUkFURV9CSVRTOworCQlicmVhazsKKwljYXNlIDB4MTA6CisJCWZhbV90eXBlCQk9ICZhbWQ2NF9mYW1pbHlfdHlwZXNbRjEwX0NQVVNdOworCQlwdnQtPm9wcwkJPSAmYW1kNjRfZmFtaWx5X3R5cGVzW0YxMF9DUFVTXS5vcHM7CisJCXB2dC0+Y3RsX25hbWUJCT0gZmFtX3R5cGUtPmN0bF9uYW1lOworCQlwdnQtPm1pbl9zY3J1YnJhdGUJPSBGMTBfTUlOX1NDUlVCX1JBVEVfQklUUzsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlhbWQ2NF9lcnIoIlVuc3VwcG9ydGVkIGZhbWlseSFcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlwdnQtPmV4dF9tb2RlbCA9IGJvb3RfY3B1X2RhdGEueDg2X21vZGVsID4+IDQ7CisKKwlhbWQ2NF9pbmZvKCIlcyAlc2RldGVjdGVkIChub2RlICVkKS5cbiIsIHB2dC0+Y3RsX25hbWUsCisJCSAgICAgKGZhbSA9PSAweGYgPworCQkJCShwdnQtPmV4dF9tb2RlbCA+PSBLOF9SRVZfRiAgPyAicmV2RiBvciBsYXRlciAiCisJCQkJCQkJICAgICA6ICJyZXZFIG9yIGVhcmxpZXIgIikKKwkJCQkgOiAiIiksIHB2dC0+bWNfbm9kZV9pZCk7CisJcmV0dXJuIGZhbV90eXBlOworfQorCitzdGF0aWMgaW50IGFtZDY0X2luaXRfb25lX2luc3RhbmNlKHN0cnVjdCBwY2lfZGV2ICpGMikKIHsKIAlzdHJ1Y3QgYW1kNjRfcHZ0ICpwdnQgPSBOVUxMOworCXN0cnVjdCBhbWQ2NF9mYW1pbHlfdHlwZSAqZmFtX3R5cGUgPSBOVUxMOworCXN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSA9IE5VTEw7CiAJaW50IGVyciA9IDAsIHJldDsKKwl1OCBuaWQgPSBnZXRfbm9kZV9pZChGMik7CiAKIAlyZXQgPSAtRU5PTUVNOwogCXB2dCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhbWQ2NF9wdnQpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXB2dCkKLQkJZ290byBlcnJfZXhpdDsKKwkJZ290byBlcnJfcmV0OwogCi0JcHZ0LT5tY19ub2RlX2lkID0gZ2V0X25vZGVfaWQoZHJhbV9mMl9jdGwpOworCXB2dC0+bWNfbm9kZV9pZAk9IG5pZDsKKwlwdnQtPkYyID0gRjI7CiAKLQlwdnQtPmRyYW1fZjJfY3RsCT0gZHJhbV9mMl9jdGw7Ci0JcHZ0LT5leHRfbW9kZWwJCT0gYm9vdF9jcHVfZGF0YS54ODZfbW9kZWwgPj4gNDsKLQlwdnQtPm1jX3R5cGVfaW5kZXgJPSBtY190eXBlX2luZGV4OwotCXB2dC0+b3BzCQk9IGZhbWlseV9vcHMobWNfdHlwZV9pbmRleCk7CisJcmV0ID0gLUVJTlZBTDsKKwlmYW1fdHlwZSA9IGFtZDY0X3Blcl9mYW1pbHlfaW5pdChwdnQpOworCWlmICghZmFtX3R5cGUpCisJCWdvdG8gZXJyX2ZyZWU7CiAKLQkvKgotCSAqIFdlIGhhdmUgdGhlIGRyYW1fZjJfY3RsIGRldmljZSBhcyBhbiBhcmd1bWVudCwgbm93IGdvIHJlc2VydmUgaXRzCi0JICogc2libGluZyBkZXZpY2VzIGZyb20gdGhlIFBDSSBzeXN0ZW0uCi0JICovCiAJcmV0ID0gLUVOT0RFVjsKLQllcnIgPSBhbWQ2NF9yZXNlcnZlX21jX3NpYmxpbmdfZGV2aWNlcyhwdnQsIG1jX3R5cGVfaW5kZXgpOworCWVyciA9IHJlc2VydmVfbWNfc2libGluZ19kZXZzKHB2dCwgZmFtX3R5cGUtPmYxX2lkLCBmYW1fdHlwZS0+ZjNfaWQpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyX2ZyZWU7CiAKLQlyZXQgPSAtRUlOVkFMOwotCWVyciA9IGFtZDY0X2NoZWNrX2VjY19lbmFibGVkKHB2dCk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfcHV0OwotCi0JLyoKLQkgKiBLZXkgb3BlcmF0aW9uIGhlcmU6IHNldHVwIG9mIEhXIHByaW9yIHRvIHBlcmZvcm1pbmcgb3BzIG9uIGl0LiBTb21lCi0JICogc2V0dXAgaXMgcmVxdWlyZWQgdG8gYWNjZXNzIEVDUyBkYXRhLiBBZnRlciB0aGlzIGlzIHBlcmZvcm1lZCwgdGhlCi0JICogJ3RlYXJkb3duJyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB1cG9uIGVycm9yIGFuZCBub3JtYWwgZXhpdCBwYXRocy4KLQkgKi8KLQlpZiAoYm9vdF9jcHVfZGF0YS54ODYgPj0gMHgxMCkKLQkJYW1kNjRfc2V0dXAocHZ0KTsKLQotCS8qCi0JICogU2F2ZSB0aGUgcG9pbnRlciB0byB0aGUgcHJpdmF0ZSBkYXRhIGZvciB1c2UgaW4gMm5kIGluaXRpYWxpemF0aW9uCi0JICogc3RhZ2UKLQkgKi8KLQlwdnRfbG9va3VwW3B2dC0+bWNfbm9kZV9pZF0gPSBwdnQ7Ci0KLQlyZXR1cm4gMDsKLQotZXJyX3B1dDoKLQlhbWQ2NF9mcmVlX21jX3NpYmxpbmdfZGV2aWNlcyhwdnQpOwotCi1lcnJfZnJlZToKLQlrZnJlZShwdnQpOwotCi1lcnJfZXhpdDoKLQlyZXR1cm4gcmV0OwotfQotCi0vKgotICogVGhpcyBpcyB0aGUgZmluaXNoaW5nIHN0YWdlIG9mIHRoZSBpbml0IGNvZGUuIE5lZWRzIHRvIGJlIHBlcmZvcm1lZCBhZnRlciBhbGwKLSAqIE1DcycgaGFyZHdhcmUgaGF2ZSBiZWVuIHByZXBwZWQgZm9yIGFjY2Vzc2luZyBleHRlbmRlZCBjb25maWcgc3BhY2UuCi0gKi8KLXN0YXRpYyBpbnQgYW1kNjRfaW5pdF8ybmRfc3RhZ2Uoc3RydWN0IGFtZDY0X3B2dCAqcHZ0KQotewotCWludCBub2RlX2lkID0gcHZ0LT5tY19ub2RlX2lkOwotCXN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaTsKLQlpbnQgcmV0ID0gLUVOT0RFVjsKLQotCWFtZDY0X3JlYWRfbWNfcmVnaXN0ZXJzKHB2dCk7CisJcmVhZF9tY19yZWdzKHB2dCk7CiAKIAkvKgogCSAqIFdlIG5lZWQgdG8gZGV0ZXJtaW5lIGhvdyBtYW55IG1lbW9yeSBjaGFubmVscyB0aGVyZSBhcmUuIFRoZW4gdXNlCiAJICogdGhhdCBpbmZvcm1hdGlvbiBmb3IgY2FsY3VsYXRpbmcgdGhlIHNpemUgb2YgdGhlIGR5bmFtaWMgaW5zdGFuY2UKLQkgKiB0YWJsZXMgaW4gdGhlICdtY2knIHN0cnVjdHVyZQorCSAqIHRhYmxlcyBpbiB0aGUgJ21jaScgc3RydWN0dXJlLgogCSAqLworCXJldCA9IC1FSU5WQUw7CiAJcHZ0LT5jaGFubmVsX2NvdW50ID0gcHZ0LT5vcHMtPmVhcmx5X2NoYW5uZWxfY291bnQocHZ0KTsKIAlpZiAocHZ0LT5jaGFubmVsX2NvdW50IDwgMCkKLQkJZ290byBlcnJfZXhpdDsKKwkJZ290byBlcnJfc2libGluZ3M7CiAKIAlyZXQgPSAtRU5PTUVNOwotCW1jaSA9IGVkYWNfbWNfYWxsb2MoMCwgcHZ0LT5jc19jb3VudCwgcHZ0LT5jaGFubmVsX2NvdW50LCBub2RlX2lkKTsKKwltY2kgPSBlZGFjX21jX2FsbG9jKDAsIHB2dC0+Y3NfY291bnQsIHB2dC0+Y2hhbm5lbF9jb3VudCwgbmlkKTsKIAlpZiAoIW1jaSkKLQkJZ290byBlcnJfZXhpdDsKKwkJZ290byBlcnJfc2libGluZ3M7CiAKIAltY2ktPnB2dF9pbmZvID0gcHZ0OworCW1jaS0+ZGV2ID0gJnB2dC0+RjItPmRldjsKIAotCW1jaS0+ZGV2ID0gJnB2dC0+ZHJhbV9mMl9jdGwtPmRldjsKLQlhbWQ2NF9zZXR1cF9tY2lfbWlzY19hdHRyaWJ1dGVzKG1jaSk7CisJc2V0dXBfbWNpX21pc2NfYXR0cnMobWNpKTsKIAotCWlmIChhbWQ2NF9pbml0X2Nzcm93cyhtY2kpKQorCWlmIChpbml0X2Nzcm93cyhtY2kpKQogCQltY2ktPmVkYWNfY2FwID0gRURBQ19GTEFHX05PTkU7CiAKLQlhbWQ2NF9lbmFibGVfZWNjX2Vycm9yX3JlcG9ydGluZyhtY2kpOwotCWFtZDY0X3NldF9tY19zeXNmc19hdHRyaWJ1dGVzKG1jaSk7CisJc2V0X21jX3N5c2ZzX2F0dHJzKG1jaSk7CiAKIAlyZXQgPSAtRU5PREVWOwogCWlmIChlZGFjX21jX2FkZF9tYyhtY2kpKSB7CkBAIC0yNzU2LDU0ICsyNTk2LDc3IEBACiAJCWdvdG8gZXJyX2FkZF9tYzsKIAl9CiAKLQltY2lfbG9va3VwW25vZGVfaWRdID0gbWNpOwotCXB2dF9sb29rdXBbbm9kZV9pZF0gPSBOVUxMOwotCiAJLyogcmVnaXN0ZXIgc3R1ZmYgd2l0aCBFREFDIE1DRSAqLwogCWlmIChyZXBvcnRfZ2FydF9lcnJvcnMpCiAJCWFtZF9yZXBvcnRfZ2FydF9lcnJvcnModHJ1ZSk7CiAKIAlhbWRfcmVnaXN0ZXJfZWNjX2RlY29kZXIoYW1kNjRfZGVjb2RlX2J1c19lcnJvcik7CiAKKwltY2lzW25pZF0gPSBtY2k7CisKKwlhdG9taWNfaW5jKCZkcnZfaW5zdGFuY2VzKTsKKwogCXJldHVybiAwOwogCiBlcnJfYWRkX21jOgogCWVkYWNfbWNfZnJlZShtY2kpOwogCi1lcnJfZXhpdDoKLQlkZWJ1Z2YwKCJmYWlsdXJlIHRvIGluaXQgMm5kIHN0YWdlOiByZXQ9JWRcbiIsIHJldCk7CitlcnJfc2libGluZ3M6CisJZnJlZV9tY19zaWJsaW5nX2RldnMocHZ0KTsKIAotCWFtZDY0X3Jlc3RvcmVfZWNjX2Vycm9yX3JlcG9ydGluZyhwdnQpOworZXJyX2ZyZWU6CisJa2ZyZWUocHZ0KTsKIAotCWlmIChib290X2NwdV9kYXRhLng4NiA+IDB4ZikKLQkJYW1kNjRfdGVhcmRvd24ocHZ0KTsKLQotCWFtZDY0X2ZyZWVfbWNfc2libGluZ19kZXZpY2VzKHB2dCk7Ci0KLQlrZnJlZShwdnRfbG9va3VwW3B2dC0+bWNfbm9kZV9pZF0pOwotCXB2dF9sb29rdXBbbm9kZV9pZF0gPSBOVUxMOwotCitlcnJfcmV0OgogCXJldHVybiByZXQ7CiB9CiAKLQotc3RhdGljIGludCBfX2RldmluaXQgYW1kNjRfaW5pdF9vbmVfaW5zdGFuY2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYsCi0JCQkJIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICptY190eXBlKQorc3RhdGljIGludCBfX2RldmluaXQgYW1kNjRfcHJvYmVfb25lX2luc3RhbmNlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQkJCQkgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICptY190eXBlKQogeworCXU4IG5pZCA9IGdldF9ub2RlX2lkKHBkZXYpOworCXN0cnVjdCBwY2lfZGV2ICpGMyA9IG5vZGVfdG9fYW1kX25iKG5pZCktPm1pc2M7CisJc3RydWN0IGVjY19zZXR0aW5ncyAqczsKIAlpbnQgcmV0ID0gMDsKIAotCWRlYnVnZjAoIihNQyBub2RlPSVkLG1jX3R5cGU9JyVzJylcbiIsIGdldF9ub2RlX2lkKHBkZXYpLAotCQlnZXRfYW1kX2ZhbWlseV9uYW1lKG1jX3R5cGUtPmRyaXZlcl9kYXRhKSk7Ci0KIAlyZXQgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0ID0gLUVJTzsKLQllbHNlCi0JCXJldCA9IGFtZDY0X3Byb2JlX29uZV9pbnN0YW5jZShwZGV2LCBtY190eXBlLT5kcml2ZXJfZGF0YSk7Ci0KLQlpZiAocmV0IDwgMCkKKwlpZiAocmV0IDwgMCkgewogCQlkZWJ1Z2YwKCJyZXQ9JWRcbiIsIHJldCk7CisJCXJldHVybiAtRUlPOworCX0KIAorCXJldCA9IC1FTk9NRU07CisJcyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBlY2Nfc2V0dGluZ3MpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXMpCisJCWdvdG8gZXJyX291dDsKKworCWVjY19zdG5nc1tuaWRdID0gczsKKworCWlmICghZWNjX2VuYWJsZWQoRjMsIG5pZCkpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKworCQlpZiAoIWVjY19lbmFibGVfb3ZlcnJpZGUpCisJCQlnb3RvIGVycl9lbmFibGU7CisKKwkJYW1kNjRfd2FybigiRm9yY2luZyBFQ0Mgb24hXG4iKTsKKworCQlpZiAoIWVuYWJsZV9lY2NfZXJyb3JfcmVwb3J0aW5nKHMsIG5pZCwgRjMpKQorCQkJZ290byBlcnJfZW5hYmxlOworCX0KKworCXJldCA9IGFtZDY0X2luaXRfb25lX2luc3RhbmNlKHBkZXYpOworCWlmIChyZXQgPCAwKSB7CisJCWFtZDY0X2VycigiRXJyb3IgcHJvYmluZyBpbnN0YW5jZTogJWRcbiIsIG5pZCk7CisJCXJlc3RvcmVfZWNjX2Vycm9yX3JlcG9ydGluZyhzLCBuaWQsIEYzKTsKKwl9CisKKwlyZXR1cm4gcmV0OworCitlcnJfZW5hYmxlOgorCWtmcmVlKHMpOworCWVjY19zdG5nc1tuaWRdID0gTlVMTDsKKworZXJyX291dDoKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yODExLDYgKzI2NzQsOSBAQAogewogCXN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaTsKIAlzdHJ1Y3QgYW1kNjRfcHZ0ICpwdnQ7CisJdTggbmlkID0gZ2V0X25vZGVfaWQocGRldik7CisJc3RydWN0IHBjaV9kZXYgKkYzID0gbm9kZV90b19hbWRfbmIobmlkKS0+bWlzYzsKKwlzdHJ1Y3QgZWNjX3NldHRpbmdzICpzID0gZWNjX3N0bmdzW25pZF07CiAKIAkvKiBSZW1vdmUgZnJvbSBFREFDIENPUkUgdHJhY2tpbmcgbGlzdCAqLwogCW1jaSA9IGVkYWNfbWNfZGVsX21jKCZwZGV2LT5kZXYpOwpAQCAtMjgxOSwyMCArMjY4NSwyMCBAQAogCiAJcHZ0ID0gbWNpLT5wdnRfaW5mbzsKIAotCWFtZDY0X3Jlc3RvcmVfZWNjX2Vycm9yX3JlcG9ydGluZyhwdnQpOworCXJlc3RvcmVfZWNjX2Vycm9yX3JlcG9ydGluZyhzLCBuaWQsIEYzKTsKIAotCWlmIChib290X2NwdV9kYXRhLng4NiA+IDB4ZikKLQkJYW1kNjRfdGVhcmRvd24ocHZ0KTsKLQotCWFtZDY0X2ZyZWVfbWNfc2libGluZ19kZXZpY2VzKHB2dCk7CisJZnJlZV9tY19zaWJsaW5nX2RldnMocHZ0KTsKIAogCS8qIHVucmVnaXN0ZXIgZnJvbSBFREFDIE1DRSAqLwogCWFtZF9yZXBvcnRfZ2FydF9lcnJvcnMoZmFsc2UpOwogCWFtZF91bnJlZ2lzdGVyX2VjY19kZWNvZGVyKGFtZDY0X2RlY29kZV9idXNfZXJyb3IpOwogCisJa2ZyZWUoZWNjX3N0bmdzW25pZF0pOworCWVjY19zdG5nc1tuaWRdID0gTlVMTDsKKwogCS8qIEZyZWUgdGhlIEVEQUMgQ09SRSByZXNvdXJjZXMgKi8KIAltY2ktPnB2dF9pbmZvID0gTlVMTDsKLQltY2lfbG9va3VwW3B2dC0+bWNfbm9kZV9pZF0gPSBOVUxMOworCW1jaXNbbmlkXSA9IE5VTEw7CiAKIAlrZnJlZShwdnQpOwogCWVkYWNfbWNfZnJlZShtY2kpOwpAQCAtMjg1MSw3ICsyNzE3LDYgQEAKIAkJLnN1YmRldmljZQk9IFBDSV9BTllfSUQsCiAJCS5jbGFzcwkJPSAwLAogCQkuY2xhc3NfbWFzawk9IDAsCi0JCS5kcml2ZXJfZGF0YQk9IEs4X0NQVVMKIAl9LAogCXsKIAkJLnZlbmRvcgkJPSBQQ0lfVkVORE9SX0lEX0FNRCwKQEAgLTI4NjAsMTYgKzI3MjUsNiBAQAogCQkuc3ViZGV2aWNlCT0gUENJX0FOWV9JRCwKIAkJLmNsYXNzCQk9IDAsCiAJCS5jbGFzc19tYXNrCT0gMCwKLQkJLmRyaXZlcl9kYXRhCT0gRjEwX0NQVVMKLQl9LAotCXsKLQkJLnZlbmRvcgkJPSBQQ0lfVkVORE9SX0lEX0FNRCwKLQkJLmRldmljZQkJPSBQQ0lfREVWSUNFX0lEX0FNRF8xMUhfTkJfRFJBTSwKLQkJLnN1YnZlbmRvcgk9IFBDSV9BTllfSUQsCi0JCS5zdWJkZXZpY2UJPSBQQ0lfQU5ZX0lELAotCQkuY2xhc3MJCT0gMCwKLQkJLmNsYXNzX21hc2sJPSAwLAotCQkuZHJpdmVyX2RhdGEJPSBGMTFfQ1BVUwogCX0sCiAJezAsIH0KIH07CkBAIC0yODc3LDEyICsyNzMyLDEyIEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBhbWQ2NF9wY2lfZHJpdmVyID0gewogCS5uYW1lCQk9IEVEQUNfTU9EX1NUUiwKLQkucHJvYmUJCT0gYW1kNjRfaW5pdF9vbmVfaW5zdGFuY2UsCisJLnByb2JlCQk9IGFtZDY0X3Byb2JlX29uZV9pbnN0YW5jZSwKIAkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGFtZDY0X3JlbW92ZV9vbmVfaW5zdGFuY2UpLAogCS5pZF90YWJsZQk9IGFtZDY0X3BjaV90YWJsZSwKIH07CiAKLXN0YXRpYyB2b2lkIGFtZDY0X3NldHVwX3BjaV9kZXZpY2Uodm9pZCkKK3N0YXRpYyB2b2lkIHNldHVwX3BjaV9kZXZpY2Uodm9pZCkKIHsKIAlzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2k7CiAJc3RydWN0IGFtZDY0X3B2dCAqcHZ0OwpAQCAtMjg5MCwxMyArMjc0NSwxMiBAQAogCWlmIChhbWQ2NF9jdGxfcGNpKQogCQlyZXR1cm47CiAKLQltY2kgPSBtY2lfbG9va3VwWzBdOworCW1jaSA9IG1jaXNbMF07CiAJaWYgKG1jaSkgewogCiAJCXB2dCA9IG1jaS0+cHZ0X2luZm87CiAJCWFtZDY0X2N0bF9wY2kgPQotCQkJZWRhY19wY2lfY3JlYXRlX2dlbmVyaWNfY3RsKCZwdnQtPmRyYW1fZjJfY3RsLT5kZXYsCi0JCQkJCQkgICAgRURBQ19NT0RfU1RSKTsKKwkJCWVkYWNfcGNpX2NyZWF0ZV9nZW5lcmljX2N0bCgmcHZ0LT5GMi0+ZGV2LCBFREFDX01PRF9TVFIpOwogCiAJCWlmICghYW1kNjRfY3RsX3BjaSkgewogCQkJcHJfd2FybmluZygiJXMoKTogVW5hYmxlIHRvIGNyZWF0ZSBQQ0kgY29udHJvbFxuIiwKQEAgLTI5MTAsNTEgKzI3NjQsNTAgQEAKIAogc3RhdGljIGludCBfX2luaXQgYW1kNjRfZWRhY19pbml0KHZvaWQpCiB7Ci0JaW50IG5iLCBlcnIgPSAtRU5PREVWOwotCWJvb2wgbG9hZF9vayA9IGZhbHNlOworCWludCBlcnIgPSAtRU5PREVWOwogCiAJZWRhY19wcmludGsoS0VSTl9JTkZPLCBFREFDX01PRF9TVFIsIEVEQUNfQU1ENjRfVkVSU0lPTiAiXG4iKTsKIAogCW9wc3RhdGVfaW5pdCgpOwogCi0JaWYgKGNhY2hlX2s4X25vcnRoYnJpZGdlcygpIDwgMCkKKwlpZiAoYW1kX2NhY2hlX25vcnRoYnJpZGdlcygpIDwgMCkKKwkJZ290byBlcnJfcmV0OworCisJZXJyID0gLUVOT01FTTsKKwltY2lzCSAgPSBremFsbG9jKGFtZF9uYl9udW0oKSAqIHNpemVvZihtY2lzWzBdKSwgR0ZQX0tFUk5FTCk7CisJZWNjX3N0bmdzID0ga3phbGxvYyhhbWRfbmJfbnVtKCkgKiBzaXplb2YoZWNjX3N0bmdzWzBdKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCEobWNpcyAmJiBlY2Nfc3RuZ3MpKQogCQlnb3RvIGVycl9yZXQ7CiAKIAltc3JzID0gbXNyc19hbGxvYygpOwogCWlmICghbXNycykKLQkJZ290byBlcnJfcmV0OworCQlnb3RvIGVycl9mcmVlOwogCiAJZXJyID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmYW1kNjRfcGNpX2RyaXZlcik7CiAJaWYgKGVycikKIAkJZ290byBlcnJfcGNpOwogCi0JLyoKLQkgKiBBdCB0aGlzIHBvaW50LCB0aGUgYXJyYXkgJ3B2dF9sb29rdXBbXScgY29udGFpbnMgcG9pbnRlcnMgdG8gYWxsb2MnZAotCSAqIGFtZDY0X3B2dCBzdHJ1Y3RzLiBUaGVzZSB3aWxsIGJlIHVzZWQgaW4gdGhlIDJuZCBzdGFnZSBpbml0IGZ1bmN0aW9uCi0JICogdG8gZmluaXNoIGluaXRpYWxpemF0aW9uIG9mIHRoZSBNQyBpbnN0YW5jZXMuCi0JICovCiAJZXJyID0gLUVOT0RFVjsKLQlmb3IgKG5iID0gMDsgbmIgPCBrOF9ub3J0aGJyaWRnZXMubnVtOyBuYisrKSB7Ci0JCWlmICghcHZ0X2xvb2t1cFtuYl0pCi0JCQljb250aW51ZTsKKwlpZiAoIWF0b21pY19yZWFkKCZkcnZfaW5zdGFuY2VzKSkKKwkJZ290byBlcnJfbm9faW5zdGFuY2VzOwogCi0JCWVyciA9IGFtZDY0X2luaXRfMm5kX3N0YWdlKHB2dF9sb29rdXBbbmJdKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZXJyXzJuZF9zdGFnZTsKKwlzZXR1cF9wY2lfZGV2aWNlKCk7CisJcmV0dXJuIDA7CiAKLQkJbG9hZF9vayA9IHRydWU7Ci0JfQotCi0JaWYgKGxvYWRfb2spIHsKLQkJYW1kNjRfc2V0dXBfcGNpX2RldmljZSgpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLWVycl8ybmRfc3RhZ2U6CitlcnJfbm9faW5zdGFuY2VzOgogCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmYW1kNjRfcGNpX2RyaXZlcik7CisKIGVycl9wY2k6CiAJbXNyc19mcmVlKG1zcnMpOwogCW1zcnMgPSBOVUxMOworCitlcnJfZnJlZToKKwlrZnJlZShtY2lzKTsKKwltY2lzID0gTlVMTDsKKworCWtmcmVlKGVjY19zdG5ncyk7CisJZWNjX3N0bmdzID0gTlVMTDsKKwogZXJyX3JldDoKIAlyZXR1cm4gZXJyOwogfQpAQCAtMjk2Niw2ICsyODE5LDEyIEBACiAKIAlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmFtZDY0X3BjaV9kcml2ZXIpOwogCisJa2ZyZWUoZWNjX3N0bmdzKTsKKwllY2Nfc3RuZ3MgPSBOVUxMOworCisJa2ZyZWUobWNpcyk7CisJbWNpcyA9IE5VTEw7CisKIAltc3JzX2ZyZWUobXNycyk7CiAJbXNycyA9IE5VTEw7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhYy5oIGIvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuaAppbmRleCAwNDRhZWU0Li42MTNlYzcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhYy5oCisrKyBiL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjLmgKQEAgLTc0LDExICs3NCwyNiBAQAogI2luY2x1ZGUgImVkYWNfY29yZS5oIgogI2luY2x1ZGUgIm1jZV9hbWQuaCIKIAotI2RlZmluZSBhbWQ2NF9wcmludGsobGV2ZWwsIGZtdCwgYXJnLi4uKSBcCi0JZWRhY19wcmludGsobGV2ZWwsICJhbWQ2NCIsIGZtdCwgIyNhcmcpCisjZGVmaW5lIGFtZDY0X2RlYnVnKGZtdCwgYXJnLi4uKSBcCisJZWRhY19wcmludGsoS0VSTl9ERUJVRywgImFtZDY0IiwgZm10LCAjI2FyZykKIAotI2RlZmluZSBhbWQ2NF9tY19wcmludGsobWNpLCBsZXZlbCwgZm10LCBhcmcuLi4pIFwKLQllZGFjX21jX2NoaXBzZXRfcHJpbnRrKG1jaSwgbGV2ZWwsICJhbWQ2NCIsIGZtdCwgIyNhcmcpCisjZGVmaW5lIGFtZDY0X2luZm8oZm10LCBhcmcuLi4pIFwKKwllZGFjX3ByaW50ayhLRVJOX0lORk8sICJhbWQ2NCIsIGZtdCwgIyNhcmcpCisKKyNkZWZpbmUgYW1kNjRfbm90aWNlKGZtdCwgYXJnLi4uKSBcCisJZWRhY19wcmludGsoS0VSTl9OT1RJQ0UsICJhbWQ2NCIsIGZtdCwgIyNhcmcpCisKKyNkZWZpbmUgYW1kNjRfd2FybihmbXQsIGFyZy4uLikgXAorCWVkYWNfcHJpbnRrKEtFUk5fV0FSTklORywgImFtZDY0IiwgZm10LCAjI2FyZykKKworI2RlZmluZSBhbWQ2NF9lcnIoZm10LCBhcmcuLi4pIFwKKwllZGFjX3ByaW50ayhLRVJOX0VSUiwgImFtZDY0IiwgZm10LCAjI2FyZykKKworI2RlZmluZSBhbWQ2NF9tY193YXJuKG1jaSwgZm10LCBhcmcuLi4pIFwKKwllZGFjX21jX2NoaXBzZXRfcHJpbnRrKG1jaSwgS0VSTl9XQVJOSU5HLCAiYW1kNjQiLCBmbXQsICMjYXJnKQorCisjZGVmaW5lIGFtZDY0X21jX2VycihtY2ksIGZtdCwgYXJnLi4uKSBcCisJZWRhY19tY19jaGlwc2V0X3ByaW50ayhtY2ksIEtFUk5fRVJSLCAiYW1kNjQiLCBmbXQsICMjYXJnKQogCiAvKgogICogVGhyb3VnaG91dCB0aGUgY29tbWVudHMgaW4gdGhpcyBjb2RlLCB0aGUgZm9sbG93aW5nIHRlcm1zIGFyZSB1c2VkOgpAQCAtMTI5LDExICsxNDQsOSBAQAogICogICAgICAgICBzZWN0aW9ucyAzLjUuNCBhbmQgMy41LjUgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAgKi8KIAotI2RlZmluZSBFREFDX0FNRDY0X1ZFUlNJT04JCSIgVmVyOiAzLjMuMCAiIF9fREFURV9fCisjZGVmaW5lIEVEQUNfQU1ENjRfVkVSU0lPTgkJInYzLjMuMCIKICNkZWZpbmUgRURBQ19NT0RfU1RSCQkJImFtZDY0X2VkYWMiCiAKLSNkZWZpbmUgRURBQ19NQVhfTlVNTk9ERVMJCTgKLQogLyogRXh0ZW5kZWQgTW9kZWwgZnJvbSBDUFVJRCwgZm9yIENQVSBSZXZpc2lvbiBudW1iZXJzICovCiAjZGVmaW5lIEs4X1JFVl9ECQkJMQogI2RlZmluZSBLOF9SRVZfRQkJCTIKQEAgLTMyMiw5ICszMzUsNiBAQAogI2RlZmluZSBLOF9TQ1JDVFJMCQkJMHg1OAogCiAjZGVmaW5lIEYxMF9OQl9DRkdfTE9XCQkJMHg4OAotI2RlZmluZQlGMTBfTkJfQ0ZHX0xPV19FTkFCTEVfRVhUX0NGRwlCSVQoMTQpCi0KLSNkZWZpbmUgRjEwX05CX0NGR19ISUdICQkJMHg4QwogCiAjZGVmaW5lIEYxMF9PTkxJTkVfU1BBUkUJCTB4QjAKICNkZWZpbmUgRjEwX09OTElORV9TUEFSRV9TV0FQRE9ORTAoeCkJKCh4KSAmIEJJVCgxKSkKQEAgLTM3Myw3ICszODMsNiBAQAogZW51bSBhbWQ2NF9jaGlwc2V0X2ZhbWlsaWVzIHsKIAlLOF9DUFVTID0gMCwKIAlGMTBfQ1BVUywKLQlGMTFfQ1BVUywKIH07CiAKIC8qIEVycm9yIGluamVjdGlvbiBjb250cm9sIHN0cnVjdHVyZSAqLwpAQCAtMzg0LDE2ICszOTMsMTMgQEAKIH07CiAKIHN0cnVjdCBhbWQ2NF9wdnQgeworCXN0cnVjdCBsb3dfb3BzICpvcHM7CisKIAkvKiBwY2lfZGV2aWNlIGhhbmRsZXMgd2hpY2ggd2UgdXRpbGl6ZSAqLwotCXN0cnVjdCBwY2lfZGV2ICphZGRyX2YxX2N0bDsKLQlzdHJ1Y3QgcGNpX2RldiAqZHJhbV9mMl9jdGw7Ci0Jc3RydWN0IHBjaV9kZXYgKm1pc2NfZjNfY3RsOworCXN0cnVjdCBwY2lfZGV2ICpGMSwgKkYyLCAqRjM7CiAKIAlpbnQgbWNfbm9kZV9pZDsJCS8qIE1DIGluZGV4IG9mIHRoaXMgTUMgbm9kZSAqLwogCWludCBleHRfbW9kZWw7CQkvKiBleHRlbmRlZCBtb2RlbCB2YWx1ZSBvZiB0aGlzIG5vZGUgKi8KLQotCXN0cnVjdCBsb3dfb3BzICpvcHM7CS8qIHBvaW50ZXIgdG8gcGVyIFBDSSBEZXZpY2UgSUQgZnVuYyB0YWJsZSAqLwotCiAJaW50IGNoYW5uZWxfY291bnQ7CiAKIAkvKiBSYXcgcmVnaXN0ZXJzICovCkBAIC00NTUsMjcgKzQ2MSwyNyBAQAogCS8qIHBsYWNlIHRvIHN0b3JlIGVycm9yIGluamVjdGlvbiBwYXJhbWV0ZXJzIHByaW9yIHRvIGlzc3VlICovCiAJc3RydWN0IGVycm9yX2luamVjdGlvbiBpbmplY3Rpb247CiAKLQkvKiBTYXZlIG9sZCBodyByZWdpc3RlcnMnIHZhbHVlcyBiZWZvcmUgd2UgbW9kaWZpZWQgdGhlbSAqLwotCXUzMiBuYmN0bF9tY2djdGxfc2F2ZWQ7CQkvKiBXaGVuIHRydWUsIGZvbGxvd2luZyAyIGFyZSB2YWxpZCAqLworCS8qIERDVCBwZXItZmFtaWx5IHNjcnVicmF0ZSBzZXR0aW5nICovCisJdTMyIG1pbl9zY3J1YnJhdGU7CisKKwkvKiBmYW1pbHkgbmFtZSB0aGlzIGluc3RhbmNlIGlzIHJ1bm5pbmcgb24gKi8KKwljb25zdCBjaGFyICpjdGxfbmFtZTsKKworfTsKKworLyoKKyAqIHBlci1ub2RlIEVDQyBzZXR0aW5ncyBkZXNjcmlwdG9yCisgKi8KK3N0cnVjdCBlY2Nfc2V0dGluZ3MgewogCXUzMiBvbGRfbmJjdGw7CisJYm9vbCBuYmN0bF92YWxpZDsKIAotCS8qIE1DIFR5cGUgSW5kZXggdmFsdWU6IHNvY2tldCBGIHZzIEZhbWlseSAxMGggKi8KLQl1MzIgbWNfdHlwZV9pbmRleDsKLQotCS8qIG1pc2Mgc2V0dGluZ3MgKi8KIAlzdHJ1Y3QgZmxhZ3MgewotCQl1bnNpZ25lZCBsb25nIGNmOF9leHRjZmc6MTsKIAkJdW5zaWduZWQgbG9uZyBuYl9tY2VfZW5hYmxlOjE7CiAJCXVuc2lnbmVkIGxvbmcgbmJfZWNjX3ByZXY6MTsKIAl9IGZsYWdzOwogfTsKIAotc3RydWN0IHNjcnVicmF0ZSB7Ci0gICAgICAgdTMyIHNjcnVidmFsOyAgICAgICAgICAgLyogYml0IHBhdHRlcm4gZm9yIHNjcnViIHJhdGUgKi8KLSAgICAgICB1MzIgYmFuZHdpZHRoOyAgICAgICAgICAvKiBiYW5kd2lkdGggY29uc3VtZWQgKGJ5dGVzL3NlYykgKi8KLX07Ci0KLWV4dGVybiBzdHJ1Y3Qgc2NydWJyYXRlIHNjcnVicmF0ZXNbMjNdOwogZXh0ZXJuIGNvbnN0IGNoYXIgKnR0X21zZ3NbNF07CiBleHRlcm4gY29uc3QgY2hhciAqbGxfbXNnc1s0XTsKIGV4dGVybiBjb25zdCBjaGFyICpycnJyX21zZ3NbMTZdOwpAQCAtNTE3LDIzICs1MjMsMTAgQEAKIAogc3RydWN0IGFtZDY0X2ZhbWlseV90eXBlIHsKIAljb25zdCBjaGFyICpjdGxfbmFtZTsKLQl1MTYgYWRkcl9mMV9jdGw7Ci0JdTE2IG1pc2NfZjNfY3RsOworCXUxNiBmMV9pZCwgZjNfaWQ7CiAJc3RydWN0IGxvd19vcHMgb3BzOwogfTsKIAotc3RhdGljIHN0cnVjdCBhbWQ2NF9mYW1pbHlfdHlwZSBhbWQ2NF9mYW1pbHlfdHlwZXNbXTsKLQotc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpnZXRfYW1kX2ZhbWlseV9uYW1lKGludCBpbmRleCkKLXsKLQlyZXR1cm4gYW1kNjRfZmFtaWx5X3R5cGVzW2luZGV4XS5jdGxfbmFtZTsKLX0KLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgbG93X29wcyAqZmFtaWx5X29wcyhpbnQgaW5kZXgpCi17Ci0JcmV0dXJuICZhbWQ2NF9mYW1pbHlfdHlwZXNbaW5kZXhdLm9wczsKLX0KLQogc3RhdGljIGlubGluZSBpbnQgYW1kNjRfcmVhZF9wY2lfY2ZnX2R3b3JkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgb2Zmc2V0LAogCQkJCQkgICB1MzIgKnZhbCwgY29uc3QgY2hhciAqZnVuYykKIHsKQEAgLTU0MSw4ICs1MzQsOCBAQAogCiAJZXJyID0gcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIG9mZnNldCwgdmFsKTsKIAlpZiAoZXJyKQotCQlhbWQ2NF9wcmludGsoS0VSTl9XQVJOSU5HLCAiJXM6IGVycm9yIHJlYWRpbmcgRiVkeCV4LlxuIiwKLQkJCSAgICAgZnVuYywgUENJX0ZVTkMocGRldi0+ZGV2Zm4pLCBvZmZzZXQpOworCQlhbWQ2NF93YXJuKCIlczogZXJyb3IgcmVhZGluZyBGJWR4JXguXG4iLAorCQkJICAgZnVuYywgUENJX0ZVTkMocGRldi0+ZGV2Zm4pLCBvZmZzZXQpOwogCiAJcmV0dXJuIGVycjsKIH0KQEAgLTU1Niw3ICs1NDksNiBAQAogICovCiAjZGVmaW5lIEs4X01JTl9TQ1JVQl9SQVRFX0JJVFMJMHgwCiAjZGVmaW5lIEYxMF9NSU5fU0NSVUJfUkFURV9CSVRTCTB4NQotI2RlZmluZSBGMTFfTUlOX1NDUlVCX1JBVEVfQklUUwkweDYKIAogaW50IGFtZDY0X2dldF9kcmFtX2hvbGVfaW5mbyhzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2ksIHU2NCAqaG9sZV9iYXNlLAogCQkJICAgICB1NjQgKmhvbGVfb2Zmc2V0LCB1NjQgKmhvbGVfc2l6ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhY19pbmouYyBiL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjX2luai5jCmluZGV4IDI5ZjFmN2EuLjY4ODQ3OGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjX2luai5jCisrKyBiL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjX2luai5jCkBAIC0yMyw5ICsyMyw3IEBACiAJaWYgKHJldCAhPSAtRUlOVkFMKSB7CiAKIAkJaWYgKHZhbHVlID4gMykgewotCQkJYW1kNjRfcHJpbnRrKEtFUk5fV0FSTklORywKLQkJCQkgICAgICIlczogaW52YWxpZCBzZWN0aW9uIDB4JWx4XG4iLAotCQkJCSAgICAgX19mdW5jX18sIHZhbHVlKTsKKwkJCWFtZDY0X3dhcm4oIiVzOiBpbnZhbGlkIHNlY3Rpb24gMHglbHhcbiIsIF9fZnVuY19fLCB2YWx1ZSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCkBAIC01OCw5ICs1Niw3IEBACiAJaWYgKHJldCAhPSAtRUlOVkFMKSB7CiAKIAkJaWYgKHZhbHVlID4gOCkgewotCQkJYW1kNjRfcHJpbnRrKEtFUk5fV0FSTklORywKLQkJCQkgICAgICIlczogaW52YWxpZCB3b3JkIDB4JWx4XG4iLAotCQkJCSAgICAgX19mdW5jX18sIHZhbHVlKTsKKwkJCWFtZDY0X3dhcm4oIiVzOiBpbnZhbGlkIHdvcmQgMHglbHhcbiIsIF9fZnVuY19fLCB2YWx1ZSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCkBAIC05Miw5ICs4OCw4IEBACiAJaWYgKHJldCAhPSAtRUlOVkFMKSB7CiAKIAkJaWYgKHZhbHVlICYgMHhGRkZGMDAwMCkgewotCQkJYW1kNjRfcHJpbnRrKEtFUk5fV0FSTklORywKLQkJCQkgICAgICIlczogaW52YWxpZCBFY2NWZWN0b3I6IDB4JWx4XG4iLAotCQkJCSAgICAgX19mdW5jX18sIHZhbHVlKTsKKwkJCWFtZDY0X3dhcm4oIiVzOiBpbnZhbGlkIEVjY1ZlY3RvcjogMHglbHhcbiIsCisJCQkJICAgX19mdW5jX18sIHZhbHVlKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKQEAgLTEyMiwxNSArMTE3LDEzIEBACiAJCS8qIEZvcm0gdmFsdWUgdG8gY2hvb3NlIDE2LWJ5dGUgc2VjdGlvbiBvZiBjYWNoZWxpbmUgKi8KIAkJc2VjdGlvbiA9IEYxMF9OQl9BUlJBWV9EUkFNX0VDQyB8CiAJCQkJU0VUX05CX0FSUkFZX0FERFJFU1MocHZ0LT5pbmplY3Rpb24uc2VjdGlvbik7Ci0JCXBjaV93cml0ZV9jb25maWdfZHdvcmQocHZ0LT5taXNjX2YzX2N0bCwKLQkJCQkJRjEwX05CX0FSUkFZX0FERFIsIHNlY3Rpb24pOworCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHB2dC0+RjMsIEYxMF9OQl9BUlJBWV9BRERSLCBzZWN0aW9uKTsKIAogCQl3b3JkX2JpdHMgPSBTRVRfTkJfRFJBTV9JTkpFQ1RJT05fUkVBRChwdnQtPmluamVjdGlvbi53b3JkLAogCQkJCQkJcHZ0LT5pbmplY3Rpb24uYml0X21hcCk7CiAKIAkJLyogSXNzdWUgJ3dvcmQnIGFuZCAnYml0JyBhbG9uZyB3aXRoIHRoZSBSRUFEIHJlcXVlc3QgKi8KLQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwdnQtPm1pc2NfZjNfY3RsLAotCQkJCQlGMTBfTkJfQVJSQVlfREFUQSwgd29yZF9iaXRzKTsKKwkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwdnQtPkYzLCBGMTBfTkJfQVJSQVlfREFUQSwgd29yZF9iaXRzKTsKIAogCQlkZWJ1Z2YwKCJzZWN0aW9uPTB4JXggd29yZF9iaXRzPTB4JXhcbiIsIHNlY3Rpb24sIHdvcmRfYml0cyk7CiAKQEAgLTE1NywxNSArMTUwLDEzIEBACiAJCS8qIEZvcm0gdmFsdWUgdG8gY2hvb3NlIDE2LWJ5dGUgc2VjdGlvbiBvZiBjYWNoZWxpbmUgKi8KIAkJc2VjdGlvbiA9IEYxMF9OQl9BUlJBWV9EUkFNX0VDQyB8CiAJCQkJU0VUX05CX0FSUkFZX0FERFJFU1MocHZ0LT5pbmplY3Rpb24uc2VjdGlvbik7Ci0JCXBjaV93cml0ZV9jb25maWdfZHdvcmQocHZ0LT5taXNjX2YzX2N0bCwKLQkJCQkJRjEwX05CX0FSUkFZX0FERFIsIHNlY3Rpb24pOworCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHB2dC0+RjMsIEYxMF9OQl9BUlJBWV9BRERSLCBzZWN0aW9uKTsKIAogCQl3b3JkX2JpdHMgPSBTRVRfTkJfRFJBTV9JTkpFQ1RJT05fV1JJVEUocHZ0LT5pbmplY3Rpb24ud29yZCwKIAkJCQkJCXB2dC0+aW5qZWN0aW9uLmJpdF9tYXApOwogCiAJCS8qIElzc3VlICd3b3JkJyBhbmQgJ2JpdCcgYWxvbmcgd2l0aCB0aGUgUkVBRCByZXF1ZXN0ICovCi0JCXBjaV93cml0ZV9jb25maWdfZHdvcmQocHZ0LT5taXNjX2YzX2N0bCwKLQkJCQkJRjEwX05CX0FSUkFZX0RBVEEsIHdvcmRfYml0cyk7CisJCXBjaV93cml0ZV9jb25maWdfZHdvcmQocHZ0LT5GMywgRjEwX05CX0FSUkFZX0RBVEEsIHdvcmRfYml0cyk7CiAKIAkJZGVidWdmMCgic2VjdGlvbj0weCV4IHdvcmRfYml0cz0weCV4XG4iLCBzZWN0aW9uLCB3b3JkX2JpdHMpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvY3BjOTI1X2VkYWMuYyBiL2RyaXZlcnMvZWRhYy9jcGM5MjVfZWRhYy5jCmluZGV4IDE2MDlhMTkuLmI5YTc4MWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9jcGM5MjVfZWRhYy5jCisrKyBiL2RyaXZlcnMvZWRhYy9jcGM5MjVfZWRhYy5jCkBAIC04MTgsOSArODE4LDEwIEBACiB9CiAKIC8qIENvbnZlcnQgY3VycmVudCBiYWNrLWdyb3VuZCBzY3J1YiByYXRlIGludG8gYnl0ZS9zZWMgYmFuZHdpdGggKi8KLXN0YXRpYyBpbnQgY3BjOTI1X2dldF9zZHJhbV9zY3J1Yl9yYXRlKHN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSwgdTMyICpidykKK3N0YXRpYyBpbnQgY3BjOTI1X2dldF9zZHJhbV9zY3J1Yl9yYXRlKHN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSkKIHsKIAlzdHJ1Y3QgY3BjOTI1X21jX3BkYXRhICpwZGF0YSA9IG1jaS0+cHZ0X2luZm87CisJaW50IGJ3OwogCXUzMiBtc2NyOwogCXU4IHNpOwogCkBAIC04MzIsMTEgKzgzMywxMSBAQAogCWlmICgoKG1zY3IgJiBNU0NSX1NDUlVCX01PRF9NQVNLKSAhPSBNU0NSX0JBQ0tHUl9TQ1JVQikgfHwKIAkgICAgKHNpID09IDApKSB7CiAJCWNwYzkyNV9tY19wcmludGsobWNpLCBLRVJOX0lORk8sICJTY3J1YiBtb2RlIG5vdCBlbmFibGVkXG4iKTsKLQkJKmJ3ID0gMDsKKwkJYncgPSAwOwogCX0gZWxzZQotCQkqYncgPSBDUEM5MjVfU0NSVUJfQkxPQ0tfU0laRSAqIDB4RkE2NyAvIHNpOworCQlidyA9IENQQzkyNV9TQ1JVQl9CTE9DS19TSVpFICogMHhGQTY3IC8gc2k7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gYnc7CiB9CiAKIC8qIFJldHVybiAwIGZvciBzaW5nbGUgY2hhbm5lbDsgMSBmb3IgZHVhbCBjaGFubmVsICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvZTc1MnhfZWRhYy5jIGIvZHJpdmVycy9lZGFjL2U3NTJ4X2VkYWMuYwppbmRleCAwNzNmNWEwLi5lYzMwMmQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvZTc1MnhfZWRhYy5jCisrKyBiL2RyaXZlcnMvZWRhYy9lNzUyeF9lZGFjLmMKQEAgLTk4MywxMSArOTgzLDExIEBACiAKIAlwY2lfd3JpdGVfY29uZmlnX3dvcmQocGRldiwgRTc1MlhfTUNIU0NSQiwgc2NydWJyYXRlc1tpXS5zY3J1YnZhbCk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gc2NydWJyYXRlc1tpXS5iYW5kd2lkdGg7CiB9CiAKIC8qIENvbnZlcnQgY3VycmVudCBzY3J1YiByYXRlIHZhbHVlIGludG8gYnl0ZS9zZWMgYmFuZHdpZHRoICovCi1zdGF0aWMgaW50IGdldF9zZHJhbV9zY3J1Yl9yYXRlKHN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSwgdTMyICpidykKK3N0YXRpYyBpbnQgZ2V0X3NkcmFtX3NjcnViX3JhdGUoc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpKQogewogCWNvbnN0IHN0cnVjdCBzY3J1YnJhdGUgKnNjcnVicmF0ZXM7CiAJc3RydWN0IGU3NTJ4X3B2dCAqcHZ0ID0gKHN0cnVjdCBlNzUyeF9wdnQgKikgbWNpLT5wdnRfaW5mbzsKQEAgLTEwMTMsMTAgKzEwMTMsOCBAQAogCQkJIkludmFsaWQgc2RyYW0gc2NydWIgY29udHJvbCB2YWx1ZTogMHgleFxuIiwgc2NydWJ2YWwpOwogCQlyZXR1cm4gLTE7CiAJfQorCXJldHVybiBzY3J1YnJhdGVzW2ldLmJhbmR3aWR0aDsKIAotCSpidyA9IHNjcnVicmF0ZXNbaV0uYmFuZHdpZHRoOwotCi0JcmV0dXJuIDA7CiB9CiAKIC8qIFJldHVybiAxIGlmIGR1YWwgY2hhbm5lbCBtb2RlIGlzIGFjdGl2ZS4gIEVsc2UgcmV0dXJuIDAuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvZWRhY19jb3JlLmggYi9kcml2ZXJzL2VkYWMvZWRhY19jb3JlLmgKaW5kZXggMjUxNDQwYy4uZmYxZWI3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2VkYWNfY29yZS5oCisrKyBiL2RyaXZlcnMvZWRhYy9lZGFjX2NvcmUuaApAQCAtNjgsOSArNjgsMTAgQEAKICNkZWZpbmUgRURBQ19QQ0kgIlBDSSIKICNkZWZpbmUgRURBQ19ERUJVRyAiREVCVUciCiAKK2V4dGVybiBjb25zdCBjaGFyICplZGFjX21lbV90eXBlc1tdOworCiAjaWZkZWYgQ09ORklHX0VEQUNfREVCVUcKIGV4dGVybiBpbnQgZWRhY19kZWJ1Z19sZXZlbDsKLWV4dGVybiBjb25zdCBjaGFyICplZGFjX21lbV90eXBlc1tdOwogCiAjZGVmaW5lIGVkYWNfZGVidWdfcHJpbnRrKGxldmVsLCBmbXQsIGFyZy4uLikgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAJZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTM4Niw3ICszODcsNyBAQAogCSAgIHJlcHJlc2VudGF0aW9uIGFuZCBjb252ZXJ0cyBpdCB0byB0aGUgY2xvc2VzdCBtYXRjaGluZwogCSAgIGJhbmR3aXRoIGluIGJ5dGVzL3NlYy4KIAkgKi8KLQlpbnQgKCpnZXRfc2RyYW1fc2NydWJfcmF0ZSkgKHN0cnVjdCBtZW1fY3RsX2luZm8gKiBtY2ksIHUzMiAqIGJ3KTsKKwlpbnQgKCpnZXRfc2RyYW1fc2NydWJfcmF0ZSkgKHN0cnVjdCBtZW1fY3RsX2luZm8gKiBtY2kpOwogCiAKIAkvKiBwb2ludGVyIHRvIGVkYWMgY2hlY2tpbmcgcm91dGluZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2VkYWNfbWMuYyBiL2RyaXZlcnMvZWRhYy9lZGFjX21jLmMKaW5kZXggNzk1ZWE2OWMuLmE0ZTlkYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9lZGFjX21jLmMKKysrIGIvZHJpdmVycy9lZGFjL2VkYWNfbWMuYwpAQCAtNzYsNiArNzYsOCBAQAogCWRlYnVnZjMoIlx0cHZ0X2luZm8gPSAlcFxuXG4iLCBtY2ktPnB2dF9pbmZvKTsKIH0KIAorI2VuZGlmCQkJCS8qIENPTkZJR19FREFDX0RFQlVHICovCisKIC8qCiAgKiBrZWVwIHRob3NlIGluIHN5bmMgd2l0aCB0aGUgZW51bSBtZW1fdHlwZQogICovCkBAIC0xMDAsOCArMTAyLDYgQEAKIH07CiBFWFBPUlRfU1lNQk9MX0dQTChlZGFjX21lbV90eXBlcyk7CiAKLSNlbmRpZgkJCQkvKiBDT05GSUdfRURBQ19ERUJVRyAqLwotCiAvKiAncHRyJyBwb2ludHMgdG8gYSBwb3NzaWJseSB1bmFsaWduZWQgaXRlbSBYIHN1Y2ggdGhhdCBzaXplb2YoWCkgaXMgJ3NpemUnLgogICogQWRqdXN0ICdwdHInIHNvIHRoYXQgaXRzIGFsaWdubWVudCBpcyBhdCBsZWFzdCBhcyBzdHJpbmdlbnQgYXMgd2hhdCB0aGUKICAqIGNvbXBpbGVyIHdvdWxkIHByb3ZpZGUgZm9yIFggYW5kIHJldHVybiB0aGUgYWxpZ25lZCByZXN1bHQuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvZWRhY19tY19zeXNmcy5jIGIvZHJpdmVycy9lZGFjL2VkYWNfbWNfc3lzZnMuYwppbmRleCBkY2U2MWY3Li4zOWQ5N2NmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvZWRhY19tY19zeXNmcy5jCisrKyBiL2RyaXZlcnMvZWRhYy9lZGFjX21jX3N5c2ZzLmMKQEAgLTQzNiw1NiArNDM2LDU1IEBACiAJcmV0dXJuIGNvdW50OwogfQogCi0vKiBtZW1vcnkgc2NydWJiaW5nICovCisvKiBNZW1vcnkgc2NydWJiaW5nIGludGVyZmFjZToKKyAqCisgKiBBIE1DIGRyaXZlciBjYW4gbGltaXQgdGhlIHNjcnViYmluZyBiYW5kd2lkdGggYmFzZWQgb24gdGhlIENQVSB0eXBlLgorICogVGhlcmVmb3JlLCAtPnNldF9zZHJhbV9zY3J1Yl9yYXRlIHNob3VsZCBiZSBtYWRlIHRvIHJldHVybiB0aGUgYWN0dWFsCisgKiBiYW5kd2lkdGggdGhhdCBpcyBhY2NlcHRlZCBvciAwIHdoZW4gc2NydWJiaW5nIGlzIHRvIGJlIGRpc2FibGVkLgorICoKKyAqIE5lZ2F0aXZlIHZhbHVlIHN0aWxsIG1lYW5zIHRoYXQgYW4gZXJyb3IgaGFzIG9jY3VycmVkIHdoaWxlIHNldHRpbmcKKyAqIHRoZSBzY3J1YiByYXRlLgorICovCiBzdGF0aWMgc3NpemVfdCBtY2lfc2RyYW1fc2NydWJfcmF0ZV9zdG9yZShzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2ksCiAJCQkJCSAgY29uc3QgY2hhciAqZGF0YSwgc2l6ZV90IGNvdW50KQogewogCXVuc2lnbmVkIGxvbmcgYmFuZHdpZHRoID0gMDsKLQlpbnQgZXJyOworCWludCBuZXdfYncgPSAwOwogCi0JaWYgKCFtY2ktPnNldF9zZHJhbV9zY3J1Yl9yYXRlKSB7Ci0JCWVkYWNfcHJpbnRrKEtFUk5fV0FSTklORywgRURBQ19NQywKLQkJCSAgICAiTWVtb3J5IHNjcnViIHJhdGUgc2V0dGluZyBub3QgaW1wbGVtZW50ZWQhXG4iKTsKKwlpZiAoIW1jaS0+c2V0X3NkcmFtX3NjcnViX3JhdGUpCiAJCXJldHVybiAtRUlOVkFMOwotCX0KIAogCWlmIChzdHJpY3Rfc3RydG91bChkYXRhLCAxMCwgJmJhbmR3aWR0aCkgPCAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWVyciA9IG1jaS0+c2V0X3NkcmFtX3NjcnViX3JhdGUobWNpLCAodTMyKWJhbmR3aWR0aCk7Ci0JaWYgKGVycikgewotCQllZGFjX3ByaW50ayhLRVJOX0RFQlVHLCBFREFDX01DLAotCQkJICAgICJGYWlsZWQgc2V0dGluZyBzY3J1YiByYXRlIHRvICVsdVxuIiwgYmFuZHdpZHRoKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCWVsc2UgewotCQllZGFjX3ByaW50ayhLRVJOX0RFQlVHLCBFREFDX01DLAotCQkJICAgICJTY3J1YiByYXRlIHNldCB0bzogJWx1XG4iLCBiYW5kd2lkdGgpOworCW5ld19idyA9IG1jaS0+c2V0X3NkcmFtX3NjcnViX3JhdGUobWNpLCBiYW5kd2lkdGgpOworCWlmIChuZXdfYncgPj0gMCkgeworCQllZGFjX3ByaW50ayhLRVJOX0RFQlVHLCBFREFDX01DLCAiU2NydWIgcmF0ZSBzZXQgdG8gJWRcbiIsIG5ld19idyk7CiAJCXJldHVybiBjb3VudDsKIAl9CisKKwllZGFjX3ByaW50ayhLRVJOX0RFQlVHLCBFREFDX01DLCAiRXJyb3Igc2V0dGluZyBzY3J1YiByYXRlIHRvOiAlbHVcbiIsIGJhbmR3aWR0aCk7CisJcmV0dXJuIC1FSU5WQUw7CiB9CiAKKy8qCisgKiAtPmdldF9zZHJhbV9zY3J1Yl9yYXRlKCkgcmV0dXJuIHZhbHVlIHNlbWFudGljcyBzYW1lIGFzIGFib3ZlLgorICovCiBzdGF0aWMgc3NpemVfdCBtY2lfc2RyYW1fc2NydWJfcmF0ZV9zaG93KHN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSwgY2hhciAqZGF0YSkKIHsKLQl1MzIgYmFuZHdpZHRoID0gMDsKLQlpbnQgZXJyOworCWludCBiYW5kd2lkdGggPSAwOwogCi0JaWYgKCFtY2ktPmdldF9zZHJhbV9zY3J1Yl9yYXRlKSB7Ci0JCWVkYWNfcHJpbnRrKEtFUk5fV0FSTklORywgRURBQ19NQywKLQkJCSAgICAiTWVtb3J5IHNjcnViIHJhdGUgcmVhZGluZyBub3QgaW1wbGVtZW50ZWRcbiIpOworCWlmICghbWNpLT5nZXRfc2RyYW1fc2NydWJfcmF0ZSkKIAkJcmV0dXJuIC1FSU5WQUw7CisKKwliYW5kd2lkdGggPSBtY2ktPmdldF9zZHJhbV9zY3J1Yl9yYXRlKG1jaSk7CisJaWYgKGJhbmR3aWR0aCA8IDApIHsKKwkJZWRhY19wcmludGsoS0VSTl9ERUJVRywgRURBQ19NQywgIkVycm9yIHJlYWRpbmcgc2NydWIgcmF0ZVxuIik7CisJCXJldHVybiBiYW5kd2lkdGg7CiAJfQogCi0JZXJyID0gbWNpLT5nZXRfc2RyYW1fc2NydWJfcmF0ZShtY2ksICZiYW5kd2lkdGgpOwotCWlmIChlcnIpIHsKLQkJZWRhY19wcmludGsoS0VSTl9ERUJVRywgRURBQ19NQywgIkVycm9yIHJlYWRpbmcgc2NydWIgcmF0ZVxuIik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCWVsc2UgewotCQllZGFjX3ByaW50ayhLRVJOX0RFQlVHLCBFREFDX01DLAotCQkJICAgICJSZWFkIHNjcnViIHJhdGU6ICVkXG4iLCBiYW5kd2lkdGgpOwotCQlyZXR1cm4gc3ByaW50ZihkYXRhLCAiJWRcbiIsIGJhbmR3aWR0aCk7Ci0JfQorCWVkYWNfcHJpbnRrKEtFUk5fREVCVUcsIEVEQUNfTUMsICJSZWFkIHNjcnViIHJhdGU6ICVkXG4iLCBiYW5kd2lkdGgpOworCXJldHVybiBzcHJpbnRmKGRhdGEsICIlZFxuIiwgYmFuZHdpZHRoKTsKIH0KIAogLyogZGVmYXVsdCBhdHRyaWJ1dGUgZmlsZXMgZm9yIHRoZSBNQ0kgb2JqZWN0ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvaTUxMDBfZWRhYy5jIGIvZHJpdmVycy9lZGFjL2k1MTAwX2VkYWMuYwppbmRleCBmNDU5YTZjLi4wNDQ4ZGEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvaTUxMDBfZWRhYy5jCisrKyBiL2RyaXZlcnMvZWRhYy9pNTEwMF9lZGFjLmMKQEAgLTYxMSwyMCArNjExLDE3IEBACiAKIAliYW5kd2lkdGggPSA1OTAwMDAwICogaTUxMDBfbWNfc2NyYmVuKGR3KTsKIAotCXJldHVybiAwOworCXJldHVybiBiYW5kd2lkdGg7CiB9CiAKLXN0YXRpYyBpbnQgaTUxMDBfZ2V0X3NjcnViX3JhdGUoc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpLAotCQkJCXUzMiAqYmFuZHdpZHRoKQorc3RhdGljIGludCBpNTEwMF9nZXRfc2NydWJfcmF0ZShzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2kpCiB7CiAJc3RydWN0IGk1MTAwX3ByaXYgKnByaXYgPSBtY2ktPnB2dF9pbmZvOwogCXUzMiBkdzsKIAogCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwcml2LT5tYywgSTUxMDBfTUMsICZkdyk7CiAKLQkqYmFuZHdpZHRoID0gNTkwMDAwMCAqIGk1MTAwX21jX3NjcmJlbihkdyk7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gNTkwMDAwMCAqIGk1MTAwX21jX3NjcmJlbihkdyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldiAqcGNpX2dldF9kZXZpY2VfZnVuYyh1bnNpZ25lZCB2ZW5kb3IsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvbWNlX2FtZC5jIGIvZHJpdmVycy9lZGFjL21jZV9hbWQuYwppbmRleCBjMDE4MTA5Li5mNmNmNzNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvbWNlX2FtZC5jCisrKyBiL2RyaXZlcnMvZWRhYy9tY2VfYW1kLmMKQEAgLTUsNiArNSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgYW1kX2RlY29kZXJfb3BzICpmYW1fb3BzOwogCitzdGF0aWMgdTggeGVjX21hc2sJID0gMHhmOwogc3RhdGljIHU4IG5iX2Vycl9jcHVtYXNrID0gMHhmOwogCiBzdGF0aWMgYm9vbCByZXBvcnRfZ2FydF9lcnJvcnM7CkBAIC03NCw1NyArNzUsMTA0IEBACiAJIkVDQyBFcnJvciBpbiB0aGUgUHJvYmUgRmlsdGVyIGRpcmVjdG9yeSIKIH07CiAKLXN0YXRpYyBib29sIGYxMmhfZGNfbWNlKHUxNiBlYykKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZjE1aF9pY19tY2VfZGVzY1tdID0geworCSJVQyBkdXJpbmcgYSBkZW1hbmQgbGluZWZpbGwgZnJvbSBMMiIsCisJIlBhcml0eSBlcnJvciBkdXJpbmcgZGF0YSBsb2FkIGZyb20gSUMiLAorCSJQYXJpdHkgZXJyb3IgZm9yIElDIHZhbGlkIGJpdCIsCisJIk1haW4gdGFnIHBhcml0eSBlcnJvciIsCisJIlBhcml0eSBlcnJvciBpbiBwcmVkaWN0aW9uIHF1ZXVlIiwKKwkiUEZCIGRhdGEvYWRkcmVzcyBwYXJpdHkgZXJyb3IiLAorCSJQYXJpdHkgZXJyb3IgaW4gdGhlIGJyYW5jaCBzdGF0dXMgcmVnIiwKKwkiUEZCIHByb21vdGlvbiBhZGRyZXNzIGVycm9yIiwKKwkiVGFnIGVycm9yIGR1cmluZyBwcm9iZS92aWN0aW1pemF0aW9uIiwKKwkiUGFyaXR5IGVycm9yIGZvciBJQyBwcm9iZSB0YWcgdmFsaWQgYml0IiwKKwkiUEZCIG5vbi1jYWNoZWFibGUgYml0IHBhcml0eSBlcnJvciIsCisJIlBGQiB2YWxpZCBiaXQgcGFyaXR5IGVycm9yIiwJCQkvKiB4ZWMgPSAweGQgKi8KKwkicGF0Y2ggUkFNIiwJCQkJCS8qIHhlYyA9IDAxMCAqLworCSJ1b3AgcXVldWUiLAorCSJpbnNuIGJ1ZmZlciIsCisJInByZWRlY29kZSBidWZmZXIiLAorCSJmZXRjaCBhZGRyZXNzIEZJRk8iCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGYxNWhfY3VfbWNlX2Rlc2NbXSA9IHsKKwkiRmlsbCBFQ0MgZXJyb3Igb24gZGF0YSBmaWxscyIsCQkJLyogeGVjID0gMHg0ICovCisJIkZpbGwgcGFyaXR5IGVycm9yIG9uIGluc24gZmlsbHMiLAorCSJQcmVmZXRjaGVyIHJlcXVlc3QgRklGTyBwYXJpdHkgZXJyb3IiLAorCSJQUlEgYWRkcmVzcyBwYXJpdHkgZXJyb3IiLAorCSJQUlEgZGF0YSBwYXJpdHkgZXJyb3IiLAorCSJXQ0MgVGFnIEVDQyBlcnJvciIsCisJIldDQyBEYXRhIEVDQyBlcnJvciIsCisJIldDQiBEYXRhIHBhcml0eSBlcnJvciIsCisJIlZCIERhdGEvRUNDIGVycm9yIiwKKwkiTDIgVGFnIEVDQyBlcnJvciIsCQkJCS8qIHhlYyA9IDB4MTAgKi8KKwkiSGFyZCBMMiBUYWcgRUNDIGVycm9yIiwKKwkiTXVsdGlwbGUgaGl0cyBvbiBMMiB0YWciLAorCSJYQUIgcGFyaXR5IGVycm9yIiwKKwkiUFJCIGFkZHJlc3MgcGFyaXR5IGVycm9yIgorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBmcl9leF9tY2VfZGVzY1tdID0geworCSJDUFUgV2F0Y2hkb2cgdGltZXIgZXhwaXJlIiwKKwkiV2FrZXVwIGFycmF5IGRlc3QgdGFnIiwKKwkiQUcgcGF5bG9hZCBhcnJheSIsCisJIkVYIHBheWxvYWQgYXJyYXkiLAorCSJJRFJGIGFycmF5IiwKKwkiUmV0aXJlIGRpc3BhdGNoIHF1ZXVlIiwKKwkiTWFwcGVyIGNoZWNrcG9pbnQgYXJyYXkiLAorCSJQaHlzaWNhbCByZWdpc3RlciBmaWxlIEVYMCBwb3J0IiwKKwkiUGh5c2ljYWwgcmVnaXN0ZXIgZmlsZSBFWDEgcG9ydCIsCisJIlBoeXNpY2FsIHJlZ2lzdGVyIGZpbGUgQUcwIHBvcnQiLAorCSJQaHlzaWNhbCByZWdpc3RlciBmaWxlIEFHMSBwb3J0IiwKKwkiRmxhZyByZWdpc3RlciBmaWxlIiwKKwkiREUgY29ycmVjdGFibGUgZXJyb3IgY291bGQgbm90IGJlIGNvcnJlY3RlZCIKK307CisKK3N0YXRpYyBib29sIGYxMmhfZGNfbWNlKHUxNiBlYywgdTggeGVjKQogewogCWJvb2wgcmV0ID0gZmFsc2U7CiAKIAlpZiAoTUVNX0VSUk9SKGVjKSkgewotCQl1OCBsbCA9IGVjICYgMHgzOworCQl1OCBsbCA9IExMKGVjKTsKIAkJcmV0ID0gdHJ1ZTsKIAogCQlpZiAobGwgPT0gTExfTDIpCiAJCQlwcl9jb250KCJkdXJpbmcgTDEgbGluZWZpbGwgZnJvbSBMMi5cbiIpOwogCQllbHNlIGlmIChsbCA9PSBMTF9MMSkKLQkJCXByX2NvbnQoIkRhdGEvVGFnICVzIGVycm9yLlxuIiwgUlJSUl9NU0coZWMpKTsKKwkJCXByX2NvbnQoIkRhdGEvVGFnICVzIGVycm9yLlxuIiwgUjRfTVNHKGVjKSk7CiAJCWVsc2UKIAkJCXJldCA9IGZhbHNlOwogCX0KIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgYm9vbCBmMTBoX2RjX21jZSh1MTYgZWMpCitzdGF0aWMgYm9vbCBmMTBoX2RjX21jZSh1MTYgZWMsIHU4IHhlYykKIHsKLQl1OCByNCAgPSAoZWMgPj4gNCkgJiAweGY7Ci0JdTggbGwgID0gZWMgJiAweDM7Ci0KLQlpZiAocjQgPT0gUjRfR0VOICYmIGxsID09IExMX0wxKSB7CisJaWYgKFI0KGVjKSA9PSBSNF9HRU4gJiYgTEwoZWMpID09IExMX0wxKSB7CiAJCXByX2NvbnQoImR1cmluZyBkYXRhIHNjcnViLlxuIik7CiAJCXJldHVybiB0cnVlOwogCX0KLQlyZXR1cm4gZjEyaF9kY19tY2UoZWMpOworCXJldHVybiBmMTJoX2RjX21jZShlYywgeGVjKTsKIH0KIAotc3RhdGljIGJvb2wgazhfZGNfbWNlKHUxNiBlYykKK3N0YXRpYyBib29sIGs4X2RjX21jZSh1MTYgZWMsIHU4IHhlYykKIHsKIAlpZiAoQlVTX0VSUk9SKGVjKSkgewogCQlwcl9jb250KCJkdXJpbmcgc3lzdGVtIGxpbmVmaWxsLlxuIik7CiAJCXJldHVybiB0cnVlOwogCX0KIAotCXJldHVybiBmMTBoX2RjX21jZShlYyk7CisJcmV0dXJuIGYxMGhfZGNfbWNlKGVjLCB4ZWMpOwogfQogCi1zdGF0aWMgYm9vbCBmMTRoX2RjX21jZSh1MTYgZWMpCitzdGF0aWMgYm9vbCBmMTRoX2RjX21jZSh1MTYgZWMsIHU4IHhlYykKIHsKLQl1OCByNAkgPSAoZWMgPj4gNCkgJiAweGY7Ci0JdTggbGwJID0gZWMgJiAweDM7Ci0JdTggdHQJID0gKGVjID4+IDIpICYgMHgzOwotCXU4IGlpCSA9IHR0OworCXU4IHI0CSA9IFI0KGVjKTsKIAlib29sIHJldCA9IHRydWU7CiAKIAlpZiAoTUVNX0VSUk9SKGVjKSkgewogCi0JCWlmICh0dCAhPSBUVF9EQVRBIHx8IGxsICE9IExMX0wxKQorCQlpZiAoVFQoZWMpICE9IFRUX0RBVEEgfHwgTEwoZWMpICE9IExMX0wxKQogCQkJcmV0dXJuIGZhbHNlOwogCiAJCXN3aXRjaCAocjQpIHsKQEAgLTE0NCw3ICsxOTIsNyBAQAogCQl9CiAJfSBlbHNlIGlmIChCVVNfRVJST1IoZWMpKSB7CiAKLQkJaWYgKChpaSAhPSBJSV9NRU0gJiYgaWkgIT0gSUlfSU8pIHx8IGxsICE9IExMX0xHKQorCQlpZiAoKElJKGVjKSAhPSBJSV9NRU0gJiYgSUkoZWMpICE9IElJX0lPKSB8fCBMTChlYykgIT0gTExfTEcpCiAJCQlyZXR1cm4gZmFsc2U7CiAKIAkJcHJfY29udCgiU3lzdGVtIHJlYWQgZGF0YSBlcnJvciBvbiBhICIpOwpAQCAtMTY5LDM5ICsyMTcsNzggQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgYm9vbCBmMTVoX2RjX21jZSh1MTYgZWMsIHU4IHhlYykKK3sKKwlib29sIHJldCA9IHRydWU7CisKKwlpZiAoTUVNX0VSUk9SKGVjKSkgeworCisJCXN3aXRjaCAoeGVjKSB7CisJCWNhc2UgMHgwOgorCQkJcHJfY29udCgiRGF0YSBBcnJheSBhY2Nlc3MgZXJyb3IuXG4iKTsKKwkJCWJyZWFrOworCisJCWNhc2UgMHgxOgorCQkJcHJfY29udCgiVUMgZXJyb3IgZHVyaW5nIGEgbGluZWZpbGwgZnJvbSBMMi9OQi5cbiIpOworCQkJYnJlYWs7CisKKwkJY2FzZSAweDI6CisJCWNhc2UgMHgxMToKKwkJCXByX2NvbnQoIlNUUSBhY2Nlc3MgZXJyb3IuXG4iKTsKKwkJCWJyZWFrOworCisJCWNhc2UgMHgzOgorCQkJcHJfY29udCgiU0NCIGFjY2VzcyBlcnJvci5cbiIpOworCQkJYnJlYWs7CisKKwkJY2FzZSAweDEwOgorCQkJcHJfY29udCgiVGFnIGVycm9yLlxuIik7CisJCQlicmVhazsKKworCQljYXNlIDB4MTI6CisJCQlwcl9jb250KCJMRFEgYWNjZXNzIGVycm9yLlxuIik7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJcmV0ID0gZmFsc2U7CisJCX0KKwl9IGVsc2UgaWYgKEJVU19FUlJPUihlYykpIHsKKworCQlpZiAoIXhlYykKKwkJCXByX2NvbnQoImR1cmluZyBzeXN0ZW0gbGluZWZpbGwuXG4iKTsKKwkJZWxzZQorCQkJcHJfY29udCgiIEludGVybmFsICVzIGNvbmRpdGlvbi5cbiIsCisJCQkJKCh4ZWMgPT0gMSkgPyAibGl2ZWxvY2siIDogImRlYWRsb2NrIikpOworCX0gZWxzZQorCQlyZXQgPSBmYWxzZTsKKworCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyB2b2lkIGFtZF9kZWNvZGVfZGNfbWNlKHN0cnVjdCBtY2UgKm0pCiB7Ci0JdTE2IGVjID0gbS0+c3RhdHVzICYgMHhmZmZmOwotCXU4IHhlYyA9IChtLT5zdGF0dXMgPj4gMTYpICYgMHhmOworCXUxNiBlYyA9IEVDKG0tPnN0YXR1cyk7CisJdTggeGVjID0gWEVDKG0tPnN0YXR1cywgeGVjX21hc2spOwogCiAJcHJfZW1lcmcoSFdfRVJSICJEYXRhIENhY2hlIEVycm9yOiAiKTsKIAogCS8qIFRMQiBlcnJvciBzaWduYXR1cmVzIGFyZSB0aGUgc2FtZSBhY3Jvc3MgZmFtaWxpZXMgKi8KIAlpZiAoVExCX0VSUk9SKGVjKSkgewotCQl1OCB0dCA9IChlYyA+PiAyKSAmIDB4MzsKLQotCQlpZiAodHQgPT0gVFRfREFUQSkgeworCQlpZiAoVFQoZWMpID09IFRUX0RBVEEpIHsKIAkJCXByX2NvbnQoIiVzIFRMQiAlcy5cbiIsIExMX01TRyhlYyksCi0JCQkJKHhlYyA/ICJtdWx0aW1hdGNoIiA6ICJwYXJpdHkgZXJyb3IiKSk7CisJCQkJKCh4ZWMgPT0gMikgPyAibG9ja2VkIG1pc3MiCisJCQkJCSAgICA6ICh4ZWMgPyAibXVsdGltYXRjaCIgOiAicGFyaXR5IikpKTsKIAkJCXJldHVybjsKIAkJfQotCQllbHNlCi0JCQlnb3RvIHdyb25nX2RjX21jZTsKLQl9Ci0KLQlpZiAoIWZhbV9vcHMtPmRjX21jZShlYykpCi0JCWdvdG8gd3JvbmdfZGNfbWNlOwotCi0JcmV0dXJuOwotCi13cm9uZ19kY19tY2U6Ci0JcHJfZW1lcmcoSFdfRVJSICJDb3JydXB0ZWQgREMgTUNFIGluZm8/XG4iKTsKKwl9IGVsc2UgaWYgKGZhbV9vcHMtPmRjX21jZShlYywgeGVjKSkKKwkJOworCWVsc2UKKwkJcHJfZW1lcmcoSFdfRVJSICJDb3JydXB0ZWQgREMgTUNFIGluZm8/XG4iKTsKIH0KIAotc3RhdGljIGJvb2wgazhfaWNfbWNlKHUxNiBlYykKK3N0YXRpYyBib29sIGs4X2ljX21jZSh1MTYgZWMsIHU4IHhlYykKIHsKLQl1OCBsbAkgPSBlYyAmIDB4MzsKLQl1OCByNAkgPSAoZWMgPj4gNCkgJiAweGY7CisJdTggbGwJID0gTEwoZWMpOwogCWJvb2wgcmV0ID0gdHJ1ZTsKIAogCWlmICghTUVNX0VSUk9SKGVjKSkKQEAgLTIxMCw3ICsyOTcsNyBAQAogCWlmIChsbCA9PSAweDIpCiAJCXByX2NvbnQoImR1cmluZyBhIGxpbmVmaWxsIGZyb20gTDIuXG4iKTsKIAllbHNlIGlmIChsbCA9PSAweDEpIHsKLQkJc3dpdGNoIChyNCkgeworCQlzd2l0Y2ggKFI0KGVjKSkgewogCQljYXNlIFI0X0lSRDoKIAkJCXByX2NvbnQoIlBhcml0eSBlcnJvciBkdXJpbmcgZGF0YSBsb2FkLlxuIik7CiAJCQlicmVhazsKQEAgLTIzMywxNSArMzIwLDEzIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGJvb2wgZjE0aF9pY19tY2UodTE2IGVjKQorc3RhdGljIGJvb2wgZjE0aF9pY19tY2UodTE2IGVjLCB1OCB4ZWMpCiB7Ci0JdTggbGwgICAgPSBlYyAmIDB4MzsKLQl1OCB0dCAgICA9IChlYyA+PiAyKSAmIDB4MzsKLQl1OCByNCAgPSAoZWMgPj4gNCkgJiAweGY7CisJdTggcjQgICAgPSBSNChlYyk7CiAJYm9vbCByZXQgPSB0cnVlOwogCiAJaWYgKE1FTV9FUlJPUihlYykpIHsKLQkJaWYgKHR0ICE9IDAgfHwgbGwgIT0gMSkKKwkJaWYgKFRUKGVjKSAhPSAwIHx8IExMKGVjKSAhPSAxKQogCQkJcmV0ID0gZmFsc2U7CiAKIAkJaWYgKHI0ID09IFI0X0lSRCkKQEAgLTI1NCwxMCArMzM5LDM2IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGJvb2wgZjE1aF9pY19tY2UodTE2IGVjLCB1OCB4ZWMpCit7CisJYm9vbCByZXQgPSB0cnVlOworCisJaWYgKCFNRU1fRVJST1IoZWMpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlzd2l0Y2ggKHhlYykgeworCWNhc2UgMHgwIC4uLiAweGE6CisJCXByX2NvbnQoIiVzLlxuIiwgZjE1aF9pY19tY2VfZGVzY1t4ZWNdKTsKKwkJYnJlYWs7CisKKwljYXNlIDB4ZDoKKwkJcHJfY29udCgiJXMuXG4iLCBmMTVoX2ljX21jZV9kZXNjW3hlYy0yXSk7CisJCWJyZWFrOworCisJY2FzZSAweDEwIC4uLiAweDE0OgorCQlwcl9jb250KCJEZWNvZGVyICVzIHBhcml0eSBlcnJvci5cbiIsIGYxNWhfaWNfbWNlX2Rlc2NbeGVjLTRdKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXQgPSBmYWxzZTsKKwl9CisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIHZvaWQgYW1kX2RlY29kZV9pY19tY2Uoc3RydWN0IG1jZSAqbSkKIHsKLQl1MTYgZWMgPSBtLT5zdGF0dXMgJiAweGZmZmY7Ci0JdTggeGVjID0gKG0tPnN0YXR1cyA+PiAxNikgJiAweGY7CisJdTE2IGVjID0gRUMobS0+c3RhdHVzKTsKKwl1OCB4ZWMgPSBYRUMobS0+c3RhdHVzLCB4ZWNfbWFzayk7CiAKIAlwcl9lbWVyZyhIV19FUlIgIkluc3RydWN0aW9uIENhY2hlIEVycm9yOiAiKTsKIApAQCAtMjY4LDcgKzM3OSw3IEBACiAJCWJvb2wgazggPSAoYm9vdF9jcHVfZGF0YS54ODYgPT0gMHhmICYmIChtLT5zdGF0dXMgJiBCSVRfNjQoNTgpKSk7CiAKIAkJcHJfY29udCgiZHVyaW5nICVzLlxuIiwgKGs4ID8gInN5c3RlbSBsaW5lZmlsbCIgOiAiTkIgZGF0YSByZWFkIikpOwotCX0gZWxzZSBpZiAoZmFtX29wcy0+aWNfbWNlKGVjKSkKKwl9IGVsc2UgaWYgKGZhbV9vcHMtPmljX21jZShlYywgeGVjKSkKIAkJOwogCWVsc2UKIAkJcHJfZW1lcmcoSFdfRVJSICJDb3JydXB0ZWQgSUMgTUNFIGluZm8/XG4iKTsKQEAgLTI3Niw4ICszODcsOCBAQAogCiBzdGF0aWMgdm9pZCBhbWRfZGVjb2RlX2J1X21jZShzdHJ1Y3QgbWNlICptKQogewotCXUzMiBlYyA9IG0tPnN0YXR1cyAmIDB4ZmZmZjsKLQl1MzIgeGVjID0gKG0tPnN0YXR1cyA+PiAxNikgJiAweGY7CisJdTE2IGVjID0gRUMobS0+c3RhdHVzKTsKKwl1OCB4ZWMgPSBYRUMobS0+c3RhdHVzLCB4ZWNfbWFzayk7CiAKIAlwcl9lbWVyZyhIV19FUlIgIkJ1cyBVbml0IEVycm9yIik7CiAKQEAgLTI4NiwyMyArMzk3LDIzIEBACiAJZWxzZSBpZiAoeGVjID09IDB4MykKIAkJcHJfY29udCgiIGluIHRoZSB2aWN0aW0gZGF0YSBidWZmZXJzLlxuIik7CiAJZWxzZSBpZiAoeGVjID09IDB4MiAmJiBNRU1fRVJST1IoZWMpKQotCQlwcl9jb250KCI6ICVzIGVycm9yIGluIHRoZSBMMiBjYWNoZSB0YWdzLlxuIiwgUlJSUl9NU0coZWMpKTsKKwkJcHJfY29udCgiOiAlcyBlcnJvciBpbiB0aGUgTDIgY2FjaGUgdGFncy5cbiIsIFI0X01TRyhlYykpOwogCWVsc2UgaWYgKHhlYyA9PSAweDApIHsKIAkJaWYgKFRMQl9FUlJPUihlYykpCiAJCQlwcl9jb250KCI6ICVzIGVycm9yIGluIGEgUGFnZSBEZXNjcmlwdG9yIENhY2hlIG9yICIKIAkJCQkiR3Vlc3QgVExCLlxuIiwgVFRfTVNHKGVjKSk7CiAJCWVsc2UgaWYgKEJVU19FUlJPUihlYykpCiAJCQlwcl9jb250KCI6ICVzL0VDQyBlcnJvciBpbiBkYXRhIHJlYWQgZnJvbSBOQjogJXMuXG4iLAotCQkJCVJSUlJfTVNHKGVjKSwgUFBfTVNHKGVjKSk7CisJCQkJUjRfTVNHKGVjKSwgUFBfTVNHKGVjKSk7CiAJCWVsc2UgaWYgKE1FTV9FUlJPUihlYykpIHsKLQkJCXU4IHJycnIgPSAoZWMgPj4gNCkgJiAweGY7CisJCQl1OCByNCA9IFI0KGVjKTsKIAotCQkJaWYgKHJycnIgPj0gMHg3KQorCQkJaWYgKHI0ID49IDB4NykKIAkJCQlwcl9jb250KCI6ICVzIGVycm9yIGR1cmluZyBkYXRhIGNvcHliYWNrLlxuIiwKLQkJCQkJUlJSUl9NU0coZWMpKTsKLQkJCWVsc2UgaWYgKHJycnIgPD0gMHgxKQorCQkJCQlSNF9NU0coZWMpKTsKKwkJCWVsc2UgaWYgKHI0IDw9IDB4MSkKIAkJCQlwcl9jb250KCI6ICVzIHBhcml0eS9FQ0MgZXJyb3IgZHVyaW5nIGRhdGEgIgotCQkJCQkiYWNjZXNzIGZyb20gTDIuXG4iLCBSUlJSX01TRyhlYykpOworCQkJCQkiYWNjZXNzIGZyb20gTDIuXG4iLCBSNF9NU0coZWMpKTsKIAkJCWVsc2UKIAkJCQlnb3RvIHdyb25nX2J1X21jZTsKIAkJfSBlbHNlCkBAIC0zMTYsMTIgKzQyNyw1MiBAQAogCXByX2VtZXJnKEhXX0VSUiAiQ29ycnVwdGVkIEJVIE1DRSBpbmZvP1xuIik7CiB9CiAKK3N0YXRpYyB2b2lkIGFtZF9kZWNvZGVfY3VfbWNlKHN0cnVjdCBtY2UgKm0pCit7CisJdTE2IGVjID0gRUMobS0+c3RhdHVzKTsKKwl1OCB4ZWMgPSBYRUMobS0+c3RhdHVzLCB4ZWNfbWFzayk7CisKKwlwcl9lbWVyZyhIV19FUlIgIkNvbWJpbmVkIFVuaXQgRXJyb3I6ICIpOworCisJaWYgKFRMQl9FUlJPUihlYykpIHsKKwkJaWYgKHhlYyA9PSAweDApCisJCQlwcl9jb250KCJEYXRhIHBhcml0eSBUTEIgcmVhZCBlcnJvci5cbiIpOworCQllbHNlIGlmICh4ZWMgPT0gMHgxKQorCQkJcHJfY29udCgiUG9pc29uIGRhdGEgcHJvdmlkZWQgZm9yIFRMQiBmaWxsLlxuIik7CisJCWVsc2UKKwkJCWdvdG8gd3JvbmdfY3VfbWNlOworCX0gZWxzZSBpZiAoQlVTX0VSUk9SKGVjKSkgeworCQlpZiAoeGVjID4gMikKKwkJCWdvdG8gd3JvbmdfY3VfbWNlOworCisJCXByX2NvbnQoIkVycm9yIGR1cmluZyBhdHRlbXB0ZWQgTkIgZGF0YSByZWFkLlxuIik7CisJfSBlbHNlIGlmIChNRU1fRVJST1IoZWMpKSB7CisJCXN3aXRjaCAoeGVjKSB7CisJCWNhc2UgMHg0IC4uLiAweGM6CisJCQlwcl9jb250KCIlcy5cbiIsIGYxNWhfY3VfbWNlX2Rlc2NbeGVjIC0gMHg0XSk7CisJCQlicmVhazsKKworCQljYXNlIDB4MTAgLi4uIDB4MTQ6CisJCQlwcl9jb250KCIlcy5cbiIsIGYxNWhfY3VfbWNlX2Rlc2NbeGVjIC0gMHg3XSk7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJZ290byB3cm9uZ19jdV9tY2U7CisJCX0KKwl9CisKKwlyZXR1cm47CisKK3dyb25nX2N1X21jZToKKwlwcl9lbWVyZyhIV19FUlIgIkNvcnJ1cHRlZCBDVSBNQ0UgaW5mbz9cbiIpOworfQorCiBzdGF0aWMgdm9pZCBhbWRfZGVjb2RlX2xzX21jZShzdHJ1Y3QgbWNlICptKQogewotCXUxNiBlYyA9IG0tPnN0YXR1cyAmIDB4ZmZmZjsKLQl1OCB4ZWMgPSAobS0+c3RhdHVzID4+IDE2KSAmIDB4ZjsKKwl1MTYgZWMgPSBFQyhtLT5zdGF0dXMpOworCXU4IHhlYyA9IFhFQyhtLT5zdGF0dXMsIHhlY19tYXNrKTsKIAotCWlmIChib290X2NwdV9kYXRhLng4NiA9PSAweDE0KSB7CisJaWYgKGJvb3RfY3B1X2RhdGEueDg2ID49IDB4MTQpIHsKIAkJcHJfZW1lcmcoIllvdSBzaG91bGRuJ3QgYmUgc2VlaW5nIGFuIExTIE1DRSBvbiB0aGlzIGNwdSBmYW1pbHksIgogCQkJICIgcGxlYXNlIHJlcG9ydCBvbiBMS01MLlxuIik7CiAJCXJldHVybjsKQEAgLTMzMCwxMiArNDgxLDEyIEBACiAJcHJfZW1lcmcoSFdfRVJSICJMb2FkIFN0b3JlIEVycm9yIik7CiAKIAlpZiAoeGVjID09IDB4MCkgewotCQl1OCByNCA9IChlYyA+PiA0KSAmIDB4ZjsKKwkJdTggcjQgPSBSNChlYyk7CiAKIAkJaWYgKCFCVVNfRVJST1IoZWMpIHx8IChyNCAhPSBSNF9EUkQgJiYgcjQgIT0gUjRfRFdSKSkKIAkJCWdvdG8gd3JvbmdfbHNfbWNlOwogCi0JCXByX2NvbnQoIiBkdXJpbmcgJXMuXG4iLCBSUlJSX01TRyhlYykpOworCQlwcl9jb250KCIgZHVyaW5nICVzLlxuIiwgUjRfTVNHKGVjKSk7CiAJfSBlbHNlCiAJCWdvdG8gd3JvbmdfbHNfbWNlOwogCkBAIC00MTAsNiArNTYxLDE1IEBACiAJCWdvdG8gb3V0OwogCQlicmVhazsKIAorCWNhc2UgMHgxOToKKwkJaWYgKGJvb3RfY3B1X2RhdGEueDg2ID09IDB4MTUpCisJCQlwcl9jb250KCJDb21wdXRlIFVuaXQgRGF0YSBFcnJvci5cbiIpOworCQllbHNlCisJCQlyZXQgPSBmYWxzZTsKKworCQlnb3RvIG91dDsKKwkJYnJlYWs7CisKIAljYXNlIDB4MWMgLi4uIDB4MWY6CiAJCW9mZnNldCA9IDI0OwogCQlicmVhazsKQEAgLTQzNCwyNyArNTk0LDMwIEBACiAKIHZvaWQgYW1kX2RlY29kZV9uYl9tY2UoaW50IG5vZGVfaWQsIHN0cnVjdCBtY2UgKm0sIHUzMiBuYmNmZykKIHsKLQl1OCB4ZWMgICA9IChtLT5zdGF0dXMgPj4gMTYpICYgMHgxZjsKLQl1MTYgZWMgICA9IG0tPnN0YXR1cyAmIDB4ZmZmZjsKKwl1MTYgZWMgICA9IEVDKG0tPnN0YXR1cyk7CisJdTggeGVjICAgPSBYRUMobS0+c3RhdHVzLCAweDFmKTsKIAl1MzIgbmJzaCA9ICh1MzIpKG0tPnN0YXR1cyA+PiAzMik7CisJaW50IGNvcmUgPSAtMTsKIAotCXByX2VtZXJnKEhXX0VSUiAiTm9ydGhicmlkZ2UgRXJyb3IsIG5vZGUgJWQ6ICIsIG5vZGVfaWQpOworCXByX2VtZXJnKEhXX0VSUiAiTm9ydGhicmlkZ2UgRXJyb3IgKG5vZGUgJWQiLCBub2RlX2lkKTsKIAotCS8qCi0JICogRjEwaCwgcmV2RCBjYW4gZGlzYWJsZSBFcnJDcHVbMzowXSBzbyBjaGVjayB0aGF0IGZpcnN0IGFuZCBhbHNvIHRoZQotCSAqIHZhbHVlIGVuY29kaW5nIGhhcyBjaGFuZ2VkIHNvIGludGVycHJldCB0aG9zZSBkaWZmZXJlbnRseQotCSAqLworCS8qIEYxMGgsIHJldkQgY2FuIGRpc2FibGUgRXJyQ3B1WzM6MF0gdGhyb3VnaCBFcnJDcHVWYWwgKi8KIAlpZiAoKGJvb3RfY3B1X2RhdGEueDg2ID09IDB4MTApICYmCiAJICAgIChib290X2NwdV9kYXRhLng4Nl9tb2RlbCA+IDcpKSB7CiAJCWlmIChuYnNoICYgSzhfTkJTSF9FUlJfQ1BVX1ZBTCkKLQkJCXByX2NvbnQoIiwgY29yZTogJXUiLCAodTgpKG5ic2ggJiBuYl9lcnJfY3B1bWFzaykpOworCQkJY29yZSA9IG5ic2ggJiBuYl9lcnJfY3B1bWFzazsKIAl9IGVsc2UgewogCQl1OCBhc3NvY19jcHVzID0gbmJzaCAmIG5iX2Vycl9jcHVtYXNrOwogCiAJCWlmIChhc3NvY19jcHVzID4gMCkKLQkJCXByX2NvbnQoIiwgY29yZTogJWQiLCBmbHMoYXNzb2NfY3B1cykgLSAxKTsKKwkJCWNvcmUgPSBmbHMoYXNzb2NfY3B1cykgLSAxOwogCX0KIAorCWlmIChjb3JlID49IDApCisJCXByX2NvbnQoIiwgY29yZSAlZCk6ICIsIGNvcmUpOworCWVsc2UKKwkJcHJfY29udCgiKTogIik7CisKIAlzd2l0Y2ggKHhlYykgewogCWNhc2UgMHgyOgogCQlwcl9jb250KCJTeW5jIGVycm9yIChzeW5jIHBhY2tldHMgb24gSFQgbGluayBkZXRlY3RlZCkuXG4iKTsKQEAgLTQ5NiwzNSArNjU5LDg5IEBACiAKIHN0YXRpYyB2b2lkIGFtZF9kZWNvZGVfZnJfbWNlKHN0cnVjdCBtY2UgKm0pCiB7Ci0JaWYgKGJvb3RfY3B1X2RhdGEueDg2ID09IDB4ZiB8fAotCSAgICBib290X2NwdV9kYXRhLng4NiA9PSAweDExKQorCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9ICZib290X2NwdV9kYXRhOworCXU4IHhlYyA9IFhFQyhtLT5zdGF0dXMsIHhlY19tYXNrKTsKKworCWlmIChjLT54ODYgPT0gMHhmIHx8IGMtPng4NiA9PSAweDExKQogCQlnb3RvIHdyb25nX2ZyX21jZTsKIAotCS8qIHdlIGhhdmUgb25seSBvbmUgZXJyb3Igc2lnbmF0dXJlIHNvIG1hdGNoIGFsbCBmaWVsZHMgYXQgb25jZS4gKi8KLQlpZiAoKG0tPnN0YXR1cyAmIDB4ZmZmZikgPT0gMHgwZjBmKSB7Ci0JCXByX2VtZXJnKEhXX0VSUiAiRlIgRXJyb3I6IENQVSBXYXRjaGRvZyB0aW1lciBleHBpcmUuXG4iKTsKLQkJcmV0dXJuOwotCX0KKwlpZiAoYy0+eDg2ICE9IDB4MTUgJiYgeGVjICE9IDB4MCkKKwkJZ290byB3cm9uZ19mcl9tY2U7CisKKwlwcl9lbWVyZyhIV19FUlIgIiVzIEVycm9yOiAiLAorCQkgKGMtPng4NiA9PSAweDE1ID8gIkV4ZWN1dGlvbiBVbml0IiA6ICJGSVJPQiIpKTsKKworCWlmICh4ZWMgPT0gMHgwIHx8IHhlYyA9PSAweGMpCisJCXByX2NvbnQoIiVzLlxuIiwgZnJfZXhfbWNlX2Rlc2NbeGVjXSk7CisJZWxzZSBpZiAoeGVjIDwgMHhkKQorCQlwcl9jb250KCIlcyBwYXJpdHkgZXJyb3IuXG4iLCBmcl9leF9tY2VfZGVzY1t4ZWNdKTsKKwllbHNlCisJCWdvdG8gd3JvbmdfZnJfbWNlOworCisJcmV0dXJuOwogCiB3cm9uZ19mcl9tY2U6CiAJcHJfZW1lcmcoSFdfRVJSICJDb3JydXB0ZWQgRlIgTUNFIGluZm8/XG4iKTsKIH0KIAorc3RhdGljIHZvaWQgYW1kX2RlY29kZV9mcF9tY2Uoc3RydWN0IG1jZSAqbSkKK3sKKwl1OCB4ZWMgPSBYRUMobS0+c3RhdHVzLCB4ZWNfbWFzayk7CisKKwlwcl9lbWVyZyhIV19FUlIgIkZsb2F0aW5nIFBvaW50IFVuaXQgRXJyb3I6ICIpOworCisJc3dpdGNoICh4ZWMpIHsKKwljYXNlIDB4MToKKwkJcHJfY29udCgiRnJlZSBMaXN0Iik7CisJCWJyZWFrOworCisJY2FzZSAweDI6CisJCXByX2NvbnQoIlBoeXNpY2FsIFJlZ2lzdGVyIEZpbGUiKTsKKwkJYnJlYWs7CisKKwljYXNlIDB4MzoKKwkJcHJfY29udCgiUmV0aXJlIFF1ZXVlIik7CisJCWJyZWFrOworCisJY2FzZSAweDQ6CisJCXByX2NvbnQoIlNjaGVkdWxlciB0YWJsZSIpOworCQlicmVhazsKKworCWNhc2UgMHg1OgorCQlwcl9jb250KCJTdGF0dXMgUmVnaXN0ZXIgRmlsZSIpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWdvdG8gd3JvbmdfZnBfbWNlOworCQlicmVhazsKKwl9CisKKwlwcl9jb250KCIgcGFyaXR5IGVycm9yLlxuIik7CisKKwlyZXR1cm47CisKK3dyb25nX2ZwX21jZToKKwlwcl9lbWVyZyhIV19FUlIgIkNvcnJ1cHRlZCBGUCBNQ0UgaW5mbz9cbiIpOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgYW1kX2RlY29kZV9lcnJfY29kZSh1MTYgZWMpCiB7Ci0JaWYgKFRMQl9FUlJPUihlYykpIHsKLQkJcHJfZW1lcmcoSFdfRVJSICJUcmFuc2FjdGlvbjogJXMsIENhY2hlIExldmVsOiAlc1xuIiwKLQkJCSBUVF9NU0coZWMpLCBMTF9NU0coZWMpKTsKLQl9IGVsc2UgaWYgKE1FTV9FUlJPUihlYykpIHsKLQkJcHJfZW1lcmcoSFdfRVJSICJUcmFuc2FjdGlvbjogJXMsIFR5cGU6ICVzLCBDYWNoZSBMZXZlbDogJXNcbiIsCi0JCQkgUlJSUl9NU0coZWMpLCBUVF9NU0coZWMpLCBMTF9NU0coZWMpKTsKLQl9IGVsc2UgaWYgKEJVU19FUlJPUihlYykpIHsKLQkJcHJfZW1lcmcoSFdfRVJSICJUcmFuc2FjdGlvbjogJXMgKCVzKSwgJXMsIENhY2hlIExldmVsOiAlcywgIgotCQkJICJQYXJ0aWNpcGF0aW5nIFByb2Nlc3NvcjogJXNcbiIsCi0JCQkgIFJSUlJfTVNHKGVjKSwgSUlfTVNHKGVjKSwgVE9fTVNHKGVjKSwgTExfTVNHKGVjKSwKLQkJCSAgUFBfTVNHKGVjKSk7Ci0JfSBlbHNlCi0JCXByX2VtZXJnKEhXX0VSUiAiSHVoPyBVbmtub3duIE1DRSBlcnJvciAweCV4XG4iLCBlYyk7CisKKwlwcl9lbWVyZyhIV19FUlIgImNhY2hlIGxldmVsOiAlcyIsIExMX01TRyhlYykpOworCisJaWYgKEJVU19FUlJPUihlYykpCisJCXByX2NvbnQoIiwgbWVtL2lvOiAlcyIsIElJX01TRyhlYykpOworCWVsc2UKKwkJcHJfY29udCgiLCB0eDogJXMiLCBUVF9NU0coZWMpKTsKKworCWlmIChNRU1fRVJST1IoZWMpIHx8IEJVU19FUlJPUihlYykpIHsKKwkJcHJfY29udCgiLCBtZW0tdHg6ICVzIiwgUjRfTVNHKGVjKSk7CisKKwkJaWYgKEJVU19FUlJPUihlYykpCisJCQlwcl9jb250KCIsIHBhcnQtcHJvYzogJXMgKCVzKSIsIFBQX01TRyhlYyksIFRPX01TRyhlYykpOworCX0KKworCXByX2NvbnQoIlxuIik7CiB9CiAKIC8qCkBAIC01NDYsMjUgKzc2MywzMiBAQAogaW50IGFtZF9kZWNvZGVfbWNlKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBtY2UgKm0gPSAoc3RydWN0IG1jZSAqKWRhdGE7CisJc3RydWN0IGNwdWluZm9feDg2ICpjID0gJmJvb3RfY3B1X2RhdGE7CiAJaW50IG5vZGUsIGVjYzsKIAogCWlmIChhbWRfZmlsdGVyX21jZShtKSkKIAkJcmV0dXJuIE5PVElGWV9TVE9QOwogCi0JcHJfZW1lcmcoSFdfRVJSICJNQyVkX1NUQVRVUzogIiwgbS0+YmFuayk7CisJcHJfZW1lcmcoSFdfRVJSICJNQyVkX1NUQVRVU1slc3wlc3wlc3wlc3wlcyIsCisJCW0tPmJhbmssCisJCSgobS0+c3RhdHVzICYgTUNJX1NUQVRVU19PVkVSKQk/ICJPdmVyIiAgOiAiLSIpLAorCQkoKG0tPnN0YXR1cyAmIE1DSV9TVEFUVVNfVUMpCT8gIlVFIgkgIDogIkNFIiksCisJCSgobS0+c3RhdHVzICYgTUNJX1NUQVRVU19NSVNDVikJPyAiTWlzY1YiIDogIi0iKSwKKwkJKChtLT5zdGF0dXMgJiBNQ0lfU1RBVFVTX1BDQykJPyAiUENDIgkgIDogIi0iKSwKKwkJKChtLT5zdGF0dXMgJiBNQ0lfU1RBVFVTX0FERFJWKQk/ICJBZGRyViIgOiAiLSIpKTsKIAotCXByX2NvbnQoIiVzb3JyZWN0ZWQgZXJyb3IsIG90aGVyIGVycm9ycyBsb3N0OiAlcywgIgotCQkgIkNQVSBjb250ZXh0IGNvcnJ1cHQ6ICVzIiwKLQkJICgobS0+c3RhdHVzICYgTUNJX1NUQVRVU19VQykgPyAiVW5jIiAgOiAiQyIpLAotCQkgKChtLT5zdGF0dXMgJiBNQ0lfU1RBVFVTX09WRVIpID8gInllcyIgIDogIm5vIiksCi0JCSAoKG0tPnN0YXR1cyAmIE1DSV9TVEFUVVNfUENDKSA/ICJ5ZXMiIDogIm5vIikpOworCWlmIChjLT54ODYgPT0gMHgxNSkKKwkJcHJfY29udCgifCVzfCVzIiwKKwkJCSgobS0+c3RhdHVzICYgQklUXzY0KDQ0KSkgPyAiRGVmZXJyZWQiIDogIi0iKSwKKwkJCSgobS0+c3RhdHVzICYgQklUXzY0KDQzKSkgPyAiUG9pc29uIiAgIDogIi0iKSk7CiAKIAkvKiBkbyB0aGUgdHdvIGJpdHNbMTQ6MTNdIHRvZ2V0aGVyICovCiAJZWNjID0gKG0tPnN0YXR1cyA+PiA0NSkgJiAweDM7CiAJaWYgKGVjYykKLQkJcHJfY29udCgiLCAlc0VDQyBFcnJvciIsICgoZWNjID09IDIpID8gIkMiIDogIlUiKSk7CisJCXByX2NvbnQoInwlc0VDQyIsICgoZWNjID09IDIpID8gIkMiIDogIlUiKSk7CiAKLQlwcl9jb250KCJcbiIpOworCXByX2NvbnQoIl06IDB4JTAxNmxseFxuIiwgbS0+c3RhdHVzKTsKKwogCiAJc3dpdGNoIChtLT5iYW5rKSB7CiAJY2FzZSAwOgpAQCAtNTc2LDcgKzgwMCwxMCBAQAogCQlicmVhazsKIAogCWNhc2UgMjoKLQkJYW1kX2RlY29kZV9idV9tY2UobSk7CisJCWlmIChjLT54ODYgPT0gMHgxNSkKKwkJCWFtZF9kZWNvZGVfY3VfbWNlKG0pOworCQllbHNlCisJCQlhbWRfZGVjb2RlX2J1X21jZShtKTsKIAkJYnJlYWs7CiAKIAljYXNlIDM6CkBAIC01OTIsNiArODE5LDEwIEBACiAJCWFtZF9kZWNvZGVfZnJfbWNlKG0pOwogCQlicmVhazsKIAorCWNhc2UgNjoKKwkJYW1kX2RlY29kZV9mcF9tY2UobSk7CisJCWJyZWFrOworCiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQpAQCAtNjA4LDE4ICs4MzksMjEgQEAKIAogc3RhdGljIGludCBfX2luaXQgbWNlX2FtZF9pbml0KHZvaWQpCiB7Ci0JaWYgKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciAhPSBYODZfVkVORE9SX0FNRCkKKwlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSAmYm9vdF9jcHVfZGF0YTsKKworCWlmIChjLT54ODZfdmVuZG9yICE9IFg4Nl9WRU5ET1JfQU1EKQogCQlyZXR1cm4gMDsKIAotCWlmICgoYm9vdF9jcHVfZGF0YS54ODYgPCAweGYgfHwgYm9vdF9jcHVfZGF0YS54ODYgPiAweDEyKSAmJgotCSAgICAoYm9vdF9jcHVfZGF0YS54ODYgIT0gMHgxNCB8fCBib290X2NwdV9kYXRhLng4Nl9tb2RlbCA+IDB4ZikpCisJaWYgKChjLT54ODYgPCAweGYgfHwgYy0+eDg2ID4gMHgxMikgJiYKKwkgICAgKGMtPng4NiAhPSAweDE0IHx8IGMtPng4Nl9tb2RlbCA+IDB4ZikgJiYKKwkgICAgKGMtPng4NiAhPSAweDE1IHx8IGMtPng4Nl9tb2RlbCA+IDB4ZikpCiAJCXJldHVybiAwOwogCiAJZmFtX29wcyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhbWRfZGVjb2Rlcl9vcHMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWZhbV9vcHMpCiAJCXJldHVybiAtRU5PTUVNOwogCi0Jc3dpdGNoIChib290X2NwdV9kYXRhLng4NikgeworCXN3aXRjaCAoYy0+eDg2KSB7CiAJY2FzZSAweGY6CiAJCWZhbV9vcHMtPmRjX21jZSA9IGs4X2RjX21jZTsKIAkJZmFtX29wcy0+aWNfbWNlID0gazhfaWNfbWNlOwpAQCAtNjUxLDkgKzg4NSwxNSBAQAogCQlmYW1fb3BzLT5uYl9tY2UgPSBuYl9ub29wX21jZTsKIAkJYnJlYWs7CiAKKwljYXNlIDB4MTU6CisJCXhlY19tYXNrID0gMHgxZjsKKwkJZmFtX29wcy0+ZGNfbWNlID0gZjE1aF9kY19tY2U7CisJCWZhbV9vcHMtPmljX21jZSA9IGYxNWhfaWNfbWNlOworCQlmYW1fb3BzLT5uYl9tY2UgPSBmMTBoX25iX21jZTsKKwkJYnJlYWs7CisKIAlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9XQVJOSU5HICJIdWg/IFdoYXQgZmFtaWx5IGlzIHRoYXQ6ICVkPyFcbiIsCi0JCQkJICAgIGJvb3RfY3B1X2RhdGEueDg2KTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiSHVoPyBXaGF0IGZhbWlseSBpcyB0aGF0OiAlZD8hXG4iLCBjLT54ODYpOwogCQlrZnJlZShmYW1fb3BzKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL21jZV9hbWQuaCBiL2RyaXZlcnMvZWRhYy9tY2VfYW1kLmgKaW5kZXggMzVmNmUwZS4uNDVkZGE0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL21jZV9hbWQuaAorKysgYi9kcml2ZXJzL2VkYWMvbWNlX2FtZC5oCkBAIC03LDggKzcsOCBAQAogCiAjZGVmaW5lIEJJVF82NChuKQkJCShVNjRfQygxKSA8PCAobikpCiAKLSNkZWZpbmUgRVJST1JfQ09ERSh4KQkJCSgoeCkgJiAweGZmZmYpCi0jZGVmaW5lIEVYVF9FUlJPUl9DT0RFKHgpCQkoKCh4KSA+PiAxNikgJiAweDFmKQorI2RlZmluZSBFQyh4KQkJCQkoKHgpICYgMHhmZmZmKQorI2RlZmluZSBYRUMoeCwgbWFzaykJCQkoKCh4KSA+PiAxNikgJiBtYXNrKQogCiAjZGVmaW5lIExPV19TWU5EUk9NRSh4KQkJCSgoKHgpID4+IDE1KSAmIDB4ZmYpCiAjZGVmaW5lIEhJR0hfU1lORFJPTUUoeCkJCSgoKHgpID4+IDI0KSAmIDB4ZmYpCkBAIC0yMSwxNSArMjEsMTUgQEAKICNkZWZpbmUgVFRfTVNHKHgpCQkJdHRfbXNnc1tUVCh4KV0KICNkZWZpbmUgSUkoeCkJCQkJKCgoeCkgPj4gMikgJiAweDMpCiAjZGVmaW5lIElJX01TRyh4KQkJCWlpX21zZ3NbSUkoeCldCi0jZGVmaW5lIExMKHgpCQkJCSgoKHgpID4+IDApICYgMHgzKQorI2RlZmluZSBMTCh4KQkJCQkoKHgpICYgMHgzKQogI2RlZmluZSBMTF9NU0coeCkJCQlsbF9tc2dzW0xMKHgpXQogI2RlZmluZSBUTyh4KQkJCQkoKCh4KSA+PiA4KSAmIDB4MSkKICNkZWZpbmUgVE9fTVNHKHgpCQkJdG9fbXNnc1tUTyh4KV0KICNkZWZpbmUgUFAoeCkJCQkJKCgoeCkgPj4gOSkgJiAweDMpCiAjZGVmaW5lIFBQX01TRyh4KQkJCXBwX21zZ3NbUFAoeCldCiAKLSNkZWZpbmUgUlJSUih4KQkJCQkoKCh4KSA+PiA0KSAmIDB4ZikKLSNkZWZpbmUgUlJSUl9NU0coeCkJCQkoKFJSUlIoeCkgPCA5KSA/ICBycnJyX21zZ3NbUlJSUih4KV0gOiAiV3JvbmcgUjQhIikKKyNkZWZpbmUgUjQoeCkJCQkJKCgoeCkgPj4gNCkgJiAweGYpCisjZGVmaW5lIFI0X01TRyh4KQkJCSgoUjQoeCkgPCA5KSA/ICBycnJyX21zZ3NbUjQoeCldIDogIldyb25nIFI0ISIpCiAKICNkZWZpbmUgSzhfTkJTSAkJCQkweDRDCiAKQEAgLTEwMCw4ICsxMDAsOCBAQAogICogcGVyLWZhbWlseSBkZWNvZGVyIG9wcwogICovCiBzdHJ1Y3QgYW1kX2RlY29kZXJfb3BzIHsKLQlib29sICgqZGNfbWNlKSh1MTYpOwotCWJvb2wgKCppY19tY2UpKHUxNik7CisJYm9vbCAoKmRjX21jZSkodTE2LCB1OCk7CisJYm9vbCAoKmljX21jZSkodTE2LCB1OCk7CiAJYm9vbCAoKm5iX21jZSkodTE2LCB1OCk7CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvbWNlX2FtZF9pbmouYyBiL2RyaXZlcnMvZWRhYy9tY2VfYW1kX2luai5jCmluZGV4IDM5ZmFkZWQuLjczM2E3ZTdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvbWNlX2FtZF9pbmouYworKysgYi9kcml2ZXJzL2VkYWMvbWNlX2FtZF9pbmouYwpAQCAtODgsMTAgKzg4LDExIEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmICh2YWx1ZSA+IDUpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJOb24tZXhpc3RhbnQgTUNFIGJhbms6ICVsdVxuIiwgdmFsdWUpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9CisJaWYgKHZhbHVlID4gNSkKKwkJaWYgKGJvb3RfY3B1X2RhdGEueDg2ICE9IDB4MTUgfHwgdmFsdWUgPiA2KSB7CisJCQlwcmludGsoS0VSTl9FUlIgIk5vbi1leGlzdGFudCBNQ0UgYmFuazogJWx1XG4iLCB2YWx1ZSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQogCiAJaV9tY2UuYmFuayA9IHZhbHVlOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL0tjb25maWcgYi9kcml2ZXJzL2ZpcmV3aXJlL0tjb25maWcKaW5kZXggNDBhMjIyZS4uNjhmOTQyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJld2lyZS9LY29uZmlnCisrKyBiL2RyaXZlcnMvZmlyZXdpcmUvS2NvbmZpZwpAQCAtMTksNyArMTksNyBAQAogCiBjb25maWcgRklSRVdJUkVfT0hDSQogCXRyaXN0YXRlICJPSENJLTEzOTQgY29udHJvbGxlcnMiCi0JZGVwZW5kcyBvbiBQQ0kgJiYgRklSRVdJUkUKKwlkZXBlbmRzIG9uIFBDSSAmJiBGSVJFV0lSRSAmJiBNTVUKIAloZWxwCiAJICBFbmFibGUgdGhpcyBkcml2ZXIgaWYgeW91IGhhdmUgYSBGaXJlV2lyZSBjb250cm9sbGVyIGJhc2VkCiAJICBvbiB0aGUgT0hDSSBzcGVjaWZpY2F0aW9uLiAgRm9yIGFsbCBwcmFjdGljYWwgcHVycG9zZXMsIHRoaXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlyZXdpcmUvY29yZS1jZGV2LmMgYi9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtY2Rldi5jCmluZGV4IDE0YmI3YjcuLjQ4YWU3MTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlyZXdpcmUvY29yZS1jZGV2LmMKKysrIGIvZHJpdmVycy9maXJld2lyZS9jb3JlLWNkZXYuYwpAQCAtMTUwMSw5ICsxNTAxLDEwIEBACiAJZS0+Y2xpZW50CQk9IGNsaWVudDsKIAllLT5wLnNwZWVkCQk9IFNDT0RFXzEwMDsKIAllLT5wLmdlbmVyYXRpb24JCT0gYS0+Z2VuZXJhdGlvbjsKLQllLT5wLmhlYWRlclswXQkJPSBhLT5kYXRhWzBdOwotCWUtPnAuaGVhZGVyWzFdCQk9IGEtPmRhdGFbMV07Ci0JZS0+cC5oZWFkZXJfbGVuZ3RoCT0gODsKKwllLT5wLmhlYWRlclswXQkJPSBUQ09ERV9MSU5LX0lOVEVSTkFMIDw8IDQ7CisJZS0+cC5oZWFkZXJbMV0JCT0gYS0+ZGF0YVswXTsKKwllLT5wLmhlYWRlclsyXQkJPSBhLT5kYXRhWzFdOworCWUtPnAuaGVhZGVyX2xlbmd0aAk9IDEyOwogCWUtPnAuY2FsbGJhY2sJCT0gb3V0Ym91bmRfcGh5X3BhY2tldF9jYWxsYmFjazsKIAllLT5waHlfcGFja2V0LmNsb3N1cmUJPSBhLT5jbG9zdXJlOwogCWUtPnBoeV9wYWNrZXQudHlwZQk9IEZXX0NERVZfRVZFTlRfUEhZX1BBQ0tFVF9TRU5UOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJld2lyZS9jb3JlLXRyYW5zYWN0aW9uLmMgYi9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtdHJhbnNhY3Rpb24uYwppbmRleCBiNDJhMGJkLi5kMDBmOGNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtdHJhbnNhY3Rpb24uYworKysgYi9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtdHJhbnNhY3Rpb24uYwpAQCAtNzIsNiArNzIsMTUgQEAKICNkZWZpbmUgUEhZX0NPTkZJR19ST09UX0lEKG5vZGVfaWQpCSgoKChub2RlX2lkKSAmIDB4M2YpIDw8IDI0KSB8ICgxIDw8IDIzKSkKICNkZWZpbmUgUEhZX0lERU5USUZJRVIoaWQpCQkoKGlkKSA8PCAzMCkKIAorLyogcmV0dXJucyAwIGlmIHRoZSBzcGxpdCB0aW1lb3V0IGhhbmRsZXIgaXMgYWxyZWFkeSBydW5uaW5nICovCitzdGF0aWMgaW50IHRyeV9jYW5jZWxfc3BsaXRfdGltZW91dChzdHJ1Y3QgZndfdHJhbnNhY3Rpb24gKnQpCit7CisJaWYgKHQtPmlzX3NwbGl0X3RyYW5zYWN0aW9uKQorCQlyZXR1cm4gZGVsX3RpbWVyKCZ0LT5zcGxpdF90aW1lb3V0X3RpbWVyKTsKKwllbHNlCisJCXJldHVybiAxOworfQorCiBzdGF0aWMgaW50IGNsb3NlX3RyYW5zYWN0aW9uKHN0cnVjdCBmd190cmFuc2FjdGlvbiAqdHJhbnNhY3Rpb24sCiAJCQkgICAgIHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgcmNvZGUpCiB7CkBAIC04MSw3ICs5MCw3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHQsICZjYXJkLT50cmFuc2FjdGlvbl9saXN0LCBsaW5rKSB7CiAJCWlmICh0ID09IHRyYW5zYWN0aW9uKSB7Ci0JCQlpZiAoIWRlbF90aW1lcigmdC0+c3BsaXRfdGltZW91dF90aW1lcikpIHsKKwkJCWlmICghdHJ5X2NhbmNlbF9zcGxpdF90aW1lb3V0KHQpKSB7CiAJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+bG9jaywgZmxhZ3MpOwogCQkJCWdvdG8gdGltZWRfb3V0OwogCQkJfQpAQCAtMTQxLDE2ICsxNTAsMjggQEAKIAljYXJkLT50bGFiZWxfbWFzayAmPSB+KDFVTEwgPDwgdC0+dGxhYmVsKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLCBmbGFncyk7CiAKLQljYXJkLT5kcml2ZXItPmNhbmNlbF9wYWNrZXQoY2FyZCwgJnQtPnBhY2tldCk7Ci0KLQkvKgotCSAqIEF0IHRoaXMgcG9pbnQgY2FuY2VsX3BhY2tldCB3aWxsIG5ldmVyIGNhbGwgdGhlIHRyYW5zYWN0aW9uCi0JICogY2FsbGJhY2ssIHNpbmNlIHdlIGp1c3QgdG9vayB0aGUgdHJhbnNhY3Rpb24gb3V0IG9mIHRoZSBsaXN0LgotCSAqIFNvIGRvIGl0IGhlcmUuCi0JICovCiAJdC0+Y2FsbGJhY2soY2FyZCwgUkNPREVfQ0FOQ0VMTEVELCBOVUxMLCAwLCB0LT5jYWxsYmFja19kYXRhKTsKIH0KIAorc3RhdGljIHZvaWQgc3RhcnRfc3BsaXRfdHJhbnNhY3Rpb25fdGltZW91dChzdHJ1Y3QgZndfdHJhbnNhY3Rpb24gKnQsCisJCQkJCSAgICBzdHJ1Y3QgZndfY2FyZCAqY2FyZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKKworCWlmIChsaXN0X2VtcHR5KCZ0LT5saW5rKSB8fCBXQVJOX09OKHQtPmlzX3NwbGl0X3RyYW5zYWN0aW9uKSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLCBmbGFncyk7CisJCXJldHVybjsKKwl9CisKKwl0LT5pc19zcGxpdF90cmFuc2FjdGlvbiA9IHRydWU7CisJbW9kX3RpbWVyKCZ0LT5zcGxpdF90aW1lb3V0X3RpbWVyLAorCQkgIGppZmZpZXMgKyBjYXJkLT5zcGxpdF90aW1lb3V0X2ppZmZpZXMpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+bG9jaywgZmxhZ3MpOworfQorCiBzdGF0aWMgdm9pZCB0cmFuc21pdF9jb21wbGV0ZV9jYWxsYmFjayhzdHJ1Y3QgZndfcGFja2V0ICpwYWNrZXQsCiAJCQkJICAgICAgIHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgc3RhdHVzKQogewpAQCAtMTYyLDcgKzE4Myw3IEBACiAJCWNsb3NlX3RyYW5zYWN0aW9uKHQsIGNhcmQsIFJDT0RFX0NPTVBMRVRFKTsKIAkJYnJlYWs7CiAJY2FzZSBBQ0tfUEVORElORzoKLQkJdC0+dGltZXN0YW1wID0gcGFja2V0LT50aW1lc3RhbXA7CisJCXN0YXJ0X3NwbGl0X3RyYW5zYWN0aW9uX3RpbWVvdXQodCwgY2FyZCk7CiAJCWJyZWFrOwogCWNhc2UgQUNLX0JVU1lfWDoKIAljYXNlIEFDS19CVVNZX0E6CkBAIC0yNTAsNyArMjcxLDcgQEAKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQlXQVJOKDEsICJ3cm9uZyB0Y29kZSAlZCIsIHRjb2RlKTsKKwkJV0FSTigxLCAid3JvbmcgdGNvZGUgJWRcbiIsIHRjb2RlKTsKIAl9CiAgY29tbW9uOgogCXBhY2tldC0+c3BlZWQgPSBzcGVlZDsKQEAgLTM0OSwxMSArMzcwLDkgQEAKIAl0LT5ub2RlX2lkID0gZGVzdGluYXRpb25faWQ7CiAJdC0+dGxhYmVsID0gdGxhYmVsOwogCXQtPmNhcmQgPSBjYXJkOworCXQtPmlzX3NwbGl0X3RyYW5zYWN0aW9uID0gZmFsc2U7CiAJc2V0dXBfdGltZXIoJnQtPnNwbGl0X3RpbWVvdXRfdGltZXIsCiAJCSAgICBzcGxpdF90cmFuc2FjdGlvbl90aW1lb3V0X2NhbGxiYWNrLCAodW5zaWduZWQgbG9uZyl0KTsKLQkvKiBGSVhNRTogc3RhcnQgdGhpcyB0aW1lciBsYXRlciwgcmVsYXRpdmUgdG8gdC0+dGltZXN0YW1wICovCi0JbW9kX3RpbWVyKCZ0LT5zcGxpdF90aW1lb3V0X3RpbWVyLAotCQkgIGppZmZpZXMgKyBjYXJkLT5zcGxpdF90aW1lb3V0X2ppZmZpZXMpOwogCXQtPmNhbGxiYWNrID0gY2FsbGJhY2s7CiAJdC0+Y2FsbGJhY2tfZGF0YSA9IGNhbGxiYWNrX2RhdGE7CiAKQEAgLTQyMyw3ICs0NDIsOCBAQAogfQogCiBzdGF0aWMgc3RydWN0IGZ3X3BhY2tldCBwaHlfY29uZmlnX3BhY2tldCA9IHsKLQkuaGVhZGVyX2xlbmd0aAk9IDgsCisJLmhlYWRlcl9sZW5ndGgJPSAxMiwKKwkuaGVhZGVyWzBdCT0gVENPREVfTElOS19JTlRFUk5BTCA8PCA0LAogCS5wYXlsb2FkX2xlbmd0aAk9IDAsCiAJLnNwZWVkCQk9IFNDT0RFXzEwMCwKIAkuY2FsbGJhY2sJPSB0cmFuc21pdF9waHlfcGFja2V0X2NhbGxiYWNrLApAQCAtNDUxLDggKzQ3MSw4IEBACiAKIAltdXRleF9sb2NrKCZwaHlfY29uZmlnX211dGV4KTsKIAotCXBoeV9jb25maWdfcGFja2V0LmhlYWRlclswXSA9IGRhdGE7Ci0JcGh5X2NvbmZpZ19wYWNrZXQuaGVhZGVyWzFdID0gfmRhdGE7CisJcGh5X2NvbmZpZ19wYWNrZXQuaGVhZGVyWzFdID0gZGF0YTsKKwlwaHlfY29uZmlnX3BhY2tldC5oZWFkZXJbMl0gPSB+ZGF0YTsKIAlwaHlfY29uZmlnX3BhY2tldC5nZW5lcmF0aW9uID0gZ2VuZXJhdGlvbjsKIAlJTklUX0NPTVBMRVRJT04ocGh5X2NvbmZpZ19kb25lKTsKIApAQCAtNjM4LDcgKzY1OCw3IEBACiAJCX0KIAogCWRlZmF1bHQ6Ci0JCVdBUk4oMSwgIndyb25nIHRjb2RlICVkIiwgdGNvZGUpOworCQlXQVJOKDEsICJ3cm9uZyB0Y29kZSAlZFxuIiwgdGNvZGUpOwogCQlyZXR1cm4gMDsKIAl9CiB9CkBAIC02OTQsNyArNzE0LDcgQEAKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQlXQVJOKDEsICJ3cm9uZyB0Y29kZSAlZCIsIHRjb2RlKTsKKwkJV0FSTigxLCAid3JvbmcgdGNvZGUgJWRcbiIsIHRjb2RlKTsKIAl9CiAKIAlyZXNwb25zZS0+cGF5bG9hZF9tYXBwZWQgPSBmYWxzZTsKQEAgLTkyNSw3ICs5NDUsNyBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5sb2NrLCBmbGFncyk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeSh0LCAmY2FyZC0+dHJhbnNhY3Rpb25fbGlzdCwgbGluaykgewogCQlpZiAodC0+bm9kZV9pZCA9PSBzb3VyY2UgJiYgdC0+dGxhYmVsID09IHRsYWJlbCkgewotCQkJaWYgKCFkZWxfdGltZXIoJnQtPnNwbGl0X3RpbWVvdXRfdGltZXIpKSB7CisJCQlpZiAoIXRyeV9jYW5jZWxfc3BsaXRfdGltZW91dCh0KSkgewogCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKIAkJCQlnb3RvIHRpbWVkX291dDsKIAkJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlyZXdpcmUvY29yZS5oIGIvZHJpdmVycy9maXJld2lyZS9jb3JlLmgKaW5kZXggZTYyMzlmOS4uZjhkZmNmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJld2lyZS9jb3JlLmgKKysrIGIvZHJpdmVycy9maXJld2lyZS9jb3JlLmgKQEAgLTIxNSw5ICsyMTUsMTEgQEAKIAogLyogLXRyYW5zYWN0aW9uICovCiAKKyNkZWZpbmUgVENPREVfTElOS19JTlRFUk5BTAkJMHhlCisKICNkZWZpbmUgVENPREVfSVNfUkVBRF9SRVFVRVNUKHRjb2RlKQkoKCh0Y29kZSkgJiB+MSkgPT0gNCkKICNkZWZpbmUgVENPREVfSVNfQkxPQ0tfUEFDS0VUKHRjb2RlKQkoKCh0Y29kZSkgJiAgMSkgIT0gMCkKLSNkZWZpbmUgVENPREVfSVNfTElOS19JTlRFUk5BTCh0Y29kZSkJKCh0Y29kZSkgPT0gMHhlKQorI2RlZmluZSBUQ09ERV9JU19MSU5LX0lOVEVSTkFMKHRjb2RlKQkoKHRjb2RlKSA9PSBUQ09ERV9MSU5LX0lOVEVSTkFMKQogI2RlZmluZSBUQ09ERV9JU19SRVFVRVNUKHRjb2RlKQkJKCgodGNvZGUpICYgIDIpID09IDApCiAjZGVmaW5lIFRDT0RFX0lTX1JFU1BPTlNFKHRjb2RlKQkoKCh0Y29kZSkgJiAgMikgIT0gMCkKICNkZWZpbmUgVENPREVfSEFTX1JFUVVFU1RfREFUQSh0Y29kZSkJKCgodGNvZGUpICYgMTIpICE9IDQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL25ldC5jIGIvZHJpdmVycy9maXJld2lyZS9uZXQuYwppbmRleCAxYTQ2N2E5Li5jMmUxOTRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2ZpcmV3aXJlL25ldC5jCisrKyBiL2RyaXZlcnMvZmlyZXdpcmUvbmV0LmMKQEAgLTksNiArOSw3IEBACiAjaW5jbHVkZSA8bGludXgvYnVnLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CiAjaW5jbHVkZSA8bGludXgvZmlyZXdpcmUuaD4KICNpbmNsdWRlIDxsaW51eC9maXJld2lyZS1jb25zdGFudHMuaD4KICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CkBAIC0xNzksNiArMTgwLDcgQEAKIAkvKiBOdW1iZXIgb2YgdHggZGF0YWdyYW1zIHRoYXQgaGF2ZSBiZWVuIHF1ZXVlZCBidXQgbm90IHlldCBhY2tlZCAqLwogCWludCBxdWV1ZWRfZGF0YWdyYW1zOwogCisJaW50IHBlZXJfY291bnQ7CiAJc3RydWN0IGxpc3RfaGVhZCBwZWVyX2xpc3Q7CiAJc3RydWN0IGZ3X2NhcmQgKmNhcmQ7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKQEAgLTk5NiwxNSArOTk4LDIzIEBACiBzdGF0aWMgdm9pZCBmd25ldF93cml0ZV9jb21wbGV0ZShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgaW50IHJjb2RlLAogCQkJCSB2b2lkICpwYXlsb2FkLCBzaXplX3QgbGVuZ3RoLCB2b2lkICpkYXRhKQogewotCXN0cnVjdCBmd25ldF9wYWNrZXRfdGFzayAqcHRhc2s7Ci0KLQlwdGFzayA9IGRhdGE7CisJc3RydWN0IGZ3bmV0X3BhY2tldF90YXNrICpwdGFzayA9IGRhdGE7CisJc3RhdGljIHVuc2lnbmVkIGxvbmcgajsKKwlzdGF0aWMgaW50IGxhc3RfcmNvZGUsIGVycm9yc19za2lwcGVkOwogCiAJaWYgKHJjb2RlID09IFJDT0RFX0NPTVBMRVRFKSB7CiAJCWZ3bmV0X3RyYW5zbWl0X3BhY2tldF9kb25lKHB0YXNrKTsKIAl9IGVsc2UgewotCQlmd19lcnJvcigiZnduZXRfd3JpdGVfY29tcGxldGU6IGZhaWxlZDogJXhcbiIsIHJjb2RlKTsKIAkJZnduZXRfdHJhbnNtaXRfcGFja2V0X2ZhaWxlZChwdGFzayk7CisKKwkJaWYgKHByaW50a190aW1lZF9yYXRlbGltaXQoJmosICAxMDAwKSB8fCByY29kZSAhPSBsYXN0X3Jjb2RlKSB7CisJCQlmd19lcnJvcigiZnduZXRfd3JpdGVfY29tcGxldGU6ICIKKwkJCQkiZmFpbGVkOiAleCAoc2tpcHBlZCAlZClcbiIsIHJjb2RlLCBlcnJvcnNfc2tpcHBlZCk7CisKKwkJCWVycm9yc19za2lwcGVkID0gMDsKKwkJCWxhc3RfcmNvZGUgPSByY29kZTsKKwkJfSBlbHNlCisJCQllcnJvcnNfc2tpcHBlZCsrOwogCX0KIH0KIApAQCAtMTIxMyw2ICsxMjIzLDE0IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAorc3RhdGljIHZvaWQgc2V0X2NhcnJpZXJfc3RhdGUoc3RydWN0IGZ3bmV0X2RldmljZSAqZGV2KQoreworCWlmIChkZXYtPnBlZXJfY291bnQgPiAxKQorCQluZXRpZl9jYXJyaWVyX29uKGRldi0+bmV0ZGV2KTsKKwllbHNlCisJCW5ldGlmX2NhcnJpZXJfb2ZmKGRldi0+bmV0ZGV2KTsKK30KKwogLyogaWZ1cCAqLwogc3RhdGljIGludCBmd25ldF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCiB7CkBAIC0xMjI2LDYgKzEyNDQsMTAgQEAKIAl9CiAJbmV0aWZfc3RhcnRfcXVldWUobmV0KTsKIAorCXNwaW5fbG9ja19pcnEoJmRldi0+bG9jayk7CisJc2V0X2NhcnJpZXJfc3RhdGUoZGV2KTsKKwlzcGluX3VubG9ja19pcnEoJmRldi0+bG9jayk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTM5Nyw2ICsxNDE5LDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZnduZXRfZXRodG9vbF9vcHMgPSB7CisJLmdldF9saW5rCT0gZXRodG9vbF9vcF9nZXRfbGluaywKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZnduZXRfbmV0ZGV2X29wcyA9IHsKIAkubmRvX29wZW4gICAgICAgPSBmd25ldF9vcGVuLAogCS5uZG9fc3RvcAk9IGZ3bmV0X3N0b3AsCkBAIC0xNDE1LDYgKzE0NDEsNyBAQAogCW5ldC0+aGFyZF9oZWFkZXJfbGVuCT0gRldORVRfSExFTjsKIAluZXQtPnR5cGUJCT0gQVJQSFJEX0lFRUUxMzk0OwogCW5ldC0+dHhfcXVldWVfbGVuCT0gRldORVRfVFhfUVVFVUVfTEVOOworCW5ldC0+ZXRodG9vbF9vcHMJPSAmZnduZXRfZXRodG9vbF9vcHM7CiB9CiAKIC8qIGNhbGxlciBtdXN0IGhvbGQgZnduZXRfZGV2aWNlX211dGV4ICovCkBAIC0xNDU1LDYgKzE0ODIsOCBAQAogCiAJc3Bpbl9sb2NrX2lycSgmZGV2LT5sb2NrKTsKIAlsaXN0X2FkZF90YWlsKCZwZWVyLT5wZWVyX2xpbmssICZkZXYtPnBlZXJfbGlzdCk7CisJZGV2LT5wZWVyX2NvdW50Kys7CisJc2V0X2NhcnJpZXJfc3RhdGUoZGV2KTsKIAlzcGluX3VubG9ja19pcnEoJmRldi0+bG9jayk7CiAKIAlyZXR1cm4gMDsKQEAgLTE1MzUsMTMgKzE1NjQsMTUgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBmd25ldF9yZW1vdmVfcGVlcihzdHJ1Y3QgZnduZXRfcGVlciAqcGVlcikKK3N0YXRpYyB2b2lkIGZ3bmV0X3JlbW92ZV9wZWVyKHN0cnVjdCBmd25ldF9wZWVyICpwZWVyLCBzdHJ1Y3QgZnduZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGZ3bmV0X3BhcnRpYWxfZGF0YWdyYW0gKnBkLCAqcGRfbmV4dDsKIAotCXNwaW5fbG9ja19pcnEoJnBlZXItPmRldi0+bG9jayk7CisJc3Bpbl9sb2NrX2lycSgmZGV2LT5sb2NrKTsKIAlsaXN0X2RlbCgmcGVlci0+cGVlcl9saW5rKTsKLQlzcGluX3VubG9ja19pcnEoJnBlZXItPmRldi0+bG9jayk7CisJZGV2LT5wZWVyX2NvdW50LS07CisJc2V0X2NhcnJpZXJfc3RhdGUoZGV2KTsKKwlzcGluX3VubG9ja19pcnEoJmRldi0+bG9jayk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGQsIHBkX25leHQsICZwZWVyLT5wZF9saXN0LCBwZF9saW5rKQogCQlmd25ldF9wZF9kZWxldGUocGQpOwpAQCAtMTU1OCw3ICsxNTg5LDcgQEAKIAogCW11dGV4X2xvY2soJmZ3bmV0X2RldmljZV9tdXRleCk7CiAKLQlmd25ldF9yZW1vdmVfcGVlcihwZWVyKTsKKwlmd25ldF9yZW1vdmVfcGVlcihwZWVyLCBkZXYpOwogCiAJaWYgKGxpc3RfZW1wdHkoJmRldi0+cGVlcl9saXN0KSkgewogCQluZXQgPSBkZXYtPm5ldGRldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlyZXdpcmUvbm9zeS5jIGIvZHJpdmVycy9maXJld2lyZS9ub3N5LmMKaW5kZXggYmYxODRmYi4uMDYxODE0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJld2lyZS9ub3N5LmMKKysrIGIvZHJpdmVycy9maXJld2lyZS9ub3N5LmMKQEAgLTMwMiw3ICszMDIsNyBAQAogCiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gY2xpZW50OwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIG5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbGUpOwogZmFpbDoKIAlrZnJlZShjbGllbnQpOwogCWx5bnhfcHV0KGx5bngpOwpAQCAtNDA1LDcgKzQwNSw2IEBACiAJLnBvbGwgPQkJCW5vc3lfcG9sbCwKIAkub3BlbiA9CQkJbm9zeV9vcGVuLAogCS5yZWxlYXNlID0JCW5vc3lfcmVsZWFzZSwKLQkubGxzZWVrID0JCW5vb3BfbGxzZWVrLAogfTsKIAogI2RlZmluZSBQSFlfUEFDS0VUX1NJWkUgMTIgLyogMSBwYXlsb2FkLCAxIGludmVyc2UsIDEgYWNrID0gMyBxdWFkbGV0cyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJld2lyZS9vaGNpLmMgYi9kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYwppbmRleCBlM2M4YjYwLi5kNzdkMTIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYworKysgYi9kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYwpAQCAtMTgsNiArMTgsNyBAQAogICogSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KICAqLwogCisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvYnVnLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgpAQCAtNDAsNiArNDEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KIAogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgpAQCAtODAsMTcgKzgyLDIzIEBACiAjZGVmaW5lIENPTU1BTkRfUFRSKHJlZ3MpCSgocmVncykgKyAxMikKICNkZWZpbmUgQ09OVEVYVF9NQVRDSChyZWdzKQkoKHJlZ3MpICsgMTYpCiAKLXN0cnVjdCBhcl9idWZmZXIgewotCXN0cnVjdCBkZXNjcmlwdG9yIGRlc2NyaXB0b3I7Ci0Jc3RydWN0IGFyX2J1ZmZlciAqbmV4dDsKLQlfX2xlMzIgZGF0YVswXTsKLX07CisjZGVmaW5lIEFSX0JVRkZFUl9TSVpFCSgzMioxMDI0KQorI2RlZmluZSBBUl9CVUZGRVJTX01JTglESVZfUk9VTkRfVVAoQVJfQlVGRkVSX1NJWkUsIFBBR0VfU0laRSkKKy8qIHdlIG5lZWQgYXQgbGVhc3QgdHdvIHBhZ2VzIGZvciBwcm9wZXIgbGlzdCBtYW5hZ2VtZW50ICovCisjZGVmaW5lIEFSX0JVRkZFUlMJKEFSX0JVRkZFUlNfTUlOID49IDIgPyBBUl9CVUZGRVJTX01JTiA6IDIpCisKKyNkZWZpbmUgTUFYX0FTWU5DX1BBWUxPQUQJNDA5NgorI2RlZmluZSBNQVhfQVJfUEFDS0VUX1NJWkUJKDE2ICsgTUFYX0FTWU5DX1BBWUxPQUQgKyA0KQorI2RlZmluZSBBUl9XUkFQQVJPVU5EX1BBR0VTCURJVl9ST1VORF9VUChNQVhfQVJfUEFDS0VUX1NJWkUsIFBBR0VfU0laRSkKIAogc3RydWN0IGFyX2NvbnRleHQgewogCXN0cnVjdCBmd19vaGNpICpvaGNpOwotCXN0cnVjdCBhcl9idWZmZXIgKmN1cnJlbnRfYnVmZmVyOwotCXN0cnVjdCBhcl9idWZmZXIgKmxhc3RfYnVmZmVyOworCXN0cnVjdCBwYWdlICpwYWdlc1tBUl9CVUZGRVJTXTsKKwl2b2lkICpidWZmZXI7CisJc3RydWN0IGRlc2NyaXB0b3IgKmRlc2NyaXB0b3JzOworCWRtYV9hZGRyX3QgZGVzY3JpcHRvcnNfYnVzOwogCXZvaWQgKnBvaW50ZXI7CisJdW5zaWduZWQgaW50IGxhc3RfYnVmZmVyX2luZGV4OwogCXUzMiByZWdzOwogCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCB0YXNrbGV0OwogfTsKQEAgLTExNyw2ICsxMjUsOCBAQAogCXN0cnVjdCBmd19vaGNpICpvaGNpOwogCXUzMiByZWdzOwogCWludCB0b3RhbF9hbGxvY2F0aW9uOworCWJvb2wgcnVubmluZzsKKwlib29sIGZsdXNoaW5nOwogCiAJLyoKIAkgKiBMaXN0IG9mIHBhZ2Utc2l6ZWQgYnVmZmVycyBmb3Igc3RvcmluZyBETUEgZGVzY3JpcHRvcnMuCkBAIC0xNjEsNiArMTcxLDkgQEAKIAlpbnQgZXhjZXNzX2J5dGVzOwogCXZvaWQgKmhlYWRlcjsKIAlzaXplX3QgaGVhZGVyX2xlbmd0aDsKKworCXU4IHN5bmM7CisJdTggdGFnczsKIH07CiAKICNkZWZpbmUgQ09ORklHX1JPTV9TSVpFIDEwMjQKQEAgLTE3Nyw3ICsxOTAsOCBAQAogCXUzMiBidXNfdGltZTsKIAlib29sIGlzX3Jvb3Q7CiAJYm9vbCBjc3Jfc3RhdGVfc2V0Y2xlYXJfYWJkaWNhdGU7Ci0KKwlpbnQgbl9pcjsKKwlpbnQgbl9pdDsKIAkvKgogCSAqIFNwaW5sb2NrIGZvciBhY2Nlc3NpbmcgZndfb2hjaSBkYXRhLiAgTmV2ZXIgY2FsbCBvdXQgb2YKIAkgKiB0aGlzIGRyaXZlciB3aXRoIHRoaXMgbG9jayBoZWxkLgpAQCAtMTg2LDYgKzIwMCw5IEBACiAKIAlzdHJ1Y3QgbXV0ZXggcGh5X3JlZ19tdXRleDsKIAorCXZvaWQgKm1pc2NfYnVmZmVyOworCWRtYV9hZGRyX3QgbWlzY19idWZmZXJfYnVzOworCiAJc3RydWN0IGFyX2NvbnRleHQgYXJfcmVxdWVzdF9jdHg7CiAJc3RydWN0IGFyX2NvbnRleHQgYXJfcmVzcG9uc2VfY3R4OwogCXN0cnVjdCBjb250ZXh0IGF0X3JlcXVlc3RfY3R4OwpAQCAtNDExLDEwICs0MjgsNiBAQAogCVsweGNdID0gIi1yZXNlcnZlZC0iLAkJWzB4ZF0gPSAiLXJlc2VydmVkLSIsCiAJWzB4ZV0gPSAibGluayBpbnRlcm5hbCIsCVsweGZdID0gIi1yZXNlcnZlZC0iLAogfTsKLXN0YXRpYyBjb25zdCBjaGFyICpwaHlzW10gPSB7Ci0JWzB4MF0gPSAicGh5IGNvbmZpZyBwYWNrZXQiLAlbMHgxXSA9ICJsaW5rLW9uIHBhY2tldCIsCi0JWzB4Ml0gPSAic2VsZi1pZCBwYWNrZXQiLAlbMHgzXSA9ICItcmVzZXJ2ZWQtIiwKLX07CiAKIHN0YXRpYyB2b2lkIGxvZ19hcl9hdF9ldmVudChjaGFyIGRpciwgaW50IHNwZWVkLCB1MzIgKmhlYWRlciwgaW50IGV2dCkKIHsKQEAgLTQzMywxMiArNDQ2LDYgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmIChoZWFkZXJbMF0gPT0gfmhlYWRlclsxXSkgewotCQlmd19ub3RpZnkoIkElYyAlcywgJXMsICUwOHhcbiIsCi0JCSAgICBkaXIsIGV2dHNbZXZ0XSwgcGh5c1toZWFkZXJbMF0gPj4gMzAgJiAweDNdLCBoZWFkZXJbMF0pOwotCQlyZXR1cm47Ci0JfQotCiAJc3dpdGNoICh0Y29kZSkgewogCWNhc2UgMHgwOiBjYXNlIDB4NjogY2FzZSAweDg6CiAJCXNucHJpbnRmKHNwZWNpZmljLCBzaXplb2Yoc3BlY2lmaWMpLCAiID0gJTA4eCIsCkBAIC00NTMsOSArNDYwLDEzIEBACiAJfQogCiAJc3dpdGNoICh0Y29kZSkgewotCWNhc2UgMHhlOiBjYXNlIDB4YToKKwljYXNlIDB4YToKIAkJZndfbm90aWZ5KCJBJWMgJXMsICVzXG4iLCBkaXIsIGV2dHNbZXZ0XSwgdGNvZGVzW3Rjb2RlXSk7CiAJCWJyZWFrOworCWNhc2UgMHhlOgorCQlmd19ub3RpZnkoIkElYyAlcywgUEhZICUwOHggJTA4eFxuIiwKKwkJCSAgZGlyLCBldnRzW2V2dF0sIGhlYWRlclsxXSwgaGVhZGVyWzJdKTsKKwkJYnJlYWs7CiAJY2FzZSAweDA6IGNhc2UgMHgxOiBjYXNlIDB4NDogY2FzZSAweDU6IGNhc2UgMHg5OgogCQlmd19ub3RpZnkoIkElYyBzcGQgJXggdGwgJTAyeCwgIgogCQkgICAgIiUwNHggLT4gJTA0eCwgJXMsICIKQEAgLTU5NCw1OSArNjA1LDE1MCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIGFyX2NvbnRleHRfbGlua19wYWdlKHN0cnVjdCBhcl9jb250ZXh0ICpjdHgsCi0JCQkJIHN0cnVjdCBhcl9idWZmZXIgKmFiLCBkbWFfYWRkcl90IGFiX2J1cykKK3N0YXRpYyBpbmxpbmUgZG1hX2FkZHJfdCBhcl9idWZmZXJfYnVzKHN0cnVjdCBhcl9jb250ZXh0ICpjdHgsIHVuc2lnbmVkIGludCBpKQogewotCXNpemVfdCBvZmZzZXQ7CisJcmV0dXJuIHBhZ2VfcHJpdmF0ZShjdHgtPnBhZ2VzW2ldKTsKK30KIAotCWFiLT5uZXh0ID0gTlVMTDsKLQltZW1zZXQoJmFiLT5kZXNjcmlwdG9yLCAwLCBzaXplb2YoYWItPmRlc2NyaXB0b3IpKTsKLQlhYi0+ZGVzY3JpcHRvci5jb250cm9sICAgICAgICA9IGNwdV90b19sZTE2KERFU0NSSVBUT1JfSU5QVVRfTU9SRSB8Ci0JCQkJCQkgICAgREVTQ1JJUFRPUl9TVEFUVVMgfAotCQkJCQkJICAgIERFU0NSSVBUT1JfQlJBTkNIX0FMV0FZUyk7Ci0Jb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IGFyX2J1ZmZlciwgZGF0YSk7Ci0JYWItPmRlc2NyaXB0b3IucmVxX2NvdW50ICAgICAgPSBjcHVfdG9fbGUxNihQQUdFX1NJWkUgLSBvZmZzZXQpOwotCWFiLT5kZXNjcmlwdG9yLmRhdGFfYWRkcmVzcyAgID0gY3B1X3RvX2xlMzIoYWJfYnVzICsgb2Zmc2V0KTsKLQlhYi0+ZGVzY3JpcHRvci5yZXNfY291bnQgICAgICA9IGNwdV90b19sZTE2KFBBR0VfU0laRSAtIG9mZnNldCk7Ci0JYWItPmRlc2NyaXB0b3IuYnJhbmNoX2FkZHJlc3MgPSAwOworc3RhdGljIHZvaWQgYXJfY29udGV4dF9saW5rX3BhZ2Uoc3RydWN0IGFyX2NvbnRleHQgKmN0eCwgdW5zaWduZWQgaW50IGluZGV4KQoreworCXN0cnVjdCBkZXNjcmlwdG9yICpkOworCisJZCA9ICZjdHgtPmRlc2NyaXB0b3JzW2luZGV4XTsKKwlkLT5icmFuY2hfYWRkcmVzcyAgJj0gY3B1X3RvX2xlMzIofjB4Zik7CisJZC0+cmVzX2NvdW50ICAgICAgID0gIGNwdV90b19sZTE2KFBBR0VfU0laRSk7CisJZC0+dHJhbnNmZXJfc3RhdHVzID0gIDA7CiAKIAl3bWIoKTsgLyogZmluaXNoIGluaXQgb2YgbmV3IGRlc2NyaXB0b3JzIGJlZm9yZSBicmFuY2hfYWRkcmVzcyB1cGRhdGUgKi8KLQljdHgtPmxhc3RfYnVmZmVyLT5kZXNjcmlwdG9yLmJyYW5jaF9hZGRyZXNzID0gY3B1X3RvX2xlMzIoYWJfYnVzIHwgMSk7Ci0JY3R4LT5sYXN0X2J1ZmZlci0+bmV4dCA9IGFiOwotCWN0eC0+bGFzdF9idWZmZXIgPSBhYjsKKwlkID0gJmN0eC0+ZGVzY3JpcHRvcnNbY3R4LT5sYXN0X2J1ZmZlcl9pbmRleF07CisJZC0+YnJhbmNoX2FkZHJlc3MgIHw9IGNwdV90b19sZTMyKDEpOworCisJY3R4LT5sYXN0X2J1ZmZlcl9pbmRleCA9IGluZGV4OwogCiAJcmVnX3dyaXRlKGN0eC0+b2hjaSwgQ09OVFJPTF9TRVQoY3R4LT5yZWdzKSwgQ09OVEVYVF9XQUtFKTsKIAlmbHVzaF93cml0ZXMoY3R4LT5vaGNpKTsKIH0KIAotc3RhdGljIGludCBhcl9jb250ZXh0X2FkZF9wYWdlKHN0cnVjdCBhcl9jb250ZXh0ICpjdHgpCi17Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gY3R4LT5vaGNpLT5jYXJkLmRldmljZTsKLQlzdHJ1Y3QgYXJfYnVmZmVyICphYjsKLQlkbWFfYWRkcl90IHVuaW5pdGlhbGl6ZWRfdmFyKGFiX2J1cyk7Ci0KLQlhYiA9IGRtYV9hbGxvY19jb2hlcmVudChkZXYsIFBBR0VfU0laRSwgJmFiX2J1cywgR0ZQX0FUT01JQyk7Ci0JaWYgKGFiID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JYXJfY29udGV4dF9saW5rX3BhZ2UoY3R4LCBhYiwgYWJfYnVzKTsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgdm9pZCBhcl9jb250ZXh0X3JlbGVhc2Uoc3RydWN0IGFyX2NvbnRleHQgKmN0eCkKIHsKLQlzdHJ1Y3QgYXJfYnVmZmVyICphYiwgKmFiX25leHQ7Ci0Jc2l6ZV90IG9mZnNldDsKLQlkbWFfYWRkcl90IGFiX2J1czsKKwl1bnNpZ25lZCBpbnQgaTsKIAotCWZvciAoYWIgPSBjdHgtPmN1cnJlbnRfYnVmZmVyOyBhYjsgYWIgPSBhYl9uZXh0KSB7Ci0JCWFiX25leHQgPSBhYi0+bmV4dDsKLQkJb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IGFyX2J1ZmZlciwgZGF0YSk7Ci0JCWFiX2J1cyA9IGxlMzJfdG9fY3B1KGFiLT5kZXNjcmlwdG9yLmRhdGFfYWRkcmVzcykgLSBvZmZzZXQ7Ci0JCWRtYV9mcmVlX2NvaGVyZW50KGN0eC0+b2hjaS0+Y2FyZC5kZXZpY2UsIFBBR0VfU0laRSwKLQkJCQkgIGFiLCBhYl9idXMpOworCWlmIChjdHgtPmJ1ZmZlcikKKwkJdm1fdW5tYXBfcmFtKGN0eC0+YnVmZmVyLCBBUl9CVUZGRVJTICsgQVJfV1JBUEFST1VORF9QQUdFUyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJfQlVGRkVSUzsgaSsrKQorCQlpZiAoY3R4LT5wYWdlc1tpXSkgeworCQkJZG1hX3VubWFwX3BhZ2UoY3R4LT5vaGNpLT5jYXJkLmRldmljZSwKKwkJCQkgICAgICAgYXJfYnVmZmVyX2J1cyhjdHgsIGkpLAorCQkJCSAgICAgICBQQUdFX1NJWkUsIERNQV9GUk9NX0RFVklDRSk7CisJCQlfX2ZyZWVfcGFnZShjdHgtPnBhZ2VzW2ldKTsKKwkJfQorfQorCitzdGF0aWMgdm9pZCBhcl9jb250ZXh0X2Fib3J0KHN0cnVjdCBhcl9jb250ZXh0ICpjdHgsIGNvbnN0IGNoYXIgKmVycm9yX21zZykKK3sKKwlpZiAocmVnX3JlYWQoY3R4LT5vaGNpLCBDT05UUk9MX0NMRUFSKGN0eC0+cmVncykpICYgQ09OVEVYVF9SVU4pIHsKKwkJcmVnX3dyaXRlKGN0eC0+b2hjaSwgQ09OVFJPTF9DTEVBUihjdHgtPnJlZ3MpLCBDT05URVhUX1JVTik7CisJCWZsdXNoX3dyaXRlcyhjdHgtPm9oY2kpOworCisJCWZ3X2Vycm9yKCJBUiBlcnJvcjogJXM7IERNQSBzdG9wcGVkXG4iLCBlcnJvcl9tc2cpOwogCX0KKwkvKiBGSVhNRTogcmVzdGFydD8gKi8KK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYXJfbmV4dF9idWZmZXJfaW5kZXgodW5zaWduZWQgaW50IGluZGV4KQoreworCXJldHVybiAoaW5kZXggKyAxKSAlIEFSX0JVRkZFUlM7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGFyX3ByZXZfYnVmZmVyX2luZGV4KHVuc2lnbmVkIGludCBpbmRleCkKK3sKKwlyZXR1cm4gKGluZGV4IC0gMSArIEFSX0JVRkZFUlMpICUgQVJfQlVGRkVSUzsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYXJfZmlyc3RfYnVmZmVyX2luZGV4KHN0cnVjdCBhcl9jb250ZXh0ICpjdHgpCit7CisJcmV0dXJuIGFyX25leHRfYnVmZmVyX2luZGV4KGN0eC0+bGFzdF9idWZmZXJfaW5kZXgpOworfQorCisvKgorICogV2Ugc2VhcmNoIGZvciB0aGUgYnVmZmVyIHRoYXQgY29udGFpbnMgdGhlIGxhc3QgQVIgcGFja2V0IERNQSBkYXRhIHdyaXR0ZW4KKyAqIGJ5IHRoZSBjb250cm9sbGVyLgorICovCitzdGF0aWMgdW5zaWduZWQgaW50IGFyX3NlYXJjaF9sYXN0X2FjdGl2ZV9idWZmZXIoc3RydWN0IGFyX2NvbnRleHQgKmN0eCwKKwkJCQkJCSB1bnNpZ25lZCBpbnQgKmJ1ZmZlcl9vZmZzZXQpCit7CisJdW5zaWduZWQgaW50IGksIG5leHRfaSwgbGFzdCA9IGN0eC0+bGFzdF9idWZmZXJfaW5kZXg7CisJX19sZTE2IHJlc19jb3VudCwgbmV4dF9yZXNfY291bnQ7CisKKwlpID0gYXJfZmlyc3RfYnVmZmVyX2luZGV4KGN0eCk7CisJcmVzX2NvdW50ID0gQUNDRVNTX09OQ0UoY3R4LT5kZXNjcmlwdG9yc1tpXS5yZXNfY291bnQpOworCisJLyogQSBidWZmZXIgdGhhdCBpcyBub3QgeWV0IGNvbXBsZXRlbHkgZmlsbGVkIG11c3QgYmUgdGhlIGxhc3Qgb25lLiAqLworCXdoaWxlIChpICE9IGxhc3QgJiYgcmVzX2NvdW50ID09IDApIHsKKworCQkvKiBQZWVrIGF0IHRoZSBuZXh0IGRlc2NyaXB0b3IuICovCisJCW5leHRfaSA9IGFyX25leHRfYnVmZmVyX2luZGV4KGkpOworCQlybWIoKTsgLyogcmVhZCBkZXNjcmlwdG9ycyBpbiBvcmRlciAqLworCQluZXh0X3Jlc19jb3VudCA9IEFDQ0VTU19PTkNFKAorCQkJCWN0eC0+ZGVzY3JpcHRvcnNbbmV4dF9pXS5yZXNfY291bnQpOworCQkvKgorCQkgKiBJZiB0aGUgbmV4dCBkZXNjcmlwdG9yIGlzIHN0aWxsIGVtcHR5LCB3ZSBtdXN0IHN0b3AgYXQgdGhpcworCQkgKiBkZXNjcmlwdG9yLgorCQkgKi8KKwkJaWYgKG5leHRfcmVzX2NvdW50ID09IGNwdV90b19sZTE2KFBBR0VfU0laRSkpIHsKKwkJCS8qCisJCQkgKiBUaGUgZXhjZXB0aW9uIGlzIHdoZW4gdGhlIERNQSBkYXRhIGZvciBvbmUgcGFja2V0IGlzCisJCQkgKiBzcGxpdCBvdmVyIHRocmVlIGJ1ZmZlcnM7IGluIHRoaXMgY2FzZSwgdGhlIG1pZGRsZQorCQkJICogYnVmZmVyJ3MgZGVzY3JpcHRvciBtaWdodCBiZSBuZXZlciB1cGRhdGVkIGJ5IHRoZQorCQkJICogY29udHJvbGxlciBhbmQgbG9vayBzdGlsbCBlbXB0eSwgYW5kIHdlIGhhdmUgdG8gcGVlaworCQkJICogYXQgdGhlIHRoaXJkIG9uZS4KKwkJCSAqLworCQkJaWYgKE1BWF9BUl9QQUNLRVRfU0laRSA+IFBBR0VfU0laRSAmJiBpICE9IGxhc3QpIHsKKwkJCQluZXh0X2kgPSBhcl9uZXh0X2J1ZmZlcl9pbmRleChuZXh0X2kpOworCQkJCXJtYigpOworCQkJCW5leHRfcmVzX2NvdW50ID0gQUNDRVNTX09OQ0UoCisJCQkJCWN0eC0+ZGVzY3JpcHRvcnNbbmV4dF9pXS5yZXNfY291bnQpOworCQkJCWlmIChuZXh0X3Jlc19jb3VudCAhPSBjcHVfdG9fbGUxNihQQUdFX1NJWkUpKQorCQkJCQlnb3RvIG5leHRfYnVmZmVyX2lzX2FjdGl2ZTsKKwkJCX0KKworCQkJYnJlYWs7CisJCX0KKworbmV4dF9idWZmZXJfaXNfYWN0aXZlOgorCQlpID0gbmV4dF9pOworCQlyZXNfY291bnQgPSBuZXh0X3Jlc19jb3VudDsKKwl9CisKKwlybWIoKTsgLyogcmVhZCByZXNfY291bnQgYmVmb3JlIHRoZSBETUEgZGF0YSAqLworCisJKmJ1ZmZlcl9vZmZzZXQgPSBQQUdFX1NJWkUgLSBsZTE2X3RvX2NwdShyZXNfY291bnQpOworCWlmICgqYnVmZmVyX29mZnNldCA+IFBBR0VfU0laRSkgeworCQkqYnVmZmVyX29mZnNldCA9IDA7CisJCWFyX2NvbnRleHRfYWJvcnQoY3R4LCAiY29ycnVwdGVkIGRlc2NyaXB0b3IiKTsKKwl9CisKKwlyZXR1cm4gaTsKK30KKworc3RhdGljIHZvaWQgYXJfc3luY19idWZmZXJzX2Zvcl9jcHUoc3RydWN0IGFyX2NvbnRleHQgKmN0eCwKKwkJCQkgICAgdW5zaWduZWQgaW50IGVuZF9idWZmZXJfaW5kZXgsCisJCQkJICAgIHVuc2lnbmVkIGludCBlbmRfYnVmZmVyX29mZnNldCkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWkgPSBhcl9maXJzdF9idWZmZXJfaW5kZXgoY3R4KTsKKwl3aGlsZSAoaSAhPSBlbmRfYnVmZmVyX2luZGV4KSB7CisJCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGN0eC0+b2hjaS0+Y2FyZC5kZXZpY2UsCisJCQkJCWFyX2J1ZmZlcl9idXMoY3R4LCBpKSwKKwkJCQkJUEFHRV9TSVpFLCBETUFfRlJPTV9ERVZJQ0UpOworCQlpID0gYXJfbmV4dF9idWZmZXJfaW5kZXgoaSk7CisJfQorCWlmIChlbmRfYnVmZmVyX29mZnNldCA+IDApCisJCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGN0eC0+b2hjaS0+Y2FyZC5kZXZpY2UsCisJCQkJCWFyX2J1ZmZlcl9idXMoY3R4LCBpKSwKKwkJCQkJZW5kX2J1ZmZlcl9vZmZzZXQsIERNQV9GUk9NX0RFVklDRSk7CiB9CiAKICNpZiBkZWZpbmVkKENPTkZJR19QUENfUE1BQykgJiYgZGVmaW5lZChDT05GSUdfUFBDMzIpCkBAIC02ODksNiArNzkxLDEwIEBACiAJCXAuaGVhZGVyWzNdID0gY29uZF9sZTMyX3RvX2NwdShidWZmZXJbM10pOwogCQlwLmhlYWRlcl9sZW5ndGggPSAxNjsKIAkJcC5wYXlsb2FkX2xlbmd0aCA9IHAuaGVhZGVyWzNdID4+IDE2OworCQlpZiAocC5wYXlsb2FkX2xlbmd0aCA+IE1BWF9BU1lOQ19QQVlMT0FEKSB7CisJCQlhcl9jb250ZXh0X2Fib3J0KGN0eCwgImludmFsaWQgcGFja2V0IGxlbmd0aCIpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KIAkJYnJlYWs7CiAKIAljYXNlIFRDT0RFX1dSSVRFX1JFU1BPTlNFOgpAQCAtNjk5LDkgKzgwNSw4IEBACiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJLyogRklYTUU6IFN0b3AgY29udGV4dCwgZGlzY2FyZCBldmVyeXRoaW5nLCBhbmQgcmVzdGFydD8gKi8KLQkJcC5oZWFkZXJfbGVuZ3RoID0gMDsKLQkJcC5wYXlsb2FkX2xlbmd0aCA9IDA7CisJCWFyX2NvbnRleHRfYWJvcnQoY3R4LCAiaW52YWxpZCB0Y29kZSIpOworCQlyZXR1cm4gTlVMTDsKIAl9CiAKIAlwLnBheWxvYWQgPSAodm9pZCAqKSBidWZmZXIgKyBwLmhlYWRlcl9sZW5ndGg7CkBAIC03NTEsMTIxICs4NTYsMTQ3IEBACiAJcmV0dXJuIGJ1ZmZlciArIGxlbmd0aCArIDE7CiB9CiAKLXN0YXRpYyB2b2lkIGFyX2NvbnRleHRfdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpCitzdGF0aWMgdm9pZCAqaGFuZGxlX2FyX3BhY2tldHMoc3RydWN0IGFyX2NvbnRleHQgKmN0eCwgdm9pZCAqcCwgdm9pZCAqZW5kKQogewotCXN0cnVjdCBhcl9jb250ZXh0ICpjdHggPSAoc3RydWN0IGFyX2NvbnRleHQgKilkYXRhOwotCXN0cnVjdCBhcl9idWZmZXIgKmFiOwotCXN0cnVjdCBkZXNjcmlwdG9yICpkOwotCXZvaWQgKmJ1ZmZlciwgKmVuZDsKLQlfX2xlMTYgcmVzX2NvdW50OworCXZvaWQgKm5leHQ7CiAKLQlhYiA9IGN0eC0+Y3VycmVudF9idWZmZXI7Ci0JZCA9ICZhYi0+ZGVzY3JpcHRvcjsKKwl3aGlsZSAocCA8IGVuZCkgeworCQluZXh0ID0gaGFuZGxlX2FyX3BhY2tldChjdHgsIHApOworCQlpZiAoIW5leHQpCisJCQlyZXR1cm4gcDsKKwkJcCA9IG5leHQ7CisJfQogCi0JcmVzX2NvdW50ID0gQUNDRVNTX09OQ0UoZC0+cmVzX2NvdW50KTsKLQlpZiAocmVzX2NvdW50ID09IDApIHsKLQkJc2l6ZV90IHNpemUsIHNpemUyLCByZXN0LCBwa3RzaXplLCBzaXplMywgb2Zmc2V0OwotCQlkbWFfYWRkcl90IHN0YXJ0X2J1czsKLQkJdm9pZCAqc3RhcnQ7CisJcmV0dXJuIHA7Cit9CiAKLQkJLyoKLQkJICogVGhpcyBkZXNjcmlwdG9yIGlzIGZpbmlzaGVkIGFuZCB3ZSBtYXkgaGF2ZSBhCi0JCSAqIHBhY2tldCBzcGxpdCBhY3Jvc3MgdGhpcyBhbmQgdGhlIG5leHQgYnVmZmVyLiBXZQotCQkgKiByZXVzZSB0aGUgcGFnZSBmb3IgcmVhc3NlbWJsaW5nIHRoZSBzcGxpdCBwYWNrZXQuCi0JCSAqLworc3RhdGljIHZvaWQgYXJfcmVjeWNsZV9idWZmZXJzKHN0cnVjdCBhcl9jb250ZXh0ICpjdHgsIHVuc2lnbmVkIGludCBlbmRfYnVmZmVyKQoreworCXVuc2lnbmVkIGludCBpOwogCi0JCW9mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBhcl9idWZmZXIsIGRhdGEpOwotCQlzdGFydCA9IGFiOwotCQlzdGFydF9idXMgPSBsZTMyX3RvX2NwdShhYi0+ZGVzY3JpcHRvci5kYXRhX2FkZHJlc3MpIC0gb2Zmc2V0OwotCQlidWZmZXIgPSBhYi0+ZGF0YTsKLQotCQlhYiA9IGFiLT5uZXh0OwotCQlkID0gJmFiLT5kZXNjcmlwdG9yOwotCQlzaXplID0gc3RhcnQgKyBQQUdFX1NJWkUgLSBjdHgtPnBvaW50ZXI7Ci0JCS8qIHZhbGlkIGJ1ZmZlciBkYXRhIGluIHRoZSBuZXh0IHBhZ2UgKi8KLQkJcmVzdCA9IGxlMTZfdG9fY3B1KGQtPnJlcV9jb3VudCkgLSBsZTE2X3RvX2NwdShkLT5yZXNfY291bnQpOwotCQkvKiB3aGF0IGFjdHVhbGx5IGZpdHMgaW4gdGhpcyBwYWdlICovCi0JCXNpemUyID0gbWluKHJlc3QsIChzaXplX3QpUEFHRV9TSVpFIC0gb2Zmc2V0IC0gc2l6ZSk7Ci0JCW1lbW1vdmUoYnVmZmVyLCBjdHgtPnBvaW50ZXIsIHNpemUpOwotCQltZW1jcHkoYnVmZmVyICsgc2l6ZSwgYWItPmRhdGEsIHNpemUyKTsKLQotCQl3aGlsZSAoc2l6ZSA+IDApIHsKLQkJCXZvaWQgKm5leHQgPSBoYW5kbGVfYXJfcGFja2V0KGN0eCwgYnVmZmVyKTsKLQkJCXBrdHNpemUgPSBuZXh0IC0gYnVmZmVyOwotCQkJaWYgKHBrdHNpemUgPj0gc2l6ZSkgewotCQkJCS8qCi0JCQkJICogV2UgaGF2ZSBoYW5kbGVkIGFsbCB0aGUgZGF0YSB0aGF0IHdhcwotCQkJCSAqIG9yaWdpbmFsbHkgaW4gdGhpcyBwYWdlLCBzbyB3ZSBjYW4gbm93Ci0JCQkJICogY29udGludWUgaW4gdGhlIG5leHQgcGFnZS4KLQkJCQkgKi8KLQkJCQlidWZmZXIgPSBuZXh0OwotCQkJCWJyZWFrOwotCQkJfQotCQkJLyogbW92ZSB0aGUgbmV4dCBwYWNrZXQgdG8gdGhlIHN0YXJ0IG9mIHRoZSBidWZmZXIgKi8KLQkJCW1lbW1vdmUoYnVmZmVyLCBuZXh0LCBzaXplICsgc2l6ZTIgLSBwa3RzaXplKTsKLQkJCXNpemUgLT0gcGt0c2l6ZTsKLQkJCS8qIGZpbGwgdXAgdGhpcyBwYWdlIGFnYWluICovCi0JCQlzaXplMyA9IG1pbihyZXN0IC0gc2l6ZTIsCi0JCQkJICAgIChzaXplX3QpUEFHRV9TSVpFIC0gb2Zmc2V0IC0gc2l6ZSAtIHNpemUyKTsKLQkJCW1lbWNweShidWZmZXIgKyBzaXplICsgc2l6ZTIsCi0JCQkgICAgICAgKHZvaWQgKikgYWItPmRhdGEgKyBzaXplMiwgc2l6ZTMpOwotCQkJc2l6ZTIgKz0gc2l6ZTM7Ci0JCX0KLQotCQlpZiAocmVzdCA+IDApIHsKLQkJCS8qIGhhbmRsZSB0aGUgcGFja2V0cyB0aGF0IGFyZSBmdWxseSBpbiB0aGUgbmV4dCBwYWdlICovCi0JCQlidWZmZXIgPSAodm9pZCAqKSBhYi0+ZGF0YSArCi0JCQkJCShidWZmZXIgLSAoc3RhcnQgKyBvZmZzZXQgKyBzaXplKSk7Ci0JCQllbmQgPSAodm9pZCAqKSBhYi0+ZGF0YSArIHJlc3Q7Ci0KLQkJCXdoaWxlIChidWZmZXIgPCBlbmQpCi0JCQkJYnVmZmVyID0gaGFuZGxlX2FyX3BhY2tldChjdHgsIGJ1ZmZlcik7Ci0KLQkJCWN0eC0+Y3VycmVudF9idWZmZXIgPSBhYjsKLQkJCWN0eC0+cG9pbnRlciA9IGVuZDsKLQotCQkJYXJfY29udGV4dF9saW5rX3BhZ2UoY3R4LCBzdGFydCwgc3RhcnRfYnVzKTsKLQkJfSBlbHNlIHsKLQkJCWN0eC0+cG9pbnRlciA9IHN0YXJ0ICsgUEFHRV9TSVpFOwotCQl9Ci0JfSBlbHNlIHsKLQkJYnVmZmVyID0gY3R4LT5wb2ludGVyOwotCQljdHgtPnBvaW50ZXIgPSBlbmQgPQotCQkJKHZvaWQgKikgYWIgKyBQQUdFX1NJWkUgLSBsZTE2X3RvX2NwdShyZXNfY291bnQpOwotCi0JCXdoaWxlIChidWZmZXIgPCBlbmQpCi0JCQlidWZmZXIgPSBoYW5kbGVfYXJfcGFja2V0KGN0eCwgYnVmZmVyKTsKKwlpID0gYXJfZmlyc3RfYnVmZmVyX2luZGV4KGN0eCk7CisJd2hpbGUgKGkgIT0gZW5kX2J1ZmZlcikgeworCQlkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShjdHgtPm9oY2ktPmNhcmQuZGV2aWNlLAorCQkJCQkgICBhcl9idWZmZXJfYnVzKGN0eCwgaSksCisJCQkJCSAgIFBBR0VfU0laRSwgRE1BX0ZST01fREVWSUNFKTsKKwkJYXJfY29udGV4dF9saW5rX3BhZ2UoY3R4LCBpKTsKKwkJaSA9IGFyX25leHRfYnVmZmVyX2luZGV4KGkpOwogCX0KIH0KIAotc3RhdGljIGludCBhcl9jb250ZXh0X2luaXQoc3RydWN0IGFyX2NvbnRleHQgKmN0eCwKLQkJCSAgIHN0cnVjdCBmd19vaGNpICpvaGNpLCB1MzIgcmVncykKK3N0YXRpYyB2b2lkIGFyX2NvbnRleHRfdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpCiB7Ci0Jc3RydWN0IGFyX2J1ZmZlciBhYjsKKwlzdHJ1Y3QgYXJfY29udGV4dCAqY3R4ID0gKHN0cnVjdCBhcl9jb250ZXh0ICopZGF0YTsKKwl1bnNpZ25lZCBpbnQgZW5kX2J1ZmZlcl9pbmRleCwgZW5kX2J1ZmZlcl9vZmZzZXQ7CisJdm9pZCAqcCwgKmVuZDsKKworCXAgPSBjdHgtPnBvaW50ZXI7CisJaWYgKCFwKQorCQlyZXR1cm47CisKKwllbmRfYnVmZmVyX2luZGV4ID0gYXJfc2VhcmNoX2xhc3RfYWN0aXZlX2J1ZmZlcihjdHgsCisJCQkJCQkJJmVuZF9idWZmZXJfb2Zmc2V0KTsKKwlhcl9zeW5jX2J1ZmZlcnNfZm9yX2NwdShjdHgsIGVuZF9idWZmZXJfaW5kZXgsIGVuZF9idWZmZXJfb2Zmc2V0KTsKKwllbmQgPSBjdHgtPmJ1ZmZlciArIGVuZF9idWZmZXJfaW5kZXggKiBQQUdFX1NJWkUgKyBlbmRfYnVmZmVyX29mZnNldDsKKworCWlmIChlbmRfYnVmZmVyX2luZGV4IDwgYXJfZmlyc3RfYnVmZmVyX2luZGV4KGN0eCkpIHsKKwkJLyoKKwkJICogVGhlIGZpbGxlZCBwYXJ0IG9mIHRoZSBvdmVyYWxsIGJ1ZmZlciB3cmFwcyBhcm91bmQ7IGhhbmRsZQorCQkgKiBhbGwgcGFja2V0cyB1cCB0byB0aGUgYnVmZmVyIGVuZCBoZXJlLiAgSWYgdGhlIGxhc3QgcGFja2V0CisJCSAqIHdyYXBzIGFyb3VuZCwgaXRzIHRhaWwgd2lsbCBiZSB2aXNpYmxlIGFmdGVyIHRoZSBidWZmZXIgZW5kCisJCSAqIGJlY2F1c2UgdGhlIGJ1ZmZlciBzdGFydCBwYWdlcyBhcmUgbWFwcGVkIHRoZXJlIGFnYWluLgorCQkgKi8KKwkJdm9pZCAqYnVmZmVyX2VuZCA9IGN0eC0+YnVmZmVyICsgQVJfQlVGRkVSUyAqIFBBR0VfU0laRTsKKwkJcCA9IGhhbmRsZV9hcl9wYWNrZXRzKGN0eCwgcCwgYnVmZmVyX2VuZCk7CisJCWlmIChwIDwgYnVmZmVyX2VuZCkKKwkJCWdvdG8gZXJyb3I7CisJCS8qIGFkanVzdCBwIHRvIHBvaW50IGJhY2sgaW50byB0aGUgYWN0dWFsIGJ1ZmZlciAqLworCQlwIC09IEFSX0JVRkZFUlMgKiBQQUdFX1NJWkU7CisJfQorCisJcCA9IGhhbmRsZV9hcl9wYWNrZXRzKGN0eCwgcCwgZW5kKTsKKwlpZiAocCAhPSBlbmQpIHsKKwkJaWYgKHAgPiBlbmQpCisJCQlhcl9jb250ZXh0X2Fib3J0KGN0eCwgImluY29uc2lzdGVudCBkZXNjcmlwdG9yIik7CisJCWdvdG8gZXJyb3I7CisJfQorCisJY3R4LT5wb2ludGVyID0gcDsKKwlhcl9yZWN5Y2xlX2J1ZmZlcnMoY3R4LCBlbmRfYnVmZmVyX2luZGV4KTsKKworCXJldHVybjsKKworZXJyb3I6CisJY3R4LT5wb2ludGVyID0gTlVMTDsKK30KKworc3RhdGljIGludCBhcl9jb250ZXh0X2luaXQoc3RydWN0IGFyX2NvbnRleHQgKmN0eCwgc3RydWN0IGZ3X29oY2kgKm9oY2ksCisJCQkgICB1bnNpZ25lZCBpbnQgZGVzY3JpcHRvcnNfb2Zmc2V0LCB1MzIgcmVncykKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwlkbWFfYWRkcl90IGRtYV9hZGRyOworCXN0cnVjdCBwYWdlICpwYWdlc1tBUl9CVUZGRVJTICsgQVJfV1JBUEFST1VORF9QQUdFU107CisJc3RydWN0IGRlc2NyaXB0b3IgKmQ7CiAKIAljdHgtPnJlZ3MgICAgICAgID0gcmVnczsKIAljdHgtPm9oY2kgICAgICAgID0gb2hjaTsKLQljdHgtPmxhc3RfYnVmZmVyID0gJmFiOwogCXRhc2tsZXRfaW5pdCgmY3R4LT50YXNrbGV0LCBhcl9jb250ZXh0X3Rhc2tsZXQsICh1bnNpZ25lZCBsb25nKWN0eCk7CiAKLQlhcl9jb250ZXh0X2FkZF9wYWdlKGN0eCk7Ci0JYXJfY29udGV4dF9hZGRfcGFnZShjdHgpOwotCWN0eC0+Y3VycmVudF9idWZmZXIgPSBhYi5uZXh0OwotCWN0eC0+cG9pbnRlciA9IGN0eC0+Y3VycmVudF9idWZmZXItPmRhdGE7CisJZm9yIChpID0gMDsgaSA8IEFSX0JVRkZFUlM7IGkrKykgeworCQljdHgtPnBhZ2VzW2ldID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMIHwgR0ZQX0RNQTMyKTsKKwkJaWYgKCFjdHgtPnBhZ2VzW2ldKQorCQkJZ290byBvdXRfb2ZfbWVtb3J5OworCQlkbWFfYWRkciA9IGRtYV9tYXBfcGFnZShvaGNpLT5jYXJkLmRldmljZSwgY3R4LT5wYWdlc1tpXSwKKwkJCQkJMCwgUEFHRV9TSVpFLCBETUFfRlJPTV9ERVZJQ0UpOworCQlpZiAoZG1hX21hcHBpbmdfZXJyb3Iob2hjaS0+Y2FyZC5kZXZpY2UsIGRtYV9hZGRyKSkgeworCQkJX19mcmVlX3BhZ2UoY3R4LT5wYWdlc1tpXSk7CisJCQljdHgtPnBhZ2VzW2ldID0gTlVMTDsKKwkJCWdvdG8gb3V0X29mX21lbW9yeTsKKwkJfQorCQlzZXRfcGFnZV9wcml2YXRlKGN0eC0+cGFnZXNbaV0sIGRtYV9hZGRyKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJfQlVGRkVSUzsgaSsrKQorCQlwYWdlc1tpXSAgICAgICAgICAgICAgPSBjdHgtPnBhZ2VzW2ldOworCWZvciAoaSA9IDA7IGkgPCBBUl9XUkFQQVJPVU5EX1BBR0VTOyBpKyspCisJCXBhZ2VzW0FSX0JVRkZFUlMgKyBpXSA9IGN0eC0+cGFnZXNbaV07CisJY3R4LT5idWZmZXIgPSB2bV9tYXBfcmFtKHBhZ2VzLCBBUl9CVUZGRVJTICsgQVJfV1JBUEFST1VORF9QQUdFUywKKwkJCQkgLTEsIFBBR0VfS0VSTkVMX1JPKTsKKwlpZiAoIWN0eC0+YnVmZmVyKQorCQlnb3RvIG91dF9vZl9tZW1vcnk7CisKKwljdHgtPmRlc2NyaXB0b3JzICAgICA9IG9oY2ktPm1pc2NfYnVmZmVyICAgICArIGRlc2NyaXB0b3JzX29mZnNldDsKKwljdHgtPmRlc2NyaXB0b3JzX2J1cyA9IG9oY2ktPm1pc2NfYnVmZmVyX2J1cyArIGRlc2NyaXB0b3JzX29mZnNldDsKKworCWZvciAoaSA9IDA7IGkgPCBBUl9CVUZGRVJTOyBpKyspIHsKKwkJZCA9ICZjdHgtPmRlc2NyaXB0b3JzW2ldOworCQlkLT5yZXFfY291bnQgICAgICA9IGNwdV90b19sZTE2KFBBR0VfU0laRSk7CisJCWQtPmNvbnRyb2wgICAgICAgID0gY3B1X3RvX2xlMTYoREVTQ1JJUFRPUl9JTlBVVF9NT1JFIHwKKwkJCQkJCURFU0NSSVBUT1JfU1RBVFVTIHwKKwkJCQkJCURFU0NSSVBUT1JfQlJBTkNIX0FMV0FZUyk7CisJCWQtPmRhdGFfYWRkcmVzcyAgID0gY3B1X3RvX2xlMzIoYXJfYnVmZmVyX2J1cyhjdHgsIGkpKTsKKwkJZC0+YnJhbmNoX2FkZHJlc3MgPSBjcHVfdG9fbGUzMihjdHgtPmRlc2NyaXB0b3JzX2J1cyArCisJCQlhcl9uZXh0X2J1ZmZlcl9pbmRleChpKSAqIHNpemVvZihzdHJ1Y3QgZGVzY3JpcHRvcikpOworCX0KIAogCXJldHVybiAwOworCitvdXRfb2ZfbWVtb3J5OgorCWFyX2NvbnRleHRfcmVsZWFzZShjdHgpOworCisJcmV0dXJuIC1FTk9NRU07CiB9CiAKIHN0YXRpYyB2b2lkIGFyX2NvbnRleHRfcnVuKHN0cnVjdCBhcl9jb250ZXh0ICpjdHgpCiB7Ci0Jc3RydWN0IGFyX2J1ZmZlciAqYWIgPSBjdHgtPmN1cnJlbnRfYnVmZmVyOwotCWRtYV9hZGRyX3QgYWJfYnVzOwotCXNpemVfdCBvZmZzZXQ7CisJdW5zaWduZWQgaW50IGk7CiAKLQlvZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgYXJfYnVmZmVyLCBkYXRhKTsKLQlhYl9idXMgPSBsZTMyX3RvX2NwdShhYi0+ZGVzY3JpcHRvci5kYXRhX2FkZHJlc3MpIC0gb2Zmc2V0OworCWZvciAoaSA9IDA7IGkgPCBBUl9CVUZGRVJTOyBpKyspCisJCWFyX2NvbnRleHRfbGlua19wYWdlKGN0eCwgaSk7CiAKLQlyZWdfd3JpdGUoY3R4LT5vaGNpLCBDT01NQU5EX1BUUihjdHgtPnJlZ3MpLCBhYl9idXMgfCAxKTsKKwljdHgtPnBvaW50ZXIgPSBjdHgtPmJ1ZmZlcjsKKworCXJlZ193cml0ZShjdHgtPm9oY2ksIENPTU1BTkRfUFRSKGN0eC0+cmVncyksIGN0eC0+ZGVzY3JpcHRvcnNfYnVzIHwgMSk7CiAJcmVnX3dyaXRlKGN0eC0+b2hjaSwgQ09OVFJPTF9TRVQoY3R4LT5yZWdzKSwgQ09OVEVYVF9SVU4pOwogCWZsdXNoX3dyaXRlcyhjdHgtPm9oY2kpOwogfQpAQCAtMTA0Miw2ICsxMTczLDcgQEAKIAkJICBsZTMyX3RvX2NwdShjdHgtPmxhc3QtPmJyYW5jaF9hZGRyZXNzKSk7CiAJcmVnX3dyaXRlKG9oY2ksIENPTlRST0xfQ0xFQVIoY3R4LT5yZWdzKSwgfjApOwogCXJlZ193cml0ZShvaGNpLCBDT05UUk9MX1NFVChjdHgtPnJlZ3MpLCBDT05URVhUX1JVTiB8IGV4dHJhKTsKKwljdHgtPnJ1bm5pbmcgPSB0cnVlOwogCWZsdXNoX3dyaXRlcyhvaGNpKTsKIH0KIApAQCAtMTA2OSw2ICsxMjAxLDcgQEAKIAlpbnQgaTsKIAogCXJlZ193cml0ZShjdHgtPm9oY2ksIENPTlRST0xfQ0xFQVIoY3R4LT5yZWdzKSwgQ09OVEVYVF9SVU4pOworCWN0eC0+cnVubmluZyA9IGZhbHNlOwogCWZsdXNoX3dyaXRlcyhjdHgtPm9oY2kpOwogCiAJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKQEAgLTEwOTksNyArMTIzMiw2IEBACiAJc3RydWN0IGRlc2NyaXB0b3IgKmQsICpsYXN0OwogCV9fbGUzMiAqaGVhZGVyOwogCWludCB6LCB0Y29kZTsKLQl1MzIgcmVnOwogCiAJZCA9IGNvbnRleHRfZ2V0X2Rlc2NyaXB0b3JzKGN0eCwgNCwgJmRfYnVzKTsKIAlpZiAoZCA9PSBOVUxMKSB7CkBAIC0xMTEzLDIxICsxMjQ1LDI3IEBACiAJLyoKIAkgKiBUaGUgRE1BIGZvcm1hdCBmb3IgYXN5bmNyb25vdXMgbGluayBwYWNrZXRzIGlzIGRpZmZlcmVudAogCSAqIGZyb20gdGhlIElFRUUxMzk0IGxheW91dCwgc28gc2hpZnQgdGhlIGZpZWxkcyBhcm91bmQKLQkgKiBhY2NvcmRpbmdseS4gIElmIGhlYWRlcl9sZW5ndGggaXMgOCwgaXQncyBhIFBIWSBwYWNrZXQsIHRvCi0JICogd2hpY2ggd2UgbmVlZCB0byBwcmVwZW5kIGFuIGV4dHJhIHF1YWRsZXQuCisJICogYWNjb3JkaW5nbHkuCiAJICovCiAKKwl0Y29kZSA9IChwYWNrZXQtPmhlYWRlclswXSA+PiA0KSAmIDB4MGY7CiAJaGVhZGVyID0gKF9fbGUzMiAqKSAmZFsxXTsKLQlzd2l0Y2ggKHBhY2tldC0+aGVhZGVyX2xlbmd0aCkgewotCWNhc2UgMTY6Ci0JY2FzZSAxMjoKKwlzd2l0Y2ggKHRjb2RlKSB7CisJY2FzZSBUQ09ERV9XUklURV9RVUFETEVUX1JFUVVFU1Q6CisJY2FzZSBUQ09ERV9XUklURV9CTE9DS19SRVFVRVNUOgorCWNhc2UgVENPREVfV1JJVEVfUkVTUE9OU0U6CisJY2FzZSBUQ09ERV9SRUFEX1FVQURMRVRfUkVRVUVTVDoKKwljYXNlIFRDT0RFX1JFQURfQkxPQ0tfUkVRVUVTVDoKKwljYXNlIFRDT0RFX1JFQURfUVVBRExFVF9SRVNQT05TRToKKwljYXNlIFRDT0RFX1JFQURfQkxPQ0tfUkVTUE9OU0U6CisJY2FzZSBUQ09ERV9MT0NLX1JFUVVFU1Q6CisJY2FzZSBUQ09ERV9MT0NLX1JFU1BPTlNFOgogCQloZWFkZXJbMF0gPSBjcHVfdG9fbGUzMigocGFja2V0LT5oZWFkZXJbMF0gJiAweGZmZmYpIHwKIAkJCQkJKHBhY2tldC0+c3BlZWQgPDwgMTYpKTsKIAkJaGVhZGVyWzFdID0gY3B1X3RvX2xlMzIoKHBhY2tldC0+aGVhZGVyWzFdICYgMHhmZmZmKSB8CiAJCQkJCShwYWNrZXQtPmhlYWRlclswXSAmIDB4ZmZmZjAwMDApKTsKIAkJaGVhZGVyWzJdID0gY3B1X3RvX2xlMzIocGFja2V0LT5oZWFkZXJbMl0pOwogCi0JCXRjb2RlID0gKHBhY2tldC0+aGVhZGVyWzBdID4+IDQpICYgMHgwZjsKIAkJaWYgKFRDT0RFX0lTX0JMT0NLX1BBQ0tFVCh0Y29kZSkpCiAJCQloZWFkZXJbM10gPSBjcHVfdG9fbGUzMihwYWNrZXQtPmhlYWRlclszXSk7CiAJCWVsc2UKQEAgLTExMzYsMTggKzEyNzQsMTggQEAKIAkJZFswXS5yZXFfY291bnQgPSBjcHVfdG9fbGUxNihwYWNrZXQtPmhlYWRlcl9sZW5ndGgpOwogCQlicmVhazsKIAotCWNhc2UgODoKKwljYXNlIFRDT0RFX0xJTktfSU5URVJOQUw6CiAJCWhlYWRlclswXSA9IGNwdV90b19sZTMyKChPSENJMTM5NF9waHlfdGNvZGUgPDwgNCkgfAogCQkJCQkocGFja2V0LT5zcGVlZCA8PCAxNikpOwotCQloZWFkZXJbMV0gPSBjcHVfdG9fbGUzMihwYWNrZXQtPmhlYWRlclswXSk7Ci0JCWhlYWRlclsyXSA9IGNwdV90b19sZTMyKHBhY2tldC0+aGVhZGVyWzFdKTsKKwkJaGVhZGVyWzFdID0gY3B1X3RvX2xlMzIocGFja2V0LT5oZWFkZXJbMV0pOworCQloZWFkZXJbMl0gPSBjcHVfdG9fbGUzMihwYWNrZXQtPmhlYWRlclsyXSk7CiAJCWRbMF0ucmVxX2NvdW50ID0gY3B1X3RvX2xlMTYoMTIpOwogCi0JCWlmIChpc19waW5nX3BhY2tldChwYWNrZXQtPmhlYWRlcikpCisJCWlmIChpc19waW5nX3BhY2tldCgmcGFja2V0LT5oZWFkZXJbMV0pKQogCQkJZFswXS5jb250cm9sIHw9IGNwdV90b19sZTE2KERFU0NSSVBUT1JfUElORyk7CiAJCWJyZWFrOwogCi0JY2FzZSA0OgorCWNhc2UgVENPREVfU1RSRUFNX0RBVEE6CiAJCWhlYWRlclswXSA9IGNwdV90b19sZTMyKChwYWNrZXQtPmhlYWRlclswXSAmIDB4ZmZmZikgfAogCQkJCQkocGFja2V0LT5zcGVlZCA8PCAxNikpOwogCQloZWFkZXJbMV0gPSBjcHVfdG9fbGUzMihwYWNrZXQtPmhlYWRlclswXSAmIDB4ZmZmZjAwMDApOwpAQCAtMTE5Nyw2ICsxMzM1LDggQEAKIAkgKiBzb21lIGNvbnRyb2xsZXJzIChsaWtlIGEgSk1pY3JvbiBKTUIzODEgUENJLWUpIG1pc2JlaGF2ZSBhbmQgd2luZAogCSAqIHVwIHN0YWxsaW5nIG91dC4gIFNvIHdlIGp1c3QgYmFpbCBvdXQgaW4gc29mdHdhcmUgYW5kIHRyeSBhZ2FpbgogCSAqIGxhdGVyLCBhbmQgZXZlcnlvbmUgaXMgaGFwcHkuCisJICogRklYTUU6IFRlc3Qgb2YgSW50RXZlbnQuYnVzUmVzZXQgbWF5IG5vIGxvbmdlciBiZSBuZWNlc3Nhcnkgc2luY2Ugd2UKKwkgKiAgICAgICAgZmx1c2ggQVQgcXVldWVzIGluIGJ1c19yZXNldF90YXNrbGV0LgogCSAqIEZJWE1FOiBEb2N1bWVudCBob3cgdGhlIGxvY2tpbmcgd29ya3MuCiAJICovCiAJaWYgKG9oY2ktPmdlbmVyYXRpb24gIT0gcGFja2V0LT5nZW5lcmF0aW9uIHx8CkBAIC0xMjEwLDE0ICsxMzUwLDIzIEBACiAKIAljb250ZXh0X2FwcGVuZChjdHgsIGQsIHosIDQgLSB6KTsKIAotCS8qIElmIHRoZSBjb250ZXh0IGlzbid0IGFscmVhZHkgcnVubmluZywgc3RhcnQgaXQgdXAuICovCi0JcmVnID0gcmVnX3JlYWQoY3R4LT5vaGNpLCBDT05UUk9MX1NFVChjdHgtPnJlZ3MpKTsKLQlpZiAoKHJlZyAmIENPTlRFWFRfUlVOKSA9PSAwKQorCWlmICghY3R4LT5ydW5uaW5nKQogCQljb250ZXh0X3J1bihjdHgsIDApOwogCiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGF0X2NvbnRleHRfZmx1c2goc3RydWN0IGNvbnRleHQgKmN0eCkKK3sKKwl0YXNrbGV0X2Rpc2FibGUoJmN0eC0+dGFza2xldCk7CisKKwljdHgtPmZsdXNoaW5nID0gdHJ1ZTsKKwljb250ZXh0X3Rhc2tsZXQoKHVuc2lnbmVkIGxvbmcpY3R4KTsKKwljdHgtPmZsdXNoaW5nID0gZmFsc2U7CisKKwl0YXNrbGV0X2VuYWJsZSgmY3R4LT50YXNrbGV0KTsKK30KKwogc3RhdGljIGludCBoYW5kbGVfYXRfcGFja2V0KHN0cnVjdCBjb250ZXh0ICpjb250ZXh0LAogCQkJICAgIHN0cnVjdCBkZXNjcmlwdG9yICpkLAogCQkJICAgIHN0cnVjdCBkZXNjcmlwdG9yICpsYXN0KQpAQCAtMTIyNyw3ICsxMzc2LDcgQEAKIAlzdHJ1Y3QgZndfb2hjaSAqb2hjaSA9IGNvbnRleHQtPm9oY2k7CiAJaW50IGV2dDsKIAotCWlmIChsYXN0LT50cmFuc2Zlcl9zdGF0dXMgPT0gMCkKKwlpZiAobGFzdC0+dHJhbnNmZXJfc3RhdHVzID09IDAgJiYgIWNvbnRleHQtPmZsdXNoaW5nKQogCQkvKiBUaGlzIGRlc2NyaXB0b3IgaXNuJ3QgZG9uZSB5ZXQsIHN0b3AgaXRlcmF0aW9uLiAqLwogCQlyZXR1cm4gMDsKIApAQCAtMTI2MSwxMSArMTQxMCwxNSBAQAogCQlicmVhazsKIAogCWNhc2UgT0hDSTEzOTRfZXZ0X21pc3NpbmdfYWNrOgotCQkvKgotCQkgKiBVc2luZyBhIHZhbGlkIChjdXJyZW50KSBnZW5lcmF0aW9uIGNvdW50LCBidXQgdGhlCi0JCSAqIG5vZGUgaXMgbm90IG9uIHRoZSBidXMgb3Igbm90IHNlbmRpbmcgYWNrcy4KLQkJICovCi0JCXBhY2tldC0+YWNrID0gUkNPREVfTk9fQUNLOworCQlpZiAoY29udGV4dC0+Zmx1c2hpbmcpCisJCQlwYWNrZXQtPmFjayA9IFJDT0RFX0dFTkVSQVRJT047CisJCWVsc2UgeworCQkJLyoKKwkJCSAqIFVzaW5nIGEgdmFsaWQgKGN1cnJlbnQpIGdlbmVyYXRpb24gY291bnQsIGJ1dCB0aGUKKwkJCSAqIG5vZGUgaXMgbm90IG9uIHRoZSBidXMgb3Igbm90IHNlbmRpbmcgYWNrcy4KKwkJCSAqLworCQkJcGFja2V0LT5hY2sgPSBSQ09ERV9OT19BQ0s7CisJCX0KIAkJYnJlYWs7CiAKIAljYXNlIEFDS19DT01QTEVURSArIDB4MTA6CkBAIC0xMjc4LDYgKzE0MzEsMTMgQEAKIAkJcGFja2V0LT5hY2sgPSBldnQgLSAweDEwOwogCQlicmVhazsKIAorCWNhc2UgT0hDSTEzOTRfZXZ0X25vX3N0YXR1czoKKwkJaWYgKGNvbnRleHQtPmZsdXNoaW5nKSB7CisJCQlwYWNrZXQtPmFjayA9IFJDT0RFX0dFTkVSQVRJT047CisJCQlicmVhazsKKwkJfQorCQkvKiBmYWxsIHRocm91Z2ggKi8KKwogCWRlZmF1bHQ6CiAJCXBhY2tldC0+YWNrID0gUkNPREVfU0VORF9FUlJPUjsKIAkJYnJlYWs7CkBAIC0xNTgzLDkgKzE3NDMsMjMgQEAKIAkvKiBGSVhNRTogRG9jdW1lbnQgaG93IHRoZSBsb2NraW5nIHdvcmtzLiAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZvaGNpLT5sb2NrLCBmbGFncyk7CiAKLQlvaGNpLT5nZW5lcmF0aW9uID0gZ2VuZXJhdGlvbjsKKwlvaGNpLT5nZW5lcmF0aW9uID0gLTE7IC8qIHByZXZlbnQgQVQgcGFja2V0IHF1ZXVlaW5nICovCiAJY29udGV4dF9zdG9wKCZvaGNpLT5hdF9yZXF1ZXN0X2N0eCk7CiAJY29udGV4dF9zdG9wKCZvaGNpLT5hdF9yZXNwb25zZV9jdHgpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb2hjaS0+bG9jaywgZmxhZ3MpOworCisJLyoKKwkgKiBQZXIgT0hDSSAxLjIgZHJhZnQsIGNsYXVzZSA3LjIuMy4zLCBoYXJkd2FyZSBtYXkgbGVhdmUgdW5zZW50CisJICogcGFja2V0cyBpbiB0aGUgQVQgcXVldWVzIGFuZCBzb2Z0d2FyZSBuZWVkcyB0byBkcmFpbiB0aGVtLgorCSAqIFNvbWUgT0hDSSAxLjEgY29udHJvbGxlcnMgKEpNaWNyb24pIGFwcGFyZW50bHkgcmVxdWlyZSB0aGlzIHRvby4KKwkgKi8KKwlhdF9jb250ZXh0X2ZsdXNoKCZvaGNpLT5hdF9yZXF1ZXN0X2N0eCk7CisJYXRfY29udGV4dF9mbHVzaCgmb2hjaS0+YXRfcmVzcG9uc2VfY3R4KTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZvaGNpLT5sb2NrLCBmbGFncyk7CisKKwlvaGNpLT5nZW5lcmF0aW9uID0gZ2VuZXJhdGlvbjsKIAlyZWdfd3JpdGUob2hjaSwgT0hDSTEzOTRfSW50RXZlbnRDbGVhciwgT0hDSTEzOTRfYnVzUmVzZXQpOwogCiAJaWYgKG9oY2ktPnF1aXJrcyAmIFFVSVJLX1JFU0VUX1BBQ0tFVCkKQEAgLTE2NTMsOCArMTgyNywxMiBAQAogCWlmICghZXZlbnQgfHwgIX5ldmVudCkKIAkJcmV0dXJuIElSUV9OT05FOwogCi0JLyogYnVzUmVzZXQgbXVzdCBub3QgYmUgY2xlYXJlZCB5ZXQsIHNlZSBPSENJIDEuMSBjbGF1c2UgNy4yLjMuMiAqLwotCXJlZ193cml0ZShvaGNpLCBPSENJMTM5NF9JbnRFdmVudENsZWFyLCBldmVudCAmIH5PSENJMTM5NF9idXNSZXNldCk7CisJLyoKKwkgKiBidXNSZXNldCBhbmQgcG9zdGVkV3JpdGVFcnIgbXVzdCBub3QgYmUgY2xlYXJlZCB5ZXQKKwkgKiAoT0hDSSAxLjEgY2xhdXNlcyA3LjIuMy4yIGFuZCAxMy4yLjguMSkKKwkgKi8KKwlyZWdfd3JpdGUob2hjaSwgT0hDSTEzOTRfSW50RXZlbnRDbGVhciwKKwkJICBldmVudCAmIH4oT0hDSTEzOTRfYnVzUmVzZXQgfCBPSENJMTM5NF9wb3N0ZWRXcml0ZUVycikpOwogCWxvZ19pcnFzKGV2ZW50KTsKIAogCWlmIChldmVudCAmIE9IQ0kxMzk0X3NlbGZJRENvbXBsZXRlKQpAQCAtMTY3MiwzMCArMTg1MCw0MSBAQAogCWlmIChldmVudCAmIE9IQ0kxMzk0X3Jlc3BUeENvbXBsZXRlKQogCQl0YXNrbGV0X3NjaGVkdWxlKCZvaGNpLT5hdF9yZXNwb25zZV9jdHgudGFza2xldCk7CiAKLQlpc29fZXZlbnQgPSByZWdfcmVhZChvaGNpLCBPSENJMTM5NF9Jc29SZWN2SW50RXZlbnRDbGVhcik7Ci0JcmVnX3dyaXRlKG9oY2ksIE9IQ0kxMzk0X0lzb1JlY3ZJbnRFdmVudENsZWFyLCBpc29fZXZlbnQpOworCWlmIChldmVudCAmIE9IQ0kxMzk0X2lzb2NoUngpIHsKKwkJaXNvX2V2ZW50ID0gcmVnX3JlYWQob2hjaSwgT0hDSTEzOTRfSXNvUmVjdkludEV2ZW50Q2xlYXIpOworCQlyZWdfd3JpdGUob2hjaSwgT0hDSTEzOTRfSXNvUmVjdkludEV2ZW50Q2xlYXIsIGlzb19ldmVudCk7CiAKLQl3aGlsZSAoaXNvX2V2ZW50KSB7Ci0JCWkgPSBmZnMoaXNvX2V2ZW50KSAtIDE7Ci0JCXRhc2tsZXRfc2NoZWR1bGUoJm9oY2ktPmlyX2NvbnRleHRfbGlzdFtpXS5jb250ZXh0LnRhc2tsZXQpOwotCQlpc29fZXZlbnQgJj0gfigxIDw8IGkpOworCQl3aGlsZSAoaXNvX2V2ZW50KSB7CisJCQlpID0gZmZzKGlzb19ldmVudCkgLSAxOworCQkJdGFza2xldF9zY2hlZHVsZSgKKwkJCQkmb2hjaS0+aXJfY29udGV4dF9saXN0W2ldLmNvbnRleHQudGFza2xldCk7CisJCQlpc29fZXZlbnQgJj0gfigxIDw8IGkpOworCQl9CiAJfQogCi0JaXNvX2V2ZW50ID0gcmVnX3JlYWQob2hjaSwgT0hDSTEzOTRfSXNvWG1pdEludEV2ZW50Q2xlYXIpOwotCXJlZ193cml0ZShvaGNpLCBPSENJMTM5NF9Jc29YbWl0SW50RXZlbnRDbGVhciwgaXNvX2V2ZW50KTsKKwlpZiAoZXZlbnQgJiBPSENJMTM5NF9pc29jaFR4KSB7CisJCWlzb19ldmVudCA9IHJlZ19yZWFkKG9oY2ksIE9IQ0kxMzk0X0lzb1htaXRJbnRFdmVudENsZWFyKTsKKwkJcmVnX3dyaXRlKG9oY2ksIE9IQ0kxMzk0X0lzb1htaXRJbnRFdmVudENsZWFyLCBpc29fZXZlbnQpOwogCi0Jd2hpbGUgKGlzb19ldmVudCkgewotCQlpID0gZmZzKGlzb19ldmVudCkgLSAxOwotCQl0YXNrbGV0X3NjaGVkdWxlKCZvaGNpLT5pdF9jb250ZXh0X2xpc3RbaV0uY29udGV4dC50YXNrbGV0KTsKLQkJaXNvX2V2ZW50ICY9IH4oMSA8PCBpKTsKKwkJd2hpbGUgKGlzb19ldmVudCkgeworCQkJaSA9IGZmcyhpc29fZXZlbnQpIC0gMTsKKwkJCXRhc2tsZXRfc2NoZWR1bGUoCisJCQkJJm9oY2ktPml0X2NvbnRleHRfbGlzdFtpXS5jb250ZXh0LnRhc2tsZXQpOworCQkJaXNvX2V2ZW50ICY9IH4oMSA8PCBpKTsKKwkJfQogCX0KIAogCWlmICh1bmxpa2VseShldmVudCAmIE9IQ0kxMzk0X3JlZ0FjY2Vzc0ZhaWwpKQogCQlmd19lcnJvcigiUmVnaXN0ZXIgYWNjZXNzIGZhaWx1cmUgLSAiCiAJCQkgInBsZWFzZSBub3RpZnkgbGludXgxMzk0LWRldmVsQGxpc3RzLnNmLm5ldFxuIik7CiAKLQlpZiAodW5saWtlbHkoZXZlbnQgJiBPSENJMTM5NF9wb3N0ZWRXcml0ZUVycikpCisJaWYgKHVubGlrZWx5KGV2ZW50ICYgT0hDSTEzOTRfcG9zdGVkV3JpdGVFcnIpKSB7CisJCXJlZ19yZWFkKG9oY2ksIE9IQ0kxMzk0X1Bvc3RlZFdyaXRlQWRkcmVzc0hpKTsKKwkJcmVnX3JlYWQob2hjaSwgT0hDSTEzOTRfUG9zdGVkV3JpdGVBZGRyZXNzTG8pOworCQlyZWdfd3JpdGUob2hjaSwgT0hDSTEzOTRfSW50RXZlbnRDbGVhciwKKwkJCSAgT0hDSTEzOTRfcG9zdGVkV3JpdGVFcnIpOwogCQlmd19lcnJvcigiUENJIHBvc3RlZCB3cml0ZSBlcnJvclxuIik7CisJfQogCiAJaWYgKHVubGlrZWx5KGV2ZW50ICYgT0hDSTEzOTRfY3ljbGVUb29Mb25nKSkgewogCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQpAQCAtMTcxOSw3ICsxOTA4LDggQEAKIAkJc3Bpbl9sb2NrKCZvaGNpLT5sb2NrKTsKIAkJdXBkYXRlX2J1c190aW1lKG9oY2kpOwogCQlzcGluX3VubG9jaygmb2hjaS0+bG9jayk7Ci0JfQorCX0gZWxzZQorCQlmbHVzaF93cml0ZXMob2hjaSk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CkBAIC0yNDk1LDYgKzI2ODUsMTAgQEAKIAkJcmVnX3dyaXRlKG9oY2ksIE9IQ0kxMzk0X0lzb1JlY3ZJbnRNYXNrU2V0LCAxIDw8IGluZGV4KTsKIAkJcmVnX3dyaXRlKG9oY2ksIENPTlRFWFRfTUFUQ0goY3R4LT5jb250ZXh0LnJlZ3MpLCBtYXRjaCk7CiAJCWNvbnRleHRfcnVuKCZjdHgtPmNvbnRleHQsIGNvbnRyb2wpOworCisJCWN0eC0+c3luYyA9IHN5bmM7CisJCWN0eC0+dGFncyA9IHRhZ3M7CisKIAkJYnJlYWs7CiAJfQogCkBAIC0yNTkyLDYgKzI3ODYsMjYgQEAKIAlyZXR1cm4gcmV0OwogfQogCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgdm9pZCBvaGNpX3Jlc3VtZV9pc29fZG1hKHN0cnVjdCBmd19vaGNpICpvaGNpKQoreworCWludCBpOworCXN0cnVjdCBpc29fY29udGV4dCAqY3R4OworCisJZm9yIChpID0gMCA7IGkgPCBvaGNpLT5uX2lyIDsgaSsrKSB7CisJCWN0eCA9ICZvaGNpLT5pcl9jb250ZXh0X2xpc3RbaV07CisJCWlmIChjdHgtPmNvbnRleHQucnVubmluZykKKwkJCW9oY2lfc3RhcnRfaXNvKCZjdHgtPmJhc2UsIDAsIGN0eC0+c3luYywgY3R4LT50YWdzKTsKKwl9CisKKwlmb3IgKGkgPSAwIDsgaSA8IG9oY2ktPm5faXQgOyBpKyspIHsKKwkJY3R4ID0gJm9oY2ktPml0X2NvbnRleHRfbGlzdFtpXTsKKwkJaWYgKGN0eC0+Y29udGV4dC5ydW5uaW5nKQorCQkJb2hjaV9zdGFydF9pc28oJmN0eC0+YmFzZSwgMCwgY3R4LT5zeW5jLCBjdHgtPnRhZ3MpOworCX0KK30KKyNlbmRpZgorCiBzdGF0aWMgaW50IHF1ZXVlX2lzb190cmFuc21pdChzdHJ1Y3QgaXNvX2NvbnRleHQgKmN0eCwKIAkJCSAgICAgIHN0cnVjdCBmd19pc29fcGFja2V0ICpwYWNrZXQsCiAJCQkgICAgICBzdHJ1Y3QgZndfaXNvX2J1ZmZlciAqYnVmZmVyLApAQCAtMjkwMSw3ICszMTE1LDcgQEAKIAlzdHJ1Y3QgZndfb2hjaSAqb2hjaTsKIAl1MzIgYnVzX29wdGlvbnMsIG1heF9yZWNlaXZlLCBsaW5rX3NwZWVkLCB2ZXJzaW9uOwogCXU2NCBndWlkOwotCWludCBpLCBlcnIsIG5faXIsIG5faXQ7CisJaW50IGksIGVycjsKIAlzaXplX3Qgc2l6ZTsKIAogCW9oY2kgPSBremFsbG9jKHNpemVvZigqb2hjaSksIEdGUF9LRVJORUwpOwpAQCAtMjk1NSwzMSArMzE2OSw1NSBAQAogCWlmIChwYXJhbV9xdWlya3MpCiAJCW9oY2ktPnF1aXJrcyA9IHBhcmFtX3F1aXJrczsKIAotCWFyX2NvbnRleHRfaW5pdCgmb2hjaS0+YXJfcmVxdWVzdF9jdHgsIG9oY2ksCi0JCQlPSENJMTM5NF9Bc1JlcVJjdkNvbnRleHRDb250cm9sU2V0KTsKKwkvKgorCSAqIEJlY2F1c2UgZG1hX2FsbG9jX2NvaGVyZW50KCkgYWxsb2NhdGVzIGF0IGxlYXN0IG9uZSBwYWdlLAorCSAqIHdlIHNhdmUgc3BhY2UgYnkgdXNpbmcgYSBjb21tb24gYnVmZmVyIGZvciB0aGUgQVIgcmVxdWVzdC8KKwkgKiByZXNwb25zZSBkZXNjcmlwdG9ycyBhbmQgdGhlIHNlbGYgSURzIGJ1ZmZlci4KKwkgKi8KKwlCVUlMRF9CVUdfT04oQVJfQlVGRkVSUyAqIHNpemVvZihzdHJ1Y3QgZGVzY3JpcHRvcikgPiBQQUdFX1NJWkUvNCk7CisJQlVJTERfQlVHX09OKFNFTEZfSURfQlVGX1NJWkUgPiBQQUdFX1NJWkUvMik7CisJb2hjaS0+bWlzY19idWZmZXIgPSBkbWFfYWxsb2NfY29oZXJlbnQob2hjaS0+Y2FyZC5kZXZpY2UsCisJCQkJCSAgICAgICBQQUdFX1NJWkUsCisJCQkJCSAgICAgICAmb2hjaS0+bWlzY19idWZmZXJfYnVzLAorCQkJCQkgICAgICAgR0ZQX0tFUk5FTCk7CisJaWYgKCFvaGNpLT5taXNjX2J1ZmZlcikgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGZhaWxfaW91bm1hcDsKKwl9CiAKLQlhcl9jb250ZXh0X2luaXQoJm9oY2ktPmFyX3Jlc3BvbnNlX2N0eCwgb2hjaSwKLQkJCU9IQ0kxMzk0X0FzUnNwUmN2Q29udGV4dENvbnRyb2xTZXQpOworCWVyciA9IGFyX2NvbnRleHRfaW5pdCgmb2hjaS0+YXJfcmVxdWVzdF9jdHgsIG9oY2ksIDAsCisJCQkgICAgICBPSENJMTM5NF9Bc1JlcVJjdkNvbnRleHRDb250cm9sU2V0KTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBmYWlsX21pc2NfYnVmOwogCi0JY29udGV4dF9pbml0KCZvaGNpLT5hdF9yZXF1ZXN0X2N0eCwgb2hjaSwKLQkJICAgICBPSENJMTM5NF9Bc1JlcVRyQ29udGV4dENvbnRyb2xTZXQsIGhhbmRsZV9hdF9wYWNrZXQpOworCWVyciA9IGFyX2NvbnRleHRfaW5pdCgmb2hjaS0+YXJfcmVzcG9uc2VfY3R4LCBvaGNpLCBQQUdFX1NJWkUvNCwKKwkJCSAgICAgIE9IQ0kxMzk0X0FzUnNwUmN2Q29udGV4dENvbnRyb2xTZXQpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGZhaWxfYXJyZXFfY3R4OwogCi0JY29udGV4dF9pbml0KCZvaGNpLT5hdF9yZXNwb25zZV9jdHgsIG9oY2ksCi0JCSAgICAgT0hDSTEzOTRfQXNSc3BUckNvbnRleHRDb250cm9sU2V0LCBoYW5kbGVfYXRfcGFja2V0KTsKKwllcnIgPSBjb250ZXh0X2luaXQoJm9oY2ktPmF0X3JlcXVlc3RfY3R4LCBvaGNpLAorCQkJICAgT0hDSTEzOTRfQXNSZXFUckNvbnRleHRDb250cm9sU2V0LCBoYW5kbGVfYXRfcGFja2V0KTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBmYWlsX2FycnNwX2N0eDsKKworCWVyciA9IGNvbnRleHRfaW5pdCgmb2hjaS0+YXRfcmVzcG9uc2VfY3R4LCBvaGNpLAorCQkJICAgT0hDSTEzOTRfQXNSc3BUckNvbnRleHRDb250cm9sU2V0LCBoYW5kbGVfYXRfcGFja2V0KTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBmYWlsX2F0cmVxX2N0eDsKIAogCXJlZ193cml0ZShvaGNpLCBPSENJMTM5NF9Jc29SZWN2SW50TWFza1NldCwgfjApOwogCW9oY2ktPmlyX2NvbnRleHRfY2hhbm5lbHMgPSB+MFVMTDsKIAlvaGNpLT5pcl9jb250ZXh0X21hc2sgPSByZWdfcmVhZChvaGNpLCBPSENJMTM5NF9Jc29SZWN2SW50TWFza1NldCk7CiAJcmVnX3dyaXRlKG9oY2ksIE9IQ0kxMzk0X0lzb1JlY3ZJbnRNYXNrQ2xlYXIsIH4wKTsKLQluX2lyID0gaHdlaWdodDMyKG9oY2ktPmlyX2NvbnRleHRfbWFzayk7Ci0Jc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaXNvX2NvbnRleHQpICogbl9pcjsKKwlvaGNpLT5uX2lyID0gaHdlaWdodDMyKG9oY2ktPmlyX2NvbnRleHRfbWFzayk7CisJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaXNvX2NvbnRleHQpICogb2hjaS0+bl9pcjsKIAlvaGNpLT5pcl9jb250ZXh0X2xpc3QgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwogCiAJcmVnX3dyaXRlKG9oY2ksIE9IQ0kxMzk0X0lzb1htaXRJbnRNYXNrU2V0LCB+MCk7CiAJb2hjaS0+aXRfY29udGV4dF9tYXNrID0gcmVnX3JlYWQob2hjaSwgT0hDSTEzOTRfSXNvWG1pdEludE1hc2tTZXQpOwogCXJlZ193cml0ZShvaGNpLCBPSENJMTM5NF9Jc29YbWl0SW50TWFza0NsZWFyLCB+MCk7Ci0Jbl9pdCA9IGh3ZWlnaHQzMihvaGNpLT5pdF9jb250ZXh0X21hc2spOwotCXNpemUgPSBzaXplb2Yoc3RydWN0IGlzb19jb250ZXh0KSAqIG5faXQ7CisJb2hjaS0+bl9pdCA9IGh3ZWlnaHQzMihvaGNpLT5pdF9jb250ZXh0X21hc2spOworCXNpemUgPSBzaXplb2Yoc3RydWN0IGlzb19jb250ZXh0KSAqIG9oY2ktPm5faXQ7CiAJb2hjaS0+aXRfY29udGV4dF9saXN0ID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKIAogCWlmIChvaGNpLT5pdF9jb250ZXh0X2xpc3QgPT0gTlVMTCB8fCBvaGNpLT5pcl9jb250ZXh0X2xpc3QgPT0gTlVMTCkgewpAQCAtMjk4NywxNSArMzIyNSw4IEBACiAJCWdvdG8gZmFpbF9jb250ZXh0czsKIAl9CiAKLQkvKiBzZWxmLWlkIGRtYSBidWZmZXIgYWxsb2NhdGlvbiAqLwotCW9oY2ktPnNlbGZfaWRfY3B1ID0gZG1hX2FsbG9jX2NvaGVyZW50KG9oY2ktPmNhcmQuZGV2aWNlLAotCQkJCQkgICAgICAgU0VMRl9JRF9CVUZfU0laRSwKLQkJCQkJICAgICAgICZvaGNpLT5zZWxmX2lkX2J1cywKLQkJCQkJICAgICAgIEdGUF9LRVJORUwpOwotCWlmIChvaGNpLT5zZWxmX2lkX2NwdSA9PSBOVUxMKSB7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gZmFpbF9jb250ZXh0czsKLQl9CisJb2hjaS0+c2VsZl9pZF9jcHUgPSBvaGNpLT5taXNjX2J1ZmZlciAgICAgKyBQQUdFX1NJWkUvMjsKKwlvaGNpLT5zZWxmX2lkX2J1cyA9IG9oY2ktPm1pc2NfYnVmZmVyX2J1cyArIFBBR0VfU0laRS8yOwogCiAJYnVzX29wdGlvbnMgPSByZWdfcmVhZChvaGNpLCBPSENJMTM5NF9CdXNPcHRpb25zKTsKIAltYXhfcmVjZWl2ZSA9IChidXNfb3B0aW9ucyA+PiAxMikgJiAweGY7CkBAIC0zMDA1LDI2ICszMjM2LDMwIEBACiAKIAllcnIgPSBmd19jYXJkX2FkZCgmb2hjaS0+Y2FyZCwgbWF4X3JlY2VpdmUsIGxpbmtfc3BlZWQsIGd1aWQpOwogCWlmIChlcnIpCi0JCWdvdG8gZmFpbF9zZWxmX2lkOworCQlnb3RvIGZhaWxfY29udGV4dHM7CiAKIAl2ZXJzaW9uID0gcmVnX3JlYWQob2hjaSwgT0hDSTEzOTRfVmVyc2lvbikgJiAweDAwZmYwMGZmOwogCWZ3X25vdGlmeSgiQWRkZWQgZnctb2hjaSBkZXZpY2UgJXMsIE9IQ0kgdiV4LiV4LCAiCiAJCSAgIiVkIElSICsgJWQgSVQgY29udGV4dHMsIHF1aXJrcyAweCV4XG4iLAogCQkgIGRldl9uYW1lKCZkZXYtPmRldiksIHZlcnNpb24gPj4gMTYsIHZlcnNpb24gJiAweGZmLAotCQkgIG5faXIsIG5faXQsIG9oY2ktPnF1aXJrcyk7CisJCSAgb2hjaS0+bl9pciwgb2hjaS0+bl9pdCwgb2hjaS0+cXVpcmtzKTsKIAogCXJldHVybiAwOwogCi0gZmFpbF9zZWxmX2lkOgotCWRtYV9mcmVlX2NvaGVyZW50KG9oY2ktPmNhcmQuZGV2aWNlLCBTRUxGX0lEX0JVRl9TSVpFLAotCQkJICBvaGNpLT5zZWxmX2lkX2NwdSwgb2hjaS0+c2VsZl9pZF9idXMpOwogIGZhaWxfY29udGV4dHM6CiAJa2ZyZWUob2hjaS0+aXJfY29udGV4dF9saXN0KTsKIAlrZnJlZShvaGNpLT5pdF9jb250ZXh0X2xpc3QpOwogCWNvbnRleHRfcmVsZWFzZSgmb2hjaS0+YXRfcmVzcG9uc2VfY3R4KTsKKyBmYWlsX2F0cmVxX2N0eDoKIAljb250ZXh0X3JlbGVhc2UoJm9oY2ktPmF0X3JlcXVlc3RfY3R4KTsKKyBmYWlsX2FycnNwX2N0eDoKIAlhcl9jb250ZXh0X3JlbGVhc2UoJm9oY2ktPmFyX3Jlc3BvbnNlX2N0eCk7CisgZmFpbF9hcnJlcV9jdHg6CiAJYXJfY29udGV4dF9yZWxlYXNlKCZvaGNpLT5hcl9yZXF1ZXN0X2N0eCk7CisgZmFpbF9taXNjX2J1ZjoKKwlkbWFfZnJlZV9jb2hlcmVudChvaGNpLT5jYXJkLmRldmljZSwgUEFHRV9TSVpFLAorCQkJICBvaGNpLT5taXNjX2J1ZmZlciwgb2hjaS0+bWlzY19idWZmZXJfYnVzKTsKKyBmYWlsX2lvdW5tYXA6CiAJcGNpX2lvdW5tYXAoZGV2LCBvaGNpLT5yZWdpc3RlcnMpOwogIGZhaWxfaW9tZW06CiAJcGNpX3JlbGVhc2VfcmVnaW9uKGRldiwgMCk7CkBAIC0zMDYzLDEwICszMjk4LDEwIEBACiAJaWYgKG9oY2ktPmNvbmZpZ19yb20pCiAJCWRtYV9mcmVlX2NvaGVyZW50KG9oY2ktPmNhcmQuZGV2aWNlLCBDT05GSUdfUk9NX1NJWkUsCiAJCQkJICBvaGNpLT5jb25maWdfcm9tLCBvaGNpLT5jb25maWdfcm9tX2J1cyk7Ci0JZG1hX2ZyZWVfY29oZXJlbnQob2hjaS0+Y2FyZC5kZXZpY2UsIFNFTEZfSURfQlVGX1NJWkUsCi0JCQkgIG9oY2ktPnNlbGZfaWRfY3B1LCBvaGNpLT5zZWxmX2lkX2J1cyk7CiAJYXJfY29udGV4dF9yZWxlYXNlKCZvaGNpLT5hcl9yZXF1ZXN0X2N0eCk7CiAJYXJfY29udGV4dF9yZWxlYXNlKCZvaGNpLT5hcl9yZXNwb25zZV9jdHgpOworCWRtYV9mcmVlX2NvaGVyZW50KG9oY2ktPmNhcmQuZGV2aWNlLCBQQUdFX1NJWkUsCisJCQkgIG9oY2ktPm1pc2NfYnVmZmVyLCBvaGNpLT5taXNjX2J1ZmZlcl9idXMpOwogCWNvbnRleHRfcmVsZWFzZSgmb2hjaS0+YXRfcmVxdWVzdF9jdHgpOwogCWNvbnRleHRfcmVsZWFzZSgmb2hjaS0+YXRfcmVzcG9uc2VfY3R4KTsKIAlrZnJlZShvaGNpLT5pdF9jb250ZXh0X2xpc3QpOwpAQCAtMzExNyw3ICszMzUyLDIwIEBACiAJCXJldHVybiBlcnI7CiAJfQogCi0JcmV0dXJuIG9oY2lfZW5hYmxlKCZvaGNpLT5jYXJkLCBOVUxMLCAwKTsKKwkvKiBTb21lIHN5c3RlbXMgZG9uJ3Qgc2V0dXAgR1VJRCByZWdpc3RlciBvbiByZXN1bWUgZnJvbSByYW0gICovCisJaWYgKCFyZWdfcmVhZChvaGNpLCBPSENJMTM5NF9HVUlETG8pICYmCisJCQkJCSFyZWdfcmVhZChvaGNpLCBPSENJMTM5NF9HVUlESGkpKSB7CisJCXJlZ193cml0ZShvaGNpLCBPSENJMTM5NF9HVUlETG8sICh1MzIpb2hjaS0+Y2FyZC5ndWlkKTsKKwkJcmVnX3dyaXRlKG9oY2ksIE9IQ0kxMzk0X0dVSURIaSwgKHUzMikob2hjaS0+Y2FyZC5ndWlkID4+IDMyKSk7CisJfQorCisJZXJyID0gb2hjaV9lbmFibGUoJm9oY2ktPmNhcmQsIE5VTEwsIDApOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlvaGNpX3Jlc3VtZV9pc29fZG1hKG9oY2kpOworCisJcmV0dXJuIDA7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL0tjb25maWcgYi9kcml2ZXJzL2dwaW8vS2NvbmZpZwppbmRleCAzMTQzYWM3Li4wODI0OTViIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vS2NvbmZpZworKysgYi9kcml2ZXJzL2dwaW8vS2NvbmZpZwpAQCAtMjMwLDExICsyMzAsMTEgQEAKIAkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgR1BJT3MgZm91bmQgb24gdGhlIFNUTVBFIEkvTwogCSAgRXhwYW5kZXJzLgogCi1jb25maWcgR1BJT19UQzM1ODkyCi0JYm9vbCAiVEMzNTg5MiBHUElPcyIKLQlkZXBlbmRzIG9uIE1GRF9UQzM1ODkyCitjb25maWcgR1BJT19UQzM1ODlYCisJYm9vbCAiVEMzNTg5WCBHUElPcyIKKwlkZXBlbmRzIG9uIE1GRF9UQzM1ODlYCiAJaGVscAotCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBHUElPcyBmb3VuZCBvbiB0aGUgVEMzNTg5MgorCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBHUElPcyBmb3VuZCBvbiB0aGUgVEMzNTg5WAogCSAgSS9PIEV4cGFuZGVyLgogCiBjb25maWcgR1BJT19UV0w0MDMwCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vTWFrZWZpbGUgYi9kcml2ZXJzL2dwaW8vTWFrZWZpbGUKaW5kZXggYmRmM2RkZS4uMzliZmQ3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3Bpby9NYWtlZmlsZQpAQCAtMjQsNyArMjQsNyBAQAogb2JqLSQoQ09ORklHX0dQSU9fUENIKQkJKz0gcGNoX2dwaW8ubwogb2JqLSQoQ09ORklHX0dQSU9fUEwwNjEpCSs9IHBsMDYxLm8KIG9iai0kKENPTkZJR19HUElPX1NUTVBFKQkrPSBzdG1wZS1ncGlvLm8KLW9iai0kKENPTkZJR19HUElPX1RDMzU4OTIpCSs9IHRjMzU4OTItZ3Bpby5vCitvYmotJChDT05GSUdfR1BJT19UQzM1ODlYKQkrPSB0YzM1ODl4LWdwaW8ubwogb2JqLSQoQ09ORklHX0dQSU9fVElNQkVSREFMRSkJKz0gdGltYmdwaW8ubwogb2JqLSQoQ09ORklHX0dQSU9fVFdMNDAzMCkJKz0gdHdsNDAzMC1ncGlvLm8KIG9iai0kKENPTkZJR19HUElPX1VDQjE0MDApCSs9IHVjYjE0MDBfZ3Bpby5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vdGMzNTg5Mi1ncGlvLmMgYi9kcml2ZXJzL2dwaW8vdGMzNTg5Mi1ncGlvLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlMTBjOTMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncGlvL3RjMzU4OTItZ3Bpby5jCisrKyAvZGV2L251bGwKQEAgLTEsMzg5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIFNULUVyaWNzc29uIFNBIDIwMTAKLSAqCi0gKiBMaWNlbnNlIFRlcm1zOiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyCi0gKiBBdXRob3I6IEhhbnVtYXRoIFByYXNhZCA8aGFudW1hdGgucHJhc2FkQHN0ZXJpY3Nzb24uY29tPiBmb3IgU1QtRXJpY3Nzb24KLSAqIEF1dGhvcjogUmFiaW4gVmluY2VudCA8cmFiaW4udmluY2VudEBzdGVyaWNzc29uLmNvbT4gZm9yIFNULUVyaWNzc29uCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L21mZC90YzM1ODkyLmg+Ci0KLS8qCi0gKiBUaGVzZSByZWdpc3RlcnMgYXJlIG1vZGlmaWVkIHVuZGVyIHRoZSBpcnEgYnVzIGxvY2sgYW5kIGNhY2hlZCB0byBhdm9pZAotICogdW5uZWNlc3Nhcnkgd3JpdGVzIGluIGJ1c19zeW5jX3VubG9jay4KLSAqLwotZW51bSB7IFJFR19JQkUsIFJFR19JRVYsIFJFR19JUywgUkVHX0lFIH07Ci0KLSNkZWZpbmUgQ0FDSEVfTlJfUkVHUwk0Ci0jZGVmaW5lIENBQ0hFX05SX0JBTktTCTMKLQotc3RydWN0IHRjMzU4OTJfZ3BpbyB7Ci0Jc3RydWN0IGdwaW9fY2hpcCBjaGlwOwotCXN0cnVjdCB0YzM1ODkyICp0YzM1ODkyOwotCXN0cnVjdCBkZXZpY2UgKmRldjsKLQlzdHJ1Y3QgbXV0ZXggaXJxX2xvY2s7Ci0KLQlpbnQgaXJxX2Jhc2U7Ci0KLQkvKiBDYWNoZXMgb2YgaW50ZXJydXB0IGNvbnRyb2wgcmVnaXN0ZXJzIGZvciBidXNfbG9jayAqLwotCXU4IHJlZ3NbQ0FDSEVfTlJfUkVHU11bQ0FDSEVfTlJfQkFOS1NdOwotCXU4IG9sZHJlZ3NbQ0FDSEVfTlJfUkVHU11bQ0FDSEVfTlJfQkFOS1NdOwotfTsKLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgdGMzNTg5Ml9ncGlvICp0b190YzM1ODkyX2dwaW8oc3RydWN0IGdwaW9fY2hpcCAqY2hpcCkKLXsKLQlyZXR1cm4gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCB0YzM1ODkyX2dwaW8sIGNoaXApOwotfQotCi1zdGF0aWMgaW50IHRjMzU4OTJfZ3Bpb19nZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQotewotCXN0cnVjdCB0YzM1ODkyX2dwaW8gKnRjMzU4OTJfZ3BpbyA9IHRvX3RjMzU4OTJfZ3BpbyhjaGlwKTsKLQlzdHJ1Y3QgdGMzNTg5MiAqdGMzNTg5MiA9IHRjMzU4OTJfZ3Bpby0+dGMzNTg5MjsKLQl1OCByZWcgPSBUQzM1ODkyX0dQSU9EQVRBMCArIChvZmZzZXQgLyA4KSAqIDI7Ci0JdTggbWFzayA9IDEgPDwgKG9mZnNldCAlIDgpOwotCWludCByZXQ7Ci0KLQlyZXQgPSB0YzM1ODkyX3JlZ19yZWFkKHRjMzU4OTIsIHJlZyk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXR1cm4gcmV0ICYgbWFzazsKLX0KLQotc3RhdGljIHZvaWQgdGMzNTg5Ml9ncGlvX3NldChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQsIGludCB2YWwpCi17Ci0Jc3RydWN0IHRjMzU4OTJfZ3BpbyAqdGMzNTg5Ml9ncGlvID0gdG9fdGMzNTg5Ml9ncGlvKGNoaXApOwotCXN0cnVjdCB0YzM1ODkyICp0YzM1ODkyID0gdGMzNTg5Ml9ncGlvLT50YzM1ODkyOwotCXU4IHJlZyA9IFRDMzU4OTJfR1BJT0RBVEEwICsgKG9mZnNldCAvIDgpICogMjsKLQl1bnNpZ25lZCBwb3MgPSBvZmZzZXQgJSA4OwotCXU4IGRhdGFbXSA9IHshIXZhbCA8PCBwb3MsIDEgPDwgcG9zfTsKLQotCXRjMzU4OTJfYmxvY2tfd3JpdGUodGMzNTg5MiwgcmVnLCBBUlJBWV9TSVpFKGRhdGEpLCBkYXRhKTsKLX0KLQotc3RhdGljIGludCB0YzM1ODkyX2dwaW9fZGlyZWN0aW9uX291dHB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAotCQkJCQkgdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsKQotewotCXN0cnVjdCB0YzM1ODkyX2dwaW8gKnRjMzU4OTJfZ3BpbyA9IHRvX3RjMzU4OTJfZ3BpbyhjaGlwKTsKLQlzdHJ1Y3QgdGMzNTg5MiAqdGMzNTg5MiA9IHRjMzU4OTJfZ3Bpby0+dGMzNTg5MjsKLQl1OCByZWcgPSBUQzM1ODkyX0dQSU9ESVIwICsgb2Zmc2V0IC8gODsKLQl1bnNpZ25lZCBwb3MgPSBvZmZzZXQgJSA4OwotCi0JdGMzNTg5Ml9ncGlvX3NldChjaGlwLCBvZmZzZXQsIHZhbCk7Ci0KLQlyZXR1cm4gdGMzNTg5Ml9zZXRfYml0cyh0YzM1ODkyLCByZWcsIDEgPDwgcG9zLCAxIDw8IHBvcyk7Ci19Ci0KLXN0YXRpYyBpbnQgdGMzNTg5Ml9ncGlvX2RpcmVjdGlvbl9pbnB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAotCQkJCQl1bnNpZ25lZCBvZmZzZXQpCi17Ci0Jc3RydWN0IHRjMzU4OTJfZ3BpbyAqdGMzNTg5Ml9ncGlvID0gdG9fdGMzNTg5Ml9ncGlvKGNoaXApOwotCXN0cnVjdCB0YzM1ODkyICp0YzM1ODkyID0gdGMzNTg5Ml9ncGlvLT50YzM1ODkyOwotCXU4IHJlZyA9IFRDMzU4OTJfR1BJT0RJUjAgKyBvZmZzZXQgLyA4OwotCXVuc2lnbmVkIHBvcyA9IG9mZnNldCAlIDg7Ci0KLQlyZXR1cm4gdGMzNTg5Ml9zZXRfYml0cyh0YzM1ODkyLCByZWcsIDEgPDwgcG9zLCAwKTsKLX0KLQotc3RhdGljIGludCB0YzM1ODkyX2dwaW9fdG9faXJxKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKLXsKLQlzdHJ1Y3QgdGMzNTg5Ml9ncGlvICp0YzM1ODkyX2dwaW8gPSB0b190YzM1ODkyX2dwaW8oY2hpcCk7Ci0KLQlyZXR1cm4gdGMzNTg5Ml9ncGlvLT5pcnFfYmFzZSArIG9mZnNldDsKLX0KLQotc3RhdGljIHN0cnVjdCBncGlvX2NoaXAgdGVtcGxhdGVfY2hpcCA9IHsKLQkubGFiZWwJCQk9ICJ0YzM1ODkyIiwKLQkub3duZXIJCQk9IFRISVNfTU9EVUxFLAotCS5kaXJlY3Rpb25faW5wdXQJPSB0YzM1ODkyX2dwaW9fZGlyZWN0aW9uX2lucHV0LAotCS5nZXQJCQk9IHRjMzU4OTJfZ3Bpb19nZXQsCi0JLmRpcmVjdGlvbl9vdXRwdXQJPSB0YzM1ODkyX2dwaW9fZGlyZWN0aW9uX291dHB1dCwKLQkuc2V0CQkJPSB0YzM1ODkyX2dwaW9fc2V0LAotCS50b19pcnEJCQk9IHRjMzU4OTJfZ3Bpb190b19pcnEsCi0JLmNhbl9zbGVlcAkJPSAxLAotfTsKLQotc3RhdGljIGludCB0YzM1ODkyX2dwaW9faXJxX3NldF90eXBlKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCB0eXBlKQotewotCXN0cnVjdCB0YzM1ODkyX2dwaW8gKnRjMzU4OTJfZ3BpbyA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7Ci0JaW50IG9mZnNldCA9IGlycSAtIHRjMzU4OTJfZ3Bpby0+aXJxX2Jhc2U7Ci0JaW50IHJlZ29mZnNldCA9IG9mZnNldCAvIDg7Ci0JaW50IG1hc2sgPSAxIDw8IChvZmZzZXQgJSA4KTsKLQotCWlmICh0eXBlID09IElSUV9UWVBFX0VER0VfQk9USCkgewotCQl0YzM1ODkyX2dwaW8tPnJlZ3NbUkVHX0lCRV1bcmVnb2Zmc2V0XSB8PSBtYXNrOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQl0YzM1ODkyX2dwaW8tPnJlZ3NbUkVHX0lCRV1bcmVnb2Zmc2V0XSAmPSB+bWFzazsKLQotCWlmICh0eXBlID09IElSUV9UWVBFX0xFVkVMX0xPVyB8fCB0eXBlID09IElSUV9UWVBFX0xFVkVMX0hJR0gpCi0JCXRjMzU4OTJfZ3Bpby0+cmVnc1tSRUdfSVNdW3JlZ29mZnNldF0gfD0gbWFzazsKLQllbHNlCi0JCXRjMzU4OTJfZ3Bpby0+cmVnc1tSRUdfSVNdW3JlZ29mZnNldF0gJj0gfm1hc2s7Ci0KLQlpZiAodHlwZSA9PSBJUlFfVFlQRV9FREdFX1JJU0lORyB8fCB0eXBlID09IElSUV9UWVBFX0xFVkVMX0hJR0gpCi0JCXRjMzU4OTJfZ3Bpby0+cmVnc1tSRUdfSUVWXVtyZWdvZmZzZXRdIHw9IG1hc2s7Ci0JZWxzZQotCQl0YzM1ODkyX2dwaW8tPnJlZ3NbUkVHX0lFVl1bcmVnb2Zmc2V0XSAmPSB+bWFzazsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCB0YzM1ODkyX2dwaW9faXJxX2xvY2sodW5zaWduZWQgaW50IGlycSkKLXsKLQlzdHJ1Y3QgdGMzNTg5Ml9ncGlvICp0YzM1ODkyX2dwaW8gPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOwotCi0JbXV0ZXhfbG9jaygmdGMzNTg5Ml9ncGlvLT5pcnFfbG9jayk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRjMzU4OTJfZ3Bpb19pcnFfc3luY191bmxvY2sodW5zaWduZWQgaW50IGlycSkKLXsKLQlzdHJ1Y3QgdGMzNTg5Ml9ncGlvICp0YzM1ODkyX2dwaW8gPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOwotCXN0cnVjdCB0YzM1ODkyICp0YzM1ODkyID0gdGMzNTg5Ml9ncGlvLT50YzM1ODkyOwotCXN0YXRpYyBjb25zdCB1OCByZWdtYXBbXSA9IHsKLQkJW1JFR19JQkVdCT0gVEMzNTg5Ml9HUElPSUJFMCwKLQkJW1JFR19JRVZdCT0gVEMzNTg5Ml9HUElPSUVWMCwKLQkJW1JFR19JU10JPSBUQzM1ODkyX0dQSU9JUzAsCi0JCVtSRUdfSUVdCT0gVEMzNTg5Ml9HUElPSUUwLAotCX07Ci0JaW50IGksIGo7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQ0FDSEVfTlJfUkVHUzsgaSsrKSB7Ci0JCWZvciAoaiA9IDA7IGogPCBDQUNIRV9OUl9CQU5LUzsgaisrKSB7Ci0JCQl1OCBvbGQgPSB0YzM1ODkyX2dwaW8tPm9sZHJlZ3NbaV1bal07Ci0JCQl1OCBuZXcgPSB0YzM1ODkyX2dwaW8tPnJlZ3NbaV1bal07Ci0KLQkJCWlmIChuZXcgPT0gb2xkKQotCQkJCWNvbnRpbnVlOwotCi0JCQl0YzM1ODkyX2dwaW8tPm9sZHJlZ3NbaV1bal0gPSBuZXc7Ci0JCQl0YzM1ODkyX3JlZ193cml0ZSh0YzM1ODkyLCByZWdtYXBbaV0gKyBqICogOCwgbmV3KTsKLQkJfQotCX0KLQotCW11dGV4X3VubG9jaygmdGMzNTg5Ml9ncGlvLT5pcnFfbG9jayk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRjMzU4OTJfZ3Bpb19pcnFfbWFzayh1bnNpZ25lZCBpbnQgaXJxKQotewotCXN0cnVjdCB0YzM1ODkyX2dwaW8gKnRjMzU4OTJfZ3BpbyA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7Ci0JaW50IG9mZnNldCA9IGlycSAtIHRjMzU4OTJfZ3Bpby0+aXJxX2Jhc2U7Ci0JaW50IHJlZ29mZnNldCA9IG9mZnNldCAvIDg7Ci0JaW50IG1hc2sgPSAxIDw8IChvZmZzZXQgJSA4KTsKLQotCXRjMzU4OTJfZ3Bpby0+cmVnc1tSRUdfSUVdW3JlZ29mZnNldF0gJj0gfm1hc2s7Ci19Ci0KLXN0YXRpYyB2b2lkIHRjMzU4OTJfZ3Bpb19pcnFfdW5tYXNrKHVuc2lnbmVkIGludCBpcnEpCi17Ci0Jc3RydWN0IHRjMzU4OTJfZ3BpbyAqdGMzNTg5Ml9ncGlvID0gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKLQlpbnQgb2Zmc2V0ID0gaXJxIC0gdGMzNTg5Ml9ncGlvLT5pcnFfYmFzZTsKLQlpbnQgcmVnb2Zmc2V0ID0gb2Zmc2V0IC8gODsKLQlpbnQgbWFzayA9IDEgPDwgKG9mZnNldCAlIDgpOwotCi0JdGMzNTg5Ml9ncGlvLT5yZWdzW1JFR19JRV1bcmVnb2Zmc2V0XSB8PSBtYXNrOwotfQotCi1zdGF0aWMgc3RydWN0IGlycV9jaGlwIHRjMzU4OTJfZ3Bpb19pcnFfY2hpcCA9IHsKLQkubmFtZQkJCT0gInRjMzU4OTItZ3BpbyIsCi0JLmJ1c19sb2NrCQk9IHRjMzU4OTJfZ3Bpb19pcnFfbG9jaywKLQkuYnVzX3N5bmNfdW5sb2NrCT0gdGMzNTg5Ml9ncGlvX2lycV9zeW5jX3VubG9jaywKLQkubWFzawkJCT0gdGMzNTg5Ml9ncGlvX2lycV9tYXNrLAotCS51bm1hc2sJCQk9IHRjMzU4OTJfZ3Bpb19pcnFfdW5tYXNrLAotCS5zZXRfdHlwZQkJPSB0YzM1ODkyX2dwaW9faXJxX3NldF90eXBlLAotfTsKLQotc3RhdGljIGlycXJldHVybl90IHRjMzU4OTJfZ3Bpb19pcnEoaW50IGlycSwgdm9pZCAqZGV2KQotewotCXN0cnVjdCB0YzM1ODkyX2dwaW8gKnRjMzU4OTJfZ3BpbyA9IGRldjsKLQlzdHJ1Y3QgdGMzNTg5MiAqdGMzNTg5MiA9IHRjMzU4OTJfZ3Bpby0+dGMzNTg5MjsKLQl1OCBzdGF0dXNbQ0FDSEVfTlJfQkFOS1NdOwotCWludCByZXQ7Ci0JaW50IGk7Ci0KLQlyZXQgPSB0YzM1ODkyX2Jsb2NrX3JlYWQodGMzNTg5MiwgVEMzNTg5Ml9HUElPTUlTMCwKLQkJCQkgQVJSQVlfU0laRShzdGF0dXMpLCBzdGF0dXMpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gSVJRX05PTkU7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzdGF0dXMpOyBpKyspIHsKLQkJdW5zaWduZWQgaW50IHN0YXQgPSBzdGF0dXNbaV07Ci0JCWlmICghc3RhdCkKLQkJCWNvbnRpbnVlOwotCi0JCXdoaWxlIChzdGF0KSB7Ci0JCQlpbnQgYml0ID0gX19mZnMoc3RhdCk7Ci0JCQlpbnQgbGluZSA9IGkgKiA4ICsgYml0OwotCi0JCQloYW5kbGVfbmVzdGVkX2lycSh0YzM1ODkyX2dwaW8tPmlycV9iYXNlICsgbGluZSk7Ci0JCQlzdGF0ICY9IH4oMSA8PCBiaXQpOwotCQl9Ci0KLQkJdGMzNTg5Ml9yZWdfd3JpdGUodGMzNTg5MiwgVEMzNTg5Ml9HUElPSUMwICsgaSwgc3RhdHVzW2ldKTsKLQl9Ci0KLQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci19Ci0KLXN0YXRpYyBpbnQgdGMzNTg5Ml9ncGlvX2lycV9pbml0KHN0cnVjdCB0YzM1ODkyX2dwaW8gKnRjMzU4OTJfZ3BpbykKLXsKLQlpbnQgYmFzZSA9IHRjMzU4OTJfZ3Bpby0+aXJxX2Jhc2U7Ci0JaW50IGlycTsKLQotCWZvciAoaXJxID0gYmFzZTsgaXJxIDwgYmFzZSArIHRjMzU4OTJfZ3Bpby0+Y2hpcC5uZ3BpbzsgaXJxKyspIHsKLQkJc2V0X2lycV9jaGlwX2RhdGEoaXJxLCB0YzM1ODkyX2dwaW8pOwotCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaXJxLCAmdGMzNTg5Ml9ncGlvX2lycV9jaGlwLAotCQkJCQkgaGFuZGxlX3NpbXBsZV9pcnEpOwotCQlzZXRfaXJxX25lc3RlZF90aHJlYWQoaXJxLCAxKTsKLSNpZmRlZiBDT05GSUdfQVJNCi0JCXNldF9pcnFfZmxhZ3MoaXJxLCBJUlFGX1ZBTElEKTsKLSNlbHNlCi0JCXNldF9pcnFfbm9wcm9iZShpcnEpOwotI2VuZGlmCi0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHRjMzU4OTJfZ3Bpb19pcnFfcmVtb3ZlKHN0cnVjdCB0YzM1ODkyX2dwaW8gKnRjMzU4OTJfZ3BpbykKLXsKLQlpbnQgYmFzZSA9IHRjMzU4OTJfZ3Bpby0+aXJxX2Jhc2U7Ci0JaW50IGlycTsKLQotCWZvciAoaXJxID0gYmFzZTsgaXJxIDwgYmFzZSArIHRjMzU4OTJfZ3Bpby0+Y2hpcC5uZ3BpbzsgaXJxKyspIHsKLSNpZmRlZiBDT05GSUdfQVJNCi0JCXNldF9pcnFfZmxhZ3MoaXJxLCAwKTsKLSNlbmRpZgotCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaXJxLCBOVUxMLCBOVUxMKTsKLQkJc2V0X2lycV9jaGlwX2RhdGEoaXJxLCBOVUxMKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgX19kZXZpbml0IHRjMzU4OTJfZ3Bpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCXN0cnVjdCB0YzM1ODkyICp0YzM1ODkyID0gZGV2X2dldF9kcnZkYXRhKHBkZXYtPmRldi5wYXJlbnQpOwotCXN0cnVjdCB0YzM1ODkyX2dwaW9fcGxhdGZvcm1fZGF0YSAqcGRhdGE7Ci0Jc3RydWN0IHRjMzU4OTJfZ3BpbyAqdGMzNTg5Ml9ncGlvOwotCWludCByZXQ7Ci0JaW50IGlycTsKLQotCXBkYXRhID0gdGMzNTg5Mi0+cGRhdGEtPmdwaW87Ci0JaWYgKCFwZGF0YSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwotCWlmIChpcnEgPCAwKQotCQlyZXR1cm4gaXJxOwotCi0JdGMzNTg5Ml9ncGlvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHRjMzU4OTJfZ3BpbyksIEdGUF9LRVJORUwpOwotCWlmICghdGMzNTg5Ml9ncGlvKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCW11dGV4X2luaXQoJnRjMzU4OTJfZ3Bpby0+aXJxX2xvY2spOwotCi0JdGMzNTg5Ml9ncGlvLT5kZXYgPSAmcGRldi0+ZGV2OwotCXRjMzU4OTJfZ3Bpby0+dGMzNTg5MiA9IHRjMzU4OTI7Ci0KLQl0YzM1ODkyX2dwaW8tPmNoaXAgPSB0ZW1wbGF0ZV9jaGlwOwotCXRjMzU4OTJfZ3Bpby0+Y2hpcC5uZ3BpbyA9IHRjMzU4OTItPm51bV9ncGlvOwotCXRjMzU4OTJfZ3Bpby0+Y2hpcC5kZXYgPSAmcGRldi0+ZGV2OwotCXRjMzU4OTJfZ3Bpby0+Y2hpcC5iYXNlID0gcGRhdGEtPmdwaW9fYmFzZTsKLQotCXRjMzU4OTJfZ3Bpby0+aXJxX2Jhc2UgPSB0YzM1ODkyLT5pcnFfYmFzZSArIFRDMzU4OTJfSU5UX0dQSU8oMCk7Ci0KLQkvKiBCcmluZyB0aGUgR1BJTyBtb2R1bGUgb3V0IG9mIHJlc2V0ICovCi0JcmV0ID0gdGMzNTg5Ml9zZXRfYml0cyh0YzM1ODkyLCBUQzM1ODkyX1JTVENUUkwsCi0JCQkgICAgICAgVEMzNTg5Ml9SU1RDVFJMX0dQSVJTVCwgMCk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gb3V0X2ZyZWU7Ci0KLQlyZXQgPSB0YzM1ODkyX2dwaW9faXJxX2luaXQodGMzNTg5Ml9ncGlvKTsKLQlpZiAocmV0KQotCQlnb3RvIG91dF9mcmVlOwotCi0JcmV0ID0gcmVxdWVzdF90aHJlYWRlZF9pcnEoaXJxLCBOVUxMLCB0YzM1ODkyX2dwaW9faXJxLCBJUlFGX09ORVNIT1QsCi0JCQkJICAgInRjMzU4OTItZ3BpbyIsIHRjMzU4OTJfZ3Bpbyk7Ci0JaWYgKHJldCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJ1bmFibGUgdG8gZ2V0IGlycTogJWRcbiIsIHJldCk7Ci0JCWdvdG8gb3V0X3JlbW92ZWlycTsKLQl9Ci0KLQlyZXQgPSBncGlvY2hpcF9hZGQoJnRjMzU4OTJfZ3Bpby0+Y2hpcCk7Ci0JaWYgKHJldCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJ1bmFibGUgdG8gYWRkIGdwaW9jaGlwOiAlZFxuIiwgcmV0KTsKLQkJZ290byBvdXRfZnJlZWlycTsKLQl9Ci0KLQlpZiAocGRhdGEtPnNldHVwKQotCQlwZGF0YS0+c2V0dXAodGMzNTg5MiwgdGMzNTg5Ml9ncGlvLT5jaGlwLmJhc2UpOwotCi0JcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgdGMzNTg5Ml9ncGlvKTsKLQotCXJldHVybiAwOwotCi1vdXRfZnJlZWlycToKLQlmcmVlX2lycShpcnEsIHRjMzU4OTJfZ3Bpbyk7Ci1vdXRfcmVtb3ZlaXJxOgotCXRjMzU4OTJfZ3Bpb19pcnFfcmVtb3ZlKHRjMzU4OTJfZ3Bpbyk7Ci1vdXRfZnJlZToKLQlrZnJlZSh0YzM1ODkyX2dwaW8pOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgX19kZXZleGl0IHRjMzU4OTJfZ3Bpb19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQlzdHJ1Y3QgdGMzNTg5Ml9ncGlvICp0YzM1ODkyX2dwaW8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3QgdGMzNTg5MiAqdGMzNTg5MiA9IHRjMzU4OTJfZ3Bpby0+dGMzNTg5MjsKLQlzdHJ1Y3QgdGMzNTg5Ml9ncGlvX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gdGMzNTg5Mi0+cGRhdGEtPmdwaW87Ci0JaW50IGlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7Ci0JaW50IHJldDsKLQotCWlmIChwZGF0YS0+cmVtb3ZlKQotCQlwZGF0YS0+cmVtb3ZlKHRjMzU4OTIsIHRjMzU4OTJfZ3Bpby0+Y2hpcC5iYXNlKTsKLQotCXJldCA9IGdwaW9jaGlwX3JlbW92ZSgmdGMzNTg5Ml9ncGlvLT5jaGlwKTsKLQlpZiAocmV0IDwgMCkgewotCQlkZXZfZXJyKHRjMzU4OTJfZ3Bpby0+ZGV2LAotCQkJInVuYWJsZSB0byByZW1vdmUgZ3Bpb2NoaXA6ICVkXG4iLCByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCWZyZWVfaXJxKGlycSwgdGMzNTg5Ml9ncGlvKTsKLQl0YzM1ODkyX2dwaW9faXJxX3JlbW92ZSh0YzM1ODkyX2dwaW8pOwotCi0JcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7Ci0Ja2ZyZWUodGMzNTg5Ml9ncGlvKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB0YzM1ODkyX2dwaW9fZHJpdmVyID0gewotCS5kcml2ZXIubmFtZQk9ICJ0YzM1ODkyLWdwaW8iLAotCS5kcml2ZXIub3duZXIJPSBUSElTX01PRFVMRSwKLQkucHJvYmUJCT0gdGMzNTg5Ml9ncGlvX3Byb2JlLAotCS5yZW1vdmUJCT0gX19kZXZleGl0X3AodGMzNTg5Ml9ncGlvX3JlbW92ZSksCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCB0YzM1ODkyX2dwaW9faW5pdCh2b2lkKQotewotCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnRjMzU4OTJfZ3Bpb19kcml2ZXIpOwotfQotc3Vic3lzX2luaXRjYWxsKHRjMzU4OTJfZ3Bpb19pbml0KTsKLQotc3RhdGljIHZvaWQgX19leGl0IHRjMzU4OTJfZ3Bpb19leGl0KHZvaWQpCi17Ci0JcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnRjMzU4OTJfZ3Bpb19kcml2ZXIpOwotfQotbW9kdWxlX2V4aXQodGMzNTg5Ml9ncGlvX2V4aXQpOwotCi1NT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIlRDMzU4OTIgR1BJTyBkcml2ZXIiKTsKLU1PRFVMRV9BVVRIT1IoIkhhbnVtYXRoIFByYXNhZCwgUmFiaW4gVmluY2VudCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL3RjMzU4OXgtZ3Bpby5jIGIvZHJpdmVycy9ncGlvL3RjMzU4OXgtZ3Bpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4MGQ1ODQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwaW8vdGMzNTg5eC1ncGlvLmMKQEAgLTAsMCArMSwzODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIFNULUVyaWNzc29uIFNBIDIwMTAKKyAqCisgKiBMaWNlbnNlIFRlcm1zOiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyCisgKiBBdXRob3I6IEhhbnVtYXRoIFByYXNhZCA8aGFudW1hdGgucHJhc2FkQHN0ZXJpY3Nzb24uY29tPiBmb3IgU1QtRXJpY3Nzb24KKyAqIEF1dGhvcjogUmFiaW4gVmluY2VudCA8cmFiaW4udmluY2VudEBzdGVyaWNzc29uLmNvbT4gZm9yIFNULUVyaWNzc29uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC90YzM1ODl4Lmg+CisKKy8qCisgKiBUaGVzZSByZWdpc3RlcnMgYXJlIG1vZGlmaWVkIHVuZGVyIHRoZSBpcnEgYnVzIGxvY2sgYW5kIGNhY2hlZCB0byBhdm9pZAorICogdW5uZWNlc3Nhcnkgd3JpdGVzIGluIGJ1c19zeW5jX3VubG9jay4KKyAqLworZW51bSB7IFJFR19JQkUsIFJFR19JRVYsIFJFR19JUywgUkVHX0lFIH07CisKKyNkZWZpbmUgQ0FDSEVfTlJfUkVHUwk0CisjZGVmaW5lIENBQ0hFX05SX0JBTktTCTMKKworc3RydWN0IHRjMzU4OXhfZ3BpbyB7CisJc3RydWN0IGdwaW9fY2hpcCBjaGlwOworCXN0cnVjdCB0YzM1ODl4ICp0YzM1ODl4OworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgbXV0ZXggaXJxX2xvY2s7CisKKwlpbnQgaXJxX2Jhc2U7CisKKwkvKiBDYWNoZXMgb2YgaW50ZXJydXB0IGNvbnRyb2wgcmVnaXN0ZXJzIGZvciBidXNfbG9jayAqLworCXU4IHJlZ3NbQ0FDSEVfTlJfUkVHU11bQ0FDSEVfTlJfQkFOS1NdOworCXU4IG9sZHJlZ3NbQ0FDSEVfTlJfUkVHU11bQ0FDSEVfTlJfQkFOS1NdOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdGMzNTg5eF9ncGlvICp0b190YzM1ODl4X2dwaW8oc3RydWN0IGdwaW9fY2hpcCAqY2hpcCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCB0YzM1ODl4X2dwaW8sIGNoaXApOworfQorCitzdGF0aWMgaW50IHRjMzU4OXhfZ3Bpb19nZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQoreworCXN0cnVjdCB0YzM1ODl4X2dwaW8gKnRjMzU4OXhfZ3BpbyA9IHRvX3RjMzU4OXhfZ3BpbyhjaGlwKTsKKwlzdHJ1Y3QgdGMzNTg5eCAqdGMzNTg5eCA9IHRjMzU4OXhfZ3Bpby0+dGMzNTg5eDsKKwl1OCByZWcgPSBUQzM1ODl4X0dQSU9EQVRBMCArIChvZmZzZXQgLyA4KSAqIDI7CisJdTggbWFzayA9IDEgPDwgKG9mZnNldCAlIDgpOworCWludCByZXQ7CisKKwlyZXQgPSB0YzM1ODl4X3JlZ19yZWFkKHRjMzU4OXgsIHJlZyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gcmV0ICYgbWFzazsKK30KKworc3RhdGljIHZvaWQgdGMzNTg5eF9ncGlvX3NldChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQsIGludCB2YWwpCit7CisJc3RydWN0IHRjMzU4OXhfZ3BpbyAqdGMzNTg5eF9ncGlvID0gdG9fdGMzNTg5eF9ncGlvKGNoaXApOworCXN0cnVjdCB0YzM1ODl4ICp0YzM1ODl4ID0gdGMzNTg5eF9ncGlvLT50YzM1ODl4OworCXU4IHJlZyA9IFRDMzU4OXhfR1BJT0RBVEEwICsgKG9mZnNldCAvIDgpICogMjsKKwl1bnNpZ25lZCBwb3MgPSBvZmZzZXQgJSA4OworCXU4IGRhdGFbXSA9IHshIXZhbCA8PCBwb3MsIDEgPDwgcG9zfTsKKworCXRjMzU4OXhfYmxvY2tfd3JpdGUodGMzNTg5eCwgcmVnLCBBUlJBWV9TSVpFKGRhdGEpLCBkYXRhKTsKK30KKworc3RhdGljIGludCB0YzM1ODl4X2dwaW9fZGlyZWN0aW9uX291dHB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAorCQkJCQkgdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsKQoreworCXN0cnVjdCB0YzM1ODl4X2dwaW8gKnRjMzU4OXhfZ3BpbyA9IHRvX3RjMzU4OXhfZ3BpbyhjaGlwKTsKKwlzdHJ1Y3QgdGMzNTg5eCAqdGMzNTg5eCA9IHRjMzU4OXhfZ3Bpby0+dGMzNTg5eDsKKwl1OCByZWcgPSBUQzM1ODl4X0dQSU9ESVIwICsgb2Zmc2V0IC8gODsKKwl1bnNpZ25lZCBwb3MgPSBvZmZzZXQgJSA4OworCisJdGMzNTg5eF9ncGlvX3NldChjaGlwLCBvZmZzZXQsIHZhbCk7CisKKwlyZXR1cm4gdGMzNTg5eF9zZXRfYml0cyh0YzM1ODl4LCByZWcsIDEgPDwgcG9zLCAxIDw8IHBvcyk7Cit9CisKK3N0YXRpYyBpbnQgdGMzNTg5eF9ncGlvX2RpcmVjdGlvbl9pbnB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAorCQkJCQl1bnNpZ25lZCBvZmZzZXQpCit7CisJc3RydWN0IHRjMzU4OXhfZ3BpbyAqdGMzNTg5eF9ncGlvID0gdG9fdGMzNTg5eF9ncGlvKGNoaXApOworCXN0cnVjdCB0YzM1ODl4ICp0YzM1ODl4ID0gdGMzNTg5eF9ncGlvLT50YzM1ODl4OworCXU4IHJlZyA9IFRDMzU4OXhfR1BJT0RJUjAgKyBvZmZzZXQgLyA4OworCXVuc2lnbmVkIHBvcyA9IG9mZnNldCAlIDg7CisKKwlyZXR1cm4gdGMzNTg5eF9zZXRfYml0cyh0YzM1ODl4LCByZWcsIDEgPDwgcG9zLCAwKTsKK30KKworc3RhdGljIGludCB0YzM1ODl4X2dwaW9fdG9faXJxKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKK3sKKwlzdHJ1Y3QgdGMzNTg5eF9ncGlvICp0YzM1ODl4X2dwaW8gPSB0b190YzM1ODl4X2dwaW8oY2hpcCk7CisKKwlyZXR1cm4gdGMzNTg5eF9ncGlvLT5pcnFfYmFzZSArIG9mZnNldDsKK30KKworc3RhdGljIHN0cnVjdCBncGlvX2NoaXAgdGVtcGxhdGVfY2hpcCA9IHsKKwkubGFiZWwJCQk9ICJ0YzM1ODl4IiwKKwkub3duZXIJCQk9IFRISVNfTU9EVUxFLAorCS5kaXJlY3Rpb25faW5wdXQJPSB0YzM1ODl4X2dwaW9fZGlyZWN0aW9uX2lucHV0LAorCS5nZXQJCQk9IHRjMzU4OXhfZ3Bpb19nZXQsCisJLmRpcmVjdGlvbl9vdXRwdXQJPSB0YzM1ODl4X2dwaW9fZGlyZWN0aW9uX291dHB1dCwKKwkuc2V0CQkJPSB0YzM1ODl4X2dwaW9fc2V0LAorCS50b19pcnEJCQk9IHRjMzU4OXhfZ3Bpb190b19pcnEsCisJLmNhbl9zbGVlcAkJPSAxLAorfTsKKworc3RhdGljIGludCB0YzM1ODl4X2dwaW9faXJxX3NldF90eXBlKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCB0eXBlKQoreworCXN0cnVjdCB0YzM1ODl4X2dwaW8gKnRjMzU4OXhfZ3BpbyA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7CisJaW50IG9mZnNldCA9IGlycSAtIHRjMzU4OXhfZ3Bpby0+aXJxX2Jhc2U7CisJaW50IHJlZ29mZnNldCA9IG9mZnNldCAvIDg7CisJaW50IG1hc2sgPSAxIDw8IChvZmZzZXQgJSA4KTsKKworCWlmICh0eXBlID09IElSUV9UWVBFX0VER0VfQk9USCkgeworCQl0YzM1ODl4X2dwaW8tPnJlZ3NbUkVHX0lCRV1bcmVnb2Zmc2V0XSB8PSBtYXNrOworCQlyZXR1cm4gMDsKKwl9CisKKwl0YzM1ODl4X2dwaW8tPnJlZ3NbUkVHX0lCRV1bcmVnb2Zmc2V0XSAmPSB+bWFzazsKKworCWlmICh0eXBlID09IElSUV9UWVBFX0xFVkVMX0xPVyB8fCB0eXBlID09IElSUV9UWVBFX0xFVkVMX0hJR0gpCisJCXRjMzU4OXhfZ3Bpby0+cmVnc1tSRUdfSVNdW3JlZ29mZnNldF0gfD0gbWFzazsKKwllbHNlCisJCXRjMzU4OXhfZ3Bpby0+cmVnc1tSRUdfSVNdW3JlZ29mZnNldF0gJj0gfm1hc2s7CisKKwlpZiAodHlwZSA9PSBJUlFfVFlQRV9FREdFX1JJU0lORyB8fCB0eXBlID09IElSUV9UWVBFX0xFVkVMX0hJR0gpCisJCXRjMzU4OXhfZ3Bpby0+cmVnc1tSRUdfSUVWXVtyZWdvZmZzZXRdIHw9IG1hc2s7CisJZWxzZQorCQl0YzM1ODl4X2dwaW8tPnJlZ3NbUkVHX0lFVl1bcmVnb2Zmc2V0XSAmPSB+bWFzazsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB0YzM1ODl4X2dwaW9faXJxX2xvY2sodW5zaWduZWQgaW50IGlycSkKK3sKKwlzdHJ1Y3QgdGMzNTg5eF9ncGlvICp0YzM1ODl4X2dwaW8gPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOworCisJbXV0ZXhfbG9jaygmdGMzNTg5eF9ncGlvLT5pcnFfbG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIHRjMzU4OXhfZ3Bpb19pcnFfc3luY191bmxvY2sodW5zaWduZWQgaW50IGlycSkKK3sKKwlzdHJ1Y3QgdGMzNTg5eF9ncGlvICp0YzM1ODl4X2dwaW8gPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOworCXN0cnVjdCB0YzM1ODl4ICp0YzM1ODl4ID0gdGMzNTg5eF9ncGlvLT50YzM1ODl4OworCXN0YXRpYyBjb25zdCB1OCByZWdtYXBbXSA9IHsKKwkJW1JFR19JQkVdCT0gVEMzNTg5eF9HUElPSUJFMCwKKwkJW1JFR19JRVZdCT0gVEMzNTg5eF9HUElPSUVWMCwKKwkJW1JFR19JU10JPSBUQzM1ODl4X0dQSU9JUzAsCisJCVtSRUdfSUVdCT0gVEMzNTg5eF9HUElPSUUwLAorCX07CisJaW50IGksIGo7CisKKwlmb3IgKGkgPSAwOyBpIDwgQ0FDSEVfTlJfUkVHUzsgaSsrKSB7CisJCWZvciAoaiA9IDA7IGogPCBDQUNIRV9OUl9CQU5LUzsgaisrKSB7CisJCQl1OCBvbGQgPSB0YzM1ODl4X2dwaW8tPm9sZHJlZ3NbaV1bal07CisJCQl1OCBuZXcgPSB0YzM1ODl4X2dwaW8tPnJlZ3NbaV1bal07CisKKwkJCWlmIChuZXcgPT0gb2xkKQorCQkJCWNvbnRpbnVlOworCisJCQl0YzM1ODl4X2dwaW8tPm9sZHJlZ3NbaV1bal0gPSBuZXc7CisJCQl0YzM1ODl4X3JlZ193cml0ZSh0YzM1ODl4LCByZWdtYXBbaV0gKyBqICogOCwgbmV3KTsKKwkJfQorCX0KKworCW11dGV4X3VubG9jaygmdGMzNTg5eF9ncGlvLT5pcnFfbG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIHRjMzU4OXhfZ3Bpb19pcnFfbWFzayh1bnNpZ25lZCBpbnQgaXJxKQoreworCXN0cnVjdCB0YzM1ODl4X2dwaW8gKnRjMzU4OXhfZ3BpbyA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7CisJaW50IG9mZnNldCA9IGlycSAtIHRjMzU4OXhfZ3Bpby0+aXJxX2Jhc2U7CisJaW50IHJlZ29mZnNldCA9IG9mZnNldCAvIDg7CisJaW50IG1hc2sgPSAxIDw8IChvZmZzZXQgJSA4KTsKKworCXRjMzU4OXhfZ3Bpby0+cmVnc1tSRUdfSUVdW3JlZ29mZnNldF0gJj0gfm1hc2s7Cit9CisKK3N0YXRpYyB2b2lkIHRjMzU4OXhfZ3Bpb19pcnFfdW5tYXNrKHVuc2lnbmVkIGludCBpcnEpCit7CisJc3RydWN0IHRjMzU4OXhfZ3BpbyAqdGMzNTg5eF9ncGlvID0gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKKwlpbnQgb2Zmc2V0ID0gaXJxIC0gdGMzNTg5eF9ncGlvLT5pcnFfYmFzZTsKKwlpbnQgcmVnb2Zmc2V0ID0gb2Zmc2V0IC8gODsKKwlpbnQgbWFzayA9IDEgPDwgKG9mZnNldCAlIDgpOworCisJdGMzNTg5eF9ncGlvLT5yZWdzW1JFR19JRV1bcmVnb2Zmc2V0XSB8PSBtYXNrOworfQorCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIHRjMzU4OXhfZ3Bpb19pcnFfY2hpcCA9IHsKKwkubmFtZQkJCT0gInRjMzU4OXgtZ3BpbyIsCisJLmJ1c19sb2NrCQk9IHRjMzU4OXhfZ3Bpb19pcnFfbG9jaywKKwkuYnVzX3N5bmNfdW5sb2NrCT0gdGMzNTg5eF9ncGlvX2lycV9zeW5jX3VubG9jaywKKwkubWFzawkJCT0gdGMzNTg5eF9ncGlvX2lycV9tYXNrLAorCS51bm1hc2sJCQk9IHRjMzU4OXhfZ3Bpb19pcnFfdW5tYXNrLAorCS5zZXRfdHlwZQkJPSB0YzM1ODl4X2dwaW9faXJxX3NldF90eXBlLAorfTsKKworc3RhdGljIGlycXJldHVybl90IHRjMzU4OXhfZ3Bpb19pcnEoaW50IGlycSwgdm9pZCAqZGV2KQoreworCXN0cnVjdCB0YzM1ODl4X2dwaW8gKnRjMzU4OXhfZ3BpbyA9IGRldjsKKwlzdHJ1Y3QgdGMzNTg5eCAqdGMzNTg5eCA9IHRjMzU4OXhfZ3Bpby0+dGMzNTg5eDsKKwl1OCBzdGF0dXNbQ0FDSEVfTlJfQkFOS1NdOworCWludCByZXQ7CisJaW50IGk7CisKKwlyZXQgPSB0YzM1ODl4X2Jsb2NrX3JlYWQodGMzNTg5eCwgVEMzNTg5eF9HUElPTUlTMCwKKwkJCQkgQVJSQVlfU0laRShzdGF0dXMpLCBzdGF0dXMpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzdGF0dXMpOyBpKyspIHsKKwkJdW5zaWduZWQgaW50IHN0YXQgPSBzdGF0dXNbaV07CisJCWlmICghc3RhdCkKKwkJCWNvbnRpbnVlOworCisJCXdoaWxlIChzdGF0KSB7CisJCQlpbnQgYml0ID0gX19mZnMoc3RhdCk7CisJCQlpbnQgbGluZSA9IGkgKiA4ICsgYml0OworCisJCQloYW5kbGVfbmVzdGVkX2lycSh0YzM1ODl4X2dwaW8tPmlycV9iYXNlICsgbGluZSk7CisJCQlzdGF0ICY9IH4oMSA8PCBiaXQpOworCQl9CisKKwkJdGMzNTg5eF9yZWdfd3JpdGUodGMzNTg5eCwgVEMzNTg5eF9HUElPSUMwICsgaSwgc3RhdHVzW2ldKTsKKwl9CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgdGMzNTg5eF9ncGlvX2lycV9pbml0KHN0cnVjdCB0YzM1ODl4X2dwaW8gKnRjMzU4OXhfZ3BpbykKK3sKKwlpbnQgYmFzZSA9IHRjMzU4OXhfZ3Bpby0+aXJxX2Jhc2U7CisJaW50IGlycTsKKworCWZvciAoaXJxID0gYmFzZTsgaXJxIDwgYmFzZSArIHRjMzU4OXhfZ3Bpby0+Y2hpcC5uZ3BpbzsgaXJxKyspIHsKKwkJc2V0X2lycV9jaGlwX2RhdGEoaXJxLCB0YzM1ODl4X2dwaW8pOworCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaXJxLCAmdGMzNTg5eF9ncGlvX2lycV9jaGlwLAorCQkJCQkgaGFuZGxlX3NpbXBsZV9pcnEpOworCQlzZXRfaXJxX25lc3RlZF90aHJlYWQoaXJxLCAxKTsKKyNpZmRlZiBDT05GSUdfQVJNCisJCXNldF9pcnFfZmxhZ3MoaXJxLCBJUlFGX1ZBTElEKTsKKyNlbHNlCisJCXNldF9pcnFfbm9wcm9iZShpcnEpOworI2VuZGlmCisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHRjMzU4OXhfZ3Bpb19pcnFfcmVtb3ZlKHN0cnVjdCB0YzM1ODl4X2dwaW8gKnRjMzU4OXhfZ3BpbykKK3sKKwlpbnQgYmFzZSA9IHRjMzU4OXhfZ3Bpby0+aXJxX2Jhc2U7CisJaW50IGlycTsKKworCWZvciAoaXJxID0gYmFzZTsgaXJxIDwgYmFzZSArIHRjMzU4OXhfZ3Bpby0+Y2hpcC5uZ3BpbzsgaXJxKyspIHsKKyNpZmRlZiBDT05GSUdfQVJNCisJCXNldF9pcnFfZmxhZ3MoaXJxLCAwKTsKKyNlbmRpZgorCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaXJxLCBOVUxMLCBOVUxMKTsKKwkJc2V0X2lycV9jaGlwX2RhdGEoaXJxLCBOVUxMKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHRjMzU4OXhfZ3Bpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB0YzM1ODl4ICp0YzM1ODl4ID0gZGV2X2dldF9kcnZkYXRhKHBkZXYtPmRldi5wYXJlbnQpOworCXN0cnVjdCB0YzM1ODl4X2dwaW9fcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisJc3RydWN0IHRjMzU4OXhfZ3BpbyAqdGMzNTg5eF9ncGlvOworCWludCByZXQ7CisJaW50IGlycTsKKworCXBkYXRhID0gdGMzNTg5eC0+cGRhdGEtPmdwaW87CisJaWYgKCFwZGF0YSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChpcnEgPCAwKQorCQlyZXR1cm4gaXJxOworCisJdGMzNTg5eF9ncGlvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHRjMzU4OXhfZ3BpbyksIEdGUF9LRVJORUwpOworCWlmICghdGMzNTg5eF9ncGlvKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW11dGV4X2luaXQoJnRjMzU4OXhfZ3Bpby0+aXJxX2xvY2spOworCisJdGMzNTg5eF9ncGlvLT5kZXYgPSAmcGRldi0+ZGV2OworCXRjMzU4OXhfZ3Bpby0+dGMzNTg5eCA9IHRjMzU4OXg7CisKKwl0YzM1ODl4X2dwaW8tPmNoaXAgPSB0ZW1wbGF0ZV9jaGlwOworCXRjMzU4OXhfZ3Bpby0+Y2hpcC5uZ3BpbyA9IHRjMzU4OXgtPm51bV9ncGlvOworCXRjMzU4OXhfZ3Bpby0+Y2hpcC5kZXYgPSAmcGRldi0+ZGV2OworCXRjMzU4OXhfZ3Bpby0+Y2hpcC5iYXNlID0gcGRhdGEtPmdwaW9fYmFzZTsKKworCXRjMzU4OXhfZ3Bpby0+aXJxX2Jhc2UgPSB0YzM1ODl4LT5pcnFfYmFzZSArIFRDMzU4OXhfSU5UX0dQSU8oMCk7CisKKwkvKiBCcmluZyB0aGUgR1BJTyBtb2R1bGUgb3V0IG9mIHJlc2V0ICovCisJcmV0ID0gdGMzNTg5eF9zZXRfYml0cyh0YzM1ODl4LCBUQzM1ODl4X1JTVENUUkwsCisJCQkgICAgICAgVEMzNTg5eF9SU1RDVFJMX0dQSVJTVCwgMCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0X2ZyZWU7CisKKwlyZXQgPSB0YzM1ODl4X2dwaW9faXJxX2luaXQodGMzNTg5eF9ncGlvKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9mcmVlOworCisJcmV0ID0gcmVxdWVzdF90aHJlYWRlZF9pcnEoaXJxLCBOVUxMLCB0YzM1ODl4X2dwaW9faXJxLCBJUlFGX09ORVNIT1QsCisJCQkJICAgInRjMzU4OXgtZ3BpbyIsIHRjMzU4OXhfZ3Bpbyk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJ1bmFibGUgdG8gZ2V0IGlycTogJWRcbiIsIHJldCk7CisJCWdvdG8gb3V0X3JlbW92ZWlycTsKKwl9CisKKwlyZXQgPSBncGlvY2hpcF9hZGQoJnRjMzU4OXhfZ3Bpby0+Y2hpcCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJ1bmFibGUgdG8gYWRkIGdwaW9jaGlwOiAlZFxuIiwgcmV0KTsKKwkJZ290byBvdXRfZnJlZWlycTsKKwl9CisKKwlpZiAocGRhdGEtPnNldHVwKQorCQlwZGF0YS0+c2V0dXAodGMzNTg5eCwgdGMzNTg5eF9ncGlvLT5jaGlwLmJhc2UpOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgdGMzNTg5eF9ncGlvKTsKKworCXJldHVybiAwOworCitvdXRfZnJlZWlycToKKwlmcmVlX2lycShpcnEsIHRjMzU4OXhfZ3Bpbyk7CitvdXRfcmVtb3ZlaXJxOgorCXRjMzU4OXhfZ3Bpb19pcnFfcmVtb3ZlKHRjMzU4OXhfZ3Bpbyk7CitvdXRfZnJlZToKKwlrZnJlZSh0YzM1ODl4X2dwaW8pOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHRjMzU4OXhfZ3Bpb19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgdGMzNTg5eF9ncGlvICp0YzM1ODl4X2dwaW8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgdGMzNTg5eCAqdGMzNTg5eCA9IHRjMzU4OXhfZ3Bpby0+dGMzNTg5eDsKKwlzdHJ1Y3QgdGMzNTg5eF9ncGlvX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gdGMzNTg5eC0+cGRhdGEtPmdwaW87CisJaW50IGlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaW50IHJldDsKKworCWlmIChwZGF0YS0+cmVtb3ZlKQorCQlwZGF0YS0+cmVtb3ZlKHRjMzU4OXgsIHRjMzU4OXhfZ3Bpby0+Y2hpcC5iYXNlKTsKKworCXJldCA9IGdwaW9jaGlwX3JlbW92ZSgmdGMzNTg5eF9ncGlvLT5jaGlwKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKHRjMzU4OXhfZ3Bpby0+ZGV2LAorCQkJInVuYWJsZSB0byByZW1vdmUgZ3Bpb2NoaXA6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWZyZWVfaXJxKGlycSwgdGMzNTg5eF9ncGlvKTsKKwl0YzM1ODl4X2dwaW9faXJxX3JlbW92ZSh0YzM1ODl4X2dwaW8pOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJa2ZyZWUodGMzNTg5eF9ncGlvKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB0YzM1ODl4X2dwaW9fZHJpdmVyID0geworCS5kcml2ZXIubmFtZQk9ICJ0YzM1ODl4LWdwaW8iLAorCS5kcml2ZXIub3duZXIJPSBUSElTX01PRFVMRSwKKwkucHJvYmUJCT0gdGMzNTg5eF9ncGlvX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AodGMzNTg5eF9ncGlvX3JlbW92ZSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCB0YzM1ODl4X2dwaW9faW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnRjMzU4OXhfZ3Bpb19kcml2ZXIpOworfQorc3Vic3lzX2luaXRjYWxsKHRjMzU4OXhfZ3Bpb19pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHRjMzU4OXhfZ3Bpb19leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnRjMzU4OXhfZ3Bpb19kcml2ZXIpOworfQorbW9kdWxlX2V4aXQodGMzNTg5eF9ncGlvX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlRDMzU4OXggR1BJTyBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIkhhbnVtYXRoIFByYXNhZCwgUmFiaW4gVmluY2VudCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYm8uYyBiL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvLmMKaW5kZXggMTQ4YTMyMi4uOTM0YTk2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYm8uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9iby5jCkBAIC0xNDcyLDggKzE0NzIsNyBAQAogCWxpc3RfZGVsKCZiZGV2LT5kZXZpY2VfbGlzdCk7CiAJbXV0ZXhfdW5sb2NrKCZnbG9iLT5kZXZpY2VfbGlzdF9tdXRleCk7CiAKLQlpZiAoIWNhbmNlbF9kZWxheWVkX3dvcmsoJmJkZXYtPndxKSkKLQkJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmJkZXYtPndxKTsKIAogCXdoaWxlICh0dG1fYm9fZGVsYXllZF9kZWxldGUoYmRldiwgdHJ1ZSkpCiAJCTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2ZiLmMgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9mYi5jCmluZGV4IDQxZDlhNWIuLmZlMDk2YTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2ZiLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZmIuYwpAQCAtNjU5LDcgKzY1OSw3IEBACiAJcGFyLT5kaXJ0eS5hY3RpdmUgPSBmYWxzZTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwYXItPmRpcnR5LmxvY2ssIGZsYWdzKTsKIAotCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisJZmx1c2hfZGVsYXllZF93b3JrX3N5bmMoJmluZm8tPmRlZmVycmVkX3dvcmspOwogCiAJcGFyLT5ib19wdHIgPSBOVUxMOwogCXR0bV9ib19rdW5tYXAoJnBhci0+bWFwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL0tjb25maWcgYi9kcml2ZXJzL2hpZC9LY29uZmlnCmluZGV4IDMwNTJlMjkuLmZmYmMyNzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL0tjb25maWcKKysrIGIvZHJpdmVycy9oaWQvS2NvbmZpZwpAQCAtMTUwLDExICsxNTAsMjIgQEAKIAlTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBmb3JjZSBmZWVkYmFjayBzdXBwb3J0IGZvciBEcmFnb25SaXNlIEluYy4KIAlnYW1lIGNvbnRyb2xsZXJzLgogCitjb25maWcgSElEX0VNU19GRgorCXRyaXN0YXRlICJFTVMgUHJvZHVjdGlvbiBJbmMuIGZvcmNlIGZlZWRiYWNrIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0JfSElECisJc2VsZWN0IElOUFVUX0ZGX01FTUxFU1MKKwktLS1oZWxwLS0tCisJU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBlbmFibGUgZm9yY2UgZmVlZGJhY2sgc3VwcG9ydCBmb3IgZGV2aWNlcyBieQorCUVNUyBQcm9kdWN0aW9uIEx0ZC4KKwlDdXJyZW50bHkgdGhlIGZvbGxvd2luZyBkZXZpY2VzIGFyZSBrbm93biB0byBiZSBzdXBwb3J0ZWQ6CisJIC0gVHJpbyBMaW5rZXIgUGx1cyBJSQorCiBjb25maWcgSElEX0VHQUxBWAogCXRyaXN0YXRlICJlR2FsYXggbXVsdGktdG91Y2ggcGFuZWwiCiAJZGVwZW5kcyBvbiBVU0JfSElECiAJLS0taGVscC0tLQotCVN1cHBvcnQgZm9yIHRoZSBlR2FsYXggZHVhbC10b3VjaCBwYW5lbC4KKwlTdXBwb3J0IGZvciB0aGUgZUdhbGF4IGR1YWwtdG91Y2ggcGFuZWxzLCBpbmNsdWRpbmcgdGhlCisJSm9vam9vIGFuZCBXZXRhYiB0YWJsZXRzLgogCiBjb25maWcgSElEX0VMRUNPTQogCXRyaXN0YXRlICJFTEVDT00gQk0wODQgYmx1ZXRvb3RoIG1vdXNlIgpAQCAtMzk2LDYgKzQwNywxMyBAQAogCS0tLWhlbHAtLS0KIAlTdXBwb3J0IGZvciBSb2NjYXQgS29uZSBtb3VzZS4KIAorY29uZmlnIEhJRF9ST0NDQVRfS09ORVBMVVMKKwl0cmlzdGF0ZSAiUm9jY2F0IEtvbmVbK10gbW91c2Ugc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQl9ISUQKKwlzZWxlY3QgSElEX1JPQ0NBVAorCS0tLWhlbHAtLS0KKwlTdXBwb3J0IGZvciBSb2NjYXQgS29uZVsrXSBtb3VzZS4KKwogY29uZmlnIEhJRF9ST0NDQVRfUFlSQQogCXRyaXN0YXRlICJSb2NjYXQgUHlyYSBtb3VzZSBzdXBwb3J0IgogCWRlcGVuZHMgb24gVVNCX0hJRApkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvTWFrZWZpbGUgYi9kcml2ZXJzL2hpZC9NYWtlZmlsZQppbmRleCBjMzM1NjA1Li42ZWFlOWE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2hpZC9NYWtlZmlsZQpAQCAtMSw3ICsxLDcgQEAKICMKICMgTWFrZWZpbGUgZm9yIHRoZSBISUQgZHJpdmVyCiAjCi1oaWQtb2JqcwkJCTo9IGhpZC1jb3JlLm8gaGlkLWlucHV0Lm8KK2hpZC15CQkJOj0gaGlkLWNvcmUubyBoaWQtaW5wdXQubwogCiBpZmRlZiBDT05GSUdfREVCVUdfRlMKIAloaWQtb2JqcwkJKz0gaGlkLWRlYnVnLm8KQEAgLTExLDE4ICsxMSwxOCBAQAogCiBoaWQtJChDT05GSUdfSElEUkFXKQkJKz0gaGlkcmF3Lm8KIAotaGlkLWxvZ2l0ZWNoLW9ianMJCTo9IGhpZC1sZy5vCitoaWQtbG9naXRlY2gteQkJOj0gaGlkLWxnLm8KIGlmZGVmIENPTkZJR19MT0dJVEVDSF9GRgotCWhpZC1sb2dpdGVjaC1vYmpzCSs9IGhpZC1sZ2ZmLm8KKwloaWQtbG9naXRlY2gteQkrPSBoaWQtbGdmZi5vCiBlbmRpZgogaWZkZWYgQ09ORklHX0xPR0lSVU1CTEVQQUQyX0ZGCi0JaGlkLWxvZ2l0ZWNoLW9ianMJKz0gaGlkLWxnMmZmLm8KKwloaWQtbG9naXRlY2gteQkrPSBoaWQtbGcyZmYubwogZW5kaWYKIGlmZGVmIENPTkZJR19MT0dJRzk0MF9GRgotCWhpZC1sb2dpdGVjaC1vYmpzCSs9IGhpZC1sZzNmZi5vCisJaGlkLWxvZ2l0ZWNoLXkJKz0gaGlkLWxnM2ZmLm8KIGVuZGlmCiBpZmRlZiBDT05GSUdfTE9HSVdJSV9GRgotCWhpZC1sb2dpdGVjaC1vYmpzCSs9IGhpZC1sZzRmZi5vCisJaGlkLWxvZ2l0ZWNoLXkJKz0gaGlkLWxnNGZmLm8KIGVuZGlmCiAKIG9iai0kKENPTkZJR19ISURfM01fUENUKQkrPSBoaWQtM20tcGN0Lm8KQEAgLTM1LDYgKzM1LDcgQEAKIG9iai0kKENPTkZJR19ISURfQ0hJQ09OWSkJKz0gaGlkLWNoaWNvbnkubwogb2JqLSQoQ09ORklHX0hJRF9DWVBSRVNTKQkrPSBoaWQtY3lwcmVzcy5vCiBvYmotJChDT05GSUdfSElEX0RSQUdPTlJJU0UpCSs9IGhpZC1kcmZmLm8KK29iai0kKENPTkZJR19ISURfRU1TX0ZGKQkrPSBoaWQtZW1zZmYubwogb2JqLSQoQ09ORklHX0hJRF9FR0FMQVgpCSs9IGhpZC1lZ2FsYXgubwogb2JqLSQoQ09ORklHX0hJRF9FTEVDT00pCSs9IGhpZC1lbGVjb20ubwogb2JqLSQoQ09ORklHX0hJRF9FWktFWSkJCSs9IGhpZC1lemtleS5vCkBAIC01NSw2ICs1Niw3IEBACiBvYmotJChDT05GSUdfSElEX1BJQ09MQ0QpCSs9IGhpZC1waWNvbGNkLm8KIG9iai0kKENPTkZJR19ISURfUk9DQ0FUKQkrPSBoaWQtcm9jY2F0Lm8KIG9iai0kKENPTkZJR19ISURfUk9DQ0FUX0tPTkUpCSs9IGhpZC1yb2NjYXQta29uZS5vCitvYmotJChDT05GSUdfSElEX1JPQ0NBVF9LT05FUExVUykJKz0gaGlkLXJvY2NhdC1rb25lcGx1cy5vCiBvYmotJChDT05GSUdfSElEX1JPQ0NBVF9QWVJBKQkrPSBoaWQtcm9jY2F0LXB5cmEubwogb2JqLSQoQ09ORklHX0hJRF9TQU1TVU5HKQkrPSBoaWQtc2Ftc3VuZy5vCiBvYmotJChDT05GSUdfSElEX1NNQVJUSk9ZUExVUykJKz0gaGlkLXNqb3kubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLTNtLXBjdC5jIGIvZHJpdmVycy9oaWQvaGlkLTNtLXBjdC5jCmluZGV4IDAyZDhjZDMuLjUyNDNhZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC0zbS1wY3QuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtM20tcGN0LmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQvbXQuaD4KIAogTU9EVUxFX0FVVEhPUigiU3RlcGhhbmUgQ2hhdHR5IDxjaGF0dHlAZW5hYy5mcj4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiM00gUENUIG11bHRpdG91Y2ggcGFuZWxzIik7CkBAIC0yNyw4ICsyOCw2IEBACiAjaW5jbHVkZSAiaGlkLWlkcy5oIgogCiAjZGVmaW5lIE1BWF9TTE9UUwkJNjAKLSNkZWZpbmUgTUFYX1RSS0lECQlVU0hSVF9NQVgKLSNkZWZpbmUgTUFYX0VWRU5UUwkJMzYwCiAKIC8qIGVzdGltYXRlZCBzaWduYWwtdG8tbm9pc2UgcmF0aW9zICovCiAjZGVmaW5lIFNOX01PVkUJCQkyMDQ4CkBAIC0zNiwxNCArMzUsMTEgQEAKIAogc3RydWN0IG1tbV9maW5nZXIgewogCV9fczMyIHgsIHksIHcsIGg7Ci0JX191MTYgaWQ7Ci0JYm9vbCBwcmV2X3RvdWNoOwogCWJvb2wgdG91Y2gsIHZhbGlkOwogfTsKIAogc3RydWN0IG1tbV9kYXRhIHsKIAlzdHJ1Y3QgbW1tX2ZpbmdlciBmW01BWF9TTE9UU107Ci0JX191MTYgaWQ7CiAJX191OCBjdXJpZDsKIAlfX3U4IG5leHAsIG5yZWFsOwogCWJvb2wgdG91Y2gsIHZhbGlkOwpAQCAtMTE3LDE0ICsxMTMsNyBAQAogCQkJCQkwLCAxLCAwLCAwKTsKIAkJCXJldHVybiAxOwogCQljYXNlIEhJRF9ER19DT05UQUNUSUQ6Ci0JCQlmaWVsZC0+bG9naWNhbF9tYXhpbXVtID0gTUFYX1RSS0lEOwotCQkJaGlkX21hcF91c2FnZShoaSwgdXNhZ2UsIGJpdCwgbWF4LAotCQkJCQlFVl9BQlMsIEFCU19NVF9UUkFDS0lOR19JRCk7Ci0JCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhoaS0+aW5wdXQsIEFCU19NVF9UUkFDS0lOR19JRCwKLQkJCQkJICAgICAwLCBNQVhfVFJLSUQsIDAsIDApOwotCQkJaWYgKCFoaS0+aW5wdXQtPm10KQotCQkJCWlucHV0X210X2NyZWF0ZV9zbG90cyhoaS0+aW5wdXQsIE1BWF9TTE9UUyk7Ci0JCQlpbnB1dF9zZXRfZXZlbnRzX3Blcl9wYWNrZXQoaGktPmlucHV0LCBNQVhfRVZFTlRTKTsKKwkJCWlucHV0X210X2luaXRfc2xvdHMoaGktPmlucHV0LCBNQVhfU0xPVFMpOwogCQkJcmV0dXJuIDE7CiAJCX0KIAkJLyogbGV0IGhpZC1pbnB1dCBkZWNpZGUgZm9yIHRoZSBvdGhlcnMgKi8KQEAgLTE1NCw3ICsxNDMsNiBAQAogICovCiBzdGF0aWMgdm9pZCBtbW1fZmlsdGVyX2V2ZW50KHN0cnVjdCBtbW1fZGF0YSAqbWQsIHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0KQogewotCXN0cnVjdCBtbW1fZmluZ2VyICpvbGRlc3QgPSAwOwogCWludCBpOwogCWZvciAoaSA9IDA7IGkgPCBNQVhfU0xPVFM7ICsraSkgewogCQlzdHJ1Y3QgbW1tX2ZpbmdlciAqZiA9ICZtZC0+ZltpXTsKQEAgLTE2Myw2ICsxNTEsNyBAQAogCQkJY29udGludWU7CiAJCX0KIAkJaW5wdXRfbXRfc2xvdChpbnB1dCwgaSk7CisJCWlucHV0X210X3JlcG9ydF9zbG90X3N0YXRlKGlucHV0LCBNVF9UT09MX0ZJTkdFUiwgZi0+dG91Y2gpOwogCQlpZiAoZi0+dG91Y2gpIHsKIAkJCS8qIHRoaXMgZmluZ2VyIGlzIG9uIHRoZSBzY3JlZW4gKi8KIAkJCWludCB3aWRlID0gKGYtPncgPiBmLT5oKTsKQEAgLTE3MCwzMyArMTU5LDE2IEBACiAJCQlpbnQgbWFqb3IgPSBtYXgoZi0+dywgZi0+aCkgPj4gMTsKIAkJCWludCBtaW5vciA9IG1pbihmLT53LCBmLT5oKSA+PiAxOwogCi0JCQlpZiAoIWYtPnByZXZfdG91Y2gpCi0JCQkJZi0+aWQgPSBtZC0+aWQrKzsKLQkJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19NVF9UUkFDS0lOR19JRCwgZi0+aWQpOwogCQkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX01UX1BPU0lUSU9OX1gsIGYtPngpOwogCQkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX01UX1BPU0lUSU9OX1ksIGYtPnkpOwogCQkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX01UX09SSUVOVEFUSU9OLCB3aWRlKTsKIAkJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19NVF9UT1VDSF9NQUpPUiwgbWFqb3IpOwogCQkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX01UX1RPVUNIX01JTk9SLCBtaW5vcik7Ci0JCQkvKiB0b3VjaHNjcmVlbiBlbXVsYXRpb246IHBpY2sgdGhlIG9sZGVzdCBjb250YWN0ICovCi0JCQlpZiAoIW9sZGVzdCB8fCAoKGYtPmlkIC0gb2xkZXN0LT5pZCkgJiAoU0hSVF9NQVggKyAxKSkpCi0JCQkJb2xkZXN0ID0gZjsKLQkJfSBlbHNlIHsKLQkJCS8qIHRoaXMgZmluZ2VyIHRvb2sgb2ZmIHRoZSBzY3JlZW4gKi8KLQkJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19NVF9UUkFDS0lOR19JRCwgLTEpOwogCQl9Ci0JCWYtPnByZXZfdG91Y2ggPSBmLT50b3VjaDsKIAkJZi0+dmFsaWQgPSAwOwogCX0KIAotCS8qIHRvdWNoc2NyZWVuIGVtdWxhdGlvbiAqLwotCWlmIChvbGRlc3QpIHsKLQkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0tFWSwgQlROX1RPVUNILCAxKTsKLQkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX1gsIG9sZGVzdC0+eCk7Ci0JCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19ZLCBvbGRlc3QtPnkpOwotCX0gZWxzZSB7Ci0JCWlucHV0X2V2ZW50KGlucHV0LCBFVl9LRVksIEJUTl9UT1VDSCwgMCk7Ci0JfQorCWlucHV0X210X3JlcG9ydF9wb2ludGVyX2VtdWxhdGlvbihpbnB1dCwgdHJ1ZSk7CiAJaW5wdXRfc3luYyhpbnB1dCk7CiB9CiAKQEAgLTI3NCw3ICsyNDYsNyBAQAogCiAJbWQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbW1tX2RhdGEpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW1kKSB7Ci0JCWRldl9lcnIoJmhkZXYtPmRldiwgImNhbm5vdCBhbGxvY2F0ZSAzTSBkYXRhXG4iKTsKKwkJaGlkX2VycihoZGV2LCAiY2Fubm90IGFsbG9jYXRlIDNNIGRhdGFcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJaGlkX3NldF9kcnZkYXRhKGhkZXYsIG1kKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1hNHRlY2guYyBiL2RyaXZlcnMvaGlkL2hpZC1hNHRlY2guYwppbmRleCAxNjY2YzE2Li45MDJkMWRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtYTR0ZWNoLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLWE0dGVjaC5jCkBAIC05Myw3ICs5Myw3IEBACiAKIAlhNCA9IGt6YWxsb2Moc2l6ZW9mKCphNCksIEdGUF9LRVJORUwpOwogCWlmIChhNCA9PSBOVUxMKSB7Ci0JCWRldl9lcnIoJmhkZXYtPmRldiwgImNhbid0IGFsbG9jIGRldmljZSBkZXNjcmlwdG9yXG4iKTsKKwkJaGlkX2VycihoZGV2LCAiY2FuJ3QgYWxsb2MgZGV2aWNlIGRlc2NyaXB0b3JcbiIpOwogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGVycl9mcmVlOwogCX0KQEAgLTEwNCwxMyArMTA0LDEzIEBACiAKIAlyZXQgPSBoaWRfcGFyc2UoaGRldik7CiAJaWYgKHJldCkgewotCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJwYXJzZSBmYWlsZWRcbiIpOworCQloaWRfZXJyKGhkZXYsICJwYXJzZSBmYWlsZWRcbiIpOwogCQlnb3RvIGVycl9mcmVlOwogCX0KIAogCXJldCA9IGhpZF9od19zdGFydChoZGV2LCBISURfQ09OTkVDVF9ERUZBVUxUKTsKIAlpZiAocmV0KSB7Ci0JCWRldl9lcnIoJmhkZXYtPmRldiwgImh3IHN0YXJ0IGZhaWxlZFxuIik7CisJCWhpZF9lcnIoaGRldiwgImh3IHN0YXJ0IGZhaWxlZFxuIik7CiAJCWdvdG8gZXJyX2ZyZWU7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtYXBwbGUuYyBiL2RyaXZlcnMvaGlkL2hpZC1hcHBsZS5jCmluZGV4IGVhZWNhNTYuLjYxYWE3MTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1hcHBsZS5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1hcHBsZS5jCkBAIC0xNiw2ICsxNiw4IEBACiAgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9oaWQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTU5LDYgKzYxLDI3IEBACiAJdTggZmxhZ3M7CiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IGFwcGxlX2tleV90cmFuc2xhdGlvbiBtYWNib29rYWlyX2ZuX2tleXNbXSA9IHsKKwl7IEtFWV9CQUNLU1BBQ0UsIEtFWV9ERUxFVEUgfSwKKwl7IEtFWV9FTlRFUiwJS0VZX0lOU0VSVCB9LAorCXsgS0VZX0YxLAlLRVlfQlJJR0hUTkVTU0RPV04sIEFQUExFX0ZMQUdfRktFWSB9LAorCXsgS0VZX0YyLAlLRVlfQlJJR0hUTkVTU1VQLCAgIEFQUExFX0ZMQUdfRktFWSB9LAorCXsgS0VZX0YzLAlLRVlfU0NBTEUsICAgICAgICAgIEFQUExFX0ZMQUdfRktFWSB9LAorCXsgS0VZX0Y0LAlLRVlfREFTSEJPQVJELCAgICAgIEFQUExFX0ZMQUdfRktFWSB9LAorCXsgS0VZX0Y2LAlLRVlfUFJFVklPVVNTT05HLCAgIEFQUExFX0ZMQUdfRktFWSB9LAorCXsgS0VZX0Y3LAlLRVlfUExBWVBBVVNFLCAgICAgIEFQUExFX0ZMQUdfRktFWSB9LAorCXsgS0VZX0Y4LAlLRVlfTkVYVFNPTkcsICAgICAgIEFQUExFX0ZMQUdfRktFWSB9LAorCXsgS0VZX0Y5LAlLRVlfTVVURSwgICAgICAgICAgIEFQUExFX0ZMQUdfRktFWSB9LAorCXsgS0VZX0YxMCwJS0VZX1ZPTFVNRURPV04sICAgICBBUFBMRV9GTEFHX0ZLRVkgfSwKKwl7IEtFWV9GMTEsCUtFWV9WT0xVTUVVUCwgICAgICAgQVBQTEVfRkxBR19GS0VZIH0sCisJeyBLRVlfRjEyLAlLRVlfRUpFQ1RDRCwgICAgICAgIEFQUExFX0ZMQUdfRktFWSB9LAorCXsgS0VZX1VQLAlLRVlfUEFHRVVQIH0sCisJeyBLRVlfRE9XTiwJS0VZX1BBR0VET1dOIH0sCisJeyBLRVlfTEVGVCwJS0VZX0hPTUUgfSwKKwl7IEtFWV9SSUdIVCwJS0VZX0VORCB9LAorCXsgfQorfTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBhcHBsZV9rZXlfdHJhbnNsYXRpb24gYXBwbGVfZm5fa2V5c1tdID0gewogCXsgS0VZX0JBQ0tTUEFDRSwgS0VZX0RFTEVURSB9LAogCXsgS0VZX0VOVEVSLAlLRVlfSU5TRVJUIH0sCkBAIC0xNDYsNyArMTY5LDcgQEAKIAkJc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsIF9fczMyIHZhbHVlKQogewogCXN0cnVjdCBhcHBsZV9zYyAqYXNjID0gaGlkX2dldF9kcnZkYXRhKGhpZCk7Ci0JY29uc3Qgc3RydWN0IGFwcGxlX2tleV90cmFuc2xhdGlvbiAqdHJhbnM7CisJY29uc3Qgc3RydWN0IGFwcGxlX2tleV90cmFuc2xhdGlvbiAqdHJhbnMsICp0YWJsZTsKIAogCWlmICh1c2FnZS0+Y29kZSA9PSBLRVlfRk4pIHsKIAkJYXNjLT5mbl9vbiA9ICEhdmFsdWU7CkBAIC0xNTcsMTAgKzE4MCwxNiBAQAogCWlmIChmbm1vZGUpIHsKIAkJaW50IGRvX3RyYW5zbGF0ZTsKIAotCQl0cmFucyA9IGFwcGxlX2ZpbmRfdHJhbnNsYXRpb24oKGhpZC0+cHJvZHVjdCA8IDB4MjFkIHx8Ci0JCQkJCWhpZC0+cHJvZHVjdCA+PSAweDMwMCkgPwotCQkJCQlwb3dlcmJvb2tfZm5fa2V5cyA6IGFwcGxlX2ZuX2tleXMsCi0JCQkJCXVzYWdlLT5jb2RlKTsKKwkJaWYgKGhpZC0+cHJvZHVjdCA+PSBVU0JfREVWSUNFX0lEX0FQUExFX1dFTExTUFJJTkc0X0FOU0kgJiYKKwkJCQloaWQtPnByb2R1Y3QgPD0gVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HNEFfSklTKQorCQkJdGFibGUgPSBtYWNib29rYWlyX2ZuX2tleXM7CisJCWVsc2UgaWYgKGhpZC0+cHJvZHVjdCA8IDB4MjFkIHx8IGhpZC0+cHJvZHVjdCA+PSAweDMwMCkKKwkJCXRhYmxlID0gcG93ZXJib29rX2ZuX2tleXM7CisJCWVsc2UKKwkJCXRhYmxlID0gYXBwbGVfZm5fa2V5czsKKworCQl0cmFucyA9IGFwcGxlX2ZpbmRfdHJhbnNsYXRpb24gKHRhYmxlLCB1c2FnZS0+Y29kZSk7CisKIAkJaWYgKHRyYW5zKSB7CiAJCQlpZiAodGVzdF9iaXQodXNhZ2UtPmNvZGUsIGFzYy0+cHJlc3NlZF9mbikpCiAJCQkJZG9fdHJhbnNsYXRlID0gMTsKQEAgLTI1Myw4ICsyODIsOCBAQAogCiAJaWYgKChhc2MtPnF1aXJrcyAmIEFQUExFX1JERVNDX0pJUykgJiYgKnJzaXplID49IDYwICYmCiAJCQlyZGVzY1s1M10gPT0gMHg2NSAmJiByZGVzY1s1OV0gPT0gMHg2NSkgewotCQlkZXZfaW5mbygmaGRldi0+ZGV2LCAiZml4aW5nIHVwIE1hY0Jvb2sgSklTIGtleWJvYXJkIHJlcG9ydCAiCi0JCQkJImRlc2NyaXB0b3JcbiIpOworCQloaWRfaW5mbyhoZGV2LAorCQkJICJmaXhpbmcgdXAgTWFjQm9vayBKSVMga2V5Ym9hcmQgcmVwb3J0IGRlc2NyaXB0b3JcbiIpOwogCQlyZGVzY1s1M10gPSByZGVzY1s1OV0gPSAweGU3OwogCX0KIAlyZXR1cm4gcmRlc2M7CkBAIC0zMjQsNyArMzUzLDcgQEAKIAogCWFzYyA9IGt6YWxsb2Moc2l6ZW9mKCphc2MpLCBHRlBfS0VSTkVMKTsKIAlpZiAoYXNjID09IE5VTEwpIHsKLQkJZGV2X2VycigmaGRldi0+ZGV2LCAiY2FuJ3QgYWxsb2MgYXBwbGUgZGVzY3JpcHRvclxuIik7CisJCWhpZF9lcnIoaGRldiwgImNhbid0IGFsbG9jIGFwcGxlIGRlc2NyaXB0b3JcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTMzNCw3ICszNjMsNyBAQAogCiAJcmV0ID0gaGlkX3BhcnNlKGhkZXYpOwogCWlmIChyZXQpIHsKLQkJZGV2X2VycigmaGRldi0+ZGV2LCAicGFyc2UgZmFpbGVkXG4iKTsKKwkJaGlkX2VycihoZGV2LCAicGFyc2UgZmFpbGVkXG4iKTsKIAkJZ290byBlcnJfZnJlZTsKIAl9CiAKQEAgLTM0NSw3ICszNzQsNyBAQAogCiAJcmV0ID0gaGlkX2h3X3N0YXJ0KGhkZXYsIGNvbm5lY3RfbWFzayk7CiAJaWYgKHJldCkgewotCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJodyBzdGFydCBmYWlsZWRcbiIpOworCQloaWRfZXJyKGhkZXYsICJodyBzdGFydCBmYWlsZWRcbiIpOwogCQlnb3RvIGVycl9mcmVlOwogCX0KIApAQCAtNDQwLDYgKzQ2OSwxOCBAQAogCQkuZHJpdmVyX2RhdGEgPSBBUFBMRV9IQVNfRk4gfCBBUFBMRV9JU09fS0VZQk9BUkQgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfV0VMTFNQUklORzNfSklTKSwKIAkJLmRyaXZlcl9kYXRhID0gQVBQTEVfSEFTX0ZOIHwgQVBQTEVfUkRFU0NfSklTIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX1dFTExTUFJJTkc0X0FOU0kpLAorCQkuZHJpdmVyX2RhdGEgPSBBUFBMRV9IQVNfRk4gfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfV0VMTFNQUklORzRfSVNPKSwKKwkJLmRyaXZlcl9kYXRhID0gQVBQTEVfSEFTX0ZOIHwgQVBQTEVfSVNPX0tFWUJPQVJEIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX1dFTExTUFJJTkc0X0pJUyksCisJCS5kcml2ZXJfZGF0YSA9IEFQUExFX0hBU19GTiB8IEFQUExFX1JERVNDX0pJUyB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HNEFfQU5TSSksCisJCS5kcml2ZXJfZGF0YSA9IEFQUExFX0hBU19GTiB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HNEFfSVNPKSwKKwkJLmRyaXZlcl9kYXRhID0gQVBQTEVfSEFTX0ZOIHwgQVBQTEVfSVNPX0tFWUJPQVJEIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX1dFTExTUFJJTkc0QV9KSVMpLAorCQkuZHJpdmVyX2RhdGEgPSBBUFBMRV9IQVNfRk4gfCBBUFBMRV9SREVTQ19KSVMgfSwKIAl7IEhJRF9CTFVFVE9PVEhfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfQUxVX1dJUkVMRVNTXzIwMDlfQU5TSSksCiAJCS5kcml2ZXJfZGF0YSA9IEFQUExFX05VTUxPQ0tfRU1VTEFUSU9OIHwgQVBQTEVfSEFTX0ZOIH0sCiAJeyBISURfQkxVRVRPT1RIX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0FMVV9XSVJFTEVTU18yMDA5X0lTTyksCkBAIC00NzMsNyArNTE0LDcgQEAKIAogCXJldCA9IGhpZF9yZWdpc3Rlcl9kcml2ZXIoJmFwcGxlX2RyaXZlcik7CiAJaWYgKHJldCkKLQkJcHJpbnRrKEtFUk5fRVJSICJjYW4ndCByZWdpc3RlciBhcHBsZSBkcml2ZXJcbiIpOworCQlwcl9lcnIoImNhbid0IHJlZ2lzdGVyIGFwcGxlIGRyaXZlclxuIik7CiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWF4ZmYuYyBiL2RyaXZlcnMvaGlkL2hpZC1heGZmLmMKaW5kZXggZjQyZWUxNC4uZTViOTYxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLWF4ZmYuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtYXhmZi5jCkBAIC03MywxNCArNzMsMTQgQEAKIAlpbnQgZXJyb3I7CiAKIAlpZiAobGlzdF9lbXB0eShyZXBvcnRfbGlzdCkpIHsKLQkJZGV2X2VycigmaGlkLT5kZXYsICJubyBvdXRwdXQgcmVwb3J0cyBmb3VuZFxuIik7CisJCWhpZF9lcnIoaGlkLCAibm8gb3V0cHV0IHJlcG9ydHMgZm91bmRcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlyZXBvcnQgPSBsaXN0X2ZpcnN0X2VudHJ5KHJlcG9ydF9saXN0LCBzdHJ1Y3QgaGlkX3JlcG9ydCwgbGlzdCk7CiAKIAlpZiAocmVwb3J0LT5tYXhmaWVsZCA8IDQpIHsKLQkJZGV2X2VycigmaGlkLT5kZXYsICJubyBmaWVsZHMgaW4gdGhlIHJlcG9ydDogJWRcbiIsIHJlcG9ydC0+bWF4ZmllbGQpOworCQloaWRfZXJyKGhpZCwgIm5vIGZpZWxkcyBpbiB0aGUgcmVwb3J0OiAlZFxuIiwgcmVwb3J0LT5tYXhmaWVsZCk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtMTAxLDcgKzEwMSw3IEBACiAJYXhmZi0+cmVwb3J0LT5maWVsZFszXS0+dmFsdWVbMF0gPSAweDAwOwogCXVzYmhpZF9zdWJtaXRfcmVwb3J0KGhpZCwgYXhmZi0+cmVwb3J0LCBVU0JfRElSX09VVCk7CiAKLQlkZXZfaW5mbygmaGlkLT5kZXYsICJGb3JjZSBGZWVkYmFjayBmb3IgQUNSVVggZ2FtZSBjb250cm9sbGVycyBieSBTZXJnZWkgS29senVuPHgwckBkdi1saWZlLnJ1PlxuIik7CisJaGlkX2luZm8oaGlkLCAiRm9yY2UgRmVlZGJhY2sgZm9yIEFDUlVYIGdhbWUgY29udHJvbGxlcnMgYnkgU2VyZ2VpIEtvbHp1bjx4MHJAZHYtbGlmZS5ydT5cbiIpOwogCiAJcmV0dXJuIDA7CiAKQEAgLTExNCwxNyArMTE0LDE3IEBACiB7CiAJaW50IGVycm9yOwogCi0JZGV2X2RiZygmaGRldi0+ZGV2LCAiQUNSVVggSElEIGhhcmR3YXJlIHByb2JlLi4uIik7CisJZGV2X2RiZygmaGRldi0+ZGV2LCAiQUNSVVggSElEIGhhcmR3YXJlIHByb2JlLi4uXG4iKTsKIAogCWVycm9yID0gaGlkX3BhcnNlKGhkZXYpOwogCWlmIChlcnJvcikgewotCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJwYXJzZSBmYWlsZWRcbiIpOworCQloaWRfZXJyKGhkZXYsICJwYXJzZSBmYWlsZWRcbiIpOwogCQlyZXR1cm4gZXJyb3I7CiAJfQogCiAJZXJyb3IgPSBoaWRfaHdfc3RhcnQoaGRldiwgSElEX0NPTk5FQ1RfREVGQVVMVCAmIH5ISURfQ09OTkVDVF9GRik7CiAJaWYgKGVycm9yKSB7Ci0JCWRldl9lcnIoJmhkZXYtPmRldiwgImh3IHN0YXJ0IGZhaWxlZFxuIik7CisJCWhpZF9lcnIoaGRldiwgImh3IHN0YXJ0IGZhaWxlZFxuIik7CiAJCXJldHVybiBlcnJvcjsKIAl9CiAKQEAgLTEzNCw3ICsxMzQsNyBAQAogCQkgKiBEbyBub3QgZmFpbCBkZXZpY2UgaW5pdGlhbGl6YXRpb24gY29tcGxldGVseSBhcyBkZXZpY2UKIAkJICogbWF5IHN0aWxsIGJlIHBhcnRpYWxseSBvcGVyYWJsZSwganVzdCB3YXJuLgogCQkgKi8KLQkJZGV2X3dhcm4oJmhkZXYtPmRldiwKKwkJaGlkX3dhcm4oaGRldiwKIAkJCSAiRmFpbGVkIHRvIGVuYWJsZSBmb3JjZSBmZWVkYmFjayBzdXBwb3J0LCBlcnJvcjogJWRcbiIsCiAJCQkgZXJyb3IpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1iZWxraW4uYyBiL2RyaXZlcnMvaGlkL2hpZC1iZWxraW4uYwppbmRleCA0Y2U3YWEzLi5hMWE3NjVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtYmVsa2luLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLWJlbGtpbi5jCkBAIC01NiwxNCArNTYsMTQgQEAKIAogCXJldCA9IGhpZF9wYXJzZShoZGV2KTsKIAlpZiAocmV0KSB7Ci0JCWRldl9lcnIoJmhkZXYtPmRldiwgInBhcnNlIGZhaWxlZFxuIik7CisJCWhpZF9lcnIoaGRldiwgInBhcnNlIGZhaWxlZFxuIik7CiAJCWdvdG8gZXJyX2ZyZWU7CiAJfQogCiAJcmV0ID0gaGlkX2h3X3N0YXJ0KGhkZXYsIEhJRF9DT05ORUNUX0RFRkFVTFQgfAogCQkoKHF1aXJrcyAmIEJFTEtJTl9ISURERVYpID8gSElEX0NPTk5FQ1RfSElEREVWX0ZPUkNFIDogMCkpOwogCWlmIChyZXQpIHsKLQkJZGV2X2VycigmaGRldi0+ZGV2LCAiaHcgc3RhcnQgZmFpbGVkXG4iKTsKKwkJaGlkX2VycihoZGV2LCAiaHcgc3RhcnQgZmFpbGVkXG4iKTsKIAkJZ290byBlcnJfZnJlZTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1jYW5kby5jIGIvZHJpdmVycy9oaWQvaGlkLWNhbmRvLmMKaW5kZXggNTkyNWJkYy4uMzc1YjUwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLWNhbmRvLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLWNhbmRvLmMKQEAgLTIwNyw3ICsyMDcsNyBAQAogCiAJdGQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgY2FuZG9fZGF0YSksIEdGUF9LRVJORUwpOwogCWlmICghdGQpIHsKLQkJZGV2X2VycigmaGRldi0+ZGV2LCAiY2Fubm90IGFsbG9jYXRlIENhbmRvIFRvdWNoIGRhdGFcbiIpOworCQloaWRfZXJyKGhkZXYsICJjYW5ub3QgYWxsb2NhdGUgQ2FuZG8gVG91Y2ggZGF0YVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAloaWRfc2V0X2RydmRhdGEoaGRldiwgdGQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWNoZXJyeS5jIGIvZHJpdmVycy9oaWQvaGlkLWNoZXJyeS5jCmluZGV4IGU4ODAwODYuLjg4OGVjZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1jaGVycnkuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtY2hlcnJ5LmMKQEAgLTMwLDggKzMwLDcgQEAKIAkJdW5zaWduZWQgaW50ICpyc2l6ZSkKIHsKIAlpZiAoKnJzaXplID49IDE3ICYmIHJkZXNjWzExXSA9PSAweDNjICYmIHJkZXNjWzEyXSA9PSAweDAyKSB7Ci0JCWRldl9pbmZvKCZoZGV2LT5kZXYsICJmaXhpbmcgdXAgQ2hlcnJ5IEN5bW90aW9uIHJlcG9ydCAiCi0JCQkJImRlc2NyaXB0b3JcbiIpOworCQloaWRfaW5mbyhoZGV2LCAiZml4aW5nIHVwIENoZXJyeSBDeW1vdGlvbiByZXBvcnQgZGVzY3JpcHRvclxuIik7CiAJCXJkZXNjWzExXSA9IHJkZXNjWzE2XSA9IDB4ZmY7CiAJCXJkZXNjWzEyXSA9IHJkZXNjWzE3XSA9IDB4MDM7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWNvcmUuYyBiL2RyaXZlcnMvaGlkL2hpZC1jb3JlLmMKaW5kZXggODhjYjA0ZS4uMjYxMTY4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLWNvcmUuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtY29yZS5jCkBAIC0xNCw2ICsxNCw4IEBACiAgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtNTksNyArNjEsOCBAQAogCWlmIChyZXBvcnRfZW51bS0+cmVwb3J0X2lkX2hhc2hbaWRdKQogCQlyZXR1cm4gcmVwb3J0X2VudW0tPnJlcG9ydF9pZF9oYXNoW2lkXTsKIAotCWlmICghKHJlcG9ydCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBoaWRfcmVwb3J0KSwgR0ZQX0tFUk5FTCkpKQorCXJlcG9ydCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBoaWRfcmVwb3J0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZXBvcnQpCiAJCXJldHVybiBOVUxMOwogCiAJaWYgKGlkICE9IDApCkBAIC05MCw4ICs5MywxMSBAQAogCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQlpZiAoIShmaWVsZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBoaWRfZmllbGQpICsgdXNhZ2VzICogc2l6ZW9mKHN0cnVjdCBoaWRfdXNhZ2UpCi0JCSsgdmFsdWVzICogc2l6ZW9mKHVuc2lnbmVkKSwgR0ZQX0tFUk5FTCkpKSByZXR1cm4gTlVMTDsKKwlmaWVsZCA9IGt6YWxsb2MoKHNpemVvZihzdHJ1Y3QgaGlkX2ZpZWxkKSArCisJCQkgdXNhZ2VzICogc2l6ZW9mKHN0cnVjdCBoaWRfdXNhZ2UpICsKKwkJCSB2YWx1ZXMgKiBzaXplb2YodW5zaWduZWQpKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFmaWVsZCkKKwkJcmV0dXJuIE5VTEw7CiAKIAlmaWVsZC0+aW5kZXggPSByZXBvcnQtPm1heGZpZWxkKys7CiAJcmVwb3J0LT5maWVsZFtmaWVsZC0+aW5kZXhdID0gZmllbGQ7CkBAIC0xNzIsMTAgKzE3OCwxNCBAQAogCiBzdGF0aWMgdW5zaWduZWQgaGlkX2xvb2t1cF9jb2xsZWN0aW9uKHN0cnVjdCBoaWRfcGFyc2VyICpwYXJzZXIsIHVuc2lnbmVkIHR5cGUpCiB7CisJc3RydWN0IGhpZF9jb2xsZWN0aW9uICpjb2xsZWN0aW9uID0gcGFyc2VyLT5kZXZpY2UtPmNvbGxlY3Rpb247CiAJaW50IG47Ci0JZm9yIChuID0gcGFyc2VyLT5jb2xsZWN0aW9uX3N0YWNrX3B0ciAtIDE7IG4gPj0gMDsgbi0tKQotCQlpZiAocGFyc2VyLT5kZXZpY2UtPmNvbGxlY3Rpb25bcGFyc2VyLT5jb2xsZWN0aW9uX3N0YWNrW25dXS50eXBlID09IHR5cGUpCi0JCQlyZXR1cm4gcGFyc2VyLT5kZXZpY2UtPmNvbGxlY3Rpb25bcGFyc2VyLT5jb2xsZWN0aW9uX3N0YWNrW25dXS51c2FnZTsKKworCWZvciAobiA9IHBhcnNlci0+Y29sbGVjdGlvbl9zdGFja19wdHIgLSAxOyBuID49IDA7IG4tLSkgeworCQl1bnNpZ25lZCBpbmRleCA9IHBhcnNlci0+Y29sbGVjdGlvbl9zdGFja1tuXTsKKwkJaWYgKGNvbGxlY3Rpb25baW5kZXhdLnR5cGUgPT0gdHlwZSkKKwkJCXJldHVybiBjb2xsZWN0aW9uW2luZGV4XS51c2FnZTsKKwl9CiAJcmV0dXJuIDA7IC8qIHdlIGtub3cgbm90aGluZyBhYm91dCB0aGlzIHVzYWdlIHR5cGUgKi8KIH0KIApAQCAtMjA5LDcgKzIxOSw4IEBACiAJdW5zaWduZWQgb2Zmc2V0OwogCWludCBpOwogCi0JaWYgKCEocmVwb3J0ID0gaGlkX3JlZ2lzdGVyX3JlcG9ydChwYXJzZXItPmRldmljZSwgcmVwb3J0X3R5cGUsIHBhcnNlci0+Z2xvYmFsLnJlcG9ydF9pZCkpKSB7CisJcmVwb3J0ID0gaGlkX3JlZ2lzdGVyX3JlcG9ydChwYXJzZXItPmRldmljZSwgcmVwb3J0X3R5cGUsIHBhcnNlci0+Z2xvYmFsLnJlcG9ydF9pZCk7CisJaWYgKCFyZXBvcnQpIHsKIAkJZGJnX2hpZCgiaGlkX3JlZ2lzdGVyX3JlcG9ydCBmYWlsZWRcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQpAQCAtMjI3LDcgKzIzOCw4IEBACiAKIAl1c2FnZXMgPSBtYXhfdChpbnQsIHBhcnNlci0+bG9jYWwudXNhZ2VfaW5kZXgsIHBhcnNlci0+Z2xvYmFsLnJlcG9ydF9jb3VudCk7CiAKLQlpZiAoKGZpZWxkID0gaGlkX3JlZ2lzdGVyX2ZpZWxkKHJlcG9ydCwgdXNhZ2VzLCBwYXJzZXItPmdsb2JhbC5yZXBvcnRfY291bnQpKSA9PSBOVUxMKQorCWZpZWxkID0gaGlkX3JlZ2lzdGVyX2ZpZWxkKHJlcG9ydCwgdXNhZ2VzLCBwYXJzZXItPmdsb2JhbC5yZXBvcnRfY291bnQpOworCWlmICghZmllbGQpCiAJCXJldHVybiAwOwogCiAJZmllbGQtPnBoeXNpY2FsID0gaGlkX2xvb2t1cF9jb2xsZWN0aW9uKHBhcnNlciwgSElEX0NPTExFQ1RJT05fUEhZU0lDQUwpOwpAQCAtNjUyLDEzICs2NjQsMTIgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJZGV2aWNlLT5yc2l6ZSA9IHNpemU7CiAKLQlwYXJzZXIgPSB2bWFsbG9jKHNpemVvZihzdHJ1Y3QgaGlkX3BhcnNlcikpOworCXBhcnNlciA9IHZ6YWxsb2Moc2l6ZW9mKHN0cnVjdCBoaWRfcGFyc2VyKSk7CiAJaWYgKCFwYXJzZXIpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBlcnI7CiAJfQogCi0JbWVtc2V0KHBhcnNlciwgMCwgc2l6ZW9mKHN0cnVjdCBoaWRfcGFyc2VyKSk7CiAJcGFyc2VyLT5kZXZpY2UgPSBkZXZpY2U7CiAKIAllbmQgPSBzdGFydCArIHNpemU7CkBAIC02NzIsNyArNjgzLDggQEAKIAogCQlpZiAoZGlzcGF0Y2hfdHlwZVtpdGVtLnR5cGVdKHBhcnNlciwgJml0ZW0pKSB7CiAJCQlkYmdfaGlkKCJpdGVtICV1ICV1ICV1ICV1IHBhcnNpbmcgZmFpbGVkXG4iLAotCQkJCWl0ZW0uZm9ybWF0LCAodW5zaWduZWQpaXRlbS5zaXplLCAodW5zaWduZWQpaXRlbS50eXBlLCAodW5zaWduZWQpaXRlbS50YWcpOworCQkJCWl0ZW0uZm9ybWF0LCAodW5zaWduZWQpaXRlbS5zaXplLAorCQkJCSh1bnNpZ25lZClpdGVtLnR5cGUsICh1bnNpZ25lZClpdGVtLnRhZyk7CiAJCQlnb3RvIGVycjsKIAkJfQogCkBAIC03MzcsMTMgKzc0OSwxNCBAQAogICogU2VhcmNoIGxpbnV4LWtlcm5lbCBhbmQgbGludXgtdXNiLWRldmVsIGFyY2hpdmVzIGZvciAiaGlkLWNvcmUgZXh0cmFjdCIuCiAgKi8KIAotc3RhdGljIF9faW5saW5lX18gX191MzIgZXh0cmFjdChfX3U4ICpyZXBvcnQsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbikKK3N0YXRpYyBfX3UzMiBleHRyYWN0KGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIF9fdTggKnJlcG9ydCwKKwkJICAgICB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIG4pCiB7CiAJdTY0IHg7CiAKIAlpZiAobiA+IDMyKQotCQlwcmludGsoS0VSTl9XQVJOSU5HICJISUQ6IGV4dHJhY3QoKSBjYWxsZWQgd2l0aCBuICglZCkgPiAzMiEgKCVzKVxuIiwKLQkJCQluLCBjdXJyZW50LT5jb21tKTsKKwkJaGlkX3dhcm4oaGlkLCAiZXh0cmFjdCgpIGNhbGxlZCB3aXRoIG4gKCVkKSA+IDMyISAoJXMpXG4iLAorCQkJIG4sIGN1cnJlbnQtPmNvbW0pOwogCiAJcmVwb3J0ICs9IG9mZnNldCA+PiAzOyAgLyogYWRqdXN0IGJ5dGUgaW5kZXggKi8KIAlvZmZzZXQgJj0gNzsgICAgICAgICAgICAvKiBub3cgb25seSBuZWVkIGJpdCBvZmZzZXQgaW50byBvbmUgYnl0ZSAqLwpAQCAtNzYwLDE4ICs3NzMsMTkgQEAKICAqIGVuZGlhbm5lc3Mgb2YgcmVnaXN0ZXIgdmFsdWVzIGJ5IGNvbnNpZGVyaW5nIGEgcmVnaXN0ZXIKICAqIGEgImNhY2hlZCIgY29weSBvZiB0aGUgbGl0dGxlIGVuZGlhZCBiaXQgc3RyZWFtLgogICovCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIGltcGxlbWVudChfX3U4ICpyZXBvcnQsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbiwgX191MzIgdmFsdWUpCitzdGF0aWMgdm9pZCBpbXBsZW1lbnQoY29uc3Qgc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgX191OCAqcmVwb3J0LAorCQkgICAgICB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIG4sIF9fdTMyIHZhbHVlKQogewogCXU2NCB4OwogCXU2NCBtID0gKDFVTEwgPDwgbikgLSAxOwogCiAJaWYgKG4gPiAzMikKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiSElEOiBpbXBsZW1lbnQoKSBjYWxsZWQgd2l0aCBuICglZCkgPiAzMiEgKCVzKVxuIiwKLQkJCQluLCBjdXJyZW50LT5jb21tKTsKKwkJaGlkX3dhcm4oaGlkLCAiJXMoKSBjYWxsZWQgd2l0aCBuICglZCkgPiAzMiEgKCVzKVxuIiwKKwkJCSBfX2Z1bmNfXywgbiwgY3VycmVudC0+Y29tbSk7CiAKIAlpZiAodmFsdWUgPiBtKQotCQlwcmludGsoS0VSTl9XQVJOSU5HICJISUQ6IGltcGxlbWVudCgpIGNhbGxlZCB3aXRoIHRvbyBsYXJnZSB2YWx1ZSAlZCEgKCVzKVxuIiwKLQkJCQl2YWx1ZSwgY3VycmVudC0+Y29tbSk7CisJCWhpZF93YXJuKGhpZCwgIiVzKCkgY2FsbGVkIHdpdGggdG9vIGxhcmdlIHZhbHVlICVkISAoJXMpXG4iLAorCQkJIF9fZnVuY19fLCB2YWx1ZSwgY3VycmVudC0+Y29tbSk7CiAJV0FSTl9PTih2YWx1ZSA+IG0pOwogCXZhbHVlICY9IG07CiAKQEAgLTc4OCw3ICs4MDIsNyBAQAogICogU2VhcmNoIGFuIGFycmF5IGZvciBhIHZhbHVlLgogICovCiAKLXN0YXRpYyBfX2lubGluZV9fIGludCBzZWFyY2goX19zMzIgKmFycmF5LCBfX3MzMiB2YWx1ZSwgdW5zaWduZWQgbikKK3N0YXRpYyBpbnQgc2VhcmNoKF9fczMyICphcnJheSwgX19zMzIgdmFsdWUsIHVuc2lnbmVkIG4pCiB7CiAJd2hpbGUgKG4tLSkgewogCQlpZiAoKmFycmF5KysgPT0gdmFsdWUpCkBAIC04ODcsMTggKzkwMSwyMiBAQAogCV9fczMyIG1heCA9IGZpZWxkLT5sb2dpY2FsX21heGltdW07CiAJX19zMzIgKnZhbHVlOwogCi0JaWYgKCEodmFsdWUgPSBrbWFsbG9jKHNpemVvZihfX3MzMikgKiBjb3VudCwgR0ZQX0FUT01JQykpKQorCXZhbHVlID0ga21hbGxvYyhzaXplb2YoX19zMzIpICogY291bnQsIEdGUF9BVE9NSUMpOworCWlmICghdmFsdWUpCiAJCXJldHVybjsKIAogCWZvciAobiA9IDA7IG4gPCBjb3VudDsgbisrKSB7CiAKLQkJCXZhbHVlW25dID0gbWluIDwgMCA/IHNudG8zMihleHRyYWN0KGRhdGEsIG9mZnNldCArIG4gKiBzaXplLCBzaXplKSwgc2l6ZSkgOgotCQkJCQkJICAgIGV4dHJhY3QoZGF0YSwgb2Zmc2V0ICsgbiAqIHNpemUsIHNpemUpOworCQl2YWx1ZVtuXSA9IG1pbiA8IDAgPworCQkJc250bzMyKGV4dHJhY3QoaGlkLCBkYXRhLCBvZmZzZXQgKyBuICogc2l6ZSwgc2l6ZSksCisJCQkgICAgICAgc2l6ZSkgOgorCQkJZXh0cmFjdChoaWQsIGRhdGEsIG9mZnNldCArIG4gKiBzaXplLCBzaXplKTsKIAotCQkJaWYgKCEoZmllbGQtPmZsYWdzICYgSElEX01BSU5fSVRFTV9WQVJJQUJMRSkgLyogSWdub3JlIHJlcG9ydCBpZiBFcnJvclJvbGxPdmVyICovCi0JCQkgICAgJiYgdmFsdWVbbl0gPj0gbWluICYmIHZhbHVlW25dIDw9IG1heAotCQkJICAgICYmIGZpZWxkLT51c2FnZVt2YWx1ZVtuXSAtIG1pbl0uaGlkID09IEhJRF9VUF9LRVlCT0FSRCArIDEpCi0JCQkJZ290byBleGl0OworCQkvKiBJZ25vcmUgcmVwb3J0IGlmIEVycm9yUm9sbE92ZXIgKi8KKwkJaWYgKCEoZmllbGQtPmZsYWdzICYgSElEX01BSU5fSVRFTV9WQVJJQUJMRSkgJiYKKwkJICAgIHZhbHVlW25dID49IG1pbiAmJiB2YWx1ZVtuXSA8PSBtYXggJiYKKwkJICAgIGZpZWxkLT51c2FnZVt2YWx1ZVtuXSAtIG1pbl0uaGlkID09IEhJRF9VUF9LRVlCT0FSRCArIDEpCisJCQlnb3RvIGV4aXQ7CiAJfQogCiAJZm9yIChuID0gMDsgbiA8IGNvdW50OyBuKyspIHsKQEAgLTkyOCw3ICs5NDYsOCBAQAogICogT3V0cHV0IHRoZSBmaWVsZCBpbnRvIHRoZSByZXBvcnQuCiAgKi8KIAotc3RhdGljIHZvaWQgaGlkX291dHB1dF9maWVsZChzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwgX191OCAqZGF0YSkKK3N0YXRpYyB2b2lkIGhpZF9vdXRwdXRfZmllbGQoY29uc3Qgc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwKKwkJCSAgICAgc3RydWN0IGhpZF9maWVsZCAqZmllbGQsIF9fdTggKmRhdGEpCiB7CiAJdW5zaWduZWQgY291bnQgPSBmaWVsZC0+cmVwb3J0X2NvdW50OwogCXVuc2lnbmVkIG9mZnNldCA9IGZpZWxkLT5yZXBvcnRfb2Zmc2V0OwpAQCAtOTM3LDkgKzk1NiwxMSBAQAogCiAJZm9yIChuID0gMDsgbiA8IGNvdW50OyBuKyspIHsKIAkJaWYgKGZpZWxkLT5sb2dpY2FsX21pbmltdW0gPCAwKQkvKiBzaWduZWQgdmFsdWVzICovCi0JCQlpbXBsZW1lbnQoZGF0YSwgb2Zmc2V0ICsgbiAqIHNpemUsIHNpemUsIHMzMnRvbihmaWVsZC0+dmFsdWVbbl0sIHNpemUpKTsKKwkJCWltcGxlbWVudChoaWQsIGRhdGEsIG9mZnNldCArIG4gKiBzaXplLCBzaXplLAorCQkJCSAgczMydG9uKGZpZWxkLT52YWx1ZVtuXSwgc2l6ZSkpOwogCQllbHNlCQkJCS8qIHVuc2lnbmVkIHZhbHVlcyAqLwotCQkJaW1wbGVtZW50KGRhdGEsIG9mZnNldCArIG4gKiBzaXplLCBzaXplLCBmaWVsZC0+dmFsdWVbbl0pOworCQkJaW1wbGVtZW50KGhpZCwgZGF0YSwgb2Zmc2V0ICsgbiAqIHNpemUsIHNpemUsCisJCQkJICBmaWVsZC0+dmFsdWVbbl0pOwogCX0KIH0KIApAQCAtOTU2LDcgKzk3Nyw3IEBACiAKIAltZW1zZXQoZGF0YSwgMCwgKChyZXBvcnQtPnNpemUgLSAxKSA+PiAzKSArIDEpOwogCWZvciAobiA9IDA7IG4gPCByZXBvcnQtPm1heGZpZWxkOyBuKyspCi0JCWhpZF9vdXRwdXRfZmllbGQocmVwb3J0LT5maWVsZFtuXSwgZGF0YSk7CisJCWhpZF9vdXRwdXRfZmllbGQocmVwb3J0LT5kZXZpY2UsIHJlcG9ydC0+ZmllbGRbbl0sIGRhdGEpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaGlkX291dHB1dF9yZXBvcnQpOwogCkBAIC0xMTY5LDggKzExOTAsNyBAQAogCQloZGV2LT5jbGFpbWVkIHw9IEhJRF9DTEFJTUVEX0hJRFJBVzsKIAogCWlmICghaGRldi0+Y2xhaW1lZCkgewotCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJjbGFpbWVkIGJ5IG5laXRoZXIgaW5wdXQsIGhpZGRldiBub3IgIgotCQkJCSJoaWRyYXdcbiIpOworCQloaWRfZXJyKGhkZXYsICJjbGFpbWVkIGJ5IG5laXRoZXIgaW5wdXQsIGhpZGRldiBub3IgaGlkcmF3XG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCkBAIC0xMjEwLDkgKzEyMzAsOSBAQAogCQlidXMgPSAiPFVOS05PV04+IjsKIAl9CiAKLQlkZXZfaW5mbygmaGRldi0+ZGV2LCAiJXM6ICVzIEhJRCB2JXguJTAyeCAlcyBbJXNdIG9uICVzXG4iLAotCQkJYnVmLCBidXMsIGhkZXYtPnZlcnNpb24gPj4gOCwgaGRldi0+dmVyc2lvbiAmIDB4ZmYsCi0JCQl0eXBlLCBoZGV2LT5uYW1lLCBoZGV2LT5waHlzKTsKKwloaWRfaW5mbyhoZGV2LCAiJXM6ICVzIEhJRCB2JXguJTAyeCAlcyBbJXNdIG9uICVzXG4iLAorCQkgYnVmLCBidXMsIGhkZXYtPnZlcnNpb24gPj4gOCwgaGRldi0+dmVyc2lvbiAmIDB4ZmYsCisJCSB0eXBlLCBoZGV2LT5uYW1lLCBoZGV2LT5waHlzKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTIzMCw3ICsxMjUwLDcgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKGhpZF9kaXNjb25uZWN0KTsKIAogLyogYSBsaXN0IG9mIGRldmljZXMgZm9yIHdoaWNoIHRoZXJlIGlzIGEgc3BlY2lhbGl6ZWQgZHJpdmVyIG9uIEhJRCBidXMgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCBoaWRfYmxhY2tsaXN0W10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgaGlkX2hhdmVfc3BlY2lhbF9kcml2ZXJbXSA9IHsKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfM00sIFVTQl9ERVZJQ0VfSURfM00xOTY4KSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF8zTSwgVVNCX0RFVklDRV9JRF8zTTIyNTYpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0E0VEVDSCwgVVNCX0RFVklDRV9JRF9BNFRFQ0hfV0NQMzJQVSkgfSwKQEAgLTEyNzYsNiArMTI5NiwxMiBAQAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HM19BTlNJKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HM19JU08pIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX1dFTExTUFJJTkczX0pJUykgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfV0VMTFNQUklORzRfQU5TSSkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfV0VMTFNQUklORzRfSVNPKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HNF9KSVMpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX1dFTExTUFJJTkc0QV9BTlNJKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HNEFfSVNPKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HNEFfSklTKSB9LAogCXsgSElEX0JMVUVUT09USF9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9BTFVfV0lSRUxFU1NfMjAwOV9BTlNJKSB9LAogCXsgSElEX0JMVUVUT09USF9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9BTFVfV0lSRUxFU1NfMjAwOV9JU08pIH0sCiAJeyBISURfQkxVRVRPT1RIX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0FMVV9XSVJFTEVTU18yMDA5X0pJUykgfSwKQEAgLTEyOTIsNiArMTMxOCw3IEBACiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0NIRVJSWSwgVVNCX0RFVklDRV9JRF9DSEVSUllfQ1lNT1RJT04pIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0NIRVJSWSwgVVNCX0RFVklDRV9JRF9DSEVSUllfQ1lNT1RJT05fU09MQVIpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0NISUNPTlksIFVTQl9ERVZJQ0VfSURfQ0hJQ09OWV9UQUNUSUNBTF9QQUQpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0NISUNPTlksIFVTQl9ERVZJQ0VfSURfQ0hJQ09OWV9XSVJFTEVTUykgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQ1JFQVRJVkVMQUJTLCBVU0JfREVWSUNFX0lEX1BST0RJS0VZU19QQ01JREkpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0NZUFJFU1MsIFVTQl9ERVZJQ0VfSURfQ1lQUkVTU19CQVJDT0RFXzEpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0NZUFJFU1MsIFVTQl9ERVZJQ0VfSURfQ1lQUkVTU19CQVJDT0RFXzIpIH0sCkBAIC0xMzAwLDcgKzEzMjcsMTEgQEAKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfRFJBR09OUklTRSwgMHgwMDA2KSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9EV0FWLCBVU0JfREVWSUNFX0lEX0RXQVZfRUdBTEFYX01VTFRJVE9VQ0gpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0RXQVYsIFVTQl9ERVZJQ0VfSURfRFdBVl9FR0FMQVhfTVVMVElUT1VDSDEpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0RXQVYsIFVTQl9ERVZJQ0VfSURfRFdBVl9FR0FMQVhfTVVMVElUT1VDSDIpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0RXQVYsIFVTQl9ERVZJQ0VfSURfRFdBVl9FR0FMQVhfTVVMVElUT1VDSDMpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0RXQVYsIFVTQl9ERVZJQ0VfSURfRFdBVl9FR0FMQVhfTVVMVElUT1VDSDQpIH0sCiAJeyBISURfQkxVRVRPT1RIX0RFVklDRShVU0JfVkVORE9SX0lEX0VMRUNPTSwgVVNCX0RFVklDRV9JRF9FTEVDT01fQk0wODQpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0VNUywgVVNCX0RFVklDRV9JRF9FTVNfVFJJT19MSU5LRVJfUExVU19JSSkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfRVpLRVksIFVTQl9ERVZJQ0VfSURfQlRDXzgxOTMpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dBTUVST04sIFVTQl9ERVZJQ0VfSURfR0FNRVJPTl9EVUFMX1BTWF9BREFQVE9SKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9HQU1FUk9OLCBVU0JfREVWSUNFX0lEX0dBTUVST05fRFVBTF9QQ1NfQURBUFRPUikgfSwKQEAgLTEzNjksNiArMTQwMCw3IEBACiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1FVQU5UQSwgVVNCX0RFVklDRV9JRF9RVUFOVEFfT1BUSUNBTF9UT1VDSCkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfUVVBTlRBLCBVU0JfREVWSUNFX0lEX1BJWEFSVF9JTUFHSU5HX0lOQ19PUFRJQ0FMX1RPVUNIX1NDUkVFTikgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfUk9DQ0FULCBVU0JfREVWSUNFX0lEX1JPQ0NBVF9LT05FKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9ST0NDQVQsIFVTQl9ERVZJQ0VfSURfUk9DQ0FUX0tPTkVQTFVTKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9ST0NDQVQsIFVTQl9ERVZJQ0VfSURfUk9DQ0FUX1BZUkFfV0lSRUQpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1NBTVNVTkcsIFVTQl9ERVZJQ0VfSURfU0FNU1VOR19JUl9SRU1PVEUpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1NBTVNVTkcsIFVTQl9ERVZJQ0VfSURfU0FNU1VOR19XSVJFTEVTU19LQkRfTU9VU0UpIH0sCkBAIC0xNDk2LDkgKzE1MjgsOSBAQAogCWlmICghaGlkX21hdGNoX2RldmljZShoZGV2LCBoZHJ2KSkKIAkJcmV0dXJuIDA7CiAKLQkvKiBnZW5lcmljIHdhbnRzIGFsbCBub24tYmxhY2tsaXN0ZWQgKi8KKwkvKiBnZW5lcmljIHdhbnRzIGFsbCB0aGF0IGRvbid0IGhhdmUgc3BlY2lhbGl6ZWQgZHJpdmVyICovCiAJaWYgKCFzdHJuY21wKGhkcnYtPm5hbWUsICJnZW5lcmljLSIsIDgpKQotCQlyZXR1cm4gIWhpZF9tYXRjaF9pZChoZGV2LCBoaWRfYmxhY2tsaXN0KTsKKwkJcmV0dXJuICFoaWRfbWF0Y2hfaWQoaGRldiwgaGlkX2hhdmVfc3BlY2lhbF9kcml2ZXIpOwogCiAJcmV0dXJuIDE7CiB9CkBAIC0xNjA0LDYgKzE2MzYsNyBAQAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9ERUFMRVhUUkVBTUUsIFVTQl9ERVZJQ0VfSURfREVBTEVYVFJFQU1FX1JBRElPX1NJNDcwMSkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfREVMT1JNRSwgVVNCX0RFVklDRV9JRF9ERUxPUk1FX0VBUlRITUFURSkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfREVMT1JNRSwgVVNCX0RFVklDRV9JRF9ERUxPUk1FX0VNX0xUMjApIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0RSRUFNX0NIRUVLWSwgMHgwMDA0KSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9FU1NFTlRJQUxfUkVBTElUWSwgVVNCX0RFVklDRV9JRF9FU1NFTlRJQUxfUkVBTElUWV9QNSkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfRVRULCBVU0JfREVWSUNFX0lEX1RDNVVIKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9FVFQsIFVTQl9ERVZJQ0VfSURfVEM0VU0pIH0sCkBAIC0xNzU3LDYgKzE3OTAsMTIgQEAKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfV0VMTFNQUklORzNfQU5TSSkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfV0VMTFNQUklORzNfSVNPKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HM19KSVMpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX1dFTExTUFJJTkc0X0FOU0kpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX1dFTExTUFJJTkc0X0lTTykgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfV0VMTFNQUklORzRfSklTKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HNEFfQU5TSSkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfV0VMTFNQUklORzRBX0lTTykgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfV0VMTFNQUklORzRBX0pJUykgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfRk9VTlRBSU5fVFBfT05MWSkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfR0VZU0VSMV9UUF9PTkxZKSB9LAogCXsgfQpAQCAtMTk0OCwxMiArMTk4NywxMiBAQAogCWludCByZXQ7CiAKIAlpZiAoaGlkX2RlYnVnKQotCQlwcmludGsoS0VSTl9XQVJOSU5HICJISUQ6IGhpZF9kZWJ1ZyBpcyBub3cgdXNlZCBzb2xlbHkgZm9yIHBhcnNlciBhbmQgZHJpdmVyIGRlYnVnZ2luZy5cbiIKLQkJCQkiSElEOiBkZWJ1Z2ZzIGlzIG5vdyB1c2VkIGZvciBpbnNwZWN0aW5nIHRoZSBkZXZpY2UgKHJlcG9ydCBkZXNjcmlwdG9yLCByZXBvcnRzKVxuIik7CisJCXByX3dhcm4oImhpZF9kZWJ1ZyBpcyBub3cgdXNlZCBzb2xlbHkgZm9yIHBhcnNlciBhbmQgZHJpdmVyIGRlYnVnZ2luZy5cbiIKKwkJCSJkZWJ1Z2ZzIGlzIG5vdyB1c2VkIGZvciBpbnNwZWN0aW5nIHRoZSBkZXZpY2UgKHJlcG9ydCBkZXNjcmlwdG9yLCByZXBvcnRzKVxuIik7CiAKIAlyZXQgPSBidXNfcmVnaXN0ZXIoJmhpZF9idXNfdHlwZSk7CiAJaWYgKHJldCkgewotCQlwcmludGsoS0VSTl9FUlIgIkhJRDogY2FuJ3QgcmVnaXN0ZXIgaGlkIGJ1c1xuIik7CisJCXByX2VycigiY2FuJ3QgcmVnaXN0ZXIgaGlkIGJ1c1xuIik7CiAJCWdvdG8gZXJyOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWN5cHJlc3MuYyBiL2RyaXZlcnMvaGlkL2hpZC1jeXByZXNzLmMKaW5kZXggNGNkMGUyMy4uMmYwYmU0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLWN5cHJlc3MuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtY3lwcmVzcy5jCkBAIC0xMDcsMTMgKzEwNywxMyBAQAogCiAJcmV0ID0gaGlkX3BhcnNlKGhkZXYpOwogCWlmIChyZXQpIHsKLQkJZGV2X2VycigmaGRldi0+ZGV2LCAicGFyc2UgZmFpbGVkXG4iKTsKKwkJaGlkX2VycihoZGV2LCAicGFyc2UgZmFpbGVkXG4iKTsKIAkJZ290byBlcnJfZnJlZTsKIAl9CiAKIAlyZXQgPSBoaWRfaHdfc3RhcnQoaGRldiwgSElEX0NPTk5FQ1RfREVGQVVMVCk7CiAJaWYgKHJldCkgewotCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJodyBzdGFydCBmYWlsZWRcbiIpOworCQloaWRfZXJyKGhkZXYsICJodyBzdGFydCBmYWlsZWRcbiIpOwogCQlnb3RvIGVycl9mcmVlOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWRlYnVnLmMgYi9kcml2ZXJzL2hpZC9oaWQtZGVidWcuYwppbmRleCA3NWM1ZTIzLi41NTUzODJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtZGVidWcuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtZGVidWcuYwpAQCAtMjYsNiArMjYsOCBAQAogICogVm9qdGVjaCBQYXZsaWssIFNpbXVua292YSAxNTk0LCBQcmFndWUgOCwgMTgyIDAwIEN6ZWNoIFJlcHVibGljCiAgKi8KIAorI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KQEAgLTM5Myw3ICszOTUsNyBAQAogCiAJYnVmID0gcmVzb2x2X3VzYWdlX3BhZ2UodXNhZ2UgPj4gMTYsIGYpOwogCWlmIChJU19FUlIoYnVmKSkgewotCQlwcmludGsoS0VSTl9FUlIgImVycm9yIGFsbG9jYXRpbmcgSElEIGRlYnVnIGJ1ZmZlclxuIik7CisJCXByX2VycigiZXJyb3IgYWxsb2NhdGluZyBISUQgZGVidWcgYnVmZmVyXG4iKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtZHJmZi5jIGIvZHJpdmVycy9oaWQvaGlkLWRyZmYuYwppbmRleCA5NjhiMDRmLi5hZmNmM2Q2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtZHJmZi5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1kcmZmLmMKQEAgLTk2LDE4ICs5NiwxOCBAQAogCWludCBlcnJvcjsKIAogCWlmIChsaXN0X2VtcHR5KHJlcG9ydF9saXN0KSkgewotCQlkZXZfZXJyKCZoaWQtPmRldiwgIm5vIG91dHB1dCByZXBvcnRzIGZvdW5kXG4iKTsKKwkJaGlkX2VycihoaWQsICJubyBvdXRwdXQgcmVwb3J0cyBmb3VuZFxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAogCXJlcG9ydCA9IGxpc3RfZmlyc3RfZW50cnkocmVwb3J0X2xpc3QsIHN0cnVjdCBoaWRfcmVwb3J0LCBsaXN0KTsKIAlpZiAocmVwb3J0LT5tYXhmaWVsZCA8IDEpIHsKLQkJZGV2X2VycigmaGlkLT5kZXYsICJubyBmaWVsZHMgaW4gdGhlIHJlcG9ydFxuIik7CisJCWhpZF9lcnIoaGlkLCAibm8gZmllbGRzIGluIHRoZSByZXBvcnRcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlpZiAocmVwb3J0LT5maWVsZFswXS0+cmVwb3J0X2NvdW50IDwgNykgewotCQlkZXZfZXJyKCZoaWQtPmRldiwgIm5vdCBlbm91Z2ggdmFsdWVzIGluIHRoZSBmaWVsZFxuIik7CisJCWhpZF9lcnIoaGlkLCAibm90IGVub3VnaCB2YWx1ZXMgaW4gdGhlIGZpZWxkXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCkBAIC0xMzMsOCArMTMzLDggQEAKIAlkcmZmLT5yZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVs2XSA9IDB4MDA7CiAJdXNiaGlkX3N1Ym1pdF9yZXBvcnQoaGlkLCBkcmZmLT5yZXBvcnQsIFVTQl9ESVJfT1VUKTsKIAotCWRldl9pbmZvKCZoaWQtPmRldiwgIkZvcmNlIEZlZWRiYWNrIGZvciBEcmFnb25SaXNlIEluYy4gZ2FtZSAiCi0JICAgICAgICJjb250cm9sbGVycyBieSBSaWNoYXJkIFdhbG1zbGV5IDxyaWNod2FsbUBnbWFpbC5jb20+XG4iKTsKKwloaWRfaW5mbyhoaWQsICJGb3JjZSBGZWVkYmFjayBmb3IgRHJhZ29uUmlzZSBJbmMuICIKKwkJICJnYW1lIGNvbnRyb2xsZXJzIGJ5IFJpY2hhcmQgV2FsbXNsZXkgPHJpY2h3YWxtQGdtYWlsLmNvbT5cbiIpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNTMsMTMgKzE1MywxMyBAQAogCiAJcmV0ID0gaGlkX3BhcnNlKGhkZXYpOwogCWlmIChyZXQpIHsKLQkJZGV2X2VycigmaGRldi0+ZGV2LCAicGFyc2UgZmFpbGVkXG4iKTsKKwkJaGlkX2VycihoZGV2LCAicGFyc2UgZmFpbGVkXG4iKTsKIAkJZ290byBlcnI7CiAJfQogCiAJcmV0ID0gaGlkX2h3X3N0YXJ0KGhkZXYsIEhJRF9DT05ORUNUX0RFRkFVTFQgJiB+SElEX0NPTk5FQ1RfRkYpOwogCWlmIChyZXQpIHsKLQkJZGV2X2VycigmaGRldi0+ZGV2LCAiaHcgc3RhcnQgZmFpbGVkXG4iKTsKKwkJaGlkX2VycihoZGV2LCAiaHcgc3RhcnQgZmFpbGVkXG4iKTsKIAkJZ290byBlcnI7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtZWdhbGF4LmMgYi9kcml2ZXJzL2hpZC9oaWQtZWdhbGF4LmMKaW5kZXggNWExYjUyZS4uMDNiZWUxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLWVnYWxheC5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1lZ2FsYXguYwpAQCAtMiw2ICsyLDggQEAKICAqICBISUQgZHJpdmVyIGZvciBlR2FsYXggZHVhbC10b3VjaCBwYW5lbHMKICAqCiAgKiAgQ29weXJpZ2h0IChjKSAyMDEwIFN0ZXBoYW5lIENoYXR0eSA8Y2hhdHR5QGVuYWMuZnI+CisgKiAgQ29weXJpZ2h0IChjKSAyMDEwIEhlbnJpayBSeWRiZXJnIDxyeWRiZXJnQGV1cm9tYWlsLnNlPgorICogIENvcHlyaWdodCAoYykgMjAxMCBDYW5vbmljYWwsIEx0ZC4KICAqCiAgKi8KIApAQCAtMTYsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2hpZC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0L210Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgInVzYmhpZC91c2JoaWQuaCIKIApAQCAtMjUsMzggKzI4LDUzIEBACiAKICNpbmNsdWRlICJoaWQtaWRzLmgiCiAKKyNkZWZpbmUgTUFYX1NMT1RTCQkyCisKKy8qIGVzdGltYXRlZCBzaWduYWwtdG8tbm9pc2UgcmF0aW9zICovCisjZGVmaW5lIFNOX01PVkUJCQk0MDk2CisjZGVmaW5lIFNOX1BSRVNTVVJFCQkzMgorCiBzdHJ1Y3QgZWdhbGF4X2RhdGEgewotCV9fdTE2IHgsIHksIHo7Ci0JX191OCBpZDsKLQlib29sIGZpcnN0OwkJLyogaXMgdGhpcyB0aGUgZmlyc3QgZmluZ2VyIGluIHRoZSBmcmFtZT8gKi8KLQlib29sIHZhbGlkOwkJLyogdmFsaWQgZmluZ2VyIGRhdGEsIG9yIGp1c3QgcGxhY2Vob2xkZXI/ICovCi0JYm9vbCBhY3Rpdml0eTsJCS8qIGF0IGxlYXN0IG9uZSBhY3RpdmUgZmluZ2VyIHByZXZpb3VzbHk/ICovCi0JX191MTYgbGFzdHgsIGxhc3R5LCBsYXN0ejsJLyogbGF0ZXN0IHZhbGlkICh4LCB5LCB6KSBpbiB0aGUgZnJhbWUgKi8KKwlpbnQgdmFsaWQ7CisJaW50IHNsb3Q7CisJaW50IHRvdWNoOworCWludCB4LCB5LCB6OwogfTsKIAorc3RhdGljIHZvaWQgc2V0X2FicyhzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCwgdW5zaWduZWQgaW50IGNvZGUsCisJCSAgICBzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwgaW50IHNucmF0aW8pCit7CisJaW50IGZtaW4gPSBmaWVsZC0+bG9naWNhbF9taW5pbXVtOworCWludCBmbWF4ID0gZmllbGQtPmxvZ2ljYWxfbWF4aW11bTsKKwlpbnQgZnV6eiA9IHNucmF0aW8gPyAoZm1heCAtIGZtaW4pIC8gc25yYXRpbyA6IDA7CisJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXQsIGNvZGUsIGZtaW4sIGZtYXgsIGZ1enosIDApOworfQorCiBzdGF0aWMgaW50IGVnYWxheF9pbnB1dF9tYXBwaW5nKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBzdHJ1Y3QgaGlkX2lucHV0ICpoaSwKIAkJc3RydWN0IGhpZF9maWVsZCAqZmllbGQsIHN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLAogCQl1bnNpZ25lZCBsb25nICoqYml0LCBpbnQgKm1heCkKIHsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCA9IGhpLT5pbnB1dDsKKwogCXN3aXRjaCAodXNhZ2UtPmhpZCAmIEhJRF9VU0FHRV9QQUdFKSB7CiAKIAljYXNlIEhJRF9VUF9HRU5ERVNLOgogCQlzd2l0Y2ggKHVzYWdlLT5oaWQpIHsKIAkJY2FzZSBISURfR0RfWDoKKwkJCWZpZWxkLT5sb2dpY2FsX21heGltdW0gPSAzMjc2MDsKIAkJCWhpZF9tYXBfdXNhZ2UoaGksIHVzYWdlLCBiaXQsIG1heCwKIAkJCQkJRVZfQUJTLCBBQlNfTVRfUE9TSVRJT05fWCk7CisJCQlzZXRfYWJzKGlucHV0LCBBQlNfTVRfUE9TSVRJT05fWCwgZmllbGQsIFNOX01PVkUpOwogCQkJLyogdG91Y2hzY3JlZW4gZW11bGF0aW9uICovCi0JCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhoaS0+aW5wdXQsIEFCU19YLAotCQkJCQkJZmllbGQtPmxvZ2ljYWxfbWluaW11bSwKLQkJCQkJCWZpZWxkLT5sb2dpY2FsX21heGltdW0sIDAsIDApOworCQkJc2V0X2FicyhpbnB1dCwgQUJTX1gsIGZpZWxkLCBTTl9NT1ZFKTsKIAkJCXJldHVybiAxOwogCQljYXNlIEhJRF9HRF9ZOgorCQkJZmllbGQtPmxvZ2ljYWxfbWF4aW11bSA9IDMyNzYwOwogCQkJaGlkX21hcF91c2FnZShoaSwgdXNhZ2UsIGJpdCwgbWF4LAogCQkJCQlFVl9BQlMsIEFCU19NVF9QT1NJVElPTl9ZKTsKKwkJCXNldF9hYnMoaW5wdXQsIEFCU19NVF9QT1NJVElPTl9ZLCBmaWVsZCwgU05fTU9WRSk7CiAJCQkvKiB0b3VjaHNjcmVlbiBlbXVsYXRpb24gKi8KLQkJCWlucHV0X3NldF9hYnNfcGFyYW1zKGhpLT5pbnB1dCwgQUJTX1ksCi0JCQkJCQlmaWVsZC0+bG9naWNhbF9taW5pbXVtLAotCQkJCQkJZmllbGQtPmxvZ2ljYWxfbWF4aW11bSwgMCwgMCk7CisJCQlzZXRfYWJzKGlucHV0LCBBQlNfWSwgZmllbGQsIFNOX01PVkUpOwogCQkJcmV0dXJuIDE7CiAJCX0KIAkJcmV0dXJuIDA7CkBAIC02Niw2ICs4NCw3IEBACiAJCWNhc2UgSElEX0RHX1RJUFNXSVRDSDoKIAkJCS8qIHRvdWNoc2NyZWVuIGVtdWxhdGlvbiAqLwogCQkJaGlkX21hcF91c2FnZShoaSwgdXNhZ2UsIGJpdCwgbWF4LCBFVl9LRVksIEJUTl9UT1VDSCk7CisJCQlpbnB1dF9zZXRfY2FwYWJpbGl0eShpbnB1dCwgRVZfS0VZLCBCVE5fVE9VQ0gpOwogCQkJcmV0dXJuIDE7CiAJCWNhc2UgSElEX0RHX0lOUkFOR0U6CiAJCWNhc2UgSElEX0RHX0NPTkZJREVOQ0U6CkBAIC03MywxNiArOTIsMTUgQEAKIAkJY2FzZSBISURfREdfQ09OVEFDVE1BWDoKIAkJCXJldHVybiAtMTsKIAkJY2FzZSBISURfREdfQ09OVEFDVElEOgotCQkJaGlkX21hcF91c2FnZShoaSwgdXNhZ2UsIGJpdCwgbWF4LAotCQkJCQlFVl9BQlMsIEFCU19NVF9UUkFDS0lOR19JRCk7CisJCQlpbnB1dF9tdF9pbml0X3Nsb3RzKGlucHV0LCBNQVhfU0xPVFMpOwogCQkJcmV0dXJuIDE7CiAJCWNhc2UgSElEX0RHX1RJUFBSRVNTVVJFOgorCQkJZmllbGQtPmxvZ2ljYWxfbWluaW11bSA9IDA7CiAJCQloaWRfbWFwX3VzYWdlKGhpLCB1c2FnZSwgYml0LCBtYXgsCiAJCQkJCUVWX0FCUywgQUJTX01UX1BSRVNTVVJFKTsKKwkJCXNldF9hYnMoaW5wdXQsIEFCU19NVF9QUkVTU1VSRSwgZmllbGQsIFNOX1BSRVNTVVJFKTsKIAkJCS8qIHRvdWNoc2NyZWVuIGVtdWxhdGlvbiAqLwotCQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaGktPmlucHV0LCBBQlNfUFJFU1NVUkUsCi0JCQkJCQlmaWVsZC0+bG9naWNhbF9taW5pbXVtLAotCQkJCQkJZmllbGQtPmxvZ2ljYWxfbWF4aW11bSwgMCwgMCk7CisJCQlzZXRfYWJzKGlucHV0LCBBQlNfUFJFU1NVUkUsIGZpZWxkLCBTTl9QUkVTU1VSRSk7CiAJCQlyZXR1cm4gMTsKIAkJfQogCQlyZXR1cm4gMDsKQEAgLTk2LDEwICsxMTQsMTAgQEAKIAkJc3RydWN0IGhpZF9maWVsZCAqZmllbGQsIHN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLAogCQl1bnNpZ25lZCBsb25nICoqYml0LCBpbnQgKm1heCkKIHsKKwkvKiB0ZWxsIGhpZC1pbnB1dCB0byBza2lwIHNldHVwIG9mIHRoZXNlIGV2ZW50IHR5cGVzICovCiAJaWYgKHVzYWdlLT50eXBlID09IEVWX0tFWSB8fCB1c2FnZS0+dHlwZSA9PSBFVl9BQlMpCi0JCWNsZWFyX2JpdCh1c2FnZS0+Y29kZSwgKmJpdCk7Ci0KLQlyZXR1cm4gMDsKKwkJc2V0X2JpdCh1c2FnZS0+dHlwZSwgaGktPmlucHV0LT5ldmJpdCk7CisJcmV0dXJuIC0xOwogfQogCiAvKgpAQCAtMTA4LDU4ICsxMjYsMTYgQEAKICAqLwogc3RhdGljIHZvaWQgZWdhbGF4X2ZpbHRlcl9ldmVudChzdHJ1Y3QgZWdhbGF4X2RhdGEgKnRkLCBzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCkKIHsKLQl0ZC0+Zmlyc3QgPSAhdGQtPmZpcnN0OyAvKiB0b3VjaHNjcmVlbiBlbXVsYXRpb24gKi8KLQotCWlmICh0ZC0+dmFsaWQpIHsKLQkJLyogZW1pdCBtdWx0aXRvdWNoIGV2ZW50cyAqLwotCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfTVRfVFJBQ0tJTkdfSUQsIHRkLT5pZCk7Ci0JCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19NVF9QT1NJVElPTl9YLCB0ZC0+eCA+PiAzKTsKLQkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX01UX1BPU0lUSU9OX1ksIHRkLT55ID4+IDMpOworCWlucHV0X210X3Nsb3QoaW5wdXQsIHRkLT5zbG90KTsKKwlpbnB1dF9tdF9yZXBvcnRfc2xvdF9zdGF0ZShpbnB1dCwgTVRfVE9PTF9GSU5HRVIsIHRkLT50b3VjaCk7CisJaWYgKHRkLT50b3VjaCkgeworCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfTVRfUE9TSVRJT05fWCwgdGQtPngpOworCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfTVRfUE9TSVRJT05fWSwgdGQtPnkpOwogCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfTVRfUFJFU1NVUkUsIHRkLT56KTsKLQotCQlpbnB1dF9tdF9zeW5jKGlucHV0KTsKLQotCQkvKgotCQkgKiB0b3VjaHNjcmVlbiBlbXVsYXRpb246IHN0b3JlICh4LCB5KSBhcwotCQkgKiB0aGUgbGFzdCB2YWxpZCB2YWx1ZXMgaW4gdGhpcyBmcmFtZQotCQkgKi8KLQkJdGQtPmxhc3R4ID0gdGQtPng7Ci0JCXRkLT5sYXN0eSA9IHRkLT55OwotCQl0ZC0+bGFzdHogPSB0ZC0+ejsKIAl9Ci0KLQkvKgotCSAqIHRvdWNoc2NyZWVuIGVtdWxhdGlvbjogaWYgdGhpcyBpcyB0aGUgc2Vjb25kIGZpbmdlciBhbmQgYXQgbGVhc3QKLQkgKiBvbmUgaW4gdGhpcyBmcmFtZSBpcyB2YWxpZCwgdGhlIGxhdGVzdCB2YWxpZCBpbiB0aGUgZnJhbWUgaXMKLQkgKiB0aGUgb2xkZXN0IG9uIHRoZSBwYW5lbCwgdGhlIG9uZSB3ZSB3YW50IGZvciBzaW5nbGUgdG91Y2gKLQkgKi8KLQlpZiAoIXRkLT5maXJzdCAmJiB0ZC0+YWN0aXZpdHkpIHsKLQkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX1gsIHRkLT5sYXN0eCA+PiAzKTsKLQkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX1ksIHRkLT5sYXN0eSA+PiAzKTsKLSAJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19QUkVTU1VSRSwgdGQtPmxhc3R6KTsKLQl9Ci0KLQlpZiAoIXRkLT52YWxpZCkgewotCQkvKgotCQkgKiB0b3VjaHNjcmVlbiBlbXVsYXRpb246IGlmIHRoZSBmaXJzdCBmaW5nZXIgaXMgaW52YWxpZAotCQkgKiBhbmQgdGhlcmUgcHJldmlvdXNseSB3YXMgZmluZ2VyIGFjdGl2aXR5LCB0aGlzIGlzIGEgcmVsZWFzZQotCQkgKi8gCi0JCWlmICh0ZC0+Zmlyc3QgJiYgdGQtPmFjdGl2aXR5KSB7Ci0JCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfS0VZLCBCVE5fVE9VQ0gsIDApOwotCQkJdGQtPmFjdGl2aXR5ID0gZmFsc2U7Ci0JCX0KLQkJcmV0dXJuOwotCX0KLQotCi0JLyogdG91Y2hzY3JlZW4gZW11bGF0aW9uOiBpZiBubyBwcmV2aW91cyBhY3Rpdml0eSwgZW1pdCB0b3VjaCBldmVudCAqLwotCWlmICghdGQtPmFjdGl2aXR5KSB7Ci0JCWlucHV0X2V2ZW50KGlucHV0LCBFVl9LRVksIEJUTl9UT1VDSCwgMSk7Ci0JCXRkLT5hY3Rpdml0eSA9IHRydWU7Ci0JfQorCWlucHV0X210X3JlcG9ydF9wb2ludGVyX2VtdWxhdGlvbihpbnB1dCwgdHJ1ZSk7CiB9CiAKLQogc3RhdGljIGludCBlZ2FsYXhfZXZlbnQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgc3RydWN0IGhpZF9maWVsZCAqZmllbGQsCiAJCQkJc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsIF9fczMyIHZhbHVlKQogewpAQCAtMTY5LDI1ICsxNDUsMjYgQEAKIAkgKiB1c2VzIGEgc3RhbmRhcmQgcGFyYWxsZWwgbXVsdGl0b3VjaCBwcm90b2NvbCAocHJvZHVjdCBJRCA9PQogCSAqIDQ4eHgpLiAgVGhlIHNlY29uZCBpcyBjYXBhY2l0aXZlIGFuZCB1c2VzIGFuIHVudXN1YWwgInNlcmlhbCIKIAkgKiBwcm90b2NvbCB3aXRoIGEgZGlmZmVyZW50IG1lc3NhZ2UgZm9yIGVhY2ggbXVsdGl0b3VjaCBmaW5nZXIKLQkgKiAocHJvZHVjdCBJRCA9PSA3Mnh4KS4gIFdlIGRvIG5vdCB5ZXQgZ2VuZXJhdGUgYSBjb3JyZWN0IGV2ZW50Ci0JICogc2VxdWVuY2UgZm9yIHRoZSBjYXBhY2l0aXZlL3NlcmlhbCBwcm90b2NvbC4KKwkgKiAocHJvZHVjdCBJRCA9PSA3Mnh4KS4KIAkgKi8KIAlpZiAoaGlkLT5jbGFpbWVkICYgSElEX0NMQUlNRURfSU5QVVQpIHsKIAkJc3RydWN0IGlucHV0X2RldiAqaW5wdXQgPSBmaWVsZC0+aGlkaW5wdXQtPmlucHV0OwogCiAJCXN3aXRjaCAodXNhZ2UtPmhpZCkgewogCQljYXNlIEhJRF9ER19JTlJBTkdFOgorCQkJdGQtPnZhbGlkID0gdmFsdWU7CisJCQlicmVhazsKIAkJY2FzZSBISURfREdfQ09ORklERU5DRToKIAkJCS8qIGF2b2lkIGludGVyZmVyZW5jZSBmcm9tIGdlbmVyaWMgaGlkaW5wdXQgaGFuZGxpbmcgKi8KIAkJCWJyZWFrOwogCQljYXNlIEhJRF9ER19USVBTV0lUQ0g6Ci0JCQl0ZC0+dmFsaWQgPSB2YWx1ZTsKKwkJCXRkLT50b3VjaCA9IHZhbHVlOwogCQkJYnJlYWs7CiAJCWNhc2UgSElEX0RHX1RJUFBSRVNTVVJFOgogCQkJdGQtPnogPSB2YWx1ZTsKIAkJCWJyZWFrOwogCQljYXNlIEhJRF9ER19DT05UQUNUSUQ6Ci0JCQl0ZC0+aWQgPSB2YWx1ZTsKKwkJCXRkLT5zbG90ID0gY2xhbXBfdmFsKHZhbHVlLCAwLCBNQVhfU0xPVFMgLSAxKTsKIAkJCWJyZWFrOwogCQljYXNlIEhJRF9HRF9YOgogCQkJdGQtPnggPSB2YWx1ZTsKQEAgLTE5NSwxMSArMTcyLDExIEBACiAJCWNhc2UgSElEX0dEX1k6CiAJCQl0ZC0+eSA9IHZhbHVlOwogCQkJLyogdGhpcyBpcyB0aGUgbGFzdCBmaWVsZCBpbiBhIGZpbmdlciAqLwotCQkJZWdhbGF4X2ZpbHRlcl9ldmVudCh0ZCwgaW5wdXQpOworCQkJaWYgKHRkLT52YWxpZCkKKwkJCQllZ2FsYXhfZmlsdGVyX2V2ZW50KHRkLCBpbnB1dCk7CiAJCQlicmVhazsKIAkJY2FzZSBISURfREdfQ09OVEFDVENPVU5UOgogCQkJLyogdG91Y2ggZW11bGF0aW9uOiB0aGlzIGlzIHRoZSBsYXN0IGZpZWxkIGluIGEgZnJhbWUgKi8KLQkJCXRkLT5maXJzdCA9IGZhbHNlOwogCQkJYnJlYWs7CiAKIAkJZGVmYXVsdDoKQEAgLTIyMyw3ICsyMDAsNyBAQAogCiAJdGQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZWdhbGF4X2RhdGEpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXRkKSB7Ci0JCWRldl9lcnIoJmhkZXYtPmRldiwgImNhbm5vdCBhbGxvY2F0ZSBlR2FsYXggZGF0YVxuIik7CisJCWhpZF9lcnIoaGRldiwgImNhbm5vdCBhbGxvY2F0ZSBlR2FsYXggZGF0YVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAloaWRfc2V0X2RydmRhdGEoaGRldiwgdGQpOwpAQCAtMjYxLDYgKzIzOCwxMiBAQAogCQkJVVNCX0RFVklDRV9JRF9EV0FWX0VHQUxBWF9NVUxUSVRPVUNIKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9EV0FWLAogCQkJVVNCX0RFVklDRV9JRF9EV0FWX0VHQUxBWF9NVUxUSVRPVUNIMSkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfRFdBViwKKwkJCVVTQl9ERVZJQ0VfSURfRFdBVl9FR0FMQVhfTVVMVElUT1VDSDIpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0RXQVYsCisJCQlVU0JfREVWSUNFX0lEX0RXQVZfRUdBTEFYX01VTFRJVE9VQ0gzKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9EV0FWLAorCQkJVVNCX0RFVklDRV9JRF9EV0FWX0VHQUxBWF9NVUxUSVRPVUNINCkgfSwKIAl7IH0KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKGhpZCwgZWdhbGF4X2RldmljZXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWVsZWNvbS5jIGIvZHJpdmVycy9oaWQvaGlkLWVsZWNvbS5jCmluZGV4IDZlMzFmMzAuLjc5ZDBjNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1lbGVjb20uYworKysgYi9kcml2ZXJzL2hpZC9oaWQtZWxlY29tLmMKQEAgLTI0LDggKzI0LDcgQEAKIAkJdW5zaWduZWQgaW50ICpyc2l6ZSkKIHsKIAlpZiAoKnJzaXplID49IDQ4ICYmIHJkZXNjWzQ2XSA9PSAweDA1ICYmIHJkZXNjWzQ3XSA9PSAweDBjKSB7Ci0JCWRldl9pbmZvKCZoZGV2LT5kZXYsICJGaXhpbmcgdXAgRWxlY29tIEJNMDg0ICIKLQkJCQkicmVwb3J0IGRlc2NyaXB0b3IuXG4iKTsKKwkJaGlkX2luZm8oaGRldiwgIkZpeGluZyB1cCBFbGVjb20gQk0wODQgcmVwb3J0IGRlc2NyaXB0b3JcbiIpOwogCQlyZGVzY1s0N10gPSAweDAwOwogCX0KICAgICByZXR1cm4gcmRlc2M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtZW1zZmYuYyBiL2RyaXZlcnMvaGlkL2hpZC1lbXNmZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxODc3YzYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2hpZC9oaWQtZW1zZmYuYwpAQCAtMCwwICsxLDE2MSBAQAorLyoKKyAqICBGb3JjZSBmZWVkYmFjayBzdXBwb3J0IGZvciBFTVMgVHJpbyBMaW5rZXIgUGx1cyBJSQorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTAgSWduYXogRm9yc3RlciA8aWduYXouZm9yc3RlckBnbXguZGU+CisgKi8KKworLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworCisjaW5jbHVkZSA8bGludXgvaGlkLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKworI2luY2x1ZGUgImhpZC1pZHMuaCIKKyNpbmNsdWRlICJ1c2JoaWQvdXNiaGlkLmgiCisKK3N0cnVjdCBlbXNmZl9kZXZpY2UgeworCXN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQ7Cit9OworCitzdGF0aWMgaW50IGVtc2ZmX3BsYXkoc3RydWN0IGlucHV0X2RldiAqZGV2LCB2b2lkICpkYXRhLAorCQkJIHN0cnVjdCBmZl9lZmZlY3QgKmVmZmVjdCkKK3sKKwlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkID0gaW5wdXRfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZW1zZmZfZGV2aWNlICplbXNmZiA9IGRhdGE7CisJaW50IHdlYWssIHN0cm9uZzsKKworCXdlYWsgPSBlZmZlY3QtPnUucnVtYmxlLndlYWtfbWFnbml0dWRlOworCXN0cm9uZyA9IGVmZmVjdC0+dS5ydW1ibGUuc3Ryb25nX21hZ25pdHVkZTsKKworCWRiZ19oaWQoImNhbGxlZCB3aXRoIDB4JTA0eCAweCUwNHhcbiIsIHN0cm9uZywgd2Vhayk7CisKKwl3ZWFrID0gd2VhayAqIDB4ZmYgLyAweGZmZmY7CisJc3Ryb25nID0gc3Ryb25nICogMHhmZiAvIDB4ZmZmZjsKKworCWVtc2ZmLT5yZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVsxXSA9IHdlYWs7CisJZW1zZmYtPnJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzJdID0gc3Ryb25nOworCisJZGJnX2hpZCgicnVubmluZyB3aXRoIDB4JTAyeCAweCUwMnhcbiIsIHN0cm9uZywgd2Vhayk7CisJdXNiaGlkX3N1Ym1pdF9yZXBvcnQoaGlkLCBlbXNmZi0+cmVwb3J0LCBVU0JfRElSX09VVCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBlbXNmZl9pbml0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpCit7CisJc3RydWN0IGVtc2ZmX2RldmljZSAqZW1zZmY7CisJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKKwlzdHJ1Y3QgaGlkX2lucHV0ICpoaWRpbnB1dCA9IGxpc3RfZmlyc3RfZW50cnkoJmhpZC0+aW5wdXRzLAorCQkJCQkJc3RydWN0IGhpZF9pbnB1dCwgbGlzdCk7CisJc3RydWN0IGxpc3RfaGVhZCAqcmVwb3J0X2xpc3QgPQorCQkJJmhpZC0+cmVwb3J0X2VudW1bSElEX09VVFBVVF9SRVBPUlRdLnJlcG9ydF9saXN0OworCXN0cnVjdCBpbnB1dF9kZXYgKmRldiA9IGhpZGlucHV0LT5pbnB1dDsKKwlpbnQgZXJyb3I7CisKKwlpZiAobGlzdF9lbXB0eShyZXBvcnRfbGlzdCkpIHsKKwkJaGlkX2VycihoaWQsICJubyBvdXRwdXQgcmVwb3J0cyBmb3VuZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXJlcG9ydCA9IGxpc3RfZmlyc3RfZW50cnkocmVwb3J0X2xpc3QsIHN0cnVjdCBoaWRfcmVwb3J0LCBsaXN0KTsKKwlpZiAocmVwb3J0LT5tYXhmaWVsZCA8IDEpIHsKKwkJaGlkX2VycihoaWQsICJubyBmaWVsZHMgaW4gdGhlIHJlcG9ydFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmIChyZXBvcnQtPmZpZWxkWzBdLT5yZXBvcnRfY291bnQgPCA3KSB7CisJCWhpZF9lcnIoaGlkLCAibm90IGVub3VnaCB2YWx1ZXMgaW4gdGhlIGZpZWxkXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJZW1zZmYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZW1zZmZfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFlbXNmZikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzZXRfYml0KEZGX1JVTUJMRSwgZGV2LT5mZmJpdCk7CisKKwllcnJvciA9IGlucHV0X2ZmX2NyZWF0ZV9tZW1sZXNzKGRldiwgZW1zZmYsIGVtc2ZmX3BsYXkpOworCWlmIChlcnJvcikgeworCQlrZnJlZShlbXNmZik7CisJCXJldHVybiBlcnJvcjsKKwl9CisKKwllbXNmZi0+cmVwb3J0ID0gcmVwb3J0OworCWVtc2ZmLT5yZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVswXSA9IDB4MDE7CisJZW1zZmYtPnJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzFdID0gMHgwMDsKKwllbXNmZi0+cmVwb3J0LT5maWVsZFswXS0+dmFsdWVbMl0gPSAweDAwOworCWVtc2ZmLT5yZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVszXSA9IDB4MDA7CisJZW1zZmYtPnJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzRdID0gMHgwMDsKKwllbXNmZi0+cmVwb3J0LT5maWVsZFswXS0+dmFsdWVbNV0gPSAweDAwOworCWVtc2ZmLT5yZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVs2XSA9IDB4MDA7CisJdXNiaGlkX3N1Ym1pdF9yZXBvcnQoaGlkLCBlbXNmZi0+cmVwb3J0LCBVU0JfRElSX09VVCk7CisKKwloaWRfaW5mbyhoaWQsICJmb3JjZSBmZWVkYmFjayBmb3IgRU1TIGJhc2VkIGRldmljZXMgYnkgSWduYXogRm9yc3RlciA8aWduYXouZm9yc3RlckBnbXguZGU+XG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGVtc19wcm9iZShzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgKmlkKQoreworCWludCByZXQ7CisKKwlyZXQgPSBoaWRfcGFyc2UoaGRldik7CisJaWYgKHJldCkgeworCQloaWRfZXJyKGhkZXYsICJwYXJzZSBmYWlsZWRcbiIpOworCQlnb3RvIGVycjsKKwl9CisKKwlyZXQgPSBoaWRfaHdfc3RhcnQoaGRldiwgSElEX0NPTk5FQ1RfREVGQVVMVCAmIH5ISURfQ09OTkVDVF9GRik7CisJaWYgKHJldCkgeworCQloaWRfZXJyKGhkZXYsICJodyBzdGFydCBmYWlsZWRcbiIpOworCQlnb3RvIGVycjsKKwl9CisKKwllbXNmZl9pbml0KGhkZXYpOworCisJcmV0dXJuIDA7CitlcnI6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkIGVtc19kZXZpY2VzW10gPSB7CisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0VNUywgMHgxMTgpIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShoaWQsIGVtc19kZXZpY2VzKTsKKworc3RhdGljIHN0cnVjdCBoaWRfZHJpdmVyIGVtc19kcml2ZXIgPSB7CisJLm5hbWUgPSAiaGtlbXMiLAorCS5pZF90YWJsZSA9IGVtc19kZXZpY2VzLAorCS5wcm9iZSA9IGVtc19wcm9iZSwKK307CisKK3N0YXRpYyBpbnQgZW1zX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaGlkX3JlZ2lzdGVyX2RyaXZlcigmZW1zX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIGVtc19leGl0KHZvaWQpCit7CisJaGlkX3VucmVnaXN0ZXJfZHJpdmVyKCZlbXNfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoZW1zX2luaXQpOworbW9kdWxlX2V4aXQoZW1zX2V4aXQpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtZ2FmZi5jIGIvZHJpdmVycy9oaWQvaGlkLWdhZmYuYwppbmRleCA4OGRmY2Y0Li4yNzliYTUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtZ2FmZi5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1nYWZmLmMKQEAgLTg3LDcgKzg3LDcgQEAKIAlpbnQgZXJyb3I7CiAKIAlpZiAobGlzdF9lbXB0eShyZXBvcnRfbGlzdCkpIHsKLQkJZGV2X2VycigmaGlkLT5kZXYsICJubyBvdXRwdXQgcmVwb3J0cyBmb3VuZFxuIik7CisJCWhpZF9lcnIoaGlkLCAibm8gb3V0cHV0IHJlcG9ydHMgZm91bmRcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKQEAgLTk1LDEyICs5NSwxMiBAQAogCiAJcmVwb3J0ID0gbGlzdF9lbnRyeShyZXBvcnRfcHRyLCBzdHJ1Y3QgaGlkX3JlcG9ydCwgbGlzdCk7CiAJaWYgKHJlcG9ydC0+bWF4ZmllbGQgPCAxKSB7Ci0JCWRldl9lcnIoJmhpZC0+ZGV2LCAibm8gZmllbGRzIGluIHRoZSByZXBvcnRcbiIpOworCQloaWRfZXJyKGhpZCwgIm5vIGZpZWxkcyBpbiB0aGUgcmVwb3J0XG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJaWYgKHJlcG9ydC0+ZmllbGRbMF0tPnJlcG9ydF9jb3VudCA8IDYpIHsKLQkJZGV2X2VycigmaGlkLT5kZXYsICJub3QgZW5vdWdoIHZhbHVlcyBpbiB0aGUgZmllbGRcbiIpOworCQloaWRfZXJyKGhpZCwgIm5vdCBlbm91Z2ggdmFsdWVzIGluIHRoZSBmaWVsZFxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtMTI4LDggKzEyOCw3IEBACiAKIAl1c2JoaWRfc3VibWl0X3JlcG9ydChoaWQsIGdhZmYtPnJlcG9ydCwgVVNCX0RJUl9PVVQpOwogCi0JZGV2X2luZm8oJmhpZC0+ZGV2LCAiRm9yY2UgRmVlZGJhY2sgZm9yIEdyZWVuQXNpYSAweDEyIgotCSAgICAgICAiIGRldmljZXMgYnkgTHVrYXN6IEx1Ym9qYW5za2kgPGx1a2FzekBsdWJvamFuc2tpLmluZm8+XG4iKTsKKwloaWRfaW5mbyhoaWQsICJGb3JjZSBGZWVkYmFjayBmb3IgR3JlZW5Bc2lhIDB4MTIgZGV2aWNlcyBieSBMdWthc3ogTHVib2phbnNraSA8bHVrYXN6QGx1Ym9qYW5za2kuaW5mbz5cbiIpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNDgsMTMgKzE0NywxMyBAQAogCiAJcmV0ID0gaGlkX3BhcnNlKGhkZXYpOwogCWlmIChyZXQpIHsKLQkJZGV2X2VycigmaGRldi0+ZGV2LCAicGFyc2UgZmFpbGVkXG4iKTsKKwkJaGlkX2VycihoZGV2LCAicGFyc2UgZmFpbGVkXG4iKTsKIAkJZ290byBlcnI7CiAJfQogCiAJcmV0ID0gaGlkX2h3X3N0YXJ0KGhkZXYsIEhJRF9DT05ORUNUX0RFRkFVTFQgJiB+SElEX0NPTk5FQ1RfRkYpOwogCWlmIChyZXQpIHsKLQkJZGV2X2VycigmaGRldi0+ZGV2LCAiaHcgc3RhcnQgZmFpbGVkXG4iKTsKKwkJaGlkX2VycihoZGV2LCAiaHcgc3RhcnQgZmFpbGVkXG4iKTsKIAkJZ290byBlcnI7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtaWRzLmggYi9kcml2ZXJzL2hpZC9oaWQtaWRzLmgKaW5kZXggMzM0MWJhYS4uZjY1Y2FjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLWlkcy5oCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1pZHMuaApAQCAtOTcsNiArOTcsMTIgQEAKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HM19BTlNJCTB4MDIzNgogI2RlZmluZSBVU0JfREVWSUNFX0lEX0FQUExFX1dFTExTUFJJTkczX0lTTwkweDAyMzcKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HM19KSVMJMHgwMjM4CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfV0VMTFNQUklORzRfQU5TSQkweDAyM2YKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HNF9JU08JMHgwMjQwCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfV0VMTFNQUklORzRfSklTCTB4MDI0MQorI2RlZmluZSBVU0JfREVWSUNFX0lEX0FQUExFX1dFTExTUFJJTkc0QV9BTlNJCTB4MDI0MgorI2RlZmluZSBVU0JfREVWSUNFX0lEX0FQUExFX1dFTExTUFJJTkc0QV9JU08JMHgwMjQzCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfV0VMTFNQUklORzRBX0pJUwkweDAyNDQKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9BTFVfV0lSRUxFU1NfMjAwOV9BTlNJICAweDAyMzkKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9BTFVfV0lSRUxFU1NfMjAwOV9JU08gICAweDAyM2EKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9BTFVfV0lSRUxFU1NfMjAwOV9KSVMgICAweDAyM2IKQEAgLTE1Niw2ICsxNjIsNyBAQAogI2RlZmluZSBVU0JfVkVORE9SX0lEX0NISUNPTlkJCTB4MDRmMgogI2RlZmluZSBVU0JfREVWSUNFX0lEX0NISUNPTllfVEFDVElDQUxfUEFECTB4MDQxOAogI2RlZmluZSBVU0JfREVWSUNFX0lEX0NISUNPTllfTVVMVElfVE9VQ0gJMHhiMTlkCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQ0hJQ09OWV9XSVJFTEVTUwkweDA2MTgKIAogI2RlZmluZSBVU0JfVkVORE9SX0lEX0NJREMJCTB4MTY3NwogCkBAIC0xOTYsMTMgKzIwMywyMSBAQAogI2RlZmluZSBVU0JfREVWSUNFX0lEX0VHQUxBWF9UT1VDSENPTlRST0xMRVIJMHgwMDAxCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfRFdBVl9FR0FMQVhfTVVMVElUT1VDSAkweDQ4MGQKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9EV0FWX0VHQUxBWF9NVUxUSVRPVUNIMQkweDcyMGMKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9EV0FWX0VHQUxBWF9NVUxUSVRPVUNIMgkweDcyYTEKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9EV0FWX0VHQUxBWF9NVUxUSVRPVUNIMwkweDQ4MGUKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9EV0FWX0VHQUxBWF9NVUxUSVRPVUNINAkweDcyNmIKIAogI2RlZmluZSBVU0JfVkVORE9SX0lEX0VMRUNPTQkJMHgwNTZlCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfRUxFQ09NX0JNMDg0CTB4MDA2MQogCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfRFJFQU1fQ0hFRUtZCTB4MWQzNAorCiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfRUxPCQkweDA0RTcKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9FTE9fVFMyNzAwCTB4MDAyMAogCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfRU1TCQkweDIwMDYKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9FTVNfVFJJT19MSU5LRVJfUExVU19JSSAweDAxMTgKKwogI2RlZmluZSBVU0JfVkVORE9SX0lEX0VTU0VOVElBTF9SRUFMSVRZCTB4MGQ3ZgogI2RlZmluZSBVU0JfREVWSUNFX0lEX0VTU0VOVElBTF9SRUFMSVRZX1A1IDB4MDEwMAogCkBAIC00NzUsNiArNDkwLDcgQEAKIAogI2RlZmluZSBVU0JfVkVORE9SX0lEX1JPQ0NBVAkJMHgxZTdkCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfUk9DQ0FUX0tPTkUJMHgyY2VkCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfUk9DQ0FUX0tPTkVQTFVTCTB4MmQ1MQogI2RlZmluZSBVU0JfREVWSUNFX0lEX1JPQ0NBVF9QWVJBX1dJUkVECTB4MmMyNAogI2RlZmluZSBVU0JfREVWSUNFX0lEX1JPQ0NBVF9QWVJBX1dJUkVMRVNTCTB4MmNmNgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtaW5wdXQuYyBiL2RyaXZlcnMvaGlkL2hpZC1pbnB1dC5jCmluZGV4IGQ4ZDM3MmIuLmU2MGZkYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1pbnB1dC5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1pbnB1dC5jCkBAIC0zMTksMjEgKzMxOSwyMSBAQAogCiAJCXN3aXRjaCAoZmllbGQtPmFwcGxpY2F0aW9uKSB7CiAJCWNhc2UgSElEX0dEX01PVVNFOgotCQljYXNlIEhJRF9HRF9QT0lOVEVSOiAgY29kZSArPSAweDExMDsgYnJlYWs7CisJCWNhc2UgSElEX0dEX1BPSU5URVI6ICBjb2RlICs9IEJUTl9NT1VTRTsgYnJlYWs7CiAJCWNhc2UgSElEX0dEX0pPWVNUSUNLOgogCQkJCWlmIChjb2RlIDw9IDB4ZikKIAkJCQkJY29kZSArPSBCVE5fSk9ZU1RJQ0s7CiAJCQkJZWxzZQogCQkJCQljb2RlICs9IEJUTl9UUklHR0VSX0hBUFBZOwogCQkJCWJyZWFrOwotCQljYXNlIEhJRF9HRF9HQU1FUEFEOiAgY29kZSArPSAweDEzMDsgYnJlYWs7CisJCWNhc2UgSElEX0dEX0dBTUVQQUQ6ICBjb2RlICs9IEJUTl9HQU1FUEFEOyBicmVhazsKIAkJZGVmYXVsdDoKIAkJCXN3aXRjaCAoZmllbGQtPnBoeXNpY2FsKSB7CiAJCQljYXNlIEhJRF9HRF9NT1VTRToKLQkJCWNhc2UgSElEX0dEX1BPSU5URVI6ICBjb2RlICs9IDB4MTEwOyBicmVhazsKLQkJCWNhc2UgSElEX0dEX0pPWVNUSUNLOiBjb2RlICs9IDB4MTIwOyBicmVhazsKLQkJCWNhc2UgSElEX0dEX0dBTUVQQUQ6ICBjb2RlICs9IDB4MTMwOyBicmVhazsKLQkJCWRlZmF1bHQ6ICAgICAgICAgICAgICBjb2RlICs9IDB4MTAwOworCQkJY2FzZSBISURfR0RfUE9JTlRFUjogIGNvZGUgKz0gQlROX01PVVNFOyBicmVhazsKKwkJCWNhc2UgSElEX0dEX0pPWVNUSUNLOiBjb2RlICs9IEJUTl9KT1lTVElDSzsgYnJlYWs7CisJCQljYXNlIEhJRF9HRF9HQU1FUEFEOiAgY29kZSArPSBCVE5fR0FNRVBBRDsgYnJlYWs7CisJCQlkZWZhdWx0OiAgICAgICAgICAgICAgY29kZSArPSBCVE5fTUlTQzsKIAkJCX0KIAkJfQogCkBAIC04MTcsMTQgKzgxNywxNCBAQAogewogCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPSBpbnB1dF9nZXRfZHJ2ZGF0YShkZXYpOwogCi0JcmV0dXJuIGhpZC0+bGxfZHJpdmVyLT5vcGVuKGhpZCk7CisJcmV0dXJuIGhpZF9od19vcGVuKGhpZCk7CiB9CiAKIHN0YXRpYyB2b2lkIGhpZGlucHV0X2Nsb3NlKHN0cnVjdCBpbnB1dF9kZXYgKmRldikKIHsKIAlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkID0gaW5wdXRfZ2V0X2RydmRhdGEoZGV2KTsKIAotCWhpZC0+bGxfZHJpdmVyLT5jbG9zZShoaWQpOworCWhpZF9od19jbG9zZShoaWQpOwogfQogCiAvKgpAQCAtODcxLDcgKzg3MSw3IEBACiAJCQkJaWYgKCFoaWRpbnB1dCB8fCAhaW5wdXRfZGV2KSB7CiAJCQkJCWtmcmVlKGhpZGlucHV0KTsKIAkJCQkJaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXRfZGV2KTsKLQkJCQkJZXJyX2hpZCgiT3V0IG9mIG1lbW9yeSBkdXJpbmcgaGlkIGlucHV0IHByb2JlIik7CisJCQkJCWhpZF9lcnIoaGlkLCAiT3V0IG9mIG1lbW9yeSBkdXJpbmcgaGlkIGlucHV0IHByb2JlXG4iKTsKIAkJCQkJZ290byBvdXRfdW53aW5kOwogCQkJCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWt5ZS5jIGIvZHJpdmVycy9oaWQvaGlkLWt5ZS5jCmluZGV4IDgxNzI0N2UuLmYyYmE5ZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1reWUuYworKysgYi9kcml2ZXJzL2hpZC9oaWQta3llLmMKQEAgLTMyLDggKzMyLDggQEAKIAkJcmRlc2NbNjVdID09IDB4MjkgJiYgcmRlc2NbNjZdID09IDB4MGYgJiYKIAkJcmRlc2NbNzFdID09IDB4NzUgJiYgcmRlc2NbNzJdID09IDB4MDggJiYKIAkJcmRlc2NbNzNdID09IDB4OTUgJiYgcmRlc2NbNzRdID09IDB4MDEpIHsKLQkJZGV2X2luZm8oJmhkZXYtPmRldiwgImZpeGluZyB1cCBLeWUvR2VuaXVzIEVyZ28gTW91c2UgcmVwb3J0ICIKLQkJCQkiZGVzY3JpcHRvclxuIik7CisJCWhpZF9pbmZvKGhkZXYsCisJCQkgImZpeGluZyB1cCBLeWUvR2VuaXVzIEVyZ28gTW91c2UgcmVwb3J0IGRlc2NyaXB0b3JcbiIpOwogCQlyZGVzY1s2Ml0gPSAweDA5OwogCQlyZGVzY1s2NF0gPSAweDA0OwogCQlyZGVzY1s2Nl0gPSAweDA3OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWxnLmMgYi9kcml2ZXJzL2hpZC9oaWQtbGcuYwppbmRleCBiNjI5ZmJhLi5hZWY0MTA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtbGcuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtbGcuYwpAQCAtNTMsMjMgKzUzLDIyIEBACiAKIAlpZiAoKHF1aXJrcyAmIExHX1JERVNDKSAmJiAqcnNpemUgPj0gOTAgJiYgcmRlc2NbODNdID09IDB4MjYgJiYKIAkJCXJkZXNjWzg0XSA9PSAweDhjICYmIHJkZXNjWzg1XSA9PSAweDAyKSB7Ci0JCWRldl9pbmZvKCZoZGV2LT5kZXYsICJmaXhpbmcgdXAgTG9naXRlY2gga2V5Ym9hcmQgcmVwb3J0ICIKLQkJCQkiZGVzY3JpcHRvclxuIik7CisJCWhpZF9pbmZvKGhkZXYsCisJCQkgImZpeGluZyB1cCBMb2dpdGVjaCBrZXlib2FyZCByZXBvcnQgZGVzY3JpcHRvclxuIik7CiAJCXJkZXNjWzg0XSA9IHJkZXNjWzg5XSA9IDB4NGQ7CiAJCXJkZXNjWzg1XSA9IHJkZXNjWzkwXSA9IDB4MTA7CiAJfQogCWlmICgocXVpcmtzICYgTEdfUkRFU0NfUkVMX0FCUykgJiYgKnJzaXplID49IDUwICYmCiAJCQlyZGVzY1szMl0gPT0gMHg4MSAmJiByZGVzY1szM10gPT0gMHgwNiAmJgogCQkJcmRlc2NbNDldID09IDB4ODEgJiYgcmRlc2NbNTBdID09IDB4MDYpIHsKLQkJZGV2X2luZm8oJmhkZXYtPmRldiwgImZpeGluZyB1cCByZWwvYWJzIGluIExvZ2l0ZWNoICIKLQkJCQkicmVwb3J0IGRlc2NyaXB0b3JcbiIpOworCQloaWRfaW5mbyhoZGV2LAorCQkJICJmaXhpbmcgdXAgcmVsL2FicyBpbiBMb2dpdGVjaCByZXBvcnQgZGVzY3JpcHRvclxuIik7CiAJCXJkZXNjWzMzXSA9IHJkZXNjWzUwXSA9IDB4MDI7CiAJfQogCWlmICgocXVpcmtzICYgTEdfRkY0KSAmJiAqcnNpemUgPj0gMTAxICYmCiAJCQlyZGVzY1s0MV0gPT0gMHg5NSAmJiByZGVzY1s0Ml0gPT0gMHgwQiAmJgogCQkJcmRlc2NbNDddID09IDB4MDUgJiYgcmRlc2NbNDhdID09IDB4MDkpIHsKLQkJZGV2X2luZm8oJmhkZXYtPmRldiwgImZpeGluZyB1cCBMb2dpdGVjaCBTcGVlZCBGb3JjZSBXaXJlbGVzcyAiCi0JCQkiYnV0dG9uIGRlc2NyaXB0b3JcbiIpOworCQloaWRfaW5mbyhoZGV2LCAiZml4aW5nIHVwIExvZ2l0ZWNoIFNwZWVkIEZvcmNlIFdpcmVsZXNzIGJ1dHRvbiBkZXNjcmlwdG9yXG4iKTsKIAkJcmRlc2NbNDFdID0gMHgwNTsKIAkJcmRlc2NbNDJdID0gMHgwOTsKIAkJcmRlc2NbNDddID0gMHg5NTsKQEAgLTI4OCw3ICsyODcsNyBAQAogCiAJcmV0ID0gaGlkX3BhcnNlKGhkZXYpOwogCWlmIChyZXQpIHsKLQkJZGV2X2VycigmaGRldi0+ZGV2LCAicGFyc2UgZmFpbGVkXG4iKTsKKwkJaGlkX2VycihoZGV2LCAicGFyc2UgZmFpbGVkXG4iKTsKIAkJZ290byBlcnJfZnJlZTsKIAl9CiAKQEAgLTI5Nyw3ICsyOTYsNyBAQAogCiAJcmV0ID0gaGlkX2h3X3N0YXJ0KGhkZXYsIGNvbm5lY3RfbWFzayk7CiAJaWYgKHJldCkgewotCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJodyBzdGFydCBmYWlsZWRcbiIpOworCQloaWRfZXJyKGhkZXYsICJodyBzdGFydCBmYWlsZWRcbiIpOwogCQlnb3RvIGVycl9mcmVlOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWxnMmZmLmMgYi9kcml2ZXJzL2hpZC9oaWQtbGcyZmYuYwppbmRleCA0MjU4MjUzLi4zYzMxYmM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtbGcyZmYuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtbGcyZmYuYwpAQCAtNzIsMTggKzcyLDE4IEBACiAJaW50IGVycm9yOwogCiAJaWYgKGxpc3RfZW1wdHkocmVwb3J0X2xpc3QpKSB7Ci0JCWRldl9lcnIoJmhpZC0+ZGV2LCAibm8gb3V0cHV0IHJlcG9ydCBmb3VuZFxuIik7CisJCWhpZF9lcnIoaGlkLCAibm8gb3V0cHV0IHJlcG9ydCBmb3VuZFxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAogCXJlcG9ydCA9IGxpc3RfZW50cnkocmVwb3J0X2xpc3QtPm5leHQsIHN0cnVjdCBoaWRfcmVwb3J0LCBsaXN0KTsKIAogCWlmIChyZXBvcnQtPm1heGZpZWxkIDwgMSkgewotCQlkZXZfZXJyKCZoaWQtPmRldiwgIm91dHB1dCByZXBvcnQgaXMgZW1wdHlcbiIpOworCQloaWRfZXJyKGhpZCwgIm91dHB1dCByZXBvcnQgaXMgZW1wdHlcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJaWYgKHJlcG9ydC0+ZmllbGRbMF0tPnJlcG9ydF9jb3VudCA8IDcpIHsKLQkJZGV2X2VycigmaGlkLT5kZXYsICJub3QgZW5vdWdoIHZhbHVlcyBpbiB0aGUgZmllbGRcbiIpOworCQloaWRfZXJyKGhpZCwgIm5vdCBlbm91Z2ggdmFsdWVzIGluIHRoZSBmaWVsZFxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtMTEwLDggKzExMCw3IEBACiAKIAl1c2JoaWRfc3VibWl0X3JlcG9ydChoaWQsIHJlcG9ydCwgVVNCX0RJUl9PVVQpOwogCi0JZGV2X2luZm8oJmhpZC0+ZGV2LCAiRm9yY2UgZmVlZGJhY2sgZm9yIExvZ2l0ZWNoIFJ1bWJsZVBhZC9SdW1ibGVwYWQgMiBieSAiCi0JICAgICAgICJBbnNzaSBIYW5udWxhIDxhbnNzaS5oYW5udWxhQGdtYWlsLmNvbT5cbiIpOworCWhpZF9pbmZvKGhpZCwgIkZvcmNlIGZlZWRiYWNrIGZvciBMb2dpdGVjaCBSdW1ibGVQYWQvUnVtYmxlcGFkIDIgYnkgQW5zc2kgSGFubnVsYSA8YW5zc2kuaGFubnVsYUBnbWFpbC5jb20+XG4iKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWxnM2ZmLmMgYi9kcml2ZXJzL2hpZC9oaWQtbGczZmYuYwppbmRleCA0MDAyODMyLi5mOTg2NDRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtbGczZmYuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtbGczZmYuYwpAQCAtMTQxLDIwICsxNDEsMjAgQEAKIAogCS8qIEZpbmQgdGhlIHJlcG9ydCB0byB1c2UgKi8KIAlpZiAobGlzdF9lbXB0eShyZXBvcnRfbGlzdCkpIHsKLQkJZXJyX2hpZCgiTm8gb3V0cHV0IHJlcG9ydCBmb3VuZCIpOworCQloaWRfZXJyKGhpZCwgIk5vIG91dHB1dCByZXBvcnQgZm91bmRcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCiAJLyogQ2hlY2sgdGhhdCB0aGUgcmVwb3J0IGxvb2tzIG9rICovCiAJcmVwb3J0ID0gbGlzdF9lbnRyeShyZXBvcnRfbGlzdC0+bmV4dCwgc3RydWN0IGhpZF9yZXBvcnQsIGxpc3QpOwogCWlmICghcmVwb3J0KSB7Ci0JCWVycl9oaWQoIk5VTEwgb3V0cHV0IHJlcG9ydCIpOworCQloaWRfZXJyKGhpZCwgIk5VTEwgb3V0cHV0IHJlcG9ydFxuIik7CiAJCXJldHVybiAtMTsKIAl9CiAKIAlmaWVsZCA9IHJlcG9ydC0+ZmllbGRbMF07CiAJaWYgKCFmaWVsZCkgewotCQllcnJfaGlkKCJOVUxMIGZpZWxkIik7CisJCWhpZF9lcnIoaGlkLCAiTlVMTCBmaWVsZFxuIik7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTE2OSw4ICsxNjksNyBAQAogCWlmICh0ZXN0X2JpdChGRl9BVVRPQ0VOVEVSLCBkZXYtPmZmYml0KSkKIAkJZGV2LT5mZi0+c2V0X2F1dG9jZW50ZXIgPSBoaWRfbGczZmZfc2V0X2F1dG9jZW50ZXI7CiAKLQlkZXZfaW5mbygmaGlkLT5kZXYsICJGb3JjZSBmZWVkYmFjayBmb3IgTG9naXRlY2ggRmxpZ2h0IFN5c3RlbSBHOTQwIGJ5ICIKLQkJCSJHYXJ5IFN0ZWluIDxMb3JkQ25pZGFyaWFuQGdtYWlsLmNvbT5cbiIpOworCWhpZF9pbmZvKGhpZCwgIkZvcmNlIGZlZWRiYWNrIGZvciBMb2dpdGVjaCBGbGlnaHQgU3lzdGVtIEc5NDAgYnkgR2FyeSBTdGVpbiA8TG9yZENuaWRhcmlhbkBnbWFpbC5jb20+XG4iKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWxnNGZmLmMgYi9kcml2ZXJzL2hpZC9oaWQtbGc0ZmYuYwppbmRleCA3ZWVmNWEyLi5mYTU1MGM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtbGc0ZmYuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtbGc0ZmYuYwpAQCAtMTAxLDIwICsxMDEsMjAgQEAKIAogCS8qIEZpbmQgdGhlIHJlcG9ydCB0byB1c2UgKi8KIAlpZiAobGlzdF9lbXB0eShyZXBvcnRfbGlzdCkpIHsKLQkJZXJyX2hpZCgiTm8gb3V0cHV0IHJlcG9ydCBmb3VuZCIpOworCQloaWRfZXJyKGhpZCwgIk5vIG91dHB1dCByZXBvcnQgZm91bmRcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCiAJLyogQ2hlY2sgdGhhdCB0aGUgcmVwb3J0IGxvb2tzIG9rICovCiAJcmVwb3J0ID0gbGlzdF9lbnRyeShyZXBvcnRfbGlzdC0+bmV4dCwgc3RydWN0IGhpZF9yZXBvcnQsIGxpc3QpOwogCWlmICghcmVwb3J0KSB7Ci0JCWVycl9oaWQoIk5VTEwgb3V0cHV0IHJlcG9ydCIpOworCQloaWRfZXJyKGhpZCwgIk5VTEwgb3V0cHV0IHJlcG9ydFxuIik7CiAJCXJldHVybiAtMTsKIAl9CiAKIAlmaWVsZCA9IHJlcG9ydC0+ZmllbGRbMF07CiAJaWYgKCFmaWVsZCkgewotCQllcnJfaGlkKCJOVUxMIGZpZWxkIik7CisJCWhpZF9lcnIoaGlkLCAiTlVMTCBmaWVsZFxuIik7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTEyOSw4ICsxMjksNyBAQAogCWlmICh0ZXN0X2JpdChGRl9BVVRPQ0VOVEVSLCBkZXYtPmZmYml0KSkKIAkJZGV2LT5mZi0+c2V0X2F1dG9jZW50ZXIgPSBoaWRfbGc0ZmZfc2V0X2F1dG9jZW50ZXI7CiAKLQlkZXZfaW5mbygmaGlkLT5kZXYsICJGb3JjZSBmZWVkYmFjayBmb3IgTG9naXRlY2ggU3BlZWQgRm9yY2UgV2lyZWxlc3MgYnkgIgotCQkJIlNpbW9uIFdvb2QgPHNpbW9uQG11bmdld2VsbC5vcmc+XG4iKTsKKwloaWRfaW5mbyhoaWQsICJGb3JjZSBmZWVkYmFjayBmb3IgTG9naXRlY2ggU3BlZWQgRm9yY2UgV2lyZWxlc3MgYnkgU2ltb24gV29vZCA8c2ltb25AbXVuZ2V3ZWxsLm9yZz5cbiIpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtbGdmZi5jIGIvZHJpdmVycy9oaWQvaGlkLWxnZmYuYwppbmRleCA2MTE0MmI3Li45MGQwZWYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtbGdmZi5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1sZ2ZmLmMKQEAgLTI3LDYgKzI3LDggQEAKICAqIGUtbWFpbCAtIG1haWwgeW91ciBtZXNzYWdlIHRvIDxqb2hhbm4uZGVuZXV4QGl0LnV1LnNlPgogICovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvaGlkLmg+CkBAIC0xNDYsNyArMTQ4LDcgQEAKIAogCS8qIEZpbmQgdGhlIHJlcG9ydCB0byB1c2UgKi8KIAlpZiAobGlzdF9lbXB0eShyZXBvcnRfbGlzdCkpIHsKLQkJZXJyX2hpZCgiTm8gb3V0cHV0IHJlcG9ydCBmb3VuZCIpOworCQloaWRfZXJyKGhpZCwgIk5vIG91dHB1dCByZXBvcnQgZm91bmRcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC0xNTQsNyArMTU2LDcgQEAKIAlyZXBvcnQgPSBsaXN0X2VudHJ5KHJlcG9ydF9saXN0LT5uZXh0LCBzdHJ1Y3QgaGlkX3JlcG9ydCwgbGlzdCk7CiAJZmllbGQgPSByZXBvcnQtPmZpZWxkWzBdOwogCWlmICghZmllbGQpIHsKLQkJZXJyX2hpZCgiTlVMTCBmaWVsZCIpOworCQloaWRfZXJyKGhpZCwgIk5VTEwgZmllbGRcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC0xNzYsNyArMTc4LDcgQEAKIAlpZiAoIHRlc3RfYml0KEZGX0FVVE9DRU5URVIsIGRldi0+ZmZiaXQpICkKIAkJZGV2LT5mZi0+c2V0X2F1dG9jZW50ZXIgPSBoaWRfbGdmZl9zZXRfYXV0b2NlbnRlcjsKIAotCXByaW50ayhLRVJOX0lORk8gIkZvcmNlIGZlZWRiYWNrIGZvciBMb2dpdGVjaCBmb3JjZSBmZWVkYmFjayBkZXZpY2VzIGJ5IEpvaGFubiBEZW5ldXggPGpvaGFubi5kZW5ldXhAaXQudXUuc2U+XG4iKTsKKwlwcl9pbmZvKCJGb3JjZSBmZWVkYmFjayBmb3IgTG9naXRlY2ggZm9yY2UgZmVlZGJhY2sgZGV2aWNlcyBieSBKb2hhbm4gRGVuZXV4IDxqb2hhbm4uZGVuZXV4QGl0LnV1LnNlPlxuIik7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1tYWdpY21vdXNlLmMgYi9kcml2ZXJzL2hpZC9oaWQtbWFnaWNtb3VzZS5jCmluZGV4IGU2ZGMxNTEuLjY5OGU2NDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1tYWdpY21vdXNlLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLW1hZ2ljbW91c2UuYwpAQCAtMTIsNiArMTIsOCBAQAogICogYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAorI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaGlkLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC00MzMsNiArNDM1LDExIEBACiAJaWYgKCFtc2MtPmlucHV0KQogCQltc2MtPmlucHV0ID0gaGktPmlucHV0OwogCisJLyogTWFnaWMgVHJhY2twYWQgZG9lcyBub3QgZ2l2ZSByZWxhdGl2ZSBkYXRhIGFmdGVyIHN3aXRjaGluZyB0byBNVCAqLworCWlmIChoaS0+aW5wdXQtPmlkLnByb2R1Y3QgPT0gVVNCX0RFVklDRV9JRF9BUFBMRV9NQUdJQ1RSQUNLUEFEICYmCisJICAgIGZpZWxkLT5mbGFncyAmIEhJRF9NQUlOX0lURU1fUkVMQVRJVkUpCisJCXJldHVybiAtMTsKKwogCXJldHVybiAwOwogfQogCkBAIC00NDYsNyArNDUzLDcgQEAKIAogCW1zYyA9IGt6YWxsb2Moc2l6ZW9mKCptc2MpLCBHRlBfS0VSTkVMKTsKIAlpZiAobXNjID09IE5VTEwpIHsKLQkJZGV2X2VycigmaGRldi0+ZGV2LCAiY2FuJ3QgYWxsb2MgbWFnaWNtb3VzZSBkZXNjcmlwdG9yXG4iKTsKKwkJaGlkX2VycihoZGV2LCAiY2FuJ3QgYWxsb2MgbWFnaWNtb3VzZSBkZXNjcmlwdG9yXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC00NTksMTMgKzQ2NiwxMyBAQAogCiAJcmV0ID0gaGlkX3BhcnNlKGhkZXYpOwogCWlmIChyZXQpIHsKLQkJZGV2X2VycigmaGRldi0+ZGV2LCAibWFnaWNtb3VzZSBoaWQgcGFyc2UgZmFpbGVkXG4iKTsKKwkJaGlkX2VycihoZGV2LCAibWFnaWNtb3VzZSBoaWQgcGFyc2UgZmFpbGVkXG4iKTsKIAkJZ290byBlcnJfZnJlZTsKIAl9CiAKIAlyZXQgPSBoaWRfaHdfc3RhcnQoaGRldiwgSElEX0NPTk5FQ1RfREVGQVVMVCk7CiAJaWYgKHJldCkgewotCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJtYWdpY21vdXNlIGh3IHN0YXJ0IGZhaWxlZFxuIik7CisJCWhpZF9lcnIoaGRldiwgIm1hZ2ljbW91c2UgaHcgc3RhcnQgZmFpbGVkXG4iKTsKIAkJZ290byBlcnJfZnJlZTsKIAl9CiAKQEAgLTQ4Niw3ICs0OTMsNyBAQAogCX0KIAogCWlmICghcmVwb3J0KSB7Ci0JCWRldl9lcnIoJmhkZXYtPmRldiwgInVuYWJsZSB0byByZWdpc3RlciB0b3VjaCByZXBvcnRcbiIpOworCQloaWRfZXJyKGhkZXYsICJ1bmFibGUgdG8gcmVnaXN0ZXIgdG91Y2ggcmVwb3J0XG4iKTsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBlcnJfc3RvcF9odzsKIAl9CkBAIC00OTUsOCArNTAyLDcgQEAKIAlyZXQgPSBoZGV2LT5oaWRfb3V0cHV0X3Jhd19yZXBvcnQoaGRldiwgZmVhdHVyZSwgc2l6ZW9mKGZlYXR1cmUpLAogCQkJSElEX0ZFQVRVUkVfUkVQT1JUKTsKIAlpZiAocmV0ICE9IHNpemVvZihmZWF0dXJlKSkgewotCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJ1bmFibGUgdG8gcmVxdWVzdCB0b3VjaCBkYXRhICglZClcbiIsCi0JCQkJcmV0KTsKKwkJaGlkX2VycihoZGV2LCAidW5hYmxlIHRvIHJlcXVlc3QgdG91Y2ggZGF0YSAoJWQpXG4iLCByZXQpOwogCQlnb3RvIGVycl9zdG9wX2h3OwogCX0KIApAQCAtNTQwLDcgKzU0Niw3IEBACiAKIAlyZXQgPSBoaWRfcmVnaXN0ZXJfZHJpdmVyKCZtYWdpY21vdXNlX2RyaXZlcik7CiAJaWYgKHJldCkKLQkJcHJpbnRrKEtFUk5fRVJSICJjYW4ndCByZWdpc3RlciBtYWdpY21vdXNlIGRyaXZlclxuIik7CisJCXByX2VycigiY2FuJ3QgcmVnaXN0ZXIgbWFnaWNtb3VzZSBkcml2ZXJcbiIpOwogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1taWNyb3NvZnQuYyBiL2RyaXZlcnMvaGlkL2hpZC1taWNyb3NvZnQuYwppbmRleCBkYzYxOGMzLi4wZjZmYzU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtbWljcm9zb2Z0LmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLW1pY3Jvc29mdC5jCkBAIC00MCw4ICs0MCw3IEBACiAKIAlpZiAoKHF1aXJrcyAmIE1TX1JERVNDKSAmJiAqcnNpemUgPT0gNTcxICYmIHJkZXNjWzU1N10gPT0gMHgxOSAmJgogCQkJcmRlc2NbNTU5XSA9PSAweDI5KSB7Ci0JCWRldl9pbmZvKCZoZGV2LT5kZXYsICJmaXhpbmcgdXAgTWljcm9zb2Z0IFdpcmVsZXNzIFJlY2VpdmVyICIKLQkJCQkiTW9kZWwgMTAyOCByZXBvcnQgZGVzY3JpcHRvclxuIik7CisJCWhpZF9pbmZvKGhkZXYsICJmaXhpbmcgdXAgTWljcm9zb2Z0IFdpcmVsZXNzIFJlY2VpdmVyIE1vZGVsIDEwMjggcmVwb3J0IGRlc2NyaXB0b3JcbiIpOwogCQlyZGVzY1s1NTddID0gMHgzNTsKIAkJcmRlc2NbNTU5XSA9IDB4NDU7CiAJfQpAQCAtMTU1LDE0ICsxNTQsMTQgQEAKIAogCXJldCA9IGhpZF9wYXJzZShoZGV2KTsKIAlpZiAocmV0KSB7Ci0JCWRldl9lcnIoJmhkZXYtPmRldiwgInBhcnNlIGZhaWxlZFxuIik7CisJCWhpZF9lcnIoaGRldiwgInBhcnNlIGZhaWxlZFxuIik7CiAJCWdvdG8gZXJyX2ZyZWU7CiAJfQogCiAJcmV0ID0gaGlkX2h3X3N0YXJ0KGhkZXYsIEhJRF9DT05ORUNUX0RFRkFVTFQgfCAoKHF1aXJrcyAmIE1TX0hJRElOUFVUKSA/CiAJCQkJSElEX0NPTk5FQ1RfSElESU5QVVRfRk9SQ0UgOiAwKSk7CiAJaWYgKHJldCkgewotCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJodyBzdGFydCBmYWlsZWRcbiIpOworCQloaWRfZXJyKGhkZXYsICJodyBzdGFydCBmYWlsZWRcbiIpOwogCQlnb3RvIGVycl9mcmVlOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLW1vbnRlcmV5LmMgYi9kcml2ZXJzL2hpZC9oaWQtbW9udGVyZXkuYwppbmRleCBjOTVjMzFlLi5kZWRmNzU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtbW9udGVyZXkuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtbW9udGVyZXkuYwpAQCAtMjYsOCArMjYsNyBAQAogCQl1bnNpZ25lZCBpbnQgKnJzaXplKQogewogCWlmICgqcnNpemUgPj0gMzAgJiYgcmRlc2NbMjldID09IDB4MDUgJiYgcmRlc2NbMzBdID09IDB4MDkpIHsKLQkJZGV2X2luZm8oJmhkZXYtPmRldiwgImZpeGluZyB1cCBidXR0b24vY29uc3VtZXIgaW4gSElEIHJlcG9ydCAiCi0JCQkJImRlc2NyaXB0b3JcbiIpOworCQloaWRfaW5mbyhoZGV2LCAiZml4aW5nIHVwIGJ1dHRvbi9jb25zdW1lciBpbiBISUQgcmVwb3J0IGRlc2NyaXB0b3JcbiIpOwogCQlyZGVzY1szMF0gPSAweDBjOwogCX0KIAlyZXR1cm4gcmRlc2M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtbW9zYXJ0LmMgYi9kcml2ZXJzL2hpZC9oaWQtbW9zYXJ0LmMKaW5kZXggYWM1NDIxZC4uOWZiMDUwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLW1vc2FydC5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1tb3NhcnQuYwpAQCAtOTAsNiArOTAsMTAgQEAKIAljYXNlIDB4ZmYwMDAwMDA6CiAJCS8qIGlnbm9yZSBISUQgZmVhdHVyZXMgKi8KIAkJcmV0dXJuIC0xOworCisJY2FzZSBISURfVVBfQlVUVE9OOgorCQkvKiBpZ25vcmUgYnV0dG9ucyAqLworCQlyZXR1cm4gLTE7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0xOTksNyArMjAzLDcgQEAKIAogCXRkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG1vc2FydF9kYXRhKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF0ZCkgewotCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJjYW5ub3QgYWxsb2NhdGUgTW9zQXJ0IGRhdGFcbiIpOworCQloaWRfZXJyKGhkZXYsICJjYW5ub3QgYWxsb2NhdGUgTW9zQXJ0IGRhdGFcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJdGQtPnZhbGlkID0gZmFsc2U7CkBAIC0yMzAsNiArMjM0LDE5IEBACiAJcmV0dXJuIHJldDsKIH0KIAorI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBtb3NhcnRfcmVzZXRfcmVzdW1lKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2KQoreworCXN0cnVjdCBoaWRfcmVwb3J0X2VudW0gKnJlID0gaGRldi0+cmVwb3J0X2VudW0KKwkJCQkJCSsgSElEX0ZFQVRVUkVfUkVQT1JUOworCXN0cnVjdCBoaWRfcmVwb3J0ICpyID0gcmUtPnJlcG9ydF9pZF9oYXNoWzddOworCisJci0+ZmllbGRbMF0tPnZhbHVlWzBdID0gMHgwMjsKKwl1c2JoaWRfc3VibWl0X3JlcG9ydChoZGV2LCByLCBVU0JfRElSX09VVCk7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKwogc3RhdGljIHZvaWQgbW9zYXJ0X3JlbW92ZShzdHJ1Y3QgaGlkX2RldmljZSAqaGRldikKIHsKIAloaWRfaHdfc3RvcChoZGV2KTsKQEAgLTI1OCw2ICsyNzUsOSBAQAogCS5pbnB1dF9tYXBwZWQgPSBtb3NhcnRfaW5wdXRfbWFwcGVkLAogCS51c2FnZV90YWJsZSA9IG1vc2FydF9ncmFiYmVkX3VzYWdlcywKIAkuZXZlbnQgPSBtb3NhcnRfZXZlbnQsCisjaWZkZWYgQ09ORklHX1BNCisJLnJlc2V0X3Jlc3VtZSA9IG1vc2FydF9yZXNldF9yZXN1bWUsCisjZW5kaWYKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IG1vc2FydF9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtbnRyaWcuYyBiL2RyaXZlcnMvaGlkL2hpZC1udHJpZy5jCmluZGV4IDY5MTY5ZWYuLmJlYjQwMzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1udHJpZy5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1udHJpZy5jCkBAIC0xMzAsOCArMTMwLDcgQEAKIAlpZiAocmV0ID09IDgpIHsKIAkJcmV0ID0gbnRyaWdfdmVyc2lvbl9zdHJpbmcoJmRhdGFbMl0sIGJ1Zik7CiAKLQkJZGV2X2luZm8oJmhkZXYtPmRldiwKLQkJCSAiRmlybXdhcmUgdmVyc2lvbjogJXMgKCUwMnglMDJ4ICUwMnglMDJ4KVxuIiwKKwkJaGlkX2luZm8oaGRldiwgIkZpcm13YXJlIHZlcnNpb246ICVzICglMDJ4JTAyeCAlMDJ4JTAyeClcbiIsCiAJCQkgYnVmLCBkYXRhWzJdLCBkYXRhWzNdLCBkYXRhWzRdLCBkYXRhWzVdKTsKIAl9CiAKQEAgLTgzMSw3ICs4MzAsNyBAQAogCiAJbmQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbnRyaWdfZGF0YSksIEdGUF9LRVJORUwpOwogCWlmICghbmQpIHsKLQkJZGV2X2VycigmaGRldi0+ZGV2LCAiY2Fubm90IGFsbG9jYXRlIE4tVHJpZyBkYXRhXG4iKTsKKwkJaGlkX2VycihoZGV2LCAiY2Fubm90IGFsbG9jYXRlIE4tVHJpZyBkYXRhXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC04NTAsMTMgKzg0OSwxMyBAQAogCiAJcmV0ID0gaGlkX3BhcnNlKGhkZXYpOwogCWlmIChyZXQpIHsKLQkJZGV2X2VycigmaGRldi0+ZGV2LCAicGFyc2UgZmFpbGVkXG4iKTsKKwkJaGlkX2VycihoZGV2LCAicGFyc2UgZmFpbGVkXG4iKTsKIAkJZ290byBlcnJfZnJlZTsKIAl9CiAKIAlyZXQgPSBoaWRfaHdfc3RhcnQoaGRldiwgSElEX0NPTk5FQ1RfREVGQVVMVCAmIH5ISURfQ09OTkVDVF9GRik7CiAJaWYgKHJldCkgewotCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJodyBzdGFydCBmYWlsZWRcbiIpOworCQloaWRfZXJyKGhkZXYsICJodyBzdGFydCBmYWlsZWRcbiIpOwogCQlnb3RvIGVycl9mcmVlOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLW9ydGVrLmMgYi9kcml2ZXJzL2hpZC9oaWQtb3J0ZWsuYwppbmRleCAyZTc5NzE2Li5lOTBlZGZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtb3J0ZWsuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtb3J0ZWsuYwpAQCAtMjMsOCArMjMsNyBAQAogCQl1bnNpZ25lZCBpbnQgKnJzaXplKQogewogCWlmICgqcnNpemUgPj0gNTYgJiYgcmRlc2NbNTRdID09IDB4MjUgJiYgcmRlc2NbNTVdID09IDB4MDEpIHsKLQkJZGV2X2luZm8oJmhkZXYtPmRldiwgIkZpeGluZyB1cCBPcnRlayBXS0ItMjAwMCAiCi0JCQkJInJlcG9ydCBkZXNjcmlwdG9yLlxuIik7CisJCWhpZF9pbmZvKGhkZXYsICJGaXhpbmcgdXAgT3J0ZWsgV0tCLTIwMDAgcmVwb3J0IGRlc2NyaXB0b3JcbiIpOwogCQlyZGVzY1s1NV0gPSAweDkyOwogCX0KIAlyZXR1cm4gcmRlc2M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtcGV0YWx5bnguYyBiL2RyaXZlcnMvaGlkL2hpZC1wZXRhbHlueC5jCmluZGV4IDMwOGQ2YWUuLmYxZWEzZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1wZXRhbHlueC5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1wZXRhbHlueC5jCkBAIC0yOSw4ICsyOSw3IEBACiAJaWYgKCpyc2l6ZSA+PSA2MCAmJiByZGVzY1szOV0gPT0gMHgyYSAmJiByZGVzY1s0MF0gPT0gMHhmNSAmJgogCQkJcmRlc2NbNDFdID09IDB4MDAgJiYgcmRlc2NbNTldID09IDB4MjYgJiYKIAkJCXJkZXNjWzYwXSA9PSAweGY5ICYmIHJkZXNjWzYxXSA9PSAweDAwKSB7Ci0JCWRldl9pbmZvKCZoZGV2LT5kZXYsICJmaXhpbmcgdXAgUGV0YWx5bnggTWF4dGVyIFJlbW90ZSByZXBvcnQgIgotCQkJCSJkZXNjcmlwdG9yXG4iKTsKKwkJaGlkX2luZm8oaGRldiwgImZpeGluZyB1cCBQZXRhbHlueCBNYXh0ZXIgUmVtb3RlIHJlcG9ydCBkZXNjcmlwdG9yXG4iKTsKIAkJcmRlc2NbNjBdID0gMHhmYTsKIAkJcmRlc2NbNDBdID0gMHhmYTsKIAl9CkBAIC03NywxMyArNzYsMTMgQEAKIAogCXJldCA9IGhpZF9wYXJzZShoZGV2KTsKIAlpZiAocmV0KSB7Ci0JCWRldl9lcnIoJmhkZXYtPmRldiwgInBhcnNlIGZhaWxlZFxuIik7CisJCWhpZF9lcnIoaGRldiwgInBhcnNlIGZhaWxlZFxuIik7CiAJCWdvdG8gZXJyX2ZyZWU7CiAJfQogCiAJcmV0ID0gaGlkX2h3X3N0YXJ0KGhkZXYsIEhJRF9DT05ORUNUX0RFRkFVTFQpOwogCWlmIChyZXQpIHsKLQkJZGV2X2VycigmaGRldi0+ZGV2LCAiaHcgc3RhcnQgZmFpbGVkXG4iKTsKKwkJaGlkX2VycihoZGV2LCAiaHcgc3RhcnQgZmFpbGVkXG4iKTsKIAkJZ290byBlcnJfZnJlZTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1waWNvbGNkLmMgYi9kcml2ZXJzL2hpZC9oaWQtcGljb2xjZC5jCmluZGV4IGJjMmUwNzcuLmRlOWNmMjFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtcGljb2xjZC5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1waWNvbGNkLmMKQEAgLTI1Myw3ICsyNTMsNyBAQAogCQlpZiAocmVwb3J0LT5pZCA9PSBpZCkKIAkJCXJldHVybiByZXBvcnQ7CiAJfQotCWRldl93YXJuKCZoZGV2LT5kZXYsICJObyByZXBvcnQgd2l0aCBpZCAweCV4IGZvdW5kXG4iLCBpZCk7CisJaGlkX3dhcm4oaGRldiwgIk5vIHJlcG9ydCB3aXRoIGlkIDB4JXggZm91bmRcbiIsIGlkKTsKIAlyZXR1cm4gTlVMTDsKIH0KIApAQCAtMTMyOSw3ICsxMzI5LDcgQEAKIAogCXZlcmluZm8gPSBwaWNvbGNkX3NlbmRfYW5kX3dhaXQoaGRldiwgUkVQT1JUX1ZFUlNJT04sIE5VTEwsIDApOwogCWlmICghdmVyaW5mbykgewotCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJubyB2ZXJzaW9uIHJlc3BvbnNlIGZyb20gUGljb0xDRCIpOworCQloaWRfZXJyKGhkZXYsICJubyB2ZXJzaW9uIHJlc3BvbnNlIGZyb20gUGljb0xDRFxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtMTMzNywxNCArMTMzNywxNCBAQAogCQlkYXRhLT52ZXJzaW9uWzBdID0gdmVyaW5mby0+cmF3X2RhdGFbMV07CiAJCWRhdGEtPnZlcnNpb25bMV0gPSB2ZXJpbmZvLT5yYXdfZGF0YVswXTsKIAkJaWYgKGRhdGEtPnN0YXR1cyAmIFBJQ09MQ0RfQk9PVExPQURFUikgewotCQkJZGV2X2luZm8oJmhkZXYtPmRldiwgIlBpY29MQ0QsIGJvb3Rsb2FkZXIgdmVyc2lvbiAlZC4lZFxuIiwKLQkJCQkJdmVyaW5mby0+cmF3X2RhdGFbMV0sIHZlcmluZm8tPnJhd19kYXRhWzBdKTsKKwkJCWhpZF9pbmZvKGhkZXYsICJQaWNvTENELCBib290bG9hZGVyIHZlcnNpb24gJWQuJWRcbiIsCisJCQkJIHZlcmluZm8tPnJhd19kYXRhWzFdLCB2ZXJpbmZvLT5yYXdfZGF0YVswXSk7CiAJCX0gZWxzZSB7Ci0JCQlkZXZfaW5mbygmaGRldi0+ZGV2LCAiUGljb0xDRCwgZmlybXdhcmUgdmVyc2lvbiAlZC4lZFxuIiwKLQkJCQkJdmVyaW5mby0+cmF3X2RhdGFbMV0sIHZlcmluZm8tPnJhd19kYXRhWzBdKTsKKwkJCWhpZF9pbmZvKGhkZXYsICJQaWNvTENELCBmaXJtd2FyZSB2ZXJzaW9uICVkLiVkXG4iLAorCQkJCSB2ZXJpbmZvLT5yYXdfZGF0YVsxXSwgdmVyaW5mby0+cmF3X2RhdGFbMF0pOwogCQl9CiAJfSBlbHNlIHsKLQkJZGV2X2VycigmaGRldi0+ZGV2LCAiY29uZnVzZWQsIGdvdCB1bmV4cGVjdGVkIHZlcnNpb24gcmVzcG9uc2UgZnJvbSBQaWNvTENEXG4iKTsKKwkJaGlkX2VycihoZGV2LCAiY29uZnVzZWQsIGdvdCB1bmV4cGVjdGVkIHZlcnNpb24gcmVzcG9uc2UgZnJvbSBQaWNvTENEXG4iKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAl9CiAJa2ZyZWUodmVyaW5mbyk7CkBAIC0xNTQ0LDcgKzE1NDQsNyBAQAogCiAJLyogcHJlcGFyZSBidWZmZXIgd2l0aCBpbmZvIGFib3V0IHdoYXQgd2Ugd2FudCB0byByZWFkIChhZGRyICYgbGVuKSAqLwogCXJhd19kYXRhWzBdID0gKm9mZiAmIDB4ZmY7Ci0JcmF3X2RhdGFbMV0gPSAoKm9mZiA+PiA4KSAmJiAweGZmOworCXJhd19kYXRhWzFdID0gKCpvZmYgPj4gOCkgJiAweGZmOwogCXJhd19kYXRhWzJdID0gcyA8IDIwID8gcyA6IDIwOwogCWlmICgqb2ZmICsgcmF3X2RhdGFbMl0gPiAweGZmKQogCQlyYXdfZGF0YVsyXSA9IDB4MTAwIC0gKm9mZjsKQEAgLTE1ODMsNyArMTU4Myw3IEBACiAKIAltZW1zZXQocmF3X2RhdGEsIDAsIHNpemVvZihyYXdfZGF0YSkpOwogCXJhd19kYXRhWzBdID0gKm9mZiAmIDB4ZmY7Ci0JcmF3X2RhdGFbMV0gPSAoKm9mZiA+PiA4KSAmJiAweGZmOworCXJhd19kYXRhWzFdID0gKCpvZmYgPj4gOCkgJiAweGZmOwogCXJhd19kYXRhWzJdID0gcyA8IDIwID8gcyA6IDIwOwogCWlmICgqb2ZmICsgcmF3X2RhdGFbMl0gPiAweGZmKQogCQlyYXdfZGF0YVsyXSA9IDB4MTAwIC0gKm9mZjsKQEAgLTE4NjcsNiArMTg2Nyw3IEBACiAJCQlyZXBvcnQtPmlkLCByYXdfc2l6ZSk7CiAJaGlkX2RlYnVnX2V2ZW50KGhkZXYsIGJ1ZmYpOwogCWlmIChyYXdfc2l6ZSArIDUgPiBzaXplb2YocmF3X2RhdGEpKSB7CisJCWtmcmVlKGJ1ZmYpOwogCQloaWRfZGVidWdfZXZlbnQoaGRldiwgIiBUT08gQklHXG4iKTsKIAkJcmV0dXJuOwogCX0gZWxzZSB7CkBAIC0yMzI4LDggKzIzMjksNyBAQAogCQkJKGZsYXNoX3cgPyBTX0lXVVNSIDogMCkgfCAoZmxhc2hfciA/IFNfSVJVU1IgOiAwKSwKIAkJCWhkZXYtPmRlYnVnX2RpciwgZGF0YSwgJnBpY29sY2RfZGVidWdfZmxhc2hfZm9wcyk7CiAJfSBlbHNlIGlmIChmbGFzaF9yIHx8IGZsYXNoX3cpCi0JCWRldl93YXJuKCZoZGV2LT5kZXYsICJVbmV4cGVjdGVkIEZMQVNIIGFjY2VzcyByZXBvcnRzLCAiCi0JCQkJInBsZWFzZSBzdWJtaXQgcmRlc2MgZm9yIHJldmlld1xuIik7CisJCWhpZF93YXJuKGhkZXYsICJVbmV4cGVjdGVkIEZMQVNIIGFjY2VzcyByZXBvcnRzLCBwbGVhc2Ugc3VibWl0IHJkZXNjIGZvciByZXZpZXdcbiIpOwogfQogCiBzdGF0aWMgdm9pZCBwaWNvbGNkX2V4aXRfZGV2ZnMoc3RydWN0IHBpY29sY2RfZGF0YSAqZGF0YSkKQEAgLTI0NTcsMTMgKzI0NTcsMTMgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJaWYgKHJlcG9ydC0+bWF4ZmllbGQgIT0gMSB8fCByZXBvcnQtPmZpZWxkWzBdLT5yZXBvcnRfY291bnQgIT0gMiB8fAogCQkJcmVwb3J0LT5maWVsZFswXS0+cmVwb3J0X3NpemUgIT0gOCkgewotCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJ1bnN1cHBvcnRlZCBLRVlfU1RBVEUgcmVwb3J0Iik7CisJCWhpZF9lcnIoaGRldiwgInVuc3VwcG9ydGVkIEtFWV9TVEFURSByZXBvcnRcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlpZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CiAJaWYgKGlkZXYgPT0gTlVMTCkgewotCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJmYWlsZWQgdG8gYWxsb2NhdGUgaW5wdXQgZGV2aWNlIik7CisJCWhpZF9lcnIoaGRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBpbnB1dCBkZXZpY2VcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJaW5wdXRfc2V0X2RydmRhdGEoaWRldiwgaGRldik7CkBAIC0yNDg1LDcgKzI0ODUsNyBAQAogCQlpbnB1dF9zZXRfY2FwYWJpbGl0eShpZGV2LCBFVl9LRVksIGRhdGEtPmtleWNvZGVbaV0pOwogCWVycm9yID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGlkZXYpOwogCWlmIChlcnJvcikgewotCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJlcnJvciByZWdpc3RlcmluZyB0aGUgaW5wdXQgZGV2aWNlIik7CisJCWhpZF9lcnIoaGRldiwgImVycm9yIHJlZ2lzdGVyaW5nIHRoZSBpbnB1dCBkZXZpY2VcbiIpOwogCQlpbnB1dF9mcmVlX2RldmljZShpZGV2KTsKIAkJcmV0dXJuIGVycm9yOwogCX0KQEAgLTI1MjIsOSArMjUyMiw4IEBACiAJCXJldHVybiBlcnJvcjsKIAogCWlmIChkYXRhLT52ZXJzaW9uWzBdICE9IDAgJiYgZGF0YS0+dmVyc2lvblsxXSAhPSAzKQotCQlkZXZfaW5mbygmaGRldi0+ZGV2LCAiRGV2aWNlIHdpdGggdW50ZXN0ZWQgZmlybXdhcmUgcmV2aXNpb24sICIKLQkJCQkicGxlYXNlIHN1Ym1pdCAvc3lzL2tlcm5lbC9kZWJ1Zy9oaWQvJXMvcmRlc2MgZm9yIHRoaXMgZGV2aWNlLlxuIiwKLQkJCQlkZXZfbmFtZSgmaGRldi0+ZGV2KSk7CisJCWhpZF9pbmZvKGhkZXYsICJEZXZpY2Ugd2l0aCB1bnRlc3RlZCBmaXJtd2FyZSByZXZpc2lvbiwgcGxlYXNlIHN1Ym1pdCAvc3lzL2tlcm5lbC9kZWJ1Zy9oaWQvJXMvcmRlc2MgZm9yIHRoaXMgZGV2aWNlLlxuIiwKKwkJCSBkZXZfbmFtZSgmaGRldi0+ZGV2KSk7CiAKIAkvKiBTZXR1cCBrZXlwYWQgaW5wdXQgZGV2aWNlICovCiAJZXJyb3IgPSBwaWNvbGNkX2luaXRfa2V5cyhkYXRhLCBwaWNvbGNkX2luX3JlcG9ydChSRVBPUlRfS0VZX1NUQVRFLCBoZGV2KSk7CkBAIC0yNTgxLDkgKzI1ODAsOCBAQAogCQlyZXR1cm4gZXJyb3I7CiAKIAlpZiAoZGF0YS0+dmVyc2lvblswXSAhPSAxICYmIGRhdGEtPnZlcnNpb25bMV0gIT0gMCkKLQkJZGV2X2luZm8oJmhkZXYtPmRldiwgIkRldmljZSB3aXRoIHVudGVzdGVkIGJvb3Rsb2FkZXIgcmV2aXNpb24sICIKLQkJCQkicGxlYXNlIHN1Ym1pdCAvc3lzL2tlcm5lbC9kZWJ1Zy9oaWQvJXMvcmRlc2MgZm9yIHRoaXMgZGV2aWNlLlxuIiwKLQkJCQlkZXZfbmFtZSgmaGRldi0+ZGV2KSk7CisJCWhpZF9pbmZvKGhkZXYsICJEZXZpY2Ugd2l0aCB1bnRlc3RlZCBib290bG9hZGVyIHJldmlzaW9uLCBwbGVhc2Ugc3VibWl0IC9zeXMva2VybmVsL2RlYnVnL2hpZC8lcy9yZGVzYyBmb3IgdGhpcyBkZXZpY2UuXG4iLAorCQkJIGRldl9uYW1lKCZoZGV2LT5kZXYpKTsKIAogCXBpY29sY2RfaW5pdF9kZXZmcyhkYXRhLCBOVUxMLCBOVUxMLAogCQkJcGljb2xjZF9vdXRfcmVwb3J0KFJFUE9SVF9CTF9SRUFEX01FTU9SWSwgaGRldiksCkBAIC0yNjA1LDcgKzI2MDMsNyBAQAogCSAqLwogCWRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcGljb2xjZF9kYXRhKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGRhdGEgPT0gTlVMTCkgewotCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJjYW4ndCBhbGxvY2F0ZSBzcGFjZSBmb3IgTWluaWJveCBQaWNvTENEIGRldmljZSBkYXRhXG4iKTsKKwkJaGlkX2VycihoZGV2LCAiY2FuJ3QgYWxsb2NhdGUgc3BhY2UgZm9yIE1pbmlib3ggUGljb0xDRCBkZXZpY2UgZGF0YVxuIik7CiAJCWVycm9yID0gLUVOT01FTTsKIAkJZ290byBlcnJfbm9fY2xlYW51cDsKIAl9CkBAIC0yNjIxLDcgKzI2MTksNyBAQAogCS8qIFBhcnNlIHRoZSBkZXZpY2UgcmVwb3J0cyBhbmQgc3RhcnQgaXQgdXAgKi8KIAllcnJvciA9IGhpZF9wYXJzZShoZGV2KTsKIAlpZiAoZXJyb3IpIHsKLQkJZGV2X2VycigmaGRldi0+ZGV2LCAiZGV2aWNlIHJlcG9ydCBwYXJzZSBmYWlsZWRcbiIpOworCQloaWRfZXJyKGhkZXYsICJkZXZpY2UgcmVwb3J0IHBhcnNlIGZhaWxlZFxuIik7CiAJCWdvdG8gZXJyX2NsZWFudXBfZGF0YTsKIAl9CiAKQEAgLTI2MzEsMjUgKzI2MjksMjUgQEAKIAllcnJvciA9IGhpZF9od19zdGFydChoZGV2LCAwKTsKIAloZGV2LT5jbGFpbWVkID0gMDsKIAlpZiAoZXJyb3IpIHsKLQkJZGV2X2VycigmaGRldi0+ZGV2LCAiaGFyZHdhcmUgc3RhcnQgZmFpbGVkXG4iKTsKKwkJaGlkX2VycihoZGV2LCAiaGFyZHdhcmUgc3RhcnQgZmFpbGVkXG4iKTsKIAkJZ290byBlcnJfY2xlYW51cF9kYXRhOwogCX0KIAotCWVycm9yID0gaGRldi0+bGxfZHJpdmVyLT5vcGVuKGhkZXYpOworCWVycm9yID0gaGlkX2h3X29wZW4oaGRldik7CiAJaWYgKGVycm9yKSB7Ci0JCWRldl9lcnIoJmhkZXYtPmRldiwgImZhaWxlZCB0byBvcGVuIGlucHV0IGludGVycnVwdCBwaXBlIGZvciBrZXkgYW5kIElSIGV2ZW50c1xuIik7CisJCWhpZF9lcnIoaGRldiwgImZhaWxlZCB0byBvcGVuIGlucHV0IGludGVycnVwdCBwaXBlIGZvciBrZXkgYW5kIElSIGV2ZW50c1xuIik7CiAJCWdvdG8gZXJyX2NsZWFudXBfaGlkX2h3OwogCX0KIAogCWVycm9yID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZoZGV2LT5kZXYsICZkZXZfYXR0cl9vcGVyYXRpb25fbW9kZV9kZWxheSk7CiAJaWYgKGVycm9yKSB7Ci0JCWRldl9lcnIoJmhkZXYtPmRldiwgImZhaWxlZCB0byBjcmVhdGUgc3lzZnMgYXR0cmlidXRlc1xuIik7CisJCWhpZF9lcnIoaGRldiwgImZhaWxlZCB0byBjcmVhdGUgc3lzZnMgYXR0cmlidXRlc1xuIik7CiAJCWdvdG8gZXJyX2NsZWFudXBfaGlkX2xsOwogCX0KIAogCWVycm9yID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZoZGV2LT5kZXYsICZkZXZfYXR0cl9vcGVyYXRpb25fbW9kZSk7CiAJaWYgKGVycm9yKSB7Ci0JCWRldl9lcnIoJmhkZXYtPmRldiwgImZhaWxlZCB0byBjcmVhdGUgc3lzZnMgYXR0cmlidXRlc1xuIik7CisJCWhpZF9lcnIoaGRldiwgImZhaWxlZCB0byBjcmVhdGUgc3lzZnMgYXR0cmlidXRlc1xuIik7CiAJCWdvdG8gZXJyX2NsZWFudXBfc3lzZnMxOwogCX0KIApAQCAtMjY2OCw3ICsyNjY2LDcgQEAKIGVycl9jbGVhbnVwX3N5c2ZzMToKIAlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmhkZXYtPmRldiwgJmRldl9hdHRyX29wZXJhdGlvbl9tb2RlX2RlbGF5KTsKIGVycl9jbGVhbnVwX2hpZF9sbDoKLQloZGV2LT5sbF9kcml2ZXItPmNsb3NlKGhkZXYpOworCWhpZF9od19jbG9zZShoZGV2KTsKIGVycl9jbGVhbnVwX2hpZF9odzoKIAloaWRfaHdfc3RvcChoZGV2KTsKIGVycl9jbGVhbnVwX2RhdGE6CkBAIC0yNjk5LDcgKzI2OTcsNyBAQAogCXBpY29sY2RfZXhpdF9kZXZmcyhkYXRhKTsKIAlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmhkZXYtPmRldiwgJmRldl9hdHRyX29wZXJhdGlvbl9tb2RlKTsKIAlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmhkZXYtPmRldiwgJmRldl9hdHRyX29wZXJhdGlvbl9tb2RlX2RlbGF5KTsKLQloZGV2LT5sbF9kcml2ZXItPmNsb3NlKGhkZXYpOworCWhpZF9od19jbG9zZShoZGV2KTsKIAloaWRfaHdfc3RvcChoZGV2KTsKIAloaWRfc2V0X2RydmRhdGEoaGRldiwgTlVMTCk7CiAKQEAgLTI3NTMsNyArMjc1MSw3IEBACiB7CiAJaGlkX3VucmVnaXN0ZXJfZHJpdmVyKCZwaWNvbGNkX2RyaXZlcik7CiAjaWZkZWYgQ09ORklHX0hJRF9QSUNPTENEX0ZCCi0JZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwlmbHVzaF93b3JrX3N5bmMoJnBpY29sY2RfZmJfY2xlYW51cCk7CiAJV0FSTl9PTihmYl9wZW5kaW5nKTsKICNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLXBsLmMgYi9kcml2ZXJzL2hpZC9oaWQtcGwuYwppbmRleCA5ZjQxZTJiLi4wNmU1MzAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtcGwuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtcGwuYwpAQCAtMTAzLDcgKzEwMyw3IEBACiAJKi8KIAogCWlmIChsaXN0X2VtcHR5KHJlcG9ydF9saXN0KSkgewotCQlkZXZfZXJyKCZoaWQtPmRldiwgIm5vIG91dHB1dCByZXBvcnRzIGZvdW5kXG4iKTsKKwkJaGlkX2VycihoaWQsICJubyBvdXRwdXQgcmVwb3J0cyBmb3VuZFxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtMTEyLDE0ICsxMTIsMTMgQEAKIAkJcmVwb3J0X3B0ciA9IHJlcG9ydF9wdHItPm5leHQ7CiAKIAkJaWYgKHJlcG9ydF9wdHIgPT0gcmVwb3J0X2xpc3QpIHsKLQkJCWRldl9lcnIoJmhpZC0+ZGV2LCAicmVxdWlyZWQgb3V0cHV0IHJlcG9ydCBpcyAiCi0JCQkJCSJtaXNzaW5nXG4iKTsKKwkJCWhpZF9lcnIoaGlkLCAicmVxdWlyZWQgb3V0cHV0IHJlcG9ydCBpcyBtaXNzaW5nXG4iKTsKIAkJCXJldHVybiAtRU5PREVWOwogCQl9CiAKIAkJcmVwb3J0ID0gbGlzdF9lbnRyeShyZXBvcnRfcHRyLCBzdHJ1Y3QgaGlkX3JlcG9ydCwgbGlzdCk7CiAJCWlmIChyZXBvcnQtPm1heGZpZWxkIDwgMSkgewotCQkJZGV2X2VycigmaGlkLT5kZXYsICJubyBmaWVsZHMgaW4gdGhlIHJlcG9ydFxuIik7CisJCQloaWRfZXJyKGhpZCwgIm5vIGZpZWxkcyBpbiB0aGUgcmVwb3J0XG4iKTsKIAkJCXJldHVybiAtRU5PREVWOwogCQl9CiAKQEAgLTEzNyw3ICsxMzYsNyBAQAogCQkJd2VhayA9ICZyZXBvcnQtPmZpZWxkWzNdLT52YWx1ZVswXTsKIAkJCWRlYnVnKCJkZXRlY3RlZCA0LWZpZWxkIGRldmljZSIpOwogCQl9IGVsc2UgewotCQkJZGV2X2VycigmaGlkLT5kZXYsICJub3QgZW5vdWdoIGZpZWxkcyBvciB2YWx1ZXNcbiIpOworCQkJaGlkX2VycihoaWQsICJub3QgZW5vdWdoIGZpZWxkcyBvciB2YWx1ZXNcbiIpOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KIApAQCAtMTY0LDggKzE2Myw3IEBACiAJCXVzYmhpZF9zdWJtaXRfcmVwb3J0KGhpZCwgcGxmZi0+cmVwb3J0LCBVU0JfRElSX09VVCk7CiAJfQogCi0JZGV2X2luZm8oJmhpZC0+ZGV2LCAiRm9yY2UgZmVlZGJhY2sgZm9yIFBhbnRoZXJMb3JkL0dyZWVuQXNpYSAiCi0JICAgICAgICJkZXZpY2VzIGJ5IEFuc3NpIEhhbm51bGEgPGFuc3NpLmhhbm51bGFAZ21haWwuY29tPlxuIik7CisJaGlkX2luZm8oaGlkLCAiRm9yY2UgZmVlZGJhY2sgZm9yIFBhbnRoZXJMb3JkL0dyZWVuQXNpYSBkZXZpY2VzIGJ5IEFuc3NpIEhhbm51bGEgPGFuc3NpLmhhbm51bGFAZ21haWwuY29tPlxuIik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE4NSwxMyArMTgzLDEzIEBACiAKIAlyZXQgPSBoaWRfcGFyc2UoaGRldik7CiAJaWYgKHJldCkgewotCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJwYXJzZSBmYWlsZWRcbiIpOworCQloaWRfZXJyKGhkZXYsICJwYXJzZSBmYWlsZWRcbiIpOwogCQlnb3RvIGVycjsKIAl9CiAKIAlyZXQgPSBoaWRfaHdfc3RhcnQoaGRldiwgSElEX0NPTk5FQ1RfREVGQVVMVCAmIH5ISURfQ09OTkVDVF9GRik7CiAJaWYgKHJldCkgewotCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJodyBzdGFydCBmYWlsZWRcbiIpOworCQloaWRfZXJyKGhkZXYsICJodyBzdGFydCBmYWlsZWRcbiIpOwogCQlnb3RvIGVycjsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1wcm9kaWtleXMuYyBiL2RyaXZlcnMvaGlkL2hpZC1wcm9kaWtleXMuYwppbmRleCA0OGVhYjg0Li5hYjE5ZjI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtcHJvZGlrZXlzLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLXByb2Rpa2V5cy5jCkBAIC0xNiw2ICsxNiw4IEBACiAgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KQEAgLTEzMCw3ICsxMzIsNyBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgREVWSUNFX0FUVFIoY2hhbm5lbCwgU19JUlVHTyB8IFNfSVdVR08sIHNob3dfY2hhbm5lbCwKK3N0YXRpYyBERVZJQ0VfQVRUUihjaGFubmVsLCBTX0lSVUdPIHwgU19JV1VTUiB8IFNfSVdHUlAgLCBzaG93X2NoYW5uZWwsCiAJCXN0b3JlX2NoYW5uZWwpOwogCiBzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKnN5c2ZzX2RldmljZV9hdHRyX2NoYW5uZWwgPSB7CkBAIC0xNjksNyArMTcxLDcgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotc3RhdGljIERFVklDRV9BVFRSKHN1c3RhaW4sIFNfSVJVR08gfCBTX0lXVUdPLCBzaG93X3N1c3RhaW4sCitzdGF0aWMgREVWSUNFX0FUVFIoc3VzdGFpbiwgU19JUlVHTyB8IFNfSVdVU1IgfCBTX0lXR1JQLCBzaG93X3N1c3RhaW4sCiAJCXN0b3JlX3N1c3RhaW4pOwogCiBzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKnN5c2ZzX2RldmljZV9hdHRyX3N1c3RhaW4gPSB7CkBAIC0yMDcsNyArMjA5LDcgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotc3RhdGljIERFVklDRV9BVFRSKG9jdGF2ZSwgU19JUlVHTyB8IFNfSVdVR08sIHNob3dfb2N0YXZlLAorc3RhdGljIERFVklDRV9BVFRSKG9jdGF2ZSwgU19JUlVHTyB8IFNfSVdVU1IgfCBTX0lXR1JQLCBzaG93X29jdGF2ZSwKIAkJc3RvcmVfb2N0YXZlKTsKIAogc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpzeXNmc19kZXZpY2VfYXR0cl9vY3RhdmUgPSB7CkBAIC0yODUsMTEgKzI4NywxMSBAQAogCQkJY29udGludWU7CiAKIAkJaWYgKHJlcG9ydC0+bWF4ZmllbGQgPCAxKSB7Ci0JCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJvdXRwdXQgcmVwb3J0IGlzIGVtcHR5XG4iKTsKKwkJCWhpZF9lcnIoaGRldiwgIm91dHB1dCByZXBvcnQgaXMgZW1wdHlcbiIpOwogCQkJYnJlYWs7CiAJCX0KIAkJaWYgKHJlcG9ydC0+ZmllbGRbMF0tPnJlcG9ydF9jb3VudCAhPSAyKSB7Ci0JCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJmaWVsZCBjb3VudCB0b28gbG93XG4iKTsKKwkJCWhpZF9lcnIoaGRldiwgImZpZWxkIGNvdW50IHRvbyBsb3dcbiIpOwogCQkJYnJlYWs7CiAJCX0KIAkJcG0tPnBjbWlkaV9yZXBvcnQ2ID0gcmVwb3J0OwpAQCAtNzQ2LDggKzc0OCw4IEBACiAJaWYgKCpyc2l6ZSA9PSAxNzggJiYKIAkgICAgICByZGVzY1sxMTFdID09IDB4MDYgJiYgcmRlc2NbMTEyXSA9PSAweDAwICYmCiAJICAgICAgcmRlc2NbMTEzXSA9PSAweGZmKSB7Ci0JCWRldl9pbmZvKCZoZGV2LT5kZXYsICJmaXhpbmcgdXAgcGMtbWlkaSBrZXlib2FyZCByZXBvcnQgIgotCQkJImRlc2NyaXB0b3JcbiIpOworCQloaWRfaW5mbyhoZGV2LAorCQkJICJmaXhpbmcgdXAgcGMtbWlkaSBrZXlib2FyZCByZXBvcnQgZGVzY3JpcHRvclxuIik7CiAKIAkJcmRlc2NbMTQ0XSA9IDB4MTg7IC8qIHJlcG9ydCA0OiB3YXMgMHgxMCByZXBvcnQgY291bnQgKi8KIAl9CkBAIC04MDUsNyArODA3LDcgQEAKIAogCXBrID0ga3phbGxvYyhzaXplb2YoKnBrKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHBrID09IE5VTEwpIHsKLQkJZGV2X2VycigmaGRldi0+ZGV2LCAicHJvZGlrZXlzOiBjYW4ndCBhbGxvYyBkZXNjcmlwdG9yXG4iKTsKKwkJaGlkX2VycihoZGV2LCAiY2FuJ3QgYWxsb2MgZGVzY3JpcHRvclxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtODEzLDggKzgxNSw3IEBACiAKIAlwbSA9IGt6YWxsb2Moc2l6ZW9mKCpwbSksIEdGUF9LRVJORUwpOwogCWlmIChwbSA9PSBOVUxMKSB7Ci0JCWRldl9lcnIoJmhkZXYtPmRldiwKLQkJCSJwcm9kaWtleXM6IGNhbid0IGFsbG9jIGRlc2NyaXB0b3JcbiIpOworCQloaWRfZXJyKGhkZXYsICJjYW4ndCBhbGxvYyBkZXNjcmlwdG9yXG4iKTsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBlcnJfZnJlZTsKIAl9CkBAIC04MjcsNyArODI4LDcgQEAKIAogCXJldCA9IGhpZF9wYXJzZShoZGV2KTsKIAlpZiAocmV0KSB7Ci0JCWRldl9lcnIoJmhkZXYtPmRldiwgInByb2Rpa2V5czogaGlkIHBhcnNlIGZhaWxlZFxuIik7CisJCWhpZF9lcnIoaGRldiwgImhpZCBwYXJzZSBmYWlsZWRcbiIpOwogCQlnb3RvIGVycl9mcmVlOwogCX0KIApAQCAtODM3LDcgKzgzOCw3IEBACiAKIAlyZXQgPSBoaWRfaHdfc3RhcnQoaGRldiwgSElEX0NPTk5FQ1RfREVGQVVMVCk7CiAJaWYgKHJldCkgewotCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJwcm9kaWtleXM6IGh3IHN0YXJ0IGZhaWxlZFxuIik7CisJCWhpZF9lcnIoaGRldiwgImh3IHN0YXJ0IGZhaWxlZFxuIik7CiAJCWdvdG8gZXJyX2ZyZWU7CiAJfQogCkBAIC04OTYsNyArODk3LDcgQEAKIAogCXJldCA9IGhpZF9yZWdpc3Rlcl9kcml2ZXIoJnBrX2RyaXZlcik7CiAJaWYgKHJldCkKLQkJcHJpbnRrKEtFUk5fRVJSICJjYW4ndCByZWdpc3RlciBwcm9kaWtleXMgZHJpdmVyXG4iKTsKKwkJcHJfZXJyKCJjYW4ndCByZWdpc3RlciBwcm9kaWtleXMgZHJpdmVyXG4iKTsKIAogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtcXVhbnRhLmMgYi9kcml2ZXJzL2hpZC9oaWQtcXVhbnRhLmMKaW5kZXggNTRkM2RiNS4uODdhNTRkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLXF1YW50YS5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1xdWFudGEuYwpAQCAtMTk1LDcgKzE5NSw3IEBACiAKIAl0ZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBxdWFudGFfZGF0YSksIEdGUF9LRVJORUwpOwogCWlmICghdGQpIHsKLQkJZGV2X2VycigmaGRldi0+ZGV2LCAiY2Fubm90IGFsbG9jYXRlIFF1YW50YSBUb3VjaCBkYXRhXG4iKTsKKwkJaGlkX2VycihoZGV2LCAiY2Fubm90IGFsbG9jYXRlIFF1YW50YSBUb3VjaCBkYXRhXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCXRkLT52YWxpZCA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmMgYi9kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYwppbmRleCBmNzc2OTU3Li5jYmQ4Y2M0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYwpAQCAtMzUsNiArMzUsMTEgQEAKICNpbmNsdWRlICJoaWQtcm9jY2F0LmgiCiAjaW5jbHVkZSAiaGlkLXJvY2NhdC1rb25lLmgiCiAKK3N0YXRpYyB1aW50IHByb2ZpbGVfbnVtYmVyc1s1XSA9IHswLCAxLCAyLCAzLCA0fTsKKworLyoga29uZV9jbGFzcyBpcyB1c2VkIGZvciBjcmVhdGluZyBzeXNmcyBhdHRyaWJ1dGVzIHZpYSByb2NjYXQgY2hhciBkZXZpY2UgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xhc3MgKmtvbmVfY2xhc3M7CisKIHN0YXRpYyB2b2lkIGtvbmVfc2V0X3NldHRpbmdzX2NoZWNrc3VtKHN0cnVjdCBrb25lX3NldHRpbmdzICpzZXR0aW5ncykKIHsKIAl1aW50MTZfdCBjaGVja3N1bSA9IDA7CkBAIC05MCw4ICs5NSw3IEBACiAJCWtmcmVlKGRhdGEpOwogCQlyZXR1cm4gMDsKIAl9IGVsc2UgeyAvKiB1bmtub3duIGFuc3dlciAqLwotCQlkZXZfZXJyKCZ1c2JfZGV2LT5kZXYsICJnb3QgcmV0dmFsICVkIHdoZW4gY2hlY2tpbmcgd3JpdGVcbiIsCi0JCQkJKmRhdGEpOworCQloaWRfZXJyKHVzYl9kZXYsICJnb3QgcmV0dmFsICVkIHdoZW4gY2hlY2tpbmcgd3JpdGVcbiIsICpkYXRhKTsKIAkJa2ZyZWUoZGF0YSk7CiAJCXJldHVybiAtRUlPOwogCX0KQEAgLTI2Miw3ICsyNjYsOCBAQAogc3RhdGljIHNzaXplX3Qga29uZV9zeXNmc19yZWFkX3NldHRpbmdzKHN0cnVjdCBmaWxlICpmcCwgc3RydWN0IGtvYmplY3QgKmtvYmosCiAJCXN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYsCiAJCWxvZmZfdCBvZmYsIHNpemVfdCBjb3VudCkgewotCXN0cnVjdCBkZXZpY2UgKmRldiA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGV2aWNlLCBrb2JqKTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPQorCQkJY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkZXZpY2UsIGtvYmopLT5wYXJlbnQtPnBhcmVudDsKIAlzdHJ1Y3Qga29uZV9kZXZpY2UgKmtvbmUgPSBoaWRfZ2V0X2RydmRhdGEoZGV2X2dldF9kcnZkYXRhKGRldikpOwogCiAJaWYgKG9mZiA+PSBzaXplb2Yoc3RydWN0IGtvbmVfc2V0dGluZ3MpKQpAQCAtMjg2LDcgKzI5MSw4IEBACiBzdGF0aWMgc3NpemVfdCBrb25lX3N5c2ZzX3dyaXRlX3NldHRpbmdzKHN0cnVjdCBmaWxlICpmcCwgc3RydWN0IGtvYmplY3QgKmtvYmosCiAJCXN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYsCiAJCWxvZmZfdCBvZmYsIHNpemVfdCBjb3VudCkgewotCXN0cnVjdCBkZXZpY2UgKmRldiA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGV2aWNlLCBrb2JqKTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPQorCQkJY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkZXZpY2UsIGtvYmopLT5wYXJlbnQtPnBhcmVudDsKIAlzdHJ1Y3Qga29uZV9kZXZpY2UgKmtvbmUgPSBoaWRfZ2V0X2RydmRhdGEoZGV2X2dldF9kcnZkYXRhKGRldikpOwogCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldih0b191c2JfaW50ZXJmYWNlKGRldikpOwogCWludCByZXR2YWwgPSAwLCBkaWZmZXJlbmNlOwpAQCAtMzE5LDEwICszMjUsMTEgQEAKIAlyZXR1cm4gc2l6ZW9mKHN0cnVjdCBrb25lX3NldHRpbmdzKTsKIH0KIAotc3RhdGljIHNzaXplX3Qga29uZV9zeXNmc19yZWFkX3Byb2ZpbGV4KHN0cnVjdCBrb2JqZWN0ICprb2JqLAotCQlzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmLAotCQlsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQsIGludCBudW1iZXIpIHsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRldmljZSwga29iaik7CitzdGF0aWMgc3NpemVfdCBrb25lX3N5c2ZzX3JlYWRfcHJvZmlsZXgoc3RydWN0IGZpbGUgKmZwLAorCQlzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIsCisJCWNoYXIgKmJ1ZiwgbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KSB7CisJc3RydWN0IGRldmljZSAqZGV2ID0KKwkJCWNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGV2aWNlLCBrb2JqKS0+cGFyZW50LT5wYXJlbnQ7CiAJc3RydWN0IGtvbmVfZGV2aWNlICprb25lID0gaGlkX2dldF9kcnZkYXRhKGRldl9nZXRfZHJ2ZGF0YShkZXYpKTsKIAogCWlmIChvZmYgPj0gc2l6ZW9mKHN0cnVjdCBrb25lX3Byb2ZpbGUpKQpAQCAtMzMyLDQ3ICszMzksMTggQEAKIAkJY291bnQgPSBzaXplb2Yoc3RydWN0IGtvbmVfcHJvZmlsZSkgLSBvZmY7CiAKIAltdXRleF9sb2NrKCZrb25lLT5rb25lX2xvY2spOwotCW1lbWNweShidWYsICgoY2hhciBjb25zdCAqKSZrb25lLT5wcm9maWxlc1tudW1iZXIgLSAxXSkgKyBvZmYsIGNvdW50KTsKKwltZW1jcHkoYnVmLCAoKGNoYXIgY29uc3QgKikma29uZS0+cHJvZmlsZXNbKih1aW50ICopKGF0dHItPnByaXZhdGUpXSkgKyBvZmYsIGNvdW50KTsKIAltdXRleF91bmxvY2soJmtvbmUtPmtvbmVfbG9jayk7CiAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IGtvbmVfc3lzZnNfcmVhZF9wcm9maWxlMShzdHJ1Y3QgZmlsZSAqZnAsIHN0cnVjdCBrb2JqZWN0ICprb2JqLAotCQlzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmLAotCQlsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpIHsKLQlyZXR1cm4ga29uZV9zeXNmc19yZWFkX3Byb2ZpbGV4KGtvYmosIGF0dHIsIGJ1Ziwgb2ZmLCBjb3VudCwgMSk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGtvbmVfc3lzZnNfcmVhZF9wcm9maWxlMihzdHJ1Y3QgZmlsZSAqZnAsIHN0cnVjdCBrb2JqZWN0ICprb2JqLAotCQlzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmLAotCQlsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpIHsKLQlyZXR1cm4ga29uZV9zeXNmc19yZWFkX3Byb2ZpbGV4KGtvYmosIGF0dHIsIGJ1Ziwgb2ZmLCBjb3VudCwgMik7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGtvbmVfc3lzZnNfcmVhZF9wcm9maWxlMyhzdHJ1Y3QgZmlsZSAqZnAsIHN0cnVjdCBrb2JqZWN0ICprb2JqLAotCQlzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmLAotCQlsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpIHsKLQlyZXR1cm4ga29uZV9zeXNmc19yZWFkX3Byb2ZpbGV4KGtvYmosIGF0dHIsIGJ1Ziwgb2ZmLCBjb3VudCwgMyk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGtvbmVfc3lzZnNfcmVhZF9wcm9maWxlNChzdHJ1Y3QgZmlsZSAqZnAsIHN0cnVjdCBrb2JqZWN0ICprb2JqLAotCQlzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmLAotCQlsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpIHsKLQlyZXR1cm4ga29uZV9zeXNmc19yZWFkX3Byb2ZpbGV4KGtvYmosIGF0dHIsIGJ1Ziwgb2ZmLCBjb3VudCwgNCk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGtvbmVfc3lzZnNfcmVhZF9wcm9maWxlNShzdHJ1Y3QgZmlsZSAqZnAsIHN0cnVjdCBrb2JqZWN0ICprb2JqLAotCQlzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmLAotCQlsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpIHsKLQlyZXR1cm4ga29uZV9zeXNmc19yZWFkX3Byb2ZpbGV4KGtvYmosIGF0dHIsIGJ1Ziwgb2ZmLCBjb3VudCwgNSk7Ci19Ci0KIC8qIFdyaXRlcyBkYXRhIG9ubHkgaWYgZGlmZmVyZW50IHRvIHN0b3JlZCBkYXRhICovCi1zdGF0aWMgc3NpemVfdCBrb25lX3N5c2ZzX3dyaXRlX3Byb2ZpbGV4KHN0cnVjdCBrb2JqZWN0ICprb2JqLAotCQlzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmLAotCQlsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQsIGludCBudW1iZXIpIHsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRldmljZSwga29iaik7CitzdGF0aWMgc3NpemVfdCBrb25lX3N5c2ZzX3dyaXRlX3Byb2ZpbGV4KHN0cnVjdCBmaWxlICpmcCwKKwkJc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyLAorCQljaGFyICpidWYsIGxvZmZfdCBvZmYsIHNpemVfdCBjb3VudCkgeworCXN0cnVjdCBkZXZpY2UgKmRldiA9CisJCQljb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRldmljZSwga29iaiktPnBhcmVudC0+cGFyZW50OwogCXN0cnVjdCBrb25lX2RldmljZSAqa29uZSA9IGhpZF9nZXRfZHJ2ZGF0YShkZXZfZ2V0X2RydmRhdGEoZGV2KSk7CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KHRvX3VzYl9pbnRlcmZhY2UoZGV2KSk7CiAJc3RydWN0IGtvbmVfcHJvZmlsZSAqcHJvZmlsZTsKQEAgLTM4MiwxMyArMzYwLDE0IEBACiAJaWYgKG9mZiAhPSAwIHx8IGNvdW50ICE9IHNpemVvZihzdHJ1Y3Qga29uZV9wcm9maWxlKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlwcm9maWxlID0gJmtvbmUtPnByb2ZpbGVzW251bWJlciAtIDFdOworCXByb2ZpbGUgPSAma29uZS0+cHJvZmlsZXNbKih1aW50ICopKGF0dHItPnByaXZhdGUpXTsKIAogCW11dGV4X2xvY2soJmtvbmUtPmtvbmVfbG9jayk7CiAJZGlmZmVyZW5jZSA9IG1lbWNtcChidWYsIHByb2ZpbGUsIHNpemVvZihzdHJ1Y3Qga29uZV9wcm9maWxlKSk7CiAJaWYgKGRpZmZlcmVuY2UpIHsKIAkJcmV0dmFsID0ga29uZV9zZXRfcHJvZmlsZSh1c2JfZGV2LAotCQkJCShzdHJ1Y3Qga29uZV9wcm9maWxlIGNvbnN0ICopYnVmLCBudW1iZXIpOworCQkJCShzdHJ1Y3Qga29uZV9wcm9maWxlIGNvbnN0ICopYnVmLAorCQkJCSoodWludCAqKShhdHRyLT5wcml2YXRlKSArIDEpOwogCQlpZiAoIXJldHZhbCkKIAkJCW1lbWNweShwcm9maWxlLCBidWYsIHNpemVvZihzdHJ1Y3Qga29uZV9wcm9maWxlKSk7CiAJfQpAQCAtNDAwLDQ3ICszNzksMTkgQEAKIAlyZXR1cm4gc2l6ZW9mKHN0cnVjdCBrb25lX3Byb2ZpbGUpOwogfQogCi1zdGF0aWMgc3NpemVfdCBrb25lX3N5c2ZzX3dyaXRlX3Byb2ZpbGUxKHN0cnVjdCBmaWxlICpmcCwgc3RydWN0IGtvYmplY3QgKmtvYmosCi0JCXN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYsCi0JCWxvZmZfdCBvZmYsIHNpemVfdCBjb3VudCkgewotCXJldHVybiBrb25lX3N5c2ZzX3dyaXRlX3Byb2ZpbGV4KGtvYmosIGF0dHIsIGJ1Ziwgb2ZmLCBjb3VudCwgMSk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGtvbmVfc3lzZnNfd3JpdGVfcHJvZmlsZTIoc3RydWN0IGZpbGUgKmZwLCBzdHJ1Y3Qga29iamVjdCAqa29iaiwKLQkJc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZiwKLQkJbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KSB7Ci0JcmV0dXJuIGtvbmVfc3lzZnNfd3JpdGVfcHJvZmlsZXgoa29iaiwgYXR0ciwgYnVmLCBvZmYsIGNvdW50LCAyKTsKLX0KLQotc3RhdGljIHNzaXplX3Qga29uZV9zeXNmc193cml0ZV9wcm9maWxlMyhzdHJ1Y3QgZmlsZSAqZnAsIHN0cnVjdCBrb2JqZWN0ICprb2JqLAotCQlzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmLAotCQlsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpIHsKLQlyZXR1cm4ga29uZV9zeXNmc193cml0ZV9wcm9maWxleChrb2JqLCBhdHRyLCBidWYsIG9mZiwgY291bnQsIDMpOwotfQotCi1zdGF0aWMgc3NpemVfdCBrb25lX3N5c2ZzX3dyaXRlX3Byb2ZpbGU0KHN0cnVjdCBmaWxlICpmcCwgc3RydWN0IGtvYmplY3QgKmtvYmosCi0JCXN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYsCi0JCWxvZmZfdCBvZmYsIHNpemVfdCBjb3VudCkgewotCXJldHVybiBrb25lX3N5c2ZzX3dyaXRlX3Byb2ZpbGV4KGtvYmosIGF0dHIsIGJ1Ziwgb2ZmLCBjb3VudCwgNCk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGtvbmVfc3lzZnNfd3JpdGVfcHJvZmlsZTUoc3RydWN0IGZpbGUgKmZwLCBzdHJ1Y3Qga29iamVjdCAqa29iaiwKLQkJc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZiwKLQkJbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KSB7Ci0JcmV0dXJuIGtvbmVfc3lzZnNfd3JpdGVfcHJvZmlsZXgoa29iaiwgYXR0ciwgYnVmLCBvZmYsIGNvdW50LCA1KTsKLX0KLQogc3RhdGljIHNzaXplX3Qga29uZV9zeXNmc19zaG93X2FjdHVhbF9wcm9maWxlKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3Qga29uZV9kZXZpY2UgKmtvbmUgPSBoaWRfZ2V0X2RydmRhdGEoZGV2X2dldF9kcnZkYXRhKGRldikpOworCXN0cnVjdCBrb25lX2RldmljZSAqa29uZSA9CisJCQloaWRfZ2V0X2RydmRhdGEoZGV2X2dldF9kcnZkYXRhKGRldi0+cGFyZW50LT5wYXJlbnQpKTsKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwga29uZS0+YWN0dWFsX3Byb2ZpbGUpOwogfQogCiBzdGF0aWMgc3NpemVfdCBrb25lX3N5c2ZzX3Nob3dfYWN0dWFsX2RwaShzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IGtvbmVfZGV2aWNlICprb25lID0gaGlkX2dldF9kcnZkYXRhKGRldl9nZXRfZHJ2ZGF0YShkZXYpKTsKKwlzdHJ1Y3Qga29uZV9kZXZpY2UgKmtvbmUgPQorCQkJaGlkX2dldF9kcnZkYXRhKGRldl9nZXRfZHJ2ZGF0YShkZXYtPnBhcmVudC0+cGFyZW50KSk7CiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIGtvbmUtPmFjdHVhbF9kcGkpOwogfQogCkBAIC00NDgsMTEgKzM5OSwxNSBAQAogc3RhdGljIHNzaXplX3Qga29uZV9zeXNmc19zaG93X3dlaWdodChzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IGtvbmVfZGV2aWNlICprb25lID0gaGlkX2dldF9kcnZkYXRhKGRldl9nZXRfZHJ2ZGF0YShkZXYpKTsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiA9IGludGVyZmFjZV90b191c2JkZXYodG9fdXNiX2ludGVyZmFjZShkZXYpKTsKKwlzdHJ1Y3Qga29uZV9kZXZpY2UgKmtvbmU7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXY7CiAJaW50IHdlaWdodCA9IDA7CiAJaW50IHJldHZhbDsKIAorCWRldiA9IGRldi0+cGFyZW50LT5wYXJlbnQ7CisJa29uZSA9IGhpZF9nZXRfZHJ2ZGF0YShkZXZfZ2V0X2RydmRhdGEoZGV2KSk7CisJdXNiX2RldiA9IGludGVyZmFjZV90b191c2JkZXYodG9fdXNiX2ludGVyZmFjZShkZXYpKTsKKwogCW11dGV4X2xvY2soJmtvbmUtPmtvbmVfbG9jayk7CiAJcmV0dmFsID0ga29uZV9nZXRfd2VpZ2h0KHVzYl9kZXYsICZ3ZWlnaHQpOwogCW11dGV4X3VubG9jaygma29uZS0+a29uZV9sb2NrKTsKQEAgLTQ2NSwxNCArNDIwLDE2IEBACiBzdGF0aWMgc3NpemVfdCBrb25lX3N5c2ZzX3Nob3dfZmlybXdhcmVfdmVyc2lvbihzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IGtvbmVfZGV2aWNlICprb25lID0gaGlkX2dldF9kcnZkYXRhKGRldl9nZXRfZHJ2ZGF0YShkZXYpKTsKKwlzdHJ1Y3Qga29uZV9kZXZpY2UgKmtvbmUgPQorCQkJaGlkX2dldF9kcnZkYXRhKGRldl9nZXRfZHJ2ZGF0YShkZXYtPnBhcmVudC0+cGFyZW50KSk7CiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIGtvbmUtPmZpcm13YXJlX3ZlcnNpb24pOwogfQogCiBzdGF0aWMgc3NpemVfdCBrb25lX3N5c2ZzX3Nob3dfdGN1KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3Qga29uZV9kZXZpY2UgKmtvbmUgPSBoaWRfZ2V0X2RydmRhdGEoZGV2X2dldF9kcnZkYXRhKGRldikpOworCXN0cnVjdCBrb25lX2RldmljZSAqa29uZSA9CisJCQloaWRfZ2V0X2RydmRhdGEoZGV2X2dldF9kcnZkYXRhKGRldi0+cGFyZW50LT5wYXJlbnQpKTsKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwga29uZS0+c2V0dGluZ3MudGN1KTsKIH0KIApAQCAtNTA0LDExICs0NjEsMTUgQEAKIHN0YXRpYyBzc2l6ZV90IGtvbmVfc3lzZnNfc2V0X3RjdShzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyIGNvbnN0ICpidWYsIHNpemVfdCBzaXplKQogewotCXN0cnVjdCBrb25lX2RldmljZSAqa29uZSA9IGhpZF9nZXRfZHJ2ZGF0YShkZXZfZ2V0X2RydmRhdGEoZGV2KSk7Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KHRvX3VzYl9pbnRlcmZhY2UoZGV2KSk7CisJc3RydWN0IGtvbmVfZGV2aWNlICprb25lOworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2OwogCWludCByZXR2YWw7CiAJdW5zaWduZWQgbG9uZyBzdGF0ZTsKIAorCWRldiA9IGRldi0+cGFyZW50LT5wYXJlbnQ7CisJa29uZSA9IGhpZF9nZXRfZHJ2ZGF0YShkZXZfZ2V0X2RydmRhdGEoZGV2KSk7CisJdXNiX2RldiA9IGludGVyZmFjZV90b191c2JkZXYodG9fdXNiX2ludGVyZmFjZShkZXYpKTsKKwogCXJldHZhbCA9IHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZzdGF0ZSk7CiAJaWYgKHJldHZhbCkKIAkJcmV0dXJuIHJldHZhbDsKQEAgLTU1Niw3ICs1MTcsNyBAQAogCiAJCXJldHZhbCA9IGtvbmVfc2V0X3NldHRpbmdzKHVzYl9kZXYsICZrb25lLT5zZXR0aW5ncyk7CiAJCWlmIChyZXR2YWwpIHsKLQkJCWRldl9lcnIoJnVzYl9kZXYtPmRldiwgImNvdWxkbid0IHNldCB0Y3Ugc3RhdGVcbiIpOworCQkJaGlkX2Vycih1c2JfZGV2LCAiY291bGRuJ3Qgc2V0IHRjdSBzdGF0ZVxuIik7CiAJCQkvKgogCQkJICogdHJ5IHRvIHJlcmVhZCB2YWxpZCBzZXR0aW5ncyBpbnRvIGJ1ZmZlciBvdmVyd3JpdGluZwogCQkJICogZmlyc3QgZXJyb3IgY29kZQpAQCAtNTcwLDcgKzUzMSw3IEBACiAKIAlyZXR2YWwgPSBzaXplOwogZXhpdF9ub19zZXR0aW5nczoKLQlkZXZfZXJyKCZ1c2JfZGV2LT5kZXYsICJjb3VsZG4ndCByZWFkIHNldHRpbmdzXG4iKTsKKwloaWRfZXJyKHVzYl9kZXYsICJjb3VsZG4ndCByZWFkIHNldHRpbmdzXG4iKTsKIGV4aXRfdW5sb2NrOgogCW11dGV4X3VubG9jaygma29uZS0+a29uZV9sb2NrKTsKIAlyZXR1cm4gcmV0dmFsOwpAQCAtNTc5LDE4ICs1NDAsMjMgQEAKIHN0YXRpYyBzc2l6ZV90IGtvbmVfc3lzZnNfc2hvd19zdGFydHVwX3Byb2ZpbGUoc3RydWN0IGRldmljZSAqZGV2LAogCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCBrb25lX2RldmljZSAqa29uZSA9IGhpZF9nZXRfZHJ2ZGF0YShkZXZfZ2V0X2RydmRhdGEoZGV2KSk7CisJc3RydWN0IGtvbmVfZGV2aWNlICprb25lID0KKwkJCWhpZF9nZXRfZHJ2ZGF0YShkZXZfZ2V0X2RydmRhdGEoZGV2LT5wYXJlbnQtPnBhcmVudCkpOwogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCBrb25lLT5zZXR0aW5ncy5zdGFydHVwX3Byb2ZpbGUpOwogfQogCiBzdGF0aWMgc3NpemVfdCBrb25lX3N5c2ZzX3NldF9zdGFydHVwX3Byb2ZpbGUoc3RydWN0IGRldmljZSAqZGV2LAogCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciBjb25zdCAqYnVmLCBzaXplX3Qgc2l6ZSkKIHsKLQlzdHJ1Y3Qga29uZV9kZXZpY2UgKmtvbmUgPSBoaWRfZ2V0X2RydmRhdGEoZGV2X2dldF9kcnZkYXRhKGRldikpOwotCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldih0b191c2JfaW50ZXJmYWNlKGRldikpOworCXN0cnVjdCBrb25lX2RldmljZSAqa29uZTsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldjsKIAlpbnQgcmV0dmFsOwogCXVuc2lnbmVkIGxvbmcgbmV3X3N0YXJ0dXBfcHJvZmlsZTsKIAorCWRldiA9IGRldi0+cGFyZW50LT5wYXJlbnQ7CisJa29uZSA9IGhpZF9nZXRfZHJ2ZGF0YShkZXZfZ2V0X2RydmRhdGEoZGV2KSk7CisJdXNiX2RldiA9IGludGVyZmFjZV90b191c2JkZXYodG9fdXNiX2ludGVyZmFjZShkZXYpKTsKKwogCXJldHZhbCA9IHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZuZXdfc3RhcnR1cF9wcm9maWxlKTsKIAlpZiAocmV0dmFsKQogCQlyZXR1cm4gcmV0dmFsOwpAQCAtNjE3LDE2MCArNTgzLDkyIEBACiAJcmV0dXJuIHNpemU7CiB9CiAKLS8qCi0gKiBSZWFkIGFjdHVhbCBkcGkgc2V0dGluZ3MuCi0gKiBSZXR1cm5zIHJhdyB2YWx1ZSBmb3IgZnVydGhlciBwcm9jZXNzaW5nLiBSZWZlciB0byBlbnVtIGtvbmVfcG9sbGluZ19yYXRlcyB0bwotICogZ2V0IHJlYWwgdmFsdWUuCi0gKi8KLXN0YXRpYyBERVZJQ0VfQVRUUihhY3R1YWxfZHBpLCAwNDQwLCBrb25lX3N5c2ZzX3Nob3dfYWN0dWFsX2RwaSwgTlVMTCk7CitzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUga29uZV9hdHRyaWJ1dGVzW10gPSB7CisJLyoKKwkgKiBSZWFkIGFjdHVhbCBkcGkgc2V0dGluZ3MuCisJICogUmV0dXJucyByYXcgdmFsdWUgZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZy4gUmVmZXIgdG8gZW51bQorCSAqIGtvbmVfcG9sbGluZ19yYXRlcyB0byBnZXQgcmVhbCB2YWx1ZS4KKwkgKi8KKwlfX0FUVFIoYWN0dWFsX2RwaSwgMDQ0MCwga29uZV9zeXNmc19zaG93X2FjdHVhbF9kcGksIE5VTEwpLAorCV9fQVRUUihhY3R1YWxfcHJvZmlsZSwgMDQ0MCwga29uZV9zeXNmc19zaG93X2FjdHVhbF9wcm9maWxlLCBOVUxMKSwKIAotc3RhdGljIERFVklDRV9BVFRSKGFjdHVhbF9wcm9maWxlLCAwNDQwLCBrb25lX3N5c2ZzX3Nob3dfYWN0dWFsX3Byb2ZpbGUsIE5VTEwpOworCS8qCisJICogVGhlIG1vdXNlIGNhbiBiZSBlcXVpcHBlZCB3aXRoIG9uZSBvZiBmb3VyIHN1cHBsaWVkIHdlaWdodHMgZnJvbSA1CisJICogdG8gMjAgZ3JhbXMgd2hpY2ggYXJlIHJlY29nbml6ZWQgYW5kIGl0cyB2YWx1ZSBjYW4gYmUgcmVhZCBvdXQuCisJICogVGhpcyByZXR1cm5zIHRoZSByYXcgdmFsdWUgcmVwb3J0ZWQgYnkgdGhlIG1vdXNlIGZvciBlYXN5IGV2YWx1YXRpb24KKwkgKiBieSBzb2Z0d2FyZS4gUmVmZXIgdG8gZW51bSBrb25lX3dlaWdodHMgdG8gZ2V0IGNvcnJlc3BvbmRpbmcgcmVhbAorCSAqIHdlaWdodC4KKwkgKi8KKwlfX0FUVFIod2VpZ2h0LCAwNDQwLCBrb25lX3N5c2ZzX3Nob3dfd2VpZ2h0LCBOVUxMKSwKIAotLyoKLSAqIFRoZSBtb3VzZSBjYW4gYmUgZXF1aXBwZWQgd2l0aCBvbmUgb2YgZm91ciBzdXBwbGllZCB3ZWlnaHRzIGZyb20gNSB0byAyMAotICogZ3JhbXMgd2hpY2ggYXJlIHJlY29nbml6ZWQgYW5kIGl0cyB2YWx1ZSBjYW4gYmUgcmVhZCBvdXQuCi0gKiBUaGlzIHJldHVybnMgdGhlIHJhdyB2YWx1ZSByZXBvcnRlZCBieSB0aGUgbW91c2UgZm9yIGVhc3kgZXZhbHVhdGlvbiBieQotICogc29mdHdhcmUuIFJlZmVyIHRvIGVudW0ga29uZV93ZWlnaHRzIHRvIGdldCBjb3JyZXNwb25kaW5nIHJlYWwgd2VpZ2h0LgotICovCi1zdGF0aWMgREVWSUNFX0FUVFIod2VpZ2h0LCAwNDQwLCBrb25lX3N5c2ZzX3Nob3dfd2VpZ2h0LCBOVUxMKTsKKwkvKgorCSAqIFByaW50cyBmaXJtd2FyZSB2ZXJzaW9uIHN0b3JlZCBpbiBtb3VzZSBhcyBpbnRlZ2VyLgorCSAqIFRoZSByYXcgdmFsdWUgcmVwb3J0ZWQgYnkgdGhlIG1vdXNlIGlzIHJldHVybmVkIGZvciBlYXN5IGV2YWx1YXRpb24sCisJICogdG8gZ2V0IHRoZSByZWFsIHZlcnNpb24gbnVtYmVyIHRoZSBkZWNpbWFsIHBvaW50IGhhcyB0byBiZSBzaGlmdGVkIDIKKwkgKiBwb3NpdGlvbnMgdG8gdGhlIGxlZnQuIEUuZy4gYSB2YWx1ZSBvZiAxMzggbWVhbnMgMS4zOC4KKwkgKi8KKwlfX0FUVFIoZmlybXdhcmVfdmVyc2lvbiwgMDQ0MCwKKwkJCWtvbmVfc3lzZnNfc2hvd19maXJtd2FyZV92ZXJzaW9uLCBOVUxMKSwKIAotLyoKLSAqIFByaW50cyBmaXJtd2FyZSB2ZXJzaW9uIHN0b3JlZCBpbiBtb3VzZSBhcyBpbnRlZ2VyLgotICogVGhlIHJhdyB2YWx1ZSByZXBvcnRlZCBieSB0aGUgbW91c2UgaXMgcmV0dXJuZWQgZm9yIGVhc3kgZXZhbHVhdGlvbiwgdG8gZ2V0Ci0gKiB0aGUgcmVhbCB2ZXJzaW9uIG51bWJlciB0aGUgZGVjaW1hbCBwb2ludCBoYXMgdG8gYmUgc2hpZnRlZCAyIHBvc2l0aW9ucyB0bwotICogdGhlIGxlZnQuIEUuZy4gYSB2YWx1ZSBvZiAxMzggbWVhbnMgMS4zOC4KLSAqLwotc3RhdGljIERFVklDRV9BVFRSKGZpcm13YXJlX3ZlcnNpb24sIDA0NDAsCi0JCWtvbmVfc3lzZnNfc2hvd19maXJtd2FyZV92ZXJzaW9uLCBOVUxMKTsKKwkvKgorCSAqIFByaW50cyBzdGF0ZSBvZiBUcmFja2luZyBDb250cm9sIFVuaXQgYXMgbnVtYmVyIHdoZXJlIDAgPSBvZmYgYW5kCisJICogMSA9IG9uLiBXcml0aW5nIDAgZGVhY3RpdmF0ZXMgdGN1IGFuZCB3cml0aW5nIDEgY2FsaWJyYXRlcyBhbmQKKwkgKiBhY3RpdmF0ZXMgdGhlIHRjdQorCSAqLworCV9fQVRUUih0Y3UsIDA2NjAsIGtvbmVfc3lzZnNfc2hvd190Y3UsIGtvbmVfc3lzZnNfc2V0X3RjdSksCiAKLS8qCi0gKiBQcmludHMgc3RhdGUgb2YgVHJhY2tpbmcgQ29udHJvbCBVbml0IGFzIG51bWJlciB3aGVyZSAwID0gb2ZmIGFuZCAxID0gb24KLSAqIFdyaXRpbmcgMCBkZWFjdGl2YXRlcyB0Y3UgYW5kIHdyaXRpbmcgMSBjYWxpYnJhdGVzIGFuZCBhY3RpdmF0ZXMgdGhlIHRjdQotICovCi1zdGF0aWMgREVWSUNFX0FUVFIodGN1LCAwNjYwLCBrb25lX3N5c2ZzX3Nob3dfdGN1LCBrb25lX3N5c2ZzX3NldF90Y3UpOwotCi0vKiBQcmludHMgYW5kIHRha2VzIHRoZSBudW1iZXIgb2YgdGhlIHByb2ZpbGUgdGhlIG1vdXNlIHN0YXJ0cyB3aXRoICovCi1zdGF0aWMgREVWSUNFX0FUVFIoc3RhcnR1cF9wcm9maWxlLCAwNjYwLAotCQlrb25lX3N5c2ZzX3Nob3dfc3RhcnR1cF9wcm9maWxlLAotCQlrb25lX3N5c2ZzX3NldF9zdGFydHVwX3Byb2ZpbGUpOwotCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqa29uZV9hdHRyaWJ1dGVzW10gPSB7Ci0JCSZkZXZfYXR0cl9hY3R1YWxfZHBpLmF0dHIsCi0JCSZkZXZfYXR0cl9hY3R1YWxfcHJvZmlsZS5hdHRyLAotCQkmZGV2X2F0dHJfd2VpZ2h0LmF0dHIsCi0JCSZkZXZfYXR0cl9maXJtd2FyZV92ZXJzaW9uLmF0dHIsCi0JCSZkZXZfYXR0cl90Y3UuYXR0ciwKLQkJJmRldl9hdHRyX3N0YXJ0dXBfcHJvZmlsZS5hdHRyLAotCQlOVUxMCisJLyogUHJpbnRzIGFuZCB0YWtlcyB0aGUgbnVtYmVyIG9mIHRoZSBwcm9maWxlIHRoZSBtb3VzZSBzdGFydHMgd2l0aCAqLworCV9fQVRUUihzdGFydHVwX3Byb2ZpbGUsIDA2NjAsCisJCQlrb25lX3N5c2ZzX3Nob3dfc3RhcnR1cF9wcm9maWxlLAorCQkJa29uZV9zeXNmc19zZXRfc3RhcnR1cF9wcm9maWxlKSwKKwlfX0FUVFJfTlVMTAogfTsKIAotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAga29uZV9hdHRyaWJ1dGVfZ3JvdXAgPSB7Ci0JCS5hdHRycyA9IGtvbmVfYXR0cmlidXRlcworc3RhdGljIHN0cnVjdCBiaW5fYXR0cmlidXRlIGtvbmVfYmluX2F0dHJpYnV0ZXNbXSA9IHsKKwl7CisJCS5hdHRyID0geyAubmFtZSA9ICJzZXR0aW5ncyIsIC5tb2RlID0gMDY2MCB9LAorCQkuc2l6ZSA9IHNpemVvZihzdHJ1Y3Qga29uZV9zZXR0aW5ncyksCisJCS5yZWFkID0ga29uZV9zeXNmc19yZWFkX3NldHRpbmdzLAorCQkud3JpdGUgPSBrb25lX3N5c2ZzX3dyaXRlX3NldHRpbmdzCisJfSwKKwl7CisJCS5hdHRyID0geyAubmFtZSA9ICJwcm9maWxlMSIsIC5tb2RlID0gMDY2MCB9LAorCQkuc2l6ZSA9IHNpemVvZihzdHJ1Y3Qga29uZV9wcm9maWxlKSwKKwkJLnJlYWQgPSBrb25lX3N5c2ZzX3JlYWRfcHJvZmlsZXgsCisJCS53cml0ZSA9IGtvbmVfc3lzZnNfd3JpdGVfcHJvZmlsZXgsCisJCS5wcml2YXRlID0gJnByb2ZpbGVfbnVtYmVyc1swXQorCX0sCisJeworCQkuYXR0ciA9IHsgLm5hbWUgPSAicHJvZmlsZTIiLCAubW9kZSA9IDA2NjAgfSwKKwkJLnNpemUgPSBzaXplb2Yoc3RydWN0IGtvbmVfcHJvZmlsZSksCisJCS5yZWFkID0ga29uZV9zeXNmc19yZWFkX3Byb2ZpbGV4LAorCQkud3JpdGUgPSBrb25lX3N5c2ZzX3dyaXRlX3Byb2ZpbGV4LAorCQkucHJpdmF0ZSA9ICZwcm9maWxlX251bWJlcnNbMV0KKwl9LAorCXsKKwkJLmF0dHIgPSB7IC5uYW1lID0gInByb2ZpbGUzIiwgLm1vZGUgPSAwNjYwIH0sCisJCS5zaXplID0gc2l6ZW9mKHN0cnVjdCBrb25lX3Byb2ZpbGUpLAorCQkucmVhZCA9IGtvbmVfc3lzZnNfcmVhZF9wcm9maWxleCwKKwkJLndyaXRlID0ga29uZV9zeXNmc193cml0ZV9wcm9maWxleCwKKwkJLnByaXZhdGUgPSAmcHJvZmlsZV9udW1iZXJzWzJdCisJfSwKKwl7CisJCS5hdHRyID0geyAubmFtZSA9ICJwcm9maWxlNCIsIC5tb2RlID0gMDY2MCB9LAorCQkuc2l6ZSA9IHNpemVvZihzdHJ1Y3Qga29uZV9wcm9maWxlKSwKKwkJLnJlYWQgPSBrb25lX3N5c2ZzX3JlYWRfcHJvZmlsZXgsCisJCS53cml0ZSA9IGtvbmVfc3lzZnNfd3JpdGVfcHJvZmlsZXgsCisJCS5wcml2YXRlID0gJnByb2ZpbGVfbnVtYmVyc1szXQorCX0sCisJeworCQkuYXR0ciA9IHsgLm5hbWUgPSAicHJvZmlsZTUiLCAubW9kZSA9IDA2NjAgfSwKKwkJLnNpemUgPSBzaXplb2Yoc3RydWN0IGtvbmVfcHJvZmlsZSksCisJCS5yZWFkID0ga29uZV9zeXNmc19yZWFkX3Byb2ZpbGV4LAorCQkud3JpdGUgPSBrb25lX3N5c2ZzX3dyaXRlX3Byb2ZpbGV4LAorCQkucHJpdmF0ZSA9ICZwcm9maWxlX251bWJlcnNbNF0KKwl9LAorCV9fQVRUUl9OVUxMCiB9OwogCi1zdGF0aWMgc3RydWN0IGJpbl9hdHRyaWJ1dGUga29uZV9zZXR0aW5nc19hdHRyID0gewotCS5hdHRyID0geyAubmFtZSA9ICJzZXR0aW5ncyIsIC5tb2RlID0gMDY2MCB9LAotCS5zaXplID0gc2l6ZW9mKHN0cnVjdCBrb25lX3NldHRpbmdzKSwKLQkucmVhZCA9IGtvbmVfc3lzZnNfcmVhZF9zZXR0aW5ncywKLQkud3JpdGUgPSBrb25lX3N5c2ZzX3dyaXRlX3NldHRpbmdzCi19OwotCi1zdGF0aWMgc3RydWN0IGJpbl9hdHRyaWJ1dGUga29uZV9wcm9maWxlMV9hdHRyID0gewotCS5hdHRyID0geyAubmFtZSA9ICJwcm9maWxlMSIsIC5tb2RlID0gMDY2MCB9LAotCS5zaXplID0gc2l6ZW9mKHN0cnVjdCBrb25lX3Byb2ZpbGUpLAotCS5yZWFkID0ga29uZV9zeXNmc19yZWFkX3Byb2ZpbGUxLAotCS53cml0ZSA9IGtvbmVfc3lzZnNfd3JpdGVfcHJvZmlsZTEKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSBrb25lX3Byb2ZpbGUyX2F0dHIgPSB7Ci0JLmF0dHIgPSB7IC5uYW1lID0gInByb2ZpbGUyIiwgLm1vZGUgPSAwNjYwIH0sCi0JLnNpemUgPSBzaXplb2Yoc3RydWN0IGtvbmVfcHJvZmlsZSksCi0JLnJlYWQgPSBrb25lX3N5c2ZzX3JlYWRfcHJvZmlsZTIsCi0JLndyaXRlID0ga29uZV9zeXNmc193cml0ZV9wcm9maWxlMgotfTsKLQotc3RhdGljIHN0cnVjdCBiaW5fYXR0cmlidXRlIGtvbmVfcHJvZmlsZTNfYXR0ciA9IHsKLQkuYXR0ciA9IHsgLm5hbWUgPSAicHJvZmlsZTMiLCAubW9kZSA9IDA2NjAgfSwKLQkuc2l6ZSA9IHNpemVvZihzdHJ1Y3Qga29uZV9wcm9maWxlKSwKLQkucmVhZCA9IGtvbmVfc3lzZnNfcmVhZF9wcm9maWxlMywKLQkud3JpdGUgPSBrb25lX3N5c2ZzX3dyaXRlX3Byb2ZpbGUzCi19OwotCi1zdGF0aWMgc3RydWN0IGJpbl9hdHRyaWJ1dGUga29uZV9wcm9maWxlNF9hdHRyID0gewotCS5hdHRyID0geyAubmFtZSA9ICJwcm9maWxlNCIsIC5tb2RlID0gMDY2MCB9LAotCS5zaXplID0gc2l6ZW9mKHN0cnVjdCBrb25lX3Byb2ZpbGUpLAotCS5yZWFkID0ga29uZV9zeXNmc19yZWFkX3Byb2ZpbGU0LAotCS53cml0ZSA9IGtvbmVfc3lzZnNfd3JpdGVfcHJvZmlsZTQKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSBrb25lX3Byb2ZpbGU1X2F0dHIgPSB7Ci0JLmF0dHIgPSB7IC5uYW1lID0gInByb2ZpbGU1IiwgLm1vZGUgPSAwNjYwIH0sCi0JLnNpemUgPSBzaXplb2Yoc3RydWN0IGtvbmVfcHJvZmlsZSksCi0JLnJlYWQgPSBrb25lX3N5c2ZzX3JlYWRfcHJvZmlsZTUsCi0JLndyaXRlID0ga29uZV9zeXNmc193cml0ZV9wcm9maWxlNQotfTsKLQotc3RhdGljIGludCBrb25lX2NyZWF0ZV9zeXNmc19hdHRyaWJ1dGVzKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQotewotCWludCByZXR2YWw7Ci0KLQlyZXR2YWwgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmludGYtPmRldi5rb2JqLCAma29uZV9hdHRyaWJ1dGVfZ3JvdXApOwotCWlmIChyZXR2YWwpCi0JCWdvdG8gZXhpdF8xOwotCi0JcmV0dmFsID0gc3lzZnNfY3JlYXRlX2Jpbl9maWxlKCZpbnRmLT5kZXYua29iaiwgJmtvbmVfc2V0dGluZ3NfYXR0cik7Ci0JaWYgKHJldHZhbCkKLQkJZ290byBleGl0XzI7Ci0KLQlyZXR2YWwgPSBzeXNmc19jcmVhdGVfYmluX2ZpbGUoJmludGYtPmRldi5rb2JqLCAma29uZV9wcm9maWxlMV9hdHRyKTsKLQlpZiAocmV0dmFsKQotCQlnb3RvIGV4aXRfMzsKLQotCXJldHZhbCA9IHN5c2ZzX2NyZWF0ZV9iaW5fZmlsZSgmaW50Zi0+ZGV2LmtvYmosICZrb25lX3Byb2ZpbGUyX2F0dHIpOwotCWlmIChyZXR2YWwpCi0JCWdvdG8gZXhpdF80OwotCi0JcmV0dmFsID0gc3lzZnNfY3JlYXRlX2Jpbl9maWxlKCZpbnRmLT5kZXYua29iaiwgJmtvbmVfcHJvZmlsZTNfYXR0cik7Ci0JaWYgKHJldHZhbCkKLQkJZ290byBleGl0XzU7Ci0KLQlyZXR2YWwgPSBzeXNmc19jcmVhdGVfYmluX2ZpbGUoJmludGYtPmRldi5rb2JqLCAma29uZV9wcm9maWxlNF9hdHRyKTsKLQlpZiAocmV0dmFsKQotCQlnb3RvIGV4aXRfNjsKLQotCXJldHZhbCA9IHN5c2ZzX2NyZWF0ZV9iaW5fZmlsZSgmaW50Zi0+ZGV2LmtvYmosICZrb25lX3Byb2ZpbGU1X2F0dHIpOwotCWlmIChyZXR2YWwpCi0JCWdvdG8gZXhpdF83OwotCi0JcmV0dXJuIDA7Ci0KLWV4aXRfNzoKLQlzeXNmc19yZW1vdmVfYmluX2ZpbGUoJmludGYtPmRldi5rb2JqLCAma29uZV9wcm9maWxlNF9hdHRyKTsKLWV4aXRfNjoKLQlzeXNmc19yZW1vdmVfYmluX2ZpbGUoJmludGYtPmRldi5rb2JqLCAma29uZV9wcm9maWxlM19hdHRyKTsKLWV4aXRfNToKLQlzeXNmc19yZW1vdmVfYmluX2ZpbGUoJmludGYtPmRldi5rb2JqLCAma29uZV9wcm9maWxlMl9hdHRyKTsKLWV4aXRfNDoKLQlzeXNmc19yZW1vdmVfYmluX2ZpbGUoJmludGYtPmRldi5rb2JqLCAma29uZV9wcm9maWxlMV9hdHRyKTsKLWV4aXRfMzoKLQlzeXNmc19yZW1vdmVfYmluX2ZpbGUoJmludGYtPmRldi5rb2JqLCAma29uZV9zZXR0aW5nc19hdHRyKTsKLWV4aXRfMjoKLQlzeXNmc19yZW1vdmVfZ3JvdXAoJmludGYtPmRldi5rb2JqLCAma29uZV9hdHRyaWJ1dGVfZ3JvdXApOwotZXhpdF8xOgotCXJldHVybiByZXR2YWw7Ci19Ci0KLXN0YXRpYyB2b2lkIGtvbmVfcmVtb3ZlX3N5c2ZzX2F0dHJpYnV0ZXMoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCi17Ci0Jc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKCZpbnRmLT5kZXYua29iaiwgJmtvbmVfcHJvZmlsZTVfYXR0cik7Ci0Jc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKCZpbnRmLT5kZXYua29iaiwgJmtvbmVfcHJvZmlsZTRfYXR0cik7Ci0Jc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKCZpbnRmLT5kZXYua29iaiwgJmtvbmVfcHJvZmlsZTNfYXR0cik7Ci0Jc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKCZpbnRmLT5kZXYua29iaiwgJmtvbmVfcHJvZmlsZTJfYXR0cik7Ci0Jc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKCZpbnRmLT5kZXYua29iaiwgJmtvbmVfcHJvZmlsZTFfYXR0cik7Ci0Jc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKCZpbnRmLT5kZXYua29iaiwgJmtvbmVfc2V0dGluZ3NfYXR0cik7Ci0Jc3lzZnNfcmVtb3ZlX2dyb3VwKCZpbnRmLT5kZXYua29iaiwgJmtvbmVfYXR0cmlidXRlX2dyb3VwKTsKLX0KLQogc3RhdGljIGludCBrb25lX2luaXRfa29uZV9kZXZpY2Vfc3RydWN0KHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2LAogCQlzdHJ1Y3Qga29uZV9kZXZpY2UgKmtvbmUpCiB7CkBAIC04MTgsMzIgKzcxNiwyNSBAQAogCiAJCWtvbmUgPSBremFsbG9jKHNpemVvZigqa29uZSksIEdGUF9LRVJORUwpOwogCQlpZiAoIWtvbmUpIHsKLQkJCWRldl9lcnIoJmhkZXYtPmRldiwgImNhbid0IGFsbG9jIGRldmljZSBkZXNjcmlwdG9yXG4iKTsKKwkJCWhpZF9lcnIoaGRldiwgImNhbid0IGFsbG9jIGRldmljZSBkZXNjcmlwdG9yXG4iKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAJCWhpZF9zZXRfZHJ2ZGF0YShoZGV2LCBrb25lKTsKIAogCQlyZXR2YWwgPSBrb25lX2luaXRfa29uZV9kZXZpY2Vfc3RydWN0KHVzYl9kZXYsIGtvbmUpOwogCQlpZiAocmV0dmFsKSB7Ci0JCQlkZXZfZXJyKCZoZGV2LT5kZXYsCi0JCQkJCSJjb3VsZG4ndCBpbml0IHN0cnVjdCBrb25lX2RldmljZVxuIik7CisJCQloaWRfZXJyKGhkZXYsICJjb3VsZG4ndCBpbml0IHN0cnVjdCBrb25lX2RldmljZVxuIik7CiAJCQlnb3RvIGV4aXRfZnJlZTsKIAkJfQogCi0JCXJldHZhbCA9IHJvY2NhdF9jb25uZWN0KGhkZXYpOworCQlyZXR2YWwgPSByb2NjYXRfY29ubmVjdChrb25lX2NsYXNzLCBoZGV2KTsKIAkJaWYgKHJldHZhbCA8IDApIHsKLQkJCWRldl9lcnIoJmhkZXYtPmRldiwgImNvdWxkbid0IGluaXQgY2hhciBkZXZcbiIpOworCQkJaGlkX2VycihoZGV2LCAiY291bGRuJ3QgaW5pdCBjaGFyIGRldlxuIik7CiAJCQkvKiBiZSB0b2xlcmFudCBhYm91dCBub3QgZ2V0dGluZyBjaHJkZXYgKi8KIAkJfSBlbHNlIHsKIAkJCWtvbmUtPnJvY2NhdF9jbGFpbWVkID0gMTsKIAkJCWtvbmUtPmNocmRldl9taW5vciA9IHJldHZhbDsKIAkJfQotCi0JCXJldHZhbCA9IGtvbmVfY3JlYXRlX3N5c2ZzX2F0dHJpYnV0ZXMoaW50Zik7Ci0JCWlmIChyZXR2YWwpIHsKLQkJCWRldl9lcnIoJmhkZXYtPmRldiwgImNhbm5vdCBjcmVhdGUgc3lzZnMgZmlsZXNcbiIpOwotCQkJZ290byBleGl0X2ZyZWU7Ci0JCX0KIAl9IGVsc2UgewogCQloaWRfc2V0X2RydmRhdGEoaGRldiwgTlVMTCk7CiAJfQpAQCAtODU0LDcgKzc0NSw2IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAotCiBzdGF0aWMgdm9pZCBrb25lX3JlbW92ZV9zcGVjaWFscyhzdHJ1Y3QgaGlkX2RldmljZSAqaGRldikKIHsKIAlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoaGRldi0+ZGV2LnBhcmVudCk7CkBAIC04NjIsNyArNzUyLDYgQEAKIAogCWlmIChpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlUHJvdG9jb2wKIAkJCT09IFVTQl9JTlRFUkZBQ0VfUFJPVE9DT0xfTU9VU0UpIHsKLQkJa29uZV9yZW1vdmVfc3lzZnNfYXR0cmlidXRlcyhpbnRmKTsKIAkJa29uZSA9IGhpZF9nZXRfZHJ2ZGF0YShoZGV2KTsKIAkJaWYgKGtvbmUtPnJvY2NhdF9jbGFpbWVkKQogCQkJcm9jY2F0X2Rpc2Nvbm5lY3Qoa29uZS0+Y2hyZGV2X21pbm9yKTsKQEAgLTg3NiwxOSArNzY1LDE5IEBACiAKIAlyZXR2YWwgPSBoaWRfcGFyc2UoaGRldik7CiAJaWYgKHJldHZhbCkgewotCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJwYXJzZSBmYWlsZWRcbiIpOworCQloaWRfZXJyKGhkZXYsICJwYXJzZSBmYWlsZWRcbiIpOwogCQlnb3RvIGV4aXQ7CiAJfQogCiAJcmV0dmFsID0gaGlkX2h3X3N0YXJ0KGhkZXYsIEhJRF9DT05ORUNUX0RFRkFVTFQpOwogCWlmIChyZXR2YWwpIHsKLQkJZGV2X2VycigmaGRldi0+ZGV2LCAiaHcgc3RhcnQgZmFpbGVkXG4iKTsKKwkJaGlkX2VycihoZGV2LCAiaHcgc3RhcnQgZmFpbGVkXG4iKTsKIAkJZ290byBleGl0OwogCX0KIAogCXJldHZhbCA9IGtvbmVfaW5pdF9zcGVjaWFscyhoZGV2KTsKIAlpZiAocmV0dmFsKSB7Ci0JCWRldl9lcnIoJmhkZXYtPmRldiwgImNvdWxkbid0IGluc3RhbGwgbW91c2VcbiIpOworCQloaWRfZXJyKGhkZXYsICJjb3VsZG4ndCBpbnN0YWxsIG1vdXNlXG4iKTsKIAkJZ290byBleGl0X3N0b3A7CiAJfQogCkBAIC0xMDA2LDExICs4OTUsMjQgQEAKIAogc3RhdGljIGludCBfX2luaXQga29uZV9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIGhpZF9yZWdpc3Rlcl9kcml2ZXIoJmtvbmVfZHJpdmVyKTsKKwlpbnQgcmV0dmFsOworCisJLyogY2xhc3MgbmFtZSBoYXMgdG8gYmUgc2FtZSBhcyBkcml2ZXIgbmFtZSAqLworCWtvbmVfY2xhc3MgPSBjbGFzc19jcmVhdGUoVEhJU19NT0RVTEUsICJrb25lIik7CisJaWYgKElTX0VSUihrb25lX2NsYXNzKSkKKwkJcmV0dXJuIFBUUl9FUlIoa29uZV9jbGFzcyk7CisJa29uZV9jbGFzcy0+ZGV2X2F0dHJzID0ga29uZV9hdHRyaWJ1dGVzOworCWtvbmVfY2xhc3MtPmRldl9iaW5fYXR0cnMgPSBrb25lX2Jpbl9hdHRyaWJ1dGVzOworCisJcmV0dmFsID0gaGlkX3JlZ2lzdGVyX2RyaXZlcigma29uZV9kcml2ZXIpOworCWlmIChyZXR2YWwpCisJCWNsYXNzX2Rlc3Ryb3koa29uZV9jbGFzcyk7CisJcmV0dXJuIHJldHZhbDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGtvbmVfZXhpdCh2b2lkKQogeworCWNsYXNzX2Rlc3Ryb3koa29uZV9jbGFzcyk7CiAJaGlkX3VucmVnaXN0ZXJfZHJpdmVyKCZrb25lX2RyaXZlcik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5oIGIvZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmgKaW5kZXggMTMwZDY1Ni4uNjRhYmI1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmgKKysrIGIvZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmgKQEAgLTE0LDE0ICsxNCwxMSBAQAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAotI3ByYWdtYSBwYWNrKHB1c2gpCi0jcHJhZ21hIHBhY2soMSkKLQogc3RydWN0IGtvbmVfa2V5c3Ryb2tlIHsKIAl1aW50OF90IGtleTsKIAl1aW50OF90IGFjdGlvbjsKIAl1aW50MTZfdCBwZXJpb2Q7IC8qIGluIG1pbGxpc2Vjb25kcyAqLwotfTsKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKIAogZW51bSBrb25lX2tleXN0cm9rZV9idXR0b25zIHsKIAlrb25lX2tleXN0cm9rZV9idXR0b25fMSA9IDB4ZjAsIC8qIGxlZnQgbW91c2UgYnV0dG9uICovCkBAIC00NCw3ICs0MSw3IEBACiAJdWludDhfdCBtYWNyb19uYW1lWzE2XTsgLyogY2FuIGJlIG1heCAxNSBjaGFycyBsb25nICovCiAJdWludDhfdCBjb3VudDsKIAlzdHJ1Y3Qga29uZV9rZXlzdHJva2Uga2V5c3Ryb2tlc1syMF07Ci19OworfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOwogCiBlbnVtIGtvbmVfYnV0dG9uX2luZm9fdHlwZXMgewogCS8qIHZhbGlkIGJ1dHRvbiB0eXBlcyB1bnRpbCBmaXJtd2FyZSAxLjMyICovCkBAIC05NSw3ICs5Miw3IEBACiAJdWludDhfdCByZWQ7ICAgLyogcmFuZ2UgMHgwMC0weGZmICovCiAJdWludDhfdCBncmVlbjsgLyogcmFuZ2UgMHgwMC0weGZmICovCiAJdWludDhfdCBibHVlOyAgLyogcmFuZ2UgMHgwMC0weGZmICovCi19OworfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOwogCiBzdHJ1Y3Qga29uZV9wcm9maWxlIHsKIAl1aW50MTZfdCBzaXplOyAvKiBhbHdheXMgOTc1ICovCkBAIC0xMzAsNyArMTI3LDcgQEAKIAlzdHJ1Y3Qga29uZV9idXR0b25faW5mbyBidXR0b25faW5mb3NbOF07CiAKIAl1aW50MTZfdCBjaGVja3N1bTsgLyogXGJyaWVmIGhvbGRzIGNoZWNrc3VtIG9mIHN0cnVjdCAqLwotfTsKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKIAogZW51bSBrb25lX3BvbGxpbmdfcmF0ZXMgewogCWtvbmVfcG9sbGluZ19yYXRlXzEyNSA9IDEsCkBAIC0xNDcsNyArMTQ0LDcgQEAKIAl1aW50OF90ICBjYWxpYnJhdGlvbl9kYXRhWzRdOwogCXVpbnQ4X3QgIHVua25vd24zWzJdOwogCXVpbnQxNl90IGNoZWNrc3VtOwotfTsKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKIAogLyoKICAqIDEyIGJ5dGUgbW91c2UgZXZlbnQgcmVhZCBieSBpbnRlcnJ1cHRfcmVhZApAQCAtMTYzLDcgKzE2MCw3IEBACiAJdWludDhfdCBldmVudDsKIAl1aW50OF90IHZhbHVlOyAvKiBwcmVzcyA9IDAsIHJlbGVhc2UgPSAxICovCiAJdWludDhfdCBtYWNyb19rZXk7IC8qIDAgdG8gOCAqLwotfTsKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKIAogZW51bSBrb25lX21vdXNlX2V2ZW50cyB7CiAJLyogb3NkIGV2ZW50cyBhcmUgdGhvdWdodCB0byBiZSBkaXNwbGF5IG9uIHNjcmVlbiAqLwpAQCAtMTkxLDkgKzE4OCw3IEBACiAJdWludDhfdCBldmVudDsKIAl1aW50OF90IHZhbHVlOyAvKiBob2xkcyBkcGkgb3IgcHJvZmlsZSB2YWx1ZSAqLwogCXVpbnQ4X3Qga2V5OyAvKiBtYWNybyBrZXkgb24gb3ZlcmxvbmcgbWFjcm8gZXhlY3V0aW9uICovCi19OwotCi0jcHJhZ21hIHBhY2socG9wKQorfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOwogCiBzdHJ1Y3Qga29uZV9kZXZpY2UgewogCS8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmVwbHVzLmMgYi9kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmVwbHVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYwOGM4ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZXBsdXMuYwpAQCAtMCwwICsxLDgzNyBAQAorLyoKKyAqIFJvY2NhdCBLb25lWytdIGRyaXZlciBmb3IgTGludXgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgU3RlZmFuIEFjaGF0eiA8ZXJhem9yX2RlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisvKgorICogUm9jY2F0IEtvbmVbK10gaXMgYW4gdXBkYXRlZC9pbXByb3ZlZCB2ZXJzaW9uIG9mIHRoZSBLb25lIHdpdGggbW9yZSBtZW1vcnkKKyAqIGFuZCBmdW5jdGlvbmFsaXR5IGFuZCB3aXRob3V0IHRoZSBub24tc3RhbmRhcmQgYmVoYXZpb3VycyB0aGUgS29uZSBoYWQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvaGlkLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgImhpZC1pZHMuaCIKKyNpbmNsdWRlICJoaWQtcm9jY2F0LmgiCisjaW5jbHVkZSAiaGlkLXJvY2NhdC1rb25lcGx1cy5oIgorCitzdGF0aWMgdWludCBwcm9maWxlX251bWJlcnNbNV0gPSB7MCwgMSwgMiwgMywgNH07CisKK3N0YXRpYyBzdHJ1Y3QgY2xhc3MgKmtvbmVwbHVzX2NsYXNzOworCitzdGF0aWMgdm9pZCBrb25lcGx1c19wcm9maWxlX2FjdGl2YXRlZChzdHJ1Y3Qga29uZXBsdXNfZGV2aWNlICprb25lcGx1cywKKwkJdWludCBuZXdfcHJvZmlsZSkKK3sKKwlrb25lcGx1cy0+YWN0dWFsX3Byb2ZpbGUgPSBuZXdfcHJvZmlsZTsKK30KKworc3RhdGljIGludCBrb25lcGx1c19zZW5kX2NvbnRyb2woc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYsIHVpbnQgdmFsdWUsCisJCWVudW0ga29uZXBsdXNfY29udHJvbF9yZXF1ZXN0cyByZXF1ZXN0KQoreworCWludCBsZW47CisJc3RydWN0IGtvbmVwbHVzX2NvbnRyb2wgKmNvbnRyb2w7CisKKwlpZiAoKHJlcXVlc3QgPT0gS09ORVBMVVNfQ09OVFJPTF9SRVFVRVNUX1BST0ZJTEVfU0VUVElOR1MgfHwKKwkJCXJlcXVlc3QgPT0gS09ORVBMVVNfQ09OVFJPTF9SRVFVRVNUX1BST0ZJTEVfQlVUVE9OUykgJiYKKwkJCXZhbHVlID4gNCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljb250cm9sID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGtvbmVwbHVzX2NvbnRyb2wpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNvbnRyb2wpCisJCXJldHVybiAtRU5PTUVNOworCisJY29udHJvbC0+Y29tbWFuZCA9IEtPTkVQTFVTX0NPTU1BTkRfQ09OVFJPTDsKKwljb250cm9sLT52YWx1ZSA9IHZhbHVlOworCWNvbnRyb2wtPnJlcXVlc3QgPSByZXF1ZXN0OworCisJbGVuID0gdXNiX2NvbnRyb2xfbXNnKHVzYl9kZXYsIHVzYl9zbmRjdHJscGlwZSh1c2JfZGV2LCAwKSwKKwkJCVVTQl9SRVFfU0VUX0NPTkZJR1VSQVRJT04sCisJCQlVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfRElSX09VVCwKKwkJCUtPTkVQTFVTX1VTQl9DT01NQU5EX0NPTlRST0wsIDAsIGNvbnRyb2wsCisJCQlzaXplb2Yoc3RydWN0IGtvbmVwbHVzX2NvbnRyb2wpLAorCQkJVVNCX0NUUkxfU0VUX1RJTUVPVVQpOworCisJa2ZyZWUoY29udHJvbCk7CisKKwlpZiAobGVuICE9IHNpemVvZihzdHJ1Y3Qga29uZXBsdXNfY29udHJvbCkpCisJCXJldHVybiBsZW47CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBrb25lcGx1c19yZWNlaXZlKHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2LCB1aW50IHVzYl9jb21tYW5kLAorCQl2b2lkICpidWYsIHVpbnQgc2l6ZSkgeworCWludCBsZW47CisKKwlsZW4gPSB1c2JfY29udHJvbF9tc2codXNiX2RldiwgdXNiX3JjdmN0cmxwaXBlKHVzYl9kZXYsIDApLAorCQkJVVNCX1JFUV9DTEVBUl9GRUFUVVJFLAorCQkJVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfSU5URVJGQUNFIHwgVVNCX0RJUl9JTiwKKwkJCXVzYl9jb21tYW5kLCAwLCBidWYsIHNpemUsIFVTQl9DVFJMX1NFVF9USU1FT1VUKTsKKworCXJldHVybiAobGVuICE9IHNpemUpID8gLUVJTyA6IDA7Cit9CisKK3N0YXRpYyBpbnQga29uZXBsdXNfcmVjZWl2ZV9jb250cm9sX3N0YXR1cyhzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldikKK3sKKwlpbnQgcmV0dmFsOworCXN0cnVjdCBrb25lcGx1c19jb250cm9sICpjb250cm9sOworCisJY29udHJvbCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBrb25lcGx1c19jb250cm9sKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjb250cm9sKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRvIHsKKwkJcmV0dmFsID0ga29uZXBsdXNfcmVjZWl2ZSh1c2JfZGV2LCBLT05FUExVU19VU0JfQ09NTUFORF9DT05UUk9MLAorCQkJCWNvbnRyb2wsIHNpemVvZihzdHJ1Y3Qga29uZXBsdXNfY29udHJvbCkpOworCisJCS8qIGNoZWNrIGlmIHdlIGdldCBhIGNvbXBsZXRlbHkgd3JvbmcgYW5zd2VyICovCisJCWlmIChyZXR2YWwpCisJCQlnb3RvIG91dDsKKworCQlpZiAoY29udHJvbC0+dmFsdWUgPT0gS09ORVBMVVNfQ09OVFJPTF9SRVFVRVNUX1NUQVRVU19PSykgeworCQkJcmV0dmFsID0gMDsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJLyogaW5kaWNhdGVzIHRoYXQgaGFyZHdhcmUgbmVlZHMgc29tZSBtb3JlIHRpbWUgdG8gY29tcGxldGUgYWN0aW9uICovCisJCWlmIChjb250cm9sLT52YWx1ZSA9PSBLT05FUExVU19DT05UUk9MX1JFUVVFU1RfU1RBVFVTX1dBSVQpIHsKKwkJCW1zbGVlcCg1MDApOyAvKiB3aW5kb3dzIGRyaXZlciB1c2VzIDEwMDAgKi8KKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogc2VlbXMgdG8gYmUgY3JpdGljYWwgLSByZXBsdWcgbmVjZXNzYXJ5ICovCisJCWlmIChjb250cm9sLT52YWx1ZSA9PSBLT05FUExVU19DT05UUk9MX1JFUVVFU1RfU1RBVFVTX09WRVJMT0FEKSB7CisJCQlyZXR2YWwgPSAtRUlOVkFMOworCQkJZ290byBvdXQ7CisJCX0KKworCQlkZXZfZXJyKCZ1c2JfZGV2LT5kZXYsICJrb25lcGx1c19yZWNlaXZlX2NvbnRyb2xfc3RhdHVzOiAiCisJCQkJInVua25vd24gcmVzcG9uc2UgdmFsdWUgMHgleFxuIiwgY29udHJvbC0+dmFsdWUpOworCQlyZXR2YWwgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKworCX0gd2hpbGUgKDEpOworb3V0OgorCWtmcmVlKGNvbnRyb2wpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQga29uZXBsdXNfc2VuZChzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiwgdWludCBjb21tYW5kLAorCQl2b2lkICpidWYsIHVpbnQgc2l6ZSkgeworCWludCBsZW47CisKKwlsZW4gPSB1c2JfY29udHJvbF9tc2codXNiX2RldiwgdXNiX3NuZGN0cmxwaXBlKHVzYl9kZXYsIDApLAorCQkJVVNCX1JFUV9TRVRfQ09ORklHVVJBVElPTiwKKwkJCVVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9ESVJfT1VULAorCQkJY29tbWFuZCwgMCwgYnVmLCBzaXplLCBVU0JfQ1RSTF9TRVRfVElNRU9VVCk7CisKKwlpZiAobGVuICE9IHNpemUpCisJCXJldHVybiAtRUlPOworCisJaWYgKGtvbmVwbHVzX3JlY2VpdmVfY29udHJvbF9zdGF0dXModXNiX2RldikpCisJCXJldHVybiAtRUlPOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQga29uZXBsdXNfc2VsZWN0X3Byb2ZpbGUoc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYsIHVpbnQgbnVtYmVyLAorCQllbnVtIGtvbmVwbHVzX2NvbnRyb2xfcmVxdWVzdHMgcmVxdWVzdCkKK3sKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0ga29uZXBsdXNfc2VuZF9jb250cm9sKHVzYl9kZXYsIG51bWJlciwgcmVxdWVzdCk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCS8qIGFsbG93IHRpbWUgdG8gc2V0dGxlIHRoaW5ncyAtIHdpbmRvd3MgZHJpdmVyIHVzZXMgNTAwICovCisJbXNsZWVwKDEwMCk7CisKKwlyZXR2YWwgPSBrb25lcGx1c19yZWNlaXZlX2NvbnRyb2xfc3RhdHVzKHVzYl9kZXYpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBrb25lcGx1c19nZXRfaW5mbyhzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiwKKwkJc3RydWN0IGtvbmVwbHVzX2luZm8gKmJ1ZikKK3sKKwlyZXR1cm4ga29uZXBsdXNfcmVjZWl2ZSh1c2JfZGV2LCBLT05FUExVU19VU0JfQ09NTUFORF9JTkZPLAorCQkJYnVmLCBzaXplb2Yoc3RydWN0IGtvbmVwbHVzX2luZm8pKTsKK30KKworc3RhdGljIGludCBrb25lcGx1c19nZXRfcHJvZmlsZV9zZXR0aW5ncyhzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiwKKwkJc3RydWN0IGtvbmVwbHVzX3Byb2ZpbGVfc2V0dGluZ3MgKmJ1ZiwgdWludCBudW1iZXIpCit7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IGtvbmVwbHVzX3NlbGVjdF9wcm9maWxlKHVzYl9kZXYsIG51bWJlciwKKwkJCUtPTkVQTFVTX0NPTlRST0xfUkVRVUVTVF9QUk9GSUxFX1NFVFRJTkdTKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJcmV0dXJuIGtvbmVwbHVzX3JlY2VpdmUodXNiX2RldiwgS09ORVBMVVNfVVNCX0NPTU1BTkRfUFJPRklMRV9TRVRUSU5HUywKKwkJCWJ1Ziwgc2l6ZW9mKHN0cnVjdCBrb25lcGx1c19wcm9maWxlX3NldHRpbmdzKSk7Cit9CisKK3N0YXRpYyBpbnQga29uZXBsdXNfc2V0X3Byb2ZpbGVfc2V0dGluZ3Moc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYsCisJCXN0cnVjdCBrb25lcGx1c19wcm9maWxlX3NldHRpbmdzIGNvbnN0ICpzZXR0aW5ncykKK3sKKwlyZXR1cm4ga29uZXBsdXNfc2VuZCh1c2JfZGV2LCBLT05FUExVU19VU0JfQ09NTUFORF9QUk9GSUxFX1NFVFRJTkdTLAorCQkJKHZvaWQgKilzZXR0aW5ncywgc2l6ZW9mKHN0cnVjdCBrb25lcGx1c19wcm9maWxlX3NldHRpbmdzKSk7Cit9CisKK3N0YXRpYyBpbnQga29uZXBsdXNfZ2V0X3Byb2ZpbGVfYnV0dG9ucyhzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiwKKwkJc3RydWN0IGtvbmVwbHVzX3Byb2ZpbGVfYnV0dG9ucyAqYnVmLCBpbnQgbnVtYmVyKQoreworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSBrb25lcGx1c19zZWxlY3RfcHJvZmlsZSh1c2JfZGV2LCBudW1iZXIsCisJCQlLT05FUExVU19DT05UUk9MX1JFUVVFU1RfUFJPRklMRV9CVVRUT05TKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJcmV0dXJuIGtvbmVwbHVzX3JlY2VpdmUodXNiX2RldiwgS09ORVBMVVNfVVNCX0NPTU1BTkRfUFJPRklMRV9CVVRUT05TLAorCQkJYnVmLCBzaXplb2Yoc3RydWN0IGtvbmVwbHVzX3Byb2ZpbGVfYnV0dG9ucykpOworfQorCitzdGF0aWMgaW50IGtvbmVwbHVzX3NldF9wcm9maWxlX2J1dHRvbnMoc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYsCisJCXN0cnVjdCBrb25lcGx1c19wcm9maWxlX2J1dHRvbnMgY29uc3QgKmJ1dHRvbnMpCit7CisJcmV0dXJuIGtvbmVwbHVzX3NlbmQodXNiX2RldiwgS09ORVBMVVNfVVNCX0NPTU1BTkRfUFJPRklMRV9CVVRUT05TLAorCQkJKHZvaWQgKilidXR0b25zLCBzaXplb2Yoc3RydWN0IGtvbmVwbHVzX3Byb2ZpbGVfYnV0dG9ucykpOworfQorCisvKiByZXR2YWwgaXMgMC00IG9uIHN1Y2Nlc3MsIDwgMCBvbiBlcnJvciAqLworc3RhdGljIGludCBrb25lcGx1c19nZXRfc3RhcnR1cF9wcm9maWxlKHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2KQoreworCXN0cnVjdCBrb25lcGx1c19zdGFydHVwX3Byb2ZpbGUgKmJ1ZjsKKwlpbnQgcmV0dmFsOworCisJYnVmID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGtvbmVwbHVzX3N0YXJ0dXBfcHJvZmlsZSksIEdGUF9LRVJORUwpOworCisJcmV0dmFsID0ga29uZXBsdXNfcmVjZWl2ZSh1c2JfZGV2LCBLT05FUExVU19VU0JfQ09NTUFORF9TVEFSVFVQX1BST0ZJTEUsCisJCQlidWYsIHNpemVvZihzdHJ1Y3Qga29uZXBsdXNfc3RhcnR1cF9wcm9maWxlKSk7CisKKwlpZiAocmV0dmFsKQorCQlnb3RvIG91dDsKKworCXJldHZhbCA9IGJ1Zi0+c3RhcnR1cF9wcm9maWxlOworb3V0OgorCWtmcmVlKGJ1Zik7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBrb25lcGx1c19zZXRfc3RhcnR1cF9wcm9maWxlKHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2LAorCQlpbnQgc3RhcnR1cF9wcm9maWxlKQoreworCXN0cnVjdCBrb25lcGx1c19zdGFydHVwX3Byb2ZpbGUgYnVmOworCisJYnVmLmNvbW1hbmQgPSBLT05FUExVU19DT01NQU5EX1NUQVJUVVBfUFJPRklMRTsKKwlidWYuc2l6ZSA9IHNpemVvZihzdHJ1Y3Qga29uZXBsdXNfc3RhcnR1cF9wcm9maWxlKTsKKwlidWYuc3RhcnR1cF9wcm9maWxlID0gc3RhcnR1cF9wcm9maWxlOworCisJcmV0dXJuIGtvbmVwbHVzX3NlbmQodXNiX2RldiwgS09ORVBMVVNfVVNCX0NPTU1BTkRfU1RBUlRVUF9QUk9GSUxFLAorCQkJKGNoYXIgKikmYnVmLCBzaXplb2Yoc3RydWN0IGtvbmVwbHVzX3Byb2ZpbGVfYnV0dG9ucykpOworfQorCitzdGF0aWMgc3NpemVfdCBrb25lcGx1c19zeXNmc19yZWFkKHN0cnVjdCBmaWxlICpmcCwgc3RydWN0IGtvYmplY3QgKmtvYmosCisJCWNoYXIgKmJ1ZiwgbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50LAorCQlzaXplX3QgcmVhbF9zaXplLCB1aW50IGNvbW1hbmQpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0KKwkJCWNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGV2aWNlLCBrb2JqKS0+cGFyZW50LT5wYXJlbnQ7CisJc3RydWN0IGtvbmVwbHVzX2RldmljZSAqa29uZXBsdXMgPSBoaWRfZ2V0X2RydmRhdGEoZGV2X2dldF9kcnZkYXRhKGRldikpOworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldih0b191c2JfaW50ZXJmYWNlKGRldikpOworCWludCByZXR2YWw7CisKKwlpZiAob2ZmICE9IDAgfHwgY291bnQgIT0gcmVhbF9zaXplKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJmtvbmVwbHVzLT5rb25lcGx1c19sb2NrKTsKKwlyZXR2YWwgPSBrb25lcGx1c19yZWNlaXZlKHVzYl9kZXYsIGNvbW1hbmQsIGJ1ZiwgcmVhbF9zaXplKTsKKwltdXRleF91bmxvY2soJmtvbmVwbHVzLT5rb25lcGx1c19sb2NrKTsKKworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlyZXR1cm4gcmVhbF9zaXplOworfQorCitzdGF0aWMgc3NpemVfdCBrb25lcGx1c19zeXNmc193cml0ZShzdHJ1Y3QgZmlsZSAqZnAsIHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQl2b2lkIGNvbnN0ICpidWYsIGxvZmZfdCBvZmYsIHNpemVfdCBjb3VudCwKKwkJc2l6ZV90IHJlYWxfc2l6ZSwgdWludCBjb21tYW5kKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9CisJCQljb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRldmljZSwga29iaiktPnBhcmVudC0+cGFyZW50OworCXN0cnVjdCBrb25lcGx1c19kZXZpY2UgKmtvbmVwbHVzID0gaGlkX2dldF9kcnZkYXRhKGRldl9nZXRfZHJ2ZGF0YShkZXYpKTsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiA9IGludGVyZmFjZV90b191c2JkZXYodG9fdXNiX2ludGVyZmFjZShkZXYpKTsKKwlpbnQgcmV0dmFsOworCisJaWYgKG9mZiAhPSAwIHx8IGNvdW50ICE9IHJlYWxfc2l6ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZrb25lcGx1cy0+a29uZXBsdXNfbG9jayk7CisJcmV0dmFsID0ga29uZXBsdXNfc2VuZCh1c2JfZGV2LCBjb21tYW5kLCAodm9pZCAqKWJ1ZiwgcmVhbF9zaXplKTsKKwltdXRleF91bmxvY2soJmtvbmVwbHVzLT5rb25lcGx1c19sb2NrKTsKKworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlyZXR1cm4gcmVhbF9zaXplOworfQorCitzdGF0aWMgc3NpemVfdCBrb25lcGx1c19zeXNmc193cml0ZV9tYWNybyhzdHJ1Y3QgZmlsZSAqZnAsCisJCXN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmLAorCQlsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpCit7CisJcmV0dXJuIGtvbmVwbHVzX3N5c2ZzX3dyaXRlKGZwLCBrb2JqLCBidWYsIG9mZiwgY291bnQsCisJCQlzaXplb2Yoc3RydWN0IGtvbmVwbHVzX21hY3JvKSwgS09ORVBMVVNfVVNCX0NPTU1BTkRfTUFDUk8pOworfQorCitzdGF0aWMgc3NpemVfdCBrb25lcGx1c19zeXNmc19yZWFkX3NlbnNvcihzdHJ1Y3QgZmlsZSAqZnAsCisJCXN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmLAorCQlsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpCit7CisJcmV0dXJuIGtvbmVwbHVzX3N5c2ZzX3JlYWQoZnAsIGtvYmosIGJ1Ziwgb2ZmLCBjb3VudCwKKwkJCXNpemVvZihzdHJ1Y3Qga29uZXBsdXNfc2Vuc29yKSwgS09ORVBMVVNfVVNCX0NPTU1BTkRfU0VOU09SKTsKK30KKworc3RhdGljIHNzaXplX3Qga29uZXBsdXNfc3lzZnNfd3JpdGVfc2Vuc29yKHN0cnVjdCBmaWxlICpmcCwKKwkJc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYsCisJCWxvZmZfdCBvZmYsIHNpemVfdCBjb3VudCkKK3sKKwlyZXR1cm4ga29uZXBsdXNfc3lzZnNfd3JpdGUoZnAsIGtvYmosIGJ1Ziwgb2ZmLCBjb3VudCwKKwkJCXNpemVvZihzdHJ1Y3Qga29uZXBsdXNfc2Vuc29yKSwgS09ORVBMVVNfVVNCX0NPTU1BTkRfU0VOU09SKTsKK30KKworc3RhdGljIHNzaXplX3Qga29uZXBsdXNfc3lzZnNfd3JpdGVfdGN1KHN0cnVjdCBmaWxlICpmcCwKKwkJc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYsCisJCWxvZmZfdCBvZmYsIHNpemVfdCBjb3VudCkKK3sKKwlyZXR1cm4ga29uZXBsdXNfc3lzZnNfd3JpdGUoZnAsIGtvYmosIGJ1Ziwgb2ZmLCBjb3VudCwKKwkJCXNpemVvZihzdHJ1Y3Qga29uZXBsdXNfdGN1KSwgS09ORVBMVVNfVVNCX0NPTU1BTkRfVENVKTsKK30KKworc3RhdGljIHNzaXplX3Qga29uZXBsdXNfc3lzZnNfcmVhZF90Y3VfaW1hZ2Uoc3RydWN0IGZpbGUgKmZwLAorCQlzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZiwKKwkJbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KQoreworCXJldHVybiBrb25lcGx1c19zeXNmc19yZWFkKGZwLCBrb2JqLCBidWYsIG9mZiwgY291bnQsCisJCQlzaXplb2Yoc3RydWN0IGtvbmVwbHVzX3RjdV9pbWFnZSksIEtPTkVQTFVTX1VTQl9DT01NQU5EX1RDVSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGtvbmVwbHVzX3N5c2ZzX3JlYWRfcHJvZmlsZXhfc2V0dGluZ3Moc3RydWN0IGZpbGUgKmZwLAorCQlzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZiwKKwkJbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9CisJCQljb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRldmljZSwga29iaiktPnBhcmVudC0+cGFyZW50OworCXN0cnVjdCBrb25lcGx1c19kZXZpY2UgKmtvbmVwbHVzID0gaGlkX2dldF9kcnZkYXRhKGRldl9nZXRfZHJ2ZGF0YShkZXYpKTsKKworCWlmIChvZmYgPj0gc2l6ZW9mKHN0cnVjdCBrb25lcGx1c19wcm9maWxlX3NldHRpbmdzKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAob2ZmICsgY291bnQgPiBzaXplb2Yoc3RydWN0IGtvbmVwbHVzX3Byb2ZpbGVfc2V0dGluZ3MpKQorCQljb3VudCA9IHNpemVvZihzdHJ1Y3Qga29uZXBsdXNfcHJvZmlsZV9zZXR0aW5ncykgLSBvZmY7CisKKwltdXRleF9sb2NrKCZrb25lcGx1cy0+a29uZXBsdXNfbG9jayk7CisJbWVtY3B5KGJ1ZiwgKCh2b2lkIGNvbnN0ICopJmtvbmVwbHVzLT5wcm9maWxlX3NldHRpbmdzWyoodWludCAqKShhdHRyLT5wcml2YXRlKV0pICsgb2ZmLAorCQkJY291bnQpOworCW11dGV4X3VubG9jaygma29uZXBsdXMtPmtvbmVwbHVzX2xvY2spOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBrb25lcGx1c19zeXNmc193cml0ZV9wcm9maWxlX3NldHRpbmdzKHN0cnVjdCBmaWxlICpmcCwKKwkJc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYsCisJCWxvZmZfdCBvZmYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPQorCQkJY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkZXZpY2UsIGtvYmopLT5wYXJlbnQtPnBhcmVudDsKKwlzdHJ1Y3Qga29uZXBsdXNfZGV2aWNlICprb25lcGx1cyA9IGhpZF9nZXRfZHJ2ZGF0YShkZXZfZ2V0X2RydmRhdGEoZGV2KSk7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KHRvX3VzYl9pbnRlcmZhY2UoZGV2KSk7CisJaW50IHJldHZhbCA9IDA7CisJaW50IGRpZmZlcmVuY2U7CisJaW50IHByb2ZpbGVfbnVtYmVyOworCXN0cnVjdCBrb25lcGx1c19wcm9maWxlX3NldHRpbmdzICpwcm9maWxlX3NldHRpbmdzOworCisJaWYgKG9mZiAhPSAwIHx8IGNvdW50ICE9IHNpemVvZihzdHJ1Y3Qga29uZXBsdXNfcHJvZmlsZV9zZXR0aW5ncykpCisJCXJldHVybiAtRUlOVkFMOworCisJcHJvZmlsZV9udW1iZXIgPSAoKHN0cnVjdCBrb25lcGx1c19wcm9maWxlX3NldHRpbmdzIGNvbnN0ICopYnVmKS0+bnVtYmVyOworCXByb2ZpbGVfc2V0dGluZ3MgPSAma29uZXBsdXMtPnByb2ZpbGVfc2V0dGluZ3NbcHJvZmlsZV9udW1iZXJdOworCisJbXV0ZXhfbG9jaygma29uZXBsdXMtPmtvbmVwbHVzX2xvY2spOworCWRpZmZlcmVuY2UgPSBtZW1jbXAoYnVmLCBwcm9maWxlX3NldHRpbmdzLAorCQkJc2l6ZW9mKHN0cnVjdCBrb25lcGx1c19wcm9maWxlX3NldHRpbmdzKSk7CisJaWYgKGRpZmZlcmVuY2UpIHsKKwkJcmV0dmFsID0ga29uZXBsdXNfc2V0X3Byb2ZpbGVfc2V0dGluZ3ModXNiX2RldiwKKwkJCQkoc3RydWN0IGtvbmVwbHVzX3Byb2ZpbGVfc2V0dGluZ3MgY29uc3QgKilidWYpOworCQlpZiAoIXJldHZhbCkKKwkJCW1lbWNweShwcm9maWxlX3NldHRpbmdzLCBidWYsCisJCQkJCXNpemVvZihzdHJ1Y3Qga29uZXBsdXNfcHJvZmlsZV9zZXR0aW5ncykpOworCX0KKwltdXRleF91bmxvY2soJmtvbmVwbHVzLT5rb25lcGx1c19sb2NrKTsKKworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlyZXR1cm4gc2l6ZW9mKHN0cnVjdCBrb25lcGx1c19wcm9maWxlX3NldHRpbmdzKTsKK30KKworc3RhdGljIHNzaXplX3Qga29uZXBsdXNfc3lzZnNfcmVhZF9wcm9maWxleF9idXR0b25zKHN0cnVjdCBmaWxlICpmcCwKKwkJc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYsCisJCWxvZmZfdCBvZmYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPQorCQkJY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkZXZpY2UsIGtvYmopLT5wYXJlbnQtPnBhcmVudDsKKwlzdHJ1Y3Qga29uZXBsdXNfZGV2aWNlICprb25lcGx1cyA9IGhpZF9nZXRfZHJ2ZGF0YShkZXZfZ2V0X2RydmRhdGEoZGV2KSk7CisKKwlpZiAob2ZmID49IHNpemVvZihzdHJ1Y3Qga29uZXBsdXNfcHJvZmlsZV9idXR0b25zKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAob2ZmICsgY291bnQgPiBzaXplb2Yoc3RydWN0IGtvbmVwbHVzX3Byb2ZpbGVfYnV0dG9ucykpCisJCWNvdW50ID0gc2l6ZW9mKHN0cnVjdCBrb25lcGx1c19wcm9maWxlX2J1dHRvbnMpIC0gb2ZmOworCisJbXV0ZXhfbG9jaygma29uZXBsdXMtPmtvbmVwbHVzX2xvY2spOworCW1lbWNweShidWYsICgodm9pZCBjb25zdCAqKSZrb25lcGx1cy0+cHJvZmlsZV9idXR0b25zWyoodWludCAqKShhdHRyLT5wcml2YXRlKV0pICsgb2ZmLAorCQkJY291bnQpOworCW11dGV4X3VubG9jaygma29uZXBsdXMtPmtvbmVwbHVzX2xvY2spOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBrb25lcGx1c19zeXNmc193cml0ZV9wcm9maWxlX2J1dHRvbnMoc3RydWN0IGZpbGUgKmZwLAorCQlzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZiwKKwkJbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9CisJCQljb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRldmljZSwga29iaiktPnBhcmVudC0+cGFyZW50OworCXN0cnVjdCBrb25lcGx1c19kZXZpY2UgKmtvbmVwbHVzID0gaGlkX2dldF9kcnZkYXRhKGRldl9nZXRfZHJ2ZGF0YShkZXYpKTsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiA9IGludGVyZmFjZV90b191c2JkZXYodG9fdXNiX2ludGVyZmFjZShkZXYpKTsKKwlpbnQgcmV0dmFsID0gMDsKKwlpbnQgZGlmZmVyZW5jZTsKKwl1aW50IHByb2ZpbGVfbnVtYmVyOworCXN0cnVjdCBrb25lcGx1c19wcm9maWxlX2J1dHRvbnMgKnByb2ZpbGVfYnV0dG9uczsKKworCWlmIChvZmYgIT0gMCB8fCBjb3VudCAhPSBzaXplb2Yoc3RydWN0IGtvbmVwbHVzX3Byb2ZpbGVfYnV0dG9ucykpCisJCXJldHVybiAtRUlOVkFMOworCisJcHJvZmlsZV9udW1iZXIgPSAoKHN0cnVjdCBrb25lcGx1c19wcm9maWxlX2J1dHRvbnMgY29uc3QgKilidWYpLT5udW1iZXI7CisJcHJvZmlsZV9idXR0b25zID0gJmtvbmVwbHVzLT5wcm9maWxlX2J1dHRvbnNbcHJvZmlsZV9udW1iZXJdOworCisJbXV0ZXhfbG9jaygma29uZXBsdXMtPmtvbmVwbHVzX2xvY2spOworCWRpZmZlcmVuY2UgPSBtZW1jbXAoYnVmLCBwcm9maWxlX2J1dHRvbnMsCisJCQlzaXplb2Yoc3RydWN0IGtvbmVwbHVzX3Byb2ZpbGVfYnV0dG9ucykpOworCWlmIChkaWZmZXJlbmNlKSB7CisJCXJldHZhbCA9IGtvbmVwbHVzX3NldF9wcm9maWxlX2J1dHRvbnModXNiX2RldiwKKwkJCQkoc3RydWN0IGtvbmVwbHVzX3Byb2ZpbGVfYnV0dG9ucyBjb25zdCAqKWJ1Zik7CisJCWlmICghcmV0dmFsKQorCQkJbWVtY3B5KHByb2ZpbGVfYnV0dG9ucywgYnVmLAorCQkJCQlzaXplb2Yoc3RydWN0IGtvbmVwbHVzX3Byb2ZpbGVfYnV0dG9ucykpOworCX0KKwltdXRleF91bmxvY2soJmtvbmVwbHVzLT5rb25lcGx1c19sb2NrKTsKKworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlyZXR1cm4gc2l6ZW9mKHN0cnVjdCBrb25lcGx1c19wcm9maWxlX2J1dHRvbnMpOworfQorCitzdGF0aWMgc3NpemVfdCBrb25lcGx1c19zeXNmc19zaG93X3N0YXJ0dXBfcHJvZmlsZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IGtvbmVwbHVzX2RldmljZSAqa29uZXBsdXMgPQorCQkJaGlkX2dldF9kcnZkYXRhKGRldl9nZXRfZHJ2ZGF0YShkZXYtPnBhcmVudC0+cGFyZW50KSk7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIGtvbmVwbHVzLT5zdGFydHVwX3Byb2ZpbGUpOworfQorCitzdGF0aWMgc3NpemVfdCBrb25lcGx1c19zeXNmc19zZXRfc3RhcnR1cF9wcm9maWxlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgY29uc3QgKmJ1Ziwgc2l6ZV90IHNpemUpCit7CisJc3RydWN0IGtvbmVwbHVzX2RldmljZSAqa29uZXBsdXM7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXY7CisJdW5zaWduZWQgbG9uZyBwcm9maWxlOworCWludCByZXR2YWw7CisKKwlkZXYgPSBkZXYtPnBhcmVudC0+cGFyZW50OworCWtvbmVwbHVzID0gaGlkX2dldF9kcnZkYXRhKGRldl9nZXRfZHJ2ZGF0YShkZXYpKTsKKwl1c2JfZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldih0b191c2JfaW50ZXJmYWNlKGRldikpOworCisJcmV0dmFsID0gc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJnByb2ZpbGUpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwltdXRleF9sb2NrKCZrb25lcGx1cy0+a29uZXBsdXNfbG9jayk7CisJcmV0dmFsID0ga29uZXBsdXNfc2V0X3N0YXJ0dXBfcHJvZmlsZSh1c2JfZGV2LCBwcm9maWxlKTsKKwltdXRleF91bmxvY2soJmtvbmVwbHVzLT5rb25lcGx1c19sb2NrKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJcmV0dXJuIHNpemU7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGtvbmVwbHVzX3N5c2ZzX3Nob3dfYWN0dWFsX3Byb2ZpbGUoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBrb25lcGx1c19kZXZpY2UgKmtvbmVwbHVzID0KKwkJCWhpZF9nZXRfZHJ2ZGF0YShkZXZfZ2V0X2RydmRhdGEoZGV2LT5wYXJlbnQtPnBhcmVudCkpOworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCBrb25lcGx1cy0+YWN0dWFsX3Byb2ZpbGUpOworfQorCitzdGF0aWMgc3NpemVfdCBrb25lcGx1c19zeXNmc19zaG93X2Zpcm13YXJlX3ZlcnNpb24oc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBrb25lcGx1c19kZXZpY2UgKmtvbmVwbHVzID0KKwkJCWhpZF9nZXRfZHJ2ZGF0YShkZXZfZ2V0X2RydmRhdGEoZGV2LT5wYXJlbnQtPnBhcmVudCkpOworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCBrb25lcGx1cy0+aW5mby5maXJtd2FyZV92ZXJzaW9uKTsKK30KKworc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGtvbmVwbHVzX2F0dHJpYnV0ZXNbXSA9IHsKKwlfX0FUVFIoc3RhcnR1cF9wcm9maWxlLCAwNjYwLAorCQkJa29uZXBsdXNfc3lzZnNfc2hvd19zdGFydHVwX3Byb2ZpbGUsCisJCQlrb25lcGx1c19zeXNmc19zZXRfc3RhcnR1cF9wcm9maWxlKSwKKwlfX0FUVFIoYWN0dWFsX3Byb2ZpbGUsIDA0NDAsCisJCQlrb25lcGx1c19zeXNmc19zaG93X2FjdHVhbF9wcm9maWxlLCBOVUxMKSwKKwlfX0FUVFIoZmlybXdhcmVfdmVyc2lvbiwgMDQ0MCwKKwkJCWtvbmVwbHVzX3N5c2ZzX3Nob3dfZmlybXdhcmVfdmVyc2lvbiwgTlVMTCksCisJX19BVFRSX05VTEwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSBrb25lcGx1c19iaW5fYXR0cmlidXRlc1tdID0geworCXsKKwkJLmF0dHIgPSB7IC5uYW1lID0gInNlbnNvciIsIC5tb2RlID0gMDIyMCB9LAorCQkuc2l6ZSA9IHNpemVvZihzdHJ1Y3Qga29uZXBsdXNfc2Vuc29yKSwKKwkJLnJlYWQgPSBrb25lcGx1c19zeXNmc19yZWFkX3NlbnNvciwKKwkJLndyaXRlID0ga29uZXBsdXNfc3lzZnNfd3JpdGVfc2Vuc29yCisJfSwKKwl7CisJCS5hdHRyID0geyAubmFtZSA9ICJ0Y3UiLCAubW9kZSA9IDAyMjAgfSwKKwkJLnNpemUgPSBzaXplb2Yoc3RydWN0IGtvbmVwbHVzX3RjdSksCisJCS53cml0ZSA9IGtvbmVwbHVzX3N5c2ZzX3dyaXRlX3RjdQorCX0sCisJeworCQkuYXR0ciA9IHsgLm5hbWUgPSAidGN1X2ltYWdlIiwgLm1vZGUgPSAwNDQwIH0sCisJCS5zaXplID0gc2l6ZW9mKHN0cnVjdCBrb25lcGx1c190Y3VfaW1hZ2UpLAorCQkucmVhZCA9IGtvbmVwbHVzX3N5c2ZzX3JlYWRfdGN1X2ltYWdlCisJfSwKKwl7CisJCS5hdHRyID0geyAubmFtZSA9ICJwcm9maWxlX3NldHRpbmdzIiwgLm1vZGUgPSAwMjIwIH0sCisJCS5zaXplID0gc2l6ZW9mKHN0cnVjdCBrb25lcGx1c19wcm9maWxlX3NldHRpbmdzKSwKKwkJLndyaXRlID0ga29uZXBsdXNfc3lzZnNfd3JpdGVfcHJvZmlsZV9zZXR0aW5ncworCX0sCisJeworCQkuYXR0ciA9IHsgLm5hbWUgPSAicHJvZmlsZTFfc2V0dGluZ3MiLCAubW9kZSA9IDA0NDAgfSwKKwkJLnNpemUgPSBzaXplb2Yoc3RydWN0IGtvbmVwbHVzX3Byb2ZpbGVfc2V0dGluZ3MpLAorCQkucmVhZCA9IGtvbmVwbHVzX3N5c2ZzX3JlYWRfcHJvZmlsZXhfc2V0dGluZ3MsCisJCS5wcml2YXRlID0gJnByb2ZpbGVfbnVtYmVyc1swXQorCX0sCisJeworCQkuYXR0ciA9IHsgLm5hbWUgPSAicHJvZmlsZTJfc2V0dGluZ3MiLCAubW9kZSA9IDA0NDAgfSwKKwkJLnNpemUgPSBzaXplb2Yoc3RydWN0IGtvbmVwbHVzX3Byb2ZpbGVfc2V0dGluZ3MpLAorCQkucmVhZCA9IGtvbmVwbHVzX3N5c2ZzX3JlYWRfcHJvZmlsZXhfc2V0dGluZ3MsCisJCS5wcml2YXRlID0gJnByb2ZpbGVfbnVtYmVyc1sxXQorCX0sCisJeworCQkuYXR0ciA9IHsgLm5hbWUgPSAicHJvZmlsZTNfc2V0dGluZ3MiLCAubW9kZSA9IDA0NDAgfSwKKwkJLnNpemUgPSBzaXplb2Yoc3RydWN0IGtvbmVwbHVzX3Byb2ZpbGVfc2V0dGluZ3MpLAorCQkucmVhZCA9IGtvbmVwbHVzX3N5c2ZzX3JlYWRfcHJvZmlsZXhfc2V0dGluZ3MsCisJCS5wcml2YXRlID0gJnByb2ZpbGVfbnVtYmVyc1syXQorCX0sCisJeworCQkuYXR0ciA9IHsgLm5hbWUgPSAicHJvZmlsZTRfc2V0dGluZ3MiLCAubW9kZSA9IDA0NDAgfSwKKwkJLnNpemUgPSBzaXplb2Yoc3RydWN0IGtvbmVwbHVzX3Byb2ZpbGVfc2V0dGluZ3MpLAorCQkucmVhZCA9IGtvbmVwbHVzX3N5c2ZzX3JlYWRfcHJvZmlsZXhfc2V0dGluZ3MsCisJCS5wcml2YXRlID0gJnByb2ZpbGVfbnVtYmVyc1szXQorCX0sCisJeworCQkuYXR0ciA9IHsgLm5hbWUgPSAicHJvZmlsZTVfc2V0dGluZ3MiLCAubW9kZSA9IDA0NDAgfSwKKwkJLnNpemUgPSBzaXplb2Yoc3RydWN0IGtvbmVwbHVzX3Byb2ZpbGVfc2V0dGluZ3MpLAorCQkucmVhZCA9IGtvbmVwbHVzX3N5c2ZzX3JlYWRfcHJvZmlsZXhfc2V0dGluZ3MsCisJCS5wcml2YXRlID0gJnByb2ZpbGVfbnVtYmVyc1s0XQorCX0sCisJeworCQkuYXR0ciA9IHsgLm5hbWUgPSAicHJvZmlsZV9idXR0b25zIiwgLm1vZGUgPSAwMjIwIH0sCisJCS5zaXplID0gc2l6ZW9mKHN0cnVjdCBrb25lcGx1c19wcm9maWxlX2J1dHRvbnMpLAorCQkud3JpdGUgPSBrb25lcGx1c19zeXNmc193cml0ZV9wcm9maWxlX2J1dHRvbnMKKwl9LAorCXsKKwkJLmF0dHIgPSB7IC5uYW1lID0gInByb2ZpbGUxX2J1dHRvbnMiLCAubW9kZSA9IDA0NDAgfSwKKwkJLnNpemUgPSBzaXplb2Yoc3RydWN0IGtvbmVwbHVzX3Byb2ZpbGVfYnV0dG9ucyksCisJCS5yZWFkID0ga29uZXBsdXNfc3lzZnNfcmVhZF9wcm9maWxleF9idXR0b25zLAorCQkucHJpdmF0ZSA9ICZwcm9maWxlX251bWJlcnNbMF0KKwl9LAorCXsKKwkJLmF0dHIgPSB7IC5uYW1lID0gInByb2ZpbGUyX2J1dHRvbnMiLCAubW9kZSA9IDA0NDAgfSwKKwkJLnNpemUgPSBzaXplb2Yoc3RydWN0IGtvbmVwbHVzX3Byb2ZpbGVfYnV0dG9ucyksCisJCS5yZWFkID0ga29uZXBsdXNfc3lzZnNfcmVhZF9wcm9maWxleF9idXR0b25zLAorCQkucHJpdmF0ZSA9ICZwcm9maWxlX251bWJlcnNbMV0KKwl9LAorCXsKKwkJLmF0dHIgPSB7IC5uYW1lID0gInByb2ZpbGUzX2J1dHRvbnMiLCAubW9kZSA9IDA0NDAgfSwKKwkJLnNpemUgPSBzaXplb2Yoc3RydWN0IGtvbmVwbHVzX3Byb2ZpbGVfYnV0dG9ucyksCisJCS5yZWFkID0ga29uZXBsdXNfc3lzZnNfcmVhZF9wcm9maWxleF9idXR0b25zLAorCQkucHJpdmF0ZSA9ICZwcm9maWxlX251bWJlcnNbMl0KKwl9LAorCXsKKwkJLmF0dHIgPSB7IC5uYW1lID0gInByb2ZpbGU0X2J1dHRvbnMiLCAubW9kZSA9IDA0NDAgfSwKKwkJLnNpemUgPSBzaXplb2Yoc3RydWN0IGtvbmVwbHVzX3Byb2ZpbGVfYnV0dG9ucyksCisJCS5yZWFkID0ga29uZXBsdXNfc3lzZnNfcmVhZF9wcm9maWxleF9idXR0b25zLAorCQkucHJpdmF0ZSA9ICZwcm9maWxlX251bWJlcnNbM10KKwl9LAorCXsKKwkJLmF0dHIgPSB7IC5uYW1lID0gInByb2ZpbGU1X2J1dHRvbnMiLCAubW9kZSA9IDA0NDAgfSwKKwkJLnNpemUgPSBzaXplb2Yoc3RydWN0IGtvbmVwbHVzX3Byb2ZpbGVfYnV0dG9ucyksCisJCS5yZWFkID0ga29uZXBsdXNfc3lzZnNfcmVhZF9wcm9maWxleF9idXR0b25zLAorCQkucHJpdmF0ZSA9ICZwcm9maWxlX251bWJlcnNbNF0KKwl9LAorCXsKKwkJLmF0dHIgPSB7IC5uYW1lID0gIm1hY3JvIiwgLm1vZGUgPSAwMjIwIH0sCisJCS5zaXplID0gc2l6ZW9mKHN0cnVjdCBrb25lcGx1c19tYWNybyksCisJCS53cml0ZSA9IGtvbmVwbHVzX3N5c2ZzX3dyaXRlX21hY3JvCisJfSwKKwlfX0FUVFJfTlVMTAorfTsKKworc3RhdGljIGludCBrb25lcGx1c19pbml0X2tvbmVwbHVzX2RldmljZV9zdHJ1Y3Qoc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYsCisJCXN0cnVjdCBrb25lcGx1c19kZXZpY2UgKmtvbmVwbHVzKQoreworCWludCByZXR2YWwsIGk7CisJc3RhdGljIHVpbnQgd2FpdCA9IDcwOyAvKiBkZXZpY2Ugd2lsbCBmcmVlemUgd2l0aCBqdXN0IDYwICovCisKKwltdXRleF9pbml0KCZrb25lcGx1cy0+a29uZXBsdXNfbG9jayk7CisKKwlrb25lcGx1cy0+c3RhcnR1cF9wcm9maWxlID0ga29uZXBsdXNfZ2V0X3N0YXJ0dXBfcHJvZmlsZSh1c2JfZGV2KTsKKworCW1zbGVlcCh3YWl0KTsKKwlyZXR2YWwgPSBrb25lcGx1c19nZXRfaW5mbyh1c2JfZGV2LCAma29uZXBsdXMtPmluZm8pOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlmb3IgKGkgPSAwOyBpIDwgNTsgKytpKSB7CisJCW1zbGVlcCh3YWl0KTsKKwkJcmV0dmFsID0ga29uZXBsdXNfZ2V0X3Byb2ZpbGVfc2V0dGluZ3ModXNiX2RldiwKKwkJCQkma29uZXBsdXMtPnByb2ZpbGVfc2V0dGluZ3NbaV0sIGkpOworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuIHJldHZhbDsKKworCQltc2xlZXAod2FpdCk7CisJCXJldHZhbCA9IGtvbmVwbHVzX2dldF9wcm9maWxlX2J1dHRvbnModXNiX2RldiwKKwkJCQkma29uZXBsdXMtPnByb2ZpbGVfYnV0dG9uc1tpXSwgaSk7CisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gcmV0dmFsOworCX0KKworCWtvbmVwbHVzX3Byb2ZpbGVfYWN0aXZhdGVkKGtvbmVwbHVzLCBrb25lcGx1cy0+c3RhcnR1cF9wcm9maWxlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGtvbmVwbHVzX2luaXRfc3BlY2lhbHMoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGhkZXYtPmRldi5wYXJlbnQpOworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwlzdHJ1Y3Qga29uZXBsdXNfZGV2aWNlICprb25lcGx1czsKKwlpbnQgcmV0dmFsOworCisJaWYgKGludGYtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VQcm90b2NvbAorCQkJPT0gVVNCX0lOVEVSRkFDRV9QUk9UT0NPTF9NT1VTRSkgeworCisJCWtvbmVwbHVzID0ga3phbGxvYyhzaXplb2YoKmtvbmVwbHVzKSwgR0ZQX0tFUk5FTCk7CisJCWlmICgha29uZXBsdXMpIHsKKwkJCWRldl9lcnIoJmhkZXYtPmRldiwgImNhbid0IGFsbG9jIGRldmljZSBkZXNjcmlwdG9yXG4iKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCWhpZF9zZXRfZHJ2ZGF0YShoZGV2LCBrb25lcGx1cyk7CisKKwkJcmV0dmFsID0ga29uZXBsdXNfaW5pdF9rb25lcGx1c19kZXZpY2Vfc3RydWN0KHVzYl9kZXYsIGtvbmVwbHVzKTsKKwkJaWYgKHJldHZhbCkgeworCQkJZGV2X2VycigmaGRldi0+ZGV2LAorCQkJCQkiY291bGRuJ3QgaW5pdCBzdHJ1Y3Qga29uZXBsdXNfZGV2aWNlXG4iKTsKKwkJCWdvdG8gZXhpdF9mcmVlOworCQl9CisKKwkJcmV0dmFsID0gcm9jY2F0X2Nvbm5lY3Qoa29uZXBsdXNfY2xhc3MsIGhkZXYpOworCQlpZiAocmV0dmFsIDwgMCkgeworCQkJZGV2X2VycigmaGRldi0+ZGV2LCAiY291bGRuJ3QgaW5pdCBjaGFyIGRldlxuIik7CisJCX0gZWxzZSB7CisJCQlrb25lcGx1cy0+Y2hyZGV2X21pbm9yID0gcmV0dmFsOworCQkJa29uZXBsdXMtPnJvY2NhdF9jbGFpbWVkID0gMTsKKwkJfQorCX0gZWxzZSB7CisJCWhpZF9zZXRfZHJ2ZGF0YShoZGV2LCBOVUxMKTsKKwl9CisKKwlyZXR1cm4gMDsKK2V4aXRfZnJlZToKKwlrZnJlZShrb25lcGx1cyk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQga29uZXBsdXNfcmVtb3ZlX3NwZWNpYWxzKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2KQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShoZGV2LT5kZXYucGFyZW50KTsKKwlzdHJ1Y3Qga29uZXBsdXNfZGV2aWNlICprb25lcGx1czsKKworCWlmIChpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlUHJvdG9jb2wKKwkJCT09IFVTQl9JTlRFUkZBQ0VfUFJPVE9DT0xfTU9VU0UpIHsKKwkJa29uZXBsdXMgPSBoaWRfZ2V0X2RydmRhdGEoaGRldik7CisJCWlmIChrb25lcGx1cy0+cm9jY2F0X2NsYWltZWQpCisJCQlyb2NjYXRfZGlzY29ubmVjdChrb25lcGx1cy0+Y2hyZGV2X21pbm9yKTsKKwkJa2ZyZWUoa29uZXBsdXMpOworCX0KK30KKworc3RhdGljIGludCBrb25lcGx1c19wcm9iZShzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwKKwkJY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgKmlkKQoreworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSBoaWRfcGFyc2UoaGRldik7CisJaWYgKHJldHZhbCkgeworCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJwYXJzZSBmYWlsZWRcbiIpOworCQlnb3RvIGV4aXQ7CisJfQorCisJcmV0dmFsID0gaGlkX2h3X3N0YXJ0KGhkZXYsIEhJRF9DT05ORUNUX0RFRkFVTFQpOworCWlmIChyZXR2YWwpIHsKKwkJZGV2X2VycigmaGRldi0+ZGV2LCAiaHcgc3RhcnQgZmFpbGVkXG4iKTsKKwkJZ290byBleGl0OworCX0KKworCXJldHZhbCA9IGtvbmVwbHVzX2luaXRfc3BlY2lhbHMoaGRldik7CisJaWYgKHJldHZhbCkgeworCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJjb3VsZG4ndCBpbnN0YWxsIG1vdXNlXG4iKTsKKwkJZ290byBleGl0X3N0b3A7CisJfQorCisJcmV0dXJuIDA7CisKK2V4aXRfc3RvcDoKKwloaWRfaHdfc3RvcChoZGV2KTsKK2V4aXQ6CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQga29uZXBsdXNfcmVtb3ZlKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2KQoreworCWtvbmVwbHVzX3JlbW92ZV9zcGVjaWFscyhoZGV2KTsKKwloaWRfaHdfc3RvcChoZGV2KTsKK30KKworc3RhdGljIHZvaWQga29uZXBsdXNfa2VlcF92YWx1ZXNfdXBfdG9fZGF0ZShzdHJ1Y3Qga29uZXBsdXNfZGV2aWNlICprb25lcGx1cywKKwkJdTggY29uc3QgKmRhdGEpCit7CisJc3RydWN0IGtvbmVwbHVzX21vdXNlX3JlcG9ydF9idXR0b24gY29uc3QgKmJ1dHRvbl9yZXBvcnQ7CisKKwlzd2l0Y2ggKGRhdGFbMF0pIHsKKwljYXNlIEtPTkVQTFVTX01PVVNFX1JFUE9SVF9OVU1CRVJfQlVUVE9OOgorCQlidXR0b25fcmVwb3J0ID0gKHN0cnVjdCBrb25lcGx1c19tb3VzZV9yZXBvcnRfYnV0dG9uIGNvbnN0ICopZGF0YTsKKwkJc3dpdGNoIChidXR0b25fcmVwb3J0LT50eXBlKSB7CisJCWNhc2UgS09ORVBMVVNfTU9VU0VfUkVQT1JUX0JVVFRPTl9UWVBFX1BST0ZJTEU6CisJCQlrb25lcGx1c19wcm9maWxlX2FjdGl2YXRlZChrb25lcGx1cywgYnV0dG9uX3JlcG9ydC0+ZGF0YTEgLSAxKTsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQga29uZXBsdXNfcmVwb3J0X3RvX2NocmRldihzdHJ1Y3Qga29uZXBsdXNfZGV2aWNlIGNvbnN0ICprb25lcGx1cywKKwkJdTggY29uc3QgKmRhdGEpCit7CisJc3RydWN0IGtvbmVwbHVzX3JvY2NhdF9yZXBvcnQgcm9jY2F0X3JlcG9ydDsKKwlzdHJ1Y3Qga29uZXBsdXNfbW91c2VfcmVwb3J0X2J1dHRvbiBjb25zdCAqYnV0dG9uX3JlcG9ydDsKKworCWlmIChkYXRhWzBdICE9IEtPTkVQTFVTX01PVVNFX1JFUE9SVF9OVU1CRVJfQlVUVE9OKQorCQlyZXR1cm47CisKKwlidXR0b25fcmVwb3J0ID0gKHN0cnVjdCBrb25lcGx1c19tb3VzZV9yZXBvcnRfYnV0dG9uIGNvbnN0ICopZGF0YTsKKworCWlmICgoYnV0dG9uX3JlcG9ydC0+dHlwZSA9PSBLT05FUExVU19NT1VTRV9SRVBPUlRfQlVUVE9OX1RZUEVfUVVJQ0tMQVVOQ0ggfHwKKwkJCWJ1dHRvbl9yZXBvcnQtPnR5cGUgPT0gS09ORVBMVVNfTU9VU0VfUkVQT1JUX0JVVFRPTl9UWVBFX1RJTUVSKSAmJgorCQkJYnV0dG9uX3JlcG9ydC0+ZGF0YTIgIT0gS09ORVBMVVNfTU9VU0VfUkVQT1JUX0JVVFRPTl9BQ1RJT05fUFJFU1MpCisJCXJldHVybjsKKworCXJvY2NhdF9yZXBvcnQudHlwZSA9IGJ1dHRvbl9yZXBvcnQtPnR5cGU7CisJcm9jY2F0X3JlcG9ydC5kYXRhMSA9IGJ1dHRvbl9yZXBvcnQtPmRhdGExOworCXJvY2NhdF9yZXBvcnQuZGF0YTIgPSBidXR0b25fcmVwb3J0LT5kYXRhMjsKKwlyb2NjYXRfcmVwb3J0LnByb2ZpbGUgPSBrb25lcGx1cy0+YWN0dWFsX3Byb2ZpbGUgKyAxOworCXJvY2NhdF9yZXBvcnRfZXZlbnQoa29uZXBsdXMtPmNocmRldl9taW5vciwKKwkJCSh1aW50OF90IGNvbnN0ICopJnJvY2NhdF9yZXBvcnQsCisJCQlzaXplb2Yoc3RydWN0IGtvbmVwbHVzX3JvY2NhdF9yZXBvcnQpKTsKK30KKworc3RhdGljIGludCBrb25lcGx1c19yYXdfZXZlbnQoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsCisJCXN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQsIHU4ICpkYXRhLCBpbnQgc2l6ZSkKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoaGRldi0+ZGV2LnBhcmVudCk7CisJc3RydWN0IGtvbmVwbHVzX2RldmljZSAqa29uZXBsdXMgPSBoaWRfZ2V0X2RydmRhdGEoaGRldik7CisKKwlpZiAoaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZVByb3RvY29sCisJCQkhPSBVU0JfSU5URVJGQUNFX1BST1RPQ09MX01PVVNFKQorCQlyZXR1cm4gMDsKKworCWtvbmVwbHVzX2tlZXBfdmFsdWVzX3VwX3RvX2RhdGUoa29uZXBsdXMsIGRhdGEpOworCisJaWYgKGtvbmVwbHVzLT5yb2NjYXRfY2xhaW1lZCkKKwkJa29uZXBsdXNfcmVwb3J0X3RvX2NocmRldihrb25lcGx1cywgZGF0YSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkIGtvbmVwbHVzX2RldmljZXNbXSA9IHsKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfUk9DQ0FULCBVU0JfREVWSUNFX0lEX1JPQ0NBVF9LT05FUExVUykgfSwKKwl7IH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaGlkLCBrb25lcGx1c19kZXZpY2VzKTsKKworc3RhdGljIHN0cnVjdCBoaWRfZHJpdmVyIGtvbmVwbHVzX2RyaXZlciA9IHsKKwkJLm5hbWUgPSAia29uZXBsdXMiLAorCQkuaWRfdGFibGUgPSBrb25lcGx1c19kZXZpY2VzLAorCQkucHJvYmUgPSBrb25lcGx1c19wcm9iZSwKKwkJLnJlbW92ZSA9IGtvbmVwbHVzX3JlbW92ZSwKKwkJLnJhd19ldmVudCA9IGtvbmVwbHVzX3Jhd19ldmVudAorfTsKKworc3RhdGljIGludCBfX2luaXQga29uZXBsdXNfaW5pdCh2b2lkKQoreworCWludCByZXR2YWw7CisKKwkvKiBjbGFzcyBuYW1lIGhhcyB0byBiZSBzYW1lIGFzIGRyaXZlciBuYW1lICovCisJa29uZXBsdXNfY2xhc3MgPSBjbGFzc19jcmVhdGUoVEhJU19NT0RVTEUsICJrb25lcGx1cyIpOworCWlmIChJU19FUlIoa29uZXBsdXNfY2xhc3MpKQorCQlyZXR1cm4gUFRSX0VSUihrb25lcGx1c19jbGFzcyk7CisJa29uZXBsdXNfY2xhc3MtPmRldl9hdHRycyA9IGtvbmVwbHVzX2F0dHJpYnV0ZXM7CisJa29uZXBsdXNfY2xhc3MtPmRldl9iaW5fYXR0cnMgPSBrb25lcGx1c19iaW5fYXR0cmlidXRlczsKKworCXJldHZhbCA9IGhpZF9yZWdpc3Rlcl9kcml2ZXIoJmtvbmVwbHVzX2RyaXZlcik7CisJaWYgKHJldHZhbCkKKwkJY2xhc3NfZGVzdHJveShrb25lcGx1c19jbGFzcyk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGtvbmVwbHVzX2V4aXQodm9pZCkKK3sKKwljbGFzc19kZXN0cm95KGtvbmVwbHVzX2NsYXNzKTsKKwloaWRfdW5yZWdpc3Rlcl9kcml2ZXIoJmtvbmVwbHVzX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGtvbmVwbHVzX2luaXQpOworbW9kdWxlX2V4aXQoa29uZXBsdXNfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIlN0ZWZhbiBBY2hhdHoiKTsKK01PRFVMRV9ERVNDUklQVElPTigiVVNCIFJvY2NhdCBLb25lWytdIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lcGx1cy5oIGIvZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lcGx1cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3YTVjMWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmVwbHVzLmgKQEAgLTAsMCArMSwyMjQgQEAKKyNpZm5kZWYgX19ISURfUk9DQ0FUX0tPTkVQTFVTX0gKKyNkZWZpbmUgX19ISURfUk9DQ0FUX0tPTkVQTFVTX0gKKworLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBTdGVmYW4gQWNoYXR6IDxlcmF6b3JfZGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorICovCisKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKgorICogY2FzZSAxOiB3cml0ZXMgcmVxdWVzdCA4MCBhbmQgcmVhZHMgdmFsdWUgMQorICoKKyAqLworc3RydWN0IGtvbmVwbHVzX2NvbnRyb2wgeworCXVpbnQ4X3QgY29tbWFuZDsgLyogS09ORVBMVVNfQ09NTUFORF9DT05UUk9MICovCisJLyoKKwkgKiB2YWx1ZSBpcyBwcm9maWxlIG51bWJlciBpbiByYW5nZSAwLTQgZm9yIHJlcXVlc3Rpbmcgc2V0dGluZ3MgYW5kIGJ1dHRvbnMKKwkgKiAxIGlmIHN0YXR1cyBvayBmb3IgcmVxdWVzdGluZyBzdGF0dXMKKwkgKi8KKwl1aW50OF90IHZhbHVlOworCXVpbnQ4X3QgcmVxdWVzdDsKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKworZW51bSBrb25lcGx1c19jb250cm9sX3JlcXVlc3RzIHsKKwlLT05FUExVU19DT05UUk9MX1JFUVVFU1RfU1RBVFVTID0gMHgwMCwKKwlLT05FUExVU19DT05UUk9MX1JFUVVFU1RfUFJPRklMRV9TRVRUSU5HUyA9IDB4ODAsCisJS09ORVBMVVNfQ09OVFJPTF9SRVFVRVNUX1BST0ZJTEVfQlVUVE9OUyA9IDB4OTAsCit9OworCitlbnVtIGtvbmVwbHVzX2NvbnRyb2xfdmFsdWVzIHsKKwlLT05FUExVU19DT05UUk9MX1JFUVVFU1RfU1RBVFVTX09WRVJMT0FEID0gMCwKKwlLT05FUExVU19DT05UUk9MX1JFUVVFU1RfU1RBVFVTX09LID0gMSwKKwlLT05FUExVU19DT05UUk9MX1JFUVVFU1RfU1RBVFVTX1dBSVQgPSAzLAorfTsKKworc3RydWN0IGtvbmVwbHVzX3N0YXJ0dXBfcHJvZmlsZSB7CisJdWludDhfdCBjb21tYW5kOyAvKiBLT05FUExVU19DT01NQU5EX1NUQVJUVVBfUFJPRklMRSAqLworCXVpbnQ4X3Qgc2l6ZTsgLyogYWx3YXlzIDMgKi8KKwl1aW50OF90IHN0YXJ0dXBfcHJvZmlsZTsgLyogUmFuZ2UgMC00ISAqLworfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOworCitzdHJ1Y3Qga29uZXBsdXNfcHJvZmlsZV9zZXR0aW5ncyB7CisJdWludDhfdCBjb21tYW5kOyAvKiBLT05FUExVU19DT01NQU5EX1BST0ZJTEVfU0VUVElOR1MgKi8KKwl1aW50OF90IHNpemU7IC8qIGFsd2F5cyA0MyAqLworCXVpbnQ4X3QgbnVtYmVyOyAvKiByYW5nZSAwLTQgKi8KKwl1aW50OF90IGFkdmFuY2VkX3NlbnNpdGl2aXR5OworCXVpbnQ4X3Qgc2Vuc2l0aXZpdHlfeDsKKwl1aW50OF90IHNlbnNpdGl2aXR5X3k7CisJdWludDhfdCBjcGlfbGV2ZWxzX2VuYWJsZWQ7CisJdWludDhfdCBjcGlfbGV2ZWxzX3hbNV07CisJdWludDhfdCBjcGlfc3RhcnR1cF9sZXZlbDsgLyogcmFuZ2UgMC00ICovCisJdWludDhfdCBjcGlfbGV2ZWxzX3lbNV07IC8qIHJhbmdlIDEtNjAgbWVhbnMgMTAwLTYwMDAgY3BpICovCisJdWludDhfdCB1bmtub3duMTsKKwl1aW50OF90IHBvbGxpbmdfcmF0ZTsKKwl1aW50OF90IGxpZ2h0c19lbmFibGVkOworCXVpbnQ4X3QgbGlnaHRfZWZmZWN0X21vZGU7CisJdWludDhfdCBjb2xvcl9mbG93X2VmZmVjdDsKKwl1aW50OF90IGxpZ2h0X2VmZmVjdF90eXBlOworCXVpbnQ4X3QgbGlnaHRfZWZmZWN0X3NwZWVkOworCXVpbnQ4X3QgbGlnaHRzWzE2XTsKKwl1aW50MTZfdCBjaGVja3N1bTsKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKworc3RydWN0IGtvbmVwbHVzX3Byb2ZpbGVfYnV0dG9ucyB7CisJdWludDhfdCBjb21tYW5kOyAvKiBLT05FUExVU19DT01NQU5EX1BST0ZJTEVfQlVUVE9OUyAqLworCXVpbnQ4X3Qgc2l6ZTsgLyogYWx3YXlzIDc3ICovCisJdWludDhfdCBudW1iZXI7IC8qIHJhbmdlIDAtNCAqLworCXVpbnQ4X3QgZGF0YVs3Ml07CisJdWludDE2X3QgY2hlY2tzdW07Cit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisKK3N0cnVjdCBrb25lcGx1c19tYWNybyB7CisJdWludDhfdCBjb21tYW5kOyAvKiBLT05FUExVU19DT01NQU5EX01BQ1JPICovCisJdWludDE2X3Qgc2l6ZTsgLyogYWx3YXlzIDB4ODIyIGxpdHRsZSBlbmRpYW4gKi8KKwl1aW50OF90IHByb2ZpbGU7IC8qIHJhbmdlIDAtNCAqLworCXVpbnQ4X3QgYnV0dG9uOyAvKiByYW5nZSAwLTIzICovCisJdWludDhfdCBkYXRhWzIwNzVdOworCXVpbnQxNl90IGNoZWNrc3VtOworfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOworCitzdHJ1Y3Qga29uZXBsdXNfaW5mbyB7CisJdWludDhfdCBjb21tYW5kOyAvKiBLT05FUExVU19DT01NQU5EX0lORk8gKi8KKwl1aW50OF90IHNpemU7IC8qIGFsd2F5cyA2ICovCisJdWludDhfdCBmaXJtd2FyZV92ZXJzaW9uOworCXVpbnQ4X3QgdW5rbm93blszXTsKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKworc3RydWN0IGtvbmVwbHVzX2UgeworCXVpbnQ4X3QgY29tbWFuZDsgLyogS09ORVBMVVNfQ09NTUFORF9FICovCisJdWludDhfdCBzaXplOyAvKiBhbHdheXMgMyAqLworCXVpbnQ4X3QgdW5rbm93bjsgLyogVE9ETyAxOyAwIGJlZm9yZSBmaXJtd2FyZSB1cGRhdGUgKi8KK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKworc3RydWN0IGtvbmVwbHVzX3NlbnNvciB7CisJdWludDhfdCBjb21tYW5kOyAgLyogS09ORVBMVVNfQ09NTUFORF9TRU5TT1IgKi8KKwl1aW50OF90IHNpemU7IC8qIGFsd2F5cyA2ICovCisJdWludDhfdCBkYXRhWzRdOworfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOworCitzdHJ1Y3Qga29uZXBsdXNfZmlybXdhcmVfd3JpdGUgeworCXVpbnQ4X3QgY29tbWFuZDsgLyogS09ORVBMVVNfQ09NTUFORF9GSVJNV0FSRV9XUklURSAqLworCXVpbnQ4X3QgdW5rbm93blsxMDI1XTsKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKworc3RydWN0IGtvbmVwbHVzX2Zpcm13YXJlX3dyaXRlX2NvbnRyb2wgeworCXVpbnQ4X3QgY29tbWFuZDsgLyogS09ORVBMVVNfQ09NTUFORF9GSVJNV0FSRV9XUklURV9DT05UUk9MICovCisJLyoKKwkgKiB2YWx1ZSBpcyAxIG9uIHN1Y2Nlc3MKKwkgKiAzIG1lYW5zICJub3QgZmluaXNoZWQgeWV0IgorCSAqLworCXVpbnQ4X3QgdmFsdWU7CisJdWludDhfdCB1bmtub3duOyAvKiBhbHdheXMgMHg3NSAqLworfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOworCitzdHJ1Y3Qga29uZXBsdXNfdGN1IHsKKwl1aW50MTZfdCB1c2JfY29tbWFuZDsgLyogS09ORVBMVVNfVVNCX0NPTU1BTkRfVENVICovCisJdWludDhfdCBkYXRhWzJdOworfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOworCitzdHJ1Y3Qga29uZXBsdXNfdGN1X2ltYWdlIHsKKwl1aW50MTZfdCB1c2JfY29tbWFuZDsgLyogS09ORVBMVVNfVVNCX0NPTU1BTkRfVENVICovCisJdWludDhfdCBkYXRhWzEwMjRdOworCXVpbnQxNl90IGNoZWNrc3VtOworfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOworCitlbnVtIGtvbmVwbHVzX2NvbW1hbmRzIHsKKwlLT05FUExVU19DT01NQU5EX0NPTlRST0wgPSAweDQsCisJS09ORVBMVVNfQ09NTUFORF9TVEFSVFVQX1BST0ZJTEUgPSAweDUsCisJS09ORVBMVVNfQ09NTUFORF9QUk9GSUxFX1NFVFRJTkdTID0gMHg2LAorCUtPTkVQTFVTX0NPTU1BTkRfUFJPRklMRV9CVVRUT05TID0gMHg3LAorCUtPTkVQTFVTX0NPTU1BTkRfTUFDUk8gPSAweDgsCisJS09ORVBMVVNfQ09NTUFORF9JTkZPID0gMHg5LAorCUtPTkVQTFVTX0NPTU1BTkRfRSA9IDB4ZSwKKwlLT05FUExVU19DT01NQU5EX1NFTlNPUiA9IDB4ZiwKKwlLT05FUExVU19DT01NQU5EX0ZJUk1XQVJFX1dSSVRFID0gMHgxYiwKKwlLT05FUExVU19DT01NQU5EX0ZJUk1XQVJFX1dSSVRFX0NPTlRST0wgPSAweDFjLAorfTsKKworZW51bSBrb25lcGx1c191c2JfY29tbWFuZHMgeworCUtPTkVQTFVTX1VTQl9DT01NQU5EX0NPTlRST0wgPSAweDMwNCwKKwlLT05FUExVU19VU0JfQ09NTUFORF9TVEFSVFVQX1BST0ZJTEUgPSAweDMwNSwKKwlLT05FUExVU19VU0JfQ09NTUFORF9QUk9GSUxFX1NFVFRJTkdTID0gMHgzMDYsCisJS09ORVBMVVNfVVNCX0NPTU1BTkRfUFJPRklMRV9CVVRUT05TID0gMHgzMDcsCisJS09ORVBMVVNfVVNCX0NPTU1BTkRfTUFDUk8gPSAweDMwOCwKKwlLT05FUExVU19VU0JfQ09NTUFORF9JTkZPID0gMHgzMDksCisJS09ORVBMVVNfVVNCX0NPTU1BTkRfVENVID0gMHgzMGMsCisJS09ORVBMVVNfVVNCX0NPTU1BTkRfRSA9IDB4MzBlLAorCUtPTkVQTFVTX1VTQl9DT01NQU5EX1NFTlNPUiA9IDB4MzBmLAorCUtPTkVQTFVTX1VTQl9DT01NQU5EX0ZJUk1XQVJFX1dSSVRFID0gMHgzMWIsCisJS09ORVBMVVNfVVNCX0NPTU1BTkRfRklSTVdBUkVfV1JJVEVfQ09OVFJPTCA9IDB4MzFjLAorfTsKKworZW51bSBrb25lcGx1c19tb3VzZV9yZXBvcnRfbnVtYmVycyB7CisJS09ORVBMVVNfTU9VU0VfUkVQT1JUX05VTUJFUl9ISUQgPSAxLAorCUtPTkVQTFVTX01PVVNFX1JFUE9SVF9OVU1CRVJfQVVESU8gPSAyLAorCUtPTkVQTFVTX01PVVNFX1JFUE9SVF9OVU1CRVJfQlVUVE9OID0gMywKK307CisKK3N0cnVjdCBrb25lcGx1c19tb3VzZV9yZXBvcnRfYnV0dG9uIHsKKwl1aW50OF90IHJlcG9ydF9udW1iZXI7IC8qIGFsd2F5cyBLT05FUExVU19NT1VTRV9SRVBPUlRfTlVNQkVSX0JVVFRPTiAqLworCXVpbnQ4X3QgemVybzE7CisJdWludDhfdCB0eXBlOworCXVpbnQ4X3QgZGF0YTE7CisJdWludDhfdCBkYXRhMjsKKwl1aW50OF90IHplcm8yOworCXVpbnQ4X3QgdW5rbm93blsyXTsKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKworZW51bSBrb25lcGx1c19tb3VzZV9yZXBvcnRfYnV0dG9uX3R5cGVzIHsKKwkvKiBkYXRhMSA9IG5ldyBwcm9maWxlIHJhbmdlIDEtNSAqLworCUtPTkVQTFVTX01PVVNFX1JFUE9SVF9CVVRUT05fVFlQRV9QUk9GSUxFID0gMHgyMCwKKworCS8qIGRhdGExID0gYnV0dG9uIG51bWJlciByYW5nZSAxLTI0OyBkYXRhMiA9IGFjdGlvbiAqLworCUtPTkVQTFVTX01PVVNFX1JFUE9SVF9CVVRUT05fVFlQRV9RVUlDS0xBVU5DSCA9IDB4NjAsCisKKwkvKiBkYXRhMSA9IGJ1dHRvbiBudW1iZXIgcmFuZ2UgMS0yNDsgZGF0YTIgPSBhY3Rpb24gKi8KKwlLT05FUExVU19NT1VTRV9SRVBPUlRfQlVUVE9OX1RZUEVfVElNRVIgPSAweDgwLAorCisJLyogZGF0YTEgPSBzZXR0aW5nIG51bWJlciByYW5nZSAxLTUgKi8KKwlLT05FUExVU19NT1VTRV9SRVBPUlRfQlVUVE9OX1RZUEVfQ1BJID0gMHhiMCwKKworCS8qIGRhdGExIGFuZCBkYXRhMiA9IHJhbmdlIDB4MS0weGIgKi8KKwlLT05FUExVU19NT1VTRV9SRVBPUlRfQlVUVE9OX1RZUEVfU0VOU0lUSVZJVFkgPSAweGMwLAorCisJLyogZGF0YTEgPSAyMiA9IG5leHQgdHJhY2suLi4KKwkgKiBkYXRhMiA9IGFjdGlvbgorCSAqLworCUtPTkVQTFVTX01PVVNFX1JFUE9SVF9CVVRUT05fVFlQRV9NVUxUSU1FRElBID0gMHhmMCwKK307CisKK2VudW0ga29uZXBsdXNfbW91c2VfcmVwb3J0X2J1dHRvbl9hY3Rpb24geworCUtPTkVQTFVTX01PVVNFX1JFUE9SVF9CVVRUT05fQUNUSU9OX1BSRVNTID0gMCwKKwlLT05FUExVU19NT1VTRV9SRVBPUlRfQlVUVE9OX0FDVElPTl9SRUxFQVNFID0gMSwKK307CisKK3N0cnVjdCBrb25lcGx1c19yb2NjYXRfcmVwb3J0IHsKKwl1aW50OF90IHR5cGU7CisJdWludDhfdCBkYXRhMTsKKwl1aW50OF90IGRhdGEyOworCXVpbnQ4X3QgcHJvZmlsZTsKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKworc3RydWN0IGtvbmVwbHVzX2RldmljZSB7CisJaW50IGFjdHVhbF9wcm9maWxlOworCisJaW50IHJvY2NhdF9jbGFpbWVkOworCWludCBjaHJkZXZfbWlub3I7CisKKwlzdHJ1Y3QgbXV0ZXgga29uZXBsdXNfbG9jazsKKworCWludCBzdGFydHVwX3Byb2ZpbGU7CisJc3RydWN0IGtvbmVwbHVzX2luZm8gaW5mbzsKKwlzdHJ1Y3Qga29uZXBsdXNfcHJvZmlsZV9zZXR0aW5ncyBwcm9maWxlX3NldHRpbmdzWzVdOworCXN0cnVjdCBrb25lcGx1c19wcm9maWxlX2J1dHRvbnMgcHJvZmlsZV9idXR0b25zWzVdOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LXB5cmEuYyBiL2RyaXZlcnMvaGlkL2hpZC1yb2NjYXQtcHlyYS5jCmluZGV4IDliZjIzMDQuLjAyYzU4ZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1yb2NjYXQtcHlyYS5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1yb2NjYXQtcHlyYS5jCkBAIC0yNyw2ICsyNywxMSBAQAogI2luY2x1ZGUgImhpZC1yb2NjYXQuaCIKICNpbmNsdWRlICJoaWQtcm9jY2F0LXB5cmEuaCIKIAorc3RhdGljIHVpbnQgcHJvZmlsZV9udW1iZXJzWzVdID0gezAsIDEsIDIsIDMsIDR9OworCisvKiBweXJhX2NsYXNzIGlzIHVzZWQgZm9yIGNyZWF0aW5nIHN5c2ZzIGF0dHJpYnV0ZXMgdmlhIHJvY2NhdCBjaGFyIGRldmljZSAqLworc3RhdGljIHN0cnVjdCBjbGFzcyAqcHlyYV9jbGFzczsKKwogc3RhdGljIHZvaWQgcHJvZmlsZV9hY3RpdmF0ZWQoc3RydWN0IHB5cmFfZGV2aWNlICpweXJhLAogCQl1bnNpZ25lZCBpbnQgbmV3X3Byb2ZpbGUpCiB7CkBAIC04Nyw5ICs5Miw4IEBACiAJCQljb250cm9sLnZhbHVlID09IDEpCiAJCQlyZXR1cm4gMDsKIAllbHNlIHsKLQkJZGV2X2VycigmdXNiX2Rldi0+ZGV2LCAicmVjZWl2ZSBjb250cm9sIHN0YXR1czogIgotCQkJCSJ1bmtub3duIHJlc3BvbnNlIDB4JXggMHgleFxuIiwKLQkJCQljb250cm9sLnJlcXVlc3QsIGNvbnRyb2wudmFsdWUpOworCQloaWRfZXJyKHVzYl9kZXYsICJyZWNlaXZlIGNvbnRyb2wgc3RhdHVzOiB1bmtub3duIHJlc3BvbnNlIDB4JXggMHgleFxuIiwKKwkJCWNvbnRyb2wucmVxdWVzdCwgY29udHJvbC52YWx1ZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIH0KQEAgLTIyMSw5ICsyMjUsMTAgQEAKIAogc3RhdGljIHNzaXplX3QgcHlyYV9zeXNmc19yZWFkX3Byb2ZpbGV4X3NldHRpbmdzKHN0cnVjdCBmaWxlICpmcCwKIAkJc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYsCi0JCWxvZmZfdCBvZmYsIHNpemVfdCBjb3VudCwgaW50IG51bWJlcikKKwkJbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KQogewotCXN0cnVjdCBkZXZpY2UgKmRldiA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGV2aWNlLCBrb2JqKTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPQorCQkJY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkZXZpY2UsIGtvYmopLT5wYXJlbnQtPnBhcmVudDsKIAlzdHJ1Y3QgcHlyYV9kZXZpY2UgKnB5cmEgPSBoaWRfZ2V0X2RydmRhdGEoZGV2X2dldF9kcnZkYXRhKGRldikpOwogCiAJaWYgKG9mZiA+PSBzaXplb2Yoc3RydWN0IHB5cmFfcHJvZmlsZV9zZXR0aW5ncykpCkBAIC0yMzMsNTggKzIzOCwxOSBAQAogCQljb3VudCA9IHNpemVvZihzdHJ1Y3QgcHlyYV9wcm9maWxlX3NldHRpbmdzKSAtIG9mZjsKIAogCW11dGV4X2xvY2soJnB5cmEtPnB5cmFfbG9jayk7Ci0JbWVtY3B5KGJ1ZiwgKChjaGFyIGNvbnN0ICopJnB5cmEtPnByb2ZpbGVfc2V0dGluZ3NbbnVtYmVyXSkgKyBvZmYsCisJbWVtY3B5KGJ1ZiwgKChjaGFyIGNvbnN0ICopJnB5cmEtPnByb2ZpbGVfc2V0dGluZ3NbKih1aW50ICopKGF0dHItPnByaXZhdGUpXSkgKyBvZmYsCiAJCQljb3VudCk7CiAJbXV0ZXhfdW5sb2NrKCZweXJhLT5weXJhX2xvY2spOwogCiAJcmV0dXJuIGNvdW50OwogfQogCi1zdGF0aWMgc3NpemVfdCBweXJhX3N5c2ZzX3JlYWRfcHJvZmlsZTFfc2V0dGluZ3Moc3RydWN0IGZpbGUgKmZwLAotCQlzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZiwKLQkJbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KQotewotCXJldHVybiBweXJhX3N5c2ZzX3JlYWRfcHJvZmlsZXhfc2V0dGluZ3MoZnAsIGtvYmosCi0JCQlhdHRyLCBidWYsIG9mZiwgY291bnQsIDApOwotfQotCi1zdGF0aWMgc3NpemVfdCBweXJhX3N5c2ZzX3JlYWRfcHJvZmlsZTJfc2V0dGluZ3Moc3RydWN0IGZpbGUgKmZwLAotCQlzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZiwKLQkJbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KQotewotCXJldHVybiBweXJhX3N5c2ZzX3JlYWRfcHJvZmlsZXhfc2V0dGluZ3MoZnAsIGtvYmosCi0JCQlhdHRyLCBidWYsIG9mZiwgY291bnQsIDEpOwotfQotCi1zdGF0aWMgc3NpemVfdCBweXJhX3N5c2ZzX3JlYWRfcHJvZmlsZTNfc2V0dGluZ3Moc3RydWN0IGZpbGUgKmZwLAotCQlzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZiwKLQkJbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KQotewotCXJldHVybiBweXJhX3N5c2ZzX3JlYWRfcHJvZmlsZXhfc2V0dGluZ3MoZnAsIGtvYmosCi0JCQlhdHRyLCBidWYsIG9mZiwgY291bnQsIDIpOwotfQotCi1zdGF0aWMgc3NpemVfdCBweXJhX3N5c2ZzX3JlYWRfcHJvZmlsZTRfc2V0dGluZ3Moc3RydWN0IGZpbGUgKmZwLAotCQlzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZiwKLQkJbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KQotewotCXJldHVybiBweXJhX3N5c2ZzX3JlYWRfcHJvZmlsZXhfc2V0dGluZ3MoZnAsIGtvYmosCi0JCQlhdHRyLCBidWYsIG9mZiwgY291bnQsIDMpOwotfQotCi1zdGF0aWMgc3NpemVfdCBweXJhX3N5c2ZzX3JlYWRfcHJvZmlsZTVfc2V0dGluZ3Moc3RydWN0IGZpbGUgKmZwLAotCQlzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZiwKLQkJbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KQotewotCXJldHVybiBweXJhX3N5c2ZzX3JlYWRfcHJvZmlsZXhfc2V0dGluZ3MoZnAsIGtvYmosCi0JCQlhdHRyLCBidWYsIG9mZiwgY291bnQsIDQpOwotfQotCiBzdGF0aWMgc3NpemVfdCBweXJhX3N5c2ZzX3JlYWRfcHJvZmlsZXhfYnV0dG9ucyhzdHJ1Y3QgZmlsZSAqZnAsCiAJCXN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmLAotCQlsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQsIGludCBudW1iZXIpCisJCWxvZmZfdCBvZmYsIHNpemVfdCBjb3VudCkKIHsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRldmljZSwga29iaik7CisJc3RydWN0IGRldmljZSAqZGV2ID0KKwkJCWNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGV2aWNlLCBrb2JqKS0+cGFyZW50LT5wYXJlbnQ7CiAJc3RydWN0IHB5cmFfZGV2aWNlICpweXJhID0gaGlkX2dldF9kcnZkYXRhKGRldl9nZXRfZHJ2ZGF0YShkZXYpKTsKIAogCWlmIChvZmYgPj0gc2l6ZW9mKHN0cnVjdCBweXJhX3Byb2ZpbGVfYnV0dG9ucykpCkBAIC0yOTQsNTggKzI2MCwxOSBAQAogCQljb3VudCA9IHNpemVvZihzdHJ1Y3QgcHlyYV9wcm9maWxlX2J1dHRvbnMpIC0gb2ZmOwogCiAJbXV0ZXhfbG9jaygmcHlyYS0+cHlyYV9sb2NrKTsKLQltZW1jcHkoYnVmLCAoKGNoYXIgY29uc3QgKikmcHlyYS0+cHJvZmlsZV9idXR0b25zW251bWJlcl0pICsgb2ZmLAorCW1lbWNweShidWYsICgoY2hhciBjb25zdCAqKSZweXJhLT5wcm9maWxlX2J1dHRvbnNbKih1aW50ICopKGF0dHItPnByaXZhdGUpXSkgKyBvZmYsCiAJCQljb3VudCk7CiAJbXV0ZXhfdW5sb2NrKCZweXJhLT5weXJhX2xvY2spOwogCiAJcmV0dXJuIGNvdW50OwogfQogCi1zdGF0aWMgc3NpemVfdCBweXJhX3N5c2ZzX3JlYWRfcHJvZmlsZTFfYnV0dG9ucyhzdHJ1Y3QgZmlsZSAqZnAsCi0JCXN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmLAotCQlsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpCi17Ci0JcmV0dXJuIHB5cmFfc3lzZnNfcmVhZF9wcm9maWxleF9idXR0b25zKGZwLCBrb2JqLAotCQkJYXR0ciwgYnVmLCBvZmYsIGNvdW50LCAwKTsKLX0KLQotc3RhdGljIHNzaXplX3QgcHlyYV9zeXNmc19yZWFkX3Byb2ZpbGUyX2J1dHRvbnMoc3RydWN0IGZpbGUgKmZwLAotCQlzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZiwKLQkJbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KQotewotCXJldHVybiBweXJhX3N5c2ZzX3JlYWRfcHJvZmlsZXhfYnV0dG9ucyhmcCwga29iaiwKLQkJCWF0dHIsIGJ1Ziwgb2ZmLCBjb3VudCwgMSk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHB5cmFfc3lzZnNfcmVhZF9wcm9maWxlM19idXR0b25zKHN0cnVjdCBmaWxlICpmcCwKLQkJc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYsCi0JCWxvZmZfdCBvZmYsIHNpemVfdCBjb3VudCkKLXsKLQlyZXR1cm4gcHlyYV9zeXNmc19yZWFkX3Byb2ZpbGV4X2J1dHRvbnMoZnAsIGtvYmosCi0JCQlhdHRyLCBidWYsIG9mZiwgY291bnQsIDIpOwotfQotCi1zdGF0aWMgc3NpemVfdCBweXJhX3N5c2ZzX3JlYWRfcHJvZmlsZTRfYnV0dG9ucyhzdHJ1Y3QgZmlsZSAqZnAsCi0JCXN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmLAotCQlsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpCi17Ci0JcmV0dXJuIHB5cmFfc3lzZnNfcmVhZF9wcm9maWxleF9idXR0b25zKGZwLCBrb2JqLAotCQkJYXR0ciwgYnVmLCBvZmYsIGNvdW50LCAzKTsKLX0KLQotc3RhdGljIHNzaXplX3QgcHlyYV9zeXNmc19yZWFkX3Byb2ZpbGU1X2J1dHRvbnMoc3RydWN0IGZpbGUgKmZwLAotCQlzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZiwKLQkJbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KQotewotCXJldHVybiBweXJhX3N5c2ZzX3JlYWRfcHJvZmlsZXhfYnV0dG9ucyhmcCwga29iaiwKLQkJCWF0dHIsIGJ1Ziwgb2ZmLCBjb3VudCwgNCk7Ci19Ci0KIHN0YXRpYyBzc2l6ZV90IHB5cmFfc3lzZnNfd3JpdGVfcHJvZmlsZV9zZXR0aW5ncyhzdHJ1Y3QgZmlsZSAqZnAsCiAJCXN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmLAogCQlsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkZXZpY2UsIGtvYmopOworCXN0cnVjdCBkZXZpY2UgKmRldiA9CisJCQljb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRldmljZSwga29iaiktPnBhcmVudC0+cGFyZW50OwogCXN0cnVjdCBweXJhX2RldmljZSAqcHlyYSA9IGhpZF9nZXRfZHJ2ZGF0YShkZXZfZ2V0X2RydmRhdGEoZGV2KSk7CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KHRvX3VzYl9pbnRlcmZhY2UoZGV2KSk7CiAJaW50IHJldHZhbCA9IDA7CkBAIC0zODEsNyArMzA4LDggQEAKIAkJc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYsCiAJCWxvZmZfdCBvZmYsIHNpemVfdCBjb3VudCkKIHsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRldmljZSwga29iaik7CisJc3RydWN0IGRldmljZSAqZGV2ID0KKwkJCWNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGV2aWNlLCBrb2JqKS0+cGFyZW50LT5wYXJlbnQ7CiAJc3RydWN0IHB5cmFfZGV2aWNlICpweXJhID0gaGlkX2dldF9kcnZkYXRhKGRldl9nZXRfZHJ2ZGF0YShkZXYpKTsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiA9IGludGVyZmFjZV90b191c2JkZXYodG9fdXNiX2ludGVyZmFjZShkZXYpKTsKIAlpbnQgcmV0dmFsID0gMDsKQEAgLTQxNyw3ICszNDUsOCBAQAogCQlzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZiwKIAkJbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KQogewotCXN0cnVjdCBkZXZpY2UgKmRldiA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGV2aWNlLCBrb2JqKTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPQorCQkJY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkZXZpY2UsIGtvYmopLT5wYXJlbnQtPnBhcmVudDsKIAlzdHJ1Y3QgcHlyYV9kZXZpY2UgKnB5cmEgPSBoaWRfZ2V0X2RydmRhdGEoZGV2X2dldF9kcnZkYXRhKGRldikpOwogCiAJaWYgKG9mZiA+PSBzaXplb2Yoc3RydWN0IHB5cmFfc2V0dGluZ3MpKQpAQCAtNDM3LDcgKzM2Niw4IEBACiAJCXN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmLAogCQlsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkZXZpY2UsIGtvYmopOworCXN0cnVjdCBkZXZpY2UgKmRldiA9CisJCQljb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRldmljZSwga29iaiktPnBhcmVudC0+cGFyZW50OwogCXN0cnVjdCBweXJhX2RldmljZSAqcHlyYSA9IGhpZF9nZXRfZHJ2ZGF0YShkZXZfZ2V0X2RydmRhdGEoZGV2KSk7CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KHRvX3VzYl9pbnRlcmZhY2UoZGV2KSk7CiAJaW50IHJldHZhbCA9IDA7CkBAIC00NjksMjU1ICszOTksMTI1IEBACiBzdGF0aWMgc3NpemVfdCBweXJhX3N5c2ZzX3Nob3dfYWN0dWFsX2NwaShzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IHB5cmFfZGV2aWNlICpweXJhID0gaGlkX2dldF9kcnZkYXRhKGRldl9nZXRfZHJ2ZGF0YShkZXYpKTsKKwlzdHJ1Y3QgcHlyYV9kZXZpY2UgKnB5cmEgPQorCQkJaGlkX2dldF9kcnZkYXRhKGRldl9nZXRfZHJ2ZGF0YShkZXYtPnBhcmVudC0+cGFyZW50KSk7CiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIHB5cmEtPmFjdHVhbF9jcGkpOwogfQogCiBzdGF0aWMgc3NpemVfdCBweXJhX3N5c2ZzX3Nob3dfYWN0dWFsX3Byb2ZpbGUoc3RydWN0IGRldmljZSAqZGV2LAogCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCBweXJhX2RldmljZSAqcHlyYSA9IGhpZF9nZXRfZHJ2ZGF0YShkZXZfZ2V0X2RydmRhdGEoZGV2KSk7CisJc3RydWN0IHB5cmFfZGV2aWNlICpweXJhID0KKwkJCWhpZF9nZXRfZHJ2ZGF0YShkZXZfZ2V0X2RydmRhdGEoZGV2LT5wYXJlbnQtPnBhcmVudCkpOwogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCBweXJhLT5hY3R1YWxfcHJvZmlsZSk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHB5cmFfc3lzZnNfc2hvd19maXJtd2FyZV92ZXJzaW9uKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgcHlyYV9kZXZpY2UgKnB5cmEgPSBoaWRfZ2V0X2RydmRhdGEoZGV2X2dldF9kcnZkYXRhKGRldikpOworCXN0cnVjdCBweXJhX2RldmljZSAqcHlyYSA9CisJCQloaWRfZ2V0X2RydmRhdGEoZGV2X2dldF9kcnZkYXRhKGRldi0+cGFyZW50LT5wYXJlbnQpKTsKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwgcHlyYS0+ZmlybXdhcmVfdmVyc2lvbik7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHB5cmFfc3lzZnNfc2hvd19zdGFydHVwX3Byb2ZpbGUoc3RydWN0IGRldmljZSAqZGV2LAogCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCBweXJhX2RldmljZSAqcHlyYSA9IGhpZF9nZXRfZHJ2ZGF0YShkZXZfZ2V0X2RydmRhdGEoZGV2KSk7CisJc3RydWN0IHB5cmFfZGV2aWNlICpweXJhID0KKwkJCWhpZF9nZXRfZHJ2ZGF0YShkZXZfZ2V0X2RydmRhdGEoZGV2LT5wYXJlbnQtPnBhcmVudCkpOwogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCBweXJhLT5zZXR0aW5ncy5zdGFydHVwX3Byb2ZpbGUpOwogfQogCi1zdGF0aWMgREVWSUNFX0FUVFIoYWN0dWFsX2NwaSwgMDQ0MCwgcHlyYV9zeXNmc19zaG93X2FjdHVhbF9jcGksIE5VTEwpOwotCi1zdGF0aWMgREVWSUNFX0FUVFIoYWN0dWFsX3Byb2ZpbGUsIDA0NDAsIHB5cmFfc3lzZnNfc2hvd19hY3R1YWxfcHJvZmlsZSwgTlVMTCk7Ci0KLXN0YXRpYyBERVZJQ0VfQVRUUihmaXJtd2FyZV92ZXJzaW9uLCAwNDQwLAotCQlweXJhX3N5c2ZzX3Nob3dfZmlybXdhcmVfdmVyc2lvbiwgTlVMTCk7Ci0KLXN0YXRpYyBERVZJQ0VfQVRUUihzdGFydHVwX3Byb2ZpbGUsIDA0NDAsCi0JCXB5cmFfc3lzZnNfc2hvd19zdGFydHVwX3Byb2ZpbGUsIE5VTEwpOwotCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqcHlyYV9hdHRyaWJ1dGVzW10gPSB7Ci0JCSZkZXZfYXR0cl9hY3R1YWxfY3BpLmF0dHIsCi0JCSZkZXZfYXR0cl9hY3R1YWxfcHJvZmlsZS5hdHRyLAotCQkmZGV2X2F0dHJfZmlybXdhcmVfdmVyc2lvbi5hdHRyLAotCQkmZGV2X2F0dHJfc3RhcnR1cF9wcm9maWxlLmF0dHIsCi0JCU5VTEwKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBweXJhX2F0dHJpYnV0ZXNbXSA9IHsKKwlfX0FUVFIoYWN0dWFsX2NwaSwgMDQ0MCwgcHlyYV9zeXNmc19zaG93X2FjdHVhbF9jcGksIE5VTEwpLAorCV9fQVRUUihhY3R1YWxfcHJvZmlsZSwgMDQ0MCwgcHlyYV9zeXNmc19zaG93X2FjdHVhbF9wcm9maWxlLCBOVUxMKSwKKwlfX0FUVFIoZmlybXdhcmVfdmVyc2lvbiwgMDQ0MCwKKwkJCXB5cmFfc3lzZnNfc2hvd19maXJtd2FyZV92ZXJzaW9uLCBOVUxMKSwKKwlfX0FUVFIoc3RhcnR1cF9wcm9maWxlLCAwNDQwLAorCQkJcHlyYV9zeXNmc19zaG93X3N0YXJ0dXBfcHJvZmlsZSwgTlVMTCksCisJX19BVFRSX05VTEwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHB5cmFfYXR0cmlidXRlX2dyb3VwID0gewotCQkuYXR0cnMgPSBweXJhX2F0dHJpYnV0ZXMKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSBweXJhX3Byb2ZpbGVfc2V0dGluZ3NfYXR0ciA9IHsKK3N0YXRpYyBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSBweXJhX2Jpbl9hdHRyaWJ1dGVzW10gPSB7CisJewogCQkuYXR0ciA9IHsgLm5hbWUgPSAicHJvZmlsZV9zZXR0aW5ncyIsIC5tb2RlID0gMDIyMCB9LAogCQkuc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcHlyYV9wcm9maWxlX3NldHRpbmdzKSwKIAkJLndyaXRlID0gcHlyYV9zeXNmc193cml0ZV9wcm9maWxlX3NldHRpbmdzCi19OwotCi1zdGF0aWMgc3RydWN0IGJpbl9hdHRyaWJ1dGUgcHlyYV9wcm9maWxlMV9zZXR0aW5nc19hdHRyID0geworCX0sCisJewogCQkuYXR0ciA9IHsgLm5hbWUgPSAicHJvZmlsZTFfc2V0dGluZ3MiLCAubW9kZSA9IDA0NDAgfSwKIAkJLnNpemUgPSBzaXplb2Yoc3RydWN0IHB5cmFfcHJvZmlsZV9zZXR0aW5ncyksCi0JCS5yZWFkID0gcHlyYV9zeXNmc19yZWFkX3Byb2ZpbGUxX3NldHRpbmdzCi19OwotCi1zdGF0aWMgc3RydWN0IGJpbl9hdHRyaWJ1dGUgcHlyYV9wcm9maWxlMl9zZXR0aW5nc19hdHRyID0geworCQkucmVhZCA9IHB5cmFfc3lzZnNfcmVhZF9wcm9maWxleF9zZXR0aW5ncywKKwkJLnByaXZhdGUgPSAmcHJvZmlsZV9udW1iZXJzWzBdCisJfSwKKwl7CiAJCS5hdHRyID0geyAubmFtZSA9ICJwcm9maWxlMl9zZXR0aW5ncyIsIC5tb2RlID0gMDQ0MCB9LAogCQkuc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcHlyYV9wcm9maWxlX3NldHRpbmdzKSwKLQkJLnJlYWQgPSBweXJhX3N5c2ZzX3JlYWRfcHJvZmlsZTJfc2V0dGluZ3MKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSBweXJhX3Byb2ZpbGUzX3NldHRpbmdzX2F0dHIgPSB7CisJCS5yZWFkID0gcHlyYV9zeXNmc19yZWFkX3Byb2ZpbGV4X3NldHRpbmdzLAorCQkucHJpdmF0ZSA9ICZwcm9maWxlX251bWJlcnNbMV0KKwl9LAorCXsKIAkJLmF0dHIgPSB7IC5uYW1lID0gInByb2ZpbGUzX3NldHRpbmdzIiwgLm1vZGUgPSAwNDQwIH0sCiAJCS5zaXplID0gc2l6ZW9mKHN0cnVjdCBweXJhX3Byb2ZpbGVfc2V0dGluZ3MpLAotCQkucmVhZCA9IHB5cmFfc3lzZnNfcmVhZF9wcm9maWxlM19zZXR0aW5ncwotfTsKLQotc3RhdGljIHN0cnVjdCBiaW5fYXR0cmlidXRlIHB5cmFfcHJvZmlsZTRfc2V0dGluZ3NfYXR0ciA9IHsKKwkJLnJlYWQgPSBweXJhX3N5c2ZzX3JlYWRfcHJvZmlsZXhfc2V0dGluZ3MsCisJCS5wcml2YXRlID0gJnByb2ZpbGVfbnVtYmVyc1syXQorCX0sCisJewogCQkuYXR0ciA9IHsgLm5hbWUgPSAicHJvZmlsZTRfc2V0dGluZ3MiLCAubW9kZSA9IDA0NDAgfSwKIAkJLnNpemUgPSBzaXplb2Yoc3RydWN0IHB5cmFfcHJvZmlsZV9zZXR0aW5ncyksCi0JCS5yZWFkID0gcHlyYV9zeXNmc19yZWFkX3Byb2ZpbGU0X3NldHRpbmdzCi19OwotCi1zdGF0aWMgc3RydWN0IGJpbl9hdHRyaWJ1dGUgcHlyYV9wcm9maWxlNV9zZXR0aW5nc19hdHRyID0geworCQkucmVhZCA9IHB5cmFfc3lzZnNfcmVhZF9wcm9maWxleF9zZXR0aW5ncywKKwkJLnByaXZhdGUgPSAmcHJvZmlsZV9udW1iZXJzWzNdCisJfSwKKwl7CiAJCS5hdHRyID0geyAubmFtZSA9ICJwcm9maWxlNV9zZXR0aW5ncyIsIC5tb2RlID0gMDQ0MCB9LAogCQkuc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcHlyYV9wcm9maWxlX3NldHRpbmdzKSwKLQkJLnJlYWQgPSBweXJhX3N5c2ZzX3JlYWRfcHJvZmlsZTVfc2V0dGluZ3MKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSBweXJhX3Byb2ZpbGVfYnV0dG9uc19hdHRyID0geworCQkucmVhZCA9IHB5cmFfc3lzZnNfcmVhZF9wcm9maWxleF9zZXR0aW5ncywKKwkJLnByaXZhdGUgPSAmcHJvZmlsZV9udW1iZXJzWzRdCisJfSwKKwl7CiAJCS5hdHRyID0geyAubmFtZSA9ICJwcm9maWxlX2J1dHRvbnMiLCAubW9kZSA9IDAyMjAgfSwKIAkJLnNpemUgPSBzaXplb2Yoc3RydWN0IHB5cmFfcHJvZmlsZV9idXR0b25zKSwKIAkJLndyaXRlID0gcHlyYV9zeXNmc193cml0ZV9wcm9maWxlX2J1dHRvbnMKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSBweXJhX3Byb2ZpbGUxX2J1dHRvbnNfYXR0ciA9IHsKKwl9LAorCXsKIAkJLmF0dHIgPSB7IC5uYW1lID0gInByb2ZpbGUxX2J1dHRvbnMiLCAubW9kZSA9IDA0NDAgfSwKIAkJLnNpemUgPSBzaXplb2Yoc3RydWN0IHB5cmFfcHJvZmlsZV9idXR0b25zKSwKLQkJLnJlYWQgPSBweXJhX3N5c2ZzX3JlYWRfcHJvZmlsZTFfYnV0dG9ucwotfTsKLQotc3RhdGljIHN0cnVjdCBiaW5fYXR0cmlidXRlIHB5cmFfcHJvZmlsZTJfYnV0dG9uc19hdHRyID0geworCQkucmVhZCA9IHB5cmFfc3lzZnNfcmVhZF9wcm9maWxleF9idXR0b25zLAorCQkucHJpdmF0ZSA9ICZwcm9maWxlX251bWJlcnNbMF0KKwl9LAorCXsKIAkJLmF0dHIgPSB7IC5uYW1lID0gInByb2ZpbGUyX2J1dHRvbnMiLCAubW9kZSA9IDA0NDAgfSwKIAkJLnNpemUgPSBzaXplb2Yoc3RydWN0IHB5cmFfcHJvZmlsZV9idXR0b25zKSwKLQkJLnJlYWQgPSBweXJhX3N5c2ZzX3JlYWRfcHJvZmlsZTJfYnV0dG9ucwotfTsKLQotc3RhdGljIHN0cnVjdCBiaW5fYXR0cmlidXRlIHB5cmFfcHJvZmlsZTNfYnV0dG9uc19hdHRyID0geworCQkucmVhZCA9IHB5cmFfc3lzZnNfcmVhZF9wcm9maWxleF9idXR0b25zLAorCQkucHJpdmF0ZSA9ICZwcm9maWxlX251bWJlcnNbMV0KKwl9LAorCXsKIAkJLmF0dHIgPSB7IC5uYW1lID0gInByb2ZpbGUzX2J1dHRvbnMiLCAubW9kZSA9IDA0NDAgfSwKIAkJLnNpemUgPSBzaXplb2Yoc3RydWN0IHB5cmFfcHJvZmlsZV9idXR0b25zKSwKLQkJLnJlYWQgPSBweXJhX3N5c2ZzX3JlYWRfcHJvZmlsZTNfYnV0dG9ucwotfTsKLQotc3RhdGljIHN0cnVjdCBiaW5fYXR0cmlidXRlIHB5cmFfcHJvZmlsZTRfYnV0dG9uc19hdHRyID0geworCQkucmVhZCA9IHB5cmFfc3lzZnNfcmVhZF9wcm9maWxleF9idXR0b25zLAorCQkucHJpdmF0ZSA9ICZwcm9maWxlX251bWJlcnNbMl0KKwl9LAorCXsKIAkJLmF0dHIgPSB7IC5uYW1lID0gInByb2ZpbGU0X2J1dHRvbnMiLCAubW9kZSA9IDA0NDAgfSwKIAkJLnNpemUgPSBzaXplb2Yoc3RydWN0IHB5cmFfcHJvZmlsZV9idXR0b25zKSwKLQkJLnJlYWQgPSBweXJhX3N5c2ZzX3JlYWRfcHJvZmlsZTRfYnV0dG9ucwotfTsKLQotc3RhdGljIHN0cnVjdCBiaW5fYXR0cmlidXRlIHB5cmFfcHJvZmlsZTVfYnV0dG9uc19hdHRyID0geworCQkucmVhZCA9IHB5cmFfc3lzZnNfcmVhZF9wcm9maWxleF9idXR0b25zLAorCQkucHJpdmF0ZSA9ICZwcm9maWxlX251bWJlcnNbM10KKwl9LAorCXsKIAkJLmF0dHIgPSB7IC5uYW1lID0gInByb2ZpbGU1X2J1dHRvbnMiLCAubW9kZSA9IDA0NDAgfSwKIAkJLnNpemUgPSBzaXplb2Yoc3RydWN0IHB5cmFfcHJvZmlsZV9idXR0b25zKSwKLQkJLnJlYWQgPSBweXJhX3N5c2ZzX3JlYWRfcHJvZmlsZTVfYnV0dG9ucwotfTsKLQotc3RhdGljIHN0cnVjdCBiaW5fYXR0cmlidXRlIHB5cmFfc2V0dGluZ3NfYXR0ciA9IHsKKwkJLnJlYWQgPSBweXJhX3N5c2ZzX3JlYWRfcHJvZmlsZXhfYnV0dG9ucywKKwkJLnByaXZhdGUgPSAmcHJvZmlsZV9udW1iZXJzWzRdCisJfSwKKwl7CiAJCS5hdHRyID0geyAubmFtZSA9ICJzZXR0aW5ncyIsIC5tb2RlID0gMDY2MCB9LAogCQkuc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcHlyYV9zZXR0aW5ncyksCiAJCS5yZWFkID0gcHlyYV9zeXNmc19yZWFkX3NldHRpbmdzLAogCQkud3JpdGUgPSBweXJhX3N5c2ZzX3dyaXRlX3NldHRpbmdzCisJfSwKKwlfX0FUVFJfTlVMTAogfTsKIAotc3RhdGljIGludCBweXJhX2NyZWF0ZV9zeXNmc19hdHRyaWJ1dGVzKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQotewotCWludCByZXR2YWw7Ci0KLQlyZXR2YWwgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmludGYtPmRldi5rb2JqLCAmcHlyYV9hdHRyaWJ1dGVfZ3JvdXApOwotCWlmIChyZXR2YWwpCi0JCWdvdG8gZXhpdF8xOwotCi0JcmV0dmFsID0gc3lzZnNfY3JlYXRlX2Jpbl9maWxlKCZpbnRmLT5kZXYua29iaiwKLQkJCSZweXJhX3Byb2ZpbGVfc2V0dGluZ3NfYXR0cik7Ci0JaWYgKHJldHZhbCkKLQkJZ290byBleGl0XzI7Ci0KLQlyZXR2YWwgPSBzeXNmc19jcmVhdGVfYmluX2ZpbGUoJmludGYtPmRldi5rb2JqLAotCQkJJnB5cmFfcHJvZmlsZTFfc2V0dGluZ3NfYXR0cik7Ci0JaWYgKHJldHZhbCkKLQkJZ290byBleGl0XzM7Ci0KLQlyZXR2YWwgPSBzeXNmc19jcmVhdGVfYmluX2ZpbGUoJmludGYtPmRldi5rb2JqLAotCQkJJnB5cmFfcHJvZmlsZTJfc2V0dGluZ3NfYXR0cik7Ci0JaWYgKHJldHZhbCkKLQkJZ290byBleGl0XzQ7Ci0KLQlyZXR2YWwgPSBzeXNmc19jcmVhdGVfYmluX2ZpbGUoJmludGYtPmRldi5rb2JqLAotCQkJJnB5cmFfcHJvZmlsZTNfc2V0dGluZ3NfYXR0cik7Ci0JaWYgKHJldHZhbCkKLQkJZ290byBleGl0XzU7Ci0KLQlyZXR2YWwgPSBzeXNmc19jcmVhdGVfYmluX2ZpbGUoJmludGYtPmRldi5rb2JqLAotCQkJJnB5cmFfcHJvZmlsZTRfc2V0dGluZ3NfYXR0cik7Ci0JaWYgKHJldHZhbCkKLQkJZ290byBleGl0XzY7Ci0KLQlyZXR2YWwgPSBzeXNmc19jcmVhdGVfYmluX2ZpbGUoJmludGYtPmRldi5rb2JqLAotCQkJJnB5cmFfcHJvZmlsZTVfc2V0dGluZ3NfYXR0cik7Ci0JaWYgKHJldHZhbCkKLQkJZ290byBleGl0Xzc7Ci0KLQlyZXR2YWwgPSBzeXNmc19jcmVhdGVfYmluX2ZpbGUoJmludGYtPmRldi5rb2JqLAotCQkJJnB5cmFfcHJvZmlsZV9idXR0b25zX2F0dHIpOwotCWlmIChyZXR2YWwpCi0JCWdvdG8gZXhpdF84OwotCi0JcmV0dmFsID0gc3lzZnNfY3JlYXRlX2Jpbl9maWxlKCZpbnRmLT5kZXYua29iaiwKLQkJCSZweXJhX3Byb2ZpbGUxX2J1dHRvbnNfYXR0cik7Ci0JaWYgKHJldHZhbCkKLQkJZ290byBleGl0Xzk7Ci0KLQlyZXR2YWwgPSBzeXNmc19jcmVhdGVfYmluX2ZpbGUoJmludGYtPmRldi5rb2JqLAotCQkJJnB5cmFfcHJvZmlsZTJfYnV0dG9uc19hdHRyKTsKLQlpZiAocmV0dmFsKQotCQlnb3RvIGV4aXRfMTA7Ci0KLQlyZXR2YWwgPSBzeXNmc19jcmVhdGVfYmluX2ZpbGUoJmludGYtPmRldi5rb2JqLAotCQkJJnB5cmFfcHJvZmlsZTNfYnV0dG9uc19hdHRyKTsKLQlpZiAocmV0dmFsKQotCQlnb3RvIGV4aXRfMTE7Ci0KLQlyZXR2YWwgPSBzeXNmc19jcmVhdGVfYmluX2ZpbGUoJmludGYtPmRldi5rb2JqLAotCQkJJnB5cmFfcHJvZmlsZTRfYnV0dG9uc19hdHRyKTsKLQlpZiAocmV0dmFsKQotCQlnb3RvIGV4aXRfMTI7Ci0KLQlyZXR2YWwgPSBzeXNmc19jcmVhdGVfYmluX2ZpbGUoJmludGYtPmRldi5rb2JqLAotCQkJJnB5cmFfcHJvZmlsZTVfYnV0dG9uc19hdHRyKTsKLQlpZiAocmV0dmFsKQotCQlnb3RvIGV4aXRfMTM7Ci0KLQlyZXR2YWwgPSBzeXNmc19jcmVhdGVfYmluX2ZpbGUoJmludGYtPmRldi5rb2JqLAotCQkJJnB5cmFfc2V0dGluZ3NfYXR0cik7Ci0JaWYgKHJldHZhbCkKLQkJZ290byBleGl0XzE0OwotCi0JcmV0dXJuIDA7Ci0KLWV4aXRfMTQ6Ci0Jc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKCZpbnRmLT5kZXYua29iaiwgJnB5cmFfcHJvZmlsZTVfYnV0dG9uc19hdHRyKTsKLWV4aXRfMTM6Ci0Jc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKCZpbnRmLT5kZXYua29iaiwgJnB5cmFfcHJvZmlsZTRfYnV0dG9uc19hdHRyKTsKLWV4aXRfMTI6Ci0Jc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKCZpbnRmLT5kZXYua29iaiwgJnB5cmFfcHJvZmlsZTNfYnV0dG9uc19hdHRyKTsKLWV4aXRfMTE6Ci0Jc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKCZpbnRmLT5kZXYua29iaiwgJnB5cmFfcHJvZmlsZTJfYnV0dG9uc19hdHRyKTsKLWV4aXRfMTA6Ci0Jc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKCZpbnRmLT5kZXYua29iaiwgJnB5cmFfcHJvZmlsZTFfYnV0dG9uc19hdHRyKTsKLWV4aXRfOToKLQlzeXNmc19yZW1vdmVfYmluX2ZpbGUoJmludGYtPmRldi5rb2JqLCAmcHlyYV9wcm9maWxlX2J1dHRvbnNfYXR0cik7Ci1leGl0Xzg6Ci0Jc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKCZpbnRmLT5kZXYua29iaiwgJnB5cmFfcHJvZmlsZTVfc2V0dGluZ3NfYXR0cik7Ci1leGl0Xzc6Ci0Jc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKCZpbnRmLT5kZXYua29iaiwgJnB5cmFfcHJvZmlsZTRfc2V0dGluZ3NfYXR0cik7Ci1leGl0XzY6Ci0Jc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKCZpbnRmLT5kZXYua29iaiwgJnB5cmFfcHJvZmlsZTNfc2V0dGluZ3NfYXR0cik7Ci1leGl0XzU6Ci0Jc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKCZpbnRmLT5kZXYua29iaiwgJnB5cmFfcHJvZmlsZTJfc2V0dGluZ3NfYXR0cik7Ci1leGl0XzQ6Ci0Jc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKCZpbnRmLT5kZXYua29iaiwgJnB5cmFfcHJvZmlsZTFfc2V0dGluZ3NfYXR0cik7Ci1leGl0XzM6Ci0Jc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKCZpbnRmLT5kZXYua29iaiwgJnB5cmFfcHJvZmlsZV9zZXR0aW5nc19hdHRyKTsKLWV4aXRfMjoKLQlzeXNmc19yZW1vdmVfZ3JvdXAoJmludGYtPmRldi5rb2JqLCAmcHlyYV9hdHRyaWJ1dGVfZ3JvdXApOwotZXhpdF8xOgotCXJldHVybiByZXR2YWw7Ci19Ci0KLXN0YXRpYyB2b2lkIHB5cmFfcmVtb3ZlX3N5c2ZzX2F0dHJpYnV0ZXMoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCi17Ci0Jc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKCZpbnRmLT5kZXYua29iaiwgJnB5cmFfc2V0dGluZ3NfYXR0cik7Ci0Jc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKCZpbnRmLT5kZXYua29iaiwgJnB5cmFfcHJvZmlsZTVfYnV0dG9uc19hdHRyKTsKLQlzeXNmc19yZW1vdmVfYmluX2ZpbGUoJmludGYtPmRldi5rb2JqLCAmcHlyYV9wcm9maWxlNF9idXR0b25zX2F0dHIpOwotCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZSgmaW50Zi0+ZGV2LmtvYmosICZweXJhX3Byb2ZpbGUzX2J1dHRvbnNfYXR0cik7Ci0Jc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKCZpbnRmLT5kZXYua29iaiwgJnB5cmFfcHJvZmlsZTJfYnV0dG9uc19hdHRyKTsKLQlzeXNmc19yZW1vdmVfYmluX2ZpbGUoJmludGYtPmRldi5rb2JqLCAmcHlyYV9wcm9maWxlMV9idXR0b25zX2F0dHIpOwotCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZSgmaW50Zi0+ZGV2LmtvYmosICZweXJhX3Byb2ZpbGVfYnV0dG9uc19hdHRyKTsKLQlzeXNmc19yZW1vdmVfYmluX2ZpbGUoJmludGYtPmRldi5rb2JqLCAmcHlyYV9wcm9maWxlNV9zZXR0aW5nc19hdHRyKTsKLQlzeXNmc19yZW1vdmVfYmluX2ZpbGUoJmludGYtPmRldi5rb2JqLCAmcHlyYV9wcm9maWxlNF9zZXR0aW5nc19hdHRyKTsKLQlzeXNmc19yZW1vdmVfYmluX2ZpbGUoJmludGYtPmRldi5rb2JqLCAmcHlyYV9wcm9maWxlM19zZXR0aW5nc19hdHRyKTsKLQlzeXNmc19yZW1vdmVfYmluX2ZpbGUoJmludGYtPmRldi5rb2JqLCAmcHlyYV9wcm9maWxlMl9zZXR0aW5nc19hdHRyKTsKLQlzeXNmc19yZW1vdmVfYmluX2ZpbGUoJmludGYtPmRldi5rb2JqLCAmcHlyYV9wcm9maWxlMV9zZXR0aW5nc19hdHRyKTsKLQlzeXNmc19yZW1vdmVfYmluX2ZpbGUoJmludGYtPmRldi5rb2JqLCAmcHlyYV9wcm9maWxlX3NldHRpbmdzX2F0dHIpOwotCXN5c2ZzX3JlbW92ZV9ncm91cCgmaW50Zi0+ZGV2LmtvYmosICZweXJhX2F0dHJpYnV0ZV9ncm91cCk7Ci19Ci0KIHN0YXRpYyBpbnQgcHlyYV9pbml0X3B5cmFfZGV2aWNlX3N0cnVjdChzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiwKIAkJc3RydWN0IHB5cmFfZGV2aWNlICpweXJhKQogewpAQCAtNzcwLDMxICs1NzAsMjQgQEAKIAogCQlweXJhID0ga3phbGxvYyhzaXplb2YoKnB5cmEpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFweXJhKSB7Ci0JCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJjYW4ndCBhbGxvYyBkZXZpY2UgZGVzY3JpcHRvclxuIik7CisJCQloaWRfZXJyKGhkZXYsICJjYW4ndCBhbGxvYyBkZXZpY2UgZGVzY3JpcHRvclxuIik7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCQloaWRfc2V0X2RydmRhdGEoaGRldiwgcHlyYSk7CiAKIAkJcmV0dmFsID0gcHlyYV9pbml0X3B5cmFfZGV2aWNlX3N0cnVjdCh1c2JfZGV2LCBweXJhKTsKIAkJaWYgKHJldHZhbCkgewotCQkJZGV2X2VycigmaGRldi0+ZGV2LAotCQkJCQkiY291bGRuJ3QgaW5pdCBzdHJ1Y3QgcHlyYV9kZXZpY2VcbiIpOworCQkJaGlkX2VycihoZGV2LCAiY291bGRuJ3QgaW5pdCBzdHJ1Y3QgcHlyYV9kZXZpY2VcbiIpOwogCQkJZ290byBleGl0X2ZyZWU7CiAJCX0KIAotCQlyZXR2YWwgPSByb2NjYXRfY29ubmVjdChoZGV2KTsKKwkJcmV0dmFsID0gcm9jY2F0X2Nvbm5lY3QocHlyYV9jbGFzcywgaGRldik7CiAJCWlmIChyZXR2YWwgPCAwKSB7Ci0JCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJjb3VsZG4ndCBpbml0IGNoYXIgZGV2XG4iKTsKKwkJCWhpZF9lcnIoaGRldiwgImNvdWxkbid0IGluaXQgY2hhciBkZXZcbiIpOwogCQl9IGVsc2UgewogCQkJcHlyYS0+Y2hyZGV2X21pbm9yID0gcmV0dmFsOwogCQkJcHlyYS0+cm9jY2F0X2NsYWltZWQgPSAxOwogCQl9Ci0KLQkJcmV0dmFsID0gcHlyYV9jcmVhdGVfc3lzZnNfYXR0cmlidXRlcyhpbnRmKTsKLQkJaWYgKHJldHZhbCkgewotCQkJZGV2X2VycigmaGRldi0+ZGV2LCAiY2Fubm90IGNyZWF0ZSBzeXNmcyBmaWxlc1xuIik7Ci0JCQlnb3RvIGV4aXRfZnJlZTsKLQkJfQogCX0gZWxzZSB7CiAJCWhpZF9zZXRfZHJ2ZGF0YShoZGV2LCBOVUxMKTsKIAl9CkBAIC04MTIsNyArNjA1LDYgQEAKIAogCWlmIChpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlUHJvdG9jb2wKIAkJCT09IFVTQl9JTlRFUkZBQ0VfUFJPVE9DT0xfTU9VU0UpIHsKLQkJcHlyYV9yZW1vdmVfc3lzZnNfYXR0cmlidXRlcyhpbnRmKTsKIAkJcHlyYSA9IGhpZF9nZXRfZHJ2ZGF0YShoZGV2KTsKIAkJaWYgKHB5cmEtPnJvY2NhdF9jbGFpbWVkKQogCQkJcm9jY2F0X2Rpc2Nvbm5lY3QocHlyYS0+Y2hyZGV2X21pbm9yKTsKQEAgLTgyNiwxOSArNjE4LDE5IEBACiAKIAlyZXR2YWwgPSBoaWRfcGFyc2UoaGRldik7CiAJaWYgKHJldHZhbCkgewotCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJwYXJzZSBmYWlsZWRcbiIpOworCQloaWRfZXJyKGhkZXYsICJwYXJzZSBmYWlsZWRcbiIpOwogCQlnb3RvIGV4aXQ7CiAJfQogCiAJcmV0dmFsID0gaGlkX2h3X3N0YXJ0KGhkZXYsIEhJRF9DT05ORUNUX0RFRkFVTFQpOwogCWlmIChyZXR2YWwpIHsKLQkJZGV2X2VycigmaGRldi0+ZGV2LCAiaHcgc3RhcnQgZmFpbGVkXG4iKTsKKwkJaGlkX2VycihoZGV2LCAiaHcgc3RhcnQgZmFpbGVkXG4iKTsKIAkJZ290byBleGl0OwogCX0KIAogCXJldHZhbCA9IHB5cmFfaW5pdF9zcGVjaWFscyhoZGV2KTsKIAlpZiAocmV0dmFsKSB7Ci0JCWRldl9lcnIoJmhkZXYtPmRldiwgImNvdWxkbid0IGluc3RhbGwgbW91c2VcbiIpOworCQloaWRfZXJyKGhkZXYsICJjb3VsZG4ndCBpbnN0YWxsIG1vdXNlXG4iKTsKIAkJZ290byBleGl0X3N0b3A7CiAJfQogCXJldHVybiAwOwpAQCAtOTUyLDExICs3NDQsMjQgQEAKIAogc3RhdGljIGludCBfX2luaXQgcHlyYV9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIGhpZF9yZWdpc3Rlcl9kcml2ZXIoJnB5cmFfZHJpdmVyKTsKKwlpbnQgcmV0dmFsOworCisJLyogY2xhc3MgbmFtZSBoYXMgdG8gYmUgc2FtZSBhcyBkcml2ZXIgbmFtZSAqLworCXB5cmFfY2xhc3MgPSBjbGFzc19jcmVhdGUoVEhJU19NT0RVTEUsICJweXJhIik7CisJaWYgKElTX0VSUihweXJhX2NsYXNzKSkKKwkJcmV0dXJuIFBUUl9FUlIocHlyYV9jbGFzcyk7CisJcHlyYV9jbGFzcy0+ZGV2X2F0dHJzID0gcHlyYV9hdHRyaWJ1dGVzOworCXB5cmFfY2xhc3MtPmRldl9iaW5fYXR0cnMgPSBweXJhX2Jpbl9hdHRyaWJ1dGVzOworCisJcmV0dmFsID0gaGlkX3JlZ2lzdGVyX2RyaXZlcigmcHlyYV9kcml2ZXIpOworCWlmIChyZXR2YWwpCisJCWNsYXNzX2Rlc3Ryb3kocHlyYV9jbGFzcyk7CisJcmV0dXJuIHJldHZhbDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHB5cmFfZXhpdCh2b2lkKQogeworCWNsYXNzX2Rlc3Ryb3kocHlyYV9jbGFzcyk7CiAJaGlkX3VucmVnaXN0ZXJfZHJpdmVyKCZweXJhX2RyaXZlcik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1yb2NjYXQtcHlyYS5oIGIvZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1weXJhLmgKaW5kZXggMjJmODBhOC4uMTRjYmJlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1weXJhLmgKKysrIGIvZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1weXJhLmgKQEAgLTE0LDE0ICsxNCwxMSBAQAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAotI3ByYWdtYSBwYWNrKHB1c2gpCi0jcHJhZ21hIHBhY2soMSkKLQogc3RydWN0IHB5cmFfYiB7CiAJdWludDhfdCBjb21tYW5kOyAvKiBQWVJBX0NPTU1BTkRfQiAqLwogCXVpbnQ4X3Qgc2l6ZTsgLyogYWx3YXlzIDMgKi8KIAl1aW50OF90IHVua25vd247IC8qIDEgKi8KLX07Cit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CiAKIHN0cnVjdCBweXJhX2NvbnRyb2wgewogCXVpbnQ4X3QgY29tbWFuZDsgLyogUFlSQV9DT01NQU5EX0NPTlRST0wgKi8KQEAgLTMxLDcgKzI4LDcgQEAKIAkgKi8KIAl1aW50OF90IHZhbHVlOyAvKiBSYW5nZSAwLTQgKi8KIAl1aW50OF90IHJlcXVlc3Q7Ci19OworfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOwogCiBlbnVtIHB5cmFfY29udHJvbF9yZXF1ZXN0cyB7CiAJUFlSQV9DT05UUk9MX1JFUVVFU1RfU1RBVFVTID0gMHgwMCwKQEAgLTQzLDcgKzQwLDcgQEAKIAl1aW50OF90IGNvbW1hbmQ7IC8qIFBZUkFfQ09NTUFORF9TRVRUSU5HUyAqLwogCXVpbnQ4X3Qgc2l6ZTsgLyogYWx3YXlzIDMgKi8KIAl1aW50OF90IHN0YXJ0dXBfcHJvZmlsZTsgLyogUmFuZ2UgMC00ISAqLwotfTsKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKIAogc3RydWN0IHB5cmFfcHJvZmlsZV9zZXR0aW5ncyB7CiAJdWludDhfdCBjb21tYW5kOyAvKiBQWVJBX0NPTU1BTkRfUFJPRklMRV9TRVRUSU5HUyAqLwpAQCAtNTgsNyArNTUsNyBAQAogCXVpbnQ4X3QgbGlnaHRfZWZmZWN0OwogCXVpbnQ4X3QgaGFuZGVkbmVzczsKIAl1aW50MTZfdCBjaGVja3N1bTsgLyogYnl0ZSBzdW0gKi8KLX07Cit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CiAKIHN0cnVjdCBweXJhX3Byb2ZpbGVfYnV0dG9ucyB7CiAJdWludDhfdCBjb21tYW5kOyAvKiBQWVJBX0NPTU1BTkRfUFJPRklMRV9CVVRUT05TICovCkBAIC02Niw3ICs2Myw3IEBACiAJdWludDhfdCBudW1iZXI7IC8qIFJhbmdlIDAtNCAqLwogCXVpbnQ4X3QgYnV0dG9uc1sxNF07CiAJdWludDE2X3QgY2hlY2tzdW07IC8qIGJ5dGUgc3VtICovCi19OworfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOwogCiBzdHJ1Y3QgcHlyYV9pbmZvIHsKIAl1aW50OF90IGNvbW1hbmQ7IC8qIFBZUkFfQ09NTUFORF9JTkZPICovCkBAIC03NSw3ICs3Miw3IEBACiAJdWludDhfdCB1bmtub3duMTsgLyogYWx3YXlzIDAgKi8KIAl1aW50OF90IHVua25vd24yOyAvKiBhbHdheXMgMSAqLwogCXVpbnQ4X3QgdW5rbm93bjM7IC8qIGFsd2F5cyAwICovCi19OworfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOwogCiBlbnVtIHB5cmFfY29tbWFuZHMgewogCVBZUkFfQ09NTUFORF9DT05UUk9MID0gMHg0LApAQCAtMTA3LDEzICsxMDQsMTMgQEAKIAl1aW50OF90IHR5cGU7CiAJdWludDhfdCBkYXRhMTsKIAl1aW50OF90IGRhdGEyOwotfTsKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKIAogc3RydWN0IHB5cmFfbW91c2VfZXZlbnRfYXVkaW8gewogCXVpbnQ4X3QgcmVwb3J0X251bWJlcjsgLyogYWx3YXlzIDIgKi8KIAl1aW50OF90IHR5cGU7CiAJdWludDhfdCB1bnVzZWQ7IC8qIGFsd2F5cyAwICovCi19OworfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOwogCiAvKiBoaWQgYXVkaW8gY29udHJvbHMgKi8KIGVudW0gcHlyYV9tb3VzZV9ldmVudF9hdWRpb190eXBlcyB7CkBAIC0xNjcsOSArMTY0LDcgQEAKIAl1aW50OF90IHR5cGU7CiAJdWludDhfdCB2YWx1ZTsKIAl1aW50OF90IGtleTsKLX07Ci0KLSNwcmFnbWEgcGFjayhwb3ApCit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CiAKIHN0cnVjdCBweXJhX2RldmljZSB7CiAJaW50IGFjdHVhbF9wcm9maWxlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLXJvY2NhdC5jIGIvZHJpdmVycy9oaWQvaGlkLXJvY2NhdC5jCmluZGV4IDVhNjg3OWUyMy4uYTE0YzU3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLXJvY2NhdC5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1yb2NjYXQuYwpAQCAtMjEsNiArMjEsOCBAQAogICogSXQgaXMgaW5zcGlyZWQgYnkgaGlkcmF3LCBidXQgdXNlcyBvbmx5IG9uZSBjaXJjdWxhciBidWZmZXIgZm9yIGFsbCByZWFkZXJzLgogICovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KQEAgLTY1LDcgKzY3LDYgQEAKIH07CiAKIHN0YXRpYyBpbnQgcm9jY2F0X21ham9yOwotc3RhdGljIHN0cnVjdCBjbGFzcyAqcm9jY2F0X2NsYXNzOwogc3RhdGljIHN0cnVjdCBjZGV2IHJvY2NhdF9jZGV2OwogCiBzdGF0aWMgc3RydWN0IHJvY2NhdF9kZXZpY2UgKmRldmljZXNbUk9DQ0FUX01BWF9ERVZJQ0VTXTsKQEAgLTE2NSwyNyArMTY2LDIyIEBACiAJbXV0ZXhfbG9jaygmZGV2aWNlLT5yZWFkZXJzX2xvY2spOwogCiAJaWYgKCFkZXZpY2UpIHsKLQkJcHJpbnRrKEtFUk5fRU1FUkcgInJvY2NhdCBkZXZpY2Ugd2l0aCBtaW5vciAlZCBkb2Vzbid0IGV4aXN0XG4iLAotCQkJCW1pbm9yKTsKKwkJcHJfZW1lcmcoInJvY2NhdCBkZXZpY2Ugd2l0aCBtaW5vciAlZCBkb2Vzbid0IGV4aXN0XG4iLCBtaW5vcik7CiAJCWVycm9yID0gLUVOT0RFVjsKIAkJZ290byBleGl0X2VycjsKIAl9CiAKIAlpZiAoIWRldmljZS0+b3BlbisrKSB7CiAJCS8qIHBvd2VyIG9uIGRldmljZSBvbiBhZGRpbmcgZmlyc3QgcmVhZGVyICovCi0JCWlmIChkZXZpY2UtPmhpZC0+bGxfZHJpdmVyLT5wb3dlcikgewotCQkJZXJyb3IgPSBkZXZpY2UtPmhpZC0+bGxfZHJpdmVyLT5wb3dlcihkZXZpY2UtPmhpZCwKLQkJCQkJUE1fSElOVF9GVUxMT04pOwotCQkJaWYgKGVycm9yIDwgMCkgewotCQkJCS0tZGV2aWNlLT5vcGVuOwotCQkJCWdvdG8gZXhpdF9lcnI7Ci0JCQl9Ci0JCX0KLQkJZXJyb3IgPSBkZXZpY2UtPmhpZC0+bGxfZHJpdmVyLT5vcGVuKGRldmljZS0+aGlkKTsKKwkJZXJyb3IgPSBoaWRfaHdfcG93ZXIoZGV2aWNlLT5oaWQsIFBNX0hJTlRfRlVMTE9OKTsKIAkJaWYgKGVycm9yIDwgMCkgewotCQkJaWYgKGRldmljZS0+aGlkLT5sbF9kcml2ZXItPnBvd2VyKQotCQkJCWRldmljZS0+aGlkLT5sbF9kcml2ZXItPnBvd2VyKGRldmljZS0+aGlkLAotCQkJCQkJUE1fSElOVF9OT1JNQUwpOworCQkJLS1kZXZpY2UtPm9wZW47CisJCQlnb3RvIGV4aXRfZXJyOworCQl9CisKKwkJZXJyb3IgPSBoaWRfaHdfb3BlbihkZXZpY2UtPmhpZCk7CisJCWlmIChlcnJvciA8IDApIHsKKwkJCWhpZF9od19wb3dlcihkZXZpY2UtPmhpZCwgUE1fSElOVF9OT1JNQUwpOwogCQkJLS1kZXZpY2UtPm9wZW47CiAJCQlnb3RvIGV4aXRfZXJyOwogCQl9CkBAIC0yMTgsOCArMjE0LDcgQEAKIAlkZXZpY2UgPSBkZXZpY2VzW21pbm9yXTsKIAlpZiAoIWRldmljZSkgewogCQltdXRleF91bmxvY2soJmRldmljZXNfbG9jayk7Ci0JCXByaW50ayhLRVJOX0VNRVJHICJyb2NjYXQgZGV2aWNlIHdpdGggbWlub3IgJWQgZG9lc24ndCBleGlzdFxuIiwKLQkJCQltaW5vcik7CisJCXByX2VtZXJnKCJyb2NjYXQgZGV2aWNlIHdpdGggbWlub3IgJWQgZG9lc24ndCBleGlzdFxuIiwgbWlub3IpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKQEAgLTIzMSwxMCArMjI2LDggQEAKIAlpZiAoIS0tZGV2aWNlLT5vcGVuKSB7CiAJCS8qIHJlbW92aW5nIGxhc3QgcmVhZGVyICovCiAJCWlmIChkZXZpY2UtPmV4aXN0KSB7Ci0JCQlpZiAoZGV2aWNlLT5oaWQtPmxsX2RyaXZlci0+cG93ZXIpCi0JCQkJZGV2aWNlLT5oaWQtPmxsX2RyaXZlci0+cG93ZXIoZGV2aWNlLT5oaWQsCi0JCQkJCQlQTV9ISU5UX05PUk1BTCk7Ci0JCQlkZXZpY2UtPmhpZC0+bGxfZHJpdmVyLT5jbG9zZShkZXZpY2UtPmhpZCk7CisJCQloaWRfaHdfcG93ZXIoZGV2aWNlLT5oaWQsIFBNX0hJTlRfTk9STUFMKTsKKwkJCWhpZF9od19jbG9zZShkZXZpY2UtPmhpZCk7CiAJCX0gZWxzZSB7CiAJCQlrZnJlZShkZXZpY2UpOwogCQl9CkBAIC0yOTUsMTIgKzI4OCwxNCBAQAogCiAvKgogICogcm9jY2F0X2Nvbm5lY3QoKSAtIGNyZWF0ZSBhIGNoYXIgZGV2aWNlIGZvciBzcGVjaWFsIGV2ZW50IG91dHB1dAorICogQGNsYXNzOiB0aGUgY2xhc3MgdGhhdHMgdXNlZCB0byBjcmVhdGUgdGhlIGRldmljZS4gTWVhbnQgdG8gaG9sZCBkZXZpY2UKKyAqIHNwZWNpZmljIHN5c2ZzIGF0dHJpYnV0ZXMuCiAgKiBAaGlkOiB0aGUgaGlkIGRldmljZSB0aGUgY2hhciBkZXZpY2Ugc2hvdWxkIGJlIGNvbm5lY3RlZCB0by4KICAqCiAgKiBSZXR1cm4gdmFsdWUgaXMgbWlub3IgZGV2aWNlIG51bWJlciBpbiBSYW5nZSBbMCwgUk9DQ0FUX01BWF9ERVZJQ0VTXSBvbgogICogc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCiAgKi8KLWludCByb2NjYXRfY29ubmVjdChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKQoraW50IHJvY2NhdF9jb25uZWN0KHN0cnVjdCBjbGFzcyAqa2xhc3MsIHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpCiB7CiAJdW5zaWduZWQgaW50IG1pbm9yOwogCXN0cnVjdCByb2NjYXRfZGV2aWNlICpkZXZpY2U7CkBAIC0zMjYsNyArMzIxLDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JZGV2aWNlLT5kZXYgPSBkZXZpY2VfY3JlYXRlKHJvY2NhdF9jbGFzcywgJmhpZC0+ZGV2LAorCWRldmljZS0+ZGV2ID0gZGV2aWNlX2NyZWF0ZShrbGFzcywgJmhpZC0+ZGV2LAogCQkJTUtERVYocm9jY2F0X21ham9yLCBtaW5vciksIE5VTEwsCiAJCQkiJXMlcyVkIiwgInJvY2NhdCIsIGhpZC0+ZHJpdmVyLT5uYW1lLCBtaW5vcik7CiAKQEAgLTM2NywxMCArMzYyLDEwIEBACiAKIAlkZXZpY2UtPmV4aXN0ID0gMDsgLyogVE9ETyBleGlzdCBtYXliZSBub3QgbmVlZGVkICovCiAKLQlkZXZpY2VfZGVzdHJveShyb2NjYXRfY2xhc3MsIE1LREVWKHJvY2NhdF9tYWpvciwgbWlub3IpKTsKKwlkZXZpY2VfZGVzdHJveShkZXZpY2UtPmRldi0+Y2xhc3MsIE1LREVWKHJvY2NhdF9tYWpvciwgbWlub3IpKTsKIAogCWlmIChkZXZpY2UtPm9wZW4pIHsKLQkJZGV2aWNlLT5oaWQtPmxsX2RyaXZlci0+Y2xvc2UoZGV2aWNlLT5oaWQpOworCQloaWRfaHdfY2xvc2UoZGV2aWNlLT5oaWQpOwogCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmRldmljZS0+d2FpdCk7CiAJfSBlbHNlIHsKIAkJa2ZyZWUoZGV2aWNlKTsKQEAgLTM5OCwxNCArMzkzLDcgQEAKIAlyb2NjYXRfbWFqb3IgPSBNQUpPUihkZXZfaWQpOwogCiAJaWYgKHJldHZhbCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAicm9jY2F0OiBjYW4ndCBnZXQgbWFqb3IgbnVtYmVyXG4iKTsKLQkJcmV0dXJuIHJldHZhbDsKLQl9Ci0KLQlyb2NjYXRfY2xhc3MgPSBjbGFzc19jcmVhdGUoVEhJU19NT0RVTEUsICJyb2NjYXQiKTsKLQlpZiAoSVNfRVJSKHJvY2NhdF9jbGFzcykpIHsKLQkJcmV0dmFsID0gUFRSX0VSUihyb2NjYXRfY2xhc3MpOwotCQl1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24oZGV2X2lkLCBST0NDQVRfTUFYX0RFVklDRVMpOworCQlwcl93YXJuKCJjYW4ndCBnZXQgbWFqb3IgbnVtYmVyXG4iKTsKIAkJcmV0dXJuIHJldHZhbDsKIAl9CiAKQEAgLTQyMCw3ICs0MDgsNiBAQAogCWRldl90IGRldl9pZCA9IE1LREVWKHJvY2NhdF9tYWpvciwgMCk7CiAKIAljZGV2X2RlbCgmcm9jY2F0X2NkZXYpOwotCWNsYXNzX2Rlc3Ryb3kocm9jY2F0X2NsYXNzKTsKIAl1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24oZGV2X2lkLCBST0NDQVRfTUFYX0RFVklDRVMpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LmggYi9kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LmgKaW5kZXggMDllODY0ZS4uNTc4NDI4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLXJvY2NhdC5oCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1yb2NjYXQuaApAQCAtMTYsMTEgKzE2LDEyIEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogI2lmIGRlZmluZWQoQ09ORklHX0hJRF9ST0NDQVQpIHx8IGRlZmluZWQoQ09ORklHX0hJRF9ST0NDQVRfTU9EVUxFKQotaW50IHJvY2NhdF9jb25uZWN0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpOworaW50IHJvY2NhdF9jb25uZWN0KHN0cnVjdCBjbGFzcyAqa2xhc3MsIHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpOwogdm9pZCByb2NjYXRfZGlzY29ubmVjdChpbnQgbWlub3IpOwogaW50IHJvY2NhdF9yZXBvcnRfZXZlbnQoaW50IG1pbm9yLCB1OCBjb25zdCAqZGF0YSwgaW50IGxlbik7CiAjZWxzZQotc3RhdGljIGlubGluZSBpbnQgcm9jY2F0X2Nvbm5lY3Qoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCkgeyByZXR1cm4gLTE7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHJvY2NhdF9jb25uZWN0KHN0cnVjdCBjbGFzcyAqa2xhc3MsCisJCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQpIHsgcmV0dXJuIC0xOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgcm9jY2F0X2Rpc2Nvbm5lY3QoaW50IG1pbm9yKSB7fQogc3RhdGljIGlubGluZSBpbnQgcm9jY2F0X3JlcG9ydF9ldmVudChpbnQgbWlub3IsIHU4IGNvbnN0ICpkYXRhLCBpbnQgbGVuKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLXNhbXN1bmcuYyBiL2RyaXZlcnMvaGlkL2hpZC1zYW1zdW5nLmMKaW5kZXggMzU4OTQ0NC4uM2MxZmQ4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLXNhbXN1bmcuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtc2Ftc3VuZy5jCkBAIC01Nyw4ICs1Nyw4IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgc2Ftc3VuZ19pcmRhX2Rldl90cmFjZShzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwKIAkJdW5zaWduZWQgaW50IHJzaXplKQogewotCWRldl9pbmZvKCZoZGV2LT5kZXYsICJmaXhpbmcgdXAgU2Ftc3VuZyBJckRBICVkIGJ5dGUgcmVwb3J0ICIKLQkJCSJkZXNjcmlwdG9yXG4iLCByc2l6ZSk7CisJaGlkX2luZm8oaGRldiwgImZpeGluZyB1cCBTYW1zdW5nIElyREEgJWQgYnl0ZSByZXBvcnQgZGVzY3JpcHRvclxuIiwKKwkJIHJzaXplKTsKIH0KIAogc3RhdGljIF9fdTggKnNhbXN1bmdfaXJkYV9yZXBvcnRfZml4dXAoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIF9fdTggKnJkZXNjLApAQCAtMTYwLDcgKzE2MCw3IEBACiAKIAlyZXQgPSBoaWRfcGFyc2UoaGRldik7CiAJaWYgKHJldCkgewotCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJwYXJzZSBmYWlsZWRcbiIpOworCQloaWRfZXJyKGhkZXYsICJwYXJzZSBmYWlsZWRcbiIpOwogCQlnb3RvIGVycl9mcmVlOwogCX0KIApAQCAtMTc0LDcgKzE3NCw3IEBACiAKIAlyZXQgPSBoaWRfaHdfc3RhcnQoaGRldiwgY21hc2spOwogCWlmIChyZXQpIHsKLQkJZGV2X2VycigmaGRldi0+ZGV2LCAiaHcgc3RhcnQgZmFpbGVkXG4iKTsKKwkJaGlkX2VycihoZGV2LCAiaHcgc3RhcnQgZmFpbGVkXG4iKTsKIAkJZ290byBlcnJfZnJlZTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1zam95LmMgYi9kcml2ZXJzL2hpZC9oaWQtc2pveS5jCmluZGV4IGUxMGE3NjguLjE2ZjdjYWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1zam95LmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLXNqb3kuYwpAQCAtNzQsMjYgKzc0LDI1IEBACiAJaW50IGVycm9yOwogCiAJaWYgKGxpc3RfZW1wdHkocmVwb3J0X2xpc3QpKSB7Ci0JCWRldl9lcnIoJmhpZC0+ZGV2LCAibm8gb3V0cHV0IHJlcG9ydHMgZm91bmRcbiIpOworCQloaWRfZXJyKGhpZCwgIm5vIG91dHB1dCByZXBvcnRzIGZvdW5kXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJcmVwb3J0X3B0ciA9IHJlcG9ydF9wdHItPm5leHQ7CiAKIAlpZiAocmVwb3J0X3B0ciA9PSByZXBvcnRfbGlzdCkgewotCQlkZXZfZXJyKCZoaWQtPmRldiwgInJlcXVpcmVkIG91dHB1dCByZXBvcnQgaXMgIgotCQkJCSJtaXNzaW5nXG4iKTsKKwkJaGlkX2VycihoaWQsICJyZXF1aXJlZCBvdXRwdXQgcmVwb3J0IGlzIG1pc3NpbmdcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlyZXBvcnQgPSBsaXN0X2VudHJ5KHJlcG9ydF9wdHIsIHN0cnVjdCBoaWRfcmVwb3J0LCBsaXN0KTsKIAlpZiAocmVwb3J0LT5tYXhmaWVsZCA8IDEpIHsKLQkJZGV2X2VycigmaGlkLT5kZXYsICJubyBmaWVsZHMgaW4gdGhlIHJlcG9ydFxuIik7CisJCWhpZF9lcnIoaGlkLCAibm8gZmllbGRzIGluIHRoZSByZXBvcnRcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlpZiAocmVwb3J0LT5maWVsZFswXS0+cmVwb3J0X2NvdW50IDwgMykgewotCQlkZXZfZXJyKCZoaWQtPmRldiwgIm5vdCBlbm91Z2ggdmFsdWVzIGluIHRoZSBmaWVsZFxuIik7CisJCWhpZF9lcnIoaGlkLCAibm90IGVub3VnaCB2YWx1ZXMgaW4gdGhlIGZpZWxkXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCkBAIC0xMTcsOCArMTE2LDcgQEAKIAlzam95ZmYtPnJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzJdID0gMHgwMDsKIAl1c2JoaWRfc3VibWl0X3JlcG9ydChoaWQsIHNqb3lmZi0+cmVwb3J0LCBVU0JfRElSX09VVCk7CiAKLQlkZXZfaW5mbygmaGlkLT5kZXYsCi0JCSJGb3JjZSBmZWVkYmFjayBmb3IgU21hcnRKb3kgUExVUyBQUzIvVVNCIGFkYXB0ZXJcbiIpOworCWhpZF9pbmZvKGhpZCwgIkZvcmNlIGZlZWRiYWNrIGZvciBTbWFydEpveSBQTFVTIFBTMi9VU0IgYWRhcHRlclxuIik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEzNSwxMyArMTMzLDEzIEBACiAKIAlyZXQgPSBoaWRfcGFyc2UoaGRldik7CiAJaWYgKHJldCkgewotCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJwYXJzZSBmYWlsZWRcbiIpOworCQloaWRfZXJyKGhkZXYsICJwYXJzZSBmYWlsZWRcbiIpOwogCQlnb3RvIGVycjsKIAl9CiAKIAlyZXQgPSBoaWRfaHdfc3RhcnQoaGRldiwgSElEX0NPTk5FQ1RfREVGQVVMVCAmIH5ISURfQ09OTkVDVF9GRik7CiAJaWYgKHJldCkgewotCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJodyBzdGFydCBmYWlsZWRcbiIpOworCQloaWRfZXJyKGhkZXYsICJodyBzdGFydCBmYWlsZWRcbiIpOwogCQlnb3RvIGVycjsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1zb255LmMgYi9kcml2ZXJzL2hpZC9oaWQtc29ueS5jCmluZGV4IDY3N2JiM2QuLjY4ZDdiMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1zb255LmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLXNvbnkuYwpAQCAtNDAsOCArNDAsNyBAQAogCiAJaWYgKChzYy0+cXVpcmtzICYgVkFJT19SREVTQ19DT05TVEFOVCkgJiYKIAkJCSpyc2l6ZSA+PSA1NiAmJiByZGVzY1s1NF0gPT0gMHg4MSAmJiByZGVzY1s1NV0gPT0gMHgwNykgewotCQlkZXZfaW5mbygmaGRldi0+ZGV2LCAiRml4aW5nIHVwIFNvbnkgVmFpbyBWR1ggcmVwb3J0ICIKLQkJCQkiZGVzY3JpcHRvclxuIik7CisJCWhpZF9pbmZvKGhkZXYsICJGaXhpbmcgdXAgU29ueSBWYWlvIFZHWCByZXBvcnQgZGVzY3JpcHRvclxuIik7CiAJCXJkZXNjWzU1XSA9IDB4MDY7CiAJfQogCXJldHVybiByZGVzYzsKQEAgLTg5LDcgKzg4LDcgQEAKIAkJCQkgKDMgPDwgOCkgfCAweGYyLCBpZm51bSwgYnVmLCAxNywKIAkJCQkgVVNCX0NUUkxfR0VUX1RJTUVPVVQpOwogCWlmIChyZXQgPCAwKQotCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJjYW4ndCBzZXQgb3BlcmF0aW9uYWwgbW9kZVxuIik7CisJCWhpZF9lcnIoaGRldiwgImNhbid0IHNldCBvcGVyYXRpb25hbCBtb2RlXG4iKTsKIAogCWtmcmVlKGJ1Zik7CiAKQEAgLTExMCw3ICsxMDksNyBAQAogCiAJc2MgPSBremFsbG9jKHNpemVvZigqc2MpLCBHRlBfS0VSTkVMKTsKIAlpZiAoc2MgPT0gTlVMTCkgewotCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJjYW4ndCBhbGxvYyBzb255IGRlc2NyaXB0b3JcbiIpOworCQloaWRfZXJyKGhkZXYsICJjYW4ndCBhbGxvYyBzb255IGRlc2NyaXB0b3JcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTExOSwxNCArMTE4LDE0IEBACiAKIAlyZXQgPSBoaWRfcGFyc2UoaGRldik7CiAJaWYgKHJldCkgewotCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJwYXJzZSBmYWlsZWRcbiIpOworCQloaWRfZXJyKGhkZXYsICJwYXJzZSBmYWlsZWRcbiIpOwogCQlnb3RvIGVycl9mcmVlOwogCX0KIAogCXJldCA9IGhpZF9od19zdGFydChoZGV2LCBISURfQ09OTkVDVF9ERUZBVUxUIHwKIAkJCUhJRF9DT05ORUNUX0hJRERFVl9GT1JDRSk7CiAJaWYgKHJldCkgewotCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJodyBzdGFydCBmYWlsZWRcbiIpOworCQloaWRfZXJyKGhkZXYsICJodyBzdGFydCBmYWlsZWRcbiIpOwogCQlnb3RvIGVycl9mcmVlOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLXN0YW50dW0uYyBiL2RyaXZlcnMvaGlkL2hpZC1zdGFudHVtLmMKaW5kZXggMzE3MWJlMi4uYjJiZTFkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLXN0YW50dW0uYworKysgYi9kcml2ZXJzL2hpZC9oaWQtc3RhbnR1bS5jCkBAIC0yMjIsNyArMjIyLDcgQEAKIAogCXNkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHN0YW50dW1fZGF0YSksIEdGUF9LRVJORUwpOwogCWlmICghc2QpIHsKLQkJZGV2X2VycigmaGRldi0+ZGV2LCAiY2Fubm90IGFsbG9jYXRlIFN0YW50dW0gZGF0YVxuIik7CisJCWhpZF9lcnIoaGRldiwgImNhbm5vdCBhbGxvY2F0ZSBTdGFudHVtIGRhdGFcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJc2QtPnZhbGlkID0gZmFsc2U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtc3VucGx1cy5jIGIvZHJpdmVycy9oaWQvaGlkLXN1bnBsdXMuYwppbmRleCAxNjRlZDU2Li5kNDg0YTAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtc3VucGx1cy5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1zdW5wbHVzLmMKQEAgLTI3LDggKzI3LDcgQEAKIHsKIAlpZiAoKnJzaXplID49IDEwNyAmJiByZGVzY1sxMDRdID09IDB4MjYgJiYgcmRlc2NbMTA1XSA9PSAweDgwICYmCiAJCQlyZGVzY1sxMDZdID09IDB4MDMpIHsKLQkJZGV2X2luZm8oJmhkZXYtPmRldiwgImZpeGluZyB1cCBTdW5wbHVzIFdpcmVsZXNzIERlc2t0b3AgIgotCQkJCSJyZXBvcnQgZGVzY3JpcHRvclxuIik7CisJCWhpZF9pbmZvKGhkZXYsICJmaXhpbmcgdXAgU3VucGx1cyBXaXJlbGVzcyBEZXNrdG9wIHJlcG9ydCBkZXNjcmlwdG9yXG4iKTsKIAkJcmRlc2NbMTA1XSA9IHJkZXNjWzExMF0gPSAweDAzOwogCQlyZGVzY1sxMDZdID0gcmRlc2NbMTExXSA9IDB4MjE7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLXRtZmYuYyBiL2RyaXZlcnMvaGlkL2hpZC10bWZmLmMKaW5kZXggMjViZTRlMS4uNTc1ODYyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLXRtZmYuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtdG1mZi5jCkBAIC0xNTEsMjggKzE1MSwyMyBAQAogCQkJc3dpdGNoIChmaWVsZC0+dXNhZ2VbMF0uaGlkKSB7CiAJCQljYXNlIFRIUlVTVE1BU1RFUl9VU0FHRV9GRjoKIAkJCQlpZiAoZmllbGQtPnJlcG9ydF9jb3VudCA8IDIpIHsKLQkJCQkJZGV2X3dhcm4oJmhpZC0+ZGV2LCAiaWdub3JpbmcgRkYgZmllbGQgIgotCQkJCQkJIndpdGggcmVwb3J0X2NvdW50IDwgMlxuIik7CisJCQkJCWhpZF93YXJuKGhpZCwgImlnbm9yaW5nIEZGIGZpZWxkIHdpdGggcmVwb3J0X2NvdW50IDwgMlxuIik7CiAJCQkJCWNvbnRpbnVlOwogCQkJCX0KIAogCQkJCWlmIChmaWVsZC0+bG9naWNhbF9tYXhpbXVtID09CiAJCQkJCQlmaWVsZC0+bG9naWNhbF9taW5pbXVtKSB7Ci0JCQkJCWRldl93YXJuKCZoaWQtPmRldiwgImlnbm9yaW5nIEZGIGZpZWxkICIKLQkJCQkJCQkid2l0aCBsb2dpY2FsX21heGltdW0gIgotCQkJCQkJCSI9PSBsb2dpY2FsX21pbmltdW1cbiIpOworCQkJCQloaWRfd2FybihoaWQsICJpZ25vcmluZyBGRiBmaWVsZCB3aXRoIGxvZ2ljYWxfbWF4aW11bSA9PSBsb2dpY2FsX21pbmltdW1cbiIpOwogCQkJCQljb250aW51ZTsKIAkJCQl9CiAKIAkJCQlpZiAodG1mZi0+cmVwb3J0ICYmIHRtZmYtPnJlcG9ydCAhPSByZXBvcnQpIHsKLQkJCQkJZGV2X3dhcm4oJmhpZC0+ZGV2LCAiaWdub3JpbmcgRkYgZmllbGQgIgotCQkJCQkJCSJpbiBvdGhlciByZXBvcnRcbiIpOworCQkJCQloaWRfd2FybihoaWQsICJpZ25vcmluZyBGRiBmaWVsZCBpbiBvdGhlciByZXBvcnRcbiIpOwogCQkJCQljb250aW51ZTsKIAkJCQl9CiAKIAkJCQlpZiAodG1mZi0+ZmZfZmllbGQgJiYgdG1mZi0+ZmZfZmllbGQgIT0gZmllbGQpIHsKLQkJCQkJZGV2X3dhcm4oJmhpZC0+ZGV2LCAiaWdub3JpbmcgIgotCQkJCQkJCSJkdXBsaWNhdGUgRkYgZmllbGRcbiIpOworCQkJCQloaWRfd2FybihoaWQsICJpZ25vcmluZyBkdXBsaWNhdGUgRkYgZmllbGRcbiIpOwogCQkJCQljb250aW51ZTsKIAkJCQl9CiAKQEAgLTE4NSwxNiArMTgwLDE1IEBACiAJCQkJYnJlYWs7CiAKIAkJCWRlZmF1bHQ6Ci0JCQkJZGV2X3dhcm4oJmhpZC0+ZGV2LCAiaWdub3JpbmcgdW5rbm93biBvdXRwdXQgIgotCQkJCQkJInVzYWdlICUwOHhcbiIsCi0JCQkJCQlmaWVsZC0+dXNhZ2VbMF0uaGlkKTsKKwkJCQloaWRfd2FybihoaWQsICJpZ25vcmluZyB1bmtub3duIG91dHB1dCB1c2FnZSAlMDh4XG4iLAorCQkJCQkgZmllbGQtPnVzYWdlWzBdLmhpZCk7CiAJCQkJY29udGludWU7CiAJCQl9CiAJCX0KIAl9CiAKIAlpZiAoIXRtZmYtPnJlcG9ydCkgewotCQlkZXZfZXJyKCZoaWQtPmRldiwgImNhbid0IGZpbmQgRkYgZmllbGQgaW4gb3V0cHV0IHJlcG9ydHNcbiIpOworCQloaWRfZXJyKGhpZCwgImNhbid0IGZpbmQgRkYgZmllbGQgaW4gb3V0cHV0IHJlcG9ydHNcbiIpOwogCQllcnJvciA9IC1FTk9ERVY7CiAJCWdvdG8gZmFpbDsKIAl9CkBAIC0yMDMsOCArMTk3LDcgQEAKIAlpZiAoZXJyb3IpCiAJCWdvdG8gZmFpbDsKIAotCWRldl9pbmZvKCZoaWQtPmRldiwgImZvcmNlIGZlZWRiYWNrIGZvciBUaHJ1c3RNYXN0ZXIgZGV2aWNlcyBieSBaaW54ICIKLQkJCSJWZXJpdHVzZSA8emlueEBlcGljc29sLm9yZz4iKTsKKwloaWRfaW5mbyhoaWQsICJmb3JjZSBmZWVkYmFjayBmb3IgVGhydXN0TWFzdGVyIGRldmljZXMgYnkgWmlueCBWZXJpdHVzZSA8emlueEBlcGljc29sLm9yZz5cbiIpOwogCXJldHVybiAwOwogCiBmYWlsOgpAQCAtMjI0LDEzICsyMTcsMTMgQEAKIAogCXJldCA9IGhpZF9wYXJzZShoZGV2KTsKIAlpZiAocmV0KSB7Ci0JCWRldl9lcnIoJmhkZXYtPmRldiwgInBhcnNlIGZhaWxlZFxuIik7CisJCWhpZF9lcnIoaGRldiwgInBhcnNlIGZhaWxlZFxuIik7CiAJCWdvdG8gZXJyOwogCX0KIAogCXJldCA9IGhpZF9od19zdGFydChoZGV2LCBISURfQ09OTkVDVF9ERUZBVUxUICYgfkhJRF9DT05ORUNUX0ZGKTsKIAlpZiAocmV0KSB7Ci0JCWRldl9lcnIoJmhkZXYtPmRldiwgImh3IHN0YXJ0IGZhaWxlZFxuIik7CisJCWhpZF9lcnIoaGRldiwgImh3IHN0YXJ0IGZhaWxlZFxuIik7CiAJCWdvdG8gZXJyOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLXRvcHNlZWQuYyBiL2RyaXZlcnMvaGlkL2hpZC10b3BzZWVkLmMKaW5kZXggOTU2ZWQ5YS4uNjEzZmY3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLXRvcHNlZWQuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtdG9wc2VlZC5jCkBAIC02Niw2ICs2Niw3IEBACiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0JUQywgVVNCX0RFVklDRV9JRF9CVENfRU1QUkVYX1JFTU9URSkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQlRDLCBVU0JfREVWSUNFX0lEX0JUQ19FTVBSRVhfUkVNT1RFXzIpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1RPUFNFRUQyLCBVU0JfREVWSUNFX0lEX1RPUFNFRUQyX1JGX0NPTUJPKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9DSElDT05ZLCBVU0JfREVWSUNFX0lEX0NISUNPTllfV0lSRUxFU1MpIH0sCiAJeyB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShoaWQsIHRzX2RldmljZXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLXdhY29tLmMgYi9kcml2ZXJzL2hpZC9oaWQtd2Fjb20uYwppbmRleCA3MjRmNDZlLi4wNjg4ODMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtd2Fjb20uYworKysgYi9kcml2ZXJzL2hpZC9oaWQtd2Fjb20uYwpAQCAtMTgsNiArMTgsOCBAQAogICogYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAorI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaGlkLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC0xNDEsOCArMTQzLDggQEAKIAkgKiBOb3RlIHRoYXQgaWYgdGhlIHJhdyBxdWVyaWVzIGZhaWwsIGl0J3Mgbm90IGEgaGFyZCBmYWlsdXJlIGFuZCBpdAogCSAqIGlzIHNhZmUgdG8gY29udGludWUKIAkgKi8KLQlkZXZfd2FybigmaGRldi0+ZGV2LCAiZmFpbGVkIHRvIHBva2UgZGV2aWNlLCBjb21tYW5kICVkLCBlcnIgJWRcbiIsCi0JCQkJcmVwX2RhdGFbMF0sIHJldCk7CisJaGlkX3dhcm4oaGRldiwgImZhaWxlZCB0byBwb2tlIGRldmljZSwgY29tbWFuZCAlZCwgZXJyICVkXG4iLAorCQkgcmVwX2RhdGFbMF0sIHJldCk7CiAJcmV0dXJuOwogfQogCkBAIC0xNzIsNyArMTc0LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLXN0YXRpYyBERVZJQ0VfQVRUUihzcGVlZCwgU19JUlVHTyB8IFNfSVdVR08sCitzdGF0aWMgREVWSUNFX0FUVFIoc3BlZWQsIFNfSVJVR08gfCBTX0lXVVNSIHwgU19JV0dSUCwKIAkJd2Fjb21fc2hvd19zcGVlZCwgd2Fjb21fc3RvcmVfc3BlZWQpOwogCiBzdGF0aWMgaW50IHdhY29tX3Jhd19ldmVudChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydCwKQEAgLTMxMiw3ICszMTQsNyBAQAogCiAJd2RhdGEgPSBremFsbG9jKHNpemVvZigqd2RhdGEpLCBHRlBfS0VSTkVMKTsKIAlpZiAod2RhdGEgPT0gTlVMTCkgewotCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJjYW4ndCBhbGxvYyB3YWNvbSBkZXNjcmlwdG9yXG4iKTsKKwkJaGlkX2VycihoZGV2LCAiY2FuJ3QgYWxsb2Mgd2Fjb20gZGVzY3JpcHRvclxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtMzIxLDIwICszMjMsMjAgQEAKIAkvKiBQYXJzZSB0aGUgSElEIHJlcG9ydCBub3cgKi8KIAlyZXQgPSBoaWRfcGFyc2UoaGRldik7CiAJaWYgKHJldCkgewotCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJwYXJzZSBmYWlsZWRcbiIpOworCQloaWRfZXJyKGhkZXYsICJwYXJzZSBmYWlsZWRcbiIpOwogCQlnb3RvIGVycl9mcmVlOwogCX0KIAogCXJldCA9IGhpZF9od19zdGFydChoZGV2LCBISURfQ09OTkVDVF9ERUZBVUxUKTsKIAlpZiAocmV0KSB7Ci0JCWRldl9lcnIoJmhkZXYtPmRldiwgImh3IHN0YXJ0IGZhaWxlZFxuIik7CisJCWhpZF9lcnIoaGRldiwgImh3IHN0YXJ0IGZhaWxlZFxuIik7CiAJCWdvdG8gZXJyX2ZyZWU7CiAJfQogCiAJcmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZoZGV2LT5kZXYsICZkZXZfYXR0cl9zcGVlZCk7CiAJaWYgKHJldCkKLQkJZGV2X3dhcm4oJmhkZXYtPmRldiwKLQkJCSJjYW4ndCBjcmVhdGUgc3lzZnMgc3BlZWQgYXR0cmlidXRlIGVycjogJWRcbiIsIHJldCk7CisJCWhpZF93YXJuKGhkZXYsCisJCQkgImNhbid0IGNyZWF0ZSBzeXNmcyBzcGVlZCBhdHRyaWJ1dGUgZXJyOiAlZFxuIiwgcmV0KTsKIAogCS8qIFNldCBXYWNvbSBtb2RlIDIgd2l0aCBoaWdoIHJlcG9ydGluZyBzcGVlZCAqLwogCXdhY29tX3Bva2UoaGRldiwgMSk7CkBAIC0zNDksOCArMzUxLDggQEAKIAogCXJldCA9IHBvd2VyX3N1cHBseV9yZWdpc3RlcigmaGRldi0+ZGV2LCAmd2RhdGEtPmJhdHRlcnkpOwogCWlmIChyZXQpIHsKLQkJZGV2X3dhcm4oJmhkZXYtPmRldiwKLQkJCSJjYW4ndCBjcmVhdGUgc3lzZnMgYmF0dGVyeSBhdHRyaWJ1dGUsIGVycjogJWRcbiIsIHJldCk7CisJCWhpZF93YXJuKGhkZXYsICJjYW4ndCBjcmVhdGUgc3lzZnMgYmF0dGVyeSBhdHRyaWJ1dGUsIGVycjogJWRcbiIsCisJCQkgcmV0KTsKIAkJLyoKIAkJICogYmF0dGVyeSBhdHRyaWJ1dGUgaXMgbm90IGNyaXRpY2FsIGZvciB0aGUgdGFibGV0LCBidXQgaWYgaXQKIAkJICogZmFpbGVkIHRoZW4gdGhlcmUgaXMgbm8gbmVlZCB0byBjcmVhdGUgYWMgYXR0cmlidXRlCkBAIC0zNjcsOCArMzY5LDggQEAKIAogCXJldCA9IHBvd2VyX3N1cHBseV9yZWdpc3RlcigmaGRldi0+ZGV2LCAmd2RhdGEtPmFjKTsKIAlpZiAocmV0KSB7Ci0JCWRldl93YXJuKCZoZGV2LT5kZXYsCi0JCQkiY2FuJ3QgY3JlYXRlIGFjIGJhdHRlcnkgYXR0cmlidXRlLCBlcnI6ICVkXG4iLCByZXQpOworCQloaWRfd2FybihoZGV2LAorCQkJICJjYW4ndCBjcmVhdGUgYWMgYmF0dGVyeSBhdHRyaWJ1dGUsIGVycjogJWRcbiIsIHJldCk7CiAJCS8qCiAJCSAqIGFjIGF0dHJpYnV0ZSBpcyBub3QgY3JpdGljYWwgZm9yIHRoZSB0YWJsZXQsIGJ1dCBpZiBpdAogCQkgKiBmYWlsZWQgdGhlbiB3ZSBkb24ndCB3YW50IHRvIGJhdHRlcnkgYXR0cmlidXRlIHRvIGV4aXN0CkBAIC00NTQsNyArNDU2LDcgQEAKIAogCXJldCA9IGhpZF9yZWdpc3Rlcl9kcml2ZXIoJndhY29tX2RyaXZlcik7CiAJaWYgKHJldCkKLQkJcHJpbnRrKEtFUk5fRVJSICJjYW4ndCByZWdpc3RlciB3YWNvbSBkcml2ZXJcbiIpOworCQlwcl9lcnIoImNhbid0IHJlZ2lzdGVyIHdhY29tIGRyaXZlclxuIik7CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLXpwZmYuYyBiL2RyaXZlcnMvaGlkL2hpZC16cGZmLmMKaW5kZXggYjdhY2NlYS4uZjMxZmFiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLXpwZmYuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtenBmZi5jCkBAIC03NSwxNCArNzUsMTQgQEAKIAlpbnQgZXJyb3I7CiAKIAlpZiAobGlzdF9lbXB0eShyZXBvcnRfbGlzdCkpIHsKLQkJZGV2X2VycigmaGlkLT5kZXYsICJubyBvdXRwdXQgcmVwb3J0IGZvdW5kXG4iKTsKKwkJaGlkX2VycihoaWQsICJubyBvdXRwdXQgcmVwb3J0IGZvdW5kXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJcmVwb3J0ID0gbGlzdF9lbnRyeShyZXBvcnRfbGlzdC0+bmV4dCwgc3RydWN0IGhpZF9yZXBvcnQsIGxpc3QpOwogCiAJaWYgKHJlcG9ydC0+bWF4ZmllbGQgPCA0KSB7Ci0JCWRldl9lcnIoJmhpZC0+ZGV2LCAibm90IGVub3VnaCBmaWVsZHMgaW4gcmVwb3J0XG4iKTsKKwkJaGlkX2VycihoaWQsICJub3QgZW5vdWdoIGZpZWxkcyBpbiByZXBvcnRcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKQEAgLTEwNSw4ICsxMDUsNyBAQAogCXpwZmYtPnJlcG9ydC0+ZmllbGRbM10tPnZhbHVlWzBdID0gMHgwMDsKIAl1c2JoaWRfc3VibWl0X3JlcG9ydChoaWQsIHpwZmYtPnJlcG9ydCwgVVNCX0RJUl9PVVQpOwogCi0JZGV2X2luZm8oJmhpZC0+ZGV2LCAiZm9yY2UgZmVlZGJhY2sgZm9yIFplcm9wbHVzIGJhc2VkIGRldmljZXMgYnkgIgotCSAgICAgICAiQW5zc2kgSGFubnVsYSA8YW5zc2kuaGFubnVsYUBnbWFpbC5jb20+XG4iKTsKKwloaWRfaW5mbyhoaWQsICJmb3JjZSBmZWVkYmFjayBmb3IgWmVyb3BsdXMgYmFzZWQgZGV2aWNlcyBieSBBbnNzaSBIYW5udWxhIDxhbnNzaS5oYW5udWxhQGdtYWlsLmNvbT5cbiIpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMjMsMTMgKzEyMiwxMyBAQAogCiAJcmV0ID0gaGlkX3BhcnNlKGhkZXYpOwogCWlmIChyZXQpIHsKLQkJZGV2X2VycigmaGRldi0+ZGV2LCAicGFyc2UgZmFpbGVkXG4iKTsKKwkJaGlkX2VycihoZGV2LCAicGFyc2UgZmFpbGVkXG4iKTsKIAkJZ290byBlcnI7CiAJfQogCiAJcmV0ID0gaGlkX2h3X3N0YXJ0KGhkZXYsIEhJRF9DT05ORUNUX0RFRkFVTFQgJiB+SElEX0NPTk5FQ1RfRkYpOwogCWlmIChyZXQpIHsKLQkJZGV2X2VycigmaGRldi0+ZGV2LCAiaHcgc3RhcnQgZmFpbGVkXG4iKTsKKwkJaGlkX2VycihoZGV2LCAiaHcgc3RhcnQgZmFpbGVkXG4iKTsKIAkJZ290byBlcnI7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtenlkYWNyb24uYyBiL2RyaXZlcnMvaGlkL2hpZC16eWRhY3Jvbi5jCmluZGV4IGFhYzFmOTIuLmU5MDM3MTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC16eWRhY3Jvbi5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC16eWRhY3Jvbi5jCkBAIC0zNCw5ICszNCw4IEBACiAJCXJkZXNjWzB4OTZdID09IDB4YmMgJiYgcmRlc2NbMHg5N10gPT0gMHhmZiAmJgogCQlyZGVzY1sweGNhXSA9PSAweGJjICYmIHJkZXNjWzB4Y2JdID09IDB4ZmYgJiYKIAkJcmRlc2NbMHhlMV0gPT0gMHhiYyAmJiByZGVzY1sweGUyXSA9PSAweGZmKSB7Ci0JCQlkZXZfaW5mbygmaGRldi0+ZGV2LAotCQkJCSJmaXhpbmcgdXAgenlkYWNyb24gcmVtb3RlIGNvbnRyb2wgcmVwb3J0ICIKLQkJCQkiZGVzY3JpcHRvclxuIik7CisJCQloaWRfaW5mbyhoZGV2LAorCQkJCSJmaXhpbmcgdXAgenlkYWNyb24gcmVtb3RlIGNvbnRyb2wgcmVwb3J0IGRlc2NyaXB0b3JcbiIpOwogCQkJcmRlc2NbMHg5Nl0gPSByZGVzY1sweGNhXSA9IHJkZXNjWzB4ZTFdID0gMHgwYzsKIAkJCXJkZXNjWzB4OTddID0gcmRlc2NbMHhjYl0gPSByZGVzY1sweGUyXSA9IDB4MDA7CiAJCX0KQEAgLTE3Miw3ICsxNzEsNyBAQAogCiAJemMgPSBremFsbG9jKHNpemVvZigqemMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoemMgPT0gTlVMTCkgewotCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJ6eWRhY3JvbjogY2FuJ3QgYWxsb2MgZGVzY3JpcHRvclxuIik7CisJCWhpZF9lcnIoaGRldiwgImNhbid0IGFsbG9jIGRlc2NyaXB0b3JcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTE4MCwxMyArMTc5LDEzIEBACiAKIAlyZXQgPSBoaWRfcGFyc2UoaGRldik7CiAJaWYgKHJldCkgewotCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJ6eWRhY3JvbjogcGFyc2UgZmFpbGVkXG4iKTsKKwkJaGlkX2VycihoZGV2LCAicGFyc2UgZmFpbGVkXG4iKTsKIAkJZ290byBlcnJfZnJlZTsKIAl9CiAKIAlyZXQgPSBoaWRfaHdfc3RhcnQoaGRldiwgSElEX0NPTk5FQ1RfREVGQVVMVCk7CiAJaWYgKHJldCkgewotCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJ6eWRhY3JvbjogaHcgc3RhcnQgZmFpbGVkXG4iKTsKKwkJaGlkX2VycihoZGV2LCAiaHcgc3RhcnQgZmFpbGVkXG4iKTsKIAkJZ290byBlcnJfZnJlZTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZHJhdy5jIGIvZHJpdmVycy9oaWQvaGlkcmF3LmMKaW5kZXggZTFmMDc0OC4uNDY4ZTg3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkcmF3LmMKKysrIGIvZHJpdmVycy9oaWQvaGlkcmF3LmMKQEAgLTE5LDYgKzE5LDggQEAKICAqIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCiAgKi8KIAorI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpAQCAtMTIyLDE1ICsxMjQsMTUgQEAKIAl9CiAKIAlpZiAoY291bnQgPiBISURfTUFYX0JVRkZFUl9TSVpFKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImhpZHJhdzogcGlkICVkIHBhc3NlZCB0b28gbGFyZ2UgcmVwb3J0XG4iLAotCQkJCXRhc2tfcGlkX25yKGN1cnJlbnQpKTsKKwkJaGlkX3dhcm4oZGV2LCAicGlkICVkIHBhc3NlZCB0b28gbGFyZ2UgcmVwb3J0XG4iLAorCQkJIHRhc2tfcGlkX25yKGN1cnJlbnQpKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBvdXQ7CiAJfQogCiAJaWYgKGNvdW50IDwgMikgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJoaWRyYXc6IHBpZCAlZCBwYXNzZWQgdG9vIHNob3J0IHJlcG9ydFxuIiwKLQkJCQl0YXNrX3BpZF9ucihjdXJyZW50KSk7CisJCWhpZF93YXJuKGRldiwgInBpZCAlZCBwYXNzZWQgdG9vIHNob3J0IHJlcG9ydFxuIiwKKwkJCSB0YXNrX3BpZF9ucihjdXJyZW50KSk7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTE5MiwxNSArMTk0LDEzIEBACiAKIAlkZXYgPSBoaWRyYXdfdGFibGVbbWlub3JdOwogCWlmICghZGV2LT5vcGVuKyspIHsKLQkJaWYgKGRldi0+aGlkLT5sbF9kcml2ZXItPnBvd2VyKSB7Ci0JCQllcnIgPSBkZXYtPmhpZC0+bGxfZHJpdmVyLT5wb3dlcihkZXYtPmhpZCwgUE1fSElOVF9GVUxMT04pOwotCQkJaWYgKGVyciA8IDApCi0JCQkJZ290byBvdXRfdW5sb2NrOwotCQl9Ci0JCWVyciA9IGRldi0+aGlkLT5sbF9kcml2ZXItPm9wZW4oZGV2LT5oaWQpOworCQllcnIgPSBoaWRfaHdfcG93ZXIoZGV2LT5oaWQsIFBNX0hJTlRfRlVMTE9OKTsKKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIG91dF91bmxvY2s7CisKKwkJZXJyID0gaGlkX2h3X29wZW4oZGV2LT5oaWQpOwogCQlpZiAoZXJyIDwgMCkgewotCQkJaWYgKGRldi0+aGlkLT5sbF9kcml2ZXItPnBvd2VyKQotCQkJCWRldi0+aGlkLT5sbF9kcml2ZXItPnBvd2VyKGRldi0+aGlkLCBQTV9ISU5UX05PUk1BTCk7CisJCQloaWRfaHdfcG93ZXIoZGV2LT5oaWQsIFBNX0hJTlRfTk9STUFMKTsKIAkJCWRldi0+b3Blbi0tOwogCQl9CiAJfQpAQCAtMjI5LDkgKzIyOSw4IEBACiAJZGV2ID0gaGlkcmF3X3RhYmxlW21pbm9yXTsKIAlpZiAoIS0tZGV2LT5vcGVuKSB7CiAJCWlmIChsaXN0LT5oaWRyYXctPmV4aXN0KSB7Ci0JCQlpZiAoZGV2LT5oaWQtPmxsX2RyaXZlci0+cG93ZXIpCi0JCQkJZGV2LT5oaWQtPmxsX2RyaXZlci0+cG93ZXIoZGV2LT5oaWQsIFBNX0hJTlRfTk9STUFMKTsKLQkJCWRldi0+aGlkLT5sbF9kcml2ZXItPmNsb3NlKGRldi0+aGlkKTsKKwkJCWhpZF9od19wb3dlcihkZXYtPmhpZCwgUE1fSElOVF9OT1JNQUwpOworCQkJaGlkX2h3X2Nsb3NlKGRldi0+aGlkKTsKIAkJfSBlbHNlIHsKIAkJCWtmcmVlKGxpc3QtPmhpZHJhdyk7CiAJCX0KQEAgLTM0NSw2ICszNDQsOSBAQAogCS5vcGVuID0gICAgICAgICBoaWRyYXdfb3BlbiwKIAkucmVsZWFzZSA9ICAgICAgaGlkcmF3X3JlbGVhc2UsCiAJLnVubG9ja2VkX2lvY3RsID0gaGlkcmF3X2lvY3RsLAorI2lmZGVmIENPTkZJR19DT01QQVQKKwkuY29tcGF0X2lvY3RsICAgPSBoaWRyYXdfaW9jdGwsCisjZW5kaWYKIAkubGxzZWVrID0Jbm9vcF9sbHNlZWssCiB9OwogCkBAIC00MzMsNyArNDM1LDcgQEAKIAlkZXZpY2VfZGVzdHJveShoaWRyYXdfY2xhc3MsIE1LREVWKGhpZHJhd19tYWpvciwgaGlkcmF3LT5taW5vcikpOwogCiAJaWYgKGhpZHJhdy0+b3BlbikgewotCQloaWQtPmxsX2RyaXZlci0+Y2xvc2UoaGlkKTsKKwkJaGlkX2h3X2Nsb3NlKGhpZCk7CiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaGlkcmF3LT53YWl0KTsKIAl9IGVsc2UgewogCQlrZnJlZShoaWRyYXcpOwpAQCAtNDUyLDcgKzQ1NCw3IEBACiAJaGlkcmF3X21ham9yID0gTUFKT1IoZGV2X2lkKTsKIAogCWlmIChyZXN1bHQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImhpZHJhdzogY2FuJ3QgZ2V0IG1ham9yIG51bWJlclxuIik7CisJCXByX3dhcm4oImNhbid0IGdldCBtYWpvciBudW1iZXJcbiIpOwogCQlyZXN1bHQgPSAwOwogCQlnb3RvIG91dDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC91c2JoaWQvTWFrZWZpbGUgYi9kcml2ZXJzL2hpZC91c2JoaWQvTWFrZWZpbGUKaW5kZXggMTMyOWVjYi4uZGIzY2YzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvdXNiaGlkL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvaGlkL3VzYmhpZC9NYWtlZmlsZQpAQCAtMywxNSArMywxNSBAQAogIwogCiAjIE11bHRpcGFydCBvYmplY3RzLgotdXNiaGlkLW9ianMJOj0gaGlkLWNvcmUubyBoaWQtcXVpcmtzLm8KK3VzYmhpZC15CTo9IGhpZC1jb3JlLm8gaGlkLXF1aXJrcy5vCiAKICMgT3B0aW9uYWwgcGFydHMgb2YgbXVsdGlwYXJ0IG9iamVjdHMuCiAKIGlmZXEgKCQoQ09ORklHX1VTQl9ISURERVYpLHkpCi0JdXNiaGlkLW9ianMJKz0gaGlkZGV2Lm8KKwl1c2JoaWQteQkrPSBoaWRkZXYubwogZW5kaWYKIGlmZXEgKCQoQ09ORklHX0hJRF9QSUQpLHkpCi0JdXNiaGlkLW9ianMJKz0gaGlkLXBpZGZmLm8KKwl1c2JoaWQteQkrPSBoaWQtcGlkZmYubwogZW5kaWYKIAogb2JqLSQoQ09ORklHX1VTQl9ISUQpCQkrPSB1c2JoaWQubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1jb3JlLmMgYi9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLWNvcmUuYwppbmRleCA1NDg5ZWFiLi5iMzM2ZGQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLWNvcmUuYworKysgYi9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLWNvcmUuYwpAQCAtNjcsNyArNjcsNiBAQAogICogSW5wdXQgc3VibWlzc2lvbiBhbmQgSS9PIGVycm9yIGhhbmRsZXIuCiAgKi8KIHN0YXRpYyBERUZJTkVfTVVURVgoaGlkX29wZW5fbXV0KTsKLXN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqcmVzdW1wdGlvbl93YWtlcjsKIAogc3RhdGljIHZvaWQgaGlkX2lvX2Vycm9yKHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpOwogc3RhdGljIGludCBoaWRfc3VibWl0X291dChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKTsKQEAgLTEzNiwxMCArMTM1LDEwIEBACiAJCQloaWRfaW9fZXJyb3IoaGlkKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJZXJyX2hpZCgiY2FuJ3QgcmVzZXQgZGV2aWNlLCAlcy0lcy9pbnB1dCVkLCBzdGF0dXMgJWQiLAotCQkJCWhpZF90b191c2JfZGV2KGhpZCktPmJ1cy0+YnVzX25hbWUsCi0JCQkJaGlkX3RvX3VzYl9kZXYoaGlkKS0+ZGV2cGF0aCwKLQkJCQl1c2JoaWQtPmlmbnVtLCByYyk7CisJCWhpZF9lcnIoaGlkLCAiY2FuJ3QgcmVzZXQgZGV2aWNlLCAlcy0lcy9pbnB1dCVkLCBzdGF0dXMgJWRcbiIsCisJCQloaWRfdG9fdXNiX2RldihoaWQpLT5idXMtPmJ1c19uYW1lLAorCQkJaGlkX3RvX3VzYl9kZXYoaGlkKS0+ZGV2cGF0aCwKKwkJCXVzYmhpZC0+aWZudW0sIHJjKTsKIAkJLyogRkFMTFRIUk9VR0ggKi8KIAljYXNlIC1FSE9TVFVOUkVBQ0g6CiAJY2FzZSAtRU5PREVWOgpAQCAtMjc4LDE4ICsyNzcsMTggQEAKIAkJaGlkX2lvX2Vycm9yKGhpZCk7CiAJCXJldHVybjsKIAlkZWZhdWx0OgkJLyogZXJyb3IgKi8KLQkJZGV2X3dhcm4oJnVyYi0+ZGV2LT5kZXYsICJpbnB1dCBpcnEgc3RhdHVzICVkICAiCi0JCQkJInJlY2VpdmVkXG4iLCB1cmItPnN0YXR1cyk7CisJCWhpZF93YXJuKHVyYi0+ZGV2LCAiaW5wdXQgaXJxIHN0YXR1cyAlZCByZWNlaXZlZFxuIiwKKwkJCSB1cmItPnN0YXR1cyk7CiAJfQogCiAJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKIAlpZiAoc3RhdHVzKSB7CiAJCWNsZWFyX2JpdChISURfSU5fUlVOTklORywgJnVzYmhpZC0+aW9mbCk7CiAJCWlmIChzdGF0dXMgIT0gLUVQRVJNKSB7Ci0JCQllcnJfaGlkKCJjYW4ndCByZXN1Ym1pdCBpbnRyLCAlcy0lcy9pbnB1dCVkLCBzdGF0dXMgJWQiLAotCQkJCQloaWRfdG9fdXNiX2RldihoaWQpLT5idXMtPmJ1c19uYW1lLAotCQkJCQloaWRfdG9fdXNiX2RldihoaWQpLT5kZXZwYXRoLAotCQkJCQl1c2JoaWQtPmlmbnVtLCBzdGF0dXMpOworCQkJaGlkX2VycihoaWQsICJjYW4ndCByZXN1Ym1pdCBpbnRyLCAlcy0lcy9pbnB1dCVkLCBzdGF0dXMgJWRcbiIsCisJCQkJaGlkX3RvX3VzYl9kZXYoaGlkKS0+YnVzLT5idXNfbmFtZSwKKwkJCQloaWRfdG9fdXNiX2RldihoaWQpLT5kZXZwYXRoLAorCQkJCXVzYmhpZC0+aWZudW0sIHN0YXR1cyk7CiAJCQloaWRfaW9fZXJyb3IoaGlkKTsKIAkJfQogCX0KQEAgLTMwMCwxMCArMjk5LDE5IEBACiAJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKIAljaGFyICpyYXdfcmVwb3J0OwogCXN0cnVjdCB1c2JoaWRfZGV2aWNlICp1c2JoaWQgPSBoaWQtPmRyaXZlcl9kYXRhOworCWludCByOwogCiAJcmVwb3J0ID0gdXNiaGlkLT5vdXRbdXNiaGlkLT5vdXR0YWlsXS5yZXBvcnQ7CiAJcmF3X3JlcG9ydCA9IHVzYmhpZC0+b3V0W3VzYmhpZC0+b3V0dGFpbF0ucmF3X3JlcG9ydDsKIAorCXIgPSB1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2VfYXN5bmModXNiaGlkLT5pbnRmKTsKKwlpZiAociA8IDApCisJCXJldHVybiAtMTsKKworCS8qCisJICogaWYgdGhlIGRldmljZSBoYXNuJ3QgYmVlbiB3b2tlbiwgd2UgbGVhdmUgdGhlIG91dHB1dAorCSAqIHRvIHJlc3VtZSgpCisJICovCiAJaWYgKCF0ZXN0X2JpdChISURfUkVQT1JURURfSURMRSwgJnVzYmhpZC0+aW9mbCkpIHsKIAkJdXNiaGlkLT51cmJvdXQtPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSAoKHJlcG9ydC0+c2l6ZSAtIDEpID4+IDMpICsgMSArIChyZXBvcnQtPmlkID4gMCk7CiAJCXVzYmhpZC0+dXJib3V0LT5kZXYgPSBoaWRfdG9fdXNiX2RldihoaWQpOwpAQCAtMzEzLDE3ICszMjEsMTEgQEAKIAkJZGJnX2hpZCgic3VibWl0dGluZyBvdXQgdXJiXG4iKTsKIAogCQlpZiAodXNiX3N1Ym1pdF91cmIodXNiaGlkLT51cmJvdXQsIEdGUF9BVE9NSUMpKSB7Ci0JCQllcnJfaGlkKCJ1c2Jfc3VibWl0X3VyYihvdXQpIGZhaWxlZCIpOworCQkJaGlkX2VycihoaWQsICJ1c2Jfc3VibWl0X3VyYihvdXQpIGZhaWxlZFxuIik7CisJCQl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2VfYXN5bmModXNiaGlkLT5pbnRmKTsKIAkJCXJldHVybiAtMTsKIAkJfQogCQl1c2JoaWQtPmxhc3Rfb3V0ID0gamlmZmllczsKLQl9IGVsc2UgewotCQkvKgotCQkgKiBxdWV1ZSB3b3JrIHRvIHdha2UgdXAgdGhlIGRldmljZS4KLQkJICogYXMgdGhlIHdvcmsgcXVldWUgaXMgZnJlZXplYWJsZSwgdGhpcyBpcyBzYWZlCi0JCSAqIHdpdGggcmVzcGVjdCB0byBTVEQgYW5kIFNUUgotCQkgKi8KLQkJcXVldWVfd29yayhyZXN1bXB0aW9uX3dha2VyLCAmdXNiaGlkLT5yZXN0YXJ0X3dvcmspOwogCX0KIAogCXJldHVybiAwOwpAQCAtMzM0LDEzICszMzYsMTYgQEAKIAlzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0OwogCXVuc2lnbmVkIGNoYXIgZGlyOwogCWNoYXIgKnJhd19yZXBvcnQ7Ci0JaW50IGxlbjsKKwlpbnQgbGVuLCByOwogCXN0cnVjdCB1c2JoaWRfZGV2aWNlICp1c2JoaWQgPSBoaWQtPmRyaXZlcl9kYXRhOwogCiAJcmVwb3J0ID0gdXNiaGlkLT5jdHJsW3VzYmhpZC0+Y3RybHRhaWxdLnJlcG9ydDsKIAlyYXdfcmVwb3J0ID0gdXNiaGlkLT5jdHJsW3VzYmhpZC0+Y3RybHRhaWxdLnJhd19yZXBvcnQ7CiAJZGlyID0gdXNiaGlkLT5jdHJsW3VzYmhpZC0+Y3RybHRhaWxdLmRpcjsKIAorCXIgPSB1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2VfYXN5bmModXNiaGlkLT5pbnRmKTsKKwlpZiAociA8IDApCisJCXJldHVybiAtMTsKIAlpZiAoIXRlc3RfYml0KEhJRF9SRVBPUlRFRF9JRExFLCAmdXNiaGlkLT5pb2ZsKSkgewogCQlsZW4gPSAoKHJlcG9ydC0+c2l6ZSAtIDEpID4+IDMpICsgMSArIChyZXBvcnQtPmlkID4gMCk7CiAJCWlmIChkaXIgPT0gVVNCX0RJUl9PVVQpIHsKQEAgLTM3NSwxNyArMzgwLDExIEBACiAJCQl1c2JoaWQtPmNyLT53VmFsdWUsIHVzYmhpZC0+Y3ItPndJbmRleCwgdXNiaGlkLT5jci0+d0xlbmd0aCk7CiAKIAkJaWYgKHVzYl9zdWJtaXRfdXJiKHVzYmhpZC0+dXJiY3RybCwgR0ZQX0FUT01JQykpIHsKLQkJCWVycl9oaWQoInVzYl9zdWJtaXRfdXJiKGN0cmwpIGZhaWxlZCIpOworCQkJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlX2FzeW5jKHVzYmhpZC0+aW50Zik7CisJCQloaWRfZXJyKGhpZCwgInVzYl9zdWJtaXRfdXJiKGN0cmwpIGZhaWxlZFxuIik7CiAJCQlyZXR1cm4gLTE7CiAJCX0KIAkJdXNiaGlkLT5sYXN0X2N0cmwgPSBqaWZmaWVzOwotCX0gZWxzZSB7Ci0JCS8qCi0JCSAqIHF1ZXVlIHdvcmsgdG8gd2FrZSB1cCB0aGUgZGV2aWNlLgotCQkgKiBhcyB0aGUgd29yayBxdWV1ZSBpcyBmcmVlemVhYmxlLCB0aGlzIGlzIHNhZmUKLQkJICogd2l0aCByZXNwZWN0IHRvIFNURCBhbmQgU1RSCi0JCSAqLwotCQlxdWV1ZV93b3JrKHJlc3VtcHRpb25fd2FrZXIsICZ1c2JoaWQtPnJlc3RhcnRfd29yayk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC00MTMsOCArNDEyLDggQEAKIAljYXNlIC1FTk9FTlQ6CiAJCWJyZWFrOwogCWRlZmF1bHQ6CQkvKiBlcnJvciAqLwotCQlkZXZfd2FybigmdXJiLT5kZXYtPmRldiwgIm91dHB1dCBpcnEgc3RhdHVzICVkICIKLQkJCQkicmVjZWl2ZWRcbiIsIHVyYi0+c3RhdHVzKTsKKwkJaGlkX3dhcm4odXJiLT5kZXYsICJvdXRwdXQgaXJxIHN0YXR1cyAlZCByZWNlaXZlZFxuIiwKKwkJCSB1cmItPnN0YXR1cyk7CiAJfQogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnVzYmhpZC0+bG9jaywgZmxhZ3MpOwpAQCAtNDM1LDYgKzQzNCw3IEBACiAKIAljbGVhcl9iaXQoSElEX09VVF9SVU5OSU5HLCAmdXNiaGlkLT5pb2ZsKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1c2JoaWQtPmxvY2ssIGZsYWdzKTsKKwl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2VfYXN5bmModXNiaGlkLT5pbnRmKTsKIAl3YWtlX3VwKCZ1c2JoaWQtPndhaXQpOwogfQogCkBAIC00NjYsOCArNDY2LDcgQEAKIAljYXNlIC1FUElQRToJCS8qIHJlcG9ydCBub3QgYXZhaWxhYmxlICovCiAJCWJyZWFrOwogCWRlZmF1bHQ6CQkvKiBlcnJvciAqLwotCQlkZXZfd2FybigmdXJiLT5kZXYtPmRldiwgImN0cmwgdXJiIHN0YXR1cyAlZCAiCi0JCQkJInJlY2VpdmVkXG4iLCBzdGF0dXMpOworCQloaWRfd2Fybih1cmItPmRldiwgImN0cmwgdXJiIHN0YXR1cyAlZCByZWNlaXZlZFxuIiwgc3RhdHVzKTsKIAl9CiAKIAlpZiAodW5wbHVnKQpAQCAtNDgxLDExICs0ODAsMTMgQEAKIAkJCXdha2VfdXAoJnVzYmhpZC0+d2FpdCk7CiAJCX0KIAkJc3Bpbl91bmxvY2soJnVzYmhpZC0+bG9jayk7CisJCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZV9hc3luYyh1c2JoaWQtPmludGYpOwogCQlyZXR1cm47CiAJfQogCiAJY2xlYXJfYml0KEhJRF9DVFJMX1JVTk5JTkcsICZ1c2JoaWQtPmlvZmwpOwogCXNwaW5fdW5sb2NrKCZ1c2JoaWQtPmxvY2spOworCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZV9hc3luYyh1c2JoaWQtPmludGYpOwogCXdha2VfdXAoJnVzYmhpZC0+d2FpdCk7CiB9CiAKQEAgLTUwMSwxMyArNTAyLDEzIEBACiAKIAlpZiAodXNiaGlkLT51cmJvdXQgJiYgZGlyID09IFVTQl9ESVJfT1VUICYmIHJlcG9ydC0+dHlwZSA9PSBISURfT1VUUFVUX1JFUE9SVCkgewogCQlpZiAoKGhlYWQgPSAodXNiaGlkLT5vdXRoZWFkICsgMSkgJiAoSElEX09VVFBVVF9GSUZPX1NJWkUgLSAxKSkgPT0gdXNiaGlkLT5vdXR0YWlsKSB7Ci0JCQlkZXZfd2FybigmaGlkLT5kZXYsICJvdXRwdXQgcXVldWUgZnVsbFxuIik7CisJCQloaWRfd2FybihoaWQsICJvdXRwdXQgcXVldWUgZnVsbFxuIik7CiAJCQlyZXR1cm47CiAJCX0KIAogCQl1c2JoaWQtPm91dFt1c2JoaWQtPm91dGhlYWRdLnJhd19yZXBvcnQgPSBrbWFsbG9jKGxlbiwgR0ZQX0FUT01JQyk7CiAJCWlmICghdXNiaGlkLT5vdXRbdXNiaGlkLT5vdXRoZWFkXS5yYXdfcmVwb3J0KSB7Ci0JCQlkZXZfd2FybigmaGlkLT5kZXYsICJvdXRwdXQgcXVldWVpbmcgZmFpbGVkXG4iKTsKKwkJCWhpZF93YXJuKGhpZCwgIm91dHB1dCBxdWV1ZWluZyBmYWlsZWRcbiIpOwogCQkJcmV0dXJuOwogCQl9CiAJCWhpZF9vdXRwdXRfcmVwb3J0KHJlcG9ydCwgdXNiaGlkLT5vdXRbdXNiaGlkLT5vdXRoZWFkXS5yYXdfcmVwb3J0KTsKQEAgLTUzMiwxNCArNTMzLDE0IEBACiAJfQogCiAJaWYgKChoZWFkID0gKHVzYmhpZC0+Y3RybGhlYWQgKyAxKSAmIChISURfQ09OVFJPTF9GSUZPX1NJWkUgLSAxKSkgPT0gdXNiaGlkLT5jdHJsdGFpbCkgewotCQlkZXZfd2FybigmaGlkLT5kZXYsICJjb250cm9sIHF1ZXVlIGZ1bGxcbiIpOworCQloaWRfd2FybihoaWQsICJjb250cm9sIHF1ZXVlIGZ1bGxcbiIpOwogCQlyZXR1cm47CiAJfQogCiAJaWYgKGRpciA9PSBVU0JfRElSX09VVCkgewogCQl1c2JoaWQtPmN0cmxbdXNiaGlkLT5jdHJsaGVhZF0ucmF3X3JlcG9ydCA9IGttYWxsb2MobGVuLCBHRlBfQVRPTUlDKTsKIAkJaWYgKCF1c2JoaWQtPmN0cmxbdXNiaGlkLT5jdHJsaGVhZF0ucmF3X3JlcG9ydCkgewotCQkJZGV2X3dhcm4oJmhpZC0+ZGV2LCAiY29udHJvbCBxdWV1ZWluZyBmYWlsZWRcbiIpOworCQkJaGlkX3dhcm4oaGlkLCAiY29udHJvbCBxdWV1ZWluZyBmYWlsZWRcbiIpOwogCQkJcmV0dXJuOwogCQl9CiAJCWhpZF9vdXRwdXRfcmVwb3J0KHJlcG9ydCwgdXNiaGlkLT5jdHJsW3VzYmhpZC0+Y3RybGhlYWRdLnJhd19yZXBvcnQpOwpAQCAtNTkwLDcgKzU5MSw3IEBACiAJCXJldHVybiAtMTsKIAogCWlmICgob2Zmc2V0ID0gaGlkaW5wdXRfZmluZF9maWVsZChoaWQsIHR5cGUsIGNvZGUsICZmaWVsZCkpID09IC0xKSB7Ci0JCWRldl93YXJuKCZkZXYtPmRldiwgImV2ZW50IGZpZWxkIG5vdCBmb3VuZFxuIik7CisJCWhpZF93YXJuKGRldiwgImV2ZW50IGZpZWxkIG5vdCBmb3VuZFxuIik7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTY1Niw3ICs2NTcsNyBAQAogCW11dGV4X2xvY2soJmhpZF9vcGVuX211dCk7CiAJaWYgKCFoaWQtPm9wZW4rKykgewogCQlyZXMgPSB1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2UodXNiaGlkLT5pbnRmKTsKLQkJLyogdGhlIGRldmljZSBtdXN0IGJlIGF3YWtlIHRvIHJlbGlhYmxlIHJlcXVlc3QgcmVtb3RlIHdha2V1cCAqLworCQkvKiB0aGUgZGV2aWNlIG11c3QgYmUgYXdha2UgdG8gcmVsaWFibHkgcmVxdWVzdCByZW1vdGUgd2FrZXVwICovCiAJCWlmIChyZXMgPCAwKSB7CiAJCQloaWQtPm9wZW4tLTsKIAkJCW11dGV4X3VubG9jaygmaGlkX29wZW5fbXV0KTsKQEAgLTcyMiw3ICs3MjMsNyBAQAogCX0KIAogCWlmIChlcnIpCi0JCWRldl93YXJuKCZoaWQtPmRldiwgInRpbWVvdXQgaW5pdGlhbGl6aW5nIHJlcG9ydHNcbiIpOworCQloaWRfd2FybihoaWQsICJ0aW1lb3V0IGluaXRpYWxpemluZyByZXBvcnRzXG4iKTsKIH0KIAogLyoKQEAgLTg1NywxOCArODU4LDYgQEAKIAl1c2JoaWRfcmVzdGFydF9jdHJsX3F1ZXVlKHVzYmhpZCk7CiB9CiAKLXN0YXRpYyB2b2lkIF9fdXNiaGlkX3Jlc3RhcnRfcXVldWVzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgdXNiaGlkX2RldmljZSAqdXNiaGlkID0KLQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB1c2JoaWRfZGV2aWNlLCByZXN0YXJ0X3dvcmspOwotCWludCByOwotCi0JciA9IHVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZSh1c2JoaWQtPmludGYpOwotCWlmIChyIDwgMCkKLQkJcmV0dXJuOwotCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZSh1c2JoaWQtPmludGYpOwotfQotCiBzdGF0aWMgdm9pZCBoaWRfZnJlZV9idWZmZXJzKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpCiB7CiAJc3RydWN0IHVzYmhpZF9kZXZpY2UgKnVzYmhpZCA9IGhpZC0+ZHJpdmVyX2RhdGE7CkBAIC0xMTQwLDggKzExMjksNyBAQAogCQlpZiAodXNiX2VuZHBvaW50X2lzX2ludF9pbigmaW50ZXJmYWNlLT5lbmRwb2ludFtuXS5kZXNjKSkKIAkJCWhhc19pbisrOwogCWlmICghaGFzX2luKSB7Ci0JCWRldl9lcnIoJmludGYtPmRldiwgImNvdWxkbid0IGZpbmQgYW4gaW5wdXQgaW50ZXJydXB0ICIKLQkJCQkiZW5kcG9pbnRcbiIpOworCQloaWRfZXJyKGludGYsICJjb3VsZG4ndCBmaW5kIGFuIGlucHV0IGludGVycnVwdCBlbmRwb2ludFxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtMTIwNiwxNCArMTE5NCwxMyBAQAogCiAJaW5pdF93YWl0cXVldWVfaGVhZCgmdXNiaGlkLT53YWl0KTsKIAlJTklUX1dPUksoJnVzYmhpZC0+cmVzZXRfd29yaywgaGlkX3Jlc2V0KTsKLQlJTklUX1dPUksoJnVzYmhpZC0+cmVzdGFydF93b3JrLCBfX3VzYmhpZF9yZXN0YXJ0X3F1ZXVlcyk7CiAJc2V0dXBfdGltZXIoJnVzYmhpZC0+aW9fcmV0cnksIGhpZF9yZXRyeV90aW1lb3V0LCAodW5zaWduZWQgbG9uZykgaGlkKTsKIAlzcGluX2xvY2tfaW5pdCgmdXNiaGlkLT5sb2NrKTsKIAogCXJldCA9IGhpZF9hZGRfZGV2aWNlKGhpZCk7CiAJaWYgKHJldCkgewogCQlpZiAocmV0ICE9IC1FTk9ERVYpCi0JCQlkZXZfZXJyKCZpbnRmLT5kZXYsICJjYW4ndCBhZGQgaGlkIGRldmljZTogJWRcbiIsIHJldCk7CisJCQloaWRfZXJyKGludGYsICJjYW4ndCBhZGQgaGlkIGRldmljZTogJWRcbiIsIHJldCk7CiAJCWdvdG8gZXJyX2ZyZWU7CiAJfQogCkBAIC0xMjQxLDcgKzEyMjgsNiBAQAogc3RhdGljIHZvaWQgaGlkX2NhbmNlbF9kZWxheWVkX3N0dWZmKHN0cnVjdCB1c2JoaWRfZGV2aWNlICp1c2JoaWQpCiB7CiAJZGVsX3RpbWVyX3N5bmMoJnVzYmhpZC0+aW9fcmV0cnkpOwotCWNhbmNlbF93b3JrX3N5bmMoJnVzYmhpZC0+cmVzdGFydF93b3JrKTsKIAljYW5jZWxfd29ya19zeW5jKCZ1c2JoaWQtPnJlc2V0X3dvcmspOwogfQogCkBAIC0xMjYyLDcgKzEyNDgsNiBAQAogCXNwaW5fbG9ja19pcnEoJnVzYmhpZC0+bG9jayk7CiAJc2V0X2JpdChISURfUkVTRVRfUEVORElORywgJnVzYmhpZC0+aW9mbCk7CiAJc3Bpbl91bmxvY2tfaXJxKCZ1c2JoaWQtPmxvY2spOwotCWNhbmNlbF93b3JrX3N5bmMoJnVzYmhpZC0+cmVzdGFydF93b3JrKTsKIAloaWRfY2Vhc2VfaW8odXNiaGlkKTsKIAogCXJldHVybiAwOwpAQCAtMTQ2MSw5ICsxNDQ2LDYgQEAKIHsKIAlpbnQgcmV0dmFsID0gLUVOT01FTTsKIAotCXJlc3VtcHRpb25fd2FrZXIgPSBjcmVhdGVfZnJlZXplYWJsZV93b3JrcXVldWUoInVzYmhpZF9yZXN1bWVyIik7Ci0JaWYgKCFyZXN1bXB0aW9uX3dha2VyKQotCQlnb3RvIG5vX3F1ZXVlOwogCXJldHZhbCA9IGhpZF9yZWdpc3Rlcl9kcml2ZXIoJmhpZF91c2JfZHJpdmVyKTsKIAlpZiAocmV0dmFsKQogCQlnb3RvIGhpZF9yZWdpc3Rlcl9mYWlsOwpAQCAtMTQ4MSw4ICsxNDYzLDYgQEAKIHVzYmhpZF9xdWlya3NfaW5pdF9mYWlsOgogCWhpZF91bnJlZ2lzdGVyX2RyaXZlcigmaGlkX3VzYl9kcml2ZXIpOwogaGlkX3JlZ2lzdGVyX2ZhaWw6Ci0JZGVzdHJveV93b3JrcXVldWUocmVzdW1wdGlvbl93YWtlcik7Ci1ub19xdWV1ZToKIAlyZXR1cm4gcmV0dmFsOwogfQogCkBAIC0xNDkxLDcgKzE0NzEsNiBAQAogCXVzYl9kZXJlZ2lzdGVyKCZoaWRfZHJpdmVyKTsKIAl1c2JoaWRfcXVpcmtzX2V4aXQoKTsKIAloaWRfdW5yZWdpc3Rlcl9kcml2ZXIoJmhpZF91c2JfZHJpdmVyKTsKLQlkZXN0cm95X3dvcmtxdWV1ZShyZXN1bXB0aW9uX3dha2VyKTsKIH0KIAogbW9kdWxlX2luaXQoaGlkX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1waWRmZi5jIGIvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1waWRmZi5jCmluZGV4IGVmMzgxZDcuLmY5MWMxMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtcGlkZmYuYworKysgYi9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLXBpZGZmLmMKQEAgLTIyLDcgKzIyLDcgQEAKIAogLyogI2RlZmluZSBERUJVRyAqLwogCi0jZGVmaW5lIGRlYnVnKGZvcm1hdCwgYXJnLi4uKSBwcl9kZWJ1ZygiaGlkLXBpZGZmOiAiIGZvcm1hdCAiXG4iICwgIyMgYXJnKQorI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAogCiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CkBAIC0yMjAsNyArMjIwLDcgQEAKIHN0YXRpYyB2b2lkIHBpZGZmX3NldChzdHJ1Y3QgcGlkZmZfdXNhZ2UgKnVzYWdlLCB1MTYgdmFsdWUpCiB7CiAJdXNhZ2UtPnZhbHVlWzBdID0gcGlkZmZfcmVzY2FsZSh2YWx1ZSwgMHhmZmZmLCB1c2FnZS0+ZmllbGQpOwotCWRlYnVnKCJjYWxjdWxhdGVkIGZyb20gJWQgdG8gJWQiLCB2YWx1ZSwgdXNhZ2UtPnZhbHVlWzBdKTsKKwlwcl9kZWJ1ZygiY2FsY3VsYXRlZCBmcm9tICVkIHRvICVkXG4iLCB2YWx1ZSwgdXNhZ2UtPnZhbHVlWzBdKTsKIH0KIAogc3RhdGljIHZvaWQgcGlkZmZfc2V0X3NpZ25lZChzdHJ1Y3QgcGlkZmZfdXNhZ2UgKnVzYWdlLCBzMTYgdmFsdWUpCkBAIC0yMzUsNyArMjM1LDcgQEAKIAkJCXVzYWdlLT52YWx1ZVswXSA9CiAJCQkgICAgcGlkZmZfcmVzY2FsZSh2YWx1ZSwgMHg3ZmZmLCB1c2FnZS0+ZmllbGQpOwogCX0KLQlkZWJ1ZygiY2FsY3VsYXRlZCBmcm9tICVkIHRvICVkIiwgdmFsdWUsIHVzYWdlLT52YWx1ZVswXSk7CisJcHJfZGVidWcoImNhbGN1bGF0ZWQgZnJvbSAlZCB0byAlZFxuIiwgdmFsdWUsIHVzYWdlLT52YWx1ZVswXSk7CiB9CiAKIC8qCkBAIC0yNTksOCArMjU5LDkgQEAKIAlwaWRmZi0+c2V0X2VudmVsb3BlW1BJRF9BVFRBQ0tfVElNRV0udmFsdWVbMF0gPSBlbnZlbG9wZS0+YXR0YWNrX2xlbmd0aDsKIAlwaWRmZi0+c2V0X2VudmVsb3BlW1BJRF9GQURFX1RJTUVdLnZhbHVlWzBdID0gZW52ZWxvcGUtPmZhZGVfbGVuZ3RoOwogCi0JZGVidWcoImF0dGFjayAldSA9PiAlZCIsIGVudmVsb3BlLT5hdHRhY2tfbGV2ZWwsCi0JICAgICAgcGlkZmYtPnNldF9lbnZlbG9wZVtQSURfQVRUQUNLX0xFVkVMXS52YWx1ZVswXSk7CisJaGlkX2RiZyhwaWRmZi0+aGlkLCAiYXR0YWNrICV1ID0+ICVkXG4iLAorCQllbnZlbG9wZS0+YXR0YWNrX2xldmVsLAorCQlwaWRmZi0+c2V0X2VudmVsb3BlW1BJRF9BVFRBQ0tfTEVWRUxdLnZhbHVlWzBdKTsKIAogCXVzYmhpZF9zdWJtaXRfcmVwb3J0KHBpZGZmLT5oaWQsIHBpZGZmLT5yZXBvcnRzW1BJRF9TRVRfRU5WRUxPUEVdLAogCQkJICBVU0JfRElSX09VVCk7CkBAIC00NjYsMzMgKzQ2NywzMyBAQAogCXBpZGZmLT5jcmVhdGVfbmV3X2VmZmVjdF90eXBlLT52YWx1ZVswXSA9IGVmbnVtOwogCXVzYmhpZF9zdWJtaXRfcmVwb3J0KHBpZGZmLT5oaWQsIHBpZGZmLT5yZXBvcnRzW1BJRF9DUkVBVEVfTkVXX0VGRkVDVF0sCiAJCQkgIFVTQl9ESVJfT1VUKTsKLQlkZWJ1ZygiY3JlYXRlX25ld19lZmZlY3Qgc2VudCwgdHlwZTogJWQiLCBlZm51bSk7CisJaGlkX2RiZyhwaWRmZi0+aGlkLCAiY3JlYXRlX25ld19lZmZlY3Qgc2VudCwgdHlwZTogJWRcbiIsIGVmbnVtKTsKIAogCXBpZGZmLT5ibG9ja19sb2FkW1BJRF9FRkZFQ1RfQkxPQ0tfSU5ERVhdLnZhbHVlWzBdID0gMDsKIAlwaWRmZi0+YmxvY2tfbG9hZF9zdGF0dXMtPnZhbHVlWzBdID0gMDsKIAl1c2JoaWRfd2FpdF9pbyhwaWRmZi0+aGlkKTsKIAogCWZvciAoaiA9IDA7IGogPCA2MDsgaisrKSB7Ci0JCWRlYnVnKCJwaWRfYmxvY2tfbG9hZCByZXF1ZXN0ZWQiKTsKKwkJaGlkX2RiZyhwaWRmZi0+aGlkLCAicGlkX2Jsb2NrX2xvYWQgcmVxdWVzdGVkXG4iKTsKIAkJdXNiaGlkX3N1Ym1pdF9yZXBvcnQocGlkZmYtPmhpZCwgcGlkZmYtPnJlcG9ydHNbUElEX0JMT0NLX0xPQURdLAogCQkJCSAgVVNCX0RJUl9JTik7CiAJCXVzYmhpZF93YWl0X2lvKHBpZGZmLT5oaWQpOwogCQlpZiAocGlkZmYtPmJsb2NrX2xvYWRfc3RhdHVzLT52YWx1ZVswXSA9PQogCQkgICAgcGlkZmYtPnN0YXR1c19pZFtQSURfQkxPQ0tfTE9BRF9TVUNDRVNTXSkgewotCQkJZGVidWcoImRldmljZSByZXBvcnRlZCBmcmVlIG1lbW9yeTogJWQgYnl0ZXMiLAotCQkJICAgICAgcGlkZmYtPmJsb2NrX2xvYWRbUElEX1JBTV9QT09MX0FWQUlMQUJMRV0udmFsdWUgPwotCQkJCXBpZGZmLT5ibG9ja19sb2FkW1BJRF9SQU1fUE9PTF9BVkFJTEFCTEVdLnZhbHVlWzBdIDogLTEpOworCQkJaGlkX2RiZyhwaWRmZi0+aGlkLCAiZGV2aWNlIHJlcG9ydGVkIGZyZWUgbWVtb3J5OiAlZCBieXRlc1xuIiwKKwkJCQkgcGlkZmYtPmJsb2NrX2xvYWRbUElEX1JBTV9QT09MX0FWQUlMQUJMRV0udmFsdWUgPworCQkJCSBwaWRmZi0+YmxvY2tfbG9hZFtQSURfUkFNX1BPT0xfQVZBSUxBQkxFXS52YWx1ZVswXSA6IC0xKTsKIAkJCXJldHVybiAwOwogCQl9CiAJCWlmIChwaWRmZi0+YmxvY2tfbG9hZF9zdGF0dXMtPnZhbHVlWzBdID09CiAJCSAgICBwaWRmZi0+c3RhdHVzX2lkW1BJRF9CTE9DS19MT0FEX0ZVTExdKSB7Ci0JCQlkZWJ1Zygibm90IGVub3VnaCBtZW1vcnkgZnJlZTogJWQgYnl0ZXMiLAotCQkJICAgICAgcGlkZmYtPmJsb2NrX2xvYWRbUElEX1JBTV9QT09MX0FWQUlMQUJMRV0udmFsdWUgPworCQkJaGlkX2RiZyhwaWRmZi0+aGlkLCAibm90IGVub3VnaCBtZW1vcnkgZnJlZTogJWQgYnl0ZXNcbiIsCisJCQkJcGlkZmYtPmJsb2NrX2xvYWRbUElEX1JBTV9QT09MX0FWQUlMQUJMRV0udmFsdWUgPwogCQkJCXBpZGZmLT5ibG9ja19sb2FkW1BJRF9SQU1fUE9PTF9BVkFJTEFCTEVdLnZhbHVlWzBdIDogLTEpOwogCQkJcmV0dXJuIC1FTk9TUEM7CiAJCX0KIAl9Ci0JcHJpbnRrKEtFUk5fRVJSICJoaWQtcGlkZmY6IHBpZF9ibG9ja19sb2FkIGZhaWxlZCA2MCB0aW1lc1xuIik7CisJaGlkX2VycihwaWRmZi0+aGlkLCAicGlkX2Jsb2NrX2xvYWQgZmFpbGVkIDYwIHRpbWVzXG4iKTsKIAlyZXR1cm4gLUVJTzsKIH0KIApAQCAtNTQ2LDcgKzU0Nyw4IEBACiAJc3RydWN0IHBpZGZmX2RldmljZSAqcGlkZmYgPSBkZXYtPmZmLT5wcml2YXRlOwogCWludCBwaWRfaWQgPSBwaWRmZi0+cGlkX2lkW2VmZmVjdF9pZF07CiAKLQlkZWJ1Zygic3RhcnRpbmcgdG8gZXJhc2UgJWQvJWQiLCBlZmZlY3RfaWQsIHBpZGZmLT5waWRfaWRbZWZmZWN0X2lkXSk7CisJaGlkX2RiZyhwaWRmZi0+aGlkLCAic3RhcnRpbmcgdG8gZXJhc2UgJWQvJWRcbiIsCisJCWVmZmVjdF9pZCwgcGlkZmYtPnBpZF9pZFtlZmZlY3RfaWRdKTsKIAkvKiBXYWl0IGZvciB0aGUgcXVldWUgdG8gY2xlYXIuIFdlIGRvIG5vdCB3YW50IGEgZnVsbCBmaWZvIHRvCiAJICAgcHJldmVudCB0aGUgZWZmZWN0IHJlbW92YWwuICovCiAJdXNiaGlkX3dhaXRfaW8ocGlkZmYtPmhpZCk7CkBAIC02MDQsOCArNjA2LDcgQEAKIAkJCQl0eXBlX2lkID0gUElEX1NBV19ET1dOOwogCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoKLQkJCQlwcmludGsoS0VSTl9FUlIKLQkJCQkgICAgICAgImhpZC1waWRmZjogaW52YWxpZCB3YXZlZm9ybVxuIik7CisJCQkJaGlkX2VycihwaWRmZi0+aGlkLCAiaW52YWxpZCB3YXZlZm9ybVxuIik7CiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9CiAKQEAgLTY5Niw3ICs2OTcsNyBAQAogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0VSUiAiaGlkLXBpZGZmOiBpbnZhbGlkIHR5cGVcbiIpOworCQloaWRfZXJyKHBpZGZmLT5oaWQsICJpbnZhbGlkIHR5cGVcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTcwNCw3ICs3MDUsNyBAQAogCQlwaWRmZi0+cGlkX2lkW2VmZmVjdC0+aWRdID0KIAkJICAgIHBpZGZmLT5ibG9ja19sb2FkW1BJRF9FRkZFQ1RfQkxPQ0tfSU5ERVhdLnZhbHVlWzBdOwogCi0JZGVidWcoInVwbG9hZGVkIik7CisJaGlkX2RiZyhwaWRmZi0+aGlkLCAidXBsb2FkZWRcbiIpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC03NzAsMTQgKzc3MSwxNCBAQAogCQlmb3IgKGkgPSAwOyBpIDwgcmVwb3J0LT5tYXhmaWVsZDsgaSsrKSB7CiAJCQlpZiAocmVwb3J0LT5maWVsZFtpXS0+bWF4dXNhZ2UgIT0KIAkJCSAgICByZXBvcnQtPmZpZWxkW2ldLT5yZXBvcnRfY291bnQpIHsKLQkJCQlkZWJ1ZygibWF4dXNhZ2UgYW5kIHJlcG9ydF9jb3VudCBkbyBub3QgbWF0Y2gsICIKLQkJCQkgICAgICAic2tpcHBpbmciKTsKKwkJCQlwcl9kZWJ1ZygibWF4dXNhZ2UgYW5kIHJlcG9ydF9jb3VudCBkbyBub3QgbWF0Y2gsIHNraXBwaW5nXG4iKTsKIAkJCQljb250aW51ZTsKIAkJCX0KIAkJCWZvciAoaiA9IDA7IGogPCByZXBvcnQtPmZpZWxkW2ldLT5tYXh1c2FnZTsgaisrKSB7CiAJCQkJaWYgKHJlcG9ydC0+ZmllbGRbaV0tPnVzYWdlW2pdLmhpZCA9PQogCQkJCSAgICAoSElEX1VQX1BJRCB8IHRhYmxlW2tdKSkgewotCQkJCQlkZWJ1ZygiZm91bmQgJWQgYXQgJWQtPiVkIiwgaywgaSwgaik7CisJCQkJCXByX2RlYnVnKCJmb3VuZCAlZCBhdCAlZC0+JWRcbiIsCisJCQkJCQkgaywgaSwgaik7CiAJCQkJCXVzYWdlW2tdLmZpZWxkID0gcmVwb3J0LT5maWVsZFtpXTsKIAkJCQkJdXNhZ2Vba10udmFsdWUgPQogCQkJCQkJJnJlcG9ydC0+ZmllbGRbaV0tPnZhbHVlW2pdOwpAQCAtNzg5LDcgKzc5MCw3IEBACiAJCQkJYnJlYWs7CiAJCX0KIAkJaWYgKCFmb3VuZCAmJiBzdHJpY3QpIHsKLQkJCWRlYnVnKCJmYWlsZWQgdG8gbG9jYXRlICVkIiwgayk7CisJCQlwcl9kZWJ1ZygiZmFpbGVkIHRvIGxvY2F0ZSAlZFxuIiwgayk7CiAJCQlyZXR1cm4gLTE7CiAJCX0KIAl9CkBAIC04MjYsOCArODI3LDggQEAKIAkJCWNvbnRpbnVlOwogCQlyZXQgPSBwaWRmZl9jaGVja191c2FnZShyZXBvcnQtPmZpZWxkWzBdLT5sb2dpY2FsKTsKIAkJaWYgKHJldCAhPSAtMSkgewotCQkJZGVidWcoImZvdW5kIHVzYWdlIDB4JTAyeCBmcm9tIGZpZWxkLT5sb2dpY2FsIiwKLQkJCSAgICAgIHBpZGZmX3JlcG9ydHNbcmV0XSk7CisJCQloaWRfZGJnKGhpZCwgImZvdW5kIHVzYWdlIDB4JTAyeCBmcm9tIGZpZWxkLT5sb2dpY2FsXG4iLAorCQkJCXBpZGZmX3JlcG9ydHNbcmV0XSk7CiAJCQlwaWRmZi0+cmVwb3J0c1tyZXRdID0gcmVwb3J0OwogCQkJY29udGludWU7CiAJCX0KQEAgLTg0NSw4ICs4NDYsOSBAQAogCQkJY29udGludWU7CiAJCXJldCA9IHBpZGZmX2NoZWNrX3VzYWdlKGhpZC0+Y29sbGVjdGlvbltpIC0gMV0udXNhZ2UpOwogCQlpZiAocmV0ICE9IC0xICYmICFwaWRmZi0+cmVwb3J0c1tyZXRdKSB7Ci0JCQlkZWJ1ZygiZm91bmQgdXNhZ2UgMHglMDJ4IGZyb20gY29sbGVjdGlvbiBhcnJheSIsCi0JCQkgICAgICBwaWRmZl9yZXBvcnRzW3JldF0pOworCQkJaGlkX2RiZyhoaWQsCisJCQkJImZvdW5kIHVzYWdlIDB4JTAyeCBmcm9tIGNvbGxlY3Rpb24gYXJyYXlcbiIsCisJCQkJcGlkZmZfcmVwb3J0c1tyZXRdKTsKIAkJCXBpZGZmLT5yZXBvcnRzW3JldF0gPSByZXBvcnQ7CiAJCX0KIAl9CkBAIC04NjEsNyArODYzLDcgQEAKIAogCWZvciAoaSA9IDA7IGkgPD0gUElEX1JFUVVJUkVEX1JFUE9SVFM7IGkrKykgewogCQlpZiAoIXBpZGZmLT5yZXBvcnRzW2ldKSB7Ci0JCQlkZWJ1ZygiJWQgbWlzc2luZyIsIGkpOworCQkJaGlkX2RiZyhwaWRmZi0+aGlkLCAiJWQgbWlzc2luZ1xuIiwgaSk7CiAJCQlyZXR1cm4gMDsKIAkJfQogCX0KQEAgLTg4NCw4ICs4ODYsNyBAQAogCQkJICAgIHJlcG9ydC0+ZmllbGRbaV0tPmxvZ2ljYWxfbWluaW11bSA9PSAxKQogCQkJCXJldHVybiByZXBvcnQtPmZpZWxkW2ldOwogCQkJZWxzZSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICJoaWQtcGlkZmY6IGxvZ2ljYWxfbWluaW11bSAiCi0JCQkJCSJpcyBub3QgMSBhcyBpdCBzaG91bGQgYmVcbiIpOworCQkJCXByX2VycigibG9naWNhbF9taW5pbXVtIGlzIG5vdCAxIGFzIGl0IHNob3VsZCBiZVxuIik7CiAJCQkJcmV0dXJuIE5VTEw7CiAJCQl9CiAJCX0KQEAgLTkyNCw3ICs5MjUsNyBAQAogICovCiBzdGF0aWMgaW50IHBpZGZmX2ZpbmRfc3BlY2lhbF9maWVsZHMoc3RydWN0IHBpZGZmX2RldmljZSAqcGlkZmYpCiB7Ci0JZGVidWcoImZpbmRpbmcgc3BlY2lhbCBmaWVsZHMiKTsKKwloaWRfZGJnKHBpZGZmLT5oaWQsICJmaW5kaW5nIHNwZWNpYWwgZmllbGRzXG4iKTsKIAogCXBpZGZmLT5jcmVhdGVfbmV3X2VmZmVjdF90eXBlID0KIAkJcGlkZmZfZmluZF9zcGVjaWFsX2ZpZWxkKHBpZGZmLT5yZXBvcnRzW1BJRF9DUkVBVEVfTkVXX0VGRkVDVF0sCkBAIC05NDUsMzIgKzk0NiwzMCBAQAogCQlwaWRmZl9maW5kX3NwZWNpYWxfZmllbGQocGlkZmYtPnJlcG9ydHNbUElEX0VGRkVDVF9PUEVSQVRJT05dLAogCQkJCQkgMHg3OCwgMSk7CiAKLQlkZWJ1Zygic2VhcmNoIGRvbmUiKTsKKwloaWRfZGJnKHBpZGZmLT5oaWQsICJzZWFyY2ggZG9uZVxuIik7CiAKIAlpZiAoIXBpZGZmLT5jcmVhdGVfbmV3X2VmZmVjdF90eXBlIHx8ICFwaWRmZi0+c2V0X2VmZmVjdF90eXBlKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiaGlkLXBpZGZmOiBlZmZlY3QgbGlzdHMgbm90IGZvdW5kXG4iKTsKKwkJaGlkX2VycihwaWRmZi0+aGlkLCAiZWZmZWN0IGxpc3RzIG5vdCBmb3VuZFxuIik7CiAJCXJldHVybiAtMTsKIAl9CiAKIAlpZiAoIXBpZGZmLT5lZmZlY3RfZGlyZWN0aW9uKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiaGlkLXBpZGZmOiBkaXJlY3Rpb24gZmllbGQgbm90IGZvdW5kXG4iKTsKKwkJaGlkX2VycihwaWRmZi0+aGlkLCAiZGlyZWN0aW9uIGZpZWxkIG5vdCBmb3VuZFxuIik7CiAJCXJldHVybiAtMTsKIAl9CiAKIAlpZiAoIXBpZGZmLT5kZXZpY2VfY29udHJvbCkgewotCQlwcmludGsoS0VSTl9FUlIgImhpZC1waWRmZjogZGV2aWNlIGNvbnRyb2wgZmllbGQgbm90IGZvdW5kXG4iKTsKKwkJaGlkX2VycihwaWRmZi0+aGlkLCAiZGV2aWNlIGNvbnRyb2wgZmllbGQgbm90IGZvdW5kXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIAogCWlmICghcGlkZmYtPmJsb2NrX2xvYWRfc3RhdHVzKSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgImhpZC1waWRmZjogYmxvY2sgbG9hZCBzdGF0dXMgZmllbGQgbm90IGZvdW5kXG4iKTsKKwkJaGlkX2VycihwaWRmZi0+aGlkLCAiYmxvY2sgbG9hZCBzdGF0dXMgZmllbGQgbm90IGZvdW5kXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIAogCWlmICghcGlkZmYtPmVmZmVjdF9vcGVyYXRpb25fc3RhdHVzKSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgImhpZC1waWRmZjogZWZmZWN0IG9wZXJhdGlvbiBmaWVsZCBub3QgZm91bmRcbiIpOworCQloaWRfZXJyKHBpZGZmLT5oaWQsICJlZmZlY3Qgb3BlcmF0aW9uIGZpZWxkIG5vdCBmb3VuZFxuIik7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTk4MiwyMyArOTgxLDIyIEBACiAKIAlpZiAoIVBJREZGX0ZJTkRfU1BFQ0lBTF9LRVlTKHR5cGVfaWQsIGNyZWF0ZV9uZXdfZWZmZWN0X3R5cGUsCiAJCQkJICAgICBlZmZlY3RfdHlwZXMpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiaGlkLXBpZGZmOiBubyBlZmZlY3QgdHlwZXMgZm91bmRcbiIpOworCQloaWRfZXJyKHBpZGZmLT5oaWQsICJubyBlZmZlY3QgdHlwZXMgZm91bmRcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCiAJaWYgKFBJREZGX0ZJTkRfU1BFQ0lBTF9LRVlTKHN0YXR1c19pZCwgYmxvY2tfbG9hZF9zdGF0dXMsCiAJCQkJICAgIGJsb2NrX2xvYWRfc3RhdHVzKSAhPQogCQkJc2l6ZW9mKHBpZGZmX2Jsb2NrX2xvYWRfc3RhdHVzKSkgewotCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJoaWRwaWRmZjogYmxvY2sgbG9hZCBzdGF0dXMgaWRlbnRpZmllcnMgbm90IGZvdW5kXG4iKTsKKwkJaGlkX2VycihwaWRmZi0+aGlkLAorCQkJImJsb2NrIGxvYWQgc3RhdHVzIGlkZW50aWZpZXJzIG5vdCBmb3VuZFxuIik7CiAJCXJldHVybiAtMTsKIAl9CiAKIAlpZiAoUElERkZfRklORF9TUEVDSUFMX0tFWVMob3BlcmF0aW9uX2lkLCBlZmZlY3Rfb3BlcmF0aW9uX3N0YXR1cywKIAkJCQkgICAgZWZmZWN0X29wZXJhdGlvbl9zdGF0dXMpICE9CiAJCQlzaXplb2YocGlkZmZfZWZmZWN0X29wZXJhdGlvbl9zdGF0dXMpKSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgImhpZHBpZGZmOiBlZmZlY3Qgb3BlcmF0aW9uIGlkZW50aWZpZXJzIG5vdCBmb3VuZFxuIik7CisJCWhpZF9lcnIocGlkZmYtPmhpZCwgImVmZmVjdCBvcGVyYXRpb24gaWRlbnRpZmllcnMgbm90IGZvdW5kXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtMTAxNyw4ICsxMDE1LDggQEAKIAkJaW50IHBpZGZmX3R5cGUgPSBwaWRmZi0+dHlwZV9pZFtpXTsKIAkJaWYgKHBpZGZmLT5zZXRfZWZmZWN0X3R5cGUtPnVzYWdlW3BpZGZmX3R5cGVdLmhpZCAhPQogCQkgICAgcGlkZmYtPmNyZWF0ZV9uZXdfZWZmZWN0X3R5cGUtPnVzYWdlW3BpZGZmX3R5cGVdLmhpZCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJoaWQtcGlkZmY6ICIKLQkJCSAgICAgICAiZWZmZWN0IHR5cGUgbnVtYmVyICVkIGlzIGludmFsaWRcbiIsIGkpOworCQkJaGlkX2VycihwaWRmZi0+aGlkLAorCQkJCSJlZmZlY3QgdHlwZSBudW1iZXIgJWQgaXMgaW52YWxpZFxuIiwgaSk7CiAJCQlyZXR1cm4gLTE7CiAJCX0KIAl9CkBAIC0xMDczLDI3ICsxMDcxLDIzIEBACiAJaW50IGVudmVsb3BlX29rID0gMDsKIAogCWlmIChQSURGRl9GSU5EX0ZJRUxEUyhzZXRfZWZmZWN0LCBQSURfU0VUX0VGRkVDVCwgMSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiaGlkLXBpZGZmOiB1bmtub3duIHNldF9lZmZlY3QgcmVwb3J0IGxheW91dFxuIik7CisJCWhpZF9lcnIocGlkZmYtPmhpZCwgInVua25vd24gc2V0X2VmZmVjdCByZXBvcnQgbGF5b3V0XG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJUElERkZfRklORF9GSUVMRFMoYmxvY2tfbG9hZCwgUElEX0JMT0NLX0xPQUQsIDApOwogCWlmICghcGlkZmYtPmJsb2NrX2xvYWRbUElEX0VGRkVDVF9CTE9DS19JTkRFWF0udmFsdWUpIHsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiaGlkLXBpZGZmOiB1bmtub3duIHBpZF9ibG9ja19sb2FkIHJlcG9ydCBsYXlvdXRcbiIpOworCQloaWRfZXJyKHBpZGZmLT5oaWQsICJ1bmtub3duIHBpZF9ibG9ja19sb2FkIHJlcG9ydCBsYXlvdXRcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlpZiAoUElERkZfRklORF9GSUVMRFMoZWZmZWN0X29wZXJhdGlvbiwgUElEX0VGRkVDVF9PUEVSQVRJT04sIDEpKSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgImhpZC1waWRmZjogdW5rbm93biBlZmZlY3Rfb3BlcmF0aW9uIHJlcG9ydCBsYXlvdXRcbiIpOworCQloaWRfZXJyKHBpZGZmLT5oaWQsICJ1bmtub3duIGVmZmVjdF9vcGVyYXRpb24gcmVwb3J0IGxheW91dFxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAogCWlmIChQSURGRl9GSU5EX0ZJRUxEUyhibG9ja19mcmVlLCBQSURfQkxPQ0tfRlJFRSwgMSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiaGlkLXBpZGZmOiB1bmtub3duIHBpZF9ibG9ja19mcmVlIHJlcG9ydCBsYXlvdXRcbiIpOworCQloaWRfZXJyKHBpZGZmLT5oaWQsICJ1bmtub3duIHBpZF9ibG9ja19mcmVlIHJlcG9ydCBsYXlvdXRcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKQEAgLTExMDUsMjcgKzEwOTksMjYgQEAKIAogCWlmICghZW52ZWxvcGVfb2spIHsKIAkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChGRl9DT05TVEFOVCwgZGV2LT5mZmJpdCkpCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJoaWQtcGlkZmY6ICIKLQkJCSAgICAgICAiaGFzIGNvbnN0YW50IGVmZmVjdCBidXQgbm8gZW52ZWxvcGVcbiIpOworCQkJaGlkX3dhcm4ocGlkZmYtPmhpZCwKKwkJCQkgImhhcyBjb25zdGFudCBlZmZlY3QgYnV0IG5vIGVudmVsb3BlXG4iKTsKIAkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChGRl9SQU1QLCBkZXYtPmZmYml0KSkKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImhpZC1waWRmZjogIgotCQkJCSJoYXMgcmFtcCBlZmZlY3QgYnV0IG5vIGVudmVsb3BlXG4iKTsKKwkJCWhpZF93YXJuKHBpZGZmLT5oaWQsCisJCQkJICJoYXMgcmFtcCBlZmZlY3QgYnV0IG5vIGVudmVsb3BlXG4iKTsKIAogCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEZGX1BFUklPRElDLCBkZXYtPmZmYml0KSkKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImhpZC1waWRmZjogIgotCQkJCSJoYXMgcGVyaW9kaWMgZWZmZWN0IGJ1dCBubyBlbnZlbG9wZVxuIik7CisJCQloaWRfd2FybihwaWRmZi0+aGlkLAorCQkJCSAiaGFzIHBlcmlvZGljIGVmZmVjdCBidXQgbm8gZW52ZWxvcGVcbiIpOwogCX0KIAogCWlmICh0ZXN0X2JpdChGRl9DT05TVEFOVCwgZGV2LT5mZmJpdCkgJiYKIAkgICAgUElERkZfRklORF9GSUVMRFMoc2V0X2NvbnN0YW50LCBQSURfU0VUX0NPTlNUQU5ULCAxKSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiaGlkLXBpZGZmOiB1bmtub3duIGNvbnN0YW50IGVmZmVjdCBsYXlvdXRcbiIpOworCQloaWRfd2FybihwaWRmZi0+aGlkLCAidW5rbm93biBjb25zdGFudCBlZmZlY3QgbGF5b3V0XG4iKTsKIAkJY2xlYXJfYml0KEZGX0NPTlNUQU5ULCBkZXYtPmZmYml0KTsKIAl9CiAKIAlpZiAodGVzdF9iaXQoRkZfUkFNUCwgZGV2LT5mZmJpdCkgJiYKIAkgICAgUElERkZfRklORF9GSUVMRFMoc2V0X3JhbXAsIFBJRF9TRVRfUkFNUCwgMSkpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiaGlkLXBpZGZmOiB1bmtub3duIHJhbXAgZWZmZWN0IGxheW91dFxuIik7CisJCWhpZF93YXJuKHBpZGZmLT5oaWQsICJ1bmtub3duIHJhbXAgZWZmZWN0IGxheW91dFxuIik7CiAJCWNsZWFyX2JpdChGRl9SQU1QLCBkZXYtPmZmYml0KTsKIAl9CiAKQEAgLTExMzQsOCArMTEyNyw3IEBACiAJICAgICB0ZXN0X2JpdChGRl9GUklDVElPTiwgZGV2LT5mZmJpdCkgfHwKIAkgICAgIHRlc3RfYml0KEZGX0lORVJUSUEsIGRldi0+ZmZiaXQpKSAmJgogCSAgICBQSURGRl9GSU5EX0ZJRUxEUyhzZXRfY29uZGl0aW9uLCBQSURfU0VUX0NPTkRJVElPTiwgMSkpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgImhpZC1waWRmZjogdW5rbm93biBjb25kaXRpb24gZWZmZWN0IGxheW91dFxuIik7CisJCWhpZF93YXJuKHBpZGZmLT5oaWQsICJ1bmtub3duIGNvbmRpdGlvbiBlZmZlY3QgbGF5b3V0XG4iKTsKIAkJY2xlYXJfYml0KEZGX1NQUklORywgZGV2LT5mZmJpdCk7CiAJCWNsZWFyX2JpdChGRl9EQU1QRVIsIGRldi0+ZmZiaXQpOwogCQljbGVhcl9iaXQoRkZfRlJJQ1RJT04sIGRldi0+ZmZiaXQpOwpAQCAtMTE0NCw4ICsxMTM2LDcgQEAKIAogCWlmICh0ZXN0X2JpdChGRl9QRVJJT0RJQywgZGV2LT5mZmJpdCkgJiYKIAkgICAgUElERkZfRklORF9GSUVMRFMoc2V0X3BlcmlvZGljLCBQSURfU0VUX1BFUklPRElDLCAxKSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiaGlkLXBpZGZmOiB1bmtub3duIHBlcmlvZGljIGVmZmVjdCBsYXlvdXRcbiIpOworCQloaWRfd2FybihwaWRmZi0+aGlkLCAidW5rbm93biBwZXJpb2RpYyBlZmZlY3QgbGF5b3V0XG4iKTsKIAkJY2xlYXJfYml0KEZGX1BFUklPRElDLCBkZXYtPmZmYml0KTsKIAl9CiAKQEAgLTExODQsMTIgKzExNzUsMTIgQEAKIAlpZiAocGlkZmYtPnBvb2xbUElEX1NJTVVMVEFORU9VU19NQVhdLnZhbHVlKSB7CiAJCXdoaWxlIChwaWRmZi0+cG9vbFtQSURfU0lNVUxUQU5FT1VTX01BWF0udmFsdWVbMF0gPCAyKSB7CiAJCQlpZiAoaSsrID4gMjApIHsKLQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJoaWQtcGlkZmY6IGRldmljZSByZXBvcnRzICIKLQkJCQkgICAgICAgIiVkIHNpbXVsdGFuZW91cyBlZmZlY3RzXG4iLAotCQkJCSAgICAgICBwaWRmZi0+cG9vbFtQSURfU0lNVUxUQU5FT1VTX01BWF0udmFsdWVbMF0pOworCQkJCWhpZF93YXJuKHBpZGZmLT5oaWQsCisJCQkJCSAiZGV2aWNlIHJlcG9ydHMgJWQgc2ltdWx0YW5lb3VzIGVmZmVjdHNcbiIsCisJCQkJCSBwaWRmZi0+cG9vbFtQSURfU0lNVUxUQU5FT1VTX01BWF0udmFsdWVbMF0pOwogCQkJCWJyZWFrOwogCQkJfQotCQkJZGVidWcoInBpZF9wb29sIHJlcXVlc3RlZCBhZ2FpbiIpOworCQkJaGlkX2RiZyhwaWRmZi0+aGlkLCAicGlkX3Bvb2wgcmVxdWVzdGVkIGFnYWluXG4iKTsKIAkJCXVzYmhpZF9zdWJtaXRfcmVwb3J0KGhpZCwgcGlkZmYtPnJlcG9ydHNbUElEX1BPT0xdLAogCQkJCQkgIFVTQl9ESVJfSU4pOwogCQkJdXNiaGlkX3dhaXRfaW8oaGlkKTsKQEAgLTEyMTUsNyArMTIwNiw3IEBACiAKIAllcnJvciA9IHBpZGZmX3JlcXVlc3RfZWZmZWN0X3VwbG9hZChwaWRmZiwgMSk7CiAJaWYgKGVycm9yKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiaGlkLXBpZGZmOiB1cGxvYWQgcmVxdWVzdCBmYWlsZWRcbiIpOworCQloaWRfZXJyKHBpZGZmLT5oaWQsICJ1cGxvYWQgcmVxdWVzdCBmYWlsZWRcbiIpOwogCQlyZXR1cm4gZXJyb3I7CiAJfQogCkBAIC0xMjI0LDggKzEyMTUsOCBAQAogCQlwaWRmZl9hdXRvY2VudGVyKHBpZGZmLCAweGZmZmYpOwogCQlzZXRfYml0KEZGX0FVVE9DRU5URVIsIGRldi0+ZmZiaXQpOwogCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX05PVElDRSAiaGlkLXBpZGZmOiAiCi0JCSAgICAgICAiZGV2aWNlIGhhcyB1bmtub3duIGF1dG9jZW50ZXIgY29udHJvbCBtZXRob2RcbiIpOworCQloaWRfbm90aWNlKHBpZGZmLT5oaWQsCisJCQkgICAiZGV2aWNlIGhhcyB1bmtub3duIGF1dG9jZW50ZXIgY29udHJvbCBtZXRob2RcbiIpOwogCX0KIAogCXBpZGZmX2VyYXNlX3BpZChwaWRmZiwKQEAgLTEyNDgsMTAgKzEyMzksMTAgQEAKIAlpbnQgbWF4X2VmZmVjdHM7CiAJaW50IGVycm9yOwogCi0JZGVidWcoInN0YXJ0aW5nIHBpZCBpbml0Iik7CisJaGlkX2RiZyhoaWQsICJzdGFydGluZyBwaWQgaW5pdFxuIik7CiAKIAlpZiAobGlzdF9lbXB0eSgmaGlkLT5yZXBvcnRfZW51bVtISURfT1VUUFVUX1JFUE9SVF0ucmVwb3J0X2xpc3QpKSB7Ci0JCWRlYnVnKCJub3QgYSBQSUQgZGV2aWNlLCBubyBvdXRwdXQgcmVwb3J0Iik7CisJCWhpZF9kYmcoaGlkLCAibm90IGEgUElEIGRldmljZSwgbm8gb3V0cHV0IHJlcG9ydFxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtMTI2NSw3ICsxMjU2LDcgQEAKIAlwaWRmZl9maW5kX3JlcG9ydHMoaGlkLCBISURfRkVBVFVSRV9SRVBPUlQsIHBpZGZmKTsKIAogCWlmICghcGlkZmZfcmVwb3J0c19vayhwaWRmZikpIHsKLQkJZGVidWcoInJlcG9ydHMgbm90IG9rLCBhYm9ydGluZyIpOworCQloaWRfZGJnKGhpZCwgInJlcG9ydHMgbm90IG9rLCBhYm9ydGluZ1xuIik7CiAJCWVycm9yID0gLUVOT0RFVjsKIAkJZ290byBmYWlsOwogCX0KQEAgLTEyNzgsOCArMTI2OSw4IEBACiAKIAlpZiAodGVzdF9iaXQoRkZfR0FJTiwgZGV2LT5mZmJpdCkpIHsKIAkJcGlkZmZfc2V0KCZwaWRmZi0+ZGV2aWNlX2dhaW5bUElEX0RFVklDRV9HQUlOX0ZJRUxEXSwgMHhmZmZmKTsKLQkJdXNiaGlkX3N1Ym1pdF9yZXBvcnQocGlkZmYtPmhpZCwgcGlkZmYtPnJlcG9ydHNbUElEX0RFVklDRV9HQUlOXSwKLQkJCQkgIFVTQl9ESVJfT1VUKTsKKwkJdXNiaGlkX3N1Ym1pdF9yZXBvcnQoaGlkLCBwaWRmZi0+cmVwb3J0c1tQSURfREVWSUNFX0dBSU5dLAorCQkJCSAgICAgVVNCX0RJUl9PVVQpOwogCX0KIAogCWVycm9yID0gcGlkZmZfY2hlY2tfYXV0b2NlbnRlcihwaWRmZiwgZGV2KTsKQEAgLTEyOTAsMjMgKzEyODEsMjMgQEAKIAkgICAgcGlkZmYtPmJsb2NrX2xvYWRbUElEX0VGRkVDVF9CTE9DS19JTkRFWF0uZmllbGQtPmxvZ2ljYWxfbWF4aW11bSAtCiAJICAgIHBpZGZmLT5ibG9ja19sb2FkW1BJRF9FRkZFQ1RfQkxPQ0tfSU5ERVhdLmZpZWxkLT5sb2dpY2FsX21pbmltdW0gKwogCSAgICAxOwotCWRlYnVnKCJtYXggZWZmZWN0cyBpcyAlZCIsIG1heF9lZmZlY3RzKTsKKwloaWRfZGJnKGhpZCwgIm1heCBlZmZlY3RzIGlzICVkXG4iLCBtYXhfZWZmZWN0cyk7CiAKIAlpZiAobWF4X2VmZmVjdHMgPiBQSURfRUZGRUNUU19NQVgpCiAJCW1heF9lZmZlY3RzID0gUElEX0VGRkVDVFNfTUFYOwogCiAJaWYgKHBpZGZmLT5wb29sW1BJRF9TSU1VTFRBTkVPVVNfTUFYXS52YWx1ZSkKLQkJZGVidWcoIm1heCBzaW11bHRhbmVvdXMgZWZmZWN0cyBpcyAlZCIsCi0JCSAgICAgIHBpZGZmLT5wb29sW1BJRF9TSU1VTFRBTkVPVVNfTUFYXS52YWx1ZVswXSk7CisJCWhpZF9kYmcoaGlkLCAibWF4IHNpbXVsdGFuZW91cyBlZmZlY3RzIGlzICVkXG4iLAorCQkJcGlkZmYtPnBvb2xbUElEX1NJTVVMVEFORU9VU19NQVhdLnZhbHVlWzBdKTsKIAogCWlmIChwaWRmZi0+cG9vbFtQSURfUkFNX1BPT0xfU0laRV0udmFsdWUpCi0JCWRlYnVnKCJkZXZpY2UgbWVtb3J5IHNpemUgaXMgJWQgYnl0ZXMiLAotCQkgICAgICBwaWRmZi0+cG9vbFtQSURfUkFNX1BPT0xfU0laRV0udmFsdWVbMF0pOworCQloaWRfZGJnKGhpZCwgImRldmljZSBtZW1vcnkgc2l6ZSBpcyAlZCBieXRlc1xuIiwKKwkJCXBpZGZmLT5wb29sW1BJRF9SQU1fUE9PTF9TSVpFXS52YWx1ZVswXSk7CiAKIAlpZiAocGlkZmYtPnBvb2xbUElEX0RFVklDRV9NQU5BR0VEX1BPT0xdLnZhbHVlICYmCiAJICAgIHBpZGZmLT5wb29sW1BJRF9ERVZJQ0VfTUFOQUdFRF9QT09MXS52YWx1ZVswXSA9PSAwKSB7Ci0JCXByaW50ayhLRVJOX05PVElDRSAiaGlkLXBpZGZmOiAiCi0JCSAgICAgICAiZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgZGV2aWNlIG1hbmFnZWQgcG9vbFxuIik7CisJCWhpZF9ub3RpY2UoaGlkLAorCQkJICAgImRldmljZSBkb2VzIG5vdCBzdXBwb3J0IGRldmljZSBtYW5hZ2VkIHBvb2xcbiIpOwogCQlnb3RvIGZhaWw7CiAJfQogCkBAIC0xMzIyLDggKzEzMTMsNyBAQAogCWZmLT5zZXRfYXV0b2NlbnRlciA9IHBpZGZmX3NldF9hdXRvY2VudGVyOwogCWZmLT5wbGF5YmFjayA9IHBpZGZmX3BsYXliYWNrOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiRm9yY2UgZmVlZGJhY2sgZm9yIFVTQiBISUQgUElEIGRldmljZXMgYnkgIgotCSAgICAgICAiQW5zc2kgSGFubnVsYSA8YW5zc2kuaGFubnVsYUBnbWFpbC5jb20+XG4iKTsKKwloaWRfaW5mbyhkZXYsICJGb3JjZSBmZWVkYmFjayBmb3IgVVNCIEhJRCBQSUQgZGV2aWNlcyBieSBBbnNzaSBIYW5udWxhIDxhbnNzaS5oYW5udWxhQGdtYWlsLmNvbT5cbiIpOwogCiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtcXVpcmtzLmMgYi9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLXF1aXJrcy5jCmluZGV4IDJjMTg1NDcuLjc2YjlhMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtcXVpcmtzLmMKKysrIGIvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1xdWlya3MuYwpAQCAtODUsNyArODUsNyBAQAogCXsgVVNCX1ZFTkRPUl9JRF9QSV9FTkdJTkVFUklORywgVVNCX0RFVklDRV9JRF9QSV9FTkdJTkVFUklOR19WRUNfVVNCX0ZPT1RQRURBTCwgSElEX1FVSVJLX0hJRElOUFVUX0ZPUkNFIH0sCiAKIAl7IFVTQl9WRU5ET1JfSURfQ0hJQ09OWSwgVVNCX0RFVklDRV9JRF9DSElDT05ZX01VTFRJX1RPVUNILCBISURfUVVJUktfTVVMVElfSU5QVVQgfSwKLQorCXsgVVNCX1ZFTkRPUl9JRF9DSElDT05ZLCBVU0JfREVWSUNFX0lEX0NISUNPTllfV0lSRUxFU1MsIEhJRF9RVUlSS19NVUxUSV9JTlBVVCB9LAogCXsgMCwgMCB9CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC91c2JoaWQvaGlkZGV2LmMgYi9kcml2ZXJzL2hpZC91c2JoaWQvaGlkZGV2LmMKaW5kZXggOTg0ZmViMy4uYWYwYTdjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvdXNiaGlkL2hpZGRldi5jCisrKyBiL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWRkZXYuYwpAQCAtNTg1LDE2MyArNTg1LDE2OCBAQAogewogCXN0cnVjdCBoaWRkZXZfbGlzdCAqbGlzdCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgaGlkZGV2ICpoaWRkZXYgPSBsaXN0LT5oaWRkZXY7Ci0Jc3RydWN0IGhpZF9kZXZpY2UgKmhpZCA9IGhpZGRldi0+aGlkOwotCXN0cnVjdCB1c2JfZGV2aWNlICpkZXY7CisJc3RydWN0IGhpZF9kZXZpY2UgKmhpZDsKIAlzdHJ1Y3QgaGlkZGV2X2NvbGxlY3Rpb25faW5mbyBjaW5mbzsKIAlzdHJ1Y3QgaGlkZGV2X3JlcG9ydF9pbmZvIHJpbmZvOwogCXN0cnVjdCBoaWRkZXZfZmllbGRfaW5mbyBmaW5mbzsKIAlzdHJ1Y3QgaGlkZGV2X2RldmluZm8gZGluZm87CiAJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKIAlzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZDsKLQlzdHJ1Y3QgdXNiaGlkX2RldmljZSAqdXNiaGlkID0gaGlkLT5kcml2ZXJfZGF0YTsKIAl2b2lkIF9fdXNlciAqdXNlcl9hcmcgPSAodm9pZCBfX3VzZXIgKilhcmc7Ci0JaW50IGksIHI7Ci0JCisJaW50IGksIHIgPSAtRUlOVkFMOworCiAJLyogQ2FsbGVkIHdpdGhvdXQgQktMIGJ5IGNvbXBhdCBtZXRob2RzIHNvIG5vIEJLTCB0YWtlbiAqLwogCi0JLyogRklYTUU6IFdobyBvciB3aGF0IHN0b3AgdGhpcyByYWNpbmcgd2l0aCBhIGRpc2Nvbm5lY3QgPz8gKi8KLQlpZiAoIWhpZGRldi0+ZXhpc3QgfHwgIWhpZCkKLQkJcmV0dXJuIC1FSU87CisJbXV0ZXhfbG9jaygmaGlkZGV2LT5leGlzdGFuY2Vsb2NrKTsKKwlpZiAoIWhpZGRldi0+ZXhpc3QpIHsKKwkJciA9IC1FTk9ERVY7CisJCWdvdG8gcmV0X3VubG9jazsKKwl9CiAKLQlkZXYgPSBoaWRfdG9fdXNiX2RldihoaWQpOworCWhpZCA9IGhpZGRldi0+aGlkOwogCiAJc3dpdGNoIChjbWQpIHsKIAogCWNhc2UgSElESU9DR1ZFUlNJT046Ci0JCXJldHVybiBwdXRfdXNlcihISURfVkVSU0lPTiwgKGludCBfX3VzZXIgKilhcmcpOworCQlyID0gcHV0X3VzZXIoSElEX1ZFUlNJT04sIChpbnQgX191c2VyICopYXJnKSA/CisJCQktRUZBVUxUIDogMDsKKwkJYnJlYWs7CiAKIAljYXNlIEhJRElPQ0FQUExJQ0FUSU9OOgogCQlpZiAoYXJnIDwgMCB8fCBhcmcgPj0gaGlkLT5tYXhhcHBsaWNhdGlvbikKLQkJCXJldHVybiAtRUlOVkFMOworCQkJYnJlYWs7CiAKIAkJZm9yIChpID0gMDsgaSA8IGhpZC0+bWF4Y29sbGVjdGlvbjsgaSsrKQogCQkJaWYgKGhpZC0+Y29sbGVjdGlvbltpXS50eXBlID09CiAJCQkgICAgSElEX0NPTExFQ1RJT05fQVBQTElDQVRJT04gJiYgYXJnLS0gPT0gMCkKIAkJCQlicmVhazsKIAotCQlpZiAoaSA9PSBoaWQtPm1heGNvbGxlY3Rpb24pCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQlyZXR1cm4gaGlkLT5jb2xsZWN0aW9uW2ldLnVzYWdlOworCQlpZiAoaSA8IGhpZC0+bWF4Y29sbGVjdGlvbikKKwkJCXIgPSBoaWQtPmNvbGxlY3Rpb25baV0udXNhZ2U7CisJCWJyZWFrOwogCiAJY2FzZSBISURJT0NHREVWSU5GTzoKLQkJZGluZm8uYnVzdHlwZSA9IEJVU19VU0I7Ci0JCWRpbmZvLmJ1c251bSA9IGRldi0+YnVzLT5idXNudW07Ci0JCWRpbmZvLmRldm51bSA9IGRldi0+ZGV2bnVtOwotCQlkaW5mby5pZm51bSA9IHVzYmhpZC0+aWZudW07Ci0JCWRpbmZvLnZlbmRvciA9IGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcik7Ci0JCWRpbmZvLnByb2R1Y3QgPSBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KTsKLQkJZGluZm8udmVyc2lvbiA9IGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UpOwotCQlkaW5mby5udW1fYXBwbGljYXRpb25zID0gaGlkLT5tYXhhcHBsaWNhdGlvbjsKLQkJaWYgKGNvcHlfdG9fdXNlcih1c2VyX2FyZywgJmRpbmZvLCBzaXplb2YoZGluZm8pKSkKLQkJCXJldHVybiAtRUZBVUxUOworCQl7CisJCQlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaGlkX3RvX3VzYl9kZXYoaGlkKTsKKwkJCXN0cnVjdCB1c2JoaWRfZGV2aWNlICp1c2JoaWQgPSBoaWQtPmRyaXZlcl9kYXRhOwogCi0JCXJldHVybiAwOworCQkJZGluZm8uYnVzdHlwZSA9IEJVU19VU0I7CisJCQlkaW5mby5idXNudW0gPSBkZXYtPmJ1cy0+YnVzbnVtOworCQkJZGluZm8uZGV2bnVtID0gZGV2LT5kZXZudW07CisJCQlkaW5mby5pZm51bSA9IHVzYmhpZC0+aWZudW07CisJCQlkaW5mby52ZW5kb3IgPSBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpOworCQkJZGluZm8ucHJvZHVjdCA9IGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpOworCQkJZGluZm8udmVyc2lvbiA9IGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UpOworCQkJZGluZm8ubnVtX2FwcGxpY2F0aW9ucyA9IGhpZC0+bWF4YXBwbGljYXRpb247CisKKwkJCXIgPSBjb3B5X3RvX3VzZXIodXNlcl9hcmcsICZkaW5mbywgc2l6ZW9mKGRpbmZvKSkgPworCQkJCS1FRkFVTFQgOiAwOworCQkJYnJlYWs7CisJCX0KIAogCWNhc2UgSElESU9DR0ZMQUc6Ci0JCWlmIChwdXRfdXNlcihsaXN0LT5mbGFncywgKGludCBfX3VzZXIgKilhcmcpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQkJcmV0dXJuIDA7CisJCXIgPSBwdXRfdXNlcihsaXN0LT5mbGFncywgKGludCBfX3VzZXIgKilhcmcpID8KKwkJCS1FRkFVTFQgOiAwOworCQlicmVhazsKIAogCWNhc2UgSElESU9DU0ZMQUc6CiAJCXsKIAkJCWludCBuZXdmbGFnczsKLQkJCWlmIChnZXRfdXNlcihuZXdmbGFncywgKGludCBfX3VzZXIgKilhcmcpKQotCQkJCXJldHVybiAtRUZBVUxUOworCisJCQlpZiAoZ2V0X3VzZXIobmV3ZmxhZ3MsIChpbnQgX191c2VyICopYXJnKSkgeworCQkJCXIgPSAtRUZBVUxUOworCQkJCWJyZWFrOworCQkJfQogCiAJCQlpZiAoKG5ld2ZsYWdzICYgfkhJRERFVl9GTEFHUykgIT0gMCB8fAogCQkJICAgICgobmV3ZmxhZ3MgJiBISURERVZfRkxBR19SRVBPUlQpICE9IDAgJiYKIAkJCSAgICAgKG5ld2ZsYWdzICYgSElEREVWX0ZMQUdfVVJFRikgPT0gMCkpCi0JCQkJcmV0dXJuIC1FSU5WQUw7CisJCQkJYnJlYWs7CiAKIAkJCWxpc3QtPmZsYWdzID0gbmV3ZmxhZ3M7CiAKLQkJCXJldHVybiAwOworCQkJciA9IDA7CisJCQlicmVhazsKIAkJfQogCiAJY2FzZSBISURJT0NHU1RSSU5HOgotCQltdXRleF9sb2NrKCZoaWRkZXYtPmV4aXN0YW5jZWxvY2spOwotCQlpZiAoaGlkZGV2LT5leGlzdCkKLQkJCXIgPSBoaWRkZXZfaW9jdGxfc3RyaW5nKGhpZGRldiwgY21kLCB1c2VyX2FyZyk7Ci0JCWVsc2UKLQkJCXIgPSAtRU5PREVWOwotCQltdXRleF91bmxvY2soJmhpZGRldi0+ZXhpc3RhbmNlbG9jayk7Ci0JCXJldHVybiByOworCQlyID0gaGlkZGV2X2lvY3RsX3N0cmluZyhoaWRkZXYsIGNtZCwgdXNlcl9hcmcpOworCQlicmVhazsKIAogCWNhc2UgSElESU9DSU5JVFJFUE9SVDoKLQkJbXV0ZXhfbG9jaygmaGlkZGV2LT5leGlzdGFuY2Vsb2NrKTsKLQkJaWYgKCFoaWRkZXYtPmV4aXN0KSB7Ci0JCQltdXRleF91bmxvY2soJmhpZGRldi0+ZXhpc3RhbmNlbG9jayk7Ci0JCQlyZXR1cm4gLUVOT0RFVjsKLQkJfQogCQl1c2JoaWRfaW5pdF9yZXBvcnRzKGhpZCk7Ci0JCW11dGV4X3VubG9jaygmaGlkZGV2LT5leGlzdGFuY2Vsb2NrKTsKLQotCQlyZXR1cm4gMDsKKwkJciA9IDA7CisJCWJyZWFrOwogCiAJY2FzZSBISURJT0NHUkVQT1JUOgotCQlpZiAoY29weV9mcm9tX3VzZXIoJnJpbmZvLCB1c2VyX2FyZywgc2l6ZW9mKHJpbmZvKSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZyaW5mbywgdXNlcl9hcmcsIHNpemVvZihyaW5mbykpKSB7CisJCQlyID0gLUVGQVVMVDsKKwkJCWJyZWFrOworCQl9CiAKIAkJaWYgKHJpbmZvLnJlcG9ydF90eXBlID09IEhJRF9SRVBPUlRfVFlQRV9PVVRQVVQpCi0JCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWJyZWFrOwogCi0JCWlmICgocmVwb3J0ID0gaGlkZGV2X2xvb2t1cF9yZXBvcnQoaGlkLCAmcmluZm8pKSA9PSBOVUxMKQotCQkJcmV0dXJuIC1FSU5WQUw7CisJCXJlcG9ydCA9IGhpZGRldl9sb29rdXBfcmVwb3J0KGhpZCwgJnJpbmZvKTsKKwkJaWYgKHJlcG9ydCA9PSBOVUxMKQorCQkJYnJlYWs7CiAKLQkJbXV0ZXhfbG9jaygmaGlkZGV2LT5leGlzdGFuY2Vsb2NrKTsKLQkJaWYgKGhpZGRldi0+ZXhpc3QpIHsKLQkJCXVzYmhpZF9zdWJtaXRfcmVwb3J0KGhpZCwgcmVwb3J0LCBVU0JfRElSX0lOKTsKLQkJCXVzYmhpZF93YWl0X2lvKGhpZCk7Ci0JCX0KLQkJbXV0ZXhfdW5sb2NrKCZoaWRkZXYtPmV4aXN0YW5jZWxvY2spOworCQl1c2JoaWRfc3VibWl0X3JlcG9ydChoaWQsIHJlcG9ydCwgVVNCX0RJUl9JTik7CisJCXVzYmhpZF93YWl0X2lvKGhpZCk7CiAKLQkJcmV0dXJuIDA7CisJCXIgPSAwOworCQlicmVhazsKIAogCWNhc2UgSElESU9DU1JFUE9SVDoKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZyaW5mbywgdXNlcl9hcmcsIHNpemVvZihyaW5mbykpKQotCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmcmluZm8sIHVzZXJfYXJnLCBzaXplb2YocmluZm8pKSkgeworCQkJciA9IC1FRkFVTFQ7CisJCQlicmVhazsKKwkJfQogCiAJCWlmIChyaW5mby5yZXBvcnRfdHlwZSA9PSBISURfUkVQT1JUX1RZUEVfSU5QVVQpCi0JCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWJyZWFrOwogCi0JCWlmICgocmVwb3J0ID0gaGlkZGV2X2xvb2t1cF9yZXBvcnQoaGlkLCAmcmluZm8pKSA9PSBOVUxMKQotCQkJcmV0dXJuIC1FSU5WQUw7CisJCXJlcG9ydCA9IGhpZGRldl9sb29rdXBfcmVwb3J0KGhpZCwgJnJpbmZvKTsKKwkJaWYgKHJlcG9ydCA9PSBOVUxMKQorCQkJYnJlYWs7CiAKLQkJbXV0ZXhfbG9jaygmaGlkZGV2LT5leGlzdGFuY2Vsb2NrKTsKLQkJaWYgKGhpZGRldi0+ZXhpc3QpIHsKLQkJCXVzYmhpZF9zdWJtaXRfcmVwb3J0KGhpZCwgcmVwb3J0LCBVU0JfRElSX09VVCk7Ci0JCQl1c2JoaWRfd2FpdF9pbyhoaWQpOwotCQl9Ci0JCW11dGV4X3VubG9jaygmaGlkZGV2LT5leGlzdGFuY2Vsb2NrKTsKKwkJdXNiaGlkX3N1Ym1pdF9yZXBvcnQoaGlkLCByZXBvcnQsIFVTQl9ESVJfT1VUKTsKKwkJdXNiaGlkX3dhaXRfaW8oaGlkKTsKIAotCQlyZXR1cm4gMDsKKwkJciA9IDA7CisJCWJyZWFrOwogCiAJY2FzZSBISURJT0NHUkVQT1JUSU5GTzoKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZyaW5mbywgdXNlcl9hcmcsIHNpemVvZihyaW5mbykpKQotCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmcmluZm8sIHVzZXJfYXJnLCBzaXplb2YocmluZm8pKSkgeworCQkJciA9IC1FRkFVTFQ7CisJCQlicmVhazsKKwkJfQogCi0JCWlmICgocmVwb3J0ID0gaGlkZGV2X2xvb2t1cF9yZXBvcnQoaGlkLCAmcmluZm8pKSA9PSBOVUxMKQotCQkJcmV0dXJuIC1FSU5WQUw7CisJCXJlcG9ydCA9IGhpZGRldl9sb29rdXBfcmVwb3J0KGhpZCwgJnJpbmZvKTsKKwkJaWYgKHJlcG9ydCA9PSBOVUxMKQorCQkJYnJlYWs7CiAKIAkJcmluZm8ubnVtX2ZpZWxkcyA9IHJlcG9ydC0+bWF4ZmllbGQ7CiAKLQkJaWYgKGNvcHlfdG9fdXNlcih1c2VyX2FyZywgJnJpbmZvLCBzaXplb2YocmluZm8pKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCi0JCXJldHVybiAwOworCQlyID0gY29weV90b191c2VyKHVzZXJfYXJnLCAmcmluZm8sIHNpemVvZihyaW5mbykpID8KKwkJCS1FRkFVTFQgOiAwOworCQlicmVhazsKIAogCWNhc2UgSElESU9DR0ZJRUxESU5GTzoKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZmaW5mbywgdXNlcl9hcmcsIHNpemVvZihmaW5mbykpKQotCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmZmluZm8sIHVzZXJfYXJnLCBzaXplb2YoZmluZm8pKSkgeworCQkJciA9IC1FRkFVTFQ7CisJCQlicmVhazsKKwkJfQorCiAJCXJpbmZvLnJlcG9ydF90eXBlID0gZmluZm8ucmVwb3J0X3R5cGU7CiAJCXJpbmZvLnJlcG9ydF9pZCA9IGZpbmZvLnJlcG9ydF9pZDsKLQkJaWYgKChyZXBvcnQgPSBoaWRkZXZfbG9va3VwX3JlcG9ydChoaWQsICZyaW5mbykpID09IE5VTEwpCi0JCQlyZXR1cm4gLUVJTlZBTDsKKworCQlyZXBvcnQgPSBoaWRkZXZfbG9va3VwX3JlcG9ydChoaWQsICZyaW5mbyk7CisJCWlmIChyZXBvcnQgPT0gTlVMTCkKKwkJCWJyZWFrOwogCiAJCWlmIChmaW5mby5maWVsZF9pbmRleCA+PSByZXBvcnQtPm1heGZpZWxkKQotCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlicmVhazsKIAogCQlmaWVsZCA9IHJlcG9ydC0+ZmllbGRbZmluZm8uZmllbGRfaW5kZXhdOwogCQltZW1zZXQoJmZpbmZvLCAwLCBzaXplb2YoZmluZm8pKTsKQEAgLTc2MCwxMCArNzY1LDkgQEAKIAkJZmluZm8udW5pdF9leHBvbmVudCA9IGZpZWxkLT51bml0X2V4cG9uZW50OwogCQlmaW5mby51bml0ID0gZmllbGQtPnVuaXQ7CiAKLQkJaWYgKGNvcHlfdG9fdXNlcih1c2VyX2FyZywgJmZpbmZvLCBzaXplb2YoZmluZm8pKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCi0JCXJldHVybiAwOworCQlyID0gY29weV90b191c2VyKHVzZXJfYXJnLCAmZmluZm8sIHNpemVvZihmaW5mbykpID8KKwkJCS1FRkFVTFQgOiAwOworCQlicmVhazsKIAogCWNhc2UgSElESU9DR1VDT0RFOgogCQkvKiBmYWxsIHRocm91Z2ggKi8KQEAgLTc3Miw1NyArNzc2LDY2IEBACiAJY2FzZSBISURJT0NHVVNBR0VTOgogCWNhc2UgSElESU9DU1VTQUdFUzoKIAljYXNlIEhJRElPQ0dDT0xMRUNUSU9OSU5ERVg6Ci0JCW11dGV4X2xvY2soJmhpZGRldi0+ZXhpc3RhbmNlbG9jayk7Ci0JCWlmIChoaWRkZXYtPmV4aXN0KQotCQkJciA9IGhpZGRldl9pb2N0bF91c2FnZShoaWRkZXYsIGNtZCwgdXNlcl9hcmcpOwotCQllbHNlCi0JCQlyID0gLUVOT0RFVjsKLQkJbXV0ZXhfdW5sb2NrKCZoaWRkZXYtPmV4aXN0YW5jZWxvY2spOwotCQlyZXR1cm4gcjsKKwkJciA9IGhpZGRldl9pb2N0bF91c2FnZShoaWRkZXYsIGNtZCwgdXNlcl9hcmcpOworCQlicmVhazsKIAogCWNhc2UgSElESU9DR0NPTExFQ1RJT05JTkZPOgotCQlpZiAoY29weV9mcm9tX3VzZXIoJmNpbmZvLCB1c2VyX2FyZywgc2l6ZW9mKGNpbmZvKSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZjaW5mbywgdXNlcl9hcmcsIHNpemVvZihjaW5mbykpKSB7CisJCQlyID0gLUVGQVVMVDsKKwkJCWJyZWFrOworCQl9CiAKIAkJaWYgKGNpbmZvLmluZGV4ID49IGhpZC0+bWF4Y29sbGVjdGlvbikKLQkJCXJldHVybiAtRUlOVkFMOworCQkJYnJlYWs7CiAKIAkJY2luZm8udHlwZSA9IGhpZC0+Y29sbGVjdGlvbltjaW5mby5pbmRleF0udHlwZTsKIAkJY2luZm8udXNhZ2UgPSBoaWQtPmNvbGxlY3Rpb25bY2luZm8uaW5kZXhdLnVzYWdlOwogCQljaW5mby5sZXZlbCA9IGhpZC0+Y29sbGVjdGlvbltjaW5mby5pbmRleF0ubGV2ZWw7CiAKLQkJaWYgKGNvcHlfdG9fdXNlcih1c2VyX2FyZywgJmNpbmZvLCBzaXplb2YoY2luZm8pKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlyZXR1cm4gMDsKKwkJciA9IGNvcHlfdG9fdXNlcih1c2VyX2FyZywgJmNpbmZvLCBzaXplb2YoY2luZm8pKSA/CisJCQktRUZBVUxUIDogMDsKKwkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCiAJCWlmIChfSU9DX1RZUEUoY21kKSAhPSAnSCcgfHwgX0lPQ19ESVIoY21kKSAhPSBfSU9DX1JFQUQpCi0JCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWJyZWFrOwogCiAJCWlmIChfSU9DX05SKGNtZCkgPT0gX0lPQ19OUihISURJT0NHTkFNRSgwKSkpIHsKIAkJCWludCBsZW47Ci0JCQlpZiAoIWhpZC0+bmFtZSkKLQkJCQlyZXR1cm4gMDsKKworCQkJaWYgKCFoaWQtPm5hbWUpIHsKKwkJCQlyID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKwogCQkJbGVuID0gc3RybGVuKGhpZC0+bmFtZSkgKyAxOwogCQkJaWYgKGxlbiA+IF9JT0NfU0laRShjbWQpKQogCQkJCSBsZW4gPSBfSU9DX1NJWkUoY21kKTsKLQkJCXJldHVybiBjb3B5X3RvX3VzZXIodXNlcl9hcmcsIGhpZC0+bmFtZSwgbGVuKSA/CisJCQlyID0gY29weV90b191c2VyKHVzZXJfYXJnLCBoaWQtPm5hbWUsIGxlbikgPwogCQkJCS1FRkFVTFQgOiBsZW47CisJCQlicmVhazsKIAkJfQogCiAJCWlmIChfSU9DX05SKGNtZCkgPT0gX0lPQ19OUihISURJT0NHUEhZUygwKSkpIHsKIAkJCWludCBsZW47Ci0JCQlpZiAoIWhpZC0+cGh5cykKLQkJCQlyZXR1cm4gMDsKKworCQkJaWYgKCFoaWQtPnBoeXMpIHsKKwkJCQlyID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKwogCQkJbGVuID0gc3RybGVuKGhpZC0+cGh5cykgKyAxOwogCQkJaWYgKGxlbiA+IF9JT0NfU0laRShjbWQpKQogCQkJCWxlbiA9IF9JT0NfU0laRShjbWQpOwotCQkJcmV0dXJuIGNvcHlfdG9fdXNlcih1c2VyX2FyZywgaGlkLT5waHlzLCBsZW4pID8KKwkJCXIgPSBjb3B5X3RvX3VzZXIodXNlcl9hcmcsIGhpZC0+cGh5cywgbGVuKSA/CiAJCQkJLUVGQVVMVCA6IGxlbjsKKwkJCWJyZWFrOwogCQl9CiAJfQotCXJldHVybiAtRUlOVkFMOworCityZXRfdW5sb2NrOgorCW11dGV4X3VubG9jaygmaGlkZGV2LT5leGlzdGFuY2Vsb2NrKTsKKwlyZXR1cm4gcjsKIH0KIAogI2lmZGVmIENPTkZJR19DT01QQVQKQEAgLTg5Miw3ICs5MDUsNyBAQAogCWhpZGRldi0+ZXhpc3QgPSAxOwogCXJldHZhbCA9IHVzYl9yZWdpc3Rlcl9kZXYodXNiaGlkLT5pbnRmLCAmaGlkZGV2X2NsYXNzKTsKIAlpZiAocmV0dmFsKSB7Ci0JCWVycl9oaWQoIk5vdCBhYmxlIHRvIGdldCBhIG1pbm9yIGZvciB0aGlzIGRldmljZS4iKTsKKwkJaGlkX2VycihoaWQsICJOb3QgYWJsZSB0byBnZXQgYSBtaW5vciBmb3IgdGhpcyBkZXZpY2VcbiIpOwogCQloaWQtPmhpZGRldiA9IE5VTEw7CiAJCWtmcmVlKGhpZGRldik7CiAJCXJldHVybiAtMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL3VzYmhpZC91c2JoaWQuaCBiL2RyaXZlcnMvaGlkL3VzYmhpZC91c2JoaWQuaAppbmRleCA4OWQyZTg0Li4xNjczY2FjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC91c2JoaWQvdXNiaGlkLmgKKysrIGIvZHJpdmVycy9oaWQvdXNiaGlkL3VzYmhpZC5oCkBAIC05NSw3ICs5NSw2IEBACiAJdW5zaWduZWQgbG9uZyBzdG9wX3JldHJ5OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRpbWUgdG8gZ2l2ZSB1cCwgaW4gamlmZmllcyAqLwogCXVuc2lnbmVkIGludCByZXRyeV9kZWxheTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWxheSBsZW5ndGggaW4gbXMgKi8KIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVzZXRfd29yazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGFzayBjb250ZXh0IGZvciByZXNldHMgKi8KLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVzdGFydF93b3JrOwkJCQkvKiB3YWtpbmcgdXAgZm9yIG91dHB1dCB0byBiZSBkb25lIGluIGEgdGFzayAqLwogCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7CQkJCQkJLyogRm9yIHNsZWVwaW5nICovCiAJaW50IGxlZGNvdW50OwkJCQkJCQkvKiBjb3VudGluZyB0aGUgbnVtYmVyIG9mIGFjdGl2ZSBsZWRzICovCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvdXNiaGlkL3VzYmtiZC5jIGIvZHJpdmVycy9oaWQvdXNiaGlkL3VzYmtiZC5jCmluZGV4IGE5NDg2MDUuLjA2NTgxNzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL3VzYmhpZC91c2JrYmQuYworKysgYi9kcml2ZXJzL2hpZC91c2JoaWQvdXNia2JkLmMKQEAgLTI0LDYgKzI0LDggQEAKICAqIFZvanRlY2ggUGF2bGlrLCBTaW11bmtvdmEgMTU5NCwgUHJhZ3VlIDgsIDE4MiAwMCBDemVjaCBSZXB1YmxpYwogICovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTEwNCwxNiArMTA2LDE4IEBACiAJCQlpZiAodXNiX2tiZF9rZXljb2RlW2tiZC0+b2xkW2ldXSkKIAkJCQlpbnB1dF9yZXBvcnRfa2V5KGtiZC0+ZGV2LCB1c2Jfa2JkX2tleWNvZGVba2JkLT5vbGRbaV1dLCAwKTsKIAkJCWVsc2UKLQkJCQlkZXZfaW5mbygmdXJiLT5kZXYtPmRldiwKLQkJCQkJCSJVbmtub3duIGtleSAoc2NhbmNvZGUgJSN4KSByZWxlYXNlZC5cbiIsIGtiZC0+b2xkW2ldKTsKKwkJCQloaWRfaW5mbyh1cmItPmRldiwKKwkJCQkJICJVbmtub3duIGtleSAoc2NhbmNvZGUgJSN4KSByZWxlYXNlZC5cbiIsCisJCQkJCSBrYmQtPm9sZFtpXSk7CiAJCX0KIAogCQlpZiAoa2JkLT5uZXdbaV0gPiAzICYmIG1lbXNjYW4oa2JkLT5vbGQgKyAyLCBrYmQtPm5ld1tpXSwgNikgPT0ga2JkLT5vbGQgKyA4KSB7CiAJCQlpZiAodXNiX2tiZF9rZXljb2RlW2tiZC0+bmV3W2ldXSkKIAkJCQlpbnB1dF9yZXBvcnRfa2V5KGtiZC0+ZGV2LCB1c2Jfa2JkX2tleWNvZGVba2JkLT5uZXdbaV1dLCAxKTsKIAkJCWVsc2UKLQkJCQlkZXZfaW5mbygmdXJiLT5kZXYtPmRldiwKLQkJCQkJCSJVbmtub3duIGtleSAoc2NhbmNvZGUgJSN4KSByZWxlYXNlZC5cbiIsIGtiZC0+bmV3W2ldKTsKKwkJCQloaWRfaW5mbyh1cmItPmRldiwKKwkJCQkJICJVbmtub3duIGtleSAoc2NhbmNvZGUgJSN4KSByZWxlYXNlZC5cbiIsCisJCQkJCSBrYmQtPm5ld1tpXSk7CiAJCX0KIAl9CiAKQEAgLTEyNCw5ICsxMjgsOSBAQAogcmVzdWJtaXQ6CiAJaSA9IHVzYl9zdWJtaXRfdXJiICh1cmIsIEdGUF9BVE9NSUMpOwogCWlmIChpKQotCQllcnJfaGlkICgiY2FuJ3QgcmVzdWJtaXQgaW50ciwgJXMtJXMvaW5wdXQwLCBzdGF0dXMgJWQiLAotCQkJCWtiZC0+dXNiZGV2LT5idXMtPmJ1c19uYW1lLAotCQkJCWtiZC0+dXNiZGV2LT5kZXZwYXRoLCBpKTsKKwkJaGlkX2Vycih1cmItPmRldiwgImNhbid0IHJlc3VibWl0IGludHIsICVzLSVzL2lucHV0MCwgc3RhdHVzICVkIiwKKwkJCWtiZC0+dXNiZGV2LT5idXMtPmJ1c19uYW1lLAorCQkJa2JkLT51c2JkZXYtPmRldnBhdGgsIGkpOwogfQogCiBzdGF0aWMgaW50IHVzYl9rYmRfZXZlbnQoc3RydWN0IGlucHV0X2RldiAqZGV2LCB1bnNpZ25lZCBpbnQgdHlwZSwKQEAgLTE1MCw3ICsxNTQsNyBAQAogCSooa2JkLT5sZWRzKSA9IGtiZC0+bmV3bGVkczsKIAlrYmQtPmxlZC0+ZGV2ID0ga2JkLT51c2JkZXY7CiAJaWYgKHVzYl9zdWJtaXRfdXJiKGtiZC0+bGVkLCBHRlBfQVRPTUlDKSkKLQkJZXJyX2hpZCgidXNiX3N1Ym1pdF91cmIobGVkcykgZmFpbGVkIik7CisJCXByX2VycigidXNiX3N1Ym1pdF91cmIobGVkcykgZmFpbGVkXG4iKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTYwLDcgKzE2NCw3IEBACiAJc3RydWN0IHVzYl9rYmQgKmtiZCA9IHVyYi0+Y29udGV4dDsKIAogCWlmICh1cmItPnN0YXR1cykKLQkJZGV2X3dhcm4oJnVyYi0+ZGV2LT5kZXYsICJsZWQgdXJiIHN0YXR1cyAlZCByZWNlaXZlZFxuIiwKKwkJaGlkX3dhcm4odXJiLT5kZXYsICJsZWQgdXJiIHN0YXR1cyAlZCByZWNlaXZlZFxuIiwKIAkJCSB1cmItPnN0YXR1cyk7CiAKIAlpZiAoKihrYmQtPmxlZHMpID09IGtiZC0+bmV3bGVkcykKQEAgLTE2OSw3ICsxNzMsNyBAQAogCSooa2JkLT5sZWRzKSA9IGtiZC0+bmV3bGVkczsKIAlrYmQtPmxlZC0+ZGV2ID0ga2JkLT51c2JkZXY7CiAJaWYgKHVzYl9zdWJtaXRfdXJiKGtiZC0+bGVkLCBHRlBfQVRPTUlDKSkKLQkJZXJyX2hpZCgidXNiX3N1Ym1pdF91cmIobGVkcykgZmFpbGVkIik7CisJCWhpZF9lcnIodXJiLT5kZXYsICJ1c2Jfc3VibWl0X3VyYihsZWRzKSBmYWlsZWRcbiIpOwogfQogCiBzdGF0aWMgaW50IHVzYl9rYmRfb3BlbihzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW9tYXAuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtb21hcC5jCmluZGV4IGIzM2M3ODUuLjlkMDkwODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtb21hcC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtb21hcC5jCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLW9tYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CiAKIC8qIEkyQyBjb250cm9sbGVyIHJldmlzaW9ucyAqLwogI2RlZmluZSBPTUFQX0kyQ19SRVZfMgkJCTB4MjAKQEAgLTE3NSw4ICsxNzYsNiBAQAogCXZvaWQgX19pb21lbQkJKmJhc2U7CQkvKiB2aXJ0dWFsICovCiAJaW50CQkJaXJxOwogCWludAkJCXJlZ19zaGlmdDsgICAgICAvKiBiaXQgc2hpZnQgZm9yIEkyQyByZWdpc3RlciBhZGRyZXNzZXMgKi8KLQlzdHJ1Y3QgY2xrCQkqaWNsazsJCS8qIEludGVyZmFjZSBjbG9jayAqLwotCXN0cnVjdCBjbGsJCSpmY2xrOwkJLyogRnVuY3Rpb25hbCBjbG9jayAqLwogCXN0cnVjdCBjb21wbGV0aW9uCWNtZF9jb21wbGV0ZTsKIAlzdHJ1Y3QgcmVzb3VyY2UJCSppb2FyZWE7CiAJdTMyCQkJbGF0ZW5jeTsJLyogbWF4aW11bSBtcHUgd2t1cCBsYXRlbmN5ICovCkBAIC0yNjUsNDUgKzI2NCwxOCBAQAogCQkJCShpMmNfZGV2LT5yZWdzW3JlZ10gPDwgaTJjX2Rldi0+cmVnX3NoaWZ0KSk7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IG9tYXBfaTJjX2dldF9jbG9ja3Moc3RydWN0IG9tYXBfaTJjX2RldiAqZGV2KQotewotCWludCByZXQ7Ci0KLQlkZXYtPmljbGsgPSBjbGtfZ2V0KGRldi0+ZGV2LCAiaWNrIik7Ci0JaWYgKElTX0VSUihkZXYtPmljbGspKSB7Ci0JCXJldCA9IFBUUl9FUlIoZGV2LT5pY2xrKTsKLQkJZGV2LT5pY2xrID0gTlVMTDsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlkZXYtPmZjbGsgPSBjbGtfZ2V0KGRldi0+ZGV2LCAiZmNrIik7Ci0JaWYgKElTX0VSUihkZXYtPmZjbGspKSB7Ci0JCXJldCA9IFBUUl9FUlIoZGV2LT5mY2xrKTsKLQkJaWYgKGRldi0+aWNsayAhPSBOVUxMKSB7Ci0JCQljbGtfcHV0KGRldi0+aWNsayk7Ci0JCQlkZXYtPmljbGsgPSBOVUxMOwotCQl9Ci0JCWRldi0+ZmNsayA9IE5VTEw7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIG9tYXBfaTJjX3B1dF9jbG9ja3Moc3RydWN0IG9tYXBfaTJjX2RldiAqZGV2KQotewotCWNsa19wdXQoZGV2LT5mY2xrKTsKLQlkZXYtPmZjbGsgPSBOVUxMOwotCWNsa19wdXQoZGV2LT5pY2xrKTsKLQlkZXYtPmljbGsgPSBOVUxMOwotfQotCiBzdGF0aWMgdm9pZCBvbWFwX2kyY191bmlkbGUoc3RydWN0IG9tYXBfaTJjX2RldiAqZGV2KQogeworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJc3RydWN0IG9tYXBfaTJjX2J1c19wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKwogCVdBUk5fT04oIWRldi0+aWRsZSk7CiAKLQljbGtfZW5hYmxlKGRldi0+aWNsayk7Ci0JY2xrX2VuYWJsZShkZXYtPmZjbGspOworCXBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2LT5kZXYpOworCXBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKKwlwbV9ydW50aW1lX2dldF9zeW5jKCZwZGV2LT5kZXYpOworCiAJaWYgKGNwdV9pc19vbWFwMzR4eCgpKSB7CiAJCW9tYXBfaTJjX3dyaXRlX3JlZyhkZXYsIE9NQVBfSTJDX0NPTl9SRUcsIDApOwogCQlvbWFwX2kyY193cml0ZV9yZWcoZGV2LCBPTUFQX0kyQ19QU0NfUkVHLCBkZXYtPnBzY3N0YXRlKTsKQEAgLTMyNiwxMCArMjk4LDE1IEBACiAKIHN0YXRpYyB2b2lkIG9tYXBfaTJjX2lkbGUoc3RydWN0IG9tYXBfaTJjX2RldiAqZGV2KQogeworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJc3RydWN0IG9tYXBfaTJjX2J1c19wbGF0Zm9ybV9kYXRhICpwZGF0YTsKIAl1MTYgaXY7CiAKIAlXQVJOX09OKGRldi0+aWRsZSk7CiAKKwlwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldi0+ZGV2KTsKKwlwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCiAJZGV2LT5pZXN0YXRlID0gb21hcF9pMmNfcmVhZF9yZWcoZGV2LCBPTUFQX0kyQ19JRV9SRUcpOwogCWlmIChkZXYtPnJldiA+PSBPTUFQX0kyQ19SRVZfT05fNDQzMCkKIAkJb21hcF9pMmNfd3JpdGVfcmVnKGRldiwgT01BUF9JMkNfSVJRRU5BQkxFX0NMUiwgMSk7CkBAIC0zNDUsOCArMzIyLDggQEAKIAkJb21hcF9pMmNfcmVhZF9yZWcoZGV2LCBPTUFQX0kyQ19TVEFUX1JFRyk7CiAJfQogCWRldi0+aWRsZSA9IDE7Ci0JY2xrX2Rpc2FibGUoZGV2LT5mY2xrKTsKLQljbGtfZGlzYWJsZShkZXYtPmljbGspOworCisJcG1fcnVudGltZV9wdXRfc3luYygmcGRldi0+ZGV2KTsKIH0KIAogc3RhdGljIGludCBvbWFwX2kyY19pbml0KHN0cnVjdCBvbWFwX2kyY19kZXYgKmRldikKQEAgLTM1Niw2ICszMzMsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmNsa19yYXRlID0gMTIwMDAwMDA7CiAJdW5zaWduZWQgbG9uZyB0aW1lb3V0OwogCXVuc2lnbmVkIGxvbmcgaW50ZXJuYWxfY2xrID0gMDsKKwlzdHJ1Y3QgY2xrICpmY2xrOwogCiAJaWYgKGRldi0+cmV2ID49IE9NQVBfSTJDX1JFVl8yKSB7CiAJCS8qIERpc2FibGUgSTJDIGNvbnRyb2xsZXIgYmVmb3JlIHNvZnQgcmVzZXQgKi8KQEAgLTQxNCw3ICszOTIsOSBAQAogCQkgKiBhbHdheXMgcmV0dXJucyAxMk1IeiBmb3IgdGhlIGZ1bmN0aW9uYWwgY2xvY2ssIHdlIGNhbgogCQkgKiBkbyB0aGlzIGJpdCB1bmNvbmRpdGlvbmFsbHkuCiAJCSAqLwotCQlmY2xrX3JhdGUgPSBjbGtfZ2V0X3JhdGUoZGV2LT5mY2xrKTsKKwkJZmNsayA9IGNsa19nZXQoZGV2LT5kZXYsICJmY2siKTsKKwkJZmNsa19yYXRlID0gY2xrX2dldF9yYXRlKGZjbGspOworCQljbGtfcHV0KGZjbGspOwogCiAJCS8qIFRSTSBmb3IgNTkxMiBzYXlzIHRoZSBJMkMgY2xvY2sgbXVzdCBiZSBwcmVzY2FsZWQgdG8gYmUKIAkJICogYmV0d2VlbiA3IC0gMTIgTUh6LiBUaGUgWE9SIGlucHV0IGNsb2NrIGlzIHR5cGljYWxseQpAQCAtNDQzLDcgKzQyMyw5IEBACiAJCQlpbnRlcm5hbF9jbGsgPSA5NjAwOwogCQllbHNlCiAJCQlpbnRlcm5hbF9jbGsgPSA0MDAwOwotCQlmY2xrX3JhdGUgPSBjbGtfZ2V0X3JhdGUoZGV2LT5mY2xrKSAvIDEwMDA7CisJCWZjbGsgPSBjbGtfZ2V0KGRldi0+ZGV2LCAiZmNrIik7CisJCWZjbGtfcmF0ZSA9IGNsa19nZXRfcmF0ZShmY2xrKSAvIDEwMDA7CisJCWNsa19wdXQoZmNsayk7CiAKIAkJLyogQ29tcHV0ZSBwcmVzY2FsZXIgZGl2aXNvciAqLwogCQlwc2MgPSBmY2xrX3JhdGUgLyBpbnRlcm5hbF9jbGs7CkBAIC0xMDQ4LDE0ICsxMDMwLDEyIEBACiAJZWxzZQogCQlkZXYtPnJlZ19zaGlmdCA9IDI7CiAKLQlpZiAoKHIgPSBvbWFwX2kyY19nZXRfY2xvY2tzKGRldikpICE9IDApCi0JCWdvdG8gZXJyX2lvdW5tYXA7Ci0KIAlpZiAoY3B1X2lzX29tYXA0NHh4KCkpCiAJCWRldi0+cmVncyA9ICh1OCAqKSBvbWFwNF9yZWdfbWFwOwogCWVsc2UKIAkJZGV2LT5yZWdzID0gKHU4ICopIHJlZ19tYXA7CiAKKwlwbV9ydW50aW1lX2VuYWJsZSgmcGRldi0+ZGV2KTsKIAlvbWFwX2kyY191bmlkbGUoZGV2KTsKIAogCWRldi0+cmV2ID0gb21hcF9pMmNfcmVhZF9yZWcoZGV2LCBPTUFQX0kyQ19SRVZfUkVHKSAmIDB4ZmY7CkBAIC0xMTI3LDggKzExMDcsNiBAQAogZXJyX3VudXNlX2Nsb2NrczoKIAlvbWFwX2kyY193cml0ZV9yZWcoZGV2LCBPTUFQX0kyQ19DT05fUkVHLCAwKTsKIAlvbWFwX2kyY19pZGxlKGRldik7Ci0Jb21hcF9pMmNfcHV0X2Nsb2NrcyhkZXYpOwotZXJyX2lvdW5tYXA6CiAJaW91bm1hcChkZXYtPmJhc2UpOwogZXJyX2ZyZWVfbWVtOgogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwpAQCAtMTE1MCw3ICsxMTI4LDYgQEAKIAlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKIAlpMmNfZGVsX2FkYXB0ZXIoJmRldi0+YWRhcHRlcik7CiAJb21hcF9pMmNfd3JpdGVfcmVnKGRldiwgT01BUF9JMkNfQ09OX1JFRywgMCk7Ci0Jb21hcF9pMmNfcHV0X2Nsb2NrcyhkZXYpOwogCWlvdW5tYXAoZGV2LT5iYXNlKTsKIAlrZnJlZShkZXYpOwogCW1lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CkBAIC0xMTYyLDcgKzExMzksNyBAQAogCS5wcm9iZQkJPSBvbWFwX2kyY19wcm9iZSwKIAkucmVtb3ZlCQk9IG9tYXBfaTJjX3JlbW92ZSwKIAkuZHJpdmVyCQk9IHsKLQkJLm5hbWUJPSAiaTJjX29tYXAiLAorCQkubmFtZQk9ICJvbWFwX2kyYyIsCiAJCS5vd25lcgk9IFRISVNfTU9EVUxFLAogCX0sCiB9OwpAQCAtMTE4NCw0ICsxMTYxLDQgQEAKIE1PRFVMRV9BVVRIT1IoIk1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gKGFuZCBvdGhlcnMpIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlRJIE9NQVAgSTJDIGJ1cyBhZGFwdGVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQUxJQVMoInBsYXRmb3JtOmkyY19vbWFwIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOm9tYXBfaTJjIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkbGUvaW50ZWxfaWRsZS5jIGIvZHJpdmVycy9pZGxlL2ludGVsX2lkbGUuYwppbmRleCBjMTMxZDU4Li41NmFjMDlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkbGUvaW50ZWxfaWRsZS5jCisrKyBiL2RyaXZlcnMvaWRsZS9pbnRlbF9pZGxlLmMKQEAgLTIyMCw5ICsyMjAsOCBAQAogCWt0X2JlZm9yZSA9IGt0aW1lX2dldF9yZWFsKCk7CiAKIAlzdG9wX2NyaXRpY2FsX3RpbWluZ3MoKTsKLSNpZm5kZWYgTU9EVUxFCiAJdHJhY2VfcG93ZXJfc3RhcnQoUE9XRVJfQ1NUQVRFLCAoZWF4ID4+IDQpICsgMSwgY3B1KTsKLSNlbmRpZgorCXRyYWNlX2NwdV9pZGxlKChlYXggPj4gNCkgKyAxLCBjcHUpOwogCWlmICghbmVlZF9yZXNjaGVkKCkpIHsKIAogCQlfX21vbml0b3IoKHZvaWQgKikmY3VycmVudF90aHJlYWRfaW5mbygpLT5mbGFncywgMCwgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9hZGRyLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9hZGRyLmMKaW5kZXggYTVlYTFiYy4uOGFiYTBiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvYWRkci5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2FkZHIuYwpAQCAtMTMwLDggKzEzMCw4IEBACiAKICNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKIAljYXNlIEFGX0lORVQ2OgotCQlyZWFkX2xvY2soJmRldl9iYXNlX2xvY2spOwotCQlmb3JfZWFjaF9uZXRkZXYoJmluaXRfbmV0LCBkZXYpIHsKKwkJcmN1X3JlYWRfbG9jaygpOworCQlmb3JfZWFjaF9uZXRkZXZfcmN1KCZpbml0X25ldCwgZGV2KSB7CiAJCQlpZiAoaXB2Nl9jaGtfYWRkcigmaW5pdF9uZXQsCiAJCQkJCSAgJigoc3RydWN0IHNvY2thZGRyX2luNiAqKSBhZGRyKS0+c2luNl9hZGRyLAogCQkJCQkgIGRldiwgMSkpIHsKQEAgLTEzOSw3ICsxMzksNyBAQAogCQkJCWJyZWFrOwogCQkJfQogCQl9Ci0JCXJlYWRfdW5sb2NrKCZkZXZfYmFzZV9sb2NrKTsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCWJyZWFrOwogI2VuZGlmCiAJfQpAQCAtMjAwLDcgKzIwMCw3IEBACiAJc3JjX2luLT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKIAlzcmNfaW4tPnNpbl9hZGRyLnNfYWRkciA9IHJ0LT5ydF9zcmM7CiAKLQlpZiAocnQtPmlkZXYtPmRldi0+ZmxhZ3MgJiBJRkZfTE9PUEJBQ0spIHsKKwlpZiAocnQtPmRzdC5kZXYtPmZsYWdzICYgSUZGX0xPT1BCQUNLKSB7CiAJCXJldCA9IHJkbWFfdHJhbnNsYXRlX2lwKChzdHJ1Y3Qgc29ja2FkZHIgKikgZHN0X2luLCBhZGRyKTsKIAkJaWYgKCFyZXQpCiAJCQltZW1jcHkoYWRkci0+ZHN0X2Rldl9hZGRyLCBhZGRyLT5zcmNfZGV2X2FkZHIsIE1BWF9BRERSX0xFTik7CkBAIC0yMDgsMTIgKzIwOCwxMiBAQAogCX0KIAogCS8qIElmIHRoZSBkZXZpY2UgZG9lcyBBUlAgaW50ZXJuYWxseSwgcmV0dXJuICdkb25lJyAqLwotCWlmIChydC0+aWRldi0+ZGV2LT5mbGFncyAmIElGRl9OT0FSUCkgewotCQlyZG1hX2NvcHlfYWRkcihhZGRyLCBydC0+aWRldi0+ZGV2LCBOVUxMKTsKKwlpZiAocnQtPmRzdC5kZXYtPmZsYWdzICYgSUZGX05PQVJQKSB7CisJCXJkbWFfY29weV9hZGRyKGFkZHIsIHJ0LT5kc3QuZGV2LCBOVUxMKTsKIAkJZ290byBwdXQ7CiAJfQogCi0JbmVpZ2ggPSBuZWlnaF9sb29rdXAoJmFycF90YmwsICZydC0+cnRfZ2F0ZXdheSwgcnQtPmlkZXYtPmRldik7CisJbmVpZ2ggPSBuZWlnaF9sb29rdXAoJmFycF90YmwsICZydC0+cnRfZ2F0ZXdheSwgcnQtPmRzdC5kZXYpOwogCWlmICghbmVpZ2ggfHwgIShuZWlnaC0+bnVkX3N0YXRlICYgTlVEX1ZBTElEKSkgewogCQluZWlnaF9ldmVudF9zZW5kKHJ0LT5kc3QubmVpZ2hib3VyLCBOVUxMKTsKIAkJcmV0ID0gLUVOT0RBVEE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZnMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9mcy5jCmluZGV4IDhjOGFmYzcuLjMxYWUxYjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9mcy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9mcy5jCkBAIC0yNzcsMTggKzI3NywxNCBAQAogCQlnb3RvIGJhaWw7CiAJfQogCi0Jc3Bpbl9sb2NrKCZkY2FjaGVfbG9jayk7CiAJc3Bpbl9sb2NrKCZ0bXAtPmRfbG9jayk7CiAJaWYgKCEoZF91bmhhc2hlZCh0bXApICYmIHRtcC0+ZF9pbm9kZSkpIHsKLQkJZGdldF9sb2NrZWQodG1wKTsKKwkJZGdldF9kbG9jayh0bXApOwogCQlfX2RfZHJvcCh0bXApOwogCQlzcGluX3VubG9jaygmdG1wLT5kX2xvY2spOwotCQlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOwogCQlzaW1wbGVfdW5saW5rKHBhcmVudC0+ZF9pbm9kZSwgdG1wKTsKLQl9IGVsc2UgeworCX0gZWxzZQogCQlzcGluX3VubG9jaygmdG1wLT5kX2xvY2spOwotCQlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOwotCX0KIAogCXJldCA9IDA7CiBiYWlsOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvbWFpbi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvbWFpbi5jCmluZGV4IDMwZTA5Y2EuLjRjODUyMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L21haW4uYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9tYWluLmMKQEAgLTg0OCw4ICs4NDgsOCBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlyZWFkX2xvY2soJmRldl9iYXNlX2xvY2spOwotCWZvcl9lYWNoX25ldGRldigmaW5pdF9uZXQsIHRtcCkgeworCXJjdV9yZWFkX2xvY2soKTsKKwlmb3JfZWFjaF9uZXRkZXZfcmN1KCZpbml0X25ldCwgdG1wKSB7CiAJCWlmIChuZGV2ICYmICh0bXAgPT0gbmRldiB8fCByZG1hX3ZsYW5fZGV2X3JlYWxfZGV2KHRtcCkgPT0gbmRldikpIHsKIAkJCWdpZC5nbG9iYWwuc3VibmV0X3ByZWZpeCA9IGNwdV90b19iZTY0KDB4ZmU4MDAwMDAwMDAwMDAwMExMKTsKIAkJCXZpZCA9IHJkbWFfdmxhbl9kZXZfdmxhbl9pZCh0bXApOwpAQCAtODg0LDcgKzg4NCw3IEBACiAJCQl9CiAJCX0KIAl9Ci0JcmVhZF91bmxvY2soJmRldl9iYXNlX2xvY2spOworCXJjdV9yZWFkX3VubG9jaygpOwogCiAJZm9yIChpID0gMDsgaSA8IDEyODsgKytpKQogCQlpZiAoIWhpdHNbaV0pIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX2ZzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9mcy5jCmluZGV4IGY5OWJkZGMuLmRmN2ZhMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX2ZzLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfZnMuYwpAQCAtNDUzLDE3ICs0NTMsMTQgQEAKIAkJZ290byBiYWlsOwogCX0KIAotCXNwaW5fbG9jaygmZGNhY2hlX2xvY2spOwogCXNwaW5fbG9jaygmdG1wLT5kX2xvY2spOwogCWlmICghKGRfdW5oYXNoZWQodG1wKSAmJiB0bXAtPmRfaW5vZGUpKSB7Ci0JCWRnZXRfbG9ja2VkKHRtcCk7CisJCWRnZXRfZGxvY2sodG1wKTsKIAkJX19kX2Ryb3AodG1wKTsKIAkJc3Bpbl91bmxvY2soJnRtcC0+ZF9sb2NrKTsKLQkJc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKIAkJc2ltcGxlX3VubGluayhwYXJlbnQtPmRfaW5vZGUsIHRtcCk7CiAJfSBlbHNlIHsKIAkJc3Bpbl91bmxvY2soJnRtcC0+ZF9sb2NrKTsKLQkJc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKIAl9CiAKIAlyZXQgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9NYWtlZmlsZSBiL2RyaXZlcnMvaW5wdXQvTWFrZWZpbGUKaW5kZXggN2FkMjEyZC4uMDk2MTRjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2lucHV0L01ha2VmaWxlCkBAIC01LDcgKzUsNyBAQAogIyBFYWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGVuYWJsZXMgYSBsaXN0IG9mIGZpbGVzLgogCiBvYmotJChDT05GSUdfSU5QVVQpCQkrPSBpbnB1dC1jb3JlLm8KLWlucHV0LWNvcmUtb2JqcyA6PSBpbnB1dC5vIGlucHV0LWNvbXBhdC5vIGZmLWNvcmUubworaW5wdXQtY29yZS15IDo9IGlucHV0Lm8gaW5wdXQtY29tcGF0Lm8gaW5wdXQtbXQubyBmZi1jb3JlLm8KIAogb2JqLSQoQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MpCSs9IGZmLW1lbWxlc3Mubwogb2JqLSQoQ09ORklHX0lOUFVUX1BPTExERVYpCSs9IGlucHV0LXBvbGxkZXYubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9hcG0tcG93ZXIuYyBiL2RyaXZlcnMvaW5wdXQvYXBtLXBvd2VyLmMKaW5kZXggN2Q2MWE5Ni4uZTkwZWUzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9hcG0tcG93ZXIuYworKysgYi9kcml2ZXJzL2lucHV0L2FwbS1wb3dlci5jCkBAIC05LDYgKzksOCBAQAogICoKICAqLwogCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KQEAgLTIzLDggKzI1LDcgQEAKIAlzd2l0Y2ggKGtleWNvZGUpIHsKIAljYXNlIEtFWV9TVVNQRU5EOgogCQlhcG1fcXVldWVfZXZlbnQoQVBNX1VTRVJfU1VTUEVORCk7Ci0KLQkJcHJpbnRrKEtFUk5fSU5GTyAiYXBtLXBvd2VyOiBSZXF1ZXN0aW5nIHN5c3RlbSBzdXNwZW5kLi4uXG4iKTsKKwkJcHJfaW5mbygiUmVxdWVzdGluZyBzeXN0ZW0gc3VzcGVuZC4uLlxuIik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwpAQCAtNjUsMTggKzY2LDE1IEBACiAKIAllcnJvciA9IGlucHV0X3JlZ2lzdGVyX2hhbmRsZShoYW5kbGUpOwogCWlmIChlcnJvcikgewotCQlwcmludGsoS0VSTl9FUlIKLQkJCSJhcG0tcG93ZXI6IEZhaWxlZCB0byByZWdpc3RlciBpbnB1dCBwb3dlciBoYW5kbGVyLCAiCi0JCQkiZXJyb3IgJWRcbiIsIGVycm9yKTsKKwkJcHJfZXJyKCJGYWlsZWQgdG8gcmVnaXN0ZXIgaW5wdXQgcG93ZXIgaGFuZGxlciwgZXJyb3IgJWRcbiIsCisJCSAgICAgICBlcnJvcik7CiAJCWtmcmVlKGhhbmRsZSk7CiAJCXJldHVybiBlcnJvcjsKIAl9CiAKIAllcnJvciA9IGlucHV0X29wZW5fZGV2aWNlKGhhbmRsZSk7CiAJaWYgKGVycm9yKSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkJImFwbS1wb3dlcjogRmFpbGVkIHRvIG9wZW4gaW5wdXQgcG93ZXIgZGV2aWNlLCAiCi0JCQkiZXJyb3IgJWRcbiIsIGVycm9yKTsKKwkJcHJfZXJyKCJGYWlsZWQgdG8gb3BlbiBpbnB1dCBwb3dlciBkZXZpY2UsIGVycm9yICVkXG4iLCBlcnJvcik7CiAJCWlucHV0X3VucmVnaXN0ZXJfaGFuZGxlKGhhbmRsZSk7CiAJCWtmcmVlKGhhbmRsZSk7CiAJCXJldHVybiBlcnJvcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvZXZidWcuYyBiL2RyaXZlcnMvaW5wdXQvZXZidWcuYwppbmRleCBmN2M1YzE0Li5jZDRlNjY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2V2YnVnLmMKKysrIGIvZHJpdmVycy9pbnB1dC9ldmJ1Zy5jCkBAIC0yNiw2ICsyNiw4IEBACiAgKiBWb2p0ZWNoIFBhdmxpaywgU2ltdW5rb3ZhIDE1OTQsIFByYWd1ZSA4LCAxODIgMDAgQ3plY2ggUmVwdWJsaWMKICAqLwogCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KQEAgLTM4LDggKzQwLDggQEAKIAogc3RhdGljIHZvaWQgZXZidWdfZXZlbnQoc3RydWN0IGlucHV0X2hhbmRsZSAqaGFuZGxlLCB1bnNpZ25lZCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IGNvZGUsIGludCB2YWx1ZSkKIHsKLQlwcmludGsoS0VSTl9ERUJVRyAiZXZidWcuYzogRXZlbnQuIERldjogJXMsIFR5cGU6ICVkLCBDb2RlOiAlZCwgVmFsdWU6ICVkXG4iLAotCQlkZXZfbmFtZSgmaGFuZGxlLT5kZXYtPmRldiksIHR5cGUsIGNvZGUsIHZhbHVlKTsKKwlwcmludGsoS0VSTl9ERUJVRyBwcl9mbXQoIkV2ZW50LiBEZXY6ICVzLCBUeXBlOiAlZCwgQ29kZTogJWQsIFZhbHVlOiAlZFxuIiksCisJICAgICAgIGRldl9uYW1lKCZoYW5kbGUtPmRldi0+ZGV2KSwgdHlwZSwgY29kZSwgdmFsdWUpOwogfQogCiBzdGF0aWMgaW50IGV2YnVnX2Nvbm5lY3Qoc3RydWN0IGlucHV0X2hhbmRsZXIgKmhhbmRsZXIsIHN0cnVjdCBpbnB1dF9kZXYgKmRldiwKQEAgLTY0LDEwICs2NiwxMCBAQAogCWlmIChlcnJvcikKIAkJZ290byBlcnJfdW5yZWdpc3Rlcl9oYW5kbGU7CiAKLQlwcmludGsoS0VSTl9ERUJVRyAiZXZidWcuYzogQ29ubmVjdGVkIGRldmljZTogJXMgKCVzIGF0ICVzKVxuIiwKLQkJZGV2X25hbWUoJmRldi0+ZGV2KSwKLQkJZGV2LT5uYW1lID86ICJ1bmtub3duIiwKLQkJZGV2LT5waHlzID86ICJ1bmtub3duIik7CisJcHJpbnRrKEtFUk5fREVCVUcgcHJfZm10KCJDb25uZWN0ZWQgZGV2aWNlOiAlcyAoJXMgYXQgJXMpXG4iKSwKKwkgICAgICAgZGV2X25hbWUoJmRldi0+ZGV2KSwKKwkgICAgICAgZGV2LT5uYW1lID86ICJ1bmtub3duIiwKKwkgICAgICAgZGV2LT5waHlzID86ICJ1bmtub3duIik7CiAKIAlyZXR1cm4gMDsKIApAQCAtODAsOCArODIsOCBAQAogCiBzdGF0aWMgdm9pZCBldmJ1Z19kaXNjb25uZWN0KHN0cnVjdCBpbnB1dF9oYW5kbGUgKmhhbmRsZSkKIHsKLQlwcmludGsoS0VSTl9ERUJVRyAiZXZidWcuYzogRGlzY29ubmVjdGVkIGRldmljZTogJXNcbiIsCi0JCWRldl9uYW1lKCZoYW5kbGUtPmRldi0+ZGV2KSk7CisJcHJpbnRrKEtFUk5fREVCVUcgcHJfZm10KCJEaXNjb25uZWN0ZWQgZGV2aWNlOiAlc1xuIiksCisJICAgICAgIGRldl9uYW1lKCZoYW5kbGUtPmRldi0+ZGV2KSk7CiAKIAlpbnB1dF9jbG9zZV9kZXZpY2UoaGFuZGxlKTsKIAlpbnB1dF91bnJlZ2lzdGVyX2hhbmRsZShoYW5kbGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9ldmRldi5jIGIvZHJpdmVycy9pbnB1dC9ldmRldi5jCmluZGV4IDY4ZjA5YTguLmM4NDcxYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvZXZkZXYuYworKysgYi9kcml2ZXJzL2lucHV0L2V2ZGV2LmMKQEAgLTgsNiArOCw4IEBACiAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKwogI2RlZmluZSBFVkRFVl9NSU5PUl9CQVNFCTY0CiAjZGVmaW5lIEVWREVWX01JTk9SUwkJMzIKICNkZWZpbmUgRVZERVZfTUlOX0JVRkZFUl9TSVpFCTY0VQpAQCAtNTIyLDEyICs1MjQsMTEgQEAKIAlpZiAodHlwZSA9PSBFVl9LRVkgJiYgc2l6ZSA9PSBPTERfS0VZX01BWCkgewogCQlsZW4gPSBPTERfS0VZX01BWDsKIAkJaWYgKHByaW50a190aW1lZF9yYXRlbGltaXQoJmtleW1heF93YXJuX3RpbWUsIDEwICogMTAwMCkpCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkJImV2ZGV2LmMoRVZJT0NHQklUKTogU3VzcGljaW91cyBidWZmZXIgc2l6ZSAldSwgIgotCQkJCSJsaW1pdGluZyBvdXRwdXQgdG8gJXp1IGJ5dGVzLiBTZWUgIgotCQkJCSJodHRwOi8vdXNlcndlYi5rZXJuZWwub3JnL35kdG9yL2V2aW9jZ2JpdC1idWcuaHRtbFxuIiwKLQkJCQlPTERfS0VZX01BWCwKLQkJCQlCSVRTX1RPX0xPTkdTKE9MRF9LRVlfTUFYKSAqIHNpemVvZihsb25nKSk7CisJCQlwcl93YXJuaW5nKCIoRVZJT0NHQklUKTogU3VzcGljaW91cyBidWZmZXIgc2l6ZSAldSwgIgorCQkJCSAgICJsaW1pdGluZyBvdXRwdXQgdG8gJXp1IGJ5dGVzLiBTZWUgIgorCQkJCSAgICJodHRwOi8vdXNlcndlYi5rZXJuZWwub3JnL35kdG9yL2V2aW9jZ2JpdC1idWcuaHRtbFxuIiwKKwkJCQkgICBPTERfS0VZX01BWCwKKwkJCQkgICBCSVRTX1RPX0xPTkdTKE9MRF9LRVlfTUFYKSAqIHNpemVvZihsb25nKSk7CiAJfQogCiAJcmV0dXJuIGJpdHNfdG9fdXNlcihiaXRzLCBsZW4sIHNpemUsIHAsIGNvbXBhdF9tb2RlKTsKQEAgLTY4Niw2ICs2ODcsMTAgQEAKICNkZWZpbmUgRVZJT0NfTUFTS19TSVpFKG5yKQkoKG5yKSAmIH4oX0lPQ19TSVpFTUFTSyA8PCBfSU9DX1NJWkVTSElGVCkpCiAJc3dpdGNoIChFVklPQ19NQVNLX1NJWkUoY21kKSkgewogCisJY2FzZSBFVklPQ0dQUk9QKDApOgorCQlyZXR1cm4gYml0c190b191c2VyKGRldi0+cHJvcGJpdCwgSU5QVVRfUFJPUF9NQVgsCisJCQkJICAgIHNpemUsIHAsIGNvbXBhdF9tb2RlKTsKKwogCWNhc2UgRVZJT0NHS0VZKDApOgogCQlyZXR1cm4gYml0c190b191c2VyKGRldi0+a2V5LCBLRVlfTUFYLCBzaXplLCBwLCBjb21wYXRfbW9kZSk7CiAKQEAgLTg5Nyw3ICs5MDIsNyBAQAogCQkJYnJlYWs7CiAKIAlpZiAobWlub3IgPT0gRVZERVZfTUlOT1JTKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiZXZkZXY6IG5vIG1vcmUgZnJlZSBldmRldiBkZXZpY2VzXG4iKTsKKwkJcHJfZXJyKCJubyBtb3JlIGZyZWUgZXZkZXYgZGV2aWNlc1xuIik7CiAJCXJldHVybiAtRU5GSUxFOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9mZi1jb3JlLmMgYi9kcml2ZXJzL2lucHV0L2ZmLWNvcmUuYwppbmRleCAwMzA3OGMwLi4zMzY3Zjc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2ZmLWNvcmUuYworKysgYi9kcml2ZXJzL2lucHV0L2ZmLWNvcmUuYwpAQCAtMjMsNyArMjMsNyBAQAogCiAvKiAjZGVmaW5lIERFQlVHICovCiAKLSNkZWZpbmUgZGVidWcoZm9ybWF0LCBhcmcuLi4pIHByX2RlYnVnKCJmZi1jb3JlOiAiIGZvcm1hdCAiXG4iLCAjIyBhcmcpCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9CQVNFTkFNRSAiOiAiIGZtdAogCiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTExNiw3ICsxMTYsNyBAQAogCiAJaWYgKGVmZmVjdC0+dHlwZSA8IEZGX0VGRkVDVF9NSU4gfHwgZWZmZWN0LT50eXBlID4gRkZfRUZGRUNUX01BWCB8fAogCSAgICAhdGVzdF9iaXQoZWZmZWN0LT50eXBlLCBkZXYtPmZmYml0KSkgewotCQlkZWJ1ZygiaW52YWxpZCBvciBub3Qgc3VwcG9ydGVkIGVmZmVjdCB0eXBlIGluIHVwbG9hZCIpOworCQlwcl9kZWJ1ZygiaW52YWxpZCBvciBub3Qgc3VwcG9ydGVkIGVmZmVjdCB0eXBlIGluIHVwbG9hZFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMTI0LDcgKzEyNCw3IEBACiAJICAgIChlZmZlY3QtPnUucGVyaW9kaWMud2F2ZWZvcm0gPCBGRl9XQVZFRk9STV9NSU4gfHwKIAkgICAgIGVmZmVjdC0+dS5wZXJpb2RpYy53YXZlZm9ybSA+IEZGX1dBVkVGT1JNX01BWCB8fAogCSAgICAgIXRlc3RfYml0KGVmZmVjdC0+dS5wZXJpb2RpYy53YXZlZm9ybSwgZGV2LT5mZmJpdCkpKSB7Ci0JCWRlYnVnKCJpbnZhbGlkIG9yIG5vdCBzdXBwb3J0ZWQgd2F2ZSBmb3JtIGluIHVwbG9hZCIpOworCQlwcl9kZWJ1ZygiaW52YWxpZCBvciBub3Qgc3VwcG9ydGVkIHdhdmUgZm9ybSBpbiB1cGxvYWRcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTI0Niw3ICsyNDYsNyBAQAogCXN0cnVjdCBmZl9kZXZpY2UgKmZmID0gZGV2LT5mZjsKIAlpbnQgaTsKIAotCWRlYnVnKCJmbHVzaGluZyBub3ciKTsKKwlwcl9kZWJ1ZygiZmx1c2hpbmcgbm93XG4iKTsKIAogCW11dGV4X2xvY2soJmZmLT5tdXRleCk7CiAKQEAgLTMxNSw4ICszMTUsNyBAQAogCWludCBpOwogCiAJaWYgKCFtYXhfZWZmZWN0cykgewotCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJmZi1jb3JlOiBjYW5ub3QgYWxsb2NhdGUgZGV2aWNlIHdpdGhvdXQgYW55IGVmZmVjdHNcbiIpOworCQlwcl9lcnIoImNhbm5vdCBhbGxvY2F0ZSBkZXZpY2Ugd2l0aG91dCBhbnkgZWZmZWN0c1xuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9mZi1tZW1sZXNzLmMgYi9kcml2ZXJzL2lucHV0L2ZmLW1lbWxlc3MuYwppbmRleCAxZDg4MWM5Li4xMTdhNTlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2ZmLW1lbWxlc3MuYworKysgYi9kcml2ZXJzL2lucHV0L2ZmLW1lbWxlc3MuYwpAQCAtMjMsNyArMjMsNyBAQAogCiAvKiAjZGVmaW5lIERFQlVHICovCiAKLSNkZWZpbmUgZGVidWcoZm9ybWF0LCBhcmcuLi4pIHByX2RlYnVnKCJmZi1tZW1sZXNzOiAiIGZvcm1hdCAiXG4iLCAjIyBhcmcpCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CiAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KQEAgLTEyOSw3ICsxMjksNyBAQAogCWludCBldmVudHMgPSAwOwogCWludCBpOwogCi0JZGVidWcoImNhbGN1bGF0aW5nIG5leHQgdGltZXIiKTsKKwlwcl9kZWJ1ZygiY2FsY3VsYXRpbmcgbmV4dCB0aW1lclxuIik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgRkZfTUVNTEVTU19FRkZFQ1RTOyBpKyspIHsKIApAQCAtMTQ5LDEwICsxNDksMTAgQEAKIAl9CiAKIAlpZiAoIWV2ZW50cykgewotCQlkZWJ1Zygibm8gYWN0aW9ucyIpOworCQlwcl9kZWJ1Zygibm8gYWN0aW9uc1xuIik7CiAJCWRlbF90aW1lcigmbWwtPnRpbWVyKTsKIAl9IGVsc2UgewotCQlkZWJ1ZygidGltZXIgc2V0Iik7CisJCXByX2RlYnVnKCJ0aW1lciBzZXRcbiIpOwogCQltb2RfdGltZXIoJm1sLT50aW1lciwgZWFybGllc3QpOwogCX0KIH0KQEAgLTE3Myw4ICsxNzMsOCBAQAogCWlmIChlbnZlbG9wZS0+YXR0YWNrX2xlbmd0aCAmJgogCSAgICB0aW1lX2JlZm9yZShub3csCiAJCQlzdGF0ZS0+cGxheV9hdCArIG1zZWNzX3RvX2ppZmZpZXMoZW52ZWxvcGUtPmF0dGFja19sZW5ndGgpKSkgewotCQlkZWJ1ZygidmFsdWUgPSAweCV4LCBhdHRhY2tfbGV2ZWwgPSAweCV4IiwgdmFsdWUsCi0JCSAgICAgIGVudmVsb3BlLT5hdHRhY2tfbGV2ZWwpOworCQlwcl9kZWJ1ZygidmFsdWUgPSAweCV4LCBhdHRhY2tfbGV2ZWwgPSAweCV4XG4iLAorCQkJIHZhbHVlLCBlbnZlbG9wZS0+YXR0YWNrX2xldmVsKTsKIAkJdGltZV9mcm9tX2xldmVsID0gamlmZmllc190b19tc2Vjcyhub3cgLSBzdGF0ZS0+cGxheV9hdCk7CiAJCXRpbWVfb2ZfZW52ZWxvcGUgPSBlbnZlbG9wZS0+YXR0YWNrX2xlbmd0aDsKIAkJZW52ZWxvcGVfbGV2ZWwgPSBtaW5fdChfX3MxNiwgZW52ZWxvcGUtPmF0dGFja19sZXZlbCwgMHg3ZmZmKTsKQEAgLTE5MSwxMyArMTkxLDEzIEBACiAKIAlkaWZmZXJlbmNlID0gYWJzKHZhbHVlKSAtIGVudmVsb3BlX2xldmVsOwogCi0JZGVidWcoImRpZmZlcmVuY2UgPSAlZCIsIGRpZmZlcmVuY2UpOwotCWRlYnVnKCJ0aW1lX2Zyb21fbGV2ZWwgPSAweCV4IiwgdGltZV9mcm9tX2xldmVsKTsKLQlkZWJ1ZygidGltZV9vZl9lbnZlbG9wZSA9IDB4JXgiLCB0aW1lX29mX2VudmVsb3BlKTsKKwlwcl9kZWJ1ZygiZGlmZmVyZW5jZSA9ICVkXG4iLCBkaWZmZXJlbmNlKTsKKwlwcl9kZWJ1ZygidGltZV9mcm9tX2xldmVsID0gMHgleFxuIiwgdGltZV9mcm9tX2xldmVsKTsKKwlwcl9kZWJ1ZygidGltZV9vZl9lbnZlbG9wZSA9IDB4JXhcbiIsIHRpbWVfb2ZfZW52ZWxvcGUpOwogCiAJZGlmZmVyZW5jZSA9IGRpZmZlcmVuY2UgKiB0aW1lX2Zyb21fbGV2ZWwgLyB0aW1lX29mX2VudmVsb3BlOwogCi0JZGVidWcoImRpZmZlcmVuY2UgPSAlZCIsIGRpZmZlcmVuY2UpOworCXByX2RlYnVnKCJkaWZmZXJlbmNlID0gJWRcbiIsIGRpZmZlcmVuY2UpOwogCiAJcmV0dXJuIHZhbHVlIDwgMCA/CiAJCS0oZGlmZmVyZW5jZSArIGVudmVsb3BlX2xldmVsKSA6IChkaWZmZXJlbmNlICsgZW52ZWxvcGVfbGV2ZWwpOwpAQCAtMjE1LDggKzIxNSw3IEBACiAJaWYgKGVmZmVjdF90eXBlID09IEZGX1BFUklPRElDICYmIHRlc3RfYml0KEZGX1JVTUJMRSwgZmYtPmZmYml0KSkKIAkJcmV0dXJuIEZGX1JVTUJMRTsKIAotCXByaW50ayhLRVJOX0VSUgotCSAgICAgICAiZmYtbWVtbGVzczogaW52YWxpZCB0eXBlIGluIGdldF9jb21wYXRpYmxlX3R5cGUoKVxuIik7CisJcHJfZXJyKCJpbnZhbGlkIHR5cGUgaW4gZ2V0X2NvbXBhdGlibGVfdHlwZSgpXG4iKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzEyLDcgKzMxMSw3IEBACiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fRVJSICJmZi1tZW1sZXNzOiBpbnZhbGlkIHR5cGUgaW4gbWxfY29tYmluZV9lZmZlY3RzKClcbiIpOworCQlwcl9lcnIoImludmFsaWQgdHlwZSBpbiBtbF9jb21iaW5lX2VmZmVjdHMoKVxuIik7CiAJCWJyZWFrOwogCX0KIApAQCAtNDA2LDcgKzQwNSw3IEBACiAJc3RydWN0IG1sX2RldmljZSAqbWwgPSBkZXYtPmZmLT5wcml2YXRlOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlkZWJ1ZygidGltZXI6IHVwZGF0aW5nIGVmZmVjdHMiKTsKKwlwcl9kZWJ1ZygidGltZXI6IHVwZGF0aW5nIGVmZmVjdHNcbiIpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+ZXZlbnRfbG9jaywgZmxhZ3MpOwogCW1sX3BsYXlfZWZmZWN0cyhtbCk7CkBAIC00MzgsNyArNDM3LDcgQEAKIAlzdHJ1Y3QgbWxfZWZmZWN0X3N0YXRlICpzdGF0ZSA9ICZtbC0+c3RhdGVzW2VmZmVjdF9pZF07CiAKIAlpZiAodmFsdWUgPiAwKSB7Ci0JCWRlYnVnKCJpbml0aWF0ZWQgcGxheSIpOworCQlwcl9kZWJ1ZygiaW5pdGlhdGVkIHBsYXlcbiIpOwogCiAJCV9fc2V0X2JpdChGRl9FRkZFQ1RfU1RBUlRFRCwgJnN0YXRlLT5mbGFncyk7CiAJCXN0YXRlLT5jb3VudCA9IHZhbHVlOwpAQCAtNDQ5LDcgKzQ0OCw3IEBACiAJCXN0YXRlLT5hZGpfYXQgPSBzdGF0ZS0+cGxheV9hdDsKIAogCX0gZWxzZSB7Ci0JCWRlYnVnKCJpbml0aWF0ZWQgc3RvcCIpOworCQlwcl9kZWJ1ZygiaW5pdGlhdGVkIHN0b3BcbiIpOwogCiAJCWlmICh0ZXN0X2JpdChGRl9FRkZFQ1RfUExBWUlORywgJnN0YXRlLT5mbGFncykpCiAJCQlfX3NldF9iaXQoRkZfRUZGRUNUX0FCT1JUSU5HLCAmc3RhdGUtPmZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvZ2FtZXBvcnQvZ2FtZXBvcnQuYyBiL2RyaXZlcnMvaW5wdXQvZ2FtZXBvcnQvZ2FtZXBvcnQuYwppbmRleCA0NjIzOWU0Li4yM2NmOGZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2dhbWVwb3J0L2dhbWVwb3J0LmMKKysrIGIvZHJpdmVycy9pbnB1dC9nYW1lcG9ydC9nYW1lcG9ydC5jCkBAIC0xOCwxMyArMTgsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZ2FtZXBvcnQuaD4KLSNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CS8qIEhaICovCiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KLSNpbmNsdWRlIDxsaW51eC9mcmVlemVyLmg+CiAKIC8qI2luY2x1ZGUgPGFzbS9pby5oPiovCiAKQEAgLTEyMyw3ICsxMjEsNyBAQAogCX0KIAogCWdhbWVwb3J0X2Nsb3NlKGdhbWVwb3J0KTsKLQlyZXR1cm4gKGNwdV9kYXRhKHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpLmxvb3BzX3Blcl9qaWZmeSAqCisJcmV0dXJuICh0aGlzX2NwdV9yZWFkKGNwdV9pbmZvLmxvb3BzX3Blcl9qaWZmeSkgKgogCQkodW5zaWduZWQgbG9uZylIWiAvICgxMDAwIC8gNTApKSAvICh0eCA8IDEgPyAxIDogdHgpOwogCiAjZWxzZQpAQCAtMjM0LDU4ICsyMzIsMjIgQEAKIAogc3RhdGljIERFRklORV9TUElOTE9DSyhnYW1lcG9ydF9ldmVudF9sb2NrKTsJLyogcHJvdGVjdHMgZ2FtZXBvcnRfZXZlbnRfbGlzdCAqLwogc3RhdGljIExJU1RfSEVBRChnYW1lcG9ydF9ldmVudF9saXN0KTsKLXN0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChnYW1lcG9ydF93YWl0KTsKLXN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmdhbWVwb3J0X3Rhc2s7CiAKLXN0YXRpYyBpbnQgZ2FtZXBvcnRfcXVldWVfZXZlbnQodm9pZCAqb2JqZWN0LCBzdHJ1Y3QgbW9kdWxlICpvd25lciwKLQkJCQllbnVtIGdhbWVwb3J0X2V2ZW50X3R5cGUgZXZlbnRfdHlwZSkKK3N0YXRpYyBzdHJ1Y3QgZ2FtZXBvcnRfZXZlbnQgKmdhbWVwb3J0X2dldF9ldmVudCh2b2lkKQogeworCXN0cnVjdCBnYW1lcG9ydF9ldmVudCAqZXZlbnQgPSBOVUxMOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGdhbWVwb3J0X2V2ZW50ICpldmVudDsKLQlpbnQgcmV0dmFsID0gMDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZnYW1lcG9ydF9ldmVudF9sb2NrLCBmbGFncyk7CiAKLQkvKgotCSAqIFNjYW4gZXZlbnQgbGlzdCBmb3IgdGhlIG90aGVyIGV2ZW50cyBmb3IgdGhlIHNhbWUgZ2FtZXBvcnQgcG9ydCwKLQkgKiBzdGFydGluZyB3aXRoIHRoZSBtb3N0IHJlY2VudCBvbmUuIElmIGV2ZW50IGlzIHRoZSBzYW1lIHdlCi0JICogZG8gbm90IG5lZWQgYWRkIG5ldyBvbmUuIElmIGV2ZW50IGlzIG9mIGRpZmZlcmVudCB0eXBlIHdlCi0JICogbmVlZCB0byBhZGQgdGhpcyBldmVudCBhbmQgc2hvdWxkIG5vdCBsb29rIGZ1cnRoZXIgYmVjYXVzZQotCSAqIHdlIG5lZWQgdG8gcHJlc2V2ZSBzZXF1ZW5jZSBvZiBkaXN0aW5jdCBldmVudHMuCi0JICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKGV2ZW50LCAmZ2FtZXBvcnRfZXZlbnRfbGlzdCwgbm9kZSkgewotCQlpZiAoZXZlbnQtPm9iamVjdCA9PSBvYmplY3QpIHsKLQkJCWlmIChldmVudC0+dHlwZSA9PSBldmVudF90eXBlKQotCQkJCWdvdG8gb3V0OwotCQkJYnJlYWs7Ci0JCX0KKwlpZiAoIWxpc3RfZW1wdHkoJmdhbWVwb3J0X2V2ZW50X2xpc3QpKSB7CisJCWV2ZW50ID0gbGlzdF9maXJzdF9lbnRyeSgmZ2FtZXBvcnRfZXZlbnRfbGlzdCwKKwkJCQkJIHN0cnVjdCBnYW1lcG9ydF9ldmVudCwgbm9kZSk7CisJCWxpc3RfZGVsX2luaXQoJmV2ZW50LT5ub2RlKTsKIAl9CiAKLQlldmVudCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBnYW1lcG9ydF9ldmVudCksIEdGUF9BVE9NSUMpOwotCWlmICghZXZlbnQpIHsKLQkJcHJfZXJyKCJOb3QgZW5vdWdoIG1lbW9yeSB0byBxdWV1ZSBldmVudCAlZFxuIiwgZXZlbnRfdHlwZSk7Ci0JCXJldHZhbCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmICghdHJ5X21vZHVsZV9nZXQob3duZXIpKSB7Ci0JCXByX3dhcm5pbmcoIkNhbid0IGdldCBtb2R1bGUgcmVmZXJlbmNlLCBkcm9wcGluZyBldmVudCAlZFxuIiwKLQkJCSAgIGV2ZW50X3R5cGUpOwotCQlrZnJlZShldmVudCk7Ci0JCXJldHZhbCA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWV2ZW50LT50eXBlID0gZXZlbnRfdHlwZTsKLQlldmVudC0+b2JqZWN0ID0gb2JqZWN0OwotCWV2ZW50LT5vd25lciA9IG93bmVyOwotCi0JbGlzdF9hZGRfdGFpbCgmZXZlbnQtPm5vZGUsICZnYW1lcG9ydF9ldmVudF9saXN0KTsKLQl3YWtlX3VwKCZnYW1lcG9ydF93YWl0KTsKLQotb3V0OgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdhbWVwb3J0X2V2ZW50X2xvY2ssIGZsYWdzKTsKLQlyZXR1cm4gcmV0dmFsOworCXJldHVybiBldmVudDsKIH0KIAogc3RhdGljIHZvaWQgZ2FtZXBvcnRfZnJlZV9ldmVudChzdHJ1Y3QgZ2FtZXBvcnRfZXZlbnQgKmV2ZW50KQpAQCAtMzE5LDI0ICsyODEsOCBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdhbWVwb3J0X2V2ZW50X2xvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIHN0cnVjdCBnYW1lcG9ydF9ldmVudCAqZ2FtZXBvcnRfZ2V0X2V2ZW50KHZvaWQpCi17Ci0Jc3RydWN0IGdhbWVwb3J0X2V2ZW50ICpldmVudCA9IE5VTEw7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZnYW1lcG9ydF9ldmVudF9sb2NrLCBmbGFncyk7Ci0KLQlpZiAoIWxpc3RfZW1wdHkoJmdhbWVwb3J0X2V2ZW50X2xpc3QpKSB7Ci0JCWV2ZW50ID0gbGlzdF9maXJzdF9lbnRyeSgmZ2FtZXBvcnRfZXZlbnRfbGlzdCwKLQkJCQkJIHN0cnVjdCBnYW1lcG9ydF9ldmVudCwgbm9kZSk7Ci0JCWxpc3RfZGVsX2luaXQoJmV2ZW50LT5ub2RlKTsKLQl9Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZnYW1lcG9ydF9ldmVudF9sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIGV2ZW50OwotfQotCi1zdGF0aWMgdm9pZCBnYW1lcG9ydF9oYW5kbGVfZXZlbnQodm9pZCkKK3N0YXRpYyB2b2lkIGdhbWVwb3J0X2hhbmRsZV9ldmVudHMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBnYW1lcG9ydF9ldmVudCAqZXZlbnQ7CiAKQEAgLTM2OCw2ICszMTQsNTkgQEAKIAltdXRleF91bmxvY2soJmdhbWVwb3J0X211dGV4KTsKIH0KIAorc3RhdGljIERFQ0xBUkVfV09SSyhnYW1lcG9ydF9ldmVudF93b3JrLCBnYW1lcG9ydF9oYW5kbGVfZXZlbnRzKTsKKworc3RhdGljIGludCBnYW1lcG9ydF9xdWV1ZV9ldmVudCh2b2lkICpvYmplY3QsIHN0cnVjdCBtb2R1bGUgKm93bmVyLAorCQkJCWVudW0gZ2FtZXBvcnRfZXZlbnRfdHlwZSBldmVudF90eXBlKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGdhbWVwb3J0X2V2ZW50ICpldmVudDsKKwlpbnQgcmV0dmFsID0gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZnYW1lcG9ydF9ldmVudF9sb2NrLCBmbGFncyk7CisKKwkvKgorCSAqIFNjYW4gZXZlbnQgbGlzdCBmb3IgdGhlIG90aGVyIGV2ZW50cyBmb3IgdGhlIHNhbWUgZ2FtZXBvcnQgcG9ydCwKKwkgKiBzdGFydGluZyB3aXRoIHRoZSBtb3N0IHJlY2VudCBvbmUuIElmIGV2ZW50IGlzIHRoZSBzYW1lIHdlCisJICogZG8gbm90IG5lZWQgYWRkIG5ldyBvbmUuIElmIGV2ZW50IGlzIG9mIGRpZmZlcmVudCB0eXBlIHdlCisJICogbmVlZCB0byBhZGQgdGhpcyBldmVudCBhbmQgc2hvdWxkIG5vdCBsb29rIGZ1cnRoZXIgYmVjYXVzZQorCSAqIHdlIG5lZWQgdG8gcHJlc2VydmUgc2VxdWVuY2Ugb2YgZGlzdGluY3QgZXZlbnRzLgorCSAqLworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShldmVudCwgJmdhbWVwb3J0X2V2ZW50X2xpc3QsIG5vZGUpIHsKKwkJaWYgKGV2ZW50LT5vYmplY3QgPT0gb2JqZWN0KSB7CisJCQlpZiAoZXZlbnQtPnR5cGUgPT0gZXZlbnRfdHlwZSkKKwkJCQlnb3RvIG91dDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJZXZlbnQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZ2FtZXBvcnRfZXZlbnQpLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWV2ZW50KSB7CisJCXByX2VycigiTm90IGVub3VnaCBtZW1vcnkgdG8gcXVldWUgZXZlbnQgJWRcbiIsIGV2ZW50X3R5cGUpOworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoIXRyeV9tb2R1bGVfZ2V0KG93bmVyKSkgeworCQlwcl93YXJuaW5nKCJDYW4ndCBnZXQgbW9kdWxlIHJlZmVyZW5jZSwgZHJvcHBpbmcgZXZlbnQgJWRcbiIsCisJCQkgICBldmVudF90eXBlKTsKKwkJa2ZyZWUoZXZlbnQpOworCQlyZXR2YWwgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwlldmVudC0+dHlwZSA9IGV2ZW50X3R5cGU7CisJZXZlbnQtPm9iamVjdCA9IG9iamVjdDsKKwlldmVudC0+b3duZXIgPSBvd25lcjsKKworCWxpc3RfYWRkX3RhaWwoJmV2ZW50LT5ub2RlLCAmZ2FtZXBvcnRfZXZlbnRfbGlzdCk7CisJc2NoZWR1bGVfd29yaygmZ2FtZXBvcnRfZXZlbnRfd29yayk7CisKK291dDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZnYW1lcG9ydF9ldmVudF9sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJldHZhbDsKK30KKwogLyoKICAqIFJlbW92ZSBhbGwgZXZlbnRzIHRoYXQgaGF2ZSBiZWVuIHN1Ym1pdHRlZCBmb3IgYSBnaXZlbiBvYmplY3QsCiAgKiBiZSBpdCBhIGdhbWVwb3J0IHBvcnQgb3IgYSBkcml2ZXIuCkBAIC00MTksMTkgKzQxOCw2IEBACiAJcmV0dXJuIGNoaWxkOwogfQogCi1zdGF0aWMgaW50IGdhbWVwb3J0X3RocmVhZCh2b2lkICpub3RoaW5nKQotewotCXNldF9mcmVlemFibGUoKTsKLQlkbyB7Ci0JCWdhbWVwb3J0X2hhbmRsZV9ldmVudCgpOwotCQl3YWl0X2V2ZW50X2ZyZWV6YWJsZShnYW1lcG9ydF93YWl0LAotCQkJa3RocmVhZF9zaG91bGRfc3RvcCgpIHx8ICFsaXN0X2VtcHR5KCZnYW1lcG9ydF9ldmVudF9saXN0KSk7Ci0JfSB3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotCiAvKgogICogR2FtZXBvcnQgcG9ydCBvcGVyYXRpb25zCiAgKi8KQEAgLTgxNCwxMyArODAwLDYgQEAKIAkJcmV0dXJuIGVycm9yOwogCX0KIAotCWdhbWVwb3J0X3Rhc2sgPSBrdGhyZWFkX3J1bihnYW1lcG9ydF90aHJlYWQsIE5VTEwsICJrZ2FtZXBvcnRkIik7Ci0JaWYgKElTX0VSUihnYW1lcG9ydF90YXNrKSkgewotCQlidXNfdW5yZWdpc3RlcigmZ2FtZXBvcnRfYnVzKTsKLQkJZXJyb3IgPSBQVFJfRVJSKGdhbWVwb3J0X3Rhc2spOwotCQlwcl9lcnIoIkZhaWxlZCB0byBzdGFydCBrZ2FtZXBvcnRkLCBlcnJvcjogJWRcbiIsIGVycm9yKTsKLQkJcmV0dXJuIGVycm9yOwotCX0KIAogCXJldHVybiAwOwogfQpAQCAtODI4LDcgKzgwNywxMiBAQAogc3RhdGljIHZvaWQgX19leGl0IGdhbWVwb3J0X2V4aXQodm9pZCkKIHsKIAlidXNfdW5yZWdpc3RlcigmZ2FtZXBvcnRfYnVzKTsKLQlrdGhyZWFkX3N0b3AoZ2FtZXBvcnRfdGFzayk7CisKKwkvKgorCSAqIFRoZXJlIHNob3VsZCBub3QgYmUgYW55IG91dHN0YW5kaW5nIGV2ZW50cyBidXQgd29yayBtYXkKKwkgKiBzdGlsbCBiZSBzY2hlZHVsZWQgc28gc2ltcGx5IGNhbmNlbCBpdC4KKwkgKi8KKwljYW5jZWxfd29ya19zeW5jKCZnYW1lcG9ydF9ldmVudF93b3JrKTsKIH0KIAogc3Vic3lzX2luaXRjYWxsKGdhbWVwb3J0X2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9pbnB1dC1tdC5jIGIvZHJpdmVycy9pbnB1dC9pbnB1dC1tdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0OGM4MWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2lucHV0L2lucHV0LW10LmMKQEAgLTAsMCArMSwxNzAgQEAKKy8qCisgKiBJbnB1dCBNdWx0aXRvdWNoIExpYnJhcnkKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMCBIZW5yaWsgUnlkYmVyZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2lucHV0L210Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorCisjZGVmaW5lIFRSS0lEX1NHTgkoKFRSS0lEX01BWCArIDEpID4+IDEpCisKKy8qKgorICogaW5wdXRfbXRfaW5pdF9zbG90cygpIC0gaW5pdGlhbGl6ZSBNVCBpbnB1dCBzbG90cworICogQGRldjogaW5wdXQgZGV2aWNlIHN1cHBvcnRpbmcgTVQgZXZlbnRzIGFuZCBmaW5nZXIgdHJhY2tpbmcKKyAqIEBudW1fc2xvdHM6IG51bWJlciBvZiBzbG90cyB1c2VkIGJ5IHRoZSBkZXZpY2UKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyBhbGwgbmVjZXNzYXJ5IG1lbW9yeSBmb3IgTVQgc2xvdCBoYW5kbGluZworICogaW4gdGhlIGlucHV0IGRldmljZSwgcHJlcGFyZXMgdGhlIEFCU19NVF9TTE9UIGFuZAorICogQUJTX01UX1RSQUNLSU5HX0lEIGV2ZW50cyBmb3IgdXNlIGFuZCBzZXRzIHVwIGFwcHJvcHJpYXRlIGJ1ZmZlcnMuCisgKiBNYXkgYmUgY2FsbGVkIHJlcGVhdGVkbHkuIFJldHVybnMgLUVJTlZBTCBpZiBhdHRlbXB0aW5nIHRvCisgKiByZWluaXRpYWxpemUgd2l0aCBhIGRpZmZlcmVudCBudW1iZXIgb2Ygc2xvdHMuCisgKi8KK2ludCBpbnB1dF9tdF9pbml0X3Nsb3RzKHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgdW5zaWduZWQgaW50IG51bV9zbG90cykKK3sKKwlpbnQgaTsKKworCWlmICghbnVtX3Nsb3RzKQorCQlyZXR1cm4gMDsKKwlpZiAoZGV2LT5tdCkKKwkJcmV0dXJuIGRldi0+bXRzaXplICE9IG51bV9zbG90cyA/IC1FSU5WQUwgOiAwOworCisJZGV2LT5tdCA9IGtjYWxsb2MobnVtX3Nsb3RzLCBzaXplb2Yoc3RydWN0IGlucHV0X210X3Nsb3QpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldi0+bXQpCisJCXJldHVybiAtRU5PTUVNOworCisJZGV2LT5tdHNpemUgPSBudW1fc2xvdHM7CisJaW5wdXRfc2V0X2Fic19wYXJhbXMoZGV2LCBBQlNfTVRfU0xPVCwgMCwgbnVtX3Nsb3RzIC0gMSwgMCwgMCk7CisJaW5wdXRfc2V0X2Fic19wYXJhbXMoZGV2LCBBQlNfTVRfVFJBQ0tJTkdfSUQsIDAsIFRSS0lEX01BWCwgMCwgMCk7CisJaW5wdXRfc2V0X2V2ZW50c19wZXJfcGFja2V0KGRldiwgNiAqIG51bV9zbG90cyk7CisKKwkvKiBNYXJrIHNsb3RzIGFzICd1bnVzZWQnICovCisJZm9yIChpID0gMDsgaSA8IG51bV9zbG90czsgaSsrKQorCQlpbnB1dF9tdF9zZXRfdmFsdWUoJmRldi0+bXRbaV0sIEFCU19NVF9UUkFDS0lOR19JRCwgLTEpOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGlucHV0X210X2luaXRfc2xvdHMpOworCisvKioKKyAqIGlucHV0X210X2Rlc3Ryb3lfc2xvdHMoKSAtIGZyZWVzIHRoZSBNVCBzbG90cyBvZiB0aGUgaW5wdXQgZGV2aWNlCisgKiBAZGV2OiBpbnB1dCBkZXZpY2Ugd2l0aCBhbGxvY2F0ZWQgTVQgc2xvdHMKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgbmVlZGVkIGluIGVycm9yIHBhdGggYXMgdGhlIGlucHV0IGNvcmUgd2lsbAorICogYXV0b21hdGljYWxseSBmcmVlIHRoZSBNVCBzbG90cyB3aGVuIHRoZSBkZXZpY2UgaXMgZGVzdHJveWVkLgorICovCit2b2lkIGlucHV0X210X2Rlc3Ryb3lfc2xvdHMoc3RydWN0IGlucHV0X2RldiAqZGV2KQoreworCWtmcmVlKGRldi0+bXQpOworCWRldi0+bXQgPSBOVUxMOworCWRldi0+bXRzaXplID0gMDsKKwlkZXYtPnNsb3QgPSAwOworCWRldi0+dHJraWQgPSAwOworfQorRVhQT1JUX1NZTUJPTChpbnB1dF9tdF9kZXN0cm95X3Nsb3RzKTsKKworLyoqCisgKiBpbnB1dF9tdF9yZXBvcnRfc2xvdF9zdGF0ZSgpIC0gcmVwb3J0IGNvbnRhY3Qgc3RhdGUKKyAqIEBkZXY6IGlucHV0IGRldmljZSB3aXRoIGFsbG9jYXRlZCBNVCBzbG90cworICogQHRvb2xfdHlwZTogdGhlIHRvb2wgdHlwZSB0byB1c2UgaW4gdGhpcyBzbG90CisgKiBAYWN0aXZlOiB0cnVlIGlmIGNvbnRhY3QgaXMgYWN0aXZlLCBmYWxzZSBvdGhlcndpc2UKKyAqCisgKiBSZXBvcnRzIGEgY29udGFjdCB2aWEgQUJTX01UX1RSQUNLSU5HX0lELCBhbmQgb3B0aW9uYWxseQorICogQUJTX01UX1RPT0xfVFlQRS4gSWYgYWN0aXZlIGlzIHRydWUgYW5kIHRoZSBzbG90IGlzIGN1cnJlbnRseQorICogaW5hY3RpdmUsIG9yIGlmIHRoZSB0b29sIHR5cGUgaXMgY2hhbmdlZCwgYSBuZXcgdHJhY2tpbmcgaWQgaXMKKyAqIGFzc2lnbmVkIHRvIHRoZSBzbG90LiBUaGUgdG9vbCB0eXBlIGlzIG9ubHkgcmVwb3J0ZWQgaWYgdGhlCisgKiBjb3JyZXNwb25kaW5nIGFic2JpdCBmaWVsZCBpcyBzZXQuCisgKi8KK3ZvaWQgaW5wdXRfbXRfcmVwb3J0X3Nsb3Rfc3RhdGUoc3RydWN0IGlucHV0X2RldiAqZGV2LAorCQkJCXVuc2lnbmVkIGludCB0b29sX3R5cGUsIGJvb2wgYWN0aXZlKQoreworCXN0cnVjdCBpbnB1dF9tdF9zbG90ICptdDsKKwlpbnQgaWQ7CisKKwlpZiAoIWRldi0+bXQgfHwgIWFjdGl2ZSkgeworCQlpbnB1dF9ldmVudChkZXYsIEVWX0FCUywgQUJTX01UX1RSQUNLSU5HX0lELCAtMSk7CisJCXJldHVybjsKKwl9CisKKwltdCA9ICZkZXYtPm10W2Rldi0+c2xvdF07CisJaWQgPSBpbnB1dF9tdF9nZXRfdmFsdWUobXQsIEFCU19NVF9UUkFDS0lOR19JRCk7CisJaWYgKGlkIDwgMCB8fCBpbnB1dF9tdF9nZXRfdmFsdWUobXQsIEFCU19NVF9UT09MX1RZUEUpICE9IHRvb2xfdHlwZSkKKwkJaWQgPSBpbnB1dF9tdF9uZXdfdHJraWQoZGV2KTsKKworCWlucHV0X2V2ZW50KGRldiwgRVZfQUJTLCBBQlNfTVRfVFJBQ0tJTkdfSUQsIGlkKTsKKwlpbnB1dF9ldmVudChkZXYsIEVWX0FCUywgQUJTX01UX1RPT0xfVFlQRSwgdG9vbF90eXBlKTsKK30KK0VYUE9SVF9TWU1CT0woaW5wdXRfbXRfcmVwb3J0X3Nsb3Rfc3RhdGUpOworCisvKioKKyAqIGlucHV0X210X3JlcG9ydF9maW5nZXJfY291bnQoKSAtIHJlcG9ydCBjb250YWN0IGNvdW50CisgKiBAZGV2OiBpbnB1dCBkZXZpY2Ugd2l0aCBhbGxvY2F0ZWQgTVQgc2xvdHMKKyAqIEBjb3VudDogdGhlIG51bWJlciBvZiBjb250YWN0cworICoKKyAqIFJlcG9ydHMgdGhlIGNvbnRhY3QgY291bnQgdmlhIEJUTl9UT09MX0ZJTkdFUiwgQlROX1RPT0xfRE9VQkxFVEFQLAorICogQlROX1RPT0xfVFJJUExFVEFQIGFuZCBCVE5fVE9PTF9RVUFEVEFQLgorICoKKyAqIFRoZSBpbnB1dCBjb3JlIGVuc3VyZXMgb25seSB0aGUgS0VZIGV2ZW50cyBhbHJlYWR5IHNldHVwIGZvcgorICogdGhpcyBkZXZpY2Ugd2lsbCBwcm9kdWNlIG91dHB1dC4KKyAqLwordm9pZCBpbnB1dF9tdF9yZXBvcnRfZmluZ2VyX2NvdW50KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgaW50IGNvdW50KQoreworCWlucHV0X2V2ZW50KGRldiwgRVZfS0VZLCBCVE5fVE9PTF9GSU5HRVIsIGNvdW50ID09IDEpOworCWlucHV0X2V2ZW50KGRldiwgRVZfS0VZLCBCVE5fVE9PTF9ET1VCTEVUQVAsIGNvdW50ID09IDIpOworCWlucHV0X2V2ZW50KGRldiwgRVZfS0VZLCBCVE5fVE9PTF9UUklQTEVUQVAsIGNvdW50ID09IDMpOworCWlucHV0X2V2ZW50KGRldiwgRVZfS0VZLCBCVE5fVE9PTF9RVUFEVEFQLCBjb3VudCA9PSA0KTsKK30KK0VYUE9SVF9TWU1CT0woaW5wdXRfbXRfcmVwb3J0X2Zpbmdlcl9jb3VudCk7CisKKy8qKgorICogaW5wdXRfbXRfcmVwb3J0X3BvaW50ZXJfZW11bGF0aW9uKCkgLSBjb21tb24gcG9pbnRlciBlbXVsYXRpb24KKyAqIEBkZXY6IGlucHV0IGRldmljZSB3aXRoIGFsbG9jYXRlZCBNVCBzbG90cworICogQHVzZV9jb3VudDogcmVwb3J0IG51bWJlciBvZiBhY3RpdmUgY29udGFjdHMgYXMgZmluZ2VyIGNvdW50CisgKgorICogUGVyZm9ybXMgbGVnYWN5IHBvaW50ZXIgZW11bGF0aW9uIHZpYSBCVE5fVE9VQ0gsIEFCU19YLCBBQlNfWSBhbmQKKyAqIEFCU19QUkVTU1VSRS4gVG91Y2hwYWQgZmluZ2VyIGNvdW50IGlzIGVtdWxhdGVkIGlmIHVzZV9jb3VudCBpcyB0cnVlLgorICoKKyAqIFRoZSBpbnB1dCBjb3JlIGVuc3VyZXMgb25seSB0aGUgS0VZIGFuZCBBQlMgYXhlcyBhbHJlYWR5IHNldHVwIGZvcgorICogdGhpcyBkZXZpY2Ugd2lsbCBwcm9kdWNlIG91dHB1dC4KKyAqLwordm9pZCBpbnB1dF9tdF9yZXBvcnRfcG9pbnRlcl9lbXVsYXRpb24oc3RydWN0IGlucHV0X2RldiAqZGV2LCBib29sIHVzZV9jb3VudCkKK3sKKwlzdHJ1Y3QgaW5wdXRfbXRfc2xvdCAqb2xkZXN0ID0gMDsKKwlpbnQgb2xkaWQgPSBkZXYtPnRya2lkOworCWludCBjb3VudCA9IDA7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5tdHNpemU7ICsraSkgeworCQlzdHJ1Y3QgaW5wdXRfbXRfc2xvdCAqcHMgPSAmZGV2LT5tdFtpXTsKKwkJaW50IGlkID0gaW5wdXRfbXRfZ2V0X3ZhbHVlKHBzLCBBQlNfTVRfVFJBQ0tJTkdfSUQpOworCisJCWlmIChpZCA8IDApCisJCQljb250aW51ZTsKKwkJaWYgKChpZCAtIG9sZGlkKSAmIFRSS0lEX1NHTikgeworCQkJb2xkZXN0ID0gcHM7CisJCQlvbGRpZCA9IGlkOworCQl9CisJCWNvdW50Kys7CisJfQorCisJaW5wdXRfZXZlbnQoZGV2LCBFVl9LRVksIEJUTl9UT1VDSCwgY291bnQgPiAwKTsKKwlpZiAodXNlX2NvdW50KQorCQlpbnB1dF9tdF9yZXBvcnRfZmluZ2VyX2NvdW50KGRldiwgY291bnQpOworCisJaWYgKG9sZGVzdCkgeworCQlpbnQgeCA9IGlucHV0X210X2dldF92YWx1ZShvbGRlc3QsIEFCU19NVF9QT1NJVElPTl9YKTsKKwkJaW50IHkgPSBpbnB1dF9tdF9nZXRfdmFsdWUob2xkZXN0LCBBQlNfTVRfUE9TSVRJT05fWSk7CisJCWludCBwID0gaW5wdXRfbXRfZ2V0X3ZhbHVlKG9sZGVzdCwgQUJTX01UX1BSRVNTVVJFKTsKKworCQlpbnB1dF9ldmVudChkZXYsIEVWX0FCUywgQUJTX1gsIHgpOworCQlpbnB1dF9ldmVudChkZXYsIEVWX0FCUywgQUJTX1ksIHkpOworCQlpbnB1dF9ldmVudChkZXYsIEVWX0FCUywgQUJTX1BSRVNTVVJFLCBwKTsKKwl9IGVsc2UgeworCQlpbnB1dF9ldmVudChkZXYsIEVWX0FCUywgQUJTX1BSRVNTVVJFLCAwKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKGlucHV0X210X3JlcG9ydF9wb2ludGVyX2VtdWxhdGlvbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2lucHV0LXBvbGxkZXYuYyBiL2RyaXZlcnMvaW5wdXQvaW5wdXQtcG9sbGRldi5jCmluZGV4IDEwYzliMGEuLjA1NTllMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvaW5wdXQtcG9sbGRldi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvaW5wdXQtcG9sbGRldi5jCkBAIC04LDYgKzgsOCBAQAogICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CkBAIC0zMyw4ICszNSw3IEBACiAJaWYgKCFwb2xsZGV2X3VzZXJzKSB7CiAJCXBvbGxkZXZfd3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgiaXBvbGxkZXZkIik7CiAJCWlmICghcG9sbGRldl93cSkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJpbnB1dC1wb2xsZGV2OiBmYWlsZWQgdG8gY3JlYXRlICIKLQkJCQkiaXBvbGxkZXZkIHdvcmtxdWV1ZVxuIik7CisJCQlwcl9lcnIoImZhaWxlZCB0byBjcmVhdGUgaXBvbGxkZXZkIHdvcmtxdWV1ZVxuIik7CiAJCQlyZXR2YWwgPSAtRU5PTUVNOwogCQkJZ290byBvdXQ7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvaW5wdXQuYyBiL2RyaXZlcnMvaW5wdXQvaW5wdXQuYwppbmRleCBkYjQwOWQ2Li43OTg1MTE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2lucHV0LmMKKysrIGIvZHJpdmVycy9pbnB1dC9pbnB1dC5jCkBAIC0xMCw5ICsxMCwxMSBAQAogICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9CQVNFTkFNRSAiOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC9tdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KQEAgLTk1OCwxMCArOTYwLDggQEAKIAogCWVycm9yID0gaGFuZGxlci0+Y29ubmVjdChoYW5kbGVyLCBkZXYsIGlkKTsKIAlpZiAoZXJyb3IgJiYgZXJyb3IgIT0gLUVOT0RFVikKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkiaW5wdXQ6IGZhaWxlZCB0byBhdHRhY2ggaGFuZGxlciAlcyB0byBkZXZpY2UgJXMsICIKLQkJCSJlcnJvcjogJWRcbiIsCi0JCQloYW5kbGVyLT5uYW1lLCBrb2JqZWN0X25hbWUoJmRldi0+ZGV2LmtvYmopLCBlcnJvcik7CisJCXByX2VycigiZmFpbGVkIHRvIGF0dGFjaCBoYW5kbGVyICVzIHRvIGRldmljZSAlcywgZXJyb3I6ICVkXG4iLAorCQkgICAgICAgaGFuZGxlci0+bmFtZSwga29iamVjdF9uYW1lKCZkZXYtPmRldi5rb2JqKSwgZXJyb3IpOwogCiAJcmV0dXJuIGVycm9yOwogfQpAQCAtMTEwOSw2ICsxMTA5LDggQEAKIAkJc2VxX3ByaW50ZihzZXEsICIlcyAiLCBoYW5kbGUtPm5hbWUpOwogCXNlcV9wdXRjKHNlcSwgJ1xuJyk7CiAKKwlpbnB1dF9zZXFfcHJpbnRfYml0bWFwKHNlcSwgIlBST1AiLCBkZXYtPnByb3BiaXQsIElOUFVUX1BST1BfTUFYKTsKKwogCWlucHV0X3NlcV9wcmludF9iaXRtYXAoc2VxLCAiRVYiLCBkZXYtPmV2Yml0LCBFVl9NQVgpOwogCWlmICh0ZXN0X2JpdChFVl9LRVksIGRldi0+ZXZiaXQpKQogCQlpbnB1dF9zZXFfcHJpbnRfYml0bWFwKHNlcSwgIktFWSIsIGRldi0+a2V5Yml0LCBLRVlfTUFYKTsKQEAgLTEzMzIsMTEgKzEzMzQsMjYgQEAKIH0KIHN0YXRpYyBERVZJQ0VfQVRUUihtb2RhbGlhcywgU19JUlVHTywgaW5wdXRfZGV2X3Nob3dfbW9kYWxpYXMsIE5VTEwpOwogCitzdGF0aWMgaW50IGlucHV0X3ByaW50X2JpdG1hcChjaGFyICpidWYsIGludCBidWZfc2l6ZSwgdW5zaWduZWQgbG9uZyAqYml0bWFwLAorCQkJICAgICAgaW50IG1heCwgaW50IGFkZF9jcik7CisKK3N0YXRpYyBzc2l6ZV90IGlucHV0X2Rldl9zaG93X3Byb3BlcnRpZXMoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCSBjaGFyICpidWYpCit7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2ID0gdG9faW5wdXRfZGV2KGRldik7CisJaW50IGxlbiA9IGlucHV0X3ByaW50X2JpdG1hcChidWYsIFBBR0VfU0laRSwgaW5wdXRfZGV2LT5wcm9wYml0LAorCQkJCSAgICAgSU5QVVRfUFJPUF9NQVgsIHRydWUpOworCXJldHVybiBtaW5fdChpbnQsIGxlbiwgUEFHRV9TSVpFKTsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUihwcm9wZXJ0aWVzLCBTX0lSVUdPLCBpbnB1dF9kZXZfc2hvd19wcm9wZXJ0aWVzLCBOVUxMKTsKKwogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmlucHV0X2Rldl9hdHRyc1tdID0gewogCSZkZXZfYXR0cl9uYW1lLmF0dHIsCiAJJmRldl9hdHRyX3BoeXMuYXR0ciwKIAkmZGV2X2F0dHJfdW5pcS5hdHRyLAogCSZkZXZfYXR0cl9tb2RhbGlhcy5hdHRyLAorCSZkZXZfYXR0cl9wcm9wZXJ0aWVzLmF0dHIsCiAJTlVMTAogfTsKIApAQCAtMTQ3MCw3ICsxNDg3LDcgQEAKIHsKIAlpbnQgbGVuOwogCi0JaWYgKGFkZF91ZXZlbnRfdmFyKGVudiwgIiVzPSIsIG5hbWUpKQorCWlmIChhZGRfdWV2ZW50X3ZhcihlbnYsICIlcyIsIG5hbWUpKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCWxlbiA9IGlucHV0X3ByaW50X2JpdG1hcCgmZW52LT5idWZbZW52LT5idWZsZW4gLSAxXSwKQEAgLTE1MzYsNiArMTU1Myw4IEBACiAJaWYgKGRldi0+dW5pcSkKIAkJSU5QVVRfQUREX0hPVFBMVUdfVkFSKCJVTklRPVwiJXNcIiIsIGRldi0+dW5pcSk7CiAKKwlJTlBVVF9BRERfSE9UUExVR19CTV9WQVIoIlBST1A9IiwgZGV2LT5wcm9wYml0LCBJTlBVVF9QUk9QX01BWCk7CisKIAlJTlBVVF9BRERfSE9UUExVR19CTV9WQVIoIkVWPSIsIGRldi0+ZXZiaXQsIEVWX01BWCk7CiAJaWYgKHRlc3RfYml0KEVWX0tFWSwgZGV2LT5ldmJpdCkpCiAJCUlOUFVUX0FERF9IT1RQTFVHX0JNX1ZBUigiS0VZPSIsIGRldi0+a2V5Yml0LCBLRVlfTUFYKTsKQEAgLTE3MjUsNTIgKzE3NDQsNiBAQAogRVhQT1JUX1NZTUJPTChpbnB1dF9mcmVlX2RldmljZSk7CiAKIC8qKgotICogaW5wdXRfbXRfY3JlYXRlX3Nsb3RzKCkgLSBjcmVhdGUgTVQgaW5wdXQgc2xvdHMKLSAqIEBkZXY6IGlucHV0IGRldmljZSBzdXBwb3J0aW5nIE1UIGV2ZW50cyBhbmQgZmluZ2VyIHRyYWNraW5nCi0gKiBAbnVtX3Nsb3RzOiBudW1iZXIgb2Ygc2xvdHMgdXNlZCBieSB0aGUgZGV2aWNlCi0gKgotICogVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgYWxsIG5lY2Vzc2FyeSBtZW1vcnkgZm9yIE1UIHNsb3QgaGFuZGxpbmcgaW4gdGhlCi0gKiBpbnB1dCBkZXZpY2UsIGFuZCBhZGRzIEFCU19NVF9TTE9UIHRvIHRoZSBkZXZpY2UgY2FwYWJpbGl0aWVzLiBBbGwgc2xvdHMKLSAqIGFyZSBpbml0aWFsbHkgbWFya2VkIGFzIHVudXNlZCBieSBzZXR0aW5nIEFCU19NVF9UUkFDS0lOR19JRCB0byAtMS4KLSAqLwotaW50IGlucHV0X210X2NyZWF0ZV9zbG90cyhzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIHVuc2lnbmVkIGludCBudW1fc2xvdHMpCi17Ci0JaW50IGk7Ci0KLQlpZiAoIW51bV9zbG90cykKLQkJcmV0dXJuIDA7Ci0KLQlkZXYtPm10ID0ga2NhbGxvYyhudW1fc2xvdHMsIHNpemVvZihzdHJ1Y3QgaW5wdXRfbXRfc2xvdCksIEdGUF9LRVJORUwpOwotCWlmICghZGV2LT5tdCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlkZXYtPm10c2l6ZSA9IG51bV9zbG90czsKLQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhkZXYsIEFCU19NVF9TTE9ULCAwLCBudW1fc2xvdHMgLSAxLCAwLCAwKTsKLQotCS8qIE1hcmsgc2xvdHMgYXMgJ3VudXNlZCcgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbnVtX3Nsb3RzOyBpKyspCi0JCWRldi0+bXRbaV0uYWJzW0FCU19NVF9UUkFDS0lOR19JRCAtIEFCU19NVF9GSVJTVF0gPSAtMTsKLQotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTChpbnB1dF9tdF9jcmVhdGVfc2xvdHMpOwotCi0vKioKLSAqIGlucHV0X210X2Rlc3Ryb3lfc2xvdHMoKSAtIGZyZWVzIHRoZSBNVCBzbG90cyBvZiB0aGUgaW5wdXQgZGV2aWNlCi0gKiBAZGV2OiBpbnB1dCBkZXZpY2Ugd2l0aCBhbGxvY2F0ZWQgTVQgc2xvdHMKLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgbmVlZGVkIGluIGVycm9yIHBhdGggYXMgdGhlIGlucHV0IGNvcmUgd2lsbAotICogYXV0b21hdGljYWxseSBmcmVlIHRoZSBNVCBzbG90cyB3aGVuIHRoZSBkZXZpY2UgaXMgZGVzdHJveWVkLgotICovCi12b2lkIGlucHV0X210X2Rlc3Ryb3lfc2xvdHMoc3RydWN0IGlucHV0X2RldiAqZGV2KQotewotCWtmcmVlKGRldi0+bXQpOwotCWRldi0+bXQgPSBOVUxMOwotCWRldi0+bXRzaXplID0gMDsKLX0KLUVYUE9SVF9TWU1CT0woaW5wdXRfbXRfZGVzdHJveV9zbG90cyk7Ci0KLS8qKgogICogaW5wdXRfc2V0X2NhcGFiaWxpdHkgLSBtYXJrIGRldmljZSBhcyBjYXBhYmxlIG9mIGEgY2VydGFpbiBldmVudAogICogQGRldjogZGV2aWNlIHRoYXQgaXMgY2FwYWJsZSBvZiBlbWl0dGluZyBvciBhY2NlcHRpbmcgZXZlbnQKICAqIEB0eXBlOiB0eXBlIG9mIHRoZSBldmVudCAoRVZfS0VZLCBFVl9SRUwsIGV0Yy4uLikKQEAgLTE4MTksOSArMTc5Miw4IEBACiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkiaW5wdXRfc2V0X2NhcGFiaWxpdHk6IHVua25vd24gdHlwZSAldSAoY29kZSAldSlcbiIsCi0JCQl0eXBlLCBjb2RlKTsKKwkJcHJfZXJyKCJpbnB1dF9zZXRfY2FwYWJpbGl0eTogdW5rbm93biB0eXBlICV1IChjb2RlICV1KVxuIiwKKwkJICAgICAgIHR5cGUsIGNvZGUpOwogCQlkdW1wX3N0YWNrKCk7CiAJCXJldHVybjsKIAl9CkBAIC0xOTAzLDggKzE4NzUsOSBAQAogCQlyZXR1cm4gZXJyb3I7CiAKIAlwYXRoID0ga29iamVjdF9nZXRfcGF0aCgmZGV2LT5kZXYua29iaiwgR0ZQX0tFUk5FTCk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiaW5wdXQ6ICVzIGFzICVzXG4iLAotCQlkZXYtPm5hbWUgPyBkZXYtPm5hbWUgOiAiVW5zcGVjaWZpZWQgZGV2aWNlIiwgcGF0aCA/IHBhdGggOiAiTi9BIik7CisJcHJfaW5mbygiJXMgYXMgJXNcbiIsCisJCWRldi0+bmFtZSA/IGRldi0+bmFtZSA6ICJVbnNwZWNpZmllZCBkZXZpY2UiLAorCQlwYXRoID8gcGF0aCA6ICJOL0EiKTsKIAlrZnJlZShwYXRoKTsKIAogCWVycm9yID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZpbnB1dF9tdXRleCk7CkBAIC0yMTg2LDcgKzIxNTksNyBAQAogCiAJZXJyID0gY2xhc3NfcmVnaXN0ZXIoJmlucHV0X2NsYXNzKTsKIAlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiaW5wdXQ6IHVuYWJsZSB0byByZWdpc3RlciBpbnB1dF9kZXYgY2xhc3NcbiIpOworCQlwcl9lcnIoInVuYWJsZSB0byByZWdpc3RlciBpbnB1dF9kZXYgY2xhc3NcbiIpOwogCQlyZXR1cm4gZXJyOwogCX0KIApAQCAtMjE5Niw3ICsyMTY5LDcgQEAKIAogCWVyciA9IHJlZ2lzdGVyX2NocmRldihJTlBVVF9NQUpPUiwgImlucHV0IiwgJmlucHV0X2ZvcHMpOwogCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJpbnB1dDogdW5hYmxlIHRvIHJlZ2lzdGVyIGNoYXIgbWFqb3IgJWQiLCBJTlBVVF9NQUpPUik7CisJCXByX2VycigidW5hYmxlIHRvIHJlZ2lzdGVyIGNoYXIgbWFqb3IgJWQiLCBJTlBVVF9NQUpPUik7CiAJCWdvdG8gZmFpbDI7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveWRldi5jIGIvZHJpdmVycy9pbnB1dC9qb3lkZXYuYwppbmRleCA5ZDQyNGNlYi4uMzE4MmM5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lkZXYuYworKysgYi9kcml2ZXJzL2lucHV0L2pveWRldi5jCkBAIC0xMCw2ICsxMCw4IEBACiAgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKwogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgpAQCAtODA2LDcgKzgwOCw3IEBACiAJCQlicmVhazsKIAogCWlmIChtaW5vciA9PSBKT1lERVZfTUlOT1JTKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiam95ZGV2OiBubyBtb3JlIGZyZWUgam95ZGV2IGRldmljZXNcbiIpOworCQlwcl9lcnIoIm5vIG1vcmUgZnJlZSBqb3lkZXYgZGV2aWNlc1xuIik7CiAJCXJldHVybiAtRU5GSUxFOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9pZm9yY2UvTWFrZWZpbGUgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9NYWtlZmlsZQppbmRleCA3NGRhZmY0Li5iYzViZGEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9NYWtlZmlsZQpAQCAtNCwxNyArNCw4IEBACiAjIEJ5IEpvaGFubiBEZW5ldXggPGpvaGFubi5kZW5ldXhAZ21haWwuY29tPgogIwogCi0jIEdvYWwgZGVmaW5pdGlvbgotaWZvcmNlLW9ianMJOj0gaWZvcmNlLWZmLm8gaWZvcmNlLW1haW4ubyBpZm9yY2UtcGFja2V0cy5vCi0KIG9iai0kKENPTkZJR19KT1lTVElDS19JRk9SQ0UpCSs9IGlmb3JjZS5vCiAKLWlmZXEgKCQoQ09ORklHX0pPWVNUSUNLX0lGT1JDRV8yMzIpLHkpCi0JaWZvcmNlLW9ianMgKz0gaWZvcmNlLXNlcmlvLm8KLWVuZGlmCi0KLWlmZXEgKCQoQ09ORklHX0pPWVNUSUNLX0lGT1JDRV9VU0IpLHkpCi0JaWZvcmNlLW9ianMgKz0gaWZvcmNlLXVzYi5vCi1lbmRpZgotCi1FWFRSQV9DRkxBR1MgPSAtV2Vycm9yLWltcGxpY2l0LWZ1bmN0aW9uLWRlY2xhcmF0aW9uCitpZm9yY2UteSA6PSBpZm9yY2UtZmYubyBpZm9yY2UtbWFpbi5vIGlmb3JjZS1wYWNrZXRzLm8KK2lmb3JjZS0kKENPTkZJR19KT1lTVElDS19JRk9SQ0VfMjMyKQkrPSBpZm9yY2Utc2VyaW8ubworaWZvcmNlLSQoQ09ORklHX0pPWVNUSUNLX0lGT1JDRV9VU0IpCSs9IGlmb3JjZS11c2IubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay94cGFkLmMgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3hwYWQuYwppbmRleCBmOWZiN2ZhLi41NmFiZjNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3hwYWQuYworKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3hwYWQuYwpAQCAtNTQzLDIxICs1NDMsMjUgQEAKIHN0YXRpYyBpbnQgeHBhZF9pbml0X291dHB1dChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Ziwgc3RydWN0IHVzYl94cGFkICp4cGFkKQogewogCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBfaXJxX291dDsKLQlpbnQgZXJyb3IgPSAtRU5PTUVNOworCWludCBlcnJvcjsKIAogCWlmICh4cGFkLT54dHlwZSAhPSBYVFlQRV9YQk9YMzYwICYmIHhwYWQtPnh0eXBlICE9IFhUWVBFX1hCT1gpCiAJCXJldHVybiAwOwogCiAJeHBhZC0+b2RhdGEgPSB1c2JfYWxsb2NfY29oZXJlbnQoeHBhZC0+dWRldiwgWFBBRF9QS1RfTEVOLAogCQkJCQkgR0ZQX0tFUk5FTCwgJnhwYWQtPm9kYXRhX2RtYSk7Ci0JaWYgKCF4cGFkLT5vZGF0YSkKKwlpZiAoIXhwYWQtPm9kYXRhKSB7CisJCWVycm9yID0gLUVOT01FTTsKIAkJZ290byBmYWlsMTsKKwl9CiAKIAltdXRleF9pbml0KCZ4cGFkLT5vZGF0YV9tdXRleCk7CiAKIAl4cGFkLT5pcnFfb3V0ID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXhwYWQtPmlycV9vdXQpCisJaWYgKCF4cGFkLT5pcnFfb3V0KSB7CisJCWVycm9yID0gLUVOT01FTTsKIAkJZ290byBmYWlsMjsKKwl9CiAKIAllcF9pcnFfb3V0ID0gJmludGYtPmN1cl9hbHRzZXR0aW5nLT5lbmRwb2ludFsxXS5kZXNjOwogCXVzYl9maWxsX2ludF91cmIoeHBhZC0+aXJxX291dCwgeHBhZC0+dWRldiwKQEAgLTcyOCw3ICs3MzIsNyBAQAogCiAJaWYgKHhwYWRfbGVkKSB7CiAJCWxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKCZ4cGFkX2xlZC0+bGVkX2NkZXYpOwotCQlrZnJlZSh4cGFkX2xlZC0+bmFtZSk7CisJCWtmcmVlKHhwYWRfbGVkKTsKIAl9CiB9CiAjZWxzZQpAQCAtNzU2LDggKzc2MCw5IEBACiB7CiAJc3RydWN0IHVzYl94cGFkICp4cGFkID0gaW5wdXRfZ2V0X2RydmRhdGEoZGV2KTsKIAotCWlmKHhwYWQtPnh0eXBlICE9IFhUWVBFX1hCT1gzNjBXKQorCWlmICh4cGFkLT54dHlwZSAhPSBYVFlQRV9YQk9YMzYwVykKIAkJdXNiX2tpbGxfdXJiKHhwYWQtPmlycV9pbik7CisKIAl4cGFkX3N0b3Bfb3V0cHV0KHhwYWQpOwogfQogCkBAIC03ODksOCArNzk0LDcgQEAKIAlzdHJ1Y3QgdXNiX3hwYWQgKnhwYWQ7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OwogCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBfaXJxX2luOwotCWludCBpOwotCWludCBlcnJvciA9IC1FTk9NRU07CisJaW50IGksIGVycm9yOwogCiAJZm9yIChpID0gMDsgeHBhZF9kZXZpY2VbaV0uaWRWZW5kb3I7IGkrKykgewogCQlpZiAoKGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpID09IHhwYWRfZGV2aWNlW2ldLmlkVmVuZG9yKSAmJgpAQCAtODAwLDE3ICs4MDQsMjMgQEAKIAogCXhwYWQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdXNiX3hwYWQpLCBHRlBfS0VSTkVMKTsKIAlpbnB1dF9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKLQlpZiAoIXhwYWQgfHwgIWlucHV0X2RldikKKwlpZiAoIXhwYWQgfHwgIWlucHV0X2RldikgeworCQllcnJvciA9IC1FTk9NRU07CiAJCWdvdG8gZmFpbDE7CisJfQogCiAJeHBhZC0+aWRhdGEgPSB1c2JfYWxsb2NfY29oZXJlbnQodWRldiwgWFBBRF9QS1RfTEVOLAogCQkJCQkgR0ZQX0tFUk5FTCwgJnhwYWQtPmlkYXRhX2RtYSk7Ci0JaWYgKCF4cGFkLT5pZGF0YSkKKwlpZiAoIXhwYWQtPmlkYXRhKSB7CisJCWVycm9yID0gLUVOT01FTTsKIAkJZ290byBmYWlsMTsKKwl9CiAKIAl4cGFkLT5pcnFfaW4gPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOwotCWlmICgheHBhZC0+aXJxX2luKQorCWlmICgheHBhZC0+aXJxX2luKSB7CisJCWVycm9yID0gLUVOT01FTTsKIAkJZ290byBmYWlsMjsKKwl9CiAKIAl4cGFkLT51ZGV2ID0gdWRldjsKIAl4cGFkLT5tYXBwaW5nID0geHBhZF9kZXZpY2VbaV0ubWFwcGluZzsKQEAgLTg4NywxNSArODk3LDE1IEBACiAKIAllcnJvciA9IHhwYWRfaW5pdF9vdXRwdXQoaW50ZiwgeHBhZCk7CiAJaWYgKGVycm9yKQotCQlnb3RvIGZhaWwyOworCQlnb3RvIGZhaWwzOwogCiAJZXJyb3IgPSB4cGFkX2luaXRfZmYoeHBhZCk7CiAJaWYgKGVycm9yKQotCQlnb3RvIGZhaWwzOworCQlnb3RvIGZhaWw0OwogCiAJZXJyb3IgPSB4cGFkX2xlZF9wcm9iZSh4cGFkKTsKIAlpZiAoZXJyb3IpCi0JCWdvdG8gZmFpbDM7CisJCWdvdG8gZmFpbDU7CiAKIAllcF9pcnFfaW4gPSAmaW50Zi0+Y3VyX2FsdHNldHRpbmctPmVuZHBvaW50WzBdLmRlc2M7CiAJdXNiX2ZpbGxfaW50X3VyYih4cGFkLT5pcnFfaW4sIHVkZXYsCkBAIC05MDcsMzQgKzkxNywyNiBAQAogCiAJZXJyb3IgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoeHBhZC0+ZGV2KTsKIAlpZiAoZXJyb3IpCi0JCWdvdG8gZmFpbDQ7CisJCWdvdG8gZmFpbDY7CiAKIAl1c2Jfc2V0X2ludGZkYXRhKGludGYsIHhwYWQpOwogCi0JLyoKLQkgKiBTdWJtaXQgdGhlIGludCBVUkIgaW1tZWRpYXRseSByYXRoZXIgdGhhbiB3YWl0aW5nIGZvciBvcGVuCi0JICogYmVjYXVzZSB3ZSBnZXQgc3RhdHVzIG1lc3NhZ2VzIGZyb20gdGhlIGRldmljZSB3aGV0aGVyCi0JICogb3Igbm90IGFueSBjb250cm9sbGVycyBhcmUgYXR0YWNoZWQuICBJbiBmYWN0LCBpdCdzCi0JICogZXhhY3RseSB0aGUgbWVzc2FnZSB0aGF0IGEgY29udHJvbGxlciBoYXMgYXJyaXZlZCB0aGF0Ci0JICogd2UncmUgd2FpdGluZyBmb3IuCi0JICovCiAJaWYgKHhwYWQtPnh0eXBlID09IFhUWVBFX1hCT1gzNjBXKSB7Ci0JCXhwYWQtPmlycV9pbi0+ZGV2ID0geHBhZC0+dWRldjsKLQkJZXJyb3IgPSB1c2Jfc3VibWl0X3VyYih4cGFkLT5pcnFfaW4sIEdGUF9LRVJORUwpOwotCQlpZiAoZXJyb3IpCi0JCQlnb3RvIGZhaWw0OwotCiAJCS8qCiAJCSAqIFNldHVwIHRoZSBtZXNzYWdlIHRvIHNldCB0aGUgTEVEcyBvbiB0aGUKIAkJICogY29udHJvbGxlciB3aGVuIGl0IHNob3dzIHVwCiAJCSAqLwogCQl4cGFkLT5idWxrX291dCA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7Ci0JCWlmKCF4cGFkLT5idWxrX291dCkKLQkJCWdvdG8gZmFpbDU7CisJCWlmICgheHBhZC0+YnVsa19vdXQpIHsKKwkJCWVycm9yID0gLUVOT01FTTsKKwkJCWdvdG8gZmFpbDc7CisJCX0KIAogCQl4cGFkLT5iZGF0YSA9IGt6YWxsb2MoWFBBRF9QS1RfTEVOLCBHRlBfS0VSTkVMKTsKLQkJaWYoIXhwYWQtPmJkYXRhKQotCQkJZ290byBmYWlsNjsKKwkJaWYgKCF4cGFkLT5iZGF0YSkgeworCQkJZXJyb3IgPSAtRU5PTUVNOworCQkJZ290byBmYWlsODsKKwkJfQogCiAJCXhwYWQtPmJkYXRhWzJdID0gMHgwODsKIAkJc3dpdGNoIChpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyKSB7CkBAIC05NTUsMTQgKzk1NywzMSBAQAogCQl1c2JfZmlsbF9idWxrX3VyYih4cGFkLT5idWxrX291dCwgdWRldiwKIAkJCQl1c2Jfc25kYnVsa3BpcGUodWRldiwgZXBfaXJxX2luLT5iRW5kcG9pbnRBZGRyZXNzKSwKIAkJCQl4cGFkLT5iZGF0YSwgWFBBRF9QS1RfTEVOLCB4cGFkX2J1bGtfb3V0LCB4cGFkKTsKKworCQkvKgorCQkgKiBTdWJtaXQgdGhlIGludCBVUkIgaW1tZWRpYXRlbHkgcmF0aGVyIHRoYW4gd2FpdGluZyBmb3Igb3BlbgorCQkgKiBiZWNhdXNlIHdlIGdldCBzdGF0dXMgbWVzc2FnZXMgZnJvbSB0aGUgZGV2aWNlIHdoZXRoZXIKKwkJICogb3Igbm90IGFueSBjb250cm9sbGVycyBhcmUgYXR0YWNoZWQuICBJbiBmYWN0LCBpdCdzCisJCSAqIGV4YWN0bHkgdGhlIG1lc3NhZ2UgdGhhdCBhIGNvbnRyb2xsZXIgaGFzIGFycml2ZWQgdGhhdAorCQkgKiB3ZSdyZSB3YWl0aW5nIGZvci4KKwkJICovCisJCXhwYWQtPmlycV9pbi0+ZGV2ID0geHBhZC0+dWRldjsKKwkJZXJyb3IgPSB1c2Jfc3VibWl0X3VyYih4cGFkLT5pcnFfaW4sIEdGUF9LRVJORUwpOworCQlpZiAoZXJyb3IpCisJCQlnb3RvIGZhaWw5OwogCX0KIAogCXJldHVybiAwOwogCi0gZmFpbDY6CXVzYl9mcmVlX3VyYih4cGFkLT5idWxrX291dCk7Ci0gZmFpbDU6CXVzYl9raWxsX3VyYih4cGFkLT5pcnFfaW4pOwotIGZhaWw0Ogl1c2JfZnJlZV91cmIoeHBhZC0+aXJxX2luKTsKLSBmYWlsMzoJeHBhZF9kZWluaXRfb3V0cHV0KHhwYWQpOworIGZhaWw5OglrZnJlZSh4cGFkLT5iZGF0YSk7CisgZmFpbDg6CXVzYl9mcmVlX3VyYih4cGFkLT5idWxrX291dCk7CisgZmFpbDc6CWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGlucHV0X2Rldik7CisJaW5wdXRfZGV2ID0gTlVMTDsKKyBmYWlsNjoJeHBhZF9sZWRfZGlzY29ubmVjdCh4cGFkKTsKKyBmYWlsNToJaWYgKGlucHV0X2RldikKKwkJaW5wdXRfZmZfZGVzdHJveShpbnB1dF9kZXYpOworIGZhaWw0Ogl4cGFkX2RlaW5pdF9vdXRwdXQoeHBhZCk7CisgZmFpbDM6CXVzYl9mcmVlX3VyYih4cGFkLT5pcnFfaW4pOwogIGZhaWwyOgl1c2JfZnJlZV9jb2hlcmVudCh1ZGV2LCBYUEFEX1BLVF9MRU4sIHhwYWQtPmlkYXRhLCB4cGFkLT5pZGF0YV9kbWEpOwogIGZhaWwxOglpbnB1dF9mcmVlX2RldmljZShpbnB1dF9kZXYpOwogCWtmcmVlKHhwYWQpOwpAQCAtOTc0LDIxICs5OTMsMjQgQEAKIHsKIAlzdHJ1Y3QgdXNiX3hwYWQgKnhwYWQgPSB1c2JfZ2V0X2ludGZkYXRhIChpbnRmKTsKIAotCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7Ci0JaWYgKHhwYWQpIHsKLQkJeHBhZF9sZWRfZGlzY29ubmVjdCh4cGFkKTsKLQkJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoeHBhZC0+ZGV2KTsKLQkJeHBhZF9kZWluaXRfb3V0cHV0KHhwYWQpOwotCQlpZiAoeHBhZC0+eHR5cGUgPT0gWFRZUEVfWEJPWDM2MFcpIHsKLQkJCXVzYl9raWxsX3VyYih4cGFkLT5idWxrX291dCk7Ci0JCQl1c2JfZnJlZV91cmIoeHBhZC0+YnVsa19vdXQpOwotCQkJdXNiX2tpbGxfdXJiKHhwYWQtPmlycV9pbik7Ci0JCX0KLQkJdXNiX2ZyZWVfdXJiKHhwYWQtPmlycV9pbik7Ci0JCXVzYl9mcmVlX2NvaGVyZW50KHhwYWQtPnVkZXYsIFhQQURfUEtUX0xFTiwKLQkJCQl4cGFkLT5pZGF0YSwgeHBhZC0+aWRhdGFfZG1hKTsKLQkJa2ZyZWUoeHBhZCk7CisJeHBhZF9sZWRfZGlzY29ubmVjdCh4cGFkKTsKKwlpbnB1dF91bnJlZ2lzdGVyX2RldmljZSh4cGFkLT5kZXYpOworCXhwYWRfZGVpbml0X291dHB1dCh4cGFkKTsKKworCWlmICh4cGFkLT54dHlwZSA9PSBYVFlQRV9YQk9YMzYwVykgeworCQl1c2Jfa2lsbF91cmIoeHBhZC0+YnVsa19vdXQpOworCQl1c2JfZnJlZV91cmIoeHBhZC0+YnVsa19vdXQpOworCQl1c2Jfa2lsbF91cmIoeHBhZC0+aXJxX2luKTsKIAl9CisKKwl1c2JfZnJlZV91cmIoeHBhZC0+aXJxX2luKTsKKwl1c2JfZnJlZV9jb2hlcmVudCh4cGFkLT51ZGV2LCBYUEFEX1BLVF9MRU4sCisJCQl4cGFkLT5pZGF0YSwgeHBhZC0+aWRhdGFfZG1hKTsKKworCWtmcmVlKHhwYWQtPmJkYXRhKTsKKwlrZnJlZSh4cGFkKTsKKworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB4cGFkX2RyaXZlciA9IHsKQEAgLTEwMDAsMTAgKzEwMjIsNyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCB1c2JfeHBhZF9pbml0KHZvaWQpCiB7Ci0JaW50IHJlc3VsdCA9IHVzYl9yZWdpc3RlcigmeHBhZF9kcml2ZXIpOwotCWlmIChyZXN1bHQgPT0gMCkKLQkJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9ERVNDICJcbiIpOwotCXJldHVybiByZXN1bHQ7CisJcmV0dXJuIHVzYl9yZWdpc3RlcigmeHBhZF9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgdXNiX3hwYWRfZXhpdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9LY29uZmlnIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9LY29uZmlnCmluZGV4IDNhODdmM2IuLmY4Mjk5OTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvS2NvbmZpZworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL0tjb25maWcKQEAgLTE5NiwyMCArMTk2LDIyIEBACiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZ3Bpb19rZXlzX3BvbGxlZC4KIAogY29uZmlnIEtFWUJPQVJEX1RDQTY0MTYKLQl0cmlzdGF0ZSAiVENBNjQxNiBLZXlwYWQgU3VwcG9ydCIKKwl0cmlzdGF0ZSAiVENBNjQxNi9UQ0E2NDA4QSBLZXlwYWQgU3VwcG9ydCIKIAlkZXBlbmRzIG9uIEkyQwogCWhlbHAKIAkgIFRoaXMgZHJpdmVyIGltcGxlbWVudHMgYmFzaWMga2V5cGFkIGZ1bmN0aW9uYWxpdHkKLQkgIGZvciBrZXlzIGNvbm5lY3RlZCB0aHJvdWdoIFRDQTY0MTYgSU8gZXhwYW5kZXIKKwkgIGZvciBrZXlzIGNvbm5lY3RlZCB0aHJvdWdoIFRDQTY0MTYvVENBNjQwOEEgSU8gZXhwYW5kZXJzLgogCiAJICBTYXkgWSBoZXJlIGlmIHlvdXIgZGV2aWNlIGhhcyBrZXlzIGNvbm5lY3RlZCB0bwotCSAgVENBNjQxNiBJTyBleHBhbmRlci4gWW91ciBib2FyZC1zcGVjaWZpYyBzZXR1cCBsb2dpYworCSAgVENBNjQxNi9UQ0E2NDA4QSBJTyBleHBhbmRlci4gWW91ciBib2FyZC1zcGVjaWZpYyBzZXR1cCBsb2dpYwogCSAgbXVzdCBhbHNvIHByb3ZpZGUgcGluLW1hc2sgZGV0YWlscyhvZiB3aGljaCBUQ0E2NDE2IHBpbnMKIAkgIGFyZSB1c2VkIGZvciBrZXlwYWQpLgogCi0JICBJZiBlbmFibGVkIHRoZSBjb21wbGV0ZSBUQ0E2NDE2IGRldmljZSB3aWxsIGJlIG1hbmFnZWQgdGhyb3VnaAorCSAgSWYgZW5hYmxlZCB0aGUgZW50aXJlIFRDQTY0MTYgZGV2aWNlIHdpbGwgYmUgbWFuYWdlZCB0aHJvdWdoCiAJICB0aGlzIGRyaXZlci4KIAorCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdGNhNjQxNl9rZXlwYWQuCiAKIGNvbmZpZyBLRVlCT0FSRF9NQVRSSVgKIAl0cmlzdGF0ZSAiR1BJTyBkcml2ZW4gbWF0cml4IGtleXBhZCBzdXBwb3J0IgpAQCAtNDU5LDYgKzQ2MSwyNSBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgb21hcDQta2V5cGFkLgogCitjb25maWcgS0VZQk9BUkRfU1BFQVIKKwl0cmlzdGF0ZSAiU1QgU1BFQVIga2V5Ym9hcmQgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFBMQVRfU1BFQVIKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgU1BFQVIga2V5Ym9hcmQuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNwZWFyLWtlYm9hcmQuCisKK2NvbmZpZyBLRVlCT0FSRF9UQzM1ODlYCisJdHJpc3RhdGUgIlRDMzU4OVggS2V5cGFkIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBNRkRfVEMzNTg5WAorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBrZXlwYWQgY29udHJvbGxlciBvbgorCSAgVEMzNTg5Mi8zIEkvTyBleHBhbmRlci4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdGMzNTg5eC1rZXlwYWQuCisKIGNvbmZpZyBLRVlCT0FSRF9UTkVUVjEwN1gKIAl0cmlzdGF0ZSAiVEkgVE5FVFYxMDdYIGtleXBhZCBzdXBwb3J0IgogCWRlcGVuZHMgb24gQVJDSF9EQVZJTkNJX1RORVRWMTA3WApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9NYWtlZmlsZSBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvTWFrZWZpbGUKaW5kZXggNjIyZGU3My4uODkzM2U5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL01ha2VmaWxlCkBAIC0zOCw5ICszOCwxMSBAQAogb2JqLSQoQ09ORklHX0tFWUJPQVJEX1FUMjE2MCkJCSs9IHF0MjE2MC5vCiBvYmotJChDT05GSUdfS0VZQk9BUkRfU0FNU1VORykJCSs9IHNhbXN1bmcta2V5cGFkLm8KIG9iai0kKENPTkZJR19LRVlCT0FSRF9TSF9LRVlTQykJCSs9IHNoX2tleXNjLm8KK29iai0kKENPTkZJR19LRVlCT0FSRF9TUEVBUikJCSs9IHNwZWFyLWtleWJvYXJkLm8KIG9iai0kKENPTkZJR19LRVlCT0FSRF9TVE1QRSkJCSs9IHN0bXBlLWtleXBhZC5vCiBvYmotJChDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkpCQkrPSBzdG93YXdheS5vCiBvYmotJChDT05GSUdfS0VZQk9BUkRfU1VOS0JEKQkJKz0gc3Vua2JkLm8KK29iai0kKENPTkZJR19LRVlCT0FSRF9UQzM1ODlYKQkJKz0gdGMzNTg5eC1rZXlwYWQubwogb2JqLSQoQ09ORklHX0tFWUJPQVJEX1RORVRWMTA3WCkJKz0gdG5ldHYxMDd4LWtleXBhZC5vCiBvYmotJChDT05GSUdfS0VZQk9BUkRfVFdMNDAzMCkJCSs9IHR3bDQwMzBfa2V5cGFkLm8KIG9iai0kKENPTkZJR19LRVlCT0FSRF9YVEtCRCkJCSs9IHh0a2JkLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvb21hcC1rZXlwYWQuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvb21hcC1rZXlwYWQuYwppbmRleCBhNzJlNjFkLi4wZTJhMTljIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL29tYXAta2V5cGFkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9vbWFwLWtleXBhZC5jCkBAIC02NSw3ICs2NSw2IEBACiAKIHN0YXRpYyBERUNMQVJFX1RBU0tMRVRfRElTQUJMRUQoa3BfdGFza2xldCwgb21hcF9rcF90YXNrbGV0LCAwKTsKIAotc3RhdGljIGludCAqa2V5bWFwOwogc3RhdGljIHVuc2lnbmVkIGludCAqcm93X2dwaW9zOwogc3RhdGljIHVuc2lnbmVkIGludCAqY29sX2dwaW9zOwogCkBAIC0xNjIsMjAgKzE2MSwxMSBAQAogCX0KIH0KIAotc3RhdGljIGlubGluZSBpbnQgb21hcF9rcF9maW5kX2tleShpbnQgY29sLCBpbnQgcm93KQotewotCWludCBpLCBrZXk7Ci0KLQlrZXkgPSBLRVkoY29sLCByb3csIDApOwotCWZvciAoaSA9IDA7IGtleW1hcFtpXSAhPSAwOyBpKyspCi0JCWlmICgoa2V5bWFwW2ldICYgMHhmZjAwMDAwMCkgPT0ga2V5KQotCQkJcmV0dXJuIGtleW1hcFtpXSAmIDB4MDBmZmZmZmY7Ci0JcmV0dXJuIC0xOwotfQotCiBzdGF0aWMgdm9pZCBvbWFwX2twX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0cnVjdCBvbWFwX2twICpvbWFwX2twX2RhdGEgPSAoc3RydWN0IG9tYXBfa3AgKikgZGF0YTsKKwl1bnNpZ25lZCBzaG9ydCAqa2V5Y29kZXMgPSBvbWFwX2twX2RhdGEtPmlucHV0LT5rZXljb2RlOworCXVuc2lnbmVkIGludCByb3dfc2hpZnQgPSBnZXRfY291bnRfb3JkZXIob21hcF9rcF9kYXRhLT5jb2xzKTsKIAl1bnNpZ25lZCBjaGFyIG5ld19zdGF0ZVs4XSwgY2hhbmdlZCwga2V5X2Rvd24gPSAwOwogCWludCBjb2wsIHJvdzsKIAlpbnQgc3B1cmlvdXMgPSAwOwpAQCAtMTk5LDcgKzE4OSw3IEBACiAJCQkgICAgICAgcm93LCAobmV3X3N0YXRlW2NvbF0gJiAoMSA8PCByb3cpKSA/CiAJCQkgICAgICAgInByZXNzZWQiIDogInJlbGVhc2VkIik7CiAjZWxzZQotCQkJa2V5ID0gb21hcF9rcF9maW5kX2tleShjb2wsIHJvdyk7CisJCQlrZXkgPSBrZXljb2Rlc1tNQVRSSVhfU0NBTl9DT0RFKHJvdywgY29sLCByb3dfc2hpZnQpXTsKIAkJCWlmIChrZXkgPCAwKSB7CiAJCQkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkJCSAgICAgICJvbWFwLWtleXBhZDogU3B1cmlvdXMga2V5IGV2ZW50ICVkLSVkXG4iLApAQCAtMjk4LDEzICsyODgsMTggQEAKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7CiAJc3RydWN0IG9tYXBfa3BfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSAgcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJaW50IGksIGNvbF9pZHgsIHJvd19pZHgsIGlycV9pZHgsIHJldDsKKwl1bnNpZ25lZCBpbnQgcm93X3NoaWZ0LCBrZXljb2RlbWF4OwogCi0JaWYgKCFwZGF0YS0+cm93cyB8fCAhcGRhdGEtPmNvbHMgfHwgIXBkYXRhLT5rZXltYXApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJObyByb3dzLCBjb2xzIG9yIGtleW1hcCBmcm9tIHBkYXRhXG4iKTsKKwlpZiAoIXBkYXRhLT5yb3dzIHx8ICFwZGF0YS0+Y29scyB8fCAhcGRhdGEtPmtleW1hcF9kYXRhKSB7CisJCXByaW50ayhLRVJOX0VSUiAiTm8gcm93cywgY29scyBvciBrZXltYXBfZGF0YSBmcm9tIHBkYXRhXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0Jb21hcF9rcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBvbWFwX2twKSwgR0ZQX0tFUk5FTCk7CisJcm93X3NoaWZ0ID0gZ2V0X2NvdW50X29yZGVyKHBkYXRhLT5jb2xzKTsKKwlrZXljb2RlbWF4ID0gcGRhdGEtPnJvd3MgPDwgcm93X3NoaWZ0OworCisJb21hcF9rcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBvbWFwX2twKSArCisJCQlrZXljb2RlbWF4ICogc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSwgR0ZQX0tFUk5FTCk7CiAJaW5wdXRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CiAJaWYgKCFvbWFwX2twIHx8ICFpbnB1dF9kZXYpIHsKIAkJa2ZyZWUob21hcF9rcCk7CkBAIC0zMjAsNyArMzE1LDkgQEAKIAlpZiAoIWNwdV9pc19vbWFwMjR4eCgpKQogCQlvbWFwX3dyaXRldygxLCBPTUFQMV9NUFVJT19CQVNFICsgT01BUF9NUFVJT19LQkRfTUFTS0lUKTsKIAotCWtleW1hcCA9IHBkYXRhLT5rZXltYXA7CisJaW5wdXRfZGV2LT5rZXljb2RlICAgICAgPSAmb21hcF9rcFsxXTsKKwlpbnB1dF9kZXYtPmtleWNvZGVzaXplICA9IHNpemVvZih1bnNpZ25lZCBzaG9ydCk7CisJaW5wdXRfZGV2LT5rZXljb2RlbWF4ICAgPSBrZXljb2RlbWF4OwogCiAJaWYgKHBkYXRhLT5yZXApCiAJCV9fc2V0X2JpdChFVl9SRVAsIGlucHV0X2Rldi0+ZXZiaXQpOwpAQCAtMzc0LDggKzM3MSw4IEBACiAKIAkvKiBzZXR1cCBpbnB1dCBkZXZpY2UgKi8KIAlfX3NldF9iaXQoRVZfS0VZLCBpbnB1dF9kZXYtPmV2Yml0KTsKLQlmb3IgKGkgPSAwOyBrZXltYXBbaV0gIT0gMDsgaSsrKQotCQlfX3NldF9iaXQoa2V5bWFwW2ldICYgS0VZX01BWCwgaW5wdXRfZGV2LT5rZXliaXQpOworCW1hdHJpeF9rZXlwYWRfYnVpbGRfa2V5bWFwKHBkYXRhLT5rZXltYXBfZGF0YSwgcm93X3NoaWZ0LAorCQkJaW5wdXRfZGV2LT5rZXljb2RlLCBpbnB1dF9kZXYtPmtleWJpdCk7CiAJaW5wdXRfZGV2LT5uYW1lID0gIm9tYXAta2V5cGFkIjsKIAlpbnB1dF9kZXYtPnBoeXMgPSAib21hcC1rZXlwYWQvaW5wdXQwIjsKIAlpbnB1dF9kZXYtPmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OwpAQCAtNDE2LDcgKzQxMyw3IEBACiAJcmV0dXJuIDA7CiBlcnI1OgogCWZvciAoaSA9IGlycV9pZHggLSAxOyBpID49MDsgaS0tKQotCQlmcmVlX2lycShyb3dfZ3Bpb3NbaV0sIDApOworCQlmcmVlX2lycShyb3dfZ3Bpb3NbaV0sIE5VTEwpOwogZXJyNDoKIAlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShvbWFwX2twLT5pbnB1dCk7CiAJaW5wdXRfZGV2ID0gTlVMTDsKQEAgLTQ0NywxMSArNDQ0LDExIEBACiAJCQlncGlvX2ZyZWUoY29sX2dwaW9zW2ldKTsKIAkJZm9yIChpID0gMDsgaSA8IG9tYXBfa3AtPnJvd3M7IGkrKykgewogCQkJZ3Bpb19mcmVlKHJvd19ncGlvc1tpXSk7Ci0JCQlmcmVlX2lycShncGlvX3RvX2lycShyb3dfZ3Bpb3NbaV0pLCAwKTsKKwkJCWZyZWVfaXJxKGdwaW9fdG9faXJxKHJvd19ncGlvc1tpXSksIE5VTEwpOwogCQl9CiAJfSBlbHNlIHsKIAkJb21hcF93cml0ZXcoMSwgT01BUDFfTVBVSU9fQkFTRSArIE9NQVBfTVBVSU9fS0JEX01BU0tJVCk7Ci0JCWZyZWVfaXJxKG9tYXBfa3AtPmlycSwgMCk7CisJCWZyZWVfaXJxKG9tYXBfa3AtPmlycSwgTlVMTCk7CiAJfQogCiAJZGVsX3RpbWVyX3N5bmMoJm9tYXBfa3AtPnRpbWVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc3BlYXIta2V5Ym9hcmQuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc3BlYXIta2V5Ym9hcmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWUwM2Q2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9zcGVhci1rZXlib2FyZC5jCkBAIC0wLDAgKzEsMzQ0IEBACisvKgorICogU1BFQXIgS2V5Ym9hcmQgRHJpdmVyCisgKiBCYXNlZCBvbiBvbWFwLWtleXBhZCBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgU1QgTWljcm9lbGVjdHJvbmljcworICogUmFqZWV2IEt1bWFyPHJhamVldi1kbGgua3VtYXJAc3QuY29tPgorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wbV93YWtldXAuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxwbGF0L2tleWJvYXJkLmg+CisKKy8qIEtleWJvYXJkIFJlZ2lzdGVycyAqLworI2RlZmluZSBNT0RFX1JFRwkweDAwCS8qIDE2IGJpdCByZWcgKi8KKyNkZWZpbmUgU1RBVFVTX1JFRwkweDBDCS8qIDIgYml0IHJlZyAqLworI2RlZmluZSBEQVRBX1JFRwkweDEwCS8qIDggYml0IHJlZyAqLworI2RlZmluZSBJTlRSX01BU0sJMHg1NAorCisvKiBSZWdpc3RlciBWYWx1ZXMgKi8KKy8qCisgKiBwY2xrIGZyZXEgbWFzayA9IChBUEIgRkVRIC0xKT0gODIgTUhaLlByb2dyYW1tZSBiaXQgMTUtOSBpbiBtb2RlCisgKiBjb250cm9sIHJlZ2lzdGVyIGFzIDEwMTAwMTAoODJNSFopCisgKi8KKyNkZWZpbmUgUENMS19GUkVRX01TSwkweEE0MDAJLyogODIgTUh6ICovCisjZGVmaW5lIFNUQVJUX1NDQU4JMHgwMTAwCisjZGVmaW5lIFNDQU5fUkFURV8xMAkweDAwMDAKKyNkZWZpbmUgU0NBTl9SQVRFXzIwCTB4MDAwNAorI2RlZmluZSBTQ0FOX1JBVEVfNDAJMHgwMDA4CisjZGVmaW5lIFNDQU5fUkFURV84MAkweDAwMEMKKyNkZWZpbmUgTU9ERV9LRVlCT0FSRAkweDAwMDIKKyNkZWZpbmUgREFUQV9BVkFJTAkweDIKKworI2RlZmluZSBLRVlfTUFTSwkweEZGMDAwMDAwCisjZGVmaW5lIEtFWV9WQUxVRQkweDAwRkZGRkZGCisjZGVmaW5lIFJPV19NQVNLCTB4RjAKKyNkZWZpbmUgQ09MVU1OX01BU0sJMHgwRgorI2RlZmluZSBST1dfU0hJRlQJNAorCitzdHJ1Y3Qgc3BlYXJfa2JkIHsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwl2b2lkIF9faW9tZW0gKmlvX2Jhc2U7CisJc3RydWN0IGNsayAqY2xrOworCXVuc2lnbmVkIGludCBpcnE7CisJdW5zaWduZWQgc2hvcnQgbGFzdF9rZXk7CisJdW5zaWduZWQgc2hvcnQga2V5Y29kZXNbMjU2XTsKK307CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBzcGVhcl9rYmRfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3Qgc3BlYXJfa2JkICprYmQgPSBkZXZfaWQ7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXQgPSBrYmQtPmlucHV0OworCXVuc2lnbmVkIGludCBrZXk7CisJdTggc3RzLCB2YWw7CisKKwlzdHMgPSByZWFkYihrYmQtPmlvX2Jhc2UgKyBTVEFUVVNfUkVHKTsKKwlpZiAoc3RzICYgREFUQV9BVkFJTCkKKwkJcmV0dXJuIElSUV9OT05FOworCisJaWYgKGtiZC0+bGFzdF9rZXkgIT0gS0VZX1JFU0VSVkVEKSB7CisJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsIGtiZC0+bGFzdF9rZXksIDApOworCQlrYmQtPmxhc3Rfa2V5ID0gS0VZX1JFU0VSVkVEOworCX0KKworCS8qIGZvbGxvd2luZyByZWFkcyBhY3RpdmUgKHJvdywgY29sKSBwYWlyICovCisJdmFsID0gcmVhZGIoa2JkLT5pb19iYXNlICsgREFUQV9SRUcpOworCWtleSA9IGtiZC0+a2V5Y29kZXNbdmFsXTsKKworCWlucHV0X2V2ZW50KGlucHV0LCBFVl9NU0MsIE1TQ19TQ0FOLCB2YWwpOworCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsIGtleSwgMSk7CisJaW5wdXRfc3luYyhpbnB1dCk7CisKKwlrYmQtPmxhc3Rfa2V5ID0ga2V5OworCisJLyogY2xlYXIgaW50ZXJydXB0ICovCisJd3JpdGViKDAsIGtiZC0+aW9fYmFzZSArIFNUQVRVU19SRUcpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IHNwZWFyX2tiZF9vcGVuKHN0cnVjdCBpbnB1dF9kZXYgKmRldikKK3sKKwlzdHJ1Y3Qgc3BlYXJfa2JkICprYmQgPSBpbnB1dF9nZXRfZHJ2ZGF0YShkZXYpOworCWludCBlcnJvcjsKKwl1MTYgdmFsOworCisJa2JkLT5sYXN0X2tleSA9IEtFWV9SRVNFUlZFRDsKKworCWVycm9yID0gY2xrX2VuYWJsZShrYmQtPmNsayk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisKKwkvKiBwcm9ncmFtIGtleWJvYXJkICovCisJdmFsID0gU0NBTl9SQVRFXzgwIHwgTU9ERV9LRVlCT0FSRCB8IFBDTEtfRlJFUV9NU0s7CisJd3JpdGV3KHZhbCwga2JkLT5pb19iYXNlICsgTU9ERV9SRUcpOworCXdyaXRlYigxLCBrYmQtPmlvX2Jhc2UgKyBTVEFUVVNfUkVHKTsKKworCS8qIHN0YXJ0IGtleSBzY2FuICovCisJdmFsID0gcmVhZHcoa2JkLT5pb19iYXNlICsgTU9ERV9SRUcpOworCXZhbCB8PSBTVEFSVF9TQ0FOOworCXdyaXRldyh2YWwsIGtiZC0+aW9fYmFzZSArIE1PREVfUkVHKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzcGVhcl9rYmRfY2xvc2Uoc3RydWN0IGlucHV0X2RldiAqZGV2KQoreworCXN0cnVjdCBzcGVhcl9rYmQgKmtiZCA9IGlucHV0X2dldF9kcnZkYXRhKGRldik7CisJdTE2IHZhbDsKKworCS8qIHN0b3Aga2V5IHNjYW4gKi8KKwl2YWwgPSByZWFkdyhrYmQtPmlvX2Jhc2UgKyBNT0RFX1JFRyk7CisJdmFsICY9IH5TVEFSVF9TQ0FOOworCXdyaXRldyh2YWwsIGtiZC0+aW9fYmFzZSArIE1PREVfUkVHKTsKKworCWNsa19kaXNhYmxlKGtiZC0+Y2xrKTsKKworCWtiZC0+bGFzdF9rZXkgPSBLRVlfUkVTRVJWRUQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNwZWFyX2tiZF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWNvbnN0IHN0cnVjdCBrYmRfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwljb25zdCBzdHJ1Y3QgbWF0cml4X2tleW1hcF9kYXRhICprZXltYXA7CisJc3RydWN0IHNwZWFyX2tiZCAqa2JkOworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldjsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQgaXJxOworCWludCBlcnJvcjsKKworCWlmICghcGRhdGEpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiSW52YWxpZCBwbGF0Zm9ybSBkYXRhXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJa2V5bWFwID0gcGRhdGEtPmtleW1hcDsKKwlpZiAoIWtleW1hcCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBrZXltYXAgZGVmaW5lZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXMpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8ga2V5Ym9hcmQgcmVzb3VyY2UgZGVmaW5lZFxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAoaXJxIDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJub3QgYWJsZSB0byBnZXQgaXJxIGZvciB0aGUgZGV2aWNlXG4iKTsKKwkJcmV0dXJuIGlycTsKKwl9CisKKwlrYmQgPSBremFsbG9jKHNpemVvZigqa2JkKSwgR0ZQX0tFUk5FTCk7CisJaW5wdXRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CisJaWYgKCFrYmQgfHwgIWlucHV0X2RldikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJvdXQgb2YgbWVtb3J5XG4iKTsKKwkJZXJyb3IgPSAtRU5PTUVNOworCQlnb3RvIGVycl9mcmVlX21lbTsKKwl9CisKKwlrYmQtPmlucHV0ID0gaW5wdXRfZGV2OworCWtiZC0+aXJxID0gaXJxOworCWtiZC0+cmVzID0gcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSwKKwkJCQkgICAgICBwZGV2LT5uYW1lKTsKKwlpZiAoIWtiZC0+cmVzKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImtleWJvYXJkIHJlZ2lvbiBhbHJlYWR5IGNsYWltZWRcbiIpOworCQllcnJvciA9IC1FQlVTWTsKKwkJZ290byBlcnJfZnJlZV9tZW07CisJfQorCisJa2JkLT5pb19iYXNlID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCWlmICgha2JkLT5pb19iYXNlKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImlvcmVtYXAgZmFpbGVkIGZvciBrYmRfcmVnaW9uXG4iKTsKKwkJZXJyb3IgPSAtRU5PTUVNOworCQlnb3RvIGVycl9yZWxlYXNlX21lbV9yZWdpb247CisJfQorCisJa2JkLT5jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsIE5VTEwpOworCWlmIChJU19FUlIoa2JkLT5jbGspKSB7CisJCWVycm9yID0gUFRSX0VSUihrYmQtPmNsayk7CisJCWdvdG8gZXJyX2lvdW5tYXA7CisJfQorCisJaW5wdXRfZGV2LT5uYW1lID0gIlNwZWFyIEtleWJvYXJkIjsKKwlpbnB1dF9kZXYtPnBoeXMgPSAia2V5Ym9hcmQvaW5wdXQwIjsKKwlpbnB1dF9kZXYtPmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OworCWlucHV0X2Rldi0+aWQuYnVzdHlwZSA9IEJVU19IT1NUOworCWlucHV0X2Rldi0+aWQudmVuZG9yID0gMHgwMDAxOworCWlucHV0X2Rldi0+aWQucHJvZHVjdCA9IDB4MDAwMTsKKwlpbnB1dF9kZXYtPmlkLnZlcnNpb24gPSAweDAxMDA7CisJaW5wdXRfZGV2LT5vcGVuID0gc3BlYXJfa2JkX29wZW47CisJaW5wdXRfZGV2LT5jbG9zZSA9IHNwZWFyX2tiZF9jbG9zZTsKKworCV9fc2V0X2JpdChFVl9LRVksIGlucHV0X2Rldi0+ZXZiaXQpOworCWlmIChwZGF0YS0+cmVwKQorCQlfX3NldF9iaXQoRVZfUkVQLCBpbnB1dF9kZXYtPmV2Yml0KTsKKwlpbnB1dF9zZXRfY2FwYWJpbGl0eShpbnB1dF9kZXYsIEVWX01TQywgTVNDX1NDQU4pOworCisJaW5wdXRfZGV2LT5rZXljb2RlID0ga2JkLT5rZXljb2RlczsKKwlpbnB1dF9kZXYtPmtleWNvZGVzaXplID0gc2l6ZW9mKGtiZC0+a2V5Y29kZXNbMF0pOworCWlucHV0X2Rldi0+a2V5Y29kZW1heCA9IEFSUkFZX1NJWkUoa2JkLT5rZXljb2Rlcyk7CisKKwltYXRyaXhfa2V5cGFkX2J1aWxkX2tleW1hcChrZXltYXAsIFJPV19TSElGVCwKKwkJCWlucHV0X2Rldi0+a2V5Y29kZSwgaW5wdXRfZGV2LT5rZXliaXQpOworCisJaW5wdXRfc2V0X2RydmRhdGEoaW5wdXRfZGV2LCBrYmQpOworCisJZXJyb3IgPSByZXF1ZXN0X2lycShpcnEsIHNwZWFyX2tiZF9pbnRlcnJ1cHQsIDAsICJrZXlib2FyZCIsIGtiZCk7CisJaWYgKGVycm9yKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInJlcXVlc3RfaXJxIGZhaWxcbiIpOworCQlnb3RvIGVycl9wdXRfY2xrOworCX0KKworCWVycm9yID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGlucHV0X2Rldik7CisJaWYgKGVycm9yKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuYWJsZSB0byByZWdpc3RlciBrZXlib2FyZCBkZXZpY2VcbiIpOworCQlnb3RvIGVycl9mcmVlX2lycTsKKwl9CisKKwlkZXZpY2VfaW5pdF93YWtldXAoJnBkZXYtPmRldiwgMSk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwga2JkKTsKKworCXJldHVybiAwOworCitlcnJfZnJlZV9pcnE6CisJZnJlZV9pcnEoa2JkLT5pcnEsIGtiZCk7CitlcnJfcHV0X2NsazoKKwljbGtfcHV0KGtiZC0+Y2xrKTsKK2Vycl9pb3VubWFwOgorCWlvdW5tYXAoa2JkLT5pb19iYXNlKTsKK2Vycl9yZWxlYXNlX21lbV9yZWdpb246CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CitlcnJfZnJlZV9tZW06CisJaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXRfZGV2KTsKKwlrZnJlZShrYmQpOworCisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBzcGVhcl9rYmRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNwZWFyX2tiZCAqa2JkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlmcmVlX2lycShrYmQtPmlycSwga2JkKTsKKwlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShrYmQtPmlucHV0KTsKKwljbGtfcHV0KGtiZC0+Y2xrKTsKKwlpb3VubWFwKGtiZC0+aW9fYmFzZSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKGtiZC0+cmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShrYmQtPnJlcykpOworCWtmcmVlKGtiZCk7CisKKwlkZXZpY2VfaW5pdF93YWtldXAoJnBkZXYtPmRldiwgMSk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBzcGVhcl9rYmRfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCBzcGVhcl9rYmQgKmtiZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldiA9IGtiZC0+aW5wdXQ7CisKKwltdXRleF9sb2NrKCZpbnB1dF9kZXYtPm11dGV4KTsKKworCWlmIChpbnB1dF9kZXYtPnVzZXJzKQorCQljbGtfZW5hYmxlKGtiZC0+Y2xrKTsKKworCWlmIChkZXZpY2VfbWF5X3dha2V1cCgmcGRldi0+ZGV2KSkKKwkJZW5hYmxlX2lycV93YWtlKGtiZC0+aXJxKTsKKworCW11dGV4X3VubG9jaygmaW5wdXRfZGV2LT5tdXRleCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzcGVhcl9rYmRfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IHNwZWFyX2tiZCAqa2JkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2ID0ga2JkLT5pbnB1dDsKKworCW11dGV4X2xvY2soJmlucHV0X2Rldi0+bXV0ZXgpOworCisJaWYgKGRldmljZV9tYXlfd2FrZXVwKCZwZGV2LT5kZXYpKQorCQlkaXNhYmxlX2lycV93YWtlKGtiZC0+aXJxKTsKKworCWlmIChpbnB1dF9kZXYtPnVzZXJzKQorCQljbGtfZW5hYmxlKGtiZC0+Y2xrKTsKKworCW11dGV4X3VubG9jaygmaW5wdXRfZGV2LT5tdXRleCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHNwZWFyX2tiZF9wbV9vcHMgPSB7CisJLnN1c3BlbmQJPSBzcGVhcl9rYmRfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHNwZWFyX2tiZF9yZXN1bWUsCit9OworI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNwZWFyX2tiZF9kcml2ZXIgPSB7CisJLnByb2JlCQk9IHNwZWFyX2tiZF9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHNwZWFyX2tiZF9yZW1vdmUpLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJrZXlib2FyZCIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorI2lmZGVmIENPTkZJR19QTQorCQkucG0JPSAmc3BlYXJfa2JkX3BtX29wcywKKyNlbmRpZgorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzcGVhcl9rYmRfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnNwZWFyX2tiZF9kcml2ZXIpOworfQorbW9kdWxlX2luaXQoc3BlYXJfa2JkX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgc3BlYXJfa2JkX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc3BlYXJfa2JkX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChzcGVhcl9rYmRfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIlJhamVldiBLdW1hciIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTUEVBciBLZXlib2FyZCBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvdGMzNTg5eC1rZXlwYWQuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvdGMzNTg5eC1rZXlwYWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmJlNzYxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC90YzM1ODl4LWtleXBhZC5jCkBAIC0wLDAgKzEsNDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSBTVC1Fcmljc3NvbiBTQSAyMDEwCisgKgorICogQXV0aG9yOiBKYXllZXRhIEJhbmVyamVlIDxqYXllZXRhLmJhbmVyamVlQHN0ZXJpY3Nzb24uY29tPgorICogQXV0aG9yOiBTdW5kYXIgSXllciA8c3VuZGFyLml5ZXJAc3Rlcmljc3Nvbi5jb20+CisgKgorICogTGljZW5zZSBUZXJtczogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMgorICoKKyAqIFRDMzU4OTMgTUZEIEtleXBhZCBDb250cm9sbGVyIGRyaXZlcgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC9tYXRyaXhfa2V5cGFkLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC90YzM1ODl4Lmg+CisKKy8qIE1heGltdW0gc3VwcG9ydGVkIGtleXBhZCBtYXRyaXggcm93L2NvbHVtbnMgc2l6ZSAqLworI2RlZmluZSBUQzM1ODl4X01BWF9LUFJPVyAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgVEMzNTg5eF9NQVhfS1BDT0wgICAgICAgICAgICAgICAxMgorCisvKiBrZXlwYWQgcmVsYXRlZCBDb25zdGFudHMgKi8KKyNkZWZpbmUgVEMzNTg5eF9NQVhfREVCT1VOQ0VfU0VUVExFICAgICAweEZGCisjZGVmaW5lIERFRElDQVRFRF9LRVlfVkFMCQkweEZGCisKKy8qIFB1bGwgdXAvZG93biBtYXNrcyAqLworI2RlZmluZSBUQzM1ODl4X05PX1BVTExfTUFTSwkJMHgwCisjZGVmaW5lIFRDMzU4OXhfUFVMTF9ET1dOX01BU0sJCTB4MQorI2RlZmluZSBUQzM1ODl4X1BVTExfVVBfTUFTSwkJMHgyCisjZGVmaW5lIFRDMzU4OXhfUFVMTFVQX0FMTF9NQVNLCQkweEFBCisjZGVmaW5lIFRDMzU4OXhfSU9fUFVMTF9WQUwoaW5kZXgsIG1hc2spCSgobWFzayk8PCgoaW5kZXgpJTQpKjIpKQorCisvKiBCaXQgbWFza3MgZm9yIElPQ0ZHIHJlZ2lzdGVyICovCisjZGVmaW5lIElPQ0ZHX0JBTExDRkcJCTB4MDEKKyNkZWZpbmUgSU9DRkdfSUcJCTB4MDgKKworI2RlZmluZSBLUF9FVkNPREVfQ09MX01BU0sJMHgwRgorI2RlZmluZSBLUF9FVkNPREVfUk9XX01BU0sJMHg3MAorI2RlZmluZSBLUF9SRUxFQVNFX0VWVF9NQVNLCTB4ODAKKworI2RlZmluZSBLUF9ST1dfU0hJRlQJCTQKKworI2RlZmluZSBLUF9OT19WQUxJRF9LRVlfTUFTSwkweDdGCisKKy8qIGJpdCBtYXNrcyBmb3IgUkVTVENUUkwgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgVEMzNTg5eF9LQkRSU1QJCTB4MgorI2RlZmluZSBUQzM1ODl4X0lSUVJTVAkJMHgxMAorI2RlZmluZSBUQzM1ODl4X1JFU0VUX0FMTAkweDFCCisKKy8qIEtCRE1GUyByZWdpc3RlciBiaXQgbWFzayAqLworI2RlZmluZSBUQzM1ODl4X0tCRE1GU19FTgkweDEKKworLyogQ0xLRU4gcmVnaXN0ZXIgYml0bWFzayAqLworI2RlZmluZSBLUERfQ0xLX0VOCQkweDEKKworLyogUlNUSU5UQ0xSIHJlZ2lzdGVyIGJpdCBtYXNrICovCisjZGVmaW5lIElSUV9DTEVBUgkJMHgxCisKKy8qIGJpdCBtYXNrcyBmb3Iga2V5Ym9hcmQgaW50ZXJydXB0cyovCisjZGVmaW5lIFRDMzU4OXhfRVZUX0xPU1NfSU5UCTB4OAorI2RlZmluZSBUQzM1ODl4X0VWVF9JTlQJCTB4NAorI2RlZmluZSBUQzM1ODl4X0tCRF9MT1NTX0lOVAkweDIKKyNkZWZpbmUgVEMzNTg5eF9LQkRfSU5UCQkweDEKKworLyogYml0IG1hc2tzIGZvciBrZXlib2FyZCBpbnRlcnJ1cHQgY2xlYXIqLworI2RlZmluZSBUQzM1ODl4X0VWVF9JTlRfQ0xSCTB4MgorI2RlZmluZSBUQzM1ODl4X0tCRF9JTlRfQ0xSCTB4MQorCisjZGVmaW5lIFRDMzU4OXhfS0JEX0tFWU1BUF9TSVpFICAgICA2NAorCisvKioKKyAqIHN0cnVjdCB0Y19rZXlwYWQgLSBkYXRhIHN0cnVjdHVyZSB1c2VkIGJ5IGtleXBhZCBkcml2ZXIKKyAqIEBpbnB1dDogICAgICBwb2ludGVyIHRvIGlucHV0IGRldmljZSBvYmplY3QKKyAqIEBib2FyZDogICAgICBrZXlwYWQgcGxhdGZvcm0gZGV2aWNlCisgKiBAa3JvdzoJbnVtYmVyIG9mIHJvd3MKKyAqIEBrY29sOgludW1iZXIgb2YgY29sb3VtbnMKKyAqIEBrZXltYXA6ICAgICBtYXRyaXggc2NhbiBjb2RlIHRhYmxlIGZvciBrZXljb2RlcworICovCitzdHJ1Y3QgdGNfa2V5cGFkIHsKKwlzdHJ1Y3QgdGMzNTg5eCAqdGMzNTg5eDsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dDsKKwljb25zdCBzdHJ1Y3QgdGMzNTg5eF9rZXlwYWRfcGxhdGZvcm1fZGF0YSAqYm9hcmQ7CisJdW5zaWduZWQgaW50IGtyb3c7CisJdW5zaWduZWQgaW50IGtjb2w7CisJdW5zaWduZWQgc2hvcnQga2V5bWFwW1RDMzU4OXhfS0JEX0tFWU1BUF9TSVpFXTsKKwlib29sIGtleXBhZF9zdG9wcGVkOworfTsKKworc3RhdGljIGludCBfX2RldmluaXQgdGMzNTg5eF9rZXlwYWRfaW5pdF9rZXlfaGFyZHdhcmUoc3RydWN0IHRjX2tleXBhZCAqa2V5cGFkKQoreworCWludCByZXQ7CisJc3RydWN0IHRjMzU4OXggKnRjMzU4OXggPSBrZXlwYWQtPnRjMzU4OXg7CisJdTggc2V0dGxlX3RpbWUgPSBrZXlwYWQtPmJvYXJkLT5zZXR0bGVfdGltZTsKKwl1OCBkYm91bmNlX3BlcmlvZCA9IGtleXBhZC0+Ym9hcmQtPmRlYm91bmNlX3BlcmlvZDsKKwl1OCByb3dzID0ga2V5cGFkLT5ib2FyZC0+a3JvdyAmIDB4ZjsJLyogbWFzayBvdXQgdGhlIG5pYmJsZSAqLworCXU4IGNvbHVtbiA9IGtleXBhZC0+Ym9hcmQtPmtjb2wgJiAweGY7CS8qIG1hc2sgb3V0IHRoZSBuaWJibGUgKi8KKworCS8qIHZhbGlkYXRlIHBsYXRmb3JtIGNvbmZpZ3VyYXRpb25zICovCisJaWYgKGtleXBhZC0+Ym9hcmQtPmtjb2wgPiBUQzM1ODl4X01BWF9LUENPTCB8fAorCSAgICBrZXlwYWQtPmJvYXJkLT5rcm93ID4gVEMzNTg5eF9NQVhfS1BST1cgfHwKKwkgICAga2V5cGFkLT5ib2FyZC0+ZGVib3VuY2VfcGVyaW9kID4gVEMzNTg5eF9NQVhfREVCT1VOQ0VfU0VUVExFIHx8CisJICAgIGtleXBhZC0+Ym9hcmQtPnNldHRsZV90aW1lID4gVEMzNTg5eF9NQVhfREVCT1VOQ0VfU0VUVExFKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIGNvbmZpZ3VyZSBLQkRTSVpFIDQgTFNiaXRzIGZvciBjb2xzIGFuZCA0IE1TYml0cyBmb3Igcm93cyAqLworCXJldCA9IHRjMzU4OXhfcmVnX3dyaXRlKHRjMzU4OXgsIFRDMzU4OXhfS0JEU0laRSwKKwkJCShyb3dzIDw8IEtQX1JPV19TSElGVCkgfCBjb2x1bW4pOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJLyogY29uZmlndXJlIGRlZGljYXRlZCBrZXkgY29uZmlnLCBubyBkZWRpY2F0ZWQga2V5IHNlbGVjdGVkICovCisJcmV0ID0gdGMzNTg5eF9yZWdfd3JpdGUodGMzNTg5eCwgVEMzNTg5eF9LQkNGR19MU0IsIERFRElDQVRFRF9LRVlfVkFMKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHRjMzU4OXhfcmVnX3dyaXRlKHRjMzU4OXgsIFRDMzU4OXhfS0JDRkdfTVNCLCBERURJQ0FURURfS0VZX1ZBTCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBDb25maWd1cmUgc2V0dGxlIHRpbWUgKi8KKwlyZXQgPSB0YzM1ODl4X3JlZ193cml0ZSh0YzM1ODl4LCBUQzM1ODl4X0tCRFNFVFRMRV9SRUcsIHNldHRsZV90aW1lKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIENvbmZpZ3VyZSBkZWJvdW5jZSB0aW1lICovCisJcmV0ID0gdGMzNTg5eF9yZWdfd3JpdGUodGMzNTg5eCwgVEMzNTg5eF9LQkRCT1VOQ0UsIGRib3VuY2VfcGVyaW9kKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIFN0YXJ0IG9mIGluaXRpYWxpc2Uga2V5cGFkIEdQSU9zICovCisJcmV0ID0gdGMzNTg5eF9zZXRfYml0cyh0YzM1ODl4LCBUQzM1ODl4X0lPQ0ZHLCAweDAsIElPQ0ZHX0lHKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIENvbmZpZ3VyZSBwdWxsLXVwIHJlc2lzdG9ycyBmb3IgYWxsIHJvdyBHUElPcyAqLworCXJldCA9IHRjMzU4OXhfcmVnX3dyaXRlKHRjMzU4OXgsIFRDMzU4OXhfSU9QVUxMQ0ZHMF9MU0IsCisJCQkJCVRDMzU4OXhfUFVMTFVQX0FMTF9NQVNLKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHRjMzU4OXhfcmVnX3dyaXRlKHRjMzU4OXgsIFRDMzU4OXhfSU9QVUxMQ0ZHMF9NU0IsCisJCQkJCVRDMzU4OXhfUFVMTFVQX0FMTF9NQVNLKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIENvbmZpZ3VyZSBwdWxsLXVwIHJlc2lzdG9ycyBmb3IgYWxsIGNvbHVtbiBHUElPcyAqLworCXJldCA9IHRjMzU4OXhfcmVnX3dyaXRlKHRjMzU4OXgsIFRDMzU4OXhfSU9QVUxMQ0ZHMV9MU0IsCisJCQlUQzM1ODl4X1BVTExVUF9BTExfTUFTSyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSB0YzM1ODl4X3JlZ193cml0ZSh0YzM1ODl4LCBUQzM1ODl4X0lPUFVMTENGRzFfTVNCLAorCQkJVEMzNTg5eF9QVUxMVVBfQUxMX01BU0spOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gdGMzNTg5eF9yZWdfd3JpdGUodGMzNTg5eCwgVEMzNTg5eF9JT1BVTExDRkcyX0xTQiwKKwkJCVRDMzU4OXhfUFVMTFVQX0FMTF9NQVNLKTsKKworCXJldHVybiByZXQ7Cit9CisKKyNkZWZpbmUgVEMzNTg5M19EQVRBX1JFR1MJCTQKKyNkZWZpbmUgVEMzNTg5M19LRVlDT0RFX0ZJRk9fRU1QVFkJMHg3ZgorI2RlZmluZSBUQzM1ODkzX0tFWUNPREVfRklGT19DTEVBUgkweGZmCisjZGVmaW5lIFRDMzU4OTNfS0VZUEFEX1JPV19TSElGVAkweDMKKworc3RhdGljIGlycXJldHVybl90IHRjMzU4OXhfa2V5cGFkX2lycShpbnQgaXJxLCB2b2lkICpkZXYpCit7CisJc3RydWN0IHRjX2tleXBhZCAqa2V5cGFkID0gZGV2OworCXN0cnVjdCB0YzM1ODl4ICp0YzM1ODl4ID0ga2V5cGFkLT50YzM1ODl4OworCXU4IGksIHJvd19pbmRleCwgY29sX2luZGV4LCBrYmRfY29kZSwgdXA7CisJdTggY29kZTsKKworCWZvciAoaSA9IDA7IGkgPCBUQzM1ODkzX0RBVEFfUkVHUyAqIDI7IGkrKykgeworCQlrYmRfY29kZSA9IHRjMzU4OXhfcmVnX3JlYWQodGMzNTg5eCwgVEMzNTg5eF9FVlRDT0RFX0ZJRk8pOworCisJCS8qIGxvb3AgdGlsbCBmaWZvIGlzIGVtcHR5IGFuZCBubyBtb3JlIGtleXMgYXJlIHByZXNzZWQgKi8KKwkJaWYgKGtiZF9jb2RlID09IFRDMzU4OTNfS0VZQ09ERV9GSUZPX0VNUFRZIHx8CisJCQkJa2JkX2NvZGUgPT0gVEMzNTg5M19LRVlDT0RFX0ZJRk9fQ0xFQVIpCisJCQljb250aW51ZTsKKworCQkvKiB2YWxpZCBrZXkgaXMgZm91bmQgKi8KKwkJY29sX2luZGV4ID0ga2JkX2NvZGUgJiBLUF9FVkNPREVfQ09MX01BU0s7CisJCXJvd19pbmRleCA9IChrYmRfY29kZSAmIEtQX0VWQ09ERV9ST1dfTUFTSykgPj4gS1BfUk9XX1NISUZUOworCQljb2RlID0gTUFUUklYX1NDQU5fQ09ERShyb3dfaW5kZXgsIGNvbF9pbmRleCwKKwkJCQkJCVRDMzU4OTNfS0VZUEFEX1JPV19TSElGVCk7CisJCXVwID0ga2JkX2NvZGUgJiBLUF9SRUxFQVNFX0VWVF9NQVNLOworCisJCWlucHV0X2V2ZW50KGtleXBhZC0+aW5wdXQsIEVWX01TQywgTVNDX1NDQU4sIGNvZGUpOworCQlpbnB1dF9yZXBvcnRfa2V5KGtleXBhZC0+aW5wdXQsIGtleXBhZC0+a2V5bWFwW2NvZGVdLCAhdXApOworCQlpbnB1dF9zeW5jKGtleXBhZC0+aW5wdXQpOworCX0KKworCS8qIGNsZWFyIElSUSAqLworCXRjMzU4OXhfc2V0X2JpdHModGMzNTg5eCwgVEMzNTg5eF9LQkRJQywKKwkJCTB4MCwgVEMzNTg5eF9FVlRfSU5UX0NMUiB8IFRDMzU4OXhfS0JEX0lOVF9DTFIpOworCS8qIGVuYWJsZSBJUlEgKi8KKwl0YzM1ODl4X3NldF9iaXRzKHRjMzU4OXgsIFRDMzU4OXhfS0JETVNLLAorCQkJMHgwLCBUQzM1ODl4X0VWVF9MT1NTX0lOVCB8IFRDMzU4OXhfRVZUX0lOVCk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgdGMzNTg5eF9rZXlwYWRfZW5hYmxlKHN0cnVjdCB0Y19rZXlwYWQgKmtleXBhZCkKK3sKKwlzdHJ1Y3QgdGMzNTg5eCAqdGMzNTg5eCA9IGtleXBhZC0+dGMzNTg5eDsKKwlpbnQgcmV0OworCisJLyogcHVsbCB0aGUga2V5cGFkIG1vZHVsZSBvdXQgb2YgcmVzZXQgKi8KKwlyZXQgPSB0YzM1ODl4X3NldF9iaXRzKHRjMzU4OXgsIFRDMzU4OXhfUlNUQ1RSTCwgVEMzNTg5eF9LQkRSU1QsIDB4MCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBjb25maWd1cmUgS0JETUZTICovCisJcmV0ID0gdGMzNTg5eF9zZXRfYml0cyh0YzM1ODl4LCBUQzM1ODl4X0tCRE1GUywgMHgwLCBUQzM1ODl4X0tCRE1GU19FTik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBlbmFibGUgdGhlIGtleXBhZCBjbG9jayAqLworCXJldCA9IHRjMzU4OXhfc2V0X2JpdHModGMzNTg5eCwgVEMzNTg5eF9DTEtFTiwgMHgwLCBLUERfQ0xLX0VOKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIGNsZWFyIHBlbmRpbmcgSVJRcyAqLworCXJldCA9ICB0YzM1ODl4X3NldF9iaXRzKHRjMzU4OXgsIFRDMzU4OXhfUlNUSU5UQ0xSLCAweDAsIDB4MSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBlbmFibGUgdGhlIElSUXMgKi8KKwlyZXQgPSB0YzM1ODl4X3NldF9iaXRzKHRjMzU4OXgsIFRDMzU4OXhfS0JETVNLLCAweDAsCisJCQkJCVRDMzU4OXhfRVZUX0xPU1NfSU5UIHwgVEMzNTg5eF9FVlRfSU5UKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWtleXBhZC0+a2V5cGFkX3N0b3BwZWQgPSBmYWxzZTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdGMzNTg5eF9rZXlwYWRfZGlzYWJsZShzdHJ1Y3QgdGNfa2V5cGFkICprZXlwYWQpCit7CisJc3RydWN0IHRjMzU4OXggKnRjMzU4OXggPSBrZXlwYWQtPnRjMzU4OXg7CisJaW50IHJldDsKKworCS8qIGNsZWFyIElSUSAqLworCXJldCA9IHRjMzU4OXhfc2V0X2JpdHModGMzNTg5eCwgVEMzNTg5eF9LQkRJQywKKwkJCTB4MCwgVEMzNTg5eF9FVlRfSU5UX0NMUiB8IFRDMzU4OXhfS0JEX0lOVF9DTFIpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJLyogZGlzYWJsZSBhbGwgaW50ZXJydXB0cyAqLworCXJldCA9IHRjMzU4OXhfc2V0X2JpdHModGMzNTg5eCwgVEMzNTg5eF9LQkRNU0ssCisJCQl+KFRDMzU4OXhfRVZUX0xPU1NfSU5UIHwgVEMzNTg5eF9FVlRfSU5UKSwgMHgwKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIGRpc2FibGUgdGhlIGtleXBhZCBtb2R1bGUgKi8KKwlyZXQgPSB0YzM1ODl4X3NldF9iaXRzKHRjMzU4OXgsIFRDMzU4OXhfQ0xLRU4sIDB4MSwgMHgwKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIHB1dCB0aGUga2V5cGFkIG1vZHVsZSBpbnRvIHJlc2V0ICovCisJcmV0ID0gdGMzNTg5eF9zZXRfYml0cyh0YzM1ODl4LCBUQzM1ODl4X1JTVENUUkwsIFRDMzU4OXhfS0JEUlNULCAweDEpOworCisJa2V5cGFkLT5rZXlwYWRfc3RvcHBlZCA9IHRydWU7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHRjMzU4OXhfa2V5cGFkX29wZW4oc3RydWN0IGlucHV0X2RldiAqaW5wdXQpCit7CisJaW50IGVycm9yOworCXN0cnVjdCB0Y19rZXlwYWQgKmtleXBhZCA9IGlucHV0X2dldF9kcnZkYXRhKGlucHV0KTsKKworCS8qIGVuYWJsZSB0aGUga2V5cGFkIG1vZHVsZSAqLworCWVycm9yID0gdGMzNTg5eF9rZXlwYWRfZW5hYmxlKGtleXBhZCk7CisJaWYgKGVycm9yIDwgMCkgeworCQlkZXZfZXJyKCZpbnB1dC0+ZGV2LCAiZmFpbGVkIHRvIGVuYWJsZSBrZXlwYWQgbW9kdWxlXG4iKTsKKwkJcmV0dXJuIGVycm9yOworCX0KKworCWVycm9yID0gdGMzNTg5eF9rZXlwYWRfaW5pdF9rZXlfaGFyZHdhcmUoa2V5cGFkKTsKKwlpZiAoZXJyb3IgPCAwKSB7CisJCWRldl9lcnIoJmlucHV0LT5kZXYsICJmYWlsZWQgdG8gY29uZmlndXJlIGtleXBhZCBtb2R1bGVcbiIpOworCQlyZXR1cm4gZXJyb3I7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHRjMzU4OXhfa2V5cGFkX2Nsb3NlKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0KQoreworCXN0cnVjdCB0Y19rZXlwYWQgKmtleXBhZCA9IGlucHV0X2dldF9kcnZkYXRhKGlucHV0KTsKKworCS8qIGRpc2FibGUgdGhlIGtleXBhZCBtb2R1bGUgKi8KKwl0YzM1ODl4X2tleXBhZF9kaXNhYmxlKGtleXBhZCk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHRjMzU4OXhfa2V5cGFkX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHRjMzU4OXggKnRjMzU4OXggPSBkZXZfZ2V0X2RydmRhdGEocGRldi0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHRjX2tleXBhZCAqa2V5cGFkOworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0OworCWNvbnN0IHN0cnVjdCB0YzM1ODl4X2tleXBhZF9wbGF0Zm9ybV9kYXRhICpwbGF0OworCWludCBlcnJvciwgaXJxOworCisJcGxhdCA9IHRjMzU4OXgtPnBkYXRhLT5rZXlwYWQ7CisJaWYgKCFwbGF0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImludmFsaWQga2V5cGFkIHBsYXRmb3JtIGRhdGFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChpcnEgPCAwKQorCQlyZXR1cm4gaXJxOworCisJa2V5cGFkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHRjX2tleXBhZCksIEdGUF9LRVJORUwpOworCWlucHV0ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CisJaWYgKCFrZXlwYWQgfHwgIWlucHV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBrZXlwYWQgbWVtb3J5XG4iKTsKKwkJZXJyb3IgPSAtRU5PTUVNOworCQlnb3RvIGVycl9mcmVlX21lbTsKKwl9CisKKwlrZXlwYWQtPmJvYXJkID0gcGxhdDsKKwlrZXlwYWQtPmlucHV0ID0gaW5wdXQ7CisJa2V5cGFkLT50YzM1ODl4ID0gdGMzNTg5eDsKKworCWlucHV0LT5pZC5idXN0eXBlID0gQlVTX0kyQzsKKwlpbnB1dC0+bmFtZSA9IHBkZXYtPm5hbWU7CisJaW5wdXQtPmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OworCisJaW5wdXQtPmtleWNvZGUgPSBrZXlwYWQtPmtleW1hcDsKKwlpbnB1dC0+a2V5Y29kZXNpemUgPSBzaXplb2Yoa2V5cGFkLT5rZXltYXBbMF0pOworCWlucHV0LT5rZXljb2RlbWF4ID0gQVJSQVlfU0laRShrZXlwYWQtPmtleW1hcCk7CisKKwlpbnB1dC0+b3BlbiA9IHRjMzU4OXhfa2V5cGFkX29wZW47CisJaW5wdXQtPmNsb3NlID0gdGMzNTg5eF9rZXlwYWRfY2xvc2U7CisKKwlpbnB1dF9zZXRfZHJ2ZGF0YShpbnB1dCwga2V5cGFkKTsKKworCWlucHV0X3NldF9jYXBhYmlsaXR5KGlucHV0LCBFVl9NU0MsIE1TQ19TQ0FOKTsKKworCV9fc2V0X2JpdChFVl9LRVksIGlucHV0LT5ldmJpdCk7CisJaWYgKCFwbGF0LT5ub19hdXRvcmVwZWF0KQorCQlfX3NldF9iaXQoRVZfUkVQLCBpbnB1dC0+ZXZiaXQpOworCisJbWF0cml4X2tleXBhZF9idWlsZF9rZXltYXAocGxhdC0+a2V5bWFwX2RhdGEsIDB4MywKKwkJCWlucHV0LT5rZXljb2RlLCBpbnB1dC0+a2V5Yml0KTsKKworCWVycm9yID0gcmVxdWVzdF90aHJlYWRlZF9pcnEoaXJxLCBOVUxMLAorCQkJdGMzNTg5eF9rZXlwYWRfaXJxLCBwbGF0LT5pcnF0eXBlLAorCQkJInRjMzU4OXgta2V5cGFkIiwga2V5cGFkKTsKKwlpZiAoZXJyb3IgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCQkiQ291bGQgbm90IGFsbG9jYXRlIGlycSAlZCxlcnJvciAlZFxuIiwKKwkJCQlpcnEsIGVycm9yKTsKKwkJZ290byBlcnJfZnJlZV9tZW07CisJfQorCisJZXJyb3IgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoaW5wdXQpOworCWlmIChlcnJvcikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDb3VsZCBub3QgcmVnaXN0ZXIgaW5wdXQgZGV2aWNlXG4iKTsKKwkJZ290byBlcnJfZnJlZV9pcnE7CisJfQorCisJLyogbGV0IHBsYXRmb3JtIGRlY2lkZSBpZiBrZXlwYWQgaXMgYSB3YWtldXAgc291cmNlIG9yIG5vdCAqLworCWRldmljZV9pbml0X3dha2V1cCgmcGRldi0+ZGV2LCBwbGF0LT5lbmFibGVfd2FrZXVwKTsKKwlkZXZpY2Vfc2V0X3dha2V1cF9jYXBhYmxlKCZwZGV2LT5kZXYsIHBsYXQtPmVuYWJsZV93YWtldXApOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwga2V5cGFkKTsKKworCXJldHVybiAwOworCitlcnJfZnJlZV9pcnE6CisJZnJlZV9pcnEoaXJxLCBrZXlwYWQpOworZXJyX2ZyZWVfbWVtOgorCWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0KTsKKwlrZnJlZShrZXlwYWQpOworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgdGMzNTg5eF9rZXlwYWRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHRjX2tleXBhZCAqa2V5cGFkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJaW50IGlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisKKwlpZiAoIWtleXBhZC0+a2V5cGFkX3N0b3BwZWQpCisJCXRjMzU4OXhfa2V5cGFkX2Rpc2FibGUoa2V5cGFkKTsKKworCWZyZWVfaXJxKGlycSwga2V5cGFkKTsKKworCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGtleXBhZC0+aW5wdXQpOworCisJa2ZyZWUoa2V5cGFkKTsKKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHRjMzU4OXhfa2V5cGFkX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgdGNfa2V5cGFkICprZXlwYWQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlpbnQgaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKworCS8qIGtleXBhZCBpcyBhbHJlYWR5IG9mZjsgd2UgZG8gbm90aGluZyAqLworCWlmIChrZXlwYWQtPmtleXBhZF9zdG9wcGVkKQorCQlyZXR1cm4gMDsKKworCS8qIGlmIGRldmljZSBpcyBub3QgYSB3YWtldXAgc291cmNlLCBkaXNhYmxlIGl0IGZvciBwb3dlcnNhdmUgKi8KKwlpZiAoIWRldmljZV9tYXlfd2FrZXVwKCZwZGV2LT5kZXYpKQorCQl0YzM1ODl4X2tleXBhZF9kaXNhYmxlKGtleXBhZCk7CisJZWxzZQorCQllbmFibGVfaXJxX3dha2UoaXJxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRjMzU4OXhfa2V5cGFkX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCB0Y19rZXlwYWQgKmtleXBhZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCWludCBpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCisJaWYgKCFrZXlwYWQtPmtleXBhZF9zdG9wcGVkKQorCQlyZXR1cm4gMDsKKworCS8qIGVuYWJsZSB0aGUgZGV2aWNlIHRvIHJlc3VtZSBub3JtYWwgb3BlcmF0aW9ucyAqLworCWlmICghZGV2aWNlX21heV93YWtldXAoJnBkZXYtPmRldikpCisJCXRjMzU4OXhfa2V5cGFkX2VuYWJsZShrZXlwYWQpOworCWVsc2UKKwkJZGlzYWJsZV9pcnFfd2FrZShpcnEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBTSU1QTEVfREVWX1BNX09QUyh0YzM1ODl4X2tleXBhZF9kZXZfcG1fb3BzLAorCQkJICAgICAgIHRjMzU4OXhfa2V5cGFkX3N1c3BlbmQsIHRjMzU4OXhfa2V5cGFkX3Jlc3VtZSk7CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdGMzNTg5eF9rZXlwYWRfZHJpdmVyID0geworCS5kcml2ZXIubmFtZSAgPSAidGMzNTg5eC1rZXlwYWQiLAorCS5kcml2ZXIub3duZXIgPSBUSElTX01PRFVMRSwKKyNpZmRlZiBDT05GSUdfUE0KKwkuZHJpdmVyLnBtID0gJnRjMzU4OXhfa2V5cGFkX2Rldl9wbV9vcHMsCisjZW5kaWYKKwkucHJvYmUgPSB0YzM1ODl4X2tleXBhZF9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AodGMzNTg5eF9rZXlwYWRfcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHRjMzU4OXhfa2V5cGFkX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ0YzM1ODl4X2tleXBhZF9kcml2ZXIpOworfQorbW9kdWxlX2luaXQodGMzNTg5eF9rZXlwYWRfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB0YzM1ODl4X2tleXBhZF9leGl0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ0YzM1ODl4X2tleXBhZF9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQodGMzNTg5eF9rZXlwYWRfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKK01PRFVMRV9BVVRIT1IoIkpheWVldGEgQmFuZXJqZWUvU3VuZGFyIEl5ZXIiKTsKK01PRFVMRV9ERVNDUklQVElPTigiVEMzNTg5MyBLZXlwYWQgRHJpdmVyIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOnRjMzU4OXgta2V5cGFkIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3RjYTY0MTYta2V5cGFkLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3RjYTY0MTYta2V5cGFkLmMKaW5kZXggMDAxMzdiZS4uODAwZmJjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC90Y2E2NDE2LWtleXBhZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvdGNhNjQxNi1rZXlwYWQuYwpAQCAtMjksNiArMjksNyBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgdGNhNjQxNl9pZFtdID0gewogCXsgInRjYTY0MTYta2V5cyIsIDE2LCB9LAorCXsgInRjYTY0MDgta2V5cyIsIDgsIH0sCiAJeyB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHRjYTY0MTZfaWQpOwpAQCAtNDYsOCArNDcsOSBAQAogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXQ7CiAJc3RydWN0IGRlbGF5ZWRfd29yayBkd29yazsKLQl1MTYgcGlubWFzazsKKwlpbnQgaW9fc2l6ZTsKIAlpbnQgaXJxbnVtOworCXUxNiBwaW5tYXNrOwogCWJvb2wgdXNlX3BvbGxpbmc7CiAJc3RydWN0IHRjYTY0MTZfYnV0dG9uIGJ1dHRvbnNbMF07CiB9OwpAQCAtNTYsNyArNTgsOSBAQAogewogCWludCBlcnJvcjsKIAotCWVycm9yID0gaTJjX3NtYnVzX3dyaXRlX3dvcmRfZGF0YShjaGlwLT5jbGllbnQsIHJlZyA8PCAxLCB2YWwpOworCWVycm9yID0gY2hpcC0+aW9fc2l6ZSA+IDggPworCQlpMmNfc21idXNfd3JpdGVfd29yZF9kYXRhKGNoaXAtPmNsaWVudCwgcmVnIDw8IDEsIHZhbCkgOgorCQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNoaXAtPmNsaWVudCwgcmVnLCB2YWwpOwogCWlmIChlcnJvciA8IDApIHsKIAkJZGV2X2VycigmY2hpcC0+Y2xpZW50LT5kZXYsCiAJCQkiJXMgZmFpbGVkLCByZWc6ICVkLCB2YWw6ICVkLCBlcnJvcjogJWRcbiIsCkBAIC03MSw3ICs3NSw5IEBACiB7CiAJaW50IHJldHZhbDsKIAotCXJldHZhbCA9IGkyY19zbWJ1c19yZWFkX3dvcmRfZGF0YShjaGlwLT5jbGllbnQsIHJlZyA8PCAxKTsKKwlyZXR2YWwgPSBjaGlwLT5pb19zaXplID4gOCA/CisJCSBpMmNfc21idXNfcmVhZF93b3JkX2RhdGEoY2hpcC0+Y2xpZW50LCByZWcgPDwgMSkgOgorCQkgaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNoaXAtPmNsaWVudCwgcmVnKTsKIAlpZiAocmV0dmFsIDwgMCkgewogCQlkZXZfZXJyKCZjaGlwLT5jbGllbnQtPmRldiwgIiVzIGZhaWxlZCwgcmVnOiAlZCwgZXJyb3I6ICVkXG4iLAogCQkJX19mdW5jX18sIHJlZywgcmV0dmFsKTsKQEAgLTIyNCw2ICsyMzAsNyBAQAogCiAJY2hpcC0+Y2xpZW50ID0gY2xpZW50OwogCWNoaXAtPmlucHV0ID0gaW5wdXQ7CisJY2hpcC0+aW9fc2l6ZSA9IGlkLT5kcml2ZXJfZGF0YTsKIAljaGlwLT5waW5tYXNrID0gcGRhdGEtPnBpbm1hc2s7CiAJY2hpcC0+dXNlX3BvbGxpbmcgPSBwZGF0YS0+dXNlX3BvbGxpbmc7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy9LY29uZmlnIGIvZHJpdmVycy9pbnB1dC9taXNjL0tjb25maWcKaW5kZXggYjk5YjhjYi4uYjBjNjc3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9taXNjL0tjb25maWcKKysrIGIvZHJpdmVycy9pbnB1dC9taXNjL0tjb25maWcKQEAgLTI5NCwyNCArMjk0LDYgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNnaV9idG5zLgogCi1jb25maWcgSU5QVVRfV0lOQk9ORF9DSVIKLQl0cmlzdGF0ZSAiV2luYm9uZCBJUiByZW1vdGUgY29udHJvbCIKLQlkZXBlbmRzIG9uIFg4NiAmJiBQTlAKLQlzZWxlY3QgTkVXX0xFRFMKLQlzZWxlY3QgTEVEU19DTEFTUwotCXNlbGVjdCBMRURTX1RSSUdHRVJTCi0Jc2VsZWN0IEJJVFJFVkVSU0UKLQloZWxwCi0JICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgSVIgcmVtb3RlIGZ1bmN0aW9uYWxpdHkgZm91bmQKLQkgIGluIHNvbWUgV2luYm9uZCBTdXBlckkvTyBjaGlwcy4gQ3VycmVudGx5IG9ubHkgdGhlIFdQQ0QzNzZJCi0JICBjaGlwIGlzIHN1cHBvcnRlZCAoaW5jbHVkZWQgaW4gc29tZSBJbnRlbCBNZWRpYSBzZXJpZXMgbW90aGVyYm9hcmRzKS4KLQotCSAgSVIgUmVjZWl2ZSBhbmQgd2FrZS1vbi1JUiBmcm9tIHN1c3BlbmQgYW5kIHBvd2VyLW9mZiBpcyBjdXJyZW50bHkKLQkgIHN1cHBvcnRlZC4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlCi0JICBjYWxsZWQgd2luYm9uZF9jaXIuCi0KIGNvbmZpZyBIUF9TRENfUlRDCiAJdHJpc3RhdGUgIkhQIFNEQyBSZWFsIFRpbWUgQ2xvY2siCiAJZGVwZW5kcyBvbiAoR1NDIHx8IEhQMzAwKSAmJiBTRVJJTwpAQCAtNDQ4LDQgKzQzMCwyOCBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWR4bDM0eC1zcGkuCiAKK2NvbmZpZyBJTlBVVF9DTUEzMDAwCisJdHJpc3RhdGUgIlZUSSBDTUEzMDAwIFRyaS1heGlzIGFjY2VsZXJvbWV0ZXIiCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgVlRJIENNQTMwMDBfRDB4IEFjY2VsZXJvbWV0ZXIKKwkgIGRyaXZlcgorCisJICBUaGlzIGRyaXZlciBjdXJyZW50bHkgb25seSBzdXBwb3J0cyBJMkMgaW50ZXJmYWNlIHRvIHRoZQorCSAgY29udHJvbGxlci4gQWxzbyBzZWxlY3QgdGhlIEkyQyBtZXRob2QuCisKKwkgIElmIHVuc3VyZSwgc2F5IE4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY21hMzAwMF9kMHguCisKK2NvbmZpZyBJTlBVVF9DTUEzMDAwX0kyQworCXRyaXN0YXRlICJTdXBwb3J0IEkyQyBidXMgY29ubmVjdGlvbiIKKwlkZXBlbmRzIG9uIElOUFVUX0NNQTMwMDAgJiYgSTJDCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgVlRJIENNQTMwMDBfRDB4IEFjY2VsZXJvbWV0ZXIKKwkgIHRocm91Z2ggSTJDIGludGVyZmFjZS4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY21hMzAwMF9kMHhfaTJjLgorCiBlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL01ha2VmaWxlIGIvZHJpdmVycy9pbnB1dC9taXNjL01ha2VmaWxlCmluZGV4IDFmZTFmNmMuLjliNDc5NzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbWlzYy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2lucHV0L21pc2MvTWFrZWZpbGUKQEAgLTE4LDYgKzE4LDggQEAKIG9iai0kKENPTkZJR19JTlBVVF9BVExBU19CVE5TKQkJKz0gYXRsYXNfYnRucy5vCiBvYmotJChDT05GSUdfSU5QVVRfQkZJTl9ST1RBUlkpCQkrPSBiZmluX3JvdGFyeS5vCiBvYmotJChDT05GSUdfSU5QVVRfQ00xMDkpCQkrPSBjbTEwOS5vCitvYmotJChDT05GSUdfSU5QVVRfQ01BMzAwMCkJCSs9IGNtYTMwMDBfZDB4Lm8KK29iai0kKENPTkZJR19JTlBVVF9DTUEzMDAwX0kyQykJCSs9IGNtYTMwMDBfZDB4X2kyYy5vCiBvYmotJChDT05GSUdfSU5QVVRfQ09CQUxUX0JUTlMpCQkrPSBjb2JhbHRfYnRucy5vCiBvYmotJChDT05GSUdfSU5QVVRfRE0zNTVFVk0pCQkrPSBkbTM1NWV2bV9rZXlzLm8KIG9iai0kKENPTkZJR19IUF9TRENfUlRDKQkJKz0gaHBfc2RjX3J0Yy5vCkBAIC0zOCw3ICs0MCw2IEBACiBvYmotJChDT05GSUdfSU5QVVRfVFdMNDAzMF9QV1JCVVRUT04pCSs9IHR3bDQwMzAtcHdyYnV0dG9uLm8KIG9iai0kKENPTkZJR19JTlBVVF9UV0w0MDMwX1ZJQlJBKQkrPSB0d2w0MDMwLXZpYnJhLm8KIG9iai0kKENPTkZJR19JTlBVVF9VSU5QVVQpCQkrPSB1aW5wdXQubwotb2JqLSQoQ09ORklHX0lOUFVUX1dJTkJPTkRfQ0lSKQkJKz0gd2luYm9uZC1jaXIubwogb2JqLSQoQ09ORklHX0lOUFVUX1dJU1RST05fQlROUykJKz0gd2lzdHJvbl9idG5zLm8KIG9iai0kKENPTkZJR19JTlBVVF9XTTgzMVhfT04pCQkrPSB3bTgzMXgtb24ubwogb2JqLSQoQ09ORklHX0lOUFVUX1lFQUxJTkspCQkrPSB5ZWFsaW5rLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy9jbWEzMDAwX2QweC5jIGIvZHJpdmVycy9pbnB1dC9taXNjL2NtYTMwMDBfZDB4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYzM2I2MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9jbWEzMDAwX2QweC5jCkBAIC0wLDAgKzEsMzk4IEBACisvKgorICogVlRJIENNQTMwMDBfRDB4IEFjY2VsZXJvbWV0ZXIgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRleGFzIEluc3RydW1lbnRzCisgKiBBdXRob3I6IEhlbWFudGggViA8aGVtYW50aHZAdGkuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC9jbWEzMDAwLmg+CisKKyNpbmNsdWRlICJjbWEzMDAwX2QweC5oIgorCisjZGVmaW5lIENNQTMwMDBfV0hPQU1JICAgICAgMHgwMAorI2RlZmluZSBDTUEzMDAwX1JFVklEICAgICAgIDB4MDEKKyNkZWZpbmUgQ01BMzAwMF9DVFJMICAgICAgICAweDAyCisjZGVmaW5lIENNQTMwMDBfU1RBVFVTICAgICAgMHgwMworI2RlZmluZSBDTUEzMDAwX1JTVFIgICAgICAgIDB4MDQKKyNkZWZpbmUgQ01BMzAwMF9JTlRTVEFUVVMgICAweDA1CisjZGVmaW5lIENNQTMwMDBfRE9VVFggICAgICAgMHgwNgorI2RlZmluZSBDTUEzMDAwX0RPVVRZICAgICAgIDB4MDcKKyNkZWZpbmUgQ01BMzAwMF9ET1VUWiAgICAgICAweDA4CisjZGVmaW5lIENNQTMwMDBfTURUSFIgICAgICAgMHgwOQorI2RlZmluZSBDTUEzMDAwX01ERkZUTVIgICAgIDB4MEEKKyNkZWZpbmUgQ01BMzAwMF9GRlRIUiAgICAgICAweDBCCisKKyNkZWZpbmUgQ01BMzAwMF9SQU5HRTJHICAgICgxIDw8IDcpCisjZGVmaW5lIENNQTMwMDBfUkFOR0U4RyAgICAoMCA8PCA3KQorI2RlZmluZSBDTUEzMDAwX0JVU0kyQyAgICAgKDAgPDwgNCkKKyNkZWZpbmUgQ01BMzAwMF9NT0RFTUFTSyAgICg3IDw8IDEpCisjZGVmaW5lIENNQTMwMDBfR1JBTkdFTUFTSyAoMSA8PCA3KQorCisjZGVmaW5lIENNQTMwMDBfU1RBVFVTX1BFUlIgICAgMQorI2RlZmluZSBDTUEzMDAwX0lOVFNUQVRVU19GRkRFVCAoMSA8PCAyKQorCisvKiBTZXR0bGluZyB0aW1lIGRlbGF5IGluIG1zICovCisjZGVmaW5lIENNQTMwMDBfU0VUREVMQVkgICAgMzAKKworLyogRGVsYXkgZm9yIGNsZWFyaW5nIGludGVycnVwdCBpbiB1cyAqLworI2RlZmluZSBDTUEzMDAwX0lOVERFTEFZICAgIDQ0CisKKworLyoKKyAqIEJpdCB3ZWlnaHRzIGluIG1nIGZvciBiaXQgMCwgb3RoZXIgYml0cyBuZWVkCisgKiBtdWx0aXB5IGZhY3RvciAyXm4uIEVpZ2h0IGJpdCBpcyB0aGUgc2lnbiBiaXQuCisgKi8KKyNkZWZpbmUgQklUX1RPXzJHICAxOAorI2RlZmluZSBCSVRfVE9fOEcgIDcxCisKK3N0cnVjdCBjbWEzMDAwX2FjY2xfZGF0YSB7CisJY29uc3Qgc3RydWN0IGNtYTMwMDBfYnVzX29wcyAqYnVzX29wczsKKwljb25zdCBzdHJ1Y3QgY21hMzAwMF9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7CisKKwlpbnQgYml0X3RvX21nOworCWludCBpcnE7CisKKwlpbnQgZ19yYW5nZTsKKwl1OCBtb2RlOworCisJc3RydWN0IG11dGV4IG11dGV4OworCWJvb2wgb3BlbmVkOworCWJvb2wgc3VzcGVuZGVkOworfTsKKworI2RlZmluZSBDTUEzMDAwX1JFQUQoZGF0YSwgcmVnLCBtc2cpIFwKKwkoZGF0YS0+YnVzX29wcy0+cmVhZChkYXRhLT5kZXYsIHJlZywgbXNnKSkKKyNkZWZpbmUgQ01BMzAwMF9TRVQoZGF0YSwgcmVnLCB2YWwsIG1zZykgXAorCSgoZGF0YSktPmJ1c19vcHMtPndyaXRlKGRhdGEtPmRldiwgcmVnLCB2YWwsIG1zZykpCisKKy8qCisgKiBDb252ZXJzaW9uIGZvciBlYWNoIG9mIHRoZSBlaWdodCBtb2RlcyB0byBnLCBkZXBlbmRpbmcKKyAqIG9uIEcgcmFuZ2UgaS5lIDJHIG9yIDhHLiBTb21lIG1vZGVzIGFsd2F5cyBvcGVyYXRlIGluCisgKiA4Ry4KKyAqLworCitzdGF0aWMgaW50IG1vZGVfdG9fbWdbOF1bMl0gPSB7CisJeyAwLCAwIH0sCisJeyBCSVRfVE9fOEcsIEJJVF9UT18yRyB9LAorCXsgQklUX1RPXzhHLCBCSVRfVE9fMkcgfSwKKwl7IEJJVF9UT184RywgQklUX1RPXzhHIH0sCisJeyBCSVRfVE9fOEcsIEJJVF9UT184RyB9LAorCXsgQklUX1RPXzhHLCBCSVRfVE9fMkcgfSwKKwl7IEJJVF9UT184RywgQklUX1RPXzJHIH0sCisJeyAwLCAwfSwKK307CisKK3N0YXRpYyB2b2lkIGRlY29kZV9tZyhzdHJ1Y3QgY21hMzAwMF9hY2NsX2RhdGEgKmRhdGEsIGludCAqZGF0YXgsCisJCQkJaW50ICpkYXRheSwgaW50ICpkYXRheikKK3sKKwkvKiBEYXRhIGluIDIncyBjb21wbGVtZW50LCBjb252ZXJ0IHRvIG1nICovCisJKmRhdGF4ID0gKChzOCkqZGF0YXgpICogZGF0YS0+Yml0X3RvX21nOworCSpkYXRheSA9ICgoczgpKmRhdGF5KSAqIGRhdGEtPmJpdF90b19tZzsKKwkqZGF0YXogPSAoKHM4KSpkYXRheikgKiBkYXRhLT5iaXRfdG9fbWc7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBjbWEzMDAwX3RocmVhZF9pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBjbWEzMDAwX2FjY2xfZGF0YSAqZGF0YSA9IGRldl9pZDsKKwlpbnQgZGF0YXgsIGRhdGF5LCBkYXRhejsKKwl1OCBjdHJsLCBtb2RlLCByYW5nZSwgaW50cl9zdGF0dXM7CisKKwlpbnRyX3N0YXR1cyA9IENNQTMwMDBfUkVBRChkYXRhLCBDTUEzMDAwX0lOVFNUQVRVUywgImludGVycnVwdCBzdGF0dXMiKTsKKwlpZiAoaW50cl9zdGF0dXMgPCAwKQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwkvKiBDaGVjayBpZiBmcmVlIGZhbGwgaXMgZGV0ZWN0ZWQsIHJlcG9ydCBpbW1lZGlhdGVseSAqLworCWlmIChpbnRyX3N0YXR1cyAmIENNQTMwMDBfSU5UU1RBVFVTX0ZGREVUKSB7CisJCWlucHV0X3JlcG9ydF9hYnMoZGF0YS0+aW5wdXRfZGV2LCBBQlNfTUlTQywgMSk7CisJCWlucHV0X3N5bmMoZGF0YS0+aW5wdXRfZGV2KTsKKwl9IGVsc2UgeworCQlpbnB1dF9yZXBvcnRfYWJzKGRhdGEtPmlucHV0X2RldiwgQUJTX01JU0MsIDApOworCX0KKworCWRhdGF4ID0gQ01BMzAwMF9SRUFEKGRhdGEsIENNQTMwMDBfRE9VVFgsICJYIik7CisJZGF0YXkgPSBDTUEzMDAwX1JFQUQoZGF0YSwgQ01BMzAwMF9ET1VUWSwgIlkiKTsKKwlkYXRheiA9IENNQTMwMDBfUkVBRChkYXRhLCBDTUEzMDAwX0RPVVRaLCAiWiIpOworCisJY3RybCA9IENNQTMwMDBfUkVBRChkYXRhLCBDTUEzMDAwX0NUUkwsICJjdHJsIik7CisJbW9kZSA9IChjdHJsICYgQ01BMzAwMF9NT0RFTUFTSykgPj4gMTsKKwlyYW5nZSA9IChjdHJsICYgQ01BMzAwMF9HUkFOR0VNQVNLKSA+PiA3OworCisJZGF0YS0+Yml0X3RvX21nID0gbW9kZV90b19tZ1ttb2RlXVtyYW5nZV07CisKKwkvKiBJbnRlcnJ1cHQgbm90IGZvciB0aGlzIGRldmljZSAqLworCWlmIChkYXRhLT5iaXRfdG9fbWcgPT0gMCkKKwkJcmV0dXJuIElSUV9OT05FOworCisJLyogRGVjb2RlIHJlZ2lzdGVyIHZhbHVlcyB0byBtaWxsaSBnICovCisJZGVjb2RlX21nKGRhdGEsICZkYXRheCwgJmRhdGF5LCAmZGF0YXopOworCisJaW5wdXRfcmVwb3J0X2FicyhkYXRhLT5pbnB1dF9kZXYsIEFCU19YLCBkYXRheCk7CisJaW5wdXRfcmVwb3J0X2FicyhkYXRhLT5pbnB1dF9kZXYsIEFCU19ZLCBkYXRheSk7CisJaW5wdXRfcmVwb3J0X2FicyhkYXRhLT5pbnB1dF9kZXYsIEFCU19aLCBkYXRheik7CisJaW5wdXRfc3luYyhkYXRhLT5pbnB1dF9kZXYpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IGNtYTMwMDBfcmVzZXQoc3RydWN0IGNtYTMwMDBfYWNjbF9kYXRhICpkYXRhKQoreworCWludCB2YWw7CisKKwkvKiBSZXNldCBzZXF1ZW5jZSAqLworCUNNQTMwMDBfU0VUKGRhdGEsIENNQTMwMDBfUlNUUiwgMHgwMiwgIlJlc2V0Iik7CisJQ01BMzAwMF9TRVQoZGF0YSwgQ01BMzAwMF9SU1RSLCAweDBBLCAiUmVzZXQiKTsKKwlDTUEzMDAwX1NFVChkYXRhLCBDTUEzMDAwX1JTVFIsIDB4MDQsICJSZXNldCIpOworCisJLyogU2V0dGxpbmcgdGltZSBkZWxheSAqLworCW1kZWxheSgxMCk7CisKKwl2YWwgPSBDTUEzMDAwX1JFQUQoZGF0YSwgQ01BMzAwMF9TVEFUVVMsICJTdGF0dXMiKTsKKwlpZiAodmFsIDwgMCkgeworCQlkZXZfZXJyKGRhdGEtPmRldiwgIlJlc2V0IGZhaWxlZFxuIik7CisJCXJldHVybiB2YWw7CisJfQorCisJaWYgKHZhbCAmIENNQTMwMDBfU1RBVFVTX1BFUlIpIHsKKwkJZGV2X2VycihkYXRhLT5kZXYsICJQYXJpdHkgRXJyb3JcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjbWEzMDAwX3Bvd2Vyb24oc3RydWN0IGNtYTMwMDBfYWNjbF9kYXRhICpkYXRhKQoreworCWNvbnN0IHN0cnVjdCBjbWEzMDAwX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gZGF0YS0+cGRhdGE7CisJdTggY3RybCA9IDA7CisJaW50IHJldDsKKworCWlmIChkYXRhLT5nX3JhbmdlID09IENNQVJBTkdFXzJHKSB7CisJCWN0cmwgPSAoZGF0YS0+bW9kZSA8PCAxKSB8IENNQTMwMDBfUkFOR0UyRzsKKwl9IGVsc2UgaWYgKGRhdGEtPmdfcmFuZ2UgPT0gQ01BUkFOR0VfOEcpIHsKKwkJY3RybCA9IChkYXRhLT5tb2RlIDw8IDEpIHwgQ01BMzAwMF9SQU5HRThHOworCX0gZWxzZSB7CisJCWRldl9pbmZvKGRhdGEtPmRldiwKKwkJCSAiSW52YWxpZCBHIHJhbmdlIHNwZWNpZmllZCwgYXNzdW1pbmcgOEdcbiIpOworCQljdHJsID0gKGRhdGEtPm1vZGUgPDwgMSkgfCBDTUEzMDAwX1JBTkdFOEc7CisJfQorCisJY3RybCB8PSBkYXRhLT5idXNfb3BzLT5jdHJsX21vZDsKKworCUNNQTMwMDBfU0VUKGRhdGEsIENNQTMwMDBfTURUSFIsIHBkYXRhLT5tZHRociwKKwkJICAgICJNb3Rpb24gRGV0ZWN0IFRocmVzaG9sZCIpOworCUNNQTMwMDBfU0VUKGRhdGEsIENNQTMwMDBfTURGRlRNUiwgcGRhdGEtPm1kZmZ0bXIsCisJCSAgICAiVGltZSByZWdpc3RlciIpOworCUNNQTMwMDBfU0VUKGRhdGEsIENNQTMwMDBfRkZUSFIsIHBkYXRhLT5mZnRociwKKwkJICAgICJGcmVlIGZhbGwgdGhyZXNob2xkIik7CisJcmV0ID0gQ01BMzAwMF9TRVQoZGF0YSwgQ01BMzAwMF9DVFJMLCBjdHJsLCAiTW9kZSBzZXR0aW5nIik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiAtRUlPOworCisJbXNsZWVwKENNQTMwMDBfU0VUREVMQVkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY21hMzAwMF9wb3dlcm9mZihzdHJ1Y3QgY21hMzAwMF9hY2NsX2RhdGEgKmRhdGEpCit7CisJaW50IHJldDsKKworCXJldCA9IENNQTMwMDBfU0VUKGRhdGEsIENNQTMwMDBfQ1RSTCwgQ01BTU9ERV9QT0ZGLCAiTW9kZSBzZXR0aW5nIik7CisJbXNsZWVwKENNQTMwMDBfU0VUREVMQVkpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBjbWEzMDAwX29wZW4oc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2KQoreworCXN0cnVjdCBjbWEzMDAwX2FjY2xfZGF0YSAqZGF0YSA9IGlucHV0X2dldF9kcnZkYXRhKGlucHV0X2Rldik7CisKKwltdXRleF9sb2NrKCZkYXRhLT5tdXRleCk7CisKKwlpZiAoIWRhdGEtPnN1c3BlbmRlZCkKKwkJY21hMzAwMF9wb3dlcm9uKGRhdGEpOworCisJZGF0YS0+b3BlbmVkID0gdHJ1ZTsKKworCW11dGV4X3VubG9jaygmZGF0YS0+bXV0ZXgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNtYTMwMDBfY2xvc2Uoc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2KQoreworCXN0cnVjdCBjbWEzMDAwX2FjY2xfZGF0YSAqZGF0YSA9IGlucHV0X2dldF9kcnZkYXRhKGlucHV0X2Rldik7CisKKwltdXRleF9sb2NrKCZkYXRhLT5tdXRleCk7CisKKwlpZiAoIWRhdGEtPnN1c3BlbmRlZCkKKwkJY21hMzAwMF9wb3dlcm9mZihkYXRhKTsKKworCWRhdGEtPm9wZW5lZCA9IGZhbHNlOworCisJbXV0ZXhfdW5sb2NrKCZkYXRhLT5tdXRleCk7Cit9CisKK3ZvaWQgY21hMzAwMF9zdXNwZW5kKHN0cnVjdCBjbWEzMDAwX2FjY2xfZGF0YSAqZGF0YSkKK3sKKwltdXRleF9sb2NrKCZkYXRhLT5tdXRleCk7CisKKwlpZiAoIWRhdGEtPnN1c3BlbmRlZCAmJiBkYXRhLT5vcGVuZWQpCisJCWNtYTMwMDBfcG93ZXJvZmYoZGF0YSk7CisKKwlkYXRhLT5zdXNwZW5kZWQgPSB0cnVlOworCisJbXV0ZXhfdW5sb2NrKCZkYXRhLT5tdXRleCk7Cit9CitFWFBPUlRfU1lNQk9MKGNtYTMwMDBfc3VzcGVuZCk7CisKKwordm9pZCBjbWEzMDAwX3Jlc3VtZShzdHJ1Y3QgY21hMzAwMF9hY2NsX2RhdGEgKmRhdGEpCit7CisJbXV0ZXhfbG9jaygmZGF0YS0+bXV0ZXgpOworCisJaWYgKGRhdGEtPnN1c3BlbmRlZCAmJiBkYXRhLT5vcGVuZWQpCisJCWNtYTMwMDBfcG93ZXJvbihkYXRhKTsKKworCWRhdGEtPnN1c3BlbmRlZCA9IGZhbHNlOworCisJbXV0ZXhfdW5sb2NrKCZkYXRhLT5tdXRleCk7Cit9CitFWFBPUlRfU1lNQk9MKGNtYTMwMDBfcmVzdW1lKTsKKworc3RydWN0IGNtYTMwMDBfYWNjbF9kYXRhICpjbWEzMDAwX2luaXQoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgaXJxLAorCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgY21hMzAwMF9idXNfb3BzICpib3BzKQoreworCWNvbnN0IHN0cnVjdCBjbWEzMDAwX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBjbWEzMDAwX2FjY2xfZGF0YSAqZGF0YTsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7CisJaW50IHJldjsKKwlpbnQgZXJyb3I7CisKKwlpZiAoIXBkYXRhKSB7CisJCWRldl9lcnIoZGV2LCAicGxhdGZvcm0gZGF0YSBub3QgZm91bmRcbiIpOworCQllcnJvciA9IC1FSU5WQUw7CisJCWdvdG8gZXJyX291dDsKKwl9CisKKworCS8qIGlmIG5vIElSUSByZXR1cm4gZXJyb3IgKi8KKwlpZiAoaXJxID09IDApIHsKKwkJZXJyb3IgPSAtRUlOVkFMOworCQlnb3RvIGVycl9vdXQ7CisJfQorCisJZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjbWEzMDAwX2FjY2xfZGF0YSksIEdGUF9LRVJORUwpOworCWlucHV0X2RldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOworCWlmICghZGF0YSB8fCAhaW5wdXRfZGV2KSB7CisJCWVycm9yID0gLUVOT01FTTsKKwkJZ290byBlcnJfZnJlZV9tZW07CisJfQorCisJZGF0YS0+ZGV2ID0gZGV2OworCWRhdGEtPmlucHV0X2RldiA9IGlucHV0X2RldjsKKwlkYXRhLT5idXNfb3BzID0gYm9wczsKKwlkYXRhLT5wZGF0YSA9IHBkYXRhOworCWRhdGEtPmlycSA9IGlycTsKKwltdXRleF9pbml0KCZkYXRhLT5tdXRleCk7CisKKwlkYXRhLT5tb2RlID0gcGRhdGEtPm1vZGU7CisJaWYgKGRhdGEtPm1vZGUgPCBDTUFNT0RFX0RFRkFVTFQgfHwgZGF0YS0+bW9kZSA+IENNQU1PREVfUE9GRikgeworCQlkYXRhLT5tb2RlID0gQ01BTU9ERV9NT1RERVQ7CisJCWRldl93YXJuKGRldiwKKwkJCSAiSW52YWxpZCBtb2RlIHNwZWNpZmllZCwgYXNzdW1pbmcgTW90aW9uIERldGVjdFxuIik7CisJfQorCisJZGF0YS0+Z19yYW5nZSA9IHBkYXRhLT5nX3JhbmdlOworCWlmIChkYXRhLT5nX3JhbmdlICE9IENNQVJBTkdFXzJHICYmIGRhdGEtPmdfcmFuZ2UgIT0gQ01BUkFOR0VfOEcpIHsKKwkJZGV2X2luZm8oZGV2LAorCQkJICJJbnZhbGlkIEcgcmFuZ2Ugc3BlY2lmaWVkLCBhc3N1bWluZyA4R1xuIik7CisJCWRhdGEtPmdfcmFuZ2UgPSBDTUFSQU5HRV84RzsKKwl9CisKKwlpbnB1dF9kZXYtPm5hbWUgPSAiY21hMzAwMC1hY2NlbGVyb21ldGVyIjsKKwlpbnB1dF9kZXYtPmlkLmJ1c3R5cGUgPSBib3BzLT5idXN0eXBlOworCWlucHV0X2Rldi0+b3BlbiA9IGNtYTMwMDBfb3BlbjsKKwlpbnB1dF9kZXYtPmNsb3NlID0gY21hMzAwMF9jbG9zZTsKKworCSBfX3NldF9iaXQoRVZfQUJTLCBpbnB1dF9kZXYtPmV2Yml0KTsKKworCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX1gsCisJCQktZGF0YS0+Z19yYW5nZSwgZGF0YS0+Z19yYW5nZSwgcGRhdGEtPmZ1enpfeCwgMCk7CisJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfWSwKKwkJCS1kYXRhLT5nX3JhbmdlLCBkYXRhLT5nX3JhbmdlLCBwZGF0YS0+ZnV6el95LCAwKTsKKwlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19aLAorCQkJLWRhdGEtPmdfcmFuZ2UsIGRhdGEtPmdfcmFuZ2UsIHBkYXRhLT5mdXp6X3osIDApOworCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX01JU0MsIDAsIDEsIDAsIDApOworCisJaW5wdXRfc2V0X2RydmRhdGEoaW5wdXRfZGV2LCBkYXRhKTsKKworCWVycm9yID0gY21hMzAwMF9yZXNldChkYXRhKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gZXJyX2ZyZWVfbWVtOworCisJcmV2ID0gQ01BMzAwMF9SRUFEKGRhdGEsIENNQTMwMDBfUkVWSUQsICJSZXZpZCIpOworCWlmIChyZXYgPCAwKSB7CisJCWVycm9yID0gcmV2OworCQlnb3RvIGVycl9mcmVlX21lbTsKKwl9CisKKwlwcl9pbmZvKCJDTUEzMDAwIEFjY2VsZXJvbWV0ZXI6IFJldmlzaW9uICV4XG4iLCByZXYpOworCisJZXJyb3IgPSByZXF1ZXN0X3RocmVhZGVkX2lycShpcnEsIE5VTEwsIGNtYTMwMDBfdGhyZWFkX2lycSwKKwkJCQkgICAgIHBkYXRhLT5pcnFmbGFncyB8IElSUUZfT05FU0hPVCwKKwkJCQkgICAgICJjbWEzMDAwX2QweCIsIGRhdGEpOworCWlmIChlcnJvcikgeworCQlkZXZfZXJyKGRldiwgInJlcXVlc3RfdGhyZWFkZWRfaXJxIGZhaWxlZFxuIik7CisJCWdvdG8gZXJyX2ZyZWVfbWVtOworCX0KKworCWVycm9yID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGRhdGEtPmlucHV0X2Rldik7CisJaWYgKGVycm9yKSB7CisJCWRldl9lcnIoZGV2LCAiVW5hYmxlIHRvIHJlZ2lzdGVyIGlucHV0IGRldmljZVxuIik7CisJCWdvdG8gZXJyX2ZyZWVfaXJxOworCX0KKworCXJldHVybiBkYXRhOworCitlcnJfZnJlZV9pcnE6CisJZnJlZV9pcnEoaXJxLCBkYXRhKTsKK2Vycl9mcmVlX21lbToKKwlpbnB1dF9mcmVlX2RldmljZShpbnB1dF9kZXYpOworCWtmcmVlKGRhdGEpOworZXJyX291dDoKKwlyZXR1cm4gRVJSX1BUUihlcnJvcik7Cit9CitFWFBPUlRfU1lNQk9MKGNtYTMwMDBfaW5pdCk7CisKK3ZvaWQgY21hMzAwMF9leGl0KHN0cnVjdCBjbWEzMDAwX2FjY2xfZGF0YSAqZGF0YSkKK3sKKwlmcmVlX2lycShkYXRhLT5pcnEsIGRhdGEpOworCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGRhdGEtPmlucHV0X2Rldik7CisJa2ZyZWUoZGF0YSk7Cit9CitFWFBPUlRfU1lNQk9MKGNtYTMwMDBfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiQ01BMzAwMC1EMHggQWNjZWxlcm9tZXRlciBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkhlbWFudGggViA8aGVtYW50aHZAdGkuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL2NtYTMwMDBfZDB4LmggYi9kcml2ZXJzL2lucHV0L21pc2MvY21hMzAwMF9kMHguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzA0Y2UzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbnB1dC9taXNjL2NtYTMwMDBfZDB4LmgKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIFZUSSBDTUEzMDAwX0QweCBBY2NlbGVyb21ldGVyIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBUZXhhcyBJbnN0cnVtZW50cworICogQXV0aG9yOiBIZW1hbnRoIFYgPGhlbWFudGh2QHRpLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpZm5kZWYgX0lOUFVUX0NNQTMwMDBfSAorI2RlZmluZSBfSU5QVVRfQ01BMzAwMF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisKK3N0cnVjdCBkZXZpY2U7CitzdHJ1Y3QgY21hMzAwMF9hY2NsX2RhdGE7CisKK3N0cnVjdCBjbWEzMDAwX2J1c19vcHMgeworCXUxNiBidXN0eXBlOworCXU4IGN0cmxfbW9kOworCWludCAoKnJlYWQpKHN0cnVjdCBkZXZpY2UgKiwgdTgsIGNoYXIgKik7CisJaW50ICgqd3JpdGUpKHN0cnVjdCBkZXZpY2UgKiwgdTgsIHU4LCBjaGFyICopOworfTsKKworc3RydWN0IGNtYTMwMDBfYWNjbF9kYXRhICpjbWEzMDAwX2luaXQoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgaXJxLAorCQkJCQljb25zdCBzdHJ1Y3QgY21hMzAwMF9idXNfb3BzICpib3BzKTsKK3ZvaWQgY21hMzAwMF9leGl0KHN0cnVjdCBjbWEzMDAwX2FjY2xfZGF0YSAqKTsKK3ZvaWQgY21hMzAwMF9zdXNwZW5kKHN0cnVjdCBjbWEzMDAwX2FjY2xfZGF0YSAqKTsKK3ZvaWQgY21hMzAwMF9yZXN1bWUoc3RydWN0IGNtYTMwMDBfYWNjbF9kYXRhICopOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy9jbWEzMDAwX2QweF9pMmMuYyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9jbWEzMDAwX2QweF9pMmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTAwY2M1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbnB1dC9taXNjL2NtYTMwMDBfZDB4X2kyYy5jCkBAIC0wLDAgKzEsMTQzIEBACisvKgorICogSW1wbGVtZW50cyBJMkMgaW50ZXJmYWNlIGZvciBWVEkgQ01BMzAwX0QweCBBY2NlbGVyb21ldGVyIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBUZXhhcyBJbnN0cnVtZW50cworICogQXV0aG9yOiBIZW1hbnRoIFYgPGhlbWFudGh2QHRpLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC9jbWEzMDAwLmg+CisjaW5jbHVkZSAiY21hMzAwMF9kMHguaCIKKworc3RhdGljIGludCBjbWEzMDAwX2kyY19zZXQoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgdTggcmVnLCB1OCB2YWwsIGNoYXIgKm1zZykKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCWludCByZXQ7CisKKwlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLCB2YWwpOworCWlmIChyZXQgPCAwKQorCQlkZXZfZXJyKCZjbGllbnQtPmRldiwKKwkJCSIlcyBmYWlsZWQgKCVzLCAlZClcbiIsIF9fZnVuY19fLCBtc2csIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBjbWEzMDAwX2kyY19yZWFkKHN0cnVjdCBkZXZpY2UgKmRldiwgdTggcmVnLCBjaGFyICptc2cpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwlpbnQgcmV0OworCisJcmV0ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgcmVnKTsKKwlpZiAocmV0IDwgMCkKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsCisJCQkiJXMgZmFpbGVkICglcywgJWQpXG4iLCBfX2Z1bmNfXywgbXNnLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY21hMzAwMF9idXNfb3BzIGNtYTMwMDBfaTJjX2JvcHMgPSB7CisJLmJ1c3R5cGUJPSBCVVNfSTJDLAorI2RlZmluZSBDTUEzMDAwX0JVU0kyQyAgICAgKDAgPDwgNCkKKwkuY3RybF9tb2QJPSBDTUEzMDAwX0JVU0kyQywKKwkucmVhZAkJPSBjbWEzMDAwX2kyY19yZWFkLAorCS53cml0ZQkJPSBjbWEzMDAwX2kyY19zZXQsCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBjbWEzMDAwX2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IGNtYTMwMDBfYWNjbF9kYXRhICpkYXRhOworCisJZGF0YSA9IGNtYTMwMDBfaW5pdCgmY2xpZW50LT5kZXYsIGNsaWVudC0+aXJxLCAmY21hMzAwMF9pMmNfYm9wcyk7CisJaWYgKElTX0VSUihkYXRhKSkKKwkJcmV0dXJuIFBUUl9FUlIoZGF0YSk7CisKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBkYXRhKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBjbWEzMDAwX2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgY21hMzAwMF9hY2NsX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCWNtYTMwMDBfZXhpdChkYXRhKTsKKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IGNtYTMwMDBfaTJjX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CisJc3RydWN0IGNtYTMwMDBfYWNjbF9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwljbWEzMDAwX3N1c3BlbmQoZGF0YSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjbWEzMDAwX2kyY19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CisJc3RydWN0IGNtYTMwMDBfYWNjbF9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwljbWEzMDAwX3Jlc3VtZShkYXRhKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgY21hMzAwMF9pMmNfcG1fb3BzID0geworCS5zdXNwZW5kCT0gY21hMzAwMF9pMmNfc3VzcGVuZCwKKwkucmVzdW1lCQk9IGNtYTMwMDBfaTJjX3Jlc3VtZSwKK307CisjZW5kaWYKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGNtYTMwMDBfaTJjX2lkW10gPSB7CisJeyAiY21hMzAwMF9kMDEiLCAwIH0sCisJeyB9LAorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGNtYTMwMDBfaTJjX2lkKTsKKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGNtYTMwMDBfaTJjX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gY21hMzAwMF9pMmNfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChjbWEzMDAwX2kyY19yZW1vdmUpLAorCS5pZF90YWJsZQk9IGNtYTMwMDBfaTJjX2lkLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lCT0gImNtYTMwMDBfaTJjX2FjY2wiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKyNpZmRlZiBDT05GSUdfUE0KKwkJLnBtCT0gJmNtYTMwMDBfaTJjX3BtX29wcywKKyNlbmRpZgorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBjbWEzMDAwX2kyY19pbml0KHZvaWQpCit7CisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZjbWEzMDAwX2kyY19kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgY21hMzAwMF9pMmNfZXhpdCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZjbWEzMDAwX2kyY19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChjbWEzMDAwX2kyY19pbml0KTsKK21vZHVsZV9leGl0KGNtYTMwMDBfaTJjX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkNNQTMwMDAtRDB4IEFjY2VsZXJvbWV0ZXIgSTJDIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiSGVtYW50aCBWIDxoZW1hbnRodkB0aS5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21pc2MvcGNmODU3NF9rZXlwYWQuYyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9wY2Y4NTc0X2tleXBhZC5jCmluZGV4IGQxNTgzYWUuLjA4YmUxYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbWlzYy9wY2Y4NTc0X2tleXBhZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9wY2Y4NTc0X2tleXBhZC5jCkBAIC0xNjksMTkgKzE2OSwyOSBAQAogfQogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IHBjZjg1NzRfa3BfcmVzdW1lKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgaW50IHBjZjg1NzRfa3BfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCiAJZW5hYmxlX2lycShjbGllbnQtPmlycSk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBwY2Y4NTc0X2twX3N1c3BlbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgcG1fbWVzc2FnZV90IG1lc2cpCitzdGF0aWMgaW50IHBjZjg1NzRfa3Bfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwogCWRpc2FibGVfaXJxKGNsaWVudC0+aXJxKTsKIAogCXJldHVybiAwOwogfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgcGNmODU3NF9rcF9wbV9vcHMgPSB7CisJLnN1c3BlbmQJPSBwY2Y4NTc0X2twX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBwY2Y4NTc0X2twX3Jlc3VtZSwKK307CisKICNlbHNlCiAjIGRlZmluZSBwY2Y4NTc0X2twX3Jlc3VtZSAgTlVMTAogIyBkZWZpbmUgcGNmODU3NF9rcF9zdXNwZW5kIE5VTEwKQEAgLTE5NywxMSArMjA3LDEyIEBACiAJLmRyaXZlciA9IHsKIAkJLm5hbWUgID0gRFJWX05BTUUsCiAJCS5vd25lciA9IFRISVNfTU9EVUxFLAorI2lmZGVmIENPTkZJR19QTQorCQkucG0gPSAmcGNmODU3NF9rcF9wbV9vcHMsCisjZW5kaWYKIAl9LAogCS5wcm9iZSAgICA9IHBjZjg1NzRfa3BfcHJvYmUsCiAJLnJlbW92ZSAgID0gX19kZXZleGl0X3AocGNmODU3NF9rcF9yZW1vdmUpLAotCS5zdXNwZW5kICA9IHBjZjg1NzRfa3Bfc3VzcGVuZCwKLQkucmVzdW1lICAgPSBwY2Y4NTc0X2twX3Jlc3VtZSwKIAkuaWRfdGFibGUgPSBwY2Y4NTc0X2twX2lkLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL3VpbnB1dC5jIGIvZHJpdmVycy9pbnB1dC9taXNjL3VpbnB1dC5jCmluZGV4IGI5NDEwNzguLjgyNTQyYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbWlzYy91aW5wdXQuYworKysgYi9kcml2ZXJzL2lucHV0L21pc2MvdWlucHV0LmMKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC91aW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC9tdC5oPgogI2luY2x1ZGUgIi4uL2lucHV0LWNvbXBhdC5oIgogCiBzdGF0aWMgaW50IHVpbnB1dF9kZXZfZXZlbnQoc3RydWN0IGlucHV0X2RldiAqZGV2LCB1bnNpZ25lZCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IGNvZGUsIGludCB2YWx1ZSkKQEAgLTQwNiw4ICs0MDcsNyBAQAogCQkJZ290byBleGl0OwogCQlpZiAodGVzdF9iaXQoQUJTX01UX1NMT1QsIGRldi0+YWJzYml0KSkgewogCQkJaW50IG5zbG90ID0gaW5wdXRfYWJzX2dldF9tYXgoZGV2LCBBQlNfTVRfU0xPVCkgKyAxOwotCQkJaW5wdXRfbXRfY3JlYXRlX3Nsb3RzKGRldiwgbnNsb3QpOwotCQkJaW5wdXRfc2V0X2V2ZW50c19wZXJfcGFja2V0KGRldiwgNiAqIG5zbG90KTsKKwkJCWlucHV0X210X2luaXRfc2xvdHMoZGV2LCBuc2xvdCk7CiAJCX0gZWxzZSBpZiAodGVzdF9iaXQoQUJTX01UX1BPU0lUSU9OX1gsIGRldi0+YWJzYml0KSkgewogCQkJaW5wdXRfc2V0X2V2ZW50c19wZXJfcGFja2V0KGRldiwgNjApOwogCQl9CkBAIC02ODAsNiArNjgwLDEwIEBACiAJCQlyZXR2YWwgPSB1aW5wdXRfc2V0X2JpdChhcmcsIHN3Yml0LCBTV19NQVgpOwogCQkJYnJlYWs7CiAKKwkJY2FzZSBVSV9TRVRfUFJPUEJJVDoKKwkJCXJldHZhbCA9IHVpbnB1dF9zZXRfYml0KGFyZywgcHJvcGJpdCwgSU5QVVRfUFJPUF9NQVgpOworCQkJYnJlYWs7CisKIAkJY2FzZSBVSV9TRVRfUEhZUzoKIAkJCWlmICh1ZGV2LT5zdGF0ZSA9PSBVSVNUX0NSRUFURUQpIHsKIAkJCQlyZXR2YWwgPSAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL3dpbmJvbmQtY2lyLmMgYi9kcml2ZXJzL2lucHV0L21pc2Mvd2luYm9uZC1jaXIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjRmMWRlNy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2Mvd2luYm9uZC1jaXIuYworKysgL2Rldi9udWxsCkBAIC0xLDE2MDggKzAsMCBAQAotLyoKLSAqICB3aW5ib25kLWNpci5jIC0gRHJpdmVyIGZvciB0aGUgQ29uc3VtZXIgSVIgZnVuY3Rpb25hbGl0eSBvZiBXaW5ib25kCi0gKiAgICAgICAgICAgICAgICAgIFN1cGVySS9PIGNoaXBzLgotICoKLSAqICBDdXJyZW50bHkgc3VwcG9ydHMgdGhlIFdpbmJvbmQgV1BDRDM3NmkgY2hpcCAoUE5QIGlkIFdFQzEwMjIpLCBidXQKLSAqICBjb3VsZCBwcm9iYWJseSBzdXBwb3J0IG90aGVycyAoV2luYm9uZCBXRUMxMDJYLCBOYXRTZW1pLCBldGMpCi0gKiAgd2l0aCBtaW5vciBtb2RpZmljYXRpb25zLgotICoKLSAqICBPcmlnaW5hbCBBdXRob3I6IERhdmlkIEjkcmRlbWFuIDxkYXZpZEBoYXJkZW1hbi5udT4KLSAqICAgICBDb3B5cmlnaHQgKEMpIDIwMDkgRGF2aWQgSORyZGVtYW4gPGRhdmlkQGhhcmRlbWFuLm51PgotICoKLSAqICBEZWRpY2F0ZWQgdG8gTWF0aWxkYSwgbXkgbmV3Ym9ybiBkYXVnaHRlciwgd2l0aG91dCB3aG9zZSBsb3ZpbmcgYXR0ZW50aW9uCi0gKiAgdGhpcyBkcml2ZXIgd291bGQgaGF2ZSBiZWVuIGZpbmlzaGVkIGluIGhhbGYgdGhlIHRpbWUgYW5kIHdpdGggYSBmcmFjdGlvbgotICogIG9mIHRoZSBidWdzLgotICoKLSAqICBXcml0dGVuIHVzaW5nOgotICogICAgbyBXaW5ib25kIFdQQ0QzNzZJIGRhdGFzaGVldCBoZWxwZnVsbHkgcHJvdmlkZWQgYnkgSmVzc2UgQmFybmVzIGF0IEludGVsCi0gKiAgICBvIE5hdFNlbWkgUEM4NzMzOC9QQzk3MzM4IGRhdGFzaGVldCAoZm9yIHRoZSBzZXJpYWwgcG9ydCBzdHVmZikKLSAqICAgIG8gRFNEVCBkdW1wcwotICoKLSAqICBTdXBwb3J0ZWQgZmVhdHVyZXM6Ci0gKiAgICBvIFJDNgotICogICAgbyBXYWtlLU9uLUNJUiBmdW5jdGlvbmFsaXR5Ci0gKgotICogIFRvIGRvOgotICogICAgbyBUZXN0IE5FQyBhbmQgUkM1Ci0gKgotICogIExlZnQgYXMgYW4gZXhlcmNpc2UgZm9yIHRoZSByZWFkZXI6Ci0gKiAgICBvIExlYXJuaW5nIChJIGhhdmUgbmVpdGhlciB0aGUgaGFyZHdhcmUsIG5vciB0aGUgbmVlZCkKLSAqICAgIG8gSVIgVHJhbnNtaXQgKGliaWQpCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcG5wLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgotI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9wY2lfaWRzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9iaXRyZXYuaD4KLSNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0KLSNkZWZpbmUgRFJWTkFNRSAid2luYm9uZC1jaXIiCi0KLS8qIENFSVIgV2FrZS1VcCBSZWdpc3RlcnMsIHJlbGF0aXZlIHRvIGRhdGEtPndiYXNlICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFdCQ0lSX1JFR19XQ0VJUl9DVEwJMHgwMyAvKiBDRUlSIFJlY2VpdmVyIENvbnRyb2wJCSovCi0jZGVmaW5lIFdCQ0lSX1JFR19XQ0VJUl9TVFMJMHgwNCAvKiBDRUlSIFJlY2VpdmVyIFN0YXR1cwkJKi8KLSNkZWZpbmUgV0JDSVJfUkVHX1dDRUlSX0VWX0VOCTB4MDUgLyogQ0VJUiBSZWNlaXZlciBFdmVudCBFbmFibGUJKi8KLSNkZWZpbmUgV0JDSVJfUkVHX1dDRUlSX0NOVEwJMHgwNiAvKiBDRUlSIFJlY2VpdmVyIENvdW50ZXIgTG93CSovCi0jZGVmaW5lIFdCQ0lSX1JFR19XQ0VJUl9DTlRICTB4MDcgLyogQ0VJUiBSZWNlaXZlciBDb3VudGVyIEhpZ2gJKi8KLSNkZWZpbmUgV0JDSVJfUkVHX1dDRUlSX0lOREVYCTB4MDggLyogQ0VJUiBSZWNlaXZlciBJbmRleAkJKi8KLSNkZWZpbmUgV0JDSVJfUkVHX1dDRUlSX0RBVEEJMHgwOSAvKiBDRUlSIFJlY2VpdmVyIERhdGEJCSovCi0jZGVmaW5lIFdCQ0lSX1JFR19XQ0VJUl9DU0wJMHgwQSAvKiBDRUlSIFJlLiBDb21wYXJlIFN0cmxlbgkJKi8KLSNkZWZpbmUgV0JDSVJfUkVHX1dDRUlSX0NGRzEJMHgwQiAvKiBDRUlSIFJlLiBDb25maWd1cmF0aW9uIDEJKi8KLSNkZWZpbmUgV0JDSVJfUkVHX1dDRUlSX0NGRzIJMHgwQyAvKiBDRUlSIFJlLiBDb25maWd1cmF0aW9uIDIJKi8KLQotLyogQ0VJUiBFbmhhbmNlZCBGdW5jdGlvbmFsaXR5IFJlZ2lzdGVycywgcmVsYXRpdmUgdG8gZGF0YS0+ZWJhc2UgICAgICAgKi8KLSNkZWZpbmUgV0JDSVJfUkVHX0VDRUlSX0NUUwkweDAwIC8qIEVuaGFuY2VkIElSIENvbnRyb2wgU3RhdHVzCSovCi0jZGVmaW5lIFdCQ0lSX1JFR19FQ0VJUl9DQ1RMCTB4MDEgLyogSW5mcmFyZWQgQ291bnRlciBDb250cm9sCSovCi0jZGVmaW5lIFdCQ0lSX1JFR19FQ0VJUl9DTlRfTE8JMHgwMiAvKiBJbmZyYXJlZCBDb3VudGVyIExTQgkJKi8KLSNkZWZpbmUgV0JDSVJfUkVHX0VDRUlSX0NOVF9ISQkweDAzIC8qIEluZnJhcmVkIENvdW50ZXIgTVNCCQkqLwotI2RlZmluZSBXQkNJUl9SRUdfRUNFSVJfSVJFTQkweDA0IC8qIEluZnJhcmVkIEVtaXR0ZXIgU3RhdHVzCQkqLwotCi0vKiBTUDMgQmFua2VkIFJlZ2lzdGVycywgcmVsYXRpdmUgdG8gZGF0YS0+c2Jhc2UgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBXQkNJUl9SRUdfU1AzX0JTUgkweDAzIC8qIEJhbmsgU2VsZWN0LCBhbGwgYmFua3MJCSovCi0JCQkJICAgICAgLyogQmFuayAwCQkJCSovCi0jZGVmaW5lIFdCQ0lSX1JFR19TUDNfUlhEQVRBCTB4MDAgLyogRklGTyBSWCBkYXRhIChyKQkJKi8KLSNkZWZpbmUgV0JDSVJfUkVHX1NQM19UWERBVEEJMHgwMCAvKiBGSUZPIFRYIGRhdGEgKHcpCQkqLwotI2RlZmluZSBXQkNJUl9SRUdfU1AzX0lFUgkweDAxIC8qIEludGVycnVwdCBFbmFibGUJCSovCi0jZGVmaW5lIFdCQ0lSX1JFR19TUDNfRUlSCTB4MDIgLyogRXZlbnQgSWRlbnRpZmljYXRpb24gKHIpCSovCi0jZGVmaW5lIFdCQ0lSX1JFR19TUDNfRkNSCTB4MDIgLyogRklGTyBDb250cm9sICh3KQkJKi8KLSNkZWZpbmUgV0JDSVJfUkVHX1NQM19NQ1IJMHgwNCAvKiBNb2RlIENvbnRyb2wJCQkqLwotI2RlZmluZSBXQkNJUl9SRUdfU1AzX0xTUgkweDA1IC8qIExpbmsgU3RhdHVzCQkJKi8KLSNkZWZpbmUgV0JDSVJfUkVHX1NQM19NU1IJMHgwNiAvKiBNb2RlbSBTdGF0dXMJCQkqLwotI2RlZmluZSBXQkNJUl9SRUdfU1AzX0FTQ1IJMHgwNyAvKiBBdXggU3RhdHVzIGFuZCBDb250cm9sCQkqLwotCQkJCSAgICAgIC8qIEJhbmsgMgkJCQkqLwotI2RlZmluZSBXQkNJUl9SRUdfU1AzX0JHREwJMHgwMCAvKiBCYXVkIERpdmlzb3IgTFNCCQkqLwotI2RlZmluZSBXQkNJUl9SRUdfU1AzX0JHREgJMHgwMSAvKiBCYXVkIERpdmlzb3IgTVNCCQkqLwotI2RlZmluZSBXQkNJUl9SRUdfU1AzX0VYQ1IxCTB4MDIgLyogRXh0ZW5kZWQgQ29udHJvbCAxCQkqLwotI2RlZmluZSBXQkNJUl9SRUdfU1AzX0VYQ1IyCTB4MDQgLyogRXh0ZW5kZWQgQ29udHJvbCAyCQkqLwotI2RlZmluZSBXQkNJUl9SRUdfU1AzX1RYRkxWCTB4MDYgLyogVFggRklGTyBMZXZlbAkJCSovCi0jZGVmaW5lIFdCQ0lSX1JFR19TUDNfUlhGTFYJMHgwNyAvKiBSWCBGSUZPIExldmVsCQkJKi8KLQkJCQkgICAgICAvKiBCYW5rIDMJCQkJKi8KLSNkZWZpbmUgV0JDSVJfUkVHX1NQM19NUklECTB4MDAgLyogTW9kdWxlIElkZW50aWZpY2F0aW9uCQkqLwotI2RlZmluZSBXQkNJUl9SRUdfU1AzX1NIX0xDUgkweDAxIC8qIExDUiBTaGFkb3cJCQkqLwotI2RlZmluZSBXQkNJUl9SRUdfU1AzX1NIX0ZDUgkweDAyIC8qIEZDUiBTaGFkb3cJCQkqLwotCQkJCSAgICAgIC8qIEJhbmsgNAkJCQkqLwotI2RlZmluZSBXQkNJUl9SRUdfU1AzX0lSQ1IxCTB4MDIgLyogSW5mcmFyZWQgQ29udHJvbCAxCQkqLwotCQkJCSAgICAgIC8qIEJhbmsgNQkJCQkqLwotI2RlZmluZSBXQkNJUl9SRUdfU1AzX0lSQ1IyCTB4MDQgLyogSW5mcmFyZWQgQ29udHJvbCAyCQkqLwotCQkJCSAgICAgIC8qIEJhbmsgNgkJCQkqLwotI2RlZmluZSBXQkNJUl9SRUdfU1AzX0lSQ1IzCTB4MDAgLyogSW5mcmFyZWQgQ29udHJvbCAzCQkqLwotI2RlZmluZSBXQkNJUl9SRUdfU1AzX1NJUl9QVwkweDAyIC8qIFNJUiBQdWxzZSBXaWR0aAkJKi8KLQkJCQkgICAgICAvKiBCYW5rIDcJCQkJKi8KLSNkZWZpbmUgV0JDSVJfUkVHX1NQM19JUlJYREMJMHgwMCAvKiBJUiBSWCBEZW1vZCBDb250cm9sCQkqLwotI2RlZmluZSBXQkNJUl9SRUdfU1AzX0lSVFhNQwkweDAxIC8qIElSIFRYIE1vZCBDb250cm9sCQkqLwotI2RlZmluZSBXQkNJUl9SRUdfU1AzX1JDQ0ZHCTB4MDIgLyogQ0VJUiBDb25maWcJCQkqLwotI2RlZmluZSBXQkNJUl9SRUdfU1AzX0lSQ0ZHMQkweDA0IC8qIEluZnJhcmVkIENvbmZpZyAxCQkqLwotI2RlZmluZSBXQkNJUl9SRUdfU1AzX0lSQ0ZHNAkweDA3IC8qIEluZnJhcmVkIENvbmZpZyA0CQkqLwotCi0vKgotICogTWFnaWMgdmFsdWVzIGZvbGxvdwotICovCi0KLS8qIE5vIGludGVycnVwdHMgZm9yIFdCQ0lSX1JFR19TUDNfSUVSIGFuZCBXQkNJUl9SRUdfU1AzX0VJUiAqLwotI2RlZmluZSBXQkNJUl9JUlFfTk9ORQkJMHgwMAotLyogUlggZGF0YSBiaXQgZm9yIFdCQ0lSX1JFR19TUDNfSUVSIGFuZCBXQkNJUl9SRUdfU1AzX0VJUiAqLwotI2RlZmluZSBXQkNJUl9JUlFfUlgJCTB4MDEKLS8qIE92ZXIvVW5kZXItZmxvdyBiaXQgZm9yIFdCQ0lSX1JFR19TUDNfSUVSIGFuZCBXQkNJUl9SRUdfU1AzX0VJUiAqLwotI2RlZmluZSBXQkNJUl9JUlFfRVJSCQkweDA0Ci0vKiBMZWQgZW5hYmxlL2Rpc2FibGUgYml0IGZvciBXQkNJUl9SRUdfRUNFSVJfQ1RTICovCi0jZGVmaW5lIFdCQ0lSX0xFRF9FTkFCTEUJMHg4MAotLyogUlggZGF0YSBhdmFpbGFibGUgYml0IGZvciBXQkNJUl9SRUdfU1AzX0xTUiAqLwotI2RlZmluZSBXQkNJUl9SWF9BVkFJTAkJMHgwMQotLyogUlggZGlzYWJsZSBiaXQgZm9yIFdCQ0lSX1JFR19TUDNfQVNDUiAqLwotI2RlZmluZSBXQkNJUl9SWF9ESVNBQkxFCTB4MjAKLS8qIEV4dGVuZGVkIG1vZGUgZW5hYmxlIGJpdCBmb3IgV0JDSVJfUkVHX1NQM19FWENSMSAqLwotI2RlZmluZSBXQkNJUl9FWFRfRU5BQkxFCTB4MDEKLS8qIFNlbGVjdCBjb21wYXJlIHJlZ2lzdGVyIGluIFdCQ0lSX1JFR19XQ0VJUl9JTkRFWCAoYml0cyA1ICYgNikgKi8KLSNkZWZpbmUgV0JDSVJfUkVHU0VMX0NPTVBBUkUJMHgxMAotLyogU2VsZWN0IG1hc2sgcmVnaXN0ZXIgaW4gV0JDSVJfUkVHX1dDRUlSX0lOREVYIChiaXRzIDUgJiA2KSAqLwotI2RlZmluZSBXQkNJUl9SRUdTRUxfTUFTSwkweDIwCi0vKiBTdGFydGluZyBhZGRyZXNzIG9mIHNlbGVjdGVkIHJlZ2lzdGVyIGluIFdCQ0lSX1JFR19XQ0VJUl9JTkRFWCAqLwotI2RlZmluZSBXQkNJUl9SRUdfQUREUjAJCTB4MDAKLQotLyogVmFsaWQgYmFua3MgZm9yIHRoZSBTUDMgVUFSVCAqLwotZW51bSB3YmNpcl9iYW5rIHsKLQlXQkNJUl9CQU5LXzAgICAgICAgICAgPSAweDAwLAotCVdCQ0lSX0JBTktfMSAgICAgICAgICA9IDB4ODAsCi0JV0JDSVJfQkFOS18yICAgICAgICAgID0gMHhFMCwKLQlXQkNJUl9CQU5LXzMgICAgICAgICAgPSAweEU0LAotCVdCQ0lSX0JBTktfNCAgICAgICAgICA9IDB4RTgsCi0JV0JDSVJfQkFOS181ICAgICAgICAgID0gMHhFQywKLQlXQkNJUl9CQU5LXzYgICAgICAgICAgPSAweEYwLAotCVdCQ0lSX0JBTktfNyAgICAgICAgICA9IDB4RjQsCi19OwotCi0vKiBTdXBwb3J0ZWQgSVIgUHJvdG9jb2xzICovCi1lbnVtIHdiY2lyX3Byb3RvY29sIHsKLQlJUl9QUk9UT0NPTF9SQzUgICAgICAgICAgPSAweDAsCi0JSVJfUFJPVE9DT0xfTkVDICAgICAgICAgID0gMHgxLAotCUlSX1BST1RPQ09MX1JDNiAgICAgICAgICA9IDB4MiwKLX07Ci0KLS8qIE1pc2MgKi8KLSNkZWZpbmUgV0JDSVJfTkFNRQkiV2luYm9uZCBDSVIiCi0jZGVmaW5lIFdCQ0lSX0lEX0ZBTUlMWSAgICAgICAgICAweEYxIC8qIEZhbWlseSBJRCBmb3IgdGhlIFdQQ0QzNzZJCSovCi0jZGVmaW5lCVdCQ0lSX0lEX0NISVAgICAgICAgICAgICAweDA0IC8qIENoaXAgSUQgZm9yIHRoZSBXUENEMzc2SQkqLwotI2RlZmluZSBJUl9LRVlQUkVTU19USU1FT1VUICAgICAgIDI1MCAvKiBGSVhNRTogc2hvdWxkIGJlIHBlci1wcm90b2NvbD8gKi8KLSNkZWZpbmUgSU5WQUxJRF9TQ0FOQ09ERSAgIDB4N0ZGRkZGRkYgLyogSW52YWxpZCB3aXRoIGFsbCBwcm90b3MJKi8KLSNkZWZpbmUgV0FLRVVQX0lPTUVNX0xFTiAgICAgICAgIDB4MTAgLyogV2FrZS1VcCBJL08gUmVnIExlbgkJKi8KLSNkZWZpbmUgRUhGVU5DX0lPTUVNX0xFTiAgICAgICAgIDB4MTAgLyogRW5oYW5jZWQgRnVuYyBJL08gUmVnIExlbgkqLwotI2RlZmluZSBTUF9JT01FTV9MRU4gICAgICAgICAgICAgMHgwOCAvKiBTZXJpYWwgUG9ydCAzIChJUikgUmVnIExlbgkqLwotI2RlZmluZSBXQkNJUl9NQVhfSURMRV9CWVRFUyAgICAgICAxMAotCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKHdiY2lyX2xvY2spOwotc3RhdGljIERFRklORV9SV0xPQ0soa2V5dGFibGVfbG9jayk7Ci0KLXN0cnVjdCB3YmNpcl9rZXkgewotCXUzMiBzY2FuY29kZTsKLQl1bnNpZ25lZCBpbnQga2V5Y29kZTsKLX07Ci0KLXN0cnVjdCB3YmNpcl9rZXllbnRyeSB7Ci0Jc3RydWN0IHdiY2lyX2tleSBrZXk7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotfTsKLQotc3RhdGljIHN0cnVjdCB3YmNpcl9rZXkgcmM2X2RlZl9rZXltYXBbXSA9IHsKLQl7IDB4ODAwRjA0MDAsIEtFWV9OVU1FUklDXzAJCX0sCi0JeyAweDgwMEYwNDAxLCBLRVlfTlVNRVJJQ18xCQl9LAotCXsgMHg4MDBGMDQwMiwgS0VZX05VTUVSSUNfMgkJfSwKLQl7IDB4ODAwRjA0MDMsIEtFWV9OVU1FUklDXzMJCX0sCi0JeyAweDgwMEYwNDA0LCBLRVlfTlVNRVJJQ180CQl9LAotCXsgMHg4MDBGMDQwNSwgS0VZX05VTUVSSUNfNQkJfSwKLQl7IDB4ODAwRjA0MDYsIEtFWV9OVU1FUklDXzYJCX0sCi0JeyAweDgwMEYwNDA3LCBLRVlfTlVNRVJJQ183CQl9LAotCXsgMHg4MDBGMDQwOCwgS0VZX05VTUVSSUNfOAkJfSwKLQl7IDB4ODAwRjA0MDksIEtFWV9OVU1FUklDXzkJCX0sCi0JeyAweDgwMEYwNDFELCBLRVlfTlVNRVJJQ19TVEFSCQl9LAotCXsgMHg4MDBGMDQxQywgS0VZX05VTUVSSUNfUE9VTkQJCX0sCi0JeyAweDgwMEYwNDEwLCBLRVlfVk9MVU1FVVAJCX0sCi0JeyAweDgwMEYwNDExLCBLRVlfVk9MVU1FRE9XTgkJfSwKLQl7IDB4ODAwRjA0MTIsIEtFWV9DSEFOTkVMVVAJCX0sCi0JeyAweDgwMEYwNDEzLCBLRVlfQ0hBTk5FTERPV04JCX0sCi0JeyAweDgwMEYwNDBFLCBLRVlfTVVURQkJCX0sCi0JeyAweDgwMEYwNDBELCBLRVlfVkVORE9SCQl9LCAvKiBWaXN0YSBMb2dvIEtleSAqLwotCXsgMHg4MDBGMDQxRSwgS0VZX1VQCQkJfSwKLQl7IDB4ODAwRjA0MUYsIEtFWV9ET1dOCQkJfSwKLQl7IDB4ODAwRjA0MjAsIEtFWV9MRUZUCQkJfSwKLQl7IDB4ODAwRjA0MjEsIEtFWV9SSUdIVAkJCX0sCi0JeyAweDgwMEYwNDIyLCBLRVlfT0sJCQl9LAotCXsgMHg4MDBGMDQyMywgS0VZX0VTQwkJCX0sCi0JeyAweDgwMEYwNDBGLCBLRVlfSU5GTwkJCX0sCi0JeyAweDgwMEYwNDBBLCBLRVlfQ0xFQVIJCQl9LAotCXsgMHg4MDBGMDQwQiwgS0VZX0VOVEVSCQkJfSwKLQl7IDB4ODAwRjA0NUIsIEtFWV9SRUQJCQl9LAotCXsgMHg4MDBGMDQ1QywgS0VZX0dSRUVOCQkJfSwKLQl7IDB4ODAwRjA0NUQsIEtFWV9ZRUxMT1cJCX0sCi0JeyAweDgwMEYwNDVFLCBLRVlfQkxVRQkJCX0sCi0JeyAweDgwMEYwNDVBLCBLRVlfVEVYVAkJCX0sCi0JeyAweDgwMEYwNDI3LCBLRVlfU1dJVENIVklERU9NT0RFCX0sCi0JeyAweDgwMEYwNDBDLCBLRVlfUE9XRVIJCQl9LAotCXsgMHg4MDBGMDQ1MCwgS0VZX1JBRElPCQkJfSwKLQl7IDB4ODAwRjA0NDgsIEtFWV9QVlIJCQl9LAotCXsgMHg4MDBGMDQ0NywgS0VZX0FVRElPCQkJfSwKLQl7IDB4ODAwRjA0MjYsIEtFWV9FUEcJCQl9LAotCXsgMHg4MDBGMDQ0OSwgS0VZX0NBTUVSQQkJfSwKLQl7IDB4ODAwRjA0MjUsIEtFWV9UVgkJCX0sCi0JeyAweDgwMEYwNDRBLCBLRVlfVklERU8JCQl9LAotCXsgMHg4MDBGMDQyNCwgS0VZX0RWRAkJCX0sCi0JeyAweDgwMEYwNDE2LCBLRVlfUExBWQkJCX0sCi0JeyAweDgwMEYwNDE4LCBLRVlfUEFVU0UJCQl9LAotCXsgMHg4MDBGMDQxOSwgS0VZX1NUT1AJCQl9LAotCXsgMHg4MDBGMDQxNCwgS0VZX0ZBU1RGT1JXQVJECQl9LAotCXsgMHg4MDBGMDQxQSwgS0VZX05FWFQJCQl9LAotCXsgMHg4MDBGMDQxQiwgS0VZX1BSRVZJT1VTCQl9LAotCXsgMHg4MDBGMDQxNSwgS0VZX1JFV0lORAkJfSwKLQl7IDB4ODAwRjA0MTcsIEtFWV9SRUNPUkQJCX0sCi19OwotCi0vKiBSZWdpc3RlcnMgYW5kIG90aGVyIHN0YXRlIGlzIHByb3RlY3RlZCBieSB3YmNpcl9sb2NrICovCi1zdHJ1Y3Qgd2JjaXJfZGF0YSB7Ci0JdW5zaWduZWQgbG9uZyB3YmFzZTsgICAgICAgIC8qIFdha2UtVXAgQmFzZWFkZHIJCSovCi0JdW5zaWduZWQgbG9uZyBlYmFzZTsgICAgICAgIC8qIEVuaGFuY2VkIEZ1bmMuIEJhc2VhZGRyCSovCi0JdW5zaWduZWQgbG9uZyBzYmFzZTsgICAgICAgIC8qIFNlcmlhbCBQb3J0IEJhc2VhZGRyCSovCi0JdW5zaWduZWQgaW50ICBpcnE7ICAgICAgICAgIC8qIFNlcmlhbCBQb3J0IElSUQkJKi8KLQotCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldjsKLQlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcl9rZXl1cDsKLQlzdHJ1Y3QgbGVkX3RyaWdnZXIgKnJ4dHJpZ2dlcjsKLQlzdHJ1Y3QgbGVkX3RyaWdnZXIgKnR4dHJpZ2dlcjsKLQlzdHJ1Y3QgbGVkX2NsYXNzZGV2IGxlZDsKLQotCXUzMiBsYXN0X3NjYW5jb2RlOwotCXVuc2lnbmVkIGludCBsYXN0X2tleWNvZGU7Ci0JdTggbGFzdF90b2dnbGU7Ci0JdTgga2V5cHJlc3NlZDsKLQl1bnNpZ25lZCBsb25nIGtleXVwX2ppZmZpZXM7Ci0JdW5zaWduZWQgaW50IGlkbGVfY291bnQ7Ci0KLQkvKiBSWCBpcmRhdGEgYW5kIHBhcnNpbmcgc3RhdGUgKi8KLQl1bnNpZ25lZCBsb25nIGlyZGF0YVszMF07Ci0JdW5zaWduZWQgaW50IGlyZGF0YV9jb3VudDsKLQl1bnNpZ25lZCBpbnQgaXJkYXRhX2lkbGU7Ci0JdW5zaWduZWQgaW50IGlyZGF0YV9vZmY7Ci0JdW5zaWduZWQgaW50IGlyZGF0YV9lcnJvcjsKLQotCS8qIFByb3RlY3RlZCBieSBrZXl0YWJsZV9sb2NrICovCi0Jc3RydWN0IGxpc3RfaGVhZCBrZXl0YWJsZTsKLX07Ci0KLXN0YXRpYyBlbnVtIHdiY2lyX3Byb3RvY29sIHByb3RvY29sID0gSVJfUFJPVE9DT0xfUkM2OwotbW9kdWxlX3BhcmFtKHByb3RvY29sLCB1aW50LCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MocHJvdG9jb2wsICJJUiBwcm90b2NvbCB0byB1c2UgIgotCQkgIigwID0gUkM1LCAxID0gTkVDLCAyID0gUkM2QSwgZGVmYXVsdCkiKTsKLQotc3RhdGljIGludCBpbnZlcnQ7IC8qIGRlZmF1bHQgPSAwICovCi1tb2R1bGVfcGFyYW0oaW52ZXJ0LCBib29sLCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoaW52ZXJ0LCAiSW52ZXJ0IHRoZSBzaWduYWwgZnJvbSB0aGUgSVIgcmVjZWl2ZXIiKTsKLQotc3RhdGljIHVuc2lnbmVkIGludCB3YWtlX3NjID0gMHg4MDBGMDQwQzsKLW1vZHVsZV9wYXJhbSh3YWtlX3NjLCB1aW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0Mod2FrZV9zYywgIlNjYW5jb2RlIG9mIHRoZSBwb3dlci1vbiBJUiBjb21tYW5kIik7Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgd2FrZV9yYzZtb2RlID0gNjsKLW1vZHVsZV9wYXJhbSh3YWtlX3JjNm1vZGUsIHVpbnQsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyh3YWtlX3JjNm1vZGUsICJSQzYgbW9kZSBmb3IgdGhlIHBvd2VyLW9uIGNvbW1hbmQgIgotCQkgIigwID0gMCwgNiA9IDZBLCBkZWZhdWx0KSIpOwotCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogVVRJTElUWSBGVU5DVElPTlMKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIENhbGxlciBuZWVkcyB0byBob2xkIHdiY2lyX2xvY2sgKi8KLXN0YXRpYyB2b2lkCi13YmNpcl9zZXRfYml0cyh1bnNpZ25lZCBsb25nIGFkZHIsIHU4IGJpdHMsIHU4IG1hc2spCi17Ci0JdTggdmFsOwotCi0JdmFsID0gaW5iKGFkZHIpOwotCXZhbCA9ICgodmFsICYgfm1hc2spIHwgKGJpdHMgJiBtYXNrKSk7Ci0Jb3V0Yih2YWwsIGFkZHIpOwotfQotCi0vKiBTZWxlY3RzIHRoZSByZWdpc3RlciBiYW5rIGZvciB0aGUgc2VyaWFsIHBvcnQgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAotd2JjaXJfc2VsZWN0X2Jhbmsoc3RydWN0IHdiY2lyX2RhdGEgKmRhdGEsIGVudW0gd2JjaXJfYmFuayBiYW5rKQotewotCW91dGIoYmFuaywgZGF0YS0+c2Jhc2UgKyBXQkNJUl9SRUdfU1AzX0JTUik7Ci19Ci0KLXN0YXRpYyBlbnVtIGxlZF9icmlnaHRuZXNzCi13YmNpcl9sZWRfYnJpZ2h0bmVzc19nZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpCi17Ci0Jc3RydWN0IHdiY2lyX2RhdGEgKmRhdGEgPSBjb250YWluZXJfb2YobGVkX2NkZXYsCi0JCQkJCSAgICAgICBzdHJ1Y3Qgd2JjaXJfZGF0YSwKLQkJCQkJICAgICAgIGxlZCk7Ci0KLQlpZiAoaW5iKGRhdGEtPmViYXNlICsgV0JDSVJfUkVHX0VDRUlSX0NUUykgJiBXQkNJUl9MRURfRU5BQkxFKQotCQlyZXR1cm4gTEVEX0ZVTEw7Ci0JZWxzZQotCQlyZXR1cm4gTEVEX09GRjsKLX0KLQotc3RhdGljIHZvaWQKLXdiY2lyX2xlZF9icmlnaHRuZXNzX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwKLQkJCSAgICBlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpCi17Ci0Jc3RydWN0IHdiY2lyX2RhdGEgKmRhdGEgPSBjb250YWluZXJfb2YobGVkX2NkZXYsCi0JCQkJCSAgICAgICBzdHJ1Y3Qgd2JjaXJfZGF0YSwKLQkJCQkJICAgICAgIGxlZCk7Ci0KLQl3YmNpcl9zZXRfYml0cyhkYXRhLT5lYmFzZSArIFdCQ0lSX1JFR19FQ0VJUl9DVFMsCi0JCSAgICAgICBicmlnaHRuZXNzID09IExFRF9PRkYgPyAweDAwIDogV0JDSVJfTEVEX0VOQUJMRSwKLQkJICAgICAgIFdCQ0lSX0xFRF9FTkFCTEUpOwotfQotCi0vKiBNYW5jaGVzdGVyIGVuY29kZXMgYml0cyB0byBSQzYgbWVzc2FnZSBjZWxscyAoc2VlIHdiY2lyX3BhcnNlX3JjNikgKi8KLXN0YXRpYyB1OAotd2JjaXJfdG9fcmM2Y2VsbHModTggdmFsKQotewotCXU4IGNvZGVkID0gMHgwMDsKLQlpbnQgaTsKLQotCXZhbCAmPSAweDBGOwotCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLQkJaWYgKHZhbCAmIDB4MDEpCi0JCQljb2RlZCB8PSAweDAyIDw8IChpICogMik7Ci0JCWVsc2UKLQkJCWNvZGVkIHw9IDB4MDEgPDwgKGkgKiAyKTsKLQkJdmFsID4+PSAxOwotCX0KLQotCXJldHVybiBjb2RlZDsKLX0KLQotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIElOUFVUIEZVTkNUSU9OUwotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIHVuc2lnbmVkIGludAotd2JjaXJfZG9fZ2V0a2V5Y29kZShzdHJ1Y3Qgd2JjaXJfZGF0YSAqZGF0YSwgdTMyIHNjYW5jb2RlKQotewotCXN0cnVjdCB3YmNpcl9rZXllbnRyeSAqa2V5ZW50cnk7Ci0JdW5zaWduZWQgaW50IGtleWNvZGUgPSBLRVlfUkVTRVJWRUQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXJlYWRfbG9ja19pcnFzYXZlKCZrZXl0YWJsZV9sb2NrLCBmbGFncyk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGtleWVudHJ5LCAmZGF0YS0+a2V5dGFibGUsIGxpc3QpIHsKLQkJaWYgKGtleWVudHJ5LT5rZXkuc2NhbmNvZGUgPT0gc2NhbmNvZGUpIHsKLQkJCWtleWNvZGUgPSBrZXllbnRyeS0+a2V5LmtleWNvZGU7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCXJlYWRfdW5sb2NrX2lycXJlc3RvcmUoJmtleXRhYmxlX2xvY2ssIGZsYWdzKTsKLQlyZXR1cm4ga2V5Y29kZTsKLX0KLQotc3RhdGljIGludAotd2JjaXJfZ2V0a2V5Y29kZShzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsCi0JCSB1bnNpZ25lZCBpbnQgc2NhbmNvZGUsIHVuc2lnbmVkIGludCAqa2V5Y29kZSkKLXsKLQlzdHJ1Y3Qgd2JjaXJfZGF0YSAqZGF0YSA9IGlucHV0X2dldF9kcnZkYXRhKGRldik7Ci0KLQkqa2V5Y29kZSA9IHdiY2lyX2RvX2dldGtleWNvZGUoZGF0YSwgc2NhbmNvZGUpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci13YmNpcl9zZXRrZXljb2RlKHN0cnVjdCBpbnB1dF9kZXYgKmRldiwKLQkJIHVuc2lnbmVkIGludCBzY2FuY29kZSwgdW5zaWduZWQgaW50IGtleWNvZGUpCi17Ci0Jc3RydWN0IHdiY2lyX2RhdGEgKmRhdGEgPSBpbnB1dF9nZXRfZHJ2ZGF0YShkZXYpOwotCXN0cnVjdCB3YmNpcl9rZXllbnRyeSAqa2V5ZW50cnk7Ci0Jc3RydWN0IHdiY2lyX2tleWVudHJ5ICpuZXdfa2V5ZW50cnk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBpbnQgb2xkX2tleWNvZGUgPSBLRVlfUkVTRVJWRUQ7Ci0KLQluZXdfa2V5ZW50cnkgPSBrbWFsbG9jKHNpemVvZigqbmV3X2tleWVudHJ5KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFuZXdfa2V5ZW50cnkpCi0JCXJldHVybiAtRU5PTUVNOwotCi0Jd3JpdGVfbG9ja19pcnFzYXZlKCZrZXl0YWJsZV9sb2NrLCBmbGFncyk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGtleWVudHJ5LCAmZGF0YS0+a2V5dGFibGUsIGxpc3QpIHsKLQkJaWYgKGtleWVudHJ5LT5rZXkuc2NhbmNvZGUgIT0gc2NhbmNvZGUpCi0JCQljb250aW51ZTsKLQotCQlvbGRfa2V5Y29kZSA9IGtleWVudHJ5LT5rZXkua2V5Y29kZTsKLQkJa2V5ZW50cnktPmtleS5rZXljb2RlID0ga2V5Y29kZTsKLQotCQlpZiAoa2V5ZW50cnktPmtleS5rZXljb2RlID09IEtFWV9SRVNFUlZFRCkgewotCQkJbGlzdF9kZWwoJmtleWVudHJ5LT5saXN0KTsKLQkJCWtmcmVlKGtleWVudHJ5KTsKLQkJfQotCi0JCWJyZWFrOwotCX0KLQotCXNldF9iaXQoa2V5Y29kZSwgZGV2LT5rZXliaXQpOwotCi0JaWYgKG9sZF9rZXljb2RlID09IEtFWV9SRVNFUlZFRCkgewotCQluZXdfa2V5ZW50cnktPmtleS5zY2FuY29kZSA9IHNjYW5jb2RlOwotCQluZXdfa2V5ZW50cnktPmtleS5rZXljb2RlID0ga2V5Y29kZTsKLQkJbGlzdF9hZGQoJm5ld19rZXllbnRyeS0+bGlzdCwgJmRhdGEtPmtleXRhYmxlKTsKLQl9IGVsc2UgewotCQlrZnJlZShuZXdfa2V5ZW50cnkpOwotCQljbGVhcl9iaXQob2xkX2tleWNvZGUsIGRldi0+a2V5Yml0KTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShrZXllbnRyeSwgJmRhdGEtPmtleXRhYmxlLCBsaXN0KSB7Ci0JCQlpZiAoa2V5ZW50cnktPmtleS5rZXljb2RlID09IG9sZF9rZXljb2RlKSB7Ci0JCQkJc2V0X2JpdChvbGRfa2V5Y29kZSwgZGV2LT5rZXliaXQpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JfQotCi0Jd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmtleXRhYmxlX2xvY2ssIGZsYWdzKTsKLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIFRpbWVyIGZ1bmN0aW9uIHRvIHJlcG9ydCBrZXl1cCBldmVudCBzb21lIHRpbWUgYWZ0ZXIga2V5ZG93biBpcwotICogcmVwb3J0ZWQgYnkgdGhlIElTUi4KLSAqLwotc3RhdGljIHZvaWQKLXdiY2lyX2tleXVwKHVuc2lnbmVkIGxvbmcgY29va2llKQotewotCXN0cnVjdCB3YmNpcl9kYXRhICpkYXRhID0gKHN0cnVjdCB3YmNpcl9kYXRhICopY29va2llOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkvKgotCSAqIGRhdGEtPmtleXVwX2ppZmZpZXMgaXMgdXNlZCB0byBwcmV2ZW50IGEgcmFjZSBjb25kaXRpb24gaWYgYQotCSAqIGhhcmR3YXJlIGludGVycnVwdCBvY2N1cnMgYXQgdGhpcyBwb2ludCBhbmQgdGhlIGtleXVwIHRpbWVyCi0JICogZXZlbnQgaXMgbW92ZWQgZnVydGhlciBpbnRvIHRoZSBmdXR1cmUgYXMgYSByZXN1bHQuCi0JICoKLQkgKiBUaGUgdGltZXIgd2lsbCB0aGVuIGJlIHJlYWN0aXZhdGVkIGFuZCB0aGlzIGZ1bmN0aW9uIGNhbGxlZAotCSAqIGFnYWluIGluIHRoZSBmdXR1cmUuIFdlIG5lZWQgdG8gZXhpdCBncmFjZWZ1bGx5IGluIHRoYXQgY2FzZQotCSAqIHRvIGFsbG93IHRoZSBpbnB1dCBzdWJzeXN0ZW0gdG8gZG8gaXRzIGF1dG8tcmVwZWF0IG1hZ2ljIG9yCi0JICogYSBrZXl1cCBldmVudCBtaWdodCBmb2xsb3cgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGtleWRvd24uCi0JICovCi0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmd2JjaXJfbG9jaywgZmxhZ3MpOwotCi0JaWYgKHRpbWVfaXNfYWZ0ZXJfZXFfamlmZmllcyhkYXRhLT5rZXl1cF9qaWZmaWVzKSAmJiBkYXRhLT5rZXlwcmVzc2VkKSB7Ci0JCWRhdGEtPmtleXByZXNzZWQgPSAwOwotCQlsZWRfdHJpZ2dlcl9ldmVudChkYXRhLT5yeHRyaWdnZXIsIExFRF9PRkYpOwotCQlpbnB1dF9yZXBvcnRfa2V5KGRhdGEtPmlucHV0X2RldiwgZGF0YS0+bGFzdF9rZXljb2RlLCAwKTsKLQkJaW5wdXRfc3luYyhkYXRhLT5pbnB1dF9kZXYpOwotCX0KLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndiY2lyX2xvY2ssIGZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQKLXdiY2lyX2tleWRvd24oc3RydWN0IHdiY2lyX2RhdGEgKmRhdGEsIHUzMiBzY2FuY29kZSwgdTggdG9nZ2xlKQotewotCXVuc2lnbmVkIGludCBrZXljb2RlOwotCi0JLyogUmVwZWF0PyAqLwotCWlmIChkYXRhLT5sYXN0X3NjYW5jb2RlID09IHNjYW5jb2RlICYmCi0JICAgIGRhdGEtPmxhc3RfdG9nZ2xlID09IHRvZ2dsZSAmJgotCSAgICBkYXRhLT5rZXlwcmVzc2VkKQotCQlnb3RvIHNldF90aW1lcjsKLQlkYXRhLT5sYXN0X3NjYW5jb2RlID0gc2NhbmNvZGU7Ci0KLQkvKiBEbyB3ZSBuZWVkIHRvIHJlbGVhc2UgYW4gb2xkIGtleXByZXNzPyAqLwotCWlmIChkYXRhLT5rZXlwcmVzc2VkKSB7Ci0JCWlucHV0X3JlcG9ydF9rZXkoZGF0YS0+aW5wdXRfZGV2LCBkYXRhLT5sYXN0X2tleWNvZGUsIDApOwotCQlpbnB1dF9zeW5jKGRhdGEtPmlucHV0X2Rldik7Ci0JCWRhdGEtPmtleXByZXNzZWQgPSAwOwotCX0KLQotCS8qIFJlcG9ydCBzY2FuY29kZSAqLwotCWlucHV0X2V2ZW50KGRhdGEtPmlucHV0X2RldiwgRVZfTVNDLCBNU0NfU0NBTiwgKGludClzY2FuY29kZSk7Ci0KLQkvKiBEbyB3ZSBrbm93IHRoaXMgc2NhbmNvZGU/ICovCi0Ja2V5Y29kZSA9IHdiY2lyX2RvX2dldGtleWNvZGUoZGF0YSwgc2NhbmNvZGUpOwotCWlmIChrZXljb2RlID09IEtFWV9SRVNFUlZFRCkKLQkJZ290byBzZXRfdGltZXI7Ci0KLQkvKiBSZWdpc3RlciBhIGtleXByZXNzICovCi0JaW5wdXRfcmVwb3J0X2tleShkYXRhLT5pbnB1dF9kZXYsIGtleWNvZGUsIDEpOwotCWRhdGEtPmtleXByZXNzZWQgPSAxOwotCWRhdGEtPmxhc3Rfa2V5Y29kZSA9IGtleWNvZGU7Ci0JZGF0YS0+bGFzdF90b2dnbGUgPSB0b2dnbGU7Ci0KLXNldF90aW1lcjoKLQlpbnB1dF9zeW5jKGRhdGEtPmlucHV0X2Rldik7Ci0JbGVkX3RyaWdnZXJfZXZlbnQoZGF0YS0+cnh0cmlnZ2VyLAotCQkJICBkYXRhLT5rZXlwcmVzc2VkID8gTEVEX0ZVTEwgOiBMRURfT0ZGKTsKLQlkYXRhLT5rZXl1cF9qaWZmaWVzID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoSVJfS0VZUFJFU1NfVElNRU9VVCk7Ci0JbW9kX3RpbWVyKCZkYXRhLT50aW1lcl9rZXl1cCwgZGF0YS0+a2V5dXBfamlmZmllcyk7Ci19Ci0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBJUiBQQVJTSU5HIEZVTkNUSU9OUwotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogUmVzZXRzIGFsbCBpcmRhdGEgKi8KLXN0YXRpYyB2b2lkCi13YmNpcl9yZXNldF9pcmRhdGEoc3RydWN0IHdiY2lyX2RhdGEgKmRhdGEpCi17Ci0JbWVtc2V0KGRhdGEtPmlyZGF0YSwgMCwgc2l6ZW9mKGRhdGEtPmlyZGF0YSkpOwotCWRhdGEtPmlyZGF0YV9jb3VudCA9IDA7Ci0JZGF0YS0+aXJkYXRhX29mZiA9IDA7Ci0JZGF0YS0+aXJkYXRhX2Vycm9yID0gMDsKLQlkYXRhLT5pZGxlX2NvdW50ID0gMDsKLX0KLQotLyogQWRkcyBvbmUgYml0IG9mIGlyZGF0YSAqLwotc3RhdGljIHZvaWQKLWFkZF9pcmRhdGFfYml0KHN0cnVjdCB3YmNpcl9kYXRhICpkYXRhLCBpbnQgc2V0KQotewotCWlmIChkYXRhLT5pcmRhdGFfY291bnQgPj0gc2l6ZW9mKGRhdGEtPmlyZGF0YSkgKiA4KSB7Ci0JCWRhdGEtPmlyZGF0YV9lcnJvciA9IDE7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAoc2V0KQotCQlfX3NldF9iaXQoZGF0YS0+aXJkYXRhX2NvdW50LCBkYXRhLT5pcmRhdGEpOwotCWRhdGEtPmlyZGF0YV9jb3VudCsrOwotfQotCi0vKiBHZXRzIGNvdW50IGJpdHMgb2YgaXJkYXRhICovCi1zdGF0aWMgdTE2Ci1nZXRfYml0cyhzdHJ1Y3Qgd2JjaXJfZGF0YSAqZGF0YSwgaW50IGNvdW50KQotewotCXUxNiB2YWwgPSAweDA7Ci0KLQlpZiAoZGF0YS0+aXJkYXRhX2NvdW50IC0gZGF0YS0+aXJkYXRhX29mZiA8IGNvdW50KSB7Ci0JCWRhdGEtPmlyZGF0YV9lcnJvciA9IDE7Ci0JCXJldHVybiAweDA7Ci0JfQotCi0Jd2hpbGUgKGNvdW50ID4gMCkgewotCQl2YWwgPDw9IDE7Ci0JCWlmICh0ZXN0X2JpdChkYXRhLT5pcmRhdGFfb2ZmLCBkYXRhLT5pcmRhdGEpKQotCQkJdmFsIHw9IDB4MTsKLQkJY291bnQtLTsKLQkJZGF0YS0+aXJkYXRhX29mZisrOwotCX0KLQotCXJldHVybiB2YWw7Ci19Ci0KLS8qIFJlYWRzIDE2IGNlbGxzIGFuZCBjb252ZXJ0cyB0aGVtIHRvIGEgYnl0ZSAqLwotc3RhdGljIHU4Ci13YmNpcl9yYzZjZWxsc190b19ieXRlKHN0cnVjdCB3YmNpcl9kYXRhICpkYXRhKQotewotCXUxNiByYXcgPSBnZXRfYml0cyhkYXRhLCAxNik7Ci0JdTggdmFsID0gMHgwMDsKLQlpbnQgYml0OwotCi0JZm9yIChiaXQgPSAwOyBiaXQgPCA4OyBiaXQrKykgewotCQlzd2l0Y2ggKHJhdyAmIDB4MDMpIHsKLQkJY2FzZSAweDAxOgotCQkJYnJlYWs7Ci0JCWNhc2UgMHgwMjoKLQkJCXZhbCB8PSAoMHgwMSA8PCBiaXQpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlkYXRhLT5pcmRhdGFfZXJyb3IgPSAxOwotCQkJYnJlYWs7Ci0JCX0KLQkJcmF3ID4+PSAyOwotCX0KLQotCXJldHVybiB2YWw7Ci19Ci0KLS8qIERlY29kZXMgYSBudW1iZXIgb2YgYml0cyBmcm9tIHJhdyBSQzUgZGF0YSAqLwotc3RhdGljIHU4Ci13YmNpcl9nZXRfcmM1Yml0cyhzdHJ1Y3Qgd2JjaXJfZGF0YSAqZGF0YSwgdW5zaWduZWQgaW50IGNvdW50KQotewotCXUxNiByYXcgPSBnZXRfYml0cyhkYXRhLCBjb3VudCAqIDIpOwotCXU4IHZhbCA9IDB4MDA7Ci0JaW50IGJpdDsKLQotCWZvciAoYml0ID0gMDsgYml0IDwgY291bnQ7IGJpdCsrKSB7Ci0JCXN3aXRjaCAocmF3ICYgMHgwMykgewotCQljYXNlIDB4MDE6Ci0JCQl2YWwgfD0gKDB4MDEgPDwgYml0KTsKLQkJCWJyZWFrOwotCQljYXNlIDB4MDI6Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWRhdGEtPmlyZGF0YV9lcnJvciA9IDE7Ci0JCQlicmVhazsKLQkJfQotCQlyYXcgPj49IDI7Ci0JfQotCi0JcmV0dXJuIHZhbDsKLX0KLQotc3RhdGljIHZvaWQKLXdiY2lyX3BhcnNlX3JjNihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCB3YmNpcl9kYXRhICpkYXRhKQotewotCS8qCi0JICogTm9ybWFsIGJpdHMgYXJlIG1hbmNoZXN0ZXIgY29kZWQgYXMgZm9sbG93czoKLQkgKiBjZWxsMCArIGNlbGwxID0gbG9naWMgIjAiCi0JICogY2VsbDEgKyBjZWxsMCA9IGxvZ2ljICIxIgotCSAqCi0JICogVGhlIElSIHB1bHNlIGhhcyB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6Ci0JICoKLQkgKiBMZWFkZXIJCS0gNiAqIGNlbGwxIC0gZGlzY2FyZGVkCi0JICogR2FwICAgIAkJLSAyICogY2VsbDAgLSBkaXNjYXJkZWQKLQkgKiBTdGFydCBiaXQJCS0gTm9ybWFsIENvZGluZyAtIGFsd2F5cyAiMSIKLQkgKiBNb2RlIEJpdCAyIC0gMAktIE5vcm1hbCBDb2RpbmcKLQkgKiBUb2dnbGUgYml0CQktIE5vcm1hbCBDb2Rpbmcgd2l0aCBkb3VibGUgYml0IHRpbWUsCi0JICoJCQkgIGUuZy4gY2VsbDAgKyBjZWxsMCArIGNlbGwxICsgY2VsbDEKLQkgKgkJCSAgbWVhbnMgbG9naWMgIjAiLgotCSAqCi0JICogVGhlIHJlc3QgZGVwZW5kcyBvbiB0aGUgbW9kZSwgdGhlIGZvbGxvd2luZyBtb2RlcyBhcmUga25vd246Ci0JICoKLQkgKiBNT0RFIDA6Ci0JICogIEFkZHJlc3MgQml0IDcgLSAwCS0gTm9ybWFsIENvZGluZwotCSAqICBDb21tYW5kIEJpdCA3IC0gMAktIE5vcm1hbCBDb2RpbmcKLQkgKgotCSAqIE1PREUgNjoKLQkgKiAgVGhlIGFib3ZlIFRvZ2dsZSBCaXQgaXMgdXNlZCBhcyBhIHN1Ym1vZGUgYml0LCAwID0gQSwgMSA9IEIuCi0JICogIFN1Ym1vZGUgQiBpcyBmb3IgcG9pbnRpbmcgZGV2aWNlcywgb25seSByZW1vdGVzIHVzaW5nIHN1Ym1vZGUgQQotCSAqICBhcmUgc3VwcG9ydGVkLgotCSAqCi0JICogIEN1c3RvbWVyIHJhbmdlIGJpdAktIDAgPT4gQ3VzdG9tZXIgPSA3IGJpdHMsIDAuLi4xMjcKLQkgKiAgICAgICAgICAgICAgICAgICAgICAgIDEgPT4gQ3VzdG9tZXIgPSAxNSBiaXRzLCAzMjc2OC4uLjY1NTM1Ci0JICogIEN1c3RvbWVyIEJpdHMJLSBOb3JtYWwgQ29kaW5nCi0JICoKLQkgKiAgQ3VzdG9tZXIgY29kZXMgYXJlIGFsbG9jYXRlZCBieSBQaGlsaXBzLiBUaGUgcmVzdCBvZiB0aGUgYml0cwotCSAqICBhcmUgY3VzdG9tZXIgZGVwZW5kZW50LiBUaGUgZm9sbG93aW5nIGlzIGNvbW1vbmx5IHVzZWQgKGFuZCB0aGUKLQkgKiAgb25seSBzdXBwb3J0ZWQgY29uZmlnKToKLQkgKgotCSAqICBUb2dnbGUgQml0CQktIE5vcm1hbCBDb2RpbmcKLQkgKiAgQWRkcmVzcyBCaXQgNiAtIDAJLSBOb3JtYWwgQ29kaW5nCi0JICogIENvbW1hbmQgQml0IDcgLSAwCS0gTm9ybWFsIENvZGluZwotCSAqCi0JICogQWxsIG1vZGVzIGFyZSBmb2xsb3dlZCBieSBhdCBsZWFzdCA2ICogY2VsbDAuCi0JICoKLQkgKiBNT0RFIDAgbXNnbGVuOgotCSAqICAxICogMiAoc3RhcnQgYml0KSArIDMgKiAyIChtb2RlKSArIDIgKiAyICh0b2dnbGUpICsKLQkgKiAgOCAqIDIgKGFkZHJlc3MpICsgOCAqIDIgKGNvbW1hbmQpID0KLQkgKiAgNDQgY2VsbHMKLQkgKgotCSAqIE1PREUgNkEgbXNnbGVuOgotCSAqICAxICogMiAoc3RhcnQgYml0KSArIDMgKiAyIChtb2RlKSArIDIgKiAyIChzdWJtb2RlKSArCi0JICogIDEgKiAyIChjdXN0b21lciByYW5nZSBiaXQpICsgNy8xNSAqIDIgKGN1c3RvbWVyIGJpdHMpICsKLQkgKiAgMSAqIDIgKHRvZ2dsZSBiaXQpICsgNyAqIDIgKGFkZHJlc3MpICsgOCAqIDIgKGNvbW1hbmQpID0KLQkgKiAgNjAgLSA3NiBjZWxscwotCSAqLwotCXU4IG1vZGU7Ci0JdTggdG9nZ2xlOwotCXUxNiBjdXN0b21lciA9IDB4MDsKLQl1OCBhZGRyZXNzOwotCXU4IGNvbW1hbmQ7Ci0JdTMyIHNjYW5jb2RlOwotCi0JLyogTGVhZGVyIG1hcmsgKi8KLQl3aGlsZSAoZ2V0X2JpdHMoZGF0YSwgMSkgJiYgIWRhdGEtPmlyZGF0YV9lcnJvcikKLQkJLyogRG8gbm90aGluZyAqLzsKLQotCS8qIExlYWRlciBzcGFjZSAqLwotCWlmIChnZXRfYml0cyhkYXRhLCAxKSkgewotCQlkZXZfZGJnKGRldiwgIlJDNiAtIEludmFsaWQgbGVhZGVyIHNwYWNlXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qIFN0YXJ0IGJpdCAqLwotCWlmIChnZXRfYml0cyhkYXRhLCAyKSAhPSAweDAyKSB7Ci0JCWRldl9kYmcoZGV2LCAiUkM2IC0gSW52YWxpZCBzdGFydCBiaXRcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JLyogTW9kZSAqLwotCW1vZGUgPSBnZXRfYml0cyhkYXRhLCA2KTsKLQlzd2l0Y2ggKG1vZGUpIHsKLQljYXNlIDB4MTU6IC8qIDAxMDEwMSA9IGIwMDAgKi8KLQkJbW9kZSA9IDA7Ci0JCWJyZWFrOwotCWNhc2UgMHgyOTogLyogMTAxMDAxID0gYjExMCAqLwotCQltb2RlID0gNjsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZGV2X2RiZyhkZXYsICJSQzYgLSBJbnZhbGlkIG1vZGVcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JLyogVG9nZ2xlIGJpdCAvIFN1Ym1vZGUgYml0ICovCi0JdG9nZ2xlID0gZ2V0X2JpdHMoZGF0YSwgNCk7Ci0Jc3dpdGNoICh0b2dnbGUpIHsKLQljYXNlIDB4MDM6Ci0JCXRvZ2dsZSA9IDA7Ci0JCWJyZWFrOwotCWNhc2UgMHgwQzoKLQkJdG9nZ2xlID0gMTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZGV2X2RiZyhkZXYsICJSQzYgLSBUb2dnbGUgYml0IGVycm9yXG4iKTsKLQkJYnJlYWs7Ci0JfQotCi0JLyogQ3VzdG9tZXIgKi8KLQlpZiAobW9kZSA9PSA2KSB7Ci0JCWlmICh0b2dnbGUgIT0gMCkgewotCQkJZGV2X2RiZyhkZXYsICJSQzZCIC0gTm90IFN1cHBvcnRlZFxuIik7Ci0JCQlyZXR1cm47Ci0JCX0KLQotCQljdXN0b21lciA9IHdiY2lyX3JjNmNlbGxzX3RvX2J5dGUoZGF0YSk7Ci0KLQkJaWYgKGN1c3RvbWVyICYgMHg4MCkgewotCQkJLyogMTUgYml0IGN1c3RvbWVyIHZhbHVlICovCi0JCQljdXN0b21lciA8PD0gODsKLQkJCWN1c3RvbWVyIHw9IHdiY2lyX3JjNmNlbGxzX3RvX2J5dGUoZGF0YSk7Ci0JCX0KLQl9Ci0KLQkvKiBBZGRyZXNzICovCi0JYWRkcmVzcyA9IHdiY2lyX3JjNmNlbGxzX3RvX2J5dGUoZGF0YSk7Ci0JaWYgKG1vZGUgPT0gNikgewotCQl0b2dnbGUgPSBhZGRyZXNzID4+IDc7Ci0JCWFkZHJlc3MgJj0gMHg3RjsKLQl9Ci0KLQkvKiBDb21tYW5kICovCi0JY29tbWFuZCA9IHdiY2lyX3JjNmNlbGxzX3RvX2J5dGUoZGF0YSk7Ci0KLQkvKiBDcmVhdGUgc2NhbmNvZGUgKi8KLQlzY2FuY29kZSA9ICBjb21tYW5kOwotCXNjYW5jb2RlIHw9IGFkZHJlc3MgPDwgODsKLQlzY2FuY29kZSB8PSBjdXN0b21lciA8PCAxNjsKLQotCS8qIExhc3Qgc2FuaXR5IGNoZWNrICovCi0JaWYgKGRhdGEtPmlyZGF0YV9lcnJvcikgewotCQlkZXZfZGJnKGRldiwgIlJDNiAtIENlbGwgZXJyb3IocylcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JZGV2X2RiZyhkZXYsICJJUi1SQzYgYWQgMHglMDJYIGNtIDB4JTAyWCBjdSAweCUwNFggIgotCQkidG9nZ2xlICV1IG1vZGUgJXUgc2NhbiAweCUwOFhcbiIsCi0JCWFkZHJlc3MsCi0JCWNvbW1hbmQsCi0JCWN1c3RvbWVyLAotCQkodW5zaWduZWQgaW50KXRvZ2dsZSwKLQkJKHVuc2lnbmVkIGludCltb2RlLAotCQlzY2FuY29kZSk7Ci0KLQl3YmNpcl9rZXlkb3duKGRhdGEsIHNjYW5jb2RlLCB0b2dnbGUpOwotfQotCi1zdGF0aWMgdm9pZAotd2JjaXJfcGFyc2VfcmM1KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHdiY2lyX2RhdGEgKmRhdGEpCi17Ci0JLyoKLQkgKiBCaXRzIGFyZSBtYW5jaGVzdGVyIGNvZGVkIGFzIGZvbGxvd3M6Ci0JICogY2VsbDEgKyBjZWxsMCA9IGxvZ2ljICIwIgotCSAqIGNlbGwwICsgY2VsbDEgPSBsb2dpYyAiMSIKLQkgKiAoaS5lLiB0aGUgcmV2ZXJzZSBvZiBSQzYpCi0JICoKLQkgKiBTdGFydCBiaXQgMQkJLSAiMSIgLSBkaXNjYXJkZWQKLQkgKiBTdGFydCBiaXQgMgkJLSBNdXN0IGJlIGludmVydGVkIHRvIGdldCBjb21tYW5kIGJpdCA2Ci0JICogVG9nZ2xlIGJpdAotCSAqIEFkZHJlc3MgQml0IDQgLSAwCi0JICogQ29tbWFuZCBCaXQgNSAtIDAKLQkgKi8KLQl1OCB0b2dnbGU7Ci0JdTggYWRkcmVzczsKLQl1OCBjb21tYW5kOwotCXUzMiBzY2FuY29kZTsKLQotCS8qIFN0YXJ0IGJpdCAxICovCi0JaWYgKCFnZXRfYml0cyhkYXRhLCAxKSkgewotCQlkZXZfZGJnKGRldiwgIlJDNSAtIEludmFsaWQgc3RhcnQgYml0XG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qIFN0YXJ0IGJpdCAyICovCi0JaWYgKCF3YmNpcl9nZXRfcmM1Yml0cyhkYXRhLCAxKSkKLQkJY29tbWFuZCA9IDB4NDA7Ci0JZWxzZQotCQljb21tYW5kID0gMHgwMDsKLQotCXRvZ2dsZSAgID0gd2JjaXJfZ2V0X3JjNWJpdHMoZGF0YSwgMSk7Ci0JYWRkcmVzcyAgPSB3YmNpcl9nZXRfcmM1Yml0cyhkYXRhLCA1KTsKLQljb21tYW5kIHw9IHdiY2lyX2dldF9yYzViaXRzKGRhdGEsIDYpOwotCXNjYW5jb2RlID0gYWRkcmVzcyA8PCA3IHwgY29tbWFuZDsKLQotCS8qIExhc3Qgc2FuaXR5IGNoZWNrICovCi0JaWYgKGRhdGEtPmlyZGF0YV9lcnJvcikgewotCQlkZXZfZGJnKGRldiwgIlJDNSAtIEludmFsaWQgbWVzc2FnZVxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlkZXZfZGJnKGRldiwgIklSLVJDNSBhZCAldSBjbSAldSB0ICV1IHMgJXVcbiIsCi0JCSh1bnNpZ25lZCBpbnQpYWRkcmVzcywKLQkJKHVuc2lnbmVkIGludCljb21tYW5kLAotCQkodW5zaWduZWQgaW50KXRvZ2dsZSwKLQkJKHVuc2lnbmVkIGludClzY2FuY29kZSk7Ci0KLQl3YmNpcl9rZXlkb3duKGRhdGEsIHNjYW5jb2RlLCB0b2dnbGUpOwotfQotCi1zdGF0aWMgdm9pZAotd2JjaXJfcGFyc2VfbmVjKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHdiY2lyX2RhdGEgKmRhdGEpCi17Ci0JLyoKLQkgKiBFYWNoIGJpdCByZXByZXNlbnRzIDU2MCB1cy4KLQkgKgotCSAqIExlYWRlcgkJLSA5IG1zIGJ1cnN0Ci0JICogR2FwCQkJLSA0LjUgbXMgc2lsZW5jZQotCSAqIEFkZHJlc3MxIGJpdCAwIC0gNwktIEFkZHJlc3MgMQotCSAqIEFkZHJlc3MyIGJpdCAwIC0gNwktIEFkZHJlc3MgMgotCSAqIENvbW1hbmQxIGJpdCAwIC0gNwktIENvbW1hbmQgMQotCSAqIENvbW1hbmQyIGJpdCAwIC0gNwktIENvbW1hbmQgMgotCSAqCi0JICogTm90ZSB0aGUgYml0IG9yZGVyIQotCSAqCi0JICogV2l0aCB0aGUgb2xkIE5FQyBwcm90b2NvbCwgQWRkcmVzczIgd2FzIHRoZSBpbnZlcnNlIG9mIEFkZHJlc3MxCi0JICogYW5kIENvbW1hbmQyIHdhcyB0aGUgaW52ZXJzZSBvZiBDb21tYW5kMSBhbmQgd2VyZSB1c2VkIGFzCi0JICogYW4gZXJyb3IgY2hlY2suCi0JICoKLQkgKiBXaXRoIE5FQyBleHRlbmRlZCwgQWRkcmVzczEgaXMgdGhlIExTQiBvZiB0aGUgQWRkcmVzcyBhbmQKLQkgKiBBZGRyZXNzMiBpcyB0aGUgTVNCLCBDb21tYW5kIHBhcnNpbmcgcmVtYWlucyB1bmNoYW5nZWQuCi0JICoKLQkgKiBBIHJlcGVhdCBtZXNzYWdlIGlzIGNvZGVkIGFzOgotCSAqIExlYWRlcgkJLSA5IG1zIGJ1cnN0Ci0JICogR2FwCQkJLSAyLjI1IG1zIHNpbGVuY2UKLQkgKiBSZXBlYXQJCS0gNTYwIHVzIGFjdGl2ZQotCSAqLwotCXU4IGFkZHJlc3MxOwotCXU4IGFkZHJlc3MyOwotCXU4IGNvbW1hbmQxOwotCXU4IGNvbW1hbmQyOwotCXUxNiBhZGRyZXNzOwotCXUzMiBzY2FuY29kZTsKLQotCS8qIExlYWRlciBtYXJrICovCi0Jd2hpbGUgKGdldF9iaXRzKGRhdGEsIDEpICYmICFkYXRhLT5pcmRhdGFfZXJyb3IpCi0JCS8qIERvIG5vdGhpbmcgKi87Ci0KLQkvKiBMZWFkZXIgc3BhY2UgKi8KLQlpZiAoZ2V0X2JpdHMoZGF0YSwgNCkpIHsKLQkJZGV2X2RiZyhkZXYsICJORUMgLSBJbnZhbGlkIGxlYWRlciBzcGFjZVxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBSZXBlYXQ/ICovCi0JaWYgKGdldF9iaXRzKGRhdGEsIDEpKSB7Ci0JCWlmICghZGF0YS0+a2V5cHJlc3NlZCkgewotCQkJZGV2X2RiZyhkZXYsICJORUMgLSBTdHJheSByZXBlYXQgbWVzc2FnZVxuIik7Ci0JCQlyZXR1cm47Ci0JCX0KLQotCQlkZXZfZGJnKGRldiwgIklSLU5FQyByZXBlYXQgcyAldVxuIiwKLQkJCSh1bnNpZ25lZCBpbnQpZGF0YS0+bGFzdF9zY2FuY29kZSk7Ci0KLQkJd2JjaXJfa2V5ZG93bihkYXRhLCBkYXRhLT5sYXN0X3NjYW5jb2RlLCBkYXRhLT5sYXN0X3RvZ2dsZSk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBSZW1haW5pbmcgbGVhZGVyIHNwYWNlICovCi0JaWYgKGdldF9iaXRzKGRhdGEsIDMpKSB7Ci0JCWRldl9kYmcoZGV2LCAiTkVDIC0gSW52YWxpZCBsZWFkZXIgc3BhY2VcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JYWRkcmVzczEgID0gYml0cmV2OChnZXRfYml0cyhkYXRhLCA4KSk7Ci0JYWRkcmVzczIgID0gYml0cmV2OChnZXRfYml0cyhkYXRhLCA4KSk7Ci0JY29tbWFuZDEgID0gYml0cmV2OChnZXRfYml0cyhkYXRhLCA4KSk7Ci0JY29tbWFuZDIgID0gYml0cmV2OChnZXRfYml0cyhkYXRhLCA4KSk7Ci0KLQkvKiBTYW5pdHkgY2hlY2sgKi8KLQlpZiAoZGF0YS0+aXJkYXRhX2Vycm9yKSB7Ci0JCWRldl9kYmcoZGV2LCAiTkVDIC0gSW52YWxpZCBtZXNzYWdlXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qIENoZWNrIGNvbW1hbmQgdmFsaWRpdHkgKi8KLQlpZiAoY29tbWFuZDEgIT0gfmNvbW1hbmQyKSB7Ci0JCWRldl9kYmcoZGV2LCAiTkVDIC0gQ29tbWFuZCBieXRlcyBtaXNtYXRjaFxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBDaGVjayBmb3IgZXh0ZW5kZWQgTkVDIHByb3RvY29sICovCi0JYWRkcmVzcyA9IGFkZHJlc3MxOwotCWlmIChhZGRyZXNzMSAhPSB+YWRkcmVzczIpCi0JCWFkZHJlc3MgfD0gYWRkcmVzczIgPDwgODsKLQotCXNjYW5jb2RlID0gYWRkcmVzcyA8PCA4IHwgY29tbWFuZDE7Ci0KLQlkZXZfZGJnKGRldiwgIklSLU5FQyBhZCAldSBjbSAldSBzICV1XG4iLAotCQkodW5zaWduZWQgaW50KWFkZHJlc3MsCi0JCSh1bnNpZ25lZCBpbnQpY29tbWFuZDEsCi0JCSh1bnNpZ25lZCBpbnQpc2NhbmNvZGUpOwotCi0Jd2JjaXJfa2V5ZG93bihkYXRhLCBzY2FuY29kZSwgIWRhdGEtPmxhc3RfdG9nZ2xlKTsKLX0KLQotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIElOVEVSUlVQVCBGVU5DVElPTlMKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyBpcnFyZXR1cm5fdAotd2JjaXJfaXJxX2hhbmRsZXIoaW50IGlycW5vLCB2b2lkICpjb29raWUpCi17Ci0Jc3RydWN0IHBucF9kZXYgKmRldmljZSA9IGNvb2tpZTsKLQlzdHJ1Y3Qgd2JjaXJfZGF0YSAqZGF0YSA9IHBucF9nZXRfZHJ2ZGF0YShkZXZpY2UpOwotCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZkZXZpY2UtPmRldjsKLQl1OCBzdGF0dXM7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1OCBpcmRhdGFbOF07Ci0JaW50IGk7Ci0JdW5zaWduZWQgaW50IGh3OwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJndiY2lyX2xvY2ssIGZsYWdzKTsKLQotCXdiY2lyX3NlbGVjdF9iYW5rKGRhdGEsIFdCQ0lSX0JBTktfMCk7Ci0KLQlzdGF0dXMgPSBpbmIoZGF0YS0+c2Jhc2UgKyBXQkNJUl9SRUdfU1AzX0VJUik7Ci0KLQlpZiAoIShzdGF0dXMgJiAoV0JDSVJfSVJRX1JYIHwgV0JDSVJfSVJRX0VSUikpKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndiY2lyX2xvY2ssIGZsYWdzKTsKLQkJcmV0dXJuIElSUV9OT05FOwotCX0KLQotCWlmIChzdGF0dXMgJiBXQkNJUl9JUlFfRVJSKQotCQlkYXRhLT5pcmRhdGFfZXJyb3IgPSAxOwotCi0JaWYgKCEoc3RhdHVzICYgV0JDSVJfSVJRX1JYKSkKLQkJZ290byBvdXQ7Ci0KLQkvKiBTaW5jZSBSWEhETEVWIGlzIHNldCwgYXQgbGVhc3QgOCBieXRlcyBhcmUgaW4gdGhlIEZJRk8gKi8KLQlpbnNiKGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19SWERBVEEsICZpcmRhdGFbMF0sIDgpOwotCi0JZm9yIChpID0gMDsgaSA8IHNpemVvZihpcmRhdGEpOyBpKyspIHsKLQkJaHcgPSBod2VpZ2h0OChpcmRhdGFbaV0pOwotCQlpZiAoaHcgPiA0KQotCQkJYWRkX2lyZGF0YV9iaXQoZGF0YSwgMCk7Ci0JCWVsc2UKLQkJCWFkZF9pcmRhdGFfYml0KGRhdGEsIDEpOwotCi0JCWlmIChodyA9PSA4KQotCQkJZGF0YS0+aWRsZV9jb3VudCsrOwotCQllbHNlCi0JCQlkYXRhLT5pZGxlX2NvdW50ID0gMDsKLQl9Ci0KLQlpZiAoZGF0YS0+aWRsZV9jb3VudCA+IFdCQ0lSX01BWF9JRExFX0JZVEVTKSB7Ci0JCS8qIFNldCBSWElOQUNUSVZFLi4uICovCi0JCW91dGIoV0JDSVJfUlhfRElTQUJMRSwgZGF0YS0+c2Jhc2UgKyBXQkNJUl9SRUdfU1AzX0FTQ1IpOwotCi0JCS8qIC4uLmFuZCBkcmFpbiB0aGUgRklGTyAqLwotCQl3aGlsZSAoaW5iKGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19MU1IpICYgV0JDSVJfUlhfQVZBSUwpCi0JCQlpbmIoZGF0YS0+c2Jhc2UgKyBXQkNJUl9SRUdfU1AzX1JYREFUQSk7Ci0KLQkJZGV2X2RiZyhkZXYsICJJUkRBVEE6XG4iKTsKLQkJZm9yIChpID0gMDsgaSA8IGRhdGEtPmlyZGF0YV9jb3VudDsgaSArPSBCSVRTX1BFUl9MT05HKQotCQkJZGV2X2RiZyhkZXYsICIweCUwOGxYXG4iLCBkYXRhLT5pcmRhdGFbaS9CSVRTX1BFUl9MT05HXSk7Ci0KLQkJc3dpdGNoIChwcm90b2NvbCkgewotCQljYXNlIElSX1BST1RPQ09MX1JDNToKLQkJCXdiY2lyX3BhcnNlX3JjNShkZXYsIGRhdGEpOwotCQkJYnJlYWs7Ci0JCWNhc2UgSVJfUFJPVE9DT0xfUkM2OgotCQkJd2JjaXJfcGFyc2VfcmM2KGRldiwgZGF0YSk7Ci0JCQlicmVhazsKLQkJY2FzZSBJUl9QUk9UT0NPTF9ORUM6Ci0JCQl3YmNpcl9wYXJzZV9uZWMoZGV2LCBkYXRhKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJd2JjaXJfcmVzZXRfaXJkYXRhKGRhdGEpOwotCX0KLQotb3V0OgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndiY2lyX2xvY2ssIGZsYWdzKTsKLQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci19Ci0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBTRVRVUC9JTklUL1NVU1BFTkQvUkVTVU1FIEZVTkNUSU9OUwotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIHZvaWQKLXdiY2lyX3NodXRkb3duKHN0cnVjdCBwbnBfZGV2ICpkZXZpY2UpCi17Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gJmRldmljZS0+ZGV2OwotCXN0cnVjdCB3YmNpcl9kYXRhICpkYXRhID0gcG5wX2dldF9kcnZkYXRhKGRldmljZSk7Ci0JaW50IGRvX3dha2UgPSAxOwotCXU4IG1hdGNoWzExXTsKLQl1OCBtYXNrWzExXTsKLQl1OCByYzZfY3NsID0gMDsKLQlpbnQgaTsKLQotCW1lbXNldChtYXRjaCwgMCwgc2l6ZW9mKG1hdGNoKSk7Ci0JbWVtc2V0KG1hc2ssIDAsIHNpemVvZihtYXNrKSk7Ci0KLQlpZiAod2FrZV9zYyA9PSBJTlZBTElEX1NDQU5DT0RFIHx8ICFkZXZpY2VfbWF5X3dha2V1cChkZXYpKSB7Ci0JCWRvX3dha2UgPSAwOwotCQlnb3RvIGZpbmlzaDsKLQl9Ci0KLQlzd2l0Y2ggKHByb3RvY29sKSB7Ci0JY2FzZSBJUl9QUk9UT0NPTF9SQzU6Ci0JCWlmICh3YWtlX3NjID4gMHhGRkYpIHsKLQkJCWRvX3dha2UgPSAwOwotCQkJZGV2X2VycihkZXYsICJSQzUgLSBJbnZhbGlkIHdha2Ugc2NhbmNvZGVcbiIpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQkvKiBNYXNrID0gMTMgYml0cywgZXggdG9nZ2xlICovCi0JCW1hc2tbMF0gPSAweEZGOwotCQltYXNrWzFdID0gMHgxNzsKLQotCQltYXRjaFswXSAgPSAod2FrZV9zYyAmIDB4MDAzRik7ICAgICAgLyogNiBjb21tYW5kIGJpdHMgKi8KLQkJbWF0Y2hbMF0gfD0gKHdha2Vfc2MgJiAweDAxODApID4+IDE7IC8qIDIgYWRkcmVzcyBiaXRzICovCi0JCW1hdGNoWzFdICA9ICh3YWtlX3NjICYgMHgwRTAwKSA+PiA5OyAvKiAzIGFkZHJlc3MgYml0cyAqLwotCQlpZiAoISh3YWtlX3NjICYgMHgwMDQwKSkgICAgICAgICAgICAgLyogMm5kIHN0YXJ0IGJpdCAgKi8KLQkJCW1hdGNoWzFdIHw9IDB4MTA7Ci0KLQkJYnJlYWs7Ci0KLQljYXNlIElSX1BST1RPQ09MX05FQzoKLQkJaWYgKHdha2Vfc2MgPiAweEZGRkZGRikgewotCQkJZG9fd2FrZSA9IDA7Ci0JCQlkZXZfZXJyKGRldiwgIk5FQyAtIEludmFsaWQgd2FrZSBzY2FuY29kZVxuIik7Ci0JCQlicmVhazsKLQkJfQotCi0JCW1hc2tbMF0gPSBtYXNrWzFdID0gbWFza1syXSA9IG1hc2tbM10gPSAweEZGOwotCi0JCW1hdGNoWzFdID0gYml0cmV2OCgod2FrZV9zYyAmIDB4RkYpKTsKLQkJbWF0Y2hbMF0gPSB+bWF0Y2hbMV07Ci0KLQkJbWF0Y2hbM10gPSBiaXRyZXY4KCh3YWtlX3NjICYgMHhGRjAwKSA+PiA4KTsKLQkJaWYgKHdha2Vfc2MgPiAweEZGRkYpCi0JCQltYXRjaFsyXSA9IGJpdHJldjgoKHdha2Vfc2MgJiAweEZGMDAwMCkgPj4gMTYpOwotCQllbHNlCi0JCQltYXRjaFsyXSA9IH5tYXRjaFszXTsKLQotCQlicmVhazsKLQotCWNhc2UgSVJfUFJPVE9DT0xfUkM2OgotCi0JCWlmICh3YWtlX3JjNm1vZGUgPT0gMCkgewotCQkJaWYgKHdha2Vfc2MgPiAweEZGRkYpIHsKLQkJCQlkb193YWtlID0gMDsKLQkJCQlkZXZfZXJyKGRldiwgIlJDNiAtIEludmFsaWQgd2FrZSBzY2FuY29kZVxuIik7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0KLQkJCS8qIENvbW1hbmQgKi8KLQkJCW1hdGNoWzBdID0gd2JjaXJfdG9fcmM2Y2VsbHMod2FrZV9zYyA+PiAgMCk7Ci0JCQltYXNrWzBdICA9IDB4RkY7Ci0JCQltYXRjaFsxXSA9IHdiY2lyX3RvX3JjNmNlbGxzKHdha2Vfc2MgPj4gIDQpOwotCQkJbWFza1sxXSAgPSAweEZGOwotCi0JCQkvKiBBZGRyZXNzICovCi0JCQltYXRjaFsyXSA9IHdiY2lyX3RvX3JjNmNlbGxzKHdha2Vfc2MgPj4gIDgpOwotCQkJbWFza1syXSAgPSAweEZGOwotCQkJbWF0Y2hbM10gPSB3YmNpcl90b19yYzZjZWxscyh3YWtlX3NjID4+IDEyKTsKLQkJCW1hc2tbM10gID0gMHhGRjsKLQotCQkJLyogSGVhZGVyICovCi0JCQltYXRjaFs0XSA9IDB4NTA7IC8qIG1vZGUxID0gbW9kZTAgPSAwLCBpZ25vcmUgdG9nZ2xlICovCi0JCQltYXNrWzRdICA9IDB4RjA7Ci0JCQltYXRjaFs1XSA9IDB4MDk7IC8qIHN0YXJ0IGJpdCA9IDEsIG1vZGUyID0gMCAqLwotCQkJbWFza1s1XSAgPSAweDBGOwotCi0JCQlyYzZfY3NsID0gNDQ7Ci0KLQkJfSBlbHNlIGlmICh3YWtlX3JjNm1vZGUgPT0gNikgewotCQkJaSA9IDA7Ci0KLQkJCS8qIENvbW1hbmQgKi8KLQkJCW1hdGNoW2ldICA9IHdiY2lyX3RvX3JjNmNlbGxzKHdha2Vfc2MgPj4gIDApOwotCQkJbWFza1tpKytdID0gMHhGRjsKLQkJCW1hdGNoW2ldICA9IHdiY2lyX3RvX3JjNmNlbGxzKHdha2Vfc2MgPj4gIDQpOwotCQkJbWFza1tpKytdID0gMHhGRjsKLQotCQkJLyogQWRkcmVzcyArIFRvZ2dsZSAqLwotCQkJbWF0Y2hbaV0gID0gd2JjaXJfdG9fcmM2Y2VsbHMod2FrZV9zYyA+PiAgOCk7Ci0JCQltYXNrW2krK10gPSAweEZGOwotCQkJbWF0Y2hbaV0gID0gd2JjaXJfdG9fcmM2Y2VsbHMod2FrZV9zYyA+PiAxMik7Ci0JCQltYXNrW2krK10gPSAweDNGOwotCi0JCQkvKiBDdXN0b21lciBiaXRzIDcgLSAwICovCi0JCQltYXRjaFtpXSAgPSB3YmNpcl90b19yYzZjZWxscyh3YWtlX3NjID4+IDE2KTsKLQkJCW1hc2tbaSsrXSA9IDB4RkY7Ci0JCQltYXRjaFtpXSAgPSB3YmNpcl90b19yYzZjZWxscyh3YWtlX3NjID4+IDIwKTsKLQkJCW1hc2tbaSsrXSA9IDB4RkY7Ci0KLQkJCWlmICh3YWtlX3NjICYgMHg4MDAwMDAwMCkgewotCQkJCS8qIEN1c3RvbWVyIHJhbmdlIGJpdCBhbmQgYml0cyAxNSAtIDggKi8KLQkJCQltYXRjaFtpXSAgPSB3YmNpcl90b19yYzZjZWxscyh3YWtlX3NjID4+IDI0KTsKLQkJCQltYXNrW2krK10gPSAweEZGOwotCQkJCW1hdGNoW2ldICA9IHdiY2lyX3RvX3JjNmNlbGxzKHdha2Vfc2MgPj4gMjgpOwotCQkJCW1hc2tbaSsrXSA9IDB4RkY7Ci0JCQkJcmM2X2NzbCA9IDc2OwotCQkJfSBlbHNlIGlmICh3YWtlX3NjIDw9IDB4MDA3RkZGRkYpIHsKLQkJCQlyYzZfY3NsID0gNjA7Ci0JCQl9IGVsc2UgewotCQkJCWRvX3dha2UgPSAwOwotCQkJCWRldl9lcnIoZGV2LCAiUkM2IC0gSW52YWxpZCB3YWtlIHNjYW5jb2RlXG4iKTsKLQkJCQlicmVhazsKLQkJCX0KLQotCQkJLyogSGVhZGVyICovCi0JCQltYXRjaFtpXSAgPSAweDkzOyAvKiBtb2RlMSA9IG1vZGUwID0gMSwgc3VibW9kZSA9IDAgKi8KLQkJCW1hc2tbaSsrXSA9IDB4RkY7Ci0JCQltYXRjaFtpXSAgPSAweDBBOyAvKiBzdGFydCBiaXQgPSAxLCBtb2RlMiA9IDEgKi8KLQkJCW1hc2tbaSsrXSA9IDB4MEY7Ci0KLQkJfSBlbHNlIHsKLQkJCWRvX3dha2UgPSAwOwotCQkJZGV2X2VycihkZXYsICJSQzYgLSBJbnZhbGlkIHdha2UgbW9kZVxuIik7Ci0JCX0KLQotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCWRvX3dha2UgPSAwOwotCQlicmVhazsKLQl9Ci0KLWZpbmlzaDoKLQlpZiAoZG9fd2FrZSkgewotCQkvKiBTZXQgY29tcGFyZSBhbmQgY29tcGFyZSBtYXNrICovCi0JCXdiY2lyX3NldF9iaXRzKGRhdGEtPndiYXNlICsgV0JDSVJfUkVHX1dDRUlSX0lOREVYLAotCQkJICAgICAgIFdCQ0lSX1JFR1NFTF9DT01QQVJFIHwgV0JDSVJfUkVHX0FERFIwLAotCQkJICAgICAgIDB4M0YpOwotCQlvdXRzYihkYXRhLT53YmFzZSArIFdCQ0lSX1JFR19XQ0VJUl9EQVRBLCBtYXRjaCwgMTEpOwotCQl3YmNpcl9zZXRfYml0cyhkYXRhLT53YmFzZSArIFdCQ0lSX1JFR19XQ0VJUl9JTkRFWCwKLQkJCSAgICAgICBXQkNJUl9SRUdTRUxfTUFTSyB8IFdCQ0lSX1JFR19BRERSMCwKLQkJCSAgICAgICAweDNGKTsKLQkJb3V0c2IoZGF0YS0+d2Jhc2UgKyBXQkNJUl9SRUdfV0NFSVJfREFUQSwgbWFzaywgMTEpOwotCi0JCS8qIFJDNiBDb21wYXJlIFN0cmluZyBMZW4gKi8KLQkJb3V0YihyYzZfY3NsLCBkYXRhLT53YmFzZSArIFdCQ0lSX1JFR19XQ0VJUl9DU0wpOwotCi0JCS8qIENsZWFyIHN0YXR1cyBiaXRzIE5FQ19SRVAsIEJVRkYsIE1TR19FTkQsIE1BVENIICovCi0JCXdiY2lyX3NldF9iaXRzKGRhdGEtPndiYXNlICsgV0JDSVJfUkVHX1dDRUlSX1NUUywgMHgxNywgMHgxNyk7Ci0KLQkJLyogQ2xlYXIgQlVGRl9FTiwgQ2xlYXIgRU5EX0VOLCBTZXQgTUFUQ0hfRU4gKi8KLQkJd2JjaXJfc2V0X2JpdHMoZGF0YS0+d2Jhc2UgKyBXQkNJUl9SRUdfV0NFSVJfRVZfRU4sIDB4MDEsIDB4MDcpOwotCi0JCS8qIFNldCBDRUlSX0VOICovCi0JCXdiY2lyX3NldF9iaXRzKGRhdGEtPndiYXNlICsgV0JDSVJfUkVHX1dDRUlSX0NUTCwgMHgwMSwgMHgwMSk7Ci0KLQl9IGVsc2UgewotCQkvKiBDbGVhciBCVUZGX0VOLCBDbGVhciBFTkRfRU4sIENsZWFyIE1BVENIX0VOICovCi0JCXdiY2lyX3NldF9iaXRzKGRhdGEtPndiYXNlICsgV0JDSVJfUkVHX1dDRUlSX0VWX0VOLCAweDAwLCAweDA3KTsKLQotCQkvKiBDbGVhciBDRUlSX0VOICovCi0JCXdiY2lyX3NldF9iaXRzKGRhdGEtPndiYXNlICsgV0JDSVJfUkVHX1dDRUlSX0NUTCwgMHgwMCwgMHgwMSk7Ci0JfQotCi0JLyogRGlzYWJsZSBpbnRlcnJ1cHRzICovCi0Jd2JjaXJfc2VsZWN0X2JhbmsoZGF0YSwgV0JDSVJfQkFOS18wKTsKLQlvdXRiKFdCQ0lSX0lSUV9OT05FLCBkYXRhLT5zYmFzZSArIFdCQ0lSX1JFR19TUDNfSUVSKTsKLQotCS8qCi0JICogQUNQSSB3aWxsIHNldCB0aGUgSFcgZGlzYWJsZSBiaXQgZm9yIFNQMyB3aGljaCBtZWFucyB0aGF0IHRoZQotCSAqIG91dHB1dCBzaWduYWxzIGFyZSBsZWZ0IGluIGFuIHVuZGVmaW5lZCBzdGF0ZSB3aGljaCBtYXkgY2F1c2UKLQkgKiBzcHVyaW91cyBpbnRlcnJ1cHRzIHdoaWNoIHdlIG5lZWQgdG8gaWdub3JlIHVudGlsIHRoZSBoYXJkd2FyZQotCSAqIGlzIHJlaW5pdGlhbGl6ZWQuCi0JICovCi0JZGlzYWJsZV9pcnEoZGF0YS0+aXJxKTsKLX0KLQotc3RhdGljIGludAotd2JjaXJfc3VzcGVuZChzdHJ1Y3QgcG5wX2RldiAqZGV2aWNlLCBwbV9tZXNzYWdlX3Qgc3RhdGUpCi17Ci0Jd2JjaXJfc2h1dGRvd24oZGV2aWNlKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQKLXdiY2lyX2luaXRfaHcoc3RydWN0IHdiY2lyX2RhdGEgKmRhdGEpCi17Ci0JdTggdG1wOwotCi0JLyogRGlzYWJsZSBpbnRlcnJ1cHRzICovCi0Jd2JjaXJfc2VsZWN0X2JhbmsoZGF0YSwgV0JDSVJfQkFOS18wKTsKLQlvdXRiKFdCQ0lSX0lSUV9OT05FLCBkYXRhLT5zYmFzZSArIFdCQ0lSX1JFR19TUDNfSUVSKTsKLQotCS8qIFNldCBQUk9UX1NFTCwgUlhfSU5WLCBDbGVhciBDRUlSX0VOIChuZWVkZWQgZm9yIHRoZSBsZWQpICovCi0JdG1wID0gcHJvdG9jb2wgPDwgNDsKLQlpZiAoaW52ZXJ0KQotCQl0bXAgfD0gMHgwODsKLQlvdXRiKHRtcCwgZGF0YS0+d2Jhc2UgKyBXQkNJUl9SRUdfV0NFSVJfQ1RMKTsKLQotCS8qIENsZWFyIHN0YXR1cyBiaXRzIE5FQ19SRVAsIEJVRkYsIE1TR19FTkQsIE1BVENIICovCi0Jd2JjaXJfc2V0X2JpdHMoZGF0YS0+d2Jhc2UgKyBXQkNJUl9SRUdfV0NFSVJfU1RTLCAweDE3LCAweDE3KTsKLQotCS8qIENsZWFyIEJVRkZfRU4sIENsZWFyIEVORF9FTiwgQ2xlYXIgTUFUQ0hfRU4gKi8KLQl3YmNpcl9zZXRfYml0cyhkYXRhLT53YmFzZSArIFdCQ0lSX1JFR19XQ0VJUl9FVl9FTiwgMHgwMCwgMHgwNyk7Ci0KLQkvKiBTZXQgUkM1IGNlbGwgdGltZSB0byBjb3JyZXNwb25kIHRvIDM2IGtIeiAqLwotCXdiY2lyX3NldF9iaXRzKGRhdGEtPndiYXNlICsgV0JDSVJfUkVHX1dDRUlSX0NGRzEsIDB4NEEsIDB4N0YpOwotCi0JLyogU2V0IElSVFhfSU5WICovCi0JaWYgKGludmVydCkKLQkJb3V0YigweDA0LCBkYXRhLT5lYmFzZSArIFdCQ0lSX1JFR19FQ0VJUl9DQ1RMKTsKLQllbHNlCi0JCW91dGIoMHgwMCwgZGF0YS0+ZWJhc2UgKyBXQkNJUl9SRUdfRUNFSVJfQ0NUTCk7Ci0KLQkvKgotCSAqIENsZWFyIElSIExFRCwgc2V0IFNQMyBjbG9jayB0byAyNE1oegotCSAqIHNldCBTUDNfSVJSWF9TVyB0byBiaW5hcnkgMDEsIGhlbHBmdWxseSBub3QgZG9jdW1lbnRlZAotCSAqLwotCW91dGIoMHgxMCwgZGF0YS0+ZWJhc2UgKyBXQkNJUl9SRUdfRUNFSVJfQ1RTKTsKLQotCS8qIEVuYWJsZSBleHRlbmRlZCBtb2RlICovCi0Jd2JjaXJfc2VsZWN0X2JhbmsoZGF0YSwgV0JDSVJfQkFOS18yKTsKLQlvdXRiKFdCQ0lSX0VYVF9FTkFCTEUsIGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19FWENSMSk7Ci0KLQkvKgotCSAqIENvbmZpZ3VyZSBiYXVkIGdlbmVyYXRvciwgSVIgZGF0YSB3aWxsIGJlIHNhbXBsZWQgYXQKLQkgKiBhIGJpdHJhdGUgb2Y6ICgyNE1oeiAqIHByZXNjYWxlcikgLyAoZGl2aXNvciAqIDE2KS4KLQkgKgotCSAqIFRoZSBFQ0lSIHJlZ2lzdGVycyBpbmNsdWRlIGEgZmxhZyB0byBjaGFuZ2UgdGhlCi0JICogMjRNaHogY2xvY2sgZnJlcSB0byA0OE1oei4KLQkgKgotCSAqIEl0J3Mgbm90IGRvY3VtZW50ZWQgaW4gdGhlIHNwZWNzLCBidXQgZmlmbyBsZXZlbHMKLQkgKiBvdGhlciB0aGFuIDE2IHNlZW1zIHRvIGJlIHVuc3VwcG9ydGVkLgotCSAqLwotCi0JLyogcHJlc2NhbGVyIDEuMCwgdHgvcnggZmlmbyBsdmwgMTYgKi8KLQlvdXRiKDB4MzAsIGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19FWENSMik7Ci0KLQkvKiBTZXQgYmF1ZCBkaXZpc29yIHRvIGdlbmVyYXRlIG9uZSBieXRlIHBlciBiaXQvY2VsbCAqLwotCXN3aXRjaCAocHJvdG9jb2wpIHsKLQljYXNlIElSX1BST1RPQ09MX1JDNToKLQkJb3V0YigweEE3LCBkYXRhLT5zYmFzZSArIFdCQ0lSX1JFR19TUDNfQkdETCk7Ci0JCWJyZWFrOwotCWNhc2UgSVJfUFJPVE9DT0xfUkM2OgotCQlvdXRiKDB4NTMsIGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19CR0RMKTsKLQkJYnJlYWs7Ci0JY2FzZSBJUl9QUk9UT0NPTF9ORUM6Ci0JCW91dGIoMHg2OSwgZGF0YS0+c2Jhc2UgKyBXQkNJUl9SRUdfU1AzX0JHREwpOwotCQlicmVhazsKLQl9Ci0Jb3V0YigweDAwLCBkYXRhLT5zYmFzZSArIFdCQ0lSX1JFR19TUDNfQkdESCk7Ci0KLQkvKiBTZXQgQ0VJUiBtb2RlICovCi0Jd2JjaXJfc2VsZWN0X2JhbmsoZGF0YSwgV0JDSVJfQkFOS18wKTsKLQlvdXRiKDB4QzAsIGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19NQ1IpOwotCWluYihkYXRhLT5zYmFzZSArIFdCQ0lSX1JFR19TUDNfTFNSKTsgLyogQ2xlYXIgTFNSICovCi0JaW5iKGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19NU1IpOyAvKiBDbGVhciBNU1IgKi8KLQotCS8qIERpc2FibGUgUlggZGVtb2QsIHJ1bi1sZW5ndGggZW5jb2RpbmcvZGVjb2RpbmcsIHNldCBmcmVxIHNwYW4gKi8KLQl3YmNpcl9zZWxlY3RfYmFuayhkYXRhLCBXQkNJUl9CQU5LXzcpOwotCW91dGIoMHgxMCwgZGF0YS0+c2Jhc2UgKyBXQkNJUl9SRUdfU1AzX1JDQ0ZHKTsKLQotCS8qIERpc2FibGUgdGltZXIgKi8KLQl3YmNpcl9zZWxlY3RfYmFuayhkYXRhLCBXQkNJUl9CQU5LXzQpOwotCW91dGIoMHgwMCwgZGF0YS0+c2Jhc2UgKyBXQkNJUl9SRUdfU1AzX0lSQ1IxKTsKLQotCS8qIEVuYWJsZSBNU1IgaW50ZXJydXB0LCBDbGVhciBBVVhfSVJYICovCi0Jd2JjaXJfc2VsZWN0X2JhbmsoZGF0YSwgV0JDSVJfQkFOS181KTsKLQlvdXRiKDB4MDAsIGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19JUkNSMik7Ci0KLQkvKiBEaXNhYmxlIENSQyAqLwotCXdiY2lyX3NlbGVjdF9iYW5rKGRhdGEsIFdCQ0lSX0JBTktfNik7Ci0Jb3V0YigweDIwLCBkYXRhLT5zYmFzZSArIFdCQ0lSX1JFR19TUDNfSVJDUjMpOwotCi0JLyogU2V0IFJYL1RYIChkZSltb2R1bGF0aW9uIGZyZXEsIG5vdCByZWFsbHkgdXNlZCAqLwotCXdiY2lyX3NlbGVjdF9iYW5rKGRhdGEsIFdCQ0lSX0JBTktfNyk7Ci0Jb3V0YigweEYyLCBkYXRhLT5zYmFzZSArIFdCQ0lSX1JFR19TUDNfSVJSWERDKTsKLQlvdXRiKDB4NjksIGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19JUlRYTUMpOwotCi0JLyogU2V0IGludmVydCBhbmQgcGluIGRpcmVjdGlvbiAqLwotCWlmIChpbnZlcnQpCi0JCW91dGIoMHgxMCwgZGF0YS0+c2Jhc2UgKyBXQkNJUl9SRUdfU1AzX0lSQ0ZHNCk7Ci0JZWxzZQotCQlvdXRiKDB4MDAsIGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19JUkNGRzQpOwotCi0JLyogU2V0IEZJRk8gdGhyZXNob2xkcyAoUlggPSA4LCBUWCA9IDMpLCByZXNldCBSWC9UWCAqLwotCXdiY2lyX3NlbGVjdF9iYW5rKGRhdGEsIFdCQ0lSX0JBTktfMCk7Ci0Jb3V0YigweDk3LCBkYXRhLT5zYmFzZSArIFdCQ0lSX1JFR19TUDNfRkNSKTsKLQotCS8qIENsZWFyIEFVWCBzdGF0dXMgYml0cyAqLwotCW91dGIoMHhFMCwgZGF0YS0+c2Jhc2UgKyBXQkNJUl9SRUdfU1AzX0FTQ1IpOwotCi0JLyogRW5hYmxlIGludGVycnVwdHMgKi8KLQl3YmNpcl9yZXNldF9pcmRhdGEoZGF0YSk7Ci0Jb3V0YihXQkNJUl9JUlFfUlggfCBXQkNJUl9JUlFfRVJSLCBkYXRhLT5zYmFzZSArIFdCQ0lSX1JFR19TUDNfSUVSKTsKLX0KLQotc3RhdGljIGludAotd2JjaXJfcmVzdW1lKHN0cnVjdCBwbnBfZGV2ICpkZXZpY2UpCi17Ci0Jc3RydWN0IHdiY2lyX2RhdGEgKmRhdGEgPSBwbnBfZ2V0X2RydmRhdGEoZGV2aWNlKTsKLQotCXdiY2lyX2luaXRfaHcoZGF0YSk7Ci0JZW5hYmxlX2lycShkYXRhLT5pcnEpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgX19kZXZpbml0Ci13YmNpcl9wcm9iZShzdHJ1Y3QgcG5wX2RldiAqZGV2aWNlLCBjb25zdCBzdHJ1Y3QgcG5wX2RldmljZV9pZCAqZGV2X2lkKQotewotCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZkZXZpY2UtPmRldjsKLQlzdHJ1Y3Qgd2JjaXJfZGF0YSAqZGF0YTsKLQlpbnQgZXJyOwotCi0JaWYgKCEocG5wX3BvcnRfbGVuKGRldmljZSwgMCkgPT0gRUhGVU5DX0lPTUVNX0xFTiAmJgotCSAgICAgIHBucF9wb3J0X2xlbihkZXZpY2UsIDEpID09IFdBS0VVUF9JT01FTV9MRU4gJiYKLQkgICAgICBwbnBfcG9ydF9sZW4oZGV2aWNlLCAyKSA9PSBTUF9JT01FTV9MRU4pKSB7Ci0JCWRldl9lcnIoZGV2LCAiSW52YWxpZCByZXNvdXJjZXNcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQlkYXRhID0ga3phbGxvYyhzaXplb2YoKmRhdGEpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRhdGEpIHsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBleGl0OwotCX0KLQotCXBucF9zZXRfZHJ2ZGF0YShkZXZpY2UsIGRhdGEpOwotCi0JZGF0YS0+ZWJhc2UgPSBwbnBfcG9ydF9zdGFydChkZXZpY2UsIDApOwotCWRhdGEtPndiYXNlID0gcG5wX3BvcnRfc3RhcnQoZGV2aWNlLCAxKTsKLQlkYXRhLT5zYmFzZSA9IHBucF9wb3J0X3N0YXJ0KGRldmljZSwgMik7Ci0JZGF0YS0+aXJxID0gcG5wX2lycShkZXZpY2UsIDApOwotCi0JaWYgKGRhdGEtPndiYXNlID09IDAgfHwgZGF0YS0+ZWJhc2UgPT0gMCB8fAotCSAgICBkYXRhLT5zYmFzZSA9PSAwIHx8IGRhdGEtPmlycSA9PSAwKSB7Ci0JCWVyciA9IC1FTk9ERVY7Ci0JCWRldl9lcnIoZGV2LCAiSW52YWxpZCByZXNvdXJjZXNcbiIpOwotCQlnb3RvIGV4aXRfZnJlZV9kYXRhOwotCX0KLQotCWRldl9kYmcoJmRldmljZS0+ZGV2LCAiRm91bmQgZGV2aWNlICIKLQkJIih3OiAweCVsWCwgZTogMHglbFgsIHM6IDB4JWxYLCBpOiAldSlcbiIsCi0JCWRhdGEtPndiYXNlLCBkYXRhLT5lYmFzZSwgZGF0YS0+c2Jhc2UsIGRhdGEtPmlycSk7Ci0KLQlpZiAoIXJlcXVlc3RfcmVnaW9uKGRhdGEtPndiYXNlLCBXQUtFVVBfSU9NRU1fTEVOLCBEUlZOQU1FKSkgewotCQlkZXZfZXJyKGRldiwgIlJlZ2lvbiAweCVseC0weCVseCBhbHJlYWR5IGluIHVzZSFcbiIsCi0JCQlkYXRhLT53YmFzZSwgZGF0YS0+d2Jhc2UgKyBXQUtFVVBfSU9NRU1fTEVOIC0gMSk7Ci0JCWVyciA9IC1FQlVTWTsKLQkJZ290byBleGl0X2ZyZWVfZGF0YTsKLQl9Ci0KLQlpZiAoIXJlcXVlc3RfcmVnaW9uKGRhdGEtPmViYXNlLCBFSEZVTkNfSU9NRU1fTEVOLCBEUlZOQU1FKSkgewotCQlkZXZfZXJyKGRldiwgIlJlZ2lvbiAweCVseC0weCVseCBhbHJlYWR5IGluIHVzZSFcbiIsCi0JCQlkYXRhLT5lYmFzZSwgZGF0YS0+ZWJhc2UgKyBFSEZVTkNfSU9NRU1fTEVOIC0gMSk7Ci0JCWVyciA9IC1FQlVTWTsKLQkJZ290byBleGl0X3JlbGVhc2Vfd2Jhc2U7Ci0JfQotCi0JaWYgKCFyZXF1ZXN0X3JlZ2lvbihkYXRhLT5zYmFzZSwgU1BfSU9NRU1fTEVOLCBEUlZOQU1FKSkgewotCQlkZXZfZXJyKGRldiwgIlJlZ2lvbiAweCVseC0weCVseCBhbHJlYWR5IGluIHVzZSFcbiIsCi0JCQlkYXRhLT5zYmFzZSwgZGF0YS0+c2Jhc2UgKyBTUF9JT01FTV9MRU4gLSAxKTsKLQkJZXJyID0gLUVCVVNZOwotCQlnb3RvIGV4aXRfcmVsZWFzZV9lYmFzZTsKLQl9Ci0KLQllcnIgPSByZXF1ZXN0X2lycShkYXRhLT5pcnEsIHdiY2lyX2lycV9oYW5kbGVyLAotCQkJICBJUlFGX0RJU0FCTEVELCBEUlZOQU1FLCBkZXZpY2UpOwotCWlmIChlcnIpIHsKLQkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gY2xhaW0gSVJRICV1XG4iLCBkYXRhLT5pcnEpOwotCQllcnIgPSAtRUJVU1k7Ci0JCWdvdG8gZXhpdF9yZWxlYXNlX3NiYXNlOwotCX0KLQotCWxlZF90cmlnZ2VyX3JlZ2lzdGVyX3NpbXBsZSgiY2lyLXR4IiwgJmRhdGEtPnR4dHJpZ2dlcik7Ci0JaWYgKCFkYXRhLT50eHRyaWdnZXIpIHsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBleGl0X2ZyZWVfaXJxOwotCX0KLQotCWxlZF90cmlnZ2VyX3JlZ2lzdGVyX3NpbXBsZSgiY2lyLXJ4IiwgJmRhdGEtPnJ4dHJpZ2dlcik7Ci0JaWYgKCFkYXRhLT5yeHRyaWdnZXIpIHsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBleGl0X3VucmVnaXN0ZXJfdHh0cmlnZ2VyOwotCX0KLQotCWRhdGEtPmxlZC5uYW1lID0gImNpcjo6YWN0aXZpdHkiOwotCWRhdGEtPmxlZC5kZWZhdWx0X3RyaWdnZXIgPSAiY2lyLXJ4IjsKLQlkYXRhLT5sZWQuYnJpZ2h0bmVzc19zZXQgPSB3YmNpcl9sZWRfYnJpZ2h0bmVzc19zZXQ7Ci0JZGF0YS0+bGVkLmJyaWdodG5lc3NfZ2V0ID0gd2JjaXJfbGVkX2JyaWdodG5lc3NfZ2V0OwotCWVyciA9IGxlZF9jbGFzc2Rldl9yZWdpc3RlcigmZGV2aWNlLT5kZXYsICZkYXRhLT5sZWQpOwotCWlmIChlcnIpCi0JCWdvdG8gZXhpdF91bnJlZ2lzdGVyX3J4dHJpZ2dlcjsKLQotCWRhdGEtPmlucHV0X2RldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOwotCWlmICghZGF0YS0+aW5wdXRfZGV2KSB7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gZXhpdF91bnJlZ2lzdGVyX2xlZDsKLQl9Ci0KLQlkYXRhLT5pbnB1dF9kZXYtPmV2Yml0WzBdID0gQklUKEVWX0tFWSk7Ci0JZGF0YS0+aW5wdXRfZGV2LT5uYW1lID0gV0JDSVJfTkFNRTsKLQlkYXRhLT5pbnB1dF9kZXYtPnBoeXMgPSAid2JjaXIvY2lyMCI7Ci0JZGF0YS0+aW5wdXRfZGV2LT5pZC5idXN0eXBlID0gQlVTX0hPU1Q7Ci0JZGF0YS0+aW5wdXRfZGV2LT5pZC52ZW5kb3IgID0gUENJX1ZFTkRPUl9JRF9XSU5CT05EOwotCWRhdGEtPmlucHV0X2Rldi0+aWQucHJvZHVjdCA9IFdCQ0lSX0lEX0ZBTUlMWTsKLQlkYXRhLT5pbnB1dF9kZXYtPmlkLnZlcnNpb24gPSBXQkNJUl9JRF9DSElQOwotCWRhdGEtPmlucHV0X2Rldi0+Z2V0a2V5Y29kZSA9IHdiY2lyX2dldGtleWNvZGU7Ci0JZGF0YS0+aW5wdXRfZGV2LT5zZXRrZXljb2RlID0gd2JjaXJfc2V0a2V5Y29kZTsKLQlpbnB1dF9zZXRfY2FwYWJpbGl0eShkYXRhLT5pbnB1dF9kZXYsIEVWX01TQywgTVNDX1NDQU4pOwotCWlucHV0X3NldF9kcnZkYXRhKGRhdGEtPmlucHV0X2RldiwgZGF0YSk7Ci0KLQllcnIgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoZGF0YS0+aW5wdXRfZGV2KTsKLQlpZiAoZXJyKQotCQlnb3RvIGV4aXRfZnJlZV9pbnB1dDsKLQotCWRhdGEtPmxhc3Rfc2NhbmNvZGUgPSBJTlZBTElEX1NDQU5DT0RFOwotCUlOSVRfTElTVF9IRUFEKCZkYXRhLT5rZXl0YWJsZSk7Ci0Jc2V0dXBfdGltZXIoJmRhdGEtPnRpbWVyX2tleXVwLCB3YmNpcl9rZXl1cCwgKHVuc2lnbmVkIGxvbmcpZGF0YSk7Ci0KLQkvKiBMb2FkIGRlZmF1bHQga2V5bWFwcyAqLwotCWlmIChwcm90b2NvbCA9PSBJUl9QUk9UT0NPTF9SQzYpIHsKLQkJaW50IGk7Ci0JCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJjNl9kZWZfa2V5bWFwKTsgaSsrKSB7Ci0JCQllcnIgPSB3YmNpcl9zZXRrZXljb2RlKGRhdGEtPmlucHV0X2RldiwKLQkJCQkJICAgICAgIChpbnQpcmM2X2RlZl9rZXltYXBbaV0uc2NhbmNvZGUsCi0JCQkJCSAgICAgICAoaW50KXJjNl9kZWZfa2V5bWFwW2ldLmtleWNvZGUpOwotCQkJaWYgKGVycikKLQkJCQlnb3RvIGV4aXRfdW5yZWdpc3Rlcl9rZXlzOwotCQl9Ci0JfQotCi0JZGV2aWNlX2luaXRfd2FrZXVwKCZkZXZpY2UtPmRldiwgMSk7Ci0KLQl3YmNpcl9pbml0X2h3KGRhdGEpOwotCi0JcmV0dXJuIDA7Ci0KLWV4aXRfdW5yZWdpc3Rlcl9rZXlzOgotCWlmICghbGlzdF9lbXB0eSgmZGF0YS0+a2V5dGFibGUpKSB7Ci0JCXN0cnVjdCB3YmNpcl9rZXllbnRyeSAqa2V5OwotCQlzdHJ1Y3Qgd2JjaXJfa2V5ZW50cnkgKmtleXRtcDsKLQotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoa2V5LCBrZXl0bXAsICZkYXRhLT5rZXl0YWJsZSwgbGlzdCkgewotCQkJbGlzdF9kZWwoJmtleS0+bGlzdCk7Ci0JCQlrZnJlZShrZXkpOwotCQl9Ci0JfQotCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGRhdGEtPmlucHV0X2Rldik7Ci0JLyogQ2FuJ3QgY2FsbCBpbnB1dF9mcmVlX2RldmljZSBvbiBhbiB1bnJlZ2lzdGVyZWQgZGV2aWNlICovCi0JZGF0YS0+aW5wdXRfZGV2ID0gTlVMTDsKLWV4aXRfZnJlZV9pbnB1dDoKLQlpbnB1dF9mcmVlX2RldmljZShkYXRhLT5pbnB1dF9kZXYpOwotZXhpdF91bnJlZ2lzdGVyX2xlZDoKLQlsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcigmZGF0YS0+bGVkKTsKLWV4aXRfdW5yZWdpc3Rlcl9yeHRyaWdnZXI6Ci0JbGVkX3RyaWdnZXJfdW5yZWdpc3Rlcl9zaW1wbGUoZGF0YS0+cnh0cmlnZ2VyKTsKLWV4aXRfdW5yZWdpc3Rlcl90eHRyaWdnZXI6Ci0JbGVkX3RyaWdnZXJfdW5yZWdpc3Rlcl9zaW1wbGUoZGF0YS0+dHh0cmlnZ2VyKTsKLWV4aXRfZnJlZV9pcnE6Ci0JZnJlZV9pcnEoZGF0YS0+aXJxLCBkZXZpY2UpOwotZXhpdF9yZWxlYXNlX3NiYXNlOgotCXJlbGVhc2VfcmVnaW9uKGRhdGEtPnNiYXNlLCBTUF9JT01FTV9MRU4pOwotZXhpdF9yZWxlYXNlX2ViYXNlOgotCXJlbGVhc2VfcmVnaW9uKGRhdGEtPmViYXNlLCBFSEZVTkNfSU9NRU1fTEVOKTsKLWV4aXRfcmVsZWFzZV93YmFzZToKLQlyZWxlYXNlX3JlZ2lvbihkYXRhLT53YmFzZSwgV0FLRVVQX0lPTUVNX0xFTik7Ci1leGl0X2ZyZWVfZGF0YToKLQlrZnJlZShkYXRhKTsKLQlwbnBfc2V0X2RydmRhdGEoZGV2aWNlLCBOVUxMKTsKLWV4aXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQgX19kZXZleGl0Ci13YmNpcl9yZW1vdmUoc3RydWN0IHBucF9kZXYgKmRldmljZSkKLXsKLQlzdHJ1Y3Qgd2JjaXJfZGF0YSAqZGF0YSA9IHBucF9nZXRfZHJ2ZGF0YShkZXZpY2UpOwotCXN0cnVjdCB3YmNpcl9rZXllbnRyeSAqa2V5OwotCXN0cnVjdCB3YmNpcl9rZXllbnRyeSAqa2V5dG1wOwotCi0JLyogRGlzYWJsZSBpbnRlcnJ1cHRzICovCi0Jd2JjaXJfc2VsZWN0X2JhbmsoZGF0YSwgV0JDSVJfQkFOS18wKTsKLQlvdXRiKFdCQ0lSX0lSUV9OT05FLCBkYXRhLT5zYmFzZSArIFdCQ0lSX1JFR19TUDNfSUVSKTsKLQotCWRlbF90aW1lcl9zeW5jKCZkYXRhLT50aW1lcl9rZXl1cCk7Ci0KLQlmcmVlX2lycShkYXRhLT5pcnEsIGRldmljZSk7Ci0KLQkvKiBDbGVhciBzdGF0dXMgYml0cyBORUNfUkVQLCBCVUZGLCBNU0dfRU5ELCBNQVRDSCAqLwotCXdiY2lyX3NldF9iaXRzKGRhdGEtPndiYXNlICsgV0JDSVJfUkVHX1dDRUlSX1NUUywgMHgxNywgMHgxNyk7Ci0KLQkvKiBDbGVhciBDRUlSX0VOICovCi0Jd2JjaXJfc2V0X2JpdHMoZGF0YS0+d2Jhc2UgKyBXQkNJUl9SRUdfV0NFSVJfQ1RMLCAweDAwLCAweDAxKTsKLQotCS8qIENsZWFyIEJVRkZfRU4sIEVORF9FTiwgTUFUQ0hfRU4gKi8KLQl3YmNpcl9zZXRfYml0cyhkYXRhLT53YmFzZSArIFdCQ0lSX1JFR19XQ0VJUl9FVl9FTiwgMHgwMCwgMHgwNyk7Ci0KLQkvKiBUaGlzIHdpbGwgZ2VuZXJhdGUgYSBrZXl1cCBldmVudCBpZiBuZWNlc3NhcnkgKi8KLQlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShkYXRhLT5pbnB1dF9kZXYpOwotCi0JbGVkX3RyaWdnZXJfdW5yZWdpc3Rlcl9zaW1wbGUoZGF0YS0+cnh0cmlnZ2VyKTsKLQlsZWRfdHJpZ2dlcl91bnJlZ2lzdGVyX3NpbXBsZShkYXRhLT50eHRyaWdnZXIpOwotCWxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKCZkYXRhLT5sZWQpOwotCi0JLyogVGhpcyBpcyBvayBzaW5jZSAmZGF0YS0+bGVkIGlzbid0IGFjdHVhbGx5IHVzZWQgKi8KLQl3YmNpcl9sZWRfYnJpZ2h0bmVzc19zZXQoJmRhdGEtPmxlZCwgTEVEX09GRik7Ci0KLQlyZWxlYXNlX3JlZ2lvbihkYXRhLT53YmFzZSwgV0FLRVVQX0lPTUVNX0xFTik7Ci0JcmVsZWFzZV9yZWdpb24oZGF0YS0+ZWJhc2UsIEVIRlVOQ19JT01FTV9MRU4pOwotCXJlbGVhc2VfcmVnaW9uKGRhdGEtPnNiYXNlLCBTUF9JT01FTV9MRU4pOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGtleSwga2V5dG1wLCAmZGF0YS0+a2V5dGFibGUsIGxpc3QpIHsKLQkJbGlzdF9kZWwoJmtleS0+bGlzdCk7Ci0JCWtmcmVlKGtleSk7Ci0JfQotCi0Ja2ZyZWUoZGF0YSk7Ci0KLQlwbnBfc2V0X2RydmRhdGEoZGV2aWNlLCBOVUxMKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBwbnBfZGV2aWNlX2lkIHdiY2lyX2lkc1tdID0gewotCXsgIldFQzEwMjIiLCAwIH0sCi0JeyAiIiwgMCB9Ci19OwotTU9EVUxFX0RFVklDRV9UQUJMRShwbnAsIHdiY2lyX2lkcyk7Ci0KLXN0YXRpYyBzdHJ1Y3QgcG5wX2RyaXZlciB3YmNpcl9kcml2ZXIgPSB7Ci0JLm5hbWUgICAgID0gV0JDSVJfTkFNRSwKLQkuaWRfdGFibGUgPSB3YmNpcl9pZHMsCi0JLnByb2JlICAgID0gd2JjaXJfcHJvYmUsCi0JLnJlbW92ZSAgID0gX19kZXZleGl0X3Aod2JjaXJfcmVtb3ZlKSwKLQkuc3VzcGVuZCAgPSB3YmNpcl9zdXNwZW5kLAotCS5yZXN1bWUgICA9IHdiY2lyX3Jlc3VtZSwKLQkuc2h1dGRvd24gPSB3YmNpcl9zaHV0ZG93bgotfTsKLQotc3RhdGljIGludCBfX2luaXQKLXdiY2lyX2luaXQodm9pZCkKLXsKLQlpbnQgcmV0OwotCi0Jc3dpdGNoIChwcm90b2NvbCkgewotCWNhc2UgSVJfUFJPVE9DT0xfUkM1OgotCWNhc2UgSVJfUFJPVE9DT0xfTkVDOgotCWNhc2UgSVJfUFJPVE9DT0xfUkM2OgotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9FUlIgRFJWTkFNRSAiOiBJbnZhbGlkIHByb3RvY29sIGFyZ3VtZW50XG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0ID0gcG5wX3JlZ2lzdGVyX2RyaXZlcigmd2JjaXJfZHJpdmVyKTsKLQlpZiAocmV0KQotCQlwcmludGsoS0VSTl9FUlIgRFJWTkFNRSAiOiBVbmFibGUgdG8gcmVnaXN0ZXIgZHJpdmVyXG4iKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdAotd2JjaXJfZXhpdCh2b2lkKQotewotCXBucF91bnJlZ2lzdGVyX2RyaXZlcigmd2JjaXJfZHJpdmVyKTsKLX0KLQotTU9EVUxFX0FVVEhPUigiRGF2aWQgSORyZGVtYW4gPGRhdmlkQGhhcmRlbWFuLm51PiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJXaW5ib25kIFN1cGVySS9PIENvbnN1bWVyIElSIERyaXZlciIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1tb2R1bGVfaW5pdCh3YmNpcl9pbml0KTsKLW1vZHVsZV9leGl0KHdiY2lyX2V4aXQpOwotCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvYmNtNTk3NC5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9iY201OTc0LmMKaW5kZXggYjk1MjMxNy4uZWU4Mjg1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9iY201OTc0LmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9iY201OTc0LmMKQEAgLTU1LDYgKzU1LDE0IEBACiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfV0VMTFNQUklORzNfQU5TSQkweDAyMzYKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HM19JU08JMHgwMjM3CiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfV0VMTFNQUklORzNfSklTCTB4MDIzOAorLyogTWFjYm9va0FpcjMsMiAodW5pYm9keSksIGFrYSB3ZWxsc3ByaW5nNSAqLworI2RlZmluZSBVU0JfREVWSUNFX0lEX0FQUExFX1dFTExTUFJJTkc0X0FOU0kJMHgwMjNmCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfV0VMTFNQUklORzRfSVNPCTB4MDI0MAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0FQUExFX1dFTExTUFJJTkc0X0pJUwkweDAyNDEKKy8qIE1hY2Jvb2tBaXIzLDEgKHVuaWJvZHkpLCBha2Egd2VsbHNwcmluZzQgKi8KKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HNEFfQU5TSQkweDAyNDIKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HNEFfSVNPCTB4MDI0MworI2RlZmluZSBVU0JfREVWSUNFX0lEX0FQUExFX1dFTExTUFJJTkc0QV9KSVMJMHgwMjQ0CiAKICNkZWZpbmUgQkNNNTk3NF9ERVZJQ0UocHJvZCkgewkJCQkJXAogCS5tYXRjaF9mbGFncyA9IChVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRSB8CQlcCkBAIC04MCw2ICs4OCwxNCBAQAogCUJDTTU5NzRfREVWSUNFKFVTQl9ERVZJQ0VfSURfQVBQTEVfV0VMTFNQUklORzNfQU5TSSksCiAJQkNNNTk3NF9ERVZJQ0UoVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HM19JU08pLAogCUJDTTU5NzRfREVWSUNFKFVTQl9ERVZJQ0VfSURfQVBQTEVfV0VMTFNQUklORzNfSklTKSwKKwkvKiBNYWNib29rQWlyMywyICovCisJQkNNNTk3NF9ERVZJQ0UoVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HNF9BTlNJKSwKKwlCQ001OTc0X0RFVklDRShVU0JfREVWSUNFX0lEX0FQUExFX1dFTExTUFJJTkc0X0lTTyksCisJQkNNNTk3NF9ERVZJQ0UoVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HNF9KSVMpLAorCS8qIE1hY2Jvb2tBaXIzLDEgKi8KKwlCQ001OTc0X0RFVklDRShVU0JfREVWSUNFX0lEX0FQUExFX1dFTExTUFJJTkc0QV9BTlNJKSwKKwlCQ001OTc0X0RFVklDRShVU0JfREVWSUNFX0lEX0FQUExFX1dFTExTUFJJTkc0QV9JU08pLAorCUJDTTU5NzRfREVWSUNFKFVTQl9ERVZJQ0VfSURfQVBQTEVfV0VMTFNQUklORzRBX0pJUyksCiAJLyogVGVybWluYXRpbmcgZW50cnkgKi8KIAl7fQogfTsKQEAgLTIzNCw2ICsyNTAsMzAgQEAKIAkJeyBESU1fWCwgRElNX1ggLyBTTl9DT09SRCwgLTQ0NjAsIDUxNjYgfSwKIAkJeyBESU1fWSwgRElNX1kgLyBTTl9DT09SRCwgLTc1LCA2NzAwIH0KIAl9LAorCXsKKwkJVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HNF9BTlNJLAorCQlVU0JfREVWSUNFX0lEX0FQUExFX1dFTExTUFJJTkc0X0lTTywKKwkJVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HNF9KSVMsCisJCUhBU19JTlRFR1JBVEVEX0JVVFRPTiwKKwkJMHg4NCwgc2l6ZW9mKHN0cnVjdCBidF9kYXRhKSwKKwkJMHg4MSwgVFlQRTIsIEZJTkdFUl9UWVBFMiwgRklOR0VSX1RZUEUyICsgU0laRU9GX0FMTF9GSU5HRVJTLAorCQl7IERJTV9QUkVTU1VSRSwgRElNX1BSRVNTVVJFIC8gU05fUFJFU1NVUkUsIDAsIDMwMCB9LAorCQl7IERJTV9XSURUSCwgRElNX1dJRFRIIC8gU05fV0lEVEgsIDAsIDIwNDggfSwKKwkJeyBESU1fWCwgRElNX1ggLyBTTl9DT09SRCwgLTQ2MjAsIDUxNDAgfSwKKwkJeyBESU1fWSwgRElNX1kgLyBTTl9DT09SRCwgLTE1MCwgNjYwMCB9CisJfSwKKwl7CisJCVVTQl9ERVZJQ0VfSURfQVBQTEVfV0VMTFNQUklORzRBX0FOU0ksCisJCVVTQl9ERVZJQ0VfSURfQVBQTEVfV0VMTFNQUklORzRBX0lTTywKKwkJVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HNEFfSklTLAorCQlIQVNfSU5URUdSQVRFRF9CVVRUT04sCisJCTB4ODQsIHNpemVvZihzdHJ1Y3QgYnRfZGF0YSksCisJCTB4ODEsIFRZUEUyLCBGSU5HRVJfVFlQRTIsIEZJTkdFUl9UWVBFMiArIFNJWkVPRl9BTExfRklOR0VSUywKKwkJeyBESU1fUFJFU1NVUkUsIERJTV9QUkVTU1VSRSAvIFNOX1BSRVNTVVJFLCAwLCAzMDAgfSwKKwkJeyBESU1fV0lEVEgsIERJTV9XSURUSCAvIFNOX1dJRFRILCAwLCAyMDQ4IH0sCisJCXsgRElNX1gsIERJTV9YIC8gU05fQ09PUkQsIC00NjE2LCA1MTEyIH0sCisJCXsgRElNX1ksIERJTV9ZIC8gU05fQ09PUkQsIC0xNDIsIDUyMzQgfQorCX0sCiAJe30KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvaGdway5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9oZ3BrLmMKaW5kZXggMWQyMjA1Yi4uOTU1NzdjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9oZ3BrLmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9oZ3BrLmMKQEAgLTQwLDYgKzQwLDggQEAKICNpbmNsdWRlICJwc21vdXNlLmgiCiAjaW5jbHVkZSAiaGdway5oIgogCisjZGVmaW5lIElMTEVHQUxfWFkgOTk5OTk5CisKIHN0YXRpYyBib29sIHRwZGVidWc7CiBtb2R1bGVfcGFyYW0odHBkZWJ1ZywgYm9vbCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHRwZGVidWcsICJlbmFibGUgZGVidWdnaW5nLCBkdW1waW5nIHBhY2tldHMgdG8gS0VSTl9ERUJVRy4iKTsKQEAgLTQ3LDQ4ICs0OSwxNTAgQEAKIHN0YXRpYyBpbnQgcmVjYWxpYl9kZWx0YSA9IDEwMDsKIG1vZHVsZV9wYXJhbShyZWNhbGliX2RlbHRhLCBpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhyZWNhbGliX2RlbHRhLAotCSJwYWNrZXRzIGNvbnRhaW5pbmcgYSBkZWx0YSB0aGlzIGxhcmdlIHdpbGwgY2F1c2UgYSByZWNhbGlicmF0aW9uLiIpOworCSJwYWNrZXRzIGNvbnRhaW5pbmcgYSBkZWx0YSB0aGlzIGxhcmdlIHdpbGwgYmUgZGlzY2FyZGVkLCBhbmQgYSAiCisJInJlY2FsaWJyYXRpb24gbWF5IGJlIHNjaGVkdWxlZC4iKTsKIAotc3RhdGljIGludCBqdW1weV9kZWxheSA9IDEwMDA7CitzdGF0aWMgaW50IGp1bXB5X2RlbGF5ID0gMjA7CiBtb2R1bGVfcGFyYW0oanVtcHlfZGVsYXksIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGp1bXB5X2RlbGF5LAogCSJkZWxheSAobXMpIGJlZm9yZSByZWNhbCBhZnRlciBqdW1waW5lc3MgZGV0ZWN0ZWQiKTsKIAotc3RhdGljIGludCBzcGV3X2RlbGF5ID0gMTAwMDsKK3N0YXRpYyBpbnQgc3Bld19kZWxheSA9IDE7CiBtb2R1bGVfcGFyYW0oc3Bld19kZWxheSwgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0Moc3Bld19kZWxheSwKIAkiZGVsYXkgKG1zKSBiZWZvcmUgcmVjYWwgYWZ0ZXIgcGFja2V0IHNwZXcgZGV0ZWN0ZWQiKTsKIAotc3RhdGljIGludCByZWNhbF9ndWFyZF90aW1lID0gMjAwMDsKK3N0YXRpYyBpbnQgcmVjYWxfZ3VhcmRfdGltZTsKIG1vZHVsZV9wYXJhbShyZWNhbF9ndWFyZF90aW1lLCBpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhyZWNhbF9ndWFyZF90aW1lLAogCSJpbnRlcnZhbCAobXMpIGR1cmluZyB3aGljaCByZWNhbCB3aWxsIGJlIHJlc3RhcnRlZCBpZiBwYWNrZXQgcmVjZWl2ZWQiKTsKIAotc3RhdGljIGludCBwb3N0X2ludGVycnVwdF9kZWxheSA9IDEwMDA7CitzdGF0aWMgaW50IHBvc3RfaW50ZXJydXB0X2RlbGF5ID0gNDA7CiBtb2R1bGVfcGFyYW0ocG9zdF9pbnRlcnJ1cHRfZGVsYXksIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHBvc3RfaW50ZXJydXB0X2RlbGF5LAogCSJkZWxheSAobXMpIGJlZm9yZSByZWNhbCBhZnRlciByZWNhbCBpbnRlcnJ1cHQgZGV0ZWN0ZWQiKTsKIAorc3RhdGljIGJvb2wgYXV0b3JlY2FsID0gdHJ1ZTsKK21vZHVsZV9wYXJhbShhdXRvcmVjYWwsIGJvb2wsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhhdXRvcmVjYWwsICJlbmFibGUgcmVjYWxpYnJhdGlvbiBpbiB0aGUgZHJpdmVyIik7CisKK3N0YXRpYyBjaGFyIGhncGtfbW9kZV9uYW1lWzE2XTsKK21vZHVsZV9wYXJhbV9zdHJpbmcoaGdwa19tb2RlLCBoZ3BrX21vZGVfbmFtZSwgc2l6ZW9mKGhncGtfbW9kZV9uYW1lKSwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGhncGtfbW9kZSwKKwkiZGVmYXVsdCBoZ3BrIG1vZGU6IG1vdXNlLCBnbGlkZXNlbnNvciBvciBwZW50YWJsZXQiKTsKKworc3RhdGljIGludCBoZ3BrX2RlZmF1bHRfbW9kZSA9IEhHUEtfTU9ERV9NT1VTRTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBoZ3BrX21vZGVfbmFtZXNbXSA9IHsKKwlbSEdQS19NT0RFX01PVVNFXSA9ICJNb3VzZSIsCisJW0hHUEtfTU9ERV9HTElERVNFTlNPUl0gPSAiR2xpZGVTZW5zb3IiLAorCVtIR1BLX01PREVfUEVOVEFCTEVUXSA9ICJQZW5UYWJsZXQiLAorfTsKKworc3RhdGljIGludCBoZ3BrX21vZGVfZnJvbV9uYW1lKGNvbnN0IGNoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGhncGtfbW9kZV9uYW1lcyk7IGkrKykgeworCQljb25zdCBjaGFyICpuYW1lID0gaGdwa19tb2RlX25hbWVzW2ldOworCQlpZiAoc3RybGVuKG5hbWUpID09IGxlbiAmJiAhc3RybmNhc2VjbXAobmFtZSwgYnVmLCBsZW4pKQorCQkJcmV0dXJuIGk7CisJfQorCisJcmV0dXJuIEhHUEtfTU9ERV9JTlZBTElEOworfQorCiAvKgotICogV2hlbiB0aGUgdG91Y2hwYWQgZ2V0cyB1bHRyYS1zZW5zaXRpdmUsIG9uZSBjYW4ga2VlcCB0aGVpciBmaW5nZXIgMS8yIgotICogYWJvdmUgdGhlIHBhZCBhbmQgc3RpbGwgaGF2ZSBpdCBzZW5kIHBhY2tldHMuICBUaGlzIGNhdXNlcyBhIGp1bXAgY3Vyc29yCi0gKiB3aGVuIG9uZSBwbGFjZXMgdGhlaXIgZmluZ2VyIG9uIHRoZSBwYWQuICBXZSBjYW4gcHJvYmFibHkgZGV0ZWN0IHRoZQotICoganVtcCBhcyB3ZSBzZWUgYSBsYXJnZSBkZWx0YXMgKD49IDEwMHB4KS4gIEluIG1vdXNlIG1vZGUsIEkndmUgYmVlbgotICogdW5hYmxlIHRvIGV2ZW4gY29tZSBjbG9zZSB0byAxMDBweCBkZWx0YXMgZHVyaW5nIG5vcm1hbCB1c2FnZSwgc28gSSB0aGluawotICogdGhpcyB0aHJlc2hvbGQgaXMgc2FmZS4gIElmIGEgbGFyZ2UgZGVsdGEgb2NjdXJzLCB0cmlnZ2VyIGEgcmVjYWxpYnJhdGlvbi4KKyAqIHNlZSBpZiBuZXcgdmFsdWUgaXMgd2l0aGluIDIwJSBvZiBoYWxmIG9mIG9sZCB2YWx1ZQogICovCi1zdGF0aWMgdm9pZCBoZ3BrX2p1bXB5X2hhY2soc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIGludCB4LCBpbnQgeSkKK3N0YXRpYyBpbnQgYXBwcm94X2hhbGYoaW50IGN1cnIsIGludCBwcmV2KQoreworCWludCBiZWxvd2hhbGYsIGFib3ZlaGFsZjsKKworCWlmIChjdXJyIDwgNSB8fCBwcmV2IDwgNSkKKwkJcmV0dXJuIDA7CisKKwliZWxvd2hhbGYgPSAocHJldiAqIDgpIC8gMjA7CisJYWJvdmVoYWxmID0gKHByZXYgKiAxMikgLyAyMDsKKworCXJldHVybiBiZWxvd2hhbGYgPCBjdXJyICYmIGN1cnIgPD0gYWJvdmVoYWxmOworfQorCisvKgorICogVGhyb3cgb3V0IG9kZGx5IGxhcmdlIGRlbHRhIHBhY2tldHMsIGFuZCBhbnkgdGhhdCBpbW1lZGlhdGVseSBmb2xsb3cgd2hvc2UKKyAqIHZhbHVlcyBhcmUgZWFjaCBhcHByb3hpbWF0ZWx5IGhhbGYgb2YgdGhlIHByZXZpb3VzLiAgSXQgc2VlbXMgdGhhdCB0aGUgQUxQUworICogZmlybXdhcmUgZW1pdHMgZXJyYW50IHBhY2tldHMsIGFuZCB0aGV5IGdldCBhdmVyYWdlZCBvdXQgc2xvd2x5LgorICovCitzdGF0aWMgaW50IGhncGtfZGlzY2FyZF9kZWNheV9oYWNrKHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBpbnQgeCwgaW50IHkpCiB7CiAJc3RydWN0IGhncGtfZGF0YSAqcHJpdiA9IHBzbW91c2UtPnByaXZhdGU7CisJaW50IGF2eCwgYXZ5OworCWJvb2wgZG9fcmVjYWwgPSBmYWxzZTsKIAotCWlmIChhYnMoeCkgPiByZWNhbGliX2RlbHRhIHx8IGFicyh5KSA+IHJlY2FsaWJfZGVsdGEpIHsKLQkJaGdwa19lcnIocHNtb3VzZSwgIj4lZHB4IGp1bXAgZGV0ZWN0ZWQgKCVkLCVkKVxuIiwKLQkJCQlyZWNhbGliX2RlbHRhLCB4LCB5KTsKLQkJLyogTXkgY2FyIGdldHMgZm9ydHkgcm9kcyB0byB0aGUgaG9nc2hlYWQgYW5kIHRoYXQncyB0aGUKLQkJICogd2F5IEkgbGlrZXMgaXQhICovCisJYXZ4ID0gYWJzKHgpOworCWF2eSA9IGFicyh5KTsKKworCS8qIGRpc2NhcmQgaWYgdG9vIGJpZywgb3IgaGFsZiB0aGF0IGJ1dCA+IDQgdGltZXMgdGhlIHByZXYgZGVsdGEgKi8KKwlpZiAoYXZ4ID4gcmVjYWxpYl9kZWx0YSB8fAorCQkoYXZ4ID4gcmVjYWxpYl9kZWx0YSAvIDIgJiYgKChhdnggLyA0KSA+IHByaXYtPnhsYXN0KSkpIHsKKwkJaGdwa19lcnIocHNtb3VzZSwgImRldGVjdGVkICVkcHgganVtcCBpbiB4XG4iLCB4KTsKKwkJcHJpdi0+eGJpZ2ogPSBhdng7CisJfSBlbHNlIGlmIChhcHByb3hfaGFsZihhdngsIHByaXYtPnhiaWdqKSkgeworCQloZ3BrX2Vycihwc21vdXNlLCAiZGV0ZWN0ZWQgc2Vjb25kYXJ5ICVkcHgganVtcCBpbiB4XG4iLCB4KTsKKwkJcHJpdi0+eGJpZ2ogPSBhdng7CisJCXByaXYtPnhzYXdfc2Vjb25kYXJ5Kys7CisJfSBlbHNlIHsKKwkJaWYgKHByaXYtPnhiaWdqICYmIHByaXYtPnhzYXdfc2Vjb25kYXJ5ID4gMSkKKwkJCWRvX3JlY2FsID0gdHJ1ZTsKKwkJcHJpdi0+eGJpZ2ogPSAwOworCQlwcml2LT54c2F3X3NlY29uZGFyeSA9IDA7CisJfQorCisJaWYgKGF2eSA+IHJlY2FsaWJfZGVsdGEgfHwKKwkJKGF2eSA+IHJlY2FsaWJfZGVsdGEgLyAyICYmICgoYXZ5IC8gNCkgPiBwcml2LT55bGFzdCkpKSB7CisJCWhncGtfZXJyKHBzbW91c2UsICJkZXRlY3RlZCAlZHB4IGp1bXAgaW4geVxuIiwgeSk7CisJCXByaXYtPnliaWdqID0gYXZ5OworCX0gZWxzZSBpZiAoYXBwcm94X2hhbGYoYXZ5LCBwcml2LT55YmlnaikpIHsKKwkJaGdwa19lcnIocHNtb3VzZSwgImRldGVjdGVkIHNlY29uZGFyeSAlZHB4IGp1bXAgaW4geVxuIiwgeSk7CisJCXByaXYtPnliaWdqID0gYXZ5OworCQlwcml2LT55c2F3X3NlY29uZGFyeSsrOworCX0gZWxzZSB7CisJCWlmIChwcml2LT55YmlnaiAmJiBwcml2LT55c2F3X3NlY29uZGFyeSA+IDEpCisJCQlkb19yZWNhbCA9IHRydWU7CisJCXByaXYtPnliaWdqID0gMDsKKwkJcHJpdi0+eXNhd19zZWNvbmRhcnkgPSAwOworCX0KKworCXByaXYtPnhsYXN0ID0gYXZ4OworCXByaXYtPnlsYXN0ID0gYXZ5OworCisJaWYgKGRvX3JlY2FsICYmIGp1bXB5X2RlbGF5KSB7CisJCWhncGtfZXJyKHBzbW91c2UsICJzY2hlZHVsaW5nIHJlY2FsaWJyYXRpb25cbiIpOwogCQlwc21vdXNlX3F1ZXVlX3dvcmsocHNtb3VzZSwgJnByaXYtPnJlY2FsaWJfd3EsCiAJCQkJbXNlY3NfdG9famlmZmllcyhqdW1weV9kZWxheSkpOwogCX0KKworCXJldHVybiBwcml2LT54YmlnaiB8fCBwcml2LT55YmlnajsKK30KKworc3RhdGljIHZvaWQgaGdwa19yZXNldF9zcGV3X2RldGVjdGlvbihzdHJ1Y3QgaGdwa19kYXRhICpwcml2KQoreworCXByaXYtPnNwZXdfY291bnQgPSAwOworCXByaXYtPmR1cGVfY291bnQgPSAwOworCXByaXYtPnhfdGFsbHkgPSAwOworCXByaXYtPnlfdGFsbHkgPSAwOworCXByaXYtPnNwZXdfZmxhZyA9IE5PX1NQRVc7Cit9CisKK3N0YXRpYyB2b2lkIGhncGtfcmVzZXRfaGFja19zdGF0ZShzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSkKK3sKKwlzdHJ1Y3QgaGdwa19kYXRhICpwcml2ID0gcHNtb3VzZS0+cHJpdmF0ZTsKKworCXByaXYtPmFic194ID0gcHJpdi0+YWJzX3kgPSAtMTsKKwlwcml2LT54bGFzdCA9IHByaXYtPnlsYXN0ID0gSUxMRUdBTF9YWTsKKwlwcml2LT54YmlnaiA9IHByaXYtPnliaWdqID0gMDsKKwlwcml2LT54c2F3X3NlY29uZGFyeSA9IHByaXYtPnlzYXdfc2Vjb25kYXJ5ID0gMDsKKwloZ3BrX3Jlc2V0X3NwZXdfZGV0ZWN0aW9uKHByaXYpOwogfQogCiAvKgpAQCAtMTE2LDIwICsyMjAsNTcgQEAKIAlpZiAobCB8fCByKQogCQlyZXR1cm47CiAKKwkvKiBkb24ndCB0cmFjayBzcGV3IGlmIHRoZSB3b3JrYXJvdW5kIGZlYXR1cmUgaGFzIGJlZW4gdHVybmVkIG9mZiAqLworCWlmICghc3Bld19kZWxheSkKKwkJcmV0dXJuOworCisJaWYgKGFicyh4KSA+IDMgfHwgYWJzKHkpID4gMykgeworCQkvKiBubyBzcGV3LCBvciBzcGV3IGVuZGVkICovCisJCWhncGtfcmVzZXRfc3Bld19kZXRlY3Rpb24ocHJpdik7CisJCXJldHVybjsKKwl9CisKKwkvKiBLZWVwIGEgdGFsbHkgb2YgdGhlIG92ZXJhbGwgZGVsdGEgdG8gdGhlIGN1cnNvciBwb3NpdGlvbiBjYXVzZWQgYnkKKwkgKiB0aGUgc3BldyAqLwogCXByaXYtPnhfdGFsbHkgKz0geDsKIAlwcml2LT55X3RhbGx5ICs9IHk7CiAKLQlpZiAoKytwcml2LT5jb3VudCA+IDEwMCkgeworCXN3aXRjaCAocHJpdi0+c3Bld19mbGFnKSB7CisJY2FzZSBOT19TUEVXOgorCQkvKiB3ZSdyZSBub3Qgc3Bld2luZywgYnV0IHRoaXMgcGFja2V0IG1pZ2h0IGJlIHRoZSBzdGFydCAqLworCQlwcml2LT5zcGV3X2ZsYWcgPSBNQVlCRV9TUEVXSU5HOworCisJCS8qIGZhbGwtdGhyb3VnaCAqLworCisJY2FzZSBNQVlCRV9TUEVXSU5HOgorCQlwcml2LT5zcGV3X2NvdW50Kys7CisKKwkJaWYgKHByaXYtPnNwZXdfY291bnQgPCBTUEVXX1dBVENIX0NPVU5UKQorCQkJYnJlYWs7CisKKwkJLyogZXhjZXNzaXZlIHNwZXcgZGV0ZWN0ZWQsIHJlcXVlc3QgcmVjYWxpYnJhdGlvbiAqLworCQlwcml2LT5zcGV3X2ZsYWcgPSBTUEVXX0RFVEVDVEVEOworCisJCS8qIGZhbGwtdGhyb3VnaCAqLworCisJY2FzZSBTUEVXX0RFVEVDVEVEOgorCQkvKiBvbmx5IHJlY2FsaWJyYXRlIHdoZW4gdGhlIG92ZXJhbGwgZGVsdGEgdG8gdGhlIGN1cnNvcgorCQkgKiBpcyByZWFsbHkgc21hbGwuIGlmIHRoZSBzcGV3IGlzIGNhdXNpbmcgc2lnbmlmaWNhbnQgY3Vyc29yCisJCSAqIG1vdmVtZW50LCBpdCBpcyBwcm9iYWJseSBhIGNhc2Ugb2YgdGhlIHVzZXIgbW92aW5nIHRoZQorCQkgKiBjdXJzb3IgdmVyeSBzbG93bHkgYWNyb3NzIHRoZSBzY3JlZW4uICovCiAJCWlmIChhYnMocHJpdi0+eF90YWxseSkgPCAzICYmIGFicyhwcml2LT55X3RhbGx5KSA8IDMpIHsKLQkJCWhncGtfZGJnKHBzbW91c2UsICJwYWNrZXQgc3BldyBkZXRlY3RlZCAoJWQsJWQpXG4iLAorCQkJaGdwa19lcnIocHNtb3VzZSwgInBhY2tldCBzcGV3IGRldGVjdGVkICglZCwlZClcbiIsCiAJCQkJIHByaXYtPnhfdGFsbHksIHByaXYtPnlfdGFsbHkpOworCQkJcHJpdi0+c3Bld19mbGFnID0gUkVDQUxJQlJBVElORzsKIAkJCXBzbW91c2VfcXVldWVfd29yayhwc21vdXNlLCAmcHJpdi0+cmVjYWxpYl93cSwKIAkJCQkJICAgbXNlY3NfdG9famlmZmllcyhzcGV3X2RlbGF5KSk7CiAJCX0KLQkJLyogcmVzZXQgZXZlcnkgMTAwIHBhY2tldHMgKi8KLQkJcHJpdi0+Y291bnQgPSAwOwotCQlwcml2LT54X3RhbGx5ID0gMDsKLQkJcHJpdi0+eV90YWxseSA9IDA7CisKKwkJYnJlYWs7CisJY2FzZSBSRUNBTElCUkFUSU5HOgorCQkvKiB3ZSBhbHJlYWR5IGRldGVjdGVkIGEgc3BldyBhbmQgcmVxdWVzdGVkIGEgcmVjYWxpYnJhdGlvbiwKKwkJICoganVzdCB3YWl0IGZvciB0aGUgcXVldWUgdG8ga2ljayBpbnRvIGFjdGlvbi4gKi8KKwkJYnJlYWs7CiAJfQogfQogCkBAIC0xNDMsMjUgKzI4NCwxNjggQEAKICAqIHN3ci9zd2wgYXJlIHRoZSBsZWZ0L3JpZ2h0IGJ1dHRvbnMuCiAgKiB4LW5lZy95LW5lZyBhcmUgdGhlIHggYW5kIHkgZGVsdGEgbmVnYXRpdmUgYml0cwogICogeC1vdmVyL3ktb3ZlciBhcmUgdGhlIHggYW5kIHkgb3ZlcmZsb3cgYml0cworICoKKyAqIC0tLQorICoKKyAqIEhHUEsgQWR2YW5jZWQgTW9kZSAtIHNpbmdsZS1tb2RlIGZvcm1hdAorICoKKyAqIGJ5dGUgMChQVCk6ICAxICAgIDEgICAgMCAgICAwICAgIDEgICAgMSAgICAgMSAgICAgMQorICogYnl0ZSAwKEdTKTogIDEgICAgMSAgICAxICAgIDEgICAgMSAgICAxICAgICAxICAgICAxCisgKiBieXRlIDE6ICAgICAgMCAgIHg2ICAgeDUgICB4NCAgIHgzICAgeDIgICAgeDEgICAgeDAKKyAqIGJ5dGUgMihQVCk6ICAwICAgIDAgICB4OSAgIHg4ICAgeDcgICAgPyBwdC1kc3cgICAgMAorICogYnl0ZSAyKEdTKTogIDAgIHgxMCAgIHg5ICAgeDggICB4NyAgICA/IGdzLWRzdyBwdC1kc3cKKyAqIGJ5dGUgMzogICAgICAwICAgeTkgICB5OCAgIHk3ICAgIDEgICAgMCAgIHN3ciAgIHN3bAorICogYnl0ZSA0OiAgICAgIDAgICB5NiAgIHk1ICAgeTQgICB5MyAgIHkyICAgIHkxICAgIHkwCisgKiBieXRlIDU6ICAgICAgMCAgIHo2ICAgejUgICB6NCAgIHozICAgejIgICAgejEgICAgejAKKyAqCisgKiA/J3MgYXJlIG5vdCBkZWZpbmVkIGluIHRoZSBwcm90b2NvbCBzcGVjLCBtYXkgdmFyeSBiZXR3ZWVuIG1vZGVscy4KKyAqCisgKiBzd3Ivc3dsIGFyZSB0aGUgbGVmdC9yaWdodCBidXR0b25zLgorICoKKyAqIHB0LWRzdy9ncy1kc3cgaW5kaWNhdGUgdGhhdCB0aGUgcHQvZ3Mgc2Vuc29yIGlzIGRldGVjdGluZyBhCisgKiBwZW4vZmluZ2VyCiAgKi8KLXN0YXRpYyBpbnQgaGdwa192YWxpZGF0ZV9ieXRlKHVuc2lnbmVkIGNoYXIgKnBhY2tldCkKK3N0YXRpYyBib29sIGhncGtfaXNfYnl0ZV92YWxpZChzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgdW5zaWduZWQgY2hhciAqcGFja2V0KQogewotCXJldHVybiAocGFja2V0WzBdICYgMHgwQykgIT0gMHgwODsKKwlzdHJ1Y3QgaGdwa19kYXRhICpwcml2ID0gcHNtb3VzZS0+cHJpdmF0ZTsKKwlpbnQgcGt0Y250ID0gcHNtb3VzZS0+cGt0Y250OworCWJvb2wgdmFsaWQ7CisKKwlzd2l0Y2ggKHByaXYtPm1vZGUpIHsKKwljYXNlIEhHUEtfTU9ERV9NT1VTRToKKwkJdmFsaWQgPSAocGFja2V0WzBdICYgMHgwQykgPT0gMHgwODsKKwkJYnJlYWs7CisKKwljYXNlIEhHUEtfTU9ERV9HTElERVNFTlNPUjoKKwkJdmFsaWQgPSBwa3RjbnQgPT0gMSA/CisJCQlwYWNrZXRbMF0gPT0gSEdQS19HUyA6ICEocGFja2V0W3BrdGNudCAtIDFdICYgMHg4MCk7CisJCWJyZWFrOworCisJY2FzZSBIR1BLX01PREVfUEVOVEFCTEVUOgorCQl2YWxpZCA9IHBrdGNudCA9PSAxID8KKwkJCXBhY2tldFswXSA9PSBIR1BLX1BUIDogIShwYWNrZXRbcGt0Y250IC0gMV0gJiAweDgwKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQl2YWxpZCA9IGZhbHNlOworCQlicmVhazsKKwl9CisKKwlpZiAoIXZhbGlkKQorCQloZ3BrX2RiZyhwc21vdXNlLAorCQkJICJiYWQgZGF0YSwgbW9kZSAlZCAoJWQpICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4XG4iLAorCQkJIHByaXYtPm1vZGUsIHBrdGNudCwKKwkJCSBwc21vdXNlLT5wYWNrZXRbMF0sIHBzbW91c2UtPnBhY2tldFsxXSwKKwkJCSBwc21vdXNlLT5wYWNrZXRbMl0sIHBzbW91c2UtPnBhY2tldFszXSwKKwkJCSBwc21vdXNlLT5wYWNrZXRbNF0sIHBzbW91c2UtPnBhY2tldFs1XSk7CisKKwlyZXR1cm4gdmFsaWQ7CiB9CiAKLXN0YXRpYyB2b2lkIGhncGtfcHJvY2Vzc19wYWNrZXQoc3RydWN0IHBzbW91c2UgKnBzbW91c2UpCitzdGF0aWMgdm9pZCBoZ3BrX3Byb2Nlc3NfYWR2YW5jZWRfcGFja2V0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlKQoreworCXN0cnVjdCBoZ3BrX2RhdGEgKnByaXYgPSBwc21vdXNlLT5wcml2YXRlOworCXN0cnVjdCBpbnB1dF9kZXYgKmlkZXYgPSBwc21vdXNlLT5kZXY7CisJdW5zaWduZWQgY2hhciAqcGFja2V0ID0gcHNtb3VzZS0+cGFja2V0OworCWludCBkb3duID0gISEocGFja2V0WzJdICYgMik7CisJaW50IGxlZnQgPSAhIShwYWNrZXRbM10gJiAxKTsKKwlpbnQgcmlnaHQgPSAhIShwYWNrZXRbM10gJiAyKTsKKwlpbnQgeCA9IHBhY2tldFsxXSB8ICgocGFja2V0WzJdICYgMHg3OCkgPDwgNCk7CisJaW50IHkgPSBwYWNrZXRbNF0gfCAoKHBhY2tldFszXSAmIDB4NzApIDw8IDMpOworCisJaWYgKHByaXYtPm1vZGUgPT0gSEdQS19NT0RFX0dMSURFU0VOU09SKSB7CisJCWludCBwdF9kb3duID0gISEocGFja2V0WzJdICYgMSk7CisJCWludCBmaW5nZXJfZG93biA9ICEhKHBhY2tldFsyXSAmIDIpOworCQlpbnQgeiA9IHBhY2tldFs1XTsKKworCQlpbnB1dF9yZXBvcnRfYWJzKGlkZXYsIEFCU19QUkVTU1VSRSwgeik7CisJCWlmICh0cGRlYnVnKQorCQkJaGdwa19kYmcocHNtb3VzZSwgInBkPSVkIGZkPSVkIHo9JWQiLAorCQkJCSBwdF9kb3duLCBmaW5nZXJfZG93biwgeik7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogUGVuVGFibGV0IG1vZGUgZG9lcyBub3QgcmVwb3J0IHByZXNzdXJlLCBzbyB3ZSBkb24ndAorCQkgKiByZXBvcnQgaXQgaGVyZQorCQkgKi8KKwkJaWYgKHRwZGVidWcpCisJCQloZ3BrX2RiZyhwc21vdXNlLCAicGQ9JWQgIiwgZG93bik7CisJfQorCisJaWYgKHRwZGVidWcpCisJCWhncGtfZGJnKHBzbW91c2UsICJsPSVkIHI9JWQgeD0lZCB5PSVkXG4iLCBsZWZ0LCByaWdodCwgeCwgeSk7CisKKwlpbnB1dF9yZXBvcnRfa2V5KGlkZXYsIEJUTl9UT1VDSCwgZG93bik7CisJaW5wdXRfcmVwb3J0X2tleShpZGV2LCBCVE5fTEVGVCwgbGVmdCk7CisJaW5wdXRfcmVwb3J0X2tleShpZGV2LCBCVE5fUklHSFQsIHJpZ2h0KTsKKworCS8qCisJICogSWYgdGhpcyBwYWNrZXQgc2F5cyB0aGF0IHRoZSBmaW5nZXIgd2FzIHJlbW92ZWQsIHJlc2V0IG91ciBwb3NpdGlvbgorCSAqIHRyYWNraW5nIHNvIHRoYXQgd2UgZG9uJ3QgZXJyb25lb3VzbHkgZGV0ZWN0IGEganVtcCBvbiBuZXh0IHByZXNzLgorCSAqLworCWlmICghZG93bikgeworCQloZ3BrX3Jlc2V0X2hhY2tfc3RhdGUocHNtb3VzZSk7CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKgorCSAqIFdlZWQgb3V0IGR1cGxpY2F0ZSBwYWNrZXRzICh3ZSBnZXQgcXVpdGUgYSBmZXcsIGFuZCB0aGV5IG1lc3MgdXAKKwkgKiBvdXIganVtcCBkZXRlY3Rpb24pCisJICovCisJaWYgKHggPT0gcHJpdi0+YWJzX3ggJiYgeSA9PSBwcml2LT5hYnNfeSkgeworCQlpZiAoKytwcml2LT5kdXBlX2NvdW50ID4gU1BFV19XQVRDSF9DT1VOVCkgeworCQkJaWYgKHRwZGVidWcpCisJCQkJaGdwa19kYmcocHNtb3VzZSwgImhhcmQgc3BldyBkZXRlY3RlZFxuIik7CisJCQlwcml2LT5zcGV3X2ZsYWcgPSBSRUNBTElCUkFUSU5HOworCQkJcHNtb3VzZV9xdWV1ZV93b3JrKHBzbW91c2UsICZwcml2LT5yZWNhbGliX3dxLAorCQkJCQkgICBtc2Vjc190b19qaWZmaWVzKHNwZXdfZGVsYXkpKTsKKwkJfQorCQlnb3RvIGRvbmU7CisJfQorCisJLyogbm90IGEgZHVwbGljYXRlLCBjb250aW51ZSB3aXRoIHBvc2l0aW9uIHJlcG9ydGluZyAqLworCXByaXYtPmR1cGVfY291bnQgPSAwOworCisJLyogRG9uJ3QgYXBwbHkgaGFja3MgaW4gUFQgbW9kZSwgaXQgc2VlbXMgcmVsaWFibGUgKi8KKwlpZiAocHJpdi0+bW9kZSAhPSBIR1BLX01PREVfUEVOVEFCTEVUICYmIHByaXYtPmFic194ICE9IC0xKSB7CisJCWludCB4X2RpZmYgPSBwcml2LT5hYnNfeCAtIHg7CisJCWludCB5X2RpZmYgPSBwcml2LT5hYnNfeSAtIHk7CisJCWlmIChoZ3BrX2Rpc2NhcmRfZGVjYXlfaGFjayhwc21vdXNlLCB4X2RpZmYsIHlfZGlmZikpIHsKKwkJCWlmICh0cGRlYnVnKQorCQkJCWhncGtfZGJnKHBzbW91c2UsICJkaXNjYXJkaW5nXG4iKTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCQloZ3BrX3NwZXdpbmdfaGFjayhwc21vdXNlLCBsZWZ0LCByaWdodCwgeF9kaWZmLCB5X2RpZmYpOworCX0KKworCWlucHV0X3JlcG9ydF9hYnMoaWRldiwgQUJTX1gsIHgpOworCWlucHV0X3JlcG9ydF9hYnMoaWRldiwgQUJTX1ksIHkpOworCXByaXYtPmFic194ID0geDsKKwlwcml2LT5hYnNfeSA9IHk7CisKK2RvbmU6CisJaW5wdXRfc3luYyhpZGV2KTsKK30KKworc3RhdGljIHZvaWQgaGdwa19wcm9jZXNzX3NpbXBsZV9wYWNrZXQoc3RydWN0IHBzbW91c2UgKnBzbW91c2UpCiB7CiAJc3RydWN0IGlucHV0X2RldiAqZGV2ID0gcHNtb3VzZS0+ZGV2OwogCXVuc2lnbmVkIGNoYXIgKnBhY2tldCA9IHBzbW91c2UtPnBhY2tldDsKLQlpbnQgeCwgeSwgbGVmdCwgcmlnaHQ7CisJaW50IGxlZnQgPSBwYWNrZXRbMF0gJiAxOworCWludCByaWdodCA9IChwYWNrZXRbMF0gPj4gMSkgJiAxOworCWludCB4ID0gcGFja2V0WzFdIC0gKChwYWNrZXRbMF0gPDwgNCkgJiAweDEwMCk7CisJaW50IHkgPSAoKHBhY2tldFswXSA8PCAzKSAmIDB4MTAwKSAtIHBhY2tldFsyXTsKIAotCWxlZnQgPSBwYWNrZXRbMF0gJiAxOwotCXJpZ2h0ID0gKHBhY2tldFswXSA+PiAxKSAmIDE7CisJaWYgKHBhY2tldFswXSAmIDB4YzApCisJCWhncGtfZGJnKHBzbW91c2UsCisJCQkgIm92ZXJmbG93IC0tIDB4JTAyeCAweCUwMnggMHglMDJ4XG4iLAorCQkJIHBhY2tldFswXSwgcGFja2V0WzFdLCBwYWNrZXRbMl0pOwogCi0JeCA9IHBhY2tldFsxXSAtICgocGFja2V0WzBdIDw8IDQpICYgMHgxMDApOwotCXkgPSAoKHBhY2tldFswXSA8PCAzKSAmIDB4MTAwKSAtIHBhY2tldFsyXTsKKwlpZiAoaGdwa19kaXNjYXJkX2RlY2F5X2hhY2socHNtb3VzZSwgeCwgeSkpIHsKKwkJaWYgKHRwZGVidWcpCisJCQloZ3BrX2RiZyhwc21vdXNlLCAiZGlzY2FyZGluZ1xuIik7CisJCXJldHVybjsKKwl9CiAKLQloZ3BrX2p1bXB5X2hhY2socHNtb3VzZSwgeCwgeSk7CiAJaGdwa19zcGV3aW5nX2hhY2socHNtb3VzZSwgbGVmdCwgcmlnaHQsIHgsIHkpOwogCiAJaWYgKHRwZGVidWcpCkBAIC0xODAsMTUgKzQ2NCwxNCBAQAogewogCXN0cnVjdCBoZ3BrX2RhdGEgKnByaXYgPSBwc21vdXNlLT5wcml2YXRlOwogCi0JaWYgKGhncGtfdmFsaWRhdGVfYnl0ZShwc21vdXNlLT5wYWNrZXQpKSB7Ci0JCWhncGtfZGJnKHBzbW91c2UsICIlczogKCVkKSAlMDJ4ICUwMnggJTAyeFxuIiwKLQkJCQlfX2Z1bmNfXywgcHNtb3VzZS0+cGt0Y250LCBwc21vdXNlLT5wYWNrZXRbMF0sCi0JCQkJcHNtb3VzZS0+cGFja2V0WzFdLCBwc21vdXNlLT5wYWNrZXRbMl0pOworCWlmICghaGdwa19pc19ieXRlX3ZhbGlkKHBzbW91c2UsIHBzbW91c2UtPnBhY2tldCkpCiAJCXJldHVybiBQU01PVVNFX0JBRF9EQVRBOwotCX0KIAogCWlmIChwc21vdXNlLT5wa3RjbnQgPj0gcHNtb3VzZS0+cGt0c2l6ZSkgewotCQloZ3BrX3Byb2Nlc3NfcGFja2V0KHBzbW91c2UpOworCQlpZiAocHJpdi0+bW9kZSA9PSBIR1BLX01PREVfTU9VU0UpCisJCQloZ3BrX3Byb2Nlc3Nfc2ltcGxlX3BhY2tldChwc21vdXNlKTsKKwkJZWxzZQorCQkJaGdwa19wcm9jZXNzX2FkdmFuY2VkX3BhY2tldChwc21vdXNlKTsKIAkJcmV0dXJuIFBTTU9VU0VfRlVMTF9QQUNLRVQ7CiAJfQogCkBAIC0yMTAsMzMgKzQ5MywxNzYgQEAKIAlyZXR1cm4gUFNNT1VTRV9HT09EX0RBVEE7CiB9CiAKK3N0YXRpYyBpbnQgaGdwa19zZWxlY3RfbW9kZShzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSkKK3sKKwlzdHJ1Y3QgcHMyZGV2ICpwczJkZXYgPSAmcHNtb3VzZS0+cHMyZGV2OworCXN0cnVjdCBoZ3BrX2RhdGEgKnByaXYgPSBwc21vdXNlLT5wcml2YXRlOworCWludCBpOworCWludCBjbWQ7CisKKwkvKgorCSAqIDQgZGlzYWJsZXMgdG8gZW5hYmxlIGFkdmFuY2VkIG1vZGUKKwkgKiB0aGVuIDMgMHhmMiBieXRlcyBhcyB0aGUgcHJlYW1ibGUgZm9yIEdTL1BUIHNlbGVjdGlvbgorCSAqLworCWNvbnN0IGludCBhZHZhbmNlZF9pbml0W10gPSB7CisJCVBTTU9VU0VfQ01EX0RJU0FCTEUsIFBTTU9VU0VfQ01EX0RJU0FCTEUsCisJCVBTTU9VU0VfQ01EX0RJU0FCTEUsIFBTTU9VU0VfQ01EX0RJU0FCTEUsCisJCTB4ZjIsIDB4ZjIsIDB4ZjIsCisJfTsKKworCXN3aXRjaCAocHJpdi0+bW9kZSkgeworCWNhc2UgSEdQS19NT0RFX01PVVNFOgorCQlwc21vdXNlLT5wa3RzaXplID0gMzsKKwkJYnJlYWs7CisKKwljYXNlIEhHUEtfTU9ERV9HTElERVNFTlNPUjoKKwljYXNlIEhHUEtfTU9ERV9QRU5UQUJMRVQ6CisJCXBzbW91c2UtPnBrdHNpemUgPSA2OworCisJCS8qIFN3aXRjaCB0byAnQWR2YW5jZWQgbW9kZS4nLCBmb3VyIGRpc2FibGVzIGluIGEgcm93LiAqLworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhZHZhbmNlZF9pbml0KTsgaSsrKQorCQkJaWYgKHBzMl9jb21tYW5kKHBzMmRldiwgTlVMTCwgYWR2YW5jZWRfaW5pdFtpXSkpCisJCQkJcmV0dXJuIC1FSU87CisKKwkJLyogc2VsZWN0IGJldHdlZW4gR2xpZGVTZW5zb3IgKG1vdXNlKSBvciBQZW5UYWJsZXQgKi8KKwkJY21kID0gcHJpdi0+bW9kZSA9PSBIR1BLX01PREVfR0xJREVTRU5TT1IgPworCQkJUFNNT1VTRV9DTURfU0VUU0NBTEUxMSA6IFBTTU9VU0VfQ01EX1NFVFNDQUxFMjE7CisKKwkJaWYgKHBzMl9jb21tYW5kKHBzMmRldiwgTlVMTCwgY21kKSkKKwkJCXJldHVybiAtRUlPOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBoZ3BrX3NldHVwX2lucHV0X2RldmljZShzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCwKKwkJCQkgICAgc3RydWN0IGlucHV0X2RldiAqb2xkX2lucHV0LAorCQkJCSAgICBlbnVtIGhncGtfbW9kZSBtb2RlKQoreworCWlmIChvbGRfaW5wdXQpIHsKKwkJaW5wdXQtPm5hbWUgPSBvbGRfaW5wdXQtPm5hbWU7CisJCWlucHV0LT5waHlzID0gb2xkX2lucHV0LT5waHlzOworCQlpbnB1dC0+aWQgPSBvbGRfaW5wdXQtPmlkOworCQlpbnB1dC0+ZGV2LnBhcmVudCA9IG9sZF9pbnB1dC0+ZGV2LnBhcmVudDsKKwl9CisKKwltZW1zZXQoaW5wdXQtPmV2Yml0LCAwLCBzaXplb2YoaW5wdXQtPmV2Yml0KSk7CisJbWVtc2V0KGlucHV0LT5yZWxiaXQsIDAsIHNpemVvZihpbnB1dC0+cmVsYml0KSk7CisJbWVtc2V0KGlucHV0LT5rZXliaXQsIDAsIHNpemVvZihpbnB1dC0+a2V5Yml0KSk7CisKKwkvKiBBbGwgbW9kZXMgcmVwb3J0IGxlZnQgYW5kIHJpZ2h0IGJ1dHRvbnMgKi8KKwlfX3NldF9iaXQoRVZfS0VZLCBpbnB1dC0+ZXZiaXQpOworCV9fc2V0X2JpdChCVE5fTEVGVCwgaW5wdXQtPmtleWJpdCk7CisJX19zZXRfYml0KEJUTl9SSUdIVCwgaW5wdXQtPmtleWJpdCk7CisKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIEhHUEtfTU9ERV9NT1VTRToKKwkJX19zZXRfYml0KEVWX1JFTCwgaW5wdXQtPmV2Yml0KTsKKwkJX19zZXRfYml0KFJFTF9YLCBpbnB1dC0+cmVsYml0KTsKKwkJX19zZXRfYml0KFJFTF9ZLCBpbnB1dC0+cmVsYml0KTsKKwkJYnJlYWs7CisKKwljYXNlIEhHUEtfTU9ERV9HTElERVNFTlNPUjoKKwkJX19zZXRfYml0KEJUTl9UT1VDSCwgaW5wdXQtPmtleWJpdCk7CisJCV9fc2V0X2JpdChCVE5fVE9PTF9GSU5HRVIsIGlucHV0LT5rZXliaXQpOworCisJCV9fc2V0X2JpdChFVl9BQlMsIGlucHV0LT5ldmJpdCk7CisKKwkJLyogR2xpZGVTZW5zb3IgaGFzIHByZXNzdXJlIHNlbnNvciwgUGVuVGFibGV0IGRvZXMgbm90ICovCisJCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0LCBBQlNfUFJFU1NVUkUsIDAsIDE1LCAwLCAwKTsKKworCQkvKiBGcm9tIGRldmljZSBzcGVjcyAqLworCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dCwgQUJTX1gsIDAsIDM5OSwgMCwgMCk7CisJCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0LCBBQlNfWSwgMCwgMjkwLCAwLCAwKTsKKworCQkvKiBDYWxjdWxhdGVkIGJ5IGhhbmQgYmFzZWQgb24gdXNhYmxlIHNpemUgKDUybW0geCAzOG1tKSAqLworCQlpbnB1dF9hYnNfc2V0X3JlcyhpbnB1dCwgQUJTX1gsIDgpOworCQlpbnB1dF9hYnNfc2V0X3JlcyhpbnB1dCwgQUJTX1ksIDgpOworCQlicmVhazsKKworCWNhc2UgSEdQS19NT0RFX1BFTlRBQkxFVDoKKwkJX19zZXRfYml0KEJUTl9UT1VDSCwgaW5wdXQtPmtleWJpdCk7CisJCV9fc2V0X2JpdChCVE5fVE9PTF9GSU5HRVIsIGlucHV0LT5rZXliaXQpOworCisJCV9fc2V0X2JpdChFVl9BQlMsIGlucHV0LT5ldmJpdCk7CisKKwkJLyogRnJvbSBkZXZpY2Ugc3BlY3MgKi8KKwkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXQsIEFCU19YLCAwLCA5OTksIDAsIDApOworCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dCwgQUJTX1ksIDUsIDIzOSwgMCwgMCk7CisKKwkJLyogQ2FsY3VsYXRlZCBieSBoYW5kIGJhc2VkIG9uIHVzYWJsZSBzaXplICgxNTZtbSB4IDM4bW0pICovCisJCWlucHV0X2Fic19zZXRfcmVzKGlucHV0LCBBQlNfWCwgNik7CisJCWlucHV0X2Fic19zZXRfcmVzKGlucHV0LCBBQlNfWSwgOCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJQlVHKCk7CisJfQorfQorCitzdGF0aWMgaW50IGhncGtfcmVzZXRfZGV2aWNlKHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBib29sIHJlY2FsaWJyYXRlKQoreworCWludCBlcnI7CisKKwlwc21vdXNlX3Jlc2V0KHBzbW91c2UpOworCisJaWYgKHJlY2FsaWJyYXRlKSB7CisJCXN0cnVjdCBwczJkZXYgKnBzMmRldiA9ICZwc21vdXNlLT5wczJkZXY7CisKKwkJLyogc2VuZCB0aGUgcmVjYWxpYnJhdGUgcmVxdWVzdCAqLworCQlpZiAocHMyX2NvbW1hbmQocHMyZGV2LCBOVUxMLCAweGY1KSB8fAorCQkgICAgcHMyX2NvbW1hbmQocHMyZGV2LCBOVUxMLCAweGY1KSB8fAorCQkgICAgcHMyX2NvbW1hbmQocHMyZGV2LCBOVUxMLCAweGU2KSB8fAorCQkgICAgcHMyX2NvbW1hbmQocHMyZGV2LCBOVUxMLCAweGY1KSkgeworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJLyogYWNjb3JkaW5nIHRvIEFMUFMsIDE1MG1TIGlzIHJlcXVpcmVkIGZvciByZWNhbGlicmF0aW9uICovCisJCW1zbGVlcCgxNTApOworCX0KKworCWVyciA9IGhncGtfc2VsZWN0X21vZGUocHNtb3VzZSk7CisJaWYgKGVycikgeworCQloZ3BrX2Vycihwc21vdXNlLCAiZmFpbGVkIHRvIHNlbGVjdCBtb2RlXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwloZ3BrX3Jlc2V0X2hhY2tfc3RhdGUocHNtb3VzZSk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBoZ3BrX2ZvcmNlX3JlY2FsaWJyYXRlKHN0cnVjdCBwc21vdXNlICpwc21vdXNlKQogewogCXN0cnVjdCBwczJkZXYgKnBzMmRldiA9ICZwc21vdXNlLT5wczJkZXY7CiAJc3RydWN0IGhncGtfZGF0YSAqcHJpdiA9IHBzbW91c2UtPnByaXZhdGU7CisJaW50IGVycjsKIAogCS8qIEMtc2VyaWVzIHRvdWNocGFkcyBhZGRlZCB0aGUgcmVjYWxpYnJhdGUgY29tbWFuZCAqLwogCWlmIChwc21vdXNlLT5tb2RlbCA8IEhHUEtfTU9ERUxfQykKIAkJcmV0dXJuIDA7CiAKKwlpZiAoIWF1dG9yZWNhbCkgeworCQloZ3BrX2RiZyhwc21vdXNlLCAicmVjYWxpYnJhdGlvbnMgZGlzYWJsZWQsIGlnbm9yaW5nXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaGdwa19kYmcocHNtb3VzZSwgInJlY2FsaWJyYXRpbmcgdG91Y2hwYWQuLlxuIik7CisKIAkvKiB3ZSBkb24ndCB3YW50IHRvIHJhY2Ugd2l0aCB0aGUgaXJxIGhhbmRsZXIsIG5vciB3aXRoIHJlc3luY3MgKi8KIAlwc21vdXNlX3NldF9zdGF0ZShwc21vdXNlLCBQU01PVVNFX0lOSVRJQUxJWklORyk7CiAKIAkvKiBzdGFydCBieSByZXNldHRpbmcgdGhlIGRldmljZSAqLwotCXBzbW91c2VfcmVzZXQocHNtb3VzZSk7CisJZXJyID0gaGdwa19yZXNldF9kZXZpY2UocHNtb3VzZSwgdHJ1ZSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKIAotCS8qIHNlbmQgdGhlIHJlY2FsaWJyYXRlIHJlcXVlc3QgKi8KLQlpZiAocHMyX2NvbW1hbmQocHMyZGV2LCBOVUxMLCAweGY1KSB8fAotCSAgICBwczJfY29tbWFuZChwczJkZXYsIE5VTEwsIDB4ZjUpIHx8Ci0JICAgIHBzMl9jb21tYW5kKHBzMmRldiwgTlVMTCwgMHhlNikgfHwKLQkgICAgcHMyX2NvbW1hbmQocHMyZGV2LCBOVUxMLCAweGY1KSkgewotCQlyZXR1cm4gLTE7Ci0JfQotCi0JLyogYWNjb3JkaW5nIHRvIEFMUFMsIDE1MG1TIGlzIHJlcXVpcmVkIGZvciByZWNhbGlicmF0aW9uICovCi0JbXNsZWVwKDE1MCk7Ci0KLQkvKiBYWFg6IElmIGEgZmluZ2VyIGlzIGRvd24gZHVyaW5nIHRoaXMgZGVsYXksIHJlY2FsaWJyYXRpb24gd2lsbAorCS8qCisJICogWFhYOiBJZiBhIGZpbmdlciBpcyBkb3duIGR1cmluZyB0aGlzIGRlbGF5LCByZWNhbGlicmF0aW9uIHdpbGwKIAkgKiBkZXRlY3QgY2FwYWNpdGFuY2UgaW5jb3JyZWN0bHkuICBUaGlzIGlzIGEgaGFyZHdhcmUgYnVnLCBhbmQKIAkgKiB3ZSBkb24ndCBoYXZlIGEgZ29vZCB3YXkgdG8gZGVhbCB3aXRoIGl0LiAgVGhlIDJzIHdpbmRvdyBzdHVmZgogCSAqIChiZWxvdykgaXMgb3VyIGJlc3Qgb3B0aW9uIGZvciBub3cuCkBAIC0yNDcsMjUgKzY3MywzNSBAQAogCiAJcHNtb3VzZV9zZXRfc3RhdGUocHNtb3VzZSwgUFNNT1VTRV9BQ1RJVkFURUQpOwogCi0JLyogQWZ0ZXIgd2UgcmVjYWxpYnJhdGUsIHdlIHNob3VsZG4ndCBnZXQgYW55IHBhY2tldHMgZm9yIDJzLiAgSWYKLQkgKiB3ZSBkbywgaXQncyBsaWtlbHkgdGhhdCBzb21lb25lJ3MgZmluZ2VyIHdhcyBvbiB0aGUgdG91Y2hwYWQuCi0JICogSWYgc29tZW9uZSdzIGZpbmdlciAqd2FzKiBvbiB0aGUgdG91Y2hwYWQsIGl0J3MgcHJvYmFibHkKLQkgKiBtaXNjYWxpYnJhdGVkLiAgU28sIHdlIHNob3VsZCBzY2hlZHVsZSBhbm90aGVyIHJlY2FsaWJyYXRpb24KKwlpZiAodHBkZWJ1ZykKKwkJaGdwa19kYmcocHNtb3VzZSwgInRvdWNocGFkIHJlYWN0aXZhdGVkXG4iKTsKKworCS8qCisJICogSWYgd2UgZ2V0IHBhY2tldHMgcmlnaHQgYXdheSBhZnRlciByZWNhbGlicmF0aW5nLCBpdCdzIGxpa2VseQorCSAqIHRoYXQgYSBmaW5nZXIgd2FzIG9uIHRoZSB0b3VjaHBhZC4gIElmIHNvLCBpdCdzIHByb2JhYmx5CisJICogbWlzY2FsaWJyYXRlZCwgc28gd2Ugb3B0aW9uYWxseSBzY2hlZHVsZSBhbm90aGVyLgogCSAqLwotCXByaXYtPnJlY2FsaWJfd2luZG93ID0gamlmZmllcyArICBtc2Vjc190b19qaWZmaWVzKHJlY2FsX2d1YXJkX3RpbWUpOworCWlmIChyZWNhbF9ndWFyZF90aW1lKQorCQlwcml2LT5yZWNhbGliX3dpbmRvdyA9IGppZmZpZXMgKworCQkJbXNlY3NfdG9famlmZmllcyhyZWNhbF9ndWFyZF90aW1lKTsKIAogCXJldHVybiAwOwogfQogCiAvKgotICogVGhpcyBraWxscyBwb3dlciB0byB0aGUgdG91Y2hwYWQ7IGFjY29yZGluZyB0byBBTFBTLCBjdXJyZW50IGNvbnN1bXB0aW9uCi0gKiBnb2VzIGRvd24gdG8gNTB1QSBhZnRlciBydW5uaW5nIHRoaXMuICBUbyB0dXJuIHBvd2VyIGJhY2sgb24sIHdlIGRyaXZlCi0gKiBNUy1EQVQgbG93LgorICogVGhpcyBwdXRzIHRoZSB0b3VjaHBhZCBpbiBhIHBvd2VyIHNhdmluZyBtb2RlOyBhY2NvcmRpbmcgdG8gQUxQUywgY3VycmVudAorICogY29uc3VtcHRpb24gZ29lcyBkb3duIHRvIDUwdUEgYWZ0ZXIgcnVubmluZyB0aGlzLiAgVG8gdHVybiBwb3dlciBiYWNrIG9uLAorICogd2UgZHJpdmUgTVMtREFUIGxvdy4gIE1lYXN1cmluZyB3aXRoIGEgMW1BIHJlc29sdXRpb24gYW1tZXRlciBzYXlzIHRoYXQKKyAqIHRoZSBjdXJyZW50IG9uIHRoZSBTVVNfMy4zViByYWlsIGRyb3BzIGZyb20gM21BIG9yIDRtQSB0byAwIHdoZW4gd2UgZG8gdGhpcy4KKyAqCisgKiBXZSBoYXZlIG5vIGZvcm1hbCBzcGVjIHRoYXQgZGV0YWlscyB0aGlzIG9wZXJhdGlvbiAtLSB0aGUgbG93LXBvd2VyCisgKiBzZXF1ZW5jZSBjYW1lIGZyb20gYSBsb25nLWxvc3QgZW1haWwgdHJhaWwuCiAgKi8KLXN0YXRpYyBpbnQgaGdwa190b2dnbGVfcG93ZXIoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIGludCBlbmFibGUpCitzdGF0aWMgaW50IGhncGtfdG9nZ2xlX3Bvd2Vyc2F2ZShzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgaW50IGVuYWJsZSkKIHsKIAlzdHJ1Y3QgcHMyZGV2ICpwczJkZXYgPSAmcHNtb3VzZS0+cHMyZGV2OwogCWludCB0aW1lbzsKKwlpbnQgZXJyOwogCiAJLyogQWRkZWQgb24gRC1zZXJpZXMgdG91Y2hwYWRzICovCiAJaWYgKHBzbW91c2UtPm1vZGVsIDwgSEdQS19NT0RFTF9EKQpAQCAtMjc5LDI0ICs3MTUsMjcgQEAKIAkJICogdGhlIGNvbnRyb2xsZXIuICBPbmNlIHdlIGdldCBhbiBBQ0sgYmFjayBmcm9tIGl0LCBpdAogCQkgKiBtZWFucyB3ZSBjYW4gY29udGludWUgd2l0aCB0aGUgdG91Y2hwYWQgcmUtaW5pdC4gIEFMUFMKIAkJICogdGVsbHMgdXMgdGhhdCAxcyBzaG91bGQgYmUgbG9uZyBlbm91Z2gsIHNvIHNldCB0aGF0IGFzCi0JCSAqIHRoZSB1cHBlciBib3VuZC4KKwkJICogdGhlIHVwcGVyIGJvdW5kLiAoaW4gcHJhY3RpY2UsIGl0IHRha2VzIGFib3V0IDMgbG9vcHMuKQogCQkgKi8KIAkJZm9yICh0aW1lbyA9IDIwOyB0aW1lbyA+IDA7IHRpbWVvLS0pIHsKIAkJCWlmICghcHMyX3NlbmRieXRlKCZwc21vdXNlLT5wczJkZXYsCiAJCQkJCVBTTU9VU0VfQ01EX0RJU0FCTEUsIDIwKSkKIAkJCQlicmVhazsKLQkJCW1zbGVlcCg1MCk7CisJCQltc2xlZXAoMjUpOwogCQl9CiAKLQkJcHNtb3VzZV9yZXNldChwc21vdXNlKTsKKwkJZXJyID0gaGdwa19yZXNldF9kZXZpY2UocHNtb3VzZSwgZmFsc2UpOworCQlpZiAoZXJyKSB7CisJCQloZ3BrX2Vycihwc21vdXNlLCAiRmFpbGVkIHRvIHJlc2V0IGRldmljZSFcbiIpOworCQkJcmV0dXJuIGVycjsKKwkJfQogCiAJCS8qIHNob3VsZCBiZSBhbGwgc2V0LCBlbmFibGUgdGhlIHRvdWNocGFkICovCiAJCXBzMl9jb21tYW5kKCZwc21vdXNlLT5wczJkZXYsIE5VTEwsIFBTTU9VU0VfQ01EX0VOQUJMRSk7CiAJCXBzbW91c2Vfc2V0X3N0YXRlKHBzbW91c2UsIFBTTU9VU0VfQUNUSVZBVEVEKTsKLQorCQloZ3BrX2RiZyhwc21vdXNlLCAiVG91Y2hwYWQgcG93ZXJlZCB1cC5cbiIpOwogCX0gZWxzZSB7CiAJCWhncGtfZGJnKHBzbW91c2UsICJQb3dlcmluZyBvZmYgdG91Y2hwYWQuXG4iKTsKLQkJcHNtb3VzZV9zZXRfc3RhdGUocHNtb3VzZSwgUFNNT1VTRV9JR05PUkUpOwogCiAJCWlmIChwczJfY29tbWFuZChwczJkZXYsIE5VTEwsIDB4ZWMpIHx8CiAJCSAgICBwczJfY29tbWFuZChwczJkZXYsIE5VTEwsIDB4ZWMpIHx8CkBAIC0zMDQsNiArNzQzLDggQEAKIAkJCXJldHVybiAtMTsKIAkJfQogCisJCXBzbW91c2Vfc2V0X3N0YXRlKHBzbW91c2UsIFBTTU9VU0VfSUdOT1JFKTsKKwogCQkvKiBwcm9iYWJseSB3b24ndCBzZWUgYW4gQUNLLCB0aGUgdG91Y2hwYWQgd2lsbCBiZSBvZmYgKi8KIAkJcHMyX3NlbmRieXRlKCZwc21vdXNlLT5wczJkZXYsIDB4ZWMsIDIwKTsKIAl9CkBAIC0zMTksMTcgKzc2MCwyMCBAQAogCiBzdGF0aWMgaW50IGhncGtfcmVjb25uZWN0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlKQogewotCS8qIER1cmluZyBzdXNwZW5kL3Jlc3VtZSB0aGUgcHMyIHJhaWxzIHJlbWFpbiBwb3dlcmVkLiAgV2UgZG9uJ3Qgd2FudAorCXN0cnVjdCBoZ3BrX2RhdGEgKnByaXYgPSBwc21vdXNlLT5wcml2YXRlOworCisJLyoKKwkgKiBEdXJpbmcgc3VzcGVuZC9yZXN1bWUgdGhlIHBzMiByYWlscyByZW1haW4gcG93ZXJlZC4gIFdlIGRvbid0IHdhbnQKIAkgKiB0byBkbyBhIHJlc2V0IGJlY2F1c2UgaXQncyBmbHVzaCBkYXRhIG91dCBvZiBidWZmZXJzOyBob3dldmVyLAotCSAqIGVhcmxpZXIgcHJvdG90eXBlcyAoQjEpIGhhZCBzb21lIGJyb2tlbm5lc3MgdGhhdCByZXF1aXJlZCBhIHJlc2V0LiAqLworCSAqIGVhcmxpZXIgcHJvdG90eXBlcyAoQjEpIGhhZCBzb21lIGJyb2tlbm5lc3MgdGhhdCByZXF1aXJlZCBhIHJlc2V0LgorCSAqLwogCWlmIChvbHBjX2JvYXJkX2F0X2xlYXN0KG9scGNfYm9hcmQoMHhiMikpKQogCQlpZiAocHNtb3VzZS0+cHMyZGV2LnNlcmlvLT5kZXYucG93ZXIucG93ZXJfc3RhdGUuZXZlbnQgIT0KIAkJCQlQTV9FVkVOVF9PTikKIAkJCXJldHVybiAwOwogCi0JcHNtb3VzZV9yZXNldChwc21vdXNlKTsKLQotCXJldHVybiAwOworCXByaXYtPnBvd2VyZWQgPSAxOworCXJldHVybiBoZ3BrX3Jlc2V0X2RldmljZShwc21vdXNlLCBmYWxzZSk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IGhncGtfc2hvd19wb3dlcmVkKHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCB2b2lkICpkYXRhLCBjaGFyICpidWYpCkBAIC0zNTUsNyArNzk5LDcgQEAKIAkJICogaGdwa190b2dnbGVfcG93ZXIgd2lsbCBkZWFsIHcvIHN0YXRlIHNvCiAJCSAqIHdlJ3JlIG5vdCByYWNpbmcgdy8gaXJxCiAJCSAqLwotCQllcnIgPSBoZ3BrX3RvZ2dsZV9wb3dlcihwc21vdXNlLCB2YWx1ZSk7CisJCWVyciA9IGhncGtfdG9nZ2xlX3Bvd2Vyc2F2ZShwc21vdXNlLCB2YWx1ZSk7CiAJCWlmICghZXJyKQogCQkJcHJpdi0+cG93ZXJlZCA9IHZhbHVlOwogCX0KQEAgLTM2Niw2ICs4MTAsNjUgQEAKIF9fUFNNT1VTRV9ERUZJTkVfQVRUUihwb3dlcmVkLCBTX0lXVVNSIHwgU19JUlVHTywgTlVMTCwKIAkJICAgICAgaGdwa19zaG93X3Bvd2VyZWQsIGhncGtfc2V0X3Bvd2VyZWQsIGZhbHNlKTsKIAorc3RhdGljIHNzaXplX3QgYXR0cl9zaG93X21vZGUoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIHZvaWQgKmRhdGEsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaGdwa19kYXRhICpwcml2ID0gcHNtb3VzZS0+cHJpdmF0ZTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBoZ3BrX21vZGVfbmFtZXNbcHJpdi0+bW9kZV0pOworfQorCitzdGF0aWMgc3NpemVfdCBhdHRyX3NldF9tb2RlKHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCB2b2lkICpkYXRhLAorCQkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCit7CisJc3RydWN0IGhncGtfZGF0YSAqcHJpdiA9IHBzbW91c2UtPnByaXZhdGU7CisJZW51bSBoZ3BrX21vZGUgb2xkX21vZGUgPSBwcml2LT5tb2RlOworCWVudW0gaGdwa19tb2RlIG5ld19tb2RlID0gaGdwa19tb2RlX2Zyb21fbmFtZShidWYsIGxlbik7CisJc3RydWN0IGlucHV0X2RldiAqb2xkX2RldiA9IHBzbW91c2UtPmRldjsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICpuZXdfZGV2OworCWludCBlcnI7CisKKwlpZiAobmV3X21vZGUgPT0gSEdQS19NT0RFX0lOVkFMSUQpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKG9sZF9tb2RlID09IG5ld19tb2RlKQorCQlyZXR1cm4gbGVuOworCisJbmV3X2RldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOworCWlmICghbmV3X2RldikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwc21vdXNlX3NldF9zdGF0ZShwc21vdXNlLCBQU01PVVNFX0lOSVRJQUxJWklORyk7CisKKwkvKiBTd2l0Y2ggZGV2aWNlIGludG8gdGhlIG5ldyBtb2RlICovCisJcHJpdi0+bW9kZSA9IG5ld19tb2RlOworCWVyciA9IGhncGtfcmVzZXRfZGV2aWNlKHBzbW91c2UsIGZhbHNlKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl90cnlfcmVzdG9yZTsKKworCWhncGtfc2V0dXBfaW5wdXRfZGV2aWNlKG5ld19kZXYsIG9sZF9kZXYsIG5ld19tb2RlKTsKKworCXBzbW91c2Vfc2V0X3N0YXRlKHBzbW91c2UsIFBTTU9VU0VfQ01EX01PREUpOworCisJZXJyID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKG5ld19kZXYpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX3RyeV9yZXN0b3JlOworCisJcHNtb3VzZS0+ZGV2ID0gbmV3X2RldjsKKwlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShvbGRfZGV2KTsKKworCXJldHVybiBsZW47CisKK2Vycl90cnlfcmVzdG9yZToKKwlpbnB1dF9mcmVlX2RldmljZShuZXdfZGV2KTsKKwlwcml2LT5tb2RlID0gb2xkX21vZGU7CisJaGdwa19yZXNldF9kZXZpY2UocHNtb3VzZSwgZmFsc2UpOworCisJcmV0dXJuIGVycjsKK30KKworUFNNT1VTRV9ERUZJTkVfQVRUUihoZ3BrX21vZGUsIFNfSVdVU1IgfCBTX0lSVUdPLCBOVUxMLAorCQkgICAgYXR0cl9zaG93X21vZGUsIGF0dHJfc2V0X21vZGUpOworCiBzdGF0aWMgc3NpemVfdCBoZ3BrX3RyaWdnZXJfcmVjYWxfc2hvdyhzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwKIAkJdm9pZCAqZGF0YSwgY2hhciAqYnVmKQogewpAQCAtNDAxLDYgKzkwNCw4IEBACiAKIAlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnBzbW91c2UtPnBzMmRldi5zZXJpby0+ZGV2LAogCQkJICAgJnBzbW91c2VfYXR0cl9wb3dlcmVkLmRhdHRyKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnBzbW91c2UtPnBzMmRldi5zZXJpby0+ZGV2LAorCQkJICAgJnBzbW91c2VfYXR0cl9oZ3BrX21vZGUuZGF0dHIpOwogCiAJaWYgKHBzbW91c2UtPm1vZGVsID49IEhHUEtfTU9ERUxfQykKIAkJZGV2aWNlX3JlbW92ZV9maWxlKCZwc21vdXNlLT5wczJkZXYuc2VyaW8tPmRldiwKQEAgLTQxNiwxNCArOTIxLDEzIEBACiAJc3RydWN0IGhncGtfZGF0YSAqcHJpdiA9IGNvbnRhaW5lcl9vZih3LCBzdHJ1Y3QgaGdwa19kYXRhLCByZWNhbGliX3dxKTsKIAlzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSA9IHByaXYtPnBzbW91c2U7CiAKLQloZ3BrX2RiZyhwc21vdXNlLCAicmVjYWxpYnJhdGluZyB0b3VjaHBhZC4uXG4iKTsKLQogCWlmIChoZ3BrX2ZvcmNlX3JlY2FsaWJyYXRlKHBzbW91c2UpKQogCQloZ3BrX2Vycihwc21vdXNlLCAicmVjYWxpYnJhdGlvbiBmYWlsZWQhXG4iKTsKIH0KIAogc3RhdGljIGludCBoZ3BrX3JlZ2lzdGVyKHN0cnVjdCBwc21vdXNlICpwc21vdXNlKQogeworCXN0cnVjdCBoZ3BrX2RhdGEgKnByaXYgPSBwc21vdXNlLT5wcml2YXRlOwogCWludCBlcnI7CiAKIAkvKiByZWdpc3RlciBoYW5kbGVycyAqLwpAQCAtNDMxLDEzICs5MzUsMTQgQEAKIAlwc21vdXNlLT5wb2xsID0gaGdwa19wb2xsOwogCXBzbW91c2UtPmRpc2Nvbm5lY3QgPSBoZ3BrX2Rpc2Nvbm5lY3Q7CiAJcHNtb3VzZS0+cmVjb25uZWN0ID0gaGdwa19yZWNvbm5lY3Q7Ci0JcHNtb3VzZS0+cGt0c2l6ZSA9IDM7CiAKIAkvKiBEaXNhYmxlIHRoZSBpZGxlIHJlc3luYy4gKi8KIAlwc21vdXNlLT5yZXN5bmNfdGltZSA9IDA7CiAJLyogUmVzZXQgYWZ0ZXIgYSBsb3Qgb2YgYmFkIGJ5dGVzLiAqLwogCXBzbW91c2UtPnJlc2V0YWZ0ZXIgPSAxMDI0OwogCisJaGdwa19zZXR1cF9pbnB1dF9kZXZpY2UocHNtb3VzZS0+ZGV2LCBOVUxMLCBwcml2LT5tb2RlKTsKKwogCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmcHNtb3VzZS0+cHMyZGV2LnNlcmlvLT5kZXYsCiAJCQkJICZwc21vdXNlX2F0dHJfcG93ZXJlZC5kYXR0cik7CiAJaWYgKGVycikgewpAQCAtNDQ1LDYgKzk1MCwxMyBAQAogCQlyZXR1cm4gZXJyOwogCX0KIAorCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmcHNtb3VzZS0+cHMyZGV2LnNlcmlvLT5kZXYsCisJCQkJICZwc21vdXNlX2F0dHJfaGdwa19tb2RlLmRhdHRyKTsKKwlpZiAoZXJyKSB7CisJCWhncGtfZXJyKHBzbW91c2UsICJGYWlsZWQgY3JlYXRpbmcgJ2hncGtfbW9kZScgc3lzZnMgbm9kZVxuIik7CisJCWdvdG8gZXJyX3JlbW92ZV9wb3dlcmVkOworCX0KKwogCS8qIEMtc2VyaWVzIHRvdWNocGFkcyBhZGRlZCB0aGUgcmVjYWxpYnJhdGUgY29tbWFuZCAqLwogCWlmIChwc21vdXNlLT5tb2RlbCA+PSBIR1BLX01PREVMX0MpIHsKIAkJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZwc21vdXNlLT5wczJkZXYuc2VyaW8tPmRldiwKQEAgLTQ1MiwzMCArOTY0LDQwIEBACiAJCWlmIChlcnIpIHsKIAkJCWhncGtfZXJyKHBzbW91c2UsCiAJCQkJIkZhaWxlZCBjcmVhdGluZyAncmVjYWxpYnJhdGUnIHN5c2ZzIG5vZGVcbiIpOwotCQkJZGV2aWNlX3JlbW92ZV9maWxlKCZwc21vdXNlLT5wczJkZXYuc2VyaW8tPmRldiwKLQkJCQkJJnBzbW91c2VfYXR0cl9wb3dlcmVkLmRhdHRyKTsKLQkJCXJldHVybiBlcnI7CisJCQlnb3RvIGVycl9yZW1vdmVfbW9kZTsKIAkJfQogCX0KIAogCXJldHVybiAwOworCitlcnJfcmVtb3ZlX21vZGU6CisJZGV2aWNlX3JlbW92ZV9maWxlKCZwc21vdXNlLT5wczJkZXYuc2VyaW8tPmRldiwKKwkJCSAgICZwc21vdXNlX2F0dHJfaGdwa19tb2RlLmRhdHRyKTsKK2Vycl9yZW1vdmVfcG93ZXJlZDoKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnBzbW91c2UtPnBzMmRldi5zZXJpby0+ZGV2LAorCQkJICAgJnBzbW91c2VfYXR0cl9wb3dlcmVkLmRhdHRyKTsKKwlyZXR1cm4gZXJyOwogfQogCiBpbnQgaGdwa19pbml0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlKQogewogCXN0cnVjdCBoZ3BrX2RhdGEgKnByaXY7Ci0JaW50IGVyciA9IC1FTk9NRU07CisJaW50IGVycjsKIAogCXByaXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaGdwa19kYXRhKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFwcml2KQorCWlmICghcHJpdikgeworCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGFsbG9jX2ZhaWw7CisJfQogCiAJcHNtb3VzZS0+cHJpdmF0ZSA9IHByaXY7CisKIAlwcml2LT5wc21vdXNlID0gcHNtb3VzZTsKIAlwcml2LT5wb3dlcmVkID0gdHJ1ZTsKKwlwcml2LT5tb2RlID0gaGdwa19kZWZhdWx0X21vZGU7CiAJSU5JVF9ERUxBWUVEX1dPUksoJnByaXYtPnJlY2FsaWJfd3EsIGhncGtfcmVjYWxpYl93b3JrKTsKIAotCWVyciA9IHBzbW91c2VfcmVzZXQocHNtb3VzZSk7CisJZXJyID0gaGdwa19yZXNldF9kZXZpY2UocHNtb3VzZSwgZmFsc2UpOwogCWlmIChlcnIpCiAJCWdvdG8gaW5pdF9mYWlsOwogCkBAIC01MzEsMyArMTA1MywxNCBAQAogCiAJcmV0dXJuIDA7CiB9CisKK3ZvaWQgaGdwa19tb2R1bGVfaW5pdCh2b2lkKQoreworCWhncGtfZGVmYXVsdF9tb2RlID0gaGdwa19tb2RlX2Zyb21fbmFtZShoZ3BrX21vZGVfbmFtZSwKKwkJCQkJCXN0cmxlbihoZ3BrX21vZGVfbmFtZSkpOworCWlmIChoZ3BrX2RlZmF1bHRfbW9kZSA9PSBIR1BLX01PREVfSU5WQUxJRCkgeworCQloZ3BrX2RlZmF1bHRfbW9kZSA9IEhHUEtfTU9ERV9NT1VTRTsKKwkJc3RybGNweShoZ3BrX21vZGVfbmFtZSwgaGdwa19tb2RlX25hbWVzW0hHUEtfTU9ERV9NT1VTRV0sCisJCQlzaXplb2YoaGdwa19tb2RlX25hbWUpKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL2hncGsuaCBiL2RyaXZlcnMvaW5wdXQvbW91c2UvaGdway5oCmluZGV4IGQ2MWNmZDMuLjMxMWMwZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvaGdway5oCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvaGdway5oCkBAIC01LDYgKzUsOSBAQAogI2lmbmRlZiBfSEdQS19ICiAjZGVmaW5lIF9IR1BLX0gKIAorI2RlZmluZSBIR1BLX0dTCQkweGZmICAgICAgIC8qIFRoZSBHbGlkZVNlbnNvciAqLworI2RlZmluZSBIR1BLX1BUCQkweGNmICAgICAgIC8qIFRoZSBQZW5UYWJsZXQgKi8KKwogZW51bSBoZ3BrX21vZGVsX3QgewogCUhHUEtfTU9ERUxfUFJFQSA9IDB4MGEsCS8qIHByZS1CMXMgKi8KIAlIR1BLX01PREVMX0EgPSAweDE0LAkvKiBmb3VuZCBvbiBCMXMsIFBUIGRpc2FibGVkIGluIGhhcmR3YXJlICovCkBAIC0xMywxMiArMTYsMzQgQEAKIAlIR1BLX01PREVMX0QgPSAweDUwLAkvKiBDMSwgbWFzcyBwcm9kdWN0aW9uICovCiB9OwogCitlbnVtIGhncGtfc3Bld19mbGFnIHsKKwlOT19TUEVXLAorCU1BWUJFX1NQRVdJTkcsCisJU1BFV19ERVRFQ1RFRCwKKwlSRUNBTElCUkFUSU5HLAorfTsKKworI2RlZmluZSBTUEVXX1dBVENIX0NPVU5UIDQyICAvKiBhdCAxMm1zL3BhY2tldCwgdGhpcyBpcyAxLzIgc2Vjb25kICovCisKK2VudW0gaGdwa19tb2RlIHsKKwlIR1BLX01PREVfTU9VU0UsCisJSEdQS19NT0RFX0dMSURFU0VOU09SLAorCUhHUEtfTU9ERV9QRU5UQUJMRVQsCisJSEdQS19NT0RFX0lOVkFMSUQKK307CisKIHN0cnVjdCBoZ3BrX2RhdGEgewogCXN0cnVjdCBwc21vdXNlICpwc21vdXNlOworCWVudW0gaGdwa19tb2RlIG1vZGU7CiAJYm9vbCBwb3dlcmVkOwotCWludCBjb3VudCwgeF90YWxseSwgeV90YWxseTsJLyogaGFyZHdhcmUgd29ya2Fyb3VuZCBzdHVmZiAqLworCWVudW0gaGdwa19zcGV3X2ZsYWcgc3Bld19mbGFnOworCWludCBzcGV3X2NvdW50LCB4X3RhbGx5LCB5X3RhbGx5OwkvKiBzcGV3IGRldGVjdGlvbiAqLwogCXVuc2lnbmVkIGxvbmcgcmVjYWxpYl93aW5kb3c7CiAJc3RydWN0IGRlbGF5ZWRfd29yayByZWNhbGliX3dxOworCWludCBhYnNfeCwgYWJzX3k7CisJaW50IGR1cGVfY291bnQ7CisJaW50IHhiaWdqLCB5YmlnaiwgeGxhc3QsIHlsYXN0OyAvKiBqdW1waW5lc3MgZGV0ZWN0aW9uICovCisJaW50IHhzYXdfc2Vjb25kYXJ5LCB5c2F3X3NlY29uZGFyeTsgLyoganVtcGluZXNzIGRldGVjdGlvbiAqLwogfTsKIAogI2RlZmluZSBoZ3BrX2RiZyhwc21vdXNlLCBmb3JtYXQsIGFyZy4uLikJCVwKQEAgLTMzLDkgKzU4LDEzIEBACiAJZGV2X25vdGljZSgmKHBzbW91c2UpLT5wczJkZXYuc2VyaW8tPmRldiwgZm9ybWF0LCAjIyBhcmcpCiAKICNpZmRlZiBDT05GSUdfTU9VU0VfUFMyX09MUEMKK3ZvaWQgaGdwa19tb2R1bGVfaW5pdCh2b2lkKTsKIGludCBoZ3BrX2RldGVjdChzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgYm9vbCBzZXRfcHJvcGVydGllcyk7CiBpbnQgaGdwa19pbml0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlKTsKICNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgaGdwa19tb2R1bGVfaW5pdCh2b2lkKQoreworfQogc3RhdGljIGlubGluZSBpbnQgaGdwa19kZXRlY3Qoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIGJvb2wgc2V0X3Byb3BlcnRpZXMpCiB7CiAJcmV0dXJuIC1FTk9ERVY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL3BzbW91c2UtYmFzZS5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9wc21vdXNlLWJhc2UuYwppbmRleCBjZDlkMGM5Li4zZjc0YmFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL3BzbW91c2UtYmFzZS5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvcHNtb3VzZS1iYXNlLmMKQEAgLTE3MTEsNiArMTcxMSw3IEBACiAKIAlsaWZlYm9va19tb2R1bGVfaW5pdCgpOwogCXN5bmFwdGljc19tb2R1bGVfaW5pdCgpOworCWhncGtfbW9kdWxlX2luaXQoKTsKIAogCWtwc21vdXNlZF93cSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJrcHNtb3VzZWQiKTsKIAlpZiAoIWtwc21vdXNlZF93cSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9zeW5hcHRpY3MuYyBiL2RyaXZlcnMvaW5wdXQvbW91c2Uvc3luYXB0aWNzLmMKaW5kZXggMmUzMDBhNC4uZGEzOTJjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9zeW5hcHRpY3MuYworKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL3N5bmFwdGljcy5jCkBAIC0yNSw3ICsyNSw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9kbWkuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0L210Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaW8uaD4KICNpbmNsdWRlIDxsaW51eC9saWJwczIuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CkBAIC0yNzksNiArMjc5LDI1IEBACiAJc3luYXB0aWNzX21vZGVfY21kKHBzbW91c2UsIHByaXYtPm1vZGUpOwogfQogCitzdGF0aWMgaW50IHN5bmFwdGljc19zZXRfYWR2YW5jZWRfZ2VzdHVyZV9tb2RlKHN0cnVjdCBwc21vdXNlICpwc21vdXNlKQoreworCXN0YXRpYyB1bnNpZ25lZCBjaGFyIHBhcmFtID0gMHhjODsKKwlzdHJ1Y3Qgc3luYXB0aWNzX2RhdGEgKnByaXYgPSBwc21vdXNlLT5wcml2YXRlOworCisJaWYgKCFTWU5fQ0FQX0FEVl9HRVNUVVJFKHByaXYtPmV4dF9jYXBfMGMpKQorCQlyZXR1cm4gMDsKKworCWlmIChwc21vdXNlX3NsaWNlZF9jb21tYW5kKHBzbW91c2UsIFNZTl9RVUVfTU9ERUwpKQorCQlyZXR1cm4gLTE7CisJaWYgKHBzMl9jb21tYW5kKCZwc21vdXNlLT5wczJkZXYsICZwYXJhbSwgUFNNT1VTRV9DTURfU0VUUkFURSkpCisJCXJldHVybiAtMTsKKworCS8qIEFkdmFuY2VkIGdlc3R1cmUgbW9kZSBhbHNvIHNlbmRzIG11bHRpIGZpbmdlciBkYXRhICovCisJcHJpdi0+Y2FwYWJpbGl0aWVzIHw9IEJJVCgxKTsKKworCXJldHVybiAwOworfQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCVN5bmFwdGljcyBwYXNzLXRocm91Z2ggUFMvMiBwb3J0IHN1cHBvcnQKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMzgwLDcgKzM5OSw5IEBACiAgKglGdW5jdGlvbnMgdG8gaW50ZXJwcmV0IHRoZSBhYnNvbHV0ZSBtb2RlIHBhY2tldHMKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgdm9pZCBzeW5hcHRpY3NfcGFyc2VfaHdfc3RhdGUodW5zaWduZWQgY2hhciBidWZbXSwgc3RydWN0IHN5bmFwdGljc19kYXRhICpwcml2LCBzdHJ1Y3Qgc3luYXB0aWNzX2h3X3N0YXRlICpodykKK3N0YXRpYyBpbnQgc3luYXB0aWNzX3BhcnNlX2h3X3N0YXRlKGNvbnN0IHVuc2lnbmVkIGNoYXIgYnVmW10sCisJCQkJICAgIHN0cnVjdCBzeW5hcHRpY3NfZGF0YSAqcHJpdiwKKwkJCQkgICAgc3RydWN0IHN5bmFwdGljc19od19zdGF0ZSAqaHcpCiB7CiAJbWVtc2V0KGh3LCAwLCBzaXplb2Yoc3RydWN0IHN5bmFwdGljc19od19zdGF0ZSkpOwogCkBAIC0zOTcsNiArNDE4LDE0IEBACiAJCQkgKChidWZbMF0gJiAweDA0KSA+PiAxKSB8CiAJCQkgKChidWZbM10gJiAweDA0KSA+PiAyKSk7CiAKKwkJaWYgKFNZTl9DQVBfQURWX0dFU1RVUkUocHJpdi0+ZXh0X2NhcF8wYykgJiYgaHctPncgPT0gMikgeworCQkJLyogR2VzdHVyZSBwYWNrZXQ6ICh4LCB5LCB6KSBhdCBoYWxmIHJlc29sdXRpb24gKi8KKwkJCXByaXYtPm10LnggPSAoKChidWZbNF0gJiAweDBmKSA8PCA4KSB8IGJ1ZlsxXSkgPDwgMTsKKwkJCXByaXYtPm10LnkgPSAoKChidWZbNF0gJiAweGYwKSA8PCA0KSB8IGJ1ZlsyXSkgPDwgMTsKKwkJCXByaXYtPm10LnogPSAoKGJ1ZlszXSAmIDB4MzApIHwgKGJ1Zls1XSAmIDB4MGYpKSA8PCAxOworCQkJcmV0dXJuIDE7CisJCX0KKwogCQlody0+bGVmdCAgPSAoYnVmWzBdICYgMHgwMSkgPyAxIDogMDsKIAkJaHctPnJpZ2h0ID0gKGJ1ZlswXSAmIDB4MDIpID8gMSA6IDA7CiAKQEAgLTQ1Miw2ICs0ODEsMzYgQEAKIAkJaHctPmxlZnQgID0gKGJ1ZlswXSAmIDB4MDEpID8gMSA6IDA7CiAJCWh3LT5yaWdodCA9IChidWZbMF0gJiAweDAyKSA/IDEgOiAwOwogCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzZXRfc2xvdChzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIGludCBzbG90LCBib29sIGFjdGl2ZSwgaW50IHgsIGludCB5KQoreworCWlucHV0X210X3Nsb3QoZGV2LCBzbG90KTsKKwlpbnB1dF9tdF9yZXBvcnRfc2xvdF9zdGF0ZShkZXYsIE1UX1RPT0xfRklOR0VSLCBhY3RpdmUpOworCWlmIChhY3RpdmUpIHsKKwkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19NVF9QT1NJVElPTl9YLCB4KTsKKwkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19NVF9QT1NJVElPTl9ZLAorCQkJCSBZTUFYX05PTUlOQUwgKyBZTUlOX05PTUlOQUwgLSB5KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHN5bmFwdGljc19yZXBvcnRfc2VtaV9tdF9kYXRhKHN0cnVjdCBpbnB1dF9kZXYgKmRldiwKKwkJCQkJICBjb25zdCBzdHJ1Y3Qgc3luYXB0aWNzX2h3X3N0YXRlICphLAorCQkJCQkgIGNvbnN0IHN0cnVjdCBzeW5hcHRpY3NfaHdfc3RhdGUgKmIsCisJCQkJCSAgaW50IG51bV9maW5nZXJzKQoreworCWlmIChudW1fZmluZ2VycyA+PSAyKSB7CisJCXNldF9zbG90KGRldiwgMCwgdHJ1ZSwgbWluKGEtPngsIGItPngpLCBtaW4oYS0+eSwgYi0+eSkpOworCQlzZXRfc2xvdChkZXYsIDEsIHRydWUsIG1heChhLT54LCBiLT54KSwgbWF4KGEtPnksIGItPnkpKTsKKwl9IGVsc2UgaWYgKG51bV9maW5nZXJzID09IDEpIHsKKwkJc2V0X3Nsb3QoZGV2LCAwLCB0cnVlLCBhLT54LCBhLT55KTsKKwkJc2V0X3Nsb3QoZGV2LCAxLCBmYWxzZSwgMCwgMCk7CisJfSBlbHNlIHsKKwkJc2V0X3Nsb3QoZGV2LCAwLCBmYWxzZSwgMCwgMCk7CisJCXNldF9zbG90KGRldiwgMSwgZmFsc2UsIDAsIDApOworCX0KIH0KIAogLyoKQEAgLTQ2Niw3ICs1MjUsOCBAQAogCWludCBmaW5nZXJfd2lkdGg7CiAJaW50IGk7CiAKLQlzeW5hcHRpY3NfcGFyc2VfaHdfc3RhdGUocHNtb3VzZS0+cGFja2V0LCBwcml2LCAmaHcpOworCWlmIChzeW5hcHRpY3NfcGFyc2VfaHdfc3RhdGUocHNtb3VzZS0+cGFja2V0LCBwcml2LCAmaHcpKQorCQlyZXR1cm47CiAKIAlpZiAoaHcuc2Nyb2xsKSB7CiAJCXByaXYtPnNjcm9sbCArPSBody5zY3JvbGw7CkBAIC00ODgsNyArNTQ4LDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmIChody56ID4gMCkgeworCWlmIChody56ID4gMCAmJiBody54ID4gMSkgewogCQludW1fZmluZ2VycyA9IDE7CiAJCWZpbmdlcl93aWR0aCA9IDU7CiAJCWlmIChTWU5fQ0FQX0VYVEVOREVEKHByaXYtPmNhcGFiaWxpdGllcykpIHsKQEAgLTUxMiw2ICs1NzIsOSBAQAogCQlmaW5nZXJfd2lkdGggPSAwOwogCX0KIAorCWlmIChTWU5fQ0FQX0FEVl9HRVNUVVJFKHByaXYtPmV4dF9jYXBfMGMpKQorCQlzeW5hcHRpY3NfcmVwb3J0X3NlbWlfbXRfZGF0YShkZXYsICZodywgJnByaXYtPm10LCBudW1fZmluZ2Vycyk7CisKIAkvKiBQb3N0IGV2ZW50cwogCSAqIEJUTl9UT1VDSCBoYXMgdG8gYmUgZmlyc3QgYXMgbW91c2VkZXYgcmVsaWVzIG9uIGl0IHdoZW4gZG9pbmcKIAkgKiBhYnNvbHV0ZSAtPiByZWxhdGl2ZSBjb252ZXJzaW9uCkBAIC01MTksNyArNTgyLDcgQEAKIAlpZiAoaHcueiA+IDMwKSBpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1RPVUNILCAxKTsKIAlpZiAoaHcueiA8IDI1KSBpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1RPVUNILCAwKTsKIAotCWlmIChody56ID4gMCkgeworCWlmIChudW1fZmluZ2VycyA+IDApIHsKIAkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19YLCBody54KTsKIAkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19ZLCBZTUFYX05PTUlOQUwgKyBZTUlOX05PTUlOQUwgLSBody55KTsKIAl9CkBAIC02MjIsNiArNjg1LDggQEAKIHsKIAlpbnQgaTsKIAorCV9fc2V0X2JpdChJTlBVVF9QUk9QX1BPSU5URVIsIGRldi0+cHJvcGJpdCk7CisKIAlfX3NldF9iaXQoRVZfQUJTLCBkZXYtPmV2Yml0KTsKIAlpbnB1dF9zZXRfYWJzX3BhcmFtcyhkZXYsIEFCU19YLAogCQkJICAgICBYTUlOX05PTUlOQUwsIHByaXYtPnhfbWF4ID86IFhNQVhfTk9NSU5BTCwgMCwgMCk7CkBAIC02MjksNiArNjk0LDE1IEBACiAJCQkgICAgIFlNSU5fTk9NSU5BTCwgcHJpdi0+eV9tYXggPzogWU1BWF9OT01JTkFMLCAwLCAwKTsKIAlpbnB1dF9zZXRfYWJzX3BhcmFtcyhkZXYsIEFCU19QUkVTU1VSRSwgMCwgMjU1LCAwLCAwKTsKIAorCWlmIChTWU5fQ0FQX0FEVl9HRVNUVVJFKHByaXYtPmV4dF9jYXBfMGMpKSB7CisJCV9fc2V0X2JpdChJTlBVVF9QUk9QX1NFTUlfTVQsIGRldi0+cHJvcGJpdCk7CisJCWlucHV0X210X2luaXRfc2xvdHMoZGV2LCAyKTsKKwkJaW5wdXRfc2V0X2Fic19wYXJhbXMoZGV2LCBBQlNfTVRfUE9TSVRJT05fWCwgWE1JTl9OT01JTkFMLAorCQkJCSAgICAgcHJpdi0+eF9tYXggPzogWE1BWF9OT01JTkFMLCAwLCAwKTsKKwkJaW5wdXRfc2V0X2Fic19wYXJhbXMoZGV2LCBBQlNfTVRfUE9TSVRJT05fWSwgWU1JTl9OT01JTkFMLAorCQkJCSAgICAgcHJpdi0+eV9tYXggPzogWU1BWF9OT01JTkFMLCAwLCAwKTsKKwl9CisKIAlpZiAoU1lOX0NBUF9QQUxNREVURUNUKHByaXYtPmNhcGFiaWxpdGllcykpCiAJCWlucHV0X3NldF9hYnNfcGFyYW1zKGRldiwgQUJTX1RPT0xfV0lEVEgsIDAsIDE1LCAwLCAwKTsKIApAQCAtNjYzLDYgKzczNyw3IEBACiAJaW5wdXRfYWJzX3NldF9yZXMoZGV2LCBBQlNfWSwgcHJpdi0+eV9yZXMpOwogCiAJaWYgKFNZTl9DQVBfQ0xJQ0tQQUQocHJpdi0+ZXh0X2NhcF8wYykpIHsKKwkJX19zZXRfYml0KElOUFVUX1BST1BfQlVUVE9OUEFELCBkZXYtPnByb3BiaXQpOwogCQkvKiBDbGlja3BhZHMgcmVwb3J0IG9ubHkgbGVmdCBidXR0b24gKi8KIAkJX19jbGVhcl9iaXQoQlROX1JJR0hULCBkZXYtPmtleWJpdCk7CiAJCV9fY2xlYXJfYml0KEJUTl9NSURETEUsIGRldi0+a2V5Yml0KTsKQEAgLTcwMiw2ICs3NzcsMTEgQEAKIAkJcmV0dXJuIC0xOwogCX0KIAorCWlmIChzeW5hcHRpY3Nfc2V0X2FkdmFuY2VkX2dlc3R1cmVfbW9kZShwc21vdXNlKSkgeworCQlwcmludGsoS0VSTl9FUlIgIkFkdmFuY2VkIGdlc3R1cmUgbW9kZSByZWNvbm5lY3QgZmFpbGVkLlxuIik7CisJCXJldHVybiAtMTsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzQ0LDE1ICs4MjQsNDUgQEAKICNlbmRpZgogfTsKIAorc3RhdGljIGJvb2wgYnJva2VuX29scGNfZWM7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBfX2luaXRjb25zdCBvbHBjX2RtaV90YWJsZVtdID0geworI2lmIGRlZmluZWQoQ09ORklHX0RNSSkgJiYgZGVmaW5lZChDT05GSUdfT0xQQykKKwl7CisJCS8qIE9MUEMgWE8tMSBvciBYTy0xLjUgKi8KKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJPTFBDIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIlhPIiksCisJCX0sCisJfSwKKwl7IH0KKyNlbmRpZgorfTsKKwogdm9pZCBfX2luaXQgc3luYXB0aWNzX21vZHVsZV9pbml0KHZvaWQpCiB7CiAJaW1wYWlyZWRfdG9zaGliYV9rYmMgPSBkbWlfY2hlY2tfc3lzdGVtKHRvc2hpYmFfZG1pX3RhYmxlKTsKKwlicm9rZW5fb2xwY19lYyA9IGRtaV9jaGVja19zeXN0ZW0ob2xwY19kbWlfdGFibGUpOwogfQogCiBpbnQgc3luYXB0aWNzX2luaXQoc3RydWN0IHBzbW91c2UgKnBzbW91c2UpCiB7CiAJc3RydWN0IHN5bmFwdGljc19kYXRhICpwcml2OwogCisJLyoKKwkgKiBUaGUgT0xQQyBYTyBoYXMgaXNzdWVzIHdpdGggU3luYXB0aWNzJyBhYnNvbHV0ZSBtb2RlOyBzaW1pbGFybHkgdG8KKwkgKiB0aGUgSEdQSywgaXQgcXVpY2tseSBkZWdyYWRlcyBhbmQgdGhlIGhhcmR3YXJlIGJlY29tZXMganVtcHkgYW5kCisJICogb3Zlcmx5IHNlbnNpdGl2ZS4gIE5vdCBvbmx5IHRoYXQsIGJ1dCB0aGUgY29uc3RhbnQgcGFja2V0IHNwZXcKKwkgKiAoZXZlbiBhdCBhIGxvd2VyZWQgNDBwcHMgcmF0ZSkgb3ZlcmxvYWRzIHRoZSBFQyBzdWNoIHRoYXQga2V5CisJICogcHJlc3NlcyBvbiB0aGUga2V5Ym9hcmQgYXJlIG1pc3NlZC4gIEdpdmVuIGFsbCBvZiB0aGF0LCBkb24ndAorCSAqIGV2ZW4gYXR0ZW1wdCB0byB1c2UgU3luYXB0aWNzIG1vZGUuICBSZWxhdGl2ZSBtb2RlIHNlZW1zIHRvIHdvcmsKKwkgKiBqdXN0IGZpbmUuCisJICovCisJaWYgKGJyb2tlbl9vbHBjX2VjKSB7CisJCXByaW50ayhLRVJOX0lORk8gInN5bmFwdGljczogT0xQQyBYTyBkZXRlY3RlZCwgbm90IGVuYWJsaW5nIFN5bmFwdGljcyBwcm90b2NvbC5cbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKIAlwc21vdXNlLT5wcml2YXRlID0gcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzeW5hcHRpY3NfZGF0YSksIEdGUF9LRVJORUwpOwogCWlmICghcHJpdikKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC03NjksNiArODc5LDExIEBACiAJCWdvdG8gaW5pdF9mYWlsOwogCX0KIAorCWlmIChzeW5hcHRpY3Nfc2V0X2FkdmFuY2VkX2dlc3R1cmVfbW9kZShwc21vdXNlKSkgeworCQlwcmludGsoS0VSTl9FUlIgIkFkdmFuY2VkIGdlc3R1cmUgbW9kZSBpbml0IGZhaWxlZC5cbiIpOworCQlnb3RvIGluaXRfZmFpbDsKKwl9CisKIAlwcml2LT5wa3RfdHlwZSA9IFNZTl9NT0RFTF9ORVdBQlMocHJpdi0+bW9kZWxfaWQpID8gU1lOX05FV0FCUyA6IFNZTl9PTERBQlM7CiAKIAlwcmludGsoS0VSTl9JTkZPICJTeW5hcHRpY3MgVG91Y2hwYWQsIG1vZGVsOiAlbGQsIGZ3OiAlbGQuJWxkLCBpZDogJSNseCwgY2FwczogJSNseC8lI2x4LyUjbHhcbiIsCkBAIC04MDIsOCArOTE3LDggQEAKIAogCS8qCiAJICogVG9zaGliYSdzIEtCQyBzZWVtcyB0byBoYXZlIHRyb3VibGUgaGFuZGxpbmcgZGF0YSBmcm9tCi0JICogU3luYXB0aWNzIGFzIGZ1bGwgcmF0ZSwgc3dpdGNoIHRvIGxvd2VyIHJhdGUgd2hpY2ggaXMgcm91Z2hseQotCSAqIHRoeWUgc2FtZSBhcyByYXRlIG9mIHN0YW5kYXJkIFBTLzIgbW91c2UuCisJICogU3luYXB0aWNzIGF0IGZ1bGwgcmF0ZS4gIFN3aXRjaCB0byBhIGxvd2VyIHJhdGUgKHJvdWdobHkKKwkgKiB0aGUgc2FtZSByYXRlIGFzIGEgc3RhbmRhcmQgUFMvMiBtb3VzZSkuCiAJICovCiAJaWYgKHBzbW91c2UtPnJhdGUgPj0gODAgJiYgaW1wYWlyZWRfdG9zaGliYV9rYmMpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAic3luYXB0aWNzOiBUb3NoaWJhICVzIGRldGVjdGVkLCBsaW1pdGluZyByYXRlIHRvIDQwcHBzLlxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2Uvc3luYXB0aWNzLmggYi9kcml2ZXJzL2lucHV0L21vdXNlL3N5bmFwdGljcy5oCmluZGV4IDBhZWZhYTguLjI1ZTVkMDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2Uvc3luYXB0aWNzLmgKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9zeW5hcHRpY3MuaApAQCAtNTQsNiArNTQsNyBAQAogI2RlZmluZSBTWU5fQ0FQX0NMSUNLUEFEKGV4MGMpCQkoKGV4MGMpICYgMHgxMDAwMDApIC8qIDEtYnV0dG9uIENsaWNrUGFkICovCiAjZGVmaW5lIFNZTl9DQVBfQ0xJQ0tQQUQyQlROKGV4MGMpCSgoZXgwYykgJiAweDAwMDEwMCkgLyogMi1idXR0b24gQ2xpY2tQYWQgKi8KICNkZWZpbmUgU1lOX0NBUF9NQVhfRElNRU5TSU9OUyhleDBjKQkoKGV4MGMpICYgMHgwMjAwMDApCisjZGVmaW5lIFNZTl9DQVBfQURWX0dFU1RVUkUoZXgwYykJKChleDBjKSAmIDB4MDgwMDAwKQogCiAvKiBzeW5hcHRpY3MgbW9kZXMgcXVlcnkgYml0cyAqLwogI2RlZmluZSBTWU5fTU9ERV9BQlNPTFVURShtKQkJKChtKSAmICgxIDw8IDcpKQpAQCAtMTEzLDYgKzExNCw4IEBACiAJaW50IHNjcm9sbDsKIAogCXN0cnVjdCBzZXJpbyAqcHRfcG9ydDsJCQkvKiBQYXNzLXRocm91Z2ggc2VyaW8gcG9ydCAqLworCisJc3RydWN0IHN5bmFwdGljc19od19zdGF0ZSBtdDsJCS8qIGN1cnJlbnQgZ2VzdHVyZSBwYWNrZXQgKi8KIH07CiAKIHZvaWQgc3luYXB0aWNzX21vZHVsZV9pbml0KHZvaWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZWRldi5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZWRldi5jCmluZGV4IDJhMDBkZGYuLjc2MzAyNzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2VkZXYuYworKysgYi9kcml2ZXJzL2lucHV0L21vdXNlZGV2LmMKQEAgLTksNiArOSw4IEBACiAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKwogI2RlZmluZSBNT1VTRURFVl9NSU5PUl9CQVNFCTMyCiAjZGVmaW5lIE1PVVNFREVWX01JTk9SUwkJMzIKICNkZWZpbmUgTU9VU0VERVZfTUlYCQkzMQpAQCAtOTc3LDcgKzk3OSw3IEBACiAJCQlicmVhazsKIAogCWlmIChtaW5vciA9PSBNT1VTRURFVl9NSU5PUlMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJtb3VzZWRldjogbm8gbW9yZSBmcmVlIG1vdXNlZGV2IGRldmljZXNcbiIpOworCQlwcl9lcnIoIm5vIG1vcmUgZnJlZSBtb3VzZWRldiBkZXZpY2VzXG4iKTsKIAkJcmV0dXJuIC1FTkZJTEU7CiAJfQogCkBAIC0xMDg3LDEzICsxMDg5LDEzIEBACiAjaWZkZWYgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYCiAJZXJyb3IgPSBtaXNjX3JlZ2lzdGVyKCZwc2F1eF9tb3VzZSk7CiAJaWYgKGVycm9yKQotCQlwcmludGsoS0VSTl9XQVJOSU5HICJtaWNlOiBjb3VsZCBub3QgcmVnaXN0ZXIgcHNhdXggZGV2aWNlLCAiCi0JCQkiZXJyb3I6ICVkXG4iLCBlcnJvcik7CisJCXByX3dhcm5pbmcoImNvdWxkIG5vdCByZWdpc3RlciBwc2F1eCBkZXZpY2UsIGVycm9yOiAlZFxuIiwKKwkJCSAgIGVycm9yKTsKIAllbHNlCiAJCXBzYXV4X3JlZ2lzdGVyZWQgPSAxOwogI2VuZGlmCiAKLQlwcmludGsoS0VSTl9JTkZPICJtaWNlOiBQUy8yIG1vdXNlIGRldmljZSBjb21tb24gZm9yIGFsbCBtaWNlXG4iKTsKKwlwcl9pbmZvKCJQUy8yIG1vdXNlIGRldmljZSBjb21tb24gZm9yIGFsbCBtaWNlXG4iKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnIGIvZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnCmluZGV4IDYyNTYyMzMuLmJjYjFmZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZworKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWcKQEAgLTIxNCw3ICsyMTQsNiBAQAogCXRyaXN0YXRlICJBbXN0cmFkIERlbHRhIChFMykgbWFpbGJvYXJkIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBNQUNIX0FNU19ERUxUQQogCWRlZmF1bHQgeQotCXNlbGVjdCBBTVNfREVMVEFfRklRCiAJLS0taGVscC0tLQogCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhbiBFMyBhbmQgd2FudCB0byB1c2UgaXRzIG1haWxib2FyZCwKIAkgIG9yIGFueSBzdGFuZGFyZCBBVCBrZXlib2FyZCBjb25uZWN0ZWQgdG8gdGhlIG1haWxib2FyZCBwb3J0LgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9hbXNfZGVsdGFfc2VyaW8uYyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vYW1zX2RlbHRhX3NlcmlvLmMKaW5kZXggOGYxNzcwZS4uZWJlOTU1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9hbXNfZGVsdGFfc2VyaW8uYworKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2Ftc19kZWx0YV9zZXJpby5jCkBAIC0xNzIsNiArMTcyLDUgQEAKIAlmcmVlX2lycShPTUFQX0dQSU9fSVJRKEFNU19ERUxUQV9HUElPX1BJTl9LRVlCUkRfQ0xLKSwgMCk7CiAJZ3Bpb19mcmVlKEFNU19ERUxUQV9HUElPX1BJTl9LRVlCUkRfQ0xLKTsKIAlncGlvX2ZyZWUoQU1TX0RFTFRBX0dQSU9fUElOX0tFWUJSRF9EQVRBKTsKLQlrZnJlZShhbXNfZGVsdGFfc2VyaW8pOwogfQogbW9kdWxlX2V4aXQoYW1zX2RlbHRhX3NlcmlvX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9jdDgyYzcxMC5jIGIvZHJpdmVycy9pbnB1dC9zZXJpby9jdDgyYzcxMC5jCmluZGV4IDRhMzA4NDYuLjQ0OGM3NzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vY3Q4MmM3MTAuYworKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2N0ODJjNzEwLmMKQEAgLTE5MSw2ICsxOTEsOSBAQAogCiAJc2VyaW9fcmVnaXN0ZXJfcG9ydChjdDgyYzcxMF9wb3J0KTsKIAorCXByaW50ayhLRVJOX0lORk8gInNlcmlvOiBDJlQgODJjNzEwIG1vdXNlIHBvcnQgYXQgJSNsbHggaXJxICVkXG4iLAorCQkodW5zaWduZWQgbG9uZyBsb25nKUNUODJDNzEwX0RBVEEsIENUODJDNzEwX0lSUSk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjM3LDExICsyNDAsNiBAQAogCWlmIChlcnJvcikKIAkJZ290byBlcnJfZnJlZV9kZXZpY2U7CiAKLQlzZXJpb19yZWdpc3Rlcl9wb3J0KGN0ODJjNzEwX3BvcnQpOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAic2VyaW86IEMmVCA4MmM3MTAgbW91c2UgcG9ydCBhdCAlI2xseCBpcnEgJWRcbiIsCi0JCSh1bnNpZ25lZCBsb25nIGxvbmcpQ1Q4MkM3MTBfREFUQSwgQ1Q4MkM3MTBfSVJRKTsKLQogCXJldHVybiAwOwogCiAgZXJyX2ZyZWVfZGV2aWNlOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9oaWxfbWxjLmMgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2hpbF9tbGMuYwppbmRleCBlNTYyNGQ4Li5iZmQzODY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3NlcmlvL2hpbF9tbGMuYworKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2hpbF9tbGMuYwpAQCAtOTMyLDYgKzkzMiwxMSBAQAogCQloaWxfbWxjX2NvcHlfZGlfc2NyYXRjaChtbGMsIGkpOwogCQltbGNfc2VyaW8gPSBremFsbG9jKHNpemVvZigqbWxjX3NlcmlvKSwgR0ZQX0tFUk5FTCk7CiAJCW1sYy0+c2VyaW9baV0gPSBtbGNfc2VyaW87CisJCWlmICghbWxjLT5zZXJpb1tpXSkgeworCQkJZm9yICg7IGkgPj0gMDsgaS0tKQorCQkJCWtmcmVlKG1sYy0+c2VyaW9baV0pOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KIAkJc25wcmludGYobWxjX3NlcmlvLT5uYW1lLCBzaXplb2YobWxjX3NlcmlvLT5uYW1lKS0xLCAiSElMX1NFUklPJWQiLCBpKTsKIAkJc25wcmludGYobWxjX3NlcmlvLT5waHlzLCBzaXplb2YobWxjX3NlcmlvLT5waHlzKS0xLCAiSElMJWQiLCBpKTsKIAkJbWxjX3NlcmlvLT5pZAkJCT0gaGlsX21sY19zZXJpb19pZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vaHBfc2RjX21sYy5jIGIvZHJpdmVycy9pbnB1dC9zZXJpby9ocF9zZGNfbWxjLmMKaW5kZXggN2QyYjgyMC4uZDUwZjA2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9ocF9zZGNfbWxjLmMKKysrIGIvZHJpdmVycy9pbnB1dC9zZXJpby9ocF9zZGNfbWxjLmMKQEAgLTMwNSw2ICszMDUsNyBAQAogc3RhdGljIGludCBfX2luaXQgaHBfc2RjX21sY19pbml0KHZvaWQpCiB7CiAJaGlsX21sYyAqbWxjID0gJmhwX3NkY19tbGM7CisJaW50IGVycjsKIAogI2lmZGVmIF9fbWM2ODAwMF9fCiAJaWYgKCFNQUNIX0lTX0hQMzAwKQpAQCAtMzIzLDIyICszMjQsMjEgQEAKIAltbGMtPm91dCA9ICZocF9zZGNfbWxjX291dDsKIAltbGMtPnByaXYgPSAmaHBfc2RjX21sY19wcml2OwogCi0JaWYgKGhpbF9tbGNfcmVnaXN0ZXIobWxjKSkgeworCWVyciA9IGhpbF9tbGNfcmVnaXN0ZXIobWxjKTsKKwlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgUFJFRklYICJGYWlsZWQgdG8gcmVnaXN0ZXIgTUxDIHN0cnVjdHVyZSB3aXRoIGhpbF9tbGNcbiIpOwotCQlnb3RvIGVycjA7CisJCXJldHVybiBlcnI7CiAJfQogCiAJaWYgKGhwX3NkY19yZXF1ZXN0X2hpbF9pcnEoJmhwX3NkY19tbGNfaXNyKSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HIFBSRUZJWCAiUmVxdWVzdCBmb3IgcmF3IEhJTCBJU1IgaG9vayBkZW5pZWRcbiIpOwotCQlnb3RvIGVycjE7CisJCWlmIChoaWxfbWxjX3VucmVnaXN0ZXIobWxjKSkKKwkJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIkZhaWxlZCB0byB1bnJlZ2lzdGVyIE1MQyBzdHJ1Y3R1cmUgd2l0aCBoaWxfbWxjLlxuIgorCQkJCSJUaGlzIGlzIGJhZC4gIENvdWxkIGNhdXNlIGFuIG9vcHMuXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKIAl9CisKIAlyZXR1cm4gMDsKLSBlcnIxOgotCWlmIChoaWxfbWxjX3VucmVnaXN0ZXIobWxjKSkKLQkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiRmFpbGVkIHRvIHVucmVnaXN0ZXIgTUxDIHN0cnVjdHVyZSB3aXRoIGhpbF9tbGMuXG4iCi0JCQkiVGhpcyBpcyBiYWQuICBDb3VsZCBjYXVzZSBhbiBvb3BzLlxuIik7Ci0gZXJyMDoKLQlyZXR1cm4gLUVCVVNZOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgaHBfc2RjX21sY19leGl0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLXg4NmlhNjRpby5oIGIvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi14ODZpYTY0aW8uaAppbmRleCBhNTQ3NWI1Li41YWUwZmM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLXg4NmlhNjRpby5oCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIteDg2aWE2NGlvLmgKQEAgLTU1Myw2ICs1NTMsMTMgQEAKICAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkIF9faW5pdGNvbnN0IGk4MDQyX2RtaV9kcml0ZWtfdGFibGVbXSA9IHsKIAl7CisJCS8qIEFjZXIgQXNwaXJlIDUxMDAgKi8KKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJBY2VyIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkFzcGlyZSA1MTAwIiksCisJCX0sCisJfSwKKwl7CiAJCS8qIEFjZXIgQXNwaXJlIDU2MTAgKi8KIAkJLm1hdGNoZXMgPSB7CiAJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJBY2VyIiksCkBAIC03NTIsNyArNzU5LDcgQEAKICNlbmRpZgogCiAJaWYgKGk4MDQyX25vcG5wKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gImk4MDQyOiBQTlAgZGV0ZWN0aW9uIGRpc2FibGVkXG4iKTsKKwkJcHJfaW5mbygiUE5QIGRldGVjdGlvbiBkaXNhYmxlZFxuIik7CiAJCXJldHVybiAwOwogCX0KIApAQCAtNzY5LDcgKzc3Niw3IEBACiAjaWYgZGVmaW5lZChfX2lhNjRfXykKIAkJcmV0dXJuIC1FTk9ERVY7CiAjZWxzZQotCQlwcmludGsoS0VSTl9JTkZPICJQTlA6IE5vIFBTLzIgY29udHJvbGxlciBmb3VuZC4gUHJvYmluZyBwb3J0cyBkaXJlY3RseS5cbiIpOworCQlwcl9pbmZvKCJQTlA6IE5vIFBTLzIgY29udHJvbGxlciBmb3VuZC4gUHJvYmluZyBwb3J0cyBkaXJlY3RseS5cbiIpOwogCQlyZXR1cm4gMDsKICNlbmRpZgogCX0KQEAgLTc4MSw3ICs3ODgsNyBAQAogCQlzbnByaW50ZihhdXhfaXJxX3N0ciwgc2l6ZW9mKGF1eF9pcnFfc3RyKSwKIAkJCSIlZCIsIGk4MDQyX3BucF9hdXhfaXJxKTsKIAotCXByaW50ayhLRVJOX0lORk8gIlBOUDogUFMvMiBDb250cm9sbGVyIFslcyVzJXNdIGF0ICUjeCwlI3ggaXJxICVzJXMlc1xuIiwKKwlwcl9pbmZvKCJQTlA6IFBTLzIgQ29udHJvbGxlciBbJXMlcyVzXSBhdCAlI3gsJSN4IGlycSAlcyVzJXNcbiIsCiAJCWk4MDQyX3BucF9rYmRfbmFtZSwgKGk4MDQyX3BucF9rYmRfZGV2aWNlcyAmJiBpODA0Ml9wbnBfYXV4X2RldmljZXMpID8gIiwiIDogIiIsCiAJCWk4MDQyX3BucF9hdXhfbmFtZSwKIAkJaTgwNDJfcG5wX2RhdGFfcmVnLCBpODA0Ml9wbnBfY29tbWFuZF9yZWcsCkBAIC03OTgsOSArODA1LDcgQEAKIAlpZiAoKChpODA0Ml9wbnBfZGF0YV9yZWcgJiB+MHhmKSA9PSAoaTgwNDJfZGF0YV9yZWcgJiB+MHhmKSAmJgogCSAgICAgIGk4MDQyX3BucF9kYXRhX3JlZyAhPSBpODA0Ml9kYXRhX3JlZykgfHwKIAkgICAgIWk4MDQyX3BucF9kYXRhX3JlZykgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkiUE5QOiBQUy8yIGNvbnRyb2xsZXIgaGFzIGludmFsaWQgZGF0YSBwb3J0ICUjeDsgIgotCQkJInVzaW5nIGRlZmF1bHQgJSN4XG4iLAorCQlwcl93YXJuKCJQTlA6IFBTLzIgY29udHJvbGxlciBoYXMgaW52YWxpZCBkYXRhIHBvcnQgJSN4OyB1c2luZyBkZWZhdWx0ICUjeFxuIiwKIAkJCWk4MDQyX3BucF9kYXRhX3JlZywgaTgwNDJfZGF0YV9yZWcpOwogCQlpODA0Ml9wbnBfZGF0YV9yZWcgPSBpODA0Ml9kYXRhX3JlZzsKIAkJcG5wX2RhdGFfYnVzdGVkID0gdHJ1ZTsKQEAgLTgwOSwzMyArODE0LDI3IEBACiAJaWYgKCgoaTgwNDJfcG5wX2NvbW1hbmRfcmVnICYgfjB4ZikgPT0gKGk4MDQyX2NvbW1hbmRfcmVnICYgfjB4ZikgJiYKIAkgICAgICBpODA0Ml9wbnBfY29tbWFuZF9yZWcgIT0gaTgwNDJfY29tbWFuZF9yZWcpIHx8CiAJICAgICFpODA0Ml9wbnBfY29tbWFuZF9yZWcpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJIlBOUDogUFMvMiBjb250cm9sbGVyIGhhcyBpbnZhbGlkIGNvbW1hbmQgcG9ydCAlI3g7ICIKLQkJCSJ1c2luZyBkZWZhdWx0ICUjeFxuIiwKKwkJcHJfd2FybigiUE5QOiBQUy8yIGNvbnRyb2xsZXIgaGFzIGludmFsaWQgY29tbWFuZCBwb3J0ICUjeDsgdXNpbmcgZGVmYXVsdCAlI3hcbiIsCiAJCQlpODA0Ml9wbnBfY29tbWFuZF9yZWcsIGk4MDQyX2NvbW1hbmRfcmVnKTsKIAkJaTgwNDJfcG5wX2NvbW1hbmRfcmVnID0gaTgwNDJfY29tbWFuZF9yZWc7CiAJCXBucF9kYXRhX2J1c3RlZCA9IHRydWU7CiAJfQogCiAJaWYgKCFpODA0Ml9ub2tiZCAmJiAhaTgwNDJfcG5wX2tiZF9pcnEpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJIlBOUDogUFMvMiBjb250cm9sbGVyIGRvZXNuJ3QgaGF2ZSBLQkQgaXJxOyAiCi0JCQkidXNpbmcgZGVmYXVsdCAlZFxuIiwgaTgwNDJfa2JkX2lycSk7CisJCXByX3dhcm4oIlBOUDogUFMvMiBjb250cm9sbGVyIGRvZXNuJ3QgaGF2ZSBLQkQgaXJxOyB1c2luZyBkZWZhdWx0ICVkXG4iLAorCQkJaTgwNDJfa2JkX2lycSk7CiAJCWk4MDQyX3BucF9rYmRfaXJxID0gaTgwNDJfa2JkX2lycTsKIAkJcG5wX2RhdGFfYnVzdGVkID0gdHJ1ZTsKIAl9CiAKIAlpZiAoIWk4MDQyX25vYXV4ICYmICFpODA0Ml9wbnBfYXV4X2lycSkgewogCQlpZiAoIXBucF9kYXRhX2J1c3RlZCAmJiBpODA0Ml9wbnBfa2JkX2lycSkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJCSJQTlA6IFBTLzIgYXBwZWFycyB0byBoYXZlIEFVWCBwb3J0IGRpc2FibGVkLCAiCi0JCQkJImlmIHRoaXMgaXMgaW5jb3JyZWN0IHBsZWFzZSBib290IHdpdGggIgotCQkJCSJpODA0Mi5ub3BucFxuIik7CisJCQlwcl93YXJuKCJQTlA6IFBTLzIgYXBwZWFycyB0byBoYXZlIEFVWCBwb3J0IGRpc2FibGVkLCAiCisJCQkJImlmIHRoaXMgaXMgaW5jb3JyZWN0IHBsZWFzZSBib290IHdpdGggaTgwNDIubm9wbnBcbiIpOwogCQkJaTgwNDJfbm9hdXggPSB0cnVlOwogCQl9IGVsc2UgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJCSJQTlA6IFBTLzIgY29udHJvbGxlciBkb2Vzbid0IGhhdmUgQVVYIGlycTsgIgotCQkJCSJ1c2luZyBkZWZhdWx0ICVkXG4iLCBpODA0Ml9hdXhfaXJxKTsKKwkJCXByX3dhcm4oIlBOUDogUFMvMiBjb250cm9sbGVyIGRvZXNuJ3QgaGF2ZSBBVVggaXJxOyB1c2luZyBkZWZhdWx0ICVkXG4iLAorCQkJCWk4MDQyX2F1eF9pcnEpOwogCQkJaTgwNDJfcG5wX2F1eF9pcnEgPSBpODA0Ml9hdXhfaXJxOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi5jIGIvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi5jCmluZGV4IDE4ZGI1YTguLmMwNGZmMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIuYworKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLmMKQEAgLTEwLDYgKzEwLDggQEAKICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAorI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtMjI1LDggKzIyNyw4IEBACiAJCXVkZWxheSg1MCk7CiAJCWRhdGEgPSBpODA0Ml9yZWFkX2RhdGEoKTsKIAkJaSsrOwotCQlkYmcoIiUwMnggPC0gaTgwNDIgKGZsdXNoLCAlcykiLCBkYXRhLAotCQkJc3RyICYgSTgwNDJfU1RSX0FVWERBVEEgPyAiYXV4IiA6ICJrYmQiKTsKKwkJZGJnKCIlMDJ4IDwtIGk4MDQyIChmbHVzaCwgJXMpXG4iLAorCQkgICAgZGF0YSwgc3RyICYgSTgwNDJfU1RSX0FVWERBVEEgPyAiYXV4IiA6ICJrYmQiKTsKIAl9CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpODA0Ml9sb2NrLCBmbGFncyk7CkBAIC0yNTMsMzIgKzI1NSwzMiBAQAogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCi0JZGJnKCIlMDJ4IC0+IGk4MDQyIChjb21tYW5kKSIsIGNvbW1hbmQgJiAweGZmKTsKKwlkYmcoIiUwMnggLT4gaTgwNDIgKGNvbW1hbmQpXG4iLCBjb21tYW5kICYgMHhmZik7CiAJaTgwNDJfd3JpdGVfY29tbWFuZChjb21tYW5kICYgMHhmZik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgKChjb21tYW5kID4+IDEyKSAmIDB4Zik7IGkrKykgewogCQllcnJvciA9IGk4MDQyX3dhaXRfd3JpdGUoKTsKIAkJaWYgKGVycm9yKQogCQkJcmV0dXJuIGVycm9yOwotCQlkYmcoIiUwMnggLT4gaTgwNDIgKHBhcmFtZXRlcikiLCBwYXJhbVtpXSk7CisJCWRiZygiJTAyeCAtPiBpODA0MiAocGFyYW1ldGVyKVxuIiwgcGFyYW1baV0pOwogCQlpODA0Ml93cml0ZV9kYXRhKHBhcmFtW2ldKTsKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgKChjb21tYW5kID4+IDgpICYgMHhmKTsgaSsrKSB7CiAJCWVycm9yID0gaTgwNDJfd2FpdF9yZWFkKCk7CiAJCWlmIChlcnJvcikgewotCQkJZGJnKCIgICAgIC0tIGk4MDQyICh0aW1lb3V0KSIpOworCQkJZGJnKCIgICAgIC0tIGk4MDQyICh0aW1lb3V0KVxuIik7CiAJCQlyZXR1cm4gZXJyb3I7CiAJCX0KIAogCQlpZiAoY29tbWFuZCA9PSBJODA0Ml9DTURfQVVYX0xPT1AgJiYKIAkJICAgICEoaTgwNDJfcmVhZF9zdGF0dXMoKSAmIEk4MDQyX1NUUl9BVVhEQVRBKSkgewotCQkJZGJnKCIgICAgIC0tIGk4MDQyIChhdXhlcnIpIik7CisJCQlkYmcoIiAgICAgLS0gaTgwNDIgKGF1eGVycilcbiIpOwogCQkJcmV0dXJuIC0xOwogCQl9CiAKIAkJcGFyYW1baV0gPSBpODA0Ml9yZWFkX2RhdGEoKTsKLQkJZGJnKCIlMDJ4IDwtIGk4MDQyIChyZXR1cm4pIiwgcGFyYW1baV0pOworCQlkYmcoIiUwMnggPC0gaTgwNDIgKHJldHVybilcbiIsIHBhcmFtW2ldKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTMwOSw3ICszMTEsNyBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZpODA0Ml9sb2NrLCBmbGFncyk7CiAKIAlpZiAoIShyZXR2YWwgPSBpODA0Ml93YWl0X3dyaXRlKCkpKSB7Ci0JCWRiZygiJTAyeCAtPiBpODA0MiAoa2JkLWRhdGEpIiwgYyk7CisJCWRiZygiJTAyeCAtPiBpODA0MiAoa2JkLWRhdGEpXG4iLCBjKTsKIAkJaTgwNDJfd3JpdGVfZGF0YShjKTsKIAl9CiAKQEAgLTM1NSwxNyArMzU3LDE0IEBACiAKIAlpODA0Ml9jdHIgJj0gfmlycV9iaXQ7CiAJaWYgKGk4MDQyX2NvbW1hbmQoJmk4MDQyX2N0ciwgSTgwNDJfQ01EX0NUTF9XQ1RSKSkKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJImk4MDQyLmM6IENhbid0IHdyaXRlIENUUiB3aGlsZSBjbG9zaW5nICVzIHBvcnQuXG4iLAotCQkJcG9ydF9uYW1lKTsKKwkJcHJfd2FybigiQ2FuJ3Qgd3JpdGUgQ1RSIHdoaWxlIGNsb3NpbmcgJXMgcG9ydFxuIiwgcG9ydF9uYW1lKTsKIAogCXVkZWxheSg1MCk7CiAKIAlpODA0Ml9jdHIgJj0gfmRpc2FibGVfYml0OwogCWk4MDQyX2N0ciB8PSBpcnFfYml0OwogCWlmIChpODA0Ml9jb21tYW5kKCZpODA0Ml9jdHIsIEk4MDQyX0NNRF9DVExfV0NUUikpCi0JCXByaW50ayhLRVJOX0VSUiAiaTgwNDIuYzogQ2FuJ3QgcmVhY3RpdmF0ZSAlcyBwb3J0LlxuIiwKLQkJCXBvcnRfbmFtZSk7CisJCXByX2VycigiQ2FuJ3QgcmVhY3RpdmF0ZSAlcyBwb3J0XG4iLCBwb3J0X25hbWUpOwogCiAJLyoKIAkgKiBTZWUgaWYgdGhlcmUgaXMgYW55IGRhdGEgYXBwZWFyZWQgd2hpbGUgd2Ugd2VyZSBtZXNzaW5nIHdpdGgKQEAgLTQ1Niw3ICs0NTUsOCBAQAogCXN0ciA9IGk4MDQyX3JlYWRfc3RhdHVzKCk7CiAJaWYgKHVubGlrZWx5KH5zdHIgJiBJODA0Ml9TVFJfT0JGKSkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpODA0Ml9sb2NrLCBmbGFncyk7Ci0JCWlmIChpcnEpIGRiZygiSW50ZXJydXB0ICVkLCB3aXRob3V0IGFueSBkYXRhIiwgaXJxKTsKKwkJaWYgKGlycSkKKwkJCWRiZygiSW50ZXJydXB0ICVkLCB3aXRob3V0IGFueSBkYXRhXG4iLCBpcnEpOwogCQlyZXQgPSAwOwogCQlnb3RvIG91dDsKIAl9CkBAIC00NjksNyArNDY5LDggQEAKIAogCQlkZmwgPSAwOwogCQlpZiAoc3RyICYgSTgwNDJfU1RSX01VWEVSUikgewotCQkJZGJnKCJNVVggZXJyb3IsIHN0YXR1cyBpcyAlMDJ4LCBkYXRhIGlzICUwMngiLCBzdHIsIGRhdGEpOworCQkJZGJnKCJNVVggZXJyb3IsIHN0YXR1cyBpcyAlMDJ4LCBkYXRhIGlzICUwMnhcbiIsCisJCQkgICAgc3RyLCBkYXRhKTsKIC8qCiAgKiBXaGVuIE1VWEVSUiBjb25kaXRpb24gaXMgc2lnbmFsbGVkIHRoZSBkYXRhIHJlZ2lzdGVyIGNhbiBvbmx5IGNvbnRhaW4KICAqIDB4ZmQsIDB4ZmUgb3IgMHhmZiBpZiBpbXBsZW1lbnRhdGlvbiBmb2xsb3dzIHRoZSBzcGVjLiBVbmZvcnR1bmF0ZWx5CkBAIC01MTIsNyArNTEzLDcgQEAKIAlwb3J0ID0gJmk4MDQyX3BvcnRzW3BvcnRfbm9dOwogCXNlcmlvID0gcG9ydC0+ZXhpc3RzID8gcG9ydC0+c2VyaW8gOiBOVUxMOwogCi0JZGJnKCIlMDJ4IDwtIGk4MDQyIChpbnRlcnJ1cHQsICVkLCAlZCVzJXMpIiwKKwlkYmcoIiUwMnggPC0gaTgwNDIgKGludGVycnVwdCwgJWQsICVkJXMlcylcbiIsCiAJICAgIGRhdGEsIHBvcnRfbm8sIGlycSwKIAkgICAgZGZsICYgU0VSSU9fUEFSSVRZID8gIiwgYmFkIHBhcml0eSIgOiAiIiwKIAkgICAgZGZsICYgU0VSSU9fVElNRU9VVCA/ICIsIHRpbWVvdXQiIDogIiIpOwpAQCAtNTQwLDcgKzU0MSw3IEBACiAJaWYgKGk4MDQyX2NvbW1hbmQoJmk4MDQyX2N0ciwgSTgwNDJfQ01EX0NUTF9XQ1RSKSkgewogCQlpODA0Ml9jdHIgJj0gfkk4MDQyX0NUUl9LQkRJTlQ7CiAJCWk4MDQyX2N0ciB8PSBJODA0Ml9DVFJfS0JERElTOwotCQlwcmludGsoS0VSTl9FUlIgImk4MDQyLmM6IEZhaWxlZCB0byBlbmFibGUgS0JEIHBvcnQuXG4iKTsKKwkJcHJfZXJyKCJGYWlsZWQgdG8gZW5hYmxlIEtCRCBwb3J0XG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC01NTksNyArNTYwLDcgQEAKIAlpZiAoaTgwNDJfY29tbWFuZCgmaTgwNDJfY3RyLCBJODA0Ml9DTURfQ1RMX1dDVFIpKSB7CiAJCWk4MDQyX2N0ciAmPSB+STgwNDJfQ1RSX0FVWElOVDsKIAkJaTgwNDJfY3RyIHw9IEk4MDQyX0NUUl9BVVhESVM7Ci0JCXByaW50ayhLRVJOX0VSUiAiaTgwNDIuYzogRmFpbGVkIHRvIGVuYWJsZSBBVVggcG9ydC5cbiIpOworCQlwcl9lcnIoIkZhaWxlZCB0byBlbmFibGUgQVVYIHBvcnRcbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTY0MSw3ICs2NDIsNyBAQAogCWlmIChpODA0Ml9zZXRfbXV4X21vZGUodHJ1ZSwgJm11eF92ZXJzaW9uKSkKIAkJcmV0dXJuIC0xOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiaTgwNDIuYzogRGV0ZWN0ZWQgYWN0aXZlIG11bHRpcGxleGluZyBjb250cm9sbGVyLCByZXYgJWQuJWQuXG4iLAorCXByX2luZm8oIkRldGVjdGVkIGFjdGl2ZSBtdWx0aXBsZXhpbmcgY29udHJvbGxlciwgcmV2ICVkLiVkXG4iLAogCQkobXV4X3ZlcnNpb24gPj4gNCkgJiAweGYsIG11eF92ZXJzaW9uICYgMHhmKTsKIAogLyoKQEAgLTY1MSw3ICs2NTIsNyBAQAogCWk4MDQyX2N0ciAmPSB+STgwNDJfQ1RSX0FVWElOVDsKIAogCWlmIChpODA0Ml9jb21tYW5kKCZpODA0Ml9jdHIsIEk4MDQyX0NNRF9DVExfV0NUUikpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJpODA0Mi5jOiBGYWlsZWQgdG8gZGlzYWJsZSBBVVggcG9ydCwgY2FuJ3QgdXNlIE1VWC5cbiIpOworCQlwcl9lcnIoIkZhaWxlZCB0byBkaXNhYmxlIEFVWCBwb3J0LCBjYW4ndCB1c2UgTVVYXG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC02NzYsOCArNjc3LDggQEAKIAlzdHIgPSBpODA0Ml9yZWFkX3N0YXR1cygpOwogCWlmIChzdHIgJiBJODA0Ml9TVFJfT0JGKSB7CiAJCWRhdGEgPSBpODA0Ml9yZWFkX2RhdGEoKTsKLQkJZGJnKCIlMDJ4IDwtIGk4MDQyIChhdXhfdGVzdF9pcnEsICVzKSIsCi0JCQlkYXRhLCBzdHIgJiBJODA0Ml9TVFJfQVVYREFUQSA/ICJhdXgiIDogImtiZCIpOworCQlkYmcoIiUwMnggPC0gaTgwNDIgKGF1eF90ZXN0X2lycSwgJXMpXG4iLAorCQkgICAgZGF0YSwgc3RyICYgSTgwNDJfU1RSX0FVWERBVEEgPyAiYXV4IiA6ICJrYmQiKTsKIAkJaWYgKGk4MDQyX2lycV9iZWluZ190ZXN0ZWQgJiYKIAkJICAgIGRhdGEgPT0gMHhhNSAmJiAoc3RyICYgSTgwNDJfU1RSX0FVWERBVEEpKQogCQkJY29tcGxldGUoJmk4MDQyX2F1eF9pcnFfZGVsaXZlcmVkKTsKQEAgLTc3MCw4ICs3NzEsOCBAQAogICovCiAKIAlpZiAoaTgwNDJfdG9nZ2xlX2F1eChmYWxzZSkpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiRmFpbGVkIHRvIGRpc2FibGUgQVVYIHBvcnQsIGJ1dCBjb250aW51aW5nIGFueXdheS4uLiBJcyB0aGlzIGEgU2lTP1xuIik7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIklmIEFVWCBwb3J0IGlzIHJlYWxseSBhYnNlbnQgcGxlYXNlIHVzZSB0aGUgJ2k4MDQyLm5vYXV4JyBvcHRpb24uXG4iKTsKKwkJcHJfd2FybigiRmFpbGVkIHRvIGRpc2FibGUgQVVYIHBvcnQsIGJ1dCBjb250aW51aW5nIGFueXdheS4uLiBJcyB0aGlzIGEgU2lTP1xuIik7CisJCXByX3dhcm4oIklmIEFVWCBwb3J0IGlzIHJlYWxseSBhYnNlbnQgcGxlYXNlIHVzZSB0aGUgJ2k4MDQyLm5vYXV4JyBvcHRpb25cbiIpOwogCX0KIAogCWlmIChpODA0Ml90b2dnbGVfYXV4KHRydWUpKQpAQCAtODE5LDcgKzgyMCw3IEBACiAgKiBBVVggSVJRIHdhcyBuZXZlciBkZWxpdmVyZWQgc28gd2UgbmVlZCB0byBmbHVzaCB0aGUgY29udHJvbGxlciB0bwogICogZ2V0IHJpZCBvZiB0aGUgYnl0ZSB3ZSBwdXQgdGhlcmU7IG90aGVyd2lzZSBrZXlib2FyZCBtYXkgbm90IHdvcmsuCiAgKi8KLQkJZGJnKCIgICAgIC0tIGk4MDQyIChhdXggaXJxIHRlc3QgdGltZW91dCkiKTsKKwkJZGJnKCIgICAgIC0tIGk4MDQyIChhdXggaXJxIHRlc3QgdGltZW91dClcbiIpOwogCQlpODA0Ml9mbHVzaCgpOwogCQlyZXR2YWwgPSAtMTsKIAl9CkBAIC04NDUsNyArODQ2LDcgQEAKIHN0YXRpYyBpbnQgaTgwNDJfY29udHJvbGxlcl9jaGVjayh2b2lkKQogewogCWlmIChpODA0Ml9mbHVzaCgpID09IEk4MDQyX0JVRkZFUl9TSVpFKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiaTgwNDIuYzogTm8gY29udHJvbGxlciBmb3VuZC5cbiIpOworCQlwcl9lcnIoIk5vIGNvbnRyb2xsZXIgZm91bmRcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKQEAgLTg2NCwxNSArODY1LDE1IEBACiAJZG8gewogCiAJCWlmIChpODA0Ml9jb21tYW5kKCZwYXJhbSwgSTgwNDJfQ01EX0NUTF9URVNUKSkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJpODA0Mi5jOiBpODA0MiBjb250cm9sbGVyIHNlbGYgdGVzdCB0aW1lb3V0LlxuIik7CisJCQlwcl9lcnIoImk4MDQyIGNvbnRyb2xsZXIgc2VsZiB0ZXN0IHRpbWVvdXRcbiIpOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KIAogCQlpZiAocGFyYW0gPT0gSTgwNDJfUkVUX0NUTF9URVNUKQogCQkJcmV0dXJuIDA7CiAKLQkJcHJpbnRrKEtFUk5fRVJSICJpODA0Mi5jOiBpODA0MiBjb250cm9sbGVyIHNlbGZ0ZXN0IGZhaWxlZC4gKCUjeCAhPSAlI3gpXG4iLAotCQkJcGFyYW0sIEk4MDQyX1JFVF9DVExfVEVTVCk7CisJCXByX2VycigiaTgwNDIgY29udHJvbGxlciBzZWxmdGVzdCBmYWlsZWQuICglI3ggIT0gJSN4KVxuIiwKKwkJICAgICAgIHBhcmFtLCBJODA0Ml9SRVRfQ1RMX1RFU1QpOwogCQltc2xlZXAoNTApOwogCX0gd2hpbGUgKGkrKyA8IDUpOwogCkBAIC04ODMsOCArODg0LDcgQEAKIAkgKiBhbmQgdXNlciB3aWxsIHN0aWxsIGdldCBhIHdvcmtpbmcga2V5Ym9hcmQuIFRoaXMgaXMgZXNwZWNpYWxseQogCSAqIGltcG9ydGFudCBvbiBuZXRib29rcy4gT24gb3RoZXIgYXJjaGVzIHdlIHRydXN0IGhhcmR3YXJlIG1vcmUuCiAJICovCi0JcHJpbnRrKEtFUk5fSU5GTwotCQkiaTgwNDI6IGdpdmluZyB1cCBvbiBjb250cm9sbGVyIHNlbGZ0ZXN0LCBjb250aW51aW5nIGFueXdheS4uLlxuIik7CisJcHJfaW5mbygiZ2l2aW5nIHVwIG9uIGNvbnRyb2xsZXIgc2VsZnRlc3QsIGNvbnRpbnVpbmcgYW55d2F5Li4uXG4iKTsKIAlyZXR1cm4gMDsKICNlbHNlCiAJcmV0dXJuIC1FSU87CkBAIC05MDksOCArOTA5LDcgQEAKIAogCWRvIHsKIAkJaWYgKG4gPj0gMTApIHsKLQkJCXByaW50ayhLRVJOX0VSUgotCQkJCSJpODA0Mi5jOiBVbmFibGUgdG8gZ2V0IHN0YWJsZSBDVFIgcmVhZC5cbiIpOworCQkJcHJfZXJyKCJVbmFibGUgdG8gZ2V0IHN0YWJsZSBDVFIgcmVhZFxuIik7CiAJCQlyZXR1cm4gLUVJTzsKIAkJfQogCkBAIC05MTgsOCArOTE3LDcgQEAKIAkJCXVkZWxheSg1MCk7CiAKIAkJaWYgKGk4MDQyX2NvbW1hbmQoJmN0cltuKysgJSAyXSwgSTgwNDJfQ01EX0NUTF9SQ1RSKSkgewotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkJImk4MDQyLmM6IENhbid0IHJlYWQgQ1RSIHdoaWxlIGluaXRpYWxpemluZyBpODA0Mi5cbiIpOworCQkJcHJfZXJyKCJDYW4ndCByZWFkIENUUiB3aGlsZSBpbml0aWFsaXppbmcgaTgwNDJcbiIpOwogCQkJcmV0dXJuIC1FSU87CiAJCX0KIApAQCAtOTQzLDcgKzk0MSw3IEBACiAJCWlmIChpODA0Ml91bmxvY2spCiAJCQlpODA0Ml9jdHIgfD0gSTgwNDJfQ1RSX0lHTktFWUxPQ0s7CiAJCWVsc2UKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImk4MDQyLmM6IFdhcm5pbmc6IEtleWxvY2sgYWN0aXZlLlxuIik7CisJCQlwcl93YXJuKCJXYXJuaW5nOiBLZXlsb2NrIGFjdGl2ZVxuIik7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmk4MDQyX2xvY2ssIGZsYWdzKTsKIApAQCAtOTcwLDcgKzk2OCw3IEBACiAgKi8KIAogCWlmIChpODA0Ml9jb21tYW5kKCZpODA0Ml9jdHIsIEk4MDQyX0NNRF9DVExfV0NUUikpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJpODA0Mi5jOiBDYW4ndCB3cml0ZSBDVFIgd2hpbGUgaW5pdGlhbGl6aW5nIGk4MDQyLlxuIik7CisJCXByX2VycigiQ2FuJ3Qgd3JpdGUgQ1RSIHdoaWxlIGluaXRpYWxpemluZyBpODA0MlxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtMTAwMCw3ICs5OTgsNyBAQAogCWk4MDQyX2N0ciAmPSB+KEk4MDQyX0NUUl9LQkRJTlQgfCBJODA0Ml9DVFJfQVVYSU5UKTsKIAogCWlmIChpODA0Ml9jb21tYW5kKCZpODA0Ml9jdHIsIEk4MDQyX0NNRF9DVExfV0NUUikpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgImk4MDQyLmM6IENhbid0IHdyaXRlIENUUiB3aGlsZSByZXNldHRpbmcuXG4iKTsKKwkJcHJfd2FybigiQ2FuJ3Qgd3JpdGUgQ1RSIHdoaWxlIHJlc2V0dGluZ1xuIik7CiAKIC8qCiAgKiBEaXNhYmxlIE1VWCBtb2RlIGlmIHByZXNlbnQuCkBAIC0xMDIxLDcgKzEwMTksNyBAQAogICovCiAKIAlpZiAoaTgwNDJfY29tbWFuZCgmaTgwNDJfaW5pdGlhbF9jdHIsIEk4MDQyX0NNRF9DVExfV0NUUikpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgImk4MDQyLmM6IENhbid0IHJlc3RvcmUgQ1RSLlxuIik7CisJCXByX3dhcm4oIkNhbid0IHJlc3RvcmUgQ1RSXG4iKTsKIH0KIAogCkBAIC0xMDQ1LDE0ICsxMDQzLDE0IEBACiAJbGVkID0gKHN0YXRlKSA/IDB4MDEgfCAweDA0IDogMDsKIAl3aGlsZSAoaTgwNDJfcmVhZF9zdGF0dXMoKSAmIEk4MDQyX1NUUl9JQkYpCiAJCURFTEFZOwotCWRiZygiJTAyeCAtPiBpODA0MiAocGFuaWMgYmxpbmspIiwgMHhlZCk7CisJZGJnKCIlMDJ4IC0+IGk4MDQyIChwYW5pYyBibGluaylcbiIsIDB4ZWQpOwogCWk4MDQyX3N1cHByZXNzX2tiZF9hY2sgPSAyOwogCWk4MDQyX3dyaXRlX2RhdGEoMHhlZCk7IC8qIHNldCBsZWRzICovCiAJREVMQVk7CiAJd2hpbGUgKGk4MDQyX3JlYWRfc3RhdHVzKCkgJiBJODA0Ml9TVFJfSUJGKQogCQlERUxBWTsKIAlERUxBWTsKLQlkYmcoIiUwMnggLT4gaTgwNDIgKHBhbmljIGJsaW5rKSIsIGxlZCk7CisJZGJnKCIlMDJ4IC0+IGk4MDQyIChwYW5pYyBibGluaylcbiIsIGxlZCk7CiAJaTgwNDJfd3JpdGVfZGF0YShsZWQpOwogCURFTEFZOwogCXJldHVybiBkZWxheTsKQEAgLTEwNjgsOSArMTA2Niw3IEBACiAKIAllcnJvciA9IGk4MDQyX2NvbW1hbmQoJnBhcmFtLCAweDEwNTkpOwogCWlmIChlcnJvcikKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJIkZhaWxlZCB0byBlbmFibGUgRFJJVEVLIGV4dGVuc2lvbjogJWRcbiIsCi0JCQllcnJvcik7CisJCXByX3dhcm4oIkZhaWxlZCB0byBlbmFibGUgRFJJVEVLIGV4dGVuc2lvbjogJWRcbiIsIGVycm9yKTsKIH0KICNlbmRpZgogCkBAIC0xMTA1LDEwICsxMTAxLDEwIEBACiAJaTgwNDJfY3RyIHw9IEk4MDQyX0NUUl9BVVhESVMgfCBJODA0Ml9DVFJfS0JERElTOwogCWk4MDQyX2N0ciAmPSB+KEk4MDQyX0NUUl9BVVhJTlQgfCBJODA0Ml9DVFJfS0JESU5UKTsKIAlpZiAoaTgwNDJfY29tbWFuZCgmaTgwNDJfY3RyLCBJODA0Ml9DTURfQ1RMX1dDVFIpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImk4MDQyOiBDYW4ndCB3cml0ZSBDVFIgdG8gcmVzdW1lLCByZXRyeWluZy4uLlxuIik7CisJCXByX3dhcm4oIkNhbid0IHdyaXRlIENUUiB0byByZXN1bWUsIHJldHJ5aW5nLi4uXG4iKTsKIAkJbXNsZWVwKDUwKTsKIAkJaWYgKGk4MDQyX2NvbW1hbmQoJmk4MDQyX2N0ciwgSTgwNDJfQ01EX0NUTF9XQ1RSKSkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJpODA0MjogQ1RSIHdyaXRlIHJldHJ5IGZhaWxlZFxuIik7CisJCQlwcl9lcnIoIkNUUiB3cml0ZSByZXRyeSBmYWlsZWRcbiIpOwogCQkJcmV0dXJuIC1FSU87CiAJCX0KIAl9CkBAIC0xMTIxLDkgKzExMTcsNyBAQAogCiAJaWYgKGk4MDQyX211eF9wcmVzZW50KSB7CiAJCWlmIChpODA0Ml9zZXRfbXV4X21vZGUodHJ1ZSwgTlVMTCkgfHwgaTgwNDJfZW5hYmxlX211eF9wb3J0cygpKQotCQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJCSJpODA0MjogZmFpbGVkIHRvIHJlc3VtZSBhY3RpdmUgbXVsdGlwbGV4b3IsICIKLQkJCQkibW91c2Ugd29uJ3Qgd29yay5cbiIpOworCQkJcHJfd2FybigiZmFpbGVkIHRvIHJlc3VtZSBhY3RpdmUgbXVsdGlwbGV4b3IsIG1vdXNlIHdvbid0IHdvcmtcbiIpOwogCX0gZWxzZSBpZiAoaTgwNDJfcG9ydHNbSTgwNDJfQVVYX1BPUlRfTk9dLnNlcmlvKQogCQlpODA0Ml9lbmFibGVfYXV4X3BvcnQoKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi5oIGIvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi5oCmluZGV4IGNiYzFiZWIuLmFjMWQ3NTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIuaAorKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLmgKQEAgLTg5LDE1ICs4OSwxOSBAQAogI2lmZGVmIERFQlVHCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBpODA0Ml9zdGFydF90aW1lOwogI2RlZmluZSBkYmdfaW5pdCgpIGRvIHsgaTgwNDJfc3RhcnRfdGltZSA9IGppZmZpZXM7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGRiZyhmb3JtYXQsIGFyZy4uLikgCQkJCQkJCVwKLQlkbyB7IAkJCQkJCQkJCVwKKyNkZWZpbmUgZGJnKGZvcm1hdCwgYXJnLi4uKQkJCQkJCQlcCisJZG8gewkJCQkJCQkJCVwKIAkJaWYgKGk4MDQyX2RlYnVnKQkJCQkJCVwKLQkJCXByaW50ayhLRVJOX0RFQlVHIF9fRklMRV9fICI6ICIgZm9ybWF0ICIgWyVkXVxuIiAsCVwKLQkgCQkJIyMgYXJnLCAoaW50KSAoamlmZmllcyAtIGk4MDQyX3N0YXJ0X3RpbWUpKTsJXAorCQkJcHJpbnRrKEtFUk5fREVCVUcgS0JVSUxEX01PRE5BTUUgIjogWyVkXSAiIGZvcm1hdCwJXAorCQkJICAgICAgIChpbnQpIChqaWZmaWVzIC0gaTgwNDJfc3RhcnRfdGltZSksICMjYXJnKTsJXAogCX0gd2hpbGUgKDApCiAjZWxzZQogI2RlZmluZSBkYmdfaW5pdCgpIGRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZGJnKGZvcm1hdCwgYXJnLi4uKSBkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgZGJnKGZvcm1hdCwgYXJnLi4uKQkJCQkJCQlcCisJZG8gewkJCQkJCQkJCVwKKwkJaWYgKDApCQkJCQkJCQlcCisJCQlwcmludGsoS0VSTl9ERUJVRyBwcl9mbXQoZm9ybWF0KSwgIyNhcmcpOwkJXAorCX0gd2hpbGUgKDApCiAjZW5kaWYKIAogI2VuZGlmIC8qIF9JODA0Ml9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL3BzMm11bHQuYyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vcHMybXVsdC5jCmluZGV4IDZiY2UyMmUuLjE1YWE4MWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vcHMybXVsdC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vcHMybXVsdC5jCkBAIC0yMDcsNyArMjA3LDcgQEAKIGVycl9vdXQ6CiAJd2hpbGUgKC0taSA+PSAwKQogCQlrZnJlZShwc20tPnBvcnRzW2ldLnNlcmlvKTsKLQlrZnJlZShzZXJpbyk7CisJa2ZyZWUocHNtKTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYwppbmRleCA0MDViZjIxLi5kYjViMGJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMKKysrIGIvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jCkBAIC0zMiwxMCArMzIsOSBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlvLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKIE1PRFVMRV9BVVRIT1IoIlZvanRlY2ggUGF2bGlrIDx2b2p0ZWNoQHVjdy5jej4iKTsKQEAgLTQ0LDcgKzQzLDcgQEAKIAogLyoKICAqIHNlcmlvX211dGV4IHByb3RlY3RzIGVudGlyZSBzZXJpbyBzdWJzeXN0ZW0gYW5kIGlzIHRha2VuIGV2ZXJ5IHRpbWUKLSAqIHNlcmlvIHBvcnQgb3IgZHJpdmVyIHJlZ2lzdHJlcmVkIG9yIHVucmVnaXN0ZXJlZC4KKyAqIHNlcmlvIHBvcnQgb3IgZHJpdmVyIHJlZ2lzdGVyZWQgb3IgdW5yZWdpc3RlcmVkLgogICovCiBzdGF0aWMgREVGSU5FX01VVEVYKHNlcmlvX211dGV4KTsKIApAQCAtMTY1LDggKzE2NCw5NSBAQAogCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHNlcmlvX2V2ZW50X2xvY2spOwkvKiBwcm90ZWN0cyBzZXJpb19ldmVudF9saXN0ICovCiBzdGF0aWMgTElTVF9IRUFEKHNlcmlvX2V2ZW50X2xpc3QpOwotc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKHNlcmlvX3dhaXQpOwotc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqc2VyaW9fdGFzazsKKworc3RhdGljIHN0cnVjdCBzZXJpb19ldmVudCAqc2VyaW9fZ2V0X2V2ZW50KHZvaWQpCit7CisJc3RydWN0IHNlcmlvX2V2ZW50ICpldmVudCA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzZXJpb19ldmVudF9sb2NrLCBmbGFncyk7CisKKwlpZiAoIWxpc3RfZW1wdHkoJnNlcmlvX2V2ZW50X2xpc3QpKSB7CisJCWV2ZW50ID0gbGlzdF9maXJzdF9lbnRyeSgmc2VyaW9fZXZlbnRfbGlzdCwKKwkJCQkJIHN0cnVjdCBzZXJpb19ldmVudCwgbm9kZSk7CisJCWxpc3RfZGVsX2luaXQoJmV2ZW50LT5ub2RlKTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZXJpb19ldmVudF9sb2NrLCBmbGFncyk7CisJcmV0dXJuIGV2ZW50OworfQorCitzdGF0aWMgdm9pZCBzZXJpb19mcmVlX2V2ZW50KHN0cnVjdCBzZXJpb19ldmVudCAqZXZlbnQpCit7CisJbW9kdWxlX3B1dChldmVudC0+b3duZXIpOworCWtmcmVlKGV2ZW50KTsKK30KKworc3RhdGljIHZvaWQgc2VyaW9fcmVtb3ZlX2R1cGxpY2F0ZV9ldmVudHMoc3RydWN0IHNlcmlvX2V2ZW50ICpldmVudCkKK3sKKwlzdHJ1Y3Qgc2VyaW9fZXZlbnQgKmUsICpuZXh0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2VyaW9fZXZlbnRfbG9jaywgZmxhZ3MpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGUsIG5leHQsICZzZXJpb19ldmVudF9saXN0LCBub2RlKSB7CisJCWlmIChldmVudC0+b2JqZWN0ID09IGUtPm9iamVjdCkgeworCQkJLyoKKwkJCSAqIElmIHRoaXMgZXZlbnQgaXMgb2YgZGlmZmVyZW50IHR5cGUgd2Ugc2hvdWxkIG5vdAorCQkJICogbG9vayBmdXJ0aGVyIC0gd2Ugb25seSBzdXBwcmVzcyBkdXBsaWNhdGUgZXZlbnRzCisJCQkgKiB0aGF0IHdlcmUgc2VudCBiYWNrLXRvLWJhY2suCisJCQkgKi8KKwkJCWlmIChldmVudC0+dHlwZSAhPSBlLT50eXBlKQorCQkJCWJyZWFrOworCisJCQlsaXN0X2RlbF9pbml0KCZlLT5ub2RlKTsKKwkJCXNlcmlvX2ZyZWVfZXZlbnQoZSk7CisJCX0KKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZXJpb19ldmVudF9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIHNlcmlvX2hhbmRsZV9ldmVudChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHNlcmlvX2V2ZW50ICpldmVudDsKKworCW11dGV4X2xvY2soJnNlcmlvX211dGV4KTsKKworCXdoaWxlICgoZXZlbnQgPSBzZXJpb19nZXRfZXZlbnQoKSkpIHsKKworCQlzd2l0Y2ggKGV2ZW50LT50eXBlKSB7CisKKwkJY2FzZSBTRVJJT19SRUdJU1RFUl9QT1JUOgorCQkJc2VyaW9fYWRkX3BvcnQoZXZlbnQtPm9iamVjdCk7CisJCQlicmVhazsKKworCQljYXNlIFNFUklPX1JFQ09OTkVDVF9QT1JUOgorCQkJc2VyaW9fcmVjb25uZWN0X3BvcnQoZXZlbnQtPm9iamVjdCk7CisJCQlicmVhazsKKworCQljYXNlIFNFUklPX1JFU0NBTl9QT1JUOgorCQkJc2VyaW9fZGlzY29ubmVjdF9wb3J0KGV2ZW50LT5vYmplY3QpOworCQkJc2VyaW9fZmluZF9kcml2ZXIoZXZlbnQtPm9iamVjdCk7CisJCQlicmVhazsKKworCQljYXNlIFNFUklPX1JFQ09OTkVDVF9TVUJUUkVFOgorCQkJc2VyaW9fcmVjb25uZWN0X3N1YnRyZWUoZXZlbnQtPm9iamVjdCk7CisJCQlicmVhazsKKworCQljYXNlIFNFUklPX0FUVEFDSF9EUklWRVI6CisJCQlzZXJpb19hdHRhY2hfZHJpdmVyKGV2ZW50LT5vYmplY3QpOworCQkJYnJlYWs7CisJCX0KKworCQlzZXJpb19yZW1vdmVfZHVwbGljYXRlX2V2ZW50cyhldmVudCk7CisJCXNlcmlvX2ZyZWVfZXZlbnQoZXZlbnQpOworCX0KKworCW11dGV4X3VubG9jaygmc2VyaW9fbXV0ZXgpOworfQorCitzdGF0aWMgREVDTEFSRV9XT1JLKHNlcmlvX2V2ZW50X3dvcmssIHNlcmlvX2hhbmRsZV9ldmVudCk7CiAKIHN0YXRpYyBpbnQgc2VyaW9fcXVldWVfZXZlbnQodm9pZCAqb2JqZWN0LCBzdHJ1Y3QgbW9kdWxlICpvd25lciwKIAkJCSAgICAgZW51bSBzZXJpb19ldmVudF90eXBlIGV2ZW50X3R5cGUpCkBAIC0yMTIsMTAxICsyOTgsMTMgQEAKIAlldmVudC0+b3duZXIgPSBvd25lcjsKIAogCWxpc3RfYWRkX3RhaWwoJmV2ZW50LT5ub2RlLCAmc2VyaW9fZXZlbnRfbGlzdCk7Ci0Jd2FrZV91cCgmc2VyaW9fd2FpdCk7CisJc2NoZWR1bGVfd29yaygmc2VyaW9fZXZlbnRfd29yayk7CiAKIG91dDoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZXJpb19ldmVudF9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIAotc3RhdGljIHZvaWQgc2VyaW9fZnJlZV9ldmVudChzdHJ1Y3Qgc2VyaW9fZXZlbnQgKmV2ZW50KQotewotCW1vZHVsZV9wdXQoZXZlbnQtPm93bmVyKTsKLQlrZnJlZShldmVudCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNlcmlvX3JlbW92ZV9kdXBsaWNhdGVfZXZlbnRzKHN0cnVjdCBzZXJpb19ldmVudCAqZXZlbnQpCi17Ci0Jc3RydWN0IHNlcmlvX2V2ZW50ICplLCAqbmV4dDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNlcmlvX2V2ZW50X2xvY2ssIGZsYWdzKTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlLCBuZXh0LCAmc2VyaW9fZXZlbnRfbGlzdCwgbm9kZSkgewotCQlpZiAoZXZlbnQtPm9iamVjdCA9PSBlLT5vYmplY3QpIHsKLQkJCS8qCi0JCQkgKiBJZiB0aGlzIGV2ZW50IGlzIG9mIGRpZmZlcmVudCB0eXBlIHdlIHNob3VsZCBub3QKLQkJCSAqIGxvb2sgZnVydGhlciAtIHdlIG9ubHkgc3VwcHJlc3MgZHVwbGljYXRlIGV2ZW50cwotCQkJICogdGhhdCB3ZXJlIHNlbnQgYmFjay10by1iYWNrLgotCQkJICovCi0JCQlpZiAoZXZlbnQtPnR5cGUgIT0gZS0+dHlwZSkKLQkJCQlicmVhazsKLQotCQkJbGlzdF9kZWxfaW5pdCgmZS0+bm9kZSk7Ci0JCQlzZXJpb19mcmVlX2V2ZW50KGUpOwotCQl9Ci0JfQotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VyaW9fZXZlbnRfbG9jaywgZmxhZ3MpOwotfQotCi0KLXN0YXRpYyBzdHJ1Y3Qgc2VyaW9fZXZlbnQgKnNlcmlvX2dldF9ldmVudCh2b2lkKQotewotCXN0cnVjdCBzZXJpb19ldmVudCAqZXZlbnQgPSBOVUxMOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmc2VyaW9fZXZlbnRfbG9jaywgZmxhZ3MpOwotCi0JaWYgKCFsaXN0X2VtcHR5KCZzZXJpb19ldmVudF9saXN0KSkgewotCQlldmVudCA9IGxpc3RfZmlyc3RfZW50cnkoJnNlcmlvX2V2ZW50X2xpc3QsCi0JCQkJCSBzdHJ1Y3Qgc2VyaW9fZXZlbnQsIG5vZGUpOwotCQlsaXN0X2RlbF9pbml0KCZldmVudC0+bm9kZSk7Ci0JfQotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VyaW9fZXZlbnRfbG9jaywgZmxhZ3MpOwotCXJldHVybiBldmVudDsKLX0KLQotc3RhdGljIHZvaWQgc2VyaW9faGFuZGxlX2V2ZW50KHZvaWQpCi17Ci0Jc3RydWN0IHNlcmlvX2V2ZW50ICpldmVudDsKLQotCW11dGV4X2xvY2soJnNlcmlvX211dGV4KTsKLQotCXdoaWxlICgoZXZlbnQgPSBzZXJpb19nZXRfZXZlbnQoKSkpIHsKLQotCQlzd2l0Y2ggKGV2ZW50LT50eXBlKSB7Ci0KLQkJY2FzZSBTRVJJT19SRUdJU1RFUl9QT1JUOgotCQkJc2VyaW9fYWRkX3BvcnQoZXZlbnQtPm9iamVjdCk7Ci0JCQlicmVhazsKLQotCQljYXNlIFNFUklPX1JFQ09OTkVDVF9QT1JUOgotCQkJc2VyaW9fcmVjb25uZWN0X3BvcnQoZXZlbnQtPm9iamVjdCk7Ci0JCQlicmVhazsKLQotCQljYXNlIFNFUklPX1JFU0NBTl9QT1JUOgotCQkJc2VyaW9fZGlzY29ubmVjdF9wb3J0KGV2ZW50LT5vYmplY3QpOwotCQkJc2VyaW9fZmluZF9kcml2ZXIoZXZlbnQtPm9iamVjdCk7Ci0JCQlicmVhazsKLQotCQljYXNlIFNFUklPX1JFQ09OTkVDVF9TVUJUUkVFOgotCQkJc2VyaW9fcmVjb25uZWN0X3N1YnRyZWUoZXZlbnQtPm9iamVjdCk7Ci0JCQlicmVhazsKLQotCQljYXNlIFNFUklPX0FUVEFDSF9EUklWRVI6Ci0JCQlzZXJpb19hdHRhY2hfZHJpdmVyKGV2ZW50LT5vYmplY3QpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlzZXJpb19yZW1vdmVfZHVwbGljYXRlX2V2ZW50cyhldmVudCk7Ci0JCXNlcmlvX2ZyZWVfZXZlbnQoZXZlbnQpOwotCX0KLQotCW11dGV4X3VubG9jaygmc2VyaW9fbXV0ZXgpOwotfQotCiAvKgogICogUmVtb3ZlIGFsbCBldmVudHMgdGhhdCBoYXZlIGJlZW4gc3VibWl0dGVkIGZvciBhIGdpdmVuCiAgKiBvYmplY3QsIGJlIGl0IHNlcmlvIHBvcnQgb3IgZHJpdmVyLgpAQCAtMzU2LDE4ICszNTQsNiBAQAogCXJldHVybiBjaGlsZDsKIH0KIAotc3RhdGljIGludCBzZXJpb190aHJlYWQodm9pZCAqbm90aGluZykKLXsKLQlkbyB7Ci0JCXNlcmlvX2hhbmRsZV9ldmVudCgpOwotCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoc2VyaW9fd2FpdCwKLQkJCWt0aHJlYWRfc2hvdWxkX3N0b3AoKSB8fCAhbGlzdF9lbXB0eSgmc2VyaW9fZXZlbnRfbGlzdCkpOwotCX0gd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLQogLyoKICAqIFNlcmlvIHBvcnQgb3BlcmF0aW9ucwogICovCkBAIC0xMDQwLDIxICsxMDI2LDE4IEBACiAJCXJldHVybiBlcnJvcjsKIAl9CiAKLQlzZXJpb190YXNrID0ga3RocmVhZF9ydW4oc2VyaW9fdGhyZWFkLCBOVUxMLCAia3NlcmlvZCIpOwotCWlmIChJU19FUlIoc2VyaW9fdGFzaykpIHsKLQkJYnVzX3VucmVnaXN0ZXIoJnNlcmlvX2J1cyk7Ci0JCWVycm9yID0gUFRSX0VSUihzZXJpb190YXNrKTsKLQkJcHJfZXJyKCJGYWlsZWQgdG8gc3RhcnQga3NlcmlvZCwgZXJyb3I6ICVkXG4iLCBlcnJvcik7Ci0JCXJldHVybiBlcnJvcjsKLQl9Ci0KIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHNlcmlvX2V4aXQodm9pZCkKIHsKIAlidXNfdW5yZWdpc3Rlcigmc2VyaW9fYnVzKTsKLQlrdGhyZWFkX3N0b3Aoc2VyaW9fdGFzayk7CisKKwkvKgorCSAqIFRoZXJlIHNob3VsZCBub3QgYmUgYW55IG91dHN0YW5kaW5nIGV2ZW50cyBidXQgd29yayBtYXkKKwkgKiBzdGlsbCBiZSBzY2hlZHVsZWQgc28gc2ltcGx5IGNhbmNlbCBpdC4KKwkgKi8KKwljYW5jZWxfd29ya19zeW5jKCZzZXJpb19ldmVudF93b3JrKTsKIH0KIAogc3Vic3lzX2luaXRjYWxsKHNlcmlvX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90YWJsZXQvd2Fjb20uaCBiL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tLmgKaW5kZXggZGU1YWRiMS4uMjMzMTdiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90YWJsZXQvd2Fjb20uaAorKysgYi9kcml2ZXJzL2lucHV0L3RhYmxldC93YWNvbS5oCkBAIC0xMDMsNiArMTAzLDcgQEAKIE1PRFVMRV9MSUNFTlNFKERSSVZFUl9MSUNFTlNFKTsKIAogI2RlZmluZSBVU0JfVkVORE9SX0lEX1dBQ09NCTB4MDU2YQorI2RlZmluZSBVU0JfVkVORE9SX0lEX0xFTk9WTwkweDE3ZWYKIAogc3RydWN0IHdhY29tIHsKIAlkbWFfYWRkcl90IGRhdGFfZG1hOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90YWJsZXQvd2Fjb21fd2FjLmMgYi9kcml2ZXJzL2lucHV0L3RhYmxldC93YWNvbV93YWMuYwppbmRleCA0MzViMGFmLi41MTg3ODI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RhYmxldC93YWNvbV93YWMuYworKysgYi9kcml2ZXJzL2lucHV0L3RhYmxldC93YWNvbV93YWMuYwpAQCAtMTQsNiArMTQsNyBAQAogCiAjaW5jbHVkZSAid2Fjb21fd2FjLmgiCiAjaW5jbHVkZSAid2Fjb20uaCIKKyNpbmNsdWRlIDxsaW51eC9pbnB1dC9tdC5oPgogCiBzdGF0aWMgaW50IHdhY29tX3BlbnBhcnRuZXJfaXJxKHN0cnVjdCB3YWNvbV93YWMgKndhY29tKQogewpAQCAtODYyLDE5ICs4NjMsMjEgQEAKIAlzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgKmZlYXR1cmVzID0gJndhY29tLT5mZWF0dXJlczsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCA9IHdhY29tLT5pbnB1dDsKIAl1bnNpZ25lZCBjaGFyICpkYXRhID0gd2Fjb20tPmRhdGE7Ci0JaW50IHNwID0gMCwgc3ggPSAwLCBzeSA9IDAsIGNvdW50ID0gMDsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKIAkJaW50IHAgPSBkYXRhWzkgKiBpICsgMl07CisJCWJvb2wgdG91Y2ggPSBwICYmICF3YWNvbS0+c2hhcmVkLT5zdHlsdXNfaW5fcHJveGltaXR5OworCiAJCWlucHV0X210X3Nsb3QoaW5wdXQsIGkpOworCQlpbnB1dF9tdF9yZXBvcnRfc2xvdF9zdGF0ZShpbnB1dCwgTVRfVE9PTF9GSU5HRVIsIHRvdWNoKTsKIAkJLyoKIAkJICogVG91Y2ggZXZlbnRzIG5lZWQgdG8gYmUgZGlzYWJsZWQgd2hpbGUgc3R5bHVzIGlzCiAJCSAqIGluIHByb3hpbWl0eSBiZWNhdXNlIHVzZXIncyBoYW5kIGlzIHJlc3Rpbmcgb24gdG91Y2hwYWQKIAkJICogYW5kIHNlbmRpbmcgdW53YW50ZWQgZXZlbnRzLiAgVXNlciBleHBlY3RzIHRhYmxldCBidXR0b25zCiAJCSAqIHRvIGNvbnRpbnVlIHdvcmtpbmcgdGhvdWdoLgogCQkgKi8KLQkJaWYgKHAgJiYgIXdhY29tLT5zaGFyZWQtPnN0eWx1c19pbl9wcm94aW1pdHkpIHsKKwkJaWYgKHRvdWNoKSB7CiAJCQlpbnQgeCA9IGdldF91bmFsaWduZWRfYmUxNigmZGF0YVs5ICogaSArIDNdKSAmIDB4N2ZmOwogCQkJaW50IHkgPSBnZXRfdW5hbGlnbmVkX2JlMTYoJmRhdGFbOSAqIGkgKyA1XSkgJiAweDdmZjsKIAkJCWlmIChmZWF0dXJlcy0+cXVpcmtzICYgV0FDT01fUVVJUktfQkJUT1VDSF9MT1dSRVMpIHsKQEAgLTg4NCwyMyArODg3LDEwIEBACiAJCQlpbnB1dF9yZXBvcnRfYWJzKGlucHV0LCBBQlNfTVRfUFJFU1NVUkUsIHApOwogCQkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dCwgQUJTX01UX1BPU0lUSU9OX1gsIHgpOwogCQkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dCwgQUJTX01UX1BPU0lUSU9OX1ksIHkpOwotCQkJaWYgKHdhY29tLT5pZFtpXSA8IDApCi0JCQkJd2Fjb20tPmlkW2ldID0gd2Fjb20tPnRya19pZCsrICYgTUFYX1RSQUNLSU5HX0lEOwotCQkJaWYgKCFjb3VudCsrKQotCQkJCXNwID0gcCwgc3ggPSB4LCBzeSA9IHk7Ci0JCX0gZWxzZSB7Ci0JCQl3YWNvbS0+aWRbaV0gPSAtMTsKIAkJfQotCQlpbnB1dF9yZXBvcnRfYWJzKGlucHV0LCBBQlNfTVRfVFJBQ0tJTkdfSUQsIHdhY29tLT5pZFtpXSk7CiAJfQogCi0JaW5wdXRfcmVwb3J0X2tleShpbnB1dCwgQlROX1RPVUNILCBjb3VudCA+IDApOwotCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsIEJUTl9UT09MX0ZJTkdFUiwgY291bnQgPT0gMSk7Ci0JaW5wdXRfcmVwb3J0X2tleShpbnB1dCwgQlROX1RPT0xfRE9VQkxFVEFQLCBjb3VudCA9PSAyKTsKLQotCWlucHV0X3JlcG9ydF9hYnMoaW5wdXQsIEFCU19QUkVTU1VSRSwgc3ApOwotCWlucHV0X3JlcG9ydF9hYnMoaW5wdXQsIEFCU19YLCBzeCk7Ci0JaW5wdXRfcmVwb3J0X2FicyhpbnB1dCwgQUJTX1ksIHN5KTsKKwlpbnB1dF9tdF9yZXBvcnRfcG9pbnRlcl9lbXVsYXRpb24oaW5wdXQsIHRydWUpOwogCiAJaW5wdXRfcmVwb3J0X2tleShpbnB1dCwgQlROX0xFRlQsIChkYXRhWzFdICYgMHgwOCkgIT0gMCk7CiAJaW5wdXRfcmVwb3J0X2tleShpbnB1dCwgQlROX0ZPUldBUkQsIChkYXRhWzFdICYgMHgwNCkgIT0gMCk7CkBAIC0xMjcyLDcgKzEyNjIsNyBAQAogCQkJX19zZXRfYml0KEJUTl9UT09MX0ZJTkdFUiwgaW5wdXRfZGV2LT5rZXliaXQpOwogCQkJX19zZXRfYml0KEJUTl9UT09MX0RPVUJMRVRBUCwgaW5wdXRfZGV2LT5rZXliaXQpOwogCi0JCQlpbnB1dF9tdF9jcmVhdGVfc2xvdHMoaW5wdXRfZGV2LCAyKTsKKwkJCWlucHV0X210X2luaXRfc2xvdHMoaW5wdXRfZGV2LCAyKTsKIAkJCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX01UX1BPU0lUSU9OX1gsCiAJCQkJCSAgICAgMCwgZmVhdHVyZXMtPnhfbWF4LAogCQkJCQkgICAgIGZlYXR1cmVzLT54X2Z1enosIDApOwpAQCAtMTI4Miw4ICsxMjcyLDYgQEAKIAkJCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX01UX1BSRVNTVVJFLAogCQkJCQkgICAgIDAsIGZlYXR1cmVzLT5wcmVzc3VyZV9tYXgsCiAJCQkJCSAgICAgZmVhdHVyZXMtPnByZXNzdXJlX2Z1enosIDApOwotCQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfTVRfVFJBQ0tJTkdfSUQsIDAsCi0JCQkJCSAgICAgTUFYX1RSQUNLSU5HX0lELCAwLCAwKTsKIAkJfSBlbHNlIGlmIChmZWF0dXJlcy0+ZGV2aWNlX3R5cGUgPT0gQlROX1RPT0xfUEVOKSB7CiAJCQlfX3NldF9iaXQoQlROX1RPT0xfUlVCQkVSLCBpbnB1dF9kZXYtPmtleWJpdCk7CiAJCQlfX3NldF9iaXQoQlROX1RPT0xfUEVOLCBpbnB1dF9kZXYtPmtleWJpdCk7CkBAIC0xNDQ0LDExICsxNDMyLDE3IEBACiAJeyAiV2Fjb20gQmFtYm9vIDJGRyA0eDUgU0UiLCBXQUNPTV9QS0dMRU5fQkJGVU4sICAxNDcyMCwgIDkyMDAsIDEwMjMsIDYzLCBCQU1CT09fUFQgfTsKIHN0YXRpYyBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHhEQiA9CiAJeyAiV2Fjb20gQmFtYm9vIDJGRyA2eDggU0UiLCBXQUNPTV9QS0dMRU5fQkJGVU4sICAyMTY0OCwgMTM1MzAsIDEwMjMsIDYzLCBCQU1CT09fUFQgfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHg2MDA0ID0KKwl7ICJJU0QtVjQiLCAgICAgICAgICAgICAgIFdBQ09NX1BLR0xFTl9HUkFQSElSRSwgIDEyODAwLCA4MDAwLCAyNTUsIDAsIFRBQkxFVFBDIH07CiAKICNkZWZpbmUgVVNCX0RFVklDRV9XQUNPTShwcm9kKQkJCQkJXAogCVVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgcHJvZCksCQkJXAogCS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmd2Fjb21fZmVhdHVyZXNfIyNwcm9kCiAKKyNkZWZpbmUgVVNCX0RFVklDRV9MRU5PVk8ocHJvZCkJCQkJCVwKKwlVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTEVOT1ZPLCBwcm9kKSwJCQlcCisJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZ3YWNvbV9mZWF0dXJlc18jI3Byb2QKKwogY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgd2Fjb21faWRzW10gPSB7CiAJeyBVU0JfREVWSUNFX1dBQ09NKDB4MDApIH0sCiAJeyBVU0JfREVWSUNFX1dBQ09NKDB4MTApIH0sCkBAIC0xNTI1LDYgKzE1MTksNyBAQAogCXsgVVNCX0RFVklDRV9XQUNPTSgweEUyKSB9LAogCXsgVVNCX0RFVklDRV9XQUNPTSgweEUzKSB9LAogCXsgVVNCX0RFVklDRV9XQUNPTSgweDQ3KSB9LAorCXsgVVNCX0RFVklDRV9MRU5PVk8oMHg2MDA0KSB9LAogCXsgfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCB3YWNvbV9pZHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90YWJsZXQvd2Fjb21fd2FjLmggYi9kcml2ZXJzL2lucHV0L3RhYmxldC93YWNvbV93YWMuaAppbmRleCAwMGNhMDE1Li5iMTMxMGVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RhYmxldC93YWNvbV93YWMuaAorKysgYi9kcml2ZXJzL2lucHV0L3RhYmxldC93YWNvbV93YWMuaApAQCAtNDIsOSArNDIsNiBAQAogI2RlZmluZSBXQUNPTV9RVUlSS19NVUxUSV9JTlBVVAkJMHgwMDAxCiAjZGVmaW5lIFdBQ09NX1FVSVJLX0JCVE9VQ0hfTE9XUkVTCTB4MDAwMgogCi0vKiBsYXJnZXN0IHJlcG9ydGVkIHRyYWNraW5nIGlkICovCi0jZGVmaW5lIE1BWF9UUkFDS0lOR19JRAkJCTB4ZmZmCi0KIGVudW0gewogCVBFTlBBUlRORVIgPSAwLAogCUdSQVBISVJFLApAQCAtMTAwLDcgKzk3LDYgQEAKIAlpbnQgaWRbM107CiAJX191MzIgc2VyaWFsWzJdOwogCWludCBsYXN0X2ZpbmdlcjsKLQlpbnQgdHJrX2lkOwogCXN0cnVjdCB3YWNvbV9mZWF0dXJlcyBmZWF0dXJlczsKIAlzdHJ1Y3Qgd2Fjb21fc2hhcmVkICpzaGFyZWQ7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL0tjb25maWcgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL0tjb25maWcKaW5kZXggMDZlYThkYS4uMDdhYzc3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9LY29uZmlnCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vS2NvbmZpZwpAQCAtNjU5LDYgKzY1OSwyOCBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcGNhcF90cy4KIAorY29uZmlnIFRPVUNIU0NSRUVOX1NUMTIzMgorCXRyaXN0YXRlICJTaXRyb25peCBTVDEyMzIgdG91Y2hzY3JlZW4gY29udHJvbGxlcnMiCisJZGVwZW5kcyBvbiBJMkMKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHN1cHBvcnQgU2l0cm9uaXggU1QxMjMyCisJICB0b3VjaHNjcmVlbiBjb250cm9sbGVyLgorCisJICBJZiB1bnN1cmUsIHNheSBOLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzdDEyMzJfdHMuCisKK2NvbmZpZyBUT1VDSFNDUkVFTl9TVE1QRQorCXRyaXN0YXRlICJTVE1pY3JvZWxlY3Ryb25pY3MgU1RNUEUgdG91Y2hzY3JlZW5zIgorCWRlcGVuZHMgb24gTUZEX1NUTVBFCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciBTVE1pY3JvZWxlY3Ryb25pY3MKKwkgIFNUTVBFIHRvdWNoc2NyZWVuIGNvbnRyb2xsZXJzLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzdG1wZS10cy4KKwogY29uZmlnIFRPVUNIU0NSRUVOX1RQUzY1MDdYCiAJdHJpc3RhdGUgIlRQUzY1MDd4IGJhc2VkIHRvdWNoc2NyZWVucyIKIAlkZXBlbmRzIG9uIEkyQwpAQCAtNjcxLDE0ICs2OTMsNCBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdHBzNjUwN3hfdHMuCiAKLWNvbmZpZyBUT1VDSFNDUkVFTl9TVE1QRQotCXRyaXN0YXRlICJTVE1pY3JvZWxlY3Ryb25pY3MgU1RNUEUgdG91Y2hzY3JlZW5zIgotCWRlcGVuZHMgb24gTUZEX1NUTVBFCi0JaGVscAotCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciBTVE1pY3JvZWxlY3Ryb25pY3MKLQkgIFNUTVBFIHRvdWNoc2NyZWVuIGNvbnRyb2xsZXJzLgotCi0JICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzdG1wZS10cy4KLQogZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vTWFrZWZpbGUgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL01ha2VmaWxlCmluZGV4IDdjYzFiNGYuLjcxOGJjYzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9NYWtlZmlsZQpAQCAtMzksNiArMzksNyBAQAogb2JqLSQoQ09ORklHX1RPVUNIU0NSRUVOX1BFTk1PVU5UKQkrPSBwZW5tb3VudC5vCiBvYmotJChDT05GSUdfVE9VQ0hTQ1JFRU5fUVQ2MDIyNDApCSs9IHF0NjAyMjQwX3RzLm8KIG9iai0kKENPTkZJR19UT1VDSFNDUkVFTl9TM0MyNDEwKQkrPSBzM2MyNDEwX3RzLm8KK29iai0kKENPTkZJR19UT1VDSFNDUkVFTl9TVDEyMzIpCSs9IHN0MTIzMi5vCiBvYmotJChDT05GSUdfVE9VQ0hTQ1JFRU5fU1RNUEUpCQkrPSBzdG1wZS10cy5vCiBvYmotJChDT05GSUdfVE9VQ0hTQ1JFRU5fVE5FVFYxMDdYKQkrPSB0bmV0djEwN3gtdHMubwogb2JqLSQoQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNISVQyMTMpCSs9IHRvdWNoaXQyMTMubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9idTIxMDEzX3RzLmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2J1MjEwMTNfdHMuYwppbmRleCAyY2E5ZTVkLi5mN2ZhOWVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2J1MjEwMTNfdHMuYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2J1MjEwMTNfdHMuYwpAQCAtMzY1LDcgKzM2NSw3IEBACiAJfQogCiAJcmV0dmFsID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShpMmMsIEJVMjEwMTNfVEhfT0ZGX1JFRywKLQkJCQlCVTIxMDEzX1RIX09GRl80IHx8IEJVMjEwMTNfVEhfT0ZGXzMpOworCQkJCUJVMjEwMTNfVEhfT0ZGXzQgfCBCVTIxMDEzX1RIX09GRl8zKTsKIAlpZiAocmV0dmFsIDwgMCkgewogCQlkZXZfZXJyKCZpMmMtPmRldiwgIkJVMjEwMTNfVEhfT0ZGIHJlZyB3cml0ZSBmYWlsZWRcbiIpOwogCQlyZXR1cm4gcmV0dmFsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9xdDYwMjI0MF90cy5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9xdDYwMjI0MF90cy5jCmluZGV4IDY2YjI2YWQuLjRkY2IwZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vcXQ2MDIyNDBfdHMuYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3F0NjAyMjQwX3RzLmMKQEAgLTk2OSw3ICs5NjksNyBAQAogCQlyZXR1cm4gZXJyb3I7CiAKIAlkYXRhLT5vYmplY3RfdGFibGUgPSBrY2FsbG9jKGluZm8tPm9iamVjdF9udW0sCi0JCQkJICAgICBzaXplb2Yoc3RydWN0IHF0NjAyMjQwX2RhdGEpLAorCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBxdDYwMjI0MF9vYmplY3QpLAogCQkJCSAgICAgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkYXRhLT5vYmplY3RfdGFibGUpIHsKIAkJZGV2X2VycigmY2xpZW50LT5kZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5XG4iKTsKQEAgLTEzMjQsOCArMTMyNCw5IEBACiB9CiAKICNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyBpbnQgcXQ2MDIyNDBfc3VzcGVuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBwbV9tZXNzYWdlX3QgbWVzZykKK3N0YXRpYyBpbnQgcXQ2MDIyNDBfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKIAlzdHJ1Y3QgcXQ2MDIyNDBfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldiA9IGRhdGEtPmlucHV0X2RldjsKIApAQCAtMTMzOSw4ICsxMzQwLDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBxdDYwMjI0MF9yZXN1bWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3N0YXRpYyBpbnQgcXQ2MDIyNDBfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwogCXN0cnVjdCBxdDYwMjI0MF9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2ID0gZGF0YS0+aW5wdXRfZGV2OwogCkBAIC0xMzU5LDkgKzEzNjEsMTEgQEAKIAogCXJldHVybiAwOwogfQotI2Vsc2UKLSNkZWZpbmUgcXQ2MDIyNDBfc3VzcGVuZAlOVUxMCi0jZGVmaW5lIHF0NjAyMjQwX3Jlc3VtZQkJTlVMTAorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgcXQ2MDIyNDBfcG1fb3BzID0geworCS5zdXNwZW5kCT0gcXQ2MDIyNDBfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHF0NjAyMjQwX3Jlc3VtZSwKK307CiAjZW5kaWYKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHF0NjAyMjQwX2lkW10gPSB7CkBAIC0xMzc0LDExICsxMzc4LDEyIEBACiAJLmRyaXZlciA9IHsKIAkJLm5hbWUJPSAicXQ2MDIyNDBfdHMiLAogCQkub3duZXIJPSBUSElTX01PRFVMRSwKKyNpZmRlZiBDT05GSUdfUE0KKwkJLnBtCT0gJnF0NjAyMjQwX3BtX29wcywKKyNlbmRpZgogCX0sCiAJLnByb2JlCQk9IHF0NjAyMjQwX3Byb2JlLAogCS5yZW1vdmUJCT0gX19kZXZleGl0X3AocXQ2MDIyNDBfcmVtb3ZlKSwKLQkuc3VzcGVuZAk9IHF0NjAyMjQwX3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBxdDYwMjI0MF9yZXN1bWUsCiAJLmlkX3RhYmxlCT0gcXQ2MDIyNDBfaWQsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3N0MTIzMi5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9zdDEyMzIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWIzNzEzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9zdDEyMzIuYwpAQCAtMCwwICsxLDI3NCBAQAorLyoKKyAqIFNUMTIzMiBUb3VjaHNjcmVlbiBDb250cm9sbGVyIERyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBSZW5lc2FzIFNvbHV0aW9ucyBDb3JwLgorICoJVG9ueSBTSU0gPGNoaW55ZW93LnNpbS54dEByZW5lc2FzLmNvbT4KKyAqCisgKiBVc2luZyBjb2RlIGZyb206CisgKiAgLSBhbmRyb2lkLmdpdC5rZXJuZWwub3JnOiBwcm9qZWN0cy9rZXJuZWwvY29tbW9uLmdpdDogc3luYXB0aWNzX2kyY19ybWkuYworICoJQ29weXJpZ2h0IChDKSAyMDA3IEdvb2dsZSwgSW5jLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2RlZmluZSBTVDEyMzJfVFNfTkFNRQkic3QxMjMyLXRzIgorCisjZGVmaW5lIE1JTl9YCQkweDAwCisjZGVmaW5lIE1JTl9ZCQkweDAwCisjZGVmaW5lIE1BWF9YCQkweDMxZgkvKiAoODAwIC0gMSkgKi8KKyNkZWZpbmUgTUFYX1kJCTB4MWRmCS8qICg0ODAgLSAxKSAqLworI2RlZmluZSBNQVhfQVJFQQkweGZmCisjZGVmaW5lIE1BWF9GSU5HRVJTCTIKKworc3RydWN0IHN0MTIzMl90c19maW5nZXIgeworCXUxNiB4OworCXUxNiB5OworCXU4IHQ7CisJYm9vbCBpc192YWxpZDsKK307CisKK3N0cnVjdCBzdDEyMzJfdHNfZGF0YSB7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7CisJc3RydWN0IHN0MTIzMl90c19maW5nZXIgZmluZ2VyW01BWF9GSU5HRVJTXTsKK307CisKK3N0YXRpYyBpbnQgc3QxMjMyX3RzX3JlYWRfZGF0YShzdHJ1Y3Qgc3QxMjMyX3RzX2RhdGEgKnRzKQoreworCXN0cnVjdCBzdDEyMzJfdHNfZmluZ2VyICpmaW5nZXIgPSB0cy0+ZmluZ2VyOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0cy0+Y2xpZW50OworCXN0cnVjdCBpMmNfbXNnIG1zZ1syXTsKKwlpbnQgZXJyb3I7CisJdTggc3RhcnRfcmVnOworCXU4IGJ1ZlsxMF07CisKKwkvKiByZWFkIHRvdWNoc2NyZWVuIGRhdGEgZnJvbSBTVDEyMzIgKi8KKwltc2dbMF0uYWRkciA9IGNsaWVudC0+YWRkcjsKKwltc2dbMF0uZmxhZ3MgPSAwOworCW1zZ1swXS5sZW4gPSAxOworCW1zZ1swXS5idWYgPSAmc3RhcnRfcmVnOworCXN0YXJ0X3JlZyA9IDB4MTA7CisKKwltc2dbMV0uYWRkciA9IHRzLT5jbGllbnQtPmFkZHI7CisJbXNnWzFdLmZsYWdzID0gSTJDX01fUkQ7CisJbXNnWzFdLmxlbiA9IHNpemVvZihidWYpOworCW1zZ1sxXS5idWYgPSBidWY7CisKKwllcnJvciA9IGkyY190cmFuc2ZlcihjbGllbnQtPmFkYXB0ZXIsIG1zZywgMik7CisJaWYgKGVycm9yIDwgMCkKKwkJcmV0dXJuIGVycm9yOworCisJLyogZ2V0ICJ2YWxpZCIgYml0cyAqLworCWZpbmdlclswXS5pc192YWxpZCA9IGJ1ZlsyXSA+PiA3OworCWZpbmdlclsxXS5pc192YWxpZCA9IGJ1Zls1XSA+PiA3OworCisJLyogZ2V0IHh5IGNvb3JkaW5hdGUgKi8KKwlpZiAoZmluZ2VyWzBdLmlzX3ZhbGlkKSB7CisJCWZpbmdlclswXS54ID0gKChidWZbMl0gJiAweDAwNzApIDw8IDQpIHwgYnVmWzNdOworCQlmaW5nZXJbMF0ueSA9ICgoYnVmWzJdICYgMHgwMDA3KSA8PCA4KSB8IGJ1Zls0XTsKKwkJZmluZ2VyWzBdLnQgPSBidWZbOF07CisJfQorCisJaWYgKGZpbmdlclsxXS5pc192YWxpZCkgeworCQlmaW5nZXJbMV0ueCA9ICgoYnVmWzVdICYgMHgwMDcwKSA8PCA0KSB8IGJ1Zls2XTsKKwkJZmluZ2VyWzFdLnkgPSAoKGJ1Zls1XSAmIDB4MDAwNykgPDwgOCkgfCBidWZbN107CisJCWZpbmdlclsxXS50ID0gYnVmWzldOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3Qgc3QxMjMyX3RzX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3Qgc3QxMjMyX3RzX2RhdGEgKnRzID0gZGV2X2lkOworCXN0cnVjdCBzdDEyMzJfdHNfZmluZ2VyICpmaW5nZXIgPSB0cy0+ZmluZ2VyOworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldiA9IHRzLT5pbnB1dF9kZXY7CisJaW50IGNvdW50ID0gMDsKKwlpbnQgaSwgcmV0OworCisJcmV0ID0gc3QxMjMyX3RzX3JlYWRfZGF0YSh0cyk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZW5kOworCisJLyogbXVsdGkgdG91Y2ggcHJvdG9jb2wgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0ZJTkdFUlM7IGkrKykgeworCQlpZiAoIWZpbmdlcltpXS5pc192YWxpZCkKKwkJCWNvbnRpbnVlOworCisJCWlucHV0X3JlcG9ydF9hYnMoaW5wdXRfZGV2LCBBQlNfTVRfVE9VQ0hfTUFKT1IsIGZpbmdlcltpXS50KTsKKwkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dF9kZXYsIEFCU19NVF9QT1NJVElPTl9YLCBmaW5nZXJbaV0ueCk7CisJCWlucHV0X3JlcG9ydF9hYnMoaW5wdXRfZGV2LCBBQlNfTVRfUE9TSVRJT05fWSwgZmluZ2VyW2ldLnkpOworCQlpbnB1dF9tdF9zeW5jKGlucHV0X2Rldik7CisJCWNvdW50Kys7CisJfQorCisJLyogU1lOX01UX1JFUE9SVCBvbmx5IGlmIG5vIGNvbnRhY3QgKi8KKwlpZiAoIWNvdW50KQorCQlpbnB1dF9tdF9zeW5jKGlucHV0X2Rldik7CisKKwkvKiBTWU5fUkVQT1JUICovCisJaW5wdXRfc3luYyhpbnB1dF9kZXYpOworCitlbmQ6CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzdDEyMzJfdHNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCQkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBzdDEyMzJfdHNfZGF0YSAqdHM7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OworCWludCBlcnJvcjsKKworCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLCBJMkNfRlVOQ19JMkMpKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAibmVlZCBJMkNfRlVOQ19JMkNcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlpZiAoIWNsaWVudC0+aXJxKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAibm8gSVJRP1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCisJdHMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc3QxMjMyX3RzX2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpbnB1dF9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKKwlpZiAoIXRzIHx8ICFpbnB1dF9kZXYpIHsKKwkJZXJyb3IgPSAtRU5PTUVNOworCQlnb3RvIGVycl9mcmVlX21lbTsKKwl9CisKKwl0cy0+Y2xpZW50ID0gY2xpZW50OworCXRzLT5pbnB1dF9kZXYgPSBpbnB1dF9kZXY7CisKKwlpbnB1dF9kZXYtPm5hbWUgPSAic3QxMjMyLXRvdWNoc2NyZWVuIjsKKwlpbnB1dF9kZXYtPmlkLmJ1c3R5cGUgPSBCVVNfSTJDOworCWlucHV0X2Rldi0+ZGV2LnBhcmVudCA9ICZjbGllbnQtPmRldjsKKworCV9fc2V0X2JpdChFVl9TWU4sIGlucHV0X2Rldi0+ZXZiaXQpOworCV9fc2V0X2JpdChFVl9LRVksIGlucHV0X2Rldi0+ZXZiaXQpOworCV9fc2V0X2JpdChFVl9BQlMsIGlucHV0X2Rldi0+ZXZiaXQpOworCisJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfTVRfVE9VQ0hfTUFKT1IsIDAsIE1BWF9BUkVBLCAwLCAwKTsKKwlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19NVF9QT1NJVElPTl9YLCBNSU5fWCwgTUFYX1gsIDAsIDApOworCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX01UX1BPU0lUSU9OX1ksIE1JTl9ZLCBNQVhfWSwgMCwgMCk7CisKKwllcnJvciA9IHJlcXVlc3RfdGhyZWFkZWRfaXJxKGNsaWVudC0+aXJxLCBOVUxMLCBzdDEyMzJfdHNfaXJxX2hhbmRsZXIsCisJCQkJICAgICBJUlFGX09ORVNIT1QsIGNsaWVudC0+bmFtZSwgdHMpOworCWlmIChlcnJvcikgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBpbnRlcnJ1cHRcbiIpOworCQlnb3RvIGVycl9mcmVlX21lbTsKKwl9CisKKwllcnJvciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZSh0cy0+aW5wdXRfZGV2KTsKKwlpZiAoZXJyb3IpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJVbmFibGUgdG8gcmVnaXN0ZXIgJXMgaW5wdXQgZGV2aWNlXG4iLAorCQkJaW5wdXRfZGV2LT5uYW1lKTsKKwkJZ290byBlcnJfZnJlZV9pcnE7CisJfQorCisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgdHMpOworCWRldmljZV9pbml0X3dha2V1cCgmY2xpZW50LT5kZXYsIDEpOworCisJcmV0dXJuIDA7CisKK2Vycl9mcmVlX2lycToKKwlmcmVlX2lycShjbGllbnQtPmlycSwgdHMpOworZXJyX2ZyZWVfbWVtOgorCWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0X2Rldik7CisJa2ZyZWUodHMpOworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgc3QxMjMyX3RzX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBzdDEyMzJfdHNfZGF0YSAqdHMgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCWRldmljZV9pbml0X3dha2V1cCgmY2xpZW50LT5kZXYsIDApOworCWZyZWVfaXJxKGNsaWVudC0+aXJxLCB0cyk7CisJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UodHMtPmlucHV0X2Rldik7CisJa2ZyZWUodHMpOworCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgc3QxMjMyX3RzX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CisKKwlpZiAoZGV2aWNlX21heV93YWtldXAoJmNsaWVudC0+ZGV2KSkKKwkJZW5hYmxlX2lycV93YWtlKGNsaWVudC0+aXJxKTsKKwllbHNlCisJCWRpc2FibGVfaXJxKGNsaWVudC0+aXJxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0MTIzMl90c19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CisKKwlpZiAoZGV2aWNlX21heV93YWtldXAoJmNsaWVudC0+ZGV2KSkKKwkJZGlzYWJsZV9pcnFfd2FrZShjbGllbnQtPmlycSk7CisJZWxzZQorCQllbmFibGVfaXJxKGNsaWVudC0+aXJxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgc3QxMjMyX3RzX3BtX29wcyA9IHsKKwkuc3VzcGVuZAk9IHN0MTIzMl90c19zdXNwZW5kLAorCS5yZXN1bWUJCT0gc3QxMjMyX3RzX3Jlc3VtZSwKK307CisjZW5kaWYKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHN0MTIzMl90c19pZFtdID0geworCXsgU1QxMjMyX1RTX05BTUUsIDAgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgc3QxMjMyX3RzX2lkKTsKKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHN0MTIzMl90c19kcml2ZXIgPSB7CisJLnByb2JlCQk9IHN0MTIzMl90c19wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHN0MTIzMl90c19yZW1vdmUpLAorCS5pZF90YWJsZQk9IHN0MTIzMl90c19pZCwKKwkuZHJpdmVyID0geworCQkubmFtZQk9IFNUMTIzMl9UU19OQU1FLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKyNpZmRlZiBDT05GSUdfUE0KKwkJLnBtCT0gJnN0MTIzMl90c19wbV9vcHMsCisjZW5kaWYKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgc3QxMjMyX3RzX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJnN0MTIzMl90c19kcml2ZXIpOworfQorbW9kdWxlX2luaXQoc3QxMjMyX3RzX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgc3QxMjMyX3RzX2V4aXQodm9pZCkKK3sKKwlpMmNfZGVsX2RyaXZlcigmc3QxMjMyX3RzX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChzdDEyMzJfdHNfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIlRvbnkgU0lNIDxjaGlueWVvdy5zaW0ueHRAcmVuZXNhcy5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlNJVFJPTklYIFNUMTIzMiBUb3VjaHNjcmVlbiBDb250cm9sbGVyIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi93YWNvbV93ODAwMS5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi93YWNvbV93ODAwMS5jCmluZGV4IDlhZTRjN2IuLjhlZDUzYWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vd2Fjb21fdzgwMDEuYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3dhY29tX3c4MDAxLmMKQEAgLTE1LDEwICsxNSwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0L210Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogCiAjZGVmaW5lIERSSVZFUl9ERVNDCSJXYWNvbSBXODAwMSBzZXJpYWwgdG91Y2hzY3JlZW4gZHJpdmVyIgogCkBAIC0zNyw2ICszOCw3IEBACiAKICNkZWZpbmUgVzgwMDFfUVVFUllfUEFDS0VUCTB4MjAKIAorI2RlZmluZSBXODAwMV9DTURfU1RPUAkJJzAnCiAjZGVmaW5lIFc4MDAxX0NNRF9TVEFSVAkJJzEnCiAjZGVmaW5lIFc4MDAxX0NNRF9RVUVSWQkJJyonCiAjZGVmaW5lIFc4MDAxX0NNRF9UT1VDSFFVRVJZCSclJwpAQCAtNDgsOCArNTAsNiBAQAogI2RlZmluZSBXODAwMV9QS1RMRU5fVFBDQ1RMCTExCS8qIGNvbnRyb2wgcGFja2V0ICovCiAjZGVmaW5lIFc4MDAxX1BLVExFTl9UT1VDSDJGRwkxMwogCi0jZGVmaW5lIE1BWF9UUkFDS0lOR19JRAkJMHhGRgkvKiBhcmJpdHJhcmlseSBjaG9zZW4gKi8KLQogc3RydWN0IHc4MDAxX2Nvb3JkIHsKIAl1OCByZHk7CiAJdTggdHN3OwpAQCAtODcsNyArODcsNiBAQAogCWNoYXIgcGh5c1szMl07CiAJaW50IHR5cGU7CiAJdW5zaWduZWQgaW50IHBrdGxlbjsKLQlpbnQgdHJraWRbMl07CiB9OwogCiBzdGF0aWMgdm9pZCBwYXJzZV9kYXRhKHU4ICpkYXRhLCBzdHJ1Y3QgdzgwMDFfY29vcmQgKmNvb3JkKQpAQCAtMTE2LDI4ICsxMTUsMjMgQEAKIAogc3RhdGljIHZvaWQgcGFyc2VfdG91Y2goc3RydWN0IHc4MDAxICp3ODAwMSkKIHsKLQlzdGF0aWMgaW50IHRya2lkOwogCXN0cnVjdCBpbnB1dF9kZXYgKmRldiA9IHc4MDAxLT5kZXY7CiAJdW5zaWduZWQgY2hhciAqZGF0YSA9IHc4MDAxLT5kYXRhOwogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgewotCQlpbnB1dF9tdF9zbG90KGRldiwgaSk7CisJCWJvb2wgdG91Y2ggPSBkYXRhWzBdICYgKDEgPDwgaSk7CiAKLQkJaWYgKGRhdGFbMF0gJiAoMSA8PCBpKSkgeworCQlpbnB1dF9tdF9zbG90KGRldiwgaSk7CisJCWlucHV0X210X3JlcG9ydF9zbG90X3N0YXRlKGRldiwgTVRfVE9PTF9GSU5HRVIsIHRvdWNoKTsKKwkJaWYgKHRvdWNoKSB7CiAJCQlpbnQgeCA9IChkYXRhWzYgKiBpICsgMV0gPDwgNykgfCAoZGF0YVs2ICogaSArIDJdKTsKIAkJCWludCB5ID0gKGRhdGFbNiAqIGkgKyAzXSA8PCA3KSB8IChkYXRhWzYgKiBpICsgNF0pOwogCQkJLyogZGF0YVs1LDZdIGFuZCBbMTEsMTJdIGlzIGZpbmdlciBjYXBhY2l0eSAqLwogCiAJCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX01UX1BPU0lUSU9OX1gsIHgpOwogCQkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19NVF9QT1NJVElPTl9ZLCB5KTsKLQkJCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfTVRfVE9PTF9UWVBFLCBNVF9UT09MX0ZJTkdFUik7Ci0JCQlpZiAodzgwMDEtPnRya2lkW2ldIDwgMCkKLQkJCQl3ODAwMS0+dHJraWRbaV0gPSB0cmtpZCsrICYgTUFYX1RSQUNLSU5HX0lEOwotCQl9IGVsc2UgewotCQkJdzgwMDEtPnRya2lkW2ldID0gLTE7CiAJCX0KLQkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19NVF9UUkFDS0lOR19JRCwgdzgwMDEtPnRya2lkW2ldKTsKIAl9CiAKIAlpbnB1dF9zeW5jKGRldik7CkBAIC0yODcsMjQgKzI4MSw0NiBAQAogCXN0cnVjdCB3ODAwMV9jb29yZCBjb29yZDsKIAlpbnQgZXJyb3I7CiAKLQllcnJvciA9IHc4MDAxX2NvbW1hbmQodzgwMDEsIFc4MDAxX0NNRF9RVUVSWSwgdHJ1ZSk7CisJZXJyb3IgPSB3ODAwMV9jb21tYW5kKHc4MDAxLCBXODAwMV9DTURfU1RPUCwgZmFsc2UpOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCi0JcGFyc2VfZGF0YSh3ODAwMS0+cmVzcG9uc2UsICZjb29yZCk7CisJbXNsZWVwKDI1MCk7CS8qIHdhaXQgMjUwbXMgYmVmb3JlIHF1ZXJ5aW5nIHRoZSBkZXZpY2UgKi8KIAotCWlucHV0X3NldF9hYnNfcGFyYW1zKGRldiwgQUJTX1gsIDAsIGNvb3JkLngsIDAsIDApOwotCWlucHV0X3NldF9hYnNfcGFyYW1zKGRldiwgQUJTX1ksIDAsIGNvb3JkLnksIDAsIDApOwotCWlucHV0X3NldF9hYnNfcGFyYW1zKGRldiwgQUJTX1BSRVNTVVJFLCAwLCBjb29yZC5wZW5fcHJlc3N1cmUsIDAsIDApOwotCWlucHV0X3NldF9hYnNfcGFyYW1zKGRldiwgQUJTX1RJTFRfWCwgMCwgY29vcmQudGlsdF94LCAwLCAwKTsKLQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhkZXYsIEFCU19USUxUX1ksIDAsIGNvb3JkLnRpbHRfeSwgMCwgMCk7Ci0KLQllcnJvciA9IHc4MDAxX2NvbW1hbmQodzgwMDEsIFc4MDAxX0NNRF9UT1VDSFFVRVJZLCB0cnVlKTsKKwkvKiBwZW5hYmxlZD8gKi8KKwllcnJvciA9IHc4MDAxX2NvbW1hbmQodzgwMDEsIFc4MDAxX0NNRF9RVUVSWSwgdHJ1ZSk7CiAJaWYgKCFlcnJvcikgeworCQlfX3NldF9iaXQoQlROX1RPT0xfUEVOLCBkZXYtPmtleWJpdCk7CisJCV9fc2V0X2JpdChCVE5fVE9PTF9SVUJCRVIsIGRldi0+a2V5Yml0KTsKKwkJX19zZXRfYml0KEJUTl9TVFlMVVMsIGRldi0+a2V5Yml0KTsKKwkJX19zZXRfYml0KEJUTl9TVFlMVVMyLCBkZXYtPmtleWJpdCk7CisJCXBhcnNlX2RhdGEodzgwMDEtPnJlc3BvbnNlLCAmY29vcmQpOworCisJCWlucHV0X3NldF9hYnNfcGFyYW1zKGRldiwgQUJTX1gsIDAsIGNvb3JkLngsIDAsIDApOworCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhkZXYsIEFCU19ZLCAwLCBjb29yZC55LCAwLCAwKTsKKwkJaW5wdXRfc2V0X2Fic19wYXJhbXMoZGV2LCBBQlNfUFJFU1NVUkUsIDAsIGNvb3JkLnBlbl9wcmVzc3VyZSwgMCwgMCk7CisJCWlmIChjb29yZC50aWx0X3ggJiYgY29vcmQudGlsdF95KSB7CisJCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhkZXYsIEFCU19USUxUX1gsIDAsIGNvb3JkLnRpbHRfeCwgMCwgMCk7CisJCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhkZXYsIEFCU19USUxUX1ksIDAsIGNvb3JkLnRpbHRfeSwgMCwgMCk7CisJCX0KKwl9CisKKwkvKiBUb3VjaCBlbmFibGVkPyAqLworCWVycm9yID0gdzgwMDFfY29tbWFuZCh3ODAwMSwgVzgwMDFfQ01EX1RPVUNIUVVFUlksIHRydWUpOworCisJLyoKKwkgKiBTb21lIG5vbi10b3VjaCBkZXZpY2VzIG1heSByZXBseSB0byB0aGUgdG91Y2ggcXVlcnkuIEJ1dCB0aGVpcgorCSAqIHNlY29uZCBieXRlIGlzIGVtcHR5LCB3aGljaCBpbmRpY2F0ZXMgdG91Y2ggaXMgbm90IHN1cHBvcnRlZC4KKwkgKi8KKwlpZiAoIWVycm9yICYmIHc4MDAxLT5yZXNwb25zZVsxXSkgewogCQlzdHJ1Y3QgdzgwMDFfdG91Y2hfcXVlcnkgdG91Y2g7CiAKIAkJcGFyc2VfdG91Y2hxdWVyeSh3ODAwMS0+cmVzcG9uc2UsICZ0b3VjaCk7CiAKKwkJaW5wdXRfc2V0X2Fic19wYXJhbXMoZGV2LCBBQlNfWCwgMCwgdG91Y2gueCwgMCwgMCk7CisJCWlucHV0X3NldF9hYnNfcGFyYW1zKGRldiwgQUJTX1ksIDAsIHRvdWNoLnksIDAsIDApOworCQlfX3NldF9iaXQoQlROX1RPT0xfRklOR0VSLCBkZXYtPmtleWJpdCk7CisKIAkJc3dpdGNoICh0b3VjaC5zZW5zb3JfaWQpIHsKIAkJY2FzZSAwOgogCQljYXNlIDI6CkBAIC0zMTgsMTUgKzMzNCwxMyBAQAogCQljYXNlIDU6CiAJCQl3ODAwMS0+cGt0bGVuID0gVzgwMDFfUEtUTEVOX1RPVUNIMkZHOwogCi0JCQlpbnB1dF9tdF9jcmVhdGVfc2xvdHMoZGV2LCAyKTsKLQkJCWlucHV0X3NldF9hYnNfcGFyYW1zKGRldiwgQUJTX01UX1RSQUNLSU5HX0lELAotCQkJCQkJMCwgTUFYX1RSQUNLSU5HX0lELCAwLCAwKTsKKwkJCWlucHV0X210X2luaXRfc2xvdHMoZGV2LCAyKTsKIAkJCWlucHV0X3NldF9hYnNfcGFyYW1zKGRldiwgQUJTX01UX1BPU0lUSU9OX1gsCiAJCQkJCQkwLCB0b3VjaC54LCAwLCAwKTsKIAkJCWlucHV0X3NldF9hYnNfcGFyYW1zKGRldiwgQUJTX01UX1BPU0lUSU9OX1ksCiAJCQkJCQkwLCB0b3VjaC55LCAwLCAwKTsKIAkJCWlucHV0X3NldF9hYnNfcGFyYW1zKGRldiwgQUJTX01UX1RPT0xfVFlQRSwKLQkJCQkJCTAsIDAsIDAsIDApOworCQkJCQkJMCwgTVRfVE9PTF9NQVgsIDAsIDApOwogCQkJYnJlYWs7CiAJCX0KIAl9CkBAIC0zNzIsNyArMzg2LDYgQEAKIAl3ODAwMS0+c2VyaW8gPSBzZXJpbzsKIAl3ODAwMS0+aWQgPSBzZXJpby0+aWQuaWQ7CiAJdzgwMDEtPmRldiA9IGlucHV0X2RldjsKLQl3ODAwMS0+dHJraWRbMF0gPSB3ODAwMS0+dHJraWRbMV0gPSAtMTsKIAlpbml0X2NvbXBsZXRpb24oJnc4MDAxLT5jbWRfZG9uZSk7CiAJc25wcmludGYodzgwMDEtPnBoeXMsIHNpemVvZih3ODAwMS0+cGh5cyksICIlcy9pbnB1dDAiLCBzZXJpby0+cGh5cyk7CiAKQEAgLTM4NSwxMSArMzk4LDcgQEAKIAlpbnB1dF9kZXYtPmRldi5wYXJlbnQgPSAmc2VyaW8tPmRldjsKIAogCWlucHV0X2Rldi0+ZXZiaXRbMF0gPSBCSVRfTUFTSyhFVl9LRVkpIHwgQklUX01BU0soRVZfQUJTKTsKLQlpbnB1dF9kZXYtPmtleWJpdFtCSVRfV09SRChCVE5fVE9VQ0gpXSA9IEJJVF9NQVNLKEJUTl9UT1VDSCk7Ci0JaW5wdXRfZGV2LT5rZXliaXRbQklUX1dPUkQoQlROX1RPT0xfUEVOKV0gfD0gQklUX01BU0soQlROX1RPT0xfUEVOKTsKLQlpbnB1dF9kZXYtPmtleWJpdFtCSVRfV09SRChCVE5fVE9PTF9SVUJCRVIpXSB8PSBCSVRfTUFTSyhCVE5fVE9PTF9SVUJCRVIpOwotCWlucHV0X2Rldi0+a2V5Yml0W0JJVF9XT1JEKEJUTl9TVFlMVVMpXSB8PSBCSVRfTUFTSyhCVE5fU1RZTFVTKTsKLQlpbnB1dF9kZXYtPmtleWJpdFtCSVRfV09SRChCVE5fU1RZTFVTMildIHw9IEJJVF9NQVNLKEJUTl9TVFlMVVMyKTsKKwlfX3NldF9iaXQoQlROX1RPVUNILCBpbnB1dF9kZXYtPmtleWJpdCk7CiAKIAlzZXJpb19zZXRfZHJ2ZGF0YShzZXJpbywgdzgwMDEpOwogCWVyciA9IHNlcmlvX29wZW4oc2VyaW8sIGRydik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3hlbi1rYmRmcm9udC5jIGIvZHJpdmVycy9pbnB1dC94ZW4ta2JkZnJvbnQuYwppbmRleCBlMGMwMjRkLi43Zjg1YTg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3hlbi1rYmRmcm9udC5jCisrKyBiL2RyaXZlcnMvaW5wdXQveGVuLWtiZGZyb250LmMKQEAgLTE3LDYgKzE3LDggQEAKICAqIFN3aXRjaCB0byBncmFudCB0YWJsZXMgdG9nZXRoZXIgd2l0aCB4ZW4tZmJmcm9udC5jLgogICovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC04NCw5ICs4Niw4IEBACiAJCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIGV2ZW50LT5rZXkua2V5Y29kZSwKIAkJCQkJCSBldmVudC0+a2V5LnByZXNzZWQpOwogCQkJZWxzZQotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCQkgICAgICAgInhlbmtiZDogdW5oYW5kbGVkIGtleWNvZGUgMHgleFxuIiwKLQkJCQkgICAgICAgZXZlbnQtPmtleS5rZXljb2RlKTsKKwkJCQlwcl93YXJuaW5nKCJ1bmhhbmRsZWQga2V5Y29kZSAweCV4XG4iLAorCQkJCQkgICBldmVudC0+a2V5LmtleWNvZGUpOwogCQkJYnJlYWs7CiAJCWNhc2UgWEVOS0JEX1RZUEVfUE9TOgogCQkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19YLCBldmVudC0+cG9zLmFic194KTsKQEAgLTI5Miw4ICsyOTMsNyBAQAogCQkJcmV0ID0geGVuYnVzX3ByaW50ZihYQlRfTklMLCBpbmZvLT54YmRldi0+bm9kZW5hbWUsCiAJCQkJCSAgICAicmVxdWVzdC1hYnMtcG9pbnRlciIsICIxIik7CiAJCQlpZiAocmV0KQotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCQkgICAgICAgInhlbmtiZDogY2FuJ3QgcmVxdWVzdCBhYnMtcG9pbnRlciIpOworCQkJCXByX3dhcm5pbmcoImNhbid0IHJlcXVlc3QgYWJzLXBvaW50ZXJcbiIpOwogCQl9CiAJCXhlbmJ1c19zd2l0Y2hfc3RhdGUoZGV2LCBYZW5idXNTdGF0ZUNvbm5lY3RlZCk7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2NhcGkvY2FwaWRydi5jIGIvZHJpdmVycy9pc2RuL2NhcGkvY2FwaWRydi5jCmluZGV4IGU1NGU3OWQuLjkyNjA3ZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9jYXBpL2NhcGlkcnYuYworKysgYi9kcml2ZXJzL2lzZG4vY2FwaS9jYXBpZHJ2LmMKQEAgLTIyOTcsNiArMjI5Nyw3IEBACiAKIAllcnJjb2RlID0gY2FwaTIwX2dldF9wcm9maWxlKDAsICZwcm9maWxlKTsKIAlpZiAoZXJyY29kZSAhPSBDQVBJX05PRVJST1IpIHsKKwkJdW5yZWdpc3Rlcl9jYXBpY3RyX25vdGlmaWVyKCZjYXBpY3RyX25iKTsKIAkJY2FwaTIwX3JlbGVhc2UoJmdsb2JhbC5hcCk7CiAJCXJldHVybiAtRUlPOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9jYXBpL2tjYXBpLmMgYi9kcml2ZXJzL2lzZG4vY2FwaS9rY2FwaS5jCmluZGV4IDNhY2Y5NGMuLjJiMzNiMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9jYXBpL2tjYXBpLmMKKysrIGIvZHJpdmVycy9pc2RuL2NhcGkva2NhcGkuYwpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+CiAKIHN0YXRpYyBpbnQgc2hvd2NhcGltc2dzID0gMDsKK3N0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqa2NhcGlfd3E7CiAKIE1PRFVMRV9ERVNDUklQVElPTigiQ0FQSTRMaW51eDoga2VybmVsIENBUEkgbGF5ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIkNhcnN0ZW4gUGFldGgiKTsKQEAgLTI5MSw3ICsyOTIsNyBAQAogCWV2ZW50LT50eXBlID0gZXZlbnRfdHlwZTsKIAlldmVudC0+Y29udHJvbGxlciA9IGNvbnRyb2xsZXI7CiAKLQlzY2hlZHVsZV93b3JrKCZldmVudC0+d29yayk7CisJcXVldWVfd29yayhrY2FwaV93cSwgJmV2ZW50LT53b3JrKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDA4LDcgKzQwOSw3IEBACiAJCWdvdG8gZXJyb3I7CiAJfQogCXNrYl9xdWV1ZV90YWlsKCZhcC0+cmVjdl9xdWV1ZSwgc2tiKTsKLQlzY2hlZHVsZV93b3JrKCZhcC0+cmVjdl93b3JrKTsKKwlxdWV1ZV93b3JrKGtjYXBpX3dxLCAmYXAtPnJlY3Zfd29yayk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlyZXR1cm47CkBAIC03NDMsNyArNzQ0LDcgQEAKIAogCW11dGV4X3VubG9jaygmY2FwaV9jb250cm9sbGVyX2xvY2spOwogCi0JZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwlmbHVzaF93b3JrcXVldWUoa2NhcGlfd3EpOwogCXNrYl9xdWV1ZV9wdXJnZSgmYXAtPnJlY3ZfcXVldWUpOwogCiAJaWYgKHNob3djYXBpbXNncyAmIDEpIHsKQEAgLTEyODUsMjEgKzEyODYsMzAgQEAKIHsKIAlpbnQgZXJyOwogCisJa2NhcGlfd3EgPSBhbGxvY193b3JrcXVldWUoImtjYXBpIiwgMCwgMCk7CisJaWYgKCFrY2FwaV93cSkKKwkJcmV0dXJuIC1FTk9NRU07CisKIAlyZWdpc3Rlcl9jYXBpY3RyX25vdGlmaWVyKCZjYXBpY3RyX25iKTsKIAogCWVyciA9IGNkZWJ1Z19pbml0KCk7Ci0JaWYgKCFlcnIpCi0JCWtjYXBpX3Byb2NfaW5pdCgpOwotCXJldHVybiBlcnI7CisJaWYgKGVycikgeworCQl1bnJlZ2lzdGVyX2NhcGljdHJfbm90aWZpZXIoJmNhcGljdHJfbmIpOworCQlkZXN0cm95X3dvcmtxdWV1ZShrY2FwaV93cSk7CisJCXJldHVybiBlcnI7CisJfQorCisJa2NhcGlfcHJvY19pbml0KCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBrY2FwaV9leGl0KHZvaWQpCiB7CiAgICAgICAgIGtjYXBpX3Byb2NfZXhpdCgpOwogCi0JLyogbWFrZSBzdXJlIGFsbCBub3RpZmllcnMgYXJlIGZpbmlzaGVkICovCi0JZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwl1bnJlZ2lzdGVyX2NhcGljdHJfbm90aWZpZXIoJmNhcGljdHJfbmIpOwogCWNkZWJ1Z19leGl0KCk7CisJZGVzdHJveV93b3JrcXVldWUoa2NhcGlfd3EpOwogfQogCiBtb2R1bGVfaW5pdChrY2FwaV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9tSVNETmluZmluZW9uLmMgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vbUlTRE5pbmZpbmVvbi5jCmluZGV4IGU5MGRiODguLmJjMDUyOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9tSVNETmluZmluZW9uLmMKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL21JU0ROaW5maW5lb24uYwpAQCAtNDIwLDcgKzQyMCw3IEBACiAJCWJyZWFrOwogCWNhc2UgSU5GX05JQ0NZOgogCQl2YWwgPSBpbmwoKHUzMilody0+Y2ZnLnN0YXJ0ICsgTklDQ1lfSVJRX0NUUkxfUkVHKTsKLQkJdmFsIHw9IE5JQ0NZX0lSUV9FTkFCTEU7OworCQl2YWwgfD0gTklDQ1lfSVJRX0VOQUJMRTsKIAkJb3V0bCh2YWwsICh1MzIpaHctPmNmZy5zdGFydCArIE5JQ0NZX0lSUV9DVFJMX1JFRyk7CiAJCWJyZWFrOwogCWNhc2UgSU5GX1NDVF8xOgpAQCAtOTI0LDcgKzkyNCw3IEBACiAJCW1JU0ROaXBhY19pbml0KCZjYXJkLT5pcGFjLCBjYXJkKTsKIAogCWlmIChjYXJkLT5pcGFjLmlzYWMuZGNoLmRldi5CcHJvdG9jb2xzID09IDApCi0JCWdvdG8gZXJyb3Jfc2V0dXA7OworCQlnb3RvIGVycm9yX3NldHVwOwogCiAJZXJyID0gbUlTRE5fcmVnaXN0ZXJfZGV2aWNlKCZjYXJkLT5pcGFjLmlzYWMuZGNoLmRldiwKIAkJJmNhcmQtPnBkZXYtPmRldiwgY2FyZC0+bmFtZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vbUlTRE5pc2FyLmMgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vbUlTRE5pc2FyLmMKaW5kZXggMzhlYjMxNC4uZDEzZmE1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL21JU0ROaXNhci5jCisrKyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9tSVNETmlzYXIuYwpAQCAtMjY0LDcgKzI2NCw3IEBACiAJCQl3aGlsZSAobm9jKSB7CiAJCQkJdmFsID0gbGUxNl90b19jcHUoKnNwKyspOwogCQkJCSptcCsrID0gdmFsID4+IDg7Ci0JCQkJKm1wKysgPSB2YWwgJiAweEZGOzsKKwkJCQkqbXArKyA9IHZhbCAmIDB4RkY7CiAJCQkJbm9jLS07CiAJCQl9CiAJCQlzcGluX2xvY2tfaXJxc2F2ZShpc2FyLT5od2xvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9hdm1fcGNpLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvYXZtX3BjaS5jCmluZGV4IGZjZjRlZDEuLjBlNjZhZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9hdm1fcGNpLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2F2bV9wY2kuYwpAQCAtMzE0LDcgKzMxNCw3IEBACiAJCQliY3MtPmh3LmhkbGMuY3RybC5zci5jbWQgfD0gSERMQ19DTURfWE1FOwogCX0KIAlpZiAoKGNzLT5kZWJ1ZyAmIEwxX0RFQl9IU0NYKSAmJiAhKGNzLT5kZWJ1ZyAmIEwxX0RFQl9IU0NYX0ZJRk8pKQotCQlkZWJ1Z2wxKGNzLCAiaGRsY19maWxsX2ZpZm8gJWQvJWxkIiwgY291bnQsIGJjcy0+dHhfc2tiLT5sZW4pOworCQlkZWJ1Z2wxKGNzLCAiaGRsY19maWxsX2ZpZm8gJWQvJXUiLCBjb3VudCwgYmNzLT50eF9za2ItPmxlbik7CiAJcCA9IGJjcy0+dHhfc2tiLT5kYXRhOwogCXB0ciA9ICh1X2ludCAqKXA7CiAJc2tiX3B1bGwoYmNzLT50eF9za2IsIGNvdW50KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9jYWxsYy5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2NhbGxjLmMKaW5kZXggZjE1MDMzMC4uMzdlNjg1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2NhbGxjLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2NhbGxjLmMKQEAgLTY1LDcgKzY1LDcgQEAKIAlyZXR1cm4gKHN0cnVjdCBJc2RuQ2FyZFN0YXRlICopIDA7CiB9CiAKLXN0YXRpYyB2b2lkCitzdGF0aWMgX19hdHRyaWJ1dGVfXygoZm9ybWF0KHByaW50ZiwgMywgNCkpKSB2b2lkCiBsaW5rX2RlYnVnKHN0cnVjdCBDaGFubmVsICpjaGFucCwgaW50IGRpcmVjdGlvbiwgY2hhciAqZm10LCAuLi4pCiB7CiAJdmFfbGlzdCBhcmdzOwpAQCAtMTA2OCw3ICsxMDY4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQKK3N0YXRpYyBfX2F0dHJpYnV0ZV9fKChmb3JtYXQocHJpbnRmLCAyLCAzKSkpIHZvaWQKIGNhbGxjX2RlYnVnKHN0cnVjdCBGc21JbnN0ICpmaSwgY2hhciAqZm10LCAuLi4pCiB7CiAJdmFfbGlzdCBhcmdzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2NvbmZpZy5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2NvbmZpZy5jCmluZGV4IGIxMzMzNzguLmMxMTBmODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9jb25maWcuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvY29uZmlnLmMKQEAgLTE5MTcsNyArMTkxNyw3IEBACiAjaWZkZWYgQ09ORklHX1BDSQogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgaGlzYXhfcGNpX3RibFtdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgaGlzYXhfcGNpX3RibFtdIF9fZGV2aW5pdGRhdGEgX191c2VkID0gewogI2lmZGVmIENPTkZJR19ISVNBWF9GUklUWlBDSQogCXtQQ0lfVkRFVklDRShBVk0sICAgICAgUENJX0RFVklDRV9JRF9BVk1fQTEpCQkJfSwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2hmY18yYmRzMC5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2hmY18yYmRzMC5jCmluZGV4IDcyNTBmNTYuLmExNjQ1OWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfMmJkczAuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjXzJiZHMwLmMKQEAgLTI5Miw3ICsyOTIsNyBAQAogCX0KIAljb3VudCA9IEdldEZyZWVGaWZvQnl0ZXNfQihiY3MpOwogCWlmIChjcy0+ZGVidWcgJiBMMV9ERUJfSFNDWCkKLQkJZGVidWdsMShjcywgImhmY19maWxsX2ZpZm8gJWQgY291bnQoJWxkLyVkKSwlbHgiLAorCQlkZWJ1Z2wxKGNzLCAiaGZjX2ZpbGxfZmlmbyAlZCBjb3VudCgldS8lZCksJWx4IiwKIAkJCWJjcy0+Y2hhbm5lbCwgYmNzLT50eF9za2ItPmxlbiwKIAkJCWNvdW50LCBjdXJyZW50LT5zdGF0ZSk7CiAJaWYgKGNvdW50IDwgYmNzLT50eF9za2ItPmxlbikgewpAQCAtNzE5LDcgKzcxOSw3IEBACiAJfQogCWNvdW50ID0gR2V0RnJlZUZpZm9CeXRlc19EKGNzKTsKIAlpZiAoY3MtPmRlYnVnICYgTDFfREVCX0lTQUMpCi0JCWRlYnVnbDEoY3MsICJoZmNfZmlsbF9EZmlmbyBjb3VudCglbGQvJWQpIiwKKwkJZGVidWdsMShjcywgImhmY19maWxsX0RmaWZvIGNvdW50KCV1LyVkKSIsCiAJCQljcy0+dHhfc2tiLT5sZW4sIGNvdW50KTsKIAlpZiAoY291bnQgPCBjcy0+dHhfc2tiLT5sZW4pIHsKIAkJaWYgKGNzLT5kZWJ1ZyAmIEwxX0RFQl9JU0FDKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2hmY18yYnMwLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjXzJiczAuYwppbmRleCBiMWY2NDgxLi42MjZmODVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjXzJiczAuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjXzJiczAuYwpAQCAtMjgyLDcgKzI4Miw3IEBACiAJICAgIGNvdW50ICs9IGNzLT5ody5oZmMuZmlmb3NpemU7IAogCX0gLyogTDFfTU9ERV9UUkFOUyAqLwogCWlmIChjcy0+ZGVidWcgJiBMMV9ERUJfSFNDWCkKLQkJZGVidWdsMShjcywgImhmY19maWxsX2ZpZm8gJWQgY291bnQoJWxkLyVkKSIsCisJCWRlYnVnbDEoY3MsICJoZmNfZmlsbF9maWZvICVkIGNvdW50KCV1LyVkKSIsCiAJCQliY3MtPmNoYW5uZWwsIGJjcy0+dHhfc2tiLT5sZW4sCiAJCQljb3VudCk7CiAJaWYgKGNvdW50IDwgYmNzLT50eF9za2ItPmxlbikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2hmY19wY2kuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfcGNpLmMKaW5kZXggOTE3Y2M4NC4uMzE0NzAyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2hmY19wY2kuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjX3BjaS5jCkBAIC01NTAsNyArNTUwLDcgQEAKIAkJY291bnQgKz0gRF9GSUZPX1NJWkU7CS8qIGNvdW50IG5vdyBjb250YWlucyBhdmFpbGFibGUgYnl0ZXMgKi8KIAogCWlmIChjcy0+ZGVidWcgJiBMMV9ERUJfSVNBQykKLQkJZGVidWdsMShjcywgImhmY3BjaV9maWxsX0RmaWZvIGNvdW50KCVsZC8lZCkiLAorCQlkZWJ1Z2wxKGNzLCAiaGZjcGNpX2ZpbGxfRGZpZm8gY291bnQoJXUvJWQpIiwKIAkJCWNzLT50eF9za2ItPmxlbiwgY291bnQpOwogCWlmIChjb3VudCA8IGNzLT50eF9za2ItPmxlbikgewogCQlpZiAoY3MtPmRlYnVnICYgTDFfREVCX0lTQUMpCkBAIC02ODEsNyArNjgxLDcgQEAKIAkJY291bnQgKz0gQl9GSUZPX1NJWkU7CS8qIGNvdW50IG5vdyBjb250YWlucyBhdmFpbGFibGUgYnl0ZXMgKi8KIAogCWlmIChjcy0+ZGVidWcgJiBMMV9ERUJfSFNDWCkKLQkJZGVidWdsMShjcywgImhmY3BjaV9maWxsX2ZpZm8gJWQgY291bnQoJWxkLyVkKSwlbHgiLAorCQlkZWJ1Z2wxKGNzLCAiaGZjcGNpX2ZpbGxfZmlmbyAlZCBjb3VudCgldS8lZCksJWx4IiwKIAkJCWJjcy0+Y2hhbm5lbCwgYmNzLT50eF9za2ItPmxlbiwKIAkJCWNvdW50LCBjdXJyZW50LT5zdGF0ZSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfc3guYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfc3guYwppbmRleCA1YWExMzhlLi4xMjM1YjcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjX3N4LmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2hmY19zeC5jCkBAIC0xNzksNyArMTc5LDcgQEAKIAkgIGNvdW50ICs9IGZpZm9fc2l6ZTsJLyogY291bnQgbm93IGNvbnRhaW5zIGF2YWlsYWJsZSBieXRlcyAqLwogCiAJaWYgKGNzLT5kZWJ1ZyAmIEwxX0RFQl9JU0FDX0ZJRk8pCi0JICBkZWJ1Z2wxKGNzLCAiaGZjc3hfd3JpdGVfZmlmbyAlZCBjb3VudCglbGQvJWQpIiwKKwkgIGRlYnVnbDEoY3MsICJoZmNzeF93cml0ZV9maWZvICVkIGNvdW50KCV1LyVkKSIsCiAJCSAgZmlmbywgc2tiLT5sZW4sIGNvdW50KTsKIAlpZiAoY291bnQgPCBza2ItPmxlbikgewogCSAgaWYgKGNzLT5kZWJ1ZyAmIEwxX0RFQl9JU0FDX0ZJRk8pCkBAIC0yNjUsNyArMjY1LDcgQEAKIAkgIGNvdW50Kys7CiAKIAkgIGlmIChjcy0+ZGVidWcgJiBMMV9ERUJfSVNBQ19GSUZPKQotCSAgICBkZWJ1Z2wxKGNzLCAiaGZjc3hfcmVhZF9maWZvICVkIGNvdW50ICVsZCkiLAorCSAgICBkZWJ1Z2wxKGNzLCAiaGZjc3hfcmVhZF9maWZvICVkIGNvdW50ICV1KSIsCiAJCSAgICBmaWZvLCBjb3VudCk7CiAKIAkgIGlmICgoY291bnQgPiBmaWZvX3NpemUpIHx8IChjb3VudCA8IDQpKSB7CkBAIC05ODYsNyArOTg2LDcgQEAKIAkJCQlkZWZhdWx0OgogCQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+bG9jaywgZmxhZ3MpOwogCQkJCQlpZiAoY3MtPmRlYnVnICYgTDFfREVCX1dBUk4pCi0JCQkJCQlkZWJ1Z2wxKGNzLCAiaGZjc3hfbDFodyBsb29wIGludmFsaWQgJTRseCIsIGFyZyk7CisJCQkJCQlkZWJ1Z2wxKGNzLCAiaGZjc3hfbDFodyBsb29wIGludmFsaWQgJTRseCIsICh1bnNpZ25lZCBsb25nKWFyZyk7CiAJCQkJCXJldHVybjsKIAkJCX0KIAkJCWNzLT5ody5oZmNzeC50cm0gfD0gMHg4MDsJLyogZW5hYmxlIElPTS1sb29wICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvaGlzYXguaCBiL2RyaXZlcnMvaXNkbi9oaXNheC9oaXNheC5oCmluZGV4IDMyYWIzOTIuLmRlMWM2NjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9oaXNheC5oCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9oaXNheC5oCkBAIC0xMjg2LDcgKzEyODYsOSBAQAogCiBpbnQgSGlTYXhfY29tbWFuZChpc2RuX2N0cmwgKiBpYyk7CiBpbnQgSGlTYXhfd3JpdGVidWZfc2tiKGludCBpZCwgaW50IGNoYW4sIGludCBhY2ssIHN0cnVjdCBza19idWZmICpza2IpOworX19hdHRyaWJ1dGVfXygoZm9ybWF0KHByaW50ZiwgMywgNCkpKQogdm9pZCBIaVNheF9wdXRzdGF0dXMoc3RydWN0IElzZG5DYXJkU3RhdGUgKmNzLCBjaGFyICpoZWFkLCBjaGFyICpmbXQsIC4uLik7CitfX2F0dHJpYnV0ZV9fKChmb3JtYXQocHJpbnRmLCAzLCAwKSkpCiB2b2lkIFZIaVNheF9wdXRzdGF0dXMoc3RydWN0IElzZG5DYXJkU3RhdGUgKmNzLCBjaGFyICpoZWFkLCBjaGFyICpmbXQsIHZhX2xpc3QgYXJncyk7CiB2b2lkIEhpU2F4X3JlcG9ydGNhcmQoaW50IGNhcmRuciwgaW50IHNlbCk7CiBpbnQgUXVpY2tIZXgoY2hhciAqdHh0LCB1X2NoYXIgKiBwLCBpbnQgY250KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9pcGFjeC5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2lwYWN4LmMKaW5kZXggNzUxYjI1Zi4uMzMyMTA0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2lwYWN4LmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2lwYWN4LmMKQEAgLTcxNyw3ICs3MTcsNyBAQAogCiAgICAgICAgIGJjID0gYmMgPyAxIDogMDsgIC8vIGluIGNhc2UgYmMgaXMgZ3JlYXRlciB0aGFuIDEKIAlpZiAoY3MtPmRlYnVnICYgTDFfREVCX0hTQ1gpCi0JCWRlYnVnbDEoY3MsICJtb2RlX2JjaCgpIHN3aXRjaCBCLSUgbW9kZSAlZCBjaGFuICVkIiwgaHNjeCwgbW9kZSwgYmMpOworCQlkZWJ1Z2wxKGNzLCAibW9kZV9iY2goKSBzd2l0Y2ggQi0lZCBtb2RlICVkIGNoYW4gJWQiLCBoc2N4LCBtb2RlLCBiYyk7CiAJYmNzLT5tb2RlID0gbW9kZTsKIAliY3MtPmNoYW5uZWwgPSBiYzsKICAgCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvaXNhci5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2lzYXIuYwppbmRleCAyZTcyMjI3Li5kNGNjZTMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvaXNhci5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9pc2FyLmMKQEAgLTE4OSw3ICsxODksNyBAQAogc3RhdGljIGludAogaXNhcl9sb2FkX2Zpcm13YXJlKHN0cnVjdCBJc2RuQ2FyZFN0YXRlICpjcywgdV9jaGFyIF9fdXNlciAqYnVmKQogewotCWludCByZXQsIHNpemUsIGNudCwgZGVidWc7CisJaW50IGNmdV9yZXQsIHJldCwgc2l6ZSwgY250LCBkZWJ1ZzsKIAl1X2NoYXIgbGVuLCBub20sIG5vYzsKIAl1X3Nob3J0IHNhZHIsIGxlZnQsICpzcDsKIAl1X2NoYXIgX191c2VyICpwID0gYnVmOwpAQCAtMjEyLDkgKzIxMiwxMCBAQAogCWNzLT5kZWJ1ZyAmPSB+KEwxX0RFQl9IU0NYIHwgTDFfREVCX0hTQ1hfRklGTyk7CiAjZW5kaWYKIAkKLQlpZiAoKHJldCA9IGNvcHlfZnJvbV91c2VyKCZzaXplLCBwLCBzaXplb2YoaW50KSkpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiJpc2FyX2xvYWRfZmlybXdhcmUgY29weV9mcm9tX3VzZXIgcmV0ICVkXG4iLCByZXQpOwotCQlyZXR1cm4gcmV0OworCWNmdV9yZXQgPSBjb3B5X2Zyb21fdXNlcigmc2l6ZSwgcCwgc2l6ZW9mKGludCkpOworCWlmIChjZnVfcmV0KSB7CisJCXByaW50ayhLRVJOX0VSUiJpc2FyX2xvYWRfZmlybXdhcmUgY29weV9mcm9tX3VzZXIgcmV0ICVkXG4iLCBjZnVfcmV0KTsKKwkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCXAgKz0gc2l6ZW9mKGludCk7CiAJcHJpbnRrKEtFUk5fREVCVUciaXNhcl9sb2FkX2Zpcm13YXJlIHNpemU6ICVkXG4iLCBzaXplKTsKQEAgLTk1Myw3ICs5NTQsNyBAQAogCQkJYnJlYWs7CiAJCWNhc2UgUFNFVl9HU1ROX0NMUjoKIAkJCWlmIChjcy0+ZGVidWcgJiBMMV9ERUJfSFNDWCkKLQkJCQlkZWJ1Z2wxKGNzLCAicHVtcCBzdGV2IEdTVE4gQ0xFQVIiLCBkZXZ0KTsKKwkJCQlkZWJ1Z2wxKGNzLCAicHVtcCBzdGV2IEdTVE4gQ0xFQVIiKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJaWYgKGNzLT5kZWJ1ZyAmIEwxX0RFQl9IU0NYKQpAQCAtMTI2OCw3ICsxMjY5LDcgQEAKIHN0YXRpYyB2b2lkCiBmdGltZXJfaGFuZGxlcihzdHJ1Y3QgQkNTdGF0ZSAqYmNzKSB7CiAJaWYgKGJjcy0+Y3MtPmRlYnVnKQotCQlkZWJ1Z2wxKGJjcy0+Y3MsICJmdGltZXIgZmxhZ3MgJTA0eCIsCisJCWRlYnVnbDEoYmNzLT5jcywgImZ0aW1lciBmbGFncyAlMDRseCIsCiAJCQliY3MtPkZsYWcpOwogCXRlc3RfYW5kX2NsZWFyX2JpdChCQ19GTEdfRlRJX1JVTiwgJmJjcy0+RmxhZyk7CiAJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChCQ19GTEdfTExfQ09OTiwgJmJjcy0+RmxhZykpIHsKQEAgLTE3NDgsNyArMTc0OSw3IEBACiAJc3RydWN0IEJDU3RhdGUgKmJjczsKIAogCWlmIChjcy0+ZGVidWcgJiBMMV9ERUJfSFNDWCkKLQkJZGVidWdsMShjcywgImlzYXJfYXV4Y21kIGNtZC9jaCAleC8lZCIsIGljLT5jb21tYW5kLCBpYy0+YXJnKTsKKwkJZGVidWdsMShjcywgImlzYXJfYXV4Y21kIGNtZC9jaCAleC8lbGQiLCBpYy0+Y29tbWFuZCwgaWMtPmFyZyk7CiAJc3dpdGNoIChpYy0+Y29tbWFuZCkgewogCQljYXNlIChJU0ROX0NNRF9GQVhDTUQpOgogCQkJYmNzID0gY3MtPmNoYW5uZWxbaWMtPmFyZ10uYmNzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2lzZG5sMS5oIGIvZHJpdmVycy9pc2RuL2hpc2F4L2lzZG5sMS5oCmluZGV4IDE3MmFkNGMuLjQyNWQ4NjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9pc2RubDEuaAorKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaXNkbmwxLmgKQEAgLTIxLDYgKzIxLDcgQEAKICNkZWZpbmUgQl9YTVRCVUZSRUFEWQkxCiAjZGVmaW5lIEJfQUNLUEVORElORwkyCiAKK19fYXR0cmlidXRlX18oKGZvcm1hdChwcmludGYsIDIsIDMpKSkKIHZvaWQgZGVidWdsMShzdHJ1Y3QgSXNkbkNhcmRTdGF0ZSAqY3MsIGNoYXIgKmZtdCwgLi4uKTsKIHZvaWQgRENoYW5uZWxfcHJvY194bXQoc3RydWN0IElzZG5DYXJkU3RhdGUgKmNzKTsKIHZvaWQgRENoYW5uZWxfcHJvY19yY3Yoc3RydWN0IElzZG5DYXJkU3RhdGUgKmNzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9pc2RubDMuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9pc2RubDMuYwppbmRleCBmZDBiNjQzLi5hZDI5MWYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvaXNkbmwzLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2lzZG5sMy5jCkBAIC02Niw3ICs2Niw3IEBACiAJIkVWX1RJTUVPVVQiLAogfTsKIAotc3RhdGljIHZvaWQKK3N0YXRpYyBfX2F0dHJpYnV0ZV9fKChmb3JtYXQocHJpbnRmLCAyLCAzKSkpIHZvaWQKIGwzbV9kZWJ1ZyhzdHJ1Y3QgRnNtSW5zdCAqZmksIGNoYXIgKmZtdCwgLi4uKQogewogCXZhX2xpc3QgYXJnczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9uZXRqZXQuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9uZXRqZXQuYwppbmRleCA1ZDdmMGYyLi42NDQ4OTFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvbmV0amV0LmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L25ldGpldC5jCkBAIC0yNTQsNyArMjU0LDcgQEAKIAkJdmFsID4+PSAxOwogCX0KIAlpZiAoYmNzLT5jcy0+ZGVidWcgJiBMMV9ERUJfSFNDWCkKLQkJZGVidWdsMShiY3MtPmNzLCJ0aWdlciBtYWtlX3JhdzogaW4gJWxkIG91dCAlZC4lZCIsCisJCWRlYnVnbDEoYmNzLT5jcywidGlnZXIgbWFrZV9yYXc6IGluICV1IG91dCAlZC4lZCIsCiAJCQliY3MtPnR4X3NrYi0+bGVuLCBzX2NudCwgYml0Y250KTsKIAlpZiAoYml0Y250KSB7CiAJCXdoaWxlICg4PmJpdGNudCsrKSB7CkBAIC0zNjEsNyArMzYxLDcgQEAKIAkJdmFsID4+PSAxOwogCX0KIAlpZiAoYmNzLT5jcy0+ZGVidWcgJiBMMV9ERUJfSFNDWCkKLQkJZGVidWdsMShiY3MtPmNzLCJ0aWdlciBtYWtlX3Jhd181Nms6IGluICVsZCBvdXQgJWQuJWQiLAorCQlkZWJ1Z2wxKGJjcy0+Y3MsInRpZ2VyIG1ha2VfcmF3XzU2azogaW4gJXUgb3V0ICVkLiVkIiwKIAkJCWJjcy0+dHhfc2tiLT5sZW4sIHNfY250LCBiaXRjbnQpOwogCWlmIChiaXRjbnQpIHsKIAkJd2hpbGUgKDg+Yml0Y250KyspIHsKQEAgLTYxMiw3ICs2MTIsNyBAQAogCWlmICghYmNzLT50eF9za2IpCiAJCXJldHVybjsKIAlpZiAoYmNzLT5jcy0+ZGVidWcgJiBMMV9ERUJfSFNDWCkKLQkJZGVidWdsMShiY3MtPmNzLCJ0aWdlciBmaWxsX2RtYTE6IGMlZCAlNHgiLCBiY3MtPmNoYW5uZWwsCisJCWRlYnVnbDEoYmNzLT5jcywidGlnZXIgZmlsbF9kbWExOiBjJWQgJTRseCIsIGJjcy0+Y2hhbm5lbCwKIAkJCWJjcy0+RmxhZyk7CiAJaWYgKHRlc3RfYW5kX3NldF9iaXQoQkNfRkxHX0JVU1ksICZiY3MtPkZsYWcpKQogCQlyZXR1cm47CkBAIC02MjUsNyArNjI1LDcgQEAKIAkJCXJldHVybjsJCQogCX07CiAJaWYgKGJjcy0+Y3MtPmRlYnVnICYgTDFfREVCX0hTQ1gpCi0JCWRlYnVnbDEoYmNzLT5jcywidGlnZXIgZmlsbF9kbWEyOiBjJWQgJTR4IiwgYmNzLT5jaGFubmVsLAorCQlkZWJ1Z2wxKGJjcy0+Y3MsInRpZ2VyIGZpbGxfZG1hMjogYyVkICU0bHgiLCBiY3MtPmNoYW5uZWwsCiAJCQliY3MtPkZsYWcpOwogCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoQkNfRkxHX05PRlJBTUUsICZiY3MtPkZsYWcpKSB7CiAJCXdyaXRlX3JhdyhiY3MsIGJjcy0+aHcudGlnZXIuc2VuZHAsIGJjcy0+aHcudGlnZXIuZnJlZSk7CkBAIC02NjcsNyArNjY3LDcgQEAKIAkJd3JpdGVfcmF3KGJjcywgcCwgY250KTsKIAl9CiAJaWYgKGJjcy0+Y3MtPmRlYnVnICYgTDFfREVCX0hTQ1gpCi0JCWRlYnVnbDEoYmNzLT5jcywidGlnZXIgZmlsbF9kbWEzOiBjJWQgJTR4IiwgYmNzLT5jaGFubmVsLAorCQlkZWJ1Z2wxKGJjcy0+Y3MsInRpZ2VyIGZpbGxfZG1hMzogYyVkICU0bHgiLCBiY3MtPmNoYW5uZWwsCiAJCQliY3MtPkZsYWcpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvc3Q1NDgxX2QuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9zdDU0ODFfZC5jCmluZGV4IGI3ODc2YjEuLjQ0MDgyNjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9zdDU0ODFfZC5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9zdDU0ODFfZC5jCkBAIC0xNjcsNyArMTY3LDggQEAKIAl7U1RfTDFfRjgsIEVWX0lORF9SU1ksICAgICAgICAgICBsMV9pZ25vcmV9LAogfTsKIAotc3RhdGljIHZvaWQgbDFtX2RlYnVnKHN0cnVjdCBGc21JbnN0ICpmaSwgY2hhciAqZm10LCAuLi4pCitzdGF0aWMgX19hdHRyaWJ1dGVfXygoZm9ybWF0KHByaW50ZiwgMiwgMykpKQordm9pZCBsMW1fZGVidWcoc3RydWN0IEZzbUluc3QgKmZpLCBjaGFyICpmbXQsIC4uLikKIHsKIAl2YV9saXN0IGFyZ3M7CiAJY2hhciBidWZbMjU2XTsKQEAgLTI2OSw3ICsyNzAsOCBAQAogCSJFVl9ET1VUX1VOREVSUlVOIiwKIH07CiAKLXN0YXRpYyB2b2lkIGRvdXRfZGVidWcoc3RydWN0IEZzbUluc3QgKmZpLCBjaGFyICpmbXQsIC4uLikKK3N0YXRpYyBfX2F0dHJpYnV0ZV9fKChmb3JtYXQocHJpbnRmLCAyLCAzKSkpCit2b2lkIGRvdXRfZGVidWcoc3RydWN0IEZzbUluc3QgKmZpLCBjaGFyICpmbXQsIC4uLikKIHsKIAl2YV9saXN0IGFyZ3M7CiAJY2hhciBidWZbMjU2XTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl9jb25jYXAuYyBiL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl9jb25jYXAuYwppbmRleCA0NjA0OGU1Li5kNTY4Njg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fY29uY2FwLmMKKysrIGIvZHJpdmVycy9pc2RuL2k0bC9pc2RuX2NvbmNhcC5jCkBAIC02MSw3ICs2MSw3IEBACiBzdGF0aWMgaW50IGlzZG5fY29uY2FwX2RsX2Nvbm5lY3RfcmVxKHN0cnVjdCBjb25jYXBfcHJvdG8gKmNvbmNhcCkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IGNvbmNhcCAtPiBuZXRfZGV2OwotCWlzZG5fbmV0X2xvY2FsICpscCA9IChpc2RuX25ldF9sb2NhbCAqKSBuZXRkZXZfcHJpdihuZGV2KTsKKwlpc2RuX25ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAlpbnQgcmV0OwogCUlYMjVERUJVRyggImlzZG5fY29uY2FwX2RsX2Nvbm5lY3RfcmVxOiAlcyBcbiIsIG5kZXYgLT4gbmFtZSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl9uZXQuYyBiL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl9uZXQuYwppbmRleCAyNmQ0NGMzLi5hZmVlZGU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fbmV0LmMKKysrIGIvZHJpdmVycy9pc2RuL2k0bC9pc2RuX25ldC5jCkBAIC04MjcsNyArODI3LDcgQEAKIHZvaWQKIGlzZG5fbmV0X2hhbmd1cChzdHJ1Y3QgbmV0X2RldmljZSAqZCkKIHsKLQlpc2RuX25ldF9sb2NhbCAqbHAgPSAoaXNkbl9uZXRfbG9jYWwgKikgbmV0ZGV2X3ByaXYoZCk7CisJaXNkbl9uZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZCk7CiAJaXNkbl9jdHJsIGNtZDsKICNpZmRlZiBDT05GSUdfSVNETl9YMjUKIAlzdHJ1Y3QgY29uY2FwX3Byb3RvICpjcHJvdCA9IGxwLT5uZXRkZXYtPmNwcm90OwpAQCAtMTA1Miw3ICsxMDUyLDcgQEAKIHsKIAlpc2RuX25ldF9kZXYgKm5kOwogCWlzZG5fbmV0X2xvY2FsICpzbHA7Ci0JaXNkbl9uZXRfbG9jYWwgKmxwID0gKGlzZG5fbmV0X2xvY2FsICopIG5ldGRldl9wcml2KG5kZXYpOworCWlzZG5fbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KG5kZXYpOwogCWludCByZXR2ID0gTkVUREVWX1RYX09LOwogCiAJaWYgKCgoaXNkbl9uZXRfbG9jYWwgKikgbmV0ZGV2X3ByaXYobmRldikpLT5tYXN0ZXIpIHsKQEAgLTExMTYsNyArMTExNiw3IEBACiBzdGF0aWMgdm9pZAogaXNkbl9uZXRfYWRqdXN0X2hkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCWlzZG5fbmV0X2xvY2FsICpscCA9IChpc2RuX25ldF9sb2NhbCAqKSBuZXRkZXZfcHJpdihkZXYpOworCWlzZG5fbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJaWYgKCFza2IpCiAJCXJldHVybjsKIAlpZiAobHAtPnBfZW5jYXAgPT0gSVNETl9ORVRfRU5DQVBfRVRIRVIpIHsKQEAgLTExMzEsNyArMTEzMSw3IEBACiAKIHN0YXRpYyB2b2lkIGlzZG5fbmV0X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKiBuZGV2KQogewotCWlzZG5fbmV0X2xvY2FsICpscCA9IChpc2RuX25ldF9sb2NhbCAqKSBuZXRkZXZfcHJpdihuZGV2KTsKKwlpc2RuX25ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAogCXByaW50ayhLRVJOX1dBUk5JTkcgImlzZG5fdHhfdGltZW91dCBkZXYgJXMgZGlhbHN0YXRlICVkXG4iLCBuZGV2LT5uYW1lLCBscC0+ZGlhbHN0YXRlKTsKIAlpZiAoIWxwLT5kaWFsc3RhdGUpewpAQCAtMTE2NSw3ICsxMTY1LDcgQEAKIHN0YXRpYyBuZXRkZXZfdHhfdAogaXNkbl9uZXRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKIHsKLQlpc2RuX25ldF9sb2NhbCAqbHAgPSAoaXNkbl9uZXRfbG9jYWwgKikgbmV0ZGV2X3ByaXYobmRldik7CisJaXNkbl9uZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYobmRldik7CiAjaWZkZWYgQ09ORklHX0lTRE5fWDI1CiAJc3RydWN0IGNvbmNhcF9wcm90byAqIGNwcm90ID0gbHAgLT4gbmV0ZGV2IC0+IGNwcm90OwogLyogQXQgdGhpcyBwb2ludCBoYXJkX3N0YXJ0X3htaXQoKSBwYXNzZXMgY29udHJvbCB0byB0aGUgZW5jYXBzdWxhdGlvbgpAQCAtMTM0Nyw3ICsxMzQ3LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqCiBpc2RuX25ldF9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlpc2RuX25ldF9sb2NhbCAqbHAgPSAoaXNkbl9uZXRfbG9jYWwgKikgbmV0ZGV2X3ByaXYoZGV2KTsKKwlpc2RuX25ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXJldHVybiAmbHAtPnN0YXRzOwogfQogCkBAIC0xNDI2LDcgKzE0MjYsNyBAQAogc3RhdGljIGludAogaXNkbl9jaXNjb2hkbGNrX2Rldl9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmciwgaW50IGNtZCkKIHsKLQlpc2RuX25ldF9sb2NhbCAqbHAgPSAoaXNkbl9uZXRfbG9jYWwgKikgbmV0ZGV2X3ByaXYoZGV2KTsKKwlpc2RuX25ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXVuc2lnbmVkIGxvbmcgbGVuID0gMDsKIAl1bnNpZ25lZCBsb25nIGV4cGlyZXMgPSAwOwogCWludCB0bXAgPSAwOwpAQCAtMTQ5Myw3ICsxNDkzLDcgQEAKIHN0YXRpYyBpbnQgaXNkbl9uZXRfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSAgc3RydWN0IGlmcmVxICppZnIsIGludCBjbWQpCiB7Ci0JaXNkbl9uZXRfbG9jYWwgKmxwID0gKGlzZG5fbmV0X2xvY2FsICopIG5ldGRldl9wcml2KGRldik7CisJaXNkbl9uZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCXN3aXRjaCAobHAtPnBfZW5jYXApIHsKICNpZmRlZiBDT05GSUdfSVNETl9QUFAKQEAgLTE3ODYsNyArMTc4Niw3IEBACiBzdGF0aWMgdm9pZAogaXNkbl9uZXRfcmVjZWl2ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlpc2RuX25ldF9sb2NhbCAqbHAgPSAoaXNkbl9uZXRfbG9jYWwgKikgbmV0ZGV2X3ByaXYobmRldik7CisJaXNkbl9uZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYobmRldik7CiAJaXNkbl9uZXRfbG9jYWwgKm9scCA9IGxwOwkvKiBvcmlnaW5hbCAnbHAnICovCiAjaWZkZWYgQ09ORklHX0lTRE5fWDI1CiAJc3RydWN0IGNvbmNhcF9wcm90byAqY3Byb3QgPSBscCAtPiBuZXRkZXYgLT4gY3Byb3Q7CkBAIC0xODAwLDcgKzE4MDAsNyBAQAogCQkgKiBoYW5kbGUgbWFzdGVyJ3Mgc3RhdGlzdGljcyBhbmQgaGFuZ3VwLXRpbWVvdXQKIAkJICovCiAJCW5kZXYgPSBscC0+bWFzdGVyOwotCQlscCA9IChpc2RuX25ldF9sb2NhbCAqKSBuZXRkZXZfcHJpdihuZGV2KTsKKwkJbHAgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAkJbHAtPnN0YXRzLnJ4X3BhY2tldHMrKzsKIAkJbHAtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl9wcHAuYyBiL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl9wcHAuYwppbmRleCBmZTgyNGUwLi45ZTgxNjJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fcHBwLmMKKysrIGIvZHJpdmVycy9pc2RuL2k0bC9pc2RuX3BwcC5jCkBAIC0xMTQ3LDE1ICsxMTQ3LDE0IEBACiAJfQogCiAJaWYgKGlzLT5wYXNzX2ZpbHRlcgotCSAgICAmJiBza19ydW5fZmlsdGVyKHNrYiwgaXMtPnBhc3NfZmlsdGVyLCBpcy0+cGFzc19sZW4pID09IDApIHsKKwkgICAgJiYgc2tfcnVuX2ZpbHRlcihza2IsIGlzLT5wYXNzX2ZpbHRlcikgPT0gMCkgewogCQlpZiAoaXMtPmRlYnVnICYgMHgyKQogCQkJcHJpbnRrKEtFUk5fREVCVUcgIklQUFA6IGluYm91bmQgZnJhbWUgZmlsdGVyZWQuXG4iKTsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCXJldHVybjsKIAl9CiAJaWYgKCEoaXMtPmFjdGl2ZV9maWx0ZXIKLQkgICAgICAmJiBza19ydW5fZmlsdGVyKHNrYiwgaXMtPmFjdGl2ZV9maWx0ZXIsCi0JICAgICAgICAgICAgICAgICAgICAgICBpcy0+YWN0aXZlX2xlbikgPT0gMCkpIHsKKwkgICAgICAmJiBza19ydW5fZmlsdGVyKHNrYiwgaXMtPmFjdGl2ZV9maWx0ZXIpID09IDApKSB7CiAJCWlmIChpcy0+ZGVidWcgJiAweDIpCiAJCQlwcmludGsoS0VSTl9ERUJVRyAiSVBQUDogbGluay1hY3RpdmUgZmlsdGVyOiByZXNldGluZyBodXB0aW1lci5cbiIpOwogCQlscC0+aHVwdGltZXIgPSAwOwpAQCAtMTIyMSw3ICsxMjIwLDcgQEAKIAlzdHJ1Y3QgaXBwcF9zdHJ1Y3QgKmlwdCwqaXB0czsKIAlpbnQgc2xvdCwgcmV0dmFsID0gTkVUREVWX1RYX09LOwogCi0JbWxwID0gKGlzZG5fbmV0X2xvY2FsICopIG5ldGRldl9wcml2KG5ldGRldik7CisJbWxwID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAluZCA9IG1scC0+bmV0ZGV2OyAgICAgICAvKiBnZXQgbWFzdGVyIGxwICovCiAKIAlzbG90ID0gbWxwLT5wcHBfc2xvdDsKQEAgLTEyOTQsMTUgKzEyOTMsMTQgQEAKIAl9CiAKIAlpZiAoaXB0LT5wYXNzX2ZpbHRlcgotCSAgICAmJiBza19ydW5fZmlsdGVyKHNrYiwgaXB0LT5wYXNzX2ZpbHRlciwgaXB0LT5wYXNzX2xlbikgPT0gMCkgeworCSAgICAmJiBza19ydW5fZmlsdGVyKHNrYiwgaXB0LT5wYXNzX2ZpbHRlcikgPT0gMCkgewogCQlpZiAoaXB0LT5kZWJ1ZyAmIDB4NCkKIAkJCXByaW50ayhLRVJOX0RFQlVHICJJUFBQOiBvdXRib3VuZCBmcmFtZSBmaWx0ZXJlZC5cbiIpOwogCQlrZnJlZV9za2Ioc2tiKTsKIAkJZ290byB1bmxvY2s7CiAJfQogCWlmICghKGlwdC0+YWN0aXZlX2ZpbHRlcgotCSAgICAgICYmIHNrX3J1bl9maWx0ZXIoc2tiLCBpcHQtPmFjdGl2ZV9maWx0ZXIsCi0JCSAgICAgICAgICAgICAgIGlwdC0+YWN0aXZlX2xlbikgPT0gMCkpIHsKKwkgICAgICAmJiBza19ydW5fZmlsdGVyKHNrYiwgaXB0LT5hY3RpdmVfZmlsdGVyKSA9PSAwKSkgewogCQlpZiAoaXB0LT5kZWJ1ZyAmIDB4NCkKIAkJCXByaW50ayhLRVJOX0RFQlVHICJJUFBQOiBsaW5rLWFjdGl2ZSBmaWx0ZXI6IHJlc2V0aW5nIGh1cHRpbWVyLlxuIik7CiAJCWxwLT5odXB0aW1lciA9IDA7CkBAIC0xNDkyLDkgKzE0OTAsOSBAQAogCX0KIAkKIAlkcm9wIHw9IGlzLT5wYXNzX2ZpbHRlcgotCSAgICAgICAgJiYgc2tfcnVuX2ZpbHRlcihza2IsIGlzLT5wYXNzX2ZpbHRlciwgaXMtPnBhc3NfbGVuKSA9PSAwOworCSAgICAgICAgJiYgc2tfcnVuX2ZpbHRlcihza2IsIGlzLT5wYXNzX2ZpbHRlcikgPT0gMDsKIAlkcm9wIHw9IGlzLT5hY3RpdmVfZmlsdGVyCi0JICAgICAgICAmJiBza19ydW5fZmlsdGVyKHNrYiwgaXMtPmFjdGl2ZV9maWx0ZXIsIGlzLT5hY3RpdmVfbGVuKSA9PSAwOworCSAgICAgICAgJiYgc2tfcnVuX2ZpbHRlcihza2IsIGlzLT5hY3RpdmVfZmlsdGVyKSA9PSAwOwogCQogCXNrYl9wdXNoKHNrYiwgSVBQUF9NQVhfSEVBREVSIC0gNCk7CiAJcmV0dXJuIGRyb3A7CkBAIC0xOTg1LDcgKzE5ODMsNyBAQAogewogCXN0cnVjdCBwcHBfc3RhdHMgX191c2VyICpyZXMgPSBpZnItPmlmcl9kYXRhOwogCXN0cnVjdCBwcHBfc3RhdHMgdDsKLQlpc2RuX25ldF9sb2NhbCAqbHAgPSAoaXNkbl9uZXRfbG9jYWwgKikgbmV0ZGV2X3ByaXYoZGV2KTsKKwlpc2RuX25ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCByZXMsIHNpemVvZihzdHJ1Y3QgcHBwX3N0YXRzKSkpCiAJCXJldHVybiAtRUZBVUxUOwpAQCAtMjAyNCw3ICsyMDIyLDcgQEAKIHsKIAlpbnQgZXJyb3I9MDsKIAlpbnQgbGVuOwotCWlzZG5fbmV0X2xvY2FsICpscCA9IChpc2RuX25ldF9sb2NhbCAqKSBuZXRkZXZfcHJpdihkZXYpOworCWlzZG5fbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CiAKIAogCWlmIChscC0+cF9lbmNhcCAhPSBJU0ROX05FVF9FTkNBUF9TWU5DUFBQKQpAQCAtMjA5MSw3ICsyMDg5LDcgQEAKIAogCXNkZXYgPSBscC0+c2xhdmU7CiAJd2hpbGUgKHNkZXYpIHsKLQkJaXNkbl9uZXRfbG9jYWwgKm1scCA9IChpc2RuX25ldF9sb2NhbCAqKSBuZXRkZXZfcHJpdihzZGV2KTsKKwkJaXNkbl9uZXRfbG9jYWwgKm1scCA9IG5ldGRldl9wcml2KHNkZXYpOwogCQlpZiAoIShtbHAtPmZsYWdzICYgSVNETl9ORVRfQ09OTkVDVEVEKSkKIAkJCWJyZWFrOwogCQlzZGV2ID0gbWxwLT5zbGF2ZTsKQEAgLTIwOTksNyArMjA5Nyw3IEBACiAJaWYgKCFzZGV2KQogCQlyZXR1cm4gMjsKIAotCWlzZG5fbmV0X2RpYWxfcmVxKChpc2RuX25ldF9sb2NhbCAqKSBuZXRkZXZfcHJpdihzZGV2KSk7CisJaXNkbl9uZXRfZGlhbF9yZXEobmV0ZGV2X3ByaXYoc2RldikpOwogCXJldHVybiAwOwogI2Vsc2UKIAlyZXR1cm4gLTE7CkBAIC0yMTIyLDcgKzIxMjAsNyBAQAogCiAJc2RldiA9IGxwLT5zbGF2ZTsKIAl3aGlsZSAoc2RldikgewotCQlpc2RuX25ldF9sb2NhbCAqbWxwID0gKGlzZG5fbmV0X2xvY2FsICopIG5ldGRldl9wcml2KHNkZXYpOworCQlpc2RuX25ldF9sb2NhbCAqbWxwID0gbmV0ZGV2X3ByaXYoc2Rldik7CiAKIAkJaWYgKG1scC0+c2xhdmUpIHsgLyogZmluZCBsYXN0IGNvbm5lY3RlZCBsaW5rIGluIGNoYWluICovCiAJCQlpc2RuX25ldF9sb2NhbCAqbmxwID0gSVNETl9TTEFWRV9QUklWKG1scCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vbUlTRE4vaHdjaGFubmVsLmMgYi9kcml2ZXJzL2lzZG4vbUlTRE4vaHdjaGFubmVsLmMKaW5kZXggMzA3YmQ2ZS4uMTk5ZjM3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL21JU0ROL2h3Y2hhbm5lbC5jCisrKyBiL2RyaXZlcnMvaXNkbi9tSVNETi9od2NoYW5uZWwuYwpAQCAtMTEwLDcgKzExMCw3IEBACiAJfQogCXNrYl9xdWV1ZV9wdXJnZSgmY2gtPnNxdWV1ZSk7CiAJc2tiX3F1ZXVlX3B1cmdlKCZjaC0+cnF1ZXVlKTsKLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCWZsdXNoX3dvcmtfc3luYygmY2gtPndvcmtxKTsKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0wobUlTRE5fZnJlZWRjaGFubmVsKTsKQEAgLTE0Myw3ICsxNDMsNyBAQAogCW1JU0ROX2NsZWFyX2JjaGFubmVsKGNoKTsKIAlza2JfcXVldWVfcHVyZ2UoJmNoLT5ycXVldWUpOwogCWNoLT5yY291bnQgPSAwOwotCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisJZmx1c2hfd29ya19zeW5jKCZjaC0+d29ya3EpOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChtSVNETl9mcmVlYmNoYW5uZWwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL21JU0ROL2wxb2lwX2NvcmUuYyBiL2RyaXZlcnMvaXNkbi9tSVNETi9sMW9pcF9jb3JlLmMKaW5kZXggNWI1OTc5Ni4uYmQ1MjZmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL21JU0ROL2wxb2lwX2NvcmUuYworKysgYi9kcml2ZXJzL2lzZG4vbUlTRE4vbDFvaXBfY29yZS5jCkBAIC0xMjY5LDYgKzEyNjksOCBAQAogCWlmICh0aW1lcl9wZW5kaW5nKCZoYy0+dGltZW91dF90bCkpCiAJCWRlbF90aW1lcigmaGMtPnRpbWVvdXRfdGwpOwogCisJY2FuY2VsX3dvcmtfc3luYygmaGMtPndvcmtxKTsKKwogCWlmIChoYy0+c29ja2V0X3RocmVhZCkKIAkJbDFvaXBfc29ja2V0X2Nsb3NlKGhjKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL21JU0ROL2xheWVyMS5jIGIvZHJpdmVycy9pc2RuL21JU0ROL2xheWVyMS5jCmluZGV4IGFjNGFhMTguLjVjYzdjMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9tSVNETi9sYXllcjEuYworKysgYi9kcml2ZXJzL2lzZG4vbUlTRE4vbGF5ZXIxLmMKQEAgLTk5LDEyICs5OSwxNiBAQAogbDFtX2RlYnVnKHN0cnVjdCBGc21JbnN0ICpmaSwgY2hhciAqZm10LCAuLi4pCiB7CiAJc3RydWN0IGxheWVyMSAqbDEgPSBmaS0+dXNlcmRhdGE7CisJc3RydWN0IHZhX2Zvcm1hdCB2YWY7CiAJdmFfbGlzdCB2YTsKIAogCXZhX3N0YXJ0KHZhLCBmbXQpOwotCXByaW50ayhLRVJOX0RFQlVHICIlczogIiwgZGV2X25hbWUoJmwxLT5kY2gtPmRldi5kZXYpKTsKLQl2cHJpbnRrKGZtdCwgdmEpOwotCXByaW50aygiXG4iKTsKKworCXZhZi5mbXQgPSBmbXQ7CisJdmFmLnZhID0gJnZhOworCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAlcFZcbiIsIGRldl9uYW1lKCZsMS0+ZGNoLT5kZXYuZGV2KSwgJnZhZik7CisKIAl2YV9lbmQodmEpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vbUlTRE4vbGF5ZXIyLmMgYi9kcml2ZXJzL2lzZG4vbUlTRE4vbGF5ZXIyLmMKaW5kZXggYzk3MzcxNy4uNGFlNzUwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL21JU0ROL2xheWVyMi5jCisrKyBiL2RyaXZlcnMvaXNkbi9tSVNETi9sYXllcjIuYwpAQCAtOTUsMTQgKzk1LDIwIEBACiBsMm1fZGVidWcoc3RydWN0IEZzbUluc3QgKmZpLCBjaGFyICpmbXQsIC4uLikKIHsKIAlzdHJ1Y3QgbGF5ZXIyICpsMiA9IGZpLT51c2VyZGF0YTsKKwlzdHJ1Y3QgdmFfZm9ybWF0IHZhZjsKIAl2YV9saXN0IHZhOwogCiAJaWYgKCEoKmRlYnVnICYgREVCVUdfTDJfRlNNKSkKIAkJcmV0dXJuOworCiAJdmFfc3RhcnQodmEsIGZtdCk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgImwyIChzYXBpICVkIHRlaSAlZCk6ICIsIGwyLT5zYXBpLCBsMi0+dGVpKTsKLQl2cHJpbnRrKGZtdCwgdmEpOwotCXByaW50aygiXG4iKTsKKworCXZhZi5mbXQgPSBmbXQ7CisJdmFmLnZhID0gJnZhOworCisJcHJpbnRrKEtFUk5fREVCVUcgImwyIChzYXBpICVkIHRlaSAlZCk6ICVwVlxuIiwKKwkgICAgICAgbDItPnNhcGksIGwyLT50ZWksICZ2YWYpOworCiAJdmFfZW5kKHZhKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL21JU0ROL3RlaS5jIGIvZHJpdmVycy9pc2RuL21JU0ROL3RlaS5jCmluZGV4IDFiODVkOWQuLjY4N2M5YjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9tSVNETi90ZWkuYworKysgYi9kcml2ZXJzL2lzZG4vbUlTRE4vdGVpLmMKQEAgLTc5LDE0ICs3OSwxOSBAQAogZGFfZGVidWcoc3RydWN0IEZzbUluc3QgKmZpLCBjaGFyICpmbXQsIC4uLikKIHsKIAlzdHJ1Y3QgbWFuYWdlcgkqbWdyID0gZmktPnVzZXJkYXRhOworCXN0cnVjdCB2YV9mb3JtYXQgdmFmOwogCXZhX2xpc3QgdmE7CiAKIAlpZiAoISgqZGVidWcgJiBERUJVR19MMl9URUlGU00pKQogCQlyZXR1cm47CisKIAl2YV9zdGFydCh2YSwgZm10KTsKLQlwcmludGsoS0VSTl9ERUJVRyAibWdyKCVkKTogIiwgbWdyLT5jaC5zdC0+ZGV2LT5pZCk7Ci0JdnByaW50ayhmbXQsIHZhKTsKLQlwcmludGsoIlxuIik7CisKKwl2YWYuZm10ID0gZm10OworCXZhZi52YSA9ICZ2YTsKKworCXByaW50ayhLRVJOX0RFQlVHICJtZ3IoJWQpOiAlcFZcbiIsIG1nci0+Y2guc3QtPmRldi0+aWQsICZ2YWYpOworCiAJdmFfZW5kKHZhKTsKIH0KIApAQCAtMjIzLDE0ICsyMjgsMjAgQEAKIHRlaV9kZWJ1ZyhzdHJ1Y3QgRnNtSW5zdCAqZmksIGNoYXIgKmZtdCwgLi4uKQogewogCXN0cnVjdCB0ZWltZ3IJKnRtID0gZmktPnVzZXJkYXRhOworCXN0cnVjdCB2YV9mb3JtYXQgdmFmOwogCXZhX2xpc3QgdmE7CiAKIAlpZiAoISgqZGVidWcgJiBERUJVR19MMl9URUlGU00pKQogCQlyZXR1cm47CisKIAl2YV9zdGFydCh2YSwgZm10KTsKLQlwcmludGsoS0VSTl9ERUJVRyAic2FwaSglZCkgdGVpKCVkKTogIiwgdG0tPmwyLT5zYXBpLCB0bS0+bDItPnRlaSk7Ci0JdnByaW50ayhmbXQsIHZhKTsKLQlwcmludGsoIlxuIik7CisKKwl2YWYuZm10ID0gZm10OworCXZhZi52YSA9ICZ2YTsKKworCXByaW50ayhLRVJOX0RFQlVHICJzYXBpKCVkKSB0ZWkoJWQpOiAlcFZcbiIsCisJICAgICAgIHRtLT5sMi0+c2FwaSwgdG0tPmwyLT50ZWksICZ2YWYpOworCiAJdmFfZW5kKHZhKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZHMtd204MzUwLmMgYi9kcml2ZXJzL2xlZHMvbGVkcy13bTgzNTAuYwppbmRleCA1YWFiMzJjLi5hMDQ1MjMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvbGVkcy13bTgzNTAuYworKysgYi9kcml2ZXJzL2xlZHMvbGVkcy13bTgzNTAuYwpAQCAtMjc2LDcgKzI3Niw3IEBACiAJc3RydWN0IHdtODM1MF9sZWQgKmxlZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCiAJbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoJmxlZC0+Y2Rldik7Ci0JZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwlmbHVzaF93b3JrX3N5bmMoJmxlZC0+d29yayk7CiAJd204MzUwX2xlZF9kaXNhYmxlKGxlZCk7CiAJcmVndWxhdG9yX3B1dChsZWQtPmRjZGMpOwogCXJlZ3VsYXRvcl9wdXQobGVkLT5pc2luayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC9hbXMvYW1zLWNvcmUuYyBiL2RyaXZlcnMvbWFjaW50b3NoL2Ftcy9hbXMtY29yZS5jCmluZGV4IDJhZDYyYzMuLjM5OWJlYjE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC9hbXMvYW1zLWNvcmUuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC9hbXMvYW1zLWNvcmUuYwpAQCAtMjI2LDcgKzIyNiw3IEBACiAJICogV2UgZG8gdGhpcyBhZnRlciBhbXNfaW5mby5leGl0KCksIGJlY2F1c2UgYW4gaW50ZXJydXB0IG1pZ2h0CiAJICogaGF2ZSBhcnJpdmVkIGJlZm9yZSBkaXNhYmxpbmcgdGhlbS4KIAkgKi8KLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCWZsdXNoX3dvcmtfc3luYygmYW1zX2luZm8ud29ya2VyKTsKIAogCS8qIFJlbW92ZSBkZXZpY2UgKi8KIAlvZl9kZXZpY2VfdW5yZWdpc3RlcihhbXNfaW5mby5vZl9kZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvbWFjX2hpZC5jIGIvZHJpdmVycy9tYWNpbnRvc2gvbWFjX2hpZC5jCmluZGV4IDA2N2Y5OTYuLjZhODIzODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL21hY19oaWQuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC9tYWNfaGlkLmMKQEAgLTIzLDYgKzIzLDggQEAKIAogc3RhdGljIHN0cnVjdCBpbnB1dF9kZXYgKm1hY19oaWRfZW11bW91c2VfZGV2OwogCitzdGF0aWMgREVGSU5FX01VVEVYKG1hY19oaWRfZW11bW91c2VfbXV0ZXgpOworCiBzdGF0aWMgaW50IG1hY19oaWRfY3JlYXRlX2VtdW1vdXNlKHZvaWQpCiB7CiAJc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBtYWNfaGlkX2VtdW1vdXNlX2Rldl9ldmVudF9jbGFzczsKQEAgLTE4Nyw2ICsxODksMTAgQEAKIAlpbnQgb2xkX3ZhbCA9ICp2YWxwOwogCWludCByYzsKIAorCXJjID0gbXV0ZXhfbG9ja19raWxsYWJsZSgmbWFjX2hpZF9lbXVtb3VzZV9tdXRleCk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisKIAlyYyA9IHByb2NfZG9pbnR2ZWModGFibGUsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MpOwogCiAJaWYgKHJjID09IDAgJiYgd3JpdGUgJiYgKnZhbHAgIT0gb2xkX3ZhbCkgewpAQCAtMjAyLDYgKzIwOCw4IEBACiAJaWYgKHJjKQogCQkqdmFscCA9IG9sZF92YWw7CiAKKwltdXRleF91bmxvY2soJm1hY19oaWRfZW11bW91c2VfbXV0ZXgpOworCiAJcmV0dXJuIHJjOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC9yYWNrLW1ldGVyLmMgYi9kcml2ZXJzL21hY2ludG9zaC9yYWNrLW1ldGVyLmMKaW5kZXggNTNjY2UzYS4uMzlmNjYwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvcmFjay1tZXRlci5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3JhY2stbWV0ZXIuYwpAQCAtMjg1LDggKzI4NSw4IEBACiAKIHN0YXRpYyB2b2lkIF9fZGV2ZXhpdCByYWNrbWV0ZXJfc3RvcF9jcHVfc25pZmZlcihzdHJ1Y3QgcmFja21ldGVyICpybSkKIHsKLQljYW5jZWxfcmVhcm1pbmdfZGVsYXllZF93b3JrKCZybS0+Y3B1WzBdLnNuaWZmZXIpOwotCWNhbmNlbF9yZWFybWluZ19kZWxheWVkX3dvcmsoJnJtLT5jcHVbMV0uc25pZmZlcik7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZybS0+Y3B1WzBdLnNuaWZmZXIpOworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcm0tPmNwdVsxXS5zbmlmZmVyKTsKIH0KIAogc3RhdGljIGludCBfX2RldmluaXQgcmFja21ldGVyX3NldHVwKHN0cnVjdCByYWNrbWV0ZXIgKnJtKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9JUi9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9JUi9LY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTQxNjNlLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvSVIvS2NvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDE2NyArMCwwIEBACi1tZW51Y29uZmlnIElSX0NPUkUKLQl0cmlzdGF0ZSAiSW5mcmFyZWQgcmVtb3RlIGNvbnRyb2xsZXIgYWRhcHRlcnMiCi0JZGVwZW5kcyBvbiBJTlBVVAotCWRlZmF1bHQgSU5QVVQKLQktLS1oZWxwLS0tCi0JICBFbmFibGUgc3VwcG9ydCBmb3IgUmVtb3RlIENvbnRyb2xsZXJzIG9uIExpbnV4LiBUaGlzIGlzCi0JICBuZWVkZWQgaW4gb3JkZXIgdG8gc3VwcG9ydCBzZXZlcmFsIHZpZGVvIGNhcHR1cmUgYWRhcHRlcnMuCi0KLQkgIEVuYWJsZSB0aGlzIG9wdGlvbiBpZiB5b3UgaGF2ZSBhIHZpZGVvIGNhcHR1cmUgYm9hcmQgZXZlbgotCSAgaWYgeW91IGRvbid0IG5lZWQgSVIsIGFzIG90aGVyd2lzZSwgeW91IG1heSBub3QgYmUgYWJsZSB0bwotCSAgY29tcGlsZSB0aGUgZHJpdmVyIGZvciB5b3VyIGFkYXB0ZXIuCi0KLWNvbmZpZyBWSURFT19JUgotCXRyaXN0YXRlCi0JZGVwZW5kcyBvbiBJUl9DT1JFCi0JZGVmYXVsdCBJUl9DT1JFCi0KLWlmIElSX0NPUkUKLQotY29uZmlnIExJUkMKLQl0cmlzdGF0ZQotCWRlZmF1bHQgeQotCi0JLS0taGVscC0tLQotCSAgIEVuYWJsZSB0aGlzIG9wdGlvbiB0byBidWlsZCB0aGUgTGludXggSW5mcmFyZWQgUmVtb3RlCi0JICAgQ29udHJvbCAoTElSQykgY29yZSBkZXZpY2UgaW50ZXJmYWNlIGRyaXZlci4gVGhlIExJUkMKLQkgICBpbnRlcmZhY2UgcGFzc2VzIHJhdyBJUiB0byBhbmQgZnJvbSB1c2Vyc3BhY2UsIHdoZXJlIHRoZQotCSAgIExJUkMgZGFlbW9uIGhhbmRsZXMgcHJvdG9jb2wgZGVjb2RpbmcgZm9yIElSIHJlY2VwdGlvbiBhbmQKLQkgICBlbmNvZGluZyBmb3IgSVIgdHJhbnNtaXR0aW5nIChha2EgImJsYXN0aW5nIikuCi0KLXNvdXJjZSAiZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL0tjb25maWciCi0KLWNvbmZpZyBJUl9ORUNfREVDT0RFUgotCXRyaXN0YXRlICJFbmFibGUgSVIgcmF3IGRlY29kZXIgZm9yIHRoZSBORUMgcHJvdG9jb2wiCi0JZGVwZW5kcyBvbiBJUl9DT1JFCi0Jc2VsZWN0IEJJVFJFVkVSU0UKLQlkZWZhdWx0IHkKLQotCS0tLWhlbHAtLS0KLQkgICBFbmFibGUgdGhpcyBvcHRpb24gaWYgeW91IGhhdmUgSVIgd2l0aCBORUMgcHJvdG9jb2wsIGFuZAotCSAgIGlmIHRoZSBJUiBpcyBkZWNvZGVkIGluIHNvZnR3YXJlCi0KLWNvbmZpZyBJUl9SQzVfREVDT0RFUgotCXRyaXN0YXRlICJFbmFibGUgSVIgcmF3IGRlY29kZXIgZm9yIHRoZSBSQy01IHByb3RvY29sIgotCWRlcGVuZHMgb24gSVJfQ09SRQotCXNlbGVjdCBCSVRSRVZFUlNFCi0JZGVmYXVsdCB5Ci0KLQktLS1oZWxwLS0tCi0JICAgRW5hYmxlIHRoaXMgb3B0aW9uIGlmIHlvdSBoYXZlIElSIHdpdGggUkMtNSBwcm90b2NvbCwgYW5kCi0JICAgaWYgdGhlIElSIGlzIGRlY29kZWQgaW4gc29mdHdhcmUKLQotY29uZmlnIElSX1JDNl9ERUNPREVSCi0JdHJpc3RhdGUgIkVuYWJsZSBJUiByYXcgZGVjb2RlciBmb3IgdGhlIFJDNiBwcm90b2NvbCIKLQlkZXBlbmRzIG9uIElSX0NPUkUKLQlzZWxlY3QgQklUUkVWRVJTRQotCWRlZmF1bHQgeQotCi0JLS0taGVscC0tLQotCSAgIEVuYWJsZSB0aGlzIG9wdGlvbiBpZiB5b3UgaGF2ZSBhbiBpbmZyYXJlZCByZW1vdGUgY29udHJvbCB3aGljaAotCSAgIHVzZXMgdGhlIFJDNiBwcm90b2NvbCwgYW5kIHlvdSBuZWVkIHNvZnR3YXJlIGRlY29kaW5nIHN1cHBvcnQuCi0KLWNvbmZpZyBJUl9KVkNfREVDT0RFUgotCXRyaXN0YXRlICJFbmFibGUgSVIgcmF3IGRlY29kZXIgZm9yIHRoZSBKVkMgcHJvdG9jb2wiCi0JZGVwZW5kcyBvbiBJUl9DT1JFCi0Jc2VsZWN0IEJJVFJFVkVSU0UKLQlkZWZhdWx0IHkKLQotCS0tLWhlbHAtLS0KLQkgICBFbmFibGUgdGhpcyBvcHRpb24gaWYgeW91IGhhdmUgYW4gaW5mcmFyZWQgcmVtb3RlIGNvbnRyb2wgd2hpY2gKLQkgICB1c2VzIHRoZSBKVkMgcHJvdG9jb2wsIGFuZCB5b3UgbmVlZCBzb2Z0d2FyZSBkZWNvZGluZyBzdXBwb3J0LgotCi1jb25maWcgSVJfU09OWV9ERUNPREVSCi0JdHJpc3RhdGUgIkVuYWJsZSBJUiByYXcgZGVjb2RlciBmb3IgdGhlIFNvbnkgcHJvdG9jb2wiCi0JZGVwZW5kcyBvbiBJUl9DT1JFCi0JZGVmYXVsdCB5Ci0KLQktLS1oZWxwLS0tCi0JICAgRW5hYmxlIHRoaXMgb3B0aW9uIGlmIHlvdSBoYXZlIGFuIGluZnJhcmVkIHJlbW90ZSBjb250cm9sIHdoaWNoCi0JICAgdXNlcyB0aGUgU29ueSBwcm90b2NvbCwgYW5kIHlvdSBuZWVkIHNvZnR3YXJlIGRlY29kaW5nIHN1cHBvcnQuCi0KLWNvbmZpZyBJUl9SQzVfU1pfREVDT0RFUgotCXRyaXN0YXRlICJFbmFibGUgSVIgcmF3IGRlY29kZXIgZm9yIHRoZSBSQy01IChzdHJlYW16YXApIHByb3RvY29sIgotCWRlcGVuZHMgb24gSVJfQ09SRQotCXNlbGVjdCBCSVRSRVZFUlNFCi0JZGVmYXVsdCB5Ci0KLQktLS1oZWxwLS0tCi0JICAgRW5hYmxlIHRoaXMgb3B0aW9uIGlmIHlvdSBoYXZlIElSIHdpdGggUkMtNSAoc3RyZWFtemFwKSBwcm90b2NvbCwKLQkgICBhbmQgaWYgdGhlIElSIGlzIGRlY29kZWQgaW4gc29mdHdhcmUuIChUaGUgU3RyZWFtemFwIFBDIFJlbW90ZQotCSAgIHVzZXMgYW4gSVIgcHJvdG9jb2wgdGhhdCBpcyBhbG1vc3Qgc3RhbmRhcmQgUkMtNSwgYnV0IG5vdCBxdWl0ZSwKLQkgICBhcyBpdCB1c2VzIGFuIGFkZGl0aW9uYWwgYml0KS4KLQotY29uZmlnIElSX0xJUkNfQ09ERUMKLQl0cmlzdGF0ZSAiRW5hYmxlIElSIHRvIExJUkMgYnJpZGdlIgotCWRlcGVuZHMgb24gSVJfQ09SRQotCWRlcGVuZHMgb24gTElSQwotCWRlZmF1bHQgeQotCi0JLS0taGVscC0tLQotCSAgIEVuYWJsZSB0aGlzIG9wdGlvbiB0byBwYXNzIHJhdyBJUiB0byBhbmQgZnJvbSB1c2Vyc3BhY2UgdmlhCi0JICAgdGhlIExJUkMgaW50ZXJmYWNlLgotCi1jb25maWcgSVJfRU5FCi0JdHJpc3RhdGUgIkVORSBlSG9tZSBSZWNlaXZlci9UcmFuc2NlaXZlciAocG5wIGlkOiBFTkUwMTAwL0VORTAyeHh4KSIKLQlkZXBlbmRzIG9uIFBOUAotCWRlcGVuZHMgb24gSVJfQ09SRQotCS0tLWhlbHAtLS0KLQkgICBTYXkgWSBoZXJlIHRvIGVuYWJsZSBzdXBwb3J0IGZvciBpbnRlZ3JhdGVkIGluZnJhcmVkIHJlY2VpdmVyCi0JICAgL3RyYW5zY2VpdmVyIG1hZGUgYnkgRU5FLgotCi0JICAgWW91IGNhbiBzZWUgaWYgeW91IGhhdmUgaXQgYnkgbG9va2luZyBhdCBsc3BucCBvdXRwdXQuCi0JICAgT3V0cHV0IHNob3VsZCBpbmNsdWRlIEVORTAxMDAgRU5FMDIwMCBvciBzb21ldGhpbmcgc2ltaWxhci4KLQotCSAgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBlbmVfaXIuCi0KLWNvbmZpZyBJUl9JTU9OCi0JdHJpc3RhdGUgIlNvdW5kR3JhcGggaU1PTiBSZWNlaXZlciBhbmQgRGlzcGxheSIKLQlkZXBlbmRzIG9uIFVTQl9BUkNIX0hBU19IQ0QKLQlkZXBlbmRzIG9uIElSX0NPUkUKLQlzZWxlY3QgVVNCCi0JLS0taGVscC0tLQotCSAgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIGEgU291bmRHcmFwaCBpTU9OIChha2EgQW50ZWMgVmVyaXMpCi0JICAgSVIgUmVjZWl2ZXIgYW5kL29yIExDRC9WRkQvVkdBIGRpc3BsYXkuCi0KLQkgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgaW1vbi4KLQotY29uZmlnIElSX01DRVVTQgotCXRyaXN0YXRlICJXaW5kb3dzIE1lZGlhIENlbnRlciBFZC4gZUhvbWUgSW5mcmFyZWQgVHJhbnNjZWl2ZXIiCi0JZGVwZW5kcyBvbiBVU0JfQVJDSF9IQVNfSENECi0JZGVwZW5kcyBvbiBJUl9DT1JFCi0Jc2VsZWN0IFVTQgotCS0tLWhlbHAtLS0KLQkgICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBhIFdpbmRvd3MgTWVkaWEgQ2VudGVyIEVkaXRpb24KLQkgICBlSG9tZSBJbmZyYXJlZCBUcmFuc2NlaXZlci4KLQotCSAgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBtY2V1c2IuCi0KLWNvbmZpZyBJUl9OVVZPVE9OCi0JdHJpc3RhdGUgIk51dm90b24gdzgzNng3aGcgQ29uc3VtZXIgSW5mcmFyZWQgVHJhbnNjZWl2ZXIiCi0JZGVwZW5kcyBvbiBQTlAKLQlkZXBlbmRzIG9uIElSX0NPUkUKLQktLS1oZWxwLS0tCi0JICAgU2F5IFkgaGVyZSB0byBlbmFibGUgc3VwcG9ydCBmb3IgaW50ZWdyYXRlZCBpbmZyYXJlZCByZWNlaXZlcgotCSAgIC90cmFuc2NpZXZlciBtYWRlIGJ5IE51dm90b24gKGZvcm1lcmx5IFdpbmJvbmQpLiBUaGlzIGNoaXAgaXMKLQkgICBmb3VuZCBpbiB0aGUgQVNSb2NrIElPTiAzMzBIVCwgYXMgd2VsbCBhcyBhc3NvcnRlZCBJbnRlbAotCSAgIERQNTUtc2VyaWVzIG1vdGhlcmJvYXJkcyAoYW5kIG9mIGNvdXJzZSwgcG9zc2libHkgb3RoZXJzKS4KLQotCSAgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBudXZvdG9uLWNpci4KLQotY29uZmlnIElSX1NUUkVBTVpBUAotCXRyaXN0YXRlICJTdHJlYW16YXAgUEMgUmVtb3RlIElSIFJlY2VpdmVyIgotCWRlcGVuZHMgb24gVVNCX0FSQ0hfSEFTX0hDRAotCWRlcGVuZHMgb24gSVJfQ09SRQotCXNlbGVjdCBVU0IKLQktLS1oZWxwLS0tCi0JICAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgYSBTdHJlYW16YXAgUEMgUmVtb3RlCi0JICAgSW5mcmFyZWQgUmVjZWl2ZXIuCi0KLQkgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc3RyZWFtemFwLgotCi1lbmRpZiAjSVJfQ09SRQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9JUi9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvSVIvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5NTc0YWQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS9JUi9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLWlyLWNvbW1vbi1vYmpzICA6PSBpci1mdW5jdGlvbnMubwotaXItY29yZS1vYmpzCTo9IGlyLWtleXRhYmxlLm8gaXItc3lzZnMubyBpci1yYXctZXZlbnQubyByYy1tYXAubwotCi1vYmoteSArPSBrZXltYXBzLwotCi1vYmotJChDT05GSUdfSVJfQ09SRSkgKz0gaXItY29yZS5vCi1vYmotJChDT05GSUdfVklERU9fSVIpICs9IGlyLWNvbW1vbi5vCi1vYmotJChDT05GSUdfTElSQykgKz0gbGlyY19kZXYubwotb2JqLSQoQ09ORklHX0lSX05FQ19ERUNPREVSKSArPSBpci1uZWMtZGVjb2Rlci5vCi1vYmotJChDT05GSUdfSVJfUkM1X0RFQ09ERVIpICs9IGlyLXJjNS1kZWNvZGVyLm8KLW9iai0kKENPTkZJR19JUl9SQzZfREVDT0RFUikgKz0gaXItcmM2LWRlY29kZXIubwotb2JqLSQoQ09ORklHX0lSX0pWQ19ERUNPREVSKSArPSBpci1qdmMtZGVjb2Rlci5vCi1vYmotJChDT05GSUdfSVJfU09OWV9ERUNPREVSKSArPSBpci1zb255LWRlY29kZXIubwotb2JqLSQoQ09ORklHX0lSX1JDNV9TWl9ERUNPREVSKSArPSBpci1yYzUtc3otZGVjb2Rlci5vCi1vYmotJChDT05GSUdfSVJfTElSQ19DT0RFQykgKz0gaXItbGlyYy1jb2RlYy5vCi0KLSMgc3RhbmQtYWxvbmUgSVIgcmVjZWl2ZXJzL3RyYW5zbWl0dGVycwotb2JqLSQoQ09ORklHX0lSX0lNT04pICs9IGltb24ubwotb2JqLSQoQ09ORklHX0lSX01DRVVTQikgKz0gbWNldXNiLm8KLW9iai0kKENPTkZJR19JUl9OVVZPVE9OKSArPSBudXZvdG9uLWNpci5vCi1vYmotJChDT05GSUdfSVJfRU5FKSArPSBlbmVfaXIubwotb2JqLSQoQ09ORklHX0lSX1NUUkVBTVpBUCkgKz0gc3RyZWFtemFwLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvSVIvZW5lX2lyLmMgYi9kcml2ZXJzL21lZGlhL0lSL2VuZV9pci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NjM3YmFiLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvSVIvZW5lX2lyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjE3ICswLDAgQEAKLS8qCi0gKiBkcml2ZXIgZm9yIEVORSBLQjM5MjYgQi9DL0QvRS9GIENJUiAocG5wIGlkOiBFTkUwWFhYKQotICoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBNYXhpbSBMZXZpdHNreSA8bWF4aW1sZXZpdHNreUBnbWFpbC5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQotICogTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNwotICogVVNBCi0gKgotICogU3BlY2lhbCB0aGFua3MgdG86Ci0gKiAgIFNhbWkgUi4gPG1hZXNlc2FtaUBnbWFpbC5jb20+IGZvciBsb3Qgb2YgaGVscCBpbiBkZWJ1Z2dpbmcgYW5kIHRoZXJlZm9yZQotICogICAgYnJpbmdpbmcgdG8gbGlmZSBzdXBwb3J0IGZvciB0cmFuc21pc3Npb24gJiBsZWFybmluZyBtb2RlLgotICoKLSAqICAgQ2hhcmxpZSBBbmRyZXdzIDxjaGFybGlldGhlcGlsb3RAZ29vZ2xlbWFpbC5jb20+IGZvciBsb3RzIG9mIGhlbHAgaW4KLSAqICAgYnJpbmdpbmcgdXAgdGhlIHN1cHBvcnQgb2YgbmV3IGZpcm13YXJlIGJ1ZmZlciB0aGF0IGlzIHBvcHVsYXIKLSAqICAgb24gbGF0ZXN0IG5vdGVib29rcwotICoKLSAqICAgRU5FIGZvciBwYXJ0aWFsIGRldmljZSBkb2N1bWVudGF0aW9uCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9wbnAuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+Ci0jaW5jbHVkZSA8bWVkaWEvaXItY29yZS5oPgotI2luY2x1ZGUgPG1lZGlhL2lyLWNvbW1vbi5oPgotI2luY2x1ZGUgImVuZV9pci5oIgotCi1zdGF0aWMgaW50IHNhbXBsZV9wZXJpb2Q7Ci1zdGF0aWMgYm9vbCBsZWFybmluZ19tb2RlX2ZvcmNlOwotc3RhdGljIGludCBkZWJ1ZzsKLXN0YXRpYyBib29sIHR4c2ltOwotCi1zdGF0aWMgdm9pZCBlbmVfc2V0X3JlZ19hZGRyKHN0cnVjdCBlbmVfZGV2aWNlICpkZXYsIHUxNiByZWcpCi17Ci0Jb3V0YihyZWcgPj4gOCwgZGV2LT5od19pbyArIEVORV9BRERSX0hJKTsKLQlvdXRiKHJlZyAmIDB4RkYsIGRldi0+aHdfaW8gKyBFTkVfQUREUl9MTyk7Ci19Ci0KLS8qIHJlYWQgYSBoYXJkd2FyZSByZWdpc3RlciAqLwotc3RhdGljIHU4IGVuZV9yZWFkX3JlZyhzdHJ1Y3QgZW5lX2RldmljZSAqZGV2LCB1MTYgcmVnKQotewotCXU4IHJldHZhbDsKLQllbmVfc2V0X3JlZ19hZGRyKGRldiwgcmVnKTsKLQlyZXR2YWwgPSBpbmIoZGV2LT5od19pbyArIEVORV9JTyk7Ci0JZGJnX3JlZ3MoInJlZyAlMDR4ID09ICUwMngiLCByZWcsIHJldHZhbCk7Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQotLyogd3JpdGUgYSBoYXJkd2FyZSByZWdpc3RlciAqLwotc3RhdGljIHZvaWQgZW5lX3dyaXRlX3JlZyhzdHJ1Y3QgZW5lX2RldmljZSAqZGV2LCB1MTYgcmVnLCB1OCB2YWx1ZSkKLXsKLQlkYmdfcmVncygicmVnICUwNHggPC0gJTAyeCIsIHJlZywgdmFsdWUpOwotCWVuZV9zZXRfcmVnX2FkZHIoZGV2LCByZWcpOwotCW91dGIodmFsdWUsIGRldi0+aHdfaW8gKyBFTkVfSU8pOwotfQotCi0vKiBTZXQgYml0cyBpbiBoYXJkd2FyZSByZWdpc3RlciAqLwotc3RhdGljIHZvaWQgZW5lX3NldF9yZWdfbWFzayhzdHJ1Y3QgZW5lX2RldmljZSAqZGV2LCB1MTYgcmVnLCB1OCBtYXNrKQotewotCWRiZ19yZWdzKCJyZWcgJTA0eCB8PSAlMDJ4IiwgcmVnLCBtYXNrKTsKLQllbmVfc2V0X3JlZ19hZGRyKGRldiwgcmVnKTsKLQlvdXRiKGluYihkZXYtPmh3X2lvICsgRU5FX0lPKSB8IG1hc2ssIGRldi0+aHdfaW8gKyBFTkVfSU8pOwotfQotCi0vKiBDbGVhciBiaXRzIGluIGhhcmR3YXJlIHJlZ2lzdGVyICovCi1zdGF0aWMgdm9pZCBlbmVfY2xlYXJfcmVnX21hc2soc3RydWN0IGVuZV9kZXZpY2UgKmRldiwgdTE2IHJlZywgdTggbWFzaykKLXsKLQlkYmdfcmVncygicmVnICUwNHggJj0gfiUwMnggIiwgcmVnLCBtYXNrKTsKLQllbmVfc2V0X3JlZ19hZGRyKGRldiwgcmVnKTsKLQlvdXRiKGluYihkZXYtPmh3X2lvICsgRU5FX0lPKSAmIH5tYXNrLCBkZXYtPmh3X2lvICsgRU5FX0lPKTsKLX0KLQotLyogQSBoZWxwZXIgdG8gc2V0L2NsZWFyIGEgYml0IGluIHJlZ2lzdGVyIGFjY29yZGluZyB0byBib29sZWFuIHZhcmlhYmxlICovCi1zdGF0aWMgdm9pZCBlbmVfc2V0X2NsZWFyX3JlZ19tYXNrKHN0cnVjdCBlbmVfZGV2aWNlICpkZXYsIHUxNiByZWcsIHU4IG1hc2ssCi0JCQkJCQkJCWJvb2wgc2V0KQotewotCWlmIChzZXQpCi0JCWVuZV9zZXRfcmVnX21hc2soZGV2LCByZWcsIG1hc2spOwotCWVsc2UKLQkJZW5lX2NsZWFyX3JlZ19tYXNrKGRldiwgcmVnLCBtYXNrKTsKLX0KLQotLyogZGV0ZWN0IGhhcmR3YXJlIGZlYXR1cmVzICovCi1zdGF0aWMgaW50IGVuZV9od19kZXRlY3Qoc3RydWN0IGVuZV9kZXZpY2UgKmRldikKLXsKLQl1OCBjaGlwX21ham9yLCBjaGlwX21pbm9yOwotCXU4IGh3X3JldmlzaW9uLCBvbGRfdmVyOwotCXU4IGZ3X3JlZzIsIGZ3X3JlZzE7Ci0KLQllbmVfY2xlYXJfcmVnX21hc2soZGV2LCBFTkVfRUNTVFMsIEVORV9FQ1NUU19SU1JWRCk7Ci0JY2hpcF9tYWpvciA9IGVuZV9yZWFkX3JlZyhkZXYsIEVORV9FQ1ZFUl9NQUpPUik7Ci0JY2hpcF9taW5vciA9IGVuZV9yZWFkX3JlZyhkZXYsIEVORV9FQ1ZFUl9NSU5PUik7Ci0JZW5lX3NldF9yZWdfbWFzayhkZXYsIEVORV9FQ1NUUywgRU5FX0VDU1RTX1JTUlZEKTsKLQotCWh3X3JldmlzaW9uID0gZW5lX3JlYWRfcmVnKGRldiwgRU5FX0VDSFYpOwotCW9sZF92ZXIgPSBlbmVfcmVhZF9yZWcoZGV2LCBFTkVfSFdfVkVSX09MRCk7Ci0KLQlkZXYtPnBsbF9mcmVxID0gKGVuZV9yZWFkX3JlZyhkZXYsIEVORV9QTExGUkgpIDw8IDQpICsKLQkJKGVuZV9yZWFkX3JlZyhkZXYsIEVORV9QTExGUkwpID4+IDQpOwotCi0JaWYgKHNhbXBsZV9wZXJpb2QgIT0gRU5FX0RFRkFVTFRfU0FNUExFX1BFUklPRCkKLQkJZGV2LT5yeF9wZXJpb2RfYWRqdXN0ID0KLQkJCWRldi0+cGxsX2ZyZXEgPT0gRU5FX0RFRkFVTFRfUExMX0ZSRVEgPyAyIDogNDsKLQotCWlmIChod19yZXZpc2lvbiA9PSAweEZGKSB7Ci0JCWVuZV93YXJuKCJkZXZpY2Ugc2VlbXMgdG8gYmUgZGlzYWJsZWQiKTsKLQkJZW5lX3dhcm4oInNlbmQgYSBtYWlsIHRvIGxpcmMtbGlzdEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQiKTsKLQkJZW5lX3dhcm4oInBsZWFzZSBhdHRhY2ggb3V0cHV0IG9mIGFjcGlkdW1wIGFuZCBkbWlkZWNvZGUiKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JZW5lX25vdGljZSgiY2hpcCBpcyAweCUwMnglMDJ4IC0ga2J2ZXIgPSAweCUwMngsIHJldiA9IDB4JTAyeCIsCi0JCWNoaXBfbWFqb3IsIGNoaXBfbWlub3IsIG9sZF92ZXIsIGh3X3JldmlzaW9uKTsKLQotCWVuZV9ub3RpY2UoIlBMTCBmcmVxID0gJWQiLCBkZXYtPnBsbF9mcmVxKTsKLQotCWlmIChjaGlwX21ham9yID09IDB4MzMpIHsKLQkJZW5lX3dhcm4oImNoaXBzIDB4MzN4eCBhcmVuJ3Qgc3VwcG9ydGVkIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCWlmIChjaGlwX21ham9yID09IDB4MzkgJiYgY2hpcF9taW5vciA9PSAweDI2ICYmIGh3X3JldmlzaW9uID09IDB4QzApIHsKLQkJZGV2LT5od19yZXZpc2lvbiA9IEVORV9IV19DOwotCQllbmVfbm90aWNlKCJLQjM5MjZDIGRldGVjdGVkIik7Ci0JfSBlbHNlIGlmIChvbGRfdmVyID09IDB4MjQgJiYgaHdfcmV2aXNpb24gPT0gMHhDMCkgewotCQlkZXYtPmh3X3JldmlzaW9uID0gRU5FX0hXX0I7Ci0JCWVuZV9ub3RpY2UoIktCMzkyNkIgZGV0ZWN0ZWQiKTsKLQl9IGVsc2UgewotCQlkZXYtPmh3X3JldmlzaW9uID0gRU5FX0hXX0Q7Ci0JCWVuZV9ub3RpY2UoIktCMzkyNkQgb3IgaGlnaGVyIGRldGVjdGVkIik7Ci0JfQotCi0JLyogZGV0ZWN0IGZlYXR1cmVzIGhhcmR3YXJlIHN1cHBvcnRzICovCi0JaWYgKGRldi0+aHdfcmV2aXNpb24gPCBFTkVfSFdfQykKLQkJcmV0dXJuIDA7Ci0KLQlmd19yZWcxID0gZW5lX3JlYWRfcmVnKGRldiwgRU5FX0ZXMSk7Ci0JZndfcmVnMiA9IGVuZV9yZWFkX3JlZyhkZXYsIEVORV9GVzIpOwotCi0JZW5lX25vdGljZSgiRmlybXdhcmUgcmVnczogJTAyeCAlMDJ4IiwgZndfcmVnMSwgZndfcmVnMik7Ci0KLQlkZXYtPmh3X3VzZV9ncGlvXzBhID0gISEoZndfcmVnMiAmIEVORV9GVzJfR1AwQSk7Ci0JZGV2LT5od19sZWFybmluZ19hbmRfdHhfY2FwYWJsZSA9ICEhKGZ3X3JlZzIgJiBFTkVfRlcyX0xFQVJOSU5HKTsKLQlkZXYtPmh3X2V4dHJhX2J1ZmZlciA9ICEhKGZ3X3JlZzEgJiBFTkVfRlcxX0hBU19FWFRSQV9CVUYpOwotCi0JaWYgKGRldi0+aHdfbGVhcm5pbmdfYW5kX3R4X2NhcGFibGUpCi0JCWRldi0+aHdfZmFuX2lucHV0ID0gISEoZndfcmVnMiAmIEVORV9GVzJfRkFOX0lOUFVUKTsKLQotCWVuZV9ub3RpY2UoIkhhcmR3YXJlIGZlYXR1cmVzOiIpOwotCi0JaWYgKGRldi0+aHdfbGVhcm5pbmdfYW5kX3R4X2NhcGFibGUpIHsKLQkJZW5lX25vdGljZSgiKiBTdXBwb3J0cyB0cmFuc21pdHRpbmcgJiBsZWFybmluZyBtb2RlIik7Ci0JCWVuZV9ub3RpY2UoIiAgIFRoaXMgZmVhdHVyZSBpcyByYXJlIGFuZCB0aGVyZWZvcmUsIik7Ci0JCWVuZV9ub3RpY2UoIiAgIHlvdSBhcmUgd2VsY29tZSB0byB0ZXN0IGl0LCIpOwotCQllbmVfbm90aWNlKCIgICBhbmQvb3IgY29udGFjdCB0aGUgYXV0aG9yIHZpYToiKTsKLQkJZW5lX25vdGljZSgiICAgbGlyYy1saXN0QGxpc3RzLnNvdXJjZWZvcmdlLm5ldCIpOwotCQllbmVfbm90aWNlKCIgICBvciBtYXhpbWxldml0c2t5QGdtYWlsLmNvbSIpOwotCi0JCWVuZV9ub3RpY2UoIiogVXNlcyBHUElPICVzIGZvciBJUiByYXcgaW5wdXQiLAotCQkJZGV2LT5od191c2VfZ3Bpb18wYSA/ICI0MCIgOiAiMEEiKTsKLQotCQlpZiAoZGV2LT5od19mYW5faW5wdXQpCi0JCQllbmVfbm90aWNlKCIqIFVzZXMgdW51c2VkIGZhbiBmZWVkYmFjayBpbnB1dCBhcyBzb3VyY2UiCi0JCQkJCSIgb2YgZGVtb2R1bGF0ZWQgSVIgZGF0YSIpOwotCX0KLQotCWlmICghZGV2LT5od19mYW5faW5wdXQpCi0JCWVuZV9ub3RpY2UoIiogVXNlcyBHUElPICVzIGZvciBJUiBkZW1vZHVsYXRlZCBpbnB1dCIsCi0JCQlkZXYtPmh3X3VzZV9ncGlvXzBhID8gIjBBIiA6ICI0MCIpOwotCi0JaWYgKGRldi0+aHdfZXh0cmFfYnVmZmVyKQotCQllbmVfbm90aWNlKCIqIFVzZXMgbmV3IHN0eWxlIGlucHV0IGJ1ZmZlciIpOwotCXJldHVybiAwOwotfQotCi0vKiBSZWFkIHByb3Blcml0aWVzIG9mIGh3IHNhbXBsZSBidWZmZXIgKi8KLXN0YXRpYyB2b2lkIGVuZV9yeF9zZXR1cF9od19idWZmZXIoc3RydWN0IGVuZV9kZXZpY2UgKmRldikKLXsKLQl1MTYgdG1wOwotCi0JZW5lX3J4X3JlYWRfaHdfcG9pbnRlcihkZXYpOwotCWRldi0+cl9wb2ludGVyID0gZGV2LT53X3BvaW50ZXI7Ci0KLQlpZiAoIWRldi0+aHdfZXh0cmFfYnVmZmVyKSB7Ci0JCWRldi0+YnVmZmVyX2xlbiA9IEVORV9GV19QQUNLRVRfU0laRSAqIDI7Ci0JCXJldHVybjsKLQl9Ci0KLQl0bXAgPSBlbmVfcmVhZF9yZWcoZGV2LCBFTkVfRldfU0FNUExFX0JVRkZFUik7Ci0JdG1wIHw9IGVuZV9yZWFkX3JlZyhkZXYsIEVORV9GV19TQU1QTEVfQlVGRkVSKzEpIDw8IDg7Ci0JZGV2LT5leHRyYV9idWYxX2FkZHJlc3MgPSB0bXA7Ci0KLQlkZXYtPmV4dHJhX2J1ZjFfbGVuID0gZW5lX3JlYWRfcmVnKGRldiwgRU5FX0ZXX1NBTVBMRV9CVUZGRVIgKyAyKTsKLQotCXRtcCA9IGVuZV9yZWFkX3JlZyhkZXYsIEVORV9GV19TQU1QTEVfQlVGRkVSICsgMyk7Ci0JdG1wIHw9IGVuZV9yZWFkX3JlZyhkZXYsIEVORV9GV19TQU1QTEVfQlVGRkVSICsgNCkgPDwgODsKLQlkZXYtPmV4dHJhX2J1ZjJfYWRkcmVzcyA9IHRtcDsKLQotCWRldi0+ZXh0cmFfYnVmMl9sZW4gPSBlbmVfcmVhZF9yZWcoZGV2LCBFTkVfRldfU0FNUExFX0JVRkZFUiArIDUpOwotCi0JZGV2LT5idWZmZXJfbGVuID0gZGV2LT5leHRyYV9idWYxX2xlbiArIGRldi0+ZXh0cmFfYnVmMl9sZW4gKyA4OwotCi0JZW5lX25vdGljZSgiSGFyZHdhcmUgdXNlcyAyIGV4dGVuZGVkIGJ1ZmZlcnM6Iik7Ci0JZW5lX25vdGljZSgiICAweCUwNHggLSBsZW4gOiAlZCIsIGRldi0+ZXh0cmFfYnVmMV9hZGRyZXNzLAotCQkJCQkJZGV2LT5leHRyYV9idWYxX2xlbik7Ci0JZW5lX25vdGljZSgiICAweCUwNHggLSBsZW4gOiAlZCIsIGRldi0+ZXh0cmFfYnVmMl9hZGRyZXNzLAotCQkJCQkJZGV2LT5leHRyYV9idWYyX2xlbik7Ci0KLQllbmVfbm90aWNlKCJUb3RhbCBidWZmZXIgbGVuID0gJWQiLCBkZXYtPmJ1ZmZlcl9sZW4pOwotCi0JaWYgKGRldi0+YnVmZmVyX2xlbiA+IDY0IHx8IGRldi0+YnVmZmVyX2xlbiA8IDE2KQotCQlnb3RvIGVycm9yOwotCi0JaWYgKGRldi0+ZXh0cmFfYnVmMV9hZGRyZXNzID4gMHhGQkZDIHx8Ci0JCQkJCWRldi0+ZXh0cmFfYnVmMV9hZGRyZXNzIDwgMHhFQzAwKQotCQlnb3RvIGVycm9yOwotCi0JaWYgKGRldi0+ZXh0cmFfYnVmMl9hZGRyZXNzID4gMHhGQkZDIHx8Ci0JCQkJCWRldi0+ZXh0cmFfYnVmMl9hZGRyZXNzIDwgMHhFQzAwKQotCQlnb3RvIGVycm9yOwotCi0JaWYgKGRldi0+cl9wb2ludGVyID4gZGV2LT5idWZmZXJfbGVuKQotCQlnb3RvIGVycm9yOwotCi0JZW5lX3NldF9yZWdfbWFzayhkZXYsIEVORV9GVzEsIEVORV9GVzFfRVhUUkFfQlVGX0hORCk7Ci0JcmV0dXJuOwotZXJyb3I6Ci0JZW5lX3dhcm4oIkVycm9yIHZhbGlkYXRpbmcgZXh0cmEgYnVmZmVycywgZGV2aWNlIHByb2JhYmx5IHdvbid0IHdvcmsiKTsKLQlkZXYtPmh3X2V4dHJhX2J1ZmZlciA9IGZhbHNlOwotCWVuZV9jbGVhcl9yZWdfbWFzayhkZXYsIEVORV9GVzEsIEVORV9GVzFfRVhUUkFfQlVGX0hORCk7Ci19Ci0KLQotLyogUmVzdG9yZSB0aGUgcG9pbnRlcnMgdG8gZXh0cmEgYnVmZmVycyAtIHRvIG1ha2UgbW9kdWxlIHJlbG9hZCB3b3JrKi8KLXN0YXRpYyB2b2lkIGVuZV9yeF9yZXN0b3JlX2h3X2J1ZmZlcihzdHJ1Y3QgZW5lX2RldmljZSAqZGV2KQotewotCWlmICghZGV2LT5od19leHRyYV9idWZmZXIpCi0JCXJldHVybjsKLQotCWVuZV93cml0ZV9yZWcoZGV2LCBFTkVfRldfU0FNUExFX0JVRkZFUiArIDAsCi0JCQkJZGV2LT5leHRyYV9idWYxX2FkZHJlc3MgJiAweEZGKTsKLQllbmVfd3JpdGVfcmVnKGRldiwgRU5FX0ZXX1NBTVBMRV9CVUZGRVIgKyAxLAotCQkJCWRldi0+ZXh0cmFfYnVmMV9hZGRyZXNzID4+IDgpOwotCWVuZV93cml0ZV9yZWcoZGV2LCBFTkVfRldfU0FNUExFX0JVRkZFUiArIDIsIGRldi0+ZXh0cmFfYnVmMV9sZW4pOwotCi0JZW5lX3dyaXRlX3JlZyhkZXYsIEVORV9GV19TQU1QTEVfQlVGRkVSICsgMywKLQkJCQlkZXYtPmV4dHJhX2J1ZjJfYWRkcmVzcyAmIDB4RkYpOwotCWVuZV93cml0ZV9yZWcoZGV2LCBFTkVfRldfU0FNUExFX0JVRkZFUiArIDQsCi0JCQkJZGV2LT5leHRyYV9idWYyX2FkZHJlc3MgPj4gOCk7Ci0JZW5lX3dyaXRlX3JlZyhkZXYsIEVORV9GV19TQU1QTEVfQlVGRkVSICsgNSwKLQkJCQlkZXYtPmV4dHJhX2J1ZjJfbGVuKTsKLQllbmVfY2xlYXJfcmVnX21hc2soZGV2LCBFTkVfRlcxLCBFTkVfRlcxX0VYVFJBX0JVRl9ITkQpOwotfQotCi0vKiBSZWFkIGhhcmR3YXJlIHdyaXRlIHBvaW50ZXIgKi8KLXN0YXRpYyB2b2lkIGVuZV9yeF9yZWFkX2h3X3BvaW50ZXIoc3RydWN0IGVuZV9kZXZpY2UgKmRldikKLXsKLQlpZiAoZGV2LT5od19leHRyYV9idWZmZXIpCi0JCWRldi0+d19wb2ludGVyID0gZW5lX3JlYWRfcmVnKGRldiwgRU5FX0ZXX1JYX1BPSU5URVIpOwotCWVsc2UKLQkJZGV2LT53X3BvaW50ZXIgPSBlbmVfcmVhZF9yZWcoZGV2LCBFTkVfRlcyKQotCQkJJiBFTkVfRlcyX0JVRl9XUFRSID8gMCA6IEVORV9GV19QQUNLRVRfU0laRTsKLQotCWRiZ192ZXJib3NlKCJSQjogSFcgd3JpdGUgcG9pbnRlcjogJTAyeCwgZHJpdmVyIHJlYWQgcG9pbnRlcjogJTAyeCIsCi0JCWRldi0+d19wb2ludGVyLCBkZXYtPnJfcG9pbnRlcik7Ci19Ci0KLS8qIEdldHMgYWRkcmVzcyBvZiBuZXh0IHNhbXBsZSBmcm9tIEhXIHJpbmcgYnVmZmVyICovCi1zdGF0aWMgaW50IGVuZV9yeF9nZXRfc2FtcGxlX3JlZyhzdHJ1Y3QgZW5lX2RldmljZSAqZGV2KQotewotCWludCByX3BvaW50ZXI7Ci0KLQlpZiAoZGV2LT5yX3BvaW50ZXIgPT0gZGV2LT53X3BvaW50ZXIpIHsKLQkJZGJnX3ZlcmJvc2UoIlJCOiBoaXQgZW5kLCB0cnkgdXBkYXRlIHdfcG9pbnRlciIpOwotCQllbmVfcnhfcmVhZF9od19wb2ludGVyKGRldik7Ci0JfQotCi0JaWYgKGRldi0+cl9wb2ludGVyID09IGRldi0+d19wb2ludGVyKSB7Ci0JCWRiZ192ZXJib3NlKCJSQjogZW5kIG9mIGRhdGEgYXQgJWQiLCBkZXYtPnJfcG9pbnRlcik7Ci0JCXJldHVybiAwOwotCX0KLQotCWRiZ192ZXJib3NlKCJSQjogcmVhZGluZyBhdCBvZmZzZXQgJWQiLCBkZXYtPnJfcG9pbnRlcik7Ci0Jcl9wb2ludGVyID0gZGV2LT5yX3BvaW50ZXI7Ci0KLQlkZXYtPnJfcG9pbnRlcisrOwotCWlmIChkZXYtPnJfcG9pbnRlciA9PSBkZXYtPmJ1ZmZlcl9sZW4pCi0JCWRldi0+cl9wb2ludGVyID0gMDsKLQotCWRiZ192ZXJib3NlKCJSQjogbmV4dCByZWFkIHdpbGwgYmUgZnJvbSBvZmZzZXQgJWQiLCBkZXYtPnJfcG9pbnRlcik7Ci0KLQlpZiAocl9wb2ludGVyIDwgOCkgewotCQlkYmdfdmVyYm9zZSgiUkI6IHJlYWQgYXQgbWFpbiBidWZmZXIgYXQgJWQiLCByX3BvaW50ZXIpOwotCQlyZXR1cm4gRU5FX0ZXX1NBTVBMRV9CVUZGRVIgKyByX3BvaW50ZXI7Ci0JfQotCi0Jcl9wb2ludGVyIC09IDg7Ci0KLQlpZiAocl9wb2ludGVyIDwgZGV2LT5leHRyYV9idWYxX2xlbikgewotCQlkYmdfdmVyYm9zZSgiUkI6IHJlYWQgYXQgMXN0IGV4dHJhIGJ1ZmZlciBhdCAlZCIsIHJfcG9pbnRlcik7Ci0JCXJldHVybiBkZXYtPmV4dHJhX2J1ZjFfYWRkcmVzcyArIHJfcG9pbnRlcjsKLQl9Ci0KLQlyX3BvaW50ZXIgLT0gZGV2LT5leHRyYV9idWYxX2xlbjsKLQotCWlmIChyX3BvaW50ZXIgPCBkZXYtPmV4dHJhX2J1ZjJfbGVuKSB7Ci0JCWRiZ192ZXJib3NlKCJSQjogcmVhZCBhdCAybmQgZXh0cmEgYnVmZmVyIGF0ICVkIiwgcl9wb2ludGVyKTsKLQkJcmV0dXJuIGRldi0+ZXh0cmFfYnVmMl9hZGRyZXNzICsgcl9wb2ludGVyOwotCX0KLQotCWRiZygiYXR0ZW1wdCB0byByZWFkIGJleW9uZyByaW5nIGJ1ZmVyIGVuZCIpOwotCXJldHVybiAwOwotfQotCi0vKiBTZW5zZSBjdXJyZW50IHJlY2VpdmVkIGNhcnJpZXIgKi8KLXZvaWQgZW5lX3J4X3NlbnNlX2NhcnJpZXIoc3RydWN0IGVuZV9kZXZpY2UgKmRldikKLXsKLQlERUZJTkVfSVJfUkFXX0VWRU5UKGV2KTsKLQotCWludCBjYXJyaWVyLCBkdXR5X2N5Y2xlOwotCWludCBwZXJpb2QgPSBlbmVfcmVhZF9yZWcoZGV2LCBFTkVfQ0lSQ0FSX1BSRCk7Ci0JaW50IGhwZXJpb2QgPSBlbmVfcmVhZF9yZWcoZGV2LCBFTkVfQ0lSQ0FSX0hQUkQpOwotCi0JaWYgKCEocGVyaW9kICYgRU5FX0NJUkNBUl9QUkRfVkFMSUQpKQotCQlyZXR1cm47Ci0KLQlwZXJpb2QgJj0gfkVORV9DSVJDQVJfUFJEX1ZBTElEOwotCi0JaWYgKCFwZXJpb2QpCi0JCXJldHVybjsKLQotCWRiZygiUlg6IGhhcmR3YXJlIGNhcnJpZXIgcGVyaW9kID0gJTAyeCIsIHBlcmlvZCk7Ci0JZGJnKCJSWDogaGFyZHdhcmUgY2FycmllciBwdWxzZSBwZXJpb2QgPSAlMDJ4IiwgaHBlcmlvZCk7Ci0KLQljYXJyaWVyID0gMjAwMDAwMCAvIHBlcmlvZDsKLQlkdXR5X2N5Y2xlID0gKGhwZXJpb2QgKiAxMDApIC8gcGVyaW9kOwotCWRiZygiUlg6IHNlbnNlZCBjYXJyaWVyID0gJWQgSHosIGR1dHkgY3ljbGUgJWQlJSIsCi0JCQkJCQljYXJyaWVyLCBkdXR5X2N5Y2xlKTsKLQlpZiAoZGV2LT5jYXJyaWVyX2RldGVjdF9lbmFibGVkKSB7Ci0JCWV2LmNhcnJpZXJfcmVwb3J0ID0gdHJ1ZTsKLQkJZXYuY2FycmllciA9IGNhcnJpZXI7Ci0JCWV2LmR1dHlfY3ljbGUgPSBkdXR5X2N5Y2xlOwotCQlpcl9yYXdfZXZlbnRfc3RvcmUoZGV2LT5pZGV2LCAmZXYpOwotCX0KLX0KLQotLyogdGhpcyBlbmFibGVzL2Rpc2FibGVzIHRoZSBDSVIgUlggZW5naW5lICovCi1zdGF0aWMgdm9pZCBlbmVfcnhfZW5hYmxlX2Npcl9lbmdpbmUoc3RydWN0IGVuZV9kZXZpY2UgKmRldiwgYm9vbCBlbmFibGUpCi17Ci0JZW5lX3NldF9jbGVhcl9yZWdfbWFzayhkZXYsIEVORV9DSVJDRkcsCi0JCQlFTkVfQ0lSQ0ZHX1JYX0VOIHwgRU5FX0NJUkNGR19SWF9JUlEsIGVuYWJsZSk7Ci19Ci0KLS8qIHRoaXMgc2VsZWN0cyBpbnB1dCBmb3IgQ0lSIGVuZ2luZS4gRXRoZXIgR1BJTyAwQSBvciBHUElPNDAqLwotc3RhdGljIHZvaWQgZW5lX3J4X3NlbGVjdF9pbnB1dChzdHJ1Y3QgZW5lX2RldmljZSAqZGV2LCBib29sIGdwaW9fMGEpCi17Ci0JZW5lX3NldF9jbGVhcl9yZWdfbWFzayhkZXYsIEVORV9DSVJDRkcyLCBFTkVfQ0lSQ0ZHMl9HUElPMEEsIGdwaW9fMGEpOwotfQotCi0vKgotICogdGhpcyBlbmFibGVzIGFsdGVybmF0aXZlIGlucHV0IHZpYSBmYW4gdGFjaG9tZXRlciBzZW5zb3IgYW5kIGJ5cGFzc2VzCi0gKiB0aGUgaHcgQ0lSIGVuZ2luZQotICovCi1zdGF0aWMgdm9pZCBlbmVfcnhfZW5hYmxlX2Zhbl9pbnB1dChzdHJ1Y3QgZW5lX2RldmljZSAqZGV2LCBib29sIGVuYWJsZSkKLXsKLQlpZiAoIWRldi0+aHdfZmFuX2lucHV0KQotCQlyZXR1cm47Ci0KLQlpZiAoIWVuYWJsZSkKLQkJZW5lX3dyaXRlX3JlZyhkZXYsIEVORV9GQU5fQVNfSU4xLCAwKTsKLQllbHNlIHsKLQkJZW5lX3dyaXRlX3JlZyhkZXYsIEVORV9GQU5fQVNfSU4xLCBFTkVfRkFOX0FTX0lOMV9FTik7Ci0JCWVuZV93cml0ZV9yZWcoZGV2LCBFTkVfRkFOX0FTX0lOMiwgRU5FX0ZBTl9BU19JTjJfRU4pOwotCX0KLX0KLQotLyogc2V0dXAgdGhlIHJlY2VpdmVyIGZvciBSWCovCi1zdGF0aWMgdm9pZCBlbmVfcnhfc2V0dXAoc3RydWN0IGVuZV9kZXZpY2UgKmRldikKLXsKLQlib29sIGxlYXJuaW5nX21vZGUgPSBkZXYtPmxlYXJuaW5nX21vZGVfZW5hYmxlZCB8fAotCQkJCQlkZXYtPmNhcnJpZXJfZGV0ZWN0X2VuYWJsZWQ7Ci0JaW50IHNhbXBsZV9wZXJpb2RfYWRqdXN0ID0gMDsKLQotCWRiZygiUlg6IHNldHVwIHJlY2VpdmVyLCBsZWFybmluZyBtb2RlID0gJWQiLCBsZWFybmluZ19tb2RlKTsKLQotCi0JLyogVGhpcyBzZWxlY3RzIFJMQyBpbnB1dCBhbmQgY2xlYXJzIENGRzIgc2V0dGluZ3MgKi8KLQllbmVfd3JpdGVfcmVnKGRldiwgRU5FX0NJUkNGRzIsIDB4MDApOwotCi0JLyogc2V0IHNhbXBsZSBwZXJpb2QqLwotCWlmIChzYW1wbGVfcGVyaW9kID09IEVORV9ERUZBVUxUX1NBTVBMRV9QRVJJT0QpCi0JCXNhbXBsZV9wZXJpb2RfYWRqdXN0ID0KLQkJCWRldi0+cGxsX2ZyZXEgPT0gRU5FX0RFRkFVTFRfUExMX0ZSRVEgPyAxIDogMjsKLQotCWVuZV93cml0ZV9yZWcoZGV2LCBFTkVfQ0lSUkxDX0NGRywKLQkJCShzYW1wbGVfcGVyaW9kICsgc2FtcGxlX3BlcmlvZF9hZGp1c3QpIHwKLQkJCQkJCUVORV9DSVJSTENfQ0ZHX09WRVJGTE9XKTsKLQkvKiByZXZCIGRvZXNuJ3Qgc3VwcG9ydCBpbnB1dHMgKi8KLQlpZiAoZGV2LT5od19yZXZpc2lvbiA8IEVORV9IV19DKQotCQlnb3RvIHNlbGVjdF90aW1lb3V0OwotCi0JaWYgKGxlYXJuaW5nX21vZGUpIHsKLQotCQlXQVJOX09OKCFkZXYtPmh3X2xlYXJuaW5nX2FuZF90eF9jYXBhYmxlKTsKLQotCQkvKiBFbmFibGUgdGhlIG9wcG9zaXRlIG9mIHRoZSBub3JtYWwgaW5wdXQKLQkJVGhhdCBtZWFucyB0aGF0IGlmIEdQSU80MCBpcyBub3JtYWxseSB1c2VkLCB1c2UgR1BJTzBBCi0JCWFuZCB2aWNlIHZlcnNhLgotCQlUaGlzIGlucHV0IHdpbGwgY2Fycnkgbm9uIGRlbW9kdWxhdGVkCi0JCXNpZ25hbCwgYW5kIHdlIHdpbGwgdGVsbCB0aGUgaHcgdG8gZGVtb2R1bGF0ZSBpdCBpdHNlbGYgKi8KLQkJZW5lX3J4X3NlbGVjdF9pbnB1dChkZXYsICFkZXYtPmh3X3VzZV9ncGlvXzBhKTsKLQkJZGV2LT5yeF9mYW5faW5wdXRfaW51c2UgPSBmYWxzZTsKLQotCQkvKiBFbmFibGUgY2FycmllciBkZW1vZHVsYXRpb24gKi8KLQkJZW5lX3NldF9yZWdfbWFzayhkZXYsIEVORV9DSVJDRkcsIEVORV9DSVJDRkdfQ0FSUl9ERU1PRCk7Ci0KLQkJLyogRW5hYmxlIGNhcnJpZXIgZGV0ZWN0aW9uICovCi0JCWVuZV93cml0ZV9yZWcoZGV2LCBFTkVfQ0lSQ0FSX1BVTFMsIDB4NjMpOwotCQllbmVfc2V0X2NsZWFyX3JlZ19tYXNrKGRldiwgRU5FX0NJUkNGRzIsIEVORV9DSVJDRkcyX0NBUlJfREVURUNULAotCQkJZGV2LT5jYXJyaWVyX2RldGVjdF9lbmFibGVkIHx8IGRlYnVnKTsKLQl9IGVsc2UgewotCQlpZiAoZGV2LT5od19mYW5faW5wdXQpCi0JCQlkZXYtPnJ4X2Zhbl9pbnB1dF9pbnVzZSA9IHRydWU7Ci0JCWVsc2UKLQkJCWVuZV9yeF9zZWxlY3RfaW5wdXQoZGV2LCBkZXYtPmh3X3VzZV9ncGlvXzBhKTsKLQotCQkvKiBEaXNhYmxlIGNhcnJpZXIgZGV0ZWN0aW9uICYgZGVtb2R1bGF0aW9uICovCi0JCWVuZV9jbGVhcl9yZWdfbWFzayhkZXYsIEVORV9DSVJDRkcsIEVORV9DSVJDRkdfQ0FSUl9ERU1PRCk7Ci0JCWVuZV9jbGVhcl9yZWdfbWFzayhkZXYsIEVORV9DSVJDRkcyLCBFTkVfQ0lSQ0ZHMl9DQVJSX0RFVEVDVCk7Ci0JfQotCi1zZWxlY3RfdGltZW91dDoKLQlpZiAoZGV2LT5yeF9mYW5faW5wdXRfaW51c2UpIHsKLQkJZGV2LT5wcm9wcy0+cnhfcmVzb2x1dGlvbiA9IE1TX1RPX05TKEVORV9GV19TQU1QTEVfUEVSSU9EX0ZBTik7Ci0KLQkJLyogRmFuIGlucHV0IGRvZXNuJ3Qgc3VwcG9ydCB0aW1lb3V0cywgaXQganVzdCBlbmRzIHRoZQotCQkJaW5wdXQgd2l0aCBhIG1heGltdW0gc2FtcGxlICovCi0JCWRldi0+cHJvcHMtPm1pbl90aW1lb3V0ID0gZGV2LT5wcm9wcy0+bWF4X3RpbWVvdXQgPQotCQkJTVNfVE9fTlMoRU5FX0ZXX1NNUExfQlVGX0ZBTl9NU0sgKgotCQkJCUVORV9GV19TQU1QTEVfUEVSSU9EX0ZBTik7Ci0JfSBlbHNlIHsKLQkJZGV2LT5wcm9wcy0+cnhfcmVzb2x1dGlvbiA9IE1TX1RPX05TKHNhbXBsZV9wZXJpb2QpOwotCi0JCS8qIFRoZW9yZXRpY2x5IHRpbWVvdXQgaXMgdW5saW1pdGVkLCBidXQgd2UgY2FwIGl0Ci0JCSAqIGJlY2F1c2UgaXQgd2FzIHNlZW4gdGhhdCBvbiBvbmUgZGV2aWNlLCBpdAotCQkgKiB3b3VsZCBzdG9wIHNlbmRpbmcgc3BhY2VzIGFmdGVyIGFyb3VuZCAyNTAgbXNlYy4KLQkJICogQmVzaWRlcywgdGhpcyBpcyBjbG9zZSB0byAyXjMyIGFueXdheSBhbmQgdGltZW91dCBpcyB1MzIuCi0JCSAqLwotCQlkZXYtPnByb3BzLT5taW5fdGltZW91dCA9IE1TX1RPX05TKDEyNyAqIHNhbXBsZV9wZXJpb2QpOwotCQlkZXYtPnByb3BzLT5tYXhfdGltZW91dCA9IE1TX1RPX05TKDIwMDAwMCk7Ci0JfQotCi0JaWYgKGRldi0+aHdfbGVhcm5pbmdfYW5kX3R4X2NhcGFibGUpCi0JCWRldi0+cHJvcHMtPnR4X3Jlc29sdXRpb24gPSBNU19UT19OUyhzYW1wbGVfcGVyaW9kKTsKLQotCWlmIChkZXYtPnByb3BzLT50aW1lb3V0ID4gZGV2LT5wcm9wcy0+bWF4X3RpbWVvdXQpCi0JCWRldi0+cHJvcHMtPnRpbWVvdXQgPSBkZXYtPnByb3BzLT5tYXhfdGltZW91dDsKLQlpZiAoZGV2LT5wcm9wcy0+dGltZW91dCA8IGRldi0+cHJvcHMtPm1pbl90aW1lb3V0KQotCQlkZXYtPnByb3BzLT50aW1lb3V0ID0gZGV2LT5wcm9wcy0+bWluX3RpbWVvdXQ7Ci19Ci0KLS8qIEVuYWJsZSB0aGUgZGV2aWNlIGZvciByZWNlaXZlICovCi1zdGF0aWMgdm9pZCBlbmVfcnhfZW5hYmxlKHN0cnVjdCBlbmVfZGV2aWNlICpkZXYpCi17Ci0JdTggcmVnX3ZhbHVlOwotCi0JLyogRW5hYmxlIHN5c3RlbSBpbnRlcnJ1cHQgKi8KLQlpZiAoZGV2LT5od19yZXZpc2lvbiA8IEVORV9IV19DKSB7Ci0JCWVuZV93cml0ZV9yZWcoZGV2LCBFTkVCX0lSUSwgZGV2LT5pcnEgPDwgMSk7Ci0JCWVuZV93cml0ZV9yZWcoZGV2LCBFTkVCX0lSUV9VTksxLCAweDAxKTsKLQl9IGVsc2UgewotCQlyZWdfdmFsdWUgPSBlbmVfcmVhZF9yZWcoZGV2LCBFTkVfSVJRKSAmIDB4RjA7Ci0JCXJlZ192YWx1ZSB8PSBFTkVfSVJRX1VOS19FTjsKLQkJcmVnX3ZhbHVlICY9IH5FTkVfSVJRX1NUQVRVUzsKLQkJcmVnX3ZhbHVlIHw9IChkZXYtPmlycSAmIEVORV9JUlFfTUFTSyk7Ci0JCWVuZV93cml0ZV9yZWcoZGV2LCBFTkVfSVJRLCByZWdfdmFsdWUpOwotCX0KLQotCS8qIEVuYWJsZSBpbnB1dHMgKi8KLQllbmVfcnhfZW5hYmxlX2Zhbl9pbnB1dChkZXYsIGRldi0+cnhfZmFuX2lucHV0X2ludXNlKTsKLQllbmVfcnhfZW5hYmxlX2Npcl9lbmdpbmUoZGV2LCAhZGV2LT5yeF9mYW5faW5wdXRfaW51c2UpOwotCi0JLyogYWNrIGFueSBwZW5kaW5nIGlycXMgLSBqdXN0IGluIGNhc2UgKi8KLQllbmVfaXJxX3N0YXR1cyhkZXYpOwotCi0JLyogZW5hYmxlIGZpcm13YXJlIGJpdHMgKi8KLQllbmVfc2V0X3JlZ19tYXNrKGRldiwgRU5FX0ZXMSwgRU5FX0ZXMV9FTkFCTEUgfCBFTkVfRlcxX0lSUSk7Ci0KLQkvKiBlbnRlciBpZGxlIG1vZGUgKi8KLQlpcl9yYXdfZXZlbnRfc2V0X2lkbGUoZGV2LT5pZGV2LCB0cnVlKTsKLQlkZXYtPnJ4X2VuYWJsZWQgPSB0cnVlOwotfQotCi0vKiBEaXNhYmxlIHRoZSBkZXZpY2UgcmVjZWl2ZXIgKi8KLXN0YXRpYyB2b2lkIGVuZV9yeF9kaXNhYmxlKHN0cnVjdCBlbmVfZGV2aWNlICpkZXYpCi17Ci0JLyogZGlzYWJsZSBpbnB1dHMgKi8KLQllbmVfcnhfZW5hYmxlX2Npcl9lbmdpbmUoZGV2LCBmYWxzZSk7Ci0JZW5lX3J4X2VuYWJsZV9mYW5faW5wdXQoZGV2LCBmYWxzZSk7Ci0KLQkvKiBkaXNhYmxlIGhhcmR3YXJlIElSUSBhbmQgZmlybXdhcmUgZmxhZyAqLwotCWVuZV9jbGVhcl9yZWdfbWFzayhkZXYsIEVORV9GVzEsIEVORV9GVzFfRU5BQkxFIHwgRU5FX0ZXMV9JUlEpOwotCi0JaXJfcmF3X2V2ZW50X3NldF9pZGxlKGRldi0+aWRldiwgdHJ1ZSk7Ci0JZGV2LT5yeF9lbmFibGVkID0gZmFsc2U7Ci19Ci0KLS8qIFRoaXMgcmVzZXRzIHRoZSByZWNlaXZlci4gVXNlZnVsbCB0byBzdG9wIHN0cmVhbSBvZiBzcGFjZXMgYXQgZW5kIG9mCi0gKiB0cmFuc21pc3Npb24KLSAqLwotc3RhdGljIHZvaWQgZW5lX3J4X3Jlc2V0KHN0cnVjdCBlbmVfZGV2aWNlICpkZXYpCi17Ci0JZW5lX2NsZWFyX3JlZ19tYXNrKGRldiwgRU5FX0NJUkNGRywgRU5FX0NJUkNGR19SWF9FTik7Ci0JZW5lX3NldF9yZWdfbWFzayhkZXYsIEVORV9DSVJDRkcsIEVORV9DSVJDRkdfUlhfRU4pOwotfQotCi0vKiBTZXQgdXAgdGhlIFRYIGNhcnJpZXIgZnJlcXVlbmN5IGFuZCBkdXR5IGN5Y2xlICovCi1zdGF0aWMgdm9pZCBlbmVfdHhfc2V0X2NhcnJpZXIoc3RydWN0IGVuZV9kZXZpY2UgKmRldikKLXsKLQl1OCB0eF9wdWxzX3dpZHRoOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5od19sb2NrLCBmbGFncyk7Ci0KLQllbmVfc2V0X2NsZWFyX3JlZ19tYXNrKGRldiwgRU5FX0NJUkNGRywKLQkJRU5FX0NJUkNGR19UWF9DQVJSLCBkZXYtPnR4X3BlcmlvZCA+IDApOwotCi0JaWYgKCFkZXYtPnR4X3BlcmlvZCkKLQkJZ290byB1bmxvY2s7Ci0KLQlCVUdfT04oZGV2LT50eF9kdXR5X2N5Y2xlID49IDEwMCB8fCBkZXYtPnR4X2R1dHlfY3ljbGUgPD0gMCk7Ci0KLQl0eF9wdWxzX3dpZHRoID0gZGV2LT50eF9wZXJpb2QgLyAoMTAwIC8gZGV2LT50eF9kdXR5X2N5Y2xlKTsKLQotCWlmICghdHhfcHVsc193aWR0aCkKLQkJdHhfcHVsc193aWR0aCA9IDE7Ci0KLQlkYmcoIlRYOiBwdWxzZSBkaXN0YW5jZSA9ICVkICogNTAwIG5zIiwgZGV2LT50eF9wZXJpb2QpOwotCWRiZygiVFg6IHB1bHNlIHdpZHRoID0gJWQgKiA1MDAgbnMiLCB0eF9wdWxzX3dpZHRoKTsKLQotCWVuZV93cml0ZV9yZWcoZGV2LCBFTkVfQ0lSTU9EX1BSRCwgZGV2LT50eF9wZXJpb2QgfCBFTkVfQ0lSTU9EX1BSRF9QT0wpOwotCWVuZV93cml0ZV9yZWcoZGV2LCBFTkVfQ0lSTU9EX0hQUkQsIHR4X3B1bHNfd2lkdGgpOwotdW5sb2NrOgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+aHdfbG9jaywgZmxhZ3MpOwotfQotCi0vKiBFbmFibGUvZGlzYWJsZSB0cmFuc21pdHRlcnMgKi8KLXN0YXRpYyB2b2lkIGVuZV90eF9zZXRfdHJhbnNtaXR0ZXJzKHN0cnVjdCBlbmVfZGV2aWNlICpkZXYpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmh3X2xvY2ssIGZsYWdzKTsKLQllbmVfc2V0X2NsZWFyX3JlZ19tYXNrKGRldiwgRU5FX0dQSU9GUzgsIEVORV9HUElPRlM4X0dQSU80MSwKLQkJCQkJISEoZGV2LT50cmFuc21pdHRlcl9tYXNrICYgMHgwMSkpOwotCWVuZV9zZXRfY2xlYXJfcmVnX21hc2soZGV2LCBFTkVfR1BJT0ZTMSwgRU5FX0dQSU9GUzFfR1BJTzBELAotCQkJCQkhIShkZXYtPnRyYW5zbWl0dGVyX21hc2sgJiAweDAyKSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5od19sb2NrLCBmbGFncyk7Ci19Ci0KLS8qIHByZXBhcmUgdHJhbnNtaXNzaW9uICovCi1zdGF0aWMgdm9pZCBlbmVfdHhfZW5hYmxlKHN0cnVjdCBlbmVfZGV2aWNlICpkZXYpCi17Ci0JdTggY29uZjEgPSBlbmVfcmVhZF9yZWcoZGV2LCBFTkVfQ0lSQ0ZHKTsKLQl1OCBmd3JlZzIgPSBlbmVfcmVhZF9yZWcoZGV2LCBFTkVfRlcyKTsKLQotCWRldi0+c2F2ZWRfY29uZjEgPSBjb25mMTsKLQotCS8qIFNob3cgaW5mb3JtYXRpb24gYWJvdXQgY3VycmVudGx5IGNvbm5lY3RlZCB0cmFuc21pdHRlciBqYWNrcyAqLwotCWlmIChmd3JlZzIgJiBFTkVfRlcyX0VNTUlURVIxX0NPTk4pCi0JCWRiZygiVFg6IFRyYW5zbWl0dGVyICMxIGlzIGNvbm5lY3RlZCIpOwotCi0JaWYgKGZ3cmVnMiAmIEVORV9GVzJfRU1NSVRFUjJfQ09OTikKLQkJZGJnKCJUWDogVHJhbnNtaXR0ZXIgIzIgaXMgY29ubmVjdGVkIik7Ci0KLQlpZiAoIShmd3JlZzIgJiAoRU5FX0ZXMl9FTU1JVEVSMV9DT05OIHwgRU5FX0ZXMl9FTU1JVEVSMl9DT05OKSkpCi0JCWVuZV93YXJuKCJUWDogdHJhbnNtaXR0ZXIgY2FibGUgaXNuJ3QgY29ubmVjdGVkISIpOwotCi0JLyogZGlzYWJsZSByZWNlaXZlIG9uIHJldmMgKi8KLQlpZiAoZGV2LT5od19yZXZpc2lvbiA9PSBFTkVfSFdfQykKLQkJY29uZjEgJj0gfkVORV9DSVJDRkdfUlhfRU47Ci0KLQkvKiBFbmFibGUgVFggZW5naW5lICovCi0JY29uZjEgfD0gRU5FX0NJUkNGR19UWF9FTiB8IEVORV9DSVJDRkdfVFhfSVJROwotCWVuZV93cml0ZV9yZWcoZGV2LCBFTkVfQ0lSQ0ZHLCBjb25mMSk7Ci19Ci0KLS8qIGVuZCB0cmFuc21pc3Npb24gKi8KLXN0YXRpYyB2b2lkIGVuZV90eF9kaXNhYmxlKHN0cnVjdCBlbmVfZGV2aWNlICpkZXYpCi17Ci0JZW5lX3dyaXRlX3JlZyhkZXYsIEVORV9DSVJDRkcsIGRldi0+c2F2ZWRfY29uZjEpOwotCWRldi0+dHhfYnVmZmVyID0gTlVMTDsKLX0KLQotCi0vKiBUWCBvbmUgc2FtcGxlIC0gbXVzdCBiZSBjYWxsZWQgd2l0aCBkZXYtPmh3X2xvY2sqLwotc3RhdGljIHZvaWQgZW5lX3R4X3NhbXBsZShzdHJ1Y3QgZW5lX2RldmljZSAqZGV2KQotewotCXU4IHJhd190eDsKLQl1MzIgc2FtcGxlOwotCWJvb2wgcHVsc2UgPSBkZXYtPnR4X3NhbXBsZV9wdWxzZTsKLQotCWlmICghZGV2LT50eF9idWZmZXIpIHsKLQkJZW5lX3dhcm4oIlRYOiBCVUc6IGF0dGVtcHQgdG8gdHJhbnNtaXQgTlVMTCBidWZmZXIiKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qIEdyYWIgbmV4dCBUWCBzYW1wbGUgKi8KLQlpZiAoIWRldi0+dHhfc2FtcGxlKSB7Ci0KLQkJaWYgKGRldi0+dHhfcG9zID09IGRldi0+dHhfbGVuKSB7Ci0JCQlpZiAoIWRldi0+dHhfZG9uZSkgewotCQkJCWRiZygiVFg6IG5vIG1vcmUgZGF0YSB0byBzZW5kIik7Ci0JCQkJZGV2LT50eF9kb25lID0gdHJ1ZTsKLQkJCQlnb3RvIGV4aXQ7Ci0JCQl9IGVsc2UgewotCQkJCWRiZygiVFg6IGxhc3Qgc2FtcGxlIHNlbnQgYnkgaGFyZHdhcmUiKTsKLQkJCQllbmVfdHhfZGlzYWJsZShkZXYpOwotCQkJCWNvbXBsZXRlKCZkZXYtPnR4X2NvbXBsZXRlKTsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCX0KLQotCQlzYW1wbGUgPSBkZXYtPnR4X2J1ZmZlcltkZXYtPnR4X3BvcysrXTsKLQkJZGV2LT50eF9zYW1wbGVfcHVsc2UgPSAhZGV2LT50eF9zYW1wbGVfcHVsc2U7Ci0KLQkJZGV2LT50eF9zYW1wbGUgPSBESVZfUk9VTkRfQ0xPU0VTVChzYW1wbGUsIHNhbXBsZV9wZXJpb2QpOwotCi0JCWlmICghZGV2LT50eF9zYW1wbGUpCi0JCQlkZXYtPnR4X3NhbXBsZSA9IDE7Ci0JfQotCi0JcmF3X3R4ID0gbWluKGRldi0+dHhfc2FtcGxlICwgKHVuc2lnbmVkIGludClFTkVfQ0lSUkxDX09VVF9NQVNLKTsKLQlkZXYtPnR4X3NhbXBsZSAtPSByYXdfdHg7Ci0KLQlkYmcoIlRYOiBzYW1wbGUgJThkICglcykiLCByYXdfdHggKiBzYW1wbGVfcGVyaW9kLAotCQkJCQkJcHVsc2UgPyAicHVsc2UiIDogInNwYWNlIik7Ci0JaWYgKHB1bHNlKQotCQlyYXdfdHggfD0gRU5FX0NJUlJMQ19PVVRfUFVMU0U7Ci0KLQllbmVfd3JpdGVfcmVnKGRldiwKLQkJZGV2LT50eF9yZWcgPyBFTkVfQ0lSUkxDX09VVDEgOiBFTkVfQ0lSUkxDX09VVDAsIHJhd190eCk7Ci0KLQlkZXYtPnR4X3JlZyA9ICFkZXYtPnR4X3JlZzsKLWV4aXQ6Ci0JLyogc2ltdWxhdGUgVFggZG9uZSBpbnRlcnJ1cHQgKi8KLQlpZiAodHhzaW0pCi0JCW1vZF90aW1lcigmZGV2LT50eF9zaW1fdGltZXIsIGppZmZpZXMgKyBIWiAvIDUwMCk7Ci19Ci0KLS8qIHRpbWVyIHRvIHNpbXVsYXRlIHR4IGRvbmUgaW50ZXJydXB0ICovCi1zdGF0aWMgdm9pZCBlbmVfdHhfaXJxc2ltKHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQlzdHJ1Y3QgZW5lX2RldmljZSAqZGV2ID0gKHN0cnVjdCBlbmVfZGV2aWNlICopZGF0YTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+aHdfbG9jaywgZmxhZ3MpOwotCWVuZV90eF9zYW1wbGUoZGV2KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmh3X2xvY2ssIGZsYWdzKTsKLX0KLQotCi0vKiByZWFkIGlycSBzdGF0dXMgYW5kIGFjayBpdCAqLwotc3RhdGljIGludCBlbmVfaXJxX3N0YXR1cyhzdHJ1Y3QgZW5lX2RldmljZSAqZGV2KQotewotCXU4IGlycV9zdGF0dXM7Ci0JdTggZndfZmxhZ3MxLCBmd19mbGFnczI7Ci0JaW50IHJldHZhbCA9IDA7Ci0KLQlmd19mbGFnczIgPSBlbmVfcmVhZF9yZWcoZGV2LCBFTkVfRlcyKTsKLQotCWlmIChkZXYtPmh3X3JldmlzaW9uIDwgRU5FX0hXX0MpIHsKLQkJaXJxX3N0YXR1cyA9IGVuZV9yZWFkX3JlZyhkZXYsIEVORUJfSVJRX1NUQVRVUyk7Ci0KLQkJaWYgKCEoaXJxX3N0YXR1cyAmIEVORUJfSVJRX1NUQVRVU19JUikpCi0JCQlyZXR1cm4gMDsKLQotCQllbmVfY2xlYXJfcmVnX21hc2soZGV2LCBFTkVCX0lSUV9TVEFUVVMsIEVORUJfSVJRX1NUQVRVU19JUik7Ci0JCXJldHVybiBFTkVfSVJRX1JYOwotCX0KLQotCWlycV9zdGF0dXMgPSBlbmVfcmVhZF9yZWcoZGV2LCBFTkVfSVJRKTsKLQlpZiAoIShpcnFfc3RhdHVzICYgRU5FX0lSUV9TVEFUVVMpKQotCQlyZXR1cm4gMDsKLQotCS8qIG9yaWdpbmFsIGRyaXZlciBkb2VzIHRoYXQgdHdpY2UgLSBhIHdvcmthcm91bmQgPyAqLwotCWVuZV93cml0ZV9yZWcoZGV2LCBFTkVfSVJRLCBpcnFfc3RhdHVzICYgfkVORV9JUlFfU1RBVFVTKTsKLQllbmVfd3JpdGVfcmVnKGRldiwgRU5FX0lSUSwgaXJxX3N0YXR1cyAmIH5FTkVfSVJRX1NUQVRVUyk7Ci0KLQkvKiBjaGVjayBSWCBpbnRlcnJ1cHQgKi8KLQlpZiAoZndfZmxhZ3MyICYgRU5FX0ZXMl9SWElSUSkgewotCQlyZXR2YWwgfD0gRU5FX0lSUV9SWDsKLQkJZW5lX3dyaXRlX3JlZyhkZXYsIEVORV9GVzIsIGZ3X2ZsYWdzMiAmIH5FTkVfRlcyX1JYSVJRKTsKLQl9Ci0KLQkvKiBjaGVjayBUWCBpbnRlcnJ1cHQgKi8KLQlmd19mbGFnczEgPSBlbmVfcmVhZF9yZWcoZGV2LCBFTkVfRlcxKTsKLQlpZiAoZndfZmxhZ3MxICYgRU5FX0ZXMV9UWElSUSkgewotCQllbmVfd3JpdGVfcmVnKGRldiwgRU5FX0ZXMSwgZndfZmxhZ3MxICYgfkVORV9GVzFfVFhJUlEpOwotCQlyZXR2YWwgfD0gRU5FX0lSUV9UWDsKLQl9Ci0KLQlyZXR1cm4gcmV0dmFsOwotfQotCi0vKiBpbnRlcnJ1cHQgaGFuZGxlciAqLwotc3RhdGljIGlycXJldHVybl90IGVuZV9pc3IoaW50IGlycSwgdm9pZCAqZGF0YSkKLXsKLQl1MTYgaHdfdmFsdWUsIHJlZzsKLQlpbnQgaHdfc2FtcGxlLCBpcnFfc3RhdHVzOwotCWJvb2wgcHVsc2U7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpcnFyZXR1cm5fdCByZXR2YWwgPSBJUlFfTk9ORTsKLQlzdHJ1Y3QgZW5lX2RldmljZSAqZGV2ID0gKHN0cnVjdCBlbmVfZGV2aWNlICopZGF0YTsKLQlERUZJTkVfSVJfUkFXX0VWRU5UKGV2KTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmh3X2xvY2ssIGZsYWdzKTsKLQotCWRiZ192ZXJib3NlKCJJU1IgY2FsbGVkIik7Ci0JZW5lX3J4X3JlYWRfaHdfcG9pbnRlcihkZXYpOwotCWlycV9zdGF0dXMgPSBlbmVfaXJxX3N0YXR1cyhkZXYpOwotCi0JaWYgKCFpcnFfc3RhdHVzKQotCQlnb3RvIHVubG9jazsKLQotCXJldHZhbCA9IElSUV9IQU5ETEVEOwotCi0JaWYgKGlycV9zdGF0dXMgJiBFTkVfSVJRX1RYKSB7Ci0JCWRiZ192ZXJib3NlKCJUWCBpbnRlcnJ1cHQiKTsKLQkJaWYgKCFkZXYtPmh3X2xlYXJuaW5nX2FuZF90eF9jYXBhYmxlKSB7Ci0JCQlkYmcoIlRYIGludGVycnVwdCBvbiB1bnN1cHBvcnRlZCBkZXZpY2UhIik7Ci0JCQlnb3RvIHVubG9jazsKLQkJfQotCQllbmVfdHhfc2FtcGxlKGRldik7Ci0JfQotCi0JaWYgKCEoaXJxX3N0YXR1cyAmIEVORV9JUlFfUlgpKQotCQlnb3RvIHVubG9jazsKLQotCWRiZ192ZXJib3NlKCJSWCBpbnRlcnJ1cHQiKTsKLQotCWlmIChkZXYtPmh3X2xlYXJuaW5nX2FuZF90eF9jYXBhYmxlKQotCQllbmVfcnhfc2Vuc2VfY2FycmllcihkZXYpOwotCi0JLyogT24gaGFyZHdhcmUgdGhhdCBkb24ndCBzdXBwb3J0IGV4dHJhIGJ1ZmZlciB3ZSBuZWVkIHRvIHRydXN0Ci0JCXRoZSBpbnRlcnJ1cHQgYW5kIG5vdCB0cmFjayB0aGUgcmVhZCBwb2ludGVyICovCi0JaWYgKCFkZXYtPmh3X2V4dHJhX2J1ZmZlcikKLQkJZGV2LT5yX3BvaW50ZXIgPSBkZXYtPndfcG9pbnRlciA9PSAwID8gRU5FX0ZXX1BBQ0tFVF9TSVpFIDogMDsKLQotCXdoaWxlICgxKSB7Ci0KLQkJcmVnID0gZW5lX3J4X2dldF9zYW1wbGVfcmVnKGRldik7Ci0KLQkJZGJnX3ZlcmJvc2UoIm5leHQgc2FtcGxlIHRvIHJlYWQgYXQ6ICUwNHgiLCByZWcpOwotCQlpZiAoIXJlZykKLQkJCWJyZWFrOwotCi0JCWh3X3ZhbHVlID0gZW5lX3JlYWRfcmVnKGRldiwgcmVnKTsKLQotCQlpZiAoZGV2LT5yeF9mYW5faW5wdXRfaW51c2UpIHsKLQotCQkJaW50IG9mZnNldCA9IEVORV9GV19TTVBMX0JVRl9GQU4gLSBFTkVfRldfU0FNUExFX0JVRkZFUjsKLQotCQkJLyogcmVhZCBoaWdoIHBhcnQgb2YgdGhlIHNhbXBsZSAqLwotCQkJaHdfdmFsdWUgfD0gZW5lX3JlYWRfcmVnKGRldiwgcmVnICsgb2Zmc2V0KSA8PCA4OwotCQkJcHVsc2UgPSBod192YWx1ZSAmIEVORV9GV19TTVBMX0JVRl9GQU5fUExTOwotCi0JCQkvKiBjbGVhciBzcGFjZSBiaXQsIGFuZCBvdGhlciB1bnVzZWQgYml0cyAqLwotCQkJaHdfdmFsdWUgJj0gRU5FX0ZXX1NNUExfQlVGX0ZBTl9NU0s7Ci0JCQlod19zYW1wbGUgPSBod192YWx1ZSAqIEVORV9GV19TQU1QTEVfUEVSSU9EX0ZBTjsKLQotCQl9IGVsc2UgewotCQkJcHVsc2UgPSAhKGh3X3ZhbHVlICYgRU5FX0ZXX1NBTVBMRV9TUEFDRSk7Ci0JCQlod192YWx1ZSAmPSB+RU5FX0ZXX1NBTVBMRV9TUEFDRTsKLQkJCWh3X3NhbXBsZSA9IGh3X3ZhbHVlICogc2FtcGxlX3BlcmlvZDsKLQotCQkJaWYgKGRldi0+cnhfcGVyaW9kX2FkanVzdCkgewotCQkJCWh3X3NhbXBsZSAqPSAxMDA7Ci0JCQkJaHdfc2FtcGxlIC89ICgxMDAgKyBkZXYtPnJ4X3BlcmlvZF9hZGp1c3QpOwotCQkJfQotCQl9Ci0KLQkJaWYgKCFkZXYtPmh3X2V4dHJhX2J1ZmZlciAmJiAhaHdfc2FtcGxlKSB7Ci0JCQlkZXYtPnJfcG9pbnRlciA9IGRldi0+d19wb2ludGVyOwotCQkJY29udGludWU7Ci0JCX0KLQotCQlkYmcoIlJYOiAlZCAoJXMpIiwgaHdfc2FtcGxlLCBwdWxzZSA/ICJwdWxzZSIgOiAic3BhY2UiKTsKLQotCQlldi5kdXJhdGlvbiA9IE1TX1RPX05TKGh3X3NhbXBsZSk7Ci0JCWV2LnB1bHNlID0gcHVsc2U7Ci0JCWlyX3Jhd19ldmVudF9zdG9yZV93aXRoX2ZpbHRlcihkZXYtPmlkZXYsICZldik7Ci0JfQotCi0JaXJfcmF3X2V2ZW50X2hhbmRsZShkZXYtPmlkZXYpOwotdW5sb2NrOgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+aHdfbG9jaywgZmxhZ3MpOwotCXJldHVybiByZXR2YWw7Ci19Ci0KLS8qIEluaXRpYWxpemUgZGVmYXVsdCBzZXR0aW5ncyAqLwotc3RhdGljIHZvaWQgZW5lX3NldHVwX2RlZmF1bHRfc2V0dGluZ3Moc3RydWN0IGVuZV9kZXZpY2UgKmRldikKLXsKLQlkZXYtPnR4X3BlcmlvZCA9IDMyOwotCWRldi0+dHhfZHV0eV9jeWNsZSA9IDUwOyAvKiUqLwotCWRldi0+dHJhbnNtaXR0ZXJfbWFzayA9IDB4MDM7Ci0JZGV2LT5sZWFybmluZ19tb2RlX2VuYWJsZWQgPSBsZWFybmluZ19tb2RlX2ZvcmNlOwotCi0JLyogU2V0IHJlYXNvbmFibGUgZGVmYXVsdCB0aW1lb3V0ICovCi0JZGV2LT5wcm9wcy0+dGltZW91dCA9IE1TX1RPX05TKDE1MDAwMCk7Ci19Ci0KLS8qIFVwbG9hZCBhbGwgaGFyZHdhcmUgc2V0dGluZ3MgYXQgb25jZS4gVXNlZCBhdCBsb2FkIGFuZCByZXN1bWUgdGltZSAqLwotc3RhdGljIHZvaWQgZW5lX3NldHVwX2h3X3NldHRpbmdzKHN0cnVjdCBlbmVfZGV2aWNlICpkZXYpCi17Ci0JaWYgKGRldi0+aHdfbGVhcm5pbmdfYW5kX3R4X2NhcGFibGUpIHsKLQkJZW5lX3R4X3NldF9jYXJyaWVyKGRldik7Ci0JCWVuZV90eF9zZXRfdHJhbnNtaXR0ZXJzKGRldik7Ci0JfQotCi0JZW5lX3J4X3NldHVwKGRldik7Ci19Ci0KLS8qIG91dHNpZGUgaW50ZXJmYWNlOiBjYWxsZWQgb24gZmlyc3Qgb3BlbiovCi1zdGF0aWMgaW50IGVuZV9vcGVuKHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGVuZV9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgZW5lX2RldmljZSAqKWRhdGE7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmh3X2xvY2ssIGZsYWdzKTsKLQllbmVfcnhfZW5hYmxlKGRldik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5od19sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIG91dHNpZGUgaW50ZXJmYWNlOiBjYWxsZWQgb24gZGV2aWNlIGNsb3NlKi8KLXN0YXRpYyB2b2lkIGVuZV9jbG9zZSh2b2lkICpkYXRhKQotewotCXN0cnVjdCBlbmVfZGV2aWNlICpkZXYgPSAoc3RydWN0IGVuZV9kZXZpY2UgKilkYXRhOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+aHdfbG9jaywgZmxhZ3MpOwotCi0JZW5lX3J4X2Rpc2FibGUoZGV2KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmh3X2xvY2ssIGZsYWdzKTsKLX0KLQotLyogb3V0c2lkZSBpbnRlcmZhY2U6IHNldCB0cmFuc21pdHRlciBtYXNrICovCi1zdGF0aWMgaW50IGVuZV9zZXRfdHhfbWFzayh2b2lkICpkYXRhLCB1MzIgdHhfbWFzaykKLXsKLQlzdHJ1Y3QgZW5lX2RldmljZSAqZGV2ID0gKHN0cnVjdCBlbmVfZGV2aWNlICopZGF0YTsKLQlkYmcoIlRYOiBhdHRlbXB0IHRvIHNldCB0cmFuc21pdHRlciBtYXNrICUwMngiLCB0eF9tYXNrKTsKLQotCS8qIGludmFsaWQgdHhtYXNrICovCi0JaWYgKCF0eF9tYXNrIHx8IHR4X21hc2sgJiB+MHgwMykgewotCQlkYmcoIlRYOiBpbnZhbGlkIG1hc2siKTsKLQkJLyogcmV0dXJuIGNvdW50IG9mIHRyYW5zbWl0dGVycyAqLwotCQlyZXR1cm4gMjsKLQl9Ci0KLQlkZXYtPnRyYW5zbWl0dGVyX21hc2sgPSB0eF9tYXNrOwotCWVuZV90eF9zZXRfdHJhbnNtaXR0ZXJzKGRldik7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIG91dHNpZGUgaW50ZXJmYWNlIDogc2V0IHR4IGNhcnJpZXIgKi8KLXN0YXRpYyBpbnQgZW5lX3NldF90eF9jYXJyaWVyKHZvaWQgKmRhdGEsIHUzMiBjYXJyaWVyKQotewotCXN0cnVjdCBlbmVfZGV2aWNlICpkZXYgPSAoc3RydWN0IGVuZV9kZXZpY2UgKilkYXRhOwotCXUzMiBwZXJpb2QgPSAyMDAwMDAwIC8gY2FycmllcjsKLQotCWRiZygiVFg6IGF0dGVtcHQgdG8gc2V0IHR4IGNhcnJpZXIgdG8gJWQga0h6IiwgY2Fycmllcik7Ci0KLQlpZiAocGVyaW9kICYmIChwZXJpb2QgPiBFTkVfQ0lSTU9EX1BSRF9NQVggfHwKLQkJCXBlcmlvZCA8IEVORV9DSVJNT0RfUFJEX01JTikpIHsKLQotCQlkYmcoIlRYOiBvdXQgb2YgcmFuZ2UgJWQtJWQga0h6IGNhcnJpZXIiLAotCQkJMjAwMCAvIEVORV9DSVJNT0RfUFJEX01JTiwgMjAwMCAvIEVORV9DSVJNT0RfUFJEX01BWCk7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlkZXYtPnR4X3BlcmlvZCA9IHBlcmlvZDsKLQllbmVfdHhfc2V0X2NhcnJpZXIoZGV2KTsKLQlyZXR1cm4gMDsKLX0KLQotLypvdXRzaWRlIGludGVyZmFjZSA6IHNldCB0eCBkdXR5IGN5Y2xlICovCi1zdGF0aWMgaW50IGVuZV9zZXRfdHhfZHV0eV9jeWNsZSh2b2lkICpkYXRhLCB1MzIgZHV0eV9jeWNsZSkKLXsKLQlzdHJ1Y3QgZW5lX2RldmljZSAqZGV2ID0gKHN0cnVjdCBlbmVfZGV2aWNlICopZGF0YTsKLQlkYmcoIlRYOiBzZXR0aW5nIGR1dHkgY3ljbGUgdG8gJWQlJSIsIGR1dHlfY3ljbGUpOwotCWRldi0+dHhfZHV0eV9jeWNsZSA9IGR1dHlfY3ljbGU7Ci0JZW5lX3R4X3NldF9jYXJyaWVyKGRldik7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIG91dHNpZGUgaW50ZXJmYWNlOiBlbmFibGUgbGVhcm5pbmcgbW9kZSAqLwotc3RhdGljIGludCBlbmVfc2V0X2xlYXJuaW5nX21vZGUodm9pZCAqZGF0YSwgaW50IGVuYWJsZSkKLXsKLQlzdHJ1Y3QgZW5lX2RldmljZSAqZGV2ID0gKHN0cnVjdCBlbmVfZGV2aWNlICopZGF0YTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWlmIChlbmFibGUgPT0gZGV2LT5sZWFybmluZ19tb2RlX2VuYWJsZWQpCi0JCXJldHVybiAwOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+aHdfbG9jaywgZmxhZ3MpOwotCWRldi0+bGVhcm5pbmdfbW9kZV9lbmFibGVkID0gZW5hYmxlOwotCWVuZV9yeF9kaXNhYmxlKGRldik7Ci0JZW5lX3J4X3NldHVwKGRldik7Ci0JZW5lX3J4X2VuYWJsZShkZXYpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+aHdfbG9jaywgZmxhZ3MpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGVuZV9zZXRfY2Fycmllcl9yZXBvcnQodm9pZCAqZGF0YSwgaW50IGVuYWJsZSkKLXsKLQlzdHJ1Y3QgZW5lX2RldmljZSAqZGV2ID0gKHN0cnVjdCBlbmVfZGV2aWNlICopZGF0YTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKGVuYWJsZSA9PSBkZXYtPmNhcnJpZXJfZGV0ZWN0X2VuYWJsZWQpCi0JCXJldHVybiAwOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+aHdfbG9jaywgZmxhZ3MpOwotCWRldi0+Y2Fycmllcl9kZXRlY3RfZW5hYmxlZCA9IGVuYWJsZTsKLQllbmVfcnhfZGlzYWJsZShkZXYpOwotCWVuZV9yeF9zZXR1cChkZXYpOwotCWVuZV9yeF9lbmFibGUoZGV2KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmh3X2xvY2ssIGZsYWdzKTsKLQlyZXR1cm4gMDsKLX0KLQotLyogb3V0c2lkZSBpbnRlcmZhY2U6IGVuYWJsZSBvciBkaXNhYmxlIGlkbGUgbW9kZSAqLwotc3RhdGljIHZvaWQgZW5lX3NldF9pZGxlKHZvaWQgKmRhdGEsIGJvb2wgaWRsZSkKLXsKLQlpZiAoaWRsZSkgewotCQllbmVfcnhfcmVzZXQoKHN0cnVjdCBlbmVfZGV2aWNlICopZGF0YSk7Ci0JCWRiZygiUlg6IGVuZCBvZiBkYXRhIik7Ci0JfQotfQotCi0vKiBvdXRzaWRlIGludGVyZmFjZTogdHJhbnNtaXQgKi8KLXN0YXRpYyBpbnQgZW5lX3RyYW5zbWl0KHZvaWQgKmRhdGEsIGludCAqYnVmLCB1MzIgbikKLXsKLQlzdHJ1Y3QgZW5lX2RldmljZSAqZGV2ID0gKHN0cnVjdCBlbmVfZGV2aWNlICopZGF0YTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JZGV2LT50eF9idWZmZXIgPSBidWY7Ci0JZGV2LT50eF9sZW4gPSBuIC8gc2l6ZW9mKGludCk7Ci0JZGV2LT50eF9wb3MgPSAwOwotCWRldi0+dHhfcmVnID0gMDsKLQlkZXYtPnR4X2RvbmUgPSAwOwotCWRldi0+dHhfc2FtcGxlID0gMDsKLQlkZXYtPnR4X3NhbXBsZV9wdWxzZSA9IDA7Ci0KLQlkYmcoIlRYOiAlZCBzYW1wbGVzIiwgZGV2LT50eF9sZW4pOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+aHdfbG9jaywgZmxhZ3MpOwotCi0JZW5lX3R4X2VuYWJsZShkZXYpOwotCi0JLyogVHJhbnNtaXQgZmlyc3QgdHdvIHNhbXBsZXMgKi8KLQllbmVfdHhfc2FtcGxlKGRldik7Ci0JZW5lX3R4X3NhbXBsZShkZXYpOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5od19sb2NrLCBmbGFncyk7Ci0KLQlpZiAod2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZkZXYtPnR4X2NvbXBsZXRlLCAyICogSFopID09IDApIHsKLQkJZGJnKCJUWDogdGltZW91dCIpOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5od19sb2NrLCBmbGFncyk7Ci0JCWVuZV90eF9kaXNhYmxlKGRldik7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+aHdfbG9jaywgZmxhZ3MpOwotCX0gZWxzZQotCQlkYmcoIlRYOiBkb25lIik7Ci0JcmV0dXJuIG47Ci19Ci0KLS8qIHByb2JlIGVudHJ5ICovCi1zdGF0aWMgaW50IGVuZV9wcm9iZShzdHJ1Y3QgcG5wX2RldiAqcG5wX2RldiwgY29uc3Qgc3RydWN0IHBucF9kZXZpY2VfaWQgKmlkKQotewotCWludCBlcnJvciA9IC1FTk9NRU07Ci0Jc3RydWN0IGlyX2Rldl9wcm9wcyAqaXJfcHJvcHM7Ci0Jc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OwotCXN0cnVjdCBlbmVfZGV2aWNlICpkZXY7Ci0KLQkvKiBhbGxvY2F0ZSBtZW1vcnkgKi8KLQlpbnB1dF9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKLQlpcl9wcm9wcyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpcl9kZXZfcHJvcHMpLCBHRlBfS0VSTkVMKTsKLQlkZXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZW5lX2RldmljZSksIEdGUF9LRVJORUwpOwotCi0JaWYgKCFpbnB1dF9kZXYgfHwgIWlyX3Byb3BzIHx8ICFkZXYpCi0JCWdvdG8gZXJyb3IxOwotCi0JLyogdmFsaWRhdGUgcmVzb3VyY2VzICovCi0JZXJyb3IgPSAtRU5PREVWOwotCi0JaWYgKCFwbnBfcG9ydF92YWxpZChwbnBfZGV2LCAwKSB8fAotCSAgICBwbnBfcG9ydF9sZW4ocG5wX2RldiwgMCkgPCBFTkVfSU9fU0laRSkKLQkJZ290byBlcnJvcjsKLQotCWlmICghcG5wX2lycV92YWxpZChwbnBfZGV2LCAwKSkKLQkJZ290byBlcnJvcjsKLQotCXNwaW5fbG9ja19pbml0KCZkZXYtPmh3X2xvY2spOwotCi0JLyogY2xhaW0gdGhlIHJlc291cmNlcyAqLwotCWVycm9yID0gLUVCVVNZOwotCWRldi0+aHdfaW8gPSBwbnBfcG9ydF9zdGFydChwbnBfZGV2LCAwKTsKLQlpZiAoIXJlcXVlc3RfcmVnaW9uKGRldi0+aHdfaW8sIEVORV9JT19TSVpFLCBFTkVfRFJJVkVSX05BTUUpKSB7Ci0JCWRldi0+aHdfaW8gPSAtMTsKLQkJZGV2LT5pcnEgPSAtMTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlkZXYtPmlycSA9IHBucF9pcnEocG5wX2RldiwgMCk7Ci0JaWYgKHJlcXVlc3RfaXJxKGRldi0+aXJxLCBlbmVfaXNyLAotCQkJSVJRRl9TSEFSRUQsIEVORV9EUklWRVJfTkFNRSwgKHZvaWQgKilkZXYpKSB7Ci0JCWRldi0+aXJxID0gLTE7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JcG5wX3NldF9kcnZkYXRhKHBucF9kZXYsIGRldik7Ci0JZGV2LT5wbnBfZGV2ID0gcG5wX2RldjsKLQotCS8qIGRvbid0IGFsbG93IHRvbyBzaG9ydC9sb25nIHNhbXBsZSBwZXJpb2RzICovCi0JaWYgKHNhbXBsZV9wZXJpb2QgPCA1IHx8IHNhbXBsZV9wZXJpb2QgPiAweDdGKQotCQlzYW1wbGVfcGVyaW9kID0gRU5FX0RFRkFVTFRfU0FNUExFX1BFUklPRDsKLQotCS8qIGRldGVjdCBoYXJkd2FyZSB2ZXJzaW9uIGFuZCBmZWF0dXJlcyAqLwotCWVycm9yID0gZW5lX2h3X2RldGVjdChkZXYpOwotCWlmIChlcnJvcikKLQkJZ290byBlcnJvcjsKLQotCWlmICghZGV2LT5od19sZWFybmluZ19hbmRfdHhfY2FwYWJsZSAmJiB0eHNpbSkgewotCQlkZXYtPmh3X2xlYXJuaW5nX2FuZF90eF9jYXBhYmxlID0gdHJ1ZTsKLQkJc2V0dXBfdGltZXIoJmRldi0+dHhfc2ltX3RpbWVyLCBlbmVfdHhfaXJxc2ltLAotCQkJCQkJKGxvbmcgdW5zaWduZWQgaW50KWRldik7Ci0JCWVuZV93YXJuKCJTaW11bGF0aW9uIG9mIFRYIGFjdGl2YXRlZCIpOwotCX0KLQotCWlmICghZGV2LT5od19sZWFybmluZ19hbmRfdHhfY2FwYWJsZSkKLQkJbGVhcm5pbmdfbW9kZV9mb3JjZSA9IGZhbHNlOwotCi0JaXJfcHJvcHMtPmRyaXZlcl90eXBlID0gUkNfRFJJVkVSX0lSX1JBVzsKLQlpcl9wcm9wcy0+YWxsb3dlZF9wcm90b3MgPSBJUl9UWVBFX0FMTDsKLQlpcl9wcm9wcy0+cHJpdiA9IGRldjsKLQlpcl9wcm9wcy0+b3BlbiA9IGVuZV9vcGVuOwotCWlyX3Byb3BzLT5jbG9zZSA9IGVuZV9jbG9zZTsKLQlpcl9wcm9wcy0+c19pZGxlID0gZW5lX3NldF9pZGxlOwotCi0JZGV2LT5wcm9wcyA9IGlyX3Byb3BzOwotCWRldi0+aWRldiA9IGlucHV0X2RldjsKLQotCWlmIChkZXYtPmh3X2xlYXJuaW5nX2FuZF90eF9jYXBhYmxlKSB7Ci0JCWlyX3Byb3BzLT5zX2xlYXJuaW5nX21vZGUgPSBlbmVfc2V0X2xlYXJuaW5nX21vZGU7Ci0JCWluaXRfY29tcGxldGlvbigmZGV2LT50eF9jb21wbGV0ZSk7Ci0JCWlyX3Byb3BzLT50eF9pciA9IGVuZV90cmFuc21pdDsKLQkJaXJfcHJvcHMtPnNfdHhfbWFzayA9IGVuZV9zZXRfdHhfbWFzazsKLQkJaXJfcHJvcHMtPnNfdHhfY2FycmllciA9IGVuZV9zZXRfdHhfY2FycmllcjsKLQkJaXJfcHJvcHMtPnNfdHhfZHV0eV9jeWNsZSA9IGVuZV9zZXRfdHhfZHV0eV9jeWNsZTsKLQkJaXJfcHJvcHMtPnNfY2Fycmllcl9yZXBvcnQgPSBlbmVfc2V0X2NhcnJpZXJfcmVwb3J0OwotCX0KLQotCWVuZV9yeF9zZXR1cF9od19idWZmZXIoZGV2KTsKLQllbmVfc2V0dXBfZGVmYXVsdF9zZXR0aW5ncyhkZXYpOwotCWVuZV9zZXR1cF9od19zZXR0aW5ncyhkZXYpOwotCi0JZGV2aWNlX3NldF93YWtldXBfY2FwYWJsZSgmcG5wX2Rldi0+ZGV2LCB0cnVlKTsKLQlkZXZpY2Vfc2V0X3dha2V1cF9lbmFibGUoJnBucF9kZXYtPmRldiwgdHJ1ZSk7Ci0KLQlpZiAoZGV2LT5od19sZWFybmluZ19hbmRfdHhfY2FwYWJsZSkKLQkJaW5wdXRfZGV2LT5uYW1lID0gIkVORSBlSG9tZSBJbmZyYXJlZCBSZW1vdGUgVHJhbnNjZWl2ZXIiOwotCWVsc2UKLQkJaW5wdXRfZGV2LT5uYW1lID0gIkVORSBlSG9tZSBJbmZyYXJlZCBSZW1vdGUgUmVjZWl2ZXIiOwotCi0JZXJyb3IgPSAtRU5PREVWOwotCWlmIChpcl9pbnB1dF9yZWdpc3RlcihpbnB1dF9kZXYsIFJDX01BUF9SQzZfTUNFLCBpcl9wcm9wcywKLQkJCQkJCQlFTkVfRFJJVkVSX05BTUUpKQotCQlnb3RvIGVycm9yOwotCi0JZW5lX25vdGljZSgiZHJpdmVyIGhhcyBiZWVuIHN1Y2Nlc2Z1bGx5IGxvYWRlZCIpOwotCXJldHVybiAwOwotZXJyb3I6Ci0JaWYgKGRldiAmJiBkZXYtPmlycSA+PSAwKQotCQlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKLQlpZiAoZGV2ICYmIGRldi0+aHdfaW8gPj0gMCkKLQkJcmVsZWFzZV9yZWdpb24oZGV2LT5od19pbywgRU5FX0lPX1NJWkUpOwotZXJyb3IxOgotCWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0X2Rldik7Ci0Ja2ZyZWUoaXJfcHJvcHMpOwotCWtmcmVlKGRldik7Ci0JcmV0dXJuIGVycm9yOwotfQotCi0vKiBtYWluIHVubG9hZCBmdW5jdGlvbiAqLwotc3RhdGljIHZvaWQgZW5lX3JlbW92ZShzdHJ1Y3QgcG5wX2RldiAqcG5wX2RldikKLXsKLQlzdHJ1Y3QgZW5lX2RldmljZSAqZGV2ID0gcG5wX2dldF9kcnZkYXRhKHBucF9kZXYpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5od19sb2NrLCBmbGFncyk7Ci0JZW5lX3J4X2Rpc2FibGUoZGV2KTsKLQllbmVfcnhfcmVzdG9yZV9od19idWZmZXIoZGV2KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmh3X2xvY2ssIGZsYWdzKTsKLQotCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOwotCXJlbGVhc2VfcmVnaW9uKGRldi0+aHdfaW8sIEVORV9JT19TSVpFKTsKLQlpcl9pbnB1dF91bnJlZ2lzdGVyKGRldi0+aWRldik7Ci0Ja2ZyZWUoZGV2LT5wcm9wcyk7Ci0Ja2ZyZWUoZGV2KTsKLX0KLQotLyogZW5hYmxlIHdha2Ugb24gSVIgKHdha2VzIG9uIHNwZWNpZmljIGJ1dHRvbiBvbiBvcmlnaW5hbCByZW1vdGUpICovCi1zdGF0aWMgdm9pZCBlbmVfZW5hYmxlX3dha2Uoc3RydWN0IGVuZV9kZXZpY2UgKmRldiwgaW50IGVuYWJsZSkKLXsKLQllbmFibGUgPSBlbmFibGUgJiYgZGV2aWNlX21heV93YWtldXAoJmRldi0+cG5wX2Rldi0+ZGV2KTsKLQlkYmcoIndha2Ugb24gSVIgJXMiLCBlbmFibGUgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKTsKLQllbmVfc2V0X2NsZWFyX3JlZ19tYXNrKGRldiwgRU5FX0ZXMSwgRU5FX0ZXMV9XQUtFLCBlbmFibGUpOwotfQotCi0jaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IGVuZV9zdXNwZW5kKHN0cnVjdCBwbnBfZGV2ICpwbnBfZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCi17Ci0Jc3RydWN0IGVuZV9kZXZpY2UgKmRldiA9IHBucF9nZXRfZHJ2ZGF0YShwbnBfZGV2KTsKLQllbmVfZW5hYmxlX3dha2UoZGV2LCB0cnVlKTsKLQotCS8qIFRPRE86IGFkZCBzdXBwb3J0IGZvciB3YWtlIHBhdHRlcm4gKi8KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBlbmVfcmVzdW1lKHN0cnVjdCBwbnBfZGV2ICpwbnBfZGV2KQotewotCXN0cnVjdCBlbmVfZGV2aWNlICpkZXYgPSBwbnBfZ2V0X2RydmRhdGEocG5wX2Rldik7Ci0JZW5lX3NldHVwX2h3X3NldHRpbmdzKGRldik7Ci0KLQlpZiAoZGV2LT5yeF9lbmFibGVkKQotCQllbmVfcnhfZW5hYmxlKGRldik7Ci0KLQllbmVfZW5hYmxlX3dha2UoZGV2LCBmYWxzZSk7Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQotc3RhdGljIHZvaWQgZW5lX3NodXRkb3duKHN0cnVjdCBwbnBfZGV2ICpwbnBfZGV2KQotewotCXN0cnVjdCBlbmVfZGV2aWNlICpkZXYgPSBwbnBfZ2V0X2RydmRhdGEocG5wX2Rldik7Ci0JZW5lX2VuYWJsZV93YWtlKGRldiwgdHJ1ZSk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcG5wX2RldmljZV9pZCBlbmVfaWRzW10gPSB7Ci0Jey5pZCA9ICJFTkUwMTAwIix9LAotCXsuaWQgPSAiRU5FMDIwMCIsfSwKLQl7LmlkID0gIkVORTAyMDEiLH0sCi0Jey5pZCA9ICJFTkUwMjAyIix9LAotCXt9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbnBfZHJpdmVyIGVuZV9kcml2ZXIgPSB7Ci0JLm5hbWUgPSBFTkVfRFJJVkVSX05BTUUsCi0JLmlkX3RhYmxlID0gZW5lX2lkcywKLQkuZmxhZ3MgPSBQTlBfRFJJVkVSX1JFU19ET19OT1RfQ0hBTkdFLAotCi0JLnByb2JlID0gZW5lX3Byb2JlLAotCS5yZW1vdmUgPSBfX2RldmV4aXRfcChlbmVfcmVtb3ZlKSwKLSNpZmRlZiBDT05GSUdfUE0KLQkuc3VzcGVuZCA9IGVuZV9zdXNwZW5kLAotCS5yZXN1bWUgPSBlbmVfcmVzdW1lLAotI2VuZGlmCi0JLnNodXRkb3duID0gZW5lX3NodXRkb3duLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgZW5lX2luaXQodm9pZCkKLXsKLQlyZXR1cm4gcG5wX3JlZ2lzdGVyX2RyaXZlcigmZW5lX2RyaXZlcik7Ci19Ci0KLXN0YXRpYyB2b2lkIGVuZV9leGl0KHZvaWQpCi17Ci0JcG5wX3VucmVnaXN0ZXJfZHJpdmVyKCZlbmVfZHJpdmVyKTsKLX0KLQotbW9kdWxlX3BhcmFtKHNhbXBsZV9wZXJpb2QsIGludCwgU19JUlVHTyk7Ci1NT0RVTEVfUEFSTV9ERVNDKHNhbXBsZV9wZXJpb2QsICJIYXJkd2FyZSBzYW1wbGUgcGVyaW9kICg1MCB1cyBkZWZhdWx0KSIpOwotCi1tb2R1bGVfcGFyYW0obGVhcm5pbmdfbW9kZV9mb3JjZSwgYm9vbCwgU19JUlVHTyk7Ci1NT0RVTEVfUEFSTV9ERVNDKGxlYXJuaW5nX21vZGVfZm9yY2UsICJFbmFibGUgbGVhcm5pbmcgbW9kZSBieSBkZWZhdWx0Iik7Ci0KLW1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7Ci1NT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgbGV2ZWwiKTsKLQotbW9kdWxlX3BhcmFtKHR4c2ltLCBib29sLCBTX0lSVUdPKTsKLU1PRFVMRV9QQVJNX0RFU0ModHhzaW0sCi0JIlNpbXVsYXRlIFRYIGZlYXR1cmVzIG9uIHVuc3VwcG9ydGVkIGhhcmR3YXJlIChkYW5nZXJvdXMpIik7Ci0KLU1PRFVMRV9ERVZJQ0VfVEFCTEUocG5wLCBlbmVfaWRzKTsKLU1PRFVMRV9ERVNDUklQVElPTgotCSgiSW5mcmFyZWQgaW5wdXQgZHJpdmVyIGZvciBLQjM5MjZCL0MvRC9FL0YgIgotCSIoYWthIEVORTAxMDAvRU5FMDIwMC9FTkUwMjAxL0VORTAyMDIpIENJUiBwb3J0Iik7Ci0KLU1PRFVMRV9BVVRIT1IoIk1heGltIExldml0c2t5Iik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLW1vZHVsZV9pbml0KGVuZV9pbml0KTsKLW1vZHVsZV9leGl0KGVuZV9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvSVIvZW5lX2lyLmggYi9kcml2ZXJzL21lZGlhL0lSL2VuZV9pci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNTg3MDY2Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvSVIvZW5lX2lyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNjIgKzAsMCBAQAotLyoKLSAqIGRyaXZlciBmb3IgRU5FIEtCMzkyNiBCL0MvRC9FL0YgQ0lSIChhbHNvIGtub3duIGFzIEVORTBYWFgpCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDEwIE1heGltIExldml0c2t5IDxtYXhpbWxldml0c2t5QGdtYWlsLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCi0gKiBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3Ci0gKiBVU0EKLSAqLwotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0KLQotLyogaGFyZHdhcmUgYWRkcmVzcyAqLwotI2RlZmluZSBFTkVfU1RBVFVTCQkwCS8qIGhhcmR3YXJlIHN0YXR1cyAtIHVudXNlZCAqLwotI2RlZmluZSBFTkVfQUREUl9ISQkJMQkvKiBoaSBieXRlIG9mIHJlZ2lzdGVyIGFkZHJlc3MgKi8KLSNkZWZpbmUgRU5FX0FERFJfTE8JCTIJLyogbG93IGJ5dGUgb2YgcmVnaXN0ZXIgYWRkcmVzcyAqLwotI2RlZmluZSBFTkVfSU8JCQkzCS8qIHJlYWQvd3JpdGUgd2luZG93ICovCi0jZGVmaW5lIEVORV9JT19TSVpFCQk0Ci0KLS8qIDggYnl0ZXMgb2Ygc2FtcGxlcywgZGl2aWRlZCBpbiAyIHBhY2tldHMqLwotI2RlZmluZSBFTkVfRldfU0FNUExFX0JVRkZFUgkweEY4RjAJLyogc2FtcGxlIGJ1ZmZlciAqLwotI2RlZmluZSBFTkVfRldfU0FNUExFX1NQQUNFCTB4ODAJLyogc2FtcGxlIGlzIHNwYWNlICovCi0jZGVmaW5lIEVORV9GV19QQUNLRVRfU0laRQk0Ci0KLS8qIGZpcnN0IGZpcm13YXJlIGZsYWcgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgRU5FX0ZXMQkJCTB4RjhGOCAgLyogZmxhZ3IgKi8KLSNkZWZpbmUJRU5FX0ZXMV9FTkFCTEUJCTB4MDEJLyogZW5hYmxlIGZ3IHByb2Nlc3NpbmcgKi8KLSNkZWZpbmUgRU5FX0ZXMV9UWElSUQkJMHgwMgkvKiBUWCBpbnRlcnJ1cHQgcGVuZGluZyAqLwotI2RlZmluZSBFTkVfRlcxX0hBU19FWFRSQV9CVUYJMHgwNAkvKiBmdyB1c2VzIGV4dHJhIGJ1ZmZlciovCi0jZGVmaW5lIEVORV9GVzFfRVhUUkFfQlVGX0hORAkweDA4CS8qIGV4dHJhIGJ1ZmZlciBoYW5kc2hha2UgYml0Ki8KLSNkZWZpbmUgRU5FX0ZXMV9MRURfT04JCTB4MTAJLyogdHVybiBvbiBhIGxlZCAqLwotCi0jZGVmaW5lIEVORV9GVzFfV1BBVFRFUk4JMHgyMAkvKiBlbmFibGUgd2FrZSBwYXR0ZXJuICovCi0jZGVmaW5lIEVORV9GVzFfV0FLRQkJMHg0MAkvKiBlbmFibGUgd2FrZSBmcm9tIFMzICovCi0jZGVmaW5lIEVORV9GVzFfSVJRCQkweDgwCS8qIGVuYWJsZSBpbnRlcnJ1cHQgKi8KLQotLyogc2Vjb25kIGZpcm13YXJlIGZsYWcgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgRU5FX0ZXMgkJCTB4RjhGOSAgLyogZmxhZ3cgKi8KLSNkZWZpbmUgRU5FX0ZXMl9CVUZfV1BUUgkweDAxCS8qIHdoaWNoIGhhbGYgb2YgdGhlIGJ1ZmZlciB0byByZWFkICovCi0jZGVmaW5lIEVORV9GVzJfUlhJUlEJCTB4MDQJLyogUlggSVJRIHBlbmRpbmcqLwotI2RlZmluZSBFTkVfRlcyX0dQMEEJCTB4MDgJLyogVXNlIEdQSU8wQSBmb3IgZGVtb2R1bGF0ZWQgaW5wdXQgKi8KLSNkZWZpbmUgRU5FX0ZXMl9FTU1JVEVSMV9DT05OCTB4MTAJLyogVFggZW1taXRlciAxIGNvbm5lY3RlZCAqLwotI2RlZmluZSBFTkVfRlcyX0VNTUlURVIyX0NPTk4JMHgyMAkvKiBUWCBlbW1pdGVyIDIgY29ubmVjdGVkICovCi0KLSNkZWZpbmUgRU5FX0ZXMl9GQU5fSU5QVVQJMHg0MAkvKiBmYW4gaW5wdXQgdXNlZCBmb3IgZGVtb2R1bGF0ZWQgZGF0YSovCi0jZGVmaW5lIEVORV9GVzJfTEVBUk5JTkcJMHg4MAkvKiBoYXJkd2FyZSBzdXBwb3J0cyBsZWFybmluZyBhbmQgVFggKi8KLQotLyogZmlybXdhcmUgUlggcG9pbnRlciBmb3IgbmV3IHN0eWxlIGJ1ZmZlciAqLwotI2RlZmluZSBFTkVfRldfUlhfUE9JTlRFUgkweEY4RkEKLQotLyogaGlnaCBwYXJ0cyBvZiBzYW1wbGVzIGZvciBmYW4gaW5wdXQgKDggc2FtcGxlcykqLwotI2RlZmluZSBFTkVfRldfU01QTF9CVUZfRkFOCTB4RjhGQgotI2RlZmluZSBFTkVfRldfU01QTF9CVUZfRkFOX1BMUwkweDgwMDAJLyogY29tYmluZWQgc2FtcGxlIGlzIHB1bHNlICovCi0jZGVmaW5lIEVORV9GV19TTVBMX0JVRl9GQU5fTVNLCTB4MEZGRiAgLyogY29tYmluZWQgc2FtcGxlIG1heGltdW0gdmFsdWUgKi8KLSNkZWZpbmUgRU5FX0ZXX1NBTVBMRV9QRVJJT0RfRkFOIDYxCS8qIGZhbiBpbnB1dCBoYXMgZml4ZWQgc2FtcGxlIHBlcmlvZCAqLwotCi0vKiB0cmFuc21pdHRlciBwb3J0cyAqLwotI2RlZmluZSBFTkVfR1BJT0ZTMQkJMHhGQzAxCi0jZGVmaW5lIEVORV9HUElPRlMxX0dQSU8wRAkweDIwCS8qIGVuYWJsZSB0eCBvdXRwdXQgb24gR1BJTzBEICovCi0jZGVmaW5lIEVORV9HUElPRlM4CQkweEZDMDgKLSNkZWZpbmUgRU5FX0dQSU9GUzhfR1BJTzQxCTB4MDIJLyogZW5hYmxlIHR4IG91dHB1dCBvbiBHUElPNDAgKi8KLQotLyogSVJRIHJlZ2lzdGVycyBibG9jayAoZm9yIHJldmlzaW9uIEIpICovCi0jZGVmaW5lIEVORUJfSVJRCQkweEZEMDkJLyogSVJRIG51bWJlciAqLwotI2RlZmluZSBFTkVCX0lSUV9VTksxCQkweEZEMTcJLyogdW5rbm93biBzZXR0aW5nID0gMSAqLwotI2RlZmluZSBFTkVCX0lSUV9TVEFUVVMJCTB4RkQ4MAkvKiBpcnEgc3RhdHVzICovCi0jZGVmaW5lIEVORUJfSVJRX1NUQVRVU19JUgkweDIwCS8qIElSIGlycSAqLwotCi0vKiBmYW4gYXMgaW5wdXQgc2V0dGluZ3MgKi8KLSNkZWZpbmUgRU5FX0ZBTl9BU19JTjEJCTB4RkUzMCAgLyogZmFuIGluaXQgcmVnIDEgKi8KLSNkZWZpbmUgRU5FX0ZBTl9BU19JTjFfRU4JMHhDRAotI2RlZmluZSBFTkVfRkFOX0FTX0lOMgkJMHhGRTMxICAvKiBmYW4gaW5pdCByZWcgMiAqLwotI2RlZmluZSBFTkVfRkFOX0FTX0lOMl9FTgkweDAzCi0KLS8qIElSUSByZWdpc3RlcnMgYmxvY2sgKGZvciByZXZpc2lvbiBDLEQpICovCi0jZGVmaW5lIEVORV9JUlEJCQkweEZFOUIJLyogbmV3IGlycSBzZXR0aW5ncyByZWdpc3RlciAqLwotI2RlZmluZSBFTkVfSVJRX01BU0sJCTB4MEYJLyogaXJxIG51bWJlciBtYXNrICovCi0jZGVmaW5lIEVORV9JUlFfVU5LX0VOCQkweDEwCS8qIGFsd2F5cyBlbmFibGVkICovCi0jZGVmaW5lIEVORV9JUlFfU1RBVFVTCQkweDIwCS8qIGlycSBzdGF0dXMgYW5kIEFDSyAqLwotCi0vKiBDSVIgQ29uZmlnIHJlZ2lzdGVyICMxICovCi0jZGVmaW5lIEVORV9DSVJDRkcJCTB4RkVDMAotI2RlZmluZSBFTkVfQ0lSQ0ZHX1JYX0VOCTB4MDEJLyogUlggZW5hYmxlICovCi0jZGVmaW5lIEVORV9DSVJDRkdfUlhfSVJRCTB4MDIJLyogRW5hYmxlIGhhcmR3YXJlIGludGVycnVwdCAqLwotI2RlZmluZSBFTkVfQ0lSQ0ZHX1JFVl9QT0wJMHgwNAkvKiBJbnB1dCBwb2xhcml0eSByZXZlcnNlZCAqLwotI2RlZmluZSBFTkVfQ0lSQ0ZHX0NBUlJfREVNT0QJMHgwOAkvKiBFbmFibGUgY2FycmllciBkZW1vZHVsYXRvciAqLwotCi0jZGVmaW5lIEVORV9DSVJDRkdfVFhfRU4JMHgxMAkvKiBUWCBlbmFibGUgKi8KLSNkZWZpbmUgRU5FX0NJUkNGR19UWF9JUlEJMHgyMAkvKiBTZW5kIGludGVycnVwdCBvbiBUWCBkb25lICovCi0jZGVmaW5lIEVORV9DSVJDRkdfVFhfUE9MX1JFVgkweDQwCS8qIFRYIHBvbGFyaXR5IHJldmVyc2VkICovCi0jZGVmaW5lIEVORV9DSVJDRkdfVFhfQ0FSUgkweDgwCS8qIHNlbmQgVFggY2FycmllciBvciBub3QgKi8KLQotLyogQ0lSIGNvbmZpZyByZWdpc3RlciAjMiAqLwotI2RlZmluZSBFTkVfQ0lSQ0ZHMgkJMHhGRUMxCi0jZGVmaW5lIEVORV9DSVJDRkcyX1JMQwkJMHgwMAotI2RlZmluZSBFTkVfQ0lSQ0ZHMl9SQzUJCTB4MDEKLSNkZWZpbmUgRU5FX0NJUkNGRzJfUkM2CQkweDAyCi0jZGVmaW5lIEVORV9DSVJDRkcyX05FQwkJMHgwMwotI2RlZmluZSBFTkVfQ0lSQ0ZHMl9DQVJSX0RFVEVDVAkweDEwCS8qIEVuYWJsZSBjYXJyaWVyIGRldGVjdGlvbiAqLwotI2RlZmluZSBFTkVfQ0lSQ0ZHMl9HUElPMEEJMHgyMAkvKiBVc2UgR1BJTzBBIGluc3RlYWQgb2YgR1BJTzQwIGZvciBpbnB1dCAqLwotI2RlZmluZSBFTkVfQ0lSQ0ZHMl9GQVNUX1NBTVBMMQkweDQwCS8qIEZhc3QgbGVhZGluZyBwdWxzZSBkZXRlY3Rpb24gZm9yIFJDNiAqLwotI2RlZmluZSBFTkVfQ0lSQ0ZHMl9GQVNUX1NBTVBMMgkweDgwCS8qIEZhc3QgZGF0YSBkZXRlY3Rpb24gZm9yIFJDNiAqLwotCi0vKiBLbm9icyBmb3IgcHJvdG9jb2wgZGVjb2RpbmcgLSB3aWxsIGRvY3VtZW50IHdoZW4vaWYgd2lsbCB1c2UgdGhlbSAqLwotI2RlZmluZSBFTkVfQ0lSUEYJCTB4RkVDMgotI2RlZmluZSBFTkVfQ0lSSElHSAkJMHhGRUMzCi0jZGVmaW5lIEVORV9DSVJCSVQJCTB4RkVDNAotI2RlZmluZSBFTkVfQ0lSU1RBUlQJCTB4RkVDNQotI2RlZmluZSBFTkVfQ0lSU1RBUlQyCQkweEZFQzYKLQotLyogQWN0dWFsIHJlZ2lzdGVyIHdoaWNoIGNvbnRhaW5zIFJMQyBSWCBkYXRhIC0gcmVhZCBieSBmaXJtd2FyZSAqLwotI2RlZmluZSBFTkVfQ0lSREFUX0lOCQkweEZFQzcKLQotCi0vKiBSTEMgY29uZmlndXJhdGlvbiAtIHNhbXBsZSBwZXJpb2QgKDF1cyByZXN1bHV0aW9uKSArIGlkbGUgbW9kZSAqLwotI2RlZmluZSBFTkVfQ0lSUkxDX0NGRwkJMHhGRUM4Ci0jZGVmaW5lIEVORV9DSVJSTENfQ0ZHX09WRVJGTE9XCTB4ODAJLyogaW50ZXJydXB0IG9uIG92ZXJmbG93cyBpZiBzZXQgKi8KLSNkZWZpbmUgRU5FX0RFRkFVTFRfU0FNUExFX1BFUklPRCA1MAotCi0vKiBUd28gYnl0ZSBSTEMgVFggYnVmZmVyICovCi0jZGVmaW5lIEVORV9DSVJSTENfT1VUMAkJMHhGRUM5Ci0jZGVmaW5lIEVORV9DSVJSTENfT1VUMQkJMHhGRUNBCi0jZGVmaW5lIEVORV9DSVJSTENfT1VUX1BVTFNFCTB4ODAJLyogVHJhbnNtaXR0ZWQgc2FtcGxlIGlzIHB1bHNlICovCi0jZGVmaW5lIEVORV9DSVJSTENfT1VUX01BU0sJMHg3RgotCi0KLS8qIENhcnJpZXIgZGV0ZWN0IHNldHRpbmcKLSAqIExvdyBuaWJibGUgIC0gbnVtYmVyIG9mIGNhcnJpZXIgcHVsc2VzIHRvIGF2ZXJhZ2UKLSAqIEhpZ2ggbmliYmxlIC0gbnVtYmVyIG9mIGluaXRpYWwgY2FycmllciBwdWxzZXMgdG8gZGlzY2FyZAotICovCi0jZGVmaW5lIEVORV9DSVJDQVJfUFVMUwkJMHhGRUNCCi0KLS8qIGRldGVjdGVkIFJYIGNhcnJpZXIgcGVyaW9kIChyZXNvbHV0aW9uOiA1MDAgbnMpICovCi0jZGVmaW5lIEVORV9DSVJDQVJfUFJECQkweEZFQ0MKLSNkZWZpbmUgRU5FX0NJUkNBUl9QUkRfVkFMSUQJMHg4MAkvKiBkYXRhIHZhbGlkIGNvbnRlbnQgdmFsaWQgKi8KLQotLyogZGV0ZWN0ZWQgUlggY2FycmllciBwdWxzZSB3aWR0aCAocmVzb2x1dGlvbjogNTAwIG5zKSAqLwotI2RlZmluZSBFTkVfQ0lSQ0FSX0hQUkQJCTB4RkVDRAotCi0vKiBUWCBwZXJpb2QgKHJlc29sdXRpb246IDUwMCBucywgbWluaW11bSAyKSovCi0jZGVmaW5lIEVORV9DSVJNT0RfUFJECQkweEZFQ0UKLSNkZWZpbmUgRU5FX0NJUk1PRF9QUkRfUE9MCTB4ODAJLyogVFggY2FycmllciBwb2xhcml0eSovCi0KLSNkZWZpbmUgRU5FX0NJUk1PRF9QUkRfTUFYCTB4N0YJLyogMTUuODcga0h6ICovCi0jZGVmaW5lIEVORV9DSVJNT0RfUFJEX01JTgkweDAyCS8qIDEgTWh6ICovCi0KLS8qIFRYIHB1bHNlIHdpZHRoIChyZXNvbHV0aW9uOiA1MDAgbnMpKi8KLSNkZWZpbmUgRU5FX0NJUk1PRF9IUFJECQkweEZFQ0YKLQotLyogSGFyZHdhcmUgdmVyc2lvbnMgKi8KLSNkZWZpbmUgRU5FX0VDSFYJCTB4RkYwMAkvKiBoYXJkd2FyZSByZXZpc2lvbiAqLwotI2RlZmluZSBFTkVfUExMRlJICQkweEZGMTYKLSNkZWZpbmUgRU5FX1BMTEZSTAkJMHhGRjE3Ci0jZGVmaW5lIEVORV9ERUZBVUxUX1BMTF9GUkVRCTEwMDAKLQotI2RlZmluZSBFTkVfRUNTVFMJCTB4RkYxRAotI2RlZmluZSBFTkVfRUNTVFNfUlNSVkQJCTB4MDQKLQotI2RlZmluZSBFTkVfRUNWRVJfTUFKT1IJCTB4RkYxRQkvKiBjaGlwIHZlcnNpb24gKi8KLSNkZWZpbmUgRU5FX0VDVkVSX01JTk9SCQkweEZGMUYKLSNkZWZpbmUgRU5FX0hXX1ZFUl9PTEQJCTB4RkQwMAotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jZGVmaW5lIEVORV9EUklWRVJfTkFNRQkJImVuZV9pciIKLQotI2RlZmluZSBFTkVfSVJRX1JYCQkxCi0jZGVmaW5lIEVORV9JUlFfVFgJCTIKLQotI2RlZmluZSAgRU5FX0hXX0IJCTEJLyogMzkyNkIgKi8KLSNkZWZpbmUgIEVORV9IV19DCQkyCS8qIDM5MjZDICovCi0jZGVmaW5lICBFTkVfSFdfRAkJMwkvKiAzOTI2RCBvciBsYXRlciAqLwotCi0jZGVmaW5lIGVuZV9wcmludGsobGV2ZWwsIHRleHQsIC4uLikgXAotCXByaW50ayhsZXZlbCBFTkVfRFJJVkVSX05BTUUgIjogIiB0ZXh0ICJcbiIsICMjIF9fVkFfQVJHU19fKQotCi0jZGVmaW5lIGVuZV9ub3RpY2UodGV4dCwgLi4uKSBlbmVfcHJpbnRrKEtFUk5fTk9USUNFLCB0ZXh0LCAjIyBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgZW5lX3dhcm4odGV4dCwgLi4uKSBlbmVfcHJpbnRrKEtFUk5fV0FSTklORywgdGV4dCwgIyMgX19WQV9BUkdTX18pCi0KLQotI2RlZmluZSBfX2RiZyhsZXZlbCwgZm9ybWF0LCAuLi4pIFwKLQlkbyB7IFwKLQkJaWYgKGRlYnVnID49IGxldmVsKSBcCi0JCQlwcmludGsoS0VSTl9ERUJVRyBFTkVfRFJJVkVSX05BTUUgXAotCQkJCSI6ICIgZm9ybWF0ICJcbiIsICMjIF9fVkFfQVJHU19fKTsgXAotCX0gd2hpbGUgKDApCi0KLQotI2RlZmluZSBkYmcoZm9ybWF0LCAuLi4pCQlfX2RiZygxLCBmb3JtYXQsICMjIF9fVkFfQVJHU19fKQotI2RlZmluZSBkYmdfdmVyYm9zZShmb3JtYXQsIC4uLikJX19kYmcoMiwgZm9ybWF0LCAjIyBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgZGJnX3JlZ3MoZm9ybWF0LCAuLi4pCQlfX2RiZygzLCBmb3JtYXQsICMjIF9fVkFfQVJHU19fKQotCi0jZGVmaW5lIE1TX1RPX05TKG1zZWMpICgobXNlYykgKiAxMDAwKQotCi1zdHJ1Y3QgZW5lX2RldmljZSB7Ci0Jc3RydWN0IHBucF9kZXYgKnBucF9kZXY7Ci0Jc3RydWN0IGlucHV0X2RldiAqaWRldjsKLQlzdHJ1Y3QgaXJfZGV2X3Byb3BzICpwcm9wczsKLQotCS8qIGh3IElPIHNldHRpbmdzICovCi0JbG9uZyBod19pbzsKLQlpbnQgaXJxOwotCXNwaW5sb2NrX3QgaHdfbG9jazsKLQotCS8qIEhXIGZlYXR1cmVzICovCi0JaW50IGh3X3JldmlzaW9uOwkJCS8qIGhhcmR3YXJlIHJldmlzaW9uICovCi0JYm9vbCBod191c2VfZ3Bpb18wYTsJCQkvKiBncGlvMGEgaXMgZGVtb2R1bGF0ZWQgaW5wdXQqLwotCWJvb2wgaHdfZXh0cmFfYnVmZmVyOwkJCS8qIGhhcmR3YXJlIGhhcyAnZXh0cmEgYnVmZmVyJyAqLwotCWJvb2wgaHdfZmFuX2lucHV0OwkJCS8qIGZhbiBpbnB1dCBpcyBJUiBkYXRhIHNvdXJjZSAqLwotCWJvb2wgaHdfbGVhcm5pbmdfYW5kX3R4X2NhcGFibGU7CS8qIGxlYXJuaW5nICYgdHggY2FwYWJsZSAqLwotCWludCAgcGxsX2ZyZXE7Ci0JaW50IGJ1ZmZlcl9sZW47Ci0KLQkvKiBFeHRyYSBSWCBidWZmZXIgbG9jYXRpb24gKi8KLQlpbnQgZXh0cmFfYnVmMV9hZGRyZXNzOwotCWludCBleHRyYV9idWYxX2xlbjsKLQlpbnQgZXh0cmFfYnVmMl9hZGRyZXNzOwotCWludCBleHRyYV9idWYyX2xlbjsKLQotCS8qIEhXIHN0YXRlKi8KLQlpbnQgcl9wb2ludGVyOwkJCQkvKiBwb2ludGVyIHRvIG5leHQgc2FtcGxlIHRvIHJlYWQgKi8KLQlpbnQgd19wb2ludGVyOwkJCQkvKiBwb2ludGVyIHRvIG5leHQgc2FtcGxlIGh3IHdpbGwgd3JpdGUgKi8KLQlib29sIHJ4X2Zhbl9pbnB1dF9pbnVzZTsJCS8qIGlzIGZhbiBpbnB1dCBpbiB1c2UgZm9yIHJ4Ki8KLQlpbnQgdHhfcmVnOwkJCQkvKiBjdXJyZW50IHJlZyB1c2VkIGZvciBUWCAqLwotCXU4ICBzYXZlZF9jb25mMTsJCQkvKiBzYXZlZCBGRUMwIHJlZyAqLwotCXVuc2lnbmVkIGludCB0eF9zYW1wbGU7CQkJLyogY3VycmVudCBzYW1wbGUgZm9yIFRYICovCi0JYm9vbCB0eF9zYW1wbGVfcHVsc2U7CQkJLyogY3VycmVudCBzYW1wbGUgaXMgcHVsc2UgKi8KLQotCS8qIFRYIGJ1ZmZlciAqLwotCWludCAqdHhfYnVmZmVyOwkJCQkvKiBpbnB1dCBzYW1wbGVzIGJ1ZmZlciovCi0JaW50IHR4X3BvczsJCQkJLyogcG9zaXRpb24gaW4gdGhhdCBidWZlciAqLwotCWludCB0eF9sZW47CQkJCS8qIGN1cnJlbnQgbGVuIG9mIHR4IGJ1ZmZlciAqLwotCWludCB0eF9kb25lOwkJCQkvKiBkb25lIHRyYW5zbWl0dGluZyAqLwotCQkJCQkJLyogb25lIG1vcmUgc2FtcGxlIHBlbmRpbmcqLwotCXN0cnVjdCBjb21wbGV0aW9uIHR4X2NvbXBsZXRlOwkJLyogVFggY29tcGxldGlvbiAqLwotCXN0cnVjdCB0aW1lcl9saXN0IHR4X3NpbV90aW1lcjsKLQotCS8qIFRYIHNldHRpbmdzICovCi0JaW50IHR4X3BlcmlvZDsKLQlpbnQgdHhfZHV0eV9jeWNsZTsKLQlpbnQgdHJhbnNtaXR0ZXJfbWFzazsKLQotCS8qIFJYIHNldHRpbmdzICovCi0JYm9vbCBsZWFybmluZ19tb2RlX2VuYWJsZWQ7CQkvKiBsZWFybmluZyBpbnB1dCBlbmFibGVkICovCi0JYm9vbCBjYXJyaWVyX2RldGVjdF9lbmFibGVkOwkJLyogY2FycmllciBkZXRlY3QgZW5hYmxlZCAqLwotCWludCByeF9wZXJpb2RfYWRqdXN0OwotCWJvb2wgcnhfZW5hYmxlZDsKLX07Ci0KLXN0YXRpYyBpbnQgZW5lX2lycV9zdGF0dXMoc3RydWN0IGVuZV9kZXZpY2UgKmRldik7Ci1zdGF0aWMgdm9pZCBlbmVfcnhfcmVhZF9od19wb2ludGVyKHN0cnVjdCBlbmVfZGV2aWNlICpkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9JUi9pbW9uLmMgYi9kcml2ZXJzL21lZGlhL0lSL2ltb24uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmMxMTgwNi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL0lSL2ltb24uYworKysgL2Rldi9udWxsCkBAIC0xLDI0NzAgKzAsMCBAQAotLyoKLSAqICAgaW1vbi5jOglpbnB1dCBhbmQgZGlzcGxheSBkcml2ZXIgZm9yIFNvdW5kR3JhcGggaU1PTiBJUi9WRkQvTENECi0gKgotICogICBDb3B5cmlnaHQoQykgMjAxMCAgSmFyb2QgV2lsc29uIDxqYXJvZEB3aWxzb25ldC5jb20+Ci0gKiAgIFBvcnRpb25zIGJhc2VkIG9uIHRoZSBvcmlnaW5hbCBsaXJjX2ltb24gZHJpdmVyLAotICoJQ29weXJpZ2h0KEMpIDIwMDQgIFZlbmt5IFJhanUoZGV2QHZlbmt5LndzKQotICoKLSAqICAgSHVnZSB0aGFua3MgdG8gUi4gR2VvZmYgTmV3YnVyeSBmb3IgaW52YWx1YWJsZSBkZWJ1Z2dpbmcgb24gdGhlCi0gKiAgIDB4ZmZkYyBpTU9OIGRldmljZXMsIGFuZCBmb3Igc2VuZGluZyBtZSBvbmUgdG8gaGFjayBvbiwgd2l0aG91dAotICogICB3aGljaCB0aGUgc3VwcG9ydCBmb3IgdGhlbSB3b3VsZG4ndCBiZSBuZWFybHkgYXMgZ29vZC4gVGhhbmtzCi0gKiAgIGFsc28gdG8gdGhlIG51bWVyb3VzIDB4ZmZkYyBkZXZpY2Ugb3duZXJzIHRoYXQgdGVzdGVkIGF1dG8tY29uZmlnCi0gKiAgIHN1cHBvcnQgZm9yIG1lIGFuZCBwcm92aWRlZCBkZWJ1ZyBkdW1wcyBmcm9tIHRoZWlyIGRldmljZXMuCi0gKgotICogICBpbW9uIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotCi0jZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6JXM6ICIgZm10LCBfX2Z1bmNfXwotCi0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KLQotI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdXNiLmg+Ci0jaW5jbHVkZSA8bGludXgvdXNiL2lucHV0Lmg+Ci0jaW5jbHVkZSA8bWVkaWEvaXItY29yZS5oPgotCi0jaW5jbHVkZSA8bGludXgvdGltZS5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+Ci0KLSNkZWZpbmUgTU9EX0FVVEhPUgkiSmFyb2QgV2lsc29uIDxqYXJvZEB3aWxzb25ldC5jb20+IgotI2RlZmluZSBNT0RfREVTQwkiRHJpdmVyIGZvciBTb3VuZEdyYXBoIGlNT04gTXVsdGlNZWRpYSBJUi9EaXNwbGF5IgotI2RlZmluZSBNT0RfTkFNRQkiaW1vbiIKLSNkZWZpbmUgTU9EX1ZFUlNJT04JIjAuOS4yIgotCi0jZGVmaW5lIERJU1BMQVlfTUlOT1JfQkFTRQkxNDQKLSNkZWZpbmUgREVWSUNFX05BTUUJImxjZCVkIgotCi0jZGVmaW5lIEJVRl9DSFVOS19TSVpFCTgKLSNkZWZpbmUgQlVGX1NJWkUJMTI4Ci0KLSNkZWZpbmUgQklUX0RVUkFUSU9OCTI1MAkvKiBlYWNoIGJpdCByZWNlaXZlZCBpcyAyNTB1cyAqLwotCi0jZGVmaW5lIElNT05fQ0xPQ0tfRU5BQkxFX1BBQ0tFVFMJMgotCi0vKioqIFAgUiBPIFQgTyBUIFkgUCBFIFMgKioqLwotCi0vKiBVU0IgQ2FsbGJhY2sgcHJvdG90eXBlcyAqLwotc3RhdGljIGludCBpbW9uX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCi0JCSAgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCk7Ci1zdGF0aWMgdm9pZCBpbW9uX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSk7Ci1zdGF0aWMgdm9pZCB1c2JfcnhfY2FsbGJhY2tfaW50ZjAoc3RydWN0IHVyYiAqdXJiKTsKLXN0YXRpYyB2b2lkIHVzYl9yeF9jYWxsYmFja19pbnRmMShzdHJ1Y3QgdXJiICp1cmIpOwotc3RhdGljIHZvaWQgdXNiX3R4X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYik7Ci0KLS8qIHN1c3BlbmQvcmVzdW1lIHN1cHBvcnQgKi8KLXN0YXRpYyBpbnQgaW1vbl9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpOwotc3RhdGljIGludCBpbW9uX3N1c3BlbmQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKTsKLQotLyogRGlzcGxheSBmaWxlX29wZXJhdGlvbnMgZnVuY3Rpb24gcHJvdG90eXBlcyAqLwotc3RhdGljIGludCBkaXNwbGF5X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOwotc3RhdGljIGludCBkaXNwbGF5X2Nsb3NlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKLQotLyogVkZEIHdyaXRlIG9wZXJhdGlvbiAqLwotc3RhdGljIHNzaXplX3QgdmZkX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyICpidWYsCi0JCQkgc2l6ZV90IG5fYnl0ZXMsIGxvZmZfdCAqcG9zKTsKLQotLyogTENEIGZpbGVfb3BlcmF0aW9ucyBvdmVycmlkZSBmdW5jdGlvbiBwcm90b3R5cGVzICovCi1zdGF0aWMgc3NpemVfdCBsY2Rfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgKmJ1ZiwKLQkJCSBzaXplX3Qgbl9ieXRlcywgbG9mZl90ICpwb3MpOwotCi0vKioqIEcgTCBPIEIgQSBMIFMgKioqLwotCi1zdHJ1Y3QgaW1vbl9jb250ZXh0IHsKLQlzdHJ1Y3QgZGV2aWNlICpkZXY7Ci0Jc3RydWN0IGlyX2Rldl9wcm9wcyAqcHJvcHM7Ci0JLyogTmV3ZXIgZGV2aWNlcyBoYXZlIHR3byBpbnRlcmZhY2VzICovCi0Jc3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldl9pbnRmMDsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2X2ludGYxOwotCi0JYm9vbCBkaXNwbGF5X3N1cHBvcnRlZDsJCS8qIG5vdCBhbGwgY29udHJvbGxlcnMgZG8gKi8KLQlib29sIGRpc3BsYXlfaXNvcGVuOwkJLyogZGlzcGxheSBwb3J0IGhhcyBiZWVuIG9wZW5lZCAqLwotCWJvb2wgcmZfZGV2aWNlOwkJCS8qIHRydWUgaWYgaU1PTiAyLjRHIExUL0RUIFJGIGRldmljZSAqLwotCWJvb2wgcmZfaXNhc3NvY2lhdGluZzsJCS8qIFJGIHJlbW90ZSBhc3NvY2lhdGluZyAqLwotCWJvb2wgZGV2X3ByZXNlbnRfaW50ZjA7CQkvKiBVU0IgZGV2aWNlIHByZXNlbmNlLCBpbnRlcmZhY2UgMCAqLwotCWJvb2wgZGV2X3ByZXNlbnRfaW50ZjE7CQkvKiBVU0IgZGV2aWNlIHByZXNlbmNlLCBpbnRlcmZhY2UgMSAqLwotCi0Jc3RydWN0IG11dGV4IGxvY2s7CQkvKiB0byBsb2NrIHRoaXMgb2JqZWN0ICovCi0Jd2FpdF9xdWV1ZV9oZWFkX3QgcmVtb3ZlX29rOwkvKiBGb3IgdW5leHBlY3RlZCBVU0IgZGlzY29ubmVjdHMgKi8KLQotCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqcnhfZW5kcG9pbnRfaW50ZjA7Ci0Jc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICpyeF9lbmRwb2ludF9pbnRmMTsKLQlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKnR4X2VuZHBvaW50OwotCXN0cnVjdCB1cmIgKnJ4X3VyYl9pbnRmMDsKLQlzdHJ1Y3QgdXJiICpyeF91cmJfaW50ZjE7Ci0Jc3RydWN0IHVyYiAqdHhfdXJiOwotCWJvb2wgdHhfY29udHJvbDsKLQl1bnNpZ25lZCBjaGFyIHVzYl9yeF9idWZbOF07Ci0JdW5zaWduZWQgY2hhciB1c2JfdHhfYnVmWzhdOwotCi0Jc3RydWN0IHR4X3QgewotCQl1bnNpZ25lZCBjaGFyIGRhdGFfYnVmWzM1XTsJLyogdXNlciBkYXRhIGJ1ZmZlciAqLwotCQlzdHJ1Y3QgY29tcGxldGlvbiBmaW5pc2hlZDsJLyogd2FpdCBmb3Igd3JpdGUgdG8gZmluaXNoICovCi0JCWJvb2wgYnVzeTsJCQkvKiB3cml0ZSBpbiBwcm9ncmVzcyAqLwotCQlpbnQgc3RhdHVzOwkJCS8qIHN0YXR1cyBvZiB0eCBjb21wbGV0aW9uICovCi0JfSB0eDsKLQotCXUxNiB2ZW5kb3I7CQkJLyogdXNiIHZlbmRvciBJRCAqLwotCXUxNiBwcm9kdWN0OwkJCS8qIHVzYiBwcm9kdWN0IElEICovCi0KLQlzdHJ1Y3QgaW5wdXRfZGV2ICpyZGV2OwkJLyogaW5wdXQgZGV2aWNlIGZvciByZW1vdGUgKi8KLQlzdHJ1Y3QgaW5wdXRfZGV2ICppZGV2OwkJLyogaW5wdXQgZGV2aWNlIGZvciBwYW5lbCAmIElSIG1vdXNlICovCi0Jc3RydWN0IGlucHV0X2RldiAqdG91Y2g7CS8qIGlucHV0IGRldmljZSBmb3IgdG91Y2hzY3JlZW4gKi8KLQotCXNwaW5sb2NrX3Qga2NfbG9jazsJCS8qIG1ha2Ugc3VyZSB3ZSBnZXQga2V5Y29kZXMgcmlnaHQgKi8KLQl1MzIga2M7CQkJCS8qIGN1cnJlbnQgaW5wdXQga2V5Y29kZSAqLwotCXUzMiBsYXN0X2tleWNvZGU7CQkvKiBsYXN0IHJlcG9ydGVkIGlucHV0IGtleWNvZGUgKi8KLQl1MzIgcmNfc2NhbmNvZGU7CQkvKiB0aGUgY29tcHV0ZWQgcmVtb3RlIHNjYW5jb2RlICovCi0JdTggcmNfdG9nZ2xlOwkJCS8qIHRoZSBjb21wdXRlZCByZW1vdGUgdG9nZ2xlIGJpdCAqLwotCXU2NCBpcl90eXBlOwkJCS8qIGlNT04gb3IgTUNFIChSQzYpIElSIHByb3RvY29sPyAqLwotCWJvb2wgcmVsZWFzZV9jb2RlOwkJLyogc29tZSBrZXlzIHNlbmQgYSByZWxlYXNlIGNvZGUgKi8KLQotCXU4IGRpc3BsYXlfdHlwZTsJCS8qIHN0b3JlIHRoZSBkaXNwbGF5IHR5cGUgKi8KLQlib29sIHBhZF9tb3VzZTsJCQkvKiB0b2dnbGUga2JkKDApL21vdXNlKDEpIG1vZGUgKi8KLQotCWNoYXIgbmFtZV9yZGV2WzEyOF07CQkvKiByYyBpbnB1dCBkZXZpY2UgbmFtZSAqLwotCWNoYXIgcGh5c19yZGV2WzY0XTsJCS8qIHJjIGlucHV0IGRldmljZSBwaHlzIHBhdGggKi8KLQotCWNoYXIgbmFtZV9pZGV2WzEyOF07CQkvKiBpbnB1dCBkZXZpY2UgbmFtZSAqLwotCWNoYXIgcGh5c19pZGV2WzY0XTsJCS8qIGlucHV0IGRldmljZSBwaHlzIHBhdGggKi8KLQotCWNoYXIgbmFtZV90b3VjaFsxMjhdOwkJLyogdG91Y2ggc2NyZWVuIG5hbWUgKi8KLQljaGFyIHBoeXNfdG91Y2hbNjRdOwkJLyogdG91Y2ggc2NyZWVuIHBoeXMgcGF0aCAqLwotCXN0cnVjdCB0aW1lcl9saXN0IHR0aW1lcjsJLyogdG91Y2ggc2NyZWVuIHRpbWVyICovCi0JaW50IHRvdWNoX3g7CQkJLyogeCBjb29yZGluYXRlIG9uIHRvdWNoc2NyZWVuICovCi0JaW50IHRvdWNoX3k7CQkJLyogeSBjb29yZGluYXRlIG9uIHRvdWNoc2NyZWVuICovCi19OwotCi0jZGVmaW5lIFRPVUNIX1RJTUVPVVQJKEhaLzMwKQotCi0vKiB2ZmQgY2hhcmFjdGVyIGRldmljZSBmaWxlIG9wZXJhdGlvbnMgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZmZF9mb3BzID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkub3BlbgkJPSAmZGlzcGxheV9vcGVuLAotCS53cml0ZQkJPSAmdmZkX3dyaXRlLAotCS5yZWxlYXNlCT0gJmRpc3BsYXlfY2xvc2UsCi0JLmxsc2VlawkJPSBub29wX2xsc2VlaywKLX07Ci0KLS8qIGxjZCBjaGFyYWN0ZXIgZGV2aWNlIGZpbGUgb3BlcmF0aW9ucyAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbGNkX2ZvcHMgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5vcGVuCQk9ICZkaXNwbGF5X29wZW4sCi0JLndyaXRlCQk9ICZsY2Rfd3JpdGUsCi0JLnJlbGVhc2UJPSAmZGlzcGxheV9jbG9zZSwKLQkubGxzZWVrCQk9IG5vb3BfbGxzZWVrLAotfTsKLQotZW51bSB7Ci0JSU1PTl9ESVNQTEFZX1RZUEVfQVVUTyA9IDAsCi0JSU1PTl9ESVNQTEFZX1RZUEVfVkZEICA9IDEsCi0JSU1PTl9ESVNQTEFZX1RZUEVfTENEICA9IDIsCi0JSU1PTl9ESVNQTEFZX1RZUEVfVkdBICA9IDMsCi0JSU1PTl9ESVNQTEFZX1RZUEVfTk9ORSA9IDQsCi19OwotCi1lbnVtIHsKLQlJTU9OX0tFWV9JTU9OCT0gMCwKLQlJTU9OX0tFWV9NQ0UJPSAxLAotCUlNT05fS0VZX1BBTkVMCT0gMiwKLX07Ci0KLS8qCi0gKiBVU0IgRGV2aWNlIElEIGZvciBpTU9OIFVTQiBDb250cm9sIEJvYXJkcwotICoKLSAqIFRoZSBXaW5kb3dzIGRyaXZlcnMgY29udGFpbiA2IGRpZmZlcmVudCBpbmYgZmlsZXMsIG1vcmUgb3IgbGVzcyBvbmUgZm9yCi0gKiBlYWNoIG5ldyBkZXZpY2UgdW50aWwgdGhlIDB4MDAzNC0weDAwNDYgZGV2aWNlcywgd2hpY2ggYWxsIHVzZSB0aGUgc2FtZQotICogZHJpdmVyLiBTb21lIG9mIHRoZSBkZXZpY2VzIGluIHRoZSAzNC00NiByYW5nZSBoYXZlbid0IGJlZW4gZGVmaW5pdGl2ZWx5Ci0gKiBpZGVudGlmaWVkIHlldC4gRWFybHkgZGV2aWNlcyBoYXZlIGVpdGhlciBhIFRyaUdlbSBDb21wdXRlciwgSW5jLiBvciBhCi0gKiBTYW1zdW5nIHZlbmRvciBJRCAoMHgwYWE4IGFuZCAweDA0ZTggcmVzcGVjdGl2ZWx5KSwgd2hpbGUgYWxsIGxhdGVyCi0gKiBkZXZpY2VzIHVzZSB0aGUgU291bmRHcmFwaCB2ZW5kb3IgSUQgKDB4MTVjMikuIFRoaXMgZHJpdmVyIG9ubHkgc3VwcG9ydHMKLSAqIHRoZSBmZmRjIGFuZCBsYXRlciBkZXZpY2VzLCB3aGljaCBkbyBvbmJvYXJkIGRlY29kaW5nLgotICovCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaW1vbl91c2JfaWRfdGFibGVbXSA9IHsKLQkvKgotCSAqIFNldmVyYWwgZGV2aWNlcyB3aXRoIHRoaXMgc2FtZSBkZXZpY2UgSUQsIGFsbCB1c2UgaU1PTl9QQUQuaW5mCi0JICogU291bmRHcmFwaCBpTU9OIFBBRCAoSVIgJiBWRkQpCi0JICogU291bmRHcmFwaCBpTU9OIFBBRCAoSVIgJiBMQ0QpCi0JICogU291bmRHcmFwaCBpTU9OIEtub2IgKElSIG9ubHkpCi0JICovCi0JeyBVU0JfREVWSUNFKDB4MTVjMiwgMHhmZmRjKSB9LAotCi0JLyoKLQkgKiBOZXdlciBkZXZpY2VzLCBhbGwgZHJpdmVuIGJ5IHRoZSBsYXRlc3QgaU1PTiBXaW5kb3dzIGRyaXZlciwgZnVsbAotCSAqIGxpc3Qgb2YgZGV2aWNlIElEcyBleHRyYWN0ZWQgdmlhICdzdHJpbmdzIFNldHVwL2RhdGExLmhkciB8Z3JlcCAxNWMyJwotCSAqIE5lZWQgdXNlciBpbnB1dCB0byBmaWxsIGluIGRldGFpbHMgb24gdW5rbm93biBkZXZpY2VzLgotCSAqLwotCS8qIFNvdW5kR3JhcGggaU1PTiBPRU0gVG91Y2ggTENEIChJUiAmIDciIFZHQSBMQ0QpICovCi0JeyBVU0JfREVWSUNFKDB4MTVjMiwgMHgwMDM0KSB9LAotCS8qIFNvdW5kR3JhcGggaU1PTiBPRU0gVG91Y2ggTENEIChJUiAmIDQuMyIgVkdBIExDRCkgKi8KLQl7IFVTQl9ERVZJQ0UoMHgxNWMyLCAweDAwMzUpIH0sCi0JLyogU291bmRHcmFwaCBpTU9OIE9FTSBWRkQgKElSICYgVkZEKSAqLwotCXsgVVNCX0RFVklDRSgweDE1YzIsIDB4MDAzNikgfSwKLQkvKiBkZXZpY2Ugc3BlY2lmaWNzIHVua25vd24gKi8KLQl7IFVTQl9ERVZJQ0UoMHgxNWMyLCAweDAwMzcpIH0sCi0JLyogU291bmRHcmFwaCBpTU9OIE9FTSBMQ0QgKElSICYgTENEKSAqLwotCXsgVVNCX0RFVklDRSgweDE1YzIsIDB4MDAzOCkgfSwKLQkvKiBTb3VuZEdyYXBoIGlNT04gVWx0cmFCYXkgKElSICYgTENEKSAqLwotCXsgVVNCX0RFVklDRSgweDE1YzIsIDB4MDAzOSkgfSwKLQkvKiBkZXZpY2Ugc3BlY2lmaWNzIHVua25vd24gKi8KLQl7IFVTQl9ERVZJQ0UoMHgxNWMyLCAweDAwM2EpIH0sCi0JLyogZGV2aWNlIHNwZWNpZmljcyB1bmtub3duICovCi0JeyBVU0JfREVWSUNFKDB4MTVjMiwgMHgwMDNiKSB9LAotCS8qIFNvdW5kR3JhcGggaU1PTiBPRU0gSW5zaWRlIChJUiBvbmx5KSAqLwotCXsgVVNCX0RFVklDRSgweDE1YzIsIDB4MDAzYykgfSwKLQkvKiBkZXZpY2Ugc3BlY2lmaWNzIHVua25vd24gKi8KLQl7IFVTQl9ERVZJQ0UoMHgxNWMyLCAweDAwM2QpIH0sCi0JLyogZGV2aWNlIHNwZWNpZmljcyB1bmtub3duICovCi0JeyBVU0JfREVWSUNFKDB4MTVjMiwgMHgwMDNlKSB9LAotCS8qIGRldmljZSBzcGVjaWZpY3MgdW5rbm93biAqLwotCXsgVVNCX0RFVklDRSgweDE1YzIsIDB4MDAzZikgfSwKLQkvKiBkZXZpY2Ugc3BlY2lmaWNzIHVua25vd24gKi8KLQl7IFVTQl9ERVZJQ0UoMHgxNWMyLCAweDAwNDApIH0sCi0JLyogU291bmRHcmFwaCBpTU9OIE1JTkkgKElSIG9ubHkpICovCi0JeyBVU0JfREVWSUNFKDB4MTVjMiwgMHgwMDQxKSB9LAotCS8qIEFudGVjIFZlcmlzIE11bHRpbWVkaWEgU3RhdGlvbiBFWiBFeHRlcm5hbCAoSVIgb25seSkgKi8KLQl7IFVTQl9ERVZJQ0UoMHgxNWMyLCAweDAwNDIpIH0sCi0JLyogQW50ZWMgVmVyaXMgTXVsdGltZWRpYSBTdGF0aW9uIEJhc2ljIEludGVybmFsIChJUiBvbmx5KSAqLwotCXsgVVNCX0RFVklDRSgweDE1YzIsIDB4MDA0MykgfSwKLQkvKiBBbnRlYyBWZXJpcyBNdWx0aW1lZGlhIFN0YXRpb24gRWxpdGUgKElSICYgVkZEKSAqLwotCXsgVVNCX0RFVklDRSgweDE1YzIsIDB4MDA0NCkgfSwKLQkvKiBBbnRlYyBWZXJpcyBNdWx0aW1lZGlhIFN0YXRpb24gUHJlbWllcmUgKElSICYgTENEKSAqLwotCXsgVVNCX0RFVklDRSgweDE1YzIsIDB4MDA0NSkgfSwKLQkvKiBkZXZpY2Ugc3BlY2lmaWNzIHVua25vd24gKi8KLQl7IFVTQl9ERVZJQ0UoMHgxNWMyLCAweDAwNDYpIH0sCi0Je30KLX07Ci0KLS8qIFVTQiBEZXZpY2UgZGF0YSAqLwotc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGltb25fZHJpdmVyID0gewotCS5uYW1lCQk9IE1PRF9OQU1FLAotCS5wcm9iZQkJPSBpbW9uX3Byb2JlLAotCS5kaXNjb25uZWN0CT0gaW1vbl9kaXNjb25uZWN0LAotCS5zdXNwZW5kCT0gaW1vbl9zdXNwZW5kLAotCS5yZXN1bWUJCT0gaW1vbl9yZXN1bWUsCi0JLmlkX3RhYmxlCT0gaW1vbl91c2JfaWRfdGFibGUsCi19OwotCi1zdGF0aWMgc3RydWN0IHVzYl9jbGFzc19kcml2ZXIgaW1vbl92ZmRfY2xhc3MgPSB7Ci0JLm5hbWUJCT0gREVWSUNFX05BTUUsCi0JLmZvcHMJCT0gJnZmZF9mb3BzLAotCS5taW5vcl9iYXNlCT0gRElTUExBWV9NSU5PUl9CQVNFLAotfTsKLQotc3RhdGljIHN0cnVjdCB1c2JfY2xhc3NfZHJpdmVyIGltb25fbGNkX2NsYXNzID0gewotCS5uYW1lCQk9IERFVklDRV9OQU1FLAotCS5mb3BzCQk9ICZsY2RfZm9wcywKLQkubWlub3JfYmFzZQk9IERJU1BMQVlfTUlOT1JfQkFTRSwKLX07Ci0KLS8qIGltb24gcmVjZWl2ZXIgZnJvbnQgcGFuZWwva25vYiBrZXkgdGFibGUgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgewotCXU2NCBod19jb2RlOwotCXUzMiBrZXljb2RlOwotfSBpbW9uX3BhbmVsX2tleV90YWJsZVtdID0gewotCXsgMHgwMDAwMDAwMDBmMDBmZmVlbGwsIEtFWV9QUk9HMSB9LCAvKiBHbyAqLwotCXsgMHgwMDAwMDAwMDFmMDBmZmVlbGwsIEtFWV9BVURJTyB9LAotCXsgMHgwMDAwMDAwMDIwMDBmZmVlbGwsIEtFWV9WSURFTyB9LAotCXsgMHgwMDAwMDAwMDIxMDBmZmVlbGwsIEtFWV9DQU1FUkEgfSwKLQl7IDB4MDAwMDAwMDAyNzAwZmZlZWxsLCBLRVlfRFZEIH0sCi0JeyAweDAwMDAwMDAwMjMwMGZmZWVsbCwgS0VZX1RWIH0sCi0JeyAweDAwMDAwMDAwMDUwMGZmZWVsbCwgS0VZX1BSRVZJT1VTIH0sCi0JeyAweDAwMDAwMDAwMDcwMGZmZWVsbCwgS0VZX1JFV0lORCB9LAotCXsgMHgwMDAwMDAwMDA0MDBmZmVlbGwsIEtFWV9TVE9QIH0sCi0JeyAweDAwMDAwMDAwM2MwMGZmZWVsbCwgS0VZX1BMQVlQQVVTRSB9LAotCXsgMHgwMDAwMDAwMDA4MDBmZmVlbGwsIEtFWV9GQVNURk9SV0FSRCB9LAotCXsgMHgwMDAwMDAwMDA2MDBmZmVlbGwsIEtFWV9ORVhUIH0sCi0JeyAweDAwMDAwMDAxMDAwMGZmZWVsbCwgS0VZX1JJR0hUIH0sCi0JeyAweDAwMDAwMTAwMDAwMGZmZWVsbCwgS0VZX0xFRlQgfSwKLQl7IDB4MDAwMDAwMDAzZDAwZmZlZWxsLCBLRVlfU0VMRUNUIH0sCi0JeyAweDAwMDEwMDAwMDAwMGZmZWVsbCwgS0VZX1ZPTFVNRVVQIH0sCi0JeyAweDAxMDAwMDAwMDAwMGZmZWVsbCwgS0VZX1ZPTFVNRURPV04gfSwKLQl7IDB4MDAwMDAwMDAwMTAwZmZlZWxsLCBLRVlfTVVURSB9LAotCS8qIDB4ZmZkYyBpTU9OIE1DRSBWRkQgKi8KLQl7IDB4MDAwMTAwMDBmZmZmZmZlZWxsLCBLRVlfVk9MVU1FVVAgfSwKLQl7IDB4MDEwMDAwMDBmZmZmZmZlZWxsLCBLRVlfVk9MVU1FRE9XTiB9LAotCS8qIGlNT04gS25vYiB2YWx1ZXMgKi8KLQl7IDB4MDAwMTAwZmZmZmZmZmZlZWxsLCBLRVlfVk9MVU1FVVAgfSwKLQl7IDB4MDEwMDAwZmZmZmZmZmZlZWxsLCBLRVlfVk9MVU1FRE9XTiB9LAotCXsgMHgwMDAwMDhmZmZmZmZmZmVlbGwsIEtFWV9NVVRFIH0sCi19OwotCi0vKiB0byBwcmV2ZW50IHJhY2VzIGJldHdlZW4gb3BlbigpIGFuZCBkaXNjb25uZWN0KCksIHByb2JpbmcsIGV0YyAqLwotc3RhdGljIERFRklORV9NVVRFWChkcml2ZXJfbG9jayk7Ci0KLS8qIE1vZHVsZSBib29ra2VlcGluZyBiaXRzICovCi1NT0RVTEVfQVVUSE9SKE1PRF9BVVRIT1IpOwotTU9EVUxFX0RFU0NSSVBUSU9OKE1PRF9ERVNDKTsKLU1PRFVMRV9WRVJTSU9OKE1PRF9WRVJTSU9OKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBpbW9uX3VzYl9pZF90YWJsZSk7Ci0KLXN0YXRpYyBib29sIGRlYnVnOwotbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7Ci1NT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgbWVzc2FnZXM6IDA9bm8sIDE9eWVzIChkZWZhdWx0OiBubykiKTsKLQotLyogbGNkLCB2ZmQsIHZnYSBvciBub25lPyBzaG91bGQgYmUgYXV0by1kZXRlY3RlZCwgYnV0IGNhbiBiZSBvdmVycmlkZGVuLi4uICovCi1zdGF0aWMgaW50IGRpc3BsYXlfdHlwZTsKLW1vZHVsZV9wYXJhbShkaXNwbGF5X3R5cGUsIGludCwgU19JUlVHTyk7Ci1NT0RVTEVfUEFSTV9ERVNDKGRpc3BsYXlfdHlwZSwgIlR5cGUgb2YgYXR0YWNoZWQgZGlzcGxheS4gMD1hdXRvZGV0ZWN0LCAiCi0JCSAiMT12ZmQsIDI9bGNkLCAzPXZnYSwgND1ub25lIChkZWZhdWx0OiBhdXRvZGV0ZWN0KSIpOwotCi1zdGF0aWMgaW50IHBhZF9zdGFiaWxpemUgPSAxOwotbW9kdWxlX3BhcmFtKHBhZF9zdGFiaWxpemUsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOwotTU9EVUxFX1BBUk1fREVTQyhwYWRfc3RhYmlsaXplLCAiQXBwbHkgc3RhYmlsaXphdGlvbiBhbGdvcml0aG0gdG8gaU1PTiBQQUQgIgotCQkgInByZXNzZXMgaW4gYXJyb3cga2V5IG1vZGUuIDA9ZGlzYWJsZSwgMT1lbmFibGUgKGRlZmF1bHQpLiIpOwotCi0vKgotICogSW4gY2VydGFpbiB1c2UgY2FzZXMsIG1vdXNlIG1vZGUgaXNuJ3QgcmVhbGx5IGhlbHBmdWwsIGFuZCBjb3VsZCBhY3R1YWxseQotICogY2F1c2UgY29uZnVzaW9uLCBzbyBhbGxvdyBkaXNhYmxpbmcgaXQgd2hlbiB0aGUgSVIgZGV2aWNlIGlzIG9wZW4uCi0gKi8KLXN0YXRpYyBib29sIG5vbW91c2U7Ci1tb2R1bGVfcGFyYW0obm9tb3VzZSwgYm9vbCwgU19JUlVHTyB8IFNfSVdVU1IpOwotTU9EVUxFX1BBUk1fREVTQyhub21vdXNlLCAiRGlzYWJsZSBtb3VzZSBpbnB1dCBkZXZpY2UgbW9kZSB3aGVuIElSIGRldmljZSBpcyAiCi0JCSAib3Blbi4gMD1kb24ndCBkaXNhYmxlLCAxPWRpc2FibGUuIChkZWZhdWx0OiBkb24ndCBkaXNhYmxlKSIpOwotCi0vKiB0aHJlc2hvbGQgYXQgd2hpY2ggYSBwYWQgcHVzaCByZWdpc3RlcnMgYXMgYW4gYXJyb3cga2V5IGluIGtiZCBtb2RlICovCi1zdGF0aWMgaW50IHBhZF90aHJlc2g7Ci1tb2R1bGVfcGFyYW0ocGFkX3RocmVzaCwgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7Ci1NT0RVTEVfUEFSTV9ERVNDKHBhZF90aHJlc2gsICJUaHJlc2hvbGQgYXQgd2hpY2ggYSBwYWQgcHVzaCByZWdpc3RlcnMgYXMgYW4gIgotCQkgImFycm93IGtleSBpbiBrYmQgbW9kZSAoZGVmYXVsdDogMjgpIik7Ci0KLQotc3RhdGljIHZvaWQgZnJlZV9pbW9uX2NvbnRleHQoc3RydWN0IGltb25fY29udGV4dCAqaWN0eCkKLXsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpY3R4LT5kZXY7Ci0KLQl1c2JfZnJlZV91cmIoaWN0eC0+dHhfdXJiKTsKLQl1c2JfZnJlZV91cmIoaWN0eC0+cnhfdXJiX2ludGYwKTsKLQl1c2JfZnJlZV91cmIoaWN0eC0+cnhfdXJiX2ludGYxKTsKLQlrZnJlZShpY3R4KTsKLQotCWRldl9kYmcoZGV2LCAiJXM6IGlNT04gY29udGV4dCBmcmVlZFxuIiwgX19mdW5jX18pOwotfQotCi0vKioKLSAqIENhbGxlZCB3aGVuIHRoZSBEaXNwbGF5IGRldmljZSAoZS5nLiAvZGV2L2xjZDApCi0gKiBpcyBvcGVuZWQgYnkgdGhlIGFwcGxpY2F0aW9uLgotICovCi1zdGF0aWMgaW50IGRpc3BsYXlfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlOwotCXN0cnVjdCBpbW9uX2NvbnRleHQgKmljdHggPSBOVUxMOwotCWludCBzdWJtaW5vcjsKLQlpbnQgcmV0dmFsID0gMDsKLQotCS8qIHByZXZlbnQgcmFjZXMgd2l0aCBkaXNjb25uZWN0ICovCi0JbXV0ZXhfbG9jaygmZHJpdmVyX2xvY2spOwotCi0Jc3VibWlub3IgPSBpbWlub3IoaW5vZGUpOwotCWludGVyZmFjZSA9IHVzYl9maW5kX2ludGVyZmFjZSgmaW1vbl9kcml2ZXIsIHN1Ym1pbm9yKTsKLQlpZiAoIWludGVyZmFjZSkgewotCQlwcl9lcnIoImNvdWxkIG5vdCBmaW5kIGludGVyZmFjZSBmb3IgbWlub3IgJWRcbiIsIHN1Ym1pbm9yKTsKLQkJcmV0dmFsID0gLUVOT0RFVjsKLQkJZ290byBleGl0OwotCX0KLQlpY3R4ID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOwotCi0JaWYgKCFpY3R4KSB7Ci0JCXByX2Vycigibm8gY29udGV4dCBmb3VuZCBmb3IgbWlub3IgJWRcbiIsIHN1Ym1pbm9yKTsKLQkJcmV0dmFsID0gLUVOT0RFVjsKLQkJZ290byBleGl0OwotCX0KLQotCW11dGV4X2xvY2soJmljdHgtPmxvY2spOwotCi0JaWYgKCFpY3R4LT5kaXNwbGF5X3N1cHBvcnRlZCkgewotCQlwcl9lcnIoImRpc3BsYXkgbm90IHN1cHBvcnRlZCBieSBkZXZpY2VcbiIpOwotCQlyZXR2YWwgPSAtRU5PREVWOwotCX0gZWxzZSBpZiAoaWN0eC0+ZGlzcGxheV9pc29wZW4pIHsKLQkJcHJfZXJyKCJkaXNwbGF5IHBvcnQgaXMgYWxyZWFkeSBvcGVuXG4iKTsKLQkJcmV0dmFsID0gLUVCVVNZOwotCX0gZWxzZSB7Ci0JCWljdHgtPmRpc3BsYXlfaXNvcGVuID0gdHJ1ZTsKLQkJZmlsZS0+cHJpdmF0ZV9kYXRhID0gaWN0eDsKLQkJZGV2X2RiZyhpY3R4LT5kZXYsICJkaXNwbGF5IHBvcnQgb3BlbmVkXG4iKTsKLQl9Ci0KLQltdXRleF91bmxvY2soJmljdHgtPmxvY2spOwotCi1leGl0OgotCW11dGV4X3VubG9jaygmZHJpdmVyX2xvY2spOwotCXJldHVybiByZXR2YWw7Ci19Ci0KLS8qKgotICogQ2FsbGVkIHdoZW4gdGhlIGRpc3BsYXkgZGV2aWNlIChlLmcuIC9kZXYvbGNkMCkKLSAqIGlzIGNsb3NlZCBieSB0aGUgYXBwbGljYXRpb24uCi0gKi8KLXN0YXRpYyBpbnQgZGlzcGxheV9jbG9zZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlzdHJ1Y3QgaW1vbl9jb250ZXh0ICppY3R4ID0gTlVMTDsKLQlpbnQgcmV0dmFsID0gMDsKLQotCWljdHggPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0KLQlpZiAoIWljdHgpIHsKLQkJcHJfZXJyKCJubyBjb250ZXh0IGZvciBkZXZpY2VcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQltdXRleF9sb2NrKCZpY3R4LT5sb2NrKTsKLQotCWlmICghaWN0eC0+ZGlzcGxheV9zdXBwb3J0ZWQpIHsKLQkJcHJfZXJyKCJkaXNwbGF5IG5vdCBzdXBwb3J0ZWQgYnkgZGV2aWNlXG4iKTsKLQkJcmV0dmFsID0gLUVOT0RFVjsKLQl9IGVsc2UgaWYgKCFpY3R4LT5kaXNwbGF5X2lzb3BlbikgewotCQlwcl9lcnIoImRpc3BsYXkgaXMgbm90IG9wZW5cbiIpOwotCQlyZXR2YWwgPSAtRUlPOwotCX0gZWxzZSB7Ci0JCWljdHgtPmRpc3BsYXlfaXNvcGVuID0gZmFsc2U7Ci0JCWRldl9kYmcoaWN0eC0+ZGV2LCAiZGlzcGxheSBwb3J0IGNsb3NlZFxuIik7Ci0JCWlmICghaWN0eC0+ZGV2X3ByZXNlbnRfaW50ZjApIHsKLQkJCS8qCi0JCQkgKiBEZXZpY2UgZGlzY29ubmVjdGVkIGJlZm9yZSBjbG9zZSBhbmQgSVIgcG9ydCBpcyBub3QKLQkJCSAqIG9wZW4uIElmIElSIHBvcnQgaXMgb3BlbiwgY29udGV4dCB3aWxsIGJlIGRlbGV0ZWQgYnkKLQkJCSAqIGlyX2Nsb3NlLgotCQkJICovCi0JCQltdXRleF91bmxvY2soJmljdHgtPmxvY2spOwotCQkJZnJlZV9pbW9uX2NvbnRleHQoaWN0eCk7Ci0JCQlyZXR1cm4gcmV0dmFsOwotCQl9Ci0JfQotCi0JbXV0ZXhfdW5sb2NrKCZpY3R4LT5sb2NrKTsKLQlyZXR1cm4gcmV0dmFsOwotfQotCi0vKioKLSAqIFNlbmRzIGEgcGFja2V0IHRvIHRoZSBkZXZpY2UgLS0gdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZAotICogd2l0aCBpY3R4LT5sb2NrIGhlbGQuCi0gKi8KLXN0YXRpYyBpbnQgc2VuZF9wYWNrZXQoc3RydWN0IGltb25fY29udGV4dCAqaWN0eCkKLXsKLQl1bnNpZ25lZCBpbnQgcGlwZTsKLQl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7Ci0JaW50IGludGVydmFsID0gMDsKLQlpbnQgcmV0dmFsID0gMDsKLQlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpjb250cm9sX3JlcSA9IE5VTEw7Ci0KLQkvKiBDaGVjayBpZiB3ZSBuZWVkIHRvIHVzZSBjb250cm9sIG9yIGludGVycnVwdCB1cmIgKi8KLQlpZiAoIWljdHgtPnR4X2NvbnRyb2wpIHsKLQkJcGlwZSA9IHVzYl9zbmRpbnRwaXBlKGljdHgtPnVzYmRldl9pbnRmMCwKLQkJCQkgICAgICBpY3R4LT50eF9lbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyk7Ci0JCWludGVydmFsID0gaWN0eC0+dHhfZW5kcG9pbnQtPmJJbnRlcnZhbDsKLQotCQl1c2JfZmlsbF9pbnRfdXJiKGljdHgtPnR4X3VyYiwgaWN0eC0+dXNiZGV2X2ludGYwLCBwaXBlLAotCQkJCSBpY3R4LT51c2JfdHhfYnVmLAotCQkJCSBzaXplb2YoaWN0eC0+dXNiX3R4X2J1ZiksCi0JCQkJIHVzYl90eF9jYWxsYmFjaywgaWN0eCwgaW50ZXJ2YWwpOwotCi0JCWljdHgtPnR4X3VyYi0+YWN0dWFsX2xlbmd0aCA9IDA7Ci0JfSBlbHNlIHsKLQkJLyogZmlsbCByZXF1ZXN0IGludG8ga21hbGxvYydlZCBzcGFjZTogKi8KLQkJY29udHJvbF9yZXEgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0KSwKLQkJCQkgICAgICBHRlBfS0VSTkVMKTsKLQkJaWYgKGNvbnRyb2xfcmVxID09IE5VTEwpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQotCQkvKiBzZXR1cCBwYWNrZXQgaXMgJzIxIDA5IDAyMDAgMDAwMSAwMDA4JyAqLwotCQljb250cm9sX3JlcS0+YlJlcXVlc3RUeXBlID0gMHgyMTsKLQkJY29udHJvbF9yZXEtPmJSZXF1ZXN0ID0gMHgwOTsKLQkJY29udHJvbF9yZXEtPndWYWx1ZSA9IGNwdV90b19sZTE2KDB4MDIwMCk7Ci0JCWNvbnRyb2xfcmVxLT53SW5kZXggPSBjcHVfdG9fbGUxNigweDAwMDEpOwotCQljb250cm9sX3JlcS0+d0xlbmd0aCA9IGNwdV90b19sZTE2KDB4MDAwOCk7Ci0KLQkJLyogY29udHJvbCBwaXBlIGlzIGVuZHBvaW50IDB4MDAgKi8KLQkJcGlwZSA9IHVzYl9zbmRjdHJscGlwZShpY3R4LT51c2JkZXZfaW50ZjAsIDApOwotCi0JCS8qIGJ1aWxkIHRoZSBjb250cm9sIHVyYiAqLwotCQl1c2JfZmlsbF9jb250cm9sX3VyYihpY3R4LT50eF91cmIsIGljdHgtPnVzYmRldl9pbnRmMCwKLQkJCQkgICAgIHBpcGUsICh1bnNpZ25lZCBjaGFyICopY29udHJvbF9yZXEsCi0JCQkJICAgICBpY3R4LT51c2JfdHhfYnVmLAotCQkJCSAgICAgc2l6ZW9mKGljdHgtPnVzYl90eF9idWYpLAotCQkJCSAgICAgdXNiX3R4X2NhbGxiYWNrLCBpY3R4KTsKLQkJaWN0eC0+dHhfdXJiLT5hY3R1YWxfbGVuZ3RoID0gMDsKLQl9Ci0KLQlpbml0X2NvbXBsZXRpb24oJmljdHgtPnR4LmZpbmlzaGVkKTsKLQlpY3R4LT50eC5idXN5ID0gdHJ1ZTsKLQlzbXBfcm1iKCk7IC8qIGVuc3VyZSBsYXRlciByZWFkZXJzIGtub3cgd2UncmUgYnVzeSAqLwotCi0JcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIoaWN0eC0+dHhfdXJiLCBHRlBfS0VSTkVMKTsKLQlpZiAocmV0dmFsKSB7Ci0JCWljdHgtPnR4LmJ1c3kgPSBmYWxzZTsKLQkJc21wX3JtYigpOyAvKiBlbnN1cmUgbGF0ZXIgcmVhZGVycyBrbm93IHdlJ3JlIG5vdCBidXN5ICovCi0JCXByX2VycigiZXJyb3Igc3VibWl0dGluZyB1cmIoJWQpXG4iLCByZXR2YWwpOwotCX0gZWxzZSB7Ci0JCS8qIFdhaXQgZm9yIHRyYW5zbWlzc2lvbiB0byBjb21wbGV0ZSAob3IgYWJvcnQpICovCi0JCW11dGV4X3VubG9jaygmaWN0eC0+bG9jayk7Ci0JCXJldHZhbCA9IHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZSgKLQkJCQkmaWN0eC0+dHguZmluaXNoZWQpOwotCQlpZiAocmV0dmFsKQotCQkJcHJfZXJyKCJ0YXNrIGludGVycnVwdGVkXG4iKTsKLQkJbXV0ZXhfbG9jaygmaWN0eC0+bG9jayk7Ci0KLQkJcmV0dmFsID0gaWN0eC0+dHguc3RhdHVzOwotCQlpZiAocmV0dmFsKQotCQkJcHJfZXJyKCJwYWNrZXQgdHggZmFpbGVkICglZClcbiIsIHJldHZhbCk7Ci0JfQotCi0Ja2ZyZWUoY29udHJvbF9yZXEpOwotCi0JLyoKLQkgKiBJbmR1Y2UgYSBtYW5kYXRvcnkgNW1zIGRlbGF5IGJlZm9yZSByZXR1cm5pbmcsIGFzIG90aGVyd2lzZSwKLQkgKiBzZW5kX3BhY2tldCBjYW4gZ2V0IGNhbGxlZCBzbyByYXBpZGx5IGFzIHRvIG92ZXJ3aGVsbSB0aGUgZGV2aWNlLAotCSAqIHBhcnRpY3VsYXJseSBvbiBmYXN0ZXIgc3lzdGVtcyBhbmQvb3IgdGhvc2Ugd2l0aCBxdWlya3kgdXNiLgotCSAqLwotCXRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKDUpOwotCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKLQlzY2hlZHVsZV90aW1lb3V0KHRpbWVvdXQpOwotCi0JcmV0dXJuIHJldHZhbDsKLX0KLQotLyoqCi0gKiBTZW5kcyBhbiBhc3NvY2lhdGUgcGFja2V0IHRvIHRoZSBpTU9OIDIuNEcuCi0gKgotICogVGhpcyBtaWdodCBub3QgYmUgc3VjaCBhIGdvb2QgaWRlYSwgc2luY2UgaXQgaGFzIGFuIGlkIGNvbGxpc2lvbiB3aXRoCi0gKiBzb21lIHZlcnNpb25zIG9mIHRoZSAiSVIgJiBWRkQiIGNvbWJvLiBUaGUgb25seSB3YXkgdG8gZGV0ZXJtaW5lIGlmIGl0Ci0gKiBpcyBhbiBSRiB2ZXJzaW9uIGlzIHRvIGxvb2sgYXQgdGhlIHByb2R1Y3QgZGVzY3JpcHRpb24gc3RyaW5nLiAoV2hpY2gKLSAqIHdlIGN1cnJlbnRseSBkbyBub3QgZmV0Y2gpLgotICovCi1zdGF0aWMgaW50IHNlbmRfYXNzb2NpYXRlXzI0ZyhzdHJ1Y3QgaW1vbl9jb250ZXh0ICppY3R4KQotewotCWludCByZXR2YWw7Ci0JY29uc3QgdW5zaWduZWQgY2hhciBwYWNrZXRbOF0gPSB7IDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsCi0JCQkJCSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCB9OwotCi0JaWYgKCFpY3R4KSB7Ci0JCXByX2Vycigibm8gY29udGV4dCBmb3IgZGV2aWNlXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JaWYgKCFpY3R4LT5kZXZfcHJlc2VudF9pbnRmMCkgewotCQlwcl9lcnIoIm5vIGlNT04gZGV2aWNlIHByZXNlbnRcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQltZW1jcHkoaWN0eC0+dXNiX3R4X2J1ZiwgcGFja2V0LCBzaXplb2YocGFja2V0KSk7Ci0JcmV0dmFsID0gc2VuZF9wYWNrZXQoaWN0eCk7Ci0KLQlyZXR1cm4gcmV0dmFsOwotfQotCi0vKioKLSAqIFNlbmRzIHBhY2tldHMgdG8gc2V0dXAgYW5kIHNob3cgY2xvY2sgb24gaU1PTiBkaXNwbGF5Ci0gKgotICogQXJndW1lbnRzOiB5ZWFyIC0gbGFzdCAyIGRpZ2l0cyBvZiB5ZWFyLCBtb250aCAtIDEuLjEyLAotICogZGF5IC0gMS4uMzEsIGRvdyAtIGRheSBvZiB0aGUgd2VlayAoMC1TdW4uLi42LVNhdCksCi0gKiBob3VyIC0gMC4uMjMsIG1pbnV0ZSAtIDAuLjU5LCBzZWNvbmQgLSAwLi41OQotICovCi1zdGF0aWMgaW50IHNlbmRfc2V0X2ltb25fY2xvY2soc3RydWN0IGltb25fY29udGV4dCAqaWN0eCwKLQkJCSAgICAgICB1bnNpZ25lZCBpbnQgeWVhciwgdW5zaWduZWQgaW50IG1vbnRoLAotCQkJICAgICAgIHVuc2lnbmVkIGludCBkYXksIHVuc2lnbmVkIGludCBkb3csCi0JCQkgICAgICAgdW5zaWduZWQgaW50IGhvdXIsIHVuc2lnbmVkIGludCBtaW51dGUsCi0JCQkgICAgICAgdW5zaWduZWQgaW50IHNlY29uZCkKLXsKLQl1bnNpZ25lZCBjaGFyIGNsb2NrX2VuYWJsZV9wa3RbSU1PTl9DTE9DS19FTkFCTEVfUEFDS0VUU11bOF07Ci0JaW50IHJldHZhbCA9IDA7Ci0JaW50IGk7Ci0KLQlpZiAoIWljdHgpIHsKLQkJcHJfZXJyKCJubyBjb250ZXh0IGZvciBkZXZpY2VcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQlzd2l0Y2ggKGljdHgtPmRpc3BsYXlfdHlwZSkgewotCWNhc2UgSU1PTl9ESVNQTEFZX1RZUEVfTENEOgotCQljbG9ja19lbmFibGVfcGt0WzBdWzBdID0gMHg4MDsKLQkJY2xvY2tfZW5hYmxlX3BrdFswXVsxXSA9IHllYXI7Ci0JCWNsb2NrX2VuYWJsZV9wa3RbMF1bMl0gPSBtb250aC0xOwotCQljbG9ja19lbmFibGVfcGt0WzBdWzNdID0gZGF5OwotCQljbG9ja19lbmFibGVfcGt0WzBdWzRdID0gaG91cjsKLQkJY2xvY2tfZW5hYmxlX3BrdFswXVs1XSA9IG1pbnV0ZTsKLQkJY2xvY2tfZW5hYmxlX3BrdFswXVs2XSA9IHNlY29uZDsKLQotCQljbG9ja19lbmFibGVfcGt0WzFdWzBdID0gMHg4MDsKLQkJY2xvY2tfZW5hYmxlX3BrdFsxXVsxXSA9IDA7Ci0JCWNsb2NrX2VuYWJsZV9wa3RbMV1bMl0gPSAwOwotCQljbG9ja19lbmFibGVfcGt0WzFdWzNdID0gMDsKLQkJY2xvY2tfZW5hYmxlX3BrdFsxXVs0XSA9IDA7Ci0JCWNsb2NrX2VuYWJsZV9wa3RbMV1bNV0gPSAwOwotCQljbG9ja19lbmFibGVfcGt0WzFdWzZdID0gMDsKLQotCQlpZiAoaWN0eC0+cHJvZHVjdCA9PSAweGZmZGMpIHsKLQkJCWNsb2NrX2VuYWJsZV9wa3RbMF1bN10gPSAweDUwOwotCQkJY2xvY2tfZW5hYmxlX3BrdFsxXVs3XSA9IDB4NTE7Ci0JCX0gZWxzZSB7Ci0JCQljbG9ja19lbmFibGVfcGt0WzBdWzddID0gMHg4ODsKLQkJCWNsb2NrX2VuYWJsZV9wa3RbMV1bN10gPSAweDhhOwotCQl9Ci0KLQkJYnJlYWs7Ci0KLQljYXNlIElNT05fRElTUExBWV9UWVBFX1ZGRDoKLQkJY2xvY2tfZW5hYmxlX3BrdFswXVswXSA9IHllYXI7Ci0JCWNsb2NrX2VuYWJsZV9wa3RbMF1bMV0gPSBtb250aC0xOwotCQljbG9ja19lbmFibGVfcGt0WzBdWzJdID0gZGF5OwotCQljbG9ja19lbmFibGVfcGt0WzBdWzNdID0gZG93OwotCQljbG9ja19lbmFibGVfcGt0WzBdWzRdID0gaG91cjsKLQkJY2xvY2tfZW5hYmxlX3BrdFswXVs1XSA9IG1pbnV0ZTsKLQkJY2xvY2tfZW5hYmxlX3BrdFswXVs2XSA9IHNlY29uZDsKLQkJY2xvY2tfZW5hYmxlX3BrdFswXVs3XSA9IDB4NDA7Ci0KLQkJY2xvY2tfZW5hYmxlX3BrdFsxXVswXSA9IDA7Ci0JCWNsb2NrX2VuYWJsZV9wa3RbMV1bMV0gPSAwOwotCQljbG9ja19lbmFibGVfcGt0WzFdWzJdID0gMTsKLQkJY2xvY2tfZW5hYmxlX3BrdFsxXVszXSA9IDA7Ci0JCWNsb2NrX2VuYWJsZV9wa3RbMV1bNF0gPSAwOwotCQljbG9ja19lbmFibGVfcGt0WzFdWzVdID0gMDsKLQkJY2xvY2tfZW5hYmxlX3BrdFsxXVs2XSA9IDA7Ci0JCWNsb2NrX2VuYWJsZV9wa3RbMV1bN10gPSAweDQyOwotCi0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IElNT05fQ0xPQ0tfRU5BQkxFX1BBQ0tFVFM7IGkrKykgewotCQltZW1jcHkoaWN0eC0+dXNiX3R4X2J1ZiwgY2xvY2tfZW5hYmxlX3BrdFtpXSwgOCk7Ci0JCXJldHZhbCA9IHNlbmRfcGFja2V0KGljdHgpOwotCQlpZiAocmV0dmFsKSB7Ci0JCQlwcl9lcnIoInNlbmRfcGFja2V0IGZhaWxlZCBmb3IgcGFja2V0ICVkXG4iLCBpKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JcmV0dXJuIHJldHZhbDsKLX0KLQotLyoqCi0gKiBUaGVzZSBhcmUgdGhlIHN5c2ZzIGZ1bmN0aW9ucyB0byBoYW5kbGUgdGhlIGFzc29jaWF0aW9uIG9uIHRoZSBpTU9OIDIuNEcgTFQuCi0gKi8KLXN0YXRpYyBzc2l6ZV90IHNob3dfYXNzb2NpYXRlX3JlbW90ZShzdHJ1Y3QgZGV2aWNlICpkLAotCQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJICAgICBjaGFyICpidWYpCi17Ci0Jc3RydWN0IGltb25fY29udGV4dCAqaWN0eCA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKLQotCWlmICghaWN0eCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQltdXRleF9sb2NrKCZpY3R4LT5sb2NrKTsKLQlpZiAoaWN0eC0+cmZfaXNhc3NvY2lhdGluZykKLQkJc3RyY3B5KGJ1ZiwgImFzc29jaWF0aW5nXG4iKTsKLQllbHNlCi0JCXN0cmNweShidWYsICJjbG9zZWRcbiIpOwotCi0JZGV2X2luZm8oZCwgIlZpc2l0IGh0dHA6Ly93d3cubGlyYy5vcmcvaHRtbC9pbW9uLTI0Zy5odG1sIGZvciAiCi0JCSAiaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBhc3NvY2lhdGUgeW91ciBpTU9OIDIuNEcgRFQvTFQgIgotCQkgInJlbW90ZVxuIik7Ci0JbXV0ZXhfdW5sb2NrKCZpY3R4LT5sb2NrKTsKLQlyZXR1cm4gc3RybGVuKGJ1Zik7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHN0b3JlX2Fzc29jaWF0ZV9yZW1vdGUoc3RydWN0IGRldmljZSAqZCwKLQkJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCQkgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKLXsKLQlzdHJ1Y3QgaW1vbl9jb250ZXh0ICppY3R4OwotCi0JaWN0eCA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKLQotCWlmICghaWN0eCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQltdXRleF9sb2NrKCZpY3R4LT5sb2NrKTsKLQlpY3R4LT5yZl9pc2Fzc29jaWF0aW5nID0gdHJ1ZTsKLQlzZW5kX2Fzc29jaWF0ZV8yNGcoaWN0eCk7Ci0JbXV0ZXhfdW5sb2NrKCZpY3R4LT5sb2NrKTsKLQotCXJldHVybiBjb3VudDsKLX0KLQotLyoqCi0gKiBzeXNmcyBmdW5jdGlvbnMgdG8gY29udHJvbCBpbnRlcm5hbCBpbW9uIGNsb2NrCi0gKi8KLXN0YXRpYyBzc2l6ZV90IHNob3dfaW1vbl9jbG9jayhzdHJ1Y3QgZGV2aWNlICpkLAotCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCi17Ci0Jc3RydWN0IGltb25fY29udGV4dCAqaWN0eCA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKLQlzaXplX3QgbGVuOwotCi0JaWYgKCFpY3R4KQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCW11dGV4X2xvY2soJmljdHgtPmxvY2spOwotCi0JaWYgKCFpY3R4LT5kaXNwbGF5X3N1cHBvcnRlZCkgewotCQlsZW4gPSBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIk5vdCBzdXBwb3J0ZWQuIik7Ci0JfSBlbHNlIHsKLQkJbGVuID0gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsCi0JCQkiVG8gc2V0IHRoZSBjbG9jayBvbiB5b3VyIGlNT04gZGlzcGxheTpcbiIKLQkJCSIjIGRhdGUgXCIrJSV5ICUlbSAlJWQgJSV3ICUlSCAlJU0gJSVTXCIgPiBpbW9uX2Nsb2NrXG4iCi0JCQkiJXMiLCBpY3R4LT5kaXNwbGF5X2lzb3BlbiA/Ci0JCQkiXG5OT1RFOiBpbW9uIGRldmljZSBtdXN0IGJlIGNsb3NlZFxuIiA6ICIiKTsKLQl9Ci0KLQltdXRleF91bmxvY2soJmljdHgtPmxvY2spOwotCi0JcmV0dXJuIGxlbjsKLX0KLQotc3RhdGljIHNzaXplX3Qgc3RvcmVfaW1vbl9jbG9jayhzdHJ1Y3QgZGV2aWNlICpkLAotCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQotewotCXN0cnVjdCBpbW9uX2NvbnRleHQgKmljdHggPSBkZXZfZ2V0X2RydmRhdGEoZCk7Ci0Jc3NpemVfdCByZXR2YWw7Ci0JdW5zaWduZWQgaW50IHllYXIsIG1vbnRoLCBkYXksIGRvdywgaG91ciwgbWludXRlLCBzZWNvbmQ7Ci0KLQlpZiAoIWljdHgpCi0JCXJldHVybiAtRU5PREVWOwotCi0JbXV0ZXhfbG9jaygmaWN0eC0+bG9jayk7Ci0KLQlpZiAoIWljdHgtPmRpc3BsYXlfc3VwcG9ydGVkKSB7Ci0JCXJldHZhbCA9IC1FTk9ERVY7Ci0JCWdvdG8gZXhpdDsKLQl9IGVsc2UgaWYgKGljdHgtPmRpc3BsYXlfaXNvcGVuKSB7Ci0JCXJldHZhbCA9IC1FQlVTWTsKLQkJZ290byBleGl0OwotCX0KLQotCWlmIChzc2NhbmYoYnVmLCAiJXUgJXUgJXUgJXUgJXUgJXUgJXUiLAkmeWVhciwgJm1vbnRoLCAmZGF5LCAmZG93LAotCQkgICAmaG91ciwgJm1pbnV0ZSwgJnNlY29uZCkgIT0gNykgewotCQlyZXR2YWwgPSAtRUlOVkFMOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JaWYgKChtb250aCA8IDEgfHwgbW9udGggPiAxMikgfHwKLQkgICAgKGRheSA8IDEgfHwgZGF5ID4gMzEpIHx8IChkb3cgPiA2KSB8fAotCSAgICAoaG91ciA+IDIzKSB8fCAobWludXRlID4gNTkpIHx8IChzZWNvbmQgPiA1OSkpIHsKLQkJcmV0dmFsID0gLUVJTlZBTDsKLQkJZ290byBleGl0OwotCX0KLQotCXJldHZhbCA9IHNlbmRfc2V0X2ltb25fY2xvY2soaWN0eCwgeWVhciwgbW9udGgsIGRheSwgZG93LAotCQkJCSAgICAgaG91ciwgbWludXRlLCBzZWNvbmQpOwotCWlmIChyZXR2YWwpCi0JCWdvdG8gZXhpdDsKLQotCXJldHZhbCA9IGNvdW50OwotZXhpdDoKLQltdXRleF91bmxvY2soJmljdHgtPmxvY2spOwotCi0JcmV0dXJuIHJldHZhbDsKLX0KLQotCi1zdGF0aWMgREVWSUNFX0FUVFIoaW1vbl9jbG9jaywgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfaW1vbl9jbG9jaywKLQkJICAgc3RvcmVfaW1vbl9jbG9jayk7Ci0KLXN0YXRpYyBERVZJQ0VfQVRUUihhc3NvY2lhdGVfcmVtb3RlLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19hc3NvY2lhdGVfcmVtb3RlLAotCQkgICBzdG9yZV9hc3NvY2lhdGVfcmVtb3RlKTsKLQotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmltb25fZGlzcGxheV9zeXNmc19lbnRyaWVzW10gPSB7Ci0JJmRldl9hdHRyX2ltb25fY2xvY2suYXR0ciwKLQlOVUxMCi19OwotCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBpbW9uX2Rpc3BsYXlfYXR0cl9ncm91cCA9IHsKLQkuYXR0cnMgPSBpbW9uX2Rpc3BsYXlfc3lzZnNfZW50cmllcwotfTsKLQotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmltb25fcmZfc3lzZnNfZW50cmllc1tdID0gewotCSZkZXZfYXR0cl9hc3NvY2lhdGVfcmVtb3RlLmF0dHIsCi0JTlVMTAotfTsKLQotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgaW1vbl9yZl9hdHRyX2dyb3VwID0gewotCS5hdHRycyA9IGltb25fcmZfc3lzZnNfZW50cmllcwotfTsKLQotLyoqCi0gKiBXcml0ZXMgZGF0YSB0byB0aGUgVkZELiAgVGhlIGlNT04gVkZEIGlzIDJ4MTYgY2hhcmFjdGVycwotICogYW5kIHJlcXVpcmVzIGRhdGEgaW4gNSBjb25zZWN1dGl2ZSBVU0IgaW50ZXJydXB0IHBhY2tldHMsCi0gKiBlYWNoIHBhY2tldCBidXQgdGhlIGxhc3QgY2FycnlpbmcgNyBieXRlcy4KLSAqCi0gKiBJIGRvbid0IGtub3cgaWYgdGhlIFZGRCBib2FyZCBzdXBwb3J0cyBmZWF0dXJlcyBzdWNoIGFzCi0gKiBzY3JvbGxpbmcsIGNsZWFyaW5nIHJvd3MsIGJsYW5raW5nLCBldGMuIHNvIGF0Ci0gKiB0aGUgY2FsbGVyIG11c3QgcHJvdmlkZSBhIGZ1bGwgc2NyZWVuIG9mIGRhdGEuICBJZiBmZXdlcgotICogdGhhbiAzMiBieXRlcyBhcmUgcHJvdmlkZWQgc3BhY2VzIHdpbGwgYmUgYXBwZW5kZWQgdG8KLSAqIGdlbmVyYXRlIGEgZnVsbCBzY3JlZW4uCi0gKi8KLXN0YXRpYyBzc2l6ZV90IHZmZF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciAqYnVmLAotCQkJIHNpemVfdCBuX2J5dGVzLCBsb2ZmX3QgKnBvcykKLXsKLQlpbnQgaTsKLQlpbnQgb2Zmc2V0OwotCWludCBzZXE7Ci0JaW50IHJldHZhbCA9IDA7Ci0Jc3RydWN0IGltb25fY29udGV4dCAqaWN0eDsKLQljb25zdCB1bnNpZ25lZCBjaGFyIHZmZF9wYWNrZXQ2W10gPSB7Ci0JCTB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkYsIDB4RkYgfTsKLQotCWljdHggPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JaWYgKCFpY3R4KSB7Ci0JCXByX2Vycigibm8gY29udGV4dCBmb3IgZGV2aWNlXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JbXV0ZXhfbG9jaygmaWN0eC0+bG9jayk7Ci0KLQlpZiAoIWljdHgtPmRldl9wcmVzZW50X2ludGYwKSB7Ci0JCXByX2Vycigibm8gaU1PTiBkZXZpY2UgcHJlc2VudFxuIik7Ci0JCXJldHZhbCA9IC1FTk9ERVY7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQlpZiAobl9ieXRlcyA8PSAwIHx8IG5fYnl0ZXMgPiAzMikgewotCQlwcl9lcnIoImludmFsaWQgcGF5bG9hZCBzaXplXG4iKTsKLQkJcmV0dmFsID0gLUVJTlZBTDsKLQkJZ290byBleGl0OwotCX0KLQotCWlmIChjb3B5X2Zyb21fdXNlcihpY3R4LT50eC5kYXRhX2J1ZiwgYnVmLCBuX2J5dGVzKSkgewotCQlyZXR2YWwgPSAtRUZBVUxUOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JLyogUGFkIHdpdGggc3BhY2VzICovCi0JZm9yIChpID0gbl9ieXRlczsgaSA8IDMyOyArK2kpCi0JCWljdHgtPnR4LmRhdGFfYnVmW2ldID0gJyAnOwotCi0JZm9yIChpID0gMzI7IGkgPCAzNTsgKytpKQotCQlpY3R4LT50eC5kYXRhX2J1ZltpXSA9IDB4RkY7Ci0KLQlvZmZzZXQgPSAwOwotCXNlcSA9IDA7Ci0KLQlkbyB7Ci0JCW1lbWNweShpY3R4LT51c2JfdHhfYnVmLCBpY3R4LT50eC5kYXRhX2J1ZiArIG9mZnNldCwgNyk7Ci0JCWljdHgtPnVzYl90eF9idWZbN10gPSAodW5zaWduZWQgY2hhcikgc2VxOwotCi0JCXJldHZhbCA9IHNlbmRfcGFja2V0KGljdHgpOwotCQlpZiAocmV0dmFsKSB7Ci0JCQlwcl9lcnIoInNlbmQgcGFja2V0IGZhaWxlZCBmb3IgcGFja2V0ICMlZFxuIiwgc2VxIC8gMik7Ci0JCQlnb3RvIGV4aXQ7Ci0JCX0gZWxzZSB7Ci0JCQlzZXEgKz0gMjsKLQkJCW9mZnNldCArPSA3OwotCQl9Ci0KLQl9IHdoaWxlIChvZmZzZXQgPCAzNSk7Ci0KLQkvKiBTZW5kIHBhY2tldCAjNiAqLwotCW1lbWNweShpY3R4LT51c2JfdHhfYnVmLCAmdmZkX3BhY2tldDYsIHNpemVvZih2ZmRfcGFja2V0NikpOwotCWljdHgtPnVzYl90eF9idWZbN10gPSAodW5zaWduZWQgY2hhcikgc2VxOwotCXJldHZhbCA9IHNlbmRfcGFja2V0KGljdHgpOwotCWlmIChyZXR2YWwpCi0JCXByX2Vycigic2VuZCBwYWNrZXQgZmFpbGVkIGZvciBwYWNrZXQgIyVkXG4iLCBzZXEgLyAyKTsKLQotZXhpdDoKLQltdXRleF91bmxvY2soJmljdHgtPmxvY2spOwotCi0JcmV0dXJuICghcmV0dmFsKSA/IG5fYnl0ZXMgOiByZXR2YWw7Ci19Ci0KLS8qKgotICogV3JpdGVzIGRhdGEgdG8gdGhlIExDRC4gIFRoZSBpTU9OIE9FTSBMQ0Qgc2NyZWVuIGV4cGVjdHMgOC1ieXRlCi0gKiBwYWNrZXRzLiBXZSBhY2NlcHQgZGF0YSBhcyAxNiBoZXhhZGVjaW1hbCBkaWdpdHMsIGZvbGxvd2VkIGJ5IGEKLSAqIG5ld2xpbmUgKHRvIG1ha2UgaXQgZWFzeSB0byBkcml2ZSB0aGUgZGV2aWNlIGZyb20gYSBjb21tYW5kLWxpbmUKLSAqIC0tIGV2ZW4gdGhvdWdoIHRoZSBhY3R1YWwgYmluYXJ5IGRhdGEgaXMgYSBiaXQgY29tcGxpY2F0ZWQpLgotICoKLSAqIFRoZSBkZXZpY2UgaXRzZWxmIGlzIG5vdCBhICJ0cmFkaXRpb25hbCIgdGV4dC1tb2RlIGRpc3BsYXkuIEl0J3MKLSAqIGFjdHVhbGx5IGEgMTZ4OTYgcGl4ZWwgYml0bWFwIGRpc3BsYXkuIFRoYXQgbWVhbnMgaWYgeW91IHdhbnQgdG8KLSAqIGRpc3BsYXkgdGV4dCwgeW91J3ZlIGdvdCB0byBoYXZlIHlvdXIgb3duICJmb250IiBhbmQgdHJhbnNsYXRlIHRoZQotICogdGV4dCBpbnRvIGJpdG1hcHMgZm9yIGRpc3BsYXkuIFRoaXMgaXMgcmVhbGx5IGZsZXhpYmxlICh5b3UgY2FuCi0gKiBkaXNwbGF5IHdoYXRldmVyIGRpYWNyaXRpY3MgeW91IG5lZWQsIGFuZCBzbyBvbiksIGJ1dCBpdCdzIGFsc28KLSAqIGEgbG90IG1vcmUgY29tcGxpY2F0ZWQgdGhhbiBtb3N0IExDRHMuLi4KLSAqLwotc3RhdGljIHNzaXplX3QgbGNkX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyICpidWYsCi0JCQkgc2l6ZV90IG5fYnl0ZXMsIGxvZmZfdCAqcG9zKQotewotCWludCByZXR2YWwgPSAwOwotCXN0cnVjdCBpbW9uX2NvbnRleHQgKmljdHg7Ci0KLQlpY3R4ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCWlmICghaWN0eCkgewotCQlwcl9lcnIoIm5vIGNvbnRleHQgZm9yIGRldmljZVxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCW11dGV4X2xvY2soJmljdHgtPmxvY2spOwotCi0JaWYgKCFpY3R4LT5kaXNwbGF5X3N1cHBvcnRlZCkgewotCQlwcl9lcnIoIm5vIGlNT04gZGlzcGxheSBwcmVzZW50XG4iKTsKLQkJcmV0dmFsID0gLUVOT0RFVjsKLQkJZ290byBleGl0OwotCX0KLQotCWlmIChuX2J5dGVzICE9IDgpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIHBheWxvYWQgc2l6ZTogJWQgKGV4cGVjdGVkIDgpXG4iLCAoaW50KW5fYnl0ZXMpOwotCQlyZXR2YWwgPSAtRUlOVkFMOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JaWYgKGNvcHlfZnJvbV91c2VyKGljdHgtPnVzYl90eF9idWYsIGJ1ZiwgOCkpIHsKLQkJcmV0dmFsID0gLUVGQVVMVDsKLQkJZ290byBleGl0OwotCX0KLQotCXJldHZhbCA9IHNlbmRfcGFja2V0KGljdHgpOwotCWlmIChyZXR2YWwpIHsKLQkJcHJfZXJyKCJzZW5kIHBhY2tldCBmYWlsZWQhXG4iKTsKLQkJZ290byBleGl0OwotCX0gZWxzZSB7Ci0JCWRldl9kYmcoaWN0eC0+ZGV2LCAiJXM6IHdyaXRlICVkIGJ5dGVzIHRvIExDRFxuIiwKLQkJCV9fZnVuY19fLCAoaW50KSBuX2J5dGVzKTsKLQl9Ci1leGl0OgotCW11dGV4X3VubG9jaygmaWN0eC0+bG9jayk7Ci0JcmV0dXJuICghcmV0dmFsKSA/IG5fYnl0ZXMgOiByZXR2YWw7Ci19Ci0KLS8qKgotICogQ2FsbGJhY2sgZnVuY3Rpb24gZm9yIFVTQiBjb3JlIEFQSTogdHJhbnNtaXQgZGF0YQotICovCi1zdGF0aWMgdm9pZCB1c2JfdHhfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQotewotCXN0cnVjdCBpbW9uX2NvbnRleHQgKmljdHg7Ci0KLQlpZiAoIXVyYikKLQkJcmV0dXJuOwotCWljdHggPSAoc3RydWN0IGltb25fY29udGV4dCAqKXVyYi0+Y29udGV4dDsKLQlpZiAoIWljdHgpCi0JCXJldHVybjsKLQotCWljdHgtPnR4LnN0YXR1cyA9IHVyYi0+c3RhdHVzOwotCi0JLyogbm90aWZ5IHdhaXRlcnMgdGhhdCB3cml0ZSBoYXMgZmluaXNoZWQgKi8KLQlpY3R4LT50eC5idXN5ID0gZmFsc2U7Ci0Jc21wX3JtYigpOyAvKiBlbnN1cmUgbGF0ZXIgcmVhZGVycyBrbm93IHdlJ3JlIG5vdCBidXN5ICovCi0JY29tcGxldGUoJmljdHgtPnR4LmZpbmlzaGVkKTsKLX0KLQotLyoqCi0gKiByZXBvcnQgdG91Y2hzY3JlZW4gaW5wdXQKLSAqLwotc3RhdGljIHZvaWQgaW1vbl90b3VjaF9kaXNwbGF5X3RpbWVvdXQodW5zaWduZWQgbG9uZyBkYXRhKQotewotCXN0cnVjdCBpbW9uX2NvbnRleHQgKmljdHggPSAoc3RydWN0IGltb25fY29udGV4dCAqKWRhdGE7Ci0KLQlpZiAoaWN0eC0+ZGlzcGxheV90eXBlICE9IElNT05fRElTUExBWV9UWVBFX1ZHQSkKLQkJcmV0dXJuOwotCi0JaW5wdXRfcmVwb3J0X2FicyhpY3R4LT50b3VjaCwgQUJTX1gsIGljdHgtPnRvdWNoX3gpOwotCWlucHV0X3JlcG9ydF9hYnMoaWN0eC0+dG91Y2gsIEFCU19ZLCBpY3R4LT50b3VjaF95KTsKLQlpbnB1dF9yZXBvcnRfa2V5KGljdHgtPnRvdWNoLCBCVE5fVE9VQ0gsIDB4MDApOwotCWlucHV0X3N5bmMoaWN0eC0+dG91Y2gpOwotfQotCi0vKioKLSAqIGlNT04gSVIgcmVjZWl2ZXJzIHN1cHBvcnQgdHdvIGRpZmZlcmVudCBzaWduYWwgc2V0cyAtLSB0aG9zZSB1c2VkIGJ5Ci0gKiB0aGUgaU1PTiByZW1vdGVzLCBhbmQgdGhvc2UgdXNlZCBieSB0aGUgV2luZG93cyBNQ0UgcmVtb3RlcyAod2hpY2ggaXMKLSAqIHJlYWxseSBqdXN0IFJDLTYpLCBidXQgb25seSBvbmUgb3IgdGhlIG90aGVyIGF0IGEgdGltZSwgYXMgdGhlIHNpZ25hbHMKLSAqIGFyZSBkZWNvZGVkIG9uYm9hcmQgdGhlIHJlY2VpdmVyLgotICovCi1pbnQgaW1vbl9pcl9jaGFuZ2VfcHJvdG9jb2wodm9pZCAqcHJpdiwgdTY0IGlyX3R5cGUpCi17Ci0JaW50IHJldHZhbDsKLQlzdHJ1Y3QgaW1vbl9jb250ZXh0ICppY3R4ID0gcHJpdjsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpY3R4LT5kZXY7Ci0JYm9vbCBwYWRfbW91c2U7Ci0JdW5zaWduZWQgY2hhciBpcl9wcm90b19wYWNrZXRbXSA9IHsKLQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NiB9OwotCi0JaWYgKGlyX3R5cGUgJiYgIShpcl90eXBlICYgaWN0eC0+cHJvcHMtPmFsbG93ZWRfcHJvdG9zKSkKLQkJZGV2X3dhcm4oZGV2LCAiTG9va3MgbGlrZSB5b3UncmUgdHJ5aW5nIHRvIHVzZSBhbiBJUiBwcm90b2NvbCAiCi0JCQkgInRoaXMgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnRcbiIpOwotCi0Jc3dpdGNoIChpcl90eXBlKSB7Ci0JY2FzZSBJUl9UWVBFX1JDNjoKLQkJZGV2X2RiZyhkZXYsICJDb25maWd1cmluZyBJUiByZWNlaXZlciBmb3IgTUNFIHByb3RvY29sXG4iKTsKLQkJaXJfcHJvdG9fcGFja2V0WzBdID0gMHgwMTsKLQkJcGFkX21vdXNlID0gZmFsc2U7Ci0JCWJyZWFrOwotCWNhc2UgSVJfVFlQRV9VTktOT1dOOgotCWNhc2UgSVJfVFlQRV9PVEhFUjoKLQkJZGV2X2RiZyhkZXYsICJDb25maWd1cmluZyBJUiByZWNlaXZlciBmb3IgaU1PTiBwcm90b2NvbFxuIik7Ci0JCWlmIChwYWRfc3RhYmlsaXplICYmICFub21vdXNlKQotCQkJcGFkX21vdXNlID0gdHJ1ZTsKLQkJZWxzZSB7Ci0JCQlkZXZfZGJnKGRldiwgIlBBRCBzdGFiaWxpemUgZnVuY3Rpb25hbGl0eSBkaXNhYmxlZFxuIik7Ci0JCQlwYWRfbW91c2UgPSBmYWxzZTsKLQkJfQotCQkvKiBpcl9wcm90b19wYWNrZXRbMF0gPSAweDAwOyAvLyBhbHJlYWR5IHRoZSBkZWZhdWx0ICovCi0JCWlyX3R5cGUgPSBJUl9UWVBFX09USEVSOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlkZXZfd2FybihkZXYsICJVbnN1cHBvcnRlZCBJUiBwcm90b2NvbCBzcGVjaWZpZWQsIG92ZXJyaWRpbmcgIgotCQkJICJ0byBpTU9OIElSIHByb3RvY29sXG4iKTsKLQkJaWYgKHBhZF9zdGFiaWxpemUgJiYgIW5vbW91c2UpCi0JCQlwYWRfbW91c2UgPSB0cnVlOwotCQllbHNlIHsKLQkJCWRldl9kYmcoZGV2LCAiUEFEIHN0YWJpbGl6ZSBmdW5jdGlvbmFsaXR5IGRpc2FibGVkXG4iKTsKLQkJCXBhZF9tb3VzZSA9IGZhbHNlOwotCQl9Ci0JCS8qIGlyX3Byb3RvX3BhY2tldFswXSA9IDB4MDA7IC8vIGFscmVhZHkgdGhlIGRlZmF1bHQgKi8KLQkJaXJfdHlwZSA9IElSX1RZUEVfT1RIRVI7Ci0JCWJyZWFrOwotCX0KLQotCW1lbWNweShpY3R4LT51c2JfdHhfYnVmLCAmaXJfcHJvdG9fcGFja2V0LCBzaXplb2YoaXJfcHJvdG9fcGFja2V0KSk7Ci0KLQlyZXR2YWwgPSBzZW5kX3BhY2tldChpY3R4KTsKLQlpZiAocmV0dmFsKQotCQlnb3RvIG91dDsKLQotCWljdHgtPmlyX3R5cGUgPSBpcl90eXBlOwotCWljdHgtPnBhZF9tb3VzZSA9IHBhZF9tb3VzZTsKLQotb3V0OgotCXJldHVybiByZXR2YWw7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHR2MmludChjb25zdCBzdHJ1Y3QgdGltZXZhbCAqYSwgY29uc3Qgc3RydWN0IHRpbWV2YWwgKmIpCi17Ci0JaW50IHVzZWNzID0gMDsKLQlpbnQgc2VjICAgPSAwOwotCi0JaWYgKGItPnR2X3VzZWMgPiBhLT50dl91c2VjKSB7Ci0JCXVzZWNzID0gMTAwMDAwMDsKLQkJc2VjLS07Ci0JfQotCi0JdXNlY3MgKz0gYS0+dHZfdXNlYyAtIGItPnR2X3VzZWM7Ci0KLQlzZWMgKz0gYS0+dHZfc2VjIC0gYi0+dHZfc2VjOwotCXNlYyAqPSAxMDAwOwotCXVzZWNzIC89IDEwMDA7Ci0Jc2VjICs9IHVzZWNzOwotCi0JaWYgKHNlYyA8IDApCi0JCXNlYyA9IDEwMDA7Ci0KLQlyZXR1cm4gc2VjOwotfQotCi0vKioKLSAqIFRoZSBkaXJlY3Rpb25hbCBwYWQgYmVoYXZlcyBhIGJpdCBkaWZmZXJlbnRseSwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhpcyBpcwotICogb25lIG9mIHRoZSBvbGRlciBmZmRjIGRldmljZXMgb3IgYSBuZXdlciBkZXZpY2UuIE5ld2VyIGRldmljZXMgYXBwZWFyIHRvCi0gKiBoYXZlIGEgaGlnaGVyIHJlc29sdXRpb24gbWF0cml4IGZvciBtb3JlIHByZWNpc2UgbW91c2UgbW92ZW1lbnQsIGJ1dCBpdAotICogbWFrZXMgdGhpbmdzIG92ZXJseSBzZW5zaXRpdmUgaW4ga2V5Ym9hcmQgbW9kZSwgc28gd2UgZG8gc29tZSBpbnRlcmVzdGluZwotICogY29udG9ydGlvbnMgdG8gbWFrZSBpdCBsZXNzIHRvdWNoeS4gT2xkZXIgZGV2aWNlcyBydW4gdGhyb3VnaCB0aGUgc2FtZQotICogcm91dGluZSB3aXRoIHNob3J0ZXIgdGltZW91dCBhbmQgYSBzbWFsbGVyIHRocmVzaG9sZC4KLSAqLwotc3RhdGljIGludCBzdGFiaWxpemUoaW50IGEsIGludCBiLCB1MTYgdGltZW91dCwgdTE2IHRocmVzaG9sZCkKLXsKLQlzdHJ1Y3QgdGltZXZhbCBjdDsKLQlzdGF0aWMgc3RydWN0IHRpbWV2YWwgcHJldl90aW1lID0gezAsIDB9OwotCXN0YXRpYyBzdHJ1Y3QgdGltZXZhbCBoaXRfdGltZSAgPSB7MCwgMH07Ci0Jc3RhdGljIGludCB4LCB5LCBwcmV2X3Jlc3VsdCwgaGl0czsKLQlpbnQgcmVzdWx0ID0gMDsKLQlpbnQgbXNlYywgbXNlY19oaXQ7Ci0KLQlkb19nZXR0aW1lb2ZkYXkoJmN0KTsKLQltc2VjID0gdHYyaW50KCZjdCwgJnByZXZfdGltZSk7Ci0JbXNlY19oaXQgPSB0djJpbnQoJmN0LCAmaGl0X3RpbWUpOwotCi0JaWYgKG1zZWMgPiAxMDApIHsKLQkJeCA9IDA7Ci0JCXkgPSAwOwotCQloaXRzID0gMDsKLQl9Ci0KLQl4ICs9IGE7Ci0JeSArPSBiOwotCi0JcHJldl90aW1lID0gY3Q7Ci0KLQlpZiAoYWJzKHgpID4gdGhyZXNob2xkIHx8IGFicyh5KSA+IHRocmVzaG9sZCkgewotCQlpZiAoYWJzKHkpID4gYWJzKHgpKQotCQkJcmVzdWx0ID0gKHkgPiAwKSA/IDB4N0YgOiAweDgwOwotCQllbHNlCi0JCQlyZXN1bHQgPSAoeCA+IDApID8gMHg3RjAwIDogMHg4MDAwOwotCi0JCXggPSAwOwotCQl5ID0gMDsKLQotCQlpZiAocmVzdWx0ID09IHByZXZfcmVzdWx0KSB7Ci0JCQloaXRzKys7Ci0KLQkJCWlmIChoaXRzID4gMykgewotCQkJCXN3aXRjaCAocmVzdWx0KSB7Ci0JCQkJY2FzZSAweDdGOgotCQkJCQl5ID0gMTcgKiB0aHJlc2hvbGQgLyAzMDsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSAweDgwOgotCQkJCQl5IC09IDE3ICogdGhyZXNob2xkIC8gMzA7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgMHg3RjAwOgotCQkJCQl4ID0gMTcgKiB0aHJlc2hvbGQgLyAzMDsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSAweDgwMDA6Ci0JCQkJCXggLT0gMTcgKiB0aHJlc2hvbGQgLyAzMDsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCi0JCQlpZiAoaGl0cyA9PSAyICYmIG1zZWNfaGl0IDwgdGltZW91dCkgewotCQkJCXJlc3VsdCA9IDA7Ci0JCQkJaGl0cyA9IDE7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlwcmV2X3Jlc3VsdCA9IHJlc3VsdDsKLQkJCWhpdHMgPSAxOwotCQkJaGl0X3RpbWUgPSBjdDsKLQkJfQotCX0KLQotCXJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyB1MzIgaW1vbl9yZW1vdGVfa2V5X2xvb2t1cChzdHJ1Y3QgaW1vbl9jb250ZXh0ICppY3R4LCB1MzIgc2NhbmNvZGUpCi17Ci0JdTMyIGtleWNvZGU7Ci0JdTMyIHJlbGVhc2U7Ci0JYm9vbCBpc19yZWxlYXNlX2NvZGUgPSBmYWxzZTsKLQotCS8qIExvb2sgZm9yIHRoZSBpbml0aWFsIHByZXNzIG9mIGEgYnV0dG9uICovCi0Ja2V5Y29kZSA9IGlyX2dfa2V5Y29kZV9mcm9tX3RhYmxlKGljdHgtPnJkZXYsIHNjYW5jb2RlKTsKLQlpY3R4LT5yY190b2dnbGUgPSAweDA7Ci0JaWN0eC0+cmNfc2NhbmNvZGUgPSBzY2FuY29kZTsKLQotCS8qIExvb2sgZm9yIHRoZSByZWxlYXNlIG9mIGEgYnV0dG9uICovCi0JaWYgKGtleWNvZGUgPT0gS0VZX1JFU0VSVkVEKSB7Ci0JCXJlbGVhc2UgPSBzY2FuY29kZSAmIH4weDQwMDA7Ci0JCWtleWNvZGUgPSBpcl9nX2tleWNvZGVfZnJvbV90YWJsZShpY3R4LT5yZGV2LCByZWxlYXNlKTsKLQkJaWYgKGtleWNvZGUgIT0gS0VZX1JFU0VSVkVEKQotCQkJaXNfcmVsZWFzZV9jb2RlID0gdHJ1ZTsKLQl9Ci0KLQlpY3R4LT5yZWxlYXNlX2NvZGUgPSBpc19yZWxlYXNlX2NvZGU7Ci0KLQlyZXR1cm4ga2V5Y29kZTsKLX0KLQotc3RhdGljIHUzMiBpbW9uX21jZV9rZXlfbG9va3VwKHN0cnVjdCBpbW9uX2NvbnRleHQgKmljdHgsIHUzMiBzY2FuY29kZSkKLXsKLQl1MzIga2V5Y29kZTsKLQotI2RlZmluZSBNQ0VfS0VZX01BU0sgMHg3MDAwCi0jZGVmaW5lIE1DRV9UT0dHTEVfQklUIDB4ODAwMAotCi0JLyoKLQkgKiBPbiBzb21lIHJlY2VpdmVycywgbWNlIGtleXMgZGVjb2RlIHRvIDB4ODAwMGYwNHh4IGFuZCAweDgwMDBmODR4eAotCSAqICh0aGUgdG9nZ2xlIGJpdCBmbGlwcGluZyBiZXR3ZWVuIGFsdGVybmF0aW5nIGtleSBwcmVzc2VzKSwgd2hpbGUKLQkgKiBvbiBvdGhlciByZWNlaXZlcnMsIHdlIHNlZSAweDgwMDBmNzR4eCBhbmQgMHg4MDAwZmY0eHguIFRvIGtlZXAKLQkgKiB0aGUgdGFibGUgdHJpbSwgd2UgYWx3YXlzIG9yIGluIHRoZSBiaXRzIHRvIGxvb2sgdXAgMHg4MDAwZmY0eHgsCi0JICogYnV0IHdlIGNhbid0IG9yIHRoZW0gaW50byBhbGwgY29kZXMsIGFzIHNvbWUga2V5cyBhcmUgZGVjb2RlZCBpbgotCSAqIGEgZGlmZmVyZW50IHdheSB3L28gdGhlIHNhbWUgdXNlIG9mIHRoZSB0b2dnbGUgYml0Li4uCi0JICovCi0JaWYgKHNjYW5jb2RlICYgMHg4MDAwMDAwMCkKLQkJc2NhbmNvZGUgPSBzY2FuY29kZSB8IE1DRV9LRVlfTUFTSyB8IE1DRV9UT0dHTEVfQklUOwotCi0JaWN0eC0+cmNfc2NhbmNvZGUgPSBzY2FuY29kZTsKLQlrZXljb2RlID0gaXJfZ19rZXljb2RlX2Zyb21fdGFibGUoaWN0eC0+cmRldiwgc2NhbmNvZGUpOwotCi0JLyogbm90IHVzZWQgaW4gbWNlIG1vZGUsIGJ1dCBtYWtlIHN1cmUgd2Uga25vdyBpdHMgZmFsc2UgKi8KLQlpY3R4LT5yZWxlYXNlX2NvZGUgPSBmYWxzZTsKLQotCXJldHVybiBrZXljb2RlOwotfQotCi1zdGF0aWMgdTMyIGltb25fcGFuZWxfa2V5X2xvb2t1cCh1NjQgY29kZSkKLXsKLQlpbnQgaTsKLQl1MzIga2V5Y29kZSA9IEtFWV9SRVNFUlZFRDsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGltb25fcGFuZWxfa2V5X3RhYmxlKTsgaSsrKSB7Ci0JCWlmIChpbW9uX3BhbmVsX2tleV90YWJsZVtpXS5od19jb2RlID09IChjb2RlIHwgMHhmZmVlKSkgewotCQkJa2V5Y29kZSA9IGltb25fcGFuZWxfa2V5X3RhYmxlW2ldLmtleWNvZGU7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCXJldHVybiBrZXljb2RlOwotfQotCi1zdGF0aWMgYm9vbCBpbW9uX21vdXNlX2V2ZW50KHN0cnVjdCBpbW9uX2NvbnRleHQgKmljdHgsCi0JCQkgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGxlbikKLXsKLQljaGFyIHJlbF94ID0gMHgwMCwgcmVsX3kgPSAweDAwOwotCXU4IHJpZ2h0X3NoaWZ0ID0gMTsKLQlib29sIG1vdXNlX2lucHV0ID0gdHJ1ZTsKLQlpbnQgZGlyID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmljdHgtPmtjX2xvY2ssIGZsYWdzKTsKLQotCS8qIG5ld2VyIGlNT04gZGV2aWNlIFBBRCBvciBtb3VzZSBidXR0b24gKi8KLQlpZiAoaWN0eC0+cHJvZHVjdCAhPSAweGZmZGMgJiYgKGJ1ZlswXSAmIDB4MDEpICYmIGxlbiA9PSA1KSB7Ci0JCXJlbF94ID0gYnVmWzJdOwotCQlyZWxfeSA9IGJ1ZlszXTsKLQkJcmlnaHRfc2hpZnQgPSAxOwotCS8qIDB4ZmZkYyBpTU9OIFBBRCBvciBtb3VzZSBidXR0b24gaW5wdXQgKi8KLQl9IGVsc2UgaWYgKGljdHgtPnByb2R1Y3QgPT0gMHhmZmRjICYmIChidWZbMF0gJiAweDQwKSAmJgotCQkJISgoYnVmWzFdICYgMHgwMSkgfHwgKChidWZbMV0gPj4gMikgJiAweDAxKSkpIHsKLQkJcmVsX3ggPSAoYnVmWzFdICYgMHgwOCkgfCAoYnVmWzFdICYgMHgxMCkgPj4gMiB8Ci0JCQkoYnVmWzFdICYgMHgyMCkgPj4gNCB8IChidWZbMV0gJiAweDQwKSA+PiA2OwotCQlpZiAoYnVmWzBdICYgMHgwMikKLQkJCXJlbF94IHw9IH4weDBmOwotCQlyZWxfeCA9IHJlbF94ICsgcmVsX3ggLyAyOwotCQlyZWxfeSA9IChidWZbMl0gJiAweDA4KSB8IChidWZbMl0gJiAweDEwKSA+PiAyIHwKLQkJCShidWZbMl0gJiAweDIwKSA+PiA0IHwgKGJ1ZlsyXSAmIDB4NDApID4+IDY7Ci0JCWlmIChidWZbMF0gJiAweDAxKQotCQkJcmVsX3kgfD0gfjB4MGY7Ci0JCXJlbF95ID0gcmVsX3kgKyByZWxfeSAvIDI7Ci0JCXJpZ2h0X3NoaWZ0ID0gMjsKLQkvKiBzb21lIGZmZGMgZGV2aWNlcyBkZWNvZGUgbW91c2UgYnV0dG9ucyBkaWZmZXJlbnRseS4uLiAqLwotCX0gZWxzZSBpZiAoaWN0eC0+cHJvZHVjdCA9PSAweGZmZGMgJiYgKGJ1ZlswXSA9PSAweDY4KSkgewotCQlyaWdodF9zaGlmdCA9IDI7Ci0JLyogY2grLy0gYnV0dG9ucywgd2hpY2ggd2UgdXNlIGZvciBhbiBlbXVsYXRlZCBzY3JvbGwgd2hlZWwgKi8KLQl9IGVsc2UgaWYgKGljdHgtPmtjID09IEtFWV9DSEFOTkVMVVAgJiYgKGJ1ZlsyXSAmIDB4NDApICE9IDB4NDApIHsKLQkJZGlyID0gMTsKLQl9IGVsc2UgaWYgKGljdHgtPmtjID09IEtFWV9DSEFOTkVMRE9XTiAmJiAoYnVmWzJdICYgMHg0MCkgIT0gMHg0MCkgewotCQlkaXIgPSAtMTsKLQl9IGVsc2UKLQkJbW91c2VfaW5wdXQgPSBmYWxzZTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmljdHgtPmtjX2xvY2ssIGZsYWdzKTsKLQotCWlmIChtb3VzZV9pbnB1dCkgewotCQlkZXZfZGJnKGljdHgtPmRldiwgInNlbmRpbmcgbW91c2UgZGF0YSB2aWEgaW5wdXQgc3Vic3lzdGVtXG4iKTsKLQotCQlpZiAoZGlyKSB7Ci0JCQlpbnB1dF9yZXBvcnRfcmVsKGljdHgtPmlkZXYsIFJFTF9XSEVFTCwgZGlyKTsKLQkJfSBlbHNlIGlmIChyZWxfeCB8fCByZWxfeSkgewotCQkJaW5wdXRfcmVwb3J0X3JlbChpY3R4LT5pZGV2LCBSRUxfWCwgcmVsX3gpOwotCQkJaW5wdXRfcmVwb3J0X3JlbChpY3R4LT5pZGV2LCBSRUxfWSwgcmVsX3kpOwotCQl9IGVsc2UgewotCQkJaW5wdXRfcmVwb3J0X2tleShpY3R4LT5pZGV2LCBCVE5fTEVGVCwgYnVmWzFdICYgMHgxKTsKLQkJCWlucHV0X3JlcG9ydF9rZXkoaWN0eC0+aWRldiwgQlROX1JJR0hULAotCQkJCQkgYnVmWzFdID4+IHJpZ2h0X3NoaWZ0ICYgMHgxKTsKLQkJfQotCQlpbnB1dF9zeW5jKGljdHgtPmlkZXYpOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmaWN0eC0+a2NfbG9jaywgZmxhZ3MpOwotCQlpY3R4LT5sYXN0X2tleWNvZGUgPSBpY3R4LT5rYzsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWN0eC0+a2NfbG9jaywgZmxhZ3MpOwotCX0KLQotCXJldHVybiBtb3VzZV9pbnB1dDsKLX0KLQotc3RhdGljIHZvaWQgaW1vbl90b3VjaF9ldmVudChzdHJ1Y3QgaW1vbl9jb250ZXh0ICppY3R4LCB1bnNpZ25lZCBjaGFyICpidWYpCi17Ci0JbW9kX3RpbWVyKCZpY3R4LT50dGltZXIsIGppZmZpZXMgKyBUT1VDSF9USU1FT1VUKTsKLQlpY3R4LT50b3VjaF94ID0gKGJ1ZlswXSA8PCA0KSB8IChidWZbMV0gPj4gNCk7Ci0JaWN0eC0+dG91Y2hfeSA9IDB4ZmZmIC0gKChidWZbMl0gPDwgNCkgfCAoYnVmWzFdICYgMHhmKSk7Ci0JaW5wdXRfcmVwb3J0X2FicyhpY3R4LT50b3VjaCwgQUJTX1gsIGljdHgtPnRvdWNoX3gpOwotCWlucHV0X3JlcG9ydF9hYnMoaWN0eC0+dG91Y2gsIEFCU19ZLCBpY3R4LT50b3VjaF95KTsKLQlpbnB1dF9yZXBvcnRfa2V5KGljdHgtPnRvdWNoLCBCVE5fVE9VQ0gsIDB4MDEpOwotCWlucHV0X3N5bmMoaWN0eC0+dG91Y2gpOwotfQotCi1zdGF0aWMgdm9pZCBpbW9uX3BhZF90b19rZXlzKHN0cnVjdCBpbW9uX2NvbnRleHQgKmljdHgsIHVuc2lnbmVkIGNoYXIgKmJ1ZikKLXsKLQlpbnQgZGlyID0gMDsKLQljaGFyIHJlbF94ID0gMHgwMCwgcmVsX3kgPSAweDAwOwotCXUxNiB0aW1lb3V0LCB0aHJlc2hvbGQ7Ci0JdTMyIHNjYW5jb2RlID0gS0VZX1JFU0VSVkVEOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkvKgotCSAqIFRoZSBpbW9uIGRpcmVjdGlvbmFsIHBhZCBmdW5jdGlvbnMgbW9yZSBsaWtlIGEgdG91Y2hwYWQuIEJ5dGVzIDMgJiA0Ci0JICogY29udGFpbiBhIHBvc2l0aW9uIGNvb3JkaW5hdGUgKHgseSksIHdpdGggZWFjaCBjb21wb25lbnQgcmFuZ2luZwotCSAqIGZyb20gLTE0IHRvIDE0LiBXZSB3YW50IHRvIGRvd24tc2FtcGxlIHRoaXMgdG8gb25seSA0IGRpc2NyZXRlIHZhbHVlcwotCSAqIGZvciB1cC9kb3duL2xlZnQvcmlnaHQgYXJyb3cga2V5cy4gQWxzbywgd2hlbiB5b3UgZ2V0IHRvbyBjbG9zZSB0bwotCSAqIGRpYWdvbmFscywgaXQgaGFzIGEgdGVuZGFuY3kgdG8ganVtcCBiYWNrIGFuZCBmb3J0aCwgc28gbGV0cyB0cnkgdG8KLQkgKiBpZ25vcmUgd2hlbiB0aGV5IGdldCB0b28gY2xvc2UuCi0JICovCi0JaWYgKGljdHgtPnByb2R1Y3QgIT0gMHhmZmRjKSB7Ci0JCS8qIGZpcnN0LCBwYWQgdG8gOCBieXRlcyBzbyBpdCBjb25mb3JtcyB3aXRoIGV2ZXJ5dGhpbmcgZWxzZSAqLwotCQlidWZbNV0gPSBidWZbNl0gPSBidWZbN10gPSAwOwotCQl0aW1lb3V0ID0gNTAwOwkvKiBpbiBtc2VjcyAqLwotCQkvKiAoMip0aHJlc2hvbGQpIHggKDIqdGhyZXNob2xkKSBzcXVhcmUgKi8KLQkJdGhyZXNob2xkID0gcGFkX3RocmVzaCA/IHBhZF90aHJlc2ggOiAyODsKLQkJcmVsX3ggPSBidWZbMl07Ci0JCXJlbF95ID0gYnVmWzNdOwotCi0JCWlmIChpY3R4LT5pcl90eXBlID09IElSX1RZUEVfT1RIRVIgJiYgcGFkX3N0YWJpbGl6ZSkgewotCQkJaWYgKChidWZbMV0gPT0gMCkgJiYgKChyZWxfeCAhPSAwKSB8fCAocmVsX3kgIT0gMCkpKSB7Ci0JCQkJZGlyID0gc3RhYmlsaXplKChpbnQpcmVsX3gsIChpbnQpcmVsX3ksCi0JCQkJCQl0aW1lb3V0LCB0aHJlc2hvbGQpOwotCQkJCWlmICghZGlyKSB7Ci0JCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZpY3R4LT5rY19sb2NrLAotCQkJCQkJCSAgZmxhZ3MpOwotCQkJCQlpY3R4LT5rYyA9IEtFWV9VTktOT1dOOwotCQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpY3R4LT5rY19sb2NrLAotCQkJCQkJCSAgICAgICBmbGFncyk7Ci0JCQkJCXJldHVybjsKLQkJCQl9Ci0JCQkJYnVmWzJdID0gZGlyICYgMHhGRjsKLQkJCQlidWZbM10gPSAoZGlyID4+IDgpICYgMHhGRjsKLQkJCQlzY2FuY29kZSA9IGJlMzJfdG9fY3B1KCooKHUzMiAqKWJ1ZikpOwotCQkJfQotCQl9IGVsc2UgewotCQkJLyoKLQkJCSAqIEhhY2sgYWxlcnQ6IGluc3RlYWQgb2YgdXNpbmcga2V5Y29kZXMsIHdlIGhhdmUKLQkJCSAqIHRvIHVzZSBoYXJkLWNvZGVkIHNjYW5jb2RlcyBoZXJlLi4uCi0JCQkgKi8KLQkJCWlmIChhYnMocmVsX3kpID4gYWJzKHJlbF94KSkgewotCQkJCWJ1ZlsyXSA9IChyZWxfeSA+IDApID8gMHg3RiA6IDB4ODA7Ci0JCQkJYnVmWzNdID0gMDsKLQkJCQlpZiAocmVsX3kgPiAwKQotCQkJCQlzY2FuY29kZSA9IDB4MDEwMDdmMDA7IC8qIEtFWV9ET1dOICovCi0JCQkJZWxzZQotCQkJCQlzY2FuY29kZSA9IDB4MDEwMDgwMDA7IC8qIEtFWV9VUCAqLwotCQkJfSBlbHNlIHsKLQkJCQlidWZbMl0gPSAwOwotCQkJCWJ1ZlszXSA9IChyZWxfeCA+IDApID8gMHg3RiA6IDB4ODA7Ci0JCQkJaWYgKHJlbF94ID4gMCkKLQkJCQkJc2NhbmNvZGUgPSAweDAxMDAwMDdmOyAvKiBLRVlfUklHSFQgKi8KLQkJCQllbHNlCi0JCQkJCXNjYW5jb2RlID0gMHgwMTAwMDA4MDsgLyogS0VZX0xFRlQgKi8KLQkJCX0KLQkJfQotCi0JLyoKLQkgKiBIYW5kbGUgb24tYm9hcmQgZGVjb2RlZCBwYWQgZXZlbnRzIGZvciBlLmcuIG9sZGVyIFZGRC9pTU9OLVBhZAotCSAqIGRldmljZSAoMTVjMjpmZmRjKS4gVGhlIHJlbW90ZSBnZW5lcmF0ZXMgdmFyaW91cyBjb2RlcyBmcm9tCi0JICogMHg2OG5ubm5CNyB0byAweDZBbm5ubkI3LCB0aGUgbGVmdCBtb3VzZSBidXR0b24gZ2VuZXJhdGVzCi0JICogMHg2ODgzMDFiNyBhbmQgdGhlIHJpZ2h0IG9uZSAweDY4ODQ4MWI3LiBBbGwgb3RoZXIga2V5cyBnZW5lcmF0ZQotCSAqIDB4Mm5ubm5ubm4uIFBvc2l0aW9uIGNvb3JkaW5hdGUgaXMgZW5jb2RlZCBpbiBidWZbMV0gYW5kIGJ1ZlsyXSB3aXRoCi0JICogcmV2ZXJzZWQgZW5kaWFuZXNzLiBFeHRyYWN0IGRpcmVjdGlvbiBmcm9tIGJ1ZmZlciwgcm90YXRlIGVuZGlhbmVzcywKLQkgKiBhZGp1c3Qgc2lnbiBhbmQgZmVlZCB0aGUgdmFsdWVzIGludG8gc3RhYmlsaXplKCkuIFRoZSByZXN1bHRpbmcgY29kZXMKLQkgKiB3aWxsIGJlIDB4MDEwMDgwMDAsIDB4MDEwMDdGMDAsIHdoaWNoIG1hdGNoIHRoZSBuZXdlciBkZXZpY2VzLgotCSAqLwotCX0gZWxzZSB7Ci0JCXRpbWVvdXQgPSAxMDsJLyogaW4gbXNlY3MgKi8KLQkJLyogKDIqdGhyZXNob2xkKSB4ICgyKnRocmVzaG9sZCkgc3F1YXJlICovCi0JCXRocmVzaG9sZCA9IHBhZF90aHJlc2ggPyBwYWRfdGhyZXNoIDogMTU7Ci0KLQkJLyogYnVmWzFdIGlzIHggKi8KLQkJcmVsX3ggPSAoYnVmWzFdICYgMHgwOCkgfCAoYnVmWzFdICYgMHgxMCkgPj4gMiB8Ci0JCQkoYnVmWzFdICYgMHgyMCkgPj4gNCB8IChidWZbMV0gJiAweDQwKSA+PiA2OwotCQlpZiAoYnVmWzBdICYgMHgwMikKLQkJCXJlbF94IHw9IH4weDEwKzE7Ci0JCS8qIGJ1ZlsyXSBpcyB5ICovCi0JCXJlbF95ID0gKGJ1ZlsyXSAmIDB4MDgpIHwgKGJ1ZlsyXSAmIDB4MTApID4+IDIgfAotCQkJKGJ1ZlsyXSAmIDB4MjApID4+IDQgfCAoYnVmWzJdICYgMHg0MCkgPj4gNjsKLQkJaWYgKGJ1ZlswXSAmIDB4MDEpCi0JCQlyZWxfeSB8PSB+MHgxMCsxOwotCi0JCWJ1ZlswXSA9IDB4MDE7Ci0JCWJ1ZlsxXSA9IGJ1Zls0XSA9IGJ1Zls1XSA9IGJ1Zls2XSA9IGJ1Zls3XSA9IDA7Ci0KLQkJaWYgKGljdHgtPmlyX3R5cGUgPT0gSVJfVFlQRV9PVEhFUiAmJiBwYWRfc3RhYmlsaXplKSB7Ci0JCQlkaXIgPSBzdGFiaWxpemUoKGludClyZWxfeCwgKGludClyZWxfeSwKLQkJCQkJdGltZW91dCwgdGhyZXNob2xkKTsKLQkJCWlmICghZGlyKSB7Ci0JCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmljdHgtPmtjX2xvY2ssIGZsYWdzKTsKLQkJCQlpY3R4LT5rYyA9IEtFWV9VTktOT1dOOwotCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmljdHgtPmtjX2xvY2ssIGZsYWdzKTsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCQlidWZbMl0gPSBkaXIgJiAweEZGOwotCQkJYnVmWzNdID0gKGRpciA+PiA4KSAmIDB4RkY7Ci0JCQlzY2FuY29kZSA9IGJlMzJfdG9fY3B1KCooKHUzMiAqKWJ1ZikpOwotCQl9IGVsc2UgewotCQkJLyoKLQkJCSAqIEhhY2sgYWxlcnQ6IGluc3RlYWQgb2YgdXNpbmcga2V5Y29kZXMsIHdlIGhhdmUKLQkJCSAqIHRvIHVzZSBoYXJkLWNvZGVkIHNjYW5jb2RlcyBoZXJlLi4uCi0JCQkgKi8KLQkJCWlmIChhYnMocmVsX3kpID4gYWJzKHJlbF94KSkgewotCQkJCWJ1ZlsyXSA9IChyZWxfeSA+IDApID8gMHg3RiA6IDB4ODA7Ci0JCQkJYnVmWzNdID0gMDsKLQkJCQlpZiAocmVsX3kgPiAwKQotCQkJCQlzY2FuY29kZSA9IDB4MDEwMDdmMDA7IC8qIEtFWV9ET1dOICovCi0JCQkJZWxzZQotCQkJCQlzY2FuY29kZSA9IDB4MDEwMDgwMDA7IC8qIEtFWV9VUCAqLwotCQkJfSBlbHNlIHsKLQkJCQlidWZbMl0gPSAwOwotCQkJCWJ1ZlszXSA9IChyZWxfeCA+IDApID8gMHg3RiA6IDB4ODA7Ci0JCQkJaWYgKHJlbF94ID4gMCkKLQkJCQkJc2NhbmNvZGUgPSAweDAxMDAwMDdmOyAvKiBLRVlfUklHSFQgKi8KLQkJCQllbHNlCi0JCQkJCXNjYW5jb2RlID0gMHgwMTAwMDA4MDsgLyogS0VZX0xFRlQgKi8KLQkJCX0KLQkJfQotCX0KLQotCWlmIChzY2FuY29kZSkgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmaWN0eC0+a2NfbG9jaywgZmxhZ3MpOwotCQlpY3R4LT5rYyA9IGltb25fcmVtb3RlX2tleV9sb29rdXAoaWN0eCwgc2NhbmNvZGUpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpY3R4LT5rY19sb2NrLCBmbGFncyk7Ci0JfQotfQotCi0vKioKLSAqIGZpZ3VyZSBvdXQgaWYgdGhlc2UgaXMgYSBwcmVzcyBvciBhIHJlbGVhc2UuIFdlIGRvbid0IGFjdHVhbGx5Ci0gKiBjYXJlIGFib3V0IHJlcGVhdHMsIGFzIHRob3NlIHdpbGwgYmUgYXV0by1nZW5lcmF0ZWQgd2l0aGluIHRoZSBJUgotICogc3Vic3lzdGVtIGZvciByZXBlYXRpbmcgc2NhbmNvZGVzLgotICovCi1zdGF0aWMgaW50IGltb25fcGFyc2VfcHJlc3NfdHlwZShzdHJ1Y3QgaW1vbl9jb250ZXh0ICppY3R4LAotCQkJCSB1bnNpZ25lZCBjaGFyICpidWYsIHU4IGt0eXBlKQotewotCWludCBwcmVzc190eXBlID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmljdHgtPmtjX2xvY2ssIGZsYWdzKTsKLQotCS8qIGtleSByZWxlYXNlIG9mIDB4MDJYWFhYWFgga2V5ICovCi0JaWYgKGljdHgtPmtjID09IEtFWV9SRVNFUlZFRCAmJiBidWZbMF0gPT0gMHgwMiAmJiBidWZbM10gPT0gMHgwMCkKLQkJaWN0eC0+a2MgPSBpY3R4LT5sYXN0X2tleWNvZGU7Ci0KLQkvKiBtb3VzZSBidXR0b24gcmVsZWFzZSBvbiAoc29tZSkgMHhmZmRjIGRldmljZXMgKi8KLQllbHNlIGlmIChpY3R4LT5rYyA9PSBLRVlfUkVTRVJWRUQgJiYgYnVmWzBdID09IDB4NjggJiYgYnVmWzFdID09IDB4ODIgJiYKLQkJIGJ1ZlsyXSA9PSAweDgxICYmIGJ1ZlszXSA9PSAweGI3KQotCQlpY3R4LT5rYyA9IGljdHgtPmxhc3Rfa2V5Y29kZTsKLQotCS8qIG1vdXNlIGJ1dHRvbiByZWxlYXNlIG9uIChzb21lIG90aGVyKSAweGZmZGMgZGV2aWNlcyAqLwotCWVsc2UgaWYgKGljdHgtPmtjID09IEtFWV9SRVNFUlZFRCAmJiBidWZbMF0gPT0gMHgwMSAmJiBidWZbMV0gPT0gMHgwMCAmJgotCQkgYnVmWzJdID09IDB4ODEgJiYgYnVmWzNdID09IDB4YjcpCi0JCWljdHgtPmtjID0gaWN0eC0+bGFzdF9rZXljb2RlOwotCi0JLyogbWNlLXNwZWNpZmljIGJ1dHRvbiBoYW5kbGluZywgbm8ga2V5dXAgZXZlbnRzICovCi0JZWxzZSBpZiAoa3R5cGUgPT0gSU1PTl9LRVlfTUNFKSB7Ci0JCWljdHgtPnJjX3RvZ2dsZSA9IGJ1ZlsyXTsKLQkJcHJlc3NfdHlwZSA9IDE7Ci0KLQkvKiBpbmNvaGVyZW50IG9yIGlycmVsZXZhbnQgZGF0YSAqLwotCX0gZWxzZSBpZiAoaWN0eC0+a2MgPT0gS0VZX1JFU0VSVkVEKQotCQlwcmVzc190eXBlID0gLUVJTlZBTDsKLQotCS8qIGtleSByZWxlYXNlIG9mIDB4WFhYWFhYYjcga2V5ICovCi0JZWxzZSBpZiAoaWN0eC0+cmVsZWFzZV9jb2RlKQotCQlwcmVzc190eXBlID0gMDsKLQotCS8qIHRoaXMgaXMgYSBidXR0b24gcHJlc3MgKi8KLQllbHNlCi0JCXByZXNzX3R5cGUgPSAxOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWN0eC0+a2NfbG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIHByZXNzX3R5cGU7Ci19Ci0KLS8qKgotICogUHJvY2VzcyB0aGUgaW5jb21pbmcgcGFja2V0Ci0gKi8KLXN0YXRpYyB2b2lkIGltb25faW5jb21pbmdfcGFja2V0KHN0cnVjdCBpbW9uX2NvbnRleHQgKmljdHgsCi0JCQkJIHN0cnVjdCB1cmIgKnVyYiwgaW50IGludGYpCi17Ci0JaW50IGxlbiA9IHVyYi0+YWN0dWFsX2xlbmd0aDsKLQl1bnNpZ25lZCBjaGFyICpidWYgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpY3R4LT5kZXY7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1MzIga2M7Ci0JYm9vbCBub3JlbGVhc2UgPSBmYWxzZTsKLQlpbnQgaTsKLQl1NjQgc2NhbmNvZGU7Ci0Jc3RydWN0IGlucHV0X2RldiAqcmRldiA9IE5VTEw7Ci0Jc3RydWN0IGlyX2lucHV0X2RldiAqaXJkZXYgPSBOVUxMOwotCWludCBwcmVzc190eXBlID0gMDsKLQlpbnQgbXNlYzsKLQlzdHJ1Y3QgdGltZXZhbCB0OwotCXN0YXRpYyBzdHJ1Y3QgdGltZXZhbCBwcmV2X3RpbWUgPSB7IDAsIDAgfTsKLQl1OCBrdHlwZTsKLQotCXJkZXYgPSBpY3R4LT5yZGV2OwotCWlyZGV2ID0gaW5wdXRfZ2V0X2RydmRhdGEocmRldik7Ci0KLQkvKiBmaWx0ZXIgb3V0IGp1bmsgZGF0YSBvbiB0aGUgb2xkZXIgMHhmZmRjIGltb24gZGV2aWNlcyAqLwotCWlmICgoYnVmWzBdID09IDB4ZmYpICYmIChidWZbMV0gPT0gMHhmZikgJiYgKGJ1ZlsyXSA9PSAweGZmKSkKLQkJcmV0dXJuOwotCi0JLyogRmlndXJlIG91dCB3aGF0IGtleSB3YXMgcHJlc3NlZCAqLwotCWlmIChsZW4gPT0gOCAmJiBidWZbN10gPT0gMHhlZSkgewotCQlzY2FuY29kZSA9IGJlNjRfdG9fY3B1KCooKHU2NCAqKWJ1ZikpOwotCQlrdHlwZSA9IElNT05fS0VZX1BBTkVMOwotCQlrYyA9IGltb25fcGFuZWxfa2V5X2xvb2t1cChzY2FuY29kZSk7Ci0JfSBlbHNlIHsKLQkJc2NhbmNvZGUgPSBiZTMyX3RvX2NwdSgqKCh1MzIgKilidWYpKTsKLQkJaWYgKGljdHgtPmlyX3R5cGUgPT0gSVJfVFlQRV9SQzYpIHsKLQkJCWt0eXBlID0gSU1PTl9LRVlfSU1PTjsKLQkJCWlmIChidWZbMF0gPT0gMHg4MCkKLQkJCQlrdHlwZSA9IElNT05fS0VZX01DRTsKLQkJCWtjID0gaW1vbl9tY2Vfa2V5X2xvb2t1cChpY3R4LCBzY2FuY29kZSk7Ci0JCX0gZWxzZSB7Ci0JCQlrdHlwZSA9IElNT05fS0VZX0lNT047Ci0JCQlrYyA9IGltb25fcmVtb3RlX2tleV9sb29rdXAoaWN0eCwgc2NhbmNvZGUpOwotCQl9Ci0JfQotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmljdHgtPmtjX2xvY2ssIGZsYWdzKTsKLQkvKiBrZXlib2FyZC9tb3VzZSBtb2RlIHRvZ2dsZSBidXR0b24gKi8KLQlpZiAoa2MgPT0gS0VZX0tFWUJPQVJEICYmICFpY3R4LT5yZWxlYXNlX2NvZGUpIHsKLQkJaWN0eC0+bGFzdF9rZXljb2RlID0ga2M7Ci0JCWlmICghbm9tb3VzZSkgewotCQkJaWN0eC0+cGFkX21vdXNlID0gfihpY3R4LT5wYWRfbW91c2UpICYgMHgxOwotCQkJZGV2X2RiZyhkZXYsICJ0b2dnbGluZyB0byAlcyBtb2RlXG4iLAotCQkJCWljdHgtPnBhZF9tb3VzZSA/ICJtb3VzZSIgOiAia2V5Ym9hcmQiKTsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmljdHgtPmtjX2xvY2ssIGZsYWdzKTsKLQkJCXJldHVybjsKLQkJfSBlbHNlIHsKLQkJCWljdHgtPnBhZF9tb3VzZSA9IDA7Ci0JCQlkZXZfZGJnKGRldiwgIm1vdXNlIG1vZGUgZGlzYWJsZWQsIHBhc3Npbmcga2V5IHZhbHVlXG4iKTsKLQkJfQotCX0KLQotCWljdHgtPmtjID0ga2M7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWN0eC0+a2NfbG9jaywgZmxhZ3MpOwotCi0JLyogc2VuZCB0b3VjaHNjcmVlbiBldmVudHMgdGhyb3VnaCBpbnB1dCBzdWJzeXN0ZW0gaWYgdG91Y2hwYWQgZGF0YSAqLwotCWlmIChpY3R4LT5kaXNwbGF5X3R5cGUgPT0gSU1PTl9ESVNQTEFZX1RZUEVfVkdBICYmIGxlbiA9PSA4ICYmCi0JICAgIGJ1Zls3XSA9PSAweDg2KSB7Ci0JCWltb25fdG91Y2hfZXZlbnQoaWN0eCwgYnVmKTsKLQkJcmV0dXJuOwotCi0JLyogbG9vayBmb3IgbW91c2UgZXZlbnRzIHdpdGggcGFkIGluIG1vdXNlIG1vZGUgKi8KLQl9IGVsc2UgaWYgKGljdHgtPnBhZF9tb3VzZSkgewotCQlpZiAoaW1vbl9tb3VzZV9ldmVudChpY3R4LCBidWYsIGxlbikpCi0JCQlyZXR1cm47Ci0JfQotCi0JLyogTm93IGZvciBzb21lIHNwZWNpYWwgaGFuZGxpbmcgdG8gY29udmVydCBwYWQgaW5wdXQgdG8gYXJyb3cga2V5cyAqLwotCWlmICgoKGxlbiA9PSA1KSAmJiAoYnVmWzBdID09IDB4MDEpICYmIChidWZbNF0gPT0gMHgwMCkpIHx8Ci0JICAgICgobGVuID09IDgpICYmIChidWZbMF0gJiAweDQwKSAmJgotCSAgICAgIShidWZbMV0gJiAweDEgfHwgYnVmWzFdID4+IDIgJiAweDEpKSkgewotCQlsZW4gPSA4OwotCQlpbW9uX3BhZF90b19rZXlzKGljdHgsIGJ1Zik7Ci0JCW5vcmVsZWFzZSA9IHRydWU7Ci0JfQotCi0JaWYgKGRlYnVnKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gImludGYlZCBkZWNvZGVkIHBhY2tldDogIiwgaW50Zik7Ci0JCWZvciAoaSA9IDA7IGkgPCBsZW47ICsraSkKLQkJCXByaW50aygiJTAyeCAiLCBidWZbaV0pOwotCQlwcmludGsoIlxuIik7Ci0JfQotCi0JcHJlc3NfdHlwZSA9IGltb25fcGFyc2VfcHJlc3NfdHlwZShpY3R4LCBidWYsIGt0eXBlKTsKLQlpZiAocHJlc3NfdHlwZSA8IDApCi0JCWdvdG8gbm90X2lucHV0X2RhdGE7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaWN0eC0+a2NfbG9jaywgZmxhZ3MpOwotCWlmIChpY3R4LT5rYyA9PSBLRVlfVU5LTk9XTikKLQkJZ290byB1bmtub3duX2tleTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpY3R4LT5rY19sb2NrLCBmbGFncyk7Ci0KLQlpZiAoa3R5cGUgIT0gSU1PTl9LRVlfUEFORUwpIHsKLQkJaWYgKHByZXNzX3R5cGUgPT0gMCkKLQkJCWlyX2tleXVwKGlyZGV2KTsKLQkJZWxzZSB7Ci0JCQlpcl9rZXlkb3duKHJkZXYsIGljdHgtPnJjX3NjYW5jb2RlLCBpY3R4LT5yY190b2dnbGUpOwotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmljdHgtPmtjX2xvY2ssIGZsYWdzKTsKLQkJCWljdHgtPmxhc3Rfa2V5Y29kZSA9IGljdHgtPmtjOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWN0eC0+a2NfbG9jaywgZmxhZ3MpOwotCQl9Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBPbmx5IHBhbmVsIHR5cGUgZXZlbnRzIGxlZnQgdG8gcHJvY2VzcyBub3cgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaWN0eC0+a2NfbG9jaywgZmxhZ3MpOwotCi0JLyogS0VZX01VVEUgcmVwZWF0cyBmcm9tIGtub2IgbmVlZCB0byBiZSBzdXBwcmVzc2VkICovCi0JaWYgKGljdHgtPmtjID09IEtFWV9NVVRFICYmIGljdHgtPmtjID09IGljdHgtPmxhc3Rfa2V5Y29kZSkgewotCQlkb19nZXR0aW1lb2ZkYXkoJnQpOwotCQltc2VjID0gdHYyaW50KCZ0LCAmcHJldl90aW1lKTsKLQkJcHJldl90aW1lID0gdDsKLQkJaWYgKG1zZWMgPCBpY3R4LT5pZGV2LT5yZXBbUkVQX0RFTEFZXSkgewotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWN0eC0+a2NfbG9jaywgZmxhZ3MpOwotCQkJcmV0dXJuOwotCQl9Ci0JfQotCWtjID0gaWN0eC0+a2M7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpY3R4LT5rY19sb2NrLCBmbGFncyk7Ci0KLQlpbnB1dF9yZXBvcnRfa2V5KGljdHgtPmlkZXYsIGtjLCBwcmVzc190eXBlKTsKLQlpbnB1dF9zeW5jKGljdHgtPmlkZXYpOwotCi0JLyogcGFuZWwga2V5cyBkb24ndCBnZW5lcmF0ZSBhIHJlbGVhc2UgKi8KLQlpbnB1dF9yZXBvcnRfa2V5KGljdHgtPmlkZXYsIGtjLCAwKTsKLQlpbnB1dF9zeW5jKGljdHgtPmlkZXYpOwotCi0JaWN0eC0+bGFzdF9rZXljb2RlID0ga2M7Ci0KLQlyZXR1cm47Ci0KLXVua25vd25fa2V5OgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmljdHgtPmtjX2xvY2ssIGZsYWdzKTsKLQlkZXZfaW5mbyhkZXYsICIlczogdW5rbm93biBrZXlwcmVzcywgY29kZSAweCVsbHhcbiIsIF9fZnVuY19fLAotCQkgKGxvbmcgbG9uZylzY2FuY29kZSk7Ci0JcmV0dXJuOwotCi1ub3RfaW5wdXRfZGF0YToKLQlpZiAobGVuICE9IDgpIHsKLQkJZGV2X3dhcm4oZGV2LCAiaW1vbiAlczogaW52YWxpZCBpbmNvbWluZyBwYWNrZXQgIgotCQkJICJzaXplIChsZW4gPSAlZCwgaW50ZiVkKVxuIiwgX19mdW5jX18sIGxlbiwgaW50Zik7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBpTU9OIDIuNEcgYXNzb2NpYXRlIGZyYW1lICovCi0JaWYgKGJ1ZlswXSA9PSAweDAwICYmCi0JICAgIGJ1ZlsyXSA9PSAweEZGICYmCQkJCS8qIFJFRklEICovCi0JICAgIGJ1ZlszXSA9PSAweEZGICYmCi0JICAgIGJ1Zls0XSA9PSAweEZGICYmCi0JICAgIGJ1Zls1XSA9PSAweEZGICYmCQkJCS8qIGlNT04gMi40RyAqLwotCSAgICgoYnVmWzZdID09IDB4NEUgJiYgYnVmWzddID09IDB4REYpIHx8CS8qIExUICovCi0JICAgIChidWZbNl0gPT0gMHg1RSAmJiBidWZbN10gPT0gMHhERikpKSB7CS8qIERUICovCi0JCWRldl93YXJuKGRldiwgIiVzOiByZW1vdGUgYXNzb2NpYXRlZCByZWZpZD0lMDJYXG4iLAotCQkJIF9fZnVuY19fLCBidWZbMV0pOwotCQlpY3R4LT5yZl9pc2Fzc29jaWF0aW5nID0gZmFsc2U7Ci0JfQotfQotCi0vKioKLSAqIENhbGxiYWNrIGZ1bmN0aW9uIGZvciBVU0IgY29yZSBBUEk6IHJlY2VpdmUgZGF0YQotICovCi1zdGF0aWMgdm9pZCB1c2JfcnhfY2FsbGJhY2tfaW50ZjAoc3RydWN0IHVyYiAqdXJiKQotewotCXN0cnVjdCBpbW9uX2NvbnRleHQgKmljdHg7Ci0JaW50IGludGZudW0gPSAwOwotCi0JaWYgKCF1cmIpCi0JCXJldHVybjsKLQotCWljdHggPSAoc3RydWN0IGltb25fY29udGV4dCAqKXVyYi0+Y29udGV4dDsKLQlpZiAoIWljdHgpCi0JCXJldHVybjsKLQotCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKLQljYXNlIC1FTk9FTlQ6CQkvKiB1c2Jjb3JlIHVubGluayBzdWNjZXNzZnVsISAqLwotCQlyZXR1cm47Ci0KLQljYXNlIC1FU0hVVERPV046CS8qIHRyYW5zcG9ydCBlbmRwb2ludCB3YXMgc2h1dCBkb3duICovCi0JCWJyZWFrOwotCi0JY2FzZSAwOgotCQlpbW9uX2luY29taW5nX3BhY2tldChpY3R4LCB1cmIsIGludGZudW0pOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCWRldl93YXJuKGljdHgtPmRldiwgImltb24gJXM6IHN0YXR1cyglZCk6IGlnbm9yZWRcbiIsCi0JCQkgX19mdW5jX18sIHVyYi0+c3RhdHVzKTsKLQkJYnJlYWs7Ci0JfQotCi0JdXNiX3N1Ym1pdF91cmIoaWN0eC0+cnhfdXJiX2ludGYwLCBHRlBfQVRPTUlDKTsKLX0KLQotc3RhdGljIHZvaWQgdXNiX3J4X2NhbGxiYWNrX2ludGYxKHN0cnVjdCB1cmIgKnVyYikKLXsKLQlzdHJ1Y3QgaW1vbl9jb250ZXh0ICppY3R4OwotCWludCBpbnRmbnVtID0gMTsKLQotCWlmICghdXJiKQotCQlyZXR1cm47Ci0KLQlpY3R4ID0gKHN0cnVjdCBpbW9uX2NvbnRleHQgKil1cmItPmNvbnRleHQ7Ci0JaWYgKCFpY3R4KQotCQlyZXR1cm47Ci0KLQlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7Ci0JY2FzZSAtRU5PRU5UOgkJLyogdXNiY29yZSB1bmxpbmsgc3VjY2Vzc2Z1bCEgKi8KLQkJcmV0dXJuOwotCi0JY2FzZSAtRVNIVVRET1dOOgkvKiB0cmFuc3BvcnQgZW5kcG9pbnQgd2FzIHNodXQgZG93biAqLwotCQlicmVhazsKLQotCWNhc2UgMDoKLQkJaW1vbl9pbmNvbWluZ19wYWNrZXQoaWN0eCwgdXJiLCBpbnRmbnVtKTsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlkZXZfd2FybihpY3R4LT5kZXYsICJpbW9uICVzOiBzdGF0dXMoJWQpOiBpZ25vcmVkXG4iLAotCQkJIF9fZnVuY19fLCB1cmItPnN0YXR1cyk7Ci0JCWJyZWFrOwotCX0KLQotCXVzYl9zdWJtaXRfdXJiKGljdHgtPnJ4X3VyYl9pbnRmMSwgR0ZQX0FUT01JQyk7Ci19Ci0KLS8qCi0gKiBUaGUgMHgxNWMyOjB4ZmZkYyBkZXZpY2UgSUQgd2FzIHVzZWQgZm9yIHVtcHRlZW4gZGlmZmVyZW50IGltb24KLSAqIGRldmljZXMsIGFuZCBhbGwgb2YgdGhlbSBjb25zdGFudGx5IHNwZXcgaW50ZXJydXB0cywgZXZlbiB3aGVuIHRoZXJlCi0gKiBpcyBubyBhY3R1YWwgZGF0YSB0byByZXBvcnQuIEhvd2V2ZXIsIGJ5dGUgNiBvZiB0aGlzIGJ1ZmZlciBsb29rcyBsaWtlCi0gKiBpdHMgdW5pcXVlIGFjcm9zcyBkZXZpY2UgdmFyaWFudHMsIHNvIHdlJ3JlIHRyeWluZyB0byBrZXkgb2ZmIHRoYXQgdG8KLSAqIGZpZ3VyZSBvdXQgd2hpY2ggZGlzcGxheSB0eXBlIChpZiBhbnkpIGFuZCB3aGF0IElSIHByb3RvY29sIHRoZSBkZXZpY2UKLSAqIGFjdHVhbGx5IHN1cHBvcnRzLiBUaGVzZSBkZXZpY2VzIGhhdmUgdGhlaXIgSVIgcHJvdG9jb2wgaGFyZC1jb2RlZCBpbnRvCi0gKiB0aGVpciBmaXJtd2FyZSwgdGhleSBjYW4ndCBiZSBjaGFuZ2VkIG9uIHRoZSBmbHkgbGlrZSB0aGUgbmV3ZXIgaGFyZHdhcmUuCi0gKi8KLXN0YXRpYyB2b2lkIGltb25fZ2V0X2ZmZGNfdHlwZShzdHJ1Y3QgaW1vbl9jb250ZXh0ICppY3R4KQotewotCXU4IGZmZGNfY2ZnX2J5dGUgPSBpY3R4LT51c2JfcnhfYnVmWzZdOwotCXU4IGRldGVjdGVkX2Rpc3BsYXlfdHlwZSA9IElNT05fRElTUExBWV9UWVBFX05PTkU7Ci0JdTY0IGFsbG93ZWRfcHJvdG9zID0gSVJfVFlQRV9PVEhFUjsKLQotCXN3aXRjaCAoZmZkY19jZmdfYnl0ZSkgewotCS8qIGlNT04gS25vYiwgbm8gZGlzcGxheSwgaU1PTiBJUiArIHZvbCBrbm9iICovCi0JY2FzZSAweDIxOgotCQlkZXZfaW5mbyhpY3R4LT5kZXYsICIweGZmZGMgaU1PTiBLbm9iLCBpTU9OIElSIik7Ci0JCWljdHgtPmRpc3BsYXlfc3VwcG9ydGVkID0gZmFsc2U7Ci0JCWJyZWFrOwotCS8qIGlNT04gMi40RyBMVCAodXNiIHN0aWNrKSwgbm8gZGlzcGxheSwgaU1PTiBSRiAqLwotCWNhc2UgMHg0ZToKLQkJZGV2X2luZm8oaWN0eC0+ZGV2LCAiMHhmZmRjIGlNT04gMi40RyBMVCwgaU1PTiBSRiIpOwotCQlpY3R4LT5kaXNwbGF5X3N1cHBvcnRlZCA9IGZhbHNlOwotCQlpY3R4LT5yZl9kZXZpY2UgPSB0cnVlOwotCQlicmVhazsKLQkvKiBpTU9OIFZGRCwgbm8gSVIgKGRvZXMgaGF2ZSB2b2wga25vYiB0aG8pICovCi0JY2FzZSAweDM1OgotCQlkZXZfaW5mbyhpY3R4LT5kZXYsICIweGZmZGMgaU1PTiBWRkQgKyBrbm9iLCBubyBJUiIpOwotCQlkZXRlY3RlZF9kaXNwbGF5X3R5cGUgPSBJTU9OX0RJU1BMQVlfVFlQRV9WRkQ7Ci0JCWJyZWFrOwotCS8qIGlNT04gVkZELCBpTU9OIElSICovCi0JY2FzZSAweDI0OgotCWNhc2UgMHg4NToKLQkJZGV2X2luZm8oaWN0eC0+ZGV2LCAiMHhmZmRjIGlNT04gVkZELCBpTU9OIElSIik7Ci0JCWRldGVjdGVkX2Rpc3BsYXlfdHlwZSA9IElNT05fRElTUExBWV9UWVBFX1ZGRDsKLQkJYnJlYWs7Ci0JLyogaU1PTiBWRkQsIE1DRSBJUiAqLwotCWNhc2UgMHg5ZToKLQkJZGV2X2luZm8oaWN0eC0+ZGV2LCAiMHhmZmRjIGlNT04gVkZELCBNQ0UgSVIiKTsKLQkJZGV0ZWN0ZWRfZGlzcGxheV90eXBlID0gSU1PTl9ESVNQTEFZX1RZUEVfVkZEOwotCQlhbGxvd2VkX3Byb3RvcyA9IElSX1RZUEVfUkM2OwotCQlicmVhazsKLQkvKiBpTU9OIExDRCwgTUNFIElSICovCi0JY2FzZSAweDlmOgotCQlkZXZfaW5mbyhpY3R4LT5kZXYsICIweGZmZGMgaU1PTiBMQ0QsIE1DRSBJUiIpOwotCQlkZXRlY3RlZF9kaXNwbGF5X3R5cGUgPSBJTU9OX0RJU1BMQVlfVFlQRV9MQ0Q7Ci0JCWFsbG93ZWRfcHJvdG9zID0gSVJfVFlQRV9SQzY7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWRldl9pbmZvKGljdHgtPmRldiwgIlVua25vd24gMHhmZmRjIGRldmljZSwgIgotCQkJICJkZWZhdWx0aW5nIHRvIFZGRCBhbmQgaU1PTiBJUiIpOwotCQlkZXRlY3RlZF9kaXNwbGF5X3R5cGUgPSBJTU9OX0RJU1BMQVlfVFlQRV9WRkQ7Ci0JCWJyZWFrOwotCX0KLQotCXByaW50ayhLRVJOX0NPTlQgIiAoaWQgMHglMDJ4KVxuIiwgZmZkY19jZmdfYnl0ZSk7Ci0KLQlpY3R4LT5kaXNwbGF5X3R5cGUgPSBkZXRlY3RlZF9kaXNwbGF5X3R5cGU7Ci0JaWN0eC0+cHJvcHMtPmFsbG93ZWRfcHJvdG9zID0gYWxsb3dlZF9wcm90b3M7Ci0JaWN0eC0+aXJfdHlwZSA9IGFsbG93ZWRfcHJvdG9zOwotfQotCi1zdGF0aWMgdm9pZCBpbW9uX3NldF9kaXNwbGF5X3R5cGUoc3RydWN0IGltb25fY29udGV4dCAqaWN0eCkKLXsKLQl1OCBjb25maWd1cmVkX2Rpc3BsYXlfdHlwZSA9IElNT05fRElTUExBWV9UWVBFX1ZGRDsKLQotCS8qCi0JICogVHJ5IHRvIGF1dG8tZGV0ZWN0IHRoZSB0eXBlIG9mIGRpc3BsYXkgaWYgdGhlIHVzZXIgaGFzbid0IHNldAotCSAqIGl0IGJ5IGhhbmQgdmlhIHRoZSBkaXNwbGF5X3R5cGUgbW9kcGFyYW0uIERlZmF1bHQgaXMgVkZELgotCSAqLwotCi0JaWYgKGRpc3BsYXlfdHlwZSA9PSBJTU9OX0RJU1BMQVlfVFlQRV9BVVRPKSB7Ci0JCXN3aXRjaCAoaWN0eC0+cHJvZHVjdCkgewotCQljYXNlIDB4ZmZkYzoKLQkJCS8qIHNldCBpbiBpbW9uX2dldF9mZmRjX3R5cGUoKSAqLwotCQkJY29uZmlndXJlZF9kaXNwbGF5X3R5cGUgPSBpY3R4LT5kaXNwbGF5X3R5cGU7Ci0JCQlicmVhazsKLQkJY2FzZSAweDAwMzQ6Ci0JCWNhc2UgMHgwMDM1OgotCQkJY29uZmlndXJlZF9kaXNwbGF5X3R5cGUgPSBJTU9OX0RJU1BMQVlfVFlQRV9WR0E7Ci0JCQlicmVhazsKLQkJY2FzZSAweDAwMzg6Ci0JCWNhc2UgMHgwMDM5OgotCQljYXNlIDB4MDA0NToKLQkJCWNvbmZpZ3VyZWRfZGlzcGxheV90eXBlID0gSU1PTl9ESVNQTEFZX1RZUEVfTENEOwotCQkJYnJlYWs7Ci0JCWNhc2UgMHgwMDNjOgotCQljYXNlIDB4MDA0MToKLQkJY2FzZSAweDAwNDI6Ci0JCWNhc2UgMHgwMDQzOgotCQkJY29uZmlndXJlZF9kaXNwbGF5X3R5cGUgPSBJTU9OX0RJU1BMQVlfVFlQRV9OT05FOwotCQkJaWN0eC0+ZGlzcGxheV9zdXBwb3J0ZWQgPSBmYWxzZTsKLQkJCWJyZWFrOwotCQljYXNlIDB4MDAzNjoKLQkJY2FzZSAweDAwNDQ6Ci0JCWRlZmF1bHQ6Ci0JCQljb25maWd1cmVkX2Rpc3BsYXlfdHlwZSA9IElNT05fRElTUExBWV9UWVBFX1ZGRDsKLQkJCWJyZWFrOwotCQl9Ci0JfSBlbHNlIHsKLQkJY29uZmlndXJlZF9kaXNwbGF5X3R5cGUgPSBkaXNwbGF5X3R5cGU7Ci0JCWlmIChkaXNwbGF5X3R5cGUgPT0gSU1PTl9ESVNQTEFZX1RZUEVfTk9ORSkKLQkJCWljdHgtPmRpc3BsYXlfc3VwcG9ydGVkID0gZmFsc2U7Ci0JCWVsc2UKLQkJCWljdHgtPmRpc3BsYXlfc3VwcG9ydGVkID0gdHJ1ZTsKLQkJZGV2X2luZm8oaWN0eC0+ZGV2LCAiJXM6IG92ZXJyaWRpbmcgZGlzcGxheSB0eXBlIHRvICVkIHZpYSAiCi0JCQkgIm1vZHBhcmFtXG4iLCBfX2Z1bmNfXywgZGlzcGxheV90eXBlKTsKLQl9Ci0KLQlpY3R4LT5kaXNwbGF5X3R5cGUgPSBjb25maWd1cmVkX2Rpc3BsYXlfdHlwZTsKLX0KLQotc3RhdGljIHN0cnVjdCBpbnB1dF9kZXYgKmltb25faW5pdF9yZGV2KHN0cnVjdCBpbW9uX2NvbnRleHQgKmljdHgpCi17Ci0Jc3RydWN0IGlucHV0X2RldiAqcmRldjsKLQlzdHJ1Y3QgaXJfZGV2X3Byb3BzICpwcm9wczsKLQlpbnQgcmV0OwotCWNoYXIgKmlyX2NvZGVzID0gTlVMTDsKLQljb25zdCB1bnNpZ25lZCBjaGFyIGZwX3BhY2tldFtdID0geyAweDQwLCAweDAwLCAweDAwLCAweDAwLAotCQkJCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCB9OwotCi0JcmRldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOwotCXByb3BzID0ga3phbGxvYyhzaXplb2YoKnByb3BzKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFyZGV2IHx8ICFwcm9wcykgewotCQlkZXZfZXJyKGljdHgtPmRldiwgInJlbW90ZSBjb250cm9sIGRldiBhbGxvY2F0aW9uIGZhaWxlZFxuIik7Ci0JCWdvdG8gb3V0OwotCX0KLQotCXNucHJpbnRmKGljdHgtPm5hbWVfcmRldiwgc2l6ZW9mKGljdHgtPm5hbWVfcmRldiksCi0JCSAiaU1PTiBSZW1vdGUgKCUwNHg6JTA0eCkiLCBpY3R4LT52ZW5kb3IsIGljdHgtPnByb2R1Y3QpOwotCXVzYl9tYWtlX3BhdGgoaWN0eC0+dXNiZGV2X2ludGYwLCBpY3R4LT5waHlzX3JkZXYsCi0JCSAgICAgIHNpemVvZihpY3R4LT5waHlzX3JkZXYpKTsKLQlzdHJsY2F0KGljdHgtPnBoeXNfcmRldiwgIi9pbnB1dDAiLCBzaXplb2YoaWN0eC0+cGh5c19yZGV2KSk7Ci0KLQlyZGV2LT5uYW1lID0gaWN0eC0+bmFtZV9yZGV2OwotCXJkZXYtPnBoeXMgPSBpY3R4LT5waHlzX3JkZXY7Ci0JdXNiX3RvX2lucHV0X2lkKGljdHgtPnVzYmRldl9pbnRmMCwgJnJkZXYtPmlkKTsKLQlyZGV2LT5kZXYucGFyZW50ID0gaWN0eC0+ZGV2OwotCXJkZXYtPmV2Yml0WzBdID0gQklUX01BU0soRVZfS0VZKSB8IEJJVF9NQVNLKEVWX1JFUCk7Ci0JaW5wdXRfc2V0X2RydmRhdGEocmRldiwgaWN0eCk7Ci0KLQlwcm9wcy0+cHJpdiA9IGljdHg7Ci0JcHJvcHMtPmRyaXZlcl90eXBlID0gUkNfRFJJVkVSX1NDQU5DT0RFOwotCXByb3BzLT5hbGxvd2VkX3Byb3RvcyA9IElSX1RZUEVfT1RIRVIgfCBJUl9UWVBFX1JDNjsgLyogaU1PTiBQQUQgb3IgTUNFICovCi0JcHJvcHMtPmNoYW5nZV9wcm90b2NvbCA9IGltb25faXJfY2hhbmdlX3Byb3RvY29sOwotCWljdHgtPnByb3BzID0gcHJvcHM7Ci0KLQkvKiBFbmFibGUgZnJvbnQtcGFuZWwgYnV0dG9ucyBhbmQvb3Iga25vYnMgKi8KLQltZW1jcHkoaWN0eC0+dXNiX3R4X2J1ZiwgJmZwX3BhY2tldCwgc2l6ZW9mKGZwX3BhY2tldCkpOwotCXJldCA9IHNlbmRfcGFja2V0KGljdHgpOwotCS8qIE5vdCBmYXRhbCwgYnV0IHdhcm4gYWJvdXQgaXQgKi8KLQlpZiAocmV0KQotCQlkZXZfaW5mbyhpY3R4LT5kZXYsICJwYW5lbCBidXR0b25zL2tub2JzIHNldHVwIGZhaWxlZFxuIik7Ci0KLQlpZiAoaWN0eC0+cHJvZHVjdCA9PSAweGZmZGMpCi0JCWltb25fZ2V0X2ZmZGNfdHlwZShpY3R4KTsKLQotCWltb25fc2V0X2Rpc3BsYXlfdHlwZShpY3R4KTsKLQotCWlmIChpY3R4LT5pcl90eXBlID09IElSX1RZUEVfUkM2KQotCQlpcl9jb2RlcyA9IFJDX01BUF9JTU9OX01DRTsKLQllbHNlCi0JCWlyX2NvZGVzID0gUkNfTUFQX0lNT05fUEFEOwotCi0JcmV0ID0gaXJfaW5wdXRfcmVnaXN0ZXIocmRldiwgaXJfY29kZXMsIHByb3BzLCBNT0RfTkFNRSk7Ci0JaWYgKHJldCA8IDApIHsKLQkJZGV2X2VycihpY3R4LT5kZXYsICJyZW1vdGUgaW5wdXQgZGV2IHJlZ2lzdGVyIGZhaWxlZFxuIik7Ci0JCWdvdG8gb3V0OwotCX0KLQotCXJldHVybiByZGV2OwotCi1vdXQ6Ci0Ja2ZyZWUocHJvcHMpOwotCWlucHV0X2ZyZWVfZGV2aWNlKHJkZXYpOwotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgc3RydWN0IGlucHV0X2RldiAqaW1vbl9pbml0X2lkZXYoc3RydWN0IGltb25fY29udGV4dCAqaWN0eCkKLXsKLQlzdHJ1Y3QgaW5wdXRfZGV2ICppZGV2OwotCWludCByZXQsIGk7Ci0KLQlpZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7Ci0JaWYgKCFpZGV2KSB7Ci0JCWRldl9lcnIoaWN0eC0+ZGV2LCAiaW5wdXQgZGV2IGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0Jc25wcmludGYoaWN0eC0+bmFtZV9pZGV2LCBzaXplb2YoaWN0eC0+bmFtZV9pZGV2KSwKLQkJICJpTU9OIFBhbmVsLCBLbm9iIGFuZCBNb3VzZSglMDR4OiUwNHgpIiwKLQkJIGljdHgtPnZlbmRvciwgaWN0eC0+cHJvZHVjdCk7Ci0JaWRldi0+bmFtZSA9IGljdHgtPm5hbWVfaWRldjsKLQotCXVzYl9tYWtlX3BhdGgoaWN0eC0+dXNiZGV2X2ludGYwLCBpY3R4LT5waHlzX2lkZXYsCi0JCSAgICAgIHNpemVvZihpY3R4LT5waHlzX2lkZXYpKTsKLQlzdHJsY2F0KGljdHgtPnBoeXNfaWRldiwgIi9pbnB1dDEiLCBzaXplb2YoaWN0eC0+cGh5c19pZGV2KSk7Ci0JaWRldi0+cGh5cyA9IGljdHgtPnBoeXNfaWRldjsKLQotCWlkZXYtPmV2Yml0WzBdID0gQklUX01BU0soRVZfS0VZKSB8IEJJVF9NQVNLKEVWX1JFUCkgfCBCSVRfTUFTSyhFVl9SRUwpOwotCi0JaWRldi0+a2V5Yml0W0JJVF9XT1JEKEJUTl9NT1VTRSldID0KLQkJQklUX01BU0soQlROX0xFRlQpIHwgQklUX01BU0soQlROX1JJR0hUKTsKLQlpZGV2LT5yZWxiaXRbMF0gPSBCSVRfTUFTSyhSRUxfWCkgfCBCSVRfTUFTSyhSRUxfWSkgfAotCQlCSVRfTUFTSyhSRUxfV0hFRUwpOwotCi0JLyogcGFuZWwgYW5kL29yIGtub2IgY29kZSBzdXBwb3J0ICovCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaW1vbl9wYW5lbF9rZXlfdGFibGUpOyBpKyspIHsKLQkJdTMyIGtjID0gaW1vbl9wYW5lbF9rZXlfdGFibGVbaV0ua2V5Y29kZTsKLQkJX19zZXRfYml0KGtjLCBpZGV2LT5rZXliaXQpOwotCX0KLQotCXVzYl90b19pbnB1dF9pZChpY3R4LT51c2JkZXZfaW50ZjAsICZpZGV2LT5pZCk7Ci0JaWRldi0+ZGV2LnBhcmVudCA9IGljdHgtPmRldjsKLQlpbnB1dF9zZXRfZHJ2ZGF0YShpZGV2LCBpY3R4KTsKLQotCXJldCA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShpZGV2KTsKLQlpZiAocmV0IDwgMCkgewotCQlkZXZfZXJyKGljdHgtPmRldiwgImlucHV0IGRldiByZWdpc3RlciBmYWlsZWRcbiIpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlyZXR1cm4gaWRldjsKLQotb3V0OgotCWlucHV0X2ZyZWVfZGV2aWNlKGlkZXYpOwotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgc3RydWN0IGlucHV0X2RldiAqaW1vbl9pbml0X3RvdWNoKHN0cnVjdCBpbW9uX2NvbnRleHQgKmljdHgpCi17Ci0Jc3RydWN0IGlucHV0X2RldiAqdG91Y2g7Ci0JaW50IHJldDsKLQotCXRvdWNoID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7Ci0JaWYgKCF0b3VjaCkgewotCQlkZXZfZXJyKGljdHgtPmRldiwgInRvdWNoc2NyZWVuIGlucHV0IGRldiBhbGxvY2F0aW9uIGZhaWxlZFxuIik7Ci0JCWdvdG8gdG91Y2hfYWxsb2NfZmFpbGVkOwotCX0KLQotCXNucHJpbnRmKGljdHgtPm5hbWVfdG91Y2gsIHNpemVvZihpY3R4LT5uYW1lX3RvdWNoKSwKLQkJICJpTU9OIFVTQiBUb3VjaHNjcmVlbiAoJTA0eDolMDR4KSIsCi0JCSBpY3R4LT52ZW5kb3IsIGljdHgtPnByb2R1Y3QpOwotCXRvdWNoLT5uYW1lID0gaWN0eC0+bmFtZV90b3VjaDsKLQotCXVzYl9tYWtlX3BhdGgoaWN0eC0+dXNiZGV2X2ludGYxLCBpY3R4LT5waHlzX3RvdWNoLAotCQkgICAgICBzaXplb2YoaWN0eC0+cGh5c190b3VjaCkpOwotCXN0cmxjYXQoaWN0eC0+cGh5c190b3VjaCwgIi9pbnB1dDIiLCBzaXplb2YoaWN0eC0+cGh5c190b3VjaCkpOwotCXRvdWNoLT5waHlzID0gaWN0eC0+cGh5c190b3VjaDsKLQotCXRvdWNoLT5ldmJpdFswXSA9Ci0JCUJJVF9NQVNLKEVWX0tFWSkgfCBCSVRfTUFTSyhFVl9BQlMpOwotCXRvdWNoLT5rZXliaXRbQklUX1dPUkQoQlROX1RPVUNIKV0gPQotCQlCSVRfTUFTSyhCVE5fVE9VQ0gpOwotCWlucHV0X3NldF9hYnNfcGFyYW1zKHRvdWNoLCBBQlNfWCwKLQkJCSAgICAgMHgwMCwgMHhmZmYsIDAsIDApOwotCWlucHV0X3NldF9hYnNfcGFyYW1zKHRvdWNoLCBBQlNfWSwKLQkJCSAgICAgMHgwMCwgMHhmZmYsIDAsIDApOwotCi0JaW5wdXRfc2V0X2RydmRhdGEodG91Y2gsIGljdHgpOwotCi0JdXNiX3RvX2lucHV0X2lkKGljdHgtPnVzYmRldl9pbnRmMSwgJnRvdWNoLT5pZCk7Ci0JdG91Y2gtPmRldi5wYXJlbnQgPSBpY3R4LT5kZXY7Ci0JcmV0ID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKHRvdWNoKTsKLQlpZiAocmV0IDwgIDApIHsKLQkJZGV2X2luZm8oaWN0eC0+ZGV2LCAidG91Y2hzY3JlZW4gaW5wdXQgZGV2IHJlZ2lzdGVyIGZhaWxlZFxuIik7Ci0JCWdvdG8gdG91Y2hfcmVnaXN0ZXJfZmFpbGVkOwotCX0KLQotCXJldHVybiB0b3VjaDsKLQotdG91Y2hfcmVnaXN0ZXJfZmFpbGVkOgotCWlucHV0X2ZyZWVfZGV2aWNlKGljdHgtPnRvdWNoKTsKLQotdG91Y2hfYWxsb2NfZmFpbGVkOgotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgYm9vbCBpbW9uX2ZpbmRfZW5kcG9pbnRzKHN0cnVjdCBpbW9uX2NvbnRleHQgKmljdHgsCi0JCQkJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaWZhY2VfZGVzYykKLXsKLQlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwOwotCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqcnhfZW5kcG9pbnQgPSBOVUxMOwotCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqdHhfZW5kcG9pbnQgPSBOVUxMOwotCWludCBpZm51bSA9IGlmYWNlX2Rlc2MtPmRlc2MuYkludGVyZmFjZU51bWJlcjsKLQlpbnQgbnVtX2VuZHB0cyA9IGlmYWNlX2Rlc2MtPmRlc2MuYk51bUVuZHBvaW50czsKLQlpbnQgaSwgZXBfZGlyLCBlcF90eXBlOwotCWJvb2wgaXJfZXBfZm91bmQgPSBmYWxzZTsKLQlib29sIGRpc3BsYXlfZXBfZm91bmQgPSBmYWxzZTsKLQlib29sIHR4X2NvbnRyb2wgPSBmYWxzZTsKLQotCS8qCi0JICogU2NhbiB0aGUgZW5kcG9pbnQgbGlzdCBhbmQgc2V0OgotCSAqCWZpcnN0IGlucHV0IGVuZHBvaW50ID0gSVIgZW5kcG9pbnQKLQkgKglmaXJzdCBvdXRwdXQgZW5kcG9pbnQgPSBkaXNwbGF5IGVuZHBvaW50Ci0JICovCi0JZm9yIChpID0gMDsgaSA8IG51bV9lbmRwdHMgJiYgIShpcl9lcF9mb3VuZCAmJiBkaXNwbGF5X2VwX2ZvdW5kKTsgKytpKSB7Ci0JCWVwID0gJmlmYWNlX2Rlc2MtPmVuZHBvaW50W2ldLmRlc2M7Ci0JCWVwX2RpciA9IGVwLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0VORFBPSU5UX0RJUl9NQVNLOwotCQllcF90eXBlID0gZXAtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLOwotCi0JCWlmICghaXJfZXBfZm91bmQgJiYgZXBfZGlyID09IFVTQl9ESVJfSU4gJiYKLQkJICAgIGVwX3R5cGUgPT0gVVNCX0VORFBPSU5UX1hGRVJfSU5UKSB7Ci0KLQkJCXJ4X2VuZHBvaW50ID0gZXA7Ci0JCQlpcl9lcF9mb3VuZCA9IHRydWU7Ci0JCQlkZXZfZGJnKGljdHgtPmRldiwgIiVzOiBmb3VuZCBJUiBlbmRwb2ludFxuIiwgX19mdW5jX18pOwotCi0JCX0gZWxzZSBpZiAoIWRpc3BsYXlfZXBfZm91bmQgJiYgZXBfZGlyID09IFVTQl9ESVJfT1VUICYmCi0JCQkgICBlcF90eXBlID09IFVTQl9FTkRQT0lOVF9YRkVSX0lOVCkgewotCQkJdHhfZW5kcG9pbnQgPSBlcDsKLQkJCWRpc3BsYXlfZXBfZm91bmQgPSB0cnVlOwotCQkJZGV2X2RiZyhpY3R4LT5kZXYsICIlczogZm91bmQgZGlzcGxheSBlbmRwb2ludFxuIiwgX19mdW5jX18pOwotCQl9Ci0JfQotCi0JaWYgKGlmbnVtID09IDApIHsKLQkJaWN0eC0+cnhfZW5kcG9pbnRfaW50ZjAgPSByeF9lbmRwb2ludDsKLQkJLyoKLQkJICogdHggaXMgdXNlZCB0byBzZW5kIGNoYXJhY3RlcnMgdG8gbGNkL3ZmZCwgYXNzb2NpYXRlIFJGCi0JCSAqIHJlbW90ZXMsIHNldCBJUiBwcm90b2NvbCwgYW5kIG1heWJlIG1vcmUuLi4KLQkJICovCi0JCWljdHgtPnR4X2VuZHBvaW50ID0gdHhfZW5kcG9pbnQ7Ci0JfSBlbHNlIHsKLQkJaWN0eC0+cnhfZW5kcG9pbnRfaW50ZjEgPSByeF9lbmRwb2ludDsKLQl9Ci0KLQkvKgotCSAqIElmIHdlIGRpZG4ndCBmaW5kIGEgZGlzcGxheSBlbmRwb2ludCwgdGhpcyBpcyBwcm9iYWJseSBvbmUgb2YgdGhlCi0JICogbmV3ZXIgaU1PTiBkZXZpY2VzIHRoYXQgdXNlIGNvbnRyb2wgdXJiIGluc3RlYWQgb2YgaW50ZXJydXB0Ci0JICovCi0JaWYgKCFkaXNwbGF5X2VwX2ZvdW5kKSB7Ci0JCXR4X2NvbnRyb2wgPSB0cnVlOwotCQlkaXNwbGF5X2VwX2ZvdW5kID0gdHJ1ZTsKLQkJZGV2X2RiZyhpY3R4LT5kZXYsICIlczogZGV2aWNlIHVzZXMgY29udHJvbCBlbmRwb2ludCwgbm90ICIKLQkJCSJpbnRlcmZhY2UgT1VUIGVuZHBvaW50XG4iLCBfX2Z1bmNfXyk7Ci0JfQotCi0JLyoKLQkgKiBTb21lIGlNT04gcmVjZWl2ZXJzIGhhdmUgbm8gZGlzcGxheS4gVW5mb3J0dW5hdGVseSwgaXQgc2VlbXMKLQkgKiB0aGF0IFNvdW5kR3JhcGggcmVjeWNsZXMgZGV2aWNlIElEcyBiZXR3ZWVuIGRldmljZXMgYm90aCB3aXRoCi0JICogYW5kIHdpdGhvdXQuLi4gOlwKLQkgKi8KLQlpZiAoaWN0eC0+ZGlzcGxheV90eXBlID09IElNT05fRElTUExBWV9UWVBFX05PTkUpIHsKLQkJZGlzcGxheV9lcF9mb3VuZCA9IGZhbHNlOwotCQlkZXZfZGJnKGljdHgtPmRldiwgIiVzOiBkZXZpY2UgaGFzIG5vIGRpc3BsYXlcbiIsIF9fZnVuY19fKTsKLQl9Ci0KLQkvKgotCSAqIGlNT04gVG91Y2ggZGV2aWNlcyBoYXZlIGEgVkdBIHRvdWNoc2NyZWVuLCBidXQgbm8gImRpc3BsYXkiLCBhcwotCSAqIHRoYXQgcmVmZXJzIHRvIGUuZy4gL2Rldi9sY2QwIChhIGNoYXJhY3RlciBkZXZpY2UgTENEIG9yIFZGRCkuCi0JICovCi0JaWYgKGljdHgtPmRpc3BsYXlfdHlwZSA9PSBJTU9OX0RJU1BMQVlfVFlQRV9WR0EpIHsKLQkJZGlzcGxheV9lcF9mb3VuZCA9IGZhbHNlOwotCQlkZXZfZGJnKGljdHgtPmRldiwgIiVzOiBpTU9OIFRvdWNoIGRldmljZSBmb3VuZFxuIiwgX19mdW5jX18pOwotCX0KLQotCS8qIElucHV0IGVuZHBvaW50IGlzIG1hbmRhdG9yeSAqLwotCWlmICghaXJfZXBfZm91bmQpCi0JCXByX2Vycigibm8gdmFsaWQgaW5wdXQgKElSKSBlbmRwb2ludCBmb3VuZFxuIik7Ci0KLQlpY3R4LT50eF9jb250cm9sID0gdHhfY29udHJvbDsKLQotCWlmIChkaXNwbGF5X2VwX2ZvdW5kKQotCQlpY3R4LT5kaXNwbGF5X3N1cHBvcnRlZCA9IHRydWU7Ci0KLQlyZXR1cm4gaXJfZXBfZm91bmQ7Ci0KLX0KLQotc3RhdGljIHN0cnVjdCBpbW9uX2NvbnRleHQgKmltb25faW5pdF9pbnRmMChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKLXsKLQlzdHJ1Y3QgaW1vbl9jb250ZXh0ICppY3R4OwotCXN0cnVjdCB1cmIgKnJ4X3VyYjsKLQlzdHJ1Y3QgdXJiICp0eF91cmI7Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gJmludGYtPmRldjsKLQlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppZmFjZV9kZXNjOwotCWludCByZXQgPSAtRU5PTUVNOwotCi0JaWN0eCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpbW9uX2NvbnRleHQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWljdHgpIHsKLQkJZGV2X2VycihkZXYsICIlczoga3phbGxvYyBmYWlsZWQgZm9yIGNvbnRleHQiLCBfX2Z1bmNfXyk7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0JcnhfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXJ4X3VyYikgewotCQlkZXZfZXJyKGRldiwgIiVzOiB1c2JfYWxsb2NfdXJiIGZhaWxlZCBmb3IgSVIgdXJiIiwgX19mdW5jX18pOwotCQlnb3RvIHJ4X3VyYl9hbGxvY19mYWlsZWQ7Ci0JfQotCXR4X3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF0eF91cmIpIHsKLQkJZGV2X2VycihkZXYsICIlczogdXNiX2FsbG9jX3VyYiBmYWlsZWQgZm9yIGRpc3BsYXkgdXJiIiwKLQkJCV9fZnVuY19fKTsKLQkJZ290byB0eF91cmJfYWxsb2NfZmFpbGVkOwotCX0KLQotCW11dGV4X2luaXQoJmljdHgtPmxvY2spOwotCXNwaW5fbG9ja19pbml0KCZpY3R4LT5rY19sb2NrKTsKLQotCW11dGV4X2xvY2soJmljdHgtPmxvY2spOwotCi0JaWN0eC0+ZGV2ID0gZGV2OwotCWljdHgtPnVzYmRldl9pbnRmMCA9IHVzYl9nZXRfZGV2KGludGVyZmFjZV90b191c2JkZXYoaW50ZikpOwotCWljdHgtPmRldl9wcmVzZW50X2ludGYwID0gdHJ1ZTsKLQlpY3R4LT5yeF91cmJfaW50ZjAgPSByeF91cmI7Ci0JaWN0eC0+dHhfdXJiID0gdHhfdXJiOwotCWljdHgtPnJmX2RldmljZSA9IGZhbHNlOwotCi0JaWN0eC0+dmVuZG9yICA9IGxlMTZfdG9fY3B1KGljdHgtPnVzYmRldl9pbnRmMC0+ZGVzY3JpcHRvci5pZFZlbmRvcik7Ci0JaWN0eC0+cHJvZHVjdCA9IGxlMTZfdG9fY3B1KGljdHgtPnVzYmRldl9pbnRmMC0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpOwotCi0JcmV0ID0gLUVOT0RFVjsKLQlpZmFjZV9kZXNjID0gaW50Zi0+Y3VyX2FsdHNldHRpbmc7Ci0JaWYgKCFpbW9uX2ZpbmRfZW5kcG9pbnRzKGljdHgsIGlmYWNlX2Rlc2MpKSB7Ci0JCWdvdG8gZmluZF9lbmRwb2ludF9mYWlsZWQ7Ci0JfQotCi0JaWN0eC0+aWRldiA9IGltb25faW5pdF9pZGV2KGljdHgpOwotCWlmICghaWN0eC0+aWRldikgewotCQlkZXZfZXJyKGRldiwgIiVzOiBpbnB1dCBkZXZpY2Ugc2V0dXAgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7Ci0JCWdvdG8gaWRldl9zZXR1cF9mYWlsZWQ7Ci0JfQotCi0JaWN0eC0+cmRldiA9IGltb25faW5pdF9yZGV2KGljdHgpOwotCWlmICghaWN0eC0+cmRldikgewotCQlkZXZfZXJyKGRldiwgIiVzOiByYyBkZXZpY2Ugc2V0dXAgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7Ci0JCWdvdG8gcmRldl9zZXR1cF9mYWlsZWQ7Ci0JfQotCi0JdXNiX2ZpbGxfaW50X3VyYihpY3R4LT5yeF91cmJfaW50ZjAsIGljdHgtPnVzYmRldl9pbnRmMCwKLQkJdXNiX3JjdmludHBpcGUoaWN0eC0+dXNiZGV2X2ludGYwLAotCQkJaWN0eC0+cnhfZW5kcG9pbnRfaW50ZjAtPmJFbmRwb2ludEFkZHJlc3MpLAotCQlpY3R4LT51c2JfcnhfYnVmLCBzaXplb2YoaWN0eC0+dXNiX3J4X2J1ZiksCi0JCXVzYl9yeF9jYWxsYmFja19pbnRmMCwgaWN0eCwKLQkJaWN0eC0+cnhfZW5kcG9pbnRfaW50ZjAtPmJJbnRlcnZhbCk7Ci0KLQlyZXQgPSB1c2Jfc3VibWl0X3VyYihpY3R4LT5yeF91cmJfaW50ZjAsIEdGUF9LRVJORUwpOwotCWlmIChyZXQpIHsKLQkJcHJfZXJyKCJ1c2Jfc3VibWl0X3VyYiBmYWlsZWQgZm9yIGludGYwICglZClcbiIsIHJldCk7Ci0JCWdvdG8gdXJiX3N1Ym1pdF9mYWlsZWQ7Ci0JfQotCi0JcmV0dXJuIGljdHg7Ci0KLXVyYl9zdWJtaXRfZmFpbGVkOgotCWlyX2lucHV0X3VucmVnaXN0ZXIoaWN0eC0+cmRldik7Ci1yZGV2X3NldHVwX2ZhaWxlZDoKLQlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShpY3R4LT5pZGV2KTsKLWlkZXZfc2V0dXBfZmFpbGVkOgotZmluZF9lbmRwb2ludF9mYWlsZWQ6Ci0JbXV0ZXhfdW5sb2NrKCZpY3R4LT5sb2NrKTsKLQl1c2JfZnJlZV91cmIodHhfdXJiKTsKLXR4X3VyYl9hbGxvY19mYWlsZWQ6Ci0JdXNiX2ZyZWVfdXJiKHJ4X3VyYik7Ci1yeF91cmJfYWxsb2NfZmFpbGVkOgotCWtmcmVlKGljdHgpOwotZXhpdDoKLQlkZXZfZXJyKGRldiwgInVuYWJsZSB0byBpbml0aWFsaXplIGludGYwLCBlcnIgJWRcbiIsIHJldCk7Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIHN0cnVjdCBpbW9uX2NvbnRleHQgKmltb25faW5pdF9pbnRmMShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKLQkJCQkJICAgIHN0cnVjdCBpbW9uX2NvbnRleHQgKmljdHgpCi17Ci0Jc3RydWN0IHVyYiAqcnhfdXJiOwotCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmlmYWNlX2Rlc2M7Ci0JaW50IHJldCA9IC1FTk9NRU07Ci0KLQlyeF91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOwotCWlmICghcnhfdXJiKSB7Ci0JCXByX2VycigidXNiX2FsbG9jX3VyYiBmYWlsZWQgZm9yIElSIHVyYlxuIik7Ci0JCWdvdG8gcnhfdXJiX2FsbG9jX2ZhaWxlZDsKLQl9Ci0KLQltdXRleF9sb2NrKCZpY3R4LT5sb2NrKTsKLQotCWlmIChpY3R4LT5kaXNwbGF5X3R5cGUgPT0gSU1PTl9ESVNQTEFZX1RZUEVfVkdBKSB7Ci0JCWluaXRfdGltZXIoJmljdHgtPnR0aW1lcik7Ci0JCWljdHgtPnR0aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpaWN0eDsKLQkJaWN0eC0+dHRpbWVyLmZ1bmN0aW9uID0gaW1vbl90b3VjaF9kaXNwbGF5X3RpbWVvdXQ7Ci0JfQotCi0JaWN0eC0+dXNiZGV2X2ludGYxID0gdXNiX2dldF9kZXYoaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKSk7Ci0JaWN0eC0+ZGV2X3ByZXNlbnRfaW50ZjEgPSB0cnVlOwotCWljdHgtPnJ4X3VyYl9pbnRmMSA9IHJ4X3VyYjsKLQotCXJldCA9IC1FTk9ERVY7Ci0JaWZhY2VfZGVzYyA9IGludGYtPmN1cl9hbHRzZXR0aW5nOwotCWlmICghaW1vbl9maW5kX2VuZHBvaW50cyhpY3R4LCBpZmFjZV9kZXNjKSkKLQkJZ290byBmaW5kX2VuZHBvaW50X2ZhaWxlZDsKLQotCWlmIChpY3R4LT5kaXNwbGF5X3R5cGUgPT0gSU1PTl9ESVNQTEFZX1RZUEVfVkdBKSB7Ci0JCWljdHgtPnRvdWNoID0gaW1vbl9pbml0X3RvdWNoKGljdHgpOwotCQlpZiAoIWljdHgtPnRvdWNoKQotCQkJZ290byB0b3VjaF9zZXR1cF9mYWlsZWQ7Ci0JfSBlbHNlCi0JCWljdHgtPnRvdWNoID0gTlVMTDsKLQotCXVzYl9maWxsX2ludF91cmIoaWN0eC0+cnhfdXJiX2ludGYxLCBpY3R4LT51c2JkZXZfaW50ZjEsCi0JCXVzYl9yY3ZpbnRwaXBlKGljdHgtPnVzYmRldl9pbnRmMSwKLQkJCWljdHgtPnJ4X2VuZHBvaW50X2ludGYxLT5iRW5kcG9pbnRBZGRyZXNzKSwKLQkJaWN0eC0+dXNiX3J4X2J1Ziwgc2l6ZW9mKGljdHgtPnVzYl9yeF9idWYpLAotCQl1c2JfcnhfY2FsbGJhY2tfaW50ZjEsIGljdHgsCi0JCWljdHgtPnJ4X2VuZHBvaW50X2ludGYxLT5iSW50ZXJ2YWwpOwotCi0JcmV0ID0gdXNiX3N1Ym1pdF91cmIoaWN0eC0+cnhfdXJiX2ludGYxLCBHRlBfS0VSTkVMKTsKLQotCWlmIChyZXQpIHsKLQkJcHJfZXJyKCJ1c2Jfc3VibWl0X3VyYiBmYWlsZWQgZm9yIGludGYxICglZClcbiIsIHJldCk7Ci0JCWdvdG8gdXJiX3N1Ym1pdF9mYWlsZWQ7Ci0JfQotCi0JcmV0dXJuIGljdHg7Ci0KLXVyYl9zdWJtaXRfZmFpbGVkOgotCWlmIChpY3R4LT50b3VjaCkKLQkJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoaWN0eC0+dG91Y2gpOwotdG91Y2hfc2V0dXBfZmFpbGVkOgotZmluZF9lbmRwb2ludF9mYWlsZWQ6Ci0JbXV0ZXhfdW5sb2NrKCZpY3R4LT5sb2NrKTsKLQl1c2JfZnJlZV91cmIocnhfdXJiKTsKLXJ4X3VyYl9hbGxvY19mYWlsZWQ6Ci0JZGV2X2VycihpY3R4LT5kZXYsICJ1bmFibGUgdG8gaW5pdGlhbGl6ZSBpbnRmMCwgZXJyICVkXG4iLCByZXQpOwotCi0JcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkIGltb25faW5pdF9kaXNwbGF5KHN0cnVjdCBpbW9uX2NvbnRleHQgKmljdHgsCi0JCQkgICAgICBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKLXsKLQlpbnQgcmV0OwotCi0JZGV2X2RiZyhpY3R4LT5kZXYsICJSZWdpc3RlcmluZyBpTU9OIGRpc3BsYXkgd2l0aCBzeXNmc1xuIik7Ci0KLQkvKiBzZXQgdXAgc3lzZnMgZW50cnkgZm9yIGJ1aWx0LWluIGNsb2NrICovCi0JcmV0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZpbnRmLT5kZXYua29iaiwgJmltb25fZGlzcGxheV9hdHRyX2dyb3VwKTsKLQlpZiAocmV0KQotCQlkZXZfZXJyKGljdHgtPmRldiwgIkNvdWxkIG5vdCBjcmVhdGUgZGlzcGxheSBzeXNmcyAiCi0JCQkiZW50cmllcyglZCkiLCByZXQpOwotCi0JaWYgKGljdHgtPmRpc3BsYXlfdHlwZSA9PSBJTU9OX0RJU1BMQVlfVFlQRV9MQ0QpCi0JCXJldCA9IHVzYl9yZWdpc3Rlcl9kZXYoaW50ZiwgJmltb25fbGNkX2NsYXNzKTsKLQllbHNlCi0JCXJldCA9IHVzYl9yZWdpc3Rlcl9kZXYoaW50ZiwgJmltb25fdmZkX2NsYXNzKTsKLQlpZiAocmV0KQotCQkvKiBOb3QgYSBmYXRhbCBlcnJvciwgc28gaWdub3JlICovCi0JCWRldl9pbmZvKGljdHgtPmRldiwgImNvdWxkIG5vdCBnZXQgYSBtaW5vciBudW1iZXIgZm9yICIKLQkJCSAiZGlzcGxheVxuIik7Ci0KLX0KLQotLyoqCi0gKiBDYWxsYmFjayBmdW5jdGlvbiBmb3IgVVNCIGNvcmUgQVBJOiBQcm9iZQotICovCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBpbW9uX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCi0JCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQotewotCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXYgPSBOVUxMOwotCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmlmYWNlX2Rlc2MgPSBOVUxMOwotCXN0cnVjdCB1c2JfaW50ZXJmYWNlICpmaXJzdF9pZjsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaW50ZXJmYWNlLT5kZXY7Ci0JaW50IGlmbnVtLCBjb2RlX2xlbmd0aCwgc3lzZnNfZXJyOwotCWludCByZXQgPSAwOwotCXN0cnVjdCBpbW9uX2NvbnRleHQgKmljdHggPSBOVUxMOwotCXN0cnVjdCBpbW9uX2NvbnRleHQgKmZpcnN0X2lmX2N0eCA9IE5VTEw7Ci0JdTE2IHZlbmRvciwgcHJvZHVjdDsKLQotCWNvZGVfbGVuZ3RoID0gQlVGX0NIVU5LX1NJWkUgKiA4OwotCi0JdXNiZGV2ICAgICA9IHVzYl9nZXRfZGV2KGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKSk7Ci0JaWZhY2VfZGVzYyA9IGludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmc7Ci0JaWZudW0gICAgICA9IGlmYWNlX2Rlc2MtPmRlc2MuYkludGVyZmFjZU51bWJlcjsKLQl2ZW5kb3IgICAgID0gbGUxNl90b19jcHUodXNiZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKTsKLQlwcm9kdWN0ICAgID0gbGUxNl90b19jcHUodXNiZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCk7Ci0KLQlkZXZfZGJnKGRldiwgIiVzOiBmb3VuZCBpTU9OIGRldmljZSAoJTA0eDolMDR4LCBpbnRmJWQpXG4iLAotCQlfX2Z1bmNfXywgdmVuZG9yLCBwcm9kdWN0LCBpZm51bSk7Ci0KLQkvKiBwcmV2ZW50IHJhY2VzIHByb2JpbmcgZGV2aWNlcyB3L211bHRpcGxlIGludGVyZmFjZXMgKi8KLQltdXRleF9sb2NrKCZkcml2ZXJfbG9jayk7Ci0KLQlmaXJzdF9pZiA9IHVzYl9pZm51bV90b19pZih1c2JkZXYsIDApOwotCWZpcnN0X2lmX2N0eCA9IChzdHJ1Y3QgaW1vbl9jb250ZXh0ICopdXNiX2dldF9pbnRmZGF0YShmaXJzdF9pZik7Ci0KLQlpZiAoaWZudW0gPT0gMCkgewotCQlpY3R4ID0gaW1vbl9pbml0X2ludGYwKGludGVyZmFjZSk7Ci0JCWlmICghaWN0eCkgewotCQkJcHJfZXJyKCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBjb250ZXh0IVxuIik7Ci0JCQlyZXQgPSAtRU5PREVWOwotCQkJZ290byBmYWlsOwotCQl9Ci0KLQl9IGVsc2UgewotCS8qIHRoaXMgaXMgdGhlIHNlY29uZGFyeSBpbnRlcmZhY2Ugb24gdGhlIGRldmljZSAqLwotCQlpY3R4ID0gaW1vbl9pbml0X2ludGYxKGludGVyZmFjZSwgZmlyc3RfaWZfY3R4KTsKLQkJaWYgKCFpY3R4KSB7Ci0JCQlwcl9lcnIoImZhaWxlZCB0byBhdHRhY2ggdG8gY29udGV4dCFcbiIpOwotCQkJcmV0ID0gLUVOT0RFVjsKLQkJCWdvdG8gZmFpbDsKLQkJfQotCi0JfQotCi0JdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIGljdHgpOwotCi0JaWYgKGlmbnVtID09IDApIHsKLQkJaWYgKHByb2R1Y3QgPT0gMHhmZmRjICYmIGljdHgtPnJmX2RldmljZSkgewotCQkJc3lzZnNfZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZpbnRlcmZhY2UtPmRldi5rb2JqLAotCQkJCQkJICAgICAgICZpbW9uX3JmX2F0dHJfZ3JvdXApOwotCQkJaWYgKHN5c2ZzX2VycikKLQkJCQlwcl9lcnIoIkNvdWxkIG5vdCBjcmVhdGUgUkYgc3lzZnMgZW50cmllcyglZClcbiIsCi0JCQkJICAgICAgIHN5c2ZzX2Vycik7Ci0JCX0KLQotCQlpZiAoaWN0eC0+ZGlzcGxheV9zdXBwb3J0ZWQpCi0JCQlpbW9uX2luaXRfZGlzcGxheShpY3R4LCBpbnRlcmZhY2UpOwotCX0KLQotCWRldl9pbmZvKGRldiwgImlNT04gZGV2aWNlICglMDR4OiUwNHgsIGludGYlZCkgb24gIgotCQkgInVzYjwlZDolZD4gaW5pdGlhbGl6ZWRcbiIsIHZlbmRvciwgcHJvZHVjdCwgaWZudW0sCi0JCSB1c2JkZXYtPmJ1cy0+YnVzbnVtLCB1c2JkZXYtPmRldm51bSk7Ci0KLQltdXRleF91bmxvY2soJmljdHgtPmxvY2spOwotCW11dGV4X3VubG9jaygmZHJpdmVyX2xvY2spOwotCi0JcmV0dXJuIDA7Ci0KLWZhaWw6Ci0JbXV0ZXhfdW5sb2NrKCZkcml2ZXJfbG9jayk7Ci0JZGV2X2VycihkZXYsICJ1bmFibGUgdG8gcmVnaXN0ZXIsIGVyciAlZFxuIiwgcmV0KTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLS8qKgotICogQ2FsbGJhY2sgZnVuY3Rpb24gZm9yIFVTQiBjb3JlIEFQSTogZGlzY29ubmVjdAotICovCi1zdGF0aWMgdm9pZCBfX2RldmV4aXQgaW1vbl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCi17Ci0Jc3RydWN0IGltb25fY29udGV4dCAqaWN0eDsKLQlzdHJ1Y3QgZGV2aWNlICpkZXY7Ci0JaW50IGlmbnVtOwotCi0JLyogcHJldmVudCByYWNlcyB3aXRoIG11bHRpLWludGVyZmFjZSBkZXZpY2UgcHJvYmluZyBhbmQgZGlzcGxheV9vcGVuICovCi0JbXV0ZXhfbG9jaygmZHJpdmVyX2xvY2spOwotCi0JaWN0eCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKLQlkZXYgPSBpY3R4LT5kZXY7Ci0JaWZudW0gPSBpbnRlcmZhY2UtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXI7Ci0KLQltdXRleF9sb2NrKCZpY3R4LT5sb2NrKTsKLQotCS8qCi0JICogc3lzZnNfcmVtb3ZlX2dyb3VwIGlzIHNhZmUgdG8gY2FsbCBldmVuIGlmIHN5c2ZzX2NyZWF0ZV9ncm91cAotCSAqIGhhc24ndCBiZWVuIGNhbGxlZAotCSAqLwotCXN5c2ZzX3JlbW92ZV9ncm91cCgmaW50ZXJmYWNlLT5kZXYua29iaiwgJmltb25fZGlzcGxheV9hdHRyX2dyb3VwKTsKLQlzeXNmc19yZW1vdmVfZ3JvdXAoJmludGVyZmFjZS0+ZGV2LmtvYmosICZpbW9uX3JmX2F0dHJfZ3JvdXApOwotCi0JdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOwotCi0JLyogQWJvcnQgb25nb2luZyB3cml0ZSAqLwotCWlmIChpY3R4LT50eC5idXN5KSB7Ci0JCXVzYl9raWxsX3VyYihpY3R4LT50eF91cmIpOwotCQljb21wbGV0ZV9hbGwoJmljdHgtPnR4LmZpbmlzaGVkKTsKLQl9Ci0KLQlpZiAoaWZudW0gPT0gMCkgewotCQlpY3R4LT5kZXZfcHJlc2VudF9pbnRmMCA9IGZhbHNlOwotCQl1c2Jfa2lsbF91cmIoaWN0eC0+cnhfdXJiX2ludGYwKTsKLQkJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoaWN0eC0+aWRldik7Ci0JCWlyX2lucHV0X3VucmVnaXN0ZXIoaWN0eC0+cmRldik7Ci0JCWlmIChpY3R4LT5kaXNwbGF5X3N1cHBvcnRlZCkgewotCQkJaWYgKGljdHgtPmRpc3BsYXlfdHlwZSA9PSBJTU9OX0RJU1BMQVlfVFlQRV9MQ0QpCi0JCQkJdXNiX2RlcmVnaXN0ZXJfZGV2KGludGVyZmFjZSwgJmltb25fbGNkX2NsYXNzKTsKLQkJCWVsc2UKLQkJCQl1c2JfZGVyZWdpc3Rlcl9kZXYoaW50ZXJmYWNlLCAmaW1vbl92ZmRfY2xhc3MpOwotCQl9Ci0JfSBlbHNlIHsKLQkJaWN0eC0+ZGV2X3ByZXNlbnRfaW50ZjEgPSBmYWxzZTsKLQkJdXNiX2tpbGxfdXJiKGljdHgtPnJ4X3VyYl9pbnRmMSk7Ci0JCWlmIChpY3R4LT5kaXNwbGF5X3R5cGUgPT0gSU1PTl9ESVNQTEFZX1RZUEVfVkdBKQotCQkJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoaWN0eC0+dG91Y2gpOwotCX0KLQotCWlmICghaWN0eC0+ZGV2X3ByZXNlbnRfaW50ZjAgJiYgIWljdHgtPmRldl9wcmVzZW50X2ludGYxKSB7Ci0JCWlmIChpY3R4LT5kaXNwbGF5X3R5cGUgPT0gSU1PTl9ESVNQTEFZX1RZUEVfVkdBKQotCQkJZGVsX3RpbWVyX3N5bmMoJmljdHgtPnR0aW1lcik7Ci0JCW11dGV4X3VubG9jaygmaWN0eC0+bG9jayk7Ci0JCWlmICghaWN0eC0+ZGlzcGxheV9pc29wZW4pCi0JCQlmcmVlX2ltb25fY29udGV4dChpY3R4KTsKLQl9IGVsc2UKLQkJbXV0ZXhfdW5sb2NrKCZpY3R4LT5sb2NrKTsKLQotCW11dGV4X3VubG9jaygmZHJpdmVyX2xvY2spOwotCi0JZGV2X2RiZyhkZXYsICIlczogaU1PTiBkZXZpY2UgKGludGYlZCkgZGlzY29ubmVjdGVkXG4iLAotCQlfX2Z1bmNfXywgaWZudW0pOwotfQotCi1zdGF0aWMgaW50IGltb25fc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCi17Ci0Jc3RydWN0IGltb25fY29udGV4dCAqaWN0eCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7Ci0JaW50IGlmbnVtID0gaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlcjsKLQotCWlmIChpZm51bSA9PSAwKQotCQl1c2Jfa2lsbF91cmIoaWN0eC0+cnhfdXJiX2ludGYwKTsKLQllbHNlCi0JCXVzYl9raWxsX3VyYihpY3R4LT5yeF91cmJfaW50ZjEpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaW1vbl9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCi17Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgaW1vbl9jb250ZXh0ICppY3R4ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKLQlpbnQgaWZudW0gPSBpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyOwotCi0JaWYgKGlmbnVtID09IDApIHsKLQkJdXNiX2ZpbGxfaW50X3VyYihpY3R4LT5yeF91cmJfaW50ZjAsIGljdHgtPnVzYmRldl9pbnRmMCwKLQkJCXVzYl9yY3ZpbnRwaXBlKGljdHgtPnVzYmRldl9pbnRmMCwKLQkJCQlpY3R4LT5yeF9lbmRwb2ludF9pbnRmMC0+YkVuZHBvaW50QWRkcmVzcyksCi0JCQlpY3R4LT51c2JfcnhfYnVmLCBzaXplb2YoaWN0eC0+dXNiX3J4X2J1ZiksCi0JCQl1c2JfcnhfY2FsbGJhY2tfaW50ZjAsIGljdHgsCi0JCQlpY3R4LT5yeF9lbmRwb2ludF9pbnRmMC0+YkludGVydmFsKTsKLQotCQlyYyA9IHVzYl9zdWJtaXRfdXJiKGljdHgtPnJ4X3VyYl9pbnRmMCwgR0ZQX0FUT01JQyk7Ci0KLQl9IGVsc2UgewotCQl1c2JfZmlsbF9pbnRfdXJiKGljdHgtPnJ4X3VyYl9pbnRmMSwgaWN0eC0+dXNiZGV2X2ludGYxLAotCQkJdXNiX3JjdmludHBpcGUoaWN0eC0+dXNiZGV2X2ludGYxLAotCQkJCWljdHgtPnJ4X2VuZHBvaW50X2ludGYxLT5iRW5kcG9pbnRBZGRyZXNzKSwKLQkJCWljdHgtPnVzYl9yeF9idWYsIHNpemVvZihpY3R4LT51c2JfcnhfYnVmKSwKLQkJCXVzYl9yeF9jYWxsYmFja19pbnRmMSwgaWN0eCwKLQkJCWljdHgtPnJ4X2VuZHBvaW50X2ludGYxLT5iSW50ZXJ2YWwpOwotCi0JCXJjID0gdXNiX3N1Ym1pdF91cmIoaWN0eC0+cnhfdXJiX2ludGYxLCBHRlBfQVRPTUlDKTsKLQl9Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGltb25faW5pdCh2b2lkKQotewotCWludCByYzsKLQotCXJjID0gdXNiX3JlZ2lzdGVyKCZpbW9uX2RyaXZlcik7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigidXNiIHJlZ2lzdGVyIGZhaWxlZCglZClcbiIsIHJjKTsKLQkJcmMgPSAtRU5PREVWOwotCX0KLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGltb25fZXhpdCh2b2lkKQotewotCXVzYl9kZXJlZ2lzdGVyKCZpbW9uX2RyaXZlcik7Ci19Ci0KLW1vZHVsZV9pbml0KGltb25faW5pdCk7Ci1tb2R1bGVfZXhpdChpbW9uX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9JUi9pci1jb3JlLXByaXYuaCBiL2RyaXZlcnMvbWVkaWEvSVIvaXItY29yZS1wcml2LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxYzkzNmIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS9JUi9pci1jb3JlLXByaXYuaAorKysgL2Rldi9udWxsCkBAIC0xLDIwMyArMCwwIEBACi0vKgotICogUmVtb3RlIENvbnRyb2xsZXIgY29yZSByYXcgZXZlbnRzIGhlYWRlcgotICoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBieSBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLQotI2lmbmRlZiBfSVJfUkFXX0VWRU5UCi0jZGVmaW5lIF9JUl9SQVdfRVZFTlQKLQotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPG1lZGlhL2lyLWNvcmUuaD4KLQotc3RydWN0IGlyX3Jhd19oYW5kbGVyIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0KLQl1NjQgcHJvdG9jb2xzOyAvKiB3aGljaCBhcmUgaGFuZGxlZCBieSB0aGlzIGhhbmRsZXIgKi8KLQlpbnQgKCpkZWNvZGUpKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2Rldiwgc3RydWN0IGlyX3Jhd19ldmVudCBldmVudCk7Ci0KLQkvKiBUaGVzZSB0d28gc2hvdWxkIG9ubHkgYmUgdXNlZCBieSB0aGUgbGlyYyBkZWNvZGVyICovCi0JaW50ICgqcmF3X3JlZ2lzdGVyKShzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYpOwotCWludCAoKnJhd191bnJlZ2lzdGVyKShzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYpOwotfTsKLQotc3RydWN0IGlyX3Jhd19ldmVudF9jdHJsIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkCQlsaXN0OwkJLyogdG8ga2VlcCB0cmFjayBvZiByYXcgY2xpZW50cyAqLwotCXN0cnVjdCB0YXNrX3N0cnVjdAkJKnRocmVhZDsKLQlzcGlubG9ja190CQkJbG9jazsKLQlzdHJ1Y3Qga2ZpZm8JCQlrZmlmbzsJCS8qIGZpZm8gZm9yIHRoZSBwdWxzZS9zcGFjZSBkdXJhdGlvbnMgKi8KLQlrdGltZV90CQkJCWxhc3RfZXZlbnQ7CS8qIHdoZW4gbGFzdCBldmVudCBvY2N1cnJlZCAqLwotCWVudW0gcmF3X2V2ZW50X3R5cGUJCWxhc3RfdHlwZTsJLyogbGFzdCBldmVudCB0eXBlICovCi0Jc3RydWN0IGlucHV0X2RldgkJKmlucHV0X2RldjsJLyogcG9pbnRlciB0byB0aGUgcGFyZW50IGlucHV0X2RldiAqLwotCXU2NAkJCQllbmFibGVkX3Byb3RvY29sczsgLyogZW5hYmxlZCByYXcgcHJvdG9jb2wgZGVjb2RlcnMgKi8KLQotCS8qIHJhdyBkZWNvZGVyIHN0YXRlIGZvbGxvd3MgKi8KLQlzdHJ1Y3QgaXJfcmF3X2V2ZW50IHByZXZfZXY7Ci0Jc3RydWN0IGlyX3Jhd19ldmVudCB0aGlzX2V2OwotCXN0cnVjdCBuZWNfZGVjIHsKLQkJaW50IHN0YXRlOwotCQl1bnNpZ25lZCBjb3VudDsKLQkJdTMyIGJpdHM7Ci0JCWJvb2wgaXNfbmVjX3g7Ci0JCWJvb2wgbmVjeF9yZXBlYXQ7Ci0JfSBuZWM7Ci0Jc3RydWN0IHJjNV9kZWMgewotCQlpbnQgc3RhdGU7Ci0JCXUzMiBiaXRzOwotCQl1bnNpZ25lZCBjb3VudDsKLQkJdW5zaWduZWQgd2FudGVkX2JpdHM7Ci0JfSByYzU7Ci0Jc3RydWN0IHJjNl9kZWMgewotCQlpbnQgc3RhdGU7Ci0JCXU4IGhlYWRlcjsKLQkJdTMyIGJvZHk7Ci0JCWJvb2wgdG9nZ2xlOwotCQl1bnNpZ25lZCBjb3VudDsKLQkJdW5zaWduZWQgd2FudGVkX2JpdHM7Ci0JfSByYzY7Ci0Jc3RydWN0IHNvbnlfZGVjIHsKLQkJaW50IHN0YXRlOwotCQl1MzIgYml0czsKLQkJdW5zaWduZWQgY291bnQ7Ci0JfSBzb255OwotCXN0cnVjdCBqdmNfZGVjIHsKLQkJaW50IHN0YXRlOwotCQl1MTYgYml0czsKLQkJdTE2IG9sZF9iaXRzOwotCQl1bnNpZ25lZCBjb3VudDsKLQkJYm9vbCBmaXJzdDsKLQkJYm9vbCB0b2dnbGU7Ci0JfSBqdmM7Ci0Jc3RydWN0IHJjNV9zel9kZWMgewotCQlpbnQgc3RhdGU7Ci0JCXUzMiBiaXRzOwotCQl1bnNpZ25lZCBjb3VudDsKLQkJdW5zaWduZWQgd2FudGVkX2JpdHM7Ci0JfSByYzVfc3o7Ci0Jc3RydWN0IGxpcmNfY29kZWMgewotCQlzdHJ1Y3QgaXJfaW5wdXRfZGV2ICppcl9kZXY7Ci0JCXN0cnVjdCBsaXJjX2RyaXZlciAqZHJ2OwotCQlpbnQgY2Fycmllcl9sb3c7Ci0KLQkJa3RpbWVfdCBnYXBfc3RhcnQ7Ci0JCXU2NCBnYXBfZHVyYXRpb247Ci0JCWJvb2wgZ2FwOwotCQlib29sIHNlbmRfdGltZW91dF9yZXBvcnRzOwotCi0JfSBsaXJjOwotfTsKLQotLyogbWFjcm9zIGZvciBJUiBkZWNvZGVycyAqLwotc3RhdGljIGlubGluZSBib29sIGdlcV9tYXJnaW4odW5zaWduZWQgZDEsIHVuc2lnbmVkIGQyLCB1bnNpZ25lZCBtYXJnaW4pCi17Ci0JcmV0dXJuIGQxID4gKGQyIC0gbWFyZ2luKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGVxX21hcmdpbih1bnNpZ25lZCBkMSwgdW5zaWduZWQgZDIsIHVuc2lnbmVkIG1hcmdpbikKLXsKLQlyZXR1cm4gKChkMSA+IChkMiAtIG1hcmdpbikpICYmIChkMSA8IChkMiArIG1hcmdpbikpKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGlzX3RyYW5zaXRpb24oc3RydWN0IGlyX3Jhd19ldmVudCAqeCwgc3RydWN0IGlyX3Jhd19ldmVudCAqeSkKLXsKLQlyZXR1cm4geC0+cHVsc2UgIT0geS0+cHVsc2U7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkZWNyZWFzZV9kdXJhdGlvbihzdHJ1Y3QgaXJfcmF3X2V2ZW50ICpldiwgdW5zaWduZWQgZHVyYXRpb24pCi17Ci0JaWYgKGR1cmF0aW9uID4gZXYtPmR1cmF0aW9uKQotCQlldi0+ZHVyYXRpb24gPSAwOwotCWVsc2UKLQkJZXYtPmR1cmF0aW9uIC09IGR1cmF0aW9uOwotfQotCi0vKiBSZXR1cm5zIHRydWUgaWYgZXZlbnQgaXMgbm9ybWFsIHB1bHNlL3NwYWNlIGV2ZW50ICovCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNfdGltaW5nX2V2ZW50KHN0cnVjdCBpcl9yYXdfZXZlbnQgZXYpCi17Ci0JcmV0dXJuICFldi5jYXJyaWVyX3JlcG9ydCAmJiAhZXYucmVzZXQ7Ci19Ci0KLSNkZWZpbmUgVE9fVVMoZHVyYXRpb24pCQkJRElWX1JPVU5EX0NMT1NFU1QoKGR1cmF0aW9uKSwgMTAwMCkKLSNkZWZpbmUgVE9fU1RSKGlzX3B1bHNlKQkJKChpc19wdWxzZSkgPyAicHVsc2UiIDogInNwYWNlIikKLS8qCi0gKiBSb3V0aW5lcyBmcm9tIGlyLXN5c2ZzLmMgLSBNZWFudCB0byBiZSBjYWxsZWQgb25seSBpbnRlcm5hbGx5IGluc2lkZQotICogaXItY29yZQotICovCi1pbnQgaXJfcmVnaXN0ZXJfaW5wdXQoc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2KTsKLQotaW50IGlyX3JlZ2lzdGVyX2NsYXNzKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2Rldik7Ci12b2lkIGlyX3VucmVnaXN0ZXJfY2xhc3Moc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2KTsKLQotLyoKLSAqIFJvdXRpbmVzIGZyb20gaXItcmF3LWV2ZW50LmMgdG8gYmUgdXNlZCBpbnRlcm5hbGx5IGFuZCBieSBkZWNvZGVycwotICovCi11NjQgaXJfcmF3X2dldF9hbGxvd2VkX3Byb3RvY29scyh2b2lkKTsKLWludCBpcl9yYXdfZXZlbnRfcmVnaXN0ZXIoc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2KTsKLXZvaWQgaXJfcmF3X2V2ZW50X3VucmVnaXN0ZXIoc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2KTsKLWludCBpcl9yYXdfaGFuZGxlcl9yZWdpc3RlcihzdHJ1Y3QgaXJfcmF3X2hhbmRsZXIgKmlyX3Jhd19oYW5kbGVyKTsKLXZvaWQgaXJfcmF3X2hhbmRsZXJfdW5yZWdpc3RlcihzdHJ1Y3QgaXJfcmF3X2hhbmRsZXIgKmlyX3Jhd19oYW5kbGVyKTsKLXZvaWQgaXJfcmF3X2luaXQodm9pZCk7Ci0KLWludCBpcl9yY21hcF9pbml0KHZvaWQpOwotdm9pZCBpcl9yY21hcF9jbGVhbnVwKHZvaWQpOwotLyoKLSAqIERlY29kZXIgaW5pdGlhbGl6YXRpb24gY29kZQotICoKLSAqIFRob3NlIGxvYWQgbG9naWMgYXJlIGNhbGxlZCBkdXJpbmcgaXItY29yZSBpbml0LCBhbmQgYXV0b21hdGljYWxseQotICogbG9hZHMgdGhlIGNvbXBpbGVkIGRlY29kZXJzIGZvciB0aGVpciB1c2FnZSB3aXRoIElSIHJhdyBldmVudHMKLSAqLwotCi0vKiBmcm9tIGlyLW5lYy1kZWNvZGVyLmMgKi8KLSNpZmRlZiBDT05GSUdfSVJfTkVDX0RFQ09ERVJfTU9EVUxFCi0jZGVmaW5lIGxvYWRfbmVjX2RlY29kZSgpCXJlcXVlc3RfbW9kdWxlKCJpci1uZWMtZGVjb2RlciIpCi0jZWxzZQotI2RlZmluZSBsb2FkX25lY19kZWNvZGUoKQkwCi0jZW5kaWYKLQotLyogZnJvbSBpci1yYzUtZGVjb2Rlci5jICovCi0jaWZkZWYgQ09ORklHX0lSX1JDNV9ERUNPREVSX01PRFVMRQotI2RlZmluZSBsb2FkX3JjNV9kZWNvZGUoKQlyZXF1ZXN0X21vZHVsZSgiaXItcmM1LWRlY29kZXIiKQotI2Vsc2UKLSNkZWZpbmUgbG9hZF9yYzVfZGVjb2RlKCkJMAotI2VuZGlmCi0KLS8qIGZyb20gaXItcmM2LWRlY29kZXIuYyAqLwotI2lmZGVmIENPTkZJR19JUl9SQzZfREVDT0RFUl9NT0RVTEUKLSNkZWZpbmUgbG9hZF9yYzZfZGVjb2RlKCkJcmVxdWVzdF9tb2R1bGUoImlyLXJjNi1kZWNvZGVyIikKLSNlbHNlCi0jZGVmaW5lIGxvYWRfcmM2X2RlY29kZSgpCTAKLSNlbmRpZgotCi0vKiBmcm9tIGlyLWp2Yy1kZWNvZGVyLmMgKi8KLSNpZmRlZiBDT05GSUdfSVJfSlZDX0RFQ09ERVJfTU9EVUxFCi0jZGVmaW5lIGxvYWRfanZjX2RlY29kZSgpCXJlcXVlc3RfbW9kdWxlKCJpci1qdmMtZGVjb2RlciIpCi0jZWxzZQotI2RlZmluZSBsb2FkX2p2Y19kZWNvZGUoKQkwCi0jZW5kaWYKLQotLyogZnJvbSBpci1zb255LWRlY29kZXIuYyAqLwotI2lmZGVmIENPTkZJR19JUl9TT05ZX0RFQ09ERVJfTU9EVUxFCi0jZGVmaW5lIGxvYWRfc29ueV9kZWNvZGUoKQlyZXF1ZXN0X21vZHVsZSgiaXItc29ueS1kZWNvZGVyIikKLSNlbHNlCi0jZGVmaW5lIGxvYWRfc29ueV9kZWNvZGUoKQkwCi0jZW5kaWYKLQotLyogZnJvbSBpci1saXJjLWNvZGVjLmMgKi8KLSNpZmRlZiBDT05GSUdfSVJfTElSQ19DT0RFQ19NT0RVTEUKLSNkZWZpbmUgbG9hZF9saXJjX2NvZGVjKCkJcmVxdWVzdF9tb2R1bGUoImlyLWxpcmMtY29kZWMiKQotI2Vsc2UKLSNkZWZpbmUgbG9hZF9saXJjX2NvZGVjKCkJMAotI2VuZGlmCi0KLQotI2VuZGlmIC8qIF9JUl9SQVdfRVZFTlQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvSVIvaXItZnVuY3Rpb25zLmMgYi9kcml2ZXJzL21lZGlhL0lSL2lyLWZ1bmN0aW9ucy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYjU5MWU0Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvSVIvaXItZnVuY3Rpb25zLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNTYgKzAsMCBAQAotLyoKLSAqCi0gKiBzb21lIGNvbW1vbiBzdHJ1Y3RzIGFuZCBmdW5jdGlvbnMgdG8gaGFuZGxlIGluZnJhcmVkIHJlbW90ZXMgdmlhCi0gKiBpbnB1dCBsYXllciAuLi4KLSAqCi0gKiAoYykgMjAwMyBHZXJkIEtub3JyIDxrcmF4ZWxAYnl0ZXNleC5vcmc+IFtTdVNFIExhYnNdCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KLSNpbmNsdWRlIDxtZWRpYS9pci1jb21tb24uaD4KLSNpbmNsdWRlICJpci1jb3JlLXByaXYuaCIKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotTU9EVUxFX0FVVEhPUigiR2VyZCBLbm9yciA8a3JheGVsQGJ5dGVzZXgub3JnPiBbU3VTRSBMYWJzXSIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1zdGF0aWMgaW50IHJlcGVhdCA9IDE7Ci1tb2R1bGVfcGFyYW0ocmVwZWF0LCBpbnQsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhyZXBlYXQsImF1dG8tcmVwZWF0IGZvciBJUiBrZXlzIChkZWZhdWx0OiBvbikiKTsKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotc3RhdGljIHZvaWQgaXJfaW5wdXRfa2V5X2V2ZW50KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgc3RydWN0IGlyX2lucHV0X3N0YXRlICppcikKLXsKLQlpZiAoS0VZX1JFU0VSVkVEID09IGlyLT5rZXljb2RlKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiB1bmtub3duIGtleToga2V5PTB4JTAyeCBkb3duPSVkXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBpci0+aXJfa2V5LCBpci0+a2V5cHJlc3NlZCk7Ci0JCXJldHVybjsKLQl9Ci0JSVJfZHByaW50aygxLCIlczoga2V5IGV2ZW50IGNvZGU9JWQgZG93bj0lZFxuIiwKLQkJZGV2LT5uYW1lLGlyLT5rZXljb2RlLGlyLT5rZXlwcmVzc2VkKTsKLQlpbnB1dF9yZXBvcnRfa2V5KGRldixpci0+a2V5Y29kZSxpci0+a2V5cHJlc3NlZCk7Ci0JaW5wdXRfc3luYyhkZXYpOwotfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1pbnQgaXJfaW5wdXRfaW5pdChzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIHN0cnVjdCBpcl9pbnB1dF9zdGF0ZSAqaXIsCi0JCSAgY29uc3QgdTY0IGlyX3R5cGUpCi17Ci0JaXItPmlyX3R5cGUgPSBpcl90eXBlOwotCi0JaWYgKHJlcGVhdCkKLQkJc2V0X2JpdChFVl9SRVAsIGRldi0+ZXZiaXQpOwotCi0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpcl9pbnB1dF9pbml0KTsKLQotCi12b2lkIGlyX2lucHV0X25va2V5KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgc3RydWN0IGlyX2lucHV0X3N0YXRlICppcikKLXsKLQlpZiAoaXItPmtleXByZXNzZWQpIHsKLQkJaXItPmtleXByZXNzZWQgPSAwOwotCQlpcl9pbnB1dF9rZXlfZXZlbnQoZGV2LGlyKTsKLQl9Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpcl9pbnB1dF9ub2tleSk7Ci0KLXZvaWQgaXJfaW5wdXRfa2V5ZG93bihzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIHN0cnVjdCBpcl9pbnB1dF9zdGF0ZSAqaXIsCi0JCSAgICAgIHUzMiBpcl9rZXkpCi17Ci0JdTMyIGtleWNvZGUgPSBpcl9nX2tleWNvZGVfZnJvbV90YWJsZShkZXYsIGlyX2tleSk7Ci0KLQlpZiAoaXItPmtleXByZXNzZWQgJiYgaXItPmtleWNvZGUgIT0ga2V5Y29kZSkgewotCQlpci0+a2V5cHJlc3NlZCA9IDA7Ci0JCWlyX2lucHV0X2tleV9ldmVudChkZXYsaXIpOwotCX0KLQlpZiAoIWlyLT5rZXlwcmVzc2VkKSB7Ci0JCWlyLT5pcl9rZXkgID0gaXJfa2V5OwotCQlpci0+a2V5Y29kZSA9IGtleWNvZGU7Ci0JCWlyLT5rZXlwcmVzc2VkID0gMTsKLQkJaXJfaW5wdXRfa2V5X2V2ZW50KGRldixpcik7Ci0JfQotfQotRVhQT1JUX1NZTUJPTF9HUEwoaXJfaW5wdXRfa2V5ZG93bik7Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKiBleHRyYWN0IG1hc2sgYml0cyBvdXQgb2YgZGF0YSBhbmQgcGFjayB0aGVtIGludG8gdGhlIHJlc3VsdCAqLwotdTMyIGlyX2V4dHJhY3RfYml0cyh1MzIgZGF0YSwgdTMyIG1hc2spCi17Ci0JdTMyIHZiaXQgPSAxLCB2YWx1ZSA9IDA7Ci0KLQlkbyB7Ci0JICAgIGlmIChtYXNrJjEpIHsKLQkJaWYgKGRhdGEmMSkKLQkJCXZhbHVlIHw9IHZiaXQ7Ci0JCXZiaXQ8PD0xOwotCSAgICB9Ci0JICAgIGRhdGE+Pj0xOwotCX0gd2hpbGUgKG1hc2s+Pj0xKTsKLQotCXJldHVybiB2YWx1ZTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGlyX2V4dHJhY3RfYml0cyk7Ci0KLXN0YXRpYyBpbnQgaW5saW5lIGdldGJpdCh1MzIgKnNhbXBsZXMsIGludCBiaXQpCi17Ci0JcmV0dXJuIChzYW1wbGVzW2JpdC8zMl0gJiAoMSA8PCAoMzEtKGJpdCUzMikpKSkgPyAxIDogMDsKLX0KLQotLyogc3VtcCByYXcgc2FtcGxlcyBmb3IgdmlzdWFsIGRlYnVnZ2luZyA7KSAqLwotaW50IGlyX2R1bXBfc2FtcGxlcyh1MzIgKnNhbXBsZXMsIGludCBjb3VudCkKLXsKLQlpbnQgaSwgYml0LCBzdGFydDsKLQotCXByaW50ayhLRVJOX0RFQlVHICJpciBzYW1wbGVzOiAiKTsKLQlzdGFydCA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IGNvdW50ICogMzI7IGkrKykgewotCQliaXQgPSBnZXRiaXQoc2FtcGxlcyxpKTsKLQkJaWYgKGJpdCkKLQkJCXN0YXJ0ID0gMTsKLQkJaWYgKDAgPT0gc3RhcnQpCi0JCQljb250aW51ZTsKLQkJcHJpbnRrKCIlcyIsIGJpdCA/ICIjIiA6ICJfIik7Ci0JfQotCXByaW50aygiXG4iKTsKLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGlyX2R1bXBfc2FtcGxlcyk7Ci0KLS8qIGRlY29kZSByYXcgc2FtcGxlcywgcHVsc2UgZGlzdGFuY2UgY29kaW5nIHVzZWQgYnkgTkVDIHJlbW90ZXMgKi8KLWludCBpcl9kZWNvZGVfcHVsc2VkaXN0YW5jZSh1MzIgKnNhbXBsZXMsIGludCBjb3VudCwgaW50IGxvdywgaW50IGhpZ2gpCi17Ci0JaW50IGksbGFzdCxiaXQsbGVuOwotCXUzMiBjdXJCaXQ7Ci0JdTMyIHZhbHVlOwotCi0JLyogZmluZCBzdGFydCBidXJzdCAqLwotCWZvciAoaSA9IGxlbiA9IDA7IGkgPCBjb3VudCAqIDMyOyBpKyspIHsKLQkJYml0ID0gZ2V0Yml0KHNhbXBsZXMsaSk7Ci0JCWlmIChiaXQpIHsKLQkJCWxlbisrOwotCQl9IGVsc2UgewotCQkJaWYgKGxlbiA+PSAyOSkKLQkJCQlicmVhazsKLQkJCWxlbiA9IDA7Ci0JCX0KLQl9Ci0KLQkvKiBzdGFydCBidXJzdCB0byBzaG9ydCAqLwotCWlmIChsZW4gPCAyOSkKLQkJcmV0dXJuIDB4ZmZmZmZmZmY7Ci0KLQkvKiBmaW5kIHN0YXJ0IHNpbGVuY2UgKi8KLQlmb3IgKGxlbiA9IDA7IGkgPCBjb3VudCAqIDMyOyBpKyspIHsKLQkJYml0ID0gZ2V0Yml0KHNhbXBsZXMsaSk7Ci0JCWlmIChiaXQpIHsKLQkJCWJyZWFrOwotCQl9IGVsc2UgewotCQkJbGVuKys7Ci0JCX0KLQl9Ci0KLQkvKiBzaWxlbmNlIHRvIHNob3J0ICovCi0JaWYgKGxlbiA8IDcpCi0JCXJldHVybiAweGZmZmZmZmZmOwotCi0JLyogZ28gZGVjb2RpbmcgKi8KLQlsZW4gICA9IDA7Ci0JbGFzdCA9IDE7Ci0JdmFsdWUgPSAwOyBjdXJCaXQgPSAxOwotCWZvciAoOyBpIDwgY291bnQgKiAzMjsgaSsrKSB7Ci0JCWJpdCAgPSBnZXRiaXQoc2FtcGxlcyxpKTsKLQkJaWYgKGxhc3QpIHsKLQkJCWlmKGJpdCkgewotCQkJCWNvbnRpbnVlOwotCQkJfSBlbHNlIHsKLQkJCQlsZW4gPSAxOwotCQkJfQotCQl9IGVsc2UgewotCQkJaWYgKGJpdCkgewotCQkJCWlmIChsZW4gPiAobG93ICsgaGlnaCkgLzIpCi0JCQkJCXZhbHVlIHw9IGN1ckJpdDsKLQkJCQljdXJCaXQgPDw9IDE7Ci0JCQkJaWYgKGN1ckJpdCA9PSAxKQotCQkJCQlicmVhazsKLQkJCX0gZWxzZSB7Ci0JCQkJbGVuKys7Ci0JCQl9Ci0JCX0KLQkJbGFzdCA9IGJpdDsKLQl9Ci0KLQlyZXR1cm4gdmFsdWU7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpcl9kZWNvZGVfcHVsc2VkaXN0YW5jZSk7Ci0KLS8qIGRlY29kZSByYXcgc2FtcGxlcywgYmlwaGFzZSBjb2RpbmcsIHVzZWQgYnkgcmM1IGZvciBleGFtcGxlICovCi1pbnQgaXJfZGVjb2RlX2JpcGhhc2UodTMyICpzYW1wbGVzLCBpbnQgY291bnQsIGludCBsb3csIGludCBoaWdoKQotewotCWludCBpLGxhc3QsYml0LGxlbixmbGlwczsKLQl1MzIgdmFsdWU7Ci0KLQkvKiBmaW5kIHN0YXJ0IGJpdCAoMSkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgewotCQliaXQgPSBnZXRiaXQoc2FtcGxlcyxpKTsKLQkJaWYgKGJpdCkKLQkJCWJyZWFrOwotCX0KLQotCS8qIGdvIGRlY29kaW5nICovCi0JbGVuICAgPSAwOwotCWZsaXBzID0gMDsKLQl2YWx1ZSA9IDE7Ci0JZm9yICg7IGkgPCBjb3VudCAqIDMyOyBpKyspIHsKLQkJaWYgKGxlbiA+IGhpZ2gpCi0JCQlicmVhazsKLQkJaWYgKGZsaXBzID4gMSkKLQkJCWJyZWFrOwotCQlsYXN0ID0gYml0OwotCQliaXQgID0gZ2V0Yml0KHNhbXBsZXMsaSk7Ci0JCWlmIChsYXN0ID09IGJpdCkgewotCQkJbGVuKys7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAobGVuIDwgbG93KSB7Ci0JCQlsZW4rKzsKLQkJCWZsaXBzKys7Ci0JCQljb250aW51ZTsKLQkJfQotCQl2YWx1ZSA8PD0gMTsKLQkJdmFsdWUgfD0gYml0OwotCQlmbGlwcyA9IDA7Ci0JCWxlbiAgID0gMTsKLQl9Ci0JcmV0dXJuIHZhbHVlOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoaXJfZGVjb2RlX2JpcGhhc2UpOwotCi0vKiBSQzUgZGVjb2Rpbmcgc3R1ZmYsIG1vdmVkIGZyb20gYnR0di1pbnB1dC5jIHRvIHNoYXJlIGl0IHdpdGgKLSAqIHNhYTcxMzQgKi8KLQotLyogZGVjb2RlIHJhdyBiaXQgcGF0dGVybiB0byBSQzUgY29kZSAqLwotdTMyIGlyX3JjNV9kZWNvZGUodW5zaWduZWQgaW50IGNvZGUpCi17Ci0JdW5zaWduZWQgaW50IG9yZ19jb2RlID0gY29kZTsKLQl1bnNpZ25lZCBpbnQgcGFpcjsKLQl1bnNpZ25lZCBpbnQgcmM1ID0gMDsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCAxNDsgKytpKSB7Ci0JCXBhaXIgPSBjb2RlICYgMHgzOwotCQljb2RlID4+PSAyOwotCi0JCXJjNSA8PD0gMTsKLQkJc3dpdGNoIChwYWlyKSB7Ci0JCWNhc2UgMDoKLQkJY2FzZSAyOgotCQkJYnJlYWs7Ci0JCWNhc2UgMToKLQkJCXJjNSB8PSAxOwotCQkJYnJlYWs7Ci0JCWNhc2UgMzoKLQkJCUlSX2RwcmludGsoMSwgImlyLWNvbW1vbjogaXJfcmM1X2RlY29kZSgleCkgYmFkIGNvZGVcbiIsIG9yZ19jb2RlKTsKLQkJCXJldHVybiAwOwotCQl9Ci0JfQotCUlSX2RwcmludGsoMSwgImlyLWNvbW1vbjogY29kZT0leCwgcmM1PSV4LCBzdGFydD0leCwgdG9nZ2xlPSV4LCBhZGRyZXNzPSV4LCAiCi0JCSJpbnN0cj0leFxuIiwgcmM1LCBvcmdfY29kZSwgUkM1X1NUQVJUKHJjNSksCi0JCVJDNV9UT0dHTEUocmM1KSwgUkM1X0FERFIocmM1KSwgUkM1X0lOU1RSKHJjNSkpOwotCXJldHVybiByYzU7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpcl9yYzVfZGVjb2RlKTsKLQotdm9pZCBpcl9yYzVfdGltZXJfZW5kKHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQlzdHJ1Y3QgY2FyZF9pciAqaXIgPSAoc3RydWN0IGNhcmRfaXIgKilkYXRhOwotCXN0cnVjdCB0aW1ldmFsIHR2OwotCXVuc2lnbmVkIGxvbmcgY3VycmVudF9qaWZmaWVzLCB0aW1lb3V0OwotCXUzMiBnYXA7Ci0JdTMyIHJjNSA9IDA7Ci0KLQkvKiBnZXQgdGltZSAqLwotCWN1cnJlbnRfamlmZmllcyA9IGppZmZpZXM7Ci0JZG9fZ2V0dGltZW9mZGF5KCZ0dik7Ci0KLQkvKiBhdm9pZCBvdmVyZmxvdyB3aXRoIGdhcCA+MXMgKi8KLQlpZiAodHYudHZfc2VjIC0gaXItPmJhc2VfdGltZS50dl9zZWMgPiAxKSB7Ci0JCWdhcCA9IDIwMDAwMDsKLQl9IGVsc2UgewotCQlnYXAgPSAxMDAwMDAwICogKHR2LnR2X3NlYyAtIGlyLT5iYXNlX3RpbWUudHZfc2VjKSArCi0JCSAgICB0di50dl91c2VjIC0gaXItPmJhc2VfdGltZS50dl91c2VjOwotCX0KLQotCS8qIHNpZ25hbCB3ZSdyZSByZWFkeSB0byBzdGFydCBhIG5ldyBjb2RlICovCi0JaXItPmFjdGl2ZSA9IDA7Ci0KLQkvKiBBbGxvdyBzb21lIHRpbWVyIGppdHRlciAoUkM1IGlzIH4yNG1zIGFueXdheSBzbyB0aGlzIGlzIG9rKSAqLwotCWlmIChnYXAgPCAyODAwMCkgewotCQlJUl9kcHJpbnRrKDEsICJpci1jb21tb246IHNwdXJpb3VzIHRpbWVyX2VuZFxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAoaXItPmxhc3RfYml0IDwgMjApIHsKLQkJLyogaWdub3JlIHNwdXJpb3VzIGNvZGVzIChjYXVzZWQgYnkgbGlnaHQvb3RoZXIgcmVtb3RlcykgKi8KLQkJSVJfZHByaW50aygxLCAiaXItY29tbW9uOiBzaG9ydCBjb2RlOiAleFxuIiwgaXItPmNvZGUpOwotCX0gZWxzZSB7Ci0JCWlyLT5jb2RlID0gKGlyLT5jb2RlIDw8IGlyLT5zaGlmdF9ieSkgfCAxOwotCQlyYzUgPSBpcl9yYzVfZGVjb2RlKGlyLT5jb2RlKTsKLQotCQkvKiB0d28gc3RhcnQgYml0cz8gKi8KLQkJaWYgKFJDNV9TVEFSVChyYzUpICE9IGlyLT5zdGFydCkgewotCQkJSVJfZHByaW50aygxLCAiaXItY29tbW9uOiByYzUgc3RhcnQgYml0cyBpbnZhbGlkOiAldVxuIiwgUkM1X1NUQVJUKHJjNSkpOwotCi0JCQkvKiByaWdodCBhZGRyZXNzPyAqLwotCQl9IGVsc2UgaWYgKFJDNV9BRERSKHJjNSkgPT0gaXItPmFkZHIpIHsKLQkJCXUzMiB0b2dnbGUgPSBSQzVfVE9HR0xFKHJjNSk7Ci0JCQl1MzIgaW5zdHIgPSBSQzVfSU5TVFIocmM1KTsKLQotCQkJLyogR29vZCBjb2RlLCBkZWNpZGUgaWYgcmVwZWF0L3JlcHJlc3MgKi8KLQkJCWlmICh0b2dnbGUgIT0gUkM1X1RPR0dMRShpci0+bGFzdF9yYzUpIHx8Ci0JCQkgICAgaW5zdHIgIT0gUkM1X0lOU1RSKGlyLT5sYXN0X3JjNSkpIHsKLQkJCQlJUl9kcHJpbnRrKDEsICJpci1jb21tb246IGluc3RydWN0aW9uICV4LCB0b2dnbGUgJXhcbiIsIGluc3RyLAotCQkJCQl0b2dnbGUpOwotCQkJCWlyX2lucHV0X25va2V5KGlyLT5kZXYsICZpci0+aXIpOwotCQkJCWlyX2lucHV0X2tleWRvd24oaXItPmRldiwgJmlyLT5pciwgaW5zdHIpOwotCQkJfQotCi0JCQkvKiBTZXQvcmVzZXQga2V5LXVwIHRpbWVyICovCi0JCQl0aW1lb3V0ID0gY3VycmVudF9qaWZmaWVzICsKLQkJCQkgIG1zZWNzX3RvX2ppZmZpZXMoaXItPnJjNV9rZXlfdGltZW91dCk7Ci0JCQltb2RfdGltZXIoJmlyLT50aW1lcl9rZXl1cCwgdGltZW91dCk7Ci0KLQkJCS8qIFNhdmUgY29kZSBmb3IgcmVwZWF0IHRlc3QgKi8KLQkJCWlyLT5sYXN0X3JjNSA9IHJjNTsKLQkJfQotCX0KLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGlyX3JjNV90aW1lcl9lbmQpOwotCi12b2lkIGlyX3JjNV90aW1lcl9rZXl1cCh1bnNpZ25lZCBsb25nIGRhdGEpCi17Ci0Jc3RydWN0IGNhcmRfaXIgKmlyID0gKHN0cnVjdCBjYXJkX2lyICopZGF0YTsKLQotCUlSX2RwcmludGsoMSwgImlyLWNvbW1vbjoga2V5IHJlbGVhc2VkXG4iKTsKLQlpcl9pbnB1dF9ub2tleShpci0+ZGV2LCAmaXItPmlyKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGlyX3JjNV90aW1lcl9rZXl1cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL0lSL2lyLWp2Yy1kZWNvZGVyLmMgYi9kcml2ZXJzL21lZGlhL0lSL2lyLWp2Yy1kZWNvZGVyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzZGNhNmUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS9JUi9pci1qdmMtZGVjb2Rlci5jCisrKyAvZGV2L251bGwKQEAgLTEsMTk5ICswLDAgQEAKLS8qIGlyLWp2Yy1kZWNvZGVyLmMgLSBoYW5kbGUgSlZDIElSIFB1bHNlL1NwYWNlIHByb3RvY29sCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDEwIGJ5IERhdmlkIEjDpHJkZW1hbiA8ZGF2aWRAaGFyZGVtYW4ubnU+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9iaXRyZXYuaD4KLSNpbmNsdWRlICJpci1jb3JlLXByaXYuaCIKLQotI2RlZmluZSBKVkNfTkJJVFMJCTE2CQkvKiBkZXYoOCkgKyBmdW5jKDgpICovCi0jZGVmaW5lIEpWQ19VTklUCQk1MjUwMDAJCS8qIG5zICovCi0jZGVmaW5lIEpWQ19IRUFERVJfUFVMU0UJKDE2ICogSlZDX1VOSVQpIC8qIGxhY2sgb2YgaGVhZGVyIC0+IHJlcGVhdCAqLwotI2RlZmluZSBKVkNfSEVBREVSX1NQQUNFCSg4ICAqIEpWQ19VTklUKQotI2RlZmluZSBKVkNfQklUX1BVTFNFCQkoMSAgKiBKVkNfVU5JVCkKLSNkZWZpbmUgSlZDX0JJVF8wX1NQQUNFCQkoMSAgKiBKVkNfVU5JVCkKLSNkZWZpbmUgSlZDX0JJVF8xX1NQQUNFCQkoMyAgKiBKVkNfVU5JVCkKLSNkZWZpbmUgSlZDX1RSQUlMRVJfUFVMU0UJKDEgICogSlZDX1VOSVQpCi0jZGVmaW5lCUpWQ19UUkFJTEVSX1NQQUNFCSgzNSAqIEpWQ19VTklUKQotCi1lbnVtIGp2Y19zdGF0ZSB7Ci0JU1RBVEVfSU5BQ1RJVkUsCi0JU1RBVEVfSEVBREVSX1NQQUNFLAotCVNUQVRFX0JJVF9QVUxTRSwKLQlTVEFURV9CSVRfU1BBQ0UsCi0JU1RBVEVfVFJBSUxFUl9QVUxTRSwKLQlTVEFURV9UUkFJTEVSX1NQQUNFLAotCVNUQVRFX0NIRUNLX1JFUEVBVCwKLX07Ci0KLS8qKgotICogaXJfanZjX2RlY29kZSgpIC0gRGVjb2RlIG9uZSBKVkMgcHVsc2Ugb3Igc3BhY2UKLSAqIEBpbnB1dF9kZXY6CXRoZSBzdHJ1Y3QgaW5wdXRfZGV2IGRlc2NyaXB0b3Igb2YgdGhlIGRldmljZQotICogQGR1cmF0aW9uOiAgIHRoZSBzdHJ1Y3QgaXJfcmF3X2V2ZW50IGRlc2NyaXB0b3Igb2YgdGhlIHB1bHNlL3NwYWNlCi0gKgotICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIC1FSU5WQUwgaWYgdGhlIHB1bHNlIHZpb2xhdGVzIHRoZSBzdGF0ZSBtYWNoaW5lCi0gKi8KLXN0YXRpYyBpbnQgaXJfanZjX2RlY29kZShzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYsIHN0cnVjdCBpcl9yYXdfZXZlbnQgZXYpCi17Ci0Jc3RydWN0IGlyX2lucHV0X2RldiAqaXJfZGV2ID0gaW5wdXRfZ2V0X2RydmRhdGEoaW5wdXRfZGV2KTsKLQlzdHJ1Y3QganZjX2RlYyAqZGF0YSA9ICZpcl9kZXYtPnJhdy0+anZjOwotCi0JaWYgKCEoaXJfZGV2LT5yYXctPmVuYWJsZWRfcHJvdG9jb2xzICYgSVJfVFlQRV9KVkMpKQotCQlyZXR1cm4gMDsKLQotCWlmICghaXNfdGltaW5nX2V2ZW50KGV2KSkgewotCQlpZiAoZXYucmVzZXQpCi0JCQlkYXRhLT5zdGF0ZSA9IFNUQVRFX0lOQUNUSVZFOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAoIWdlcV9tYXJnaW4oZXYuZHVyYXRpb24sIEpWQ19VTklULCBKVkNfVU5JVCAvIDIpKQotCQlnb3RvIG91dDsKLQotCUlSX2RwcmludGsoMiwgIkpWQyBkZWNvZGUgc3RhcnRlZCBhdCBzdGF0ZSAlZCAoJXV1cyAlcylcbiIsCi0JCSAgIGRhdGEtPnN0YXRlLCBUT19VUyhldi5kdXJhdGlvbiksIFRPX1NUUihldi5wdWxzZSkpOwotCi1hZ2FpbjoKLQlzd2l0Y2ggKGRhdGEtPnN0YXRlKSB7Ci0KLQljYXNlIFNUQVRFX0lOQUNUSVZFOgotCQlpZiAoIWV2LnB1bHNlKQotCQkJYnJlYWs7Ci0KLQkJaWYgKCFlcV9tYXJnaW4oZXYuZHVyYXRpb24sIEpWQ19IRUFERVJfUFVMU0UsIEpWQ19VTklUIC8gMikpCi0JCQlicmVhazsKLQotCQlkYXRhLT5jb3VudCA9IDA7Ci0JCWRhdGEtPmZpcnN0ID0gdHJ1ZTsKLQkJZGF0YS0+dG9nZ2xlID0gIWRhdGEtPnRvZ2dsZTsKLQkJZGF0YS0+c3RhdGUgPSBTVEFURV9IRUFERVJfU1BBQ0U7Ci0JCXJldHVybiAwOwotCi0JY2FzZSBTVEFURV9IRUFERVJfU1BBQ0U6Ci0JCWlmIChldi5wdWxzZSkKLQkJCWJyZWFrOwotCi0JCWlmICghZXFfbWFyZ2luKGV2LmR1cmF0aW9uLCBKVkNfSEVBREVSX1NQQUNFLCBKVkNfVU5JVCAvIDIpKQotCQkJYnJlYWs7Ci0KLQkJZGF0YS0+c3RhdGUgPSBTVEFURV9CSVRfUFVMU0U7Ci0JCXJldHVybiAwOwotCi0JY2FzZSBTVEFURV9CSVRfUFVMU0U6Ci0JCWlmICghZXYucHVsc2UpCi0JCQlicmVhazsKLQotCQlpZiAoIWVxX21hcmdpbihldi5kdXJhdGlvbiwgSlZDX0JJVF9QVUxTRSwgSlZDX1VOSVQgLyAyKSkKLQkJCWJyZWFrOwotCi0JCWRhdGEtPnN0YXRlID0gU1RBVEVfQklUX1NQQUNFOwotCQlyZXR1cm4gMDsKLQotCWNhc2UgU1RBVEVfQklUX1NQQUNFOgotCQlpZiAoZXYucHVsc2UpCi0JCQlicmVhazsKLQotCQlkYXRhLT5iaXRzIDw8PSAxOwotCQlpZiAoZXFfbWFyZ2luKGV2LmR1cmF0aW9uLCBKVkNfQklUXzFfU1BBQ0UsIEpWQ19VTklUIC8gMikpIHsKLQkJCWRhdGEtPmJpdHMgfD0gMTsKLQkJCWRlY3JlYXNlX2R1cmF0aW9uKCZldiwgSlZDX0JJVF8xX1NQQUNFKTsKLQkJfSBlbHNlIGlmIChlcV9tYXJnaW4oZXYuZHVyYXRpb24sIEpWQ19CSVRfMF9TUEFDRSwgSlZDX1VOSVQgLyAyKSkKLQkJCWRlY3JlYXNlX2R1cmF0aW9uKCZldiwgSlZDX0JJVF8wX1NQQUNFKTsKLQkJZWxzZQotCQkJYnJlYWs7Ci0JCWRhdGEtPmNvdW50Kys7Ci0KLQkJaWYgKGRhdGEtPmNvdW50ID09IEpWQ19OQklUUykKLQkJCWRhdGEtPnN0YXRlID0gU1RBVEVfVFJBSUxFUl9QVUxTRTsKLQkJZWxzZQotCQkJZGF0YS0+c3RhdGUgPSBTVEFURV9CSVRfUFVMU0U7Ci0JCXJldHVybiAwOwotCi0JY2FzZSBTVEFURV9UUkFJTEVSX1BVTFNFOgotCQlpZiAoIWV2LnB1bHNlKQotCQkJYnJlYWs7Ci0KLQkJaWYgKCFlcV9tYXJnaW4oZXYuZHVyYXRpb24sIEpWQ19UUkFJTEVSX1BVTFNFLCBKVkNfVU5JVCAvIDIpKQotCQkJYnJlYWs7Ci0KLQkJZGF0YS0+c3RhdGUgPSBTVEFURV9UUkFJTEVSX1NQQUNFOwotCQlyZXR1cm4gMDsKLQotCWNhc2UgU1RBVEVfVFJBSUxFUl9TUEFDRToKLQkJaWYgKGV2LnB1bHNlKQotCQkJYnJlYWs7Ci0KLQkJaWYgKCFnZXFfbWFyZ2luKGV2LmR1cmF0aW9uLCBKVkNfVFJBSUxFUl9TUEFDRSwgSlZDX1VOSVQgLyAyKSkKLQkJCWJyZWFrOwotCi0JCWlmIChkYXRhLT5maXJzdCkgewotCQkJdTMyIHNjYW5jb2RlOwotCQkJc2NhbmNvZGUgPSAoYml0cmV2OCgoZGF0YS0+Yml0cyA+PiA4KSAmIDB4ZmYpIDw8IDgpIHwKLQkJCQkgICAoYml0cmV2OCgoZGF0YS0+Yml0cyA+PiAwKSAmIDB4ZmYpIDw8IDApOwotCQkJSVJfZHByaW50aygxLCAiSlZDIHNjYW5jb2RlIDB4JTA0eFxuIiwgc2NhbmNvZGUpOwotCQkJaXJfa2V5ZG93bihpbnB1dF9kZXYsIHNjYW5jb2RlLCBkYXRhLT50b2dnbGUpOwotCQkJZGF0YS0+Zmlyc3QgPSBmYWxzZTsKLQkJCWRhdGEtPm9sZF9iaXRzID0gZGF0YS0+Yml0czsKLQkJfSBlbHNlIGlmIChkYXRhLT5iaXRzID09IGRhdGEtPm9sZF9iaXRzKSB7Ci0JCQlJUl9kcHJpbnRrKDEsICJKVkMgcmVwZWF0XG4iKTsKLQkJCWlyX3JlcGVhdChpbnB1dF9kZXYpOwotCQl9IGVsc2UgewotCQkJSVJfZHByaW50aygxLCAiSlZDIGludmFsaWQgcmVwZWF0IG1zZ1xuIik7Ci0JCQlicmVhazsKLQkJfQotCi0JCWRhdGEtPmNvdW50ID0gMDsKLQkJZGF0YS0+c3RhdGUgPSBTVEFURV9DSEVDS19SRVBFQVQ7Ci0JCXJldHVybiAwOwotCi0JY2FzZSBTVEFURV9DSEVDS19SRVBFQVQ6Ci0JCWlmICghZXYucHVsc2UpCi0JCQlicmVhazsKLQotCQlpZiAoZXFfbWFyZ2luKGV2LmR1cmF0aW9uLCBKVkNfSEVBREVSX1BVTFNFLCBKVkNfVU5JVCAvIDIpKQotCQkJZGF0YS0+c3RhdGUgPSBTVEFURV9JTkFDVElWRTsKLSAgZWxzZQotCQkJZGF0YS0+c3RhdGUgPSBTVEFURV9CSVRfUFVMU0U7Ci0JCWdvdG8gYWdhaW47Ci0JfQotCi1vdXQ6Ci0JSVJfZHByaW50aygxLCAiSlZDIGRlY29kZSBmYWlsZWQgYXQgc3RhdGUgJWQgKCV1dXMgJXMpXG4iLAotCQkgICBkYXRhLT5zdGF0ZSwgVE9fVVMoZXYuZHVyYXRpb24pLCBUT19TVFIoZXYucHVsc2UpKTsKLQlkYXRhLT5zdGF0ZSA9IFNUQVRFX0lOQUNUSVZFOwotCXJldHVybiAtRUlOVkFMOwotfQotCi1zdGF0aWMgc3RydWN0IGlyX3Jhd19oYW5kbGVyIGp2Y19oYW5kbGVyID0gewotCS5wcm90b2NvbHMJPSBJUl9UWVBFX0pWQywKLQkuZGVjb2RlCQk9IGlyX2p2Y19kZWNvZGUsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBpcl9qdmNfZGVjb2RlX2luaXQodm9pZCkKLXsKLQlpcl9yYXdfaGFuZGxlcl9yZWdpc3RlcigmanZjX2hhbmRsZXIpOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiSVIgSlZDIHByb3RvY29sIGhhbmRsZXIgaW5pdGlhbGl6ZWRcbiIpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgaXJfanZjX2RlY29kZV9leGl0KHZvaWQpCi17Ci0JaXJfcmF3X2hhbmRsZXJfdW5yZWdpc3RlcigmanZjX2hhbmRsZXIpOwotfQotCi1tb2R1bGVfaW5pdChpcl9qdmNfZGVjb2RlX2luaXQpOwotbW9kdWxlX2V4aXQoaXJfanZjX2RlY29kZV9leGl0KTsKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiRGF2aWQgSMOkcmRlbWFuIDxkYXZpZEBoYXJkZW1hbi5udT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiSlZDIElSIHByb3RvY29sIGRlY29kZXIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvSVIvaXIta2V5dGFibGUuYyBiL2RyaXZlcnMvbWVkaWEvSVIvaXIta2V5dGFibGUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjYwMTA3Yy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL0lSL2lyLWtleXRhYmxlLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3MTAgKzAsMCBAQAotLyogaXIta2V5dGFibGUuYyAtIGhhbmRsZSBJUiBzY2FuY29kZS0+a2V5Y29kZSB0YWJsZXMKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgYnkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0KLQotI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgImlyLWNvcmUtcHJpdi5oIgotCi0vKiBTaXplcyBhcmUgaW4gYnl0ZXMsIDI1NiBieXRlcyBhbGxvd3MgZm9yIDMyIGVudHJpZXMgb24geDY0ICovCi0jZGVmaW5lIElSX1RBQl9NSU5fU0laRQkyNTYKLSNkZWZpbmUgSVJfVEFCX01BWF9TSVpFCTgxOTIKLQotLyogRklYTUU6IElSX0tFWVBSRVNTX1RJTUVPVVQgc2hvdWxkIGJlIHByb3RvY29sIHNwZWNpZmljICovCi0jZGVmaW5lIElSX0tFWVBSRVNTX1RJTUVPVVQgMjUwCi0KLS8qKgotICogaXJfY3JlYXRlX3RhYmxlKCkgLSBpbml0aWFsaXplcyBhIHNjYW5jb2RlIHRhYmxlCi0gKiBAcmNfdGFiOgl0aGUgaXJfc2NhbmNvZGVfdGFibGUgdG8gaW5pdGlhbGl6ZQotICogQG5hbWU6CW5hbWUgdG8gYXNzaWduIHRvIHRoZSB0YWJsZQotICogQGlyX3R5cGU6CWlyIHR5cGUgdG8gYXNzaWduIHRvIHRoZSBuZXcgdGFibGUKLSAqIEBzaXplOglpbml0aWFsIHNpemUgb2YgdGhlIHRhYmxlCi0gKiBAcmV0dXJuOgl6ZXJvIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlCi0gKgotICogVGhpcyByb3V0aW5lIHdpbGwgaW5pdGlhbGl6ZSB0aGUgaXJfc2NhbmNvZGVfdGFibGUgYW5kIHdpbGwgYWxsb2NhdGUKLSAqIG1lbW9yeSB0byBob2xkIGF0IGxlYXN0IHRoZSBzcGVjaWZpZWQgbnVtYmVyIGVsZW1lbnRzLgotICovCi1zdGF0aWMgaW50IGlyX2NyZWF0ZV90YWJsZShzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgKnJjX3RhYiwKLQkJCSAgIGNvbnN0IGNoYXIgKm5hbWUsIHU2NCBpcl90eXBlLCBzaXplX3Qgc2l6ZSkKLXsKLQlyY190YWItPm5hbWUgPSBuYW1lOwotCXJjX3RhYi0+aXJfdHlwZSA9IGlyX3R5cGU7Ci0JcmNfdGFiLT5hbGxvYyA9IHJvdW5kdXBfcG93X29mX3R3byhzaXplICogc2l6ZW9mKHN0cnVjdCBpcl9zY2FuY29kZSkpOwotCXJjX3RhYi0+c2l6ZSA9IHJjX3RhYi0+YWxsb2MgLyBzaXplb2Yoc3RydWN0IGlyX3NjYW5jb2RlKTsKLQlyY190YWItPnNjYW4gPSBrbWFsbG9jKHJjX3RhYi0+YWxsb2MsIEdGUF9LRVJORUwpOwotCWlmICghcmNfdGFiLT5zY2FuKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCUlSX2RwcmludGsoMSwgIkFsbG9jYXRlZCBzcGFjZSBmb3IgJXUga2V5Y29kZSBlbnRyaWVzICgldSBieXRlcylcbiIsCi0JCSAgIHJjX3RhYi0+c2l6ZSwgcmNfdGFiLT5hbGxvYyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogaXJfZnJlZV90YWJsZSgpIC0gZnJlZXMgbWVtb3J5IGFsbG9jYXRlZCBieSBhIHNjYW5jb2RlIHRhYmxlCi0gKiBAcmNfdGFiOgl0aGUgdGFibGUgd2hvc2UgbWFwcGluZ3MgbmVlZCB0byBiZSBmcmVlZAotICoKLSAqIFRoaXMgcm91dGluZSB3aWxsIGZyZWUgbWVtb3J5IGFsbG9jdGFlZCBmb3Iga2V5IG1hcHBpbmdzIHVzZWQgYnkgZ2l2ZW4KLSAqIHNjYW5jb2RlIHRhYmxlLgotICovCi1zdGF0aWMgdm9pZCBpcl9mcmVlX3RhYmxlKHN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSAqcmNfdGFiKQotewotCXJjX3RhYi0+c2l6ZSA9IDA7Ci0Ja2ZyZWUocmNfdGFiLT5zY2FuKTsKLQlyY190YWItPnNjYW4gPSBOVUxMOwotfQotCi0vKioKLSAqIGlyX3Jlc2l6ZV90YWJsZSgpIC0gcmVzaXplcyBhIHNjYW5jb2RlIHRhYmxlIGlmIG5lY2Vzc2FyeQotICogQHJjX3RhYjoJdGhlIGlyX3NjYW5jb2RlX3RhYmxlIHRvIHJlc2l6ZQotICogQGdmcF9mbGFnczoJZ2ZwIGZsYWdzIHRvIHVzZSB3aGVuIGFsbG9jYXRpbmcgbWVtb3J5Ci0gKiBAcmV0dXJuOgl6ZXJvIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlCi0gKgotICogVGhpcyByb3V0aW5lIHdpbGwgc2hyaW5rIHRoZSBpcl9zY2FuY29kZV90YWJsZSBpZiBpdCBoYXMgbG90cyBvZgotICogdW51c2VkIGVudHJpZXMgYW5kIGdyb3cgaXQgaWYgaXQgaXMgZnVsbC4KLSAqLwotc3RhdGljIGludCBpcl9yZXNpemVfdGFibGUoc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlICpyY190YWIsIGdmcF90IGdmcF9mbGFncykKLXsKLQl1bnNpZ25lZCBpbnQgb2xkYWxsb2MgPSByY190YWItPmFsbG9jOwotCXVuc2lnbmVkIGludCBuZXdhbGxvYyA9IG9sZGFsbG9jOwotCXN0cnVjdCBpcl9zY2FuY29kZSAqb2xkc2NhbiA9IHJjX3RhYi0+c2NhbjsKLQlzdHJ1Y3QgaXJfc2NhbmNvZGUgKm5ld3NjYW47Ci0KLQlpZiAocmNfdGFiLT5zaXplID09IHJjX3RhYi0+bGVuKSB7Ci0JCS8qIEFsbCBlbnRyaWVzIGluIHVzZSAtPiBncm93IGtleXRhYmxlICovCi0JCWlmIChyY190YWItPmFsbG9jID49IElSX1RBQl9NQVhfU0laRSkKLQkJCXJldHVybiAtRU5PTUVNOwotCi0JCW5ld2FsbG9jICo9IDI7Ci0JCUlSX2RwcmludGsoMSwgIkdyb3dpbmcgdGFibGUgdG8gJXUgYnl0ZXNcbiIsIG5ld2FsbG9jKTsKLQl9Ci0KLQlpZiAoKHJjX3RhYi0+bGVuICogMyA8IHJjX3RhYi0+c2l6ZSkgJiYgKG9sZGFsbG9jID4gSVJfVEFCX01JTl9TSVpFKSkgewotCQkvKiBMZXNzIHRoYW4gMS8zIG9mIGVudHJpZXMgaW4gdXNlIC0+IHNocmluayBrZXl0YWJsZSAqLwotCQluZXdhbGxvYyAvPSAyOwotCQlJUl9kcHJpbnRrKDEsICJTaHJpbmtpbmcgdGFibGUgdG8gJXUgYnl0ZXNcbiIsIG5ld2FsbG9jKTsKLQl9Ci0KLQlpZiAobmV3YWxsb2MgPT0gb2xkYWxsb2MpCi0JCXJldHVybiAwOwotCi0JbmV3c2NhbiA9IGttYWxsb2MobmV3YWxsb2MsIGdmcF9mbGFncyk7Ci0JaWYgKCFuZXdzY2FuKSB7Ci0JCUlSX2RwcmludGsoMSwgIkZhaWxlZCB0byBrbWFsbG9jICV1IGJ5dGVzXG4iLCBuZXdhbGxvYyk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCW1lbWNweShuZXdzY2FuLCByY190YWItPnNjYW4sIHJjX3RhYi0+bGVuICogc2l6ZW9mKHN0cnVjdCBpcl9zY2FuY29kZSkpOwotCXJjX3RhYi0+c2NhbiA9IG5ld3NjYW47Ci0JcmNfdGFiLT5hbGxvYyA9IG5ld2FsbG9jOwotCXJjX3RhYi0+c2l6ZSA9IHJjX3RhYi0+YWxsb2MgLyBzaXplb2Yoc3RydWN0IGlyX3NjYW5jb2RlKTsKLQlrZnJlZShvbGRzY2FuKTsKLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBpcl91cGRhdGVfbWFwcGluZygpIC0gc2V0IGEga2V5Y29kZSBpbiB0aGUgc2NhbmNvZGUtPmtleWNvZGUgdGFibGUKLSAqIEBkZXY6CXRoZSBzdHJ1Y3QgaW5wdXRfZGV2IGRldmljZSBkZXNjcmlwdG9yCi0gKiBAcmNfdGFiOglzY2FuY29kZSB0YWJsZSB0byBiZSBhZGp1c3RlZAotICogQGluZGV4OglpbmRleCBvZiB0aGUgbWFwcGluZyB0aGF0IG5lZWRzIHRvIGJlIHVwZGF0ZWQKLSAqIEBrZXljb2RlOgl0aGUgZGVzaXJlZCBrZXljb2RlCi0gKiBAcmV0dXJuOglwcmV2aW91cyBrZXljb2RlIGFzc2lnbmVkIHRvIHRoZSBtYXBwaW5nCi0gKgotICogVGhpcyByb3V0aW5lIGlzIHVzZWQgdG8gdXBkYXRlIHNjYW5jb2RlLT5rZXljb3BkZSBtYXBwaW5nIGF0IGdpdmVuCi0gKiBwb3NpdGlvbi4KLSAqLwotc3RhdGljIHVuc2lnbmVkIGludCBpcl91cGRhdGVfbWFwcGluZyhzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsCi0JCQkJICAgICAgc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlICpyY190YWIsCi0JCQkJICAgICAgdW5zaWduZWQgaW50IGluZGV4LAotCQkJCSAgICAgIHVuc2lnbmVkIGludCBuZXdfa2V5Y29kZSkKLXsKLQlpbnQgb2xkX2tleWNvZGUgPSByY190YWItPnNjYW5baW5kZXhdLmtleWNvZGU7Ci0JaW50IGk7Ci0KLQkvKiBEaWQgdGhlIHVzZXIgd2lzaCB0byByZW1vdmUgdGhlIG1hcHBpbmc/ICovCi0JaWYgKG5ld19rZXljb2RlID09IEtFWV9SRVNFUlZFRCB8fCBuZXdfa2V5Y29kZSA9PSBLRVlfVU5LTk9XTikgewotCQlJUl9kcHJpbnRrKDEsICIjJWQ6IERlbGV0aW5nIHNjYW4gMHglMDR4XG4iLAotCQkJICAgaW5kZXgsIHJjX3RhYi0+c2NhbltpbmRleF0uc2NhbmNvZGUpOwotCQlyY190YWItPmxlbi0tOwotCQltZW1tb3ZlKCZyY190YWItPnNjYW5baW5kZXhdLCAmcmNfdGFiLT5zY2FuW2luZGV4KyAxXSwKLQkJCShyY190YWItPmxlbiAtIGluZGV4KSAqIHNpemVvZihzdHJ1Y3QgaXJfc2NhbmNvZGUpKTsKLQl9IGVsc2UgewotCQlJUl9kcHJpbnRrKDEsICIjJWQ6ICVzIHNjYW4gMHglMDR4IHdpdGgga2V5IDB4JTA0eFxuIiwKLQkJCSAgIGluZGV4LAotCQkJICAgb2xkX2tleWNvZGUgPT0gS0VZX1JFU0VSVkVEID8gIk5ldyIgOiAiUmVwbGFjaW5nIiwKLQkJCSAgIHJjX3RhYi0+c2NhbltpbmRleF0uc2NhbmNvZGUsIG5ld19rZXljb2RlKTsKLQkJcmNfdGFiLT5zY2FuW2luZGV4XS5rZXljb2RlID0gbmV3X2tleWNvZGU7Ci0JCV9fc2V0X2JpdChuZXdfa2V5Y29kZSwgZGV2LT5rZXliaXQpOwotCX0KLQotCWlmIChvbGRfa2V5Y29kZSAhPSBLRVlfUkVTRVJWRUQpIHsKLQkJLyogQSBwcmV2aW91cyBtYXBwaW5nIHdhcyB1cGRhdGVkLi4uICovCi0JCV9fY2xlYXJfYml0KG9sZF9rZXljb2RlLCBkZXYtPmtleWJpdCk7Ci0JCS8qIC4uLiBidXQgYW5vdGhlciBzY2FuY29kZSBtaWdodCB1c2UgdGhlIHNhbWUga2V5Y29kZSAqLwotCQlmb3IgKGkgPSAwOyBpIDwgcmNfdGFiLT5sZW47IGkrKykgewotCQkJaWYgKHJjX3RhYi0+c2NhbltpXS5rZXljb2RlID09IG9sZF9rZXljb2RlKSB7Ci0JCQkJX19zZXRfYml0KG9sZF9rZXljb2RlLCBkZXYtPmtleWJpdCk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQotCQkvKiBQb3NzaWJseSBzaHJpbmsgdGhlIGtleXRhYmxlLCBmYWlsdXJlIGlzIG5vdCBhIHByb2JsZW0gKi8KLQkJaXJfcmVzaXplX3RhYmxlKHJjX3RhYiwgR0ZQX0FUT01JQyk7Ci0JfQotCi0JcmV0dXJuIG9sZF9rZXljb2RlOwotfQotCi0vKioKLSAqIGlyX2xvY2F0ZV9zY2FuY29kZSgpIC0gc2V0IGEga2V5Y29kZSBpbiB0aGUgc2NhbmNvZGUtPmtleWNvZGUgdGFibGUKLSAqIEBpcl9kZXY6CXRoZSBzdHJ1Y3QgaXJfaW5wdXRfZGV2IGRldmljZSBkZXNjcmlwdG9yCi0gKiBAcmNfdGFiOglzY2FuY29kZSB0YWJsZSB0byBiZSBzZWFyY2hlZAotICogQHNjYW5jb2RlOgl0aGUgZGVzaXJlZCBzY2FuY29kZQotICogQHJlc2l6ZToJY29udHJvbHMgd2hldGhlciB3ZSBhbGxvd2VkIHRvIHJlc2l6ZSB0aGUgdGFibGUgdG8KLSAqCQlhY2NvbW9kYXRlIG5vdCB5ZXQgcHJlc2VudCBzY2FuY29kZXMKLSAqIEByZXR1cm46CWluZGV4IG9mIHRoZSBtYXBwaW5nIGNvbnRhaW5pbmcgc2NhbmNvZGUgaW4gcXVlc3Rpb24KLSAqCQlvciAtMVUgaW4gY2FzZSBvZiBmYWlsdXJlLgotICoKLSAqIFRoaXMgcm91dGluZSBpcyB1c2VkIHRvIGxvY2F0ZSBnaXZlbiBzY2FuY29kZSBpbiBpcl9zY2FuY29kZV90YWJsZS4KLSAqIElmIHNjYW5jb2RlIGlzIG5vdCB5ZXQgcHJlc2VudCB0aGUgcm91dGluZSB3aWxsIGFsbG9jYXRlIGEgbmV3IHNsb3QKLSAqIGZvciBpdC4KLSAqLwotc3RhdGljIHVuc2lnbmVkIGludCBpcl9lc3RhYmxpc2hfc2NhbmNvZGUoc3RydWN0IGlyX2lucHV0X2RldiAqaXJfZGV2LAotCQkJCQkgIHN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSAqcmNfdGFiLAotCQkJCQkgIHVuc2lnbmVkIGludCBzY2FuY29kZSwKLQkJCQkJICBib29sIHJlc2l6ZSkKLXsKLQl1bnNpZ25lZCBpbnQgaTsKLQotCS8qCi0JICogVW5mb3J0dW5hdGVseSwgc29tZSBoYXJkd2FyZS1iYXNlZCBJUiBkZWNvZGVycyBkb24ndCBwcm92aWRlCi0JICogYWxsIGJpdHMgZm9yIHRoZSBjb21wbGV0ZSBJUiBjb2RlLiBJbiBnZW5lcmFsLCB0aGV5IHByb3ZpZGUgb25seQotCSAqIHRoZSBjb21tYW5kIHBhcnQgb2YgdGhlIElSIGNvZGUuIFlldCwgYXMgaXQgaXMgcG9zc2libGUgdG8gcmVwbGFjZQotCSAqIHRoZSBwcm92aWRlZCBJUiB3aXRoIGFub3RoZXIgb25lLCBpdCBpcyBuZWVkZWQgdG8gYWxsb3cgbG9hZGluZwotCSAqIElSIHRhYmxlcyBmcm9tIG90aGVyIHJlbW90ZXMuIFNvLAotCSAqLwotCWlmIChpcl9kZXYtPnByb3BzICYmIGlyX2Rldi0+cHJvcHMtPnNjYW5tYXNrKQotCQlzY2FuY29kZSAmPSBpcl9kZXYtPnByb3BzLT5zY2FubWFzazsKLQotCS8qIEZpcnN0IGNoZWNrIGlmIHdlIGFscmVhZHkgaGF2ZSBhIG1hcHBpbmcgZm9yIHRoaXMgaXIgY29tbWFuZCAqLwotCWZvciAoaSA9IDA7IGkgPCByY190YWItPmxlbjsgaSsrKSB7Ci0JCWlmIChyY190YWItPnNjYW5baV0uc2NhbmNvZGUgPT0gc2NhbmNvZGUpCi0JCQlyZXR1cm4gaTsKLQotCQkvKiBLZXl0YWJsZSBpcyBzb3J0ZWQgZnJvbSBsb3dlc3QgdG8gaGlnaGVzdCBzY2FuY29kZSAqLwotCQlpZiAocmNfdGFiLT5zY2FuW2ldLnNjYW5jb2RlID49IHNjYW5jb2RlKQotCQkJYnJlYWs7Ci0JfQotCi0JLyogTm8gcHJldmlvdXMgbWFwcGluZyBmb3VuZCwgd2UgbWlnaHQgbmVlZCB0byBncm93IHRoZSB0YWJsZSAqLwotCWlmIChyY190YWItPnNpemUgPT0gcmNfdGFiLT5sZW4pIHsKLQkJaWYgKCFyZXNpemUgfHwgaXJfcmVzaXplX3RhYmxlKHJjX3RhYiwgR0ZQX0FUT01JQykpCi0JCQlyZXR1cm4gLTFVOwotCX0KLQotCS8qIGkgaXMgdGhlIHByb3BlciBpbmRleCB0byBpbnNlcnQgb3VyIG5ldyBrZXljb2RlICovCi0JaWYgKGkgPCByY190YWItPmxlbikKLQkJbWVtbW92ZSgmcmNfdGFiLT5zY2FuW2kgKyAxXSwgJnJjX3RhYi0+c2NhbltpXSwKLQkJCShyY190YWItPmxlbiAtIGkpICogc2l6ZW9mKHN0cnVjdCBpcl9zY2FuY29kZSkpOwotCXJjX3RhYi0+c2NhbltpXS5zY2FuY29kZSA9IHNjYW5jb2RlOwotCXJjX3RhYi0+c2NhbltpXS5rZXljb2RlID0gS0VZX1JFU0VSVkVEOwotCXJjX3RhYi0+bGVuKys7Ci0KLQlyZXR1cm4gaTsKLX0KLQotLyoqCi0gKiBpcl9zZXRrZXljb2RlKCkgLSBzZXQgYSBrZXljb2RlIGluIHRoZSBzY2FuY29kZS0+a2V5Y29kZSB0YWJsZQotICogQGRldjoJdGhlIHN0cnVjdCBpbnB1dF9kZXYgZGV2aWNlIGRlc2NyaXB0b3IKLSAqIEBzY2FuY29kZToJdGhlIGRlc2lyZWQgc2NhbmNvZGUKLSAqIEBrZXljb2RlOglyZXN1bHQKLSAqIEByZXR1cm46CS1FSU5WQUwgaWYgdGhlIGtleWNvZGUgY291bGQgbm90IGJlIGluc2VydGVkLCBvdGhlcndpc2UgemVyby4KLSAqCi0gKiBUaGlzIHJvdXRpbmUgaXMgdXNlZCB0byBoYW5kbGUgZXZkZXYgRVZJT0NTS0VZIGlvY3RsLgotICovCi1zdGF0aWMgaW50IGlyX3NldGtleWNvZGUoc3RydWN0IGlucHV0X2RldiAqZGV2LAotCQkJIGNvbnN0IHN0cnVjdCBpbnB1dF9rZXltYXBfZW50cnkgKmtlLAotCQkJIHVuc2lnbmVkIGludCAqb2xkX2tleWNvZGUpCi17Ci0Jc3RydWN0IGlyX2lucHV0X2RldiAqaXJfZGV2ID0gaW5wdXRfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgKnJjX3RhYiA9ICZpcl9kZXYtPnJjX3RhYjsKLQl1bnNpZ25lZCBpbnQgaW5kZXg7Ci0JdW5zaWduZWQgaW50IHNjYW5jb2RlOwotCWludCByZXR2YWw7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZyY190YWItPmxvY2ssIGZsYWdzKTsKLQotCWlmIChrZS0+ZmxhZ3MgJiBJTlBVVF9LRVlNQVBfQllfSU5ERVgpIHsKLQkJaW5kZXggPSBrZS0+aW5kZXg7Ci0JCWlmIChpbmRleCA+PSByY190YWItPmxlbikgewotCQkJcmV0dmFsID0gLUVJTlZBTDsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JfSBlbHNlIHsKLQkJcmV0dmFsID0gaW5wdXRfc2NhbmNvZGVfdG9fc2NhbGFyKGtlLCAmc2NhbmNvZGUpOwotCQlpZiAocmV0dmFsKQotCQkJZ290byBvdXQ7Ci0KLQkJaW5kZXggPSBpcl9lc3RhYmxpc2hfc2NhbmNvZGUoaXJfZGV2LCByY190YWIsIHNjYW5jb2RlLCB0cnVlKTsKLQkJaWYgKGluZGV4ID49IHJjX3RhYi0+bGVuKSB7Ci0JCQlyZXR2YWwgPSAtRU5PTUVNOwotCQkJZ290byBvdXQ7Ci0JCX0KLQl9Ci0KLQkqb2xkX2tleWNvZGUgPSBpcl91cGRhdGVfbWFwcGluZyhkZXYsIHJjX3RhYiwgaW5kZXgsIGtlLT5rZXljb2RlKTsKLQotb3V0OgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJjX3RhYi0+bG9jaywgZmxhZ3MpOwotCXJldHVybiByZXR2YWw7Ci19Ci0KLS8qKgotICogaXJfc2V0a2V5dGFibGUoKSAtIHNldHMgc2V2ZXJhbCBlbnRyaWVzIGluIHRoZSBzY2FuY29kZS0+a2V5Y29kZSB0YWJsZQotICogQGRldjoJdGhlIHN0cnVjdCBpbnB1dF9kZXYgZGV2aWNlIGRlc2NyaXB0b3IKLSAqIEB0bzoJCXRoZSBzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgdG8gY29weSBlbnRyaWVzIHRvCi0gKiBAZnJvbToJdGhlIHN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSB0byBjb3B5IGVudHJpZXMgZnJvbQotICogQHJldHVybjoJLUVOT01FTSBpZiBhbGwga2V5Y29kZXMgY291bGQgbm90IGJlIGluc2VydGVkLCBvdGhlcndpc2UgemVyby4KLSAqCi0gKiBUaGlzIHJvdXRpbmUgaXMgdXNlZCB0byBoYW5kbGUgdGFibGUgaW5pdGlhbGl6YXRpb24uCi0gKi8KLXN0YXRpYyBpbnQgaXJfc2V0a2V5dGFibGUoc3RydWN0IGlyX2lucHV0X2RldiAqaXJfZGV2LAotCQkJICBjb25zdCBzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgKmZyb20pCi17Ci0Jc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlICpyY190YWIgPSAmaXJfZGV2LT5yY190YWI7Ci0JdW5zaWduZWQgaW50IGksIGluZGV4OwotCWludCByYzsKLQotCXJjID0gaXJfY3JlYXRlX3RhYmxlKCZpcl9kZXYtPnJjX3RhYiwKLQkJCSAgICAgZnJvbS0+bmFtZSwgZnJvbS0+aXJfdHlwZSwgZnJvbS0+c2l6ZSk7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7Ci0KLQlJUl9kcHJpbnRrKDEsICJBbGxvY2F0ZWQgc3BhY2UgZm9yICV1IGtleWNvZGUgZW50cmllcyAoJXUgYnl0ZXMpXG4iLAotCQkgICByY190YWItPnNpemUsIHJjX3RhYi0+YWxsb2MpOwotCi0JZm9yIChpID0gMDsgaSA8IGZyb20tPnNpemU7IGkrKykgewotCQlpbmRleCA9IGlyX2VzdGFibGlzaF9zY2FuY29kZShpcl9kZXYsIHJjX3RhYiwKLQkJCQkJICAgICAgZnJvbS0+c2NhbltpXS5zY2FuY29kZSwgZmFsc2UpOwotCQlpZiAoaW5kZXggPj0gcmNfdGFiLT5sZW4pIHsKLQkJCXJjID0gLUVOT01FTTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJaXJfdXBkYXRlX21hcHBpbmcoaXJfZGV2LT5pbnB1dF9kZXYsIHJjX3RhYiwgaW5kZXgsCi0JCQkJICBmcm9tLT5zY2FuW2ldLmtleWNvZGUpOwotCX0KLQotCWlmIChyYykKLQkJaXJfZnJlZV90YWJsZShyY190YWIpOwotCi0JcmV0dXJuIHJjOwotfQotCi0vKioKLSAqIGlyX2xvb2t1cF9ieV9zY2FuY29kZSgpIC0gbG9jYXRlIG1hcHBpbmcgYnkgc2NhbmNvZGUKLSAqIEByY190YWI6CXRoZSAmc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIHRvIHNlYXJjaAotICogQHNjYW5jb2RlOglzY2FuY29kZSB0byBsb29rIGZvciBpbiB0aGUgdGFibGUKLSAqIEByZXR1cm46CWluZGV4IGluIHRoZSB0YWJsZSwgLTFVIGlmIG5vdCBmb3VuZAotICoKLSAqIFRoaXMgcm91dGluZSBwZXJmb3JtcyBiaW5hcnkgc2VhcmNoIGluIFJDIGtleWtleW1hcCB0YWJsZSBmb3IKLSAqIGdpdmVuIHNjYW5jb2RlLgotICovCi1zdGF0aWMgdW5zaWduZWQgaW50IGlyX2xvb2t1cF9ieV9zY2FuY29kZShjb25zdCBzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgKnJjX3RhYiwKLQkJCQkJICB1bnNpZ25lZCBpbnQgc2NhbmNvZGUpCi17Ci0JaW50IHN0YXJ0ID0gMDsKLQlpbnQgZW5kID0gcmNfdGFiLT5sZW4gLSAxOwotCWludCBtaWQ7Ci0KLQl3aGlsZSAoc3RhcnQgPD0gZW5kKSB7Ci0JCW1pZCA9IChzdGFydCArIGVuZCkgLyAyOwotCQlpZiAocmNfdGFiLT5zY2FuW21pZF0uc2NhbmNvZGUgPCBzY2FuY29kZSkKLQkJCXN0YXJ0ID0gbWlkICsgMTsKLQkJZWxzZSBpZiAocmNfdGFiLT5zY2FuW21pZF0uc2NhbmNvZGUgPiBzY2FuY29kZSkKLQkJCWVuZCA9IG1pZCAtIDE7Ci0JCWVsc2UKLQkJCXJldHVybiBtaWQ7Ci0JfQotCi0JcmV0dXJuIC0xVTsKLX0KLQotLyoqCi0gKiBpcl9nZXRrZXljb2RlKCkgLSBnZXQgYSBrZXljb2RlIGZyb20gdGhlIHNjYW5jb2RlLT5rZXljb2RlIHRhYmxlCi0gKiBAZGV2Ogl0aGUgc3RydWN0IGlucHV0X2RldiBkZXZpY2UgZGVzY3JpcHRvcgotICogQHNjYW5jb2RlOgl0aGUgZGVzaXJlZCBzY2FuY29kZQotICogQGtleWNvZGU6CXVzZWQgdG8gcmV0dXJuIHRoZSBrZXljb2RlLCBpZiBmb3VuZCwgb3IgS0VZX1JFU0VSVkVECi0gKiBAcmV0dXJuOglhbHdheXMgcmV0dXJucyB6ZXJvLgotICoKLSAqIFRoaXMgcm91dGluZSBpcyB1c2VkIHRvIGhhbmRsZSBldmRldiBFVklPQ0dLRVkgaW9jdGwuCi0gKi8KLXN0YXRpYyBpbnQgaXJfZ2V0a2V5Y29kZShzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsCi0JCQkgc3RydWN0IGlucHV0X2tleW1hcF9lbnRyeSAqa2UpCi17Ci0Jc3RydWN0IGlyX2lucHV0X2RldiAqaXJfZGV2ID0gaW5wdXRfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgKnJjX3RhYiA9ICZpcl9kZXYtPnJjX3RhYjsKLQlzdHJ1Y3QgaXJfc2NhbmNvZGUgKmVudHJ5OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgaW50IGluZGV4OwotCXVuc2lnbmVkIGludCBzY2FuY29kZTsKLQlpbnQgcmV0dmFsOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnJjX3RhYi0+bG9jaywgZmxhZ3MpOwotCi0JaWYgKGtlLT5mbGFncyAmIElOUFVUX0tFWU1BUF9CWV9JTkRFWCkgewotCQlpbmRleCA9IGtlLT5pbmRleDsKLQl9IGVsc2UgewotCQlyZXR2YWwgPSBpbnB1dF9zY2FuY29kZV90b19zY2FsYXIoa2UsICZzY2FuY29kZSk7Ci0JCWlmIChyZXR2YWwpCi0JCQlnb3RvIG91dDsKLQotCQlpbmRleCA9IGlyX2xvb2t1cF9ieV9zY2FuY29kZShyY190YWIsIHNjYW5jb2RlKTsKLQl9Ci0KLQlpZiAoaW5kZXggPj0gcmNfdGFiLT5sZW4pIHsKLQkJaWYgKCEoa2UtPmZsYWdzICYgSU5QVVRfS0VZTUFQX0JZX0lOREVYKSkKLQkJCUlSX2RwcmludGsoMSwgInVua25vd24ga2V5IGZvciBzY2FuY29kZSAweCUwNHhcbiIsCi0JCQkJICAgc2NhbmNvZGUpOwotCQlyZXR2YWwgPSAtRUlOVkFMOwotCQlnb3RvIG91dDsKLQl9Ci0KLQllbnRyeSA9ICZyY190YWItPnNjYW5baW5kZXhdOwotCi0Ja2UtPmluZGV4ID0gaW5kZXg7Ci0Ja2UtPmtleWNvZGUgPSBlbnRyeS0+a2V5Y29kZTsKLQlrZS0+bGVuID0gc2l6ZW9mKGVudHJ5LT5zY2FuY29kZSk7Ci0JbWVtY3B5KGtlLT5zY2FuY29kZSwgJmVudHJ5LT5zY2FuY29kZSwgc2l6ZW9mKGVudHJ5LT5zY2FuY29kZSkpOwotCi0JcmV0dmFsID0gMDsKLQotb3V0OgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJjX3RhYi0+bG9jaywgZmxhZ3MpOwotCXJldHVybiByZXR2YWw7Ci19Ci0KLS8qKgotICogaXJfZ19rZXljb2RlX2Zyb21fdGFibGUoKSAtIGdldHMgdGhlIGtleWNvZGUgdGhhdCBjb3JyZXNwb25kcyB0byBhIHNjYW5jb2RlCi0gKiBAaW5wdXRfZGV2Ogl0aGUgc3RydWN0IGlucHV0X2RldiBkZXNjcmlwdG9yIG9mIHRoZSBkZXZpY2UKLSAqIEBzY2FuY29kZToJdGhlIHNjYW5jb2RlIHRoYXQgd2UncmUgc2Vla2luZwotICoKLSAqIFRoaXMgcm91dGluZSBpcyB1c2VkIGJ5IHRoZSBpbnB1dCByb3V0aW5lcyB3aGVuIGEga2V5IGlzIHByZXNzZWQgYXQgdGhlCi0gKiBJUi4gVGhlIHNjYW5jb2RlIGlzIHJlY2VpdmVkIGFuZCBuZWVkcyB0byBiZSBjb252ZXJ0ZWQgaW50byBhIGtleWNvZGUuCi0gKiBJZiB0aGUga2V5IGlzIG5vdCBmb3VuZCwgaXQgcmV0dXJucyBLRVlfUkVTRVJWRUQuIE90aGVyd2lzZSwgcmV0dXJucyB0aGUKLSAqIGNvcnJlc3BvbmRpbmcga2V5Y29kZSBmcm9tIHRoZSB0YWJsZS4KLSAqLwotdTMyIGlyX2dfa2V5Y29kZV9mcm9tX3RhYmxlKHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgdTMyIHNjYW5jb2RlKQotewotCXN0cnVjdCBpcl9pbnB1dF9kZXYgKmlyX2RldiA9IGlucHV0X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlICpyY190YWIgPSAmaXJfZGV2LT5yY190YWI7Ci0JdW5zaWduZWQgaW50IGtleWNvZGU7Ci0JdW5zaWduZWQgaW50IGluZGV4OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcmNfdGFiLT5sb2NrLCBmbGFncyk7Ci0KLQlpbmRleCA9IGlyX2xvb2t1cF9ieV9zY2FuY29kZShyY190YWIsIHNjYW5jb2RlKTsKLQlrZXljb2RlID0gaW5kZXggPCByY190YWItPmxlbiA/Ci0JCQlyY190YWItPnNjYW5baW5kZXhdLmtleWNvZGUgOiBLRVlfUkVTRVJWRUQ7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyY190YWItPmxvY2ssIGZsYWdzKTsKLQotCWlmIChrZXljb2RlICE9IEtFWV9SRVNFUlZFRCkKLQkJSVJfZHByaW50aygxLCAiJXM6IHNjYW5jb2RlIDB4JTA0eCBrZXljb2RlIDB4JTAyeFxuIiwKLQkJCSAgIGRldi0+bmFtZSwgc2NhbmNvZGUsIGtleWNvZGUpOwotCi0JcmV0dXJuIGtleWNvZGU7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpcl9nX2tleWNvZGVfZnJvbV90YWJsZSk7Ci0KLS8qKgotICogaXJfa2V5dXAoKSAtIGdlbmVyYXRlcyBpbnB1dCBldmVudCB0byBjbGVhbnVwIGEga2V5IHByZXNzCi0gKiBAaXI6ICAgICAgICAgdGhlIHN0cnVjdCBpcl9pbnB1dF9kZXYgZGVzY3JpcHRvciBvZiB0aGUgZGV2aWNlCi0gKgotICogVGhpcyByb3V0aW5lIGlzIHVzZWQgdG8gc2lnbmFsIHRoYXQgYSBrZXkgaGFzIGJlZW4gcmVsZWFzZWQgb24gdGhlCi0gKiByZW1vdGUgY29udHJvbC4gSXQgcmVwb3J0cyBhIGtleXVwIGlucHV0IGV2ZW50IHZpYSBpbnB1dF9yZXBvcnRfa2V5KCkuCi0gKi8KLXZvaWQgaXJfa2V5dXAoc3RydWN0IGlyX2lucHV0X2RldiAqaXIpCi17Ci0JaWYgKCFpci0+a2V5cHJlc3NlZCkKLQkJcmV0dXJuOwotCi0JSVJfZHByaW50aygxLCAia2V5dXAga2V5IDB4JTA0eFxuIiwgaXItPmxhc3Rfa2V5Y29kZSk7Ci0JaW5wdXRfcmVwb3J0X2tleShpci0+aW5wdXRfZGV2LCBpci0+bGFzdF9rZXljb2RlLCAwKTsKLQlpbnB1dF9zeW5jKGlyLT5pbnB1dF9kZXYpOwotCWlyLT5rZXlwcmVzc2VkID0gZmFsc2U7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpcl9rZXl1cCk7Ci0KLS8qKgotICogaXJfdGltZXJfa2V5dXAoKSAtIGdlbmVyYXRlcyBhIGtleXVwIGV2ZW50IGFmdGVyIGEgdGltZW91dAotICogQGNvb2tpZTogICAgIGEgcG9pbnRlciB0byBzdHJ1Y3QgaXJfaW5wdXRfZGV2IHBhc3NlZCB0byBzZXR1cF90aW1lcigpCi0gKgotICogVGhpcyByb3V0aW5lIHdpbGwgZ2VuZXJhdGUgYSBrZXl1cCBldmVudCBzb21lIHRpbWUgYWZ0ZXIgYSBrZXlkb3duIGV2ZW50Ci0gKiBpcyBnZW5lcmF0ZWQgd2hlbiBubyBmdXJ0aGVyIGFjdGl2aXR5IGhhcyBiZWVuIGRldGVjdGVkLgotICovCi1zdGF0aWMgdm9pZCBpcl90aW1lcl9rZXl1cCh1bnNpZ25lZCBsb25nIGNvb2tpZSkKLXsKLQlzdHJ1Y3QgaXJfaW5wdXRfZGV2ICppciA9IChzdHJ1Y3QgaXJfaW5wdXRfZGV2ICopY29va2llOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkvKgotCSAqIGlyLT5rZXl1cF9qaWZmaWVzIGlzIHVzZWQgdG8gcHJldmVudCBhIHJhY2UgY29uZGl0aW9uIGlmIGEKLQkgKiBoYXJkd2FyZSBpbnRlcnJ1cHQgb2NjdXJzIGF0IHRoaXMgcG9pbnQgYW5kIHRoZSBrZXl1cCB0aW1lcgotCSAqIGV2ZW50IGlzIG1vdmVkIGZ1cnRoZXIgaW50byB0aGUgZnV0dXJlIGFzIGEgcmVzdWx0LgotCSAqCi0JICogVGhlIHRpbWVyIHdpbGwgdGhlbiBiZSByZWFjdGl2YXRlZCBhbmQgdGhpcyBmdW5jdGlvbiBjYWxsZWQKLQkgKiBhZ2FpbiBpbiB0aGUgZnV0dXJlLiBXZSBuZWVkIHRvIGV4aXQgZ3JhY2VmdWxseSBpbiB0aGF0IGNhc2UKLQkgKiB0byBhbGxvdyB0aGUgaW5wdXQgc3Vic3lzdGVtIHRvIGRvIGl0cyBhdXRvLXJlcGVhdCBtYWdpYyBvcgotCSAqIGEga2V5dXAgZXZlbnQgbWlnaHQgZm9sbG93IGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBrZXlkb3duLgotCSAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZpci0+a2V5bG9jaywgZmxhZ3MpOwotCWlmICh0aW1lX2lzX2JlZm9yZV9lcV9qaWZmaWVzKGlyLT5rZXl1cF9qaWZmaWVzKSkKLQkJaXJfa2V5dXAoaXIpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlyLT5rZXlsb2NrLCBmbGFncyk7Ci19Ci0KLS8qKgotICogaXJfcmVwZWF0KCkgLSBub3RpZmllcyB0aGUgSVIgY29yZSB0aGF0IGEga2V5IGlzIHN0aWxsIHByZXNzZWQKLSAqIEBkZXY6ICAgICAgICB0aGUgc3RydWN0IGlucHV0X2RldiBkZXNjcmlwdG9yIG9mIHRoZSBkZXZpY2UKLSAqCi0gKiBUaGlzIHJvdXRpbmUgaXMgdXNlZCBieSBJUiBkZWNvZGVycyB3aGVuIGEgcmVwZWF0IG1lc3NhZ2Ugd2hpY2ggZG9lcwotICogbm90IGluY2x1ZGUgdGhlIG5lY2Vzc2FyeSBiaXRzIHRvIHJlcHJvZHVjZSB0aGUgc2NhbmNvZGUgaGFzIGJlZW4KLSAqIHJlY2VpdmVkLgotICovCi12b2lkIGlyX3JlcGVhdChzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgaXJfaW5wdXRfZGV2ICppciA9IGlucHV0X2dldF9kcnZkYXRhKGRldik7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaXItPmtleWxvY2ssIGZsYWdzKTsKLQotCWlucHV0X2V2ZW50KGRldiwgRVZfTVNDLCBNU0NfU0NBTiwgaXItPmxhc3Rfc2NhbmNvZGUpOwotCi0JaWYgKCFpci0+a2V5cHJlc3NlZCkKLQkJZ290byBvdXQ7Ci0KLQlpci0+a2V5dXBfamlmZmllcyA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKElSX0tFWVBSRVNTX1RJTUVPVVQpOwotCW1vZF90aW1lcigmaXItPnRpbWVyX2tleXVwLCBpci0+a2V5dXBfamlmZmllcyk7Ci0KLW91dDoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpci0+a2V5bG9jaywgZmxhZ3MpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoaXJfcmVwZWF0KTsKLQotLyoqCi0gKiBpcl9rZXlkb3duKCkgLSBnZW5lcmF0ZXMgaW5wdXQgZXZlbnQgZm9yIGEga2V5IHByZXNzCi0gKiBAZGV2OiAgICAgICAgdGhlIHN0cnVjdCBpbnB1dF9kZXYgZGVzY3JpcHRvciBvZiB0aGUgZGV2aWNlCi0gKiBAc2NhbmNvZGU6ICAgdGhlIHNjYW5jb2RlIHRoYXQgd2UncmUgc2Vla2luZwotICogQHRvZ2dsZTogICAgIHRoZSB0b2dnbGUgdmFsdWUgKHByb3RvY29sIGRlcGVuZGVudCwgaWYgdGhlIHByb3RvY29sIGRvZXNuJ3QKLSAqICAgICAgICAgICAgICBzdXBwb3J0IHRvZ2dsZSB2YWx1ZXMsIHRoaXMgc2hvdWxkIGJlIHNldCB0byB6ZXJvKQotICoKLSAqIFRoaXMgcm91dGluZSBpcyB1c2VkIGJ5IHRoZSBpbnB1dCByb3V0aW5lcyB3aGVuIGEga2V5IGlzIHByZXNzZWQgYXQgdGhlCi0gKiBJUi4gSXQgZ2V0cyB0aGUga2V5Y29kZSBmb3IgYSBzY2FuY29kZSBhbmQgcmVwb3J0cyBhbiBpbnB1dCBldmVudCB2aWEKLSAqIGlucHV0X3JlcG9ydF9rZXkoKS4KLSAqLwotdm9pZCBpcl9rZXlkb3duKHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgaW50IHNjYW5jb2RlLCB1OCB0b2dnbGUpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgaXJfaW5wdXRfZGV2ICppciA9IGlucHV0X2dldF9kcnZkYXRhKGRldik7Ci0KLQl1MzIga2V5Y29kZSA9IGlyX2dfa2V5Y29kZV9mcm9tX3RhYmxlKGRldiwgc2NhbmNvZGUpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlyLT5rZXlsb2NrLCBmbGFncyk7Ci0KLQlpbnB1dF9ldmVudChkZXYsIEVWX01TQywgTVNDX1NDQU4sIHNjYW5jb2RlKTsKLQotCS8qIFJlcGVhdCBldmVudD8gKi8KLQlpZiAoaXItPmtleXByZXNzZWQgJiYKLQkgICAgaXItPmxhc3Rfc2NhbmNvZGUgPT0gc2NhbmNvZGUgJiYKLQkgICAgaXItPmxhc3RfdG9nZ2xlID09IHRvZ2dsZSkKLQkJZ290byBzZXRfdGltZXI7Ci0KLQkvKiBSZWxlYXNlIG9sZCBrZXlwcmVzcyAqLwotCWlyX2tleXVwKGlyKTsKLQotCWlyLT5sYXN0X3NjYW5jb2RlID0gc2NhbmNvZGU7Ci0JaXItPmxhc3RfdG9nZ2xlID0gdG9nZ2xlOwotCWlyLT5sYXN0X2tleWNvZGUgPSBrZXljb2RlOwotCi0KLQlpZiAoa2V5Y29kZSA9PSBLRVlfUkVTRVJWRUQpCi0JCWdvdG8gb3V0OwotCi0KLQkvKiBSZWdpc3RlciBhIGtleXByZXNzICovCi0JaXItPmtleXByZXNzZWQgPSB0cnVlOwotCUlSX2RwcmludGsoMSwgIiVzOiBrZXkgZG93biBldmVudCwga2V5IDB4JTA0eCwgc2NhbmNvZGUgMHglMDR4XG4iLAotCQkgICBkZXYtPm5hbWUsIGtleWNvZGUsIHNjYW5jb2RlKTsKLQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgaXItPmxhc3Rfa2V5Y29kZSwgMSk7Ci0JaW5wdXRfc3luYyhkZXYpOwotCi1zZXRfdGltZXI6Ci0JaXItPmtleXVwX2ppZmZpZXMgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhJUl9LRVlQUkVTU19USU1FT1VUKTsKLQltb2RfdGltZXIoJmlyLT50aW1lcl9rZXl1cCwgaXItPmtleXVwX2ppZmZpZXMpOwotb3V0OgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlyLT5rZXlsb2NrLCBmbGFncyk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpcl9rZXlkb3duKTsKLQotc3RhdGljIGludCBpcl9vcGVuKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldikKLXsKLQlzdHJ1Y3QgaXJfaW5wdXRfZGV2ICppcl9kZXYgPSBpbnB1dF9nZXRfZHJ2ZGF0YShpbnB1dF9kZXYpOwotCi0JcmV0dXJuIGlyX2Rldi0+cHJvcHMtPm9wZW4oaXJfZGV2LT5wcm9wcy0+cHJpdik7Ci19Ci0KLXN0YXRpYyB2b2lkIGlyX2Nsb3NlKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldikKLXsKLQlzdHJ1Y3QgaXJfaW5wdXRfZGV2ICppcl9kZXYgPSBpbnB1dF9nZXRfZHJ2ZGF0YShpbnB1dF9kZXYpOwotCi0JaXJfZGV2LT5wcm9wcy0+Y2xvc2UoaXJfZGV2LT5wcm9wcy0+cHJpdik7Ci19Ci0KLS8qKgotICogX19pcl9pbnB1dF9yZWdpc3RlcigpIC0gc2V0cyB0aGUgSVIga2V5Y29kZSB0YWJsZSBhbmQgYWRkIHRoZSBoYW5kbGVycwotICoJCQkgICAgZm9yIGtleW1hcCB0YWJsZSBnZXQvc2V0Ci0gKiBAaW5wdXRfZGV2Ogl0aGUgc3RydWN0IGlucHV0X2RldiBkZXNjcmlwdG9yIG9mIHRoZSBkZXZpY2UKLSAqIEByY190YWI6CXRoZSBzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgdGFibGUgb2Ygc2NhbmNvZGUva2V5bWFwCi0gKgotICogVGhpcyByb3V0aW5lIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgaW5wdXQgaW5mcmFzdHJ1Y3R1cmUKLSAqIHRvIHdvcmsgd2l0aCBhbiBJUi4KLSAqIEl0IHdpbGwgcmVnaXN0ZXIgdGhlIGlucHV0L2V2ZGV2IGludGVyZmFjZSBmb3IgdGhlIGRldmljZSBhbmQKLSAqIHJlZ2lzdGVyIHRoZSBzeWZzIGNvZGUgZm9yIElSIGNsYXNzCi0gKi8KLWludCBfX2lyX2lucHV0X3JlZ2lzdGVyKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldiwKLQkJICAgICAgY29uc3Qgc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlICpyY190YWIsCi0JCSAgICAgIHN0cnVjdCBpcl9kZXZfcHJvcHMgKnByb3BzLAotCQkgICAgICBjb25zdCBjaGFyICpkcml2ZXJfbmFtZSkKLXsKLQlzdHJ1Y3QgaXJfaW5wdXRfZGV2ICppcl9kZXY7Ci0JaW50IHJjOwotCi0JaWYgKHJjX3RhYi0+c2NhbiA9PSBOVUxMIHx8ICFyY190YWItPnNpemUpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaXJfZGV2ID0ga3phbGxvYyhzaXplb2YoKmlyX2RldiksIEdGUF9LRVJORUwpOwotCWlmICghaXJfZGV2KQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWlyX2Rldi0+ZHJpdmVyX25hbWUgPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwgIiVzIiwgZHJpdmVyX25hbWUpOwotCWlmICghaXJfZGV2LT5kcml2ZXJfbmFtZSkgewotCQlyYyA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0X2RldjsKLQl9Ci0KLQlpbnB1dF9kZXYtPmdldGtleWNvZGVfbmV3ID0gaXJfZ2V0a2V5Y29kZTsKLQlpbnB1dF9kZXYtPnNldGtleWNvZGVfbmV3ID0gaXJfc2V0a2V5Y29kZTsKLQlpbnB1dF9zZXRfZHJ2ZGF0YShpbnB1dF9kZXYsIGlyX2Rldik7Ci0JaXJfZGV2LT5pbnB1dF9kZXYgPSBpbnB1dF9kZXY7Ci0KLQlzcGluX2xvY2tfaW5pdCgmaXJfZGV2LT5yY190YWIubG9jayk7Ci0Jc3Bpbl9sb2NrX2luaXQoJmlyX2Rldi0+a2V5bG9jayk7Ci0Jc2V0dXBfdGltZXIoJmlyX2Rldi0+dGltZXJfa2V5dXAsIGlyX3RpbWVyX2tleXVwLCAodW5zaWduZWQgbG9uZylpcl9kZXYpOwotCi0JaWYgKHByb3BzKSB7Ci0JCWlyX2Rldi0+cHJvcHMgPSBwcm9wczsKLQkJaWYgKHByb3BzLT5vcGVuKQotCQkJaW5wdXRfZGV2LT5vcGVuID0gaXJfb3BlbjsKLQkJaWYgKHByb3BzLT5jbG9zZSkKLQkJCWlucHV0X2Rldi0+Y2xvc2UgPSBpcl9jbG9zZTsKLQl9Ci0KLQlzZXRfYml0KEVWX0tFWSwgaW5wdXRfZGV2LT5ldmJpdCk7Ci0Jc2V0X2JpdChFVl9SRVAsIGlucHV0X2Rldi0+ZXZiaXQpOwotCXNldF9iaXQoRVZfTVNDLCBpbnB1dF9kZXYtPmV2Yml0KTsKLQlzZXRfYml0KE1TQ19TQ0FOLCBpbnB1dF9kZXYtPm1zY2JpdCk7Ci0KLQlyYyA9IGlyX3NldGtleXRhYmxlKGlyX2RldiwgcmNfdGFiKTsKLQlpZiAocmMpCi0JCWdvdG8gb3V0X25hbWU7Ci0KLQlyYyA9IGlyX3JlZ2lzdGVyX2NsYXNzKGlucHV0X2Rldik7Ci0JaWYgKHJjIDwgMCkKLQkJZ290byBvdXRfdGFibGU7Ci0KLQlpZiAoaXJfZGV2LT5wcm9wcykKLQkJaWYgKGlyX2Rldi0+cHJvcHMtPmRyaXZlcl90eXBlID09IFJDX0RSSVZFUl9JUl9SQVcpIHsKLQkJCXJjID0gaXJfcmF3X2V2ZW50X3JlZ2lzdGVyKGlucHV0X2Rldik7Ci0JCQlpZiAocmMgPCAwKQotCQkJCWdvdG8gb3V0X2V2ZW50OwotCQl9Ci0KLQlyYyA9IGlyX3JlZ2lzdGVyX2lucHV0KGlucHV0X2Rldik7Ci0JaWYgKHJjIDwgMCkKLQkJZ290byBvdXRfZXZlbnQ7Ci0KLQlJUl9kcHJpbnRrKDEsICJSZWdpc3RlcmVkIGlucHV0IGRldmljZSBvbiAlcyBmb3IgJXMgcmVtb3RlJXMuXG4iLAotCQkgICBkcml2ZXJfbmFtZSwgcmNfdGFiLT5uYW1lLAotCQkgICAoaXJfZGV2LT5wcm9wcyAmJiBpcl9kZXYtPnByb3BzLT5kcml2ZXJfdHlwZSA9PSBSQ19EUklWRVJfSVJfUkFXKSA/Ci0JCQkiIGluIHJhdyBtb2RlIiA6ICIiKTsKLQotCS8qCi0JICogRGVmYXVsdCBkZWxheSBvZiAyNTBtcyBpcyB0b28gc2hvcnQgZm9yIHNvbWUgcHJvdG9jb2xzLCBleHBlY2lhbGx5Ci0JICogc2luY2UgdGhlIHRpbWVvdXQgaXMgY3VycmVudGx5IHNldCB0byAyNTBtcy4gSW5jcmVhc2UgaXQgdG8gNTAwbXMsCi0JICogdG8gYXZvaWQgd3JvbmcgcmVwZXRpdGlvbiBvZiB0aGUga2V5Y29kZXMuCi0JICovCi0JaW5wdXRfZGV2LT5yZXBbUkVQX0RFTEFZXSA9IDUwMDsKLQotCXJldHVybiAwOwotCi1vdXRfZXZlbnQ6Ci0JaXJfdW5yZWdpc3Rlcl9jbGFzcyhpbnB1dF9kZXYpOwotb3V0X3RhYmxlOgotCWlyX2ZyZWVfdGFibGUoJmlyX2Rldi0+cmNfdGFiKTsKLW91dF9uYW1lOgotCWtmcmVlKGlyX2Rldi0+ZHJpdmVyX25hbWUpOwotb3V0X2RldjoKLQlrZnJlZShpcl9kZXYpOwotCXJldHVybiByYzsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKF9faXJfaW5wdXRfcmVnaXN0ZXIpOwotCi0vKioKLSAqIGlyX2lucHV0X3VucmVnaXN0ZXIoKSAtIHVucmVnaXN0ZXJzIElSIGFuZCBmcmVlcyByZXNvdXJjZXMKLSAqIEBpbnB1dF9kZXY6CXRoZSBzdHJ1Y3QgaW5wdXRfZGV2IGRlc2NyaXB0b3Igb2YgdGhlIGRldmljZQotCi0gKiBUaGlzIHJvdXRpbmUgaXMgdXNlZCB0byBmcmVlIG1lbW9yeSBhbmQgZGUtcmVnaXN0ZXIgaW50ZXJmYWNlcy4KLSAqLwotdm9pZCBpcl9pbnB1dF91bnJlZ2lzdGVyKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldikKLXsKLQlzdHJ1Y3QgaXJfaW5wdXRfZGV2ICppcl9kZXYgPSBpbnB1dF9nZXRfZHJ2ZGF0YShpbnB1dF9kZXYpOwotCi0JaWYgKCFpcl9kZXYpCi0JCXJldHVybjsKLQotCUlSX2RwcmludGsoMSwgIkZyZWVkIGtleWNvZGUgdGFibGVcbiIpOwotCi0JZGVsX3RpbWVyX3N5bmMoJmlyX2Rldi0+dGltZXJfa2V5dXApOwotCWlmIChpcl9kZXYtPnByb3BzKQotCQlpZiAoaXJfZGV2LT5wcm9wcy0+ZHJpdmVyX3R5cGUgPT0gUkNfRFJJVkVSX0lSX1JBVykKLQkJCWlyX3Jhd19ldmVudF91bnJlZ2lzdGVyKGlucHV0X2Rldik7Ci0KLQlpcl9mcmVlX3RhYmxlKCZpcl9kZXYtPnJjX3RhYik7Ci0KLQlpcl91bnJlZ2lzdGVyX2NsYXNzKGlucHV0X2Rldik7Ci0KLQlrZnJlZShpcl9kZXYtPmRyaXZlcl9uYW1lKTsKLQlrZnJlZShpcl9kZXYpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoaXJfaW5wdXRfdW5yZWdpc3Rlcik7Ci0KLWludCBpcl9jb3JlX2RlYnVnOyAgICAvKiBpcl9kZWJ1ZyBsZXZlbCAoMCwxLDIpICovCi1FWFBPUlRfU1lNQk9MX0dQTChpcl9jb3JlX2RlYnVnKTsKLW1vZHVsZV9wYXJhbV9uYW1lZChkZWJ1ZywgaXJfY29yZV9kZWJ1ZywgaW50LCAwNjQ0KTsKLQotTU9EVUxFX0FVVEhPUigiTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+Iik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL0lSL2lyLWxpcmMtY29kZWMuYyBiL2RyaXZlcnMvbWVkaWEvSVIvaXItbGlyYy1jb2RlYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZmMwZGI5Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvSVIvaXItbGlyYy1jb2RlYy5jCisrKyAvZGV2L251bGwKQEAgLTEsNDEwICswLDAgQEAKLS8qIGlyLWxpcmMtY29kZWMuYyAtIGlyLWNvcmUgdG8gY2xhc3NpYyBsaXJjIGludGVyZmFjZSBicmlkZ2UKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgYnkgSmFyb2QgV2lsc29uIDxqYXJvZEByZWRoYXQuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC93YWl0Lmg+Ci0jaW5jbHVkZSA8bWVkaWEvbGlyYy5oPgotI2luY2x1ZGUgPG1lZGlhL2xpcmNfZGV2Lmg+Ci0jaW5jbHVkZSA8bWVkaWEvaXItY29yZS5oPgotI2luY2x1ZGUgImlyLWNvcmUtcHJpdi5oIgotCi0jZGVmaW5lIExJUkNCVUZfU0laRSAyNTYKLQotLyoqCi0gKiBpcl9saXJjX2RlY29kZSgpIC0gU2VuZCByYXcgSVIgZGF0YSB0byBsaXJjX2RldiB0byBiZSByZWxheWVkIHRvIHRoZQotICoJCSAgICAgIGxpcmNkIHVzZXJzcGFjZSBkYWVtb24gZm9yIGRlY29kaW5nLgotICogQGlucHV0X2RldjoJdGhlIHN0cnVjdCBpbnB1dF9kZXYgZGVzY3JpcHRvciBvZiB0aGUgZGV2aWNlCi0gKiBAZHVyYXRpb246CXRoZSBzdHJ1Y3QgaXJfcmF3X2V2ZW50IGRlc2NyaXB0b3Igb2YgdGhlIHB1bHNlL3NwYWNlCi0gKgotICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIC1FSU5WQUwgaWYgdGhlIGxpcmMgaW50ZXJmYWNlcyBhcmVuJ3Qgd2lyZWQgdXAuCi0gKi8KLXN0YXRpYyBpbnQgaXJfbGlyY19kZWNvZGUoc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2LCBzdHJ1Y3QgaXJfcmF3X2V2ZW50IGV2KQotewotCXN0cnVjdCBpcl9pbnB1dF9kZXYgKmlyX2RldiA9IGlucHV0X2dldF9kcnZkYXRhKGlucHV0X2Rldik7Ci0Jc3RydWN0IGxpcmNfY29kZWMgKmxpcmMgPSAmaXJfZGV2LT5yYXctPmxpcmM7Ci0JaW50IHNhbXBsZTsKLQotCWlmICghKGlyX2Rldi0+cmF3LT5lbmFibGVkX3Byb3RvY29scyAmIElSX1RZUEVfTElSQykpCi0JCXJldHVybiAwOwotCi0JaWYgKCFpcl9kZXYtPnJhdy0+bGlyYy5kcnYgfHwgIWlyX2Rldi0+cmF3LT5saXJjLmRydi0+cmJ1ZikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkvKiBQYWNrZXQgc3RhcnQgKi8KLQlpZiAoZXYucmVzZXQpCi0JCXJldHVybiAwOwotCi0JLyogQ2FycmllciByZXBvcnRzICovCi0JaWYgKGV2LmNhcnJpZXJfcmVwb3J0KSB7Ci0JCXNhbXBsZSA9IExJUkNfRlJFUVVFTkNZKGV2LmNhcnJpZXIpOwotCi0JLyogUGFja2V0IGVuZCAqLwotCX0gZWxzZSBpZiAoZXYudGltZW91dCkgewotCi0JCWlmIChsaXJjLT5nYXApCi0JCQlyZXR1cm4gMDsKLQotCQlsaXJjLT5nYXBfc3RhcnQgPSBrdGltZV9nZXQoKTsKLQkJbGlyYy0+Z2FwID0gdHJ1ZTsKLQkJbGlyYy0+Z2FwX2R1cmF0aW9uID0gZXYuZHVyYXRpb247Ci0KLQkJaWYgKCFsaXJjLT5zZW5kX3RpbWVvdXRfcmVwb3J0cykKLQkJCXJldHVybiAwOwotCi0JCXNhbXBsZSA9IExJUkNfVElNRU9VVChldi5kdXJhdGlvbiAvIDEwMDApOwotCi0JLyogTm9ybWFsIHNhbXBsZSAqLwotCX0gZWxzZSB7Ci0KLQkJaWYgKGxpcmMtPmdhcCkgewotCQkJaW50IGdhcF9zYW1wbGU7Ci0KLQkJCWxpcmMtPmdhcF9kdXJhdGlvbiArPSBrdGltZV90b19ucyhrdGltZV9zdWIoa3RpbWVfZ2V0KCksCi0JCQkJbGlyYy0+Z2FwX3N0YXJ0KSk7Ci0KLQkJCS8qIENvbnZlcnQgdG8gbXMgYW5kIGNhcCBieSBMSVJDX1ZBTFVFX01BU0sgKi8KLQkJCWRvX2RpdihsaXJjLT5nYXBfZHVyYXRpb24sIDEwMDApOwotCQkJbGlyYy0+Z2FwX2R1cmF0aW9uID0gbWluKGxpcmMtPmdhcF9kdXJhdGlvbiwKLQkJCQkJCQkodTY0KUxJUkNfVkFMVUVfTUFTSyk7Ci0KLQkJCWdhcF9zYW1wbGUgPSBMSVJDX1NQQUNFKGxpcmMtPmdhcF9kdXJhdGlvbik7Ci0JCQlsaXJjX2J1ZmZlcl93cml0ZShpcl9kZXYtPnJhdy0+bGlyYy5kcnYtPnJidWYsCi0JCQkJCQkodW5zaWduZWQgY2hhciAqKSAmZ2FwX3NhbXBsZSk7Ci0JCQlsaXJjLT5nYXAgPSBmYWxzZTsKLQkJfQotCi0JCXNhbXBsZSA9IGV2LnB1bHNlID8gTElSQ19QVUxTRShldi5kdXJhdGlvbiAvIDEwMDApIDoKLQkJCQkJTElSQ19TUEFDRShldi5kdXJhdGlvbiAvIDEwMDApOwotCX0KLQotCWxpcmNfYnVmZmVyX3dyaXRlKGlyX2Rldi0+cmF3LT5saXJjLmRydi0+cmJ1ZiwKLQkJCSAgKHVuc2lnbmVkIGNoYXIgKikgJnNhbXBsZSk7Ci0Jd2FrZV91cCgmaXJfZGV2LT5yYXctPmxpcmMuZHJ2LT5yYnVmLT53YWl0X3BvbGwpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGlyX2xpcmNfdHJhbnNtaXRfaXIoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgKmJ1ZiwKLQkJCQkgICBzaXplX3QgbiwgbG9mZl90ICpwcG9zKQotewotCXN0cnVjdCBsaXJjX2NvZGVjICpsaXJjOwotCXN0cnVjdCBpcl9pbnB1dF9kZXYgKmlyX2RldjsKLQlpbnQgKnR4YnVmOyAvKiBidWZmZXIgd2l0aCB2YWx1ZXMgdG8gdHJhbnNtaXQgKi8KLQlpbnQgcmV0ID0gMCwgY291bnQ7Ci0KLQlsaXJjID0gbGlyY19nZXRfcGRhdGEoZmlsZSk7Ci0JaWYgKCFsaXJjKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCWlmIChuICUgc2l6ZW9mKGludCkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JY291bnQgPSBuIC8gc2l6ZW9mKGludCk7Ci0JaWYgKGNvdW50ID4gTElSQ0JVRl9TSVpFIHx8IGNvdW50ICUgMiA9PSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXR4YnVmID0gbWVtZHVwX3VzZXIoYnVmLCBuKTsKLQlpZiAoSVNfRVJSKHR4YnVmKSkKLQkJcmV0dXJuIFBUUl9FUlIodHhidWYpOwotCi0JaXJfZGV2ID0gbGlyYy0+aXJfZGV2OwotCWlmICghaXJfZGV2KSB7Ci0JCXJldCA9IC1FRkFVTFQ7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmIChpcl9kZXYtPnByb3BzICYmIGlyX2Rldi0+cHJvcHMtPnR4X2lyKQotCQlyZXQgPSBpcl9kZXYtPnByb3BzLT50eF9pcihpcl9kZXYtPnByb3BzLT5wcml2LCB0eGJ1ZiwgKHUzMiluKTsKLQotb3V0OgotCWtmcmVlKHR4YnVmKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgbG9uZyBpcl9saXJjX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlcCwgdW5zaWduZWQgaW50IGNtZCwKLQkJCXVuc2lnbmVkIGxvbmcgX191c2VyIGFyZykKLXsKLQlzdHJ1Y3QgbGlyY19jb2RlYyAqbGlyYzsKLQlzdHJ1Y3QgaXJfaW5wdXRfZGV2ICppcl9kZXY7Ci0JaW50IHJldCA9IDA7Ci0Jdm9pZCAqZHJ2X2RhdGE7Ci0JX191MzIgdmFsID0gMCwgdG1wOwotCi0JbGlyYyA9IGxpcmNfZ2V0X3BkYXRhKGZpbGVwKTsKLQlpZiAoIWxpcmMpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JaXJfZGV2ID0gbGlyYy0+aXJfZGV2OwotCWlmICghaXJfZGV2IHx8ICFpcl9kZXYtPnByb3BzIHx8ICFpcl9kZXYtPnByb3BzLT5wcml2KQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCWRydl9kYXRhID0gaXJfZGV2LT5wcm9wcy0+cHJpdjsKLQotCWlmIChfSU9DX0RJUihjbWQpICYgX0lPQ19XUklURSkgewotCQlyZXQgPSBnZXRfdXNlcih2YWwsIChfX3UzMiAqKWFyZyk7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCX0KLQotCXN3aXRjaCAoY21kKSB7Ci0KLQkvKiBsZWdhY3kgc3VwcG9ydCAqLwotCWNhc2UgTElSQ19HRVRfU0VORF9NT0RFOgotCQl2YWwgPSBMSVJDX0NBTl9TRU5EX1BVTFNFICYgTElSQ19DQU5fU0VORF9NQVNLOwotCQlicmVhazsKLQotCWNhc2UgTElSQ19TRVRfU0VORF9NT0RFOgotCQlpZiAodmFsICE9IChMSVJDX01PREVfUFVMU0UgJiBMSVJDX0NBTl9TRU5EX01BU0spKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCXJldHVybiAwOwotCi0JLyogVFggc2V0dGluZ3MgKi8KLQljYXNlIExJUkNfU0VUX1RSQU5TTUlUVEVSX01BU0s6Ci0JCWlmICghaXJfZGV2LT5wcm9wcy0+c190eF9tYXNrKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJcmV0dXJuIGlyX2Rldi0+cHJvcHMtPnNfdHhfbWFzayhkcnZfZGF0YSwgdmFsKTsKLQotCWNhc2UgTElSQ19TRVRfU0VORF9DQVJSSUVSOgotCQlpZiAoIWlyX2Rldi0+cHJvcHMtPnNfdHhfY2FycmllcikKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCXJldHVybiBpcl9kZXYtPnByb3BzLT5zX3R4X2NhcnJpZXIoZHJ2X2RhdGEsIHZhbCk7Ci0KLQljYXNlIExJUkNfU0VUX1NFTkRfRFVUWV9DWUNMRToKLQkJaWYgKCFpcl9kZXYtPnByb3BzLT5zX3R4X2R1dHlfY3ljbGUpCi0JCQlyZXR1cm4gLUVOT1NZUzsKLQotCQlpZiAodmFsIDw9IDAgfHwgdmFsID49IDEwMCkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCXJldHVybiBpcl9kZXYtPnByb3BzLT5zX3R4X2R1dHlfY3ljbGUoZHJ2X2RhdGEsIHZhbCk7Ci0KLQkvKiBSWCBzZXR0aW5ncyAqLwotCWNhc2UgTElSQ19TRVRfUkVDX0NBUlJJRVI6Ci0JCWlmICghaXJfZGV2LT5wcm9wcy0+c19yeF9jYXJyaWVyX3JhbmdlKQotCQkJcmV0dXJuIC1FTk9TWVM7Ci0KLQkJaWYgKHZhbCA8PSAwKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJcmV0dXJuIGlyX2Rldi0+cHJvcHMtPnNfcnhfY2Fycmllcl9yYW5nZShkcnZfZGF0YSwKLQkJCWlyX2Rldi0+cmF3LT5saXJjLmNhcnJpZXJfbG93LCB2YWwpOwotCi0JY2FzZSBMSVJDX1NFVF9SRUNfQ0FSUklFUl9SQU5HRToKLQkJaWYgKHZhbCA8PSAwKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJaXJfZGV2LT5yYXctPmxpcmMuY2Fycmllcl9sb3cgPSB2YWw7Ci0JCXJldHVybiAwOwotCi0JY2FzZSBMSVJDX0dFVF9SRUNfUkVTT0xVVElPTjoKLQkJdmFsID0gaXJfZGV2LT5wcm9wcy0+cnhfcmVzb2x1dGlvbjsKLQkJYnJlYWs7Ci0KLQljYXNlIExJUkNfU0VUX1dJREVCQU5EX1JFQ0VJVkVSOgotCQlpZiAoIWlyX2Rldi0+cHJvcHMtPnNfbGVhcm5pbmdfbW9kZSkKLQkJCXJldHVybiAtRU5PU1lTOwotCi0JCXJldHVybiBpcl9kZXYtPnByb3BzLT5zX2xlYXJuaW5nX21vZGUoZHJ2X2RhdGEsICEhdmFsKTsKLQotCWNhc2UgTElSQ19TRVRfTUVBU1VSRV9DQVJSSUVSX01PREU6Ci0JCWlmICghaXJfZGV2LT5wcm9wcy0+c19jYXJyaWVyX3JlcG9ydCkKLQkJCXJldHVybiAtRU5PU1lTOwotCi0JCXJldHVybiBpcl9kZXYtPnByb3BzLT5zX2NhcnJpZXJfcmVwb3J0KGRydl9kYXRhLCAhIXZhbCk7Ci0KLQkvKiBHZW5lcmljIHRpbWVvdXQgc3VwcG9ydCAqLwotCWNhc2UgTElSQ19HRVRfTUlOX1RJTUVPVVQ6Ci0JCWlmICghaXJfZGV2LT5wcm9wcy0+bWF4X3RpbWVvdXQpCi0JCQlyZXR1cm4gLUVOT1NZUzsKLQkJdmFsID0gaXJfZGV2LT5wcm9wcy0+bWluX3RpbWVvdXQgLyAxMDAwOwotCQlicmVhazsKLQotCWNhc2UgTElSQ19HRVRfTUFYX1RJTUVPVVQ6Ci0JCWlmICghaXJfZGV2LT5wcm9wcy0+bWF4X3RpbWVvdXQpCi0JCQlyZXR1cm4gLUVOT1NZUzsKLQkJdmFsID0gaXJfZGV2LT5wcm9wcy0+bWF4X3RpbWVvdXQgLyAxMDAwOwotCQlicmVhazsKLQotCWNhc2UgTElSQ19TRVRfUkVDX1RJTUVPVVQ6Ci0JCWlmICghaXJfZGV2LT5wcm9wcy0+bWF4X3RpbWVvdXQpCi0JCQlyZXR1cm4gLUVOT1NZUzsKLQotCQl0bXAgPSB2YWwgKiAxMDAwOwotCi0JCWlmICh0bXAgPCBpcl9kZXYtPnByb3BzLT5taW5fdGltZW91dCB8fAotCQkJdG1wID4gaXJfZGV2LT5wcm9wcy0+bWF4X3RpbWVvdXQpCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJaXJfZGV2LT5wcm9wcy0+dGltZW91dCA9IHRtcDsKLQkJYnJlYWs7Ci0KLQljYXNlIExJUkNfU0VUX1JFQ19USU1FT1VUX1JFUE9SVFM6Ci0JCWxpcmMtPnNlbmRfdGltZW91dF9yZXBvcnRzID0gISF2YWw7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJcmV0dXJuIGxpcmNfZGV2X2ZvcF9pb2N0bChmaWxlcCwgY21kLCBhcmcpOwotCX0KLQotCWlmIChfSU9DX0RJUihjbWQpICYgX0lPQ19SRUFEKQotCQlyZXQgPSBwdXRfdXNlcih2YWwsIChfX3UzMiAqKWFyZyk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IGlyX2xpcmNfb3Blbih2b2lkICpkYXRhKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBpcl9saXJjX2Nsb3NlKHZvaWQgKmRhdGEpCi17Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBsaXJjX2ZvcHMgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS53cml0ZQkJPSBpcl9saXJjX3RyYW5zbWl0X2lyLAotCS51bmxvY2tlZF9pb2N0bAk9IGlyX2xpcmNfaW9jdGwsCi0jaWZkZWYgQ09ORklHX0NPTVBBVAotCS5jb21wYXRfaW9jdGwJPSBpcl9saXJjX2lvY3RsLAotI2VuZGlmCi0JLnJlYWQJCT0gbGlyY19kZXZfZm9wX3JlYWQsCi0JLnBvbGwJCT0gbGlyY19kZXZfZm9wX3BvbGwsCi0JLm9wZW4JCT0gbGlyY19kZXZfZm9wX29wZW4sCi0JLnJlbGVhc2UJPSBsaXJjX2Rldl9mb3BfY2xvc2UsCi0JLmxsc2VlawkJPSBub19sbHNlZWssCi19OwotCi1zdGF0aWMgaW50IGlyX2xpcmNfcmVnaXN0ZXIoc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2KQotewotCXN0cnVjdCBpcl9pbnB1dF9kZXYgKmlyX2RldiA9IGlucHV0X2dldF9kcnZkYXRhKGlucHV0X2Rldik7Ci0Jc3RydWN0IGxpcmNfZHJpdmVyICpkcnY7Ci0Jc3RydWN0IGxpcmNfYnVmZmVyICpyYnVmOwotCWludCByYyA9IC1FTk9NRU07Ci0JdW5zaWduZWQgbG9uZyBmZWF0dXJlczsKLQotCWRydiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBsaXJjX2RyaXZlciksIEdGUF9LRVJORUwpOwotCWlmICghZHJ2KQotCQlyZXR1cm4gcmM7Ci0KLQlyYnVmID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGxpcmNfYnVmZmVyKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFyYnVmKQotCQlnb3RvIHJidWZfYWxsb2NfZmFpbGVkOwotCi0JcmMgPSBsaXJjX2J1ZmZlcl9pbml0KHJidWYsIHNpemVvZihpbnQpLCBMSVJDQlVGX1NJWkUpOwotCWlmIChyYykKLQkJZ290byByYnVmX2luaXRfZmFpbGVkOwotCi0JZmVhdHVyZXMgPSBMSVJDX0NBTl9SRUNfTU9ERTI7Ci0JaWYgKGlyX2Rldi0+cHJvcHMtPnR4X2lyKSB7Ci0KLQkJZmVhdHVyZXMgfD0gTElSQ19DQU5fU0VORF9QVUxTRTsKLQkJaWYgKGlyX2Rldi0+cHJvcHMtPnNfdHhfbWFzaykKLQkJCWZlYXR1cmVzIHw9IExJUkNfQ0FOX1NFVF9UUkFOU01JVFRFUl9NQVNLOwotCQlpZiAoaXJfZGV2LT5wcm9wcy0+c190eF9jYXJyaWVyKQotCQkJZmVhdHVyZXMgfD0gTElSQ19DQU5fU0VUX1NFTkRfQ0FSUklFUjsKLQotCQlpZiAoaXJfZGV2LT5wcm9wcy0+c190eF9kdXR5X2N5Y2xlKQotCQkJZmVhdHVyZXMgfD0gTElSQ19DQU5fU0VUX1NFTkRfRFVUWV9DWUNMRTsKLQl9Ci0KLQlpZiAoaXJfZGV2LT5wcm9wcy0+c19yeF9jYXJyaWVyX3JhbmdlKQotCQlmZWF0dXJlcyB8PSBMSVJDX0NBTl9TRVRfUkVDX0NBUlJJRVIgfAotCQkJTElSQ19DQU5fU0VUX1JFQ19DQVJSSUVSX1JBTkdFOwotCi0JaWYgKGlyX2Rldi0+cHJvcHMtPnNfbGVhcm5pbmdfbW9kZSkKLQkJZmVhdHVyZXMgfD0gTElSQ19DQU5fVVNFX1dJREVCQU5EX1JFQ0VJVkVSOwotCi0JaWYgKGlyX2Rldi0+cHJvcHMtPnNfY2Fycmllcl9yZXBvcnQpCi0JCWZlYXR1cmVzIHw9IExJUkNfQ0FOX01FQVNVUkVfQ0FSUklFUjsKLQotCi0JaWYgKGlyX2Rldi0+cHJvcHMtPm1heF90aW1lb3V0KQotCQlmZWF0dXJlcyB8PSBMSVJDX0NBTl9TRVRfUkVDX1RJTUVPVVQ7Ci0KLQotCXNucHJpbnRmKGRydi0+bmFtZSwgc2l6ZW9mKGRydi0+bmFtZSksICJpci1saXJjLWNvZGVjICglcykiLAotCQkgaXJfZGV2LT5kcml2ZXJfbmFtZSk7Ci0JZHJ2LT5taW5vciA9IC0xOwotCWRydi0+ZmVhdHVyZXMgPSBmZWF0dXJlczsKLQlkcnYtPmRhdGEgPSAmaXJfZGV2LT5yYXctPmxpcmM7Ci0JZHJ2LT5yYnVmID0gcmJ1ZjsKLQlkcnYtPnNldF91c2VfaW5jID0gJmlyX2xpcmNfb3BlbjsKLQlkcnYtPnNldF91c2VfZGVjID0gJmlyX2xpcmNfY2xvc2U7Ci0JZHJ2LT5jb2RlX2xlbmd0aCA9IHNpemVvZihzdHJ1Y3QgaXJfcmF3X2V2ZW50KSAqIDg7Ci0JZHJ2LT5mb3BzID0gJmxpcmNfZm9wczsKLQlkcnYtPmRldiA9ICZpcl9kZXYtPmRldjsKLQlkcnYtPm93bmVyID0gVEhJU19NT0RVTEU7Ci0KLQlkcnYtPm1pbm9yID0gbGlyY19yZWdpc3Rlcl9kcml2ZXIoZHJ2KTsKLQlpZiAoZHJ2LT5taW5vciA8IDApIHsKLQkJcmMgPSAtRU5PREVWOwotCQlnb3RvIGxpcmNfcmVnaXN0ZXJfZmFpbGVkOwotCX0KLQotCWlyX2Rldi0+cmF3LT5saXJjLmRydiA9IGRydjsKLQlpcl9kZXYtPnJhdy0+bGlyYy5pcl9kZXYgPSBpcl9kZXY7Ci0JcmV0dXJuIDA7Ci0KLWxpcmNfcmVnaXN0ZXJfZmFpbGVkOgotcmJ1Zl9pbml0X2ZhaWxlZDoKLQlrZnJlZShyYnVmKTsKLXJidWZfYWxsb2NfZmFpbGVkOgotCWtmcmVlKGRydik7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgaXJfbGlyY191bnJlZ2lzdGVyKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldikKLXsKLQlzdHJ1Y3QgaXJfaW5wdXRfZGV2ICppcl9kZXYgPSBpbnB1dF9nZXRfZHJ2ZGF0YShpbnB1dF9kZXYpOwotCXN0cnVjdCBsaXJjX2NvZGVjICpsaXJjID0gJmlyX2Rldi0+cmF3LT5saXJjOwotCi0JbGlyY191bnJlZ2lzdGVyX2RyaXZlcihsaXJjLT5kcnYtPm1pbm9yKTsKLQlsaXJjX2J1ZmZlcl9mcmVlKGxpcmMtPmRydi0+cmJ1Zik7Ci0Ja2ZyZWUobGlyYy0+ZHJ2KTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGlyX3Jhd19oYW5kbGVyIGxpcmNfaGFuZGxlciA9IHsKLQkucHJvdG9jb2xzCT0gSVJfVFlQRV9MSVJDLAotCS5kZWNvZGUJCT0gaXJfbGlyY19kZWNvZGUsCi0JLnJhd19yZWdpc3Rlcgk9IGlyX2xpcmNfcmVnaXN0ZXIsCi0JLnJhd191bnJlZ2lzdGVyCT0gaXJfbGlyY191bnJlZ2lzdGVyLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgaXJfbGlyY19jb2RlY19pbml0KHZvaWQpCi17Ci0JaXJfcmF3X2hhbmRsZXJfcmVnaXN0ZXIoJmxpcmNfaGFuZGxlcik7Ci0KLQlwcmludGsoS0VSTl9JTkZPICJJUiBMSVJDIGJyaWRnZSBoYW5kbGVyIGluaXRpYWxpemVkXG4iKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGlyX2xpcmNfY29kZWNfZXhpdCh2b2lkKQotewotCWlyX3Jhd19oYW5kbGVyX3VucmVnaXN0ZXIoJmxpcmNfaGFuZGxlcik7Ci19Ci0KLW1vZHVsZV9pbml0KGlyX2xpcmNfY29kZWNfaW5pdCk7Ci1tb2R1bGVfZXhpdChpcl9saXJjX2NvZGVjX2V4aXQpOwotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJKYXJvZCBXaWxzb24gPGphcm9kQHJlZGhhdC5jb20+Iik7Ci1NT0RVTEVfQVVUSE9SKCJSZWQgSGF0IEluYy4gKGh0dHA6Ly93d3cucmVkaGF0LmNvbSkiKTsKLU1PRFVMRV9ERVNDUklQVElPTigiTElSQyBJUiBoYW5kbGVyIGJyaWRnZSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9JUi9pci1uZWMtZGVjb2Rlci5jIGIvZHJpdmVycy9tZWRpYS9JUi9pci1uZWMtZGVjb2Rlci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MDk5M2Y3Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvSVIvaXItbmVjLWRlY29kZXIuYworKysgL2Rldi9udWxsCkBAIC0xLDIxNyArMCwwIEBACi0vKiBpci1uZWMtZGVjb2Rlci5jIC0gaGFuZGxlIE5FQyBJUiBQdWxzZS9TcGFjZSBwcm90b2NvbAotICoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBieSBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2JpdHJldi5oPgotI2luY2x1ZGUgImlyLWNvcmUtcHJpdi5oIgotCi0jZGVmaW5lIE5FQ19OQklUUwkJMzIKLSNkZWZpbmUgTkVDX1VOSVQJCTU2MjUwMCAgLyogbnMgKi8KLSNkZWZpbmUgTkVDX0hFQURFUl9QVUxTRQkoMTYgKiBORUNfVU5JVCkKLSNkZWZpbmUgTkVDWF9IRUFERVJfUFVMU0UJKDggICogTkVDX1VOSVQpIC8qIExlc3MgY29tbW9uIE5FQyB2YXJpYW50ICovCi0jZGVmaW5lIE5FQ19IRUFERVJfU1BBQ0UJKDggICogTkVDX1VOSVQpCi0jZGVmaW5lIE5FQ19SRVBFQVRfU1BBQ0UJKDQgICogTkVDX1VOSVQpCi0jZGVmaW5lIE5FQ19CSVRfUFVMU0UJCSgxICAqIE5FQ19VTklUKQotI2RlZmluZSBORUNfQklUXzBfU1BBQ0UJCSgxICAqIE5FQ19VTklUKQotI2RlZmluZSBORUNfQklUXzFfU1BBQ0UJCSgzICAqIE5FQ19VTklUKQotI2RlZmluZQlORUNfVFJBSUxFUl9QVUxTRQkoMSAgKiBORUNfVU5JVCkKLSNkZWZpbmUJTkVDX1RSQUlMRVJfU1BBQ0UJKDEwICogTkVDX1VOSVQpIC8qIGV2ZW4gbG9uZ2VyIGluIHJlYWxpdHkgKi8KLSNkZWZpbmUgTkVDWF9SRVBFQVRfQklUUwkxCi0KLWVudW0gbmVjX3N0YXRlIHsKLQlTVEFURV9JTkFDVElWRSwKLQlTVEFURV9IRUFERVJfU1BBQ0UsCi0JU1RBVEVfQklUX1BVTFNFLAotCVNUQVRFX0JJVF9TUEFDRSwKLQlTVEFURV9UUkFJTEVSX1BVTFNFLAotCVNUQVRFX1RSQUlMRVJfU1BBQ0UsCi19OwotCi0vKioKLSAqIGlyX25lY19kZWNvZGUoKSAtIERlY29kZSBvbmUgTkVDIHB1bHNlIG9yIHNwYWNlCi0gKiBAaW5wdXRfZGV2Ogl0aGUgc3RydWN0IGlucHV0X2RldiBkZXNjcmlwdG9yIG9mIHRoZSBkZXZpY2UKLSAqIEBkdXJhdGlvbjoJdGhlIHN0cnVjdCBpcl9yYXdfZXZlbnQgZGVzY3JpcHRvciBvZiB0aGUgcHVsc2Uvc3BhY2UKLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgLUVJTlZBTCBpZiB0aGUgcHVsc2UgdmlvbGF0ZXMgdGhlIHN0YXRlIG1hY2hpbmUKLSAqLwotc3RhdGljIGludCBpcl9uZWNfZGVjb2RlKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2Rldiwgc3RydWN0IGlyX3Jhd19ldmVudCBldikKLXsKLQlzdHJ1Y3QgaXJfaW5wdXRfZGV2ICppcl9kZXYgPSBpbnB1dF9nZXRfZHJ2ZGF0YShpbnB1dF9kZXYpOwotCXN0cnVjdCBuZWNfZGVjICpkYXRhID0gJmlyX2Rldi0+cmF3LT5uZWM7Ci0JdTMyIHNjYW5jb2RlOwotCXU4IGFkZHJlc3MsIG5vdF9hZGRyZXNzLCBjb21tYW5kLCBub3RfY29tbWFuZDsKLQotCWlmICghKGlyX2Rldi0+cmF3LT5lbmFibGVkX3Byb3RvY29scyAmIElSX1RZUEVfTkVDKSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoIWlzX3RpbWluZ19ldmVudChldikpIHsKLQkJaWYgKGV2LnJlc2V0KQotCQkJZGF0YS0+c3RhdGUgPSBTVEFURV9JTkFDVElWRTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JSVJfZHByaW50aygyLCAiTkVDIGRlY29kZSBzdGFydGVkIGF0IHN0YXRlICVkICgldXVzICVzKVxuIiwKLQkJICAgZGF0YS0+c3RhdGUsIFRPX1VTKGV2LmR1cmF0aW9uKSwgVE9fU1RSKGV2LnB1bHNlKSk7Ci0KLQlzd2l0Y2ggKGRhdGEtPnN0YXRlKSB7Ci0KLQljYXNlIFNUQVRFX0lOQUNUSVZFOgotCQlpZiAoIWV2LnB1bHNlKQotCQkJYnJlYWs7Ci0KLQkJaWYgKGVxX21hcmdpbihldi5kdXJhdGlvbiwgTkVDX0hFQURFUl9QVUxTRSwgTkVDX1VOSVQgLyAyKSkgewotCQkJZGF0YS0+aXNfbmVjX3ggPSBmYWxzZTsKLQkJCWRhdGEtPm5lY3hfcmVwZWF0ID0gZmFsc2U7Ci0JCX0gZWxzZSBpZiAoZXFfbWFyZ2luKGV2LmR1cmF0aW9uLCBORUNYX0hFQURFUl9QVUxTRSwgTkVDX1VOSVQgLyAyKSkKLQkJCWRhdGEtPmlzX25lY194ID0gdHJ1ZTsKLQkJZWxzZQotCQkJYnJlYWs7Ci0KLQkJZGF0YS0+Y291bnQgPSAwOwotCQlkYXRhLT5zdGF0ZSA9IFNUQVRFX0hFQURFUl9TUEFDRTsKLQkJcmV0dXJuIDA7Ci0KLQljYXNlIFNUQVRFX0hFQURFUl9TUEFDRToKLQkJaWYgKGV2LnB1bHNlKQotCQkJYnJlYWs7Ci0KLQkJaWYgKGVxX21hcmdpbihldi5kdXJhdGlvbiwgTkVDX0hFQURFUl9TUEFDRSwgTkVDX1VOSVQgLyAyKSkgewotCQkJZGF0YS0+c3RhdGUgPSBTVEFURV9CSVRfUFVMU0U7Ci0JCQlyZXR1cm4gMDsKLQkJfSBlbHNlIGlmIChlcV9tYXJnaW4oZXYuZHVyYXRpb24sIE5FQ19SRVBFQVRfU1BBQ0UsIE5FQ19VTklUIC8gMikpIHsKLQkJCWlyX3JlcGVhdChpbnB1dF9kZXYpOwotCQkJSVJfZHByaW50aygxLCAiUmVwZWF0IGxhc3Qga2V5XG4iKTsKLQkJCWRhdGEtPnN0YXRlID0gU1RBVEVfVFJBSUxFUl9QVUxTRTsKLQkJCXJldHVybiAwOwotCQl9Ci0KLQkJYnJlYWs7Ci0KLQljYXNlIFNUQVRFX0JJVF9QVUxTRToKLQkJaWYgKCFldi5wdWxzZSkKLQkJCWJyZWFrOwotCi0JCWlmICghZXFfbWFyZ2luKGV2LmR1cmF0aW9uLCBORUNfQklUX1BVTFNFLCBORUNfVU5JVCAvIDIpKQotCQkJYnJlYWs7Ci0KLQkJZGF0YS0+c3RhdGUgPSBTVEFURV9CSVRfU1BBQ0U7Ci0JCXJldHVybiAwOwotCi0JY2FzZSBTVEFURV9CSVRfU1BBQ0U6Ci0JCWlmIChldi5wdWxzZSkKLQkJCWJyZWFrOwotCi0JCWlmIChkYXRhLT5uZWN4X3JlcGVhdCAmJiBkYXRhLT5jb3VudCA9PSBORUNYX1JFUEVBVF9CSVRTICYmCi0JCQlnZXFfbWFyZ2luKGV2LmR1cmF0aW9uLAotCQkJTkVDX1RSQUlMRVJfU1BBQ0UsIE5FQ19VTklUIC8gMikpIHsKLQkJCQlJUl9kcHJpbnRrKDEsICJSZXBlYXQgbGFzdCBrZXlcbiIpOwotCQkJCWlyX3JlcGVhdChpbnB1dF9kZXYpOwotCQkJCWRhdGEtPnN0YXRlID0gU1RBVEVfSU5BQ1RJVkU7Ci0JCQkJcmV0dXJuIDA7Ci0KLQkJfSBlbHNlIGlmIChkYXRhLT5jb3VudCA+IE5FQ1hfUkVQRUFUX0JJVFMpCi0JCQlkYXRhLT5uZWN4X3JlcGVhdCA9IGZhbHNlOwotCi0JCWRhdGEtPmJpdHMgPDw9IDE7Ci0JCWlmIChlcV9tYXJnaW4oZXYuZHVyYXRpb24sIE5FQ19CSVRfMV9TUEFDRSwgTkVDX1VOSVQgLyAyKSkKLQkJCWRhdGEtPmJpdHMgfD0gMTsKLQkJZWxzZSBpZiAoIWVxX21hcmdpbihldi5kdXJhdGlvbiwgTkVDX0JJVF8wX1NQQUNFLCBORUNfVU5JVCAvIDIpKQotCQkJYnJlYWs7Ci0JCWRhdGEtPmNvdW50Kys7Ci0KLQkJaWYgKGRhdGEtPmNvdW50ID09IE5FQ19OQklUUykKLQkJCWRhdGEtPnN0YXRlID0gU1RBVEVfVFJBSUxFUl9QVUxTRTsKLQkJZWxzZQotCQkJZGF0YS0+c3RhdGUgPSBTVEFURV9CSVRfUFVMU0U7Ci0KLQkJcmV0dXJuIDA7Ci0KLQljYXNlIFNUQVRFX1RSQUlMRVJfUFVMU0U6Ci0JCWlmICghZXYucHVsc2UpCi0JCQlicmVhazsKLQotCQlpZiAoIWVxX21hcmdpbihldi5kdXJhdGlvbiwgTkVDX1RSQUlMRVJfUFVMU0UsIE5FQ19VTklUIC8gMikpCi0JCQlicmVhazsKLQotCQlkYXRhLT5zdGF0ZSA9IFNUQVRFX1RSQUlMRVJfU1BBQ0U7Ci0JCXJldHVybiAwOwotCi0JY2FzZSBTVEFURV9UUkFJTEVSX1NQQUNFOgotCQlpZiAoZXYucHVsc2UpCi0JCQlicmVhazsKLQotCQlpZiAoIWdlcV9tYXJnaW4oZXYuZHVyYXRpb24sIE5FQ19UUkFJTEVSX1NQQUNFLCBORUNfVU5JVCAvIDIpKQotCQkJYnJlYWs7Ci0KLQkJYWRkcmVzcyAgICAgPSBiaXRyZXY4KChkYXRhLT5iaXRzID4+IDI0KSAmIDB4ZmYpOwotCQlub3RfYWRkcmVzcyA9IGJpdHJldjgoKGRhdGEtPmJpdHMgPj4gMTYpICYgMHhmZik7Ci0JCWNvbW1hbmQJICAgID0gYml0cmV2OCgoZGF0YS0+Yml0cyA+PiAgOCkgJiAweGZmKTsKLQkJbm90X2NvbW1hbmQgPSBiaXRyZXY4KChkYXRhLT5iaXRzID4+ICAwKSAmIDB4ZmYpOwotCi0JCWlmICgoY29tbWFuZCBeIG5vdF9jb21tYW5kKSAhPSAweGZmKSB7Ci0JCQlJUl9kcHJpbnRrKDEsICJORUMgY2hlY2tzdW0gZXJyb3I6IHJlY2VpdmVkIDB4JTA4eFxuIiwKLQkJCQkgICBkYXRhLT5iaXRzKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJaWYgKChhZGRyZXNzIF4gbm90X2FkZHJlc3MpICE9IDB4ZmYpIHsKLQkJCS8qIEV4dGVuZGVkIE5FQyAqLwotCQkJc2NhbmNvZGUgPSBhZGRyZXNzICAgICA8PCAxNiB8Ci0JCQkJICAgbm90X2FkZHJlc3MgPDwgIDggfAotCQkJCSAgIGNvbW1hbmQ7Ci0JCQlJUl9kcHJpbnRrKDEsICJORUMgKEV4dCkgc2NhbmNvZGUgMHglMDZ4XG4iLCBzY2FuY29kZSk7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBOb3JtYWwgTkVDICovCi0JCQlzY2FuY29kZSA9IGFkZHJlc3MgPDwgOCB8IGNvbW1hbmQ7Ci0JCQlJUl9kcHJpbnRrKDEsICJORUMgc2NhbmNvZGUgMHglMDR4XG4iLCBzY2FuY29kZSk7Ci0JCX0KLQotCQlpZiAoZGF0YS0+aXNfbmVjX3gpCi0JCQlkYXRhLT5uZWN4X3JlcGVhdCA9IHRydWU7Ci0KLQkJaXJfa2V5ZG93bihpbnB1dF9kZXYsIHNjYW5jb2RlLCAwKTsKLQkJZGF0YS0+c3RhdGUgPSBTVEFURV9JTkFDVElWRTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JSVJfZHByaW50aygxLCAiTkVDIGRlY29kZSBmYWlsZWQgYXQgc3RhdGUgJWQgKCV1dXMgJXMpXG4iLAotCQkgICBkYXRhLT5zdGF0ZSwgVE9fVVMoZXYuZHVyYXRpb24pLCBUT19TVFIoZXYucHVsc2UpKTsKLQlkYXRhLT5zdGF0ZSA9IFNUQVRFX0lOQUNUSVZFOwotCXJldHVybiAtRUlOVkFMOwotfQotCi1zdGF0aWMgc3RydWN0IGlyX3Jhd19oYW5kbGVyIG5lY19oYW5kbGVyID0gewotCS5wcm90b2NvbHMJPSBJUl9UWVBFX05FQywKLQkuZGVjb2RlCQk9IGlyX25lY19kZWNvZGUsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBpcl9uZWNfZGVjb2RlX2luaXQodm9pZCkKLXsKLQlpcl9yYXdfaGFuZGxlcl9yZWdpc3RlcigmbmVjX2hhbmRsZXIpOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiSVIgTkVDIHByb3RvY29sIGhhbmRsZXIgaW5pdGlhbGl6ZWRcbiIpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgaXJfbmVjX2RlY29kZV9leGl0KHZvaWQpCi17Ci0JaXJfcmF3X2hhbmRsZXJfdW5yZWdpc3RlcigmbmVjX2hhbmRsZXIpOwotfQotCi1tb2R1bGVfaW5pdChpcl9uZWNfZGVjb2RlX2luaXQpOwotbW9kdWxlX2V4aXQoaXJfbmVjX2RlY29kZV9leGl0KTsKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+Iik7Ci1NT0RVTEVfQVVUSE9SKCJSZWQgSGF0IEluYy4gKGh0dHA6Ly93d3cucmVkaGF0LmNvbSkiKTsKLU1PRFVMRV9ERVNDUklQVElPTigiTkVDIElSIHByb3RvY29sIGRlY29kZXIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvSVIvaXItcmF3LWV2ZW50LmMgYi9kcml2ZXJzL21lZGlhL0lSL2lyLXJhdy1ldmVudC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMDZhMDdlLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvSVIvaXItcmF3LWV2ZW50LmMKKysrIC9kZXYvbnVsbApAQCAtMSwzODIgKzAsMCBAQAotLyogaXItcmF3LWV2ZW50LmMgLSBoYW5kbGUgSVIgUHVsc2UvU3BhY2UgZXZlbnQKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgYnkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+Ci0jaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L2ZyZWV6ZXIuaD4KLSNpbmNsdWRlICJpci1jb3JlLXByaXYuaCIKLQotLyogRGVmaW5lIHRoZSBtYXggbnVtYmVyIG9mIHB1bHNlL3NwYWNlIHRyYW5zaXRpb25zIHRvIGJ1ZmZlciAqLwotI2RlZmluZSBNQVhfSVJfRVZFTlRfU0laRSAgICAgIDUxMgotCi0vKiBVc2VkIHRvIGtlZXAgdHJhY2sgb2YgSVIgcmF3IGNsaWVudHMsIHByb3RlY3RlZCBieSBpcl9yYXdfaGFuZGxlcl9sb2NrICovCi1zdGF0aWMgTElTVF9IRUFEKGlyX3Jhd19jbGllbnRfbGlzdCk7Ci0KLS8qIFVzZWQgdG8gaGFuZGxlIElSIHJhdyBoYW5kbGVyIGV4dGVuc2lvbnMgKi8KLXN0YXRpYyBERUZJTkVfTVVURVgoaXJfcmF3X2hhbmRsZXJfbG9jayk7Ci1zdGF0aWMgTElTVF9IRUFEKGlyX3Jhd19oYW5kbGVyX2xpc3QpOwotc3RhdGljIHU2NCBhdmFpbGFibGVfcHJvdG9jb2xzOwotCi0jaWZkZWYgTU9EVUxFCi0vKiBVc2VkIHRvIGxvYWQgdGhlIGRlY29kZXJzICovCi1zdGF0aWMgc3RydWN0IHdvcmtfc3RydWN0IHdxX2xvYWQ7Ci0jZW5kaWYKLQotc3RhdGljIGludCBpcl9yYXdfZXZlbnRfdGhyZWFkKHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGlyX3Jhd19ldmVudCBldjsKLQlzdHJ1Y3QgaXJfcmF3X2hhbmRsZXIgKmhhbmRsZXI7Ci0Jc3RydWN0IGlyX3Jhd19ldmVudF9jdHJsICpyYXcgPSAoc3RydWN0IGlyX3Jhd19ldmVudF9jdHJsICopZGF0YTsKLQlpbnQgcmV0dmFsOwotCi0Jd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKLQotCQlzcGluX2xvY2tfaXJxKCZyYXctPmxvY2spOwotCQlyZXR2YWwgPSBrZmlmb19vdXQoJnJhdy0+a2ZpZm8sICZldiwgc2l6ZW9mKGV2KSk7Ci0KLQkJaWYgKCFyZXR2YWwpIHsKLQkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0KLQkJCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkpCi0JCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKLQotCQkJc3Bpbl91bmxvY2tfaXJxKCZyYXctPmxvY2spOwotCQkJc2NoZWR1bGUoKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJc3Bpbl91bmxvY2tfaXJxKCZyYXctPmxvY2spOwotCi0KLQkJQlVHX09OKHJldHZhbCAhPSBzaXplb2YoZXYpKTsKLQotCQltdXRleF9sb2NrKCZpcl9yYXdfaGFuZGxlcl9sb2NrKTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShoYW5kbGVyLCAmaXJfcmF3X2hhbmRsZXJfbGlzdCwgbGlzdCkKLQkJCWhhbmRsZXItPmRlY29kZShyYXctPmlucHV0X2RldiwgZXYpOwotCQlyYXctPnByZXZfZXYgPSBldjsKLQkJbXV0ZXhfdW5sb2NrKCZpcl9yYXdfaGFuZGxlcl9sb2NrKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBpcl9yYXdfZXZlbnRfc3RvcmUoKSAtIHBhc3MgYSBwdWxzZS9zcGFjZSBkdXJhdGlvbiB0byB0aGUgcmF3IGlyIGRlY29kZXJzCi0gKiBAaW5wdXRfZGV2Ogl0aGUgc3RydWN0IGlucHV0X2RldiBkZXZpY2UgZGVzY3JpcHRvcgotICogQGV2OgkJdGhlIHN0cnVjdCBpcl9yYXdfZXZlbnQgZGVzY3JpcHRvciBvZiB0aGUgcHVsc2Uvc3BhY2UKLSAqCi0gKiBUaGlzIHJvdXRpbmUgKHdoaWNoIG1heSBiZSBjYWxsZWQgZnJvbSBhbiBpbnRlcnJ1cHQgY29udGV4dCkgc3RvcmVzIGEKLSAqIHB1bHNlL3NwYWNlIGR1cmF0aW9uIGZvciB0aGUgcmF3IGlyIGRlY29kaW5nIHN0YXRlIG1hY2hpbmVzLiBQdWxzZXMgYXJlCi0gKiBzaWduYWxsZWQgYXMgcG9zaXRpdmUgdmFsdWVzIGFuZCBzcGFjZXMgYXMgbmVnYXRpdmUgdmFsdWVzLiBBIHplcm8gdmFsdWUKLSAqIHdpbGwgcmVzZXQgdGhlIGRlY29kaW5nIHN0YXRlIG1hY2hpbmVzLgotICovCi1pbnQgaXJfcmF3X2V2ZW50X3N0b3JlKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2Rldiwgc3RydWN0IGlyX3Jhd19ldmVudCAqZXYpCi17Ci0Jc3RydWN0IGlyX2lucHV0X2RldiAqaXIgPSBpbnB1dF9nZXRfZHJ2ZGF0YShpbnB1dF9kZXYpOwotCi0JaWYgKCFpci0+cmF3KQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCUlSX2RwcmludGsoMiwgInNhbXBsZTogKCUwNWR1cyAlcylcbiIsCi0JCVRPX1VTKGV2LT5kdXJhdGlvbiksIFRPX1NUUihldi0+cHVsc2UpKTsKLQotCWlmIChrZmlmb19pbigmaXItPnJhdy0+a2ZpZm8sIGV2LCBzaXplb2YoKmV2KSkgIT0gc2l6ZW9mKCpldikpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpcl9yYXdfZXZlbnRfc3RvcmUpOwotCi0vKioKLSAqIGlyX3Jhd19ldmVudF9zdG9yZV9lZGdlKCkgLSBub3RpZnkgcmF3IGlyIGRlY29kZXJzIG9mIHRoZSBzdGFydCBvZiBhIHB1bHNlL3NwYWNlCi0gKiBAaW5wdXRfZGV2Ogl0aGUgc3RydWN0IGlucHV0X2RldiBkZXZpY2UgZGVzY3JpcHRvcgotICogQHR5cGU6CXRoZSB0eXBlIG9mIHRoZSBldmVudCB0aGF0IGhhcyBvY2N1cnJlZAotICoKLSAqIFRoaXMgcm91dGluZSAod2hpY2ggbWF5IGJlIGNhbGxlZCBmcm9tIGFuIGludGVycnVwdCBjb250ZXh0KSBpcyB1c2VkIHRvCi0gKiBzdG9yZSB0aGUgYmVnaW5uaW5nIG9mIGFuIGlyIHB1bHNlIG9yIHNwYWNlIChvciB0aGUgc3RhcnQvZW5kIG9mIGlyCi0gKiByZWNlcHRpb24pIGZvciB0aGUgcmF3IGlyIGRlY29kaW5nIHN0YXRlIG1hY2hpbmVzLiBUaGlzIGlzIHVzZWQgYnkKLSAqIGhhcmR3YXJlIHdoaWNoIGRvZXMgbm90IHByb3ZpZGUgZHVyYXRpb25zIGRpcmVjdGx5IGJ1dCBvbmx5IGludGVycnVwdHMKLSAqIChvciBzaW1pbGFyIGV2ZW50cykgb24gc3RhdGUgY2hhbmdlLgotICovCi1pbnQgaXJfcmF3X2V2ZW50X3N0b3JlX2VkZ2Uoc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2LCBlbnVtIHJhd19ldmVudF90eXBlIHR5cGUpCi17Ci0Jc3RydWN0IGlyX2lucHV0X2RldgkqaXIgPSBpbnB1dF9nZXRfZHJ2ZGF0YShpbnB1dF9kZXYpOwotCWt0aW1lX3QJCQlub3c7Ci0JczY0CQkJZGVsdGE7IC8qIG5zICovCi0Jc3RydWN0IGlyX3Jhd19ldmVudAlldjsKLQlpbnQJCQlyYyA9IDA7Ci0KLQlpZiAoIWlyLT5yYXcpCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jbm93ID0ga3RpbWVfZ2V0KCk7Ci0JZGVsdGEgPSBrdGltZV90b19ucyhrdGltZV9zdWIobm93LCBpci0+cmF3LT5sYXN0X2V2ZW50KSk7Ci0KLQkvKiBDaGVjayBmb3IgYSBsb25nIGR1cmF0aW9uIHNpbmNlIGxhc3QgZXZlbnQgb3IgaWYgd2UncmUKLQkgKiBiZWluZyBjYWxsZWQgZm9yIHRoZSBmaXJzdCB0aW1lLCBub3RlIHRoYXQgZGVsdGEgY2FuJ3QKLQkgKiBwb3NzaWJseSBiZSBuZWdhdGl2ZS4KLQkgKi8KLQlldi5kdXJhdGlvbiA9IDA7Ci0JaWYgKGRlbHRhID4gSVJfTUFYX0RVUkFUSU9OIHx8ICFpci0+cmF3LT5sYXN0X3R5cGUpCi0JCXR5cGUgfD0gSVJfU1RBUlRfRVZFTlQ7Ci0JZWxzZQotCQlldi5kdXJhdGlvbiA9IGRlbHRhOwotCi0JaWYgKHR5cGUgJiBJUl9TVEFSVF9FVkVOVCkKLQkJaXJfcmF3X2V2ZW50X3Jlc2V0KGlucHV0X2Rldik7Ci0JZWxzZSBpZiAoaXItPnJhdy0+bGFzdF90eXBlICYgSVJfU1BBQ0UpIHsKLQkJZXYucHVsc2UgPSBmYWxzZTsKLQkJcmMgPSBpcl9yYXdfZXZlbnRfc3RvcmUoaW5wdXRfZGV2LCAmZXYpOwotCX0gZWxzZSBpZiAoaXItPnJhdy0+bGFzdF90eXBlICYgSVJfUFVMU0UpIHsKLQkJZXYucHVsc2UgPSB0cnVlOwotCQlyYyA9IGlyX3Jhd19ldmVudF9zdG9yZShpbnB1dF9kZXYsICZldik7Ci0JfSBlbHNlCi0JCXJldHVybiAwOwotCi0JaXItPnJhdy0+bGFzdF9ldmVudCA9IG5vdzsKLQlpci0+cmF3LT5sYXN0X3R5cGUgPSB0eXBlOwotCXJldHVybiByYzsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGlyX3Jhd19ldmVudF9zdG9yZV9lZGdlKTsKLQotLyoqCi0gKiBpcl9yYXdfZXZlbnRfc3RvcmVfd2l0aF9maWx0ZXIoKSAtIHBhc3MgbmV4dCBwdWxzZS9zcGFjZSB0byBkZWNvZGVycyB3aXRoIHNvbWUgcHJvY2Vzc2luZwotICogQGlucHV0X2RldjoJdGhlIHN0cnVjdCBpbnB1dF9kZXYgZGV2aWNlIGRlc2NyaXB0b3IKLSAqIEB0eXBlOgl0aGUgdHlwZSBvZiB0aGUgZXZlbnQgdGhhdCBoYXMgb2NjdXJyZWQKLSAqCi0gKiBUaGlzIHJvdXRpbmUgKHdoaWNoIG1heSBiZSBjYWxsZWQgZnJvbSBhbiBpbnRlcnJ1cHQgY29udGV4dCkgd29ya3MKLSAqIGluIHNpbWlsaWFyIG1hbm5lciB0byBpcl9yYXdfZXZlbnRfc3RvcmVfZWRnZS4KLSAqIFRoaXMgcm91dGluZSBpcyBpbnRlbmRlZCBmb3IgZGV2aWNlcyB3aXRoIGxpbWl0ZWQgaW50ZXJuYWwgYnVmZmVyCi0gKiBJdCBhdXRvbWVyZ2VzIHNhbXBsZXMgb2Ygc2FtZSB0eXBlLCBhbmQgaGFuZGxlcyB0aW1lb3V0cwotICovCi1pbnQgaXJfcmF3X2V2ZW50X3N0b3JlX3dpdGhfZmlsdGVyKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldiwKLQkJCQkJCXN0cnVjdCBpcl9yYXdfZXZlbnQgKmV2KQotewotCXN0cnVjdCBpcl9pbnB1dF9kZXYgKmlyID0gaW5wdXRfZ2V0X2RydmRhdGEoaW5wdXRfZGV2KTsKLQlzdHJ1Y3QgaXJfcmF3X2V2ZW50X2N0cmwgKnJhdyA9IGlyLT5yYXc7Ci0KLQlpZiAoIXJhdyB8fCAhaXItPnByb3BzKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8qIElnbm9yZSBzcGFjZXMgaW4gaWRsZSBtb2RlICovCi0JaWYgKGlyLT5pZGxlICYmICFldi0+cHVsc2UpCi0JCXJldHVybiAwOwotCWVsc2UgaWYgKGlyLT5pZGxlKQotCQlpcl9yYXdfZXZlbnRfc2V0X2lkbGUoaW5wdXRfZGV2LCBmYWxzZSk7Ci0KLQlpZiAoIXJhdy0+dGhpc19ldi5kdXJhdGlvbikgewotCQlyYXctPnRoaXNfZXYgPSAqZXY7Ci0JfSBlbHNlIGlmIChldi0+cHVsc2UgPT0gcmF3LT50aGlzX2V2LnB1bHNlKSB7Ci0JCXJhdy0+dGhpc19ldi5kdXJhdGlvbiArPSBldi0+ZHVyYXRpb247Ci0JfSBlbHNlIHsKLQkJaXJfcmF3X2V2ZW50X3N0b3JlKGlucHV0X2RldiwgJnJhdy0+dGhpc19ldik7Ci0JCXJhdy0+dGhpc19ldiA9ICpldjsKLQl9Ci0KLQkvKiBFbnRlciBpZGxlIG1vZGUgaWYgbmVzc2VzYXJ5ICovCi0JaWYgKCFldi0+cHVsc2UgJiYgaXItPnByb3BzLT50aW1lb3V0ICYmCi0JCXJhdy0+dGhpc19ldi5kdXJhdGlvbiA+PSBpci0+cHJvcHMtPnRpbWVvdXQpIHsKLQkJaXJfcmF3X2V2ZW50X3NldF9pZGxlKGlucHV0X2RldiwgdHJ1ZSk7Ci0JfQotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoaXJfcmF3X2V2ZW50X3N0b3JlX3dpdGhfZmlsdGVyKTsKLQotLyoqCi0gKiBpcl9yYXdfZXZlbnRfc2V0X2lkbGUoKSAtIGhpbnQgdGhlIGlyIGNvcmUgaWYgZGV2aWNlIGlzIHJlY2VpdmluZwotICogSVIgZGF0YSBvciBub3QKLSAqIEBpbnB1dF9kZXY6IHRoZSBzdHJ1Y3QgaW5wdXRfZGV2IGRldmljZSBkZXNjcmlwdG9yCi0gKiBAaWRsZTogdGhlIGhpbnQgdmFsdWUKLSAqLwotdm9pZCBpcl9yYXdfZXZlbnRfc2V0X2lkbGUoc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2LCBib29sIGlkbGUpCi17Ci0Jc3RydWN0IGlyX2lucHV0X2RldiAqaXIgPSBpbnB1dF9nZXRfZHJ2ZGF0YShpbnB1dF9kZXYpOwotCXN0cnVjdCBpcl9yYXdfZXZlbnRfY3RybCAqcmF3ID0gaXItPnJhdzsKLQotCWlmICghaXItPnByb3BzIHx8ICFpci0+cmF3KQotCQlyZXR1cm47Ci0KLQlJUl9kcHJpbnRrKDIsICIlcyBpZGxlIG1vZGVcbiIsIGlkbGUgPyAiZW50ZXIiIDogImxlYXZlIik7Ci0KLQlpZiAoaWRsZSkgewotCQlyYXctPnRoaXNfZXYudGltZW91dCA9IHRydWU7Ci0JCWlyX3Jhd19ldmVudF9zdG9yZShpbnB1dF9kZXYsICZyYXctPnRoaXNfZXYpOwotCQlpbml0X2lyX3Jhd19ldmVudCgmcmF3LT50aGlzX2V2KTsKLQl9Ci0KLQlpZiAoaXItPnByb3BzLT5zX2lkbGUpCi0JCWlyLT5wcm9wcy0+c19pZGxlKGlyLT5wcm9wcy0+cHJpdiwgaWRsZSk7Ci0JaXItPmlkbGUgPSBpZGxlOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoaXJfcmF3X2V2ZW50X3NldF9pZGxlKTsKLQotLyoqCi0gKiBpcl9yYXdfZXZlbnRfaGFuZGxlKCkgLSBzY2hlZHVsZXMgdGhlIGRlY29kaW5nIG9mIHN0b3JlZCBpciBkYXRhCi0gKiBAaW5wdXRfZGV2Ogl0aGUgc3RydWN0IGlucHV0X2RldiBkZXZpY2UgZGVzY3JpcHRvcgotICoKLSAqIFRoaXMgcm91dGluZSB3aWxsIHNpZ25hbCB0aGUgd29ya3F1ZXVlIHRvIHN0YXJ0IGRlY29kaW5nIHN0b3JlZCBpciBkYXRhLgotICovCi12b2lkIGlyX3Jhd19ldmVudF9oYW5kbGUoc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2KQotewotCXN0cnVjdCBpcl9pbnB1dF9kZXYgKmlyID0gaW5wdXRfZ2V0X2RydmRhdGEoaW5wdXRfZGV2KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKCFpci0+cmF3KQotCQlyZXR1cm47Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaXItPnJhdy0+bG9jaywgZmxhZ3MpOwotCXdha2VfdXBfcHJvY2Vzcyhpci0+cmF3LT50aHJlYWQpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlyLT5yYXctPmxvY2ssIGZsYWdzKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGlyX3Jhd19ldmVudF9oYW5kbGUpOwotCi0vKiB1c2VkIGludGVybmFsbHkgYnkgdGhlIHN5c2ZzIGludGVyZmFjZSAqLwotdTY0Ci1pcl9yYXdfZ2V0X2FsbG93ZWRfcHJvdG9jb2xzKCkKLXsKLQl1NjQgcHJvdG9jb2xzOwotCW11dGV4X2xvY2soJmlyX3Jhd19oYW5kbGVyX2xvY2spOwotCXByb3RvY29scyA9IGF2YWlsYWJsZV9wcm90b2NvbHM7Ci0JbXV0ZXhfdW5sb2NrKCZpcl9yYXdfaGFuZGxlcl9sb2NrKTsKLQlyZXR1cm4gcHJvdG9jb2xzOwotfQotCi0vKgotICogVXNlZCB0byAodW4pcmVnaXN0ZXIgcmF3IGV2ZW50IGNsaWVudHMKLSAqLwotaW50IGlyX3Jhd19ldmVudF9yZWdpc3RlcihzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYpCi17Ci0Jc3RydWN0IGlyX2lucHV0X2RldiAqaXIgPSBpbnB1dF9nZXRfZHJ2ZGF0YShpbnB1dF9kZXYpOwotCWludCByYzsKLQlzdHJ1Y3QgaXJfcmF3X2hhbmRsZXIgKmhhbmRsZXI7Ci0KLQlpci0+cmF3ID0ga3phbGxvYyhzaXplb2YoKmlyLT5yYXcpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWlyLT5yYXcpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JaXItPnJhdy0+aW5wdXRfZGV2ID0gaW5wdXRfZGV2OwotCi0JaXItPnJhdy0+ZW5hYmxlZF9wcm90b2NvbHMgPSB+MDsKLQlyYyA9IGtmaWZvX2FsbG9jKCZpci0+cmF3LT5rZmlmbywgc2l6ZW9mKHM2NCkgKiBNQVhfSVJfRVZFTlRfU0laRSwKLQkJCSBHRlBfS0VSTkVMKTsKLQlpZiAocmMgPCAwKSB7Ci0JCWtmcmVlKGlyLT5yYXcpOwotCQlpci0+cmF3ID0gTlVMTDsKLQkJcmV0dXJuIHJjOwotCX0KLQotCXNwaW5fbG9ja19pbml0KCZpci0+cmF3LT5sb2NrKTsKLQlpci0+cmF3LT50aHJlYWQgPSBrdGhyZWFkX3J1bihpcl9yYXdfZXZlbnRfdGhyZWFkLCBpci0+cmF3LAotCQkJInJjJXUiLCAgKHVuc2lnbmVkIGludClpci0+ZGV2bm8pOwotCi0JaWYgKElTX0VSUihpci0+cmF3LT50aHJlYWQpKSB7Ci0JCWludCByZXQgPSBQVFJfRVJSKGlyLT5yYXctPnRocmVhZCk7Ci0KLQkJa2ZyZWUoaXItPnJhdyk7Ci0JCWlyLT5yYXcgPSBOVUxMOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCW11dGV4X2xvY2soJmlyX3Jhd19oYW5kbGVyX2xvY2spOwotCWxpc3RfYWRkX3RhaWwoJmlyLT5yYXctPmxpc3QsICZpcl9yYXdfY2xpZW50X2xpc3QpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoaGFuZGxlciwgJmlyX3Jhd19oYW5kbGVyX2xpc3QsIGxpc3QpCi0JCWlmIChoYW5kbGVyLT5yYXdfcmVnaXN0ZXIpCi0JCQloYW5kbGVyLT5yYXdfcmVnaXN0ZXIoaXItPnJhdy0+aW5wdXRfZGV2KTsKLQltdXRleF91bmxvY2soJmlyX3Jhd19oYW5kbGVyX2xvY2spOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgaXJfcmF3X2V2ZW50X3VucmVnaXN0ZXIoc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2KQotewotCXN0cnVjdCBpcl9pbnB1dF9kZXYgKmlyID0gaW5wdXRfZ2V0X2RydmRhdGEoaW5wdXRfZGV2KTsKLQlzdHJ1Y3QgaXJfcmF3X2hhbmRsZXIgKmhhbmRsZXI7Ci0KLQlpZiAoIWlyLT5yYXcpCi0JCXJldHVybjsKLQotCWt0aHJlYWRfc3RvcChpci0+cmF3LT50aHJlYWQpOwotCi0JbXV0ZXhfbG9jaygmaXJfcmF3X2hhbmRsZXJfbG9jayk7Ci0JbGlzdF9kZWwoJmlyLT5yYXctPmxpc3QpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoaGFuZGxlciwgJmlyX3Jhd19oYW5kbGVyX2xpc3QsIGxpc3QpCi0JCWlmIChoYW5kbGVyLT5yYXdfdW5yZWdpc3RlcikKLQkJCWhhbmRsZXItPnJhd191bnJlZ2lzdGVyKGlyLT5yYXctPmlucHV0X2Rldik7Ci0JbXV0ZXhfdW5sb2NrKCZpcl9yYXdfaGFuZGxlcl9sb2NrKTsKLQotCWtmaWZvX2ZyZWUoJmlyLT5yYXctPmtmaWZvKTsKLQlrZnJlZShpci0+cmF3KTsKLQlpci0+cmF3ID0gTlVMTDsKLX0KLQotLyoKLSAqIEV4dGVuc2lvbiBpbnRlcmZhY2UgLSB1c2VkIHRvIHJlZ2lzdGVyIHRoZSBJUiBkZWNvZGVycwotICovCi0KLWludCBpcl9yYXdfaGFuZGxlcl9yZWdpc3RlcihzdHJ1Y3QgaXJfcmF3X2hhbmRsZXIgKmlyX3Jhd19oYW5kbGVyKQotewotCXN0cnVjdCBpcl9yYXdfZXZlbnRfY3RybCAqcmF3OwotCi0JbXV0ZXhfbG9jaygmaXJfcmF3X2hhbmRsZXJfbG9jayk7Ci0JbGlzdF9hZGRfdGFpbCgmaXJfcmF3X2hhbmRsZXItPmxpc3QsICZpcl9yYXdfaGFuZGxlcl9saXN0KTsKLQlpZiAoaXJfcmF3X2hhbmRsZXItPnJhd19yZWdpc3RlcikKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShyYXcsICZpcl9yYXdfY2xpZW50X2xpc3QsIGxpc3QpCi0JCQlpcl9yYXdfaGFuZGxlci0+cmF3X3JlZ2lzdGVyKHJhdy0+aW5wdXRfZGV2KTsKLQlhdmFpbGFibGVfcHJvdG9jb2xzIHw9IGlyX3Jhd19oYW5kbGVyLT5wcm90b2NvbHM7Ci0JbXV0ZXhfdW5sb2NrKCZpcl9yYXdfaGFuZGxlcl9sb2NrKTsKLQotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTChpcl9yYXdfaGFuZGxlcl9yZWdpc3Rlcik7Ci0KLXZvaWQgaXJfcmF3X2hhbmRsZXJfdW5yZWdpc3RlcihzdHJ1Y3QgaXJfcmF3X2hhbmRsZXIgKmlyX3Jhd19oYW5kbGVyKQotewotCXN0cnVjdCBpcl9yYXdfZXZlbnRfY3RybCAqcmF3OwotCi0JbXV0ZXhfbG9jaygmaXJfcmF3X2hhbmRsZXJfbG9jayk7Ci0JbGlzdF9kZWwoJmlyX3Jhd19oYW5kbGVyLT5saXN0KTsKLQlpZiAoaXJfcmF3X2hhbmRsZXItPnJhd191bnJlZ2lzdGVyKQotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJhdywgJmlyX3Jhd19jbGllbnRfbGlzdCwgbGlzdCkKLQkJCWlyX3Jhd19oYW5kbGVyLT5yYXdfdW5yZWdpc3RlcihyYXctPmlucHV0X2Rldik7Ci0JYXZhaWxhYmxlX3Byb3RvY29scyAmPSB+aXJfcmF3X2hhbmRsZXItPnByb3RvY29sczsKLQltdXRleF91bmxvY2soJmlyX3Jhd19oYW5kbGVyX2xvY2spOwotfQotRVhQT1JUX1NZTUJPTChpcl9yYXdfaGFuZGxlcl91bnJlZ2lzdGVyKTsKLQotI2lmZGVmIE1PRFVMRQotc3RhdGljIHZvaWQgaW5pdF9kZWNvZGVycyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0JLyogTG9hZCB0aGUgZGVjb2RlciBtb2R1bGVzICovCi0KLQlsb2FkX25lY19kZWNvZGUoKTsKLQlsb2FkX3JjNV9kZWNvZGUoKTsKLQlsb2FkX3JjNl9kZWNvZGUoKTsKLQlsb2FkX2p2Y19kZWNvZGUoKTsKLQlsb2FkX3NvbnlfZGVjb2RlKCk7Ci0JbG9hZF9saXJjX2NvZGVjKCk7Ci0KLQkvKiBJZiBuZWVkZWQsIHdlIG1heSBsYXRlciBhZGQgc29tZSBpbml0IGNvZGUuIEluIHRoaXMgY2FzZSwKLQkgICBpdCBpcyBuZWVkZWQgdG8gY2hhbmdlIHRoZSBDT05GSUdfTU9EVUxFIHRlc3QgYXQgaXItY29yZS5oCi0JICovCi19Ci0jZW5kaWYKLQotdm9pZCBpcl9yYXdfaW5pdCh2b2lkKQotewotI2lmZGVmIE1PRFVMRQotCUlOSVRfV09SSygmd3FfbG9hZCwgaW5pdF9kZWNvZGVycyk7Ci0Jc2NoZWR1bGVfd29yaygmd3FfbG9hZCk7Ci0jZW5kaWYKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvSVIvaXItcmM1LWRlY29kZXIuYyBiL2RyaXZlcnMvbWVkaWEvSVIvaXItcmM1LWRlY29kZXIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTcyZWQ0Yy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL0lSL2lyLXJjNS1kZWNvZGVyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxOTAgKzAsMCBAQAotLyogaXItcmM1LWRlY29kZXIuYyAtIGhhbmRsZSBSQzUoeCkgSVIgUHVsc2UvU3BhY2UgcHJvdG9jb2wKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgYnkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0KLS8qCi0gKiBUaGlzIGNvZGUgaGFuZGxlcyAxNCBiaXRzIFJDNSBwcm90b2NvbHMgYW5kIDIwIGJpdHMgUkM1eCBwcm90b2NvbHMuCi0gKiBUaGVyZSBhcmUgb3RoZXIgdmFyaWFudHMgdGhhdCB1c2UgYSBkaWZmZXJlbnQgbnVtYmVyIG9mIGJpdHMuCi0gKiBUaGlzIGlzIGN1cnJlbnRseSB1bnN1cHBvcnRlZC4KLSAqIEl0IGNvbnNpZGVycyBhIGNhcnJpZXIgb2YgMzYga0h6LCB3aXRoIGEgdG90YWwgb2YgMTQvMjAgYml0cywgd2hlcmUKLSAqIHRoZSBmaXJzdCB0d28gYml0cyBhcmUgc3RhcnQgYml0cywgYW5kIGEgdGhpcmQgb25lIGlzIGEgZmlsaW5nIGJpdAotICovCi0KLSNpbmNsdWRlICJpci1jb3JlLXByaXYuaCIKLQotI2RlZmluZSBSQzVfTkJJVFMJCTE0Ci0jZGVmaW5lIFJDNVhfTkJJVFMJCTIwCi0jZGVmaW5lIENIRUNLX1JDNVhfTkJJVFMJOAotI2RlZmluZSBSQzVfVU5JVAkJODg4ODg4IC8qIG5zICovCi0jZGVmaW5lIFJDNV9CSVRfU1RBUlQJCSgxICogUkM1X1VOSVQpCi0jZGVmaW5lIFJDNV9CSVRfRU5ECQkoMSAqIFJDNV9VTklUKQotI2RlZmluZSBSQzVYX1NQQUNFCQkoNCAqIFJDNV9VTklUKQotCi1lbnVtIHJjNV9zdGF0ZSB7Ci0JU1RBVEVfSU5BQ1RJVkUsCi0JU1RBVEVfQklUX1NUQVJULAotCVNUQVRFX0JJVF9FTkQsCi0JU1RBVEVfQ0hFQ0tfUkM1WCwKLQlTVEFURV9GSU5JU0hFRCwKLX07Ci0KLS8qKgotICogaXJfcmM1X2RlY29kZSgpIC0gRGVjb2RlIG9uZSBSQy01IHB1bHNlIG9yIHNwYWNlCi0gKiBAaW5wdXRfZGV2Ogl0aGUgc3RydWN0IGlucHV0X2RldiBkZXNjcmlwdG9yIG9mIHRoZSBkZXZpY2UKLSAqIEBldjoJCXRoZSBzdHJ1Y3QgaXJfcmF3X2V2ZW50IGRlc2NyaXB0b3Igb2YgdGhlIHB1bHNlL3NwYWNlCi0gKgotICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIC1FSU5WQUwgaWYgdGhlIHB1bHNlIHZpb2xhdGVzIHRoZSBzdGF0ZSBtYWNoaW5lCi0gKi8KLXN0YXRpYyBpbnQgaXJfcmM1X2RlY29kZShzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYsIHN0cnVjdCBpcl9yYXdfZXZlbnQgZXYpCi17Ci0Jc3RydWN0IGlyX2lucHV0X2RldiAqaXJfZGV2ID0gaW5wdXRfZ2V0X2RydmRhdGEoaW5wdXRfZGV2KTsKLQlzdHJ1Y3QgcmM1X2RlYyAqZGF0YSA9ICZpcl9kZXYtPnJhdy0+cmM1OwotCXU4IHRvZ2dsZTsKLQl1MzIgc2NhbmNvZGU7Ci0KLSAgICAgICAgaWYgKCEoaXJfZGV2LT5yYXctPmVuYWJsZWRfcHJvdG9jb2xzICYgSVJfVFlQRV9SQzUpKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotCi0JaWYgKCFpc190aW1pbmdfZXZlbnQoZXYpKSB7Ci0JCWlmIChldi5yZXNldCkKLQkJCWRhdGEtPnN0YXRlID0gU1RBVEVfSU5BQ1RJVkU7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmICghZ2VxX21hcmdpbihldi5kdXJhdGlvbiwgUkM1X1VOSVQsIFJDNV9VTklUIC8gMikpCi0JCWdvdG8gb3V0OwotCi1hZ2FpbjoKLQlJUl9kcHJpbnRrKDIsICJSQzUoeCkgZGVjb2RlIHN0YXJ0ZWQgYXQgc3RhdGUgJWkgKCV1dXMgJXMpXG4iLAotCQkgICBkYXRhLT5zdGF0ZSwgVE9fVVMoZXYuZHVyYXRpb24pLCBUT19TVFIoZXYucHVsc2UpKTsKLQotCWlmICghZ2VxX21hcmdpbihldi5kdXJhdGlvbiwgUkM1X1VOSVQsIFJDNV9VTklUIC8gMikpCi0JCXJldHVybiAwOwotCi0Jc3dpdGNoIChkYXRhLT5zdGF0ZSkgewotCi0JY2FzZSBTVEFURV9JTkFDVElWRToKLQkJaWYgKCFldi5wdWxzZSkKLQkJCWJyZWFrOwotCi0JCWRhdGEtPnN0YXRlID0gU1RBVEVfQklUX1NUQVJUOwotCQlkYXRhLT5jb3VudCA9IDE7Ci0JCS8qIFdlIGp1c3QgbmVlZCBlbm91Z2ggYml0cyB0byBnZXQgdG8gU1RBVEVfQ0hFQ0tfUkM1WCAqLwotCQlkYXRhLT53YW50ZWRfYml0cyA9IFJDNVhfTkJJVFM7Ci0JCWRlY3JlYXNlX2R1cmF0aW9uKCZldiwgUkM1X0JJVF9TVEFSVCk7Ci0JCWdvdG8gYWdhaW47Ci0KLQljYXNlIFNUQVRFX0JJVF9TVEFSVDoKLQkJaWYgKCFlcV9tYXJnaW4oZXYuZHVyYXRpb24sIFJDNV9CSVRfU1RBUlQsIFJDNV9VTklUIC8gMikpCi0JCQlicmVhazsKLQotCQlkYXRhLT5iaXRzIDw8PSAxOwotCQlpZiAoIWV2LnB1bHNlKQotCQkJZGF0YS0+Yml0cyB8PSAxOwotCQlkYXRhLT5jb3VudCsrOwotCQlkYXRhLT5zdGF0ZSA9IFNUQVRFX0JJVF9FTkQ7Ci0JCXJldHVybiAwOwotCi0JY2FzZSBTVEFURV9CSVRfRU5EOgotCQlpZiAoIWlzX3RyYW5zaXRpb24oJmV2LCAmaXJfZGV2LT5yYXctPnByZXZfZXYpKQotCQkJYnJlYWs7Ci0KLQkJaWYgKGRhdGEtPmNvdW50ID09IGRhdGEtPndhbnRlZF9iaXRzKQotCQkJZGF0YS0+c3RhdGUgPSBTVEFURV9GSU5JU0hFRDsKLQkJZWxzZSBpZiAoZGF0YS0+Y291bnQgPT0gQ0hFQ0tfUkM1WF9OQklUUykKLQkJCWRhdGEtPnN0YXRlID0gU1RBVEVfQ0hFQ0tfUkM1WDsKLQkJZWxzZQotCQkJZGF0YS0+c3RhdGUgPSBTVEFURV9CSVRfU1RBUlQ7Ci0KLQkJZGVjcmVhc2VfZHVyYXRpb24oJmV2LCBSQzVfQklUX0VORCk7Ci0JCWdvdG8gYWdhaW47Ci0KLQljYXNlIFNUQVRFX0NIRUNLX1JDNVg6Ci0JCWlmICghZXYucHVsc2UgJiYgZ2VxX21hcmdpbihldi5kdXJhdGlvbiwgUkM1WF9TUEFDRSwgUkM1X1VOSVQgLyAyKSkgewotCQkJLyogUkM1WCAqLwotCQkJZGF0YS0+d2FudGVkX2JpdHMgPSBSQzVYX05CSVRTOwotCQkJZGVjcmVhc2VfZHVyYXRpb24oJmV2LCBSQzVYX1NQQUNFKTsKLQkJfSBlbHNlIHsKLQkJCS8qIFJDNSAqLwotCQkJZGF0YS0+d2FudGVkX2JpdHMgPSBSQzVfTkJJVFM7Ci0JCX0KLQkJZGF0YS0+c3RhdGUgPSBTVEFURV9CSVRfU1RBUlQ7Ci0JCWdvdG8gYWdhaW47Ci0KLQljYXNlIFNUQVRFX0ZJTklTSEVEOgotCQlpZiAoZXYucHVsc2UpCi0JCQlicmVhazsKLQotCQlpZiAoZGF0YS0+d2FudGVkX2JpdHMgPT0gUkM1WF9OQklUUykgewotCQkJLyogUkM1WCAqLwotCQkJdTggeGRhdGEsIGNvbW1hbmQsIHN5c3RlbTsKLQkJCXhkYXRhICAgID0gKGRhdGEtPmJpdHMgJiAweDAwMDNGKSA+PiAwOwotCQkJY29tbWFuZCAgPSAoZGF0YS0+Yml0cyAmIDB4MDBGQzApID4+IDY7Ci0JCQlzeXN0ZW0gICA9IChkYXRhLT5iaXRzICYgMHgxRjAwMCkgPj4gMTI7Ci0JCQl0b2dnbGUgICA9IChkYXRhLT5iaXRzICYgMHgyMDAwMCkgPyAxIDogMDsKLQkJCWNvbW1hbmQgKz0gKGRhdGEtPmJpdHMgJiAweDAxMDAwKSA/IDAgOiAweDQwOwotCQkJc2NhbmNvZGUgPSBzeXN0ZW0gPDwgMTYgfCBjb21tYW5kIDw8IDggfCB4ZGF0YTsKLQotCQkJSVJfZHByaW50aygxLCAiUkM1WCBzY2FuY29kZSAweCUwNnggKHRvZ2dsZTogJXUpXG4iLAotCQkJCSAgIHNjYW5jb2RlLCB0b2dnbGUpOwotCi0JCX0gZWxzZSB7Ci0JCQkvKiBSQzUgKi8KLQkJCXU4IGNvbW1hbmQsIHN5c3RlbTsKLQkJCWNvbW1hbmQgID0gKGRhdGEtPmJpdHMgJiAweDAwMDNGKSA+PiAwOwotCQkJc3lzdGVtICAgPSAoZGF0YS0+Yml0cyAmIDB4MDA3QzApID4+IDY7Ci0JCQl0b2dnbGUgICA9IChkYXRhLT5iaXRzICYgMHgwMDgwMCkgPyAxIDogMDsKLQkJCWNvbW1hbmQgKz0gKGRhdGEtPmJpdHMgJiAweDAxMDAwKSA/IDAgOiAweDQwOwotCQkJc2NhbmNvZGUgPSBzeXN0ZW0gPDwgOCB8IGNvbW1hbmQ7Ci0KLQkJCUlSX2RwcmludGsoMSwgIlJDNSBzY2FuY29kZSAweCUwNHggKHRvZ2dsZTogJXUpXG4iLAotCQkJCSAgIHNjYW5jb2RlLCB0b2dnbGUpOwotCQl9Ci0KLQkJaXJfa2V5ZG93bihpbnB1dF9kZXYsIHNjYW5jb2RlLCB0b2dnbGUpOwotCQlkYXRhLT5zdGF0ZSA9IFNUQVRFX0lOQUNUSVZFOwotCQlyZXR1cm4gMDsKLQl9Ci0KLW91dDoKLQlJUl9kcHJpbnRrKDEsICJSQzUoeCkgZGVjb2RlIGZhaWxlZCBhdCBzdGF0ZSAlaSAoJXV1cyAlcylcbiIsCi0JCSAgIGRhdGEtPnN0YXRlLCBUT19VUyhldi5kdXJhdGlvbiksIFRPX1NUUihldi5wdWxzZSkpOwotCWRhdGEtPnN0YXRlID0gU1RBVEVfSU5BQ1RJVkU7Ci0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaXJfcmF3X2hhbmRsZXIgcmM1X2hhbmRsZXIgPSB7Ci0JLnByb3RvY29scwk9IElSX1RZUEVfUkM1LAotCS5kZWNvZGUJCT0gaXJfcmM1X2RlY29kZSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGlyX3JjNV9kZWNvZGVfaW5pdCh2b2lkKQotewotCWlyX3Jhd19oYW5kbGVyX3JlZ2lzdGVyKCZyYzVfaGFuZGxlcik7Ci0KLQlwcmludGsoS0VSTl9JTkZPICJJUiBSQzUoeCkgcHJvdG9jb2wgaGFuZGxlciBpbml0aWFsaXplZFxuIik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBpcl9yYzVfZGVjb2RlX2V4aXQodm9pZCkKLXsKLQlpcl9yYXdfaGFuZGxlcl91bnJlZ2lzdGVyKCZyYzVfaGFuZGxlcik7Ci19Ci0KLW1vZHVsZV9pbml0KGlyX3JjNV9kZWNvZGVfaW5pdCk7Ci1tb2R1bGVfZXhpdChpcl9yYzVfZGVjb2RlX2V4aXQpOwotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4iKTsKLU1PRFVMRV9BVVRIT1IoIlJlZCBIYXQgSW5jLiAoaHR0cDovL3d3dy5yZWRoYXQuY29tKSIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJSQzUoeCkgSVIgcHJvdG9jb2wgZGVjb2RlciIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9JUi9pci1yYzUtc3otZGVjb2Rlci5jIGIvZHJpdmVycy9tZWRpYS9JUi9pci1yYzUtc3otZGVjb2Rlci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YzQxMzUwLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvSVIvaXItcmM1LXN6LWRlY29kZXIuYworKysgL2Rldi9udWxsCkBAIC0xLDE1NCArMCwwIEBACi0vKiBpci1yYzUtc3otZGVjb2Rlci5jIC0gaGFuZGxlIFJDNSBTdHJlYW16YXAgSVIgUHVsc2UvU3BhY2UgcHJvdG9jb2wKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgYnkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgYnkgSmFyb2QgV2lsc29uIDxqYXJvZEByZWRoYXQuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqLwotCi0vKgotICogVGhpcyBjb2RlIGhhbmRsZXMgdGhlIDE1IGJpdCBSQzUtaXNoIHByb3RvY29sIHVzZWQgYnkgdGhlIFN0cmVhbXphcAotICogUEMgUmVtb3RlLgotICogSXQgY29uc2lkZXJzIGEgY2FycmllciBvZiAzNiBrSHosIHdpdGggYSB0b3RhbCBvZiAxNSBiaXRzLCB3aGVyZQotICogdGhlIGZpcnN0IHR3byBiaXRzIGFyZSBzdGFydCBiaXRzLCBhbmQgYSB0aGlyZCBvbmUgaXMgYSBmaWxpbmcgYml0Ci0gKi8KLQotI2luY2x1ZGUgImlyLWNvcmUtcHJpdi5oIgotCi0jZGVmaW5lIFJDNV9TWl9OQklUUwkJMTUKLSNkZWZpbmUgUkM1X1VOSVQJCTg4ODg4OCAvKiBucyAqLwotI2RlZmluZSBSQzVfQklUX1NUQVJUCQkoMSAqIFJDNV9VTklUKQotI2RlZmluZSBSQzVfQklUX0VORAkJKDEgKiBSQzVfVU5JVCkKLQotZW51bSByYzVfc3pfc3RhdGUgewotCVNUQVRFX0lOQUNUSVZFLAotCVNUQVRFX0JJVF9TVEFSVCwKLQlTVEFURV9CSVRfRU5ELAotCVNUQVRFX0ZJTklTSEVELAotfTsKLQotLyoqCi0gKiBpcl9yYzVfc3pfZGVjb2RlKCkgLSBEZWNvZGUgb25lIFJDLTUgU3RyZWFtemFwIHB1bHNlIG9yIHNwYWNlCi0gKiBAaW5wdXRfZGV2Ogl0aGUgc3RydWN0IGlucHV0X2RldiBkZXNjcmlwdG9yIG9mIHRoZSBkZXZpY2UKLSAqIEBldjoJCXRoZSBzdHJ1Y3QgaXJfcmF3X2V2ZW50IGRlc2NyaXB0b3Igb2YgdGhlIHB1bHNlL3NwYWNlCi0gKgotICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIC1FSU5WQUwgaWYgdGhlIHB1bHNlIHZpb2xhdGVzIHRoZSBzdGF0ZSBtYWNoaW5lCi0gKi8KLXN0YXRpYyBpbnQgaXJfcmM1X3N6X2RlY29kZShzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYsIHN0cnVjdCBpcl9yYXdfZXZlbnQgZXYpCi17Ci0Jc3RydWN0IGlyX2lucHV0X2RldiAqaXJfZGV2ID0gaW5wdXRfZ2V0X2RydmRhdGEoaW5wdXRfZGV2KTsKLQlzdHJ1Y3QgcmM1X3N6X2RlYyAqZGF0YSA9ICZpcl9kZXYtPnJhdy0+cmM1X3N6OwotCXU4IHRvZ2dsZSwgY29tbWFuZCwgc3lzdGVtOwotCXUzMiBzY2FuY29kZTsKLQotICAgICAgICBpZiAoIShpcl9kZXYtPnJhdy0+ZW5hYmxlZF9wcm90b2NvbHMgJiBJUl9UWVBFX1JDNV9TWikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLQlpZiAoIWlzX3RpbWluZ19ldmVudChldikpIHsKLQkJaWYgKGV2LnJlc2V0KQotCQkJZGF0YS0+c3RhdGUgPSBTVEFURV9JTkFDVElWRTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKCFnZXFfbWFyZ2luKGV2LmR1cmF0aW9uLCBSQzVfVU5JVCwgUkM1X1VOSVQgLyAyKSkKLQkJZ290byBvdXQ7Ci0KLWFnYWluOgotCUlSX2RwcmludGsoMiwgIlJDNS1zeiBkZWNvZGUgc3RhcnRlZCBhdCBzdGF0ZSAlaSAoJXV1cyAlcylcbiIsCi0JCSAgIGRhdGEtPnN0YXRlLCBUT19VUyhldi5kdXJhdGlvbiksIFRPX1NUUihldi5wdWxzZSkpOwotCi0JaWYgKCFnZXFfbWFyZ2luKGV2LmR1cmF0aW9uLCBSQzVfVU5JVCwgUkM1X1VOSVQgLyAyKSkKLQkJcmV0dXJuIDA7Ci0KLQlzd2l0Y2ggKGRhdGEtPnN0YXRlKSB7Ci0KLQljYXNlIFNUQVRFX0lOQUNUSVZFOgotCQlpZiAoIWV2LnB1bHNlKQotCQkJYnJlYWs7Ci0KLQkJZGF0YS0+c3RhdGUgPSBTVEFURV9CSVRfU1RBUlQ7Ci0JCWRhdGEtPmNvdW50ID0gMTsKLQkJZGF0YS0+d2FudGVkX2JpdHMgPSBSQzVfU1pfTkJJVFM7Ci0JCWRlY3JlYXNlX2R1cmF0aW9uKCZldiwgUkM1X0JJVF9TVEFSVCk7Ci0JCWdvdG8gYWdhaW47Ci0KLQljYXNlIFNUQVRFX0JJVF9TVEFSVDoKLQkJaWYgKCFlcV9tYXJnaW4oZXYuZHVyYXRpb24sIFJDNV9CSVRfU1RBUlQsIFJDNV9VTklUIC8gMikpCi0JCQlicmVhazsKLQotCQlkYXRhLT5iaXRzIDw8PSAxOwotCQlpZiAoIWV2LnB1bHNlKQotCQkJZGF0YS0+Yml0cyB8PSAxOwotCQlkYXRhLT5jb3VudCsrOwotCQlkYXRhLT5zdGF0ZSA9IFNUQVRFX0JJVF9FTkQ7Ci0JCXJldHVybiAwOwotCi0JY2FzZSBTVEFURV9CSVRfRU5EOgotCQlpZiAoIWlzX3RyYW5zaXRpb24oJmV2LCAmaXJfZGV2LT5yYXctPnByZXZfZXYpKQotCQkJYnJlYWs7Ci0KLQkJaWYgKGRhdGEtPmNvdW50ID09IGRhdGEtPndhbnRlZF9iaXRzKQotCQkJZGF0YS0+c3RhdGUgPSBTVEFURV9GSU5JU0hFRDsKLQkJZWxzZQotCQkJZGF0YS0+c3RhdGUgPSBTVEFURV9CSVRfU1RBUlQ7Ci0KLQkJZGVjcmVhc2VfZHVyYXRpb24oJmV2LCBSQzVfQklUX0VORCk7Ci0JCWdvdG8gYWdhaW47Ci0KLQljYXNlIFNUQVRFX0ZJTklTSEVEOgotCQlpZiAoZXYucHVsc2UpCi0JCQlicmVhazsKLQotCQkvKiBSQzUtc3ogKi8KLQkJY29tbWFuZCAgPSAoZGF0YS0+Yml0cyAmIDB4MDAwM0YpID4+IDA7Ci0JCXN5c3RlbSAgID0gKGRhdGEtPmJpdHMgJiAweDAyRkMwKSA+PiA2OwotCQl0b2dnbGUgICA9IChkYXRhLT5iaXRzICYgMHgwMTAwMCkgPyAxIDogMDsKLQkJc2NhbmNvZGUgPSBzeXN0ZW0gPDwgNiB8IGNvbW1hbmQ7Ci0KLQkJSVJfZHByaW50aygxLCAiUkM1LXN6IHNjYW5jb2RlIDB4JTA0eCAodG9nZ2xlOiAldSlcbiIsCi0JCQkgICBzY2FuY29kZSwgdG9nZ2xlKTsKLQotCQlpcl9rZXlkb3duKGlucHV0X2Rldiwgc2NhbmNvZGUsIHRvZ2dsZSk7Ci0JCWRhdGEtPnN0YXRlID0gU1RBVEVfSU5BQ1RJVkU7Ci0JCXJldHVybiAwOwotCX0KLQotb3V0OgotCUlSX2RwcmludGsoMSwgIlJDNS1zeiBkZWNvZGUgZmFpbGVkIGF0IHN0YXRlICVpICgldXVzICVzKVxuIiwKLQkJICAgZGF0YS0+c3RhdGUsIFRPX1VTKGV2LmR1cmF0aW9uKSwgVE9fU1RSKGV2LnB1bHNlKSk7Ci0JZGF0YS0+c3RhdGUgPSBTVEFURV9JTkFDVElWRTsKLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQotc3RhdGljIHN0cnVjdCBpcl9yYXdfaGFuZGxlciByYzVfc3pfaGFuZGxlciA9IHsKLQkucHJvdG9jb2xzCT0gSVJfVFlQRV9SQzVfU1osCi0JLmRlY29kZQkJPSBpcl9yYzVfc3pfZGVjb2RlLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgaXJfcmM1X3N6X2RlY29kZV9pbml0KHZvaWQpCi17Ci0JaXJfcmF3X2hhbmRsZXJfcmVnaXN0ZXIoJnJjNV9zel9oYW5kbGVyKTsKLQotCXByaW50ayhLRVJOX0lORk8gIklSIFJDNSAoc3RyZWFtemFwKSBwcm90b2NvbCBoYW5kbGVyIGluaXRpYWxpemVkXG4iKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGlyX3JjNV9zel9kZWNvZGVfZXhpdCh2b2lkKQotewotCWlyX3Jhd19oYW5kbGVyX3VucmVnaXN0ZXIoJnJjNV9zel9oYW5kbGVyKTsKLX0KLQotbW9kdWxlX2luaXQoaXJfcmM1X3N6X2RlY29kZV9pbml0KTsKLW1vZHVsZV9leGl0KGlyX3JjNV9zel9kZWNvZGVfZXhpdCk7Ci0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IoIkphcm9kIFdpbHNvbiA8amFyb2RAcmVkaGF0LmNvbT4iKTsKLU1PRFVMRV9BVVRIT1IoIlJlZCBIYXQgSW5jLiAoaHR0cDovL3d3dy5yZWRoYXQuY29tKSIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJSQzUgKHN0cmVhbXphcCkgSVIgcHJvdG9jb2wgZGVjb2RlciIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9JUi9pci1yYzYtZGVjb2Rlci5jIGIvZHJpdmVycy9tZWRpYS9JUi9pci1yYzYtZGVjb2Rlci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjVkYTkxLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvSVIvaXItcmM2LWRlY29kZXIuYworKysgL2Rldi9udWxsCkBAIC0xLDI4MSArMCwwIEBACi0vKiBpci1yYzYtZGVjb2Rlci5jIC0gQSBkZWNvZGVyIGZvciB0aGUgUkM2IElSIHByb3RvY29sCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDEwIGJ5IERhdmlkIEjDpHJkZW1hbiA8ZGF2aWRAaGFyZGVtYW4ubnU+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0KLSNpbmNsdWRlICJpci1jb3JlLXByaXYuaCIKLQotLyoKLSAqIFRoaXMgZGVjb2RlciBjdXJyZW50bHkgc3VwcG9ydHM6Ci0gKiBSQzYtMC0xNgkoc3RhbmRhcmQgdG9nZ2xlIGJpdCBpbiBoZWFkZXIpCi0gKiBSQzYtNkEtMjQJKG5vIHRvZ2dsZSBiaXQpCi0gKiBSQzYtNkEtMzIJKE1DRSB2ZXJzaW9uIHdpdGggdG9nZ2xlIGJpdCBpbiBib2R5KQotICovCi0KLSNkZWZpbmUgUkM2X1VOSVQJCTQ0NDQ0NAkvKiB1cyAqLwotI2RlZmluZSBSQzZfSEVBREVSX05CSVRTCTQJLyogbm90IGluY2x1ZGluZyB0b2dnbGUgYml0ICovCi0jZGVmaW5lIFJDNl8wX05CSVRTCQkxNgotI2RlZmluZSBSQzZfNkFfU01BTExfTkJJVFMJMjQKLSNkZWZpbmUgUkM2XzZBX0xBUkdFX05CSVRTCTMyCi0jZGVmaW5lIFJDNl9QUkVGSVhfUFVMU0UJKDYgKiBSQzZfVU5JVCkKLSNkZWZpbmUgUkM2X1BSRUZJWF9TUEFDRQkoMiAqIFJDNl9VTklUKQotI2RlZmluZSBSQzZfQklUX1NUQVJUCQkoMSAqIFJDNl9VTklUKQotI2RlZmluZSBSQzZfQklUX0VORAkJKDEgKiBSQzZfVU5JVCkKLSNkZWZpbmUgUkM2X1RPR0dMRV9TVEFSVAkoMiAqIFJDNl9VTklUKQotI2RlZmluZSBSQzZfVE9HR0xFX0VORAkJKDIgKiBSQzZfVU5JVCkKLSNkZWZpbmUgUkM2X01PREVfTUFTSwkJMHgwNwkvKiBmb3IgdGhlIGhlYWRlciBiaXRzICovCi0jZGVmaW5lIFJDNl9TVEFSVEJJVF9NQVNLCTB4MDgJLyogZm9yIHRoZSBoZWFkZXIgYml0cyAqLwotI2RlZmluZSBSQzZfNkFfTUNFX1RPR0dMRV9NQVNLCTB4ODAwMAkvKiBmb3IgdGhlIGJvZHkgYml0cyAqLwotCi1lbnVtIHJjNl9tb2RlIHsKLQlSQzZfTU9ERV8wLAotCVJDNl9NT0RFXzZBLAotCVJDNl9NT0RFX1VOS05PV04sCi19OwotCi1lbnVtIHJjNl9zdGF0ZSB7Ci0JU1RBVEVfSU5BQ1RJVkUsCi0JU1RBVEVfUFJFRklYX1NQQUNFLAotCVNUQVRFX0hFQURFUl9CSVRfU1RBUlQsCi0JU1RBVEVfSEVBREVSX0JJVF9FTkQsCi0JU1RBVEVfVE9HR0xFX1NUQVJULAotCVNUQVRFX1RPR0dMRV9FTkQsCi0JU1RBVEVfQk9EWV9CSVRfU1RBUlQsCi0JU1RBVEVfQk9EWV9CSVRfRU5ELAotCVNUQVRFX0ZJTklTSEVELAotfTsKLQotc3RhdGljIGVudW0gcmM2X21vZGUgcmM2X21vZGUoc3RydWN0IHJjNl9kZWMgKmRhdGEpCi17Ci0Jc3dpdGNoIChkYXRhLT5oZWFkZXIgJiBSQzZfTU9ERV9NQVNLKSB7Ci0JY2FzZSAwOgotCQlyZXR1cm4gUkM2X01PREVfMDsKLQljYXNlIDY6Ci0JCWlmICghZGF0YS0+dG9nZ2xlKQotCQkJcmV0dXJuIFJDNl9NT0RFXzZBOwotCQkvKiBmYWxsIHRocm91Z2ggKi8KLQlkZWZhdWx0OgotCQlyZXR1cm4gUkM2X01PREVfVU5LTk9XTjsKLQl9Ci19Ci0KLS8qKgotICogaXJfcmM2X2RlY29kZSgpIC0gRGVjb2RlIG9uZSBSQzYgcHVsc2Ugb3Igc3BhY2UKLSAqIEBpbnB1dF9kZXY6CXRoZSBzdHJ1Y3QgaW5wdXRfZGV2IGRlc2NyaXB0b3Igb2YgdGhlIGRldmljZQotICogQGV2OgkJdGhlIHN0cnVjdCBpcl9yYXdfZXZlbnQgZGVzY3JpcHRvciBvZiB0aGUgcHVsc2Uvc3BhY2UKLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgLUVJTlZBTCBpZiB0aGUgcHVsc2UgdmlvbGF0ZXMgdGhlIHN0YXRlIG1hY2hpbmUKLSAqLwotc3RhdGljIGludCBpcl9yYzZfZGVjb2RlKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2Rldiwgc3RydWN0IGlyX3Jhd19ldmVudCBldikKLXsKLQlzdHJ1Y3QgaXJfaW5wdXRfZGV2ICppcl9kZXYgPSBpbnB1dF9nZXRfZHJ2ZGF0YShpbnB1dF9kZXYpOwotCXN0cnVjdCByYzZfZGVjICpkYXRhID0gJmlyX2Rldi0+cmF3LT5yYzY7Ci0JdTMyIHNjYW5jb2RlOwotCXU4IHRvZ2dsZTsKLQotCWlmICghKGlyX2Rldi0+cmF3LT5lbmFibGVkX3Byb3RvY29scyAmIElSX1RZUEVfUkM2KSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoIWlzX3RpbWluZ19ldmVudChldikpIHsKLQkJaWYgKGV2LnJlc2V0KQotCQkJZGF0YS0+c3RhdGUgPSBTVEFURV9JTkFDVElWRTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKCFnZXFfbWFyZ2luKGV2LmR1cmF0aW9uLCBSQzZfVU5JVCwgUkM2X1VOSVQgLyAyKSkKLQkJZ290byBvdXQ7Ci0KLWFnYWluOgotCUlSX2RwcmludGsoMiwgIlJDNiBkZWNvZGUgc3RhcnRlZCBhdCBzdGF0ZSAlaSAoJXV1cyAlcylcbiIsCi0JCSAgIGRhdGEtPnN0YXRlLCBUT19VUyhldi5kdXJhdGlvbiksIFRPX1NUUihldi5wdWxzZSkpOwotCi0JaWYgKCFnZXFfbWFyZ2luKGV2LmR1cmF0aW9uLCBSQzZfVU5JVCwgUkM2X1VOSVQgLyAyKSkKLQkJcmV0dXJuIDA7Ci0KLQlzd2l0Y2ggKGRhdGEtPnN0YXRlKSB7Ci0KLQljYXNlIFNUQVRFX0lOQUNUSVZFOgotCQlpZiAoIWV2LnB1bHNlKQotCQkJYnJlYWs7Ci0KLQkJLyogTm90ZTogbGFyZ2VyIG1hcmdpbiBvbiBmaXJzdCBwdWxzZSBzaW5jZSBlYWNoIFJDNl9VTklUCi0JCSAgIGlzIHF1aXRlIHNob3J0IGFuZCBzb21lIGhhcmR3YXJlIHRha2VzIHNvbWUgdGltZSB0bwotCQkgICBhZGp1c3QgdG8gdGhlIHNpZ25hbCAqLwotCQlpZiAoIWVxX21hcmdpbihldi5kdXJhdGlvbiwgUkM2X1BSRUZJWF9QVUxTRSwgUkM2X1VOSVQpKQotCQkJYnJlYWs7Ci0KLQkJZGF0YS0+c3RhdGUgPSBTVEFURV9QUkVGSVhfU1BBQ0U7Ci0JCWRhdGEtPmNvdW50ID0gMDsKLQkJcmV0dXJuIDA7Ci0KLQljYXNlIFNUQVRFX1BSRUZJWF9TUEFDRToKLQkJaWYgKGV2LnB1bHNlKQotCQkJYnJlYWs7Ci0KLQkJaWYgKCFlcV9tYXJnaW4oZXYuZHVyYXRpb24sIFJDNl9QUkVGSVhfU1BBQ0UsIFJDNl9VTklUIC8gMikpCi0JCQlicmVhazsKLQotCQlkYXRhLT5zdGF0ZSA9IFNUQVRFX0hFQURFUl9CSVRfU1RBUlQ7Ci0JCXJldHVybiAwOwotCi0JY2FzZSBTVEFURV9IRUFERVJfQklUX1NUQVJUOgotCQlpZiAoIWVxX21hcmdpbihldi5kdXJhdGlvbiwgUkM2X0JJVF9TVEFSVCwgUkM2X1VOSVQgLyAyKSkKLQkJCWJyZWFrOwotCi0JCWRhdGEtPmhlYWRlciA8PD0gMTsKLQkJaWYgKGV2LnB1bHNlKQotCQkJZGF0YS0+aGVhZGVyIHw9IDE7Ci0JCWRhdGEtPmNvdW50Kys7Ci0JCWRhdGEtPnN0YXRlID0gU1RBVEVfSEVBREVSX0JJVF9FTkQ7Ci0JCXJldHVybiAwOwotCi0JY2FzZSBTVEFURV9IRUFERVJfQklUX0VORDoKLQkJaWYgKCFpc190cmFuc2l0aW9uKCZldiwgJmlyX2Rldi0+cmF3LT5wcmV2X2V2KSkKLQkJCWJyZWFrOwotCi0JCWlmIChkYXRhLT5jb3VudCA9PSBSQzZfSEVBREVSX05CSVRTKQotCQkJZGF0YS0+c3RhdGUgPSBTVEFURV9UT0dHTEVfU1RBUlQ7Ci0JCWVsc2UKLQkJCWRhdGEtPnN0YXRlID0gU1RBVEVfSEVBREVSX0JJVF9TVEFSVDsKLQotCQlkZWNyZWFzZV9kdXJhdGlvbigmZXYsIFJDNl9CSVRfRU5EKTsKLQkJZ290byBhZ2FpbjsKLQotCWNhc2UgU1RBVEVfVE9HR0xFX1NUQVJUOgotCQlpZiAoIWVxX21hcmdpbihldi5kdXJhdGlvbiwgUkM2X1RPR0dMRV9TVEFSVCwgUkM2X1VOSVQgLyAyKSkKLQkJCWJyZWFrOwotCi0JCWRhdGEtPnRvZ2dsZSA9IGV2LnB1bHNlOwotCQlkYXRhLT5zdGF0ZSA9IFNUQVRFX1RPR0dMRV9FTkQ7Ci0JCXJldHVybiAwOwotCi0JY2FzZSBTVEFURV9UT0dHTEVfRU5EOgotCQlpZiAoIWlzX3RyYW5zaXRpb24oJmV2LCAmaXJfZGV2LT5yYXctPnByZXZfZXYpIHx8Ci0JCSAgICAhZ2VxX21hcmdpbihldi5kdXJhdGlvbiwgUkM2X1RPR0dMRV9FTkQsIFJDNl9VTklUIC8gMikpCi0JCQlicmVhazsKLQotCQlpZiAoIShkYXRhLT5oZWFkZXIgJiBSQzZfU1RBUlRCSVRfTUFTSykpIHsKLQkJCUlSX2RwcmludGsoMSwgIlJDNiBpbnZhbGlkIHN0YXJ0IGJpdFxuIik7Ci0JCQlicmVhazsKLQkJfQotCi0JCWRhdGEtPnN0YXRlID0gU1RBVEVfQk9EWV9CSVRfU1RBUlQ7Ci0JCWRlY3JlYXNlX2R1cmF0aW9uKCZldiwgUkM2X1RPR0dMRV9FTkQpOwotCQlkYXRhLT5jb3VudCA9IDA7Ci0KLQkJc3dpdGNoIChyYzZfbW9kZShkYXRhKSkgewotCQljYXNlIFJDNl9NT0RFXzA6Ci0JCQlkYXRhLT53YW50ZWRfYml0cyA9IFJDNl8wX05CSVRTOwotCQkJYnJlYWs7Ci0JCWNhc2UgUkM2X01PREVfNkE6Ci0JCQkvKiBUaGlzIG1pZ2h0IGxvb2sgd2VpcmQsIGJ1dCB3ZSBiYXNpY2FsbHkKLQkJCSAgIGNoZWNrIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgYm9keSBiaXQgdG8KLQkJCSAgIGRldGVybWluZSB0aGUgbnVtYmVyIG9mIGJpdHMgaW4gbW9kZSA2QSAqLwotCQkJaWYgKCghZXYucHVsc2UgJiYgIWdlcV9tYXJnaW4oZXYuZHVyYXRpb24sIFJDNl9VTklULCBSQzZfVU5JVCAvIDIpKSB8fAotCQkJICAgIGdlcV9tYXJnaW4oZXYuZHVyYXRpb24sIFJDNl9VTklULCBSQzZfVU5JVCAvIDIpKQotCQkJCWRhdGEtPndhbnRlZF9iaXRzID0gUkM2XzZBX0xBUkdFX05CSVRTOwotCQkJZWxzZQotCQkJCWRhdGEtPndhbnRlZF9iaXRzID0gUkM2XzZBX1NNQUxMX05CSVRTOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlJUl9kcHJpbnRrKDEsICJSQzYgdW5rbm93biBtb2RlXG4iKTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JCWdvdG8gYWdhaW47Ci0KLQljYXNlIFNUQVRFX0JPRFlfQklUX1NUQVJUOgotCQlpZiAoIWVxX21hcmdpbihldi5kdXJhdGlvbiwgUkM2X0JJVF9TVEFSVCwgUkM2X1VOSVQgLyAyKSkKLQkJCWJyZWFrOwotCi0JCWRhdGEtPmJvZHkgPDw9IDE7Ci0JCWlmIChldi5wdWxzZSkKLQkJCWRhdGEtPmJvZHkgfD0gMTsKLQkJZGF0YS0+Y291bnQrKzsKLQkJZGF0YS0+c3RhdGUgPSBTVEFURV9CT0RZX0JJVF9FTkQ7Ci0JCXJldHVybiAwOwotCi0JY2FzZSBTVEFURV9CT0RZX0JJVF9FTkQ6Ci0JCWlmICghaXNfdHJhbnNpdGlvbigmZXYsICZpcl9kZXYtPnJhdy0+cHJldl9ldikpCi0JCQlicmVhazsKLQotCQlpZiAoZGF0YS0+Y291bnQgPT0gZGF0YS0+d2FudGVkX2JpdHMpCi0JCQlkYXRhLT5zdGF0ZSA9IFNUQVRFX0ZJTklTSEVEOwotCQllbHNlCi0JCQlkYXRhLT5zdGF0ZSA9IFNUQVRFX0JPRFlfQklUX1NUQVJUOwotCi0JCWRlY3JlYXNlX2R1cmF0aW9uKCZldiwgUkM2X0JJVF9FTkQpOwotCQlnb3RvIGFnYWluOwotCi0JY2FzZSBTVEFURV9GSU5JU0hFRDoKLQkJaWYgKGV2LnB1bHNlKQotCQkJYnJlYWs7Ci0KLQkJc3dpdGNoIChyYzZfbW9kZShkYXRhKSkgewotCQljYXNlIFJDNl9NT0RFXzA6Ci0JCQlzY2FuY29kZSA9IGRhdGEtPmJvZHkgJiAweGZmZmY7Ci0JCQl0b2dnbGUgPSBkYXRhLT50b2dnbGU7Ci0JCQlJUl9kcHJpbnRrKDEsICJSQzYoMCkgc2NhbmNvZGUgMHglMDR4ICh0b2dnbGU6ICV1KVxuIiwKLQkJCQkgICBzY2FuY29kZSwgdG9nZ2xlKTsKLQkJCWJyZWFrOwotCQljYXNlIFJDNl9NT0RFXzZBOgotCQkJaWYgKGRhdGEtPndhbnRlZF9iaXRzID09IFJDNl82QV9MQVJHRV9OQklUUykgewotCQkJCXRvZ2dsZSA9IGRhdGEtPmJvZHkgJiBSQzZfNkFfTUNFX1RPR0dMRV9NQVNLID8gMSA6IDA7Ci0JCQkJc2NhbmNvZGUgPSBkYXRhLT5ib2R5ICYgflJDNl82QV9NQ0VfVE9HR0xFX01BU0s7Ci0JCQl9IGVsc2UgewotCQkJCXRvZ2dsZSA9IDA7Ci0JCQkJc2NhbmNvZGUgPSBkYXRhLT5ib2R5ICYgMHhmZmZmZmY7Ci0JCQl9Ci0KLQkJCUlSX2RwcmludGsoMSwgIlJDNig2QSkgc2NhbmNvZGUgMHglMDh4ICh0b2dnbGU6ICV1KVxuIiwKLQkJCQkgICBzY2FuY29kZSwgdG9nZ2xlKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJSVJfZHByaW50aygxLCAiUkM2IHVua25vd24gbW9kZVxuIik7Ci0JCQlnb3RvIG91dDsKLQkJfQotCi0JCWlyX2tleWRvd24oaW5wdXRfZGV2LCBzY2FuY29kZSwgdG9nZ2xlKTsKLQkJZGF0YS0+c3RhdGUgPSBTVEFURV9JTkFDVElWRTsKLQkJcmV0dXJuIDA7Ci0JfQotCi1vdXQ6Ci0JSVJfZHByaW50aygxLCAiUkM2IGRlY29kZSBmYWlsZWQgYXQgc3RhdGUgJWkgKCV1dXMgJXMpXG4iLAotCQkgICBkYXRhLT5zdGF0ZSwgVE9fVVMoZXYuZHVyYXRpb24pLCBUT19TVFIoZXYucHVsc2UpKTsKLQlkYXRhLT5zdGF0ZSA9IFNUQVRFX0lOQUNUSVZFOwotCXJldHVybiAtRUlOVkFMOwotfQotCi1zdGF0aWMgc3RydWN0IGlyX3Jhd19oYW5kbGVyIHJjNl9oYW5kbGVyID0gewotCS5wcm90b2NvbHMJPSBJUl9UWVBFX1JDNiwKLQkuZGVjb2RlCQk9IGlyX3JjNl9kZWNvZGUsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBpcl9yYzZfZGVjb2RlX2luaXQodm9pZCkKLXsKLQlpcl9yYXdfaGFuZGxlcl9yZWdpc3RlcigmcmM2X2hhbmRsZXIpOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiSVIgUkM2IHByb3RvY29sIGhhbmRsZXIgaW5pdGlhbGl6ZWRcbiIpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgaXJfcmM2X2RlY29kZV9leGl0KHZvaWQpCi17Ci0JaXJfcmF3X2hhbmRsZXJfdW5yZWdpc3RlcigmcmM2X2hhbmRsZXIpOwotfQotCi1tb2R1bGVfaW5pdChpcl9yYzZfZGVjb2RlX2luaXQpOwotbW9kdWxlX2V4aXQoaXJfcmM2X2RlY29kZV9leGl0KTsKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiRGF2aWQgSMOkcmRlbWFuIDxkYXZpZEBoYXJkZW1hbi5udT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiUkM2IElSIHByb3RvY29sIGRlY29kZXIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvSVIvaXItc29ueS1kZWNvZGVyLmMgYi9kcml2ZXJzL21lZGlhL0lSL2lyLXNvbnktZGVjb2Rlci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZDE1NzMwLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvSVIvaXItc29ueS1kZWNvZGVyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxODIgKzAsMCBAQAotLyogaXItc29ueS1kZWNvZGVyLmMgLSBoYW5kbGUgU29ueSBJUiBQdWxzZS9TcGFjZSBwcm90b2NvbAotICoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBieSBEYXZpZCBIw6RyZGVtYW4gPGRhdmlkQGhhcmRlbWFuLm51PgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvYml0cmV2Lmg+Ci0jaW5jbHVkZSAiaXItY29yZS1wcml2LmgiCi0KLSNkZWZpbmUgU09OWV9VTklUCQk2MDAwMDAgLyogbnMgKi8KLSNkZWZpbmUgU09OWV9IRUFERVJfUFVMU0UJKDQgKiBTT05ZX1VOSVQpCi0jZGVmaW5lCVNPTllfSEVBREVSX1NQQUNFCSgxICogU09OWV9VTklUKQotI2RlZmluZSBTT05ZX0JJVF8wX1BVTFNFCSgxICogU09OWV9VTklUKQotI2RlZmluZSBTT05ZX0JJVF8xX1BVTFNFCSgyICogU09OWV9VTklUKQotI2RlZmluZSBTT05ZX0JJVF9TUEFDRQkJKDEgKiBTT05ZX1VOSVQpCi0jZGVmaW5lIFNPTllfVFJBSUxFUl9TUEFDRQkoMTAgKiBTT05ZX1VOSVQpIC8qIG1pbmltdW0gKi8KLQotZW51bSBzb255X3N0YXRlIHsKLQlTVEFURV9JTkFDVElWRSwKLQlTVEFURV9IRUFERVJfU1BBQ0UsCi0JU1RBVEVfQklUX1BVTFNFLAotCVNUQVRFX0JJVF9TUEFDRSwKLQlTVEFURV9GSU5JU0hFRCwKLX07Ci0KLS8qKgotICogaXJfc29ueV9kZWNvZGUoKSAtIERlY29kZSBvbmUgU29ueSBwdWxzZSBvciBzcGFjZQotICogQGlucHV0X2RldjoJdGhlIHN0cnVjdCBpbnB1dF9kZXYgZGVzY3JpcHRvciBvZiB0aGUgZGV2aWNlCi0gKiBAZXY6ICAgICAgICAgdGhlIHN0cnVjdCBpcl9yYXdfZXZlbnQgZGVzY3JpcHRvciBvZiB0aGUgcHVsc2Uvc3BhY2UKLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgLUVJTlZBTCBpZiB0aGUgcHVsc2UgdmlvbGF0ZXMgdGhlIHN0YXRlIG1hY2hpbmUKLSAqLwotc3RhdGljIGludCBpcl9zb255X2RlY29kZShzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYsIHN0cnVjdCBpcl9yYXdfZXZlbnQgZXYpCi17Ci0Jc3RydWN0IGlyX2lucHV0X2RldiAqaXJfZGV2ID0gaW5wdXRfZ2V0X2RydmRhdGEoaW5wdXRfZGV2KTsKLQlzdHJ1Y3Qgc29ueV9kZWMgKmRhdGEgPSAmaXJfZGV2LT5yYXctPnNvbnk7Ci0JdTMyIHNjYW5jb2RlOwotCXU4IGRldmljZSwgc3ViZGV2aWNlLCBmdW5jdGlvbjsKLQotCWlmICghKGlyX2Rldi0+cmF3LT5lbmFibGVkX3Byb3RvY29scyAmIElSX1RZUEVfU09OWSkpCi0JCXJldHVybiAwOwotCi0JaWYgKCFpc190aW1pbmdfZXZlbnQoZXYpKSB7Ci0JCWlmIChldi5yZXNldCkKLQkJCWRhdGEtPnN0YXRlID0gU1RBVEVfSU5BQ1RJVkU7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmICghZ2VxX21hcmdpbihldi5kdXJhdGlvbiwgU09OWV9VTklULCBTT05ZX1VOSVQgLyAyKSkKLQkJZ290byBvdXQ7Ci0KLQlJUl9kcHJpbnRrKDIsICJTb255IGRlY29kZSBzdGFydGVkIGF0IHN0YXRlICVkICgldXVzICVzKVxuIiwKLQkJICAgZGF0YS0+c3RhdGUsIFRPX1VTKGV2LmR1cmF0aW9uKSwgVE9fU1RSKGV2LnB1bHNlKSk7Ci0KLQlzd2l0Y2ggKGRhdGEtPnN0YXRlKSB7Ci0KLQljYXNlIFNUQVRFX0lOQUNUSVZFOgotCQlpZiAoIWV2LnB1bHNlKQotCQkJYnJlYWs7Ci0KLQkJaWYgKCFlcV9tYXJnaW4oZXYuZHVyYXRpb24sIFNPTllfSEVBREVSX1BVTFNFLCBTT05ZX1VOSVQgLyAyKSkKLQkJCWJyZWFrOwotCi0JCWRhdGEtPmNvdW50ID0gMDsKLQkJZGF0YS0+c3RhdGUgPSBTVEFURV9IRUFERVJfU1BBQ0U7Ci0JCXJldHVybiAwOwotCi0JY2FzZSBTVEFURV9IRUFERVJfU1BBQ0U6Ci0JCWlmIChldi5wdWxzZSkKLQkJCWJyZWFrOwotCi0JCWlmICghZXFfbWFyZ2luKGV2LmR1cmF0aW9uLCBTT05ZX0hFQURFUl9TUEFDRSwgU09OWV9VTklUIC8gMikpCi0JCQlicmVhazsKLQotCQlkYXRhLT5zdGF0ZSA9IFNUQVRFX0JJVF9QVUxTRTsKLQkJcmV0dXJuIDA7Ci0KLQljYXNlIFNUQVRFX0JJVF9QVUxTRToKLQkJaWYgKCFldi5wdWxzZSkKLQkJCWJyZWFrOwotCi0JCWRhdGEtPmJpdHMgPDw9IDE7Ci0JCWlmIChlcV9tYXJnaW4oZXYuZHVyYXRpb24sIFNPTllfQklUXzFfUFVMU0UsIFNPTllfVU5JVCAvIDIpKQotCQkJZGF0YS0+Yml0cyB8PSAxOwotCQllbHNlIGlmICghZXFfbWFyZ2luKGV2LmR1cmF0aW9uLCBTT05ZX0JJVF8wX1BVTFNFLCBTT05ZX1VOSVQgLyAyKSkKLQkJCWJyZWFrOwotCi0JCWRhdGEtPmNvdW50Kys7Ci0JCWRhdGEtPnN0YXRlID0gU1RBVEVfQklUX1NQQUNFOwotCQlyZXR1cm4gMDsKLQotCWNhc2UgU1RBVEVfQklUX1NQQUNFOgotCQlpZiAoZXYucHVsc2UpCi0JCQlicmVhazsKLQotCQlpZiAoIWdlcV9tYXJnaW4oZXYuZHVyYXRpb24sIFNPTllfQklUX1NQQUNFLCBTT05ZX1VOSVQgLyAyKSkKLQkJCWJyZWFrOwotCi0JCWRlY3JlYXNlX2R1cmF0aW9uKCZldiwgU09OWV9CSVRfU1BBQ0UpOwotCi0JCWlmICghZ2VxX21hcmdpbihldi5kdXJhdGlvbiwgU09OWV9VTklULCBTT05ZX1VOSVQgLyAyKSkgewotCQkJZGF0YS0+c3RhdGUgPSBTVEFURV9CSVRfUFVMU0U7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCi0JCWRhdGEtPnN0YXRlID0gU1RBVEVfRklOSVNIRUQ7Ci0JCS8qIEZhbGwgdGhyb3VnaCAqLwotCi0JY2FzZSBTVEFURV9GSU5JU0hFRDoKLQkJaWYgKGV2LnB1bHNlKQotCQkJYnJlYWs7Ci0KLQkJaWYgKCFnZXFfbWFyZ2luKGV2LmR1cmF0aW9uLCBTT05ZX1RSQUlMRVJfU1BBQ0UsIFNPTllfVU5JVCAvIDIpKQotCQkJYnJlYWs7Ci0KLQkJc3dpdGNoIChkYXRhLT5jb3VudCkgewotCQljYXNlIDEyOgotCQkJZGV2aWNlICAgID0gYml0cmV2OCgoZGF0YS0+Yml0cyA8PCAgMykgJiAweEY4KTsKLQkJCXN1YmRldmljZSA9IDA7Ci0JCQlmdW5jdGlvbiAgPSBiaXRyZXY4KChkYXRhLT5iaXRzID4+ICA0KSAmIDB4RkUpOwotCQkJYnJlYWs7Ci0JCWNhc2UgMTU6Ci0JCQlkZXZpY2UgICAgPSBiaXRyZXY4KChkYXRhLT5iaXRzID4+ICAwKSAmIDB4RkYpOwotCQkJc3ViZGV2aWNlID0gMDsKLQkJCWZ1bmN0aW9uICA9IGJpdHJldjgoKGRhdGEtPmJpdHMgPj4gIDcpICYgMHhGRCk7Ci0JCQlicmVhazsKLQkJY2FzZSAyMDoKLQkJCWRldmljZSAgICA9IGJpdHJldjgoKGRhdGEtPmJpdHMgPj4gIDUpICYgMHhGOCk7Ci0JCQlzdWJkZXZpY2UgPSBiaXRyZXY4KChkYXRhLT5iaXRzID4+ICAwKSAmIDB4RkYpOwotCQkJZnVuY3Rpb24gID0gYml0cmV2OCgoZGF0YS0+Yml0cyA+PiAxMikgJiAweEZFKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJSVJfZHByaW50aygxLCAiU29ueSBpbnZhbGlkIGJpdGNvdW50ICV1XG4iLCBkYXRhLT5jb3VudCk7Ci0JCQlnb3RvIG91dDsKLQkJfQotCi0JCXNjYW5jb2RlID0gZGV2aWNlIDw8IDE2IHwgc3ViZGV2aWNlIDw8IDggfCBmdW5jdGlvbjsKLQkJSVJfZHByaW50aygxLCAiU29ueSgldSkgc2NhbmNvZGUgMHglMDV4XG4iLCBkYXRhLT5jb3VudCwgc2NhbmNvZGUpOwotCQlpcl9rZXlkb3duKGlucHV0X2Rldiwgc2NhbmNvZGUsIDApOwotCQlkYXRhLT5zdGF0ZSA9IFNUQVRFX0lOQUNUSVZFOwotCQlyZXR1cm4gMDsKLQl9Ci0KLW91dDoKLQlJUl9kcHJpbnRrKDEsICJTb255IGRlY29kZSBmYWlsZWQgYXQgc3RhdGUgJWQgKCV1dXMgJXMpXG4iLAotCQkgICBkYXRhLT5zdGF0ZSwgVE9fVVMoZXYuZHVyYXRpb24pLCBUT19TVFIoZXYucHVsc2UpKTsKLQlkYXRhLT5zdGF0ZSA9IFNUQVRFX0lOQUNUSVZFOwotCXJldHVybiAtRUlOVkFMOwotfQotCi1zdGF0aWMgc3RydWN0IGlyX3Jhd19oYW5kbGVyIHNvbnlfaGFuZGxlciA9IHsKLQkucHJvdG9jb2xzCT0gSVJfVFlQRV9TT05ZLAotCS5kZWNvZGUJCT0gaXJfc29ueV9kZWNvZGUsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBpcl9zb255X2RlY29kZV9pbml0KHZvaWQpCi17Ci0JaXJfcmF3X2hhbmRsZXJfcmVnaXN0ZXIoJnNvbnlfaGFuZGxlcik7Ci0KLQlwcmludGsoS0VSTl9JTkZPICJJUiBTb255IHByb3RvY29sIGhhbmRsZXIgaW5pdGlhbGl6ZWRcbiIpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgaXJfc29ueV9kZWNvZGVfZXhpdCh2b2lkKQotewotCWlyX3Jhd19oYW5kbGVyX3VucmVnaXN0ZXIoJnNvbnlfaGFuZGxlcik7Ci19Ci0KLW1vZHVsZV9pbml0KGlyX3NvbnlfZGVjb2RlX2luaXQpOwotbW9kdWxlX2V4aXQoaXJfc29ueV9kZWNvZGVfZXhpdCk7Ci0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IoIkRhdmlkIEjDpHJkZW1hbiA8ZGF2aWRAaGFyZGVtYW4ubnU+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIlNvbnkgSVIgcHJvdG9jb2wgZGVjb2RlciIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9JUi9pci1zeXNmcy5jIGIvZHJpdmVycy9tZWRpYS9JUi9pci1zeXNmcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODQyM2E4Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvSVIvaXItc3lzZnMuYworKysgL2Rldi9udWxsCkBAIC0xLDM2MiArMCwwIEBACi0vKiBpci1zeXNmcy5jIC0gc3lzZnMgaW50ZXJmYWNlIGZvciBSQyBkZXZpY2VzICgvc3lzL2NsYXNzL3JjKQotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSAiaXItY29yZS1wcml2LmgiCi0KLSNkZWZpbmUgSVJSQ1ZfTlVNX0RFVklDRVMJMjU2Ci0KLS8qIGJpdCBhcnJheSB0byByZXByZXNlbnQgSVIgc3lzZnMgZGV2aWNlIG51bWJlciAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcgaXJfY29yZV9kZXZfbnVtYmVyOwotCi0vKiBjbGFzcyBmb3IgL3N5cy9jbGFzcy9yYyAqLwotc3RhdGljIGNoYXIgKmlyX2Rldm5vZGUoc3RydWN0IGRldmljZSAqZGV2LCBtb2RlX3QgKm1vZGUpCi17Ci0JcmV0dXJuIGthc3ByaW50ZihHRlBfS0VSTkVMLCAicmMvJXMiLCBkZXZfbmFtZShkZXYpKTsKLX0KLQotc3RhdGljIHN0cnVjdCBjbGFzcyBpcl9pbnB1dF9jbGFzcyA9IHsKLQkubmFtZQkJPSAicmMiLAotCS5kZXZub2RlCT0gaXJfZGV2bm9kZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgewotCXU2NAl0eXBlOwotCWNoYXIJKm5hbWU7Ci19IHByb3RvX25hbWVzW10gPSB7Ci0JeyBJUl9UWVBFX1VOS05PV04sCSJ1bmtub3duIgl9LAotCXsgSVJfVFlQRV9SQzUsCQkicmMtNSIJCX0sCi0JeyBJUl9UWVBFX05FQywJCSJuZWMiCQl9LAotCXsgSVJfVFlQRV9SQzYsCQkicmMtNiIJCX0sCi0JeyBJUl9UWVBFX0pWQywJCSJqdmMiCQl9LAotCXsgSVJfVFlQRV9TT05ZLAkJInNvbnkiCQl9LAotCXsgSVJfVFlQRV9SQzVfU1osCSJyYy01LXN6Igl9LAotCXsgSVJfVFlQRV9MSVJDLAkJImxpcmMiCQl9LAotfTsKLQotI2RlZmluZSBQUk9UT19OT05FCSJub25lIgotCi0vKioKLSAqIHNob3dfcHJvdG9jb2xzKCkgLSBzaG93cyB0aGUgY3VycmVudCBJUiBwcm90b2NvbChzKQotICogQGQ6CQl0aGUgZGV2aWNlIGRlc2NyaXB0b3IKLSAqIEBtYXR0cjoJdGhlIGRldmljZSBhdHRyaWJ1dGUgc3RydWN0ICh1bnVzZWQpCi0gKiBAYnVmOglhIHBvaW50ZXIgdG8gdGhlIG91dHB1dCBidWZmZXIKLSAqCi0gKiBUaGlzIHJvdXRpbmUgaXMgYSBjYWxsYmFjayByb3V0aW5lIGZvciBpbnB1dCByZWFkIHRoZSBJUiBwcm90b2NvbCB0eXBlKHMpLgotICogaXQgaXMgdHJpZ2dlZCBieSByZWFkaW5nIC9zeXMvY2xhc3MvcmMvcmM/L3Byb3RvY29scy4KLSAqIEl0IHJldHVybnMgdGhlIHByb3RvY29sIG5hbWVzIG9mIHN1cHBvcnRlZCBwcm90b2NvbHMuCi0gKiBFbmFibGVkIHByb3RvY29scyBhcmUgcHJpbnRlZCBpbiBicmFja2V0cy4KLSAqLwotc3RhdGljIHNzaXplX3Qgc2hvd19wcm90b2NvbHMoc3RydWN0IGRldmljZSAqZCwKLQkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICptYXR0ciwgY2hhciAqYnVmKQotewotCXN0cnVjdCBpcl9pbnB1dF9kZXYgKmlyX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKLQl1NjQgYWxsb3dlZCwgZW5hYmxlZDsKLQljaGFyICp0bXAgPSBidWY7Ci0JaW50IGk7Ci0KLQkvKiBEZXZpY2UgaXMgYmVpbmcgcmVtb3ZlZCAqLwotCWlmICghaXJfZGV2KQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChpcl9kZXYtPnByb3BzICYmIGlyX2Rldi0+cHJvcHMtPmRyaXZlcl90eXBlID09IFJDX0RSSVZFUl9TQ0FOQ09ERSkgewotCQllbmFibGVkID0gaXJfZGV2LT5yY190YWIuaXJfdHlwZTsKLQkJYWxsb3dlZCA9IGlyX2Rldi0+cHJvcHMtPmFsbG93ZWRfcHJvdG9zOwotCX0gZWxzZSBpZiAoaXJfZGV2LT5yYXcpIHsKLQkJZW5hYmxlZCA9IGlyX2Rldi0+cmF3LT5lbmFibGVkX3Byb3RvY29sczsKLQkJYWxsb3dlZCA9IGlyX3Jhd19nZXRfYWxsb3dlZF9wcm90b2NvbHMoKTsKLQl9IGVsc2UKLQkJcmV0dXJuIHNwcmludGYodG1wLCAiW2J1aWx0aW5dXG4iKTsKLQotCUlSX2RwcmludGsoMSwgImFsbG93ZWQgLSAweCVsbHgsIGVuYWJsZWQgLSAweCVsbHhcbiIsCi0JCSAgIChsb25nIGxvbmcpYWxsb3dlZCwKLQkJICAgKGxvbmcgbG9uZyllbmFibGVkKTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHByb3RvX25hbWVzKTsgaSsrKSB7Ci0JCWlmIChhbGxvd2VkICYgZW5hYmxlZCAmIHByb3RvX25hbWVzW2ldLnR5cGUpCi0JCQl0bXAgKz0gc3ByaW50Zih0bXAsICJbJXNdICIsIHByb3RvX25hbWVzW2ldLm5hbWUpOwotCQllbHNlIGlmIChhbGxvd2VkICYgcHJvdG9fbmFtZXNbaV0udHlwZSkKLQkJCXRtcCArPSBzcHJpbnRmKHRtcCwgIiVzICIsIHByb3RvX25hbWVzW2ldLm5hbWUpOwotCX0KLQotCWlmICh0bXAgIT0gYnVmKQotCQl0bXAtLTsKLQkqdG1wID0gJ1xuJzsKLQlyZXR1cm4gdG1wICsgMSAtIGJ1ZjsKLX0KLQotLyoqCi0gKiBzdG9yZV9wcm90b2NvbHMoKSAtIGNoYW5nZXMgdGhlIGN1cnJlbnQgSVIgcHJvdG9jb2wocykKLSAqIEBkOgkJdGhlIGRldmljZSBkZXNjcmlwdG9yCi0gKiBAbWF0dHI6CXRoZSBkZXZpY2UgYXR0cmlidXRlIHN0cnVjdCAodW51c2VkKQotICogQGJ1ZjoJYSBwb2ludGVyIHRvIHRoZSBpbnB1dCBidWZmZXIKLSAqIEBsZW46CWxlbmd0aCBvZiB0aGUgaW5wdXQgYnVmZmVyCi0gKgotICogVGhpcyByb3V0aW5lIGlzIGEgY2FsbGJhY2sgcm91dGluZSBmb3IgY2hhbmdpbmcgdGhlIElSIHByb3RvY29sIHR5cGUuCi0gKiBJdCBpcyB0cmlnZ2VkIGJ5IHdyaXRpbmcgdG8gL3N5cy9jbGFzcy9yYy9yYz8vcHJvdG9jb2xzLgotICogV3JpdGluZyAiK3Byb3RvIiB3aWxsIGFkZCBhIHByb3RvY29sIHRvIHRoZSBsaXN0IG9mIGVuYWJsZWQgcHJvdG9jb2xzLgotICogV3JpdGluZyAiLXByb3RvIiB3aWxsIHJlbW92ZSBhIHByb3RvY29sIGZyb20gdGhlIGxpc3Qgb2YgZW5hYmxlZCBwcm90b2NvbHMuCi0gKiBXcml0aW5nICJwcm90byIgd2lsbCBlbmFibGUgb25seSAicHJvdG8iLgotICogV3JpdGluZyAibm9uZSIgd2lsbCBkaXNhYmxlIGFsbCBwcm90b2NvbHMuCi0gKiBSZXR1cm5zIC1FSU5WQUwgaWYgYW4gaW52YWxpZCBwcm90b2NvbCBjb21iaW5hdGlvbiBvciB1bmtub3duIHByb3RvY29sIG5hbWUKLSAqIGlzIHVzZWQsIG90aGVyd2lzZSBAbGVuLgotICovCi1zdGF0aWMgc3NpemVfdCBzdG9yZV9wcm90b2NvbHMoc3RydWN0IGRldmljZSAqZCwKLQkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqbWF0dHIsCi0JCQkgICAgICAgY29uc3QgY2hhciAqZGF0YSwKLQkJCSAgICAgICBzaXplX3QgbGVuKQotewotCXN0cnVjdCBpcl9pbnB1dF9kZXYgKmlyX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKLQlib29sIGVuYWJsZSwgZGlzYWJsZTsKLQljb25zdCBjaGFyICp0bXA7Ci0JdTY0IHR5cGU7Ci0JdTY0IG1hc2s7Ci0JaW50IHJjLCBpLCBjb3VudCA9IDA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCS8qIERldmljZSBpcyBiZWluZyByZW1vdmVkICovCi0JaWYgKCFpcl9kZXYpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGlyX2Rldi0+cHJvcHMgJiYgaXJfZGV2LT5wcm9wcy0+ZHJpdmVyX3R5cGUgPT0gUkNfRFJJVkVSX1NDQU5DT0RFKQotCQl0eXBlID0gaXJfZGV2LT5yY190YWIuaXJfdHlwZTsKLQllbHNlIGlmIChpcl9kZXYtPnJhdykKLQkJdHlwZSA9IGlyX2Rldi0+cmF3LT5lbmFibGVkX3Byb3RvY29sczsKLQllbHNlIHsKLQkJSVJfZHByaW50aygxLCAiUHJvdG9jb2wgc3dpdGNoaW5nIG5vdCBzdXBwb3J0ZWRcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQl3aGlsZSAoKHRtcCA9IHN0cnNlcCgoY2hhciAqKikgJmRhdGEsICIgXG4iKSkgIT0gTlVMTCkgewotCQlpZiAoISp0bXApCi0JCQlicmVhazsKLQotCQlpZiAoKnRtcCA9PSAnKycpIHsKLQkJCWVuYWJsZSA9IHRydWU7Ci0JCQlkaXNhYmxlID0gZmFsc2U7Ci0JCQl0bXArKzsKLQkJfSBlbHNlIGlmICgqdG1wID09ICctJykgewotCQkJZW5hYmxlID0gZmFsc2U7Ci0JCQlkaXNhYmxlID0gdHJ1ZTsKLQkJCXRtcCsrOwotCQl9IGVsc2UgewotCQkJZW5hYmxlID0gZmFsc2U7Ci0JCQlkaXNhYmxlID0gZmFsc2U7Ci0JCX0KLQotCQlpZiAoIWVuYWJsZSAmJiAhZGlzYWJsZSAmJiAhc3RybmNhc2VjbXAodG1wLCBQUk9UT19OT05FLCBzaXplb2YoUFJPVE9fTk9ORSkpKSB7Ci0JCQl0bXAgKz0gc2l6ZW9mKFBST1RPX05PTkUpOwotCQkJbWFzayA9IDA7Ci0JCQljb3VudCsrOwotCQl9IGVsc2UgewotCQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocHJvdG9fbmFtZXMpOyBpKyspIHsKLQkJCQlpZiAoIXN0cm5jYXNlY21wKHRtcCwgcHJvdG9fbmFtZXNbaV0ubmFtZSwgc3RybGVuKHByb3RvX25hbWVzW2ldLm5hbWUpKSkgewotCQkJCQl0bXAgKz0gc3RybGVuKHByb3RvX25hbWVzW2ldLm5hbWUpOwotCQkJCQltYXNrID0gcHJvdG9fbmFtZXNbaV0udHlwZTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQkJaWYgKGkgPT0gQVJSQVlfU0laRShwcm90b19uYW1lcykpIHsKLQkJCQlJUl9kcHJpbnRrKDEsICJVbmtub3duIHByb3RvY29sOiAnJXMnXG4iLCB0bXApOwotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJfQotCQkJY291bnQrKzsKLQkJfQotCi0JCWlmIChlbmFibGUpCi0JCQl0eXBlIHw9IG1hc2s7Ci0JCWVsc2UgaWYgKGRpc2FibGUpCi0JCQl0eXBlICY9IH5tYXNrOwotCQllbHNlCi0JCQl0eXBlID0gbWFzazsKLQl9Ci0KLQlpZiAoIWNvdW50KSB7Ci0JCUlSX2RwcmludGsoMSwgIlByb3RvY29sIG5vdCBzcGVjaWZpZWRcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoaXJfZGV2LT5wcm9wcyAmJiBpcl9kZXYtPnByb3BzLT5jaGFuZ2VfcHJvdG9jb2wpIHsKLQkJcmMgPSBpcl9kZXYtPnByb3BzLT5jaGFuZ2VfcHJvdG9jb2woaXJfZGV2LT5wcm9wcy0+cHJpdiwKLQkJCQkJCSAgICB0eXBlKTsKLQkJaWYgKHJjIDwgMCkgewotCQkJSVJfZHByaW50aygxLCAiRXJyb3Igc2V0dGluZyBwcm90b2NvbHMgdG8gMHglbGx4XG4iLAotCQkJCSAgIChsb25nIGxvbmcpdHlwZSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCX0KLQotCWlmIChpcl9kZXYtPnByb3BzICYmIGlyX2Rldi0+cHJvcHMtPmRyaXZlcl90eXBlID09IFJDX0RSSVZFUl9TQ0FOQ09ERSkgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmaXJfZGV2LT5yY190YWIubG9jaywgZmxhZ3MpOwotCQlpcl9kZXYtPnJjX3RhYi5pcl90eXBlID0gdHlwZTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJfZGV2LT5yY190YWIubG9jaywgZmxhZ3MpOwotCX0gZWxzZSB7Ci0JCWlyX2Rldi0+cmF3LT5lbmFibGVkX3Byb3RvY29scyA9IHR5cGU7Ci0JfQotCi0JSVJfZHByaW50aygxLCAiQ3VycmVudCBwcm90b2NvbChzKTogMHglbGx4XG4iLAotCQkgICAobG9uZyBsb25nKXR5cGUpOwotCi0JcmV0dXJuIGxlbjsKLX0KLQotI2RlZmluZSBBRERfSE9UUExVR19WQVIoZm10LCB2YWwuLi4pCQkJCQlcCi0JZG8gewkJCQkJCQkJXAotCQlpbnQgZXJyID0gYWRkX3VldmVudF92YXIoZW52LCBmbXQsIHZhbCk7CQlcCi0JCWlmIChlcnIpCQkJCQkJXAotCQkJcmV0dXJuIGVycjsJCQkJCVwKLQl9IHdoaWxlICgwKQotCi1zdGF0aWMgaW50IHJjX2Rldl91ZXZlbnQoc3RydWN0IGRldmljZSAqZGV2aWNlLCBzdHJ1Y3Qga29ial91ZXZlbnRfZW52ICplbnYpCi17Ci0Jc3RydWN0IGlyX2lucHV0X2RldiAqaXJfZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldmljZSk7Ci0KLQlpZiAoaXJfZGV2LT5yY190YWIubmFtZSkKLQkJQUREX0hPVFBMVUdfVkFSKCJOQU1FPSVzIiwgaXJfZGV2LT5yY190YWIubmFtZSk7Ci0JaWYgKGlyX2Rldi0+ZHJpdmVyX25hbWUpCi0JCUFERF9IT1RQTFVHX1ZBUigiRFJWX05BTUU9JXMiLCBpcl9kZXYtPmRyaXZlcl9uYW1lKTsKLQotCXJldHVybiAwOwotfQotCi0vKgotICogU3RhdGljIGRldmljZSBhdHRyaWJ1dGUgc3RydWN0IHdpdGggdGhlIHN5c2ZzIGF0dHJpYnV0ZXMgZm9yIElSJ3MKLSAqLwotc3RhdGljIERFVklDRV9BVFRSKHByb3RvY29scywgU19JUlVHTyB8IFNfSVdVU1IsCi0JCSAgIHNob3dfcHJvdG9jb2xzLCBzdG9yZV9wcm90b2NvbHMpOwotCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqcmNfZGV2X2F0dHJzW10gPSB7Ci0JJmRldl9hdHRyX3Byb3RvY29scy5hdHRyLAotCU5VTEwsCi19OwotCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCByY19kZXZfYXR0cl9ncnAgPSB7Ci0JLmF0dHJzCT0gcmNfZGV2X2F0dHJzLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKnJjX2Rldl9hdHRyX2dyb3Vwc1tdID0gewotCSZyY19kZXZfYXR0cl9ncnAsCi0JTlVMTAotfTsKLQotc3RhdGljIHN0cnVjdCBkZXZpY2VfdHlwZSByY19kZXZfdHlwZSA9IHsKLQkuZ3JvdXBzCQk9IHJjX2Rldl9hdHRyX2dyb3VwcywKLQkudWV2ZW50CQk9IHJjX2Rldl91ZXZlbnQsCi19OwotCi0vKioKLSAqIGlyX3JlZ2lzdGVyX2NsYXNzKCkgLSBjcmVhdGVzIHRoZSBzeXNmcyBmb3IgL3N5cy9jbGFzcy9yYy9yYz8KLSAqIEBpbnB1dF9kZXY6CXRoZSBzdHJ1Y3QgaW5wdXRfZGV2IGRlc2NyaXB0b3Igb2YgdGhlIGRldmljZQotICoKLSAqIFRoaXMgcm91dGluZSBpcyB1c2VkIHRvIHJlZ2lzdGVyIHRoZSBzeWZzIGNvZGUgZm9yIElSIGNsYXNzCi0gKi8KLWludCBpcl9yZWdpc3Rlcl9jbGFzcyhzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYpCi17Ci0Jc3RydWN0IGlyX2lucHV0X2RldiAqaXJfZGV2ID0gaW5wdXRfZ2V0X2RydmRhdGEoaW5wdXRfZGV2KTsKLQlpbnQgZGV2bm8gPSBmaW5kX2ZpcnN0X3plcm9fYml0KCZpcl9jb3JlX2Rldl9udW1iZXIsCi0JCQkJCUlSUkNWX05VTV9ERVZJQ0VTKTsKLQotCWlmICh1bmxpa2VseShkZXZubyA8IDApKQotCQlyZXR1cm4gZGV2bm87Ci0KLQlpcl9kZXYtPmRldi50eXBlID0gJnJjX2Rldl90eXBlOwotCWlyX2Rldi0+ZGV2bm8gPSBkZXZubzsKLQotCWlyX2Rldi0+ZGV2LmNsYXNzID0gJmlyX2lucHV0X2NsYXNzOwotCWlyX2Rldi0+ZGV2LnBhcmVudCA9IGlucHV0X2Rldi0+ZGV2LnBhcmVudDsKLQlpbnB1dF9kZXYtPmRldi5wYXJlbnQgPSAmaXJfZGV2LT5kZXY7Ci0JZGV2X3NldF9uYW1lKCZpcl9kZXYtPmRldiwgInJjJWQiLCBkZXZubyk7Ci0JZGV2X3NldF9kcnZkYXRhKCZpcl9kZXYtPmRldiwgaXJfZGV2KTsKLQlyZXR1cm4gIGRldmljZV9yZWdpc3RlcigmaXJfZGV2LT5kZXYpOwotfTsKLQotLyoqCi0gKiBpcl9yZWdpc3Rlcl9pbnB1dCAtIHJlZ2lzdGVycyBpciBpbnB1dCBkZXZpY2Ugd2l0aCBpbnB1dCBzdWJzeXN0ZW0KLSAqIEBpbnB1dF9kZXY6CXRoZSBzdHJ1Y3QgaW5wdXRfZGV2IGRlc2NyaXB0b3Igb2YgdGhlIGRldmljZQotICovCi0KLWludCBpcl9yZWdpc3Rlcl9pbnB1dChzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYpCi17Ci0Jc3RydWN0IGlyX2lucHV0X2RldiAqaXJfZGV2ID0gaW5wdXRfZ2V0X2RydmRhdGEoaW5wdXRfZGV2KTsKLQlpbnQgcmM7Ci0JY29uc3QgY2hhciAqcGF0aDsKLQotCi0JcmMgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoaW5wdXRfZGV2KTsKLQlpZiAocmMgPCAwKSB7Ci0JCWRldmljZV9kZWwoJmlyX2Rldi0+ZGV2KTsKLQkJcmV0dXJuIHJjOwotCX0KLQotCV9fbW9kdWxlX2dldChUSElTX01PRFVMRSk7Ci0KLQlwYXRoID0ga29iamVjdF9nZXRfcGF0aCgmaXJfZGV2LT5kZXYua29iaiwgR0ZQX0tFUk5FTCk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzIGFzICVzXG4iLAotCQlkZXZfbmFtZSgmaXJfZGV2LT5kZXYpLAotCQlpbnB1dF9kZXYtPm5hbWUgPyBpbnB1dF9kZXYtPm5hbWUgOiAiVW5zcGVjaWZpZWQgZGV2aWNlIiwKLQkJcGF0aCA/IHBhdGggOiAiTi9BIik7Ci0Ja2ZyZWUocGF0aCk7Ci0KLQlzZXRfYml0KGlyX2Rldi0+ZGV2bm8sICZpcl9jb3JlX2Rldl9udW1iZXIpOwotCXJldHVybiAwOwotfQotCi0vKioKLSAqIGlyX3VucmVnaXN0ZXJfY2xhc3MoKSAtIHJlbW92ZXMgdGhlIHN5c2ZzIGZvciBzeXNmcyBmb3IKLSAqCQkJICAgL3N5cy9jbGFzcy9yYy9yYz8KLSAqIEBpbnB1dF9kZXY6CXRoZSBzdHJ1Y3QgaW5wdXRfZGV2IGRlc2NyaXB0b3Igb2YgdGhlIGRldmljZQotICoKLSAqIFRoaXMgcm91dGluZSBpcyB1c2VkIHRvIHVucmVnaXN0ZXIgdGhlIHN5ZnMgY29kZSBmb3IgSVIgY2xhc3MKLSAqLwotdm9pZCBpcl91bnJlZ2lzdGVyX2NsYXNzKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldikKLXsKLQlzdHJ1Y3QgaXJfaW5wdXRfZGV2ICppcl9kZXYgPSBpbnB1dF9nZXRfZHJ2ZGF0YShpbnB1dF9kZXYpOwotCi0JaW5wdXRfc2V0X2RydmRhdGEoaW5wdXRfZGV2LCBOVUxMKTsKLQljbGVhcl9iaXQoaXJfZGV2LT5kZXZubywgJmlyX2NvcmVfZGV2X251bWJlcik7Ci0JaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoaW5wdXRfZGV2KTsKLQlkZXZpY2VfZGVsKCZpcl9kZXYtPmRldik7Ci0KLQltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKLX0KLQotLyoKLSAqIEluaXQvZXhpdCBjb2RlIGZvciB0aGUgbW9kdWxlLiBCYXNpY2FsbHksIGNyZWF0ZXMvcmVtb3ZlcyAvc3lzL2NsYXNzL3JjCi0gKi8KLQotc3RhdGljIGludCBfX2luaXQgaXJfY29yZV9pbml0KHZvaWQpCi17Ci0JaW50IHJjID0gY2xhc3NfcmVnaXN0ZXIoJmlyX2lucHV0X2NsYXNzKTsKLQlpZiAocmMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJpcl9jb3JlOiB1bmFibGUgdG8gcmVnaXN0ZXIgcmMgY2xhc3NcbiIpOwotCQlyZXR1cm4gcmM7Ci0JfQotCi0JLyogSW5pdGlhbGl6ZS9sb2FkIHRoZSBkZWNvZGVycy9rZXltYXAgY29kZSB0aGF0IHdpbGwgYmUgdXNlZCAqLwotCWlyX3Jhd19pbml0KCk7Ci0JaXJfcmNtYXBfaW5pdCgpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBpcl9jb3JlX2V4aXQodm9pZCkKLXsKLQljbGFzc191bnJlZ2lzdGVyKCZpcl9pbnB1dF9jbGFzcyk7Ci0JaXJfcmNtYXBfY2xlYW51cCgpOwotfQotCi1tb2R1bGVfaW5pdChpcl9jb3JlX2luaXQpOwotbW9kdWxlX2V4aXQoaXJfY29yZV9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL0tjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0YjIyZjUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL0tjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi1jb25maWcgUkNfTUFQCi0JdHJpc3RhdGUgIkNvbXBpbGUgUmVtb3RlIENvbnRyb2xsZXIga2V5bWFwIG1vZHVsZXMiCi0JZGVwZW5kcyBvbiBJUl9DT1JFCi0JZGVmYXVsdCB5Ci0KLQktLS1oZWxwLS0tCi0JICAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgY29tcGlsYXRpb24gb2YgbG90cyBvZiBSZW1vdGUKLQkgICBDb250cm9sbGVyIHRhYmxlcy4gVGhleSBhcmUgc2hvcnQgdGFibGVzLCBidXQgaWYgeW91Ci0JICAgZG9uJ3QgdXNlIGEgcmVtb3RlIGNvbnRyb2xsZXIsIG9yIHByZWZlciB0byBsb2FkIHRoZQotCSAgIHRhYmxlcyBvbiB1c2Vyc3BhY2UsIHlvdSBzaG91bGQgZGlzYWJsZSBpdC4KLQotCSAgIFRoZSBpci1rZXl0YWJsZSBwcm9ncmFtLCBhdmFpbGFibGUgYXQgdjRsLXV0aWxzIHBhY2thZ2UKLQkgICBwcm92aWRlIHRoZSB0b29sIGFuZCB0aGUgc2FtZSBSQyBtYXBzIGZvciBsb2FkIGZyb20KLQkgICB1c2Vyc3BhY2UuIEl0cyBhdmFpbGFibGUgYXQKLQkJCWh0dHA6Ly9naXQubGludXh0di5vcmcvdjRsLXV0aWxzCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxOTRkMzkuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsODYgKzAsMCBAQAotb2JqLSQoQ09ORklHX1JDX01BUCkgKz0gcmMtYWRzdGVjaC1kdmItdC1wY2kubyBcCi0JCQlyYy1hbGluay1kdHUtbS5vIFwKLQkJCXJjLWFueXNlZS5vIFwKLQkJCXJjLWFwYWMtdmlld2NvbXAubyBcCi0JCQlyYy1hc3VzLXBjMzkubyBcCi0JCQlyYy1hdGktdHYtd29uZGVyLWhkLTYwMC5vIFwKLQkJCXJjLWF2ZXJtZWRpYS1hMTZkLm8gXAotCQkJcmMtYXZlcm1lZGlhLm8gXAotCQkJcmMtYXZlcm1lZGlhLWNhcmRidXMubyBcCi0JCQlyYy1hdmVybWVkaWEtZHZidC5vIFwKLQkJCXJjLWF2ZXJtZWRpYS1tMTM1YS5vIFwKLQkJCXJjLWF2ZXJtZWRpYS1tNzMzYS1ybS1rNi5vIFwKLQkJCXJjLWF2ZXJtZWRpYS1ybS1rcy5vIFwKLQkJCXJjLWF2ZXJ0di0zMDMubyBcCi0JCQlyYy1henVyZXdhdmUtYWQtdHU3MDAubyBcCi0JCQlyYy1iZWhvbGQubyBcCi0JCQlyYy1iZWhvbGQtY29sdW1idXMubyBcCi0JCQlyYy1idWRnZXQtY2ktb2xkLm8gXAotCQkJcmMtY2luZXJneS0xNDAwLm8gXAotCQkJcmMtY2luZXJneS5vIFwKLQkJCXJjLWRpYjA3MDAtbmVjLm8gXAotCQkJcmMtZGliMDcwMC1yYzUubyBcCi0JCQlyYy1kaWdpdGFsbm93LXRpbnl0d2luLm8gXAotCQkJcmMtZGlnaXR0cmFkZS5vIFwKLQkJCXJjLWRtMTEwNS1uZWMubyBcCi0JCQlyYy1kbnR2LWxpdmUtZHZiLXQubyBcCi0JCQlyYy1kbnR2LWxpdmUtZHZidC1wcm8ubyBcCi0JCQlyYy1lbS10ZXJyYXRlYy5vIFwKLQkJCXJjLWVuY29yZS1lbmx0djIubyBcCi0JCQlyYy1lbmNvcmUtZW5sdHYubyBcCi0JCQlyYy1lbmNvcmUtZW5sdHYtZm01My5vIFwKLQkJCXJjLWV2Z2EtaW5kdHViZS5vIFwKLQkJCXJjLWV6dHYubyBcCi0JCQlyYy1mbHlkdmIubyBcCi0JCQlyYy1mbHl2aWRlby5vIFwKLQkJCXJjLWZ1c2lvbmhkdHYtbWNlLm8gXAotCQkJcmMtZ2FkbWVpLXJtMDA4ei5vIFwKLQkJCXJjLWdlbml1cy10dmdvLWExMW1jZS5vIFwKLQkJCXJjLWdvdHZpZXc3MTM1Lm8gXAotCQkJcmMtaGF1cHBhdWdlLW5ldy5vIFwKLQkJCXJjLWltb24tbWNlLm8gXAotCQkJcmMtaW1vbi1wYWQubyBcCi0JCQlyYy1pb2RhdGEtYmN0djdlLm8gXAotCQkJcmMta2Fpb215Lm8gXAotCQkJcmMta3dvcmxkLTMxNXUubyBcCi0JCQlyYy1rd29ybGQtcGx1cy10di1hbmFsb2cubyBcCi0JCQlyYy1sZWFkdGVrLXkwNGcwMDUxLm8gXAotCQkJcmMtbGlyYy5vIFwKLQkJCXJjLWxtZTI1MTAubyBcCi0JCQlyYy1tYW5saS5vIFwKLQkJCXJjLW1zaS1kaWdpdm94LWlpLm8gXAotCQkJcmMtbXNpLWRpZ2l2b3gtaWlpLm8gXAotCQkJcmMtbXNpLXR2YW55d2hlcmUubyBcCi0JCQlyYy1tc2ktdHZhbnl3aGVyZS1wbHVzLm8gXAotCQkJcmMtbmVidWxhLm8gXAotCQkJcmMtbmVjLXRlcnJhdGVjLWNpbmVyZ3kteHMubyBcCi0JCQlyYy1ub3J3b29kLm8gXAotCQkJcmMtbnBndGVjaC5vIFwKLQkJCXJjLXBjdHYtc2VkbmEubyBcCi0JCQlyYy1waW5uYWNsZS1jb2xvci5vIFwKLQkJCXJjLXBpbm5hY2xlLWdyZXkubyBcCi0JCQlyYy1waW5uYWNsZS1wY3R2LWhkLm8gXAotCQkJcmMtcGl4ZWx2aWV3Lm8gXAotCQkJcmMtcGl4ZWx2aWV3LW1rMTIubyBcCi0JCQlyYy1waXhlbHZpZXctbmV3Lm8gXAotCQkJcmMtcG93ZXJjb2xvci1yZWFsLWFuZ2VsLm8gXAotCQkJcmMtcHJvdGV1cy0yMzA5Lm8gXAotCQkJcmMtcHVycGxldHYubyBcCi0JCQlyYy1wdjk1MS5vIFwKLQkJCXJjLXJjNS1oYXVwcGF1Z2UtbmV3Lm8gXAotCQkJcmMtcmM1LXR2Lm8gXAotCQkJcmMtcmM2LW1jZS5vIFwKLQkJCXJjLXJlYWwtYXVkaW8tMjIwLTMyLWtleXMubyBcCi0JCQlyYy1zdHJlYW16YXAubyBcCi0JCQlyYy10YnMtbmVjLm8gXAotCQkJcmMtdGVycmF0ZWMtY2luZXJneS14cy5vIFwKLQkJCXJjLXRlcnJhdGVjLXNsaW0ubyBcCi0JCQlyYy10ZXZpaS1uZWMubyBcCi0JCQlyYy10b3RhbC1tZWRpYS1pbi1oYW5kLm8gXAotCQkJcmMtdHJla3N0b3IubyBcCi0JCQlyYy10dC0xNTAwLm8gXAotCQkJcmMtdHdpbmhhbjEwMjcubyBcCi0JCQlyYy12aWRlb21hdGUtczM1MC5vIFwKLQkJCXJjLXZpZGVvbWF0ZS10di1wdnIubyBcCi0JCQlyYy13aW5mYXN0Lm8gXAotCQkJcmMtd2luZmFzdC11c2JpaS1kZWx1eGUubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLWFkc3RlY2gtZHZiLXQtcGNpLmMgYi9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtYWRzdGVjaC1kdmItdC1wY2kuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjE3MjgzMS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtYWRzdGVjaC1kdmItdC1wY2kuYworKysgL2Rldi9udWxsCkBAIC0xLDg5ICswLDAgQEAKLS8qIGFkc3RlY2gtZHZiLXQtcGNpLmggLSBLZXl0YWJsZSBmb3IgYWRzdGVjaF9kdmJfdF9wY2kgUmVtb3RlIENvbnRyb2xsZXIKLSAqCi0gKiBrZXltYXAgaW1wb3J0ZWQgZnJvbSBpci1rZXltYXBzLmMKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgYnkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0jaW5jbHVkZSA8bWVkaWEvcmMtbWFwLmg+Ci0KLS8qIEFEUyBUZWNoIEluc3RhbnQgVFYgRFZCLVQgUENJIFJlbW90ZSAqLwotCi1zdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGFkc3RlY2hfZHZiX3RfcGNpW10gPSB7Ci0JLyogS2V5cyAwIHRvIDkgKi8KLQl7IDB4NGQsIEtFWV8wIH0sCi0JeyAweDU3LCBLRVlfMSB9LAotCXsgMHg0ZiwgS0VZXzIgfSwKLQl7IDB4NTMsIEtFWV8zIH0sCi0JeyAweDU2LCBLRVlfNCB9LAotCXsgMHg0ZSwgS0VZXzUgfSwKLQl7IDB4NWUsIEtFWV82IH0sCi0JeyAweDU0LCBLRVlfNyB9LAotCXsgMHg0YywgS0VZXzggfSwKLQl7IDB4NWMsIEtFWV85IH0sCi0KLQl7IDB4NWIsIEtFWV9QT1dFUiB9LAotCXsgMHg1ZiwgS0VZX01VVEUgfSwKLQl7IDB4NTUsIEtFWV9HT1RPIH0sCi0JeyAweDVkLCBLRVlfU0VBUkNIIH0sCi0JeyAweDE3LCBLRVlfRVBHIH0sCQkvKiBHdWlkZSAqLwotCXsgMHgxZiwgS0VZX01FTlUgfSwKLQl7IDB4MGYsIEtFWV9VUCB9LAotCXsgMHg0NiwgS0VZX0RPV04gfSwKLQl7IDB4MTYsIEtFWV9MRUZUIH0sCi0JeyAweDFlLCBLRVlfUklHSFQgfSwKLQl7IDB4MGUsIEtFWV9TRUxFQ1QgfSwJCS8qIEVudGVyICovCi0JeyAweDVhLCBLRVlfSU5GTyB9LAotCXsgMHg1MiwgS0VZX0VYSVQgfSwKLQl7IDB4NTksIEtFWV9QUkVWSU9VUyB9LAotCXsgMHg1MSwgS0VZX05FWFQgfSwKLQl7IDB4NTgsIEtFWV9SRVdJTkQgfSwKLQl7IDB4NTAsIEtFWV9GT1JXQVJEIH0sCi0JeyAweDQ0LCBLRVlfUExBWVBBVVNFIH0sCi0JeyAweDA3LCBLRVlfU1RPUCB9LAotCXsgMHgxYiwgS0VZX1JFQ09SRCB9LAotCXsgMHgxMywgS0VZX1RVTkVSIH0sCQkvKiBMaXZlICovCi0JeyAweDBhLCBLRVlfQSB9LAotCXsgMHgxMiwgS0VZX0IgfSwKLQl7IDB4MDMsIEtFWV9QUk9HMSB9LAkJLyogMSAqLwotCXsgMHgwMSwgS0VZX1BST0cyIH0sCQkvKiAyICovCi0JeyAweDAwLCBLRVlfUFJPRzMgfSwJCS8qIDMgKi8KLQl7IDB4MDYsIEtFWV9EVkQgfSwKLQl7IDB4NDgsIEtFWV9BVVggfSwJCS8qIFBob3RvICovCi0JeyAweDQwLCBLRVlfVklERU8gfSwKLQl7IDB4MTksIEtFWV9BVURJTyB9LAkJLyogTXVzaWMgKi8KLQl7IDB4MGIsIEtFWV9DSEFOTkVMVVAgfSwKLQl7IDB4MDgsIEtFWV9DSEFOTkVMRE9XTiB9LAotCXsgMHgxNSwgS0VZX1ZPTFVNRVVQIH0sCi0JeyAweDFjLCBLRVlfVk9MVU1FRE9XTiB9LAotfTsKLQotc3RhdGljIHN0cnVjdCByY19rZXltYXAgYWRzdGVjaF9kdmJfdF9wY2lfbWFwID0gewotCS5tYXAgPSB7Ci0JCS5zY2FuICAgID0gYWRzdGVjaF9kdmJfdF9wY2ksCi0JCS5zaXplICAgID0gQVJSQVlfU0laRShhZHN0ZWNoX2R2Yl90X3BjaSksCi0JCS5pcl90eXBlID0gSVJfVFlQRV9VTktOT1dOLAkvKiBMZWdhY3kgSVIgdHlwZSAqLwotCQkubmFtZSAgICA9IFJDX01BUF9BRFNURUNIX0RWQl9UX1BDSSwKLQl9Ci19OwotCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcF9hZHN0ZWNoX2R2Yl90X3BjaSh2b2lkKQotewotCXJldHVybiBpcl9yZWdpc3Rlcl9tYXAoJmFkc3RlY2hfZHZiX3RfcGNpX21hcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3JjX21hcF9hZHN0ZWNoX2R2Yl90X3BjaSh2b2lkKQotewotCWlyX3VucmVnaXN0ZXJfbWFwKCZhZHN0ZWNoX2R2Yl90X3BjaV9tYXApOwotfQotCi1tb2R1bGVfaW5pdChpbml0X3JjX21hcF9hZHN0ZWNoX2R2Yl90X3BjaSkKLW1vZHVsZV9leGl0KGV4aXRfcmNfbWFwX2Fkc3RlY2hfZHZiX3RfcGNpKQotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1hbGluay1kdHUtbS5jIGIvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLWFsaW5rLWR0dS1tLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkZmVlN2YuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLWFsaW5rLWR0dS1tLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi0vKgotICogQS1MaW5rIERUVShtKSByZW1vdGUgY29udHJvbGxlciBrZXl0YWJsZQotICoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBbnR0aSBQYWxvc2FhcmkgPGNyb3BlQGlraS5maT4KLSAqCi0gKiAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqICAgIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiAgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgotICovCi0KLSNpbmNsdWRlIDxtZWRpYS9yYy1tYXAuaD4KLQotLyogQS1MaW5rIERUVShtKSBzbGltIHJlbW90ZSwgNiByb3dzLCAzIGNvbHVtbnMuICovCi1zdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGFsaW5rX2R0dV9tW10gPSB7Ci0JeyAweDA4MDAsIEtFWV9WT0xVTUVVUCB9LAotCXsgMHgwODAxLCBLRVlfMSB9LAotCXsgMHgwODAyLCBLRVlfMyB9LAotCXsgMHgwODAzLCBLRVlfNyB9LAotCXsgMHgwODA0LCBLRVlfOSB9LAotCXsgMHgwODA1LCBLRVlfTkVXIH0sICAgICAgICAgICAgIC8qIHN5bWJvbDogUElQICovCi0JeyAweDA4MDYsIEtFWV8wIH0sCi0JeyAweDA4MDcsIEtFWV9DSEFOTkVMIH0sICAgICAgICAgLyogSlVNUCAqLwotCXsgMHgwODBkLCBLRVlfNSB9LAotCXsgMHgwODBmLCBLRVlfMiB9LAotCXsgMHgwODEyLCBLRVlfUE9XRVIyIH0sCi0JeyAweDA4MTQsIEtFWV9DSEFOTkVMVVAgfSwKLQl7IDB4MDgxNiwgS0VZX1ZPTFVNRURPV04gfSwKLQl7IDB4MDgxOCwgS0VZXzYgfSwKLQl7IDB4MDgxYSwgS0VZX01VVEUgfSwKLQl7IDB4MDgxYiwgS0VZXzggfSwKLQl7IDB4MDgxYywgS0VZXzQgfSwKLQl7IDB4MDgxZCwgS0VZX0NIQU5ORUxET1dOIH0sCi19OwotCi1zdGF0aWMgc3RydWN0IHJjX2tleW1hcCBhbGlua19kdHVfbV9tYXAgPSB7Ci0JLm1hcCA9IHsKLQkJLnNjYW4gICAgPSBhbGlua19kdHVfbSwKLQkJLnNpemUgICAgPSBBUlJBWV9TSVpFKGFsaW5rX2R0dV9tKSwKLQkJLmlyX3R5cGUgPSBJUl9UWVBFX05FQywKLQkJLm5hbWUgICAgPSBSQ19NQVBfQUxJTktfRFRVX00sCi0JfQotfTsKLQotc3RhdGljIGludCBfX2luaXQgaW5pdF9yY19tYXBfYWxpbmtfZHR1X20odm9pZCkKLXsKLQlyZXR1cm4gaXJfcmVnaXN0ZXJfbWFwKCZhbGlua19kdHVfbV9tYXApOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yY19tYXBfYWxpbmtfZHR1X20odm9pZCkKLXsKLQlpcl91bnJlZ2lzdGVyX21hcCgmYWxpbmtfZHR1X21fbWFwKTsKLX0KLQotbW9kdWxlX2luaXQoaW5pdF9yY19tYXBfYWxpbmtfZHR1X20pCi1tb2R1bGVfZXhpdChleGl0X3JjX21hcF9hbGlua19kdHVfbSkKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiQW50dGkgUGFsb3NhYXJpIDxjcm9wZUBpa2kuZmk+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtYW55c2VlLmMgYi9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtYW55c2VlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwZDcwNDkuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLWFueXNlZS5jCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotLyoKLSAqIEFueXNlZSByZW1vdGUgY29udHJvbGxlciBrZXl0YWJsZQotICoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBbnR0aSBQYWxvc2FhcmkgPGNyb3BlQGlraS5maT4KLSAqCi0gKiAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqICAgIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiAgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgotICovCi0KLSNpbmNsdWRlIDxtZWRpYS9yYy1tYXAuaD4KLQotc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBhbnlzZWVbXSA9IHsKLQl7IDB4MDgwMCwgS0VZXzAgfSwKLQl7IDB4MDgwMSwgS0VZXzEgfSwKLQl7IDB4MDgwMiwgS0VZXzIgfSwKLQl7IDB4MDgwMywgS0VZXzMgfSwKLQl7IDB4MDgwNCwgS0VZXzQgfSwKLQl7IDB4MDgwNSwgS0VZXzUgfSwKLQl7IDB4MDgwNiwgS0VZXzYgfSwKLQl7IDB4MDgwNywgS0VZXzcgfSwKLQl7IDB4MDgwOCwgS0VZXzggfSwKLQl7IDB4MDgwOSwgS0VZXzkgfSwKLQl7IDB4MDgwYSwgS0VZX1BPV0VSMiB9LCAgICAgICAgICAvKiBbcmVkIHBvd2VyIGJ1dHRvbl0gKi8KLQl7IDB4MDgwYiwgS0VZX1ZJREVPIH0sICAgICAgICAgICAvKiBbKl0gTU9ERSAqLwotCXsgMHgwODBjLCBLRVlfQ0hBTk5FTCB9LCAgICAgICAgIC8qIFtzeW1ib2wgY291bnRlcmNsb2Nrd2lzZSBhcnJvd10gKi8KLQl7IDB4MDgwZCwgS0VZX05FWFQgfSwgICAgICAgICAgICAvKiBbPj58XSAqLwotCXsgMHgwODBlLCBLRVlfTUVOVSB9LCAgICAgICAgICAgIC8qIE1FTlUgKi8KLQl7IDB4MDgwZiwgS0VZX0VQRyB9LCAgICAgICAgICAgICAvKiBbRVBHXSAqLwotCXsgMHgwODEwLCBLRVlfQ0xFQVIgfSwgICAgICAgICAgIC8qIEVYSVQgKi8KLQl7IDB4MDgxMSwgS0VZX0NIQU5ORUxVUCB9LAotCXsgMHgwODEyLCBLRVlfVk9MVU1FRE9XTiB9LAotCXsgMHgwODEzLCBLRVlfVk9MVU1FVVAgfSwKLQl7IDB4MDgxNCwgS0VZX0NIQU5ORUxET1dOIH0sCi0JeyAweDA4MTUsIEtFWV9PSyB9LAotCXsgMHgwODE2LCBLRVlfUkFESU8gfSwgICAgICAgICAgIC8qIFtzeW1ib2wgVFYvcmFkaW9dICovCi0JeyAweDA4MTcsIEtFWV9JTkZPIH0sICAgICAgICAgICAgLyogW2ldICovCi0JeyAweDA4MTgsIEtFWV9QUkVWSU9VUyB9LCAgICAgICAgLyogW3w8PF0gKi8KLQl7IDB4MDgxOSwgS0VZX0ZBVk9SSVRFUyB9LCAgICAgICAvKiBGQVYuICovCi0JeyAweDA4MWEsIEtFWV9TVUJUSVRMRSB9LCAgICAgICAgLyogU3VidGl0bGUgKi8KLQl7IDB4MDgxYiwgS0VZX0NBTUVSQSB9LCAgICAgICAgICAvKiBbc3ltYm9sIGNhbWVyYV0gKi8KLQl7IDB4MDgxYywgS0VZX1lFTExPVyB9LAotCXsgMHgwODFkLCBLRVlfUkVEIH0sCi0JeyAweDA4MWUsIEtFWV9MQU5HVUFHRSB9LCAgICAgICAgLyogW3N5bWJvbCBTZWNvbmQgQXVkaW8gUHJvZ3JhbV0gKi8KLQl7IDB4MDgxZiwgS0VZX0dSRUVOIH0sCi0JeyAweDA4MjAsIEtFWV9TTEVFUCB9LCAgICAgICAgICAgLyogU2xlZXAgKi8KLQl7IDB4MDgyMSwgS0VZX1NDUkVFTiB9LCAgICAgICAgICAvKiAxNjo5IC8gNDozICovCi0JeyAweDA4MjIsIEtFWV9aT09NIH0sICAgICAgICAgICAgLyogU0laRSAqLwotCXsgMHgwODI0LCBLRVlfRk4gfSwgICAgICAgICAgICAgIC8qIFtGMV0gKi8KLQl7IDB4MDgyNSwgS0VZX0ZOIH0sICAgICAgICAgICAgICAvKiBbRjJdICovCi0JeyAweDA4NDIsIEtFWV9NVVRFIH0sICAgICAgICAgICAgLyogc3ltYm9sIG11dGUgKi8KLQl7IDB4MDg0NCwgS0VZX0JMVUUgfSwKLQl7IDB4MDg0NywgS0VZX1RFWFQgfSwgICAgICAgICAgICAvKiBURVhUICovCi0JeyAweDA4NDgsIEtFWV9TVE9QIH0sCi0JeyAweDA4NDksIEtFWV9SRUNPUkQgfSwKLQl7IDB4MDg1MCwgS0VZX1BMQVkgfSwKLQl7IDB4MDg1MSwgS0VZX1BBVVNFIH0sCi19OwotCi1zdGF0aWMgc3RydWN0IHJjX2tleW1hcCBhbnlzZWVfbWFwID0gewotCS5tYXAgPSB7Ci0JCS5zY2FuICAgID0gYW55c2VlLAotCQkuc2l6ZSAgICA9IEFSUkFZX1NJWkUoYW55c2VlKSwKLQkJLmlyX3R5cGUgPSBJUl9UWVBFX05FQywKLQkJLm5hbWUgICAgPSBSQ19NQVBfQU5ZU0VFLAotCX0KLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGluaXRfcmNfbWFwX2FueXNlZSh2b2lkKQotewotCXJldHVybiBpcl9yZWdpc3Rlcl9tYXAoJmFueXNlZV9tYXApOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yY19tYXBfYW55c2VlKHZvaWQpCi17Ci0JaXJfdW5yZWdpc3Rlcl9tYXAoJmFueXNlZV9tYXApOwotfQotCi1tb2R1bGVfaW5pdChpbml0X3JjX21hcF9hbnlzZWUpCi1tb2R1bGVfZXhpdChleGl0X3JjX21hcF9hbnlzZWUpCi0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IoIkFudHRpIFBhbG9zYWFyaSA8Y3JvcGVAaWtpLmZpPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLWFwYWMtdmlld2NvbXAuYyBiL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1hcGFjLXZpZXdjb21wLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlZjJiNTYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLWFwYWMtdmlld2NvbXAuYworKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLS8qIGFwYWMtdmlld2NvbXAuaCAtIEtleXRhYmxlIGZvciBhcGFjX3ZpZXdjb21wIFJlbW90ZSBDb250cm9sbGVyCi0gKgotICoga2V5bWFwIGltcG9ydGVkIGZyb20gaXIta2V5bWFwcy5jCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDEwIGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2luY2x1ZGUgPG1lZGlhL3JjLW1hcC5oPgotCi0vKiBBdHRpbGEgS29uZG9yb3MgPGF0dGlsYS5rb25kb3Jvc0BjaGVsbG8uaHU+ICovCi0KLXN0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgYXBhY192aWV3Y29tcFtdID0gewotCi0JeyAweDAxLCBLRVlfMSB9LAotCXsgMHgwMiwgS0VZXzIgfSwKLQl7IDB4MDMsIEtFWV8zIH0sCi0JeyAweDA0LCBLRVlfNCB9LAotCXsgMHgwNSwgS0VZXzUgfSwKLQl7IDB4MDYsIEtFWV82IH0sCi0JeyAweDA3LCBLRVlfNyB9LAotCXsgMHgwOCwgS0VZXzggfSwKLQl7IDB4MDksIEtFWV85IH0sCi0JeyAweDAwLCBLRVlfMCB9LAotCXsgMHgxNywgS0VZX0xBU1QgfSwJCS8qICsxMDAgKi8KLQl7IDB4MGEsIEtFWV9MSVNUIH0sCQkvKiByZWNhbGwgKi8KLQotCi0JeyAweDFjLCBLRVlfVFVORVIgfSwJCS8qIFRWL0ZNICovCi0JeyAweDE1LCBLRVlfU0VBUkNIIH0sCQkvKiBzY2FuICovCi0JeyAweDEyLCBLRVlfUE9XRVIgfSwJCS8qIHBvd2VyICovCi0JeyAweDFmLCBLRVlfVk9MVU1FRE9XTiB9LAkvKiB2b2wgdXAgKi8KLQl7IDB4MWIsIEtFWV9WT0xVTUVVUCB9LAkJLyogdm9sIGRvd24gKi8KLQl7IDB4MWUsIEtFWV9DSEFOTkVMRE9XTiB9LAkvKiBjaG4gdXAgKi8KLQl7IDB4MWEsIEtFWV9DSEFOTkVMVVAgfSwJLyogY2huIGRvd24gKi8KLQotCXsgMHgxMSwgS0VZX1ZJREVPIH0sCQkvKiB2aWRlbyAqLwotCXsgMHgwZiwgS0VZX1pPT00gfSwJCS8qIGZ1bGwgc2NyZWVuICovCi0JeyAweDEzLCBLRVlfTVVURSB9LAkJLyogbXV0ZS91bm11dGUgKi8KLQl7IDB4MTAsIEtFWV9URVhUIH0sCQkvKiBtaW4gKi8KLQotCXsgMHgwZCwgS0VZX1NUT1AgfSwJCS8qIGZyZWV6ZSAqLwotCXsgMHgwZSwgS0VZX1JFQ09SRCB9LAkJLyogcmVjb3JkICovCi0JeyAweDFkLCBLRVlfUExBWVBBVVNFIH0sCS8qIHN0b3AgKi8KLQl7IDB4MTksIEtFWV9QTEFZIH0sCQkvKiBwbGF5ICovCi0KLQl7IDB4MTYsIEtFWV9HT1RPIH0sCQkvKiBvc2QgKi8KLQl7IDB4MTQsIEtFWV9SRUZSRVNIIH0sCQkvKiBkZWZhdWx0ICovCi0JeyAweDBjLCBLRVlfS1BQTFVTIH0sCQkvKiBmaW5lIHR1bmUgPj4+PiAqLwotCXsgMHgxOCwgS0VZX0tQTUlOVVMgfSwJCS8qIGZpbmUgdHVuZSA8PDw8ICovCi19OwotCi1zdGF0aWMgc3RydWN0IHJjX2tleW1hcCBhcGFjX3ZpZXdjb21wX21hcCA9IHsKLQkubWFwID0gewotCQkuc2NhbiAgICA9IGFwYWNfdmlld2NvbXAsCi0JCS5zaXplICAgID0gQVJSQVlfU0laRShhcGFjX3ZpZXdjb21wKSwKLQkJLmlyX3R5cGUgPSBJUl9UWVBFX1VOS05PV04sCS8qIExlZ2FjeSBJUiB0eXBlICovCi0JCS5uYW1lICAgID0gUkNfTUFQX0FQQUNfVklFV0NPTVAsCi0JfQotfTsKLQotc3RhdGljIGludCBfX2luaXQgaW5pdF9yY19tYXBfYXBhY192aWV3Y29tcCh2b2lkKQotewotCXJldHVybiBpcl9yZWdpc3Rlcl9tYXAoJmFwYWNfdmlld2NvbXBfbWFwKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGV4aXRfcmNfbWFwX2FwYWNfdmlld2NvbXAodm9pZCkKLXsKLQlpcl91bnJlZ2lzdGVyX21hcCgmYXBhY192aWV3Y29tcF9tYXApOwotfQotCi1tb2R1bGVfaW5pdChpbml0X3JjX21hcF9hcGFjX3ZpZXdjb21wKQotbW9kdWxlX2V4aXQoZXhpdF9yY19tYXBfYXBhY192aWV3Y29tcCkKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtYXN1cy1wYzM5LmMgYi9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtYXN1cy1wYzM5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5OTZlMGEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLWFzdXMtcGMzOS5jCisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAotLyogYXN1cy1wYzM5LmggLSBLZXl0YWJsZSBmb3IgYXN1c19wYzM5IFJlbW90ZSBDb250cm9sbGVyCi0gKgotICoga2V5bWFwIGltcG9ydGVkIGZyb20gaXIta2V5bWFwcy5jCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDEwIGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2luY2x1ZGUgPG1lZGlhL3JjLW1hcC5oPgotCi0vKgotICogTWFyYyBGYXJnYXMgPHRlbGVuaWVrb0B0ZWxlbmlla28uY29tPgotICogdGhpcyBpcyB0aGUgcmVtb3RlIGNvbnRyb2wgdGhhdCBjb21lcyB3aXRoIHRoZSBhc3VzIHA3MTMxCi0gKiB3aGljaCBoYXMgYSBsYWJlbCBzYXlpbmcgaXMgIk1vZGVsIFBDLTM5IgotICovCi0KLXN0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgYXN1c19wYzM5W10gPSB7Ci0JLyogS2V5cyAwIHRvIDkgKi8KLQl7IDB4MDgyYSwgS0VZXzAgfSwKLQl7IDB4MDgxNiwgS0VZXzEgfSwKLQl7IDB4MDgxMiwgS0VZXzIgfSwKLQl7IDB4MDgxNCwgS0VZXzMgfSwKLQl7IDB4MDgzNiwgS0VZXzQgfSwKLQl7IDB4MDgzMiwgS0VZXzUgfSwKLQl7IDB4MDgzNCwgS0VZXzYgfSwKLQl7IDB4MDgwZSwgS0VZXzcgfSwKLQl7IDB4MDgwYSwgS0VZXzggfSwKLQl7IDB4MDgwYywgS0VZXzkgfSwKLQotCXsgMHgwODAxLCBLRVlfUkFESU8gfSwJCS8qIHJhZGlvICovCi0JeyAweDA4M2MsIEtFWV9NRU5VIH0sCQkvKiBkdmQvbWVudSAqLwotCXsgMHgwODE1LCBLRVlfVk9MVU1FVVAgfSwKLQl7IDB4MDgyNiwgS0VZX1ZPTFVNRURPV04gfSwKLQl7IDB4MDgwOCwgS0VZX1VQIH0sCi0JeyAweDA4MDQsIEtFWV9ET1dOIH0sCi0JeyAweDA4MTgsIEtFWV9MRUZUIH0sCi0JeyAweDA4MTAsIEtFWV9SSUdIVCB9LAotCXsgMHgwODFhLCBLRVlfVklERU8gfSwJCS8qIHZpZGVvICovCi0JeyAweDA4MDYsIEtFWV9BVURJTyB9LAkJLyogbXVzaWMgKi8KLQotCXsgMHgwODFlLCBLRVlfVFYgfSwJCS8qIHR2ICovCi0JeyAweDA4MjIsIEtFWV9FWElUIH0sCQkvKiBiYWNrICovCi0JeyAweDA4MzUsIEtFWV9DSEFOTkVMVVAgfSwJLyogY2hhbm5lbCAvIHByb2dyYW0gKyAqLwotCXsgMHgwODI0LCBLRVlfQ0hBTk5FTERPV04gfSwJLyogY2hhbm5lbCAvIHByb2dyYW0gLSAqLwotCXsgMHgwODI1LCBLRVlfRU5URVIgfSwJCS8qIGVudGVyICovCi0KLQl7IDB4MDgzOSwgS0VZX1BBVVNFIH0sCQkvKiBwbGF5L3BhdXNlICovCi0JeyAweDA4MjEsIEtFWV9QUkVWSU9VUyB9LAkJLyogcmV3ICovCi0JeyAweDA4MTksIEtFWV9ORVhUIH0sCQkvKiBmb3J3YXJkICovCi0JeyAweDA4MzEsIEtFWV9SRVdJTkQgfSwJCS8qIGJhY2t3YXJkIDw8ICovCi0JeyAweDA4MDUsIEtFWV9GQVNURk9SV0FSRCB9LAkvKiBmb3J3YXJkID4+ICovCi0JeyAweDA4MDksIEtFWV9TVE9QIH0sCi0JeyAweDA4MTEsIEtFWV9SRUNPUkQgfSwJCS8qIHJlY29yZGluZyAqLwotCXsgMHgwODI5LCBLRVlfUE9XRVIgfSwJCS8qIHRoZSBidXR0b24gdGhhdCByZWFkcyAiY2xvc2UiICovCi0KLQl7IDB4MDgyZSwgS0VZX1pPT00gfSwJCS8qIGZ1bGwgc2NyZWVuICovCi0JeyAweDA4MmMsIEtFWV9NQUNSTyB9LAkJLyogcmVjYWxsICovCi0JeyAweDA4MWMsIEtFWV9IT01FIH0sCQkvKiBob21lICovCi0JeyAweDA4M2EsIEtFWV9QVlIgfSwJCS8qIHBpY3R1cmUgKi8KLQl7IDB4MDgwMiwgS0VZX01VVEUgfSwJCS8qIG11dGUgKi8KLQl7IDB4MDgzZSwgS0VZX0RWRCB9LAkJLyogZHZkICovCi19OwotCi1zdGF0aWMgc3RydWN0IHJjX2tleW1hcCBhc3VzX3BjMzlfbWFwID0gewotCS5tYXAgPSB7Ci0JCS5zY2FuICAgID0gYXN1c19wYzM5LAotCQkuc2l6ZSAgICA9IEFSUkFZX1NJWkUoYXN1c19wYzM5KSwKLQkJLmlyX3R5cGUgPSBJUl9UWVBFX1JDNSwKLQkJLm5hbWUgICAgPSBSQ19NQVBfQVNVU19QQzM5LAotCX0KLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGluaXRfcmNfbWFwX2FzdXNfcGMzOSh2b2lkKQotewotCXJldHVybiBpcl9yZWdpc3Rlcl9tYXAoJmFzdXNfcGMzOV9tYXApOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yY19tYXBfYXN1c19wYzM5KHZvaWQpCi17Ci0JaXJfdW5yZWdpc3Rlcl9tYXAoJmFzdXNfcGMzOV9tYXApOwotfQotCi1tb2R1bGVfaW5pdChpbml0X3JjX21hcF9hc3VzX3BjMzkpCi1tb2R1bGVfZXhpdChleGl0X3JjX21hcF9hc3VzX3BjMzkpCi0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IoIk1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLWF0aS10di13b25kZXItaGQtNjAwLmMgYi9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtYXRpLXR2LXdvbmRlci1oZC02MDAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGVkZmQyOS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtYXRpLXR2LXdvbmRlci1oZC02MDAuYworKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS8qIGF0aS10di13b25kZXItaGQtNjAwLmggLSBLZXl0YWJsZSBmb3IgYXRpX3R2X3dvbmRlcl9oZF82MDAgUmVtb3RlIENvbnRyb2xsZXIKLSAqCi0gKiBrZXltYXAgaW1wb3J0ZWQgZnJvbSBpci1rZXltYXBzLmMKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgYnkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0jaW5jbHVkZSA8bWVkaWEvcmMtbWFwLmg+Ci0KLS8qIEFUSSBUViBXb25kZXIgSEQgNjAwIFVTQgotICAgRGV2aW4gSGVpdG11ZWxsZXIgPGRldmluLmhlaXRtdWVsbGVyQGdtYWlsLmNvbT4KLSAqLwotCi1zdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGF0aV90dl93b25kZXJfaGRfNjAwW10gPSB7Ci0JeyAweDAwLCBLRVlfUkVDT1JEfSwJCS8qIFJvdyAxICovCi0JeyAweDAxLCBLRVlfUExBWVBBVVNFfSwKLQl7IDB4MDIsIEtFWV9TVE9QfSwKLQl7IDB4MDMsIEtFWV9QT1dFUn0sCi0JeyAweDA0LCBLRVlfUFJFVklPVVN9LAkvKiBSb3cgMiAqLwotCXsgMHgwNSwgS0VZX1JFV0lORH0sCi0JeyAweDA2LCBLRVlfRk9SV0FSRH0sCi0JeyAweDA3LCBLRVlfTkVYVH0sCi0JeyAweDA4LCBLRVlfRVBHfSwJCS8qIFJvdyAzICovCi0JeyAweDA5LCBLRVlfSE9NRX0sCi0JeyAweDBhLCBLRVlfTUVOVX0sCi0JeyAweDBiLCBLRVlfQ0hBTk5FTFVQfSwKLQl7IDB4MGMsIEtFWV9CQUNLfSwJCS8qIFJvdyA0ICovCi0JeyAweDBkLCBLRVlfVVB9LAotCXsgMHgwZSwgS0VZX0lORk99LAotCXsgMHgwZiwgS0VZX0NIQU5ORUxET1dOfSwKLQl7IDB4MTAsIEtFWV9MRUZUfSwJCS8qIFJvdyA1ICovCi0JeyAweDExLCBLRVlfU0VMRUNUfSwKLQl7IDB4MTIsIEtFWV9SSUdIVH0sCi0JeyAweDEzLCBLRVlfVk9MVU1FVVB9LAotCXsgMHgxNCwgS0VZX0xBU1R9LAkJLyogUm93IDYgKi8KLQl7IDB4MTUsIEtFWV9ET1dOfSwKLQl7IDB4MTYsIEtFWV9NVVRFfSwKLQl7IDB4MTcsIEtFWV9WT0xVTUVET1dOfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmNfa2V5bWFwIGF0aV90dl93b25kZXJfaGRfNjAwX21hcCA9IHsKLQkubWFwID0gewotCQkuc2NhbiAgICA9IGF0aV90dl93b25kZXJfaGRfNjAwLAotCQkuc2l6ZSAgICA9IEFSUkFZX1NJWkUoYXRpX3R2X3dvbmRlcl9oZF82MDApLAotCQkuaXJfdHlwZSA9IElSX1RZUEVfVU5LTk9XTiwJLyogTGVnYWN5IElSIHR5cGUgKi8KLQkJLm5hbWUgICAgPSBSQ19NQVBfQVRJX1RWX1dPTkRFUl9IRF82MDAsCi0JfQotfTsKLQotc3RhdGljIGludCBfX2luaXQgaW5pdF9yY19tYXBfYXRpX3R2X3dvbmRlcl9oZF82MDAodm9pZCkKLXsKLQlyZXR1cm4gaXJfcmVnaXN0ZXJfbWFwKCZhdGlfdHZfd29uZGVyX2hkXzYwMF9tYXApOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yY19tYXBfYXRpX3R2X3dvbmRlcl9oZF82MDAodm9pZCkKLXsKLQlpcl91bnJlZ2lzdGVyX21hcCgmYXRpX3R2X3dvbmRlcl9oZF82MDBfbWFwKTsKLX0KLQotbW9kdWxlX2luaXQoaW5pdF9yY19tYXBfYXRpX3R2X3dvbmRlcl9oZF82MDApCi1tb2R1bGVfZXhpdChleGl0X3JjX21hcF9hdGlfdHZfd29uZGVyX2hkXzYwMCkKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtYXZlcm1lZGlhLWExNmQuYyBiL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1hdmVybWVkaWEtYTE2ZC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMmYwNDM1Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1hdmVybWVkaWEtYTE2ZC5jCisrKyAvZGV2L251bGwKQEAgLTEsNzUgKzAsMCBAQAotLyogYXZlcm1lZGlhLWExNmQuaCAtIEtleXRhYmxlIGZvciBhdmVybWVkaWFfYTE2ZCBSZW1vdGUgQ29udHJvbGxlcgotICoKLSAqIGtleW1hcCBpbXBvcnRlZCBmcm9tIGlyLWtleW1hcHMuYwotICoKLSAqIENvcHlyaWdodCAoYykgMjAxMCBieSBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLSNpbmNsdWRlIDxtZWRpYS9yYy1tYXAuaD4KLQotc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBhdmVybWVkaWFfYTE2ZFtdID0gewotCXsgMHgyMCwgS0VZX0xJU1R9LAotCXsgMHgwMCwgS0VZX1BPV0VSfSwKLQl7IDB4MjgsIEtFWV8xfSwKLQl7IDB4MTgsIEtFWV8yfSwKLQl7IDB4MzgsIEtFWV8zfSwKLQl7IDB4MjQsIEtFWV80fSwKLQl7IDB4MTQsIEtFWV81fSwKLQl7IDB4MzQsIEtFWV82fSwKLQl7IDB4MmMsIEtFWV83fSwKLQl7IDB4MWMsIEtFWV84fSwKLQl7IDB4M2MsIEtFWV85fSwKLQl7IDB4MTIsIEtFWV9TVUJUSVRMRX0sCi0JeyAweDIyLCBLRVlfMH0sCi0JeyAweDMyLCBLRVlfUkVXSU5EfSwKLQl7IDB4M2EsIEtFWV9TSFVGRkxFfSwKLQl7IDB4MDIsIEtFWV9QUklOVH0sCi0JeyAweDExLCBLRVlfQ0hBTk5FTERPV059LAotCXsgMHgzMSwgS0VZX0NIQU5ORUxVUH0sCi0JeyAweDBjLCBLRVlfWk9PTX0sCi0JeyAweDFlLCBLRVlfVk9MVU1FRE9XTn0sCi0JeyAweDNlLCBLRVlfVk9MVU1FVVB9LAotCXsgMHgwYSwgS0VZX01VVEV9LAotCXsgMHgwNCwgS0VZX0FVRElPfSwKLQl7IDB4MjYsIEtFWV9SRUNPUkR9LAotCXsgMHgwNiwgS0VZX1BMQVl9LAotCXsgMHgzNiwgS0VZX1NUT1B9LAotCXsgMHgxNiwgS0VZX1BBVVNFfSwKLQl7IDB4MmUsIEtFWV9SRVdJTkR9LAotCXsgMHgwZSwgS0VZX0ZBU1RGT1JXQVJEfSwKLQl7IDB4MzAsIEtFWV9URVhUfSwKLQl7IDB4MjEsIEtFWV9HUkVFTn0sCi0JeyAweDAxLCBLRVlfQkxVRX0sCi0JeyAweDA4LCBLRVlfRVBHfSwKLQl7IDB4MmEsIEtFWV9NRU5VfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmNfa2V5bWFwIGF2ZXJtZWRpYV9hMTZkX21hcCA9IHsKLQkubWFwID0gewotCQkuc2NhbiAgICA9IGF2ZXJtZWRpYV9hMTZkLAotCQkuc2l6ZSAgICA9IEFSUkFZX1NJWkUoYXZlcm1lZGlhX2ExNmQpLAotCQkuaXJfdHlwZSA9IElSX1RZUEVfVU5LTk9XTiwJLyogTGVnYWN5IElSIHR5cGUgKi8KLQkJLm5hbWUgICAgPSBSQ19NQVBfQVZFUk1FRElBX0ExNkQsCi0JfQotfTsKLQotc3RhdGljIGludCBfX2luaXQgaW5pdF9yY19tYXBfYXZlcm1lZGlhX2ExNmQodm9pZCkKLXsKLQlyZXR1cm4gaXJfcmVnaXN0ZXJfbWFwKCZhdmVybWVkaWFfYTE2ZF9tYXApOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yY19tYXBfYXZlcm1lZGlhX2ExNmQodm9pZCkKLXsKLQlpcl91bnJlZ2lzdGVyX21hcCgmYXZlcm1lZGlhX2ExNmRfbWFwKTsKLX0KLQotbW9kdWxlX2luaXQoaW5pdF9yY19tYXBfYXZlcm1lZGlhX2ExNmQpCi1tb2R1bGVfZXhpdChleGl0X3JjX21hcF9hdmVybWVkaWFfYTE2ZCkKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtYXZlcm1lZGlhLWNhcmRidXMuYyBiL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1hdmVybWVkaWEtY2FyZGJ1cy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTk0NWIwLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1hdmVybWVkaWEtY2FyZGJ1cy5jCisrKyAvZGV2L251bGwKQEAgLTEsOTcgKzAsMCBAQAotLyogYXZlcm1lZGlhLWNhcmRidXMuaCAtIEtleXRhYmxlIGZvciBhdmVybWVkaWFfY2FyZGJ1cyBSZW1vdGUgQ29udHJvbGxlcgotICoKLSAqIGtleW1hcCBpbXBvcnRlZCBmcm9tIGlyLWtleW1hcHMuYwotICoKLSAqIENvcHlyaWdodCAoYykgMjAxMCBieSBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLSNpbmNsdWRlIDxtZWRpYS9yYy1tYXAuaD4KLQotLyogT2xkcmljaCBKZWRsaWNrYSA8b2xkaXVtLnByb0BzZXpuYW0uY3o+ICovCi0KLXN0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgYXZlcm1lZGlhX2NhcmRidXNbXSA9IHsKLQl7IDB4MDAsIEtFWV9QT1dFUiB9LAotCXsgMHgwMSwgS0VZX1RVTkVSIH0sCQkvKiBUVi9GTSAqLwotCXsgMHgwMywgS0VZX1RFWFQgfSwJCS8qIFRlbGV0ZXh0ICovCi0JeyAweDA0LCBLRVlfRVBHIH0sCi0JeyAweDA1LCBLRVlfMSB9LAotCXsgMHgwNiwgS0VZXzIgfSwKLQl7IDB4MDcsIEtFWV8zIH0sCi0JeyAweDA4LCBLRVlfQVVESU8gfSwKLQl7IDB4MDksIEtFWV80IH0sCi0JeyAweDBhLCBLRVlfNSB9LAotCXsgMHgwYiwgS0VZXzYgfSwKLQl7IDB4MGMsIEtFWV9aT09NIH0sCQkvKiBGdWxsIHNjcmVlbiAqLwotCXsgMHgwZCwgS0VZXzcgfSwKLQl7IDB4MGUsIEtFWV84IH0sCi0JeyAweDBmLCBLRVlfOSB9LAotCXsgMHgxMCwgS0VZX1BBR0VVUCB9LAkJLyogMTYtQ0ggUFJFViAqLwotCXsgMHgxMSwgS0VZXzAgfSwKLQl7IDB4MTIsIEtFWV9JTkZPIH0sCi0JeyAweDEzLCBLRVlfQUdBSU4gfSwJCS8qIENIIFJUTiAtIGNoYW5uZWwgcmV0dXJuICovCi0JeyAweDE0LCBLRVlfTVVURSB9LAotCXsgMHgxNSwgS0VZX0VESVQgfSwJCS8qIEF1dG9zY2FuICovCi0JeyAweDE3LCBLRVlfU0FWRSB9LAkJLyogU2NyZWVuc2hvdCAqLwotCXsgMHgxOCwgS0VZX1BMQVlQQVVTRSB9LAotCXsgMHgxOSwgS0VZX1JFQ09SRCB9LAotCXsgMHgxYSwgS0VZX1BMQVkgfSwKLQl7IDB4MWIsIEtFWV9TVE9QIH0sCi0JeyAweDFjLCBLRVlfRkFTVEZPUldBUkQgfSwKLQl7IDB4MWQsIEtFWV9SRVdJTkQgfSwKLQl7IDB4MWUsIEtFWV9WT0xVTUVET1dOIH0sCi0JeyAweDFmLCBLRVlfVk9MVU1FVVAgfSwKLQl7IDB4MjIsIEtFWV9TTEVFUCB9LAkJLyogU2xlZXAgKi8KLQl7IDB4MjMsIEtFWV9aT09NIH0sCQkvKiBBc3BlY3QgKi8KLQl7IDB4MjYsIEtFWV9TQ1JFRU4gfSwJCS8qIFBvcyAqLwotCXsgMHgyNywgS0VZX0FOR0xFIH0sCQkvKiBTaXplICovCi0JeyAweDI4LCBLRVlfU0VMRUNUIH0sCQkvKiBTZWxlY3QgKi8KLQl7IDB4MjksIEtFWV9CTFVFIH0sCQkvKiBCbHVlL1BpY3R1cmUgKi8KLQl7IDB4MmEsIEtFWV9CQUNLU1BBQ0UgfSwJLyogQmFjayAqLwotCXsgMHgyYiwgS0VZX01FRElBIH0sCQkvKiBQSVAgKFBpY3R1cmUtaW4tcGljdHVyZSkgKi8KLQl7IDB4MmMsIEtFWV9ET1dOIH0sCi0JeyAweDJlLCBLRVlfRE9UIH0sCi0JeyAweDJmLCBLRVlfVFYgfSwJCS8qIExpdmUgVFYgKi8KLQl7IDB4MzIsIEtFWV9MRUZUIH0sCi0JeyAweDMzLCBLRVlfQ0xFQVIgfSwJCS8qIENsZWFyICovCi0JeyAweDM1LCBLRVlfUkVEIH0sCQkvKiBSZWQvVFYgKi8KLQl7IDB4MzYsIEtFWV9VUCB9LAotCXsgMHgzNywgS0VZX0hPTUUgfSwJCS8qIEhvbWUgKi8KLQl7IDB4MzksIEtFWV9HUkVFTiB9LAkJLyogR3JlZW4vVmlkZW8gKi8KLQl7IDB4M2QsIEtFWV9ZRUxMT1cgfSwJCS8qIFllbGxvdy9NdXNpYyAqLwotCXsgMHgzZSwgS0VZX09LIH0sCQkvKiBPayAqLwotCXsgMHgzZiwgS0VZX1JJR0hUIH0sCi0JeyAweDQwLCBLRVlfTkVYVCB9LAkJLyogTmV4dCAqLwotCXsgMHg0MSwgS0VZX1BSRVZJT1VTIH0sCQkvKiBQcmV2aW91cyAqLwotCXsgMHg0MiwgS0VZX0NIQU5ORUxET1dOIH0sCS8qIENoYW5uZWwgZG93biAqLwotCXsgMHg0MywgS0VZX0NIQU5ORUxVUCB9LAkvKiBDaGFubmVsIHVwICovCi19OwotCi1zdGF0aWMgc3RydWN0IHJjX2tleW1hcCBhdmVybWVkaWFfY2FyZGJ1c19tYXAgPSB7Ci0JLm1hcCA9IHsKLQkJLnNjYW4gICAgPSBhdmVybWVkaWFfY2FyZGJ1cywKLQkJLnNpemUgICAgPSBBUlJBWV9TSVpFKGF2ZXJtZWRpYV9jYXJkYnVzKSwKLQkJLmlyX3R5cGUgPSBJUl9UWVBFX1VOS05PV04sCS8qIExlZ2FjeSBJUiB0eXBlICovCi0JCS5uYW1lICAgID0gUkNfTUFQX0FWRVJNRURJQV9DQVJEQlVTLAotCX0KLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGluaXRfcmNfbWFwX2F2ZXJtZWRpYV9jYXJkYnVzKHZvaWQpCi17Ci0JcmV0dXJuIGlyX3JlZ2lzdGVyX21hcCgmYXZlcm1lZGlhX2NhcmRidXNfbWFwKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGV4aXRfcmNfbWFwX2F2ZXJtZWRpYV9jYXJkYnVzKHZvaWQpCi17Ci0JaXJfdW5yZWdpc3Rlcl9tYXAoJmF2ZXJtZWRpYV9jYXJkYnVzX21hcCk7Ci19Ci0KLW1vZHVsZV9pbml0KGluaXRfcmNfbWFwX2F2ZXJtZWRpYV9jYXJkYnVzKQotbW9kdWxlX2V4aXQoZXhpdF9yY19tYXBfYXZlcm1lZGlhX2NhcmRidXMpCi0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IoIk1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLWF2ZXJtZWRpYS1kdmJ0LmMgYi9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtYXZlcm1lZGlhLWR2YnQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzlkZGU2Mi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtYXZlcm1lZGlhLWR2YnQuYworKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLS8qIGF2ZXJtZWRpYS1kdmJ0LmggLSBLZXl0YWJsZSBmb3IgYXZlcm1lZGlhX2R2YnQgUmVtb3RlIENvbnRyb2xsZXIKLSAqCi0gKiBrZXltYXAgaW1wb3J0ZWQgZnJvbSBpci1rZXltYXBzLmMKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgYnkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0jaW5jbHVkZSA8bWVkaWEvcmMtbWFwLmg+Ci0KLS8qIE1hdHQgSmVzc29uIDxkdmJAamVzc29uLmVjbGlwc2UuY28udWsgKi8KLQotc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBhdmVybWVkaWFfZHZidFtdID0gewotCXsgMHgyOCwgS0VZXzAgfSwJCS8qICcwJyAvICdlbnRlcicgKi8KLQl7IDB4MjIsIEtFWV8xIH0sCQkvKiAnMScgKi8KLQl7IDB4MTIsIEtFWV8yIH0sCQkvKiAnMicgLyAndXAgYXJyb3cnICovCi0JeyAweDMyLCBLRVlfMyB9LAkJLyogJzMnICovCi0JeyAweDI0LCBLRVlfNCB9LAkJLyogJzQnIC8gJ2xlZnQgYXJyb3cnICovCi0JeyAweDE0LCBLRVlfNSB9LAkJLyogJzUnICovCi0JeyAweDM0LCBLRVlfNiB9LAkJLyogJzYnIC8gJ3JpZ2h0IGFycm93JyAqLwotCXsgMHgyNiwgS0VZXzcgfSwJCS8qICc3JyAqLwotCXsgMHgxNiwgS0VZXzggfSwJCS8qICc4JyAvICdkb3duIGFycm93JyAqLwotCXsgMHgzNiwgS0VZXzkgfSwJCS8qICc5JyAqLwotCi0JeyAweDIwLCBLRVlfTElTVCB9LAkJLyogJ3NvdXJjZScgKi8KLQl7IDB4MTAsIEtFWV9URVhUIH0sCQkvKiAndGVsZXRleHQnICovCi0JeyAweDAwLCBLRVlfUE9XRVIgfSwJCS8qICdwb3dlcicgKi8KLQl7IDB4MDQsIEtFWV9BVURJTyB9LAkJLyogJ2F1ZGlvJyAqLwotCXsgMHgwNiwgS0VZX1pPT00gfSwJCS8qICdmdWxsIHNjcmVlbicgKi8KLQl7IDB4MTgsIEtFWV9WSURFTyB9LAkJLyogJ2Rpc3BsYXknICovCi0JeyAweDM4LCBLRVlfU0VBUkNIIH0sCQkvKiAnbG9vcCcgKi8KLQl7IDB4MDgsIEtFWV9JTkZPIH0sCQkvKiAncHJldmlldycgKi8KLQl7IDB4MmEsIEtFWV9SRVdJTkQgfSwJCS8qICdiYWNrd2FyZCA8PCcgKi8KLQl7IDB4MWEsIEtFWV9GQVNURk9SV0FSRCB9LAkvKiAnZm9yd2FyZCA+PicgKi8KLQl7IDB4M2EsIEtFWV9SRUNPUkQgfSwJCS8qICdjYXB0dXJlJyAqLwotCXsgMHgwYSwgS0VZX01VVEUgfSwJCS8qICdtdXRlJyAqLwotCXsgMHgyYywgS0VZX1JFQ09SRCB9LAkJLyogJ3JlY29yZCcgKi8KLQl7IDB4MWMsIEtFWV9QQVVTRSB9LAkJLyogJ3BhdXNlJyAqLwotCXsgMHgzYywgS0VZX1NUT1AgfSwJCS8qICdzdG9wJyAqLwotCXsgMHgwYywgS0VZX1BMQVkgfSwJCS8qICdwbGF5JyAqLwotCXsgMHgyZSwgS0VZX1JFRCB9LAkJLyogJ3JlZCcgKi8KLQl7IDB4MDEsIEtFWV9CTFVFIH0sCQkvKiAnYmx1ZScgLyAnY2FuY2VsJyAqLwotCXsgMHgwZSwgS0VZX1lFTExPVyB9LAkJLyogJ3llbGxvdycgLyAnb2snICovCi0JeyAweDIxLCBLRVlfR1JFRU4gfSwJCS8qICdncmVlbicgKi8KLQl7IDB4MTEsIEtFWV9DSEFOTkVMRE9XTiB9LAkvKiAnY2hhbm5lbCAtJyAqLwotCXsgMHgzMSwgS0VZX0NIQU5ORUxVUCB9LAkvKiAnY2hhbm5lbCArJyAqLwotCXsgMHgxZSwgS0VZX1ZPTFVNRURPV04gfSwJLyogJ3ZvbHVtZSAtJyAqLwotCXsgMHgzZSwgS0VZX1ZPTFVNRVVQIH0sCQkvKiAndm9sdW1lICsnICovCi19OwotCi1zdGF0aWMgc3RydWN0IHJjX2tleW1hcCBhdmVybWVkaWFfZHZidF9tYXAgPSB7Ci0JLm1hcCA9IHsKLQkJLnNjYW4gICAgPSBhdmVybWVkaWFfZHZidCwKLQkJLnNpemUgICAgPSBBUlJBWV9TSVpFKGF2ZXJtZWRpYV9kdmJ0KSwKLQkJLmlyX3R5cGUgPSBJUl9UWVBFX1VOS05PV04sCS8qIExlZ2FjeSBJUiB0eXBlICovCi0JCS5uYW1lICAgID0gUkNfTUFQX0FWRVJNRURJQV9EVkJULAotCX0KLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGluaXRfcmNfbWFwX2F2ZXJtZWRpYV9kdmJ0KHZvaWQpCi17Ci0JcmV0dXJuIGlyX3JlZ2lzdGVyX21hcCgmYXZlcm1lZGlhX2R2YnRfbWFwKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGV4aXRfcmNfbWFwX2F2ZXJtZWRpYV9kdmJ0KHZvaWQpCi17Ci0JaXJfdW5yZWdpc3Rlcl9tYXAoJmF2ZXJtZWRpYV9kdmJ0X21hcCk7Ci19Ci0KLW1vZHVsZV9pbml0KGluaXRfcmNfbWFwX2F2ZXJtZWRpYV9kdmJ0KQotbW9kdWxlX2V4aXQoZXhpdF9yY19tYXBfYXZlcm1lZGlhX2R2YnQpCi0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IoIk1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLWF2ZXJtZWRpYS1tMTM1YS5jIGIvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLWF2ZXJtZWRpYS1tMTM1YS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNDQ3MWZiLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1hdmVybWVkaWEtbTEzNWEuYworKysgL2Rldi9udWxsCkBAIC0xLDE0NyArMCwwIEBACi0vKiBhdmVybWVkaWEtbTEzNWEuYyAtIEtleXRhYmxlIGZvciBBdmVybWVkaWEgTTEzNUEgUmVtb3RlIENvbnRyb2xsZXJzCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDEwIGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPgotICogQ29weXJpZ2h0IChjKSAyMDEwIGJ5IEhlcnRvbiBSb25hbGRvIEtyemVzaW5za2kgPGhlcnRvbkBtYW5kcml2YS5jb20uYnI+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0jaW5jbHVkZSA8bWVkaWEvcmMtbWFwLmg+Ci0KLS8qCi0gKiBBdmVybWVkaWEgTTEzNUEgd2l0aCBSTS1KWCBhbmQgUk0tSzYgcmVtb3RlIGNvbnRyb2xzCi0gKgotICogT24gQXZlcm1lZGlhIE0xMzVBIHdpdGggSVIgbW9kZWwgUk0tSlgsIHRoZSBzYW1lIGNvZGVzIGV4aXN0IG9uIGJvdGgKLSAqIFBvc2l0aXZvIChCUikgYW5kIG9yaWdpbmFsIElSLCBpbml0aWFsIHZlcnNpb24gYW5kIHJlbW90ZSBjb250cm9sIGNvZGVzCi0gKiBhZGRlZCBieSBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAaW5mcmFkZWFkLm9yZz4KLSAqCi0gKiBQb3NpdGl2byBhbHNvIHNoaXBzIEF2ZXJtZWRpYSBNMTM1QSB3aXRoIG1vZGVsIFJNLUs2LCBleHRyYSBjb250cm9sCi0gKiBjb2RlcyBhZGRlZCBieSBIZXJ0b24gUm9uYWxkbyBLcnplc2luc2tpIDxoZXJ0b25AbWFuZHJpdmEuY29tLmJyPgotICovCi0KLXN0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgYXZlcm1lZGlhX20xMzVhW10gPSB7Ci0JLyogUk0tSlggKi8KLQl7IDB4MDIwMCwgS0VZX1BPV0VSMiB9LAotCXsgMHgwMjJlLCBLRVlfRE9UIH0sCQkvKiAnLicgKi8KLQl7IDB4MDIwMSwgS0VZX01PREUgfSwJCS8qIFRWL0ZNIG9yIFNPVVJDRSAqLwotCi0JeyAweDAyMDUsIEtFWV8xIH0sCi0JeyAweDAyMDYsIEtFWV8yIH0sCi0JeyAweDAyMDcsIEtFWV8zIH0sCi0JeyAweDAyMDksIEtFWV80IH0sCi0JeyAweDAyMGEsIEtFWV81IH0sCi0JeyAweDAyMGIsIEtFWV82IH0sCi0JeyAweDAyMGQsIEtFWV83IH0sCi0JeyAweDAyMGUsIEtFWV84IH0sCi0JeyAweDAyMGYsIEtFWV85IH0sCi0JeyAweDAyMTEsIEtFWV8wIH0sCi0KLQl7IDB4MDIxMywgS0VZX1JJR0hUIH0sCQkvKiAtPiBvciBMICovCi0JeyAweDAyMTIsIEtFWV9MRUZUIH0sCQkvKiA8LSBvciBSICovCi0KLQl7IDB4MDIxNywgS0VZX1NMRUVQIH0sCQkvKiBDYXB0dXJhciBJbWFnZW0gb3IgU25hcHNob3QgKi8KLQl7IDB4MDIxMCwgS0VZX1NIVUZGTEUgfSwJLyogQW1vc3RyYSBvciAxNiBjaGFuIHByZXYgKi8KLQotCXsgMHgwMzAzLCBLRVlfQ0hBTk5FTFVQIH0sCi0JeyAweDAzMDIsIEtFWV9DSEFOTkVMRE9XTiB9LAotCXsgMHgwMjFmLCBLRVlfVk9MVU1FVVAgfSwKLQl7IDB4MDIxZSwgS0VZX1ZPTFVNRURPV04gfSwKLQl7IDB4MDIwYywgS0VZX0VOVEVSIH0sCQkvKiBGdWxsIFNjcmVlbiAqLwotCi0JeyAweDAyMTQsIEtFWV9NVVRFIH0sCi0JeyAweDAyMDgsIEtFWV9BVURJTyB9LAotCi0JeyAweDAyMDMsIEtFWV9URVhUIH0sCQkvKiBUZWxldGV4dCAqLwotCXsgMHgwMjA0LCBLRVlfRVBHIH0sCi0JeyAweDAyMmIsIEtFWV9UVjIgfSwJCS8qIFRWMiBvciBQSVAgKi8KLQotCXsgMHgwMjFkLCBLRVlfUkVEIH0sCi0JeyAweDAyMWMsIEtFWV9ZRUxMT1cgfSwKLQl7IDB4MDMwMSwgS0VZX0dSRUVOIH0sCi0JeyAweDAzMDAsIEtFWV9CTFVFIH0sCi0KLQl7IDB4MDIxYSwgS0VZX1BMQVlQQVVTRSB9LAotCXsgMHgwMjE5LCBLRVlfUkVDT1JEIH0sCi0JeyAweDAyMTgsIEtFWV9QTEFZIH0sCi0JeyAweDAyMWIsIEtFWV9TVE9QIH0sCi0KLQkvKiBSTS1LNiAqLwotCXsgMHgwNDAxLCBLRVlfUE9XRVIyIH0sCi0JeyAweDA0MDYsIEtFWV9NVVRFIH0sCi0JeyAweDA0MDgsIEtFWV9NT0RFIH0sICAgICAvKiBUVi9GTSAqLwotCi0JeyAweDA0MDksIEtFWV8xIH0sCi0JeyAweDA0MGEsIEtFWV8yIH0sCi0JeyAweDA0MGIsIEtFWV8zIH0sCi0JeyAweDA0MGMsIEtFWV80IH0sCi0JeyAweDA0MGQsIEtFWV81IH0sCi0JeyAweDA0MGUsIEtFWV82IH0sCi0JeyAweDA0MGYsIEtFWV83IH0sCi0JeyAweDA0MTAsIEtFWV84IH0sCi0JeyAweDA0MTEsIEtFWV85IH0sCi0JeyAweDA0NGMsIEtFWV9ET1QgfSwgICAgICAvKiAnLicgKi8KLQl7IDB4MDQxMiwgS0VZXzAgfSwKLQl7IDB4MDQwNywgS0VZX1JFRlJFU0ggfSwgIC8qIFJlZnJlc2gvUmVsb2FkICovCi0KLQl7IDB4MDQxMywgS0VZX0FVRElPIH0sCi0JeyAweDA0NDAsIEtFWV9TQ1JFRU4gfSwgICAvKiBGdWxsIFNjcmVlbiB0b2dnbGUgKi8KLQl7IDB4MDQ0MSwgS0VZX0hPTUUgfSwKLQl7IDB4MDQ0MiwgS0VZX0JBQ0sgfSwKLQl7IDB4MDQ0NywgS0VZX1VQIH0sCi0JeyAweDA0NDgsIEtFWV9ET1dOIH0sCi0JeyAweDA0NDksIEtFWV9MRUZUIH0sCi0JeyAweDA0NGEsIEtFWV9SSUdIVCB9LAotCXsgMHgwNDRiLCBLRVlfT0sgfSwKLQl7IDB4MDQwNCwgS0VZX1ZPTFVNRVVQIH0sCi0JeyAweDA0MDUsIEtFWV9WT0xVTUVET1dOIH0sCi0JeyAweDA0MDIsIEtFWV9DSEFOTkVMVVAgfSwKLQl7IDB4MDQwMywgS0VZX0NIQU5ORUxET1dOIH0sCi0KLQl7IDB4MDQ0MywgS0VZX1JFRCB9LAotCXsgMHgwNDQ0LCBLRVlfR1JFRU4gfSwKLQl7IDB4MDQ0NSwgS0VZX1lFTExPVyB9LAotCXsgMHgwNDQ2LCBLRVlfQkxVRSB9LAotCi0JeyAweDA0MTQsIEtFWV9URVhUIH0sCi0JeyAweDA0MTUsIEtFWV9FUEcgfSwKLQl7IDB4MDQxYSwgS0VZX1RWMiB9LCAgICAgIC8qIFBJUCAqLwotCXsgMHgwNDFiLCBLRVlfTUhQIH0sICAgICAgLyogU25hcHNob3QgKi8KLQotCXsgMHgwNDE3LCBLRVlfUkVDT1JEIH0sCi0JeyAweDA0MTYsIEtFWV9QTEFZUEFVU0UgfSwKLQl7IDB4MDQxOCwgS0VZX1NUT1AgfSwKLQl7IDB4MDQxOSwgS0VZX1BBVVNFIH0sCi0KLQl7IDB4MDQxZiwgS0VZX1BSRVZJT1VTIH0sCi0JeyAweDA0MWMsIEtFWV9SRVdJTkQgfSwKLQl7IDB4MDQxZCwgS0VZX0ZPUldBUkQgfSwKLQl7IDB4MDQxZSwgS0VZX05FWFQgfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmNfa2V5bWFwIGF2ZXJtZWRpYV9tMTM1YV9tYXAgPSB7Ci0JLm1hcCA9IHsKLQkJLnNjYW4gICAgPSBhdmVybWVkaWFfbTEzNWEsCi0JCS5zaXplICAgID0gQVJSQVlfU0laRShhdmVybWVkaWFfbTEzNWEpLAotCQkuaXJfdHlwZSA9IElSX1RZUEVfTkVDLAotCQkubmFtZSAgICA9IFJDX01BUF9BVkVSTUVESUFfTTEzNUEsCi0JfQotfTsKLQotc3RhdGljIGludCBfX2luaXQgaW5pdF9yY19tYXBfYXZlcm1lZGlhX20xMzVhKHZvaWQpCi17Ci0JcmV0dXJuIGlyX3JlZ2lzdGVyX21hcCgmYXZlcm1lZGlhX20xMzVhX21hcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3JjX21hcF9hdmVybWVkaWFfbTEzNWEodm9pZCkKLXsKLQlpcl91bnJlZ2lzdGVyX21hcCgmYXZlcm1lZGlhX20xMzVhX21hcCk7Ci19Ci0KLW1vZHVsZV9pbml0KGluaXRfcmNfbWFwX2F2ZXJtZWRpYV9tMTM1YSkKLW1vZHVsZV9leGl0KGV4aXRfcmNfbWFwX2F2ZXJtZWRpYV9tMTM1YSkKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtYXZlcm1lZGlhLW03MzNhLXJtLWs2LmMgYi9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtYXZlcm1lZGlhLW03MzNhLXJtLWs2LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmOGQ0NTcuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLWF2ZXJtZWRpYS1tNzMzYS1ybS1rNi5jCisrKyAvZGV2L251bGwKQEAgLTEsOTUgKzAsMCBAQAotLyogYXZlcm1lZGlhLW03MzNhLXJtLWs2LmggLSBLZXl0YWJsZSBmb3IgYXZlcm1lZGlhX203MzNhX3JtX2s2IFJlbW90ZSBDb250cm9sbGVyCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDEwIGJ5IEhlcnRvbiBSb25hbGRvIEtyemVzaW5za2kgPGhlcnRvbkBtYW5kcml2YS5jb20uYnI+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0jaW5jbHVkZSA8bWVkaWEvcmMtbWFwLmg+Ci0KLS8qCi0gKiBBdmVybWVkaWEgTTczM0Egd2l0aCBJUiBtb2RlbCBSTS1LNgotICogVGhpcyBpcyB0aGUgc3RvY2sgcmVtb3RlIGNvbnRyb2xsZXIgdXNlZCB3aXRoIFBvc2l0aXZvIG1hY2hpbmVzIHdpdGggTTczM0EKLSAqIEhlcnRvbiBSb25hbGRvIEtyemVzaW5za2kgPGhlcnRvbkBtYW5kcml2YS5jb20uYnI+Ci0gKi8KLQotc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBhdmVybWVkaWFfbTczM2Ffcm1fazZbXSA9IHsKLQl7IDB4MDQwMSwgS0VZX1BPV0VSMiB9LAotCXsgMHgwNDA2LCBLRVlfTVVURSB9LAotCXsgMHgwNDA4LCBLRVlfTU9ERSB9LCAgICAgLyogVFYvRk0gKi8KLQotCXsgMHgwNDA5LCBLRVlfMSB9LAotCXsgMHgwNDBhLCBLRVlfMiB9LAotCXsgMHgwNDBiLCBLRVlfMyB9LAotCXsgMHgwNDBjLCBLRVlfNCB9LAotCXsgMHgwNDBkLCBLRVlfNSB9LAotCXsgMHgwNDBlLCBLRVlfNiB9LAotCXsgMHgwNDBmLCBLRVlfNyB9LAotCXsgMHgwNDEwLCBLRVlfOCB9LAotCXsgMHgwNDExLCBLRVlfOSB9LAotCXsgMHgwNDRjLCBLRVlfRE9UIH0sICAgICAgLyogJy4nICovCi0JeyAweDA0MTIsIEtFWV8wIH0sCi0JeyAweDA0MDcsIEtFWV9SRUZSRVNIIH0sICAvKiBSZWZyZXNoL1JlbG9hZCAqLwotCi0JeyAweDA0MTMsIEtFWV9BVURJTyB9LAotCXsgMHgwNDQwLCBLRVlfU0NSRUVOIH0sICAgLyogRnVsbCBTY3JlZW4gdG9nZ2xlICovCi0JeyAweDA0NDEsIEtFWV9IT01FIH0sCi0JeyAweDA0NDIsIEtFWV9CQUNLIH0sCi0JeyAweDA0NDcsIEtFWV9VUCB9LAotCXsgMHgwNDQ4LCBLRVlfRE9XTiB9LAotCXsgMHgwNDQ5LCBLRVlfTEVGVCB9LAotCXsgMHgwNDRhLCBLRVlfUklHSFQgfSwKLQl7IDB4MDQ0YiwgS0VZX09LIH0sCi0JeyAweDA0MDQsIEtFWV9WT0xVTUVVUCB9LAotCXsgMHgwNDA1LCBLRVlfVk9MVU1FRE9XTiB9LAotCXsgMHgwNDAyLCBLRVlfQ0hBTk5FTFVQIH0sCi0JeyAweDA0MDMsIEtFWV9DSEFOTkVMRE9XTiB9LAotCi0JeyAweDA0NDMsIEtFWV9SRUQgfSwKLQl7IDB4MDQ0NCwgS0VZX0dSRUVOIH0sCi0JeyAweDA0NDUsIEtFWV9ZRUxMT1cgfSwKLQl7IDB4MDQ0NiwgS0VZX0JMVUUgfSwKLQotCXsgMHgwNDE0LCBLRVlfVEVYVCB9LAotCXsgMHgwNDE1LCBLRVlfRVBHIH0sCi0JeyAweDA0MWEsIEtFWV9UVjIgfSwgICAgICAvKiBQSVAgKi8KLQl7IDB4MDQxYiwgS0VZX01IUCB9LCAgICAgIC8qIFNuYXBzaG90ICovCi0KLQl7IDB4MDQxNywgS0VZX1JFQ09SRCB9LAotCXsgMHgwNDE2LCBLRVlfUExBWVBBVVNFIH0sCi0JeyAweDA0MTgsIEtFWV9TVE9QIH0sCi0JeyAweDA0MTksIEtFWV9QQVVTRSB9LAotCi0JeyAweDA0MWYsIEtFWV9QUkVWSU9VUyB9LAotCXsgMHgwNDFjLCBLRVlfUkVXSU5EIH0sCi0JeyAweDA0MWQsIEtFWV9GT1JXQVJEIH0sCi0JeyAweDA0MWUsIEtFWV9ORVhUIH0sCi19OwotCi1zdGF0aWMgc3RydWN0IHJjX2tleW1hcCBhdmVybWVkaWFfbTczM2Ffcm1fazZfbWFwID0gewotCS5tYXAgPSB7Ci0JCS5zY2FuICAgID0gYXZlcm1lZGlhX203MzNhX3JtX2s2LAotCQkuc2l6ZSAgICA9IEFSUkFZX1NJWkUoYXZlcm1lZGlhX203MzNhX3JtX2s2KSwKLQkJLmlyX3R5cGUgPSBJUl9UWVBFX05FQywKLQkJLm5hbWUgICAgPSBSQ19NQVBfQVZFUk1FRElBX003MzNBX1JNX0s2LAotCX0KLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGluaXRfcmNfbWFwX2F2ZXJtZWRpYV9tNzMzYV9ybV9rNih2b2lkKQotewotCXJldHVybiBpcl9yZWdpc3Rlcl9tYXAoJmF2ZXJtZWRpYV9tNzMzYV9ybV9rNl9tYXApOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yY19tYXBfYXZlcm1lZGlhX203MzNhX3JtX2s2KHZvaWQpCi17Ci0JaXJfdW5yZWdpc3Rlcl9tYXAoJmF2ZXJtZWRpYV9tNzMzYV9ybV9rNl9tYXApOwotfQotCi1tb2R1bGVfaW5pdChpbml0X3JjX21hcF9hdmVybWVkaWFfbTczM2Ffcm1fazYpCi1tb2R1bGVfZXhpdChleGl0X3JjX21hcF9hdmVybWVkaWFfbTczM2Ffcm1fazYpCi0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IoIk1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLWF2ZXJtZWRpYS1ybS1rcy5jIGIvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLWF2ZXJtZWRpYS1ybS1rcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWU2MDkwLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1hdmVybWVkaWEtcm0ta3MuYworKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLS8qCi0gKiBBdmVyTWVkaWEgUk0tS1MgcmVtb3RlIGNvbnRyb2xsZXIga2V5dGFibGUKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQW50dGkgUGFsb3NhYXJpIDxjcm9wZUBpa2kuZmk+Ci0gKgotICogICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiAgICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8bWVkaWEvcmMtbWFwLmg+Ci0KLS8qIEluaXRpYWwga2V5dGFibGUgaXMgZnJvbSBKb3NlIEFsYmVydG8gUmVndWVybyA8amFyZWd1ZXJvQHRlbGVmb25pY2EubmV0PgotICAgYW5kIEZlbGlwZSBNb3JhbGVzIE1vcmVubyA8ZmVsaXBlLm1vcmFsZXMubW9yZW5vQGdtYWlsLmNvbT4gKi8KLS8qIEZJWE1FOiBtYXBwaW5ncyBhcmUgbm90IDEwMCUgY29ycmVjdD8gKi8KLXN0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgYXZlcm1lZGlhX3JtX2tzW10gPSB7Ci0JeyAweDA1MDEsIEtFWV9QT1dFUjIgfSwKLQl7IDB4MDUwMiwgS0VZX0NIQU5ORUxVUCB9LAotCXsgMHgwNTAzLCBLRVlfQ0hBTk5FTERPV04gfSwKLQl7IDB4MDUwNCwgS0VZX1ZPTFVNRVVQIH0sCi0JeyAweDA1MDUsIEtFWV9WT0xVTUVET1dOIH0sCi0JeyAweDA1MDYsIEtFWV9NVVRFIH0sCi0JeyAweDA1MDcsIEtFWV9SSUdIVCB9LAotCXsgMHgwNTA4LCBLRVlfUFJPRzEgfSwKLQl7IDB4MDUwOSwgS0VZXzEgfSwKLQl7IDB4MDUwYSwgS0VZXzIgfSwKLQl7IDB4MDUwYiwgS0VZXzMgfSwKLQl7IDB4MDUwYywgS0VZXzQgfSwKLQl7IDB4MDUwZCwgS0VZXzUgfSwKLQl7IDB4MDUwZSwgS0VZXzYgfSwKLQl7IDB4MDUwZiwgS0VZXzcgfSwKLQl7IDB4MDUxMCwgS0VZXzggfSwKLQl7IDB4MDUxMSwgS0VZXzkgfSwKLQl7IDB4MDUxMiwgS0VZXzAgfSwKLQl7IDB4MDUxMywgS0VZX0FVRElPIH0sCi0JeyAweDA1MTUsIEtFWV9FUEcgfSwKLQl7IDB4MDUxNiwgS0VZX1BMQVkgfSwKLQl7IDB4MDUxNywgS0VZX1JFQ09SRCB9LAotCXsgMHgwNTE4LCBLRVlfU1RPUCB9LAotCXsgMHgwNTFjLCBLRVlfQkFDSyB9LAotCXsgMHgwNTFkLCBLRVlfRk9SV0FSRCB9LAotCXsgMHgwNTRkLCBLRVlfTEVGVCB9LAotCXsgMHgwNTU2LCBLRVlfWk9PTSB9LAotfTsKLQotc3RhdGljIHN0cnVjdCByY19rZXltYXAgYXZlcm1lZGlhX3JtX2tzX21hcCA9IHsKLQkubWFwID0gewotCQkuc2NhbiAgICA9IGF2ZXJtZWRpYV9ybV9rcywKLQkJLnNpemUgICAgPSBBUlJBWV9TSVpFKGF2ZXJtZWRpYV9ybV9rcyksCi0JCS5pcl90eXBlID0gSVJfVFlQRV9ORUMsCi0JCS5uYW1lICAgID0gUkNfTUFQX0FWRVJNRURJQV9STV9LUywKLQl9Ci19OwotCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcF9hdmVybWVkaWFfcm1fa3Modm9pZCkKLXsKLQlyZXR1cm4gaXJfcmVnaXN0ZXJfbWFwKCZhdmVybWVkaWFfcm1fa3NfbWFwKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGV4aXRfcmNfbWFwX2F2ZXJtZWRpYV9ybV9rcyh2b2lkKQotewotCWlyX3VucmVnaXN0ZXJfbWFwKCZhdmVybWVkaWFfcm1fa3NfbWFwKTsKLX0KLQotbW9kdWxlX2luaXQoaW5pdF9yY19tYXBfYXZlcm1lZGlhX3JtX2tzKQotbW9kdWxlX2V4aXQoZXhpdF9yY19tYXBfYXZlcm1lZGlhX3JtX2tzKQotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJBbnR0aSBQYWxvc2FhcmkgPGNyb3BlQGlraS5maT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1hdmVybWVkaWEuYyBiL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1hdmVybWVkaWEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjFlZmZkNS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtYXZlcm1lZGlhLmMKKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi0vKiBhdmVybWVkaWEuaCAtIEtleXRhYmxlIGZvciBhdmVybWVkaWEgUmVtb3RlIENvbnRyb2xsZXIKLSAqCi0gKiBrZXltYXAgaW1wb3J0ZWQgZnJvbSBpci1rZXltYXBzLmMKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgYnkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0jaW5jbHVkZSA8bWVkaWEvcmMtbWFwLmg+Ci0KLS8qIEFsZXggSGVybWFubiA8Z2FhZkBnbXgubmV0PiAqLwotCi1zdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGF2ZXJtZWRpYVtdID0gewotCXsgMHgyOCwgS0VZXzEgfSwKLQl7IDB4MTgsIEtFWV8yIH0sCi0JeyAweDM4LCBLRVlfMyB9LAotCXsgMHgyNCwgS0VZXzQgfSwKLQl7IDB4MTQsIEtFWV81IH0sCi0JeyAweDM0LCBLRVlfNiB9LAotCXsgMHgyYywgS0VZXzcgfSwKLQl7IDB4MWMsIEtFWV84IH0sCi0JeyAweDNjLCBLRVlfOSB9LAotCXsgMHgyMiwgS0VZXzAgfSwKLQotCXsgMHgyMCwgS0VZX1RWIH0sCQkvKiBUVi9GTSAqLwotCXsgMHgxMCwgS0VZX0NEIH0sCQkvKiBDRCAqLwotCXsgMHgzMCwgS0VZX1RFWFQgfSwJCS8qIFRFTEVURVhUICovCi0JeyAweDAwLCBLRVlfUE9XRVIgfSwJCS8qIFBPV0VSICovCi0KLQl7IDB4MDgsIEtFWV9WSURFTyB9LAkJLyogVklERU8gKi8KLQl7IDB4MDQsIEtFWV9BVURJTyB9LAkJLyogQVVESU8gKi8KLQl7IDB4MGMsIEtFWV9aT09NIH0sCQkvKiBGVUxMIFNDUkVFTiAqLwotCi0JeyAweDEyLCBLRVlfU1VCVElUTEUgfSwJCS8qIERJU1BMQVkgKi8KLQl7IDB4MzIsIEtFWV9SRVdJTkQgfSwJCS8qIExPT1AJKi8KLQl7IDB4MDIsIEtFWV9QUklOVCB9LAkJLyogUFJFVklFVyAqLwotCi0JeyAweDJhLCBLRVlfU0VBUkNIIH0sCQkvKiBBVVRPU0NBTiAqLwotCXsgMHgxYSwgS0VZX1NMRUVQIH0sCQkvKiBGUkVFWkUgKi8KLQl7IDB4M2EsIEtFWV9DQU1FUkEgfSwJCS8qIFNOQVBTSE9UICovCi0JeyAweDBhLCBLRVlfTVVURSB9LAkJLyogTVVURSAqLwotCi0JeyAweDI2LCBLRVlfUkVDT1JEIH0sCQkvKiBSRUNPUkQgKi8KLQl7IDB4MTYsIEtFWV9QQVVTRSB9LAkJLyogUEFVU0UgKi8KLQl7IDB4MzYsIEtFWV9TVE9QIH0sCQkvKiBTVE9QICovCi0JeyAweDA2LCBLRVlfUExBWSB9LAkJLyogUExBWSAqLwotCi0JeyAweDJlLCBLRVlfUkVEIH0sCQkvKiBSRUQgKi8KLQl7IDB4MjEsIEtFWV9HUkVFTiB9LAkJLyogR1JFRU4gKi8KLQl7IDB4MGUsIEtFWV9ZRUxMT1cgfSwJCS8qIFlFTExPVyAqLwotCXsgMHgwMSwgS0VZX0JMVUUgfSwJCS8qIEJMVUUgKi8KLQotCXsgMHgxZSwgS0VZX1ZPTFVNRURPV04gfSwJLyogVk9MVU1FLSAqLwotCXsgMHgzZSwgS0VZX1ZPTFVNRVVQIH0sCQkvKiBWT0xVTUUrICovCi0JeyAweDExLCBLRVlfQ0hBTk5FTERPV04gfSwJLyogQ0hBTk5FTC9QQUdFLSAqLwotCXsgMHgzMSwgS0VZX0NIQU5ORUxVUCB9CQkvKiBDSEFOTkVML1BBR0UrICovCi19OwotCi1zdGF0aWMgc3RydWN0IHJjX2tleW1hcCBhdmVybWVkaWFfbWFwID0gewotCS5tYXAgPSB7Ci0JCS5zY2FuICAgID0gYXZlcm1lZGlhLAotCQkuc2l6ZSAgICA9IEFSUkFZX1NJWkUoYXZlcm1lZGlhKSwKLQkJLmlyX3R5cGUgPSBJUl9UWVBFX1VOS05PV04sCS8qIExlZ2FjeSBJUiB0eXBlICovCi0JCS5uYW1lICAgID0gUkNfTUFQX0FWRVJNRURJQSwKLQl9Ci19OwotCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcF9hdmVybWVkaWEodm9pZCkKLXsKLQlyZXR1cm4gaXJfcmVnaXN0ZXJfbWFwKCZhdmVybWVkaWFfbWFwKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGV4aXRfcmNfbWFwX2F2ZXJtZWRpYSh2b2lkKQotewotCWlyX3VucmVnaXN0ZXJfbWFwKCZhdmVybWVkaWFfbWFwKTsKLX0KLQotbW9kdWxlX2luaXQoaW5pdF9yY19tYXBfYXZlcm1lZGlhKQotbW9kdWxlX2V4aXQoZXhpdF9yY19tYXBfYXZlcm1lZGlhKQotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1hdmVydHYtMzAzLmMgYi9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtYXZlcnR2LTMwMy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NzFjNTlkLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1hdmVydHYtMzAzLmMKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi0vKiBhdmVydHYtMzAzLmggLSBLZXl0YWJsZSBmb3IgYXZlcnR2XzMwMyBSZW1vdGUgQ29udHJvbGxlcgotICoKLSAqIGtleW1hcCBpbXBvcnRlZCBmcm9tIGlyLWtleW1hcHMuYwotICoKLSAqIENvcHlyaWdodCAoYykgMjAxMCBieSBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLSNpbmNsdWRlIDxtZWRpYS9yYy1tYXAuaD4KLQotLyogQVZFUlRWIFNUVURJTyAzMDMgUmVtb3RlICovCi0KLXN0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgYXZlcnR2XzMwM1tdID0gewotCXsgMHgyYSwgS0VZXzEgfSwKLQl7IDB4MzIsIEtFWV8yIH0sCi0JeyAweDNhLCBLRVlfMyB9LAotCXsgMHg0YSwgS0VZXzQgfSwKLQl7IDB4NTIsIEtFWV81IH0sCi0JeyAweDVhLCBLRVlfNiB9LAotCXsgMHg2YSwgS0VZXzcgfSwKLQl7IDB4NzIsIEtFWV84IH0sCi0JeyAweDdhLCBLRVlfOSB9LAotCXsgMHgwZSwgS0VZXzAgfSwKLQotCXsgMHgwMiwgS0VZX1BPV0VSIH0sCi0JeyAweDIyLCBLRVlfVklERU8gfSwKLQl7IDB4NDIsIEtFWV9BVURJTyB9LAotCXsgMHg2MiwgS0VZX1pPT00gfSwKLQl7IDB4MGEsIEtFWV9UViB9LAotCXsgMHgxMiwgS0VZX0NEIH0sCi0JeyAweDFhLCBLRVlfVEVYVCB9LAotCi0JeyAweDE2LCBLRVlfU1VCVElUTEUgfSwKLQl7IDB4MWUsIEtFWV9SRVdJTkQgfSwKLQl7IDB4MDYsIEtFWV9QUklOVCB9LAotCi0JeyAweDJlLCBLRVlfU0VBUkNIIH0sCi0JeyAweDM2LCBLRVlfU0xFRVAgfSwKLQl7IDB4M2UsIEtFWV9TSFVGRkxFIH0sCi0JeyAweDI2LCBLRVlfTVVURSB9LAotCi0JeyAweDRlLCBLRVlfUkVDT1JEIH0sCi0JeyAweDU2LCBLRVlfUEFVU0UgfSwKLQl7IDB4NWUsIEtFWV9TVE9QIH0sCi0JeyAweDQ2LCBLRVlfUExBWSB9LAotCi0JeyAweDZlLCBLRVlfUkVEIH0sCi0JeyAweDBiLCBLRVlfR1JFRU4gfSwKLQl7IDB4NjYsIEtFWV9ZRUxMT1cgfSwKLQl7IDB4MDMsIEtFWV9CTFVFIH0sCi0KLQl7IDB4NzYsIEtFWV9MRUZUIH0sCi0JeyAweDdlLCBLRVlfUklHSFQgfSwKLQl7IDB4MTMsIEtFWV9ET1dOIH0sCi0JeyAweDFiLCBLRVlfVVAgfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmNfa2V5bWFwIGF2ZXJ0dl8zMDNfbWFwID0gewotCS5tYXAgPSB7Ci0JCS5zY2FuICAgID0gYXZlcnR2XzMwMywKLQkJLnNpemUgICAgPSBBUlJBWV9TSVpFKGF2ZXJ0dl8zMDMpLAotCQkuaXJfdHlwZSA9IElSX1RZUEVfVU5LTk9XTiwJLyogTGVnYWN5IElSIHR5cGUgKi8KLQkJLm5hbWUgICAgPSBSQ19NQVBfQVZFUlRWXzMwMywKLQl9Ci19OwotCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcF9hdmVydHZfMzAzKHZvaWQpCi17Ci0JcmV0dXJuIGlyX3JlZ2lzdGVyX21hcCgmYXZlcnR2XzMwM19tYXApOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yY19tYXBfYXZlcnR2XzMwMyh2b2lkKQotewotCWlyX3VucmVnaXN0ZXJfbWFwKCZhdmVydHZfMzAzX21hcCk7Ci19Ci0KLW1vZHVsZV9pbml0KGluaXRfcmNfbWFwX2F2ZXJ0dl8zMDMpCi1tb2R1bGVfZXhpdChleGl0X3JjX21hcF9hdmVydHZfMzAzKQotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1henVyZXdhdmUtYWQtdHU3MDAuYyBiL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1henVyZXdhdmUtYWQtdHU3MDAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTA4NzYxNC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtYXp1cmV3YXZlLWFkLXR1NzAwLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDIgKzAsMCBAQAotLyoKLSAqIFR3aW5IYW4gQXp1cmVXYXZlIEFELVRVNzAwKDcwNEopIHJlbW90ZSBjb250cm9sbGVyIGtleXRhYmxlCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFudHRpIFBhbG9zYWFyaSA8Y3JvcGVAaWtpLmZpPgotICoKLSAqICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogICAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqICAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPG1lZGlhL3JjLW1hcC5oPgotCi1zdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGF6dXJld2F2ZV9hZF90dTcwMFtdID0gewotCXsgMHgwMDAwLCBLRVlfVEFCIH0sICAgICAgICAgICAgIC8qIFRhYiAqLwotCXsgMHgwMDAxLCBLRVlfMiB9LAotCXsgMHgwMDAyLCBLRVlfQ0hBTk5FTERPV04gfSwKLQl7IDB4MDAwMywgS0VZXzEgfSwKLQl7IDB4MDAwNCwgS0VZX01FTlUgfSwgICAgICAgICAgICAvKiBSZWNvcmQgTGlzdCAqLwotCXsgMHgwMDA1LCBLRVlfQ0hBTk5FTFVQIH0sCi0JeyAweDAwMDYsIEtFWV8zIH0sCi0JeyAweDAwMDcsIEtFWV9TTEVFUCB9LCAgICAgICAgICAgLyogSGliZXJuYXRlICovCi0JeyAweDAwMDgsIEtFWV9WSURFTyB9LCAgICAgICAgICAgLyogQS9WICovCi0JeyAweDAwMDksIEtFWV80IH0sCi0JeyAweDAwMGEsIEtFWV9WT0xVTUVET1dOIH0sCi0JeyAweDAwMGMsIEtFWV9DQU5DRUwgfSwgICAgICAgICAgLyogQ2FuY2VsICovCi0JeyAweDAwMGQsIEtFWV83IH0sCi0JeyAweDAwMGUsIEtFWV9BR0FJTiB9LCAgICAgICAgICAgLyogUmVjYWxsICovCi0JeyAweDAwMGYsIEtFWV9URVhUIH0sICAgICAgICAgICAgLyogVGVsZXRleHQgKi8KLQl7IDB4MDAxMCwgS0VZX01VVEUgfSwKLQl7IDB4MDAxMSwgS0VZX1JFQ09SRCB9LAotCXsgMHgwMDEyLCBLRVlfRkFTVEZPUldBUkQgfSwgICAgIC8qIEZGID4+ICovCi0JeyAweDAwMTMsIEtFWV9CQUNLIH0sICAgICAgICAgICAgLyogQmFjayAqLwotCXsgMHgwMDE0LCBLRVlfUExBWSB9LAotCXsgMHgwMDE1LCBLRVlfMCB9LAotCXsgMHgwMDE2LCBLRVlfUE9XRVIyIH0sICAgICAgICAgIC8qIFtyZWQgcG93ZXIgYnV0dG9uXSAqLwotCXsgMHgwMDE3LCBLRVlfRkFWT1JJVEVTIH0sICAgICAgIC8qIEZhdm9yaXRlIExpc3QgKi8KLQl7IDB4MDAxOCwgS0VZX1JFRCB9LAotCXsgMHgwMDE5LCBLRVlfOCB9LAotCXsgMHgwMDFhLCBLRVlfU1RPUCB9LAotCXsgMHgwMDFiLCBLRVlfOSB9LAotCXsgMHgwMDFjLCBLRVlfRVBHIH0sICAgICAgICAgICAgIC8qIEluZm8vRVBHICovCi0JeyAweDAwMWQsIEtFWV81IH0sCi0JeyAweDAwMWUsIEtFWV9WT0xVTUVVUCB9LAotCXsgMHgwMDFmLCBLRVlfNiB9LAotCXsgMHgwMDQwLCBLRVlfUkVXSU5EIH0sICAgICAgICAgIC8qIEZSIDw8ICovCi0JeyAweDAwNDEsIEtFWV9QUkVWSU9VUyB9LCAgICAgICAgLyogUmVwbGF5ICovCi0JeyAweDAwNDIsIEtFWV9ORVhUIH0sICAgICAgICAgICAgLyogU2tpcCAqLwotCXsgMHgwMDQzLCBLRVlfU1VCVElUTEUgfSwgICAgICAgIC8qIFN1YnRpdGxlIC8gQ0MgKi8KLQl7IDB4MDA0NSwgS0VZX0tQUExVUyB9LCAgICAgICAgICAvKiBab29tKyAqLwotCXsgMHgwMDQ2LCBLRVlfS1BNSU5VUyB9LCAgICAgICAgIC8qIFpvb20tICovCi0JeyAweDAwNDcsIEtFWV9ORVcgfSwgICAgICAgICAgICAgLyogUElQICovCi0JeyAweDAwNDgsIEtFWV9JTkZPIH0sICAgICAgICAgICAgLyogUHJldmlldyAqLwotCXsgMHgwMDQ5LCBLRVlfTU9ERSB9LCAgICAgICAgICAgIC8qIEwvUiAqLwotCXsgMHgwMDRhLCBLRVlfQ0xFQVIgfSwgICAgICAgICAgIC8qIENsZWFyICovCi0JeyAweDAwNGIsIEtFWV9VUCB9LCAgICAgICAgICAgICAgLyogdXAgYXJyb3cgKi8KLQl7IDB4MDA0YywgS0VZX1BBVVNFIH0sCi0JeyAweDAwNGQsIEtFWV9aT09NIH0sICAgICAgICAgICAgLyogRnVsbCBTY3JlZW4gKi8KLQl7IDB4MDA0ZSwgS0VZX0xFRlQgfSwgICAgICAgICAgICAvKiBsZWZ0IGFycm93ICovCi0JeyAweDAwNGYsIEtFWV9PSyB9LCAgICAgICAgICAgICAgLyogRW50ZXIgLyBvayAqLwotCXsgMHgwMDUwLCBLRVlfTEFOR1VBR0UgfSwgICAgICAgIC8qIFNBUCAqLwotCXsgMHgwMDUxLCBLRVlfRE9XTiB9LCAgICAgICAgICAgIC8qIGRvd24gYXJyb3cgKi8KLQl7IDB4MDA1MiwgS0VZX1JJR0hUIH0sICAgICAgICAgICAvKiByaWdodCBhcnJvdyAqLwotCXsgMHgwMDUzLCBLRVlfR1JFRU4gfSwKLQl7IDB4MDA1NCwgS0VZX0NBTUVSQSB9LCAgICAgICAgICAvKiBDYXB0dXJlICovCi0JeyAweDAwNWUsIEtFWV9ZRUxMT1cgfSwKLQl7IDB4MDA1ZiwgS0VZX0JMVUUgfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmNfa2V5bWFwIGF6dXJld2F2ZV9hZF90dTcwMF9tYXAgPSB7Ci0JLm1hcCA9IHsKLQkJLnNjYW4gICAgPSBhenVyZXdhdmVfYWRfdHU3MDAsCi0JCS5zaXplICAgID0gQVJSQVlfU0laRShhenVyZXdhdmVfYWRfdHU3MDApLAotCQkuaXJfdHlwZSA9IElSX1RZUEVfTkVDLAotCQkubmFtZSAgICA9IFJDX01BUF9BWlVSRVdBVkVfQURfVFU3MDAsCi0JfQotfTsKLQotc3RhdGljIGludCBfX2luaXQgaW5pdF9yY19tYXBfYXp1cmV3YXZlX2FkX3R1NzAwKHZvaWQpCi17Ci0JcmV0dXJuIGlyX3JlZ2lzdGVyX21hcCgmYXp1cmV3YXZlX2FkX3R1NzAwX21hcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3JjX21hcF9henVyZXdhdmVfYWRfdHU3MDAodm9pZCkKLXsKLQlpcl91bnJlZ2lzdGVyX21hcCgmYXp1cmV3YXZlX2FkX3R1NzAwX21hcCk7Ci19Ci0KLW1vZHVsZV9pbml0KGluaXRfcmNfbWFwX2F6dXJld2F2ZV9hZF90dTcwMCkKLW1vZHVsZV9leGl0KGV4aXRfcmNfbWFwX2F6dXJld2F2ZV9hZF90dTcwMCkKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiQW50dGkgUGFsb3NhYXJpIDxjcm9wZUBpa2kuZmk+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtYmVob2xkLWNvbHVtYnVzLmMgYi9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtYmVob2xkLWNvbHVtYnVzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmNTZjOTguLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLWJlaG9sZC1jb2x1bWJ1cy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTA4ICswLDAgQEAKLS8qIGJlaG9sZC1jb2x1bWJ1cy5oIC0gS2V5dGFibGUgZm9yIGJlaG9sZF9jb2x1bWJ1cyBSZW1vdGUgQ29udHJvbGxlcgotICoKLSAqIGtleW1hcCBpbXBvcnRlZCBmcm9tIGlyLWtleW1hcHMuYwotICoKLSAqIENvcHlyaWdodCAoYykgMjAxMCBieSBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLSNpbmNsdWRlIDxtZWRpYS9yYy1tYXAuaD4KLQotLyogQmVob2xkZXIgSW50bC4gTHRkLiAyMDA4Ci0gKiBEbWl0cnkgQmVsaW1vdiBkLmJlbGltb3ZAZ29vZ2xlLmNvbQotICogS2V5dGFibGUgaXMgdXNlZCBieSBCZWhvbGRUViBDb2x1bWJ1cwotICogVGhlICJhc2NpaS1hcnQgcGljdHVyZSIgYmVsb3cgKGluIGNvbW1lbnRzLCBmaXJzdCByb3cKLSAqIGlzIHRoZSBrZXljb2RlIGluIGhleCwgYW5kIHN1YnNlcXVlbnQgcm93KHMpIHNob3dzCi0gKiB0aGUgYnV0dG9uIGxhYmVscyAoc2V2ZXJhbCB2YXJpYW50cyB3aGVuIGFwcHJvcHJpYXRlKQotICogaGVscHMgdG8gZGVzY2lkZSB3aGljaCBrZXljb2RlcyB0byBhc3NpZ24gdG8gdGhlIGJ1dHRvbnMuCi0gKi8KLQotc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBiZWhvbGRfY29sdW1idXNbXSA9IHsKLQotCS8qICAweDEzICAgMHgxMSAgIDB4MUMgICAweDEyICAqCi0JICogIE11dGUgIFNvdXJjZSAgVFYvRk0gIFBvd2VyICoKLQkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQotCXsgMHgxMywgS0VZX01VVEUgfSwKLQl7IDB4MTEsIEtFWV9QUk9QUyB9LAotCXsgMHgxQywgS0VZX1RVTkVSIH0sCS8qIEtFWV9UVi9LRVlfUkFESU8JKi8KLQl7IDB4MTIsIEtFWV9QT1dFUiB9LAotCi0JLyogIDB4MDEgICAgMHgwMiAgICAweDAzICAweDBEICAgICoKLQkgKiAgIDEgICAgICAgMiAgICAgICAzICAgU3RlcmVvICAgKgotCSAqICAgICAgICAgICAgICAgICAgICAgICAgCSAgKgotCSAqICAweDA0ICAgIDB4MDUgICAgMHgwNiAgMHgxOSAgICAqCi0JICogICA0ICAgICAgIDUgICAgICAgNiAgIFNuYXBzaG90ICoKLQkgKiAgICAgICAgICAgICAgICAgICAgICAgIAkgICoKLQkgKiAgMHgwNyAgICAweDA4ICAgIDB4MDkgIDB4MTAgICAgKgotCSAqICAgNyAgICAgICA4ICAgICAgIDkgICAgWm9vbSAJICAqCi0JICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0JeyAweDAxLCBLRVlfMSB9LAotCXsgMHgwMiwgS0VZXzIgfSwKLQl7IDB4MDMsIEtFWV8zIH0sCi0JeyAweDBELCBLRVlfU0VUVVAgfSwJICAvKiBTZXR1cCBrZXkgKi8KLQl7IDB4MDQsIEtFWV80IH0sCi0JeyAweDA1LCBLRVlfNSB9LAotCXsgMHgwNiwgS0VZXzYgfSwKLQl7IDB4MTksIEtFWV9DQU1FUkEgfSwJLyogU25hcHNob3Qga2V5ICovCi0JeyAweDA3LCBLRVlfNyB9LAotCXsgMHgwOCwgS0VZXzggfSwKLQl7IDB4MDksIEtFWV85IH0sCi0JeyAweDEwLCBLRVlfWk9PTSB9LAotCi0JLyogIDB4MEEgICAgMHgwMCAgICAweDBCICAgICAgIDB4MEMgICAqCi0JICogUkVDQUxMICAgIDAgICAgQ2hhbm5lbFVwICBWb2x1bWVVcCAqCi0JICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCXsgMHgwQSwgS0VZX0FHQUlOIH0sCi0JeyAweDAwLCBLRVlfMCB9LAotCXsgMHgwQiwgS0VZX0NIQU5ORUxVUCB9LAotCXsgMHgwQywgS0VZX1ZPTFVNRVVQIH0sCi0KLQkvKiAgIDB4MUIgICAgICAweDFEICAgICAgMHgxNSAgICAgICAgMHgxOCAgICAgKgotCSAqIFRpbWVzaGlmdCAgUmVjb3JkICBDaGFubmVsRG93biAgVm9sdW1lRG93biAqCi0JICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0KLQl7IDB4MUIsIEtFWV9USU1FIH0sCi0JeyAweDFELCBLRVlfUkVDT1JEIH0sCi0JeyAweDE1LCBLRVlfQ0hBTk5FTERPV04gfSwKLQl7IDB4MTgsIEtFWV9WT0xVTUVET1dOIH0sCi0KLQkvKiAgIDB4MEUgICAweDFFICAgICAweDBGICAgICAweDFBICAqCi0JICogICBTdG9wICAgUGF1c2UgIFByZXZpb3VzZSAgTmV4dCAgKgotCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0KLQl7IDB4MEUsIEtFWV9TVE9QIH0sCi0JeyAweDFFLCBLRVlfUEFVU0UgfSwKLQl7IDB4MEYsIEtFWV9QUkVWSU9VUyB9LAotCXsgMHgxQSwgS0VZX05FWFQgfSwKLQotfTsKLQotc3RhdGljIHN0cnVjdCByY19rZXltYXAgYmVob2xkX2NvbHVtYnVzX21hcCA9IHsKLQkubWFwID0gewotCQkuc2NhbiAgICA9IGJlaG9sZF9jb2x1bWJ1cywKLQkJLnNpemUgICAgPSBBUlJBWV9TSVpFKGJlaG9sZF9jb2x1bWJ1cyksCi0JCS5pcl90eXBlID0gSVJfVFlQRV9VTktOT1dOLAkvKiBMZWdhY3kgSVIgdHlwZSAqLwotCQkubmFtZSAgICA9IFJDX01BUF9CRUhPTERfQ09MVU1CVVMsCi0JfQotfTsKLQotc3RhdGljIGludCBfX2luaXQgaW5pdF9yY19tYXBfYmVob2xkX2NvbHVtYnVzKHZvaWQpCi17Ci0JcmV0dXJuIGlyX3JlZ2lzdGVyX21hcCgmYmVob2xkX2NvbHVtYnVzX21hcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3JjX21hcF9iZWhvbGRfY29sdW1idXModm9pZCkKLXsKLQlpcl91bnJlZ2lzdGVyX21hcCgmYmVob2xkX2NvbHVtYnVzX21hcCk7Ci19Ci0KLW1vZHVsZV9pbml0KGluaXRfcmNfbWFwX2JlaG9sZF9jb2x1bWJ1cykKLW1vZHVsZV9leGl0KGV4aXRfcmNfbWFwX2JlaG9sZF9jb2x1bWJ1cykKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtYmVob2xkLmMgYi9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtYmVob2xkLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiYzE0MGIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLWJlaG9sZC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTQxICswLDAgQEAKLS8qIGJlaG9sZC5oIC0gS2V5dGFibGUgZm9yIGJlaG9sZCBSZW1vdGUgQ29udHJvbGxlcgotICoKLSAqIGtleW1hcCBpbXBvcnRlZCBmcm9tIGlyLWtleW1hcHMuYwotICoKLSAqIENvcHlyaWdodCAoYykgMjAxMCBieSBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLSNpbmNsdWRlIDxtZWRpYS9yYy1tYXAuaD4KLQotLyoKLSAqIElnb3IgS3V6bmV0c292IDxpZ2s3MkB5YS5ydT4KLSAqIEFuZHJleSBKLiBNZWxuaWtvdiA8dGVtbm90YUBrbXYucnU+Ci0gKgotICogS2V5dGFibGUgaXMgdXNlZCBieSBCZWhvbGRUViA2MHggc2VyaWVzLCBNNiBzZXJpZXMgYXQKLSAqIGxlYXN0LCBhbmQgcHJvYmFibHkgb3RoZXIgY2FyZHMgdG9vLgotICogVGhlICJhc2NpaS1hcnQgcGljdHVyZSIgYmVsb3cgKGluIGNvbW1lbnRzLCBmaXJzdCByb3cKLSAqIGlzIHRoZSBrZXljb2RlIGluIGhleCwgYW5kIHN1YnNlcXVlbnQgcm93KHMpIHNob3dzCi0gKiB0aGUgYnV0dG9uIGxhYmVscyAoc2V2ZXJhbCB2YXJpYW50cyB3aGVuIGFwcHJvcHJpYXRlKQotICogaGVscHMgdG8gZGVzY2lkZSB3aGljaCBrZXljb2RlcyB0byBhc3NpZ24gdG8gdGhlIGJ1dHRvbnMuCi0gKi8KLQotc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBiZWhvbGRbXSA9IHsKLQotCS8qICAweDFjICAgICAgICAgICAgMHgxMiAgKgotCSAqICBUVi9GTSAgICAgICAgICBQT1dFUiAgKgotCSAqICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQl7IDB4MWMsIEtFWV9UVU5FUiB9LAkvKiBYWFggS0VZX1RWIC8gS0VZX1JBRElPICovCi0JeyAweDEyLCBLRVlfUE9XRVIgfSwKLQotCS8qICAweDAxICAgIDB4MDIgICAgMHgwMyAgKgotCSAqICAgMSAgICAgICAyICAgICAgIDMgICAgKgotCSAqICAgICAgICAgICAgICAgICAgICAgICAgKgotCSAqICAweDA0ICAgIDB4MDUgICAgMHgwNiAgKgotCSAqICAgNCAgICAgICA1ICAgICAgIDYgICAgKgotCSAqICAgICAgICAgICAgICAgICAgICAgICAgKgotCSAqICAweDA3ICAgIDB4MDggICAgMHgwOSAgKgotCSAqICAgNyAgICAgICA4ICAgICAgIDkgICAgKgotCSAqICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQl7IDB4MDEsIEtFWV8xIH0sCi0JeyAweDAyLCBLRVlfMiB9LAotCXsgMHgwMywgS0VZXzMgfSwKLQl7IDB4MDQsIEtFWV80IH0sCi0JeyAweDA1LCBLRVlfNSB9LAotCXsgMHgwNiwgS0VZXzYgfSwKLQl7IDB4MDcsIEtFWV83IH0sCi0JeyAweDA4LCBLRVlfOCB9LAotCXsgMHgwOSwgS0VZXzkgfSwKLQotCS8qICAweDBhICAgIDB4MDAgICAgMHgxNyAgKgotCSAqIFJFQ0FMTCAgICAwICAgICAgTU9ERSAgKgotCSAqICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQl7IDB4MGEsIEtFWV9BR0FJTiB9LAotCXsgMHgwMCwgS0VZXzAgfSwKLQl7IDB4MTcsIEtFWV9NT0RFIH0sCi0KLQkvKiAgMHgxNCAgICAgICAgICAweDEwICAgICoKLQkgKiBBU1BFQ1QgICAgICBGVUxMU0NSRUVOICoKLQkgKiAgICAgICAgICAgICAgICAgICAgICAgICovCi0JeyAweDE0LCBLRVlfU0NSRUVOIH0sCi0JeyAweDEwLCBLRVlfWk9PTSB9LAotCi0JLyogICAgICAgICAgMHgwYiAgICAgICAgICAqCi0JICogICAgICAgICAgIFVwICAgICAgICAgICAqCi0JICogICAgICAgICAgICAgICAgICAgICAgICAqCi0JICogIDB4MTggICAgMHgxNiAgICAweDBjICAqCi0JICogIExlZnQgICAgIE9rICAgICBSaWdodCAqCi0JICogICAgICAgICAgICAgICAgICAgICAgICAqCi0JICogICAgICAgICAweDAxNSAgICAgICAgICAqCi0JICogICAgICAgICBEb3duICAgICAgICAgICAqCi0JICogICAgICAgICAgICAgICAgICAgICAgICAqLwotCXsgMHgwYiwgS0VZX0NIQU5ORUxVUCB9LAotCXsgMHgxOCwgS0VZX1ZPTFVNRURPV04gfSwKLQl7IDB4MTYsIEtFWV9PSyB9LAkJLyogWFhYIEtFWV9FTlRFUiAqLwotCXsgMHgwYywgS0VZX1ZPTFVNRVVQIH0sCi0JeyAweDE1LCBLRVlfQ0hBTk5FTERPV04gfSwKLQotCS8qICAweDExICAgICAgICAgICAgMHgwZCAgKgotCSAqICBNVVRFICAgICAgICAgICAgSU5GTyAgKgotCSAqICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQl7IDB4MTEsIEtFWV9NVVRFIH0sCi0JeyAweDBkLCBLRVlfSU5GTyB9LAotCi0JLyogIDB4MGYgICAgMHgxYiAgICAweDFhICAqCi0JICogUkVDT1JEIFBMQVkvUEFVU0UgU1RPUCAqCi0JICogICAgICAgICAgICAgICAgICAgICAgICAqCi0JICogIDB4MGUgICAgMHgxZiAgICAweDFlICAqCi0JICpURUxFVEVYVCAgQVVESU8gIFNPVVJDRSAqCi0JICogICAgICAgICAgIFJFRCAgIFlFTExPVyAqCi0JICogICAgICAgICAgICAgICAgICAgICAgICAqLwotCXsgMHgwZiwgS0VZX1JFQ09SRCB9LAotCXsgMHgxYiwgS0VZX1BMQVlQQVVTRSB9LAotCXsgMHgxYSwgS0VZX1NUT1AgfSwKLQl7IDB4MGUsIEtFWV9URVhUIH0sCi0JeyAweDFmLCBLRVlfUkVEIH0sCS8qWFhYIEtFWV9BVURJTwkqLwotCXsgMHgxZSwgS0VZX1lFTExPVyB9LAkvKlhYWCBLRVlfU09VUkNFCSovCi0KLQkvKiAgMHgxZCAgIDB4MTMgICAgIDB4MTkgICoKLQkgKiBTTEVFUCAgUFJFVklFVyAgIERWQiAgICoKLQkgKiAgICAgICAgIEdSRUVOICAgIEJMVUUgICoKLQkgKiAgICAgICAgICAgICAgICAgICAgICAgICovCi0JeyAweDFkLCBLRVlfU0xFRVAgfSwKLQl7IDB4MTMsIEtFWV9HUkVFTiB9LAotCXsgMHgxOSwgS0VZX0JMVUUgfSwJLyogWFhYIEtFWV9TQVQJKi8KLQotCS8qICAweDU4ICAgICAgICAgICAweDVjICAgKgotCSAqIEZSRUVaRSAgICAgICAgU05BUFNIT1QgKgotCSAqICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQl7IDB4NTgsIEtFWV9TTE9XIH0sCi0JeyAweDVjLCBLRVlfQ0FNRVJBIH0sCi0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmNfa2V5bWFwIGJlaG9sZF9tYXAgPSB7Ci0JLm1hcCA9IHsKLQkJLnNjYW4gICAgPSBiZWhvbGQsCi0JCS5zaXplICAgID0gQVJSQVlfU0laRShiZWhvbGQpLAotCQkuaXJfdHlwZSA9IElSX1RZUEVfVU5LTk9XTiwJLyogTGVnYWN5IElSIHR5cGUgKi8KLQkJLm5hbWUgICAgPSBSQ19NQVBfQkVIT0xELAotCX0KLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGluaXRfcmNfbWFwX2JlaG9sZCh2b2lkKQotewotCXJldHVybiBpcl9yZWdpc3Rlcl9tYXAoJmJlaG9sZF9tYXApOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yY19tYXBfYmVob2xkKHZvaWQpCi17Ci0JaXJfdW5yZWdpc3Rlcl9tYXAoJmJlaG9sZF9tYXApOwotfQotCi1tb2R1bGVfaW5pdChpbml0X3JjX21hcF9iZWhvbGQpCi1tb2R1bGVfZXhpdChleGl0X3JjX21hcF9iZWhvbGQpCi0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IoIk1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLWJ1ZGdldC1jaS1vbGQuYyBiL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1idWRnZXQtY2ktb2xkLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0YzJhYzkuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLWJ1ZGdldC1jaS1vbGQuYworKysgL2Rldi9udWxsCkBAIC0xLDkyICswLDAgQEAKLS8qIGJ1ZGdldC1jaS1vbGQuaCAtIEtleXRhYmxlIGZvciBidWRnZXRfY2lfb2xkIFJlbW90ZSBDb250cm9sbGVyCi0gKgotICoga2V5bWFwIGltcG9ydGVkIGZyb20gaXIta2V5bWFwcy5jCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDEwIGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2luY2x1ZGUgPG1lZGlhL3JjLW1hcC5oPgotCi0vKiBGcm9tIHJlYWRpbmcgdGhlIGZvbGxvd2luZyByZW1vdGVzOgotICogWmVuaXRoIFVuaXZlcnNhbCA3IC8gVFYgTW9kZSA4MDcgLyBWQ1IgTW9kZSA4MzcKLSAqIEhhdXBwYXVnZSAoZnJvbSBOT1ZBLUNJLXMgYm94IHByb2R1Y3QpCi0gKiBUaGlzIGlzIGEgIm1pZGRsZSBvZiB0aGUgcm9hZCIgYXBwcm9hY2gsIGRpZmZlcmVuY2VzIGFyZSBub3RlZAotICovCi0KLXN0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgYnVkZ2V0X2NpX29sZFtdID0gewotCXsgMHgwMCwgS0VZXzAgfSwKLQl7IDB4MDEsIEtFWV8xIH0sCi0JeyAweDAyLCBLRVlfMiB9LAotCXsgMHgwMywgS0VZXzMgfSwKLQl7IDB4MDQsIEtFWV80IH0sCi0JeyAweDA1LCBLRVlfNSB9LAotCXsgMHgwNiwgS0VZXzYgfSwKLQl7IDB4MDcsIEtFWV83IH0sCi0JeyAweDA4LCBLRVlfOCB9LAotCXsgMHgwOSwgS0VZXzkgfSwKLQl7IDB4MGEsIEtFWV9FTlRFUiB9LAotCXsgMHgwYiwgS0VZX1JFRCB9LAotCXsgMHgwYywgS0VZX1BPV0VSIH0sCQkvKiBSQURJTyBvbiBIYXVwcGF1Z2UgKi8KLQl7IDB4MGQsIEtFWV9NVVRFIH0sCi0JeyAweDBmLCBLRVlfQSB9LAkJLyogVFYgb24gSGF1cHBhdWdlICovCi0JeyAweDEwLCBLRVlfVk9MVU1FVVAgfSwKLQl7IDB4MTEsIEtFWV9WT0xVTUVET1dOIH0sCi0JeyAweDE0LCBLRVlfQiB9LAotCXsgMHgxYywgS0VZX1VQIH0sCi0JeyAweDFkLCBLRVlfRE9XTiB9LAotCXsgMHgxZSwgS0VZX09QVElPTiB9LAkJLyogUkVTRVJWRUQgb24gSGF1cHBhdWdlICovCi0JeyAweDFmLCBLRVlfQlJFQUsgfSwKLQl7IDB4MjAsIEtFWV9DSEFOTkVMVVAgfSwKLQl7IDB4MjEsIEtFWV9DSEFOTkVMRE9XTiB9LAotCXsgMHgyMiwgS0VZX1BSRVZJT1VTIH0sCQkvKiBQcmV2IENoIG9uIFplbml0aCwgU09VUkNFIG9uIEhhdXBwYXVnZSAqLwotCXsgMHgyNCwgS0VZX1JFU1RBUlQgfSwKLQl7IDB4MjUsIEtFWV9PSyB9LAotCXsgMHgyNiwgS0VZX0NZQ0xFV0lORE9XUyB9LAkvKiBNSU5JTUlaRSBvbiBIYXVwcGF1Z2UgKi8KLQl7IDB4MjgsIEtFWV9FTlRFUiB9LAkJLyogVkNSIG1vZGUgb24gWmVuaXRoICovCi0JeyAweDI5LCBLRVlfUEFVU0UgfSwKLQl7IDB4MmIsIEtFWV9SSUdIVCB9LAotCXsgMHgyYywgS0VZX0xFRlQgfSwKLQl7IDB4MmUsIEtFWV9NRU5VIH0sCQkvKiBGVUxMIFNDUkVFTiBvbiBIYXVwcGF1Z2UgKi8KLQl7IDB4MzAsIEtFWV9TTE9XIH0sCi0JeyAweDMxLCBLRVlfUFJFVklPVVMgfSwJCS8qIFZDUiBtb2RlIG9uIFplbml0aCAqLwotCXsgMHgzMiwgS0VZX1JFV0lORCB9LAotCXsgMHgzNCwgS0VZX0ZBU1RGT1JXQVJEIH0sCi0JeyAweDM1LCBLRVlfUExBWSB9LAotCXsgMHgzNiwgS0VZX1NUT1AgfSwKLQl7IDB4MzcsIEtFWV9SRUNPUkQgfSwKLQl7IDB4MzgsIEtFWV9UVU5FUiB9LAkJLyogVFYvVkNSIG9uIFplbml0aCAqLwotCXsgMHgzYSwgS0VZX0MgfSwKLQl7IDB4M2MsIEtFWV9FWElUIH0sCi0JeyAweDNkLCBLRVlfUE9XRVIyIH0sCi0JeyAweDNlLCBLRVlfVFVORVIgfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmNfa2V5bWFwIGJ1ZGdldF9jaV9vbGRfbWFwID0gewotCS5tYXAgPSB7Ci0JCS5zY2FuICAgID0gYnVkZ2V0X2NpX29sZCwKLQkJLnNpemUgICAgPSBBUlJBWV9TSVpFKGJ1ZGdldF9jaV9vbGQpLAotCQkuaXJfdHlwZSA9IElSX1RZUEVfVU5LTk9XTiwJLyogTGVnYWN5IElSIHR5cGUgKi8KLQkJLm5hbWUgICAgPSBSQ19NQVBfQlVER0VUX0NJX09MRCwKLQl9Ci19OwotCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcF9idWRnZXRfY2lfb2xkKHZvaWQpCi17Ci0JcmV0dXJuIGlyX3JlZ2lzdGVyX21hcCgmYnVkZ2V0X2NpX29sZF9tYXApOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yY19tYXBfYnVkZ2V0X2NpX29sZCh2b2lkKQotewotCWlyX3VucmVnaXN0ZXJfbWFwKCZidWRnZXRfY2lfb2xkX21hcCk7Ci19Ci0KLW1vZHVsZV9pbml0KGluaXRfcmNfbWFwX2J1ZGdldF9jaV9vbGQpCi1tb2R1bGVfZXhpdChleGl0X3JjX21hcF9idWRnZXRfY2lfb2xkKQotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1jaW5lcmd5LTE0MDAuYyBiL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1jaW5lcmd5LTE0MDAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDc0ZjJjMi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtY2luZXJneS0xNDAwLmMKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi0vKiBjaW5lcmd5LTE0MDAuaCAtIEtleXRhYmxlIGZvciBjaW5lcmd5XzE0MDAgUmVtb3RlIENvbnRyb2xsZXIKLSAqCi0gKiBrZXltYXAgaW1wb3J0ZWQgZnJvbSBpci1rZXltYXBzLmMKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgYnkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0jaW5jbHVkZSA8bWVkaWEvcmMtbWFwLmg+Ci0KLS8qIENpbmVyZ3kgMTQwMCBEVkItVCAqLwotCi1zdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGNpbmVyZ3lfMTQwMFtdID0gewotCXsgMHgwMSwgS0VZX1BPV0VSIH0sCi0JeyAweDAyLCBLRVlfMSB9LAotCXsgMHgwMywgS0VZXzIgfSwKLQl7IDB4MDQsIEtFWV8zIH0sCi0JeyAweDA1LCBLRVlfNCB9LAotCXsgMHgwNiwgS0VZXzUgfSwKLQl7IDB4MDcsIEtFWV82IH0sCi0JeyAweDA4LCBLRVlfNyB9LAotCXsgMHgwOSwgS0VZXzggfSwKLQl7IDB4MGEsIEtFWV85IH0sCi0JeyAweDBjLCBLRVlfMCB9LAotCi0JeyAweDBiLCBLRVlfVklERU8gfSwKLQl7IDB4MGQsIEtFWV9SRUZSRVNIIH0sCi0JeyAweDBlLCBLRVlfU0VMRUNUIH0sCi0JeyAweDBmLCBLRVlfRVBHIH0sCi0JeyAweDEwLCBLRVlfVVAgfSwKLQl7IDB4MTEsIEtFWV9MRUZUIH0sCi0JeyAweDEyLCBLRVlfT0sgfSwKLQl7IDB4MTMsIEtFWV9SSUdIVCB9LAotCXsgMHgxNCwgS0VZX0RPV04gfSwKLQl7IDB4MTUsIEtFWV9URVhUIH0sCi0JeyAweDE2LCBLRVlfSU5GTyB9LAotCi0JeyAweDE3LCBLRVlfUkVEIH0sCi0JeyAweDE4LCBLRVlfR1JFRU4gfSwKLQl7IDB4MTksIEtFWV9ZRUxMT1cgfSwKLQl7IDB4MWEsIEtFWV9CTFVFIH0sCi0KLQl7IDB4MWIsIEtFWV9DSEFOTkVMVVAgfSwKLQl7IDB4MWMsIEtFWV9WT0xVTUVVUCB9LAotCXsgMHgxZCwgS0VZX01VVEUgfSwKLQl7IDB4MWUsIEtFWV9WT0xVTUVET1dOIH0sCi0JeyAweDFmLCBLRVlfQ0hBTk5FTERPV04gfSwKLQotCXsgMHg0MCwgS0VZX1BBVVNFIH0sCi0JeyAweDRjLCBLRVlfUExBWSB9LAotCXsgMHg1OCwgS0VZX1JFQ09SRCB9LAotCXsgMHg1NCwgS0VZX1BSRVZJT1VTIH0sCi0JeyAweDQ4LCBLRVlfU1RPUCB9LAotCXsgMHg1YywgS0VZX05FWFQgfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmNfa2V5bWFwIGNpbmVyZ3lfMTQwMF9tYXAgPSB7Ci0JLm1hcCA9IHsKLQkJLnNjYW4gICAgPSBjaW5lcmd5XzE0MDAsCi0JCS5zaXplICAgID0gQVJSQVlfU0laRShjaW5lcmd5XzE0MDApLAotCQkuaXJfdHlwZSA9IElSX1RZUEVfVU5LTk9XTiwJLyogTGVnYWN5IElSIHR5cGUgKi8KLQkJLm5hbWUgICAgPSBSQ19NQVBfQ0lORVJHWV8xNDAwLAotCX0KLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGluaXRfcmNfbWFwX2NpbmVyZ3lfMTQwMCh2b2lkKQotewotCXJldHVybiBpcl9yZWdpc3Rlcl9tYXAoJmNpbmVyZ3lfMTQwMF9tYXApOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yY19tYXBfY2luZXJneV8xNDAwKHZvaWQpCi17Ci0JaXJfdW5yZWdpc3Rlcl9tYXAoJmNpbmVyZ3lfMTQwMF9tYXApOwotfQotCi1tb2R1bGVfaW5pdChpbml0X3JjX21hcF9jaW5lcmd5XzE0MDApCi1tb2R1bGVfZXhpdChleGl0X3JjX21hcF9jaW5lcmd5XzE0MDApCi0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IoIk1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLWNpbmVyZ3kuYyBiL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1jaW5lcmd5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmODRjM2QuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLWNpbmVyZ3kuYworKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLS8qIGNpbmVyZ3kuaCAtIEtleXRhYmxlIGZvciBjaW5lcmd5IFJlbW90ZSBDb250cm9sbGVyCi0gKgotICoga2V5bWFwIGltcG9ydGVkIGZyb20gaXIta2V5bWFwcy5jCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDEwIGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2luY2x1ZGUgPG1lZGlhL3JjLW1hcC5oPgotCi1zdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGNpbmVyZ3lbXSA9IHsKLQl7IDB4MDAsIEtFWV8wIH0sCi0JeyAweDAxLCBLRVlfMSB9LAotCXsgMHgwMiwgS0VZXzIgfSwKLQl7IDB4MDMsIEtFWV8zIH0sCi0JeyAweDA0LCBLRVlfNCB9LAotCXsgMHgwNSwgS0VZXzUgfSwKLQl7IDB4MDYsIEtFWV82IH0sCi0JeyAweDA3LCBLRVlfNyB9LAotCXsgMHgwOCwgS0VZXzggfSwKLQl7IDB4MDksIEtFWV85IH0sCi0KLQl7IDB4MGEsIEtFWV9QT1dFUiB9LAotCXsgMHgwYiwgS0VZX1BST0cxIH0sCQkvKiBhcHAgKi8KLQl7IDB4MGMsIEtFWV9aT09NIH0sCQkvKiB6b29tL2Z1bGxzY3JlZW4gKi8KLQl7IDB4MGQsIEtFWV9DSEFOTkVMVVAgfSwJLyogY2hhbm5lbCAqLwotCXsgMHgwZSwgS0VZX0NIQU5ORUxET1dOIH0sCS8qIGNoYW5uZWwtICovCi0JeyAweDBmLCBLRVlfVk9MVU1FVVAgfSwKLQl7IDB4MTAsIEtFWV9WT0xVTUVET1dOIH0sCi0JeyAweDExLCBLRVlfVFVORVIgfSwJCS8qIEFWICovCi0JeyAweDEyLCBLRVlfTlVNTE9DSyB9LAkJLyogLS8tLSAqLwotCXsgMHgxMywgS0VZX0FVRElPIH0sCQkvKiBhdWRpbyAqLwotCXsgMHgxNCwgS0VZX01VVEUgfSwKLQl7IDB4MTUsIEtFWV9VUCB9LAotCXsgMHgxNiwgS0VZX0RPV04gfSwKLQl7IDB4MTcsIEtFWV9MRUZUIH0sCi0JeyAweDE4LCBLRVlfUklHSFQgfSwKLQl7IDB4MTksIEJUTl9MRUZULCB9LAotCXsgMHgxYSwgQlROX1JJR0hULCB9LAotCXsgMHgxYiwgS0VZX1dXVyB9LAkJLyogdGV4dCAqLwotCXsgMHgxYywgS0VZX1JFV0lORCB9LAotCXsgMHgxZCwgS0VZX0ZPUldBUkQgfSwKLQl7IDB4MWUsIEtFWV9SRUNPUkQgfSwKLQl7IDB4MWYsIEtFWV9QTEFZIH0sCi0JeyAweDIwLCBLRVlfUFJFVklPVVNTT05HIH0sCi0JeyAweDIxLCBLRVlfTkVYVFNPTkcgfSwKLQl7IDB4MjIsIEtFWV9QQVVTRSB9LAotCXsgMHgyMywgS0VZX1NUT1AgfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmNfa2V5bWFwIGNpbmVyZ3lfbWFwID0gewotCS5tYXAgPSB7Ci0JCS5zY2FuICAgID0gY2luZXJneSwKLQkJLnNpemUgICAgPSBBUlJBWV9TSVpFKGNpbmVyZ3kpLAotCQkuaXJfdHlwZSA9IElSX1RZUEVfVU5LTk9XTiwJLyogTGVnYWN5IElSIHR5cGUgKi8KLQkJLm5hbWUgICAgPSBSQ19NQVBfQ0lORVJHWSwKLQl9Ci19OwotCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcF9jaW5lcmd5KHZvaWQpCi17Ci0JcmV0dXJuIGlyX3JlZ2lzdGVyX21hcCgmY2luZXJneV9tYXApOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yY19tYXBfY2luZXJneSh2b2lkKQotewotCWlyX3VucmVnaXN0ZXJfbWFwKCZjaW5lcmd5X21hcCk7Ci19Ci0KLW1vZHVsZV9pbml0KGluaXRfcmNfbWFwX2NpbmVyZ3kpCi1tb2R1bGVfZXhpdChleGl0X3JjX21hcF9jaW5lcmd5KQotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1kaWIwNzAwLW5lYy5jIGIvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLWRpYjA3MDAtbmVjLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlMTgzMjAuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLWRpYjA3MDAtbmVjLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjQgKzAsMCBAQAotLyogcmMtZHZiMDcwMC1iaWcuYyAtIEtleXRhYmxlIGZvciBkZXZpY2VzIGluIGR2YjA3MDAKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgYnkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+Ci0gKgotICogVE9ETzogVGhpcyB0YWJsZSBpcyBhIHJlYWwgbWVzcywgYXMgaXQgbWVyZ2VzIFJDIGNvZGVzIGZyb20gc2V2ZXJhbAotICogZGV2aWNlcyBpbnRvIGEgYmlnIHRhYmxlLiBJdCBhbHNvIGhhcyBib3RoIFJDLTUgYW5kIE5FQyBjb2RlcyBpbnNpZGUuCi0gKiBJdCBzaG91bGQgYmUgYnJva2VuIGludG8gc21hbGwgdGFibGVzLCBhbmQgdGhlIHByb3RvY29scyBzaG91bGQgcHJvcGVybHkKLSAqIGJlIGluZGVudGlmaWNhdGVkLgotICoKLSAqIFRoZSB0YWJsZSB3ZXJlIGltcG9ydGVkIGZyb20gZGliMDcwMF9kZXZpY2VzLmMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0jaW5jbHVkZSA8bWVkaWEvcmMtbWFwLmg+Ci0KLXN0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgZGliMDcwMF9uZWNfdGFibGVbXSA9IHsKLQkvKiBLZXkgY29kZXMgZm9yIHRoZSBQaXhlbHZpZXcgU0JUVkQgcmVtb3RlICovCi0JeyAweDg2MTMsIEtFWV9NVVRFIH0sCi0JeyAweDg2MTIsIEtFWV9QT1dFUiB9LAotCXsgMHg4NjAxLCBLRVlfMSB9LAotCXsgMHg4NjAyLCBLRVlfMiB9LAotCXsgMHg4NjAzLCBLRVlfMyB9LAotCXsgMHg4NjA0LCBLRVlfNCB9LAotCXsgMHg4NjA1LCBLRVlfNSB9LAotCXsgMHg4NjA2LCBLRVlfNiB9LAotCXsgMHg4NjA3LCBLRVlfNyB9LAotCXsgMHg4NjA4LCBLRVlfOCB9LAotCXsgMHg4NjA5LCBLRVlfOSB9LAotCXsgMHg4NjAwLCBLRVlfMCB9LAotCXsgMHg4NjBkLCBLRVlfQ0hBTk5FTFVQIH0sCi0JeyAweDg2MTksIEtFWV9DSEFOTkVMRE9XTiB9LAotCXsgMHg4NjEwLCBLRVlfVk9MVU1FVVAgfSwKLQl7IDB4ODYwYywgS0VZX1ZPTFVNRURPV04gfSwKLQotCXsgMHg4NjBhLCBLRVlfQ0FNRVJBIH0sCi0JeyAweDg2MGIsIEtFWV9aT09NIH0sCi0JeyAweDg2MWIsIEtFWV9CQUNLU1BBQ0UgfSwKLQl7IDB4ODYxNSwgS0VZX0VOVEVSIH0sCi0KLQl7IDB4ODYxZCwgS0VZX1VQIH0sCi0JeyAweDg2MWUsIEtFWV9ET1dOIH0sCi0JeyAweDg2MGUsIEtFWV9MRUZUIH0sCi0JeyAweDg2MGYsIEtFWV9SSUdIVCB9LAotCi0JeyAweDg2MTgsIEtFWV9SRUNPUkQgfSwKLQl7IDB4ODYxYSwgS0VZX1NUT1AgfSwKLQotCS8qIEtleSBjb2RlcyBmb3IgdGhlIEV2b2x1dGVQQyBUVldheSsgcmVtb3RlICovCi0JeyAweDdhMDAsIEtFWV9NRU5VIH0sCi0JeyAweDdhMDEsIEtFWV9SRUNPUkQgfSwKLQl7IDB4N2EwMiwgS0VZX1BMQVkgfSwKLQl7IDB4N2EwMywgS0VZX1NUT1AgfSwKLQl7IDB4N2ExMCwgS0VZX0NIQU5ORUxVUCB9LAotCXsgMHg3YTExLCBLRVlfQ0hBTk5FTERPV04gfSwKLQl7IDB4N2ExMiwgS0VZX1ZPTFVNRVVQIH0sCi0JeyAweDdhMTMsIEtFWV9WT0xVTUVET1dOIH0sCi0JeyAweDdhNDAsIEtFWV9QT1dFUiB9LAotCXsgMHg3YTQxLCBLRVlfTVVURSB9LAotCi0JLyogS2V5IGNvZGVzIGZvciB0aGUgRWxnYXRvIEV5ZVRWIERpdmVyc2l0eSBzaWx2ZXIgcmVtb3RlICovCi0JeyAweDQ1MDEsIEtFWV9QT1dFUiB9LAotCXsgMHg0NTAyLCBLRVlfTVVURSB9LAotCXsgMHg0NTAzLCBLRVlfMSB9LAotCXsgMHg0NTA0LCBLRVlfMiB9LAotCXsgMHg0NTA1LCBLRVlfMyB9LAotCXsgMHg0NTA2LCBLRVlfNCB9LAotCXsgMHg0NTA3LCBLRVlfNSB9LAotCXsgMHg0NTA4LCBLRVlfNiB9LAotCXsgMHg0NTA5LCBLRVlfNyB9LAotCXsgMHg0NTBhLCBLRVlfOCB9LAotCXsgMHg0NTBiLCBLRVlfOSB9LAotCXsgMHg0NTBjLCBLRVlfTEFTVCB9LAotCXsgMHg0NTBkLCBLRVlfMCB9LAotCXsgMHg0NTBlLCBLRVlfRU5URVIgfSwKLQl7IDB4NDUwZiwgS0VZX1JFRCB9LAotCXsgMHg0NTEwLCBLRVlfQ0hBTk5FTFVQIH0sCi0JeyAweDQ1MTEsIEtFWV9HUkVFTiB9LAotCXsgMHg0NTEyLCBLRVlfVk9MVU1FRE9XTiB9LAotCXsgMHg0NTEzLCBLRVlfT0sgfSwKLQl7IDB4NDUxNCwgS0VZX1ZPTFVNRVVQIH0sCi0JeyAweDQ1MTUsIEtFWV9ZRUxMT1cgfSwKLQl7IDB4NDUxNiwgS0VZX0NIQU5ORUxET1dOIH0sCi0JeyAweDQ1MTcsIEtFWV9CTFVFIH0sCi0JeyAweDQ1MTgsIEtFWV9MRUZUIH0sIC8qIFNraXAgYmFja3dhcmRzICovCi0JeyAweDQ1MTksIEtFWV9QTEFZUEFVU0UgfSwKLQl7IDB4NDUxYSwgS0VZX1JJR0hUIH0sIC8qIFNraXAgZm9yd2FyZCAqLwotCXsgMHg0NTFiLCBLRVlfUkVXSU5EIH0sCi0JeyAweDQ1MWMsIEtFWV9MIH0sIC8qIExpdmUgKi8KLQl7IDB4NDUxZCwgS0VZX0ZBU1RGT1JXQVJEIH0sCi0JeyAweDQ1MWUsIEtFWV9TVE9QIH0sIC8qICdSZXZlYWwnIGZvciBUZWxldGV4dCAqLwotCXsgMHg0NTFmLCBLRVlfTUVOVSB9LCAvKiBLRVlfVEVYVCBmb3IgVGVsZXRleHQgKi8KLQl7IDB4NDU0MCwgS0VZX1JFQ09SRCB9LCAvKiBGb250ICdTaXplJyBmb3IgVGVsZXRleHQgKi8KLQl7IDB4NDU0MSwgS0VZX1NDUkVFTiB9LCAvKiAgRnVsbCBzY3JlZW4gdG9nZ2xlLCAnSG9sZCcgZm9yIFRlbGV0ZXh0ICovCi0JeyAweDQ1NDIsIEtFWV9TRUxFQ1QgfSwgLyogU2VsZWN0IHZpZGVvIGlucHV0LCAnU2VsZWN0JyBmb3IgVGVsZXRleHQgKi8KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmNfa2V5bWFwIGRpYjA3MDBfbmVjX21hcCA9IHsKLQkubWFwID0gewotCQkuc2NhbiAgICA9IGRpYjA3MDBfbmVjX3RhYmxlLAotCQkuc2l6ZSAgICA9IEFSUkFZX1NJWkUoZGliMDcwMF9uZWNfdGFibGUpLAotCQkuaXJfdHlwZSA9IElSX1RZUEVfTkVDLAotCQkubmFtZSAgICA9IFJDX01BUF9ESUIwNzAwX05FQ19UQUJMRSwKLQl9Ci19OwotCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcCh2b2lkKQotewotCXJldHVybiBpcl9yZWdpc3Rlcl9tYXAoJmRpYjA3MDBfbmVjX21hcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3JjX21hcCh2b2lkKQotewotCWlyX3VucmVnaXN0ZXJfbWFwKCZkaWIwNzAwX25lY19tYXApOwotfQotCi1tb2R1bGVfaW5pdChpbml0X3JjX21hcCkKLW1vZHVsZV9leGl0KGV4aXRfcmNfbWFwKQotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1kaWIwNzAwLXJjNS5jIGIvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLWRpYjA3MDAtcmM1LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhNDc5N2MuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLWRpYjA3MDAtcmM1LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMzUgKzAsMCBAQAotLyogcmMtZHZiMDcwMC1iaWcuYyAtIEtleXRhYmxlIGZvciBkZXZpY2VzIGluIGR2YjA3MDAKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgYnkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+Ci0gKgotICogVE9ETzogVGhpcyB0YWJsZSBpcyBhIHJlYWwgbWVzcywgYXMgaXQgbWVyZ2VzIFJDIGNvZGVzIGZyb20gc2V2ZXJhbAotICogZGV2aWNlcyBpbnRvIGEgYmlnIHRhYmxlLiBJdCBhbHNvIGhhcyBib3RoIFJDLTUgYW5kIE5FQyBjb2RlcyBpbnNpZGUuCi0gKiBJdCBzaG91bGQgYmUgYnJva2VuIGludG8gc21hbGwgdGFibGVzLCBhbmQgdGhlIHByb3RvY29scyBzaG91bGQgcHJvcGVybHkKLSAqIGJlIGluZGVudGlmaWNhdGVkLgotICoKLSAqIFRoZSB0YWJsZSB3ZXJlIGltcG9ydGVkIGZyb20gZGliMDcwMF9kZXZpY2VzLmMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0jaW5jbHVkZSA8bWVkaWEvcmMtbWFwLmg+Ci0KLXN0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgZGliMDcwMF9yYzVfdGFibGVbXSA9IHsKLQkvKiBLZXkgY29kZXMgZm9yIHRoZSB0aW55IFBpbm5hY2xlIHJlbW90ZSovCi0JeyAweDA3MDAsIEtFWV9NVVRFIH0sCi0JeyAweDA3MDEsIEtFWV9NRU5VIH0sIC8qIFBpbm5hY2xlIGxvZ28gKi8KLQl7IDB4MDczOSwgS0VZX1BPV0VSIH0sCi0JeyAweDA3MDMsIEtFWV9WT0xVTUVVUCB9LAotCXsgMHgwNzA5LCBLRVlfVk9MVU1FRE9XTiB9LAotCXsgMHgwNzA2LCBLRVlfQ0hBTk5FTFVQIH0sCi0JeyAweDA3MGMsIEtFWV9DSEFOTkVMRE9XTiB9LAotCXsgMHgwNzBmLCBLRVlfMSB9LAotCXsgMHgwNzE1LCBLRVlfMiB9LAotCXsgMHgwNzEwLCBLRVlfMyB9LAotCXsgMHgwNzE4LCBLRVlfNCB9LAotCXsgMHgwNzFiLCBLRVlfNSB9LAotCXsgMHgwNzFlLCBLRVlfNiB9LAotCXsgMHgwNzExLCBLRVlfNyB9LAotCXsgMHgwNzIxLCBLRVlfOCB9LAotCXsgMHgwNzEyLCBLRVlfOSB9LAotCXsgMHgwNzI3LCBLRVlfMCB9LAotCXsgMHgwNzI0LCBLRVlfU0NSRUVOIH0sIC8qICdTcXVhcmUnIGtleSAqLwotCXsgMHgwNzJhLCBLRVlfVEVYVCB9LCAgIC8qICdUJyBrZXkgKi8KLQl7IDB4MDcyZCwgS0VZX1JFV0lORCB9LAotCXsgMHgwNzMwLCBLRVlfUExBWSB9LAotCXsgMHgwNzMzLCBLRVlfRkFTVEZPUldBUkQgfSwKLQl7IDB4MDczNiwgS0VZX1JFQ09SRCB9LAotCXsgMHgwNzNjLCBLRVlfU1RPUCB9LAotCXsgMHgwNzNmLCBLRVlfQ0FOQ0VMIH0sIC8qICc/JyBrZXkgKi8KLQotCS8qIEtleSBjb2RlcyBmb3IgdGhlIFRlcnJhdGVjIENpbmVyZ3kgRFQgWFMgRGl2ZXJzaXR5LCBzaW1pbGFyIHRvIGNpbmVyZ3lUMi5jICovCi0JeyAweGViMDEsIEtFWV9QT1dFUiB9LAotCXsgMHhlYjAyLCBLRVlfMSB9LAotCXsgMHhlYjAzLCBLRVlfMiB9LAotCXsgMHhlYjA0LCBLRVlfMyB9LAotCXsgMHhlYjA1LCBLRVlfNCB9LAotCXsgMHhlYjA2LCBLRVlfNSB9LAotCXsgMHhlYjA3LCBLRVlfNiB9LAotCXsgMHhlYjA4LCBLRVlfNyB9LAotCXsgMHhlYjA5LCBLRVlfOCB9LAotCXsgMHhlYjBhLCBLRVlfOSB9LAotCXsgMHhlYjBiLCBLRVlfVklERU8gfSwKLQl7IDB4ZWIwYywgS0VZXzAgfSwKLQl7IDB4ZWIwZCwgS0VZX1JFRlJFU0ggfSwKLQl7IDB4ZWIwZiwgS0VZX0VQRyB9LAotCXsgMHhlYjEwLCBLRVlfVVAgfSwKLQl7IDB4ZWIxMSwgS0VZX0xFRlQgfSwKLQl7IDB4ZWIxMiwgS0VZX09LIH0sCi0JeyAweGViMTMsIEtFWV9SSUdIVCB9LAotCXsgMHhlYjE0LCBLRVlfRE9XTiB9LAotCXsgMHhlYjE2LCBLRVlfSU5GTyB9LAotCXsgMHhlYjE3LCBLRVlfUkVEIH0sCi0JeyAweGViMTgsIEtFWV9HUkVFTiB9LAotCXsgMHhlYjE5LCBLRVlfWUVMTE9XIH0sCi0JeyAweGViMWEsIEtFWV9CTFVFIH0sCi0JeyAweGViMWIsIEtFWV9DSEFOTkVMVVAgfSwKLQl7IDB4ZWIxYywgS0VZX1ZPTFVNRVVQIH0sCi0JeyAweGViMWQsIEtFWV9NVVRFIH0sCi0JeyAweGViMWUsIEtFWV9WT0xVTUVET1dOIH0sCi0JeyAweGViMWYsIEtFWV9DSEFOTkVMRE9XTiB9LAotCXsgMHhlYjQwLCBLRVlfUEFVU0UgfSwKLQl7IDB4ZWI0MSwgS0VZX0hPTUUgfSwKLQl7IDB4ZWI0MiwgS0VZX01FTlUgfSwgLyogRFZEIE1lbnUgKi8KLQl7IDB4ZWI0MywgS0VZX1NVQlRJVExFIH0sCi0JeyAweGViNDQsIEtFWV9URVhUIH0sIC8qIFRlbGV0ZXh0ICovCi0JeyAweGViNDUsIEtFWV9ERUxFVEUgfSwKLQl7IDB4ZWI0NiwgS0VZX1RWIH0sCi0JeyAweGViNDcsIEtFWV9EVkQgfSwKLQl7IDB4ZWI0OCwgS0VZX1NUT1AgfSwKLQl7IDB4ZWI0OSwgS0VZX1ZJREVPIH0sCi0JeyAweGViNGEsIEtFWV9BVURJTyB9LCAvKiBNdXNpYyAqLwotCXsgMHhlYjRiLCBLRVlfU0NSRUVOIH0sIC8qIFBpYyAqLwotCXsgMHhlYjRjLCBLRVlfUExBWSB9LAotCXsgMHhlYjRkLCBLRVlfQkFDSyB9LAotCXsgMHhlYjRlLCBLRVlfUkVXSU5EIH0sCi0JeyAweGViNGYsIEtFWV9GQVNURk9SV0FSRCB9LAotCXsgMHhlYjU0LCBLRVlfUFJFVklPVVMgfSwKLQl7IDB4ZWI1OCwgS0VZX1JFQ09SRCB9LAotCXsgMHhlYjVjLCBLRVlfTkVYVCB9LAotCi0JLyogS2V5IGNvZGVzIGZvciB0aGUgSGF1cGF1Z2UgV2luVFYgTm92YS1URCwgY29waWVkIGZyb20gbm92YS10LXVzYjIuYyAoTm92YS1UIFVTQjIpICovCi0JeyAweDFlMDAsIEtFWV8wIH0sCi0JeyAweDFlMDEsIEtFWV8xIH0sCi0JeyAweDFlMDIsIEtFWV8yIH0sCi0JeyAweDFlMDMsIEtFWV8zIH0sCi0JeyAweDFlMDQsIEtFWV80IH0sCi0JeyAweDFlMDUsIEtFWV81IH0sCi0JeyAweDFlMDYsIEtFWV82IH0sCi0JeyAweDFlMDcsIEtFWV83IH0sCi0JeyAweDFlMDgsIEtFWV84IH0sCi0JeyAweDFlMDksIEtFWV85IH0sCi0JeyAweDFlMGEsIEtFWV9LUEFTVEVSSVNLIH0sCi0JeyAweDFlMGIsIEtFWV9SRUQgfSwKLQl7IDB4MWUwYywgS0VZX1JBRElPIH0sCi0JeyAweDFlMGQsIEtFWV9NRU5VIH0sCi0JeyAweDFlMGUsIEtFWV9HUkFWRSB9LCAvKiAjICovCi0JeyAweDFlMGYsIEtFWV9NVVRFIH0sCi0JeyAweDFlMTAsIEtFWV9WT0xVTUVVUCB9LAotCXsgMHgxZTExLCBLRVlfVk9MVU1FRE9XTiB9LAotCXsgMHgxZTEyLCBLRVlfQ0hBTk5FTCB9LAotCXsgMHgxZTE0LCBLRVlfVVAgfSwKLQl7IDB4MWUxNSwgS0VZX0RPV04gfSwKLQl7IDB4MWUxNiwgS0VZX0xFRlQgfSwKLQl7IDB4MWUxNywgS0VZX1JJR0hUIH0sCi0JeyAweDFlMTgsIEtFWV9WSURFTyB9LAotCXsgMHgxZTE5LCBLRVlfQVVESU8gfSwKLQl7IDB4MWUxYSwgS0VZX01FRElBIH0sCi0JeyAweDFlMWIsIEtFWV9FUEcgfSwKLQl7IDB4MWUxYywgS0VZX1RWIH0sCi0JeyAweDFlMWUsIEtFWV9ORVhUIH0sCi0JeyAweDFlMWYsIEtFWV9CQUNLIH0sCi0JeyAweDFlMjAsIEtFWV9DSEFOTkVMVVAgfSwKLQl7IDB4MWUyMSwgS0VZX0NIQU5ORUxET1dOIH0sCi0JeyAweDFlMjQsIEtFWV9MQVNUIH0sIC8qIFNraXAgYmFja3dhcmRzICovCi0JeyAweDFlMjUsIEtFWV9PSyB9LAotCXsgMHgxZTI5LCBLRVlfQkxVRX0sCi0JeyAweDFlMmUsIEtFWV9HUkVFTiB9LAotCXsgMHgxZTMwLCBLRVlfUEFVU0UgfSwKLQl7IDB4MWUzMiwgS0VZX1JFV0lORCB9LAotCXsgMHgxZTM0LCBLRVlfRkFTVEZPUldBUkQgfSwKLQl7IDB4MWUzNSwgS0VZX1BMQVkgfSwKLQl7IDB4MWUzNiwgS0VZX1NUT1AgfSwKLQl7IDB4MWUzNywgS0VZX1JFQ09SRCB9LAotCXsgMHgxZTM4LCBLRVlfWUVMTE9XIH0sCi0JeyAweDFlM2IsIEtFWV9HT1RPIH0sCi0JeyAweDFlM2QsIEtFWV9QT1dFUiB9LAotCi0JLyogS2V5IGNvZGVzIGZvciB0aGUgTGVhZHRlayBXaW5mYXN0IERUViBEb25nbGUgKi8KLQl7IDB4MDA0MiwgS0VZX1BPV0VSIH0sCi0JeyAweDA3N2MsIEtFWV9UVU5FUiB9LAotCXsgMHgwZjRlLCBLRVlfUFJJTlQgfSwgLyogUFJFVklFVyAqLwotCXsgMHgwODQwLCBLRVlfU0NSRUVOIH0sIC8qIGZ1bGwgc2NyZWVuIHRvZ2dsZSovCi0JeyAweDBmNzEsIEtFWV9ET1QgfSwgLyogZnJlcXVlbmN5ICovCi0JeyAweDA3NDMsIEtFWV8wIH0sCi0JeyAweDBjNDEsIEtFWV8xIH0sCi0JeyAweDA0NDMsIEtFWV8yIH0sCi0JeyAweDBiN2YsIEtFWV8zIH0sCi0JeyAweDBlNDEsIEtFWV80IH0sCi0JeyAweDA2NDMsIEtFWV81IH0sCi0JeyAweDA5N2YsIEtFWV82IH0sCi0JeyAweDBkN2UsIEtFWV83IH0sCi0JeyAweDA1N2MsIEtFWV84IH0sCi0JeyAweDBhNDAsIEtFWV85IH0sCi0JeyAweDBlNGUsIEtFWV9DTEVBUiB9LAotCXsgMHgwNDdjLCBLRVlfQ0hBTk5FTCB9LCAvKiBzaG93IGNoYW5uZWwgbnVtYmVyICovCi0JeyAweDBmNDEsIEtFWV9MQVNUIH0sIC8qIHJlY2FsbCAqLwotCXsgMHgwMzQyLCBLRVlfTVVURSB9LAotCXsgMHgwNjRjLCBLRVlfUkVTRVJWRUQgfSwgLyogUElQIGJ1dHRvbiovCi0JeyAweDAxNzIsIEtFWV9TSFVGRkxFIH0sIC8qIFNOQVBTSE9UICovCi0JeyAweDBjNGUsIEtFWV9QTEFZUEFVU0UgfSwgLyogVElNRVNISUZUICovCi0JeyAweDBiNzAsIEtFWV9SRUNPUkQgfSwKLQl7IDB4MDM3ZCwgS0VZX1ZPTFVNRVVQIH0sCi0JeyAweDAxN2QsIEtFWV9WT0xVTUVET1dOIH0sCi0JeyAweDAyNDIsIEtFWV9DSEFOTkVMVVAgfSwKLQl7IDB4MDA3ZCwgS0VZX0NIQU5ORUxET1dOIH0sCi0KLQkvKiBLZXkgY29kZXMgZm9yIE5vdmEtVEQgImNyZWRpdCBjYXJkIiByZW1vdGUgY29udHJvbC4gKi8KLQl7IDB4MWQwMCwgS0VZXzAgfSwKLQl7IDB4MWQwMSwgS0VZXzEgfSwKLQl7IDB4MWQwMiwgS0VZXzIgfSwKLQl7IDB4MWQwMywgS0VZXzMgfSwKLQl7IDB4MWQwNCwgS0VZXzQgfSwKLQl7IDB4MWQwNSwgS0VZXzUgfSwKLQl7IDB4MWQwNiwgS0VZXzYgfSwKLQl7IDB4MWQwNywgS0VZXzcgfSwKLQl7IDB4MWQwOCwgS0VZXzggfSwKLQl7IDB4MWQwOSwgS0VZXzkgfSwKLQl7IDB4MWQwYSwgS0VZX1RFWFQgfSwKLQl7IDB4MWQwZCwgS0VZX01FTlUgfSwKLQl7IDB4MWQwZiwgS0VZX01VVEUgfSwKLQl7IDB4MWQxMCwgS0VZX1ZPTFVNRVVQIH0sCi0JeyAweDFkMTEsIEtFWV9WT0xVTUVET1dOIH0sCi0JeyAweDFkMTIsIEtFWV9DSEFOTkVMIH0sCi0JeyAweDFkMTQsIEtFWV9VUCB9LAotCXsgMHgxZDE1LCBLRVlfRE9XTiB9LAotCXsgMHgxZDE2LCBLRVlfTEVGVCB9LAotCXsgMHgxZDE3LCBLRVlfUklHSFQgfSwKLQl7IDB4MWQxYywgS0VZX1RWIH0sCi0JeyAweDFkMWUsIEtFWV9ORVhUIH0sCi0JeyAweDFkMWYsIEtFWV9CQUNLIH0sCi0JeyAweDFkMjAsIEtFWV9DSEFOTkVMVVAgfSwKLQl7IDB4MWQyMSwgS0VZX0NIQU5ORUxET1dOIH0sCi0JeyAweDFkMjQsIEtFWV9MQVNUIH0sCi0JeyAweDFkMjUsIEtFWV9PSyB9LAotCXsgMHgxZDMwLCBLRVlfUEFVU0UgfSwKLQl7IDB4MWQzMiwgS0VZX1JFV0lORCB9LAotCXsgMHgxZDM0LCBLRVlfRkFTVEZPUldBUkQgfSwKLQl7IDB4MWQzNSwgS0VZX1BMQVkgfSwKLQl7IDB4MWQzNiwgS0VZX1NUT1AgfSwKLQl7IDB4MWQzNywgS0VZX1JFQ09SRCB9LAotCXsgMHgxZDNiLCBLRVlfR09UTyB9LAotCXsgMHgxZDNkLCBLRVlfUE9XRVIgfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmNfa2V5bWFwIGRpYjA3MDBfcmM1X21hcCA9IHsKLQkubWFwID0gewotCQkuc2NhbiAgICA9IGRpYjA3MDBfcmM1X3RhYmxlLAotCQkuc2l6ZSAgICA9IEFSUkFZX1NJWkUoZGliMDcwMF9yYzVfdGFibGUpLAotCQkuaXJfdHlwZSA9IElSX1RZUEVfUkM1LAotCQkubmFtZSAgICA9IFJDX01BUF9ESUIwNzAwX1JDNV9UQUJMRSwKLQl9Ci19OwotCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcCh2b2lkKQotewotCXJldHVybiBpcl9yZWdpc3Rlcl9tYXAoJmRpYjA3MDBfcmM1X21hcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3JjX21hcCh2b2lkKQotewotCWlyX3VucmVnaXN0ZXJfbWFwKCZkaWIwNzAwX3JjNV9tYXApOwotfQotCi1tb2R1bGVfaW5pdChpbml0X3JjX21hcCkKLW1vZHVsZV9leGl0KGV4aXRfcmNfbWFwKQotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1kaWdpdGFsbm93LXRpbnl0d2luLmMgYi9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtZGlnaXRhbG5vdy10aW55dHdpbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2M2U0NjllLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1kaWdpdGFsbm93LXRpbnl0d2luLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi0vKgotICogRGlnaXRhbE5vdyBUaW55VHdpbiByZW1vdGUgY29udHJvbGxlciBrZXl0YWJsZQotICoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBbnR0aSBQYWxvc2FhcmkgPGNyb3BlQGlraS5maT4KLSAqCi0gKiAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqICAgIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiAgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgotICovCi0KLSNpbmNsdWRlIDxtZWRpYS9yYy1tYXAuaD4KLQotc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBkaWdpdGFsbm93X3Rpbnl0d2luW10gPSB7Ci0JeyAweDAwMDAsIEtFWV9NVVRFIH0sICAgICAgICAgICAgLyogW3N5bWJvbCBzcGVha2VyXSAqLwotCXsgMHgwMDAxLCBLRVlfVk9MVU1FVVAgfSwKLQl7IDB4MDAwMiwgS0VZX1BPV0VSMiB9LCAgICAgICAgICAvKiBUViBbcG93ZXIgYnV0dG9uXSAqLwotCXsgMHgwMDAzLCBLRVlfMiB9LAotCXsgMHgwMDA0LCBLRVlfMyB9LAotCXsgMHgwMDA1LCBLRVlfNCB9LAotCXsgMHgwMDA2LCBLRVlfNiB9LAotCXsgMHgwMDA3LCBLRVlfNyB9LAotCXsgMHgwMDA4LCBLRVlfOCB9LAotCXsgMHgwMDA5LCBLRVlfTlVNRVJJQ19TVEFSIH0sICAgIC8qIFsqXSAqLwotCXsgMHgwMDBhLCBLRVlfMCB9LAotCXsgMHgwMDBiLCBLRVlfTlVNRVJJQ19QT1VORCB9LCAgIC8qIFsjXSAqLwotCXsgMHgwMDBjLCBLRVlfUklHSFQgfSwgICAgICAgICAgIC8qIFtyaWdodCBhcnJvd10gKi8KLQl7IDB4MDAwZCwgS0VZX0hPTUVQQUdFIH0sICAgICAgICAvKiBbc3ltYm9sIGhvbWVdIFN0YXJ0ICovCi0JeyAweDAwMGUsIEtFWV9SRUQgfSwgICAgICAgICAgICAgLyogW3JlZF0gVmlkZW9zICovCi0JeyAweDAwMTAsIEtFWV9QT1dFUiB9LCAgICAgICAgICAgLyogUEMgW3Bvd2VyIGJ1dHRvbl0gKi8KLQl7IDB4MDAxMSwgS0VZX1lFTExPVyB9LCAgICAgICAgICAvKiBbeWVsbG93XSBQaWN0dXJlcyAqLwotCXsgMHgwMDEyLCBLRVlfRE9XTiB9LCAgICAgICAgICAgIC8qIFtkb3duIGFycm93XSAqLwotCXsgMHgwMDEzLCBLRVlfR1JFRU4gfSwgICAgICAgICAgIC8qIFtncmVlbl0gTXVzaWMgKi8KLQl7IDB4MDAxNCwgS0VZX0NZQ0xFV0lORE9XUyB9LCAgICAvKiBCQUNLICovCi0JeyAweDAwMTUsIEtFWV9GQVZPUklURVMgfSwgICAgICAgLyogTU9SRSAqLwotCXsgMHgwMDE2LCBLRVlfVVAgfSwgICAgICAgICAgICAgIC8qIFt1cCBhcnJvd10gKi8KLQl7IDB4MDAxNywgS0VZX0xFRlQgfSwgICAgICAgICAgICAvKiBbbGVmdCBhcnJvd10gKi8KLQl7IDB4MDAxOCwgS0VZX09LIH0sICAgICAgICAgICAgICAvKiBPSyAqLwotCXsgMHgwMDE5LCBLRVlfQkxVRSB9LCAgICAgICAgICAgIC8qIFtibHVlXSBNeVRWICovCi0JeyAweDAwMWEsIEtFWV9SRVdJTkQgfSwgICAgICAgICAgLyogUkVXIFs8PF0gKi8KLQl7IDB4MDAxYiwgS0VZX1BMQVkgfSwgICAgICAgICAgICAvKiBQTEFZICovCi0JeyAweDAwMWMsIEtFWV81IH0sCi0JeyAweDAwMWQsIEtFWV85IH0sCi0JeyAweDAwMWUsIEtFWV9WT0xVTUVET1dOIH0sCi0JeyAweDAwMWYsIEtFWV8xIH0sCi0JeyAweDAwNDAsIEtFWV9TVE9QIH0sICAgICAgICAgICAgLyogU1RPUCAqLwotCXsgMHgwMDQyLCBLRVlfUEFVU0UgfSwgICAgICAgICAgIC8qIFBBVVNFICovCi0JeyAweDAwNDMsIEtFWV9TQ1JFRU4gfSwgICAgICAgICAgLyogQXNwZWN0ICovCi0JeyAweDAwNDQsIEtFWV9GT1JXQVJEIH0sICAgICAgICAgLyogRldEIFs+Pl0gKi8KLQl7IDB4MDA0NSwgS0VZX05FWFQgfSwgICAgICAgICAgICAvKiBTS0lQICovCi0JeyAweDAwNDgsIEtFWV9SRUNPUkQgfSwgICAgICAgICAgLyogUkVDT1JEICovCi0JeyAweDAwNDksIEtFWV9WSURFTyB9LCAgICAgICAgICAgLyogUlRWICovCi0JeyAweDAwNGEsIEtFWV9FUEcgfSwgICAgICAgICAgICAgLyogR3VpZGUgKi8KLQl7IDB4MDA0YiwgS0VZX0NIQU5ORUxVUCB9LAotCXsgMHgwMDRjLCBLRVlfSEVMUCB9LCAgICAgICAgICAgIC8qIEhlbHAgKi8KLQl7IDB4MDA0ZCwgS0VZX1JBRElPIH0sICAgICAgICAgICAvKiBSYWRpbyAqLwotCXsgMHgwMDRmLCBLRVlfQ0hBTk5FTERPV04gfSwKLQl7IDB4MDA1MCwgS0VZX0RWRCB9LCAgICAgICAgICAgICAvKiBEVkQgKi8KLQl7IDB4MDA1MSwgS0VZX0FVRElPIH0sICAgICAgICAgICAvKiBBdWRpbyAqLwotCXsgMHgwMDUyLCBLRVlfVElUTEUgfSwgICAgICAgICAgIC8qIFRpdGxlICovCi0JeyAweDAwNTMsIEtFWV9ORVcgfSwgICAgICAgICAgICAgLyogW3N5bWJvbCBQSVA/XSAqLwotCXsgMHgwMDU3LCBLRVlfTUVOVSB9LCAgICAgICAgICAgIC8qIE1vdXNlICovCi0JeyAweDAwNWEsIEtFWV9QUkVWSU9VUyB9LCAgICAgICAgLyogUkVQTEFZICovCi19OwotCi1zdGF0aWMgc3RydWN0IHJjX2tleW1hcCBkaWdpdGFsbm93X3Rpbnl0d2luX21hcCA9IHsKLQkubWFwID0gewotCQkuc2NhbiAgICA9IGRpZ2l0YWxub3dfdGlueXR3aW4sCi0JCS5zaXplICAgID0gQVJSQVlfU0laRShkaWdpdGFsbm93X3Rpbnl0d2luKSwKLQkJLmlyX3R5cGUgPSBJUl9UWVBFX05FQywKLQkJLm5hbWUgICAgPSBSQ19NQVBfRElHSVRBTE5PV19USU5ZVFdJTiwKLQl9Ci19OwotCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcF9kaWdpdGFsbm93X3Rpbnl0d2luKHZvaWQpCi17Ci0JcmV0dXJuIGlyX3JlZ2lzdGVyX21hcCgmZGlnaXRhbG5vd190aW55dHdpbl9tYXApOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yY19tYXBfZGlnaXRhbG5vd190aW55dHdpbih2b2lkKQotewotCWlyX3VucmVnaXN0ZXJfbWFwKCZkaWdpdGFsbm93X3Rpbnl0d2luX21hcCk7Ci19Ci0KLW1vZHVsZV9pbml0KGluaXRfcmNfbWFwX2RpZ2l0YWxub3dfdGlueXR3aW4pCi1tb2R1bGVfZXhpdChleGl0X3JjX21hcF9kaWdpdGFsbm93X3Rpbnl0d2luKQotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJBbnR0aSBQYWxvc2FhcmkgPGNyb3BlQGlraS5maT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1kaWdpdHRyYWRlLmMgYi9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtZGlnaXR0cmFkZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZGVjZTc4Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1kaWdpdHRyYWRlLmMKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0vKgotICogRGlnaXR0cmFkZSBEVkItVCBVU0IgU3RpY2sgcmVtb3RlIGNvbnRyb2xsZXIga2V5dGFibGUKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQW50dGkgUGFsb3NhYXJpIDxjcm9wZUBpa2kuZmk+Ci0gKgotICogICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiAgICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8bWVkaWEvcmMtbWFwLmg+Ci0KLS8qIERpZ2l0dHJhZGUgRFZCLVQgVVNCIFN0aWNrIHJlbW90ZSBjb250cm9sbGVyLiAqLwotLyogSW1wb3J0ZWQgZnJvbSBhZjkwMTUuaC4KLSAgIEluaXRpYWwga2V5dGFibGUgd2FzIGZyb20gQWxhaW4gS2Fsa2VyIDxtaWtpQGRkcy5ubD4gKi8KLQotLyogRGlnaXR0cmFkZSBEVkItVCBVU0IgU3RpY2sgKi8KLXN0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgZGlnaXR0cmFkZVtdID0gewotCXsgMHgwMDAwLCBLRVlfOSB9LAotCXsgMHgwMDAxLCBLRVlfRVBHIH0sICAgICAgICAgICAgIC8qIEVQRyAqLwotCXsgMHgwMDAyLCBLRVlfVk9MVU1FRE9XTiB9LCAgICAgIC8qIFZvbCBEbiAqLwotCXsgMHgwMDAzLCBLRVlfVEVYVCB9LCAgICAgICAgICAgIC8qIFRFTEVURVhUICovCi0JeyAweDAwMDQsIEtFWV84IH0sCi0JeyAweDAwMDUsIEtFWV9NVVRFIH0sICAgICAgICAgICAgLyogTVVURSAqLwotCXsgMHgwMDA2LCBLRVlfUE9XRVIyIH0sICAgICAgICAgIC8qIFBPV0VSICovCi0JeyAweDAwMDksIEtFWV9aT09NIH0sICAgICAgICAgICAgLyogRlVMTFNDUkVFTiAqLwotCXsgMHgwMDBhLCBLRVlfUkVDT1JEIH0sICAgICAgICAgIC8qIFJFQ09SRCAqLwotCXsgMHgwMDBkLCBLRVlfU1VCVElUTEUgfSwgICAgICAgIC8qIFNVQlRJVExFICovCi0JeyAweDAwMGUsIEtFWV9TVE9QIH0sICAgICAgICAgICAgLyogU1RPUCAqLwotCXsgMHgwMDEwLCBLRVlfT0sgfSwgICAgICAgICAgICAgIC8qIFJFVFVSTiAqLwotCXsgMHgwMDExLCBLRVlfMiB9LAotCXsgMHgwMDEyLCBLRVlfNCB9LAotCXsgMHgwMDE1LCBLRVlfMyB9LAotCXsgMHgwMDE2LCBLRVlfNSB9LAotCXsgMHgwMDE3LCBLRVlfQ0hBTk5FTERPV04gfSwgICAgIC8qIENoIERuICovCi0JeyAweDAwMTksIEtFWV9DSEFOTkVMVVAgfSwgICAgICAgLyogQ0ggVXAgKi8KLQl7IDB4MDAxYSwgS0VZX1BBVVNFIH0sICAgICAgICAgICAvKiBQQVVTRSAqLwotCXsgMHgwMDFiLCBLRVlfMSB9LAotCXsgMHgwMDFkLCBLRVlfQVVESU8gfSwgICAgICAgICAgIC8qIERVQUwgU09VTkQgKi8KLQl7IDB4MDAxZSwgS0VZX1BMQVkgfSwgICAgICAgICAgICAvKiBQTEFZICovCi0JeyAweDAwMWYsIEtFWV9DQU1FUkEgfSwgICAgICAgICAgLyogU05BUFNIT1QgKi8KLQl7IDB4MDA0MCwgS0VZX1ZPTFVNRVVQIH0sICAgICAgICAvKiBWb2wgVXAgKi8KLQl7IDB4MDA0OCwgS0VZXzcgfSwKLQl7IDB4MDA0YywgS0VZXzYgfSwKLQl7IDB4MDA0ZCwgS0VZX1BMQVlQQVVTRSB9LCAgICAgICAvKiBUSU1FU0hJRlQgKi8KLQl7IDB4MDA1NCwgS0VZXzAgfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmNfa2V5bWFwIGRpZ2l0dHJhZGVfbWFwID0gewotCS5tYXAgPSB7Ci0JCS5zY2FuICAgID0gZGlnaXR0cmFkZSwKLQkJLnNpemUgICAgPSBBUlJBWV9TSVpFKGRpZ2l0dHJhZGUpLAotCQkuaXJfdHlwZSA9IElSX1RZUEVfTkVDLAotCQkubmFtZSAgICA9IFJDX01BUF9ESUdJVFRSQURFLAotCX0KLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGluaXRfcmNfbWFwX2RpZ2l0dHJhZGUodm9pZCkKLXsKLQlyZXR1cm4gaXJfcmVnaXN0ZXJfbWFwKCZkaWdpdHRyYWRlX21hcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3JjX21hcF9kaWdpdHRyYWRlKHZvaWQpCi17Ci0JaXJfdW5yZWdpc3Rlcl9tYXAoJmRpZ2l0dHJhZGVfbWFwKTsKLX0KLQotbW9kdWxlX2luaXQoaW5pdF9yY19tYXBfZGlnaXR0cmFkZSkKLW1vZHVsZV9leGl0KGV4aXRfcmNfbWFwX2RpZ2l0dHJhZGUpCi0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IoIkFudHRpIFBhbG9zYWFyaSA8Y3JvcGVAaWtpLmZpPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLWRtMTEwNS1uZWMuYyBiL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1kbTExMDUtbmVjLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwNjg0ZDAuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLWRtMTEwNS1uZWMuYworKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLS8qIGRtMTEwNS1uZWMuaCAtIEtleXRhYmxlIGZvciBkbTExMDVfbmVjIFJlbW90ZSBDb250cm9sbGVyCi0gKgotICoga2V5bWFwIGltcG9ydGVkIGZyb20gaXIta2V5bWFwcy5jCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDEwIGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2luY2x1ZGUgPG1lZGlhL3JjLW1hcC5oPgotCi0vKiBEVkJXb3JsZCByZW1vdGVzCi0gICBJZ29yIE0uIExpcGxpYW5pbiA8bGlwbGlhbmluQG1lLmJ5PgotICovCi0KLXN0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgZG0xMTA1X25lY1tdID0gewotCXsgMHgwYSwgS0VZX1BPV0VSMn0sCQkvKiBwb3dlciAqLwotCXsgMHgwYywgS0VZX01VVEV9LAkJLyogbXV0ZSAqLwotCXsgMHgxMSwgS0VZXzF9LAotCXsgMHgxMiwgS0VZXzJ9LAotCXsgMHgxMywgS0VZXzN9LAotCXsgMHgxNCwgS0VZXzR9LAotCXsgMHgxNSwgS0VZXzV9LAotCXsgMHgxNiwgS0VZXzZ9LAotCXsgMHgxNywgS0VZXzd9LAotCXsgMHgxOCwgS0VZXzh9LAotCXsgMHgxOSwgS0VZXzl9LAotCXsgMHgxMCwgS0VZXzB9LAotCXsgMHgxYywgS0VZX0NIQU5ORUxVUH0sCQkvKiBjaCsgKi8KLQl7IDB4MGYsIEtFWV9DSEFOTkVMRE9XTn0sCS8qIGNoLSAqLwotCXsgMHgxYSwgS0VZX1ZPTFVNRVVQfSwJCS8qIHZvbCsgKi8KLQl7IDB4MGUsIEtFWV9WT0xVTUVET1dOfSwJLyogdm9sLSAqLwotCXsgMHgwNCwgS0VZX1JFQ09SRH0sCQkvKiByZWMgKi8KLQl7IDB4MDksIEtFWV9DSEFOTkVMfSwJCS8qIGZhdiAqLwotCXsgMHgwOCwgS0VZX0JBQ0tTUEFDRX0sCQkvKiByZXdpbmQgKi8KLQl7IDB4MDcsIEtFWV9GQVNURk9SV0FSRH0sCS8qIGZhc3QgKi8KLQl7IDB4MGIsIEtFWV9QQVVTRX0sCQkvKiBwYXVzZSAqLwotCXsgMHgwMiwgS0VZX0VTQ30sCQkvKiBjYW5jZWwgKi8KLQl7IDB4MDMsIEtFWV9UQUJ9LAkJLyogdGFiICovCi0JeyAweDAwLCBLRVlfVVB9LAkJLyogdXAgKi8KLQl7IDB4MWYsIEtFWV9FTlRFUn0sCQkvKiBvayAqLwotCXsgMHgwMSwgS0VZX0RPV059LAkJLyogZG93biAqLwotCXsgMHgwNSwgS0VZX1JFQ09SRH0sCQkvKiBjYXAgKi8KLQl7IDB4MDYsIEtFWV9TVE9QfSwJCS8qIHN0b3AgKi8KLQl7IDB4NDAsIEtFWV9aT09NfSwJCS8qIGZ1bGwgKi8KLQl7IDB4MWUsIEtFWV9UVn0sCQkvKiB0dm1vZGUgKi8KLQl7IDB4MWIsIEtFWV9CfSwJCQkvKiByZWNhbGwgKi8KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmNfa2V5bWFwIGRtMTEwNV9uZWNfbWFwID0gewotCS5tYXAgPSB7Ci0JCS5zY2FuICAgID0gZG0xMTA1X25lYywKLQkJLnNpemUgICAgPSBBUlJBWV9TSVpFKGRtMTEwNV9uZWMpLAotCQkuaXJfdHlwZSA9IElSX1RZUEVfVU5LTk9XTiwJLyogTGVnYWN5IElSIHR5cGUgKi8KLQkJLm5hbWUgICAgPSBSQ19NQVBfRE0xMTA1X05FQywKLQl9Ci19OwotCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcF9kbTExMDVfbmVjKHZvaWQpCi17Ci0JcmV0dXJuIGlyX3JlZ2lzdGVyX21hcCgmZG0xMTA1X25lY19tYXApOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yY19tYXBfZG0xMTA1X25lYyh2b2lkKQotewotCWlyX3VucmVnaXN0ZXJfbWFwKCZkbTExMDVfbmVjX21hcCk7Ci19Ci0KLW1vZHVsZV9pbml0KGluaXRfcmNfbWFwX2RtMTEwNV9uZWMpCi1tb2R1bGVfZXhpdChleGl0X3JjX21hcF9kbTExMDVfbmVjKQotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1kbnR2LWxpdmUtZHZiLXQuYyBiL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1kbnR2LWxpdmUtZHZiLXQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGE0MDI3YS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtZG50di1saXZlLWR2Yi10LmMKKysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi0vKiBkbnR2LWxpdmUtZHZiLXQuaCAtIEtleXRhYmxlIGZvciBkbnR2X2xpdmVfZHZiX3QgUmVtb3RlIENvbnRyb2xsZXIKLSAqCi0gKiBrZXltYXAgaW1wb3J0ZWQgZnJvbSBpci1rZXltYXBzLmMKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgYnkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0jaW5jbHVkZSA8bWVkaWEvcmMtbWFwLmg+Ci0KLS8qIERpZ2l0YWxOb3cgRE5UViBMaXZlIERWQi1UIFJlbW90ZSAqLwotCi1zdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGRudHZfbGl2ZV9kdmJfdFtdID0gewotCXsgMHgwMCwgS0VZX0VTQyB9LAkJLyogJ2dvIHVwIGEgbGV2ZWw/JyAqLwotCS8qIEtleXMgMCB0byA5ICovCi0JeyAweDBhLCBLRVlfMCB9LAotCXsgMHgwMSwgS0VZXzEgfSwKLQl7IDB4MDIsIEtFWV8yIH0sCi0JeyAweDAzLCBLRVlfMyB9LAotCXsgMHgwNCwgS0VZXzQgfSwKLQl7IDB4MDUsIEtFWV81IH0sCi0JeyAweDA2LCBLRVlfNiB9LAotCXsgMHgwNywgS0VZXzcgfSwKLQl7IDB4MDgsIEtFWV84IH0sCi0JeyAweDA5LCBLRVlfOSB9LAotCi0JeyAweDBiLCBLRVlfVFVORVIgfSwJCS8qIHR2L2ZtICovCi0JeyAweDBjLCBLRVlfU0VBUkNIIH0sCQkvKiBzY2FuICovCi0JeyAweDBkLCBLRVlfU1RPUCB9LAotCXsgMHgwZSwgS0VZX1BBVVNFIH0sCi0JeyAweDBmLCBLRVlfTElTVCB9LAkJLyogc291cmNlICovCi0KLQl7IDB4MTAsIEtFWV9NVVRFIH0sCi0JeyAweDExLCBLRVlfUkVXSU5EIH0sCQkvKiBiYWNrd2FyZCA8PCAqLwotCXsgMHgxMiwgS0VZX1BPV0VSIH0sCi0JeyAweDEzLCBLRVlfQ0FNRVJBIH0sCQkvKiBzbmFwICovCi0JeyAweDE0LCBLRVlfQVVESU8gfSwJCS8qIHN0ZXJlbyAqLwotCXsgMHgxNSwgS0VZX0NMRUFSIH0sCQkvKiByZXNldCAqLwotCXsgMHgxNiwgS0VZX1BMQVkgfSwKLQl7IDB4MTcsIEtFWV9FTlRFUiB9LAotCXsgMHgxOCwgS0VZX1pPT00gfSwJCS8qIGZ1bGwgc2NyZWVuICovCi0JeyAweDE5LCBLRVlfRkFTVEZPUldBUkQgfSwJLyogZm9yd2FyZCA+PiAqLwotCXsgMHgxYSwgS0VZX0NIQU5ORUxVUCB9LAotCXsgMHgxYiwgS0VZX1ZPTFVNRVVQIH0sCi0JeyAweDFjLCBLRVlfSU5GTyB9LAkJLyogcHJldmlldyAqLwotCXsgMHgxZCwgS0VZX1JFQ09SRCB9LAkJLyogcmVjb3JkICovCi0JeyAweDFlLCBLRVlfQ0hBTk5FTERPV04gfSwKLQl7IDB4MWYsIEtFWV9WT0xVTUVET1dOIH0sCi19OwotCi1zdGF0aWMgc3RydWN0IHJjX2tleW1hcCBkbnR2X2xpdmVfZHZiX3RfbWFwID0gewotCS5tYXAgPSB7Ci0JCS5zY2FuICAgID0gZG50dl9saXZlX2R2Yl90LAotCQkuc2l6ZSAgICA9IEFSUkFZX1NJWkUoZG50dl9saXZlX2R2Yl90KSwKLQkJLmlyX3R5cGUgPSBJUl9UWVBFX1VOS05PV04sCS8qIExlZ2FjeSBJUiB0eXBlICovCi0JCS5uYW1lICAgID0gUkNfTUFQX0ROVFZfTElWRV9EVkJfVCwKLQl9Ci19OwotCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcF9kbnR2X2xpdmVfZHZiX3Qodm9pZCkKLXsKLQlyZXR1cm4gaXJfcmVnaXN0ZXJfbWFwKCZkbnR2X2xpdmVfZHZiX3RfbWFwKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGV4aXRfcmNfbWFwX2RudHZfbGl2ZV9kdmJfdCh2b2lkKQotewotCWlyX3VucmVnaXN0ZXJfbWFwKCZkbnR2X2xpdmVfZHZiX3RfbWFwKTsKLX0KLQotbW9kdWxlX2luaXQoaW5pdF9yY19tYXBfZG50dl9saXZlX2R2Yl90KQotbW9kdWxlX2V4aXQoZXhpdF9yY19tYXBfZG50dl9saXZlX2R2Yl90KQotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1kbnR2LWxpdmUtZHZidC1wcm8uYyBiL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1kbnR2LWxpdmUtZHZidC1wcm8uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmY0ZDYwNy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtZG50di1saXZlLWR2YnQtcHJvLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5NyArMCwwIEBACi0vKiBkbnR2LWxpdmUtZHZidC1wcm8uaCAtIEtleXRhYmxlIGZvciBkbnR2X2xpdmVfZHZidF9wcm8gUmVtb3RlIENvbnRyb2xsZXIKLSAqCi0gKiBrZXltYXAgaW1wb3J0ZWQgZnJvbSBpci1rZXltYXBzLmMKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgYnkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0jaW5jbHVkZSA8bWVkaWEvcmMtbWFwLmg+Ci0KLS8qIERpZ2l0YWxOb3cgRE5UViBMaXZlISBEVkItVCBQcm8gUmVtb3RlICovCi0KLXN0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgZG50dl9saXZlX2R2YnRfcHJvW10gPSB7Ci0JeyAweDE2LCBLRVlfUE9XRVIgfSwKLQl7IDB4NWIsIEtFWV9IT01FIH0sCi0KLQl7IDB4NTUsIEtFWV9UViB9LAkJLyogbGl2ZSB0diAqLwotCXsgMHg1OCwgS0VZX1RVTkVSIH0sCQkvKiBkaWdpdGFsIFJhZGlvICovCi0JeyAweDVhLCBLRVlfUkFESU8gfSwJCS8qIEZNIHJhZGlvICovCi0JeyAweDU5LCBLRVlfRFZEIH0sCQkvKiBkdmQgbWVudSAqLwotCXsgMHgwMywgS0VZXzEgfSwKLQl7IDB4MDEsIEtFWV8yIH0sCi0JeyAweDA2LCBLRVlfMyB9LAotCXsgMHgwOSwgS0VZXzQgfSwKLQl7IDB4MWQsIEtFWV81IH0sCi0JeyAweDFmLCBLRVlfNiB9LAotCXsgMHgwZCwgS0VZXzcgfSwKLQl7IDB4MTksIEtFWV84IH0sCi0JeyAweDFiLCBLRVlfOSB9LAotCXsgMHgwYywgS0VZX0NBTkNFTCB9LAotCXsgMHgxNSwgS0VZXzAgfSwKLQl7IDB4NGEsIEtFWV9DTEVBUiB9LAotCXsgMHgxMywgS0VZX0JBQ0sgfSwKLQl7IDB4MDAsIEtFWV9UQUIgfSwKLQl7IDB4NGIsIEtFWV9VUCB9LAotCXsgMHg0ZSwgS0VZX0xFRlQgfSwKLQl7IDB4NGYsIEtFWV9PSyB9LAotCXsgMHg1MiwgS0VZX1JJR0hUIH0sCi0JeyAweDUxLCBLRVlfRE9XTiB9LAotCXsgMHgxZSwgS0VZX1ZPTFVNRVVQIH0sCi0JeyAweDBhLCBLRVlfVk9MVU1FRE9XTiB9LAotCXsgMHgwMiwgS0VZX0NIQU5ORUxET1dOIH0sCi0JeyAweDA1LCBLRVlfQ0hBTk5FTFVQIH0sCi0JeyAweDExLCBLRVlfUkVDT1JEIH0sCi0JeyAweDE0LCBLRVlfUExBWSB9LAotCXsgMHg0YywgS0VZX1BBVVNFIH0sCi0JeyAweDFhLCBLRVlfU1RPUCB9LAotCXsgMHg0MCwgS0VZX1JFV0lORCB9LAotCXsgMHgxMiwgS0VZX0ZBU1RGT1JXQVJEIH0sCi0JeyAweDQxLCBLRVlfUFJFVklPVVNTT05HIH0sCS8qIHJlcGxheSB8PCAqLwotCXsgMHg0MiwgS0VZX05FWFRTT05HIH0sCQkvKiBza2lwID58ICovCi0JeyAweDU0LCBLRVlfQ0FNRVJBIH0sCQkvKiBjYXB0dXJlICovCi0JeyAweDUwLCBLRVlfTEFOR1VBR0UgfSwJCS8qIHNhcCAqLwotCXsgMHg0NywgS0VZX1RWMiB9LAkJLyogcGlwICovCi0JeyAweDRkLCBLRVlfU0NSRUVOIH0sCi0JeyAweDQzLCBLRVlfU1VCVElUTEUgfSwKLQl7IDB4MTAsIEtFWV9NVVRFIH0sCi0JeyAweDQ5LCBLRVlfQVVESU8gfSwJCS8qIGwvciAqLwotCXsgMHgwNywgS0VZX1NMRUVQIH0sCi0JeyAweDA4LCBLRVlfVklERU8gfSwJCS8qIGEvdiAqLwotCXsgMHgwZSwgS0VZX1BSRVZJT1VTIH0sCQkvKiByZWNhbGwgKi8KLQl7IDB4NDUsIEtFWV9aT09NIH0sCQkvKiB6b29tICsgKi8KLQl7IDB4NDYsIEtFWV9BTkdMRSB9LAkJLyogem9vbSAtICovCi0JeyAweDU2LCBLRVlfUkVEIH0sCi0JeyAweDU3LCBLRVlfR1JFRU4gfSwKLQl7IDB4NWMsIEtFWV9ZRUxMT1cgfSwKLQl7IDB4NWQsIEtFWV9CTFVFIH0sCi19OwotCi1zdGF0aWMgc3RydWN0IHJjX2tleW1hcCBkbnR2X2xpdmVfZHZidF9wcm9fbWFwID0gewotCS5tYXAgPSB7Ci0JCS5zY2FuICAgID0gZG50dl9saXZlX2R2YnRfcHJvLAotCQkuc2l6ZSAgICA9IEFSUkFZX1NJWkUoZG50dl9saXZlX2R2YnRfcHJvKSwKLQkJLmlyX3R5cGUgPSBJUl9UWVBFX1VOS05PV04sCS8qIExlZ2FjeSBJUiB0eXBlICovCi0JCS5uYW1lICAgID0gUkNfTUFQX0ROVFZfTElWRV9EVkJUX1BSTywKLQl9Ci19OwotCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcF9kbnR2X2xpdmVfZHZidF9wcm8odm9pZCkKLXsKLQlyZXR1cm4gaXJfcmVnaXN0ZXJfbWFwKCZkbnR2X2xpdmVfZHZidF9wcm9fbWFwKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGV4aXRfcmNfbWFwX2RudHZfbGl2ZV9kdmJ0X3Bybyh2b2lkKQotewotCWlyX3VucmVnaXN0ZXJfbWFwKCZkbnR2X2xpdmVfZHZidF9wcm9fbWFwKTsKLX0KLQotbW9kdWxlX2luaXQoaW5pdF9yY19tYXBfZG50dl9saXZlX2R2YnRfcHJvKQotbW9kdWxlX2V4aXQoZXhpdF9yY19tYXBfZG50dl9saXZlX2R2YnRfcHJvKQotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1lbS10ZXJyYXRlYy5jIGIvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLWVtLXRlcnJhdGVjLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxMzBjOWMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLWVtLXRlcnJhdGVjLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKiBlbS10ZXJyYXRlYy5oIC0gS2V5dGFibGUgZm9yIGVtX3RlcnJhdGVjIFJlbW90ZSBDb250cm9sbGVyCi0gKgotICoga2V5bWFwIGltcG9ydGVkIGZyb20gaXIta2V5bWFwcy5jCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDEwIGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2luY2x1ZGUgPG1lZGlhL3JjLW1hcC5oPgotCi1zdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGVtX3RlcnJhdGVjW10gPSB7Ci0JeyAweDAxLCBLRVlfQ0hBTk5FTCB9LAotCXsgMHgwMiwgS0VZX1NFTEVDVCB9LAotCXsgMHgwMywgS0VZX01VVEUgfSwKLQl7IDB4MDQsIEtFWV9QT1dFUiB9LAotCXsgMHgwNSwgS0VZXzEgfSwKLQl7IDB4MDYsIEtFWV8yIH0sCi0JeyAweDA3LCBLRVlfMyB9LAotCXsgMHgwOCwgS0VZX0NIQU5ORUxVUCB9LAotCXsgMHgwOSwgS0VZXzQgfSwKLQl7IDB4MGEsIEtFWV81IH0sCi0JeyAweDBiLCBLRVlfNiB9LAotCXsgMHgwYywgS0VZX0NIQU5ORUxET1dOIH0sCi0JeyAweDBkLCBLRVlfNyB9LAotCXsgMHgwZSwgS0VZXzggfSwKLQl7IDB4MGYsIEtFWV85IH0sCi0JeyAweDEwLCBLRVlfVk9MVU1FVVAgfSwKLQl7IDB4MTEsIEtFWV8wIH0sCi0JeyAweDEyLCBLRVlfTUVOVSB9LAotCXsgMHgxMywgS0VZX1BSSU5UIH0sCi0JeyAweDE0LCBLRVlfVk9MVU1FRE9XTiB9LAotCXsgMHgxNiwgS0VZX1BBVVNFIH0sCi0JeyAweDE4LCBLRVlfUkVDT1JEIH0sCi0JeyAweDE5LCBLRVlfUkVXSU5EIH0sCi0JeyAweDFhLCBLRVlfUExBWSB9LAotCXsgMHgxYiwgS0VZX0ZPUldBUkQgfSwKLQl7IDB4MWMsIEtFWV9CQUNLU1BBQ0UgfSwKLQl7IDB4MWUsIEtFWV9TVE9QIH0sCi0JeyAweDQwLCBLRVlfWk9PTSB9LAotfTsKLQotc3RhdGljIHN0cnVjdCByY19rZXltYXAgZW1fdGVycmF0ZWNfbWFwID0gewotCS5tYXAgPSB7Ci0JCS5zY2FuICAgID0gZW1fdGVycmF0ZWMsCi0JCS5zaXplICAgID0gQVJSQVlfU0laRShlbV90ZXJyYXRlYyksCi0JCS5pcl90eXBlID0gSVJfVFlQRV9VTktOT1dOLAkvKiBMZWdhY3kgSVIgdHlwZSAqLwotCQkubmFtZSAgICA9IFJDX01BUF9FTV9URVJSQVRFQywKLQl9Ci19OwotCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcF9lbV90ZXJyYXRlYyh2b2lkKQotewotCXJldHVybiBpcl9yZWdpc3Rlcl9tYXAoJmVtX3RlcnJhdGVjX21hcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3JjX21hcF9lbV90ZXJyYXRlYyh2b2lkKQotewotCWlyX3VucmVnaXN0ZXJfbWFwKCZlbV90ZXJyYXRlY19tYXApOwotfQotCi1tb2R1bGVfaW5pdChpbml0X3JjX21hcF9lbV90ZXJyYXRlYykKLW1vZHVsZV9leGl0KGV4aXRfcmNfbWFwX2VtX3RlcnJhdGVjKQotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1lbmNvcmUtZW5sdHYtZm01My5jIGIvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLWVuY29yZS1lbmx0di1mbTUzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiODE2OTYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLWVuY29yZS1lbmx0di1mbTUzLmMKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi0vKiBlbmNvcmUtZW5sdHYtZm01My5oIC0gS2V5dGFibGUgZm9yIGVuY29yZV9lbmx0dl9mbTUzIFJlbW90ZSBDb250cm9sbGVyCi0gKgotICoga2V5bWFwIGltcG9ydGVkIGZyb20gaXIta2V5bWFwcy5jCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDEwIGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2luY2x1ZGUgPG1lZGlhL3JjLW1hcC5oPgotCi0vKiBFbmNvcmUgRU5MVFYtRk0gdjUuMwotICAgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQGluZnJhZGVhZC5vcmc+Ci0gKi8KLQotc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBlbmNvcmVfZW5sdHZfZm01M1tdID0gewotCXsgMHgxMCwgS0VZX1BPV0VSMn0sCi0JeyAweDA2LCBLRVlfTVVURX0sCi0KLQl7IDB4MDksIEtFWV8xfSwKLQl7IDB4MWQsIEtFWV8yfSwKLQl7IDB4MWYsIEtFWV8zfSwKLQl7IDB4MTksIEtFWV80fSwKLQl7IDB4MWIsIEtFWV81fSwKLQl7IDB4MTEsIEtFWV82fSwKLQl7IDB4MTcsIEtFWV83fSwKLQl7IDB4MTIsIEtFWV84fSwKLQl7IDB4MTYsIEtFWV85fSwKLQl7IDB4NDgsIEtFWV8wfSwKLQotCXsgMHgwNCwgS0VZX0xJU1R9LAkJLyogLS8tLSAqLwotCXsgMHg0MCwgS0VZX0xBU1R9LAkJLyogcmVjYWxsICovCi0KLQl7IDB4MDIsIEtFWV9NT0RFfSwJCS8qIFRWL0FWICovCi0JeyAweDA1LCBLRVlfQ0FNRVJBfSwJCS8qIFNOQVBTSE9UICovCi0KLQl7IDB4NGMsIEtFWV9DSEFOTkVMVVB9LAkJLyogVVAgKi8KLQl7IDB4MDAsIEtFWV9DSEFOTkVMRE9XTn0sCS8qIERPV04gKi8KLQl7IDB4MGQsIEtFWV9WT0xVTUVVUH0sCQkvKiBSSUdIVCAqLwotCXsgMHgxNSwgS0VZX1ZPTFVNRURPV059LAkvKiBMRUZUICovCi0JeyAweDQ5LCBLRVlfRU5URVJ9LAkJLyogT0sgKi8KLQotCXsgMHg1NCwgS0VZX1JFQ09SRH0sCi0JeyAweDRkLCBLRVlfUExBWX0sCQkvKiBwYXVzZSAqLwotCi0JeyAweDFlLCBLRVlfTUVOVX0sCQkvKiB2aWRlbyBzZXR0aW5nICovCi0JeyAweDBlLCBLRVlfUklHSFR9LAkJLyogPC0gKi8KLQl7IDB4MWEsIEtFWV9MRUZUfSwJCS8qIC0+ICovCi0KLQl7IDB4MGEsIEtFWV9DTEVBUn0sCQkvKiB2aWRlbyBkZWZhdWx0ICovCi0JeyAweDBjLCBLRVlfWk9PTX0sCQkvKiBoaWRlIHBhbm5lbCAqLwotCXsgMHg0NywgS0VZX1NMRUVQfSwJCS8qIHNodXRkb3duICovCi19OwotCi1zdGF0aWMgc3RydWN0IHJjX2tleW1hcCBlbmNvcmVfZW5sdHZfZm01M19tYXAgPSB7Ci0JLm1hcCA9IHsKLQkJLnNjYW4gICAgPSBlbmNvcmVfZW5sdHZfZm01MywKLQkJLnNpemUgICAgPSBBUlJBWV9TSVpFKGVuY29yZV9lbmx0dl9mbTUzKSwKLQkJLmlyX3R5cGUgPSBJUl9UWVBFX1VOS05PV04sCS8qIExlZ2FjeSBJUiB0eXBlICovCi0JCS5uYW1lICAgID0gUkNfTUFQX0VOQ09SRV9FTkxUVl9GTTUzLAotCX0KLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGluaXRfcmNfbWFwX2VuY29yZV9lbmx0dl9mbTUzKHZvaWQpCi17Ci0JcmV0dXJuIGlyX3JlZ2lzdGVyX21hcCgmZW5jb3JlX2VubHR2X2ZtNTNfbWFwKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGV4aXRfcmNfbWFwX2VuY29yZV9lbmx0dl9mbTUzKHZvaWQpCi17Ci0JaXJfdW5yZWdpc3Rlcl9tYXAoJmVuY29yZV9lbmx0dl9mbTUzX21hcCk7Ci19Ci0KLW1vZHVsZV9pbml0KGluaXRfcmNfbWFwX2VuY29yZV9lbmx0dl9mbTUzKQotbW9kdWxlX2V4aXQoZXhpdF9yY19tYXBfZW5jb3JlX2VubHR2X2ZtNTMpCi0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IoIk1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLWVuY29yZS1lbmx0di5jIGIvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLWVuY29yZS1lbmx0di5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZmFiZmZkLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1lbmNvcmUtZW5sdHYuYworKysgL2Rldi9udWxsCkBAIC0xLDExMiArMCwwIEBACi0vKiBlbmNvcmUtZW5sdHYuaCAtIEtleXRhYmxlIGZvciBlbmNvcmVfZW5sdHYgUmVtb3RlIENvbnRyb2xsZXIKLSAqCi0gKiBrZXltYXAgaW1wb3J0ZWQgZnJvbSBpci1rZXltYXBzLmMKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgYnkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0jaW5jbHVkZSA8bWVkaWEvcmMtbWFwLmg+Ci0KLS8qIEVuY29yZSBFTkxUVi1GTSAgLSBibGFjayBwbGFzdGljLCB3aGl0ZSBmcm9udCBjb3ZlciB3aXRoIHdoaXRlIGdsb3dpbmcgYnV0dG9ucwotICAgIEp1YW4gUGFibG8gU29ybWFuaSA8c29ybWFuQGdtYWlsLmNvbT4gKi8KLQotc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBlbmNvcmVfZW5sdHZbXSA9IHsKLQotCS8qIFBvd2VyIGJ1dHRvbiBkb2VzIG5vdGhpbmcsIG5laXRoZXIgaW4gV2luZG93cyBhcHAsCi0JIGFsdGhvdWdoIGl0IHNlbmRzIGRhdGEgKHVzZWQgZm9yIEJJT1Mgd2FrZXVwPykgKi8KLQl7IDB4MGQsIEtFWV9NVVRFIH0sCi0KLQl7IDB4MWUsIEtFWV9UViB9LAotCXsgMHgwMCwgS0VZX1ZJREVPIH0sCi0JeyAweDAxLCBLRVlfQVVESU8gfSwJCS8qIG11c2ljICovCi0JeyAweDAyLCBLRVlfTUhQIH0sCQkvKiBwaWN0dXJlICovCi0KLQl7IDB4MWYsIEtFWV8xIH0sCi0JeyAweDAzLCBLRVlfMiB9LAotCXsgMHgwNCwgS0VZXzMgfSwKLQl7IDB4MDUsIEtFWV80IH0sCi0JeyAweDFjLCBLRVlfNSB9LAotCXsgMHgwNiwgS0VZXzYgfSwKLQl7IDB4MDcsIEtFWV83IH0sCi0JeyAweDA4LCBLRVlfOCB9LAotCXsgMHgxZCwgS0VZXzkgfSwKLQl7IDB4MGEsIEtFWV8wIH0sCi0KLQl7IDB4MDksIEtFWV9MSVNUIH0sCQkvKiAtLy0tICovCi0JeyAweDBiLCBLRVlfTEFTVCB9LAkJLyogcmVjYWxsICovCi0KLQl7IDB4MTQsIEtFWV9IT01FIH0sCQkvKiB3aW4gc3RhcnQgbWVudSAqLwotCXsgMHgxNSwgS0VZX0VYSVQgfSwJCS8qIGV4aXQgKi8KLQl7IDB4MTYsIEtFWV9DSEFOTkVMVVAgfSwJLyogVVAgKi8KLQl7IDB4MTIsIEtFWV9DSEFOTkVMRE9XTiB9LAkvKiBET1dOICovCi0JeyAweDBjLCBLRVlfVk9MVU1FVVAgfSwJCS8qIFJJR0hUICovCi0JeyAweDE3LCBLRVlfVk9MVU1FRE9XTiB9LAkvKiBMRUZUICovCi0KLQl7IDB4MTgsIEtFWV9FTlRFUiB9LAkJLyogT0sgKi8KLQotCXsgMHgwZSwgS0VZX0VTQyB9LAotCXsgMHgxMywgS0VZX0NZQ0xFV0lORE9XUyB9LAkvKiBkZXNrdG9wICovCi0JeyAweDExLCBLRVlfVEFCIH0sCi0JeyAweDE5LCBLRVlfU1dJVENIVklERU9NT0RFIH0sCS8qIHN3aXRjaCAqLwotCi0JeyAweDFhLCBLRVlfTUVOVSB9LAotCXsgMHgxYiwgS0VZX1pPT00gfSwJCS8qIGZ1bGxzY3JlZW4gKi8KLQl7IDB4NDQsIEtFWV9USU1FIH0sCQkvKiB0aW1lIHNoaWZ0ICovCi0JeyAweDQwLCBLRVlfTU9ERSB9LAkJLyogc291cmNlICovCi0KLQl7IDB4NWEsIEtFWV9SRUNPUkQgfSwKLQl7IDB4NDIsIEtFWV9QTEFZIH0sCQkvKiBwbGF5L3BhdXNlICovCi0JeyAweDQ1LCBLRVlfU1RPUCB9LAotCXsgMHg0MywgS0VZX0NBTUVSQSB9LAkJLyogY2FtZXJhIGljb24gKi8KLQotCXsgMHg0OCwgS0VZX1JFV0lORCB9LAotCXsgMHg0YSwgS0VZX0ZBU1RGT1JXQVJEIH0sCi0JeyAweDQ5LCBLRVlfUFJFVklPVVMgfSwKLQl7IDB4NGIsIEtFWV9ORVhUIH0sCi0KLQl7IDB4NGMsIEtFWV9GQVZPUklURVMgfSwJLyogdHYgd2FsbCAqLwotCXsgMHg0ZCwgS0VZX1NPVU5EIH0sCQkvKiBEVkQgc291bmQgKi8KLQl7IDB4NGUsIEtFWV9MQU5HVUFHRSB9LAkJLyogRFZEIGxhbmcgKi8KLQl7IDB4NGYsIEtFWV9URVhUIH0sCQkvKiBEVkQgdGV4dCAqLwotCi0JeyAweDUwLCBLRVlfU0xFRVAgfSwJCS8qIHNodXRkb3duICovCi0JeyAweDUxLCBLRVlfTU9ERSB9LAkJLyogc3RlcmVvID4gbWFpbiAqLwotCXsgMHg1MiwgS0VZX1NFTEVDVCB9LAkJLyogc3RlcmVvID4gc2FwICovCi0JeyAweDUzLCBLRVlfUFJPRzEgfSwJCS8qIHRlbGV0ZXh0ICovCi0KLQotCXsgMHg1OSwgS0VZX1JFRCB9LAkJLyogQVAxICovCi0JeyAweDQxLCBLRVlfR1JFRU4gfSwJCS8qIEFQMiAqLwotCXsgMHg0NywgS0VZX1lFTExPVyB9LAkJLyogQVAzICovCi0JeyAweDU3LCBLRVlfQkxVRSB9LAkJLyogQVA0ICovCi19OwotCi1zdGF0aWMgc3RydWN0IHJjX2tleW1hcCBlbmNvcmVfZW5sdHZfbWFwID0gewotCS5tYXAgPSB7Ci0JCS5zY2FuICAgID0gZW5jb3JlX2VubHR2LAotCQkuc2l6ZSAgICA9IEFSUkFZX1NJWkUoZW5jb3JlX2VubHR2KSwKLQkJLmlyX3R5cGUgPSBJUl9UWVBFX1VOS05PV04sCS8qIExlZ2FjeSBJUiB0eXBlICovCi0JCS5uYW1lICAgID0gUkNfTUFQX0VOQ09SRV9FTkxUViwKLQl9Ci19OwotCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcF9lbmNvcmVfZW5sdHYodm9pZCkKLXsKLQlyZXR1cm4gaXJfcmVnaXN0ZXJfbWFwKCZlbmNvcmVfZW5sdHZfbWFwKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGV4aXRfcmNfbWFwX2VuY29yZV9lbmx0dih2b2lkKQotewotCWlyX3VucmVnaXN0ZXJfbWFwKCZlbmNvcmVfZW5sdHZfbWFwKTsKLX0KLQotbW9kdWxlX2luaXQoaW5pdF9yY19tYXBfZW5jb3JlX2VubHR2KQotbW9kdWxlX2V4aXQoZXhpdF9yY19tYXBfZW5jb3JlX2VubHR2KQotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1lbmNvcmUtZW5sdHYyLmMgYi9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtZW5jb3JlLWVubHR2Mi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZmVmZDUxLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1lbmNvcmUtZW5sdHYyLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5MCArMCwwIEBACi0vKiBlbmNvcmUtZW5sdHYyLmggLSBLZXl0YWJsZSBmb3IgZW5jb3JlX2VubHR2MiBSZW1vdGUgQ29udHJvbGxlcgotICoKLSAqIGtleW1hcCBpbXBvcnRlZCBmcm9tIGlyLWtleW1hcHMuYwotICoKLSAqIENvcHlyaWdodCAoYykgMjAxMCBieSBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLSNpbmNsdWRlIDxtZWRpYS9yYy1tYXAuaD4KLQotLyogRW5jb3JlIEVOTFRWMi1GTSAgLSBzaWx2ZXIgcGxhc3RpYyAtICJXYW5kIE1lZGlhIiB3cml0dGVuIGF0IHRoZSBib3R0b24KLSAgICBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAaW5mcmFkZWFkLm9yZz4gKi8KLQotc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBlbmNvcmVfZW5sdHYyW10gPSB7Ci0JeyAweDRjLCBLRVlfUE9XRVIyIH0sCi0JeyAweDRhLCBLRVlfVFVORVIgfSwKLQl7IDB4NDAsIEtFWV8xIH0sCi0JeyAweDYwLCBLRVlfMiB9LAotCXsgMHg1MCwgS0VZXzMgfSwKLQl7IDB4NzAsIEtFWV80IH0sCi0JeyAweDQ4LCBLRVlfNSB9LAotCXsgMHg2OCwgS0VZXzYgfSwKLQl7IDB4NTgsIEtFWV83IH0sCi0JeyAweDc4LCBLRVlfOCB9LAotCXsgMHg0NCwgS0VZXzkgfSwKLQl7IDB4NTQsIEtFWV8wIH0sCi0KLQl7IDB4NjQsIEtFWV9MQVNUIH0sCQkvKiArMTAwICovCi0JeyAweDRlLCBLRVlfQUdBSU4gfSwJCS8qIFJlY2FsbCAqLwotCi0JeyAweDZjLCBLRVlfU1dJVENIVklERU9NT0RFIH0sCS8qIFZpZGVvIFNvdXJjZSAqLwotCXsgMHg1ZSwgS0VZX01FTlUgfSwKLQl7IDB4NTYsIEtFWV9TQ1JFRU4gfSwKLQl7IDB4N2EsIEtFWV9TRVRVUCB9LAotCi0JeyAweDQ2LCBLRVlfTVVURSB9LAotCXsgMHg1YywgS0VZX01PREUgfSwJCS8qIFN0ZXJlbyAqLwotCXsgMHg3NCwgS0VZX0lORk8gfSwKLQl7IDB4N2MsIEtFWV9DTEVBUiB9LAotCi0JeyAweDU1LCBLRVlfVVAgfSwKLQl7IDB4NDksIEtFWV9ET1dOIH0sCi0JeyAweDdlLCBLRVlfTEVGVCB9LAotCXsgMHg1OSwgS0VZX1JJR0hUIH0sCi0JeyAweDZhLCBLRVlfRU5URVIgfSwKLQotCXsgMHg0MiwgS0VZX1ZPTFVNRVVQIH0sCi0JeyAweDYyLCBLRVlfVk9MVU1FRE9XTiB9LAotCXsgMHg1MiwgS0VZX0NIQU5ORUxVUCB9LAotCXsgMHg3MiwgS0VZX0NIQU5ORUxET1dOIH0sCi0KLQl7IDB4NDEsIEtFWV9SRUNPUkQgfSwKLQl7IDB4NTEsIEtFWV9DQU1FUkEgfSwJCS8qIFNuYXBzaG90ICovCi0JeyAweDc1LCBLRVlfVElNRSB9LAkJLyogVGltZXNoaWZ0ICovCi0JeyAweDcxLCBLRVlfVFYyIH0sCQkvKiBQSVAgKi8KLQotCXsgMHg0NSwgS0VZX1JFV0lORCB9LAotCXsgMHg2ZiwgS0VZX1BBVVNFIH0sCi0JeyAweDdkLCBLRVlfRk9SV0FSRCB9LAotCXsgMHg3OSwgS0VZX1NUT1AgfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmNfa2V5bWFwIGVuY29yZV9lbmx0djJfbWFwID0gewotCS5tYXAgPSB7Ci0JCS5zY2FuICAgID0gZW5jb3JlX2VubHR2MiwKLQkJLnNpemUgICAgPSBBUlJBWV9TSVpFKGVuY29yZV9lbmx0djIpLAotCQkuaXJfdHlwZSA9IElSX1RZUEVfVU5LTk9XTiwJLyogTGVnYWN5IElSIHR5cGUgKi8KLQkJLm5hbWUgICAgPSBSQ19NQVBfRU5DT1JFX0VOTFRWMiwKLQl9Ci19OwotCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcF9lbmNvcmVfZW5sdHYyKHZvaWQpCi17Ci0JcmV0dXJuIGlyX3JlZ2lzdGVyX21hcCgmZW5jb3JlX2VubHR2Ml9tYXApOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yY19tYXBfZW5jb3JlX2VubHR2Mih2b2lkKQotewotCWlyX3VucmVnaXN0ZXJfbWFwKCZlbmNvcmVfZW5sdHYyX21hcCk7Ci19Ci0KLW1vZHVsZV9pbml0KGluaXRfcmNfbWFwX2VuY29yZV9lbmx0djIpCi1tb2R1bGVfZXhpdChleGl0X3JjX21hcF9lbmNvcmVfZW5sdHYyKQotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1ldmdhLWluZHR1YmUuYyBiL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1ldmdhLWluZHR1YmUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2YzZmIxMy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtZXZnYS1pbmR0dWJlLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi0vKiBldmdhLWluZHR1YmUuaCAtIEtleXRhYmxlIGZvciBldmdhX2luZHR1YmUgUmVtb3RlIENvbnRyb2xsZXIKLSAqCi0gKiBrZXltYXAgaW1wb3J0ZWQgZnJvbSBpci1rZXltYXBzLmMKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgYnkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0jaW5jbHVkZSA8bWVkaWEvcmMtbWFwLmg+Ci0KLS8qIEVWR0EgaW5EdHViZQotICAgRGV2aW4gSGVpdG11ZWxsZXIgPGRldmluLmhlaXRtdWVsbGVyQGdtYWlsLmNvbT4KLSAqLwotCi1zdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGV2Z2FfaW5kdHViZVtdID0gewotCXsgMHgxMiwgS0VZX1BPV0VSfSwKLQl7IDB4MDIsIEtFWV9NT0RFfSwJLyogVFYgKi8KLQl7IDB4MTQsIEtFWV9NVVRFfSwKLQl7IDB4MWEsIEtFWV9DSEFOTkVMVVB9LAotCXsgMHgxNiwgS0VZX1RWMn0sCS8qIFBJUCAqLwotCXsgMHgxZCwgS0VZX1ZPTFVNRVVQfSwKLQl7IDB4MDUsIEtFWV9DSEFOTkVMRE9XTn0sCi0JeyAweDBmLCBLRVlfUExBWVBBVVNFfSwKLQl7IDB4MTksIEtFWV9WT0xVTUVET1dOfSwKLQl7IDB4MWMsIEtFWV9SRVdJTkR9LAotCXsgMHgwZCwgS0VZX1JFQ09SRH0sCi0JeyAweDE4LCBLRVlfRk9SV0FSRH0sCi0JeyAweDFlLCBLRVlfUFJFVklPVVN9LAotCXsgMHgxYiwgS0VZX1NUT1B9LAotCXsgMHgxZiwgS0VZX05FWFR9LAotCXsgMHgxMywgS0VZX0NBTUVSQX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHJjX2tleW1hcCBldmdhX2luZHR1YmVfbWFwID0gewotCS5tYXAgPSB7Ci0JCS5zY2FuICAgID0gZXZnYV9pbmR0dWJlLAotCQkuc2l6ZSAgICA9IEFSUkFZX1NJWkUoZXZnYV9pbmR0dWJlKSwKLQkJLmlyX3R5cGUgPSBJUl9UWVBFX1VOS05PV04sCS8qIExlZ2FjeSBJUiB0eXBlICovCi0JCS5uYW1lICAgID0gUkNfTUFQX0VWR0FfSU5EVFVCRSwKLQl9Ci19OwotCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcF9ldmdhX2luZHR1YmUodm9pZCkKLXsKLQlyZXR1cm4gaXJfcmVnaXN0ZXJfbWFwKCZldmdhX2luZHR1YmVfbWFwKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGV4aXRfcmNfbWFwX2V2Z2FfaW5kdHViZSh2b2lkKQotewotCWlyX3VucmVnaXN0ZXJfbWFwKCZldmdhX2luZHR1YmVfbWFwKTsKLX0KLQotbW9kdWxlX2luaXQoaW5pdF9yY19tYXBfZXZnYV9pbmR0dWJlKQotbW9kdWxlX2V4aXQoZXhpdF9yY19tYXBfZXZnYV9pbmR0dWJlKQotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1lenR2LmMgYi9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtZXp0di5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NjA5MDdhLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1lenR2LmMKKysrIC9kZXYvbnVsbApAQCAtMSw5NiArMCwwIEBACi0vKiBlenR2LmggLSBLZXl0YWJsZSBmb3IgZXp0diBSZW1vdGUgQ29udHJvbGxlcgotICoKLSAqIGtleW1hcCBpbXBvcnRlZCBmcm9tIGlyLWtleW1hcHMuYwotICoKLSAqIENvcHlyaWdodCAoYykgMjAxMCBieSBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLSNpbmNsdWRlIDxtZWRpYS9yYy1tYXAuaD4KLQotLyogQWxmb25zIEdlc2VyIDxhLmdlc2VyQGNveC5uZXQ+Ci0gKiB1cGRhdGVzIGZyb20gSm9iIEQuIFIuIEJvcmdlcyA8am9iZHJiQGlnLmNvbS5icj4gKi8KLQotc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBlenR2W10gPSB7Ci0JeyAweDEyLCBLRVlfUE9XRVIgfSwKLQl7IDB4MDEsIEtFWV9UViB9LAkvKiBEVlIgKi8KLQl7IDB4MTUsIEtFWV9EVkQgfSwJLyogRFZEICovCi0JeyAweDE3LCBLRVlfQVVESU8gfSwJLyogbXVzaWMgKi8KLQkJCQkvKiBEVlIgbW9kZSAvIERWRCBtb2RlIC8gbXVzaWMgbW9kZSAqLwotCi0JeyAweDFiLCBLRVlfTVVURSB9LAkvKiBtdXRlICovCi0JeyAweDAyLCBLRVlfTEFOR1VBR0UgfSwJLyogTVRTL1NBUCAvIGF1ZGlvIC8gYXV0b3NlZWsgKi8KLQl7IDB4MWUsIEtFWV9TVUJUSVRMRSB9LAkvKiBjbG9zZWQgY2FwdGlvbmluZyAvIHN1YnRpdGxlIC8gc2VlayAqLwotCXsgMHgxNiwgS0VZX1pPT00gfSwJLyogZnVsbCBzY3JlZW4gKi8KLQl7IDB4MWMsIEtFWV9WSURFTyB9LAkvKiB2aWRlbyBzb3VyY2UgLyBlamVjdCAvIGRlbGFsbCAqLwotCXsgMHgxZCwgS0VZX1JFU1RBUlQgfSwJLyogcGxheWJhY2sgLyBhbmdsZSAvIGRlbCAqLwotCXsgMHgyZiwgS0VZX1NFQVJDSCB9LAkvKiBzY2FuIC8gbWVudSAvIHBsYXlsaXN0ICovCi0JeyAweDMwLCBLRVlfQ0hBTk5FTCB9LAkvKiBDSCBzdXJmaW5nIC8gYm9va21hcmsgLyBtZW1vICovCi0KLQl7IDB4MzEsIEtFWV9IRUxQIH0sCS8qIGhlbHAgKi8KLQl7IDB4MzIsIEtFWV9NT0RFIH0sCS8qIG51bS9tZW1vICovCi0JeyAweDMzLCBLRVlfRVNDIH0sCS8qIGNhbmNlbCAqLwotCi0JeyAweDBjLCBLRVlfVVAgfSwJLyogdXAgKi8KLQl7IDB4MTAsIEtFWV9ET1dOIH0sCS8qIGRvd24gKi8KLQl7IDB4MDgsIEtFWV9MRUZUIH0sCS8qIGxlZnQgKi8KLQl7IDB4MDQsIEtFWV9SSUdIVCB9LAkvKiByaWdodCAqLwotCXsgMHgwMywgS0VZX1NFTEVDVCB9LAkvKiBzZWxlY3QgKi8KLQotCXsgMHgxZiwgS0VZX1JFV0lORCB9LAkvKiByZXdpbmQgKi8KLQl7IDB4MjAsIEtFWV9QTEFZUEFVU0UgfSwvKiBwbGF5L3BhdXNlICovCi0JeyAweDI5LCBLRVlfRk9SV0FSRCB9LAkvKiBmb3J3YXJkICovCi0JeyAweDE0LCBLRVlfQUdBSU4gfSwJLyogcmVwZWF0ICovCi0JeyAweDJiLCBLRVlfUkVDT1JEIH0sCS8qIHJlY29yZGluZyAqLwotCXsgMHgyYywgS0VZX1NUT1AgfSwJLyogc3RvcCAqLwotCXsgMHgyZCwgS0VZX1BMQVkgfSwJLyogcGxheSAqLwotCXsgMHgyZSwgS0VZX0NBTUVSQSB9LAkvKiBzbmFwc2hvdCAvIHNodWZmbGUgKi8KLQotCXsgMHgwMCwgS0VZXzAgfSwKLQl7IDB4MDUsIEtFWV8xIH0sCi0JeyAweDA2LCBLRVlfMiB9LAotCXsgMHgwNywgS0VZXzMgfSwKLQl7IDB4MDksIEtFWV80IH0sCi0JeyAweDBhLCBLRVlfNSB9LAotCXsgMHgwYiwgS0VZXzYgfSwKLQl7IDB4MGQsIEtFWV83IH0sCi0JeyAweDBlLCBLRVlfOCB9LAotCXsgMHgwZiwgS0VZXzkgfSwKLQotCXsgMHgyYSwgS0VZX1ZPTFVNRVVQIH0sCi0JeyAweDExLCBLRVlfVk9MVU1FRE9XTiB9LAotCXsgMHgxOCwgS0VZX0NIQU5ORUxVUCB9LC8qIENILnRyYWNraW5nIHVwICovCi0JeyAweDE5LCBLRVlfQ0hBTk5FTERPV04gfSwvKiBDSC50cmFja2luZyBkb3duICovCi0KLQl7IDB4MTMsIEtFWV9FTlRFUiB9LAkvKiBlbnRlciAqLwotCXsgMHgyMSwgS0VZX0RPVCB9LAkvKiAuIChkZWNpbWFsIGRvdCkgKi8KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmNfa2V5bWFwIGV6dHZfbWFwID0gewotCS5tYXAgPSB7Ci0JCS5zY2FuICAgID0gZXp0diwKLQkJLnNpemUgICAgPSBBUlJBWV9TSVpFKGV6dHYpLAotCQkuaXJfdHlwZSA9IElSX1RZUEVfVU5LTk9XTiwJLyogTGVnYWN5IElSIHR5cGUgKi8KLQkJLm5hbWUgICAgPSBSQ19NQVBfRVpUViwKLQl9Ci19OwotCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcF9lenR2KHZvaWQpCi17Ci0JcmV0dXJuIGlyX3JlZ2lzdGVyX21hcCgmZXp0dl9tYXApOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yY19tYXBfZXp0dih2b2lkKQotewotCWlyX3VucmVnaXN0ZXJfbWFwKCZlenR2X21hcCk7Ci19Ci0KLW1vZHVsZV9pbml0KGluaXRfcmNfbWFwX2V6dHYpCi1tb2R1bGVfZXhpdChleGl0X3JjX21hcF9lenR2KQotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1mbHlkdmIuYyBiL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1mbHlkdmIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTE3M2M4MS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtZmx5ZHZiLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi0vKiBmbHlkdmIuaCAtIEtleXRhYmxlIGZvciBmbHlkdmIgUmVtb3RlIENvbnRyb2xsZXIKLSAqCi0gKiBrZXltYXAgaW1wb3J0ZWQgZnJvbSBpci1rZXltYXBzLmMKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgYnkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0jaW5jbHVkZSA8bWVkaWEvcmMtbWFwLmg+Ci0KLXN0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgZmx5ZHZiW10gPSB7Ci0JeyAweDAxLCBLRVlfWk9PTSB9LAkJLyogRnVsbCBTY3JlZW4gKi8KLQl7IDB4MDAsIEtFWV9QT1dFUiB9LAkJLyogUG93ZXIgKi8KLQotCXsgMHgwMywgS0VZXzEgfSwKLQl7IDB4MDQsIEtFWV8yIH0sCi0JeyAweDA1LCBLRVlfMyB9LAotCXsgMHgwNywgS0VZXzQgfSwKLQl7IDB4MDgsIEtFWV81IH0sCi0JeyAweDA5LCBLRVlfNiB9LAotCXsgMHgwYiwgS0VZXzcgfSwKLQl7IDB4MGMsIEtFWV84IH0sCi0JeyAweDBkLCBLRVlfOSB9LAotCXsgMHgwNiwgS0VZX0FHQUlOIH0sCQkvKiBSZWNhbGwgKi8KLQl7IDB4MGYsIEtFWV8wIH0sCi0JeyAweDEwLCBLRVlfTVVURSB9LAkJLyogTXV0ZSAqLwotCXsgMHgwMiwgS0VZX1JBRElPIH0sCQkvKiBUVi9SYWRpbyAqLwotCXsgMHgxYiwgS0VZX0xBTkdVQUdFIH0sCQkvKiBTQVAgKFNlY29uZCBBdWRpbyBQcm9ncmFtKSAqLwotCi0JeyAweDE0LCBLRVlfVk9MVU1FVVAgfSwJCS8qIFZPTCsgKi8KLQl7IDB4MTcsIEtFWV9WT0xVTUVET1dOIH0sCS8qIFZPTC0gKi8KLQl7IDB4MTIsIEtFWV9DSEFOTkVMVVAgfSwJLyogQ0grICovCi0JeyAweDEzLCBLRVlfQ0hBTk5FTERPV04gfSwJLyogQ0gtICovCi0JeyAweDFkLCBLRVlfRU5URVIgfSwJCS8qIEVudGVyICovCi0KLQl7IDB4MWEsIEtFWV9NT0RFIH0sCQkvKiBQSVAgKi8KLQl7IDB4MTgsIEtFWV9UVU5FUiB9LAkJLyogU291cmNlICovCi0KLQl7IDB4MWUsIEtFWV9SRUNPUkQgfSwJCS8qIFJlY29yZC9QYXVzZSAqLwotCXsgMHgxNSwgS0VZX0FOR0xFIH0sCQkvKiBTd2FwIChubyBsYWJlbCBvbiBrZXkpICovCi0JeyAweDFjLCBLRVlfUEFVU0UgfSwJCS8qIFRpbWVzaGlmdC9QYXVzZSAqLwotCXsgMHgxOSwgS0VZX0JBQ0sgfSwJCS8qIFJld2luZCA8PCAqLwotCXsgMHgwYSwgS0VZX1BMQVlQQVVTRSB9LAkvKiBQbGF5L1BhdXNlICovCi0JeyAweDFmLCBLRVlfRk9SV0FSRCB9LAkJLyogRm9yd2FyZCA+PiAqLwotCXsgMHgxNiwgS0VZX1BSRVZJT1VTIH0sCQkvKiBCYWNrIHw8PCAqLwotCXsgMHgxMSwgS0VZX1NUT1AgfSwJCS8qIFN0b3AgKi8KLQl7IDB4MGUsIEtFWV9ORVhUIH0sCQkvKiBFbmQgPj58ICovCi19OwotCi1zdGF0aWMgc3RydWN0IHJjX2tleW1hcCBmbHlkdmJfbWFwID0gewotCS5tYXAgPSB7Ci0JCS5zY2FuICAgID0gZmx5ZHZiLAotCQkuc2l6ZSAgICA9IEFSUkFZX1NJWkUoZmx5ZHZiKSwKLQkJLmlyX3R5cGUgPSBJUl9UWVBFX1VOS05PV04sCS8qIExlZ2FjeSBJUiB0eXBlICovCi0JCS5uYW1lICAgID0gUkNfTUFQX0ZMWURWQiwKLQl9Ci19OwotCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcF9mbHlkdmIodm9pZCkKLXsKLQlyZXR1cm4gaXJfcmVnaXN0ZXJfbWFwKCZmbHlkdmJfbWFwKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGV4aXRfcmNfbWFwX2ZseWR2Yih2b2lkKQotewotCWlyX3VucmVnaXN0ZXJfbWFwKCZmbHlkdmJfbWFwKTsKLX0KLQotbW9kdWxlX2luaXQoaW5pdF9yY19tYXBfZmx5ZHZiKQotbW9kdWxlX2V4aXQoZXhpdF9yY19tYXBfZmx5ZHZiKQotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1mbHl2aWRlby5jIGIvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLWZseXZpZGVvLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljNzMwNDMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLWZseXZpZGVvLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vKiBmbHl2aWRlby5oIC0gS2V5dGFibGUgZm9yIGZseXZpZGVvIFJlbW90ZSBDb250cm9sbGVyCi0gKgotICoga2V5bWFwIGltcG9ydGVkIGZyb20gaXIta2V5bWFwcy5jCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDEwIGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2luY2x1ZGUgPG1lZGlhL3JjLW1hcC5oPgotCi1zdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGZseXZpZGVvW10gPSB7Ci0JeyAweDBmLCBLRVlfMCB9LAotCXsgMHgwMywgS0VZXzEgfSwKLQl7IDB4MDQsIEtFWV8yIH0sCi0JeyAweDA1LCBLRVlfMyB9LAotCXsgMHgwNywgS0VZXzQgfSwKLQl7IDB4MDgsIEtFWV81IH0sCi0JeyAweDA5LCBLRVlfNiB9LAotCXsgMHgwYiwgS0VZXzcgfSwKLQl7IDB4MGMsIEtFWV84IH0sCi0JeyAweDBkLCBLRVlfOSB9LAotCi0JeyAweDBlLCBLRVlfTU9ERSB9LAkvKiBBaXIvQ2FibGUgKi8KLQl7IDB4MTEsIEtFWV9WSURFTyB9LAkvKiBWaWRlbyAqLwotCXsgMHgxNSwgS0VZX0FVRElPIH0sCS8qIEF1ZGlvICovCi0JeyAweDAwLCBLRVlfUE9XRVIgfSwJLyogUG93ZXIgKi8KLQl7IDB4MTgsIEtFWV9UVU5FUiB9LAkvKiBBViBTb3VyY2UgKi8KLQl7IDB4MDIsIEtFWV9aT09NIH0sCS8qIEZ1bGxzY3JlZW4gKi8KLQl7IDB4MWEsIEtFWV9MQU5HVUFHRSB9LAkvKiBTdGVyZW8gKi8KLQl7IDB4MWIsIEtFWV9NVVRFIH0sCS8qIE11dGUgKi8KLQl7IDB4MTQsIEtFWV9WT0xVTUVVUCB9LAkvKiBWb2x1bWUgKyAqLwotCXsgMHgxNywgS0VZX1ZPTFVNRURPV04gfSwvKiBWb2x1bWUgLSAqLwotCXsgMHgxMiwgS0VZX0NIQU5ORUxVUCB9LC8qIENoYW5uZWwgKyAqLwotCXsgMHgxMywgS0VZX0NIQU5ORUxET1dOIH0sLyogQ2hhbm5lbCAtICovCi0JeyAweDA2LCBLRVlfQUdBSU4gfSwJLyogUmVjYWxsICovCi0JeyAweDEwLCBLRVlfRU5URVIgfSwJLyogRW50ZXIgKi8KLQotCXsgMHgxOSwgS0VZX0JBQ0sgfSwJLyogUmV3aW5kICAoIDw8PCApICovCi0JeyAweDFmLCBLRVlfRk9SV0FSRCB9LAkvKiBGb3J3YXJkICggPj4+ICkgKi8KLQl7IDB4MGEsIEtFWV9BTkdMRSB9LAkvKiBubyBsYWJlbCwgbWF5IGJlIHVzZWQgYXMgdGhlIFBBVVNFIGJ1dHRvbiAqLwotfTsKLQotc3RhdGljIHN0cnVjdCByY19rZXltYXAgZmx5dmlkZW9fbWFwID0gewotCS5tYXAgPSB7Ci0JCS5zY2FuICAgID0gZmx5dmlkZW8sCi0JCS5zaXplICAgID0gQVJSQVlfU0laRShmbHl2aWRlbyksCi0JCS5pcl90eXBlID0gSVJfVFlQRV9VTktOT1dOLAkvKiBMZWdhY3kgSVIgdHlwZSAqLwotCQkubmFtZSAgICA9IFJDX01BUF9GTFlWSURFTywKLQl9Ci19OwotCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcF9mbHl2aWRlbyh2b2lkKQotewotCXJldHVybiBpcl9yZWdpc3Rlcl9tYXAoJmZseXZpZGVvX21hcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3JjX21hcF9mbHl2aWRlbyh2b2lkKQotewotCWlyX3VucmVnaXN0ZXJfbWFwKCZmbHl2aWRlb19tYXApOwotfQotCi1tb2R1bGVfaW5pdChpbml0X3JjX21hcF9mbHl2aWRlbykKLW1vZHVsZV9leGl0KGV4aXRfcmNfbWFwX2ZseXZpZGVvKQotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1mdXNpb25oZHR2LW1jZS5jIGIvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLWZ1c2lvbmhkdHYtbWNlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkYjEwMzguLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLWZ1c2lvbmhkdHYtbWNlLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi0vKiBmdXNpb25oZHR2LW1jZS5oIC0gS2V5dGFibGUgZm9yIGZ1c2lvbmhkdHZfbWNlIFJlbW90ZSBDb250cm9sbGVyCi0gKgotICoga2V5bWFwIGltcG9ydGVkIGZyb20gaXIta2V5bWFwcy5jCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDEwIGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2luY2x1ZGUgPG1lZGlhL3JjLW1hcC5oPgotCi0vKiBEVmlDTyBGVVNJT04gSERUViBNQ0UgcmVtb3RlICovCi0KLXN0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgZnVzaW9uaGR0dl9tY2VbXSA9IHsKLQotCXsgMHgwYiwgS0VZXzEgfSwKLQl7IDB4MTcsIEtFWV8yIH0sCi0JeyAweDFiLCBLRVlfMyB9LAotCXsgMHgwNywgS0VZXzQgfSwKLQl7IDB4NTAsIEtFWV81IH0sCi0JeyAweDU0LCBLRVlfNiB9LAotCXsgMHg0OCwgS0VZXzcgfSwKLQl7IDB4NGMsIEtFWV84IH0sCi0JeyAweDU4LCBLRVlfOSB9LAotCXsgMHgwMywgS0VZXzAgfSwKLQotCXsgMHg1ZSwgS0VZX09LIH0sCi0JeyAweDUxLCBLRVlfVVAgfSwKLQl7IDB4NTMsIEtFWV9ET1dOIH0sCi0JeyAweDViLCBLRVlfTEVGVCB9LAotCXsgMHg1ZiwgS0VZX1JJR0hUIH0sCi0KLQl7IDB4MDIsIEtFWV9UViB9LAkJLyogTGFiZWxlZCBEVFYgb24gcmVtb3RlICovCi0JeyAweDBlLCBLRVlfTVAzIH0sCi0JeyAweDFhLCBLRVlfRFZEIH0sCi0JeyAweDFlLCBLRVlfRkFWT1JJVEVTIH0sCS8qIExhYmVsZWQgQ1BGIG9uIHJlbW90ZSAqLwotCXsgMHgxNiwgS0VZX1NFVFVQIH0sCi0JeyAweDQ2LCBLRVlfUE9XRVIyIH0sCQkvKiBUViBPbi9PZmYgYnV0dG9uIG9uIHJlbW90ZSAqLwotCXsgMHgwYSwgS0VZX0VQRyB9LAkJLyogTGFiZWxlZCBHdWlkZSBvbiByZW1vdGUgKi8KLQotCXsgMHg0OSwgS0VZX0JBQ0sgfSwKLQl7IDB4NTksIEtFWV9JTkZPIH0sCQkvKiBMYWJlbGVkIE1PUkUgb24gcmVtb3RlICovCi0JeyAweDRkLCBLRVlfTUVOVSB9LAkJLyogTGFiZWxlZCBEVkRNRU5VIG9uIHJlbW90ZSAqLwotCXsgMHg1NSwgS0VZX0NZQ0xFV0lORE9XUyB9LAkvKiBMYWJlbGVkIEFMVC1UQUIgb24gcmVtb3RlICovCi0KLQl7IDB4MGYsIEtFWV9QUkVWSU9VU1NPTkcgfSwJLyogTGFiZWxlZCB8PDwgUkVQTEFZIG9uIHJlbW90ZSAqLwotCXsgMHgxMiwgS0VZX05FWFRTT05HIH0sCQkvKiBMYWJlbGVkID4+fCBTS0lQIG9uIHJlbW90ZSAqLwotCXsgMHg0MiwgS0VZX0VOVEVSIH0sCQkvKiBMYWJlbGVkIFNUQVJUIHdpdGggYSBncmVlbgotCQkJCQkgICBNUyB3aW5kb3dzIGxvZ28gb24gcmVtb3RlICovCi0KLQl7IDB4MTUsIEtFWV9WT0xVTUVVUCB9LAotCXsgMHgwNSwgS0VZX1ZPTFVNRURPV04gfSwKLQl7IDB4MTEsIEtFWV9DSEFOTkVMVVAgfSwKLQl7IDB4MDksIEtFWV9DSEFOTkVMRE9XTiB9LAotCi0JeyAweDUyLCBLRVlfQ0FNRVJBIH0sCi0JeyAweDVhLCBLRVlfVFVORVIgfSwKLQl7IDB4MTksIEtFWV9PUEVOIH0sCi0KLQl7IDB4MTMsIEtFWV9NT0RFIH0sCQkvKiA0OjMgMTY6OSBzZWxlY3QgKi8KLQl7IDB4MWYsIEtFWV9aT09NIH0sCi0KLQl7IDB4NDMsIEtFWV9SRVdJTkQgfSwKLQl7IDB4NDcsIEtFWV9QTEFZUEFVU0UgfSwKLQl7IDB4NGYsIEtFWV9GQVNURk9SV0FSRCB9LAotCXsgMHg1NywgS0VZX01VVEUgfSwKLQl7IDB4MGQsIEtFWV9TVE9QIH0sCi0JeyAweDAxLCBLRVlfUkVDT1JEIH0sCi0JeyAweDRlLCBLRVlfUE9XRVIgfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmNfa2V5bWFwIGZ1c2lvbmhkdHZfbWNlX21hcCA9IHsKLQkubWFwID0gewotCQkuc2NhbiAgICA9IGZ1c2lvbmhkdHZfbWNlLAotCQkuc2l6ZSAgICA9IEFSUkFZX1NJWkUoZnVzaW9uaGR0dl9tY2UpLAotCQkuaXJfdHlwZSA9IElSX1RZUEVfVU5LTk9XTiwJLyogTGVnYWN5IElSIHR5cGUgKi8KLQkJLm5hbWUgICAgPSBSQ19NQVBfRlVTSU9OSERUVl9NQ0UsCi0JfQotfTsKLQotc3RhdGljIGludCBfX2luaXQgaW5pdF9yY19tYXBfZnVzaW9uaGR0dl9tY2Uodm9pZCkKLXsKLQlyZXR1cm4gaXJfcmVnaXN0ZXJfbWFwKCZmdXNpb25oZHR2X21jZV9tYXApOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yY19tYXBfZnVzaW9uaGR0dl9tY2Uodm9pZCkKLXsKLQlpcl91bnJlZ2lzdGVyX21hcCgmZnVzaW9uaGR0dl9tY2VfbWFwKTsKLX0KLQotbW9kdWxlX2luaXQoaW5pdF9yY19tYXBfZnVzaW9uaGR0dl9tY2UpCi1tb2R1bGVfZXhpdChleGl0X3JjX21hcF9mdXNpb25oZHR2X21jZSkKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtZ2FkbWVpLXJtMDA4ei5jIGIvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLWdhZG1laS1ybTAwOHouYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzE2YzBkMS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtZ2FkbWVpLXJtMDA4ei5jCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyogZ2FkbWVpLXJtMDA4ei5oIC0gS2V5dGFibGUgZm9yIGdhZG1laV9ybTAwOHogUmVtb3RlIENvbnRyb2xsZXIKLSAqCi0gKiBrZXltYXAgaW1wb3J0ZWQgZnJvbSBpci1rZXltYXBzLmMKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgYnkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0jaW5jbHVkZSA8bWVkaWEvcmMtbWFwLmg+Ci0KLS8qIEdBRE1FSSBVVFYzMzArIFJNMDA4WiByZW1vdGUKLSAgIFNoaW5lIExpdSA8c2hpbmVsQGZveG1haWwuY29tPgotICovCi0KLXN0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgZ2FkbWVpX3JtMDA4eltdID0gewotCXsgMHgxNCwgS0VZX1BPV0VSMn0sCQkvKiBQT1dFUiBPRkYgKi8KLQl7IDB4MGMsIEtFWV9NVVRFfSwJCS8qIE1VVEUgKi8KLQotCXsgMHgxOCwgS0VZX1RWfSwJCS8qIFRWICovCi0JeyAweDBlLCBLRVlfVklERU99LAkJLyogQVYgKi8KLQl7IDB4MGIsIEtFWV9BVURJT30sCQkvKiBTViAqLwotCXsgMHgwZiwgS0VZX1JBRElPfSwJCS8qIEZNICovCi0KLQl7IDB4MDAsIEtFWV8xfSwKLQl7IDB4MDEsIEtFWV8yfSwKLQl7IDB4MDIsIEtFWV8zfSwKLQl7IDB4MDMsIEtFWV80fSwKLQl7IDB4MDQsIEtFWV81fSwKLQl7IDB4MDUsIEtFWV82fSwKLQl7IDB4MDYsIEtFWV83fSwKLQl7IDB4MDcsIEtFWV84fSwKLQl7IDB4MDgsIEtFWV85fSwKLQl7IDB4MDksIEtFWV8wfSwKLQl7IDB4MGEsIEtFWV9JTkZPfSwJCS8qIE9TRCAqLwotCXsgMHgxYywgS0VZX0JBQ0tTUEFDRX0sCQkvKiBMQVNUICovCi0KLQl7IDB4MGQsIEtFWV9QTEFZfSwJCS8qIFBMQVkgKi8KLQl7IDB4MWUsIEtFWV9DQU1FUkF9LAkJLyogU05BUFNIT1QgKi8KLQl7IDB4MWEsIEtFWV9SRUNPUkR9LAkJLyogUkVDT1JEICovCi0JeyAweDE3LCBLRVlfU1RPUH0sCQkvKiBTVE9QICovCi0KLQl7IDB4MWYsIEtFWV9VUH0sCQkvKiBVUCAqLwotCXsgMHg0NCwgS0VZX0RPV059LAkJLyogRE9XTiAqLwotCXsgMHg0NiwgS0VZX1RBQn0sCQkvKiBCQUNLICovCi0JeyAweDRhLCBLRVlfWk9PTX0sCQkvKiBGVUxMU0VDUkVFTiAqLwotCi0JeyAweDEwLCBLRVlfVk9MVU1FVVB9LAkJLyogVk9MVU1FVVAgKi8KLQl7IDB4MTEsIEtFWV9WT0xVTUVET1dOfSwJLyogVk9MVU1FRE9XTiAqLwotCXsgMHgxMiwgS0VZX0NIQU5ORUxVUH0sCQkvKiBDSEFOTkVMVVAgKi8KLQl7IDB4MTMsIEtFWV9DSEFOTkVMRE9XTn0sCS8qIENIQU5ORUxET1dOICovCi0JeyAweDE1LCBLRVlfRU5URVJ9LAkJLyogT0sgKi8KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmNfa2V5bWFwIGdhZG1laV9ybTAwOHpfbWFwID0gewotCS5tYXAgPSB7Ci0JCS5zY2FuICAgID0gZ2FkbWVpX3JtMDA4eiwKLQkJLnNpemUgICAgPSBBUlJBWV9TSVpFKGdhZG1laV9ybTAwOHopLAotCQkuaXJfdHlwZSA9IElSX1RZUEVfVU5LTk9XTiwJLyogTGVnYWN5IElSIHR5cGUgKi8KLQkJLm5hbWUgICAgPSBSQ19NQVBfR0FETUVJX1JNMDA4WiwKLQl9Ci19OwotCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcF9nYWRtZWlfcm0wMDh6KHZvaWQpCi17Ci0JcmV0dXJuIGlyX3JlZ2lzdGVyX21hcCgmZ2FkbWVpX3JtMDA4el9tYXApOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yY19tYXBfZ2FkbWVpX3JtMDA4eih2b2lkKQotewotCWlyX3VucmVnaXN0ZXJfbWFwKCZnYWRtZWlfcm0wMDh6X21hcCk7Ci19Ci0KLW1vZHVsZV9pbml0KGluaXRfcmNfbWFwX2dhZG1laV9ybTAwOHopCi1tb2R1bGVfZXhpdChleGl0X3JjX21hcF9nYWRtZWlfcm0wMDh6KQotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1nZW5pdXMtdHZnby1hMTFtY2UuYyBiL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1nZW5pdXMtdHZnby1hMTFtY2UuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODlmOGUzOC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtZ2VuaXVzLXR2Z28tYTExbWNlLmMKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi0vKiBnZW5pdXMtdHZnby1hMTFtY2UuaCAtIEtleXRhYmxlIGZvciBnZW5pdXNfdHZnb19hMTFtY2UgUmVtb3RlIENvbnRyb2xsZXIKLSAqCi0gKiBrZXltYXAgaW1wb3J0ZWQgZnJvbSBpci1rZXltYXBzLmMKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgYnkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0jaW5jbHVkZSA8bWVkaWEvcmMtbWFwLmg+Ci0KLS8qCi0gKiBSZW1vdGUgY29udHJvbCBmb3IgdGhlIEdlbml1cyBUVkdPIEExMU1DRQotICogQWRyaWFuIFBhcmRpbmkgPHBhcmRvLmJzc29AZ21haWwuY29tPgotICovCi0KLXN0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgZ2VuaXVzX3R2Z29fYTExbWNlW10gPSB7Ci0JLyogS2V5cyAwIHRvIDkgKi8KLQl7IDB4NDgsIEtFWV8wIH0sCi0JeyAweDA5LCBLRVlfMSB9LAotCXsgMHgxZCwgS0VZXzIgfSwKLQl7IDB4MWYsIEtFWV8zIH0sCi0JeyAweDE5LCBLRVlfNCB9LAotCXsgMHgxYiwgS0VZXzUgfSwKLQl7IDB4MTEsIEtFWV82IH0sCi0JeyAweDE3LCBLRVlfNyB9LAotCXsgMHgxMiwgS0VZXzggfSwKLQl7IDB4MTYsIEtFWV85IH0sCi0KLQl7IDB4NTQsIEtFWV9SRUNPUkQgfSwJCS8qIHJlY29yZGluZyAqLwotCXsgMHgwNiwgS0VZX01VVEUgfSwJCS8qIG11dGUgKi8KLQl7IDB4MTAsIEtFWV9QT1dFUiB9LAotCXsgMHg0MCwgS0VZX0xBU1QgfSwJCS8qIHJlY2FsbCAqLwotCXsgMHg0YywgS0VZX0NIQU5ORUxVUCB9LAkvKiBjaGFubmVsIC8gcHJvZ3JhbSArICovCi0JeyAweDAwLCBLRVlfQ0hBTk5FTERPV04gfSwJLyogY2hhbm5lbCAvIHByb2dyYW0gLSAqLwotCXsgMHgwZCwgS0VZX1ZPTFVNRVVQIH0sCi0JeyAweDE1LCBLRVlfVk9MVU1FRE9XTiB9LAotCXsgMHg0ZCwgS0VZX09LIH0sCQkvKiBhbHNvIGxhYmVsZWQgYXMgUGF1c2UgKi8KLQl7IDB4MWMsIEtFWV9aT09NIH0sCQkvKiBmdWxsIHNjcmVlbiBhbmQgU3RvcCovCi0JeyAweDAyLCBLRVlfTU9ERSB9LAkJLyogQVYgU291cmNlIG9yIFJld2luZCovCi0JeyAweDA0LCBLRVlfTElTVCB9LAkJLyogLS8tLSAqLwotCS8qIHNtYWxsIGFycm93cyBhYm92ZSBudW1iZXJzICovCi0JeyAweDFhLCBLRVlfTkVYVCB9LAkJLyogYWxzbyBGYXN0IEZvcndhcmQgKi8KLQl7IDB4MGUsIEtFWV9QUkVWSU9VUyB9LAkJLyogYWxzbyBSZXdpbmQgKi8KLQkvKiB0aGVzZSBhcmUgaW4gYSByYXRoZXIgbm9uIHN0YW5kYXJkIGxheW91dCBhbmQgaGF2ZQotCWFuIGFsdGVybmF0ZSBuYW1lIHdyaXR0ZW4gKi8KLQl7IDB4MWUsIEtFWV9VUCB9LAkJLyogVmlkZW8gU2V0dGluZyAqLwotCXsgMHgwYSwgS0VZX0RPV04gfSwJCS8qIFZpZGVvIERlZmF1bHQgKi8KLQl7IDB4MDUsIEtFWV9DQU1FUkEgfSwJCS8qIFNuYXBzaG90ICovCi0JeyAweDBjLCBLRVlfUklHSFQgfSwJCS8qIEhpZGUgUGFuZWwgKi8KLQkvKiBGb3VyIGJ1dHRvbnMgd2l0aG91dCBsYWJlbCAqLwotCXsgMHg0OSwgS0VZX1JFRCB9LAotCXsgMHgwYiwgS0VZX0dSRUVOIH0sCi0JeyAweDEzLCBLRVlfWUVMTE9XIH0sCi0JeyAweDUwLCBLRVlfQkxVRSB9LAotfTsKLQotc3RhdGljIHN0cnVjdCByY19rZXltYXAgZ2VuaXVzX3R2Z29fYTExbWNlX21hcCA9IHsKLQkubWFwID0gewotCQkuc2NhbiAgICA9IGdlbml1c190dmdvX2ExMW1jZSwKLQkJLnNpemUgICAgPSBBUlJBWV9TSVpFKGdlbml1c190dmdvX2ExMW1jZSksCi0JCS5pcl90eXBlID0gSVJfVFlQRV9VTktOT1dOLAkvKiBMZWdhY3kgSVIgdHlwZSAqLwotCQkubmFtZSAgICA9IFJDX01BUF9HRU5JVVNfVFZHT19BMTFNQ0UsCi0JfQotfTsKLQotc3RhdGljIGludCBfX2luaXQgaW5pdF9yY19tYXBfZ2VuaXVzX3R2Z29fYTExbWNlKHZvaWQpCi17Ci0JcmV0dXJuIGlyX3JlZ2lzdGVyX21hcCgmZ2VuaXVzX3R2Z29fYTExbWNlX21hcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3JjX21hcF9nZW5pdXNfdHZnb19hMTFtY2Uodm9pZCkKLXsKLQlpcl91bnJlZ2lzdGVyX21hcCgmZ2VuaXVzX3R2Z29fYTExbWNlX21hcCk7Ci19Ci0KLW1vZHVsZV9pbml0KGluaXRfcmNfbWFwX2dlbml1c190dmdvX2ExMW1jZSkKLW1vZHVsZV9leGl0KGV4aXRfcmNfbWFwX2dlbml1c190dmdvX2ExMW1jZSkKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtZ290dmlldzcxMzUuYyBiL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1nb3R2aWV3NzEzNS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MmYwMjViLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1nb3R2aWV3NzEzNS5jCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotLyogZ290dmlldzcxMzUuaCAtIEtleXRhYmxlIGZvciBnb3R2aWV3NzEzNSBSZW1vdGUgQ29udHJvbGxlcgotICoKLSAqIGtleW1hcCBpbXBvcnRlZCBmcm9tIGlyLWtleW1hcHMuYwotICoKLSAqIENvcHlyaWdodCAoYykgMjAxMCBieSBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLSNpbmNsdWRlIDxtZWRpYS9yYy1tYXAuaD4KLQotLyogTWlrZSBCYWlrb3YgPG1pa2VAYmFpa292LmNvbT4gKi8KLQotc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBnb3R2aWV3NzEzNVtdID0gewotCi0JeyAweDExLCBLRVlfUE9XRVIgfSwKLQl7IDB4MzUsIEtFWV9UViB9LAotCXsgMHgxYiwgS0VZXzAgfSwKLQl7IDB4MjksIEtFWV8xIH0sCi0JeyAweDE5LCBLRVlfMiB9LAotCXsgMHgzOSwgS0VZXzMgfSwKLQl7IDB4MWYsIEtFWV80IH0sCi0JeyAweDJjLCBLRVlfNSB9LAotCXsgMHgyMSwgS0VZXzYgfSwKLQl7IDB4MjQsIEtFWV83IH0sCi0JeyAweDE4LCBLRVlfOCB9LAotCXsgMHgyYiwgS0VZXzkgfSwKLQl7IDB4M2IsIEtFWV9BR0FJTiB9LAkvKiBMT09QICovCi0JeyAweDA2LCBLRVlfQVVESU8gfSwKLQl7IDB4MzEsIEtFWV9QUklOVCB9LAkvKiBQUkVWSUVXICovCi0JeyAweDNlLCBLRVlfVklERU8gfSwKLQl7IDB4MTAsIEtFWV9DSEFOTkVMVVAgfSwKLQl7IDB4MjAsIEtFWV9DSEFOTkVMRE9XTiB9LAotCXsgMHgwYywgS0VZX1ZPTFVNRURPV04gfSwKLQl7IDB4MjgsIEtFWV9WT0xVTUVVUCB9LAotCXsgMHgwOCwgS0VZX01VVEUgfSwKLQl7IDB4MjYsIEtFWV9TRUFSQ0ggfSwJLyogU0NBTiAqLwotCXsgMHgzZiwgS0VZX0NBTUVSQSB9LAkvKiBTTkFQU0hPVCAqLwotCXsgMHgxMiwgS0VZX1JFQ09SRCB9LAotCXsgMHgzMiwgS0VZX1NUT1AgfSwKLQl7IDB4M2MsIEtFWV9QTEFZIH0sCi0JeyAweDFkLCBLRVlfUkVXSU5EIH0sCi0JeyAweDJkLCBLRVlfUEFVU0UgfSwKLQl7IDB4MGQsIEtFWV9GT1JXQVJEIH0sCi0JeyAweDA1LCBLRVlfWk9PTSB9LAkvKkZVTEwqLwotCi0JeyAweDJhLCBLRVlfRjIxIH0sCS8qIExJVkUgVElNRVNISUZUICovCi0JeyAweDBlLCBLRVlfRjIyIH0sCS8qIE1JTiBUSU1FU0hJRlQgKi8KLQl7IDB4MWUsIEtFWV9USU1FIH0sCS8qIFRJTUVTSElGVCAqLwotCXsgMHgzOCwgS0VZX0YyNCB9LAkvKiBOT1JNQUwgVElNRVNISUZUICovCi19OwotCi1zdGF0aWMgc3RydWN0IHJjX2tleW1hcCBnb3R2aWV3NzEzNV9tYXAgPSB7Ci0JLm1hcCA9IHsKLQkJLnNjYW4gICAgPSBnb3R2aWV3NzEzNSwKLQkJLnNpemUgICAgPSBBUlJBWV9TSVpFKGdvdHZpZXc3MTM1KSwKLQkJLmlyX3R5cGUgPSBJUl9UWVBFX1VOS05PV04sCS8qIExlZ2FjeSBJUiB0eXBlICovCi0JCS5uYW1lICAgID0gUkNfTUFQX0dPVFZJRVc3MTM1LAotCX0KLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGluaXRfcmNfbWFwX2dvdHZpZXc3MTM1KHZvaWQpCi17Ci0JcmV0dXJuIGlyX3JlZ2lzdGVyX21hcCgmZ290dmlldzcxMzVfbWFwKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGV4aXRfcmNfbWFwX2dvdHZpZXc3MTM1KHZvaWQpCi17Ci0JaXJfdW5yZWdpc3Rlcl9tYXAoJmdvdHZpZXc3MTM1X21hcCk7Ci19Ci0KLW1vZHVsZV9pbml0KGluaXRfcmNfbWFwX2dvdHZpZXc3MTM1KQotbW9kdWxlX2V4aXQoZXhpdF9yY19tYXBfZ290dmlldzcxMzUpCi0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IoIk1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLWhhdXBwYXVnZS1uZXcuYyBiL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1oYXVwcGF1Z2UtbmV3LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2ZjhjZDcuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLWhhdXBwYXVnZS1uZXcuYworKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi0vKiBoYXVwcGF1Z2UtbmV3LmggLSBLZXl0YWJsZSBmb3IgaGF1cHBhdWdlX25ldyBSZW1vdGUgQ29udHJvbGxlcgotICoKLSAqIGtleW1hcCBpbXBvcnRlZCBmcm9tIGlyLWtleW1hcHMuYwotICoKLSAqIENvcHlyaWdodCAoYykgMjAxMCBieSBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLSNpbmNsdWRlIDxtZWRpYS9yYy1tYXAuaD4KLQotLyogSGF1cHBhdWdlOiB0aGUgbmV3ZXIsIGdyYXkgcmVtb3RlcyAoc2VlbXMgdGhlcmUgYXJlIG11bHRpcGxlCi0gKiBzbGlnaHRseSBkaWZmZXJlbnQgdmVyc2lvbnMpLCBzaGlwcGVkIHdpdGggY3g4OCtpdnR2IGNhcmRzLgotICogYWxtb3N0IHJjNSBjb2RpbmcsIGJ1dCBzb21lIG5vbi1zdGFuZGFyZCBrZXlzICovCi0KLXN0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaGF1cHBhdWdlX25ld1tdID0gewotCS8qIEtleXMgMCB0byA5ICovCi0JeyAweDAwLCBLRVlfMCB9LAotCXsgMHgwMSwgS0VZXzEgfSwKLQl7IDB4MDIsIEtFWV8yIH0sCi0JeyAweDAzLCBLRVlfMyB9LAotCXsgMHgwNCwgS0VZXzQgfSwKLQl7IDB4MDUsIEtFWV81IH0sCi0JeyAweDA2LCBLRVlfNiB9LAotCXsgMHgwNywgS0VZXzcgfSwKLQl7IDB4MDgsIEtFWV84IH0sCi0JeyAweDA5LCBLRVlfOSB9LAotCi0JeyAweDBhLCBLRVlfVEVYVCB9LAkJLyoga2V5cGFkIGFzdGVyaXNrIGFzIHdlbGwgKi8KLQl7IDB4MGIsIEtFWV9SRUQgfSwJCS8qIHJlZCBidXR0b24gKi8KLQl7IDB4MGMsIEtFWV9SQURJTyB9LAotCXsgMHgwZCwgS0VZX01FTlUgfSwKLQl7IDB4MGUsIEtFWV9TVUJUSVRMRSB9LAkJLyogYWxzbyB0aGUgIyBrZXkgKi8KLQl7IDB4MGYsIEtFWV9NVVRFIH0sCi0JeyAweDEwLCBLRVlfVk9MVU1FVVAgfSwKLQl7IDB4MTEsIEtFWV9WT0xVTUVET1dOIH0sCi0JeyAweDEyLCBLRVlfUFJFVklPVVMgfSwJCS8qIHByZXZpb3VzIGNoYW5uZWwgKi8KLQl7IDB4MTQsIEtFWV9VUCB9LAotCXsgMHgxNSwgS0VZX0RPV04gfSwKLQl7IDB4MTYsIEtFWV9MRUZUIH0sCi0JeyAweDE3LCBLRVlfUklHSFQgfSwKLQl7IDB4MTgsIEtFWV9WSURFTyB9LAkJLyogVmlkZW9zICovCi0JeyAweDE5LCBLRVlfQVVESU8gfSwJCS8qIE11c2ljICovCi0JLyogMHgxYTogUGljdHVyZXMgLSBwcmVzdW1lIHRoaXMgbWVhbnMKLQkgICAiTXVsdGltZWRpYSBIb21lIFBsYXRmb3JtIiAtCi0JICAgbm8gIlBJQ1RVUkVTIiBrZXkgaW4gaW5wdXQuaAotCSAqLwotCXsgMHgxYSwgS0VZX01IUCB9LAotCi0JeyAweDFiLCBLRVlfRVBHIH0sCQkvKiBHdWlkZSAqLwotCXsgMHgxYywgS0VZX1RWIH0sCi0JeyAweDFlLCBLRVlfTkVYVFNPTkcgfSwJCS8qIHNraXAgPnwgKi8KLQl7IDB4MWYsIEtFWV9FWElUIH0sCQkvKiBiYWNrL2V4aXQgKi8KLQl7IDB4MjAsIEtFWV9DSEFOTkVMVVAgfSwJLyogY2hhbm5lbCAvIHByb2dyYW0gKyAqLwotCXsgMHgyMSwgS0VZX0NIQU5ORUxET1dOIH0sCS8qIGNoYW5uZWwgLyBwcm9ncmFtIC0gKi8KLQl7IDB4MjIsIEtFWV9DSEFOTkVMIH0sCQkvKiBzb3VyY2UgKG9sZCBibGFjayByZW1vdGUpICovCi0JeyAweDI0LCBLRVlfUFJFVklPVVNTT05HIH0sCS8qIHJlcGxheSB8PCAqLwotCXsgMHgyNSwgS0VZX0VOVEVSIH0sCQkvKiBPSyAqLwotCXsgMHgyNiwgS0VZX1NMRUVQIH0sCQkvKiBtaW5pbWl6ZSAob2xkIGJsYWNrIHJlbW90ZSkgKi8KLQl7IDB4MjksIEtFWV9CTFVFIH0sCQkvKiBibHVlIGtleSAqLwotCXsgMHgyZSwgS0VZX0dSRUVOIH0sCQkvKiBncmVlbiBidXR0b24gKi8KLQl7IDB4MzAsIEtFWV9QQVVTRSB9LAkJLyogcGF1c2UgKi8KLQl7IDB4MzIsIEtFWV9SRVdJTkQgfSwJCS8qIGJhY2t3YXJkIDw8ICovCi0JeyAweDM0LCBLRVlfRkFTVEZPUldBUkQgfSwJLyogZm9yd2FyZCA+PiAqLwotCXsgMHgzNSwgS0VZX1BMQVkgfSwKLQl7IDB4MzYsIEtFWV9TVE9QIH0sCi0JeyAweDM3LCBLRVlfUkVDT1JEIH0sCQkvKiByZWNvcmRpbmcgKi8KLQl7IDB4MzgsIEtFWV9ZRUxMT1cgfSwJCS8qIHllbGxvdyBrZXkgKi8KLQl7IDB4M2IsIEtFWV9TRUxFQ1QgfSwJCS8qIHRvcCByaWdodCBidXR0b24gKi8KLQl7IDB4M2MsIEtFWV9aT09NIH0sCQkvKiBmdWxsICovCi0JeyAweDNkLCBLRVlfUE9XRVIgfSwJCS8qIHN5c3RlbSBwb3dlciAoZ3JlZW4gYnV0dG9uKSAqLwotfTsKLQotc3RhdGljIHN0cnVjdCByY19rZXltYXAgaGF1cHBhdWdlX25ld19tYXAgPSB7Ci0JLm1hcCA9IHsKLQkJLnNjYW4gICAgPSBoYXVwcGF1Z2VfbmV3LAotCQkuc2l6ZSAgICA9IEFSUkFZX1NJWkUoaGF1cHBhdWdlX25ldyksCi0JCS5pcl90eXBlID0gSVJfVFlQRV9VTktOT1dOLAkvKiBMZWdhY3kgSVIgdHlwZSAqLwotCQkubmFtZSAgICA9IFJDX01BUF9IQVVQUEFVR0VfTkVXLAotCX0KLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGluaXRfcmNfbWFwX2hhdXBwYXVnZV9uZXcodm9pZCkKLXsKLQlyZXR1cm4gaXJfcmVnaXN0ZXJfbWFwKCZoYXVwcGF1Z2VfbmV3X21hcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3JjX21hcF9oYXVwcGF1Z2VfbmV3KHZvaWQpCi17Ci0JaXJfdW5yZWdpc3Rlcl9tYXAoJmhhdXBwYXVnZV9uZXdfbWFwKTsKLX0KLQotbW9kdWxlX2luaXQoaW5pdF9yY19tYXBfaGF1cHBhdWdlX25ldykKLW1vZHVsZV9leGl0KGV4aXRfcmNfbWFwX2hhdXBwYXVnZV9uZXcpCi0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IoIk1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLWltb24tbWNlLmMgYi9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtaW1vbi1tY2UuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTQ5ZjM1MC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtaW1vbi1tY2UuYworKysgL2Rldi9udWxsCkBAIC0xLDE0MiArMCwwIEBACi0vKiByYzUtaW1vbi1tY2UuYyAtIEtleXRhYmxlIGZvciBXaW5kb3dzIE1lZGlhIENlbnRlciBSQy02IHJlbW90ZXMgZm9yIHVzZQotICogd2l0aCB0aGUgU291bmRHcmFwaCBpTU9OL0FudGVjIFZlcmlzIGhhcmR3YXJlIElSIGRlY29kZXIKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgYnkgSmFyb2QgV2lsc29uIDxqYXJvZEByZWRoYXQuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2luY2x1ZGUgPG1lZGlhL3JjLW1hcC5oPgotCi0vKiBtY2UtbW9kZSBpbW9uIG1jZSByZW1vdGUga2V5IHRhYmxlICovCi1zdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGltb25fbWNlW10gPSB7Ci0JLyoga2V5cyBzb3J0ZWQgbW9zdGx5IGJ5IGZyZXF1ZW5jeSBvZiB1c2UgdG8gb3B0aW1pemUgbG9va3VwcyAqLwotCXsgMHg4MDBmZjQxNSwgS0VZX1JFV0lORCB9LAotCXsgMHg4MDBmZjQxNCwgS0VZX0ZBU1RGT1JXQVJEIH0sCi0JeyAweDgwMGZmNDFiLCBLRVlfUFJFVklPVVMgfSwKLQl7IDB4ODAwZmY0MWEsIEtFWV9ORVhUIH0sCi0KLQl7IDB4ODAwZmY0MTYsIEtFWV9QTEFZIH0sCi0JeyAweDgwMGZmNDE4LCBLRVlfUEFVU0UgfSwKLQl7IDB4ODAwZmY0MTksIEtFWV9TVE9QIH0sCi0JeyAweDgwMGZmNDE3LCBLRVlfUkVDT1JEIH0sCi0KLQl7IDB4MDIwMDAwNTIsIEtFWV9VUCB9LAotCXsgMHgwMjAwMDA1MSwgS0VZX0RPV04gfSwKLQl7IDB4MDIwMDAwNTAsIEtFWV9MRUZUIH0sCi0JeyAweDAyMDAwMDRmLCBLRVlfUklHSFQgfSwKLQotCXsgMHg4MDBmZjQxZSwgS0VZX1VQIH0sCi0JeyAweDgwMGZmNDFmLCBLRVlfRE9XTiB9LAotCXsgMHg4MDBmZjQyMCwgS0VZX0xFRlQgfSwKLQl7IDB4ODAwZmY0MjEsIEtFWV9SSUdIVCB9LAotCi0JLyogMHg4MDBmZjQwYiBhbHNvIEtFWV9OVU1FUklDX1BPVU5EIG9uIHNvbWUgcmVjZWl2ZXJzICovCi0JeyAweDgwMGZmNDBiLCBLRVlfRU5URVIgfSwKLQl7IDB4MDIwMDAwMjgsIEtFWV9FTlRFUiB9LAotLyogdGhlIE9LIGFuZCBFbnRlciBidXR0b25zIGRlY29kZSB0byB0aGUgc2FtZSB2YWx1ZSBvbiBzb21lIHJlbW90ZXMKLQl7IDB4MDIwMDAwMjgsIEtFWV9PSyB9LCAqLwotCXsgMHg4MDBmZjQyMiwgS0VZX09LIH0sCi0JeyAweDAyMDAwMDJhLCBLRVlfRVhJVCB9LAotCXsgMHg4MDBmZjQyMywgS0VZX0VYSVQgfSwKLQl7IDB4MDIwMDAwMjksIEtFWV9ERUxFVEUgfSwKLQkvKiAweDgwMGZmNDBhIGFsc28gS0VZX05VTUVSSUNfU1RBUiBvbiBzb21lIHJlY2VpdmVycyAqLwotCXsgMHg4MDBmZjQwYSwgS0VZX0RFTEVURSB9LAotCi0JeyAweDgwMGZmNDBlLCBLRVlfTVVURSB9LAotCXsgMHg4MDBmZjQxMCwgS0VZX1ZPTFVNRVVQIH0sCi0JeyAweDgwMGZmNDExLCBLRVlfVk9MVU1FRE9XTiB9LAotCXsgMHg4MDBmZjQxMiwgS0VZX0NIQU5ORUxVUCB9LAotCXsgMHg4MDBmZjQxMywgS0VZX0NIQU5ORUxET1dOIH0sCi0KLQl7IDB4MDIwMDAwMWUsIEtFWV9OVU1FUklDXzEgfSwKLQl7IDB4MDIwMDAwMWYsIEtFWV9OVU1FUklDXzIgfSwKLQl7IDB4MDIwMDAwMjAsIEtFWV9OVU1FUklDXzMgfSwKLQl7IDB4MDIwMDAwMjEsIEtFWV9OVU1FUklDXzQgfSwKLQl7IDB4MDIwMDAwMjIsIEtFWV9OVU1FUklDXzUgfSwKLQl7IDB4MDIwMDAwMjMsIEtFWV9OVU1FUklDXzYgfSwKLQl7IDB4MDIwMDAwMjQsIEtFWV9OVU1FUklDXzcgfSwKLQl7IDB4MDIwMDAwMjUsIEtFWV9OVU1FUklDXzggfSwKLQl7IDB4MDIwMDAwMjYsIEtFWV9OVU1FUklDXzkgfSwKLQl7IDB4MDIwMDAwMjcsIEtFWV9OVU1FUklDXzAgfSwKLQotCXsgMHg4MDBmZjQwMSwgS0VZX05VTUVSSUNfMSB9LAotCXsgMHg4MDBmZjQwMiwgS0VZX05VTUVSSUNfMiB9LAotCXsgMHg4MDBmZjQwMywgS0VZX05VTUVSSUNfMyB9LAotCXsgMHg4MDBmZjQwNCwgS0VZX05VTUVSSUNfNCB9LAotCXsgMHg4MDBmZjQwNSwgS0VZX05VTUVSSUNfNSB9LAotCXsgMHg4MDBmZjQwNiwgS0VZX05VTUVSSUNfNiB9LAotCXsgMHg4MDBmZjQwNywgS0VZX05VTUVSSUNfNyB9LAotCXsgMHg4MDBmZjQwOCwgS0VZX05VTUVSSUNfOCB9LAotCXsgMHg4MDBmZjQwOSwgS0VZX05VTUVSSUNfOSB9LAotCXsgMHg4MDBmZjQwMCwgS0VZX05VTUVSSUNfMCB9LAotCi0JeyAweDAyMjAwMDI1LCBLRVlfTlVNRVJJQ19TVEFSIH0sCi0JeyAweDAyMjAwMDIwLCBLRVlfTlVNRVJJQ19QT1VORCB9LAotCS8qIDB4ODAwZmY0MWQgYWxzbyBLRVlfQkxVRSBvbiBzb21lIHJlY2VpdmVycyAqLwotCXsgMHg4MDBmZjQxZCwgS0VZX05VTUVSSUNfU1RBUiB9LAotCS8qIDB4ODAwZmY0MWMgYWxzbyBLRVlfUFJFVklPVVMgb24gc29tZSByZWNlaXZlcnMgKi8KLQl7IDB4ODAwZmY0MWMsIEtFWV9OVU1FUklDX1BPVU5EIH0sCi0KLQl7IDB4ODAwZmY0NDYsIEtFWV9UViB9LAotCXsgMHg4MDBmZjQ0NywgS0VZX0FVRElPIH0sIC8qIE15IE11c2ljICovCi0JeyAweDgwMGZmNDQ4LCBLRVlfUFZSIH0sIC8qIFJlY29yZGVkVFYgKi8KLQl7IDB4ODAwZmY0NDksIEtFWV9DQU1FUkEgfSwKLQl7IDB4ODAwZmY0NGEsIEtFWV9WSURFTyB9LAotCS8qIDB4ODAwZmY0MjQgYWxzbyBLRVlfTUVOVSBvbiBzb21lIHJlY2VpdmVycyAqLwotCXsgMHg4MDBmZjQyNCwgS0VZX0RWRCB9LAotCS8qIDB4ODAwZmY0MjUgYWxzbyBLRVlfR1JFRU4gb24gc29tZSByZWNlaXZlcnMgKi8KLQl7IDB4ODAwZmY0MjUsIEtFWV9UVU5FUiB9LCAvKiBMaXZlVFYgKi8KLQl7IDB4ODAwZmY0NTAsIEtFWV9SQURJTyB9LAotCi0JeyAweDgwMGZmNDRjLCBLRVlfTEFOR1VBR0UgfSwKLQl7IDB4ODAwZmY0MjcsIEtFWV9aT09NIH0sIC8qIEFzcGVjdCAqLwotCi0JeyAweDgwMGZmNDViLCBLRVlfUkVEIH0sCi0JeyAweDgwMGZmNDVjLCBLRVlfR1JFRU4gfSwKLQl7IDB4ODAwZmY0NWQsIEtFWV9ZRUxMT1cgfSwKLQl7IDB4ODAwZmY0NWUsIEtFWV9CTFVFIH0sCi0KLQl7IDB4ODAwZmY0NjYsIEtFWV9SRUQgfSwKLQkvKiB7IDB4ODAwZmY0MjUsIEtFWV9HUkVFTiB9LCAqLwotCXsgMHg4MDBmZjQ2OCwgS0VZX1lFTExPVyB9LAotCS8qIHsgMHg4MDBmZjQxZCwgS0VZX0JMVUUgfSwgKi8KLQotCXsgMHg4MDBmZjQwZiwgS0VZX0lORk8gfSwKLQl7IDB4ODAwZmY0MjYsIEtFWV9FUEcgfSwgLyogR3VpZGUgKi8KLQl7IDB4ODAwZmY0NWEsIEtFWV9TVUJUSVRMRSB9LCAvKiBDYXB0aW9uL1RlbGV0ZXh0ICovCi0JeyAweDgwMGZmNDRkLCBLRVlfVElUTEUgfSwKLQotCXsgMHg4MDBmZjQwYywgS0VZX1BPV0VSIH0sCi0JeyAweDgwMGZmNDBkLCBLRVlfUFJPRzEgfSwgLyogV2luZG93cyBNQ0UgYnV0dG9uICovCi0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmNfa2V5bWFwIGltb25fbWNlX21hcCA9IHsKLQkubWFwID0gewotCQkuc2NhbiAgICA9IGltb25fbWNlLAotCQkuc2l6ZSAgICA9IEFSUkFZX1NJWkUoaW1vbl9tY2UpLAotCQkvKiBpdHMgUkM2LCBidXQgdy9hIGhhcmR3YXJlIGRlY29kZXIgKi8KLQkJLmlyX3R5cGUgPSBJUl9UWVBFX1JDNiwKLQkJLm5hbWUgICAgPSBSQ19NQVBfSU1PTl9NQ0UsCi0JfQotfTsKLQotc3RhdGljIGludCBfX2luaXQgaW5pdF9yY19tYXBfaW1vbl9tY2Uodm9pZCkKLXsKLQlyZXR1cm4gaXJfcmVnaXN0ZXJfbWFwKCZpbW9uX21jZV9tYXApOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yY19tYXBfaW1vbl9tY2Uodm9pZCkKLXsKLQlpcl91bnJlZ2lzdGVyX21hcCgmaW1vbl9tY2VfbWFwKTsKLX0KLQotbW9kdWxlX2luaXQoaW5pdF9yY19tYXBfaW1vbl9tY2UpCi1tb2R1bGVfZXhpdChleGl0X3JjX21hcF9pbW9uX21jZSkKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiSmFyb2QgV2lsc29uIDxqYXJvZEByZWRoYXQuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLWltb24tcGFkLmMgYi9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtaW1vbi1wYWQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmM0ZGI3Mi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtaW1vbi1wYWQuYworKysgL2Rldi9udWxsCkBAIC0xLDE1NiArMCwwIEBACi0vKiByYzUtaW1vbi1wYWQuYyAtIEtleXRhYmxlIGZvciBTb3VuZEdyYXBoIGlNT04gUEFEIGFuZCBBbnRlYyBWZXJpcwotICogUk0tMjAwIFJlbW90ZSBDb250cm9sCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDEwIGJ5IEphcm9kIFdpbHNvbiA8amFyb2RAcmVkaGF0LmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLSNpbmNsdWRlIDxtZWRpYS9yYy1tYXAuaD4KLQotLyoKLSAqIHN0YW5kYXJkIGltb24gcmVtb3RlIGtleSB0YWJsZSwgd2hpY2ggaXNuJ3QgcmVhbGx5IGVudGlyZWx5Ci0gKiAic3RhbmRhcmQiLCBhcyBkaWZmZXJlbnQgcmVjZWl2ZXJzIGRlY29kZSB0aGUgc2FtZSBrZXkgb24gdGhlCi0gKiBzYW1lIHJlbW90ZSB0byBkaWZmZXJlbnQgaGV4IGNvZGVzLCBhbmQgdGhlIHNpbGtzY3JlZW5lZCBuYW1lcwotICogdmFyeSBhIGJpdCBiZXR3ZWVuIHRoZSBTb3VuZEdyYXBoIGFuZCBBbnRlYyByZW1vdGVzLi4uIHVnaC4KLSAqLwotc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpbW9uX3BhZFtdID0gewotCS8qIGtleXMgc29ydGVkIG1vc3RseSBieSBmcmVxdWVuY3kgb2YgdXNlIHRvIG9wdGltaXplIGxvb2t1cHMgKi8KLQl7IDB4MmE4MTk1YjcsIEtFWV9SRVdJTkQgfSwKLQl7IDB4Mjk4MzE1YjcsIEtFWV9SRVdJTkQgfSwKLQl7IDB4MmI4MTE1YjcsIEtFWV9GQVNURk9SV0FSRCB9LAotCXsgMHgyYjgzMTViNywgS0VZX0ZBU1RGT1JXQVJEIH0sCi0JeyAweDJiOTExNWI3LCBLRVlfUFJFVklPVVMgfSwKLQl7IDB4Mjk4MTk1YjcsIEtFWV9ORVhUIH0sCi0KLQl7IDB4MmE4MTE1YjcsIEtFWV9QTEFZIH0sCi0JeyAweDJhODMxNWI3LCBLRVlfUExBWSB9LAotCXsgMHgyYTkxMTViNywgS0VZX1BBVVNFIH0sCi0JeyAweDJiOTcxNWI3LCBLRVlfU1RPUCB9LAotCXsgMHgyOTgxMTViNywgS0VZX1JFQ09SRCB9LAotCi0JeyAweDAxMDA4MDAwLCBLRVlfVVAgfSwKLQl7IDB4MDEwMDdmMDAsIEtFWV9ET1dOIH0sCi0JeyAweDAxMDAwMDgwLCBLRVlfTEVGVCB9LAotCXsgMHgwMTAwMDA3ZiwgS0VZX1JJR0hUIH0sCi0KLQl7IDB4MmFhNTE1YjcsIEtFWV9VUCB9LAotCXsgMHgyODk1MTViNywgS0VZX0RPV04gfSwKLQl7IDB4MjlhNTE1YjcsIEtFWV9MRUZUIH0sCi0JeyAweDJiYTUxNWI3LCBLRVlfUklHSFQgfSwKLQotCXsgMHgwMjAwMDAyYywgS0VZX1NQQUNFIH0sIC8qIFNlbGVjdC9TcGFjZSAqLwotCXsgMHgyYTkzMTViNywgS0VZX1NQQUNFIH0sIC8qIFNlbGVjdC9TcGFjZSAqLwotCXsgMHgwMjAwMDAyOCwgS0VZX0VOVEVSIH0sCi0JeyAweDI4YTE5NWI3LCBLRVlfRU5URVIgfSwKLQl7IDB4Mjg4MTk1YjcsIEtFWV9FWElUIH0sCi0JeyAweDAyMDAwMDI5LCBLRVlfRVNDIH0sCi0JeyAweDJiYjcxNWI3LCBLRVlfRVNDIH0sCi0JeyAweDAyMDAwMDJhLCBLRVlfQkFDS1NQQUNFIH0sCi0JeyAweDI4YTExNWI3LCBLRVlfQkFDS1NQQUNFIH0sCi0KLQl7IDB4MmI5NTk1YjcsIEtFWV9NVVRFIH0sCi0JeyAweDI4YTM5NWI3LCBLRVlfVk9MVU1FVVAgfSwKLQl7IDB4MjhhNTk1YjcsIEtFWV9WT0xVTUVET1dOIH0sCi0JeyAweDI4OTM5NWI3LCBLRVlfQ0hBTk5FTFVQIH0sCi0JeyAweDI4ODc5NWI3LCBLRVlfQ0hBTk5FTERPV04gfSwKLQotCXsgMHgwMjAwMDAxZSwgS0VZX05VTUVSSUNfMSB9LAotCXsgMHgwMjAwMDAxZiwgS0VZX05VTUVSSUNfMiB9LAotCXsgMHgwMjAwMDAyMCwgS0VZX05VTUVSSUNfMyB9LAotCXsgMHgwMjAwMDAyMSwgS0VZX05VTUVSSUNfNCB9LAotCXsgMHgwMjAwMDAyMiwgS0VZX05VTUVSSUNfNSB9LAotCXsgMHgwMjAwMDAyMywgS0VZX05VTUVSSUNfNiB9LAotCXsgMHgwMjAwMDAyNCwgS0VZX05VTUVSSUNfNyB9LAotCXsgMHgwMjAwMDAyNSwgS0VZX05VTUVSSUNfOCB9LAotCXsgMHgwMjAwMDAyNiwgS0VZX05VTUVSSUNfOSB9LAotCXsgMHgwMjAwMDAyNywgS0VZX05VTUVSSUNfMCB9LAotCi0JeyAweDI4YjU5NWI3LCBLRVlfTlVNRVJJQ18xIH0sCi0JeyAweDJiYjE5NWI3LCBLRVlfTlVNRVJJQ18yIH0sCi0JeyAweDI4YjE5NWI3LCBLRVlfTlVNRVJJQ18zIH0sCi0JeyAweDJhODU5NWI3LCBLRVlfTlVNRVJJQ180IH0sCi0JeyAweDI5OTU5NWI3LCBLRVlfTlVNRVJJQ181IH0sCi0JeyAweDJhYTU5NWI3LCBLRVlfTlVNRVJJQ182IH0sCi0JeyAweDJiOTM5NWI3LCBLRVlfTlVNRVJJQ183IH0sCi0JeyAweDJhODUxNWI3LCBLRVlfTlVNRVJJQ184IH0sCi0JeyAweDJhYTExNWI3LCBLRVlfTlVNRVJJQ185IH0sCi0JeyAweDJiYTU5NWI3LCBLRVlfTlVNRVJJQ18wIH0sCi0KLQl7IDB4MDIyMDAwMjUsIEtFWV9OVU1FUklDX1NUQVIgfSwKLQl7IDB4MjhiNTE1YjcsIEtFWV9OVU1FUklDX1NUQVIgfSwKLQl7IDB4MDIyMDAwMjAsIEtFWV9OVU1FUklDX1BPVU5EIH0sCi0JeyAweDI5YTExNWI3LCBLRVlfTlVNRVJJQ19QT1VORCB9LAotCi0JeyAweDJiODUxNWI3LCBLRVlfVklERU8gfSwKLQl7IDB4Mjk5MTk1YjcsIEtFWV9BVURJTyB9LAotCXsgMHgyYmExMTViNywgS0VZX0NBTUVSQSB9LAotCXsgMHgyOGE1MTViNywgS0VZX1RWIH0sCi0JeyAweDI5YTM5NWI3LCBLRVlfRFZEIH0sCi0JeyAweDI5YTI5NWI3LCBLRVlfRFZEIH0sCi0KLQkvKiB0aGUgTWVudSBrZXkgYmV0d2VlbiBEVkQgYW5kIFN1YnRpdGxlIG9uIHRoZSBSTS0yMDAuLi4gKi8KLQl7IDB4MmJhMzg1YjcsIEtFWV9NRU5VIH0sCi0JeyAweDJiYTM5NWI3LCBLRVlfTUVOVSB9LAotCi0JeyAweDI4ODUxNWI3LCBLRVlfQk9PS01BUktTIH0sCi0JeyAweDJhYjcxNWI3LCBLRVlfTUVESUEgfSwgLyogVGh1bWJuYWlsICovCi0JeyAweDI5ODU5NWI3LCBLRVlfU1VCVElUTEUgfSwKLQl7IDB4MmI4NTk1YjcsIEtFWV9MQU5HVUFHRSB9LAotCi0JeyAweDI5YTU5NWI3LCBLRVlfWk9PTSB9LAotCXsgMHgyYWEzOTViNywgS0VZX1NDUkVFTiB9LCAvKiBGdWxsU2NyZWVuICovCi0KLQl7IDB4Mjk5MTE1YjcsIEtFWV9LRVlCT0FSRCB9LAotCXsgMHgyOTkxMzViNywgS0VZX0tFWUJPQVJEIH0sCi0KLQl7IDB4MDEwMTAwMDAsIEJUTl9MRUZUIH0sCi0JeyAweDAxMDIwMDAwLCBCVE5fUklHSFQgfSwKLQl7IDB4MDEwMTAwODAsIEJUTl9MRUZUIH0sCi0JeyAweDAxMDIwMDgwLCBCVE5fUklHSFQgfSwKLQl7IDB4Njg4MzAxYjcsIEJUTl9MRUZUIH0sCi0JeyAweDY4ODQ4MWI3LCBCVE5fUklHSFQgfSwKLQotCXsgMHgyYTkzOTViNywgS0VZX0NZQ0xFV0lORE9XUyB9LCAvKiBUYXNrU3dpdGNoZXIgKi8KLQl7IDB4MmI4Mzk1YjcsIEtFWV9USU1FIH0sIC8qIFRpbWVyICovCi0KLQl7IDB4Mjg5MTE1YjcsIEtFWV9QT1dFUiB9LAotCXsgMHgyOWIxOTViNywgS0VZX0VKRUNUQ0QgfSwgLyogdGhlIG9uZSBuZXh0IHRvIHBsYXkgKi8KLQl7IDB4Mjk5Mzk1YjcsIEtFWV9FSkVDVENMT1NFQ0QgfSwgLyogZWplY3QgKGJ5IFRhc2tTdykgKi8KLQotCXsgMHgwMjgwMDAwMCwgS0VZX0NPTlRFWFRfTUVOVSB9LCAvKiBMZWZ0IE1lbnUgKi8KLQl7IDB4MmI4MTk1YjcsIEtFWV9DT05URVhUX01FTlUgfSwgLyogTGVmdCBNZW51Ki8KLQl7IDB4MDIwMDAwNjUsIEtFWV9DT01QT1NFIH0sIC8qIFJpZ2h0TWVudSAqLwotCXsgMHgyOGI3MTViNywgS0VZX0NPTVBPU0UgfSwgLyogUmlnaHRNZW51ICovCi0JeyAweDJhYjE5NWI3LCBLRVlfUFJPRzEgfSwgLyogR28gb3IgTXVsdGlNb24gKi8KLQl7IDB4MjliNzE1YjcsIEtFWV9EQVNIQk9BUkQgfSwgLyogQXBwTGF1bmNoZXIgKi8KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmNfa2V5bWFwIGltb25fcGFkX21hcCA9IHsKLQkubWFwID0gewotCQkuc2NhbiAgICA9IGltb25fcGFkLAotCQkuc2l6ZSAgICA9IEFSUkFZX1NJWkUoaW1vbl9wYWQpLAotCQkvKiBhY3R1YWwgcHJvdG9jb2wgZGV0YWlscyB1bmtub3duLCBoYXJkd2FyZSBkZWNvZGVyICovCi0JCS5pcl90eXBlID0gSVJfVFlQRV9PVEhFUiwKLQkJLm5hbWUgICAgPSBSQ19NQVBfSU1PTl9QQUQsCi0JfQotfTsKLQotc3RhdGljIGludCBfX2luaXQgaW5pdF9yY19tYXBfaW1vbl9wYWQodm9pZCkKLXsKLQlyZXR1cm4gaXJfcmVnaXN0ZXJfbWFwKCZpbW9uX3BhZF9tYXApOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yY19tYXBfaW1vbl9wYWQodm9pZCkKLXsKLQlpcl91bnJlZ2lzdGVyX21hcCgmaW1vbl9wYWRfbWFwKTsKLX0KLQotbW9kdWxlX2luaXQoaW5pdF9yY19tYXBfaW1vbl9wYWQpCi1tb2R1bGVfZXhpdChleGl0X3JjX21hcF9pbW9uX3BhZCkKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiSmFyb2QgV2lsc29uIDxqYXJvZEByZWRoYXQuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLWlvZGF0YS1iY3R2N2UuYyBiL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1pb2RhdGEtYmN0djdlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmNjYwMDIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLWlvZGF0YS1iY3R2N2UuYworKysgL2Rldi9udWxsCkBAIC0xLDg4ICswLDAgQEAKLS8qIGlvZGF0YS1iY3R2N2UuaCAtIEtleXRhYmxlIGZvciBpb2RhdGFfYmN0djdlIFJlbW90ZSBDb250cm9sbGVyCi0gKgotICoga2V5bWFwIGltcG9ydGVkIGZyb20gaXIta2V5bWFwcy5jCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDEwIGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2luY2x1ZGUgPG1lZGlhL3JjLW1hcC5oPgotCi0vKiBJTy1EQVRBIEJDVFY3RSBSZW1vdGUgKi8KLQotc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpb2RhdGFfYmN0djdlW10gPSB7Ci0JeyAweDQwLCBLRVlfVFYgfSwKLQl7IDB4MjAsIEtFWV9SQURJTyB9LAkJLyogRk0gKi8KLQl7IDB4NjAsIEtFWV9FUEcgfSwKLQl7IDB4MDAsIEtFWV9QT1dFUiB9LAotCi0JLyogS2V5cyAwIHRvIDkgKi8KLQl7IDB4NDQsIEtFWV8wIH0sCQkvKiAxMCAqLwotCXsgMHg1MCwgS0VZXzEgfSwKLQl7IDB4MzAsIEtFWV8yIH0sCi0JeyAweDcwLCBLRVlfMyB9LAotCXsgMHg0OCwgS0VZXzQgfSwKLQl7IDB4MjgsIEtFWV81IH0sCi0JeyAweDY4LCBLRVlfNiB9LAotCXsgMHg1OCwgS0VZXzcgfSwKLQl7IDB4MzgsIEtFWV84IH0sCi0JeyAweDc4LCBLRVlfOSB9LAotCi0JeyAweDEwLCBLRVlfTCB9LAkJLyogTGl2ZSAqLwotCXsgMHgwOCwgS0VZX1RJTUUgfSwJCS8qIFRpbWUgU2hpZnQgKi8KLQotCXsgMHgxOCwgS0VZX1BMQVlQQVVTRSB9LAkvKiBQbGF5ICovCi0KLQl7IDB4MjQsIEtFWV9FTlRFUiB9LAkJLyogMTEgKi8KLQl7IDB4NjQsIEtFWV9FU0MgfSwJCS8qIDEyICovCi0JeyAweDA0LCBLRVlfTSB9LAkJLyogTXVsdGkgKi8KLQotCXsgMHg1NCwgS0VZX1ZJREVPIH0sCi0JeyAweDM0LCBLRVlfQ0hBTk5FTFVQIH0sCi0JeyAweDc0LCBLRVlfVk9MVU1FVVAgfSwKLQl7IDB4MTQsIEtFWV9NVVRFIH0sCi0KLQl7IDB4NGMsIEtFWV9WQ1IgfSwJCS8qIFNWSURFTyAqLwotCXsgMHgyYywgS0VZX0NIQU5ORUxET1dOIH0sCi0JeyAweDZjLCBLRVlfVk9MVU1FRE9XTiB9LAotCXsgMHgwYywgS0VZX1pPT00gfSwKLQotCXsgMHg1YywgS0VZX1BBVVNFIH0sCi0JeyAweDNjLCBLRVlfUkVEIH0sCQkvKiB8fCAocmVkKSAqLwotCXsgMHg3YywgS0VZX1JFQ09SRCB9LAkJLyogcmVjb3JkaW5nICovCi0JeyAweDFjLCBLRVlfU1RPUCB9LAotCi0JeyAweDQxLCBLRVlfUkVXSU5EIH0sCQkvKiBiYWNrd2FyZCA8PCAqLwotCXsgMHgyMSwgS0VZX1BMQVkgfSwKLQl7IDB4NjEsIEtFWV9GQVNURk9SV0FSRCB9LAkvKiBmb3J3YXJkID4+ICovCi0JeyAweDAxLCBLRVlfTkVYVCB9LAkJLyogc2tpcCA+fCAqLwotfTsKLQotc3RhdGljIHN0cnVjdCByY19rZXltYXAgaW9kYXRhX2JjdHY3ZV9tYXAgPSB7Ci0JLm1hcCA9IHsKLQkJLnNjYW4gICAgPSBpb2RhdGFfYmN0djdlLAotCQkuc2l6ZSAgICA9IEFSUkFZX1NJWkUoaW9kYXRhX2JjdHY3ZSksCi0JCS5pcl90eXBlID0gSVJfVFlQRV9VTktOT1dOLAkvKiBMZWdhY3kgSVIgdHlwZSAqLwotCQkubmFtZSAgICA9IFJDX01BUF9JT0RBVEFfQkNUVjdFLAotCX0KLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGluaXRfcmNfbWFwX2lvZGF0YV9iY3R2N2Uodm9pZCkKLXsKLQlyZXR1cm4gaXJfcmVnaXN0ZXJfbWFwKCZpb2RhdGFfYmN0djdlX21hcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3JjX21hcF9pb2RhdGFfYmN0djdlKHZvaWQpCi17Ci0JaXJfdW5yZWdpc3Rlcl9tYXAoJmlvZGF0YV9iY3R2N2VfbWFwKTsKLX0KLQotbW9kdWxlX2luaXQoaW5pdF9yY19tYXBfaW9kYXRhX2JjdHY3ZSkKLW1vZHVsZV9leGl0KGV4aXRfcmNfbWFwX2lvZGF0YV9iY3R2N2UpCi0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IoIk1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLWthaW9teS5jIGIvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLWthaW9teS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Yzc4ODNiLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1rYWlvbXkuYworKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLS8qIGthaW9teS5oIC0gS2V5dGFibGUgZm9yIGthaW9teSBSZW1vdGUgQ29udHJvbGxlcgotICoKLSAqIGtleW1hcCBpbXBvcnRlZCBmcm9tIGlyLWtleW1hcHMuYwotICoKLSAqIENvcHlyaWdodCAoYykgMjAxMCBieSBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLSNpbmNsdWRlIDxtZWRpYS9yYy1tYXAuaD4KLQotLyogS2Fpb215IFRWblBDIFUyCi0gICBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAaW5mcmFkZWFkLm9yZz4KLSAqLwotCi1zdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGthaW9teVtdID0gewotCXsgMHg0MywgS0VZX1BPV0VSMn0sCi0JeyAweDAxLCBLRVlfTElTVH0sCi0JeyAweDBiLCBLRVlfWk9PTX0sCi0JeyAweDAzLCBLRVlfUE9XRVJ9LAotCi0JeyAweDA0LCBLRVlfMX0sCi0JeyAweDA4LCBLRVlfMn0sCi0JeyAweDAyLCBLRVlfM30sCi0KLQl7IDB4MGYsIEtFWV80fSwKLQl7IDB4MDUsIEtFWV81fSwKLQl7IDB4MDYsIEtFWV82fSwKLQotCXsgMHgwYywgS0VZXzd9LAotCXsgMHgwZCwgS0VZXzh9LAotCXsgMHgwYSwgS0VZXzl9LAotCi0JeyAweDExLCBLRVlfMH0sCi0KLQl7IDB4MDksIEtFWV9DSEFOTkVMVVB9LAotCXsgMHgwNywgS0VZX0NIQU5ORUxET1dOfSwKLQotCXsgMHgwZSwgS0VZX1ZPTFVNRVVQfSwKLQl7IDB4MTMsIEtFWV9WT0xVTUVET1dOfSwKLQotCXsgMHgxMCwgS0VZX0hPTUV9LAotCXsgMHgxMiwgS0VZX0VOVEVSfSwKLQotCXsgMHgxNCwgS0VZX1JFQ09SRH0sCi0JeyAweDE1LCBLRVlfU1RPUH0sCi0JeyAweDE2LCBLRVlfUExBWX0sCi0JeyAweDE3LCBLRVlfTVVURX0sCi0KLQl7IDB4MTgsIEtFWV9VUH0sCi0JeyAweDE5LCBLRVlfRE9XTn0sCi0JeyAweDFhLCBLRVlfTEVGVH0sCi0JeyAweDFiLCBLRVlfUklHSFR9LAotCi0JeyAweDFjLCBLRVlfUkVEfSwKLQl7IDB4MWQsIEtFWV9HUkVFTn0sCi0JeyAweDFlLCBLRVlfWUVMTE9XfSwKLQl7IDB4MWYsIEtFWV9CTFVFfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmNfa2V5bWFwIGthaW9teV9tYXAgPSB7Ci0JLm1hcCA9IHsKLQkJLnNjYW4gICAgPSBrYWlvbXksCi0JCS5zaXplICAgID0gQVJSQVlfU0laRShrYWlvbXkpLAotCQkuaXJfdHlwZSA9IElSX1RZUEVfVU5LTk9XTiwJLyogTGVnYWN5IElSIHR5cGUgKi8KLQkJLm5hbWUgICAgPSBSQ19NQVBfS0FJT01ZLAotCX0KLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGluaXRfcmNfbWFwX2thaW9teSh2b2lkKQotewotCXJldHVybiBpcl9yZWdpc3Rlcl9tYXAoJmthaW9teV9tYXApOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yY19tYXBfa2Fpb215KHZvaWQpCi17Ci0JaXJfdW5yZWdpc3Rlcl9tYXAoJmthaW9teV9tYXApOwotfQotCi1tb2R1bGVfaW5pdChpbml0X3JjX21hcF9rYWlvbXkpCi1tb2R1bGVfZXhpdChleGl0X3JjX21hcF9rYWlvbXkpCi0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IoIk1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLWt3b3JsZC0zMTV1LmMgYi9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMta3dvcmxkLTMxNXUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjE4YzgxNy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMta3dvcmxkLTMxNXUuYworKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLS8qIGt3b3JsZC0zMTV1LmggLSBLZXl0YWJsZSBmb3Iga3dvcmxkXzMxNXUgUmVtb3RlIENvbnRyb2xsZXIKLSAqCi0gKiBrZXltYXAgaW1wb3J0ZWQgZnJvbSBpci1rZXltYXBzLmMKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgYnkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0jaW5jbHVkZSA8bWVkaWEvcmMtbWFwLmg+Ci0KLS8qIEt3b3JsZCAzMTVVCi0gKi8KLQotc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBrd29ybGRfMzE1dVtdID0gewotCXsgMHg2MTQzLCBLRVlfUE9XRVIgfSwKLQl7IDB4NjEwMSwgS0VZX1RVTkVSIH0sCQkvKiBzb3VyY2UgKi8KLQl7IDB4NjEwYiwgS0VZX1pPT00gfSwKLQl7IDB4NjEwMywgS0VZX1BPV0VSMiB9LAkJLyogc2h1dGRvd24gKi8KLQotCXsgMHg2MTA0LCBLRVlfMSB9LAotCXsgMHg2MTA4LCBLRVlfMiB9LAotCXsgMHg2MTAyLCBLRVlfMyB9LAotCXsgMHg2MTA5LCBLRVlfQ0hBTk5FTFVQIH0sCi0KLQl7IDB4NjEwZiwgS0VZXzQgfSwKLQl7IDB4NjEwNSwgS0VZXzUgfSwKLQl7IDB4NjEwNiwgS0VZXzYgfSwKLQl7IDB4NjEwNywgS0VZX0NIQU5ORUxET1dOIH0sCi0KLQl7IDB4NjEwYywgS0VZXzcgfSwKLQl7IDB4NjEwZCwgS0VZXzggfSwKLQl7IDB4NjEwYSwgS0VZXzkgfSwKLQl7IDB4NjEwZSwgS0VZX1ZPTFVNRVVQIH0sCi0KLQl7IDB4NjExMCwgS0VZX0xBU1QgfSwKLQl7IDB4NjExMSwgS0VZXzAgfSwKLQl7IDB4NjExMiwgS0VZX0VOVEVSIH0sCi0JeyAweDYxMTMsIEtFWV9WT0xVTUVET1dOIH0sCi0KLQl7IDB4NjExNCwgS0VZX1JFQ09SRCB9LAotCXsgMHg2MTE1LCBLRVlfU1RPUCB9LAotCXsgMHg2MTE2LCBLRVlfUExBWSB9LAotCXsgMHg2MTE3LCBLRVlfTVVURSB9LAotCi0JeyAweDYxMTgsIEtFWV9VUCB9LAotCXsgMHg2MTE5LCBLRVlfRE9XTiB9LAotCXsgMHg2MTFhLCBLRVlfTEVGVCB9LAotCXsgMHg2MTFiLCBLRVlfUklHSFQgfSwKLQotCXsgMHg2MTFjLCBLRVlfUkVEIH0sCi0JeyAweDYxMWQsIEtFWV9HUkVFTiB9LAotCXsgMHg2MTFlLCBLRVlfWUVMTE9XIH0sCi0JeyAweDYxMWYsIEtFWV9CTFVFIH0sCi19OwotCi1zdGF0aWMgc3RydWN0IHJjX2tleW1hcCBrd29ybGRfMzE1dV9tYXAgPSB7Ci0JLm1hcCA9IHsKLQkJLnNjYW4gICAgPSBrd29ybGRfMzE1dSwKLQkJLnNpemUgICAgPSBBUlJBWV9TSVpFKGt3b3JsZF8zMTV1KSwKLQkJLmlyX3R5cGUgPSBJUl9UWVBFX05FQywKLQkJLm5hbWUgICAgPSBSQ19NQVBfS1dPUkxEXzMxNVUsCi0JfQotfTsKLQotc3RhdGljIGludCBfX2luaXQgaW5pdF9yY19tYXBfa3dvcmxkXzMxNXUodm9pZCkKLXsKLQlyZXR1cm4gaXJfcmVnaXN0ZXJfbWFwKCZrd29ybGRfMzE1dV9tYXApOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yY19tYXBfa3dvcmxkXzMxNXUodm9pZCkKLXsKLQlpcl91bnJlZ2lzdGVyX21hcCgma3dvcmxkXzMxNXVfbWFwKTsKLX0KLQotbW9kdWxlX2luaXQoaW5pdF9yY19tYXBfa3dvcmxkXzMxNXUpCi1tb2R1bGVfZXhpdChleGl0X3JjX21hcF9rd29ybGRfMzE1dSkKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMta3dvcmxkLXBsdXMtdHYtYW5hbG9nLmMgYi9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMta3dvcmxkLXBsdXMtdHYtYW5hbG9nLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2NjczMmYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLWt3b3JsZC1wbHVzLXR2LWFuYWxvZy5jCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotLyoga3dvcmxkLXBsdXMtdHYtYW5hbG9nLmggLSBLZXl0YWJsZSBmb3Iga3dvcmxkX3BsdXNfdHZfYW5hbG9nIFJlbW90ZSBDb250cm9sbGVyCi0gKgotICoga2V5bWFwIGltcG9ydGVkIGZyb20gaXIta2V5bWFwcy5jCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDEwIGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2luY2x1ZGUgPG1lZGlhL3JjLW1hcC5oPgotCi0vKiBLd29ybGQgUGx1cyBUViBBbmFsb2cgTGl0ZSBQQ0kgSVIKLSAgIE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkBpbmZyYWRlYWQub3JnPgotICovCi0KLXN0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUga3dvcmxkX3BsdXNfdHZfYW5hbG9nW10gPSB7Ci0JeyAweDBjLCBLRVlfUFJPRzEgfSwJCS8qIEt3b3JsZCBrZXkgKi8KLQl7IDB4MTYsIEtFWV9DTE9TRUNEIH0sCQkvKiAtPiApICovCi0JeyAweDFkLCBLRVlfUE9XRVIyIH0sCi0KLQl7IDB4MDAsIEtFWV8xIH0sCi0JeyAweDAxLCBLRVlfMiB9LAotCXsgMHgwMiwgS0VZXzMgfSwJCS8qIFR3byBrZXlzIGhhdmUgdGhlIHNhbWUgY29kZTogMyBhbmQgbGVmdCAqLwotCXsgMHgwMywgS0VZXzQgfSwJCS8qIFR3byBrZXlzIGhhdmUgdGhlIHNhbWUgY29kZTogMyBhbmQgcmlnaHQgKi8KLQl7IDB4MDQsIEtFWV81IH0sCi0JeyAweDA1LCBLRVlfNiB9LAotCXsgMHgwNiwgS0VZXzcgfSwKLQl7IDB4MDcsIEtFWV84IH0sCi0JeyAweDA4LCBLRVlfOSB9LAotCXsgMHgwYSwgS0VZXzAgfSwKLQotCXsgMHgwOSwgS0VZX0FHQUlOIH0sCi0JeyAweDE0LCBLRVlfTVVURSB9LAotCi0JeyAweDIwLCBLRVlfVVAgfSwKLQl7IDB4MjEsIEtFWV9ET1dOIH0sCi0JeyAweDBiLCBLRVlfRU5URVIgfSwKLQotCXsgMHgxMCwgS0VZX0NIQU5ORUxVUCB9LAotCXsgMHgxMSwgS0VZX0NIQU5ORUxET1dOIH0sCi0KLQkvKiBDb3VsZG4ndCBtYXAga2V5IGxlZnQva2V5IHJpZ2h0IHNpbmNlIHRob3NlCi0JICAgY29uZmxpY3Qgd2l0aCAnMycgYW5kICc0JyBzY2FuY29kZXMKLQkgICBJIGR1bm5vIHdoYXQgdGhlIG9yaWdpbmFsIGRyaXZlciBkb2VzCi0JICovCi0KLQl7IDB4MTMsIEtFWV9WT0xVTUVVUCB9LAotCXsgMHgxMiwgS0VZX1ZPTFVNRURPV04gfSwKLQotCS8qIFRoZSBsb3dlciBwYXJ0IG9mIHRoZSBJUgotCSAgIFRoZXJlIGFyZSBzZXZlcmFsIGR1cGxpY2F0ZWQga2V5Y29kZXMgdGhlcmUuCi0JICAgTW9zdCBvZiB0aGVtIGNvbmZsaWN0IHdpdGggZGlnaXRzLgotCSAgIEFkZCBtYXBwaW5ncyBqdXN0IHRvIHRoZSB1bnVzZWQgc2NhbmNvZGVzLgotCSAgIFNvbWVob3csIHRoZSBvcmlnaW5hbCBkcml2ZXIgaGFzIGEgd2F5IHRvIGtub3csCi0JICAgYnV0IHRoaXMgZG9lc24ndCBzZWVtIHRvIGJlIG9uIHNvbWUgR1BJTy4KLQkgICBBbHNvLCBpdCBpcyBub3QgcmVsYXRlZCB0byB0aGUgdGltZSBiZXR3ZWVuIGtleXVwCi0JICAgYW5kIGtleWRvd24uCi0JICovCi0JeyAweDE5LCBLRVlfVElNRX0sCQkvKiBUaW1lc2hpZnQgKi8KLQl7IDB4MWEsIEtFWV9TVE9QfSwKLQl7IDB4MWIsIEtFWV9SRUNPUkR9LAotCi0JeyAweDIyLCBLRVlfVEVYVH0sCi0KLQl7IDB4MTUsIEtFWV9BVURJT30sCQkvKiAoKCopKSAqLwotCXsgMHgwZiwgS0VZX1pPT019LAotCXsgMHgxYywgS0VZX0NBTUVSQX0sCQkvKiBzbmFwc2hvdCAqLwotCi0JeyAweDE4LCBLRVlfUkVEfSwJCS8qIEIgKi8KLQl7IDB4MjMsIEtFWV9HUkVFTn0sCQkvKiBDICovCi19OwotCi1zdGF0aWMgc3RydWN0IHJjX2tleW1hcCBrd29ybGRfcGx1c190dl9hbmFsb2dfbWFwID0gewotCS5tYXAgPSB7Ci0JCS5zY2FuICAgID0ga3dvcmxkX3BsdXNfdHZfYW5hbG9nLAotCQkuc2l6ZSAgICA9IEFSUkFZX1NJWkUoa3dvcmxkX3BsdXNfdHZfYW5hbG9nKSwKLQkJLmlyX3R5cGUgPSBJUl9UWVBFX1VOS05PV04sCS8qIExlZ2FjeSBJUiB0eXBlICovCi0JCS5uYW1lICAgID0gUkNfTUFQX0tXT1JMRF9QTFVTX1RWX0FOQUxPRywKLQl9Ci19OwotCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcF9rd29ybGRfcGx1c190dl9hbmFsb2codm9pZCkKLXsKLQlyZXR1cm4gaXJfcmVnaXN0ZXJfbWFwKCZrd29ybGRfcGx1c190dl9hbmFsb2dfbWFwKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGV4aXRfcmNfbWFwX2t3b3JsZF9wbHVzX3R2X2FuYWxvZyh2b2lkKQotewotCWlyX3VucmVnaXN0ZXJfbWFwKCZrd29ybGRfcGx1c190dl9hbmFsb2dfbWFwKTsKLX0KLQotbW9kdWxlX2luaXQoaW5pdF9yY19tYXBfa3dvcmxkX3BsdXNfdHZfYW5hbG9nKQotbW9kdWxlX2V4aXQoZXhpdF9yY19tYXBfa3dvcmxkX3BsdXNfdHZfYW5hbG9nKQotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1sZWFkdGVrLXkwNGcwMDUxLmMgYi9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtbGVhZHRlay15MDRnMDA1MS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTIxMzE1Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1sZWFkdGVrLXkwNGcwMDUxLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0vKgotICogTGVhZFRlayBZMDRHMDA1MSByZW1vdGUgY29udHJvbGxlciBrZXl0YWJsZQotICoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBbnR0aSBQYWxvc2FhcmkgPGNyb3BlQGlraS5maT4KLSAqCi0gKiAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqICAgIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiAgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgotICovCi0KLSNpbmNsdWRlIDxtZWRpYS9yYy1tYXAuaD4KLQotc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBsZWFkdGVrX3kwNGcwMDUxW10gPSB7Ci0JeyAweDAzMDAsIEtFWV9QT1dFUjIgfSwKLQl7IDB4MDMwMywgS0VZX1NDUkVFTiB9LAotCXsgMHgwMzA0LCBLRVlfUklHSFQgfSwKLQl7IDB4MDMwNSwgS0VZXzEgfSwKLQl7IDB4MDMwNiwgS0VZXzIgfSwKLQl7IDB4MDMwNywgS0VZXzMgfSwKLQl7IDB4MDMwOCwgS0VZX0xFRlQgfSwKLQl7IDB4MDMwOSwgS0VZXzQgfSwKLQl7IDB4MDMwYSwgS0VZXzUgfSwKLQl7IDB4MDMwYiwgS0VZXzYgfSwKLQl7IDB4MDMwYywgS0VZX1VQIH0sCi0JeyAweDAzMGQsIEtFWV83IH0sCi0JeyAweDAzMGUsIEtFWV84IH0sCi0JeyAweDAzMGYsIEtFWV85IH0sCi0JeyAweDAzMTAsIEtFWV9ET1dOIH0sCi0JeyAweDAzMTEsIEtFWV9BR0FJTiB9LAotCXsgMHgwMzEyLCBLRVlfMCB9LAotCXsgMHgwMzEzLCBLRVlfT0sgfSwgICAgICAgICAgICAgIC8qIDFzdCBvayAqLwotCXsgMHgwMzE0LCBLRVlfTVVURSB9LAotCXsgMHgwMzE2LCBLRVlfT0sgfSwgICAgICAgICAgICAgIC8qIDJuZCBvayAqLwotCXsgMHgwMzFlLCBLRVlfVklERU8gfSwgICAgICAgICAgIC8qIDJuZCB2aWRlbyAqLwotCXsgMHgwMzFiLCBLRVlfQVVESU8gfSwKLQl7IDB4MDMxZiwgS0VZX1RFWFQgfSwKLQl7IDB4MDM0MCwgS0VZX1NMRUVQIH0sCi0JeyAweDAzNDEsIEtFWV9ET1QgfSwKLQl7IDB4MDM0MiwgS0VZX1JFV0lORCB9LAotCXsgMHgwMzQzLCBLRVlfUExBWSB9LAotCXsgMHgwMzQ0LCBLRVlfRkFTVEZPUldBUkQgfSwKLQl7IDB4MDM0NSwgS0VZX1RJTUUgfSwKLQl7IDB4MDM0NiwgS0VZX1NUT1AgfSwgICAgICAgICAgICAvKiAybmQgc3RvcCAqLwotCXsgMHgwMzQ3LCBLRVlfUkVDT1JEIH0sCi0JeyAweDAzNDgsIEtFWV9DQU1FUkEgfSwKLQl7IDB4MDM0OSwgS0VZX0VTQyB9LAotCXsgMHgwMzRhLCBLRVlfTkVXIH0sCi0JeyAweDAzNGIsIEtFWV9SRUQgfSwKLQl7IDB4MDM0YywgS0VZX0dSRUVOIH0sCi0JeyAweDAzNGQsIEtFWV9ZRUxMT1cgfSwKLQl7IDB4MDM0ZSwgS0VZX0JMVUUgfSwKLQl7IDB4MDM0ZiwgS0VZX01FTlUgfSwKLQl7IDB4MDM1MCwgS0VZX1NUT1AgfSwgICAgICAgICAgICAvKiAxc3Qgc3RvcCAqLwotCXsgMHgwMzUxLCBLRVlfQ0hBTk5FTCB9LAotCXsgMHgwMzUyLCBLRVlfVklERU8gfSwgICAgICAgICAgIC8qIDFzdCB2aWRlbyAqLwotCXsgMHgwMzUzLCBLRVlfRVBHIH0sCi0JeyAweDAzNTQsIEtFWV9QUkVWSU9VUyB9LAotCXsgMHgwMzU1LCBLRVlfTkVYVCB9LAotCXsgMHgwMzU2LCBLRVlfVFYgfSwKLQl7IDB4MDM1YSwgS0VZX1ZPTFVNRURPV04gfSwKLQl7IDB4MDM1YiwgS0VZX0NIQU5ORUxVUCB9LAotCXsgMHgwMzVlLCBLRVlfVk9MVU1FVVAgfSwKLQl7IDB4MDM1ZiwgS0VZX0NIQU5ORUxET1dOIH0sCi19OwotCi1zdGF0aWMgc3RydWN0IHJjX2tleW1hcCBsZWFkdGVrX3kwNGcwMDUxX21hcCA9IHsKLQkubWFwID0gewotCQkuc2NhbiAgICA9IGxlYWR0ZWtfeTA0ZzAwNTEsCi0JCS5zaXplICAgID0gQVJSQVlfU0laRShsZWFkdGVrX3kwNGcwMDUxKSwKLQkJLmlyX3R5cGUgPSBJUl9UWVBFX05FQywKLQkJLm5hbWUgICAgPSBSQ19NQVBfTEVBRFRFS19ZMDRHMDA1MSwKLQl9Ci19OwotCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcF9sZWFkdGVrX3kwNGcwMDUxKHZvaWQpCi17Ci0JcmV0dXJuIGlyX3JlZ2lzdGVyX21hcCgmbGVhZHRla195MDRnMDA1MV9tYXApOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yY19tYXBfbGVhZHRla195MDRnMDA1MSh2b2lkKQotewotCWlyX3VucmVnaXN0ZXJfbWFwKCZsZWFkdGVrX3kwNGcwMDUxX21hcCk7Ci19Ci0KLW1vZHVsZV9pbml0KGluaXRfcmNfbWFwX2xlYWR0ZWtfeTA0ZzAwNTEpCi1tb2R1bGVfZXhpdChleGl0X3JjX21hcF9sZWFkdGVrX3kwNGcwMDUxKQotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJBbnR0aSBQYWxvc2FhcmkgPGNyb3BlQGlraS5maT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1saXJjLmMgYi9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtbGlyYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0M2ZjZjkwLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1saXJjLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0vKiByYy1saXJjLmMgLSBFbXB0eSBkdW1teSBrZXl0YWJsZSwgZm9yIHVzZSB3aGVuIGl0cyBwcmVmZXJyZWQgdG8gcGFzcwotICogYWxsIHJhdyBJUiBkYXRhIHRvIHRoZSBsaXJjIHVzZXJzcGFjZSBkZWNvZGVyLgotICoKLSAqIENvcHlyaWdodCAoYykgMjAxMCBieSBKYXJvZCBXaWxzb24gPGphcm9kQHJlZGhhdC5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0jaW5jbHVkZSA8bWVkaWEvaXItY29yZS5oPgotCi1zdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGxpcmNbXSA9IHsKLQl7IH0sCi19OwotCi1zdGF0aWMgc3RydWN0IHJjX2tleW1hcCBsaXJjX21hcCA9IHsKLQkubWFwID0gewotCQkuc2NhbiAgICA9IGxpcmMsCi0JCS5zaXplICAgID0gQVJSQVlfU0laRShsaXJjKSwKLQkJLmlyX3R5cGUgPSBJUl9UWVBFX0xJUkMsCi0JCS5uYW1lICAgID0gUkNfTUFQX0xJUkMsCi0JfQotfTsKLQotc3RhdGljIGludCBfX2luaXQgaW5pdF9yY19tYXBfbGlyYyh2b2lkKQotewotCXJldHVybiBpcl9yZWdpc3Rlcl9tYXAoJmxpcmNfbWFwKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGV4aXRfcmNfbWFwX2xpcmModm9pZCkKLXsKLQlpcl91bnJlZ2lzdGVyX21hcCgmbGlyY19tYXApOwotfQotCi1tb2R1bGVfaW5pdChpbml0X3JjX21hcF9saXJjKQotbW9kdWxlX2V4aXQoZXhpdF9yY19tYXBfbGlyYykKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiSmFyb2QgV2lsc29uIDxqYXJvZEByZWRoYXQuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLWxtZTI1MTAuYyBiL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1sbWUyNTEwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwZGNmMGIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLWxtZTI1MTAuYworKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLS8qIExNRTI1MTAgcmVtb3RlIGNvbnRyb2wKLSAqCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDEwIE1hbGNvbG0gUHJpZXN0bGV5ICh0dmJveHNweUBnbWFpbC5jb20pCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0jaW5jbHVkZSA8bWVkaWEvcmMtbWFwLmg+Ci0KLQotc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBsbWUyNTEwX3JjW10gPSB7Ci0JeyAweGJhNDUsIEtFWV8wIH0sCi0JeyAweGEwNWYsIEtFWV8xIH0sCi0JeyAweGFmNTAsIEtFWV8yIH0sCi0JeyAweGEyNWQsIEtFWV8zIH0sCi0JeyAweGJlNDEsIEtFWV80IH0sCi0JeyAweGY1MGEsIEtFWV81IH0sCi0JeyAweGJkNDIsIEtFWV82IH0sCi0JeyAweGI4NDcsIEtFWV83IH0sCi0JeyAweGI2NDksIEtFWV84IH0sCi0JeyAweGZhMDUsIEtFWV85IH0sCi0JeyAweGJjNDMsIEtFWV9QT1dFUiB9LAotCXsgMHhiOTQ2LCBLRVlfU1VCVElUTEUgfSwKLQl7IDB4ZjkwNiwgS0VZX1BBVVNFIH0sCi0JeyAweGZjMDMsIEtFWV9NRURJQV9SRVBFQVR9LAotCXsgMHhmZDAyLCBLRVlfUEFVU0UgfSwKLQl7IDB4YTE1ZSwgS0VZX1ZPTFVNRVVQIH0sCi0JeyAweGEzNWMsIEtFWV9WT0xVTUVET1dOIH0sCi0JeyAweGY2MDksIEtFWV9DSEFOTkVMVVAgfSwKLQl7IDB4ZTUxYSwgS0VZX0NIQU5ORUxET1dOIH0sCi0JeyAweGUxMWUsIEtFWV9QTEFZIH0sCi0JeyAweGU0MWIsIEtFWV9aT09NIH0sCi0JeyAweGE2NTksIEtFWV9NVVRFIH0sCi0JeyAweGE1NWEsIEtFWV9UViB9LAotCXsgMHhlNzE4LCBLRVlfUkVDT1JEIH0sCi0JeyAweGY4MDcsIEtFWV9FUEcgfSwKLQl7IDB4ZmUwMSwgS0VZX1NUT1AgfSwKLQotfTsKLQotc3RhdGljIHN0cnVjdCByY19rZXltYXAgbG1lMjUxMF9tYXAgPSB7Ci0JLm1hcCA9IHsKLQkJLnNjYW4gICAgPSBsbWUyNTEwX3JjLAotCQkuc2l6ZSAgICA9IEFSUkFZX1NJWkUobG1lMjUxMF9yYyksCi0JCS5pcl90eXBlID0gSVJfVFlQRV9VTktOT1dOLAotCQkubmFtZSAgICA9IFJDX01BUF9MTUUyNTEwLAotCX0KLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGluaXRfcmNfbG1lMjUxMF9tYXAodm9pZCkKLXsKLQlyZXR1cm4gaXJfcmVnaXN0ZXJfbWFwKCZsbWUyNTEwX21hcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3JjX2xtZTI1MTBfbWFwKHZvaWQpCi17Ci0JaXJfdW5yZWdpc3Rlcl9tYXAoJmxtZTI1MTBfbWFwKTsKLX0KLQotbW9kdWxlX2luaXQoaW5pdF9yY19sbWUyNTEwX21hcCkKLW1vZHVsZV9leGl0KGV4aXRfcmNfbG1lMjUxMF9tYXApCi0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IoIk1hbGNvbG0gUHJpZXN0bGV5IHR2Ym94c3B5QGdtYWlsLmNvbSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLW1hbmxpLmMgYi9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtbWFubGkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGY1OTBiMy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtbWFubGkuYworKysgL2Rldi9udWxsCkBAIC0xLDEzNCArMCwwIEBACi0vKiBtYW5saS5oIC0gS2V5dGFibGUgZm9yIG1hbmxpIFJlbW90ZSBDb250cm9sbGVyCi0gKgotICoga2V5bWFwIGltcG9ydGVkIGZyb20gaXIta2V5bWFwcy5jCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDEwIGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2luY2x1ZGUgPG1lZGlhL3JjLW1hcC5oPgotCi0vKiBNaWNoYWVsIFRva2FyZXYgPG1qdEB0bHMubXNrLnJ1PgotICAga2V5dGFibGUgaXMgdXNlZCBieSBNQU5MSSBNVFYwMFsweDBjXSBhbmQgQmVob2xkVFYgNDBbMTNdIGF0Ci0gICBsZWFzdCwgYW5kIHByb2JhYmx5IG90aGVyIGNhcmRzIHRvby4KLSAgIFRoZSAiYXNjaWktYXJ0IHBpY3R1cmUiIGJlbG93IChpbiBjb21tZW50cywgZmlyc3Qgcm93Ci0gICBpcyB0aGUga2V5Y29kZSBpbiBoZXgsIGFuZCBzdWJzZXF1ZW50IHJvdyhzKSBzaG93cwotICAgdGhlIGJ1dHRvbiBsYWJlbHMgKHNldmVyYWwgdmFyaWFudHMgd2hlbiBhcHByb3ByaWF0ZSkKLSAgIGhlbHBzIHRvIGRlc2NpZGUgd2hpY2gga2V5Y29kZXMgdG8gYXNzaWduIHRvIHRoZSBidXR0b25zLgotICovCi0KLXN0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgbWFubGlbXSA9IHsKLQotCS8qICAweDFjICAgICAgICAgICAgMHgxMiAgKgotCSAqIEZVTkNUSU9OICAgICAgICAgUE9XRVIgKgotCSAqICAgRk0gICAgICAgICAgICAgICh8KSAgKgotCSAqICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQl7IDB4MWMsIEtFWV9SQURJTyB9LAkvKlhYWCovCi0JeyAweDEyLCBLRVlfUE9XRVIgfSwKLQotCS8qICAweDAxICAgIDB4MDIgICAgMHgwMyAgKgotCSAqICAgMSAgICAgICAyICAgICAgIDMgICAgKgotCSAqICAgICAgICAgICAgICAgICAgICAgICAgKgotCSAqICAweDA0ICAgIDB4MDUgICAgMHgwNiAgKgotCSAqICAgNCAgICAgICA1ICAgICAgIDYgICAgKgotCSAqICAgICAgICAgICAgICAgICAgICAgICAgKgotCSAqICAweDA3ICAgIDB4MDggICAgMHgwOSAgKgotCSAqICAgNyAgICAgICA4ICAgICAgIDkgICAgKgotCSAqICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQl7IDB4MDEsIEtFWV8xIH0sCi0JeyAweDAyLCBLRVlfMiB9LAotCXsgMHgwMywgS0VZXzMgfSwKLQl7IDB4MDQsIEtFWV80IH0sCi0JeyAweDA1LCBLRVlfNSB9LAotCXsgMHgwNiwgS0VZXzYgfSwKLQl7IDB4MDcsIEtFWV83IH0sCi0JeyAweDA4LCBLRVlfOCB9LAotCXsgMHgwOSwgS0VZXzkgfSwKLQotCS8qICAweDBhICAgIDB4MDAgICAgMHgxNyAgKgotCSAqIFJFQ0FMTCAgICAwICAgICAgKzEwMCAgKgotCSAqICAgICAgICAgICAgICAgICAgUExVUyAgKgotCSAqICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQl7IDB4MGEsIEtFWV9BR0FJTiB9LAkvKlhYWCBLRVlfUkVXSU5EPyAqLwotCXsgMHgwMCwgS0VZXzAgfSwKLQl7IDB4MTcsIEtFWV9ESUdJVFMgfSwJLypYWFgqLwotCi0JLyogIDB4MTQgICAgICAgICAgICAweDEwICAqCi0JICogIE1FTlUgICAgICAgICAgICBJTkZPICAqCi0JICogIE9TRCAgICAgICAgICAgICAgICAgICAqLwotCXsgMHgxNCwgS0VZX01FTlUgfSwKLQl7IDB4MTAsIEtFWV9JTkZPIH0sCi0KLQkvKiAgICAgICAgICAweDBiICAgICAgICAgICoKLQkgKiAgICAgICAgICAgVXAgICAgICAgICAgICoKLQkgKiAgICAgICAgICAgICAgICAgICAgICAgICoKLQkgKiAgMHgxOCAgICAweDE2ICAgIDB4MGMgICoKLQkgKiAgTGVmdCAgICAgT2sgICAgIFJpZ2h0ICoKLQkgKiAgICAgICAgICAgICAgICAgICAgICAgICoKLQkgKiAgICAgICAgIDB4MDE1ICAgICAgICAgICoKLQkgKiAgICAgICAgIERvd24gICAgICAgICAgICoKLQkgKiAgICAgICAgICAgICAgICAgICAgICAgICovCi0JeyAweDBiLCBLRVlfVVAgfSwKLQl7IDB4MTgsIEtFWV9MRUZUIH0sCi0JeyAweDE2LCBLRVlfT0sgfSwJLypYWFggS0VZX1NFTEVDVD8gS0VZX0VOVEVSPyAqLwotCXsgMHgwYywgS0VZX1JJR0hUIH0sCi0JeyAweDE1LCBLRVlfRE9XTiB9LAotCi0JLyogIDB4MTEgICAgICAgICAgICAweDBkICAqCi0JICogIFRWL0FWICAgICAgICAgICBNT0RFICAqCi0JICogIFNPVVJDRSAgICAgICAgIFNURVJFTyAqCi0JICogICAgICAgICAgICAgICAgICAgICAgICAqLwotCXsgMHgxMSwgS0VZX1RWIH0sCS8qWFhYKi8KLQl7IDB4MGQsIEtFWV9NT0RFIH0sCS8qWFhYIHRoZXJlJ3Mgbm8gS0VZX1NURVJFTwkqLwotCi0JLyogIDB4MGYgICAgMHgxYiAgICAweDFhICAqCi0JICogIEFVRElPICAgVm9sKyAgICBDaGFuKyAqCi0JICogICAgICAgIFRJTUVTSElGVD8/PyAgICAqCi0JICogICAgICAgICAgICAgICAgICAgICAgICAqCi0JICogIDB4MGUgICAgMHgxZiAgICAweDFlICAqCi0JICogIFNMRUVQICAgVm9sLSAgICBDaGFuLSAqCi0JICogICAgICAgICAgICAgICAgICAgICAgICAqLwotCXsgMHgwZiwgS0VZX0FVRElPIH0sCi0JeyAweDFiLCBLRVlfVk9MVU1FVVAgfSwKLQl7IDB4MWEsIEtFWV9DSEFOTkVMVVAgfSwKLQl7IDB4MGUsIEtFWV9USU1FIH0sCi0JeyAweDFmLCBLRVlfVk9MVU1FRE9XTiB9LAotCXsgMHgxZSwgS0VZX0NIQU5ORUxET1dOIH0sCi0KLQkvKiAgICAgICAgIDB4MTMgICAgIDB4MTkgICoKLQkgKiAgICAgICAgIE1VVEUgICBTTkFQU0hPVCoKLQkgKiAgICAgICAgICAgICAgICAgICAgICAgICovCi0JeyAweDEzLCBLRVlfTVVURSB9LAotCXsgMHgxOSwgS0VZX0NBTUVSQSB9LAotCi0JLyogMHgxZCB1bnVzZWQgPyAqLwotfTsKLQotc3RhdGljIHN0cnVjdCByY19rZXltYXAgbWFubGlfbWFwID0gewotCS5tYXAgPSB7Ci0JCS5zY2FuICAgID0gbWFubGksCi0JCS5zaXplICAgID0gQVJSQVlfU0laRShtYW5saSksCi0JCS5pcl90eXBlID0gSVJfVFlQRV9VTktOT1dOLAkvKiBMZWdhY3kgSVIgdHlwZSAqLwotCQkubmFtZSAgICA9IFJDX01BUF9NQU5MSSwKLQl9Ci19OwotCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcF9tYW5saSh2b2lkKQotewotCXJldHVybiBpcl9yZWdpc3Rlcl9tYXAoJm1hbmxpX21hcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3JjX21hcF9tYW5saSh2b2lkKQotewotCWlyX3VucmVnaXN0ZXJfbWFwKCZtYW5saV9tYXApOwotfQotCi1tb2R1bGVfaW5pdChpbml0X3JjX21hcF9tYW5saSkKLW1vZHVsZV9leGl0KGV4aXRfcmNfbWFwX21hbmxpKQotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1tc2ktZGlnaXZveC1paS5jIGIvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLW1zaS1kaWdpdm94LWlpLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3MjM3ZmIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLW1zaS1kaWdpdm94LWlpLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0vKgotICogTVNJIERJR0lWT1ggbWluaSBJSSByZW1vdGUgY29udHJvbGxlciBrZXl0YWJsZQotICoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBbnR0aSBQYWxvc2FhcmkgPGNyb3BlQGlraS5maT4KLSAqCi0gKiAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqICAgIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiAgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgotICovCi0KLSNpbmNsdWRlIDxtZWRpYS9yYy1tYXAuaD4KLQotc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBtc2lfZGlnaXZveF9paVtdID0gewotCXsgMHgwMDAyLCBLRVlfMiB9LAotCXsgMHgwMDAzLCBLRVlfVVAgfSwgICAgICAgICAgICAgIC8qIHVwICovCi0JeyAweDAwMDQsIEtFWV8zIH0sCi0JeyAweDAwMDUsIEtFWV9DSEFOTkVMRE9XTiB9LAotCXsgMHgwMDA4LCBLRVlfNSB9LAotCXsgMHgwMDA5LCBLRVlfMCB9LAotCXsgMHgwMDBiLCBLRVlfOCB9LAotCXsgMHgwMDBkLCBLRVlfRE9XTiB9LCAgICAgICAgICAgIC8qIGRvd24gKi8KLQl7IDB4MDAxMCwgS0VZXzkgfSwKLQl7IDB4MDAxMSwgS0VZXzcgfSwKLQl7IDB4MDAxNCwgS0VZX1ZPTFVNRVVQIH0sCi0JeyAweDAwMTUsIEtFWV9DSEFOTkVMVVAgfSwKLQl7IDB4MDAxNiwgS0VZX09LIH0sCi0JeyAweDAwMTcsIEtFWV9QT1dFUjIgfSwKLQl7IDB4MDAxYSwgS0VZXzEgfSwKLQl7IDB4MDAxYywgS0VZXzQgfSwKLQl7IDB4MDAxZCwgS0VZXzYgfSwKLQl7IDB4MDAxZiwgS0VZX1ZPTFVNRURPV04gfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmNfa2V5bWFwIG1zaV9kaWdpdm94X2lpX21hcCA9IHsKLQkubWFwID0gewotCQkuc2NhbiAgICA9IG1zaV9kaWdpdm94X2lpLAotCQkuc2l6ZSAgICA9IEFSUkFZX1NJWkUobXNpX2RpZ2l2b3hfaWkpLAotCQkuaXJfdHlwZSA9IElSX1RZUEVfTkVDLAotCQkubmFtZSAgICA9IFJDX01BUF9NU0lfRElHSVZPWF9JSSwKLQl9Ci19OwotCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcF9tc2lfZGlnaXZveF9paSh2b2lkKQotewotCXJldHVybiBpcl9yZWdpc3Rlcl9tYXAoJm1zaV9kaWdpdm94X2lpX21hcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3JjX21hcF9tc2lfZGlnaXZveF9paSh2b2lkKQotewotCWlyX3VucmVnaXN0ZXJfbWFwKCZtc2lfZGlnaXZveF9paV9tYXApOwotfQotCi1tb2R1bGVfaW5pdChpbml0X3JjX21hcF9tc2lfZGlnaXZveF9paSkKLW1vZHVsZV9leGl0KGV4aXRfcmNfbWFwX21zaV9kaWdpdm94X2lpKQotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJBbnR0aSBQYWxvc2FhcmkgPGNyb3BlQGlraS5maT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1tc2ktZGlnaXZveC1paWkuYyBiL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1tc2ktZGlnaXZveC1paWkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODgyMDU2ZS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtbXNpLWRpZ2l2b3gtaWlpLmMKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi0vKgotICogTVNJIERJR0lWT1ggbWluaSBJSUkgcmVtb3RlIGNvbnRyb2xsZXIga2V5dGFibGUKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQW50dGkgUGFsb3NhYXJpIDxjcm9wZUBpa2kuZmk+Ci0gKgotICogICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiAgICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8bWVkaWEvcmMtbWFwLmg+Ci0KLS8qIE1TSSBESUdJVk9YIG1pbmkgSUlJICovCi0vKiBVc2VzIE5FQyBleHRlbmRlZCAweDYxZDYuICovCi0vKiBUaGlzIHJlbW90ZSBzZWVtcyB0byBiZSBzYW1lIGFzIHJjLWt3b3JsZC0zMTV1LmMuIEFueWhvdywgYWRkIG5ldyByZW1vdGUKLSAgIHNpbmNlIHJjLWt3b3JsZC0zMTV1LmMgbGFja3MgTkVDIGV4dGVuZGVkIGFkZHJlc3MgYnl0ZS4gKi8KLXN0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgbXNpX2RpZ2l2b3hfaWlpW10gPSB7Ci0JeyAweDYxZDYwMSwgS0VZX1ZJREVPIH0sICAgICAgICAgICAvKiBTb3VyY2UgKi8KLQl7IDB4NjFkNjAyLCBLRVlfMyB9LAotCXsgMHg2MWQ2MDMsIEtFWV9QT1dFUiB9LCAgICAgICAgICAgLyogU2h1dERvd24gKi8KLQl7IDB4NjFkNjA0LCBLRVlfMSB9LAotCXsgMHg2MWQ2MDUsIEtFWV81IH0sCi0JeyAweDYxZDYwNiwgS0VZXzYgfSwKLQl7IDB4NjFkNjA3LCBLRVlfQ0hBTk5FTERPV04gfSwgICAgIC8qIENILSAqLwotCXsgMHg2MWQ2MDgsIEtFWV8yIH0sCi0JeyAweDYxZDYwOSwgS0VZX0NIQU5ORUxVUCB9LCAgICAgICAvKiBDSCsgKi8KLQl7IDB4NjFkNjBhLCBLRVlfOSB9LAotCXsgMHg2MWQ2MGIsIEtFWV9aT09NIH0sICAgICAgICAgICAgLyogWm9vbSAqLwotCXsgMHg2MWQ2MGMsIEtFWV83IH0sCi0JeyAweDYxZDYwZCwgS0VZXzggfSwKLQl7IDB4NjFkNjBlLCBLRVlfVk9MVU1FVVAgfSwgICAgICAgIC8qIFZvbCsgKi8KLQl7IDB4NjFkNjBmLCBLRVlfNCB9LAotCXsgMHg2MWQ2MTAsIEtFWV9FU0MgfSwgICAgICAgICAgICAgLyogW2JhY2sgdXAgYXJyb3ddICovCi0JeyAweDYxZDYxMSwgS0VZXzAgfSwKLQl7IDB4NjFkNjEyLCBLRVlfT0sgfSwgICAgICAgICAgICAgIC8qIFtlbnRlciBhcnJvd10gKi8KLQl7IDB4NjFkNjEzLCBLRVlfVk9MVU1FRE9XTiB9LCAgICAgIC8qIFZvbC0gKi8KLQl7IDB4NjFkNjE0LCBLRVlfUkVDT1JEIH0sICAgICAgICAgIC8qIFJlYyAqLwotCXsgMHg2MWQ2MTUsIEtFWV9TVE9QIH0sICAgICAgICAgICAgLyogU3RvcCAqLwotCXsgMHg2MWQ2MTYsIEtFWV9QTEFZIH0sICAgICAgICAgICAgLyogUGxheSAqLwotCXsgMHg2MWQ2MTcsIEtFWV9NVVRFIH0sICAgICAgICAgICAgLyogTXV0ZSAqLwotCXsgMHg2MWQ2MTgsIEtFWV9VUCB9LAotCXsgMHg2MWQ2MTksIEtFWV9ET1dOIH0sCi0JeyAweDYxZDYxYSwgS0VZX0xFRlQgfSwKLQl7IDB4NjFkNjFiLCBLRVlfUklHSFQgfSwKLQl7IDB4NjFkNjFjLCBLRVlfUkVEIH0sCi0JeyAweDYxZDYxZCwgS0VZX0dSRUVOIH0sCi0JeyAweDYxZDYxZSwgS0VZX1lFTExPVyB9LAotCXsgMHg2MWQ2MWYsIEtFWV9CTFVFIH0sCi0JeyAweDYxZDY0MywgS0VZX1BPV0VSMiB9LCAgICAgICAgICAvKiBbcmVkIHBvd2VyIGJ1dHRvbl0gKi8KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmNfa2V5bWFwIG1zaV9kaWdpdm94X2lpaV9tYXAgPSB7Ci0JLm1hcCA9IHsKLQkJLnNjYW4gICAgPSBtc2lfZGlnaXZveF9paWksCi0JCS5zaXplICAgID0gQVJSQVlfU0laRShtc2lfZGlnaXZveF9paWkpLAotCQkuaXJfdHlwZSA9IElSX1RZUEVfTkVDLAotCQkubmFtZSAgICA9IFJDX01BUF9NU0lfRElHSVZPWF9JSUksCi0JfQotfTsKLQotc3RhdGljIGludCBfX2luaXQgaW5pdF9yY19tYXBfbXNpX2RpZ2l2b3hfaWlpKHZvaWQpCi17Ci0JcmV0dXJuIGlyX3JlZ2lzdGVyX21hcCgmbXNpX2RpZ2l2b3hfaWlpX21hcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3JjX21hcF9tc2lfZGlnaXZveF9paWkodm9pZCkKLXsKLQlpcl91bnJlZ2lzdGVyX21hcCgmbXNpX2RpZ2l2b3hfaWlpX21hcCk7Ci19Ci0KLW1vZHVsZV9pbml0KGluaXRfcmNfbWFwX21zaV9kaWdpdm94X2lpaSkKLW1vZHVsZV9leGl0KGV4aXRfcmNfbWFwX21zaV9kaWdpdm94X2lpaSkKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiQW50dGkgUGFsb3NhYXJpIDxjcm9wZUBpa2kuZmk+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtbXNpLXR2YW55d2hlcmUtcGx1cy5jIGIvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLW1zaS10dmFueXdoZXJlLXBsdXMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWI4ZTQyYy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtbXNpLXR2YW55d2hlcmUtcGx1cy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTIzICswLDAgQEAKLS8qIG1zaS10dmFueXdoZXJlLXBsdXMuaCAtIEtleXRhYmxlIGZvciBtc2lfdHZhbnl3aGVyZV9wbHVzIFJlbW90ZSBDb250cm9sbGVyCi0gKgotICoga2V5bWFwIGltcG9ydGVkIGZyb20gaXIta2V5bWFwcy5jCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDEwIGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2luY2x1ZGUgPG1lZGlhL3JjLW1hcC5oPgotCi0vKgotICBLZXljb2RlcyBmb3IgcmVtb3RlIG9uIHRoZSBNU0kgVFZAbnl3aGVyZSBQbHVzLiBUaGUgY29udHJvbGxlciBJQyBvbiB0aGUgY2FyZAotICBpcyBtYXJrZWQgIktTMDAzIi4gVGhlIGNvbnRyb2xsZXIgaXMgSTJDIGF0IGFkZHJlc3MgMHgzMCwgYnV0IGRvZXMgbm90IHNlZW0KLSAgdG8gcmVzcG9uZCB0byBwcm9iZXMgdW50aWwgYSByZWFkIGlzIHBlcmZvcm1lZCBmcm9tIGEgdmFsaWQgZGV2aWNlLgotICBJIGRvbid0IGtub3cgd2h5Li4uCi0KLSAgTm90ZTogVGhpcyByZW1vdGUgbWF5IGJlIG9mIHNpbWlsYXIgb3IgaWRlbnRpY2FsIGRlc2lnbiB0byB0aGUKLSAgUGl4ZWx2aWV3IHJlbW90ZSAoPykuICBUaGUgcmF3IGNvZGVzIGFuZCBkdXBsaWNhdGUgYnV0dG9uIGNvZGVzCi0gIGFwcGVhciB0byBiZSB0aGUgc2FtZS4KLQotICBIZW5yeSBXb25nIDxoZW5yeUBzdHVmZmVkY293Lm5ldD4KLSAgU29tZSBjaGFuZ2VzIHRvIGZvcm1hdHRpbmcgYW5kIGtleWNvZGVzIGJ5IE1hcmsgU2NodWx0eiA8bjl4bWpAeWFob28uY29tPgotKi8KLQotc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBtc2lfdHZhbnl3aGVyZV9wbHVzW10gPSB7Ci0KLS8qICAtLS0tIFJlbW90ZSBCdXR0b24gTGF5b3V0IC0tLS0KLQotICAgIFBPV0VSICAgU09VUkNFICBTQ0FOICAgIE1VVEUKLSAgICBUVi9GTSAgIDEgICAgICAgMiAgICAgICAzCi0gICAgfD4gICAgICA0ICAgICAgIDUgICAgICAgNgotICAgIDx8ICAgICAgNyAgICAgICA4ICAgICAgIDkKLSAgICBeXlVQICAgIDAgICAgICAgKyAgICAgICBSRUNBTEwKLSAgICB2dkROICAgIFJFQ09SRCAgU1RPUCAgICBQTEFZCi0KLQlNSU5JTUlaRSAgICAgICAgICBaT09NCi0KLQkJICBDSCsKLSAgICAgIFZPTC0gICAgICAgICAgICAgICAgICAgVk9MKwotCQkgIENILQotCi0JU05BUFNIT1QgICAgICAgICAgIE1UUwotCi0gICAgIDw8ICAgICAgRlVOQyAgICA+PiAgICAgUkVTRVQKLSovCi0KLQl7IDB4MDEsIEtFWV8xIH0sCQkvKiAxICovCi0JeyAweDBiLCBLRVlfMiB9LAkJLyogMiAqLwotCXsgMHgxYiwgS0VZXzMgfSwJCS8qIDMgKi8KLQl7IDB4MDUsIEtFWV80IH0sCQkvKiA0ICovCi0JeyAweDA5LCBLRVlfNSB9LAkJLyogNSAqLwotCXsgMHgxNSwgS0VZXzYgfSwJCS8qIDYgKi8KLQl7IDB4MDYsIEtFWV83IH0sCQkvKiA3ICovCi0JeyAweDBhLCBLRVlfOCB9LAkJLyogOCAqLwotCXsgMHgxMiwgS0VZXzkgfSwJCS8qIDkgKi8KLQl7IDB4MDIsIEtFWV8wIH0sCQkvKiAwICovCi0JeyAweDEwLCBLRVlfS1BQTFVTIH0sCQkvKiArICovCi0JeyAweDEzLCBLRVlfQUdBSU4gfSwJCS8qIFJlY2FsbCAqLwotCi0JeyAweDFlLCBLRVlfUE9XRVIgfSwJCS8qIFBvd2VyICovCi0JeyAweDA3LCBLRVlfVFVORVIgfSwJCS8qIFNvdXJjZSAqLwotCXsgMHgxYywgS0VZX1NFQVJDSCB9LAkJLyogU2NhbiAqLwotCXsgMHgxOCwgS0VZX01VVEUgfSwJCS8qIE11dGUgKi8KLQotCXsgMHgwMywgS0VZX1JBRElPIH0sCQkvKiBUVi9GTSAqLwotCS8qIFRoZSBuZXh0IGZvdXIga2V5cyBhcmUgZHVwbGljYXRlcyB0aGF0IGFwcGVhciB0byBzZW5kIHRoZQotCSAgIHNhbWUgSVIgY29kZSBhcyBDaCssIENoLSwgPj4sIGFuZCA8PCAuICBUaGUgcmF3IGNvZGUgYXNzaWduZWQKLQkgICB0byB0aGVtIGlzIHRoZSBhY3R1YWwgY29kZSArIDB4MjAgLSB0aGV5IHdpbGwgbmV2ZXIgYmUKLQkgICBkZXRlY3RlZCBhcyBzdWNoIHVubGVzcyBzb21lIHdheSBpcyBkaXNjb3ZlcmVkIHRvIGRpc3Rpbmd1aXNoCi0JICAgdGhlc2UgYnV0dG9ucyBmcm9tIHRob3NlIHRoYXQgaGF2ZSB0aGUgc2FtZSBjb2RlLiAqLwotCXsgMHgzZiwgS0VZX1JJR0hUIH0sCQkvKiB8PiBhbmQgQ2grICovCi0JeyAweDM3LCBLRVlfTEVGVCB9LAkJLyogPHwgYW5kIENoLSAqLwotCXsgMHgyYywgS0VZX1VQIH0sCQkvKiBeXlVwIGFuZCA+PiAqLwotCXsgMHgyNCwgS0VZX0RPV04gfSwJCS8qIHZ2RG4gYW5kIDw8ICovCi0KLQl7IDB4MDAsIEtFWV9SRUNPUkQgfSwJCS8qIFJlY29yZCAqLwotCXsgMHgwOCwgS0VZX1NUT1AgfSwJCS8qIFN0b3AgKi8KLQl7IDB4MTEsIEtFWV9QTEFZIH0sCQkvKiBQbGF5ICovCi0KLQl7IDB4MGYsIEtFWV9DTE9TRSB9LAkJLyogTWluaW1pemUgKi8KLQl7IDB4MTksIEtFWV9aT09NIH0sCQkvKiBab29tICovCi0JeyAweDFhLCBLRVlfQ0FNRVJBIH0sCQkvKiBTbmFwc2hvdCAqLwotCXsgMHgwZCwgS0VZX0xBTkdVQUdFIH0sCQkvKiBNVFMgKi8KLQotCXsgMHgxNCwgS0VZX1ZPTFVNRURPV04gfSwJLyogVm9sLSAqLwotCXsgMHgxNiwgS0VZX1ZPTFVNRVVQIH0sCQkvKiBWb2wrICovCi0JeyAweDE3LCBLRVlfQ0hBTk5FTERPV04gfSwJLyogQ2gtICovCi0JeyAweDFmLCBLRVlfQ0hBTk5FTFVQIH0sCS8qIENoKyAqLwotCi0JeyAweDA0LCBLRVlfUkVXSU5EIH0sCQkvKiA8PCAqLwotCXsgMHgwZSwgS0VZX01FTlUgfSwJCS8qIEZ1bmN0aW9uICovCi0JeyAweDBjLCBLRVlfRkFTVEZPUldBUkQgfSwJLyogPj4gKi8KLQl7IDB4MWQsIEtFWV9SRVNUQVJUIH0sCQkvKiBSZXNldCAqLwotfTsKLQotc3RhdGljIHN0cnVjdCByY19rZXltYXAgbXNpX3R2YW55d2hlcmVfcGx1c19tYXAgPSB7Ci0JLm1hcCA9IHsKLQkJLnNjYW4gICAgPSBtc2lfdHZhbnl3aGVyZV9wbHVzLAotCQkuc2l6ZSAgICA9IEFSUkFZX1NJWkUobXNpX3R2YW55d2hlcmVfcGx1cyksCi0JCS5pcl90eXBlID0gSVJfVFlQRV9VTktOT1dOLAkvKiBMZWdhY3kgSVIgdHlwZSAqLwotCQkubmFtZSAgICA9IFJDX01BUF9NU0lfVFZBTllXSEVSRV9QTFVTLAotCX0KLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGluaXRfcmNfbWFwX21zaV90dmFueXdoZXJlX3BsdXModm9pZCkKLXsKLQlyZXR1cm4gaXJfcmVnaXN0ZXJfbWFwKCZtc2lfdHZhbnl3aGVyZV9wbHVzX21hcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3JjX21hcF9tc2lfdHZhbnl3aGVyZV9wbHVzKHZvaWQpCi17Ci0JaXJfdW5yZWdpc3Rlcl9tYXAoJm1zaV90dmFueXdoZXJlX3BsdXNfbWFwKTsKLX0KLQotbW9kdWxlX2luaXQoaW5pdF9yY19tYXBfbXNpX3R2YW55d2hlcmVfcGx1cykKLW1vZHVsZV9leGl0KGV4aXRfcmNfbWFwX21zaV90dmFueXdoZXJlX3BsdXMpCi0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IoIk1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLW1zaS10dmFueXdoZXJlLmMgYi9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtbXNpLXR2YW55d2hlcmUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWY0MTE4NS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtbXNpLXR2YW55d2hlcmUuYworKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS8qIG1zaS10dmFueXdoZXJlLmggLSBLZXl0YWJsZSBmb3IgbXNpX3R2YW55d2hlcmUgUmVtb3RlIENvbnRyb2xsZXIKLSAqCi0gKiBrZXltYXAgaW1wb3J0ZWQgZnJvbSBpci1rZXltYXBzLmMKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgYnkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0jaW5jbHVkZSA8bWVkaWEvcmMtbWFwLmg+Ci0KLS8qIE1TSSBUVkBueXdoZXJlIE1BU1RFUiByZW1vdGUgKi8KLQotc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBtc2lfdHZhbnl3aGVyZVtdID0gewotCS8qIEtleXMgMCB0byA5ICovCi0JeyAweDAwLCBLRVlfMCB9LAotCXsgMHgwMSwgS0VZXzEgfSwKLQl7IDB4MDIsIEtFWV8yIH0sCi0JeyAweDAzLCBLRVlfMyB9LAotCXsgMHgwNCwgS0VZXzQgfSwKLQl7IDB4MDUsIEtFWV81IH0sCi0JeyAweDA2LCBLRVlfNiB9LAotCXsgMHgwNywgS0VZXzcgfSwKLQl7IDB4MDgsIEtFWV84IH0sCi0JeyAweDA5LCBLRVlfOSB9LAotCi0JeyAweDBjLCBLRVlfTVVURSB9LAotCXsgMHgwZiwgS0VZX1NDUkVFTiB9LAkJLyogRnVsbCBTY3JlZW4gKi8KLQl7IDB4MTAsIEtFWV9GTiB9LAkJLyogRnVudGlvbiAqLwotCXsgMHgxMSwgS0VZX1RJTUUgfSwJCS8qIFRpbWUgc2hpZnQgKi8KLQl7IDB4MTIsIEtFWV9QT1dFUiB9LAotCXsgMHgxMywgS0VZX01FRElBIH0sCQkvKiBNVFMgKi8KLQl7IDB4MTQsIEtFWV9TTE9XIH0sCi0JeyAweDE2LCBLRVlfUkVXSU5EIH0sCQkvKiBiYWNrd2FyZCA8PCAqLwotCXsgMHgxNywgS0VZX0VOVEVSIH0sCQkvKiBSZXR1cm4gKi8KLQl7IDB4MTgsIEtFWV9GQVNURk9SV0FSRCB9LAkvKiBmb3J3YXJkID4+ICovCi0JeyAweDFhLCBLRVlfQ0hBTk5FTFVQIH0sCi0JeyAweDFiLCBLRVlfVk9MVU1FVVAgfSwKLQl7IDB4MWUsIEtFWV9DSEFOTkVMRE9XTiB9LAotCXsgMHgxZiwgS0VZX1ZPTFVNRURPV04gfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmNfa2V5bWFwIG1zaV90dmFueXdoZXJlX21hcCA9IHsKLQkubWFwID0gewotCQkuc2NhbiAgICA9IG1zaV90dmFueXdoZXJlLAotCQkuc2l6ZSAgICA9IEFSUkFZX1NJWkUobXNpX3R2YW55d2hlcmUpLAotCQkuaXJfdHlwZSA9IElSX1RZUEVfVU5LTk9XTiwJLyogTGVnYWN5IElSIHR5cGUgKi8KLQkJLm5hbWUgICAgPSBSQ19NQVBfTVNJX1RWQU5ZV0hFUkUsCi0JfQotfTsKLQotc3RhdGljIGludCBfX2luaXQgaW5pdF9yY19tYXBfbXNpX3R2YW55d2hlcmUodm9pZCkKLXsKLQlyZXR1cm4gaXJfcmVnaXN0ZXJfbWFwKCZtc2lfdHZhbnl3aGVyZV9tYXApOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yY19tYXBfbXNpX3R2YW55d2hlcmUodm9pZCkKLXsKLQlpcl91bnJlZ2lzdGVyX21hcCgmbXNpX3R2YW55d2hlcmVfbWFwKTsKLX0KLQotbW9kdWxlX2luaXQoaW5pdF9yY19tYXBfbXNpX3R2YW55d2hlcmUpCi1tb2R1bGVfZXhpdChleGl0X3JjX21hcF9tc2lfdHZhbnl3aGVyZSkKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtbmVidWxhLmMgYi9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtbmVidWxhLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjYzUwZWIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLW5lYnVsYS5jCisrKyAvZGV2L251bGwKQEAgLTEsOTYgKzAsMCBAQAotLyogbmVidWxhLmggLSBLZXl0YWJsZSBmb3IgbmVidWxhIFJlbW90ZSBDb250cm9sbGVyCi0gKgotICoga2V5bWFwIGltcG9ydGVkIGZyb20gaXIta2V5bWFwcy5jCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDEwIGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2luY2x1ZGUgPG1lZGlhL3JjLW1hcC5oPgotCi1zdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIG5lYnVsYVtdID0gewotCXsgMHgwMCwgS0VZXzAgfSwKLQl7IDB4MDEsIEtFWV8xIH0sCi0JeyAweDAyLCBLRVlfMiB9LAotCXsgMHgwMywgS0VZXzMgfSwKLQl7IDB4MDQsIEtFWV80IH0sCi0JeyAweDA1LCBLRVlfNSB9LAotCXsgMHgwNiwgS0VZXzYgfSwKLQl7IDB4MDcsIEtFWV83IH0sCi0JeyAweDA4LCBLRVlfOCB9LAotCXsgMHgwOSwgS0VZXzkgfSwKLQl7IDB4MGEsIEtFWV9UViB9LAotCXsgMHgwYiwgS0VZX0FVWCB9LAotCXsgMHgwYywgS0VZX0RWRCB9LAotCXsgMHgwZCwgS0VZX1BPV0VSIH0sCi0JeyAweDBlLCBLRVlfTUhQIH0sCS8qIGxhYmVsbGVkICdQaWN0dXJlJyAqLwotCXsgMHgwZiwgS0VZX0FVRElPIH0sCi0JeyAweDEwLCBLRVlfSU5GTyB9LAotCXsgMHgxMSwgS0VZX0YxMyB9LAkvKiAxNjo5ICovCi0JeyAweDEyLCBLRVlfRjE0IH0sCS8qIDE0OjkgKi8KLQl7IDB4MTMsIEtFWV9FUEcgfSwKLQl7IDB4MTQsIEtFWV9FWElUIH0sCi0JeyAweDE1LCBLRVlfTUVOVSB9LAotCXsgMHgxNiwgS0VZX1VQIH0sCi0JeyAweDE3LCBLRVlfRE9XTiB9LAotCXsgMHgxOCwgS0VZX0xFRlQgfSwKLQl7IDB4MTksIEtFWV9SSUdIVCB9LAotCXsgMHgxYSwgS0VZX0VOVEVSIH0sCi0JeyAweDFiLCBLRVlfQ0hBTk5FTFVQIH0sCi0JeyAweDFjLCBLRVlfQ0hBTk5FTERPV04gfSwKLQl7IDB4MWQsIEtFWV9WT0xVTUVVUCB9LAotCXsgMHgxZSwgS0VZX1ZPTFVNRURPV04gfSwKLQl7IDB4MWYsIEtFWV9SRUQgfSwKLQl7IDB4MjAsIEtFWV9HUkVFTiB9LAotCXsgMHgyMSwgS0VZX1lFTExPVyB9LAotCXsgMHgyMiwgS0VZX0JMVUUgfSwKLQl7IDB4MjMsIEtFWV9TVUJUSVRMRSB9LAotCXsgMHgyNCwgS0VZX0YxNSB9LAkvKiBBRCAqLwotCXsgMHgyNSwgS0VZX1RFWFQgfSwKLQl7IDB4MjYsIEtFWV9NVVRFIH0sCi0JeyAweDI3LCBLRVlfUkVXSU5EIH0sCi0JeyAweDI4LCBLRVlfU1RPUCB9LAotCXsgMHgyOSwgS0VZX1BMQVkgfSwKLQl7IDB4MmEsIEtFWV9GQVNURk9SV0FSRCB9LAotCXsgMHgyYiwgS0VZX0YxNiB9LAkvKiBjaGFwdGVyICovCi0JeyAweDJjLCBLRVlfUEFVU0UgfSwKLQl7IDB4MmQsIEtFWV9QTEFZIH0sCi0JeyAweDJlLCBLRVlfUkVDT1JEIH0sCi0JeyAweDJmLCBLRVlfRjE3IH0sCS8qIHBpY3R1cmUgaW4gcGljdHVyZSAqLwotCXsgMHgzMCwgS0VZX0tQUExVUyB9LAkvKiB6b29tIGluICovCi0JeyAweDMxLCBLRVlfS1BNSU5VUyB9LAkvKiB6b29tIG91dCAqLwotCXsgMHgzMiwgS0VZX0YxOCB9LAkvKiBjYXB0dXJlICovCi0JeyAweDMzLCBLRVlfRjE5IH0sCS8qIHdlYiAqLwotCXsgMHgzNCwgS0VZX0VNQUlMIH0sCi0JeyAweDM1LCBLRVlfUEhPTkUgfSwKLQl7IDB4MzYsIEtFWV9QQyB9LAotfTsKLQotc3RhdGljIHN0cnVjdCByY19rZXltYXAgbmVidWxhX21hcCA9IHsKLQkubWFwID0gewotCQkuc2NhbiAgICA9IG5lYnVsYSwKLQkJLnNpemUgICAgPSBBUlJBWV9TSVpFKG5lYnVsYSksCi0JCS5pcl90eXBlID0gSVJfVFlQRV9VTktOT1dOLAkvKiBMZWdhY3kgSVIgdHlwZSAqLwotCQkubmFtZSAgICA9IFJDX01BUF9ORUJVTEEsCi0JfQotfTsKLQotc3RhdGljIGludCBfX2luaXQgaW5pdF9yY19tYXBfbmVidWxhKHZvaWQpCi17Ci0JcmV0dXJuIGlyX3JlZ2lzdGVyX21hcCgmbmVidWxhX21hcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3JjX21hcF9uZWJ1bGEodm9pZCkKLXsKLQlpcl91bnJlZ2lzdGVyX21hcCgmbmVidWxhX21hcCk7Ci19Ci0KLW1vZHVsZV9pbml0KGluaXRfcmNfbWFwX25lYnVsYSkKLW1vZHVsZV9leGl0KGV4aXRfcmNfbWFwX25lYnVsYSkKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtbmVjLXRlcnJhdGVjLWNpbmVyZ3kteHMuYyBiL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1uZWMtdGVycmF0ZWMtY2luZXJneS14cy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMWI1NGQyLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1uZWMtdGVycmF0ZWMtY2luZXJneS14cy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTA1ICswLDAgQEAKLS8qIG5lYy10ZXJyYXRlYy1jaW5lcmd5LXhzLmggLSBLZXl0YWJsZSBmb3IgbmVjX3RlcnJhdGVjX2NpbmVyZ3lfeHMgUmVtb3RlIENvbnRyb2xsZXIKLSAqCi0gKiBrZXltYXAgaW1wb3J0ZWQgZnJvbSBpci1rZXltYXBzLmMKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgYnkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0jaW5jbHVkZSA8bWVkaWEvcmMtbWFwLmg+Ci0KLS8qIFRlcnJhdGVjIENpbmVyZ3kgSHlicmlkIFQgVVNCIFhTIEZNCi0gICBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4KLSAqLwotCi1zdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIG5lY190ZXJyYXRlY19jaW5lcmd5X3hzW10gPSB7Ci0JeyAweDE0NDEsIEtFWV9IT01FfSwKLQl7IDB4MTQwMSwgS0VZX1BPV0VSMn0sCi0KLQl7IDB4MTQ0MiwgS0VZX01FTlV9LAkJLyogRFZEIG1lbnUgKi8KLQl7IDB4MTQ0MywgS0VZX1NVQlRJVExFfSwKLQl7IDB4MTQ0NCwgS0VZX1RFWFR9LAkJLyogVGVsZXRleHQgKi8KLQl7IDB4MTQ0NSwgS0VZX0RFTEVURX0sCi0KLQl7IDB4MTQwMiwgS0VZXzF9LAotCXsgMHgxNDAzLCBLRVlfMn0sCi0JeyAweDE0MDQsIEtFWV8zfSwKLQl7IDB4MTQwNSwgS0VZXzR9LAotCXsgMHgxNDA2LCBLRVlfNX0sCi0JeyAweDE0MDcsIEtFWV82fSwKLQl7IDB4MTQwOCwgS0VZXzd9LAotCXsgMHgxNDA5LCBLRVlfOH0sCi0JeyAweDE0MGEsIEtFWV85fSwKLQl7IDB4MTQwYywgS0VZXzB9LAotCi0JeyAweDE0MGIsIEtFWV9UVU5FUn0sCQkvKiBBViAqLwotCXsgMHgxNDBkLCBLRVlfTU9ERX0sCQkvKiBBLkIgKi8KLQotCXsgMHgxNDQ2LCBLRVlfVFZ9LAotCXsgMHgxNDQ3LCBLRVlfRFZEfSwKLQl7IDB4MTQ0OSwgS0VZX1ZJREVPfSwKLQl7IDB4MTQ0YSwgS0VZX1JBRElPfSwJCS8qIE11c2ljICovCi0JeyAweDE0NGIsIEtFWV9DQU1FUkF9LAkJLyogUElDICovCi0KLQl7IDB4MTQxMCwgS0VZX1VQfSwKLQl7IDB4MTQxMSwgS0VZX0xFRlR9LAotCXsgMHgxNDEyLCBLRVlfT0t9LAotCXsgMHgxNDEzLCBLRVlfUklHSFR9LAotCXsgMHgxNDE0LCBLRVlfRE9XTn0sCi0KLQl7IDB4MTQwZiwgS0VZX0VQR30sCi0JeyAweDE0MTYsIEtFWV9JTkZPfSwKLQl7IDB4MTQ0ZCwgS0VZX0JBQ0tTUEFDRX0sCi0KLQl7IDB4MTQxYywgS0VZX1ZPTFVNRVVQfSwKLQl7IDB4MTQxZSwgS0VZX1ZPTFVNRURPV059LAotCi0JeyAweDE0NGMsIEtFWV9QTEFZfSwKLQl7IDB4MTQxZCwgS0VZX01VVEV9LAotCi0JeyAweDE0MWIsIEtFWV9DSEFOTkVMVVB9LAotCXsgMHgxNDFmLCBLRVlfQ0hBTk5FTERPV059LAotCi0JeyAweDE0MTcsIEtFWV9SRUR9LAotCXsgMHgxNDE4LCBLRVlfR1JFRU59LAotCXsgMHgxNDE5LCBLRVlfWUVMTE9XfSwKLQl7IDB4MTQxYSwgS0VZX0JMVUV9LAotCi0JeyAweDE0NTgsIEtFWV9SRUNPUkR9LAotCXsgMHgxNDQ4LCBLRVlfU1RPUH0sCi0JeyAweDE0NDAsIEtFWV9QQVVTRX0sCi0KLQl7IDB4MTQ1NCwgS0VZX0xBU1R9LAotCXsgMHgxNDRlLCBLRVlfUkVXSU5EfSwKLQl7IDB4MTQ0ZiwgS0VZX0ZBU1RGT1JXQVJEfSwKLQl7IDB4MTQ1YywgS0VZX05FWFR9LAotfTsKLQotc3RhdGljIHN0cnVjdCByY19rZXltYXAgbmVjX3RlcnJhdGVjX2NpbmVyZ3lfeHNfbWFwID0gewotCS5tYXAgPSB7Ci0JCS5zY2FuICAgID0gbmVjX3RlcnJhdGVjX2NpbmVyZ3lfeHMsCi0JCS5zaXplICAgID0gQVJSQVlfU0laRShuZWNfdGVycmF0ZWNfY2luZXJneV94cyksCi0JCS5pcl90eXBlID0gSVJfVFlQRV9ORUMsCi0JCS5uYW1lICAgID0gUkNfTUFQX05FQ19URVJSQVRFQ19DSU5FUkdZX1hTLAotCX0KLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGluaXRfcmNfbWFwX25lY190ZXJyYXRlY19jaW5lcmd5X3hzKHZvaWQpCi17Ci0JcmV0dXJuIGlyX3JlZ2lzdGVyX21hcCgmbmVjX3RlcnJhdGVjX2NpbmVyZ3lfeHNfbWFwKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGV4aXRfcmNfbWFwX25lY190ZXJyYXRlY19jaW5lcmd5X3hzKHZvaWQpCi17Ci0JaXJfdW5yZWdpc3Rlcl9tYXAoJm5lY190ZXJyYXRlY19jaW5lcmd5X3hzX21hcCk7Ci19Ci0KLW1vZHVsZV9pbml0KGluaXRfcmNfbWFwX25lY190ZXJyYXRlY19jaW5lcmd5X3hzKQotbW9kdWxlX2V4aXQoZXhpdF9yY19tYXBfbmVjX3RlcnJhdGVjX2NpbmVyZ3lfeHMpCi0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IoIk1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLW5vcndvb2QuYyBiL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1ub3J3b29kLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1ODQ5YTYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLW5vcndvb2QuYworKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLS8qIG5vcndvb2QuaCAtIEtleXRhYmxlIGZvciBub3J3b29kIFJlbW90ZSBDb250cm9sbGVyCi0gKgotICoga2V5bWFwIGltcG9ydGVkIGZyb20gaXIta2V5bWFwcy5jCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDEwIGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2luY2x1ZGUgPG1lZGlhL3JjLW1hcC5oPgotCi0vKiBOb3J3b29kIE1pY3JvIChub24tUHJvKSBUViBUdW5lcgotICAgQnkgUGV0ZXIgTmF1bGxzIDxwZXRlckBjaG9ja3kub3JnPgotICAgS2V5IGNvbW1lbnRzIGFyZSB0aGUgZnVuY3Rpb25zIGdpdmVuIGluIHRoZSBtYW51YWwgKi8KLQotc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBub3J3b29kW10gPSB7Ci0JLyogS2V5cyAwIHRvIDkgKi8KLQl7IDB4MjAsIEtFWV8wIH0sCi0JeyAweDIxLCBLRVlfMSB9LAotCXsgMHgyMiwgS0VZXzIgfSwKLQl7IDB4MjMsIEtFWV8zIH0sCi0JeyAweDI0LCBLRVlfNCB9LAotCXsgMHgyNSwgS0VZXzUgfSwKLQl7IDB4MjYsIEtFWV82IH0sCi0JeyAweDI3LCBLRVlfNyB9LAotCXsgMHgyOCwgS0VZXzggfSwKLQl7IDB4MjksIEtFWV85IH0sCi0KLQl7IDB4NzgsIEtFWV9UVU5FUiB9LAkJLyogVmlkZW8gU291cmNlICAgICAgICAqLwotCXsgMHgyYywgS0VZX0VYSVQgfSwJCS8qIE9wZW4vQ2xvc2Ugc29mdHdhcmUgKi8KLQl7IDB4MmEsIEtFWV9TRUxFQ1QgfSwJCS8qIDIgRGlnaXQgU2VsZWN0ICAgICAgKi8KLQl7IDB4NjksIEtFWV9BR0FJTiB9LAkJLyogUmVjYWxsICAgICAgICAgICAgICAqLwotCi0JeyAweDMyLCBLRVlfQlJJR0hUTkVTU1VQIH0sCS8qIEJyaWdodG5lc3MgaW5jcmVhc2UgKi8KLQl7IDB4MzMsIEtFWV9CUklHSFRORVNTRE9XTiB9LAkvKiBCcmlnaHRuZXNzIGRlY3JlYXNlICovCi0JeyAweDZiLCBLRVlfS1BQTFVTIH0sCQkvKiAobm90IG5hbWVkID4+Pj4+KSAgICovCi0JeyAweDZjLCBLRVlfS1BNSU5VUyB9LAkJLyogKG5vdCBuYW1lZCA8PDw8PCkgICAqLwotCi0JeyAweDJkLCBLRVlfTVVURSB9LAkJLyogTXV0ZSAgICAgICAgICAgICAgICAqLwotCXsgMHgzMCwgS0VZX1ZPTFVNRVVQIH0sCQkvKiBWb2x1bWUgdXAgICAgICAgICAgICovCi0JeyAweDMxLCBLRVlfVk9MVU1FRE9XTiB9LAkvKiBWb2x1bWUgZG93biAgICAgICAgICovCi0JeyAweDYwLCBLRVlfQ0hBTk5FTFVQIH0sCS8qIENoYW5uZWwgdXAgICAgICAgICAgKi8KLQl7IDB4NjEsIEtFWV9DSEFOTkVMRE9XTiB9LAkvKiBDaGFubmVsIGRvd24gICAgICAgICovCi0KLQl7IDB4M2YsIEtFWV9SRUNPUkQgfSwJCS8qIFJlY29yZCAgICAgICAgICAgICAgKi8KLQl7IDB4MzcsIEtFWV9QTEFZIH0sCQkvKiBQbGF5ICAgICAgICAgICAgICAgICovCi0JeyAweDM2LCBLRVlfUEFVU0UgfSwJCS8qIFBhdXNlICAgICAgICAgICAgICAgKi8KLQl7IDB4MmIsIEtFWV9TVE9QIH0sCQkvKiBTdG9wICAgICAgICAgICAgICAgICovCi0JeyAweDY3LCBLRVlfRkFTVEZPUldBUkQgfSwJLyogRm93YXJkICAgICAgICAgICAgICAqLwotCXsgMHg2NiwgS0VZX1JFV0lORCB9LAkJLyogUmV3aW5kICAgICAgICAgICAgICAqLwotCXsgMHgzZSwgS0VZX1NFQVJDSCB9LAkJLyogQXV0byBTY2FuICAgICAgICAgICAqLwotCXsgMHgyZSwgS0VZX0NBTUVSQSB9LAkJLyogQ2FwdHVyZSBWaWRlbyAgICAgICAqLwotCXsgMHg2ZCwgS0VZX01FTlUgfSwJCS8qIFNob3cvSGlkZSBDb250cm9sICAgKi8KLQl7IDB4MmYsIEtFWV9aT09NIH0sCQkvKiBGdWxsIFNjcmVlbiAgICAgICAgICovCi0JeyAweDM0LCBLRVlfUkFESU8gfSwJCS8qIEZNICAgICAgICAgICAgICAgICAgKi8KLQl7IDB4NjUsIEtFWV9QT1dFUiB9LAkJLyogQ29tcHV0ZXIgcG93ZXIgICAgICAqLwotfTsKLQotc3RhdGljIHN0cnVjdCByY19rZXltYXAgbm9yd29vZF9tYXAgPSB7Ci0JLm1hcCA9IHsKLQkJLnNjYW4gICAgPSBub3J3b29kLAotCQkuc2l6ZSAgICA9IEFSUkFZX1NJWkUobm9yd29vZCksCi0JCS5pcl90eXBlID0gSVJfVFlQRV9VTktOT1dOLAkvKiBMZWdhY3kgSVIgdHlwZSAqLwotCQkubmFtZSAgICA9IFJDX01BUF9OT1JXT09ELAotCX0KLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGluaXRfcmNfbWFwX25vcndvb2Qodm9pZCkKLXsKLQlyZXR1cm4gaXJfcmVnaXN0ZXJfbWFwKCZub3J3b29kX21hcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3JjX21hcF9ub3J3b29kKHZvaWQpCi17Ci0JaXJfdW5yZWdpc3Rlcl9tYXAoJm5vcndvb2RfbWFwKTsKLX0KLQotbW9kdWxlX2luaXQoaW5pdF9yY19tYXBfbm9yd29vZCkKLW1vZHVsZV9leGl0KGV4aXRfcmNfbWFwX25vcndvb2QpCi0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IoIk1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLW5wZ3RlY2guYyBiL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1ucGd0ZWNoLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5ZWNlMWUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLW5wZ3RlY2guYworKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLS8qIG5wZ3RlY2guaCAtIEtleXRhYmxlIGZvciBucGd0ZWNoIFJlbW90ZSBDb250cm9sbGVyCi0gKgotICoga2V5bWFwIGltcG9ydGVkIGZyb20gaXIta2V5bWFwcy5jCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDEwIGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2luY2x1ZGUgPG1lZGlhL3JjLW1hcC5oPgotCi1zdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIG5wZ3RlY2hbXSA9IHsKLQl7IDB4MWQsIEtFWV9TV0lUQ0hWSURFT01PREUgfSwJLyogc3dpdGNoIGlucHV0cyAqLwotCXsgMHgyYSwgS0VZX0ZST05UIH0sCi0KLQl7IDB4M2UsIEtFWV8xIH0sCi0JeyAweDAyLCBLRVlfMiB9LAotCXsgMHgwNiwgS0VZXzMgfSwKLQl7IDB4MGEsIEtFWV80IH0sCi0JeyAweDBlLCBLRVlfNSB9LAotCXsgMHgxMiwgS0VZXzYgfSwKLQl7IDB4MTYsIEtFWV83IH0sCi0JeyAweDFhLCBLRVlfOCB9LAotCXsgMHgxZSwgS0VZXzkgfSwKLQl7IDB4M2EsIEtFWV8wIH0sCi0JeyAweDIyLCBLRVlfTlVNTE9DSyB9LAkJLyogLS8tLSAqLwotCXsgMHgyMCwgS0VZX1JFRlJFU0ggfSwKLQotCXsgMHgwMywgS0VZX0JSSUdIVE5FU1NET1dOIH0sCi0JeyAweDI4LCBLRVlfQVVESU8gfSwKLQl7IDB4M2MsIEtFWV9DSEFOTkVMVVAgfSwKLQl7IDB4M2YsIEtFWV9WT0xVTUVET1dOIH0sCi0JeyAweDJlLCBLRVlfTVVURSB9LAotCXsgMHgzYiwgS0VZX1ZPTFVNRVVQIH0sCi0JeyAweDAwLCBLRVlfQ0hBTk5FTERPV04gfSwKLQl7IDB4MDcsIEtFWV9CUklHSFRORVNTVVAgfSwKLQl7IDB4MmMsIEtFWV9URVhUIH0sCi0KLQl7IDB4MzcsIEtFWV9SRUNPUkQgfSwKLQl7IDB4MTcsIEtFWV9QTEFZIH0sCi0JeyAweDEzLCBLRVlfUEFVU0UgfSwKLQl7IDB4MjYsIEtFWV9TVE9QIH0sCi0JeyAweDE4LCBLRVlfRkFTVEZPUldBUkQgfSwKLQl7IDB4MTQsIEtFWV9SRVdJTkQgfSwKLQl7IDB4MzMsIEtFWV9aT09NIH0sCi0JeyAweDMyLCBLRVlfS0VZQk9BUkQgfSwKLQl7IDB4MzAsIEtFWV9HT1RPIH0sCQkvKiBQb2ludGluZyBhcnJvdyAqLwotCXsgMHgzNiwgS0VZX01BQ1JPIH0sCQkvKiBNYXhpbWl6ZS9NaW5pbWl6ZSAoeWVsbG93KSAqLwotCXsgMHgwYiwgS0VZX1JBRElPIH0sCi0JeyAweDEwLCBLRVlfUE9XRVIgfSwKLQotfTsKLQotc3RhdGljIHN0cnVjdCByY19rZXltYXAgbnBndGVjaF9tYXAgPSB7Ci0JLm1hcCA9IHsKLQkJLnNjYW4gICAgPSBucGd0ZWNoLAotCQkuc2l6ZSAgICA9IEFSUkFZX1NJWkUobnBndGVjaCksCi0JCS5pcl90eXBlID0gSVJfVFlQRV9VTktOT1dOLAkvKiBMZWdhY3kgSVIgdHlwZSAqLwotCQkubmFtZSAgICA9IFJDX01BUF9OUEdURUNILAotCX0KLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGluaXRfcmNfbWFwX25wZ3RlY2godm9pZCkKLXsKLQlyZXR1cm4gaXJfcmVnaXN0ZXJfbWFwKCZucGd0ZWNoX21hcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3JjX21hcF9ucGd0ZWNoKHZvaWQpCi17Ci0JaXJfdW5yZWdpc3Rlcl9tYXAoJm5wZ3RlY2hfbWFwKTsKLX0KLQotbW9kdWxlX2luaXQoaW5pdF9yY19tYXBfbnBndGVjaCkKLW1vZHVsZV9leGl0KGV4aXRfcmNfbWFwX25wZ3RlY2gpCi0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IoIk1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLXBjdHYtc2VkbmEuYyBiL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1wY3R2LXNlZG5hLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxMjliYjQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLXBjdHYtc2VkbmEuYworKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLS8qIHBjdHYtc2VkbmEuaCAtIEtleXRhYmxlIGZvciBwY3R2X3NlZG5hIFJlbW90ZSBDb250cm9sbGVyCi0gKgotICoga2V5bWFwIGltcG9ydGVkIGZyb20gaXIta2V5bWFwcy5jCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDEwIGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2luY2x1ZGUgPG1lZGlhL3JjLW1hcC5oPgotCi0vKiBNYXBwaW5nIGZvciB0aGUgMjgga2V5IHJlbW90ZSBjb250cm9sIGFzIHNlZW4gYXQKLSAgIGh0dHA6Ly93d3cuc2VkbmFjb21wdXRlci5jb20vcGhvdG8vY2FyZGJ1cy10di5qcGcKLSAgIFBhdmVsIE1paGF5bG92IDxiaW5AYmFzaC5pbmZvPgotICAgQWxzbyBmb3IgdGhlIHJlbW90ZSBidW5kbGVkIHdpdGggS296dW1pIEtUVi0wMUMgY2FyZCAqLwotCi1zdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIHBjdHZfc2VkbmFbXSA9IHsKLQl7IDB4MDAsIEtFWV8wIH0sCi0JeyAweDAxLCBLRVlfMSB9LAotCXsgMHgwMiwgS0VZXzIgfSwKLQl7IDB4MDMsIEtFWV8zIH0sCi0JeyAweDA0LCBLRVlfNCB9LAotCXsgMHgwNSwgS0VZXzUgfSwKLQl7IDB4MDYsIEtFWV82IH0sCi0JeyAweDA3LCBLRVlfNyB9LAotCXsgMHgwOCwgS0VZXzggfSwKLQl7IDB4MDksIEtFWV85IH0sCi0KLQl7IDB4MGEsIEtFWV9BR0FJTiB9LAkvKiBSZWNhbGwgKi8KLQl7IDB4MGIsIEtFWV9DSEFOTkVMVVAgfSwKLQl7IDB4MGMsIEtFWV9WT0xVTUVVUCB9LAotCXsgMHgwZCwgS0VZX01PREUgfSwJLyogU3RlcmVvICovCi0JeyAweDBlLCBLRVlfU1RPUCB9LAotCXsgMHgwZiwgS0VZX1BSRVZJT1VTU09ORyB9LAotCXsgMHgxMCwgS0VZX1pPT00gfSwKLQl7IDB4MTEsIEtFWV9UVU5FUiB9LAkvKiBTb3VyY2UgKi8KLQl7IDB4MTIsIEtFWV9QT1dFUiB9LAotCXsgMHgxMywgS0VZX01VVEUgfSwKLQl7IDB4MTUsIEtFWV9DSEFOTkVMRE9XTiB9LAotCXsgMHgxOCwgS0VZX1ZPTFVNRURPV04gfSwKLQl7IDB4MTksIEtFWV9DQU1FUkEgfSwJLyogU25hcHNob3QgKi8KLQl7IDB4MWEsIEtFWV9ORVhUU09ORyB9LAotCXsgMHgxYiwgS0VZX1RJTUUgfSwJLyogVGltZSBTaGlmdCAqLwotCXsgMHgxYywgS0VZX1JBRElPIH0sCS8qIEZNIFJhZGlvICovCi0JeyAweDFkLCBLRVlfUkVDT1JEIH0sCi0JeyAweDFlLCBLRVlfUEFVU0UgfSwKLQkvKiBhZGRpdGlvbmFsIGNvZGVzIGZvciBLb3p1bWkncyByZW1vdGUgKi8KLQl7IDB4MTQsIEtFWV9JTkZPIH0sCS8qIE9TRCAqLwotCXsgMHgxNiwgS0VZX09LIH0sCS8qIE9LICovCi0JeyAweDE3LCBLRVlfRElHSVRTIH0sCS8qIFBsdXMgKi8KLQl7IDB4MWYsIEtFWV9QTEFZIH0sCS8qIFBsYXkgKi8KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmNfa2V5bWFwIHBjdHZfc2VkbmFfbWFwID0gewotCS5tYXAgPSB7Ci0JCS5zY2FuICAgID0gcGN0dl9zZWRuYSwKLQkJLnNpemUgICAgPSBBUlJBWV9TSVpFKHBjdHZfc2VkbmEpLAotCQkuaXJfdHlwZSA9IElSX1RZUEVfVU5LTk9XTiwJLyogTGVnYWN5IElSIHR5cGUgKi8KLQkJLm5hbWUgICAgPSBSQ19NQVBfUENUVl9TRUROQSwKLQl9Ci19OwotCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcF9wY3R2X3NlZG5hKHZvaWQpCi17Ci0JcmV0dXJuIGlyX3JlZ2lzdGVyX21hcCgmcGN0dl9zZWRuYV9tYXApOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yY19tYXBfcGN0dl9zZWRuYSh2b2lkKQotewotCWlyX3VucmVnaXN0ZXJfbWFwKCZwY3R2X3NlZG5hX21hcCk7Ci19Ci0KLW1vZHVsZV9pbml0KGluaXRfcmNfbWFwX3BjdHZfc2VkbmEpCi1tb2R1bGVfZXhpdChleGl0X3JjX21hcF9wY3R2X3NlZG5hKQotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1waW5uYWNsZS1jb2xvci5jIGIvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLXBpbm5hY2xlLWNvbG9yLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyNmUwMjMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLXBpbm5hY2xlLWNvbG9yLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0vKiBwaW5uYWNsZS1jb2xvci5oIC0gS2V5dGFibGUgZm9yIHBpbm5hY2xlX2NvbG9yIFJlbW90ZSBDb250cm9sbGVyCi0gKgotICoga2V5bWFwIGltcG9ydGVkIGZyb20gaXIta2V5bWFwcy5jCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDEwIGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2luY2x1ZGUgPG1lZGlhL3JjLW1hcC5oPgotCi1zdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIHBpbm5hY2xlX2NvbG9yW10gPSB7Ci0JeyAweDU5LCBLRVlfTVVURSB9LAotCXsgMHg0YSwgS0VZX1BPV0VSIH0sCi0KLQl7IDB4MTgsIEtFWV9URVhUIH0sCi0JeyAweDI2LCBLRVlfVFYgfSwKLQl7IDB4M2QsIEtFWV9QUklOVCB9LAotCi0JeyAweDQ4LCBLRVlfUkVEIH0sCi0JeyAweDA0LCBLRVlfR1JFRU4gfSwKLQl7IDB4MTEsIEtFWV9ZRUxMT1cgfSwKLQl7IDB4MDAsIEtFWV9CTFVFIH0sCi0KLQl7IDB4MmQsIEtFWV9WT0xVTUVVUCB9LAotCXsgMHgxZSwgS0VZX1ZPTFVNRURPV04gfSwKLQotCXsgMHg0OSwgS0VZX01FTlUgfSwKLQotCXsgMHgxNiwgS0VZX0NIQU5ORUxVUCB9LAotCXsgMHgxNywgS0VZX0NIQU5ORUxET1dOIH0sCi0KLQl7IDB4MjAsIEtFWV9VUCB9LAotCXsgMHgyMSwgS0VZX0RPV04gfSwKLQl7IDB4MjIsIEtFWV9MRUZUIH0sCi0JeyAweDIzLCBLRVlfUklHSFQgfSwKLQl7IDB4MGQsIEtFWV9TRUxFQ1QgfSwKLQotCXsgMHgwOCwgS0VZX0JBQ0sgfSwKLQl7IDB4MDcsIEtFWV9SRUZSRVNIIH0sCi0KLQl7IDB4MmYsIEtFWV9aT09NIH0sCi0JeyAweDI5LCBLRVlfUkVDT1JEIH0sCi0KLQl7IDB4NGIsIEtFWV9QQVVTRSB9LAotCXsgMHg0ZCwgS0VZX1JFV0lORCB9LAotCXsgMHgyZSwgS0VZX1BMQVkgfSwKLQl7IDB4NGUsIEtFWV9GT1JXQVJEIH0sCi0JeyAweDUzLCBLRVlfUFJFVklPVVMgfSwKLQl7IDB4NGMsIEtFWV9TVE9QIH0sCi0JeyAweDU0LCBLRVlfTkVYVCB9LAotCi0JeyAweDY5LCBLRVlfMCB9LAotCXsgMHg2YSwgS0VZXzEgfSwKLQl7IDB4NmIsIEtFWV8yIH0sCi0JeyAweDZjLCBLRVlfMyB9LAotCXsgMHg2ZCwgS0VZXzQgfSwKLQl7IDB4NmUsIEtFWV81IH0sCi0JeyAweDZmLCBLRVlfNiB9LAotCXsgMHg3MCwgS0VZXzcgfSwKLQl7IDB4NzEsIEtFWV84IH0sCi0JeyAweDcyLCBLRVlfOSB9LAotCi0JeyAweDc0LCBLRVlfQ0hBTk5FTCB9LAotCXsgMHgwYSwgS0VZX0JBQ0tTUEFDRSB9LAotfTsKLQotc3RhdGljIHN0cnVjdCByY19rZXltYXAgcGlubmFjbGVfY29sb3JfbWFwID0gewotCS5tYXAgPSB7Ci0JCS5zY2FuICAgID0gcGlubmFjbGVfY29sb3IsCi0JCS5zaXplICAgID0gQVJSQVlfU0laRShwaW5uYWNsZV9jb2xvciksCi0JCS5pcl90eXBlID0gSVJfVFlQRV9VTktOT1dOLAkvKiBMZWdhY3kgSVIgdHlwZSAqLwotCQkubmFtZSAgICA9IFJDX01BUF9QSU5OQUNMRV9DT0xPUiwKLQl9Ci19OwotCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcF9waW5uYWNsZV9jb2xvcih2b2lkKQotewotCXJldHVybiBpcl9yZWdpc3Rlcl9tYXAoJnBpbm5hY2xlX2NvbG9yX21hcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3JjX21hcF9waW5uYWNsZV9jb2xvcih2b2lkKQotewotCWlyX3VucmVnaXN0ZXJfbWFwKCZwaW5uYWNsZV9jb2xvcl9tYXApOwotfQotCi1tb2R1bGVfaW5pdChpbml0X3JjX21hcF9waW5uYWNsZV9jb2xvcikKLW1vZHVsZV9leGl0KGV4aXRfcmNfbWFwX3Bpbm5hY2xlX2NvbG9yKQotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1waW5uYWNsZS1ncmV5LmMgYi9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtcGlubmFjbGUtZ3JleS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNGNiNzcyLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1waW5uYWNsZS1ncmV5LmMKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi0vKiBwaW5uYWNsZS1ncmV5LmggLSBLZXl0YWJsZSBmb3IgcGlubmFjbGVfZ3JleSBSZW1vdGUgQ29udHJvbGxlcgotICoKLSAqIGtleW1hcCBpbXBvcnRlZCBmcm9tIGlyLWtleW1hcHMuYwotICoKLSAqIENvcHlyaWdodCAoYykgMjAxMCBieSBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLSNpbmNsdWRlIDxtZWRpYS9yYy1tYXAuaD4KLQotc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBwaW5uYWNsZV9ncmV5W10gPSB7Ci0JeyAweDNhLCBLRVlfMCB9LAotCXsgMHgzMSwgS0VZXzEgfSwKLQl7IDB4MzIsIEtFWV8yIH0sCi0JeyAweDMzLCBLRVlfMyB9LAotCXsgMHgzNCwgS0VZXzQgfSwKLQl7IDB4MzUsIEtFWV81IH0sCi0JeyAweDM2LCBLRVlfNiB9LAotCXsgMHgzNywgS0VZXzcgfSwKLQl7IDB4MzgsIEtFWV84IH0sCi0JeyAweDM5LCBLRVlfOSB9LAotCi0JeyAweDJmLCBLRVlfUE9XRVIgfSwKLQotCXsgMHgyZSwgS0VZX1AgfSwKLQl7IDB4MWYsIEtFWV9MIH0sCi0JeyAweDJiLCBLRVlfSSB9LAotCi0JeyAweDJkLCBLRVlfU0NSRUVOIH0sCi0JeyAweDFlLCBLRVlfWk9PTSB9LAotCXsgMHgxYiwgS0VZX1ZPTFVNRVVQIH0sCi0JeyAweDBmLCBLRVlfVk9MVU1FRE9XTiB9LAotCXsgMHgxNywgS0VZX0NIQU5ORUxVUCB9LAotCXsgMHgxYywgS0VZX0NIQU5ORUxET1dOIH0sCi0JeyAweDI1LCBLRVlfSU5GTyB9LAotCi0JeyAweDNjLCBLRVlfTVVURSB9LAotCi0JeyAweDNkLCBLRVlfTEVGVCB9LAotCXsgMHgzYiwgS0VZX1JJR0hUIH0sCi0KLQl7IDB4M2YsIEtFWV9VUCB9LAotCXsgMHgzZSwgS0VZX0RPV04gfSwKLQl7IDB4MWEsIEtFWV9FTlRFUiB9LAotCi0JeyAweDFkLCBLRVlfTUVOVSB9LAotCXsgMHgxOSwgS0VZX0FHQUlOIH0sCi0JeyAweDE2LCBLRVlfUFJFVklPVVNTT05HIH0sCi0JeyAweDEzLCBLRVlfTkVYVFNPTkcgfSwKLQl7IDB4MTUsIEtFWV9QQVVTRSB9LAotCXsgMHgwZSwgS0VZX1JFV0lORCB9LAotCXsgMHgwZCwgS0VZX1BMQVkgfSwKLQl7IDB4MGIsIEtFWV9TVE9QIH0sCi0JeyAweDA3LCBLRVlfRk9SV0FSRCB9LAotCXsgMHgyNywgS0VZX1JFQ09SRCB9LAotCXsgMHgyNiwgS0VZX1RVTkVSIH0sCi0JeyAweDI5LCBLRVlfVEVYVCB9LAotCXsgMHgyYSwgS0VZX01FRElBIH0sCi0JeyAweDE4LCBLRVlfRVBHIH0sCi19OwotCi1zdGF0aWMgc3RydWN0IHJjX2tleW1hcCBwaW5uYWNsZV9ncmV5X21hcCA9IHsKLQkubWFwID0gewotCQkuc2NhbiAgICA9IHBpbm5hY2xlX2dyZXksCi0JCS5zaXplICAgID0gQVJSQVlfU0laRShwaW5uYWNsZV9ncmV5KSwKLQkJLmlyX3R5cGUgPSBJUl9UWVBFX1VOS05PV04sCS8qIExlZ2FjeSBJUiB0eXBlICovCi0JCS5uYW1lICAgID0gUkNfTUFQX1BJTk5BQ0xFX0dSRVksCi0JfQotfTsKLQotc3RhdGljIGludCBfX2luaXQgaW5pdF9yY19tYXBfcGlubmFjbGVfZ3JleSh2b2lkKQotewotCXJldHVybiBpcl9yZWdpc3Rlcl9tYXAoJnBpbm5hY2xlX2dyZXlfbWFwKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGV4aXRfcmNfbWFwX3Bpbm5hY2xlX2dyZXkodm9pZCkKLXsKLQlpcl91bnJlZ2lzdGVyX21hcCgmcGlubmFjbGVfZ3JleV9tYXApOwotfQotCi1tb2R1bGVfaW5pdChpbml0X3JjX21hcF9waW5uYWNsZV9ncmV5KQotbW9kdWxlX2V4aXQoZXhpdF9yY19tYXBfcGlubmFjbGVfZ3JleSkKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtcGlubmFjbGUtcGN0di1oZC5jIGIvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLXBpbm5hY2xlLXBjdHYtaGQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODM1YmY0ZS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtcGlubmFjbGUtcGN0di1oZC5jCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyogcGlubmFjbGUtcGN0di1oZC5oIC0gS2V5dGFibGUgZm9yIHBpbm5hY2xlX3BjdHZfaGQgUmVtb3RlIENvbnRyb2xsZXIKLSAqCi0gKiBrZXltYXAgaW1wb3J0ZWQgZnJvbSBpci1rZXltYXBzLmMKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgYnkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0jaW5jbHVkZSA8bWVkaWEvcmMtbWFwLmg+Ci0KLS8qIFBpbm5hY2xlIFBDVFYgSEQgODAwaSBtaW5pIHJlbW90ZSAqLwotCi1zdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIHBpbm5hY2xlX3BjdHZfaGRbXSA9IHsKLQotCXsgMHgwZiwgS0VZXzEgfSwKLQl7IDB4MTUsIEtFWV8yIH0sCi0JeyAweDEwLCBLRVlfMyB9LAotCXsgMHgxOCwgS0VZXzQgfSwKLQl7IDB4MWIsIEtFWV81IH0sCi0JeyAweDFlLCBLRVlfNiB9LAotCXsgMHgxMSwgS0VZXzcgfSwKLQl7IDB4MjEsIEtFWV84IH0sCi0JeyAweDEyLCBLRVlfOSB9LAotCXsgMHgyNywgS0VZXzAgfSwKLQotCXsgMHgyNCwgS0VZX1pPT00gfSwKLQl7IDB4MmEsIEtFWV9TVUJUSVRMRSB9LAotCi0JeyAweDAwLCBLRVlfTVVURSB9LAotCXsgMHgwMSwgS0VZX0VOVEVSIH0sCS8qIFBpbm5hY2xlIExvZ28gKi8KLQl7IDB4MzksIEtFWV9QT1dFUiB9LAotCi0JeyAweDAzLCBLRVlfVk9MVU1FVVAgfSwKLQl7IDB4MDksIEtFWV9WT0xVTUVET1dOIH0sCi0JeyAweDA2LCBLRVlfQ0hBTk5FTFVQIH0sCi0JeyAweDBjLCBLRVlfQ0hBTk5FTERPV04gfSwKLQotCXsgMHgyZCwgS0VZX1JFV0lORCB9LAotCXsgMHgzMCwgS0VZX1BMQVlQQVVTRSB9LAotCXsgMHgzMywgS0VZX0ZBU1RGT1JXQVJEIH0sCi0JeyAweDNjLCBLRVlfU1RPUCB9LAotCXsgMHgzNiwgS0VZX1JFQ09SRCB9LAotCXsgMHgzZiwgS0VZX0VQRyB9LAkvKiBMYWJlbGVkICI/IiAqLwotfTsKLQotc3RhdGljIHN0cnVjdCByY19rZXltYXAgcGlubmFjbGVfcGN0dl9oZF9tYXAgPSB7Ci0JLm1hcCA9IHsKLQkJLnNjYW4gICAgPSBwaW5uYWNsZV9wY3R2X2hkLAotCQkuc2l6ZSAgICA9IEFSUkFZX1NJWkUocGlubmFjbGVfcGN0dl9oZCksCi0JCS5pcl90eXBlID0gSVJfVFlQRV9VTktOT1dOLAkvKiBMZWdhY3kgSVIgdHlwZSAqLwotCQkubmFtZSAgICA9IFJDX01BUF9QSU5OQUNMRV9QQ1RWX0hELAotCX0KLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGluaXRfcmNfbWFwX3Bpbm5hY2xlX3BjdHZfaGQodm9pZCkKLXsKLQlyZXR1cm4gaXJfcmVnaXN0ZXJfbWFwKCZwaW5uYWNsZV9wY3R2X2hkX21hcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3JjX21hcF9waW5uYWNsZV9wY3R2X2hkKHZvaWQpCi17Ci0JaXJfdW5yZWdpc3Rlcl9tYXAoJnBpbm5hY2xlX3BjdHZfaGRfbWFwKTsKLX0KLQotbW9kdWxlX2luaXQoaW5pdF9yY19tYXBfcGlubmFjbGVfcGN0dl9oZCkKLW1vZHVsZV9leGl0KGV4aXRfcmNfbWFwX3Bpbm5hY2xlX3BjdHZfaGQpCi0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IoIk1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLXBpeGVsdmlldy1tazEyLmMgYi9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtcGl4ZWx2aWV3LW1rMTIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWE3MzVkNS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtcGl4ZWx2aWV3LW1rMTIuYworKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLS8qIHJjLXBpeGVsdmlldy1tazEyLmggLSBLZXl0YWJsZSBmb3IgcGl4ZWx2aWV3IFJlbW90ZSBDb250cm9sbGVyCi0gKgotICoga2V5bWFwIGltcG9ydGVkIGZyb20gaXIta2V5bWFwcy5jCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDEwIGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2luY2x1ZGUgPG1lZGlhL3JjLW1hcC5oPgotCi0vKgotICogS2V5dGFibGUgZm9yIE1LLUYxMiBJUiByZW1vdGUgcHJvdmlkZWQgdG9nZXRoZXIgd2l0aCBQaXhlbHZpZXcKLSAqIFVsdHJhIFBybyBSZW1vdGUgQ29udHJvbGxlci4gVXNlcyBORUMgZXh0ZW5kZWQgZm9ybWF0LgotICovCi1zdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIHBpeGVsdmlld19tazEyW10gPSB7Ci0JeyAweDg2NmIwMywgS0VZX1RVTkVSIH0sCS8qIFRpbWVzaGlmdCAqLwotCXsgMHg4NjZiMWUsIEtFWV9QT1dFUjIgfSwJLyogcG93ZXIgKi8KLQotCXsgMHg4NjZiMDEsIEtFWV8xIH0sCi0JeyAweDg2NmIwYiwgS0VZXzIgfSwKLQl7IDB4ODY2YjFiLCBLRVlfMyB9LAotCXsgMHg4NjZiMDUsIEtFWV80IH0sCi0JeyAweDg2NmIwOSwgS0VZXzUgfSwKLQl7IDB4ODY2YjE1LCBLRVlfNiB9LAotCXsgMHg4NjZiMDYsIEtFWV83IH0sCi0JeyAweDg2NmIwYSwgS0VZXzggfSwKLQl7IDB4ODY2YjEyLCBLRVlfOSB9LAotCXsgMHg4NjZiMDIsIEtFWV8wIH0sCi0KLQl7IDB4ODY2YjEzLCBLRVlfQUdBSU4gfSwJLyogbG9vcCAqLwotCXsgMHg4NjZiMTAsIEtFWV9ESUdJVFMgfSwJLyogKzEwMCAqLwotCi0JeyAweDg2NmIwMCwgS0VZX01FRElBIH0sCS8qIHNvdXJjZSAqLwotCXsgMHg4NjZiMTgsIEtFWV9NVVRFIH0sCQkvKiBtdXRlICovCi0JeyAweDg2NmIxOSwgS0VZX0NBTUVSQSB9LAkvKiBzbmFwc2hvdCAqLwotCXsgMHg4NjZiMWEsIEtFWV9TRUFSQ0ggfSwJLyogc2NhbiAqLwotCi0JeyAweDg2NmIxNiwgS0VZX0NIQU5ORUxVUCB9LAkvKiBjaG4gKyAqLwotCXsgMHg4NjZiMTQsIEtFWV9DSEFOTkVMRE9XTiB9LAkvKiBjaG4gLSAqLwotCXsgMHg4NjZiMWYsIEtFWV9WT0xVTUVVUCB9LAkvKiB2b2wgKyAqLwotCXsgMHg4NjZiMTcsIEtFWV9WT0xVTUVET1dOIH0sCS8qIHZvbCAtICovCi0JeyAweDg2NmIxYywgS0VZX1pPT00gfSwJCS8qIHpvb20gKi8KLQotCXsgMHg4NjZiMDQsIEtFWV9SRVdJTkQgfSwKLQl7IDB4ODY2YjBlLCBLRVlfUkVDT1JEIH0sCi0JeyAweDg2NmIwYywgS0VZX0ZPUldBUkQgfSwKLQotCXsgMHg4NjZiMWQsIEtFWV9TVE9QIH0sCi0JeyAweDg2NmIwOCwgS0VZX1BMQVkgfSwKLQl7IDB4ODY2YjBmLCBLRVlfUEFVU0UgfSwKLQotCXsgMHg4NjZiMGQsIEtFWV9UViB9LAotCXsgMHg4NjZiMDcsIEtFWV9SQURJTyB9LAkvKiBGTSAqLwotfTsKLQotc3RhdGljIHN0cnVjdCByY19rZXltYXAgcGl4ZWx2aWV3X21hcCA9IHsKLQkubWFwID0gewotCQkuc2NhbiAgICA9IHBpeGVsdmlld19tazEyLAotCQkuc2l6ZSAgICA9IEFSUkFZX1NJWkUocGl4ZWx2aWV3X21rMTIpLAotCQkuaXJfdHlwZSA9IElSX1RZUEVfTkVDLAotCQkubmFtZSAgICA9IFJDX01BUF9QSVhFTFZJRVdfTUsxMiwKLQl9Ci19OwotCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcF9waXhlbHZpZXcodm9pZCkKLXsKLQlyZXR1cm4gaXJfcmVnaXN0ZXJfbWFwKCZwaXhlbHZpZXdfbWFwKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGV4aXRfcmNfbWFwX3BpeGVsdmlldyh2b2lkKQotewotCWlyX3VucmVnaXN0ZXJfbWFwKCZwaXhlbHZpZXdfbWFwKTsKLX0KLQotbW9kdWxlX2luaXQoaW5pdF9yY19tYXBfcGl4ZWx2aWV3KQotbW9kdWxlX2V4aXQoZXhpdF9yY19tYXBfcGl4ZWx2aWV3KQotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1waXhlbHZpZXctbmV3LmMgYi9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtcGl4ZWx2aWV3LW5ldy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YmJiYmY1Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1waXhlbHZpZXctbmV3LmMKKysrIC9kZXYvbnVsbApAQCAtMSw4MyArMCwwIEBACi0vKiBwaXhlbHZpZXctbmV3LmggLSBLZXl0YWJsZSBmb3IgcGl4ZWx2aWV3X25ldyBSZW1vdGUgQ29udHJvbGxlcgotICoKLSAqIGtleW1hcCBpbXBvcnRlZCBmcm9tIGlyLWtleW1hcHMuYwotICoKLSAqIENvcHlyaWdodCAoYykgMjAxMCBieSBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLSNpbmNsdWRlIDxtZWRpYS9yYy1tYXAuaD4KLQotLyoKLSAgIE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkBpbmZyYWRlYWQub3JnPgotICAgcHJlc2VudCBvbiBQViBNUEVHIDgwMDBHVAotICovCi0KLXN0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgcGl4ZWx2aWV3X25ld1tdID0gewotCXsgMHgzYywgS0VZX1RJTUUgfSwJCS8qIFRpbWVzaGlmdCAqLwotCXsgMHgxMiwgS0VZX1BPV0VSIH0sCi0KLQl7IDB4M2QsIEtFWV8xIH0sCi0JeyAweDM4LCBLRVlfMiB9LAotCXsgMHgxOCwgS0VZXzMgfSwKLQl7IDB4MzUsIEtFWV80IH0sCi0JeyAweDM5LCBLRVlfNSB9LAotCXsgMHgxNSwgS0VZXzYgfSwKLQl7IDB4MzYsIEtFWV83IH0sCi0JeyAweDNhLCBLRVlfOCB9LAotCXsgMHgxZSwgS0VZXzkgfSwKLQl7IDB4M2UsIEtFWV8wIH0sCi0KLQl7IDB4MWMsIEtFWV9BR0FJTiB9LAkJLyogTE9PUAkqLwotCXsgMHgzZiwgS0VZX01FRElBIH0sCQkvKiBTb3VyY2UgKi8KLQl7IDB4MWYsIEtFWV9MQVNUIH0sCQkvKiArMTAwICovCi0JeyAweDFiLCBLRVlfTVVURSB9LAotCi0JeyAweDE3LCBLRVlfQ0hBTk5FTERPV04gfSwKLQl7IDB4MTYsIEtFWV9DSEFOTkVMVVAgfSwKLQl7IDB4MTAsIEtFWV9WT0xVTUVVUCB9LAotCXsgMHgxNCwgS0VZX1ZPTFVNRURPV04gfSwKLQl7IDB4MTMsIEtFWV9aT09NIH0sCi0KLQl7IDB4MTksIEtFWV9DQU1FUkEgfSwJCS8qIFNOQVBTSE9UICovCi0JeyAweDFhLCBLRVlfU0VBUkNIIH0sCQkvKiBzY2FuICovCi0KLQl7IDB4MzcsIEtFWV9SRVdJTkQgfSwJCS8qIDw8ICovCi0JeyAweDMyLCBLRVlfUkVDT1JEIH0sCQkvKiBvIChyZWQpICovCi0JeyAweDMzLCBLRVlfRk9SV0FSRCB9LAkJLyogPj4gKi8KLQl7IDB4MTEsIEtFWV9TVE9QIH0sCQkvKiBzcXVhcmUgKi8KLQl7IDB4M2IsIEtFWV9QTEFZIH0sCQkvKiA+ICovCi0JeyAweDMwLCBLRVlfUExBWVBBVVNFIH0sCS8qIHx8ICovCi0KLQl7IDB4MzEsIEtFWV9UViB9LAotCXsgMHgzNCwgS0VZX1JBRElPIH0sCi19OwotCi1zdGF0aWMgc3RydWN0IHJjX2tleW1hcCBwaXhlbHZpZXdfbmV3X21hcCA9IHsKLQkubWFwID0gewotCQkuc2NhbiAgICA9IHBpeGVsdmlld19uZXcsCi0JCS5zaXplICAgID0gQVJSQVlfU0laRShwaXhlbHZpZXdfbmV3KSwKLQkJLmlyX3R5cGUgPSBJUl9UWVBFX1VOS05PV04sCS8qIExlZ2FjeSBJUiB0eXBlICovCi0JCS5uYW1lICAgID0gUkNfTUFQX1BJWEVMVklFV19ORVcsCi0JfQotfTsKLQotc3RhdGljIGludCBfX2luaXQgaW5pdF9yY19tYXBfcGl4ZWx2aWV3X25ldyh2b2lkKQotewotCXJldHVybiBpcl9yZWdpc3Rlcl9tYXAoJnBpeGVsdmlld19uZXdfbWFwKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGV4aXRfcmNfbWFwX3BpeGVsdmlld19uZXcodm9pZCkKLXsKLQlpcl91bnJlZ2lzdGVyX21hcCgmcGl4ZWx2aWV3X25ld19tYXApOwotfQotCi1tb2R1bGVfaW5pdChpbml0X3JjX21hcF9waXhlbHZpZXdfbmV3KQotbW9kdWxlX2V4aXQoZXhpdF9yY19tYXBfcGl4ZWx2aWV3X25ldykKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtcGl4ZWx2aWV3LmMgYi9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtcGl4ZWx2aWV3LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyZmYxMmUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLXBpeGVsdmlldy5jCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotLyogcGl4ZWx2aWV3LmggLSBLZXl0YWJsZSBmb3IgcGl4ZWx2aWV3IFJlbW90ZSBDb250cm9sbGVyCi0gKgotICoga2V5bWFwIGltcG9ydGVkIGZyb20gaXIta2V5bWFwcy5jCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDEwIGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2luY2x1ZGUgPG1lZGlhL3JjLW1hcC5oPgotCi1zdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIHBpeGVsdmlld1tdID0gewotCi0JeyAweDFlLCBLRVlfUE9XRVIgfSwJLyogcG93ZXIgKi8KLQl7IDB4MDcsIEtFWV9NRURJQSB9LAkvKiBzb3VyY2UgKi8KLQl7IDB4MWMsIEtFWV9TRUFSQ0ggfSwJLyogc2NhbiAqLwotCi0KLQl7IDB4MDMsIEtFWV9UVU5FUiB9LAkJLyogVFYvRk0gKi8KLQotCXsgMHgwMCwgS0VZX1JFQ09SRCB9LAotCXsgMHgwOCwgS0VZX1NUT1AgfSwKLQl7IDB4MTEsIEtFWV9QTEFZIH0sCi0KLQl7IDB4MWEsIEtFWV9QTEFZUEFVU0UgfSwJLyogZnJlZXplICovCi0JeyAweDE5LCBLRVlfWk9PTSB9LAkJLyogem9vbSAqLwotCXsgMHgwZiwgS0VZX1RFWFQgfSwJCS8qIG1pbiAqLwotCi0JeyAweDAxLCBLRVlfMSB9LAotCXsgMHgwYiwgS0VZXzIgfSwKLQl7IDB4MWIsIEtFWV8zIH0sCi0JeyAweDA1LCBLRVlfNCB9LAotCXsgMHgwOSwgS0VZXzUgfSwKLQl7IDB4MTUsIEtFWV82IH0sCi0JeyAweDA2LCBLRVlfNyB9LAotCXsgMHgwYSwgS0VZXzggfSwKLQl7IDB4MTIsIEtFWV85IH0sCi0JeyAweDAyLCBLRVlfMCB9LAotCXsgMHgxMCwgS0VZX0xBU1QgfSwJCS8qICsxMDAgKi8KLQl7IDB4MTMsIEtFWV9MSVNUIH0sCQkvKiByZWNhbGwgKi8KLQotCXsgMHgxZiwgS0VZX0NIQU5ORUxVUCB9LAkvKiBjaG4gZG93biAqLwotCXsgMHgxNywgS0VZX0NIQU5ORUxET1dOIH0sCS8qIGNobiB1cCAqLwotCXsgMHgxNiwgS0VZX1ZPTFVNRVVQIH0sCQkvKiB2b2wgZG93biAqLwotCXsgMHgxNCwgS0VZX1ZPTFVNRURPV04gfSwJLyogdm9sIHVwICovCi0KLQl7IDB4MDQsIEtFWV9LUE1JTlVTIH0sCQkvKiA8PDwgKi8KLQl7IDB4MGUsIEtFWV9TRVRVUCB9LAkJLyogZnVuY3Rpb24gKi8KLQl7IDB4MGMsIEtFWV9LUFBMVVMgfSwJCS8qID4+PiAqLwotCi0JeyAweDBkLCBLRVlfR09UTyB9LAkJLyogbXRzICovCi0JeyAweDFkLCBLRVlfUkVGUkVTSCB9LAkJLyogcmVzZXQgKi8KLQl7IDB4MTgsIEtFWV9NVVRFIH0sCQkvKiBtdXRlL3VubXV0ZSAqLwotfTsKLQotc3RhdGljIHN0cnVjdCByY19rZXltYXAgcGl4ZWx2aWV3X21hcCA9IHsKLQkubWFwID0gewotCQkuc2NhbiAgICA9IHBpeGVsdmlldywKLQkJLnNpemUgICAgPSBBUlJBWV9TSVpFKHBpeGVsdmlldyksCi0JCS5pcl90eXBlID0gSVJfVFlQRV9VTktOT1dOLAkvKiBMZWdhY3kgSVIgdHlwZSAqLwotCQkubmFtZSAgICA9IFJDX01BUF9QSVhFTFZJRVcsCi0JfQotfTsKLQotc3RhdGljIGludCBfX2luaXQgaW5pdF9yY19tYXBfcGl4ZWx2aWV3KHZvaWQpCi17Ci0JcmV0dXJuIGlyX3JlZ2lzdGVyX21hcCgmcGl4ZWx2aWV3X21hcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3JjX21hcF9waXhlbHZpZXcodm9pZCkKLXsKLQlpcl91bnJlZ2lzdGVyX21hcCgmcGl4ZWx2aWV3X21hcCk7Ci19Ci0KLW1vZHVsZV9pbml0KGluaXRfcmNfbWFwX3BpeGVsdmlldykKLW1vZHVsZV9leGl0KGV4aXRfcmNfbWFwX3BpeGVsdmlldykKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtcG93ZXJjb2xvci1yZWFsLWFuZ2VsLmMgYi9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtcG93ZXJjb2xvci1yZWFsLWFuZ2VsLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjZWY4MTkuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLXBvd2VyY29sb3ItcmVhbC1hbmdlbC5jCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyogcG93ZXJjb2xvci1yZWFsLWFuZ2VsLmggLSBLZXl0YWJsZSBmb3IgcG93ZXJjb2xvcl9yZWFsX2FuZ2VsIFJlbW90ZSBDb250cm9sbGVyCi0gKgotICoga2V5bWFwIGltcG9ydGVkIGZyb20gaXIta2V5bWFwcy5jCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDEwIGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2luY2x1ZGUgPG1lZGlhL3JjLW1hcC5oPgotCi0vKgotICogUmVtb3RlIGNvbnRyb2wgZm9yIFBvd2VyY29sb3IgUmVhbCBBbmdlbCAzMzAKLSAqIERhbmllbCBGcmFnYSA8ZnJhZ2FickBnbWFpbC5jb20+Ci0gKi8KLQotc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBwb3dlcmNvbG9yX3JlYWxfYW5nZWxbXSA9IHsKLQl7IDB4MzgsIEtFWV9TV0lUQ0hWSURFT01PREUgfSwJLyogc3dpdGNoIGlucHV0cyAqLwotCXsgMHgwYywgS0VZX01FRElBIH0sCQkvKiBUdXJuIE9OL09GRiBBcHAgKi8KLQl7IDB4MDAsIEtFWV8wIH0sCi0JeyAweDAxLCBLRVlfMSB9LAotCXsgMHgwMiwgS0VZXzIgfSwKLQl7IDB4MDMsIEtFWV8zIH0sCi0JeyAweDA0LCBLRVlfNCB9LAotCXsgMHgwNSwgS0VZXzUgfSwKLQl7IDB4MDYsIEtFWV82IH0sCi0JeyAweDA3LCBLRVlfNyB9LAotCXsgMHgwOCwgS0VZXzggfSwKLQl7IDB4MDksIEtFWV85IH0sCi0JeyAweDBhLCBLRVlfRElHSVRTIH0sCQkvKiBzaW5nbGUsIGRvdWJsZSwgdHJpcHBsZSBkaWdpdCAqLwotCXsgMHgyOSwgS0VZX1BSRVZJT1VTIH0sCQkvKiBwcmV2aW91cyBjaGFubmVsICovCi0JeyAweDEyLCBLRVlfQlJJR0hUTkVTU1VQIH0sCi0JeyAweDEzLCBLRVlfQlJJR0hUTkVTU0RPV04gfSwKLQl7IDB4MmIsIEtFWV9NT0RFIH0sCQkvKiBzdGVyZW8vbW9ubyAqLwotCXsgMHgyYywgS0VZX1RFWFQgfSwJCS8qIHRlbGV0ZXh0ICovCi0JeyAweDIwLCBLRVlfQ0hBTk5FTFVQIH0sCS8qIGNoYW5uZWwgdXAgKi8KLQl7IDB4MjEsIEtFWV9DSEFOTkVMRE9XTiB9LAkvKiBjaGFubmVsIGRvd24gKi8KLQl7IDB4MTAsIEtFWV9WT0xVTUVVUCB9LAkJLyogdm9sdW1lIHVwICovCi0JeyAweDExLCBLRVlfVk9MVU1FRE9XTiB9LAkvKiB2b2x1bWUgZG93biAqLwotCXsgMHgwZCwgS0VZX01VVEUgfSwKLQl7IDB4MWYsIEtFWV9SRUNPUkQgfSwKLQl7IDB4MTcsIEtFWV9QTEFZIH0sCi0JeyAweDE2LCBLRVlfUEFVU0UgfSwKLQl7IDB4MGIsIEtFWV9TVE9QIH0sCi0JeyAweDI3LCBLRVlfRkFTVEZPUldBUkQgfSwKLQl7IDB4MjYsIEtFWV9SRVdJTkQgfSwKLQl7IDB4MWUsIEtFWV9TRUFSQ0ggfSwJCS8qIGF1dG9zY2FuICovCi0JeyAweDBlLCBLRVlfQ0FNRVJBIH0sCQkvKiBzbmFwc2hvdCAqLwotCXsgMHgyZCwgS0VZX1NFVFVQIH0sCi0JeyAweDBmLCBLRVlfU0NSRUVOIH0sCQkvKiBmdWxsIHNjcmVlbiAqLwotCXsgMHgxNCwgS0VZX1JBRElPIH0sCQkvKiBGTSByYWRpbyAqLwotCXsgMHgyNSwgS0VZX1BPV0VSIH0sCQkvKiBwb3dlciAqLwotfTsKLQotc3RhdGljIHN0cnVjdCByY19rZXltYXAgcG93ZXJjb2xvcl9yZWFsX2FuZ2VsX21hcCA9IHsKLQkubWFwID0gewotCQkuc2NhbiAgICA9IHBvd2VyY29sb3JfcmVhbF9hbmdlbCwKLQkJLnNpemUgICAgPSBBUlJBWV9TSVpFKHBvd2VyY29sb3JfcmVhbF9hbmdlbCksCi0JCS5pcl90eXBlID0gSVJfVFlQRV9VTktOT1dOLAkvKiBMZWdhY3kgSVIgdHlwZSAqLwotCQkubmFtZSAgICA9IFJDX01BUF9QT1dFUkNPTE9SX1JFQUxfQU5HRUwsCi0JfQotfTsKLQotc3RhdGljIGludCBfX2luaXQgaW5pdF9yY19tYXBfcG93ZXJjb2xvcl9yZWFsX2FuZ2VsKHZvaWQpCi17Ci0JcmV0dXJuIGlyX3JlZ2lzdGVyX21hcCgmcG93ZXJjb2xvcl9yZWFsX2FuZ2VsX21hcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3JjX21hcF9wb3dlcmNvbG9yX3JlYWxfYW5nZWwodm9pZCkKLXsKLQlpcl91bnJlZ2lzdGVyX21hcCgmcG93ZXJjb2xvcl9yZWFsX2FuZ2VsX21hcCk7Ci19Ci0KLW1vZHVsZV9pbml0KGluaXRfcmNfbWFwX3Bvd2VyY29sb3JfcmVhbF9hbmdlbCkKLW1vZHVsZV9leGl0KGV4aXRfcmNfbWFwX3Bvd2VyY29sb3JfcmVhbF9hbmdlbCkKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtcHJvdGV1cy0yMzA5LmMgYi9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtcHJvdGV1cy0yMzA5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyZTkyZDMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLXByb3RldXMtMjMwOS5jCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLyogcHJvdGV1cy0yMzA5LmggLSBLZXl0YWJsZSBmb3IgcHJvdGV1c18yMzA5IFJlbW90ZSBDb250cm9sbGVyCi0gKgotICoga2V5bWFwIGltcG9ydGVkIGZyb20gaXIta2V5bWFwcy5jCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDEwIGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2luY2x1ZGUgPG1lZGlhL3JjLW1hcC5oPgotCi0vKiBNaWNoYWwgTWFqY2hyb3dpY3ogPG1tYWpjaHJvd2ljekBnbWFpbC5jb20+ICovCi0KLXN0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgcHJvdGV1c18yMzA5W10gPSB7Ci0JLyogbnVtZXJpYyAqLwotCXsgMHgwMCwgS0VZXzAgfSwKLQl7IDB4MDEsIEtFWV8xIH0sCi0JeyAweDAyLCBLRVlfMiB9LAotCXsgMHgwMywgS0VZXzMgfSwKLQl7IDB4MDQsIEtFWV80IH0sCi0JeyAweDA1LCBLRVlfNSB9LAotCXsgMHgwNiwgS0VZXzYgfSwKLQl7IDB4MDcsIEtFWV83IH0sCi0JeyAweDA4LCBLRVlfOCB9LAotCXsgMHgwOSwgS0VZXzkgfSwKLQotCXsgMHg1YywgS0VZX1BPV0VSIH0sCQkvKiBwb3dlciAgICAgICAqLwotCXsgMHgyMCwgS0VZX1pPT00gfSwJCS8qIGZ1bGwgc2NyZWVuICovCi0JeyAweDBmLCBLRVlfQkFDS1NQQUNFIH0sCS8qIHJlY2FsbCAgICAgICovCi0JeyAweDFiLCBLRVlfRU5URVIgfSwJCS8qIG11dGUgICAgICAgICovCi0JeyAweDQxLCBLRVlfUkVDT1JEIH0sCQkvKiByZWNvcmQgICAgICAqLwotCXsgMHg0MywgS0VZX1NUT1AgfSwJCS8qIHN0b3AgICAgICAgICovCi0JeyAweDE2LCBLRVlfUyB9LAotCXsgMHgxYSwgS0VZX1BPV0VSMiB9LAkJLyogb2ZmICAgICAgICAgKi8KLQl7IDB4MmUsIEtFWV9SRUQgfSwKLQl7IDB4MWYsIEtFWV9DSEFOTkVMRE9XTiB9LAkvKiBjaGFubmVsIC0gICAqLwotCXsgMHgxYywgS0VZX0NIQU5ORUxVUCB9LAkvKiBjaGFubmVsICsgICAqLwotCXsgMHgxMCwgS0VZX1ZPTFVNRURPV04gfSwJLyogdm9sdW1lIC0gICAgKi8KLQl7IDB4MWUsIEtFWV9WT0xVTUVVUCB9LAkJLyogdm9sdW1lICsgICAgKi8KLQl7IDB4MTQsIEtFWV9GMSB9LAotfTsKLQotc3RhdGljIHN0cnVjdCByY19rZXltYXAgcHJvdGV1c18yMzA5X21hcCA9IHsKLQkubWFwID0gewotCQkuc2NhbiAgICA9IHByb3RldXNfMjMwOSwKLQkJLnNpemUgICAgPSBBUlJBWV9TSVpFKHByb3RldXNfMjMwOSksCi0JCS5pcl90eXBlID0gSVJfVFlQRV9VTktOT1dOLAkvKiBMZWdhY3kgSVIgdHlwZSAqLwotCQkubmFtZSAgICA9IFJDX01BUF9QUk9URVVTXzIzMDksCi0JfQotfTsKLQotc3RhdGljIGludCBfX2luaXQgaW5pdF9yY19tYXBfcHJvdGV1c18yMzA5KHZvaWQpCi17Ci0JcmV0dXJuIGlyX3JlZ2lzdGVyX21hcCgmcHJvdGV1c18yMzA5X21hcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3JjX21hcF9wcm90ZXVzXzIzMDkodm9pZCkKLXsKLQlpcl91bnJlZ2lzdGVyX21hcCgmcHJvdGV1c18yMzA5X21hcCk7Ci19Ci0KLW1vZHVsZV9pbml0KGluaXRfcmNfbWFwX3Byb3RldXNfMjMwOSkKLW1vZHVsZV9leGl0KGV4aXRfcmNfbWFwX3Byb3RldXNfMjMwOSkKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtcHVycGxldHYuYyBiL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1wdXJwbGV0di5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZTIwZmMyLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1wdXJwbGV0di5jCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyogcHVycGxldHYuaCAtIEtleXRhYmxlIGZvciBwdXJwbGV0diBSZW1vdGUgQ29udHJvbGxlcgotICoKLSAqIGtleW1hcCBpbXBvcnRlZCBmcm9tIGlyLWtleW1hcHMuYwotICoKLSAqIENvcHlyaWdodCAoYykgMjAxMCBieSBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLSNpbmNsdWRlIDxtZWRpYS9yYy1tYXAuaD4KLQotc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBwdXJwbGV0dltdID0gewotCXsgMHgwMywgS0VZX1BPV0VSIH0sCi0JeyAweDZmLCBLRVlfTVVURSB9LAotCXsgMHgxMCwgS0VZX0JBQ0tTUEFDRSB9LAkvKiBSZWNhbGwgKi8KLQotCXsgMHgxMSwgS0VZXzAgfSwKLQl7IDB4MDQsIEtFWV8xIH0sCi0JeyAweDA1LCBLRVlfMiB9LAotCXsgMHgwNiwgS0VZXzMgfSwKLQl7IDB4MDgsIEtFWV80IH0sCi0JeyAweDA5LCBLRVlfNSB9LAotCXsgMHgwYSwgS0VZXzYgfSwKLQl7IDB4MGMsIEtFWV83IH0sCi0JeyAweDBkLCBLRVlfOCB9LAotCXsgMHgwZSwgS0VZXzkgfSwKLQl7IDB4MTIsIEtFWV9ET1QgfSwJLyogMTAwKyAqLwotCi0JeyAweDA3LCBLRVlfVk9MVU1FVVAgfSwKLQl7IDB4MGIsIEtFWV9WT0xVTUVET1dOIH0sCi0JeyAweDFhLCBLRVlfS1BQTFVTIH0sCi0JeyAweDE4LCBLRVlfS1BNSU5VUyB9LAotCXsgMHgxNSwgS0VZX1VQIH0sCi0JeyAweDFkLCBLRVlfRE9XTiB9LAotCXsgMHgwZiwgS0VZX0NIQU5ORUxVUCB9LAotCXsgMHgxMywgS0VZX0NIQU5ORUxET1dOIH0sCi0JeyAweDQ4LCBLRVlfWk9PTSB9LAotCi0JeyAweDFiLCBLRVlfVklERU8gfSwJLyogVmlkZW8gc291cmNlICovCi0JeyAweDFmLCBLRVlfQ0FNRVJBIH0sCS8qIFNuYXBzaG90ICovCi0JeyAweDQ5LCBLRVlfTEFOR1VBR0UgfSwJLyogTVRTIFNlbGVjdCAqLwotCXsgMHgxOSwgS0VZX1NFQVJDSCB9LAkvKiBBdXRvIFNjYW4gKi8KLQotCXsgMHg0YiwgS0VZX1JFQ09SRCB9LAotCXsgMHg0NiwgS0VZX1BMQVkgfSwKLQl7IDB4NDUsIEtFWV9QQVVTRSB9LAkvKiBQYXVzZSAqLwotCXsgMHg0NCwgS0VZX1NUT1AgfSwKLQl7IDB4NDMsIEtFWV9USU1FIH0sCS8qIFRpbWUgU2hpZnQgKi8KLQl7IDB4MTcsIEtFWV9DSEFOTkVMIH0sCS8qIFNVUkYgQ0ggKi8KLQl7IDB4NDAsIEtFWV9GT1JXQVJEIH0sCS8qIEZvcndhcmQgPyAqLwotCXsgMHg0MiwgS0VZX1JFV0lORCB9LAkvKiBCYWNrd2FyZCA/ICovCi0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmNfa2V5bWFwIHB1cnBsZXR2X21hcCA9IHsKLQkubWFwID0gewotCQkuc2NhbiAgICA9IHB1cnBsZXR2LAotCQkuc2l6ZSAgICA9IEFSUkFZX1NJWkUocHVycGxldHYpLAotCQkuaXJfdHlwZSA9IElSX1RZUEVfVU5LTk9XTiwJLyogTGVnYWN5IElSIHR5cGUgKi8KLQkJLm5hbWUgICAgPSBSQ19NQVBfUFVSUExFVFYsCi0JfQotfTsKLQotc3RhdGljIGludCBfX2luaXQgaW5pdF9yY19tYXBfcHVycGxldHYodm9pZCkKLXsKLQlyZXR1cm4gaXJfcmVnaXN0ZXJfbWFwKCZwdXJwbGV0dl9tYXApOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yY19tYXBfcHVycGxldHYodm9pZCkKLXsKLQlpcl91bnJlZ2lzdGVyX21hcCgmcHVycGxldHZfbWFwKTsKLX0KLQotbW9kdWxlX2luaXQoaW5pdF9yY19tYXBfcHVycGxldHYpCi1tb2R1bGVfZXhpdChleGl0X3JjX21hcF9wdXJwbGV0dikKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtcHY5NTEuYyBiL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1wdjk1MS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjY3OWU3Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1wdjk1MS5jCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotLyogcHY5NTEuaCAtIEtleXRhYmxlIGZvciBwdjk1MSBSZW1vdGUgQ29udHJvbGxlcgotICoKLSAqIGtleW1hcCBpbXBvcnRlZCBmcm9tIGlyLWtleW1hcHMuYwotICoKLSAqIENvcHlyaWdodCAoYykgMjAxMCBieSBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLSNpbmNsdWRlIDxtZWRpYS9yYy1tYXAuaD4KLQotLyogTWFyayBQaGFsYW4gPHBoYWxhbm1AbzIuaWU+ICovCi0KLXN0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgcHY5NTFbXSA9IHsKLQl7IDB4MDAsIEtFWV8wIH0sCi0JeyAweDAxLCBLRVlfMSB9LAotCXsgMHgwMiwgS0VZXzIgfSwKLQl7IDB4MDMsIEtFWV8zIH0sCi0JeyAweDA0LCBLRVlfNCB9LAotCXsgMHgwNSwgS0VZXzUgfSwKLQl7IDB4MDYsIEtFWV82IH0sCi0JeyAweDA3LCBLRVlfNyB9LAotCXsgMHgwOCwgS0VZXzggfSwKLQl7IDB4MDksIEtFWV85IH0sCi0KLQl7IDB4MTIsIEtFWV9QT1dFUiB9LAotCXsgMHgxMCwgS0VZX01VVEUgfSwKLQl7IDB4MWYsIEtFWV9WT0xVTUVET1dOIH0sCi0JeyAweDFiLCBLRVlfVk9MVU1FVVAgfSwKLQl7IDB4MWEsIEtFWV9DSEFOTkVMVVAgfSwKLQl7IDB4MWUsIEtFWV9DSEFOTkVMRE9XTiB9LAotCXsgMHgwZSwgS0VZX1BBR0VVUCB9LAotCXsgMHgxZCwgS0VZX1BBR0VET1dOIH0sCi0JeyAweDEzLCBLRVlfU09VTkQgfSwKLQotCXsgMHgxOCwgS0VZX0tQUExVU01JTlVTIH0sCS8qIENIICsvLSAqLwotCXsgMHgxNiwgS0VZX1NVQlRJVExFIH0sCQkvKiBDQyAqLwotCXsgMHgwZCwgS0VZX1RFWFQgfSwJCS8qIFRUWCAqLwotCXsgMHgwYiwgS0VZX1RWIH0sCQkvKiBBSVIvQ0JMICovCi0JeyAweDExLCBLRVlfUEMgfSwJCS8qIFBDL1RWICovCi0JeyAweDE3LCBLRVlfT0sgfSwJCS8qIENIIFJUTiAqLwotCXsgMHgxOSwgS0VZX01PREUgfSwJCS8qIEZVTkMgKi8KLQl7IDB4MGMsIEtFWV9TRUFSQ0ggfSwJCS8qIEFVVE9TQ0FOICovCi0KLQkvKiBOb3Qgc3VyZSB3aGF0IHRvIGRvIHdpdGggdGhlc2Ugb25lcyEgKi8KLQl7IDB4MGYsIEtFWV9TRUxFQ1QgfSwJCS8qIFNPVVJDRSAqLwotCXsgMHgwYSwgS0VZX0tQUExVUyB9LAkJLyogKzEwMCAqLwotCXsgMHgxNCwgS0VZX0VRVUFMIH0sCQkvKiBTWU5DICovCi0JeyAweDFjLCBLRVlfTUVESUEgfSwJCS8qIFBDL1RWICovCi19OwotCi1zdGF0aWMgc3RydWN0IHJjX2tleW1hcCBwdjk1MV9tYXAgPSB7Ci0JLm1hcCA9IHsKLQkJLnNjYW4gICAgPSBwdjk1MSwKLQkJLnNpemUgICAgPSBBUlJBWV9TSVpFKHB2OTUxKSwKLQkJLmlyX3R5cGUgPSBJUl9UWVBFX1VOS05PV04sCS8qIExlZ2FjeSBJUiB0eXBlICovCi0JCS5uYW1lICAgID0gUkNfTUFQX1BWOTUxLAotCX0KLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGluaXRfcmNfbWFwX3B2OTUxKHZvaWQpCi17Ci0JcmV0dXJuIGlyX3JlZ2lzdGVyX21hcCgmcHY5NTFfbWFwKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGV4aXRfcmNfbWFwX3B2OTUxKHZvaWQpCi17Ci0JaXJfdW5yZWdpc3Rlcl9tYXAoJnB2OTUxX21hcCk7Ci19Ci0KLW1vZHVsZV9pbml0KGluaXRfcmNfbWFwX3B2OTUxKQotbW9kdWxlX2V4aXQoZXhpdF9yY19tYXBfcHY5NTEpCi0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IoIk1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLXJjNS1oYXVwcGF1Z2UtbmV3LmMgYi9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtcmM1LWhhdXBwYXVnZS1uZXcuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2M2YjhmNS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtcmM1LWhhdXBwYXVnZS1uZXcuYworKysgL2Rldi9udWxsCkBAIC0xLDEwMyArMCwwIEBACi0vKiByYzUtaGF1cHBhdWdlLW5ldy5oIC0gS2V5dGFibGUgZm9yIHJjNV9oYXVwcGF1Z2VfbmV3IFJlbW90ZSBDb250cm9sbGVyCi0gKgotICoga2V5bWFwIGltcG9ydGVkIGZyb20gaXIta2V5bWFwcy5jCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDEwIGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2luY2x1ZGUgPG1lZGlhL3JjLW1hcC5oPgotCi0vKgotICogSGF1cHBhdWdlOnRoZSBuZXdlciwgZ3JheSByZW1vdGVzIChzZWVtcyB0aGVyZSBhcmUgbXVsdGlwbGUKLSAqIHNsaWdodGx5IGRpZmZlcmVudCB2ZXJzaW9ucyksIHNoaXBwZWQgd2l0aCBjeDg4K2l2dHYgY2FyZHMuCi0gKgotICogVGhpcyB0YWJsZSBjb250YWlucyB0aGUgY29tcGxldGUgUkM1IGNvZGUsIGluc3RlYWQgb2YganVzdCB0aGUgZGF0YSBwYXJ0Ci0gKi8KLQotc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSByYzVfaGF1cHBhdWdlX25ld1tdID0gewotCS8qIEtleXMgMCB0byA5ICovCi0JeyAweDFlMDAsIEtFWV8wIH0sCi0JeyAweDFlMDEsIEtFWV8xIH0sCi0JeyAweDFlMDIsIEtFWV8yIH0sCi0JeyAweDFlMDMsIEtFWV8zIH0sCi0JeyAweDFlMDQsIEtFWV80IH0sCi0JeyAweDFlMDUsIEtFWV81IH0sCi0JeyAweDFlMDYsIEtFWV82IH0sCi0JeyAweDFlMDcsIEtFWV83IH0sCi0JeyAweDFlMDgsIEtFWV84IH0sCi0JeyAweDFlMDksIEtFWV85IH0sCi0KLQl7IDB4MWUwYSwgS0VZX1RFWFQgfSwJCS8qIGtleXBhZCBhc3RlcmlzayBhcyB3ZWxsICovCi0JeyAweDFlMGIsIEtFWV9SRUQgfSwJCS8qIHJlZCBidXR0b24gKi8KLQl7IDB4MWUwYywgS0VZX1JBRElPIH0sCi0JeyAweDFlMGQsIEtFWV9NRU5VIH0sCi0JeyAweDFlMGUsIEtFWV9TVUJUSVRMRSB9LAkJLyogYWxzbyB0aGUgIyBrZXkgKi8KLQl7IDB4MWUwZiwgS0VZX01VVEUgfSwKLQl7IDB4MWUxMCwgS0VZX1ZPTFVNRVVQIH0sCi0JeyAweDFlMTEsIEtFWV9WT0xVTUVET1dOIH0sCi0JeyAweDFlMTIsIEtFWV9QUkVWSU9VUyB9LAkJLyogcHJldmlvdXMgY2hhbm5lbCAqLwotCXsgMHgxZTE0LCBLRVlfVVAgfSwKLQl7IDB4MWUxNSwgS0VZX0RPV04gfSwKLQl7IDB4MWUxNiwgS0VZX0xFRlQgfSwKLQl7IDB4MWUxNywgS0VZX1JJR0hUIH0sCi0JeyAweDFlMTgsIEtFWV9WSURFTyB9LAkJLyogVmlkZW9zICovCi0JeyAweDFlMTksIEtFWV9BVURJTyB9LAkJLyogTXVzaWMgKi8KLQkvKiAweDFlMWE6IFBpY3R1cmVzIC0gcHJlc3VtZSB0aGlzIG1lYW5zCi0JICAgIk11bHRpbWVkaWEgSG9tZSBQbGF0Zm9ybSIgLQotCSAgIG5vICJQSUNUVVJFUyIga2V5IGluIGlucHV0LmgKLQkgKi8KLQl7IDB4MWUxYSwgS0VZX01IUCB9LAotCi0JeyAweDFlMWIsIEtFWV9FUEcgfSwJCS8qIEd1aWRlICovCi0JeyAweDFlMWMsIEtFWV9UViB9LAotCXsgMHgxZTFlLCBLRVlfTkVYVFNPTkcgfSwJCS8qIHNraXAgPnwgKi8KLQl7IDB4MWUxZiwgS0VZX0VYSVQgfSwJCS8qIGJhY2svZXhpdCAqLwotCXsgMHgxZTIwLCBLRVlfQ0hBTk5FTFVQIH0sCS8qIGNoYW5uZWwgLyBwcm9ncmFtICsgKi8KLQl7IDB4MWUyMSwgS0VZX0NIQU5ORUxET1dOIH0sCS8qIGNoYW5uZWwgLyBwcm9ncmFtIC0gKi8KLQl7IDB4MWUyMiwgS0VZX0NIQU5ORUwgfSwJCS8qIHNvdXJjZSAob2xkIGJsYWNrIHJlbW90ZSkgKi8KLQl7IDB4MWUyNCwgS0VZX1BSRVZJT1VTU09ORyB9LAkvKiByZXBsYXkgfDwgKi8KLQl7IDB4MWUyNSwgS0VZX0VOVEVSIH0sCQkvKiBPSyAqLwotCXsgMHgxZTI2LCBLRVlfU0xFRVAgfSwJCS8qIG1pbmltaXplIChvbGQgYmxhY2sgcmVtb3RlKSAqLwotCXsgMHgxZTI5LCBLRVlfQkxVRSB9LAkJLyogYmx1ZSBrZXkgKi8KLQl7IDB4MWUyZSwgS0VZX0dSRUVOIH0sCQkvKiBncmVlbiBidXR0b24gKi8KLQl7IDB4MWUzMCwgS0VZX1BBVVNFIH0sCQkvKiBwYXVzZSAqLwotCXsgMHgxZTMyLCBLRVlfUkVXSU5EIH0sCQkvKiBiYWNrd2FyZCA8PCAqLwotCXsgMHgxZTM0LCBLRVlfRkFTVEZPUldBUkQgfSwJLyogZm9yd2FyZCA+PiAqLwotCXsgMHgxZTM1LCBLRVlfUExBWSB9LAotCXsgMHgxZTM2LCBLRVlfU1RPUCB9LAotCXsgMHgxZTM3LCBLRVlfUkVDT1JEIH0sCQkvKiByZWNvcmRpbmcgKi8KLQl7IDB4MWUzOCwgS0VZX1lFTExPVyB9LAkJLyogeWVsbG93IGtleSAqLwotCXsgMHgxZTNiLCBLRVlfU0VMRUNUIH0sCQkvKiB0b3AgcmlnaHQgYnV0dG9uICovCi0JeyAweDFlM2MsIEtFWV9aT09NIH0sCQkvKiBmdWxsICovCi0JeyAweDFlM2QsIEtFWV9QT1dFUiB9LAkJLyogc3lzdGVtIHBvd2VyIChncmVlbiBidXR0b24pICovCi19OwotCi1zdGF0aWMgc3RydWN0IHJjX2tleW1hcCByYzVfaGF1cHBhdWdlX25ld19tYXAgPSB7Ci0JLm1hcCA9IHsKLQkJLnNjYW4gICAgPSByYzVfaGF1cHBhdWdlX25ldywKLQkJLnNpemUgICAgPSBBUlJBWV9TSVpFKHJjNV9oYXVwcGF1Z2VfbmV3KSwKLQkJLmlyX3R5cGUgPSBJUl9UWVBFX1JDNSwKLQkJLm5hbWUgICAgPSBSQ19NQVBfUkM1X0hBVVBQQVVHRV9ORVcsCi0JfQotfTsKLQotc3RhdGljIGludCBfX2luaXQgaW5pdF9yY19tYXBfcmM1X2hhdXBwYXVnZV9uZXcodm9pZCkKLXsKLQlyZXR1cm4gaXJfcmVnaXN0ZXJfbWFwKCZyYzVfaGF1cHBhdWdlX25ld19tYXApOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yY19tYXBfcmM1X2hhdXBwYXVnZV9uZXcodm9pZCkKLXsKLQlpcl91bnJlZ2lzdGVyX21hcCgmcmM1X2hhdXBwYXVnZV9uZXdfbWFwKTsKLX0KLQotbW9kdWxlX2luaXQoaW5pdF9yY19tYXBfcmM1X2hhdXBwYXVnZV9uZXcpCi1tb2R1bGVfZXhpdChleGl0X3JjX21hcF9yYzVfaGF1cHBhdWdlX25ldykKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtcmM1LXR2LmMgYi9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtcmM1LXR2LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczY2NlMmYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLXJjNS10di5jCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyogcmM1LXR2LmggLSBLZXl0YWJsZSBmb3IgcmM1X3R2IFJlbW90ZSBDb250cm9sbGVyCi0gKgotICoga2V5bWFwIGltcG9ydGVkIGZyb20gaXIta2V5bWFwcy5jCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDEwIGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2luY2x1ZGUgPG1lZGlhL3JjLW1hcC5oPgotCi0vKiBnZW5lcmljIFJDNSBrZXl0YWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiBzZWUgaHR0cDovL3VzZXJzLnBhbmRvcmEuYmUvbmVueWEvZWxlY3Ryb25pY3MvcmM1L2NvZGVzMDAuaHRtICovCi0vKiB1c2VkIGJ5IG9sZCAoYmxhY2spIEhhdXBwYXVnZSByZW1vdGVzICAgICAgICAgICAgICAgICAgICAgICAgICovCi0KLXN0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgcmM1X3R2W10gPSB7Ci0JLyogS2V5cyAwIHRvIDkgKi8KLQl7IDB4MDAsIEtFWV8wIH0sCi0JeyAweDAxLCBLRVlfMSB9LAotCXsgMHgwMiwgS0VZXzIgfSwKLQl7IDB4MDMsIEtFWV8zIH0sCi0JeyAweDA0LCBLRVlfNCB9LAotCXsgMHgwNSwgS0VZXzUgfSwKLQl7IDB4MDYsIEtFWV82IH0sCi0JeyAweDA3LCBLRVlfNyB9LAotCXsgMHgwOCwgS0VZXzggfSwKLQl7IDB4MDksIEtFWV85IH0sCi0KLQl7IDB4MGIsIEtFWV9DSEFOTkVMIH0sCQkvKiBjaGFubmVsIC8gcHJvZ3JhbSAoamFwYW46IDExKSAqLwotCXsgMHgwYywgS0VZX1BPV0VSIH0sCQkvKiBzdGFuZGJ5ICovCi0JeyAweDBkLCBLRVlfTVVURSB9LAkJLyogbXV0ZSAvIGRlbXV0ZSAqLwotCXsgMHgwZiwgS0VZX1RWIH0sCQkvKiBkaXNwbGF5ICovCi0JeyAweDEwLCBLRVlfVk9MVU1FVVAgfSwKLQl7IDB4MTEsIEtFWV9WT0xVTUVET1dOIH0sCi0JeyAweDEyLCBLRVlfQlJJR0hUTkVTU1VQIH0sCi0JeyAweDEzLCBLRVlfQlJJR0hUTkVTU0RPV04gfSwKLQl7IDB4MWUsIEtFWV9TRUFSQ0ggfSwJCS8qIHNlYXJjaCArICovCi0JeyAweDIwLCBLRVlfQ0hBTk5FTFVQIH0sCS8qIGNoYW5uZWwgLyBwcm9ncmFtICsgKi8KLQl7IDB4MjEsIEtFWV9DSEFOTkVMRE9XTiB9LAkvKiBjaGFubmVsIC8gcHJvZ3JhbSAtICovCi0JeyAweDIyLCBLRVlfQ0hBTk5FTCB9LAkJLyogYWx0IC8gY2hhbm5lbCAqLwotCXsgMHgyMywgS0VZX0xBTkdVQUdFIH0sCQkvKiAxc3QgLyAybmQgbGFuZ3VhZ2UgKi8KLQl7IDB4MjYsIEtFWV9TTEVFUCB9LAkJLyogc2xlZXB0aW1lciAqLwotCXsgMHgyZSwgS0VZX01FTlUgfSwJCS8qIDJuZCBjb250cm9scyAoVVNBOiBtZW51KSAqLwotCXsgMHgzMCwgS0VZX1BBVVNFIH0sCi0JeyAweDMyLCBLRVlfUkVXSU5EIH0sCi0JeyAweDMzLCBLRVlfR09UTyB9LAotCXsgMHgzNSwgS0VZX1BMQVkgfSwKLQl7IDB4MzYsIEtFWV9TVE9QIH0sCi0JeyAweDM3LCBLRVlfUkVDT1JEIH0sCQkvKiByZWNvcmRpbmcgKi8KLQl7IDB4M2MsIEtFWV9URVhUIH0sCQkvKiB0ZWxldGV4dCBzdWJtb2RlIChKYXBhbjogMTIpICovCi0JeyAweDNkLCBLRVlfU1VTUEVORCB9LAkJLyogc3lzdGVtIHN0YW5kYnkgKi8KLQotfTsKLQotc3RhdGljIHN0cnVjdCByY19rZXltYXAgcmM1X3R2X21hcCA9IHsKLQkubWFwID0gewotCQkuc2NhbiAgICA9IHJjNV90diwKLQkJLnNpemUgICAgPSBBUlJBWV9TSVpFKHJjNV90diksCi0JCS5pcl90eXBlID0gSVJfVFlQRV9VTktOT1dOLAkvKiBMZWdhY3kgSVIgdHlwZSAqLwotCQkubmFtZSAgICA9IFJDX01BUF9SQzVfVFYsCi0JfQotfTsKLQotc3RhdGljIGludCBfX2luaXQgaW5pdF9yY19tYXBfcmM1X3R2KHZvaWQpCi17Ci0JcmV0dXJuIGlyX3JlZ2lzdGVyX21hcCgmcmM1X3R2X21hcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3JjX21hcF9yYzVfdHYodm9pZCkKLXsKLQlpcl91bnJlZ2lzdGVyX21hcCgmcmM1X3R2X21hcCk7Ci19Ci0KLW1vZHVsZV9pbml0KGluaXRfcmNfbWFwX3JjNV90dikKLW1vZHVsZV9leGl0KGV4aXRfcmNfbWFwX3JjNV90dikKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtcmM2LW1jZS5jIGIvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLXJjNi1tY2UuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmRhOTU1ZC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtcmM2LW1jZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTEzICswLDAgQEAKLS8qIHJjLXJjNi1tY2UuYyAtIEtleXRhYmxlIGZvciBXaW5kb3dzIE1lZGlhIENlbnRlciBSQy02IHJlbW90ZXMgZm9yIHVzZQotICogd2l0aCB0aGUgTWVkaWEgQ2VudGVyIEVkaXRpb24gZUhvbWUgSW5mcmFyZWQgVHJhbnNjZWl2ZXIuCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDEwIGJ5IEphcm9kIFdpbHNvbiA8amFyb2RAcmVkaGF0LmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLSNpbmNsdWRlIDxtZWRpYS9yYy1tYXAuaD4KLQotc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSByYzZfbWNlW10gPSB7Ci0KLQl7IDB4ODAwZjA0MDAsIEtFWV9OVU1FUklDXzAgfSwKLQl7IDB4ODAwZjA0MDEsIEtFWV9OVU1FUklDXzEgfSwKLQl7IDB4ODAwZjA0MDIsIEtFWV9OVU1FUklDXzIgfSwKLQl7IDB4ODAwZjA0MDMsIEtFWV9OVU1FUklDXzMgfSwKLQl7IDB4ODAwZjA0MDQsIEtFWV9OVU1FUklDXzQgfSwKLQl7IDB4ODAwZjA0MDUsIEtFWV9OVU1FUklDXzUgfSwKLQl7IDB4ODAwZjA0MDYsIEtFWV9OVU1FUklDXzYgfSwKLQl7IDB4ODAwZjA0MDcsIEtFWV9OVU1FUklDXzcgfSwKLQl7IDB4ODAwZjA0MDgsIEtFWV9OVU1FUklDXzggfSwKLQl7IDB4ODAwZjA0MDksIEtFWV9OVU1FUklDXzkgfSwKLQotCXsgMHg4MDBmMDQwYSwgS0VZX0RFTEVURSB9LAotCXsgMHg4MDBmMDQwYiwgS0VZX0VOVEVSIH0sCi0JeyAweDgwMGYwNDBjLCBLRVlfUE9XRVIgfSwJCS8qIFBDIFBvd2VyICovCi0JeyAweDgwMGYwNDBkLCBLRVlfUFJPRzEgfSwJCS8qIFdpbmRvd3MgTUNFIGJ1dHRvbiAqLwotCXsgMHg4MDBmMDQwZSwgS0VZX01VVEUgfSwKLQl7IDB4ODAwZjA0MGYsIEtFWV9JTkZPIH0sCi0KLQl7IDB4ODAwZjA0MTAsIEtFWV9WT0xVTUVVUCB9LAotCXsgMHg4MDBmMDQxMSwgS0VZX1ZPTFVNRURPV04gfSwKLQl7IDB4ODAwZjA0MTIsIEtFWV9DSEFOTkVMVVAgfSwKLQl7IDB4ODAwZjA0MTMsIEtFWV9DSEFOTkVMRE9XTiB9LAotCi0JeyAweDgwMGYwNDE0LCBLRVlfRkFTVEZPUldBUkQgfSwKLQl7IDB4ODAwZjA0MTUsIEtFWV9SRVdJTkQgfSwKLQl7IDB4ODAwZjA0MTYsIEtFWV9QTEFZIH0sCi0JeyAweDgwMGYwNDE3LCBLRVlfUkVDT1JEIH0sCi0JeyAweDgwMGYwNDE4LCBLRVlfUEFVU0UgfSwKLQl7IDB4ODAwZjA0NmUsIEtFWV9QTEFZUEFVU0UgfSwKLQl7IDB4ODAwZjA0MTksIEtFWV9TVE9QIH0sCi0JeyAweDgwMGYwNDFhLCBLRVlfTkVYVCB9LAotCXsgMHg4MDBmMDQxYiwgS0VZX1BSRVZJT1VTIH0sCi0JeyAweDgwMGYwNDFjLCBLRVlfTlVNRVJJQ19QT1VORCB9LAotCXsgMHg4MDBmMDQxZCwgS0VZX05VTUVSSUNfU1RBUiB9LAotCi0JeyAweDgwMGYwNDFlLCBLRVlfVVAgfSwKLQl7IDB4ODAwZjA0MWYsIEtFWV9ET1dOIH0sCi0JeyAweDgwMGYwNDIwLCBLRVlfTEVGVCB9LAotCXsgMHg4MDBmMDQyMSwgS0VZX1JJR0hUIH0sCi0KLQl7IDB4ODAwZjA0MjIsIEtFWV9PSyB9LAotCXsgMHg4MDBmMDQyMywgS0VZX0VYSVQgfSwKLQl7IDB4ODAwZjA0MjQsIEtFWV9EVkQgfSwKLQl7IDB4ODAwZjA0MjUsIEtFWV9UVU5FUiB9LAkJLyogTGl2ZVRWICovCi0JeyAweDgwMGYwNDI2LCBLRVlfRVBHIH0sCQkvKiBHdWlkZSAqLwotCXsgMHg4MDBmMDQyNywgS0VZX1pPT00gfSwJCS8qIEFzcGVjdCAqLwotCi0JeyAweDgwMGYwNDNhLCBLRVlfQlJJR0hUTkVTU1VQIH0sCi0KLQl7IDB4ODAwZjA0NDYsIEtFWV9UViB9LAotCXsgMHg4MDBmMDQ0NywgS0VZX0FVRElPIH0sCQkvKiBNeSBNdXNpYyAqLwotCXsgMHg4MDBmMDQ0OCwgS0VZX1BWUiB9LAkJLyogUmVjb3JkZWRUViAqLwotCXsgMHg4MDBmMDQ0OSwgS0VZX0NBTUVSQSB9LAotCXsgMHg4MDBmMDQ0YSwgS0VZX1ZJREVPIH0sCi0JeyAweDgwMGYwNDRjLCBLRVlfTEFOR1VBR0UgfSwKLQl7IDB4ODAwZjA0NGQsIEtFWV9USVRMRSB9LAotCXsgMHg4MDBmMDQ0ZSwgS0VZX1BSSU5UIH0sCS8qIFByaW50IC0gSFAgT0VNIHZlcnNpb24gb2YgcmVtb3RlICovCi0KLQl7IDB4ODAwZjA0NTAsIEtFWV9SQURJTyB9LAotCi0JeyAweDgwMGYwNDVhLCBLRVlfU1VCVElUTEUgfSwJCS8qIENhcHRpb24vVGVsZXRleHQgKi8KLQl7IDB4ODAwZjA0NWIsIEtFWV9SRUQgfSwKLQl7IDB4ODAwZjA0NWMsIEtFWV9HUkVFTiB9LAotCXsgMHg4MDBmMDQ1ZCwgS0VZX1lFTExPVyB9LAotCXsgMHg4MDBmMDQ1ZSwgS0VZX0JMVUUgfSwKLQotCXsgMHg4MDBmMDQ2NSwgS0VZX1BPV0VSMiB9LAkvKiBUViBQb3dlciAqLwotCXsgMHg4MDBmMDQ2ZSwgS0VZX1BMQVlQQVVTRSB9LAotCXsgMHg4MDBmMDQ2ZiwgS0VZX01FRElBIH0sCS8qIFN0YXJ0IG1lZGlhIGFwcGxpY2F0aW9uIChORVcpICovCi0KLQl7IDB4ODAwZjA0ODAsIEtFWV9CUklHSFRORVNTRE9XTiB9LAotCXsgMHg4MDBmMDQ4MSwgS0VZX1BMQVlQQVVTRSB9LAotfTsKLQotc3RhdGljIHN0cnVjdCByY19rZXltYXAgcmM2X21jZV9tYXAgPSB7Ci0JLm1hcCA9IHsKLQkJLnNjYW4gICAgPSByYzZfbWNlLAotCQkuc2l6ZSAgICA9IEFSUkFZX1NJWkUocmM2X21jZSksCi0JCS5pcl90eXBlID0gSVJfVFlQRV9SQzYsCi0JCS5uYW1lICAgID0gUkNfTUFQX1JDNl9NQ0UsCi0JfQotfTsKLQotc3RhdGljIGludCBfX2luaXQgaW5pdF9yY19tYXBfcmM2X21jZSh2b2lkKQotewotCXJldHVybiBpcl9yZWdpc3Rlcl9tYXAoJnJjNl9tY2VfbWFwKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGV4aXRfcmNfbWFwX3JjNl9tY2Uodm9pZCkKLXsKLQlpcl91bnJlZ2lzdGVyX21hcCgmcmM2X21jZV9tYXApOwotfQotCi1tb2R1bGVfaW5pdChpbml0X3JjX21hcF9yYzZfbWNlKQotbW9kdWxlX2V4aXQoZXhpdF9yY19tYXBfcmM2X21jZSkKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiSmFyb2QgV2lsc29uIDxqYXJvZEByZWRoYXQuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLXJlYWwtYXVkaW8tMjIwLTMyLWtleXMuYyBiL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1yZWFsLWF1ZGlvLTIyMC0zMi1rZXlzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiMWE2ZDIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLXJlYWwtYXVkaW8tMjIwLTMyLWtleXMuYworKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLS8qIHJlYWwtYXVkaW8tMjIwLTMyLWtleXMuaCAtIEtleXRhYmxlIGZvciByZWFsX2F1ZGlvXzIyMF8zMl9rZXlzIFJlbW90ZSBDb250cm9sbGVyCi0gKgotICoga2V5bWFwIGltcG9ydGVkIGZyb20gaXIta2V5bWFwcy5jCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDEwIGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2luY2x1ZGUgPG1lZGlhL3JjLW1hcC5oPgotCi0vKiBab2dpcyBSZWFsIEF1ZGlvIDIyMCAtIDMyIGtleXMgSVIgKi8KLQotc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSByZWFsX2F1ZGlvXzIyMF8zMl9rZXlzW10gPSB7Ci0JeyAweDFjLCBLRVlfUkFESU99LAotCXsgMHgxMiwgS0VZX1BPV0VSMn0sCi0KLQl7IDB4MDEsIEtFWV8xfSwKLQl7IDB4MDIsIEtFWV8yfSwKLQl7IDB4MDMsIEtFWV8zfSwKLQl7IDB4MDQsIEtFWV80fSwKLQl7IDB4MDUsIEtFWV81fSwKLQl7IDB4MDYsIEtFWV82fSwKLQl7IDB4MDcsIEtFWV83fSwKLQl7IDB4MDgsIEtFWV84fSwKLQl7IDB4MDksIEtFWV85fSwKLQl7IDB4MDAsIEtFWV8wfSwKLQotCXsgMHgwYywgS0VZX1ZPTFVNRVVQfSwKLQl7IDB4MTgsIEtFWV9WT0xVTUVET1dOfSwKLQl7IDB4MGIsIEtFWV9DSEFOTkVMVVB9LAotCXsgMHgxNSwgS0VZX0NIQU5ORUxET1dOfSwKLQl7IDB4MTYsIEtFWV9FTlRFUn0sCi0KLQl7IDB4MTEsIEtFWV9MSVNUfSwJCS8qIFNvdXJjZSAqLwotCXsgMHgwZCwgS0VZX0FVRElPfSwJCS8qIHN0ZXJlbyAqLwotCi0JeyAweDBmLCBLRVlfUFJFVklPVVN9LAkJLyogUHJldiAqLwotCXsgMHgxYiwgS0VZX1RJTUV9LAkJLyogVGltZXNoaWZ0ICovCi0JeyAweDFhLCBLRVlfTkVYVH0sCQkvKiBOZXh0ICovCi0KLQl7IDB4MGUsIEtFWV9TVE9QfSwKLQl7IDB4MWYsIEtFWV9QTEFZfSwKLQl7IDB4MWUsIEtFWV9QTEFZUEFVU0V9LAkJLyogUGF1c2UgKi8KLQotCXsgMHgxZCwgS0VZX1JFQ09SRH0sCi0JeyAweDEzLCBLRVlfTVVURX0sCi0JeyAweDE5LCBLRVlfQ0FNRVJBfSwJCS8qIFNuYXBzaG90ICovCi0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmNfa2V5bWFwIHJlYWxfYXVkaW9fMjIwXzMyX2tleXNfbWFwID0gewotCS5tYXAgPSB7Ci0JCS5zY2FuICAgID0gcmVhbF9hdWRpb18yMjBfMzJfa2V5cywKLQkJLnNpemUgICAgPSBBUlJBWV9TSVpFKHJlYWxfYXVkaW9fMjIwXzMyX2tleXMpLAotCQkuaXJfdHlwZSA9IElSX1RZUEVfVU5LTk9XTiwJLyogTGVnYWN5IElSIHR5cGUgKi8KLQkJLm5hbWUgICAgPSBSQ19NQVBfUkVBTF9BVURJT18yMjBfMzJfS0VZUywKLQl9Ci19OwotCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcF9yZWFsX2F1ZGlvXzIyMF8zMl9rZXlzKHZvaWQpCi17Ci0JcmV0dXJuIGlyX3JlZ2lzdGVyX21hcCgmcmVhbF9hdWRpb18yMjBfMzJfa2V5c19tYXApOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yY19tYXBfcmVhbF9hdWRpb18yMjBfMzJfa2V5cyh2b2lkKQotewotCWlyX3VucmVnaXN0ZXJfbWFwKCZyZWFsX2F1ZGlvXzIyMF8zMl9rZXlzX21hcCk7Ci19Ci0KLW1vZHVsZV9pbml0KGluaXRfcmNfbWFwX3JlYWxfYXVkaW9fMjIwXzMyX2tleXMpCi1tb2R1bGVfZXhpdChleGl0X3JjX21hcF9yZWFsX2F1ZGlvXzIyMF8zMl9rZXlzKQotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1zdHJlYW16YXAuYyBiL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1zdHJlYW16YXAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGYzMjAxMy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtc3RyZWFtemFwLmMKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0vKiByYy1zdHJlYW16YXAuYyAtIEtleXRhYmxlIGZvciBTdHJlYW16YXAgUEMgUmVtb3RlLCBmb3IgdXNlCi0gKiB3aXRoIHRoZSBTdHJlYW16YXAgUEMgUmVtb3RlIElSIFJlY2VpdmVyLgotICoKLSAqIENvcHlyaWdodCAoYykgMjAxMCBieSBKYXJvZCBXaWxzb24gPGphcm9kQHJlZGhhdC5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0jaW5jbHVkZSA8bWVkaWEvcmMtbWFwLmg+Ci0KLXN0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgc3RyZWFtemFwW10gPSB7Ci0vKgotICogVGhlIFN0cmVhbXphcCByZW1vdGUgaXMgYWxtb3N0LCBidXQgbm90IHF1aXRlLCBSQy01LCBhcyBpdCBoYXMgYW4gZXh0cmEKLSAqIGJpdCBpbiBpdCwgd2hpY2ggdGhyb3dzIHRoZSBpbi1rZXJuZWwgUkMtNSBkZWNvZGVyIGZvciBhIGxvb3AuIEN1cnJlbnRseSwKLSAqIGFuIGFkZGl0aW9uYWwgUkMtNS1zeiBkZWNvZGVyIGlzIGJlaW5nIGRlcGxveWVkIHRvIHN1cHBvcnQgaXQsIGJ1dCBpdAotICogbWF5IGJlIHBvc3NpYmxlIHRvIG1lcmdlIGl0IGJhY2sgd2l0aCB0aGUgc3RhbmRhcmQgUkMtNSBkZWNvZGVyLgotICovCi0JeyAweDI4YzAsIEtFWV9OVU1FUklDXzAgfSwKLQl7IDB4MjhjMSwgS0VZX05VTUVSSUNfMSB9LAotCXsgMHgyOGMyLCBLRVlfTlVNRVJJQ18yIH0sCi0JeyAweDI4YzMsIEtFWV9OVU1FUklDXzMgfSwKLQl7IDB4MjhjNCwgS0VZX05VTUVSSUNfNCB9LAotCXsgMHgyOGM1LCBLRVlfTlVNRVJJQ181IH0sCi0JeyAweDI4YzYsIEtFWV9OVU1FUklDXzYgfSwKLQl7IDB4MjhjNywgS0VZX05VTUVSSUNfNyB9LAotCXsgMHgyOGM4LCBLRVlfTlVNRVJJQ184IH0sCi0JeyAweDI4YzksIEtFWV9OVU1FUklDXzkgfSwKLQl7IDB4MjhjYSwgS0VZX1BPV0VSIH0sCi0JeyAweDI4Y2IsIEtFWV9NVVRFIH0sCi0JeyAweDI4Y2MsIEtFWV9DSEFOTkVMVVAgfSwKLQl7IDB4MjhjZCwgS0VZX1ZPTFVNRVVQIH0sCi0JeyAweDI4Y2UsIEtFWV9DSEFOTkVMRE9XTiB9LAotCXsgMHgyOGNmLCBLRVlfVk9MVU1FRE9XTiB9LAotCXsgMHgyOGQwLCBLRVlfVVAgfSwKLQl7IDB4MjhkMSwgS0VZX0xFRlQgfSwKLQl7IDB4MjhkMiwgS0VZX09LIH0sCi0JeyAweDI4ZDMsIEtFWV9SSUdIVCB9LAotCXsgMHgyOGQ0LCBLRVlfRE9XTiB9LAotCXsgMHgyOGQ1LCBLRVlfTUVOVSB9LAotCXsgMHgyOGQ2LCBLRVlfRVhJVCB9LAotCXsgMHgyOGQ3LCBLRVlfUExBWSB9LAotCXsgMHgyOGQ4LCBLRVlfUEFVU0UgfSwKLQl7IDB4MjhkOSwgS0VZX1NUT1AgfSwKLQl7IDB4MjhkYSwgS0VZX0JBQ0sgfSwKLQl7IDB4MjhkYiwgS0VZX0ZPUldBUkQgfSwKLQl7IDB4MjhkYywgS0VZX1JFQ09SRCB9LAotCXsgMHgyOGRkLCBLRVlfUkVXSU5EIH0sCi0JeyAweDI4ZGUsIEtFWV9GQVNURk9SV0FSRCB9LAotCXsgMHgyOGUwLCBLRVlfUkVEIH0sCi0JeyAweDI4ZTEsIEtFWV9HUkVFTiB9LAotCXsgMHgyOGUyLCBLRVlfWUVMTE9XIH0sCi0JeyAweDI4ZTMsIEtFWV9CTFVFIH0sCi0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmNfa2V5bWFwIHN0cmVhbXphcF9tYXAgPSB7Ci0JLm1hcCA9IHsKLQkJLnNjYW4gICAgPSBzdHJlYW16YXAsCi0JCS5zaXplICAgID0gQVJSQVlfU0laRShzdHJlYW16YXApLAotCQkuaXJfdHlwZSA9IElSX1RZUEVfUkM1X1NaLAotCQkubmFtZSAgICA9IFJDX01BUF9TVFJFQU1aQVAsCi0JfQotfTsKLQotc3RhdGljIGludCBfX2luaXQgaW5pdF9yY19tYXBfc3RyZWFtemFwKHZvaWQpCi17Ci0JcmV0dXJuIGlyX3JlZ2lzdGVyX21hcCgmc3RyZWFtemFwX21hcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3JjX21hcF9zdHJlYW16YXAodm9pZCkKLXsKLQlpcl91bnJlZ2lzdGVyX21hcCgmc3RyZWFtemFwX21hcCk7Ci19Ci0KLW1vZHVsZV9pbml0KGluaXRfcmNfbWFwX3N0cmVhbXphcCkKLW1vZHVsZV9leGl0KGV4aXRfcmNfbWFwX3N0cmVhbXphcCkKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiSmFyb2QgV2lsc29uIDxqYXJvZEByZWRoYXQuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLXRicy1uZWMuYyBiL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy10YnMtbmVjLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzMDk2MzEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLXRicy1uZWMuYworKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qIHRicy1uZWMuaCAtIEtleXRhYmxlIGZvciB0YnNfbmVjIFJlbW90ZSBDb250cm9sbGVyCi0gKgotICoga2V5bWFwIGltcG9ydGVkIGZyb20gaXIta2V5bWFwcy5jCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDEwIGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2luY2x1ZGUgPG1lZGlhL3JjLW1hcC5oPgotCi1zdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIHRic19uZWNbXSA9IHsKLQl7IDB4MDQsIEtFWV9QT1dFUjJ9LAkvKnBvd2VyKi8KLQl7IDB4MTQsIEtFWV9NVVRFfSwJLyptdXRlKi8KLQl7IDB4MDcsIEtFWV8xfSwKLQl7IDB4MDYsIEtFWV8yfSwKLQl7IDB4MDUsIEtFWV8zfSwKLQl7IDB4MGIsIEtFWV80fSwKLQl7IDB4MGEsIEtFWV81fSwKLQl7IDB4MDksIEtFWV82fSwKLQl7IDB4MGYsIEtFWV83fSwKLQl7IDB4MGUsIEtFWV84fSwKLQl7IDB4MGQsIEtFWV85fSwKLQl7IDB4MTIsIEtFWV8wfSwKLQl7IDB4MTYsIEtFWV9DSEFOTkVMVVB9LAkvKmNoKyovCi0JeyAweDExLCBLRVlfQ0hBTk5FTERPV059LC8qY2gtKi8KLQl7IDB4MTMsIEtFWV9WT0xVTUVVUH0sCS8qdm9sKyovCi0JeyAweDBjLCBLRVlfVk9MVU1FRE9XTn0sLyp2b2wtKi8KLQl7IDB4MDMsIEtFWV9SRUNPUkR9LAkvKnJlYyovCi0JeyAweDE4LCBLRVlfUEFVU0V9LAkvKnBhdXNlKi8KLQl7IDB4MTksIEtFWV9PS30sCS8qb2sqLwotCXsgMHgxYSwgS0VZX0NBTUVSQX0sCS8qIHNuYXBzaG90ICovCi0JeyAweDAxLCBLRVlfVVB9LAotCXsgMHgxMCwgS0VZX0xFRlR9LAotCXsgMHgwMiwgS0VZX1JJR0hUfSwKLQl7IDB4MDgsIEtFWV9ET1dOfSwKLQl7IDB4MTUsIEtFWV9GQVZPUklURVN9LAotCXsgMHgxNywgS0VZX1NVQlRJVExFfSwKLQl7IDB4MWQsIEtFWV9aT09NfSwKLQl7IDB4MWYsIEtFWV9FWElUfSwKLQl7IDB4MWUsIEtFWV9NRU5VfSwKLQl7IDB4MWMsIEtFWV9FUEd9LAotCXsgMHgwMCwgS0VZX1BSRVZJT1VTfSwKLQl7IDB4MWIsIEtFWV9NT0RFfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmNfa2V5bWFwIHRic19uZWNfbWFwID0gewotCS5tYXAgPSB7Ci0JCS5zY2FuICAgID0gdGJzX25lYywKLQkJLnNpemUgICAgPSBBUlJBWV9TSVpFKHRic19uZWMpLAotCQkuaXJfdHlwZSA9IElSX1RZUEVfVU5LTk9XTiwJLyogTGVnYWN5IElSIHR5cGUgKi8KLQkJLm5hbWUgICAgPSBSQ19NQVBfVEJTX05FQywKLQl9Ci19OwotCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcF90YnNfbmVjKHZvaWQpCi17Ci0JcmV0dXJuIGlyX3JlZ2lzdGVyX21hcCgmdGJzX25lY19tYXApOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yY19tYXBfdGJzX25lYyh2b2lkKQotewotCWlyX3VucmVnaXN0ZXJfbWFwKCZ0YnNfbmVjX21hcCk7Ci19Ci0KLW1vZHVsZV9pbml0KGluaXRfcmNfbWFwX3Ric19uZWMpCi1tb2R1bGVfZXhpdChleGl0X3JjX21hcF90YnNfbmVjKQotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy10ZXJyYXRlYy1jaW5lcmd5LXhzLmMgYi9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtdGVycmF0ZWMtY2luZXJneS14cy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MzI2YTBiLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy10ZXJyYXRlYy1jaW5lcmd5LXhzLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBACi0vKiB0ZXJyYXRlYy1jaW5lcmd5LXhzLmggLSBLZXl0YWJsZSBmb3IgdGVycmF0ZWNfY2luZXJneV94cyBSZW1vdGUgQ29udHJvbGxlcgotICoKLSAqIGtleW1hcCBpbXBvcnRlZCBmcm9tIGlyLWtleW1hcHMuYwotICoKLSAqIENvcHlyaWdodCAoYykgMjAxMCBieSBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLSNpbmNsdWRlIDxtZWRpYS9yYy1tYXAuaD4KLQotLyogVGVycmF0ZWMgQ2luZXJneSBIeWJyaWQgVCBVU0IgWFMKLSAgIERldmluIEhlaXRtdWVsbGVyIDxkaGVpdG11ZWxsZXJAbGludXh0di5vcmc+Ci0gKi8KLQotc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSB0ZXJyYXRlY19jaW5lcmd5X3hzW10gPSB7Ci0JeyAweDQxLCBLRVlfSE9NRX0sCi0JeyAweDAxLCBLRVlfUE9XRVJ9LAotCXsgMHg0MiwgS0VZX01FTlV9LAotCXsgMHgwMiwgS0VZXzF9LAotCXsgMHgwMywgS0VZXzJ9LAotCXsgMHgwNCwgS0VZXzN9LAotCXsgMHg0MywgS0VZX1NVQlRJVExFfSwKLQl7IDB4MDUsIEtFWV80fSwKLQl7IDB4MDYsIEtFWV81fSwKLQl7IDB4MDcsIEtFWV82fSwKLQl7IDB4NDQsIEtFWV9URVhUfSwKLQl7IDB4MDgsIEtFWV83fSwKLQl7IDB4MDksIEtFWV84fSwKLQl7IDB4MGEsIEtFWV85fSwKLQl7IDB4NDUsIEtFWV9ERUxFVEV9LAotCXsgMHgwYiwgS0VZX1RVTkVSfSwKLQl7IDB4MGMsIEtFWV8wfSwKLQl7IDB4MGQsIEtFWV9NT0RFfSwKLQl7IDB4NDYsIEtFWV9UVn0sCi0JeyAweDQ3LCBLRVlfRFZEfSwKLQl7IDB4NDksIEtFWV9WSURFT30sCi0JeyAweDRiLCBLRVlfQVVYfSwKLQl7IDB4MTAsIEtFWV9VUH0sCi0JeyAweDExLCBLRVlfTEVGVH0sCi0JeyAweDEyLCBLRVlfT0t9LAotCXsgMHgxMywgS0VZX1JJR0hUfSwKLQl7IDB4MTQsIEtFWV9ET1dOfSwKLQl7IDB4MGYsIEtFWV9FUEd9LAotCXsgMHgxNiwgS0VZX0lORk99LAotCXsgMHg0ZCwgS0VZX0JBQ0tTUEFDRX0sCi0JeyAweDFjLCBLRVlfVk9MVU1FVVB9LAotCXsgMHg0YywgS0VZX1BMQVl9LAotCXsgMHgxYiwgS0VZX0NIQU5ORUxVUH0sCi0JeyAweDFlLCBLRVlfVk9MVU1FRE9XTn0sCi0JeyAweDFkLCBLRVlfTVVURX0sCi0JeyAweDFmLCBLRVlfQ0hBTk5FTERPV059LAotCXsgMHgxNywgS0VZX1JFRH0sCi0JeyAweDE4LCBLRVlfR1JFRU59LAotCXsgMHgxOSwgS0VZX1lFTExPV30sCi0JeyAweDFhLCBLRVlfQkxVRX0sCi0JeyAweDU4LCBLRVlfUkVDT1JEfSwKLQl7IDB4NDgsIEtFWV9TVE9QfSwKLQl7IDB4NDAsIEtFWV9QQVVTRX0sCi0JeyAweDU0LCBLRVlfTEFTVH0sCi0JeyAweDRlLCBLRVlfUkVXSU5EfSwKLQl7IDB4NGYsIEtFWV9GQVNURk9SV0FSRH0sCi0JeyAweDVjLCBLRVlfTkVYVH0sCi19OwotCi1zdGF0aWMgc3RydWN0IHJjX2tleW1hcCB0ZXJyYXRlY19jaW5lcmd5X3hzX21hcCA9IHsKLQkubWFwID0gewotCQkuc2NhbiAgICA9IHRlcnJhdGVjX2NpbmVyZ3lfeHMsCi0JCS5zaXplICAgID0gQVJSQVlfU0laRSh0ZXJyYXRlY19jaW5lcmd5X3hzKSwKLQkJLmlyX3R5cGUgPSBJUl9UWVBFX1VOS05PV04sCS8qIExlZ2FjeSBJUiB0eXBlICovCi0JCS5uYW1lICAgID0gUkNfTUFQX1RFUlJBVEVDX0NJTkVSR1lfWFMsCi0JfQotfTsKLQotc3RhdGljIGludCBfX2luaXQgaW5pdF9yY19tYXBfdGVycmF0ZWNfY2luZXJneV94cyh2b2lkKQotewotCXJldHVybiBpcl9yZWdpc3Rlcl9tYXAoJnRlcnJhdGVjX2NpbmVyZ3lfeHNfbWFwKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGV4aXRfcmNfbWFwX3RlcnJhdGVjX2NpbmVyZ3lfeHModm9pZCkKLXsKLQlpcl91bnJlZ2lzdGVyX21hcCgmdGVycmF0ZWNfY2luZXJneV94c19tYXApOwotfQotCi1tb2R1bGVfaW5pdChpbml0X3JjX21hcF90ZXJyYXRlY19jaW5lcmd5X3hzKQotbW9kdWxlX2V4aXQoZXhpdF9yY19tYXBfdGVycmF0ZWNfY2luZXJneV94cykKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtdGVycmF0ZWMtc2xpbS5jIGIvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLXRlcnJhdGVjLXNsaW0uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTBkZWU0Yy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtdGVycmF0ZWMtc2xpbS5jCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotLyoKLSAqIFRlcnJhVGVjIHJlbW90ZSBjb250cm9sbGVyIGtleXRhYmxlCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFudHRpIFBhbG9zYWFyaSA8Y3JvcGVAaWtpLmZpPgotICoKLSAqICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogICAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqICAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPG1lZGlhL3JjLW1hcC5oPgotCi0vKiBUZXJyYVRlYyBzbGltIHJlbW90ZSwgNyByb3dzLCA0IGNvbHVtbnMuICovCi0vKiBVc2VzIE5FQyBleHRlbmRlZCAweDAyYmQuICovCi1zdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIHRlcnJhdGVjX3NsaW1bXSA9IHsKLQl7IDB4MDJiZDAwLCBLRVlfMSB9LAotCXsgMHgwMmJkMDEsIEtFWV8yIH0sCi0JeyAweDAyYmQwMiwgS0VZXzMgfSwKLQl7IDB4MDJiZDAzLCBLRVlfNCB9LAotCXsgMHgwMmJkMDQsIEtFWV81IH0sCi0JeyAweDAyYmQwNSwgS0VZXzYgfSwKLQl7IDB4MDJiZDA2LCBLRVlfNyB9LAotCXsgMHgwMmJkMDcsIEtFWV84IH0sCi0JeyAweDAyYmQwOCwgS0VZXzkgfSwKLQl7IDB4MDJiZDA5LCBLRVlfMCB9LAotCXsgMHgwMmJkMGEsIEtFWV9NVVRFIH0sCi0JeyAweDAyYmQwYiwgS0VZX05FVyB9LCAgICAgICAgICAgICAvKiBzeW1ib2w6IFBJUCAqLwotCXsgMHgwMmJkMGUsIEtFWV9WT0xVTUVET1dOIH0sCi0JeyAweDAyYmQwZiwgS0VZX1BMQVlQQVVTRSB9LAotCXsgMHgwMmJkMTAsIEtFWV9SSUdIVCB9LAotCXsgMHgwMmJkMTEsIEtFWV9MRUZUIH0sCi0JeyAweDAyYmQxMiwgS0VZX1VQIH0sCi0JeyAweDAyYmQxMywgS0VZX0RPV04gfSwKLQl7IDB4MDJiZDE1LCBLRVlfT0sgfSwKLQl7IDB4MDJiZDE2LCBLRVlfU1RPUCB9LAotCXsgMHgwMmJkMTcsIEtFWV9DQU1FUkEgfSwgICAgICAgICAgLyogc25hcHNob3QgKi8KLQl7IDB4MDJiZDE4LCBLRVlfQ0hBTk5FTFVQIH0sCi0JeyAweDAyYmQxOSwgS0VZX1JFQ09SRCB9LAotCXsgMHgwMmJkMWEsIEtFWV9DSEFOTkVMRE9XTiB9LAotCXsgMHgwMmJkMWMsIEtFWV9FU0MgfSwKLQl7IDB4MDJiZDFmLCBLRVlfVk9MVU1FVVAgfSwKLQl7IDB4MDJiZDQ0LCBLRVlfRVBHIH0sCi0JeyAweDAyYmQ0NSwgS0VZX1BPV0VSMiB9LCAgICAgICAgICAvKiBbcmVkIHBvd2VyIGJ1dHRvbl0gKi8KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmNfa2V5bWFwIHRlcnJhdGVjX3NsaW1fbWFwID0gewotCS5tYXAgPSB7Ci0JCS5zY2FuICAgID0gdGVycmF0ZWNfc2xpbSwKLQkJLnNpemUgICAgPSBBUlJBWV9TSVpFKHRlcnJhdGVjX3NsaW0pLAotCQkuaXJfdHlwZSA9IElSX1RZUEVfTkVDLAotCQkubmFtZSAgICA9IFJDX01BUF9URVJSQVRFQ19TTElNLAotCX0KLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGluaXRfcmNfbWFwX3RlcnJhdGVjX3NsaW0odm9pZCkKLXsKLQlyZXR1cm4gaXJfcmVnaXN0ZXJfbWFwKCZ0ZXJyYXRlY19zbGltX21hcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3JjX21hcF90ZXJyYXRlY19zbGltKHZvaWQpCi17Ci0JaXJfdW5yZWdpc3Rlcl9tYXAoJnRlcnJhdGVjX3NsaW1fbWFwKTsKLX0KLQotbW9kdWxlX2luaXQoaW5pdF9yY19tYXBfdGVycmF0ZWNfc2xpbSkKLW1vZHVsZV9leGl0KGV4aXRfcmNfbWFwX3RlcnJhdGVjX3NsaW0pCi0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IoIkFudHRpIFBhbG9zYWFyaSA8Y3JvcGVAaWtpLmZpPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLXRldmlpLW5lYy5jIGIvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLXRldmlpLW5lYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMzBkNDExLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy10ZXZpaS1uZWMuYworKysgL2Rldi9udWxsCkBAIC0xLDg4ICswLDAgQEAKLS8qIHRldmlpLW5lYy5oIC0gS2V5dGFibGUgZm9yIHRldmlpX25lYyBSZW1vdGUgQ29udHJvbGxlcgotICoKLSAqIGtleW1hcCBpbXBvcnRlZCBmcm9tIGlyLWtleW1hcHMuYwotICoKLSAqIENvcHlyaWdodCAoYykgMjAxMCBieSBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLSNpbmNsdWRlIDxtZWRpYS9yYy1tYXAuaD4KLQotc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSB0ZXZpaV9uZWNbXSA9IHsKLQl7IDB4MGEsIEtFWV9QT1dFUjJ9LAotCXsgMHgwYywgS0VZX01VVEV9LAotCXsgMHgxMSwgS0VZXzF9LAotCXsgMHgxMiwgS0VZXzJ9LAotCXsgMHgxMywgS0VZXzN9LAotCXsgMHgxNCwgS0VZXzR9LAotCXsgMHgxNSwgS0VZXzV9LAotCXsgMHgxNiwgS0VZXzZ9LAotCXsgMHgxNywgS0VZXzd9LAotCXsgMHgxOCwgS0VZXzh9LAotCXsgMHgxOSwgS0VZXzl9LAotCXsgMHgxMCwgS0VZXzB9LAotCXsgMHgxYywgS0VZX01FTlV9LAotCXsgMHgwZiwgS0VZX1ZPTFVNRURPV059LAotCXsgMHgxYSwgS0VZX0xBU1R9LAotCXsgMHgwZSwgS0VZX09QRU59LAotCXsgMHgwNCwgS0VZX1JFQ09SRH0sCi0JeyAweDA5LCBLRVlfVk9MVU1FVVB9LAotCXsgMHgwOCwgS0VZX0NIQU5ORUxVUH0sCi0JeyAweDA3LCBLRVlfUFZSfSwKLQl7IDB4MGIsIEtFWV9USU1FfSwKLQl7IDB4MDIsIEtFWV9SSUdIVH0sCi0JeyAweDAzLCBLRVlfTEVGVH0sCi0JeyAweDAwLCBLRVlfVVB9LAotCXsgMHgxZiwgS0VZX09LfSwKLQl7IDB4MDEsIEtFWV9ET1dOfSwKLQl7IDB4MDUsIEtFWV9UVU5FUn0sCi0JeyAweDA2LCBLRVlfQ0hBTk5FTERPV059LAotCXsgMHg0MCwgS0VZX1BMQVlQQVVTRX0sCi0JeyAweDFlLCBLRVlfUkVXSU5EfSwKLQl7IDB4MWIsIEtFWV9GQVZPUklURVN9LAotCXsgMHgxZCwgS0VZX0JBQ0t9LAotCXsgMHg0ZCwgS0VZX0ZBU1RGT1JXQVJEfSwKLQl7IDB4NDQsIEtFWV9FUEd9LAotCXsgMHg0YywgS0VZX0lORk99LAotCXsgMHg0MSwgS0VZX0FCfSwKLQl7IDB4NDMsIEtFWV9BVURJT30sCi0JeyAweDQ1LCBLRVlfU1VCVElUTEV9LAotCXsgMHg0YSwgS0VZX0xJU1R9LAotCXsgMHg0NiwgS0VZX0YxfSwKLQl7IDB4NDcsIEtFWV9GMn0sCi0JeyAweDVlLCBLRVlfRjN9LAotCXsgMHg1YywgS0VZX0Y0fSwKLQl7IDB4NTIsIEtFWV9GNX0sCi0JeyAweDVhLCBLRVlfRjZ9LAotCXsgMHg1NiwgS0VZX01PREV9LAotCXsgMHg1OCwgS0VZX1NXSVRDSFZJREVPTU9ERX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHJjX2tleW1hcCB0ZXZpaV9uZWNfbWFwID0gewotCS5tYXAgPSB7Ci0JCS5zY2FuICAgID0gdGV2aWlfbmVjLAotCQkuc2l6ZSAgICA9IEFSUkFZX1NJWkUodGV2aWlfbmVjKSwKLQkJLmlyX3R5cGUgPSBJUl9UWVBFX1VOS05PV04sCS8qIExlZ2FjeSBJUiB0eXBlICovCi0JCS5uYW1lICAgID0gUkNfTUFQX1RFVklJX05FQywKLQl9Ci19OwotCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcF90ZXZpaV9uZWModm9pZCkKLXsKLQlyZXR1cm4gaXJfcmVnaXN0ZXJfbWFwKCZ0ZXZpaV9uZWNfbWFwKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGV4aXRfcmNfbWFwX3RldmlpX25lYyh2b2lkKQotewotCWlyX3VucmVnaXN0ZXJfbWFwKCZ0ZXZpaV9uZWNfbWFwKTsKLX0KLQotbW9kdWxlX2luaXQoaW5pdF9yY19tYXBfdGV2aWlfbmVjKQotbW9kdWxlX2V4aXQoZXhpdF9yY19tYXBfdGV2aWlfbmVjKQotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy10b3RhbC1tZWRpYS1pbi1oYW5kLmMgYi9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtdG90YWwtbWVkaWEtaW4taGFuZC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDE5ODU3Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy10b3RhbC1tZWRpYS1pbi1oYW5kLmMKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi0vKgotICogVG90YWwgTWVkaWEgSW4gSGFuZCByZW1vdGUgY29udHJvbGxlciBrZXl0YWJsZQotICoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBbnR0aSBQYWxvc2FhcmkgPGNyb3BlQGlraS5maT4KLSAqCi0gKiAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqICAgIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiAgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgotICovCi0KLSNpbmNsdWRlIDxtZWRpYS9yYy1tYXAuaD4KLQotLyogVXNlcyBORUMgZXh0ZW5kZWQgMHgwMmJkICovCi1zdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIHRvdGFsX21lZGlhX2luX2hhbmRbXSA9IHsKLQl7IDB4MDJiZDAwLCBLRVlfMSB9LAotCXsgMHgwMmJkMDEsIEtFWV8yIH0sCi0JeyAweDAyYmQwMiwgS0VZXzMgfSwKLQl7IDB4MDJiZDAzLCBLRVlfNCB9LAotCXsgMHgwMmJkMDQsIEtFWV81IH0sCi0JeyAweDAyYmQwNSwgS0VZXzYgfSwKLQl7IDB4MDJiZDA2LCBLRVlfNyB9LAotCXsgMHgwMmJkMDcsIEtFWV84IH0sCi0JeyAweDAyYmQwOCwgS0VZXzkgfSwKLQl7IDB4MDJiZDA5LCBLRVlfMCB9LAotCXsgMHgwMmJkMGEsIEtFWV9NVVRFIH0sCi0JeyAweDAyYmQwYiwgS0VZX0NZQ0xFV0lORE9XUyB9LCAgICAvKiB5ZWxsb3csIFttaW4gLyBtYXhdICovCi0JeyAweDAyYmQwYywgS0VZX1ZJREVPIH0sICAgICAgICAgICAvKiBUViAvIEFWICovCi0JeyAweDAyYmQwZSwgS0VZX1ZPTFVNRURPV04gfSwKLQl7IDB4MDJiZDBmLCBLRVlfVElNRSB9LCAgICAgICAgICAgIC8qIFRpbWVTaGlmdCAqLwotCXsgMHgwMmJkMTAsIEtFWV9SSUdIVCB9LCAgICAgICAgICAgLyogcmlnaHQgYXJyb3cgKi8KLQl7IDB4MDJiZDExLCBLRVlfTEVGVCB9LCAgICAgICAgICAgIC8qIGxlZnQgYXJyb3cgKi8KLQl7IDB4MDJiZDEyLCBLRVlfVVAgfSwgICAgICAgICAgICAgIC8qIHVwIGFycm93ICovCi0JeyAweDAyYmQxMywgS0VZX0RPV04gfSwgICAgICAgICAgICAvKiBkb3duIGFycm93ICovCi0JeyAweDAyYmQxNCwgS0VZX1BPV0VSMiB9LCAgICAgICAgICAvKiBbcmVkXSAqLwotCXsgMHgwMmJkMTUsIEtFWV9PSyB9LCAgICAgICAgICAgICAgLyogT0sgKi8KLQl7IDB4MDJiZDE2LCBLRVlfU1RPUCB9LAotCXsgMHgwMmJkMTcsIEtFWV9DQU1FUkEgfSwgICAgICAgICAgLyogU25hcHNob3QgKi8KLQl7IDB4MDJiZDE4LCBLRVlfQ0hBTk5FTFVQIH0sCi0JeyAweDAyYmQxOSwgS0VZX1JFQ09SRCB9LAotCXsgMHgwMmJkMWEsIEtFWV9DSEFOTkVMRE9XTiB9LAotCXsgMHgwMmJkMWMsIEtFWV9FU0MgfSwgICAgICAgICAgICAgLyogRXNjICovCi0JeyAweDAyYmQxZSwgS0VZX1BMQVkgfSwKLQl7IDB4MDJiZDFmLCBLRVlfVk9MVU1FVVAgfSwKLQl7IDB4MDJiZDQwLCBLRVlfUEFVU0UgfSwKLQl7IDB4MDJiZDQxLCBLRVlfRkFTVEZPUldBUkQgfSwgICAgIC8qIEZGID4+ICovCi0JeyAweDAyYmQ0MiwgS0VZX1JFV0lORCB9LCAgICAgICAgICAvKiBGUiA8PCAqLwotCXsgMHgwMmJkNDMsIEtFWV9aT09NIH0sICAgICAgICAgICAgLyogW3dpbmRvdyArIG1vdXNlIHBvaW50ZXJdICovCi0JeyAweDAyYmQ0NCwgS0VZX1NIVUZGTEUgfSwgICAgICAgICAvKiBTaHVmZmxlICovCi0JeyAweDAyYmQ0NSwgS0VZX0lORk8gfSwgICAgICAgICAgICAvKiBbcmVkIChJKV0gKi8KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmNfa2V5bWFwIHRvdGFsX21lZGlhX2luX2hhbmRfbWFwID0gewotCS5tYXAgPSB7Ci0JCS5zY2FuICAgID0gdG90YWxfbWVkaWFfaW5faGFuZCwKLQkJLnNpemUgICAgPSBBUlJBWV9TSVpFKHRvdGFsX21lZGlhX2luX2hhbmQpLAotCQkuaXJfdHlwZSA9IElSX1RZUEVfTkVDLAotCQkubmFtZSAgICA9IFJDX01BUF9UT1RBTF9NRURJQV9JTl9IQU5ELAotCX0KLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGluaXRfcmNfbWFwX3RvdGFsX21lZGlhX2luX2hhbmQodm9pZCkKLXsKLQlyZXR1cm4gaXJfcmVnaXN0ZXJfbWFwKCZ0b3RhbF9tZWRpYV9pbl9oYW5kX21hcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3JjX21hcF90b3RhbF9tZWRpYV9pbl9oYW5kKHZvaWQpCi17Ci0JaXJfdW5yZWdpc3Rlcl9tYXAoJnRvdGFsX21lZGlhX2luX2hhbmRfbWFwKTsKLX0KLQotbW9kdWxlX2luaXQoaW5pdF9yY19tYXBfdG90YWxfbWVkaWFfaW5faGFuZCkKLW1vZHVsZV9leGl0KGV4aXRfcmNfbWFwX3RvdGFsX21lZGlhX2luX2hhbmQpCi0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IoIkFudHRpIFBhbG9zYWFyaSA8Y3JvcGVAaWtpLmZpPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLXRyZWtzdG9yLmMgYi9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtdHJla3N0b3IuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTEwOTJjYS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtdHJla3N0b3IuYworKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLS8qCi0gKiBUcmVrU3RvciByZW1vdGUgY29udHJvbGxlciBrZXl0YWJsZQotICoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBbnR0aSBQYWxvc2FhcmkgPGNyb3BlQGlraS5maT4KLSAqCi0gKiAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqICAgIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiAgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgotICovCi0KLSNpbmNsdWRlIDxtZWRpYS9yYy1tYXAuaD4KLQotLyogVHJla1N0b3IgRFZCLVQgVVNCIFN0aWNrIHJlbW90ZSBjb250cm9sbGVyLiAqLwotLyogSW1wb3J0ZWQgZnJvbSBhZjkwMTUuaC4KLSAgIEluaXRpYWwga2V5dGFibGUgd2FzIGZyb20gTWFyYyBTY2huZWlkZXIgPG1hY2tlQG1hY2tlLm9yZz4gKi8KLXN0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgdHJla3N0b3JbXSA9IHsKLQl7IDB4MDA4NCwgS0VZXzAgfSwKLQl7IDB4MDA4NSwgS0VZX01VVEUgfSwgICAgICAgICAgICAvKiBNdXRlICovCi0JeyAweDAwODYsIEtFWV9IT01FUEFHRSB9LCAgICAgICAgLyogSG9tZSAqLwotCXsgMHgwMDg3LCBLRVlfVVAgfSwgICAgICAgICAgICAgIC8qIFVwICovCi0JeyAweDAwODgsIEtFWV9PSyB9LCAgICAgICAgICAgICAgLyogT0sgKi8KLQl7IDB4MDA4OSwgS0VZX1JJR0hUIH0sICAgICAgICAgICAvKiBSaWdodCAqLwotCXsgMHgwMDhhLCBLRVlfRkFTVEZPUldBUkQgfSwgICAgIC8qIEZhc3QgZm9yd2FyZCAqLwotCXsgMHgwMDhiLCBLRVlfVk9MVU1FVVAgfSwgICAgICAgIC8qIFZvbHVtZSArICovCi0JeyAweDAwOGMsIEtFWV9ET1dOIH0sICAgICAgICAgICAgLyogRG93biAqLwotCXsgMHgwMDhkLCBLRVlfUExBWSB9LCAgICAgICAgICAgIC8qIFBsYXkvUGF1c2UgKi8KLQl7IDB4MDA4ZSwgS0VZX1NUT1AgfSwgICAgICAgICAgICAvKiBTdG9wICovCi0JeyAweDAwOGYsIEtFWV9FUEcgfSwgICAgICAgICAgICAgLyogSW5mby9FUEcgKi8KLQl7IDB4MDA5MCwgS0VZXzcgfSwKLQl7IDB4MDA5MSwgS0VZXzQgfSwKLQl7IDB4MDA5MiwgS0VZXzEgfSwKLQl7IDB4MDA5MywgS0VZX0NIQU5ORUxET1dOIH0sICAgICAvKiBDaGFubmVsIC0gKi8KLQl7IDB4MDA5NCwgS0VZXzggfSwKLQl7IDB4MDA5NSwgS0VZXzUgfSwKLQl7IDB4MDA5NiwgS0VZXzIgfSwKLQl7IDB4MDA5NywgS0VZX0NIQU5ORUxVUCB9LCAgICAgICAvKiBDaGFubmVsICsgKi8KLQl7IDB4MDA5OCwgS0VZXzkgfSwKLQl7IDB4MDA5OSwgS0VZXzYgfSwKLQl7IDB4MDA5YSwgS0VZXzMgfSwKLQl7IDB4MDA5YiwgS0VZX1ZPTFVNRURPV04gfSwgICAgICAvKiBWb2x1bWUgLSAqLwotCXsgMHgwMDljLCBLRVlfVFYgfSwgICAgICAgICAgICAgIC8qIFRWICovCi0JeyAweDAwOWQsIEtFWV9SRUNPUkQgfSwgICAgICAgICAgLyogUmVjb3JkICovCi0JeyAweDAwOWUsIEtFWV9SRVdJTkQgfSwgICAgICAgICAgLyogUmV3aW5kICovCi0JeyAweDAwOWYsIEtFWV9MRUZUIH0sICAgICAgICAgICAgLyogTGVmdCAqLwotfTsKLQotc3RhdGljIHN0cnVjdCByY19rZXltYXAgdHJla3N0b3JfbWFwID0gewotCS5tYXAgPSB7Ci0JCS5zY2FuICAgID0gdHJla3N0b3IsCi0JCS5zaXplICAgID0gQVJSQVlfU0laRSh0cmVrc3RvciksCi0JCS5pcl90eXBlID0gSVJfVFlQRV9ORUMsCi0JCS5uYW1lICAgID0gUkNfTUFQX1RSRUtTVE9SLAotCX0KLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGluaXRfcmNfbWFwX3RyZWtzdG9yKHZvaWQpCi17Ci0JcmV0dXJuIGlyX3JlZ2lzdGVyX21hcCgmdHJla3N0b3JfbWFwKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGV4aXRfcmNfbWFwX3RyZWtzdG9yKHZvaWQpCi17Ci0JaXJfdW5yZWdpc3Rlcl9tYXAoJnRyZWtzdG9yX21hcCk7Ci19Ci0KLW1vZHVsZV9pbml0KGluaXRfcmNfbWFwX3RyZWtzdG9yKQotbW9kdWxlX2V4aXQoZXhpdF9yY19tYXBfdHJla3N0b3IpCi0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IoIkFudHRpIFBhbG9zYWFyaSA8Y3JvcGVAaWtpLmZpPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLXR0LTE1MDAuYyBiL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy10dC0xNTAwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjODhkZTAuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLXR0LTE1MDAuYworKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qIHR0LTE1MDAuaCAtIEtleXRhYmxlIGZvciB0dF8xNTAwIFJlbW90ZSBDb250cm9sbGVyCi0gKgotICoga2V5bWFwIGltcG9ydGVkIGZyb20gaXIta2V5bWFwcy5jCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDEwIGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2luY2x1ZGUgPG1lZGlhL3JjLW1hcC5oPgotCi0vKiBmb3IgdGhlIFRlY2hub3RyZW5kIDE1MDAgYnVuZGxlZCByZW1vdGVzIChncmV5IGFuZCBibGFjayk6ICovCi0KLXN0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgdHRfMTUwMFtdID0gewotCXsgMHgwMSwgS0VZX1BPV0VSIH0sCi0JeyAweDAyLCBLRVlfU0hVRkZMRSB9LAkJLyogPyBkb3VibGUtYXJyb3cga2V5ICovCi0JeyAweDAzLCBLRVlfMSB9LAotCXsgMHgwNCwgS0VZXzIgfSwKLQl7IDB4MDUsIEtFWV8zIH0sCi0JeyAweDA2LCBLRVlfNCB9LAotCXsgMHgwNywgS0VZXzUgfSwKLQl7IDB4MDgsIEtFWV82IH0sCi0JeyAweDA5LCBLRVlfNyB9LAotCXsgMHgwYSwgS0VZXzggfSwKLQl7IDB4MGIsIEtFWV85IH0sCi0JeyAweDBjLCBLRVlfMCB9LAotCXsgMHgwZCwgS0VZX1VQIH0sCi0JeyAweDBlLCBLRVlfTEVGVCB9LAotCXsgMHgwZiwgS0VZX09LIH0sCi0JeyAweDEwLCBLRVlfUklHSFQgfSwKLQl7IDB4MTEsIEtFWV9ET1dOIH0sCi0JeyAweDEyLCBLRVlfSU5GTyB9LAotCXsgMHgxMywgS0VZX0VYSVQgfSwKLQl7IDB4MTQsIEtFWV9SRUQgfSwKLQl7IDB4MTUsIEtFWV9HUkVFTiB9LAotCXsgMHgxNiwgS0VZX1lFTExPVyB9LAotCXsgMHgxNywgS0VZX0JMVUUgfSwKLQl7IDB4MTgsIEtFWV9NVVRFIH0sCi0JeyAweDE5LCBLRVlfVEVYVCB9LAotCXsgMHgxYSwgS0VZX01PREUgfSwJCS8qID8gVFYvUmFkaW8gKi8KLQl7IDB4MjEsIEtFWV9PUFRJT04gfSwKLQl7IDB4MjIsIEtFWV9FUEcgfSwKLQl7IDB4MjMsIEtFWV9DSEFOTkVMVVAgfSwKLQl7IDB4MjQsIEtFWV9DSEFOTkVMRE9XTiB9LAotCXsgMHgyNSwgS0VZX1ZPTFVNRVVQIH0sCi0JeyAweDI2LCBLRVlfVk9MVU1FRE9XTiB9LAotCXsgMHgyNywgS0VZX1NFVFVQIH0sCi0JeyAweDNhLCBLRVlfUkVDT1JEIH0sCQkvKiB0aGVzZSBrZXlzIGFyZSBvbmx5IGluIHRoZSBibGFjayByZW1vdGUgKi8KLQl7IDB4M2IsIEtFWV9QTEFZIH0sCi0JeyAweDNjLCBLRVlfU1RPUCB9LAotCXsgMHgzZCwgS0VZX1JFV0lORCB9LAotCXsgMHgzZSwgS0VZX1BBVVNFIH0sCi0JeyAweDNmLCBLRVlfRk9SV0FSRCB9LAotfTsKLQotc3RhdGljIHN0cnVjdCByY19rZXltYXAgdHRfMTUwMF9tYXAgPSB7Ci0JLm1hcCA9IHsKLQkJLnNjYW4gICAgPSB0dF8xNTAwLAotCQkuc2l6ZSAgICA9IEFSUkFZX1NJWkUodHRfMTUwMCksCi0JCS5pcl90eXBlID0gSVJfVFlQRV9VTktOT1dOLAkvKiBMZWdhY3kgSVIgdHlwZSAqLwotCQkubmFtZSAgICA9IFJDX01BUF9UVF8xNTAwLAotCX0KLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGluaXRfcmNfbWFwX3R0XzE1MDAodm9pZCkKLXsKLQlyZXR1cm4gaXJfcmVnaXN0ZXJfbWFwKCZ0dF8xNTAwX21hcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3JjX21hcF90dF8xNTAwKHZvaWQpCi17Ci0JaXJfdW5yZWdpc3Rlcl9tYXAoJnR0XzE1MDBfbWFwKTsKLX0KLQotbW9kdWxlX2luaXQoaW5pdF9yY19tYXBfdHRfMTUwMCkKLW1vZHVsZV9leGl0KGV4aXRfcmNfbWFwX3R0XzE1MDApCi0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IoIk1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLXR3aW5oYW4xMDI3LmMgYi9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtdHdpbmhhbjEwMjcuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGI1ZDM1Ni4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtdHdpbmhhbjEwMjcuYworKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLSNpbmNsdWRlIDxtZWRpYS9yYy1tYXAuaD4KLQotc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSB0d2luaGFuX3ZwMTAyN1tdID0gewotCXsgMHgxNiwgS0VZX1BPV0VSMiB9LAotCXsgMHgxNywgS0VZX0ZBVk9SSVRFUyB9LAotCXsgMHgwZiwgS0VZX1RFWFQgfSwKLQl7IDB4NDgsIEtFWV9JTkZPfSwKLQl7IDB4MWMsIEtFWV9FUEcgfSwKLQl7IDB4MDQsIEtFWV9MSVNUIH0sCi0KLQl7IDB4MDMsIEtFWV8xIH0sCi0JeyAweDAxLCBLRVlfMiB9LAotCXsgMHgwNiwgS0VZXzMgfSwKLQl7IDB4MDksIEtFWV80IH0sCi0JeyAweDFkLCBLRVlfNSB9LAotCXsgMHgxZiwgS0VZXzYgfSwKLQl7IDB4MGQsIEtFWV83IH0sCi0JeyAweDE5LCBLRVlfOCB9LAotCXsgMHgxYiwgS0VZXzkgfSwKLQl7IDB4MTUsIEtFWV8wIH0sCi0KLQl7IDB4MGMsIEtFWV9DQU5DRUwgfSwKLQl7IDB4NGEsIEtFWV9DTEVBUiB9LAotCXsgMHgxMywgS0VZX0JBQ0tTUEFDRSB9LAotCXsgMHgwMCwgS0VZX1RBQiB9LAotCi0JeyAweDRiLCBLRVlfVVAgfSwKLQl7IDB4NTEsIEtFWV9ET1dOIH0sCi0JeyAweDRlLCBLRVlfTEVGVCB9LAotCXsgMHg1MiwgS0VZX1JJR0hUIH0sCi0JeyAweDRmLCBLRVlfRU5URVIgfSwKLQotCXsgMHgxZSwgS0VZX1ZPTFVNRVVQIH0sCi0JeyAweDBhLCBLRVlfVk9MVU1FRE9XTiB9LAotCXsgMHgwMiwgS0VZX0NIQU5ORUxET1dOIH0sCi0JeyAweDA1LCBLRVlfQ0hBTk5FTFVQIH0sCi0JeyAweDExLCBLRVlfUkVDT1JEIH0sCi0KLQl7IDB4MTQsIEtFWV9QTEFZIH0sCi0JeyAweDRjLCBLRVlfUEFVU0UgfSwKLQl7IDB4MWEsIEtFWV9TVE9QIH0sCi0JeyAweDQwLCBLRVlfUkVXSU5EIH0sCi0JeyAweDEyLCBLRVlfRkFTVEZPUldBUkQgfSwKLQl7IDB4NDEsIEtFWV9QUkVWSU9VU1NPTkcgfSwKLQl7IDB4NDIsIEtFWV9ORVhUU09ORyB9LAotCXsgMHg1NCwgS0VZX1NBVkUgfSwKLQl7IDB4NTAsIEtFWV9MQU5HVUFHRSB9LAotCXsgMHg0NywgS0VZX01FRElBIH0sCi0JeyAweDRkLCBLRVlfU0NSRUVOIH0sCi0JeyAweDQzLCBLRVlfU1VCVElUTEUgfSwKLQl7IDB4MTAsIEtFWV9NVVRFIH0sCi0JeyAweDQ5LCBLRVlfQVVESU8gfSwKLQl7IDB4MDcsIEtFWV9TTEVFUCB9LAotCXsgMHgwOCwgS0VZX1ZJREVPIH0sCi0JeyAweDBlLCBLRVlfQUdBSU4gfSwKLQl7IDB4NDUsIEtFWV9FUVVBTCB9LAotCXsgMHg0NiwgS0VZX01JTlVTIH0sCi0JeyAweDE4LCBLRVlfUkVEIH0sCi0JeyAweDUzLCBLRVlfR1JFRU4gfSwKLQl7IDB4NWUsIEtFWV9ZRUxMT1cgfSwKLQl7IDB4NWYsIEtFWV9CTFVFIH0sCi19OwotCi1zdGF0aWMgc3RydWN0IHJjX2tleW1hcCB0d2luaGFuX3ZwMTAyN19tYXAgPSB7Ci0JLm1hcCA9IHsKLQkJLnNjYW4gICAgPSB0d2luaGFuX3ZwMTAyNywKLQkJLnNpemUgICAgPSBBUlJBWV9TSVpFKHR3aW5oYW5fdnAxMDI3KSwKLQkJLmlyX3R5cGUgPSBJUl9UWVBFX1VOS05PV04sCS8qIExlZ2FjeSBJUiB0eXBlICovCi0JCS5uYW1lICAgID0gUkNfTUFQX1RXSU5IQU5fVlAxMDI3X0RWQlMsCi0JfQotfTsKLQotc3RhdGljIGludCBfX2luaXQgaW5pdF9yY19tYXBfdHdpbmhhbl92cDEwMjcodm9pZCkKLXsKLQlyZXR1cm4gaXJfcmVnaXN0ZXJfbWFwKCZ0d2luaGFuX3ZwMTAyN19tYXApOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yY19tYXBfdHdpbmhhbl92cDEwMjcodm9pZCkKLXsKLQlpcl91bnJlZ2lzdGVyX21hcCgmdHdpbmhhbl92cDEwMjdfbWFwKTsKLX0KLQotbW9kdWxlX2luaXQoaW5pdF9yY19tYXBfdHdpbmhhbl92cDEwMjcpCi1tb2R1bGVfZXhpdChleGl0X3JjX21hcF90d2luaGFuX3ZwMTAyNykKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiU2VyZ2V5IEl2YW5vdiA8MTIza2FzaEBnbWFpbC5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtdmlkZW9tYXRlLXMzNTAuYyBiL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy12aWRlb21hdGUtczM1MC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZGY3ZmNkLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy12aWRlb21hdGUtczM1MC5jCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotLyogdmlkZW9tYXRlLXMzNTAuaCAtIEtleXRhYmxlIGZvciB2aWRlb21hdGVfczM1MCBSZW1vdGUgQ29udHJvbGxlcgotICoKLSAqIGtleW1hcCBpbXBvcnRlZCBmcm9tIGlyLWtleW1hcHMuYwotICoKLSAqIENvcHlyaWdodCAoYykgMjAxMCBieSBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLSNpbmNsdWRlIDxtZWRpYS9yYy1tYXAuaD4KLQotc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSB2aWRlb21hdGVfczM1MFtdID0gewotCXsgMHgwMCwgS0VZX1RWfSwKLQl7IDB4MDEsIEtFWV9EVkR9LAotCXsgMHgwNCwgS0VZX1JFQ09SRH0sCi0JeyAweDA1LCBLRVlfVklERU99LAkvKiBUVi9WaWRlbyAqLwotCXsgMHgwNywgS0VZX1NUT1B9LAotCXsgMHgwOCwgS0VZX1BMQVlQQVVTRX0sCi0JeyAweDBhLCBLRVlfUkVXSU5EfSwKLQl7IDB4MGYsIEtFWV9GQVNURk9SV0FSRH0sCi0JeyAweDEwLCBLRVlfQ0hBTk5FTFVQfSwKLQl7IDB4MTIsIEtFWV9WT0xVTUVVUH0sCi0JeyAweDEzLCBLRVlfQ0hBTk5FTERPV059LAotCXsgMHgxNCwgS0VZX01VVEV9LAotCXsgMHgxNSwgS0VZX1ZPTFVNRURPV059LAotCXsgMHgxNiwgS0VZXzF9LAotCXsgMHgxNywgS0VZXzJ9LAotCXsgMHgxOCwgS0VZXzN9LAotCXsgMHgxOSwgS0VZXzR9LAotCXsgMHgxYSwgS0VZXzV9LAotCXsgMHgxYiwgS0VZXzZ9LAotCXsgMHgxYywgS0VZXzd9LAotCXsgMHgxZCwgS0VZXzh9LAotCXsgMHgxZSwgS0VZXzl9LAotCXsgMHgxZiwgS0VZXzB9LAotCXsgMHgyMSwgS0VZX1NMRUVQfSwKLQl7IDB4MjQsIEtFWV9aT09NfSwKLQl7IDB4MjUsIEtFWV9MQVNUfSwJLyogUmVjYWxsICovCi0JeyAweDI2LCBLRVlfU1VCVElUTEV9LAkvKiBDQyAqLwotCXsgMHgyNywgS0VZX0xBTkdVQUdFfSwJLyogTVRTICovCi0JeyAweDI5LCBLRVlfQ0hBTk5FTH0sCS8qIFNVUkYgKi8KLQl7IDB4MmIsIEtFWV9BfSwKLQl7IDB4MmMsIEtFWV9CfSwKLQl7IDB4MmYsIEtFWV9DQU1FUkF9LAkvKiBTbmFwc2hvdCAqLwotCXsgMHgyMywgS0VZX1JBRElPfSwKLQl7IDB4MDIsIEtFWV9QUkVWSU9VU1NPTkd9LAotCXsgMHgwNiwgS0VZX05FWFRTT05HfSwKLQl7IDB4MDMsIEtFWV9FUEd9LAotCXsgMHgwOSwgS0VZX1NFVFVQfSwKLQl7IDB4MjIsIEtFWV9CQUNLU1BBQ0V9LAotCXsgMHgwYywgS0VZX1VQfSwKLQl7IDB4MGUsIEtFWV9ET1dOfSwKLQl7IDB4MGIsIEtFWV9MRUZUfSwKLQl7IDB4MGQsIEtFWV9SSUdIVH0sCi0JeyAweDExLCBLRVlfRU5URVJ9LAotCXsgMHgyMCwgS0VZX1RFWFR9LAotfTsKLQotc3RhdGljIHN0cnVjdCByY19rZXltYXAgdmlkZW9tYXRlX3MzNTBfbWFwID0gewotCS5tYXAgPSB7Ci0JCS5zY2FuICAgID0gdmlkZW9tYXRlX3MzNTAsCi0JCS5zaXplICAgID0gQVJSQVlfU0laRSh2aWRlb21hdGVfczM1MCksCi0JCS5pcl90eXBlID0gSVJfVFlQRV9VTktOT1dOLAkvKiBMZWdhY3kgSVIgdHlwZSAqLwotCQkubmFtZSAgICA9IFJDX01BUF9WSURFT01BVEVfUzM1MCwKLQl9Ci19OwotCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcF92aWRlb21hdGVfczM1MCh2b2lkKQotewotCXJldHVybiBpcl9yZWdpc3Rlcl9tYXAoJnZpZGVvbWF0ZV9zMzUwX21hcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3JjX21hcF92aWRlb21hdGVfczM1MCh2b2lkKQotewotCWlyX3VucmVnaXN0ZXJfbWFwKCZ2aWRlb21hdGVfczM1MF9tYXApOwotfQotCi1tb2R1bGVfaW5pdChpbml0X3JjX21hcF92aWRlb21hdGVfczM1MCkKLW1vZHVsZV9leGl0KGV4aXRfcmNfbWFwX3ZpZGVvbWF0ZV9zMzUwKQotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy12aWRlb21hdGUtdHYtcHZyLmMgYi9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtdmlkZW9tYXRlLXR2LXB2ci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzZiMGE2Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy12aWRlb21hdGUtdHYtcHZyLmMKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi0vKiB2aWRlb21hdGUtdHYtcHZyLmggLSBLZXl0YWJsZSBmb3IgdmlkZW9tYXRlX3R2X3B2ciBSZW1vdGUgQ29udHJvbGxlcgotICoKLSAqIGtleW1hcCBpbXBvcnRlZCBmcm9tIGlyLWtleW1hcHMuYwotICoKLSAqIENvcHlyaWdodCAoYykgMjAxMCBieSBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLSNpbmNsdWRlIDxtZWRpYS9yYy1tYXAuaD4KLQotc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSB2aWRlb21hdGVfdHZfcHZyW10gPSB7Ci0JeyAweDE0LCBLRVlfTVVURSB9LAotCXsgMHgyNCwgS0VZX1pPT00gfSwKLQotCXsgMHgwMSwgS0VZX0RWRCB9LAotCXsgMHgyMywgS0VZX1JBRElPIH0sCi0JeyAweDAwLCBLRVlfVFYgfSwKLQotCXsgMHgwYSwgS0VZX1JFV0lORCB9LAotCXsgMHgwOCwgS0VZX1BMQVlQQVVTRSB9LAotCXsgMHgwZiwgS0VZX0ZPUldBUkQgfSwKLQotCXsgMHgwMiwgS0VZX1BSRVZJT1VTIH0sCi0JeyAweDA3LCBLRVlfU1RPUCB9LAotCXsgMHgwNiwgS0VZX05FWFQgfSwKLQotCXsgMHgwYywgS0VZX1VQIH0sCi0JeyAweDBlLCBLRVlfRE9XTiB9LAotCXsgMHgwYiwgS0VZX0xFRlQgfSwKLQl7IDB4MGQsIEtFWV9SSUdIVCB9LAotCXsgMHgxMSwgS0VZX09LIH0sCi0KLQl7IDB4MDMsIEtFWV9NRU5VIH0sCi0JeyAweDA5LCBLRVlfU0VUVVAgfSwKLQl7IDB4MDUsIEtFWV9WSURFTyB9LAotCXsgMHgyMiwgS0VZX0NIQU5ORUwgfSwKLQotCXsgMHgxMiwgS0VZX1ZPTFVNRVVQIH0sCi0JeyAweDE1LCBLRVlfVk9MVU1FRE9XTiB9LAotCXsgMHgxMCwgS0VZX0NIQU5ORUxVUCB9LAotCXsgMHgxMywgS0VZX0NIQU5ORUxET1dOIH0sCi0KLQl7IDB4MDQsIEtFWV9SRUNPUkQgfSwKLQotCXsgMHgxNiwgS0VZXzEgfSwKLQl7IDB4MTcsIEtFWV8yIH0sCi0JeyAweDE4LCBLRVlfMyB9LAotCXsgMHgxOSwgS0VZXzQgfSwKLQl7IDB4MWEsIEtFWV81IH0sCi0JeyAweDFiLCBLRVlfNiB9LAotCXsgMHgxYywgS0VZXzcgfSwKLQl7IDB4MWQsIEtFWV84IH0sCi0JeyAweDFlLCBLRVlfOSB9LAotCXsgMHgxZiwgS0VZXzAgfSwKLQotCXsgMHgyMCwgS0VZX0xBTkdVQUdFIH0sCi0JeyAweDIxLCBLRVlfU0xFRVAgfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmNfa2V5bWFwIHZpZGVvbWF0ZV90dl9wdnJfbWFwID0gewotCS5tYXAgPSB7Ci0JCS5zY2FuICAgID0gdmlkZW9tYXRlX3R2X3B2ciwKLQkJLnNpemUgICAgPSBBUlJBWV9TSVpFKHZpZGVvbWF0ZV90dl9wdnIpLAotCQkuaXJfdHlwZSA9IElSX1RZUEVfVU5LTk9XTiwJLyogTGVnYWN5IElSIHR5cGUgKi8KLQkJLm5hbWUgICAgPSBSQ19NQVBfVklERU9NQVRFX1RWX1BWUiwKLQl9Ci19OwotCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcF92aWRlb21hdGVfdHZfcHZyKHZvaWQpCi17Ci0JcmV0dXJuIGlyX3JlZ2lzdGVyX21hcCgmdmlkZW9tYXRlX3R2X3B2cl9tYXApOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yY19tYXBfdmlkZW9tYXRlX3R2X3B2cih2b2lkKQotewotCWlyX3VucmVnaXN0ZXJfbWFwKCZ2aWRlb21hdGVfdHZfcHZyX21hcCk7Ci19Ci0KLW1vZHVsZV9pbml0KGluaXRfcmNfbWFwX3ZpZGVvbWF0ZV90dl9wdnIpCi1tb2R1bGVfZXhpdChleGl0X3JjX21hcF92aWRlb21hdGVfdHZfcHZyKQotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy13aW5mYXN0LXVzYmlpLWRlbHV4ZS5jIGIvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLXdpbmZhc3QtdXNiaWktZGVsdXhlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkMmQ1NTAuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLXdpbmZhc3QtdXNiaWktZGVsdXhlLmMKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0vKiB3aW5mYXN0LXVzYmlpLWRlbHV4ZS5oIC0gS2V5dGFibGUgZm9yIHdpbmZhc3RfdXNiaWlfZGVsdXhlIFJlbW90ZSBDb250cm9sbGVyCi0gKgotICoga2V5bWFwIGltcG9ydGVkIGZyb20gaXIta2V5bWFwcy5jCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDEwIGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2luY2x1ZGUgPG1lZGlhL3JjLW1hcC5oPgotCi0vKiBMZWFkdGVrIFdpbmZhc3QgVFYgVVNCIElJIERlbHV4ZSByZW1vdGUKLSAgIE1hZ251cyBBbG0gPG1hZ251cy5hbG1AZ21haWwuY29tPgotICovCi0KLXN0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgd2luZmFzdF91c2JpaV9kZWx1eGVbXSA9IHsKLQl7IDB4NjIsIEtFWV8wfSwKLQl7IDB4NzUsIEtFWV8xfSwKLQl7IDB4NzYsIEtFWV8yfSwKLQl7IDB4NzcsIEtFWV8zfSwKLQl7IDB4NzksIEtFWV80fSwKLQl7IDB4N2EsIEtFWV81fSwKLQl7IDB4N2IsIEtFWV82fSwKLQl7IDB4N2QsIEtFWV83fSwKLQl7IDB4N2UsIEtFWV84fSwKLQl7IDB4N2YsIEtFWV85fSwKLQotCXsgMHgzOCwgS0VZX0NBTUVSQX0sCQkvKiBTTkFQU0hPVCAqLwotCXsgMHgzNywgS0VZX1JFQ09SRH0sCQkvKiBSRUNPUkQgKi8KLQl7IDB4MzUsIEtFWV9USU1FfSwJCS8qIFRJTUVTSElGVCAqLwotCi0JeyAweDc0LCBLRVlfVk9MVU1FVVB9LAkJLyogVk9MVU1FVVAgKi8KLQl7IDB4NzgsIEtFWV9WT0xVTUVET1dOfSwJLyogVk9MVU1FRE9XTiAqLwotCXsgMHg2NCwgS0VZX01VVEV9LAkJLyogTVVURSAqLwotCi0JeyAweDIxLCBLRVlfQ0hBTk5FTH0sCQkvKiBTVVJGICovCi0JeyAweDdjLCBLRVlfQ0hBTk5FTFVQfSwJCS8qIENIQU5ORUxVUCAqLwotCXsgMHg2MCwgS0VZX0NIQU5ORUxET1dOfSwJLyogQ0hBTk5FTERPV04gKi8KLQl7IDB4NjEsIEtFWV9MQVNUfSwJCS8qIExBU1QgQ0hBTk5FTCAoUkVDQUxMKSAqLwotCi0JeyAweDcyLCBLRVlfVklERU99LCAJCS8qIElOUFVUIE1PREVTIChUVi9GTSkgKi8KLQotCXsgMHg3MCwgS0VZX1BPV0VSMn0sCQkvKiBUViBPTi9PRkYgKi8KLQotCXsgMHgzOSwgS0VZX0NZQ0xFV0lORE9XU30sCS8qIE1JTklNSVpFIChCT1NTKSAqLwotCXsgMHgzYSwgS0VZX05FV30sCQkvKiBQSVAgKi8KLQl7IDB4NzMsIEtFWV9aT09NfSwJCS8qIEZVTExTRUNSRUVOICovCi0KLQl7IDB4NjYsIEtFWV9JTkZPfSwJCS8qIE9TRCAoRElTUExBWSkgKi8KLQotCXsgMHgzMSwgS0VZX0RPVH0sCQkvKiAnLicgKi8KLQl7IDB4NjMsIEtFWV9FTlRFUn0sCQkvKiBFTlRFUiAqLwotCi19OwotCi1zdGF0aWMgc3RydWN0IHJjX2tleW1hcCB3aW5mYXN0X3VzYmlpX2RlbHV4ZV9tYXAgPSB7Ci0JLm1hcCA9IHsKLQkJLnNjYW4gICAgPSB3aW5mYXN0X3VzYmlpX2RlbHV4ZSwKLQkJLnNpemUgICAgPSBBUlJBWV9TSVpFKHdpbmZhc3RfdXNiaWlfZGVsdXhlKSwKLQkJLmlyX3R5cGUgPSBJUl9UWVBFX1VOS05PV04sCS8qIExlZ2FjeSBJUiB0eXBlICovCi0JCS5uYW1lICAgID0gUkNfTUFQX1dJTkZBU1RfVVNCSUlfREVMVVhFLAotCX0KLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGluaXRfcmNfbWFwX3dpbmZhc3RfdXNiaWlfZGVsdXhlKHZvaWQpCi17Ci0JcmV0dXJuIGlyX3JlZ2lzdGVyX21hcCgmd2luZmFzdF91c2JpaV9kZWx1eGVfbWFwKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGV4aXRfcmNfbWFwX3dpbmZhc3RfdXNiaWlfZGVsdXhlKHZvaWQpCi17Ci0JaXJfdW5yZWdpc3Rlcl9tYXAoJndpbmZhc3RfdXNiaWlfZGVsdXhlX21hcCk7Ci19Ci0KLW1vZHVsZV9pbml0KGluaXRfcmNfbWFwX3dpbmZhc3RfdXNiaWlfZGVsdXhlKQotbW9kdWxlX2V4aXQoZXhpdF9yY19tYXBfd2luZmFzdF91c2JpaV9kZWx1eGUpCi0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IoIk1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLXdpbmZhc3QuYyBiL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy13aW5mYXN0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlOTBhM2IuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLXdpbmZhc3QuYworKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi0vKiB3aW5mYXN0LmggLSBLZXl0YWJsZSBmb3Igd2luZmFzdCBSZW1vdGUgQ29udHJvbGxlcgotICoKLSAqIGtleW1hcCBpbXBvcnRlZCBmcm9tIGlyLWtleW1hcHMuYwotICoKLSAqIENvcHlyaWdodCAoYykgMjAxMCBieSBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLSNpbmNsdWRlIDxtZWRpYS9yYy1tYXAuaD4KLQotLyogVGFibGUgZm9yIExlYWR0ZWsgV2luZmFzdCBSZW1vdGUgQ29udHJvbHMgLSB1c2VkIGJ5IGJvdGggYnR0diBhbmQgY3g4OCAqLwotCi1zdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIHdpbmZhc3RbXSA9IHsKLQkvKiBLZXlzIDAgdG8gOSAqLwotCXsgMHgxMiwgS0VZXzAgfSwKLQl7IDB4MDUsIEtFWV8xIH0sCi0JeyAweDA2LCBLRVlfMiB9LAotCXsgMHgwNywgS0VZXzMgfSwKLQl7IDB4MDksIEtFWV80IH0sCi0JeyAweDBhLCBLRVlfNSB9LAotCXsgMHgwYiwgS0VZXzYgfSwKLQl7IDB4MGQsIEtFWV83IH0sCi0JeyAweDBlLCBLRVlfOCB9LAotCXsgMHgwZiwgS0VZXzkgfSwKLQotCXsgMHgwMCwgS0VZX1BPV0VSIH0sCi0JeyAweDFiLCBLRVlfQVVESU8gfSwJCS8qIEF1ZGlvIFNvdXJjZSAqLwotCXsgMHgwMiwgS0VZX1RVTkVSIH0sCQkvKiBUVi9GTSwgbm90IG9uIFkwNDAwMDUyICovCi0JeyAweDFlLCBLRVlfVklERU8gfSwJCS8qIFZpZGVvIFNvdXJjZSAqLwotCXsgMHgxNiwgS0VZX0lORk8gfSwJCS8qIERpc3BsYXkgaW5mb3JtYXRpb24gKi8KLQl7IDB4MDQsIEtFWV9WT0xVTUVVUCB9LAotCXsgMHgwOCwgS0VZX1ZPTFVNRURPV04gfSwKLQl7IDB4MGMsIEtFWV9DSEFOTkVMVVAgfSwKLQl7IDB4MTAsIEtFWV9DSEFOTkVMRE9XTiB9LAotCXsgMHgwMywgS0VZX1pPT00gfSwJCS8qIGZ1bGxzY3JlZW4gKi8KLQl7IDB4MWYsIEtFWV9URVhUIH0sCQkvKiBjbG9zZWQgY2FwdGlvbi90ZWxldGV4dCAqLwotCXsgMHgyMCwgS0VZX1NMRUVQIH0sCi0JeyAweDI5LCBLRVlfQ0xFQVIgfSwJCS8qIGJvc3Mga2V5ICovCi0JeyAweDE0LCBLRVlfTVVURSB9LAotCXsgMHgyYiwgS0VZX1JFRCB9LAotCXsgMHgyYywgS0VZX0dSRUVOIH0sCi0JeyAweDJkLCBLRVlfWUVMTE9XIH0sCi0JeyAweDJlLCBLRVlfQkxVRSB9LAotCXsgMHgxOCwgS0VZX0tQUExVUyB9LAkJLyogZmluZSB0dW5lICsgLCBub3Qgb24gWTA0MDA1MiAqLwotCXsgMHgxOSwgS0VZX0tQTUlOVVMgfSwJCS8qIGZpbmUgdHVuZSAtICwgbm90IG9uIFkwNDAwNTIgKi8KLQl7IDB4MmEsIEtFWV9NRURJQSB9LAkJLyogUElQIChQaWN0dXJlIGluIHBpY3R1cmUgKi8KLQl7IDB4MjEsIEtFWV9ET1QgfSwKLQl7IDB4MTMsIEtFWV9FTlRFUiB9LAotCXsgMHgxMSwgS0VZX0xBU1QgfSwJCS8qIFJlY2FsbCAobGFzdCBjaGFubmVsICovCi0JeyAweDIyLCBLRVlfUFJFVklPVVMgfSwKLQl7IDB4MjMsIEtFWV9QTEFZUEFVU0UgfSwKLQl7IDB4MjQsIEtFWV9ORVhUIH0sCi0JeyAweDI1LCBLRVlfVElNRSB9LAkJLyogVGltZSBTaGlmdGluZyAqLwotCXsgMHgyNiwgS0VZX1NUT1AgfSwKLQl7IDB4MjcsIEtFWV9SRUNPUkQgfSwKLQl7IDB4MjgsIEtFWV9TQVZFIH0sCQkvKiBTY3JlZW5zaG90ICovCi0JeyAweDJmLCBLRVlfTUVOVSB9LAotCXsgMHgzMCwgS0VZX0NBTkNFTCB9LAotCXsgMHgzMSwgS0VZX0NIQU5ORUwgfSwJCS8qIENoYW5uZWwgU3VyZiAqLwotCXsgMHgzMiwgS0VZX1NVQlRJVExFIH0sCi0JeyAweDMzLCBLRVlfTEFOR1VBR0UgfSwKLQl7IDB4MzQsIEtFWV9SRVdJTkQgfSwKLQl7IDB4MzUsIEtFWV9GQVNURk9SV0FSRCB9LAotCXsgMHgzNiwgS0VZX1RWIH0sCi0JeyAweDM3LCBLRVlfUkFESU8gfSwJCS8qIEZNICovCi0JeyAweDM4LCBLRVlfRFZEIH0sCi0KLQl7IDB4MWEsIEtFWV9NT0RFfSwJCS8qIGNoYW5nZSB0byBNQ0UgbW9kZSBvbiBZMDRHMDA1MSAqLwotCXsgMHgzZSwgS0VZX0YyMSB9LAkJLyogTUNFICtWT0wsIG9uIFkwNEcwMDMzICovCi0JeyAweDNhLCBLRVlfRjIyIH0sCQkvKiBNQ0UgLVZPTCwgb24gWTA0RzAwMzMgKi8KLQl7IDB4M2IsIEtFWV9GMjMgfSwJCS8qIE1DRSArQ0gsICBvbiBZMDRHMDAzMyAqLwotCXsgMHgzZiwgS0VZX0YyNCB9CQkvKiBNQ0UgLUNILCAgb24gWTA0RzAwMzMgKi8KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmNfa2V5bWFwIHdpbmZhc3RfbWFwID0gewotCS5tYXAgPSB7Ci0JCS5zY2FuICAgID0gd2luZmFzdCwKLQkJLnNpemUgICAgPSBBUlJBWV9TSVpFKHdpbmZhc3QpLAotCQkuaXJfdHlwZSA9IElSX1RZUEVfVU5LTk9XTiwJLyogTGVnYWN5IElSIHR5cGUgKi8KLQkJLm5hbWUgICAgPSBSQ19NQVBfV0lORkFTVCwKLQl9Ci19OwotCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcF93aW5mYXN0KHZvaWQpCi17Ci0JcmV0dXJuIGlyX3JlZ2lzdGVyX21hcCgmd2luZmFzdF9tYXApOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yY19tYXBfd2luZmFzdCh2b2lkKQotewotCWlyX3VucmVnaXN0ZXJfbWFwKCZ3aW5mYXN0X21hcCk7Ci19Ci0KLW1vZHVsZV9pbml0KGluaXRfcmNfbWFwX3dpbmZhc3QpCi1tb2R1bGVfZXhpdChleGl0X3JjX21hcF93aW5mYXN0KQotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvSVIvbGlyY19kZXYuYyBiL2RyaXZlcnMvbWVkaWEvSVIvbGlyY19kZXYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzU2NjU2ZS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL0lSL2xpcmNfZGV2LmMKKysrIC9kZXYvbnVsbApAQCAtMSw4MTQgKzAsMCBAQAotLyoKLSAqIExJUkMgYmFzZSBkcml2ZXIKLSAqCi0gKiBieSBBcnR1ciBMaXBvd3NraSA8YWxpcG93c2tpQGludGVyaWEucGw+Ci0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KLSNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+Ci0jaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KLSNpbmNsdWRlIDxsaW51eC93YWl0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+Ci0jaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgotI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KLQotI2luY2x1ZGUgPG1lZGlhL2xpcmMuaD4KLSNpbmNsdWRlIDxtZWRpYS9saXJjX2Rldi5oPgotCi1zdGF0aWMgaW50IGRlYnVnOwotCi0jZGVmaW5lIElSQ1RMX0RFVl9OQU1FCSJCYXNlUmVtb3RlQ3RsIgotI2RlZmluZSBOT1BMVUcJCS0xCi0jZGVmaW5lIExPR0hFQUQJCSJsaXJjX2RldiAoJXNbJWRdKTogIgotCi1zdGF0aWMgZGV2X3QgbGlyY19iYXNlX2RldjsKLQotc3RydWN0IGlyY3RsIHsKLQlzdHJ1Y3QgbGlyY19kcml2ZXIgZDsKLQlpbnQgYXR0YWNoZWQ7Ci0JaW50IG9wZW47Ci0KLQlzdHJ1Y3QgbXV0ZXggaXJjdGxfbG9jazsKLQlzdHJ1Y3QgbGlyY19idWZmZXIgKmJ1ZjsKLQl1bnNpZ25lZCBpbnQgY2h1bmtfc2l6ZTsKLQotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKLQlsb25nIGppZmZpZXNfdG9fd2FpdDsKLX07Ci0KLXN0YXRpYyBERUZJTkVfTVVURVgobGlyY19kZXZfbG9jayk7Ci0KLXN0YXRpYyBzdHJ1Y3QgaXJjdGwgKmlyY3Rsc1tNQVhfSVJDVExfREVWSUNFU107Ci1zdGF0aWMgc3RydWN0IGNkZXYgY2RldnNbTUFYX0lSQ1RMX0RFVklDRVNdOwotCi0vKiBPbmx5IHVzZWQgZm9yIHN5c2ZzIGJ1dCBkZWZpbmVkIHRvIHZvaWQgb3RoZXJ3aXNlICovCi1zdGF0aWMgc3RydWN0IGNsYXNzICpsaXJjX2NsYXNzOwotCi0vKiAgaGVscGVyIGZ1bmN0aW9uCi0gKiAgaW5pdGlhbGl6ZXMgdGhlIGlyY3RsIHN0cnVjdHVyZQotICovCi1zdGF0aWMgdm9pZCBsaXJjX2lyY3RsX2luaXQoc3RydWN0IGlyY3RsICppcikKLXsKLQltdXRleF9pbml0KCZpci0+aXJjdGxfbG9jayk7Ci0JaXItPmQubWlub3IgPSBOT1BMVUc7Ci19Ci0KLXN0YXRpYyB2b2lkIGxpcmNfaXJjdGxfY2xlYW51cChzdHJ1Y3QgaXJjdGwgKmlyKQotewotCWRldl9kYmcoaXItPmQuZGV2LCBMT0dIRUFEICJjbGVhbmluZyB1cFxuIiwgaXItPmQubmFtZSwgaXItPmQubWlub3IpOwotCi0JZGV2aWNlX2Rlc3Ryb3kobGlyY19jbGFzcywgTUtERVYoTUFKT1IobGlyY19iYXNlX2RldiksIGlyLT5kLm1pbm9yKSk7Ci0KLQlpZiAoaXItPmJ1ZiAhPSBpci0+ZC5yYnVmKSB7Ci0JCWxpcmNfYnVmZmVyX2ZyZWUoaXItPmJ1Zik7Ci0JCWtmcmVlKGlyLT5idWYpOwotCX0KLQlpci0+YnVmID0gTlVMTDsKLX0KLQotLyogIGhlbHBlciBmdW5jdGlvbgotICogIHJlYWRzIGtleSBjb2RlcyBmcm9tIGRyaXZlciBhbmQgcHV0cyB0aGVtIGludG8gYnVmZmVyCi0gKiAgcmV0dXJucyAwIG9uIHN1Y2Nlc3MKLSAqLwotc3RhdGljIGludCBsaXJjX2FkZF90b19idWYoc3RydWN0IGlyY3RsICppcikKLXsKLQlpZiAoaXItPmQuYWRkX3RvX2J1ZikgewotCQlpbnQgcmVzID0gLUVOT0RBVEE7Ci0JCWludCBnb3RfZGF0YSA9IDA7Ci0KLQkJLyoKLQkJICogc2VydmljZSB0aGUgZGV2aWNlIGFzIGxvbmcgYXMgaXQgaXMgcmV0dXJuaW5nCi0JCSAqIGRhdGEgYW5kIHdlIGhhdmUgc3BhY2UKLQkJICovCi1nZXRfZGF0YToKLQkJcmVzID0gaXItPmQuYWRkX3RvX2J1Zihpci0+ZC5kYXRhLCBpci0+YnVmKTsKLQkJaWYgKHJlcyA9PSAwKSB7Ci0JCQlnb3RfZGF0YSsrOwotCQkJZ290byBnZXRfZGF0YTsKLQkJfQotCi0JCWlmIChyZXMgPT0gLUVOT0RFVikKLQkJCWt0aHJlYWRfc3RvcChpci0+dGFzayk7Ci0KLQkJcmV0dXJuIGdvdF9kYXRhID8gMCA6IHJlczsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogbWFpbiBmdW5jdGlvbiBvZiB0aGUgcG9sbGluZyB0aHJlYWQKLSAqLwotc3RhdGljIGludCBsaXJjX3RocmVhZCh2b2lkICppcmN0bCkKLXsKLQlzdHJ1Y3QgaXJjdGwgKmlyID0gaXJjdGw7Ci0KLQlkZXZfZGJnKGlyLT5kLmRldiwgTE9HSEVBRCAicG9sbCB0aHJlYWQgc3RhcnRlZFxuIiwKLQkJaXItPmQubmFtZSwgaXItPmQubWlub3IpOwotCi0JZG8gewotCQlpZiAoaXItPm9wZW4pIHsKLQkJCWlmIChpci0+amlmZmllc190b193YWl0KSB7Ci0JCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQkJCQlzY2hlZHVsZV90aW1lb3V0KGlyLT5qaWZmaWVzX3RvX3dhaXQpOwotCQkJfQotCQkJaWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkKLQkJCQlicmVhazsKLQkJCWlmICghbGlyY19hZGRfdG9fYnVmKGlyKSkKLQkJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmlyLT5idWYtPndhaXRfcG9sbCk7Ci0JCX0gZWxzZSB7Ci0JCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotCQkJc2NoZWR1bGUoKTsKLQkJfQotCX0gd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpOwotCi0JZGV2X2RiZyhpci0+ZC5kZXYsIExPR0hFQUQgInBvbGwgdGhyZWFkIGVuZGVkXG4iLAotCQlpci0+ZC5uYW1lLCBpci0+ZC5taW5vcik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBsaXJjX2Rldl9mb3BzID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkucmVhZAkJPSBsaXJjX2Rldl9mb3BfcmVhZCwKLQkud3JpdGUJCT0gbGlyY19kZXZfZm9wX3dyaXRlLAotCS5wb2xsCQk9IGxpcmNfZGV2X2ZvcF9wb2xsLAotCS51bmxvY2tlZF9pb2N0bAk9IGxpcmNfZGV2X2ZvcF9pb2N0bCwKLSNpZmRlZiBDT05GSUdfQ09NUEFUCi0JLmNvbXBhdF9pb2N0bAk9IGxpcmNfZGV2X2ZvcF9pb2N0bCwKLSNlbmRpZgotCS5vcGVuCQk9IGxpcmNfZGV2X2ZvcF9vcGVuLAotCS5yZWxlYXNlCT0gbGlyY19kZXZfZm9wX2Nsb3NlLAotCS5sbHNlZWsJCT0gbm9vcF9sbHNlZWssCi19OwotCi1zdGF0aWMgaW50IGxpcmNfY2Rldl9hZGQoc3RydWN0IGlyY3RsICppcikKLXsKLQlpbnQgcmV0dmFsOwotCXN0cnVjdCBsaXJjX2RyaXZlciAqZCA9ICZpci0+ZDsKLQlzdHJ1Y3QgY2RldiAqY2RldiA9ICZjZGV2c1tkLT5taW5vcl07Ci0KLQlpZiAoZC0+Zm9wcykgewotCQljZGV2X2luaXQoY2RldiwgZC0+Zm9wcyk7Ci0JCWNkZXYtPm93bmVyID0gZC0+b3duZXI7Ci0JfSBlbHNlIHsKLQkJY2Rldl9pbml0KGNkZXYsICZsaXJjX2Rldl9mb3BzKTsKLQkJY2Rldi0+b3duZXIgPSBUSElTX01PRFVMRTsKLQl9Ci0Ja29iamVjdF9zZXRfbmFtZSgmY2Rldi0+a29iaiwgImxpcmMlZCIsIGQtPm1pbm9yKTsKLQotCXJldHZhbCA9IGNkZXZfYWRkKGNkZXYsIE1LREVWKE1BSk9SKGxpcmNfYmFzZV9kZXYpLCBkLT5taW5vciksIDEpOwotCWlmIChyZXR2YWwpCi0JCWtvYmplY3RfcHV0KCZjZGV2LT5rb2JqKTsKLQotCXJldHVybiByZXR2YWw7Ci19Ci0KLWludCBsaXJjX3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgbGlyY19kcml2ZXIgKmQpCi17Ci0Jc3RydWN0IGlyY3RsICppcjsKLQlpbnQgbWlub3I7Ci0JaW50IGJ5dGVzX2luX2tleTsKLQl1bnNpZ25lZCBpbnQgY2h1bmtfc2l6ZTsKLQl1bnNpZ25lZCBpbnQgYnVmZmVyX3NpemU7Ci0JaW50IGVycjsKLQotCWlmICghZCkgewotCQlwcmludGsoS0VSTl9FUlIgImxpcmNfZGV2OiBsaXJjX3JlZ2lzdGVyX2RyaXZlcjogIgotCQkgICAgICAgImRyaXZlciBwb2ludGVyIG11c3QgYmUgbm90IE5VTEwhXG4iKTsKLQkJZXJyID0gLUVCQURSUUM7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmICghZC0+ZGV2KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGRldiBwb2ludGVyIG5vdCBmaWxsZWQgaW4hXG4iLCBfX2Z1bmNfXyk7Ci0JCWVyciA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmIChNQVhfSVJDVExfREVWSUNFUyA8PSBkLT5taW5vcikgewotCQlkZXZfZXJyKGQtPmRldiwgImxpcmNfZGV2OiBsaXJjX3JlZ2lzdGVyX2RyaXZlcjogIgotCQkJIlwibWlub3JcIiBtdXN0IGJlIGJldHdlZW4gMCBhbmQgJWQgKCVkKSFcbiIsCi0JCQlNQVhfSVJDVExfREVWSUNFUy0xLCBkLT5taW5vcik7Ci0JCWVyciA9IC1FQkFEUlFDOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAoMSA+IGQtPmNvZGVfbGVuZ3RoIHx8IChCVUZMRU4gKiA4KSA8IGQtPmNvZGVfbGVuZ3RoKSB7Ci0JCWRldl9lcnIoZC0+ZGV2LCAibGlyY19kZXY6IGxpcmNfcmVnaXN0ZXJfZHJpdmVyOiAiCi0JCQkiY29kZSBsZW5ndGggaW4gYml0cyBmb3IgbWlub3IgKCVkKSAiCi0JCQkibXVzdCBiZSBsZXNzIHRoYW4gJWQhXG4iLAotCQkJZC0+bWlub3IsIEJVRkxFTiAqIDgpOwotCQllcnIgPSAtRUJBRFJRQzsKLQkJZ290byBvdXQ7Ci0JfQotCi0JZGV2X2RiZyhkLT5kZXYsICJsaXJjX2RldjogbGlyY19yZWdpc3Rlcl9kcml2ZXI6IHNhbXBsZV9yYXRlOiAlZFxuIiwKLQkJZC0+c2FtcGxlX3JhdGUpOwotCWlmIChkLT5zYW1wbGVfcmF0ZSkgewotCQlpZiAoMiA+IGQtPnNhbXBsZV9yYXRlIHx8IEhaIDwgZC0+c2FtcGxlX3JhdGUpIHsKLQkJCWRldl9lcnIoZC0+ZGV2LCAibGlyY19kZXY6IGxpcmNfcmVnaXN0ZXJfZHJpdmVyOiAiCi0JCQkJInNhbXBsZV9yYXRlIG11c3QgYmUgYmV0d2VlbiAyIGFuZCAlZCFcbiIsIEhaKTsKLQkJCWVyciA9IC1FQkFEUlFDOwotCQkJZ290byBvdXQ7Ci0JCX0KLQkJaWYgKCFkLT5hZGRfdG9fYnVmKSB7Ci0JCQlkZXZfZXJyKGQtPmRldiwgImxpcmNfZGV2OiBsaXJjX3JlZ2lzdGVyX2RyaXZlcjogIgotCQkJCSJhZGRfdG9fYnVmIGNhbm5vdCBiZSBOVUxMIHdoZW4gIgotCQkJCSJzYW1wbGVfcmF0ZSBpcyBzZXRcbiIpOwotCQkJZXJyID0gLUVCQURSUUM7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0gZWxzZSBpZiAoIShkLT5mb3BzICYmIGQtPmZvcHMtPnJlYWQpICYmICFkLT5yYnVmKSB7Ci0JCWRldl9lcnIoZC0+ZGV2LCAibGlyY19kZXY6IGxpcmNfcmVnaXN0ZXJfZHJpdmVyOiAiCi0JCQkiZm9wcy0+cmVhZCBhbmQgcmJ1ZiBjYW5ub3QgYWxsIGJlIE5VTEwhXG4iKTsKLQkJZXJyID0gLUVCQURSUUM7Ci0JCWdvdG8gb3V0OwotCX0gZWxzZSBpZiAoIWQtPnJidWYpIHsKLQkJaWYgKCEoZC0+Zm9wcyAmJiBkLT5mb3BzLT5yZWFkICYmIGQtPmZvcHMtPnBvbGwgJiYKLQkJICAgICAgZC0+Zm9wcy0+dW5sb2NrZWRfaW9jdGwpKSB7Ci0JCQlkZXZfZXJyKGQtPmRldiwgImxpcmNfZGV2OiBsaXJjX3JlZ2lzdGVyX2RyaXZlcjogIgotCQkJCSJuZWl0aGVyIHJlYWQsIHBvbGwgbm9yIHVubG9ja2VkX2lvY3RsIGNhbiBiZSBOVUxMIVxuIik7Ci0JCQllcnIgPSAtRUJBRFJRQzsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JfQotCi0JbXV0ZXhfbG9jaygmbGlyY19kZXZfbG9jayk7Ci0KLQltaW5vciA9IGQtPm1pbm9yOwotCi0JaWYgKG1pbm9yIDwgMCkgewotCQkvKiBmaW5kIGZpcnN0IGZyZWUgc2xvdCBmb3IgZHJpdmVyICovCi0JCWZvciAobWlub3IgPSAwOyBtaW5vciA8IE1BWF9JUkNUTF9ERVZJQ0VTOyBtaW5vcisrKQotCQkJaWYgKCFpcmN0bHNbbWlub3JdKQotCQkJCWJyZWFrOwotCQlpZiAoTUFYX0lSQ1RMX0RFVklDRVMgPT0gbWlub3IpIHsKLQkJCWRldl9lcnIoZC0+ZGV2LCAibGlyY19kZXY6IGxpcmNfcmVnaXN0ZXJfZHJpdmVyOiAiCi0JCQkJIm5vIGZyZWUgc2xvdHMgZm9yIGRyaXZlcnMhXG4iKTsKLQkJCWVyciA9IC1FTk9NRU07Ci0JCQlnb3RvIG91dF9sb2NrOwotCQl9Ci0JfSBlbHNlIGlmIChpcmN0bHNbbWlub3JdKSB7Ci0JCWRldl9lcnIoZC0+ZGV2LCAibGlyY19kZXY6IGxpcmNfcmVnaXN0ZXJfZHJpdmVyOiAiCi0JCQkibWlub3IgKCVkKSBqdXN0IHJlZ2lzdGVyZWQhXG4iLCBtaW5vcik7Ci0JCWVyciA9IC1FQlVTWTsKLQkJZ290byBvdXRfbG9jazsKLQl9Ci0KLQlpciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpcmN0bCksIEdGUF9LRVJORUwpOwotCWlmICghaXIpIHsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBvdXRfbG9jazsKLQl9Ci0JbGlyY19pcmN0bF9pbml0KGlyKTsKLQlpcmN0bHNbbWlub3JdID0gaXI7Ci0JZC0+bWlub3IgPSBtaW5vcjsKLQotCWlmIChkLT5zYW1wbGVfcmF0ZSkgewotCQlpci0+amlmZmllc190b193YWl0ID0gSFogLyBkLT5zYW1wbGVfcmF0ZTsKLQl9IGVsc2UgewotCQkvKiBpdCBtZWFucyAtIHdhaXQgZm9yIGV4dGVybmFsIGV2ZW50IGluIHRhc2sgcXVldWUgKi8KLQkJaXItPmppZmZpZXNfdG9fd2FpdCA9IDA7Ci0JfQotCi0JLyogc29tZSBzYWZldHkgY2hlY2sgOC0pICovCi0JZC0+bmFtZVtzaXplb2YoZC0+bmFtZSktMV0gPSAnXDAnOwotCi0JYnl0ZXNfaW5fa2V5ID0gQklUU19UT19MT05HUyhkLT5jb2RlX2xlbmd0aCkgKwotCQkJKGQtPmNvZGVfbGVuZ3RoICUgOCA/IDEgOiAwKTsKLQlidWZmZXJfc2l6ZSA9IGQtPmJ1ZmZlcl9zaXplID8gZC0+YnVmZmVyX3NpemUgOiBCVUZMRU4gLyBieXRlc19pbl9rZXk7Ci0JY2h1bmtfc2l6ZSAgPSBkLT5jaHVua19zaXplICA/IGQtPmNodW5rX3NpemUgIDogYnl0ZXNfaW5fa2V5OwotCi0JaWYgKGQtPnJidWYpIHsKLQkJaXItPmJ1ZiA9IGQtPnJidWY7Ci0JfSBlbHNlIHsKLQkJaXItPmJ1ZiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBsaXJjX2J1ZmZlciksIEdGUF9LRVJORUwpOwotCQlpZiAoIWlyLT5idWYpIHsKLQkJCWVyciA9IC1FTk9NRU07Ci0JCQlnb3RvIG91dF9sb2NrOwotCQl9Ci0JCWVyciA9IGxpcmNfYnVmZmVyX2luaXQoaXItPmJ1ZiwgY2h1bmtfc2l6ZSwgYnVmZmVyX3NpemUpOwotCQlpZiAoZXJyKSB7Ci0JCQlrZnJlZShpci0+YnVmKTsKLQkJCWdvdG8gb3V0X2xvY2s7Ci0JCX0KLQl9Ci0JaXItPmNodW5rX3NpemUgPSBpci0+YnVmLT5jaHVua19zaXplOwotCi0JaWYgKGQtPmZlYXR1cmVzID09IDApCi0JCWQtPmZlYXR1cmVzID0gTElSQ19DQU5fUkVDX0xJUkNDT0RFOwotCi0JaXItPmQgPSAqZDsKLQotCWRldmljZV9jcmVhdGUobGlyY19jbGFzcywgaXItPmQuZGV2LAotCQkgICAgICBNS0RFVihNQUpPUihsaXJjX2Jhc2VfZGV2KSwgaXItPmQubWlub3IpLCBOVUxMLAotCQkgICAgICAibGlyYyV1IiwgaXItPmQubWlub3IpOwotCi0JaWYgKGQtPnNhbXBsZV9yYXRlKSB7Ci0JCS8qIHRyeSB0byBmaXJlIHVwIHBvbGxpbmcgdGhyZWFkICovCi0JCWlyLT50YXNrID0ga3RocmVhZF9ydW4obGlyY190aHJlYWQsICh2b2lkICopaXIsICJsaXJjX2RldiIpOwotCQlpZiAoSVNfRVJSKGlyLT50YXNrKSkgewotCQkJZGV2X2VycihkLT5kZXYsICJsaXJjX2RldjogbGlyY19yZWdpc3Rlcl9kcml2ZXI6ICIKLQkJCQkiY2Fubm90IHJ1biBwb2xsIHRocmVhZCBmb3IgbWlub3IgPSAlZFxuIiwKLQkJCQlkLT5taW5vcik7Ci0JCQllcnIgPSAtRUNISUxEOwotCQkJZ290byBvdXRfc3lzZnM7Ci0JCX0KLQl9Ci0KLQllcnIgPSBsaXJjX2NkZXZfYWRkKGlyKTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dF9zeXNmczsKLQotCWlyLT5hdHRhY2hlZCA9IDE7Ci0JbXV0ZXhfdW5sb2NrKCZsaXJjX2Rldl9sb2NrKTsKLQotCWRldl9pbmZvKGlyLT5kLmRldiwgImxpcmNfZGV2OiBkcml2ZXIgJXMgcmVnaXN0ZXJlZCBhdCBtaW5vciA9ICVkXG4iLAotCQkgaXItPmQubmFtZSwgaXItPmQubWlub3IpOwotCXJldHVybiBtaW5vcjsKLQotb3V0X3N5c2ZzOgotCWRldmljZV9kZXN0cm95KGxpcmNfY2xhc3MsIE1LREVWKE1BSk9SKGxpcmNfYmFzZV9kZXYpLCBpci0+ZC5taW5vcikpOwotb3V0X2xvY2s6Ci0JbXV0ZXhfdW5sb2NrKCZsaXJjX2Rldl9sb2NrKTsKLW91dDoKLQlyZXR1cm4gZXJyOwotfQotRVhQT1JUX1NZTUJPTChsaXJjX3JlZ2lzdGVyX2RyaXZlcik7Ci0KLWludCBsaXJjX3VucmVnaXN0ZXJfZHJpdmVyKGludCBtaW5vcikKLXsKLQlzdHJ1Y3QgaXJjdGwgKmlyOwotCXN0cnVjdCBjZGV2ICpjZGV2OwotCi0JaWYgKG1pbm9yIDwgMCB8fCBtaW5vciA+PSBNQVhfSVJDVExfREVWSUNFUykgewotCQlwcmludGsoS0VSTl9FUlIgImxpcmNfZGV2OiAlczogbWlub3IgKCVkKSBtdXN0IGJlIGJldHdlZW4gIgotCQkgICAgICAgIjAgYW5kICVkIVxuIiwgX19mdW5jX18sIG1pbm9yLCBNQVhfSVJDVExfREVWSUNFUy0xKTsKLQkJcmV0dXJuIC1FQkFEUlFDOwotCX0KLQotCWlyID0gaXJjdGxzW21pbm9yXTsKLQlpZiAoIWlyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAibGlyY19kZXY6ICVzOiBmYWlsZWQgdG8gZ2V0IGlyY3RsIHN0cnVjdCAiCi0JCSAgICAgICAiZm9yIG1pbm9yICVkIVxuIiwgX19mdW5jX18sIG1pbm9yKTsKLQkJcmV0dXJuIC1FTk9FTlQ7Ci0JfQotCi0JY2RldiA9ICZjZGV2c1ttaW5vcl07Ci0KLQltdXRleF9sb2NrKCZsaXJjX2Rldl9sb2NrKTsKLQotCWlmIChpci0+ZC5taW5vciAhPSBtaW5vcikgewotCQlwcmludGsoS0VSTl9FUlIgImxpcmNfZGV2OiAlczogbWlub3IgKCVkKSBkZXZpY2Ugbm90ICIKLQkJICAgICAgICJyZWdpc3RlcmVkIVxuIiwgX19mdW5jX18sIG1pbm9yKTsKLQkJbXV0ZXhfdW5sb2NrKCZsaXJjX2Rldl9sb2NrKTsKLQkJcmV0dXJuIC1FTk9FTlQ7Ci0JfQotCi0JLyogZW5kIHVwIHBvbGxpbmcgdGhyZWFkICovCi0JaWYgKGlyLT50YXNrKQotCQlrdGhyZWFkX3N0b3AoaXItPnRhc2spOwotCi0JZGV2X2RiZyhpci0+ZC5kZXYsICJsaXJjX2RldjogZHJpdmVyICVzIHVucmVnaXN0ZXJlZCBmcm9tIG1pbm9yID0gJWRcbiIsCi0JCWlyLT5kLm5hbWUsIGlyLT5kLm1pbm9yKTsKLQotCWlyLT5hdHRhY2hlZCA9IDA7Ci0JaWYgKGlyLT5vcGVuKSB7Ci0JCWRldl9kYmcoaXItPmQuZGV2LCBMT0dIRUFEICJyZWxlYXNpbmcgb3BlbmVkIGRyaXZlclxuIiwKLQkJCWlyLT5kLm5hbWUsIGlyLT5kLm1pbm9yKTsKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpci0+YnVmLT53YWl0X3BvbGwpOwotCQltdXRleF9sb2NrKCZpci0+aXJjdGxfbG9jayk7Ci0JCWlyLT5kLnNldF91c2VfZGVjKGlyLT5kLmRhdGEpOwotCQltb2R1bGVfcHV0KGNkZXYtPm93bmVyKTsKLQkJbXV0ZXhfdW5sb2NrKCZpci0+aXJjdGxfbG9jayk7Ci0JfSBlbHNlIHsKLQkJbGlyY19pcmN0bF9jbGVhbnVwKGlyKTsKLQkJY2Rldl9kZWwoY2Rldik7Ci0JCWtmcmVlKGlyKTsKLQkJaXJjdGxzW21pbm9yXSA9IE5VTEw7Ci0JfQotCi0JbXV0ZXhfdW5sb2NrKCZsaXJjX2Rldl9sb2NrKTsKLQotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTChsaXJjX3VucmVnaXN0ZXJfZHJpdmVyKTsKLQotaW50IGxpcmNfZGV2X2ZvcF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXN0cnVjdCBpcmN0bCAqaXI7Ci0Jc3RydWN0IGNkZXYgKmNkZXY7Ci0JaW50IHJldHZhbCA9IDA7Ci0KLQlpZiAoaW1pbm9yKGlub2RlKSA+PSBNQVhfSVJDVExfREVWSUNFUykgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJsaXJjX2RldiBbJWRdOiBvcGVuIHJlc3VsdCA9IC1FTk9ERVZcbiIsCi0JCSAgICAgICBpbWlub3IoaW5vZGUpKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmbGlyY19kZXZfbG9jaykpCi0JCXJldHVybiAtRVJFU1RBUlRTWVM7Ci0KLQlpciA9IGlyY3Rsc1tpbWlub3IoaW5vZGUpXTsKLQlpZiAoIWlyKSB7Ci0JCXJldHZhbCA9IC1FTk9ERVY7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JZGV2X2RiZyhpci0+ZC5kZXYsIExPR0hFQUQgIm9wZW4gY2FsbGVkXG4iLCBpci0+ZC5uYW1lLCBpci0+ZC5taW5vcik7Ci0KLQlpZiAoaXItPmQubWlub3IgPT0gTk9QTFVHKSB7Ci0JCXJldHZhbCA9IC1FTk9ERVY7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JaWYgKGlyLT5vcGVuKSB7Ci0JCXJldHZhbCA9IC1FQlVTWTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQljZGV2ID0gJmNkZXZzW2ltaW5vcihpbm9kZSldOwotCWlmICh0cnlfbW9kdWxlX2dldChjZGV2LT5vd25lcikpIHsKLQkJaXItPm9wZW4rKzsKLQkJcmV0dmFsID0gaXItPmQuc2V0X3VzZV9pbmMoaXItPmQuZGF0YSk7Ci0KLQkJaWYgKHJldHZhbCkgewotCQkJbW9kdWxlX3B1dChjZGV2LT5vd25lcik7Ci0JCQlpci0+b3Blbi0tOwotCQl9IGVsc2UgewotCQkJbGlyY19idWZmZXJfY2xlYXIoaXItPmJ1Zik7Ci0JCX0KLQkJaWYgKGlyLT50YXNrKQotCQkJd2FrZV91cF9wcm9jZXNzKGlyLT50YXNrKTsKLQl9Ci0KLWVycm9yOgotCWlmIChpcikKLQkJZGV2X2RiZyhpci0+ZC5kZXYsIExPR0hFQUQgIm9wZW4gcmVzdWx0ID0gJWRcbiIsCi0JCQlpci0+ZC5uYW1lLCBpci0+ZC5taW5vciwgcmV0dmFsKTsKLQotCW11dGV4X3VubG9jaygmbGlyY19kZXZfbG9jayk7Ci0KLQlub25zZWVrYWJsZV9vcGVuKGlub2RlLCBmaWxlKTsKLQotCXJldHVybiByZXR2YWw7Ci19Ci1FWFBPUlRfU1lNQk9MKGxpcmNfZGV2X2ZvcF9vcGVuKTsKLQotaW50IGxpcmNfZGV2X2ZvcF9jbG9zZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlzdHJ1Y3QgaXJjdGwgKmlyID0gaXJjdGxzW2ltaW5vcihpbm9kZSldOwotCXN0cnVjdCBjZGV2ICpjZGV2ID0gJmNkZXZzW2ltaW5vcihpbm9kZSldOwotCi0JaWYgKCFpcikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYWxsZWQgd2l0aCBpbnZhbGlkIGlyY3RsXG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWRldl9kYmcoaXItPmQuZGV2LCBMT0dIRUFEICJjbG9zZSBjYWxsZWRcbiIsIGlyLT5kLm5hbWUsIGlyLT5kLm1pbm9yKTsKLQotCVdBUk5fT04obXV0ZXhfbG9ja19raWxsYWJsZSgmbGlyY19kZXZfbG9jaykpOwotCi0JaXItPm9wZW4tLTsKLQlpZiAoaXItPmF0dGFjaGVkKSB7Ci0JCWlyLT5kLnNldF91c2VfZGVjKGlyLT5kLmRhdGEpOwotCQltb2R1bGVfcHV0KGNkZXYtPm93bmVyKTsKLQl9IGVsc2UgewotCQlsaXJjX2lyY3RsX2NsZWFudXAoaXIpOwotCQljZGV2X2RlbChjZGV2KTsKLQkJaXJjdGxzW2lyLT5kLm1pbm9yXSA9IE5VTEw7Ci0JCWtmcmVlKGlyKTsKLQl9Ci0KLQltdXRleF91bmxvY2soJmxpcmNfZGV2X2xvY2spOwotCi0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MKGxpcmNfZGV2X2ZvcF9jbG9zZSk7Ci0KLXVuc2lnbmVkIGludCBsaXJjX2Rldl9mb3BfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCkKLXsKLQlzdHJ1Y3QgaXJjdGwgKmlyID0gaXJjdGxzW2ltaW5vcihmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSldOwotCXVuc2lnbmVkIGludCByZXQ7Ci0KLQlpZiAoIWlyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbGxlZCB3aXRoIGludmFsaWQgaXJjdGxcbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuIFBPTExFUlI7Ci0JfQotCi0JZGV2X2RiZyhpci0+ZC5kZXYsIExPR0hFQUQgInBvbGwgY2FsbGVkXG4iLCBpci0+ZC5uYW1lLCBpci0+ZC5taW5vcik7Ci0KLQlpZiAoIWlyLT5hdHRhY2hlZCkKLQkJcmV0dXJuIFBPTExFUlI7Ci0KLQlwb2xsX3dhaXQoZmlsZSwgJmlyLT5idWYtPndhaXRfcG9sbCwgd2FpdCk7Ci0KLQlpZiAoaXItPmJ1ZikKLQkJaWYgKGxpcmNfYnVmZmVyX2VtcHR5KGlyLT5idWYpKQotCQkJcmV0ID0gMDsKLQkJZWxzZQotCQkJcmV0ID0gUE9MTElOIHwgUE9MTFJETk9STTsKLQllbHNlCi0JCXJldCA9IFBPTExFUlI7Ci0KLQlkZXZfZGJnKGlyLT5kLmRldiwgTE9HSEVBRCAicG9sbCByZXN1bHQgPSAlZFxuIiwKLQkJaXItPmQubmFtZSwgaXItPmQubWlub3IsIHJldCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTChsaXJjX2Rldl9mb3BfcG9sbCk7Ci0KLWxvbmcgbGlyY19kZXZfZm9wX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKLXsKLQlfX3UzMiBtb2RlOwotCWludCByZXN1bHQgPSAwOwotCXN0cnVjdCBpcmN0bCAqaXIgPSBpcmN0bHNbaW1pbm9yKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKV07Ci0KLQlpZiAoIWlyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAibGlyY19kZXY6ICVzOiBubyBpcmN0bCBmb3VuZCFcbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JZGV2X2RiZyhpci0+ZC5kZXYsIExPR0hFQUQgImlvY3RsIGNhbGxlZCAoMHgleClcbiIsCi0JCWlyLT5kLm5hbWUsIGlyLT5kLm1pbm9yLCBjbWQpOwotCi0JaWYgKGlyLT5kLm1pbm9yID09IE5PUExVRyB8fCAhaXItPmF0dGFjaGVkKSB7Ci0JCWRldl9kYmcoaXItPmQuZGV2LCBMT0dIRUFEICJpb2N0bCByZXN1bHQgPSAtRU5PREVWXG4iLAotCQkJaXItPmQubmFtZSwgaXItPmQubWlub3IpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQltdXRleF9sb2NrKCZpci0+aXJjdGxfbG9jayk7Ci0KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgTElSQ19HRVRfRkVBVFVSRVM6Ci0JCXJlc3VsdCA9IHB1dF91c2VyKGlyLT5kLmZlYXR1cmVzLCAoX191MzIgKilhcmcpOwotCQlicmVhazsKLQljYXNlIExJUkNfR0VUX1JFQ19NT0RFOgotCQlpZiAoIShpci0+ZC5mZWF0dXJlcyAmIExJUkNfQ0FOX1JFQ19NQVNLKSkgewotCQkJcmVzdWx0ID0gLUVOT1NZUzsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJcmVzdWx0ID0gcHV0X3VzZXIoTElSQ19SRUMyTU9ERQotCQkJCSAgKGlyLT5kLmZlYXR1cmVzICYgTElSQ19DQU5fUkVDX01BU0spLAotCQkJCSAgKF9fdTMyICopYXJnKTsKLQkJYnJlYWs7Ci0JY2FzZSBMSVJDX1NFVF9SRUNfTU9ERToKLQkJaWYgKCEoaXItPmQuZmVhdHVyZXMgJiBMSVJDX0NBTl9SRUNfTUFTSykpIHsKLQkJCXJlc3VsdCA9IC1FTk9TWVM7Ci0JCQlicmVhazsKLQkJfQotCi0JCXJlc3VsdCA9IGdldF91c2VyKG1vZGUsIChfX3UzMiAqKWFyZyk7Ci0JCWlmICghcmVzdWx0ICYmICEoTElSQ19NT0RFMlJFQyhtb2RlKSAmIGlyLT5kLmZlYXR1cmVzKSkKLQkJCXJlc3VsdCA9IC1FSU5WQUw7Ci0JCS8qCi0JCSAqIEZJWE1FOiBXZSBzaG91bGQgYWN0dWFsbHkgc2V0IHRoZSBtb2RlIHNvbWVob3cgYnV0Ci0JCSAqIGZvciBub3csIGxpcmNfc2VyaWFsIGRvZXNuJ3Qgc3VwcG9ydCBtb2RlIGNoYW5naW5nIGVpdGhlcgotCQkgKi8KLQkJYnJlYWs7Ci0JY2FzZSBMSVJDX0dFVF9MRU5HVEg6Ci0JCXJlc3VsdCA9IHB1dF91c2VyKGlyLT5kLmNvZGVfbGVuZ3RoLCAoX191MzIgKilhcmcpOwotCQlicmVhazsKLQljYXNlIExJUkNfR0VUX01JTl9USU1FT1VUOgotCQlpZiAoIShpci0+ZC5mZWF0dXJlcyAmIExJUkNfQ0FOX1NFVF9SRUNfVElNRU9VVCkgfHwKLQkJICAgIGlyLT5kLm1pbl90aW1lb3V0ID09IDApIHsKLQkJCXJlc3VsdCA9IC1FTk9TWVM7Ci0JCQlicmVhazsKLQkJfQotCi0JCXJlc3VsdCA9IHB1dF91c2VyKGlyLT5kLm1pbl90aW1lb3V0LCAoX191MzIgKilhcmcpOwotCQlicmVhazsKLQljYXNlIExJUkNfR0VUX01BWF9USU1FT1VUOgotCQlpZiAoIShpci0+ZC5mZWF0dXJlcyAmIExJUkNfQ0FOX1NFVF9SRUNfVElNRU9VVCkgfHwKLQkJICAgIGlyLT5kLm1heF90aW1lb3V0ID09IDApIHsKLQkJCXJlc3VsdCA9IC1FTk9TWVM7Ci0JCQlicmVhazsKLQkJfQotCi0JCXJlc3VsdCA9IHB1dF91c2VyKGlyLT5kLm1heF90aW1lb3V0LCAoX191MzIgKilhcmcpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXN1bHQgPSAtRUlOVkFMOwotCX0KLQotCWRldl9kYmcoaXItPmQuZGV2LCBMT0dIRUFEICJpb2N0bCByZXN1bHQgPSAlZFxuIiwKLQkJaXItPmQubmFtZSwgaXItPmQubWlub3IsIHJlc3VsdCk7Ci0KLQltdXRleF91bmxvY2soJmlyLT5pcmN0bF9sb2NrKTsKLQotCXJldHVybiByZXN1bHQ7Ci19Ci1FWFBPUlRfU1lNQk9MKGxpcmNfZGV2X2ZvcF9pb2N0bCk7Ci0KLXNzaXplX3QgbGlyY19kZXZfZm9wX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkgIGNoYXIgKmJ1ZmZlciwKLQkJCSAgc2l6ZV90IGxlbmd0aCwKLQkJCSAgbG9mZl90ICpwcG9zKQotewotCXN0cnVjdCBpcmN0bCAqaXIgPSBpcmN0bHNbaW1pbm9yKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKV07Ci0JdW5zaWduZWQgY2hhciAqYnVmOwotCWludCByZXQgPSAwLCB3cml0dGVuID0gMDsKLQlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKLQotCWlmICghaXIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogY2FsbGVkIHdpdGggaW52YWxpZCBpcmN0bFxuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQlkZXZfZGJnKGlyLT5kLmRldiwgTE9HSEVBRCAicmVhZCBjYWxsZWRcbiIsIGlyLT5kLm5hbWUsIGlyLT5kLm1pbm9yKTsKLQotCWJ1ZiA9IGt6YWxsb2MoaXItPmNodW5rX3NpemUsIEdGUF9LRVJORUwpOwotCWlmICghYnVmKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmlyLT5pcmN0bF9sb2NrKSkgewotCQlyZXQgPSAtRVJFU1RBUlRTWVM7Ci0JCWdvdG8gb3V0X3VubG9ja2VkOwotCX0KLQlpZiAoIWlyLT5hdHRhY2hlZCkgewotCQlyZXQgPSAtRU5PREVWOwotCQlnb3RvIG91dF9sb2NrZWQ7Ci0JfQotCi0JaWYgKGxlbmd0aCAlIGlyLT5jaHVua19zaXplKSB7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0X2xvY2tlZDsKLQl9Ci0KLQkvKgotCSAqIHdlIGFkZCBvdXJzZWx2ZXMgdG8gdGhlIHRhc2sgcXVldWUgYmVmb3JlIGJ1ZmZlciBjaGVjawotCSAqIHRvIGF2b2lkIGxvc2luZyBzY2FuIGNvZGUgKGluIGNhc2Ugd2hlbiBxdWV1ZSBpcyBhd2FrZW4gc29tZXdoZXJlCi0JICogYmV0d2VlbiB3aGlsZSBjb25kaXRpb24gY2hlY2tpbmcgYW5kIHNjaGVkdWxpbmcpCi0JICovCi0JYWRkX3dhaXRfcXVldWUoJmlyLT5idWYtPndhaXRfcG9sbCwgJndhaXQpOwotCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0KLQkvKgotCSAqIHdoaWxlIHdlIGRpZG4ndCBwcm92aWRlICdsZW5ndGgnIGJ5dGVzLCBkZXZpY2UgaXMgb3BlbmVkIGluIGJsb2NraW5nCi0JICogbW9kZSBhbmQgJ2NvcHlfdG9fdXNlcicgaXMgaGFwcHksIHdhaXQgZm9yIGRhdGEuCi0JICovCi0Jd2hpbGUgKHdyaXR0ZW4gPCBsZW5ndGggJiYgcmV0ID09IDApIHsKLQkJaWYgKGxpcmNfYnVmZmVyX2VtcHR5KGlyLT5idWYpKSB7Ci0JCQkvKiBBY2NvcmRpbmcgdG8gdGhlIHJlYWQoMikgbWFuIHBhZ2UsICd3cml0dGVuJyBjYW4gYmUKLQkJCSAqIHJldHVybmVkIGFzIGxlc3MgdGhhbiAnbGVuZ3RoJywgaW5zdGVhZCBvZiBibG9ja2luZwotCQkJICogYWdhaW4sIHJldHVybmluZyAtRVdPVUxEQkxPQ0ssIG9yIHJldHVybmluZwotCQkJICogLUVSRVNUQVJUU1lTICovCi0JCQlpZiAod3JpdHRlbikKLQkJCQlicmVhazsKLQkJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgewotCQkJCXJldCA9IC1FV09VTERCTE9DSzsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewotCQkJCXJldCA9IC1FUkVTVEFSVFNZUzsKLQkJCQlicmVhazsKLQkJCX0KLQotCQkJbXV0ZXhfdW5sb2NrKCZpci0+aXJjdGxfbG9jayk7Ci0JCQlzY2hlZHVsZSgpOwotCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQotCQkJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmaXItPmlyY3RsX2xvY2spKSB7Ci0JCQkJcmV0ID0gLUVSRVNUQVJUU1lTOwotCQkJCXJlbW92ZV93YWl0X3F1ZXVlKCZpci0+YnVmLT53YWl0X3BvbGwsICZ3YWl0KTsKLQkJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwotCQkJCWdvdG8gb3V0X3VubG9ja2VkOwotCQkJfQotCi0JCQlpZiAoIWlyLT5hdHRhY2hlZCkgewotCQkJCXJldCA9IC1FTk9ERVY7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlsaXJjX2J1ZmZlcl9yZWFkKGlyLT5idWYsIGJ1Zik7Ci0JCQlyZXQgPSBjb3B5X3RvX3VzZXIoKHZvaWQgKilidWZmZXIrd3JpdHRlbiwgYnVmLAotCQkJCQkgICBpci0+YnVmLT5jaHVua19zaXplKTsKLQkJCWlmICghcmV0KQotCQkJCXdyaXR0ZW4gKz0gaXItPmJ1Zi0+Y2h1bmtfc2l6ZTsKLQkJCWVsc2UKLQkJCQlyZXQgPSAtRUZBVUxUOwotCQl9Ci0JfQotCi0JcmVtb3ZlX3dhaXRfcXVldWUoJmlyLT5idWYtPndhaXRfcG9sbCwgJndhaXQpOwotCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7Ci0KLW91dF9sb2NrZWQ6Ci0JbXV0ZXhfdW5sb2NrKCZpci0+aXJjdGxfbG9jayk7Ci0KLW91dF91bmxvY2tlZDoKLQlrZnJlZShidWYpOwotCWRldl9kYmcoaXItPmQuZGV2LCBMT0dIRUFEICJyZWFkIHJlc3VsdCA9ICVzICglZClcbiIsCi0JCWlyLT5kLm5hbWUsIGlyLT5kLm1pbm9yLCByZXQgPyAiPGZhaWw+IiA6ICI8b2s+IiwgcmV0KTsKLQotCXJldHVybiByZXQgPyByZXQgOiB3cml0dGVuOwotfQotRVhQT1JUX1NZTUJPTChsaXJjX2Rldl9mb3BfcmVhZCk7Ci0KLXZvaWQgKmxpcmNfZ2V0X3BkYXRhKHN0cnVjdCBmaWxlICpmaWxlKQotewotCXZvaWQgKmRhdGEgPSBOVUxMOwotCi0JaWYgKGZpbGUgJiYgZmlsZS0+Zl9kZW50cnkgJiYgZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUgJiYKLQkgICAgZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfcmRldikgewotCQlzdHJ1Y3QgaXJjdGwgKmlyOwotCQlpciA9IGlyY3Rsc1tpbWlub3IoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpXTsKLQkJZGF0YSA9IGlyLT5kLmRhdGE7Ci0JfQotCi0JcmV0dXJuIGRhdGE7Ci19Ci1FWFBPUlRfU1lNQk9MKGxpcmNfZ2V0X3BkYXRhKTsKLQotCi1zc2l6ZV90IGxpcmNfZGV2X2ZvcF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciAqYnVmZmVyLAotCQkJICAgc2l6ZV90IGxlbmd0aCwgbG9mZl90ICpwcG9zKQotewotCXN0cnVjdCBpcmN0bCAqaXIgPSBpcmN0bHNbaW1pbm9yKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKV07Ci0KLQlpZiAoIWlyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbGxlZCB3aXRoIGludmFsaWQgaXJjdGxcbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JZGV2X2RiZyhpci0+ZC5kZXYsIExPR0hFQUQgIndyaXRlIGNhbGxlZFxuIiwgaXItPmQubmFtZSwgaXItPmQubWlub3IpOwotCi0JaWYgKCFpci0+YXR0YWNoZWQpCi0JCXJldHVybiAtRU5PREVWOwotCi0JcmV0dXJuIC1FSU5WQUw7Ci19Ci1FWFBPUlRfU1lNQk9MKGxpcmNfZGV2X2ZvcF93cml0ZSk7Ci0KLQotc3RhdGljIGludCBfX2luaXQgbGlyY19kZXZfaW5pdCh2b2lkKQotewotCWludCByZXR2YWw7Ci0KLQlsaXJjX2NsYXNzID0gY2xhc3NfY3JlYXRlKFRISVNfTU9EVUxFLCAibGlyYyIpOwotCWlmIChJU19FUlIobGlyY19jbGFzcykpIHsKLQkJcmV0dmFsID0gUFRSX0VSUihsaXJjX2NsYXNzKTsKLQkJcHJpbnRrKEtFUk5fRVJSICJsaXJjX2RldjogY2xhc3NfY3JlYXRlIGZhaWxlZFxuIik7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JcmV0dmFsID0gYWxsb2NfY2hyZGV2X3JlZ2lvbigmbGlyY19iYXNlX2RldiwgMCwgTUFYX0lSQ1RMX0RFVklDRVMsCi0JCQkJICAgICBJUkNUTF9ERVZfTkFNRSk7Ci0JaWYgKHJldHZhbCkgewotCQljbGFzc19kZXN0cm95KGxpcmNfY2xhc3MpOwotCQlwcmludGsoS0VSTl9FUlIgImxpcmNfZGV2OiBhbGxvY19jaHJkZXZfcmVnaW9uIGZhaWxlZFxuIik7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0KLQlwcmludGsoS0VSTl9JTkZPICJsaXJjX2RldjogSVIgUmVtb3RlIENvbnRyb2wgZHJpdmVyIHJlZ2lzdGVyZWQsICIKLQkgICAgICAgIm1ham9yICVkIFxuIiwgTUFKT1IobGlyY19iYXNlX2RldikpOwotCi1lcnJvcjoKLQlyZXR1cm4gcmV0dmFsOwotfQotCi0KLQotc3RhdGljIHZvaWQgX19leGl0IGxpcmNfZGV2X2V4aXQodm9pZCkKLXsKLQljbGFzc19kZXN0cm95KGxpcmNfY2xhc3MpOwotCXVucmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihsaXJjX2Jhc2VfZGV2LCBNQVhfSVJDVExfREVWSUNFUyk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAibGlyY19kZXY6IG1vZHVsZSB1bmxvYWRlZFxuIik7Ci19Ci0KLW1vZHVsZV9pbml0KGxpcmNfZGV2X2luaXQpOwotbW9kdWxlX2V4aXQobGlyY19kZXZfZXhpdCk7Ci0KLU1PRFVMRV9ERVNDUklQVElPTigiTElSQyBiYXNlIGRyaXZlciBtb2R1bGUiKTsKLU1PRFVMRV9BVVRIT1IoIkFydHVyIExpcG93c2tpIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLW1vZHVsZV9wYXJhbShkZWJ1ZywgYm9vbCwgU19JUlVHTyB8IFNfSVdVU1IpOwotTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkVuYWJsZSBkZWJ1Z2dpbmcgbWVzc2FnZXMiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvSVIvbWNldXNiLmMgYi9kcml2ZXJzL21lZGlhL0lSL21jZXVzYi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOTJjYTI0Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvSVIvbWNldXNiLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzMzICswLDAgQEAKLS8qCi0gKiBEcml2ZXIgZm9yIFVTQiBXaW5kb3dzIE1lZGlhIENlbnRlciBFZC4gZUhvbWUgSW5mcmFyZWQgVHJhbnNjZWl2ZXJzCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDEwIGJ5IEphcm9kIFdpbHNvbiA8amFyb2RAcmVkaGF0LmNvbT4KLSAqCi0gKiBCYXNlZCBvbiB0aGUgb3JpZ2luYWwgbGlyY19tY2V1c2IgYW5kIGxpcmNfbWNldXNiMiBkcml2ZXJzLCBieSBEYW4KLSAqIENvbnRpLCBNYXJ0aW4gQmxhdHRlciBhbmQgRGFuaWVsIE1lbGFuZGVyLCB0aGUgbGF0dGVyIG9mIHdoaWNoIHdhcwotICogaW4gdHVybiBhbHNvIGJhc2VkIG9uIHRoZSBsaXJjX2F0aXVzYiBkcml2ZXIgYnkgUGF1bCBNaWxsZXIuIFRoZQotICogdHdvIG1jZSBkcml2ZXJzIHdlcmUgbWVyZ2VkIGludG8gb25lIGJ5IEphcm9kIFdpbHNvbiwgd2l0aCB0cmFuc21pdAotICogc3VwcG9ydCBmb3IgdGhlIDFzdC1nZW4gZGV2aWNlIGFkZGVkIHByaW1hcmlseSBieSBQYXRyaWNrIENhbGhvdW4sCi0gKiB3aXRoIGEgYml0IG9mIHR3ZWFrcyBieSBKYXJvZC4gRGVidWdnaW5nIGltcHJvdmVtZW50cyBhbmQgcHJvcGVyCi0gKiBzdXBwb3J0IGZvciB3aGF0IGFwcGVhcnMgdG8gYmUgM3JkLWdlbiBoYXJkd2FyZSBhZGRlZCBieSBKYXJvZC4KLSAqIEluaXRpYWwgcG9ydCBmcm9tIGxpcmMgZHJpdmVyIHRvIGlyLWNvcmUgZHJpdmVyeSBieSBKYXJvZCwgYmFzZWQKLSAqIHBhcnRpYWxseSBvbiBhIHBvcnQgdG8gYW4gZWFybGllciBwcm9wb3NlZCBJUiBpbmZyYXN0cnVjdHVyZSBieQotICogSm9uIFNtaXJsLCB3aGljaCBpbmNsdWRlZCBlbmhhbmNlbWVudHMgYW5kIHNpbXBsaWZpY2F0aW9ucyB0byB0aGUKLSAqIGluY29taW5nIElSIGJ1ZmZlciBwYXJzaW5nIHJvdXRpbmVzLgotICoKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdXNiLmg+Ci0jaW5jbHVkZSA8bGludXgvdXNiL2lucHV0Lmg+Ci0jaW5jbHVkZSA8bWVkaWEvaXItY29yZS5oPgotCi0jZGVmaW5lIERSSVZFUl9WRVJTSU9OCSIxLjkxIgotI2RlZmluZSBEUklWRVJfQVVUSE9SCSJKYXJvZCBXaWxzb24gPGphcm9kQHdpbHNvbmV0LmNvbT4iCi0jZGVmaW5lIERSSVZFUl9ERVNDCSJXaW5kb3dzIE1lZGlhIENlbnRlciBFZC4gZUhvbWUgSW5mcmFyZWQgVHJhbnNjZWl2ZXIgIiBcCi0JCQkiZGV2aWNlIGRyaXZlciIKLSNkZWZpbmUgRFJJVkVSX05BTUUJIm1jZXVzYiIKLQotI2RlZmluZSBVU0JfQlVGTEVOCQkzMiAvKiBVU0IgcmVjZXB0aW9uIGJ1ZmZlciBsZW5ndGggKi8KLSNkZWZpbmUgVVNCX0NUUkxfTVNHX1NaCQkyICAvKiBTaXplIG9mIHVzYiBjdHJsIG1zZyBvbiBnZW4xIGh3ICovCi0jZGVmaW5lIE1DRV9HMV9JTklUX01TR1MJNDAgLyogSW5pdCBtZXNzYWdlcyBvbiBnZW4xIGh3IHRvIHRocm93IG91dCAqLwotI2RlZmluZSBNU19UT19OUyhtc2VjKQkJKChtc2VjKSAqIDEwMDApCi0KLS8qIE1DRSBjb25zdGFudHMgKi8KLSNkZWZpbmUgTUNFX0NNREJVRl9TSVpFCQkzODQgIC8qIE1DRSBDb21tYW5kIGJ1ZmZlciBsZW5ndGggKi8KLSNkZWZpbmUgTUNFX1RJTUVfVU5JVAkJNTAgICAvKiBBcHByb3ggNTB1cyByZXNvbHV0aW9uICovCi0jZGVmaW5lIE1DRV9DT0RFX0xFTkdUSAkJNSAgICAvKiBOb3JtYWwgbGVuZ3RoIG9mIHBhY2tldCAod2l0aCBoZWFkZXIpICovCi0jZGVmaW5lIE1DRV9QQUNLRVRfU0laRQkJNCAgICAvKiBOb3JtYWwgbGVuZ3RoIG9mIHBhY2tldCAod2l0aG91dCBoZWFkZXIpICovCi0jZGVmaW5lIE1DRV9JUkRBVEFfSEVBREVSCTB4ODQgLyogQWN0dWFsIGhlYWRlciBmb3JtYXQgaXMgMHg4MCArIG51bV9ieXRlcyAqLwotI2RlZmluZSBNQ0VfSVJEQVRBX1RSQUlMRVIJMHg4MCAvKiBFbmQgb2YgSVIgZGF0YSAqLwotI2RlZmluZSBNQ0VfVFhfSEVBREVSX0xFTkdUSAkzICAgIC8qICMgb2YgYnl0ZXMgaW4gdGhlIGluaXRpYWxpemluZyB0eCBoZWFkZXIgKi8KLSNkZWZpbmUgTUNFX01BWF9DSEFOTkVMUwkyICAgIC8qIFR3byB0cmFuc21pdHRlcnMsIGhhcmR3YXJlIGRlcGVuZGVudD8gKi8KLSNkZWZpbmUgTUNFX0RFRkFVTFRfVFhfTUFTSwkweDAzIC8qIFZhbHM6IFRYMT0weDAxLCBUWDI9MHgwMiwgQUxMPTB4MDMgKi8KLSNkZWZpbmUgTUNFX1BVTFNFX0JJVAkJMHg4MCAvKiBQdWxzZSBiaXQsIE1TQiBzZXQgPT0gUFVMU0UgZWxzZSBTUEFDRSAqLwotI2RlZmluZSBNQ0VfUFVMU0VfTUFTSwkJMHg3ZiAvKiBQdWxzZSBtYXNrICovCi0jZGVmaW5lIE1DRV9NQVhfUFVMU0VfTEVOR1RICTB4N2YgLyogTG9uZ2VzdCB0cmFuc21pdHRhYmxlIHB1bHNlIHN5bWJvbCAqLwotCi0jZGVmaW5lIE1DRV9IV19DTURfSEVBREVSCTB4ZmYJLyogTUNFIGhhcmR3YXJlIGNvbW1hbmQgaGVhZGVyICovCi0jZGVmaW5lIE1DRV9DT01NQU5EX0hFQURFUgkweDlmCS8qIE1DRSBjb21tYW5kIGhlYWRlciAqLwotI2RlZmluZSBNQ0VfQ09NTUFORF9NQVNLCTB4ZTAJLyogTWFzayBvdXQgY29tbWFuZCBiaXRzICovCi0jZGVmaW5lIE1DRV9DT01NQU5EX05VTEwJMHgwMAkvKiBUaGVzZSBzaG93IHVwIHZhcmlvdXMgcGxhY2VzLi4uICovCi0vKiBpZiBidWZbaV0gJiBNQ0VfQ09NTUFORF9NQVNLID09IDB4ODAgYW5kIGJ1ZltpXSAhPSBNQ0VfQ09NTUFORF9IRUFERVIsCi0gKiB0aGVuIHdlJ3JlIGxvb2tpbmcgYXQgYSByYXcgSVIgZGF0YSBzYW1wbGUgKi8KLSNkZWZpbmUgTUNFX0NPTU1BTkRfSVJEQVRBCTB4ODAKLSNkZWZpbmUgTUNFX1BBQ0tFVF9MRU5HVEhfTUFTSwkweDFmIC8qIFBhY2tldCBsZW5ndGggbWFzayAqLwotCi0vKiBTdWItY29tbWFuZHMsIHdoaWNoIGZvbGxvdyBNQ0VfQ09NTUFORF9IRUFERVIgb3IgTUNFX0hXX0NNRF9IRUFERVIgKi8KLSNkZWZpbmUgTUNFX0NNRF9TSUdfRU5ECQkweDAxCS8qIEVuZCBvZiBzaWduYWwgKi8KLSNkZWZpbmUgTUNFX0NNRF9QSU5HCQkweDAzCS8qIFBpbmcgZGV2aWNlICovCi0jZGVmaW5lIE1DRV9DTURfVU5LTk9XTgkJMHgwNAkvKiBVbmtub3duICovCi0jZGVmaW5lIE1DRV9DTURfVU5LTk9XTjIJMHgwNQkvKiBVbmtub3duICovCi0jZGVmaW5lIE1DRV9DTURfU19DQVJSSUVSCTB4MDYJLyogU2V0IFRYIGNhcnJpZXIgZnJlcXVlbmN5ICovCi0jZGVmaW5lIE1DRV9DTURfR19DQVJSSUVSCTB4MDcJLyogR2V0IFRYIGNhcnJpZXIgZnJlcXVlbmN5ICovCi0jZGVmaW5lIE1DRV9DTURfU19UWE1BU0sJMHgwOAkvKiBTZXQgVFggcG9ydCBiaXRtYXNrICovCi0jZGVmaW5lIE1DRV9DTURfVU5LTk9XTjMJMHgwOQkvKiBVbmtub3duICovCi0jZGVmaW5lIE1DRV9DTURfVU5LTk9XTjQJMHgwYQkvKiBVbmtub3duICovCi0jZGVmaW5lIE1DRV9DTURfR19SRVZJU0lPTgkweDBiCS8qIEdldCBody9zdyByZXZpc2lvbiAqLwotI2RlZmluZSBNQ0VfQ01EX1NfVElNRU9VVAkweDBjCS8qIFNldCBSWCB0aW1lb3V0IHZhbHVlICovCi0jZGVmaW5lIE1DRV9DTURfR19USU1FT1VUCTB4MGQJLyogR2V0IFJYIHRpbWVvdXQgdmFsdWUgKi8KLSNkZWZpbmUgTUNFX0NNRF9VTktOT1dONQkweDBlCS8qIFVua25vd24gKi8KLSNkZWZpbmUgTUNFX0NNRF9VTktOT1dONgkweDBmCS8qIFVua25vd24gKi8KLSNkZWZpbmUgTUNFX0NNRF9HX1JYUE9SVFNUUwkweDExCS8qIEdldCBSWCBwb3J0IHN0YXR1cyAqLwotI2RlZmluZSBNQ0VfQ01EX0dfVFhNQVNLCTB4MTMJLyogU2V0IFRYIHBvcnQgYml0bWFzayAqLwotI2RlZmluZSBNQ0VfQ01EX1NfUlhTRU5TT1IJMHgxNAkvKiBTZXQgUlggc2Vuc29yIChzdGQvbGVhcm5pbmcpICovCi0jZGVmaW5lIE1DRV9DTURfR19SWFNFTlNPUgkweDE1CS8qIEdldCBSWCBzZW5zb3IgKHN0ZC9sZWFybmluZykgKi8KLSNkZWZpbmUgTUNFX1JTUF9QVUxTRV9DT1VOVAkweDE1CS8qIFJYIHB1bHNlIGNvdW50IChvbmx5IGlmIGxlYXJuaW5nKSAqLwotI2RlZmluZSBNQ0VfQ01EX1RYX1BPUlRTCTB4MTYJLyogR2V0IG51bWJlciBvZiBUWCBwb3J0cyAqLwotI2RlZmluZSBNQ0VfQ01EX0dfV0FLRVNSQwkweDE3CS8qIEdldCB3YWtlIHNvdXJjZSAqLwotI2RlZmluZSBNQ0VfQ01EX1VOS05PV043CTB4MTgJLyogVW5rbm93biAqLwotI2RlZmluZSBNQ0VfQ01EX1VOS05PV044CTB4MTkJLyogVW5rbm93biAqLwotI2RlZmluZSBNQ0VfQ01EX1VOS05PV045CTB4MWIJLyogVW5rbm93biAqLwotI2RlZmluZSBNQ0VfQ01EX0RFVklDRV9SRVNFVAkweGFhCS8qIFJlc2V0IHRoZSBoYXJkd2FyZSAqLwotI2RlZmluZSBNQ0VfUlNQX0NNRF9JTlZBTElECTB4ZmUJLyogSW52YWxpZCBjb21tYW5kIGlzc3VlZCAqLwotCi0KLS8qIG1vZHVsZSBwYXJhbWV0ZXJzICovCi0jaWZkZWYgQ09ORklHX1VTQl9ERUJVRwotc3RhdGljIGludCBkZWJ1ZyA9IDE7Ci0jZWxzZQotc3RhdGljIGludCBkZWJ1ZzsKLSNlbmRpZgotCi0vKiBnZW5lcmFsIGNvbnN0YW50cyAqLwotI2RlZmluZSBTRU5EX0ZMQUdfSU5fUFJPR1JFU1MJMQotI2RlZmluZSBTRU5EX0ZMQUdfQ09NUExFVEUJMgotI2RlZmluZSBSRUNWX0ZMQUdfSU5fUFJPR1JFU1MJMwotI2RlZmluZSBSRUNWX0ZMQUdfQ09NUExFVEUJNAotCi0jZGVmaW5lIE1DRVVTQl9SWAkJMQotI2RlZmluZSBNQ0VVU0JfVFgJCTIKLQotI2RlZmluZSBWRU5ET1JfUEhJTElQUwkJMHgwNDcxCi0jZGVmaW5lIFZFTkRPUl9TTUsJCTB4MDYwOQotI2RlZmluZSBWRU5ET1JfVEFUVU5HCQkweDE0NjAKLSNkZWZpbmUgVkVORE9SX0dBVEVXQVkJCTB4MTA3YgotI2RlZmluZSBWRU5ET1JfU0hVVFRMRQkJMHgxMzA4Ci0jZGVmaW5lIFZFTkRPUl9TSFVUVExFMgkJMHgwNTFjCi0jZGVmaW5lIFZFTkRPUl9NSVRTVU1JCQkweDAzZWUKLSNkZWZpbmUgVkVORE9SX1RPUFNFRUQJCTB4MTc4NAotI2RlZmluZSBWRU5ET1JfUklDQVZJU0lPTgkweDE3OWQKLSNkZWZpbmUgVkVORE9SX0lUUk9OCQkweDE5NWQKLSNkZWZpbmUgVkVORE9SX0ZJQwkJMHgxNTA5Ci0jZGVmaW5lIFZFTkRPUl9MRwkJMHgwNDNlCi0jZGVmaW5lIFZFTkRPUl9NSUNST1NPRlQJMHgwNDVlCi0jZGVmaW5lIFZFTkRPUl9GT1JNT1NBCQkweDE0N2EKLSNkZWZpbmUgVkVORE9SX0ZJTlRFSwkJMHgxOTM0Ci0jZGVmaW5lIFZFTkRPUl9QSU5OQUNMRQkJMHgyMzA0Ci0jZGVmaW5lIFZFTkRPUl9FQ1MJCTB4MTAxOQotI2RlZmluZSBWRU5ET1JfV0lTVFJPTgkJMHgwZmI4Ci0jZGVmaW5lIFZFTkRPUl9DT01QUk8JCTB4MTg1YgotI2RlZmluZSBWRU5ET1JfTk9SVEhTVEFSCTB4MDRlYgotI2RlZmluZSBWRU5ET1JfUkVBTFRFSwkJMHgwYmRhCi0jZGVmaW5lIFZFTkRPUl9USVZPCQkweDEwNWEKLSNkZWZpbmUgVkVORE9SX0NPTkVYQU5UCQkweDA1NzIKLQotZW51bSBtY2V1c2JfbW9kZWxfdHlwZSB7Ci0JTUNFX0dFTjIgPSAwLAkJLyogTW9zdCBib2FyZHMgKi8KLQlNQ0VfR0VOMSwKLQlNQ0VfR0VOMywKLQlNQ0VfR0VOMl9UWF9JTlYsCi0JUE9MQVJJU19FVkssCi0JQ1hfSFlCUklEX1RWLAotfTsKLQotc3RydWN0IG1jZXVzYl9tb2RlbCB7Ci0JdTMyIG1jZV9nZW4xOjE7Ci0JdTMyIG1jZV9nZW4yOjE7Ci0JdTMyIG1jZV9nZW4zOjE7Ci0JdTMyIHR4X21hc2tfbm9ybWFsOjE7Ci0JdTMyIGlzX3BvbGFyaXM6MTsKLQl1MzIgbm9fdHg6MTsKLQotCWNvbnN0IGNoYXIgKnJjX21hcDsJLyogQWxsb3cgc3BlY2lmeSBhIHBlci1ib2FyZCBtYXAgKi8KLQljb25zdCBjaGFyICpuYW1lOwkvKiBwZXItYm9hcmQgbmFtZSAqLwotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBtY2V1c2JfbW9kZWwgbWNldXNiX21vZGVsW10gPSB7Ci0JW01DRV9HRU4xXSA9IHsKLQkJLm1jZV9nZW4xID0gMSwKLQkJLnR4X21hc2tfbm9ybWFsID0gMSwKLQl9LAotCVtNQ0VfR0VOMl0gPSB7Ci0JCS5tY2VfZ2VuMiA9IDEsCi0JfSwKLQlbTUNFX0dFTjJfVFhfSU5WXSA9IHsKLQkJLm1jZV9nZW4yID0gMSwKLQkJLnR4X21hc2tfbm9ybWFsID0gMSwKLQl9LAotCVtNQ0VfR0VOM10gPSB7Ci0JCS5tY2VfZ2VuMyA9IDEsCi0JCS50eF9tYXNrX25vcm1hbCA9IDEsCi0JfSwKLQlbUE9MQVJJU19FVktdID0gewotCQkuaXNfcG9sYXJpcyA9IDEsCi0JCS8qCi0JCSAqIEluIGZhY3QsIHRoZSBFVksgaXMgc2hpcHBlZCB3aXRob3V0Ci0JCSAqIHJlbW90ZXMsIGJ1dCB3ZSBzaG91bGQgaGF2ZSBzb21ldGhpbmcgaGFuZHksCi0JCSAqIHRvIGFsbG93IHRlc3RpbmcgaXQKLQkJICovCi0JCS5yY19tYXAgPSBSQ19NQVBfUkM1X0hBVVBQQVVHRV9ORVcsCi0JCS5uYW1lID0gIkNvbmV4YW50IEh5YnJpZCBUViAoY3gyMzF4eCkgTUNFIElSIiwKLQl9LAotCVtDWF9IWUJSSURfVFZdID0gewotCQkuaXNfcG9sYXJpcyA9IDEsCi0JCS5ub190eCA9IDEsIC8qIHR4IGlzbid0IHdpcmVkIHVwIGF0IGFsbCAqLwotCQkubmFtZSA9ICJDb25leGFudCBIeWJyaWQgVFYgKGN4MjMxeHgpIE1DRSBJUiIsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBtY2V1c2JfZGV2X3RhYmxlW10gPSB7Ci0JLyogT3JpZ2luYWwgTWljcm9zb2Z0IE1DRSBJUiBUcmFuc2NlaXZlciAob2Z0ZW4gSFAtYnJhbmRlZCkgKi8KLQl7IFVTQl9ERVZJQ0UoVkVORE9SX01JQ1JPU09GVCwgMHgwMDZkKSwKLQkgIC5kcml2ZXJfaW5mbyA9IE1DRV9HRU4xIH0sCi0JLyogUGhpbGlwcyBJbmZyYXJlZCBUcmFuc2NlaXZlciAtIFNhaGFyYSBicmFuZGVkICovCi0JeyBVU0JfREVWSUNFKFZFTkRPUl9QSElMSVBTLCAweDA2MDgpIH0sCi0JLyogUGhpbGlwcyBJbmZyYXJlZCBUcmFuc2NlaXZlciAtIEhQIGJyYW5kZWQgKi8KLQl7IFVTQl9ERVZJQ0UoVkVORE9SX1BISUxJUFMsIDB4MDYwYyksCi0JICAuZHJpdmVyX2luZm8gPSBNQ0VfR0VOMl9UWF9JTlYgfSwKLQkvKiBQaGlsaXBzIFNSTTUxMDAgKi8KLQl7IFVTQl9ERVZJQ0UoVkVORE9SX1BISUxJUFMsIDB4MDYwZCkgfSwKLQkvKiBQaGlsaXBzIEluZnJhcmVkIFRyYW5zY2VpdmVyIC0gT21hdXJhICovCi0JeyBVU0JfREVWSUNFKFZFTkRPUl9QSElMSVBTLCAweDA2MGYpIH0sCi0JLyogUGhpbGlwcyBJbmZyYXJlZCBUcmFuc2NlaXZlciAtIFNwaW5lbCBwbHVzICovCi0JeyBVU0JfREVWSUNFKFZFTkRPUl9QSElMSVBTLCAweDA2MTMpIH0sCi0JLyogUGhpbGlwcyBlSG9tZSBJbmZyYXJlZCBUcmFuc2NlaXZlciAqLwotCXsgVVNCX0RFVklDRShWRU5ET1JfUEhJTElQUywgMHgwODE1KSB9LAotCS8qIFBoaWxpcHMvU3BpbmVsIHBsdXMgSVIgdHJhbnNjZWl2ZXIgZm9yIEFTVVMgKi8KLQl7IFVTQl9ERVZJQ0UoVkVORE9SX1BISUxJUFMsIDB4MjA2YykgfSwKLQkvKiBQaGlsaXBzL1NwaW5lbCBwbHVzIElSIHRyYW5zY2VpdmVyIGZvciBBU1VTICovCi0JeyBVU0JfREVWSUNFKFZFTkRPUl9QSElMSVBTLCAweDIwODgpIH0sCi0JLyogUmVhbHRlayBNQ0UgSVIgUmVjZWl2ZXIgKi8KLQl7IFVTQl9ERVZJQ0UoVkVORE9SX1JFQUxURUssIDB4MDE2MSkgfSwKLQkvKiBTTUsvVG9zaGliYSBHODNDMDAwNEQ0MTAgKi8KLQl7IFVTQl9ERVZJQ0UoVkVORE9SX1NNSywgMHgwMzFkKSwKLQkgIC5kcml2ZXJfaW5mbyA9IE1DRV9HRU4yX1RYX0lOViB9LAotCS8qIFNNSyBlSG9tZSBJbmZyYXJlZCBUcmFuc2NlaXZlciAoU29ueSBWQUlPKSAqLwotCXsgVVNCX0RFVklDRShWRU5ET1JfU01LLCAweDAzMjIpLAotCSAgLmRyaXZlcl9pbmZvID0gTUNFX0dFTjJfVFhfSU5WIH0sCi0JLyogYnVuZGxlZCB3aXRoIEhhdXBwYXVnZSBQVlItMTUwICovCi0JeyBVU0JfREVWSUNFKFZFTkRPUl9TTUssIDB4MDMzNCksCi0JICAuZHJpdmVyX2luZm8gPSBNQ0VfR0VOMl9UWF9JTlYgfSwKLQkvKiBTTUsgZUhvbWUgSW5mcmFyZWQgVHJhbnNjZWl2ZXIgKi8KLQl7IFVTQl9ERVZJQ0UoVkVORE9SX1NNSywgMHgwMzM4KSB9LAotCS8qIFRhdHVuZyBlSG9tZSBJbmZyYXJlZCBUcmFuc2NlaXZlciAqLwotCXsgVVNCX0RFVklDRShWRU5ET1JfVEFUVU5HLCAweDkxNTApIH0sCi0JLyogU2h1dHRsZSBlSG9tZSBJbmZyYXJlZCBUcmFuc2NlaXZlciAqLwotCXsgVVNCX0RFVklDRShWRU5ET1JfU0hVVFRMRSwgMHhjMDAxKSB9LAotCS8qIFNodXR0bGUgZUhvbWUgSW5mcmFyZWQgVHJhbnNjZWl2ZXIgKi8KLQl7IFVTQl9ERVZJQ0UoVkVORE9SX1NIVVRUTEUyLCAweGMwMDEpIH0sCi0JLyogR2F0ZXdheSBlSG9tZSBJbmZyYXJlZCBUcmFuc2NlaXZlciAqLwotCXsgVVNCX0RFVklDRShWRU5ET1JfR0FURVdBWSwgMHgzMDA5KSB9LAotCS8qIE1pdHN1bWkgKi8KLQl7IFVTQl9ERVZJQ0UoVkVORE9SX01JVFNVTUksIDB4MjUwMSkgfSwKLQkvKiBUb3BzZWVkIGVIb21lIEluZnJhcmVkIFRyYW5zY2VpdmVyICovCi0JeyBVU0JfREVWSUNFKFZFTkRPUl9UT1BTRUVELCAweDAwMDEpLAotCSAgLmRyaXZlcl9pbmZvID0gTUNFX0dFTjJfVFhfSU5WIH0sCi0JLyogVG9wc2VlZCBIUCBlSG9tZSBJbmZyYXJlZCBUcmFuc2NlaXZlciAqLwotCXsgVVNCX0RFVklDRShWRU5ET1JfVE9QU0VFRCwgMHgwMDA2KSwKLQkgIC5kcml2ZXJfaW5mbyA9IE1DRV9HRU4yX1RYX0lOViB9LAotCS8qIFRvcHNlZWQgZUhvbWUgSW5mcmFyZWQgVHJhbnNjZWl2ZXIgKi8KLQl7IFVTQl9ERVZJQ0UoVkVORE9SX1RPUFNFRUQsIDB4MDAwNyksCi0JICAuZHJpdmVyX2luZm8gPSBNQ0VfR0VOMl9UWF9JTlYgfSwKLQkvKiBUb3BzZWVkIGVIb21lIEluZnJhcmVkIFRyYW5zY2VpdmVyICovCi0JeyBVU0JfREVWSUNFKFZFTkRPUl9UT1BTRUVELCAweDAwMDgpLAotCSAgLmRyaXZlcl9pbmZvID0gTUNFX0dFTjMgfSwKLQkvKiBUb3BzZWVkIGVIb21lIEluZnJhcmVkIFRyYW5zY2VpdmVyICovCi0JeyBVU0JfREVWSUNFKFZFTkRPUl9UT1BTRUVELCAweDAwMGEpLAotCSAgLmRyaXZlcl9pbmZvID0gTUNFX0dFTjJfVFhfSU5WIH0sCi0JLyogVG9wc2VlZCBlSG9tZSBJbmZyYXJlZCBUcmFuc2NlaXZlciAqLwotCXsgVVNCX0RFVklDRShWRU5ET1JfVE9QU0VFRCwgMHgwMDExKSwKLQkgIC5kcml2ZXJfaW5mbyA9IE1DRV9HRU4yX1RYX0lOViB9LAotCS8qIFJpY2F2aXNpb24gaW50ZXJuYWwgSW5mcmFyZWQgVHJhbnNjZWl2ZXIgKi8KLQl7IFVTQl9ERVZJQ0UoVkVORE9SX1JJQ0FWSVNJT04sIDB4MDAxMCkgfSwKLQkvKiBJdHJvbiBpb25lIExpYnJhIFEtMTEgKi8KLQl7IFVTQl9ERVZJQ0UoVkVORE9SX0lUUk9OLCAweDcwMDIpIH0sCi0JLyogRklDIGVIb21lIEluZnJhcmVkIFRyYW5zY2VpdmVyICovCi0JeyBVU0JfREVWSUNFKFZFTkRPUl9GSUMsIDB4OTI0MikgfSwKLQkvKiBMRyBlSG9tZSBJbmZyYXJlZCBUcmFuc2NlaXZlciAqLwotCXsgVVNCX0RFVklDRShWRU5ET1JfTEcsIDB4OTgwMykgfSwKLQkvKiBNaWNyb3NvZnQgTUNFIEluZnJhcmVkIFRyYW5zY2VpdmVyICovCi0JeyBVU0JfREVWSUNFKFZFTkRPUl9NSUNST1NPRlQsIDB4MDBhMCkgfSwKLQkvKiBGb3Jtb3NhIGVIb21lIEluZnJhcmVkIFRyYW5zY2VpdmVyICovCi0JeyBVU0JfREVWSUNFKFZFTkRPUl9GT1JNT1NBLCAweGUwMTUpIH0sCi0JLyogRm9ybW9zYTIxIC8gZUhvbWUgSW5mcmFyZWQgUmVjZWl2ZXIgKi8KLQl7IFVTQl9ERVZJQ0UoVkVORE9SX0ZPUk1PU0EsIDB4ZTAxNikgfSwKLQkvKiBGb3Jtb3NhIGFpbSAvIFRydXN0IE1DRSBJbmZyYXJlZCBSZWNlaXZlciAqLwotCXsgVVNCX0RFVklDRShWRU5ET1JfRk9STU9TQSwgMHhlMDE3KSB9LAotCS8qIEZvcm1vc2EgSW5kdXN0cmlhbCBDb21wdXRpbmcgLyBCZWFuYmFnIEVtdWxhdGlvbiBEZXZpY2UgKi8KLQl7IFVTQl9ERVZJQ0UoVkVORE9SX0ZPUk1PU0EsIDB4ZTAxOCkgfSwKLQkvKiBGb3Jtb3NhMjEgLyBlSG9tZSBJbmZyYXJlZCBSZWNlaXZlciAqLwotCXsgVVNCX0RFVklDRShWRU5ET1JfRk9STU9TQSwgMHhlMDNhKSB9LAotCS8qIEZvcm1vc2EgSW5kdXN0cmlhbCBDb21wdXRpbmcgQUlNIElSNjA1L0EgKi8KLQl7IFVTQl9ERVZJQ0UoVkVORE9SX0ZPUk1PU0EsIDB4ZTAzYykgfSwKLQkvKiBGb3Jtb3NhIEluZHVzdHJpYWwgQ29tcHV0aW5nICovCi0JeyBVU0JfREVWSUNFKFZFTkRPUl9GT1JNT1NBLCAweGUwM2UpIH0sCi0JLyogRmludGVrIGVIb21lIEluZnJhcmVkIFRyYW5zY2VpdmVyIChIUCBicmFuZGVkKSAqLwotCXsgVVNCX0RFVklDRShWRU5ET1JfRklOVEVLLCAweDUxNjgpIH0sCi0JLyogRmludGVrIGVIb21lIEluZnJhcmVkIFRyYW5zY2VpdmVyICovCi0JeyBVU0JfREVWSUNFKFZFTkRPUl9GSU5URUssIDB4MDYwMikgfSwKLQkvKiBGaW50ZWsgZUhvbWUgSW5mcmFyZWQgVHJhbnNjZWl2ZXIgKGluIHRoZSBBT3BlbiBNUDQ1KSAqLwotCXsgVVNCX0RFVklDRShWRU5ET1JfRklOVEVLLCAweDA3MDIpIH0sCi0JLyogUGlubmFjbGUgUmVtb3RlIEtpdCAqLwotCXsgVVNCX0RFVklDRShWRU5ET1JfUElOTkFDTEUsIDB4MDIyNSksCi0JICAuZHJpdmVyX2luZm8gPSBNQ0VfR0VOMyB9LAotCS8qIEVsaXRlZ3JvdXAgQ29tcHV0ZXIgU3lzdGVtcyBJUiAqLwotCXsgVVNCX0RFVklDRShWRU5ET1JfRUNTLCAweDBmMzgpIH0sCi0JLyogV2lzdHJvbiBDb3JwLiBlSG9tZSBJbmZyYXJlZCBSZWNlaXZlciAqLwotCXsgVVNCX0RFVklDRShWRU5ET1JfV0lTVFJPTiwgMHgwMDAyKSB9LAotCS8qIENvbXBybyBLMTAwICovCi0JeyBVU0JfREVWSUNFKFZFTkRPUl9DT01QUk8sIDB4MzAyMCkgfSwKLQkvKiBDb21wcm8gSzEwMCB2MiAqLwotCXsgVVNCX0RFVklDRShWRU5ET1JfQ09NUFJPLCAweDMwODIpIH0sCi0JLyogTm9ydGhzdGFyIFN5c3RlbXMsIEluYy4gZUhvbWUgSW5mcmFyZWQgVHJhbnNjZWl2ZXIgKi8KLQl7IFVTQl9ERVZJQ0UoVkVORE9SX05PUlRIU1RBUiwgMHhlMDA0KSB9LAotCS8qIFRpVm8gUEMgSVIgUmVjZWl2ZXIgKi8KLQl7IFVTQl9ERVZJQ0UoVkVORE9SX1RJVk8sIDB4MjAwMCkgfSwKLQkvKiBDb25leGFudCBIeWJyaWQgVFYgIlNoZWxieSIgUG9sYXJpcyBTREsgKi8KLQl7IFVTQl9ERVZJQ0UoVkVORE9SX0NPTkVYQU5ULCAweDU4YTEpLAotCSAgLmRyaXZlcl9pbmZvID0gUE9MQVJJU19FVksgfSwKLQkvKiBDb25leGFudCBIeWJyaWQgVFYgUkRVMjUzUyBQb2xhcmlzICovCi0JeyBVU0JfREVWSUNFKFZFTkRPUl9DT05FWEFOVCwgMHg1OGE1KSwKLQkgIC5kcml2ZXJfaW5mbyA9IENYX0hZQlJJRF9UViB9LAotCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCi0JeyB9Ci19OwotCi0vKiBkYXRhIHN0cnVjdHVyZSBmb3IgZWFjaCB1c2IgdHJhbnNjZWl2ZXIgKi8KLXN0cnVjdCBtY2V1c2JfZGV2IHsKLQkvKiBpci1jb3JlIGJpdHMgKi8KLQlzdHJ1Y3QgaXJfZGV2X3Byb3BzICpwcm9wczsKLQotCS8qIG9wdGlvbmFsIGZlYXR1cmVzIHdlIGNhbiBlbmFibGUgKi8KLQlib29sIGNhcnJpZXJfcmVwb3J0X2VuYWJsZWQ7Ci0JYm9vbCBsZWFybmluZ19lbmFibGVkOwotCi0JLyogY29yZSBkZXZpY2UgYml0cyAqLwotCXN0cnVjdCBkZXZpY2UgKmRldjsKLQlzdHJ1Y3QgaW5wdXRfZGV2ICppZGV2OwotCi0JLyogdXNiICovCi0Jc3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldjsKLQlzdHJ1Y3QgdXJiICp1cmJfaW47Ci0Jc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICp1c2JfZXBfaW47Ci0Jc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICp1c2JfZXBfb3V0OwotCi0JLyogYnVmZmVycyBhbmQgZG1hICovCi0JdW5zaWduZWQgY2hhciAqYnVmX2luOwotCXVuc2lnbmVkIGludCBsZW5faW47Ci0JZG1hX2FkZHJfdCBkbWFfaW47Ci0JZG1hX2FkZHJfdCBkbWFfb3V0OwotCi0JZW51bSB7Ci0JCUNNRF9IRUFERVIgPSAwLAotCQlTVUJDTUQsCi0JCUNNRF9EQVRBLAotCQlQQVJTRV9JUkRBVEEsCi0JfSBwYXJzZXJfc3RhdGU7Ci0KLQl1OCBjbWQsIHJlbTsJCS8qIFJlbWFpbmluZyBJUiBkYXRhIGJ5dGVzIGluIHBhY2tldCAqLwotCi0Jc3RydWN0IHsKLQkJdTMyIGNvbm5lY3RlZDoxOwotCQl1MzIgdHhfbWFza19ub3JtYWw6MTsKLQkJdTMyIG1pY3Jvc29mdF9nZW4xOjE7Ci0JCXUzMiBub190eDoxOwotCX0gZmxhZ3M7Ci0KLQkvKiB0cmFuc21pdCBzdXBwb3J0ICovCi0JaW50IHNlbmRfZmxhZ3M7Ci0JdTMyIGNhcnJpZXI7Ci0JdW5zaWduZWQgY2hhciB0eF9tYXNrOwotCi0JY2hhciBuYW1lWzEyOF07Ci0JY2hhciBwaHlzWzY0XTsKLQllbnVtIG1jZXVzYl9tb2RlbF90eXBlIG1vZGVsOwotfTsKLQotLyoKLSAqIE1DRSBEZXZpY2UgQ29tbWFuZCBTdHJpbmdzCi0gKiBEZXZpY2UgY29tbWFuZCByZXNwb25zZXMgdmFyeSBmcm9tIGRldmljZSB0byBkZXZpY2UuLi4KLSAqIC0gREVWSUNFX1JFU0VUIHJlc2V0cyB0aGUgaGFyZHdhcmUgdG8gaXRzIGRlZmF1bHQgc3RhdGUKLSAqIC0gR0VUX1JFVklTSU9OIGZldGNoZXMgdGhlIGhhcmR3YXJlL3NvZnR3YXJlIHJldmlzaW9uLCBjb21tb24KLSAqICAgcmVwbGllcyBhcmUgZmYgMGIgNDUgZmYgMWIgMDggYW5kIGZmIDBiIDUwIGZmIDFiIDQyCi0gKiAtIEdFVF9DQVJSSUVSX0ZSRVEgZ2V0cyB0aGUgY2FycmllciBtb2RlIGFuZCBmcmVxdWVuY3kgb2YgdGhlCi0gKiAgIGRldmljZSwgd2l0aCByZXBsaWVzIGluIHRoZSBmb3JtIG9mIDlmIDA2IE1NIEZGLCB3aGVyZSBNTSBpcyAwLTMsCi0gKiAgIG1lYW5pbmcgY2xrIG9mIDEwMDAwMDAwLCAyNTAwMDAwLCA2MjUwMDAgb3IgMTU2MjUwLCBhbmQgRkYgaXMKLSAqICAgKChjbGsgLyBmcmVxdWVuY3kpIC0gMSkKLSAqIC0gR0VUX1JYX1RJTUVPVVQgZmV0Y2hlcyB0aGUgcmVjZWl2ZXIgdGltZW91dCBpbiB1bml0cyBvZiA1MHVzLAotICogICByZXNwb25zZSBpbiB0aGUgZm9ybSBvZiA5ZiAwYyBtc2IgbHNiCi0gKiAtIEdFVF9UWF9CSVRNQVNLIGZldGNoZXMgdGhlIHRyYW5zbWl0dGVyIGJpdG1hc2ssIHJlcGxpZXMgaW4KLSAqICAgdGhlIGZvcm0gb2YgOWYgMDggYm0sIHdoZXJlIGJtIGlzIHRoZSBiaXRtYXNrCi0gKiAtIEdFVF9SWF9TRU5TT1IgZmV0Y2hlcyB0aGUgUlggc2Vuc29yIHNldHRpbmcgLS0gbG9uZy1yYW5nZQotICogICBnZW5lcmFsIHVzZSBvbmUgb3Igc2hvcnQtcmFuZ2UgbGVhcm5pbmcgb25lLCBpbiB0aGUgZm9ybSBvZgotICogICA5ZiAxNCBzcywgd2hlcmUgc3MgaXMgZWl0aGVyIDAxIGZvciBsb25nLXJhbmdlIG9yIDAyIGZvciBzaG9ydAotICogLSBTRVRfQ0FSUklFUl9GUkVRIHNldHMgYSBuZXcgY2FycmllciBtb2RlIGFuZCBmcmVxdWVuY3kKLSAqIC0gU0VUX1RYX0JJVE1BU0sgc2V0cyB0aGUgdHJhbnNtaXR0ZXIgYml0bWFzawotICogLSBTRVRfUlhfVElNRU9VVCBzZXRzIHRoZSByZWNlaXZlciB0aW1lb3V0Ci0gKiAtIFNFVF9SWF9TRU5TT1Igc2V0cyB3aGljaCByZWNlaXZlciBzZW5zb3IgdG8gdXNlCi0gKi8KLXN0YXRpYyBjaGFyIERFVklDRV9SRVNFVFtdCT0ge01DRV9DT01NQU5EX05VTEwsIE1DRV9IV19DTURfSEVBREVSLAotCQkJCSAgIE1DRV9DTURfREVWSUNFX1JFU0VUfTsKLXN0YXRpYyBjaGFyIEdFVF9SRVZJU0lPTltdCT0ge01DRV9IV19DTURfSEVBREVSLCBNQ0VfQ01EX0dfUkVWSVNJT059Owotc3RhdGljIGNoYXIgR0VUX1VOS05PV05bXQk9IHtNQ0VfSFdfQ01EX0hFQURFUiwgTUNFX0NNRF9VTktOT1dON307Ci1zdGF0aWMgY2hhciBHRVRfVU5LTk9XTjJbXQk9IHtNQ0VfQ09NTUFORF9IRUFERVIsIE1DRV9DTURfVU5LTk9XTjJ9Owotc3RhdGljIGNoYXIgR0VUX0NBUlJJRVJfRlJFUVtdCT0ge01DRV9DT01NQU5EX0hFQURFUiwgTUNFX0NNRF9HX0NBUlJJRVJ9Owotc3RhdGljIGNoYXIgR0VUX1JYX1RJTUVPVVRbXQk9IHtNQ0VfQ09NTUFORF9IRUFERVIsIE1DRV9DTURfR19USU1FT1VUfTsKLXN0YXRpYyBjaGFyIEdFVF9UWF9CSVRNQVNLW10JPSB7TUNFX0NPTU1BTkRfSEVBREVSLCBNQ0VfQ01EX0dfVFhNQVNLfTsKLXN0YXRpYyBjaGFyIEdFVF9SWF9TRU5TT1JbXQk9IHtNQ0VfQ09NTUFORF9IRUFERVIsIE1DRV9DTURfR19SWFNFTlNPUn07Ci0vKiBzdWIgaW4gZGVzaXJlZCB2YWx1ZXMgaW4gbG93ZXIgYnl0ZSBvciBieXRlcyBmb3IgZnVsbCBjb21tYW5kICovCi0vKiBGSVhNRTogbWFrZSB1c2Ugb2YgdGhlc2UgZm9yIHRyYW5zbWl0Lgotc3RhdGljIGNoYXIgU0VUX0NBUlJJRVJfRlJFUVtdCT0ge01DRV9DT01NQU5EX0hFQURFUiwKLQkJCQkgICBNQ0VfQ01EX1NfQ0FSUklFUiwgMHgwMCwgMHgwMH07Ci1zdGF0aWMgY2hhciBTRVRfVFhfQklUTUFTS1tdCT0ge01DRV9DT01NQU5EX0hFQURFUiwgTUNFX0NNRF9TX1RYTUFTSywgMHgwMH07Ci1zdGF0aWMgY2hhciBTRVRfUlhfVElNRU9VVFtdCT0ge01DRV9DT01NQU5EX0hFQURFUiwKLQkJCQkgICBNQ0VfQ01EX1NfVElNRU9VVCwgMHgwMCwgMHgwMH07Ci1zdGF0aWMgY2hhciBTRVRfUlhfU0VOU09SW10JPSB7TUNFX0NPTU1BTkRfSEVBREVSLAotCQkJCSAgIE1DRV9DTURfU19SWFNFTlNPUiwgMHgwMH07Ci0qLwotCi1zdGF0aWMgaW50IG1jZXVzYl9jbWRzaXplKHU4IGNtZCwgdTggc3ViY21kKQotewotCWludCBkYXRhc2l6ZSA9IDA7Ci0KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgTUNFX0NPTU1BTkRfTlVMTDoKLQkJaWYgKHN1YmNtZCA9PSBNQ0VfSFdfQ01EX0hFQURFUikKLQkJCWRhdGFzaXplID0gMTsKLQkJYnJlYWs7Ci0JY2FzZSBNQ0VfSFdfQ01EX0hFQURFUjoKLQkJc3dpdGNoIChzdWJjbWQpIHsKLQkJY2FzZSBNQ0VfQ01EX0dfUkVWSVNJT046Ci0JCQlkYXRhc2l6ZSA9IDI7Ci0JCQlicmVhazsKLQkJfQotCWNhc2UgTUNFX0NPTU1BTkRfSEVBREVSOgotCQlzd2l0Y2ggKHN1YmNtZCkgewotCQljYXNlIE1DRV9DTURfVU5LTk9XTjoKLQkJY2FzZSBNQ0VfQ01EX1NfQ0FSUklFUjoKLQkJY2FzZSBNQ0VfQ01EX1NfVElNRU9VVDoKLQkJY2FzZSBNQ0VfUlNQX1BVTFNFX0NPVU5UOgotCQkJZGF0YXNpemUgPSAyOwotCQkJYnJlYWs7Ci0JCWNhc2UgTUNFX0NNRF9TSUdfRU5EOgotCQljYXNlIE1DRV9DTURfU19UWE1BU0s6Ci0JCWNhc2UgTUNFX0NNRF9TX1JYU0VOU09SOgotCQkJZGF0YXNpemUgPSAxOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JcmV0dXJuIGRhdGFzaXplOwotfQotCi1zdGF0aWMgdm9pZCBtY2V1c2JfZGV2X3ByaW50ZGF0YShzdHJ1Y3QgbWNldXNiX2RldiAqaXIsIGNoYXIgKmJ1ZiwKLQkJCQkgaW50IG9mZnNldCwgaW50IGxlbiwgYm9vbCBvdXQpCi17Ci0JY2hhciBjb2Rlc1tVU0JfQlVGTEVOICogMyArIDFdOwotCWNoYXIgaW5vdXRbOV07Ci0JdTggY21kLCBzdWJjbWQsIGRhdGExLCBkYXRhMjsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpci0+ZGV2OwotCWludCBpLCBzdGFydCwgc2tpcCA9IDA7Ci0KLQlpZiAoIWRlYnVnKQotCQlyZXR1cm47Ci0KLQkvKiBza2lwIG1lYW5pbmdsZXNzIDB4YjEgMHg2MCBoZWFkZXIgYnl0ZXMgb24gb3JpZyByZWNlaXZlciAqLwotCWlmIChpci0+ZmxhZ3MubWljcm9zb2Z0X2dlbjEgJiYgIW91dCAmJiAhb2Zmc2V0KQotCQlza2lwID0gMjsKLQotCWlmIChsZW4gPD0gc2tpcCkKLQkJcmV0dXJuOwotCi0JZm9yIChpID0gMDsgaSA8IGxlbiAmJiBpIDwgVVNCX0JVRkxFTjsgaSsrKQotCQlzbnByaW50Zihjb2RlcyArIGkgKiAzLCA0LCAiJTAyeCAiLCBidWZbaSArIG9mZnNldF0gJiAweGZmKTsKLQotCWRldl9pbmZvKGRldiwgIiVzeCBkYXRhOiAlcyhsZW5ndGg9JWQpXG4iLAotCQkgKG91dCA/ICJ0IiA6ICJyIiksIGNvZGVzLCBsZW4pOwotCi0JaWYgKG91dCkKLQkJc3RyY3B5KGlub3V0LCAiUmVxdWVzdFwwIik7Ci0JZWxzZQotCQlzdHJjcHkoaW5vdXQsICJHb3RcMCIpOwotCi0Jc3RhcnQgID0gb2Zmc2V0ICsgc2tpcDsKLQljbWQgICAgPSBidWZbc3RhcnRdICYgMHhmZjsKLQlzdWJjbWQgPSBidWZbc3RhcnQgKyAxXSAmIDB4ZmY7Ci0JZGF0YTEgID0gYnVmW3N0YXJ0ICsgMl0gJiAweGZmOwotCWRhdGEyICA9IGJ1ZltzdGFydCArIDNdICYgMHhmZjsKLQotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBNQ0VfQ09NTUFORF9OVUxMOgotCQlpZiAoKHN1YmNtZCA9PSBNQ0VfSFdfQ01EX0hFQURFUikgJiYKLQkJICAgIChkYXRhMSA9PSBNQ0VfQ01EX0RFVklDRV9SRVNFVCkpCi0JCQlkZXZfaW5mbyhkZXYsICJEZXZpY2UgcmVzZXQgcmVxdWVzdGVkXG4iKTsKLQkJZWxzZQotCQkJZGV2X2luZm8oZGV2LCAiVW5rbm93biBjb21tYW5kIDB4JTAyeCAweCUwMnhcbiIsCi0JCQkJIGNtZCwgc3ViY21kKTsKLQkJYnJlYWs7Ci0JY2FzZSBNQ0VfSFdfQ01EX0hFQURFUjoKLQkJc3dpdGNoIChzdWJjbWQpIHsKLQkJY2FzZSBNQ0VfQ01EX0dfUkVWSVNJT046Ci0JCQlpZiAobGVuID09IDIpCi0JCQkJZGV2X2luZm8oZGV2LCAiR2V0IGh3L3N3IHJldj9cbiIpOwotCQkJZWxzZQotCQkJCWRldl9pbmZvKGRldiwgImh3L3N3IHJldiAweCUwMnggMHglMDJ4ICIKLQkJCQkJICIweCUwMnggMHglMDJ4XG4iLCBkYXRhMSwgZGF0YTIsCi0JCQkJCSBidWZbc3RhcnQgKyA0XSwgYnVmW3N0YXJ0ICsgNV0pOwotCQkJYnJlYWs7Ci0JCWNhc2UgTUNFX0NNRF9ERVZJQ0VfUkVTRVQ6Ci0JCQlkZXZfaW5mbyhkZXYsICJEZXZpY2UgcmVzZXQgcmVxdWVzdGVkXG4iKTsKLQkJCWJyZWFrOwotCQljYXNlIE1DRV9SU1BfQ01EX0lOVkFMSUQ6Ci0JCQlkZXZfaW5mbyhkZXYsICJQcmV2aW91cyBjb21tYW5kIG5vdCBzdXBwb3J0ZWRcbiIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgTUNFX0NNRF9VTktOT1dONzoKLQkJY2FzZSBNQ0VfQ01EX1VOS05PV045OgotCQlkZWZhdWx0OgotCQkJZGV2X2luZm8oZGV2LCAiVW5rbm93biBjb21tYW5kIDB4JTAyeCAweCUwMnhcbiIsCi0JCQkJIGNtZCwgc3ViY21kKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgTUNFX0NPTU1BTkRfSEVBREVSOgotCQlzd2l0Y2ggKHN1YmNtZCkgewotCQljYXNlIE1DRV9DTURfU0lHX0VORDoKLQkJCWRldl9pbmZvKGRldiwgIkVuZCBvZiBzaWduYWxcbiIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgTUNFX0NNRF9QSU5HOgotCQkJZGV2X2luZm8oZGV2LCAiUGluZ1xuIik7Ci0JCQlicmVhazsKLQkJY2FzZSBNQ0VfQ01EX1VOS05PV046Ci0JCQlkZXZfaW5mbyhkZXYsICJSZXNwIHRvIDlmIDA1IG9mIDB4JTAyeCAweCUwMnhcbiIsCi0JCQkJIGRhdGExLCBkYXRhMik7Ci0JCQlicmVhazsKLQkJY2FzZSBNQ0VfQ01EX1NfQ0FSUklFUjoKLQkJCWRldl9pbmZvKGRldiwgIiVzIGNhcnJpZXIgbW9kZSBhbmQgZnJlcSBvZiAiCi0JCQkJICIweCUwMnggMHglMDJ4XG4iLCBpbm91dCwgZGF0YTEsIGRhdGEyKTsKLQkJCWJyZWFrOwotCQljYXNlIE1DRV9DTURfR19DQVJSSUVSOgotCQkJZGV2X2luZm8oZGV2LCAiR2V0IGNhcnJpZXIgbW9kZSBhbmQgZnJlcVxuIik7Ci0JCQlicmVhazsKLQkJY2FzZSBNQ0VfQ01EX1NfVFhNQVNLOgotCQkJZGV2X2luZm8oZGV2LCAiJXMgdHJhbnNtaXQgYmxhc3RlciBtYXNrIG9mIDB4JTAyeFxuIiwKLQkJCQkgaW5vdXQsIGRhdGExKTsKLQkJCWJyZWFrOwotCQljYXNlIE1DRV9DTURfU19USU1FT1VUOgotCQkJLyogdmFsdWUgaXMgaW4gdW5pdHMgb2YgNTB1cywgc28geCo1MC8xMDAgb3IgeC8yIG1zICovCi0JCQlkZXZfaW5mbyhkZXYsICIlcyByZWNlaXZlIHRpbWVvdXQgb2YgJWQgbXNcbiIsCi0JCQkJIGlub3V0LCAoKGRhdGExIDw8IDgpIHwgZGF0YTIpIC8gMik7Ci0JCQlicmVhazsKLQkJY2FzZSBNQ0VfQ01EX0dfVElNRU9VVDoKLQkJCWRldl9pbmZvKGRldiwgIkdldCByZWNlaXZlIHRpbWVvdXRcbiIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgTUNFX0NNRF9HX1RYTUFTSzoKLQkJCWRldl9pbmZvKGRldiwgIkdldCB0cmFuc21pdCBibGFzdGVyIG1hc2tcbiIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgTUNFX0NNRF9TX1JYU0VOU09SOgotCQkJZGV2X2luZm8oZGV2LCAiJXMgJXMtcmFuZ2UgcmVjZWl2ZSBzZW5zb3IgaW4gdXNlXG4iLAotCQkJCSBpbm91dCwgZGF0YTEgPT0gMHgwMiA/ICJzaG9ydCIgOiAibG9uZyIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgTUNFX0NNRF9HX1JYU0VOU09SOgotCQkvKiBha2EgTUNFX1JTUF9QVUxTRV9DT1VOVCAqLwotCQkJaWYgKG91dCkKLQkJCQlkZXZfaW5mbyhkZXYsICJHZXQgcmVjZWl2ZSBzZW5zb3JcbiIpOwotCQkJZWxzZSBpZiAoaXItPmxlYXJuaW5nX2VuYWJsZWQpCi0JCQkJZGV2X2luZm8oZGV2LCAiUlggcHVsc2UgY291bnQ6ICVkXG4iLAotCQkJCQkgKChkYXRhMSA8PCA4KSB8IGRhdGEyKSk7Ci0JCQlicmVhazsKLQkJY2FzZSBNQ0VfUlNQX0NNRF9JTlZBTElEOgotCQkJZGV2X2luZm8oZGV2LCAiRXJyb3IhIEhhcmR3YXJlIGlzIGxpa2VseSB3ZWRnZWQuLi5cbiIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgTUNFX0NNRF9VTktOT1dOMjoKLQkJY2FzZSBNQ0VfQ01EX1VOS05PV04zOgotCQljYXNlIE1DRV9DTURfVU5LTk9XTjU6Ci0JCWRlZmF1bHQ6Ci0JCQlkZXZfaW5mbyhkZXYsICJVbmtub3duIGNvbW1hbmQgMHglMDJ4IDB4JTAyeFxuIiwKLQkJCQkgY21kLCBzdWJjbWQpOwotCQkJYnJlYWs7Ci0JCX0KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCi0JaWYgKGNtZCA9PSBNQ0VfSVJEQVRBX1RSQUlMRVIpCi0JCWRldl9pbmZvKGRldiwgIkVuZCBvZiByYXcgSVIgZGF0YVxuIik7Ci0JZWxzZSBpZiAoKGNtZCAhPSBNQ0VfQ09NTUFORF9IRUFERVIpICYmCi0JCSAoKGNtZCAmIE1DRV9DT01NQU5EX01BU0spID09IE1DRV9DT01NQU5EX0lSREFUQSkpCi0JCWRldl9pbmZvKGRldiwgIlJhdyBJUiBkYXRhLCAlZCBwdWxzZS9zcGFjZSBzYW1wbGVzXG4iLCBpci0+cmVtKTsKLX0KLQotc3RhdGljIHZvaWQgbWNlX2FzeW5jX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0Jc3RydWN0IG1jZXVzYl9kZXYgKmlyOwotCWludCBsZW47Ci0KLQlpZiAoIXVyYikKLQkJcmV0dXJuOwotCi0JaXIgPSB1cmItPmNvbnRleHQ7Ci0JaWYgKGlyKSB7Ci0JCWxlbiA9IHVyYi0+YWN0dWFsX2xlbmd0aDsKLQotCQlkZXZfZGJnKGlyLT5kZXYsICJjYWxsYmFjayBjYWxsZWQgKHN0YXR1cz0lZCBsZW49JWQpXG4iLAotCQkJdXJiLT5zdGF0dXMsIGxlbik7Ci0KLQkJbWNldXNiX2Rldl9wcmludGRhdGEoaXIsIHVyYi0+dHJhbnNmZXJfYnVmZmVyLCAwLCBsZW4sIHRydWUpOwotCX0KLQotfQotCi0vKiByZXF1ZXN0IGluY29taW5nIG9yIHNlbmQgb3V0Z29pbmcgdXNiIHBhY2tldCAtIHVzZWQgdG8gaW5pdGlhbGl6ZSByZW1vdGUgKi8KLXN0YXRpYyB2b2lkIG1jZV9yZXF1ZXN0X3BhY2tldChzdHJ1Y3QgbWNldXNiX2RldiAqaXIsCi0JCQkgICAgICAgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcCwKLQkJCSAgICAgICB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgc2l6ZSwgaW50IHVyYl90eXBlKQotewotCWludCByZXM7Ci0Jc3RydWN0IHVyYiAqYXN5bmNfdXJiOwotCXN0cnVjdCBkZXZpY2UgKmRldiA9IGlyLT5kZXY7Ci0JdW5zaWduZWQgY2hhciAqYXN5bmNfYnVmOwotCi0JaWYgKHVyYl90eXBlID09IE1DRVVTQl9UWCkgewotCQlhc3luY191cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOwotCQlpZiAodW5saWtlbHkoIWFzeW5jX3VyYikpIHsKLQkJCWRldl9lcnIoZGV2LCAiRXJyb3IsIGNvdWxkbid0IGFsbG9jYXRlIHVyYiFcbiIpOwotCQkJcmV0dXJuOwotCQl9Ci0KLQkJYXN5bmNfYnVmID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFhc3luY19idWYpIHsKLQkJCWRldl9lcnIoZGV2LCAiRXJyb3IsIGNvdWxkbid0IGFsbG9jYXRlIGJ1ZiFcbiIpOwotCQkJdXNiX2ZyZWVfdXJiKGFzeW5jX3VyYik7Ci0JCQlyZXR1cm47Ci0JCX0KLQotCQkvKiBvdXRib3VuZCBkYXRhICovCi0JCXVzYl9maWxsX2ludF91cmIoYXN5bmNfdXJiLCBpci0+dXNiZGV2LAotCQkJdXNiX3NuZGludHBpcGUoaXItPnVzYmRldiwgZXAtPmJFbmRwb2ludEFkZHJlc3MpLAotCQkJYXN5bmNfYnVmLCBzaXplLCAodXNiX2NvbXBsZXRlX3QpbWNlX2FzeW5jX2NhbGxiYWNrLAotCQkJaXIsIGVwLT5iSW50ZXJ2YWwpOwotCQltZW1jcHkoYXN5bmNfYnVmLCBkYXRhLCBzaXplKTsKLQotCX0gZWxzZSBpZiAodXJiX3R5cGUgPT0gTUNFVVNCX1JYKSB7Ci0JCS8qIHN0YW5kYXJkIHJlcXVlc3QgKi8KLQkJYXN5bmNfdXJiID0gaXItPnVyYl9pbjsKLQkJaXItPnNlbmRfZmxhZ3MgPSBSRUNWX0ZMQUdfSU5fUFJPR1JFU1M7Ci0KLQl9IGVsc2UgewotCQlkZXZfZXJyKGRldiwgIkVycm9yISBVbmtub3duIHVyYiB0eXBlICVkXG4iLCB1cmJfdHlwZSk7Ci0JCXJldHVybjsKLQl9Ci0KLQlkZXZfZGJnKGRldiwgInJlY2VpdmUgcmVxdWVzdCBjYWxsZWQgKHNpemU9JSN4KVxuIiwgc2l6ZSk7Ci0KLQlhc3luY191cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBzaXplOwotCWFzeW5jX3VyYi0+ZGV2ID0gaXItPnVzYmRldjsKLQotCXJlcyA9IHVzYl9zdWJtaXRfdXJiKGFzeW5jX3VyYiwgR0ZQX0FUT01JQyk7Ci0JaWYgKHJlcykgewotCQlkZXZfZGJnKGRldiwgInJlY2VpdmUgcmVxdWVzdCBGQUlMRUQhIChyZXM9JWQpXG4iLCByZXMpOwotCQlyZXR1cm47Ci0JfQotCWRldl9kYmcoZGV2LCAicmVjZWl2ZSByZXF1ZXN0IGNvbXBsZXRlIChyZXM9JWQpXG4iLCByZXMpOwotfQotCi1zdGF0aWMgdm9pZCBtY2VfYXN5bmNfb3V0KHN0cnVjdCBtY2V1c2JfZGV2ICppciwgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IHNpemUpCi17Ci0JbWNlX3JlcXVlc3RfcGFja2V0KGlyLCBpci0+dXNiX2VwX291dCwgZGF0YSwgc2l6ZSwgTUNFVVNCX1RYKTsKLX0KLQotc3RhdGljIHZvaWQgbWNlX3N5bmNfaW4oc3RydWN0IG1jZXVzYl9kZXYgKmlyLCB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgc2l6ZSkKLXsKLQltY2VfcmVxdWVzdF9wYWNrZXQoaXIsIGlyLT51c2JfZXBfaW4sIGRhdGEsIHNpemUsIE1DRVVTQl9SWCk7Ci19Ci0KLS8qIFNlbmQgZGF0YSBvdXQgdGhlIElSIGJsYXN0ZXIgcG9ydChzKSAqLwotc3RhdGljIGludCBtY2V1c2JfdHhfaXIodm9pZCAqcHJpdiwgaW50ICp0eGJ1ZiwgdTMyIG4pCi17Ci0Jc3RydWN0IG1jZXVzYl9kZXYgKmlyID0gcHJpdjsKLQlpbnQgaSwgcmV0ID0gMDsKLQlpbnQgY291bnQsIGNtZGNvdW50ID0gMDsKLQl1bnNpZ25lZCBjaGFyICpjbWRidWY7IC8qIE1DRSBjb21tYW5kIGJ1ZmZlciAqLwotCWxvbmcgc2lnbmFsX2R1cmF0aW9uID0gMDsgLyogU2luZ25hbCBsZW5ndGggaW4gdXMgKi8KLQlzdHJ1Y3QgdGltZXZhbCBzdGFydF90aW1lLCBlbmRfdGltZTsKLQotCWRvX2dldHRpbWVvZmRheSgmc3RhcnRfdGltZSk7Ci0KLQljb3VudCA9IG4gLyBzaXplb2YoaW50KTsKLQotCWNtZGJ1ZiA9IGt6YWxsb2Moc2l6ZW9mKGludCkgKiBNQ0VfQ01EQlVGX1NJWkUsIEdGUF9LRVJORUwpOwotCWlmICghY21kYnVmKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCS8qIE1DRSB0eCBpbml0IGhlYWRlciAqLwotCWNtZGJ1ZltjbWRjb3VudCsrXSA9IE1DRV9DT01NQU5EX0hFQURFUjsKLQljbWRidWZbY21kY291bnQrK10gPSBNQ0VfQ01EX1NfVFhNQVNLOwotCWNtZGJ1ZltjbWRjb3VudCsrXSA9IGlyLT50eF9tYXNrOwotCi0JLyogR2VuZXJhdGUgbWNlIHBhY2tldCBkYXRhICovCi0JZm9yIChpID0gMDsgKGkgPCBjb3VudCkgJiYgKGNtZGNvdW50IDwgTUNFX0NNREJVRl9TSVpFKTsgaSsrKSB7Ci0JCXNpZ25hbF9kdXJhdGlvbiArPSB0eGJ1ZltpXTsKLQkJdHhidWZbaV0gPSB0eGJ1ZltpXSAvIE1DRV9USU1FX1VOSVQ7Ci0KLQkJZG8geyAvKiBsb29wIHRvIHN1cHBvcnQgbG9uZyBwdWxzZXMvc3BhY2VzID4gMTI3KjUwdXM9Ni4zNW1zICovCi0KLQkJCS8qIEluc2VydCBtY2UgcGFja2V0IGhlYWRlciBldmVyeSA0dGggZW50cnkgKi8KLQkJCWlmICgoY21kY291bnQgPCBNQ0VfQ01EQlVGX1NJWkUpICYmCi0JCQkgICAgKGNtZGNvdW50IC0gTUNFX1RYX0hFQURFUl9MRU5HVEgpICUKLQkJCSAgICAgTUNFX0NPREVfTEVOR1RIID09IDApCi0JCQkJY21kYnVmW2NtZGNvdW50KytdID0gTUNFX0lSREFUQV9IRUFERVI7Ci0KLQkJCS8qIEluc2VydCBtY2UgcGFja2V0IGRhdGEgKi8KLQkJCWlmIChjbWRjb3VudCA8IE1DRV9DTURCVUZfU0laRSkKLQkJCQljbWRidWZbY21kY291bnQrK10gPQotCQkJCQkodHhidWZbaV0gPCBNQ0VfUFVMU0VfQklUID8KLQkJCQkJIHR4YnVmW2ldIDogTUNFX01BWF9QVUxTRV9MRU5HVEgpIHwKLQkJCQkJIChpICYgMSA/IDB4MDAgOiBNQ0VfUFVMU0VfQklUKTsKLQkJCWVsc2UgewotCQkJCXJldCA9IC1FSU5WQUw7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0KLQkJfSB3aGlsZSAoKHR4YnVmW2ldID4gTUNFX01BWF9QVUxTRV9MRU5HVEgpICYmCi0JCQkgKHR4YnVmW2ldIC09IE1DRV9NQVhfUFVMU0VfTEVOR1RIKSk7Ci0JfQotCi0JLyogRml4IHBhY2tldCBsZW5ndGggaW4gbGFzdCBoZWFkZXIgKi8KLQljbWRidWZbY21kY291bnQgLSAoY21kY291bnQgLSBNQ0VfVFhfSEVBREVSX0xFTkdUSCkgJSBNQ0VfQ09ERV9MRU5HVEhdID0KLQkJTUNFX0NPTU1BTkRfSVJEQVRBICsgKGNtZGNvdW50IC0gTUNFX1RYX0hFQURFUl9MRU5HVEgpICUKLQkJTUNFX0NPREVfTEVOR1RIIC0gMTsKLQotCS8qIENoZWNrIGlmIHdlIGhhdmUgcm9vbSBmb3IgdGhlIGVtcHR5IHBhY2tldCBhdCB0aGUgZW5kICovCi0JaWYgKGNtZGNvdW50ID49IE1DRV9DTURCVUZfU0laRSkgewotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIG91dDsKLQl9Ci0KLQkvKiBBbGwgbWNlIGNvbW1hbmRzIGVuZCB3aXRoIGFuIGVtcHR5IHBhY2tldCAoMHg4MCkgKi8KLQljbWRidWZbY21kY291bnQrK10gPSBNQ0VfSVJEQVRBX1RSQUlMRVI7Ci0KLQkvKiBUcmFuc21pdCB0aGUgY29tbWFuZCB0byB0aGUgbWNlIGRldmljZSAqLwotCW1jZV9hc3luY19vdXQoaXIsIGNtZGJ1ZiwgY21kY291bnQpOwotCi0JLyoKLQkgKiBUaGUgbGlyY2QgZ2FwIGNhbGN1bGF0aW9uIGV4cGVjdHMgdGhlIHdyaXRlIGZ1bmN0aW9uIHRvCi0JICogd2FpdCB0aGUgdGltZSBpdCB0YWtlcyBmb3IgdGhlIGlyY29tbWFuZCB0byBiZSBzZW50IGJlZm9yZQotCSAqIGl0IHJldHVybnMuCi0JICovCi0JZG9fZ2V0dGltZW9mZGF5KCZlbmRfdGltZSk7Ci0Jc2lnbmFsX2R1cmF0aW9uIC09IChlbmRfdGltZS50dl91c2VjIC0gc3RhcnRfdGltZS50dl91c2VjKSArCi0JCQkgICAoZW5kX3RpbWUudHZfc2VjIC0gc3RhcnRfdGltZS50dl9zZWMpICogMTAwMDAwMDsKLQotCS8qIGRlbGF5IHdpdGggdGhlIGNsb3Nlc3QgbnVtYmVyIG9mIHRpY2tzICovCi0Jc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQlzY2hlZHVsZV90aW1lb3V0KHVzZWNzX3RvX2ppZmZpZXMoc2lnbmFsX2R1cmF0aW9uKSk7Ci0KLW91dDoKLQlrZnJlZShjbWRidWYpOwotCXJldHVybiByZXQgPyByZXQgOiBuOwotfQotCi0vKiBTZXRzIGFjdGl2ZSBJUiBvdXRwdXRzIC0tIG1jZSBkZXZpY2VzIHR5cGljYWxseSBoYXZlIHR3byAqLwotc3RhdGljIGludCBtY2V1c2Jfc2V0X3R4X21hc2sodm9pZCAqcHJpdiwgdTMyIG1hc2spCi17Ci0Jc3RydWN0IG1jZXVzYl9kZXYgKmlyID0gcHJpdjsKLQotCWlmIChpci0+ZmxhZ3MudHhfbWFza19ub3JtYWwpCi0JCWlyLT50eF9tYXNrID0gbWFzazsKLQllbHNlCi0JCWlyLT50eF9tYXNrID0gKG1hc2sgIT0gTUNFX0RFRkFVTFRfVFhfTUFTSyA/Ci0JCQkJbWFzayBeIE1DRV9ERUZBVUxUX1RYX01BU0sgOiBtYXNrKSA8PCAxOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIFNldHMgdGhlIHNlbmQgY2FycmllciBmcmVxdWVuY3kgYW5kIG1vZGUgKi8KLXN0YXRpYyBpbnQgbWNldXNiX3NldF90eF9jYXJyaWVyKHZvaWQgKnByaXYsIHUzMiBjYXJyaWVyKQotewotCXN0cnVjdCBtY2V1c2JfZGV2ICppciA9IHByaXY7Ci0JaW50IGNsayA9IDEwMDAwMDAwOwotCWludCBwcmVzY2FsZXIgPSAwLCBkaXZpc29yID0gMDsKLQl1bnNpZ25lZCBjaGFyIGNtZGJ1Zls0XSA9IHsgTUNFX0NPTU1BTkRfSEVBREVSLAotCQkJCSAgICBNQ0VfQ01EX1NfQ0FSUklFUiwgMHgwMCwgMHgwMCB9OwotCi0JLyogQ2FycmllciBoYXMgY2hhbmdlZCAqLwotCWlmIChpci0+Y2FycmllciAhPSBjYXJyaWVyKSB7Ci0KLQkJaWYgKGNhcnJpZXIgPT0gMCkgewotCQkJaXItPmNhcnJpZXIgPSBjYXJyaWVyOwotCQkJY21kYnVmWzJdID0gTUNFX0NNRF9TSUdfRU5EOwotCQkJY21kYnVmWzNdID0gTUNFX0lSREFUQV9UUkFJTEVSOwotCQkJZGV2X2RiZyhpci0+ZGV2LCAiJXM6IGRpc2FibGluZyBjYXJyaWVyICIKLQkJCQkibW9kdWxhdGlvblxuIiwgX19mdW5jX18pOwotCQkJbWNlX2FzeW5jX291dChpciwgY21kYnVmLCBzaXplb2YoY21kYnVmKSk7Ci0JCQlyZXR1cm4gY2FycmllcjsKLQkJfQotCi0JCWZvciAocHJlc2NhbGVyID0gMDsgcHJlc2NhbGVyIDwgNDsgKytwcmVzY2FsZXIpIHsKLQkJCWRpdmlzb3IgPSAoY2xrID4+ICgyICogcHJlc2NhbGVyKSkgLyBjYXJyaWVyOwotCQkJaWYgKGRpdmlzb3IgPD0gMHhmZikgewotCQkJCWlyLT5jYXJyaWVyID0gY2FycmllcjsKLQkJCQljbWRidWZbMl0gPSBwcmVzY2FsZXI7Ci0JCQkJY21kYnVmWzNdID0gZGl2aXNvcjsKLQkJCQlkZXZfZGJnKGlyLT5kZXYsICIlczogcmVxdWVzdGluZyAldSBIWiAiCi0JCQkJCSJjYXJyaWVyXG4iLCBfX2Z1bmNfXywgY2Fycmllcik7Ci0KLQkJCQkvKiBUcmFuc21pdCBuZXcgY2FycmllciB0byBtY2UgZGV2aWNlICovCi0JCQkJbWNlX2FzeW5jX291dChpciwgY21kYnVmLCBzaXplb2YoY21kYnVmKSk7Ci0JCQkJcmV0dXJuIGNhcnJpZXI7Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCX0KLQotCXJldHVybiBjYXJyaWVyOwotfQotCi0vKgotICogV2UgZG9uJ3QgZG8gYW55dGhpbmcgYnV0IHByaW50IGRlYnVnIHNwZXcgZm9yIG1hbnkgb2YgdGhlIGNvbW1hbmQgYml0cwotICogd2UgcmVjZWl2ZSBmcm9tIHRoZSBoYXJkd2FyZSwgYnV0IHNvbWUgb2YgdGhlbSBhcmUgdXNlZnVsIGluZm9ybWF0aW9uCi0gKiB3ZSB3YW50IHRvIHN0b3JlIHNvIHRoYXQgd2UgY2FuIHVzZSB0aGVtLgotICovCi1zdGF0aWMgdm9pZCBtY2V1c2JfaGFuZGxlX2NvbW1hbmQoc3RydWN0IG1jZXVzYl9kZXYgKmlyLCBpbnQgaW5kZXgpCi17Ci0JdTggaGkgPSBpci0+YnVmX2luW2luZGV4ICsgMV0gJiAweGZmOwotCXU4IGxvID0gaXItPmJ1Zl9pbltpbmRleCArIDJdICYgMHhmZjsKLQotCXN3aXRjaCAoaXItPmJ1Zl9pbltpbmRleF0pIHsKLQkvKiAyLWJ5dGUgcmV0dXJuIHZhbHVlIGNvbW1hbmRzICovCi0JY2FzZSBNQ0VfQ01EX1NfVElNRU9VVDoKLQkJaXItPnByb3BzLT50aW1lb3V0ID0gTVNfVE9fTlMoKGhpIDw8IDggfCBsbykgLyAyKTsKLQkJYnJlYWs7Ci0KLQkvKiAxLWJ5dGUgcmV0dXJuIHZhbHVlIGNvbW1hbmRzICovCi0JY2FzZSBNQ0VfQ01EX1NfVFhNQVNLOgotCQlpci0+dHhfbWFzayA9IGhpOwotCQlicmVhazsKLQljYXNlIE1DRV9DTURfU19SWFNFTlNPUjoKLQkJaXItPmxlYXJuaW5nX2VuYWJsZWQgPSAoaGkgPT0gMHgwMik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLX0KLQotc3RhdGljIHZvaWQgbWNldXNiX3Byb2Nlc3NfaXJfZGF0YShzdHJ1Y3QgbWNldXNiX2RldiAqaXIsIGludCBidWZfbGVuKQotewotCURFRklORV9JUl9SQVdfRVZFTlQocmF3aXIpOwotCWludCBpID0gMDsKLQotCS8qIHNraXAgbWVhbmluZ2xlc3MgMHhiMSAweDYwIGhlYWRlciBieXRlcyBvbiBvcmlnIHJlY2VpdmVyICovCi0JaWYgKGlyLT5mbGFncy5taWNyb3NvZnRfZ2VuMSkKLQkJaSA9IDI7Ci0KLQkvKiBpZiB0aGVyZSdzIG5vIGRhdGEsIGp1c3QgcmV0dXJuIG5vdyAqLwotCWlmIChidWZfbGVuIDw9IGkpCi0JCXJldHVybjsKLQotCWZvciAoOyBpIDwgYnVmX2xlbjsgaSsrKSB7Ci0JCXN3aXRjaCAoaXItPnBhcnNlcl9zdGF0ZSkgewotCQljYXNlIFNVQkNNRDoKLQkJCWlyLT5yZW0gPSBtY2V1c2JfY21kc2l6ZShpci0+Y21kLCBpci0+YnVmX2luW2ldKTsKLQkJCW1jZXVzYl9kZXZfcHJpbnRkYXRhKGlyLCBpci0+YnVmX2luLCBpIC0gMSwKLQkJCQkJICAgICBpci0+cmVtICsgMiwgZmFsc2UpOwotCQkJbWNldXNiX2hhbmRsZV9jb21tYW5kKGlyLCBpKTsKLQkJCWlyLT5wYXJzZXJfc3RhdGUgPSBDTURfREFUQTsKLQkJCWJyZWFrOwotCQljYXNlIFBBUlNFX0lSREFUQToKLQkJCWlyLT5yZW0tLTsKLQkJCXJhd2lyLnB1bHNlID0gKChpci0+YnVmX2luW2ldICYgTUNFX1BVTFNFX0JJVCkgIT0gMCk7Ci0JCQlyYXdpci5kdXJhdGlvbiA9IChpci0+YnVmX2luW2ldICYgTUNFX1BVTFNFX01BU0spCi0JCQkJCSAqIE1TX1RPX05TKE1DRV9USU1FX1VOSVQpOwotCi0JCQlkZXZfZGJnKGlyLT5kZXYsICJTdG9yaW5nICVzIHdpdGggZHVyYXRpb24gJWRcbiIsCi0JCQkJcmF3aXIucHVsc2UgPyAicHVsc2UiIDogInNwYWNlIiwKLQkJCQlyYXdpci5kdXJhdGlvbik7Ci0KLQkJCWlyX3Jhd19ldmVudF9zdG9yZV93aXRoX2ZpbHRlcihpci0+aWRldiwgJnJhd2lyKTsKLQkJCWJyZWFrOwotCQljYXNlIENNRF9EQVRBOgotCQkJaXItPnJlbS0tOwotCQkJYnJlYWs7Ci0JCWNhc2UgQ01EX0hFQURFUjoKLQkJCS8qIGRlY29kZSBtY2UgcGFja2V0cyBvZiB0aGUgZm9ybSAoODQpLEFBLEJCLENDLEREICovCi0JCQkvKiBJUiBkYXRhIHBhY2tldHMgY2FuIHNwYW4gVVNCIG1lc3NhZ2VzIC0gcmVtICovCi0JCQlpci0+Y21kID0gaXItPmJ1Zl9pbltpXTsKLQkJCWlmICgoaXItPmNtZCA9PSBNQ0VfQ09NTUFORF9IRUFERVIpIHx8Ci0JCQkgICAgKChpci0+Y21kICYgTUNFX0NPTU1BTkRfTUFTSykgIT0KLQkJCSAgICAgTUNFX0NPTU1BTkRfSVJEQVRBKSkgewotCQkJCWlyLT5wYXJzZXJfc3RhdGUgPSBTVUJDTUQ7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlpci0+cmVtID0gKGlyLT5jbWQgJiBNQ0VfUEFDS0VUX0xFTkdUSF9NQVNLKTsKLQkJCW1jZXVzYl9kZXZfcHJpbnRkYXRhKGlyLCBpci0+YnVmX2luLAotCQkJCQkgICAgIGksIGlyLT5yZW0gKyAxLCBmYWxzZSk7Ci0JCQlpZiAoaXItPnJlbSkKLQkJCQlpci0+cGFyc2VyX3N0YXRlID0gUEFSU0VfSVJEQVRBOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlpZiAoaXItPnBhcnNlcl9zdGF0ZSAhPSBDTURfSEVBREVSICYmICFpci0+cmVtKQotCQkJaXItPnBhcnNlcl9zdGF0ZSA9IENNRF9IRUFERVI7Ci0JfQotCWRldl9kYmcoaXItPmRldiwgInByb2Nlc3NlZCBJUiBkYXRhLCBjYWxsaW5nIGlyX3Jhd19ldmVudF9oYW5kbGVcbiIpOwotCWlyX3Jhd19ldmVudF9oYW5kbGUoaXItPmlkZXYpOwotfQotCi1zdGF0aWMgdm9pZCBtY2V1c2JfZGV2X3JlY3Yoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlzdHJ1Y3QgbWNldXNiX2RldiAqaXI7Ci0JaW50IGJ1Zl9sZW47Ci0KLQlpZiAoIXVyYikKLQkJcmV0dXJuOwotCi0JaXIgPSB1cmItPmNvbnRleHQ7Ci0JaWYgKCFpcikgewotCQl1c2JfdW5saW5rX3VyYih1cmIpOwotCQlyZXR1cm47Ci0JfQotCi0JYnVmX2xlbiA9IHVyYi0+YWN0dWFsX2xlbmd0aDsKLQotCWlmIChpci0+c2VuZF9mbGFncyA9PSBSRUNWX0ZMQUdfSU5fUFJPR1JFU1MpIHsKLQkJaXItPnNlbmRfZmxhZ3MgPSBTRU5EX0ZMQUdfQ09NUExFVEU7Ci0JCWRldl9kYmcoaXItPmRldiwgInNldHVwIGFuc3dlciByZWNlaXZlZCAlZCBieXRlc1xuIiwKLQkJCWJ1Zl9sZW4pOwotCX0KLQotCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKLQkvKiBzdWNjZXNzICovCi0JY2FzZSAwOgotCQltY2V1c2JfcHJvY2Vzc19pcl9kYXRhKGlyLCBidWZfbGVuKTsKLQkJYnJlYWs7Ci0KLQljYXNlIC1FQ09OTlJFU0VUOgotCWNhc2UgLUVOT0VOVDoKLQljYXNlIC1FU0hVVERPV046Ci0JCXVzYl91bmxpbmtfdXJiKHVyYik7Ci0JCXJldHVybjsKLQotCWNhc2UgLUVQSVBFOgotCWRlZmF1bHQ6Ci0JCWRldl9kYmcoaXItPmRldiwgIkVycm9yOiB1cmIgc3RhdHVzID0gJWRcbiIsIHVyYi0+c3RhdHVzKTsKLQkJYnJlYWs7Ci0JfQotCi0JdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKLX0KLQotc3RhdGljIHZvaWQgbWNldXNiX2dlbjFfaW5pdChzdHJ1Y3QgbWNldXNiX2RldiAqaXIpCi17Ci0JaW50IHJldDsKLQlpbnQgbWF4cCA9IGlyLT5sZW5faW47Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gaXItPmRldjsKLQljaGFyICpkYXRhOwotCi0JZGF0YSA9IGt6YWxsb2MoVVNCX0NUUkxfTVNHX1NaLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRhdGEpIHsKLQkJZGV2X2VycihkZXYsICIlczogbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkIVxuIiwgX19mdW5jX18pOwotCQlyZXR1cm47Ci0JfQotCi0JLyoKLQkgKiBUaGlzIGlzIGEgc3RyYW5nZSBvbmUuIFdpbmRvd3MgaXNzdWVzIGEgc2V0IGFkZHJlc3MgdG8gdGhlIGRldmljZQotCSAqIG9uIHRoZSByZWNlaXZlIGNvbnRyb2wgcGlwZSBhbmQgZXhwZWN0IGEgY2VydGFpbiB2YWx1ZSBwYWlyIGJhY2sKLQkgKi8KLQlyZXQgPSB1c2JfY29udHJvbF9tc2coaXItPnVzYmRldiwgdXNiX3JjdmN0cmxwaXBlKGlyLT51c2JkZXYsIDApLAotCQkJICAgICAgVVNCX1JFUV9TRVRfQUREUkVTUywgVVNCX1RZUEVfVkVORE9SLCAwLCAwLAotCQkJICAgICAgZGF0YSwgVVNCX0NUUkxfTVNHX1NaLCBIWiAqIDMpOwotCWRldl9kYmcoZGV2LCAiJXMgLSByZXQgPSAlZFxuIiwgX19mdW5jX18sIHJldCk7Ci0JZGV2X2RiZyhkZXYsICIlcyAtIGRhdGFbMF0gPSAlZCwgZGF0YVsxXSA9ICVkXG4iLAotCQlfX2Z1bmNfXywgZGF0YVswXSwgZGF0YVsxXSk7Ci0KLQkvKiBzZXQgZmVhdHVyZTogYml0IHJhdGUgMzg0MDAgYnBzICovCi0JcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGlyLT51c2JkZXYsIHVzYl9zbmRjdHJscGlwZShpci0+dXNiZGV2LCAwKSwKLQkJCSAgICAgIFVTQl9SRVFfU0VUX0ZFQVRVUkUsIFVTQl9UWVBFX1ZFTkRPUiwKLQkJCSAgICAgIDB4YzA0ZSwgMHgwMDAwLCBOVUxMLCAwLCBIWiAqIDMpOwotCi0JZGV2X2RiZyhkZXYsICIlcyAtIHJldCA9ICVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKLQotCS8qIGJSZXF1ZXN0IDQ6IHNldCBjaGFyIGxlbmd0aCB0byA4IGJpdHMgKi8KLQlyZXQgPSB1c2JfY29udHJvbF9tc2coaXItPnVzYmRldiwgdXNiX3NuZGN0cmxwaXBlKGlyLT51c2JkZXYsIDApLAotCQkJICAgICAgNCwgVVNCX1RZUEVfVkVORE9SLAotCQkJICAgICAgMHgwODA4LCAweDAwMDAsIE5VTEwsIDAsIEhaICogMyk7Ci0JZGV2X2RiZyhkZXYsICIlcyAtIHJldEIgPSAlZFxuIiwgX19mdW5jX18sIHJldCk7Ci0KLQkvKiBiUmVxdWVzdCAyOiBzZXQgaGFuZHNoYWtpbmcgdG8gdXNlIERUUi9EU1IgKi8KLQlyZXQgPSB1c2JfY29udHJvbF9tc2coaXItPnVzYmRldiwgdXNiX3NuZGN0cmxwaXBlKGlyLT51c2JkZXYsIDApLAotCQkJICAgICAgMiwgVVNCX1RZUEVfVkVORE9SLAotCQkJICAgICAgMHgwMDAwLCAweDAxMDAsIE5VTEwsIDAsIEhaICogMyk7Ci0JZGV2X2RiZyhkZXYsICIlcyAtIHJldEMgPSAlZFxuIiwgX19mdW5jX18sIHJldCk7Ci0KLQkvKiBkZXZpY2UgcmVzZXQgKi8KLQltY2VfYXN5bmNfb3V0KGlyLCBERVZJQ0VfUkVTRVQsIHNpemVvZihERVZJQ0VfUkVTRVQpKTsKLQltY2Vfc3luY19pbihpciwgTlVMTCwgbWF4cCk7Ci0KLQkvKiBnZXQgaHcvc3cgcmV2aXNpb24/ICovCi0JbWNlX2FzeW5jX291dChpciwgR0VUX1JFVklTSU9OLCBzaXplb2YoR0VUX1JFVklTSU9OKSk7Ci0JbWNlX3N5bmNfaW4oaXIsIE5VTEwsIG1heHApOwotCi0Ja2ZyZWUoZGF0YSk7Ci19OwotCi1zdGF0aWMgdm9pZCBtY2V1c2JfZ2VuMl9pbml0KHN0cnVjdCBtY2V1c2JfZGV2ICppcikKLXsKLQlpbnQgbWF4cCA9IGlyLT5sZW5faW47Ci0KLQkvKiBkZXZpY2UgcmVzZXQgKi8KLQltY2VfYXN5bmNfb3V0KGlyLCBERVZJQ0VfUkVTRVQsIHNpemVvZihERVZJQ0VfUkVTRVQpKTsKLQltY2Vfc3luY19pbihpciwgTlVMTCwgbWF4cCk7Ci0KLQkvKiBnZXQgaHcvc3cgcmV2aXNpb24/ICovCi0JbWNlX2FzeW5jX291dChpciwgR0VUX1JFVklTSU9OLCBzaXplb2YoR0VUX1JFVklTSU9OKSk7Ci0JbWNlX3N5bmNfaW4oaXIsIE5VTEwsIG1heHApOwotCi0JLyogdW5rbm93biB3aGF0IHRoZSBuZXh0IHR3byBhY3R1YWxseSByZXR1cm4uLi4gKi8KLQltY2VfYXN5bmNfb3V0KGlyLCBHRVRfVU5LTk9XTiwgc2l6ZW9mKEdFVF9VTktOT1dOKSk7Ci0JbWNlX3N5bmNfaW4oaXIsIE5VTEwsIG1heHApOwotCW1jZV9hc3luY19vdXQoaXIsIEdFVF9VTktOT1dOMiwgc2l6ZW9mKEdFVF9VTktOT1dOMikpOwotCW1jZV9zeW5jX2luKGlyLCBOVUxMLCBtYXhwKTsKLX0KLQotc3RhdGljIHZvaWQgbWNldXNiX2dldF9wYXJhbWV0ZXJzKHN0cnVjdCBtY2V1c2JfZGV2ICppcikKLXsKLQlpbnQgbWF4cCA9IGlyLT5sZW5faW47Ci0KLQkvKiBnZXQgdGhlIGNhcnJpZXIgYW5kIGZyZXF1ZW5jeSAqLwotCW1jZV9hc3luY19vdXQoaXIsIEdFVF9DQVJSSUVSX0ZSRVEsIHNpemVvZihHRVRfQ0FSUklFUl9GUkVRKSk7Ci0JbWNlX3N5bmNfaW4oaXIsIE5VTEwsIG1heHApOwotCi0JaWYgKCFpci0+ZmxhZ3Mubm9fdHgpIHsKLQkJLyogZ2V0IHRoZSB0cmFuc21pdHRlciBiaXRtYXNrICovCi0JCW1jZV9hc3luY19vdXQoaXIsIEdFVF9UWF9CSVRNQVNLLCBzaXplb2YoR0VUX1RYX0JJVE1BU0spKTsKLQkJbWNlX3N5bmNfaW4oaXIsIE5VTEwsIG1heHApOwotCX0KLQotCS8qIGdldCByZWNlaXZlciB0aW1lb3V0IHZhbHVlICovCi0JbWNlX2FzeW5jX291dChpciwgR0VUX1JYX1RJTUVPVVQsIHNpemVvZihHRVRfUlhfVElNRU9VVCkpOwotCW1jZV9zeW5jX2luKGlyLCBOVUxMLCBtYXhwKTsKLQotCS8qIGdldCByZWNlaXZlciBzZW5zb3Igc2V0dGluZyAqLwotCW1jZV9hc3luY19vdXQoaXIsIEdFVF9SWF9TRU5TT1IsIHNpemVvZihHRVRfUlhfU0VOU09SKSk7Ci0JbWNlX3N5bmNfaW4oaXIsIE5VTEwsIG1heHApOwotfQotCi1zdGF0aWMgc3RydWN0IGlucHV0X2RldiAqbWNldXNiX2luaXRfaW5wdXRfZGV2KHN0cnVjdCBtY2V1c2JfZGV2ICppcikKLXsKLQlzdHJ1Y3QgaW5wdXRfZGV2ICppZGV2OwotCXN0cnVjdCBpcl9kZXZfcHJvcHMgKnByb3BzOwotCXN0cnVjdCBkZXZpY2UgKmRldiA9IGlyLT5kZXY7Ci0JY29uc3QgY2hhciAqcmNfbWFwID0gUkNfTUFQX1JDNl9NQ0U7Ci0JY29uc3QgY2hhciAqbmFtZSA9ICJNZWRpYSBDZW50ZXIgRWQuIGVIb21lIEluZnJhcmVkIFJlbW90ZSBUcmFuc2NlaXZlciI7Ci0JaW50IHJldCA9IC1FTk9ERVY7Ci0KLQlpZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7Ci0JaWYgKCFpZGV2KSB7Ci0JCWRldl9lcnIoZGV2LCAicmVtb3RlIGlucHV0IGRldiBhbGxvY2F0aW9uIGZhaWxlZFxuIik7Ci0JCWdvdG8gaWRldl9hbGxvY19mYWlsZWQ7Ci0JfQotCi0JcmV0ID0gLUVOT01FTTsKLQlwcm9wcyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpcl9kZXZfcHJvcHMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXByb3BzKSB7Ci0JCWRldl9lcnIoZGV2LCAicmVtb3RlIGlyIGRldiBwcm9wcyBhbGxvY2F0aW9uIGZhaWxlZFxuIik7Ci0JCWdvdG8gcHJvcHNfYWxsb2NfZmFpbGVkOwotCX0KLQotCWlmIChtY2V1c2JfbW9kZWxbaXItPm1vZGVsXS5uYW1lKQotCQluYW1lID0gbWNldXNiX21vZGVsW2lyLT5tb2RlbF0ubmFtZTsKLQotCXNucHJpbnRmKGlyLT5uYW1lLCBzaXplb2YoaXItPm5hbWUpLCAiJXMgKCUwNHg6JTA0eCkiLAotCQkgbmFtZSwKLQkJIGxlMTZfdG9fY3B1KGlyLT51c2JkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpLAotCQkgbGUxNl90b19jcHUoaXItPnVzYmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpKTsKLQotCWlkZXYtPm5hbWUgPSBpci0+bmFtZTsKLQl1c2JfbWFrZV9wYXRoKGlyLT51c2JkZXYsIGlyLT5waHlzLCBzaXplb2YoaXItPnBoeXMpKTsKLQlzdHJsY2F0KGlyLT5waHlzLCAiL2lucHV0MCIsIHNpemVvZihpci0+cGh5cykpOwotCWlkZXYtPnBoeXMgPSBpci0+cGh5czsKLQotCXByb3BzLT5wcml2ID0gaXI7Ci0JcHJvcHMtPmRyaXZlcl90eXBlID0gUkNfRFJJVkVSX0lSX1JBVzsKLQlwcm9wcy0+YWxsb3dlZF9wcm90b3MgPSBJUl9UWVBFX0FMTDsKLQlwcm9wcy0+dGltZW91dCA9IE1TX1RPX05TKDEwMDApOwotCWlmICghaXItPmZsYWdzLm5vX3R4KSB7Ci0JCXByb3BzLT5zX3R4X21hc2sgPSBtY2V1c2Jfc2V0X3R4X21hc2s7Ci0JCXByb3BzLT5zX3R4X2NhcnJpZXIgPSBtY2V1c2Jfc2V0X3R4X2NhcnJpZXI7Ci0JCXByb3BzLT50eF9pciA9IG1jZXVzYl90eF9pcjsKLQl9Ci0KLQlpci0+cHJvcHMgPSBwcm9wczsKLQotCXVzYl90b19pbnB1dF9pZChpci0+dXNiZGV2LCAmaWRldi0+aWQpOwotCWlkZXYtPmRldi5wYXJlbnQgPSBpci0+ZGV2OwotCi0JaWYgKG1jZXVzYl9tb2RlbFtpci0+bW9kZWxdLnJjX21hcCkKLQkJcmNfbWFwID0gbWNldXNiX21vZGVsW2lyLT5tb2RlbF0ucmNfbWFwOwotCi0JcmV0ID0gaXJfaW5wdXRfcmVnaXN0ZXIoaWRldiwgcmNfbWFwLCBwcm9wcywgRFJJVkVSX05BTUUpOwotCWlmIChyZXQgPCAwKSB7Ci0JCWRldl9lcnIoZGV2LCAicmVtb3RlIGlucHV0IGRldmljZSByZWdpc3RlciBmYWlsZWRcbiIpOwotCQlnb3RvIGlyZGV2X2ZhaWxlZDsKLQl9Ci0KLQlyZXR1cm4gaWRldjsKLQotaXJkZXZfZmFpbGVkOgotCWtmcmVlKHByb3BzKTsKLXByb3BzX2FsbG9jX2ZhaWxlZDoKLQlpbnB1dF9mcmVlX2RldmljZShpZGV2KTsKLWlkZXZfYWxsb2NfZmFpbGVkOgotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBtY2V1c2JfZGV2X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAotCQkJCSAgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKLXsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKLQlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppZGVzYzsKLQlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwID0gTlVMTDsKLQlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwX2luID0gTlVMTDsKLQlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwX291dCA9IE5VTEw7Ci0Jc3RydWN0IG1jZXVzYl9kZXYgKmlyID0gTlVMTDsKLQlpbnQgcGlwZSwgbWF4cCwgaTsKLQljaGFyIGJ1Zls2M10sIG5hbWVbMTI4XSA9ICIiOwotCWVudW0gbWNldXNiX21vZGVsX3R5cGUgbW9kZWwgPSBpZC0+ZHJpdmVyX2luZm87Ci0JYm9vbCBpc19nZW4zOwotCWJvb2wgaXNfbWljcm9zb2Z0X2dlbjE7Ci0JYm9vbCB0eF9tYXNrX25vcm1hbDsKLQlib29sIGlzX3BvbGFyaXM7Ci0KLQlkZXZfZGJnKCZpbnRmLT5kZXYsICIlcyBjYWxsZWRcbiIsIF9fZnVuY19fKTsKLQotCWlkZXNjICA9IGludGYtPmN1cl9hbHRzZXR0aW5nOwotCi0JaXNfZ2VuMyA9IG1jZXVzYl9tb2RlbFttb2RlbF0ubWNlX2dlbjM7Ci0JaXNfbWljcm9zb2Z0X2dlbjEgPSBtY2V1c2JfbW9kZWxbbW9kZWxdLm1jZV9nZW4xOwotCXR4X21hc2tfbm9ybWFsID0gbWNldXNiX21vZGVsW21vZGVsXS50eF9tYXNrX25vcm1hbDsKLQlpc19wb2xhcmlzID0gbWNldXNiX21vZGVsW21vZGVsXS5pc19wb2xhcmlzOwotCi0JaWYgKGlzX3BvbGFyaXMpIHsKLQkJLyogSW50ZXJmYWNlIDAgaXMgSVIgKi8KLQkJaWYgKGlkZXNjLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIpCi0JCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQkvKiBzdGVwIHRocm91Z2ggdGhlIGVuZHBvaW50cyB0byBmaW5kIGZpcnN0IGJ1bGsgaW4gYW5kIG91dCBlbmRwb2ludCAqLwotCWZvciAoaSA9IDA7IGkgPCBpZGVzYy0+ZGVzYy5iTnVtRW5kcG9pbnRzOyArK2kpIHsKLQkJZXAgPSAmaWRlc2MtPmVuZHBvaW50W2ldLmRlc2M7Ci0KLQkJaWYgKChlcF9pbiA9PSBOVUxMKQotCQkJJiYgKChlcC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9FTkRQT0lOVF9ESVJfTUFTSykKLQkJCSAgICA9PSBVU0JfRElSX0lOKQotCQkJJiYgKCgoZXAtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKQotCQkJICAgID09IFVTQl9FTkRQT0lOVF9YRkVSX0JVTEspCi0JCQl8fCAoKGVwLT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykKLQkJCSAgICA9PSBVU0JfRU5EUE9JTlRfWEZFUl9JTlQpKSkgewotCi0JCQllcF9pbiA9IGVwOwotCQkJZXBfaW4tPmJtQXR0cmlidXRlcyA9IFVTQl9FTkRQT0lOVF9YRkVSX0lOVDsKLQkJCWVwX2luLT5iSW50ZXJ2YWwgPSAxOwotCQkJZGV2X2RiZygmaW50Zi0+ZGV2LCAiYWNjZXB0YWJsZSBpbmJvdW5kIGVuZHBvaW50ICIKLQkJCQkiZm91bmRcbiIpOwotCQl9Ci0KLQkJaWYgKChlcF9vdXQgPT0gTlVMTCkKLQkJCSYmICgoZXAtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfRElSX01BU0spCi0JCQkgICAgPT0gVVNCX0RJUl9PVVQpCi0JCQkmJiAoKChlcC0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spCi0JCQkgICAgPT0gVVNCX0VORFBPSU5UX1hGRVJfQlVMSykKLQkJCXx8ICgoZXAtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKQotCQkJICAgID09IFVTQl9FTkRQT0lOVF9YRkVSX0lOVCkpKSB7Ci0KLQkJCWVwX291dCA9IGVwOwotCQkJZXBfb3V0LT5ibUF0dHJpYnV0ZXMgPSBVU0JfRU5EUE9JTlRfWEZFUl9JTlQ7Ci0JCQllcF9vdXQtPmJJbnRlcnZhbCA9IDE7Ci0JCQlkZXZfZGJnKCZpbnRmLT5kZXYsICJhY2NlcHRhYmxlIG91dGJvdW5kIGVuZHBvaW50ICIKLQkJCQkiZm91bmRcbiIpOwotCQl9Ci0JfQotCWlmIChlcF9pbiA9PSBOVUxMKSB7Ci0JCWRldl9kYmcoJmludGYtPmRldiwgImluYm91bmQgYW5kL29yIGVuZHBvaW50IG5vdCBmb3VuZFxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCXBpcGUgPSB1c2JfcmN2aW50cGlwZShkZXYsIGVwX2luLT5iRW5kcG9pbnRBZGRyZXNzKTsKLQltYXhwID0gdXNiX21heHBhY2tldChkZXYsIHBpcGUsIHVzYl9waXBlb3V0KHBpcGUpKTsKLQotCWlyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG1jZXVzYl9kZXYpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWlyKQotCQlnb3RvIG1lbV9hbGxvY19mYWlsOwotCi0JaXItPmJ1Zl9pbiA9IHVzYl9hbGxvY19jb2hlcmVudChkZXYsIG1heHAsIEdGUF9BVE9NSUMsICZpci0+ZG1hX2luKTsKLQlpZiAoIWlyLT5idWZfaW4pCi0JCWdvdG8gYnVmX2luX2FsbG9jX2ZhaWw7Ci0KLQlpci0+dXJiX2luID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWlyLT51cmJfaW4pCi0JCWdvdG8gdXJiX2luX2FsbG9jX2ZhaWw7Ci0KLQlpci0+dXNiZGV2ID0gZGV2OwotCWlyLT5kZXYgPSAmaW50Zi0+ZGV2OwotCWlyLT5sZW5faW4gPSBtYXhwOwotCWlyLT5mbGFncy5taWNyb3NvZnRfZ2VuMSA9IGlzX21pY3Jvc29mdF9nZW4xOwotCWlyLT5mbGFncy50eF9tYXNrX25vcm1hbCA9IHR4X21hc2tfbm9ybWFsOwotCWlyLT5mbGFncy5ub190eCA9IG1jZXVzYl9tb2RlbFttb2RlbF0ubm9fdHg7Ci0JaXItPm1vZGVsID0gbW9kZWw7Ci0KLQkvKiBTYXZpbmcgdXNiIGludGVyZmFjZSBkYXRhIGZvciB1c2UgYnkgdGhlIHRyYW5zbWl0dGVyIHJvdXRpbmUgKi8KLQlpci0+dXNiX2VwX2luID0gZXBfaW47Ci0JaXItPnVzYl9lcF9vdXQgPSBlcF9vdXQ7Ci0KLQlpZiAoZGV2LT5kZXNjcmlwdG9yLmlNYW51ZmFjdHVyZXIKLQkgICAgJiYgdXNiX3N0cmluZyhkZXYsIGRldi0+ZGVzY3JpcHRvci5pTWFudWZhY3R1cmVyLAotCQkJICBidWYsIHNpemVvZihidWYpKSA+IDApCi0JCXN0cmxjcHkobmFtZSwgYnVmLCBzaXplb2YobmFtZSkpOwotCWlmIChkZXYtPmRlc2NyaXB0b3IuaVByb2R1Y3QKLQkgICAgJiYgdXNiX3N0cmluZyhkZXYsIGRldi0+ZGVzY3JpcHRvci5pUHJvZHVjdCwKLQkJCSAgYnVmLCBzaXplb2YoYnVmKSkgPiAwKQotCQlzbnByaW50ZihuYW1lICsgc3RybGVuKG5hbWUpLCBzaXplb2YobmFtZSkgLSBzdHJsZW4obmFtZSksCi0JCQkgIiAlcyIsIGJ1Zik7Ci0KLQlpci0+aWRldiA9IG1jZXVzYl9pbml0X2lucHV0X2Rldihpcik7Ci0JaWYgKCFpci0+aWRldikKLQkJZ290byBpbnB1dF9kZXZfZmFpbDsKLQotCS8qIGZsdXNoIGJ1ZmZlcnMgb24gdGhlIGRldmljZSAqLwotCW1jZV9zeW5jX2luKGlyLCBOVUxMLCBtYXhwKTsKLQltY2Vfc3luY19pbihpciwgTlVMTCwgbWF4cCk7Ci0KLQkvKiB3aXJlIHVwIGluYm91bmQgZGF0YSBoYW5kbGVyICovCi0JdXNiX2ZpbGxfaW50X3VyYihpci0+dXJiX2luLCBkZXYsIHBpcGUsIGlyLT5idWZfaW4sCi0JCW1heHAsICh1c2JfY29tcGxldGVfdCkgbWNldXNiX2Rldl9yZWN2LCBpciwgZXBfaW4tPmJJbnRlcnZhbCk7Ci0JaXItPnVyYl9pbi0+dHJhbnNmZXJfZG1hID0gaXItPmRtYV9pbjsKLQlpci0+dXJiX2luLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKLQotCS8qIGluaXRpYWxpemUgZGV2aWNlICovCi0JaWYgKGlyLT5mbGFncy5taWNyb3NvZnRfZ2VuMSkKLQkJbWNldXNiX2dlbjFfaW5pdChpcik7Ci0JZWxzZSBpZiAoIWlzX2dlbjMpCi0JCW1jZXVzYl9nZW4yX2luaXQoaXIpOwotCi0JbWNldXNiX2dldF9wYXJhbWV0ZXJzKGlyKTsKLQotCWlmICghaXItPmZsYWdzLm5vX3R4KQotCQltY2V1c2Jfc2V0X3R4X21hc2soaXIsIE1DRV9ERUZBVUxUX1RYX01BU0spOwotCi0JdXNiX3NldF9pbnRmZGF0YShpbnRmLCBpcik7Ci0KLQlkZXZfaW5mbygmaW50Zi0+ZGV2LCAiUmVnaXN0ZXJlZCAlcyBvbiB1c2IlZDolZFxuIiwgbmFtZSwKLQkJIGRldi0+YnVzLT5idXNudW0sIGRldi0+ZGV2bnVtKTsKLQotCXJldHVybiAwOwotCi0JLyogRXJyb3ItaGFuZGxpbmcgcGF0aCAqLwotaW5wdXRfZGV2X2ZhaWw6Ci0JdXNiX2ZyZWVfdXJiKGlyLT51cmJfaW4pOwotdXJiX2luX2FsbG9jX2ZhaWw6Ci0JdXNiX2ZyZWVfY29oZXJlbnQoZGV2LCBtYXhwLCBpci0+YnVmX2luLCBpci0+ZG1hX2luKTsKLWJ1Zl9pbl9hbGxvY19mYWlsOgotCWtmcmVlKGlyKTsKLW1lbV9hbGxvY19mYWlsOgotCWRldl9lcnIoJmludGYtPmRldiwgIiVzOiBkZXZpY2Ugc2V0dXAgZmFpbGVkIVxuIiwgX19mdW5jX18pOwotCi0JcmV0dXJuIC1FTk9NRU07Ci19Ci0KLQotc3RhdGljIHZvaWQgX19kZXZleGl0IG1jZXVzYl9kZXZfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKLXsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKLQlzdHJ1Y3QgbWNldXNiX2RldiAqaXIgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwotCi0JdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKLQotCWlmICghaXIpCi0JCXJldHVybjsKLQotCWlyLT51c2JkZXYgPSBOVUxMOwotCWlyX2lucHV0X3VucmVnaXN0ZXIoaXItPmlkZXYpOwotCXVzYl9raWxsX3VyYihpci0+dXJiX2luKTsKLQl1c2JfZnJlZV91cmIoaXItPnVyYl9pbik7Ci0JdXNiX2ZyZWVfY29oZXJlbnQoZGV2LCBpci0+bGVuX2luLCBpci0+YnVmX2luLCBpci0+ZG1hX2luKTsKLQotCWtmcmVlKGlyKTsKLX0KLQotc3RhdGljIGludCBtY2V1c2JfZGV2X3N1c3BlbmQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKQotewotCXN0cnVjdCBtY2V1c2JfZGV2ICppciA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7Ci0JZGV2X2luZm8oaXItPmRldiwgInN1c3BlbmRcbiIpOwotCXVzYl9raWxsX3VyYihpci0+dXJiX2luKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBtY2V1c2JfZGV2X3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKLXsKLQlzdHJ1Y3QgbWNldXNiX2RldiAqaXIgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwotCWRldl9pbmZvKGlyLT5kZXYsICJyZXN1bWVcbiIpOwotCWlmICh1c2Jfc3VibWl0X3VyYihpci0+dXJiX2luLCBHRlBfQVRPTUlDKSkKLQkJcmV0dXJuIC1FSU87Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBtY2V1c2JfZGV2X2RyaXZlciA9IHsKLQkubmFtZSA9CQlEUklWRVJfTkFNRSwKLQkucHJvYmUgPQltY2V1c2JfZGV2X3Byb2JlLAotCS5kaXNjb25uZWN0ID0JbWNldXNiX2Rldl9kaXNjb25uZWN0LAotCS5zdXNwZW5kID0JbWNldXNiX2Rldl9zdXNwZW5kLAotCS5yZXN1bWUgPQltY2V1c2JfZGV2X3Jlc3VtZSwKLQkucmVzZXRfcmVzdW1lID0JbWNldXNiX2Rldl9yZXN1bWUsCi0JLmlkX3RhYmxlID0JbWNldXNiX2Rldl90YWJsZQotfTsKLQotc3RhdGljIGludCBfX2luaXQgbWNldXNiX2Rldl9pbml0KHZvaWQpCi17Ci0JaW50IHJldDsKLQotCXJldCA9IHVzYl9yZWdpc3RlcigmbWNldXNiX2Rldl9kcml2ZXIpOwotCWlmIChyZXQgPCAwKQotCQlwcmludGsoS0VSTl9FUlIgRFJJVkVSX05BTUUKLQkJICAgICAgICI6IHVzYiByZWdpc3RlciBmYWlsZWQsIHJlc3VsdCA9ICVkXG4iLCByZXQpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IG1jZXVzYl9kZXZfZXhpdCh2b2lkKQotewotCXVzYl9kZXJlZ2lzdGVyKCZtY2V1c2JfZGV2X2RyaXZlcik7Ci19Ci0KLW1vZHVsZV9pbml0KG1jZXVzYl9kZXZfaW5pdCk7Ci1tb2R1bGVfZXhpdChtY2V1c2JfZGV2X2V4aXQpOwotCi1NT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOwotTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBtY2V1c2JfZGV2X3RhYmxlKTsKLQotbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7Ci1NT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgZW5hYmxlZCBvciBub3QiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvSVIvbnV2b3Rvbi1jaXIuYyBiL2RyaXZlcnMvbWVkaWEvSVIvbnV2b3Rvbi1jaXIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWNjNzI5Yy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL0lSL251dm90b24tY2lyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjUyICswLDAgQEAKLS8qCi0gKiBEcml2ZXIgZm9yIE51dm90b24gVGVjaG5vbG9neSBDb3Jwb3JhdGlvbiB3ODM2NjdoZy93ODM2NzdoZy1pIENJUgotICoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBKYXJvZCBXaWxzb24gPGphcm9kQHJlZGhhdC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgTnV2b3RvbiBQUyBUZWFtCi0gKgotICogU3BlY2lhbCB0aGFua3MgdG8gTnV2b3RvbiBmb3IgcHJvdmlkaW5nIGhhcmR3YXJlLCBzcGVjIHNoZWV0cyBhbmQKLSAqIHNhbXBsZSBjb2RlIHVwb24gd2hpY2ggcG9ydGlvbnMgb2YgdGhpcyBkcml2ZXIgYXJlIGJhc2VkLiBJbmRpcmVjdAotICogdGhhbmtzIGFsc28gdG8gTWF4aW0gTGV2aXRza3ksIHdob3NlIGVuZV9pciBkcml2ZXIgdGhpcyBkcml2ZXIgaXMKLSAqIG1vZGVsZWQgYWZ0ZXIuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQotICogTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNwotICogVVNBCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BucC5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KLSNpbmNsdWRlIDxtZWRpYS9pci1jb3JlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpX2lkcy5oPgotCi0jaW5jbHVkZSAibnV2b3Rvbi1jaXIuaCIKLQotc3RhdGljIGNoYXIgKmNoaXBfaWQgPSAidzgzNng3aGciOwotCi0vKiB3cml0ZSB2YWwgdG8gY29uZmlnIHJlZyAqLwotc3RhdGljIGlubGluZSB2b2lkIG52dF9jcl93cml0ZShzdHJ1Y3QgbnZ0X2RldiAqbnZ0LCB1OCB2YWwsIHU4IHJlZykKLXsKLQlvdXRiKHJlZywgbnZ0LT5jcl9lZmlyKTsKLQlvdXRiKHZhbCwgbnZ0LT5jcl9lZmRyKTsKLX0KLQotLyogcmVhZCB2YWwgZnJvbSBjb25maWcgcmVnICovCi1zdGF0aWMgaW5saW5lIHU4IG52dF9jcl9yZWFkKHN0cnVjdCBudnRfZGV2ICpudnQsIHU4IHJlZykKLXsKLQlvdXRiKHJlZywgbnZ0LT5jcl9lZmlyKTsKLQlyZXR1cm4gaW5iKG52dC0+Y3JfZWZkcik7Ci19Ci0KLS8qIHVwZGF0ZSBjb25maWcgcmVnaXN0ZXIgYml0IHdpdGhvdXQgY2hhbmdpbmcgb3RoZXIgYml0cyAqLwotc3RhdGljIGlubGluZSB2b2lkIG52dF9zZXRfcmVnX2JpdChzdHJ1Y3QgbnZ0X2RldiAqbnZ0LCB1OCB2YWwsIHU4IHJlZykKLXsKLQl1OCB0bXAgPSBudnRfY3JfcmVhZChudnQsIHJlZykgfCB2YWw7Ci0JbnZ0X2NyX3dyaXRlKG52dCwgdG1wLCByZWcpOwotfQotCi0vKiBjbGVhciBjb25maWcgcmVnaXN0ZXIgYml0IHdpdGhvdXQgY2hhbmdpbmcgb3RoZXIgYml0cyAqLwotc3RhdGljIGlubGluZSB2b2lkIG52dF9jbGVhcl9yZWdfYml0KHN0cnVjdCBudnRfZGV2ICpudnQsIHU4IHZhbCwgdTggcmVnKQotewotCXU4IHRtcCA9IG52dF9jcl9yZWFkKG52dCwgcmVnKSAmIH52YWw7Ci0JbnZ0X2NyX3dyaXRlKG52dCwgdG1wLCByZWcpOwotfQotCi0vKiBlbnRlciBleHRlbmRlZCBmdW5jdGlvbiBtb2RlICovCi1zdGF0aWMgaW5saW5lIHZvaWQgbnZ0X2VmbV9lbmFibGUoc3RydWN0IG52dF9kZXYgKm52dCkKLXsKLQkvKiBFbmFibGluZyBFeHRlbmRlZCBGdW5jdGlvbiBNb2RlIGV4cGxpY2l0bHkgcmVxdWlyZXMgd3JpdGluZyAyeCAqLwotCW91dGIoRUZFUl9FRk1fRU5BQkxFLCBudnQtPmNyX2VmaXIpOwotCW91dGIoRUZFUl9FRk1fRU5BQkxFLCBudnQtPmNyX2VmaXIpOwotfQotCi0vKiBleGl0IGV4dGVuZGVkIGZ1bmN0aW9uIG1vZGUgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBudnRfZWZtX2Rpc2FibGUoc3RydWN0IG52dF9kZXYgKm52dCkKLXsKLQlvdXRiKEVGRVJfRUZNX0RJU0FCTEUsIG52dC0+Y3JfZWZpcik7Ci19Ci0KLS8qCi0gKiBXaGVuIHlvdSB3YW50IHRvIGFkZHJlc3MgYSBzcGVjaWZpYyBsb2dpY2FsIGRldmljZSwgd3JpdGUgaXRzIGxvZ2ljYWwKLSAqIGRldmljZSBudW1iZXIgdG8gQ1JfTE9HSUNBTF9ERVZfU0VMLCB0aGVuIGVuYWJsZS9kaXNhYmxlIGJ5IHdyaXRpbmcKLSAqIDB4MS8weDAgcmVzcGVjdGl2ZWx5IHRvIENSX0xPR0lDQUxfREVWX0VOLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgbnZ0X3NlbGVjdF9sb2dpY2FsX2RldihzdHJ1Y3QgbnZ0X2RldiAqbnZ0LCB1OCBsZGV2KQotewotCW91dGIoQ1JfTE9HSUNBTF9ERVZfU0VMLCBudnQtPmNyX2VmaXIpOwotCW91dGIobGRldiwgbnZ0LT5jcl9lZmRyKTsKLX0KLQotLyogd3JpdGUgdmFsIHRvIGNpciBjb25maWcgcmVnaXN0ZXIgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBudnRfY2lyX3JlZ193cml0ZShzdHJ1Y3QgbnZ0X2RldiAqbnZ0LCB1OCB2YWwsIHU4IG9mZnNldCkKLXsKLQlvdXRiKHZhbCwgbnZ0LT5jaXJfYWRkciArIG9mZnNldCk7Ci19Ci0KLS8qIHJlYWQgdmFsIGZyb20gY2lyIGNvbmZpZyByZWdpc3RlciAqLwotc3RhdGljIHU4IG52dF9jaXJfcmVnX3JlYWQoc3RydWN0IG52dF9kZXYgKm52dCwgdTggb2Zmc2V0KQotewotCXU4IHZhbDsKLQotCXZhbCA9IGluYihudnQtPmNpcl9hZGRyICsgb2Zmc2V0KTsKLQotCXJldHVybiB2YWw7Ci19Ci0KLS8qIHdyaXRlIHZhbCB0byBjaXIgd2FrZSByZWdpc3RlciAqLwotc3RhdGljIGlubGluZSB2b2lkIG52dF9jaXJfd2FrZV9yZWdfd3JpdGUoc3RydWN0IG52dF9kZXYgKm52dCwKLQkJCQkJICB1OCB2YWwsIHU4IG9mZnNldCkKLXsKLQlvdXRiKHZhbCwgbnZ0LT5jaXJfd2FrZV9hZGRyICsgb2Zmc2V0KTsKLX0KLQotLyogcmVhZCB2YWwgZnJvbSBjaXIgd2FrZSBjb25maWcgcmVnaXN0ZXIgKi8KLXN0YXRpYyB1OCBudnRfY2lyX3dha2VfcmVnX3JlYWQoc3RydWN0IG52dF9kZXYgKm52dCwgdTggb2Zmc2V0KQotewotCXU4IHZhbDsKLQotCXZhbCA9IGluYihudnQtPmNpcl93YWtlX2FkZHIgKyBvZmZzZXQpOwotCi0JcmV0dXJuIHZhbDsKLX0KLQotI2RlZmluZSBwcl9yZWcodGV4dCwgLi4uKSBcCi0JcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIHRleHQsICMjIF9fVkFfQVJHU19fKQotCi0vKiBkdW1wIGN1cnJlbnQgY2lyIHJlZ2lzdGVyIGNvbnRlbnRzICovCi1zdGF0aWMgdm9pZCBjaXJfZHVtcF9yZWdzKHN0cnVjdCBudnRfZGV2ICpudnQpCi17Ci0JbnZ0X2VmbV9lbmFibGUobnZ0KTsKLQludnRfc2VsZWN0X2xvZ2ljYWxfZGV2KG52dCwgTE9HSUNBTF9ERVZfQ0lSKTsKLQotCXByX3JlZygiJXM6IER1bXAgQ0lSIGxvZ2ljYWwgZGV2aWNlIHJlZ2lzdGVyczpcbiIsIE5WVF9EUklWRVJfTkFNRSk7Ci0JcHJfcmVnKCIgKiBDUiBDSVIgQUNUSVZFIDogICAweCV4XG4iLAotCSAgICAgICBudnRfY3JfcmVhZChudnQsIENSX0xPR0lDQUxfREVWX0VOKSk7Ci0JcHJfcmVnKCIgKiBDUiBDSVIgQkFTRSBBRERSOiAweCV4XG4iLAotCSAgICAgICAobnZ0X2NyX3JlYWQobnZ0LCBDUl9DSVJfQkFTRV9BRERSX0hJKSA8PCA4KSB8Ci0JCW52dF9jcl9yZWFkKG52dCwgQ1JfQ0lSX0JBU0VfQUREUl9MTykpOwotCXByX3JlZygiICogQ1IgQ0lSIElSUSBOVU06ICAgMHgleFxuIiwKLQkgICAgICAgbnZ0X2NyX3JlYWQobnZ0LCBDUl9DSVJfSVJRX1JTUkMpKTsKLQotCW52dF9lZm1fZGlzYWJsZShudnQpOwotCi0JcHJfcmVnKCIlczogRHVtcCBDSVIgcmVnaXN0ZXJzOlxuIiwgTlZUX0RSSVZFUl9OQU1FKTsKLQlwcl9yZWcoIiAqIElSQ09OOiAgICAgMHgleFxuIiwgbnZ0X2Npcl9yZWdfcmVhZChudnQsIENJUl9JUkNPTikpOwotCXByX3JlZygiICogSVJTVFM6ICAgICAweCV4XG4iLCBudnRfY2lyX3JlZ19yZWFkKG52dCwgQ0lSX0lSU1RTKSk7Ci0JcHJfcmVnKCIgKiBJUkVOOiAgICAgIDB4JXhcbiIsIG52dF9jaXJfcmVnX3JlYWQobnZ0LCBDSVJfSVJFTikpOwotCXByX3JlZygiICogUlhGQ09OVDogICAweCV4XG4iLCBudnRfY2lyX3JlZ19yZWFkKG52dCwgQ0lSX1JYRkNPTlQpKTsKLQlwcl9yZWcoIiAqIENQOiAgICAgICAgMHgleFxuIiwgbnZ0X2Npcl9yZWdfcmVhZChudnQsIENJUl9DUCkpOwotCXByX3JlZygiICogQ0M6ICAgICAgICAweCV4XG4iLCBudnRfY2lyX3JlZ19yZWFkKG52dCwgQ0lSX0NDKSk7Ci0JcHJfcmVnKCIgKiBTTENIOiAgICAgIDB4JXhcbiIsIG52dF9jaXJfcmVnX3JlYWQobnZ0LCBDSVJfU0xDSCkpOwotCXByX3JlZygiICogU0xDTDogICAgICAweCV4XG4iLCBudnRfY2lyX3JlZ19yZWFkKG52dCwgQ0lSX1NMQ0wpKTsKLQlwcl9yZWcoIiAqIEZJRk9DT046ICAgMHgleFxuIiwgbnZ0X2Npcl9yZWdfcmVhZChudnQsIENJUl9GSUZPQ09OKSk7Ci0JcHJfcmVnKCIgKiBJUkZJRk9TVFM6IDB4JXhcbiIsIG52dF9jaXJfcmVnX3JlYWQobnZ0LCBDSVJfSVJGSUZPU1RTKSk7Ci0JcHJfcmVnKCIgKiBTUlhGSUZPOiAgIDB4JXhcbiIsIG52dF9jaXJfcmVnX3JlYWQobnZ0LCBDSVJfU1JYRklGTykpOwotCXByX3JlZygiICogVFhGQ09OVDogICAweCV4XG4iLCBudnRfY2lyX3JlZ19yZWFkKG52dCwgQ0lSX1RYRkNPTlQpKTsKLQlwcl9yZWcoIiAqIFNUWEZJRk86ICAgMHgleFxuIiwgbnZ0X2Npcl9yZWdfcmVhZChudnQsIENJUl9TVFhGSUZPKSk7Ci0JcHJfcmVnKCIgKiBGQ0NIOiAgICAgIDB4JXhcbiIsIG52dF9jaXJfcmVnX3JlYWQobnZ0LCBDSVJfRkNDSCkpOwotCXByX3JlZygiICogRkNDTDogICAgICAweCV4XG4iLCBudnRfY2lyX3JlZ19yZWFkKG52dCwgQ0lSX0ZDQ0wpKTsKLQlwcl9yZWcoIiAqIElSRlNNOiAgICAgMHgleFxuIiwgbnZ0X2Npcl9yZWdfcmVhZChudnQsIENJUl9JUkZTTSkpOwotfQotCi0vKiBkdW1wIGN1cnJlbnQgY2lyIHdha2UgcmVnaXN0ZXIgY29udGVudHMgKi8KLXN0YXRpYyB2b2lkIGNpcl93YWtlX2R1bXBfcmVncyhzdHJ1Y3QgbnZ0X2RldiAqbnZ0KQotewotCXU4IGksIGZpZm9fbGVuOwotCi0JbnZ0X2VmbV9lbmFibGUobnZ0KTsKLQludnRfc2VsZWN0X2xvZ2ljYWxfZGV2KG52dCwgTE9HSUNBTF9ERVZfQ0lSX1dBS0UpOwotCi0JcHJfcmVnKCIlczogRHVtcCBDSVIgV0FLRSBsb2dpY2FsIGRldmljZSByZWdpc3RlcnM6XG4iLAotCSAgICAgICBOVlRfRFJJVkVSX05BTUUpOwotCXByX3JlZygiICogQ1IgQ0lSIFdBS0UgQUNUSVZFIDogICAweCV4XG4iLAotCSAgICAgICBudnRfY3JfcmVhZChudnQsIENSX0xPR0lDQUxfREVWX0VOKSk7Ci0JcHJfcmVnKCIgKiBDUiBDSVIgV0FLRSBCQVNFIEFERFI6IDB4JXhcbiIsCi0JICAgICAgIChudnRfY3JfcmVhZChudnQsIENSX0NJUl9CQVNFX0FERFJfSEkpIDw8IDgpIHwKLQkJbnZ0X2NyX3JlYWQobnZ0LCBDUl9DSVJfQkFTRV9BRERSX0xPKSk7Ci0JcHJfcmVnKCIgKiBDUiBDSVIgV0FLRSBJUlEgTlVNOiAgIDB4JXhcbiIsCi0JICAgICAgIG52dF9jcl9yZWFkKG52dCwgQ1JfQ0lSX0lSUV9SU1JDKSk7Ci0KLQludnRfZWZtX2Rpc2FibGUobnZ0KTsKLQotCXByX3JlZygiJXM6IER1bXAgQ0lSIFdBS0UgcmVnaXN0ZXJzXG4iLCBOVlRfRFJJVkVSX05BTUUpOwotCXByX3JlZygiICogSVJDT046ICAgICAgICAgIDB4JXhcbiIsCi0JICAgICAgIG52dF9jaXJfd2FrZV9yZWdfcmVhZChudnQsIENJUl9XQUtFX0lSQ09OKSk7Ci0JcHJfcmVnKCIgKiBJUlNUUzogICAgICAgICAgMHgleFxuIiwKLQkgICAgICAgbnZ0X2Npcl93YWtlX3JlZ19yZWFkKG52dCwgQ0lSX1dBS0VfSVJTVFMpKTsKLQlwcl9yZWcoIiAqIElSRU46ICAgICAgICAgICAweCV4XG4iLAotCSAgICAgICBudnRfY2lyX3dha2VfcmVnX3JlYWQobnZ0LCBDSVJfV0FLRV9JUkVOKSk7Ci0JcHJfcmVnKCIgKiBGSUZPIENNUCBERUVQOiAgMHgleFxuIiwKLQkgICAgICAgbnZ0X2Npcl93YWtlX3JlZ19yZWFkKG52dCwgQ0lSX1dBS0VfRklGT19DTVBfREVFUCkpOwotCXByX3JlZygiICogRklGTyBDTVAgVE9MOiAgIDB4JXhcbiIsCi0JICAgICAgIG52dF9jaXJfd2FrZV9yZWdfcmVhZChudnQsIENJUl9XQUtFX0ZJRk9fQ01QX1RPTCkpOwotCXByX3JlZygiICogRklGTyBDT1VOVDogICAgIDB4JXhcbiIsCi0JICAgICAgIG52dF9jaXJfd2FrZV9yZWdfcmVhZChudnQsIENJUl9XQUtFX0ZJRk9fQ09VTlQpKTsKLQlwcl9yZWcoIiAqIFNMQ0g6ICAgICAgICAgICAweCV4XG4iLAotCSAgICAgICBudnRfY2lyX3dha2VfcmVnX3JlYWQobnZ0LCBDSVJfV0FLRV9TTENIKSk7Ci0JcHJfcmVnKCIgKiBTTENMOiAgICAgICAgICAgMHgleFxuIiwKLQkgICAgICAgbnZ0X2Npcl93YWtlX3JlZ19yZWFkKG52dCwgQ0lSX1dBS0VfU0xDTCkpOwotCXByX3JlZygiICogRklGT0NPTjogICAgICAgIDB4JXhcbiIsCi0JICAgICAgIG52dF9jaXJfd2FrZV9yZWdfcmVhZChudnQsIENJUl9XQUtFX0ZJRk9DT04pKTsKLQlwcl9yZWcoIiAqIFNSWEZTVFM6ICAgICAgICAweCV4XG4iLAotCSAgICAgICBudnRfY2lyX3dha2VfcmVnX3JlYWQobnZ0LCBDSVJfV0FLRV9TUlhGU1RTKSk7Ci0JcHJfcmVnKCIgKiBTQU1QTEUgUlggRklGTzogMHgleFxuIiwKLQkgICAgICAgbnZ0X2Npcl93YWtlX3JlZ19yZWFkKG52dCwgQ0lSX1dBS0VfU0FNUExFX1JYX0ZJRk8pKTsKLQlwcl9yZWcoIiAqIFdSIEZJRk8gREFUQTogICAweCV4XG4iLAotCSAgICAgICBudnRfY2lyX3dha2VfcmVnX3JlYWQobnZ0LCBDSVJfV0FLRV9XUl9GSUZPX0RBVEEpKTsKLQlwcl9yZWcoIiAqIFJEIEZJRk8gT05MWTogICAweCV4XG4iLAotCSAgICAgICBudnRfY2lyX3dha2VfcmVnX3JlYWQobnZ0LCBDSVJfV0FLRV9SRF9GSUZPX09OTFkpKTsKLQlwcl9yZWcoIiAqIFJEIEZJRk8gT05MWSBJRFg6IDB4JXhcbiIsCi0JICAgICAgIG52dF9jaXJfd2FrZV9yZWdfcmVhZChudnQsIENJUl9XQUtFX1JEX0ZJRk9fT05MWV9JRFgpKTsKLQlwcl9yZWcoIiAqIEZJRk8gSUdOT1JFOiAgICAweCV4XG4iLAotCSAgICAgICBudnRfY2lyX3dha2VfcmVnX3JlYWQobnZ0LCBDSVJfV0FLRV9GSUZPX0lHTk9SRSkpOwotCXByX3JlZygiICogSVJGU006ICAgICAgICAgIDB4JXhcbiIsCi0JICAgICAgIG52dF9jaXJfd2FrZV9yZWdfcmVhZChudnQsIENJUl9XQUtFX0lSRlNNKSk7Ci0KLQlmaWZvX2xlbiA9IG52dF9jaXJfd2FrZV9yZWdfcmVhZChudnQsIENJUl9XQUtFX0ZJRk9fQ09VTlQpOwotCXByX3JlZygiJXM6IER1bXAgQ0lSIFdBS0UgRklGTyAobGVuICVkKVxuIiwgTlZUX0RSSVZFUl9OQU1FLCBmaWZvX2xlbik7Ci0JcHJfcmVnKCIqIENvbnRlbnRzID0gIik7Ci0JZm9yIChpID0gMDsgaSA8IGZpZm9fbGVuOyBpKyspCi0JCXByaW50ayhLRVJOX0NPTlQgIiUwMnggIiwKLQkJICAgICAgIG52dF9jaXJfd2FrZV9yZWdfcmVhZChudnQsIENJUl9XQUtFX1JEX0ZJRk9fT05MWSkpOwotCXByaW50ayhLRVJOX0NPTlQgIlxuIik7Ci19Ci0KLS8qIGRldGVjdCBoYXJkd2FyZSBmZWF0dXJlcyAqLwotc3RhdGljIGludCBudnRfaHdfZGV0ZWN0KHN0cnVjdCBudnRfZGV2ICpudnQpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1OCBjaGlwX21ham9yLCBjaGlwX21pbm9yOwotCWludCByZXQgPSAwOwotCi0JbnZ0X2VmbV9lbmFibGUobnZ0KTsKLQotCS8qIENoZWNrIGlmIHdlJ3JlIHdpcmVkIGZvciB0aGUgYWx0ZXJuYXRlIEVGRVIgc2V0dXAgKi8KLQljaGlwX21ham9yID0gbnZ0X2NyX3JlYWQobnZ0LCBDUl9DSElQX0lEX0hJKTsKLQlpZiAoY2hpcF9tYWpvciA9PSAweGZmKSB7Ci0JCW52dC0+Y3JfZWZpciA9IENSX0VGSVIyOwotCQludnQtPmNyX2VmZHIgPSBDUl9FRkRSMjsKLQkJbnZ0X2VmbV9lbmFibGUobnZ0KTsKLQkJY2hpcF9tYWpvciA9IG52dF9jcl9yZWFkKG52dCwgQ1JfQ0hJUF9JRF9ISSk7Ci0JfQotCi0JY2hpcF9taW5vciA9IG52dF9jcl9yZWFkKG52dCwgQ1JfQ0hJUF9JRF9MTyk7Ci0JbnZ0X2RiZygiJXM6IGNoaXAgaWQ6IDB4JTAyeCAweCUwMngiLCBjaGlwX2lkLCBjaGlwX21ham9yLCBjaGlwX21pbm9yKTsKLQotCWlmIChjaGlwX21ham9yICE9IENISVBfSURfSElHSCAmJgotCSAgICAoY2hpcF9taW5vciAhPSBDSElQX0lEX0xPVyB8fCBjaGlwX21pbm9yICE9IENISVBfSURfTE9XMikpCi0JCXJldCA9IC1FTk9ERVY7Ci0KLQludnRfZWZtX2Rpc2FibGUobnZ0KTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZudnQtPm52dF9sb2NrLCBmbGFncyk7Ci0JbnZ0LT5jaGlwX21ham9yID0gY2hpcF9tYWpvcjsKLQludnQtPmNoaXBfbWlub3IgPSBjaGlwX21pbm9yOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm52dC0+bnZ0X2xvY2ssIGZsYWdzKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIG52dF9jaXJfbGRldl9pbml0KHN0cnVjdCBudnRfZGV2ICpudnQpCi17Ci0JdTggdmFsOwotCi0JLyogb3V0cHV0IHBpbiBzZWxlY3Rpb24gKFBpbjk1PUNJUlJYLCBQaW45Nj1DSVJUWDEsIFdCIGVuYWJsZWQgKi8KLQl2YWwgPSBudnRfY3JfcmVhZChudnQsIENSX09VVFBVVF9QSU5fU0VMKTsKLQl2YWwgJj0gT1VUUFVUX1BJTl9TRUxfTUFTSzsKLQl2YWwgfD0gKE9VVFBVVF9FTkFCTEVfQ0lSIHwgT1VUUFVUX0VOQUJMRV9DSVJXQik7Ci0JbnZ0X2NyX3dyaXRlKG52dCwgdmFsLCBDUl9PVVRQVVRfUElOX1NFTCk7Ci0KLQkvKiBTZWxlY3QgQ0lSIGxvZ2ljYWwgZGV2aWNlIGFuZCBlbmFibGUgKi8KLQludnRfc2VsZWN0X2xvZ2ljYWxfZGV2KG52dCwgTE9HSUNBTF9ERVZfQ0lSKTsKLQludnRfY3Jfd3JpdGUobnZ0LCBMT0dJQ0FMX0RFVl9FTkFCTEUsIENSX0xPR0lDQUxfREVWX0VOKTsKLQotCW52dF9jcl93cml0ZShudnQsIG52dC0+Y2lyX2FkZHIgPj4gOCwgQ1JfQ0lSX0JBU0VfQUREUl9ISSk7Ci0JbnZ0X2NyX3dyaXRlKG52dCwgbnZ0LT5jaXJfYWRkciAmIDB4ZmYsIENSX0NJUl9CQVNFX0FERFJfTE8pOwotCi0JbnZ0X2NyX3dyaXRlKG52dCwgbnZ0LT5jaXJfaXJxLCBDUl9DSVJfSVJRX1JTUkMpOwotCi0JbnZ0X2RiZygiQ0lSIGluaXRpYWxpemVkLCBiYXNlIGlvIHBvcnQgYWRkcmVzczogMHglbHgsIGlycTogJWQiLAotCQludnQtPmNpcl9hZGRyLCBudnQtPmNpcl9pcnEpOwotfQotCi1zdGF0aWMgdm9pZCBudnRfY2lyX3dha2VfbGRldl9pbml0KHN0cnVjdCBudnRfZGV2ICpudnQpCi17Ci0JLyogU2VsZWN0IEFDUEkgbG9naWNhbCBkZXZpY2UsIGVuYWJsZSBpdCBhbmQgQ0lSIFdha2UgKi8KLQludnRfc2VsZWN0X2xvZ2ljYWxfZGV2KG52dCwgTE9HSUNBTF9ERVZfQUNQSSk7Ci0JbnZ0X2NyX3dyaXRlKG52dCwgTE9HSUNBTF9ERVZfRU5BQkxFLCBDUl9MT0dJQ0FMX0RFVl9FTik7Ci0KLQkvKiBFbmFibGUgQ0lSIFdha2UgdmlhIFBTT1VUIyAoUGluNjApICovCi0JbnZ0X3NldF9yZWdfYml0KG52dCwgQ0lSX1dBS0VfRU5BQkxFX0JJVCwgQ1JfQUNQSV9DSVJfV0FLRSk7Ci0KLQkvKiBlbmFibGUgY2lyIGludGVycnVwdCBvZiBtb3VzZS9rZXlib2FyZCBJUlEgZXZlbnQgKi8KLQludnRfc2V0X3JlZ19iaXQobnZ0LCBDSVJfSU5UUl9NT1VTRV9JUlFfQklULCBDUl9BQ1BJX0lSUV9FVkVOVFMpOwotCi0JLyogZW5hYmxlIHBtZSBpbnRlcnJ1cHQgb2YgY2lyIHdha2V1cCBldmVudCAqLwotCW52dF9zZXRfcmVnX2JpdChudnQsIFBNRV9JTlRSX0NJUl9QQVNTX0JJVCwgQ1JfQUNQSV9JUlFfRVZFTlRTMik7Ci0KLQkvKiBTZWxlY3QgQ0lSIFdha2UgbG9naWNhbCBkZXZpY2UgYW5kIGVuYWJsZSAqLwotCW52dF9zZWxlY3RfbG9naWNhbF9kZXYobnZ0LCBMT0dJQ0FMX0RFVl9DSVJfV0FLRSk7Ci0JbnZ0X2NyX3dyaXRlKG52dCwgTE9HSUNBTF9ERVZfRU5BQkxFLCBDUl9MT0dJQ0FMX0RFVl9FTik7Ci0KLQludnRfY3Jfd3JpdGUobnZ0LCBudnQtPmNpcl93YWtlX2FkZHIgPj4gOCwgQ1JfQ0lSX0JBU0VfQUREUl9ISSk7Ci0JbnZ0X2NyX3dyaXRlKG52dCwgbnZ0LT5jaXJfd2FrZV9hZGRyICYgMHhmZiwgQ1JfQ0lSX0JBU0VfQUREUl9MTyk7Ci0KLQludnRfY3Jfd3JpdGUobnZ0LCBudnQtPmNpcl93YWtlX2lycSwgQ1JfQ0lSX0lSUV9SU1JDKTsKLQotCW52dF9kYmcoIkNJUiBXYWtlIGluaXRpYWxpemVkLCBiYXNlIGlvIHBvcnQgYWRkcmVzczogMHglbHgsIGlycTogJWQiLAotCQludnQtPmNpcl93YWtlX2FkZHIsIG52dC0+Y2lyX3dha2VfaXJxKTsKLX0KLQotLyogY2xlYXIgb3V0IHRoZSBoYXJkd2FyZSdzIGNpciByeCBmaWZvICovCi1zdGF0aWMgdm9pZCBudnRfY2xlYXJfY2lyX2ZpZm8oc3RydWN0IG52dF9kZXYgKm52dCkKLXsKLQl1OCB2YWw7Ci0KLQl2YWwgPSBudnRfY2lyX3JlZ19yZWFkKG52dCwgQ0lSX0ZJRk9DT04pOwotCW52dF9jaXJfcmVnX3dyaXRlKG52dCwgdmFsIHwgQ0lSX0ZJRk9DT05fUlhGSUZPQ0xSLCBDSVJfRklGT0NPTik7Ci19Ci0KLS8qIGNsZWFyIG91dCB0aGUgaGFyZHdhcmUncyBjaXIgd2FrZSByeCBmaWZvICovCi1zdGF0aWMgdm9pZCBudnRfY2xlYXJfY2lyX3dha2VfZmlmbyhzdHJ1Y3QgbnZ0X2RldiAqbnZ0KQotewotCXU4IHZhbDsKLQotCXZhbCA9IG52dF9jaXJfd2FrZV9yZWdfcmVhZChudnQsIENJUl9XQUtFX0ZJRk9DT04pOwotCW52dF9jaXJfd2FrZV9yZWdfd3JpdGUobnZ0LCB2YWwgfCBDSVJfV0FLRV9GSUZPQ09OX1JYRklGT0NMUiwKLQkJCSAgICAgICBDSVJfV0FLRV9GSUZPQ09OKTsKLX0KLQotLyogY2xlYXIgb3V0IHRoZSBoYXJkd2FyZSdzIGNpciB0eCBmaWZvICovCi1zdGF0aWMgdm9pZCBudnRfY2xlYXJfdHhfZmlmbyhzdHJ1Y3QgbnZ0X2RldiAqbnZ0KQotewotCXU4IHZhbDsKLQotCXZhbCA9IG52dF9jaXJfcmVnX3JlYWQobnZ0LCBDSVJfRklGT0NPTik7Ci0JbnZ0X2Npcl9yZWdfd3JpdGUobnZ0LCB2YWwgfCBDSVJfRklGT0NPTl9UWEZJRk9DTFIsIENJUl9GSUZPQ09OKTsKLX0KLQotLyogZW5hYmxlIFJYIFRyaWdnZXIgTGV2ZWwgUmVhY2ggYW5kIFBhY2tldCBFbmQgaW50ZXJydXB0cyAqLwotc3RhdGljIHZvaWQgbnZ0X3NldF9jaXJfaXJlbihzdHJ1Y3QgbnZ0X2RldiAqbnZ0KQotewotCXU4IGlyZW47Ci0KLQlpcmVuID0gQ0lSX0lSRU5fUlRSIHwgQ0lSX0lSRU5fUEU7Ci0JbnZ0X2Npcl9yZWdfd3JpdGUobnZ0LCBpcmVuLCBDSVJfSVJFTik7Ci19Ci0KLXN0YXRpYyB2b2lkIG52dF9jaXJfcmVnc19pbml0KHN0cnVjdCBudnRfZGV2ICpudnQpCi17Ci0JLyogc2V0IHNhbXBsZSBsaW1pdCBjb3VudCAoUEUgaW50ZXJydXB0IHJhaXNlZCB3aGVuIHJlYWNoZWQpICovCi0JbnZ0X2Npcl9yZWdfd3JpdGUobnZ0LCBDSVJfUlhfTElNSVRfQ09VTlQgPj4gOCwgQ0lSX1NMQ0gpOwotCW52dF9jaXJfcmVnX3dyaXRlKG52dCwgQ0lSX1JYX0xJTUlUX0NPVU5UICYgMHhmZiwgQ0lSX1NMQ0wpOwotCi0JLyogc2V0IGZpZm8gaXJxIHRyaWdnZXIgbGV2ZWxzICovCi0JbnZ0X2Npcl9yZWdfd3JpdGUobnZ0LCBDSVJfRklGT0NPTl9UWF9UUklHR0VSX0xFViB8Ci0JCQkgIENJUl9GSUZPQ09OX1JYX1RSSUdHRVJfTEVWLCBDSVJfRklGT0NPTik7Ci0KLQkvKgotCSAqIEVuYWJsZSBUWCBhbmQgUlgsIHNwZWNpZnkgY2FycmllciBvbiA9IGxvdywgb2ZmID0gaGlnaCwgYW5kIHNldAotCSAqIHNhbXBsZSBwZXJpb2QgKGN1cnJlbnRseSA1MHVzKQotCSAqLwotCW52dF9jaXJfcmVnX3dyaXRlKG52dCwKLQkJCSAgQ0lSX0lSQ09OX1RYRU4gfCBDSVJfSVJDT05fUlhFTiB8Ci0JCQkgIENJUl9JUkNPTl9SWElOViB8IENJUl9JUkNPTl9TQU1QTEVfUEVSSU9EX1NFTCwKLQkJCSAgQ0lSX0lSQ09OKTsKLQotCS8qIGNsZWFyIGhhcmR3YXJlIHJ4IGFuZCB0eCBmaWZvcyAqLwotCW52dF9jbGVhcl9jaXJfZmlmbyhudnQpOwotCW52dF9jbGVhcl90eF9maWZvKG52dCk7Ci0KLQkvKiBjbGVhciBhbnkgYW5kIGFsbCBzdHJheSBpbnRlcnJ1cHRzICovCi0JbnZ0X2Npcl9yZWdfd3JpdGUobnZ0LCAweGZmLCBDSVJfSVJTVFMpOwotCi0JLyogYW5kIGZpbmFsbHksIGVuYWJsZSBpbnRlcnJ1cHRzICovCi0JbnZ0X3NldF9jaXJfaXJlbihudnQpOwotfQotCi1zdGF0aWMgdm9pZCBudnRfY2lyX3dha2VfcmVnc19pbml0KHN0cnVjdCBudnRfZGV2ICpudnQpCi17Ci0JLyogc2V0IG51bWJlciBvZiBieXRlcyBuZWVkZWQgZm9yIHdha2Uga2V5IGNvbXBhcmlzb24gKGRlZmF1bHQgNjcpICovCi0JbnZ0X2Npcl93YWtlX3JlZ193cml0ZShudnQsIENJUl9XQUtFX0ZJRk9fTEVOLCBDSVJfV0FLRV9GSUZPX0NNUF9ERUVQKTsKLQotCS8qIHNldCB0b2xlcmFuY2UvdmFyaWFuY2UgYWxsb3dlZCBwZXIgYnl0ZSBkdXJpbmcgd2FrZSBjb21wYXJlICovCi0JbnZ0X2Npcl93YWtlX3JlZ193cml0ZShudnQsIENJUl9XQUtFX0NNUF9UT0xFUkFOQ0UsCi0JCQkgICAgICAgQ0lSX1dBS0VfRklGT19DTVBfVE9MKTsKLQotCS8qIHNldCBzYW1wbGUgbGltaXQgY291bnQgKFBFIGludGVycnVwdCByYWlzZWQgd2hlbiByZWFjaGVkKSAqLwotCW52dF9jaXJfd2FrZV9yZWdfd3JpdGUobnZ0LCBDSVJfUlhfTElNSVRfQ09VTlQgPj4gOCwgQ0lSX1dBS0VfU0xDSCk7Ci0JbnZ0X2Npcl93YWtlX3JlZ193cml0ZShudnQsIENJUl9SWF9MSU1JVF9DT1VOVCAmIDB4ZmYsIENJUl9XQUtFX1NMQ0wpOwotCi0JLyogc2V0IGNpciB3YWtlIGZpZm8gcnggdHJpZ2dlciBsZXZlbCAoY3VycmVudGx5IDY3KSAqLwotCW52dF9jaXJfd2FrZV9yZWdfd3JpdGUobnZ0LCBDSVJfV0FLRV9GSUZPQ09OX1JYX1RSSUdHRVJfTEVWLAotCQkJICAgICAgIENJUl9XQUtFX0ZJRk9DT04pOwotCi0JLyoKLQkgKiBFbmFibGUgVFggYW5kIFJYLCBzcGVjaWZpYyBjYXJyaWVyIG9uID0gbG93LCBvZmYgPSBoaWdoLCBhbmQgc2V0Ci0JICogc2FtcGxlIHBlcmlvZCAoY3VycmVudGx5IDUwdXMpCi0JICovCi0JbnZ0X2Npcl93YWtlX3JlZ193cml0ZShudnQsIENJUl9XQUtFX0lSQ09OX01PREUwIHwgQ0lSX1dBS0VfSVJDT05fUlhFTiB8Ci0JCQkgICAgICAgQ0lSX1dBS0VfSVJDT05fUiB8IENJUl9XQUtFX0lSQ09OX1JYSU5WIHwKLQkJCSAgICAgICBDSVJfV0FLRV9JUkNPTl9TQU1QTEVfUEVSSU9EX1NFTCwKLQkJCSAgICAgICBDSVJfV0FLRV9JUkNPTik7Ci0KLQkvKiBjbGVhciBjaXIgd2FrZSByeCBmaWZvICovCi0JbnZ0X2NsZWFyX2Npcl93YWtlX2ZpZm8obnZ0KTsKLQotCS8qIGNsZWFyIGFueSBhbmQgYWxsIHN0cmF5IGludGVycnVwdHMgKi8KLQludnRfY2lyX3dha2VfcmVnX3dyaXRlKG52dCwgMHhmZiwgQ0lSX1dBS0VfSVJTVFMpOwotfQotCi1zdGF0aWMgdm9pZCBudnRfZW5hYmxlX3dha2Uoc3RydWN0IG52dF9kZXYgKm52dCkKLXsKLQludnRfZWZtX2VuYWJsZShudnQpOwotCi0JbnZ0X3NlbGVjdF9sb2dpY2FsX2RldihudnQsIExPR0lDQUxfREVWX0FDUEkpOwotCW52dF9zZXRfcmVnX2JpdChudnQsIENJUl9XQUtFX0VOQUJMRV9CSVQsIENSX0FDUElfQ0lSX1dBS0UpOwotCW52dF9zZXRfcmVnX2JpdChudnQsIENJUl9JTlRSX01PVVNFX0lSUV9CSVQsIENSX0FDUElfSVJRX0VWRU5UUyk7Ci0JbnZ0X3NldF9yZWdfYml0KG52dCwgUE1FX0lOVFJfQ0lSX1BBU1NfQklULCBDUl9BQ1BJX0lSUV9FVkVOVFMyKTsKLQotCW52dF9zZWxlY3RfbG9naWNhbF9kZXYobnZ0LCBMT0dJQ0FMX0RFVl9DSVJfV0FLRSk7Ci0JbnZ0X2NyX3dyaXRlKG52dCwgTE9HSUNBTF9ERVZfRU5BQkxFLCBDUl9MT0dJQ0FMX0RFVl9FTik7Ci0KLQludnRfZWZtX2Rpc2FibGUobnZ0KTsKLQotCW52dF9jaXJfd2FrZV9yZWdfd3JpdGUobnZ0LCBDSVJfV0FLRV9JUkNPTl9NT0RFMCB8IENJUl9XQUtFX0lSQ09OX1JYRU4gfAotCQkJICAgICAgIENJUl9XQUtFX0lSQ09OX1IgfCBDSVJfV0FLRV9JUkNPTl9SWElOViB8Ci0JCQkgICAgICAgQ0lSX1dBS0VfSVJDT05fU0FNUExFX1BFUklPRF9TRUwsCi0JCQkgICAgICAgQ0lSX1dBS0VfSVJDT04pOwotCW52dF9jaXJfd2FrZV9yZWdfd3JpdGUobnZ0LCAweGZmLCBDSVJfV0FLRV9JUlNUUyk7Ci0JbnZ0X2Npcl93YWtlX3JlZ193cml0ZShudnQsIDAsIENJUl9XQUtFX0lSRU4pOwotfQotCi0vKiByeCBjYXJyaWVyIGRldGVjdCBvbmx5IHdvcmtzIGluIGxlYXJuaW5nIG1vZGUsIG11c3QgYmUgY2FsbGVkIHcvbnZ0X2xvY2sgKi8KLXN0YXRpYyB1MzIgbnZ0X3J4X2NhcnJpZXJfZGV0ZWN0KHN0cnVjdCBudnRfZGV2ICpudnQpCi17Ci0JdTMyIGNvdW50LCBjYXJyaWVyLCBkdXJhdGlvbiA9IDA7Ci0JaW50IGk7Ci0KLQljb3VudCA9IG52dF9jaXJfcmVnX3JlYWQobnZ0LCBDSVJfRkNDTCkgfAotCQludnRfY2lyX3JlZ19yZWFkKG52dCwgQ0lSX0ZDQ0gpIDw8IDg7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnZ0LT5wa3RzOyBpKyspIHsKLQkJaWYgKG52dC0+YnVmW2ldICYgQlVGX1BVTFNFX0JJVCkKLQkJCWR1cmF0aW9uICs9IG52dC0+YnVmW2ldICYgQlVGX0xFTl9NQVNLOwotCX0KLQotCWR1cmF0aW9uICo9IFNBTVBMRV9QRVJJT0Q7Ci0KLQlpZiAoIWNvdW50IHx8ICFkdXJhdGlvbikgewotCQludnRfcHIoS0VSTl9OT1RJQ0UsICJVbmFibGUgdG8gZGV0ZXJtaW5lIGNhcnJpZXIhIChjOiV1LCBkOiV1KSIsCi0JCSAgICAgICBjb3VudCwgZHVyYXRpb24pOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQljYXJyaWVyID0gKGNvdW50ICogMTAwMDAwMCkgLyBkdXJhdGlvbjsKLQotCWlmICgoY2FycmllciA+IE1BWF9DQVJSSUVSKSB8fCAoY2FycmllciA8IE1JTl9DQVJSSUVSKSkKLQkJbnZ0X2RiZygiV1RGPyBDYXJyaWVyIGZyZXF1ZW5jeSBvdXQgb2YgcmFuZ2UhIik7Ci0KLQludnRfZGJnKCJDYXJyaWVyIGZyZXF1ZW5jeTogJXUgKGNvdW50ICV1LCBkdXJhdGlvbiAldSkiLAotCQljYXJyaWVyLCBjb3VudCwgZHVyYXRpb24pOwotCi0JcmV0dXJuIGNhcnJpZXI7Ci19Ci0KLS8qCi0gKiBzZXQgY2FycmllciBmcmVxdWVuY3kKLSAqCi0gKiBzZXQgY2FycmllciBvbiAyIHJlZ2lzdGVyczogQ1AgJiBDQwotICogYWx3YXlzIHNldCBDUCBhcyAweDgxCi0gKiBzZXQgQ0MgYnkgU1BFQywgQ0MgPSAzTUh6L2NhcnJpZXIgLSAxCi0gKi8KLXN0YXRpYyBpbnQgbnZ0X3NldF90eF9jYXJyaWVyKHZvaWQgKmRhdGEsIHUzMiBjYXJyaWVyKQotewotCXN0cnVjdCBudnRfZGV2ICpudnQgPSBkYXRhOwotCXUxNiB2YWw7Ci0KLQludnRfY2lyX3JlZ193cml0ZShudnQsIDEsIENJUl9DUCk7Ci0JdmFsID0gMzAwMDAwMCAvIChjYXJyaWVyKSAtIDE7Ci0JbnZ0X2Npcl9yZWdfd3JpdGUobnZ0LCB2YWwgJiAweGZmLCBDSVJfQ0MpOwotCi0JbnZ0X2RiZygiY3A6IDB4JXggY2M6IDB4JXhcbiIsCi0JCW52dF9jaXJfcmVnX3JlYWQobnZ0LCBDSVJfQ1ApLCBudnRfY2lyX3JlZ19yZWFkKG52dCwgQ0lSX0NDKSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIG52dF90eF9pcgotICoKLSAqIDEpIGNsZWFuIFRYIGZpZm8gZmlyc3QgKGhhbmRsZWQgYnkgQVApCi0gKiAyKSBjb3B5IGRhdGEgZnJvbSB1c2VyIHNwYWNlCi0gKiAzKSBkaXNhYmxlIFJYIGludGVycnVwdHMsIGVuYWJsZSBUWCBpbnRlcnJ1cHRzOiBUVFIgJiBURlUKLSAqIDQpIHNlbmQgOSBwYWNrZXRzIHRvIFRYIEZJRk8gdG8gb3BlbiBUVFIKLSAqIGluIGludGVycnVwdF9oYW5kbGVyOgotICogNSkgc2VuZCBhbGwgZGF0YSBvdXQKLSAqIGdvIGJhY2sgdG8gd3JpdGUoKToKLSAqIDYpIGRpc2FibGUgVFggaW50ZXJydXB0cywgcmUtZW5hYmxlIFJYIGludGVydXB0cwotICoKLSAqIFRoZSBrZXkgcHJvYmxlbSBvZiB0aGlzIGZ1bmN0aW9uIGlzIHVzZXIgc3BhY2UgZGF0YSBtYXkgbGFyZ2VyIHRoYW4KLSAqIGRyaXZlcidzIGRhdGEgYnVmIGxlbmd0aC4gU28gbnZ0X3R4X2lyKCkgd2lsbCBvbmx5IGNvcHkgVFhfQlVGX0xFTiBkYXRhIHRvCi0gKiBidWYsIGFuZCBrZWVwIGN1cnJlbnQgY29waWVkIGRhdGEgYnVmIG51bSBpbiBjdXJfYnVmX251bS4gQnV0IGRyaXZlcidzIGJ1ZgotICogbnVtYmVyIG1heSBsYXJnZXIgdGhhbiBUWEZDT05UICgweGZmKS4gU28gaW4gaW50ZXJydXB0X2hhbmRsZXIsIGl0IGhhcyB0bwotICogc2V0IFRYRkNPTlQgYXMgMHhmZiwgdW50aWwgYnVmX2NvdW50IGxlc3MgdGhhbiAweGZmLgotICovCi1zdGF0aWMgaW50IG52dF90eF9pcih2b2lkICpwcml2LCBpbnQgKnR4YnVmLCB1MzIgbikKLXsKLQlzdHJ1Y3QgbnZ0X2RldiAqbnZ0ID0gcHJpdjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXNpemVfdCBjdXJfY291bnQ7Ci0JdW5zaWduZWQgaW50IGk7Ci0JdTggaXJlbjsKLQlpbnQgcmV0OwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJm52dC0+dHgubG9jaywgZmxhZ3MpOwotCi0JaWYgKG4gPj0gVFhfQlVGX0xFTikgewotCQludnQtPnR4LmJ1Zl9jb3VudCA9IGN1cl9jb3VudCA9IFRYX0JVRl9MRU47Ci0JCXJldCA9IFRYX0JVRl9MRU47Ci0JfSBlbHNlIHsKLQkJbnZ0LT50eC5idWZfY291bnQgPSBjdXJfY291bnQgPSBuOwotCQlyZXQgPSBuOwotCX0KLQotCW1lbWNweShudnQtPnR4LmJ1ZiwgdHhidWYsIG52dC0+dHguYnVmX2NvdW50KTsKLQotCW52dC0+dHguY3VyX2J1Zl9udW0gPSAwOwotCi0JLyogc2F2ZSBjdXJyZW50bHkgZW5hYmxlZCBpbnRlcnJ1cHRzICovCi0JaXJlbiA9IG52dF9jaXJfcmVnX3JlYWQobnZ0LCBDSVJfSVJFTik7Ci0KLQkvKiBub3cgZGlzYWJsZSBhbGwgaW50ZXJydXB0cywgc2F2ZSBURlUgJiBUVFIgKi8KLQludnRfY2lyX3JlZ193cml0ZShudnQsIENJUl9JUkVOX1RGVSB8IENJUl9JUkVOX1RUUiwgQ0lSX0lSRU4pOwotCi0JbnZ0LT50eC50eF9zdGF0ZSA9IFNUX1RYX1JFUExZOwotCi0JbnZ0X2Npcl9yZWdfd3JpdGUobnZ0LCBDSVJfRklGT0NPTl9UWF9UUklHR0VSX0xFVl84IHwKLQkJCSAgQ0lSX0ZJRk9DT05fUlhGSUZPQ0xSLCBDSVJfRklGT0NPTik7Ci0KLQkvKiB0cmlnZ2VyIFRUUiBpbnRlcnJ1cHQgYnkgd3JpdGluZyBvdXQgb25lcywgKHllcywgaXQncyB1Z2x5KSAqLwotCWZvciAoaSA9IDA7IGkgPCA5OyBpKyspCi0JCW52dF9jaXJfcmVnX3dyaXRlKG52dCwgMHgwMSwgQ0lSX1NUWEZJRk8pOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbnZ0LT50eC5sb2NrLCBmbGFncyk7Ci0KLQl3YWl0X2V2ZW50KG52dC0+dHgucXVldWUsIG52dC0+dHgudHhfc3RhdGUgPT0gU1RfVFhfUkVRVUVTVCk7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmbnZ0LT50eC5sb2NrLCBmbGFncyk7Ci0JbnZ0LT50eC50eF9zdGF0ZSA9IFNUX1RYX05PTkU7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbnZ0LT50eC5sb2NrLCBmbGFncyk7Ci0KLQkvKiByZXN0b3JlIGVuYWJsZWQgaW50ZXJydXB0cyB0byBwcmlvciBzdGF0ZSAqLwotCW52dF9jaXJfcmVnX3dyaXRlKG52dCwgaXJlbiwgQ0lSX0lSRU4pOwotCi0JcmV0dXJuIHJldDsKLX0KLQotLyogZHVtcCBjb250ZW50cyBvZiB0aGUgbGFzdCByeCBidWZmZXIgd2UgZ290IGZyb20gdGhlIGh3IHJ4IGZpZm8gKi8KLXN0YXRpYyB2b2lkIG52dF9kdW1wX3J4X2J1ZihzdHJ1Y3QgbnZ0X2RldiAqbnZ0KQotewotCWludCBpOwotCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzIChsZW4gJWQpOiAiLCBfX2Z1bmNfXywgbnZ0LT5wa3RzKTsKLQlmb3IgKGkgPSAwOyAoaSA8IG52dC0+cGt0cykgJiYgKGkgPCBSWF9CVUZfTEVOKTsgaSsrKQotCQlwcmludGsoS0VSTl9DT05UICIweCUwMnggIiwgbnZ0LT5idWZbaV0pOwotCXByaW50ayhLRVJOX0NPTlQgIlxuIik7Ci19Ci0KLS8qCi0gKiBQcm9jZXNzIHJhdyBkYXRhIGluIHJ4IGRyaXZlciBidWZmZXIsIHN0b3JlIGl0IGluIHJhdyBJUiBldmVudCBrZmlmbywKLSAqIHRyaWdnZXIgZGVjb2RlIHdoZW4gYXBwcm9wcmlhdGUuCi0gKgotICogV2UgZ2V0IElSIGRhdGEgc2FtcGxlcyBvbmUgYnl0ZSBhdCBhIHRpbWUuIElmIHRoZSBtc2IgaXMgc2V0LCBpdHMgYSBwdWxzZSwKLSAqIG90aGVyd2lzZSBpdHMgYSBzcGFjZS4gVGhlIGxvd2VyIDcgYml0cyBhcmUgdGhlIGNvdW50IG9mIFNBTVBMRV9QRVJJT0QKLSAqIChkZWZhdWx0IDUwdXMpIGludGVydmFscyBmb3IgdGhhdCBwdWxzZS9zcGFjZS4gQSBkaXNjcmV0ZSBzaWduYWwgaXMKLSAqIGZvbGxvd2VkIGJ5IGEgc2VyaWVzIG9mIDB4N2YgcGFja2V0cywgdGhlbiBlaXRoZXIgMHg3PHNvbWV0aGluZz4gb3IgMHg4MAotICogdG8gc2lnbmFsIG1vcmUgSVIgY29taW5nIChyZXBlYXRzKSBvciBlbmQgb2YgSVIsIHJlc3BlY3RpdmVseS4gV2Ugc3RvcmUKLSAqIHNhbXBsZSBkYXRhIGluIHRoZSByYXcgZXZlbnQga2ZpZm8gdW50aWwgd2Ugc2VlIDB4Nzxzb21ldGhpbmc+IChleGNlcHQgZikKLSAqIG9yIDB4ODAsIGF0IHdoaWNoIHRpbWUsIHdlIHRyaWdnZXIgYSBkZWNvZGUgb3BlcmF0aW9uLgotICovCi1zdGF0aWMgdm9pZCBudnRfcHJvY2Vzc19yeF9pcl9kYXRhKHN0cnVjdCBudnRfZGV2ICpudnQpCi17Ci0JREVGSU5FX0lSX1JBV19FVkVOVChyYXdpcik7Ci0JdW5zaWduZWQgaW50IGNvdW50OwotCXUzMiBjYXJyaWVyOwotCXU4IHNhbXBsZTsKLQlpbnQgaTsKLQotCW52dF9kYmdfdmVyYm9zZSgiJXMgZmlyaW5nIiwgX19mdW5jX18pOwotCi0JaWYgKGRlYnVnKQotCQludnRfZHVtcF9yeF9idWYobnZ0KTsKLQotCWlmIChudnQtPmNhcnJpZXJfZGV0ZWN0X2VuYWJsZWQpCi0JCWNhcnJpZXIgPSBudnRfcnhfY2Fycmllcl9kZXRlY3QobnZ0KTsKLQotCWNvdW50ID0gbnZ0LT5wa3RzOwotCW52dF9kYmdfdmVyYm9zZSgiUHJvY2Vzc2luZyBidWZmZXIgb2YgbGVuICVkIiwgY291bnQpOwotCi0JaW5pdF9pcl9yYXdfZXZlbnQoJnJhd2lyKTsKLQotCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0JCW52dC0+cGt0cy0tOwotCQlzYW1wbGUgPSBudnQtPmJ1ZltpXTsKLQotCQlyYXdpci5wdWxzZSA9ICgoc2FtcGxlICYgQlVGX1BVTFNFX0JJVCkgIT0gMCk7Ci0JCXJhd2lyLmR1cmF0aW9uID0gKHNhbXBsZSAmIEJVRl9MRU5fTUFTSykKLQkJCQkJKiBTQU1QTEVfUEVSSU9EICogMTAwMDsKLQotCQlpZiAoKHNhbXBsZSAmIEJVRl9MRU5fTUFTSykgPT0gQlVGX0xFTl9NQVNLKSB7Ci0JCQlpZiAobnZ0LT5yYXdpci5wdWxzZSA9PSByYXdpci5wdWxzZSkKLQkJCQludnQtPnJhd2lyLmR1cmF0aW9uICs9IHJhd2lyLmR1cmF0aW9uOwotCQkJZWxzZSB7Ci0JCQkJbnZ0LT5yYXdpci5kdXJhdGlvbiA9IHJhd2lyLmR1cmF0aW9uOwotCQkJCW52dC0+cmF3aXIucHVsc2UgPSByYXdpci5wdWxzZTsKLQkJCX0KLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJcmF3aXIuZHVyYXRpb24gKz0gbnZ0LT5yYXdpci5kdXJhdGlvbjsKLQotCQlpbml0X2lyX3Jhd19ldmVudCgmbnZ0LT5yYXdpcik7Ci0JCW52dC0+cmF3aXIuZHVyYXRpb24gPSAwOwotCQludnQtPnJhd2lyLnB1bHNlID0gcmF3aXIucHVsc2U7Ci0KLQkJaWYgKHNhbXBsZSA9PSBCVUZfUFVMU0VfQklUKQotCQkJcmF3aXIucHVsc2UgPSBmYWxzZTsKLQotCQlpZiAocmF3aXIuZHVyYXRpb24pIHsKLQkJCW52dF9kYmcoIlN0b3JpbmcgJXMgd2l0aCBkdXJhdGlvbiAlZCIsCi0JCQkJcmF3aXIucHVsc2UgPyAicHVsc2UiIDogInNwYWNlIiwKLQkJCQlyYXdpci5kdXJhdGlvbik7Ci0KLQkJCWlyX3Jhd19ldmVudF9zdG9yZShudnQtPnJkZXYsICZyYXdpcik7Ci0JCX0KLQotCQkvKgotCQkgKiBCVUZfUFVMU0VfQklUIGluZGljYXRlcyBlbmQgb2YgSVIgZGF0YSwgQlVGX1JFUEVBVF9CWVRFCi0JCSAqIGluZGljYXRlcyBlbmQgb2YgSVIgc2lnbmFsLCBidXQgbmV3IGRhdGEgaW5jb21pbmcuIEluIGJvdGgKLQkJICogY2FzZXMsIGl0IG1lYW5zIHdlJ3JlIHJlYWR5IHRvIGNhbGwgaXJfcmF3X2V2ZW50X2hhbmRsZQotCQkgKi8KLQkJaWYgKChzYW1wbGUgPT0gQlVGX1BVTFNFX0JJVCkgJiYgbnZ0LT5wa3RzKSB7Ci0JCQludnRfZGJnKCJDYWxsaW5nIGlyX3Jhd19ldmVudF9oYW5kbGUgKHNpZ25hbCBlbmQpXG4iKTsKLQkJCWlyX3Jhd19ldmVudF9oYW5kbGUobnZ0LT5yZGV2KTsKLQkJfQotCX0KLQotCW52dF9kYmcoIkNhbGxpbmcgaXJfcmF3X2V2ZW50X2hhbmRsZSAoYnVmZmVyIGVtcHR5KVxuIik7Ci0JaXJfcmF3X2V2ZW50X2hhbmRsZShudnQtPnJkZXYpOwotCi0JaWYgKG52dC0+cGt0cykgewotCQludnRfZGJnKCJPZGQsIHBrdHMgc2hvdWxkIGJlIDAgbm93Li4uIChpdHMgJXUpIiwgbnZ0LT5wa3RzKTsKLQkJbnZ0LT5wa3RzID0gMDsKLQl9Ci0KLQludnRfZGJnX3ZlcmJvc2UoIiVzIGRvbmUiLCBfX2Z1bmNfXyk7Ci19Ci0KLXN0YXRpYyB2b2lkIG52dF9oYW5kbGVfcnhfZmlmb19vdmVycnVuKHN0cnVjdCBudnRfZGV2ICpudnQpCi17Ci0JbnZ0X3ByKEtFUk5fV0FSTklORywgIlJYIEZJRk8gb3ZlcnJ1biBkZXRlY3RlZCwgZmx1c2hpbmcgZGF0YSEiKTsKLQotCW52dC0+cGt0cyA9IDA7Ci0JbnZ0X2NsZWFyX2Npcl9maWZvKG52dCk7Ci0JaXJfcmF3X2V2ZW50X3Jlc2V0KG52dC0+cmRldik7Ci19Ci0KLS8qIGNvcHkgZGF0YSBmcm9tIGhhcmR3YXJlIHJ4IGZpZm8gaW50byBkcml2ZXIgYnVmZmVyICovCi1zdGF0aWMgdm9pZCBudnRfZ2V0X3J4X2lyX2RhdGEoc3RydWN0IG52dF9kZXYgKm52dCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXU4IGZpZm9jb3VudCwgdmFsOwotCXVuc2lnbmVkIGludCBiX2lkeDsKLQlib29sIG92ZXJydW4gPSBmYWxzZTsKLQlpbnQgaTsKLQotCS8qIEdldCBjb3VudCBvZiBob3cgbWFueSBieXRlcyB0byByZWFkIGZyb20gUlggRklGTyAqLwotCWZpZm9jb3VudCA9IG52dF9jaXJfcmVnX3JlYWQobnZ0LCBDSVJfUlhGQ09OVCk7Ci0JLyogaWYgd2UgZ2V0IDB4ZmYsIHByb2JhYmx5IG1lYW5zIHRoZSBsb2dpY2FsIGRldiBpcyBkaXNhYmxlZCAqLwotCWlmIChmaWZvY291bnQgPT0gMHhmZikKLQkJcmV0dXJuOwotCS8qIHdhdGNoIG91dCBmb3IgYSBmaWZvIG92ZXJydW4gY29uZGl0aW9uICovCi0JZWxzZSBpZiAoZmlmb2NvdW50ID4gUlhfQlVGX0xFTikgewotCQlvdmVycnVuID0gdHJ1ZTsKLQkJZmlmb2NvdW50ID0gUlhfQlVGX0xFTjsKLQl9Ci0KLQludnRfZGJnKCJhdHRlbXB0aW5nIHRvIGZldGNoICV1IGJ5dGVzIGZyb20gaHcgcnggZmlmbyIsIGZpZm9jb3VudCk7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmbnZ0LT5udnRfbG9jaywgZmxhZ3MpOwotCi0JYl9pZHggPSBudnQtPnBrdHM7Ci0KLQkvKiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4sIGJ1dCBsZXRzIGNoZWNrIGFueXdheS4uLiAqLwotCWlmIChiX2lkeCArIGZpZm9jb3VudCA+IFJYX0JVRl9MRU4pIHsKLQkJbnZ0X3Byb2Nlc3NfcnhfaXJfZGF0YShudnQpOwotCQliX2lkeCA9IDA7Ci0JfQotCi0JLyogUmVhZCBmaWZvY291bnQgYnl0ZXMgZnJvbSBDSVIgU2FtcGxlIFJYIEZJRk8gcmVnaXN0ZXIgKi8KLQlmb3IgKGkgPSAwOyBpIDwgZmlmb2NvdW50OyBpKyspIHsKLQkJdmFsID0gbnZ0X2Npcl9yZWdfcmVhZChudnQsIENJUl9TUlhGSUZPKTsKLQkJbnZ0LT5idWZbYl9pZHggKyBpXSA9IHZhbDsKLQl9Ci0KLQludnQtPnBrdHMgKz0gZmlmb2NvdW50OwotCW52dF9kYmcoIiVzOiBwa3RzIG5vdyAlZCIsIF9fZnVuY19fLCBudnQtPnBrdHMpOwotCi0JbnZ0X3Byb2Nlc3NfcnhfaXJfZGF0YShudnQpOwotCi0JaWYgKG92ZXJydW4pCi0JCW52dF9oYW5kbGVfcnhfZmlmb19vdmVycnVuKG52dCk7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZudnQtPm52dF9sb2NrLCBmbGFncyk7Ci19Ci0KLXN0YXRpYyB2b2lkIG52dF9jaXJfbG9nX2lycXModTggc3RhdHVzLCB1OCBpcmVuKQotewotCW52dF9wcihLRVJOX0lORk8sICJJUlEgMHglMDJ4IChJUkVOIDB4JTAyeCkgOiVzJXMlcyVzJXMlcyVzJXMlcyIsCi0JCXN0YXR1cywgaXJlbiwKLQkJc3RhdHVzICYgQ0lSX0lSU1RTX1JEUgk/ICIgUkRSIgk6ICIiLAotCQlzdGF0dXMgJiBDSVJfSVJTVFNfUlRSCT8gIiBSVFIiCTogIiIsCi0JCXN0YXR1cyAmIENJUl9JUlNUU19QRQk/ICIgUEUiCQk6ICIiLAotCQlzdGF0dXMgJiBDSVJfSVJTVFNfUkZPCT8gIiBSRk8iCTogIiIsCi0JCXN0YXR1cyAmIENJUl9JUlNUU19URQk/ICIgVEUiCQk6ICIiLAotCQlzdGF0dXMgJiBDSVJfSVJTVFNfVFRSCT8gIiBUVFIiCTogIiIsCi0JCXN0YXR1cyAmIENJUl9JUlNUU19URlUJPyAiIFRGVSIJOiAiIiwKLQkJc3RhdHVzICYgQ0lSX0lSU1RTX0dICT8gIiBHSCIJCTogIiIsCi0JCXN0YXR1cyAmIH4oQ0lSX0lSU1RTX1JEUiB8IENJUl9JUlNUU19SVFIgfCBDSVJfSVJTVFNfUEUgfAotCQkJICAgQ0lSX0lSU1RTX1JGTyB8IENJUl9JUlNUU19URSB8IENJUl9JUlNUU19UVFIgfAotCQkJICAgQ0lSX0lSU1RTX1RGVSB8IENJUl9JUlNUU19HSCkgPyAiID8iIDogIiIpOwotfQotCi1zdGF0aWMgYm9vbCBudnRfY2lyX3R4X2luYWN0aXZlKHN0cnVjdCBudnRfZGV2ICpudnQpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlib29sIHR4X2luYWN0aXZlOwotCXU4IHR4X3N0YXRlOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJm52dC0+dHgubG9jaywgZmxhZ3MpOwotCXR4X3N0YXRlID0gbnZ0LT50eC50eF9zdGF0ZTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZudnQtPnR4LmxvY2ssIGZsYWdzKTsKLQotCXR4X2luYWN0aXZlID0gKHR4X3N0YXRlID09IFNUX1RYX05PTkUpOwotCi0JcmV0dXJuIHR4X2luYWN0aXZlOwotfQotCi0vKiBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lIGZvciBpbmNvbWluZyBhbmQgb3V0Z29pbmcgQ0lSIGRhdGEgKi8KLXN0YXRpYyBpcnFyZXR1cm5fdCBudnRfY2lyX2lzcihpbnQgaXJxLCB2b2lkICpkYXRhKQotewotCXN0cnVjdCBudnRfZGV2ICpudnQgPSBkYXRhOwotCXU4IHN0YXR1cywgaXJlbiwgY3VyX3N0YXRlOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQludnRfZGJnX3ZlcmJvc2UoIiVzIGZpcmluZyIsIF9fZnVuY19fKTsKLQotCW52dF9lZm1fZW5hYmxlKG52dCk7Ci0JbnZ0X3NlbGVjdF9sb2dpY2FsX2RldihudnQsIExPR0lDQUxfREVWX0NJUik7Ci0JbnZ0X2VmbV9kaXNhYmxlKG52dCk7Ci0KLQkvKgotCSAqIEdldCBJUiBTdGF0dXMgcmVnaXN0ZXIgY29udGVudHMuIFdyaXRlIDEgdG8gYWNrL2NsZWFyCi0JICoKLQkgKiBiaXQ6IHJlZyBuYW1lICAgICAgLSBkZXNjcmlwdGlvbgotCSAqICAgNzogQ0lSX0lSU1RTX1JEUiAtIFJYIERhdGEgUmVhZHkKLQkgKiAgIDY6IENJUl9JUlNUU19SVFIgLSBSWCBGSUZPIFRyaWdnZXIgTGV2ZWwgUmVhY2gKLQkgKiAgIDU6IENJUl9JUlNUU19QRSAgLSBQYWNrZXQgRW5kCi0JICogICA0OiBDSVJfSVJTVFNfUkZPIC0gUlggRklGTyBPdmVycnVuIChSRFIgd2lsbCBhbHNvIGJlIHNldCkKLQkgKiAgIDM6IENJUl9JUlNUU19URSAgLSBUWCBGSUZPIEVtcHR5Ci0JICogICAyOiBDSVJfSVJTVFNfVFRSIC0gVFggRklGTyBUcmlnZ2VyIExldmVsIFJlYWNoCi0JICogICAxOiBDSVJfSVJTVFNfVEZVIC0gVFggRklGTyBVbmRlcnJ1bgotCSAqICAgMDogQ0lSX0lSU1RTX0dIICAtIE1pbiBMZW5ndGggRGV0ZWN0ZWQKLQkgKi8KLQlzdGF0dXMgPSBudnRfY2lyX3JlZ19yZWFkKG52dCwgQ0lSX0lSU1RTKTsKLQlpZiAoIXN0YXR1cykgewotCQludnRfZGJnX3ZlcmJvc2UoIiVzIGV4aXRpbmcsIElSU1RTIDB4MCIsIF9fZnVuY19fKTsKLQkJbnZ0X2Npcl9yZWdfd3JpdGUobnZ0LCAweGZmLCBDSVJfSVJTVFMpOwotCQlyZXR1cm4gSVJRX1JFVFZBTChJUlFfTk9ORSk7Ci0JfQotCi0JLyogYWNrL2NsZWFyIGFsbCBpcnEgZmxhZ3Mgd2UndmUgZ290ICovCi0JbnZ0X2Npcl9yZWdfd3JpdGUobnZ0LCBzdGF0dXMsIENJUl9JUlNUUyk7Ci0JbnZ0X2Npcl9yZWdfd3JpdGUobnZ0LCAwLCBDSVJfSVJTVFMpOwotCi0JLyogSW50ZXJydXB0IG1heSBiZSBzaGFyZWQgd2l0aCBDSVIgV2FrZSwgYmFpbCBpZiBDSVIgbm90IGVuYWJsZWQgKi8KLQlpcmVuID0gbnZ0X2Npcl9yZWdfcmVhZChudnQsIENJUl9JUkVOKTsKLQlpZiAoIWlyZW4pIHsKLQkJbnZ0X2RiZ192ZXJib3NlKCIlcyBleGl0aW5nLCBDSVIgbm90IGVuYWJsZWQiLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiBJUlFfUkVUVkFMKElSUV9OT05FKTsKLQl9Ci0KLQlpZiAoZGVidWcpCi0JCW52dF9jaXJfbG9nX2lycXMoc3RhdHVzLCBpcmVuKTsKLQotCWlmIChzdGF0dXMgJiBDSVJfSVJTVFNfUlRSKSB7Ci0JCS8qIEZJWE1FOiBhZGQgY29kZSBmb3Igc3R1ZHkvbGVhcm4gbW9kZSAqLwotCQkvKiBXZSBvbmx5IGRvIHJ4IGlmIG5vdCB0eCdpbmcgKi8KLQkJaWYgKG52dF9jaXJfdHhfaW5hY3RpdmUobnZ0KSkKLQkJCW52dF9nZXRfcnhfaXJfZGF0YShudnQpOwotCX0KLQotCWlmIChzdGF0dXMgJiBDSVJfSVJTVFNfUEUpIHsKLQkJaWYgKG52dF9jaXJfdHhfaW5hY3RpdmUobnZ0KSkKLQkJCW52dF9nZXRfcnhfaXJfZGF0YShudnQpOwotCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZudnQtPm52dF9sb2NrLCBmbGFncyk7Ci0KLQkJY3VyX3N0YXRlID0gbnZ0LT5zdHVkeV9zdGF0ZTsKLQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZudnQtPm52dF9sb2NrLCBmbGFncyk7Ci0KLQkJaWYgKGN1cl9zdGF0ZSA9PSBTVF9TVFVEWV9OT05FKQotCQkJbnZ0X2NsZWFyX2Npcl9maWZvKG52dCk7Ci0JfQotCi0JaWYgKHN0YXR1cyAmIENJUl9JUlNUU19URSkKLQkJbnZ0X2NsZWFyX3R4X2ZpZm8obnZ0KTsKLQotCWlmIChzdGF0dXMgJiBDSVJfSVJTVFNfVFRSKSB7Ci0JCXVuc2lnbmVkIGludCBwb3MsIGNvdW50OwotCQl1OCB0bXA7Ci0KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJm52dC0+dHgubG9jaywgZmxhZ3MpOwotCi0JCXBvcyA9IG52dC0+dHguY3VyX2J1Zl9udW07Ci0JCWNvdW50ID0gbnZ0LT50eC5idWZfY291bnQ7Ci0KLQkJLyogV3JpdGUgZGF0YSBpbnRvIHRoZSBoYXJkd2FyZSB0eCBmaWZvIHdoaWxlIHBvcyA8IGNvdW50ICovCi0JCWlmIChwb3MgPCBjb3VudCkgewotCQkJbnZ0X2Npcl9yZWdfd3JpdGUobnZ0LCBudnQtPnR4LmJ1Zltwb3NdLCBDSVJfU1RYRklGTyk7Ci0JCQludnQtPnR4LmN1cl9idWZfbnVtKys7Ci0JCS8qIERpc2FibGUgVFggRklGTyBUcmlnZ2VyIExldmVsIFJlYWNoIChUVFIpIGludGVycnVwdCAqLwotCQl9IGVsc2UgewotCQkJdG1wID0gbnZ0X2Npcl9yZWdfcmVhZChudnQsIENJUl9JUkVOKTsKLQkJCW52dF9jaXJfcmVnX3dyaXRlKG52dCwgdG1wICYgfkNJUl9JUkVOX1RUUiwgQ0lSX0lSRU4pOwotCQl9Ci0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbnZ0LT50eC5sb2NrLCBmbGFncyk7Ci0KLQl9Ci0KLQlpZiAoc3RhdHVzICYgQ0lSX0lSU1RTX1RGVSkgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmbnZ0LT50eC5sb2NrLCBmbGFncyk7Ci0JCWlmIChudnQtPnR4LnR4X3N0YXRlID09IFNUX1RYX1JFUExZKSB7Ci0JCQludnQtPnR4LnR4X3N0YXRlID0gU1RfVFhfUkVRVUVTVDsKLQkJCXdha2VfdXAoJm52dC0+dHgucXVldWUpOwotCQl9Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm52dC0+dHgubG9jaywgZmxhZ3MpOwotCX0KLQotCW52dF9kYmdfdmVyYm9zZSgiJXMgZG9uZSIsIF9fZnVuY19fKTsKLQlyZXR1cm4gSVJRX1JFVFZBTChJUlFfSEFORExFRCk7Ci19Ci0KLS8qIEludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUgZm9yIENJUiBXYWtlICovCi1zdGF0aWMgaXJxcmV0dXJuX3QgbnZ0X2Npcl93YWtlX2lzcihpbnQgaXJxLCB2b2lkICpkYXRhKQotewotCXU4IHN0YXR1cywgaXJlbiwgdmFsOwotCXN0cnVjdCBudnRfZGV2ICpudnQgPSBkYXRhOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQludnRfZGJnX3dha2UoIiVzIGZpcmluZyIsIF9fZnVuY19fKTsKLQotCXN0YXR1cyA9IG52dF9jaXJfd2FrZV9yZWdfcmVhZChudnQsIENJUl9XQUtFX0lSU1RTKTsKLQlpZiAoIXN0YXR1cykKLQkJcmV0dXJuIElSUV9SRVRWQUwoSVJRX05PTkUpOwotCi0JaWYgKHN0YXR1cyAmIENJUl9XQUtFX0lSU1RTX0lSX1BFTkRJTkcpCi0JCW52dF9jbGVhcl9jaXJfd2FrZV9maWZvKG52dCk7Ci0KLQludnRfY2lyX3dha2VfcmVnX3dyaXRlKG52dCwgc3RhdHVzLCBDSVJfV0FLRV9JUlNUUyk7Ci0JbnZ0X2Npcl93YWtlX3JlZ193cml0ZShudnQsIDAsIENJUl9XQUtFX0lSU1RTKTsKLQotCS8qIEludGVycnVwdCBtYXkgYmUgc2hhcmVkIHdpdGggQ0lSLCBiYWlsIGlmIFdha2Ugbm90IGVuYWJsZWQgKi8KLQlpcmVuID0gbnZ0X2Npcl93YWtlX3JlZ19yZWFkKG52dCwgQ0lSX1dBS0VfSVJFTik7Ci0JaWYgKCFpcmVuKSB7Ci0JCW52dF9kYmdfd2FrZSgiJXMgZXhpdGluZywgd2FrZSBub3QgZW5hYmxlZCIsIF9fZnVuY19fKTsKLQkJcmV0dXJuIElSUV9SRVRWQUwoSVJRX0hBTkRMRUQpOwotCX0KLQotCWlmICgoc3RhdHVzICYgQ0lSX1dBS0VfSVJTVFNfUEUpICYmCi0JICAgIChudnQtPndha2Vfc3RhdGUgPT0gU1RfV0FLRV9TVEFSVCkpIHsKLQkJd2hpbGUgKG52dF9jaXJfd2FrZV9yZWdfcmVhZChudnQsIENJUl9XQUtFX1JEX0ZJRk9fT05MWV9JRFgpKSB7Ci0JCQl2YWwgPSBudnRfY2lyX3dha2VfcmVnX3JlYWQobnZ0LCBDSVJfV0FLRV9SRF9GSUZPX09OTFkpOwotCQkJbnZ0X2RiZygic2V0dGluZyB3YWtlIHVwIGtleTogMHgleCIsIHZhbCk7Ci0JCX0KLQotCQludnRfY2lyX3dha2VfcmVnX3dyaXRlKG52dCwgMCwgQ0lSX1dBS0VfSVJFTik7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZudnQtPm52dF9sb2NrLCBmbGFncyk7Ci0JCW52dC0+d2FrZV9zdGF0ZSA9IFNUX1dBS0VfRklOSVNIOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZudnQtPm52dF9sb2NrLCBmbGFncyk7Ci0JfQotCi0JbnZ0X2RiZ193YWtlKCIlcyBkb25lIiwgX19mdW5jX18pOwotCXJldHVybiBJUlFfUkVUVkFMKElSUV9IQU5ETEVEKTsKLX0KLQotc3RhdGljIHZvaWQgbnZ0X2VuYWJsZV9jaXIoc3RydWN0IG52dF9kZXYgKm52dCkKLXsKLQkvKiBzZXQgZnVuY3Rpb24gZW5hYmxlIGZsYWdzICovCi0JbnZ0X2Npcl9yZWdfd3JpdGUobnZ0LCBDSVJfSVJDT05fVFhFTiB8IENJUl9JUkNPTl9SWEVOIHwKLQkJCSAgQ0lSX0lSQ09OX1JYSU5WIHwgQ0lSX0lSQ09OX1NBTVBMRV9QRVJJT0RfU0VMLAotCQkJICBDSVJfSVJDT04pOwotCi0JbnZ0X2VmbV9lbmFibGUobnZ0KTsKLQotCS8qIGVuYWJsZSB0aGUgQ0lSIGxvZ2ljYWwgZGV2aWNlICovCi0JbnZ0X3NlbGVjdF9sb2dpY2FsX2RldihudnQsIExPR0lDQUxfREVWX0NJUik7Ci0JbnZ0X2NyX3dyaXRlKG52dCwgTE9HSUNBTF9ERVZfRU5BQkxFLCBDUl9MT0dJQ0FMX0RFVl9FTik7Ci0KLQludnRfZWZtX2Rpc2FibGUobnZ0KTsKLQotCS8qIGNsZWFyIGFsbCBwZW5kaW5nIGludGVycnVwdHMgKi8KLQludnRfY2lyX3JlZ193cml0ZShudnQsIDB4ZmYsIENJUl9JUlNUUyk7Ci0KLQkvKiBlbmFibGUgaW50ZXJydXB0cyAqLwotCW52dF9zZXRfY2lyX2lyZW4obnZ0KTsKLX0KLQotc3RhdGljIHZvaWQgbnZ0X2Rpc2FibGVfY2lyKHN0cnVjdCBudnRfZGV2ICpudnQpCi17Ci0JLyogZGlzYWJsZSBDSVIgaW50ZXJydXB0cyAqLwotCW52dF9jaXJfcmVnX3dyaXRlKG52dCwgMCwgQ0lSX0lSRU4pOwotCi0JLyogY2xlYXIgYW55IGFuZCBhbGwgcGVuZGluZyBpbnRlcnJ1cHRzICovCi0JbnZ0X2Npcl9yZWdfd3JpdGUobnZ0LCAweGZmLCBDSVJfSVJTVFMpOwotCi0JLyogY2xlYXIgYWxsIGZ1bmN0aW9uIGVuYWJsZSBmbGFncyAqLwotCW52dF9jaXJfcmVnX3dyaXRlKG52dCwgMCwgQ0lSX0lSQ09OKTsKLQotCS8qIGNsZWFyIGhhcmR3YXJlIHJ4IGFuZCB0eCBmaWZvcyAqLwotCW52dF9jbGVhcl9jaXJfZmlmbyhudnQpOwotCW52dF9jbGVhcl90eF9maWZvKG52dCk7Ci0KLQludnRfZWZtX2VuYWJsZShudnQpOwotCi0JLyogZGlzYWJsZSB0aGUgQ0lSIGxvZ2ljYWwgZGV2aWNlICovCi0JbnZ0X3NlbGVjdF9sb2dpY2FsX2RldihudnQsIExPR0lDQUxfREVWX0NJUik7Ci0JbnZ0X2NyX3dyaXRlKG52dCwgTE9HSUNBTF9ERVZfRElTQUJMRSwgQ1JfTE9HSUNBTF9ERVZfRU4pOwotCi0JbnZ0X2VmbV9kaXNhYmxlKG52dCk7Ci19Ci0KLXN0YXRpYyBpbnQgbnZ0X29wZW4odm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgbnZ0X2RldiAqbnZ0ID0gKHN0cnVjdCBudnRfZGV2ICopZGF0YTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJm52dC0+bnZ0X2xvY2ssIGZsYWdzKTsKLQludnQtPmluX3VzZSA9IHRydWU7Ci0JbnZ0X2VuYWJsZV9jaXIobnZ0KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZudnQtPm52dF9sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgbnZ0X2Nsb3NlKHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IG52dF9kZXYgKm52dCA9IChzdHJ1Y3QgbnZ0X2RldiAqKWRhdGE7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZudnQtPm52dF9sb2NrLCBmbGFncyk7Ci0JbnZ0LT5pbl91c2UgPSBmYWxzZTsKLQludnRfZGlzYWJsZV9jaXIobnZ0KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZudnQtPm52dF9sb2NrLCBmbGFncyk7Ci19Ci0KLS8qIEFsbG9jYXRlIG1lbW9yeSwgcHJvYmUgaGFyZHdhcmUsIGFuZCBpbml0aWFsaXplIGV2ZXJ5dGhpbmcgKi8KLXN0YXRpYyBpbnQgbnZ0X3Byb2JlKHN0cnVjdCBwbnBfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcG5wX2RldmljZV9pZCAqZGV2X2lkKQotewotCXN0cnVjdCBudnRfZGV2ICpudnQgPSBOVUxMOwotCXN0cnVjdCBpbnB1dF9kZXYgKnJkZXYgPSBOVUxMOwotCXN0cnVjdCBpcl9kZXZfcHJvcHMgKnByb3BzID0gTlVMTDsKLQlpbnQgcmV0ID0gLUVOT01FTTsKLQotCW52dCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBudnRfZGV2KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFudnQpCi0JCXJldHVybiByZXQ7Ci0KLQlwcm9wcyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpcl9kZXZfcHJvcHMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXByb3BzKQotCQlnb3RvIGZhaWx1cmU7Ci0KLQkvKiBpbnB1dCBkZXZpY2UgZm9yIElSIHJlbW90ZSAoYW5kIHR4KSAqLwotCXJkZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKLQlpZiAoIXJkZXYpCi0JCWdvdG8gZmFpbHVyZTsKLQotCXJldCA9IC1FTk9ERVY7Ci0JLyogdmFsaWRhdGUgcG5wIHJlc291cmNlcyAqLwotCWlmICghcG5wX3BvcnRfdmFsaWQocGRldiwgMCkgfHwKLQkgICAgcG5wX3BvcnRfbGVuKHBkZXYsIDApIDwgQ0lSX0lPUkVHX0xFTkdUSCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJJUiBQTlAgUG9ydCBub3QgdmFsaWQhXG4iKTsKLQkJZ290byBmYWlsdXJlOwotCX0KLQotCWlmICghcG5wX2lycV92YWxpZChwZGV2LCAwKSkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJQTlAgSVJRIG5vdCB2YWxpZCFcbiIpOwotCQlnb3RvIGZhaWx1cmU7Ci0JfQotCi0JaWYgKCFwbnBfcG9ydF92YWxpZChwZGV2LCAxKSB8fAotCSAgICBwbnBfcG9ydF9sZW4ocGRldiwgMSkgPCBDSVJfSU9SRUdfTEVOR1RIKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIldha2UgUE5QIFBvcnQgbm90IHZhbGlkIVxuIik7Ci0JCWdvdG8gZmFpbHVyZTsKLQl9Ci0KLQludnQtPmNpcl9hZGRyID0gcG5wX3BvcnRfc3RhcnQocGRldiwgMCk7Ci0JbnZ0LT5jaXJfaXJxICA9IHBucF9pcnEocGRldiwgMCk7Ci0KLQludnQtPmNpcl93YWtlX2FkZHIgPSBwbnBfcG9ydF9zdGFydChwZGV2LCAxKTsKLQkvKiBpcnEgaXMgYWx3YXlzIHNoYXJlZCBiZXR3ZWVuIGNpciBhbmQgY2lyIHdha2UgKi8KLQludnQtPmNpcl93YWtlX2lycSAgPSBudnQtPmNpcl9pcnE7Ci0KLQludnQtPmNyX2VmaXIgPSBDUl9FRklSOwotCW52dC0+Y3JfZWZkciA9IENSX0VGRFI7Ci0KLQlzcGluX2xvY2tfaW5pdCgmbnZ0LT5udnRfbG9jayk7Ci0Jc3Bpbl9sb2NrX2luaXQoJm52dC0+dHgubG9jayk7Ci0JaW5pdF9pcl9yYXdfZXZlbnQoJm52dC0+cmF3aXIpOwotCi0JcmV0ID0gLUVCVVNZOwotCS8qIG5vdyBjbGFpbSByZXNvdXJjZXMgKi8KLQlpZiAoIXJlcXVlc3RfcmVnaW9uKG52dC0+Y2lyX2FkZHIsCi0JCQkgICAgQ0lSX0lPUkVHX0xFTkdUSCwgTlZUX0RSSVZFUl9OQU1FKSkKLQkJZ290byBmYWlsdXJlOwotCi0JaWYgKHJlcXVlc3RfaXJxKG52dC0+Y2lyX2lycSwgbnZ0X2Npcl9pc3IsIElSUUZfU0hBUkVELAotCQkJTlZUX0RSSVZFUl9OQU1FLCAodm9pZCAqKW52dCkpCi0JCWdvdG8gZmFpbHVyZTsKLQotCWlmICghcmVxdWVzdF9yZWdpb24obnZ0LT5jaXJfd2FrZV9hZGRyLAotCQkJICAgIENJUl9JT1JFR19MRU5HVEgsIE5WVF9EUklWRVJfTkFNRSkpCi0JCWdvdG8gZmFpbHVyZTsKLQotCWlmIChyZXF1ZXN0X2lycShudnQtPmNpcl93YWtlX2lycSwgbnZ0X2Npcl93YWtlX2lzciwgSVJRRl9TSEFSRUQsCi0JCQlOVlRfRFJJVkVSX05BTUUsICh2b2lkICopbnZ0KSkKLQkJZ290byBmYWlsdXJlOwotCi0JcG5wX3NldF9kcnZkYXRhKHBkZXYsIG52dCk7Ci0JbnZ0LT5wZGV2ID0gcGRldjsKLQotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJm52dC0+dHgucXVldWUpOwotCi0JcmV0ID0gbnZ0X2h3X2RldGVjdChudnQpOwotCWlmIChyZXQpCi0JCWdvdG8gZmFpbHVyZTsKLQotCS8qIEluaXRpYWxpemUgQ0lSICYgQ0lSIFdha2UgTG9naWNhbCBEZXZpY2VzICovCi0JbnZ0X2VmbV9lbmFibGUobnZ0KTsKLQludnRfY2lyX2xkZXZfaW5pdChudnQpOwotCW52dF9jaXJfd2FrZV9sZGV2X2luaXQobnZ0KTsKLQludnRfZWZtX2Rpc2FibGUobnZ0KTsKLQotCS8qIEluaXRpYWxpemUgQ0lSICYgQ0lSIFdha2UgQ29uZmlnIFJlZ2lzdGVycyAqLwotCW52dF9jaXJfcmVnc19pbml0KG52dCk7Ci0JbnZ0X2Npcl93YWtlX3JlZ3NfaW5pdChudnQpOwotCi0JLyogU2V0IHVwIGlyLWNvcmUgcHJvcHMgKi8KLQlwcm9wcy0+cHJpdiA9IG52dDsKLQlwcm9wcy0+ZHJpdmVyX3R5cGUgPSBSQ19EUklWRVJfSVJfUkFXOwotCXByb3BzLT5hbGxvd2VkX3Byb3RvcyA9IElSX1RZUEVfQUxMOwotCXByb3BzLT5vcGVuID0gbnZ0X29wZW47Ci0JcHJvcHMtPmNsb3NlID0gbnZ0X2Nsb3NlOwotI2lmIDAKLQlwcm9wcy0+bWluX3RpbWVvdXQgPSBYWVo7Ci0JcHJvcHMtPm1heF90aW1lb3V0ID0gWFlaOwotCXByb3BzLT50aW1lb3V0ID0gWFlaOwotCS8qIHJ4IHJlc29sdXRpb24gaXMgaGFyZHdpcmVkIHRvIDUwdXMgYXRtLCAxLCAyNSwgMTAwIGFsc28gcG9zc2libGUgKi8KLQlwcm9wcy0+cnhfcmVzb2x1dGlvbiA9IFhZWjsKLQotCS8qIHR4IGJpdHMgKi8KLQlwcm9wcy0+dHhfcmVzb2x1dGlvbiA9IFhZWjsKLSNlbmRpZgotCXByb3BzLT50eF9pciA9IG52dF90eF9pcjsKLQlwcm9wcy0+c190eF9jYXJyaWVyID0gbnZ0X3NldF90eF9jYXJyaWVyOwotCi0JcmRldi0+bmFtZSA9ICJOdXZvdG9uIHc4MzZ4N2hnIEluZnJhcmVkIFJlbW90ZSBUcmFuc2NlaXZlciI7Ci0JcmRldi0+aWQuYnVzdHlwZSA9IEJVU19IT1NUOwotCXJkZXYtPmlkLnZlbmRvciA9IFBDSV9WRU5ET1JfSURfV0lOQk9ORDI7Ci0JcmRldi0+aWQucHJvZHVjdCA9IG52dC0+Y2hpcF9tYWpvcjsKLQlyZGV2LT5pZC52ZXJzaW9uID0gbnZ0LT5jaGlwX21pbm9yOwotCi0JbnZ0LT5wcm9wcyA9IHByb3BzOwotCW52dC0+cmRldiA9IHJkZXY7Ci0KLQlkZXZpY2Vfc2V0X3dha2V1cF9jYXBhYmxlKCZwZGV2LT5kZXYsIDEpOwotCWRldmljZV9zZXRfd2FrZXVwX2VuYWJsZSgmcGRldi0+ZGV2LCAxKTsKLQotCXJldCA9IGlyX2lucHV0X3JlZ2lzdGVyKHJkZXYsIFJDX01BUF9SQzZfTUNFLCBwcm9wcywgTlZUX0RSSVZFUl9OQU1FKTsKLQlpZiAocmV0KQotCQlnb3RvIGZhaWx1cmU7Ci0KLQludnRfcHIoS0VSTl9OT1RJQ0UsICJkcml2ZXIgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGxvYWRlZFxuIik7Ci0JaWYgKGRlYnVnKSB7Ci0JCWNpcl9kdW1wX3JlZ3MobnZ0KTsKLQkJY2lyX3dha2VfZHVtcF9yZWdzKG52dCk7Ci0JfQotCi0JcmV0dXJuIDA7Ci0KLWZhaWx1cmU6Ci0JaWYgKG52dC0+Y2lyX2lycSkKLQkJZnJlZV9pcnEobnZ0LT5jaXJfaXJxLCBudnQpOwotCWlmIChudnQtPmNpcl9hZGRyKQotCQlyZWxlYXNlX3JlZ2lvbihudnQtPmNpcl9hZGRyLCBDSVJfSU9SRUdfTEVOR1RIKTsKLQotCWlmIChudnQtPmNpcl93YWtlX2lycSkKLQkJZnJlZV9pcnEobnZ0LT5jaXJfd2FrZV9pcnEsIG52dCk7Ci0JaWYgKG52dC0+Y2lyX3dha2VfYWRkcikKLQkJcmVsZWFzZV9yZWdpb24obnZ0LT5jaXJfd2FrZV9hZGRyLCBDSVJfSU9SRUdfTEVOR1RIKTsKLQotCWlucHV0X2ZyZWVfZGV2aWNlKHJkZXYpOwotCWtmcmVlKHByb3BzKTsKLQlrZnJlZShudnQpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgX19kZXZleGl0IG52dF9yZW1vdmUoc3RydWN0IHBucF9kZXYgKnBkZXYpCi17Ci0Jc3RydWN0IG52dF9kZXYgKm52dCA9IHBucF9nZXRfZHJ2ZGF0YShwZGV2KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJm52dC0+bnZ0X2xvY2ssIGZsYWdzKTsKLQkvKiBkaXNhYmxlIENJUiAqLwotCW52dF9jaXJfcmVnX3dyaXRlKG52dCwgMCwgQ0lSX0lSRU4pOwotCW52dF9kaXNhYmxlX2NpcihudnQpOwotCS8qIGVuYWJsZSBDSVIgV2FrZSAoZm9yIElSIHBvd2VyLW9uKSAqLwotCW52dF9lbmFibGVfd2FrZShudnQpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm52dC0+bnZ0X2xvY2ssIGZsYWdzKTsKLQotCS8qIGZyZWUgcmVzb3VyY2VzICovCi0JZnJlZV9pcnEobnZ0LT5jaXJfaXJxLCBudnQpOwotCWZyZWVfaXJxKG52dC0+Y2lyX3dha2VfaXJxLCBudnQpOwotCXJlbGVhc2VfcmVnaW9uKG52dC0+Y2lyX2FkZHIsIENJUl9JT1JFR19MRU5HVEgpOwotCXJlbGVhc2VfcmVnaW9uKG52dC0+Y2lyX3dha2VfYWRkciwgQ0lSX0lPUkVHX0xFTkdUSCk7Ci0KLQlpcl9pbnB1dF91bnJlZ2lzdGVyKG52dC0+cmRldik7Ci0KLQlrZnJlZShudnQtPnByb3BzKTsKLQlrZnJlZShudnQpOwotfQotCi1zdGF0aWMgaW50IG52dF9zdXNwZW5kKHN0cnVjdCBwbnBfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCi17Ci0Jc3RydWN0IG52dF9kZXYgKm52dCA9IHBucF9nZXRfZHJ2ZGF0YShwZGV2KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JbnZ0X2RiZygiJXMgY2FsbGVkIiwgX19mdW5jX18pOwotCi0JLyogemVybyBvdXQgbWlzYyBzdGF0ZSB0cmFja2luZyAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZudnQtPm52dF9sb2NrLCBmbGFncyk7Ci0JbnZ0LT5zdHVkeV9zdGF0ZSA9IFNUX1NUVURZX05PTkU7Ci0JbnZ0LT53YWtlX3N0YXRlID0gU1RfV0FLRV9OT05FOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm52dC0+bnZ0X2xvY2ssIGZsYWdzKTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZudnQtPnR4LmxvY2ssIGZsYWdzKTsKLQludnQtPnR4LnR4X3N0YXRlID0gU1RfVFhfTk9ORTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZudnQtPnR4LmxvY2ssIGZsYWdzKTsKLQotCS8qIGRpc2FibGUgYWxsIENJUiBpbnRlcnJ1cHRzICovCi0JbnZ0X2Npcl9yZWdfd3JpdGUobnZ0LCAwLCBDSVJfSVJFTik7Ci0KLQludnRfZWZtX2VuYWJsZShudnQpOwotCi0JLyogZGlzYWJsZSBjaXIgbG9naWNhbCBkZXYgKi8KLQludnRfc2VsZWN0X2xvZ2ljYWxfZGV2KG52dCwgTE9HSUNBTF9ERVZfQ0lSKTsKLQludnRfY3Jfd3JpdGUobnZ0LCBMT0dJQ0FMX0RFVl9ESVNBQkxFLCBDUl9MT0dJQ0FMX0RFVl9FTik7Ci0KLQludnRfZWZtX2Rpc2FibGUobnZ0KTsKLQotCS8qIG1ha2Ugc3VyZSB3YWtlIGlzIGVuYWJsZWQgKi8KLQludnRfZW5hYmxlX3dha2UobnZ0KTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG52dF9yZXN1bWUoc3RydWN0IHBucF9kZXYgKnBkZXYpCi17Ci0JaW50IHJldCA9IDA7Ci0Jc3RydWN0IG52dF9kZXYgKm52dCA9IHBucF9nZXRfZHJ2ZGF0YShwZGV2KTsKLQotCW52dF9kYmcoIiVzIGNhbGxlZCIsIF9fZnVuY19fKTsKLQotCS8qIG9wZW4gaW50ZXJydXB0ICovCi0JbnZ0X3NldF9jaXJfaXJlbihudnQpOwotCi0JLyogRW5hYmxlIENJUiBsb2dpY2FsIGRldmljZSAqLwotCW52dF9lZm1fZW5hYmxlKG52dCk7Ci0JbnZ0X3NlbGVjdF9sb2dpY2FsX2RldihudnQsIExPR0lDQUxfREVWX0NJUik7Ci0JbnZ0X2NyX3dyaXRlKG52dCwgTE9HSUNBTF9ERVZfRU5BQkxFLCBDUl9MT0dJQ0FMX0RFVl9FTik7Ci0KLQludnRfZWZtX2Rpc2FibGUobnZ0KTsKLQotCW52dF9jaXJfcmVnc19pbml0KG52dCk7Ci0JbnZ0X2Npcl93YWtlX3JlZ3NfaW5pdChudnQpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgbnZ0X3NodXRkb3duKHN0cnVjdCBwbnBfZGV2ICpwZGV2KQotewotCXN0cnVjdCBudnRfZGV2ICpudnQgPSBwbnBfZ2V0X2RydmRhdGEocGRldik7Ci0JbnZ0X2VuYWJsZV93YWtlKG52dCk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcG5wX2RldmljZV9pZCBudnRfaWRzW10gPSB7Ci0JeyAiV0VDMDUzMCIsIDAgfSwgICAvKiBDSVIgKi8KLQl7ICJOVE4wNTMwIiwgMCB9LCAgIC8qIENJUiBmb3IgbmV3IGNoaXAncyBwbnAgaWQqLwotCXsgIiIsIDAgfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcG5wX2RyaXZlciBudnRfZHJpdmVyID0gewotCS5uYW1lCQk9IE5WVF9EUklWRVJfTkFNRSwKLQkuaWRfdGFibGUJPSBudnRfaWRzLAotCS5mbGFncwkJPSBQTlBfRFJJVkVSX1JFU19ET19OT1RfQ0hBTkdFLAotCS5wcm9iZQkJPSBudnRfcHJvYmUsCi0JLnJlbW92ZQkJPSBfX2RldmV4aXRfcChudnRfcmVtb3ZlKSwKLQkuc3VzcGVuZAk9IG52dF9zdXNwZW5kLAotCS5yZXN1bWUJCT0gbnZ0X3Jlc3VtZSwKLQkuc2h1dGRvd24JPSBudnRfc2h1dGRvd24sCi19OwotCi1pbnQgbnZ0X2luaXQodm9pZCkKLXsKLQlyZXR1cm4gcG5wX3JlZ2lzdGVyX2RyaXZlcigmbnZ0X2RyaXZlcik7Ci19Ci0KLXZvaWQgbnZ0X2V4aXQodm9pZCkKLXsKLQlwbnBfdW5yZWdpc3Rlcl9kcml2ZXIoJm52dF9kcml2ZXIpOwotfQotCi1tb2R1bGVfcGFyYW0oZGVidWcsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOwotTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkVuYWJsZSBkZWJ1Z2dpbmcgb3V0cHV0Iik7Ci0KLU1PRFVMRV9ERVZJQ0VfVEFCTEUocG5wLCBudnRfaWRzKTsKLU1PRFVMRV9ERVNDUklQVElPTigiTnV2b3RvbiBXODM2NjdIRy1BICYgVzgzNjc3SEctSSBDSVIgZHJpdmVyIik7Ci0KLU1PRFVMRV9BVVRIT1IoIkphcm9kIFdpbHNvbiA8amFyb2RAcmVkaGF0LmNvbT4iKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotbW9kdWxlX2luaXQobnZ0X2luaXQpOwotbW9kdWxlX2V4aXQobnZ0X2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9JUi9udXZvdG9uLWNpci5oIGIvZHJpdmVycy9tZWRpYS9JUi9udXZvdG9uLWNpci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MmRjNTMwLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvSVIvbnV2b3Rvbi1jaXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDQwOCArMCwwIEBACi0vKgotICogRHJpdmVyIGZvciBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24gdzgzNjY3aGcvdzgzNjc3aGctaSBDSVIKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgSmFyb2QgV2lsc29uIDxqYXJvZEByZWRoYXQuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA5IE51dm90b24gUFMgVGVhbQotICoKLSAqIFNwZWNpYWwgdGhhbmtzIHRvIE51dm90b24gZm9yIHByb3ZpZGluZyBoYXJkd2FyZSwgc3BlYyBzaGVldHMgYW5kCi0gKiBzYW1wbGUgY29kZSB1cG9uIHdoaWNoIHBvcnRpb25zIG9mIHRoaXMgZHJpdmVyIGFyZSBiYXNlZC4gSW5kaXJlY3QKLSAqIHRoYW5rcyBhbHNvIHRvIE1heGltIExldml0c2t5LCB3aG9zZSBlbmVfaXIgZHJpdmVyIHRoaXMgZHJpdmVyIGlzCi0gKiBtb2RlbGVkIGFmdGVyLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKLSAqIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKLSAqIFVTQQotICovCi0KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+Ci0KLS8qIHBsYXRmb3JtIGRyaXZlciBuYW1lIHRvIHJlZ2lzdGVyICovCi0jZGVmaW5lIE5WVF9EUklWRVJfTkFNRSAibnV2b3Rvbi1jaXIiCi0KLS8qIGRlYnVnZ2luZyBtb2R1bGUgcGFyYW1ldGVyICovCi1zdGF0aWMgaW50IGRlYnVnOwotCi0KLSNkZWZpbmUgbnZ0X3ByKGxldmVsLCB0ZXh0LCAuLi4pIFwKLQlwcmludGsobGV2ZWwgS0JVSUxEX01PRE5BTUUgIjogIiB0ZXh0LCAjIyBfX1ZBX0FSR1NfXykKLQotI2RlZmluZSBudnRfZGJnKHRleHQsIC4uLikgXAotCWlmIChkZWJ1ZykgXAotCQlwcmludGsoS0VSTl9ERUJVRyBcCi0JCQlLQlVJTERfTU9ETkFNRSAiOiAiIHRleHQgIlxuIiAsICMjIF9fVkFfQVJHU19fKQotCi0jZGVmaW5lIG52dF9kYmdfdmVyYm9zZSh0ZXh0LCAuLi4pIFwKLQlpZiAoZGVidWcgPiAxKSBcCi0JCXByaW50ayhLRVJOX0RFQlVHIFwKLQkJCUtCVUlMRF9NT0ROQU1FICI6ICIgdGV4dCAiXG4iICwgIyMgX19WQV9BUkdTX18pCi0KLSNkZWZpbmUgbnZ0X2RiZ193YWtlKHRleHQsIC4uLikgXAotCWlmIChkZWJ1ZyA+IDIpIFwKLQkJcHJpbnRrKEtFUk5fREVCVUcgXAotCQkJS0JVSUxEX01PRE5BTUUgIjogIiB0ZXh0ICJcbiIgLCAjIyBfX1ZBX0FSR1NfXykKLQotCi0vKgotICogT3JpZ2luYWwgbGlyYyBkcml2ZXIgc2FpZCBtaW4gdmFsdWUgb2YgNzYsIGFuZCByZWNvbW1lbmRlZCB2YWx1ZSBvZiAyNTYKLSAqIGZvciB0aGUgYnVmZmVyIGxlbmd0aCwgYnV0IHRoZW4gdXNlZCAyMDQ4LiBOZXZlciBtaW5kIHRoYXQgdGhlIHNpemUgb2YgdGhlCi0gKiBSWCBGSUZPIGlzIDMyIGJ5dGVzLi4uIFNvIEknbSB1c2luZyAzMiBmb3IgUlggYW5kIDI1NiBmb3IgVFggYXRtLCBidXQgSSdtCi0gKiBub3Qgc3VyZSBpZiBtYXliZSB0aGF0IFRYIHZhbHVlIGlzIG9mZiBieSBhIGZhY3RvciBvZiA4IChiaXRzIHZzLiBieXRlcyksCi0gKiBhbmQgSSBkb24ndCBoYXZlIFRYLWNhcGFibGUgaGFyZHdhcmUgdG8gdGVzdC9kZWJ1ZyBvbi4uLgotICovCi0jZGVmaW5lIFRYX0JVRl9MRU4gMjU2Ci0jZGVmaW5lIFJYX0JVRl9MRU4gMzIKLQotc3RydWN0IG52dF9kZXYgewotCXN0cnVjdCBwbnBfZGV2ICpwZGV2OwotCXN0cnVjdCBpbnB1dF9kZXYgKnJkZXY7Ci0Jc3RydWN0IGlyX2Rldl9wcm9wcyAqcHJvcHM7Ci0Jc3RydWN0IGlyX3Jhd19ldmVudCByYXdpcjsKLQotCXNwaW5sb2NrX3QgbnZ0X2xvY2s7Ci0JYm9vbCBpbl91c2U7Ci0KLQkvKiBmb3IgcnggKi8KLQl1OCBidWZbUlhfQlVGX0xFTl07Ci0JdW5zaWduZWQgaW50IHBrdHM7Ci0KLQlzdHJ1Y3QgewotCQlzcGlubG9ja190IGxvY2s7Ci0JCXU4IGJ1ZltUWF9CVUZfTEVOXTsKLQkJdW5zaWduZWQgaW50IGJ1Zl9jb3VudDsKLQkJdW5zaWduZWQgaW50IGN1cl9idWZfbnVtOwotCQl3YWl0X3F1ZXVlX2hlYWRfdCBxdWV1ZTsKLQkJdTggdHhfc3RhdGU7Ci0JfSB0eDsKLQotCS8qIEVGRVIgQ29uZmlnIHJlZ2lzdGVyIGluZGV4L2RhdGEgcGFpciAqLwotCXU4IGNyX2VmaXI7Ci0JdTggY3JfZWZkcjsKLQotCS8qIGhhcmR3YXJlIEkvTyBzZXR0aW5ncyAqLwotCXVuc2lnbmVkIGxvbmcgY2lyX2FkZHI7Ci0JdW5zaWduZWQgbG9uZyBjaXJfd2FrZV9hZGRyOwotCWludCBjaXJfaXJxOwotCWludCBjaXJfd2FrZV9pcnE7Ci0KLQkvKiBoYXJkd2FyZSBpZCAqLwotCXU4IGNoaXBfbWFqb3I7Ci0JdTggY2hpcF9taW5vcjsKLQotCS8qIGhhcmR3YXJlIGZlYXR1cmVzICovCi0JYm9vbCBod19sZWFybmluZ19jYXBhYmxlOwotCWJvb2wgaHdfdHhfY2FwYWJsZTsKLQotCS8qIHJ4IHNldHRpbmdzICovCi0JYm9vbCBsZWFybmluZ19lbmFibGVkOwotCWJvb2wgY2Fycmllcl9kZXRlY3RfZW5hYmxlZDsKLQotCS8qIHRyYWNrIGNpciB3YWtlIHN0YXRlICovCi0JdTggd2FrZV9zdGF0ZTsKLQkvKiBmb3Igc3R1ZHkgKi8KLQl1OCBzdHVkeV9zdGF0ZTsKLQkvKiBjYXJyaWVyIHBlcmlvZCA9IDEgLyBmcmVxdWVuY3kgKi8KLQl1MzIgY2FycmllcjsKLX07Ci0KLS8qIHN0dWR5IHN0YXRlcyAqLwotI2RlZmluZSBTVF9TVFVEWV9OT05FICAgICAgMHgwCi0jZGVmaW5lIFNUX1NUVURZX1NUQVJUICAgICAweDEKLSNkZWZpbmUgU1RfU1RVRFlfQ0FSUklFUiAgIDB4MgotI2RlZmluZSBTVF9TVFVEWV9BTExfUkVDViAgMHg0Ci0KLS8qIHdha2Ugc3RhdGVzICovCi0jZGVmaW5lIFNUX1dBS0VfTk9ORQkweDAKLSNkZWZpbmUgU1RfV0FLRV9TVEFSVAkweDEKLSNkZWZpbmUgU1RfV0FLRV9GSU5JU0gJMHgyCi0KLS8qIHJlY2VpdmUgc3RhdGVzICovCi0jZGVmaW5lIFNUX1JYX1dBSVRfN0YJCTB4MQotI2RlZmluZSBTVF9SWF9XQUlUX0hFQUQJCTB4MgotI2RlZmluZSBTVF9SWF9XQUlUX1NJTEVOVF9FTkQJMHg0Ci0KLS8qIHNlbmQgc3RhdGVzICovCi0jZGVmaW5lIFNUX1RYX05PTkUJMHgwCi0jZGVmaW5lIFNUX1RYX1JFUVVFU1QJMHgyCi0jZGVmaW5lIFNUX1RYX1JFUExZCTB4NAotCi0vKiBidWZmZXIgcGFja2V0IGNvbnN0YW50cyAqLwotI2RlZmluZSBCVUZfUFVMU0VfQklUCTB4ODAKLSNkZWZpbmUgQlVGX0xFTl9NQVNLCTB4N2YKLSNkZWZpbmUgQlVGX1JFUEVBVF9CWVRFCTB4NzAKLSNkZWZpbmUgQlVGX1JFUEVBVF9NQVNLCTB4ZjAKLQotLyogQ0lSIHNldHRpbmdzICovCi0KLS8qIHRvdGFsIGxlbmd0aCBvZiBDSVIgYW5kIENJUiBXQUtFICovCi0jZGVmaW5lIENJUl9JT1JFR19MRU5HVEgJMHgwZgotCi0vKiBSWCBsaW1pdCBsZW5ndGgsIDggaGlnaCBiaXRzIGZvciBTTENILCA4IGxvdyBiaXRzIGZvciBTTENMICgweDdkMCA9IDIwMDApICovCi0jZGVmaW5lIENJUl9SWF9MSU1JVF9DT1VOVAkweDdkMAotCi0vKiBDSVIgUmVncyAqLwotI2RlZmluZSBDSVJfSVJDT04JMHgwMAotI2RlZmluZSBDSVJfSVJTVFMJMHgwMQotI2RlZmluZSBDSVJfSVJFTgkweDAyCi0jZGVmaW5lIENJUl9SWEZDT05UCTB4MDMKLSNkZWZpbmUgQ0lSX0NQCQkweDA0Ci0jZGVmaW5lIENJUl9DQwkJMHgwNQotI2RlZmluZSBDSVJfU0xDSAkweDA2Ci0jZGVmaW5lIENJUl9TTENMCTB4MDcKLSNkZWZpbmUgQ0lSX0ZJRk9DT04JMHgwOAotI2RlZmluZSBDSVJfSVJGSUZPU1RTCTB4MDkKLSNkZWZpbmUgQ0lSX1NSWEZJRk8JMHgwYQotI2RlZmluZSBDSVJfVFhGQ09OVAkweDBiCi0jZGVmaW5lIENJUl9TVFhGSUZPCTB4MGMKLSNkZWZpbmUgQ0lSX0ZDQ0gJMHgwZAotI2RlZmluZSBDSVJfRkNDTAkweDBlCi0jZGVmaW5lIENJUl9JUkZTTQkweDBmCi0KLS8qIENJUiBJUkNPTiBzZXR0aW5ncyAqLwotI2RlZmluZSBDSVJfSVJDT05fUkVDVgkgMHg4MAotI2RlZmluZSBDSVJfSVJDT05fV0lSRU4JIDB4NDAKLSNkZWZpbmUgQ0lSX0lSQ09OX1RYRU4JIDB4MjAKLSNkZWZpbmUgQ0lSX0lSQ09OX1JYRU4JIDB4MTAKLSNkZWZpbmUgQ0lSX0lSQ09OX1dSWElOViAweDA4Ci0jZGVmaW5lIENJUl9JUkNPTl9SWElOVgkgMHgwNAotCi0jZGVmaW5lIENJUl9JUkNPTl9TQU1QTEVfUEVSSU9EX1NFTF8xCTB4MDAKLSNkZWZpbmUgQ0lSX0lSQ09OX1NBTVBMRV9QRVJJT0RfU0VMXzI1CTB4MDEKLSNkZWZpbmUgQ0lSX0lSQ09OX1NBTVBMRV9QRVJJT0RfU0VMXzUwCTB4MDIKLSNkZWZpbmUgQ0lSX0lSQ09OX1NBTVBMRV9QRVJJT0RfU0VMXzEwMAkweDAzCi0KLS8qIEZJWE1FOiBtYWtlIHRoaXMgYSBydW50aW1lIG9wdGlvbiAqLwotLyogc2VsZWN0IHNhbXBsZSBwZXJpb2QgYXMgNTB1cyAqLwotI2RlZmluZSBDSVJfSVJDT05fU0FNUExFX1BFUklPRF9TRUwJQ0lSX0lSQ09OX1NBTVBMRV9QRVJJT0RfU0VMXzUwCi0KLS8qIENJUiBJUlNUUyBzZXR0aW5ncyAqLwotI2RlZmluZSBDSVJfSVJTVFNfUkRSCTB4ODAKLSNkZWZpbmUgQ0lSX0lSU1RTX1JUUgkweDQwCi0jZGVmaW5lIENJUl9JUlNUU19QRQkweDIwCi0jZGVmaW5lIENJUl9JUlNUU19SRk8JMHgxMAotI2RlZmluZSBDSVJfSVJTVFNfVEUJMHgwOAotI2RlZmluZSBDSVJfSVJTVFNfVFRSCTB4MDQKLSNkZWZpbmUgQ0lSX0lSU1RTX1RGVQkweDAyCi0jZGVmaW5lIENJUl9JUlNUU19HSAkweDAxCi0KLS8qIENJUiBJUkVOIHNldHRpbmdzICovCi0jZGVmaW5lIENJUl9JUkVOX1JEUgkweDgwCi0jZGVmaW5lIENJUl9JUkVOX1JUUgkweDQwCi0jZGVmaW5lIENJUl9JUkVOX1BFCTB4MjAKLSNkZWZpbmUgQ0lSX0lSRU5fUkZPCTB4MTAKLSNkZWZpbmUgQ0lSX0lSRU5fVEUJMHgwOAotI2RlZmluZSBDSVJfSVJFTl9UVFIJMHgwNAotI2RlZmluZSBDSVJfSVJFTl9URlUJMHgwMgotI2RlZmluZSBDSVJfSVJFTl9HSAkweDAxCi0KLS8qIENJUiBGSUZPQ09OIHNldHRpbmdzICovCi0jZGVmaW5lIENJUl9GSUZPQ09OX1RYRklGT0NMUgkJMHg4MAotCi0jZGVmaW5lIENJUl9GSUZPQ09OX1RYX1RSSUdHRVJfTEVWXzMxCTB4MDAKLSNkZWZpbmUgQ0lSX0ZJRk9DT05fVFhfVFJJR0dFUl9MRVZfMjQJMHgxMAotI2RlZmluZSBDSVJfRklGT0NPTl9UWF9UUklHR0VSX0xFVl8xNgkweDIwCi0jZGVmaW5lIENJUl9GSUZPQ09OX1RYX1RSSUdHRVJfTEVWXzgJMHgzMAotCi0vKiBGSVhNRTogbWFrZSB0aGlzIGEgcnVudGltZSBvcHRpb24gKi8KLS8qIHNlbGVjdCBUWCB0cmlnZ2VyIGxldmVsIGFzIDE2ICovCi0jZGVmaW5lIENJUl9GSUZPQ09OX1RYX1RSSUdHRVJfTEVWCUNJUl9GSUZPQ09OX1RYX1RSSUdHRVJfTEVWXzE2Ci0KLSNkZWZpbmUgQ0lSX0ZJRk9DT05fUlhGSUZPQ0xSCQkweDA4Ci0KLSNkZWZpbmUgQ0lSX0ZJRk9DT05fUlhfVFJJR0dFUl9MRVZfMQkweDAwCi0jZGVmaW5lIENJUl9GSUZPQ09OX1JYX1RSSUdHRVJfTEVWXzgJMHgwMQotI2RlZmluZSBDSVJfRklGT0NPTl9SWF9UUklHR0VSX0xFVl8xNgkweDAyCi0jZGVmaW5lIENJUl9GSUZPQ09OX1JYX1RSSUdHRVJfTEVWXzI0CTB4MDMKLQotLyogRklYTUU6IG1ha2UgdGhpcyBhIHJ1bnRpbWUgb3B0aW9uICovCi0vKiBzZWxlY3QgUlggdHJpZ2dlciBsZXZlbCBhcyAyNCAqLwotI2RlZmluZSBDSVJfRklGT0NPTl9SWF9UUklHR0VSX0xFVglDSVJfRklGT0NPTl9SWF9UUklHR0VSX0xFVl8yNAotCi0vKiBDSVIgSVJGSUZPU1RTIHNldHRpbmdzICovCi0jZGVmaW5lIENJUl9JUkZJRk9TVFNfSVJfUEVORElORwkweDgwCi0jZGVmaW5lIENJUl9JUkZJRk9TVFNfUlhfR1MJCTB4NDAKLSNkZWZpbmUgQ0lSX0lSRklGT1NUU19SWF9GVEEJCTB4MjAKLSNkZWZpbmUgQ0lSX0lSRklGT1NUU19SWF9FTVBUWQkJMHgxMAotI2RlZmluZSBDSVJfSVJGSUZPU1RTX1JYX0ZVTEwJCTB4MDgKLSNkZWZpbmUgQ0lSX0lSRklGT1NUU19UWF9GVEEJCTB4MDQKLSNkZWZpbmUgQ0lSX0lSRklGT1NUU19UWF9FTVBUWQkJMHgwMgotI2RlZmluZSBDSVJfSVJGSUZPU1RTX1RYX0ZVTEwJCTB4MDEKLQotCi0vKiBDSVIgV0FLRSBVUCBSZWdzICovCi0jZGVmaW5lIENJUl9XQUtFX0lSQ09OCQkJMHgwMAotI2RlZmluZSBDSVJfV0FLRV9JUlNUUwkJCTB4MDEKLSNkZWZpbmUgQ0lSX1dBS0VfSVJFTgkJCTB4MDIKLSNkZWZpbmUgQ0lSX1dBS0VfRklGT19DTVBfREVFUAkJMHgwMwotI2RlZmluZSBDSVJfV0FLRV9GSUZPX0NNUF9UT0wJCTB4MDQKLSNkZWZpbmUgQ0lSX1dBS0VfRklGT19DT1VOVAkJMHgwNQotI2RlZmluZSBDSVJfV0FLRV9TTENICQkJMHgwNgotI2RlZmluZSBDSVJfV0FLRV9TTENMCQkJMHgwNwotI2RlZmluZSBDSVJfV0FLRV9GSUZPQ09OCQkweDA4Ci0jZGVmaW5lIENJUl9XQUtFX1NSWEZTVFMJCTB4MDkKLSNkZWZpbmUgQ0lSX1dBS0VfU0FNUExFX1JYX0ZJRk8JCTB4MGEKLSNkZWZpbmUgQ0lSX1dBS0VfV1JfRklGT19EQVRBCQkweDBiCi0jZGVmaW5lIENJUl9XQUtFX1JEX0ZJRk9fT05MWQkJMHgwYwotI2RlZmluZSBDSVJfV0FLRV9SRF9GSUZPX09OTFlfSURYCTB4MGQKLSNkZWZpbmUgQ0lSX1dBS0VfRklGT19JR05PUkUJCTB4MGUKLSNkZWZpbmUgQ0lSX1dBS0VfSVJGU00JCQkweDBmCi0KLS8qIENJUiBXQUtFIFVQIElSQ09OIHNldHRpbmdzICovCi0jZGVmaW5lIENJUl9XQUtFX0lSQ09OX0RFQ19SU1QJCTB4ODAKLSNkZWZpbmUgQ0lSX1dBS0VfSVJDT05fTU9ERTEJCTB4NDAKLSNkZWZpbmUgQ0lSX1dBS0VfSVJDT05fTU9ERTAJCTB4MjAKLSNkZWZpbmUgQ0lSX1dBS0VfSVJDT05fUlhFTgkJMHgxMAotI2RlZmluZSBDSVJfV0FLRV9JUkNPTl9SCQkweDA4Ci0jZGVmaW5lIENJUl9XQUtFX0lSQ09OX1JYSU5WCQkweDA0Ci0KLS8qIEZJWE1FL2phcm9kOiBtYWtlIHRoaXMgYSBydW50aW1lIG9wdGlvbiAqLwotLyogc2VsZWN0IGEgc2FtZSBzYW1wbGUgcGVyaW9kIGxpa2UgY2lyIHJlZ2lzdGVyICovCi0jZGVmaW5lIENJUl9XQUtFX0lSQ09OX1NBTVBMRV9QRVJJT0RfU0VMCUNJUl9JUkNPTl9TQU1QTEVfUEVSSU9EX1NFTF81MAotCi0vKiBDSVIgV0FLRSBJUlNUUyBCaXRzICovCi0jZGVmaW5lIENJUl9XQUtFX0lSU1RTX1JEUgkJMHg4MAotI2RlZmluZSBDSVJfV0FLRV9JUlNUU19SVFIJCTB4NDAKLSNkZWZpbmUgQ0lSX1dBS0VfSVJTVFNfUEUJCTB4MjAKLSNkZWZpbmUgQ0lSX1dBS0VfSVJTVFNfUkZPCQkweDEwCi0jZGVmaW5lIENJUl9XQUtFX0lSU1RTX0dICQkweDA4Ci0jZGVmaW5lIENJUl9XQUtFX0lSU1RTX0lSX1BFTkRJTkcJMHgwMQotCi0vKiBDSVIgV0FLRSBVUCBJUkVOIEJpdHMgKi8KLSNkZWZpbmUgQ0lSX1dBS0VfSVJFTl9SRFIJCTB4ODAKLSNkZWZpbmUgQ0lSX1dBS0VfSVJFTl9SVFIJCTB4NDAKLSNkZWZpbmUgQ0lSX1dBS0VfSVJFTl9QRQkJMHgyMAotI2RlZmluZSBDSVJfV0FLRV9JUkVOX1JGTwkJMHgxMAotI2RlZmluZSBDSVJfV0FLRV9JUkVOX1RFCQkweDA4Ci0jZGVmaW5lIENJUl9XQUtFX0lSRU5fVFRSCQkweDA0Ci0jZGVmaW5lIENJUl9XQUtFX0lSRU5fVEZVCQkweDAyCi0jZGVmaW5lIENJUl9XQUtFX0lSRU5fR0gJCTB4MDEKLQotLyogQ0lSIFdBS0UgRklGT0NPTiBzZXR0aW5ncyAqLwotI2RlZmluZSBDSVJfV0FLRV9GSUZPQ09OX1JYRklGT0NMUgkweDA4Ci0KLSNkZWZpbmUgQ0lSX1dBS0VfRklGT0NPTl9SWF9UUklHR0VSX0xFVl82NwkweDAwCi0jZGVmaW5lIENJUl9XQUtFX0ZJRk9DT05fUlhfVFJJR0dFUl9MRVZfNjYJMHgwMQotI2RlZmluZSBDSVJfV0FLRV9GSUZPQ09OX1JYX1RSSUdHRVJfTEVWXzY1CTB4MDIKLSNkZWZpbmUgQ0lSX1dBS0VfRklGT0NPTl9SWF9UUklHR0VSX0xFVl82NAkweDAzCi0KLS8qIEZJWE1FOiBtYWtlIHRoaXMgYSBydW50aW1lIG9wdGlvbiAqLwotLyogc2VsZWN0IFdBS0UgVVAgUlggdHJpZ2dlciBsZXZlbCBhcyA2NyAqLwotI2RlZmluZSBDSVJfV0FLRV9GSUZPQ09OX1JYX1RSSUdHRVJfTEVWCUNJUl9XQUtFX0ZJRk9DT05fUlhfVFJJR0dFUl9MRVZfNjcKLQotLyogQ0lSIFdBS0UgU1JYRlNUUyBzZXR0aW5ncyAqLwotI2RlZmluZSBDSVJfV0FLRV9JUkZJRk9TVFNfUlhfR1MJMHg4MAotI2RlZmluZSBDSVJfV0FLRV9JUkZJRk9TVFNfUlhfRlRBCTB4NDAKLSNkZWZpbmUgQ0lSX1dBS0VfSVJGSUZPU1RTX1JYX0VNUFRZCTB4MjAKLSNkZWZpbmUgQ0lSX1dBS0VfSVJGSUZPU1RTX1JYX0ZVTEwJMHgxMAotCi0vKiBDSVIgV2FrZSBGSUZPIGJ1ZmZlciBpcyA2NyBieXRlcyBsb25nICovCi0jZGVmaW5lIENJUl9XQUtFX0ZJRk9fTEVOCQk2NwotLyogQ0lSIFdha2UgYnl0ZSBjb21wYXJpc29uIHRvbGVyYW5jZSAqLwotI2RlZmluZSBDSVJfV0FLRV9DTVBfVE9MRVJBTkNFCQk1Ci0KLS8qCi0gKiBFeHRlbmRlZCBGdW5jdGlvbiBFbmFibGUgUmVnaXN0ZXJzOgotICogIEV4dGVuZGVkIEZ1bmN0aW9uIEluZGV4IFJlZ2lzdGVyCi0gKiAgRXh0ZW5kZWQgRnVuY3Rpb24gRGF0YSBSZWdpc3RlcgotICovCi0jZGVmaW5lIENSX0VGSVIJCQkweDJlCi0jZGVmaW5lIENSX0VGRFIJCQkweDJmCi0KLS8qIFBvc3NpYmxlIGFsdGVybmF0ZSBFRkVSIHZhbHVlcywgZGVwZW5kcyBvbiBob3cgdGhlIGNoaXAgaXMgd2lyZWQgKi8KLSNkZWZpbmUgQ1JfRUZJUjIJCTB4NGUKLSNkZWZpbmUgQ1JfRUZEUjIJCTB4NGYKLQotLyogRXh0ZW5kZWQgRnVuY3Rpb24gTW9kZSBlbmFibGUvZGlzYWJsZSBtYWdpYyB2YWx1ZXMgKi8KLSNkZWZpbmUgRUZFUl9FRk1fRU5BQkxFCQkweDg3Ci0jZGVmaW5lIEVGRVJfRUZNX0RJU0FCTEUJMHhhYQotCi0vKiBDaGlwIElEcyBmb3VuZCBpbiBDUl9DSElQX0lEX3tISSxMT30gKi8KLSNkZWZpbmUgQ0hJUF9JRF9ISUdICQkweGI0Ci0jZGVmaW5lIENISVBfSURfTE9XCQkweDcyCi0jZGVmaW5lIENISVBfSURfTE9XMgkJMHg3MwotCi0vKiBDb25maWcgcmVncyB3ZSBuZWVkIHRvIGNhcmUgYWJvdXQgKi8KLSNkZWZpbmUgQ1JfU09GVFdBUkVfUkVTRVQJMHgwMgotI2RlZmluZSBDUl9MT0dJQ0FMX0RFVl9TRUwJMHgwNwotI2RlZmluZSBDUl9DSElQX0lEX0hJCQkweDIwCi0jZGVmaW5lIENSX0NISVBfSURfTE8JCTB4MjEKLSNkZWZpbmUgQ1JfREVWX1BPV0VSX0RPV04JMHgyMiAvKiBiaXQgMiBpcyBDSVIgcG93ZXIsIGRlZmF1bHQgcG93ZXIgb24gKi8KLSNkZWZpbmUgQ1JfT1VUUFVUX1BJTl9TRUwJMHgyNwotI2RlZmluZSBDUl9MT0dJQ0FMX0RFVl9FTgkweDMwIC8qIHZhbGlkIGZvciBhbGwgbG9naWNhbCBkZXZpY2VzICovCi0vKiBuZXh0IHRocmVlIHJlZ3MgdmFsaWQgZm9yIGJvdGggdGhlIENJUiBhbmQgQ0lSX1dBS0UgbG9naWNhbCBkZXZpY2VzICovCi0jZGVmaW5lIENSX0NJUl9CQVNFX0FERFJfSEkJMHg2MAotI2RlZmluZSBDUl9DSVJfQkFTRV9BRERSX0xPCTB4NjEKLSNkZWZpbmUgQ1JfQ0lSX0lSUV9SU1JDCQkweDcwCi0vKiBuZXh0IHRocmVlIHJlZ3MgdmFsaWQgb25seSBmb3IgQUNQSSBsb2dpY2FsIGRldiAqLwotI2RlZmluZSBDUl9BQ1BJX0NJUl9XQUtFCTB4ZTAKLSNkZWZpbmUgQ1JfQUNQSV9JUlFfRVZFTlRTCTB4ZjYKLSNkZWZpbmUgQ1JfQUNQSV9JUlFfRVZFTlRTMgkweGY3Ci0KLS8qIExvZ2ljYWwgZGV2aWNlcyB0aGF0IHdlIG5lZWQgdG8gY2FyZSBhYm91dCAqLwotI2RlZmluZSBMT0dJQ0FMX0RFVl9MUFQJCTB4MDEKLSNkZWZpbmUgTE9HSUNBTF9ERVZfQ0lSCQkweDA2Ci0jZGVmaW5lIExPR0lDQUxfREVWX0FDUEkJMHgwYQotI2RlZmluZSBMT0dJQ0FMX0RFVl9DSVJfV0FLRQkweDBlCi0KLSNkZWZpbmUgTE9HSUNBTF9ERVZfRElTQUJMRQkweDAwCi0jZGVmaW5lIExPR0lDQUxfREVWX0VOQUJMRQkweDAxCi0KLSNkZWZpbmUgQ0lSX1dBS0VfRU5BQkxFX0JJVAkweDA4Ci0jZGVmaW5lIENJUl9JTlRSX01PVVNFX0lSUV9CSVQJMHg4MAotI2RlZmluZSBQTUVfSU5UUl9DSVJfUEFTU19CSVQJMHgwOAotCi0jZGVmaW5lIE9VVFBVVF9QSU5fU0VMX01BU0sJMHhiYwotI2RlZmluZSBPVVRQVVRfRU5BQkxFX0NJUgkweDAxIC8qIFBpbjk1PUNJUlJYLCBQaW45Nj1DSVJUWDEgKi8KLSNkZWZpbmUgT1VUUFVUX0VOQUJMRV9DSVJXQgkweDQwIC8qIGVuYWJsZSB3aWRlLWJhbmQgc2Vuc29yICovCi0KLS8qIE1DRSBDSVIgc2lnbmFsIGxlbmd0aCwgcmVsYXRlZCBvbiBzYW1wbGUgcGVyaW9kICovCi0KLS8qIE1DRSBDSVIgY29udHJvbGxlciBzaWduYWwgbGVuZ3RoOiBhYm91dCA0M21zCi0gKiA0M21zIC8gNTB1cyAoc2FtcGxlIHBlcmlvZCkgKiAwLjg1IChpbmFjY3VyYWN5KQotICovCi0jZGVmaW5lIENPTlRST0xMRVJfQlVGX0xFTl9NSU4gODMwCi0KLS8qIE1DRSBDSVIga2V5Ym9hcmQgc2lnbmFsIGxlbmd0aDogYWJvdXQgMjZtcwotICogMjZtcyAvIDUwdXMgKHNhbXBsZSBwZXJpb2QpICogMC44NSAoaW5hY2N1cmFjeSkKLSAqLwotI2RlZmluZSBLRVlCT0FSRF9CVUZfTEVOX01BWCA2NTAKLSNkZWZpbmUgS0VZQk9BUkRfQlVGX0xFTl9NSU4gNjEwCi0KLS8qIE1DRSBDSVIgbW91c2Ugc2lnbmFsIGxlbmd0aDogYWJvdXQgMjRtcwotICogMjRtcyAvIDUwdXMgKHNhbXBsZSBwZXJpb2QpICogMC44NSAoaW5hY2N1cmFjeSkKLSAqLwotI2RlZmluZSBNT1VTRV9CVUZfTEVOX01JTiA1NjUKLQotI2RlZmluZSBDSVJfU0FNUExFX1BFUklPRCA1MAotI2RlZmluZSBDSVJfU0FNUExFX0xPV19JTkFDQ1VSQUNZIDAuODUKLQotLyogTUFYIHNpbGVuY2UgdGltZSB0aGF0IGRyaXZlciB3aWxsIHNlbnQgdG8gbGlyYyAqLwotI2RlZmluZSBNQVhfU0lMRU5DRV9USU1FIDYwMDAwCi0KLSNpZiBDSVJfSVJDT05fU0FNUExFX1BFUklPRF9TRUwgPT0gQ0lSX0lSQ09OX1NBTVBMRV9QRVJJT0RfU0VMXzEwMAotI2RlZmluZSBTQU1QTEVfUEVSSU9EIDEwMAotCi0jZWxpZiBDSVJfSVJDT05fU0FNUExFX1BFUklPRF9TRUwgPT0gQ0lSX0lSQ09OX1NBTVBMRV9QRVJJT0RfU0VMXzUwCi0jZGVmaW5lIFNBTVBMRV9QRVJJT0QgNTAKLQotI2VsaWYgQ0lSX0lSQ09OX1NBTVBMRV9QRVJJT0RfU0VMID09IENJUl9JUkNPTl9TQU1QTEVfUEVSSU9EX1NFTF8yNQotI2RlZmluZSBTQU1QTEVfUEVSSU9EIDI1Ci0KLSNlbHNlCi0jZGVmaW5lIFNBTVBMRV9QRVJJT0QgMQotI2VuZGlmCi0KLS8qIGFzIFZJU1RBIE1DRSBkZWZpbml0aW9uLCB2YWxpZCBjYXJyaWVyIHZhbHVlICovCi0jZGVmaW5lIE1BWF9DQVJSSUVSIDYwMDAwCi0jZGVmaW5lIE1JTl9DQVJSSUVSIDMwMDAwCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL0lSL3JjLW1hcC5jIGIvZHJpdmVycy9tZWRpYS9JUi9yYy1tYXAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjg5MTQzZi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL0lSL3JjLW1hcC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTA3ICswLDAgQEAKLS8qIGlyLXJhdy1ldmVudC5jIC0gaGFuZGxlIElSIFB1bHNlL1NwYWNlIGV2ZW50Ci0gKgotICogQ29weXJpZ2h0IChDKSAyMDEwIGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqLwotCi0jaW5jbHVkZSA8bWVkaWEvaXItY29yZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLQotLyogVXNlZCB0byBoYW5kbGUgSVIgcmF3IGhhbmRsZXIgZXh0ZW5zaW9ucyAqLwotc3RhdGljIExJU1RfSEVBRChyY19tYXBfbGlzdCk7Ci1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKHJjX21hcF9sb2NrKTsKLQotc3RhdGljIHN0cnVjdCByY19rZXltYXAgKnNlZWtfcmNfbWFwKGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0Jc3RydWN0IHJjX2tleW1hcCAqbWFwID0gTlVMTDsKLQotCXNwaW5fbG9jaygmcmNfbWFwX2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkobWFwLCAmcmNfbWFwX2xpc3QsIGxpc3QpIHsKLQkJaWYgKCFzdHJjbXAobmFtZSwgbWFwLT5tYXAubmFtZSkpIHsKLQkJCXNwaW5fdW5sb2NrKCZyY19tYXBfbG9jayk7Ci0JCQlyZXR1cm4gbWFwOwotCQl9Ci0JfQotCXNwaW5fdW5sb2NrKCZyY19tYXBfbG9jayk7Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlICpnZXRfcmNfbWFwKGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0KLQlzdHJ1Y3QgcmNfa2V5bWFwICptYXA7Ci0KLQltYXAgPSBzZWVrX3JjX21hcChuYW1lKTsKLSNpZmRlZiBNT0RVTEUKLQlpZiAoIW1hcCkgewotCQlpbnQgcmMgPSByZXF1ZXN0X21vZHVsZShuYW1lKTsKLQkJaWYgKHJjIDwgMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZG4ndCBsb2FkIElSIGtleW1hcCAlc1xuIiwgbmFtZSk7Ci0JCQlyZXR1cm4gTlVMTDsKLQkJfQotCQltc2xlZXAoMjApOwkvKiBHaXZlIHNvbWUgdGltZSBmb3IgSVIgdG8gcmVnaXN0ZXIgKi8KLQotCQltYXAgPSBzZWVrX3JjX21hcChuYW1lKTsKLQl9Ci0jZW5kaWYKLQlpZiAoIW1hcCkgewotCQlwcmludGsoS0VSTl9FUlIgIklSIGtleW1hcCAlcyBub3QgZm91bmRcbiIsIG5hbWUpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlwcmludGsoS0VSTl9JTkZPICJSZWdpc3RlcmVkIElSIGtleW1hcCAlc1xuIiwgbWFwLT5tYXAubmFtZSk7Ci0KLQlyZXR1cm4gJm1hcC0+bWFwOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoZ2V0X3JjX21hcCk7Ci0KLWludCBpcl9yZWdpc3Rlcl9tYXAoc3RydWN0IHJjX2tleW1hcCAqbWFwKQotewotCXNwaW5fbG9jaygmcmNfbWFwX2xvY2spOwotCWxpc3RfYWRkX3RhaWwoJm1hcC0+bGlzdCwgJnJjX21hcF9saXN0KTsKLQlzcGluX3VubG9jaygmcmNfbWFwX2xvY2spOwotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoaXJfcmVnaXN0ZXJfbWFwKTsKLQotdm9pZCBpcl91bnJlZ2lzdGVyX21hcChzdHJ1Y3QgcmNfa2V5bWFwICptYXApCi17Ci0Jc3Bpbl9sb2NrKCZyY19tYXBfbG9jayk7Ci0JbGlzdF9kZWwoJm1hcC0+bGlzdCk7Ci0Jc3Bpbl91bmxvY2soJnJjX21hcF9sb2NrKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGlyX3VucmVnaXN0ZXJfbWFwKTsKLQotCi1zdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGVtcHR5W10gPSB7Ci0JeyAweDJhLCBLRVlfQ09GRkVFIH0sCi19OwotCi1zdGF0aWMgc3RydWN0IHJjX2tleW1hcCBlbXB0eV9tYXAgPSB7Ci0JLm1hcCA9IHsKLQkJLnNjYW4gICAgPSBlbXB0eSwKLQkJLnNpemUgICAgPSBBUlJBWV9TSVpFKGVtcHR5KSwKLQkJLmlyX3R5cGUgPSBJUl9UWVBFX1VOS05PV04sCS8qIExlZ2FjeSBJUiB0eXBlICovCi0JCS5uYW1lICAgID0gUkNfTUFQX0VNUFRZLAotCX0KLX07Ci0KLWludCBpcl9yY21hcF9pbml0KHZvaWQpCi17Ci0JcmV0dXJuIGlyX3JlZ2lzdGVyX21hcCgmZW1wdHlfbWFwKTsKLX0KLQotdm9pZCBpcl9yY21hcF9jbGVhbnVwKHZvaWQpCi17Ci0JaXJfdW5yZWdpc3Rlcl9tYXAoJmVtcHR5X21hcCk7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL0lSL3N0cmVhbXphcC5jIGIvZHJpdmVycy9tZWRpYS9JUi9zdHJlYW16YXAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2EyMGFlZi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL0lSL3N0cmVhbXphcC5jCisrKyAvZGV2L251bGwKQEAgLTEsNTcyICswLDAgQEAKLS8qCi0gKiBTdHJlYW16YXAgUmVtb3RlIENvbnRyb2wgZHJpdmVyCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA1IENocmlzdG9waCBCYXJ0ZWxtdXMgPGxpcmNAYmFydGVsbXVzLmRlPgotICogQ29weXJpZ2h0IChjKSAyMDEwIEphcm9kIFdpbHNvbiA8amFyb2RAd2lsc29uZXQuY29tPgotICoKLSAqIFRoaXMgZHJpdmVyIHdhcyBiYXNlZCBvbiB0aGUgd29yayBvZiBHcmVnIFdpY2toYW0gYW5kIEFkcmlhbgotICogRGV3aHVyc3QuIEl0IHdhcyBzdWJzdGFudGlhbGx5IHJld3JpdHRlbiB0byBzdXBwb3J0IGNvcnJlY3Qgc2lnbmFsCi0gKiBnYXBzIGFuZCBub3cgbWFpbnRhaW5zIGEgZGVsYXkgYnVmZmVyLCB3aGljaCBpcyB1c2VkIHRvIHByZXNlbnQKLSAqIGNvbnNpc3RlbnQgdGltaW5nIGJlaGF2aW91ciB0byB1c2VyIHNwYWNlIGFwcGxpY2F0aW9ucy4gV2l0aG91dCB0aGUKLSAqIGRlbGF5IGJ1ZmZlciBhbiB1Z2x5IGhhY2sgd291bGQgYmUgcmVxdWlyZWQgaW4gbGlyY2QsIHdoaWNoIGNhbgotICogY2F1c2Ugc2x1Z2dpc2ggc2lnbmFsIGRlY29kaW5nIGluIGNlcnRhaW4gc2l0dWF0aW9ucy4KLSAqCi0gKiBQb3J0ZWQgdG8gaW4ta2VybmVsIGlyLWNvcmUgaW50ZXJmYWNlIGJ5IEphcm9kIFdpbHNvbgotICoKLSAqIFRoaXMgZHJpdmVyIGlzIGJhc2VkIG9uIHRoZSBVU0Igc2tlbGV0b24gZHJpdmVyIHBhY2thZ2VkIHdpdGggdGhlCi0gKiBrZXJuZWw7IGNvcHlyaWdodCAoQykgMjAwMS0yMDAzIEdyZWcgS3JvYWgtSGFydG1hbiAoZ3JlZ0Brcm9haC5jb20pCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgotI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgotI2luY2x1ZGUgPGxpbnV4L3VzYi9pbnB1dC5oPgotI2luY2x1ZGUgPG1lZGlhL2lyLWNvcmUuaD4KLQotI2RlZmluZSBEUklWRVJfVkVSU0lPTgkiMS42MSIKLSNkZWZpbmUgRFJJVkVSX05BTUUJInN0cmVhbXphcCIKLSNkZWZpbmUgRFJJVkVSX0RFU0MJIlN0cmVhbXphcCBSZW1vdGUgQ29udHJvbCBkcml2ZXIiCi0KLSNpZmRlZiBDT05GSUdfVVNCX0RFQlVHCi1zdGF0aWMgaW50IGRlYnVnID0gMTsKLSNlbHNlCi1zdGF0aWMgaW50IGRlYnVnOwotI2VuZGlmCi0KLSNkZWZpbmUgVVNCX1NUUkVBTVpBUF9WRU5ET1JfSUQJCTB4MGU5YwotI2RlZmluZSBVU0JfU1RSRUFNWkFQX1BST0RVQ1RfSUQJMHgwMDAwCi0KLS8qIHRhYmxlIG9mIGRldmljZXMgdGhhdCB3b3JrIHdpdGggdGhpcyBkcml2ZXIgKi8KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBzdHJlYW16YXBfdGFibGVbXSA9IHsKLQkvKiBTdHJlYW16YXAgUmVtb3RlIENvbnRyb2wgKi8KLQl7IFVTQl9ERVZJQ0UoVVNCX1NUUkVBTVpBUF9WRU5ET1JfSUQsIFVTQl9TVFJFQU1aQVBfUFJPRFVDVF9JRCkgfSwKLQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwotCXsgfQotfTsKLQotTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIHN0cmVhbXphcF90YWJsZSk7Ci0KLSNkZWZpbmUgU1pfUFVMU0VfTUFTSyAweGYwCi0jZGVmaW5lIFNaX1NQQUNFX01BU0sgMHgwZgotI2RlZmluZSBTWl9USU1FT1VUICAgIDB4ZmYKLSNkZWZpbmUgU1pfUkVTT0xVVElPTiAyNTYKLQotLyogbnVtYmVyIG9mIHNhbXBsZXMgYnVmZmVyZWQgKi8KLSNkZWZpbmUgU1pfQlVGX0xFTiAxMjgKLQotLyogZnJvbSBpci1yYzUtc3otZGVjb2Rlci5jICovCi0jaWZkZWYgQ09ORklHX0lSX1JDNV9TWl9ERUNPREVSX01PRFVMRQotI2RlZmluZSBsb2FkX3JjNV9zel9kZWNvZGUoKSAgICByZXF1ZXN0X21vZHVsZSgiaXItcmM1LXN6LWRlY29kZXIiKQotI2Vsc2UKLSNkZWZpbmUgbG9hZF9yYzVfc3pfZGVjb2RlKCkgICAgMAotI2VuZGlmCi0KLWVudW0gU3RyZWFtemFwRGVjb2RlclN0YXRlIHsKLQlQdWxzZVNwYWNlLAotCUZ1bGxQdWxzZSwKLQlGdWxsU3BhY2UsCi0JSWdub3JlUHVsc2UKLX07Ci0KLS8qIHN0cnVjdHVyZSB0byBob2xkIG91ciBkZXZpY2Ugc3BlY2lmaWMgc3R1ZmYgKi8KLXN0cnVjdCBzdHJlYW16YXBfaXIgewotCi0JLyogaXItY29yZSAqLwotCXN0cnVjdCBpcl9kZXZfcHJvcHMgKnByb3BzOwotCi0JLyogY29yZSBkZXZpY2UgaW5mbyAqLwotCXN0cnVjdCBkZXZpY2UgKmRldjsKLQlzdHJ1Y3QgaW5wdXRfZGV2ICppZGV2OwotCi0JLyogdXNiICovCi0Jc3RydWN0IHVzYl9kZXZpY2UJKnVzYmRldjsKLQlzdHJ1Y3QgdXNiX2ludGVyZmFjZQkqaW50ZXJmYWNlOwotCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcG9pbnQ7Ci0Jc3RydWN0IHVyYgkJKnVyYl9pbjsKLQotCS8qIGJ1ZmZlciAmIGRtYSAqLwotCXVuc2lnbmVkIGNoYXIJCSpidWZfaW47Ci0JZG1hX2FkZHJfdAkJZG1hX2luOwotCXVuc2lnbmVkIGludAkJYnVmX2luX2xlbjsKLQotCS8qIHRyYWNrIHdoYXQgc3RhdGUgd2UncmUgaW4gKi8KLQllbnVtIFN0cmVhbXphcERlY29kZXJTdGF0ZSBkZWNvZGVyX3N0YXRlOwotCS8qIHRyYWNrcyB3aGV0aGVyIHdlIGFyZSBjdXJyZW50bHkgcmVjZWl2aW5nIHNvbWUgc2lnbmFsICovCi0JYm9vbAkJCWlkbGU7Ci0JLyogc3VtIG9mIHNpZ25hbCBsZW5ndGhzIHJlY2VpdmVkIHNpbmNlIHNpZ25hbCBzdGFydCAqLwotCXVuc2lnbmVkIGxvbmcJCXN1bTsKLQkvKiBzdGFydCB0aW1lIG9mIHNpZ25hbDsgbmVjZXNzYXJ5IGZvciBnYXAgdHJhY2tpbmcgKi8KLQlzdHJ1Y3QgdGltZXZhbAkJc2lnbmFsX2xhc3Q7Ci0Jc3RydWN0IHRpbWV2YWwJCXNpZ25hbF9zdGFydDsKLQlib29sCQkJdGltZW91dF9lbmFibGVkOwotCi0JY2hhcgkJCW5hbWVbMTI4XTsKLQljaGFyCQkJcGh5c1s2NF07Ci19OwotCi0KLS8qIGxvY2FsIGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KLXN0YXRpYyBpbnQgc3RyZWFtemFwX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCi0JCQkgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpOwotc3RhdGljIHZvaWQgc3RyZWFtemFwX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSk7Ci1zdGF0aWMgdm9pZCBzdHJlYW16YXBfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKTsKLXN0YXRpYyBpbnQgc3RyZWFtemFwX3N1c3BlbmQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKTsKLXN0YXRpYyBpbnQgc3RyZWFtemFwX3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zik7Ci0KLS8qIHVzYiBzcGVjaWZpYyBvYmplY3QgbmVlZGVkIHRvIHJlZ2lzdGVyIHRoaXMgZHJpdmVyIHdpdGggdGhlIHVzYiBzdWJzeXN0ZW0gKi8KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBzdHJlYW16YXBfZHJpdmVyID0gewotCS5uYW1lID0JCURSSVZFUl9OQU1FLAotCS5wcm9iZSA9CXN0cmVhbXphcF9wcm9iZSwKLQkuZGlzY29ubmVjdCA9CXN0cmVhbXphcF9kaXNjb25uZWN0LAotCS5zdXNwZW5kID0Jc3RyZWFtemFwX3N1c3BlbmQsCi0JLnJlc3VtZSA9CXN0cmVhbXphcF9yZXN1bWUsCi0JLmlkX3RhYmxlID0Jc3RyZWFtemFwX3RhYmxlLAotfTsKLQotc3RhdGljIHZvaWQgc3pfcHVzaChzdHJ1Y3Qgc3RyZWFtemFwX2lyICpzeiwgc3RydWN0IGlyX3Jhd19ldmVudCByYXdpcikKLXsKLQlkZXZfZGJnKHN6LT5kZXYsICJTdG9yaW5nICVzIHdpdGggZHVyYXRpb24gJXUgdXNcbiIsCi0JCShyYXdpci5wdWxzZSA/ICJwdWxzZSIgOiAic3BhY2UiKSwgcmF3aXIuZHVyYXRpb24pOwotCWlyX3Jhd19ldmVudF9zdG9yZV93aXRoX2ZpbHRlcihzei0+aWRldiwgJnJhd2lyKTsKLX0KLQotc3RhdGljIHZvaWQgc3pfcHVzaF9mdWxsX3B1bHNlKHN0cnVjdCBzdHJlYW16YXBfaXIgKnN6LAotCQkJICAgICAgIHVuc2lnbmVkIGNoYXIgdmFsdWUpCi17Ci0JREVGSU5FX0lSX1JBV19FVkVOVChyYXdpcik7Ci0KLQlpZiAoc3otPmlkbGUpIHsKLQkJbG9uZyBkZWx0djsKLQotCQlzei0+c2lnbmFsX2xhc3QgPSBzei0+c2lnbmFsX3N0YXJ0OwotCQlkb19nZXR0aW1lb2ZkYXkoJnN6LT5zaWduYWxfc3RhcnQpOwotCi0JCWRlbHR2ID0gc3otPnNpZ25hbF9zdGFydC50dl9zZWMgLSBzei0+c2lnbmFsX2xhc3QudHZfc2VjOwotCQlyYXdpci5wdWxzZSA9IGZhbHNlOwotCQlpZiAoZGVsdHYgPiAxNSkgewotCQkJLyogcmVhbGx5IGxvbmcgdGltZSAqLwotCQkJcmF3aXIuZHVyYXRpb24gPSBJUl9NQVhfRFVSQVRJT047Ci0JCX0gZWxzZSB7Ci0JCQlyYXdpci5kdXJhdGlvbiA9IChpbnQpKGRlbHR2ICogMTAwMDAwMCArCi0JCQkJc3otPnNpZ25hbF9zdGFydC50dl91c2VjIC0KLQkJCQlzei0+c2lnbmFsX2xhc3QudHZfdXNlYyk7Ci0JCQlyYXdpci5kdXJhdGlvbiAtPSBzei0+c3VtOwotCQkJcmF3aXIuZHVyYXRpb24gKj0gMTAwMDsKLQkJCXJhd2lyLmR1cmF0aW9uICY9IElSX01BWF9EVVJBVElPTjsKLQkJfQotCQlzel9wdXNoKHN6LCByYXdpcik7Ci0KLQkJc3otPmlkbGUgPSBmYWxzZTsKLQkJc3otPnN1bSA9IDA7Ci0JfQotCi0JcmF3aXIucHVsc2UgPSB0cnVlOwotCXJhd2lyLmR1cmF0aW9uID0gKChpbnQpIHZhbHVlKSAqIFNaX1JFU09MVVRJT047Ci0JcmF3aXIuZHVyYXRpb24gKz0gU1pfUkVTT0xVVElPTiAvIDI7Ci0Jc3otPnN1bSArPSByYXdpci5kdXJhdGlvbjsKLQlyYXdpci5kdXJhdGlvbiAqPSAxMDAwOwotCXJhd2lyLmR1cmF0aW9uICY9IElSX01BWF9EVVJBVElPTjsKLQlzel9wdXNoKHN6LCByYXdpcik7Ci19Ci0KLXN0YXRpYyB2b2lkIHN6X3B1c2hfaGFsZl9wdWxzZShzdHJ1Y3Qgc3RyZWFtemFwX2lyICpzeiwKLQkJCSAgICAgICB1bnNpZ25lZCBjaGFyIHZhbHVlKQotewotCXN6X3B1c2hfZnVsbF9wdWxzZShzeiwgKHZhbHVlICYgU1pfUFVMU0VfTUFTSykgPj4gNCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHN6X3B1c2hfZnVsbF9zcGFjZShzdHJ1Y3Qgc3RyZWFtemFwX2lyICpzeiwKLQkJCSAgICAgICB1bnNpZ25lZCBjaGFyIHZhbHVlKQotewotCURFRklORV9JUl9SQVdfRVZFTlQocmF3aXIpOwotCi0JcmF3aXIucHVsc2UgPSBmYWxzZTsKLQlyYXdpci5kdXJhdGlvbiA9ICgoaW50KSB2YWx1ZSkgKiBTWl9SRVNPTFVUSU9OOwotCXJhd2lyLmR1cmF0aW9uICs9IFNaX1JFU09MVVRJT04gLyAyOwotCXN6LT5zdW0gKz0gcmF3aXIuZHVyYXRpb247Ci0JcmF3aXIuZHVyYXRpb24gKj0gMTAwMDsKLQlzel9wdXNoKHN6LCByYXdpcik7Ci19Ci0KLXN0YXRpYyB2b2lkIHN6X3B1c2hfaGFsZl9zcGFjZShzdHJ1Y3Qgc3RyZWFtemFwX2lyICpzeiwKLQkJCSAgICAgICB1bnNpZ25lZCBsb25nIHZhbHVlKQotewotCXN6X3B1c2hfZnVsbF9zcGFjZShzeiwgdmFsdWUgJiBTWl9TUEFDRV9NQVNLKTsKLX0KLQotLyoqCi0gKiBzdHJlYW16YXBfY2FsbGJhY2sgLSB1c2IgSVJRIGhhbmRsZXIgY2FsbGJhY2sKLSAqCi0gKiBUaGlzIHByb2NlZHVyZSBpcyBpbnZva2VkIG9uIHJlY2VwdGlvbiBvZiBkYXRhIGZyb20KLSAqIHRoZSB1c2IgcmVtb3RlLgotICovCi1zdGF0aWMgdm9pZCBzdHJlYW16YXBfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQotewotCXN0cnVjdCBzdHJlYW16YXBfaXIgKnN6OwotCXVuc2lnbmVkIGludCBpOwotCWludCBsZW47Ci0KLQlpZiAoIXVyYikKLQkJcmV0dXJuOwotCi0Jc3ogPSB1cmItPmNvbnRleHQ7Ci0JbGVuID0gdXJiLT5hY3R1YWxfbGVuZ3RoOwotCi0Jc3dpdGNoICh1cmItPnN0YXR1cykgewotCWNhc2UgLUVDT05OUkVTRVQ6Ci0JY2FzZSAtRU5PRU5UOgotCWNhc2UgLUVTSFVURE9XTjoKLQkJLyoKLQkJICogdGhpcyB1cmIgaXMgdGVybWluYXRlZCwgY2xlYW4gdXAuCi0JCSAqIHN6IG1pZ2h0IGFscmVhZHkgYmUgaW52YWxpZCBhdCB0aGlzIHBvaW50Ci0JCSAqLwotCQlkZXZfZXJyKHN6LT5kZXYsICJ1cmIgdGVybWluYXRlZCwgc3RhdHVzOiAlZFxuIiwgdXJiLT5zdGF0dXMpOwotCQlyZXR1cm47Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCi0JZGV2X2RiZyhzei0+ZGV2LCAiJXM6IHJlY2VpdmVkIHVyYiwgbGVuICVkXG4iLCBfX2Z1bmNfXywgbGVuKTsKLQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLQkJZGV2X2RiZyhzei0+ZGV2LCAic3otPmJ1Zl9pblslZF06ICV4XG4iLAotCQkJaSwgKHVuc2lnbmVkIGNoYXIpc3otPmJ1Zl9pbltpXSk7Ci0JCXN3aXRjaCAoc3otPmRlY29kZXJfc3RhdGUpIHsKLQkJY2FzZSBQdWxzZVNwYWNlOgotCQkJaWYgKChzei0+YnVmX2luW2ldICYgU1pfUFVMU0VfTUFTSykgPT0KLQkJCQlTWl9QVUxTRV9NQVNLKSB7Ci0JCQkJc3otPmRlY29kZXJfc3RhdGUgPSBGdWxsUHVsc2U7Ci0JCQkJY29udGludWU7Ci0JCQl9IGVsc2UgaWYgKChzei0+YnVmX2luW2ldICYgU1pfU1BBQ0VfTUFTSykKLQkJCQkJPT0gU1pfU1BBQ0VfTUFTSykgewotCQkJCXN6X3B1c2hfaGFsZl9wdWxzZShzeiwgc3otPmJ1Zl9pbltpXSk7Ci0JCQkJc3otPmRlY29kZXJfc3RhdGUgPSBGdWxsU3BhY2U7Ci0JCQkJY29udGludWU7Ci0JCQl9IGVsc2UgewotCQkJCXN6X3B1c2hfaGFsZl9wdWxzZShzeiwgc3otPmJ1Zl9pbltpXSk7Ci0JCQkJc3pfcHVzaF9oYWxmX3NwYWNlKHN6LCBzei0+YnVmX2luW2ldKTsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIEZ1bGxQdWxzZToKLQkJCXN6X3B1c2hfZnVsbF9wdWxzZShzeiwgc3otPmJ1Zl9pbltpXSk7Ci0JCQlzei0+ZGVjb2Rlcl9zdGF0ZSA9IElnbm9yZVB1bHNlOwotCQkJYnJlYWs7Ci0JCWNhc2UgRnVsbFNwYWNlOgotCQkJaWYgKHN6LT5idWZfaW5baV0gPT0gU1pfVElNRU9VVCkgewotCQkJCURFRklORV9JUl9SQVdfRVZFTlQocmF3aXIpOwotCi0JCQkJcmF3aXIucHVsc2UgPSBmYWxzZTsKLQkJCQlyYXdpci5kdXJhdGlvbiA9IHN6LT5wcm9wcy0+dGltZW91dDsKLQkJCQlzei0+aWRsZSA9IHRydWU7Ci0JCQkJaWYgKHN6LT50aW1lb3V0X2VuYWJsZWQpCi0JCQkJCXN6X3B1c2goc3osIHJhd2lyKTsKLQkJCQlpcl9yYXdfZXZlbnRfaGFuZGxlKHN6LT5pZGV2KTsKLQkJCX0gZWxzZSB7Ci0JCQkJc3pfcHVzaF9mdWxsX3NwYWNlKHN6LCBzei0+YnVmX2luW2ldKTsKLQkJCX0KLQkJCXN6LT5kZWNvZGVyX3N0YXRlID0gUHVsc2VTcGFjZTsKLQkJCWJyZWFrOwotCQljYXNlIElnbm9yZVB1bHNlOgotCQkJaWYgKChzei0+YnVmX2luW2ldICYgU1pfU1BBQ0VfTUFTSykgPT0KLQkJCQlTWl9TUEFDRV9NQVNLKSB7Ci0JCQkJc3otPmRlY29kZXJfc3RhdGUgPSBGdWxsU3BhY2U7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlzel9wdXNoX2hhbGZfc3BhY2Uoc3osIHN6LT5idWZfaW5baV0pOwotCQkJc3otPmRlY29kZXJfc3RhdGUgPSBQdWxzZVNwYWNlOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQl1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwotCi0JcmV0dXJuOwotfQotCi1zdGF0aWMgc3RydWN0IGlucHV0X2RldiAqc3RyZWFtemFwX2luaXRfaW5wdXRfZGV2KHN0cnVjdCBzdHJlYW16YXBfaXIgKnN6KQotewotCXN0cnVjdCBpbnB1dF9kZXYgKmlkZXY7Ci0Jc3RydWN0IGlyX2Rldl9wcm9wcyAqcHJvcHM7Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gc3otPmRldjsKLQlpbnQgcmV0OwotCi0JaWRldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOwotCWlmICghaWRldikgewotCQlkZXZfZXJyKGRldiwgInJlbW90ZSBpbnB1dCBkZXYgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOwotCQlnb3RvIGlkZXZfYWxsb2NfZmFpbGVkOwotCX0KLQotCXByb3BzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGlyX2Rldl9wcm9wcyksIEdGUF9LRVJORUwpOwotCWlmICghcHJvcHMpIHsKLQkJZGV2X2VycihkZXYsICJyZW1vdGUgaXIgZGV2IHByb3BzIGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKLQkJZ290byBwcm9wc19hbGxvY19mYWlsZWQ7Ci0JfQotCi0Jc25wcmludGYoc3otPm5hbWUsIHNpemVvZihzei0+bmFtZSksICJTdHJlYW16YXAgUEMgUmVtb3RlIEluZnJhcmVkICIKLQkJICJSZWNlaXZlciAoJTA0eDolMDR4KSIsCi0JCSBsZTE2X3RvX2NwdShzei0+dXNiZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSwKLQkJIGxlMTZfdG9fY3B1KHN6LT51c2JkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSk7Ci0KLQlpZGV2LT5uYW1lID0gc3otPm5hbWU7Ci0JdXNiX21ha2VfcGF0aChzei0+dXNiZGV2LCBzei0+cGh5cywgc2l6ZW9mKHN6LT5waHlzKSk7Ci0Jc3RybGNhdChzei0+cGh5cywgIi9pbnB1dDAiLCBzaXplb2Yoc3otPnBoeXMpKTsKLQlpZGV2LT5waHlzID0gc3otPnBoeXM7Ci0KLQlwcm9wcy0+cHJpdiA9IHN6OwotCXByb3BzLT5kcml2ZXJfdHlwZSA9IFJDX0RSSVZFUl9JUl9SQVc7Ci0JcHJvcHMtPmFsbG93ZWRfcHJvdG9zID0gSVJfVFlQRV9BTEw7Ci0KLQlzei0+cHJvcHMgPSBwcm9wczsKLQotCXVzYl90b19pbnB1dF9pZChzei0+dXNiZGV2LCAmaWRldi0+aWQpOwotCWlkZXYtPmRldi5wYXJlbnQgPSBzei0+ZGV2OwotCi0JcmV0ID0gaXJfaW5wdXRfcmVnaXN0ZXIoaWRldiwgUkNfTUFQX1NUUkVBTVpBUCwgcHJvcHMsIERSSVZFUl9OQU1FKTsKLQlpZiAocmV0IDwgMCkgewotCQlkZXZfZXJyKGRldiwgInJlbW90ZSBpbnB1dCBkZXZpY2UgcmVnaXN0ZXIgZmFpbGVkXG4iKTsKLQkJZ290byBpcmRldl9mYWlsZWQ7Ci0JfQotCi0JcmV0dXJuIGlkZXY7Ci0KLWlyZGV2X2ZhaWxlZDoKLQlrZnJlZShwcm9wcyk7Ci1wcm9wc19hbGxvY19mYWlsZWQ6Ci0JaW5wdXRfZnJlZV9kZXZpY2UoaWRldik7Ci1pZGV2X2FsbG9jX2ZhaWxlZDoKLQlyZXR1cm4gTlVMTDsKLX0KLQotLyoqCi0gKglzdHJlYW16YXBfcHJvYmUKLSAqCi0gKglDYWxsZWQgYnkgdXNiLWNvcmUgdG8gYXNzb2NpYXRlZCB3aXRoIGEgY2FuZGlkYXRlIGRldmljZQotICoJT24gYW55IGZhaWx1cmUgdGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgRVJST1IKLSAqCU9uIHN1Y2Nlc3MgcmV0dXJuIDAKLSAqLwotc3RhdGljIGludCBfX2RldmluaXQgc3RyZWFtemFwX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAotCQkJCSAgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQotewotCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOwotCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmlmYWNlX2hvc3Q7Ci0Jc3RydWN0IHN0cmVhbXphcF9pciAqc3ogPSBOVUxMOwotCWNoYXIgYnVmWzYzXSwgbmFtZVsxMjhdID0gIiI7Ci0JaW50IHJldHZhbCA9IC1FTk9NRU07Ci0JaW50IHBpcGUsIG1heHA7Ci0KLQkvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgZGV2aWNlIGRyaXZlciBzcGVjaWZpYyBkYXRhICovCi0Jc3ogPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc3RyZWFtemFwX2lyKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFzeikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlzei0+dXNiZGV2ID0gdXNiZGV2OwotCXN6LT5pbnRlcmZhY2UgPSBpbnRmOwotCi0JLyogQ2hlY2sgdG8gZW5zdXJlIGVuZHBvaW50IGluZm9ybWF0aW9uIG1hdGNoZXMgcmVxdWlyZW1lbnRzICovCi0JaWZhY2VfaG9zdCA9IGludGYtPmN1cl9hbHRzZXR0aW5nOwotCi0JaWYgKGlmYWNlX2hvc3QtPmRlc2MuYk51bUVuZHBvaW50cyAhPSAxKSB7Ci0JCWRldl9lcnIoJmludGYtPmRldiwgIiVzOiBVbmV4cGVjdGVkIGRlc2MuYk51bUVuZHBvaW50cyAoJWQpXG4iLAotCQkJX19mdW5jX18sIGlmYWNlX2hvc3QtPmRlc2MuYk51bUVuZHBvaW50cyk7Ci0JCXJldHZhbCA9IC1FTk9ERVY7Ci0JCWdvdG8gZnJlZV9zejsKLQl9Ci0KLQlzei0+ZW5kcG9pbnQgPSAmKGlmYWNlX2hvc3QtPmVuZHBvaW50WzBdLmRlc2MpOwotCWlmICgoc3otPmVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0VORFBPSU5UX0RJUl9NQVNLKQotCSAgICAhPSBVU0JfRElSX0lOKSB7Ci0JCWRldl9lcnIoJmludGYtPmRldiwgIiVzOiBlbmRwb2ludCBkb2Vzbid0IG1hdGNoIGlucHV0IGRldmljZSAiCi0JCQkiMDIlMDJ4XG4iLCBfX2Z1bmNfXywgc3otPmVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzKTsKLQkJcmV0dmFsID0gLUVOT0RFVjsKLQkJZ290byBmcmVlX3N6OwotCX0KLQotCWlmICgoc3otPmVuZHBvaW50LT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykKLQkgICAgIT0gVVNCX0VORFBPSU5UX1hGRVJfSU5UKSB7Ci0JCWRldl9lcnIoJmludGYtPmRldiwgIiVzOiBlbmRwb2ludCBhdHRyaWJ1dGVzIGRvbid0IG1hdGNoIHhmZXIgIgotCQkJIjAyJTAyeFxuIiwgX19mdW5jX18sIHN6LT5lbmRwb2ludC0+Ym1BdHRyaWJ1dGVzKTsKLQkJcmV0dmFsID0gLUVOT0RFVjsKLQkJZ290byBmcmVlX3N6OwotCX0KLQotCXBpcGUgPSB1c2JfcmN2aW50cGlwZSh1c2JkZXYsIHN6LT5lbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyk7Ci0JbWF4cCA9IHVzYl9tYXhwYWNrZXQodXNiZGV2LCBwaXBlLCB1c2JfcGlwZW91dChwaXBlKSk7Ci0KLQlpZiAobWF4cCA9PSAwKSB7Ci0JCWRldl9lcnIoJmludGYtPmRldiwgIiVzOiBlbmRwb2ludCBNYXggUGFja2V0IFNpemUgaXMgMCE/IVxuIiwKLQkJCV9fZnVuY19fKTsKLQkJcmV0dmFsID0gLUVOT0RFVjsKLQkJZ290byBmcmVlX3N6OwotCX0KLQotCS8qIEFsbG9jYXRlIHRoZSBVU0IgYnVmZmVyIGFuZCBJUlEgVVJCICovCi0Jc3otPmJ1Zl9pbiA9IHVzYl9hbGxvY19jb2hlcmVudCh1c2JkZXYsIG1heHAsIEdGUF9BVE9NSUMsICZzei0+ZG1hX2luKTsKLQlpZiAoIXN6LT5idWZfaW4pCi0JCWdvdG8gZnJlZV9zejsKLQotCXN6LT51cmJfaW4gPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOwotCWlmICghc3otPnVyYl9pbikKLQkJZ290byBmcmVlX2J1Zl9pbjsKLQotCXN6LT5kZXYgPSAmaW50Zi0+ZGV2OwotCXN6LT5idWZfaW5fbGVuID0gbWF4cDsKLQotCWlmICh1c2JkZXYtPmRlc2NyaXB0b3IuaU1hbnVmYWN0dXJlcgotCSAgICAmJiB1c2Jfc3RyaW5nKHVzYmRldiwgdXNiZGV2LT5kZXNjcmlwdG9yLmlNYW51ZmFjdHVyZXIsCi0JCQkgIGJ1Ziwgc2l6ZW9mKGJ1ZikpID4gMCkKLQkJc3RybGNweShuYW1lLCBidWYsIHNpemVvZihuYW1lKSk7Ci0KLQlpZiAodXNiZGV2LT5kZXNjcmlwdG9yLmlQcm9kdWN0Ci0JICAgICYmIHVzYl9zdHJpbmcodXNiZGV2LCB1c2JkZXYtPmRlc2NyaXB0b3IuaVByb2R1Y3QsCi0JCQkgIGJ1Ziwgc2l6ZW9mKGJ1ZikpID4gMCkKLQkJc25wcmludGYobmFtZSArIHN0cmxlbihuYW1lKSwgc2l6ZW9mKG5hbWUpIC0gc3RybGVuKG5hbWUpLAotCQkJICIgJXMiLCBidWYpOwotCi0Jc3otPmlkZXYgPSBzdHJlYW16YXBfaW5pdF9pbnB1dF9kZXYoc3opOwotCWlmICghc3otPmlkZXYpCi0JCWdvdG8gaW5wdXRfZGV2X2ZhaWw7Ci0KLQlzei0+aWRsZSA9IHRydWU7Ci0Jc3otPmRlY29kZXJfc3RhdGUgPSBQdWxzZVNwYWNlOwotCS8qIEZJWE1FOiBkb24ndCB5ZXQgaGF2ZSBhIHdheSB0byBzZXQgdGhpcyAqLwotCXN6LT50aW1lb3V0X2VuYWJsZWQgPSB0cnVlOwotCXN6LT5wcm9wcy0+dGltZW91dCA9ICgoKFNaX1RJTUVPVVQgKiBTWl9SRVNPTFVUSU9OICogMTAwMCkgJgotCQkJCUlSX01BWF9EVVJBVElPTikgfCAweDAzMDAwMDAwKTsKLQkjaWYgMAotCS8qIG5vdCB5ZXQgc3VwcG9ydGVkLCBkZXBlbmRzIG9uIHBhdGNoZXMgZnJvbSBtYXhpbSAqLwotCS8qIHNlZSBhbHNvOiBMSVJDX0dFVF9SRUNfUkVTT0xVVElPTiBhbmQgTElSQ19TRVRfUkVDX1RJTUVPVVQgKi8KLQlzei0+bWluX3RpbWVvdXQgPSBTWl9USU1FT1VUICogU1pfUkVTT0xVVElPTiAqIDEwMDA7Ci0Jc3otPm1heF90aW1lb3V0ID0gU1pfVElNRU9VVCAqIFNaX1JFU09MVVRJT04gKiAxMDAwOwotCSNlbmRpZgotCi0JZG9fZ2V0dGltZW9mZGF5KCZzei0+c2lnbmFsX3N0YXJ0KTsKLQotCS8qIENvbXBsZXRlIGZpbmFsIGluaXRpYWxpc2F0aW9ucyAqLwotCXVzYl9maWxsX2ludF91cmIoc3otPnVyYl9pbiwgdXNiZGV2LCBwaXBlLCBzei0+YnVmX2luLAotCQkJIG1heHAsICh1c2JfY29tcGxldGVfdClzdHJlYW16YXBfY2FsbGJhY2ssCi0JCQkgc3osIHN6LT5lbmRwb2ludC0+YkludGVydmFsKTsKLQlzei0+dXJiX2luLT50cmFuc2Zlcl9kbWEgPSBzei0+ZG1hX2luOwotCXN6LT51cmJfaW4tPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOwotCi0JdXNiX3NldF9pbnRmZGF0YShpbnRmLCBzeik7Ci0KLQlpZiAodXNiX3N1Ym1pdF91cmIoc3otPnVyYl9pbiwgR0ZQX0FUT01JQykpCi0JCWRldl9lcnIoc3otPmRldiwgInVyYiBzdWJtaXQgZmFpbGVkXG4iKTsKLQotCWRldl9pbmZvKHN6LT5kZXYsICJSZWdpc3RlcmVkICVzIG9uIHVzYiVkOiVkXG4iLCBuYW1lLAotCQkgdXNiZGV2LT5idXMtPmJ1c251bSwgdXNiZGV2LT5kZXZudW0pOwotCi0JLyogTG9hZCB0aGUgc3RyZWFtemFwIG5vdC1xdWl0ZS1yYzUgZGVjb2RlciB0b28gKi8KLQlsb2FkX3JjNV9zel9kZWNvZGUoKTsKLQotCXJldHVybiAwOwotCi1pbnB1dF9kZXZfZmFpbDoKLQl1c2JfZnJlZV91cmIoc3otPnVyYl9pbik7Ci1mcmVlX2J1Zl9pbjoKLQl1c2JfZnJlZV9jb2hlcmVudCh1c2JkZXYsIG1heHAsIHN6LT5idWZfaW4sIHN6LT5kbWFfaW4pOwotZnJlZV9zejoKLQlrZnJlZShzeik7Ci0KLQlyZXR1cm4gcmV0dmFsOwotfQotCi0vKioKLSAqIHN0cmVhbXphcF9kaXNjb25uZWN0Ci0gKgotICogQ2FsbGVkIGJ5IHRoZSB1c2IgY29yZSB3aGVuIHRoZSBkZXZpY2UgaXMgcmVtb3ZlZCBmcm9tIHRoZSBzeXN0ZW0uCi0gKgotICogVGhpcyByb3V0aW5lIGd1YXJhbnRlZXMgdGhhdCB0aGUgZHJpdmVyIHdpbGwgbm90IHN1Ym1pdCBhbnkgbW9yZSB1cmJzCi0gKiBieSBjbGVhcmluZyBkZXYtPnVzYmRldi4gIEl0IGlzIGFsc28gc3VwcG9zZWQgdG8gdGVybWluYXRlIGFueSBjdXJyZW50bHkKLSAqIGFjdGl2ZSB1cmJzLiAgVW5mb3J0dW5hdGVseSwgdXNiX2J1bGtfbXNnKCksIHVzZWQgaW4gc3RyZWFtemFwX3JlYWQoKSwKLSAqIGRvZXMgbm90IHByb3ZpZGUgYW55IHdheSB0byBkbyB0aGlzLgotICovCi1zdGF0aWMgdm9pZCBzdHJlYW16YXBfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQotewotCXN0cnVjdCBzdHJlYW16YXBfaXIgKnN6ID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOwotCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGVyZmFjZSk7Ci0KLQl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7Ci0KLQlpZiAoIXN6KQotCQlyZXR1cm47Ci0KLQlzei0+dXNiZGV2ID0gTlVMTDsKLQlpcl9pbnB1dF91bnJlZ2lzdGVyKHN6LT5pZGV2KTsKLQl1c2Jfa2lsbF91cmIoc3otPnVyYl9pbik7Ci0JdXNiX2ZyZWVfdXJiKHN6LT51cmJfaW4pOwotCXVzYl9mcmVlX2NvaGVyZW50KHVzYmRldiwgc3otPmJ1Zl9pbl9sZW4sIHN6LT5idWZfaW4sIHN6LT5kbWFfaW4pOwotCi0Ja2ZyZWUoc3opOwotfQotCi1zdGF0aWMgaW50IHN0cmVhbXphcF9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSkKLXsKLQlzdHJ1Y3Qgc3RyZWFtemFwX2lyICpzeiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7Ci0KLQl1c2Jfa2lsbF91cmIoc3otPnVyYl9pbik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzdHJlYW16YXBfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQotewotCXN0cnVjdCBzdHJlYW16YXBfaXIgKnN6ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKLQotCWlmICh1c2Jfc3VibWl0X3VyYihzei0+dXJiX2luLCBHRlBfQVRPTUlDKSkgewotCQlkZXZfZXJyKHN6LT5kZXYsICJFcnJvciBzdW1iaXRpbmcgdXJiXG4iKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICoJc3RyZWFtemFwX2luaXQKLSAqLwotc3RhdGljIGludCBfX2luaXQgc3RyZWFtemFwX2luaXQodm9pZCkKLXsKLQlpbnQgcmV0OwotCi0JLyogcmVnaXN0ZXIgdGhpcyBkcml2ZXIgd2l0aCB0aGUgVVNCIHN1YnN5c3RlbSAqLwotCXJldCA9IHVzYl9yZWdpc3Rlcigmc3RyZWFtemFwX2RyaXZlcik7Ci0JaWYgKHJldCA8IDApCi0JCXByaW50ayhLRVJOX0VSUiBEUklWRVJfTkFNRSAiOiB1c2IgcmVnaXN0ZXIgZmFpbGVkLCAiCi0JCSAgICAgICAicmVzdWx0ID0gJWRcbiIsIHJldCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0vKioKLSAqCXN0cmVhbXphcF9leGl0Ci0gKi8KLXN0YXRpYyB2b2lkIF9fZXhpdCBzdHJlYW16YXBfZXhpdCh2b2lkKQotewotCXVzYl9kZXJlZ2lzdGVyKCZzdHJlYW16YXBfZHJpdmVyKTsKLX0KLQotCi1tb2R1bGVfaW5pdChzdHJlYW16YXBfaW5pdCk7Ci1tb2R1bGVfZXhpdChzdHJlYW16YXBfZXhpdCk7Ci0KLU1PRFVMRV9BVVRIT1IoIkphcm9kIFdpbHNvbiA8amFyb2RAd2lsc29uZXQuY29tPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7Ci1NT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRW5hYmxlIGRlYnVnZ2luZyBtZXNzYWdlcyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9LY29uZmlnCmluZGV4IGEyODU0MWIuLjgxYjNiYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL0tjb25maWcKQEAgLTQwLDM1ICs0MCw2IEBACiAJZGVwZW5kcyBvbiAoSTJDIHx8IEkyQz1uKSAmJiBWSURFT19ERVYKIAlkZWZhdWx0IChJMkMgfHwgSTJDPW4pICYmIFZJREVPX0RFVgogCi1jb25maWcgVklERU9fQUxMT1dfVjRMMQotCWJvb2wgIkVuYWJsZSBWaWRlbyBGb3IgTGludXggQVBJIDEgKERFUFJFQ0FURUQpIgotCWRlcGVuZHMgb24gVklERU9fREVWICYmIFZJREVPX1Y0TDJfQ09NTU9OCi0JZGVmYXVsdCBWSURFT19ERVYgJiYgVklERU9fVjRMMl9DT01NT04KLQktLS1oZWxwLS0tCi0JICBFbmFibGVzIGRyaXZlcnMgYmFzZWQgb24gdGhlIGxlZ2FjeSBWNEwxIEFQSS4KLQotCSAgVGhpcyBhcGkgd2VyZSBkZXZlbG9wZWQgdG8gYmUgdXNlZCBhdCBLZXJuZWwgMi4yIGFuZCAyLjQsIGJ1dAotCSAgbGFja3Mgc3VwcG9ydCBmb3Igc2V2ZXJhbCB2aWRlbyBzdGFuZGFyZHMuIFRoZXJlIGFyZSBzZXZlcmFsCi0JICBkcml2ZXJzIGF0IGtlcm5lbCB0aGF0IHN0aWxsIGRlcGVuZHMgb24gaXQuCi0KLQkgIElmIHlvdSBhcmUgdW5zdXJlIGFzIHRvIHdoZXRoZXIgdGhpcyBpcyByZXF1aXJlZCwgYW5zd2VyIFkuCi0KLWNvbmZpZyBWSURFT19WNEwxX0NPTVBBVAotCWJvb2wgIkVuYWJsZSBWaWRlbyBGb3IgTGludXggQVBJIDEgY29tcGF0aWJsZSBMYXllciIgaWYgIVZJREVPX0FMTE9XX1Y0TDEKLQlkZXBlbmRzIG9uIFZJREVPX0RFVgotCWRlZmF1bHQgeQotCS0tLWhlbHAtLS0KLQkgIEVuYWJsZXMgYSBjb21wYXRpYmlsaXR5IEFQSSB1c2VkIGJ5IG1vc3QgVjRMMiBkZXZpY2VzIHRvIGFsbG93Ci0JICBpdHMgdXNhZ2Ugd2l0aCBsZWdhY3kgYXBwbGljYXRpb25zIHRoYXQgc3VwcG9ydHMgb25seSBWNEwxIGFwaS4KLQotCSAgRG9jdW1lbnRhdGlvbiBmb3IgdGhlIG9yaWdpbmFsIEFQSSBpcyBpbmNsdWRlZCBpbiB0aGUgZmlsZQotCSAgPERvY3VtZW50YXRpb24vdmlkZW80bGludXgvQVBJLmh0bWw+LgotCi0JICBVc2VyIHRvb2xzIGZvciB0aGlzIGFyZSBhdmFpbGFibGUgZnJvbQotCSAgPGZ0cDovL2Z0cC51ay5saW51eC5vcmcvcHViL2xpbnV4L3ZpZGVvNGxpbnV4Lz4uCi0KLQkgIElmIHlvdSBhcmUgdW5zdXJlIGFzIHRvIHdoZXRoZXIgdGhpcyBpcyByZXF1aXJlZCwgYW5zd2VyIFkuCi0KICMKICMgRFZCIENvcmUKICMKQEAgLTk5LDcgKzcwLDcgQEAKIGNvbW1lbnQgIk11bHRpbWVkaWEgZHJpdmVycyIKIAogc291cmNlICJkcml2ZXJzL21lZGlhL2NvbW1vbi9LY29uZmlnIgotc291cmNlICJkcml2ZXJzL21lZGlhL0lSL0tjb25maWciCitzb3VyY2UgImRyaXZlcnMvbWVkaWEvcmMvS2NvbmZpZyIKIAogIwogIyBUdW5lciBkcml2ZXJzIGZvciBEVkIgYW5kIFY0TApAQCAtMTIxLDI2ICs5Miw0IEBACiAKIHNvdXJjZSAiZHJpdmVycy9tZWRpYS9kdmIvS2NvbmZpZyIKIAotY29uZmlnIERBQgotCWJvb2xlYW4gIkRBQiBhZGFwdGVycyIKLQktLS1oZWxwLS0tCi0JICBBbGxvdyBzZWxlY3Rpbmcgc3VwcG9ydCBmb3IgRGlnaXRhbCBBdWRpbyBCcm9hZGNhc3RpbmcgKERBQikKLQkgIFJlY2VpdmVyIGFkYXB0ZXJzLgotCi1pZiBEQUIKLWNvbmZpZyBVU0JfREFCVVNCCi0JdHJpc3RhdGUgIkRBQlVTQiBkcml2ZXIiCi0JZGVwZW5kcyBvbiBVU0IKLQktLS1oZWxwLS0tCi0JICBBIERpZ2l0YWwgQXVkaW8gQnJvYWRjYXN0aW5nIChEQUIpIFJlY2VpdmVyIGZvciBVU0IgYW5kIExpbnV4Ci0JICBicm91Z2h0IHRvIHlvdSBieSB0aGUgREFCLVRlYW0KLQkgIDxodHRwOi8vd3d3Ym9kZS5jcy50dW0uZWR1L1Bhci9hcmNoL2RhYi8+LiAgVGhpcyBkcml2ZXIgY2FuIGJlIHRha2VuCi0JICBhcyBhbiBleGFtcGxlIGZvciBVUkItYmFzZWQgYnVsaywgY29udHJvbCwgYW5kIGlzb2Nocm9ub3VzCi0JICB0cmFuc2FjdGlvbnMuIFVSQidzIGFyZSBleHBsYWluZWQgaW4KLQkgIDxEb2N1bWVudGF0aW9uL3VzYi9VUkIudHh0Pi4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZGFidXNiLgotZW5kaWYgIyBEQUIKLQogZW5kaWYgIyBNRURJQV9TVVBQT1JUCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS9NYWtlZmlsZQppbmRleCA0OTliMDgxLi5iNjAzZWE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvTWFrZWZpbGUKQEAgLTIsNyArMiw3IEBACiAjIE1ha2VmaWxlIGZvciB0aGUga2VybmVsIG11bHRpbWVkaWEgZGV2aWNlIGRyaXZlcnMuCiAjCiAKLW9iai15ICs9IGNvbW1vbi8gSVIvIHZpZGVvLworb2JqLXkgKz0gY29tbW9uLyByYy8gdmlkZW8vCiAKIG9iai0kKENPTkZJR19WSURFT19ERVYpICs9IHJhZGlvLwogb2JqLSQoQ09ORklHX0RWQl9DT1JFKSAgKz0gZHZiLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl92aWRlby5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl92aWRlby5jCmluZGV4IGQyNDY5MTAuLjBhYzVjNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfdmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X3ZpZGVvLmMKQEAgLTExMjksMzUgKzExMjksNiBAQAogCQkJY29yZSwgZ19jaGlwX2lkZW50LCBjaGlwKTsKIH0KIAotI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAotc3RhdGljIGludCB2aWRpb2NnbWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwgc3RydWN0IHZpZGVvX21idWYgKm1idWYpCi17Ci0Jc3RydWN0IHNhYTcxNDZfZmggKmZoID0gX19maDsKLQlzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEgPSAmZmgtPnZpZGVvX3E7Ci0JaW50IGVyciwgaTsKLQotCS8qIGZpeG1lOiBudW1iZXIgb2YgY2FwdHVyZSBidWZmZXJzIGFuZCBzaXplcyBmb3IgdjRsIGFwcHMgKi8KLQlpbnQgZ2J1ZmZlcnMgPSAyOwotCWludCBnYnVmc2l6ZSA9IDc2OCAqIDU3NiAqIDQ7Ci0KLQlERUJfRCgoIlZJRElPQ0dNQlVGIFxuIikpOwotCi0JcSA9ICZmaC0+dmlkZW9fcTsKLQllcnIgPSB2aWRlb2J1Zl9tbWFwX3NldHVwKHEsIGdidWZmZXJzLCBnYnVmc2l6ZSwKLQkJCVY0TDJfTUVNT1JZX01NQVApOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCi0JZ2J1ZmZlcnMgPSBlcnI7Ci0JbWVtc2V0KG1idWYsIDAsIHNpemVvZigqbWJ1ZikpOwotCW1idWYtPmZyYW1lcyA9IGdidWZmZXJzOwotCW1idWYtPnNpemUgICA9IGdidWZmZXJzICogZ2J1ZnNpemU7Ci0JZm9yIChpID0gMDsgaSA8IGdidWZmZXJzOyBpKyspCi0JCW1idWYtPm9mZnNldHNbaV0gPSBpICogZ2J1ZnNpemU7Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQogY29uc3Qgc3RydWN0IHY0bDJfaW9jdGxfb3BzIHNhYTcxNDZfdmlkZW9faW9jdGxfb3BzID0gewogCS52aWRpb2NfcXVlcnljYXAgICAgICAgICAgICAgPSB2aWRpb2NfcXVlcnljYXAsCiAJLnZpZGlvY19lbnVtX2ZtdF92aWRfY2FwICAgICA9IHZpZGlvY19lbnVtX2ZtdF92aWRfY2FwLApAQCAtMTE4Niw5ICsxMTU3LDYgQEAKIAkudmlkaW9jX3N0cmVhbW9uICAgICAgICAgICAgID0gdmlkaW9jX3N0cmVhbW9uLAogCS52aWRpb2Nfc3RyZWFtb2ZmICAgICAgICAgICAgPSB2aWRpb2Nfc3RyZWFtb2ZmLAogCS52aWRpb2NfZ19wYXJtIAkJICAgICA9IHZpZGlvY19nX3Bhcm0sCi0jaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCi0JLnZpZGlvY2dtYnVmICAgICAgICAgICAgICAgICA9IHZpZGlvY2dtYnVmLAotI2VuZGlmCiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL21heDIxNjUuYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy9tYXgyMTY1LmMKaW5kZXggOTM3ZTRiMC4uOTg4MzYxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL21heDIxNjUuYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvbWF4MjE2NS5jCkBAIC01MiwxMyArNTIsMTIgQEAKIAltc2cuYWRkciA9IHByaXYtPmNvbmZpZy0+aTJjX2FkZHJlc3M7CiAKIAlpZiAoZGVidWcgPj0gMikKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiByZWc9MHglMDJYLCBkYXRhPTB4JTAyWFxuIiwKLQkJCV9fZnVuY19fLCByZWcsIGRhdGEpOworCQlkcHJpbnRrKCIlczogcmVnPTB4JTAyWCwgZGF0YT0weCUwMlhcbiIsIF9fZnVuY19fLCByZWcsIGRhdGEpOwogCiAJcmV0ID0gaTJjX3RyYW5zZmVyKHByaXYtPmkyYywgJm1zZywgMSk7CiAKIAlpZiAocmV0ICE9IDEpCi0JCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IGVycm9yIHJlZz0weCV4LCBkYXRhPTB4JXgsIHJldD0laVxuIiwKKwkJZHByaW50aygiJXM6IGVycm9yIHJlZz0weCV4LCBkYXRhPTB4JXgsIHJldD0laVxuIiwKIAkJCV9fZnVuY19fLCByZWcsIGRhdGEsIHJldCk7CiAKIAlyZXR1cm4gKHJldCAhPSAxKSA/IC1FSU8gOiAwOwpAQCAtNzgsMTQgKzc3LDEzIEBACiAKIAlyZXQgPSBpMmNfdHJhbnNmZXIocHJpdi0+aTJjLCBtc2csIDIpOwogCWlmIChyZXQgIT0gMikgewotCQlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBlcnJvciByZWc9MHgleCwgcmV0PSVpXG4iLAotCQkJX19mdW5jX18sIHJlZywgcmV0KTsKKwkJZHByaW50aygiJXM6IGVycm9yIHJlZz0weCV4LCByZXQ9JWlcbiIsIF9fZnVuY19fLCByZWcsIHJldCk7CiAJCXJldHVybiAtRUlPOwogCX0KIAogCSpwX2RhdGEgPSBiMVswXTsKIAlpZiAoZGVidWcgPj0gMikKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiByZWc9MHglMDJYLCBkYXRhPTB4JTAyWFxuIiwKKwkJZHByaW50aygiJXM6IHJlZz0weCUwMlgsIGRhdGE9MHglMDJYXG4iLAogCQkJX19mdW5jX18sIHJlZywgYjFbMF0pOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjE4LmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhMTgyMTguYwppbmRleCA4ZGExZmRlLi5hYWNmZTIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhMTgyMTguYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhMTgyMTguYwpAQCAtMjgsNyArMjgsNyBAQAogLyogd3JpdGUgbXVsdGlwbGUgcmVnaXN0ZXJzICovCiBzdGF0aWMgaW50IHRkYTE4MjE4X3dyX3JlZ3Moc3RydWN0IHRkYTE4MjE4X3ByaXYgKnByaXYsIHU4IHJlZywgdTggKnZhbCwgdTggbGVuKQogewotCWludCByZXQ7CisJaW50IHJldCA9IDA7CiAJdTggYnVmWzErbGVuXSwgcXVvdGllbnQsIHJlbWFpbmRlciwgaSwgbXNnX2xlbiwgbXNnX2xlbl9tYXg7CiAJc3RydWN0IGkyY19tc2cgbXNnWzFdID0gewogCQl7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kbTExMDUvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvZHZiL2RtMTEwNS9LY29uZmlnCmluZGV4IGE2Y2ViMDguLmYzZGUwYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2RtMTEwNS9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2RtMTEwNS9LY29uZmlnCkBAIC0xLDcgKzEsNiBAQAogY29uZmlnIERWQl9ETTExMDUKIAl0cmlzdGF0ZSAiU0RNQyBETTExMDUgYmFzZWQgUENJIGNhcmRzIgogCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgUENJICYmIEkyQwotCWRlcGVuZHMgb24gSU5QVVQKIAlzZWxlY3QgRFZCX1BMTCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfU1RWMDI5OSBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfU1RWMDI4OCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQpAQCAtOSw3ICs4LDcgQEAKIAlzZWxlY3QgRFZCX0NYMjQxMTYgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX1NJMjFYWCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfRFMzMDAwIGlmICFEVkJfRkVfQ1VTVE9NSVNFCi0JZGVwZW5kcyBvbiBWSURFT19JUgorCWRlcGVuZHMgb24gUkNfQ09SRQogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIGNhcmRzIGJhc2VkIG9uIHRoZSBTRE1DIERNMTEwNSBQQ0kgY2hpcCBsaWtlCiAJICBEdmJXb3JsZCAyMDAyCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kbTExMDUvZG0xMTA1LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kbTExMDUvZG0xMTA1LmMKaW5kZXggNWQ0MDRmMS4uMmQ4YjQwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZG0xMTA1L2RtMTEwNS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2RtMTEwNS9kbTExMDUuYwpAQCAtMjYsOSArMjYsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgotI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPG1lZGlhL2lyLWNvcmUuaD4KKyNpbmNsdWRlIDxtZWRpYS9yYy1jb3JlLmg+CiAKICNpbmNsdWRlICJkZW11eC5oIgogI2luY2x1ZGUgImRteGRldi5oIgpAQCAtMjY2LDcgKzI2NSw3IEBACiAKIC8qIGluZnJhcmVkIHJlbW90ZSBjb250cm9sICovCiBzdHJ1Y3QgaW5mcmFyZWQgewotCXN0cnVjdCBpbnB1dF9kZXYJKmlucHV0X2RldjsKKwlzdHJ1Y3QgcmNfZGV2CQkqZGV2OwogCWNoYXIJCQlpbnB1dF9waHlzWzMyXTsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QJd29yazsKIAl1MzIJCQlpcl9jb21tYW5kOwpAQCAtNTMyLDcgKzUzMSw3IEBACiAKIAlkYXRhID0gKGlyY29tID4+IDgpICYgMHg3ZjsKIAotCWlyX2tleWRvd24oaXItPmlucHV0X2RldiwgZGF0YSwgMCk7CisJcmNfa2V5ZG93bihpci0+ZGV2LCBkYXRhLCAwKTsKIH0KIAogLyogd29yayBoYW5kbGVyICovCkBAIC01OTMsNDYgKzU5Miw0NyBAQAogCiBpbnQgX19kZXZpbml0IGRtMTEwNV9pcl9pbml0KHN0cnVjdCBkbTExMDVfZGV2ICpkbTExMDUpCiB7Ci0Jc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OwotCWNoYXIgKmlyX2NvZGVzID0gUkNfTUFQX0RNMTEwNV9ORUM7CisJc3RydWN0IHJjX2RldiAqZGV2OwogCWludCBlcnIgPSAtRU5PTUVNOwogCi0JaW5wdXRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7Ci0JaWYgKCFpbnB1dF9kZXYpCisJZGV2ID0gcmNfYWxsb2NhdGVfZGV2aWNlKCk7CisJaWYgKCFkZXYpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JZG0xMTA1LT5pci5pbnB1dF9kZXYgPSBpbnB1dF9kZXY7CiAJc25wcmludGYoZG0xMTA1LT5pci5pbnB1dF9waHlzLCBzaXplb2YoZG0xMTA1LT5pci5pbnB1dF9waHlzKSwKIAkJInBjaS0lcy9pcjAiLCBwY2lfbmFtZShkbTExMDUtPnBkZXYpKTsKIAotCWlucHV0X2Rldi0+bmFtZSA9ICJEVkIgb24tY2FyZCBJUiByZWNlaXZlciI7Ci0JaW5wdXRfZGV2LT5waHlzID0gZG0xMTA1LT5pci5pbnB1dF9waHlzOwotCWlucHV0X2Rldi0+aWQuYnVzdHlwZSA9IEJVU19QQ0k7Ci0JaW5wdXRfZGV2LT5pZC52ZXJzaW9uID0gMTsKKwlkZXYtPmRyaXZlcl9uYW1lID0gTU9EVUxFX05BTUU7CisJZGV2LT5tYXBfbmFtZSA9IFJDX01BUF9ETTExMDVfTkVDOworCWRldi0+ZHJpdmVyX3R5cGUgPSBSQ19EUklWRVJfU0NBTkNPREU7CisJZGV2LT5pbnB1dF9uYW1lID0gIkRWQiBvbi1jYXJkIElSIHJlY2VpdmVyIjsKKwlkZXYtPmlucHV0X3BoeXMgPSBkbTExMDUtPmlyLmlucHV0X3BoeXM7CisJZGV2LT5pbnB1dF9pZC5idXN0eXBlID0gQlVTX1BDSTsKKwlkZXYtPmlucHV0X2lkLnZlcnNpb24gPSAxOwogCWlmIChkbTExMDUtPnBkZXYtPnN1YnN5c3RlbV92ZW5kb3IpIHsKLQkJaW5wdXRfZGV2LT5pZC52ZW5kb3IgPSBkbTExMDUtPnBkZXYtPnN1YnN5c3RlbV92ZW5kb3I7Ci0JCWlucHV0X2Rldi0+aWQucHJvZHVjdCA9IGRtMTEwNS0+cGRldi0+c3Vic3lzdGVtX2RldmljZTsKKwkJZGV2LT5pbnB1dF9pZC52ZW5kb3IgPSBkbTExMDUtPnBkZXYtPnN1YnN5c3RlbV92ZW5kb3I7CisJCWRldi0+aW5wdXRfaWQucHJvZHVjdCA9IGRtMTEwNS0+cGRldi0+c3Vic3lzdGVtX2RldmljZTsKIAl9IGVsc2UgewotCQlpbnB1dF9kZXYtPmlkLnZlbmRvciA9IGRtMTEwNS0+cGRldi0+dmVuZG9yOwotCQlpbnB1dF9kZXYtPmlkLnByb2R1Y3QgPSBkbTExMDUtPnBkZXYtPmRldmljZTsKKwkJZGV2LT5pbnB1dF9pZC52ZW5kb3IgPSBkbTExMDUtPnBkZXYtPnZlbmRvcjsKKwkJZGV2LT5pbnB1dF9pZC5wcm9kdWN0ID0gZG0xMTA1LT5wZGV2LT5kZXZpY2U7CiAJfQotCi0JaW5wdXRfZGV2LT5kZXYucGFyZW50ID0gJmRtMTEwNS0+cGRldi0+ZGV2OworCWRldi0+ZGV2LnBhcmVudCA9ICZkbTExMDUtPnBkZXYtPmRldjsKIAogCUlOSVRfV09SSygmZG0xMTA1LT5pci53b3JrLCBkbTExMDVfZW1pdF9rZXkpOwogCi0JZXJyID0gaXJfaW5wdXRfcmVnaXN0ZXIoaW5wdXRfZGV2LCBpcl9jb2RlcywgTlVMTCwgTU9EVUxFX05BTUUpOworCWVyciA9IHJjX3JlZ2lzdGVyX2RldmljZShkZXYpOwogCWlmIChlcnIgPCAwKSB7Ci0JCWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0X2Rldik7CisJCXJjX2ZyZWVfZGV2aWNlKGRldik7CiAJCXJldHVybiBlcnI7CiAJfQogCisJZG0xMTA1LT5pci5kZXYgPSBkZXY7CiAJcmV0dXJuIDA7CiB9CiAKIHZvaWQgX19kZXZleGl0IGRtMTEwNV9pcl9leGl0KHN0cnVjdCBkbTExMDVfZGV2ICpkbTExMDUpCiB7Ci0JaXJfaW5wdXRfdW5yZWdpc3RlcihkbTExMDUtPmlyLmlucHV0X2Rldik7CisJcmNfdW5yZWdpc3Rlcl9kZXZpY2UoZG0xMTA1LT5pci5kZXYpOwogfQogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBkbTExMDVfaHdfaW5pdChzdHJ1Y3QgZG0xMTA1X2RldiAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZG14ZGV2LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kbXhkZXYuYwppbmRleCBhZDFmNjFkLi5lNGI1YzAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kbXhkZXYuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kbXhkZXYuYwpAQCAtNTcyLDEzICs1NzIsMTMgQEAKIAlkbXhfb3V0cHV0X3Qgb3R5cGU7CiAJaW50IHJldDsKIAlpbnQgdHNfdHlwZTsKLQllbnVtIGRteF90c19wZXMgdHNfcGVzOworCWRteF9wZXNfdHlwZV90IHRzX3BlczsKIAlzdHJ1Y3QgZG14X3RzX2ZlZWQgKnRzZmVlZDsKIAogCWZlZWQtPnRzID0gTlVMTDsKIAlvdHlwZSA9IHBhcmEtPm91dHB1dDsKIAotCXRzX3BlcyA9IChlbnVtIGRteF90c19wZXMpcGFyYS0+cGVzX3R5cGU7CisJdHNfcGVzID0gcGFyYS0+cGVzX3R5cGU7CiAKIAlpZiAodHNfcGVzIDwgRE1YX1BFU19PVEhFUikKIAkJdHNfdHlwZSA9IFRTX0RFQ09ERVI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfbmV0LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfbmV0LmMKaW5kZXggNGRmNDJhYS4uNTE3NTJhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX25ldC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9uZXQuYwpAQCAtMTMyOSw3ICsxMzI5LDggQEAKIAkJcmV0dXJuIC1FQlVTWTsKIAogCWR2Yl9uZXRfc3RvcChuZXQpOwotCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisJZmx1c2hfd29ya19zeW5jKCZwcml2LT5zZXRfbXVsdGljYXN0X2xpc3Rfd3EpOworCWZsdXNoX3dvcmtfc3luYygmcHJpdi0+cmVzdGFydF9uZXRfZmVlZF93cSk7CiAJcHJpbnRrKCJkdmJfbmV0OiByZW1vdmVkIG5ldHdvcmsgaW50ZXJmYWNlICVzXG4iLCBuZXQtPm5hbWUpOwogCXVucmVnaXN0ZXJfbmV0ZGV2KG5ldCk7CiAJZHZibmV0LT5zdGF0ZVtudW1dPTA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL0tjb25maWcKaW5kZXggMjUyNWQzYi4uM2Q0OGJhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvS2NvbmZpZwpAQCAtMSw2ICsxLDYgQEAKIGNvbmZpZyBEVkJfVVNCCiAJdHJpc3RhdGUgIlN1cHBvcnQgZm9yIHZhcmlvdXMgVVNCIERWQiBkZXZpY2VzIgotCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgVVNCICYmIEkyQyAmJiBJUl9DT1JFCisJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBVU0IgJiYgSTJDICYmIFJDX0NPUkUKIAloZWxwCiAJICBCeSBlbmFibGluZyB0aGlzIHlvdSB3aWxsIGJlIGFibGUgdG8gY2hvb3NlIHRoZSB2YXJpb3VzIHN1cHBvcnRlZAogCSAgVVNCMS4xIGFuZCBVU0IyLjAgRFZCIGRldmljZXMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2E4MDAuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYTgwMC5jCmluZGV4IGE1YzM2MzcuLjUzYjkzYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYTgwMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYTgwMC5jCkBAIC0zNyw3ICszNyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfYTgwMF90YWJsZVtdID0geworc3RhdGljIHN0cnVjdCByY19tYXBfdGFibGUgcmNfbWFwX2E4MDBfdGFibGVbXSA9IHsKIAl7IDB4MDIwMSwgS0VZX1BST0cxIH0sICAgICAgIC8qIFNPVVJDRSAqLwogCXsgMHgwMjAwLCBLRVlfUE9XRVIgfSwgICAgICAgLyogUE9XRVIgKi8KIAl7IDB4MDIwNSwgS0VZXzEgfSwgICAgICAgICAgIC8qIDEgKi8KQEAgLTE0OCw4ICsxNDgsOCBAQAogCiAJLnJjLmxlZ2FjeSA9IHsKIAkJLnJjX2ludGVydmFsICAgICAgPSBERUZBVUxUX1JDX0lOVEVSVkFMLAotCQkucmNfa2V5X21hcCAgICAgICA9IGlyX2NvZGVzX2E4MDBfdGFibGUsCi0JCS5yY19rZXlfbWFwX3NpemUgID0gQVJSQVlfU0laRShpcl9jb2Rlc19hODAwX3RhYmxlKSwKKwkJLnJjX21hcF90YWJsZSAgICAgPSByY19tYXBfYTgwMF90YWJsZSwKKwkJLnJjX21hcF9zaXplICAgICAgPSBBUlJBWV9TSVpFKHJjX21hcF9hODAwX3RhYmxlKSwKIAkJLnJjX3F1ZXJ5ICAgICAgICAgPSBhODAwX3JjX3F1ZXJ5LAogCX0sCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYWY5MDA1LXJlbW90ZS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hZjkwMDUtcmVtb3RlLmMKaW5kZXggNjk2MjA3Zi4uYzNiYzY0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hZjkwMDUtcmVtb3RlLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hZjkwMDUtcmVtb3RlLmMKQEAgLTMzLDcgKzMzLDcgQEAKIAogI2RlZmluZSBkZWJfZGVjb2RlKGFyZ3MuLi4pICAgZHByaW50ayhkdmJfdXNiX2FmOTAwNV9yZW1vdGVfZGVidWcsMHgwMSxhcmdzKQogCi1zdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfYWY5MDA1X3RhYmxlW10gPSB7CitzdHJ1Y3QgcmNfbWFwX3RhYmxlIHJjX21hcF9hZjkwMDVfdGFibGVbXSA9IHsKIAogCXsweDAxYjcsIEtFWV9QT1dFUn0sCiAJezB4MDFhNywgS0VZX1ZPTFVNRVVQfSwKQEAgLTc0LDcgKzc0LDcgQEAKIAl7MHgwMGQ1LCBLRVlfR09UT30sCS8qIG1hcmtlZCBqdW1wIG9uIHRoZSByZW1vdGUgKi8KIH07CiAKLWludCBpcl9jb2Rlc19hZjkwMDVfdGFibGVfc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfYWY5MDA1X3RhYmxlKTsKK2ludCByY19tYXBfYWY5MDA1X3RhYmxlX3NpemUgPSBBUlJBWV9TSVpFKHJjX21hcF9hZjkwMDVfdGFibGUpOwogCiBzdGF0aWMgaW50IHJlcGVhdGFibGVfa2V5c1tdID0gewogCUtFWV9WT0xVTUVVUCwKQEAgLTEzMCwxMCArMTMwLDEwIEBACiAJCQkJZGViX2RlY29kZSgiY29kZSAhPSBpbnZlcnRlZCBjb2RlXG4iKTsKIAkJCQlyZXR1cm4gMDsKIAkJCX0KLQkJCWZvciAoaSA9IDA7IGkgPCBpcl9jb2Rlc19hZjkwMDVfdGFibGVfc2l6ZTsgaSsrKSB7Ci0JCQkJaWYgKHJjNV9jdXN0b20oJmlyX2NvZGVzX2FmOTAwNV90YWJsZVtpXSkgPT0gY3VzdAotCQkJCSAgICAmJiByYzVfZGF0YSgmaXJfY29kZXNfYWY5MDA1X3RhYmxlW2ldKSA9PSBkYXQpIHsKLQkJCQkJKmV2ZW50ID0gaXJfY29kZXNfYWY5MDA1X3RhYmxlW2ldLmtleWNvZGU7CisJCQlmb3IgKGkgPSAwOyBpIDwgcmNfbWFwX2FmOTAwNV90YWJsZV9zaXplOyBpKyspIHsKKwkJCQlpZiAocmM1X2N1c3RvbSgmcmNfbWFwX2FmOTAwNV90YWJsZVtpXSkgPT0gY3VzdAorCQkJCSAgICAmJiByYzVfZGF0YSgmcmNfbWFwX2FmOTAwNV90YWJsZVtpXSkgPT0gZGF0KSB7CisJCQkJCSpldmVudCA9IHJjX21hcF9hZjkwMDVfdGFibGVbaV0ua2V5Y29kZTsKIAkJCQkJKnN0YXRlID0gUkVNT1RFX0tFWV9QUkVTU0VEOwogCQkJCQlkZWJfZGVjb2RlCiAJCQkJCSAgICAoImtleSBwcmVzc2VkLCBldmVudCAleFxuIiwgKmV2ZW50KTsKQEAgLTE0Niw4ICsxNDYsOCBAQAogCXJldHVybiAwOwogfQogCi1FWFBPUlRfU1lNQk9MKGlyX2NvZGVzX2FmOTAwNV90YWJsZSk7Ci1FWFBPUlRfU1lNQk9MKGlyX2NvZGVzX2FmOTAwNV90YWJsZV9zaXplKTsKK0VYUE9SVF9TWU1CT0wocmNfbWFwX2FmOTAwNV90YWJsZSk7CitFWFBPUlRfU1lNQk9MKHJjX21hcF9hZjkwMDVfdGFibGVfc2l6ZSk7CiBFWFBPUlRfU1lNQk9MKGFmOTAwNV9yY19kZWNvZGUpOwogCiBNT0RVTEVfQVVUSE9SKCJMdWNhIE9saXZldHRpIDxsdWNhQHZlbnRvc28ub3JnPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hZjkwMDUuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYWY5MDA1LmMKaW5kZXggOGVjYmE4OC4uNTFmNjQzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hZjkwMDUuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FmOTAwNS5jCkBAIC0xMDI3LDggKzEwMjcsOCBAQAogCiAJLnJjLmxlZ2FjeSA9IHsKIAkJLnJjX2ludGVydmFsID0gMjAwLAotCQkucmNfa2V5X21hcCA9IE5VTEwsCi0JCS5yY19rZXlfbWFwX3NpemUgPSAwLAorCQkucmNfbWFwX3RhYmxlID0gTlVMTCwKKwkJLnJjX21hcF9zaXplID0gMCwKIAkJLnJjX3F1ZXJ5ID0gYWY5MDA1X3JjX3F1ZXJ5LAogCX0sCiAKQEAgLTEwNzAsMTQgKzEwNzAsMTQgQEAKIAkJcmV0dXJuIHJlc3VsdDsKIAl9CiAJcmNfZGVjb2RlID0gc3ltYm9sX3JlcXVlc3QoYWY5MDA1X3JjX2RlY29kZSk7Ci0JcmNfa2V5cyA9IHN5bWJvbF9yZXF1ZXN0KGlyX2NvZGVzX2FmOTAwNV90YWJsZSk7Ci0JcmNfa2V5c19zaXplID0gc3ltYm9sX3JlcXVlc3QoaXJfY29kZXNfYWY5MDA1X3RhYmxlX3NpemUpOworCXJjX2tleXMgPSBzeW1ib2xfcmVxdWVzdChyY19tYXBfYWY5MDA1X3RhYmxlKTsKKwlyY19rZXlzX3NpemUgPSBzeW1ib2xfcmVxdWVzdChyY19tYXBfYWY5MDA1X3RhYmxlX3NpemUpOwogCWlmIChyY19kZWNvZGUgPT0gTlVMTCB8fCByY19rZXlzID09IE5VTEwgfHwgcmNfa2V5c19zaXplID09IE5VTEwpIHsKIAkJZXJyKCJhZjkwMDVfcmNfZGVjb2RlIGZ1bmN0aW9uIG5vdCBmb3VuZCwgZGlzYWJsaW5nIHJlbW90ZSIpOwogCQlhZjkwMDVfcHJvcGVydGllcy5yYy5sZWdhY3kucmNfcXVlcnkgPSBOVUxMOwogCX0gZWxzZSB7Ci0JCWFmOTAwNV9wcm9wZXJ0aWVzLnJjLmxlZ2FjeS5yY19rZXlfbWFwID0gcmNfa2V5czsKLQkJYWY5MDA1X3Byb3BlcnRpZXMucmMubGVnYWN5LnJjX2tleV9tYXBfc2l6ZSA9ICpyY19rZXlzX3NpemU7CisJCWFmOTAwNV9wcm9wZXJ0aWVzLnJjLmxlZ2FjeS5yY19tYXBfdGFibGUgPSByY19rZXlzOworCQlhZjkwMDVfcHJvcGVydGllcy5yYy5sZWdhY3kucmNfbWFwX3NpemUgPSAqcmNfa2V5c19zaXplOwogCX0KIAogCXJldHVybiAwOwpAQCAtMTA4OSw5ICsxMDg5LDkgQEAKIAlpZiAocmNfZGVjb2RlICE9IE5VTEwpCiAJCXN5bWJvbF9wdXQoYWY5MDA1X3JjX2RlY29kZSk7CiAJaWYgKHJjX2tleXMgIT0gTlVMTCkKLQkJc3ltYm9sX3B1dChpcl9jb2Rlc19hZjkwMDVfdGFibGUpOworCQlzeW1ib2xfcHV0KHJjX21hcF9hZjkwMDVfdGFibGUpOwogCWlmIChyY19rZXlzX3NpemUgIT0gTlVMTCkKLQkJc3ltYm9sX3B1dChpcl9jb2Rlc19hZjkwMDVfdGFibGVfc2l6ZSk7CisJCXN5bWJvbF9wdXQocmNfbWFwX2FmOTAwNV90YWJsZV9zaXplKTsKIAkvKiBkZXJlZ2lzdGVyIHRoaXMgZHJpdmVyIGZyb20gdGhlIFVTQiBzdWJzeXN0ZW0gKi8KIAl1c2JfZGVyZWdpc3RlcigmYWY5MDA1X3VzYl9kcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hZjkwMDUuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYWY5MDA1LmgKaW5kZXggM2MxZmJkMS4uYzcxYzc3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hZjkwMDUuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FmOTAwNS5oCkBAIC0zNDkwLDcgKzM0OTAsNyBAQAogLyogcmVtb3RlIGNvbnRyb2wgZGVjb2RlciAqLwogZXh0ZXJuIGludCBhZjkwMDVfcmNfZGVjb2RlKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgdTggKiBkYXRhLCBpbnQgbGVuLAogCQkJICAgIHUzMiAqIGV2ZW50LCBpbnQgKnN0YXRlKTsKLWV4dGVybiBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfYWY5MDA1X3RhYmxlW107Ci1leHRlcm4gaW50IGlyX2NvZGVzX2FmOTAwNV90YWJsZV9zaXplOworZXh0ZXJuIHN0cnVjdCByY19tYXBfdGFibGUgcmNfbWFwX2FmOTAwNV90YWJsZVtdOworZXh0ZXJuIGludCByY19tYXBfYWY5MDA1X3RhYmxlX3NpemU7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hZjkwMTUuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYWY5MDE1LmMKaW5kZXggMzFjMGEwZS4uODY3MWNhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hZjkwMTUuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FmOTAxNS5jCkBAIC0xMDQxLDEzICsxMDQxLDEzIEBACiAJCQkJcHJpdi0+cmNfa2V5Y29kZSA9IGJ1ZlsxMl0gPDwgMTYgfAogCQkJCQlidWZbMTNdIDw8IDggfCBidWZbMTRdOwogCQkJfQotCQkJaXJfa2V5ZG93bihkLT5yY19pbnB1dF9kZXYsIHByaXYtPnJjX2tleWNvZGUsIDApOworCQkJcmNfa2V5ZG93bihkLT5yY19kZXYsIHByaXYtPnJjX2tleWNvZGUsIDApOwogCQl9IGVsc2UgewogCQkJcHJpdi0+cmNfa2V5Y29kZSA9IDA7IC8qIGNsZWFyIGp1c3QgZm9yIHN1cmUgKi8KIAkJfQogCX0gZWxzZSBpZiAocHJpdi0+cmNfcmVwZWF0ICE9IGJ1Zls2XSB8fCBidWZbMF0pIHsKIAkJZGViX3JjKCIlczoga2V5IHJlcGVhdGVkXG4iLCBfX2Z1bmNfXyk7Ci0JCWlyX2tleWRvd24oZC0+cmNfaW5wdXRfZGV2LCBwcml2LT5yY19rZXljb2RlLCAwKTsKKwkJcmNfa2V5ZG93bihkLT5yY19kZXYsIHByaXYtPnJjX2tleWNvZGUsIDApOwogCX0gZWxzZSB7CiAJCWRlYl9yYygiJXM6IG5vIGtleSBwcmVzc1xuIiwgX19mdW5jX18pOwogCX0KQEAgLTEzNDQsMTMgKzEzNDQsMTEgQEAKIAkJLmlkZW50aWZ5X3N0YXRlID0gYWY5MDE1X2lkZW50aWZ5X3N0YXRlLAogCiAJCS5yYy5jb3JlID0gewotCQkJLnByb3RvY29sICAgICAgICAgPSBJUl9UWVBFX05FQywKKwkJCS5wcm90b2NvbCAgICAgICAgID0gUkNfVFlQRV9ORUMsCiAJCQkubW9kdWxlX25hbWUgICAgICA9ICJhZjkwMTUiLAogCQkJLnJjX3F1ZXJ5ICAgICAgICAgPSBhZjkwMTVfcmNfcXVlcnksCiAJCQkucmNfaW50ZXJ2YWwgICAgICA9IEFGOTAxNV9SQ19JTlRFUlZBTCwKLQkJCS5yY19wcm9wcyA9IHsKLQkJCQkuYWxsb3dlZF9wcm90b3MgPSBJUl9UWVBFX05FQywKLQkJCX0sCisJCQkuYWxsb3dlZF9wcm90b3MgICA9IFJDX1RZUEVfTkVDLAogCQl9LAogCiAJCS5pMmNfYWxnbyA9ICZhZjkwMTVfaTJjX2FsZ28sCkBAIC0xNDc0LDEzICsxNDcyLDExIEBACiAJCS5pZGVudGlmeV9zdGF0ZSA9IGFmOTAxNV9pZGVudGlmeV9zdGF0ZSwKIAogCQkucmMuY29yZSA9IHsKLQkJCS5wcm90b2NvbCAgICAgICAgID0gSVJfVFlQRV9ORUMsCisJCQkucHJvdG9jb2wgICAgICAgICA9IFJDX1RZUEVfTkVDLAogCQkJLm1vZHVsZV9uYW1lICAgICAgPSAiYWY5MDE1IiwKIAkJCS5yY19xdWVyeSAgICAgICAgID0gYWY5MDE1X3JjX3F1ZXJ5LAogCQkJLnJjX2ludGVydmFsICAgICAgPSBBRjkwMTVfUkNfSU5URVJWQUwsCi0JCQkucmNfcHJvcHMgPSB7Ci0JCQkJLmFsbG93ZWRfcHJvdG9zID0gSVJfVFlQRV9ORUMsCi0JCQl9LAorCQkJLmFsbG93ZWRfcHJvdG9zICAgPSBSQ19UWVBFX05FQywKIAkJfSwKIAogCQkuaTJjX2FsZ28gPSAmYWY5MDE1X2kyY19hbGdvLApAQCAtMTU4OCwxMyArMTU4NCwxMSBAQAogCQkuaWRlbnRpZnlfc3RhdGUgPSBhZjkwMTVfaWRlbnRpZnlfc3RhdGUsCiAKIAkJLnJjLmNvcmUgPSB7Ci0JCQkucHJvdG9jb2wgICAgICAgICA9IElSX1RZUEVfTkVDLAorCQkJLnByb3RvY29sICAgICAgICAgPSBSQ19UWVBFX05FQywKIAkJCS5tb2R1bGVfbmFtZSAgICAgID0gImFmOTAxNSIsCiAJCQkucmNfcXVlcnkgICAgICAgICA9IGFmOTAxNV9yY19xdWVyeSwKIAkJCS5yY19pbnRlcnZhbCAgICAgID0gQUY5MDE1X1JDX0lOVEVSVkFMLAotCQkJLnJjX3Byb3BzID0gewotCQkJCS5hbGxvd2VkX3Byb3RvcyA9IElSX1RZUEVfTkVDLAotCQkJfSwKKwkJCS5hbGxvd2VkX3Byb3RvcyAgID0gUkNfVFlQRV9ORUMsCiAJCX0sCiAKIAkJLmkyY19hbGdvID0gJmFmOTAxNV9pMmNfYWxnbywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYW55c2VlLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FueXNlZS5jCmluZGV4IDE3NTlkMjYuLjZiNDAyZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYW55c2VlLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hbnlzZWUuYwpAQCAtMzk0LDcgKzM5NCw3IEBACiAKIAlpZiAoaXJjb2RlWzBdKSB7CiAJCWRlYl9yYygiJXM6IGtleSBwcmVzc2VkICUwMnhcbiIsIF9fZnVuY19fLCBpcmNvZGVbMV0pOwotCQlpcl9rZXlkb3duKGQtPnJjX2lucHV0X2RldiwgMHgwOCA8PCA4IHwgaXJjb2RlWzFdLCAwKTsKKwkJcmNfa2V5ZG93bihkLT5yY19kZXYsIDB4MDggPDwgOCB8IGlyY29kZVsxXSwgMCk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC00NzYsNyArNDc2LDcgQEAKIAogCS5yYy5jb3JlID0gewogCQkucmNfY29kZXMgICAgICAgICA9IFJDX01BUF9BTllTRUUsCi0JCS5wcm90b2NvbCAgICAgICAgID0gSVJfVFlQRV9PVEhFUiwKKwkJLnByb3RvY29sICAgICAgICAgPSBSQ19UWVBFX09USEVSLAogCQkubW9kdWxlX25hbWUgICAgICA9ICJhbnlzZWUiLAogCQkucmNfcXVlcnkgICAgICAgICA9IGFueXNlZV9yY19xdWVyeSwKIAkJLnJjX2ludGVydmFsICAgICAgPSAyNTAsICAvKiB3aW5kb3dzIGRyaXZlciB1c2VzIDUwMG1zICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2F6NjAyNy5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hejYwMjcuYwppbmRleCA2MmM1ODI4Li41N2UyNDQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2F6NjAyNy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYXo2MDI3LmMKQEAgLTM4Niw3ICszODYsNyBAQAogfQogCiAvKiBrZXlzIGZvciB0aGUgZW5jbG9zZWQgcmVtb3RlIGNvbnRyb2wgKi8KLXN0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfYXo2MDI3X3RhYmxlW10gPSB7CitzdGF0aWMgc3RydWN0IHJjX21hcF90YWJsZSByY19tYXBfYXo2MDI3X3RhYmxlW10gPSB7CiAJeyAweDAxLCBLRVlfMSB9LAogCXsgMHgwMiwgS0VZXzIgfSwKIH07CkBAIC0xMDg5LDYgKzEwODksNyBAQAogCXsgVVNCX0RFVklDRShVU0JfVklEX1RFUlJBVEVDLCAgVVNCX1BJRF9URVJSQVRFQ19EVkJTMkNJX1YyKSB9LAogCXsgVVNCX0RFVklDRShVU0JfVklEX1RFQ0hOSVNBVCwgVVNCX1BJRF9URUNITklTQVRfVVNCMl9IRENJX1YxKSB9LAogCXsgVVNCX0RFVklDRShVU0JfVklEX1RFQ0hOSVNBVCwgVVNCX1BJRF9URUNITklTQVRfVVNCMl9IRENJX1YyKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVklEX0VMR0FUTywgVVNCX1BJRF9FTEdBVE9fRVlFVFZfU0FUKSB9LAogCXsgfSwKIH07CiAKQEAgLTExMjYsMTUgKzExMjcsMTUgQEAKIAkucmVhZF9tYWNfYWRkcmVzcyA9IGF6NjAyN19yZWFkX21hY19hZGRyLAogICovCiAJLnJjLmxlZ2FjeSA9IHsKLQkJLnJjX2tleV9tYXAgICAgICAgPSBpcl9jb2Rlc19hejYwMjdfdGFibGUsCi0JCS5yY19rZXlfbWFwX3NpemUgID0gQVJSQVlfU0laRShpcl9jb2Rlc19hejYwMjdfdGFibGUpLAorCQkucmNfbWFwX3RhYmxlICAgICA9IHJjX21hcF9hejYwMjdfdGFibGUsCisJCS5yY19tYXBfc2l6ZSAgICAgID0gQVJSQVlfU0laRShyY19tYXBfYXo2MDI3X3RhYmxlKSwKIAkJLnJjX2ludGVydmFsICAgICAgPSA0MDAsCiAJCS5yY19xdWVyeSAgICAgICAgID0gYXo2MDI3X3JjX3F1ZXJ5LAogCX0sCiAKIAkuaTJjX2FsZ28gICAgICAgICA9ICZhejYwMjdfaTJjX2FsZ28sCiAKLQkubnVtX2RldmljZV9kZXNjcyA9IDUsCisJLm51bV9kZXZpY2VfZGVzY3MgPSA2LAogCS5kZXZpY2VzID0gewogCQl7CiAJCQkubmFtZSA9ICJBWlVSRVdBVkUgRFZCLVMvUzIgVVNCMi4wIChBWjYwMjcpIiwKQEAgLTExNTYsNiArMTE1NywxMCBAQAogCQkJLm5hbWUgPSAiVGVjaG5pc2F0IFNreVN0YXIgVVNCIDIgSEQgQ0kiLAogCQkJLmNvbGRfaWRzID0geyAmYXo2MDI3X3VzYl90YWJsZVs0XSwgTlVMTCB9LAogCQkJLndhcm1faWRzID0geyBOVUxMIH0sCisJCX0sIHsKKwkJCS5uYW1lID0gIkVsZ2F0byBFeWVUViBTYXQiLAorCQkJLmNvbGRfaWRzID0geyAmYXo2MDI3X3VzYl90YWJsZVs1XSwgTlVMTCB9LAorCQkJLndhcm1faWRzID0geyBOVUxMIH0sCiAJCX0sCiAJCXsgTlVMTCB9LAogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY2luZXJneVQyLWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY2luZXJneVQyLWNvcmUuYwppbmRleCA0ZjVhYTgzZi4uMTZmMmNlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9jaW5lcmd5VDItY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY2luZXJneVQyLWNvcmUuYwpAQCAtODQsNyArODQsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX2NpbmVyZ3l0Ml90YWJsZVtdID0geworc3RhdGljIHN0cnVjdCByY19tYXBfdGFibGUgcmNfbWFwX2NpbmVyZ3l0Ml90YWJsZVtdID0gewogCXsgMHgwNDAxLCBLRVlfUE9XRVIgfSwKIAl7IDB4MDQwMiwgS0VZXzEgfSwKIAl7IDB4MDQwMywgS0VZXzIgfSwKQEAgLTIxOSw4ICsyMTksOCBAQAogCiAJLnJjLmxlZ2FjeSA9IHsKIAkJLnJjX2ludGVydmFsICAgICAgPSA1MCwKLQkJLnJjX2tleV9tYXAgICAgICAgPSBpcl9jb2Rlc19jaW5lcmd5dDJfdGFibGUsCi0JCS5yY19rZXlfbWFwX3NpemUgID0gQVJSQVlfU0laRShpcl9jb2Rlc19jaW5lcmd5dDJfdGFibGUpLAorCQkucmNfbWFwX3RhYmxlICAgICA9IHJjX21hcF9jaW5lcmd5dDJfdGFibGUsCisJCS5yY19tYXBfc2l6ZSAgICAgID0gQVJSQVlfU0laRShyY19tYXBfY2luZXJneXQyX3RhYmxlKSwKIAkJLnJjX3F1ZXJ5ICAgICAgICAgPSBjaW5lcmd5dDJfcmNfcXVlcnksCiAJfSwKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9jeHVzYi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9jeHVzYi5jCmluZGV4IGNkOWYzNjIuLmFjYjVmYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY3h1c2IuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2N4dXNiLmMKQEAgLTM4NSw3ICszODUsNyBAQAogCiBzdGF0aWMgaW50IGN4dXNiX3JjX3F1ZXJ5KHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgdTMyICpldmVudCwgaW50ICpzdGF0ZSkKIHsKLQlzdHJ1Y3QgaXJfc2NhbmNvZGUgKmtleW1hcCA9IGQtPnByb3BzLnJjLmxlZ2FjeS5yY19rZXlfbWFwOworCXN0cnVjdCByY19tYXBfdGFibGUgKmtleW1hcCA9IGQtPnByb3BzLnJjLmxlZ2FjeS5yY19tYXBfdGFibGU7CiAJdTggaXJjb2RlWzRdOwogCWludCBpOwogCkBAIC0zOTQsNyArMzk0LDcgQEAKIAkqZXZlbnQgPSAwOwogCSpzdGF0ZSA9IFJFTU9URV9OT19LRVlfUFJFU1NFRDsKIAotCWZvciAoaSA9IDA7IGkgPCBkLT5wcm9wcy5yYy5sZWdhY3kucmNfa2V5X21hcF9zaXplOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgZC0+cHJvcHMucmMubGVnYWN5LnJjX21hcF9zaXplOyBpKyspIHsKIAkJaWYgKHJjNV9jdXN0b20oJmtleW1hcFtpXSkgPT0gaXJjb2RlWzJdICYmCiAJCSAgICByYzVfZGF0YSgma2V5bWFwW2ldKSA9PSBpcmNvZGVbM10pIHsKIAkJCSpldmVudCA9IGtleW1hcFtpXS5rZXljb2RlOwpAQCAtNDEwLDcgKzQxMCw3IEBACiBzdGF0aWMgaW50IGN4dXNiX2JsdWViaXJkMl9yY19xdWVyeShzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIHUzMiAqZXZlbnQsCiAJCQkJICAgIGludCAqc3RhdGUpCiB7Ci0Jc3RydWN0IGlyX3NjYW5jb2RlICprZXltYXAgPSBkLT5wcm9wcy5yYy5sZWdhY3kucmNfa2V5X21hcDsKKwlzdHJ1Y3QgcmNfbWFwX3RhYmxlICprZXltYXAgPSBkLT5wcm9wcy5yYy5sZWdhY3kucmNfbWFwX3RhYmxlOwogCXU4IGlyY29kZVs0XTsKIAlpbnQgaTsKIAlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7IC5hZGRyID0gMHg2YiwgLmZsYWdzID0gSTJDX01fUkQsCkBAIC00MjIsNyArNDIyLDcgQEAKIAlpZiAoY3h1c2JfaTJjX3hmZXIoJmQtPmkyY19hZGFwLCAmbXNnLCAxKSAhPSAxKQogCQlyZXR1cm4gMDsKIAotCWZvciAoaSA9IDA7IGkgPCBkLT5wcm9wcy5yYy5sZWdhY3kucmNfa2V5X21hcF9zaXplOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgZC0+cHJvcHMucmMubGVnYWN5LnJjX21hcF9zaXplOyBpKyspIHsKIAkJaWYgKHJjNV9jdXN0b20oJmtleW1hcFtpXSkgPT0gaXJjb2RlWzFdICYmCiAJCSAgICByYzVfZGF0YSgma2V5bWFwW2ldKSA9PSBpcmNvZGVbMl0pIHsKIAkJCSpldmVudCA9IGtleW1hcFtpXS5rZXljb2RlOwpAQCAtNDM4LDcgKzQzOCw3IEBACiBzdGF0aWMgaW50IGN4dXNiX2Q2ODBfZG1iX3JjX3F1ZXJ5KHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgdTMyICpldmVudCwKIAkJaW50ICpzdGF0ZSkKIHsKLQlzdHJ1Y3QgaXJfc2NhbmNvZGUgKmtleW1hcCA9IGQtPnByb3BzLnJjLmxlZ2FjeS5yY19rZXlfbWFwOworCXN0cnVjdCByY19tYXBfdGFibGUgKmtleW1hcCA9IGQtPnByb3BzLnJjLmxlZ2FjeS5yY19tYXBfdGFibGU7CiAJdTggaXJjb2RlWzJdOwogCWludCBpOwogCkBAIC00NDgsNyArNDQ4LDcgQEAKIAlpZiAoY3h1c2JfY3RybF9tc2coZCwgMHgxMCwgTlVMTCwgMCwgaXJjb2RlLCAyKSA8IDApCiAJCXJldHVybiAwOwogCi0JZm9yIChpID0gMDsgaSA8IGQtPnByb3BzLnJjLmxlZ2FjeS5yY19rZXlfbWFwX3NpemU7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBkLT5wcm9wcy5yYy5sZWdhY3kucmNfbWFwX3NpemU7IGkrKykgewogCQlpZiAocmM1X2N1c3RvbSgma2V5bWFwW2ldKSA9PSBpcmNvZGVbMF0gJiYKIAkJICAgIHJjNV9kYXRhKCZrZXltYXBbaV0pID09IGlyY29kZVsxXSkgewogCQkJKmV2ZW50ID0ga2V5bWFwW2ldLmtleWNvZGU7CkBAIC00NjEsNyArNDYxLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc19kdmljb19tY2VfdGFibGVbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcmNfbWFwX3RhYmxlIHJjX21hcF9kdmljb19tY2VfdGFibGVbXSA9IHsKIAl7IDB4ZmUwMiwgS0VZX1RWIH0sCiAJeyAweGZlMGUsIEtFWV9NUDMgfSwKIAl7IDB4ZmUxYSwgS0VZX0RWRCB9LApAQCAtNTA5LDcgKzUwOSw3IEBACiAJeyAweGZlNGUsIEtFWV9QT1dFUiB9LAogfTsKIAotc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc19kdmljb19wb3J0YWJsZV90YWJsZVtdID0geworc3RhdGljIHN0cnVjdCByY19tYXBfdGFibGUgcmNfbWFwX2R2aWNvX3BvcnRhYmxlX3RhYmxlW10gPSB7CiAJeyAweGZjMDIsIEtFWV9TRVRVUCB9LCAgICAgICAvKiBQcm9maWxlICovCiAJeyAweGZjNDMsIEtFWV9QT1dFUjIgfSwKIAl7IDB4ZmMwNiwgS0VZX0VQRyB9LApAQCAtNTQ4LDcgKzU0OCw3IEBACiAJeyAweGZjMDAsIEtFWV9VTktOT1dOIH0sICAgIC8qIEhEICovCiB9OwogCi1zdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX2Q2ODBfZG1iX3RhYmxlW10gPSB7CitzdGF0aWMgc3RydWN0IHJjX21hcF90YWJsZSByY19tYXBfZDY4MF9kbWJfdGFibGVbXSA9IHsKIAl7IDB4MDAzOCwgS0VZX1VOS05PV04gfSwJLyogVFYvQVYgKi8KIAl7IDB4MDgwYywgS0VZX1pPT00gfSwKIAl7IDB4MDgwMCwgS0VZXzAgfSwKQEAgLTkyMyw3ICs5MjMsNyBAQAogCQlyZXR1cm4gLUVJTzsKIAogCS8qIHRyeSB0byBkZXRlcm1pbmUgaWYgdGhlcmUgaXMgbm8gSVIgZGVjb2RlciBvbiB0aGUgSTJDIGJ1cyAqLwotCWZvciAoaSA9IDA7IGFkYXAtPmRldi0+cHJvcHMucmMubGVnYWN5LnJjX2tleV9tYXAgIT0gTlVMTCAmJiBpIDwgNTsgaSsrKSB7CisJZm9yIChpID0gMDsgYWRhcC0+ZGV2LT5wcm9wcy5yYy5sZWdhY3kucmNfbWFwX3RhYmxlICE9IE5VTEwgJiYgaSA8IDU7IGkrKykgewogCQltc2xlZXAoMjApOwogCQlpZiAoY3h1c2JfaTJjX3hmZXIoJmFkYXAtPmRldi0+aTJjX2FkYXAsICZtc2csIDEpICE9IDEpCiAJCQlnb3RvIG5vX0lSOwpAQCAtOTMxLDcgKzkzMSw3IEBACiAJCQljb250aW51ZTsKIAkJaWYgKGlyY29kZVsyXSArIGlyY29kZVszXSAhPSAweGZmKSB7CiBub19JUjoKLQkJCWFkYXAtPmRldi0+cHJvcHMucmMubGVnYWN5LnJjX2tleV9tYXAgPSBOVUxMOworCQkJYWRhcC0+ZGV2LT5wcm9wcy5yYy5sZWdhY3kucmNfbWFwX3RhYmxlID0gTlVMTDsKIAkJCWluZm8oIk5vIElSIHJlY2VpdmVyIGRldGVjdGVkIG9uIHRoaXMgZGV2aWNlLiIpOwogCQkJYnJlYWs7CiAJCX0KQEAgLTE0NTMsOCArMTQ1Myw4IEBACiAKIAkucmMubGVnYWN5ID0gewogCQkucmNfaW50ZXJ2YWwgICAgICA9IDEwMCwKLQkJLnJjX2tleV9tYXAgICAgICAgPSBpcl9jb2Rlc19kdmljb19wb3J0YWJsZV90YWJsZSwKLQkJLnJjX2tleV9tYXBfc2l6ZSAgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX2R2aWNvX3BvcnRhYmxlX3RhYmxlKSwKKwkJLnJjX21hcF90YWJsZSAgICAgPSByY19tYXBfZHZpY29fcG9ydGFibGVfdGFibGUsCisJCS5yY19tYXBfc2l6ZSAgICAgID0gQVJSQVlfU0laRShyY19tYXBfZHZpY29fcG9ydGFibGVfdGFibGUpLAogCQkucmNfcXVlcnkgICAgICAgICA9IGN4dXNiX3JjX3F1ZXJ5LAogCX0sCiAKQEAgLTE1MDYsOCArMTUwNiw4IEBACiAKIAkucmMubGVnYWN5ID0gewogCQkucmNfaW50ZXJ2YWwgICAgICA9IDE1MCwKLQkJLnJjX2tleV9tYXAgICAgICAgPSBpcl9jb2Rlc19kdmljb19tY2VfdGFibGUsCi0JCS5yY19rZXlfbWFwX3NpemUgID0gQVJSQVlfU0laRShpcl9jb2Rlc19kdmljb19tY2VfdGFibGUpLAorCQkucmNfbWFwX3RhYmxlICAgICA9IHJjX21hcF9kdmljb19tY2VfdGFibGUsCisJCS5yY19tYXBfc2l6ZSAgICAgID0gQVJSQVlfU0laRShyY19tYXBfZHZpY29fbWNlX3RhYmxlKSwKIAkJLnJjX3F1ZXJ5ICAgICAgICAgPSBjeHVzYl9yY19xdWVyeSwKIAl9LAogCkBAIC0xNTY3LDggKzE1NjcsOCBAQAogCiAJLnJjLmxlZ2FjeSA9IHsKIAkJLnJjX2ludGVydmFsICAgICAgPSAxMDAsCi0JCS5yY19rZXlfbWFwICAgICAgID0gaXJfY29kZXNfZHZpY29fcG9ydGFibGVfdGFibGUsCi0JCS5yY19rZXlfbWFwX3NpemUgID0gQVJSQVlfU0laRShpcl9jb2Rlc19kdmljb19wb3J0YWJsZV90YWJsZSksCisJCS5yY19tYXBfdGFibGUgICAgID0gcmNfbWFwX2R2aWNvX3BvcnRhYmxlX3RhYmxlLAorCQkucmNfbWFwX3NpemUgICAgICA9IEFSUkFZX1NJWkUocmNfbWFwX2R2aWNvX3BvcnRhYmxlX3RhYmxlKSwKIAkJLnJjX3F1ZXJ5ICAgICAgICAgPSBjeHVzYl9yY19xdWVyeSwKIAl9LAogCkBAIC0xNjE5LDggKzE2MTksOCBAQAogCiAJLnJjLmxlZ2FjeSA9IHsKIAkJLnJjX2ludGVydmFsICAgICAgPSAxMDAsCi0JCS5yY19rZXlfbWFwICAgICAgID0gaXJfY29kZXNfZHZpY29fcG9ydGFibGVfdGFibGUsCi0JCS5yY19rZXlfbWFwX3NpemUgID0gQVJSQVlfU0laRShpcl9jb2Rlc19kdmljb19wb3J0YWJsZV90YWJsZSksCisJCS5yY19tYXBfdGFibGUgICAgID0gcmNfbWFwX2R2aWNvX3BvcnRhYmxlX3RhYmxlLAorCQkucmNfbWFwX3NpemUgICAgICA9IEFSUkFZX1NJWkUocmNfbWFwX2R2aWNvX3BvcnRhYmxlX3RhYmxlKSwKIAkJLnJjX3F1ZXJ5ICAgICAgICAgPSBjeHVzYl9yY19xdWVyeSwKIAl9LAogCkBAIC0xNjcwLDggKzE2NzAsOCBAQAogCiAJLnJjLmxlZ2FjeSA9IHsKIAkJLnJjX2ludGVydmFsICAgICAgPSAxMDAsCi0JCS5yY19rZXlfbWFwICAgICAgID0gaXJfY29kZXNfZHZpY29fbWNlX3RhYmxlLAotCQkucmNfa2V5X21hcF9zaXplICA9IEFSUkFZX1NJWkUoaXJfY29kZXNfZHZpY29fbWNlX3RhYmxlKSwKKwkJLnJjX21hcF90YWJsZSAgICAgPSByY19tYXBfZHZpY29fbWNlX3RhYmxlLAorCQkucmNfbWFwX3NpemUgICAgICA9IEFSUkFZX1NJWkUocmNfbWFwX2R2aWNvX21jZV90YWJsZSksCiAJCS5yY19xdWVyeSAgICAgICAgID0gY3h1c2JfYmx1ZWJpcmQyX3JjX3F1ZXJ5LAogCX0sCiAKQEAgLTE3MjAsOCArMTcyMCw4IEBACiAKIAkucmMubGVnYWN5ID0gewogCQkucmNfaW50ZXJ2YWwgICAgICA9IDEwMCwKLQkJLnJjX2tleV9tYXAgICAgICAgPSBpcl9jb2Rlc19kdmljb19wb3J0YWJsZV90YWJsZSwKLQkJLnJjX2tleV9tYXBfc2l6ZSAgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX2R2aWNvX3BvcnRhYmxlX3RhYmxlKSwKKwkJLnJjX21hcF90YWJsZSAgICAgPSByY19tYXBfZHZpY29fcG9ydGFibGVfdGFibGUsCisJCS5yY19tYXBfc2l6ZSAgICAgID0gQVJSQVlfU0laRShyY19tYXBfZHZpY29fcG9ydGFibGVfdGFibGUpLAogCQkucmNfcXVlcnkgICAgICAgICA9IGN4dXNiX2JsdWViaXJkMl9yY19xdWVyeSwKIAl9LAogCkBAIC0xNzcyLDggKzE3NzIsOCBAQAogCiAJLnJjLmxlZ2FjeSA9IHsKIAkJLnJjX2ludGVydmFsICAgICAgPSAxMDAsCi0JCS5yY19rZXlfbWFwICAgICAgID0gaXJfY29kZXNfZHZpY29fcG9ydGFibGVfdGFibGUsCi0JCS5yY19rZXlfbWFwX3NpemUgID0gQVJSQVlfU0laRShpcl9jb2Rlc19kdmljb19wb3J0YWJsZV90YWJsZSksCisJCS5yY19tYXBfdGFibGUgICAgID0gcmNfbWFwX2R2aWNvX3BvcnRhYmxlX3RhYmxlLAorCQkucmNfbWFwX3NpemUgICAgICA9IEFSUkFZX1NJWkUocmNfbWFwX2R2aWNvX3BvcnRhYmxlX3RhYmxlKSwKIAkJLnJjX3F1ZXJ5ICAgICAgICAgPSBjeHVzYl9yY19xdWVyeSwKIAl9LAogCkBAIC0xODY1LDggKzE4NjUsOCBAQAogCiAJLnJjLmxlZ2FjeSA9IHsKIAkJLnJjX2ludGVydmFsICAgICAgPSAxMDAsCi0JCS5yY19rZXlfbWFwICAgICAgID0gaXJfY29kZXNfZHZpY29fbWNlX3RhYmxlLAotCQkucmNfa2V5X21hcF9zaXplICA9IEFSUkFZX1NJWkUoaXJfY29kZXNfZHZpY29fbWNlX3RhYmxlKSwKKwkJLnJjX21hcF90YWJsZSAgICAgPSByY19tYXBfZHZpY29fbWNlX3RhYmxlLAorCQkucmNfbWFwX3NpemUgICAgICA9IEFSUkFZX1NJWkUocmNfbWFwX2R2aWNvX21jZV90YWJsZSksCiAJCS5yY19xdWVyeSAgICAgICAgID0gY3h1c2JfcmNfcXVlcnksCiAJfSwKIApAQCAtMTkxNSw4ICsxOTE1LDggQEAKIAogCS5yYy5sZWdhY3kgPSB7CiAJCS5yY19pbnRlcnZhbCAgICAgID0gMTAwLAotCQkucmNfa2V5X21hcCAgICAgICA9IGlyX2NvZGVzX2Q2ODBfZG1iX3RhYmxlLAotCQkucmNfa2V5X21hcF9zaXplICA9IEFSUkFZX1NJWkUoaXJfY29kZXNfZDY4MF9kbWJfdGFibGUpLAorCQkucmNfbWFwX3RhYmxlICAgICA9IHJjX21hcF9kNjgwX2RtYl90YWJsZSwKKwkJLnJjX21hcF9zaXplICAgICAgPSBBUlJBWV9TSVpFKHJjX21hcF9kNjgwX2RtYl90YWJsZSksCiAJCS5yY19xdWVyeSAgICAgICAgID0gY3h1c2JfZDY4MF9kbWJfcmNfcXVlcnksCiAJfSwKIApAQCAtMTk2Niw4ICsxOTY2LDggQEAKIAogCS5yYy5sZWdhY3kgPSB7CiAJCS5yY19pbnRlcnZhbCAgICAgID0gMTAwLAotCQkucmNfa2V5X21hcCAgICAgICA9IGlyX2NvZGVzX2Q2ODBfZG1iX3RhYmxlLAotCQkucmNfa2V5X21hcF9zaXplICA9IEFSUkFZX1NJWkUoaXJfY29kZXNfZDY4MF9kbWJfdGFibGUpLAorCQkucmNfbWFwX3RhYmxlICAgICA9IHJjX21hcF9kNjgwX2RtYl90YWJsZSwKKwkJLnJjX21hcF9zaXplICAgICAgPSBBUlJBWV9TSVpFKHJjX21hcF9kNjgwX2RtYl90YWJsZSksCiAJCS5yY19xdWVyeSAgICAgICAgID0gY3h1c2JfZDY4MF9kbWJfcmNfcXVlcnksCiAJfSwKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDAuaAppbmRleCBjMmM5ZDIzLi4zNTM3ZDY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDAuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDAuaApAQCAtNjAsNyArNjAsNyBAQAogZXh0ZXJuIHN0cnVjdCBpMmNfYWxnb3JpdGhtIGRpYjA3MDBfaTJjX2FsZ287CiBleHRlcm4gaW50IGRpYjA3MDBfaWRlbnRpZnlfc3RhdGUoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzICpwcm9wcywKIAkJCXN0cnVjdCBkdmJfdXNiX2RldmljZV9kZXNjcmlwdGlvbiAqKmRlc2MsIGludCAqY29sZCk7Ci1leHRlcm4gaW50IGRpYjA3MDBfY2hhbmdlX3Byb3RvY29sKHZvaWQgKnByaXYsIHU2NCBpcl90eXBlKTsKK2V4dGVybiBpbnQgZGliMDcwMF9jaGFuZ2VfcHJvdG9jb2woc3RydWN0IHJjX2RldiAqZGV2LCB1NjQgcmNfdHlwZSk7CiAKIGV4dGVybiBpbnQgZGliMDcwMF9kZXZpY2VfY291bnQ7CiBleHRlcm4gaW50IGR2Yl91c2JfZGliMDcwMF9pcl9wcm90bzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMF9jb3JlLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDBfY29yZS5jCmluZGV4IDQ4Mzk3ZjEuLjhjYTQ4ZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMF9jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwX2NvcmUuYwpAQCAtNDcxLDE5ICs0NzEsMTkgQEAKIAlyZXR1cm4gZGliMDcwMF9jdHJsX3dyKGFkYXAtPmRldiwgYiwgNCk7CiB9CiAKLWludCBkaWIwNzAwX2NoYW5nZV9wcm90b2NvbCh2b2lkICpwcml2LCB1NjQgaXJfdHlwZSkKK2ludCBkaWIwNzAwX2NoYW5nZV9wcm90b2NvbChzdHJ1Y3QgcmNfZGV2ICpyYywgdTY0IHJjX3R5cGUpCiB7Ci0Jc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkID0gcHJpdjsKKwlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQgPSByYy0+cHJpdjsKIAlzdHJ1Y3QgZGliMDcwMF9zdGF0ZSAqc3QgPSBkLT5wcml2OwogCXU4IHJjX3NldHVwWzNdID0geyBSRVFVRVNUX1NFVF9SQywgMCwgMCB9OwogCWludCBuZXdfcHJvdG8sIHJldDsKIAogCS8qIFNldCB0aGUgSVIgbW9kZSAqLwotCWlmIChpcl90eXBlID09IElSX1RZUEVfUkM1KQorCWlmIChyY190eXBlID09IFJDX1RZUEVfUkM1KQogCQluZXdfcHJvdG8gPSAxOwotCWVsc2UgaWYgKGlyX3R5cGUgPT0gSVJfVFlQRV9ORUMpCisJZWxzZSBpZiAocmNfdHlwZSA9PSBSQ19UWVBFX05FQykKIAkJbmV3X3Byb3RvID0gMDsKLQllbHNlIGlmIChpcl90eXBlID09IElSX1RZUEVfUkM2KSB7CisJZWxzZSBpZiAocmNfdHlwZSA9PSBSQ19UWVBFX1JDNikgewogCQlpZiAoc3QtPmZ3X3ZlcnNpb24gPCAweDEwMjAwKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTQ5OSw3ICs0OTksNyBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAotCWQtPnByb3BzLnJjLmNvcmUucHJvdG9jb2wgPSBpcl90eXBlOworCWQtPnByb3BzLnJjLmNvcmUucHJvdG9jb2wgPSByY190eXBlOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTUzNSw3ICs1MzUsNyBAQAogCWlmIChkID09IE5VTEwpCiAJCXJldHVybjsKIAotCWlmIChkLT5yY19pbnB1dF9kZXYgPT0gTlVMTCkgeworCWlmIChkLT5yY19kZXYgPT0gTlVMTCkgewogCQkvKiBUaGlzIHdpbGwgb2NjdXIgaWYgZGlzYWJsZV9yY19wb2xsaW5nPTEgKi8KIAkJdXNiX2ZyZWVfdXJiKHB1cmIpOwogCQlyZXR1cm47CkBAIC01NjIsNyArNTYyLDcgQEAKIAkJIHB1cmItPmFjdHVhbF9sZW5ndGgpOwogCiAJc3dpdGNoIChkLT5wcm9wcy5yYy5jb3JlLnByb3RvY29sKSB7Ci0JY2FzZSBJUl9UWVBFX05FQzoKKwljYXNlIFJDX1RZUEVfTkVDOgogCQl0b2dnbGUgPSAwOwogCiAJCS8qIE5FQyBwcm90b2NvbCBzZW5kcyByZXBlYXQgY29kZSBhcyAwIDAgMCBGRiAqLwpAQCAtNjAwLDcgKzYwMCw3IEBACiAJCWdvdG8gcmVzdWJtaXQ7CiAJfQogCi0JaXJfa2V5ZG93bihkLT5yY19pbnB1dF9kZXYsIGtleWNvZGUsIHRvZ2dsZSk7CisJcmNfa2V5ZG93bihkLT5yY19kZXYsIGtleWNvZGUsIHRvZ2dsZSk7CiAKIHJlc3VibWl0OgogCS8qIENsZWFuIHRoZSBidWZmZXIgYmVmb3JlIHdlIHJlcXVldWUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMF9kZXZpY2VzLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDBfZGV2aWNlcy5jCmluZGV4IGUwNmFjZDEuLmRlZmQ4MzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMF9kZXZpY2VzLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwX2RldmljZXMuYwpAQCAtNTEwLDcgKzUxMCw3IEBACiAKIAlkLT5sYXN0X2V2ZW50ID0gMDsKIAlzd2l0Y2ggKGQtPnByb3BzLnJjLmNvcmUucHJvdG9jb2wpIHsKLQljYXNlIElSX1RZUEVfTkVDOgorCWNhc2UgUkNfVFlQRV9ORUM6CiAJCS8qIE5FQyBwcm90b2NvbCBzZW5kcyByZXBlYXQgY29kZSBhcyAwIDAgMCBGRiAqLwogCQlpZiAoKGtleVszLTJdID09IDB4MDApICYmIChrZXlbMy0zXSA9PSAweDAwKSAmJgogCQkgICAgKGtleVszXSA9PSAweGZmKSkKQEAgLTUyMCwxMyArNTIwLDEzIEBACiAJCQlkLT5sYXN0X2V2ZW50ID0ga2V5Y29kZTsKIAkJfQogCi0JCWlyX2tleWRvd24oZC0+cmNfaW5wdXRfZGV2LCBrZXljb2RlLCAwKTsKKwkJcmNfa2V5ZG93bihkLT5yY19kZXYsIGtleWNvZGUsIDApOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQkvKiBSQy01IHByb3RvY29sIGNoYW5nZXMgdG9nZ2xlIGJpdCBvbiBuZXcga2V5cHJlc3MgKi8KIAkJa2V5Y29kZSA9IGtleVszLTJdIDw8IDggfCBrZXlbMy0zXTsKIAkJdG9nZ2xlID0ga2V5WzMtMV07Ci0JCWlyX2tleWRvd24oZC0+cmNfaW5wdXRfZGV2LCBrZXljb2RlLCB0b2dnbGUpOworCQlyY19rZXlkb3duKGQtPnJjX2Rldiwga2V5Y29kZSwgdG9nZ2xlKTsKIAogCQlicmVhazsKIAl9CkBAIC0xOTI0LDEyICsxOTI0LDEwIEBACiAJCQkucmNfaW50ZXJ2YWwgICAgICA9IERFRkFVTFRfUkNfSU5URVJWQUwsCiAJCQkucmNfY29kZXMgICAgICAgICA9IFJDX01BUF9ESUIwNzAwX1JDNV9UQUJMRSwKIAkJCS5yY19xdWVyeSAgICAgICAgID0gZGliMDcwMF9yY19xdWVyeV9vbGRfZmlybXdhcmUsCi0JCQkucmNfcHJvcHMgPSB7Ci0JCQkJLmFsbG93ZWRfcHJvdG9zID0gSVJfVFlQRV9SQzUgfAotCQkJCQkJICBJUl9UWVBFX1JDNiB8Ci0JCQkJCQkgIElSX1RZUEVfTkVDLAotCQkJCS5jaGFuZ2VfcHJvdG9jb2wgPSBkaWIwNzAwX2NoYW5nZV9wcm90b2NvbCwKLQkJCX0sCisJCQkuYWxsb3dlZF9wcm90b3MgICA9IFJDX1RZUEVfUkM1IHwKKwkJCQkJICAgIFJDX1RZUEVfUkM2IHwKKwkJCQkJICAgIFJDX1RZUEVfTkVDLAorCQkJLmNoYW5nZV9wcm90b2NvbCAgPSBkaWIwNzAwX2NoYW5nZV9wcm90b2NvbCwKIAkJfSwKIAl9LCB7IERJQjA3MDBfREVGQVVMVF9ERVZJQ0VfUFJPUEVSVElFUywKIApAQCAtMTk2MCwxMiArMTk1OCwxMCBAQAogCQkJLnJjX2ludGVydmFsICAgICAgPSBERUZBVUxUX1JDX0lOVEVSVkFMLAogCQkJLnJjX2NvZGVzICAgICAgICAgPSBSQ19NQVBfRElCMDcwMF9SQzVfVEFCTEUsCiAJCQkucmNfcXVlcnkgICAgICAgICA9IGRpYjA3MDBfcmNfcXVlcnlfb2xkX2Zpcm13YXJlLAotCQkJLnJjX3Byb3BzID0gewotCQkJCS5hbGxvd2VkX3Byb3RvcyA9IElSX1RZUEVfUkM1IHwKLQkJCQkJCSAgSVJfVFlQRV9SQzYgfAotCQkJCQkJICBJUl9UWVBFX05FQywKLQkJCQkuY2hhbmdlX3Byb3RvY29sID0gZGliMDcwMF9jaGFuZ2VfcHJvdG9jb2wsCi0JCQl9LAorCQkJLmFsbG93ZWRfcHJvdG9zICAgPSBSQ19UWVBFX1JDNSB8CisJCQkJCSAgICBSQ19UWVBFX1JDNiB8CisJCQkJCSAgICBSQ19UWVBFX05FQywKKwkJCS5jaGFuZ2VfcHJvdG9jb2wgPSBkaWIwNzAwX2NoYW5nZV9wcm90b2NvbCwKIAkJfSwKIAl9LCB7IERJQjA3MDBfREVGQVVMVF9ERVZJQ0VfUFJPUEVSVElFUywKIApAQCAtMjAyMSwxMiArMjAxNywxMCBAQAogCQkJLnJjX2ludGVydmFsICAgICAgPSBERUZBVUxUX1JDX0lOVEVSVkFMLAogCQkJLnJjX2NvZGVzICAgICAgICAgPSBSQ19NQVBfRElCMDcwMF9SQzVfVEFCTEUsCiAJCQkucmNfcXVlcnkgICAgICAgICA9IGRpYjA3MDBfcmNfcXVlcnlfb2xkX2Zpcm13YXJlLAotCQkJLnJjX3Byb3BzID0gewotCQkJCS5hbGxvd2VkX3Byb3RvcyA9IElSX1RZUEVfUkM1IHwKLQkJCQkJCSAgSVJfVFlQRV9SQzYgfAotCQkJCQkJICBJUl9UWVBFX05FQywKLQkJCQkuY2hhbmdlX3Byb3RvY29sID0gZGliMDcwMF9jaGFuZ2VfcHJvdG9jb2wsCi0JCQl9LAorCQkJLmFsbG93ZWRfcHJvdG9zICAgPSBSQ19UWVBFX1JDNSB8CisJCQkJCSAgICBSQ19UWVBFX1JDNiB8CisJCQkJCSAgICBSQ19UWVBFX05FQywKKwkJCS5jaGFuZ2VfcHJvdG9jb2wgPSBkaWIwNzAwX2NoYW5nZV9wcm90b2NvbCwKIAkJfSwKIAl9LCB7IERJQjA3MDBfREVGQVVMVF9ERVZJQ0VfUFJPUEVSVElFUywKIApAQCAtMjA2NSwxMiArMjA1OSwxMCBAQAogCQkJLnJjX2NvZGVzICAgICAgICAgPSBSQ19NQVBfRElCMDcwMF9SQzVfVEFCTEUsCiAJCQkubW9kdWxlX25hbWUJICA9ICJkaWIwNzAwIiwKIAkJCS5yY19xdWVyeSAgICAgICAgID0gZGliMDcwMF9yY19xdWVyeV9vbGRfZmlybXdhcmUsCi0JCQkucmNfcHJvcHMgPSB7Ci0JCQkJLmFsbG93ZWRfcHJvdG9zID0gSVJfVFlQRV9SQzUgfAotCQkJCQkJICBJUl9UWVBFX1JDNiB8Ci0JCQkJCQkgIElSX1RZUEVfTkVDLAotCQkJCS5jaGFuZ2VfcHJvdG9jb2wgPSBkaWIwNzAwX2NoYW5nZV9wcm90b2NvbCwKLQkJCX0sCisJCQkuYWxsb3dlZF9wcm90b3MgICA9IFJDX1RZUEVfUkM1IHwKKwkJCQkJICAgIFJDX1RZUEVfUkM2IHwKKwkJCQkJICAgIFJDX1RZUEVfTkVDLAorCQkJLmNoYW5nZV9wcm90b2NvbCA9IGRpYjA3MDBfY2hhbmdlX3Byb3RvY29sLAogCQl9LAogCX0sIHsgRElCMDcwMF9ERUZBVUxUX0RFVklDRV9QUk9QRVJUSUVTLAogCkBAIC0yMTQzLDEyICsyMTM1LDEwIEBACiAJCQkucmNfY29kZXMgICAgICAgICA9IFJDX01BUF9ESUIwNzAwX1JDNV9UQUJMRSwKIAkJCS5tb2R1bGVfbmFtZQkgID0gImRpYjA3MDAiLAogCQkJLnJjX3F1ZXJ5ICAgICAgICAgPSBkaWIwNzAwX3JjX3F1ZXJ5X29sZF9maXJtd2FyZSwKLQkJCS5yY19wcm9wcyA9IHsKLQkJCQkuYWxsb3dlZF9wcm90b3MgPSBJUl9UWVBFX1JDNSB8Ci0JCQkJCQkgIElSX1RZUEVfUkM2IHwKLQkJCQkJCSAgSVJfVFlQRV9ORUMsCi0JCQkJLmNoYW5nZV9wcm90b2NvbCA9IGRpYjA3MDBfY2hhbmdlX3Byb3RvY29sLAotCQkJfSwKKwkJCS5hbGxvd2VkX3Byb3RvcyAgID0gUkNfVFlQRV9SQzUgfAorCQkJCQkgICAgUkNfVFlQRV9SQzYgfAorCQkJCQkgICAgUkNfVFlQRV9ORUMsCisJCQkuY2hhbmdlX3Byb3RvY29sICA9IGRpYjA3MDBfY2hhbmdlX3Byb3RvY29sLAogCQl9LAogCX0sIHsgRElCMDcwMF9ERUZBVUxUX0RFVklDRV9QUk9QRVJUSUVTLAogCkBAIC0yMTg5LDEyICsyMTc5LDEwIEBACiAJCQkucmNfY29kZXMgICAgICAgICA9IFJDX01BUF9ESUIwNzAwX1JDNV9UQUJMRSwKIAkJCS5tb2R1bGVfbmFtZQkgID0gImRpYjA3MDAiLAogCQkJLnJjX3F1ZXJ5ICAgICAgICAgPSBkaWIwNzAwX3JjX3F1ZXJ5X29sZF9maXJtd2FyZSwKLQkJCS5yY19wcm9wcyA9IHsKLQkJCQkuYWxsb3dlZF9wcm90b3MgPSBJUl9UWVBFX1JDNSB8Ci0JCQkJCQkgIElSX1RZUEVfUkM2IHwKLQkJCQkJCSAgSVJfVFlQRV9ORUMsCi0JCQkJLmNoYW5nZV9wcm90b2NvbCA9IGRpYjA3MDBfY2hhbmdlX3Byb3RvY29sLAotCQkJfSwKKwkJCS5hbGxvd2VkX3Byb3RvcyAgID0gUkNfVFlQRV9SQzUgfAorCQkJCQkgICAgUkNfVFlQRV9SQzYgfAorCQkJCQkgICAgUkNfVFlQRV9ORUMsCisJCQkuY2hhbmdlX3Byb3RvY29sICA9IGRpYjA3MDBfY2hhbmdlX3Byb3RvY29sLAogCQl9LAogCX0sIHsgRElCMDcwMF9ERUZBVUxUX0RFVklDRV9QUk9QRVJUSUVTLAogCkBAIC0yMjU5LDEyICsyMjQ3LDEwIEBACiAJCQkucmNfY29kZXMgICAgICAgICA9IFJDX01BUF9ESUIwNzAwX1JDNV9UQUJMRSwKIAkJCS5tb2R1bGVfbmFtZQkgID0gImRpYjA3MDAiLAogCQkJLnJjX3F1ZXJ5ICAgICAgICAgPSBkaWIwNzAwX3JjX3F1ZXJ5X29sZF9maXJtd2FyZSwKLQkJCS5yY19wcm9wcyA9IHsKLQkJCQkuYWxsb3dlZF9wcm90b3MgPSBJUl9UWVBFX1JDNSB8Ci0JCQkJCQkgIElSX1RZUEVfUkM2IHwKLQkJCQkJCSAgSVJfVFlQRV9ORUMsCi0JCQkJLmNoYW5nZV9wcm90b2NvbCA9IGRpYjA3MDBfY2hhbmdlX3Byb3RvY29sLAotCQkJfSwKKwkJCS5hbGxvd2VkX3Byb3RvcyAgID0gUkNfVFlQRV9SQzUgfAorCQkJCQkgICAgUkNfVFlQRV9SQzYgfAorCQkJCQkgICAgUkNfVFlQRV9ORUMsCisJCQkuY2hhbmdlX3Byb3RvY29sID0gZGliMDcwMF9jaGFuZ2VfcHJvdG9jb2wsCiAJCX0sCiAJfSwgeyBESUIwNzAwX0RFRkFVTFRfREVWSUNFX1BST1BFUlRJRVMsCiAKQEAgLTIzMDgsMTIgKzIyOTQsMTAgQEAKIAkJCS5yY19jb2RlcyAgICAgICAgID0gUkNfTUFQX0RJQjA3MDBfTkVDX1RBQkxFLAogCQkJLm1vZHVsZV9uYW1lCSAgPSAiZGliMDcwMCIsCiAJCQkucmNfcXVlcnkgICAgICAgICA9IGRpYjA3MDBfcmNfcXVlcnlfb2xkX2Zpcm13YXJlLAotCQkJLnJjX3Byb3BzID0gewotCQkJCS5hbGxvd2VkX3Byb3RvcyA9IElSX1RZUEVfUkM1IHwKLQkJCQkJCSAgSVJfVFlQRV9SQzYgfAotCQkJCQkJICBJUl9UWVBFX05FQywKLQkJCQkuY2hhbmdlX3Byb3RvY29sID0gZGliMDcwMF9jaGFuZ2VfcHJvdG9jb2wsCi0JCQl9LAorCQkJLmFsbG93ZWRfcHJvdG9zICAgPSBSQ19UWVBFX1JDNSB8CisJCQkJCSAgICBSQ19UWVBFX1JDNiB8CisJCQkJCSAgICBSQ19UWVBFX05FQywKKwkJCS5jaGFuZ2VfcHJvdG9jb2wgID0gZGliMDcwMF9jaGFuZ2VfcHJvdG9jb2wsCiAJCX0sCiAJfSwgeyBESUIwNzAwX0RFRkFVTFRfREVWSUNFX1BST1BFUlRJRVMsCiAKQEAgLTIzNzksMTIgKzIzNjMsMTAgQEAKIAkJCS5yY19jb2RlcyAgICAgICAgID0gUkNfTUFQX0RJQjA3MDBfUkM1X1RBQkxFLAogCQkJLm1vZHVsZV9uYW1lCSAgPSAiZGliMDcwMCIsCiAJCQkucmNfcXVlcnkgICAgICAgICA9IGRpYjA3MDBfcmNfcXVlcnlfb2xkX2Zpcm13YXJlLAotCQkJLnJjX3Byb3BzID0gewotCQkJCS5hbGxvd2VkX3Byb3RvcyA9IElSX1RZUEVfUkM1IHwKLQkJCQkJCSAgSVJfVFlQRV9SQzYgfAotCQkJCQkJICBJUl9UWVBFX05FQywKLQkJCQkuY2hhbmdlX3Byb3RvY29sID0gZGliMDcwMF9jaGFuZ2VfcHJvdG9jb2wsCi0JCQl9LAorCQkJLmFsbG93ZWRfcHJvdG9zICAgPSBSQ19UWVBFX1JDNSB8CisJCQkJCSAgICBSQ19UWVBFX1JDNiB8CisJCQkJCSAgICBSQ19UWVBFX05FQywKKwkJCS5jaGFuZ2VfcHJvdG9jb2wgID0gZGliMDcwMF9jaGFuZ2VfcHJvdG9jb2wsCiAJCX0sCiAJfSwgeyBESUIwNzAwX0RFRkFVTFRfREVWSUNFX1BST1BFUlRJRVMsCiAJCS5udW1fYWRhcHRlcnMgPSAxLApAQCAtMjQxNywxMiArMjM5OSwxMCBAQAogCQkJLnJjX2NvZGVzICAgICAgICAgPSBSQ19NQVBfRElCMDcwMF9SQzVfVEFCTEUsCiAJCQkubW9kdWxlX25hbWUJICA9ICJkaWIwNzAwIiwKIAkJCS5yY19xdWVyeSAgICAgICAgID0gZGliMDcwMF9yY19xdWVyeV9vbGRfZmlybXdhcmUsCi0JCQkucmNfcHJvcHMgPSB7Ci0JCQkJLmFsbG93ZWRfcHJvdG9zID0gSVJfVFlQRV9SQzUgfAotCQkJCQkJICBJUl9UWVBFX1JDNiB8Ci0JCQkJCQkgIElSX1RZUEVfTkVDLAotCQkJCS5jaGFuZ2VfcHJvdG9jb2wgPSBkaWIwNzAwX2NoYW5nZV9wcm90b2NvbCwKLQkJCX0sCisJCQkuYWxsb3dlZF9wcm90b3MgICA9IFJDX1RZUEVfUkM1IHwKKwkJCQkJICAgIFJDX1RZUEVfUkM2IHwKKwkJCQkJICAgIFJDX1RZUEVfTkVDLAorCQkJLmNoYW5nZV9wcm90b2NvbCAgPSBkaWIwNzAwX2NoYW5nZV9wcm90b2NvbCwKIAkJfSwKIAl9LCB7IERJQjA3MDBfREVGQVVMVF9ERVZJQ0VfUFJPUEVSVElFUywKIAkJLm51bV9hZGFwdGVycyA9IDEsCkBAIC0yNDg3LDEyICsyNDY3LDEwIEBACiAJCQkucmNfY29kZXMgICAgICAgICA9IFJDX01BUF9ESUIwNzAwX1JDNV9UQUJMRSwKIAkJCS5tb2R1bGVfbmFtZQkgID0gImRpYjA3MDAiLAogCQkJLnJjX3F1ZXJ5ICAgICAgICAgPSBkaWIwNzAwX3JjX3F1ZXJ5X29sZF9maXJtd2FyZSwKLQkJCS5yY19wcm9wcyA9IHsKLQkJCQkuYWxsb3dlZF9wcm90b3MgPSBJUl9UWVBFX1JDNSB8Ci0JCQkJCQkgIElSX1RZUEVfUkM2IHwKLQkJCQkJCSAgSVJfVFlQRV9ORUMsCi0JCQkJLmNoYW5nZV9wcm90b2NvbCA9IGRpYjA3MDBfY2hhbmdlX3Byb3RvY29sLAotCQkJfSwKKwkJCS5hbGxvd2VkX3Byb3RvcyAgID0gUkNfVFlQRV9SQzUgfAorCQkJCQkgICAgUkNfVFlQRV9SQzYgfAorCQkJCQkgICAgUkNfVFlQRV9ORUMsCisJCQkuY2hhbmdlX3Byb3RvY29sICA9IGRpYjA3MDBfY2hhbmdlX3Byb3RvY29sLAogCQl9LAogCX0sIHsgRElCMDcwMF9ERUZBVUxUX0RFVklDRV9QUk9QRVJUSUVTLAogCQkubnVtX2FkYXB0ZXJzID0gMSwKQEAgLTI1MzMsMTIgKzI1MTEsMTAgQEAKIAkJCS5yY19jb2RlcyAgICAgICAgID0gUkNfTUFQX0RJQjA3MDBfTkVDX1RBQkxFLAogCQkJLm1vZHVsZV9uYW1lCSAgPSAiZGliMDcwMCIsCiAJCQkucmNfcXVlcnkgICAgICAgICA9IGRpYjA3MDBfcmNfcXVlcnlfb2xkX2Zpcm13YXJlLAotCQkJLnJjX3Byb3BzID0gewotCQkJCS5hbGxvd2VkX3Byb3RvcyA9IElSX1RZUEVfUkM1IHwKLQkJCQkJCSAgSVJfVFlQRV9SQzYgfAotCQkJCQkJICBJUl9UWVBFX05FQywKLQkJCQkuY2hhbmdlX3Byb3RvY29sID0gZGliMDcwMF9jaGFuZ2VfcHJvdG9jb2wsCi0JCQl9LAorCQkJLmFsbG93ZWRfcHJvdG9zICAgPSBSQ19UWVBFX1JDNSB8CisJCQkJCSAgICBSQ19UWVBFX1JDNiB8CisJCQkJCSAgICBSQ19UWVBFX05FQywKKwkJCS5jaGFuZ2VfcHJvdG9jb2wgID0gZGliMDcwMF9jaGFuZ2VfcHJvdG9jb2wsCiAJCX0sCiAJfSwgeyBESUIwNzAwX0RFRkFVTFRfREVWSUNFX1BST1BFUlRJRVMsCiAJCS5udW1fYWRhcHRlcnMgPSAyLApAQCAtMjU4NCwxMiArMjU2MCwxMCBAQAogCQkJLnJjX2NvZGVzICAgICAgICAgPSBSQ19NQVBfRElCMDcwMF9SQzVfVEFCTEUsCiAJCQkubW9kdWxlX25hbWUJICA9ICJkaWIwNzAwIiwKIAkJCS5yY19xdWVyeSAgICAgICAgID0gZGliMDcwMF9yY19xdWVyeV9vbGRfZmlybXdhcmUsCi0JCQkucmNfcHJvcHMgPSB7Ci0JCQkJLmFsbG93ZWRfcHJvdG9zID0gSVJfVFlQRV9SQzUgfAotCQkJCQkJICBJUl9UWVBFX1JDNiB8Ci0JCQkJCQkgIElSX1RZUEVfTkVDLAotCQkJCS5jaGFuZ2VfcHJvdG9jb2wgPSBkaWIwNzAwX2NoYW5nZV9wcm90b2NvbCwKLQkJCX0sCisJCQkuYWxsb3dlZF9wcm90b3MgICA9IFJDX1RZUEVfUkM1IHwKKwkJCQkJICAgIFJDX1RZUEVfUkM2IHwKKwkJCQkJICAgIFJDX1RZUEVfTkVDLAorCQkJLmNoYW5nZV9wcm90b2NvbCAgPSBkaWIwNzAwX2NoYW5nZV9wcm90b2NvbCwKIAkJfSwKIAl9LCB7IERJQjA3MDBfREVGQVVMVF9ERVZJQ0VfUFJPUEVSVElFUywKIAkJLm51bV9hZGFwdGVycyA9IDEsCkBAIC0yNjIzLDEyICsyNTk3LDEwIEBACiAJCQkucmNfY29kZXMgICAgICAgICA9IFJDX01BUF9ESUIwNzAwX1JDNV9UQUJMRSwKIAkJCS5tb2R1bGVfbmFtZQkgID0gImRpYjA3MDAiLAogCQkJLnJjX3F1ZXJ5ICAgICAgICAgPSBkaWIwNzAwX3JjX3F1ZXJ5X29sZF9maXJtd2FyZSwKLQkJCS5yY19wcm9wcyA9IHsKLQkJCQkuYWxsb3dlZF9wcm90b3MgPSBJUl9UWVBFX1JDNSB8Ci0JCQkJCQkgIElSX1RZUEVfUkM2IHwKLQkJCQkJCSAgSVJfVFlQRV9ORUMsCi0JCQkJLmNoYW5nZV9wcm90b2NvbCA9IGRpYjA3MDBfY2hhbmdlX3Byb3RvY29sLAotCQkJfSwKKwkJCS5hbGxvd2VkX3Byb3RvcyAgID0gUkNfVFlQRV9SQzUgfAorCQkJCQkgICAgUkNfVFlQRV9SQzYgfAorCQkJCQkgICAgUkNfVFlQRV9ORUMsCisJCQkuY2hhbmdlX3Byb3RvY29sICA9IGRpYjA3MDBfY2hhbmdlX3Byb3RvY29sLAogCQl9LAogCX0sCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWJ1c2ItY29tbW9uLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYnVzYi1jb21tb24uYwppbmRleCBiYTk5MWFhLi45NTZmN2FlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYnVzYi1jb21tb24uYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYnVzYi1jb21tb24uYwpAQCAtMzI3LDcgKzMyNyw3IEBACiAvKgogICogY29tbW9uIHJlbW90ZSBjb250cm9sIHN0dWZmCiAgKi8KLXN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc19kaWJ1c2JfdGFibGVbXSA9IHsKK3N0cnVjdCByY19tYXBfdGFibGUgcmNfbWFwX2RpYnVzYl90YWJsZVtdID0gewogCS8qIEtleSBjb2RlcyBmb3IgdGhlIGxpdHRsZSBBcnRlYyBUMS9Ud2luaGFuL0hBTUEvIHJlbW90ZS4gKi8KIAl7IDB4MDAxNiwgS0VZX1BPV0VSIH0sCiAJeyAweDAwMTAsIEtFWV9NVVRFIH0sCkBAIC00NTYsNyArNDU2LDcgQEAKIAl7IDB4ODA0ZSwgS0VZX0VOVEVSIH0sCiAJeyAweDgwNGYsIEtFWV9WT0xVTUVET1dOIH0sCiB9OwotRVhQT1JUX1NZTUJPTChpcl9jb2Rlc19kaWJ1c2JfdGFibGUpOworRVhQT1JUX1NZTUJPTChyY19tYXBfZGlidXNiX3RhYmxlKTsKIAogaW50IGRpYnVzYl9yY19xdWVyeShzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIHUzMiAqZXZlbnQsIGludCAqc3RhdGUpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYnVzYi1tYi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWJ1c2ItbWIuYwppbmRleCA4ZTNjMGQyLi4wNGQ5MWJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYnVzYi1tYi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGlidXNiLW1iLmMKQEAgLTIxMyw4ICsyMTMsOCBAQAogCiAJLnJjLmxlZ2FjeSA9IHsKIAkJLnJjX2ludGVydmFsICAgICAgPSBERUZBVUxUX1JDX0lOVEVSVkFMLAotCQkucmNfa2V5X21hcCAgICAgICA9IGlyX2NvZGVzX2RpYnVzYl90YWJsZSwKLQkJLnJjX2tleV9tYXBfc2l6ZSAgPSAxMTEsIC8qIHdvdywgdGhhdCBpcyB1Z2x5IC4uLiBJIHdhbnQgdG8gbG9hZCBpdCB0byB0aGUgZHJpdmVyIGR5bmFtaWNhbGx5ICovCisJCS5yY19tYXBfdGFibGUgICAgID0gcmNfbWFwX2RpYnVzYl90YWJsZSwKKwkJLnJjX21hcF9zaXplICAgICAgPSAxMTEsIC8qIHdvdywgdGhhdCBpcyB1Z2x5IC4uLiBJIHdhbnQgdG8gbG9hZCBpdCB0byB0aGUgZHJpdmVyIGR5bmFtaWNhbGx5ICovCiAJCS5yY19xdWVyeSAgICAgICAgID0gZGlidXNiX3JjX3F1ZXJ5LAogCX0sCiAKQEAgLTI5OSw4ICsyOTksOCBAQAogCiAJLnJjLmxlZ2FjeSA9IHsKIAkJLnJjX2ludGVydmFsICAgICAgPSBERUZBVUxUX1JDX0lOVEVSVkFMLAotCQkucmNfa2V5X21hcCAgICAgICA9IGlyX2NvZGVzX2RpYnVzYl90YWJsZSwKLQkJLnJjX2tleV9tYXBfc2l6ZSAgPSAxMTEsIC8qIHdvdywgdGhhdCBpcyB1Z2x5IC4uLiBJIHdhbnQgdG8gbG9hZCBpdCB0byB0aGUgZHJpdmVyIGR5bmFtaWNhbGx5ICovCisJCS5yY19tYXBfdGFibGUgICAgID0gcmNfbWFwX2RpYnVzYl90YWJsZSwKKwkJLnJjX21hcF9zaXplICAgICAgPSAxMTEsIC8qIHdvdywgdGhhdCBpcyB1Z2x5IC4uLiBJIHdhbnQgdG8gbG9hZCBpdCB0byB0aGUgZHJpdmVyIGR5bmFtaWNhbGx5ICovCiAJCS5yY19xdWVyeSAgICAgICAgID0gZGlidXNiX3JjX3F1ZXJ5LAogCX0sCiAKQEAgLTM2NSw4ICszNjUsOCBAQAogCiAJLnJjLmxlZ2FjeSA9IHsKIAkJLnJjX2ludGVydmFsICAgICAgPSBERUZBVUxUX1JDX0lOVEVSVkFMLAotCQkucmNfa2V5X21hcCAgICAgICA9IGlyX2NvZGVzX2RpYnVzYl90YWJsZSwKLQkJLnJjX2tleV9tYXBfc2l6ZSAgPSAxMTEsIC8qIHdvdywgdGhhdCBpcyB1Z2x5IC4uLiBJIHdhbnQgdG8gbG9hZCBpdCB0byB0aGUgZHJpdmVyIGR5bmFtaWNhbGx5ICovCisJCS5yY19tYXBfdGFibGUgICAgID0gcmNfbWFwX2RpYnVzYl90YWJsZSwKKwkJLnJjX21hcF9zaXplICAgICAgPSAxMTEsIC8qIHdvdywgdGhhdCBpcyB1Z2x5IC4uLiBJIHdhbnQgdG8gbG9hZCBpdCB0byB0aGUgZHJpdmVyIGR5bmFtaWNhbGx5ICovCiAJCS5yY19xdWVyeSAgICAgICAgID0gZGlidXNiX3JjX3F1ZXJ5LAogCX0sCiAKQEAgLTQyNCw4ICs0MjQsOCBAQAogCiAJLnJjLmxlZ2FjeSA9IHsKIAkJLnJjX2ludGVydmFsICAgICAgPSBERUZBVUxUX1JDX0lOVEVSVkFMLAotCQkucmNfa2V5X21hcCAgICAgICA9IGlyX2NvZGVzX2RpYnVzYl90YWJsZSwKLQkJLnJjX2tleV9tYXBfc2l6ZSAgPSAxMTEsIC8qIHdvdywgdGhhdCBpcyB1Z2x5IC4uLiBJIHdhbnQgdG8gbG9hZCBpdCB0byB0aGUgZHJpdmVyIGR5bmFtaWNhbGx5ICovCisJCS5yY19tYXBfdGFibGUgICAgID0gcmNfbWFwX2RpYnVzYl90YWJsZSwKKwkJLnJjX21hcF9zaXplICAgICAgPSAxMTEsIC8qIHdvdywgdGhhdCBpcyB1Z2x5IC4uLiBJIHdhbnQgdG8gbG9hZCBpdCB0byB0aGUgZHJpdmVyIGR5bmFtaWNhbGx5ICovCiAJCS5yY19xdWVyeSAgICAgICAgID0gZGlidXNiX3JjX3F1ZXJ5LAogCX0sCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGlidXNiLW1jLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYnVzYi1tYy5jCmluZGV4IDFjYmM0MWMuLmMxZDkwOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGlidXNiLW1jLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWJ1c2ItbWMuYwpAQCAtODMsOCArODMsOCBAQAogCiAJLnJjLmxlZ2FjeSA9IHsKIAkJLnJjX2ludGVydmFsICAgICAgPSBERUZBVUxUX1JDX0lOVEVSVkFMLAotCQkucmNfa2V5X21hcCAgICAgICA9IGlyX2NvZGVzX2RpYnVzYl90YWJsZSwKLQkJLnJjX2tleV9tYXBfc2l6ZSAgPSAxMTEsIC8qIEZJWE1FICovCisJCS5yY19tYXBfdGFibGUgICAgID0gcmNfbWFwX2RpYnVzYl90YWJsZSwKKwkJLnJjX21hcF9zaXplICAgICAgPSAxMTEsIC8qIEZJWE1FICovCiAJCS5yY19xdWVyeSAgICAgICAgID0gZGlidXNiX3JjX3F1ZXJ5LAogCX0sCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGlidXNiLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYnVzYi5oCmluZGV4IDYxYTZiZjMuLmU0N2MzMjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGlidXNiLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWJ1c2IuaApAQCAtMTI0LDcgKzEyNCw3IEBACiAjZGVmaW5lIERFRkFVTFRfUkNfSU5URVJWQUwgMTUwCiAvLyNkZWZpbmUgREVGQVVMVF9SQ19JTlRFUlZBTCAxMDAwMDAKIAotZXh0ZXJuIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc19kaWJ1c2JfdGFibGVbXTsKK2V4dGVybiBzdHJ1Y3QgcmNfbWFwX3RhYmxlIHJjX21hcF9kaWJ1c2JfdGFibGVbXTsKIGV4dGVybiBpbnQgZGlidXNiX3JjX3F1ZXJ5KHN0cnVjdCBkdmJfdXNiX2RldmljZSAqLCB1MzIgKiwgaW50ICopOwogZXh0ZXJuIGludCBkaWJ1c2JfcmVhZF9lZXByb21fYnl0ZShzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKiwgdTgsIHU4ICopOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpZ2l0di5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWdpdHYuYwppbmRleCAxM2QwMDZiLi5mMmRiY2U3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpZ2l0di5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGlnaXR2LmMKQEAgLTE2MSw3ICsxNjEsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX2RpZ2l0dl90YWJsZVtdID0geworc3RhdGljIHN0cnVjdCByY19tYXBfdGFibGUgcmNfbWFwX2RpZ2l0dl90YWJsZVtdID0gewogCXsgMHg1ZjU1LCBLRVlfMCB9LAogCXsgMHg2ZjU1LCBLRVlfMSB9LAogCXsgMHg5ZjU1LCBLRVlfMiB9LApAQCAtMjM3LDEwICsyMzcsMTAgQEAKIAkvKiBpZiBzb21ldGhpbmcgaXMgaW5zaWRlIHRoZSBidWZmZXIsIHNpbXVsYXRlIGtleSBwcmVzcyAqLwogCWlmIChrZXlbMV0gIT0gMCkKIAl7Ci0JCSAgZm9yIChpID0gMDsgaSA8IGQtPnByb3BzLnJjLmxlZ2FjeS5yY19rZXlfbWFwX3NpemU7IGkrKykgewotCQkJaWYgKHJjNV9jdXN0b20oJmQtPnByb3BzLnJjLmxlZ2FjeS5yY19rZXlfbWFwW2ldKSA9PSBrZXlbMV0gJiYKLQkJCSAgICByYzVfZGF0YSgmZC0+cHJvcHMucmMubGVnYWN5LnJjX2tleV9tYXBbaV0pID09IGtleVsyXSkgewotCQkJCSpldmVudCA9IGQtPnByb3BzLnJjLmxlZ2FjeS5yY19rZXlfbWFwW2ldLmtleWNvZGU7CisJCSAgZm9yIChpID0gMDsgaSA8IGQtPnByb3BzLnJjLmxlZ2FjeS5yY19tYXBfc2l6ZTsgaSsrKSB7CisJCQlpZiAocmM1X2N1c3RvbSgmZC0+cHJvcHMucmMubGVnYWN5LnJjX21hcF90YWJsZVtpXSkgPT0ga2V5WzFdICYmCisJCQkgICAgcmM1X2RhdGEoJmQtPnByb3BzLnJjLmxlZ2FjeS5yY19tYXBfdGFibGVbaV0pID09IGtleVsyXSkgeworCQkJCSpldmVudCA9IGQtPnByb3BzLnJjLmxlZ2FjeS5yY19tYXBfdGFibGVbaV0ua2V5Y29kZTsKIAkJCQkqc3RhdGUgPSBSRU1PVEVfS0VZX1BSRVNTRUQ7CiAJCQkJcmV0dXJuIDA7CiAJCQl9CkBAIC0zMTIsOCArMzEyLDggQEAKIAogCS5yYy5sZWdhY3kgPSB7CiAJCS5yY19pbnRlcnZhbCAgICAgID0gMTAwMCwKLQkJLnJjX2tleV9tYXAgICAgICAgPSBpcl9jb2Rlc19kaWdpdHZfdGFibGUsCi0JCS5yY19rZXlfbWFwX3NpemUgID0gQVJSQVlfU0laRShpcl9jb2Rlc19kaWdpdHZfdGFibGUpLAorCQkucmNfbWFwX3RhYmxlICAgICA9IHJjX21hcF9kaWdpdHZfdGFibGUsCisJCS5yY19tYXBfc2l6ZSAgICAgID0gQVJSQVlfU0laRShyY19tYXBfZGlnaXR2X3RhYmxlKSwKIAkJLnJjX3F1ZXJ5ICAgICAgICAgPSBkaWdpdHZfcmNfcXVlcnksCiAJfSwKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdHQyMDB1LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R0dDIwMHUuYwppbmRleCBjYTQ5NWUwLi5lY2Q4NmVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R0dDIwMHUuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R0dDIwMHUuYwpAQCAtNTcsNyArNTcsNyBAQAogCiAvKiByZW1vdGUgY29udHJvbCAqLwogLyoga2V5IGxpc3QgZm9yIHRoZSB0aW55IHJlbW90ZSBjb250cm9sIChZYWt1bW8sIGRvbid0IGtub3cgYWJvdXQgdGhlIG90aGVycykgKi8KLXN0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfZHR0MjAwdV90YWJsZVtdID0geworc3RhdGljIHN0cnVjdCByY19tYXBfdGFibGUgcmNfbWFwX2R0dDIwMHVfdGFibGVbXSA9IHsKIAl7IDB4ODAwMSwgS0VZX01VVEUgfSwKIAl7IDB4ODAwMiwgS0VZX0NIQU5ORUxET1dOIH0sCiAJeyAweDgwMDMsIEtFWV9WT0xVTUVET1dOIH0sCkBAIC0xNjMsOCArMTYzLDggQEAKIAogCS5yYy5sZWdhY3kgPSB7CiAJCS5yY19pbnRlcnZhbCAgICAgPSAzMDAsCi0JCS5yY19rZXlfbWFwICAgICAgPSBpcl9jb2Rlc19kdHQyMDB1X3RhYmxlLAotCQkucmNfa2V5X21hcF9zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc19kdHQyMDB1X3RhYmxlKSwKKwkJLnJjX21hcF90YWJsZSAgICA9IHJjX21hcF9kdHQyMDB1X3RhYmxlLAorCQkucmNfbWFwX3NpemUgICAgID0gQVJSQVlfU0laRShyY19tYXBfZHR0MjAwdV90YWJsZSksCiAJCS5yY19xdWVyeSAgICAgICAgPSBkdHQyMDB1X3JjX3F1ZXJ5LAogCX0sCiAKQEAgLTIxMCw4ICsyMTAsOCBAQAogCiAJLnJjLmxlZ2FjeSA9IHsKIAkJLnJjX2ludGVydmFsICAgICA9IDMwMCwKLQkJLnJjX2tleV9tYXAgICAgICA9IGlyX2NvZGVzX2R0dDIwMHVfdGFibGUsCi0JCS5yY19rZXlfbWFwX3NpemUgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX2R0dDIwMHVfdGFibGUpLAorCQkucmNfbWFwX3RhYmxlICAgICAgPSByY19tYXBfZHR0MjAwdV90YWJsZSwKKwkJLnJjX21hcF9zaXplID0gQVJSQVlfU0laRShyY19tYXBfZHR0MjAwdV90YWJsZSksCiAJCS5yY19xdWVyeSAgICAgICAgPSBkdHQyMDB1X3JjX3F1ZXJ5LAogCX0sCiAKQEAgLTI1Nyw4ICsyNTcsOCBAQAogCiAJLnJjLmxlZ2FjeSA9IHsKIAkJLnJjX2ludGVydmFsICAgICA9IDMwMCwKLQkJLnJjX2tleV9tYXAgICAgICA9IGlyX2NvZGVzX2R0dDIwMHVfdGFibGUsCi0JCS5yY19rZXlfbWFwX3NpemUgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX2R0dDIwMHVfdGFibGUpLAorCQkucmNfbWFwX3RhYmxlICAgID0gcmNfbWFwX2R0dDIwMHVfdGFibGUsCisJCS5yY19tYXBfc2l6ZSAgICAgPSBBUlJBWV9TSVpFKHJjX21hcF9kdHQyMDB1X3RhYmxlKSwKIAkJLnJjX3F1ZXJ5ICAgICAgICA9IGR0dDIwMHVfcmNfcXVlcnksCiAJfSwKIApAQCAtMzA0LDggKzMwNCw4IEBACiAKIAkucmMubGVnYWN5ID0gewogCQkucmNfaW50ZXJ2YWwgICAgID0gMzAwLAotCQkucmNfa2V5X21hcCAgICAgID0gaXJfY29kZXNfZHR0MjAwdV90YWJsZSwKLQkJLnJjX2tleV9tYXBfc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfZHR0MjAwdV90YWJsZSksCisJCS5yY19tYXBfdGFibGUgICAgPSByY19tYXBfZHR0MjAwdV90YWJsZSwKKwkJLnJjX21hcF9zaXplICAgICA9IEFSUkFZX1NJWkUocmNfbWFwX2R0dDIwMHVfdGFibGUpLAogCQkucmNfcXVlcnkgICAgICAgID0gZHR0MjAwdV9yY19xdWVyeSwKIAl9LAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItaWRzLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItaWRzLmgKaW5kZXggMTkyYTQwYy4uMWE2MzEwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLWlkcy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1pZHMuaApAQCAtMzAxLDYgKzMwMSw3IEBACiAjZGVmaW5lIFVTQl9QSURfRUxHQVRPX0VZRVRWX0RJVkVSU0lUWQkJCTB4MDAxMQogI2RlZmluZSBVU0JfUElEX0VMR0FUT19FWUVUVl9EVFQJCQkweDAwMjEKICNkZWZpbmUgVVNCX1BJRF9FTEdBVE9fRVlFVFZfRFRUX0RseAkJCTB4MDAyMAorI2RlZmluZSBVU0JfUElEX0VMR0FUT19FWUVUVl9TQVQJCQkweDAwMmEKICNkZWZpbmUgVVNCX1BJRF9EVkJfVF9VU0JfU1RJQ0tfSElHSF9TUEVFRF9DT0xECQkweDUwMDAKICNkZWZpbmUgVVNCX1BJRF9EVkJfVF9VU0JfU1RJQ0tfSElHSF9TUEVFRF9XQVJNCQkweDUwMDEKICNkZWZpbmUgVVNCX1BJRF9GUklJT19XSElURQkJCQkweDAwMDEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1yZW1vdGUuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1yZW1vdGUuYwppbmRleCBiNTc5ZmVkLi4yMzAwNWIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItcmVtb3RlLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLXJlbW90ZS5jCkBAIC0xMywxMSArMTMsMTEgQEAKIHsKIAlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQgPSBpbnB1dF9nZXRfZHJ2ZGF0YShkZXYpOwogCi0Jc3RydWN0IGlyX3NjYW5jb2RlICprZXltYXAgPSBkLT5wcm9wcy5yYy5sZWdhY3kucmNfa2V5X21hcDsKKwlzdHJ1Y3QgcmNfbWFwX3RhYmxlICprZXltYXAgPSBkLT5wcm9wcy5yYy5sZWdhY3kucmNfbWFwX3RhYmxlOwogCWludCBpOwogCiAJLyogU2VlIGlmIHdlIGNhbiBtYXRjaCB0aGUgcmF3IGtleSBjb2RlLiAqLwotCWZvciAoaSA9IDA7IGkgPCBkLT5wcm9wcy5yYy5sZWdhY3kucmNfa2V5X21hcF9zaXplOyBpKyspCisJZm9yIChpID0gMDsgaSA8IGQtPnByb3BzLnJjLmxlZ2FjeS5yY19tYXBfc2l6ZTsgaSsrKQogCQlpZiAoa2V5bWFwW2ldLnNjYW5jb2RlID09IHNjYW5jb2RlKSB7CiAJCQkqa2V5Y29kZSA9IGtleW1hcFtpXS5rZXljb2RlOwogCQkJcmV0dXJuIDA7CkBAIC0yOCw3ICsyOCw3IEBACiAJICogb3RoZXJ3aXNlLCBpbnB1dCBjb3JlIHdvbid0IGxldCBsZWdhY3lfZHZiX3VzYl9zZXRrZXljb2RlCiAJICogdG8gd29yawogCSAqLwotCWZvciAoaSA9IDA7IGkgPCBkLT5wcm9wcy5yYy5sZWdhY3kucmNfa2V5X21hcF9zaXplOyBpKyspCisJZm9yIChpID0gMDsgaSA8IGQtPnByb3BzLnJjLmxlZ2FjeS5yY19tYXBfc2l6ZTsgaSsrKQogCQlpZiAoa2V5bWFwW2ldLmtleWNvZGUgPT0gS0VZX1JFU0VSVkVEIHx8CiAJCSAgICBrZXltYXBbaV0ua2V5Y29kZSA9PSBLRVlfVU5LTk9XTikgewogCQkJKmtleWNvZGUgPSBLRVlfUkVTRVJWRUQ7CkBAIC00MywxOCArNDMsMTggQEAKIHsKIAlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQgPSBpbnB1dF9nZXRfZHJ2ZGF0YShkZXYpOwogCi0Jc3RydWN0IGlyX3NjYW5jb2RlICprZXltYXAgPSBkLT5wcm9wcy5yYy5sZWdhY3kucmNfa2V5X21hcDsKKwlzdHJ1Y3QgcmNfbWFwX3RhYmxlICprZXltYXAgPSBkLT5wcm9wcy5yYy5sZWdhY3kucmNfbWFwX3RhYmxlOwogCWludCBpOwogCiAJLyogU2VhcmNoIGlmIGl0IGlzIHJlcGxhY2luZyBhbiBleGlzdGluZyBrZXljb2RlICovCi0JZm9yIChpID0gMDsgaSA8IGQtPnByb3BzLnJjLmxlZ2FjeS5yY19rZXlfbWFwX3NpemU7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgZC0+cHJvcHMucmMubGVnYWN5LnJjX21hcF9zaXplOyBpKyspCiAJCWlmIChrZXltYXBbaV0uc2NhbmNvZGUgPT0gc2NhbmNvZGUpIHsKIAkJCWtleW1hcFtpXS5rZXljb2RlID0ga2V5Y29kZTsKIAkJCXJldHVybiAwOwogCQl9CiAKIAkvKiBTZWFyY2ggaWYgaXMgdGhlcmUgYSBjbGVhbiBlbnRyeS4gSWYgc28sIHVzZSBpdCAqLwotCWZvciAoaSA9IDA7IGkgPCBkLT5wcm9wcy5yYy5sZWdhY3kucmNfa2V5X21hcF9zaXplOyBpKyspCisJZm9yIChpID0gMDsgaSA8IGQtPnByb3BzLnJjLmxlZ2FjeS5yY19tYXBfc2l6ZTsgaSsrKQogCQlpZiAoa2V5bWFwW2ldLmtleWNvZGUgPT0gS0VZX1JFU0VSVkVEIHx8CiAJCSAgICBrZXltYXBbaV0ua2V5Y29kZSA9PSBLRVlfVU5LTk9XTikgewogCQkJa2V5bWFwW2ldLnNjYW5jb2RlID0gc2NhbmNvZGU7CkBAIC0xMDYsMTAgKzEwNiwxMCBAQAogCQkJZC0+bGFzdF9ldmVudCA9IGV2ZW50OwogCQljYXNlIFJFTU9URV9LRVlfUkVQRUFUOgogCQkJZGViX3JjKCJrZXkgcmVwZWF0ZWRcbiIpOwotCQkJaW5wdXRfZXZlbnQoZC0+cmNfaW5wdXRfZGV2LCBFVl9LRVksIGV2ZW50LCAxKTsKLQkJCWlucHV0X3N5bmMoZC0+cmNfaW5wdXRfZGV2KTsKLQkJCWlucHV0X2V2ZW50KGQtPnJjX2lucHV0X2RldiwgRVZfS0VZLCBkLT5sYXN0X2V2ZW50LCAwKTsKLQkJCWlucHV0X3N5bmMoZC0+cmNfaW5wdXRfZGV2KTsKKwkJCWlucHV0X2V2ZW50KGQtPmlucHV0X2RldiwgRVZfS0VZLCBldmVudCwgMSk7CisJCQlpbnB1dF9zeW5jKGQtPmlucHV0X2Rldik7CisJCQlpbnB1dF9ldmVudChkLT5pbnB1dF9kZXYsIEVWX0tFWSwgZC0+bGFzdF9ldmVudCwgMCk7CisJCQlpbnB1dF9zeW5jKGQtPmlucHV0X2Rldik7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWJyZWFrOwpAQCAtMTU0LDIwICsxNTQsMzIgQEAKIAlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmQtPnJjX3F1ZXJ5X3dvcmssbXNlY3NfdG9famlmZmllcyhkLT5wcm9wcy5yYy5sZWdhY3kucmNfaW50ZXJ2YWwpKTsKIH0KIAotc3RhdGljIGludCBsZWdhY3lfZHZiX3VzYl9yZW1vdGVfaW5pdChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsCi0JCQkJICAgICAgc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2KQorc3RhdGljIGludCBsZWdhY3lfZHZiX3VzYl9yZW1vdGVfaW5pdChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQpCiB7CiAJaW50IGksIGVyciwgcmNfaW50ZXJ2YWw7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OworCisJaW5wdXRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CisJaWYgKCFpbnB1dF9kZXYpCisJCXJldHVybiAtRU5PTUVNOworCisJaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX0tFWSk7CisJaW5wdXRfZGV2LT5uYW1lID0gIklSLXJlY2VpdmVyIGluc2lkZSBhbiBVU0IgRFZCIHJlY2VpdmVyIjsKKwlpbnB1dF9kZXYtPnBoeXMgPSBkLT5yY19waHlzOworCXVzYl90b19pbnB1dF9pZChkLT51ZGV2LCAmaW5wdXRfZGV2LT5pZCk7CisJaW5wdXRfZGV2LT5kZXYucGFyZW50ID0gJmQtPnVkZXYtPmRldjsKKwlkLT5pbnB1dF9kZXYgPSBpbnB1dF9kZXY7CisJZC0+cmNfZGV2ID0gTlVMTDsKIAogCWlucHV0X2Rldi0+Z2V0a2V5Y29kZSA9IGxlZ2FjeV9kdmJfdXNiX2dldGtleWNvZGU7CiAJaW5wdXRfZGV2LT5zZXRrZXljb2RlID0gbGVnYWN5X2R2Yl91c2Jfc2V0a2V5Y29kZTsKIAogCS8qIHNldCB0aGUgYml0cyBmb3IgdGhlIGtleXMgKi8KLQlkZWJfcmMoImtleSBtYXAgc2l6ZTogJWRcbiIsIGQtPnByb3BzLnJjLmxlZ2FjeS5yY19rZXlfbWFwX3NpemUpOwotCWZvciAoaSA9IDA7IGkgPCBkLT5wcm9wcy5yYy5sZWdhY3kucmNfa2V5X21hcF9zaXplOyBpKyspIHsKKwlkZWJfcmMoImtleSBtYXAgc2l6ZTogJWRcbiIsIGQtPnByb3BzLnJjLmxlZ2FjeS5yY19tYXBfc2l6ZSk7CisJZm9yIChpID0gMDsgaSA8IGQtPnByb3BzLnJjLmxlZ2FjeS5yY19tYXBfc2l6ZTsgaSsrKSB7CiAJCWRlYl9yYygic2V0dGluZyBiaXQgZm9yIGV2ZW50ICVkIGl0ZW0gJWRcbiIsCi0JCQlkLT5wcm9wcy5yYy5sZWdhY3kucmNfa2V5X21hcFtpXS5rZXljb2RlLCBpKTsKLQkJc2V0X2JpdChkLT5wcm9wcy5yYy5sZWdhY3kucmNfa2V5X21hcFtpXS5rZXljb2RlLCBpbnB1dF9kZXYtPmtleWJpdCk7CisJCQlkLT5wcm9wcy5yYy5sZWdhY3kucmNfbWFwX3RhYmxlW2ldLmtleWNvZGUsIGkpOworCQlzZXRfYml0KGQtPnByb3BzLnJjLmxlZ2FjeS5yY19tYXBfdGFibGVbaV0ua2V5Y29kZSwgaW5wdXRfZGV2LT5rZXliaXQpOwogCX0KIAogCS8qIHNldHRpbmcgdGhlc2UgdHdvIHZhbHVlcyB0byBub24temVybywgd2UgaGF2ZSB0byBtYW5hZ2Uga2V5IHJlcGVhdHMgKi8KQEAgLTIyMSwxOCArMjMzLDM0IEBACiAJCQkgICAgICBtc2Vjc190b19qaWZmaWVzKGQtPnByb3BzLnJjLmNvcmUucmNfaW50ZXJ2YWwpKTsKIH0KIAotc3RhdGljIGludCByY19jb3JlX2R2Yl91c2JfcmVtb3RlX2luaXQoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLAotCQkJCSAgICAgICBzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYpCitzdGF0aWMgaW50IHJjX2NvcmVfZHZiX3VzYl9yZW1vdGVfaW5pdChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQpCiB7CiAJaW50IGVyciwgcmNfaW50ZXJ2YWw7CisJc3RydWN0IHJjX2RldiAqZGV2OwogCi0JZC0+cHJvcHMucmMuY29yZS5yY19wcm9wcy5wcml2ID0gZDsKLQllcnIgPSBpcl9pbnB1dF9yZWdpc3RlcihpbnB1dF9kZXYsCi0JCQkJIGQtPnByb3BzLnJjLmNvcmUucmNfY29kZXMsCi0JCQkJICZkLT5wcm9wcy5yYy5jb3JlLnJjX3Byb3BzLAotCQkJCSBkLT5wcm9wcy5yYy5jb3JlLm1vZHVsZV9uYW1lKTsKLQlpZiAoZXJyIDwgMCkKKwlkZXYgPSByY19hbGxvY2F0ZV9kZXZpY2UoKTsKKwlpZiAoIWRldikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkZXYtPmRyaXZlcl9uYW1lID0gZC0+cHJvcHMucmMuY29yZS5tb2R1bGVfbmFtZTsKKwlkZXYtPm1hcF9uYW1lID0gZC0+cHJvcHMucmMuY29yZS5yY19jb2RlczsKKwlkZXYtPmNoYW5nZV9wcm90b2NvbCA9IGQtPnByb3BzLnJjLmNvcmUuY2hhbmdlX3Byb3RvY29sOworCWRldi0+YWxsb3dlZF9wcm90b3MgPSBkLT5wcm9wcy5yYy5jb3JlLmFsbG93ZWRfcHJvdG9zOworCWRldi0+ZHJpdmVyX3R5cGUgPSBSQ19EUklWRVJfU0NBTkNPREU7CisJdXNiX3RvX2lucHV0X2lkKGQtPnVkZXYsICZkZXYtPmlucHV0X2lkKTsKKwlkZXYtPmlucHV0X25hbWUgPSAiSVItcmVjZWl2ZXIgaW5zaWRlIGFuIFVTQiBEVkIgcmVjZWl2ZXIiOworCWRldi0+aW5wdXRfcGh5cyA9IGQtPnJjX3BoeXM7CisJZGV2LT5kZXYucGFyZW50ID0gJmQtPnVkZXYtPmRldjsKKwlkZXYtPnByaXYgPSBkOworCisJZXJyID0gcmNfcmVnaXN0ZXJfZGV2aWNlKGRldik7CisJaWYgKGVyciA8IDApIHsKKwkJcmNfZnJlZV9kZXZpY2UoZGV2KTsKIAkJcmV0dXJuIGVycjsKKwl9CisKKwlkLT5pbnB1dF9kZXYgPSBOVUxMOworCWQtPnJjX2RldiA9IGRldjsKIAogCWlmICghZC0+cHJvcHMucmMuY29yZS5yY19xdWVyeSB8fCBkLT5wcm9wcy5yYy5jb3JlLmJ1bGtfbW9kZSkKIAkJcmV0dXJuIDA7CkBAIC0yNTEsMTMgKzI3OSwxMiBAQAogCiBpbnQgZHZiX3VzYl9yZW1vdGVfaW5pdChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQpCiB7Ci0Jc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OwogCWludCBlcnI7CiAKIAlpZiAoZHZiX3VzYl9kaXNhYmxlX3JjX3BvbGxpbmcpCiAJCXJldHVybiAwOwogCi0JaWYgKGQtPnByb3BzLnJjLmxlZ2FjeS5yY19rZXlfbWFwICYmIGQtPnByb3BzLnJjLmxlZ2FjeS5yY19xdWVyeSkKKwlpZiAoZC0+cHJvcHMucmMubGVnYWN5LnJjX21hcF90YWJsZSAmJiBkLT5wcm9wcy5yYy5sZWdhY3kucmNfcXVlcnkpCiAJCWQtPnByb3BzLnJjLm1vZGUgPSBEVkJfUkNfTEVHQUNZOwogCWVsc2UgaWYgKGQtPnByb3BzLnJjLmNvcmUucmNfY29kZXMpCiAJCWQtPnByb3BzLnJjLm1vZGUgPSBEVkJfUkNfQ09SRTsKQEAgLTI2NywyNiArMjk0LDE0IEBACiAJdXNiX21ha2VfcGF0aChkLT51ZGV2LCBkLT5yY19waHlzLCBzaXplb2YoZC0+cmNfcGh5cykpOwogCXN0cmxjYXQoZC0+cmNfcGh5cywgIi9pcjAiLCBzaXplb2YoZC0+cmNfcGh5cykpOwogCi0JaW5wdXRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7Ci0JaWYgKCFpbnB1dF9kZXYpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX0tFWSk7Ci0JaW5wdXRfZGV2LT5uYW1lID0gIklSLXJlY2VpdmVyIGluc2lkZSBhbiBVU0IgRFZCIHJlY2VpdmVyIjsKLQlpbnB1dF9kZXYtPnBoeXMgPSBkLT5yY19waHlzOwotCXVzYl90b19pbnB1dF9pZChkLT51ZGV2LCAmaW5wdXRfZGV2LT5pZCk7Ci0JaW5wdXRfZGV2LT5kZXYucGFyZW50ID0gJmQtPnVkZXYtPmRldjsKLQogCS8qIFN0YXJ0IHRoZSByZW1vdGUtY29udHJvbCBwb2xsaW5nLiAqLwogCWlmIChkLT5wcm9wcy5yYy5sZWdhY3kucmNfaW50ZXJ2YWwgPCA0MCkKIAkJZC0+cHJvcHMucmMubGVnYWN5LnJjX2ludGVydmFsID0gMTAwOyAvKiBkZWZhdWx0ICovCiAKLQlkLT5yY19pbnB1dF9kZXYgPSBpbnB1dF9kZXY7Ci0KIAlpZiAoZC0+cHJvcHMucmMubW9kZSA9PSBEVkJfUkNfTEVHQUNZKQotCQllcnIgPSBsZWdhY3lfZHZiX3VzYl9yZW1vdGVfaW5pdChkLCBpbnB1dF9kZXYpOworCQllcnIgPSBsZWdhY3lfZHZiX3VzYl9yZW1vdGVfaW5pdChkKTsKIAllbHNlCi0JCWVyciA9IHJjX2NvcmVfZHZiX3VzYl9yZW1vdGVfaW5pdChkLCBpbnB1dF9kZXYpOworCQllcnIgPSByY19jb3JlX2R2Yl91c2JfcmVtb3RlX2luaXQoZCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtMjk4LDEyICszMTMsMTEgQEAKIGludCBkdmJfdXNiX3JlbW90ZV9leGl0KHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCkKIHsKIAlpZiAoZC0+c3RhdGUgJiBEVkJfVVNCX1NUQVRFX1JFTU9URSkgewotCQljYW5jZWxfcmVhcm1pbmdfZGVsYXllZF93b3JrKCZkLT5yY19xdWVyeV93b3JrKTsKLQkJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwkJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZkLT5yY19xdWVyeV93b3JrKTsKIAkJaWYgKGQtPnByb3BzLnJjLm1vZGUgPT0gRFZCX1JDX0xFR0FDWSkKLQkJCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGQtPnJjX2lucHV0X2Rldik7CisJCQlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShkLT5pbnB1dF9kZXYpOwogCQllbHNlCi0JCQlpcl9pbnB1dF91bnJlZ2lzdGVyKGQtPnJjX2lucHV0X2Rldik7CisJCQlyY191bnJlZ2lzdGVyX2RldmljZShkLT5yY19kZXYpOwogCX0KIAlkLT5zdGF0ZSAmPSB+RFZCX1VTQl9TVEFURV9SRU1PVEU7CiAJcmV0dXJuIDA7CkBAIC0zMTYsNyArMzMwLDcgQEAKIAkJdTgga2V5YnVmWzVdLCB1MzIgKmV2ZW50LCBpbnQgKnN0YXRlKQogewogCWludCBpOwotCXN0cnVjdCBpcl9zY2FuY29kZSAqa2V5bWFwID0gZC0+cHJvcHMucmMubGVnYWN5LnJjX2tleV9tYXA7CisJc3RydWN0IHJjX21hcF90YWJsZSAqa2V5bWFwID0gZC0+cHJvcHMucmMubGVnYWN5LnJjX21hcF90YWJsZTsKIAkqZXZlbnQgPSAwOwogCSpzdGF0ZSA9IFJFTU9URV9OT19LRVlfUFJFU1NFRDsKIAlzd2l0Y2ggKGtleWJ1ZlswXSkgewpAQCAtMzI5LDcgKzM0Myw3IEBACiAJCQkJYnJlYWs7CiAJCQl9CiAJCQkvKiBTZWUgaWYgd2UgY2FuIG1hdGNoIHRoZSByYXcga2V5IGNvZGUuICovCi0JCQlmb3IgKGkgPSAwOyBpIDwgZC0+cHJvcHMucmMubGVnYWN5LnJjX2tleV9tYXBfc2l6ZTsgaSsrKQorCQkJZm9yIChpID0gMDsgaSA8IGQtPnByb3BzLnJjLmxlZ2FjeS5yY19tYXBfc2l6ZTsgaSsrKQogCQkJCWlmIChyYzVfY3VzdG9tKCZrZXltYXBbaV0pID09IGtleWJ1ZlsxXSAmJgogCQkJCQlyYzVfZGF0YSgma2V5bWFwW2ldKSA9PSBrZXlidWZbM10pIHsKIAkJCQkJKmV2ZW50ID0ga2V5bWFwW2ldLmtleWNvZGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2IuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi5oCmluZGV4IDM0ZjdiM2IuLjY1ZmE5MjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi5oCkBAIC0xNCw3ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgotI2luY2x1ZGUgPG1lZGlhL2lyLWNvcmUuaD4KKyNpbmNsdWRlIDxtZWRpYS9yYy1jb3JlLmg+CiAKICNpbmNsdWRlICJkdmJfZnJvbnRlbmQuaCIKICNpbmNsdWRlICJkdmJfZGVtdXguaCIKQEAgLTc1LDE3ICs3NSwxNyBAQAogCXN0cnVjdCB1c2JfZGV2aWNlX2lkICp3YXJtX2lkc1tEVkJfVVNCX0lEX01BWF9OVU1dOwogfTsKIAotc3RhdGljIGlubGluZSB1OCByYzVfY3VzdG9tKHN0cnVjdCBpcl9zY2FuY29kZSAqa2V5KQorc3RhdGljIGlubGluZSB1OCByYzVfY3VzdG9tKHN0cnVjdCByY19tYXBfdGFibGUgKmtleSkKIHsKIAlyZXR1cm4gKGtleS0+c2NhbmNvZGUgPj4gOCkgJiAweGZmOwogfQogCi1zdGF0aWMgaW5saW5lIHU4IHJjNV9kYXRhKHN0cnVjdCBpcl9zY2FuY29kZSAqa2V5KQorc3RhdGljIGlubGluZSB1OCByYzVfZGF0YShzdHJ1Y3QgcmNfbWFwX3RhYmxlICprZXkpCiB7CiAJcmV0dXJuIGtleS0+c2NhbmNvZGUgJiAweGZmOwogfQogCi1zdGF0aWMgaW5saW5lIHU4IHJjNV9zY2FuKHN0cnVjdCBpcl9zY2FuY29kZSAqa2V5KQorc3RhdGljIGlubGluZSB1OCByYzVfc2NhbihzdHJ1Y3QgcmNfbWFwX3RhYmxlICprZXkpCiB7CiAJcmV0dXJuIGtleS0+c2NhbmNvZGUgJiAweGZmZmY7CiB9CkBAIC0xNTksOSArMTU5LDkgQEAKIAogLyoqCiAgKiBzdHJ1Y3QgZHZiX3JjX2xlZ2FjeSAtIG9sZCBwcm9wZXJ0aWVzIG9mIHJlbW90ZSBjb250cm9sbGVyCi0gKiBAcmNfa2V5X21hcDogYSBoYXJkLXdpcmVkIGFycmF5IG9mIHN0cnVjdCBpcl9zY2FuY29kZSAoTlVMTCB0byBkaXNhYmxlCisgKiBAcmNfbWFwX3RhYmxlOiBhIGhhcmQtd2lyZWQgYXJyYXkgb2Ygc3RydWN0IHJjX21hcF90YWJsZSAoTlVMTCB0byBkaXNhYmxlCiAgKiAgcmVtb3RlIGNvbnRyb2wgaGFuZGxpbmcpLgotICogQHJjX2tleV9tYXBfc2l6ZTogbnVtYmVyIG9mIGl0ZW1zIGluIEByY19rZXlfbWFwLgorICogQHJjX21hcF9zaXplOiBudW1iZXIgb2YgaXRlbXMgaW4gQHJjX21hcF90YWJsZS4KICAqIEByY19xdWVyeTogY2FsbGVkIHRvIHF1ZXJ5IGFuIGV2ZW50IGV2ZW50LgogICogQHJjX2ludGVydmFsOiB0aW1lIGluIG1zIGJldHdlZW4gdHdvIHF1ZXJpZXMuCiAgKi8KQEAgLTE3MCw4ICsxNzAsOCBAQAogI2RlZmluZSBSRU1PVEVfTk9fS0VZX1BSRVNTRUQgICAgICAweDAwCiAjZGVmaW5lIFJFTU9URV9LRVlfUFJFU1NFRCAgICAgICAgIDB4MDEKICNkZWZpbmUgUkVNT1RFX0tFWV9SRVBFQVQgICAgICAgICAgMHgwMgotCXN0cnVjdCBpcl9zY2FuY29kZSAgKnJjX2tleV9tYXA7Ci0JaW50IHJjX2tleV9tYXBfc2l6ZTsKKwlzdHJ1Y3QgcmNfbWFwX3RhYmxlICAqcmNfbWFwX3RhYmxlOworCWludCByY19tYXBfc2l6ZTsKIAlpbnQgKCpyY19xdWVyeSkgKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqLCB1MzIgKiwgaW50ICopOwogCWludCByY19pbnRlcnZhbDsKIH07CkBAIC0xODAsMTggKzE4MCwyMCBAQAogICogc3RydWN0IGR2Yl9yYyBwcm9wZXJ0aWVzIG9mIHJlbW90ZSBjb250cm9sbGVyLCB1c2luZyByYy1jb3JlCiAgKiBAcmNfY29kZXM6IG5hbWUgb2YgcmMgY29kZXMgdGFibGUKICAqIEBwcm90b2NvbDogdHlwZSBvZiBwcm90b2NvbChzKSBjdXJyZW50bHkgdXNlZCBieSB0aGUgZHJpdmVyCisgKiBAYWxsb3dlZF9wcm90b3M6IHByb3RvY29sKHMpIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyCisgKiBAY2hhbmdlX3Byb3RvY29sOiBjYWxsYmFjayB0byBjaGFuZ2UgcHJvdG9jb2wKICAqIEByY19xdWVyeTogY2FsbGVkIHRvIHF1ZXJ5IGFuIGV2ZW50IGV2ZW50LgogICogQHJjX2ludGVydmFsOiB0aW1lIGluIG1zIGJldHdlZW4gdHdvIHF1ZXJpZXMuCi0gKiBAcmNfcHJvcHM6IHJlbW90ZSBjb250cm9sbGVyIHByb3BlcnRpZXMKICAqIEBidWxrX21vZGU6IGRldmljZSBzdXBwb3J0cyBidWxrIG1vZGUgZm9yIFJDIChkaXNhYmxlIHBvbGxpbmcgbW9kZSkKICAqLwogc3RydWN0IGR2Yl9yYyB7CiAJY2hhciAqcmNfY29kZXM7CiAJdTY0IHByb3RvY29sOworCXU2NCBhbGxvd2VkX3Byb3RvczsKKwlpbnQgKCpjaGFuZ2VfcHJvdG9jb2wpKHN0cnVjdCByY19kZXYgKmRldiwgdTY0IHJjX3R5cGUpOwogCWNoYXIgKm1vZHVsZV9uYW1lOwogCWludCAoKnJjX3F1ZXJ5KSAoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkKTsKIAlpbnQgcmNfaW50ZXJ2YWw7Ci0Jc3RydWN0IGlyX2Rldl9wcm9wcyByY19wcm9wczsKIAlib29sIGJ1bGtfbW9kZTsJCQkJLyogdXNlcyBidWxrIG1vZGUgKi8KIH07CiAKQEAgLTM4NSw3ICszODcsOCBAQAogICoKICAqIEBpMmNfYWRhcDogZGV2aWNlJ3MgaTJjX2FkYXB0ZXIgaWYgaXQgdXNlcyBJMkNvdmVyVVNCCiAgKgotICogQHJjX2lucHV0X2RldjogaW5wdXQgZGV2aWNlIGZvciB0aGUgcmVtb3RlIGNvbnRyb2wuCisgKiBAcmNfZGV2OiByYyBkZXZpY2UgZm9yIHRoZSByZW1vdGUgY29udHJvbCAocmMtY29yZSBtb2RlKQorICogQGlucHV0X2RldjogaW5wdXQgZGV2aWNlIGZvciB0aGUgcmVtb3RlIGNvbnRyb2wgKGxlZ2FjeSBtb2RlKQogICogQHJjX3F1ZXJ5X3dvcms6IHN0cnVjdCB3b3JrX3N0cnVjdCBmcmVxdWVudCByYyBxdWVyaWVzCiAgKiBAbGFzdF9ldmVudDogbGFzdCB0cmlnZ2VyZWQgZXZlbnQKICAqIEBsYXN0X3N0YXRlOiBsYXN0IHN0YXRlIChubywgcHJlc3NlZCwgcmVwZWF0KQpAQCAtNDE4LDcgKzQyMSw4IEBACiAJc3RydWN0IGR2Yl91c2JfYWRhcHRlciBhZGFwdGVyW01BWF9OT19PRl9BREFQVEVSX1BFUl9ERVZJQ0VdOwogCiAJLyogcmVtb3RlIGNvbnRyb2wgKi8KLQlzdHJ1Y3QgaW5wdXRfZGV2ICpyY19pbnB1dF9kZXY7CisJc3RydWN0IHJjX2RldiAqcmNfZGV2OworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldjsKIAljaGFyIHJjX3BoeXNbNjRdOwogCXN0cnVjdCBkZWxheWVkX3dvcmsgcmNfcXVlcnlfd29yazsKIAl1MzIgbGFzdF9ldmVudDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHcyMTAyLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R3MjEwMi5jCmluZGV4IDc3NGRmODguLjJjMzA3YmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHcyMTAyLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdzIxMDIuYwpAQCAtNzMsOCArNzMsOCBAQAogCQkiUGxlYXNlIHNlZSBsaW51eC9Eb2N1bWVudGF0aW9uL2R2Yi8gZm9yIG1vcmUgZGV0YWlscyAiIFwKIAkJIm9uIGZpcm13YXJlLXByb2JsZW1zLiIKIAotc3RydWN0IGlyX2NvZGVzX2R2Yl91c2JfdGFibGVfdGFibGUgewotCXN0cnVjdCBpcl9zY2FuY29kZSAqcmNfa2V5czsKK3N0cnVjdCByY19tYXBfZHZiX3VzYl90YWJsZV90YWJsZSB7CisJc3RydWN0IHJjX21hcF90YWJsZSAqcmNfa2V5czsKIAlpbnQgcmNfa2V5c19zaXplOwogfTsKIApAQCAtOTQ4LDcgKzk0OCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfZHcyMTB4X3RhYmxlW10gPSB7CitzdGF0aWMgc3RydWN0IHJjX21hcF90YWJsZSByY19tYXBfZHcyMTB4X3RhYmxlW10gPSB7CiAJeyAweGY4MGEsIEtFWV9RIH0sCQkvKnBvd2VyKi8KIAl7IDB4ZjgwYywgS0VZX00gfSwJCS8qbXV0ZSovCiAJeyAweGY4MTEsIEtFWV8xIH0sCkBAIC05ODIsNyArOTgyLDcgQEAKIAl7IDB4ZjgxYiwgS0VZX0IgfSwJCS8qcmVjYWxsKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfdGV2aWlfdGFibGVbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcmNfbWFwX3RhYmxlIHJjX21hcF90ZXZpaV90YWJsZVtdID0gewogCXsgMHhmODBhLCBLRVlfUE9XRVIgfSwKIAl7IDB4ZjgwYywgS0VZX01VVEUgfSwKIAl7IDB4ZjgxMSwgS0VZXzEgfSwKQEAgLTEwMzIsNyArMTAzMiw3IEBACiAJeyAweGY4NTgsIEtFWV9TV0lUQ0hWSURFT01PREUgfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfdGJzX3RhYmxlW10gPSB7CitzdGF0aWMgc3RydWN0IHJjX21hcF90YWJsZSByY19tYXBfdGJzX3RhYmxlW10gPSB7CiAJeyAweGY4ODQsIEtFWV9QT1dFUiB9LAogCXsgMHhmODk0LCBLRVlfTVVURSB9LAogCXsgMHhmODg3LCBLRVlfMSB9LApAQCAtMTA2NywxNiArMTA2NywxNiBAQAogCXsgMHhmODliLCBLRVlfTU9ERSB9CiB9OwogCi1zdGF0aWMgc3RydWN0IGlyX2NvZGVzX2R2Yl91c2JfdGFibGVfdGFibGUga2V5c190YWJsZXNbXSA9IHsKLQl7IGlyX2NvZGVzX2R3MjEweF90YWJsZSwgQVJSQVlfU0laRShpcl9jb2Rlc19kdzIxMHhfdGFibGUpIH0sCi0JeyBpcl9jb2Rlc190ZXZpaV90YWJsZSwgQVJSQVlfU0laRShpcl9jb2Rlc190ZXZpaV90YWJsZSkgfSwKLQl7IGlyX2NvZGVzX3Ric190YWJsZSwgQVJSQVlfU0laRShpcl9jb2Rlc190YnNfdGFibGUpIH0sCitzdGF0aWMgc3RydWN0IHJjX21hcF9kdmJfdXNiX3RhYmxlX3RhYmxlIGtleXNfdGFibGVzW10gPSB7CisJeyByY19tYXBfZHcyMTB4X3RhYmxlLCBBUlJBWV9TSVpFKHJjX21hcF9kdzIxMHhfdGFibGUpIH0sCisJeyByY19tYXBfdGV2aWlfdGFibGUsIEFSUkFZX1NJWkUocmNfbWFwX3RldmlpX3RhYmxlKSB9LAorCXsgcmNfbWFwX3Ric190YWJsZSwgQVJSQVlfU0laRShyY19tYXBfdGJzX3RhYmxlKSB9LAogfTsKIAogc3RhdGljIGludCBkdzIxMDJfcmNfcXVlcnkoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLCB1MzIgKmV2ZW50LCBpbnQgKnN0YXRlKQogewotCXN0cnVjdCBpcl9zY2FuY29kZSAqa2V5bWFwID0gZC0+cHJvcHMucmMubGVnYWN5LnJjX2tleV9tYXA7Ci0JaW50IGtleW1hcF9zaXplID0gZC0+cHJvcHMucmMubGVnYWN5LnJjX2tleV9tYXBfc2l6ZTsKKwlzdHJ1Y3QgcmNfbWFwX3RhYmxlICprZXltYXAgPSBkLT5wcm9wcy5yYy5sZWdhY3kucmNfbWFwX3RhYmxlOworCWludCBrZXltYXBfc2l6ZSA9IGQtPnByb3BzLnJjLmxlZ2FjeS5yY19tYXBfc2l6ZTsKIAl1OCBrZXlbMl07CiAJc3RydWN0IGkyY19tc2cgbXNnID0gewogCQkuYWRkciA9IERXMjEwMl9SQ19RVUVSWSwKQEAgLTExODUsMTQgKzExODUsMTQgQEAKIAkJLyogaW5pdCByZWdpc3RlcnMgKi8KIAkJc3dpdGNoIChkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSB7CiAJCWNhc2UgVVNCX1BJRF9QUk9GXzExMDA6Ci0JCQlzNngwX3Byb3BlcnRpZXMucmMubGVnYWN5LnJjX2tleV9tYXAgPSBpcl9jb2Rlc190YnNfdGFibGU7Ci0JCQlzNngwX3Byb3BlcnRpZXMucmMubGVnYWN5LnJjX2tleV9tYXBfc2l6ZSA9Ci0JCQkJCUFSUkFZX1NJWkUoaXJfY29kZXNfdGJzX3RhYmxlKTsKKwkJCXM2eDBfcHJvcGVydGllcy5yYy5sZWdhY3kucmNfbWFwX3RhYmxlID0gcmNfbWFwX3Ric190YWJsZTsKKwkJCXM2eDBfcHJvcGVydGllcy5yYy5sZWdhY3kucmNfbWFwX3NpemUgPQorCQkJCQlBUlJBWV9TSVpFKHJjX21hcF90YnNfdGFibGUpOwogCQkJYnJlYWs7CiAJCWNhc2UgVVNCX1BJRF9URVZJSV9TNjUwOgotCQkJZHcyMTA0X3Byb3BlcnRpZXMucmMubGVnYWN5LnJjX2tleV9tYXAgPSBpcl9jb2Rlc190ZXZpaV90YWJsZTsKLQkJCWR3MjEwNF9wcm9wZXJ0aWVzLnJjLmxlZ2FjeS5yY19rZXlfbWFwX3NpemUgPQotCQkJCQlBUlJBWV9TSVpFKGlyX2NvZGVzX3RldmlpX3RhYmxlKTsKKwkJCWR3MjEwNF9wcm9wZXJ0aWVzLnJjLmxlZ2FjeS5yY19tYXBfdGFibGUgPSByY19tYXBfdGV2aWlfdGFibGU7CisJCQlkdzIxMDRfcHJvcGVydGllcy5yYy5sZWdhY3kucmNfbWFwX3NpemUgPQorCQkJCQlBUlJBWV9TSVpFKHJjX21hcF90ZXZpaV90YWJsZSk7CiAJCWNhc2UgVVNCX1BJRF9EVzIxMDQ6CiAJCQlyZXNldCA9IDE7CiAJCQlkdzIxMHhfb3BfcncoZGV2LCAweGM0LCAweDAwMDAsIDAsICZyZXNldCwgMSwKQEAgLTEyNTcsOCArMTI1Nyw4IEBACiAJLmkyY19hbGdvID0gJmR3MjEwMl9zZXJpdF9pMmNfYWxnbywKIAogCS5yYy5sZWdhY3kgPSB7Ci0JCS5yY19rZXlfbWFwID0gaXJfY29kZXNfZHcyMTB4X3RhYmxlLAotCQkucmNfa2V5X21hcF9zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc19kdzIxMHhfdGFibGUpLAorCQkucmNfbWFwX3RhYmxlID0gcmNfbWFwX2R3MjEweF90YWJsZSwKKwkJLnJjX21hcF9zaXplID0gQVJSQVlfU0laRShyY19tYXBfZHcyMTB4X3RhYmxlKSwKIAkJLnJjX2ludGVydmFsID0gMTUwLAogCQkucmNfcXVlcnkgPSBkdzIxMDJfcmNfcXVlcnksCiAJfSwKQEAgLTEzMTAsOCArMTMxMCw4IEBACiAKIAkuaTJjX2FsZ28gPSAmZHcyMTA0X2kyY19hbGdvLAogCS5yYy5sZWdhY3kgPSB7Ci0JCS5yY19rZXlfbWFwID0gaXJfY29kZXNfZHcyMTB4X3RhYmxlLAotCQkucmNfa2V5X21hcF9zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc19kdzIxMHhfdGFibGUpLAorCQkucmNfbWFwX3RhYmxlID0gcmNfbWFwX2R3MjEweF90YWJsZSwKKwkJLnJjX21hcF9zaXplID0gQVJSQVlfU0laRShyY19tYXBfZHcyMTB4X3RhYmxlKSwKIAkJLnJjX2ludGVydmFsID0gMTUwLAogCQkucmNfcXVlcnkgPSBkdzIxMDJfcmNfcXVlcnksCiAJfSwKQEAgLTEzNTksOCArMTM1OSw4IEBACiAKIAkuaTJjX2FsZ28gPSAmZHczMTAxX2kyY19hbGdvLAogCS5yYy5sZWdhY3kgPSB7Ci0JCS5yY19rZXlfbWFwID0gaXJfY29kZXNfZHcyMTB4X3RhYmxlLAotCQkucmNfa2V5X21hcF9zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc19kdzIxMHhfdGFibGUpLAorCQkucmNfbWFwX3RhYmxlID0gcmNfbWFwX2R3MjEweF90YWJsZSwKKwkJLnJjX21hcF9zaXplID0gQVJSQVlfU0laRShyY19tYXBfZHcyMTB4X3RhYmxlKSwKIAkJLnJjX2ludGVydmFsID0gMTUwLAogCQkucmNfcXVlcnkgPSBkdzIxMDJfcmNfcXVlcnksCiAJfSwKQEAgLTE0MDQsOCArMTQwNCw4IEBACiAKIAkuaTJjX2FsZ28gPSAmczZ4MF9pMmNfYWxnbywKIAkucmMubGVnYWN5ID0gewotCQkucmNfa2V5X21hcCA9IGlyX2NvZGVzX3RldmlpX3RhYmxlLAotCQkucmNfa2V5X21hcF9zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc190ZXZpaV90YWJsZSksCisJCS5yY19tYXBfdGFibGUgPSByY19tYXBfdGV2aWlfdGFibGUsCisJCS5yY19tYXBfc2l6ZSA9IEFSUkFZX1NJWkUocmNfbWFwX3RldmlpX3RhYmxlKSwKIAkJLnJjX2ludGVydmFsID0gMTUwLAogCQkucmNfcXVlcnkgPSBkdzIxMDJfcmNfcXVlcnksCiAJfSwKQEAgLTE0NjgsOCArMTQ2OCw4IEBACiAJLyogZmlsbCBvbmx5IGRpZmZlcmVudCBmaWVsZHMgKi8KIAlwNzUwMC0+ZmlybXdhcmUgPSAiZHZiLXVzYi1wNzUwMC5mdyI7CiAJcDc1MDAtPmRldmljZXNbMF0gPSBkNzUwMDsKLQlwNzUwMC0+cmMubGVnYWN5LnJjX2tleV9tYXAgPSBpcl9jb2Rlc190YnNfdGFibGU7Ci0JcDc1MDAtPnJjLmxlZ2FjeS5yY19rZXlfbWFwX3NpemUgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX3Ric190YWJsZSk7CisJcDc1MDAtPnJjLmxlZ2FjeS5yY19tYXBfdGFibGUgPSByY19tYXBfdGJzX3RhYmxlOworCXA3NTAwLT5yYy5sZWdhY3kucmNfbWFwX3NpemUgPSBBUlJBWV9TSVpFKHJjX21hcF90YnNfdGFibGUpOwogCXA3NTAwLT5hZGFwdGVyLT5mcm9udGVuZF9hdHRhY2ggPSBwcm9mXzc1MDBfZnJvbnRlbmRfYXR0YWNoOwogCiAJaWYgKDAgPT0gZHZiX3VzYl9kZXZpY2VfaW5pdChpbnRmLCAmZHcyMTAyX3Byb3BlcnRpZXMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2dwOHBzay5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9ncDhwc2suYwppbmRleCBjODIxMjkzLi4xY2IzZDlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2dwOHBzay5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZ3A4cHNrLmMKQEAgLTI0LDYgKzI0LDMzIEBACiAKIERWQl9ERUZJTkVfTU9EX09QVF9BREFQVEVSX05SKGFkYXB0ZXJfbnIpOwogCitzdGF0aWMgaW50IGdwOHBza19nZXRfZndfdmVyc2lvbihzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIHU4ICpmd192ZXJzKQoreworCXJldHVybiAoZ3A4cHNrX3VzYl9pbl9vcChkLCBHRVRfRldfVkVSUywgMCwgMCwgZndfdmVycywgNikpOworfQorCitzdGF0aWMgaW50IGdwOHBza19nZXRfZnBnYV92ZXJzaW9uKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgdTggKmZwZ2FfdmVycykKK3sKKwlyZXR1cm4gKGdwOHBza191c2JfaW5fb3AoZCwgR0VUX0ZQR0FfVkVSUywgMCwgMCwgZnBnYV92ZXJzLCAxKSk7Cit9CisKK3N0YXRpYyB2b2lkIGdwOHBza19pbmZvKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCkKK3sKKwl1OCBmcGdhX3ZlcnMsIGZ3X3ZlcnNbNl07CisKKwlpZiAoIWdwOHBza19nZXRfZndfdmVyc2lvbihkLCBmd192ZXJzKSkKKwkJaW5mbygiRlcgVmVyc2lvbiA9ICVpLiUwMmkuJWkgKDB4JXgpICBCdWlsZCAlNGkvJTAyaS8lMDJpIiwKKwkJZndfdmVyc1syXSwgZndfdmVyc1sxXSwgZndfdmVyc1swXSwgR1A4UFNLX0ZXX1ZFUlMoZndfdmVycyksCisJCTIwMDAgKyBmd192ZXJzWzVdLCBmd192ZXJzWzRdLCBmd192ZXJzWzNdKTsKKwllbHNlCisJCWluZm8oImZhaWxlZCB0byBnZXQgRlcgdmVyc2lvbiIpOworCisJaWYgKCFncDhwc2tfZ2V0X2ZwZ2FfdmVyc2lvbihkLCAmZnBnYV92ZXJzKSkKKwkJaW5mbygiRlBHQSBWZXJzaW9uID0gJWkiLCBmcGdhX3ZlcnMpOworCWVsc2UKKwkJaW5mbygiZmFpbGVkIHRvIGdldCBGUEdBIHZlcnNpb24iKTsKK30KKwogaW50IGdwOHBza191c2JfaW5fb3Aoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLCB1OCByZXEsIHUxNiB2YWx1ZSwgdTE2IGluZGV4LCB1OCAqYiwgaW50IGJsZW4pCiB7CiAJaW50IHJldCA9IDAsdHJ5ID0gMDsKQEAgLTE0Niw2ICsxNzMsNyBAQAogCQkJCWdwOHBza191c2Jfb3V0X29wKGQsIENXM0tfSU5JVCwgMSwgMCwgTlVMTCwgMCk7CiAJCQlpZiAoZ3A4cHNrX3VzYl9pbl9vcChkLCBCT09UXzhQU0ssIDEsIDAsICZidWYsIDEpKQogCQkJCXJldHVybiAtRUlOVkFMOworCQkJZ3A4cHNrX2luZm8oZCk7CiAJCX0KIAogCQlpZiAoZ3BfcHJvZHVjdF9pZCA9PSBVU0JfUElEX0dFTlBJWF84UFNLX1JFVl8xX1dBUk0pCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2dwOHBzay5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9ncDhwc2suaAppbmRleCBlODNhNTc1Li44MzE3NDlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2dwOHBzay5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZ3A4cHNrLmgKQEAgLTI1LDcgKzI1LDYgQEAKICNkZWZpbmUgZGViX3hmZXIoYXJncy4uLikgZHByaW50ayhkdmJfdXNiX2dwOHBza19kZWJ1ZywweDAyLGFyZ3MpCiAjZGVmaW5lIGRlYl9yYyhhcmdzLi4uKSAgIGRwcmludGsoZHZiX3VzYl9ncDhwc2tfZGVidWcsMHgwNCxhcmdzKQogI2RlZmluZSBkZWJfZmUoYXJncy4uLikgICBkcHJpbnRrKGR2Yl91c2JfZ3A4cHNrX2RlYnVnLDB4MDgsYXJncykKLS8qIGdwOHBzayBjb21tYW5kcyAqLwogCiAvKiBUd2luaGFuIFZlbmRvciByZXF1ZXN0cyAqLwogI2RlZmluZSBUSF9DT01NQU5EX0lOICAgICAgICAgICAgICAgICAgICAgMHhDMApAQCAtNDksOCArNDgsMTAgQEAKICNkZWZpbmUgU0VUX0RWQl9NT0RFICAgICAgICAgICAgICAgICAgICAweDhFCiAjZGVmaW5lIFNFVF9ETl9TV0lUQ0ggICAgICAgICAgICAgICAgICAgMHg4RgogI2RlZmluZSBHRVRfU0lHTkFMX0xPQ0sgICAgICAgICAgICAgICAgIDB4OTAgICAgLyogaW4gKi8KKyNkZWZpbmUgR0VUX0ZXX1ZFUlMJCQkweDkyCiAjZGVmaW5lIEdFVF9TRVJJQUxfTlVNQkVSICAgICAgICAgICAgICAgMHg5MyAgICAvKiBpbiAqLwogI2RlZmluZSBVU0VfRVhUUkFfVk9MVCAgICAgICAgICAgICAgICAgIDB4OTQKKyNkZWZpbmUgR0VUX0ZQR0FfVkVSUwkJCTB4OTUKICNkZWZpbmUgQ1czS19JTklUCQkJMHg5ZAogCiAvKiBQU0tfY29uZmlndXJhdGlvbiBiaXRzICovCkBAIC04OCw2ICs4OSwxMSBAQAogI2RlZmluZSBQUk9EVUNUX1NUUklOR19SRUFEICAgICAgICAgICAgICAgMHgwRAogI2RlZmluZSBGV19CQ0RfVkVSU0lPTl9SRUFEICAgICAgICAgICAgICAgMHgxNAogCisvKiBmaXJtd2FyZSByZXZpc2lvbiBpZCdzICovCisjZGVmaW5lIEdQOFBTS19GV19SRVYxCQkJMHgwMjA2MDQKKyNkZWZpbmUgR1A4UFNLX0ZXX1JFVjIJCQkweDAyMDcwNAorI2RlZmluZSBHUDhQU0tfRldfVkVSUyhfZndfdmVycykJKChfZndfdmVycylbMl08PDB4MTAgfCAoX2Z3X3ZlcnMpWzFdPDwweDA4IHwgKF9md192ZXJzKVswXSkKKwogZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQgKiBncDhwc2tfZmVfYXR0YWNoKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCk7CiBleHRlcm4gaW50IGdwOHBza191c2JfaW5fb3Aoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLCB1OCByZXEsIHUxNiB2YWx1ZSwgdTE2IGluZGV4LCB1OCAqYiwgaW50IGJsZW4pOwogZXh0ZXJuIGludCBncDhwc2tfdXNiX291dF9vcChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIHU4IHJlcSwgdTE2IHZhbHVlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9sbWVkbTA0LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2xtZWRtMDQuYwppbmRleCBkOTM5ZmJiLi45ZWVhNDE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2xtZWRtMDQuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2xtZWRtMDQuYwpAQCAtNjEsNyArNjEsNyBAQAogI2RlZmluZSBEVkJfVVNCX0xPR19QUkVGSVggIkxNRTI1MTAoQykiCiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL2lucHV0Lmg+Ci0jaW5jbHVkZSA8bWVkaWEvaXItY29yZS5oPgorI2luY2x1ZGUgPG1lZGlhL3JjLWNvcmUuaD4KIAogI2luY2x1ZGUgImR2Yi11c2IuaCIKICNpbmNsdWRlICJsbWVkbTA0LmgiCkBAIC0xMTIsNyArMTEyLDYgQEAKIAl1OCBpMmNfdHVuZXJfZ2F0ZV9yOwogCXU4IGkyY190dW5lcl9hZGRyOwogCXU4IHN0cmVhbV9vbjsKLQl1OCBvbmVfdHVuZTsKIAl2b2lkICpidWZmZXI7CiAJc3RydWN0IHVyYiAqbG1lX3VyYjsKIAl2b2lkICp1c2JfYnVmZmVyOwpAQCAtMTI1LDcgKzEyNCw3IEBACiAJaW50IHJldCwgYWN0dWFsX2w7CiAKIAlyZXQgPSB1c2JfYnVsa19tc2coZGV2LCB1c2Jfc25kYnVsa3BpcGUoZGV2LCBwaXBlKSwKLQkJCQlzbmQsIGxlbiAsICZhY3R1YWxfbCwgNTAwKTsKKwkJCQlzbmQsIGxlbiAsICZhY3R1YWxfbCwgMTAwKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xMzUsNyArMTM0LDcgQEAKIAlpbnQgcmV0LCBhY3R1YWxfbDsKIAogCXJldCA9IHVzYl9idWxrX21zZyhkZXYsIHVzYl9yY3ZidWxrcGlwZShkZXYsIHBpcGUpLAotCQkJCSByZXYsIGxlbiAsICZhY3R1YWxfbCwgNTAwKTsKKwkJCQkgcmV2LCBsZW4gLCAmYWN0dWFsX2wsIDIwMCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTY3LDcgKzE2Niw3IEBACiAKIAlyZXQgfD0gbG1lMjUxMF9idWxrX3dyaXRlKGQtPnVkZXYsIGJ1ZmYsIHdsZW4gLCAweDAxKTsKIAotCW1zbGVlcCgxMik7CisJbXNsZWVwKDEwKTsKIAogCXJldCB8PSB1c2JfY2xlYXJfaGFsdChkLT51ZGV2LCB1c2JfcmN2YnVsa3BpcGUoZC0+dWRldiwgMHgwMSkpOwogCkBAIC0xODIsMTUgKzE4MSwxMyBAQAogCXJldHVybiAocmV0IDwgMCkgPyAtRU5PREVWIDogMDsKIH0KIAotc3RhdGljIGludCBsbWUyNTEwX3VzYl90YWxrX3Jlc3RhcnQoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLAotCQl1OCAqd2J1ZiwgaW50IHdsZW4sIHU4ICpyYnVmLCBpbnQgcmxlbikgeworc3RhdGljIGludCBsbWUyNTEwX3N0cmVhbV9yZXN0YXJ0KHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCkKK3sKIAlzdGF0aWMgdTggc3RyZWFtX29uW10gPSBMTUVfU1RfT05fVzsKIAlpbnQgcmV0OwogCXU4IHJidWZmWzEwXTsKLQkvKlNlbmQgTm9ybWFsIENvbW1hbmQqLwotCXJldCA9IGxtZTI1MTBfdXNiX3RhbGsoZCwgd2J1Ziwgd2xlbiwgcmJ1Ziwgcmxlbik7CiAJLypSZXN0YXJ0IFN0cmVhbSBDb21tYW5kKi8KLQlyZXQgfD0gbG1lMjUxMF91c2JfdGFsayhkLCBzdHJlYW1fb24sIHNpemVvZihzdHJlYW1fb24pLAorCXJldCA9IGxtZTI1MTBfdXNiX3RhbGsoZCwgc3RyZWFtX29uLCBzaXplb2Yoc3RyZWFtX29uKSwKIAkJCXJidWZmLCBzaXplb2YocmJ1ZmYpKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjAxLDcgKzE5OCw3IEBACiAJZGViX2luZm8oMSwgIklOVCBLZXkgS2V5cHJlc3MgPSUwNHgiLCBrZXlwcmVzcyk7CiAKIAlpZiAoa2V5cHJlc3MgPiAwKQotCQlpcl9rZXlkb3duKGQtPnJjX2lucHV0X2Rldiwga2V5cHJlc3MsIDApOworCQlyY19rZXlkb3duKGQtPnJjX2Rldiwga2V5cHJlc3MsIDApOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yNTQsMTEgKzI1MSwxNiBAQAogCQkJY2FzZSBUVU5FUl9TNzM5NToKIAkJCQkvKiBUd2VhayBmb3IgZWFybGllciBmaXJtd2FyZSovCiAJCQkJaWYgKGlidWZbMV0gPT0gMHgwMykgeworCQkJCQlpZiAoaWJ1ZlsyXSA+IDEpCisJCQkJCQlzdC0+c2lnbmFsX2xvY2sgPSBpYnVmWzJdOwogCQkJCQlzdC0+c2lnbmFsX2xldmVsID0gaWJ1ZlszXTsKIAkJCQkJc3QtPnNpZ25hbF9zbiA9IGlidWZbNF07CiAJCQkJfSBlbHNlIHsKIAkJCQkJc3QtPnNpZ25hbF9sZXZlbCA9IGlidWZbNF07CiAJCQkJCXN0LT5zaWduYWxfc24gPSBpYnVmWzVdOworCQkJCQlzdC0+c2lnbmFsX2xvY2sgPQorCQkJCQkJKHN0LT5zaWduYWxfbG9jayAmIDB4ZjcpICsKKwkJCQkJCSgoaWJ1ZlsyXSAmIDB4MDEpIDw8IDB4MDMpOwogCQkJCX0KIAkJCQlicmVhazsKIAkJCWRlZmF1bHQ6CkBAIC0zNDEsMTEgKzM0MywxMCBAQAogCQkJCQlzdC0+c2lnbmFsX2xvY2sgPSByYnVmWzFdOwogCQkJCQlpZiAoKHN0LT5zdHJlYW1fb24gJiAxKSAmJgogCQkJCQkJKHN0LT5zaWduYWxfbG9jayAmIDB4MTApKSB7Ci0JCQkJCQlsbWUyNTEwX3VzYl90YWxrX3Jlc3RhcnQoZCwKLQkJCQkJCQl3YnVmLCB3bGVuLCByYnVmLCBybGVuKTsKKwkJCQkJCWxtZTI1MTBfc3RyZWFtX3Jlc3RhcnQoZCk7CiAJCQkJCQlzdC0+aTJjX3RhbGtfb25vZmYgPSAwOwogCQkJCQl9Ci0JCQkJbXNsZWVwKDgwKTsKKwkJCQkJbXNsZWVwKDgwKTsKIAkJCQl9CiAJCQl9CiAJCQlicmVhazsKQEAgLTM1NSwxNSArMzU2LDEyIEBACiAJCQkJCXN0LT5zaWduYWxfbG9jayA9IHJidWZbMV07CiAJCQkJCWlmICgoc3QtPnN0cmVhbV9vbiAmIDEpICYmCiAJCQkJCQkoc3QtPnNpZ25hbF9sb2NrICYgMHg4KSkgewotCQkJCQkJbG1lMjUxMF91c2JfdGFsa19yZXN0YXJ0KGQsCi0JCQkJCQkJd2J1Ziwgd2xlbiwgcmJ1Ziwgcmxlbik7CisJCQkJCQlsbWUyNTEwX3N0cmVhbV9yZXN0YXJ0KGQpOwogCQkJCQkJc3QtPmkyY190YWxrX29ub2ZmID0gMDsKIAkJCQkJfQogCQkJCX0KIAkJCQlpZiAoKHdidWZbM10gIT0gMHg2KSAmICh3YnVmWzNdICE9IDB4NSkpCiAJCQkJCW1zbGVlcCg1KTsKLQotCiAJCQl9CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKQEAgLTM4NSwxOCArMzgzLDE2IEBACiAJCQkJcmJ1ZlswXSA9IDB4NTU7CiAJCQkJcmJ1ZlsxXSA9IHN0LT5zaWduYWxfc247CiAJCQkJYnJlYWs7Ci0JCQkvKkRpU0VxQyBmdW5jdGlvbnMgYXMgcGVyIFREQTEwMDg2Ki8KLQkJCWNhc2UgMHgzNjoKLQkJCWNhc2UgMHg0ODoKLQkJCWNhc2UgMHg0OToKLQkJCWNhc2UgMHg0YToKLQkJCWNhc2UgMHg0YjoKLQkJCWNhc2UgMHg0YzoKLQkJCWNhc2UgMHg0ZDoKLQkJCWlmICh3YnVmWzJdID09IDB4MWMpCi0JCQkJCWxtZTI1MTBfdXNiX3RhbGtfcmVzdGFydChkLAotCQkJCQkJd2J1Ziwgd2xlbiwgcmJ1Ziwgcmxlbik7CisJCQljYXNlIDB4MTU6CisJCQljYXNlIDB4MTY6CisJCQljYXNlIDB4MTc6CisJCQljYXNlIDB4MTg6CisJCQkJcmJ1ZlswXSA9IDB4NTU7CisJCQkJcmJ1ZlsxXSA9IDB4MDA7CisJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgorCQkJCWxtZTI1MTBfdXNiX3RhbGsoZCwgd2J1Ziwgd2xlbiwgcmJ1Ziwgcmxlbik7CisJCQkJc3QtPmkyY190YWxrX29ub2ZmID0gMTsKIAkJCQlicmVhazsKIAkJCX0KIAkJCWJyZWFrOwpAQCAtNDEzLDM5ICs0MDksMjIgQEAKIAkJCQlicmVhazsKIAkJCWNhc2UgMHgyNDoKIAkJCQlyYnVmWzBdID0gMHg1NTsKLQkJCQlyYnVmWzFdID0gKHN0LT5zaWduYWxfbGV2ZWwgJiAweDgwKQotCQkJCQkJPyAwIDogc3QtPnNpZ25hbF9sb2NrOworCQkJCXJidWZbMV0gPSBzdC0+c2lnbmFsX2xvY2s7CiAJCQkJYnJlYWs7Ci0JCQljYXNlIDB4NjoKLQkJCQlpZiAod2J1ZlsyXSA9PSAweGQwKQotCQkJCQlsbWUyNTEwX3VzYl90YWxrKGQsCi0JCQkJCQl3YnVmLCB3bGVuLCByYnVmLCBybGVuKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgMHgxOgotCQkJCWlmIChzdC0+b25lX3R1bmUgPiAwKQotCQkJCQlicmVhazsKLQkJCQlzdC0+b25lX3R1bmUrKzsKLQkJCQlzdC0+aTJjX3RhbGtfb25vZmYgPSAxOwotCQkJLypEaVNFcUMgZnVuY3Rpb25zIGFzIHBlciBTVFYwMjg4Ki8KLQkJCWNhc2UgMHg1OgotCQkJY2FzZSAweDc6Ci0JCQljYXNlIDB4ODoKLQkJCWNhc2UgMHg5OgotCQkJY2FzZSAweGE6Ci0JCQljYXNlIDB4YjoKLQkJCQlpZiAod2J1ZlsyXSA9PSAweGQwKQotCQkJCQlsbWUyNTEwX3VzYl90YWxrX3Jlc3RhcnQoZCwKLQkJCQkJCXdidWYsIHdsZW4sIHJidWYsIHJsZW4pOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKKwkJCWNhc2UgMHgyZToKKwkJCWNhc2UgMHgyNjoKKwkJCWNhc2UgMHgyNzoKIAkJCQlyYnVmWzBdID0gMHg1NTsKIAkJCQlyYnVmWzFdID0gMHgwMDsKIAkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJbG1lMjUxMF91c2JfdGFsayhkLCB3YnVmLCB3bGVuLCByYnVmLCBybGVuKTsKKwkJCQlzdC0+aTJjX3RhbGtfb25vZmYgPSAxOworCQkJCWJyZWFrOwogCQkJfQogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlicmVhazsKLQogCQl9CiAKIAkJZGViX2luZm8oNCwgIkkyQyBGcm9tIEludGVydXB0IE1lc3NhZ2Ugb3V0KCUwMngpIGluKCUwMngpIiwKQEAgLTU0OCwzNSArNTI3LDI2IEBACiBzdGF0aWMgaW50IGxtZTI1MTBfc3RyZWFtaW5nX2N0cmwoc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCwgaW50IG9ub2ZmKQogewogCXN0cnVjdCBsbWUyNTEwX3N0YXRlICpzdCA9IGFkYXAtPmRldi0+cHJpdjsKLQlzdGF0aWMgdTggc3RyZWFtX29uW10gPSBMTUVfU1RfT05fVzsKIAlzdGF0aWMgdTggY2xlYXJfcmVnXzNbXSA9ICBMTUVfQ0xFQVJfUElEOwogCXN0YXRpYyB1OCByYnVmWzFdOwotCXN0YXRpYyB1OCB0aW1lb3V0OwotCWludCByZXQgPSAwLCBsZW4gPSAyLCBybGVuID0gc2l6ZW9mKHJidWYpOworCWludCByZXQgPSAwLCBybGVuID0gc2l6ZW9mKHJidWYpOwogCiAJZGViX2luZm8oMSwgIlNUTSAgKCUwMngpIiwgb25vZmYpOwogCi0JaWYgKG9ub2ZmID09IDEpCXsKLQkJc3QtPmkyY190YWxrX29ub2ZmID0gMDsKLQkJdGltZW91dCA9IDA7Ci0JCS8qIHdhaXQgZm9yIGkyQyB0byBiZSBmcmVlICovCi0JCXdoaWxlIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmFkYXAtPmRldi0+aTJjX211dGV4KSA8IDApIHsKLQkJCXRpbWVvdXQrKzsKLQkJCWlmICh0aW1lb3V0ID4gNSkKLQkJCQlyZXR1cm4gLUVOT0RFVjsKLQkJfQotCQltc2xlZXAoMTAwKTsKLQkJcmV0IHw9IGxtZTI1MTBfdXNiX3RhbGsoYWRhcC0+ZGV2LAotCQkJCSBzdHJlYW1fb24sICBsZW4sIHJidWYsIHJsZW4pOworCS8qIFN0cmVhbWluZyBpcyBzdGFydGVkIGJ5IEZFX0hBU19MT0NLICovCisJaWYgKG9ub2ZmID09IDEpCiAJCXN0LT5zdHJlYW1fb24gPSAxOwotCQlzdC0+b25lX3R1bmUgPSAwOwotCQltdXRleF91bmxvY2soJmFkYXAtPmRldi0+aTJjX211dGV4KTsKLQl9IGVsc2UgeworCWVsc2UgewogCQlkZWJfaW5mbygxLCAiU1RNIFN0ZWFtIE9mZiIpOworCQkvKiBtdXRleCBpcyBoZXJlIG9ubHkgdG8gYXZvaWQgY29sbGlzaW9uIHdpdGggSTJDICovCisJCXJldCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmYWRhcC0+ZGV2LT5pMmNfbXV0ZXgpOworCiAJCXJldCB8PSBsbWUyNTEwX3VzYl90YWxrKGFkYXAtPmRldiwgY2xlYXJfcmVnXzMsCiAJCQkJc2l6ZW9mKGNsZWFyX3JlZ18zKSwgcmJ1Ziwgcmxlbik7CiAJCXN0LT5zdHJlYW1fb24gPSAwOwogCQlzdC0+aTJjX3RhbGtfb25vZmYgPSAxOworCisJCW11dGV4X3VubG9jaygmYWRhcC0+ZGV2LT5pMmNfbXV0ZXgpOwogCX0KIAogCXJldHVybiAocmV0IDwgMCkgPyAtRU5PREVWIDogMDsKQEAgLTU4NSw0MSArNTU1LDQwIEBACiBzdGF0aWMgaW50IGxtZTI1MTBfaW50X3NlcnZpY2Uoc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCkKIHsKIAlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQgPSBhZGFwLT5kZXY7Ci0Jc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OwotCWNoYXIgKmlyX2NvZGVzID0gUkNfTUFQX0xNRTI1MTA7Ci0JaW50IHJldCA9IDA7CisJc3RydWN0IHJjX2RldiAqcmM7CisJaW50IHJldDsKIAogCWluZm8oIlNUQSBDb25maWd1cmluZyBSZW1vdGUiKTsKIAotCXVzYl9tYWtlX3BhdGgoZC0+dWRldiwgZC0+cmNfcGh5cywgc2l6ZW9mKGQtPnJjX3BoeXMpKTsKLQotCXN0cmxjYXQoZC0+cmNfcGh5cywgIi9pcjAiLCBzaXplb2YoZC0+cmNfcGh5cykpOwotCi0JaW5wdXRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7Ci0JaWYgKCFpbnB1dF9kZXYpCisJcmMgPSByY19hbGxvY2F0ZV9kZXZpY2UoKTsKKwlpZiAoIXJjKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWlucHV0X2Rldi0+bmFtZSA9ICJMTUUyNTEwIFJlbW90ZSBDb250cm9sIjsKLQlpbnB1dF9kZXYtPnBoeXMgPSBkLT5yY19waHlzOworCXVzYl9tYWtlX3BhdGgoZC0+dWRldiwgZC0+cmNfcGh5cywgc2l6ZW9mKGQtPnJjX3BoeXMpKTsKKwlzdHJsY2F0KGQtPnJjX3BoeXMsICIvaXIwIiwgc2l6ZW9mKGQtPnJjX3BoeXMpKTsKIAotCXVzYl90b19pbnB1dF9pZChkLT51ZGV2LCAmaW5wdXRfZGV2LT5pZCk7CisJcmMtPmlucHV0X25hbWUgPSAiTE1FMjUxMCBSZW1vdGUgQ29udHJvbCI7CisJcmMtPmlucHV0X3BoeXMgPSBkLT5yY19waHlzOworCXJjLT5tYXBfbmFtZSA9IFJDX01BUF9MTUUyNTEwOworCXJjLT5kcml2ZXJfbmFtZSA9ICJMTUUgMjUxMCI7CisJdXNiX3RvX2lucHV0X2lkKGQtPnVkZXYsICZyYy0+aW5wdXRfaWQpOwogCi0JcmV0IHw9IGlyX2lucHV0X3JlZ2lzdGVyKGlucHV0X2RldiwgaXJfY29kZXMsIE5VTEwsICJMTUUgMjUxMCIpOwotCisJcmV0ID0gcmNfcmVnaXN0ZXJfZGV2aWNlKHJjKTsKIAlpZiAocmV0KSB7Ci0JCWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0X2Rldik7CisJCXJjX2ZyZWVfZGV2aWNlKHJjKTsKIAkJcmV0dXJuIHJldDsKIAl9CisJZC0+cmNfZGV2ID0gcmM7CiAKLQlkLT5yY19pbnB1dF9kZXYgPSBpbnB1dF9kZXY7CiAJLyogU3RhcnQgdGhlIEludGVydXB0ICovCiAJcmV0ID0gbG1lMjUxMF9pbnRfcmVhZChhZGFwKTsKLQogCWlmIChyZXQgPCAwKSB7Ci0JCWlyX2lucHV0X3VucmVnaXN0ZXIoaW5wdXRfZGV2KTsKLQkJaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXRfZGV2KTsKKwkJcmNfdW5yZWdpc3Rlcl9kZXZpY2UocmMpOworCQlpbmZvKCJJTlQgVW5hYmxlIHRvIHN0YXJ0IEludGVydXB0IFNlcnZpY2UiKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCXJldHVybiAocmV0IDwgMCkgPyAtRU5PREVWIDogMDsKKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdTggY2hlY2tfc3VtKHU4ICpwLCB1OCBsZW4pCkBAIC02NjgsNiArNjM3LDcgQEAKIAkJcmV0IHw9IChkYXRhWzBdID09IDB4ODgpID8gMCA6IC0xOwogCQl9CiAJfQorCiAJdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3JjdmN0cmxwaXBlKGRldiwgMCksCiAJCQkweDA2LCAweDgwLCAweDAyMDAsIDB4MDAsIGRhdGEsIDB4MDEwOSwgMTAwMCk7CiAKQEAgLTcwMSwxMCArNjcxLDExIEBACiAJaW5mbygiRlJNIEZpcm13YXJlIENvbGQgUmVzZXQiKTsKIAlyZXQgfD0gbG1lMjUxMF9idWxrX3dyaXRlKGRldiwgZGF0YSAsIGxlbl9pbiwgMSk7IC8qQ29sZCBSZXNldHRpbmcqLwogCXJldCB8PSBsbWUyNTEwX2J1bGtfcmVhZChkZXYsIGRhdGEsIGxlbl9pbiwgMSk7CisKIAlyZXR1cm47CiB9CiAKLXN0YXRpYyB2b2lkIGxtZV9maXJtd2FyZV9zd2l0Y2goc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIGludCBjb2xkKQorc3RhdGljIGludCBsbWVfZmlybXdhcmVfc3dpdGNoKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCBpbnQgY29sZCkKIHsKIAljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3ID0gTlVMTDsKIAljaGFyIGxtZTI1MTBjX3M3Mzk1W10gPSAiZHZiLXVzYi1sbWUyNTEwYy1zNzM5NS5mdyI7CkBAIC03MTIsOCArNjgzLDEwIEBACiAJY2hhciAqZmlybV9tc2dbXSA9IHsiTG9hZGluZyIsICJTd2l0Y2hpbmcgdG8ifTsKIAlpbnQgcmV0OwogCisJY29sZCA9IChjb2xkID4gMCkgPyAoY29sZCAmIDEpIDogMDsKKwogCWlmICh1ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCA9PSAweDExMjIpCi0JCXJldHVybjsKKwkJcmV0dXJuIDA7CiAKIAlzd2l0Y2ggKGR2Yl91c2JfbG1lMjUxMF9maXJtd2FyZSkgewogCWNhc2UgMDoKQEAgLTc0MCwyMiArNzEzLDI4IEBACiAJCWNvbGQgPSAwOwogCQlicmVhazsKIAl9CisKIAlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKLQlpZiAoY29sZCkKKworCWlmIChjb2xkKSB7CiAJCWxtZV9jb2xkcmVzZXQodWRldik7Ci0JcmV0dXJuOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGxtZTI1MTBfa2lsbF91cmIoc3RydWN0IHVzYl9kYXRhX3N0cmVhbSAqc3RyZWFtKQogewogCWludCBpOworCiAJZm9yIChpID0gMDsgaSA8IHN0cmVhbS0+dXJic19zdWJtaXR0ZWQ7IGkrKykgewogCQlkZWJfaW5mbygzLCAia2lsbGluZyBVUkIgbm8uICVkLiIsIGkpOwotCiAJCS8qIHN0b3AgdGhlIFVSQiAqLwogCQl1c2Jfa2lsbF91cmIoc3RyZWFtLT51cmJfbGlzdFtpXSk7CiAJfQogCXN0cmVhbS0+dXJic19zdWJtaXR0ZWQgPSAwOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTc4MywxOCArNzYyLDEzIEBACiAJCQkJCWZlX3NlY192b2x0YWdlX3Qgdm9sdGFnZSkKIHsKIAlzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwID0gZmUtPmR2Yi0+cHJpdjsKLQlzdHJ1Y3QgbG1lMjUxMF9zdGF0ZSAqc3QgPSBhZGFwLT5kZXYtPnByaXY7CiAJc3RhdGljIHU4IHZvbHRhZ2VfbG93W10JPSBMTUVfVk9MVEFHRV9MOwogCXN0YXRpYyB1OCB2b2x0YWdlX2hpZ2hbXSA9IExNRV9WT0xUQUdFX0g7Ci0Jc3RhdGljIHU4IGxuYl9vbltdID0gTE5CX09OOwotCXN0YXRpYyB1OCBsbmJfb2ZmW10gPSBMTkJfT0ZGOwogCXN0YXRpYyB1OCByYnVmWzFdOwogCWludCByZXQgPSAwLCBsZW4gPSAzLCBybGVuID0gMTsKIAotCWlmIChzdC0+c3RyZWFtX29uID09IDEpCi0JCXJldHVybiAwOwotCi0JcmV0IHw9IGxtZTI1MTBfdXNiX3RhbGsoYWRhcC0+ZGV2LCBsbmJfb24sIGxlbiwgcmJ1Ziwgcmxlbik7CisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmYWRhcC0+ZGV2LT5pMmNfbXV0ZXgpIDwgMCkKKwkJCXJldHVybiAtRUFHQUlOOwogCiAJc3dpdGNoICh2b2x0YWdlKSB7CiAJY2FzZSBTRUNfVk9MVEFHRV8xODoKQEAgLTgwMyw5NCArNzc3LDE0MyBAQAogCQlicmVhazsKIAogCWNhc2UgU0VDX1ZPTFRBR0VfT0ZGOgotCQlyZXQgfD0gbG1lMjUxMF91c2JfdGFsayhhZGFwLT5kZXYsCi0JCQkJCWxuYl9vZmYsIGxlbiwgcmJ1Ziwgcmxlbik7CiAJY2FzZSBTRUNfVk9MVEFHRV8xMzoKIAlkZWZhdWx0OgogCQlyZXQgfD0gbG1lMjUxMF91c2JfdGFsayhhZGFwLT5kZXYsCiAJCQkJdm9sdGFnZV9sb3csIGxlbiwgcmJ1Ziwgcmxlbik7CiAJCWJyZWFrOworCX0KIAorCW11dGV4X3VubG9jaygmYWRhcC0+ZGV2LT5pMmNfbXV0ZXgpOwogCi0JfTsKLQlzdC0+aTJjX3RhbGtfb25vZmYgPSAxOwogCXJldHVybiAocmV0IDwgMCkgPyAtRU5PREVWIDogMDsKIH0KIAorc3RhdGljIGludCBsbWVfbmFtZShzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwKQoreworCXN0cnVjdCBsbWUyNTEwX3N0YXRlICpzdCA9IGFkYXAtPmRldi0+cHJpdjsKKwljb25zdCBjaGFyICpkZXNjID0gYWRhcC0+ZGV2LT5kZXNjLT5uYW1lOworCWNoYXIgKmZlX25hbWVbXSA9IHsiIiwgIiBMRyBURFFZLVAwMDFGIiwgIiBTSEFSUDpCUzJGN0haNzM5NSJ9OworCWNoYXIgKm5hbWUgPSBhZGFwLT5mZS0+b3BzLmluZm8ubmFtZTsKKworCXN0cmxjcHkobmFtZSwgZGVzYywgMTI4KTsKKwlzdHJsY2F0KG5hbWUsIGZlX25hbWVbc3QtPnR1bmVyX2NvbmZpZ10sIDEyOCk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBkbTA0X2xtZTI1MTBfZnJvbnRlbmRfYXR0YWNoKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXApCiB7Ci0JaW50IHJldCA9IDA7CiAJc3RydWN0IGxtZTI1MTBfc3RhdGUgKnN0ID0gYWRhcC0+ZGV2LT5wcml2OwogCi0JLyogSW50ZXJ1cHQgU3RhcnQgICovCi0JcmV0ID0gbG1lMjUxMF9pbnRfc2VydmljZShhZGFwKTsKLQlpZiAocmV0IDwgMCkgewotCQlpbmZvKCJJTlQgVW5hYmxlIHRvIHN0YXJ0IEludGVydXB0IFNlcnZpY2UiKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQorCWludCByZXQgPSAwOwogCiAJc3QtPmkyY190YWxrX29ub2ZmID0gMTsKLQlzdC0+aTJjX2dhdGUgPSA0OwogCisJc3QtPmkyY19nYXRlID0gNDsKIAlhZGFwLT5mZSA9IGR2Yl9hdHRhY2godGRhMTAwODZfYXR0YWNoLCAmdGRhMTAwODZfY29uZmlnLAogCQkmYWRhcC0+ZGV2LT5pMmNfYWRhcCk7CiAKIAlpZiAoYWRhcC0+ZmUpIHsKIAkJaW5mbygiVFVOIEZvdW5kIEZyb250ZW5kIFREQTEwMDg2Iik7Ci0JCW1lbWNweSgmYWRhcC0+ZmUtPm9wcy5pbmZvLm5hbWUsCi0JCQkJJiJETTA0X0xHX1REUVktUDAwMUYgRFZCLVMiLCAyNCk7Ci0JCWFkYXAtPmZlLT5vcHMuc2V0X3ZvbHRhZ2UgPSBkbTA0X2xtZTI1MTBfc2V0X3ZvbHRhZ2U7CiAJCXN0LT5pMmNfdHVuZXJfZ2F0ZV93ID0gNDsKIAkJc3QtPmkyY190dW5lcl9nYXRlX3IgPSA0OwogCQlzdC0+aTJjX3R1bmVyX2FkZHIgPSAweGMwOwotCQlpZiAoZHZiX2F0dGFjaCh0ZGE4MjZ4X2F0dGFjaCwgYWRhcC0+ZmUsIDB4YzAsCi0JCQkmYWRhcC0+ZGV2LT5pMmNfYWRhcCwgMSkpIHsKLQkJCWluZm8oIlRVTiBUREE4MjYzIEZvdW5kIik7Ci0JCQlzdC0+dHVuZXJfY29uZmlnID0gVFVORVJfTEc7Ci0JCQlpZiAoZHZiX3VzYl9sbWUyNTEwX2Zpcm13YXJlICE9IDEpIHsKLQkJCQlkdmJfdXNiX2xtZTI1MTBfZmlybXdhcmUgPSAxOwotCQkJCWxtZV9maXJtd2FyZV9zd2l0Y2goYWRhcC0+ZGV2LT51ZGV2LCAxKTsKLQkJCX0KLQkJCXJldHVybiAwOwotCQl9Ci0JCWtmcmVlKGFkYXAtPmZlKTsKLQkJYWRhcC0+ZmUgPSBOVUxMOworCQlzdC0+dHVuZXJfY29uZmlnID0gVFVORVJfTEc7CisJCWlmIChkdmJfdXNiX2xtZTI1MTBfZmlybXdhcmUgIT0gMSkgeworCQkJZHZiX3VzYl9sbWUyNTEwX2Zpcm13YXJlID0gMTsKKwkJCXJldCA9IGxtZV9maXJtd2FyZV9zd2l0Y2goYWRhcC0+ZGV2LT51ZGV2LCAxKTsKKwkJfSBlbHNlIC8qc3RvcHMgTEcvU2hhcnAgbXVsdGkgdHVuZXIgcHJvYmxlbXMqLworCQkJZHZiX3VzYl9sbWUyNTEwX2Zpcm13YXJlID0gMDsKKwkJZ290byBlbmQ7CiAJfQorCiAJc3QtPmkyY19nYXRlID0gNTsKIAlhZGFwLT5mZSA9IGR2Yl9hdHRhY2goc3R2MDI4OF9hdHRhY2gsICZsbWVfY29uZmlnLAogCQkJJmFkYXAtPmRldi0+aTJjX2FkYXApOwogCiAJaWYgKGFkYXAtPmZlKSB7CiAJCWluZm8oIkZFIEZvdW5kIFN0djAyODgiKTsKLQkJbWVtY3B5KCZhZGFwLT5mZS0+b3BzLmluZm8ubmFtZSwKLQkJCQkmIkRNMDRfU0hBUlA6QlMyRjdIWjczOTUiLCAyMik7Ci0JCWFkYXAtPmZlLT5vcHMuc2V0X3ZvbHRhZ2UgPSBkbTA0X2xtZTI1MTBfc2V0X3ZvbHRhZ2U7CiAJCXN0LT5pMmNfdHVuZXJfZ2F0ZV93ID0gNDsKIAkJc3QtPmkyY190dW5lcl9nYXRlX3IgPSA1OwogCQlzdC0+aTJjX3R1bmVyX2FkZHIgPSAweGMwOwotCQlpZiAoZHZiX2F0dGFjaChpeDI1MDV2X2F0dGFjaCAsIGFkYXAtPmZlLCAmbG1lX3R1bmVyLAotCQkJCQkmYWRhcC0+ZGV2LT5pMmNfYWRhcCkpIHsKLQkJCXN0LT50dW5lcl9jb25maWcgPSBUVU5FUl9TNzM5NTsKLQkJCWluZm8oIlRVTiBTaGFycCBJWDI1MDVWIHNpbGljb24gdHVuZXIiKTsKLQkJCWlmIChkdmJfdXNiX2xtZTI1MTBfZmlybXdhcmUgIT0gMCkgewotCQkJCWR2Yl91c2JfbG1lMjUxMF9maXJtd2FyZSA9IDA7Ci0JCQkJbG1lX2Zpcm13YXJlX3N3aXRjaChhZGFwLT5kZXYtPnVkZXYsIDEpOwotCQkJfQotCQkJcmV0dXJuIDA7CisJCXN0LT50dW5lcl9jb25maWcgPSBUVU5FUl9TNzM5NTsKKwkJaWYgKGR2Yl91c2JfbG1lMjUxMF9maXJtd2FyZSAhPSAwKSB7CisJCQlkdmJfdXNiX2xtZTI1MTBfZmlybXdhcmUgPSAwOworCQkJcmV0ID0gbG1lX2Zpcm13YXJlX3N3aXRjaChhZGFwLT5kZXYtPnVkZXYsIDEpOwogCQl9Ci0JCWtmcmVlKGFkYXAtPmZlKTsKLQkJYWRhcC0+ZmUgPSBOVUxMOworCX0gZWxzZSB7CisJCWluZm8oIkRNMDQgTm90IFN1cHBvcnRlZCIpOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlpbmZvKCJETTA0IE5vdCBTdXBwb3J0ZWQiKTsKLQlyZXR1cm4gLUVOT0RFVjsKK2VuZDoJaWYgKHJldCkgeworCQlrZnJlZShhZGFwLT5mZSk7CisJCWFkYXAtPmZlID0gTlVMTDsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJYWRhcC0+ZmUtPm9wcy5zZXRfdm9sdGFnZSA9IGRtMDRfbG1lMjUxMF9zZXRfdm9sdGFnZTsKKwlyZXQgPSBsbWVfbmFtZShhZGFwKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZG0wNF9sbWUyNTEwX3R1bmVyKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXApCit7CisJc3RydWN0IGxtZTI1MTBfc3RhdGUgKnN0ID0gYWRhcC0+ZGV2LT5wcml2OworCWNoYXIgKnR1bl9tc2dbXSA9IHsiIiwgIlREQTgyNjMiLCAiSVgyNTA1ViJ9OworCWludCByZXQgPSAwOworCisJc3dpdGNoIChzdC0+dHVuZXJfY29uZmlnKSB7CisJY2FzZSBUVU5FUl9MRzoKKwkJaWYgKGR2Yl9hdHRhY2godGRhODI2eF9hdHRhY2gsIGFkYXAtPmZlLCAweGMwLAorCQkJJmFkYXAtPmRldi0+aTJjX2FkYXAsIDEpKQorCQkJcmV0ID0gc3QtPnR1bmVyX2NvbmZpZzsKKwkJYnJlYWs7CisJY2FzZSBUVU5FUl9TNzM5NToKKwkJaWYgKGR2Yl9hdHRhY2goaXgyNTA1dl9hdHRhY2ggLCBhZGFwLT5mZSwgJmxtZV90dW5lciwKKwkJCSZhZGFwLT5kZXYtPmkyY19hZGFwKSkKKwkJCXJldCA9IHN0LT50dW5lcl9jb25maWc7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWlmIChyZXQpCisJCWluZm8oIlRVTiBGb3VuZCAlcyB0dW5lciIsIHR1bl9tc2dbcmV0XSk7CisJZWxzZSB7CisJCWluZm8oIlRVTiBObyB0dW5lciBmb3VuZCAtLS0gcmVzZXRpbmcgZGV2aWNlIik7CisJCWxtZV9jb2xkcmVzZXQoYWRhcC0+ZGV2LT51ZGV2KTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJLyogU3RhcnQgdGhlIEludGVydXB0ICYgUmVtb3RlKi8KKwlyZXQgPSBsbWUyNTEwX2ludF9zZXJ2aWNlKGFkYXApOworCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBsbWUyNTEwX3Bvd2VydXAoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLCBpbnQgb25vZmYpCiB7CiAJc3RydWN0IGxtZTI1MTBfc3RhdGUgKnN0ID0gZC0+cHJpdjsKKwlzdGF0aWMgdTggbG5iX29uW10gPSBMTkJfT047CisJc3RhdGljIHU4IGxuYl9vZmZbXSA9IExOQl9PRkY7CisJc3RhdGljIHU4IHJidWZbMV07CisJaW50IHJldCwgbGVuID0gMywgcmxlbiA9IDE7CisKKwlyZXQgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmQtPmkyY19tdXRleCk7CisKKwlpZiAob25vZmYpCisJCXJldCB8PSBsbWUyNTEwX3VzYl90YWxrKGQsIGxuYl9vbiwgbGVuLCByYnVmLCBybGVuKTsKKwllbHNlCisJCXJldCB8PSBsbWUyNTEwX3VzYl90YWxrKGQsIGxuYl9vZmYsIGxlbiwgcmJ1Ziwgcmxlbik7CisKIAlzdC0+aTJjX3RhbGtfb25vZmYgPSAxOwotCXJldHVybiAwOworCisJbXV0ZXhfdW5sb2NrKCZkLT5pMmNfbXV0ZXgpOworCisJcmV0dXJuIHJldDsKIH0KIAogLyogRFZCIFVTQiBEcml2ZXIgc3R1ZmYgKi8KQEAgLTk1MSw2ICs5NzQsNyBAQAogCQl7CiAJCQkuc3RyZWFtaW5nX2N0cmwgICA9IGxtZTI1MTBfc3RyZWFtaW5nX2N0cmwsCiAJCQkuZnJvbnRlbmRfYXR0YWNoICA9IGRtMDRfbG1lMjUxMF9mcm9udGVuZF9hdHRhY2gsCisJCQkudHVuZXJfYXR0YWNoID0gZG0wNF9sbWUyNTEwX3R1bmVyLAogCQkJLyogcGFyYW1ldGVyIGZvciB0aGUgTVBFRzItZGF0YSB0cmFuc2ZlciAqLwogCQkJLnN0cmVhbSA9IHsKIAkJCQkudHlwZSA9IFVTQl9CVUxLLApAQCAtOTcxLDcgKzk5NSw3IEBACiAJLmdlbmVyaWNfYnVsa19jdHJsX2VuZHBvaW50ID0gMCwKIAkubnVtX2RldmljZV9kZXNjcyA9IDEsCiAJLmRldmljZXMgPSB7Ci0JCXsgICAiRE0wNCBMTUUyNTEwIERWQi1TIFVTQiAyLjAiLAorCQl7ICAgIkRNMDRfTE1FMjUxMF9EVkItUyIsCiAJCQl7ICZsbWUyNTEwX3RhYmxlWzBdLCBOVUxMIH0sCiAJCQl9LAogCkBAIC05ODksNiArMTAxMyw3IEBACiAJCXsKIAkJCS5zdHJlYW1pbmdfY3RybCAgID0gbG1lMjUxMF9zdHJlYW1pbmdfY3RybCwKIAkJCS5mcm9udGVuZF9hdHRhY2ggID0gZG0wNF9sbWUyNTEwX2Zyb250ZW5kX2F0dGFjaCwKKwkJCS50dW5lcl9hdHRhY2ggPSBkbTA0X2xtZTI1MTBfdHVuZXIsCiAJCQkvKiBwYXJhbWV0ZXIgZm9yIHRoZSBNUEVHMi1kYXRhIHRyYW5zZmVyICovCiAJCQkuc3RyZWFtID0gewogCQkJCS50eXBlID0gVVNCX0JVTEssCkBAIC0xMDA5LDcgKzEwMzQsNyBAQAogCS5nZW5lcmljX2J1bGtfY3RybF9lbmRwb2ludCA9IDAsCiAJLm51bV9kZXZpY2VfZGVzY3MgPSAxLAogCS5kZXZpY2VzID0gewotCQl7ICAgIkRNMDQgTE1FMjUxMEMgVVNCMi4wIiwKKwkJeyAgICJETTA0X0xNRTI1MTBDX0RWQi1TIiwKIAkJCXsgJmxtZTI1MTBfdGFibGVbMV0sIE5VTEwgfSwKIAkJCX0sCiAJfQpAQCAtMTAzNiw3ICsxMDYxLDcgQEAKIAkJdXNiX2ZyZWVfY29oZXJlbnQoZC0+dWRldiwgNTAwMCwgc3QtPmJ1ZmZlciwKIAkJCQkgIHN0LT5sbWVfdXJiLT50cmFuc2Zlcl9kbWEpOwogCQlpbmZvKCJJbnRlcnVwdCBTZXJ2aWNlIFN0b3BwZWQiKTsKLQkJaXJfaW5wdXRfdW5yZWdpc3RlcihkLT5yY19pbnB1dF9kZXYpOworCQlyY191bnJlZ2lzdGVyX2RldmljZShkLT5yY19kZXYpOwogCQlpbmZvKCJSZW1vdGUgU3RvcHBlZCIpOwogCX0KIAlyZXR1cm4gYnVmZmVyOwpAQCAtMTA1NSw3ICsxMDgwLDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGxtZTI1MTBfZHJpdmVyID0gewotCS5uYW1lCQk9ICJMTUUyNTEwQ19EVkJTIiwKKwkubmFtZQkJPSAiTE1FMjUxMENfRFZCLVMiLAogCS5wcm9iZQkJPSBsbWUyNTEwX3Byb2JlLAogCS5kaXNjb25uZWN0CT0gbG1lMjUxMF9leGl0LAogCS5pZF90YWJsZQk9IGxtZTI1MTBfdGFibGUsCkBAIC0xMDgzLDYgKzExMDgsNiBAQAogbW9kdWxlX2V4aXQobG1lMjUxMF9tb2R1bGVfZXhpdCk7CiAKIE1PRFVMRV9BVVRIT1IoIk1hbGNvbG0gUHJpZXN0bGV5IDx0dmJveHNweUBnbWFpbC5jb20+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkxNMjUxMChDKSBEVkItUyBVU0IyLjAiKTsKLU1PRFVMRV9WRVJTSU9OKCIxLjYwIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkxNRTI1MTAoQykgRFZCLVMgVVNCMi4wIik7CitNT0RVTEVfVkVSU0lPTigiMS43NCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9tOTIweC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9tOTIweC5jCmluZGV4IGJkZWYxYTEuLmRhOWRjOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvbTkyMHguYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL205MjB4LmMKQEAgLTE0Miw5ICsxNDIsOSBAQAogCWlmICgocmV0ID0gbTkyMHhfcmVhZChkLT51ZGV2LCBNOTIwNl9DT1JFLCAweDAsIE05MjA2X1JDX0tFWSwgcmNfc3RhdGUgKyAxLCAxKSkgIT0gMCkKIAkJZ290byB1bmxvY2s7CiAKLQlmb3IgKGkgPSAwOyBpIDwgZC0+cHJvcHMucmMubGVnYWN5LnJjX2tleV9tYXBfc2l6ZTsgaSsrKQotCQlpZiAocmM1X2RhdGEoJmQtPnByb3BzLnJjLmxlZ2FjeS5yY19rZXlfbWFwW2ldKSA9PSByY19zdGF0ZVsxXSkgewotCQkJKmV2ZW50ID0gZC0+cHJvcHMucmMubGVnYWN5LnJjX2tleV9tYXBbaV0ua2V5Y29kZTsKKwlmb3IgKGkgPSAwOyBpIDwgZC0+cHJvcHMucmMubGVnYWN5LnJjX21hcF9zaXplOyBpKyspCisJCWlmIChyYzVfZGF0YSgmZC0+cHJvcHMucmMubGVnYWN5LnJjX21hcF90YWJsZVtpXSkgPT0gcmNfc3RhdGVbMV0pIHsKKwkJCSpldmVudCA9IGQtPnByb3BzLnJjLmxlZ2FjeS5yY19tYXBfdGFibGVbaV0ua2V5Y29kZTsKIAogCQkJc3dpdGNoKHJjX3N0YXRlWzBdKSB7CiAJCQljYXNlIDB4ODA6CkBAIC01ODksNyArNTg5LDcgQEAKIH07CiAKIC8qIGlyIGtleW1hcHMgKi8KLXN0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfbWVnYXNreV90YWJsZVtdID0geworc3RhdGljIHN0cnVjdCByY19tYXBfdGFibGUgcmNfbWFwX21lZ2Fza3lfdGFibGVbXSA9IHsKIAl7IDB4MDAxMiwgS0VZX1BPV0VSIH0sCiAJeyAweDAwMWUsIEtFWV9DWUNMRVdJTkRPV1MgfSwgLyogbWluL21heCAqLwogCXsgMHgwMDAyLCBLRVlfQ0hBTk5FTFVQIH0sCkBAIC02MDgsNyArNjA4LDcgQEAKIAl7IDB4MDAwZSwgS0VZX0NPRkZFRSB9LCAvKiAiTVRTIiAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc190dndhbGtlcnR3aW5fdGFibGVbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcmNfbWFwX3RhYmxlIHJjX21hcF90dndhbGtlcnR3aW5fdGFibGVbXSA9IHsKIAl7IDB4MDAwMSwgS0VZX1pPT00gfSwgLyogRnVsbCBTY3JlZW4gKi8KIAl7IDB4MDAwMiwgS0VZX0NBTUVSQSB9LCAvKiBzbmFwc2hvdCAqLwogCXsgMHgwMDAzLCBLRVlfTVVURSB9LApAQCAtNjI4LDcgKzYyOCw3IEBACiAJeyAweDAwMWUsIEtFWV9WT0xVTUVVUCB9LAogfTsKIAotc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc19waW5uYWNsZTMxMGVfdGFibGVbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcmNfbWFwX3RhYmxlIHJjX21hcF9waW5uYWNsZTMxMGVfdGFibGVbXSA9IHsKIAl7IDB4MTYsIEtFWV9QT1dFUiB9LAogCXsgMHgxNywgS0VZX0ZBVk9SSVRFUyB9LAogCXsgMHgwZiwgS0VZX1RFWFQgfSwKQEAgLTc4Niw4ICs3ODYsOCBAQAogCiAJLnJjLmxlZ2FjeSA9IHsKIAkJLnJjX2ludGVydmFsICAgICAgPSAxMDAsCi0JCS5yY19rZXlfbWFwICAgICAgID0gaXJfY29kZXNfbWVnYXNreV90YWJsZSwKLQkJLnJjX2tleV9tYXBfc2l6ZSAgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX21lZ2Fza3lfdGFibGUpLAorCQkucmNfbWFwX3RhYmxlICAgICA9IHJjX21hcF9tZWdhc2t5X3RhYmxlLAorCQkucmNfbWFwX3NpemUgICAgICA9IEFSUkFZX1NJWkUocmNfbWFwX21lZ2Fza3lfdGFibGUpLAogCQkucmNfcXVlcnkgICAgICAgICA9IG05MjB4X3JjX3F1ZXJ5LAogCX0sCiAKQEAgLTg4OSw4ICs4ODksOCBAQAogCiAJLnJjLmxlZ2FjeSA9IHsKIAkJLnJjX2ludGVydmFsICAgICAgPSAxMDAsCi0JCS5yY19rZXlfbWFwICAgICAgID0gaXJfY29kZXNfdHZ3YWxrZXJ0d2luX3RhYmxlLAotCQkucmNfa2V5X21hcF9zaXplICA9IEFSUkFZX1NJWkUoaXJfY29kZXNfdHZ3YWxrZXJ0d2luX3RhYmxlKSwKKwkJLnJjX21hcF90YWJsZSAgICAgPSByY19tYXBfdHZ3YWxrZXJ0d2luX3RhYmxlLAorCQkucmNfbWFwX3NpemUgICAgICA9IEFSUkFZX1NJWkUocmNfbWFwX3R2d2Fsa2VydHdpbl90YWJsZSksCiAJCS5yY19xdWVyeSAgICAgICAgID0gbTkyMHhfcmNfcXVlcnksCiAJfSwKIApAQCAtOTk4LDggKzk5OCw4IEBACiAKIAkucmMubGVnYWN5ID0gewogCQkucmNfaW50ZXJ2YWwgICAgICA9IDEwMCwKLQkJLnJjX2tleV9tYXAgICAgICAgPSBpcl9jb2Rlc19waW5uYWNsZTMxMGVfdGFibGUsCi0JCS5yY19rZXlfbWFwX3NpemUgID0gQVJSQVlfU0laRShpcl9jb2Rlc19waW5uYWNsZTMxMGVfdGFibGUpLAorCQkucmNfbWFwX3RhYmxlICAgICA9IHJjX21hcF9waW5uYWNsZTMxMGVfdGFibGUsCisJCS5yY19tYXBfc2l6ZSAgICAgID0gQVJSQVlfU0laRShyY19tYXBfcGlubmFjbGUzMTBlX3RhYmxlKSwKIAkJLnJjX3F1ZXJ5ICAgICAgICAgPSBtOTIweF9yY19xdWVyeSwKIAl9LAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL25vdmEtdC11c2IyLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL25vdmEtdC11c2IyLmMKaW5kZXggMTgxZjM2YS4uOWQzY2QyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9ub3ZhLXQtdXNiMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2Ivbm92YS10LXVzYjIuYwpAQCAtMjEsNyArMjEsNyBAQAogI2RlZmluZSBkZWJfZWUoYXJncy4uLikgZHByaW50ayhkZWJ1ZywweDAyLGFyZ3MpCiAKIC8qIEhhdXBwYXVnZSBOT1ZBLVQgVVNCMiBrZXlzICovCi1zdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX2hhdXBwX3RhYmxlW10gPSB7CitzdGF0aWMgc3RydWN0IHJjX21hcF90YWJsZSByY19tYXBfaGF1cHBfdGFibGVbXSA9IHsKIAl7IDB4MWUwMCwgS0VZXzAgfSwKIAl7IDB4MWUwMSwgS0VZXzEgfSwKIAl7IDB4MWUwMiwgS0VZXzIgfSwKQEAgLTkxLDE0ICs5MSwxNCBAQAogCiAJCQlkZWJfcmMoInJhdyBrZXkgY29kZSAweCUwMngsIDB4JTAyeCwgMHglMDJ4IHRvIGM6ICUwMnggZDogJTAyeCB0b2dnbGU6ICVkXG4iLGtleVsxXSxrZXlbMl0sa2V5WzNdLGN1c3RvbSxkYXRhLHRvZ2dsZSk7CiAKLQkJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGlyX2NvZGVzX2hhdXBwX3RhYmxlKTsgaSsrKSB7Ci0JCQkJaWYgKHJjNV9kYXRhKCZpcl9jb2Rlc19oYXVwcF90YWJsZVtpXSkgPT0gZGF0YSAmJgotCQkJCQlyYzVfY3VzdG9tKCZpcl9jb2Rlc19oYXVwcF90YWJsZVtpXSkgPT0gY3VzdG9tKSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyY19tYXBfaGF1cHBfdGFibGUpOyBpKyspIHsKKwkJCQlpZiAocmM1X2RhdGEoJnJjX21hcF9oYXVwcF90YWJsZVtpXSkgPT0gZGF0YSAmJgorCQkJCQlyYzVfY3VzdG9tKCZyY19tYXBfaGF1cHBfdGFibGVbaV0pID09IGN1c3RvbSkgewogCi0JCQkJCWRlYl9yYygiYzogJXgsIGQ6ICV4XG4iLCByYzVfZGF0YSgmaXJfY29kZXNfaGF1cHBfdGFibGVbaV0pLAotCQkJCQkJCQkgcmM1X2N1c3RvbSgmaXJfY29kZXNfaGF1cHBfdGFibGVbaV0pKTsKKwkJCQkJZGViX3JjKCJjOiAleCwgZDogJXhcbiIsIHJjNV9kYXRhKCZyY19tYXBfaGF1cHBfdGFibGVbaV0pLAorCQkJCQkJCQkgcmM1X2N1c3RvbSgmcmNfbWFwX2hhdXBwX3RhYmxlW2ldKSk7CiAKLQkJCQkJKmV2ZW50ID0gaXJfY29kZXNfaGF1cHBfdGFibGVbaV0ua2V5Y29kZTsKKwkJCQkJKmV2ZW50ID0gcmNfbWFwX2hhdXBwX3RhYmxlW2ldLmtleWNvZGU7CiAJCQkJCSpzdGF0ZSA9IFJFTU9URV9LRVlfUFJFU1NFRDsKIAkJCQkJaWYgKHN0LT5vbGRfdG9nZ2xlID09IHRvZ2dsZSkgewogCQkJCQkJaWYgKHN0LT5sYXN0X3JlcGVhdF9jb3VudCsrIDwgMikKQEAgLTE5Nyw4ICsxOTcsOCBAQAogCiAJLnJjLmxlZ2FjeSA9IHsKIAkJLnJjX2ludGVydmFsICAgICAgPSAxMDAsCi0JCS5yY19rZXlfbWFwICAgICAgID0gaXJfY29kZXNfaGF1cHBfdGFibGUsCi0JCS5yY19rZXlfbWFwX3NpemUgID0gQVJSQVlfU0laRShpcl9jb2Rlc19oYXVwcF90YWJsZSksCisJCS5yY19tYXBfdGFibGUgICAgID0gcmNfbWFwX2hhdXBwX3RhYmxlLAorCQkucmNfbWFwX3NpemUgICAgICA9IEFSUkFZX1NJWkUocmNfbWFwX2hhdXBwX3RhYmxlKSwKIAkJLnJjX3F1ZXJ5ICAgICAgICAgPSBub3ZhX3RfcmNfcXVlcnksCiAJfSwKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9vcGVyYTEuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2Ivb3BlcmExLmMKaW5kZXggZjg5NjMzNy4uMWYxYjdkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9vcGVyYTEuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL29wZXJhMS5jCkBAIC0zNSw3ICszNSw3IEBACiBzdHJ1Y3Qgb3BlcmExX3N0YXRlIHsKIAl1MzIgbGFzdF9rZXlfcHJlc3NlZDsKIH07Ci1zdHJ1Y3QgaXJfY29kZXNfb3BlcmFfdGFibGUgeworc3RydWN0IHJjX21hcF9vcGVyYV90YWJsZSB7CiAJdTMyIGtleWNvZGU7CiAJdTMyIGV2ZW50OwogfTsKQEAgLTMzMSw3ICszMzEsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX29wZXJhMV90YWJsZVtdID0geworc3RhdGljIHN0cnVjdCByY19tYXBfdGFibGUgcmNfbWFwX29wZXJhMV90YWJsZVtdID0gewogCXsweDVmYTAsIEtFWV8xfSwKIAl7MHg1MWFmLCBLRVlfMn0sCiAJezB4NWRhMiwgS0VZXzN9LApAQCAtNDA0LDEyICs0MDQsMTIgQEAKIAogCQlzZW5kX2tleSA9IChzZW5kX2tleSAmIDB4ZmZmZikgfCAweDAxMDA7CiAKLQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaXJfY29kZXNfb3BlcmExX3RhYmxlKTsgaSsrKSB7Ci0JCQlpZiAocmM1X3NjYW4oJmlyX2NvZGVzX29wZXJhMV90YWJsZVtpXSkgPT0gKHNlbmRfa2V5ICYgMHhmZmZmKSkgeworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyY19tYXBfb3BlcmExX3RhYmxlKTsgaSsrKSB7CisJCQlpZiAocmM1X3NjYW4oJnJjX21hcF9vcGVyYTFfdGFibGVbaV0pID09IChzZW5kX2tleSAmIDB4ZmZmZikpIHsKIAkJCQkqc3RhdGUgPSBSRU1PVEVfS0VZX1BSRVNTRUQ7Ci0JCQkJKmV2ZW50ID0gaXJfY29kZXNfb3BlcmExX3RhYmxlW2ldLmtleWNvZGU7CisJCQkJKmV2ZW50ID0gcmNfbWFwX29wZXJhMV90YWJsZVtpXS5rZXljb2RlOwogCQkJCW9wc3QtPmxhc3Rfa2V5X3ByZXNzZWQgPQotCQkJCQlpcl9jb2Rlc19vcGVyYTFfdGFibGVbaV0ua2V5Y29kZTsKKwkJCQkJcmNfbWFwX29wZXJhMV90YWJsZVtpXS5rZXljb2RlOwogCQkJCWJyZWFrOwogCQkJfQogCQkJb3BzdC0+bGFzdF9rZXlfcHJlc3NlZCA9IDA7CkBAIC00OTcsOCArNDk3LDggQEAKIAkuaTJjX2FsZ28gPSAmb3BlcmExX2kyY19hbGdvLAogCiAJLnJjLmxlZ2FjeSA9IHsKLQkJLnJjX2tleV9tYXAgPSBpcl9jb2Rlc19vcGVyYTFfdGFibGUsCi0JCS5yY19rZXlfbWFwX3NpemUgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX29wZXJhMV90YWJsZSksCisJCS5yY19tYXBfdGFibGUgPSByY19tYXBfb3BlcmExX3RhYmxlLAorCQkucmNfbWFwX3NpemUgPSBBUlJBWV9TSVpFKHJjX21hcF9vcGVyYTFfdGFibGUpLAogCQkucmNfaW50ZXJ2YWwgPSAyMDAsCiAJCS5yY19xdWVyeSA9IG9wZXJhMV9yY19xdWVyeSwKIAl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi90dHVzYjIuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvdHR1c2IyLmMKaW5kZXggYTZkZTQ4OS4uMGQ0NzA5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi90dHVzYjIuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL3R0dXNiMi5jCkBAIC00Myw2ICs0Myw3IEBACiAKIHN0cnVjdCB0dHVzYjJfc3RhdGUgewogCXU4IGlkOworCXUxNiBsYXN0X3JjX2tleTsKIH07CiAKIHN0YXRpYyBpbnQgdHR1c2IyX21zZyhzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIHU4IGNtZCwKQEAgLTEyOCw2ICsxMjksMzMgQEAKIAkuZnVuY3Rpb25hbGl0eSA9IHR0dXNiMl9pMmNfZnVuYywKIH07CiAKKy8qIGNvbW1hbmQgdG8gcG9sbCBJUiByZWNlaXZlciAoY29waWVkIGZyb20gcGN0djQ1MmUuYykgKi8KKyNkZWZpbmUgQ01EX0dFVF9JUl9DT0RFICAgICAweDFiCisKKy8qIElSICovCitzdGF0aWMgaW50IHR0MzY1MF9yY19xdWVyeShzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQpCit7CisJaW50IHJldDsKKwl1OCByeFs5XTsgLyogQSBDTURfR0VUX0lSX0NPREUgcmVwbHkgaXMgOSBieXRlcyBsb25nICovCisJc3RydWN0IHR0dXNiMl9zdGF0ZSAqc3QgPSBkLT5wcml2OworCXJldCA9IHR0dXNiMl9tc2coZCwgQ01EX0dFVF9JUl9DT0RFLCBOVUxMLCAwLCByeCwgc2l6ZW9mKHJ4KSk7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OworCisJaWYgKHJ4WzhdICYgMHgwMSkgeworCQkvKiBnb3QgYSAicHJlc3MiIGV2ZW50ICovCisJCXN0LT5sYXN0X3JjX2tleSA9IChyeFszXSA8PCA4KSB8IHJ4WzJdOworCQlkZWJfaW5mbygiJXM6IGNtZD0weCUwMnggc3lzPTB4JTAyeFxuIiwgX19mdW5jX18sIHJ4WzJdLCByeFszXSk7CisJCXJjX2tleWRvd24oZC0+cmNfZGV2LCBzdC0+bGFzdF9yY19rZXksIDApOworCX0gZWxzZSBpZiAoc3QtPmxhc3RfcmNfa2V5KSB7CisJCXJjX2tleXVwKGQtPnJjX2Rldik7CisJCXN0LT5sYXN0X3JjX2tleSA9IDA7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKwogLyogQ2FsbGJhY2tzIGZvciBEVkIgVVNCICovCiBzdGF0aWMgaW50IHR0dXNiMl9pZGVudGlmeV9zdGF0ZSAoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIHN0cnVjdAogCQlkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzICpwcm9wcywgc3RydWN0IGR2Yl91c2JfZGV2aWNlX2Rlc2NyaXB0aW9uICoqZGVzYywKQEAgLTM0NSw2ICszNzMsMTMgQEAKIAogCS5zaXplX29mX3ByaXYgPSBzaXplb2Yoc3RydWN0IHR0dXNiMl9zdGF0ZSksCiAKKwkucmMuY29yZSA9IHsKKwkJLnJjX2ludGVydmFsICAgICAgPSAxNTAsIC8qIExlc3MgdGhhbiBJUl9LRVlQUkVTU19USU1FT1VUICovCisJCS5yY19jb2RlcyAgICAgICAgID0gUkNfTUFQX1RUXzE1MDAsCisJCS5yY19xdWVyeSAgICAgICAgID0gdHQzNjUwX3JjX3F1ZXJ5LAorCQkuYWxsb3dlZF9wcm90b3MgICA9IFJDX1RZUEVfVU5LTk9XTiwKKwl9LAorCiAJLm51bV9hZGFwdGVycyA9IDEsCiAJLmFkYXB0ZXIgPSB7CiAJCXsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvdnA3MDJ4LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL3ZwNzAyeC5jCmluZGV4IDVjOWYzMjcuLjc4OTBlNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvdnA3MDJ4LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi92cDcwMnguYwpAQCAtMTc0LDcgKzE3NCw3IEBACiB9CiAKIC8qIGtleXMgZm9yIHRoZSBlbmNsb3NlZCByZW1vdGUgY29udHJvbCAqLwotc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc192cDcwMnhfdGFibGVbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcmNfbWFwX3RhYmxlIHJjX21hcF92cDcwMnhfdGFibGVbXSA9IHsKIAl7IDB4MDAwMSwgS0VZXzEgfSwKIAl7IDB4MDAwMiwgS0VZXzIgfSwKIH07CkBAIC0xOTcsMTAgKzE5NywxMCBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpcl9jb2Rlc192cDcwMnhfdGFibGUpOyBpKyspCi0JCWlmIChyYzVfY3VzdG9tKCZpcl9jb2Rlc192cDcwMnhfdGFibGVbaV0pID09IGtleVsxXSkgeworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJjX21hcF92cDcwMnhfdGFibGUpOyBpKyspCisJCWlmIChyYzVfY3VzdG9tKCZyY19tYXBfdnA3MDJ4X3RhYmxlW2ldKSA9PSBrZXlbMV0pIHsKIAkJCSpzdGF0ZSA9IFJFTU9URV9LRVlfUFJFU1NFRDsKLQkJCSpldmVudCA9IGlyX2NvZGVzX3ZwNzAyeF90YWJsZVtpXS5rZXljb2RlOworCQkJKmV2ZW50ID0gcmNfbWFwX3ZwNzAyeF90YWJsZVtpXS5rZXljb2RlOwogCQkJYnJlYWs7CiAJCX0KIAlyZXR1cm4gMDsKQEAgLTI4NCw4ICsyODQsOCBAQAogCS5yZWFkX21hY19hZGRyZXNzID0gdnA3MDJ4X3JlYWRfbWFjX2FkZHIsCiAKIAkucmMubGVnYWN5ID0gewotCQkucmNfa2V5X21hcCAgICAgICA9IGlyX2NvZGVzX3ZwNzAyeF90YWJsZSwKLQkJLnJjX2tleV9tYXBfc2l6ZSAgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX3ZwNzAyeF90YWJsZSksCisJCS5yY19tYXBfdGFibGUgICAgICAgPSByY19tYXBfdnA3MDJ4X3RhYmxlLAorCQkucmNfbWFwX3NpemUgID0gQVJSQVlfU0laRShyY19tYXBfdnA3MDJ4X3RhYmxlKSwKIAkJLnJjX2ludGVydmFsICAgICAgPSA0MDAsCiAJCS5yY19xdWVyeSAgICAgICAgID0gdnA3MDJ4X3JjX3F1ZXJ5LAogCX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL3ZwNzA0NS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi92cDcwNDUuYwppbmRleCBmMTM3OTFjLi5hYjBhYjNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL3ZwNzA0NS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvdnA3MDQ1LmMKQEAgLTk5LDcgKzk5LDcgQEAKIAogLyogVGhlIGtleW1hcHBpbmcgc3RydWN0LiBTb21laG93IHRoaXMgc2hvdWxkIGJlIGxvYWRlZCB0byB0aGUgZHJpdmVyLCBidXQKICAqIGN1cnJlbnRseSBpdCBpcyBoYXJkY29kZWQuICovCi1zdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX3ZwNzA0NV90YWJsZVtdID0geworc3RhdGljIHN0cnVjdCByY19tYXBfdGFibGUgcmNfbWFwX3ZwNzA0NV90YWJsZVtdID0gewogCXsgMHgwMDE2LCBLRVlfUE9XRVIgfSwKIAl7IDB4MDAxMCwgS0VZX01VVEUgfSwKIAl7IDB4MDAwMywgS0VZXzEgfSwKQEAgLTE2NSwxMCArMTY1LDEwIEBACiAJCXJldHVybiAwOwogCX0KIAotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGlyX2NvZGVzX3ZwNzA0NV90YWJsZSk7IGkrKykKLQkJaWYgKHJjNV9kYXRhKCZpcl9jb2Rlc192cDcwNDVfdGFibGVbaV0pID09IGtleSkgeworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJjX21hcF92cDcwNDVfdGFibGUpOyBpKyspCisJCWlmIChyYzVfZGF0YSgmcmNfbWFwX3ZwNzA0NV90YWJsZVtpXSkgPT0ga2V5KSB7CiAJCQkqc3RhdGUgPSBSRU1PVEVfS0VZX1BSRVNTRUQ7Ci0JCQkqZXZlbnQgPSBpcl9jb2Rlc192cDcwNDVfdGFibGVbaV0ua2V5Y29kZTsKKwkJCSpldmVudCA9IHJjX21hcF92cDcwNDVfdGFibGVbaV0ua2V5Y29kZTsKIAkJCWJyZWFrOwogCQl9CiAJcmV0dXJuIDA7CkBAIC0yNjEsOCArMjYxLDggQEAKIAogCS5yYy5sZWdhY3kgPSB7CiAJCS5yY19pbnRlcnZhbCAgICAgID0gNDAwLAotCQkucmNfa2V5X21hcCAgICAgICA9IGlyX2NvZGVzX3ZwNzA0NV90YWJsZSwKLQkJLnJjX2tleV9tYXBfc2l6ZSAgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX3ZwNzA0NV90YWJsZSksCisJCS5yY19tYXBfdGFibGUgICAgICAgPSByY19tYXBfdnA3MDQ1X3RhYmxlLAorCQkucmNfbWFwX3NpemUgID0gQVJSQVlfU0laRShyY19tYXBfdnA3MDQ1X3RhYmxlKSwKIAkJLnJjX3F1ZXJ5ICAgICAgICAgPSB2cDcwNDVfcmNfcXVlcnksCiAJfSwKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvS2NvbmZpZwppbmRleCA5NmIyNzAxLi5lZjNlNDNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvS2NvbmZpZwpAQCAtNDk3LDcgKzQ5Nyw3IEBACiAJZGVwZW5kcyBvbiBEVkJfQ09SRQogCiBjb25maWcgRFZCX1M5MjEKLQl0cmlzdGF0ZSAiU2hhcnAgUzkyMSB0dW5lciIKKwl0cmlzdGF0ZSAiU2hhcnAgUzkyMSBmcm9udGVuZCIKIAlkZXBlbmRzIG9uIERWQl9DT1JFICYmIEkyQwogCWRlZmF1bHQgbSBpZiBEVkJfRkVfQ1VTVE9NSVNFCiAJaGVscApAQCAtNTEyLDYgKzUxMiwxNCBAQAogCSAgQSBkcml2ZXIgZm9yIERpQmNvbSdzIERpQjgwMDAgSVNEQi1UL0lTREItVHNiIGRlbW9kdWxhdG9yLgogCSAgU2F5IFkgd2hlbiB5b3Ugd2FudCB0byBzdXBwb3J0IHRoaXMgZnJvbnRlbmQuCiAKK2NvbmZpZyBEVkJfTUI4NkEyMFMKKwl0cmlzdGF0ZSAiRnVqaXRzdSBtYjg2YTIwcyIKKwlkZXBlbmRzIG9uIERWQl9DT1JFICYmIEkyQworCWRlZmF1bHQgbSBpZiBEVkJfRkVfQ1VTVE9NSVNFCisJaGVscAorCSAgQSBkcml2ZXIgZm9yIEZ1aml0c3UgbWI4NmEyMHMgSVNEQi1UL0lTREItVHNiIGRlbW9kdWxhdG9yLgorCSAgU2F5IFkgd2hlbiB5b3Ugd2FudCB0byBzdXBwb3J0IHRoaXMgZnJvbnRlbmQuCisKIGNvbW1lbnQgIkRpZ2l0YWwgdGVycmVzdHJpYWwgb25seSB0dW5lcnMvUExMIgogCWRlcGVuZHMgb24gRFZCX0NPUkUKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL01ha2VmaWxlCmluZGV4IDlhMzE5ODUuLmIxZDk1MjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvTWFrZWZpbGUKQEAgLTUsNyArNSw2IEBACiBFWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS8KIEVYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy8KIAotczkyMS1vYmpzIDo9IHM5MjFfbW9kdWxlLm8gczkyMV9jb3JlLm8KIHN0YjA4OTktb2JqcyA9IHN0YjA4OTlfZHJ2Lm8gc3RiMDg5OV9hbGdvLm8KIHN0djA5MDAtb2JqcyA9IHN0djA5MDBfY29yZS5vIHN0djA5MDBfc3cubwogYXU4NTIyLW9ianMgPSBhdTg1MjJfZGlnLm8gYXU4NTIyX2RlY29kZXIubwpAQCAtODIsNCArODEsNSBAQAogb2JqLSQoQ09ORklHX0RWQl9FQzEwMCkgKz0gZWMxMDAubwogb2JqLSQoQ09ORklHX0RWQl9EUzMwMDApICs9IGRzMzAwMC5vCiBvYmotJChDT05GSUdfRFZCX01CODZBMTYpICs9IG1iODZhMTYubworb2JqLSQoQ09ORklHX0RWQl9NQjg2QTIwUykgKz0gbWI4NmEyMHMubwogb2JqLSQoQ09ORklHX0RWQl9JWDI1MDVWKSArPSBpeDI1MDV2Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hZjkwMTMuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hZjkwMTMuYwppbmRleCBlMmE5NWMwLi5jZTIyMjA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYWY5MDEzLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2FmOTAxMy5jCkBAIC05NjQsNyArOTY0LDcgQEAKIHN0YXRpYyBpbnQgYWY5MDEzX3VwZGF0ZV9zaWduYWxfc3RyZW5ndGgoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCiB7CiAJc3RydWN0IGFmOTAxM19zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKLQlpbnQgcmV0OworCWludCByZXQgPSAwOwogCXU4IHJmX2dhaW4sIGlmX2dhaW47CiAJaW50IHNpZ25hbF9zdHJlbmd0aDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2F0Ym04ODMwLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYXRibTg4MzAuYwppbmRleCA0M2FhYzJmLi4xNTM5ZWExIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYXRibTg4MzAuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYXRibTg4MzAuYwpAQCAtNTAsOCArNTAsNyBAQAogCW1zZzIuYWRkciA9IGRldl9hZGRyOwogCiAJaWYgKGRlYnVnID49IDIpCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogcmVnPTB4JTA0WCwgZGF0YT0weCUwMlhcbiIsCi0JCQlfX2Z1bmNfXywgcmVnLCBkYXRhKTsKKwkJZHByaW50aygiJXM6IHJlZz0weCUwNFgsIGRhdGE9MHglMDJYXG4iLCBfX2Z1bmNfXywgcmVnLCBkYXRhKTsKIAogCXJldCA9IGkyY190cmFuc2Zlcihwcml2LT5pMmMsICZtc2cxLCAxKTsKIAlpZiAocmV0ICE9IDEpCkBAIC03Nyw4ICs3Niw3IEBACiAKIAlyZXQgPSBpMmNfdHJhbnNmZXIocHJpdi0+aTJjLCAmbXNnMSwgMSk7CiAJaWYgKHJldCAhPSAxKSB7Ci0JCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IGVycm9yIHJlZz0weCUwNHgsIHJldD0laVxuIiwKLQkJCV9fZnVuY19fLCByZWcsIHJldCk7CisJCWRwcmludGsoIiVzOiBlcnJvciByZWc9MHglMDR4LCByZXQ9JWlcbiIsIF9fZnVuY19fLCByZWcsIHJldCk7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtODgsNyArODYsNyBAQAogCiAJKnBfZGF0YSA9IGJ1ZjJbMF07CiAJaWYgKGRlYnVnID49IDIpCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogcmVnPTB4JTA0WCwgZGF0YT0weCUwMlhcbiIsCisJCWRwcmludGsoIiVzOiByZWc9MHglMDRYLCBkYXRhPTB4JTAyWFxuIiwKIAkJCV9fZnVuY19fLCByZWcsIGJ1ZjJbMF0pOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYXU4NTIyX2RlY29kZXIuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hdTg1MjJfZGVjb2Rlci5jCmluZGV4IDZkOWM1OTQuLmI1Mzc4OTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hdTg1MjJfZGVjb2Rlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hdTg1MjJfZGVjb2Rlci5jCkBAIC0yNzgsMTAgKzI3OCwxOCBAQAogCQkJQVU4NTIyX1RWREVDX0NPTUJfSERJRl9USFIyX1JFRzA2QUhfQ1ZCUyk7CiAJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERUNfQ09NQl9IRElGX1RIUjNfUkVHMDZCSCwKIAkJCUFVODUyMl9UVkRFQ19DT01CX0hESUZfVEhSM19SRUcwNkJIX0NWQlMpOwotCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1RWREVDX0NPTUJfRENESUZfVEhSMV9SRUcwNkNILAotCQkJQVU4NTIyX1RWREVDX0NPTUJfRENESUZfVEhSMV9SRUcwNkNIX0NWQlMpOwotCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1RWREVDX0NPTUJfRENESUZfVEhSMl9SRUcwNkRILAotCQkJQVU4NTIyX1RWREVDX0NPTUJfRENESUZfVEhSMl9SRUcwNkRIX0NWQlMpOworCWlmIChpbnB1dF9tb2RlID09IEFVODUyMl9JTlBVVF9DT05UUk9MX1JFRzA4MUhfU1ZJREVPX0NIMTMgfHwKKwkgICAgaW5wdXRfbW9kZSA9PSBBVTg1MjJfSU5QVVRfQ09OVFJPTF9SRUcwODFIX1NWSURFT19DSDI0KSB7CisJCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1RWREVDX0NPTUJfRENESUZfVEhSMV9SRUcwNkNILAorCQkJCUFVODUyMl9UVkRFQ19DT01CX0RDRElGX1RIUjFfUkVHMDZDSF9TVklERU8pOworCQlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9UVkRFQ19DT01CX0RDRElGX1RIUjJfUkVHMDZESCwKKwkJCQlBVTg1MjJfVFZERUNfQ09NQl9EQ0RJRl9USFIyX1JFRzA2REhfU1ZJREVPKTsKKwl9IGVsc2UgeworCQlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9UVkRFQ19DT01CX0RDRElGX1RIUjFfUkVHMDZDSCwKKwkJCQlBVTg1MjJfVFZERUNfQ09NQl9EQ0RJRl9USFIxX1JFRzA2Q0hfQ1ZCUyk7CisJCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1RWREVDX0NPTUJfRENESUZfVEhSMl9SRUcwNkRILAorCQkJCUFVODUyMl9UVkRFQ19DT01CX0RDRElGX1RIUjJfUkVHMDZESF9DVkJTKTsKKwl9CiAJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERUNfQ09NQl9EQ0RJRl9USFIzX1JFRzA2RUgsCiAJCQlBVTg1MjJfVFZERUNfQ09NQl9EQ0RJRl9USFIzX1JFRzA2RUhfQ1ZCUyk7CiAJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERUNfVVZfU0VQX1RIUl9SRUcwNkZILApAQCAtMzQ3LDkgKzM1NSwxMSBAQAogCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX01PRFVMRV9DTE9DS19DT05UUk9MX1JFRzBBM0gsCiAJCQlBVTg1MjJfTU9EVUxFX0NMT0NLX0NPTlRST0xfUkVHMEEzSF9DVkJTKTsKIAorCS8qIFBHQSBpbiBhdXRvbWF0aWMgbW9kZSAqLwogCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1BHQV9DT05UUk9MX1JFRzA4MkgsIDB4MDApOwotCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX0NMQU1QSU5HX0NPTlRST0xfUkVHMDgzSCwgMHgwZSk7Ci0JYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfUEdBX0NPTlRST0xfUkVHMDgySCwgMHgxMCk7CisKKwkvKiBFbmFibGUgY2xhbXBpbmcgY29udHJvbCAqLworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX0NMQU1QSU5HX0NPTlRST0xfUkVHMDgzSCwgMHgwMCk7CiAKIAlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9JTlBVVF9DT05UUk9MX1JFRzA4MUgsCiAJCQlBVTg1MjJfSU5QVVRfQ09OVFJPTF9SRUcwODFIX0NWQlNfQ0gxKTsKQEAgLTM2NiwxNCArMzc2LDE0IEBACiAJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfTU9EVUxFX0NMT0NLX0NPTlRST0xfUkVHMEEzSCwKIAkJCUFVODUyMl9NT0RVTEVfQ0xPQ0tfQ09OVFJPTF9SRUcwQTNIX0NWQlMpOwogCi0JLyogSXQncyBub3QgY2xlYXIgd2h5IHRoZXkgdHVybiBvZmYgdGhlIFBHQSBiZWZvcmUgZW5hYmxpbmcgdGhlIGNsYW1wCi0JICAgY29udHJvbCwgYnV0IHRoZSBXaW5kb3dzIHRyYWNlIGRvZXMgaXQgc28gd2Ugd2lsbCB0b28uLi4gKi8KKwkvKiBJdCdzIG5vdCBjbGVhciB3aHkgd2UgaGF2ZSB0byBoYXZlIHRoZSBQR0EgaW4gYXV0b21hdGljIG1vZGUgd2hpbGUKKwkgICBlbmFibGluZyBjbGFtcCBjb250cm9sLCBidXQgaXQncyB3aGF0IFdpbmRvd3MgZG9lcyAqLwogCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1BHQV9DT05UUk9MX1JFRzA4MkgsIDB4MDApOwogCiAJLyogRW5hYmxlIGNsYW1waW5nIGNvbnRyb2wgKi8KIAlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9DTEFNUElOR19DT05UUk9MX1JFRzA4M0gsIDB4MGUpOwogCi0JLyogVHVybiBvbiB0aGUgUEdBICovCisJLyogRGlzYWJsZSBhdXRvbWF0aWMgUEdBIChzaW5jZSB0aGUgQ1ZCUyBpcyBjb21pbmcgZnJvbSB0aGUgdHVuZXIpICovCiAJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfUEdBX0NPTlRST0xfUkVHMDgySCwgMHgxMCk7CiAKIAkvKiBTZXQgaW5wdXQgbW9kZSB0byBDVkJTIG9uIGNoYW5uZWwgNCB3aXRoIFNJRiBhdWRpbyBpbnB1dCBlbmFibGVkICovCkBAIC0zOTYsNyArNDA2LDEwIEBACiAJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfSU5QVVRfQ09OVFJPTF9SRUcwODFILAogCQkJQVU4NTIyX0lOUFVUX0NPTlRST0xfUkVHMDgxSF9TVklERU9fQ0gxMyk7CiAKLQkvKiBEaXNhYmxlIGNsYW1waW5nIGNvbnRyb2wgKHJlcXVpcmVkIGZvciBTLXZpZGVvKSAqLworCS8qIFBHQSBpbiBhdXRvbWF0aWMgbW9kZSAqLworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1BHQV9DT05UUk9MX1JFRzA4MkgsIDB4MDApOworCisJLyogRW5hYmxlIGNsYW1waW5nIGNvbnRyb2wgKi8KIAlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9DTEFNUElOR19DT05UUk9MX1JFRzA4M0gsIDB4MDApOwogCiAJc2V0dXBfZGVjb2Rlcl9kZWZhdWx0cyhzdGF0ZSwKQEAgLTQxMCwyOSArNDIzLDE1IEBACiAKIHN0YXRpYyB2b2lkIGRpc2FibGVfYXVkaW9faW5wdXQoc3RydWN0IGF1ODUyMl9zdGF0ZSAqc3RhdGUpCiB7Ci0JLyogVGhpcyBjYW4gcHJvYmFibHkgYmUgb3B0aW1pemVkICovCiAJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfQVVESU9fVk9MVU1FX0xfUkVHMEYySCwgMHgwMCk7CiAJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfQVVESU9fVk9MVU1FX1JfUkVHMEYzSCwgMHgwMCk7CiAJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfQVVESU9fVk9MVU1FX1JFRzBGNEgsIDB4MDApOwotCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX0kyQ19DT05UUk9MX1JFRzFfUkVHMDkxSCwgMHg4MCk7Ci0JYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfSTJDX0NPTlRST0xfUkVHMF9SRUcwOTBILCAweDg0KTsKLQotCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX0VOQV9VU0JfUkVHMTAxSCwgMHgwMCk7Ci0JYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfQVVESU9fVk9MVU1FX0xfUkVHMEYySCwgMHg3Rik7Ci0JYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfQVVESU9fVk9MVU1FX1JfUkVHMEYzSCwgMHg3Rik7Ci0JYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfUkVHMEY5SCwgQVU4NTIyX1JFRzBGOUhfQVVESU8pOwotCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX0FVRElPX01PREVfUkVHMEYxSCwgMHg0MCk7Ci0KLQlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9HUElPX0RBVEFfUkVHMEUySCwgMHgxMSk7Ci0JbXNsZWVwKDUpOwotCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX0dQSU9fREFUQV9SRUcwRTJILCAweDAwKTsKIAogCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1NZU1RFTV9NT0RVTEVfQ09OVFJPTF8xX1JFRzBBNUgsIDB4MDQpOwotCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX0FVRElPRlJFUV9SRUc2MDZILCAweDAzKTsKIAlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9JMlNfQ1RSTF8yX1JFRzExMkgsIDB4MDIpOwogCiAJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfU1lTVEVNX01PRFVMRV9DT05UUk9MXzBfUkVHMEE0SCwKLQkJCUFVODUyMl9TWVNURU1fTU9EVUxFX0NPTlRST0xfMF9SRUcwQTRIX0NWQlMpOworCQkJQVU4NTIyX1NZU1RFTV9NT0RVTEVfQ09OVFJPTF8wX1JFRzBBNEhfU1ZJREVPKTsKIH0KIAogLyogMD1kaXNhYmxlLCAxPVNJRiAqLwpAQCAtNjIyLDcgKzYyMSw3IEBACiAJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgMjU1LCAxLAogCQkJCQkgICAgQVU4NTIyX1RWREVDX0NPTlRSQVNUX1JFRzAwQkhfQ1ZCUyk7CiAJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDI1NSwgMSwgMTI4KTsKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCAyNTUsIDEsIDEwOSk7CiAJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgogCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDI1NSwgMSwgMTI4KTsKIAljYXNlIFY0TDJfQ0lEX0hVRToKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hdTg1MjJfcHJpdi5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2F1ODUyMl9wcml2LmgKaW5kZXggNjA5Y2YwNC4uNzUxZTE3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2F1ODUyMl9wcml2LmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2F1ODUyMl9wcml2LmgKQEAgLTM5Nyw3ICszOTcsOSBAQAogI2RlZmluZSBBVTg1MjJfVFZERUNfQ09NQl9IRElGX1RIUjJfUkVHMDZBSF9DVkJTCQkweDBBCiAjZGVmaW5lIEFVODUyMl9UVkRFQ19DT01CX0hESUZfVEhSM19SRUcwNkJIX0NWQlMJCTB4MzIKICNkZWZpbmUgQVU4NTIyX1RWREVDX0NPTUJfRENESUZfVEhSMV9SRUcwNkNIX0NWQlMJCTB4MzQKKyNkZWZpbmUgQVU4NTIyX1RWREVDX0NPTUJfRENESUZfVEhSMV9SRUcwNkNIX1NWSURFTwkJMHgyYQogI2RlZmluZSBBVTg1MjJfVFZERUNfQ09NQl9EQ0RJRl9USFIyX1JFRzA2REhfQ1ZCUwkJMHgwNQorI2RlZmluZSBBVTg1MjJfVFZERUNfQ09NQl9EQ0RJRl9USFIyX1JFRzA2REhfU1ZJREVPCQkweDE1CiAjZGVmaW5lIEFVODUyMl9UVkRFQ19DT01CX0RDRElGX1RIUjNfUkVHMDZFSF9DVkJTCQkweDZFCiAjZGVmaW5lIEFVODUyMl9UVkRFQ19VVl9TRVBfVEhSX1JFRzA2RkhfQ1ZCUwkJCTB4MEYKICNkZWZpbmUgQVU4NTIyX1RWREVDX0NPTUJfRENfVEhSMV9OVFNDX1JFRzA3MEhfQ1ZCUwkJMHg4MApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjcwMDBtLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliNzAwMG0uYwppbmRleCAwZjA5ZmQzLi5jN2Y1Y2NmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliNzAwMG0uYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliNzAwMG0uYwpAQCAtODA1LDcgKzgwNSw3IEBACiAJdmFsdWUgPSAwOwogCXN3aXRjaCAoY2gtPnUub2ZkbS50cmFuc21pc3Npb25fbW9kZSkgewogCQljYXNlIFRSQU5TTUlTU0lPTl9NT0RFXzJLOiB2YWx1ZSB8PSAoMCA8PCA3KTsgYnJlYWs7Ci0JCWNhc2UgLyogNEsgTU9ERSAqLyAyNTU6IHZhbHVlIHw9ICgyIDw8IDcpOyBicmVhazsKKwkJY2FzZSBUUkFOU01JU1NJT05fTU9ERV80SzogdmFsdWUgfD0gKDIgPDwgNyk7IGJyZWFrOwogCQlkZWZhdWx0OgogCQljYXNlIFRSQU5TTUlTU0lPTl9NT0RFXzhLOiB2YWx1ZSB8PSAoMSA8PCA3KTsgYnJlYWs7CiAJfQpAQCAtODY2LDcgKzg2Niw3IEBACiAJLyogUF9kdnN5X3N5bmNfd2FpdCAqLwogCXN3aXRjaCAoY2gtPnUub2ZkbS50cmFuc21pc3Npb25fbW9kZSkgewogCQljYXNlIFRSQU5TTUlTU0lPTl9NT0RFXzhLOiB2YWx1ZSA9IDI1NjsgYnJlYWs7Ci0JCWNhc2UgLyogNEsgTU9ERSAqLyAyNTU6IHZhbHVlID0gMTI4OyBicmVhazsKKwkJY2FzZSBUUkFOU01JU1NJT05fTU9ERV80SzogdmFsdWUgPSAxMjg7IGJyZWFrOwogCQljYXNlIFRSQU5TTUlTU0lPTl9NT0RFXzJLOgogCQlkZWZhdWx0OiB2YWx1ZSA9IDY0OyBicmVhazsKIAl9CkBAIC0xMDIwLDcgKzEwMjAsNyBAQAogCXZhbHVlID0gKDYgPDwgOCkgfCAweDgwOwogCXN3aXRjaCAoY2gtPnUub2ZkbS50cmFuc21pc3Npb25fbW9kZSkgewogCQljYXNlIFRSQU5TTUlTU0lPTl9NT0RFXzJLOiB2YWx1ZSB8PSAoNyA8PCAxMik7IGJyZWFrOwotCQljYXNlIC8qIDRLIE1PREUgKi8gMjU1OiB2YWx1ZSB8PSAoOCA8PCAxMik7IGJyZWFrOworCQljYXNlIFRSQU5TTUlTU0lPTl9NT0RFXzRLOiB2YWx1ZSB8PSAoOCA8PCAxMik7IGJyZWFrOwogCQlkZWZhdWx0OgogCQljYXNlIFRSQU5TTUlTU0lPTl9NT0RFXzhLOiB2YWx1ZSB8PSAoOSA8PCAxMik7IGJyZWFrOwogCX0KQEAgLTEwMzAsNyArMTAzMCw3IEBACiAJdmFsdWUgPSAoMCA8PCA0KTsKIAlzd2l0Y2ggKGNoLT51Lm9mZG0udHJhbnNtaXNzaW9uX21vZGUpIHsKIAkJY2FzZSBUUkFOU01JU1NJT05fTU9ERV8ySzogdmFsdWUgfD0gMHg2OyBicmVhazsKLQkJY2FzZSAvKiA0SyBNT0RFICovIDI1NTogdmFsdWUgfD0gMHg3OyBicmVhazsKKwkJY2FzZSBUUkFOU01JU1NJT05fTU9ERV80SzogdmFsdWUgfD0gMHg3OyBicmVhazsKIAkJZGVmYXVsdDoKIAkJY2FzZSBUUkFOU01JU1NJT05fTU9ERV84SzogdmFsdWUgfD0gMHg4OyBicmVhazsKIAl9CkBAIC0xMDQwLDcgKzEwNDAsNyBAQAogCXZhbHVlID0gKDAgPDwgNCk7CiAJc3dpdGNoIChjaC0+dS5vZmRtLnRyYW5zbWlzc2lvbl9tb2RlKSB7CiAJCWNhc2UgVFJBTlNNSVNTSU9OX01PREVfMks6IHZhbHVlIHw9IDB4NjsgYnJlYWs7Ci0JCWNhc2UgLyogNEsgTU9ERSAqLyAyNTU6IHZhbHVlIHw9IDB4NzsgYnJlYWs7CisJCWNhc2UgVFJBTlNNSVNTSU9OX01PREVfNEs6IHZhbHVlIHw9IDB4NzsgYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCWNhc2UgVFJBTlNNSVNTSU9OX01PREVfOEs6IHZhbHVlIHw9IDB4ODsgYnJlYWs7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjcwMDBwLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliNzAwMHAuYwppbmRleCAzYWVkMGQ0Li42YWEwMmNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliNzAwMHAuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliNzAwMHAuYwpAQCAtNzE3LDcgKzcxNyw3IEBACiAJdmFsdWUgPSAwOwogCXN3aXRjaCAoY2gtPnUub2ZkbS50cmFuc21pc3Npb25fbW9kZSkgewogCQljYXNlIFRSQU5TTUlTU0lPTl9NT0RFXzJLOiB2YWx1ZSB8PSAoMCA8PCA3KTsgYnJlYWs7Ci0JCWNhc2UgLyogNEsgTU9ERSAqLyAyNTU6IHZhbHVlIHw9ICgyIDw8IDcpOyBicmVhazsKKwkJY2FzZSBUUkFOU01JU1NJT05fTU9ERV80SzogdmFsdWUgfD0gKDIgPDwgNyk7IGJyZWFrOwogCQlkZWZhdWx0OgogCQljYXNlIFRSQU5TTUlTU0lPTl9NT0RFXzhLOiB2YWx1ZSB8PSAoMSA8PCA3KTsgYnJlYWs7CiAJfQpAQCAtNzcwLDcgKzc3MCw3IEBACiAJLyogUF9kdnN5X3N5bmNfd2FpdCAqLwogCXN3aXRjaCAoY2gtPnUub2ZkbS50cmFuc21pc3Npb25fbW9kZSkgewogCQljYXNlIFRSQU5TTUlTU0lPTl9NT0RFXzhLOiB2YWx1ZSA9IDI1NjsgYnJlYWs7Ci0JCWNhc2UgLyogNEsgTU9ERSAqLyAyNTU6IHZhbHVlID0gMTI4OyBicmVhazsKKwkJY2FzZSBUUkFOU01JU1NJT05fTU9ERV80SzogdmFsdWUgPSAxMjg7IGJyZWFrOwogCQljYXNlIFRSQU5TTUlTU0lPTl9NT0RFXzJLOgogCQlkZWZhdWx0OiB2YWx1ZSA9IDY0OyBicmVhazsKIAl9CkBAIC05OTQsNyArOTk0LDcgQEAKIAl0bXAgPSAoNiA8PCA4KSB8IDB4ODA7CiAJc3dpdGNoIChjaC0+dS5vZmRtLnRyYW5zbWlzc2lvbl9tb2RlKSB7CiAJCWNhc2UgVFJBTlNNSVNTSU9OX01PREVfMks6IHRtcCB8PSAoNyA8PCAxMik7IGJyZWFrOwotCQljYXNlIC8qIDRLIE1PREUgKi8gMjU1OiB0bXAgfD0gKDggPDwgMTIpOyBicmVhazsKKwkJY2FzZSBUUkFOU01JU1NJT05fTU9ERV80SzogdG1wIHw9ICg4IDw8IDEyKTsgYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCWNhc2UgVFJBTlNNSVNTSU9OX01PREVfOEs6IHRtcCB8PSAoOSA8PCAxMik7IGJyZWFrOwogCX0KQEAgLTEwMDQsNyArMTAwNCw3IEBACiAJdG1wID0gKDAgPDwgNCk7CiAJc3dpdGNoIChjaC0+dS5vZmRtLnRyYW5zbWlzc2lvbl9tb2RlKSB7CiAJCWNhc2UgVFJBTlNNSVNTSU9OX01PREVfMks6IHRtcCB8PSAweDY7IGJyZWFrOwotCQljYXNlIC8qIDRLIE1PREUgKi8gMjU1OiB0bXAgfD0gMHg3OyBicmVhazsKKwkJY2FzZSBUUkFOU01JU1NJT05fTU9ERV80SzogdG1wIHw9IDB4NzsgYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCWNhc2UgVFJBTlNNSVNTSU9OX01PREVfOEs6IHRtcCB8PSAweDg7IGJyZWFrOwogCX0KQEAgLTEwMTQsNyArMTAxNCw3IEBACiAJdG1wID0gKDAgPDwgNCk7CiAJc3dpdGNoIChjaC0+dS5vZmRtLnRyYW5zbWlzc2lvbl9tb2RlKSB7CiAJCWNhc2UgVFJBTlNNSVNTSU9OX01PREVfMks6IHRtcCB8PSAweDY7IGJyZWFrOwotCQljYXNlIC8qIDRLIE1PREUgKi8gMjU1OiB0bXAgfD0gMHg3OyBicmVhazsKKwkJY2FzZSBUUkFOU01JU1NJT05fTU9ERV80SzogdG1wIHw9IDB4NzsgYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCWNhc2UgVFJBTlNNSVNTSU9OX01PREVfOEs6IHRtcCB8PSAweDg7IGJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9peDI1MDV2LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvaXgyNTA1di5jCmluZGV4IDU1ZjJlYmEuLjYzNjBjNjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9peDI1MDV2LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2l4MjUwNXYuYwpAQCAtNzIsNyArNzIsNyBAQAogCXJldCA9IGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjLCBtc2csIDEpOwogCWRlYl9pMmMoIlJlYWQgJXMgIiwgX19mdW5jX18pOwogCi0JcmV0dXJuIChyZXQgPSAxKSA/IChpbnQpIGIyWzBdIDogLTE7CisJcmV0dXJuIChyZXQgPT0gMSkgPyAoaW50KSBiMlswXSA6IC0xOwogfQogCiBzdGF0aWMgaW50IGl4MjUwNXZfd3JpdGUoc3RydWN0IGl4MjUwNXZfc3RhdGUgKnN0YXRlLCB1OCBidWZbXSwgdTggY291bnQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbGdzOGd4eC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xnczhneHguYwppbmRleCAwZmNkZGM0Li4xMTcyYjU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbGdzOGd4eC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sZ3M4Z3h4LmMKQEAgLTYwLDEzICs2MCwxMiBAQAogCQltc2cuYWRkciArPSAweDAyOwogCiAJaWYgKGRlYnVnID49IDIpCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogcmVnPTB4JTAyWCwgZGF0YT0weCUwMlhcbiIsCi0JCQlfX2Z1bmNfXywgcmVnLCBkYXRhKTsKKwkJZHByaW50aygiJXM6IHJlZz0weCUwMlgsIGRhdGE9MHglMDJYXG4iLCBfX2Z1bmNfXywgcmVnLCBkYXRhKTsKIAogCXJldCA9IGkyY190cmFuc2Zlcihwcml2LT5pMmMsICZtc2csIDEpOwogCiAJaWYgKHJldCAhPSAxKQotCQlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBlcnJvciByZWc9MHgleCwgZGF0YT0weCV4LCByZXQ9JWlcbiIsCisJCWRwcmludGsoIiVzOiBlcnJvciByZWc9MHgleCwgZGF0YT0weCV4LCByZXQ9JWlcbiIsCiAJCQlfX2Z1bmNfXywgcmVnLCBkYXRhLCByZXQpOwogCiAJcmV0dXJuIChyZXQgIT0gMSkgPyAtMSA6IDA7CkBAIC05MSwxNSArOTAsMTMgQEAKIAogCXJldCA9IGkyY190cmFuc2Zlcihwcml2LT5pMmMsIG1zZywgMik7CiAJaWYgKHJldCAhPSAyKSB7Ci0JCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IGVycm9yIHJlZz0weCV4LCByZXQ9JWlcbiIsCi0JCQlfX2Z1bmNfXywgcmVnLCByZXQpOworCQlkcHJpbnRrKCIlczogZXJyb3IgcmVnPTB4JXgsIHJldD0laVxuIiwgX19mdW5jX18sIHJlZywgcmV0KTsKIAkJcmV0dXJuIC0xOwogCX0KIAogCSpwX2RhdGEgPSBiMVswXTsKIAlpZiAoZGVidWcgPj0gMikKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiByZWc9MHglMDJYLCBkYXRhPTB4JTAyWFxuIiwKLQkJCV9fZnVuY19fLCByZWcsIGIxWzBdKTsKKwkJZHByaW50aygiJXM6IHJlZz0weCUwMlgsIGRhdGE9MHglMDJYXG4iLCBfX2Z1bmNfXywgcmVnLCBiMVswXSk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9tYjg2YTIwcy5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL21iODZhMjBzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNhZDNlNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9tYjg2YTIwcy5jCkBAIC0wLDAgKzEsNjE1IEBACisvKgorICogICBGdWppdHUgbWI4NmEyMHMgSVNEQi1UL0lTREItVHNiIE1vZHVsZSBkcml2ZXIKKyAqCisgKiAgIENvcHlyaWdodCAoQykgMjAxMCBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4KKyAqICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgRG91Z2xhcyBMYW5kZ3JhZiA8ZG91Z3NsYW5kQHJlZGhhdC5jb20+CisgKgorICogICBGSVhNRTogTmVlZCB0byBwb3J0IHRvIERWQiB2NS4yIEFQSQorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiB2ZXJzaW9uIDIuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxhc20vZGl2NjQuaD4KKworI2luY2x1ZGUgImR2Yl9mcm9udGVuZC5oIgorI2luY2x1ZGUgIm1iODZhMjBzLmgiCisKK3N0YXRpYyBpbnQgZGVidWcgPSAxOworbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkFjdGl2YXRlcyBmcm9udGVuZCBkZWJ1Z2dpbmcgKGRlZmF1bHQ6MCkiKTsKKworI2RlZmluZSByYyhhcmdzLi4uKSAgZG8gewkJCQkJCVwKKwlwcmludGsoS0VSTl9FUlIgICJtYjg2YTIwczogIiBhcmdzKTsJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBkcHJpbnRrKGFyZ3MuLi4pCQkJCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJaWYgKGRlYnVnKSB7CQkJCQkJXAorCQkJcHJpbnRrKEtFUk5fREVCVUcgIm1iODZhMjBzOiAlczogIiwgX19mdW5jX18pOwlcCisJCQlwcmludGsoYXJncyk7CQkJCQlcCisJCX0JCQkJCQkJXAorCX0gd2hpbGUgKDApCisKK3N0cnVjdCBtYjg2YTIwc19zdGF0ZSB7CisJc3RydWN0IGkyY19hZGFwdGVyICppMmM7CisJY29uc3Qgc3RydWN0IG1iODZhMjBzX2NvbmZpZyAqY29uZmlnOworCisJc3RydWN0IGR2Yl9mcm9udGVuZCBmcm9udGVuZDsKK307CisKK3N0cnVjdCByZWdkYXRhIHsKKwl1OCByZWc7CisJdTggZGF0YTsKK307CisKKy8qCisgKiBJbml0aWFsaXphdGlvbiBzZXF1ZW5jZTogVXNlIHdoYXRldmVyZSBkZWZhdWx0IHZhbHVlcyB0aGF0IFBWIFNCVFZECisgKiBkb2VzIG9uIGl0cyBpbml0aWFsaXNhdGlvbiwgb2J0YWluZWQgdmlhIFVTQiBzbm9vcAorICovCitzdGF0aWMgc3RydWN0IHJlZ2RhdGEgbWI4NmEyMHNfaW5pdFtdID0geworCXsgMHg3MCwgMHgwZiB9LAorCXsgMHg3MCwgMHhmZiB9LAorCXsgMHgwOCwgMHgwMSB9LAorCXsgMHgwOSwgMHgzZSB9LAorCXsgMHg1MCwgMHhkMSB9LAorCXsgMHg1MSwgMHgyMiB9LAorCXsgMHgzOSwgMHgwMSB9LAorCXsgMHg3MSwgMHgwMCB9LAorCXsgMHgyOCwgMHgyYSB9LAorCXsgMHgyOSwgMHgwMCB9LAorCXsgMHgyYSwgMHhmZiB9LAorCXsgMHgyYiwgMHg4MCB9LAorCXsgMHgyOCwgMHgyMCB9LAorCXsgMHgyOSwgMHgzMyB9LAorCXsgMHgyYSwgMHhkZiB9LAorCXsgMHgyYiwgMHhhOSB9LAorCXsgMHgzYiwgMHgyMSB9LAorCXsgMHgzYywgMHgzYSB9LAorCXsgMHgwMSwgMHgwZCB9LAorCXsgMHgwNCwgMHgwOCB9LAorCXsgMHgwNSwgMHgwNSB9LAorCXsgMHgwNCwgMHgwZSB9LAorCXsgMHgwNSwgMHgwMCB9LAorCXsgMHgwNCwgMHgwZiB9LAorCXsgMHgwNSwgMHgxNCB9LAorCXsgMHgwNCwgMHgwYiB9LAorCXsgMHgwNSwgMHg4YyB9LAorCXsgMHgwNCwgMHgwMCB9LAorCXsgMHgwNSwgMHgwMCB9LAorCXsgMHgwNCwgMHgwMSB9LAorCXsgMHgwNSwgMHgwNyB9LAorCXsgMHgwNCwgMHgwMiB9LAorCXsgMHgwNSwgMHgwZiB9LAorCXsgMHgwNCwgMHgwMyB9LAorCXsgMHgwNSwgMHhhMCB9LAorCXsgMHgwNCwgMHgwOSB9LAorCXsgMHgwNSwgMHgwMCB9LAorCXsgMHgwNCwgMHgwYSB9LAorCXsgMHgwNSwgMHhmZiB9LAorCXsgMHgwNCwgMHgyNyB9LAorCXsgMHgwNSwgMHg2NCB9LAorCXsgMHgwNCwgMHgyOCB9LAorCXsgMHgwNSwgMHgwMCB9LAorCXsgMHgwNCwgMHgxZSB9LAorCXsgMHgwNSwgMHhmZiB9LAorCXsgMHgwNCwgMHgyOSB9LAorCXsgMHgwNSwgMHgwYSB9LAorCXsgMHgwNCwgMHgzMiB9LAorCXsgMHgwNSwgMHgwYSB9LAorCXsgMHgwNCwgMHgxNCB9LAorCXsgMHgwNSwgMHgwMiB9LAorCXsgMHgwNCwgMHgwNCB9LAorCXsgMHgwNSwgMHgwMCB9LAorCXsgMHgwNCwgMHgwNSB9LAorCXsgMHgwNSwgMHgyMiB9LAorCXsgMHgwNCwgMHgwNiB9LAorCXsgMHgwNSwgMHgwZSB9LAorCXsgMHgwNCwgMHgwNyB9LAorCXsgMHgwNSwgMHhkOCB9LAorCXsgMHgwNCwgMHgxMiB9LAorCXsgMHgwNSwgMHgwMCB9LAorCXsgMHgwNCwgMHgxMyB9LAorCXsgMHgwNSwgMHhmZiB9LAorCXsgMHg1MiwgMHgwMSB9LAorCXsgMHg1MCwgMHhhNyB9LAorCXsgMHg1MSwgMHgwMCB9LAorCXsgMHg1MCwgMHhhOCB9LAorCXsgMHg1MSwgMHhmZiB9LAorCXsgMHg1MCwgMHhhOSB9LAorCXsgMHg1MSwgMHhmZiB9LAorCXsgMHg1MCwgMHhhYSB9LAorCXsgMHg1MSwgMHgwMCB9LAorCXsgMHg1MCwgMHhhYiB9LAorCXsgMHg1MSwgMHhmZiB9LAorCXsgMHg1MCwgMHhhYyB9LAorCXsgMHg1MSwgMHhmZiB9LAorCXsgMHg1MCwgMHhhZCB9LAorCXsgMHg1MSwgMHgwMCB9LAorCXsgMHg1MCwgMHhhZSB9LAorCXsgMHg1MSwgMHhmZiB9LAorCXsgMHg1MCwgMHhhZiB9LAorCXsgMHg1MSwgMHhmZiB9LAorCXsgMHg1ZSwgMHgwNyB9LAorCXsgMHg1MCwgMHhkYyB9LAorCXsgMHg1MSwgMHgwMSB9LAorCXsgMHg1MCwgMHhkZCB9LAorCXsgMHg1MSwgMHhmNCB9LAorCXsgMHg1MCwgMHhkZSB9LAorCXsgMHg1MSwgMHgwMSB9LAorCXsgMHg1MCwgMHhkZiB9LAorCXsgMHg1MSwgMHhmNCB9LAorCXsgMHg1MCwgMHhlMCB9LAorCXsgMHg1MSwgMHgwMSB9LAorCXsgMHg1MCwgMHhlMSB9LAorCXsgMHg1MSwgMHhmNCB9LAorCXsgMHg1MCwgMHhiMCB9LAorCXsgMHg1MSwgMHgwNyB9LAorCXsgMHg1MCwgMHhiMiB9LAorCXsgMHg1MSwgMHhmZiB9LAorCXsgMHg1MCwgMHhiMyB9LAorCXsgMHg1MSwgMHhmZiB9LAorCXsgMHg1MCwgMHhiNCB9LAorCXsgMHg1MSwgMHhmZiB9LAorCXsgMHg1MCwgMHhiNSB9LAorCXsgMHg1MSwgMHhmZiB9LAorCXsgMHg1MCwgMHhiNiB9LAorCXsgMHg1MSwgMHhmZiB9LAorCXsgMHg1MCwgMHhiNyB9LAorCXsgMHg1MSwgMHhmZiB9LAorCXsgMHg1MCwgMHg1MCB9LAorCXsgMHg1MSwgMHgwMiB9LAorCXsgMHg1MCwgMHg1MSB9LAorCXsgMHg1MSwgMHgwNCB9LAorCXsgMHg0NSwgMHgwNCB9LAorCXsgMHg0OCwgMHgwNCB9LAorCXsgMHg1MCwgMHhkNSB9LAorCXsgMHg1MSwgMHgwMSB9LAkJLyogU2VyaWFsICovCisJeyAweDUwLCAweGQ2IH0sCisJeyAweDUxLCAweDFmIH0sCisJeyAweDUwLCAweGQyIH0sCisJeyAweDUxLCAweDAzIH0sCisJeyAweDUwLCAweGQ3IH0sCisJeyAweDUxLCAweDNmIH0sCisJeyAweDFjLCAweDAxIH0sCisJeyAweDI4LCAweDA2IH0sCisJeyAweDI5LCAweDAwIH0sCisJeyAweDJhLCAweDAwIH0sCisJeyAweDJiLCAweDAzIH0sCisJeyAweDI4LCAweDA3IH0sCisJeyAweDI5LCAweDAwIH0sCisJeyAweDJhLCAweDAwIH0sCisJeyAweDJiLCAweDBkIH0sCisJeyAweDI4LCAweDA4IH0sCisJeyAweDI5LCAweDAwIH0sCisJeyAweDJhLCAweDAwIH0sCisJeyAweDJiLCAweDAyIH0sCisJeyAweDI4LCAweDA5IH0sCisJeyAweDI5LCAweDAwIH0sCisJeyAweDJhLCAweDAwIH0sCisJeyAweDJiLCAweDAxIH0sCisJeyAweDI4LCAweDBhIH0sCisJeyAweDI5LCAweDAwIH0sCisJeyAweDJhLCAweDAwIH0sCisJeyAweDJiLCAweDIxIH0sCisJeyAweDI4LCAweDBiIH0sCisJeyAweDI5LCAweDAwIH0sCisJeyAweDJhLCAweDAwIH0sCisJeyAweDJiLCAweDI5IH0sCisJeyAweDI4LCAweDBjIH0sCisJeyAweDI5LCAweDAwIH0sCisJeyAweDJhLCAweDAwIH0sCisJeyAweDJiLCAweDE2IH0sCisJeyAweDI4LCAweDBkIH0sCisJeyAweDI5LCAweDAwIH0sCisJeyAweDJhLCAweDAwIH0sCisJeyAweDJiLCAweDMxIH0sCisJeyAweDI4LCAweDBlIH0sCisJeyAweDI5LCAweDAwIH0sCisJeyAweDJhLCAweDAwIH0sCisJeyAweDJiLCAweDBlIH0sCisJeyAweDI4LCAweDBmIH0sCisJeyAweDI5LCAweDAwIH0sCisJeyAweDJhLCAweDAwIH0sCisJeyAweDJiLCAweDRlIH0sCisJeyAweDI4LCAweDEwIH0sCisJeyAweDI5LCAweDAwIH0sCisJeyAweDJhLCAweDAwIH0sCisJeyAweDJiLCAweDQ2IH0sCisJeyAweDI4LCAweDExIH0sCisJeyAweDI5LCAweDAwIH0sCisJeyAweDJhLCAweDAwIH0sCisJeyAweDJiLCAweDBmIH0sCisJeyAweDI4LCAweDEyIH0sCisJeyAweDI5LCAweDAwIH0sCisJeyAweDJhLCAweDAwIH0sCisJeyAweDJiLCAweDU2IH0sCisJeyAweDI4LCAweDEzIH0sCisJeyAweDI5LCAweDAwIH0sCisJeyAweDJhLCAweDAwIH0sCisJeyAweDJiLCAweDM1IH0sCisJeyAweDI4LCAweDE0IH0sCisJeyAweDI5LCAweDAwIH0sCisJeyAweDJhLCAweDAxIH0sCisJeyAweDJiLCAweGJlIH0sCisJeyAweDI4LCAweDE1IH0sCisJeyAweDI5LCAweDAwIH0sCisJeyAweDJhLCAweDAxIH0sCisJeyAweDJiLCAweDg0IH0sCisJeyAweDI4LCAweDE2IH0sCisJeyAweDI5LCAweDAwIH0sCisJeyAweDJhLCAweDAzIH0sCisJeyAweDJiLCAweGVlIH0sCisJeyAweDI4LCAweDE3IH0sCisJeyAweDI5LCAweDAwIH0sCisJeyAweDJhLCAweDAwIH0sCisJeyAweDJiLCAweDk4IH0sCisJeyAweDI4LCAweDE4IH0sCisJeyAweDI5LCAweDAwIH0sCisJeyAweDJhLCAweDAwIH0sCisJeyAweDJiLCAweDlmIH0sCisJeyAweDI4LCAweDE5IH0sCisJeyAweDI5LCAweDAwIH0sCisJeyAweDJhLCAweDA3IH0sCisJeyAweDJiLCAweGIyIH0sCisJeyAweDI4LCAweDFhIH0sCisJeyAweDI5LCAweDAwIH0sCisJeyAweDJhLCAweDA2IH0sCisJeyAweDJiLCAweGMyIH0sCisJeyAweDI4LCAweDFiIH0sCisJeyAweDI5LCAweDAwIH0sCisJeyAweDJhLCAweDA3IH0sCisJeyAweDJiLCAweDRhIH0sCisJeyAweDI4LCAweDFjIH0sCisJeyAweDI5LCAweDAwIH0sCisJeyAweDJhLCAweDAxIH0sCisJeyAweDJiLCAweGJjIH0sCisJeyAweDI4LCAweDFkIH0sCisJeyAweDI5LCAweDAwIH0sCisJeyAweDJhLCAweDA0IH0sCisJeyAweDJiLCAweGJhIH0sCisJeyAweDI4LCAweDFlIH0sCisJeyAweDI5LCAweDAwIH0sCisJeyAweDJhLCAweDA2IH0sCisJeyAweDJiLCAweDE0IH0sCisJeyAweDUwLCAweDFlIH0sCisJeyAweDUxLCAweDVkIH0sCisJeyAweDUwLCAweDIyIH0sCisJeyAweDUxLCAweDAwIH0sCisJeyAweDUwLCAweDIzIH0sCisJeyAweDUxLCAweGM4IH0sCisJeyAweDUwLCAweDI0IH0sCisJeyAweDUxLCAweDAwIH0sCisJeyAweDUwLCAweDI1IH0sCisJeyAweDUxLCAweGYwIH0sCisJeyAweDUwLCAweDI2IH0sCisJeyAweDUxLCAweDAwIH0sCisJeyAweDUwLCAweDI3IH0sCisJeyAweDUxLCAweGMzIH0sCisJeyAweDUwLCAweDM5IH0sCisJeyAweDUxLCAweDAyIH0sCisJeyAweDUwLCAweGQ1IH0sCisJeyAweDUxLCAweDAxIH0sCisJeyAweGQwLCAweDAwIH0sCit9OworCitzdGF0aWMgc3RydWN0IHJlZ2RhdGEgbWI4NmEyMHNfcmVzZXRfcmVjZXB0aW9uW10gPSB7CisJeyAweDcwLCAweGYwIH0sCisJeyAweDcwLCAweGZmIH0sCisJeyAweDA4LCAweDAxIH0sCisJeyAweDA4LCAweDAwIH0sCit9OworCitzdGF0aWMgaW50IG1iODZhMjBzX2kyY193cml0ZXJlZyhzdHJ1Y3QgbWI4NmEyMHNfc3RhdGUgKnN0YXRlLAorCQkJICAgICB1OCBpMmNfYWRkciwgaW50IHJlZywgaW50IGRhdGEpCit7CisJdTggYnVmW10gPSB7IHJlZywgZGF0YSB9OworCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsKKwkJLmFkZHIgPSBpMmNfYWRkciwgLmZsYWdzID0gMCwgLmJ1ZiA9IGJ1ZiwgLmxlbiA9IDIKKwl9OworCWludCByYzsKKworCXJjID0gaTJjX3RyYW5zZmVyKHN0YXRlLT5pMmMsICZtc2csIDEpOworCWlmIChyYyAhPSAxKSB7CisJCXByaW50aygiJXM6IHdyaXRlcmVnIHJjb3IocmMgPT0gJWksIHJlZyA9PSAweCUwMngsIgorCQkJICIgZGF0YSA9PSAweCUwMngpXG4iLCBfX2Z1bmNfXywgcmMsIHJlZywgZGF0YSk7CisJCXJldHVybiByYzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtYjg2YTIwc19pMmNfd3JpdGVyZWdkYXRhKHN0cnVjdCBtYjg2YTIwc19zdGF0ZSAqc3RhdGUsCisJCQkJICAgICB1OCBpMmNfYWRkciwgc3RydWN0IHJlZ2RhdGEgKnJkLCBpbnQgc2l6ZSkKK3sKKwlpbnQgaSwgcmM7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisJCXJjID0gbWI4NmEyMHNfaTJjX3dyaXRlcmVnKHN0YXRlLCBpMmNfYWRkciwgcmRbaV0ucmVnLAorCQkJCQkgICByZFtpXS5kYXRhKTsKKwkJaWYgKHJjIDwgMCkKKwkJCXJldHVybiByYzsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWI4NmEyMHNfaTJjX3JlYWRyZWcoc3RydWN0IG1iODZhMjBzX3N0YXRlICpzdGF0ZSwKKwkJCQl1OCBpMmNfYWRkciwgdTggcmVnKQoreworCXU4IHZhbDsKKwlpbnQgcmM7CisJc3RydWN0IGkyY19tc2cgbXNnW10gPSB7CisJCXsgLmFkZHIgPSBpMmNfYWRkciwgLmZsYWdzID0gMCwgLmJ1ZiA9ICZyZWcsIC5sZW4gPSAxIH0sCisJCXsgLmFkZHIgPSBpMmNfYWRkciwgLmZsYWdzID0gSTJDX01fUkQsIC5idWYgPSAmdmFsLCAubGVuID0gMSB9CisJfTsKKworCXJjID0gaTJjX3RyYW5zZmVyKHN0YXRlLT5pMmMsIG1zZywgMik7CisKKwlpZiAocmMgIT0gMikgeworCQlyYygiJXM6IHJlZz0weCV4IChyY29yPSVkKVxuIiwgX19mdW5jX18sIHJlZywgcmMpOworCQlyZXR1cm4gcmM7CisJfQorCisJcmV0dXJuIHZhbDsKK30KKworI2RlZmluZSBtYjg2YTIwc19yZWFkcmVnKHN0YXRlLCByZWcpIFwKKwltYjg2YTIwc19pMmNfcmVhZHJlZyhzdGF0ZSwgc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzcywgcmVnKQorI2RlZmluZSBtYjg2YTIwc193cml0ZXJlZyhzdGF0ZSwgcmVnLCB2YWwpIFwKKwltYjg2YTIwc19pMmNfd3JpdGVyZWcoc3RhdGUsIHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3MsIHJlZywgdmFsKQorI2RlZmluZSBtYjg2YTIwc193cml0ZXJlZ2RhdGEoc3RhdGUsIHJlZ2RhdGEpIFwKKwltYjg2YTIwc19pMmNfd3JpdGVyZWdkYXRhKHN0YXRlLCBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzLCBcCisJcmVnZGF0YSwgQVJSQVlfU0laRShyZWdkYXRhKSkKKworc3RhdGljIGludCBtYjg2YTIwc19pbml0ZmUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IG1iODZhMjBzX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCWludCByYzsKKwl1OCAgcmVnRDUgPSAxOworCisJZHByaW50aygiXG4iKTsKKworCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMCk7CisKKwkvKiBJbml0aWFsaXplIHRoZSBmcm9udGVuZCAqLworCXJjID0gbWI4NmEyMHNfd3JpdGVyZWdkYXRhKHN0YXRlLCBtYjg2YTIwc19pbml0KTsKKwlpZiAocmMgPCAwKQorCQlyZXR1cm4gcmM7CisKKwlpZiAoIXN0YXRlLT5jb25maWctPmlzX3NlcmlhbCkgeworCQlyZWdENSAmPSB+MTsKKworCQlyYyA9IG1iODZhMjBzX3dyaXRlcmVnKHN0YXRlLCAweDUwLCAweGQ1KTsKKwkJaWYgKHJjIDwgMCkKKwkJCXJldHVybiByYzsKKwkJcmMgPSBtYjg2YTIwc193cml0ZXJlZyhzdGF0ZSwgMHg1MSwgcmVnRDUpOworCQlpZiAocmMgPCAwKQorCQkJcmV0dXJuIHJjOworCX0KKworCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtYjg2YTIwc19yZWFkX3NpZ25hbF9zdHJlbmd0aChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTE2ICpzdHJlbmd0aCkKK3sKKwlzdHJ1Y3QgbWI4NmEyMHNfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJdW5zaWduZWQgcmZfbWF4LCByZl9taW4sIHJmOworCXU4CSB2YWw7CisKKwlkcHJpbnRrKCJcbiIpOworCisJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsKKworCS8qIERvZXMgYSBiaW5hcnkgc2VhcmNoIHRvIGdldCBSRiBzdHJlbmd0aCAqLworCXJmX21heCA9IDB4ZmZmOworCXJmX21pbiA9IDA7CisJZG8geworCQlyZiA9IChyZl9tYXggKyByZl9taW4pIC8gMjsKKwkJbWI4NmEyMHNfd3JpdGVyZWcoc3RhdGUsIDB4MDQsIDB4MWYpOworCQltYjg2YTIwc193cml0ZXJlZyhzdGF0ZSwgMHgwNSwgcmYgPj4gOCk7CisJCW1iODZhMjBzX3dyaXRlcmVnKHN0YXRlLCAweDA0LCAweDIwKTsKKwkJbWI4NmEyMHNfd3JpdGVyZWcoc3RhdGUsIDB4MDQsIHJmKTsKKworCQl2YWwgPSBtYjg2YTIwc19yZWFkcmVnKHN0YXRlLCAweDAyKTsKKwkJaWYgKHZhbCAmIDB4MDgpCisJCQlyZl9taW4gPSAocmZfbWF4ICsgcmZfbWluKSAvIDI7CisJCWVsc2UKKwkJCXJmX21heCA9IChyZl9tYXggKyByZl9taW4pIC8gMjsKKwkJaWYgKHJmX21heCAtIHJmX21pbiA8IDQpIHsKKwkJCSpzdHJlbmd0aCA9ICgoKHJmX21heCArIHJmX21pbikgLyAyKSAqIDY1NTM1KSAvIDQwOTU7CisJCQlicmVhazsKKwkJfQorCX0gd2hpbGUgKDEpOworCisJZHByaW50aygic2lnbmFsIHN0cmVuZ3RoID0gJWRcbiIsICpzdHJlbmd0aCk7CisKKwlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWI4NmEyMHNfcmVhZF9zdGF0dXMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGZlX3N0YXR1c190ICpzdGF0dXMpCit7CisJc3RydWN0IG1iODZhMjBzX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXU4IHZhbDsKKworCWRwcmludGsoIlxuIik7CisJKnN0YXR1cyA9IDA7CisKKwlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDApOworCXZhbCA9IG1iODZhMjBzX3JlYWRyZWcoc3RhdGUsIDB4MGEpICYgMHhmOworCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7CisKKwlpZiAodmFsID49IDIpCisJCSpzdGF0dXMgfD0gRkVfSEFTX1NJR05BTDsKKworCWlmICh2YWwgPj0gNCkKKwkJKnN0YXR1cyB8PSBGRV9IQVNfQ0FSUklFUjsKKworCWlmICh2YWwgPj0gNSkKKwkJKnN0YXR1cyB8PSBGRV9IQVNfVklURVJCSTsKKworCWlmICh2YWwgPj0gNykKKwkJKnN0YXR1cyB8PSBGRV9IQVNfU1lOQzsKKworCWlmICh2YWwgPj0gOCkJCQkJLyogTWF5YmUgOT8gKi8KKwkJKnN0YXR1cyB8PSBGRV9IQVNfTE9DSzsKKworCWRwcmludGsoInZhbCA9ICVkLCBzdGF0dXMgPSAweCUwMnhcbiIsIHZhbCwgKnN0YXR1cyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtYjg2YTIwc19zZXRfZnJvbnRlbmQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwKQoreworCXN0cnVjdCBtYjg2YTIwc19zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlpbnQgcmM7CisKKwlkcHJpbnRrKCJcbiIpOworCisJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsKKwlmZS0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zKGZlLCBwKTsKKworCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMCk7CisJcmMgPSBtYjg2YTIwc193cml0ZXJlZ2RhdGEoc3RhdGUsIG1iODZhMjBzX3Jlc2V0X3JlY2VwdGlvbik7CisJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBtYjg2YTIwc19nZXRfZnJvbnRlbmQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwKQoreworCisJLyogRklYTUU6IEZvciBub3csIGl0IGRvZXMgbm90aGluZyAqLworCisJZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5iYW5kd2lkdGhfaHogPSA2MDAwMDAwOworCWZlLT5kdHZfcHJvcGVydHlfY2FjaGUudHJhbnNtaXNzaW9uX21vZGUgPSBUUkFOU01JU1NJT05fTU9ERV9BVVRPOworCWZlLT5kdHZfcHJvcGVydHlfY2FjaGUuZ3VhcmRfaW50ZXJ2YWwgPSBHVUFSRF9JTlRFUlZBTF9BVVRPOworCWZlLT5kdHZfcHJvcGVydHlfY2FjaGUuaXNkYnRfcGFydGlhbF9yZWNlcHRpb24gPSAwOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWI4NmEyMHNfdHVuZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCXN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcGFyYW1zLAorCQkJdW5zaWduZWQgaW50IG1vZGVfZmxhZ3MsCisJCQl1bnNpZ25lZCBpbnQgKmRlbGF5LAorCQkJZmVfc3RhdHVzX3QgKnN0YXR1cykKK3sKKwlpbnQgcmMgPSAwOworCisJZHByaW50aygiXG4iKTsKKworCWlmIChwYXJhbXMgIT0gTlVMTCkKKwkJcmMgPSBtYjg2YTIwc19zZXRfZnJvbnRlbmQoZmUsIHBhcmFtcyk7CisKKwlpZiAoIShtb2RlX2ZsYWdzICYgRkVfVFVORV9NT0RFX09ORVNIT1QpKQorCQltYjg2YTIwc19yZWFkX3N0YXR1cyhmZSwgc3RhdHVzKTsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgbWI4NmEyMHNfcmVsZWFzZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3QgbWI4NmEyMHNfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisKKwlkcHJpbnRrKCJcbiIpOworCisJa2ZyZWUoc3RhdGUpOworfQorCitzdGF0aWMgc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMgbWI4NmEyMHNfb3BzOworCitzdHJ1Y3QgZHZiX2Zyb250ZW5kICptYjg2YTIwc19hdHRhY2goY29uc3Qgc3RydWN0IG1iODZhMjBzX2NvbmZpZyAqY29uZmlnLAorCQkJCSAgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYykKK3sKKwl1OAlyZXY7CisKKwkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBpbnRlcm5hbCBzdGF0ZSAqLworCXN0cnVjdCBtYjg2YTIwc19zdGF0ZSAqc3RhdGUgPQorCQlremFsbG9jKHNpemVvZihzdHJ1Y3QgbWI4NmEyMHNfc3RhdGUpLCBHRlBfS0VSTkVMKTsKKworCWRwcmludGsoIlxuIik7CisJaWYgKHN0YXRlID09IE5VTEwpIHsKKwkJcmMoIlVuYWJsZSB0byBremFsbG9jXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwkvKiBzZXR1cCB0aGUgc3RhdGUgKi8KKwlzdGF0ZS0+Y29uZmlnID0gY29uZmlnOworCXN0YXRlLT5pMmMgPSBpMmM7CisKKwkvKiBjcmVhdGUgZHZiX2Zyb250ZW5kICovCisJbWVtY3B5KCZzdGF0ZS0+ZnJvbnRlbmQub3BzLCAmbWI4NmEyMHNfb3BzLAorCQlzaXplb2Yoc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMpKTsKKwlzdGF0ZS0+ZnJvbnRlbmQuZGVtb2R1bGF0b3JfcHJpdiA9IHN0YXRlOworCisJLyogQ2hlY2sgaWYgaXQgaXMgYSBtYjg2YTIwcyBmcm9udGVuZCAqLworCXJldiA9IG1iODZhMjBzX3JlYWRyZWcoc3RhdGUsIDApOworCisJaWYgKHJldiA9PSAweDEzKSB7CisJCXByaW50ayhLRVJOX0lORk8gIkRldGVjdGVkIGEgRnVqaXRzdSBtYjg2YTIwcyBmcm9udGVuZFxuIik7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGcm9udGVuZCByZXZpc2lvbiAlZCBpcyB1bmtub3duIC0gYWJvcnRpbmcuXG4iLAorCQkgICAgICAgcmV2KTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlyZXR1cm4gJnN0YXRlLT5mcm9udGVuZDsKKworZXJyb3I6CisJa2ZyZWUoc3RhdGUpOworCXJldHVybiBOVUxMOworfQorRVhQT1JUX1NZTUJPTChtYjg2YTIwc19hdHRhY2gpOworCitzdGF0aWMgc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMgbWI4NmEyMHNfb3BzID0geworCS8qIFVzZSBkaWI4MDAwIHZhbHVlcyBwZXIgZGVmYXVsdCAqLworCS5pbmZvID0geworCQkubmFtZSA9ICJGdWppdHN1IG1iODZBMjBzIiwKKwkJLnR5cGUgPSBGRV9PRkRNLAorCQkuY2FwcyA9IEZFX0NBTl9JTlZFUlNJT05fQVVUTyB8IEZFX0NBTl9SRUNPVkVSIHwKKwkJCUZFX0NBTl9GRUNfMV8yICB8IEZFX0NBTl9GRUNfMl8zIHwgRkVfQ0FOX0ZFQ18zXzQgfAorCQkJRkVfQ0FOX0ZFQ181XzYgIHwgRkVfQ0FOX0ZFQ183XzggfCBGRV9DQU5fRkVDX0FVVE8gfAorCQkJRkVfQ0FOX1FQU0sgICAgIHwgRkVfQ0FOX1FBTV8xNiAgfCBGRV9DQU5fUUFNXzY0IHwKKwkJCUZFX0NBTl9UUkFOU01JU1NJT05fTU9ERV9BVVRPIHwgRkVfQ0FOX1FBTV9BVVRPIHwKKwkJCUZFX0NBTl9HVUFSRF9JTlRFUlZBTF9BVVRPICAgIHwgRkVfQ0FOX0hJRVJBUkNIWV9BVVRPLAorCQkvKiBBY3R1YWxseSwgdGhvc2UgdmFsdWVzIGRlcGVuZCBvbiB0aGUgdXNlZCB0dW5lciAqLworCQkuZnJlcXVlbmN5X21pbiA9IDQ1MDAwMDAwLAorCQkuZnJlcXVlbmN5X21heCA9IDg2NDAwMDAwMCwKKwkJLmZyZXF1ZW5jeV9zdGVwc2l6ZSA9IDYyNTAwLAorCX0sCisKKwkucmVsZWFzZSA9IG1iODZhMjBzX3JlbGVhc2UsCisKKwkuaW5pdCA9IG1iODZhMjBzX2luaXRmZSwKKwkuc2V0X2Zyb250ZW5kID0gbWI4NmEyMHNfc2V0X2Zyb250ZW5kLAorCS5nZXRfZnJvbnRlbmQgPSBtYjg2YTIwc19nZXRfZnJvbnRlbmQsCisJLnJlYWRfc3RhdHVzID0gbWI4NmEyMHNfcmVhZF9zdGF0dXMsCisJLnJlYWRfc2lnbmFsX3N0cmVuZ3RoID0gbWI4NmEyMHNfcmVhZF9zaWduYWxfc3RyZW5ndGgsCisJLnR1bmUgPSBtYjg2YTIwc190dW5lLAorfTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJEVkIgRnJvbnRlbmQgbW9kdWxlIGZvciBGdWppdHN1IG1iODZBMjBzIGhhcmR3YXJlIik7CitNT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9tYjg2YTIwcy5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL21iODZhMjBzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmYyMmU3NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9tYjg2YTIwcy5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiAgIEZ1aml0c3UgbWI4NmEyMHMgZHJpdmVyCisgKgorICogICBDb3B5cmlnaHQgKEMpIDIwMTAgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+CisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHZlcnNpb24gMi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBNQjg2QTIwU19ICisjZGVmaW5lIE1CODZBMjBTX0gKKworI2luY2x1ZGUgPGxpbnV4L2R2Yi9mcm9udGVuZC5oPgorCisvKioKKyAqIHN0cnVjdCBtYjg2YTIwc19jb25maWcgLSBEZWZpbmUgdGhlIHBlci1kZXZpY2UgYXR0cmlidXRlcyBvZiB0aGUgZnJvbnRlbmQKKyAqCisgKiBAZGVtb2RfYWRkcmVzczoJdGhlIGRlbW9kdWxhdG9yJ3MgaTJjIGFkZHJlc3MKKyAqLworCitzdHJ1Y3QgbWI4NmEyMHNfY29uZmlnIHsKKwl1OCBkZW1vZF9hZGRyZXNzOworCWJvb2wgaXNfc2VyaWFsOworfTsKKworI2lmIGRlZmluZWQoQ09ORklHX0RWQl9NQjg2QTIwUykgfHwgKGRlZmluZWQoQ09ORklHX0RWQl9NQjg2QTIwU19NT0RVTEUpIFwKKwkmJiBkZWZpbmVkKE1PRFVMRSkpCitleHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCAqbWI4NmEyMHNfYXR0YWNoKGNvbnN0IHN0cnVjdCBtYjg2YTIwc19jb25maWcgKmNvbmZpZywKKwkJCQkJICAgc3RydWN0IGkyY19hZGFwdGVyICppMmMpOworZXh0ZXJuIHN0cnVjdCBpMmNfYWRhcHRlciAqbWI4NmEyMHNfZ2V0X3R1bmVyX2kyY19hZGFwdGVyKHN0cnVjdCBkdmJfZnJvbnRlbmQgKik7CisjZWxzZQorc3RhdGljIGlubGluZSBzdHJ1Y3QgZHZiX2Zyb250ZW5kICptYjg2YTIwc19hdHRhY2goCisJY29uc3Qgc3RydWN0IG1iODZhMjBzX2NvbmZpZyAqY29uZmlnLCBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYykKK3sKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gTlVMTDsKK30KK3N0YXRpYyBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKgorCW1iODZhMjBzX2dldF90dW5lcl9pMmNfYWRhcHRlcihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gTlVMTDsKK30KKyNlbmRpZgorCisjZW5kaWYgLyogTUI4NkEyMFMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zOTIxLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvczkyMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhMDEwM2QKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvczkyMS5jCkBAIC0wLDAgKzEsNTQ4IEBACisvKgorICogICBTaGFycCBWQTNBNUpaOTIxIE9uZSBTZWcgQnJvYWRjYXN0IE1vZHVsZSBkcml2ZXIKKyAqICAgVGhpcyBkZXZpY2UgaXMgbGFiZWxlZCBhcyBqdXN0IFMuIDkyMSBhdCB0aGUgdG9wIG9mIHRoZSBmcm9udGVuZCBjYW4KKyAqCisgKiAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPgorICogICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBEb3VnbGFzIExhbmRncmFmIDxkb3Vnc2xhbmRAcmVkaGF0LmNvbT4KKyAqCisgKiAgIERldmVsb3BlZCBmb3IgTGVhZGVyc2hpcCBTQlRWRCAxc2VnIGRldmljZSBzb2xkIGluIEJyYXppbAorICoKKyAqICAgRnJvbnRlbmQgbW9kdWxlIGJhc2VkIG9uIGN4MjQxMjMgZHJpdmVyLCBnZXR0aW5nIHNvbWUgaW5mbyBmcm9tCisgKgl0aGUgb2xkIHM5MjEgZHJpdmVyLgorICoKKyAqICAgRklYTUU6IE5lZWQgdG8gcG9ydCB0byBEVkIgdjUuMiBBUEkKKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gdmVyc2lvbiAyLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CisKKyNpbmNsdWRlICJkdmJfZnJvbnRlbmQuaCIKKyNpbmNsdWRlICJzOTIxLmgiCisKK3N0YXRpYyBpbnQgZGVidWcgPSAxOworbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkFjdGl2YXRlcyBmcm9udGVuZCBkZWJ1Z2dpbmcgKGRlZmF1bHQ6MCkiKTsKKworI2RlZmluZSByYyhhcmdzLi4uKSAgZG8gewkJCQkJCVwKKwlwcmludGsoS0VSTl9FUlIgICJzOTIxOiAiIGFyZ3MpOwkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIGRwcmludGsoYXJncy4uLikJCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlpZiAoZGVidWcpIHsJCQkJCQlcCisJCQlwcmludGsoS0VSTl9ERUJVRyAiczkyMTogJXM6ICIsIF9fZnVuY19fKTsJXAorCQkJcHJpbnRrKGFyZ3MpOwkJCQkJXAorCQl9CQkJCQkJCVwKKwl9IHdoaWxlICgwKQorCitzdHJ1Y3QgczkyMV9zdGF0ZSB7CisJc3RydWN0IGkyY19hZGFwdGVyICppMmM7CisJY29uc3Qgc3RydWN0IHM5MjFfY29uZmlnICpjb25maWc7CisKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kIGZyb250ZW5kOworCisJLyogVGhlIERlbW9kIGNhbid0IGVhc2lseSBwcm92aWRlIHRoZXNlLCB3ZSBjYWNoZSB0aGVtICovCisJdTMyIGN1cnJlbnRmcmVxOworfTsKKworLyoKKyAqIFZhcmlvdXMgdHVuZXIgZGVmYXVsdHMgbmVlZCB0byBiZSBlc3RhYmxpc2hlZCBmb3IgYSBnaXZlbiBmcmVxdWVuY3kga0h6LgorICogZml4bWU6IFRoZSBib3VuZHMgb24gdGhlIGJhbmRzIGRvIG5vdCBtYXRjaCB0aGUgZG9jIGluIHJlYWwgbGlmZS4KKyAqIGZpeG1lOiBTb21lIG9mIHRoZW0gaGF2ZSBiZWVuIG1vdmVkLCBvdGhlciBtaWdodCBuZWVkIGFkanVzdG1lbnQuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgczkyMV9iYW5kc2VsZWN0X3ZhbCB7CisJdTMyIGZyZXFfbG93OworCXU4ICBiYW5kX3JlZzsKK30gczkyMV9iYW5kc2VsZWN0W10gPSB7CisJeyAgICAgICAgIDAsIDB4N2IgfSwKKwl7IDQ4NTE0MDAwMCwgMHg1YiB9LAorCXsgNTE1MTQwMDAwLCAweDNiIH0sCisJeyA1NDUxNDAwMDAsIDB4MWIgfSwKKwl7IDU5OTE0MDAwMCwgMHhmYiB9LAorCXsgNjIzMTQwMDAwLCAweGRiIH0sCisJeyA2NTkxNDAwMDAsIDB4YmIgfSwKKwl7IDcxMzE0MDAwMCwgMHg5YiB9LAorfTsKKworc3RydWN0IHJlZ2RhdGEgeworCXU4IHJlZzsKKwl1OCBkYXRhOworfTsKKworc3RhdGljIHN0cnVjdCByZWdkYXRhIHM5MjFfaW5pdFtdID0geworCXsgMHgwMSwgMHg4MCB9LAkJLyogUHJvYmFibHksIGEgcmVzZXQgc2VxdWVuY2UgKi8KKwl7IDB4MDEsIDB4NDAgfSwKKwl7IDB4MDEsIDB4ODAgfSwKKwl7IDB4MDEsIDB4NDAgfSwKKworCXsgMHgwMiwgMHgwMCB9LAorCXsgMHgwMywgMHg0MCB9LAorCXsgMHgwNCwgMHgwMSB9LAorCXsgMHgwNSwgMHgwMCB9LAorCXsgMHgwNiwgMHgwMCB9LAorCXsgMHgwNywgMHgwMCB9LAorCXsgMHgwOCwgMHgwMCB9LAorCXsgMHgwOSwgMHgwMCB9LAorCXsgMHgwYSwgMHgwMCB9LAorCXsgMHgwYiwgMHg1YSB9LAorCXsgMHgwYywgMHgwMCB9LAorCXsgMHgwZCwgMHgwMCB9LAorCXsgMHgwZiwgMHgwMCB9LAorCXsgMHgxMywgMHgxYiB9LAorCXsgMHgxNCwgMHg4MCB9LAorCXsgMHgxNSwgMHg0MCB9LAorCXsgMHgxNywgMHg3MCB9LAorCXsgMHgxOCwgMHgwMSB9LAorCXsgMHgxOSwgMHgxMiB9LAorCXsgMHgxYSwgMHgwMSB9LAorCXsgMHgxYiwgMHgxMiB9LAorCXsgMHgxYywgMHhhMCB9LAorCXsgMHgxZCwgMHgwMCB9LAorCXsgMHgxZSwgMHgwYSB9LAorCXsgMHgxZiwgMHgwOCB9LAorCXsgMHgyMCwgMHg0MCB9LAorCXsgMHgyMSwgMHhmZiB9LAorCXsgMHgyMiwgMHg0YyB9LAorCXsgMHgyMywgMHg0ZSB9LAorCXsgMHgyNCwgMHg0YyB9LAorCXsgMHgyNSwgMHgwMCB9LAorCXsgMHgyNiwgMHgwMCB9LAorCXsgMHgyNywgMHhmNCB9LAorCXsgMHgyOCwgMHg2MCB9LAorCXsgMHgyOSwgMHg4OCB9LAorCXsgMHgyYSwgMHg0MCB9LAorCXsgMHgyYiwgMHg0MCB9LAorCXsgMHgyYywgMHhmZiB9LAorCXsgMHgyZCwgMHgwMCB9LAorCXsgMHgyZSwgMHhmZiB9LAorCXsgMHgyZiwgMHgwMCB9LAorCXsgMHgzMCwgMHgyMCB9LAorCXsgMHgzMSwgMHgwNiB9LAorCXsgMHgzMiwgMHgwYyB9LAorCXsgMHgzNCwgMHgwZiB9LAorCXsgMHgzNywgMHhmZSB9LAorCXsgMHgzOCwgMHgwMCB9LAorCXsgMHgzOSwgMHg2MyB9LAorCXsgMHgzYSwgMHgxMCB9LAorCXsgMHgzYiwgMHgxMCB9LAorCXsgMHg0NywgMHgwMCB9LAorCXsgMHg0OSwgMHhlNSB9LAorCXsgMHg0YiwgMHgwMCB9LAorCXsgMHg1MCwgMHhjMCB9LAorCXsgMHg1MiwgMHgyMCB9LAorCXsgMHg1NCwgMHg1YSB9LAorCXsgMHg1NSwgMHg1YiB9LAorCXsgMHg1NiwgMHg0MCB9LAorCXsgMHg1NywgMHg3MCB9LAorCXsgMHg1YywgMHg1MCB9LAorCXsgMHg1ZCwgMHgwMCB9LAorCXsgMHg2MiwgMHgxNyB9LAorCXsgMHg2MywgMHgyZiB9LAorCXsgMHg2NCwgMHg2ZiB9LAorCXsgMHg2OCwgMHgwMCB9LAorCXsgMHg2OSwgMHg4OSB9LAorCXsgMHg2YSwgMHgwMCB9LAorCXsgMHg2YiwgMHgwMCB9LAorCXsgMHg2YywgMHgwMCB9LAorCXsgMHg2ZCwgMHgwMCB9LAorCXsgMHg2ZSwgMHgwMCB9LAorCXsgMHg3MCwgMHgxMCB9LAorCXsgMHg3MSwgMHgwMCB9LAorCXsgMHg3NSwgMHgwMCB9LAorCXsgMHg3NiwgMHgzMCB9LAorCXsgMHg3NywgMHgwMSB9LAorCXsgMHhhZiwgMHgwMCB9LAorCXsgMHhiMCwgMHhhMCB9LAorCXsgMHhiMiwgMHgzZCB9LAorCXsgMHhiMywgMHgyNSB9LAorCXsgMHhiNCwgMHg4YiB9LAorCXsgMHhiNSwgMHg0YiB9LAorCXsgMHhiNiwgMHgzZiB9LAorCXsgMHhiNywgMHhmZiB9LAorCXsgMHhiOCwgMHhmZiB9LAorCXsgMHhiOSwgMHhmYyB9LAorCXsgMHhiYSwgMHgwMCB9LAorCXsgMHhiYiwgMHgwMCB9LAorCXsgMHhiYywgMHgwMCB9LAorCXsgMHhkMCwgMHgzMCB9LAorCXsgMHhlNCwgMHg4NCB9LAorCXsgMHhmMCwgMHg0OCB9LAorCXsgMHhmMSwgMHgxOSB9LAorCXsgMHhmMiwgMHg1YSB9LAorCXsgMHhmMywgMHg4ZSB9LAorCXsgMHhmNCwgMHgyZCB9LAorCXsgMHhmNSwgMHgwNyB9LAorCXsgMHhmNiwgMHg1YSB9LAorCXsgMHhmNywgMHhiYSB9LAorCXsgMHhmOCwgMHhkNyB9LAorfTsKKworc3RhdGljIHN0cnVjdCByZWdkYXRhIHM5MjFfcHJlZnJlcVtdID0geworCXsgMHg0NywgMHg2MCB9LAorCXsgMHg2OCwgMHgwMCB9LAorCXsgMHg2OSwgMHg4OSB9LAorCXsgMHhmMCwgMHg0OCB9LAorCXsgMHhmMSwgMHgxOSB9LAorfTsKKworc3RhdGljIHN0cnVjdCByZWdkYXRhIHM5MjFfcG9zdGZyZXFbXSA9IHsKKwl7IDB4ZjUsIDB4YWUgfSwKKwl7IDB4ZjYsIDB4YjcgfSwKKwl7IDB4ZjcsIDB4YmEgfSwKKwl7IDB4ZjgsIDB4ZDcgfSwKKwl7IDB4NjgsIDB4MGEgfSwKKwl7IDB4NjksIDB4MDkgfSwKK307CisKK3N0YXRpYyBpbnQgczkyMV9pMmNfd3JpdGVyZWcoc3RydWN0IHM5MjFfc3RhdGUgKnN0YXRlLAorCQkJICAgICB1OCBpMmNfYWRkciwgaW50IHJlZywgaW50IGRhdGEpCit7CisJdTggYnVmW10gPSB7IHJlZywgZGF0YSB9OworCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsKKwkJLmFkZHIgPSBpMmNfYWRkciwgLmZsYWdzID0gMCwgLmJ1ZiA9IGJ1ZiwgLmxlbiA9IDIKKwl9OworCWludCByYzsKKworCXJjID0gaTJjX3RyYW5zZmVyKHN0YXRlLT5pMmMsICZtc2csIDEpOworCWlmIChyYyAhPSAxKSB7CisJCXByaW50aygiJXM6IHdyaXRlcmVnIHJjb3IocmMgPT0gJWksIHJlZyA9PSAweCUwMngsIgorCQkJICIgZGF0YSA9PSAweCUwMngpXG4iLCBfX2Z1bmNfXywgcmMsIHJlZywgZGF0YSk7CisJCXJldHVybiByYzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzOTIxX2kyY193cml0ZXJlZ2RhdGEoc3RydWN0IHM5MjFfc3RhdGUgKnN0YXRlLCB1OCBpMmNfYWRkciwKKwkJCQkgc3RydWN0IHJlZ2RhdGEgKnJkLCBpbnQgc2l6ZSkKK3sKKwlpbnQgaSwgcmM7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisJCXJjID0gczkyMV9pMmNfd3JpdGVyZWcoc3RhdGUsIGkyY19hZGRyLCByZFtpXS5yZWcsIHJkW2ldLmRhdGEpOworCQlpZiAocmMgPCAwKQorCQkJcmV0dXJuIHJjOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzOTIxX2kyY19yZWFkcmVnKHN0cnVjdCBzOTIxX3N0YXRlICpzdGF0ZSwgdTggaTJjX2FkZHIsIHU4IHJlZykKK3sKKwl1OCB2YWw7CisJaW50IHJjOworCXN0cnVjdCBpMmNfbXNnIG1zZ1tdID0geworCQl7IC5hZGRyID0gaTJjX2FkZHIsIC5mbGFncyA9IDAsIC5idWYgPSAmcmVnLCAubGVuID0gMSB9LAorCQl7IC5hZGRyID0gaTJjX2FkZHIsIC5mbGFncyA9IEkyQ19NX1JELCAuYnVmID0gJnZhbCwgLmxlbiA9IDEgfQorCX07CisKKwlyYyA9IGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjLCBtc2csIDIpOworCisJaWYgKHJjICE9IDIpIHsKKwkJcmMoIiVzOiByZWc9MHgleCAocmNvcj0lZClcbiIsIF9fZnVuY19fLCByZWcsIHJjKTsKKwkJcmV0dXJuIHJjOworCX0KKworCXJldHVybiB2YWw7Cit9CisKKyNkZWZpbmUgczkyMV9yZWFkcmVnKHN0YXRlLCByZWcpIFwKKwlzOTIxX2kyY19yZWFkcmVnKHN0YXRlLCBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzLCByZWcpCisjZGVmaW5lIHM5MjFfd3JpdGVyZWcoc3RhdGUsIHJlZywgdmFsKSBcCisJczkyMV9pMmNfd3JpdGVyZWcoc3RhdGUsIHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3MsIHJlZywgdmFsKQorI2RlZmluZSBzOTIxX3dyaXRlcmVnZGF0YShzdGF0ZSwgcmVnZGF0YSkgXAorCXM5MjFfaTJjX3dyaXRlcmVnZGF0YShzdGF0ZSwgc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzcywgXAorCXJlZ2RhdGEsIEFSUkFZX1NJWkUocmVnZGF0YSkpCisKK3N0YXRpYyBpbnQgczkyMV9wbGxfdHVuZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnApCit7CisJc3RydWN0IHM5MjFfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJaW50IGJhbmQsIHJjLCBpOworCXVuc2lnbmVkIGxvbmcgZl9vZmZzZXQ7CisJdTggZl9zd2l0Y2g7CisJdTY0IG9mZnNldDsKKworCWRwcmludGsoImZyZXF1ZW5jeT0laVxuIiwgcC0+ZnJlcXVlbmN5KTsKKworCWZvciAoYmFuZCA9IDA7IGJhbmQgPCBBUlJBWV9TSVpFKHM5MjFfYmFuZHNlbGVjdCk7IGJhbmQrKykKKwkJaWYgKHAtPmZyZXF1ZW5jeSA8IHM5MjFfYmFuZHNlbGVjdFtiYW5kXS5mcmVxX2xvdykKKwkJCWJyZWFrOworCWJhbmQtLTsKKworCWlmIChiYW5kIDwgMCkgeworCQlyYygiJXM6IGZyZXF1ZW5jeSBvdXQgb2YgcmFuZ2VcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZl9zd2l0Y2ggPSBzOTIxX2JhbmRzZWxlY3RbYmFuZF0uYmFuZF9yZWc7CisKKwlvZmZzZXQgPSAoKHU2NClwLT5mcmVxdWVuY3kpICogMjU4OworCWRvX2RpdihvZmZzZXQsIDYwMDAwMDApOworCWZfb2Zmc2V0ID0gKCh1bnNpZ25lZCBsb25nKW9mZnNldCkgKyAyMzIxOworCisJcmMgPSBzOTIxX3dyaXRlcmVnZGF0YShzdGF0ZSwgczkyMV9wcmVmcmVxKTsKKwlpZiAocmMgPCAwKQorCQlyZXR1cm4gcmM7CisKKwlyYyA9IHM5MjFfd3JpdGVyZWcoc3RhdGUsIDB4ZjIsIChmX29mZnNldCA+PiA4KSAmIDB4ZmYpOworCWlmIChyYyA8IDApCisJCXJldHVybiByYzsKKworCXJjID0gczkyMV93cml0ZXJlZyhzdGF0ZSwgMHhmMywgZl9vZmZzZXQgJiAweGZmKTsKKwlpZiAocmMgPCAwKQorCQlyZXR1cm4gcmM7CisKKwlyYyA9IHM5MjFfd3JpdGVyZWcoc3RhdGUsIDB4ZjQsIGZfc3dpdGNoKTsKKwlpZiAocmMgPCAwKQorCQlyZXR1cm4gcmM7CisKKwlyYyA9IHM5MjFfd3JpdGVyZWdkYXRhKHN0YXRlLCBzOTIxX3Bvc3RmcmVxKTsKKwlpZiAocmMgPCAwKQorCQlyZXR1cm4gcmM7CisKKwlmb3IgKGkgPSAwIDsgaSA8IDY7IGkrKykgeworCQlyYyA9IHM5MjFfcmVhZHJlZyhzdGF0ZSwgMHg4MCk7CisJCWRwcmludGsoInN0YXR1cyAweDgwOiAlMDJ4XG4iLCByYyk7CisJfQorCXJjID0gczkyMV93cml0ZXJlZyhzdGF0ZSwgMHgwMSwgMHg0MCk7CisJaWYgKHJjIDwgMCkKKwkJcmV0dXJuIHJjOworCisJcmMgPSBzOTIxX3JlYWRyZWcoc3RhdGUsIDB4MDEpOworCWRwcmludGsoInN0YXR1cyAweDAxOiAlMDJ4XG4iLCByYyk7CisKKwlyYyA9IHM5MjFfcmVhZHJlZyhzdGF0ZSwgMHg4MCk7CisJZHByaW50aygic3RhdHVzIDB4ODA6ICUwMnhcbiIsIHJjKTsKKworCXJjID0gczkyMV9yZWFkcmVnKHN0YXRlLCAweDgwKTsKKwlkcHJpbnRrKCJzdGF0dXMgMHg4MDogJTAyeFxuIiwgcmMpOworCisJcmMgPSBzOTIxX3JlYWRyZWcoc3RhdGUsIDB4MzIpOworCWRwcmludGsoInN0YXR1cyAweDMyOiAlMDJ4XG4iLCByYyk7CisKKwlkcHJpbnRrKCJwbGwgdHVuZSBiYW5kPSVkLCBwbGw9JWRcbiIsIGZfc3dpdGNoLCAoaW50KWZfb2Zmc2V0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHM5MjFfaW5pdGZlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCBzOTIxX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCWludCByYzsKKworCWRwcmludGsoIlxuIik7CisKKwlyYyA9IHM5MjFfd3JpdGVyZWdkYXRhKHN0YXRlLCBzOTIxX2luaXQpOworCWlmIChyYyA8IDApCisJCXJldHVybiByYzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHM5MjFfcmVhZF9zdGF0dXMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGZlX3N0YXR1c190ICpzdGF0dXMpCit7CisJc3RydWN0IHM5MjFfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJaW50IHJlZ3N0YXR1cywgcmM7CisKKwkqc3RhdHVzID0gMDsKKworCXJjID0gczkyMV9yZWFkcmVnKHN0YXRlLCAweDgxKTsKKwlpZiAocmMgPCAwKQorCQlyZXR1cm4gcmM7CisKKwlyZWdzdGF0dXMgPSByYyA8PCA4OworCisJcmMgPSBzOTIxX3JlYWRyZWcoc3RhdGUsIDB4ODIpOworCWlmIChyYyA8IDApCisJCXJldHVybiByYzsKKworCXJlZ3N0YXR1cyB8PSByYzsKKworCWRwcmludGsoInN0YXR1cyA9ICUwNHhcbiIsIHJlZ3N0YXR1cyk7CisKKwkvKiBGdWxsIFN5bmMgLSBXZSBkb24ndCBrbm93IHdoYXQgZWFjaCBiaXQgbWVhbnMgb24gcmVncyAweDgxLzB4ODIgKi8KKwlpZiAoKHJlZ3N0YXR1cyAmIDB4ZmYpID09IDB4NDApIHsKKwkJKnN0YXR1cyA9IEZFX0hBU19TSUdOQUwgIHwKKwkJCSAgRkVfSEFTX0NBUlJJRVIgfAorCQkJICBGRV9IQVNfVklURVJCSSB8CisJCQkgIEZFX0hBU19TWU5DICAgIHwKKwkJCSAgRkVfSEFTX0xPQ0s7CisJfSBlbHNlIGlmIChyZWdzdGF0dXMgJiAweDQwKSB7CisJCS8qIFRoaXMgaXMgY2xvc2UgdG8gRnVsbCBTeW5jLCBidXQgbm90IGVub3VnaCB0byBnZXQgdXNlZnVsIGluZm8gKi8KKwkJKnN0YXR1cyA9IEZFX0hBU19TSUdOQUwgIHwKKwkJCSAgRkVfSEFTX0NBUlJJRVIgfAorCQkJICBGRV9IQVNfVklURVJCSSB8CisJCQkgIEZFX0hBU19TWU5DOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHM5MjFfcmVhZF9zaWduYWxfc3RyZW5ndGgoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUxNiAqc3RyZW5ndGgpCit7CisJZmVfc3RhdHVzX3QJc3RhdHVzOworCXN0cnVjdCBzOTIxX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCWludCByYzsKKworCS8qIEZJWE1FOiBVc2UgdGhlIHByb3BlciByZWdpc3RlciBmb3IgaXQuLi4gMHg4MD8gKi8KKwlyYyA9IHM5MjFfcmVhZF9zdGF0dXMoZmUsICZzdGF0dXMpOworCWlmIChyYyA8IDApCisJCXJldHVybiByYzsKKworCSpzdHJlbmd0aCA9IChzdGF0dXMgJiBGRV9IQVNfTE9DSykgPyAweGZmZmYgOiAwOworCisJZHByaW50aygic3RyZW5ndGggPSAweCUwNHhcbiIsICpzdHJlbmd0aCk7CisKKwlyYyA9IHM5MjFfcmVhZHJlZyhzdGF0ZSwgMHgwMSk7CisJZHByaW50aygic3RhdHVzIDB4MDE6ICUwMnhcbiIsIHJjKTsKKworCXJjID0gczkyMV9yZWFkcmVnKHN0YXRlLCAweDgwKTsKKwlkcHJpbnRrKCJzdGF0dXMgMHg4MDogJTAyeFxuIiwgcmMpOworCisJcmMgPSBzOTIxX3JlYWRyZWcoc3RhdGUsIDB4MzIpOworCWRwcmludGsoInN0YXR1cyAweDMyOiAlMDJ4XG4iLCByYyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzOTIxX3NldF9mcm9udGVuZChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnApCit7CisJc3RydWN0IHM5MjFfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJaW50IHJjOworCisJZHByaW50aygiXG4iKTsKKworCS8qIEZJWE1FOiBXZSBkb24ndCBrbm93IGhvdyB0byB1c2Ugbm9uLWF1dG8gbW9kZSAqLworCisJcmMgPSBzOTIxX3BsbF90dW5lKGZlLCBwKTsKKwlpZiAocmMgPCAwKQorCQlyZXR1cm4gcmM7CisKKwlzdGF0ZS0+Y3VycmVudGZyZXEgPSBwLT5mcmVxdWVuY3k7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzOTIxX2dldF9mcm9udGVuZChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnApCit7CisJc3RydWN0IHM5MjFfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisKKwkvKiBGSVhNRTogUHJvYmFibHkgaXQgaXMgcG9zc2libGUgdG8gZ2V0IGl0IGZyb20gcmVncyBmMSBhbmQgZjIgKi8KKwlwLT5mcmVxdWVuY3kgPSBzdGF0ZS0+Y3VycmVudGZyZXE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzOTIxX3R1bmUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnBhcmFtcywKKwkJCXVuc2lnbmVkIGludCBtb2RlX2ZsYWdzLAorCQkJdW5zaWduZWQgaW50ICpkZWxheSwKKwkJCWZlX3N0YXR1c190ICpzdGF0dXMpCit7CisJaW50IHJjID0gMDsKKworCWRwcmludGsoIlxuIik7CisKKwlpZiAocGFyYW1zICE9IE5VTEwpCisJCXJjID0gczkyMV9zZXRfZnJvbnRlbmQoZmUsIHBhcmFtcyk7CisKKwlpZiAoIShtb2RlX2ZsYWdzICYgRkVfVFVORV9NT0RFX09ORVNIT1QpKQorCQlzOTIxX3JlYWRfc3RhdHVzKGZlLCBzdGF0dXMpOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IHM5MjFfZ2V0X2FsZ28oc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJcmV0dXJuIDE7IC8qIEZFX0FMR09fSFcgKi8KK30KKworc3RhdGljIHZvaWQgczkyMV9yZWxlYXNlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCBzOTIxX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCisJZHByaW50aygiXG4iKTsKKwlrZnJlZShzdGF0ZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcyBzOTIxX29wczsKKworc3RydWN0IGR2Yl9mcm9udGVuZCAqczkyMV9hdHRhY2goY29uc3Qgc3RydWN0IHM5MjFfY29uZmlnICpjb25maWcsCisJCQkJICAgIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKQoreworCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGludGVybmFsIHN0YXRlICovCisJc3RydWN0IHM5MjFfc3RhdGUgKnN0YXRlID0KKwkJa3phbGxvYyhzaXplb2Yoc3RydWN0IHM5MjFfc3RhdGUpLCBHRlBfS0VSTkVMKTsKKworCWRwcmludGsoIlxuIik7CisJaWYgKHN0YXRlID09IE5VTEwpIHsKKwkJcmMoIlVuYWJsZSB0byBremFsbG9jXG4iKTsKKwkJZ290byByY29yOworCX0KKworCS8qIHNldHVwIHRoZSBzdGF0ZSAqLworCXN0YXRlLT5jb25maWcgPSBjb25maWc7CisJc3RhdGUtPmkyYyA9IGkyYzsKKworCS8qIGNyZWF0ZSBkdmJfZnJvbnRlbmQgKi8KKwltZW1jcHkoJnN0YXRlLT5mcm9udGVuZC5vcHMsICZzOTIxX29wcywKKwkJc2l6ZW9mKHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzKSk7CisJc3RhdGUtPmZyb250ZW5kLmRlbW9kdWxhdG9yX3ByaXYgPSBzdGF0ZTsKKworCXJldHVybiAmc3RhdGUtPmZyb250ZW5kOworCityY29yOgorCWtmcmVlKHN0YXRlKTsKKworCXJldHVybiBOVUxMOworfQorRVhQT1JUX1NZTUJPTChzOTIxX2F0dGFjaCk7CisKK3N0YXRpYyBzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcyBzOTIxX29wcyA9IHsKKwkvKiBVc2UgZGliODAwMCB2YWx1ZXMgcGVyIGRlZmF1bHQgKi8KKwkuaW5mbyA9IHsKKwkJLm5hbWUgPSAiU2hhcnAgUzkyMSIsCisJCS50eXBlID0gRkVfT0ZETSwKKwkJLmZyZXF1ZW5jeV9taW4gPSA0NzAwMDAwMDAsCisJCS8qCisJCSAqIE1heCBzaG91bGQgYmUgNzcwTUh6IGluc3RlYWQsIGFjY29yZGluZyB3aXRoIFNoYXJwIGRvY3MsCisJCSAqIGJ1dCBMZWFkZXJzaGlwIGRvYyBzYXlzIGl0IHdvcmtzIHVwIHRvIDgwNiBNSHouIFRoaXMgaXMKKwkJICogcmVxdWlyZWQgdG8gZ2V0IGNoYW5uZWwgNjksIHVzZWQgaW4gQnJhemlsCisJCSAqLworCQkuZnJlcXVlbmN5X21heCA9IDgwNjAwMDAwMCwKKwkJLmZyZXF1ZW5jeV90b2xlcmFuY2UgPSAwLAorCQkgLmNhcHMgPSBGRV9DQU5fSU5WRVJTSU9OX0FVVE8gfAorCQkJIEZFX0NBTl9GRUNfMV8yICB8IEZFX0NBTl9GRUNfMl8zIHwgRkVfQ0FOX0ZFQ18zXzQgfAorCQkJIEZFX0NBTl9GRUNfNV82ICB8IEZFX0NBTl9GRUNfN184IHwgRkVfQ0FOX0ZFQ19BVVRPIHwKKwkJCSBGRV9DQU5fUVBTSyAgICAgfCBGRV9DQU5fUUFNXzE2IHwgRkVfQ0FOX1FBTV82NCB8CisJCQkgRkVfQ0FOX1FBTV9BVVRPIHwgRkVfQ0FOX1RSQU5TTUlTU0lPTl9NT0RFX0FVVE8gfAorCQkJIEZFX0NBTl9HVUFSRF9JTlRFUlZBTF9BVVRPIHwgRkVfQ0FOX1JFQ09WRVIgfAorCQkJIEZFX0NBTl9ISUVSQVJDSFlfQVVUTywKKwl9LAorCisJLnJlbGVhc2UgPSBzOTIxX3JlbGVhc2UsCisKKwkuaW5pdCA9IHM5MjFfaW5pdGZlLAorCS5zZXRfZnJvbnRlbmQgPSBzOTIxX3NldF9mcm9udGVuZCwKKwkuZ2V0X2Zyb250ZW5kID0gczkyMV9nZXRfZnJvbnRlbmQsCisJLnJlYWRfc3RhdHVzID0gczkyMV9yZWFkX3N0YXR1cywKKwkucmVhZF9zaWduYWxfc3RyZW5ndGggPSBzOTIxX3JlYWRfc2lnbmFsX3N0cmVuZ3RoLAorCS50dW5lID0gczkyMV90dW5lLAorCS5nZXRfZnJvbnRlbmRfYWxnbyA9IHM5MjFfZ2V0X2FsZ28sCit9OworCitNT0RVTEVfREVTQ1JJUFRJT04oIkRWQiBGcm9udGVuZCBtb2R1bGUgZm9yIFNoYXJwIFM5MjEgaGFyZHdhcmUiKTsKK01PRFVMRV9BVVRIT1IoIk1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPiIpOworTU9EVUxFX0FVVEhPUigiRG91Z2xhcyBMYW5kZ3JhZiA8ZG91Z3NsYW5kQHJlZGhhdC5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvczkyMS5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3M5MjEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjIwZDgyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3M5MjEuaApAQCAtMCwwICsxLDQ3IEBACisvKgorICogICBTaGFycCBzOTIxIGRyaXZlcgorICoKKyAqICAgQ29weXJpZ2h0IChDKSAyMDA5IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPgorICogICBDb3B5cmlnaHQgKEMpIDIwMDkgRG91Z2xhcyBMYW5kZ3JhZiA8ZG91Z3NsYW5kQHJlZGhhdC5jb20+CisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHZlcnNpb24gMi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBTOTIxX0gKKyNkZWZpbmUgUzkyMV9ICisKKyNpbmNsdWRlIDxsaW51eC9kdmIvZnJvbnRlbmQuaD4KKworc3RydWN0IHM5MjFfY29uZmlnIHsKKwkvKiB0aGUgZGVtb2R1bGF0b3IncyBpMmMgYWRkcmVzcyAqLworCXU4IGRlbW9kX2FkZHJlc3M7Cit9OworCisjaWYgZGVmaW5lZChDT05GSUdfRFZCX1M5MjEpIHx8IChkZWZpbmVkKENPTkZJR19EVkJfUzkyMV9NT0RVTEUpIFwKKwkmJiBkZWZpbmVkKE1PRFVMRSkpCitleHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCAqczkyMV9hdHRhY2goY29uc3Qgc3RydWN0IHM5MjFfY29uZmlnICpjb25maWcsCisJCQkJCSAgIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKTsKK2V4dGVybiBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKnM5MjFfZ2V0X3R1bmVyX2kyY19hZGFwdGVyKHN0cnVjdCBkdmJfZnJvbnRlbmQgKik7CisjZWxzZQorc3RhdGljIGlubGluZSBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpzOTIxX2F0dGFjaCgKKwljb25zdCBzdHJ1Y3QgczkyMV9jb25maWcgKmNvbmZpZywgc3RydWN0IGkyY19hZGFwdGVyICppMmMpCit7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX2Z1bmNfXyk7CisJcmV0dXJuIE5VTEw7Cit9CitzdGF0aWMgc3RydWN0IGkyY19hZGFwdGVyICoKKwlzOTIxX2dldF90dW5lcl9pMmNfYWRhcHRlcihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gTlVMTDsKK30KKyNlbmRpZgorCisjZW5kaWYgLyogUzkyMV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvczkyMV9jb3JlLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvczkyMV9jb3JlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3NGI1MmIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3M5MjFfY29yZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjE2ICswLDAgQEAKLS8qCi0gKiBEcml2ZXIgZm9yIFNoYXJwIHM5MjEgZHJpdmVyCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBSZWNoYmVyZ2VyIDxtcmVjaGJlcmdlckBzdW5kdGVrLmRlPgotICoKLSAqLwotCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgInM5MjFfY29yZS5oIgotCi1zdGF0aWMgaW50IHM5MjFfaXNkYl9pbml0KHN0cnVjdCBzOTIxX2lzZGJfdCAqZGV2KTsKLXN0YXRpYyBpbnQgczkyMV9pc2RiX3NldF9wYXJhbWV0ZXJzKHN0cnVjdCBzOTIxX2lzZGJfdCAqZGV2LCBzdHJ1Y3QgczkyMV9pc2RiX3RfdHJhbnNtaXNzaW9uX21vZGVfcGFyYW1zICpwYXJhbXMpOwotc3RhdGljIGludCBzOTIxX2lzZGJfdHVuZShzdHJ1Y3QgczkyMV9pc2RiX3QgKmRldiwgc3RydWN0IHM5MjFfaXNkYl90X3R1bmVfcGFyYW1zICpwYXJhbXMpOwotc3RhdGljIGludCBzOTIxX2lzZGJfZ2V0X3N0YXR1cyhzdHJ1Y3QgczkyMV9pc2RiX3QgKmRldiwgdm9pZCAqZGF0YSk7Ci0KLXN0YXRpYyB1OCBpbml0X3RhYmxlW109eyAweDAxLCAweDQwLCAweDAyLCAweDAwLCAweDAzLCAweDQwLCAweDA0LCAweDAxLAotCQkJIDB4MDUsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDgsIDB4MDAsCi0JCQkgMHgwOSwgMHgwMCwgMHgwYSwgMHgwMCwgMHgwYiwgMHg1YSwgMHgwYywgMHgwMCwKLQkJCSAweDBkLCAweDAwLCAweDBmLCAweDAwLCAweDEzLCAweDFiLCAweDE0LCAweDgwLAotCQkJIDB4MTUsIDB4NDAsIDB4MTcsIDB4NzAsIDB4MTgsIDB4MDEsIDB4MTksIDB4MTIsCi0JCQkgMHgxYSwgMHgwMSwgMHgxYiwgMHgxMiwgMHgxYywgMHhhMCwgMHgxZCwgMHgwMCwKLQkJCSAweDFlLCAweDBhLCAweDFmLCAweDA4LCAweDIwLCAweDQwLCAweDIxLCAweGZmLAotCQkJIDB4MjIsIDB4NGMsIDB4MjMsIDB4NGUsIDB4MjQsIDB4NGMsIDB4MjUsIDB4MDAsCi0JCQkgMHgyNiwgMHgwMCwgMHgyNywgMHhmNCwgMHgyOCwgMHg2MCwgMHgyOSwgMHg4OCwKLQkJCSAweDJhLCAweDQwLCAweDJiLCAweDQwLCAweDJjLCAweGZmLCAweDJkLCAweDAwLAotCQkJIDB4MmUsIDB4ZmYsIDB4MmYsIDB4MDAsIDB4MzAsIDB4MjAsIDB4MzEsIDB4MDYsCi0JCQkgMHgzMiwgMHgwYywgMHgzNCwgMHgwZiwgMHgzNywgMHhmZSwgMHgzOCwgMHgwMCwKLQkJCSAweDM5LCAweDYzLCAweDNhLCAweDEwLCAweDNiLCAweDEwLCAweDQ3LCAweDAwLAotCQkJIDB4NDksIDB4ZTUsIDB4NGIsIDB4MDAsIDB4NTAsIDB4YzAsIDB4NTIsIDB4MjAsCi0JCQkgMHg1NCwgMHg1YSwgMHg1NSwgMHg1YiwgMHg1NiwgMHg0MCwgMHg1NywgMHg3MCwKLQkJCSAweDVjLCAweDUwLCAweDVkLCAweDAwLCAweDYyLCAweDE3LCAweDYzLCAweDJmLAotCQkJIDB4NjQsIDB4NmYsIDB4NjgsIDB4MDAsIDB4NjksIDB4ODksIDB4NmEsIDB4MDAsCi0JCQkgMHg2YiwgMHgwMCwgMHg2YywgMHgwMCwgMHg2ZCwgMHgwMCwgMHg2ZSwgMHgwMCwKLQkJCSAweDcwLCAweDAwLCAweDcxLCAweDAwLCAweDc1LCAweDAwLCAweDc2LCAweDMwLAotCQkJIDB4NzcsIDB4MDEsIDB4YWYsIDB4MDAsIDB4YjAsIDB4YTAsIDB4YjIsIDB4M2QsCi0JCQkgMHhiMywgMHgyNSwgMHhiNCwgMHg4YiwgMHhiNSwgMHg0YiwgMHhiNiwgMHgzZiwKLQkJCSAweGI3LCAweGZmLCAweGI4LCAweGZmLCAweGI5LCAweGZjLCAweGJhLCAweDAwLAotCQkJIDB4YmIsIDB4MDAsIDB4YmMsIDB4MDAsIDB4ZDAsIDB4MzAsIDB4ZTQsIDB4ODQsCi0JCQkgMHhmMCwgMHg0OCwgMHhmMSwgMHgxOSwgMHhmMiwgMHg1YSwgMHhmMywgMHg4ZSwKLQkJCSAweGY0LCAweDJkLCAweGY1LCAweDA3LCAweGY2LCAweDVhLCAweGY3LCAweGJhLAotCQkJIDB4ZjgsIDB4ZDcgfTsKLQotc3RhdGljIHU4IGNfdGFibGVbXT17IDB4NTgsIDB4OGEsIDB4N2IsIDB4NTksIDB4OGMsIDB4N2IsIDB4NWEsIDB4OGUsIDB4NWIsCi0JCSAgICAgIDB4NWIsIDB4OTAsIDB4NWIsIDB4NWMsIDB4OTIsIDB4NWIsIDB4NWQsIDB4OTQsIDB4NWIsCi0JCSAgICAgIDB4NWUsIDB4OTYsIDB4NWIsIDB4NWYsIDB4OTgsIDB4M2IsIDB4NjAsIDB4OWEsIDB4M2IsCi0JCSAgICAgIDB4NjEsIDB4OWMsIDB4M2IsIDB4NjIsIDB4OWUsIDB4M2IsIDB4NjMsIDB4YTAsIDB4M2IsCi0JCSAgICAgIDB4NjQsIDB4YTIsIDB4MWIsIDB4NjUsIDB4YTQsIDB4MWIsIDB4NjYsIDB4YTYsIDB4MWIsCi0JCSAgICAgIDB4NjcsIDB4YTgsIDB4MWIsIDB4NjgsIDB4YWEsIDB4MWIsIDB4NjksIDB4YWMsIDB4MWIsCi0JCSAgICAgIDB4NmEsIDB4YWUsIDB4MWIsIDB4NmIsIDB4YjAsIDB4MWIsIDB4NmMsIDB4YjIsIDB4MWIsCi0JCSAgICAgIDB4NmQsIDB4YjQsIDB4ZmIsIDB4NmUsIDB4YjYsIDB4ZmIsIDB4NmYsIDB4YjgsIDB4ZmIsCi0JCSAgICAgIDB4NzAsIDB4YmEsIDB4ZmIsIDB4NzEsIDB4YmMsIDB4ZGIsIDB4NzIsIDB4YmUsIDB4ZGIsCi0JCSAgICAgIDB4NzMsIDB4YzAsIDB4ZGIsIDB4NzQsIDB4YzIsIDB4ZGIsIDB4NzUsIDB4YzQsIDB4ZGIsCi0JCSAgICAgIDB4NzYsIDB4YzYsIDB4ZGIsIDB4NzcsIDB4YzgsIDB4YmIsIDB4NzgsIDB4Y2EsIDB4YmIsCi0JCSAgICAgIDB4NzksIDB4Y2MsIDB4YmIsIDB4N2EsIDB4Y2UsIDB4YmIsIDB4N2IsIDB4ZDAsIDB4YmIsCi0JCSAgICAgIDB4N2MsIDB4ZDIsIDB4YmIsIDB4N2QsIDB4ZDQsIDB4YmIsIDB4N2UsIDB4ZDYsIDB4YmIsCi0JCSAgICAgIDB4N2YsIDB4ZDgsIDB4YmIsIDB4ODAsIDB4ZGEsIDB4OWIsIDB4ODEsIDB4ZGMsIDB4OWIsCi0JCSAgICAgIDB4ODIsIDB4ZGUsIDB4OWIsIDB4ODMsIDB4ZTAsIDB4OWIsIDB4ODQsIDB4ZTIsIDB4OWIsCi0JCSAgICAgIDB4ODUsIDB4ZTQsIDB4OWIsIDB4ODYsIDB4ZTYsIDB4OWIsIDB4ODcsIDB4ZTgsIDB4OWIsCi0JCSAgICAgIDB4ODgsIDB4ZWEsIDB4OWIsIDB4ODksIDB4ZWMsIDB4OWIgfTsKLQotaW50IHM5MjFfaXNkYl9jbWQoc3RydWN0IHM5MjFfaXNkYl90ICpkZXYsIHUzMiBjbWQsIHZvaWQgKmRhdGEpIHsKLQlzd2l0Y2goY21kKSB7Ci0JY2FzZSBJU0RCX1RfQ01EX0lOSVQ6Ci0JCXM5MjFfaXNkYl9pbml0KGRldik7Ci0JCWJyZWFrOwotCWNhc2UgSVNEQl9UX0NNRF9TRVRfUEFSQU06Ci0JCXM5MjFfaXNkYl9zZXRfcGFyYW1ldGVycyhkZXYsIGRhdGEpOwotCQlicmVhazsKLQljYXNlIElTREJfVF9DTURfVFVORToKLQkJczkyMV9pc2RiX3R1bmUoZGV2LCBkYXRhKTsKLQkJYnJlYWs7Ci0JY2FzZSBJU0RCX1RfQ01EX0dFVF9TVEFUVVM6Ci0JCXM5MjFfaXNkYl9nZXRfc3RhdHVzKGRldiwgZGF0YSk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXByaW50aygidW5oYW5kbGVkIGNvbW1hbmRcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgczkyMV9pc2RiX2luaXQoc3RydWN0IHM5MjFfaXNkYl90ICpkZXYpIHsKLQl1bnNpZ25lZCBpbnQgaTsKLQl1bnNpZ25lZCBpbnQgcmV0OwotCXByaW50aygiaXNkYl9pbml0XG4iKTsKLQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGluaXRfdGFibGUpOyBpKz0yKSB7Ci0JCXJldCA9IGRldi0+aTJjX3dyaXRlKGRldi0+cHJpdl9kZXYsIGluaXRfdGFibGVbaV0sIGluaXRfdGFibGVbaSsxXSk7Ci0JCWlmIChyZXQgIT0gMCkgewotCQkJcHJpbnRrKCJpMmMgd3JpdGUgZmFpbGVkXG4iKTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgczkyMV9pc2RiX3NldF9wYXJhbWV0ZXJzKHN0cnVjdCBzOTIxX2lzZGJfdCAqZGV2LCBzdHJ1Y3QgczkyMV9pc2RiX3RfdHJhbnNtaXNzaW9uX21vZGVfcGFyYW1zICpwYXJhbXMpIHsKLQotCWludCByZXQ7Ci0JLyogYXV0byBpcyBzdWZmaWNpZW50IGZvciBub3csIGxhdGVyb24gdGhpcyBzaG91bGQgYmUgcmVmbGVjdGVkIGluIGFuIGV4dHJhIGludGVyZmFjZSAqLwotCi0KLQotCXJldCA9IGRldi0+aTJjX3dyaXRlKGRldi0+cHJpdl9kZXYsIDB4YjAsIDB4YTApOyAvL21vZF9iMik7Ci0JcmV0ID0gZGV2LT5pMmNfd3JpdGUoZGV2LT5wcml2X2RldiwgMHhiMiwgMHgzZCk7IC8vbW9kX2IyKTsKLQotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXJldCA9IGRldi0+aTJjX3dyaXRlKGRldi0+cHJpdl9kZXYsIDB4YjMsIDB4MjUpOyAvL21vZF9iMyk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0ID0gZGV2LT5pMmNfd3JpdGUoZGV2LT5wcml2X2RldiwgMHhiNCwgMHg4Yik7IC8vbW9kX2I0KTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXQgPSBkZXYtPmkyY193cml0ZShkZXYtPnByaXZfZGV2LCAweGI1LCAweDRiKTsgLy9tb2RfYjUpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXJldCA9IGRldi0+aTJjX3dyaXRlKGRldi0+cHJpdl9kZXYsIDB4YjYsIDB4M2YpOyAvL21vZF9iNik7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0ID0gZGV2LT5pMmNfd3JpdGUoZGV2LT5wcml2X2RldiwgMHhiNywgMHgzZik7IC8vbW9kX2I3KTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXR1cm4gRV9PSzsKLX0KLQotc3RhdGljIGludCBzOTIxX2lzZGJfdHVuZShzdHJ1Y3QgczkyMV9pc2RiX3QgKmRldiwgc3RydWN0IHM5MjFfaXNkYl90X3R1bmVfcGFyYW1zICpwYXJhbXMpIHsKLQotCWludCByZXQ7Ci0JaW50IGluZGV4OwotCi0JaW5kZXggPSAocGFyYW1zLT5mcmVxdWVuY3kgLSA0NzMxNDMwMDApLzYwMDAwMDA7Ci0KLQlpZiAoaW5kZXggPiA0OCkgewotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlkZXYtPmkyY193cml0ZShkZXYtPnByaXZfZGV2LCAweDQ3LCAweDYwKTsKLQotCXJldCA9IGRldi0+aTJjX3dyaXRlKGRldi0+cHJpdl9kZXYsIDB4NjgsIDB4MDApOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXJldCA9IGRldi0+aTJjX3dyaXRlKGRldi0+cHJpdl9kZXYsIDB4NjksIDB4ODkpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXJldCA9IGRldi0+aTJjX3dyaXRlKGRldi0+cHJpdl9kZXYsIDB4ZjAsIDB4NDgpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXJldCA9IGRldi0+aTJjX3dyaXRlKGRldi0+cHJpdl9kZXYsIDB4ZjEsIDB4MTkpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXJldCA9IGRldi0+aTJjX3dyaXRlKGRldi0+cHJpdl9kZXYsIDB4ZjIsIGNfdGFibGVbaW5kZXgqM10pOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXJldCA9IGRldi0+aTJjX3dyaXRlKGRldi0+cHJpdl9kZXYsIDB4ZjMsIGNfdGFibGVbaW5kZXgqMysxXSk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0ID0gZGV2LT5pMmNfd3JpdGUoZGV2LT5wcml2X2RldiwgMHhmNCwgY190YWJsZVtpbmRleCozKzJdKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXQgPSBkZXYtPmkyY193cml0ZShkZXYtPnByaXZfZGV2LCAweGY1LCAweGFlKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXQgPSBkZXYtPmkyY193cml0ZShkZXYtPnByaXZfZGV2LCAweGY2LCAweGI3KTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXQgPSBkZXYtPmkyY193cml0ZShkZXYtPnByaXZfZGV2LCAweGY3LCAweGJhKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXQgPSBkZXYtPmkyY193cml0ZShkZXYtPnByaXZfZGV2LCAweGY4LCAweGQ3KTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXQgPSBkZXYtPmkyY193cml0ZShkZXYtPnByaXZfZGV2LCAweDY4LCAweDBhKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXQgPSBkZXYtPmkyY193cml0ZShkZXYtPnByaXZfZGV2LCAweDY5LCAweDA5KTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlkZXYtPmkyY193cml0ZShkZXYtPnByaXZfZGV2LCAweDAxLCAweDQwKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzOTIxX2lzZGJfZ2V0X3N0YXR1cyhzdHJ1Y3QgczkyMV9pc2RiX3QgKmRldiwgdm9pZCAqZGF0YSkgewotCXVuc2lnbmVkIGludCAqcmV0ID0gKHVuc2lnbmVkIGludCopZGF0YTsKLQl1OCBpZmFnY19kdDsKLQl1OCByZmFnY19kdDsKLQotCW1kZWxheSgxMCk7Ci0JaWZhZ2NfZHQgPSBkZXYtPmkyY19yZWFkKGRldi0+cHJpdl9kZXYsIDB4ODEpOwotCXJmYWdjX2R0ID0gZGV2LT5pMmNfcmVhZChkZXYtPnByaXZfZGV2LCAweDgyKTsKLQlpZiAocmZhZ2NfZHQgPT0gMHg0MCkgewotCQkqcmV0ID0gMTsKLQl9Ci0JcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvczkyMV9jb3JlLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvczkyMV9jb3JlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlMmYxMGEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3M5MjFfY29yZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTE0ICswLDAgQEAKLSNpZm5kZWYgX1M5MjFfQ09SRV9ICi0jZGVmaW5lIF9TOTIxX0NPUkVfSAotLy8jZGVmaW5lIHU4IHVuc2lnbmVkIGludAotLy8jZGVmaW5lIHUzMiB1bnNpZ25lZCBpbnQKLQotCi0KLS8vI2RlZmluZSBFSU5WQUwgLTEKLSNkZWZpbmUgRV9PSyAwCi0KLXN0cnVjdCBzOTIxX2lzZGJfdCB7Ci0Jdm9pZCAqcHJpdl9kZXY7Ci0JaW50ICgqaTJjX3dyaXRlKSh2b2lkICpkZXYsIHU4IHJlZywgdTggdmFsKTsKLQlpbnQgKCppMmNfcmVhZCkodm9pZCAqZGV2LCB1OCByZWcpOwotfTsKLQotI2RlZmluZSBJU0RCX1RfQ01EX0lOSVQgICAgICAgMAotI2RlZmluZSBJU0RCX1RfQ01EX1NFVF9QQVJBTSAgMQotI2RlZmluZSBJU0RCX1RfQ01EX1RVTkUgICAgICAgMgotI2RlZmluZSBJU0RCX1RfQ01EX0dFVF9TVEFUVVMgMwotCi1zdHJ1Y3QgczkyMV9pc2RiX3RfdHVuZV9wYXJhbXMgewotCXUzMiBmcmVxdWVuY3k7Ci19OwotCi1zdHJ1Y3QgczkyMV9pc2RiX3Rfc3RhdHVzIHsKLX07Ci0KLXN0cnVjdCBzOTIxX2lzZGJfdF90cmFuc21pc3Npb25fbW9kZV9wYXJhbXMgewotCXU4IG1vZGU7Ci0JdTggbGF5ZXJfYV9tb2RlOwotI2RlZmluZSBJU0RCX1RfTEFfTU9ERV8xIDAKLSNkZWZpbmUgSVNEQl9UX0xBX01PREVfMiAxCi0jZGVmaW5lIElTREJfVF9MQV9NT0RFXzMgMgotCXU4IGxheWVyX2FfY2Fycmllcl9tb2R1bGF0aW9uOwotI2RlZmluZSBJU0RCX1RfTEFfQ01fRFFQU0sgMAotI2RlZmluZSBJU0RCX1RfTEFfQ01fUVBTSyAgMQotI2RlZmluZSBJU0RCX1RfTEFfQ01fMTZRQU0gMgotI2RlZmluZSBJU0RCX1RfTEFfQ01fNjRRQU0gMwotI2RlZmluZSBJU0RCX1RfTEFfQ01fTk9MQVlFUiA0Ci0JdTggbGF5ZXJfYV9jb2RlX3JhdGU7Ci0jZGVmaW5lIElTREJfVF9MQV9DUl8xXzIgICAwCi0jZGVmaW5lIElTREJfVF9MQV9DUl8yXzMgICAxCi0jZGVmaW5lIElTREJfVF9MQV9DUl8zXzQgICAyCi0jZGVmaW5lIElTREJfVF9MQV9DUl81XzYgICA0Ci0jZGVmaW5lIElTREJfVF9MQV9DUl83XzggICA4Ci0jZGVmaW5lIElTREJfVF9MQV9DUl9OT0xBWUVSICAgMTYKLQl1OCBsYXllcl9hX3RpbWVfaW50ZXJsZWF2ZTsKLSNkZWZpbmUgSVNEQl9UX0xBX1RJXzAgIDAKLSNkZWZpbmUgSVNEQl9UX0xBX1RJXzEgIDEKLSNkZWZpbmUgSVNEQl9UX0xBX1RJXzIgIDIKLSNkZWZpbmUgSVNEQl9UX0xBX1RJXzQgIDQKLSNkZWZpbmUgSVNEQl9UX0xBX1RJXzggIDgKLSNkZWZpbmUgSVNEQl9UX0xBX1RJXzE2IDE2Ci0jZGVmaW5lIElTREJfVF9MQV9USV8zMiAzMgotCXU4IGxheWVyX2FfbnNlZzsKLQotCXU4IGxheWVyX2JfbW9kZTsKLSNkZWZpbmUgSVNEQl9UX0xCX01PREVfMSAwCi0jZGVmaW5lIElTREJfVF9MQl9NT0RFXzIgMQotI2RlZmluZSBJU0RCX1RfTEJfTU9ERV8zIDIKLQl1OCBsYXllcl9iX2NhcnJpZXJfbW9kdWxhdGlvbjsKLSNkZWZpbmUgSVNEQl9UX0xCX0NNX0RRUFNLIDAKLSNkZWZpbmUgSVNEQl9UX0xCX0NNX1FQU0sgIDEKLSNkZWZpbmUgSVNEQl9UX0xCX0NNXzE2UUFNIDIKLSNkZWZpbmUgSVNEQl9UX0xCX0NNXzY0UUFNIDMKLSNkZWZpbmUgSVNEQl9UX0xCX0NNX05PTEFZRVIgNAotCXU4IGxheWVyX2JfY29kZV9yYXRlOwotI2RlZmluZSBJU0RCX1RfTEJfQ1JfMV8yICAgMAotI2RlZmluZSBJU0RCX1RfTEJfQ1JfMl8zICAgMQotI2RlZmluZSBJU0RCX1RfTEJfQ1JfM180ICAgMgotI2RlZmluZSBJU0RCX1RfTEJfQ1JfNV82ICAgNAotI2RlZmluZSBJU0RCX1RfTEJfQ1JfN184ICAgOAotI2RlZmluZSBJU0RCX1RfTEJfQ1JfTk9MQVlFUiAgIDE2Ci0JdTggbGF5ZXJfYl90aW1lX2ludGVybGVhdmU7Ci0jZGVmaW5lIElTREJfVF9MQl9USV8wICAwCi0jZGVmaW5lIElTREJfVF9MQl9USV8xICAxCi0jZGVmaW5lIElTREJfVF9MQl9USV8yICAyCi0jZGVmaW5lIElTREJfVF9MQl9USV80ICA0Ci0jZGVmaW5lIElTREJfVF9MQl9USV84ICA4Ci0jZGVmaW5lIElTREJfVF9MQl9USV8xNiAxNgotI2RlZmluZSBJU0RCX1RfTEJfVElfMzIgMzIKLQl1OCBsYXllcl9iX25zZWc7Ci0KLQl1OCBsYXllcl9jX21vZGU7Ci0jZGVmaW5lIElTREJfVF9MQ19NT0RFXzEgMAotI2RlZmluZSBJU0RCX1RfTENfTU9ERV8yIDEKLSNkZWZpbmUgSVNEQl9UX0xDX01PREVfMyAyCi0JdTggbGF5ZXJfY19jYXJyaWVyX21vZHVsYXRpb247Ci0jZGVmaW5lIElTREJfVF9MQ19DTV9EUVBTSyAwCi0jZGVmaW5lIElTREJfVF9MQ19DTV9RUFNLICAxCi0jZGVmaW5lIElTREJfVF9MQ19DTV8xNlFBTSAyCi0jZGVmaW5lIElTREJfVF9MQ19DTV82NFFBTSAzCi0jZGVmaW5lIElTREJfVF9MQ19DTV9OT0xBWUVSIDQKLQl1OCBsYXllcl9jX2NvZGVfcmF0ZTsKLSNkZWZpbmUgSVNEQl9UX0xDX0NSXzFfMiAgIDAKLSNkZWZpbmUgSVNEQl9UX0xDX0NSXzJfMyAgIDEKLSNkZWZpbmUgSVNEQl9UX0xDX0NSXzNfNCAgIDIKLSNkZWZpbmUgSVNEQl9UX0xDX0NSXzVfNiAgIDQKLSNkZWZpbmUgSVNEQl9UX0xDX0NSXzdfOCAgIDgKLSNkZWZpbmUgSVNEQl9UX0xDX0NSX05PTEFZRVIgICAxNgotCXU4IGxheWVyX2NfdGltZV9pbnRlcmxlYXZlOwotI2RlZmluZSBJU0RCX1RfTENfVElfMCAgMAotI2RlZmluZSBJU0RCX1RfTENfVElfMSAgMQotI2RlZmluZSBJU0RCX1RfTENfVElfMiAgMgotI2RlZmluZSBJU0RCX1RfTENfVElfNCAgNAotI2RlZmluZSBJU0RCX1RfTENfVElfOCAgOAotI2RlZmluZSBJU0RCX1RfTENfVElfMTYgMTYKLSNkZWZpbmUgSVNEQl9UX0xDX1RJXzMyIDMyCi0JdTggbGF5ZXJfY19uc2VnOwotfTsKLQotaW50IHM5MjFfaXNkYl9jbWQoc3RydWN0IHM5MjFfaXNkYl90ICpkZXYsIHUzMiBjbWQsIHZvaWQgKmRhdGEpOwotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvczkyMV9tb2R1bGUuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zOTIxX21vZHVsZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZWVmZmY2Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zOTIxX21vZHVsZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTkyICswLDAgQEAKLS8qCi0gKiBEcml2ZXIgZm9yIFNoYXJwIHM5MjEgZHJpdmVyCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBSZWNoYmVyZ2VyIDxtcmVjaGJlcmdlckBzdW5kdGVrLmRlPgotICoKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlICJkdmJfZnJvbnRlbmQuaCIKLSNpbmNsdWRlICJzOTIxX21vZHVsZS5oIgotI2luY2x1ZGUgInM5MjFfY29yZS5oIgotCi1zdGF0aWMgIHVuc2lnbmVkIGludCBkZWJ1ZyA9IDA7Ci1tb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCJzOTIxIGRlYnVnZ2luZyAoZGVmYXVsdCBvZmYpIik7Ci0KLSNkZWZpbmUgZHByaW50ayhmbXQsIGFyZ3MuLi4pIGlmIChkZWJ1ZykgZG8ge1wKLQkJCXByaW50aygiczkyMSBkZWJ1ZzogIiBmbXQsICMjYXJncyk7IH0gd2hpbGUgKDApCi0KLXN0cnVjdCBzOTIxX3N0YXRlCi17Ci0Jc3RydWN0IGR2Yl9mcm9udGVuZCBmcm9udGVuZDsKLQlmZV9tb2R1bGF0aW9uX3QgY3VycmVudF9tb2R1bGF0aW9uOwotCV9fdTMyIHNucjsKLQlfX3UzMiBjdXJyZW50X2ZyZXF1ZW5jeTsKLQlfX3U4IGFkZHI7Ci0Jc3RydWN0IHM5MjFfaXNkYl90IGRldjsKLQlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYzsKLX07Ci0KLXN0YXRpYyBpbnQgczkyMV9zZXRfcGFyYW1ldGVycyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwYXJhbSkgewotCXN0cnVjdCBzOTIxX3N0YXRlICpzdGF0ZSA9IChzdHJ1Y3QgczkyMV9zdGF0ZSAqKWZlLT5kZW1vZHVsYXRvcl9wcml2OwotCXN0cnVjdCBzOTIxX2lzZGJfdF90cmFuc21pc3Npb25fbW9kZV9wYXJhbXMgcGFyYW1zOwotCXN0cnVjdCBzOTIxX2lzZGJfdF90dW5lX3BhcmFtcyB0dW5lX3BhcmFtczsKLQotCXR1bmVfcGFyYW1zLmZyZXF1ZW5jeSA9IHBhcmFtLT5mcmVxdWVuY3k7Ci0JczkyMV9pc2RiX2NtZCgmc3RhdGUtPmRldiwgSVNEQl9UX0NNRF9TRVRfUEFSQU0sICZwYXJhbXMpOwotCXM5MjFfaXNkYl9jbWQoJnN0YXRlLT5kZXYsIElTREJfVF9DTURfVFVORSwgJnR1bmVfcGFyYW1zKTsKLQltZGVsYXkoMTAwKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzOTIxX2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpIHsKLQlwcmludGsoInM5MjEgaW5pdFxuIik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgczkyMV9zbGVlcChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkgewotCXByaW50aygiczkyMSBzbGVlcFxuIik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgczkyMV9yZWFkX3N0YXR1cyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgZmVfc3RhdHVzX3QgKnN0YXR1cykKLXsKLQlzdHJ1Y3QgczkyMV9zdGF0ZSAqc3RhdGUgPSAoc3RydWN0IHM5MjFfc3RhdGUgKilmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKLQl1bnNpZ25lZCBpbnQgcmV0OwotCW1kZWxheSg1KTsKLQlzOTIxX2lzZGJfY21kKCZzdGF0ZS0+ZGV2LCBJU0RCX1RfQ01EX0dFVF9TVEFUVVMsICZyZXQpOwotCSpzdGF0dXMgPSAwOwotCi0JcHJpbnRrKCJzdGF0dXM6ICUwMnhcbiIsIHJldCk7Ci0JaWYgKHJldCA9PSAxKSB7Ci0JCSpzdGF0dXMgfD0gRkVfSEFTX0NBUlJJRVI7Ci0JCSpzdGF0dXMgfD0gRkVfSEFTX1ZJVEVSQkk7Ci0JCSpzdGF0dXMgfD0gRkVfSEFTX0xPQ0s7Ci0JCSpzdGF0dXMgfD0gRkVfSEFTX1NZTkM7Ci0JCSpzdGF0dXMgfD0gRkVfSEFTX1NJR05BTDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzOTIxX3JlYWRfYmVyKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBfX3UzMiAqYmVyKQotewotCWRwcmludGsoInJlYWQgYmVyXG4iKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzOTIxX3JlYWRfc25yKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBfX3UxNiAqc25yKQotewotCWRwcmludGsoInJlYWQgc25yXG4iKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzOTIxX3JlYWRfdWNibG9ja3Moc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIF9fdTMyICp1Y2Jsb2NrcykKLXsKLQlkcHJpbnRrKCJyZWFkIHVjYmxvY2tzXG4iKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgczkyMV9yZWxlYXNlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQotewotCXN0cnVjdCBzOTIxX3N0YXRlICpzdGF0ZSA9IChzdHJ1Y3QgczkyMV9zdGF0ZSAqKWZlLT5kZW1vZHVsYXRvcl9wcml2OwotCWtmcmVlKHN0YXRlKTsKLX0KLQotc3RhdGljIHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzIGRlbW9kX3M5MjE9ewotCS5pbmZvID0gewotCQkubmFtZQkJCT0gIlNIQVJQIFM5MjEiLAotCQkudHlwZQkJCT0gRkVfT0ZETSwKLQkJLmZyZXF1ZW5jeV9taW4JCT0gNDczMTQzMDAwLAotCQkuZnJlcXVlbmN5X21heAkJPSA3NjcxNDMwMDAsCi0JCS5mcmVxdWVuY3lfc3RlcHNpemUJPSAgIDYwMDAwMDAsCi0JCS5mcmVxdWVuY3lfdG9sZXJhbmNlCT0gMCwKLQkJLmNhcHMgPSBGRV9DQU5fRkVDXzFfMiB8IEZFX0NBTl9GRUNfMl8zIHwKLQkJCUZFX0NBTl9GRUNfM180IHwgRkVfQ0FOX0ZFQ181XzYgfCBGRV9DQU5fRkVDXzdfOCB8Ci0JCQlGRV9DQU5fRkVDX0FVVE8gfAotCQkJRkVfQ0FOX1FQU0sgfCBGRV9DQU5fUUFNXzE2IHwgRkVfQ0FOX1FBTV82NCB8IEZFX0NBTl9RQU1fQVVUTyB8Ci0JCQlGRV9DQU5fVFJBTlNNSVNTSU9OX01PREVfQVVUTyB8IEZFX0NBTl9HVUFSRF9JTlRFUlZBTF9BVVRPIHwKLQkJCUZFX0NBTl9ISUVSQVJDSFlfQVVUTyB8IEZFX0NBTl9SRUNPVkVSIHwKLQkJCUZFX0NBTl9NVVRFX1RTCi0JfSwKLQkuaW5pdCA9IHM5MjFfaW5pdCwKLQkuc2xlZXAgPSBzOTIxX3NsZWVwLAotCS5zZXRfZnJvbnRlbmQgPSBzOTIxX3NldF9wYXJhbWV0ZXJzLAotCS5yZWFkX3NuciA9IHM5MjFfcmVhZF9zbnIsCi0JLnJlYWRfYmVyID0gczkyMV9yZWFkX2JlciwKLQkucmVhZF9zdGF0dXMgPSBzOTIxX3JlYWRfc3RhdHVzLAotCS5yZWFkX3VjYmxvY2tzID0gczkyMV9yZWFkX3VjYmxvY2tzLAotCS5yZWxlYXNlID0gczkyMV9yZWxlYXNlLAotfTsKLQotc3RhdGljIGludCBzOTIxX3dyaXRlKHZvaWQgKmRldiwgdTggcmVnLCB1OCB2YWwpIHsKLQlzdHJ1Y3QgczkyMV9zdGF0ZSAqc3RhdGUgPSBkZXY7Ci0JY2hhciBidWZbMl09e3JlZyx2YWx9OwotCWludCBlcnI7Ci0Jc3RydWN0IGkyY19tc2cgaTJjbXNncyA9IHsKLQkJLmFkZHIgPSBzdGF0ZS0+YWRkciwKLQkJLmZsYWdzID0gMCwKLQkJLmxlbiA9IDIsCi0JCS5idWYgPSBidWYKLQl9OwotCi0JaWYoKGVyciA9IGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjLCAmaTJjbXNncywgMSkpPDApIHsKLQkJcHJpbnRrKCIlcyBpMmNfdHJhbnNmZXIgZXJyb3IgJWRcbiIsIF9fZnVuY19fLCBlcnIpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0JCWVsc2UKLQkJCXJldHVybiAtRVJFTU9URUlPOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHM5MjFfcmVhZCh2b2lkICpkZXYsIHU4IHJlZykgewotCXN0cnVjdCBzOTIxX3N0YXRlICpzdGF0ZSA9IGRldjsKLQl1OCBiMTsKLQlpbnQgcmV0OwotCXN0cnVjdCBpMmNfbXNnIG1zZ1syXSA9IHsgeyAuYWRkciA9IHN0YXRlLT5hZGRyLAotCQkJCSAgICAuZmxhZ3MgPSAwLAotCQkJCSAgICAuYnVmID0gJnJlZywgLmxlbiA9IDEgfSwKLQkJCQkgIHsgLmFkZHIgPSBzdGF0ZS0+YWRkciwKLQkJCQkgICAgLmZsYWdzID0gSTJDX01fUkQsCi0JCQkJICAgIC5idWYgPSAmYjEsIC5sZW4gPSAxIH0gfTsKLQotCXJldCA9IGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjLCBtc2csIDIpOwotCWlmIChyZXQgIT0gMikKLQkJcmV0dXJuIHJldDsKLQlyZXR1cm4gYjE7Ci19Ci0KLXN0cnVjdCBkdmJfZnJvbnRlbmQqIHM5MjFfYXR0YWNoKGNvbnN0IHN0cnVjdCBzOTIxX2NvbmZpZyAqY29uZmlnLAotCQkJCQkgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYykKLXsKLQotCXN0cnVjdCBzOTIxX3N0YXRlICpzdGF0ZTsKLQlzdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzOTIxX3N0YXRlKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHN0YXRlID09IE5VTEwpCi0JCXJldHVybiBOVUxMOwotCi0Jc3RhdGUtPmFkZHIgPSBjb25maWctPmkyY19hZGRyZXNzOwotCXN0YXRlLT5pMmMgPSBpMmM7Ci0Jc3RhdGUtPmRldi5pMmNfd3JpdGUgPSAmczkyMV93cml0ZTsKLQlzdGF0ZS0+ZGV2LmkyY19yZWFkID0gJnM5MjFfcmVhZDsKLQlzdGF0ZS0+ZGV2LnByaXZfZGV2ID0gc3RhdGU7Ci0KLQlzOTIxX2lzZGJfY21kKCZzdGF0ZS0+ZGV2LCBJU0RCX1RfQ01EX0lOSVQsIE5VTEwpOwotCi0JbWVtY3B5KCZzdGF0ZS0+ZnJvbnRlbmQub3BzLCAmZGVtb2RfczkyMSwgc2l6ZW9mKHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzKSk7Ci0Jc3RhdGUtPmZyb250ZW5kLmRlbW9kdWxhdG9yX3ByaXYgPSBzdGF0ZTsKLQlyZXR1cm4gJnN0YXRlLT5mcm9udGVuZDsKLX0KLQotRVhQT1JUX1NZTUJPTF9HUEwoczkyMV9hdHRhY2gpOwotTU9EVUxFX0FVVEhPUigiTWFya3VzIFJlY2hiZXJnZXIgPG1yZWNoYmVyZ2VyQGVtcGlhdGVjaC5jb20+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIlNoYXJwIFM5MjEgSVNEQi1UIDFTZWciKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zOTIxX21vZHVsZS5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3M5MjFfbW9kdWxlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4NjYwNDIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3M5MjFfbW9kdWxlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0vKgotICogIERyaXZlciBmb3IgRFZCLVQgczkyMSBkZW1vZHVsYXRvcgotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDggTWFya3VzIFJlY2hiZXJnZXIgPG1yZWNoYmVyZ2VyQHN1bmR0ZWsuZGU+Ci0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICoKLSAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuPQotICovCi0KLSNpZm5kZWYgUzkyMV9NT0RVTEVfSAotI2RlZmluZSBTOTIxX01PRFVMRV9ICi0KLSNpbmNsdWRlIDxsaW51eC9kdmIvZnJvbnRlbmQuaD4KLSNpbmNsdWRlICJzOTIxX2NvcmUuaCIKLQotaW50IHM5MjFfaXNkYl9pbml0KHN0cnVjdCBzOTIxX2lzZGJfdCAqZGV2KTsKLWludCBzOTIxX2lzZGJfY21kKHN0cnVjdCBzOTIxX2lzZGJfdCAqZGV2LCB1MzIgY21kLCB2b2lkICpkYXRhKTsKLQotc3RydWN0IHM5MjFfY29uZmlnCi17Ci0JLyogZGVtb2R1bGF0b3IncyBJMkMgYWRkcmVzcyAqLwotCXU4IGkyY19hZGRyZXNzOwotfTsKLQotI2lmIGRlZmluZWQoQ09ORklHX0RWQl9TOTIxKSB8fCAoZGVmaW5lZChDT05GSUdfRFZCX1M5MjFfTU9EVUxFKSAmJiBkZWZpbmVkKE1PRFVMRSkpCi1leHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCogczkyMV9hdHRhY2goY29uc3Qgc3RydWN0IHM5MjFfY29uZmlnICpjb25maWcsCi0JCQkJCSAgIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKTsKLSNlbHNlCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBkdmJfZnJvbnRlbmQqIHM5MjFfYXR0YWNoKGNvbnN0IHN0cnVjdCBzOTIxX2NvbmZpZyAqY29uZmlnLAotCQkJCQkgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYykKLXsKLQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fZnVuY19fKTsKLQlyZXR1cm4gTlVMTDsKLX0KLSNlbmRpZiAvKiBDT05GSUdfRFZCX1M5MjEgKi8KLQotI2VuZGlmIC8qIFM5MjFfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0YjA4OTlfZHJ2LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3RiMDg5OV9kcnYuYwppbmRleCA4ZTM4ZmNlLi4zN2EyMjJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3RiMDg5OV9kcnYuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3RiMDg5OV9kcnYuYwpAQCAtNzE0LDcgKzcxNCw3IEBACiAJcmVnID0gc3RiMDg5OV9yZWFkX3JlZyhzdGF0ZSwgU1RCMDg5OV9ESVNDTlRSTDEpOwogCVNUQjA4OTlfU0VURklFTERfVkFMKERJU1BSRUNIQVJHRSwgcmVnLCAwKTsKIAlzdGIwODk5X3dyaXRlX3JlZyhzdGF0ZSwgU1RCMDg5OV9ESVNDTlRSTDEsIHJlZyk7Ci0KKwltc2xlZXAoMTAwKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0YjYxMDAuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdGI2MTAwLmMKaW5kZXggODBhOWU0Yy4uNjQ2NzNiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0YjYxMDAuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3RiNjEwMC5jCkBAIC01MSw3ICs1MSw3IEBACiAJCWlmICh4ID4geSkJCQkJCQkJCVwKIAkJCXByaW50ayhmb3JtYXQsICMjYXJnKTsJCQkJCQlcCiAJfQkJCQkJCQkJCQlcCi19IHdoaWxlKDApCit9IHdoaWxlICgwKQogCiBzdHJ1Y3Qgc3RiNjEwMF9sa3VwIHsKIAl1MzIgdmFsX2xvdzsKQEAgLTExNyw3ICsxMTcsMTAgQEAKIAlbU1RCNjEwMF9URVNUM10JCT0geyAweDAwLCAweGRlIH0sCiB9OwogCi1zdGF0aWMgdm9pZCBzdGI2MTAwX25vcm1hbGlzZV9yZWdzKHU4IHJlZ3NbXSkKKy8qCisgKiBDdXJyZW50bHkgdW51c2VkLiBTb21lIGJvYXJkcyBtaWdodCBuZWVkIGl0IGluIHRoZSBmdXR1cmUKKyAqLworc3RhdGljIGlubGluZSB2b2lkIHN0YjYxMDBfbm9ybWFsaXNlX3JlZ3ModTggcmVnc1tdKQogewogCWludCBpOwogCkBAIC0xNTcsMTMgKzE2MCwyNSBAQAogCXU4IHJlZ3NbU1RCNjEwMF9OVU1SRUdTXTsKIAlpbnQgcmM7CiAKKwlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7CisJCS5hZGRyCT0gc3RhdGUtPmNvbmZpZy0+dHVuZXJfYWRkcmVzcyArIHJlZywKKwkJLmZsYWdzCT0gSTJDX01fUkQsCisJCS5idWYJPSByZWdzLAorCQkubGVuCT0gMQorCX07CisKKwlyYyA9IGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjLCAmbXNnLCAxKTsKKwogCWlmICh1bmxpa2VseShyZWcgPj0gU1RCNjEwMF9OVU1SRUdTKSkgewogCQlkcHJpbnRrKHZlcmJvc2UsIEZFX0VSUk9SLCAxLCAiSW52YWxpZCByZWdpc3RlciBvZmZzZXQgMHgleCIsIHJlZyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQlpZiAoKHJjID0gc3RiNjEwMF9yZWFkX3JlZ3Moc3RhdGUsIHJlZ3MpKSA8IDApCi0JCXJldHVybiByYzsKLQlyZXR1cm4gKHVuc2lnbmVkIGludClyZWdzW3JlZ107CisJaWYgKHVubGlrZWx5KHZlcmJvc2UgPiBGRV9ERUJVRykpIHsKKwkJZHByaW50ayh2ZXJib3NlLCBGRV9ERUJVRywgMSwgIiAgICBSZWFkIGZyb20gMHglMDJ4Iiwgc3RhdGUtPmNvbmZpZy0+dHVuZXJfYWRkcmVzcyk7CisJCWRwcmludGsodmVyYm9zZSwgRkVfREVCVUcsIDEsICIgICAgICAgICVzOiAweCUwMngiLCBzdGI2MTAwX3JlZ25hbWVzW3JlZ10sIHJlZ3NbMF0pOworCX0KKworCXJldHVybiAodW5zaWduZWQgaW50KXJlZ3NbMF07CiB9CiAKIHN0YXRpYyBpbnQgc3RiNjEwMF93cml0ZV9yZWdfcmFuZ2Uoc3RydWN0IHN0YjYxMDBfc3RhdGUgKnN0YXRlLCB1OCBidWZbXSwgaW50IHN0YXJ0LCBpbnQgbGVuKQpAQCAtMjExLDIwICsyMjYsMTcgQEAKIAlyZXR1cm4gc3RiNjEwMF93cml0ZV9yZWdfcmFuZ2Uoc3RhdGUsICZkYXRhLCByZWcsIDEpOwogfQogCi1zdGF0aWMgaW50IHN0YjYxMDBfd3JpdGVfcmVncyhzdHJ1Y3Qgc3RiNjEwMF9zdGF0ZSAqc3RhdGUsIHU4IHJlZ3NbXSkKLXsKLQlzdGI2MTAwX25vcm1hbGlzZV9yZWdzKHJlZ3MpOwotCXJldHVybiBzdGI2MTAwX3dyaXRlX3JlZ19yYW5nZShzdGF0ZSwgJnJlZ3NbMV0sIDEsIFNUQjYxMDBfTlVNUkVHUyAtIDEpOwotfQogCiBzdGF0aWMgaW50IHN0YjYxMDBfZ2V0X3N0YXR1cyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyICpzdGF0dXMpCiB7CiAJaW50IHJjOwogCXN0cnVjdCBzdGI2MTAwX3N0YXRlICpzdGF0ZSA9IGZlLT50dW5lcl9wcml2OwogCi0JaWYgKChyYyA9IHN0YjYxMDBfcmVhZF9yZWcoc3RhdGUsIFNUQjYxMDBfTEQpKSA8IDApCisJcmMgPSBzdGI2MTAwX3JlYWRfcmVnKHN0YXRlLCBTVEI2MTAwX0xEKTsKKwlpZiAocmMgPCAwKSB7CisJCWRwcmludGsodmVyYm9zZSwgRkVfRVJST1IsIDEsICIlcyBmYWlsZWQiLCBfX2Z1bmNfXyk7CiAJCXJldHVybiByYzsKLQorCX0KIAlyZXR1cm4gKHJjICYgU1RCNjEwMF9MRF9MT0NLKSA/IFRVTkVSX1NUQVRVU19MT0NLRUQgOiAwOwogfQogCkBAIC0yMzQsNyArMjQ2LDggQEAKIAl1OCBmOwogCXN0cnVjdCBzdGI2MTAwX3N0YXRlICpzdGF0ZSA9IGZlLT50dW5lcl9wcml2OwogCi0JaWYgKChyYyA9IHN0YjYxMDBfcmVhZF9yZWcoc3RhdGUsIFNUQjYxMDBfRikpIDwgMCkKKwlyYyA9IHN0YjYxMDBfcmVhZF9yZWcoc3RhdGUsIFNUQjYxMDBfRik7CisJaWYgKHJjIDwgMCkKIAkJcmV0dXJuIHJjOwogCWYgPSByYyAmIFNUQjYxMDBfRl9GOwogCkBAIC0yNjUsMTQgKzI3OCwyMSBAQAogCS8qIFR1cm4gb24gTFBGIGJhbmR3aWR0aCBzZXR0aW5nIGNsb2NrIGNvbnRyb2wsCiAJICogc2V0IGJhbmR3aWR0aCwgd2FpdCAxMG1zLCB0dXJuIG9mZi4KIAkgKi8KLQlpZiAoKHJjID0gc3RiNjEwMF93cml0ZV9yZWcoc3RhdGUsIFNUQjYxMDBfRkNDSywgMHgwZCB8IFNUQjYxMDBfRkNDS19GQ0NLKSkgPCAwKQorCXJjID0gc3RiNjEwMF93cml0ZV9yZWcoc3RhdGUsIFNUQjYxMDBfRkNDSywgMHgwZCB8IFNUQjYxMDBfRkNDS19GQ0NLKTsKKwlpZiAocmMgPCAwKQogCQlyZXR1cm4gcmM7Ci0JaWYgKChyYyA9IHN0YjYxMDBfd3JpdGVfcmVnKHN0YXRlLCBTVEI2MTAwX0YsIDB4YzAgfCB0bXApKSA8IDApCisJcmMgPSBzdGI2MTAwX3dyaXRlX3JlZyhzdGF0ZSwgU1RCNjEwMF9GLCAweGMwIHwgdG1wKTsKKwlpZiAocmMgPCAwKQogCQlyZXR1cm4gcmM7Ci0JbXNsZWVwKDEpOwotCWlmICgocmMgPSBzdGI2MTAwX3dyaXRlX3JlZyhzdGF0ZSwgU1RCNjEwMF9GQ0NLLCAweDBkKSkgPCAwKQorCisJbXNsZWVwKDUpOyAgLyogIFRoaXMgaXMgZGFuZ2Vyb3VzIGFzIGFub3RoZXIgKHJlbGF0ZWQpIHRocmVhZCBtYXkgc3RhcnQgKi8KKworCXJjID0gc3RiNjEwMF93cml0ZV9yZWcoc3RhdGUsIFNUQjYxMDBfRkNDSywgMHgwZCk7CisJaWYgKHJjIDwgMCkKIAkJcmV0dXJuIHJjOwogCisJbXNsZWVwKDEwKTsgIC8qICBUaGlzIGlzIGRhbmdlcm91cyBhcyBhbm90aGVyIChyZWxhdGVkKSB0aHJlYWQgbWF5IHN0YXJ0ICovCisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjg0LDcgKzMwNCw4IEBACiAJc3RydWN0IHN0YjYxMDBfc3RhdGUgKnN0YXRlID0gZmUtPnR1bmVyX3ByaXY7CiAJdTggcmVnc1tTVEI2MTAwX05VTVJFR1NdOwogCi0JaWYgKChyYyA9IHN0YjYxMDBfcmVhZF9yZWdzKHN0YXRlLCByZWdzKSkgPCAwKQorCXJjID0gc3RiNjEwMF9yZWFkX3JlZ3Moc3RhdGUsIHJlZ3MpOworCWlmIChyYyA8IDApCiAJCXJldHVybiByYzsKIAogCW9kaXYgPSAocmVnc1tTVEI2MTAwX1ZDT10gJiBTVEI2MTAwX1ZDT19PRElWKSA+PiBTVEI2MTAwX1ZDT19PRElWX1NISUZUOwpAQCAtMzEyLDggKzMzMyw3IEBACiAJdTggcmVnc1tTVEI2MTAwX05VTVJFR1NdOwogCXU4IGcsIHBzZDIsIG9kaXY7CiAKLQlpZiAoKHJjID0gc3RiNjEwMF9yZWFkX3JlZ3Moc3RhdGUsIHJlZ3MpKSA8IDApCi0JCXJldHVybiByYzsKKwlkcHJpbnRrKHZlcmJvc2UsIEZFX0RFQlVHLCAxLCAiVmVyc2lvbiAyMDEwLTgtMTQgMTM6NTEiKTsKIAogCWlmIChmZS0+b3BzLmdldF9mcm9udGVuZCkgewogCQlkcHJpbnRrKHZlcmJvc2UsIEZFX0RFQlVHLCAxLCAiR2V0IGZyb250ZW5kIHBhcmFtZXRlcnMiKTsKQEAgLTMyMSw5NiArMzQxLDE0MCBAQAogCX0KIAlzcmF0ZSA9IHAudS5xcHNrLnN5bWJvbF9yYXRlOwogCi0JcmVnc1tTVEI2MTAwX0RMQl0gPSAweGRjOwotCS8qIERpc2FibGUgTFBFTiAqLwotCXJlZ3NbU1RCNjEwMF9MUEVOXSAmPSB+U1RCNjEwMF9MUEVOX0xQRU47IC8qIFBMTCBMb29wIGRpc2FibGVkICovCisJLyogU2V0IHVwIHR1bmVyIGNsZWFubHksIExQRiBjYWxpYnJhdGlvbiBvbiAqLworCXJjID0gc3RiNjEwMF93cml0ZV9yZWcoc3RhdGUsIFNUQjYxMDBfRkNDSywgMHg0ZCB8IFNUQjYxMDBfRkNDS19GQ0NLKTsKKwlpZiAocmMgPCAwKQorCQlyZXR1cm4gcmM7ICAvKiBhbGxvdyBMUEYgY2FsaWJyYXRpb24gKi8KIAotCWlmICgocmMgPSBzdGI2MTAwX3dyaXRlX3JlZ3Moc3RhdGUsIHJlZ3MpKSA8IDApCisJLyogUExMIExvb3AgZGlzYWJsZWQsIGJpYXMgb24sIFZDTyBvbiwgc3ludGggb24gKi8KKwlyZWdzW1NUQjYxMDBfTFBFTl0gPSAweGViOworCXJjID0gc3RiNjEwMF93cml0ZV9yZWcoc3RhdGUsIFNUQjYxMDBfTFBFTiwgcmVnc1tTVEI2MTAwX0xQRU5dKTsKKwlpZiAocmMgPCAwKQogCQlyZXR1cm4gcmM7CiAKLQkvKiBCYXNlYmFuZCBnYWluLgkqLwotCWlmIChzcmF0ZSA+PSAxNTAwMDAwMCkKLQkJZyA9IDk7ICAvLyAgKzQgZEIKLQllbHNlIGlmIChzcmF0ZSA+PSA1MDAwMDAwKQotCQlnID0gMTE7IC8vICArOCBkQgotCWVsc2UKLQkJZyA9IDE0OyAvLyArMTQgZEIKLQotCXJlZ3NbU1RCNjEwMF9HXSA9IChyZWdzW1NUQjYxMDBfR10gJiB+U1RCNjEwMF9HX0cpIHwgZzsKLQlyZWdzW1NUQjYxMDBfR10gJj0gflNUQjYxMDBfR19HQ1Q7IC8qIG1hc2sgR0NUICovCi0JcmVnc1tTVEI2MTAwX0ddIHw9ICgxIDw8IDUpOyAvKiAyVnAtcCBNb2RlICovCisJLyogUHJvZ3JhbSB0aGUgcmVnaXN0ZXJzIHdpdGggdGhlaXIgZGF0YSB2YWx1ZXMgKi8KIAogCS8qIFZDTyBkaXZpZGUgcmF0aW8gKExPIGRpdmlkZSByYXRpbywgVkNPIHByZXNjYWxlciBlbmFibGUpLgkqLwogCWlmIChmcmVxdWVuY3kgPD0gMTA3NTAwMCkKIAkJb2RpdiA9IDE7CiAJZWxzZQogCQlvZGl2ID0gMDsKLQlyZWdzW1NUQjYxMDBfVkNPXSA9IChyZWdzW1NUQjYxMDBfVkNPXSAmIH5TVEI2MTAwX1ZDT19PRElWKSB8IChvZGl2IDw8IFNUQjYxMDBfVkNPX09ESVZfU0hJRlQpOwogCi0JaWYgKChmcmVxdWVuY3kgPiAxMDc1MDAwKSAmJiAoZnJlcXVlbmN5IDw9IDEzMjUwMDApKQotCQlwc2QyID0gMDsKLQllbHNlCi0JCXBzZDIgPSAxOwotCXJlZ3NbU1RCNjEwMF9LXSA9IChyZWdzW1NUQjYxMDBfS10gJiB+U1RCNjEwMF9LX1BTRDIpIHwgKHBzZDIgPDwgU1RCNjEwMF9LX1BTRDJfU0hJRlQpOworCS8qIFZDTyBlbmFibGVkLCBzZWFjaCBjbG9jayBvZmYgYXMgcGVyIExMMy43LCAzLjQuMSAqLworCXJlZ3NbU1RCNjEwMF9WQ09dID0gMHhlMCB8IChvZGl2IDw8IFNUQjYxMDBfVkNPX09ESVZfU0hJRlQpOwogCiAJLyogT1NNCSovCiAJZm9yIChwdHIgPSBsa3VwOwogCSAgICAgKHB0ci0+dmFsX2hpZ2ggIT0gMCkgJiYgIUNIS1JBTkdFKGZyZXF1ZW5jeSwgcHRyLT52YWxfbG93LCBwdHItPnZhbF9oaWdoKTsKIAkgICAgIHB0cisrKTsKKwogCWlmIChwdHItPnZhbF9oaWdoID09IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogZnJlcXVlbmN5IG91dCBvZiByYW5nZTogJXUga0h6XG4iLCBfX2Z1bmNfXywgZnJlcXVlbmN5KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCXJlZ3NbU1RCNjEwMF9WQ09dID0gKHJlZ3NbU1RCNjEwMF9WQ09dICYgflNUQjYxMDBfVkNPX09TTSkgfCBwdHItPnJlZzsKKwlyYyA9IHN0YjYxMDBfd3JpdGVfcmVnKHN0YXRlLCBTVEI2MTAwX1ZDTywgcmVnc1tTVEI2MTAwX1ZDT10pOworCWlmIChyYyA8IDApCisJCXJldHVybiByYzsKIAorCWlmICgoZnJlcXVlbmN5ID4gMTA3NTAwMCkgJiYgKGZyZXF1ZW5jeSA8PSAxMzI1MDAwKSkKKwkJcHNkMiA9IDA7CisJZWxzZQorCQlwc2QyID0gMTsKIAkvKiBGKFZDTykgPSBGKExPKSAqIChPRElWID09IDAgPyAyIDogNCkJCQkqLwogCWZ2Y28gPSBmcmVxdWVuY3kgPDwgKDEgKyBvZGl2KTsKIAkvKiBOKEkpID0gZmxvb3IoZihWQ08pIC8gKGYoWFRBTCkgKiAoUFNEMiA/IDIgOiAxKSkpCSovCiAJbmludCA9IGZ2Y28gLyAoc3RhdGUtPnJlZmVyZW5jZSA8PCBwc2QyKTsKIAkvKiBOKEYpID0gcm91bmQoZihWQ08pIC8gZihYVEFMKSAqIChQU0QyID8gMiA6IDEpIC0gTihJKSkgKiAyIF4gOQkqLwogCW5mcmFjID0gRElWX1JPVU5EX0NMT1NFU1QoKGZ2Y28gLSAobmludCAqIHN0YXRlLT5yZWZlcmVuY2UgPDwgcHNkMikpCi0JCQkJCSA8PCAoOSAtIHBzZDIpLAotCQkJCSAgc3RhdGUtPnJlZmVyZW5jZSk7CisJCQkJCSA8PCAoOSAtIHBzZDIpLCBzdGF0ZS0+cmVmZXJlbmNlKTsKKworCS8qIE5JICovCisJcmVnc1tTVEI2MTAwX05JXSA9IG5pbnQ7CisJcmMgPSBzdGI2MTAwX3dyaXRlX3JlZyhzdGF0ZSwgU1RCNjEwMF9OSSwgcmVnc1tTVEI2MTAwX05JXSk7CisJaWYgKHJjIDwgMCkKKwkJcmV0dXJuIHJjOworCisJLyogTkYgKi8KKwlyZWdzW1NUQjYxMDBfTkZfTFNCXSA9IG5mcmFjOworCXJjID0gc3RiNjEwMF93cml0ZV9yZWcoc3RhdGUsIFNUQjYxMDBfTkZfTFNCLCByZWdzW1NUQjYxMDBfTkZfTFNCXSk7CisJaWYgKHJjIDwgMCkKKwkJcmV0dXJuIHJjOworCisJLyogSyAqLworCXJlZ3NbU1RCNjEwMF9LXSA9ICgweDM4ICYgflNUQjYxMDBfS19QU0QyKSB8IChwc2QyIDw8IFNUQjYxMDBfS19QU0QyX1NISUZUKTsKKwlyZWdzW1NUQjYxMDBfS10gPSAocmVnc1tTVEI2MTAwX0tdICYgflNUQjYxMDBfS19ORl9NU0IpIHwgKChuZnJhYyA+PiA4KSAmIFNUQjYxMDBfS19ORl9NU0IpOworCXJjID0gc3RiNjEwMF93cml0ZV9yZWcoc3RhdGUsIFNUQjYxMDBfSywgcmVnc1tTVEI2MTAwX0tdKTsKKwlpZiAocmMgPCAwKQorCQlyZXR1cm4gcmM7CisKKwkvKiBHIEJhc2ViYW5kIGdhaW4uICovCisJaWYgKHNyYXRlID49IDE1MDAwMDAwKQorCQlnID0gOTsgIC8qICArNCBkQiAqLworCWVsc2UgaWYgKHNyYXRlID49IDUwMDAwMDApCisJCWcgPSAxMTsgLyogICs4IGRCICovCisJZWxzZQorCQlnID0gMTQ7IC8qICsxNCBkQiAqLworCisJcmVnc1tTVEI2MTAwX0ddID0gKDB4MTAgJiB+U1RCNjEwMF9HX0cpIHwgZzsKKwlyZWdzW1NUQjYxMDBfR10gJj0gflNUQjYxMDBfR19HQ1Q7IC8qIG1hc2sgR0NUICovCisJcmVnc1tTVEI2MTAwX0ddIHw9ICgxIDw8IDUpOyAvKiAyVnAtcCBNb2RlICovCisJcmMgPSBzdGI2MTAwX3dyaXRlX3JlZyhzdGF0ZSwgU1RCNjEwMF9HLCByZWdzW1NUQjYxMDBfR10pOworCWlmIChyYyA8IDApCisJCXJldHVybiByYzsKKworCS8qIEYgd2UgZG9uJ3Qgd3JpdGUgYXMgaXQgaXMgc2V0IHVwIGluIEJXIHNldCAqLworCisJLyogRExCIHNldCBEQyBzZXJ2byBsb29wIEJXIHRvIDE2MEh6IChMTEEgMy44IC8gMi4xKSAqLworCXJlZ3NbU1RCNjEwMF9ETEJdID0gMHhjYzsKKwlyYyA9IHN0YjYxMDBfd3JpdGVfcmVnKHN0YXRlLCBTVEI2MTAwX0RMQiwgcmVnc1tTVEI2MTAwX0RMQl0pOworCWlmIChyYyA8IDApCisJCXJldHVybiByYzsKKwogCWRwcmludGsodmVyYm9zZSwgRkVfREVCVUcsIDEsCiAJCSJmcmVxdWVuY3kgPSAldSwgc3JhdGUgPSAldSwgZyA9ICV1LCBvZGl2ID0gJXUsIHBzZDIgPSAldSwgZnh0YWwgPSAldSwgb3NtID0gJXUsIGZ2Y28gPSAldSwgTihJKSA9ICV1LCBOKEYpID0gJXUiLAogCQlmcmVxdWVuY3ksIHNyYXRlLCAodW5zaWduZWQgaW50KWcsICh1bnNpZ25lZCBpbnQpb2RpdiwKIAkJKHVuc2lnbmVkIGludClwc2QyLCBzdGF0ZS0+cmVmZXJlbmNlLAogCQlwdHItPnJlZywgZnZjbywgbmludCwgbmZyYWMpOwotCXJlZ3NbU1RCNjEwMF9OSV0gPSBuaW50OwotCXJlZ3NbU1RCNjEwMF9ORl9MU0JdID0gbmZyYWM7Ci0JcmVnc1tTVEI2MTAwX0tdID0gKHJlZ3NbU1RCNjEwMF9LXSAmIH5TVEI2MTAwX0tfTkZfTVNCKSB8ICgobmZyYWMgPj4gOCkgJiBTVEI2MTAwX0tfTkZfTVNCKTsKLQlyZWdzW1NUQjYxMDBfVkNPXSB8PSBTVEI2MTAwX1ZDT19PU0NIOwkJLyogVkNPIHNlYXJjaCBlbmFibGVkCQkqLwotCXJlZ3NbU1RCNjEwMF9WQ09dIHw9IFNUQjYxMDBfVkNPX09DSzsJCS8qIFZDTyBzZWFyY2ggY2xvY2sgb2ZmCQkqLwotCXJlZ3NbU1RCNjEwMF9GQ0NLXSB8PSBTVEI2MTAwX0ZDQ0tfRkNDSzsJLyogTFBGIEJXIHNldHRpbmcgY2xvY2sgZW5hYmxlZAkqLwotCXJlZ3NbU1RCNjEwMF9MUEVOXSAmPSB+U1RCNjEwMF9MUEVOX0xQRU47CS8qIFBMTCBsb29wIGRpc2FibGVkCQkqLwotCS8qIFBvd2VyIHVwLiAqLwotCXJlZ3NbU1RCNjEwMF9MUEVOXSB8PSBTVEI2MTAwX0xQRU5fU1lOUAl8IFNUQjYxMDBfTFBFTl9PU0NQIHwgU1RCNjEwMF9MUEVOX0JFTjsKIAotCW1zbGVlcCgyKTsKLQlpZiAoKHJjID0gc3RiNjEwMF93cml0ZV9yZWdzKHN0YXRlLCByZWdzKSkgPCAwKQorCS8qIFNldCB1cCB0aGUgdGVzdCByZWdpc3RlcnMgKi8KKwlyZWdzW1NUQjYxMDBfVEVTVDFdID0gMHg4ZjsKKwlyYyA9IHN0YjYxMDBfd3JpdGVfcmVnKHN0YXRlLCBTVEI2MTAwX1RFU1QxLCByZWdzW1NUQjYxMDBfVEVTVDFdKTsKKwlpZiAocmMgPCAwKQorCQlyZXR1cm4gcmM7CisJcmVnc1tTVEI2MTAwX1RFU1QzXSA9IDB4ZGU7CisJcmMgPSBzdGI2MTAwX3dyaXRlX3JlZyhzdGF0ZSwgU1RCNjEwMF9URVNUMywgcmVnc1tTVEI2MTAwX1RFU1QzXSk7CisJaWYgKHJjIDwgMCkKKwkJcmV0dXJuIHJjOworCisJLyogQnJpbmcgdXAgdHVuZXIgYWNjb3JkaW5nIHRvIExMQSAzLjcgMy40LjEsIHN0ZXAgMiAqLworCXJlZ3NbU1RCNjEwMF9MUEVOXSA9IDB4ZmI7IC8qIFBMTCBMb29wIGVuYWJsZWQsIGJpYXMgb24sIFZDTyBvbiwgc3ludGggb24gKi8KKwlyYyA9IHN0YjYxMDBfd3JpdGVfcmVnKHN0YXRlLCBTVEI2MTAwX0xQRU4sIHJlZ3NbU1RCNjEwMF9MUEVOXSk7CisJaWYgKHJjIDwgMCkKIAkJcmV0dXJuIHJjOwogCiAJbXNsZWVwKDIpOwotCXJlZ3NbU1RCNjEwMF9MUEVOXSB8PSBTVEI2MTAwX0xQRU5fTFBFTjsJLyogUExMIGxvb3AgZW5hYmxlZAkJKi8KLQlpZiAoKHJjID0gc3RiNjEwMF93cml0ZV9yZWcoc3RhdGUsIFNUQjYxMDBfTFBFTiwgcmVnc1tTVEI2MTAwX0xQRU5dKSkgPCAwKQotCQlyZXR1cm4gcmM7CiAKKwkvKiBCcmluZyB1cCB0dW5lciBhY2NvcmRpbmcgdG8gTExBIDMuNyAzLjQuMSwgc3RlcCAzICovCiAJcmVnc1tTVEI2MTAwX1ZDT10gJj0gflNUQjYxMDBfVkNPX09DSzsJCS8qIFZDTyBmYXN0IHNlYXJjaAkJKi8KLQlpZiAoKHJjID0gc3RiNjEwMF93cml0ZV9yZWcoc3RhdGUsIFNUQjYxMDBfVkNPLCByZWdzW1NUQjYxMDBfVkNPXSkpIDwgMCkKKwlyYyA9IHN0YjYxMDBfd3JpdGVfcmVnKHN0YXRlLCBTVEI2MTAwX1ZDTywgcmVnc1tTVEI2MTAwX1ZDT10pOworCWlmIChyYyA8IDApCiAJCXJldHVybiByYzsKIAotCW1zbGVlcCgxMCk7CQkJCQkvKiB3YWl0IGZvciBMTyB0byBsb2NrCQkqLworCW1zbGVlcCgxMCk7ICAvKiAgVGhpcyBpcyBkYW5nZXJvdXMgYXMgYW5vdGhlciAocmVsYXRlZCkgdGhyZWFkIG1heSBzdGFydCAqLyAvKiB3YWl0IGZvciBMTyB0byBsb2NrICovCisKIAlyZWdzW1NUQjYxMDBfVkNPXSAmPSB+U1RCNjEwMF9WQ09fT1NDSDsJCS8qIHZjbyBzZWFyY2ggZGlzYWJsZWQJCSovCiAJcmVnc1tTVEI2MTAwX1ZDT10gfD0gU1RCNjEwMF9WQ09fT0NLOwkJLyogc2VhcmNoIGNsb2NrIG9mZgkJKi8KLQlpZiAoKHJjID0gc3RiNjEwMF93cml0ZV9yZWcoc3RhdGUsIFNUQjYxMDBfVkNPLCByZWdzW1NUQjYxMDBfVkNPXSkpIDwgMCkKLQkJcmV0dXJuIHJjOwotCXJlZ3NbU1RCNjEwMF9GQ0NLXSAmPSB+U1RCNjEwMF9GQ0NLX0ZDQ0s7ICAgICAgIC8qIExQRiBCVyBjbG9jayBkaXNhYmxlZAkqLwotCXN0YjYxMDBfbm9ybWFsaXNlX3JlZ3MocmVncyk7Ci0JaWYgKChyYyA9IHN0YjYxMDBfd3JpdGVfcmVnX3JhbmdlKHN0YXRlLCAmcmVnc1sxXSwgMSwgU1RCNjEwMF9OVU1SRUdTIC0gMykpIDwgMCkKKwlyYyA9IHN0YjYxMDBfd3JpdGVfcmVnKHN0YXRlLCBTVEI2MTAwX1ZDTywgcmVnc1tTVEI2MTAwX1ZDT10pOworCWlmIChyYyA8IDApCiAJCXJldHVybiByYzsKIAotCW1zbGVlcCgxMDApOworCXJjID0gc3RiNjEwMF93cml0ZV9yZWcoc3RhdGUsIFNUQjYxMDBfRkNDSywgMHgwZCk7CisJaWYgKHJjIDwgMCkKKwkJcmV0dXJuIHJjOyAgLyogU3RvcCBMUEYgY2FsaWJyYXRpb24gKi8KIAorCW1zbGVlcCgxMCk7ICAvKiAgVGhpcyBpcyBkYW5nZXJvdXMgYXMgYW5vdGhlciAocmVsYXRlZCkgdGhyZWFkIG1heSBzdGFydCAqLworCQkgICAgIC8qIHdhaXQgZm9yIHN0YWJpbGlzYXRpb24sIChzaG91bGQgbm90IGJlIG5lY2Vzc2FyeSkJCSovCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQzMyw4ICs0OTcsOCBAQAogCXN0YXRlLT5iYW5kd2lkdGgJPSBzdGF0dXMtPmJhbmR3aWR0aCAqIDEwMDA7CS8qIEh6CSovCiAJc3RhdGUtPnJlZmVyZW5jZQk9IHN0YXR1cy0+cmVmY2xvY2sgLyAxMDAwOwkvKiBrSHoJKi8KIAotCS8qIFNldCBkZWZhdWx0IGJhbmR3aWR0aC4JKi8KLQlyZXR1cm4gc3RiNjEwMF9zZXRfYmFuZHdpZHRoKGZlLCBzdGF0ZS0+YmFuZHdpZHRoKTsKKwkvKiBTZXQgZGVmYXVsdCBiYW5kd2lkdGguIE1vZGlmaWVkLCBQTiAxMy1NYXktMTAJKi8KKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBzdGI2MTAwX2dldF9zdGF0ZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTB4LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkweC5jCmluZGV4IDQyNWU3YTQuLjRlMGZjMmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTB4LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MHguYwpAQCAtMTQ4Myw4ICsxNDgzLDggQEAKIAkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIEZGRUNGRywgMHg0MSkgPCAwKQogCQkJZ290byBlcnI7CiAKLQkJaWYgKChzdGF0ZS0+c2VhcmNoX21vZGUgPT0gU1RWMDkweF9EVkJTMSkJfHwKLQkJCShzdGF0ZS0+c2VhcmNoX21vZGUgPT0gU1RWMDkweF9EU1MpCXx8CisJCWlmICgoc3RhdGUtPnNlYXJjaF9tb2RlID09IFNUVjA5MHhfU0VBUkNIX0RWQlMxKQl8fAorCQkJKHN0YXRlLT5zZWFyY2hfbW9kZSA9PSBTVFYwOTB4X1NFQVJDSF9EU1MpCXx8CiAJCQkoc3RhdGUtPnNlYXJjaF9tb2RlID09IFNUVjA5MHhfU0VBUkNIX0FVVE8pKSB7CiAKIAkJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBWSVRTQ0FMRSwgMHg4MikgPCAwKQpAQCAtMjk0MCw3ICsyOTQwLDcgQEAKIAkJU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgRVJSQ1RSTDEsIDB4NjcpOyAvKiBQRVIgKi8KIAkJYnJlYWs7CiAKLQljYXNlIFNUVjA5MHhfVU5LTk9XTjoKKwljYXNlIFNUVjA5MHhfRVJST1I6CiAJZGVmYXVsdDoKIAkJcmVnID0gU1RWMDkweF9SRUFEX0RFTU9EKHN0YXRlLCBETURDRkdNRCk7CiAJCVNUVjA5MHhfU0VURklFTERfUHgocmVnLCBEVkJTMV9FTkFCTEVfRklFTEQsIDEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvbWFudGlzL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL2R2Yi9tYW50aXMvS2NvbmZpZwppbmRleCBmZDA4MzBlLi5hMTNhNTA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9tYW50aXMvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9tYW50aXMvS2NvbmZpZwpAQCAtMSw2ICsxLDYgQEAKIGNvbmZpZyBNQU5USVNfQ09SRQogCXRyaXN0YXRlICJNYW50aXMvSG9wcGVyIFBDSSBicmlkZ2UgYmFzZWQgZGV2aWNlcyIKLQlkZXBlbmRzIG9uIFBDSSAmJiBJMkMgJiYgSU5QVVQgJiYgSVJfQ09SRQorCWRlcGVuZHMgb24gUENJICYmIEkyQyAmJiBJTlBVVCAmJiBSQ19DT1JFCiAKIAloZWxwCiAJICBTdXBwb3J0IGZvciBQQ0kgY2FyZHMgYmFzZWQgb24gdGhlIE1hbnRpcyBhbmQgSG9wcGVyIFBDaSBicmlkZ2UuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9tYW50aXMvaG9wcGVyX2NhcmRzLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9tYW50aXMvaG9wcGVyX2NhcmRzLmMKaW5kZXggMDllOWZjNy4uNzBlNzNhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvbWFudGlzL2hvcHBlcl9jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL21hbnRpcy9ob3BwZXJfY2FyZHMuYwpAQCAtMjUxLDYgKzI1MSw4IEBACiAJeyB9CiB9OwogCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgaG9wcGVyX3BjaV90YWJsZSk7CisKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBob3BwZXJfcGNpX2RyaXZlciA9IHsKIAkubmFtZQkJPSBEUklWRVJfTkFNRSwKIAkuaWRfdGFibGUJPSBob3BwZXJfcGNpX3RhYmxlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvbWFudGlzL2hvcHBlcl92cDMwMjguYyBiL2RyaXZlcnMvbWVkaWEvZHZiL21hbnRpcy9ob3BwZXJfdnAzMDI4LmMKaW5kZXggOTY2NzRjNy4uNjhhMjlmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvbWFudGlzL2hvcHBlcl92cDMwMjguYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9tYW50aXMvaG9wcGVyX3ZwMzAyOC5jCkBAIC00NywxNyArNDcsMTcgQEAKIAlzdHJ1Y3QgbWFudGlzX2h3Y29uZmlnICpjb25maWcJPSBtYW50aXMtPmh3Y29uZmlnOwogCWludCBlcnIgPSAwOwogCi0JZ3Bpb19zZXRfYml0cyhtYW50aXMsIGNvbmZpZy0+cmVzZXQsIDApOworCW1hbnRpc19ncGlvX3NldF9iaXRzKG1hbnRpcywgY29uZmlnLT5yZXNldCwgMCk7CiAJbXNsZWVwKDEwMCk7CiAJZXJyID0gbWFudGlzX2Zyb250ZW5kX3Bvd2VyKG1hbnRpcywgUE9XRVJfT04pOwogCW1zbGVlcCgxMDApOwotCWdwaW9fc2V0X2JpdHMobWFudGlzLCBjb25maWctPnJlc2V0LCAxKTsKKwltYW50aXNfZ3Bpb19zZXRfYml0cyhtYW50aXMsIGNvbmZpZy0+cmVzZXQsIDEpOwogCiAJZXJyID0gbWFudGlzX2Zyb250ZW5kX3Bvd2VyKG1hbnRpcywgUE9XRVJfT04pOwogCWlmIChlcnIgPT0gMCkgewogCQltc2xlZXAoMjUwKTsKIAkJZHByaW50ayhNQU5USVNfRVJST1IsIDEsICJQcm9iaW5nIGZvciAxMDM1MyAoRFZCLVQpIik7Ci0JCWZlID0gemwxMDM1M19hdHRhY2goJmhvcHBlcl92cDMwMjhfY29uZmlnLCBhZGFwdGVyKTsKKwkJZmUgPSBkdmJfYXR0YWNoKHpsMTAzNTNfYXR0YWNoLCAmaG9wcGVyX3ZwMzAyOF9jb25maWcsIGFkYXB0ZXIpOwogCiAJCWlmICghZmUpCiAJCQlyZXR1cm4gLTE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9tYW50aXMvbWFudGlzX2NhcmRzLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9tYW50aXMvbWFudGlzX2NhcmRzLmMKaW5kZXggY2Y0YjM5Zi4uNDBkYTIyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvbWFudGlzL21hbnRpc19jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL21hbnRpcy9tYW50aXNfY2FyZHMuYwpAQCAtMjgxLDYgKzI4MSw4IEBACiAJeyB9CiB9OwogCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgbWFudGlzX3BjaV90YWJsZSk7CisKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBtYW50aXNfcGNpX2RyaXZlciA9IHsKIAkubmFtZQkJPSBEUklWRVJfTkFNRSwKIAkuaWRfdGFibGUJPSBtYW50aXNfcGNpX3RhYmxlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvbWFudGlzL21hbnRpc19jb21tb24uaCBiL2RyaXZlcnMvbWVkaWEvZHZiL21hbnRpcy9tYW50aXNfY29tbW9uLmgKaW5kZXggZDBiNjQ1YS4uYmQ0MDBkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvbWFudGlzL21hbnRpc19jb21tb24uaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9tYW50aXMvbWFudGlzX2NvbW1vbi5oCkBAIC0xNzEsNyArMTcxLDkgQEAKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QJdWFydF93b3JrOwogCXNwaW5sb2NrX3QJCXVhcnRfbG9jazsKIAotCXN0cnVjdCBpbnB1dF9kZXYJKnJjOworCXN0cnVjdCByY19kZXYJCSpyYzsKKwljaGFyCQkJaW5wdXRfbmFtZVs4MF07CisJY2hhcgkJCWlucHV0X3BoeXNbODBdOwogfTsKIAogI2RlZmluZSBNQU5USVNfSElGX1NUQVRVUwkobWFudGlzLT5ncGlvX3N0YXR1cykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL21hbnRpcy9tYW50aXNfZHZiLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9tYW50aXMvbWFudGlzX2R2Yi5jCmluZGV4IDk5ZDgyZWUuLmU1MTgwZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL21hbnRpcy9tYW50aXNfZHZiLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvbWFudGlzL21hbnRpc19kdmIuYwpAQCAtNDcsMTUgKzQ3LDE1IEBACiAJc3dpdGNoIChwb3dlcikgewogCWNhc2UgUE9XRVJfT046CiAJCWRwcmludGsoTUFOVElTX0RFQlVHLCAxLCAiUG93ZXIgT04iKTsKLQkJZ3Bpb19zZXRfYml0cyhtYW50aXMsIGNvbmZpZy0+cG93ZXIsIFBPV0VSX09OKTsKKwkJbWFudGlzX2dwaW9fc2V0X2JpdHMobWFudGlzLCBjb25maWctPnBvd2VyLCBQT1dFUl9PTik7CiAJCW1zbGVlcCgxMDApOwotCQlncGlvX3NldF9iaXRzKG1hbnRpcywgY29uZmlnLT5wb3dlciwgUE9XRVJfT04pOworCQltYW50aXNfZ3Bpb19zZXRfYml0cyhtYW50aXMsIGNvbmZpZy0+cG93ZXIsIFBPV0VSX09OKTsKIAkJbXNsZWVwKDEwMCk7CiAJCWJyZWFrOwogCiAJY2FzZSBQT1dFUl9PRkY6CiAJCWRwcmludGsoTUFOVElTX0RFQlVHLCAxLCAiUG93ZXIgT0ZGIik7Ci0JCWdwaW9fc2V0X2JpdHMobWFudGlzLCBjb25maWctPnBvd2VyLCBQT1dFUl9PRkYpOworCQltYW50aXNfZ3Bpb19zZXRfYml0cyhtYW50aXMsIGNvbmZpZy0+cG93ZXIsIFBPV0VSX09GRik7CiAJCW1zbGVlcCgxMDApOwogCQlicmVhazsKIApAQCAtNzMsMTMgKzczLDEzIEBACiAJc3RydWN0IG1hbnRpc19od2NvbmZpZyAqY29uZmlnID0gbWFudGlzLT5od2NvbmZpZzsKIAogCWRwcmludGsoTUFOVElTX0RFQlVHLCAxLCAiRnJvbnRlbmQgUkVTRVQiKTsKLQlncGlvX3NldF9iaXRzKG1hbnRpcywgY29uZmlnLT5yZXNldCwgMCk7CisJbWFudGlzX2dwaW9fc2V0X2JpdHMobWFudGlzLCBjb25maWctPnJlc2V0LCAwKTsKIAltc2xlZXAoMTAwKTsKLQlncGlvX3NldF9iaXRzKG1hbnRpcywgY29uZmlnLT5yZXNldCwgMCk7CisJbWFudGlzX2dwaW9fc2V0X2JpdHMobWFudGlzLCBjb25maWctPnJlc2V0LCAwKTsKIAltc2xlZXAoMTAwKTsKLQlncGlvX3NldF9iaXRzKG1hbnRpcywgY29uZmlnLT5yZXNldCwgMSk7CisJbWFudGlzX2dwaW9fc2V0X2JpdHMobWFudGlzLCBjb25maWctPnJlc2V0LCAxKTsKIAltc2xlZXAoMTAwKTsKLQlncGlvX3NldF9iaXRzKG1hbnRpcywgY29uZmlnLT5yZXNldCwgMSk7CisJbWFudGlzX2dwaW9fc2V0X2JpdHMobWFudGlzLCBjb25maWctPnJlc2V0LCAxKTsKIAltc2xlZXAoMTAwKTsKIAogCXJldHVybjsKQEAgLTExNyw2ICsxMTcsNyBAQAogCWlmIChtYW50aXMtPmZlZWRzID09IDEpCSB7CiAJCWRwcmludGsoTUFOVElTX0RFQlVHLCAxLCAibWFudGlzIHN0YXJ0IGZlZWQgJiBkbWEiKTsKIAkJbWFudGlzX2RtYV9zdGFydChtYW50aXMpOworCQl0YXNrbGV0X2VuYWJsZSgmbWFudGlzLT50YXNrbGV0KTsKIAl9CiAKIAlyZXR1cm4gbWFudGlzLT5mZWVkczsKQEAgLTEzNiw2ICsxMzcsNyBAQAogCW1hbnRpcy0+ZmVlZHMtLTsKIAlpZiAobWFudGlzLT5mZWVkcyA9PSAwKSB7CiAJCWRwcmludGsoTUFOVElTX0RFQlVHLCAxLCAibWFudGlzIHN0b3AgZmVlZCBhbmQgZG1hIik7CisJCXRhc2tsZXRfZGlzYWJsZSgmbWFudGlzLT50YXNrbGV0KTsKIAkJbWFudGlzX2RtYV9zdG9wKG1hbnRpcyk7CiAJfQogCkBAIC0yMTYsNiArMjE4LDcgQEAKIAogCWR2Yl9uZXRfaW5pdCgmbWFudGlzLT5kdmJfYWRhcHRlciwgJm1hbnRpcy0+ZHZibmV0LCAmbWFudGlzLT5kZW11eC5kbXgpOwogCXRhc2tsZXRfaW5pdCgmbWFudGlzLT50YXNrbGV0LCBtYW50aXNfZG1hX3hmZXIsICh1bnNpZ25lZCBsb25nKSBtYW50aXMpOworCXRhc2tsZXRfZGlzYWJsZSgmbWFudGlzLT50YXNrbGV0KTsKIAlpZiAobWFudGlzLT5od2NvbmZpZykgewogCQlyZXN1bHQgPSBjb25maWctPmZyb250ZW5kX2luaXQobWFudGlzLCBtYW50aXMtPmZlKTsKIAkJaWYgKHJlc3VsdCA8IDApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL21hbnRpcy9tYW50aXNfZXZtLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9tYW50aXMvbWFudGlzX2V2bS5jCmluZGV4IGE3YjM2OWEuLjlmNzNjMmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL21hbnRpcy9tYW50aXNfZXZtLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvbWFudGlzL21hbnRpc19ldm0uYwpAQCAtMTExLDcgKzExMSw3IEBACiAJc3RydWN0IG1hbnRpc19wY2kgKm1hbnRpcyA9IGNhLT5jYV9wcml2OwogCiAJZHByaW50ayhNQU5USVNfREVCVUcsIDEsICJNYW50aXMgSG9zdCBJL0YgRXZlbnQgbWFuYWdlciBleGl0aW5nIik7Ci0JZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwlmbHVzaF93b3JrX3N5bmMoJmNhLT5oaWZfZXZtX3dvcmspOwogCW1hbnRpc19oaWZfZXhpdChjYSk7CiAJbWFudGlzX3BjbWNpYV9leGl0KGNhKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL21hbnRpcy9tYW50aXNfaW5wdXQuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL21hbnRpcy9tYW50aXNfaW5wdXQuYwppbmRleCBhOTk0ODliLi5kYjZkNTRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9tYW50aXMvbWFudGlzX2lucHV0LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvbWFudGlzL21hbnRpc19pbnB1dC5jCkBAIC0xOCw4ICsxOCw3IEBACiAJRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAqLwogCi0jaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KLSNpbmNsdWRlIDxtZWRpYS9pci1jb3JlLmg+CisjaW5jbHVkZSA8bWVkaWEvcmMtY29yZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogCiAjaW5jbHVkZSAiZG14ZGV2LmgiCkBAIC0zMyw4ICszMiw5IEBACiAjaW5jbHVkZSAibWFudGlzX3VhcnQuaCIKIAogI2RlZmluZSBNT0RVTEVfTkFNRSAibWFudGlzX2NvcmUiCisjZGVmaW5lIFJDX01BUF9NQU5USVMgInJjLW1hbnRpcyIKIAotc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBtYW50aXNfaXJfdGFibGVbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcmNfbWFwX3RhYmxlIG1hbnRpc19pcl90YWJsZVtdID0gewogCXsgMHgyOSwgS0VZX1BPV0VSCX0sCiAJeyAweDI4LCBLRVlfRkFWT1JJVEVTCX0sCiAJeyAweDMwLCBLRVlfVEVYVAl9LApAQCAtOTUsNTMgKzk1LDY1IEBACiAJeyAweDAwLCBLRVlfQkxVRQl9LAogfTsKIAotc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX21hbnRpcyA9IHsKLQkuc2NhbiA9IG1hbnRpc19pcl90YWJsZSwKLQkuc2l6ZSA9IEFSUkFZX1NJWkUobWFudGlzX2lyX3RhYmxlKSwKK3N0YXRpYyBzdHJ1Y3QgcmNfbWFwX2xpc3QgaXJfbWFudGlzX21hcCA9IHsKKwkubWFwID0geworCQkuc2NhbiA9IG1hbnRpc19pcl90YWJsZSwKKwkJLnNpemUgPSBBUlJBWV9TSVpFKG1hbnRpc19pcl90YWJsZSksCisJCS5yY190eXBlID0gUkNfVFlQRV9VTktOT1dOLAorCQkubmFtZSA9IFJDX01BUF9NQU5USVMsCisJfQogfTsKLUVYUE9SVF9TWU1CT0xfR1BMKGlyX21hbnRpcyk7CiAKIGludCBtYW50aXNfaW5wdXRfaW5pdChzdHJ1Y3QgbWFudGlzX3BjaSAqbWFudGlzKQogewotCXN0cnVjdCBpbnB1dF9kZXYgKnJjOwotCWNoYXIgbmFtZVs4MF0sIGRldls4MF07CisJc3RydWN0IHJjX2RldiAqZGV2OwogCWludCBlcnI7CiAKLQlyYyA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOwotCWlmICghcmMpIHsKLQkJZHByaW50ayhNQU5USVNfRVJST1IsIDEsICJJbnB1dCBkZXZpY2UgYWxsb2NhdGUgZmFpbGVkIik7Ci0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHJjX21hcF9yZWdpc3RlcigmaXJfbWFudGlzX21hcCk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwlkZXYgPSByY19hbGxvY2F0ZV9kZXZpY2UoKTsKKwlpZiAoIWRldikgeworCQlkcHJpbnRrKE1BTlRJU19FUlJPUiwgMSwgIlJlbW90ZSBkZXZpY2UgYWxsb2NhdGlvbiBmYWlsZWQiKTsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBvdXRfbWFwOwogCX0KIAotCXNwcmludGYobmFtZSwgIk1hbnRpcyAlcyBJUiByZWNlaXZlciIsIG1hbnRpcy0+aHdjb25maWctPm1vZGVsX25hbWUpOwotCXNwcmludGYoZGV2LCAicGNpLSVzL2lyMCIsIHBjaV9uYW1lKG1hbnRpcy0+cGRldikpOworCXNwcmludGYobWFudGlzLT5pbnB1dF9uYW1lLCAiTWFudGlzICVzIElSIHJlY2VpdmVyIiwgbWFudGlzLT5od2NvbmZpZy0+bW9kZWxfbmFtZSk7CisJc3ByaW50ZihtYW50aXMtPmlucHV0X3BoeXMsICJwY2ktJXMvaXIwIiwgcGNpX25hbWUobWFudGlzLT5wZGV2KSk7CiAKLQlyYy0+bmFtZSA9IG5hbWU7Ci0JcmMtPnBoeXMgPSBkZXY7CisJZGV2LT5pbnB1dF9uYW1lICAgICAgICAgPSBtYW50aXMtPmlucHV0X25hbWU7CisJZGV2LT5pbnB1dF9waHlzICAgICAgICAgPSBtYW50aXMtPmlucHV0X3BoeXM7CisJZGV2LT5pbnB1dF9pZC5idXN0eXBlICAgPSBCVVNfUENJOworCWRldi0+aW5wdXRfaWQudmVuZG9yICAgID0gbWFudGlzLT52ZW5kb3JfaWQ7CisJZGV2LT5pbnB1dF9pZC5wcm9kdWN0ICAgPSBtYW50aXMtPmRldmljZV9pZDsKKwlkZXYtPmlucHV0X2lkLnZlcnNpb24gICA9IDE7CisJZGV2LT5kcml2ZXJfbmFtZSAgICAgICAgPSBNT0RVTEVfTkFNRTsKKwlkZXYtPm1hcF9uYW1lICAgICAgICAgICA9IFJDX01BUF9NQU5USVM7CisJZGV2LT5kZXYucGFyZW50ICAgICAgICAgPSAmbWFudGlzLT5wZGV2LT5kZXY7CiAKLQlyYy0+aWQuYnVzdHlwZQk9IEJVU19QQ0k7Ci0JcmMtPmlkLnZlbmRvcgk9IG1hbnRpcy0+dmVuZG9yX2lkOwotCXJjLT5pZC5wcm9kdWN0CT0gbWFudGlzLT5kZXZpY2VfaWQ7Ci0JcmMtPmlkLnZlcnNpb24JPSAxOwotCXJjLT5kZXYJCT0gbWFudGlzLT5wZGV2LT5kZXY7Ci0KLQllcnIgPSBfX2lyX2lucHV0X3JlZ2lzdGVyKHJjLCAmaXJfbWFudGlzLCBOVUxMLCBNT0RVTEVfTkFNRSk7CisJZXJyID0gcmNfcmVnaXN0ZXJfZGV2aWNlKGRldik7CiAJaWYgKGVycikgewogCQlkcHJpbnRrKE1BTlRJU19FUlJPUiwgMSwgIklSIGRldmljZSByZWdpc3RyYXRpb24gZmFpbGVkLCByZXQgPSAlZCIsIGVycik7Ci0JCWlucHV0X2ZyZWVfZGV2aWNlKHJjKTsKLQkJcmV0dXJuIC1FTk9ERVY7CisJCWdvdG8gb3V0X2RldjsKIAl9CiAKLQltYW50aXMtPnJjID0gcmM7Ci0KKwltYW50aXMtPnJjID0gZGV2OwogCXJldHVybiAwOworCitvdXRfZGV2OgorCXJjX2ZyZWVfZGV2aWNlKGRldik7CitvdXRfbWFwOgorCXJjX21hcF91bnJlZ2lzdGVyKCZpcl9tYW50aXNfbWFwKTsKK291dDoKKwlyZXR1cm4gZXJyOwogfQogCiBpbnQgbWFudGlzX2V4aXQoc3RydWN0IG1hbnRpc19wY2kgKm1hbnRpcykKIHsKLQlzdHJ1Y3QgaW5wdXRfZGV2ICpyYyA9IG1hbnRpcy0+cmM7Ci0KLQlpcl9pbnB1dF91bnJlZ2lzdGVyKHJjKTsKLQorCXJjX3VucmVnaXN0ZXJfZGV2aWNlKG1hbnRpcy0+cmMpOworCXJjX21hcF91bnJlZ2lzdGVyKCZpcl9tYW50aXNfbWFwKTsKIAlyZXR1cm4gMDsKIH0KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvbWFudGlzL21hbnRpc19pb2MuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL21hbnRpcy9tYW50aXNfaW9jLmMKaW5kZXggZmUzMWNmYi4uNDc5MDg2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvbWFudGlzL21hbnRpc19pb2MuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9tYW50aXMvbWFudGlzX2lvYy5jCkBAIC03NSw3ICs3NSw3IEBACiBFWFBPUlRfU1lNQk9MX0dQTChtYW50aXNfZ2V0X21hYyk7CiAKIC8qIFR1cm4gdGhlIGdpdmVuIGJpdCBvbiBvciBvZmYuICovCi12b2lkIGdwaW9fc2V0X2JpdHMoc3RydWN0IG1hbnRpc19wY2kgKm1hbnRpcywgdTMyIGJpdHBvcywgdTggdmFsdWUpCit2b2lkIG1hbnRpc19ncGlvX3NldF9iaXRzKHN0cnVjdCBtYW50aXNfcGNpICptYW50aXMsIHUzMiBiaXRwb3MsIHU4IHZhbHVlKQogewogCXUzMiBjdXI7CiAKQEAgLTkwLDcgKzkwLDcgQEAKIAltbXdyaXRlKG1hbnRpcy0+Z3Bpb19zdGF0dXMsIE1BTlRJU19HUElGX0FERFIpOwogCW1td3JpdGUoMHgwMCwgTUFOVElTX0dQSUZfRE9VVCk7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChncGlvX3NldF9iaXRzKTsKK0VYUE9SVF9TWU1CT0xfR1BMKG1hbnRpc19ncGlvX3NldF9iaXRzKTsKIAogaW50IG1hbnRpc19zdHJlYW1fY29udHJvbChzdHJ1Y3QgbWFudGlzX3BjaSAqbWFudGlzLCBlbnVtIG1hbnRpc19zdHJlYW1fY29udHJvbCBzdHJlYW1fY3RsKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvbWFudGlzL21hbnRpc19pb2MuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL21hbnRpcy9tYW50aXNfaW9jLmgKaW5kZXggMTg4ZmU1YS4uZDU2ZTAwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvbWFudGlzL21hbnRpc19pb2MuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9tYW50aXMvbWFudGlzX2lvYy5oCkBAIC00NCw3ICs0NCw3IEBACiB9OwogCiBleHRlcm4gaW50IG1hbnRpc19nZXRfbWFjKHN0cnVjdCBtYW50aXNfcGNpICptYW50aXMpOwotZXh0ZXJuIHZvaWQgZ3Bpb19zZXRfYml0cyhzdHJ1Y3QgbWFudGlzX3BjaSAqbWFudGlzLCB1MzIgYml0cG9zLCB1OCB2YWx1ZSk7CitleHRlcm4gdm9pZCBtYW50aXNfZ3Bpb19zZXRfYml0cyhzdHJ1Y3QgbWFudGlzX3BjaSAqbWFudGlzLCB1MzIgYml0cG9zLCB1OCB2YWx1ZSk7CiAKIGV4dGVybiBpbnQgbWFudGlzX3N0cmVhbV9jb250cm9sKHN0cnVjdCBtYW50aXNfcGNpICptYW50aXMsIGVudW0gbWFudGlzX3N0cmVhbV9jb250cm9sIHN0cmVhbV9jdGwpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9tYW50aXMvbWFudGlzX3VhcnQuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL21hbnRpcy9tYW50aXNfdWFydC5jCmluZGV4IDdkMmYyMzkuLjk3Yjg4OWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL21hbnRpcy9tYW50aXNfdWFydC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL21hbnRpcy9tYW50aXNfdWFydC5jCkBAIC0xODIsNSArMTgyLDYgQEAKIHsKIAkvKiBkaXNhYmxlIGludGVycnVwdCAqLwogCW1td3JpdGUobW1yZWFkKE1BTlRJU19VQVJUX0NUTCkgJiAweGZmZWYsIE1BTlRJU19VQVJUX0NUTCk7CisJZmx1c2hfd29ya19zeW5jKCZtYW50aXMtPnVhcnRfd29yayk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChtYW50aXNfdWFydF9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL21hbnRpcy9tYW50aXNfdnAxMDMzLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9tYW50aXMvbWFudGlzX3ZwMTAzMy5jCmluZGV4IDRhNzIzYmQuLmRlZWM5MjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL21hbnRpcy9tYW50aXNfdnAxMDMzLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvbWFudGlzL21hbnRpc192cDEwMzMuYwpAQCAtMTczLDcgKzE3Myw3IEBACiAJCW1zbGVlcCgyNTApOwogCiAJCWRwcmludGsoTUFOVElTX0VSUk9SLCAxLCAiUHJvYmluZyBmb3IgU1RWMDI5OSAoRFZCLVMpIik7Ci0JCWZlID0gc3R2MDI5OV9hdHRhY2goJmxndGRxY3MwMDFmX2NvbmZpZywgYWRhcHRlcik7CisJCWZlID0gZHZiX2F0dGFjaChzdHYwMjk5X2F0dGFjaCwgJmxndGRxY3MwMDFmX2NvbmZpZywgYWRhcHRlcik7CiAKIAkJaWYgKGZlKSB7CiAJCQlmZS0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zID0gbGd0ZHFjczAwMWZfdHVuZXJfc2V0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvbWFudGlzL21hbnRpc192cDEwMzQuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL21hbnRpcy9tYW50aXNfdnAxMDM0LmMKaW5kZXggOGU2YWU1NS4uMjZiYzBjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvbWFudGlzL21hbnRpc192cDEwMzQuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9tYW50aXMvbWFudGlzX3ZwMTAzNC5jCkBAIC01MCwxMyArNTAsMTMgQEAKIAlzd2l0Y2ggKHZvbHRhZ2UpIHsKIAljYXNlIFNFQ19WT0xUQUdFXzEzOgogCQlkcHJpbnRrKE1BTlRJU19FUlJPUiwgMSwgIlBvbGFyaXphdGlvbj1bMTNWXSIpOwotCQlncGlvX3NldF9iaXRzKG1hbnRpcywgMTMsIDEpOwotCQlncGlvX3NldF9iaXRzKG1hbnRpcywgMTQsIDApOworCQltYW50aXNfZ3Bpb19zZXRfYml0cyhtYW50aXMsIDEzLCAxKTsKKwkJbWFudGlzX2dwaW9fc2V0X2JpdHMobWFudGlzLCAxNCwgMCk7CiAJCWJyZWFrOwogCWNhc2UgU0VDX1ZPTFRBR0VfMTg6CiAJCWRwcmludGsoTUFOVElTX0VSUk9SLCAxLCAiUG9sYXJpemF0aW9uPVsxOFZdIik7Ci0JCWdwaW9fc2V0X2JpdHMobWFudGlzLCAxMywgMSk7Ci0JCWdwaW9fc2V0X2JpdHMobWFudGlzLCAxNCwgMSk7CisJCW1hbnRpc19ncGlvX3NldF9iaXRzKG1hbnRpcywgMTMsIDEpOworCQltYW50aXNfZ3Bpb19zZXRfYml0cyhtYW50aXMsIDE0LCAxKTsKIAkJYnJlYWs7CiAJY2FzZSBTRUNfVk9MVEFHRV9PRkY6CiAJCWRwcmludGsoTUFOVElTX0VSUk9SLCAxLCAiRnJvbnRlbmQgKGR1bW15KSBQT1dFUkRPV04iKTsKQEAgLTgyLDcgKzgyLDcgQEAKIAkJbXNsZWVwKDI1MCk7CiAKIAkJZHByaW50ayhNQU5USVNfRVJST1IsIDEsICJQcm9iaW5nIGZvciBNQjg2QTE2IChEVkItUy9EU1MpIik7Ci0JCWZlID0gbWI4NmExNl9hdHRhY2goJnZwMTAzNF9tYjg2YTE2X2NvbmZpZywgYWRhcHRlcik7CisJCWZlID0gZHZiX2F0dGFjaChtYjg2YTE2X2F0dGFjaCwgJnZwMTAzNF9tYjg2YTE2X2NvbmZpZywgYWRhcHRlcik7CiAJCWlmIChmZSkgewogCQkJZHByaW50ayhNQU5USVNfRVJST1IsIDEsCiAJCQkiZm91bmQgTUI4NkExNiBEVkItUy9EU1MgZnJvbnRlbmQgQDB4JTAyeCIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9tYW50aXMvbWFudGlzX3ZwMTA0MS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvbWFudGlzL21hbnRpc192cDEwNDEuYwppbmRleCBkMWFhMmJjLi4zOGE0MzZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9tYW50aXMvbWFudGlzX3ZwMTA0MS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL21hbnRpcy9tYW50aXNfdnAxMDQxLmMKQEAgLTMxNiwxNCArMzE2LDE0IEBACiAJaWYgKGVyciA9PSAwKSB7CiAJCW1hbnRpc19mcm9udGVuZF9zb2Z0X3Jlc2V0KG1hbnRpcyk7CiAJCW1zbGVlcCgyNTApOwotCQltYW50aXMtPmZlID0gc3RiMDg5OV9hdHRhY2goJnZwMTA0MV9zdGIwODk5X2NvbmZpZywgYWRhcHRlcik7CisJCW1hbnRpcy0+ZmUgPSBkdmJfYXR0YWNoKHN0YjA4OTlfYXR0YWNoLCAmdnAxMDQxX3N0YjA4OTlfY29uZmlnLCBhZGFwdGVyKTsKIAkJaWYgKG1hbnRpcy0+ZmUpIHsKIAkJCWRwcmludGsoTUFOVElTX0VSUk9SLCAxLAogCQkJCSJmb3VuZCBTVEIwODk5IERWQi1TL0RWQi1TMiBmcm9udGVuZCBAMHglMDJ4IiwKIAkJCQl2cDEwNDFfc3RiMDg5OV9jb25maWcuZGVtb2RfYWRkcmVzcyk7CiAKLQkJCWlmIChzdGI2MTAwX2F0dGFjaChtYW50aXMtPmZlLCAmdnAxMDQxX3N0YjYxMDBfY29uZmlnLCBhZGFwdGVyKSkgewotCQkJCWlmICghbG5icDIxX2F0dGFjaChtYW50aXMtPmZlLCBhZGFwdGVyLCAwLCAwKSkKKwkJCWlmIChkdmJfYXR0YWNoKHN0YjYxMDBfYXR0YWNoLCBtYW50aXMtPmZlLCAmdnAxMDQxX3N0YjYxMDBfY29uZmlnLCBhZGFwdGVyKSkgeworCQkJCWlmICghZHZiX2F0dGFjaChsbmJwMjFfYXR0YWNoLCBtYW50aXMtPmZlLCBhZGFwdGVyLCAwLCAwKSkKIAkJCQkJZHByaW50ayhNQU5USVNfRVJST1IsIDEsICJObyBMTkJQMjEgZm91bmQhIik7CiAJCQl9CiAJCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9tYW50aXMvbWFudGlzX3ZwMjAzMy5jIGIvZHJpdmVycy9tZWRpYS9kdmIvbWFudGlzL21hbnRpc192cDIwMzMuYwppbmRleCAxMGNlODE3Li4wNmRhMGRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9tYW50aXMvbWFudGlzX3ZwMjAzMy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL21hbnRpcy9tYW50aXNfdnAyMDMzLmMKQEAgLTEzMiw3ICsxMzIsNyBAQAogCQltc2xlZXAoMjUwKTsKIAogCQlkcHJpbnRrKE1BTlRJU19FUlJPUiwgMSwgIlByb2JpbmcgZm9yIENVMTIxNiAoRFZCLUMpIik7Ci0JCWZlID0gdGRhMTAwMjFfYXR0YWNoKCZ2cDIwMzNfdGRhMTAwMnhfY3UxMjE2X2NvbmZpZywKKwkJZmUgPSBkdmJfYXR0YWNoKHRkYTEwMDIxX2F0dGFjaCwgJnZwMjAzM190ZGExMDAyeF9jdTEyMTZfY29uZmlnLAogCQkJCSAgICAgYWRhcHRlciwKIAkJCQkgICAgIHJlYWRfcHdtKG1hbnRpcykpOwogCkBAIC0xNDEsNyArMTQxLDcgQEAKIAkJCQkiZm91bmQgUGhpbGlwcyBDVTEyMTYgRFZCLUMgZnJvbnRlbmQgKFREQTEwMDIxKSBAIDB4JTAyeCIsCiAJCQkJdnAyMDMzX3RkYTEwMDJ4X2N1MTIxNl9jb25maWcuZGVtb2RfYWRkcmVzcyk7CiAJCX0gZWxzZSB7Ci0JCQlmZSA9IHRkYTEwMDIzX2F0dGFjaCgmdnAyMDMzX3RkYTEwMDIzX2N1MTIxNl9jb25maWcsCisJCQlmZSA9IGR2Yl9hdHRhY2godGRhMTAwMjNfYXR0YWNoLCAmdnAyMDMzX3RkYTEwMDIzX2N1MTIxNl9jb25maWcsCiAJCQkJCSAgICAgYWRhcHRlciwKIAkJCQkJICAgICByZWFkX3B3bShtYW50aXMpKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvbWFudGlzL21hbnRpc192cDIwNDAuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL21hbnRpcy9tYW50aXNfdnAyMDQwLmMKaW5kZXggYTdjYTIzMy4uZjcyYjEzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvbWFudGlzL21hbnRpc192cDIwNDAuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9tYW50aXMvbWFudGlzX3ZwMjA0MC5jCkBAIC0xMzIsNyArMTMyLDcgQEAKIAkJbXNsZWVwKDI1MCk7CiAKIAkJZHByaW50ayhNQU5USVNfRVJST1IsIDEsICJQcm9iaW5nIGZvciBDVTEyMTYgKERWQi1DKSIpOwotCQlmZSA9IHRkYTEwMDIxX2F0dGFjaCgmdnAyMDQwX3RkYTEwMDJ4X2N1MTIxNl9jb25maWcsCisJCWZlID0gZHZiX2F0dGFjaCh0ZGExMDAyMV9hdHRhY2gsICZ2cDIwNDBfdGRhMTAwMnhfY3UxMjE2X2NvbmZpZywKIAkJCQkgICAgIGFkYXB0ZXIsCiAJCQkJICAgICByZWFkX3B3bShtYW50aXMpKTsKIApAQCAtMTQxLDcgKzE0MSw3IEBACiAJCQkJImZvdW5kIFBoaWxpcHMgQ1UxMjE2IERWQi1DIGZyb250ZW5kIChUREExMDAyMSkgQCAweCUwMngiLAogCQkJCXZwMjA0MF90ZGExMDAyeF9jdTEyMTZfY29uZmlnLmRlbW9kX2FkZHJlc3MpOwogCQl9IGVsc2UgewotCQkJZmUgPSB0ZGExMDAyM19hdHRhY2goJnZwMjA0MF90ZGExMDAyM19jdTEyMTZfY29uZmlnLAorCQkJZmUgPSBkdmJfYXR0YWNoKHRkYTEwMDIzX2F0dGFjaCwgJnZwMjA0MF90ZGExMDAyM19jdTEyMTZfY29uZmlnLAogCQkJCQkgICAgIGFkYXB0ZXIsCiAJCQkJCSAgICAgcmVhZF9wd20obWFudGlzKSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL21hbnRpcy9tYW50aXNfdnAzMDMwLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9tYW50aXMvbWFudGlzX3ZwMzAzMC5jCmluZGV4IDFmNDMzNDIuLmMwOTMwOGNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9tYW50aXMvbWFudGlzX3ZwMzAzMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL21hbnRpcy9tYW50aXNfdnAzMDMwLmMKQEAgLTU5LDIxICs1OSwyMSBAQAogCXN0cnVjdCBtYW50aXNfaHdjb25maWcgKmNvbmZpZwk9IG1hbnRpcy0+aHdjb25maWc7CiAJaW50IGVyciA9IDA7CiAKLQlncGlvX3NldF9iaXRzKG1hbnRpcywgY29uZmlnLT5yZXNldCwgMCk7CisJbWFudGlzX2dwaW9fc2V0X2JpdHMobWFudGlzLCBjb25maWctPnJlc2V0LCAwKTsKIAltc2xlZXAoMTAwKTsKIAllcnIgPSBtYW50aXNfZnJvbnRlbmRfcG93ZXIobWFudGlzLCBQT1dFUl9PTik7CiAJbXNsZWVwKDEwMCk7Ci0JZ3Bpb19zZXRfYml0cyhtYW50aXMsIGNvbmZpZy0+cmVzZXQsIDEpOworCW1hbnRpc19ncGlvX3NldF9iaXRzKG1hbnRpcywgY29uZmlnLT5yZXNldCwgMSk7CiAKIAlpZiAoZXJyID09IDApIHsKIAkJbXNsZWVwKDI1MCk7CiAJCWRwcmludGsoTUFOVElTX0VSUk9SLCAxLCAiUHJvYmluZyBmb3IgMTAzNTMgKERWQi1UKSIpOwotCQlmZSA9IHpsMTAzNTNfYXR0YWNoKCZtYW50aXNfdnAzMDMwX2NvbmZpZywgYWRhcHRlcik7CisJCWZlID0gZHZiX2F0dGFjaCh6bDEwMzUzX2F0dGFjaCwgJm1hbnRpc192cDMwMzBfY29uZmlnLCBhZGFwdGVyKTsKIAogCQlpZiAoIWZlKQogCQkJcmV0dXJuIC0xOwogCi0JCXRkYTY2NXhfYXR0YWNoKGZlLCAmZW52NTdoMTJkNV9jb25maWcsIGFkYXB0ZXIpOworCQlkdmJfYXR0YWNoKHRkYTY2NXhfYXR0YWNoLCBmZSwgJmVudjU3aDEyZDVfY29uZmlnLCBhZGFwdGVyKTsKIAl9IGVsc2UgewogCQlkcHJpbnRrKE1BTlRJU19FUlJPUiwgMSwgIkZyb250ZW5kIG9uIDwlcz4gUE9XRVIgT04gZmFpbGVkISA8JWQ+IiwKIAkJCWFkYXB0ZXItPm5hbWUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9uZ2VuZS9uZ2VuZS1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9uZ2VuZS9uZ2VuZS1jb3JlLmMKaW5kZXggM2E3ZWY3MS4uZGMwNzNiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvbmdlbmUvbmdlbmUtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL25nZW5lL25nZW5lLWNvcmUuYwpAQCAtMTMwNCw3ICsxMzA0LDYgQEAKIHN0YXRpYyBpbnQgbmdlbmVfc3RhcnQoc3RydWN0IG5nZW5lICpkZXYpCiB7CiAJaW50IHN0YXQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgaTsKIAogCXBjaV9zZXRfbWFzdGVyKGRldi0+cGNpX2Rldik7CkBAIC0xMzM3LDYgKzEzMzYsOCBAQAogI2lmZGVmIENPTkZJR19QQ0lfTVNJCiAJLyogZW5hYmxlIE1TSSBpZiBrZXJuZWwgYW5kIGNhcmQgc3VwcG9ydCBpdCAqLwogCWlmIChwY2lfbXNpX2VuYWJsZWQoKSAmJiBkZXYtPmNhcmRfaW5mby0+bXNpX3N1cHBvcnRlZCkgeworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCiAJCW5nd3JpdGVsKDAsIE5HRU5FX0lOVF9FTkFCTEUpOwogCQlmcmVlX2lycShkZXYtPnBjaV9kZXYtPmlycSwgZGV2KTsKIAkJc3RhdCA9IHBjaV9lbmFibGVfbXNpKGRldi0+cGNpX2Rldik7CkBAIC0xNTE1LDcgKzE1MTYsNyBAQAogCiB2b2lkIF9fZGV2ZXhpdCBuZ2VuZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7Ci0Jc3RydWN0IG5nZW5lICpkZXYgPSAoc3RydWN0IG5nZW5lICopcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBuZ2VuZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCWludCBpOwogCiAJdGFza2xldF9raWxsKCZkZXYtPmV2ZW50X3Rhc2tsZXQpOwpAQCAtMTUzNiwxMiArMTUzNywxMSBAQAogCWlmIChwY2lfZW5hYmxlX2RldmljZShwY2lfZGV2KSA8IDApCiAJCXJldHVybiAtRU5PREVWOwogCi0JZGV2ID0gdm1hbGxvYyhzaXplb2Yoc3RydWN0IG5nZW5lKSk7CisJZGV2ID0gdnphbGxvYyhzaXplb2Yoc3RydWN0IG5nZW5lKSk7CiAJaWYgKGRldiA9PSBOVUxMKSB7CiAJCXN0YXQgPSAtRU5PTUVNOwogCQlnb3RvIGZhaWwwOwogCX0KLQltZW1zZXQoZGV2LCAwLCBzaXplb2Yoc3RydWN0IG5nZW5lKSk7CiAKIAlkZXYtPnBjaV9kZXYgPSBwY2lfZGV2OwogCWRldi0+Y2FyZF9pbmZvID0gKHN0cnVjdCBuZ2VuZV9pbmZvICopaWQtPmRyaXZlcl9kYXRhOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL0tjb25maWcKaW5kZXggZTUyMGJjZS4uYmM2NDU2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9LY29uZmlnCkBAIC00LDcgKzQsNyBAQAogCiBjb25maWcgU01TX1NJQU5PX01EVFYKIAl0cmlzdGF0ZSAiU2lhbm8gU01TMXh4eCBiYXNlZCBNRFRWIHJlY2VpdmVyIgotCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgSVJfQ09SRSAmJiBIQVNfRE1BCisJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBSQ19DT1JFICYmIEhBU19ETUEKIAktLS1oZWxwLS0tCiAJICBDaG9vc2UgWSBvciBNIGhlcmUgaWYgeW91IGhhdmUgTURUViByZWNlaXZlciB3aXRoIGEgU2lhbm8gY2hpcHNldC4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zY29yZWFwaS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zY29yZWFwaS5jCmluZGV4IDEzNWU0NWIuLjc4NzY1ZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc2NvcmVhcGkuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNjb3JlYXBpLmMKQEAgLTQzOCw3ICs0MzgsNyBAQAogCWludCByYzsKIAl2b2lkICpidWZmZXI7CiAKLQljb3JlZGV2LT5pci5pbnB1dF9kZXYgPSBOVUxMOworCWNvcmVkZXYtPmlyLmRldiA9IE5VTEw7CiAJaXJfaW8gPSBzbXNfZ2V0X2JvYXJkKHNtc2NvcmVfZ2V0X2JvYXJkX2lkKGNvcmVkZXYpKS0+Ym9hcmRfY2ZnLmlyOwogCWlmIChpcl9pbykgey8qIG9ubHkgaWYgSVIgcG9ydCBleGlzdCB3ZSB1c2UgSVIgc3ViLW1vZHVsZSAqLwogCQlzbXNfaW5mbygiSVIgbG9hZGluZyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zaXIuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc2lyLmMKaW5kZXggYTI3YzQ0YS4uMzdiYzVjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zaXIuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNpci5jCkBAIC00NSwyNSArNDUsMjQgQEAKIAkJZXYuZHVyYXRpb24gPSBhYnMoc2FtcGxlc1tpXSkgKiAxMDAwOyAvKiBDb252ZXJ0IHRvIG5zICovCiAJCWV2LnB1bHNlID0gKHNhbXBsZXNbaV0gPiAwKSA/IGZhbHNlIDogdHJ1ZTsKIAotCQlpcl9yYXdfZXZlbnRfc3RvcmUoY29yZWRldi0+aXIuaW5wdXRfZGV2LCAmZXYpOworCQlpcl9yYXdfZXZlbnRfc3RvcmUoY29yZWRldi0+aXIuZGV2LCAmZXYpOwogCX0KLQlpcl9yYXdfZXZlbnRfaGFuZGxlKGNvcmVkZXYtPmlyLmlucHV0X2Rldik7CisJaXJfcmF3X2V2ZW50X2hhbmRsZShjb3JlZGV2LT5pci5kZXYpOwogfQogCiBpbnQgc21zX2lyX2luaXQoc3RydWN0IHNtc2NvcmVfZGV2aWNlX3QgKmNvcmVkZXYpCiB7Ci0Jc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OworCWludCBlcnI7CiAJaW50IGJvYXJkX2lkID0gc21zY29yZV9nZXRfYm9hcmRfaWQoY29yZWRldik7CisJc3RydWN0IHJjX2RldiAqZGV2OwogCi0Jc21zX2xvZygiQWxsb2NhdGluZyBpbnB1dCBkZXZpY2UiKTsKLQlpbnB1dF9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKLQlpZiAoIWlucHV0X2RldikJeworCXNtc19sb2coIkFsbG9jYXRpbmcgcmMgZGV2aWNlIik7CisJZGV2ID0gcmNfYWxsb2NhdGVfZGV2aWNlKCk7CisJaWYgKCFkZXYpIHsKIAkJc21zX2VycigiTm90IGVub3VnaCBtZW1vcnkiKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JY29yZWRldi0+aXIuaW5wdXRfZGV2ID0gaW5wdXRfZGV2OwotCiAJY29yZWRldi0+aXIuY29udHJvbGxlciA9IDA7CS8qIFRvZG86IHZlZ2Evbm92YSBTUEkgbnVtYmVyICovCiAJY29yZWRldi0+aXIudGltZW91dCA9IElSX0RFRkFVTFRfVElNRU9VVDsKIAlzbXNfbG9nKCJJUiBwb3J0ICVkLCB0aW1lb3V0ICVkIG1zIiwKQEAgLTc1LDM4ICs3NCw0MSBAQAogCXN0cmxjcHkoY29yZWRldi0+aXIucGh5cywgY29yZWRldi0+ZGV2cGF0aCwgc2l6ZW9mKGNvcmVkZXYtPmlyLnBoeXMpKTsKIAlzdHJsY2F0KGNvcmVkZXYtPmlyLnBoeXMsICIvaXIwIiwgc2l6ZW9mKGNvcmVkZXYtPmlyLnBoeXMpKTsKIAotCWlucHV0X2Rldi0+bmFtZSA9IGNvcmVkZXYtPmlyLm5hbWU7Ci0JaW5wdXRfZGV2LT5waHlzID0gY29yZWRldi0+aXIucGh5czsKLQlpbnB1dF9kZXYtPmRldi5wYXJlbnQgPSBjb3JlZGV2LT5kZXZpY2U7CisJZGV2LT5pbnB1dF9uYW1lID0gY29yZWRldi0+aXIubmFtZTsKKwlkZXYtPmlucHV0X3BoeXMgPSBjb3JlZGV2LT5pci5waHlzOworCWRldi0+ZGV2LnBhcmVudCA9IGNvcmVkZXYtPmRldmljZTsKIAogI2lmIDAKIAkvKiBUT0RPOiBwcm9wZXJseSBpbml0aWFsaXplIHRoZSBwYXJhbWV0ZXJzIGJlbGxvdyAqLwotCWlucHV0X2Rldi0+aWQuYnVzdHlwZSA9IEJVU19VU0I7Ci0JaW5wdXRfZGV2LT5pZC52ZXJzaW9uID0gMTsKLQlpbnB1dF9kZXYtPmlkLnZlbmRvciA9IGxlMTZfdG9fY3B1KGRldi0+dWRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcik7Ci0JaW5wdXRfZGV2LT5pZC5wcm9kdWN0ID0gbGUxNl90b19jcHUoZGV2LT51ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCk7CisJZGV2LT5pbnB1dF9pZC5idXN0eXBlID0gQlVTX1VTQjsKKwlkZXYtPmlucHV0X2lkLnZlcnNpb24gPSAxOworCWRldi0+aW5wdXRfaWQudmVuZG9yID0gbGUxNl90b19jcHUoZGV2LT51ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKTsKKwlkZXYtPmlucHV0X2lkLnByb2R1Y3QgPSBsZTE2X3RvX2NwdShkZXYtPnVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KTsKICNlbmRpZgogCi0JY29yZWRldi0+aXIucHJvcHMucHJpdiA9IGNvcmVkZXY7Ci0JY29yZWRldi0+aXIucHJvcHMuZHJpdmVyX3R5cGUgPSBSQ19EUklWRVJfSVJfUkFXOwotCWNvcmVkZXYtPmlyLnByb3BzLmFsbG93ZWRfcHJvdG9zID0gSVJfVFlQRV9BTEw7CisJZGV2LT5wcml2ID0gY29yZWRldjsKKwlkZXYtPmRyaXZlcl90eXBlID0gUkNfRFJJVkVSX0lSX1JBVzsKKwlkZXYtPmFsbG93ZWRfcHJvdG9zID0gUkNfVFlQRV9BTEw7CisJZGV2LT5tYXBfbmFtZSA9IHNtc19nZXRfYm9hcmQoYm9hcmRfaWQpLT5yY19jb2RlczsKKwlkZXYtPmRyaXZlcl9uYW1lID0gTU9EVUxFX05BTUU7CiAKLQlzbXNfbG9nKCJJbnB1dCBkZXZpY2UgKElSKSAlcyBpcyBzZXQgZm9yIGtleSBldmVudHMiLCBpbnB1dF9kZXYtPm5hbWUpOworCXNtc19sb2coIklucHV0IGRldmljZSAoSVIpICVzIGlzIHNldCBmb3Iga2V5IGV2ZW50cyIsIGRldi0+aW5wdXRfbmFtZSk7CiAKLQlpZiAoaXJfaW5wdXRfcmVnaXN0ZXIoaW5wdXRfZGV2LCBzbXNfZ2V0X2JvYXJkKGJvYXJkX2lkKS0+cmNfY29kZXMsCi0JCQkgICAgICAmY29yZWRldi0+aXIucHJvcHMsIE1PRFVMRV9OQU1FKSkgeworCWVyciA9IHJjX3JlZ2lzdGVyX2RldmljZShkZXYpOworCWlmIChlcnIgPCAwKSB7CiAJCXNtc19lcnIoIkZhaWxlZCB0byByZWdpc3RlciBkZXZpY2UiKTsKLQkJaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXRfZGV2KTsKLQkJcmV0dXJuIC1FQUNDRVM7CisJCXJjX2ZyZWVfZGV2aWNlKGRldik7CisJCXJldHVybiBlcnI7CiAJfQogCisJY29yZWRldi0+aXIuZGV2ID0gZGV2OwogCXJldHVybiAwOwogfQogCiB2b2lkIHNtc19pcl9leGl0KHN0cnVjdCBzbXNjb3JlX2RldmljZV90ICpjb3JlZGV2KQogewotCWlmIChjb3JlZGV2LT5pci5pbnB1dF9kZXYpCi0JCWlyX2lucHV0X3VucmVnaXN0ZXIoY29yZWRldi0+aXIuaW5wdXRfZGV2KTsKKwlpZiAoY29yZWRldi0+aXIuZGV2KQorCQlyY191bnJlZ2lzdGVyX2RldmljZShjb3JlZGV2LT5pci5kZXYpOwogCiAJc21zX2xvZygiIik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNpci5oIGIvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zaXIuaAppbmRleCA5MjZlMjQ3Li5hZTkyYjNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNpci5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc2lyLmgKQEAgLTI4LDIwICsyOCwxOSBAQAogI2RlZmluZSBfX1NNU19JUl9IX18KIAogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+Ci0jaW5jbHVkZSA8bWVkaWEvaXItY29yZS5oPgorI2luY2x1ZGUgPG1lZGlhL3JjLWNvcmUuaD4KIAogI2RlZmluZSBJUl9ERUZBVUxUX1RJTUVPVVQJCTEwMAogCiBzdHJ1Y3Qgc21zY29yZV9kZXZpY2VfdDsKIAogc3RydWN0IGlyX3QgewotCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldjsKKwlzdHJ1Y3QgcmNfZGV2ICpkZXY7CiAJY2hhciBuYW1lWzQwXTsKIAljaGFyIHBoeXNbMzJdOwogCiAJY2hhciAqcmNfY29kZXM7CiAJdTY0IHByb3RvY29sOwotCXN0cnVjdCBpcl9kZXZfcHJvcHMgcHJvcHM7CiAKIAl1MzIgdGltZW91dDsKIAl1MzIgY29udHJvbGxlcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc3VzYi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zdXNiLmMKaW5kZXggNTBkNDMzOC4uMGI4ZGE1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zdXNiLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zdXNiLmMKQEAgLTI4OCw4ICsyODgsNyBAQAogCiBzdGF0aWMgdm9pZCBzbXN1c2JfdGVybV9kZXZpY2Uoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCiB7Ci0Jc3RydWN0IHNtc3VzYl9kZXZpY2VfdCAqZGV2ID0KLQkJKHN0cnVjdCBzbXN1c2JfZGV2aWNlX3QgKikgdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKwlzdHJ1Y3Qgc21zdXNiX2RldmljZV90ICpkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwogCiAJaWYgKGRldikgewogCQlzbXN1c2Jfc3RvcF9zdHJlYW1pbmcoZGV2KTsKQEAgLTQ0NSw4ICs0NDQsNyBAQAogCiBzdGF0aWMgaW50IHNtc3VzYl9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBwbV9tZXNzYWdlX3QgbXNnKQogewotCXN0cnVjdCBzbXN1c2JfZGV2aWNlX3QgKmRldiA9Ci0JCShzdHJ1Y3Qgc21zdXNiX2RldmljZV90ICopdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKwlzdHJ1Y3Qgc21zdXNiX2RldmljZV90ICpkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwogCXByaW50ayhLRVJOX0lORk8gIiVzOiBFbnRlcmluZyBzdGF0dXMgJWQuXG4iLCBfX2Z1bmNfXywgbXNnLmV2ZW50KTsKIAlzbXN1c2Jfc3RvcF9zdHJlYW1pbmcoZGV2KTsKIAlyZXR1cm4gMDsKQEAgLTQ1NSw4ICs0NTMsNyBAQAogc3RhdGljIGludCBzbXN1c2JfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQogewogCWludCByYywgaTsKLQlzdHJ1Y3Qgc21zdXNiX2RldmljZV90ICpkZXYgPQotCQkoc3RydWN0IHNtc3VzYl9kZXZpY2VfdCAqKXVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisJc3RydWN0IHNtc3VzYl9kZXZpY2VfdCAqZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CiAKIAlwcmludGsoS0VSTl9JTkZPICIlczogRW50ZXJpbmcuXG4iLCBfX2Z1bmNfXyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvS2NvbmZpZwppbmRleCBkZWJlYThkLi40NGFmYWIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL0tjb25maWcKQEAgLTg5LDcgKzg5LDYgQEAKIGNvbmZpZyBEVkJfQlVER0VUX0NJCiAJdHJpc3RhdGUgIkJ1ZGdldCBjYXJkcyB3aXRoIG9uYm9hcmQgQ0kgY29ubmVjdG9yIgogCWRlcGVuZHMgb24gRFZCX0JVREdFVF9DT1JFICYmIEkyQwotCWRlcGVuZHMgb24gSU5QVVQgIyBkdWUgdG8gSVIKIAlzZWxlY3QgRFZCX1NUVjAyOTcgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX1NUVjAyOTkgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX1REQTEwMDRYIGlmICFEVkJfRkVfQ1VTVE9NSVNFCkBAIC05OCw3ICs5Nyw3IEBACiAJc2VsZWN0IERWQl9MTkJQMjEgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX1REQTEwMDIzIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IE1FRElBX1RVTkVSX1REQTgyN1ggaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQotCWRlcGVuZHMgb24gVklERU9fSVIKKwlkZXBlbmRzIG9uIFJDX0NPUkUKIAloZWxwCiAJICBTdXBwb3J0IGZvciBzaW1wbGUgU0FBNzE0NiBiYXNlZCBEVkIgY2FyZHMKIAkgIChzbyBjYWxsZWQgQnVkZ2V0LSBvciBOb3ZhLVBDSSBjYXJkcykgd2l0aG91dCBvbmJvYXJkCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfdjRsLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfdjRsLmMKaW5kZXggYWMyMGM1Yi4uY2RkMzFjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX3Y0bC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMF92NGwuYwpAQCAtMTAwLDYgKzEwMCw3IEBACiAJCS50dW5lcgkJPSAwLCAvKiBpZ25vcmVkICovCiAJCS5zdGQJCT0gVjRMMl9TVERfUEFMX0JHfFY0TDJfU1REX05UU0NfTSwKIAkJLnN0YXR1cwkJPSAwLAorCQkuY2FwYWJpbGl0aWVzCT0gVjRMMl9JTl9DQVBfU1RELAogCX0sIHsKIAkJLmluZGV4CQk9IDEsCiAJCS5uYW1lCQk9ICJUZWxldmlzaW9uIiwKQEAgLTEwOCw2ICsxMDksNyBAQAogCQkudHVuZXIJCT0gMCwKIAkJLnN0ZAkJPSBWNEwyX1NURF9QQUxfQkd8VjRMMl9TVERfTlRTQ19NLAogCQkuc3RhdHVzCQk9IDAsCisJCS5jYXBhYmlsaXRpZXMJPSBWNEwyX0lOX0NBUF9TVEQsCiAJfSwgewogCQkuaW5kZXgJCT0gMiwKIAkJLm5hbWUJCT0gIlZpZGVvIiwKQEAgLTExNiw2ICsxMTgsNyBAQAogCQkudHVuZXIJCT0gMCwKIAkJLnN0ZAkJPSBWNEwyX1NURF9QQUxfQkd8VjRMMl9TVERfTlRTQ19NLAogCQkuc3RhdHVzCQk9IDAsCisJCS5jYXBhYmlsaXRpZXMJPSBWNEwyX0lOX0NBUF9TVEQsCiAJfSwgewogCQkuaW5kZXgJCT0gMywKIAkJLm5hbWUJCT0gIlkvQyIsCkBAIC0xMjQsNiArMTI3LDcgQEAKIAkJLnR1bmVyCQk9IDAsCiAJCS5zdGQJCT0gVjRMMl9TVERfUEFMX0JHfFY0TDJfU1REX05UU0NfTSwKIAkJLnN0YXR1cwkJPSAwLAorCQkuY2FwYWJpbGl0aWVzCT0gVjRMMl9JTl9DQVBfU1RELAogCX0KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1hdi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWF2LmMKaW5kZXggOTdhZmMwMS4uZTk1N2Q3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWF2LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWF2LmMKQEAgLTE0MDYsOCArMTQwNiwxMCBAQAogCiAjZGVmaW5lIEtOQzFfSU5QVVRTIDIKIHN0YXRpYyBzdHJ1Y3QgdjRsMl9pbnB1dCBrbmMxX2lucHV0c1tLTkMxX0lOUFVUU10gPSB7Ci0JezAsICJDb21wb3NpdGUiLCBWNEwyX0lOUFVUX1RZUEVfVFVORVIsIDEsIDAsIFY0TDJfU1REX1BBTF9CRyB8IFY0TDJfU1REX05UU0NfTSwgMH0sCi0JezEsICJTLVZpZGVvIiwgVjRMMl9JTlBVVF9UWVBFX0NBTUVSQSwgMiwgMCwgVjRMMl9TVERfUEFMX0JHIHwgVjRMMl9TVERfTlRTQ19NLCAwfSwKKwl7IDAsICJDb21wb3NpdGUiLCBWNEwyX0lOUFVUX1RZUEVfVFVORVIsIDEsIDAsCisJCVY0TDJfU1REX1BBTF9CRyB8IFY0TDJfU1REX05UU0NfTSwgMCwgVjRMMl9JTl9DQVBfU1REIH0sCisJeyAxLCAiUy1WaWRlbyIsIFY0TDJfSU5QVVRfVFlQRV9DQU1FUkEsIDIsIDAsCisJCVY0TDJfU1REX1BBTF9CRyB8IFY0TDJfU1REX05UU0NfTSwgMCwgVjRMMl9JTl9DQVBfU1REIH0sCiB9OwogCiBzdGF0aWMgaW50IHZpZGlvY19lbnVtX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfaW5wdXQgKmkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtY2kuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1jaS5jCmluZGV4IGE5YzJjMzIuLmI4Mjc1NmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1jaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1jaS5jCkBAIC0zMyw5ICszMyw4IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPG1lZGlhL2lyLWNvcmUuaD4KKyNpbmNsdWRlIDxtZWRpYS9yYy1jb3JlLmg+CiAKICNpbmNsdWRlICJidWRnZXQuaCIKIApAQCAtOTYsNyArOTUsNyBAQAogRFZCX0RFRklORV9NT0RfT1BUX0FEQVBURVJfTlIoYWRhcHRlcl9ucik7CiAKIHN0cnVjdCBidWRnZXRfY2lfaXIgewotCXN0cnVjdCBpbnB1dF9kZXYgKmRldjsKKwlzdHJ1Y3QgcmNfZGV2ICpkZXY7CiAJc3RydWN0IHRhc2tsZXRfc3RydWN0IG1zcDQzMF9pcnFfdGFza2xldDsKIAljaGFyIG5hbWVbNzJdOyAvKiA0MCArIDMyIGZvciAoc3RydWN0IHNhYTcxNDZfZGV2KS5uYW1lICovCiAJY2hhciBwaHlzWzMyXTsKQEAgLTExOCw3ICsxMTcsNyBAQAogc3RhdGljIHZvaWQgbXNwNDMwX2lyX2ludGVycnVwdCh1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJc3RydWN0IGJ1ZGdldF9jaSAqYnVkZ2V0X2NpID0gKHN0cnVjdCBidWRnZXRfY2kgKikgZGF0YTsKLQlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYgPSBidWRnZXRfY2ktPmlyLmRldjsKKwlzdHJ1Y3QgcmNfZGV2ICpkZXYgPSBidWRnZXRfY2ktPmlyLmRldjsKIAl1MzIgY29tbWFuZCA9IHR0cGNpX2J1ZGdldF9kZWJpcmVhZCgmYnVkZ2V0X2NpLT5idWRnZXQsIERFQklOT1NXQVAsIERFQklBRERSX0lSLCAyLCAxLCAwKSA+PiA4OwogCiAJLyoKQEAgLTE2MCwxOSArMTU5LDE3IEBACiAJICAgIGJ1ZGdldF9jaS0+aXIucmM1X2RldmljZSAhPSAoY29tbWFuZCAmIDB4MWYpKQogCQlyZXR1cm47CiAKLQlpcl9rZXlkb3duKGRldiwgYnVkZ2V0X2NpLT5pci5pcl9rZXksIChjb21tYW5kICYgMHgyMCkgPyAxIDogMCk7CisJcmNfa2V5ZG93bihkZXYsIGJ1ZGdldF9jaS0+aXIuaXJfa2V5LCAoY29tbWFuZCAmIDB4MjApID8gMSA6IDApOwogfQogCiBzdGF0aWMgaW50IG1zcDQzMF9pcl9pbml0KHN0cnVjdCBidWRnZXRfY2kgKmJ1ZGdldF9jaSkKIHsKIAlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKnNhYSA9IGJ1ZGdldF9jaS0+YnVkZ2V0LmRldjsKLQlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYgPSBidWRnZXRfY2ktPmlyLmRldjsKKwlzdHJ1Y3QgcmNfZGV2ICpkZXY7CiAJaW50IGVycm9yOwotCWNoYXIgKmlyX2NvZGVzID0gTlVMTDsKIAotCi0JYnVkZ2V0X2NpLT5pci5kZXYgPSBpbnB1dF9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKLQlpZiAoIWlucHV0X2RldikgeworCWRldiA9IHJjX2FsbG9jYXRlX2RldmljZSgpOworCWlmICghZGV2KSB7CiAJCXByaW50ayhLRVJOX0VSUiAiYnVkZ2V0X2NpOiBJUiBpbnRlcmZhY2UgaW5pdGlhbGlzYXRpb24gZmFpbGVkXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQpAQCAtMTgyLDE5ICsxNzksMjAgQEAKIAlzbnByaW50ZihidWRnZXRfY2ktPmlyLnBoeXMsIHNpemVvZihidWRnZXRfY2ktPmlyLnBoeXMpLAogCQkgInBjaS0lcy9pcjAiLCBwY2lfbmFtZShzYWEtPnBjaSkpOwogCi0JaW5wdXRfZGV2LT5uYW1lID0gYnVkZ2V0X2NpLT5pci5uYW1lOwotCi0JaW5wdXRfZGV2LT5waHlzID0gYnVkZ2V0X2NpLT5pci5waHlzOwotCWlucHV0X2Rldi0+aWQuYnVzdHlwZSA9IEJVU19QQ0k7Ci0JaW5wdXRfZGV2LT5pZC52ZXJzaW9uID0gMTsKKwlkZXYtPmRyaXZlcl9uYW1lID0gTU9EVUxFX05BTUU7CisJZGV2LT5pbnB1dF9uYW1lID0gYnVkZ2V0X2NpLT5pci5uYW1lOworCWRldi0+aW5wdXRfcGh5cyA9IGJ1ZGdldF9jaS0+aXIucGh5czsKKwlkZXYtPmlucHV0X2lkLmJ1c3R5cGUgPSBCVVNfUENJOworCWRldi0+aW5wdXRfaWQudmVyc2lvbiA9IDE7CisJZGV2LT5zY2FubWFzayA9IDB4ZmY7CiAJaWYgKHNhYS0+cGNpLT5zdWJzeXN0ZW1fdmVuZG9yKSB7Ci0JCWlucHV0X2Rldi0+aWQudmVuZG9yID0gc2FhLT5wY2ktPnN1YnN5c3RlbV92ZW5kb3I7Ci0JCWlucHV0X2Rldi0+aWQucHJvZHVjdCA9IHNhYS0+cGNpLT5zdWJzeXN0ZW1fZGV2aWNlOworCQlkZXYtPmlucHV0X2lkLnZlbmRvciA9IHNhYS0+cGNpLT5zdWJzeXN0ZW1fdmVuZG9yOworCQlkZXYtPmlucHV0X2lkLnByb2R1Y3QgPSBzYWEtPnBjaS0+c3Vic3lzdGVtX2RldmljZTsKIAl9IGVsc2UgewotCQlpbnB1dF9kZXYtPmlkLnZlbmRvciA9IHNhYS0+cGNpLT52ZW5kb3I7Ci0JCWlucHV0X2Rldi0+aWQucHJvZHVjdCA9IHNhYS0+cGNpLT5kZXZpY2U7CisJCWRldi0+aW5wdXRfaWQudmVuZG9yID0gc2FhLT5wY2ktPnZlbmRvcjsKKwkJZGV2LT5pbnB1dF9pZC5wcm9kdWN0ID0gc2FhLT5wY2ktPmRldmljZTsKIAl9Ci0JaW5wdXRfZGV2LT5kZXYucGFyZW50ID0gJnNhYS0+cGNpLT5kZXY7CisJZGV2LT5kZXYucGFyZW50ID0gJnNhYS0+cGNpLT5kZXY7CiAKIAlpZiAocmM1X2RldmljZSA8IDApCiAJCWJ1ZGdldF9jaS0+aXIucmM1X2RldmljZSA9IElSX0RFVklDRV9BTlk7CkBAIC0yMDgsNyArMjA2LDcgQEAKIAljYXNlIDB4MTAxMToKIAljYXNlIDB4MTAxMjoKIAkJLyogVGhlIGhhdXBwYXVnZSBrZXltYXAgaXMgYSBzdXBlcnNldCBvZiB0aGVzZSByZW1vdGVzICovCi0JCWlyX2NvZGVzID0gUkNfTUFQX0hBVVBQQVVHRV9ORVc7CisJCWRldi0+bWFwX25hbWUgPSBSQ19NQVBfSEFVUFBBVUdFX05FVzsKIAogCQlpZiAocmM1X2RldmljZSA8IDApCiAJCQlidWRnZXRfY2ktPmlyLnJjNV9kZXZpY2UgPSAweDFmOwpAQCAtMjE4LDIzICsyMTYsMjIgQEAKIAljYXNlIDB4MTAxOToKIAljYXNlIDB4MTAxYToKIAkJLyogZm9yIHRoZSBUZWNobm90cmVuZCAxNTAwIGJ1bmRsZWQgcmVtb3RlICovCi0JCWlyX2NvZGVzID0gUkNfTUFQX1RUXzE1MDA7CisJCWRldi0+bWFwX25hbWUgPSBSQ19NQVBfVFRfMTUwMDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJLyogdW5rbm93biByZW1vdGUgKi8KLQkJaXJfY29kZXMgPSBSQ19NQVBfQlVER0VUX0NJX09MRDsKKwkJZGV2LT5tYXBfbmFtZSA9IFJDX01BUF9CVURHRVRfQ0lfT0xEOwogCQlicmVhazsKIAl9CiAKLQllcnJvciA9IGlyX2lucHV0X3JlZ2lzdGVyKGlucHV0X2RldiwgaXJfY29kZXMsIE5VTEwsIE1PRFVMRV9OQU1FKTsKKwllcnJvciA9IHJjX3JlZ2lzdGVyX2RldmljZShkZXYpOwogCWlmIChlcnJvcikgewogCQlwcmludGsoS0VSTl9FUlIgImJ1ZGdldF9jaTogY291bGQgbm90IGluaXQgZHJpdmVyIGZvciBJUiBkZXZpY2UgKGNvZGUgJWQpXG4iLCBlcnJvcik7CisJCXJjX2ZyZWVfZGV2aWNlKGRldik7CiAJCXJldHVybiBlcnJvcjsKIAl9CiAKLQkvKiBub3RlOiB0aGVzZSBtdXN0IGJlIGFmdGVyIGlucHV0X3JlZ2lzdGVyX2RldmljZSAqLwotCWlucHV0X2Rldi0+cmVwW1JFUF9ERUxBWV0gPSA0MDA7Ci0JaW5wdXRfZGV2LT5yZXBbUkVQX1BFUklPRF0gPSAyNTA7CisJYnVkZ2V0X2NpLT5pci5kZXYgPSBkZXY7CiAKIAl0YXNrbGV0X2luaXQoJmJ1ZGdldF9jaS0+aXIubXNwNDMwX2lycV90YXNrbGV0LCBtc3A0MzBfaXJfaW50ZXJydXB0LAogCQkgICAgICh1bnNpZ25lZCBsb25nKSBidWRnZXRfY2kpOwpAQCAtMjQ4LDEzICsyNDUsMTIgQEAKIHN0YXRpYyB2b2lkIG1zcDQzMF9pcl9kZWluaXQoc3RydWN0IGJ1ZGdldF9jaSAqYnVkZ2V0X2NpKQogewogCXN0cnVjdCBzYWE3MTQ2X2RldiAqc2FhID0gYnVkZ2V0X2NpLT5idWRnZXQuZGV2OwotCXN0cnVjdCBpbnB1dF9kZXYgKmRldiA9IGJ1ZGdldF9jaS0+aXIuZGV2OwogCiAJU0FBNzE0Nl9JRVJfRElTQUJMRShzYWEsIE1BU0tfMDYpOwogCXNhYTcxNDZfc2V0Z3BpbyhzYWEsIDMsIFNBQTcxNDZfR1BJT19JTlBVVCk7CiAJdGFza2xldF9raWxsKCZidWRnZXRfY2ktPmlyLm1zcDQzMF9pcnFfdGFza2xldCk7CiAKLQlpcl9pbnB1dF91bnJlZ2lzdGVyKGRldik7CisJcmNfdW5yZWdpc3Rlcl9kZXZpY2UoYnVkZ2V0X2NpLT5pci5kZXYpOwogfQogCiBzdGF0aWMgaW50IGNpaW50Zl9yZWFkX2F0dHJpYnV0ZV9tZW0oc3RydWN0IGR2Yl9jYV9lbjUwMjIxICpjYSwgaW50IHNsb3QsIGludCBhZGRyZXNzKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9yYWRpby9LY29uZmlnCmluZGV4IDgzNTY3YjguLjNjNWE0NzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL0tjb25maWcKQEAgLTQ1Miw0ICs0NTIsMjAgQEAKIAkgIGZvdW5kIGJlaGluZCB0aGUgVGltYmVyZGFsZSBGUEdBIG9uIHRoZSBSdXNzZWxsdmlsbGUgYm9hcmQuCiAJICBFbmFibGluZyB0aGlzIGRyaXZlciB3aWxsIGF1dG9tYXRpY2FsbHkgc2VsZWN0IHRoZSBEU1AgYW5kIHR1bmVyLgogCitjb25maWcgUkFESU9fV0wxMjczCisJdHJpc3RhdGUgIlRleGFzIEluc3RydW1lbnRzIFdMMTI3MyBJMkMgRk0gUmFkaW8iCisJZGVwZW5kcyBvbiBJMkMgJiYgVklERU9fVjRMMgorCXNlbGVjdCBNRkRfV0wxMjczX0NPUkUKKwlzZWxlY3QgRldfTE9BREVSCisJLS0taGVscC0tLQorCSAgQ2hvb3NlIFkgaGVyZSBpZiB5b3UgaGF2ZSB0aGlzIEZNIHJhZGlvIGNoaXAuCisKKwkgIEluIG9yZGVyIHRvIGNvbnRyb2wgeW91ciByYWRpbyBjYXJkLCB5b3Ugd2lsbCBuZWVkIHRvIHVzZSBwcm9ncmFtcworCSAgdGhhdCBhcmUgY29tcGF0aWJsZSB3aXRoIHRoZSBWaWRlbyBGb3IgTGludXggMiBBUEkuICBJbmZvcm1hdGlvbiBvbgorCSAgdGhpcyBBUEkgYW5kIHBvaW50ZXJzIHRvICJ2NGwyIiBwcm9ncmFtcyBtYXkgYmUgZm91bmQgYXQKKwkgIDxmaWxlOkRvY3VtZW50YXRpb24vdmlkZW80bGludXgvQVBJLmh0bWw+LgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCByYWRpby13bDEyNzMuCisKIGVuZGlmICMgUkFESU9fQURBUFRFUlMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3JhZGlvL01ha2VmaWxlCmluZGV4IGY2MTU1ODMuLmQyOTcwNzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9NYWtlZmlsZQpAQCAtMjYsNSArMjYsNiBAQAogb2JqLSQoQ09ORklHX1JBRElPX1NBQTc3MDZIKSArPSBzYWE3NzA2aC5vCiBvYmotJChDT05GSUdfUkFESU9fVEVGNjg2MikgKz0gdGVmNjg2Mi5vCiBvYmotJChDT05GSUdfUkFESU9fVElNQkVSREFMRSkgKz0gcmFkaW8tdGltYi5vCitvYmotJChDT05GSUdfUkFESU9fV0wxMjczKSArPSByYWRpby13bDEyNzMubwogCiBFWFRSQV9DRkxBR1MgKz0gLUlzb3VuZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1haW1zbGFiLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWFpbXNsYWIuYwppbmRleCAwNWU4MzJmLi42Y2M1ZDEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWFpbXNsYWIuYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWFpbXNsYWIuYwpAQCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgkvKiBNb2R1bGVzIAkJCSovCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgkJLyogSW5pdGRhdGEJCQkqLwogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgkvKiByZXF1ZXN0X3JlZ2lvbgkJKi8KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgkvKiB1ZGVsYXkJCQkqLwogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgkvKiBrZXJuZWwgcmFkaW8gc3RydWN0cwkJKi8KICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CS8qIGZvciBLRVJORUxfVkVSU0lPTiBNQUNSTwkqLwogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CQkvKiBvdXRiLCBvdXRiX3AJCQkqLwpAQCAtNzEsMjcgKzcwLDE3IEBACiAKIC8qIGxvY2FsIHRoaW5ncyAqLwogCi1zdGF0aWMgdm9pZCBzbGVlcF9kZWxheShsb25nIG4pCi17Ci0JLyogU2xlZXAgbmljZWx5IGZvciAnbicgdVMgKi8KLQlpbnQgZCA9IG4gLyBtc2Vjc190b19qaWZmaWVzKDEwMDApOwotCWlmICghZCkKLQkJdWRlbGF5KG4pOwotCWVsc2UKLQkJbXNsZWVwKGppZmZpZXNfdG9fbXNlY3MoZCkpOwotfQotCiBzdGF0aWMgdm9pZCBydF9kZWN2b2woc3RydWN0IHJ0cmFjayAqcnQpCiB7CiAJb3V0YigweDU4LCBydC0+aW8pOwkJLyogdm9sdW1lIGRvd24gKyBzaWdzdHIgKyBvbgkqLwotCXNsZWVwX2RlbGF5KDEwMDAwMCk7CisJbXNsZWVwKDEwMCk7CiAJb3V0YigweGQ4LCBydC0+aW8pOwkJLyogdm9sdW1lIHN0ZWFkeSArIHNpZ3N0ciArIG9uCSovCiB9CiAKIHN0YXRpYyB2b2lkIHJ0X2luY3ZvbChzdHJ1Y3QgcnRyYWNrICpydCkKIHsKIAlvdXRiKDB4OTgsIHJ0LT5pbyk7CQkvKiB2b2x1bWUgdXAgKyBzaWdzdHIgKyBvbgkqLwotCXNsZWVwX2RlbGF5KDEwMDAwMCk7CisJbXNsZWVwKDEwMCk7CiAJb3V0YigweGQ4LCBydC0+aW8pOwkJLyogdm9sdW1lIHN0ZWFkeSArIHNpZ3N0ciArIG9uCSovCiB9CiAKQEAgLTEyMCw3ICsxMDksNyBAQAogCiAJaWYgKHZvbCA9PSAwKSB7CQkJLyogdm9sdW1lID0gMCBtZWFucyBtdXRlIHRoZSBjYXJkICovCiAJCW91dGIoMHg0OCwgcnQtPmlvKTsJLyogdm9sdW1lIGRvd24gYnV0IHN0aWxsICJvbiIJKi8KLQkJc2xlZXBfZGVsYXkoMjAwMDAwMCk7CS8qIG1ha2Ugc3VyZSBpdCdzIHRvdGFsbHkgZG93bgkqLworCQltc2xlZXAoMjAwMCk7CS8qIG1ha2Ugc3VyZSBpdCdzIHRvdGFsbHkgZG93bgkqLwogCQlvdXRiKDB4ZDAsIHJ0LT5pbyk7CS8qIHZvbHVtZSBzdGVhZHksIG9mZgkJKi8KIAkJcnQtPmN1cnZvbCA9IDA7CQkvKiB0cmFjayB0aGUgdm9sdW1lIHN0YXRlIQkqLwogCQltdXRleF91bmxvY2soJnJ0LT5sb2NrKTsKQEAgLTE1NSw3ICsxNDQsNyBAQAogCQlvdXRiX3AoMTI4KzY0KzE2KzgrICAxLCBydC0+aW8pOyAgLyogb24gKyB3ci1lbmFibGUgKyBkYXRhIGxvdyAqLwogCQlvdXRiX3AoMTI4KzY0KzE2KzgrMisxLCBydC0+aW8pOyAgLyogY2xvY2sgKi8KIAl9Ci0Jc2xlZXBfZGVsYXkoMTAwMCk7CisJbXNsZWVwKDEpOwogfQogCiBzdGF0aWMgdm9pZCBzZW5kXzFfYnl0ZShzdHJ1Y3QgcnRyYWNrICpydCkKQEAgLTE2OSw3ICsxNTgsNyBAQAogCQlvdXRiX3AoMTI4KzY0KzE2KzgrNCsyKzEsIHJ0LT5pbyk7IC8qIGNsb2NrICovCiAJfQogCi0Jc2xlZXBfZGVsYXkoMTAwMCk7CisJbXNsZWVwKDEpOwogfQogCiBzdGF0aWMgaW50IHJ0X3NldGZyZXEoc3RydWN0IHJ0cmFjayAqcnQsIHVuc2lnbmVkIGxvbmcgZnJlcSkKQEAgLTQyMCw3ICs0MDksNyBAQAogCiAJLyogdGhpcyBlbnN1cmVzIHRoYXQgdGhlIHZvbHVtZSBpcyBhbGwgdGhlIHdheSBkb3duICAqLwogCW91dGIoMHg0OCwgcnQtPmlvKTsJCS8qIHZvbHVtZSBkb3duIGJ1dCBzdGlsbCAib24iCSovCi0Jc2xlZXBfZGVsYXkoMjAwMDAwMCk7CS8qIG1ha2Ugc3VyZSBpdCdzIHRvdGFsbHkgZG93bgkqLworCW1zbGVlcCgyMDAwKTsJLyogbWFrZSBzdXJlIGl0J3MgdG90YWxseSBkb3duCSovCiAJb3V0YigweGMwLCBydC0+aW8pOwkJLyogc3RlYWR5IHZvbHVtZSwgbXV0ZSBjYXJkCSovCiAKIAlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCZydC0+dmRldiwgVkZMX1RZUEVfUkFESU8sIHJhZGlvX25yKSA8IDApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8td2wxMjczLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXdsMTI3My5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkNmJkMzYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXdsMTI3My5jCkBAIC0wLDAgKzEsMjMzMCBAQAorLyoKKyAqIERyaXZlciBmb3IgdGhlIFRleGFzIEluc3RydW1lbnRzIFdMMTI3MyBGTSByYWRpby4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24KKyAqIEF1dGhvcjogTWF0dGkgSi4gQWFsdG9uZW4gPG1hdHRpLmouYWFsdG9uZW5Abm9raWEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLglTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC93bDEyNzMtY29yZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY3RybHMuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KKworI2RlZmluZSBEUklWRVJfREVTQyAiV2wxMjczIEZNIFJhZGlvIgorCisjZGVmaW5lIFdMMTI3M19QT1dFUl9TRVRfT0ZGCQkwCisjZGVmaW5lIFdMMTI3M19QT1dFUl9TRVRfRk0JCUJJVCgwKQorI2RlZmluZSBXTDEyNzNfUE9XRVJfU0VUX1JEUwkJQklUKDEpCisjZGVmaW5lIFdMMTI3M19QT1dFUl9TRVRfUkVURU5USU9OCUJJVCg0KQorCisjZGVmaW5lIFdMMTI3M19QVVBEX1NFVF9PRkYJCTB4MDAKKyNkZWZpbmUgV0wxMjczX1BVUERfU0VUX09OCQkweDAxCisjZGVmaW5lIFdMMTI3M19QVVBEX1NFVF9SRVRFTlRJT04JMHgxMAorCisjZGVmaW5lIFdMMTI3M19GUkVRKHgpCQkoeCAqIDEwMDAwIC8gNjI1KQorI2RlZmluZSBXTDEyNzNfSU5WX0ZSRVEoeCkJKHggKiA2MjUgLyAxMDAwMCkKKworLyoKKyAqIHN0YXRpYyBpbnQgcmFkaW9fbnIgLSBUaGUgbnVtYmVyIG9mIHRoZSByYWRpbyBkZXZpY2UKKyAqCisgKiBUaGUgZGVmYXVsdCBpcyAwLgorICovCitzdGF0aWMgaW50IHJhZGlvX25yOworbW9kdWxlX3BhcmFtKHJhZGlvX25yLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhyYWRpb19uciwgIlRoZSBudW1iZXIgb2YgdGhlIHJhZGlvIGRldmljZS4gRGVmYXVsdCA9IDAiKTsKKworc3RydWN0IHdsMTI3M19kZXZpY2UgeworCWNoYXIgKmJ1c190eXBlOworCisJdTggZm9yYmlkZGVuOworCXVuc2lnbmVkIGludCBwcmVlbXBoYXNpczsKKwl1bnNpZ25lZCBpbnQgc3BhY2luZzsKKwl1bnNpZ25lZCBpbnQgdHhfcG93ZXI7CisJdW5zaWduZWQgaW50IHJ4X2ZyZXF1ZW5jeTsKKwl1bnNpZ25lZCBpbnQgdHhfZnJlcXVlbmN5OworCXVuc2lnbmVkIGludCByYW5nZWxvdzsKKwl1bnNpZ25lZCBpbnQgcmFuZ2VoaWdoOworCXVuc2lnbmVkIGludCBiYW5kOworCWJvb2wgc3RlcmVvOworCisJLyogUkRTICovCisJdW5zaWduZWQgaW50IHJkc19vbjsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIHdvcms7CisKKwl3YWl0X3F1ZXVlX2hlYWRfdCByZWFkX3F1ZXVlOworCXN0cnVjdCBtdXRleCBsb2NrOyAvKiBmb3Igc2VyaWFsaXppbmcgZm0gcmFkaW8gb3BlcmF0aW9ucyAqLworCXN0cnVjdCBjb21wbGV0aW9uIGJ1c3k7CisKKwl1bnNpZ25lZCBjaGFyICpidWZmZXI7CisJdW5zaWduZWQgaW50IGJ1Zl9zaXplOworCXVuc2lnbmVkIGludCByZF9pbmRleDsKKwl1bnNpZ25lZCBpbnQgd3JfaW5kZXg7CisKKwkvKiBTZWxlY3RlZCBpbnRlcnJ1cHRzICovCisJdTE2IGlycV9mbGFnczsKKwl1MTYgaXJxX3JlY2VpdmVkOworCisJc3RydWN0IHY0bDJfY3RybF9oYW5kbGVyIGN0cmxfaGFuZGxlcjsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgdjRsMmRldjsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlIHZpZGVvZGV2OworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3Qgd2wxMjczX2NvcmUgKmNvcmU7CisJc3RydWN0IGZpbGUgKm93bmVyOworCWNoYXIgKndyaXRlX2J1ZjsKKwl1bnNpZ25lZCBpbnQgcmRzX3VzZXJzOworfTsKKworI2RlZmluZSBXTDEyNzNfSVJRX01BU0sJIChXTDEyNzNfRlJfRVZFTlQJCXwJXAorCQkJICBXTDEyNzNfUE9XX0VOQl9FVkVOVCkKKworLyoKKyAqIHN0YXRpYyB1bnNpZ25lZCBpbnQgcmRzX2J1ZiAtIHRoZSBudW1iZXIgb2YgUkRTIGJ1ZmZlciBibG9ja3MgdXNlZC4KKyAqCisgKiBUaGUgZGVmYXVsdCBudW1iZXIgaXMgMTAwLgorICovCitzdGF0aWMgdW5zaWduZWQgaW50IHJkc19idWYgPSAxMDA7Cittb2R1bGVfcGFyYW0ocmRzX2J1ZiwgdWludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHJkc19idWYsICJOdW1iZXIgb2YgUkRTIGJ1ZmZlciBlbnRyaWVzLiBEZWZhdWx0ID0gMTAwIik7CisKK3N0YXRpYyBpbnQgd2wxMjczX2ZtX3JlYWRfcmVnKHN0cnVjdCB3bDEyNzNfY29yZSAqY29yZSwgdTggcmVnLCB1MTYgKnZhbHVlKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBjb3JlLT5jbGllbnQ7CisJdTggYlsyXTsKKwlpbnQgcjsKKworCXIgPSBpMmNfc21idXNfcmVhZF9pMmNfYmxvY2tfZGF0YShjbGllbnQsIHJlZywgc2l6ZW9mKGIpLCBiKTsKKwlpZiAociAhPSAyKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiJXM6IFJlYWQ6ICVkIGZhaWxzLlxuIiwgX19mdW5jX18sIHJlZyk7CisJCXJldHVybiAtRVJFTU9URUlPOworCX0KKworCSp2YWx1ZSA9ICh1MTYpYlswXSA8PCA4IHwgYlsxXTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdsMTI3M19mbV93cml0ZV9jbWQoc3RydWN0IHdsMTI3M19jb3JlICpjb3JlLCB1OCBjbWQsIHUxNiBwYXJhbSkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gY29yZS0+Y2xpZW50OworCXU4IGJ1ZltdID0geyAocGFyYW0gPj4gOCkgJiAweGZmLCBwYXJhbSAmIDB4ZmYgfTsKKwlpbnQgcjsKKworCXIgPSBpMmNfc21idXNfd3JpdGVfaTJjX2Jsb2NrX2RhdGEoY2xpZW50LCBjbWQsIHNpemVvZihidWYpLCBidWYpOworCWlmIChyKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiJXM6IENtZDogJWQgZmFpbHMuXG4iLCBfX2Z1bmNfXywgY21kKTsKKwkJcmV0dXJuIHI7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjczX2ZtX3dyaXRlX2RhdGEoc3RydWN0IHdsMTI3M19jb3JlICpjb3JlLCB1OCAqZGF0YSwgdTE2IGxlbikKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gY29yZS0+Y2xpZW50OworCXN0cnVjdCBpMmNfbXNnIG1zZzsKKwlpbnQgcjsKKworCW1zZy5hZGRyID0gY2xpZW50LT5hZGRyOworCW1zZy5mbGFncyA9IDA7CisJbXNnLmJ1ZiA9IGRhdGE7CisJbXNnLmxlbiA9IGxlbjsKKworCXIgPSBpMmNfdHJhbnNmZXIoY2xpZW50LT5hZGFwdGVyLCAmbXNnLCAxKTsKKwlpZiAociAhPSAxKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiJXM6IHdyaXRlIGVycm9yLlxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVSRU1PVEVJTzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bDEyNzNfZm1fd3JpdGVfZncoc3RydWN0IHdsMTI3M19jb3JlICpjb3JlLAorCQkJICAgICAgX191OCAqZncsIGludCBsZW4pCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGNvcmUtPmNsaWVudDsKKwlzdHJ1Y3QgaTJjX21zZyBtc2c7CisJaW50IGksIHIgPSAwOworCisJbXNnLmFkZHIgPSBjbGllbnQtPmFkZHI7CisJbXNnLmZsYWdzID0gMDsKKworCWZvciAoaSA9IDA7IGkgPD0gbGVuOyBpKyspIHsKKwkJbXNnLmxlbiA9IGZ3WzBdOworCQltc2cuYnVmID0gZncgKyAxOworCisJCWZ3ICs9IG1zZy5sZW4gKyAxOworCQlkZXZfZGJnKCZjbGllbnQtPmRldiwgIiVzOmxlblslZF06ICVkXG4iLCBfX2Z1bmNfXywgaSwgbXNnLmxlbik7CisKKwkJciA9IGkyY190cmFuc2ZlcihjbGllbnQtPmFkYXB0ZXIsICZtc2csIDEpOworCQlpZiAociA8IDAgJiYgaSA8IGxlbiArIDEpCisJCQlicmVhazsKKwl9CisKKwlkZXZfZGJnKCZjbGllbnQtPmRldiwgIiVzOiBpOiAlZFxuIiwgX19mdW5jX18sIGkpOworCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiJXM6IGxlbiArIDE6ICVkXG4iLCBfX2Z1bmNfXywgbGVuICsgMSk7CisKKwkvKiBMYXN0IHRyYW5zZmVyIGFsd2F5cyBmYWlscy4gKi8KKwlpZiAoaSA9PSBsZW4gfHwgciA9PSAxKQorCQlyID0gMDsKKworCXJldHVybiByOworfQorCisvKioKKyAqIHdsMTI3M19mbV9zZXRfYXVkaW8oKSAtCVNldCBhdWRpbyBtb2RlLgorICogQGNvcmU6CQkJQSBwb2ludGVyIHRvIHRoZSBkZXZpY2Ugc3RydWN0LgorICogQG5ld19tb2RlOgkJCVRoZSBuZXcgYXVkaW8gbW9kZS4KKyAqCisgKiBBdWRpbyBtb2RlcyBhcmUgV0wxMjczX0FVRElPX0RJR0lUQUwgYW5kIFdMMTI3M19BVURJT19BTkFMT0cuCisgKi8KK3N0YXRpYyBpbnQgd2wxMjczX2ZtX3NldF9hdWRpbyhzdHJ1Y3Qgd2wxMjczX2NvcmUgKmNvcmUsIHVuc2lnbmVkIGludCBuZXdfbW9kZSkKK3sKKwlpbnQgciA9IDA7CisKKwlpZiAoY29yZS0+bW9kZSA9PSBXTDEyNzNfTU9ERV9PRkYgfHwKKwkgICAgY29yZS0+bW9kZSA9PSBXTDEyNzNfTU9ERV9TVVNQRU5ERUQpCisJCXJldHVybiAtRVBFUk07CisKKwlpZiAoY29yZS0+bW9kZSA9PSBXTDEyNzNfTU9ERV9SWCAmJiBuZXdfbW9kZSA9PSBXTDEyNzNfQVVESU9fRElHSVRBTCkgeworCQlyID0gd2wxMjczX2ZtX3dyaXRlX2NtZChjb3JlLCBXTDEyNzNfUENNX01PREVfU0VULAorCQkJCQlXTDEyNzNfUENNX0RFRl9NT0RFKTsKKwkJaWYgKHIpCisJCQlnb3RvIG91dDsKKworCQlyID0gd2wxMjczX2ZtX3dyaXRlX2NtZChjb3JlLCBXTDEyNzNfSTJTX01PREVfQ09ORklHX1NFVCwKKwkJCQkJY29yZS0+aTJzX21vZGUpOworCQlpZiAocikKKwkJCWdvdG8gb3V0OworCisJCXIgPSB3bDEyNzNfZm1fd3JpdGVfY21kKGNvcmUsIFdMMTI3M19BVURJT19FTkFCTEUsCisJCQkJCVdMMTI3M19BVURJT19FTkFCTEVfSTJTKTsKKwkJaWYgKHIpCisJCQlnb3RvIG91dDsKKworCX0gZWxzZSBpZiAoY29yZS0+bW9kZSA9PSBXTDEyNzNfTU9ERV9SWCAmJgorCQkgICBuZXdfbW9kZSA9PSBXTDEyNzNfQVVESU9fQU5BTE9HKSB7CisJCXIgPSB3bDEyNzNfZm1fd3JpdGVfY21kKGNvcmUsIFdMMTI3M19BVURJT19FTkFCTEUsCisJCQkJCVdMMTI3M19BVURJT19FTkFCTEVfQU5BTE9HKTsKKwkJaWYgKHIpCisJCQlnb3RvIG91dDsKKworCX0gZWxzZSBpZiAoY29yZS0+bW9kZSA9PSBXTDEyNzNfTU9ERV9UWCAmJgorCQkgICBuZXdfbW9kZSA9PSBXTDEyNzNfQVVESU9fRElHSVRBTCkgeworCQlyID0gd2wxMjczX2ZtX3dyaXRlX2NtZChjb3JlLCBXTDEyNzNfSTJTX01PREVfQ09ORklHX1NFVCwKKwkJCQkJY29yZS0+aTJzX21vZGUpOworCQlpZiAocikKKwkJCWdvdG8gb3V0OworCisJCXIgPSB3bDEyNzNfZm1fd3JpdGVfY21kKGNvcmUsIFdMMTI3M19BVURJT19JT19TRVQsCisJCQkJCVdMMTI3M19BVURJT19JT19TRVRfSTJTKTsKKwkJaWYgKHIpCisJCQlnb3RvIG91dDsKKworCX0gZWxzZSBpZiAoY29yZS0+bW9kZSA9PSBXTDEyNzNfTU9ERV9UWCAmJgorCQkgICBuZXdfbW9kZSA9PSBXTDEyNzNfQVVESU9fQU5BTE9HKSB7CisJCXIgPSB3bDEyNzNfZm1fd3JpdGVfY21kKGNvcmUsIFdMMTI3M19BVURJT19JT19TRVQsCisJCQkJCVdMMTI3M19BVURJT19JT19TRVRfQU5BTE9HKTsKKwkJaWYgKHIpCisJCQlnb3RvIG91dDsKKwl9CisKKwljb3JlLT5hdWRpb19tb2RlID0gbmV3X21vZGU7CitvdXQ6CisJcmV0dXJuIHI7Cit9CisKKy8qKgorICogd2wxMjczX2ZtX3NldF92b2x1bWUoKSAtCVNldCB2b2x1bWUuCisgKiBAY29yZToJCQlBIHBvaW50ZXIgdG8gdGhlIGRldmljZSBzdHJ1Y3QuCisgKiBAdm9sdW1lOgkJCVRoZSBuZXcgdm9sdW1lIHZhbHVlLgorICovCitzdGF0aWMgaW50IHdsMTI3M19mbV9zZXRfdm9sdW1lKHN0cnVjdCB3bDEyNzNfY29yZSAqY29yZSwgdW5zaWduZWQgaW50IHZvbHVtZSkKK3sKKwl1MTYgdmFsOworCWludCByOworCisJaWYgKHZvbHVtZSA+IFdMMTI3M19NQVhfVk9MVU1FKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjb3JlLT52b2x1bWUgPT0gdm9sdW1lKQorCQlyZXR1cm4gMDsKKworCXZhbCA9IHZvbHVtZTsKKwlyID0gd2wxMjczX2ZtX3JlYWRfcmVnKGNvcmUsIFdMMTI3M19WT0xVTUVfU0VULCAmdmFsKTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisKKwljb3JlLT52b2x1bWUgPSB2b2x1bWU7CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgV0wxMjczX0ZJRk9fSEFTX0RBVEEoc3RhdHVzKQkoMSA8PCA1ICYgc3RhdHVzKQorI2RlZmluZSBXTDEyNzNfUkRTX0NPUlJFQ1RBQkxFX0VSUk9SCSgxIDw8IDMpCisjZGVmaW5lIFdMMTI3M19SRFNfVU5DT1JSRUNUQUJMRV9FUlJPUgkoMSA8PCA0KQorCitzdGF0aWMgaW50IHdsMTI3M19mbV9yZHMoc3RydWN0IHdsMTI3M19kZXZpY2UgKnJhZGlvKQoreworCXN0cnVjdCB3bDEyNzNfY29yZSAqY29yZSA9IHJhZGlvLT5jb3JlOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBjb3JlLT5jbGllbnQ7CisJdTE2IHZhbDsKKwl1OCBiMCA9IFdMMTI3M19SRFNfREFUQV9HRVQsIHN0YXR1czsKKwlzdHJ1Y3QgdjRsMl9yZHNfZGF0YSByZHMgPSB7IDAsIDAsIDAgfTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2dbXSA9IHsKKwkJeworCQkJLmFkZHIgPSBjbGllbnQtPmFkZHIsCisJCQkuZmxhZ3MgPSAwLAorCQkJLmJ1ZiA9ICZiMCwKKwkJCS5sZW4gPSAxLAorCQl9LAorCQl7CisJCQkuYWRkciA9IGNsaWVudC0+YWRkciwKKwkJCS5mbGFncyA9IEkyQ19NX1JELAorCQkJLmJ1ZiA9ICh1OCAqKSAmcmRzLAorCQkJLmxlbiA9IHNpemVvZihyZHMpLAorCQl9CisJfTsKKwlpbnQgcjsKKworCWlmIChjb3JlLT5tb2RlICE9IFdMMTI3M19NT0RFX1JYKQorCQlyZXR1cm4gMDsKKworCXIgPSB3bDEyNzNfZm1fcmVhZF9yZWcoY29yZSwgV0wxMjczX1JEU19TWU5DX0dFVCwgJnZhbCk7CisJaWYgKHIpCisJCXJldHVybiByOworCisJaWYgKCh2YWwgJiAweDAxKSA9PSAwKSB7CisJCS8qIFJEUyBkZWNvZGVyIG5vdCBzeW5jaHJvbml6ZWQgKi8KKwkJcmV0dXJuIC1FQUdBSU47CisJfQorCisJLyogY29weSBhbGwgZm91ciBSRFMgYmxvY2tzIHRvIGludGVybmFsIGJ1ZmZlciAqLworCWRvIHsKKwkJciA9IGkyY190cmFuc2ZlcihjbGllbnQtPmFkYXB0ZXIsIG1zZywgQVJSQVlfU0laRShtc2cpKTsKKwkJaWYgKHIgIT0gQVJSQVlfU0laRShtc2cpKSB7CisJCQlkZXZfZXJyKHJhZGlvLT5kZXYsIFdMMTI3M19GTV9EUklWRVJfTkFNRQorCQkJCSI6ICVzOiByZWFkX3JkcyBlcnJvciByID09ICVpKVxuIiwKKwkJCQlfX2Z1bmNfXywgcik7CisJCX0KKworCQlzdGF0dXMgPSByZHMuYmxvY2s7CisKKwkJaWYgKCFXTDEyNzNfRklGT19IQVNfREFUQShzdGF0dXMpKQorCQkJYnJlYWs7CisKKwkJLyogY29weSBiaXRzIDAtMiAodGhlIGJsb2NrIElEKSB0byBiaXRzIDMtNSAqLworCQlyZHMuYmxvY2sgPSBWNEwyX1JEU19CTE9DS19NU0sgJiBzdGF0dXM7CisJCXJkcy5ibG9jayB8PSByZHMuYmxvY2sgPDwgMzsKKworCQkvKiBjb3B5IHRoZSBlcnJvciBiaXRzIHRvIHN0YW5kYXJkIHBvc2l0aW9ucyAqLworCQlpZiAoV0wxMjczX1JEU19VTkNPUlJFQ1RBQkxFX0VSUk9SICYgc3RhdHVzKSB7CisJCQlyZHMuYmxvY2sgfD0gVjRMMl9SRFNfQkxPQ0tfRVJST1I7CisJCQlyZHMuYmxvY2sgJj0gflY0TDJfUkRTX0JMT0NLX0NPUlJFQ1RFRDsKKwkJfSBlbHNlIGlmICAoV0wxMjczX1JEU19DT1JSRUNUQUJMRV9FUlJPUiAmIHN0YXR1cykgeworCQkJcmRzLmJsb2NrICY9IH5WNEwyX1JEU19CTE9DS19FUlJPUjsKKwkJCXJkcy5ibG9jayB8PSBWNEwyX1JEU19CTE9DS19DT1JSRUNURUQ7CisJCX0KKworCQkvKiBjb3B5IFJEUyBibG9jayB0byBpbnRlcm5hbCBidWZmZXIgKi8KKwkJbWVtY3B5KCZyYWRpby0+YnVmZmVyW3JhZGlvLT53cl9pbmRleF0sICZyZHMsIFJEU19CTE9DS19TSVpFKTsKKwkJcmFkaW8tPndyX2luZGV4ICs9IDM7CisKKwkJLyogd3JhcCB3cml0ZSBwb2ludGVyICovCisJCWlmIChyYWRpby0+d3JfaW5kZXggPj0gcmFkaW8tPmJ1Zl9zaXplKQorCQkJcmFkaW8tPndyX2luZGV4ID0gMDsKKworCQkvKiBjaGVjayBmb3Igb3ZlcmZsb3cgJiBzdGFydCBvdmVyICovCisJCWlmIChyYWRpby0+d3JfaW5kZXggPT0gcmFkaW8tPnJkX2luZGV4KSB7CisJCQlkZXZfZGJnKHJhZGlvLT5kZXYsICJSRFMgT1ZFUkZMT1ciKTsKKworCQkJcmFkaW8tPnJkX2luZGV4ID0gMDsKKwkJCXJhZGlvLT53cl9pbmRleCA9IDA7CisJCQlicmVhazsKKwkJfQorCX0gd2hpbGUgKFdMMTI3M19GSUZPX0hBU19EQVRBKHN0YXR1cykpOworCisJLyogd2FrZSB1cCByZWFkIHF1ZXVlICovCisJaWYgKHJhZGlvLT53cl9pbmRleCAhPSByYWRpby0+cmRfaW5kZXgpCisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcmFkaW8tPnJlYWRfcXVldWUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCB3bDEyNzNfZm1faXJxX3RocmVhZF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3Qgd2wxMjczX2RldmljZSAqcmFkaW8gPSBkZXZfaWQ7CisJc3RydWN0IHdsMTI3M19jb3JlICpjb3JlID0gcmFkaW8tPmNvcmU7CisJdTE2IGZsYWdzOworCWludCByOworCisJciA9IHdsMTI3M19mbV9yZWFkX3JlZyhjb3JlLCBXTDEyNzNfRkxBR19HRVQsICZmbGFncyk7CisJaWYgKHIpCisJCWdvdG8gb3V0OworCisJaWYgKGZsYWdzICYgV0wxMjczX0JMX0VWRU5UKSB7CisJCXJhZGlvLT5pcnFfcmVjZWl2ZWQgPSBmbGFnczsKKwkJZGV2X2RiZyhyYWRpby0+ZGV2LCAiSVJROiBCTFxuIik7CisJfQorCisJaWYgKGZsYWdzICYgV0wxMjczX1JEU19FVkVOVCkgeworCQltc2xlZXAoMjAwKTsKKworCQl3bDEyNzNfZm1fcmRzKHJhZGlvKTsKKwl9CisKKwlpZiAoZmxhZ3MgJiBXTDEyNzNfQkJMS19FVkVOVCkKKwkJZGV2X2RiZyhyYWRpby0+ZGV2LCAiSVJROiBCQkxLXG4iKTsKKworCWlmIChmbGFncyAmIFdMMTI3M19MU1lOQ19FVkVOVCkKKwkJZGV2X2RiZyhyYWRpby0+ZGV2LCAiSVJROiBMU1lOQ1xuIik7CisKKwlpZiAoZmxhZ3MgJiBXTDEyNzNfTEVWX0VWRU5UKSB7CisJCXUxNiBsZXZlbDsKKworCQlyID0gd2wxMjczX2ZtX3JlYWRfcmVnKGNvcmUsIFdMMTI3M19SU1NJX0xWTF9HRVQsICZsZXZlbCk7CisJCWlmIChyKQorCQkJZ290byBvdXQ7CisKKwkJaWYgKGxldmVsID4gMTQpCisJCQlkZXZfZGJnKHJhZGlvLT5kZXYsICJJUlE6IExFVjogMHgleDA0XG4iLCBsZXZlbCk7CisJfQorCisJaWYgKGZsYWdzICYgV0wxMjczX0lGRlJfRVZFTlQpCisJCWRldl9kYmcocmFkaW8tPmRldiwgIklSUTogSUZGUlxuIik7CisKKwlpZiAoZmxhZ3MgJiBXTDEyNzNfUElfRVZFTlQpCisJCWRldl9kYmcocmFkaW8tPmRldiwgIklSUTogUElcbiIpOworCisJaWYgKGZsYWdzICYgV0wxMjczX1BEX0VWRU5UKQorCQlkZXZfZGJnKHJhZGlvLT5kZXYsICJJUlE6IFBEXG4iKTsKKworCWlmIChmbGFncyAmIFdMMTI3M19TVElDX0VWRU5UKQorCQlkZXZfZGJnKHJhZGlvLT5kZXYsICJJUlE6IFNUSUNcbiIpOworCisJaWYgKGZsYWdzICYgV0wxMjczX01BTF9FVkVOVCkKKwkJZGV2X2RiZyhyYWRpby0+ZGV2LCAiSVJROiBNQUxcbiIpOworCisJaWYgKGZsYWdzICYgV0wxMjczX1BPV19FTkJfRVZFTlQpIHsKKwkJY29tcGxldGUoJnJhZGlvLT5idXN5KTsKKwkJZGV2X2RiZyhyYWRpby0+ZGV2LCAiTk9UIEJVU1lcbiIpOworCQlkZXZfZGJnKHJhZGlvLT5kZXYsICJJUlE6IFBPV19FTkJcbiIpOworCX0KKworCWlmIChmbGFncyAmIFdMMTI3M19TQ0FOX09WRVJfRVZFTlQpCisJCWRldl9kYmcocmFkaW8tPmRldiwgIklSUTogU0NBTl9PVkVSXG4iKTsKKworCWlmIChmbGFncyAmIFdMMTI3M19FUlJPUl9FVkVOVCkKKwkJZGV2X2RiZyhyYWRpby0+ZGV2LCAiSVJROiBFUlJPUlxuIik7CisKKwlpZiAoZmxhZ3MgJiBXTDEyNzNfRlJfRVZFTlQpIHsKKwkJdTE2IGZyZXE7CisKKwkJZGV2X2RiZyhyYWRpby0+ZGV2LCAiSVJROiBGUjpcbiIpOworCisJCWlmIChjb3JlLT5tb2RlID09IFdMMTI3M19NT0RFX1JYKSB7CisJCQlyID0gd2wxMjczX2ZtX3dyaXRlX2NtZChjb3JlLCBXTDEyNzNfVFVORVJfTU9ERV9TRVQsCisJCQkJCQlUVU5FUl9NT0RFX1NUT1BfU0VBUkNIKTsKKwkJCWlmIChyKSB7CisJCQkJZGV2X2VycihyYWRpby0+ZGV2LAorCQkJCQkiJXM6IFRVTkVSX01PREVfU0VUIGZhaWxzOiAlZFxuIiwKKwkJCQkJX19mdW5jX18sIHIpOworCQkJCWdvdG8gb3V0OworCQkJfQorCisJCQlyID0gd2wxMjczX2ZtX3JlYWRfcmVnKGNvcmUsIFdMMTI3M19GUkVRX1NFVCwgJmZyZXEpOworCQkJaWYgKHIpCisJCQkJZ290byBvdXQ7CisKKwkJCWlmIChyYWRpby0+YmFuZCA9PSBXTDEyNzNfQkFORF9KQVBBTikKKwkJCQlyYWRpby0+cnhfZnJlcXVlbmN5ID0gV0wxMjczX0JBTkRfSkFQQU5fTE9XICsKKwkJCQkJZnJlcSAqIDUwOworCQkJZWxzZQorCQkJCXJhZGlvLT5yeF9mcmVxdWVuY3kgPSBXTDEyNzNfQkFORF9PVEhFUl9MT1cgKworCQkJCQlmcmVxICogNTA7CisJCQkvKgorCQkJICogIFRoZSBkcml2ZXIgd29ya3MgYmV0dGVyIHdpdGggdGhpcyBtc2xlZXAsCisJCQkgKiAgdGhlIGRvY3VtZW50YXRpb24gZG9lc24ndCBtZW50aW9uIGl0LgorCQkJICovCisJCQl1c2xlZXBfcmFuZ2UoMTAwMDAsIDE1MDAwKTsKKworCQkJZGV2X2RiZyhyYWRpby0+ZGV2LCAiJWRrSHpcbiIsIHJhZGlvLT5yeF9mcmVxdWVuY3kpOworCisJCX0gZWxzZSB7CisJCQlyID0gd2wxMjczX2ZtX3JlYWRfcmVnKGNvcmUsIFdMMTI3M19DSEFOTF9TRVQsICZmcmVxKTsKKwkJCWlmIChyKQorCQkJCWdvdG8gb3V0OworCisJCQlkZXZfZGJnKHJhZGlvLT5kZXYsICIlZGtIelxuIiwgZnJlcSk7CisJCX0KKwkJZGV2X2RiZyhyYWRpby0+ZGV2LCAiJXM6IE5PVCBCVVNZXG4iLCBfX2Z1bmNfXyk7CisJfQorCitvdXQ6CisJd2wxMjczX2ZtX3dyaXRlX2NtZChjb3JlLCBXTDEyNzNfSU5UX01BU0tfU0VULAorCQkJICAgIHJhZGlvLT5pcnFfZmxhZ3MpOworCWNvbXBsZXRlKCZyYWRpby0+YnVzeSk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjczX2ZtX3NldF90eF9mcmVxKHN0cnVjdCB3bDEyNzNfZGV2aWNlICpyYWRpbywgdW5zaWduZWQgaW50IGZyZXEpCit7CisJc3RydWN0IHdsMTI3M19jb3JlICpjb3JlID0gcmFkaW8tPmNvcmU7CisJaW50IHIgPSAwOworCisJaWYgKGZyZXEgPCBXTDEyNzNfQkFORF9UWF9MT1cpIHsKKwkJZGV2X2VycihyYWRpby0+ZGV2LAorCQkJIkZyZXF1ZW5jeSBvdXQgb2YgcmFuZ2U6ICVkIDwgJWRcbiIsIGZyZXEsCisJCQlXTDEyNzNfQkFORF9UWF9MT1cpOworCQlyZXR1cm4gLUVSQU5HRTsKKwl9CisKKwlpZiAoZnJlcSA+IFdMMTI3M19CQU5EX1RYX0hJR0gpIHsKKwkJZGV2X2VycihyYWRpby0+ZGV2LAorCQkJIkZyZXF1ZW5jeSBvdXQgb2YgcmFuZ2U6ICVkID4gJWRcbiIsIGZyZXEsCisJCQlXTDEyNzNfQkFORF9UWF9ISUdIKTsKKwkJcmV0dXJuIC1FUkFOR0U7CisJfQorCisJLyoKKwkgKiAgVGhlIGRyaXZlciB3b3JrcyBiZXR0ZXIgd2l0aCB0aGlzIHNsZWVwLAorCSAqICB0aGUgZG9jdW1lbnRhdGlvbiBkb2Vzbid0IG1lbnRpb24gaXQuCisJICovCisJdXNsZWVwX3JhbmdlKDUwMDAsIDEwMDAwKTsKKworCWRldl9kYmcocmFkaW8tPmRldiwgIiVzOiBmcmVxOiAlZCBrSHpcbiIsIF9fZnVuY19fLCBmcmVxKTsKKworCS8qIFNldCB0aGUgY3VycmVudCB0eCBjaGFubmVsICovCisJciA9IHdsMTI3M19mbV93cml0ZV9jbWQoY29yZSwgV0wxMjczX0NIQU5MX1NFVCwgZnJlcSAvIDEwKTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisKKwlJTklUX0NPTVBMRVRJT04ocmFkaW8tPmJ1c3kpOworCisJLyogd2FpdCBmb3IgdGhlIEZSIElSUSAqLworCXIgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJnJhZGlvLT5idXN5LCBtc2Vjc190b19qaWZmaWVzKDIwMDApKTsKKwlpZiAoIXIpCisJCXJldHVybiAtRVRJTUVET1VUOworCisJZGV2X2RiZyhyYWRpby0+ZGV2LCAiV0wxMjczX0NIQU5MX1NFVDogJWRcbiIsIHIpOworCisJLyogRW5hYmxlIHRoZSBvdXRwdXQgcG93ZXIgKi8KKwlyID0gd2wxMjczX2ZtX3dyaXRlX2NtZChjb3JlLCBXTDEyNzNfUE9XRVJfRU5CX1NFVCwgMSk7CisJaWYgKHIpCisJCXJldHVybiByOworCisJSU5JVF9DT01QTEVUSU9OKHJhZGlvLT5idXN5KTsKKworCS8qIHdhaXQgZm9yIHRoZSBQT1dFUl9FTkIgSVJRICovCisJciA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmcmFkaW8tPmJ1c3ksIG1zZWNzX3RvX2ppZmZpZXMoMTAwMCkpOworCWlmICghcikKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisKKwlyYWRpby0+dHhfZnJlcXVlbmN5ID0gZnJlcTsKKwlkZXZfZGJnKHJhZGlvLT5kZXYsICJXTDEyNzNfUE9XRVJfRU5CX1NFVDogJWRcbiIsIHIpOworCisJcmV0dXJuCTA7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjczX2ZtX3NldF9yeF9mcmVxKHN0cnVjdCB3bDEyNzNfZGV2aWNlICpyYWRpbywgdW5zaWduZWQgaW50IGZyZXEpCit7CisJc3RydWN0IHdsMTI3M19jb3JlICpjb3JlID0gcmFkaW8tPmNvcmU7CisJaW50IHIsIGY7CisKKwlpZiAoZnJlcSA8IHJhZGlvLT5yYW5nZWxvdykgeworCQlkZXZfZXJyKHJhZGlvLT5kZXYsCisJCQkiRnJlcXVlbmN5IG91dCBvZiByYW5nZTogJWQgPCAlZFxuIiwgZnJlcSwKKwkJCXJhZGlvLT5yYW5nZWxvdyk7CisJCXIgPSAtRVJBTkdFOworCQlnb3RvIGVycjsKKwl9CisKKwlpZiAoZnJlcSA+IHJhZGlvLT5yYW5nZWhpZ2gpIHsKKwkJZGV2X2VycihyYWRpby0+ZGV2LAorCQkJIkZyZXF1ZW5jeSBvdXQgb2YgcmFuZ2U6ICVkID4gJWRcbiIsIGZyZXEsCisJCQlyYWRpby0+cmFuZ2VoaWdoKTsKKwkJciA9IC1FUkFOR0U7CisJCWdvdG8gZXJyOworCX0KKworCWRldl9kYmcocmFkaW8tPmRldiwgIiVzOiAlZGtIelxuIiwgX19mdW5jX18sIGZyZXEpOworCisJd2wxMjczX2ZtX3dyaXRlX2NtZChjb3JlLCBXTDEyNzNfSU5UX01BU0tfU0VULCByYWRpby0+aXJxX2ZsYWdzKTsKKworCWlmIChyYWRpby0+YmFuZCA9PSBXTDEyNzNfQkFORF9KQVBBTikKKwkJZiA9IChmcmVxIC0gV0wxMjczX0JBTkRfSkFQQU5fTE9XKSAvIDUwOworCWVsc2UKKwkJZiA9IChmcmVxIC0gV0wxMjczX0JBTkRfT1RIRVJfTE9XKSAvIDUwOworCisJciA9IHdsMTI3M19mbV93cml0ZV9jbWQoY29yZSwgV0wxMjczX0ZSRVFfU0VULCBmKTsKKwlpZiAocikgeworCQlkZXZfZXJyKHJhZGlvLT5kZXYsICJGUkVRX1NFVCBmYWlsc1xuIik7CisJCWdvdG8gZXJyOworCX0KKworCXIgPSB3bDEyNzNfZm1fd3JpdGVfY21kKGNvcmUsIFdMMTI3M19UVU5FUl9NT0RFX1NFVCwgVFVORVJfTU9ERV9QUkVTRVQpOworCWlmIChyKSB7CisJCWRldl9lcnIocmFkaW8tPmRldiwgIlRVTkVSX01PREVfU0VUIGZhaWxzXG4iKTsKKwkJZ290byBlcnI7CisJfQorCisJSU5JVF9DT01QTEVUSU9OKHJhZGlvLT5idXN5KTsKKworCXIgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJnJhZGlvLT5idXN5LCBtc2Vjc190b19qaWZmaWVzKDIwMDApKTsKKwlpZiAoIXIpIHsKKwkJZGV2X2VycihyYWRpby0+ZGV2LCAiJXM6IFRJTUVPVVRcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisJfQorCisJcmFkaW8tPnJkX2luZGV4ID0gMDsKKwlyYWRpby0+d3JfaW5kZXggPSAwOworCXJhZGlvLT5yeF9mcmVxdWVuY3kgPSBmcmVxOworCXJldHVybiAwOworZXJyOgorCXJldHVybiByOworfQorCitzdGF0aWMgaW50IHdsMTI3M19mbV9nZXRfZnJlcShzdHJ1Y3Qgd2wxMjczX2RldmljZSAqcmFkaW8pCit7CisJc3RydWN0IHdsMTI3M19jb3JlICpjb3JlID0gcmFkaW8tPmNvcmU7CisJdW5zaWduZWQgaW50IGZyZXE7CisJdTE2IGY7CisJaW50IHI7CisKKwlpZiAoY29yZS0+bW9kZSA9PSBXTDEyNzNfTU9ERV9SWCkgeworCQlyID0gd2wxMjczX2ZtX3JlYWRfcmVnKGNvcmUsIFdMMTI3M19GUkVRX1NFVCwgJmYpOworCQlpZiAocikKKwkJCXJldHVybiByOworCisJCWRldl9kYmcocmFkaW8tPmRldiwgIkZyZXEgZ2V0OiAweCUwNHhcbiIsIGYpOworCQlpZiAocmFkaW8tPmJhbmQgPT0gV0wxMjczX0JBTkRfSkFQQU4pCisJCQlmcmVxID0gV0wxMjczX0JBTkRfSkFQQU5fTE9XICsgNTAgKiBmOworCQllbHNlCisJCQlmcmVxID0gV0wxMjczX0JBTkRfT1RIRVJfTE9XICsgNTAgKiBmOworCX0gZWxzZSB7CisJCXIgPSB3bDEyNzNfZm1fcmVhZF9yZWcoY29yZSwgV0wxMjczX0NIQU5MX1NFVCwgJmYpOworCQlpZiAocikKKwkJCXJldHVybiByOworCisJCWZyZXEgPSBmICogMTA7CisJfQorCisJcmV0dXJuIGZyZXE7Cit9CisKKy8qKgorICogd2wxMjczX2ZtX3VwbG9hZF9maXJtd2FyZV9wYXRjaCgpIC0JVXBsb2FkIHRoZSBmaXJtd2FyZS4KKyAqIEByYWRpbzoJCQkJQSBwb2ludGVyIHRvIHRoZSBkZXZpY2Ugc3RydWN0LgorICoKKyAqIFRoZSBmaXJtd2FyZSBmaWxlIGNvbnNpc3RzIG9mIGFycmF5cyBvZiBieXRlcyB3aGVyZSB0aGUgZmlyc3QgYnl0ZQorICogZ2l2ZXMgdGhlIGFycmF5IGxlbmd0aC4gVGhlIGZpcnN0IGJ5dGUgaW4gdGhlIGZpbGUgZ2l2ZXMgdGhlCisgKiBudW1iZXIgb2YgdGhlc2UgYXJyYXlzLgorICovCitzdGF0aWMgaW50IHdsMTI3M19mbV91cGxvYWRfZmlybXdhcmVfcGF0Y2goc3RydWN0IHdsMTI3M19kZXZpY2UgKnJhZGlvKQoreworCXN0cnVjdCB3bDEyNzNfY29yZSAqY29yZSA9IHJhZGlvLT5jb3JlOworCXVuc2lnbmVkIGludCBwYWNrZXRfbnVtOworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZndfcDsKKwljb25zdCBjaGFyICpmd19uYW1lID0gInJhZGlvLXdsMTI3My1mdy5iaW4iOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHJhZGlvLT5kZXY7CisJX191OCAqcHRyOworCWludCByOworCisJZGV2X2RiZyhkZXYsICIlczpcbiIsIF9fZnVuY19fKTsKKworCS8qCisJICogVXBsb2FkaW5nIHRoZSBmaXJtd2FyZSBwYXRjaCBpcyBub3QgYWx3YXlzIG5lY2Vzc2FyeSwKKwkgKiBzbyB3ZSBvbmx5IHByaW50IGFuIGluZm8gbWVzc2FnZS4KKwkgKi8KKwlpZiAocmVxdWVzdF9maXJtd2FyZSgmZndfcCwgZndfbmFtZSwgZGV2KSkgeworCQlkZXZfaW5mbyhkZXYsICIlcyAtICVzIG5vdCBmb3VuZFxuIiwgX19mdW5jX18sIGZ3X25hbWUpOworCisJCXJldHVybiAwOworCX0KKworCXB0ciA9IChfX3U4ICopIGZ3X3AtPmRhdGE7CisJcGFja2V0X251bSA9IHB0clswXTsKKwlkZXZfZGJnKGRldiwgIiVzOiBwYWNrZXRzOiAlZFxuIiwgX19mdW5jX18sIHBhY2tldF9udW0pOworCisJciA9IHdsMTI3M19mbV93cml0ZV9mdyhjb3JlLCBwdHIgKyAxLCBwYWNrZXRfbnVtKTsKKwlpZiAocikgeworCQlkZXZfZXJyKGRldiwgIkZXIHVwbG9hZCBlcnJvcjogJWRcbiIsIHIpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBpZ25vcmUgcG9zc2libGUgZXJyb3IgaGVyZSAqLworCXdsMTI3M19mbV93cml0ZV9jbWQoY29yZSwgV0wxMjczX1JFU0VULCAwKTsKKworCWRldl9kYmcoZGV2LCAiJXMgLSBkb3dubG9hZCBPSywgcjogJWRcbiIsIF9fZnVuY19fLCByKTsKK291dDoKKwlyZWxlYXNlX2Zpcm13YXJlKGZ3X3ApOworCXJldHVybiByOworfQorCitzdGF0aWMgaW50IHdsMTI3M19mbV9zdG9wKHN0cnVjdCB3bDEyNzNfZGV2aWNlICpyYWRpbykKK3sKKwlzdHJ1Y3Qgd2wxMjczX2NvcmUgKmNvcmUgPSByYWRpby0+Y29yZTsKKworCWlmIChjb3JlLT5tb2RlID09IFdMMTI3M19NT0RFX1JYKSB7CisJCWludCByID0gd2wxMjczX2ZtX3dyaXRlX2NtZChjb3JlLCBXTDEyNzNfUE9XRVJfU0VULAorCQkJCSAgICBXTDEyNzNfUE9XRVJfU0VUX09GRik7CisJCWlmIChyKQorCQkJZGV2X2VycihyYWRpby0+ZGV2LCAiJXM6IFBPV0VSX1NFVCBmYWlsczogJWRcbiIsCisJCQkJX19mdW5jX18sIHIpOworCX0gZWxzZSBpZiAoY29yZS0+bW9kZSA9PSBXTDEyNzNfTU9ERV9UWCkgeworCQlpbnQgciA9IHdsMTI3M19mbV93cml0ZV9jbWQoY29yZSwgV0wxMjczX1BVUERfU0VULAorCQkJCQkgICAgV0wxMjczX1BVUERfU0VUX09GRik7CisJCWlmIChyKQorCQkJZGV2X2VycihyYWRpby0+ZGV2LAorCQkJCSIlczogUFVQRF9TRVQgZmFpbHM6ICVkXG4iLCBfX2Z1bmNfXywgcik7CisJfQorCisJaWYgKGNvcmUtPnBkYXRhLT5kaXNhYmxlKSB7CisJCWNvcmUtPnBkYXRhLT5kaXNhYmxlKCk7CisJCWRldl9kYmcocmFkaW8tPmRldiwgIkJhY2sgdG8gcmVzZXRcbiIpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdsMTI3M19mbV9zdGFydChzdHJ1Y3Qgd2wxMjczX2RldmljZSAqcmFkaW8sIGludCBuZXdfbW9kZSkKK3sKKwlzdHJ1Y3Qgd2wxMjczX2NvcmUgKmNvcmUgPSByYWRpby0+Y29yZTsKKwlzdHJ1Y3Qgd2wxMjczX2ZtX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gY29yZS0+cGRhdGE7CisJc3RydWN0IGRldmljZSAqZGV2ID0gcmFkaW8tPmRldjsKKwlpbnQgciA9IC1FSU5WQUw7CisKKwlpZiAocGRhdGEtPmVuYWJsZSAmJiBjb3JlLT5tb2RlID09IFdMMTI3M19NT0RFX09GRikgeworCQlkZXZfZGJnKHJhZGlvLT5kZXYsICJPdXQgb2YgcmVzZXRcbiIpOworCisJCXBkYXRhLT5lbmFibGUoKTsKKwkJbXNsZWVwKDI1MCk7CisJfQorCisJaWYgKG5ld19tb2RlID09IFdMMTI3M19NT0RFX1JYKSB7CisJCXUxNiB2YWwgPSBXTDEyNzNfUE9XRVJfU0VUX0ZNOworCisJCWlmIChyYWRpby0+cmRzX29uKQorCQkJdmFsIHw9IFdMMTI3M19QT1dFUl9TRVRfUkRTOworCisJCS8qIElmIHRoaXMgZmFpbHMgdHJ5IGFnYWluICovCisJCXIgPSB3bDEyNzNfZm1fd3JpdGVfY21kKGNvcmUsIFdMMTI3M19QT1dFUl9TRVQsIHZhbCk7CisJCWlmIChyKSB7CisJCQltc2xlZXAoMTAwKTsKKworCQkJciA9IHdsMTI3M19mbV93cml0ZV9jbWQoY29yZSwgV0wxMjczX1BPV0VSX1NFVCwgdmFsKTsKKwkJCWlmIChyKSB7CisJCQkJZGV2X2VycihkZXYsICIlczogUE9XRVJfU0VUIGZhaWxzXG4iLCBfX2Z1bmNfXyk7CisJCQkJZ290byBmYWlsOworCQkJfQorCQl9CisKKwkJLyogcmRzIGJ1ZmZlciBjb25maWd1cmF0aW9uICovCisJCXJhZGlvLT53cl9pbmRleCA9IDA7CisJCXJhZGlvLT5yZF9pbmRleCA9IDA7CisKKwl9IGVsc2UgaWYgKG5ld19tb2RlID09IFdMMTI3M19NT0RFX1RYKSB7CisJCS8qIElmIHRoaXMgZmFpbHMgdHJ5IGFnYWluIG9uY2UgKi8KKwkJciA9IHdsMTI3M19mbV93cml0ZV9jbWQoY29yZSwgV0wxMjczX1BVUERfU0VULAorCQkJCQlXTDEyNzNfUFVQRF9TRVRfT04pOworCQlpZiAocikgeworCQkJbXNsZWVwKDEwMCk7CisJCQlyID0gd2wxMjczX2ZtX3dyaXRlX2NtZChjb3JlLCBXTDEyNzNfUFVQRF9TRVQsCisJCQkJCVdMMTI3M19QVVBEX1NFVF9PTik7CisJCQlpZiAocikgeworCQkJCWRldl9lcnIoZGV2LCAiJXM6IFBVUERfU0VUIGZhaWxzXG4iLCBfX2Z1bmNfXyk7CisJCQkJZ290byBmYWlsOworCQkJfQorCQl9CisKKwkJaWYgKHJhZGlvLT5yZHNfb24pCisJCQlyID0gd2wxMjczX2ZtX3dyaXRlX2NtZChjb3JlLCBXTDEyNzNfUkRTX0RBVEFfRU5CLCAxKTsKKwkJZWxzZQorCQkJciA9IHdsMTI3M19mbV93cml0ZV9jbWQoY29yZSwgV0wxMjczX1JEU19EQVRBX0VOQiwgMCk7CisJfSBlbHNlIHsKKwkJZGV2X3dhcm4oZGV2LCAiJXM6IElsbGVnYWwgbW9kZS5cbiIsIF9fZnVuY19fKTsKKwl9CisKKwlpZiAoY29yZS0+bW9kZSA9PSBXTDEyNzNfTU9ERV9PRkYpIHsKKwkJciA9IHdsMTI3M19mbV91cGxvYWRfZmlybXdhcmVfcGF0Y2gocmFkaW8pOworCQlpZiAocikKKwkJCWRldl93YXJuKGRldiwgIkZpcm13YXJlIHVwbG9hZCBmYWlsZWQuXG4iKTsKKworCQkvKgorCQkgKiBTb21ldGltZXMgdGhlIGNoaXAgaXMgaW4gYSB3cm9uZyBwb3dlciBzdGF0ZSBhdCB0aGlzIHBvaW50LgorCQkgKiBTbyB3ZSBzZXQgdGhlIHBvd2VyIG9uY2UgYWdhaW4uCisJCSAqLworCQlpZiAobmV3X21vZGUgPT0gV0wxMjczX01PREVfUlgpIHsKKwkJCXUxNiB2YWwgPSBXTDEyNzNfUE9XRVJfU0VUX0ZNOworCisJCQlpZiAocmFkaW8tPnJkc19vbikKKwkJCQl2YWwgfD0gV0wxMjczX1BPV0VSX1NFVF9SRFM7CisKKwkJCXIgPSB3bDEyNzNfZm1fd3JpdGVfY21kKGNvcmUsIFdMMTI3M19QT1dFUl9TRVQsIHZhbCk7CisJCQlpZiAocikgeworCQkJCWRldl9lcnIoZGV2LCAiJXM6IFBPV0VSX1NFVCBmYWlsc1xuIiwgX19mdW5jX18pOworCQkJCWdvdG8gZmFpbDsKKwkJCX0KKwkJfSBlbHNlIGlmIChuZXdfbW9kZSA9PSBXTDEyNzNfTU9ERV9UWCkgeworCQkJciA9IHdsMTI3M19mbV93cml0ZV9jbWQoY29yZSwgV0wxMjczX1BVUERfU0VULAorCQkJCQkJV0wxMjczX1BVUERfU0VUX09OKTsKKwkJCWlmIChyKSB7CisJCQkJZGV2X2VycihkZXYsICIlczogUFVQRF9TRVQgZmFpbHNcbiIsIF9fZnVuY19fKTsKKwkJCQlnb3RvIGZhaWw7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK2ZhaWw6CisJaWYgKHBkYXRhLT5kaXNhYmxlKQorCQlwZGF0YS0+ZGlzYWJsZSgpOworCisJZGV2X2RiZyhkZXYsICIlczogcmV0dXJuOiAlZFxuIiwgX19mdW5jX18sIHIpOworCXJldHVybiByOworfQorCitzdGF0aWMgaW50IHdsMTI3M19mbV9zdXNwZW5kKHN0cnVjdCB3bDEyNzNfZGV2aWNlICpyYWRpbykKK3sKKwlzdHJ1Y3Qgd2wxMjczX2NvcmUgKmNvcmUgPSByYWRpby0+Y29yZTsKKwlpbnQgciA9IDA7CisKKwkvKiBDYW5ub3QgZ28gZnJvbSBPRkYgdG8gU1VTUEVOREVEICovCisJaWYgKGNvcmUtPm1vZGUgPT0gV0wxMjczX01PREVfUlgpCisJCXIgPSB3bDEyNzNfZm1fd3JpdGVfY21kKGNvcmUsIFdMMTI3M19QT1dFUl9TRVQsCisJCQkJV0wxMjczX1BPV0VSX1NFVF9SRVRFTlRJT04pOworCWVsc2UgaWYgKGNvcmUtPm1vZGUgPT0gV0wxMjczX01PREVfVFgpCisJCXIgPSB3bDEyNzNfZm1fd3JpdGVfY21kKGNvcmUsIFdMMTI3M19QVVBEX1NFVCwKKwkJCQlXTDEyNzNfUFVQRF9TRVRfUkVURU5USU9OKTsKKwllbHNlCisJCXIgPSAtRUlOVkFMOworCisJaWYgKHIpIHsKKwkJZGV2X2VycihyYWRpby0+ZGV2LCAiJXM6IFBPV0VSX1NFVCBmYWlsczogJWRcbiIsIF9fZnVuY19fLCByKTsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjczX2ZtX3NldF9tb2RlKHN0cnVjdCB3bDEyNzNfZGV2aWNlICpyYWRpbywgaW50IG1vZGUpCit7CisJc3RydWN0IHdsMTI3M19jb3JlICpjb3JlID0gcmFkaW8tPmNvcmU7CisJc3RydWN0IGRldmljZSAqZGV2ID0gcmFkaW8tPmRldjsKKwlpbnQgb2xkX21vZGU7CisJaW50IHI7CisKKwlkZXZfZGJnKGRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisJZGV2X2RiZyhkZXYsICJGb3JiaWRkZW4gbW9kZXM6IDB4JTAyeFxuIiwgcmFkaW8tPmZvcmJpZGRlbik7CisKKwlvbGRfbW9kZSA9IGNvcmUtPm1vZGU7CisJaWYgKG1vZGUgJiByYWRpby0+Zm9yYmlkZGVuKSB7CisJCXIgPSAtRVBFUk07CisJCWdvdG8gb3V0OworCX0KKworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgV0wxMjczX01PREVfUlg6CisJY2FzZSBXTDEyNzNfTU9ERV9UWDoKKwkJciA9IHdsMTI3M19mbV9zdGFydChyYWRpbywgbW9kZSk7CisJCWlmIChyKSB7CisJCQlkZXZfZXJyKGRldiwgIiVzOiBDYW5ub3Qgc3RhcnQuXG4iLCBfX2Z1bmNfXyk7CisJCQl3bDEyNzNfZm1fc3RvcChyYWRpbyk7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCWNvcmUtPm1vZGUgPSBtb2RlOworCQlyID0gd2wxMjczX2ZtX3dyaXRlX2NtZChjb3JlLCBXTDEyNzNfSU5UX01BU0tfU0VULAorCQkJCQlyYWRpby0+aXJxX2ZsYWdzKTsKKwkJaWYgKHIpIHsKKwkJCWRldl9lcnIoZGV2LCAiSU5UX01BU0tfU0VUIGZhaWxzLlxuIik7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCS8qIHJlbWVtYmVyIHByZXZpb3VzIHNldHRpbmdzICovCisJCWlmIChtb2RlID09IFdMMTI3M19NT0RFX1JYKSB7CisJCQlyID0gd2wxMjczX2ZtX3NldF9yeF9mcmVxKHJhZGlvLCByYWRpby0+cnhfZnJlcXVlbmN5KTsKKwkJCWlmIChyKSB7CisJCQkJZGV2X2VycihkZXYsICJzZXQgZnJlcSBmYWlsczogJWQuXG4iLCByKTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKworCQkJciA9IGNvcmUtPnNldF92b2x1bWUoY29yZSwgY29yZS0+dm9sdW1lKTsKKwkJCWlmIChyKSB7CisJCQkJZGV2X2VycihkZXYsICJzZXQgdm9sdW1lIGZhaWxzOiAlZC5cbiIsIHIpOworCQkJCWdvdG8gb3V0OworCQkJfQorCisJCQlkZXZfZGJnKGRldiwgIiVzOiBTZXQgdm9sOiAlZC5cbiIsIF9fZnVuY19fLAorCQkJCWNvcmUtPnZvbHVtZSk7CisJCX0gZWxzZSB7CisJCQlyID0gd2wxMjczX2ZtX3NldF90eF9mcmVxKHJhZGlvLCByYWRpby0+dHhfZnJlcXVlbmN5KTsKKwkJCWlmIChyKSB7CisJCQkJZGV2X2VycihkZXYsICJzZXQgZnJlcSBmYWlsczogJWQuXG4iLCByKTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJfQorCisJCWRldl9kYmcocmFkaW8tPmRldiwgIiVzOiBTZXQgYXVkaW8gbW9kZS5cbiIsIF9fZnVuY19fKTsKKworCQlyID0gY29yZS0+c2V0X2F1ZGlvKGNvcmUsIGNvcmUtPmF1ZGlvX21vZGUpOworCQlpZiAocikKKwkJCWRldl9lcnIoZGV2LCAiQ2Fubm90IHNldCBhdWRpbyBtb2RlLlxuIik7CisJCWJyZWFrOworCisJY2FzZSBXTDEyNzNfTU9ERV9PRkY6CisJCXIgPSB3bDEyNzNfZm1fc3RvcChyYWRpbyk7CisJCWlmIChyKQorCQkJZGV2X2VycihkZXYsICIlczogT2ZmIGZhaWxzOiAlZFxuIiwgX19mdW5jX18sIHIpOworCQllbHNlCisJCQljb3JlLT5tb2RlID0gV0wxMjczX01PREVfT0ZGOworCisJCWJyZWFrOworCisJY2FzZSBXTDEyNzNfTU9ERV9TVVNQRU5ERUQ6CisJCXIgPSB3bDEyNzNfZm1fc3VzcGVuZChyYWRpbyk7CisJCWlmIChyKQorCQkJZGV2X2VycihkZXYsICIlczogU3VzcGVuZCBmYWlsczogJWRcbiIsIF9fZnVuY19fLCByKTsKKwkJZWxzZQorCQkJY29yZS0+bW9kZSA9IFdMMTI3M19NT0RFX1NVU1BFTkRFRDsKKworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWRldl9lcnIoZGV2LCAiJXM6IFVua25vd24gbW9kZTogJWRcbiIsIF9fZnVuY19fLCBtb2RlKTsKKwkJciA9IC1FSU5WQUw7CisJCWJyZWFrOworCX0KK291dDoKKwlpZiAocikKKwkJY29yZS0+bW9kZSA9IG9sZF9tb2RlOworCisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjczX2ZtX3NldF9zZWVrKHN0cnVjdCB3bDEyNzNfZGV2aWNlICpyYWRpbywKKwkJCSAgICAgIHVuc2lnbmVkIGludCB3cmFwX2Fyb3VuZCwKKwkJCSAgICAgIHVuc2lnbmVkIGludCBzZWVrX3Vwd2FyZCwKKwkJCSAgICAgIGludCBsZXZlbCkKK3sKKwlzdHJ1Y3Qgd2wxMjczX2NvcmUgKmNvcmUgPSByYWRpby0+Y29yZTsKKwlpbnQgciA9IDA7CisJdW5zaWduZWQgaW50IGRpciA9IChzZWVrX3Vwd2FyZCA9PSAwKSA/IDAgOiAxOworCXVuc2lnbmVkIGludCBmOworCisJZiA9IHJhZGlvLT5yeF9mcmVxdWVuY3k7CisJZGV2X2RiZyhyYWRpby0+ZGV2LCAicnhfZnJlcXVlbmN5OiAlZFxuIiwgZik7CisKKwlpZiAoZGlyICYmIGYgKyByYWRpby0+c3BhY2luZyA8PSByYWRpby0+cmFuZ2VoaWdoKQorCQlyID0gd2wxMjczX2ZtX3NldF9yeF9mcmVxKHJhZGlvLCBmICsgcmFkaW8tPnNwYWNpbmcpOworCWVsc2UgaWYgKGRpciAmJiB3cmFwX2Fyb3VuZCkKKwkJciA9IHdsMTI3M19mbV9zZXRfcnhfZnJlcShyYWRpbywgcmFkaW8tPnJhbmdlbG93KTsKKwllbHNlIGlmIChmIC0gcmFkaW8tPnNwYWNpbmcgPj0gcmFkaW8tPnJhbmdlbG93KQorCQlyID0gd2wxMjczX2ZtX3NldF9yeF9mcmVxKHJhZGlvLCBmIC0gcmFkaW8tPnNwYWNpbmcpOworCWVsc2UgaWYgKHdyYXBfYXJvdW5kKQorCQlyID0gd2wxMjczX2ZtX3NldF9yeF9mcmVxKHJhZGlvLCByYWRpby0+cmFuZ2VoaWdoKTsKKworCWlmIChyKQorCQlnb3RvIG91dDsKKworCWlmIChsZXZlbCA8IFNDSEFSX01JTiB8fCBsZXZlbCA+IFNDSEFSX01BWCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlJTklUX0NPTVBMRVRJT04ocmFkaW8tPmJ1c3kpOworCWRldl9kYmcocmFkaW8tPmRldiwgIiVzOiBCVVNZXG4iLCBfX2Z1bmNfXyk7CisKKwlyID0gd2wxMjczX2ZtX3dyaXRlX2NtZChjb3JlLCBXTDEyNzNfSU5UX01BU0tfU0VULCByYWRpby0+aXJxX2ZsYWdzKTsKKwlpZiAocikKKwkJZ290byBvdXQ7CisKKwlkZXZfZGJnKHJhZGlvLT5kZXYsICIlc1xuIiwgX19mdW5jX18pOworCisJciA9IHdsMTI3M19mbV93cml0ZV9jbWQoY29yZSwgV0wxMjczX1NFQVJDSF9MVkxfU0VULCBsZXZlbCk7CisJaWYgKHIpCisJCWdvdG8gb3V0OworCisJciA9IHdsMTI3M19mbV93cml0ZV9jbWQoY29yZSwgV0wxMjczX1NFQVJDSF9ESVJfU0VULCBkaXIpOworCWlmIChyKQorCQlnb3RvIG91dDsKKworCXIgPSB3bDEyNzNfZm1fd3JpdGVfY21kKGNvcmUsIFdMMTI3M19UVU5FUl9NT0RFX1NFVCwKKwkJCQlUVU5FUl9NT0RFX0FVVE9fU0VFSyk7CisJaWYgKHIpCisJCWdvdG8gb3V0OworCisJd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZyYWRpby0+YnVzeSwgbXNlY3NfdG9famlmZmllcygxMDAwKSk7CisJaWYgKCEocmFkaW8tPmlycV9yZWNlaXZlZCAmIFdMMTI3M19CTF9FVkVOVCkpCisJCWdvdG8gb3V0OworCisJcmFkaW8tPmlycV9yZWNlaXZlZCAmPSB+V0wxMjczX0JMX0VWRU5UOworCisJaWYgKCF3cmFwX2Fyb3VuZCkKKwkJZ290byBvdXQ7CisKKwkvKiBXcmFwIGFyb3VuZCAqLworCWRldl9kYmcocmFkaW8tPmRldiwgIldyYXAgYXJvdW5kIGluIEhXIHNlZWsuXG4iKTsKKworCWlmIChzZWVrX3Vwd2FyZCkKKwkJZiA9IHJhZGlvLT5yYW5nZWxvdzsKKwllbHNlCisJCWYgPSByYWRpby0+cmFuZ2VoaWdoOworCisJciA9IHdsMTI3M19mbV9zZXRfcnhfZnJlcShyYWRpbywgZik7CisJaWYgKHIpCisJCWdvdG8gb3V0OworCisJSU5JVF9DT01QTEVUSU9OKHJhZGlvLT5idXN5KTsKKwlkZXZfZGJnKHJhZGlvLT5kZXYsICIlczogQlVTWVxuIiwgX19mdW5jX18pOworCisJciA9IHdsMTI3M19mbV93cml0ZV9jbWQoY29yZSwgV0wxMjczX1RVTkVSX01PREVfU0VULAorCQkJCVRVTkVSX01PREVfQVVUT19TRUVLKTsKKwlpZiAocikKKwkJZ290byBvdXQ7CisKKwl3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJnJhZGlvLT5idXN5LCBtc2Vjc190b19qaWZmaWVzKDEwMDApKTsKK291dDoKKwlkZXZfZGJnKHJhZGlvLT5kZXYsICIlczogRXJyOiAlZFxuIiwgX19mdW5jX18sIHIpOworCXJldHVybiByOworfQorCisvKioKKyAqIHdsMTI3M19mbV9nZXRfdHhfY3R1bmUoKSAtCUdldCB0aGUgVFggdHVuaW5nIGNhcGFjaXRvciB2YWx1ZS4KKyAqIEByYWRpbzoJCQlBIHBvaW50ZXIgdG8gdGhlIGRldmljZSBzdHJ1Y3QuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgd2wxMjczX2ZtX2dldF90eF9jdHVuZShzdHJ1Y3Qgd2wxMjczX2RldmljZSAqcmFkaW8pCit7CisJc3RydWN0IHdsMTI3M19jb3JlICpjb3JlID0gcmFkaW8tPmNvcmU7CisJc3RydWN0IGRldmljZSAqZGV2ID0gcmFkaW8tPmRldjsKKwl1MTYgdmFsOworCWludCByOworCisJaWYgKGNvcmUtPm1vZGUgPT0gV0wxMjczX01PREVfT0ZGIHx8CisJICAgIGNvcmUtPm1vZGUgPT0gV0wxMjczX01PREVfU1VTUEVOREVEKQorCQlyZXR1cm4gLUVQRVJNOworCisJciA9IHdsMTI3M19mbV9yZWFkX3JlZyhjb3JlLCBXTDEyNzNfUkVBRF9GTUFOVF9UVU5FX1ZBTFVFLCAmdmFsKTsKKwlpZiAocikgeworCQlkZXZfZXJyKGRldiwgIiVzOiByZWFkIGVycm9yOiAlZFxuIiwgX19mdW5jX18sIHIpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlyZXR1cm4gdmFsOworfQorCisvKioKKyAqIHdsMTI3M19mbV9zZXRfcHJlZW1waGFzaXMoKSAtIFNldCB0aGUgVFggcHJlLWVtcGhhc2lzIHZhbHVlLgorICogQHJhZGlvOgkJCSBBIHBvaW50ZXIgdG8gdGhlIGRldmljZSBzdHJ1Y3QuCisgKiBAcHJlZW1waGFzaXM6CQkgVGhlIG5ldyBwcmUtYW1waGFzaXMgdmFsdWUuCisgKgorICogUG9zc2libGUgcHJlLWVtcGhhc2lzIHZhbHVlcyBhcmU6IFY0TDJfUFJFRU1QSEFTSVNfRElTQUJMRUQsCisgKiBWNEwyX1BSRUVNUEhBU0lTXzUwX3VTIGFuZCBWNEwyX1BSRUVNUEhBU0lTXzc1X3VTLgorICovCitzdGF0aWMgaW50IHdsMTI3M19mbV9zZXRfcHJlZW1waGFzaXMoc3RydWN0IHdsMTI3M19kZXZpY2UgKnJhZGlvLAorCQkJCSAgICAgdW5zaWduZWQgaW50IHByZWVtcGhhc2lzKQoreworCXN0cnVjdCB3bDEyNzNfY29yZSAqY29yZSA9IHJhZGlvLT5jb3JlOworCWludCByOworCXUxNiBlbTsKKworCWlmIChjb3JlLT5tb2RlID09IFdMMTI3M19NT0RFX09GRiB8fAorCSAgICBjb3JlLT5tb2RlID09IFdMMTI3M19NT0RFX1NVU1BFTkRFRCkKKwkJcmV0dXJuIC1FUEVSTTsKKworCW11dGV4X2xvY2soJmNvcmUtPmxvY2spOworCisJc3dpdGNoIChwcmVlbXBoYXNpcykgeworCWNhc2UgVjRMMl9QUkVFTVBIQVNJU19ESVNBQkxFRDoKKwkJZW0gPSAxOworCQlicmVhazsKKwljYXNlIFY0TDJfUFJFRU1QSEFTSVNfNTBfdVM6CisJCWVtID0gMDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX1BSRUVNUEhBU0lTXzc1X3VTOgorCQllbSA9IDI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwlyID0gd2wxMjczX2ZtX3dyaXRlX2NtZChjb3JlLCBXTDEyNzNfUFJFTVBIX1NFVCwgZW0pOworCWlmIChyKQorCQlnb3RvIG91dDsKKworCXJhZGlvLT5wcmVlbXBoYXNpcyA9IHByZWVtcGhhc2lzOworCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZjb3JlLT5sb2NrKTsKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIGludCB3bDEyNzNfZm1fcmRzX29uKHN0cnVjdCB3bDEyNzNfZGV2aWNlICpyYWRpbykKK3sKKwlzdHJ1Y3Qgd2wxMjczX2NvcmUgKmNvcmUgPSByYWRpby0+Y29yZTsKKwlpbnQgcjsKKworCWRldl9kYmcocmFkaW8tPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisJaWYgKHJhZGlvLT5yZHNfb24pCisJCXJldHVybiAwOworCisJciA9IHdsMTI3M19mbV93cml0ZV9jbWQoY29yZSwgV0wxMjczX1BPV0VSX1NFVCwKKwkJCVdMMTI3M19QT1dFUl9TRVRfRk0gfCBXTDEyNzNfUE9XRVJfU0VUX1JEUyk7CisJaWYgKHIpCisJCWdvdG8gb3V0OworCisJciA9IHdsMTI3M19mbV9zZXRfcnhfZnJlcShyYWRpbywgcmFkaW8tPnJ4X2ZyZXF1ZW5jeSk7CisJaWYgKHIpCisJCWRldl9lcnIocmFkaW8tPmRldiwgInNldCBmcmVxIGZhaWxzOiAlZC5cbiIsIHIpOworb3V0OgorCXJldHVybiByOworfQorCitzdGF0aWMgaW50IHdsMTI3M19mbV9yZHNfb2ZmKHN0cnVjdCB3bDEyNzNfZGV2aWNlICpyYWRpbykKK3sKKwlzdHJ1Y3Qgd2wxMjczX2NvcmUgKmNvcmUgPSByYWRpby0+Y29yZTsKKwlpbnQgcjsKKworCWlmICghcmFkaW8tPnJkc19vbikKKwkJcmV0dXJuIDA7CisKKwlyYWRpby0+aXJxX2ZsYWdzICY9IH5XTDEyNzNfUkRTX0VWRU5UOworCisJciA9IHdsMTI3M19mbV93cml0ZV9jbWQoY29yZSwgV0wxMjczX0lOVF9NQVNLX1NFVCwgcmFkaW8tPmlycV9mbGFncyk7CisJaWYgKHIpCisJCWdvdG8gb3V0OworCisJLyogc3RvcCByZHMgcmVjZXB0aW9uICovCisJY2FuY2VsX2RlbGF5ZWRfd29yaygmcmFkaW8tPndvcmspOworCisJLyogU2VydmljZSBwZW5kaW5nIHJlYWQgKi8KKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJnJhZGlvLT5yZWFkX3F1ZXVlKTsKKworCWRldl9kYmcocmFkaW8tPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlyID0gd2wxMjczX2ZtX3dyaXRlX2NtZChjb3JlLCBXTDEyNzNfUE9XRVJfU0VULCBXTDEyNzNfUE9XRVJfU0VUX0ZNKTsKKwlpZiAocikKKwkJZ290byBvdXQ7CisKKwlyID0gd2wxMjczX2ZtX3NldF9yeF9mcmVxKHJhZGlvLCByYWRpby0+cnhfZnJlcXVlbmN5KTsKKwlpZiAocikKKwkJZGV2X2VycihyYWRpby0+ZGV2LCAic2V0IGZyZXEgZmFpbHM6ICVkLlxuIiwgcik7CitvdXQ6CisJZGV2X2RiZyhyYWRpby0+ZGV2LCAiJXM6IGV4aXRpbmcuLi5cbiIsIF9fZnVuY19fKTsKKworCXJldHVybiByOworfQorCitzdGF0aWMgaW50IHdsMTI3M19mbV9zZXRfcmRzKHN0cnVjdCB3bDEyNzNfZGV2aWNlICpyYWRpbywgdW5zaWduZWQgaW50IG5ld19tb2RlKQoreworCWludCByID0gMDsKKwlzdHJ1Y3Qgd2wxMjczX2NvcmUgKmNvcmUgPSByYWRpby0+Y29yZTsKKworCWlmIChjb3JlLT5tb2RlID09IFdMMTI3M19NT0RFX09GRiB8fAorCSAgICBjb3JlLT5tb2RlID09IFdMMTI3M19NT0RFX1NVU1BFTkRFRCkKKwkJcmV0dXJuIC1FUEVSTTsKKworCWlmIChuZXdfbW9kZSA9PSBXTDEyNzNfUkRTX1JFU0VUKSB7CisJCXIgPSB3bDEyNzNfZm1fd3JpdGVfY21kKGNvcmUsIFdMMTI3M19SRFNfQ05UUkxfU0VULCAxKTsKKwkJcmV0dXJuIHI7CisJfQorCisJaWYgKGNvcmUtPm1vZGUgPT0gV0wxMjczX01PREVfVFggJiYgbmV3X21vZGUgPT0gV0wxMjczX1JEU19PRkYpIHsKKwkJciA9IHdsMTI3M19mbV93cml0ZV9jbWQoY29yZSwgV0wxMjczX1JEU19EQVRBX0VOQiwgMCk7CisJfSBlbHNlIGlmIChjb3JlLT5tb2RlID09IFdMMTI3M19NT0RFX1RYICYmIG5ld19tb2RlID09IFdMMTI3M19SRFNfT04pIHsKKwkJciA9IHdsMTI3M19mbV93cml0ZV9jbWQoY29yZSwgV0wxMjczX1JEU19EQVRBX0VOQiwgMSk7CisJfSBlbHNlIGlmIChjb3JlLT5tb2RlID09IFdMMTI3M19NT0RFX1JYICYmIG5ld19tb2RlID09IFdMMTI3M19SRFNfT0ZGKSB7CisJCXIgPSB3bDEyNzNfZm1fcmRzX29mZihyYWRpbyk7CisJfSBlbHNlIGlmIChjb3JlLT5tb2RlID09IFdMMTI3M19NT0RFX1JYICYmIG5ld19tb2RlID09IFdMMTI3M19SRFNfT04pIHsKKwkJciA9IHdsMTI3M19mbV9yZHNfb24ocmFkaW8pOworCX0gZWxzZSB7CisJCWRldl9lcnIocmFkaW8tPmRldiwgIiVzOiBVbmtub3duIG1vZGU6ICVkXG4iLAorCQkJX19mdW5jX18sIG5ld19tb2RlKTsKKwkJciA9IC1FSU5WQUw7CisJfQorCisJaWYgKCFyKQorCQlyYWRpby0+cmRzX29uID0gKG5ld19tb2RlID09IFdMMTI3M19SRFNfT04pID8gdHJ1ZSA6IGZhbHNlOworCisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHdsMTI3M19mbV9mb3BzX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAorCQkJCSAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3Qgd2wxMjczX2RldmljZSAqcmFkaW8gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbGUpKTsKKwl1MTYgdmFsOworCWludCByOworCisJZGV2X2RiZyhyYWRpby0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKKworCWlmIChyYWRpby0+Y29yZS0+bW9kZSAhPSBXTDEyNzNfTU9ERV9UWCkKKwkJcmV0dXJuIGNvdW50OworCisJaWYgKHJhZGlvLT5yZHNfdXNlcnMgPT0gMCkgeworCQlkZXZfd2FybihyYWRpby0+ZGV2LCAiJXM6IFJEUyBub3Qgb24uXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAwOworCX0KKworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnJhZGlvLT5jb3JlLT5sb2NrKSkKKwkJcmV0dXJuIC1FSU5UUjsKKwkvKgorCSAqIE11bHRpcGxlIHByb2Nlc3NlcyBjYW4gb3BlbiB0aGUgZGV2aWNlLCBidXQgb25seQorCSAqIG9uZSBnZXRzIHRvIHdyaXRlIHRvIGl0LgorCSAqLworCWlmIChyYWRpby0+b3duZXIgJiYgcmFkaW8tPm93bmVyICE9IGZpbGUpIHsKKwkJciA9IC1FQlVTWTsKKwkJZ290byBvdXQ7CisJfQorCXJhZGlvLT5vd25lciA9IGZpbGU7CisKKwkvKiBNYW51YWwgTW9kZSAqLworCWlmIChjb3VudCA+IDI1NSkKKwkJdmFsID0gMjU1OworCWVsc2UKKwkJdmFsID0gY291bnQ7CisKKwl3bDEyNzNfZm1fd3JpdGVfY21kKHJhZGlvLT5jb3JlLCBXTDEyNzNfUkRTX0NPTkZJR19EQVRBX1NFVCwgdmFsKTsKKworCWlmIChjb3B5X2Zyb21fdXNlcihyYWRpby0+d3JpdGVfYnVmICsgMSwgYnVmLCB2YWwpKSB7CisJCXIgPSAtRUZBVUxUOworCQlnb3RvIG91dDsKKwl9CisKKwlkZXZfZGJnKHJhZGlvLT5kZXYsICJDb3VudDogJWRcbiIsIHZhbCk7CisJZGV2X2RiZyhyYWRpby0+ZGV2LCAiRnJvbSB1c2VyOiBcIiVzXCJcbiIsIHJhZGlvLT53cml0ZV9idWYpOworCisJcmFkaW8tPndyaXRlX2J1ZlswXSA9IFdMMTI3M19SRFNfREFUQV9TRVQ7CisJd2wxMjczX2ZtX3dyaXRlX2RhdGEocmFkaW8tPmNvcmUsIHJhZGlvLT53cml0ZV9idWYsIHZhbCArIDEpOworCisJciA9IHZhbDsKK291dDoKKwltdXRleF91bmxvY2soJnJhZGlvLT5jb3JlLT5sb2NrKTsKKworCXJldHVybiByOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHdsMTI3M19mbV9mb3BzX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJCXN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqcHRzKQoreworCXN0cnVjdCB3bDEyNzNfZGV2aWNlICpyYWRpbyA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlsZSkpOworCXN0cnVjdCB3bDEyNzNfY29yZSAqY29yZSA9IHJhZGlvLT5jb3JlOworCisJaWYgKHJhZGlvLT5vd25lciAmJiByYWRpby0+b3duZXIgIT0gZmlsZSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCXJhZGlvLT5vd25lciA9IGZpbGU7CisKKwlpZiAoY29yZS0+bW9kZSA9PSBXTDEyNzNfTU9ERV9SWCkgeworCQlwb2xsX3dhaXQoZmlsZSwgJnJhZGlvLT5yZWFkX3F1ZXVlLCBwdHMpOworCisJCWlmIChyYWRpby0+cmRfaW5kZXggIT0gcmFkaW8tPndyX2luZGV4KQorCQkJcmV0dXJuIFBPTExJTiB8IFBPTExSRE5PUk07CisKKwl9IGVsc2UgaWYgKGNvcmUtPm1vZGUgPT0gV0wxMjczX01PREVfVFgpIHsKKwkJcmV0dXJuIFBPTExPVVQgfCBQT0xMV1JOT1JNOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdsMTI3M19mbV9mb3BzX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHdsMTI3M19kZXZpY2UgKnJhZGlvID0gdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxlKSk7CisJc3RydWN0IHdsMTI3M19jb3JlICpjb3JlID0gcmFkaW8tPmNvcmU7CisJaW50IHIgPSAwOworCisJZGV2X2RiZyhyYWRpby0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKKworCWlmIChjb3JlLT5tb2RlID09IFdMMTI3M19NT0RFX1JYICYmIHJhZGlvLT5yZHNfb24gJiYKKwkgICAgIXJhZGlvLT5yZHNfdXNlcnMpIHsKKwkJZGV2X2RiZyhyYWRpby0+ZGV2LCAiJXM6IE1vZGU6ICVkXG4iLCBfX2Z1bmNfXywgY29yZS0+bW9kZSk7CisKKwkJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY29yZS0+bG9jaykpCisJCQlyZXR1cm4gLUVJTlRSOworCisJCXJhZGlvLT5pcnFfZmxhZ3MgfD0gV0wxMjczX1JEU19FVkVOVDsKKworCQlyID0gd2wxMjczX2ZtX3dyaXRlX2NtZChjb3JlLCBXTDEyNzNfSU5UX01BU0tfU0VULAorCQkJCQlyYWRpby0+aXJxX2ZsYWdzKTsKKwkJaWYgKHIpIHsKKwkJCW11dGV4X3VubG9jaygmY29yZS0+bG9jayk7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCXJhZGlvLT5yZHNfdXNlcnMrKzsKKworCQltdXRleF91bmxvY2soJmNvcmUtPmxvY2spOworCX0KK291dDoKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIGludCB3bDEyNzNfZm1fZm9wc19yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB3bDEyNzNfZGV2aWNlICpyYWRpbyA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlsZSkpOworCXN0cnVjdCB3bDEyNzNfY29yZSAqY29yZSA9IHJhZGlvLT5jb3JlOworCWludCByID0gMDsKKworCWRldl9kYmcocmFkaW8tPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAocmFkaW8tPnJkc191c2VycyA+IDApIHsKKwkJcmFkaW8tPnJkc191c2Vycy0tOworCQlpZiAocmFkaW8tPnJkc191c2VycyA9PSAwKSB7CisJCQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjb3JlLT5sb2NrKSkKKwkJCQlyZXR1cm4gLUVJTlRSOworCisJCQlyYWRpby0+aXJxX2ZsYWdzICY9IH5XTDEyNzNfUkRTX0VWRU5UOworCisJCQlpZiAoY29yZS0+bW9kZSA9PSBXTDEyNzNfTU9ERV9SWCkgeworCQkJCXIgPSB3bDEyNzNfZm1fd3JpdGVfY21kKGNvcmUsCisJCQkJCQkJV0wxMjczX0lOVF9NQVNLX1NFVCwKKwkJCQkJCQlyYWRpby0+aXJxX2ZsYWdzKTsKKwkJCQlpZiAocikgeworCQkJCQltdXRleF91bmxvY2soJmNvcmUtPmxvY2spOworCQkJCQlnb3RvIG91dDsKKwkJCQl9CisJCQl9CisJCQltdXRleF91bmxvY2soJmNvcmUtPmxvY2spOworCQl9CisJfQorCisJaWYgKGZpbGUgPT0gcmFkaW8tPm93bmVyKQorCQlyYWRpby0+b3duZXIgPSBOVUxMOworb3V0OgorCXJldHVybiByOworfQorCitzdGF0aWMgc3NpemVfdCB3bDEyNzNfZm1fZm9wc19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAorCQkJCSAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCWludCByID0gMDsKKwlzdHJ1Y3Qgd2wxMjczX2RldmljZSAqcmFkaW8gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbGUpKTsKKwlzdHJ1Y3Qgd2wxMjczX2NvcmUgKmNvcmUgPSByYWRpby0+Y29yZTsKKwl1bnNpZ25lZCBpbnQgYmxvY2tfY291bnQgPSAwOworCXUxNiB2YWw7CisKKwlkZXZfZGJnKHJhZGlvLT5kZXYsICIlc1xuIiwgX19mdW5jX18pOworCisJaWYgKHJhZGlvLT5jb3JlLT5tb2RlICE9IFdMMTI3M19NT0RFX1JYKQorCQlyZXR1cm4gMDsKKworCWlmIChyYWRpby0+cmRzX3VzZXJzID09IDApIHsKKwkJZGV2X3dhcm4ocmFkaW8tPmRldiwgIiVzOiBSRFMgbm90IG9uLlxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjb3JlLT5sb2NrKSkKKwkJcmV0dXJuIC1FSU5UUjsKKworCS8qCisJICogTXVsdGlwbGUgcHJvY2Vzc2VzIGNhbiBvcGVuIHRoZSBkZXZpY2UsIGJ1dCBvbmx5CisJICogb25lIGF0IGEgdGltZSBnZXRzIHJlYWQgYWNjZXNzLgorCSAqLworCWlmIChyYWRpby0+b3duZXIgJiYgcmFkaW8tPm93bmVyICE9IGZpbGUpIHsKKwkJciA9IC1FQlVTWTsKKwkJZ290byBvdXQ7CisJfQorCXJhZGlvLT5vd25lciA9IGZpbGU7CisKKwlyID0gd2wxMjczX2ZtX3JlYWRfcmVnKGNvcmUsIFdMMTI3M19SRFNfU1lOQ19HRVQsICZ2YWwpOworCWlmIChyKSB7CisJCWRldl9lcnIocmFkaW8tPmRldiwgIiVzOiBHZXQgUkRTX1NZTkMgZmFpbHMuXG4iLCBfX2Z1bmNfXyk7CisJCWdvdG8gb3V0OworCX0gZWxzZSBpZiAodmFsID09IDApIHsKKwkJZGV2X2luZm8ocmFkaW8tPmRldiwgIlJEU19TWU5DOiBOb3Qgc3luY2hyb25pemVkXG4iKTsKKwkJciA9IC1FTk9EQVRBOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBibG9jayBpZiBubyBuZXcgZGF0YSBhdmFpbGFibGUgKi8KKwl3aGlsZSAocmFkaW8tPndyX2luZGV4ID09IHJhZGlvLT5yZF9pbmRleCkgeworCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKKwkJCXIgPSAtRVdPVUxEQkxPQ0s7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCWRldl9kYmcocmFkaW8tPmRldiwgIiVzOiBXYWl0IGZvciBSRFMgZGF0YS5cbiIsIF9fZnVuY19fKTsKKwkJaWYgKHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShyYWRpby0+cmVhZF9xdWV1ZSwKKwkJCQkJICAgICByYWRpby0+d3JfaW5kZXggIT0KKwkJCQkJICAgICByYWRpby0+cmRfaW5kZXgpIDwgMCkgeworCQkJciA9IC1FSU5UUjsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJLyogY2FsY3VsYXRlIGJsb2NrIGNvdW50IGZyb20gYnl0ZSBjb3VudCAqLworCWNvdW50IC89IFJEU19CTE9DS19TSVpFOworCisJLyogY29weSBSRFMgYmxvY2tzIGZyb20gdGhlIGludGVybmFsIGJ1ZmZlciBhbmQgdG8gdXNlciBidWZmZXIgKi8KKwl3aGlsZSAoYmxvY2tfY291bnQgPCBjb3VudCkgeworCQlpZiAocmFkaW8tPnJkX2luZGV4ID09IHJhZGlvLT53cl9pbmRleCkKKwkJCWJyZWFrOworCisJCS8qIGFsd2F5cyB0cmFuc2ZlciBjb21wbGV0ZSBSRFMgYmxvY2tzICovCisJCWlmIChjb3B5X3RvX3VzZXIoYnVmLCAmcmFkaW8tPmJ1ZmZlcltyYWRpby0+cmRfaW5kZXhdLAorCQkJCSBSRFNfQkxPQ0tfU0laRSkpCisJCQlicmVhazsKKworCQkvKiBpbmNyZW1lbnQgYW5kIHdyYXAgdGhlIHJlYWQgcG9pbnRlciAqLworCQlyYWRpby0+cmRfaW5kZXggKz0gUkRTX0JMT0NLX1NJWkU7CisJCWlmIChyYWRpby0+cmRfaW5kZXggPj0gcmFkaW8tPmJ1Zl9zaXplKQorCQkJcmFkaW8tPnJkX2luZGV4ID0gMDsKKworCQkvKiBpbmNyZW1lbnQgY291bnRlcnMgKi8KKwkJYmxvY2tfY291bnQrKzsKKwkJYnVmICs9IFJEU19CTE9DS19TSVpFOworCQlyICs9IFJEU19CTE9DS19TSVpFOworCX0KKworb3V0OgorCWRldl9kYmcocmFkaW8tPmRldiwgIiVzOiBleGl0XG4iLCBfX2Z1bmNfXyk7CisJbXV0ZXhfdW5sb2NrKCZjb3JlLT5sb2NrKTsKKworCXJldHVybiByOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIHdsMTI3M19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkucmVhZAkJPSB3bDEyNzNfZm1fZm9wc19yZWFkLAorCS53cml0ZQkJPSB3bDEyNzNfZm1fZm9wc193cml0ZSwKKwkucG9sbAkJPSB3bDEyNzNfZm1fZm9wc19wb2xsLAorCS5pb2N0bAkJPSB2aWRlb19pb2N0bDIsCisJLm9wZW4JCT0gd2wxMjczX2ZtX2ZvcHNfb3BlbiwKKwkucmVsZWFzZQk9IHdsMTI3M19mbV9mb3BzX3JlbGVhc2UsCit9OworCitzdGF0aWMgaW50IHdsMTI3M19mbV92aWRpb2NfcXVlcnljYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJICAgICBzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICpjYXBhYmlsaXR5KQoreworCXN0cnVjdCB3bDEyNzNfZGV2aWNlICpyYWRpbyA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlsZSkpOworCisJZGV2X2RiZyhyYWRpby0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKKworCXN0cmxjcHkoY2FwYWJpbGl0eS0+ZHJpdmVyLCBXTDEyNzNfRk1fRFJJVkVSX05BTUUsCisJCXNpemVvZihjYXBhYmlsaXR5LT5kcml2ZXIpKTsKKwlzdHJsY3B5KGNhcGFiaWxpdHktPmNhcmQsICJUZXhhcyBJbnN0cnVtZW50cyBXbDEyNzMgRk0gUmFkaW8iLAorCQlzaXplb2YoY2FwYWJpbGl0eS0+Y2FyZCkpOworCXN0cmxjcHkoY2FwYWJpbGl0eS0+YnVzX2luZm8sIHJhZGlvLT5idXNfdHlwZSwKKwkJc2l6ZW9mKGNhcGFiaWxpdHktPmJ1c19pbmZvKSk7CisKKwljYXBhYmlsaXR5LT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9IV19GUkVRX1NFRUsgfAorCQlWNEwyX0NBUF9UVU5FUiB8IFY0TDJfQ0FQX1JBRElPIHwgVjRMMl9DQVBfQVVESU8gfAorCQlWNEwyX0NBUF9SRFNfQ0FQVFVSRSB8IFY0TDJfQ0FQX01PRFVMQVRPUiB8CisJCVY0TDJfQ0FQX1JEU19PVVRQVVQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bDEyNzNfZm1fdmlkaW9jX2dfaW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJICAgIHVuc2lnbmVkIGludCAqaSkKK3sKKwlzdHJ1Y3Qgd2wxMjczX2RldmljZSAqcmFkaW8gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbGUpKTsKKworCWRldl9kYmcocmFkaW8tPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwkqaSA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bDEyNzNfZm1fdmlkaW9jX3NfaW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJICAgIHVuc2lnbmVkIGludCBpKQoreworCXN0cnVjdCB3bDEyNzNfZGV2aWNlICpyYWRpbyA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlsZSkpOworCisJZGV2X2RiZyhyYWRpby0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKKworCWlmIChpICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogd2wxMjczX2ZtX3NldF90eF9wb3dlcigpIC0JU2V0IHRoZSB0cmFuc21pc3Npb24gcG93ZXIgdmFsdWUuCisgKiBAY29yZToJCQlBIHBvaW50ZXIgdG8gdGhlIGRldmljZSBzdHJ1Y3QuCisgKiBAcG93ZXI6CQkJVGhlIG5ldyBwb3dlciB2YWx1ZS4KKyAqLworc3RhdGljIGludCB3bDEyNzNfZm1fc2V0X3R4X3Bvd2VyKHN0cnVjdCB3bDEyNzNfZGV2aWNlICpyYWRpbywgdTE2IHBvd2VyKQoreworCWludCByOworCisJaWYgKHJhZGlvLT5jb3JlLT5tb2RlID09IFdMMTI3M19NT0RFX09GRiB8fAorCSAgICByYWRpby0+Y29yZS0+bW9kZSA9PSBXTDEyNzNfTU9ERV9TVVNQRU5ERUQpCisJCXJldHVybiAtRVBFUk07CisKKwltdXRleF9sb2NrKCZyYWRpby0+Y29yZS0+bG9jayk7CisKKwkvKiBDb252ZXJ0IHRoZSBkQnVWIHZhbHVlIHRvIGNoaXAgcHJlc2VudGF0aW9uICovCisJciA9IHdsMTI3M19mbV93cml0ZV9jbWQocmFkaW8tPmNvcmUsIFdMMTI3M19QT1dFUl9MRVZfU0VULCAxMjIgLSBwb3dlcik7CisJaWYgKHIpCisJCWdvdG8gb3V0OworCisJcmFkaW8tPnR4X3Bvd2VyID0gcG93ZXI7CisKK291dDoKKwltdXRleF91bmxvY2soJnJhZGlvLT5jb3JlLT5sb2NrKTsKKwlyZXR1cm4gcjsKK30KKworI2RlZmluZSBXTDEyNzNfU1BBQ0lOR181MGtIegkxCisjZGVmaW5lIFdMMTI3M19TUEFDSU5HXzEwMGtIegkyCisjZGVmaW5lIFdMMTI3M19TUEFDSU5HXzIwMGtIegk0CisKK3N0YXRpYyBpbnQgd2wxMjczX2ZtX3R4X3NldF9zcGFjaW5nKHN0cnVjdCB3bDEyNzNfZGV2aWNlICpyYWRpbywKKwkJCQkgICAgdW5zaWduZWQgaW50IHNwYWNpbmcpCit7CisJaW50IHI7CisKKwlpZiAoc3BhY2luZyA9PSAwKSB7CisJCXIgPSB3bDEyNzNfZm1fd3JpdGVfY21kKHJhZGlvLT5jb3JlLCBXTDEyNzNfU0NBTl9TUEFDSU5HX1NFVCwKKwkJCQkJV0wxMjczX1NQQUNJTkdfMTAwa0h6KTsKKwkJcmFkaW8tPnNwYWNpbmcgPSAxMDA7CisJfSBlbHNlIGlmIChzcGFjaW5nIC0gNTAwMDAgPCAyNTAwMCkgeworCQlyID0gd2wxMjczX2ZtX3dyaXRlX2NtZChyYWRpby0+Y29yZSwgV0wxMjczX1NDQU5fU1BBQ0lOR19TRVQsCisJCQkJCVdMMTI3M19TUEFDSU5HXzUwa0h6KTsKKwkJcmFkaW8tPnNwYWNpbmcgPSA1MDsKKwl9IGVsc2UgaWYgKHNwYWNpbmcgLSAxMDAwMDAgPCA1MDAwMCkgeworCQlyID0gd2wxMjczX2ZtX3dyaXRlX2NtZChyYWRpby0+Y29yZSwgV0wxMjczX1NDQU5fU1BBQ0lOR19TRVQsCisJCQkJCVdMMTI3M19TUEFDSU5HXzEwMGtIeik7CisJCXJhZGlvLT5zcGFjaW5nID0gMTAwOworCX0gZWxzZSB7CisJCXIgPSB3bDEyNzNfZm1fd3JpdGVfY21kKHJhZGlvLT5jb3JlLCBXTDEyNzNfU0NBTl9TUEFDSU5HX1NFVCwKKwkJCQkJV0wxMjczX1NQQUNJTkdfMjAwa0h6KTsKKwkJcmFkaW8tPnNwYWNpbmcgPSAyMDA7CisJfQorCisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjczX2ZtX2dfdm9sYXRpbGVfY3RybChzdHJ1Y3QgdjRsMl9jdHJsICpjdHJsKQoreworCXN0cnVjdCB3bDEyNzNfZGV2aWNlICpyYWRpbyA9IGN0cmwtPnByaXY7CisJc3RydWN0IHdsMTI3M19jb3JlICpjb3JlID0gcmFkaW8tPmNvcmU7CisKKwlkZXZfZGJnKHJhZGlvLT5kZXYsICIlc1xuIiwgX19mdW5jX18pOworCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY29yZS0+bG9jaykpCisJCXJldHVybiAtRUlOVFI7CisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSAgVjRMMl9DSURfVFVORV9BTlRFTk5BX0NBUEFDSVRPUjoKKwkJY3RybC0+dmFsID0gd2wxMjczX2ZtX2dldF90eF9jdHVuZShyYWRpbyk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZGV2X3dhcm4ocmFkaW8tPmRldiwgIiVzOiBVbmtub3duIElPQ1RMOiAlZFxuIiwKKwkJCSBfX2Z1bmNfXywgY3RybC0+aWQpOworCQlicmVhazsKKwl9CisKKwltdXRleF91bmxvY2soJmNvcmUtPmxvY2spOworCisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgV0wxMjczX01VVEVfU09GVF9FTkFCTEUgICAgKDEgPDwgMCkKKyNkZWZpbmUgV0wxMjczX01VVEVfQUMgICAgICAgICAgICAgKDEgPDwgMSkKKyNkZWZpbmUgV0wxMjczX01VVEVfSEFSRF9MRUZUICAgICAgKDEgPDwgMikKKyNkZWZpbmUgV0wxMjczX01VVEVfSEFSRF9SSUdIVCAgICAgKDEgPDwgMykKKyNkZWZpbmUgV0wxMjczX01VVEVfU09GVF9GT1JDRSAgICAgKDEgPDwgNCkKKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgd2wxMjczX2RldmljZSAqdG9fcmFkaW8oc3RydWN0IHY0bDJfY3RybCAqY3RybCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGN0cmwtPmhhbmRsZXIsIHN0cnVjdCB3bDEyNzNfZGV2aWNlLCBjdHJsX2hhbmRsZXIpOworfQorCitzdGF0aWMgaW50IHdsMTI3M19mbV92aWRpb2Nfc19jdHJsKHN0cnVjdCB2NGwyX2N0cmwgKmN0cmwpCit7CisJc3RydWN0IHdsMTI3M19kZXZpY2UgKnJhZGlvID0gdG9fcmFkaW8oY3RybCk7CisJc3RydWN0IHdsMTI3M19jb3JlICpjb3JlID0gcmFkaW8tPmNvcmU7CisJaW50IHIgPSAwOworCisJZGV2X2RiZyhyYWRpby0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKKworCXN3aXRjaCAoY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CisJCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNvcmUtPmxvY2spKQorCQkJcmV0dXJuIC1FSU5UUjsKKworCQlpZiAoY29yZS0+bW9kZSA9PSBXTDEyNzNfTU9ERV9SWCAmJiBjdHJsLT52YWwpCisJCQlyID0gd2wxMjczX2ZtX3dyaXRlX2NtZChjb3JlLAorCQkJCQkJV0wxMjczX01VVEVfU1RBVFVTX1NFVCwKKwkJCQkJCVdMMTI3M19NVVRFX0hBUkRfTEVGVCB8CisJCQkJCQlXTDEyNzNfTVVURV9IQVJEX1JJR0hUKTsKKwkJZWxzZSBpZiAoY29yZS0+bW9kZSA9PSBXTDEyNzNfTU9ERV9SWCkKKwkJCXIgPSB3bDEyNzNfZm1fd3JpdGVfY21kKGNvcmUsCisJCQkJCQlXTDEyNzNfTVVURV9TVEFUVVNfU0VULCAweDApOworCQllbHNlIGlmIChjb3JlLT5tb2RlID09IFdMMTI3M19NT0RFX1RYICYmIGN0cmwtPnZhbCkKKwkJCXIgPSB3bDEyNzNfZm1fd3JpdGVfY21kKGNvcmUsIFdMMTI3M19NVVRFLCAxKTsKKwkJZWxzZSBpZiAoY29yZS0+bW9kZSA9PSBXTDEyNzNfTU9ERV9UWCkKKwkJCXIgPSB3bDEyNzNfZm1fd3JpdGVfY21kKGNvcmUsIFdMMTI3M19NVVRFLCAwKTsKKworCQltdXRleF91bmxvY2soJmNvcmUtPmxvY2spOworCQlicmVhazsKKworCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgorCQlpZiAoY3RybC0+dmFsID09IDApCisJCQlyID0gd2wxMjczX2ZtX3NldF9tb2RlKHJhZGlvLCBXTDEyNzNfTU9ERV9PRkYpOworCQllbHNlCisJCQlyID0gIGNvcmUtPnNldF92b2x1bWUoY29yZSwgY29yZS0+dm9sdW1lKTsKKwkJYnJlYWs7CisKKwljYXNlIFY0TDJfQ0lEX1RVTkVfUFJFRU1QSEFTSVM6CisJCXIgPSB3bDEyNzNfZm1fc2V0X3ByZWVtcGhhc2lzKHJhZGlvLCBjdHJsLT52YWwpOworCQlicmVhazsKKworCWNhc2UgVjRMMl9DSURfVFVORV9QT1dFUl9MRVZFTDoKKwkJciA9IHdsMTI3M19mbV9zZXRfdHhfcG93ZXIocmFkaW8sIGN0cmwtPnZhbCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZGV2X3dhcm4ocmFkaW8tPmRldiwgIiVzOiBVbmtub3duIElPQ1RMOiAlZFxuIiwKKwkJCSBfX2Z1bmNfXywgY3RybC0+aWQpOworCQlicmVhazsKKwl9CisKKwlkZXZfZGJnKHJhZGlvLT5kZXYsICIlc1xuIiwgX19mdW5jX18pOworCXJldHVybiByOworfQorCitzdGF0aWMgaW50IHdsMTI3M19mbV92aWRpb2NfZ19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQkgICAgc3RydWN0IHY0bDJfYXVkaW8gKmF1ZGlvKQoreworCXN0cnVjdCB3bDEyNzNfZGV2aWNlICpyYWRpbyA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlsZSkpOworCisJZGV2X2RiZyhyYWRpby0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKKworCWlmIChhdWRpby0+aW5kZXggPiAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN0cmxjcHkoYXVkaW8tPm5hbWUsICJSYWRpbyIsIHNpemVvZihhdWRpby0+bmFtZSkpOworCWF1ZGlvLT5jYXBhYmlsaXR5ID0gVjRMMl9BVURDQVBfU1RFUkVPOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjczX2ZtX3ZpZGlvY19zX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCSAgICBzdHJ1Y3QgdjRsMl9hdWRpbyAqYXVkaW8pCit7CisJc3RydWN0IHdsMTI3M19kZXZpY2UgKnJhZGlvID0gdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxlKSk7CisKKwlkZXZfZGJnKHJhZGlvLT5kZXYsICIlc1xuIiwgX19mdW5jX18pOworCisJaWYgKGF1ZGlvLT5pbmRleCAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiAwOworfQorCisjZGVmaW5lIFdMMTI3M19SRFNfTk9UX1NZTkNIUk9OSVpFRCAwCisjZGVmaW5lIFdMMTI3M19SRFNfU1lOQ0hST05JWkVEIDEKKworc3RhdGljIGludCB3bDEyNzNfZm1fdmlkaW9jX2dfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJICAgIHN0cnVjdCB2NGwyX3R1bmVyICp0dW5lcikKK3sKKwlzdHJ1Y3Qgd2wxMjczX2RldmljZSAqcmFkaW8gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbGUpKTsKKwlzdHJ1Y3Qgd2wxMjczX2NvcmUgKmNvcmUgPSByYWRpby0+Y29yZTsKKwl1MTYgdmFsOworCWludCByOworCisJZGV2X2RiZyhyYWRpby0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKKworCWlmICh0dW5lci0+aW5kZXggPiAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN0cmxjcHkodHVuZXItPm5hbWUsIFdMMTI3M19GTV9EUklWRVJfTkFNRSwgc2l6ZW9mKHR1bmVyLT5uYW1lKSk7CisJdHVuZXItPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOworCisJdHVuZXItPnJhbmdlbG93CT0gV0wxMjczX0ZSRVEoV0wxMjczX0JBTkRfSkFQQU5fTE9XKTsKKwl0dW5lci0+cmFuZ2VoaWdoID0gV0wxMjczX0ZSRVEoV0wxMjczX0JBTkRfT1RIRVJfSElHSCk7CisKKwl0dW5lci0+Y2FwYWJpbGl0eSA9IFY0TDJfVFVORVJfQ0FQX0xPVyB8IFY0TDJfVFVORVJfQ0FQX1JEUyB8CisJCVY0TDJfVFVORVJfQ0FQX1NURVJFTyB8IFY0TDJfVFVORVJfQ0FQX1JEU19CTE9DS19JTzsKKworCWlmIChyYWRpby0+c3RlcmVvKQorCQl0dW5lci0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9TVEVSRU87CisJZWxzZQorCQl0dW5lci0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9NT05POworCisJaWYgKGNvcmUtPm1vZGUgIT0gV0wxMjczX01PREVfUlgpCisJCXJldHVybiAwOworCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY29yZS0+bG9jaykpCisJCXJldHVybiAtRUlOVFI7CisKKwlyID0gd2wxMjczX2ZtX3JlYWRfcmVnKGNvcmUsIFdMMTI3M19TVEVSRU9fR0VULCAmdmFsKTsKKwlpZiAocikKKwkJZ290byBvdXQ7CisKKwlpZiAodmFsID09IDEpCisJCXR1bmVyLT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfU1RFUkVPOworCWVsc2UKKwkJdHVuZXItPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05POworCisJciA9IHdsMTI3M19mbV9yZWFkX3JlZyhjb3JlLCBXTDEyNzNfUlNTSV9MVkxfR0VULCAmdmFsKTsKKwlpZiAocikKKwkJZ290byBvdXQ7CisKKwl0dW5lci0+c2lnbmFsID0gKHMxNikgdmFsOworCWRldl9kYmcocmFkaW8tPmRldiwgIlNpZ25hbDogJWRcbiIsIHR1bmVyLT5zaWduYWwpOworCisJdHVuZXItPmFmYyA9IDA7CisKKwlyID0gd2wxMjczX2ZtX3JlYWRfcmVnKGNvcmUsIFdMMTI3M19SRFNfU1lOQ19HRVQsICZ2YWwpOworCWlmIChyKQorCQlnb3RvIG91dDsKKworCWlmICh2YWwgPT0gV0wxMjczX1JEU19TWU5DSFJPTklaRUQpCisJCXR1bmVyLT5yeHN1YmNoYW5zIHw9IFY0TDJfVFVORVJfU1VCX1JEUzsKK291dDoKKwltdXRleF91bmxvY2soJmNvcmUtPmxvY2spOworCisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjczX2ZtX3ZpZGlvY19zX3R1bmVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCSAgICBzdHJ1Y3QgdjRsMl90dW5lciAqdHVuZXIpCit7CisJc3RydWN0IHdsMTI3M19kZXZpY2UgKnJhZGlvID0gdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxlKSk7CisJc3RydWN0IHdsMTI3M19jb3JlICpjb3JlID0gcmFkaW8tPmNvcmU7CisJaW50IHIgPSAwOworCisJZGV2X2RiZyhyYWRpby0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKKwlkZXZfZGJnKHJhZGlvLT5kZXYsICJ0dW5lci0+aW5kZXg6ICVkXG4iLCB0dW5lci0+aW5kZXgpOworCWRldl9kYmcocmFkaW8tPmRldiwgInR1bmVyLT5uYW1lOiAlc1xuIiwgdHVuZXItPm5hbWUpOworCWRldl9kYmcocmFkaW8tPmRldiwgInR1bmVyLT5jYXBhYmlsaXR5OiAweCUwNHhcbiIsIHR1bmVyLT5jYXBhYmlsaXR5KTsKKwlkZXZfZGJnKHJhZGlvLT5kZXYsICJ0dW5lci0+cnhzdWJjaGFuczogMHglMDR4XG4iLCB0dW5lci0+cnhzdWJjaGFucyk7CisJZGV2X2RiZyhyYWRpby0+ZGV2LCAidHVuZXItPnJhbmdlbG93OiAlZFxuIiwgdHVuZXItPnJhbmdlbG93KTsKKwlkZXZfZGJnKHJhZGlvLT5kZXYsICJ0dW5lci0+cmFuZ2VoaWdoOiAlZFxuIiwgdHVuZXItPnJhbmdlaGlnaCk7CisKKwlpZiAodHVuZXItPmluZGV4ID4gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjb3JlLT5sb2NrKSkKKwkJcmV0dXJuIC1FSU5UUjsKKworCXIgPSB3bDEyNzNfZm1fc2V0X21vZGUocmFkaW8sIFdMMTI3M19NT0RFX1JYKTsKKwlpZiAocikKKwkJZ290byBvdXQ7CisKKwlpZiAodHVuZXItPnJ4c3ViY2hhbnMgJiBWNEwyX1RVTkVSX1NVQl9SRFMpCisJCXIgPSB3bDEyNzNfZm1fc2V0X3JkcyhyYWRpbywgV0wxMjczX1JEU19PTik7CisJZWxzZQorCQlyID0gd2wxMjczX2ZtX3NldF9yZHMocmFkaW8sIFdMMTI3M19SRFNfT0ZGKTsKKworCWlmIChyKQorCQlkZXZfd2FybihyYWRpby0+ZGV2LCAiJXM6IFJEUyBmYWlsczogJWRcbiIsIF9fZnVuY19fLCByKTsKKworCWlmICh0dW5lci0+YXVkbW9kZSA9PSBWNEwyX1RVTkVSX01PREVfTU9OTykgeworCQlyID0gd2wxMjczX2ZtX3dyaXRlX2NtZChjb3JlLCBXTDEyNzNfTU9TVF9NT0RFX1NFVCwKKwkJCQkJV0wxMjczX1JYX01PTk8pOworCQlpZiAociA8IDApIHsKKwkJCWRldl93YXJuKHJhZGlvLT5kZXYsICIlczogTU9TVF9NT0RFIGZhaWxzOiAlZFxuIiwKKwkJCQkgX19mdW5jX18sIHIpOworCQkJZ290byBvdXQ7CisJCX0KKwkJcmFkaW8tPnN0ZXJlbyA9IGZhbHNlOworCX0gZWxzZSBpZiAodHVuZXItPmF1ZG1vZGUgPT0gVjRMMl9UVU5FUl9NT0RFX1NURVJFTykgeworCQlyID0gd2wxMjczX2ZtX3dyaXRlX2NtZChjb3JlLCBXTDEyNzNfTU9TVF9NT0RFX1NFVCwKKwkJCQkJV0wxMjczX1JYX1NURVJFTyk7CisJCWlmIChyIDwgMCkgeworCQkJZGV2X3dhcm4ocmFkaW8tPmRldiwgIiVzOiBNT1NUX01PREUgZmFpbHM6ICVkXG4iLAorCQkJCSBfX2Z1bmNfXywgcik7CisJCQlnb3RvIG91dDsKKwkJfQorCQlyYWRpby0+c3RlcmVvID0gdHJ1ZTsKKwl9IGVsc2UgeworCQlkZXZfZXJyKHJhZGlvLT5kZXYsICIlczogdHVuZXItPmF1ZG1vZGU6ICVkXG4iLAorCQkJIF9fZnVuY19fLCB0dW5lci0+YXVkbW9kZSk7CisJCXIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwltdXRleF91bmxvY2soJmNvcmUtPmxvY2spOworCisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjczX2ZtX3ZpZGlvY19nX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmcmVxKQoreworCXN0cnVjdCB3bDEyNzNfZGV2aWNlICpyYWRpbyA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlsZSkpOworCXN0cnVjdCB3bDEyNzNfY29yZSAqY29yZSA9IHJhZGlvLT5jb3JlOworCisJZGV2X2RiZyhyYWRpby0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKKworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNvcmUtPmxvY2spKQorCQlyZXR1cm4gLUVJTlRSOworCisJZnJlcS0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CisJZnJlcS0+ZnJlcXVlbmN5ID0gV0wxMjczX0ZSRVEod2wxMjczX2ZtX2dldF9mcmVxKHJhZGlvKSk7CisKKwltdXRleF91bmxvY2soJmNvcmUtPmxvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjczX2ZtX3ZpZGlvY19zX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmcmVxKQoreworCXN0cnVjdCB3bDEyNzNfZGV2aWNlICpyYWRpbyA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlsZSkpOworCXN0cnVjdCB3bDEyNzNfY29yZSAqY29yZSA9IHJhZGlvLT5jb3JlOworCWludCByOworCisJZGV2X2RiZyhyYWRpby0+ZGV2LCAiJXM6ICVkXG4iLCBfX2Z1bmNfXywgZnJlcS0+ZnJlcXVlbmN5KTsKKworCWlmIChmcmVxLT50eXBlICE9IFY0TDJfVFVORVJfUkFESU8pIHsKKwkJZGV2X2RiZyhyYWRpby0+ZGV2LAorCQkJImZyZXEtPnR5cGUgIT0gVjRMMl9UVU5FUl9SQURJTzogJWRcbiIsIGZyZXEtPnR5cGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjb3JlLT5sb2NrKSkKKwkJcmV0dXJuIC1FSU5UUjsKKworCWlmIChjb3JlLT5tb2RlID09IFdMMTI3M19NT0RFX1JYKSB7CisJCWRldl9kYmcocmFkaW8tPmRldiwgImZyZXE6ICVkXG4iLCBmcmVxLT5mcmVxdWVuY3kpOworCisJCXIgPSB3bDEyNzNfZm1fc2V0X3J4X2ZyZXEocmFkaW8sCisJCQkJCSAgV0wxMjczX0lOVl9GUkVRKGZyZXEtPmZyZXF1ZW5jeSkpOworCQlpZiAocikKKwkJCWRldl93YXJuKHJhZGlvLT5kZXYsIFdMMTI3M19GTV9EUklWRVJfTkFNRQorCQkJCSAiOiBzZXQgZnJlcXVlbmN5IGZhaWxlZCB3aXRoICVkXG4iLCByKTsKKwl9IGVsc2UgeworCQlyID0gd2wxMjczX2ZtX3NldF90eF9mcmVxKHJhZGlvLAorCQkJCQkgIFdMMTI3M19JTlZfRlJFUShmcmVxLT5mcmVxdWVuY3kpKTsKKwkJaWYgKHIpCisJCQlkZXZfd2FybihyYWRpby0+ZGV2LCBXTDEyNzNfRk1fRFJJVkVSX05BTUUKKwkJCQkgIjogc2V0IGZyZXF1ZW5jeSBmYWlsZWQgd2l0aCAlZFxuIiwgcik7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZjb3JlLT5sb2NrKTsKKworCWRldl9kYmcocmFkaW8tPmRldiwgIndsMTI3M192aWRpb2Nfc19mcmVxdWVuY3k6IERPTkVcbiIpOworCXJldHVybiByOworfQorCisjZGVmaW5lIFdMMTI3M19ERUZBVUxUX1NFRUtfTEVWRUwJNworCitzdGF0aWMgaW50IHdsMTI3M19mbV92aWRpb2Nfc19od19mcmVxX3NlZWsoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJCSAgIHN0cnVjdCB2NGwyX2h3X2ZyZXFfc2VlayAqc2VlaykKK3sKKwlzdHJ1Y3Qgd2wxMjczX2RldmljZSAqcmFkaW8gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbGUpKTsKKwlzdHJ1Y3Qgd2wxMjczX2NvcmUgKmNvcmUgPSByYWRpby0+Y29yZTsKKwlpbnQgcjsKKworCWRldl9kYmcocmFkaW8tPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAoc2Vlay0+dHVuZXIgIT0gMCB8fCBzZWVrLT50eXBlICE9IFY0TDJfVFVORVJfUkFESU8pCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY29yZS0+bG9jaykpCisJCXJldHVybiAtRUlOVFI7CisKKwlyID0gd2wxMjczX2ZtX3NldF9tb2RlKHJhZGlvLCBXTDEyNzNfTU9ERV9SWCk7CisJaWYgKHIpCisJCWdvdG8gb3V0OworCisJciA9IHdsMTI3M19mbV90eF9zZXRfc3BhY2luZyhyYWRpbywgc2Vlay0+c3BhY2luZyk7CisJaWYgKHIpCisJCWRldl93YXJuKHJhZGlvLT5kZXYsICJIVyBzZWVrIGZhaWxlZDogJWRcbiIsIHIpOworCisJciA9IHdsMTI3M19mbV9zZXRfc2VlayhyYWRpbywgc2Vlay0+d3JhcF9hcm91bmQsIHNlZWstPnNlZWtfdXB3YXJkLAorCQkJICAgICAgIFdMMTI3M19ERUZBVUxUX1NFRUtfTEVWRUwpOworCWlmIChyKQorCQlkZXZfd2FybihyYWRpby0+ZGV2LCAiSFcgc2VlayBmYWlsZWQ6ICVkXG4iLCByKTsKKworb3V0OgorCW11dGV4X3VubG9jaygmY29yZS0+bG9jayk7CisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjczX2ZtX3ZpZGlvY19zX21vZHVsYXRvcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQkJc3RydWN0IHY0bDJfbW9kdWxhdG9yICptb2R1bGF0b3IpCit7CisJc3RydWN0IHdsMTI3M19kZXZpY2UgKnJhZGlvID0gdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxlKSk7CisJc3RydWN0IHdsMTI3M19jb3JlICpjb3JlID0gcmFkaW8tPmNvcmU7CisJaW50IHIgPSAwOworCisJZGV2X2RiZyhyYWRpby0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKKworCWlmIChtb2R1bGF0b3ItPmluZGV4ID4gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjb3JlLT5sb2NrKSkKKwkJcmV0dXJuIC1FSU5UUjsKKworCXIgPSB3bDEyNzNfZm1fc2V0X21vZGUocmFkaW8sIFdMMTI3M19NT0RFX1RYKTsKKwlpZiAocikKKwkJZ290byBvdXQ7CisKKwlpZiAobW9kdWxhdG9yLT50eHN1YmNoYW5zICYgVjRMMl9UVU5FUl9TVUJfUkRTKQorCQlyID0gd2wxMjczX2ZtX3NldF9yZHMocmFkaW8sIFdMMTI3M19SRFNfT04pOworCWVsc2UKKwkJciA9IHdsMTI3M19mbV9zZXRfcmRzKHJhZGlvLCBXTDEyNzNfUkRTX09GRik7CisKKwlpZiAobW9kdWxhdG9yLT50eHN1YmNoYW5zICYgVjRMMl9UVU5FUl9TVUJfTU9OTykKKwkJciA9IHdsMTI3M19mbV93cml0ZV9jbWQoY29yZSwgV0wxMjczX01PTk9fU0VULCBXTDEyNzNfVFhfTU9OTyk7CisJZWxzZQorCQlyID0gd2wxMjczX2ZtX3dyaXRlX2NtZChjb3JlLCBXTDEyNzNfTU9OT19TRVQsCisJCQkJCVdMMTI3M19SWF9TVEVSRU8pOworCWlmIChyIDwgMCkKKwkJZGV2X3dhcm4ocmFkaW8tPmRldiwgV0wxMjczX0ZNX0RSSVZFUl9OQU1FCisJCQkgIk1PTk9fU0VUIGZhaWxzOiAlZFxuIiwgcik7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZjb3JlLT5sb2NrKTsKKworCXJldHVybiByOworfQorCitzdGF0aWMgaW50IHdsMTI3M19mbV92aWRpb2NfZ19tb2R1bGF0b3Ioc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJCXN0cnVjdCB2NGwyX21vZHVsYXRvciAqbW9kdWxhdG9yKQoreworCXN0cnVjdCB3bDEyNzNfZGV2aWNlICpyYWRpbyA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlsZSkpOworCXN0cnVjdCB3bDEyNzNfY29yZSAqY29yZSA9IHJhZGlvLT5jb3JlOworCXUxNiB2YWw7CisJaW50IHI7CisKKwlkZXZfZGJnKHJhZGlvLT5kZXYsICIlc1xuIiwgX19mdW5jX18pOworCisJc3RybGNweShtb2R1bGF0b3ItPm5hbWUsIFdMMTI3M19GTV9EUklWRVJfTkFNRSwKKwkJc2l6ZW9mKG1vZHVsYXRvci0+bmFtZSkpOworCisJbW9kdWxhdG9yLT5yYW5nZWxvdyA9IFdMMTI3M19GUkVRKFdMMTI3M19CQU5EX0pBUEFOX0xPVyk7CisJbW9kdWxhdG9yLT5yYW5nZWhpZ2ggPSBXTDEyNzNfRlJFUShXTDEyNzNfQkFORF9PVEhFUl9ISUdIKTsKKworCW1vZHVsYXRvci0+Y2FwYWJpbGl0eSA9ICBWNEwyX1RVTkVSX0NBUF9MT1cgfCBWNEwyX1RVTkVSX0NBUF9SRFMgfAorCQlWNEwyX1RVTkVSX0NBUF9TVEVSRU8gfCBWNEwyX1RVTkVSX0NBUF9SRFNfQkxPQ0tfSU87CisKKwlpZiAoY29yZS0+bW9kZSAhPSBXTDEyNzNfTU9ERV9UWCkKKwkJcmV0dXJuIDA7CisKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjb3JlLT5sb2NrKSkKKwkJcmV0dXJuIC1FSU5UUjsKKworCXIgPSB3bDEyNzNfZm1fcmVhZF9yZWcoY29yZSwgV0wxMjczX01PTk9fU0VULCAmdmFsKTsKKwlpZiAocikKKwkJZ290byBvdXQ7CisKKwlpZiAodmFsID09IFdMMTI3M19UWF9TVEVSRU8pCisJCW1vZHVsYXRvci0+dHhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX1NURVJFTzsKKwllbHNlCisJCW1vZHVsYXRvci0+dHhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX01PTk87CisKKwlpZiAocmFkaW8tPnJkc19vbikKKwkJbW9kdWxhdG9yLT50eHN1YmNoYW5zIHw9IFY0TDJfVFVORVJfU1VCX1JEUzsKK291dDoKKwltdXRleF91bmxvY2soJmNvcmUtPmxvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjczX2ZtX3ZpZGlvY19sb2dfc3RhdHVzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2KQoreworCXN0cnVjdCB3bDEyNzNfZGV2aWNlICpyYWRpbyA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlsZSkpOworCXN0cnVjdCB3bDEyNzNfY29yZSAqY29yZSA9IHJhZGlvLT5jb3JlOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHJhZGlvLT5kZXY7CisJdTE2IHZhbDsKKwlpbnQgcjsKKworCWRldl9pbmZvKGRldiwgRFJJVkVSX0RFU0MpOworCisJaWYgKGNvcmUtPm1vZGUgPT0gV0wxMjczX01PREVfT0ZGKSB7CisJCWRldl9pbmZvKGRldiwgIk1vZGU6IE9mZlxuIik7CisJCXJldHVybiAwOworCX0KKworCWlmIChjb3JlLT5tb2RlID09IFdMMTI3M19NT0RFX1NVU1BFTkRFRCkgeworCQlkZXZfaW5mbyhkZXYsICJNb2RlOiBTdXNwZW5kZWRcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyID0gd2wxMjczX2ZtX3JlYWRfcmVnKGNvcmUsIFdMMTI3M19BU0lDX0lEX0dFVCwgJnZhbCk7CisJaWYgKHIpCisJCWRldl9lcnIoZGV2LCAiJXM6IEdldCBBU0lDX0lEIGZhaWxzLlxuIiwgX19mdW5jX18pOworCWVsc2UKKwkJZGV2X2luZm8oZGV2LCAiQVNJQ19JRDogMHglMDR4XG4iLCB2YWwpOworCisJciA9IHdsMTI3M19mbV9yZWFkX3JlZyhjb3JlLCBXTDEyNzNfQVNJQ19WRVJfR0VULCAmdmFsKTsKKwlpZiAocikKKwkJZGV2X2VycihkZXYsICIlczogR2V0IEFTSUNfVkVSIGZhaWxzLlxuIiwgX19mdW5jX18pOworCWVsc2UKKwkJZGV2X2luZm8oZGV2LCAiQVNJQyBWZXJzaW9uOiAweCUwNHhcbiIsIHZhbCk7CisKKwlyID0gd2wxMjczX2ZtX3JlYWRfcmVnKGNvcmUsIFdMMTI3M19GSVJNX1ZFUl9HRVQsICZ2YWwpOworCWlmIChyKQorCQlkZXZfZXJyKGRldiwgIiVzOiBHZXQgRklSTV9WRVIgZmFpbHMuXG4iLCBfX2Z1bmNfXyk7CisJZWxzZQorCQlkZXZfaW5mbyhkZXYsICJGVyB2ZXJzaW9uOiAlZCgweCUwNHgpXG4iLCB2YWwsIHZhbCk7CisKKwlyID0gd2wxMjczX2ZtX3JlYWRfcmVnKGNvcmUsIFdMMTI3M19CQU5EX1NFVCwgJnZhbCk7CisJaWYgKHIpCisJCWRldl9lcnIoZGV2LCAiJXM6IEdldCBCQU5EIGZhaWxzLlxuIiwgX19mdW5jX18pOworCWVsc2UKKwkJZGV2X2luZm8oZGV2LCAiQkFORDogJWRcbiIsIHZhbCk7CisKKwlpZiAoY29yZS0+bW9kZSA9PSBXTDEyNzNfTU9ERV9UWCkgeworCQlyID0gd2wxMjczX2ZtX3JlYWRfcmVnKGNvcmUsIFdMMTI3M19QVVBEX1NFVCwgJnZhbCk7CisJCWlmIChyKQorCQkJZGV2X2VycihkZXYsICIlczogR2V0IFBVUEQgZmFpbHMuXG4iLCBfX2Z1bmNfXyk7CisJCWVsc2UKKwkJCWRldl9pbmZvKGRldiwgIlBVUEQ6IDB4JTA0eFxuIiwgdmFsKTsKKworCQlyID0gd2wxMjczX2ZtX3JlYWRfcmVnKGNvcmUsIFdMMTI3M19DSEFOTF9TRVQsICZ2YWwpOworCQlpZiAocikKKwkJCWRldl9lcnIoZGV2LCAiJXM6IEdldCBDSEFOTCBmYWlscy5cbiIsIF9fZnVuY19fKTsKKwkJZWxzZQorCQkJZGV2X2luZm8oZGV2LCAiVHggZnJlcXVlbmN5OiAlZGtIelxuIiwgdmFsKjEwKTsKKwl9IGVsc2UgaWYgKGNvcmUtPm1vZGUgPT0gV0wxMjczX01PREVfUlgpIHsKKwkJaW50IGJmID0gcmFkaW8tPnJhbmdlbG93OworCisJCXIgPSB3bDEyNzNfZm1fcmVhZF9yZWcoY29yZSwgV0wxMjczX0ZSRVFfU0VULCAmdmFsKTsKKwkJaWYgKHIpCisJCQlkZXZfZXJyKGRldiwgIiVzOiBHZXQgRlJFUSBmYWlscy5cbiIsIF9fZnVuY19fKTsKKwkJZWxzZQorCQkJZGV2X2luZm8oZGV2LCAiUlggRnJlcXVlbmN5OiAlZGtIelxuIiwgYmYgKyB2YWwqNTApOworCisJCXIgPSB3bDEyNzNfZm1fcmVhZF9yZWcoY29yZSwgV0wxMjczX01PU1RfTU9ERV9TRVQsICZ2YWwpOworCQlpZiAocikKKwkJCWRldl9lcnIoZGV2LCAiJXM6IEdldCBNT1NUX01PREUgZmFpbHMuXG4iLAorCQkJCV9fZnVuY19fKTsKKwkJZWxzZSBpZiAodmFsID09IDApCisJCQlkZXZfaW5mbyhkZXYsICJNT1NUX01PREU6IFN0ZXJlbyBhY2NvcmRpbmcgdG8gYmxlbmRcbiIpOworCQllbHNlIGlmICh2YWwgPT0gMSkKKwkJCWRldl9pbmZvKGRldiwgIk1PU1RfTU9ERTogRm9yY2UgbW9ubyBvdXRwdXRcbiIpOworCQllbHNlCisJCQlkZXZfaW5mbyhkZXYsICJNT1NUX01PREU6IFVuZXhwZWN0ZWQgdmFsdWU6ICVkXG4iLCB2YWwpOworCisJCXIgPSB3bDEyNzNfZm1fcmVhZF9yZWcoY29yZSwgV0wxMjczX01PU1RfQkxFTkRfU0VULCAmdmFsKTsKKwkJaWYgKHIpCisJCQlkZXZfZXJyKGRldiwgIiVzOiBHZXQgTU9TVF9CTEVORCBmYWlscy5cbiIsIF9fZnVuY19fKTsKKwkJZWxzZSBpZiAodmFsID09IDApCisJCQlkZXZfaW5mbyhkZXYsCisJCQkJICJNT1NUX0JMRU5EOiBTd2l0Y2hlZCBibGVuZCAmIGh5c3RlcmVzaXMuXG4iKTsKKwkJZWxzZSBpZiAodmFsID09IDEpCisJCQlkZXZfaW5mbyhkZXYsICJNT1NUX0JMRU5EOiBTb2Z0IGJsZW5kLlxuIik7CisJCWVsc2UKKwkJCWRldl9pbmZvKGRldiwgIk1PU1RfQkxFTkQ6IFVuZXhwZWN0ZWQgdmFsOiAlZFxuIiwgdmFsKTsKKworCQlyID0gd2wxMjczX2ZtX3JlYWRfcmVnKGNvcmUsIFdMMTI3M19TVEVSRU9fR0VULCAmdmFsKTsKKwkJaWYgKHIpCisJCQlkZXZfZXJyKGRldiwgIiVzOiBHZXQgU1RFUkVPIGZhaWxzLlxuIiwgX19mdW5jX18pOworCQllbHNlIGlmICh2YWwgPT0gMCkKKwkJCWRldl9pbmZvKGRldiwgIlNURVJFTzogTm90IGRldGVjdGVkXG4iKTsKKwkJZWxzZSBpZiAodmFsID09IDEpCisJCQlkZXZfaW5mbyhkZXYsICJTVEVSRU86IERldGVjdGVkXG4iKTsKKwkJZWxzZQorCQkJZGV2X2luZm8oZGV2LCAiU1RFUkVPOiBVbmV4cGVjdGVkIHZhbHVlOiAlZFxuIiwgdmFsKTsKKworCQlyID0gd2wxMjczX2ZtX3JlYWRfcmVnKGNvcmUsIFdMMTI3M19SU1NJX0xWTF9HRVQsICZ2YWwpOworCQlpZiAocikKKwkJCWRldl9lcnIoZGV2LCAiJXM6IEdldCBSU1NJX0xWTCBmYWlscy5cbiIsIF9fZnVuY19fKTsKKwkJZWxzZQorCQkJZGV2X2luZm8oZGV2LCAiUlggc2lnbmFsIHN0cmVuZ3RoOiAlZFxuIiwgKHMxNikgdmFsKTsKKworCQlyID0gd2wxMjczX2ZtX3JlYWRfcmVnKGNvcmUsIFdMMTI3M19QT1dFUl9TRVQsICZ2YWwpOworCQlpZiAocikKKwkJCWRldl9lcnIoZGV2LCAiJXM6IEdldCBQT1dFUiBmYWlscy5cbiIsIF9fZnVuY19fKTsKKwkJZWxzZQorCQkJZGV2X2luZm8oZGV2LCAiUE9XRVI6IDB4JTA0eFxuIiwgdmFsKTsKKworCQlyID0gd2wxMjczX2ZtX3JlYWRfcmVnKGNvcmUsIFdMMTI3M19JTlRfTUFTS19TRVQsICZ2YWwpOworCQlpZiAocikKKwkJCWRldl9lcnIoZGV2LCAiJXM6IEdldCBJTlRfTUFTSyBmYWlscy5cbiIsIF9fZnVuY19fKTsKKwkJZWxzZQorCQkJZGV2X2luZm8oZGV2LCAiSU5UX01BU0s6IDB4JTA0eFxuIiwgdmFsKTsKKworCQlyID0gd2wxMjczX2ZtX3JlYWRfcmVnKGNvcmUsIFdMMTI3M19SRFNfU1lOQ19HRVQsICZ2YWwpOworCQlpZiAocikKKwkJCWRldl9lcnIoZGV2LCAiJXM6IEdldCBSRFNfU1lOQyBmYWlscy5cbiIsCisJCQkJX19mdW5jX18pOworCQllbHNlIGlmICh2YWwgPT0gMCkKKwkJCWRldl9pbmZvKGRldiwgIlJEU19TWU5DOiBOb3Qgc3luY2hyb25pemVkXG4iKTsKKworCQllbHNlIGlmICh2YWwgPT0gMSkKKwkJCWRldl9pbmZvKGRldiwgIlJEU19TWU5DOiBTeW5jaHJvbml6ZWRcbiIpOworCQllbHNlCisJCQlkZXZfaW5mbyhkZXYsICJSRFNfU1lOQzogVW5leHBlY3RlZCB2YWx1ZTogJWRcbiIsIHZhbCk7CisKKwkJciA9IHdsMTI3M19mbV9yZWFkX3JlZyhjb3JlLCBXTDEyNzNfSTJTX01PREVfQ09ORklHX1NFVCwgJnZhbCk7CisJCWlmIChyKQorCQkJZGV2X2VycihkZXYsICIlczogR2V0IEkyU19NT0RFX0NPTkZJRyBmYWlscy5cbiIsCisJCQkJX19mdW5jX18pOworCQllbHNlCisJCQlkZXZfaW5mbyhkZXYsICJJMlNfTU9ERV9DT05GSUc6IDB4JTA0eFxuIiwgdmFsKTsKKworCQlyID0gd2wxMjczX2ZtX3JlYWRfcmVnKGNvcmUsIFdMMTI3M19WT0xVTUVfU0VULCAmdmFsKTsKKwkJaWYgKHIpCisJCQlkZXZfZXJyKGRldiwgIiVzOiBHZXQgVk9MVU1FIGZhaWxzLlxuIiwgX19mdW5jX18pOworCQllbHNlCisJCQlkZXZfaW5mbyhkZXYsICJWT0xVTUU6IDB4JTA0eFxuIiwgdmFsKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgd2wxMjczX3ZkZXZfcmVsZWFzZShzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYpCit7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9jdHJsX29wcyB3bDEyNzNfY3RybF9vcHMgPSB7CisJLnNfY3RybCA9IHdsMTI3M19mbV92aWRpb2Nfc19jdHJsLAorCS5nX3ZvbGF0aWxlX2N0cmwgPSB3bDEyNzNfZm1fZ192b2xhdGlsZV9jdHJsLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyB3bDEyNzNfaW9jdGxfb3BzID0geworCS52aWRpb2NfcXVlcnljYXAJPSB3bDEyNzNfZm1fdmlkaW9jX3F1ZXJ5Y2FwLAorCS52aWRpb2NfZ19pbnB1dAkJPSB3bDEyNzNfZm1fdmlkaW9jX2dfaW5wdXQsCisJLnZpZGlvY19zX2lucHV0CQk9IHdsMTI3M19mbV92aWRpb2Nfc19pbnB1dCwKKwkudmlkaW9jX2dfYXVkaW8JCT0gd2wxMjczX2ZtX3ZpZGlvY19nX2F1ZGlvLAorCS52aWRpb2Nfc19hdWRpbwkJPSB3bDEyNzNfZm1fdmlkaW9jX3NfYXVkaW8sCisJLnZpZGlvY19nX3R1bmVyCQk9IHdsMTI3M19mbV92aWRpb2NfZ190dW5lciwKKwkudmlkaW9jX3NfdHVuZXIJCT0gd2wxMjczX2ZtX3ZpZGlvY19zX3R1bmVyLAorCS52aWRpb2NfZ19mcmVxdWVuY3kJPSB3bDEyNzNfZm1fdmlkaW9jX2dfZnJlcXVlbmN5LAorCS52aWRpb2Nfc19mcmVxdWVuY3kJPSB3bDEyNzNfZm1fdmlkaW9jX3NfZnJlcXVlbmN5LAorCS52aWRpb2Nfc19od19mcmVxX3NlZWsJPSB3bDEyNzNfZm1fdmlkaW9jX3NfaHdfZnJlcV9zZWVrLAorCS52aWRpb2NfZ19tb2R1bGF0b3IJPSB3bDEyNzNfZm1fdmlkaW9jX2dfbW9kdWxhdG9yLAorCS52aWRpb2Nfc19tb2R1bGF0b3IJPSB3bDEyNzNfZm1fdmlkaW9jX3NfbW9kdWxhdG9yLAorCS52aWRpb2NfbG9nX3N0YXR1cyAgICAgID0gd2wxMjczX2ZtX3ZpZGlvY19sb2dfc3RhdHVzLAorfTsKKworc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2Ugd2wxMjczX3ZpZGRldl90ZW1wbGF0ZSA9IHsKKwkuZm9wcwkJCT0gJndsMTI3M19mb3BzLAorCS5pb2N0bF9vcHMJCT0gJndsMTI3M19pb2N0bF9vcHMsCisJLm5hbWUJCQk9IFdMMTI3M19GTV9EUklWRVJfTkFNRSwKKwkucmVsZWFzZQkJPSB3bDEyNzNfdmRldl9yZWxlYXNlLAorfTsKKworc3RhdGljIGludCB3bDEyNzNfZm1fcmFkaW9fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHdsMTI3M19kZXZpY2UgKnJhZGlvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHdsMTI3M19jb3JlICpjb3JlID0gcmFkaW8tPmNvcmU7CisKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiJXMuXG4iLCBfX2Z1bmNfXyk7CisKKwlmcmVlX2lycShjb3JlLT5jbGllbnQtPmlycSwgcmFkaW8pOworCWNvcmUtPnBkYXRhLT5mcmVlX3Jlc291cmNlcygpOworCisJdjRsMl9jdHJsX2hhbmRsZXJfZnJlZSgmcmFkaW8tPmN0cmxfaGFuZGxlcik7CisJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJnJhZGlvLT52aWRlb2Rldik7CisJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmcmFkaW8tPnY0bDJkZXYpOworCWtmcmVlKHJhZGlvLT5idWZmZXIpOworCWtmcmVlKHJhZGlvLT53cml0ZV9idWYpOworCWtmcmVlKHJhZGlvKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCB3bDEyNzNfZm1fcmFkaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgd2wxMjczX2NvcmUgKipjb3JlID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHdsMTI3M19kZXZpY2UgKnJhZGlvOworCXN0cnVjdCB2NGwyX2N0cmwgKmN0cmw7CisJaW50IHIgPSAwOworCisJcHJfZGVidWcoIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAoIWNvcmUpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiTm8gcGxhdGZvcm0gZGF0YS5cbiIpOworCQlyID0gLUVJTlZBTDsKKwkJZ290byBwZGF0YV9lcnI7CisJfQorCisJcmFkaW8gPSBremFsbG9jKHNpemVvZigqcmFkaW8pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJhZGlvKSB7CisJCXIgPSAtRU5PTUVNOworCQlnb3RvIHBkYXRhX2VycjsKKwl9CisKKwkvKiBSRFMgYnVmZmVyIGFsbG9jYXRpb24gKi8KKwlyYWRpby0+YnVmX3NpemUgPSByZHNfYnVmICogUkRTX0JMT0NLX1NJWkU7CisJcmFkaW8tPmJ1ZmZlciA9IGttYWxsb2MocmFkaW8tPmJ1Zl9zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJhZGlvLT5idWZmZXIpIHsKKwkJcHJfZXJyKCJDYW5ub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBSRFMgYnVmZmVyLlxuIik7CisJCXIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9rbWFsbG9jOworCX0KKworCXJhZGlvLT5jb3JlID0gKmNvcmU7CisJcmFkaW8tPmlycV9mbGFncyA9IFdMMTI3M19JUlFfTUFTSzsKKwlyYWRpby0+ZGV2ID0gJnJhZGlvLT5jb3JlLT5jbGllbnQtPmRldjsKKwlyYWRpby0+cmRzX29uID0gZmFsc2U7CisJcmFkaW8tPmNvcmUtPm1vZGUgPSBXTDEyNzNfTU9ERV9PRkY7CisJcmFkaW8tPnR4X3Bvd2VyID0gMTE4OworCXJhZGlvLT5jb3JlLT5hdWRpb19tb2RlID0gV0wxMjczX0FVRElPX0FOQUxPRzsKKwlyYWRpby0+YmFuZCA9IFdMMTI3M19CQU5EX09USEVSOworCXJhZGlvLT5jb3JlLT5pMnNfbW9kZSA9IFdMMTI3M19JMlNfREVGX01PREU7CisJcmFkaW8tPmNvcmUtPmNoYW5uZWxfbnVtYmVyID0gMjsKKwlyYWRpby0+Y29yZS0+dm9sdW1lID0gV0wxMjczX0RFRkFVTFRfVk9MVU1FOworCXJhZGlvLT5yeF9mcmVxdWVuY3kgPSBXTDEyNzNfQkFORF9PVEhFUl9MT1c7CisJcmFkaW8tPnR4X2ZyZXF1ZW5jeSA9IFdMMTI3M19CQU5EX09USEVSX0hJR0g7CisJcmFkaW8tPnJhbmdlbG93ID0gV0wxMjczX0JBTkRfT1RIRVJfTE9XOworCXJhZGlvLT5yYW5nZWhpZ2ggPSBXTDEyNzNfQkFORF9PVEhFUl9ISUdIOworCXJhZGlvLT5zdGVyZW8gPSB0cnVlOworCXJhZGlvLT5idXNfdHlwZSA9ICJJMkMiOworCisJcmFkaW8tPmNvcmUtPndyaXRlID0gd2wxMjczX2ZtX3dyaXRlX2NtZDsKKwlyYWRpby0+Y29yZS0+c2V0X2F1ZGlvID0gd2wxMjczX2ZtX3NldF9hdWRpbzsKKwlyYWRpby0+Y29yZS0+c2V0X3ZvbHVtZSA9IHdsMTI3M19mbV9zZXRfdm9sdW1lOworCisJaWYgKHJhZGlvLT5jb3JlLT5wZGF0YS0+cmVxdWVzdF9yZXNvdXJjZXMpIHsKKwkJciA9IHJhZGlvLT5jb3JlLT5wZGF0YS0+cmVxdWVzdF9yZXNvdXJjZXMocmFkaW8tPmNvcmUtPmNsaWVudCk7CisJCWlmIChyKSB7CisJCQlkZXZfZXJyKHJhZGlvLT5kZXYsIFdMMTI3M19GTV9EUklWRVJfTkFNRQorCQkJCSI6IENhbm5vdCBnZXQgcGxhdGZvcm0gZGF0YVxuIik7CisJCQlnb3RvIGVycl9yZXNvdXJjZXM7CisJCX0KKworCQlkZXZfZGJnKHJhZGlvLT5kZXYsICJpcnE6ICVkXG4iLCByYWRpby0+Y29yZS0+Y2xpZW50LT5pcnEpOworCisJCXIgPSByZXF1ZXN0X3RocmVhZGVkX2lycShyYWRpby0+Y29yZS0+Y2xpZW50LT5pcnEsIE5VTEwsCisJCQkJCSB3bDEyNzNfZm1faXJxX3RocmVhZF9oYW5kbGVyLAorCQkJCQkgSVJRRl9PTkVTSE9UIHwgSVJRRl9UUklHR0VSX0ZBTExJTkcsCisJCQkJCSAid2wxMjczLWZtIiwgcmFkaW8pOworCQlpZiAociA8IDApIHsKKwkJCWRldl9lcnIocmFkaW8tPmRldiwgV0wxMjczX0ZNX0RSSVZFUl9OQU1FCisJCQkJIjogVW5hYmxlIHRvIHJlZ2lzdGVyIElSUSBoYW5kbGVyOiAlZFxuIiwgcik7CisJCQlnb3RvIGVycl9yZXF1ZXN0X2lycTsKKwkJfQorCX0gZWxzZSB7CisJCWRldl9lcnIocmFkaW8tPmRldiwgV0wxMjczX0ZNX0RSSVZFUl9OQU1FICI6IENvcmUgV0wxMjczIElSUSIKKwkJCSIgbm90IGNvbmZpZ3VyZWQiKTsKKwkJciA9IC1FSU5WQUw7CisJCWdvdG8gZXJyX3Jlc291cmNlczsKKwl9CisKKwlpbml0X2NvbXBsZXRpb24oJnJhZGlvLT5idXN5KTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZyYWRpby0+cmVhZF9xdWV1ZSk7CisKKwlyYWRpby0+d3JpdGVfYnVmID0ga21hbGxvYygyNTYsIEdGUF9LRVJORUwpOworCWlmICghcmFkaW8tPndyaXRlX2J1ZikgeworCQlyID0gLUVOT01FTTsKKwkJZ290byB3cml0ZV9idWZfZXJyOworCX0KKworCXJhZGlvLT5kZXYgPSAmcGRldi0+ZGV2OworCXJhZGlvLT52NGwyZGV2LmN0cmxfaGFuZGxlciA9ICZyYWRpby0+Y3RybF9oYW5kbGVyOworCXJhZGlvLT5yZHNfdXNlcnMgPSAwOworCisJciA9IHY0bDJfZGV2aWNlX3JlZ2lzdGVyKCZwZGV2LT5kZXYsICZyYWRpby0+djRsMmRldik7CisJaWYgKHIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2Fubm90IHJlZ2lzdGVyIHY0bDJfZGV2aWNlLlxuIik7CisJCWdvdG8gZGV2aWNlX3JlZ2lzdGVyX2VycjsKKwl9CisKKwkvKiBWNEwyIGNvbmZpZ3VyYXRpb24gKi8KKwltZW1jcHkoJnJhZGlvLT52aWRlb2RldiwgJndsMTI3M192aWRkZXZfdGVtcGxhdGUsCisJICAgICAgIHNpemVvZih3bDEyNzNfdmlkZGV2X3RlbXBsYXRlKSk7CisKKwlyYWRpby0+dmlkZW9kZXYudjRsMl9kZXYgPSAmcmFkaW8tPnY0bDJkZXY7CisKKwl2NGwyX2N0cmxfaGFuZGxlcl9pbml0KCZyYWRpby0+Y3RybF9oYW5kbGVyLCA2KTsKKworCS8qIGFkZCBpbiBhc2NlbmRpbmcgSUQgb3JkZXIgKi8KKwl2NGwyX2N0cmxfbmV3X3N0ZCgmcmFkaW8tPmN0cmxfaGFuZGxlciwgJndsMTI3M19jdHJsX29wcywKKwkJCSAgVjRMMl9DSURfQVVESU9fVk9MVU1FLCAwLCBXTDEyNzNfTUFYX1ZPTFVNRSwgMSwKKwkJCSAgV0wxMjczX0RFRkFVTFRfVk9MVU1FKTsKKworCXY0bDJfY3RybF9uZXdfc3RkKCZyYWRpby0+Y3RybF9oYW5kbGVyLCAmd2wxMjczX2N0cmxfb3BzLAorCQkJICBWNEwyX0NJRF9BVURJT19NVVRFLCAwLCAxLCAxLCAxKTsKKworCXY0bDJfY3RybF9uZXdfc3RkX21lbnUoJnJhZGlvLT5jdHJsX2hhbmRsZXIsICZ3bDEyNzNfY3RybF9vcHMsCisJCQkgICAgICAgVjRMMl9DSURfVFVORV9QUkVFTVBIQVNJUywKKwkJCSAgICAgICBWNEwyX1BSRUVNUEhBU0lTXzc1X3VTLCAweDAzLAorCQkJICAgICAgIFY0TDJfUFJFRU1QSEFTSVNfNTBfdVMpOworCisJdjRsMl9jdHJsX25ld19zdGQoJnJhZGlvLT5jdHJsX2hhbmRsZXIsICZ3bDEyNzNfY3RybF9vcHMsCisJCQkgIFY0TDJfQ0lEX1RVTkVfUE9XRVJfTEVWRUwsIDkxLCAxMjIsIDEsIDExOCk7CisKKwljdHJsID0gdjRsMl9jdHJsX25ld19zdGQoJnJhZGlvLT5jdHJsX2hhbmRsZXIsICZ3bDEyNzNfY3RybF9vcHMsCisJCQkJIFY0TDJfQ0lEX1RVTkVfQU5URU5OQV9DQVBBQ0lUT1IsCisJCQkJIDAsIDI1NSwgMSwgMjU1KTsKKwlpZiAoY3RybCkKKwkJY3RybC0+aXNfdm9sYXRpbGUgPSAxOworCisJaWYgKHJhZGlvLT5jdHJsX2hhbmRsZXIuZXJyb3IpIHsKKwkJciA9IHJhZGlvLT5jdHJsX2hhbmRsZXIuZXJyb3I7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkN0cmwgaGFuZGxlciBlcnJvcjogJWRcbiIsIHIpOworCQlnb3RvIGhhbmRsZXJfaW5pdF9lcnI7CisJfQorCisJdmlkZW9fc2V0X2RydmRhdGEoJnJhZGlvLT52aWRlb2RldiwgcmFkaW8pOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHJhZGlvKTsKKworCS8qIHJlZ2lzdGVyIHZpZGVvIGRldmljZSAqLworCXIgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJnJhZGlvLT52aWRlb2RldiwgVkZMX1RZUEVfUkFESU8sIHJhZGlvX25yKTsKKwlpZiAocikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsIFdMMTI3M19GTV9EUklWRVJfTkFNRQorCQkJIjogQ291bGQgbm90IHJlZ2lzdGVyIHZpZGVvIGRldmljZVxuIik7CisJCWdvdG8gaGFuZGxlcl9pbml0X2VycjsKKwl9CisKKwlyZXR1cm4gMDsKKworaGFuZGxlcl9pbml0X2VycjoKKwl2NGwyX2N0cmxfaGFuZGxlcl9mcmVlKCZyYWRpby0+Y3RybF9oYW5kbGVyKTsKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZyYWRpby0+djRsMmRldik7CitkZXZpY2VfcmVnaXN0ZXJfZXJyOgorCWtmcmVlKHJhZGlvLT53cml0ZV9idWYpOword3JpdGVfYnVmX2VycjoKKwlmcmVlX2lycShyYWRpby0+Y29yZS0+Y2xpZW50LT5pcnEsIHJhZGlvKTsKK2Vycl9yZXF1ZXN0X2lycToKKwlyYWRpby0+Y29yZS0+cGRhdGEtPmZyZWVfcmVzb3VyY2VzKCk7CitlcnJfcmVzb3VyY2VzOgorCWtmcmVlKHJhZGlvLT5idWZmZXIpOworZXJyX2ttYWxsb2M6CisJa2ZyZWUocmFkaW8pOworcGRhdGFfZXJyOgorCXJldHVybiByOworfQorCitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOndsMTI3M19mbV9yYWRpbyIpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB3bDEyNzNfZm1fcmFkaW9fZHJpdmVyID0geworCS5wcm9iZQkJPSB3bDEyNzNfZm1fcmFkaW9fcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcCh3bDEyNzNfZm1fcmFkaW9fcmVtb3ZlKSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAid2wxMjczX2ZtX3JhZGlvIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHdsMTI3M19mbV9tb2R1bGVfaW5pdCh2b2lkKQoreworCXByX2luZm8oIiVzXG4iLCBfX2Z1bmNfXyk7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmd2wxMjczX2ZtX3JhZGlvX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdCh3bDEyNzNfZm1fbW9kdWxlX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgd2wxMjczX2ZtX21vZHVsZV9leGl0KHZvaWQpCit7CisJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmd2wxMjczX2ZtX3JhZGlvX2RyaXZlcik7CisJcHJfaW5mbyhEUklWRVJfREVTQyAiLCBFeGl0aW5nLlxuIik7Cit9Cittb2R1bGVfZXhpdCh3bDEyNzNfZm1fbW9kdWxlX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJNYXR0aSBBYWx0b25lbiA8bWF0dGkuai5hYWx0b25lbkBub2tpYS5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9zaTQ3MHgvcmFkaW8tc2k0NzB4LmggYi9kcml2ZXJzL21lZGlhL3JhZGlvL3NpNDcweC9yYWRpby1zaTQ3MHguaAppbmRleCBiOTkxNGQ3Li40YTRlOTA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3NpNDcweC9yYWRpby1zaTQ3MHguaAorKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3NpNDcweC9yYWRpby1zaTQ3MHguaApAQCAtMzcsNyArMzcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+Ci0jaW5jbHVkZSA8bWVkaWEvcmRzLmg+CiAjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vc2k0NzEzLWkyYy5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9zaTQ3MTMtaTJjLmMKaW5kZXggYTZlNmYxOS4uMGZhYjZmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9zaTQ3MTMtaTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9zaTQ3MTMtaTJjLmMKQEAgLTI3LDYgKzI3LDggQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CkBAIC00Myw2ICs0NSwxMSBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJJMkMgZHJpdmVyIGZvciBTaTQ3MTMgRk0gUmFkaW8gVHJhbnNtaXR0ZXIiKTsKIE1PRFVMRV9WRVJTSU9OKCIwLjAuMSIpOwogCitzdGF0aWMgY29uc3QgY2hhciAqc2k0NzEzX3N1cHBseV9uYW1lc1tTSTQ3MTNfTlVNX1NVUFBMSUVTXSA9IHsKKwkidmlvIiwKKwkidmRkIiwKK307CisKICNkZWZpbmUgREVGQVVMVF9SRFNfUEkJCQkweDAwCiAjZGVmaW5lIERFRkFVTFRfUkRTX1BUWQkJCTB4MDAKICNkZWZpbmUgREVGQVVMVF9SRFNfUFNfTkFNRQkJIiIKQEAgLTM2OSw3ICszNzYsMTcgQEAKIAlpZiAoc2Rldi0+cG93ZXJfc3RhdGUpCiAJCXJldHVybiAwOwogCi0Jc2Rldi0+cGxhdGZvcm1fZGF0YS0+c2V0X3Bvd2VyKDEpOworCWVyciA9IHJlZ3VsYXRvcl9idWxrX2VuYWJsZShBUlJBWV9TSVpFKHNkZXYtPnN1cHBsaWVzKSwKKwkJCQkgICAgc2Rldi0+c3VwcGxpZXMpOworCWlmIChlcnIpIHsKKwkJdjRsMl9lcnIoJnNkZXYtPnNkLCAiRmFpbGVkIHRvIGVuYWJsZSBzdXBwbGllczogJWRcbiIsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCWlmIChncGlvX2lzX3ZhbGlkKHNkZXYtPmdwaW9fcmVzZXQpKSB7CisJCXVkZWxheSg1MCk7CisJCWdwaW9fc2V0X3ZhbHVlKHNkZXYtPmdwaW9fcmVzZXQsIDEpOworCX0KKwogCWVyciA9IHNpNDcxM19zZW5kX2NvbW1hbmQoc2RldiwgU0k0NzEzX0NNRF9QT1dFUl9VUCwKIAkJCQkJYXJncywgQVJSQVlfU0laRShhcmdzKSwKIAkJCQkJcmVzcCwgQVJSQVlfU0laRShyZXNwKSwKQEAgLTM4NCw3ICs0MDEsMTMgQEAKIAkJZXJyID0gc2k0NzEzX3dyaXRlX3Byb3BlcnR5KHNkZXYsIFNJNDcxM19HUE9fSUVOLAogCQkJCQkJU0k0NzEzX1NUQ19JTlQgfCBTSTQ3MTNfQ1RTKTsKIAl9IGVsc2UgewotCQlzZGV2LT5wbGF0Zm9ybV9kYXRhLT5zZXRfcG93ZXIoMCk7CisJCWlmIChncGlvX2lzX3ZhbGlkKHNkZXYtPmdwaW9fcmVzZXQpKQorCQkJZ3Bpb19zZXRfdmFsdWUoc2Rldi0+Z3Bpb19yZXNldCwgMCk7CisJCWVyciA9IHJlZ3VsYXRvcl9idWxrX2Rpc2FibGUoQVJSQVlfU0laRShzZGV2LT5zdXBwbGllcyksCisJCQkJCSAgICAgc2Rldi0+c3VwcGxpZXMpOworCQlpZiAoZXJyKQorCQkJdjRsMl9lcnIoJnNkZXYtPnNkLAorCQkJCSAiRmFpbGVkIHRvIGRpc2FibGUgc3VwcGxpZXM6ICVkXG4iLCBlcnIpOwogCX0KIAogCXJldHVybiBlcnI7CkBAIC00MTEsNyArNDM0LDEzIEBACiAJCXY0bDJfZGJnKDEsIGRlYnVnLCAmc2Rldi0+c2QsICJQb3dlciBkb3duIHJlc3BvbnNlOiAweCUwMnhcbiIsCiAJCQkJcmVzcFswXSk7CiAJCXY0bDJfZGJnKDEsIGRlYnVnLCAmc2Rldi0+c2QsICJEZXZpY2UgaW4gcmVzZXQgbW9kZVxuIik7Ci0JCXNkZXYtPnBsYXRmb3JtX2RhdGEtPnNldF9wb3dlcigwKTsKKwkJaWYgKGdwaW9faXNfdmFsaWQoc2Rldi0+Z3Bpb19yZXNldCkpCisJCQlncGlvX3NldF92YWx1ZShzZGV2LT5ncGlvX3Jlc2V0LCAwKTsKKwkJZXJyID0gcmVndWxhdG9yX2J1bGtfZGlzYWJsZShBUlJBWV9TSVpFKHNkZXYtPnN1cHBsaWVzKSwKKwkJCQkJICAgICBzZGV2LT5zdXBwbGllcyk7CisJCWlmIChlcnIpCisJCQl2NGwyX2Vycigmc2Rldi0+c2QsCisJCQkJICJGYWlsZWQgdG8gZGlzYWJsZSBzdXBwbGllczogJWRcbiIsIGVycik7CiAJCXNkZXYtPnBvd2VyX3N0YXRlID0gUE9XRVJfT0ZGOwogCX0KIApAQCAtMTk2Nyw3ICsxOTk2LDggQEAKIAkJCQkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCBzaTQ3MTNfZGV2aWNlICpzZGV2OwotCWludCBydmFsOworCXN0cnVjdCBzaTQ3MTNfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOworCWludCBydmFsLCBpOwogCiAJc2RldiA9IGt6YWxsb2Moc2l6ZW9mICpzZGV2LCBHRlBfS0VSTkVMKTsKIAlpZiAoIXNkZXYpIHsKQEAgLTE5NzYsMTEgKzIwMDYsMjYgQEAKIAkJZ290byBleGl0OwogCX0KIAotCXNkZXYtPnBsYXRmb3JtX2RhdGEgPSBjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOwotCWlmICghc2Rldi0+cGxhdGZvcm1fZGF0YSkgewotCQl2NGwyX2Vycigmc2Rldi0+c2QsICJObyBwbGF0Zm9ybSBkYXRhIHJlZ2lzdGVyZWQuXG4iKTsKLQkJcnZhbCA9IC1FTk9ERVY7Ci0JCWdvdG8gZnJlZV9zZGV2OworCXNkZXYtPmdwaW9fcmVzZXQgPSAtMTsKKwlpZiAocGRhdGEgJiYgZ3Bpb19pc192YWxpZChwZGF0YS0+Z3Bpb19yZXNldCkpIHsKKwkJcnZhbCA9IGdwaW9fcmVxdWVzdChwZGF0YS0+Z3Bpb19yZXNldCwgInNpNDcxMyByZXNldCIpOworCQlpZiAocnZhbCkgeworCQkJZGV2X2VycigmY2xpZW50LT5kZXYsCisJCQkJIkZhaWxlZCB0byByZXF1ZXN0IGdwaW86ICVkXG4iLCBydmFsKTsKKwkJCWdvdG8gZnJlZV9zZGV2OworCQl9CisJCXNkZXYtPmdwaW9fcmVzZXQgPSBwZGF0YS0+Z3Bpb19yZXNldDsKKwkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHNkZXYtPmdwaW9fcmVzZXQsIDApOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNkZXYtPnN1cHBsaWVzKTsgaSsrKQorCQlzZGV2LT5zdXBwbGllc1tpXS5zdXBwbHkgPSBzaTQ3MTNfc3VwcGx5X25hbWVzW2ldOworCisJcnZhbCA9IHJlZ3VsYXRvcl9idWxrX2dldCgmY2xpZW50LT5kZXYsIEFSUkFZX1NJWkUoc2Rldi0+c3VwcGxpZXMpLAorCQkJCSAgc2Rldi0+c3VwcGxpZXMpOworCWlmIChydmFsKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiQ2Fubm90IGdldCByZWd1bGF0b3JzOiAlZFxuIiwgcnZhbCk7CisJCWdvdG8gZnJlZV9ncGlvOwogCX0KIAogCXY0bDJfaTJjX3N1YmRldl9pbml0KCZzZGV2LT5zZCwgY2xpZW50LCAmc2k0NzEzX3N1YmRldl9vcHMpOwpAQCAtMTk5NCw3ICsyMDM5LDcgQEAKIAkJCWNsaWVudC0+bmFtZSwgc2Rldik7CiAJCWlmIChydmFsIDwgMCkgewogCQkJdjRsMl9lcnIoJnNkZXYtPnNkLCAiQ291bGQgbm90IHJlcXVlc3QgSVJRXG4iKTsKLQkJCWdvdG8gZnJlZV9zZGV2OworCQkJZ290byBwdXRfcmVnOwogCQl9CiAJCXY0bDJfZGJnKDEsIGRlYnVnLCAmc2Rldi0+c2QsICJJUlEgcmVxdWVzdGVkLlxuIik7CiAJfSBlbHNlIHsKQEAgLTIwMTIsNiArMjA1NywxMSBAQAogZnJlZV9pcnE6CiAJaWYgKGNsaWVudC0+aXJxKQogCQlmcmVlX2lycShjbGllbnQtPmlycSwgc2Rldik7CitwdXRfcmVnOgorCXJlZ3VsYXRvcl9idWxrX2ZyZWUoQVJSQVlfU0laRShzZGV2LT5zdXBwbGllcyksIHNkZXYtPnN1cHBsaWVzKTsKK2ZyZWVfZ3BpbzoKKwlpZiAoZ3Bpb19pc192YWxpZChzZGV2LT5ncGlvX3Jlc2V0KSkKKwkJZ3Bpb19mcmVlKHNkZXYtPmdwaW9fcmVzZXQpOwogZnJlZV9zZGV2OgogCWtmcmVlKHNkZXYpOwogZXhpdDoKQEAgLTIwMzEsNyArMjA4MSw5IEBACiAJCWZyZWVfaXJxKGNsaWVudC0+aXJxLCBzZGV2KTsKIAogCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXJfc3ViZGV2KHNkKTsKLQorCXJlZ3VsYXRvcl9idWxrX2ZyZWUoQVJSQVlfU0laRShzZGV2LT5zdXBwbGllcyksIHNkZXYtPnN1cHBsaWVzKTsKKwlpZiAoZ3Bpb19pc192YWxpZChzZGV2LT5ncGlvX3Jlc2V0KSkKKwkJZ3Bpb19mcmVlKHNkZXYtPmdwaW9fcmVzZXQpOwogCWtmcmVlKHNkZXYpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3NpNDcxMy1pMmMuaCBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vc2k0NzEzLWkyYy5oCmluZGV4IGZhZjhjZmYuLmM2ZGZhN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vc2k0NzEzLWkyYy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vc2k0NzEzLWkyYy5oCkBAIC0yMTEsNiArMjExLDggQEAKIAl1MzIgZW5hYmxlZDsKIH07CiAKKyNkZWZpbmUgU0k0NzEzX05VTV9TVVBQTElFUwkJMgorCiAvKgogICogc2k0NzEzX2RldmljZSAtIHByaXZhdGUgZGF0YQogICovCkBAIC0yMjAsMTEgKzIyMiwxMiBAQAogCS8qIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmVzICovCiAJc3RydWN0IG11dGV4IG11dGV4OwogCXN0cnVjdCBjb21wbGV0aW9uIHdvcms7Ci0Jc3RydWN0IHNpNDcxM19wbGF0Zm9ybV9kYXRhICpwbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCByZHNfaW5mbyByZHNfaW5mbzsKIAlzdHJ1Y3QgbGltaXRlcl9pbmZvIGxpbWl0ZXJfaW5mbzsKIAlzdHJ1Y3QgcGlsb3RfaW5mbyBwaWxvdF9pbmZvOwogCXN0cnVjdCBhY29tcF9pbmZvIGFjb21wX2luZm87CisJc3RydWN0IHJlZ3VsYXRvcl9idWxrX2RhdGEgc3VwcGxpZXNbU0k0NzEzX05VTV9TVVBQTElFU107CisJaW50IGdwaW9fcmVzZXQ7CiAJdTMyIGZyZXF1ZW5jeTsKIAl1MzIgcHJlZW1waGFzaXM7CiAJdTMyIG11dGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JjL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3JjL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc4NTE2MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvcmMvS2NvbmZpZwpAQCAtMCwwICsxLDE5MyBAQAorbWVudWNvbmZpZyBSQ19DT1JFCisJdHJpc3RhdGUgIlJlbW90ZSBDb250cm9sbGVyIGFkYXB0ZXJzIgorCWRlcGVuZHMgb24gSU5QVVQKKwlkZWZhdWx0IElOUFVUCisJLS0taGVscC0tLQorCSAgRW5hYmxlIHN1cHBvcnQgZm9yIFJlbW90ZSBDb250cm9sbGVycyBvbiBMaW51eC4gVGhpcyBpcworCSAgbmVlZGVkIGluIG9yZGVyIHRvIHN1cHBvcnQgc2V2ZXJhbCB2aWRlbyBjYXB0dXJlIGFkYXB0ZXJzLgorCSAgQ3VycmVudGx5LCBhbGwgc3VwcG9ydGVkIGRldmljZXMgdXNlIEluZnJhUmVkLgorCisJICBFbmFibGUgdGhpcyBvcHRpb24gaWYgeW91IGhhdmUgYSB2aWRlbyBjYXB0dXJlIGJvYXJkIGV2ZW4KKwkgIGlmIHlvdSBkb24ndCBuZWVkIElSLCBhcyBvdGhlcndpc2UsIHlvdSBtYXkgbm90IGJlIGFibGUgdG8KKwkgIGNvbXBpbGUgdGhlIGRyaXZlciBmb3IgeW91ciBhZGFwdGVyLgorCitpZiBSQ19DT1JFCisKK2NvbmZpZyBMSVJDCisJdHJpc3RhdGUKKwlkZWZhdWx0IHkKKworCS0tLWhlbHAtLS0KKwkgICBFbmFibGUgdGhpcyBvcHRpb24gdG8gYnVpbGQgdGhlIExpbnV4IEluZnJhcmVkIFJlbW90ZQorCSAgIENvbnRyb2wgKExJUkMpIGNvcmUgZGV2aWNlIGludGVyZmFjZSBkcml2ZXIuIFRoZSBMSVJDCisJICAgaW50ZXJmYWNlIHBhc3NlcyByYXcgSVIgdG8gYW5kIGZyb20gdXNlcnNwYWNlLCB3aGVyZSB0aGUKKwkgICBMSVJDIGRhZW1vbiBoYW5kbGVzIHByb3RvY29sIGRlY29kaW5nIGZvciBJUiByZWNlcHRpb24gYW5kCisJICAgZW5jb2RpbmcgZm9yIElSIHRyYW5zbWl0dGluZyAoYWthICJibGFzdGluZyIpLgorCitzb3VyY2UgImRyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9LY29uZmlnIgorCitjb25maWcgSVJfTkVDX0RFQ09ERVIKKwl0cmlzdGF0ZSAiRW5hYmxlIElSIHJhdyBkZWNvZGVyIGZvciB0aGUgTkVDIHByb3RvY29sIgorCWRlcGVuZHMgb24gUkNfQ09SRQorCXNlbGVjdCBCSVRSRVZFUlNFCisJZGVmYXVsdCB5CisKKwktLS1oZWxwLS0tCisJICAgRW5hYmxlIHRoaXMgb3B0aW9uIGlmIHlvdSBoYXZlIElSIHdpdGggTkVDIHByb3RvY29sLCBhbmQKKwkgICBpZiB0aGUgSVIgaXMgZGVjb2RlZCBpbiBzb2Z0d2FyZQorCitjb25maWcgSVJfUkM1X0RFQ09ERVIKKwl0cmlzdGF0ZSAiRW5hYmxlIElSIHJhdyBkZWNvZGVyIGZvciB0aGUgUkMtNSBwcm90b2NvbCIKKwlkZXBlbmRzIG9uIFJDX0NPUkUKKwlzZWxlY3QgQklUUkVWRVJTRQorCWRlZmF1bHQgeQorCisJLS0taGVscC0tLQorCSAgIEVuYWJsZSB0aGlzIG9wdGlvbiBpZiB5b3UgaGF2ZSBJUiB3aXRoIFJDLTUgcHJvdG9jb2wsIGFuZAorCSAgIGlmIHRoZSBJUiBpcyBkZWNvZGVkIGluIHNvZnR3YXJlCisKK2NvbmZpZyBJUl9SQzZfREVDT0RFUgorCXRyaXN0YXRlICJFbmFibGUgSVIgcmF3IGRlY29kZXIgZm9yIHRoZSBSQzYgcHJvdG9jb2wiCisJZGVwZW5kcyBvbiBSQ19DT1JFCisJc2VsZWN0IEJJVFJFVkVSU0UKKwlkZWZhdWx0IHkKKworCS0tLWhlbHAtLS0KKwkgICBFbmFibGUgdGhpcyBvcHRpb24gaWYgeW91IGhhdmUgYW4gaW5mcmFyZWQgcmVtb3RlIGNvbnRyb2wgd2hpY2gKKwkgICB1c2VzIHRoZSBSQzYgcHJvdG9jb2wsIGFuZCB5b3UgbmVlZCBzb2Z0d2FyZSBkZWNvZGluZyBzdXBwb3J0LgorCitjb25maWcgSVJfSlZDX0RFQ09ERVIKKwl0cmlzdGF0ZSAiRW5hYmxlIElSIHJhdyBkZWNvZGVyIGZvciB0aGUgSlZDIHByb3RvY29sIgorCWRlcGVuZHMgb24gUkNfQ09SRQorCXNlbGVjdCBCSVRSRVZFUlNFCisJZGVmYXVsdCB5CisKKwktLS1oZWxwLS0tCisJICAgRW5hYmxlIHRoaXMgb3B0aW9uIGlmIHlvdSBoYXZlIGFuIGluZnJhcmVkIHJlbW90ZSBjb250cm9sIHdoaWNoCisJICAgdXNlcyB0aGUgSlZDIHByb3RvY29sLCBhbmQgeW91IG5lZWQgc29mdHdhcmUgZGVjb2Rpbmcgc3VwcG9ydC4KKworY29uZmlnIElSX1NPTllfREVDT0RFUgorCXRyaXN0YXRlICJFbmFibGUgSVIgcmF3IGRlY29kZXIgZm9yIHRoZSBTb255IHByb3RvY29sIgorCWRlcGVuZHMgb24gUkNfQ09SRQorCWRlZmF1bHQgeQorCisJLS0taGVscC0tLQorCSAgIEVuYWJsZSB0aGlzIG9wdGlvbiBpZiB5b3UgaGF2ZSBhbiBpbmZyYXJlZCByZW1vdGUgY29udHJvbCB3aGljaAorCSAgIHVzZXMgdGhlIFNvbnkgcHJvdG9jb2wsIGFuZCB5b3UgbmVlZCBzb2Z0d2FyZSBkZWNvZGluZyBzdXBwb3J0LgorCitjb25maWcgSVJfUkM1X1NaX0RFQ09ERVIKKwl0cmlzdGF0ZSAiRW5hYmxlIElSIHJhdyBkZWNvZGVyIGZvciB0aGUgUkMtNSAoc3RyZWFtemFwKSBwcm90b2NvbCIKKwlkZXBlbmRzIG9uIFJDX0NPUkUKKwlzZWxlY3QgQklUUkVWRVJTRQorCWRlZmF1bHQgeQorCisJLS0taGVscC0tLQorCSAgIEVuYWJsZSB0aGlzIG9wdGlvbiBpZiB5b3UgaGF2ZSBJUiB3aXRoIFJDLTUgKHN0cmVhbXphcCkgcHJvdG9jb2wsCisJICAgYW5kIGlmIHRoZSBJUiBpcyBkZWNvZGVkIGluIHNvZnR3YXJlLiAoVGhlIFN0cmVhbXphcCBQQyBSZW1vdGUKKwkgICB1c2VzIGFuIElSIHByb3RvY29sIHRoYXQgaXMgYWxtb3N0IHN0YW5kYXJkIFJDLTUsIGJ1dCBub3QgcXVpdGUsCisJICAgYXMgaXQgdXNlcyBhbiBhZGRpdGlvbmFsIGJpdCkuCisKK2NvbmZpZyBJUl9MSVJDX0NPREVDCisJdHJpc3RhdGUgIkVuYWJsZSBJUiB0byBMSVJDIGJyaWRnZSIKKwlkZXBlbmRzIG9uIFJDX0NPUkUKKwlkZXBlbmRzIG9uIExJUkMKKwlkZWZhdWx0IHkKKworCS0tLWhlbHAtLS0KKwkgICBFbmFibGUgdGhpcyBvcHRpb24gdG8gcGFzcyByYXcgSVIgdG8gYW5kIGZyb20gdXNlcnNwYWNlIHZpYQorCSAgIHRoZSBMSVJDIGludGVyZmFjZS4KKworY29uZmlnIElSX0VORQorCXRyaXN0YXRlICJFTkUgZUhvbWUgUmVjZWl2ZXIvVHJhbnNjZWl2ZXIgKHBucCBpZDogRU5FMDEwMC9FTkUwMnh4eCkiCisJZGVwZW5kcyBvbiBQTlAKKwlkZXBlbmRzIG9uIFJDX0NPUkUKKwktLS1oZWxwLS0tCisJICAgU2F5IFkgaGVyZSB0byBlbmFibGUgc3VwcG9ydCBmb3IgaW50ZWdyYXRlZCBpbmZyYXJlZCByZWNlaXZlcgorCSAgIC90cmFuc2NlaXZlciBtYWRlIGJ5IEVORS4KKworCSAgIFlvdSBjYW4gc2VlIGlmIHlvdSBoYXZlIGl0IGJ5IGxvb2tpbmcgYXQgbHNwbnAgb3V0cHV0LgorCSAgIE91dHB1dCBzaG91bGQgaW5jbHVkZSBFTkUwMTAwIEVORTAyMDAgb3Igc29tZXRoaW5nIHNpbWlsYXIuCisKKwkgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZW5lX2lyLgorCitjb25maWcgSVJfSU1PTgorCXRyaXN0YXRlICJTb3VuZEdyYXBoIGlNT04gUmVjZWl2ZXIgYW5kIERpc3BsYXkiCisJZGVwZW5kcyBvbiBVU0JfQVJDSF9IQVNfSENECisJZGVwZW5kcyBvbiBSQ19DT1JFCisJc2VsZWN0IFVTQgorCS0tLWhlbHAtLS0KKwkgICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBhIFNvdW5kR3JhcGggaU1PTiAoYWthIEFudGVjIFZlcmlzKQorCSAgIElSIFJlY2VpdmVyIGFuZC9vciBMQ0QvVkZEL1ZHQSBkaXNwbGF5LgorCisJICAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGltb24uCisKK2NvbmZpZyBJUl9NQ0VVU0IKKwl0cmlzdGF0ZSAiV2luZG93cyBNZWRpYSBDZW50ZXIgRWQuIGVIb21lIEluZnJhcmVkIFRyYW5zY2VpdmVyIgorCWRlcGVuZHMgb24gVVNCX0FSQ0hfSEFTX0hDRAorCWRlcGVuZHMgb24gUkNfQ09SRQorCXNlbGVjdCBVU0IKKwktLS1oZWxwLS0tCisJICAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgYSBXaW5kb3dzIE1lZGlhIENlbnRlciBFZGl0aW9uCisJICAgZUhvbWUgSW5mcmFyZWQgVHJhbnNjZWl2ZXIuCisKKwkgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbWNldXNiLgorCitjb25maWcgSVJfTlVWT1RPTgorCXRyaXN0YXRlICJOdXZvdG9uIHc4MzZ4N2hnIENvbnN1bWVyIEluZnJhcmVkIFRyYW5zY2VpdmVyIgorCWRlcGVuZHMgb24gUE5QCisJZGVwZW5kcyBvbiBSQ19DT1JFCisJLS0taGVscC0tLQorCSAgIFNheSBZIGhlcmUgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIGludGVncmF0ZWQgaW5mcmFyZWQgcmVjZWl2ZXIKKwkgICAvdHJhbnNjaWV2ZXIgbWFkZSBieSBOdXZvdG9uIChmb3JtZXJseSBXaW5ib25kKS4gVGhpcyBjaGlwIGlzCisJICAgZm91bmQgaW4gdGhlIEFTUm9jayBJT04gMzMwSFQsIGFzIHdlbGwgYXMgYXNzb3J0ZWQgSW50ZWwKKwkgICBEUDU1LXNlcmllcyBtb3RoZXJib2FyZHMgKGFuZCBvZiBjb3Vyc2UsIHBvc3NpYmx5IG90aGVycykuCisKKwkgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbnV2b3Rvbi1jaXIuCisKK2NvbmZpZyBJUl9TVFJFQU1aQVAKKwl0cmlzdGF0ZSAiU3RyZWFtemFwIFBDIFJlbW90ZSBJUiBSZWNlaXZlciIKKwlkZXBlbmRzIG9uIFVTQl9BUkNIX0hBU19IQ0QKKwlkZXBlbmRzIG9uIFJDX0NPUkUKKwlzZWxlY3QgVVNCCisJLS0taGVscC0tLQorCSAgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIGEgU3RyZWFtemFwIFBDIFJlbW90ZQorCSAgIEluZnJhcmVkIFJlY2VpdmVyLgorCisJICAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHN0cmVhbXphcC4KKworY29uZmlnIElSX1dJTkJPTkRfQ0lSCisgICAgICAgIHRyaXN0YXRlICJXaW5ib25kIElSIHJlbW90ZSBjb250cm9sIgorICAgICAgICBkZXBlbmRzIG9uIFg4NiAmJiBQTlAKKwlkZXBlbmRzIG9uIFJDX0NPUkUKKyAgICAgICAgc2VsZWN0IE5FV19MRURTCisgICAgICAgIHNlbGVjdCBMRURTX0NMQVNTCisgICAgICAgIHNlbGVjdCBMRURTX1RSSUdHRVJTCisgICAgICAgIHNlbGVjdCBCSVRSRVZFUlNFCisJLS0taGVscC0tLQorICAgICAgICAgICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgSVIgcmVtb3RlIGZ1bmN0aW9uYWxpdHkgZm91bmQKKyAgICAgICAgICAgaW4gc29tZSBXaW5ib25kIFN1cGVySS9PIGNoaXBzLiBDdXJyZW50bHkgb25seSB0aGUgV1BDRDM3NkkKKyAgICAgICAgICAgY2hpcCBpcyBzdXBwb3J0ZWQgKGluY2x1ZGVkIGluIHNvbWUgSW50ZWwgTWVkaWEgc2VyaWVzCisJICAgbW90aGVyYm9hcmRzKS4KKworICAgICAgICAgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwKKwkgICBiZSBjYWxsZWQgd2luYm9uZF9jaXIuCisKK2NvbmZpZyBSQ19MT09QQkFDSworCXRyaXN0YXRlICJSZW1vdGUgQ29udHJvbCBMb29wYmFjayBEcml2ZXIiCisJZGVwZW5kcyBvbiBSQ19DT1JFCisJLS0taGVscC0tLQorCSAgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgdGhlIHJlbW90ZSBjb250cm9sIGxvb3BiYWNrCisJICAgZHJpdmVyIHdoaWNoIGFsbG93cyBUWCBkYXRhIHRvIGJlIHNlbnQgYmFjayBhcyBSWCBkYXRhLgorCSAgIFRoaXMgaXMgbW9zdGx5IHVzZWZ1bCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLgorCisJICAgSWYgeW91J3JlIG5vdCBzdXJlLCBzZWxlY3QgTiBoZXJlLgorCisJICAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsCisJICAgYmUgY2FsbGVkIHJjX2xvb3BiYWNrLgorCitlbmRpZiAjUkNfQ09SRQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvcmMvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdiNGY3ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvcmMvTWFrZWZpbGUKQEAgLTAsMCArMSwyMiBAQAorcmMtY29yZS1vYmpzCTo9IHJjLW1haW4ubyBpci1yYXcubworCitvYmoteSArPSBrZXltYXBzLworCitvYmotJChDT05GSUdfUkNfQ09SRSkgKz0gcmMtY29yZS5vCitvYmotJChDT05GSUdfTElSQykgKz0gbGlyY19kZXYubworb2JqLSQoQ09ORklHX0lSX05FQ19ERUNPREVSKSArPSBpci1uZWMtZGVjb2Rlci5vCitvYmotJChDT05GSUdfSVJfUkM1X0RFQ09ERVIpICs9IGlyLXJjNS1kZWNvZGVyLm8KK29iai0kKENPTkZJR19JUl9SQzZfREVDT0RFUikgKz0gaXItcmM2LWRlY29kZXIubworb2JqLSQoQ09ORklHX0lSX0pWQ19ERUNPREVSKSArPSBpci1qdmMtZGVjb2Rlci5vCitvYmotJChDT05GSUdfSVJfU09OWV9ERUNPREVSKSArPSBpci1zb255LWRlY29kZXIubworb2JqLSQoQ09ORklHX0lSX1JDNV9TWl9ERUNPREVSKSArPSBpci1yYzUtc3otZGVjb2Rlci5vCitvYmotJChDT05GSUdfSVJfTElSQ19DT0RFQykgKz0gaXItbGlyYy1jb2RlYy5vCisKKyMgc3RhbmQtYWxvbmUgSVIgcmVjZWl2ZXJzL3RyYW5zbWl0dGVycworb2JqLSQoQ09ORklHX0lSX0lNT04pICs9IGltb24ubworb2JqLSQoQ09ORklHX0lSX01DRVVTQikgKz0gbWNldXNiLm8KK29iai0kKENPTkZJR19JUl9OVVZPVE9OKSArPSBudXZvdG9uLWNpci5vCitvYmotJChDT05GSUdfSVJfRU5FKSArPSBlbmVfaXIubworb2JqLSQoQ09ORklHX0lSX1NUUkVBTVpBUCkgKz0gc3RyZWFtemFwLm8KK29iai0kKENPTkZJR19JUl9XSU5CT05EX0NJUikgKz0gd2luYm9uZC1jaXIubworb2JqLSQoQ09ORklHX1JDX0xPT1BCQUNLKSArPSByYy1sb29wYmFjay5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JjL2VuZV9pci5jIGIvZHJpdmVycy9tZWRpYS9yYy9lbmVfaXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGIzYzMxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9lbmVfaXIuYwpAQCAtMCwwICsxLDEyMDggQEAKKy8qCisgKiBkcml2ZXIgZm9yIEVORSBLQjM5MjYgQi9DL0QvRS9GIENJUiAocG5wIGlkOiBFTkUwWFhYKQorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBNYXhpbSBMZXZpdHNreSA8bWF4aW1sZXZpdHNreUBnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorICogTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICogVVNBCisgKgorICogU3BlY2lhbCB0aGFua3MgdG86CisgKiAgIFNhbWkgUi4gPG1hZXNlc2FtaUBnbWFpbC5jb20+IGZvciBsb3Qgb2YgaGVscCBpbiBkZWJ1Z2dpbmcgYW5kIHRoZXJlZm9yZQorICogICAgYnJpbmdpbmcgdG8gbGlmZSBzdXBwb3J0IGZvciB0cmFuc21pc3Npb24gJiBsZWFybmluZyBtb2RlLgorICoKKyAqICAgQ2hhcmxpZSBBbmRyZXdzIDxjaGFybGlldGhlcGlsb3RAZ29vZ2xlbWFpbC5jb20+IGZvciBsb3RzIG9mIGhlbHAgaW4KKyAqICAgYnJpbmdpbmcgdXAgdGhlIHN1cHBvcnQgb2YgbmV3IGZpcm13YXJlIGJ1ZmZlciB0aGF0IGlzIHBvcHVsYXIKKyAqICAgb24gbGF0ZXN0IG5vdGVib29rcworICoKKyAqICAgRU5FIGZvciBwYXJ0aWFsIGRldmljZSBkb2N1bWVudGF0aW9uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbnAuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPG1lZGlhL3JjLWNvcmUuaD4KKyNpbmNsdWRlICJlbmVfaXIuaCIKKworc3RhdGljIGludCBzYW1wbGVfcGVyaW9kOworc3RhdGljIGJvb2wgbGVhcm5pbmdfbW9kZV9mb3JjZTsKK3N0YXRpYyBpbnQgZGVidWc7CitzdGF0aWMgYm9vbCB0eHNpbTsKKworc3RhdGljIHZvaWQgZW5lX3NldF9yZWdfYWRkcihzdHJ1Y3QgZW5lX2RldmljZSAqZGV2LCB1MTYgcmVnKQoreworCW91dGIocmVnID4+IDgsIGRldi0+aHdfaW8gKyBFTkVfQUREUl9ISSk7CisJb3V0YihyZWcgJiAweEZGLCBkZXYtPmh3X2lvICsgRU5FX0FERFJfTE8pOworfQorCisvKiByZWFkIGEgaGFyZHdhcmUgcmVnaXN0ZXIgKi8KK3N0YXRpYyB1OCBlbmVfcmVhZF9yZWcoc3RydWN0IGVuZV9kZXZpY2UgKmRldiwgdTE2IHJlZykKK3sKKwl1OCByZXR2YWw7CisJZW5lX3NldF9yZWdfYWRkcihkZXYsIHJlZyk7CisJcmV0dmFsID0gaW5iKGRldi0+aHdfaW8gKyBFTkVfSU8pOworCWRiZ19yZWdzKCJyZWcgJTA0eCA9PSAlMDJ4IiwgcmVnLCByZXR2YWwpOworCXJldHVybiByZXR2YWw7Cit9CisKKy8qIHdyaXRlIGEgaGFyZHdhcmUgcmVnaXN0ZXIgKi8KK3N0YXRpYyB2b2lkIGVuZV93cml0ZV9yZWcoc3RydWN0IGVuZV9kZXZpY2UgKmRldiwgdTE2IHJlZywgdTggdmFsdWUpCit7CisJZGJnX3JlZ3MoInJlZyAlMDR4IDwtICUwMngiLCByZWcsIHZhbHVlKTsKKwllbmVfc2V0X3JlZ19hZGRyKGRldiwgcmVnKTsKKwlvdXRiKHZhbHVlLCBkZXYtPmh3X2lvICsgRU5FX0lPKTsKK30KKworLyogU2V0IGJpdHMgaW4gaGFyZHdhcmUgcmVnaXN0ZXIgKi8KK3N0YXRpYyB2b2lkIGVuZV9zZXRfcmVnX21hc2soc3RydWN0IGVuZV9kZXZpY2UgKmRldiwgdTE2IHJlZywgdTggbWFzaykKK3sKKwlkYmdfcmVncygicmVnICUwNHggfD0gJTAyeCIsIHJlZywgbWFzayk7CisJZW5lX3NldF9yZWdfYWRkcihkZXYsIHJlZyk7CisJb3V0YihpbmIoZGV2LT5od19pbyArIEVORV9JTykgfCBtYXNrLCBkZXYtPmh3X2lvICsgRU5FX0lPKTsKK30KKworLyogQ2xlYXIgYml0cyBpbiBoYXJkd2FyZSByZWdpc3RlciAqLworc3RhdGljIHZvaWQgZW5lX2NsZWFyX3JlZ19tYXNrKHN0cnVjdCBlbmVfZGV2aWNlICpkZXYsIHUxNiByZWcsIHU4IG1hc2spCit7CisJZGJnX3JlZ3MoInJlZyAlMDR4ICY9IH4lMDJ4ICIsIHJlZywgbWFzayk7CisJZW5lX3NldF9yZWdfYWRkcihkZXYsIHJlZyk7CisJb3V0YihpbmIoZGV2LT5od19pbyArIEVORV9JTykgJiB+bWFzaywgZGV2LT5od19pbyArIEVORV9JTyk7Cit9CisKKy8qIEEgaGVscGVyIHRvIHNldC9jbGVhciBhIGJpdCBpbiByZWdpc3RlciBhY2NvcmRpbmcgdG8gYm9vbGVhbiB2YXJpYWJsZSAqLworc3RhdGljIHZvaWQgZW5lX3NldF9jbGVhcl9yZWdfbWFzayhzdHJ1Y3QgZW5lX2RldmljZSAqZGV2LCB1MTYgcmVnLCB1OCBtYXNrLAorCQkJCQkJCQlib29sIHNldCkKK3sKKwlpZiAoc2V0KQorCQllbmVfc2V0X3JlZ19tYXNrKGRldiwgcmVnLCBtYXNrKTsKKwllbHNlCisJCWVuZV9jbGVhcl9yZWdfbWFzayhkZXYsIHJlZywgbWFzayk7Cit9CisKKy8qIGRldGVjdCBoYXJkd2FyZSBmZWF0dXJlcyAqLworc3RhdGljIGludCBlbmVfaHdfZGV0ZWN0KHN0cnVjdCBlbmVfZGV2aWNlICpkZXYpCit7CisJdTggY2hpcF9tYWpvciwgY2hpcF9taW5vcjsKKwl1OCBod19yZXZpc2lvbiwgb2xkX3ZlcjsKKwl1OCBmd19yZWcyLCBmd19yZWcxOworCisJZW5lX2NsZWFyX3JlZ19tYXNrKGRldiwgRU5FX0VDU1RTLCBFTkVfRUNTVFNfUlNSVkQpOworCWNoaXBfbWFqb3IgPSBlbmVfcmVhZF9yZWcoZGV2LCBFTkVfRUNWRVJfTUFKT1IpOworCWNoaXBfbWlub3IgPSBlbmVfcmVhZF9yZWcoZGV2LCBFTkVfRUNWRVJfTUlOT1IpOworCWVuZV9zZXRfcmVnX21hc2soZGV2LCBFTkVfRUNTVFMsIEVORV9FQ1NUU19SU1JWRCk7CisKKwlod19yZXZpc2lvbiA9IGVuZV9yZWFkX3JlZyhkZXYsIEVORV9FQ0hWKTsKKwlvbGRfdmVyID0gZW5lX3JlYWRfcmVnKGRldiwgRU5FX0hXX1ZFUl9PTEQpOworCisJZGV2LT5wbGxfZnJlcSA9IChlbmVfcmVhZF9yZWcoZGV2LCBFTkVfUExMRlJIKSA8PCA0KSArCisJCShlbmVfcmVhZF9yZWcoZGV2LCBFTkVfUExMRlJMKSA+PiA0KTsKKworCWlmIChzYW1wbGVfcGVyaW9kICE9IEVORV9ERUZBVUxUX1NBTVBMRV9QRVJJT0QpCisJCWRldi0+cnhfcGVyaW9kX2FkanVzdCA9CisJCQlkZXYtPnBsbF9mcmVxID09IEVORV9ERUZBVUxUX1BMTF9GUkVRID8gMiA6IDQ7CisKKwlpZiAoaHdfcmV2aXNpb24gPT0gMHhGRikgeworCQllbmVfd2FybigiZGV2aWNlIHNlZW1zIHRvIGJlIGRpc2FibGVkIik7CisJCWVuZV93YXJuKCJzZW5kIGEgbWFpbCB0byBsaXJjLWxpc3RAbGlzdHMuc291cmNlZm9yZ2UubmV0Iik7CisJCWVuZV93YXJuKCJwbGVhc2UgYXR0YWNoIG91dHB1dCBvZiBhY3BpZHVtcCBhbmQgZG1pZGVjb2RlIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWVuZV9ub3RpY2UoImNoaXAgaXMgMHglMDJ4JTAyeCAtIGtidmVyID0gMHglMDJ4LCByZXYgPSAweCUwMngiLAorCQljaGlwX21ham9yLCBjaGlwX21pbm9yLCBvbGRfdmVyLCBod19yZXZpc2lvbik7CisKKwllbmVfbm90aWNlKCJQTEwgZnJlcSA9ICVkIiwgZGV2LT5wbGxfZnJlcSk7CisKKwlpZiAoY2hpcF9tYWpvciA9PSAweDMzKSB7CisJCWVuZV93YXJuKCJjaGlwcyAweDMzeHggYXJlbid0IHN1cHBvcnRlZCIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAoY2hpcF9tYWpvciA9PSAweDM5ICYmIGNoaXBfbWlub3IgPT0gMHgyNiAmJiBod19yZXZpc2lvbiA9PSAweEMwKSB7CisJCWRldi0+aHdfcmV2aXNpb24gPSBFTkVfSFdfQzsKKwkJZW5lX25vdGljZSgiS0IzOTI2QyBkZXRlY3RlZCIpOworCX0gZWxzZSBpZiAob2xkX3ZlciA9PSAweDI0ICYmIGh3X3JldmlzaW9uID09IDB4QzApIHsKKwkJZGV2LT5od19yZXZpc2lvbiA9IEVORV9IV19COworCQllbmVfbm90aWNlKCJLQjM5MjZCIGRldGVjdGVkIik7CisJfSBlbHNlIHsKKwkJZGV2LT5od19yZXZpc2lvbiA9IEVORV9IV19EOworCQllbmVfbm90aWNlKCJLQjM5MjZEIG9yIGhpZ2hlciBkZXRlY3RlZCIpOworCX0KKworCS8qIGRldGVjdCBmZWF0dXJlcyBoYXJkd2FyZSBzdXBwb3J0cyAqLworCWlmIChkZXYtPmh3X3JldmlzaW9uIDwgRU5FX0hXX0MpCisJCXJldHVybiAwOworCisJZndfcmVnMSA9IGVuZV9yZWFkX3JlZyhkZXYsIEVORV9GVzEpOworCWZ3X3JlZzIgPSBlbmVfcmVhZF9yZWcoZGV2LCBFTkVfRlcyKTsKKworCWVuZV9ub3RpY2UoIkZpcm13YXJlIHJlZ3M6ICUwMnggJTAyeCIsIGZ3X3JlZzEsIGZ3X3JlZzIpOworCisJZGV2LT5od191c2VfZ3Bpb18wYSA9ICEhKGZ3X3JlZzIgJiBFTkVfRlcyX0dQMEEpOworCWRldi0+aHdfbGVhcm5pbmdfYW5kX3R4X2NhcGFibGUgPSAhIShmd19yZWcyICYgRU5FX0ZXMl9MRUFSTklORyk7CisJZGV2LT5od19leHRyYV9idWZmZXIgPSAhIShmd19yZWcxICYgRU5FX0ZXMV9IQVNfRVhUUkFfQlVGKTsKKworCWlmIChkZXYtPmh3X2xlYXJuaW5nX2FuZF90eF9jYXBhYmxlKQorCQlkZXYtPmh3X2Zhbl9pbnB1dCA9ICEhKGZ3X3JlZzIgJiBFTkVfRlcyX0ZBTl9JTlBVVCk7CisKKwllbmVfbm90aWNlKCJIYXJkd2FyZSBmZWF0dXJlczoiKTsKKworCWlmIChkZXYtPmh3X2xlYXJuaW5nX2FuZF90eF9jYXBhYmxlKSB7CisJCWVuZV9ub3RpY2UoIiogU3VwcG9ydHMgdHJhbnNtaXR0aW5nICYgbGVhcm5pbmcgbW9kZSIpOworCQllbmVfbm90aWNlKCIgICBUaGlzIGZlYXR1cmUgaXMgcmFyZSBhbmQgdGhlcmVmb3JlLCIpOworCQllbmVfbm90aWNlKCIgICB5b3UgYXJlIHdlbGNvbWUgdG8gdGVzdCBpdCwiKTsKKwkJZW5lX25vdGljZSgiICAgYW5kL29yIGNvbnRhY3QgdGhlIGF1dGhvciB2aWE6Iik7CisJCWVuZV9ub3RpY2UoIiAgIGxpcmMtbGlzdEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQiKTsKKwkJZW5lX25vdGljZSgiICAgb3IgbWF4aW1sZXZpdHNreUBnbWFpbC5jb20iKTsKKworCQllbmVfbm90aWNlKCIqIFVzZXMgR1BJTyAlcyBmb3IgSVIgcmF3IGlucHV0IiwKKwkJCWRldi0+aHdfdXNlX2dwaW9fMGEgPyAiNDAiIDogIjBBIik7CisKKwkJaWYgKGRldi0+aHdfZmFuX2lucHV0KQorCQkJZW5lX25vdGljZSgiKiBVc2VzIHVudXNlZCBmYW4gZmVlZGJhY2sgaW5wdXQgYXMgc291cmNlIgorCQkJCQkiIG9mIGRlbW9kdWxhdGVkIElSIGRhdGEiKTsKKwl9CisKKwlpZiAoIWRldi0+aHdfZmFuX2lucHV0KQorCQllbmVfbm90aWNlKCIqIFVzZXMgR1BJTyAlcyBmb3IgSVIgZGVtb2R1bGF0ZWQgaW5wdXQiLAorCQkJZGV2LT5od191c2VfZ3Bpb18wYSA/ICIwQSIgOiAiNDAiKTsKKworCWlmIChkZXYtPmh3X2V4dHJhX2J1ZmZlcikKKwkJZW5lX25vdGljZSgiKiBVc2VzIG5ldyBzdHlsZSBpbnB1dCBidWZmZXIiKTsKKwlyZXR1cm4gMDsKK30KKworLyogUmVhZCBwcm9wZXJpdGllcyBvZiBodyBzYW1wbGUgYnVmZmVyICovCitzdGF0aWMgdm9pZCBlbmVfcnhfc2V0dXBfaHdfYnVmZmVyKHN0cnVjdCBlbmVfZGV2aWNlICpkZXYpCit7CisJdTE2IHRtcDsKKworCWVuZV9yeF9yZWFkX2h3X3BvaW50ZXIoZGV2KTsKKwlkZXYtPnJfcG9pbnRlciA9IGRldi0+d19wb2ludGVyOworCisJaWYgKCFkZXYtPmh3X2V4dHJhX2J1ZmZlcikgeworCQlkZXYtPmJ1ZmZlcl9sZW4gPSBFTkVfRldfUEFDS0VUX1NJWkUgKiAyOworCQlyZXR1cm47CisJfQorCisJdG1wID0gZW5lX3JlYWRfcmVnKGRldiwgRU5FX0ZXX1NBTVBMRV9CVUZGRVIpOworCXRtcCB8PSBlbmVfcmVhZF9yZWcoZGV2LCBFTkVfRldfU0FNUExFX0JVRkZFUisxKSA8PCA4OworCWRldi0+ZXh0cmFfYnVmMV9hZGRyZXNzID0gdG1wOworCisJZGV2LT5leHRyYV9idWYxX2xlbiA9IGVuZV9yZWFkX3JlZyhkZXYsIEVORV9GV19TQU1QTEVfQlVGRkVSICsgMik7CisKKwl0bXAgPSBlbmVfcmVhZF9yZWcoZGV2LCBFTkVfRldfU0FNUExFX0JVRkZFUiArIDMpOworCXRtcCB8PSBlbmVfcmVhZF9yZWcoZGV2LCBFTkVfRldfU0FNUExFX0JVRkZFUiArIDQpIDw8IDg7CisJZGV2LT5leHRyYV9idWYyX2FkZHJlc3MgPSB0bXA7CisKKwlkZXYtPmV4dHJhX2J1ZjJfbGVuID0gZW5lX3JlYWRfcmVnKGRldiwgRU5FX0ZXX1NBTVBMRV9CVUZGRVIgKyA1KTsKKworCWRldi0+YnVmZmVyX2xlbiA9IGRldi0+ZXh0cmFfYnVmMV9sZW4gKyBkZXYtPmV4dHJhX2J1ZjJfbGVuICsgODsKKworCWVuZV9ub3RpY2UoIkhhcmR3YXJlIHVzZXMgMiBleHRlbmRlZCBidWZmZXJzOiIpOworCWVuZV9ub3RpY2UoIiAgMHglMDR4IC0gbGVuIDogJWQiLCBkZXYtPmV4dHJhX2J1ZjFfYWRkcmVzcywKKwkJCQkJCWRldi0+ZXh0cmFfYnVmMV9sZW4pOworCWVuZV9ub3RpY2UoIiAgMHglMDR4IC0gbGVuIDogJWQiLCBkZXYtPmV4dHJhX2J1ZjJfYWRkcmVzcywKKwkJCQkJCWRldi0+ZXh0cmFfYnVmMl9sZW4pOworCisJZW5lX25vdGljZSgiVG90YWwgYnVmZmVyIGxlbiA9ICVkIiwgZGV2LT5idWZmZXJfbGVuKTsKKworCWlmIChkZXYtPmJ1ZmZlcl9sZW4gPiA2NCB8fCBkZXYtPmJ1ZmZlcl9sZW4gPCAxNikKKwkJZ290byBlcnJvcjsKKworCWlmIChkZXYtPmV4dHJhX2J1ZjFfYWRkcmVzcyA+IDB4RkJGQyB8fAorCQkJCQlkZXYtPmV4dHJhX2J1ZjFfYWRkcmVzcyA8IDB4RUMwMCkKKwkJZ290byBlcnJvcjsKKworCWlmIChkZXYtPmV4dHJhX2J1ZjJfYWRkcmVzcyA+IDB4RkJGQyB8fAorCQkJCQlkZXYtPmV4dHJhX2J1ZjJfYWRkcmVzcyA8IDB4RUMwMCkKKwkJZ290byBlcnJvcjsKKworCWlmIChkZXYtPnJfcG9pbnRlciA+IGRldi0+YnVmZmVyX2xlbikKKwkJZ290byBlcnJvcjsKKworCWVuZV9zZXRfcmVnX21hc2soZGV2LCBFTkVfRlcxLCBFTkVfRlcxX0VYVFJBX0JVRl9ITkQpOworCXJldHVybjsKK2Vycm9yOgorCWVuZV93YXJuKCJFcnJvciB2YWxpZGF0aW5nIGV4dHJhIGJ1ZmZlcnMsIGRldmljZSBwcm9iYWJseSB3b24ndCB3b3JrIik7CisJZGV2LT5od19leHRyYV9idWZmZXIgPSBmYWxzZTsKKwllbmVfY2xlYXJfcmVnX21hc2soZGV2LCBFTkVfRlcxLCBFTkVfRlcxX0VYVFJBX0JVRl9ITkQpOworfQorCisKKy8qIFJlc3RvcmUgdGhlIHBvaW50ZXJzIHRvIGV4dHJhIGJ1ZmZlcnMgLSB0byBtYWtlIG1vZHVsZSByZWxvYWQgd29yayovCitzdGF0aWMgdm9pZCBlbmVfcnhfcmVzdG9yZV9od19idWZmZXIoc3RydWN0IGVuZV9kZXZpY2UgKmRldikKK3sKKwlpZiAoIWRldi0+aHdfZXh0cmFfYnVmZmVyKQorCQlyZXR1cm47CisKKwllbmVfd3JpdGVfcmVnKGRldiwgRU5FX0ZXX1NBTVBMRV9CVUZGRVIgKyAwLAorCQkJCWRldi0+ZXh0cmFfYnVmMV9hZGRyZXNzICYgMHhGRik7CisJZW5lX3dyaXRlX3JlZyhkZXYsIEVORV9GV19TQU1QTEVfQlVGRkVSICsgMSwKKwkJCQlkZXYtPmV4dHJhX2J1ZjFfYWRkcmVzcyA+PiA4KTsKKwllbmVfd3JpdGVfcmVnKGRldiwgRU5FX0ZXX1NBTVBMRV9CVUZGRVIgKyAyLCBkZXYtPmV4dHJhX2J1ZjFfbGVuKTsKKworCWVuZV93cml0ZV9yZWcoZGV2LCBFTkVfRldfU0FNUExFX0JVRkZFUiArIDMsCisJCQkJZGV2LT5leHRyYV9idWYyX2FkZHJlc3MgJiAweEZGKTsKKwllbmVfd3JpdGVfcmVnKGRldiwgRU5FX0ZXX1NBTVBMRV9CVUZGRVIgKyA0LAorCQkJCWRldi0+ZXh0cmFfYnVmMl9hZGRyZXNzID4+IDgpOworCWVuZV93cml0ZV9yZWcoZGV2LCBFTkVfRldfU0FNUExFX0JVRkZFUiArIDUsCisJCQkJZGV2LT5leHRyYV9idWYyX2xlbik7CisJZW5lX2NsZWFyX3JlZ19tYXNrKGRldiwgRU5FX0ZXMSwgRU5FX0ZXMV9FWFRSQV9CVUZfSE5EKTsKK30KKworLyogUmVhZCBoYXJkd2FyZSB3cml0ZSBwb2ludGVyICovCitzdGF0aWMgdm9pZCBlbmVfcnhfcmVhZF9od19wb2ludGVyKHN0cnVjdCBlbmVfZGV2aWNlICpkZXYpCit7CisJaWYgKGRldi0+aHdfZXh0cmFfYnVmZmVyKQorCQlkZXYtPndfcG9pbnRlciA9IGVuZV9yZWFkX3JlZyhkZXYsIEVORV9GV19SWF9QT0lOVEVSKTsKKwllbHNlCisJCWRldi0+d19wb2ludGVyID0gZW5lX3JlYWRfcmVnKGRldiwgRU5FX0ZXMikKKwkJCSYgRU5FX0ZXMl9CVUZfV1BUUiA/IDAgOiBFTkVfRldfUEFDS0VUX1NJWkU7CisKKwlkYmdfdmVyYm9zZSgiUkI6IEhXIHdyaXRlIHBvaW50ZXI6ICUwMngsIGRyaXZlciByZWFkIHBvaW50ZXI6ICUwMngiLAorCQlkZXYtPndfcG9pbnRlciwgZGV2LT5yX3BvaW50ZXIpOworfQorCisvKiBHZXRzIGFkZHJlc3Mgb2YgbmV4dCBzYW1wbGUgZnJvbSBIVyByaW5nIGJ1ZmZlciAqLworc3RhdGljIGludCBlbmVfcnhfZ2V0X3NhbXBsZV9yZWcoc3RydWN0IGVuZV9kZXZpY2UgKmRldikKK3sKKwlpbnQgcl9wb2ludGVyOworCisJaWYgKGRldi0+cl9wb2ludGVyID09IGRldi0+d19wb2ludGVyKSB7CisJCWRiZ192ZXJib3NlKCJSQjogaGl0IGVuZCwgdHJ5IHVwZGF0ZSB3X3BvaW50ZXIiKTsKKwkJZW5lX3J4X3JlYWRfaHdfcG9pbnRlcihkZXYpOworCX0KKworCWlmIChkZXYtPnJfcG9pbnRlciA9PSBkZXYtPndfcG9pbnRlcikgeworCQlkYmdfdmVyYm9zZSgiUkI6IGVuZCBvZiBkYXRhIGF0ICVkIiwgZGV2LT5yX3BvaW50ZXIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlkYmdfdmVyYm9zZSgiUkI6IHJlYWRpbmcgYXQgb2Zmc2V0ICVkIiwgZGV2LT5yX3BvaW50ZXIpOworCXJfcG9pbnRlciA9IGRldi0+cl9wb2ludGVyOworCisJZGV2LT5yX3BvaW50ZXIrKzsKKwlpZiAoZGV2LT5yX3BvaW50ZXIgPT0gZGV2LT5idWZmZXJfbGVuKQorCQlkZXYtPnJfcG9pbnRlciA9IDA7CisKKwlkYmdfdmVyYm9zZSgiUkI6IG5leHQgcmVhZCB3aWxsIGJlIGZyb20gb2Zmc2V0ICVkIiwgZGV2LT5yX3BvaW50ZXIpOworCisJaWYgKHJfcG9pbnRlciA8IDgpIHsKKwkJZGJnX3ZlcmJvc2UoIlJCOiByZWFkIGF0IG1haW4gYnVmZmVyIGF0ICVkIiwgcl9wb2ludGVyKTsKKwkJcmV0dXJuIEVORV9GV19TQU1QTEVfQlVGRkVSICsgcl9wb2ludGVyOworCX0KKworCXJfcG9pbnRlciAtPSA4OworCisJaWYgKHJfcG9pbnRlciA8IGRldi0+ZXh0cmFfYnVmMV9sZW4pIHsKKwkJZGJnX3ZlcmJvc2UoIlJCOiByZWFkIGF0IDFzdCBleHRyYSBidWZmZXIgYXQgJWQiLCByX3BvaW50ZXIpOworCQlyZXR1cm4gZGV2LT5leHRyYV9idWYxX2FkZHJlc3MgKyByX3BvaW50ZXI7CisJfQorCisJcl9wb2ludGVyIC09IGRldi0+ZXh0cmFfYnVmMV9sZW47CisKKwlpZiAocl9wb2ludGVyIDwgZGV2LT5leHRyYV9idWYyX2xlbikgeworCQlkYmdfdmVyYm9zZSgiUkI6IHJlYWQgYXQgMm5kIGV4dHJhIGJ1ZmZlciBhdCAlZCIsIHJfcG9pbnRlcik7CisJCXJldHVybiBkZXYtPmV4dHJhX2J1ZjJfYWRkcmVzcyArIHJfcG9pbnRlcjsKKwl9CisKKwlkYmcoImF0dGVtcHQgdG8gcmVhZCBiZXlvbmcgcmluZyBidWZlciBlbmQiKTsKKwlyZXR1cm4gMDsKK30KKworLyogU2Vuc2UgY3VycmVudCByZWNlaXZlZCBjYXJyaWVyICovCit2b2lkIGVuZV9yeF9zZW5zZV9jYXJyaWVyKHN0cnVjdCBlbmVfZGV2aWNlICpkZXYpCit7CisJREVGSU5FX0lSX1JBV19FVkVOVChldik7CisKKwlpbnQgY2FycmllciwgZHV0eV9jeWNsZTsKKwlpbnQgcGVyaW9kID0gZW5lX3JlYWRfcmVnKGRldiwgRU5FX0NJUkNBUl9QUkQpOworCWludCBocGVyaW9kID0gZW5lX3JlYWRfcmVnKGRldiwgRU5FX0NJUkNBUl9IUFJEKTsKKworCWlmICghKHBlcmlvZCAmIEVORV9DSVJDQVJfUFJEX1ZBTElEKSkKKwkJcmV0dXJuOworCisJcGVyaW9kICY9IH5FTkVfQ0lSQ0FSX1BSRF9WQUxJRDsKKworCWlmICghcGVyaW9kKQorCQlyZXR1cm47CisKKwlkYmcoIlJYOiBoYXJkd2FyZSBjYXJyaWVyIHBlcmlvZCA9ICUwMngiLCBwZXJpb2QpOworCWRiZygiUlg6IGhhcmR3YXJlIGNhcnJpZXIgcHVsc2UgcGVyaW9kID0gJTAyeCIsIGhwZXJpb2QpOworCisJY2FycmllciA9IDIwMDAwMDAgLyBwZXJpb2Q7CisJZHV0eV9jeWNsZSA9IChocGVyaW9kICogMTAwKSAvIHBlcmlvZDsKKwlkYmcoIlJYOiBzZW5zZWQgY2FycmllciA9ICVkIEh6LCBkdXR5IGN5Y2xlICVkJSUiLAorCQkJCQkJY2FycmllciwgZHV0eV9jeWNsZSk7CisJaWYgKGRldi0+Y2Fycmllcl9kZXRlY3RfZW5hYmxlZCkgeworCQlldi5jYXJyaWVyX3JlcG9ydCA9IHRydWU7CisJCWV2LmNhcnJpZXIgPSBjYXJyaWVyOworCQlldi5kdXR5X2N5Y2xlID0gZHV0eV9jeWNsZTsKKwkJaXJfcmF3X2V2ZW50X3N0b3JlKGRldi0+cmRldiwgJmV2KTsKKwl9Cit9CisKKy8qIHRoaXMgZW5hYmxlcy9kaXNhYmxlcyB0aGUgQ0lSIFJYIGVuZ2luZSAqLworc3RhdGljIHZvaWQgZW5lX3J4X2VuYWJsZV9jaXJfZW5naW5lKHN0cnVjdCBlbmVfZGV2aWNlICpkZXYsIGJvb2wgZW5hYmxlKQoreworCWVuZV9zZXRfY2xlYXJfcmVnX21hc2soZGV2LCBFTkVfQ0lSQ0ZHLAorCQkJRU5FX0NJUkNGR19SWF9FTiB8IEVORV9DSVJDRkdfUlhfSVJRLCBlbmFibGUpOworfQorCisvKiB0aGlzIHNlbGVjdHMgaW5wdXQgZm9yIENJUiBlbmdpbmUuIEV0aGVyIEdQSU8gMEEgb3IgR1BJTzQwKi8KK3N0YXRpYyB2b2lkIGVuZV9yeF9zZWxlY3RfaW5wdXQoc3RydWN0IGVuZV9kZXZpY2UgKmRldiwgYm9vbCBncGlvXzBhKQoreworCWVuZV9zZXRfY2xlYXJfcmVnX21hc2soZGV2LCBFTkVfQ0lSQ0ZHMiwgRU5FX0NJUkNGRzJfR1BJTzBBLCBncGlvXzBhKTsKK30KKworLyoKKyAqIHRoaXMgZW5hYmxlcyBhbHRlcm5hdGl2ZSBpbnB1dCB2aWEgZmFuIHRhY2hvbWV0ZXIgc2Vuc29yIGFuZCBieXBhc3NlcworICogdGhlIGh3IENJUiBlbmdpbmUKKyAqLworc3RhdGljIHZvaWQgZW5lX3J4X2VuYWJsZV9mYW5faW5wdXQoc3RydWN0IGVuZV9kZXZpY2UgKmRldiwgYm9vbCBlbmFibGUpCit7CisJaWYgKCFkZXYtPmh3X2Zhbl9pbnB1dCkKKwkJcmV0dXJuOworCisJaWYgKCFlbmFibGUpCisJCWVuZV93cml0ZV9yZWcoZGV2LCBFTkVfRkFOX0FTX0lOMSwgMCk7CisJZWxzZSB7CisJCWVuZV93cml0ZV9yZWcoZGV2LCBFTkVfRkFOX0FTX0lOMSwgRU5FX0ZBTl9BU19JTjFfRU4pOworCQllbmVfd3JpdGVfcmVnKGRldiwgRU5FX0ZBTl9BU19JTjIsIEVORV9GQU5fQVNfSU4yX0VOKTsKKwl9Cit9CisKKy8qIHNldHVwIHRoZSByZWNlaXZlciBmb3IgUlgqLworc3RhdGljIHZvaWQgZW5lX3J4X3NldHVwKHN0cnVjdCBlbmVfZGV2aWNlICpkZXYpCit7CisJYm9vbCBsZWFybmluZ19tb2RlID0gZGV2LT5sZWFybmluZ19tb2RlX2VuYWJsZWQgfHwKKwkJCQkJZGV2LT5jYXJyaWVyX2RldGVjdF9lbmFibGVkOworCWludCBzYW1wbGVfcGVyaW9kX2FkanVzdCA9IDA7CisKKwlkYmcoIlJYOiBzZXR1cCByZWNlaXZlciwgbGVhcm5pbmcgbW9kZSA9ICVkIiwgbGVhcm5pbmdfbW9kZSk7CisKKworCS8qIFRoaXMgc2VsZWN0cyBSTEMgaW5wdXQgYW5kIGNsZWFycyBDRkcyIHNldHRpbmdzICovCisJZW5lX3dyaXRlX3JlZyhkZXYsIEVORV9DSVJDRkcyLCAweDAwKTsKKworCS8qIHNldCBzYW1wbGUgcGVyaW9kKi8KKwlpZiAoc2FtcGxlX3BlcmlvZCA9PSBFTkVfREVGQVVMVF9TQU1QTEVfUEVSSU9EKQorCQlzYW1wbGVfcGVyaW9kX2FkanVzdCA9CisJCQlkZXYtPnBsbF9mcmVxID09IEVORV9ERUZBVUxUX1BMTF9GUkVRID8gMSA6IDI7CisKKwllbmVfd3JpdGVfcmVnKGRldiwgRU5FX0NJUlJMQ19DRkcsCisJCQkoc2FtcGxlX3BlcmlvZCArIHNhbXBsZV9wZXJpb2RfYWRqdXN0KSB8CisJCQkJCQlFTkVfQ0lSUkxDX0NGR19PVkVSRkxPVyk7CisJLyogcmV2QiBkb2Vzbid0IHN1cHBvcnQgaW5wdXRzICovCisJaWYgKGRldi0+aHdfcmV2aXNpb24gPCBFTkVfSFdfQykKKwkJZ290byBzZWxlY3RfdGltZW91dDsKKworCWlmIChsZWFybmluZ19tb2RlKSB7CisKKwkJV0FSTl9PTighZGV2LT5od19sZWFybmluZ19hbmRfdHhfY2FwYWJsZSk7CisKKwkJLyogRW5hYmxlIHRoZSBvcHBvc2l0ZSBvZiB0aGUgbm9ybWFsIGlucHV0CisJCVRoYXQgbWVhbnMgdGhhdCBpZiBHUElPNDAgaXMgbm9ybWFsbHkgdXNlZCwgdXNlIEdQSU8wQQorCQlhbmQgdmljZSB2ZXJzYS4KKwkJVGhpcyBpbnB1dCB3aWxsIGNhcnJ5IG5vbiBkZW1vZHVsYXRlZAorCQlzaWduYWwsIGFuZCB3ZSB3aWxsIHRlbGwgdGhlIGh3IHRvIGRlbW9kdWxhdGUgaXQgaXRzZWxmICovCisJCWVuZV9yeF9zZWxlY3RfaW5wdXQoZGV2LCAhZGV2LT5od191c2VfZ3Bpb18wYSk7CisJCWRldi0+cnhfZmFuX2lucHV0X2ludXNlID0gZmFsc2U7CisKKwkJLyogRW5hYmxlIGNhcnJpZXIgZGVtb2R1bGF0aW9uICovCisJCWVuZV9zZXRfcmVnX21hc2soZGV2LCBFTkVfQ0lSQ0ZHLCBFTkVfQ0lSQ0ZHX0NBUlJfREVNT0QpOworCisJCS8qIEVuYWJsZSBjYXJyaWVyIGRldGVjdGlvbiAqLworCQllbmVfd3JpdGVfcmVnKGRldiwgRU5FX0NJUkNBUl9QVUxTLCAweDYzKTsKKwkJZW5lX3NldF9jbGVhcl9yZWdfbWFzayhkZXYsIEVORV9DSVJDRkcyLCBFTkVfQ0lSQ0ZHMl9DQVJSX0RFVEVDVCwKKwkJCWRldi0+Y2Fycmllcl9kZXRlY3RfZW5hYmxlZCB8fCBkZWJ1Zyk7CisJfSBlbHNlIHsKKwkJaWYgKGRldi0+aHdfZmFuX2lucHV0KQorCQkJZGV2LT5yeF9mYW5faW5wdXRfaW51c2UgPSB0cnVlOworCQllbHNlCisJCQllbmVfcnhfc2VsZWN0X2lucHV0KGRldiwgZGV2LT5od191c2VfZ3Bpb18wYSk7CisKKwkJLyogRGlzYWJsZSBjYXJyaWVyIGRldGVjdGlvbiAmIGRlbW9kdWxhdGlvbiAqLworCQllbmVfY2xlYXJfcmVnX21hc2soZGV2LCBFTkVfQ0lSQ0ZHLCBFTkVfQ0lSQ0ZHX0NBUlJfREVNT0QpOworCQllbmVfY2xlYXJfcmVnX21hc2soZGV2LCBFTkVfQ0lSQ0ZHMiwgRU5FX0NJUkNGRzJfQ0FSUl9ERVRFQ1QpOworCX0KKworc2VsZWN0X3RpbWVvdXQ6CisJaWYgKGRldi0+cnhfZmFuX2lucHV0X2ludXNlKSB7CisJCWRldi0+cmRldi0+cnhfcmVzb2x1dGlvbiA9IE1TX1RPX05TKEVORV9GV19TQU1QTEVfUEVSSU9EX0ZBTik7CisKKwkJLyogRmFuIGlucHV0IGRvZXNuJ3Qgc3VwcG9ydCB0aW1lb3V0cywgaXQganVzdCBlbmRzIHRoZQorCQkJaW5wdXQgd2l0aCBhIG1heGltdW0gc2FtcGxlICovCisJCWRldi0+cmRldi0+bWluX3RpbWVvdXQgPSBkZXYtPnJkZXYtPm1heF90aW1lb3V0ID0KKwkJCU1TX1RPX05TKEVORV9GV19TTVBMX0JVRl9GQU5fTVNLICoKKwkJCQlFTkVfRldfU0FNUExFX1BFUklPRF9GQU4pOworCX0gZWxzZSB7CisJCWRldi0+cmRldi0+cnhfcmVzb2x1dGlvbiA9IE1TX1RPX05TKHNhbXBsZV9wZXJpb2QpOworCisJCS8qIFRoZW9yZXRpY2x5IHRpbWVvdXQgaXMgdW5saW1pdGVkLCBidXQgd2UgY2FwIGl0CisJCSAqIGJlY2F1c2UgaXQgd2FzIHNlZW4gdGhhdCBvbiBvbmUgZGV2aWNlLCBpdAorCQkgKiB3b3VsZCBzdG9wIHNlbmRpbmcgc3BhY2VzIGFmdGVyIGFyb3VuZCAyNTAgbXNlYy4KKwkJICogQmVzaWRlcywgdGhpcyBpcyBjbG9zZSB0byAyXjMyIGFueXdheSBhbmQgdGltZW91dCBpcyB1MzIuCisJCSAqLworCQlkZXYtPnJkZXYtPm1pbl90aW1lb3V0ID0gTVNfVE9fTlMoMTI3ICogc2FtcGxlX3BlcmlvZCk7CisJCWRldi0+cmRldi0+bWF4X3RpbWVvdXQgPSBNU19UT19OUygyMDAwMDApOworCX0KKworCWlmIChkZXYtPmh3X2xlYXJuaW5nX2FuZF90eF9jYXBhYmxlKQorCQlkZXYtPnJkZXYtPnR4X3Jlc29sdXRpb24gPSBNU19UT19OUyhzYW1wbGVfcGVyaW9kKTsKKworCWlmIChkZXYtPnJkZXYtPnRpbWVvdXQgPiBkZXYtPnJkZXYtPm1heF90aW1lb3V0KQorCQlkZXYtPnJkZXYtPnRpbWVvdXQgPSBkZXYtPnJkZXYtPm1heF90aW1lb3V0OworCWlmIChkZXYtPnJkZXYtPnRpbWVvdXQgPCBkZXYtPnJkZXYtPm1pbl90aW1lb3V0KQorCQlkZXYtPnJkZXYtPnRpbWVvdXQgPSBkZXYtPnJkZXYtPm1pbl90aW1lb3V0OworfQorCisvKiBFbmFibGUgdGhlIGRldmljZSBmb3IgcmVjZWl2ZSAqLworc3RhdGljIHZvaWQgZW5lX3J4X2VuYWJsZShzdHJ1Y3QgZW5lX2RldmljZSAqZGV2KQoreworCXU4IHJlZ192YWx1ZTsKKworCS8qIEVuYWJsZSBzeXN0ZW0gaW50ZXJydXB0ICovCisJaWYgKGRldi0+aHdfcmV2aXNpb24gPCBFTkVfSFdfQykgeworCQllbmVfd3JpdGVfcmVnKGRldiwgRU5FQl9JUlEsIGRldi0+aXJxIDw8IDEpOworCQllbmVfd3JpdGVfcmVnKGRldiwgRU5FQl9JUlFfVU5LMSwgMHgwMSk7CisJfSBlbHNlIHsKKwkJcmVnX3ZhbHVlID0gZW5lX3JlYWRfcmVnKGRldiwgRU5FX0lSUSkgJiAweEYwOworCQlyZWdfdmFsdWUgfD0gRU5FX0lSUV9VTktfRU47CisJCXJlZ192YWx1ZSAmPSB+RU5FX0lSUV9TVEFUVVM7CisJCXJlZ192YWx1ZSB8PSAoZGV2LT5pcnEgJiBFTkVfSVJRX01BU0spOworCQllbmVfd3JpdGVfcmVnKGRldiwgRU5FX0lSUSwgcmVnX3ZhbHVlKTsKKwl9CisKKwkvKiBFbmFibGUgaW5wdXRzICovCisJZW5lX3J4X2VuYWJsZV9mYW5faW5wdXQoZGV2LCBkZXYtPnJ4X2Zhbl9pbnB1dF9pbnVzZSk7CisJZW5lX3J4X2VuYWJsZV9jaXJfZW5naW5lKGRldiwgIWRldi0+cnhfZmFuX2lucHV0X2ludXNlKTsKKworCS8qIGFjayBhbnkgcGVuZGluZyBpcnFzIC0ganVzdCBpbiBjYXNlICovCisJZW5lX2lycV9zdGF0dXMoZGV2KTsKKworCS8qIGVuYWJsZSBmaXJtd2FyZSBiaXRzICovCisJZW5lX3NldF9yZWdfbWFzayhkZXYsIEVORV9GVzEsIEVORV9GVzFfRU5BQkxFIHwgRU5FX0ZXMV9JUlEpOworCisJLyogZW50ZXIgaWRsZSBtb2RlICovCisJaXJfcmF3X2V2ZW50X3NldF9pZGxlKGRldi0+cmRldiwgdHJ1ZSk7CisJZGV2LT5yeF9lbmFibGVkID0gdHJ1ZTsKK30KKworLyogRGlzYWJsZSB0aGUgZGV2aWNlIHJlY2VpdmVyICovCitzdGF0aWMgdm9pZCBlbmVfcnhfZGlzYWJsZShzdHJ1Y3QgZW5lX2RldmljZSAqZGV2KQoreworCS8qIGRpc2FibGUgaW5wdXRzICovCisJZW5lX3J4X2VuYWJsZV9jaXJfZW5naW5lKGRldiwgZmFsc2UpOworCWVuZV9yeF9lbmFibGVfZmFuX2lucHV0KGRldiwgZmFsc2UpOworCisJLyogZGlzYWJsZSBoYXJkd2FyZSBJUlEgYW5kIGZpcm13YXJlIGZsYWcgKi8KKwllbmVfY2xlYXJfcmVnX21hc2soZGV2LCBFTkVfRlcxLCBFTkVfRlcxX0VOQUJMRSB8IEVORV9GVzFfSVJRKTsKKworCWlyX3Jhd19ldmVudF9zZXRfaWRsZShkZXYtPnJkZXYsIHRydWUpOworCWRldi0+cnhfZW5hYmxlZCA9IGZhbHNlOworfQorCisvKiBUaGlzIHJlc2V0cyB0aGUgcmVjZWl2ZXIuIFVzZWZ1bGwgdG8gc3RvcCBzdHJlYW0gb2Ygc3BhY2VzIGF0IGVuZCBvZgorICogdHJhbnNtaXNzaW9uCisgKi8KK3N0YXRpYyB2b2lkIGVuZV9yeF9yZXNldChzdHJ1Y3QgZW5lX2RldmljZSAqZGV2KQoreworCWVuZV9jbGVhcl9yZWdfbWFzayhkZXYsIEVORV9DSVJDRkcsIEVORV9DSVJDRkdfUlhfRU4pOworCWVuZV9zZXRfcmVnX21hc2soZGV2LCBFTkVfQ0lSQ0ZHLCBFTkVfQ0lSQ0ZHX1JYX0VOKTsKK30KKworLyogU2V0IHVwIHRoZSBUWCBjYXJyaWVyIGZyZXF1ZW5jeSBhbmQgZHV0eSBjeWNsZSAqLworc3RhdGljIHZvaWQgZW5lX3R4X3NldF9jYXJyaWVyKHN0cnVjdCBlbmVfZGV2aWNlICpkZXYpCit7CisJdTggdHhfcHVsc193aWR0aDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+aHdfbG9jaywgZmxhZ3MpOworCisJZW5lX3NldF9jbGVhcl9yZWdfbWFzayhkZXYsIEVORV9DSVJDRkcsCisJCUVORV9DSVJDRkdfVFhfQ0FSUiwgZGV2LT50eF9wZXJpb2QgPiAwKTsKKworCWlmICghZGV2LT50eF9wZXJpb2QpCisJCWdvdG8gdW5sb2NrOworCisJQlVHX09OKGRldi0+dHhfZHV0eV9jeWNsZSA+PSAxMDAgfHwgZGV2LT50eF9kdXR5X2N5Y2xlIDw9IDApOworCisJdHhfcHVsc193aWR0aCA9IGRldi0+dHhfcGVyaW9kIC8gKDEwMCAvIGRldi0+dHhfZHV0eV9jeWNsZSk7CisKKwlpZiAoIXR4X3B1bHNfd2lkdGgpCisJCXR4X3B1bHNfd2lkdGggPSAxOworCisJZGJnKCJUWDogcHVsc2UgZGlzdGFuY2UgPSAlZCAqIDUwMCBucyIsIGRldi0+dHhfcGVyaW9kKTsKKwlkYmcoIlRYOiBwdWxzZSB3aWR0aCA9ICVkICogNTAwIG5zIiwgdHhfcHVsc193aWR0aCk7CisKKwllbmVfd3JpdGVfcmVnKGRldiwgRU5FX0NJUk1PRF9QUkQsIGRldi0+dHhfcGVyaW9kIHwgRU5FX0NJUk1PRF9QUkRfUE9MKTsKKwllbmVfd3JpdGVfcmVnKGRldiwgRU5FX0NJUk1PRF9IUFJELCB0eF9wdWxzX3dpZHRoKTsKK3VubG9jazoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmh3X2xvY2ssIGZsYWdzKTsKK30KKworLyogRW5hYmxlL2Rpc2FibGUgdHJhbnNtaXR0ZXJzICovCitzdGF0aWMgdm9pZCBlbmVfdHhfc2V0X3RyYW5zbWl0dGVycyhzdHJ1Y3QgZW5lX2RldmljZSAqZGV2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5od19sb2NrLCBmbGFncyk7CisJZW5lX3NldF9jbGVhcl9yZWdfbWFzayhkZXYsIEVORV9HUElPRlM4LCBFTkVfR1BJT0ZTOF9HUElPNDEsCisJCQkJCSEhKGRldi0+dHJhbnNtaXR0ZXJfbWFzayAmIDB4MDEpKTsKKwllbmVfc2V0X2NsZWFyX3JlZ19tYXNrKGRldiwgRU5FX0dQSU9GUzEsIEVORV9HUElPRlMxX0dQSU8wRCwKKwkJCQkJISEoZGV2LT50cmFuc21pdHRlcl9tYXNrICYgMHgwMikpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+aHdfbG9jaywgZmxhZ3MpOworfQorCisvKiBwcmVwYXJlIHRyYW5zbWlzc2lvbiAqLworc3RhdGljIHZvaWQgZW5lX3R4X2VuYWJsZShzdHJ1Y3QgZW5lX2RldmljZSAqZGV2KQoreworCXU4IGNvbmYxID0gZW5lX3JlYWRfcmVnKGRldiwgRU5FX0NJUkNGRyk7CisJdTggZndyZWcyID0gZW5lX3JlYWRfcmVnKGRldiwgRU5FX0ZXMik7CisKKwlkZXYtPnNhdmVkX2NvbmYxID0gY29uZjE7CisKKwkvKiBTaG93IGluZm9ybWF0aW9uIGFib3V0IGN1cnJlbnRseSBjb25uZWN0ZWQgdHJhbnNtaXR0ZXIgamFja3MgKi8KKwlpZiAoZndyZWcyICYgRU5FX0ZXMl9FTU1JVEVSMV9DT05OKQorCQlkYmcoIlRYOiBUcmFuc21pdHRlciAjMSBpcyBjb25uZWN0ZWQiKTsKKworCWlmIChmd3JlZzIgJiBFTkVfRlcyX0VNTUlURVIyX0NPTk4pCisJCWRiZygiVFg6IFRyYW5zbWl0dGVyICMyIGlzIGNvbm5lY3RlZCIpOworCisJaWYgKCEoZndyZWcyICYgKEVORV9GVzJfRU1NSVRFUjFfQ09OTiB8IEVORV9GVzJfRU1NSVRFUjJfQ09OTikpKQorCQllbmVfd2FybigiVFg6IHRyYW5zbWl0dGVyIGNhYmxlIGlzbid0IGNvbm5lY3RlZCEiKTsKKworCS8qIGRpc2FibGUgcmVjZWl2ZSBvbiByZXZjICovCisJaWYgKGRldi0+aHdfcmV2aXNpb24gPT0gRU5FX0hXX0MpCisJCWNvbmYxICY9IH5FTkVfQ0lSQ0ZHX1JYX0VOOworCisJLyogRW5hYmxlIFRYIGVuZ2luZSAqLworCWNvbmYxIHw9IEVORV9DSVJDRkdfVFhfRU4gfCBFTkVfQ0lSQ0ZHX1RYX0lSUTsKKwllbmVfd3JpdGVfcmVnKGRldiwgRU5FX0NJUkNGRywgY29uZjEpOworfQorCisvKiBlbmQgdHJhbnNtaXNzaW9uICovCitzdGF0aWMgdm9pZCBlbmVfdHhfZGlzYWJsZShzdHJ1Y3QgZW5lX2RldmljZSAqZGV2KQoreworCWVuZV93cml0ZV9yZWcoZGV2LCBFTkVfQ0lSQ0ZHLCBkZXYtPnNhdmVkX2NvbmYxKTsKKwlkZXYtPnR4X2J1ZmZlciA9IE5VTEw7Cit9CisKKworLyogVFggb25lIHNhbXBsZSAtIG11c3QgYmUgY2FsbGVkIHdpdGggZGV2LT5od19sb2NrKi8KK3N0YXRpYyB2b2lkIGVuZV90eF9zYW1wbGUoc3RydWN0IGVuZV9kZXZpY2UgKmRldikKK3sKKwl1OCByYXdfdHg7CisJdTMyIHNhbXBsZTsKKwlib29sIHB1bHNlID0gZGV2LT50eF9zYW1wbGVfcHVsc2U7CisKKwlpZiAoIWRldi0+dHhfYnVmZmVyKSB7CisJCWVuZV93YXJuKCJUWDogQlVHOiBhdHRlbXB0IHRvIHRyYW5zbWl0IE5VTEwgYnVmZmVyIik7CisJCXJldHVybjsKKwl9CisKKwkvKiBHcmFiIG5leHQgVFggc2FtcGxlICovCisJaWYgKCFkZXYtPnR4X3NhbXBsZSkgeworCisJCWlmIChkZXYtPnR4X3BvcyA9PSBkZXYtPnR4X2xlbikgeworCQkJaWYgKCFkZXYtPnR4X2RvbmUpIHsKKwkJCQlkYmcoIlRYOiBubyBtb3JlIGRhdGEgdG8gc2VuZCIpOworCQkJCWRldi0+dHhfZG9uZSA9IHRydWU7CisJCQkJZ290byBleGl0OworCQkJfSBlbHNlIHsKKwkJCQlkYmcoIlRYOiBsYXN0IHNhbXBsZSBzZW50IGJ5IGhhcmR3YXJlIik7CisJCQkJZW5lX3R4X2Rpc2FibGUoZGV2KTsKKwkJCQljb21wbGV0ZSgmZGV2LT50eF9jb21wbGV0ZSk7CisJCQkJcmV0dXJuOworCQkJfQorCQl9CisKKwkJc2FtcGxlID0gZGV2LT50eF9idWZmZXJbZGV2LT50eF9wb3MrK107CisJCWRldi0+dHhfc2FtcGxlX3B1bHNlID0gIWRldi0+dHhfc2FtcGxlX3B1bHNlOworCisJCWRldi0+dHhfc2FtcGxlID0gRElWX1JPVU5EX0NMT1NFU1Qoc2FtcGxlLCBzYW1wbGVfcGVyaW9kKTsKKworCQlpZiAoIWRldi0+dHhfc2FtcGxlKQorCQkJZGV2LT50eF9zYW1wbGUgPSAxOworCX0KKworCXJhd190eCA9IG1pbihkZXYtPnR4X3NhbXBsZSAsICh1bnNpZ25lZCBpbnQpRU5FX0NJUlJMQ19PVVRfTUFTSyk7CisJZGV2LT50eF9zYW1wbGUgLT0gcmF3X3R4OworCisJZGJnKCJUWDogc2FtcGxlICU4ZCAoJXMpIiwgcmF3X3R4ICogc2FtcGxlX3BlcmlvZCwKKwkJCQkJCXB1bHNlID8gInB1bHNlIiA6ICJzcGFjZSIpOworCWlmIChwdWxzZSkKKwkJcmF3X3R4IHw9IEVORV9DSVJSTENfT1VUX1BVTFNFOworCisJZW5lX3dyaXRlX3JlZyhkZXYsCisJCWRldi0+dHhfcmVnID8gRU5FX0NJUlJMQ19PVVQxIDogRU5FX0NJUlJMQ19PVVQwLCByYXdfdHgpOworCisJZGV2LT50eF9yZWcgPSAhZGV2LT50eF9yZWc7CitleGl0OgorCS8qIHNpbXVsYXRlIFRYIGRvbmUgaW50ZXJydXB0ICovCisJaWYgKHR4c2ltKQorCQltb2RfdGltZXIoJmRldi0+dHhfc2ltX3RpbWVyLCBqaWZmaWVzICsgSFogLyA1MDApOworfQorCisvKiB0aW1lciB0byBzaW11bGF0ZSB0eCBkb25lIGludGVycnVwdCAqLworc3RhdGljIHZvaWQgZW5lX3R4X2lycXNpbSh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IGVuZV9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgZW5lX2RldmljZSAqKWRhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmh3X2xvY2ssIGZsYWdzKTsKKwllbmVfdHhfc2FtcGxlKGRldik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5od19sb2NrLCBmbGFncyk7Cit9CisKKworLyogcmVhZCBpcnEgc3RhdHVzIGFuZCBhY2sgaXQgKi8KK3N0YXRpYyBpbnQgZW5lX2lycV9zdGF0dXMoc3RydWN0IGVuZV9kZXZpY2UgKmRldikKK3sKKwl1OCBpcnFfc3RhdHVzOworCXU4IGZ3X2ZsYWdzMSwgZndfZmxhZ3MyOworCWludCByZXR2YWwgPSAwOworCisJZndfZmxhZ3MyID0gZW5lX3JlYWRfcmVnKGRldiwgRU5FX0ZXMik7CisKKwlpZiAoZGV2LT5od19yZXZpc2lvbiA8IEVORV9IV19DKSB7CisJCWlycV9zdGF0dXMgPSBlbmVfcmVhZF9yZWcoZGV2LCBFTkVCX0lSUV9TVEFUVVMpOworCisJCWlmICghKGlycV9zdGF0dXMgJiBFTkVCX0lSUV9TVEFUVVNfSVIpKQorCQkJcmV0dXJuIDA7CisKKwkJZW5lX2NsZWFyX3JlZ19tYXNrKGRldiwgRU5FQl9JUlFfU1RBVFVTLCBFTkVCX0lSUV9TVEFUVVNfSVIpOworCQlyZXR1cm4gRU5FX0lSUV9SWDsKKwl9CisKKwlpcnFfc3RhdHVzID0gZW5lX3JlYWRfcmVnKGRldiwgRU5FX0lSUSk7CisJaWYgKCEoaXJxX3N0YXR1cyAmIEVORV9JUlFfU1RBVFVTKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBvcmlnaW5hbCBkcml2ZXIgZG9lcyB0aGF0IHR3aWNlIC0gYSB3b3JrYXJvdW5kID8gKi8KKwllbmVfd3JpdGVfcmVnKGRldiwgRU5FX0lSUSwgaXJxX3N0YXR1cyAmIH5FTkVfSVJRX1NUQVRVUyk7CisJZW5lX3dyaXRlX3JlZyhkZXYsIEVORV9JUlEsIGlycV9zdGF0dXMgJiB+RU5FX0lSUV9TVEFUVVMpOworCisJLyogY2hlY2sgUlggaW50ZXJydXB0ICovCisJaWYgKGZ3X2ZsYWdzMiAmIEVORV9GVzJfUlhJUlEpIHsKKwkJcmV0dmFsIHw9IEVORV9JUlFfUlg7CisJCWVuZV93cml0ZV9yZWcoZGV2LCBFTkVfRlcyLCBmd19mbGFnczIgJiB+RU5FX0ZXMl9SWElSUSk7CisJfQorCisJLyogY2hlY2sgVFggaW50ZXJydXB0ICovCisJZndfZmxhZ3MxID0gZW5lX3JlYWRfcmVnKGRldiwgRU5FX0ZXMSk7CisJaWYgKGZ3X2ZsYWdzMSAmIEVORV9GVzFfVFhJUlEpIHsKKwkJZW5lX3dyaXRlX3JlZyhkZXYsIEVORV9GVzEsIGZ3X2ZsYWdzMSAmIH5FTkVfRlcxX1RYSVJRKTsKKwkJcmV0dmFsIHw9IEVORV9JUlFfVFg7CisJfQorCisJcmV0dXJuIHJldHZhbDsKK30KKworLyogaW50ZXJydXB0IGhhbmRsZXIgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBlbmVfaXNyKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJdTE2IGh3X3ZhbHVlLCByZWc7CisJaW50IGh3X3NhbXBsZSwgaXJxX3N0YXR1czsKKwlib29sIHB1bHNlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaXJxcmV0dXJuX3QgcmV0dmFsID0gSVJRX05PTkU7CisJc3RydWN0IGVuZV9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgZW5lX2RldmljZSAqKWRhdGE7CisJREVGSU5FX0lSX1JBV19FVkVOVChldik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5od19sb2NrLCBmbGFncyk7CisKKwlkYmdfdmVyYm9zZSgiSVNSIGNhbGxlZCIpOworCWVuZV9yeF9yZWFkX2h3X3BvaW50ZXIoZGV2KTsKKwlpcnFfc3RhdHVzID0gZW5lX2lycV9zdGF0dXMoZGV2KTsKKworCWlmICghaXJxX3N0YXR1cykKKwkJZ290byB1bmxvY2s7CisKKwlyZXR2YWwgPSBJUlFfSEFORExFRDsKKworCWlmIChpcnFfc3RhdHVzICYgRU5FX0lSUV9UWCkgeworCQlkYmdfdmVyYm9zZSgiVFggaW50ZXJydXB0Iik7CisJCWlmICghZGV2LT5od19sZWFybmluZ19hbmRfdHhfY2FwYWJsZSkgeworCQkJZGJnKCJUWCBpbnRlcnJ1cHQgb24gdW5zdXBwb3J0ZWQgZGV2aWNlISIpOworCQkJZ290byB1bmxvY2s7CisJCX0KKwkJZW5lX3R4X3NhbXBsZShkZXYpOworCX0KKworCWlmICghKGlycV9zdGF0dXMgJiBFTkVfSVJRX1JYKSkKKwkJZ290byB1bmxvY2s7CisKKwlkYmdfdmVyYm9zZSgiUlggaW50ZXJydXB0Iik7CisKKwlpZiAoZGV2LT5od19sZWFybmluZ19hbmRfdHhfY2FwYWJsZSkKKwkJZW5lX3J4X3NlbnNlX2NhcnJpZXIoZGV2KTsKKworCS8qIE9uIGhhcmR3YXJlIHRoYXQgZG9uJ3Qgc3VwcG9ydCBleHRyYSBidWZmZXIgd2UgbmVlZCB0byB0cnVzdAorCQl0aGUgaW50ZXJydXB0IGFuZCBub3QgdHJhY2sgdGhlIHJlYWQgcG9pbnRlciAqLworCWlmICghZGV2LT5od19leHRyYV9idWZmZXIpCisJCWRldi0+cl9wb2ludGVyID0gZGV2LT53X3BvaW50ZXIgPT0gMCA/IEVORV9GV19QQUNLRVRfU0laRSA6IDA7CisKKwl3aGlsZSAoMSkgeworCisJCXJlZyA9IGVuZV9yeF9nZXRfc2FtcGxlX3JlZyhkZXYpOworCisJCWRiZ192ZXJib3NlKCJuZXh0IHNhbXBsZSB0byByZWFkIGF0OiAlMDR4IiwgcmVnKTsKKwkJaWYgKCFyZWcpCisJCQlicmVhazsKKworCQlod192YWx1ZSA9IGVuZV9yZWFkX3JlZyhkZXYsIHJlZyk7CisKKwkJaWYgKGRldi0+cnhfZmFuX2lucHV0X2ludXNlKSB7CisKKwkJCWludCBvZmZzZXQgPSBFTkVfRldfU01QTF9CVUZfRkFOIC0gRU5FX0ZXX1NBTVBMRV9CVUZGRVI7CisKKwkJCS8qIHJlYWQgaGlnaCBwYXJ0IG9mIHRoZSBzYW1wbGUgKi8KKwkJCWh3X3ZhbHVlIHw9IGVuZV9yZWFkX3JlZyhkZXYsIHJlZyArIG9mZnNldCkgPDwgODsKKwkJCXB1bHNlID0gaHdfdmFsdWUgJiBFTkVfRldfU01QTF9CVUZfRkFOX1BMUzsKKworCQkJLyogY2xlYXIgc3BhY2UgYml0LCBhbmQgb3RoZXIgdW51c2VkIGJpdHMgKi8KKwkJCWh3X3ZhbHVlICY9IEVORV9GV19TTVBMX0JVRl9GQU5fTVNLOworCQkJaHdfc2FtcGxlID0gaHdfdmFsdWUgKiBFTkVfRldfU0FNUExFX1BFUklPRF9GQU47CisKKwkJfSBlbHNlIHsKKwkJCXB1bHNlID0gIShod192YWx1ZSAmIEVORV9GV19TQU1QTEVfU1BBQ0UpOworCQkJaHdfdmFsdWUgJj0gfkVORV9GV19TQU1QTEVfU1BBQ0U7CisJCQlod19zYW1wbGUgPSBod192YWx1ZSAqIHNhbXBsZV9wZXJpb2Q7CisKKwkJCWlmIChkZXYtPnJ4X3BlcmlvZF9hZGp1c3QpIHsKKwkJCQlod19zYW1wbGUgKj0gMTAwOworCQkJCWh3X3NhbXBsZSAvPSAoMTAwICsgZGV2LT5yeF9wZXJpb2RfYWRqdXN0KTsKKwkJCX0KKwkJfQorCisJCWlmICghZGV2LT5od19leHRyYV9idWZmZXIgJiYgIWh3X3NhbXBsZSkgeworCQkJZGV2LT5yX3BvaW50ZXIgPSBkZXYtPndfcG9pbnRlcjsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJZGJnKCJSWDogJWQgKCVzKSIsIGh3X3NhbXBsZSwgcHVsc2UgPyAicHVsc2UiIDogInNwYWNlIik7CisKKwkJZXYuZHVyYXRpb24gPSBNU19UT19OUyhod19zYW1wbGUpOworCQlldi5wdWxzZSA9IHB1bHNlOworCQlpcl9yYXdfZXZlbnRfc3RvcmVfd2l0aF9maWx0ZXIoZGV2LT5yZGV2LCAmZXYpOworCX0KKworCWlyX3Jhd19ldmVudF9oYW5kbGUoZGV2LT5yZGV2KTsKK3VubG9jazoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmh3X2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKiBJbml0aWFsaXplIGRlZmF1bHQgc2V0dGluZ3MgKi8KK3N0YXRpYyB2b2lkIGVuZV9zZXR1cF9kZWZhdWx0X3NldHRpbmdzKHN0cnVjdCBlbmVfZGV2aWNlICpkZXYpCit7CisJZGV2LT50eF9wZXJpb2QgPSAzMjsKKwlkZXYtPnR4X2R1dHlfY3ljbGUgPSA1MDsgLyolKi8KKwlkZXYtPnRyYW5zbWl0dGVyX21hc2sgPSAweDAzOworCWRldi0+bGVhcm5pbmdfbW9kZV9lbmFibGVkID0gbGVhcm5pbmdfbW9kZV9mb3JjZTsKKworCS8qIFNldCByZWFzb25hYmxlIGRlZmF1bHQgdGltZW91dCAqLworCWRldi0+cmRldi0+dGltZW91dCA9IE1TX1RPX05TKDE1MDAwMCk7Cit9CisKKy8qIFVwbG9hZCBhbGwgaGFyZHdhcmUgc2V0dGluZ3MgYXQgb25jZS4gVXNlZCBhdCBsb2FkIGFuZCByZXN1bWUgdGltZSAqLworc3RhdGljIHZvaWQgZW5lX3NldHVwX2h3X3NldHRpbmdzKHN0cnVjdCBlbmVfZGV2aWNlICpkZXYpCit7CisJaWYgKGRldi0+aHdfbGVhcm5pbmdfYW5kX3R4X2NhcGFibGUpIHsKKwkJZW5lX3R4X3NldF9jYXJyaWVyKGRldik7CisJCWVuZV90eF9zZXRfdHJhbnNtaXR0ZXJzKGRldik7CisJfQorCisJZW5lX3J4X3NldHVwKGRldik7Cit9CisKKy8qIG91dHNpZGUgaW50ZXJmYWNlOiBjYWxsZWQgb24gZmlyc3Qgb3BlbiovCitzdGF0aWMgaW50IGVuZV9vcGVuKHN0cnVjdCByY19kZXYgKnJkZXYpCit7CisJc3RydWN0IGVuZV9kZXZpY2UgKmRldiA9IHJkZXYtPnByaXY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmh3X2xvY2ssIGZsYWdzKTsKKwllbmVfcnhfZW5hYmxlKGRldik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5od19sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKKy8qIG91dHNpZGUgaW50ZXJmYWNlOiBjYWxsZWQgb24gZGV2aWNlIGNsb3NlKi8KK3N0YXRpYyB2b2lkIGVuZV9jbG9zZShzdHJ1Y3QgcmNfZGV2ICpyZGV2KQoreworCXN0cnVjdCBlbmVfZGV2aWNlICpkZXYgPSByZGV2LT5wcml2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+aHdfbG9jaywgZmxhZ3MpOworCisJZW5lX3J4X2Rpc2FibGUoZGV2KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmh3X2xvY2ssIGZsYWdzKTsKK30KKworLyogb3V0c2lkZSBpbnRlcmZhY2U6IHNldCB0cmFuc21pdHRlciBtYXNrICovCitzdGF0aWMgaW50IGVuZV9zZXRfdHhfbWFzayhzdHJ1Y3QgcmNfZGV2ICpyZGV2LCB1MzIgdHhfbWFzaykKK3sKKwlzdHJ1Y3QgZW5lX2RldmljZSAqZGV2ID0gcmRldi0+cHJpdjsKKwlkYmcoIlRYOiBhdHRlbXB0IHRvIHNldCB0cmFuc21pdHRlciBtYXNrICUwMngiLCB0eF9tYXNrKTsKKworCS8qIGludmFsaWQgdHhtYXNrICovCisJaWYgKCF0eF9tYXNrIHx8IHR4X21hc2sgJiB+MHgwMykgeworCQlkYmcoIlRYOiBpbnZhbGlkIG1hc2siKTsKKwkJLyogcmV0dXJuIGNvdW50IG9mIHRyYW5zbWl0dGVycyAqLworCQlyZXR1cm4gMjsKKwl9CisKKwlkZXYtPnRyYW5zbWl0dGVyX21hc2sgPSB0eF9tYXNrOworCWVuZV90eF9zZXRfdHJhbnNtaXR0ZXJzKGRldik7CisJcmV0dXJuIDA7Cit9CisKKy8qIG91dHNpZGUgaW50ZXJmYWNlIDogc2V0IHR4IGNhcnJpZXIgKi8KK3N0YXRpYyBpbnQgZW5lX3NldF90eF9jYXJyaWVyKHN0cnVjdCByY19kZXYgKnJkZXYsIHUzMiBjYXJyaWVyKQoreworCXN0cnVjdCBlbmVfZGV2aWNlICpkZXYgPSByZGV2LT5wcml2OworCXUzMiBwZXJpb2QgPSAyMDAwMDAwIC8gY2FycmllcjsKKworCWRiZygiVFg6IGF0dGVtcHQgdG8gc2V0IHR4IGNhcnJpZXIgdG8gJWQga0h6IiwgY2Fycmllcik7CisKKwlpZiAocGVyaW9kICYmIChwZXJpb2QgPiBFTkVfQ0lSTU9EX1BSRF9NQVggfHwKKwkJCXBlcmlvZCA8IEVORV9DSVJNT0RfUFJEX01JTikpIHsKKworCQlkYmcoIlRYOiBvdXQgb2YgcmFuZ2UgJWQtJWQga0h6IGNhcnJpZXIiLAorCQkJMjAwMCAvIEVORV9DSVJNT0RfUFJEX01JTiwgMjAwMCAvIEVORV9DSVJNT0RfUFJEX01BWCk7CisJCXJldHVybiAtMTsKKwl9CisKKwlkZXYtPnR4X3BlcmlvZCA9IHBlcmlvZDsKKwllbmVfdHhfc2V0X2NhcnJpZXIoZGV2KTsKKwlyZXR1cm4gMDsKK30KKworLypvdXRzaWRlIGludGVyZmFjZSA6IHNldCB0eCBkdXR5IGN5Y2xlICovCitzdGF0aWMgaW50IGVuZV9zZXRfdHhfZHV0eV9jeWNsZShzdHJ1Y3QgcmNfZGV2ICpyZGV2LCB1MzIgZHV0eV9jeWNsZSkKK3sKKwlzdHJ1Y3QgZW5lX2RldmljZSAqZGV2ID0gcmRldi0+cHJpdjsKKwlkYmcoIlRYOiBzZXR0aW5nIGR1dHkgY3ljbGUgdG8gJWQlJSIsIGR1dHlfY3ljbGUpOworCWRldi0+dHhfZHV0eV9jeWNsZSA9IGR1dHlfY3ljbGU7CisJZW5lX3R4X3NldF9jYXJyaWVyKGRldik7CisJcmV0dXJuIDA7Cit9CisKKy8qIG91dHNpZGUgaW50ZXJmYWNlOiBlbmFibGUgbGVhcm5pbmcgbW9kZSAqLworc3RhdGljIGludCBlbmVfc2V0X2xlYXJuaW5nX21vZGUoc3RydWN0IHJjX2RldiAqcmRldiwgaW50IGVuYWJsZSkKK3sKKwlzdHJ1Y3QgZW5lX2RldmljZSAqZGV2ID0gcmRldi0+cHJpdjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWlmIChlbmFibGUgPT0gZGV2LT5sZWFybmluZ19tb2RlX2VuYWJsZWQpCisJCXJldHVybiAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+aHdfbG9jaywgZmxhZ3MpOworCWRldi0+bGVhcm5pbmdfbW9kZV9lbmFibGVkID0gZW5hYmxlOworCWVuZV9yeF9kaXNhYmxlKGRldik7CisJZW5lX3J4X3NldHVwKGRldik7CisJZW5lX3J4X2VuYWJsZShkZXYpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+aHdfbG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGVuZV9zZXRfY2Fycmllcl9yZXBvcnQoc3RydWN0IHJjX2RldiAqcmRldiwgaW50IGVuYWJsZSkKK3sKKwlzdHJ1Y3QgZW5lX2RldmljZSAqZGV2ID0gcmRldi0+cHJpdjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKGVuYWJsZSA9PSBkZXYtPmNhcnJpZXJfZGV0ZWN0X2VuYWJsZWQpCisJCXJldHVybiAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+aHdfbG9jaywgZmxhZ3MpOworCWRldi0+Y2Fycmllcl9kZXRlY3RfZW5hYmxlZCA9IGVuYWJsZTsKKwllbmVfcnhfZGlzYWJsZShkZXYpOworCWVuZV9yeF9zZXR1cChkZXYpOworCWVuZV9yeF9lbmFibGUoZGV2KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmh3X2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworLyogb3V0c2lkZSBpbnRlcmZhY2U6IGVuYWJsZSBvciBkaXNhYmxlIGlkbGUgbW9kZSAqLworc3RhdGljIHZvaWQgZW5lX3NldF9pZGxlKHN0cnVjdCByY19kZXYgKnJkZXYsIGJvb2wgaWRsZSkKK3sKKwlzdHJ1Y3QgZW5lX2RldmljZSAqZGV2ID0gcmRldi0+cHJpdjsKKworCWlmIChpZGxlKSB7CisJCWVuZV9yeF9yZXNldChkZXYpOworCQlkYmcoIlJYOiBlbmQgb2YgZGF0YSIpOworCX0KK30KKworLyogb3V0c2lkZSBpbnRlcmZhY2U6IHRyYW5zbWl0ICovCitzdGF0aWMgaW50IGVuZV90cmFuc21pdChzdHJ1Y3QgcmNfZGV2ICpyZGV2LCBpbnQgKmJ1ZiwgdTMyIG4pCit7CisJc3RydWN0IGVuZV9kZXZpY2UgKmRldiA9IHJkZXYtPnByaXY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRldi0+dHhfYnVmZmVyID0gYnVmOworCWRldi0+dHhfbGVuID0gbiAvIHNpemVvZihpbnQpOworCWRldi0+dHhfcG9zID0gMDsKKwlkZXYtPnR4X3JlZyA9IDA7CisJZGV2LT50eF9kb25lID0gMDsKKwlkZXYtPnR4X3NhbXBsZSA9IDA7CisJZGV2LT50eF9zYW1wbGVfcHVsc2UgPSAwOworCisJZGJnKCJUWDogJWQgc2FtcGxlcyIsIGRldi0+dHhfbGVuKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmh3X2xvY2ssIGZsYWdzKTsKKworCWVuZV90eF9lbmFibGUoZGV2KTsKKworCS8qIFRyYW5zbWl0IGZpcnN0IHR3byBzYW1wbGVzICovCisJZW5lX3R4X3NhbXBsZShkZXYpOworCWVuZV90eF9zYW1wbGUoZGV2KTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+aHdfbG9jaywgZmxhZ3MpOworCisJaWYgKHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmZGV2LT50eF9jb21wbGV0ZSwgMiAqIEhaKSA9PSAwKSB7CisJCWRiZygiVFg6IHRpbWVvdXQiKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+aHdfbG9jaywgZmxhZ3MpOworCQllbmVfdHhfZGlzYWJsZShkZXYpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmh3X2xvY2ssIGZsYWdzKTsKKwl9IGVsc2UKKwkJZGJnKCJUWDogZG9uZSIpOworCXJldHVybiBuOworfQorCisvKiBwcm9iZSBlbnRyeSAqLworc3RhdGljIGludCBlbmVfcHJvYmUoc3RydWN0IHBucF9kZXYgKnBucF9kZXYsIGNvbnN0IHN0cnVjdCBwbnBfZGV2aWNlX2lkICppZCkKK3sKKwlpbnQgZXJyb3IgPSAtRU5PTUVNOworCXN0cnVjdCByY19kZXYgKnJkZXY7CisJc3RydWN0IGVuZV9kZXZpY2UgKmRldjsKKworCS8qIGFsbG9jYXRlIG1lbW9yeSAqLworCWRldiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBlbmVfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CisJcmRldiA9IHJjX2FsbG9jYXRlX2RldmljZSgpOworCWlmICghZGV2IHx8ICFyZGV2KQorCQlnb3RvIGVycm9yMTsKKworCS8qIHZhbGlkYXRlIHJlc291cmNlcyAqLworCWVycm9yID0gLUVOT0RFVjsKKworCWlmICghcG5wX3BvcnRfdmFsaWQocG5wX2RldiwgMCkgfHwKKwkgICAgcG5wX3BvcnRfbGVuKHBucF9kZXYsIDApIDwgRU5FX0lPX1NJWkUpCisJCWdvdG8gZXJyb3I7CisKKwlpZiAoIXBucF9pcnFfdmFsaWQocG5wX2RldiwgMCkpCisJCWdvdG8gZXJyb3I7CisKKwlzcGluX2xvY2tfaW5pdCgmZGV2LT5od19sb2NrKTsKKworCS8qIGNsYWltIHRoZSByZXNvdXJjZXMgKi8KKwllcnJvciA9IC1FQlVTWTsKKwlkZXYtPmh3X2lvID0gcG5wX3BvcnRfc3RhcnQocG5wX2RldiwgMCk7CisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihkZXYtPmh3X2lvLCBFTkVfSU9fU0laRSwgRU5FX0RSSVZFUl9OQU1FKSkgeworCQlkZXYtPmh3X2lvID0gLTE7CisJCWRldi0+aXJxID0gLTE7CisJCWdvdG8gZXJyb3I7CisJfQorCisJZGV2LT5pcnEgPSBwbnBfaXJxKHBucF9kZXYsIDApOworCWlmIChyZXF1ZXN0X2lycShkZXYtPmlycSwgZW5lX2lzciwKKwkJCUlSUUZfU0hBUkVELCBFTkVfRFJJVkVSX05BTUUsICh2b2lkICopZGV2KSkgeworCQlkZXYtPmlycSA9IC0xOworCQlnb3RvIGVycm9yOworCX0KKworCXBucF9zZXRfZHJ2ZGF0YShwbnBfZGV2LCBkZXYpOworCWRldi0+cG5wX2RldiA9IHBucF9kZXY7CisKKwkvKiBkb24ndCBhbGxvdyB0b28gc2hvcnQvbG9uZyBzYW1wbGUgcGVyaW9kcyAqLworCWlmIChzYW1wbGVfcGVyaW9kIDwgNSB8fCBzYW1wbGVfcGVyaW9kID4gMHg3RikKKwkJc2FtcGxlX3BlcmlvZCA9IEVORV9ERUZBVUxUX1NBTVBMRV9QRVJJT0Q7CisKKwkvKiBkZXRlY3QgaGFyZHdhcmUgdmVyc2lvbiBhbmQgZmVhdHVyZXMgKi8KKwllcnJvciA9IGVuZV9od19kZXRlY3QoZGV2KTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gZXJyb3I7CisKKwlpZiAoIWRldi0+aHdfbGVhcm5pbmdfYW5kX3R4X2NhcGFibGUgJiYgdHhzaW0pIHsKKwkJZGV2LT5od19sZWFybmluZ19hbmRfdHhfY2FwYWJsZSA9IHRydWU7CisJCXNldHVwX3RpbWVyKCZkZXYtPnR4X3NpbV90aW1lciwgZW5lX3R4X2lycXNpbSwKKwkJCQkJCShsb25nIHVuc2lnbmVkIGludClkZXYpOworCQllbmVfd2FybigiU2ltdWxhdGlvbiBvZiBUWCBhY3RpdmF0ZWQiKTsKKwl9CisKKwlpZiAoIWRldi0+aHdfbGVhcm5pbmdfYW5kX3R4X2NhcGFibGUpCisJCWxlYXJuaW5nX21vZGVfZm9yY2UgPSBmYWxzZTsKKworCXJkZXYtPmRyaXZlcl90eXBlID0gUkNfRFJJVkVSX0lSX1JBVzsKKwlyZGV2LT5hbGxvd2VkX3Byb3RvcyA9IFJDX1RZUEVfQUxMOworCXJkZXYtPnByaXYgPSBkZXY7CisJcmRldi0+b3BlbiA9IGVuZV9vcGVuOworCXJkZXYtPmNsb3NlID0gZW5lX2Nsb3NlOworCXJkZXYtPnNfaWRsZSA9IGVuZV9zZXRfaWRsZTsKKwlyZGV2LT5kcml2ZXJfbmFtZSA9IEVORV9EUklWRVJfTkFNRTsKKwlyZGV2LT5tYXBfbmFtZSA9IFJDX01BUF9SQzZfTUNFOworCXJkZXYtPmlucHV0X25hbWUgPSAiRU5FIGVIb21lIEluZnJhcmVkIFJlbW90ZSBSZWNlaXZlciI7CisKKwlpZiAoZGV2LT5od19sZWFybmluZ19hbmRfdHhfY2FwYWJsZSkgeworCQlyZGV2LT5zX2xlYXJuaW5nX21vZGUgPSBlbmVfc2V0X2xlYXJuaW5nX21vZGU7CisJCWluaXRfY29tcGxldGlvbigmZGV2LT50eF9jb21wbGV0ZSk7CisJCXJkZXYtPnR4X2lyID0gZW5lX3RyYW5zbWl0OworCQlyZGV2LT5zX3R4X21hc2sgPSBlbmVfc2V0X3R4X21hc2s7CisJCXJkZXYtPnNfdHhfY2FycmllciA9IGVuZV9zZXRfdHhfY2FycmllcjsKKwkJcmRldi0+c190eF9kdXR5X2N5Y2xlID0gZW5lX3NldF90eF9kdXR5X2N5Y2xlOworCQlyZGV2LT5zX2NhcnJpZXJfcmVwb3J0ID0gZW5lX3NldF9jYXJyaWVyX3JlcG9ydDsKKwkJcmRldi0+aW5wdXRfbmFtZSA9ICJFTkUgZUhvbWUgSW5mcmFyZWQgUmVtb3RlIFRyYW5zY2VpdmVyIjsKKwl9CisKKwllbmVfcnhfc2V0dXBfaHdfYnVmZmVyKGRldik7CisJZW5lX3NldHVwX2RlZmF1bHRfc2V0dGluZ3MoZGV2KTsKKwllbmVfc2V0dXBfaHdfc2V0dGluZ3MoZGV2KTsKKworCWRldmljZV9zZXRfd2FrZXVwX2NhcGFibGUoJnBucF9kZXYtPmRldiwgdHJ1ZSk7CisJZGV2aWNlX3NldF93YWtldXBfZW5hYmxlKCZwbnBfZGV2LT5kZXYsIHRydWUpOworCisJZXJyb3IgPSByY19yZWdpc3Rlcl9kZXZpY2UocmRldik7CisJaWYgKGVycm9yIDwgMCkKKwkJZ290byBlcnJvcjsKKworCWRldi0+cmRldiA9IHJkZXY7CisJZW5lX25vdGljZSgiZHJpdmVyIGhhcyBiZWVuIHN1Y2Nlc2Z1bGx5IGxvYWRlZCIpOworCXJldHVybiAwOworZXJyb3I6CisJaWYgKGRldiAmJiBkZXYtPmlycSA+PSAwKQorCQlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKwlpZiAoZGV2ICYmIGRldi0+aHdfaW8gPj0gMCkKKwkJcmVsZWFzZV9yZWdpb24oZGV2LT5od19pbywgRU5FX0lPX1NJWkUpOworZXJyb3IxOgorCXJjX2ZyZWVfZGV2aWNlKHJkZXYpOworCWtmcmVlKGRldik7CisJcmV0dXJuIGVycm9yOworfQorCisvKiBtYWluIHVubG9hZCBmdW5jdGlvbiAqLworc3RhdGljIHZvaWQgZW5lX3JlbW92ZShzdHJ1Y3QgcG5wX2RldiAqcG5wX2RldikKK3sKKwlzdHJ1Y3QgZW5lX2RldmljZSAqZGV2ID0gcG5wX2dldF9kcnZkYXRhKHBucF9kZXYpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5od19sb2NrLCBmbGFncyk7CisJZW5lX3J4X2Rpc2FibGUoZGV2KTsKKwllbmVfcnhfcmVzdG9yZV9od19idWZmZXIoZGV2KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmh3X2xvY2ssIGZsYWdzKTsKKworCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCXJlbGVhc2VfcmVnaW9uKGRldi0+aHdfaW8sIEVORV9JT19TSVpFKTsKKwlyY191bnJlZ2lzdGVyX2RldmljZShkZXYtPnJkZXYpOworCWtmcmVlKGRldik7Cit9CisKKy8qIGVuYWJsZSB3YWtlIG9uIElSICh3YWtlcyBvbiBzcGVjaWZpYyBidXR0b24gb24gb3JpZ2luYWwgcmVtb3RlKSAqLworc3RhdGljIHZvaWQgZW5lX2VuYWJsZV93YWtlKHN0cnVjdCBlbmVfZGV2aWNlICpkZXYsIGludCBlbmFibGUpCit7CisJZW5hYmxlID0gZW5hYmxlICYmIGRldmljZV9tYXlfd2FrZXVwKCZkZXYtPnBucF9kZXYtPmRldik7CisJZGJnKCJ3YWtlIG9uIElSICVzIiwgZW5hYmxlID8gImVuYWJsZWQiIDogImRpc2FibGVkIik7CisJZW5lX3NldF9jbGVhcl9yZWdfbWFzayhkZXYsIEVORV9GVzEsIEVORV9GVzFfV0FLRSwgZW5hYmxlKTsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBlbmVfc3VzcGVuZChzdHJ1Y3QgcG5wX2RldiAqcG5wX2RldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCBlbmVfZGV2aWNlICpkZXYgPSBwbnBfZ2V0X2RydmRhdGEocG5wX2Rldik7CisJZW5lX2VuYWJsZV93YWtlKGRldiwgdHJ1ZSk7CisKKwkvKiBUT0RPOiBhZGQgc3VwcG9ydCBmb3Igd2FrZSBwYXR0ZXJuICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZW5lX3Jlc3VtZShzdHJ1Y3QgcG5wX2RldiAqcG5wX2RldikKK3sKKwlzdHJ1Y3QgZW5lX2RldmljZSAqZGV2ID0gcG5wX2dldF9kcnZkYXRhKHBucF9kZXYpOworCWVuZV9zZXR1cF9od19zZXR0aW5ncyhkZXYpOworCisJaWYgKGRldi0+cnhfZW5hYmxlZCkKKwkJZW5lX3J4X2VuYWJsZShkZXYpOworCisJZW5lX2VuYWJsZV93YWtlKGRldiwgZmFsc2UpOworCXJldHVybiAwOworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIGVuZV9zaHV0ZG93bihzdHJ1Y3QgcG5wX2RldiAqcG5wX2RldikKK3sKKwlzdHJ1Y3QgZW5lX2RldmljZSAqZGV2ID0gcG5wX2dldF9kcnZkYXRhKHBucF9kZXYpOworCWVuZV9lbmFibGVfd2FrZShkZXYsIHRydWUpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHBucF9kZXZpY2VfaWQgZW5lX2lkc1tdID0geworCXsuaWQgPSAiRU5FMDEwMCIsfSwKKwl7LmlkID0gIkVORTAyMDAiLH0sCisJey5pZCA9ICJFTkUwMjAxIix9LAorCXsuaWQgPSAiRU5FMDIwMiIsfSwKKwl7fSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcG5wX2RyaXZlciBlbmVfZHJpdmVyID0geworCS5uYW1lID0gRU5FX0RSSVZFUl9OQU1FLAorCS5pZF90YWJsZSA9IGVuZV9pZHMsCisJLmZsYWdzID0gUE5QX0RSSVZFUl9SRVNfRE9fTk9UX0NIQU5HRSwKKworCS5wcm9iZSA9IGVuZV9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoZW5lX3JlbW92ZSksCisjaWZkZWYgQ09ORklHX1BNCisJLnN1c3BlbmQgPSBlbmVfc3VzcGVuZCwKKwkucmVzdW1lID0gZW5lX3Jlc3VtZSwKKyNlbmRpZgorCS5zaHV0ZG93biA9IGVuZV9zaHV0ZG93biwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGVuZV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBucF9yZWdpc3Rlcl9kcml2ZXIoJmVuZV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBlbmVfZXhpdCh2b2lkKQoreworCXBucF91bnJlZ2lzdGVyX2RyaXZlcigmZW5lX2RyaXZlcik7Cit9CisKK21vZHVsZV9wYXJhbShzYW1wbGVfcGVyaW9kLCBpbnQsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhzYW1wbGVfcGVyaW9kLCAiSGFyZHdhcmUgc2FtcGxlIHBlcmlvZCAoNTAgdXMgZGVmYXVsdCkiKTsKKworbW9kdWxlX3BhcmFtKGxlYXJuaW5nX21vZGVfZm9yY2UsIGJvb2wsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhsZWFybmluZ19tb2RlX2ZvcmNlLCAiRW5hYmxlIGxlYXJuaW5nIG1vZGUgYnkgZGVmYXVsdCIpOworCittb2R1bGVfcGFyYW0oZGVidWcsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsIik7CisKK21vZHVsZV9wYXJhbSh0eHNpbSwgYm9vbCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKHR4c2ltLAorCSJTaW11bGF0ZSBUWCBmZWF0dXJlcyBvbiB1bnN1cHBvcnRlZCBoYXJkd2FyZSAoZGFuZ2Vyb3VzKSIpOworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBucCwgZW5lX2lkcyk7CitNT0RVTEVfREVTQ1JJUFRJT04KKwkoIkluZnJhcmVkIGlucHV0IGRyaXZlciBmb3IgS0IzOTI2Qi9DL0QvRS9GICIKKwkiKGFrYSBFTkUwMTAwL0VORTAyMDAvRU5FMDIwMS9FTkUwMjAyKSBDSVIgcG9ydCIpOworCitNT0RVTEVfQVVUSE9SKCJNYXhpbSBMZXZpdHNreSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCittb2R1bGVfaW5pdChlbmVfaW5pdCk7Cittb2R1bGVfZXhpdChlbmVfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JjL2VuZV9pci5oIGIvZHJpdmVycy9tZWRpYS9yYy9lbmVfaXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTc5YmFmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9lbmVfaXIuaApAQCAtMCwwICsxLDI2MSBAQAorLyoKKyAqIGRyaXZlciBmb3IgRU5FIEtCMzkyNiBCL0MvRC9FL0YgQ0lSIChhbHNvIGtub3duIGFzIEVORTBYWFgpCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIE1heGltIExldml0c2t5IDxtYXhpbWxldml0c2t5QGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisgKiBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgKiBVU0EKKyAqLworI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisKKworLyogaGFyZHdhcmUgYWRkcmVzcyAqLworI2RlZmluZSBFTkVfU1RBVFVTCQkwCS8qIGhhcmR3YXJlIHN0YXR1cyAtIHVudXNlZCAqLworI2RlZmluZSBFTkVfQUREUl9ISQkJMQkvKiBoaSBieXRlIG9mIHJlZ2lzdGVyIGFkZHJlc3MgKi8KKyNkZWZpbmUgRU5FX0FERFJfTE8JCTIJLyogbG93IGJ5dGUgb2YgcmVnaXN0ZXIgYWRkcmVzcyAqLworI2RlZmluZSBFTkVfSU8JCQkzCS8qIHJlYWQvd3JpdGUgd2luZG93ICovCisjZGVmaW5lIEVORV9JT19TSVpFCQk0CisKKy8qIDggYnl0ZXMgb2Ygc2FtcGxlcywgZGl2aWRlZCBpbiAyIHBhY2tldHMqLworI2RlZmluZSBFTkVfRldfU0FNUExFX0JVRkZFUgkweEY4RjAJLyogc2FtcGxlIGJ1ZmZlciAqLworI2RlZmluZSBFTkVfRldfU0FNUExFX1NQQUNFCTB4ODAJLyogc2FtcGxlIGlzIHNwYWNlICovCisjZGVmaW5lIEVORV9GV19QQUNLRVRfU0laRQk0CisKKy8qIGZpcnN0IGZpcm13YXJlIGZsYWcgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgRU5FX0ZXMQkJCTB4RjhGOCAgLyogZmxhZ3IgKi8KKyNkZWZpbmUJRU5FX0ZXMV9FTkFCTEUJCTB4MDEJLyogZW5hYmxlIGZ3IHByb2Nlc3NpbmcgKi8KKyNkZWZpbmUgRU5FX0ZXMV9UWElSUQkJMHgwMgkvKiBUWCBpbnRlcnJ1cHQgcGVuZGluZyAqLworI2RlZmluZSBFTkVfRlcxX0hBU19FWFRSQV9CVUYJMHgwNAkvKiBmdyB1c2VzIGV4dHJhIGJ1ZmZlciovCisjZGVmaW5lIEVORV9GVzFfRVhUUkFfQlVGX0hORAkweDA4CS8qIGV4dHJhIGJ1ZmZlciBoYW5kc2hha2UgYml0Ki8KKyNkZWZpbmUgRU5FX0ZXMV9MRURfT04JCTB4MTAJLyogdHVybiBvbiBhIGxlZCAqLworCisjZGVmaW5lIEVORV9GVzFfV1BBVFRFUk4JMHgyMAkvKiBlbmFibGUgd2FrZSBwYXR0ZXJuICovCisjZGVmaW5lIEVORV9GVzFfV0FLRQkJMHg0MAkvKiBlbmFibGUgd2FrZSBmcm9tIFMzICovCisjZGVmaW5lIEVORV9GVzFfSVJRCQkweDgwCS8qIGVuYWJsZSBpbnRlcnJ1cHQgKi8KKworLyogc2Vjb25kIGZpcm13YXJlIGZsYWcgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgRU5FX0ZXMgkJCTB4RjhGOSAgLyogZmxhZ3cgKi8KKyNkZWZpbmUgRU5FX0ZXMl9CVUZfV1BUUgkweDAxCS8qIHdoaWNoIGhhbGYgb2YgdGhlIGJ1ZmZlciB0byByZWFkICovCisjZGVmaW5lIEVORV9GVzJfUlhJUlEJCTB4MDQJLyogUlggSVJRIHBlbmRpbmcqLworI2RlZmluZSBFTkVfRlcyX0dQMEEJCTB4MDgJLyogVXNlIEdQSU8wQSBmb3IgZGVtb2R1bGF0ZWQgaW5wdXQgKi8KKyNkZWZpbmUgRU5FX0ZXMl9FTU1JVEVSMV9DT05OCTB4MTAJLyogVFggZW1taXRlciAxIGNvbm5lY3RlZCAqLworI2RlZmluZSBFTkVfRlcyX0VNTUlURVIyX0NPTk4JMHgyMAkvKiBUWCBlbW1pdGVyIDIgY29ubmVjdGVkICovCisKKyNkZWZpbmUgRU5FX0ZXMl9GQU5fSU5QVVQJMHg0MAkvKiBmYW4gaW5wdXQgdXNlZCBmb3IgZGVtb2R1bGF0ZWQgZGF0YSovCisjZGVmaW5lIEVORV9GVzJfTEVBUk5JTkcJMHg4MAkvKiBoYXJkd2FyZSBzdXBwb3J0cyBsZWFybmluZyBhbmQgVFggKi8KKworLyogZmlybXdhcmUgUlggcG9pbnRlciBmb3IgbmV3IHN0eWxlIGJ1ZmZlciAqLworI2RlZmluZSBFTkVfRldfUlhfUE9JTlRFUgkweEY4RkEKKworLyogaGlnaCBwYXJ0cyBvZiBzYW1wbGVzIGZvciBmYW4gaW5wdXQgKDggc2FtcGxlcykqLworI2RlZmluZSBFTkVfRldfU01QTF9CVUZfRkFOCTB4RjhGQgorI2RlZmluZSBFTkVfRldfU01QTF9CVUZfRkFOX1BMUwkweDgwMDAJLyogY29tYmluZWQgc2FtcGxlIGlzIHB1bHNlICovCisjZGVmaW5lIEVORV9GV19TTVBMX0JVRl9GQU5fTVNLCTB4MEZGRiAgLyogY29tYmluZWQgc2FtcGxlIG1heGltdW0gdmFsdWUgKi8KKyNkZWZpbmUgRU5FX0ZXX1NBTVBMRV9QRVJJT0RfRkFOIDYxCS8qIGZhbiBpbnB1dCBoYXMgZml4ZWQgc2FtcGxlIHBlcmlvZCAqLworCisvKiB0cmFuc21pdHRlciBwb3J0cyAqLworI2RlZmluZSBFTkVfR1BJT0ZTMQkJMHhGQzAxCisjZGVmaW5lIEVORV9HUElPRlMxX0dQSU8wRAkweDIwCS8qIGVuYWJsZSB0eCBvdXRwdXQgb24gR1BJTzBEICovCisjZGVmaW5lIEVORV9HUElPRlM4CQkweEZDMDgKKyNkZWZpbmUgRU5FX0dQSU9GUzhfR1BJTzQxCTB4MDIJLyogZW5hYmxlIHR4IG91dHB1dCBvbiBHUElPNDAgKi8KKworLyogSVJRIHJlZ2lzdGVycyBibG9jayAoZm9yIHJldmlzaW9uIEIpICovCisjZGVmaW5lIEVORUJfSVJRCQkweEZEMDkJLyogSVJRIG51bWJlciAqLworI2RlZmluZSBFTkVCX0lSUV9VTksxCQkweEZEMTcJLyogdW5rbm93biBzZXR0aW5nID0gMSAqLworI2RlZmluZSBFTkVCX0lSUV9TVEFUVVMJCTB4RkQ4MAkvKiBpcnEgc3RhdHVzICovCisjZGVmaW5lIEVORUJfSVJRX1NUQVRVU19JUgkweDIwCS8qIElSIGlycSAqLworCisvKiBmYW4gYXMgaW5wdXQgc2V0dGluZ3MgKi8KKyNkZWZpbmUgRU5FX0ZBTl9BU19JTjEJCTB4RkUzMCAgLyogZmFuIGluaXQgcmVnIDEgKi8KKyNkZWZpbmUgRU5FX0ZBTl9BU19JTjFfRU4JMHhDRAorI2RlZmluZSBFTkVfRkFOX0FTX0lOMgkJMHhGRTMxICAvKiBmYW4gaW5pdCByZWcgMiAqLworI2RlZmluZSBFTkVfRkFOX0FTX0lOMl9FTgkweDAzCisKKy8qIElSUSByZWdpc3RlcnMgYmxvY2sgKGZvciByZXZpc2lvbiBDLEQpICovCisjZGVmaW5lIEVORV9JUlEJCQkweEZFOUIJLyogbmV3IGlycSBzZXR0aW5ncyByZWdpc3RlciAqLworI2RlZmluZSBFTkVfSVJRX01BU0sJCTB4MEYJLyogaXJxIG51bWJlciBtYXNrICovCisjZGVmaW5lIEVORV9JUlFfVU5LX0VOCQkweDEwCS8qIGFsd2F5cyBlbmFibGVkICovCisjZGVmaW5lIEVORV9JUlFfU1RBVFVTCQkweDIwCS8qIGlycSBzdGF0dXMgYW5kIEFDSyAqLworCisvKiBDSVIgQ29uZmlnIHJlZ2lzdGVyICMxICovCisjZGVmaW5lIEVORV9DSVJDRkcJCTB4RkVDMAorI2RlZmluZSBFTkVfQ0lSQ0ZHX1JYX0VOCTB4MDEJLyogUlggZW5hYmxlICovCisjZGVmaW5lIEVORV9DSVJDRkdfUlhfSVJRCTB4MDIJLyogRW5hYmxlIGhhcmR3YXJlIGludGVycnVwdCAqLworI2RlZmluZSBFTkVfQ0lSQ0ZHX1JFVl9QT0wJMHgwNAkvKiBJbnB1dCBwb2xhcml0eSByZXZlcnNlZCAqLworI2RlZmluZSBFTkVfQ0lSQ0ZHX0NBUlJfREVNT0QJMHgwOAkvKiBFbmFibGUgY2FycmllciBkZW1vZHVsYXRvciAqLworCisjZGVmaW5lIEVORV9DSVJDRkdfVFhfRU4JMHgxMAkvKiBUWCBlbmFibGUgKi8KKyNkZWZpbmUgRU5FX0NJUkNGR19UWF9JUlEJMHgyMAkvKiBTZW5kIGludGVycnVwdCBvbiBUWCBkb25lICovCisjZGVmaW5lIEVORV9DSVJDRkdfVFhfUE9MX1JFVgkweDQwCS8qIFRYIHBvbGFyaXR5IHJldmVyc2VkICovCisjZGVmaW5lIEVORV9DSVJDRkdfVFhfQ0FSUgkweDgwCS8qIHNlbmQgVFggY2FycmllciBvciBub3QgKi8KKworLyogQ0lSIGNvbmZpZyByZWdpc3RlciAjMiAqLworI2RlZmluZSBFTkVfQ0lSQ0ZHMgkJMHhGRUMxCisjZGVmaW5lIEVORV9DSVJDRkcyX1JMQwkJMHgwMAorI2RlZmluZSBFTkVfQ0lSQ0ZHMl9SQzUJCTB4MDEKKyNkZWZpbmUgRU5FX0NJUkNGRzJfUkM2CQkweDAyCisjZGVmaW5lIEVORV9DSVJDRkcyX05FQwkJMHgwMworI2RlZmluZSBFTkVfQ0lSQ0ZHMl9DQVJSX0RFVEVDVAkweDEwCS8qIEVuYWJsZSBjYXJyaWVyIGRldGVjdGlvbiAqLworI2RlZmluZSBFTkVfQ0lSQ0ZHMl9HUElPMEEJMHgyMAkvKiBVc2UgR1BJTzBBIGluc3RlYWQgb2YgR1BJTzQwIGZvciBpbnB1dCAqLworI2RlZmluZSBFTkVfQ0lSQ0ZHMl9GQVNUX1NBTVBMMQkweDQwCS8qIEZhc3QgbGVhZGluZyBwdWxzZSBkZXRlY3Rpb24gZm9yIFJDNiAqLworI2RlZmluZSBFTkVfQ0lSQ0ZHMl9GQVNUX1NBTVBMMgkweDgwCS8qIEZhc3QgZGF0YSBkZXRlY3Rpb24gZm9yIFJDNiAqLworCisvKiBLbm9icyBmb3IgcHJvdG9jb2wgZGVjb2RpbmcgLSB3aWxsIGRvY3VtZW50IHdoZW4vaWYgd2lsbCB1c2UgdGhlbSAqLworI2RlZmluZSBFTkVfQ0lSUEYJCTB4RkVDMgorI2RlZmluZSBFTkVfQ0lSSElHSAkJMHhGRUMzCisjZGVmaW5lIEVORV9DSVJCSVQJCTB4RkVDNAorI2RlZmluZSBFTkVfQ0lSU1RBUlQJCTB4RkVDNQorI2RlZmluZSBFTkVfQ0lSU1RBUlQyCQkweEZFQzYKKworLyogQWN0dWFsIHJlZ2lzdGVyIHdoaWNoIGNvbnRhaW5zIFJMQyBSWCBkYXRhIC0gcmVhZCBieSBmaXJtd2FyZSAqLworI2RlZmluZSBFTkVfQ0lSREFUX0lOCQkweEZFQzcKKworCisvKiBSTEMgY29uZmlndXJhdGlvbiAtIHNhbXBsZSBwZXJpb2QgKDF1cyByZXN1bHV0aW9uKSArIGlkbGUgbW9kZSAqLworI2RlZmluZSBFTkVfQ0lSUkxDX0NGRwkJMHhGRUM4CisjZGVmaW5lIEVORV9DSVJSTENfQ0ZHX09WRVJGTE9XCTB4ODAJLyogaW50ZXJydXB0IG9uIG92ZXJmbG93cyBpZiBzZXQgKi8KKyNkZWZpbmUgRU5FX0RFRkFVTFRfU0FNUExFX1BFUklPRCA1MAorCisvKiBUd28gYnl0ZSBSTEMgVFggYnVmZmVyICovCisjZGVmaW5lIEVORV9DSVJSTENfT1VUMAkJMHhGRUM5CisjZGVmaW5lIEVORV9DSVJSTENfT1VUMQkJMHhGRUNBCisjZGVmaW5lIEVORV9DSVJSTENfT1VUX1BVTFNFCTB4ODAJLyogVHJhbnNtaXR0ZWQgc2FtcGxlIGlzIHB1bHNlICovCisjZGVmaW5lIEVORV9DSVJSTENfT1VUX01BU0sJMHg3RgorCisKKy8qIENhcnJpZXIgZGV0ZWN0IHNldHRpbmcKKyAqIExvdyBuaWJibGUgIC0gbnVtYmVyIG9mIGNhcnJpZXIgcHVsc2VzIHRvIGF2ZXJhZ2UKKyAqIEhpZ2ggbmliYmxlIC0gbnVtYmVyIG9mIGluaXRpYWwgY2FycmllciBwdWxzZXMgdG8gZGlzY2FyZAorICovCisjZGVmaW5lIEVORV9DSVJDQVJfUFVMUwkJMHhGRUNCCisKKy8qIGRldGVjdGVkIFJYIGNhcnJpZXIgcGVyaW9kIChyZXNvbHV0aW9uOiA1MDAgbnMpICovCisjZGVmaW5lIEVORV9DSVJDQVJfUFJECQkweEZFQ0MKKyNkZWZpbmUgRU5FX0NJUkNBUl9QUkRfVkFMSUQJMHg4MAkvKiBkYXRhIHZhbGlkIGNvbnRlbnQgdmFsaWQgKi8KKworLyogZGV0ZWN0ZWQgUlggY2FycmllciBwdWxzZSB3aWR0aCAocmVzb2x1dGlvbjogNTAwIG5zKSAqLworI2RlZmluZSBFTkVfQ0lSQ0FSX0hQUkQJCTB4RkVDRAorCisvKiBUWCBwZXJpb2QgKHJlc29sdXRpb246IDUwMCBucywgbWluaW11bSAyKSovCisjZGVmaW5lIEVORV9DSVJNT0RfUFJECQkweEZFQ0UKKyNkZWZpbmUgRU5FX0NJUk1PRF9QUkRfUE9MCTB4ODAJLyogVFggY2FycmllciBwb2xhcml0eSovCisKKyNkZWZpbmUgRU5FX0NJUk1PRF9QUkRfTUFYCTB4N0YJLyogMTUuODcga0h6ICovCisjZGVmaW5lIEVORV9DSVJNT0RfUFJEX01JTgkweDAyCS8qIDEgTWh6ICovCisKKy8qIFRYIHB1bHNlIHdpZHRoIChyZXNvbHV0aW9uOiA1MDAgbnMpKi8KKyNkZWZpbmUgRU5FX0NJUk1PRF9IUFJECQkweEZFQ0YKKworLyogSGFyZHdhcmUgdmVyc2lvbnMgKi8KKyNkZWZpbmUgRU5FX0VDSFYJCTB4RkYwMAkvKiBoYXJkd2FyZSByZXZpc2lvbiAqLworI2RlZmluZSBFTkVfUExMRlJICQkweEZGMTYKKyNkZWZpbmUgRU5FX1BMTEZSTAkJMHhGRjE3CisjZGVmaW5lIEVORV9ERUZBVUxUX1BMTF9GUkVRCTEwMDAKKworI2RlZmluZSBFTkVfRUNTVFMJCTB4RkYxRAorI2RlZmluZSBFTkVfRUNTVFNfUlNSVkQJCTB4MDQKKworI2RlZmluZSBFTkVfRUNWRVJfTUFKT1IJCTB4RkYxRQkvKiBjaGlwIHZlcnNpb24gKi8KKyNkZWZpbmUgRU5FX0VDVkVSX01JTk9SCQkweEZGMUYKKyNkZWZpbmUgRU5FX0hXX1ZFUl9PTEQJCTB4RkQwMAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIEVORV9EUklWRVJfTkFNRQkJImVuZV9pciIKKworI2RlZmluZSBFTkVfSVJRX1JYCQkxCisjZGVmaW5lIEVORV9JUlFfVFgJCTIKKworI2RlZmluZSAgRU5FX0hXX0IJCTEJLyogMzkyNkIgKi8KKyNkZWZpbmUgIEVORV9IV19DCQkyCS8qIDM5MjZDICovCisjZGVmaW5lICBFTkVfSFdfRAkJMwkvKiAzOTI2RCBvciBsYXRlciAqLworCisjZGVmaW5lIGVuZV9wcmludGsobGV2ZWwsIHRleHQsIC4uLikgXAorCXByaW50ayhsZXZlbCBFTkVfRFJJVkVSX05BTUUgIjogIiB0ZXh0ICJcbiIsICMjIF9fVkFfQVJHU19fKQorCisjZGVmaW5lIGVuZV9ub3RpY2UodGV4dCwgLi4uKSBlbmVfcHJpbnRrKEtFUk5fTk9USUNFLCB0ZXh0LCAjIyBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgZW5lX3dhcm4odGV4dCwgLi4uKSBlbmVfcHJpbnRrKEtFUk5fV0FSTklORywgdGV4dCwgIyMgX19WQV9BUkdTX18pCisKKworI2RlZmluZSBfX2RiZyhsZXZlbCwgZm9ybWF0LCAuLi4pIFwKKwlkbyB7IFwKKwkJaWYgKGRlYnVnID49IGxldmVsKSBcCisJCQlwcmludGsoS0VSTl9ERUJVRyBFTkVfRFJJVkVSX05BTUUgXAorCQkJCSI6ICIgZm9ybWF0ICJcbiIsICMjIF9fVkFfQVJHU19fKTsgXAorCX0gd2hpbGUgKDApCisKKworI2RlZmluZSBkYmcoZm9ybWF0LCAuLi4pCQlfX2RiZygxLCBmb3JtYXQsICMjIF9fVkFfQVJHU19fKQorI2RlZmluZSBkYmdfdmVyYm9zZShmb3JtYXQsIC4uLikJX19kYmcoMiwgZm9ybWF0LCAjIyBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgZGJnX3JlZ3MoZm9ybWF0LCAuLi4pCQlfX2RiZygzLCBmb3JtYXQsICMjIF9fVkFfQVJHU19fKQorCisjZGVmaW5lIE1TX1RPX05TKG1zZWMpICgobXNlYykgKiAxMDAwKQorCitzdHJ1Y3QgZW5lX2RldmljZSB7CisJc3RydWN0IHBucF9kZXYgKnBucF9kZXY7CisJc3RydWN0IHJjX2RldiAqcmRldjsKKworCS8qIGh3IElPIHNldHRpbmdzICovCisJbG9uZyBod19pbzsKKwlpbnQgaXJxOworCXNwaW5sb2NrX3QgaHdfbG9jazsKKworCS8qIEhXIGZlYXR1cmVzICovCisJaW50IGh3X3JldmlzaW9uOwkJCS8qIGhhcmR3YXJlIHJldmlzaW9uICovCisJYm9vbCBod191c2VfZ3Bpb18wYTsJCQkvKiBncGlvMGEgaXMgZGVtb2R1bGF0ZWQgaW5wdXQqLworCWJvb2wgaHdfZXh0cmFfYnVmZmVyOwkJCS8qIGhhcmR3YXJlIGhhcyAnZXh0cmEgYnVmZmVyJyAqLworCWJvb2wgaHdfZmFuX2lucHV0OwkJCS8qIGZhbiBpbnB1dCBpcyBJUiBkYXRhIHNvdXJjZSAqLworCWJvb2wgaHdfbGVhcm5pbmdfYW5kX3R4X2NhcGFibGU7CS8qIGxlYXJuaW5nICYgdHggY2FwYWJsZSAqLworCWludCAgcGxsX2ZyZXE7CisJaW50IGJ1ZmZlcl9sZW47CisKKwkvKiBFeHRyYSBSWCBidWZmZXIgbG9jYXRpb24gKi8KKwlpbnQgZXh0cmFfYnVmMV9hZGRyZXNzOworCWludCBleHRyYV9idWYxX2xlbjsKKwlpbnQgZXh0cmFfYnVmMl9hZGRyZXNzOworCWludCBleHRyYV9idWYyX2xlbjsKKworCS8qIEhXIHN0YXRlKi8KKwlpbnQgcl9wb2ludGVyOwkJCQkvKiBwb2ludGVyIHRvIG5leHQgc2FtcGxlIHRvIHJlYWQgKi8KKwlpbnQgd19wb2ludGVyOwkJCQkvKiBwb2ludGVyIHRvIG5leHQgc2FtcGxlIGh3IHdpbGwgd3JpdGUgKi8KKwlib29sIHJ4X2Zhbl9pbnB1dF9pbnVzZTsJCS8qIGlzIGZhbiBpbnB1dCBpbiB1c2UgZm9yIHJ4Ki8KKwlpbnQgdHhfcmVnOwkJCQkvKiBjdXJyZW50IHJlZyB1c2VkIGZvciBUWCAqLworCXU4ICBzYXZlZF9jb25mMTsJCQkvKiBzYXZlZCBGRUMwIHJlZyAqLworCXVuc2lnbmVkIGludCB0eF9zYW1wbGU7CQkJLyogY3VycmVudCBzYW1wbGUgZm9yIFRYICovCisJYm9vbCB0eF9zYW1wbGVfcHVsc2U7CQkJLyogY3VycmVudCBzYW1wbGUgaXMgcHVsc2UgKi8KKworCS8qIFRYIGJ1ZmZlciAqLworCWludCAqdHhfYnVmZmVyOwkJCQkvKiBpbnB1dCBzYW1wbGVzIGJ1ZmZlciovCisJaW50IHR4X3BvczsJCQkJLyogcG9zaXRpb24gaW4gdGhhdCBidWZlciAqLworCWludCB0eF9sZW47CQkJCS8qIGN1cnJlbnQgbGVuIG9mIHR4IGJ1ZmZlciAqLworCWludCB0eF9kb25lOwkJCQkvKiBkb25lIHRyYW5zbWl0dGluZyAqLworCQkJCQkJLyogb25lIG1vcmUgc2FtcGxlIHBlbmRpbmcqLworCXN0cnVjdCBjb21wbGV0aW9uIHR4X2NvbXBsZXRlOwkJLyogVFggY29tcGxldGlvbiAqLworCXN0cnVjdCB0aW1lcl9saXN0IHR4X3NpbV90aW1lcjsKKworCS8qIFRYIHNldHRpbmdzICovCisJaW50IHR4X3BlcmlvZDsKKwlpbnQgdHhfZHV0eV9jeWNsZTsKKwlpbnQgdHJhbnNtaXR0ZXJfbWFzazsKKworCS8qIFJYIHNldHRpbmdzICovCisJYm9vbCBsZWFybmluZ19tb2RlX2VuYWJsZWQ7CQkvKiBsZWFybmluZyBpbnB1dCBlbmFibGVkICovCisJYm9vbCBjYXJyaWVyX2RldGVjdF9lbmFibGVkOwkJLyogY2FycmllciBkZXRlY3QgZW5hYmxlZCAqLworCWludCByeF9wZXJpb2RfYWRqdXN0OworCWJvb2wgcnhfZW5hYmxlZDsKK307CisKK3N0YXRpYyBpbnQgZW5lX2lycV9zdGF0dXMoc3RydWN0IGVuZV9kZXZpY2UgKmRldik7CitzdGF0aWMgdm9pZCBlbmVfcnhfcmVhZF9od19wb2ludGVyKHN0cnVjdCBlbmVfZGV2aWNlICpkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9pbW9uLmMgYi9kcml2ZXJzL21lZGlhL3JjL2ltb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODExNTEyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9pbW9uLmMKQEAgLTAsMCArMSwyNDU3IEBACisvKgorICogICBpbW9uLmM6CWlucHV0IGFuZCBkaXNwbGF5IGRyaXZlciBmb3IgU291bmRHcmFwaCBpTU9OIElSL1ZGRC9MQ0QKKyAqCisgKiAgIENvcHlyaWdodChDKSAyMDEwICBKYXJvZCBXaWxzb24gPGphcm9kQHdpbHNvbmV0LmNvbT4KKyAqICAgUG9ydGlvbnMgYmFzZWQgb24gdGhlIG9yaWdpbmFsIGxpcmNfaW1vbiBkcml2ZXIsCisgKglDb3B5cmlnaHQoQykgMjAwNCAgVmVua3kgUmFqdShkZXZAdmVua3kud3MpCisgKgorICogICBIdWdlIHRoYW5rcyB0byBSLiBHZW9mZiBOZXdidXJ5IGZvciBpbnZhbHVhYmxlIGRlYnVnZ2luZyBvbiB0aGUKKyAqICAgMHhmZmRjIGlNT04gZGV2aWNlcywgYW5kIGZvciBzZW5kaW5nIG1lIG9uZSB0byBoYWNrIG9uLCB3aXRob3V0CisgKiAgIHdoaWNoIHRoZSBzdXBwb3J0IGZvciB0aGVtIHdvdWxkbid0IGJlIG5lYXJseSBhcyBnb29kLiBUaGFua3MKKyAqICAgYWxzbyB0byB0aGUgbnVtZXJvdXMgMHhmZmRjIGRldmljZSBvd25lcnMgdGhhdCB0ZXN0ZWQgYXV0by1jb25maWcKKyAqICAgc3VwcG9ydCBmb3IgbWUgYW5kIHByb3ZpZGVkIGRlYnVnIGR1bXBzIGZyb20gdGhlaXIgZGV2aWNlcy4KKyAqCisgKiAgIGltb24gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjolczogIiBmbXQsIF9fZnVuY19fCisKKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorCisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvaW5wdXQuaD4KKyNpbmNsdWRlIDxtZWRpYS9yYy1jb3JlLmg+CisKKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKworI2RlZmluZSBNT0RfQVVUSE9SCSJKYXJvZCBXaWxzb24gPGphcm9kQHdpbHNvbmV0LmNvbT4iCisjZGVmaW5lIE1PRF9ERVNDCSJEcml2ZXIgZm9yIFNvdW5kR3JhcGggaU1PTiBNdWx0aU1lZGlhIElSL0Rpc3BsYXkiCisjZGVmaW5lIE1PRF9OQU1FCSJpbW9uIgorI2RlZmluZSBNT0RfVkVSU0lPTgkiMC45LjIiCisKKyNkZWZpbmUgRElTUExBWV9NSU5PUl9CQVNFCTE0NAorI2RlZmluZSBERVZJQ0VfTkFNRQkibGNkJWQiCisKKyNkZWZpbmUgQlVGX0NIVU5LX1NJWkUJOAorI2RlZmluZSBCVUZfU0laRQkxMjgKKworI2RlZmluZSBCSVRfRFVSQVRJT04JMjUwCS8qIGVhY2ggYml0IHJlY2VpdmVkIGlzIDI1MHVzICovCisKKyNkZWZpbmUgSU1PTl9DTE9DS19FTkFCTEVfUEFDS0VUUwkyCisKKy8qKiogUCBSIE8gVCBPIFQgWSBQIEUgUyAqKiovCisKKy8qIFVTQiBDYWxsYmFjayBwcm90b3R5cGVzICovCitzdGF0aWMgaW50IGltb25fcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwKKwkJICAgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKTsKK3N0YXRpYyB2b2lkIGltb25fZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKTsKK3N0YXRpYyB2b2lkIHVzYl9yeF9jYWxsYmFja19pbnRmMChzdHJ1Y3QgdXJiICp1cmIpOworc3RhdGljIHZvaWQgdXNiX3J4X2NhbGxiYWNrX2ludGYxKHN0cnVjdCB1cmIgKnVyYik7CitzdGF0aWMgdm9pZCB1c2JfdHhfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKTsKKworLyogc3VzcGVuZC9yZXN1bWUgc3VwcG9ydCAqLworc3RhdGljIGludCBpbW9uX3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zik7CitzdGF0aWMgaW50IGltb25fc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpOworCisvKiBEaXNwbGF5IGZpbGVfb3BlcmF0aW9ucyBmdW5jdGlvbiBwcm90b3R5cGVzICovCitzdGF0aWMgaW50IGRpc3BsYXlfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CitzdGF0aWMgaW50IGRpc3BsYXlfY2xvc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOworCisvKiBWRkQgd3JpdGUgb3BlcmF0aW9uICovCitzdGF0aWMgc3NpemVfdCB2ZmRfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgKmJ1ZiwKKwkJCSBzaXplX3Qgbl9ieXRlcywgbG9mZl90ICpwb3MpOworCisvKiBMQ0QgZmlsZV9vcGVyYXRpb25zIG92ZXJyaWRlIGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KK3N0YXRpYyBzc2l6ZV90IGxjZF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciAqYnVmLAorCQkJIHNpemVfdCBuX2J5dGVzLCBsb2ZmX3QgKnBvcyk7CisKKy8qKiogRyBMIE8gQiBBIEwgUyAqKiovCisKK3N0cnVjdCBpbW9uX2NvbnRleHQgeworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwkvKiBOZXdlciBkZXZpY2VzIGhhdmUgdHdvIGludGVyZmFjZXMgKi8KKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2X2ludGYwOworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXZfaW50ZjE7CisKKwlib29sIGRpc3BsYXlfc3VwcG9ydGVkOwkJLyogbm90IGFsbCBjb250cm9sbGVycyBkbyAqLworCWJvb2wgZGlzcGxheV9pc29wZW47CQkvKiBkaXNwbGF5IHBvcnQgaGFzIGJlZW4gb3BlbmVkICovCisJYm9vbCByZl9kZXZpY2U7CQkJLyogdHJ1ZSBpZiBpTU9OIDIuNEcgTFQvRFQgUkYgZGV2aWNlICovCisJYm9vbCByZl9pc2Fzc29jaWF0aW5nOwkJLyogUkYgcmVtb3RlIGFzc29jaWF0aW5nICovCisJYm9vbCBkZXZfcHJlc2VudF9pbnRmMDsJCS8qIFVTQiBkZXZpY2UgcHJlc2VuY2UsIGludGVyZmFjZSAwICovCisJYm9vbCBkZXZfcHJlc2VudF9pbnRmMTsJCS8qIFVTQiBkZXZpY2UgcHJlc2VuY2UsIGludGVyZmFjZSAxICovCisKKwlzdHJ1Y3QgbXV0ZXggbG9jazsJCS8qIHRvIGxvY2sgdGhpcyBvYmplY3QgKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdCByZW1vdmVfb2s7CS8qIEZvciB1bmV4cGVjdGVkIFVTQiBkaXNjb25uZWN0cyAqLworCisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICpyeF9lbmRwb2ludF9pbnRmMDsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKnJ4X2VuZHBvaW50X2ludGYxOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqdHhfZW5kcG9pbnQ7CisJc3RydWN0IHVyYiAqcnhfdXJiX2ludGYwOworCXN0cnVjdCB1cmIgKnJ4X3VyYl9pbnRmMTsKKwlzdHJ1Y3QgdXJiICp0eF91cmI7CisJYm9vbCB0eF9jb250cm9sOworCXVuc2lnbmVkIGNoYXIgdXNiX3J4X2J1Zls4XTsKKwl1bnNpZ25lZCBjaGFyIHVzYl90eF9idWZbOF07CisKKwlzdHJ1Y3QgdHhfdCB7CisJCXVuc2lnbmVkIGNoYXIgZGF0YV9idWZbMzVdOwkvKiB1c2VyIGRhdGEgYnVmZmVyICovCisJCXN0cnVjdCBjb21wbGV0aW9uIGZpbmlzaGVkOwkvKiB3YWl0IGZvciB3cml0ZSB0byBmaW5pc2ggKi8KKwkJYm9vbCBidXN5OwkJCS8qIHdyaXRlIGluIHByb2dyZXNzICovCisJCWludCBzdGF0dXM7CQkJLyogc3RhdHVzIG9mIHR4IGNvbXBsZXRpb24gKi8KKwl9IHR4OworCisJdTE2IHZlbmRvcjsJCQkvKiB1c2IgdmVuZG9yIElEICovCisJdTE2IHByb2R1Y3Q7CQkJLyogdXNiIHByb2R1Y3QgSUQgKi8KKworCXN0cnVjdCByY19kZXYgKnJkZXY7CQkvKiByYy1jb3JlIGRldmljZSBmb3IgcmVtb3RlICovCisJc3RydWN0IGlucHV0X2RldiAqaWRldjsJCS8qIGlucHV0IGRldmljZSBmb3IgcGFuZWwgJiBJUiBtb3VzZSAqLworCXN0cnVjdCBpbnB1dF9kZXYgKnRvdWNoOwkvKiBpbnB1dCBkZXZpY2UgZm9yIHRvdWNoc2NyZWVuICovCisKKwlzcGlubG9ja190IGtjX2xvY2s7CQkvKiBtYWtlIHN1cmUgd2UgZ2V0IGtleWNvZGVzIHJpZ2h0ICovCisJdTMyIGtjOwkJCQkvKiBjdXJyZW50IGlucHV0IGtleWNvZGUgKi8KKwl1MzIgbGFzdF9rZXljb2RlOwkJLyogbGFzdCByZXBvcnRlZCBpbnB1dCBrZXljb2RlICovCisJdTMyIHJjX3NjYW5jb2RlOwkJLyogdGhlIGNvbXB1dGVkIHJlbW90ZSBzY2FuY29kZSAqLworCXU4IHJjX3RvZ2dsZTsJCQkvKiB0aGUgY29tcHV0ZWQgcmVtb3RlIHRvZ2dsZSBiaXQgKi8KKwl1NjQgcmNfdHlwZTsJCQkvKiBpTU9OIG9yIE1DRSAoUkM2KSBJUiBwcm90b2NvbD8gKi8KKwlib29sIHJlbGVhc2VfY29kZTsJCS8qIHNvbWUga2V5cyBzZW5kIGEgcmVsZWFzZSBjb2RlICovCisKKwl1OCBkaXNwbGF5X3R5cGU7CQkvKiBzdG9yZSB0aGUgZGlzcGxheSB0eXBlICovCisJYm9vbCBwYWRfbW91c2U7CQkJLyogdG9nZ2xlIGtiZCgwKS9tb3VzZSgxKSBtb2RlICovCisKKwljaGFyIG5hbWVfcmRldlsxMjhdOwkJLyogcmMgaW5wdXQgZGV2aWNlIG5hbWUgKi8KKwljaGFyIHBoeXNfcmRldls2NF07CQkvKiByYyBpbnB1dCBkZXZpY2UgcGh5cyBwYXRoICovCisKKwljaGFyIG5hbWVfaWRldlsxMjhdOwkJLyogaW5wdXQgZGV2aWNlIG5hbWUgKi8KKwljaGFyIHBoeXNfaWRldls2NF07CQkvKiBpbnB1dCBkZXZpY2UgcGh5cyBwYXRoICovCisKKwljaGFyIG5hbWVfdG91Y2hbMTI4XTsJCS8qIHRvdWNoIHNjcmVlbiBuYW1lICovCisJY2hhciBwaHlzX3RvdWNoWzY0XTsJCS8qIHRvdWNoIHNjcmVlbiBwaHlzIHBhdGggKi8KKwlzdHJ1Y3QgdGltZXJfbGlzdCB0dGltZXI7CS8qIHRvdWNoIHNjcmVlbiB0aW1lciAqLworCWludCB0b3VjaF94OwkJCS8qIHggY29vcmRpbmF0ZSBvbiB0b3VjaHNjcmVlbiAqLworCWludCB0b3VjaF95OwkJCS8qIHkgY29vcmRpbmF0ZSBvbiB0b3VjaHNjcmVlbiAqLworfTsKKworI2RlZmluZSBUT1VDSF9USU1FT1VUCShIWi8zMCkKKworLyogdmZkIGNoYXJhY3RlciBkZXZpY2UgZmlsZSBvcGVyYXRpb25zICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2ZmRfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gJmRpc3BsYXlfb3BlbiwKKwkud3JpdGUJCT0gJnZmZF93cml0ZSwKKwkucmVsZWFzZQk9ICZkaXNwbGF5X2Nsb3NlLAorCS5sbHNlZWsJCT0gbm9vcF9sbHNlZWssCit9OworCisvKiBsY2QgY2hhcmFjdGVyIGRldmljZSBmaWxlIG9wZXJhdGlvbnMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxjZF9mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSAmZGlzcGxheV9vcGVuLAorCS53cml0ZQkJPSAmbGNkX3dyaXRlLAorCS5yZWxlYXNlCT0gJmRpc3BsYXlfY2xvc2UsCisJLmxsc2VlawkJPSBub29wX2xsc2VlaywKK307CisKK2VudW0geworCUlNT05fRElTUExBWV9UWVBFX0FVVE8gPSAwLAorCUlNT05fRElTUExBWV9UWVBFX1ZGRCAgPSAxLAorCUlNT05fRElTUExBWV9UWVBFX0xDRCAgPSAyLAorCUlNT05fRElTUExBWV9UWVBFX1ZHQSAgPSAzLAorCUlNT05fRElTUExBWV9UWVBFX05PTkUgPSA0LAorfTsKKworZW51bSB7CisJSU1PTl9LRVlfSU1PTgk9IDAsCisJSU1PTl9LRVlfTUNFCT0gMSwKKwlJTU9OX0tFWV9QQU5FTAk9IDIsCit9OworCisvKgorICogVVNCIERldmljZSBJRCBmb3IgaU1PTiBVU0IgQ29udHJvbCBCb2FyZHMKKyAqCisgKiBUaGUgV2luZG93cyBkcml2ZXJzIGNvbnRhaW4gNiBkaWZmZXJlbnQgaW5mIGZpbGVzLCBtb3JlIG9yIGxlc3Mgb25lIGZvcgorICogZWFjaCBuZXcgZGV2aWNlIHVudGlsIHRoZSAweDAwMzQtMHgwMDQ2IGRldmljZXMsIHdoaWNoIGFsbCB1c2UgdGhlIHNhbWUKKyAqIGRyaXZlci4gU29tZSBvZiB0aGUgZGV2aWNlcyBpbiB0aGUgMzQtNDYgcmFuZ2UgaGF2ZW4ndCBiZWVuIGRlZmluaXRpdmVseQorICogaWRlbnRpZmllZCB5ZXQuIEVhcmx5IGRldmljZXMgaGF2ZSBlaXRoZXIgYSBUcmlHZW0gQ29tcHV0ZXIsIEluYy4gb3IgYQorICogU2Ftc3VuZyB2ZW5kb3IgSUQgKDB4MGFhOCBhbmQgMHgwNGU4IHJlc3BlY3RpdmVseSksIHdoaWxlIGFsbCBsYXRlcgorICogZGV2aWNlcyB1c2UgdGhlIFNvdW5kR3JhcGggdmVuZG9yIElEICgweDE1YzIpLiBUaGlzIGRyaXZlciBvbmx5IHN1cHBvcnRzCisgKiB0aGUgZmZkYyBhbmQgbGF0ZXIgZGV2aWNlcywgd2hpY2ggZG8gb25ib2FyZCBkZWNvZGluZy4KKyAqLworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGltb25fdXNiX2lkX3RhYmxlW10gPSB7CisJLyoKKwkgKiBTZXZlcmFsIGRldmljZXMgd2l0aCB0aGlzIHNhbWUgZGV2aWNlIElELCBhbGwgdXNlIGlNT05fUEFELmluZgorCSAqIFNvdW5kR3JhcGggaU1PTiBQQUQgKElSICYgVkZEKQorCSAqIFNvdW5kR3JhcGggaU1PTiBQQUQgKElSICYgTENEKQorCSAqIFNvdW5kR3JhcGggaU1PTiBLbm9iIChJUiBvbmx5KQorCSAqLworCXsgVVNCX0RFVklDRSgweDE1YzIsIDB4ZmZkYykgfSwKKworCS8qCisJICogTmV3ZXIgZGV2aWNlcywgYWxsIGRyaXZlbiBieSB0aGUgbGF0ZXN0IGlNT04gV2luZG93cyBkcml2ZXIsIGZ1bGwKKwkgKiBsaXN0IG9mIGRldmljZSBJRHMgZXh0cmFjdGVkIHZpYSAnc3RyaW5ncyBTZXR1cC9kYXRhMS5oZHIgfGdyZXAgMTVjMicKKwkgKiBOZWVkIHVzZXIgaW5wdXQgdG8gZmlsbCBpbiBkZXRhaWxzIG9uIHVua25vd24gZGV2aWNlcy4KKwkgKi8KKwkvKiBTb3VuZEdyYXBoIGlNT04gT0VNIFRvdWNoIExDRCAoSVIgJiA3IiBWR0EgTENEKSAqLworCXsgVVNCX0RFVklDRSgweDE1YzIsIDB4MDAzNCkgfSwKKwkvKiBTb3VuZEdyYXBoIGlNT04gT0VNIFRvdWNoIExDRCAoSVIgJiA0LjMiIFZHQSBMQ0QpICovCisJeyBVU0JfREVWSUNFKDB4MTVjMiwgMHgwMDM1KSB9LAorCS8qIFNvdW5kR3JhcGggaU1PTiBPRU0gVkZEIChJUiAmIFZGRCkgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxNWMyLCAweDAwMzYpIH0sCisJLyogZGV2aWNlIHNwZWNpZmljcyB1bmtub3duICovCisJeyBVU0JfREVWSUNFKDB4MTVjMiwgMHgwMDM3KSB9LAorCS8qIFNvdW5kR3JhcGggaU1PTiBPRU0gTENEIChJUiAmIExDRCkgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxNWMyLCAweDAwMzgpIH0sCisJLyogU291bmRHcmFwaCBpTU9OIFVsdHJhQmF5IChJUiAmIExDRCkgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxNWMyLCAweDAwMzkpIH0sCisJLyogZGV2aWNlIHNwZWNpZmljcyB1bmtub3duICovCisJeyBVU0JfREVWSUNFKDB4MTVjMiwgMHgwMDNhKSB9LAorCS8qIGRldmljZSBzcGVjaWZpY3MgdW5rbm93biAqLworCXsgVVNCX0RFVklDRSgweDE1YzIsIDB4MDAzYikgfSwKKwkvKiBTb3VuZEdyYXBoIGlNT04gT0VNIEluc2lkZSAoSVIgb25seSkgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxNWMyLCAweDAwM2MpIH0sCisJLyogZGV2aWNlIHNwZWNpZmljcyB1bmtub3duICovCisJeyBVU0JfREVWSUNFKDB4MTVjMiwgMHgwMDNkKSB9LAorCS8qIGRldmljZSBzcGVjaWZpY3MgdW5rbm93biAqLworCXsgVVNCX0RFVklDRSgweDE1YzIsIDB4MDAzZSkgfSwKKwkvKiBkZXZpY2Ugc3BlY2lmaWNzIHVua25vd24gKi8KKwl7IFVTQl9ERVZJQ0UoMHgxNWMyLCAweDAwM2YpIH0sCisJLyogZGV2aWNlIHNwZWNpZmljcyB1bmtub3duICovCisJeyBVU0JfREVWSUNFKDB4MTVjMiwgMHgwMDQwKSB9LAorCS8qIFNvdW5kR3JhcGggaU1PTiBNSU5JIChJUiBvbmx5KSAqLworCXsgVVNCX0RFVklDRSgweDE1YzIsIDB4MDA0MSkgfSwKKwkvKiBBbnRlYyBWZXJpcyBNdWx0aW1lZGlhIFN0YXRpb24gRVogRXh0ZXJuYWwgKElSIG9ubHkpICovCisJeyBVU0JfREVWSUNFKDB4MTVjMiwgMHgwMDQyKSB9LAorCS8qIEFudGVjIFZlcmlzIE11bHRpbWVkaWEgU3RhdGlvbiBCYXNpYyBJbnRlcm5hbCAoSVIgb25seSkgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxNWMyLCAweDAwNDMpIH0sCisJLyogQW50ZWMgVmVyaXMgTXVsdGltZWRpYSBTdGF0aW9uIEVsaXRlIChJUiAmIFZGRCkgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxNWMyLCAweDAwNDQpIH0sCisJLyogQW50ZWMgVmVyaXMgTXVsdGltZWRpYSBTdGF0aW9uIFByZW1pZXJlIChJUiAmIExDRCkgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxNWMyLCAweDAwNDUpIH0sCisJLyogZGV2aWNlIHNwZWNpZmljcyB1bmtub3duICovCisJeyBVU0JfREVWSUNFKDB4MTVjMiwgMHgwMDQ2KSB9LAorCXt9Cit9OworCisvKiBVU0IgRGV2aWNlIGRhdGEgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBpbW9uX2RyaXZlciA9IHsKKwkubmFtZQkJPSBNT0RfTkFNRSwKKwkucHJvYmUJCT0gaW1vbl9wcm9iZSwKKwkuZGlzY29ubmVjdAk9IGltb25fZGlzY29ubmVjdCwKKwkuc3VzcGVuZAk9IGltb25fc3VzcGVuZCwKKwkucmVzdW1lCQk9IGltb25fcmVzdW1lLAorCS5pZF90YWJsZQk9IGltb25fdXNiX2lkX3RhYmxlLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfY2xhc3NfZHJpdmVyIGltb25fdmZkX2NsYXNzID0geworCS5uYW1lCQk9IERFVklDRV9OQU1FLAorCS5mb3BzCQk9ICZ2ZmRfZm9wcywKKwkubWlub3JfYmFzZQk9IERJU1BMQVlfTUlOT1JfQkFTRSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2NsYXNzX2RyaXZlciBpbW9uX2xjZF9jbGFzcyA9IHsKKwkubmFtZQkJPSBERVZJQ0VfTkFNRSwKKwkuZm9wcwkJPSAmbGNkX2ZvcHMsCisJLm1pbm9yX2Jhc2UJPSBESVNQTEFZX01JTk9SX0JBU0UsCit9OworCisvKiBpbW9uIHJlY2VpdmVyIGZyb250IHBhbmVsL2tub2Iga2V5IHRhYmxlICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHsKKwl1NjQgaHdfY29kZTsKKwl1MzIga2V5Y29kZTsKK30gaW1vbl9wYW5lbF9rZXlfdGFibGVbXSA9IHsKKwl7IDB4MDAwMDAwMDAwZjAwZmZlZWxsLCBLRVlfUFJPRzEgfSwgLyogR28gKi8KKwl7IDB4MDAwMDAwMDAxZjAwZmZlZWxsLCBLRVlfQVVESU8gfSwKKwl7IDB4MDAwMDAwMDAyMDAwZmZlZWxsLCBLRVlfVklERU8gfSwKKwl7IDB4MDAwMDAwMDAyMTAwZmZlZWxsLCBLRVlfQ0FNRVJBIH0sCisJeyAweDAwMDAwMDAwMjcwMGZmZWVsbCwgS0VZX0RWRCB9LAorCXsgMHgwMDAwMDAwMDIzMDBmZmVlbGwsIEtFWV9UViB9LAorCXsgMHgwMDAwMDAwMDA1MDBmZmVlbGwsIEtFWV9QUkVWSU9VUyB9LAorCXsgMHgwMDAwMDAwMDA3MDBmZmVlbGwsIEtFWV9SRVdJTkQgfSwKKwl7IDB4MDAwMDAwMDAwNDAwZmZlZWxsLCBLRVlfU1RPUCB9LAorCXsgMHgwMDAwMDAwMDNjMDBmZmVlbGwsIEtFWV9QTEFZUEFVU0UgfSwKKwl7IDB4MDAwMDAwMDAwODAwZmZlZWxsLCBLRVlfRkFTVEZPUldBUkQgfSwKKwl7IDB4MDAwMDAwMDAwNjAwZmZlZWxsLCBLRVlfTkVYVCB9LAorCXsgMHgwMDAwMDAwMTAwMDBmZmVlbGwsIEtFWV9SSUdIVCB9LAorCXsgMHgwMDAwMDEwMDAwMDBmZmVlbGwsIEtFWV9MRUZUIH0sCisJeyAweDAwMDAwMDAwM2QwMGZmZWVsbCwgS0VZX1NFTEVDVCB9LAorCXsgMHgwMDAxMDAwMDAwMDBmZmVlbGwsIEtFWV9WT0xVTUVVUCB9LAorCXsgMHgwMTAwMDAwMDAwMDBmZmVlbGwsIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweDAwMDAwMDAwMDEwMGZmZWVsbCwgS0VZX01VVEUgfSwKKwkvKiAweGZmZGMgaU1PTiBNQ0UgVkZEICovCisJeyAweDAwMDEwMDAwZmZmZmZmZWVsbCwgS0VZX1ZPTFVNRVVQIH0sCisJeyAweDAxMDAwMDAwZmZmZmZmZWVsbCwgS0VZX1ZPTFVNRURPV04gfSwKKwkvKiBpTU9OIEtub2IgdmFsdWVzICovCisJeyAweDAwMDEwMGZmZmZmZmZmZWVsbCwgS0VZX1ZPTFVNRVVQIH0sCisJeyAweDAxMDAwMGZmZmZmZmZmZWVsbCwgS0VZX1ZPTFVNRURPV04gfSwKKwl7IDB4MDAwMDA4ZmZmZmZmZmZlZWxsLCBLRVlfTVVURSB9LAorfTsKKworLyogdG8gcHJldmVudCByYWNlcyBiZXR3ZWVuIG9wZW4oKSBhbmQgZGlzY29ubmVjdCgpLCBwcm9iaW5nLCBldGMgKi8KK3N0YXRpYyBERUZJTkVfTVVURVgoZHJpdmVyX2xvY2spOworCisvKiBNb2R1bGUgYm9va2tlZXBpbmcgYml0cyAqLworTU9EVUxFX0FVVEhPUihNT0RfQVVUSE9SKTsKK01PRFVMRV9ERVNDUklQVElPTihNT0RfREVTQyk7CitNT0RVTEVfVkVSU0lPTihNT0RfVkVSU0lPTik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgaW1vbl91c2JfaWRfdGFibGUpOworCitzdGF0aWMgYm9vbCBkZWJ1ZzsKK21vZHVsZV9wYXJhbShkZWJ1ZywgYm9vbCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIG1lc3NhZ2VzOiAwPW5vLCAxPXllcyAoZGVmYXVsdDogbm8pIik7CisKKy8qIGxjZCwgdmZkLCB2Z2Egb3Igbm9uZT8gc2hvdWxkIGJlIGF1dG8tZGV0ZWN0ZWQsIGJ1dCBjYW4gYmUgb3ZlcnJpZGRlbi4uLiAqLworc3RhdGljIGludCBkaXNwbGF5X3R5cGU7Cittb2R1bGVfcGFyYW0oZGlzcGxheV90eXBlLCBpbnQsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhkaXNwbGF5X3R5cGUsICJUeXBlIG9mIGF0dGFjaGVkIGRpc3BsYXkuIDA9YXV0b2RldGVjdCwgIgorCQkgIjE9dmZkLCAyPWxjZCwgMz12Z2EsIDQ9bm9uZSAoZGVmYXVsdDogYXV0b2RldGVjdCkiKTsKKworc3RhdGljIGludCBwYWRfc3RhYmlsaXplID0gMTsKK21vZHVsZV9wYXJhbShwYWRfc3RhYmlsaXplLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MocGFkX3N0YWJpbGl6ZSwgIkFwcGx5IHN0YWJpbGl6YXRpb24gYWxnb3JpdGhtIHRvIGlNT04gUEFEICIKKwkJICJwcmVzc2VzIGluIGFycm93IGtleSBtb2RlLiAwPWRpc2FibGUsIDE9ZW5hYmxlIChkZWZhdWx0KS4iKTsKKworLyoKKyAqIEluIGNlcnRhaW4gdXNlIGNhc2VzLCBtb3VzZSBtb2RlIGlzbid0IHJlYWxseSBoZWxwZnVsLCBhbmQgY291bGQgYWN0dWFsbHkKKyAqIGNhdXNlIGNvbmZ1c2lvbiwgc28gYWxsb3cgZGlzYWJsaW5nIGl0IHdoZW4gdGhlIElSIGRldmljZSBpcyBvcGVuLgorICovCitzdGF0aWMgYm9vbCBub21vdXNlOworbW9kdWxlX3BhcmFtKG5vbW91c2UsIGJvb2wsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0Mobm9tb3VzZSwgIkRpc2FibGUgbW91c2UgaW5wdXQgZGV2aWNlIG1vZGUgd2hlbiBJUiBkZXZpY2UgaXMgIgorCQkgIm9wZW4uIDA9ZG9uJ3QgZGlzYWJsZSwgMT1kaXNhYmxlLiAoZGVmYXVsdDogZG9uJ3QgZGlzYWJsZSkiKTsKKworLyogdGhyZXNob2xkIGF0IHdoaWNoIGEgcGFkIHB1c2ggcmVnaXN0ZXJzIGFzIGFuIGFycm93IGtleSBpbiBrYmQgbW9kZSAqLworc3RhdGljIGludCBwYWRfdGhyZXNoOworbW9kdWxlX3BhcmFtKHBhZF90aHJlc2gsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhwYWRfdGhyZXNoLCAiVGhyZXNob2xkIGF0IHdoaWNoIGEgcGFkIHB1c2ggcmVnaXN0ZXJzIGFzIGFuICIKKwkJICJhcnJvdyBrZXkgaW4ga2JkIG1vZGUgKGRlZmF1bHQ6IDI4KSIpOworCisKK3N0YXRpYyB2b2lkIGZyZWVfaW1vbl9jb250ZXh0KHN0cnVjdCBpbW9uX2NvbnRleHQgKmljdHgpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gaWN0eC0+ZGV2OworCisJdXNiX2ZyZWVfdXJiKGljdHgtPnR4X3VyYik7CisJdXNiX2ZyZWVfdXJiKGljdHgtPnJ4X3VyYl9pbnRmMCk7CisJdXNiX2ZyZWVfdXJiKGljdHgtPnJ4X3VyYl9pbnRmMSk7CisJa2ZyZWUoaWN0eCk7CisKKwlkZXZfZGJnKGRldiwgIiVzOiBpTU9OIGNvbnRleHQgZnJlZWRcbiIsIF9fZnVuY19fKTsKK30KKworLyoqCisgKiBDYWxsZWQgd2hlbiB0aGUgRGlzcGxheSBkZXZpY2UgKGUuZy4gL2Rldi9sY2QwKQorICogaXMgb3BlbmVkIGJ5IHRoZSBhcHBsaWNhdGlvbi4KKyAqLworc3RhdGljIGludCBkaXNwbGF5X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZTsKKwlzdHJ1Y3QgaW1vbl9jb250ZXh0ICppY3R4ID0gTlVMTDsKKwlpbnQgc3VibWlub3I7CisJaW50IHJldHZhbCA9IDA7CisKKwkvKiBwcmV2ZW50IHJhY2VzIHdpdGggZGlzY29ubmVjdCAqLworCW11dGV4X2xvY2soJmRyaXZlcl9sb2NrKTsKKworCXN1Ym1pbm9yID0gaW1pbm9yKGlub2RlKTsKKwlpbnRlcmZhY2UgPSB1c2JfZmluZF9pbnRlcmZhY2UoJmltb25fZHJpdmVyLCBzdWJtaW5vcik7CisJaWYgKCFpbnRlcmZhY2UpIHsKKwkJcHJfZXJyKCJjb3VsZCBub3QgZmluZCBpbnRlcmZhY2UgZm9yIG1pbm9yICVkXG4iLCBzdWJtaW5vcik7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gZXhpdDsKKwl9CisJaWN0eCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKworCWlmICghaWN0eCkgeworCQlwcl9lcnIoIm5vIGNvbnRleHQgZm91bmQgZm9yIG1pbm9yICVkXG4iLCBzdWJtaW5vcik7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gZXhpdDsKKwl9CisKKwltdXRleF9sb2NrKCZpY3R4LT5sb2NrKTsKKworCWlmICghaWN0eC0+ZGlzcGxheV9zdXBwb3J0ZWQpIHsKKwkJcHJfZXJyKCJkaXNwbGF5IG5vdCBzdXBwb3J0ZWQgYnkgZGV2aWNlXG4iKTsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwl9IGVsc2UgaWYgKGljdHgtPmRpc3BsYXlfaXNvcGVuKSB7CisJCXByX2VycigiZGlzcGxheSBwb3J0IGlzIGFscmVhZHkgb3BlblxuIik7CisJCXJldHZhbCA9IC1FQlVTWTsKKwl9IGVsc2UgeworCQlpY3R4LT5kaXNwbGF5X2lzb3BlbiA9IHRydWU7CisJCWZpbGUtPnByaXZhdGVfZGF0YSA9IGljdHg7CisJCWRldl9kYmcoaWN0eC0+ZGV2LCAiZGlzcGxheSBwb3J0IG9wZW5lZFxuIik7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZpY3R4LT5sb2NrKTsKKworZXhpdDoKKwltdXRleF91bmxvY2soJmRyaXZlcl9sb2NrKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKioKKyAqIENhbGxlZCB3aGVuIHRoZSBkaXNwbGF5IGRldmljZSAoZS5nLiAvZGV2L2xjZDApCisgKiBpcyBjbG9zZWQgYnkgdGhlIGFwcGxpY2F0aW9uLgorICovCitzdGF0aWMgaW50IGRpc3BsYXlfY2xvc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGltb25fY29udGV4dCAqaWN0eCA9IE5VTEw7CisJaW50IHJldHZhbCA9IDA7CisKKwlpY3R4ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJaWYgKCFpY3R4KSB7CisJCXByX2Vycigibm8gY29udGV4dCBmb3IgZGV2aWNlXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJbXV0ZXhfbG9jaygmaWN0eC0+bG9jayk7CisKKwlpZiAoIWljdHgtPmRpc3BsYXlfc3VwcG9ydGVkKSB7CisJCXByX2VycigiZGlzcGxheSBub3Qgc3VwcG9ydGVkIGJ5IGRldmljZVxuIik7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJfSBlbHNlIGlmICghaWN0eC0+ZGlzcGxheV9pc29wZW4pIHsKKwkJcHJfZXJyKCJkaXNwbGF5IGlzIG5vdCBvcGVuXG4iKTsKKwkJcmV0dmFsID0gLUVJTzsKKwl9IGVsc2UgeworCQlpY3R4LT5kaXNwbGF5X2lzb3BlbiA9IGZhbHNlOworCQlkZXZfZGJnKGljdHgtPmRldiwgImRpc3BsYXkgcG9ydCBjbG9zZWRcbiIpOworCQlpZiAoIWljdHgtPmRldl9wcmVzZW50X2ludGYwKSB7CisJCQkvKgorCQkJICogRGV2aWNlIGRpc2Nvbm5lY3RlZCBiZWZvcmUgY2xvc2UgYW5kIElSIHBvcnQgaXMgbm90CisJCQkgKiBvcGVuLiBJZiBJUiBwb3J0IGlzIG9wZW4sIGNvbnRleHQgd2lsbCBiZSBkZWxldGVkIGJ5CisJCQkgKiBpcl9jbG9zZS4KKwkJCSAqLworCQkJbXV0ZXhfdW5sb2NrKCZpY3R4LT5sb2NrKTsKKwkJCWZyZWVfaW1vbl9jb250ZXh0KGljdHgpOworCQkJcmV0dXJuIHJldHZhbDsKKwkJfQorCX0KKworCW11dGV4X3VubG9jaygmaWN0eC0+bG9jayk7CisJcmV0dXJuIHJldHZhbDsKK30KKworLyoqCisgKiBTZW5kcyBhIHBhY2tldCB0byB0aGUgZGV2aWNlIC0tIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQKKyAqIHdpdGggaWN0eC0+bG9jayBoZWxkLgorICovCitzdGF0aWMgaW50IHNlbmRfcGFja2V0KHN0cnVjdCBpbW9uX2NvbnRleHQgKmljdHgpCit7CisJdW5zaWduZWQgaW50IHBpcGU7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OworCWludCBpbnRlcnZhbCA9IDA7CisJaW50IHJldHZhbCA9IDA7CisJc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqY29udHJvbF9yZXEgPSBOVUxMOworCisJLyogQ2hlY2sgaWYgd2UgbmVlZCB0byB1c2UgY29udHJvbCBvciBpbnRlcnJ1cHQgdXJiICovCisJaWYgKCFpY3R4LT50eF9jb250cm9sKSB7CisJCXBpcGUgPSB1c2Jfc25kaW50cGlwZShpY3R4LT51c2JkZXZfaW50ZjAsCisJCQkJICAgICAgaWN0eC0+dHhfZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MpOworCQlpbnRlcnZhbCA9IGljdHgtPnR4X2VuZHBvaW50LT5iSW50ZXJ2YWw7CisKKwkJdXNiX2ZpbGxfaW50X3VyYihpY3R4LT50eF91cmIsIGljdHgtPnVzYmRldl9pbnRmMCwgcGlwZSwKKwkJCQkgaWN0eC0+dXNiX3R4X2J1ZiwKKwkJCQkgc2l6ZW9mKGljdHgtPnVzYl90eF9idWYpLAorCQkJCSB1c2JfdHhfY2FsbGJhY2ssIGljdHgsIGludGVydmFsKTsKKworCQlpY3R4LT50eF91cmItPmFjdHVhbF9sZW5ndGggPSAwOworCX0gZWxzZSB7CisJCS8qIGZpbGwgcmVxdWVzdCBpbnRvIGttYWxsb2MnZWQgc3BhY2U6ICovCisJCWNvbnRyb2xfcmVxID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHVzYl9jdHJscmVxdWVzdCksCisJCQkJICAgICAgR0ZQX0tFUk5FTCk7CisJCWlmIChjb250cm9sX3JlcSA9PSBOVUxMKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJLyogc2V0dXAgcGFja2V0IGlzICcyMSAwOSAwMjAwIDAwMDEgMDAwOCcgKi8KKwkJY29udHJvbF9yZXEtPmJSZXF1ZXN0VHlwZSA9IDB4MjE7CisJCWNvbnRyb2xfcmVxLT5iUmVxdWVzdCA9IDB4MDk7CisJCWNvbnRyb2xfcmVxLT53VmFsdWUgPSBjcHVfdG9fbGUxNigweDAyMDApOworCQljb250cm9sX3JlcS0+d0luZGV4ID0gY3B1X3RvX2xlMTYoMHgwMDAxKTsKKwkJY29udHJvbF9yZXEtPndMZW5ndGggPSBjcHVfdG9fbGUxNigweDAwMDgpOworCisJCS8qIGNvbnRyb2wgcGlwZSBpcyBlbmRwb2ludCAweDAwICovCisJCXBpcGUgPSB1c2Jfc25kY3RybHBpcGUoaWN0eC0+dXNiZGV2X2ludGYwLCAwKTsKKworCQkvKiBidWlsZCB0aGUgY29udHJvbCB1cmIgKi8KKwkJdXNiX2ZpbGxfY29udHJvbF91cmIoaWN0eC0+dHhfdXJiLCBpY3R4LT51c2JkZXZfaW50ZjAsCisJCQkJICAgICBwaXBlLCAodW5zaWduZWQgY2hhciAqKWNvbnRyb2xfcmVxLAorCQkJCSAgICAgaWN0eC0+dXNiX3R4X2J1ZiwKKwkJCQkgICAgIHNpemVvZihpY3R4LT51c2JfdHhfYnVmKSwKKwkJCQkgICAgIHVzYl90eF9jYWxsYmFjaywgaWN0eCk7CisJCWljdHgtPnR4X3VyYi0+YWN0dWFsX2xlbmd0aCA9IDA7CisJfQorCisJaW5pdF9jb21wbGV0aW9uKCZpY3R4LT50eC5maW5pc2hlZCk7CisJaWN0eC0+dHguYnVzeSA9IHRydWU7CisJc21wX3JtYigpOyAvKiBlbnN1cmUgbGF0ZXIgcmVhZGVycyBrbm93IHdlJ3JlIGJ1c3kgKi8KKworCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKGljdHgtPnR4X3VyYiwgR0ZQX0tFUk5FTCk7CisJaWYgKHJldHZhbCkgeworCQlpY3R4LT50eC5idXN5ID0gZmFsc2U7CisJCXNtcF9ybWIoKTsgLyogZW5zdXJlIGxhdGVyIHJlYWRlcnMga25vdyB3ZSdyZSBub3QgYnVzeSAqLworCQlwcl9lcnIoImVycm9yIHN1Ym1pdHRpbmcgdXJiKCVkKVxuIiwgcmV0dmFsKTsKKwl9IGVsc2UgeworCQkvKiBXYWl0IGZvciB0cmFuc21pc3Npb24gdG8gY29tcGxldGUgKG9yIGFib3J0KSAqLworCQltdXRleF91bmxvY2soJmljdHgtPmxvY2spOworCQlyZXR2YWwgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGUoCisJCQkJJmljdHgtPnR4LmZpbmlzaGVkKTsKKwkJaWYgKHJldHZhbCkKKwkJCXByX2VycigidGFzayBpbnRlcnJ1cHRlZFxuIik7CisJCW11dGV4X2xvY2soJmljdHgtPmxvY2spOworCisJCXJldHZhbCA9IGljdHgtPnR4LnN0YXR1czsKKwkJaWYgKHJldHZhbCkKKwkJCXByX2VycigicGFja2V0IHR4IGZhaWxlZCAoJWQpXG4iLCByZXR2YWwpOworCX0KKworCWtmcmVlKGNvbnRyb2xfcmVxKTsKKworCS8qCisJICogSW5kdWNlIGEgbWFuZGF0b3J5IDVtcyBkZWxheSBiZWZvcmUgcmV0dXJuaW5nLCBhcyBvdGhlcndpc2UsCisJICogc2VuZF9wYWNrZXQgY2FuIGdldCBjYWxsZWQgc28gcmFwaWRseSBhcyB0byBvdmVyd2hlbG0gdGhlIGRldmljZSwKKwkgKiBwYXJ0aWN1bGFybHkgb24gZmFzdGVyIHN5c3RlbXMgYW5kL29yIHRob3NlIHdpdGggcXVpcmt5IHVzYi4KKwkgKi8KKwl0aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcyg1KTsKKwlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisJc2NoZWR1bGVfdGltZW91dCh0aW1lb3V0KTsKKworCXJldHVybiByZXR2YWw7Cit9CisKKy8qKgorICogU2VuZHMgYW4gYXNzb2NpYXRlIHBhY2tldCB0byB0aGUgaU1PTiAyLjRHLgorICoKKyAqIFRoaXMgbWlnaHQgbm90IGJlIHN1Y2ggYSBnb29kIGlkZWEsIHNpbmNlIGl0IGhhcyBhbiBpZCBjb2xsaXNpb24gd2l0aAorICogc29tZSB2ZXJzaW9ucyBvZiB0aGUgIklSICYgVkZEIiBjb21iby4gVGhlIG9ubHkgd2F5IHRvIGRldGVybWluZSBpZiBpdAorICogaXMgYW4gUkYgdmVyc2lvbiBpcyB0byBsb29rIGF0IHRoZSBwcm9kdWN0IGRlc2NyaXB0aW9uIHN0cmluZy4gKFdoaWNoCisgKiB3ZSBjdXJyZW50bHkgZG8gbm90IGZldGNoKS4KKyAqLworc3RhdGljIGludCBzZW5kX2Fzc29jaWF0ZV8yNGcoc3RydWN0IGltb25fY29udGV4dCAqaWN0eCkKK3sKKwlpbnQgcmV0dmFsOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgcGFja2V0WzhdID0geyAweDAxLCAweDAwLCAweDAwLCAweDAwLAorCQkJCQkgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAgfTsKKworCWlmICghaWN0eCkgeworCQlwcl9lcnIoIm5vIGNvbnRleHQgZm9yIGRldmljZVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmICghaWN0eC0+ZGV2X3ByZXNlbnRfaW50ZjApIHsKKwkJcHJfZXJyKCJubyBpTU9OIGRldmljZSBwcmVzZW50XG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJbWVtY3B5KGljdHgtPnVzYl90eF9idWYsIHBhY2tldCwgc2l6ZW9mKHBhY2tldCkpOworCXJldHZhbCA9IHNlbmRfcGFja2V0KGljdHgpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworLyoqCisgKiBTZW5kcyBwYWNrZXRzIHRvIHNldHVwIGFuZCBzaG93IGNsb2NrIG9uIGlNT04gZGlzcGxheQorICoKKyAqIEFyZ3VtZW50czogeWVhciAtIGxhc3QgMiBkaWdpdHMgb2YgeWVhciwgbW9udGggLSAxLi4xMiwKKyAqIGRheSAtIDEuLjMxLCBkb3cgLSBkYXkgb2YgdGhlIHdlZWsgKDAtU3VuLi4uNi1TYXQpLAorICogaG91ciAtIDAuLjIzLCBtaW51dGUgLSAwLi41OSwgc2Vjb25kIC0gMC4uNTkKKyAqLworc3RhdGljIGludCBzZW5kX3NldF9pbW9uX2Nsb2NrKHN0cnVjdCBpbW9uX2NvbnRleHQgKmljdHgsCisJCQkgICAgICAgdW5zaWduZWQgaW50IHllYXIsIHVuc2lnbmVkIGludCBtb250aCwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgZGF5LCB1bnNpZ25lZCBpbnQgZG93LAorCQkJICAgICAgIHVuc2lnbmVkIGludCBob3VyLCB1bnNpZ25lZCBpbnQgbWludXRlLAorCQkJICAgICAgIHVuc2lnbmVkIGludCBzZWNvbmQpCit7CisJdW5zaWduZWQgY2hhciBjbG9ja19lbmFibGVfcGt0W0lNT05fQ0xPQ0tfRU5BQkxFX1BBQ0tFVFNdWzhdOworCWludCByZXR2YWwgPSAwOworCWludCBpOworCisJaWYgKCFpY3R4KSB7CisJCXByX2Vycigibm8gY29udGV4dCBmb3IgZGV2aWNlXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJc3dpdGNoIChpY3R4LT5kaXNwbGF5X3R5cGUpIHsKKwljYXNlIElNT05fRElTUExBWV9UWVBFX0xDRDoKKwkJY2xvY2tfZW5hYmxlX3BrdFswXVswXSA9IDB4ODA7CisJCWNsb2NrX2VuYWJsZV9wa3RbMF1bMV0gPSB5ZWFyOworCQljbG9ja19lbmFibGVfcGt0WzBdWzJdID0gbW9udGgtMTsKKwkJY2xvY2tfZW5hYmxlX3BrdFswXVszXSA9IGRheTsKKwkJY2xvY2tfZW5hYmxlX3BrdFswXVs0XSA9IGhvdXI7CisJCWNsb2NrX2VuYWJsZV9wa3RbMF1bNV0gPSBtaW51dGU7CisJCWNsb2NrX2VuYWJsZV9wa3RbMF1bNl0gPSBzZWNvbmQ7CisKKwkJY2xvY2tfZW5hYmxlX3BrdFsxXVswXSA9IDB4ODA7CisJCWNsb2NrX2VuYWJsZV9wa3RbMV1bMV0gPSAwOworCQljbG9ja19lbmFibGVfcGt0WzFdWzJdID0gMDsKKwkJY2xvY2tfZW5hYmxlX3BrdFsxXVszXSA9IDA7CisJCWNsb2NrX2VuYWJsZV9wa3RbMV1bNF0gPSAwOworCQljbG9ja19lbmFibGVfcGt0WzFdWzVdID0gMDsKKwkJY2xvY2tfZW5hYmxlX3BrdFsxXVs2XSA9IDA7CisKKwkJaWYgKGljdHgtPnByb2R1Y3QgPT0gMHhmZmRjKSB7CisJCQljbG9ja19lbmFibGVfcGt0WzBdWzddID0gMHg1MDsKKwkJCWNsb2NrX2VuYWJsZV9wa3RbMV1bN10gPSAweDUxOworCQl9IGVsc2UgeworCQkJY2xvY2tfZW5hYmxlX3BrdFswXVs3XSA9IDB4ODg7CisJCQljbG9ja19lbmFibGVfcGt0WzFdWzddID0gMHg4YTsKKwkJfQorCisJCWJyZWFrOworCisJY2FzZSBJTU9OX0RJU1BMQVlfVFlQRV9WRkQ6CisJCWNsb2NrX2VuYWJsZV9wa3RbMF1bMF0gPSB5ZWFyOworCQljbG9ja19lbmFibGVfcGt0WzBdWzFdID0gbW9udGgtMTsKKwkJY2xvY2tfZW5hYmxlX3BrdFswXVsyXSA9IGRheTsKKwkJY2xvY2tfZW5hYmxlX3BrdFswXVszXSA9IGRvdzsKKwkJY2xvY2tfZW5hYmxlX3BrdFswXVs0XSA9IGhvdXI7CisJCWNsb2NrX2VuYWJsZV9wa3RbMF1bNV0gPSBtaW51dGU7CisJCWNsb2NrX2VuYWJsZV9wa3RbMF1bNl0gPSBzZWNvbmQ7CisJCWNsb2NrX2VuYWJsZV9wa3RbMF1bN10gPSAweDQwOworCisJCWNsb2NrX2VuYWJsZV9wa3RbMV1bMF0gPSAwOworCQljbG9ja19lbmFibGVfcGt0WzFdWzFdID0gMDsKKwkJY2xvY2tfZW5hYmxlX3BrdFsxXVsyXSA9IDE7CisJCWNsb2NrX2VuYWJsZV9wa3RbMV1bM10gPSAwOworCQljbG9ja19lbmFibGVfcGt0WzFdWzRdID0gMDsKKwkJY2xvY2tfZW5hYmxlX3BrdFsxXVs1XSA9IDA7CisJCWNsb2NrX2VuYWJsZV9wa3RbMV1bNl0gPSAwOworCQljbG9ja19lbmFibGVfcGt0WzFdWzddID0gMHg0MjsKKworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBJTU9OX0NMT0NLX0VOQUJMRV9QQUNLRVRTOyBpKyspIHsKKwkJbWVtY3B5KGljdHgtPnVzYl90eF9idWYsIGNsb2NrX2VuYWJsZV9wa3RbaV0sIDgpOworCQlyZXR2YWwgPSBzZW5kX3BhY2tldChpY3R4KTsKKwkJaWYgKHJldHZhbCkgeworCQkJcHJfZXJyKCJzZW5kX3BhY2tldCBmYWlsZWQgZm9yIHBhY2tldCAlZFxuIiwgaSk7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiByZXR2YWw7Cit9CisKKy8qKgorICogVGhlc2UgYXJlIHRoZSBzeXNmcyBmdW5jdGlvbnMgdG8gaGFuZGxlIHRoZSBhc3NvY2lhdGlvbiBvbiB0aGUgaU1PTiAyLjRHIExULgorICovCitzdGF0aWMgc3NpemVfdCBzaG93X2Fzc29jaWF0ZV9yZW1vdGUoc3RydWN0IGRldmljZSAqZCwKKwkJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSAgICAgY2hhciAqYnVmKQoreworCXN0cnVjdCBpbW9uX2NvbnRleHQgKmljdHggPSBkZXZfZ2V0X2RydmRhdGEoZCk7CisKKwlpZiAoIWljdHgpCisJCXJldHVybiAtRU5PREVWOworCisJbXV0ZXhfbG9jaygmaWN0eC0+bG9jayk7CisJaWYgKGljdHgtPnJmX2lzYXNzb2NpYXRpbmcpCisJCXN0cmNweShidWYsICJhc3NvY2lhdGluZ1xuIik7CisJZWxzZQorCQlzdHJjcHkoYnVmLCAiY2xvc2VkXG4iKTsKKworCWRldl9pbmZvKGQsICJWaXNpdCBodHRwOi8vd3d3LmxpcmMub3JnL2h0bWwvaW1vbi0yNGcuaHRtbCBmb3IgIgorCQkgImluc3RydWN0aW9ucyBvbiBob3cgdG8gYXNzb2NpYXRlIHlvdXIgaU1PTiAyLjRHIERUL0xUICIKKwkJICJyZW1vdGVcbiIpOworCW11dGV4X3VubG9jaygmaWN0eC0+bG9jayk7CisJcmV0dXJuIHN0cmxlbihidWYpOworfQorCitzdGF0aWMgc3NpemVfdCBzdG9yZV9hc3NvY2lhdGVfcmVtb3RlKHN0cnVjdCBkZXZpY2UgKmQsCisJCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGltb25fY29udGV4dCAqaWN0eDsKKworCWljdHggPSBkZXZfZ2V0X2RydmRhdGEoZCk7CisKKwlpZiAoIWljdHgpCisJCXJldHVybiAtRU5PREVWOworCisJbXV0ZXhfbG9jaygmaWN0eC0+bG9jayk7CisJaWN0eC0+cmZfaXNhc3NvY2lhdGluZyA9IHRydWU7CisJc2VuZF9hc3NvY2lhdGVfMjRnKGljdHgpOworCW11dGV4X3VubG9jaygmaWN0eC0+bG9jayk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qKgorICogc3lzZnMgZnVuY3Rpb25zIHRvIGNvbnRyb2wgaW50ZXJuYWwgaW1vbiBjbG9jaworICovCitzdGF0aWMgc3NpemVfdCBzaG93X2ltb25fY2xvY2soc3RydWN0IGRldmljZSAqZCwKKwkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBpbW9uX2NvbnRleHQgKmljdHggPSBkZXZfZ2V0X2RydmRhdGEoZCk7CisJc2l6ZV90IGxlbjsKKworCWlmICghaWN0eCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwltdXRleF9sb2NrKCZpY3R4LT5sb2NrKTsKKworCWlmICghaWN0eC0+ZGlzcGxheV9zdXBwb3J0ZWQpIHsKKwkJbGVuID0gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICJOb3Qgc3VwcG9ydGVkLiIpOworCX0gZWxzZSB7CisJCWxlbiA9IHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLAorCQkJIlRvIHNldCB0aGUgY2xvY2sgb24geW91ciBpTU9OIGRpc3BsYXk6XG4iCisJCQkiIyBkYXRlIFwiKyUleSAlJW0gJSVkICUldyAlJUggJSVNICUlU1wiID4gaW1vbl9jbG9ja1xuIgorCQkJIiVzIiwgaWN0eC0+ZGlzcGxheV9pc29wZW4gPworCQkJIlxuTk9URTogaW1vbiBkZXZpY2UgbXVzdCBiZSBjbG9zZWRcbiIgOiAiIik7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZpY3R4LT5sb2NrKTsKKworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX2ltb25fY2xvY2soc3RydWN0IGRldmljZSAqZCwKKwkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgaW1vbl9jb250ZXh0ICppY3R4ID0gZGV2X2dldF9kcnZkYXRhKGQpOworCXNzaXplX3QgcmV0dmFsOworCXVuc2lnbmVkIGludCB5ZWFyLCBtb250aCwgZGF5LCBkb3csIGhvdXIsIG1pbnV0ZSwgc2Vjb25kOworCisJaWYgKCFpY3R4KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCW11dGV4X2xvY2soJmljdHgtPmxvY2spOworCisJaWYgKCFpY3R4LT5kaXNwbGF5X3N1cHBvcnRlZCkgeworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIGV4aXQ7CisJfSBlbHNlIGlmIChpY3R4LT5kaXNwbGF5X2lzb3BlbikgeworCQlyZXR2YWwgPSAtRUJVU1k7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpZiAoc3NjYW5mKGJ1ZiwgIiV1ICV1ICV1ICV1ICV1ICV1ICV1IiwJJnllYXIsICZtb250aCwgJmRheSwgJmRvdywKKwkJICAgJmhvdXIsICZtaW51dGUsICZzZWNvbmQpICE9IDcpIHsKKwkJcmV0dmFsID0gLUVJTlZBTDsKKwkJZ290byBleGl0OworCX0KKworCWlmICgobW9udGggPCAxIHx8IG1vbnRoID4gMTIpIHx8CisJICAgIChkYXkgPCAxIHx8IGRheSA+IDMxKSB8fCAoZG93ID4gNikgfHwKKwkgICAgKGhvdXIgPiAyMykgfHwgKG1pbnV0ZSA+IDU5KSB8fCAoc2Vjb25kID4gNTkpKSB7CisJCXJldHZhbCA9IC1FSU5WQUw7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlyZXR2YWwgPSBzZW5kX3NldF9pbW9uX2Nsb2NrKGljdHgsIHllYXIsIG1vbnRoLCBkYXksIGRvdywKKwkJCQkgICAgIGhvdXIsIG1pbnV0ZSwgc2Vjb25kKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGV4aXQ7CisKKwlyZXR2YWwgPSBjb3VudDsKK2V4aXQ6CisJbXV0ZXhfdW5sb2NrKCZpY3R4LT5sb2NrKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKKworc3RhdGljIERFVklDRV9BVFRSKGltb25fY2xvY2ssIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X2ltb25fY2xvY2ssCisJCSAgIHN0b3JlX2ltb25fY2xvY2spOworCitzdGF0aWMgREVWSUNFX0FUVFIoYXNzb2NpYXRlX3JlbW90ZSwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfYXNzb2NpYXRlX3JlbW90ZSwKKwkJICAgc3RvcmVfYXNzb2NpYXRlX3JlbW90ZSk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICppbW9uX2Rpc3BsYXlfc3lzZnNfZW50cmllc1tdID0geworCSZkZXZfYXR0cl9pbW9uX2Nsb2NrLmF0dHIsCisJTlVMTAorfTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgaW1vbl9kaXNwbGF5X2F0dHJfZ3JvdXAgPSB7CisJLmF0dHJzID0gaW1vbl9kaXNwbGF5X3N5c2ZzX2VudHJpZXMKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICppbW9uX3JmX3N5c2ZzX2VudHJpZXNbXSA9IHsKKwkmZGV2X2F0dHJfYXNzb2NpYXRlX3JlbW90ZS5hdHRyLAorCU5VTEwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGltb25fcmZfYXR0cl9ncm91cCA9IHsKKwkuYXR0cnMgPSBpbW9uX3JmX3N5c2ZzX2VudHJpZXMKK307CisKKy8qKgorICogV3JpdGVzIGRhdGEgdG8gdGhlIFZGRC4gIFRoZSBpTU9OIFZGRCBpcyAyeDE2IGNoYXJhY3RlcnMKKyAqIGFuZCByZXF1aXJlcyBkYXRhIGluIDUgY29uc2VjdXRpdmUgVVNCIGludGVycnVwdCBwYWNrZXRzLAorICogZWFjaCBwYWNrZXQgYnV0IHRoZSBsYXN0IGNhcnJ5aW5nIDcgYnl0ZXMuCisgKgorICogSSBkb24ndCBrbm93IGlmIHRoZSBWRkQgYm9hcmQgc3VwcG9ydHMgZmVhdHVyZXMgc3VjaCBhcworICogc2Nyb2xsaW5nLCBjbGVhcmluZyByb3dzLCBibGFua2luZywgZXRjLiBzbyBhdAorICogdGhlIGNhbGxlciBtdXN0IHByb3ZpZGUgYSBmdWxsIHNjcmVlbiBvZiBkYXRhLiAgSWYgZmV3ZXIKKyAqIHRoYW4gMzIgYnl0ZXMgYXJlIHByb3ZpZGVkIHNwYWNlcyB3aWxsIGJlIGFwcGVuZGVkIHRvCisgKiBnZW5lcmF0ZSBhIGZ1bGwgc2NyZWVuLgorICovCitzdGF0aWMgc3NpemVfdCB2ZmRfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgKmJ1ZiwKKwkJCSBzaXplX3Qgbl9ieXRlcywgbG9mZl90ICpwb3MpCit7CisJaW50IGk7CisJaW50IG9mZnNldDsKKwlpbnQgc2VxOworCWludCByZXR2YWwgPSAwOworCXN0cnVjdCBpbW9uX2NvbnRleHQgKmljdHg7CisJY29uc3QgdW5zaWduZWQgY2hhciB2ZmRfcGFja2V0NltdID0geworCQkweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZGLCAweEZGIH07CisKKwlpY3R4ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWlmICghaWN0eCkgeworCQlwcl9lcnIoIm5vIGNvbnRleHQgZm9yIGRldmljZVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCW11dGV4X2xvY2soJmljdHgtPmxvY2spOworCisJaWYgKCFpY3R4LT5kZXZfcHJlc2VudF9pbnRmMCkgeworCQlwcl9lcnIoIm5vIGlNT04gZGV2aWNlIHByZXNlbnRcbiIpOworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKG5fYnl0ZXMgPD0gMCB8fCBuX2J5dGVzID4gMzIpIHsKKwkJcHJfZXJyKCJpbnZhbGlkIHBheWxvYWQgc2l6ZVxuIik7CisJCXJldHZhbCA9IC1FSU5WQUw7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpZiAoY29weV9mcm9tX3VzZXIoaWN0eC0+dHguZGF0YV9idWYsIGJ1Ziwgbl9ieXRlcykpIHsKKwkJcmV0dmFsID0gLUVGQVVMVDsKKwkJZ290byBleGl0OworCX0KKworCS8qIFBhZCB3aXRoIHNwYWNlcyAqLworCWZvciAoaSA9IG5fYnl0ZXM7IGkgPCAzMjsgKytpKQorCQlpY3R4LT50eC5kYXRhX2J1ZltpXSA9ICcgJzsKKworCWZvciAoaSA9IDMyOyBpIDwgMzU7ICsraSkKKwkJaWN0eC0+dHguZGF0YV9idWZbaV0gPSAweEZGOworCisJb2Zmc2V0ID0gMDsKKwlzZXEgPSAwOworCisJZG8geworCQltZW1jcHkoaWN0eC0+dXNiX3R4X2J1ZiwgaWN0eC0+dHguZGF0YV9idWYgKyBvZmZzZXQsIDcpOworCQlpY3R4LT51c2JfdHhfYnVmWzddID0gKHVuc2lnbmVkIGNoYXIpIHNlcTsKKworCQlyZXR2YWwgPSBzZW5kX3BhY2tldChpY3R4KTsKKwkJaWYgKHJldHZhbCkgeworCQkJcHJfZXJyKCJzZW5kIHBhY2tldCBmYWlsZWQgZm9yIHBhY2tldCAjJWRcbiIsIHNlcSAvIDIpOworCQkJZ290byBleGl0OworCQl9IGVsc2UgeworCQkJc2VxICs9IDI7CisJCQlvZmZzZXQgKz0gNzsKKwkJfQorCisJfSB3aGlsZSAob2Zmc2V0IDwgMzUpOworCisJLyogU2VuZCBwYWNrZXQgIzYgKi8KKwltZW1jcHkoaWN0eC0+dXNiX3R4X2J1ZiwgJnZmZF9wYWNrZXQ2LCBzaXplb2YodmZkX3BhY2tldDYpKTsKKwlpY3R4LT51c2JfdHhfYnVmWzddID0gKHVuc2lnbmVkIGNoYXIpIHNlcTsKKwlyZXR2YWwgPSBzZW5kX3BhY2tldChpY3R4KTsKKwlpZiAocmV0dmFsKQorCQlwcl9lcnIoInNlbmQgcGFja2V0IGZhaWxlZCBmb3IgcGFja2V0ICMlZFxuIiwgc2VxIC8gMik7CisKK2V4aXQ6CisJbXV0ZXhfdW5sb2NrKCZpY3R4LT5sb2NrKTsKKworCXJldHVybiAoIXJldHZhbCkgPyBuX2J5dGVzIDogcmV0dmFsOworfQorCisvKioKKyAqIFdyaXRlcyBkYXRhIHRvIHRoZSBMQ0QuICBUaGUgaU1PTiBPRU0gTENEIHNjcmVlbiBleHBlY3RzIDgtYnl0ZQorICogcGFja2V0cy4gV2UgYWNjZXB0IGRhdGEgYXMgMTYgaGV4YWRlY2ltYWwgZGlnaXRzLCBmb2xsb3dlZCBieSBhCisgKiBuZXdsaW5lICh0byBtYWtlIGl0IGVhc3kgdG8gZHJpdmUgdGhlIGRldmljZSBmcm9tIGEgY29tbWFuZC1saW5lCisgKiAtLSBldmVuIHRob3VnaCB0aGUgYWN0dWFsIGJpbmFyeSBkYXRhIGlzIGEgYml0IGNvbXBsaWNhdGVkKS4KKyAqCisgKiBUaGUgZGV2aWNlIGl0c2VsZiBpcyBub3QgYSAidHJhZGl0aW9uYWwiIHRleHQtbW9kZSBkaXNwbGF5LiBJdCdzCisgKiBhY3R1YWxseSBhIDE2eDk2IHBpeGVsIGJpdG1hcCBkaXNwbGF5LiBUaGF0IG1lYW5zIGlmIHlvdSB3YW50IHRvCisgKiBkaXNwbGF5IHRleHQsIHlvdSd2ZSBnb3QgdG8gaGF2ZSB5b3VyIG93biAiZm9udCIgYW5kIHRyYW5zbGF0ZSB0aGUKKyAqIHRleHQgaW50byBiaXRtYXBzIGZvciBkaXNwbGF5LiBUaGlzIGlzIHJlYWxseSBmbGV4aWJsZSAoeW91IGNhbgorICogZGlzcGxheSB3aGF0ZXZlciBkaWFjcml0aWNzIHlvdSBuZWVkLCBhbmQgc28gb24pLCBidXQgaXQncyBhbHNvCisgKiBhIGxvdCBtb3JlIGNvbXBsaWNhdGVkIHRoYW4gbW9zdCBMQ0RzLi4uCisgKi8KK3N0YXRpYyBzc2l6ZV90IGxjZF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciAqYnVmLAorCQkJIHNpemVfdCBuX2J5dGVzLCBsb2ZmX3QgKnBvcykKK3sKKwlpbnQgcmV0dmFsID0gMDsKKwlzdHJ1Y3QgaW1vbl9jb250ZXh0ICppY3R4OworCisJaWN0eCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlpZiAoIWljdHgpIHsKKwkJcHJfZXJyKCJubyBjb250ZXh0IGZvciBkZXZpY2VcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwltdXRleF9sb2NrKCZpY3R4LT5sb2NrKTsKKworCWlmICghaWN0eC0+ZGlzcGxheV9zdXBwb3J0ZWQpIHsKKwkJcHJfZXJyKCJubyBpTU9OIGRpc3BsYXkgcHJlc2VudFxuIik7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpZiAobl9ieXRlcyAhPSA4KSB7CisJCXByX2VycigiaW52YWxpZCBwYXlsb2FkIHNpemU6ICVkIChleHBlY3RlZCA4KVxuIiwgKGludCluX2J5dGVzKTsKKwkJcmV0dmFsID0gLUVJTlZBTDsKKwkJZ290byBleGl0OworCX0KKworCWlmIChjb3B5X2Zyb21fdXNlcihpY3R4LT51c2JfdHhfYnVmLCBidWYsIDgpKSB7CisJCXJldHZhbCA9IC1FRkFVTFQ7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlyZXR2YWwgPSBzZW5kX3BhY2tldChpY3R4KTsKKwlpZiAocmV0dmFsKSB7CisJCXByX2Vycigic2VuZCBwYWNrZXQgZmFpbGVkIVxuIik7CisJCWdvdG8gZXhpdDsKKwl9IGVsc2UgeworCQlkZXZfZGJnKGljdHgtPmRldiwgIiVzOiB3cml0ZSAlZCBieXRlcyB0byBMQ0RcbiIsCisJCQlfX2Z1bmNfXywgKGludCkgbl9ieXRlcyk7CisJfQorZXhpdDoKKwltdXRleF91bmxvY2soJmljdHgtPmxvY2spOworCXJldHVybiAoIXJldHZhbCkgPyBuX2J5dGVzIDogcmV0dmFsOworfQorCisvKioKKyAqIENhbGxiYWNrIGZ1bmN0aW9uIGZvciBVU0IgY29yZSBBUEk6IHRyYW5zbWl0IGRhdGEKKyAqLworc3RhdGljIHZvaWQgdXNiX3R4X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgaW1vbl9jb250ZXh0ICppY3R4OworCisJaWYgKCF1cmIpCisJCXJldHVybjsKKwlpY3R4ID0gKHN0cnVjdCBpbW9uX2NvbnRleHQgKil1cmItPmNvbnRleHQ7CisJaWYgKCFpY3R4KQorCQlyZXR1cm47CisKKwlpY3R4LT50eC5zdGF0dXMgPSB1cmItPnN0YXR1czsKKworCS8qIG5vdGlmeSB3YWl0ZXJzIHRoYXQgd3JpdGUgaGFzIGZpbmlzaGVkICovCisJaWN0eC0+dHguYnVzeSA9IGZhbHNlOworCXNtcF9ybWIoKTsgLyogZW5zdXJlIGxhdGVyIHJlYWRlcnMga25vdyB3ZSdyZSBub3QgYnVzeSAqLworCWNvbXBsZXRlKCZpY3R4LT50eC5maW5pc2hlZCk7Cit9CisKKy8qKgorICogcmVwb3J0IHRvdWNoc2NyZWVuIGlucHV0CisgKi8KK3N0YXRpYyB2b2lkIGltb25fdG91Y2hfZGlzcGxheV90aW1lb3V0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgaW1vbl9jb250ZXh0ICppY3R4ID0gKHN0cnVjdCBpbW9uX2NvbnRleHQgKilkYXRhOworCisJaWYgKGljdHgtPmRpc3BsYXlfdHlwZSAhPSBJTU9OX0RJU1BMQVlfVFlQRV9WR0EpCisJCXJldHVybjsKKworCWlucHV0X3JlcG9ydF9hYnMoaWN0eC0+dG91Y2gsIEFCU19YLCBpY3R4LT50b3VjaF94KTsKKwlpbnB1dF9yZXBvcnRfYWJzKGljdHgtPnRvdWNoLCBBQlNfWSwgaWN0eC0+dG91Y2hfeSk7CisJaW5wdXRfcmVwb3J0X2tleShpY3R4LT50b3VjaCwgQlROX1RPVUNILCAweDAwKTsKKwlpbnB1dF9zeW5jKGljdHgtPnRvdWNoKTsKK30KKworLyoqCisgKiBpTU9OIElSIHJlY2VpdmVycyBzdXBwb3J0IHR3byBkaWZmZXJlbnQgc2lnbmFsIHNldHMgLS0gdGhvc2UgdXNlZCBieQorICogdGhlIGlNT04gcmVtb3RlcywgYW5kIHRob3NlIHVzZWQgYnkgdGhlIFdpbmRvd3MgTUNFIHJlbW90ZXMgKHdoaWNoIGlzCisgKiByZWFsbHkganVzdCBSQy02KSwgYnV0IG9ubHkgb25lIG9yIHRoZSBvdGhlciBhdCBhIHRpbWUsIGFzIHRoZSBzaWduYWxzCisgKiBhcmUgZGVjb2RlZCBvbmJvYXJkIHRoZSByZWNlaXZlci4KKyAqLworc3RhdGljIGludCBpbW9uX2lyX2NoYW5nZV9wcm90b2NvbChzdHJ1Y3QgcmNfZGV2ICpyYywgdTY0IHJjX3R5cGUpCit7CisJaW50IHJldHZhbDsKKwlzdHJ1Y3QgaW1vbl9jb250ZXh0ICppY3R4ID0gcmMtPnByaXY7CisJc3RydWN0IGRldmljZSAqZGV2ID0gaWN0eC0+ZGV2OworCWJvb2wgcGFkX21vdXNlOworCXVuc2lnbmVkIGNoYXIgaXJfcHJvdG9fcGFja2V0W10gPSB7CisJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODYgfTsKKworCWlmIChyY190eXBlICYmICEocmNfdHlwZSAmIHJjLT5hbGxvd2VkX3Byb3RvcykpCisJCWRldl93YXJuKGRldiwgIkxvb2tzIGxpa2UgeW91J3JlIHRyeWluZyB0byB1c2UgYW4gSVIgcHJvdG9jb2wgIgorCQkJICJ0aGlzIGRldmljZSBkb2VzIG5vdCBzdXBwb3J0XG4iKTsKKworCXN3aXRjaCAocmNfdHlwZSkgeworCWNhc2UgUkNfVFlQRV9SQzY6CisJCWRldl9kYmcoZGV2LCAiQ29uZmlndXJpbmcgSVIgcmVjZWl2ZXIgZm9yIE1DRSBwcm90b2NvbFxuIik7CisJCWlyX3Byb3RvX3BhY2tldFswXSA9IDB4MDE7CisJCXBhZF9tb3VzZSA9IGZhbHNlOworCQlicmVhazsKKwljYXNlIFJDX1RZUEVfVU5LTk9XTjoKKwljYXNlIFJDX1RZUEVfT1RIRVI6CisJCWRldl9kYmcoZGV2LCAiQ29uZmlndXJpbmcgSVIgcmVjZWl2ZXIgZm9yIGlNT04gcHJvdG9jb2xcbiIpOworCQlpZiAocGFkX3N0YWJpbGl6ZSAmJiAhbm9tb3VzZSkKKwkJCXBhZF9tb3VzZSA9IHRydWU7CisJCWVsc2UgeworCQkJZGV2X2RiZyhkZXYsICJQQUQgc3RhYmlsaXplIGZ1bmN0aW9uYWxpdHkgZGlzYWJsZWRcbiIpOworCQkJcGFkX21vdXNlID0gZmFsc2U7CisJCX0KKwkJLyogaXJfcHJvdG9fcGFja2V0WzBdID0gMHgwMDsgLy8gYWxyZWFkeSB0aGUgZGVmYXVsdCAqLworCQlyY190eXBlID0gUkNfVFlQRV9PVEhFUjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X3dhcm4oZGV2LCAiVW5zdXBwb3J0ZWQgSVIgcHJvdG9jb2wgc3BlY2lmaWVkLCBvdmVycmlkaW5nICIKKwkJCSAidG8gaU1PTiBJUiBwcm90b2NvbFxuIik7CisJCWlmIChwYWRfc3RhYmlsaXplICYmICFub21vdXNlKQorCQkJcGFkX21vdXNlID0gdHJ1ZTsKKwkJZWxzZSB7CisJCQlkZXZfZGJnKGRldiwgIlBBRCBzdGFiaWxpemUgZnVuY3Rpb25hbGl0eSBkaXNhYmxlZFxuIik7CisJCQlwYWRfbW91c2UgPSBmYWxzZTsKKwkJfQorCQkvKiBpcl9wcm90b19wYWNrZXRbMF0gPSAweDAwOyAvLyBhbHJlYWR5IHRoZSBkZWZhdWx0ICovCisJCXJjX3R5cGUgPSBSQ19UWVBFX09USEVSOworCQlicmVhazsKKwl9CisKKwltZW1jcHkoaWN0eC0+dXNiX3R4X2J1ZiwgJmlyX3Byb3RvX3BhY2tldCwgc2l6ZW9mKGlyX3Byb3RvX3BhY2tldCkpOworCisJcmV0dmFsID0gc2VuZF9wYWNrZXQoaWN0eCk7CisJaWYgKHJldHZhbCkKKwkJZ290byBvdXQ7CisKKwlpY3R4LT5yY190eXBlID0gcmNfdHlwZTsKKwlpY3R4LT5wYWRfbW91c2UgPSBwYWRfbW91c2U7CisKK291dDoKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW5saW5lIGludCB0djJpbnQoY29uc3Qgc3RydWN0IHRpbWV2YWwgKmEsIGNvbnN0IHN0cnVjdCB0aW1ldmFsICpiKQoreworCWludCB1c2VjcyA9IDA7CisJaW50IHNlYyAgID0gMDsKKworCWlmIChiLT50dl91c2VjID4gYS0+dHZfdXNlYykgeworCQl1c2VjcyA9IDEwMDAwMDA7CisJCXNlYy0tOworCX0KKworCXVzZWNzICs9IGEtPnR2X3VzZWMgLSBiLT50dl91c2VjOworCisJc2VjICs9IGEtPnR2X3NlYyAtIGItPnR2X3NlYzsKKwlzZWMgKj0gMTAwMDsKKwl1c2VjcyAvPSAxMDAwOworCXNlYyArPSB1c2VjczsKKworCWlmIChzZWMgPCAwKQorCQlzZWMgPSAxMDAwOworCisJcmV0dXJuIHNlYzsKK30KKworLyoqCisgKiBUaGUgZGlyZWN0aW9uYWwgcGFkIGJlaGF2ZXMgYSBiaXQgZGlmZmVyZW50bHksIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoaXMgaXMKKyAqIG9uZSBvZiB0aGUgb2xkZXIgZmZkYyBkZXZpY2VzIG9yIGEgbmV3ZXIgZGV2aWNlLiBOZXdlciBkZXZpY2VzIGFwcGVhciB0bworICogaGF2ZSBhIGhpZ2hlciByZXNvbHV0aW9uIG1hdHJpeCBmb3IgbW9yZSBwcmVjaXNlIG1vdXNlIG1vdmVtZW50LCBidXQgaXQKKyAqIG1ha2VzIHRoaW5ncyBvdmVybHkgc2Vuc2l0aXZlIGluIGtleWJvYXJkIG1vZGUsIHNvIHdlIGRvIHNvbWUgaW50ZXJlc3RpbmcKKyAqIGNvbnRvcnRpb25zIHRvIG1ha2UgaXQgbGVzcyB0b3VjaHkuIE9sZGVyIGRldmljZXMgcnVuIHRocm91Z2ggdGhlIHNhbWUKKyAqIHJvdXRpbmUgd2l0aCBzaG9ydGVyIHRpbWVvdXQgYW5kIGEgc21hbGxlciB0aHJlc2hvbGQuCisgKi8KK3N0YXRpYyBpbnQgc3RhYmlsaXplKGludCBhLCBpbnQgYiwgdTE2IHRpbWVvdXQsIHUxNiB0aHJlc2hvbGQpCit7CisJc3RydWN0IHRpbWV2YWwgY3Q7CisJc3RhdGljIHN0cnVjdCB0aW1ldmFsIHByZXZfdGltZSA9IHswLCAwfTsKKwlzdGF0aWMgc3RydWN0IHRpbWV2YWwgaGl0X3RpbWUgID0gezAsIDB9OworCXN0YXRpYyBpbnQgeCwgeSwgcHJldl9yZXN1bHQsIGhpdHM7CisJaW50IHJlc3VsdCA9IDA7CisJaW50IG1zZWMsIG1zZWNfaGl0OworCisJZG9fZ2V0dGltZW9mZGF5KCZjdCk7CisJbXNlYyA9IHR2MmludCgmY3QsICZwcmV2X3RpbWUpOworCW1zZWNfaGl0ID0gdHYyaW50KCZjdCwgJmhpdF90aW1lKTsKKworCWlmIChtc2VjID4gMTAwKSB7CisJCXggPSAwOworCQl5ID0gMDsKKwkJaGl0cyA9IDA7CisJfQorCisJeCArPSBhOworCXkgKz0gYjsKKworCXByZXZfdGltZSA9IGN0OworCisJaWYgKGFicyh4KSA+IHRocmVzaG9sZCB8fCBhYnMoeSkgPiB0aHJlc2hvbGQpIHsKKwkJaWYgKGFicyh5KSA+IGFicyh4KSkKKwkJCXJlc3VsdCA9ICh5ID4gMCkgPyAweDdGIDogMHg4MDsKKwkJZWxzZQorCQkJcmVzdWx0ID0gKHggPiAwKSA/IDB4N0YwMCA6IDB4ODAwMDsKKworCQl4ID0gMDsKKwkJeSA9IDA7CisKKwkJaWYgKHJlc3VsdCA9PSBwcmV2X3Jlc3VsdCkgeworCQkJaGl0cysrOworCisJCQlpZiAoaGl0cyA+IDMpIHsKKwkJCQlzd2l0Y2ggKHJlc3VsdCkgeworCQkJCWNhc2UgMHg3RjoKKwkJCQkJeSA9IDE3ICogdGhyZXNob2xkIC8gMzA7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgMHg4MDoKKwkJCQkJeSAtPSAxNyAqIHRocmVzaG9sZCAvIDMwOworCQkJCQlicmVhazsKKwkJCQljYXNlIDB4N0YwMDoKKwkJCQkJeCA9IDE3ICogdGhyZXNob2xkIC8gMzA7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgMHg4MDAwOgorCQkJCQl4IC09IDE3ICogdGhyZXNob2xkIC8gMzA7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKworCQkJaWYgKGhpdHMgPT0gMiAmJiBtc2VjX2hpdCA8IHRpbWVvdXQpIHsKKwkJCQlyZXN1bHQgPSAwOworCQkJCWhpdHMgPSAxOworCQkJfQorCQl9IGVsc2UgeworCQkJcHJldl9yZXN1bHQgPSByZXN1bHQ7CisJCQloaXRzID0gMTsKKwkJCWhpdF90aW1lID0gY3Q7CisJCX0KKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdTMyIGltb25fcmVtb3RlX2tleV9sb29rdXAoc3RydWN0IGltb25fY29udGV4dCAqaWN0eCwgdTMyIHNjYW5jb2RlKQoreworCXUzMiBrZXljb2RlOworCXUzMiByZWxlYXNlOworCWJvb2wgaXNfcmVsZWFzZV9jb2RlID0gZmFsc2U7CisKKwkvKiBMb29rIGZvciB0aGUgaW5pdGlhbCBwcmVzcyBvZiBhIGJ1dHRvbiAqLworCWtleWNvZGUgPSByY19nX2tleWNvZGVfZnJvbV90YWJsZShpY3R4LT5yZGV2LCBzY2FuY29kZSk7CisJaWN0eC0+cmNfdG9nZ2xlID0gMHgwOworCWljdHgtPnJjX3NjYW5jb2RlID0gc2NhbmNvZGU7CisKKwkvKiBMb29rIGZvciB0aGUgcmVsZWFzZSBvZiBhIGJ1dHRvbiAqLworCWlmIChrZXljb2RlID09IEtFWV9SRVNFUlZFRCkgeworCQlyZWxlYXNlID0gc2NhbmNvZGUgJiB+MHg0MDAwOworCQlrZXljb2RlID0gcmNfZ19rZXljb2RlX2Zyb21fdGFibGUoaWN0eC0+cmRldiwgcmVsZWFzZSk7CisJCWlmIChrZXljb2RlICE9IEtFWV9SRVNFUlZFRCkKKwkJCWlzX3JlbGVhc2VfY29kZSA9IHRydWU7CisJfQorCisJaWN0eC0+cmVsZWFzZV9jb2RlID0gaXNfcmVsZWFzZV9jb2RlOworCisJcmV0dXJuIGtleWNvZGU7Cit9CisKK3N0YXRpYyB1MzIgaW1vbl9tY2Vfa2V5X2xvb2t1cChzdHJ1Y3QgaW1vbl9jb250ZXh0ICppY3R4LCB1MzIgc2NhbmNvZGUpCit7CisJdTMyIGtleWNvZGU7CisKKyNkZWZpbmUgTUNFX0tFWV9NQVNLIDB4NzAwMAorI2RlZmluZSBNQ0VfVE9HR0xFX0JJVCAweDgwMDAKKworCS8qCisJICogT24gc29tZSByZWNlaXZlcnMsIG1jZSBrZXlzIGRlY29kZSB0byAweDgwMDBmMDR4eCBhbmQgMHg4MDAwZjg0eHgKKwkgKiAodGhlIHRvZ2dsZSBiaXQgZmxpcHBpbmcgYmV0d2VlbiBhbHRlcm5hdGluZyBrZXkgcHJlc3NlcyksIHdoaWxlCisJICogb24gb3RoZXIgcmVjZWl2ZXJzLCB3ZSBzZWUgMHg4MDAwZjc0eHggYW5kIDB4ODAwMGZmNHh4LiBUbyBrZWVwCisJICogdGhlIHRhYmxlIHRyaW0sIHdlIGFsd2F5cyBvciBpbiB0aGUgYml0cyB0byBsb29rIHVwIDB4ODAwMGZmNHh4LAorCSAqIGJ1dCB3ZSBjYW4ndCBvciB0aGVtIGludG8gYWxsIGNvZGVzLCBhcyBzb21lIGtleXMgYXJlIGRlY29kZWQgaW4KKwkgKiBhIGRpZmZlcmVudCB3YXkgdy9vIHRoZSBzYW1lIHVzZSBvZiB0aGUgdG9nZ2xlIGJpdC4uLgorCSAqLworCWlmIChzY2FuY29kZSAmIDB4ODAwMDAwMDApCisJCXNjYW5jb2RlID0gc2NhbmNvZGUgfCBNQ0VfS0VZX01BU0sgfCBNQ0VfVE9HR0xFX0JJVDsKKworCWljdHgtPnJjX3NjYW5jb2RlID0gc2NhbmNvZGU7CisJa2V5Y29kZSA9IHJjX2dfa2V5Y29kZV9mcm9tX3RhYmxlKGljdHgtPnJkZXYsIHNjYW5jb2RlKTsKKworCS8qIG5vdCB1c2VkIGluIG1jZSBtb2RlLCBidXQgbWFrZSBzdXJlIHdlIGtub3cgaXRzIGZhbHNlICovCisJaWN0eC0+cmVsZWFzZV9jb2RlID0gZmFsc2U7CisKKwlyZXR1cm4ga2V5Y29kZTsKK30KKworc3RhdGljIHUzMiBpbW9uX3BhbmVsX2tleV9sb29rdXAodTY0IGNvZGUpCit7CisJaW50IGk7CisJdTMyIGtleWNvZGUgPSBLRVlfUkVTRVJWRUQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpbW9uX3BhbmVsX2tleV90YWJsZSk7IGkrKykgeworCQlpZiAoaW1vbl9wYW5lbF9rZXlfdGFibGVbaV0uaHdfY29kZSA9PSAoY29kZSB8IDB4ZmZlZSkpIHsKKwkJCWtleWNvZGUgPSBpbW9uX3BhbmVsX2tleV90YWJsZVtpXS5rZXljb2RlOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4ga2V5Y29kZTsKK30KKworc3RhdGljIGJvb2wgaW1vbl9tb3VzZV9ldmVudChzdHJ1Y3QgaW1vbl9jb250ZXh0ICppY3R4LAorCQkJICAgICB1bnNpZ25lZCBjaGFyICpidWYsIGludCBsZW4pCit7CisJY2hhciByZWxfeCA9IDB4MDAsIHJlbF95ID0gMHgwMDsKKwl1OCByaWdodF9zaGlmdCA9IDE7CisJYm9vbCBtb3VzZV9pbnB1dCA9IHRydWU7CisJaW50IGRpciA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpY3R4LT5rY19sb2NrLCBmbGFncyk7CisKKwkvKiBuZXdlciBpTU9OIGRldmljZSBQQUQgb3IgbW91c2UgYnV0dG9uICovCisJaWYgKGljdHgtPnByb2R1Y3QgIT0gMHhmZmRjICYmIChidWZbMF0gJiAweDAxKSAmJiBsZW4gPT0gNSkgeworCQlyZWxfeCA9IGJ1ZlsyXTsKKwkJcmVsX3kgPSBidWZbM107CisJCXJpZ2h0X3NoaWZ0ID0gMTsKKwkvKiAweGZmZGMgaU1PTiBQQUQgb3IgbW91c2UgYnV0dG9uIGlucHV0ICovCisJfSBlbHNlIGlmIChpY3R4LT5wcm9kdWN0ID09IDB4ZmZkYyAmJiAoYnVmWzBdICYgMHg0MCkgJiYKKwkJCSEoKGJ1ZlsxXSAmIDB4MDEpIHx8ICgoYnVmWzFdID4+IDIpICYgMHgwMSkpKSB7CisJCXJlbF94ID0gKGJ1ZlsxXSAmIDB4MDgpIHwgKGJ1ZlsxXSAmIDB4MTApID4+IDIgfAorCQkJKGJ1ZlsxXSAmIDB4MjApID4+IDQgfCAoYnVmWzFdICYgMHg0MCkgPj4gNjsKKwkJaWYgKGJ1ZlswXSAmIDB4MDIpCisJCQlyZWxfeCB8PSB+MHgwZjsKKwkJcmVsX3ggPSByZWxfeCArIHJlbF94IC8gMjsKKwkJcmVsX3kgPSAoYnVmWzJdICYgMHgwOCkgfCAoYnVmWzJdICYgMHgxMCkgPj4gMiB8CisJCQkoYnVmWzJdICYgMHgyMCkgPj4gNCB8IChidWZbMl0gJiAweDQwKSA+PiA2OworCQlpZiAoYnVmWzBdICYgMHgwMSkKKwkJCXJlbF95IHw9IH4weDBmOworCQlyZWxfeSA9IHJlbF95ICsgcmVsX3kgLyAyOworCQlyaWdodF9zaGlmdCA9IDI7CisJLyogc29tZSBmZmRjIGRldmljZXMgZGVjb2RlIG1vdXNlIGJ1dHRvbnMgZGlmZmVyZW50bHkuLi4gKi8KKwl9IGVsc2UgaWYgKGljdHgtPnByb2R1Y3QgPT0gMHhmZmRjICYmIChidWZbMF0gPT0gMHg2OCkpIHsKKwkJcmlnaHRfc2hpZnQgPSAyOworCS8qIGNoKy8tIGJ1dHRvbnMsIHdoaWNoIHdlIHVzZSBmb3IgYW4gZW11bGF0ZWQgc2Nyb2xsIHdoZWVsICovCisJfSBlbHNlIGlmIChpY3R4LT5rYyA9PSBLRVlfQ0hBTk5FTFVQICYmIChidWZbMl0gJiAweDQwKSAhPSAweDQwKSB7CisJCWRpciA9IDE7CisJfSBlbHNlIGlmIChpY3R4LT5rYyA9PSBLRVlfQ0hBTk5FTERPV04gJiYgKGJ1ZlsyXSAmIDB4NDApICE9IDB4NDApIHsKKwkJZGlyID0gLTE7CisJfSBlbHNlCisJCW1vdXNlX2lucHV0ID0gZmFsc2U7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpY3R4LT5rY19sb2NrLCBmbGFncyk7CisKKwlpZiAobW91c2VfaW5wdXQpIHsKKwkJZGV2X2RiZyhpY3R4LT5kZXYsICJzZW5kaW5nIG1vdXNlIGRhdGEgdmlhIGlucHV0IHN1YnN5c3RlbVxuIik7CisKKwkJaWYgKGRpcikgeworCQkJaW5wdXRfcmVwb3J0X3JlbChpY3R4LT5pZGV2LCBSRUxfV0hFRUwsIGRpcik7CisJCX0gZWxzZSBpZiAocmVsX3ggfHwgcmVsX3kpIHsKKwkJCWlucHV0X3JlcG9ydF9yZWwoaWN0eC0+aWRldiwgUkVMX1gsIHJlbF94KTsKKwkJCWlucHV0X3JlcG9ydF9yZWwoaWN0eC0+aWRldiwgUkVMX1ksIHJlbF95KTsKKwkJfSBlbHNlIHsKKwkJCWlucHV0X3JlcG9ydF9rZXkoaWN0eC0+aWRldiwgQlROX0xFRlQsIGJ1ZlsxXSAmIDB4MSk7CisJCQlpbnB1dF9yZXBvcnRfa2V5KGljdHgtPmlkZXYsIEJUTl9SSUdIVCwKKwkJCQkJIGJ1ZlsxXSA+PiByaWdodF9zaGlmdCAmIDB4MSk7CisJCX0KKwkJaW5wdXRfc3luYyhpY3R4LT5pZGV2KTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmljdHgtPmtjX2xvY2ssIGZsYWdzKTsKKwkJaWN0eC0+bGFzdF9rZXljb2RlID0gaWN0eC0+a2M7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmljdHgtPmtjX2xvY2ssIGZsYWdzKTsKKwl9CisKKwlyZXR1cm4gbW91c2VfaW5wdXQ7Cit9CisKK3N0YXRpYyB2b2lkIGltb25fdG91Y2hfZXZlbnQoc3RydWN0IGltb25fY29udGV4dCAqaWN0eCwgdW5zaWduZWQgY2hhciAqYnVmKQoreworCW1vZF90aW1lcigmaWN0eC0+dHRpbWVyLCBqaWZmaWVzICsgVE9VQ0hfVElNRU9VVCk7CisJaWN0eC0+dG91Y2hfeCA9IChidWZbMF0gPDwgNCkgfCAoYnVmWzFdID4+IDQpOworCWljdHgtPnRvdWNoX3kgPSAweGZmZiAtICgoYnVmWzJdIDw8IDQpIHwgKGJ1ZlsxXSAmIDB4ZikpOworCWlucHV0X3JlcG9ydF9hYnMoaWN0eC0+dG91Y2gsIEFCU19YLCBpY3R4LT50b3VjaF94KTsKKwlpbnB1dF9yZXBvcnRfYWJzKGljdHgtPnRvdWNoLCBBQlNfWSwgaWN0eC0+dG91Y2hfeSk7CisJaW5wdXRfcmVwb3J0X2tleShpY3R4LT50b3VjaCwgQlROX1RPVUNILCAweDAxKTsKKwlpbnB1dF9zeW5jKGljdHgtPnRvdWNoKTsKK30KKworc3RhdGljIHZvaWQgaW1vbl9wYWRfdG9fa2V5cyhzdHJ1Y3QgaW1vbl9jb250ZXh0ICppY3R4LCB1bnNpZ25lZCBjaGFyICpidWYpCit7CisJaW50IGRpciA9IDA7CisJY2hhciByZWxfeCA9IDB4MDAsIHJlbF95ID0gMHgwMDsKKwl1MTYgdGltZW91dCwgdGhyZXNob2xkOworCXUzMiBzY2FuY29kZSA9IEtFWV9SRVNFUlZFRDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyoKKwkgKiBUaGUgaW1vbiBkaXJlY3Rpb25hbCBwYWQgZnVuY3Rpb25zIG1vcmUgbGlrZSBhIHRvdWNocGFkLiBCeXRlcyAzICYgNAorCSAqIGNvbnRhaW4gYSBwb3NpdGlvbiBjb29yZGluYXRlICh4LHkpLCB3aXRoIGVhY2ggY29tcG9uZW50IHJhbmdpbmcKKwkgKiBmcm9tIC0xNCB0byAxNC4gV2Ugd2FudCB0byBkb3duLXNhbXBsZSB0aGlzIHRvIG9ubHkgNCBkaXNjcmV0ZSB2YWx1ZXMKKwkgKiBmb3IgdXAvZG93bi9sZWZ0L3JpZ2h0IGFycm93IGtleXMuIEFsc28sIHdoZW4geW91IGdldCB0b28gY2xvc2UgdG8KKwkgKiBkaWFnb25hbHMsIGl0IGhhcyBhIHRlbmRhbmN5IHRvIGp1bXAgYmFjayBhbmQgZm9ydGgsIHNvIGxldHMgdHJ5IHRvCisJICogaWdub3JlIHdoZW4gdGhleSBnZXQgdG9vIGNsb3NlLgorCSAqLworCWlmIChpY3R4LT5wcm9kdWN0ICE9IDB4ZmZkYykgeworCQkvKiBmaXJzdCwgcGFkIHRvIDggYnl0ZXMgc28gaXQgY29uZm9ybXMgd2l0aCBldmVyeXRoaW5nIGVsc2UgKi8KKwkJYnVmWzVdID0gYnVmWzZdID0gYnVmWzddID0gMDsKKwkJdGltZW91dCA9IDUwMDsJLyogaW4gbXNlY3MgKi8KKwkJLyogKDIqdGhyZXNob2xkKSB4ICgyKnRocmVzaG9sZCkgc3F1YXJlICovCisJCXRocmVzaG9sZCA9IHBhZF90aHJlc2ggPyBwYWRfdGhyZXNoIDogMjg7CisJCXJlbF94ID0gYnVmWzJdOworCQlyZWxfeSA9IGJ1ZlszXTsKKworCQlpZiAoaWN0eC0+cmNfdHlwZSA9PSBSQ19UWVBFX09USEVSICYmIHBhZF9zdGFiaWxpemUpIHsKKwkJCWlmICgoYnVmWzFdID09IDApICYmICgocmVsX3ggIT0gMCkgfHwgKHJlbF95ICE9IDApKSkgeworCQkJCWRpciA9IHN0YWJpbGl6ZSgoaW50KXJlbF94LCAoaW50KXJlbF95LAorCQkJCQkJdGltZW91dCwgdGhyZXNob2xkKTsKKwkJCQlpZiAoIWRpcikgeworCQkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmaWN0eC0+a2NfbG9jaywKKwkJCQkJCQkgIGZsYWdzKTsKKwkJCQkJaWN0eC0+a2MgPSBLRVlfVU5LTk9XTjsKKwkJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWN0eC0+a2NfbG9jaywKKwkJCQkJCQkgICAgICAgZmxhZ3MpOworCQkJCQlyZXR1cm47CisJCQkJfQorCQkJCWJ1ZlsyXSA9IGRpciAmIDB4RkY7CisJCQkJYnVmWzNdID0gKGRpciA+PiA4KSAmIDB4RkY7CisJCQkJc2NhbmNvZGUgPSBiZTMyX3RvX2NwdSgqKCh1MzIgKilidWYpKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBIYWNrIGFsZXJ0OiBpbnN0ZWFkIG9mIHVzaW5nIGtleWNvZGVzLCB3ZSBoYXZlCisJCQkgKiB0byB1c2UgaGFyZC1jb2RlZCBzY2FuY29kZXMgaGVyZS4uLgorCQkJICovCisJCQlpZiAoYWJzKHJlbF95KSA+IGFicyhyZWxfeCkpIHsKKwkJCQlidWZbMl0gPSAocmVsX3kgPiAwKSA/IDB4N0YgOiAweDgwOworCQkJCWJ1ZlszXSA9IDA7CisJCQkJaWYgKHJlbF95ID4gMCkKKwkJCQkJc2NhbmNvZGUgPSAweDAxMDA3ZjAwOyAvKiBLRVlfRE9XTiAqLworCQkJCWVsc2UKKwkJCQkJc2NhbmNvZGUgPSAweDAxMDA4MDAwOyAvKiBLRVlfVVAgKi8KKwkJCX0gZWxzZSB7CisJCQkJYnVmWzJdID0gMDsKKwkJCQlidWZbM10gPSAocmVsX3ggPiAwKSA/IDB4N0YgOiAweDgwOworCQkJCWlmIChyZWxfeCA+IDApCisJCQkJCXNjYW5jb2RlID0gMHgwMTAwMDA3ZjsgLyogS0VZX1JJR0hUICovCisJCQkJZWxzZQorCQkJCQlzY2FuY29kZSA9IDB4MDEwMDAwODA7IC8qIEtFWV9MRUZUICovCisJCQl9CisJCX0KKworCS8qCisJICogSGFuZGxlIG9uLWJvYXJkIGRlY29kZWQgcGFkIGV2ZW50cyBmb3IgZS5nLiBvbGRlciBWRkQvaU1PTi1QYWQKKwkgKiBkZXZpY2UgKDE1YzI6ZmZkYykuIFRoZSByZW1vdGUgZ2VuZXJhdGVzIHZhcmlvdXMgY29kZXMgZnJvbQorCSAqIDB4Njhubm5uQjcgdG8gMHg2QW5ubm5CNywgdGhlIGxlZnQgbW91c2UgYnV0dG9uIGdlbmVyYXRlcworCSAqIDB4Njg4MzAxYjcgYW5kIHRoZSByaWdodCBvbmUgMHg2ODg0ODFiNy4gQWxsIG90aGVyIGtleXMgZ2VuZXJhdGUKKwkgKiAweDJubm5ubm5uLiBQb3NpdGlvbiBjb29yZGluYXRlIGlzIGVuY29kZWQgaW4gYnVmWzFdIGFuZCBidWZbMl0gd2l0aAorCSAqIHJldmVyc2VkIGVuZGlhbmVzcy4gRXh0cmFjdCBkaXJlY3Rpb24gZnJvbSBidWZmZXIsIHJvdGF0ZSBlbmRpYW5lc3MsCisJICogYWRqdXN0IHNpZ24gYW5kIGZlZWQgdGhlIHZhbHVlcyBpbnRvIHN0YWJpbGl6ZSgpLiBUaGUgcmVzdWx0aW5nIGNvZGVzCisJICogd2lsbCBiZSAweDAxMDA4MDAwLCAweDAxMDA3RjAwLCB3aGljaCBtYXRjaCB0aGUgbmV3ZXIgZGV2aWNlcy4KKwkgKi8KKwl9IGVsc2UgeworCQl0aW1lb3V0ID0gMTA7CS8qIGluIG1zZWNzICovCisJCS8qICgyKnRocmVzaG9sZCkgeCAoMip0aHJlc2hvbGQpIHNxdWFyZSAqLworCQl0aHJlc2hvbGQgPSBwYWRfdGhyZXNoID8gcGFkX3RocmVzaCA6IDE1OworCisJCS8qIGJ1ZlsxXSBpcyB4ICovCisJCXJlbF94ID0gKGJ1ZlsxXSAmIDB4MDgpIHwgKGJ1ZlsxXSAmIDB4MTApID4+IDIgfAorCQkJKGJ1ZlsxXSAmIDB4MjApID4+IDQgfCAoYnVmWzFdICYgMHg0MCkgPj4gNjsKKwkJaWYgKGJ1ZlswXSAmIDB4MDIpCisJCQlyZWxfeCB8PSB+MHgxMCsxOworCQkvKiBidWZbMl0gaXMgeSAqLworCQlyZWxfeSA9IChidWZbMl0gJiAweDA4KSB8IChidWZbMl0gJiAweDEwKSA+PiAyIHwKKwkJCShidWZbMl0gJiAweDIwKSA+PiA0IHwgKGJ1ZlsyXSAmIDB4NDApID4+IDY7CisJCWlmIChidWZbMF0gJiAweDAxKQorCQkJcmVsX3kgfD0gfjB4MTArMTsKKworCQlidWZbMF0gPSAweDAxOworCQlidWZbMV0gPSBidWZbNF0gPSBidWZbNV0gPSBidWZbNl0gPSBidWZbN10gPSAwOworCisJCWlmIChpY3R4LT5yY190eXBlID09IFJDX1RZUEVfT1RIRVIgJiYgcGFkX3N0YWJpbGl6ZSkgeworCQkJZGlyID0gc3RhYmlsaXplKChpbnQpcmVsX3gsIChpbnQpcmVsX3ksCisJCQkJCXRpbWVvdXQsIHRocmVzaG9sZCk7CisJCQlpZiAoIWRpcikgeworCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZpY3R4LT5rY19sb2NrLCBmbGFncyk7CisJCQkJaWN0eC0+a2MgPSBLRVlfVU5LTk9XTjsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpY3R4LT5rY19sb2NrLCBmbGFncyk7CisJCQkJcmV0dXJuOworCQkJfQorCQkJYnVmWzJdID0gZGlyICYgMHhGRjsKKwkJCWJ1ZlszXSA9IChkaXIgPj4gOCkgJiAweEZGOworCQkJc2NhbmNvZGUgPSBiZTMyX3RvX2NwdSgqKCh1MzIgKilidWYpKTsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBIYWNrIGFsZXJ0OiBpbnN0ZWFkIG9mIHVzaW5nIGtleWNvZGVzLCB3ZSBoYXZlCisJCQkgKiB0byB1c2UgaGFyZC1jb2RlZCBzY2FuY29kZXMgaGVyZS4uLgorCQkJICovCisJCQlpZiAoYWJzKHJlbF95KSA+IGFicyhyZWxfeCkpIHsKKwkJCQlidWZbMl0gPSAocmVsX3kgPiAwKSA/IDB4N0YgOiAweDgwOworCQkJCWJ1ZlszXSA9IDA7CisJCQkJaWYgKHJlbF95ID4gMCkKKwkJCQkJc2NhbmNvZGUgPSAweDAxMDA3ZjAwOyAvKiBLRVlfRE9XTiAqLworCQkJCWVsc2UKKwkJCQkJc2NhbmNvZGUgPSAweDAxMDA4MDAwOyAvKiBLRVlfVVAgKi8KKwkJCX0gZWxzZSB7CisJCQkJYnVmWzJdID0gMDsKKwkJCQlidWZbM10gPSAocmVsX3ggPiAwKSA/IDB4N0YgOiAweDgwOworCQkJCWlmIChyZWxfeCA+IDApCisJCQkJCXNjYW5jb2RlID0gMHgwMTAwMDA3ZjsgLyogS0VZX1JJR0hUICovCisJCQkJZWxzZQorCQkJCQlzY2FuY29kZSA9IDB4MDEwMDAwODA7IC8qIEtFWV9MRUZUICovCisJCQl9CisJCX0KKwl9CisKKwlpZiAoc2NhbmNvZGUpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmljdHgtPmtjX2xvY2ssIGZsYWdzKTsKKwkJaWN0eC0+a2MgPSBpbW9uX3JlbW90ZV9rZXlfbG9va3VwKGljdHgsIHNjYW5jb2RlKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWN0eC0+a2NfbG9jaywgZmxhZ3MpOworCX0KK30KKworLyoqCisgKiBmaWd1cmUgb3V0IGlmIHRoZXNlIGlzIGEgcHJlc3Mgb3IgYSByZWxlYXNlLiBXZSBkb24ndCBhY3R1YWxseQorICogY2FyZSBhYm91dCByZXBlYXRzLCBhcyB0aG9zZSB3aWxsIGJlIGF1dG8tZ2VuZXJhdGVkIHdpdGhpbiB0aGUgSVIKKyAqIHN1YnN5c3RlbSBmb3IgcmVwZWF0aW5nIHNjYW5jb2Rlcy4KKyAqLworc3RhdGljIGludCBpbW9uX3BhcnNlX3ByZXNzX3R5cGUoc3RydWN0IGltb25fY29udGV4dCAqaWN0eCwKKwkJCQkgdW5zaWduZWQgY2hhciAqYnVmLCB1OCBrdHlwZSkKK3sKKwlpbnQgcHJlc3NfdHlwZSA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpY3R4LT5rY19sb2NrLCBmbGFncyk7CisKKwkvKiBrZXkgcmVsZWFzZSBvZiAweDAyWFhYWFhYIGtleSAqLworCWlmIChpY3R4LT5rYyA9PSBLRVlfUkVTRVJWRUQgJiYgYnVmWzBdID09IDB4MDIgJiYgYnVmWzNdID09IDB4MDApCisJCWljdHgtPmtjID0gaWN0eC0+bGFzdF9rZXljb2RlOworCisJLyogbW91c2UgYnV0dG9uIHJlbGVhc2Ugb24gKHNvbWUpIDB4ZmZkYyBkZXZpY2VzICovCisJZWxzZSBpZiAoaWN0eC0+a2MgPT0gS0VZX1JFU0VSVkVEICYmIGJ1ZlswXSA9PSAweDY4ICYmIGJ1ZlsxXSA9PSAweDgyICYmCisJCSBidWZbMl0gPT0gMHg4MSAmJiBidWZbM10gPT0gMHhiNykKKwkJaWN0eC0+a2MgPSBpY3R4LT5sYXN0X2tleWNvZGU7CisKKwkvKiBtb3VzZSBidXR0b24gcmVsZWFzZSBvbiAoc29tZSBvdGhlcikgMHhmZmRjIGRldmljZXMgKi8KKwllbHNlIGlmIChpY3R4LT5rYyA9PSBLRVlfUkVTRVJWRUQgJiYgYnVmWzBdID09IDB4MDEgJiYgYnVmWzFdID09IDB4MDAgJiYKKwkJIGJ1ZlsyXSA9PSAweDgxICYmIGJ1ZlszXSA9PSAweGI3KQorCQlpY3R4LT5rYyA9IGljdHgtPmxhc3Rfa2V5Y29kZTsKKworCS8qIG1jZS1zcGVjaWZpYyBidXR0b24gaGFuZGxpbmcsIG5vIGtleXVwIGV2ZW50cyAqLworCWVsc2UgaWYgKGt0eXBlID09IElNT05fS0VZX01DRSkgeworCQlpY3R4LT5yY190b2dnbGUgPSBidWZbMl07CisJCXByZXNzX3R5cGUgPSAxOworCisJLyogaW5jb2hlcmVudCBvciBpcnJlbGV2YW50IGRhdGEgKi8KKwl9IGVsc2UgaWYgKGljdHgtPmtjID09IEtFWV9SRVNFUlZFRCkKKwkJcHJlc3NfdHlwZSA9IC1FSU5WQUw7CisKKwkvKiBrZXkgcmVsZWFzZSBvZiAweFhYWFhYWGI3IGtleSAqLworCWVsc2UgaWYgKGljdHgtPnJlbGVhc2VfY29kZSkKKwkJcHJlc3NfdHlwZSA9IDA7CisKKwkvKiB0aGlzIGlzIGEgYnV0dG9uIHByZXNzICovCisJZWxzZQorCQlwcmVzc190eXBlID0gMTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmljdHgtPmtjX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiBwcmVzc190eXBlOworfQorCisvKioKKyAqIFByb2Nlc3MgdGhlIGluY29taW5nIHBhY2tldAorICovCitzdGF0aWMgdm9pZCBpbW9uX2luY29taW5nX3BhY2tldChzdHJ1Y3QgaW1vbl9jb250ZXh0ICppY3R4LAorCQkJCSBzdHJ1Y3QgdXJiICp1cmIsIGludCBpbnRmKQoreworCWludCBsZW4gPSB1cmItPmFjdHVhbF9sZW5ndGg7CisJdW5zaWduZWQgY2hhciAqYnVmID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJc3RydWN0IGRldmljZSAqZGV2ID0gaWN0eC0+ZGV2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIGtjOworCWJvb2wgbm9yZWxlYXNlID0gZmFsc2U7CisJaW50IGk7CisJdTY0IHNjYW5jb2RlOworCWludCBwcmVzc190eXBlID0gMDsKKwlpbnQgbXNlYzsKKwlzdHJ1Y3QgdGltZXZhbCB0OworCXN0YXRpYyBzdHJ1Y3QgdGltZXZhbCBwcmV2X3RpbWUgPSB7IDAsIDAgfTsKKwl1OCBrdHlwZTsKKworCS8qIGZpbHRlciBvdXQganVuayBkYXRhIG9uIHRoZSBvbGRlciAweGZmZGMgaW1vbiBkZXZpY2VzICovCisJaWYgKChidWZbMF0gPT0gMHhmZikgJiYgKGJ1ZlsxXSA9PSAweGZmKSAmJiAoYnVmWzJdID09IDB4ZmYpKQorCQlyZXR1cm47CisKKwkvKiBGaWd1cmUgb3V0IHdoYXQga2V5IHdhcyBwcmVzc2VkICovCisJaWYgKGxlbiA9PSA4ICYmIGJ1Zls3XSA9PSAweGVlKSB7CisJCXNjYW5jb2RlID0gYmU2NF90b19jcHUoKigodTY0ICopYnVmKSk7CisJCWt0eXBlID0gSU1PTl9LRVlfUEFORUw7CisJCWtjID0gaW1vbl9wYW5lbF9rZXlfbG9va3VwKHNjYW5jb2RlKTsKKwl9IGVsc2UgeworCQlzY2FuY29kZSA9IGJlMzJfdG9fY3B1KCooKHUzMiAqKWJ1ZikpOworCQlpZiAoaWN0eC0+cmNfdHlwZSA9PSBSQ19UWVBFX1JDNikgeworCQkJa3R5cGUgPSBJTU9OX0tFWV9JTU9OOworCQkJaWYgKGJ1ZlswXSA9PSAweDgwKQorCQkJCWt0eXBlID0gSU1PTl9LRVlfTUNFOworCQkJa2MgPSBpbW9uX21jZV9rZXlfbG9va3VwKGljdHgsIHNjYW5jb2RlKTsKKwkJfSBlbHNlIHsKKwkJCWt0eXBlID0gSU1PTl9LRVlfSU1PTjsKKwkJCWtjID0gaW1vbl9yZW1vdGVfa2V5X2xvb2t1cChpY3R4LCBzY2FuY29kZSk7CisJCX0KKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaWN0eC0+a2NfbG9jaywgZmxhZ3MpOworCS8qIGtleWJvYXJkL21vdXNlIG1vZGUgdG9nZ2xlIGJ1dHRvbiAqLworCWlmIChrYyA9PSBLRVlfS0VZQk9BUkQgJiYgIWljdHgtPnJlbGVhc2VfY29kZSkgeworCQlpY3R4LT5sYXN0X2tleWNvZGUgPSBrYzsKKwkJaWYgKCFub21vdXNlKSB7CisJCQlpY3R4LT5wYWRfbW91c2UgPSB+KGljdHgtPnBhZF9tb3VzZSkgJiAweDE7CisJCQlkZXZfZGJnKGRldiwgInRvZ2dsaW5nIHRvICVzIG1vZGVcbiIsCisJCQkJaWN0eC0+cGFkX21vdXNlID8gIm1vdXNlIiA6ICJrZXlib2FyZCIpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWN0eC0+a2NfbG9jaywgZmxhZ3MpOworCQkJcmV0dXJuOworCQl9IGVsc2UgeworCQkJaWN0eC0+cGFkX21vdXNlID0gMDsKKwkJCWRldl9kYmcoZGV2LCAibW91c2UgbW9kZSBkaXNhYmxlZCwgcGFzc2luZyBrZXkgdmFsdWVcbiIpOworCQl9CisJfQorCisJaWN0eC0+a2MgPSBrYzsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpY3R4LT5rY19sb2NrLCBmbGFncyk7CisKKwkvKiBzZW5kIHRvdWNoc2NyZWVuIGV2ZW50cyB0aHJvdWdoIGlucHV0IHN1YnN5c3RlbSBpZiB0b3VjaHBhZCBkYXRhICovCisJaWYgKGljdHgtPmRpc3BsYXlfdHlwZSA9PSBJTU9OX0RJU1BMQVlfVFlQRV9WR0EgJiYgbGVuID09IDggJiYKKwkgICAgYnVmWzddID09IDB4ODYpIHsKKwkJaW1vbl90b3VjaF9ldmVudChpY3R4LCBidWYpOworCQlyZXR1cm47CisKKwkvKiBsb29rIGZvciBtb3VzZSBldmVudHMgd2l0aCBwYWQgaW4gbW91c2UgbW9kZSAqLworCX0gZWxzZSBpZiAoaWN0eC0+cGFkX21vdXNlKSB7CisJCWlmIChpbW9uX21vdXNlX2V2ZW50KGljdHgsIGJ1ZiwgbGVuKSkKKwkJCXJldHVybjsKKwl9CisKKwkvKiBOb3cgZm9yIHNvbWUgc3BlY2lhbCBoYW5kbGluZyB0byBjb252ZXJ0IHBhZCBpbnB1dCB0byBhcnJvdyBrZXlzICovCisJaWYgKCgobGVuID09IDUpICYmIChidWZbMF0gPT0gMHgwMSkgJiYgKGJ1Zls0XSA9PSAweDAwKSkgfHwKKwkgICAgKChsZW4gPT0gOCkgJiYgKGJ1ZlswXSAmIDB4NDApICYmCisJICAgICAhKGJ1ZlsxXSAmIDB4MSB8fCBidWZbMV0gPj4gMiAmIDB4MSkpKSB7CisJCWxlbiA9IDg7CisJCWltb25fcGFkX3RvX2tleXMoaWN0eCwgYnVmKTsKKwkJbm9yZWxlYXNlID0gdHJ1ZTsKKwl9CisKKwlpZiAoZGVidWcpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiaW50ZiVkIGRlY29kZWQgcGFja2V0OiAiLCBpbnRmKTsKKwkJZm9yIChpID0gMDsgaSA8IGxlbjsgKytpKQorCQkJcHJpbnRrKCIlMDJ4ICIsIGJ1ZltpXSk7CisJCXByaW50aygiXG4iKTsKKwl9CisKKwlwcmVzc190eXBlID0gaW1vbl9wYXJzZV9wcmVzc190eXBlKGljdHgsIGJ1Ziwga3R5cGUpOworCWlmIChwcmVzc190eXBlIDwgMCkKKwkJZ290byBub3RfaW5wdXRfZGF0YTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpY3R4LT5rY19sb2NrLCBmbGFncyk7CisJaWYgKGljdHgtPmtjID09IEtFWV9VTktOT1dOKQorCQlnb3RvIHVua25vd25fa2V5OworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmljdHgtPmtjX2xvY2ssIGZsYWdzKTsKKworCWlmIChrdHlwZSAhPSBJTU9OX0tFWV9QQU5FTCkgeworCQlpZiAocHJlc3NfdHlwZSA9PSAwKQorCQkJcmNfa2V5dXAoaWN0eC0+cmRldik7CisJCWVsc2UgeworCQkJcmNfa2V5ZG93bihpY3R4LT5yZGV2LCBpY3R4LT5yY19zY2FuY29kZSwgaWN0eC0+cmNfdG9nZ2xlKTsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZpY3R4LT5rY19sb2NrLCBmbGFncyk7CisJCQlpY3R4LT5sYXN0X2tleWNvZGUgPSBpY3R4LT5rYzsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmljdHgtPmtjX2xvY2ssIGZsYWdzKTsKKwkJfQorCQlyZXR1cm47CisJfQorCisJLyogT25seSBwYW5lbCB0eXBlIGV2ZW50cyBsZWZ0IHRvIHByb2Nlc3Mgbm93ICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmljdHgtPmtjX2xvY2ssIGZsYWdzKTsKKworCS8qIEtFWV9NVVRFIHJlcGVhdHMgZnJvbSBrbm9iIG5lZWQgdG8gYmUgc3VwcHJlc3NlZCAqLworCWlmIChpY3R4LT5rYyA9PSBLRVlfTVVURSAmJiBpY3R4LT5rYyA9PSBpY3R4LT5sYXN0X2tleWNvZGUpIHsKKwkJZG9fZ2V0dGltZW9mZGF5KCZ0KTsKKwkJbXNlYyA9IHR2MmludCgmdCwgJnByZXZfdGltZSk7CisJCXByZXZfdGltZSA9IHQ7CisJCWlmIChtc2VjIDwgaWN0eC0+aWRldi0+cmVwW1JFUF9ERUxBWV0pIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmljdHgtPmtjX2xvY2ssIGZsYWdzKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKwlrYyA9IGljdHgtPmtjOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWN0eC0+a2NfbG9jaywgZmxhZ3MpOworCisJaW5wdXRfcmVwb3J0X2tleShpY3R4LT5pZGV2LCBrYywgcHJlc3NfdHlwZSk7CisJaW5wdXRfc3luYyhpY3R4LT5pZGV2KTsKKworCS8qIHBhbmVsIGtleXMgZG9uJ3QgZ2VuZXJhdGUgYSByZWxlYXNlICovCisJaW5wdXRfcmVwb3J0X2tleShpY3R4LT5pZGV2LCBrYywgMCk7CisJaW5wdXRfc3luYyhpY3R4LT5pZGV2KTsKKworCWljdHgtPmxhc3Rfa2V5Y29kZSA9IGtjOworCisJcmV0dXJuOworCit1bmtub3duX2tleToKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpY3R4LT5rY19sb2NrLCBmbGFncyk7CisJZGV2X2luZm8oZGV2LCAiJXM6IHVua25vd24ga2V5cHJlc3MsIGNvZGUgMHglbGx4XG4iLCBfX2Z1bmNfXywKKwkJIChsb25nIGxvbmcpc2NhbmNvZGUpOworCXJldHVybjsKKworbm90X2lucHV0X2RhdGE6CisJaWYgKGxlbiAhPSA4KSB7CisJCWRldl93YXJuKGRldiwgImltb24gJXM6IGludmFsaWQgaW5jb21pbmcgcGFja2V0ICIKKwkJCSAic2l6ZSAobGVuID0gJWQsIGludGYlZClcbiIsIF9fZnVuY19fLCBsZW4sIGludGYpOworCQlyZXR1cm47CisJfQorCisJLyogaU1PTiAyLjRHIGFzc29jaWF0ZSBmcmFtZSAqLworCWlmIChidWZbMF0gPT0gMHgwMCAmJgorCSAgICBidWZbMl0gPT0gMHhGRiAmJgkJCQkvKiBSRUZJRCAqLworCSAgICBidWZbM10gPT0gMHhGRiAmJgorCSAgICBidWZbNF0gPT0gMHhGRiAmJgorCSAgICBidWZbNV0gPT0gMHhGRiAmJgkJCQkvKiBpTU9OIDIuNEcgKi8KKwkgICAoKGJ1Zls2XSA9PSAweDRFICYmIGJ1Zls3XSA9PSAweERGKSB8fAkvKiBMVCAqLworCSAgICAoYnVmWzZdID09IDB4NUUgJiYgYnVmWzddID09IDB4REYpKSkgewkvKiBEVCAqLworCQlkZXZfd2FybihkZXYsICIlczogcmVtb3RlIGFzc29jaWF0ZWQgcmVmaWQ9JTAyWFxuIiwKKwkJCSBfX2Z1bmNfXywgYnVmWzFdKTsKKwkJaWN0eC0+cmZfaXNhc3NvY2lhdGluZyA9IGZhbHNlOworCX0KK30KKworLyoqCisgKiBDYWxsYmFjayBmdW5jdGlvbiBmb3IgVVNCIGNvcmUgQVBJOiByZWNlaXZlIGRhdGEKKyAqLworc3RhdGljIHZvaWQgdXNiX3J4X2NhbGxiYWNrX2ludGYwKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgaW1vbl9jb250ZXh0ICppY3R4OworCWludCBpbnRmbnVtID0gMDsKKworCWlmICghdXJiKQorCQlyZXR1cm47CisKKwlpY3R4ID0gKHN0cnVjdCBpbW9uX2NvbnRleHQgKil1cmItPmNvbnRleHQ7CisJaWYgKCFpY3R4KQorCQlyZXR1cm47CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAtRU5PRU5UOgkJLyogdXNiY29yZSB1bmxpbmsgc3VjY2Vzc2Z1bCEgKi8KKwkJcmV0dXJuOworCisJY2FzZSAtRVNIVVRET1dOOgkvKiB0cmFuc3BvcnQgZW5kcG9pbnQgd2FzIHNodXQgZG93biAqLworCQlicmVhazsKKworCWNhc2UgMDoKKwkJaW1vbl9pbmNvbWluZ19wYWNrZXQoaWN0eCwgdXJiLCBpbnRmbnVtKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlkZXZfd2FybihpY3R4LT5kZXYsICJpbW9uICVzOiBzdGF0dXMoJWQpOiBpZ25vcmVkXG4iLAorCQkJIF9fZnVuY19fLCB1cmItPnN0YXR1cyk7CisJCWJyZWFrOworCX0KKworCXVzYl9zdWJtaXRfdXJiKGljdHgtPnJ4X3VyYl9pbnRmMCwgR0ZQX0FUT01JQyk7Cit9CisKK3N0YXRpYyB2b2lkIHVzYl9yeF9jYWxsYmFja19pbnRmMShzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IGltb25fY29udGV4dCAqaWN0eDsKKwlpbnQgaW50Zm51bSA9IDE7CisKKwlpZiAoIXVyYikKKwkJcmV0dXJuOworCisJaWN0eCA9IChzdHJ1Y3QgaW1vbl9jb250ZXh0ICopdXJiLT5jb250ZXh0OworCWlmICghaWN0eCkKKwkJcmV0dXJuOworCisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCWNhc2UgLUVOT0VOVDoJCS8qIHVzYmNvcmUgdW5saW5rIHN1Y2Nlc3NmdWwhICovCisJCXJldHVybjsKKworCWNhc2UgLUVTSFVURE9XTjoJLyogdHJhbnNwb3J0IGVuZHBvaW50IHdhcyBzaHV0IGRvd24gKi8KKwkJYnJlYWs7CisKKwljYXNlIDA6CisJCWltb25faW5jb21pbmdfcGFja2V0KGljdHgsIHVyYiwgaW50Zm51bSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZGV2X3dhcm4oaWN0eC0+ZGV2LCAiaW1vbiAlczogc3RhdHVzKCVkKTogaWdub3JlZFxuIiwKKwkJCSBfX2Z1bmNfXywgdXJiLT5zdGF0dXMpOworCQlicmVhazsKKwl9CisKKwl1c2Jfc3VibWl0X3VyYihpY3R4LT5yeF91cmJfaW50ZjEsIEdGUF9BVE9NSUMpOworfQorCisvKgorICogVGhlIDB4MTVjMjoweGZmZGMgZGV2aWNlIElEIHdhcyB1c2VkIGZvciB1bXB0ZWVuIGRpZmZlcmVudCBpbW9uCisgKiBkZXZpY2VzLCBhbmQgYWxsIG9mIHRoZW0gY29uc3RhbnRseSBzcGV3IGludGVycnVwdHMsIGV2ZW4gd2hlbiB0aGVyZQorICogaXMgbm8gYWN0dWFsIGRhdGEgdG8gcmVwb3J0LiBIb3dldmVyLCBieXRlIDYgb2YgdGhpcyBidWZmZXIgbG9va3MgbGlrZQorICogaXRzIHVuaXF1ZSBhY3Jvc3MgZGV2aWNlIHZhcmlhbnRzLCBzbyB3ZSdyZSB0cnlpbmcgdG8ga2V5IG9mZiB0aGF0IHRvCisgKiBmaWd1cmUgb3V0IHdoaWNoIGRpc3BsYXkgdHlwZSAoaWYgYW55KSBhbmQgd2hhdCBJUiBwcm90b2NvbCB0aGUgZGV2aWNlCisgKiBhY3R1YWxseSBzdXBwb3J0cy4gVGhlc2UgZGV2aWNlcyBoYXZlIHRoZWlyIElSIHByb3RvY29sIGhhcmQtY29kZWQgaW50bworICogdGhlaXIgZmlybXdhcmUsIHRoZXkgY2FuJ3QgYmUgY2hhbmdlZCBvbiB0aGUgZmx5IGxpa2UgdGhlIG5ld2VyIGhhcmR3YXJlLgorICovCitzdGF0aWMgdm9pZCBpbW9uX2dldF9mZmRjX3R5cGUoc3RydWN0IGltb25fY29udGV4dCAqaWN0eCkKK3sKKwl1OCBmZmRjX2NmZ19ieXRlID0gaWN0eC0+dXNiX3J4X2J1Zls2XTsKKwl1OCBkZXRlY3RlZF9kaXNwbGF5X3R5cGUgPSBJTU9OX0RJU1BMQVlfVFlQRV9OT05FOworCXU2NCBhbGxvd2VkX3Byb3RvcyA9IFJDX1RZUEVfT1RIRVI7CisKKwlzd2l0Y2ggKGZmZGNfY2ZnX2J5dGUpIHsKKwkvKiBpTU9OIEtub2IsIG5vIGRpc3BsYXksIGlNT04gSVIgKyB2b2wga25vYiAqLworCWNhc2UgMHgyMToKKwkJZGV2X2luZm8oaWN0eC0+ZGV2LCAiMHhmZmRjIGlNT04gS25vYiwgaU1PTiBJUiIpOworCQlpY3R4LT5kaXNwbGF5X3N1cHBvcnRlZCA9IGZhbHNlOworCQlicmVhazsKKwkvKiBpTU9OIDIuNEcgTFQgKHVzYiBzdGljayksIG5vIGRpc3BsYXksIGlNT04gUkYgKi8KKwljYXNlIDB4NGU6CisJCWRldl9pbmZvKGljdHgtPmRldiwgIjB4ZmZkYyBpTU9OIDIuNEcgTFQsIGlNT04gUkYiKTsKKwkJaWN0eC0+ZGlzcGxheV9zdXBwb3J0ZWQgPSBmYWxzZTsKKwkJaWN0eC0+cmZfZGV2aWNlID0gdHJ1ZTsKKwkJYnJlYWs7CisJLyogaU1PTiBWRkQsIG5vIElSIChkb2VzIGhhdmUgdm9sIGtub2IgdGhvKSAqLworCWNhc2UgMHgzNToKKwkJZGV2X2luZm8oaWN0eC0+ZGV2LCAiMHhmZmRjIGlNT04gVkZEICsga25vYiwgbm8gSVIiKTsKKwkJZGV0ZWN0ZWRfZGlzcGxheV90eXBlID0gSU1PTl9ESVNQTEFZX1RZUEVfVkZEOworCQlicmVhazsKKwkvKiBpTU9OIFZGRCwgaU1PTiBJUiAqLworCWNhc2UgMHgyNDoKKwljYXNlIDB4ODU6CisJCWRldl9pbmZvKGljdHgtPmRldiwgIjB4ZmZkYyBpTU9OIFZGRCwgaU1PTiBJUiIpOworCQlkZXRlY3RlZF9kaXNwbGF5X3R5cGUgPSBJTU9OX0RJU1BMQVlfVFlQRV9WRkQ7CisJCWJyZWFrOworCS8qIGlNT04gVkZELCBNQ0UgSVIgKi8KKwljYXNlIDB4OWU6CisJCWRldl9pbmZvKGljdHgtPmRldiwgIjB4ZmZkYyBpTU9OIFZGRCwgTUNFIElSIik7CisJCWRldGVjdGVkX2Rpc3BsYXlfdHlwZSA9IElNT05fRElTUExBWV9UWVBFX1ZGRDsKKwkJYWxsb3dlZF9wcm90b3MgPSBSQ19UWVBFX1JDNjsKKwkJYnJlYWs7CisJLyogaU1PTiBMQ0QsIE1DRSBJUiAqLworCWNhc2UgMHg5ZjoKKwkJZGV2X2luZm8oaWN0eC0+ZGV2LCAiMHhmZmRjIGlNT04gTENELCBNQ0UgSVIiKTsKKwkJZGV0ZWN0ZWRfZGlzcGxheV90eXBlID0gSU1PTl9ESVNQTEFZX1RZUEVfTENEOworCQlhbGxvd2VkX3Byb3RvcyA9IFJDX1RZUEVfUkM2OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfaW5mbyhpY3R4LT5kZXYsICJVbmtub3duIDB4ZmZkYyBkZXZpY2UsICIKKwkJCSAiZGVmYXVsdGluZyB0byBWRkQgYW5kIGlNT04gSVIiKTsKKwkJZGV0ZWN0ZWRfZGlzcGxheV90eXBlID0gSU1PTl9ESVNQTEFZX1RZUEVfVkZEOworCQlicmVhazsKKwl9CisKKwlwcmludGsoS0VSTl9DT05UICIgKGlkIDB4JTAyeClcbiIsIGZmZGNfY2ZnX2J5dGUpOworCisJaWN0eC0+ZGlzcGxheV90eXBlID0gZGV0ZWN0ZWRfZGlzcGxheV90eXBlOworCWljdHgtPnJkZXYtPmFsbG93ZWRfcHJvdG9zID0gYWxsb3dlZF9wcm90b3M7CisJaWN0eC0+cmNfdHlwZSA9IGFsbG93ZWRfcHJvdG9zOworfQorCitzdGF0aWMgdm9pZCBpbW9uX3NldF9kaXNwbGF5X3R5cGUoc3RydWN0IGltb25fY29udGV4dCAqaWN0eCkKK3sKKwl1OCBjb25maWd1cmVkX2Rpc3BsYXlfdHlwZSA9IElNT05fRElTUExBWV9UWVBFX1ZGRDsKKworCS8qCisJICogVHJ5IHRvIGF1dG8tZGV0ZWN0IHRoZSB0eXBlIG9mIGRpc3BsYXkgaWYgdGhlIHVzZXIgaGFzbid0IHNldAorCSAqIGl0IGJ5IGhhbmQgdmlhIHRoZSBkaXNwbGF5X3R5cGUgbW9kcGFyYW0uIERlZmF1bHQgaXMgVkZELgorCSAqLworCisJaWYgKGRpc3BsYXlfdHlwZSA9PSBJTU9OX0RJU1BMQVlfVFlQRV9BVVRPKSB7CisJCXN3aXRjaCAoaWN0eC0+cHJvZHVjdCkgeworCQljYXNlIDB4ZmZkYzoKKwkJCS8qIHNldCBpbiBpbW9uX2dldF9mZmRjX3R5cGUoKSAqLworCQkJY29uZmlndXJlZF9kaXNwbGF5X3R5cGUgPSBpY3R4LT5kaXNwbGF5X3R5cGU7CisJCQlicmVhazsKKwkJY2FzZSAweDAwMzQ6CisJCWNhc2UgMHgwMDM1OgorCQkJY29uZmlndXJlZF9kaXNwbGF5X3R5cGUgPSBJTU9OX0RJU1BMQVlfVFlQRV9WR0E7CisJCQlicmVhazsKKwkJY2FzZSAweDAwMzg6CisJCWNhc2UgMHgwMDM5OgorCQljYXNlIDB4MDA0NToKKwkJCWNvbmZpZ3VyZWRfZGlzcGxheV90eXBlID0gSU1PTl9ESVNQTEFZX1RZUEVfTENEOworCQkJYnJlYWs7CisJCWNhc2UgMHgwMDNjOgorCQljYXNlIDB4MDA0MToKKwkJY2FzZSAweDAwNDI6CisJCWNhc2UgMHgwMDQzOgorCQkJY29uZmlndXJlZF9kaXNwbGF5X3R5cGUgPSBJTU9OX0RJU1BMQVlfVFlQRV9OT05FOworCQkJaWN0eC0+ZGlzcGxheV9zdXBwb3J0ZWQgPSBmYWxzZTsKKwkJCWJyZWFrOworCQljYXNlIDB4MDAzNjoKKwkJY2FzZSAweDAwNDQ6CisJCWRlZmF1bHQ6CisJCQljb25maWd1cmVkX2Rpc3BsYXlfdHlwZSA9IElNT05fRElTUExBWV9UWVBFX1ZGRDsKKwkJCWJyZWFrOworCQl9CisJfSBlbHNlIHsKKwkJY29uZmlndXJlZF9kaXNwbGF5X3R5cGUgPSBkaXNwbGF5X3R5cGU7CisJCWlmIChkaXNwbGF5X3R5cGUgPT0gSU1PTl9ESVNQTEFZX1RZUEVfTk9ORSkKKwkJCWljdHgtPmRpc3BsYXlfc3VwcG9ydGVkID0gZmFsc2U7CisJCWVsc2UKKwkJCWljdHgtPmRpc3BsYXlfc3VwcG9ydGVkID0gdHJ1ZTsKKwkJZGV2X2luZm8oaWN0eC0+ZGV2LCAiJXM6IG92ZXJyaWRpbmcgZGlzcGxheSB0eXBlIHRvICVkIHZpYSAiCisJCQkgIm1vZHBhcmFtXG4iLCBfX2Z1bmNfXywgZGlzcGxheV90eXBlKTsKKwl9CisKKwlpY3R4LT5kaXNwbGF5X3R5cGUgPSBjb25maWd1cmVkX2Rpc3BsYXlfdHlwZTsKK30KKworc3RhdGljIHN0cnVjdCByY19kZXYgKmltb25faW5pdF9yZGV2KHN0cnVjdCBpbW9uX2NvbnRleHQgKmljdHgpCit7CisJc3RydWN0IHJjX2RldiAqcmRldjsKKwlpbnQgcmV0OworCWNvbnN0IHVuc2lnbmVkIGNoYXIgZnBfcGFja2V0W10gPSB7IDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDg4IH07CisKKwlyZGV2ID0gcmNfYWxsb2NhdGVfZGV2aWNlKCk7CisJaWYgKCFyZGV2KSB7CisJCWRldl9lcnIoaWN0eC0+ZGV2LCAicmVtb3RlIGNvbnRyb2wgZGV2IGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJc25wcmludGYoaWN0eC0+bmFtZV9yZGV2LCBzaXplb2YoaWN0eC0+bmFtZV9yZGV2KSwKKwkJICJpTU9OIFJlbW90ZSAoJTA0eDolMDR4KSIsIGljdHgtPnZlbmRvciwgaWN0eC0+cHJvZHVjdCk7CisJdXNiX21ha2VfcGF0aChpY3R4LT51c2JkZXZfaW50ZjAsIGljdHgtPnBoeXNfcmRldiwKKwkJICAgICAgc2l6ZW9mKGljdHgtPnBoeXNfcmRldikpOworCXN0cmxjYXQoaWN0eC0+cGh5c19yZGV2LCAiL2lucHV0MCIsIHNpemVvZihpY3R4LT5waHlzX3JkZXYpKTsKKworCXJkZXYtPmlucHV0X25hbWUgPSBpY3R4LT5uYW1lX3JkZXY7CisJcmRldi0+aW5wdXRfcGh5cyA9IGljdHgtPnBoeXNfcmRldjsKKwl1c2JfdG9faW5wdXRfaWQoaWN0eC0+dXNiZGV2X2ludGYwLCAmcmRldi0+aW5wdXRfaWQpOworCXJkZXYtPmRldi5wYXJlbnQgPSBpY3R4LT5kZXY7CisKKwlyZGV2LT5wcml2ID0gaWN0eDsKKwlyZGV2LT5kcml2ZXJfdHlwZSA9IFJDX0RSSVZFUl9TQ0FOQ09ERTsKKwlyZGV2LT5hbGxvd2VkX3Byb3RvcyA9IFJDX1RZUEVfT1RIRVIgfCBSQ19UWVBFX1JDNjsgLyogaU1PTiBQQUQgb3IgTUNFICovCisJcmRldi0+Y2hhbmdlX3Byb3RvY29sID0gaW1vbl9pcl9jaGFuZ2VfcHJvdG9jb2w7CisJcmRldi0+ZHJpdmVyX25hbWUgPSBNT0RfTkFNRTsKKwlpZiAoaWN0eC0+cmNfdHlwZSA9PSBSQ19UWVBFX1JDNikKKwkJcmRldi0+bWFwX25hbWUgPSBSQ19NQVBfSU1PTl9NQ0U7CisJZWxzZQorCQlyZGV2LT5tYXBfbmFtZSA9IFJDX01BUF9JTU9OX1BBRDsKKworCS8qIEVuYWJsZSBmcm9udC1wYW5lbCBidXR0b25zIGFuZC9vciBrbm9icyAqLworCW1lbWNweShpY3R4LT51c2JfdHhfYnVmLCAmZnBfcGFja2V0LCBzaXplb2YoZnBfcGFja2V0KSk7CisJcmV0ID0gc2VuZF9wYWNrZXQoaWN0eCk7CisJLyogTm90IGZhdGFsLCBidXQgd2FybiBhYm91dCBpdCAqLworCWlmIChyZXQpCisJCWRldl9pbmZvKGljdHgtPmRldiwgInBhbmVsIGJ1dHRvbnMva25vYnMgc2V0dXAgZmFpbGVkXG4iKTsKKworCWlmIChpY3R4LT5wcm9kdWN0ID09IDB4ZmZkYykKKwkJaW1vbl9nZXRfZmZkY190eXBlKGljdHgpOworCisJaW1vbl9zZXRfZGlzcGxheV90eXBlKGljdHgpOworCisJcmV0ID0gcmNfcmVnaXN0ZXJfZGV2aWNlKHJkZXYpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoaWN0eC0+ZGV2LCAicmVtb3RlIGlucHV0IGRldiByZWdpc3RlciBmYWlsZWRcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXR1cm4gcmRldjsKKworb3V0OgorCXJjX2ZyZWVfZGV2aWNlKHJkZXYpOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IGlucHV0X2RldiAqaW1vbl9pbml0X2lkZXYoc3RydWN0IGltb25fY29udGV4dCAqaWN0eCkKK3sKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppZGV2OworCWludCByZXQsIGk7CisKKwlpZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CisJaWYgKCFpZGV2KSB7CisJCWRldl9lcnIoaWN0eC0+ZGV2LCAiaW5wdXQgZGV2IGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJc25wcmludGYoaWN0eC0+bmFtZV9pZGV2LCBzaXplb2YoaWN0eC0+bmFtZV9pZGV2KSwKKwkJICJpTU9OIFBhbmVsLCBLbm9iIGFuZCBNb3VzZSglMDR4OiUwNHgpIiwKKwkJIGljdHgtPnZlbmRvciwgaWN0eC0+cHJvZHVjdCk7CisJaWRldi0+bmFtZSA9IGljdHgtPm5hbWVfaWRldjsKKworCXVzYl9tYWtlX3BhdGgoaWN0eC0+dXNiZGV2X2ludGYwLCBpY3R4LT5waHlzX2lkZXYsCisJCSAgICAgIHNpemVvZihpY3R4LT5waHlzX2lkZXYpKTsKKwlzdHJsY2F0KGljdHgtPnBoeXNfaWRldiwgIi9pbnB1dDEiLCBzaXplb2YoaWN0eC0+cGh5c19pZGV2KSk7CisJaWRldi0+cGh5cyA9IGljdHgtPnBoeXNfaWRldjsKKworCWlkZXYtPmV2Yml0WzBdID0gQklUX01BU0soRVZfS0VZKSB8IEJJVF9NQVNLKEVWX1JFUCkgfCBCSVRfTUFTSyhFVl9SRUwpOworCisJaWRldi0+a2V5Yml0W0JJVF9XT1JEKEJUTl9NT1VTRSldID0KKwkJQklUX01BU0soQlROX0xFRlQpIHwgQklUX01BU0soQlROX1JJR0hUKTsKKwlpZGV2LT5yZWxiaXRbMF0gPSBCSVRfTUFTSyhSRUxfWCkgfCBCSVRfTUFTSyhSRUxfWSkgfAorCQlCSVRfTUFTSyhSRUxfV0hFRUwpOworCisJLyogcGFuZWwgYW5kL29yIGtub2IgY29kZSBzdXBwb3J0ICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaW1vbl9wYW5lbF9rZXlfdGFibGUpOyBpKyspIHsKKwkJdTMyIGtjID0gaW1vbl9wYW5lbF9rZXlfdGFibGVbaV0ua2V5Y29kZTsKKwkJX19zZXRfYml0KGtjLCBpZGV2LT5rZXliaXQpOworCX0KKworCXVzYl90b19pbnB1dF9pZChpY3R4LT51c2JkZXZfaW50ZjAsICZpZGV2LT5pZCk7CisJaWRldi0+ZGV2LnBhcmVudCA9IGljdHgtPmRldjsKKwlpbnB1dF9zZXRfZHJ2ZGF0YShpZGV2LCBpY3R4KTsKKworCXJldCA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShpZGV2KTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGljdHgtPmRldiwgImlucHV0IGRldiByZWdpc3RlciBmYWlsZWRcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXR1cm4gaWRldjsKKworb3V0OgorCWlucHV0X2ZyZWVfZGV2aWNlKGlkZXYpOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IGlucHV0X2RldiAqaW1vbl9pbml0X3RvdWNoKHN0cnVjdCBpbW9uX2NvbnRleHQgKmljdHgpCit7CisJc3RydWN0IGlucHV0X2RldiAqdG91Y2g7CisJaW50IHJldDsKKworCXRvdWNoID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CisJaWYgKCF0b3VjaCkgeworCQlkZXZfZXJyKGljdHgtPmRldiwgInRvdWNoc2NyZWVuIGlucHV0IGRldiBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CisJCWdvdG8gdG91Y2hfYWxsb2NfZmFpbGVkOworCX0KKworCXNucHJpbnRmKGljdHgtPm5hbWVfdG91Y2gsIHNpemVvZihpY3R4LT5uYW1lX3RvdWNoKSwKKwkJICJpTU9OIFVTQiBUb3VjaHNjcmVlbiAoJTA0eDolMDR4KSIsCisJCSBpY3R4LT52ZW5kb3IsIGljdHgtPnByb2R1Y3QpOworCXRvdWNoLT5uYW1lID0gaWN0eC0+bmFtZV90b3VjaDsKKworCXVzYl9tYWtlX3BhdGgoaWN0eC0+dXNiZGV2X2ludGYxLCBpY3R4LT5waHlzX3RvdWNoLAorCQkgICAgICBzaXplb2YoaWN0eC0+cGh5c190b3VjaCkpOworCXN0cmxjYXQoaWN0eC0+cGh5c190b3VjaCwgIi9pbnB1dDIiLCBzaXplb2YoaWN0eC0+cGh5c190b3VjaCkpOworCXRvdWNoLT5waHlzID0gaWN0eC0+cGh5c190b3VjaDsKKworCXRvdWNoLT5ldmJpdFswXSA9CisJCUJJVF9NQVNLKEVWX0tFWSkgfCBCSVRfTUFTSyhFVl9BQlMpOworCXRvdWNoLT5rZXliaXRbQklUX1dPUkQoQlROX1RPVUNIKV0gPQorCQlCSVRfTUFTSyhCVE5fVE9VQ0gpOworCWlucHV0X3NldF9hYnNfcGFyYW1zKHRvdWNoLCBBQlNfWCwKKwkJCSAgICAgMHgwMCwgMHhmZmYsIDAsIDApOworCWlucHV0X3NldF9hYnNfcGFyYW1zKHRvdWNoLCBBQlNfWSwKKwkJCSAgICAgMHgwMCwgMHhmZmYsIDAsIDApOworCisJaW5wdXRfc2V0X2RydmRhdGEodG91Y2gsIGljdHgpOworCisJdXNiX3RvX2lucHV0X2lkKGljdHgtPnVzYmRldl9pbnRmMSwgJnRvdWNoLT5pZCk7CisJdG91Y2gtPmRldi5wYXJlbnQgPSBpY3R4LT5kZXY7CisJcmV0ID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKHRvdWNoKTsKKwlpZiAocmV0IDwgIDApIHsKKwkJZGV2X2luZm8oaWN0eC0+ZGV2LCAidG91Y2hzY3JlZW4gaW5wdXQgZGV2IHJlZ2lzdGVyIGZhaWxlZFxuIik7CisJCWdvdG8gdG91Y2hfcmVnaXN0ZXJfZmFpbGVkOworCX0KKworCXJldHVybiB0b3VjaDsKKwordG91Y2hfcmVnaXN0ZXJfZmFpbGVkOgorCWlucHV0X2ZyZWVfZGV2aWNlKGljdHgtPnRvdWNoKTsKKwordG91Y2hfYWxsb2NfZmFpbGVkOgorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgYm9vbCBpbW9uX2ZpbmRfZW5kcG9pbnRzKHN0cnVjdCBpbW9uX2NvbnRleHQgKmljdHgsCisJCQkJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaWZhY2VfZGVzYykKK3sKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqcnhfZW5kcG9pbnQgPSBOVUxMOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqdHhfZW5kcG9pbnQgPSBOVUxMOworCWludCBpZm51bSA9IGlmYWNlX2Rlc2MtPmRlc2MuYkludGVyZmFjZU51bWJlcjsKKwlpbnQgbnVtX2VuZHB0cyA9IGlmYWNlX2Rlc2MtPmRlc2MuYk51bUVuZHBvaW50czsKKwlpbnQgaSwgZXBfZGlyLCBlcF90eXBlOworCWJvb2wgaXJfZXBfZm91bmQgPSBmYWxzZTsKKwlib29sIGRpc3BsYXlfZXBfZm91bmQgPSBmYWxzZTsKKwlib29sIHR4X2NvbnRyb2wgPSBmYWxzZTsKKworCS8qCisJICogU2NhbiB0aGUgZW5kcG9pbnQgbGlzdCBhbmQgc2V0OgorCSAqCWZpcnN0IGlucHV0IGVuZHBvaW50ID0gSVIgZW5kcG9pbnQKKwkgKglmaXJzdCBvdXRwdXQgZW5kcG9pbnQgPSBkaXNwbGF5IGVuZHBvaW50CisJICovCisJZm9yIChpID0gMDsgaSA8IG51bV9lbmRwdHMgJiYgIShpcl9lcF9mb3VuZCAmJiBkaXNwbGF5X2VwX2ZvdW5kKTsgKytpKSB7CisJCWVwID0gJmlmYWNlX2Rlc2MtPmVuZHBvaW50W2ldLmRlc2M7CisJCWVwX2RpciA9IGVwLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0VORFBPSU5UX0RJUl9NQVNLOworCQllcF90eXBlID0gZXAtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLOworCisJCWlmICghaXJfZXBfZm91bmQgJiYgZXBfZGlyID09IFVTQl9ESVJfSU4gJiYKKwkJICAgIGVwX3R5cGUgPT0gVVNCX0VORFBPSU5UX1hGRVJfSU5UKSB7CisKKwkJCXJ4X2VuZHBvaW50ID0gZXA7CisJCQlpcl9lcF9mb3VuZCA9IHRydWU7CisJCQlkZXZfZGJnKGljdHgtPmRldiwgIiVzOiBmb3VuZCBJUiBlbmRwb2ludFxuIiwgX19mdW5jX18pOworCisJCX0gZWxzZSBpZiAoIWRpc3BsYXlfZXBfZm91bmQgJiYgZXBfZGlyID09IFVTQl9ESVJfT1VUICYmCisJCQkgICBlcF90eXBlID09IFVTQl9FTkRQT0lOVF9YRkVSX0lOVCkgeworCQkJdHhfZW5kcG9pbnQgPSBlcDsKKwkJCWRpc3BsYXlfZXBfZm91bmQgPSB0cnVlOworCQkJZGV2X2RiZyhpY3R4LT5kZXYsICIlczogZm91bmQgZGlzcGxheSBlbmRwb2ludFxuIiwgX19mdW5jX18pOworCQl9CisJfQorCisJaWYgKGlmbnVtID09IDApIHsKKwkJaWN0eC0+cnhfZW5kcG9pbnRfaW50ZjAgPSByeF9lbmRwb2ludDsKKwkJLyoKKwkJICogdHggaXMgdXNlZCB0byBzZW5kIGNoYXJhY3RlcnMgdG8gbGNkL3ZmZCwgYXNzb2NpYXRlIFJGCisJCSAqIHJlbW90ZXMsIHNldCBJUiBwcm90b2NvbCwgYW5kIG1heWJlIG1vcmUuLi4KKwkJICovCisJCWljdHgtPnR4X2VuZHBvaW50ID0gdHhfZW5kcG9pbnQ7CisJfSBlbHNlIHsKKwkJaWN0eC0+cnhfZW5kcG9pbnRfaW50ZjEgPSByeF9lbmRwb2ludDsKKwl9CisKKwkvKgorCSAqIElmIHdlIGRpZG4ndCBmaW5kIGEgZGlzcGxheSBlbmRwb2ludCwgdGhpcyBpcyBwcm9iYWJseSBvbmUgb2YgdGhlCisJICogbmV3ZXIgaU1PTiBkZXZpY2VzIHRoYXQgdXNlIGNvbnRyb2wgdXJiIGluc3RlYWQgb2YgaW50ZXJydXB0CisJICovCisJaWYgKCFkaXNwbGF5X2VwX2ZvdW5kKSB7CisJCXR4X2NvbnRyb2wgPSB0cnVlOworCQlkaXNwbGF5X2VwX2ZvdW5kID0gdHJ1ZTsKKwkJZGV2X2RiZyhpY3R4LT5kZXYsICIlczogZGV2aWNlIHVzZXMgY29udHJvbCBlbmRwb2ludCwgbm90ICIKKwkJCSJpbnRlcmZhY2UgT1VUIGVuZHBvaW50XG4iLCBfX2Z1bmNfXyk7CisJfQorCisJLyoKKwkgKiBTb21lIGlNT04gcmVjZWl2ZXJzIGhhdmUgbm8gZGlzcGxheS4gVW5mb3J0dW5hdGVseSwgaXQgc2VlbXMKKwkgKiB0aGF0IFNvdW5kR3JhcGggcmVjeWNsZXMgZGV2aWNlIElEcyBiZXR3ZWVuIGRldmljZXMgYm90aCB3aXRoCisJICogYW5kIHdpdGhvdXQuLi4gOlwKKwkgKi8KKwlpZiAoaWN0eC0+ZGlzcGxheV90eXBlID09IElNT05fRElTUExBWV9UWVBFX05PTkUpIHsKKwkJZGlzcGxheV9lcF9mb3VuZCA9IGZhbHNlOworCQlkZXZfZGJnKGljdHgtPmRldiwgIiVzOiBkZXZpY2UgaGFzIG5vIGRpc3BsYXlcbiIsIF9fZnVuY19fKTsKKwl9CisKKwkvKgorCSAqIGlNT04gVG91Y2ggZGV2aWNlcyBoYXZlIGEgVkdBIHRvdWNoc2NyZWVuLCBidXQgbm8gImRpc3BsYXkiLCBhcworCSAqIHRoYXQgcmVmZXJzIHRvIGUuZy4gL2Rldi9sY2QwIChhIGNoYXJhY3RlciBkZXZpY2UgTENEIG9yIFZGRCkuCisJICovCisJaWYgKGljdHgtPmRpc3BsYXlfdHlwZSA9PSBJTU9OX0RJU1BMQVlfVFlQRV9WR0EpIHsKKwkJZGlzcGxheV9lcF9mb3VuZCA9IGZhbHNlOworCQlkZXZfZGJnKGljdHgtPmRldiwgIiVzOiBpTU9OIFRvdWNoIGRldmljZSBmb3VuZFxuIiwgX19mdW5jX18pOworCX0KKworCS8qIElucHV0IGVuZHBvaW50IGlzIG1hbmRhdG9yeSAqLworCWlmICghaXJfZXBfZm91bmQpCisJCXByX2Vycigibm8gdmFsaWQgaW5wdXQgKElSKSBlbmRwb2ludCBmb3VuZFxuIik7CisKKwlpY3R4LT50eF9jb250cm9sID0gdHhfY29udHJvbDsKKworCWlmIChkaXNwbGF5X2VwX2ZvdW5kKQorCQlpY3R4LT5kaXNwbGF5X3N1cHBvcnRlZCA9IHRydWU7CisKKwlyZXR1cm4gaXJfZXBfZm91bmQ7CisKK30KKworc3RhdGljIHN0cnVjdCBpbW9uX2NvbnRleHQgKmltb25faW5pdF9pbnRmMChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgaW1vbl9jb250ZXh0ICppY3R4OworCXN0cnVjdCB1cmIgKnJ4X3VyYjsKKwlzdHJ1Y3QgdXJiICp0eF91cmI7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmludGYtPmRldjsKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppZmFjZV9kZXNjOworCWludCByZXQgPSAtRU5PTUVNOworCisJaWN0eCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpbW9uX2NvbnRleHQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWljdHgpIHsKKwkJZGV2X2VycihkZXYsICIlczoga3phbGxvYyBmYWlsZWQgZm9yIGNvbnRleHQiLCBfX2Z1bmNfXyk7CisJCWdvdG8gZXhpdDsKKwl9CisJcnhfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJ4X3VyYikgeworCQlkZXZfZXJyKGRldiwgIiVzOiB1c2JfYWxsb2NfdXJiIGZhaWxlZCBmb3IgSVIgdXJiIiwgX19mdW5jX18pOworCQlnb3RvIHJ4X3VyYl9hbGxvY19mYWlsZWQ7CisJfQorCXR4X3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0eF91cmIpIHsKKwkJZGV2X2VycihkZXYsICIlczogdXNiX2FsbG9jX3VyYiBmYWlsZWQgZm9yIGRpc3BsYXkgdXJiIiwKKwkJCV9fZnVuY19fKTsKKwkJZ290byB0eF91cmJfYWxsb2NfZmFpbGVkOworCX0KKworCW11dGV4X2luaXQoJmljdHgtPmxvY2spOworCXNwaW5fbG9ja19pbml0KCZpY3R4LT5rY19sb2NrKTsKKworCW11dGV4X2xvY2soJmljdHgtPmxvY2spOworCisJaWN0eC0+ZGV2ID0gZGV2OworCWljdHgtPnVzYmRldl9pbnRmMCA9IHVzYl9nZXRfZGV2KGludGVyZmFjZV90b191c2JkZXYoaW50ZikpOworCWljdHgtPmRldl9wcmVzZW50X2ludGYwID0gdHJ1ZTsKKwlpY3R4LT5yeF91cmJfaW50ZjAgPSByeF91cmI7CisJaWN0eC0+dHhfdXJiID0gdHhfdXJiOworCWljdHgtPnJmX2RldmljZSA9IGZhbHNlOworCisJaWN0eC0+dmVuZG9yICA9IGxlMTZfdG9fY3B1KGljdHgtPnVzYmRldl9pbnRmMC0+ZGVzY3JpcHRvci5pZFZlbmRvcik7CisJaWN0eC0+cHJvZHVjdCA9IGxlMTZfdG9fY3B1KGljdHgtPnVzYmRldl9pbnRmMC0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpOworCisJcmV0ID0gLUVOT0RFVjsKKwlpZmFjZV9kZXNjID0gaW50Zi0+Y3VyX2FsdHNldHRpbmc7CisJaWYgKCFpbW9uX2ZpbmRfZW5kcG9pbnRzKGljdHgsIGlmYWNlX2Rlc2MpKSB7CisJCWdvdG8gZmluZF9lbmRwb2ludF9mYWlsZWQ7CisJfQorCisJaWN0eC0+aWRldiA9IGltb25faW5pdF9pZGV2KGljdHgpOworCWlmICghaWN0eC0+aWRldikgeworCQlkZXZfZXJyKGRldiwgIiVzOiBpbnB1dCBkZXZpY2Ugc2V0dXAgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCWdvdG8gaWRldl9zZXR1cF9mYWlsZWQ7CisJfQorCisJaWN0eC0+cmRldiA9IGltb25faW5pdF9yZGV2KGljdHgpOworCWlmICghaWN0eC0+cmRldikgeworCQlkZXZfZXJyKGRldiwgIiVzOiByYyBkZXZpY2Ugc2V0dXAgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCWdvdG8gcmRldl9zZXR1cF9mYWlsZWQ7CisJfQorCisJdXNiX2ZpbGxfaW50X3VyYihpY3R4LT5yeF91cmJfaW50ZjAsIGljdHgtPnVzYmRldl9pbnRmMCwKKwkJdXNiX3JjdmludHBpcGUoaWN0eC0+dXNiZGV2X2ludGYwLAorCQkJaWN0eC0+cnhfZW5kcG9pbnRfaW50ZjAtPmJFbmRwb2ludEFkZHJlc3MpLAorCQlpY3R4LT51c2JfcnhfYnVmLCBzaXplb2YoaWN0eC0+dXNiX3J4X2J1ZiksCisJCXVzYl9yeF9jYWxsYmFja19pbnRmMCwgaWN0eCwKKwkJaWN0eC0+cnhfZW5kcG9pbnRfaW50ZjAtPmJJbnRlcnZhbCk7CisKKwlyZXQgPSB1c2Jfc3VibWl0X3VyYihpY3R4LT5yeF91cmJfaW50ZjAsIEdGUF9LRVJORUwpOworCWlmIChyZXQpIHsKKwkJcHJfZXJyKCJ1c2Jfc3VibWl0X3VyYiBmYWlsZWQgZm9yIGludGYwICglZClcbiIsIHJldCk7CisJCWdvdG8gdXJiX3N1Ym1pdF9mYWlsZWQ7CisJfQorCisJcmV0dXJuIGljdHg7CisKK3VyYl9zdWJtaXRfZmFpbGVkOgorCXJjX3VucmVnaXN0ZXJfZGV2aWNlKGljdHgtPnJkZXYpOworcmRldl9zZXR1cF9mYWlsZWQ6CisJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoaWN0eC0+aWRldik7CitpZGV2X3NldHVwX2ZhaWxlZDoKK2ZpbmRfZW5kcG9pbnRfZmFpbGVkOgorCW11dGV4X3VubG9jaygmaWN0eC0+bG9jayk7CisJdXNiX2ZyZWVfdXJiKHR4X3VyYik7Cit0eF91cmJfYWxsb2NfZmFpbGVkOgorCXVzYl9mcmVlX3VyYihyeF91cmIpOworcnhfdXJiX2FsbG9jX2ZhaWxlZDoKKwlrZnJlZShpY3R4KTsKK2V4aXQ6CisJZGV2X2VycihkZXYsICJ1bmFibGUgdG8gaW5pdGlhbGl6ZSBpbnRmMCwgZXJyICVkXG4iLCByZXQpOworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaW1vbl9jb250ZXh0ICppbW9uX2luaXRfaW50ZjEoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQkJCSAgICBzdHJ1Y3QgaW1vbl9jb250ZXh0ICppY3R4KQoreworCXN0cnVjdCB1cmIgKnJ4X3VyYjsKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppZmFjZV9kZXNjOworCWludCByZXQgPSAtRU5PTUVNOworCisJcnhfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJ4X3VyYikgeworCQlwcl9lcnIoInVzYl9hbGxvY191cmIgZmFpbGVkIGZvciBJUiB1cmJcbiIpOworCQlnb3RvIHJ4X3VyYl9hbGxvY19mYWlsZWQ7CisJfQorCisJbXV0ZXhfbG9jaygmaWN0eC0+bG9jayk7CisKKwlpZiAoaWN0eC0+ZGlzcGxheV90eXBlID09IElNT05fRElTUExBWV9UWVBFX1ZHQSkgeworCQlpbml0X3RpbWVyKCZpY3R4LT50dGltZXIpOworCQlpY3R4LT50dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWljdHg7CisJCWljdHgtPnR0aW1lci5mdW5jdGlvbiA9IGltb25fdG91Y2hfZGlzcGxheV90aW1lb3V0OworCX0KKworCWljdHgtPnVzYmRldl9pbnRmMSA9IHVzYl9nZXRfZGV2KGludGVyZmFjZV90b191c2JkZXYoaW50ZikpOworCWljdHgtPmRldl9wcmVzZW50X2ludGYxID0gdHJ1ZTsKKwlpY3R4LT5yeF91cmJfaW50ZjEgPSByeF91cmI7CisKKwlyZXQgPSAtRU5PREVWOworCWlmYWNlX2Rlc2MgPSBpbnRmLT5jdXJfYWx0c2V0dGluZzsKKwlpZiAoIWltb25fZmluZF9lbmRwb2ludHMoaWN0eCwgaWZhY2VfZGVzYykpCisJCWdvdG8gZmluZF9lbmRwb2ludF9mYWlsZWQ7CisKKwlpZiAoaWN0eC0+ZGlzcGxheV90eXBlID09IElNT05fRElTUExBWV9UWVBFX1ZHQSkgeworCQlpY3R4LT50b3VjaCA9IGltb25faW5pdF90b3VjaChpY3R4KTsKKwkJaWYgKCFpY3R4LT50b3VjaCkKKwkJCWdvdG8gdG91Y2hfc2V0dXBfZmFpbGVkOworCX0gZWxzZQorCQlpY3R4LT50b3VjaCA9IE5VTEw7CisKKwl1c2JfZmlsbF9pbnRfdXJiKGljdHgtPnJ4X3VyYl9pbnRmMSwgaWN0eC0+dXNiZGV2X2ludGYxLAorCQl1c2JfcmN2aW50cGlwZShpY3R4LT51c2JkZXZfaW50ZjEsCisJCQlpY3R4LT5yeF9lbmRwb2ludF9pbnRmMS0+YkVuZHBvaW50QWRkcmVzcyksCisJCWljdHgtPnVzYl9yeF9idWYsIHNpemVvZihpY3R4LT51c2JfcnhfYnVmKSwKKwkJdXNiX3J4X2NhbGxiYWNrX2ludGYxLCBpY3R4LAorCQlpY3R4LT5yeF9lbmRwb2ludF9pbnRmMS0+YkludGVydmFsKTsKKworCXJldCA9IHVzYl9zdWJtaXRfdXJiKGljdHgtPnJ4X3VyYl9pbnRmMSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAocmV0KSB7CisJCXByX2VycigidXNiX3N1Ym1pdF91cmIgZmFpbGVkIGZvciBpbnRmMSAoJWQpXG4iLCByZXQpOworCQlnb3RvIHVyYl9zdWJtaXRfZmFpbGVkOworCX0KKworCXJldHVybiBpY3R4OworCit1cmJfc3VibWl0X2ZhaWxlZDoKKwlpZiAoaWN0eC0+dG91Y2gpCisJCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGljdHgtPnRvdWNoKTsKK3RvdWNoX3NldHVwX2ZhaWxlZDoKK2ZpbmRfZW5kcG9pbnRfZmFpbGVkOgorCW11dGV4X3VubG9jaygmaWN0eC0+bG9jayk7CisJdXNiX2ZyZWVfdXJiKHJ4X3VyYik7CityeF91cmJfYWxsb2NfZmFpbGVkOgorCWRldl9lcnIoaWN0eC0+ZGV2LCAidW5hYmxlIHRvIGluaXRpYWxpemUgaW50ZjAsIGVyciAlZFxuIiwgcmV0KTsKKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBpbW9uX2luaXRfZGlzcGxheShzdHJ1Y3QgaW1vbl9jb250ZXh0ICppY3R4LAorCQkJICAgICAgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJaW50IHJldDsKKworCWRldl9kYmcoaWN0eC0+ZGV2LCAiUmVnaXN0ZXJpbmcgaU1PTiBkaXNwbGF5IHdpdGggc3lzZnNcbiIpOworCisJLyogc2V0IHVwIHN5c2ZzIGVudHJ5IGZvciBidWlsdC1pbiBjbG9jayAqLworCXJldCA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmaW50Zi0+ZGV2LmtvYmosICZpbW9uX2Rpc3BsYXlfYXR0cl9ncm91cCk7CisJaWYgKHJldCkKKwkJZGV2X2VycihpY3R4LT5kZXYsICJDb3VsZCBub3QgY3JlYXRlIGRpc3BsYXkgc3lzZnMgIgorCQkJImVudHJpZXMoJWQpIiwgcmV0KTsKKworCWlmIChpY3R4LT5kaXNwbGF5X3R5cGUgPT0gSU1PTl9ESVNQTEFZX1RZUEVfTENEKQorCQlyZXQgPSB1c2JfcmVnaXN0ZXJfZGV2KGludGYsICZpbW9uX2xjZF9jbGFzcyk7CisJZWxzZQorCQlyZXQgPSB1c2JfcmVnaXN0ZXJfZGV2KGludGYsICZpbW9uX3ZmZF9jbGFzcyk7CisJaWYgKHJldCkKKwkJLyogTm90IGEgZmF0YWwgZXJyb3IsIHNvIGlnbm9yZSAqLworCQlkZXZfaW5mbyhpY3R4LT5kZXYsICJjb3VsZCBub3QgZ2V0IGEgbWlub3IgbnVtYmVyIGZvciAiCisJCQkgImRpc3BsYXlcbiIpOworCit9CisKKy8qKgorICogQ2FsbGJhY2sgZnVuY3Rpb24gZm9yIFVTQiBjb3JlIEFQSTogUHJvYmUKKyAqLworc3RhdGljIGludCBfX2RldmluaXQgaW1vbl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLAorCQkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2ID0gTlVMTDsKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppZmFjZV9kZXNjID0gTlVMTDsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqZmlyc3RfaWY7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmludGVyZmFjZS0+ZGV2OworCWludCBpZm51bSwgY29kZV9sZW5ndGgsIHN5c2ZzX2VycjsKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgaW1vbl9jb250ZXh0ICppY3R4ID0gTlVMTDsKKwlzdHJ1Y3QgaW1vbl9jb250ZXh0ICpmaXJzdF9pZl9jdHggPSBOVUxMOworCXUxNiB2ZW5kb3IsIHByb2R1Y3Q7CisKKwljb2RlX2xlbmd0aCA9IEJVRl9DSFVOS19TSVpFICogODsKKworCXVzYmRldiAgICAgPSB1c2JfZ2V0X2RldihpbnRlcmZhY2VfdG9fdXNiZGV2KGludGVyZmFjZSkpOworCWlmYWNlX2Rlc2MgPSBpbnRlcmZhY2UtPmN1cl9hbHRzZXR0aW5nOworCWlmbnVtICAgICAgPSBpZmFjZV9kZXNjLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXI7CisJdmVuZG9yICAgICA9IGxlMTZfdG9fY3B1KHVzYmRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcik7CisJcHJvZHVjdCAgICA9IGxlMTZfdG9fY3B1KHVzYmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpOworCisJZGV2X2RiZyhkZXYsICIlczogZm91bmQgaU1PTiBkZXZpY2UgKCUwNHg6JTA0eCwgaW50ZiVkKVxuIiwKKwkJX19mdW5jX18sIHZlbmRvciwgcHJvZHVjdCwgaWZudW0pOworCisJLyogcHJldmVudCByYWNlcyBwcm9iaW5nIGRldmljZXMgdy9tdWx0aXBsZSBpbnRlcmZhY2VzICovCisJbXV0ZXhfbG9jaygmZHJpdmVyX2xvY2spOworCisJZmlyc3RfaWYgPSB1c2JfaWZudW1fdG9faWYodXNiZGV2LCAwKTsKKwlmaXJzdF9pZl9jdHggPSB1c2JfZ2V0X2ludGZkYXRhKGZpcnN0X2lmKTsKKworCWlmIChpZm51bSA9PSAwKSB7CisJCWljdHggPSBpbW9uX2luaXRfaW50ZjAoaW50ZXJmYWNlKTsKKwkJaWYgKCFpY3R4KSB7CisJCQlwcl9lcnIoImZhaWxlZCB0byBpbml0aWFsaXplIGNvbnRleHQhXG4iKTsKKwkJCXJldCA9IC1FTk9ERVY7CisJCQlnb3RvIGZhaWw7CisJCX0KKworCX0gZWxzZSB7CisJLyogdGhpcyBpcyB0aGUgc2Vjb25kYXJ5IGludGVyZmFjZSBvbiB0aGUgZGV2aWNlICovCisJCWljdHggPSBpbW9uX2luaXRfaW50ZjEoaW50ZXJmYWNlLCBmaXJzdF9pZl9jdHgpOworCQlpZiAoIWljdHgpIHsKKwkJCXByX2VycigiZmFpbGVkIHRvIGF0dGFjaCB0byBjb250ZXh0IVxuIik7CisJCQlyZXQgPSAtRU5PREVWOworCQkJZ290byBmYWlsOworCQl9CisKKwl9CisKKwl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgaWN0eCk7CisKKwlpZiAoaWZudW0gPT0gMCkgeworCQlpZiAocHJvZHVjdCA9PSAweGZmZGMgJiYgaWN0eC0+cmZfZGV2aWNlKSB7CisJCQlzeXNmc19lcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmludGVyZmFjZS0+ZGV2LmtvYmosCisJCQkJCQkgICAgICAgJmltb25fcmZfYXR0cl9ncm91cCk7CisJCQlpZiAoc3lzZnNfZXJyKQorCQkJCXByX2VycigiQ291bGQgbm90IGNyZWF0ZSBSRiBzeXNmcyBlbnRyaWVzKCVkKVxuIiwKKwkJCQkgICAgICAgc3lzZnNfZXJyKTsKKwkJfQorCisJCWlmIChpY3R4LT5kaXNwbGF5X3N1cHBvcnRlZCkKKwkJCWltb25faW5pdF9kaXNwbGF5KGljdHgsIGludGVyZmFjZSk7CisJfQorCisJZGV2X2luZm8oZGV2LCAiaU1PTiBkZXZpY2UgKCUwNHg6JTA0eCwgaW50ZiVkKSBvbiAiCisJCSAidXNiPCVkOiVkPiBpbml0aWFsaXplZFxuIiwgdmVuZG9yLCBwcm9kdWN0LCBpZm51bSwKKwkJIHVzYmRldi0+YnVzLT5idXNudW0sIHVzYmRldi0+ZGV2bnVtKTsKKworCW11dGV4X3VubG9jaygmaWN0eC0+bG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkcml2ZXJfbG9jayk7CisKKwlyZXR1cm4gMDsKKworZmFpbDoKKwltdXRleF91bmxvY2soJmRyaXZlcl9sb2NrKTsKKwlkZXZfZXJyKGRldiwgInVuYWJsZSB0byByZWdpc3RlciwgZXJyICVkXG4iLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBDYWxsYmFjayBmdW5jdGlvbiBmb3IgVVNCIGNvcmUgQVBJOiBkaXNjb25uZWN0CisgKi8KK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBpbW9uX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3sKKwlzdHJ1Y3QgaW1vbl9jb250ZXh0ICppY3R4OworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlpbnQgaWZudW07CisKKwkvKiBwcmV2ZW50IHJhY2VzIHdpdGggbXVsdGktaW50ZXJmYWNlIGRldmljZSBwcm9iaW5nIGFuZCBkaXNwbGF5X29wZW4gKi8KKwltdXRleF9sb2NrKCZkcml2ZXJfbG9jayk7CisKKwlpY3R4ID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCWRldiA9IGljdHgtPmRldjsKKwlpZm51bSA9IGludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlcjsKKworCW11dGV4X2xvY2soJmljdHgtPmxvY2spOworCisJLyoKKwkgKiBzeXNmc19yZW1vdmVfZ3JvdXAgaXMgc2FmZSB0byBjYWxsIGV2ZW4gaWYgc3lzZnNfY3JlYXRlX2dyb3VwCisJICogaGFzbid0IGJlZW4gY2FsbGVkCisJICovCisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZpbnRlcmZhY2UtPmRldi5rb2JqLCAmaW1vbl9kaXNwbGF5X2F0dHJfZ3JvdXApOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmaW50ZXJmYWNlLT5kZXYua29iaiwgJmltb25fcmZfYXR0cl9ncm91cCk7CisKKwl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7CisKKwkvKiBBYm9ydCBvbmdvaW5nIHdyaXRlICovCisJaWYgKGljdHgtPnR4LmJ1c3kpIHsKKwkJdXNiX2tpbGxfdXJiKGljdHgtPnR4X3VyYik7CisJCWNvbXBsZXRlX2FsbCgmaWN0eC0+dHguZmluaXNoZWQpOworCX0KKworCWlmIChpZm51bSA9PSAwKSB7CisJCWljdHgtPmRldl9wcmVzZW50X2ludGYwID0gZmFsc2U7CisJCXVzYl9raWxsX3VyYihpY3R4LT5yeF91cmJfaW50ZjApOworCQlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShpY3R4LT5pZGV2KTsKKwkJcmNfdW5yZWdpc3Rlcl9kZXZpY2UoaWN0eC0+cmRldik7CisJCWlmIChpY3R4LT5kaXNwbGF5X3N1cHBvcnRlZCkgeworCQkJaWYgKGljdHgtPmRpc3BsYXlfdHlwZSA9PSBJTU9OX0RJU1BMQVlfVFlQRV9MQ0QpCisJCQkJdXNiX2RlcmVnaXN0ZXJfZGV2KGludGVyZmFjZSwgJmltb25fbGNkX2NsYXNzKTsKKwkJCWVsc2UKKwkJCQl1c2JfZGVyZWdpc3Rlcl9kZXYoaW50ZXJmYWNlLCAmaW1vbl92ZmRfY2xhc3MpOworCQl9CisJfSBlbHNlIHsKKwkJaWN0eC0+ZGV2X3ByZXNlbnRfaW50ZjEgPSBmYWxzZTsKKwkJdXNiX2tpbGxfdXJiKGljdHgtPnJ4X3VyYl9pbnRmMSk7CisJCWlmIChpY3R4LT5kaXNwbGF5X3R5cGUgPT0gSU1PTl9ESVNQTEFZX1RZUEVfVkdBKQorCQkJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoaWN0eC0+dG91Y2gpOworCX0KKworCWlmICghaWN0eC0+ZGV2X3ByZXNlbnRfaW50ZjAgJiYgIWljdHgtPmRldl9wcmVzZW50X2ludGYxKSB7CisJCWlmIChpY3R4LT5kaXNwbGF5X3R5cGUgPT0gSU1PTl9ESVNQTEFZX1RZUEVfVkdBKQorCQkJZGVsX3RpbWVyX3N5bmMoJmljdHgtPnR0aW1lcik7CisJCW11dGV4X3VubG9jaygmaWN0eC0+bG9jayk7CisJCWlmICghaWN0eC0+ZGlzcGxheV9pc29wZW4pCisJCQlmcmVlX2ltb25fY29udGV4dChpY3R4KTsKKwl9IGVsc2UKKwkJbXV0ZXhfdW5sb2NrKCZpY3R4LT5sb2NrKTsKKworCW11dGV4X3VubG9jaygmZHJpdmVyX2xvY2spOworCisJZGV2X2RiZyhkZXYsICIlczogaU1PTiBkZXZpY2UgKGludGYlZCkgZGlzY29ubmVjdGVkXG4iLAorCQlfX2Z1bmNfXywgaWZudW0pOworfQorCitzdGF0aWMgaW50IGltb25fc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCit7CisJc3RydWN0IGltb25fY29udGV4dCAqaWN0eCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisJaW50IGlmbnVtID0gaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlcjsKKworCWlmIChpZm51bSA9PSAwKQorCQl1c2Jfa2lsbF91cmIoaWN0eC0+cnhfdXJiX2ludGYwKTsKKwllbHNlCisJCXVzYl9raWxsX3VyYihpY3R4LT5yeF91cmJfaW50ZjEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaW1vbl9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJaW50IHJjID0gMDsKKwlzdHJ1Y3QgaW1vbl9jb250ZXh0ICppY3R4ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKwlpbnQgaWZudW0gPSBpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyOworCisJaWYgKGlmbnVtID09IDApIHsKKwkJdXNiX2ZpbGxfaW50X3VyYihpY3R4LT5yeF91cmJfaW50ZjAsIGljdHgtPnVzYmRldl9pbnRmMCwKKwkJCXVzYl9yY3ZpbnRwaXBlKGljdHgtPnVzYmRldl9pbnRmMCwKKwkJCQlpY3R4LT5yeF9lbmRwb2ludF9pbnRmMC0+YkVuZHBvaW50QWRkcmVzcyksCisJCQlpY3R4LT51c2JfcnhfYnVmLCBzaXplb2YoaWN0eC0+dXNiX3J4X2J1ZiksCisJCQl1c2JfcnhfY2FsbGJhY2tfaW50ZjAsIGljdHgsCisJCQlpY3R4LT5yeF9lbmRwb2ludF9pbnRmMC0+YkludGVydmFsKTsKKworCQlyYyA9IHVzYl9zdWJtaXRfdXJiKGljdHgtPnJ4X3VyYl9pbnRmMCwgR0ZQX0FUT01JQyk7CisKKwl9IGVsc2UgeworCQl1c2JfZmlsbF9pbnRfdXJiKGljdHgtPnJ4X3VyYl9pbnRmMSwgaWN0eC0+dXNiZGV2X2ludGYxLAorCQkJdXNiX3JjdmludHBpcGUoaWN0eC0+dXNiZGV2X2ludGYxLAorCQkJCWljdHgtPnJ4X2VuZHBvaW50X2ludGYxLT5iRW5kcG9pbnRBZGRyZXNzKSwKKwkJCWljdHgtPnVzYl9yeF9idWYsIHNpemVvZihpY3R4LT51c2JfcnhfYnVmKSwKKwkJCXVzYl9yeF9jYWxsYmFja19pbnRmMSwgaWN0eCwKKwkJCWljdHgtPnJ4X2VuZHBvaW50X2ludGYxLT5iSW50ZXJ2YWwpOworCisJCXJjID0gdXNiX3N1Ym1pdF91cmIoaWN0eC0+cnhfdXJiX2ludGYxLCBHRlBfQVRPTUlDKTsKKwl9CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGltb25faW5pdCh2b2lkKQoreworCWludCByYzsKKworCXJjID0gdXNiX3JlZ2lzdGVyKCZpbW9uX2RyaXZlcik7CisJaWYgKHJjKSB7CisJCXByX2VycigidXNiIHJlZ2lzdGVyIGZhaWxlZCglZClcbiIsIHJjKTsKKwkJcmMgPSAtRU5PREVWOworCX0KKworCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGltb25fZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZpbW9uX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGltb25faW5pdCk7Cittb2R1bGVfZXhpdChpbW9uX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9pci1qdmMtZGVjb2Rlci5jIGIvZHJpdmVycy9tZWRpYS9yYy9pci1qdmMtZGVjb2Rlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyNDQ0OWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3JjL2lyLWp2Yy1kZWNvZGVyLmMKQEAgLTAsMCArMSwxOTggQEAKKy8qIGlyLWp2Yy1kZWNvZGVyLmMgLSBoYW5kbGUgSlZDIElSIFB1bHNlL1NwYWNlIHByb3RvY29sCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIGJ5IERhdmlkIEjDpHJkZW1hbiA8ZGF2aWRAaGFyZGVtYW4ubnU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9iaXRyZXYuaD4KKyNpbmNsdWRlICJyYy1jb3JlLXByaXYuaCIKKworI2RlZmluZSBKVkNfTkJJVFMJCTE2CQkvKiBkZXYoOCkgKyBmdW5jKDgpICovCisjZGVmaW5lIEpWQ19VTklUCQk1MjUwMDAJCS8qIG5zICovCisjZGVmaW5lIEpWQ19IRUFERVJfUFVMU0UJKDE2ICogSlZDX1VOSVQpIC8qIGxhY2sgb2YgaGVhZGVyIC0+IHJlcGVhdCAqLworI2RlZmluZSBKVkNfSEVBREVSX1NQQUNFCSg4ICAqIEpWQ19VTklUKQorI2RlZmluZSBKVkNfQklUX1BVTFNFCQkoMSAgKiBKVkNfVU5JVCkKKyNkZWZpbmUgSlZDX0JJVF8wX1NQQUNFCQkoMSAgKiBKVkNfVU5JVCkKKyNkZWZpbmUgSlZDX0JJVF8xX1NQQUNFCQkoMyAgKiBKVkNfVU5JVCkKKyNkZWZpbmUgSlZDX1RSQUlMRVJfUFVMU0UJKDEgICogSlZDX1VOSVQpCisjZGVmaW5lCUpWQ19UUkFJTEVSX1NQQUNFCSgzNSAqIEpWQ19VTklUKQorCitlbnVtIGp2Y19zdGF0ZSB7CisJU1RBVEVfSU5BQ1RJVkUsCisJU1RBVEVfSEVBREVSX1NQQUNFLAorCVNUQVRFX0JJVF9QVUxTRSwKKwlTVEFURV9CSVRfU1BBQ0UsCisJU1RBVEVfVFJBSUxFUl9QVUxTRSwKKwlTVEFURV9UUkFJTEVSX1NQQUNFLAorCVNUQVRFX0NIRUNLX1JFUEVBVCwKK307CisKKy8qKgorICogaXJfanZjX2RlY29kZSgpIC0gRGVjb2RlIG9uZSBKVkMgcHVsc2Ugb3Igc3BhY2UKKyAqIEBkZXY6CXRoZSBzdHJ1Y3QgcmNfZGV2IGRlc2NyaXB0b3Igb2YgdGhlIGRldmljZQorICogQGR1cmF0aW9uOiAgIHRoZSBzdHJ1Y3QgaXJfcmF3X2V2ZW50IGRlc2NyaXB0b3Igb2YgdGhlIHB1bHNlL3NwYWNlCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIC1FSU5WQUwgaWYgdGhlIHB1bHNlIHZpb2xhdGVzIHRoZSBzdGF0ZSBtYWNoaW5lCisgKi8KK3N0YXRpYyBpbnQgaXJfanZjX2RlY29kZShzdHJ1Y3QgcmNfZGV2ICpkZXYsIHN0cnVjdCBpcl9yYXdfZXZlbnQgZXYpCit7CisJc3RydWN0IGp2Y19kZWMgKmRhdGEgPSAmZGV2LT5yYXctPmp2YzsKKworCWlmICghKGRldi0+cmF3LT5lbmFibGVkX3Byb3RvY29scyAmIFJDX1RZUEVfSlZDKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIWlzX3RpbWluZ19ldmVudChldikpIHsKKwkJaWYgKGV2LnJlc2V0KQorCQkJZGF0YS0+c3RhdGUgPSBTVEFURV9JTkFDVElWRTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFnZXFfbWFyZ2luKGV2LmR1cmF0aW9uLCBKVkNfVU5JVCwgSlZDX1VOSVQgLyAyKSkKKwkJZ290byBvdXQ7CisKKwlJUl9kcHJpbnRrKDIsICJKVkMgZGVjb2RlIHN0YXJ0ZWQgYXQgc3RhdGUgJWQgKCV1dXMgJXMpXG4iLAorCQkgICBkYXRhLT5zdGF0ZSwgVE9fVVMoZXYuZHVyYXRpb24pLCBUT19TVFIoZXYucHVsc2UpKTsKKworYWdhaW46CisJc3dpdGNoIChkYXRhLT5zdGF0ZSkgeworCisJY2FzZSBTVEFURV9JTkFDVElWRToKKwkJaWYgKCFldi5wdWxzZSkKKwkJCWJyZWFrOworCisJCWlmICghZXFfbWFyZ2luKGV2LmR1cmF0aW9uLCBKVkNfSEVBREVSX1BVTFNFLCBKVkNfVU5JVCAvIDIpKQorCQkJYnJlYWs7CisKKwkJZGF0YS0+Y291bnQgPSAwOworCQlkYXRhLT5maXJzdCA9IHRydWU7CisJCWRhdGEtPnRvZ2dsZSA9ICFkYXRhLT50b2dnbGU7CisJCWRhdGEtPnN0YXRlID0gU1RBVEVfSEVBREVSX1NQQUNFOworCQlyZXR1cm4gMDsKKworCWNhc2UgU1RBVEVfSEVBREVSX1NQQUNFOgorCQlpZiAoZXYucHVsc2UpCisJCQlicmVhazsKKworCQlpZiAoIWVxX21hcmdpbihldi5kdXJhdGlvbiwgSlZDX0hFQURFUl9TUEFDRSwgSlZDX1VOSVQgLyAyKSkKKwkJCWJyZWFrOworCisJCWRhdGEtPnN0YXRlID0gU1RBVEVfQklUX1BVTFNFOworCQlyZXR1cm4gMDsKKworCWNhc2UgU1RBVEVfQklUX1BVTFNFOgorCQlpZiAoIWV2LnB1bHNlKQorCQkJYnJlYWs7CisKKwkJaWYgKCFlcV9tYXJnaW4oZXYuZHVyYXRpb24sIEpWQ19CSVRfUFVMU0UsIEpWQ19VTklUIC8gMikpCisJCQlicmVhazsKKworCQlkYXRhLT5zdGF0ZSA9IFNUQVRFX0JJVF9TUEFDRTsKKwkJcmV0dXJuIDA7CisKKwljYXNlIFNUQVRFX0JJVF9TUEFDRToKKwkJaWYgKGV2LnB1bHNlKQorCQkJYnJlYWs7CisKKwkJZGF0YS0+Yml0cyA8PD0gMTsKKwkJaWYgKGVxX21hcmdpbihldi5kdXJhdGlvbiwgSlZDX0JJVF8xX1NQQUNFLCBKVkNfVU5JVCAvIDIpKSB7CisJCQlkYXRhLT5iaXRzIHw9IDE7CisJCQlkZWNyZWFzZV9kdXJhdGlvbigmZXYsIEpWQ19CSVRfMV9TUEFDRSk7CisJCX0gZWxzZSBpZiAoZXFfbWFyZ2luKGV2LmR1cmF0aW9uLCBKVkNfQklUXzBfU1BBQ0UsIEpWQ19VTklUIC8gMikpCisJCQlkZWNyZWFzZV9kdXJhdGlvbigmZXYsIEpWQ19CSVRfMF9TUEFDRSk7CisJCWVsc2UKKwkJCWJyZWFrOworCQlkYXRhLT5jb3VudCsrOworCisJCWlmIChkYXRhLT5jb3VudCA9PSBKVkNfTkJJVFMpCisJCQlkYXRhLT5zdGF0ZSA9IFNUQVRFX1RSQUlMRVJfUFVMU0U7CisJCWVsc2UKKwkJCWRhdGEtPnN0YXRlID0gU1RBVEVfQklUX1BVTFNFOworCQlyZXR1cm4gMDsKKworCWNhc2UgU1RBVEVfVFJBSUxFUl9QVUxTRToKKwkJaWYgKCFldi5wdWxzZSkKKwkJCWJyZWFrOworCisJCWlmICghZXFfbWFyZ2luKGV2LmR1cmF0aW9uLCBKVkNfVFJBSUxFUl9QVUxTRSwgSlZDX1VOSVQgLyAyKSkKKwkJCWJyZWFrOworCisJCWRhdGEtPnN0YXRlID0gU1RBVEVfVFJBSUxFUl9TUEFDRTsKKwkJcmV0dXJuIDA7CisKKwljYXNlIFNUQVRFX1RSQUlMRVJfU1BBQ0U6CisJCWlmIChldi5wdWxzZSkKKwkJCWJyZWFrOworCisJCWlmICghZ2VxX21hcmdpbihldi5kdXJhdGlvbiwgSlZDX1RSQUlMRVJfU1BBQ0UsIEpWQ19VTklUIC8gMikpCisJCQlicmVhazsKKworCQlpZiAoZGF0YS0+Zmlyc3QpIHsKKwkJCXUzMiBzY2FuY29kZTsKKwkJCXNjYW5jb2RlID0gKGJpdHJldjgoKGRhdGEtPmJpdHMgPj4gOCkgJiAweGZmKSA8PCA4KSB8CisJCQkJICAgKGJpdHJldjgoKGRhdGEtPmJpdHMgPj4gMCkgJiAweGZmKSA8PCAwKTsKKwkJCUlSX2RwcmludGsoMSwgIkpWQyBzY2FuY29kZSAweCUwNHhcbiIsIHNjYW5jb2RlKTsKKwkJCXJjX2tleWRvd24oZGV2LCBzY2FuY29kZSwgZGF0YS0+dG9nZ2xlKTsKKwkJCWRhdGEtPmZpcnN0ID0gZmFsc2U7CisJCQlkYXRhLT5vbGRfYml0cyA9IGRhdGEtPmJpdHM7CisJCX0gZWxzZSBpZiAoZGF0YS0+Yml0cyA9PSBkYXRhLT5vbGRfYml0cykgeworCQkJSVJfZHByaW50aygxLCAiSlZDIHJlcGVhdFxuIik7CisJCQlyY19yZXBlYXQoZGV2KTsKKwkJfSBlbHNlIHsKKwkJCUlSX2RwcmludGsoMSwgIkpWQyBpbnZhbGlkIHJlcGVhdCBtc2dcbiIpOworCQkJYnJlYWs7CisJCX0KKworCQlkYXRhLT5jb3VudCA9IDA7CisJCWRhdGEtPnN0YXRlID0gU1RBVEVfQ0hFQ0tfUkVQRUFUOworCQlyZXR1cm4gMDsKKworCWNhc2UgU1RBVEVfQ0hFQ0tfUkVQRUFUOgorCQlpZiAoIWV2LnB1bHNlKQorCQkJYnJlYWs7CisKKwkJaWYgKGVxX21hcmdpbihldi5kdXJhdGlvbiwgSlZDX0hFQURFUl9QVUxTRSwgSlZDX1VOSVQgLyAyKSkKKwkJCWRhdGEtPnN0YXRlID0gU1RBVEVfSU5BQ1RJVkU7CisgIGVsc2UKKwkJCWRhdGEtPnN0YXRlID0gU1RBVEVfQklUX1BVTFNFOworCQlnb3RvIGFnYWluOworCX0KKworb3V0OgorCUlSX2RwcmludGsoMSwgIkpWQyBkZWNvZGUgZmFpbGVkIGF0IHN0YXRlICVkICgldXVzICVzKVxuIiwKKwkJICAgZGF0YS0+c3RhdGUsIFRPX1VTKGV2LmR1cmF0aW9uKSwgVE9fU1RSKGV2LnB1bHNlKSk7CisJZGF0YS0+c3RhdGUgPSBTVEFURV9JTkFDVElWRTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIHN0cnVjdCBpcl9yYXdfaGFuZGxlciBqdmNfaGFuZGxlciA9IHsKKwkucHJvdG9jb2xzCT0gUkNfVFlQRV9KVkMsCisJLmRlY29kZQkJPSBpcl9qdmNfZGVjb2RlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgaXJfanZjX2RlY29kZV9pbml0KHZvaWQpCit7CisJaXJfcmF3X2hhbmRsZXJfcmVnaXN0ZXIoJmp2Y19oYW5kbGVyKTsKKworCXByaW50ayhLRVJOX0lORk8gIklSIEpWQyBwcm90b2NvbCBoYW5kbGVyIGluaXRpYWxpemVkXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGlyX2p2Y19kZWNvZGVfZXhpdCh2b2lkKQoreworCWlyX3Jhd19oYW5kbGVyX3VucmVnaXN0ZXIoJmp2Y19oYW5kbGVyKTsKK30KKworbW9kdWxlX2luaXQoaXJfanZjX2RlY29kZV9pbml0KTsKK21vZHVsZV9leGl0KGlyX2p2Y19kZWNvZGVfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkRhdmlkIEjDpHJkZW1hbiA8ZGF2aWRAaGFyZGVtYW4ubnU+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkpWQyBJUiBwcm90b2NvbCBkZWNvZGVyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JjL2lyLWxpcmMtY29kZWMuYyBiL2RyaXZlcnMvbWVkaWEvcmMvaXItbGlyYy1jb2RlYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwMTFjNWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3JjL2lyLWxpcmMtY29kZWMuYwpAQCAtMCwwICsxLDQwMiBAQAorLyogaXItbGlyYy1jb2RlYy5jIC0gaXItY29yZSB0byBjbGFzc2ljIGxpcmMgaW50ZXJmYWNlIGJyaWRnZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBieSBKYXJvZCBXaWxzb24gPGphcm9kQHJlZGhhdC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxtZWRpYS9saXJjLmg+CisjaW5jbHVkZSA8bWVkaWEvbGlyY19kZXYuaD4KKyNpbmNsdWRlIDxtZWRpYS9yYy1jb3JlLmg+CisjaW5jbHVkZSAicmMtY29yZS1wcml2LmgiCisKKyNkZWZpbmUgTElSQ0JVRl9TSVpFIDI1NgorCisvKioKKyAqIGlyX2xpcmNfZGVjb2RlKCkgLSBTZW5kIHJhdyBJUiBkYXRhIHRvIGxpcmNfZGV2IHRvIGJlIHJlbGF5ZWQgdG8gdGhlCisgKgkJICAgICAgbGlyY2QgdXNlcnNwYWNlIGRhZW1vbiBmb3IgZGVjb2RpbmcuCisgKiBAaW5wdXRfZGV2Ogl0aGUgc3RydWN0IHJjX2RldiBkZXNjcmlwdG9yIG9mIHRoZSBkZXZpY2UKKyAqIEBkdXJhdGlvbjoJdGhlIHN0cnVjdCBpcl9yYXdfZXZlbnQgZGVzY3JpcHRvciBvZiB0aGUgcHVsc2Uvc3BhY2UKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgLUVJTlZBTCBpZiB0aGUgbGlyYyBpbnRlcmZhY2VzIGFyZW4ndCB3aXJlZCB1cC4KKyAqLworc3RhdGljIGludCBpcl9saXJjX2RlY29kZShzdHJ1Y3QgcmNfZGV2ICpkZXYsIHN0cnVjdCBpcl9yYXdfZXZlbnQgZXYpCit7CisJc3RydWN0IGxpcmNfY29kZWMgKmxpcmMgPSAmZGV2LT5yYXctPmxpcmM7CisJaW50IHNhbXBsZTsKKworCWlmICghKGRldi0+cmF3LT5lbmFibGVkX3Byb3RvY29scyAmIFJDX1RZUEVfTElSQykpCisJCXJldHVybiAwOworCisJaWYgKCFkZXYtPnJhdy0+bGlyYy5kcnYgfHwgIWRldi0+cmF3LT5saXJjLmRydi0+cmJ1ZikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBQYWNrZXQgc3RhcnQgKi8KKwlpZiAoZXYucmVzZXQpCisJCXJldHVybiAwOworCisJLyogQ2FycmllciByZXBvcnRzICovCisJaWYgKGV2LmNhcnJpZXJfcmVwb3J0KSB7CisJCXNhbXBsZSA9IExJUkNfRlJFUVVFTkNZKGV2LmNhcnJpZXIpOworCisJLyogUGFja2V0IGVuZCAqLworCX0gZWxzZSBpZiAoZXYudGltZW91dCkgeworCisJCWlmIChsaXJjLT5nYXApCisJCQlyZXR1cm4gMDsKKworCQlsaXJjLT5nYXBfc3RhcnQgPSBrdGltZV9nZXQoKTsKKwkJbGlyYy0+Z2FwID0gdHJ1ZTsKKwkJbGlyYy0+Z2FwX2R1cmF0aW9uID0gZXYuZHVyYXRpb247CisKKwkJaWYgKCFsaXJjLT5zZW5kX3RpbWVvdXRfcmVwb3J0cykKKwkJCXJldHVybiAwOworCisJCXNhbXBsZSA9IExJUkNfVElNRU9VVChldi5kdXJhdGlvbiAvIDEwMDApOworCisJLyogTm9ybWFsIHNhbXBsZSAqLworCX0gZWxzZSB7CisKKwkJaWYgKGxpcmMtPmdhcCkgeworCQkJaW50IGdhcF9zYW1wbGU7CisKKwkJCWxpcmMtPmdhcF9kdXJhdGlvbiArPSBrdGltZV90b19ucyhrdGltZV9zdWIoa3RpbWVfZ2V0KCksCisJCQkJbGlyYy0+Z2FwX3N0YXJ0KSk7CisKKwkJCS8qIENvbnZlcnQgdG8gbXMgYW5kIGNhcCBieSBMSVJDX1ZBTFVFX01BU0sgKi8KKwkJCWRvX2RpdihsaXJjLT5nYXBfZHVyYXRpb24sIDEwMDApOworCQkJbGlyYy0+Z2FwX2R1cmF0aW9uID0gbWluKGxpcmMtPmdhcF9kdXJhdGlvbiwKKwkJCQkJCQkodTY0KUxJUkNfVkFMVUVfTUFTSyk7CisKKwkJCWdhcF9zYW1wbGUgPSBMSVJDX1NQQUNFKGxpcmMtPmdhcF9kdXJhdGlvbik7CisJCQlsaXJjX2J1ZmZlcl93cml0ZShkZXYtPnJhdy0+bGlyYy5kcnYtPnJidWYsCisJCQkJCQkodW5zaWduZWQgY2hhciAqKSAmZ2FwX3NhbXBsZSk7CisJCQlsaXJjLT5nYXAgPSBmYWxzZTsKKwkJfQorCisJCXNhbXBsZSA9IGV2LnB1bHNlID8gTElSQ19QVUxTRShldi5kdXJhdGlvbiAvIDEwMDApIDoKKwkJCQkJTElSQ19TUEFDRShldi5kdXJhdGlvbiAvIDEwMDApOworCX0KKworCWxpcmNfYnVmZmVyX3dyaXRlKGRldi0+cmF3LT5saXJjLmRydi0+cmJ1ZiwKKwkJCSAgKHVuc2lnbmVkIGNoYXIgKikgJnNhbXBsZSk7CisJd2FrZV91cCgmZGV2LT5yYXctPmxpcmMuZHJ2LT5yYnVmLT53YWl0X3BvbGwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGlyX2xpcmNfdHJhbnNtaXRfaXIoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgKmJ1ZiwKKwkJCQkgICBzaXplX3QgbiwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBsaXJjX2NvZGVjICpsaXJjOworCXN0cnVjdCByY19kZXYgKmRldjsKKwlpbnQgKnR4YnVmOyAvKiBidWZmZXIgd2l0aCB2YWx1ZXMgdG8gdHJhbnNtaXQgKi8KKwlpbnQgcmV0ID0gMDsKKwlzaXplX3QgY291bnQ7CisKKwlsaXJjID0gbGlyY19nZXRfcGRhdGEoZmlsZSk7CisJaWYgKCFsaXJjKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmIChuICUgc2l6ZW9mKGludCkpCisJCXJldHVybiAtRUlOVkFMOworCisJY291bnQgPSBuIC8gc2l6ZW9mKGludCk7CisJaWYgKGNvdW50ID4gTElSQ0JVRl9TSVpFIHx8IGNvdW50ICUgMiA9PSAwIHx8IG4gJSBzaXplb2YoaW50KSAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXR4YnVmID0gbWVtZHVwX3VzZXIoYnVmLCBuKTsKKwlpZiAoSVNfRVJSKHR4YnVmKSkKKwkJcmV0dXJuIFBUUl9FUlIodHhidWYpOworCisJZGV2ID0gbGlyYy0+ZGV2OworCWlmICghZGV2KSB7CisJCXJldCA9IC1FRkFVTFQ7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChkZXYtPnR4X2lyKQorCQlyZXQgPSBkZXYtPnR4X2lyKGRldiwgdHhidWYsICh1MzIpbik7CisKK291dDoKKwlrZnJlZSh0eGJ1Zik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGxvbmcgaXJfbGlyY19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZXAsIHVuc2lnbmVkIGludCBjbWQsCisJCQl1bnNpZ25lZCBsb25nIF9fdXNlciBhcmcpCit7CisJc3RydWN0IGxpcmNfY29kZWMgKmxpcmM7CisJc3RydWN0IHJjX2RldiAqZGV2OworCWludCByZXQgPSAwOworCV9fdTMyIHZhbCA9IDAsIHRtcDsKKworCWxpcmMgPSBsaXJjX2dldF9wZGF0YShmaWxlcCk7CisJaWYgKCFsaXJjKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWRldiA9IGxpcmMtPmRldjsKKwlpZiAoIWRldikKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlpZiAoX0lPQ19ESVIoY21kKSAmIF9JT0NfV1JJVEUpIHsKKwkJcmV0ID0gZ2V0X3VzZXIodmFsLCAoX191MzIgKilhcmcpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlzd2l0Y2ggKGNtZCkgeworCisJLyogbGVnYWN5IHN1cHBvcnQgKi8KKwljYXNlIExJUkNfR0VUX1NFTkRfTU9ERToKKwkJdmFsID0gTElSQ19DQU5fU0VORF9QVUxTRSAmIExJUkNfQ0FOX1NFTkRfTUFTSzsKKwkJYnJlYWs7CisKKwljYXNlIExJUkNfU0VUX1NFTkRfTU9ERToKKwkJaWYgKHZhbCAhPSAoTElSQ19NT0RFX1BVTFNFICYgTElSQ19DQU5fU0VORF9NQVNLKSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gMDsKKworCS8qIFRYIHNldHRpbmdzICovCisJY2FzZSBMSVJDX1NFVF9UUkFOU01JVFRFUl9NQVNLOgorCQlpZiAoIWRldi0+c190eF9tYXNrKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJcmV0dXJuIGRldi0+c190eF9tYXNrKGRldiwgdmFsKTsKKworCWNhc2UgTElSQ19TRVRfU0VORF9DQVJSSUVSOgorCQlpZiAoIWRldi0+c190eF9jYXJyaWVyKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJcmV0dXJuIGRldi0+c190eF9jYXJyaWVyKGRldiwgdmFsKTsKKworCWNhc2UgTElSQ19TRVRfU0VORF9EVVRZX0NZQ0xFOgorCQlpZiAoIWRldi0+c190eF9kdXR5X2N5Y2xlKQorCQkJcmV0dXJuIC1FTk9TWVM7CisKKwkJaWYgKHZhbCA8PSAwIHx8IHZhbCA+PSAxMDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlyZXR1cm4gZGV2LT5zX3R4X2R1dHlfY3ljbGUoZGV2LCB2YWwpOworCisJLyogUlggc2V0dGluZ3MgKi8KKwljYXNlIExJUkNfU0VUX1JFQ19DQVJSSUVSOgorCQlpZiAoIWRldi0+c19yeF9jYXJyaWVyX3JhbmdlKQorCQkJcmV0dXJuIC1FTk9TWVM7CisKKwkJaWYgKHZhbCA8PSAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJcmV0dXJuIGRldi0+c19yeF9jYXJyaWVyX3JhbmdlKGRldiwKKwkJCQkJICAgICAgIGRldi0+cmF3LT5saXJjLmNhcnJpZXJfbG93LAorCQkJCQkgICAgICAgdmFsKTsKKworCWNhc2UgTElSQ19TRVRfUkVDX0NBUlJJRVJfUkFOR0U6CisJCWlmICh2YWwgPD0gMCkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWRldi0+cmF3LT5saXJjLmNhcnJpZXJfbG93ID0gdmFsOworCQlyZXR1cm4gMDsKKworCWNhc2UgTElSQ19HRVRfUkVDX1JFU09MVVRJT046CisJCXZhbCA9IGRldi0+cnhfcmVzb2x1dGlvbjsKKwkJYnJlYWs7CisKKwljYXNlIExJUkNfU0VUX1dJREVCQU5EX1JFQ0VJVkVSOgorCQlpZiAoIWRldi0+c19sZWFybmluZ19tb2RlKQorCQkJcmV0dXJuIC1FTk9TWVM7CisKKwkJcmV0dXJuIGRldi0+c19sZWFybmluZ19tb2RlKGRldiwgISF2YWwpOworCisJY2FzZSBMSVJDX1NFVF9NRUFTVVJFX0NBUlJJRVJfTU9ERToKKwkJaWYgKCFkZXYtPnNfY2Fycmllcl9yZXBvcnQpCisJCQlyZXR1cm4gLUVOT1NZUzsKKworCQlyZXR1cm4gZGV2LT5zX2NhcnJpZXJfcmVwb3J0KGRldiwgISF2YWwpOworCisJLyogR2VuZXJpYyB0aW1lb3V0IHN1cHBvcnQgKi8KKwljYXNlIExJUkNfR0VUX01JTl9USU1FT1VUOgorCQlpZiAoIWRldi0+bWF4X3RpbWVvdXQpCisJCQlyZXR1cm4gLUVOT1NZUzsKKwkJdmFsID0gZGV2LT5taW5fdGltZW91dCAvIDEwMDA7CisJCWJyZWFrOworCisJY2FzZSBMSVJDX0dFVF9NQVhfVElNRU9VVDoKKwkJaWYgKCFkZXYtPm1heF90aW1lb3V0KQorCQkJcmV0dXJuIC1FTk9TWVM7CisJCXZhbCA9IGRldi0+bWF4X3RpbWVvdXQgLyAxMDAwOworCQlicmVhazsKKworCWNhc2UgTElSQ19TRVRfUkVDX1RJTUVPVVQ6CisJCWlmICghZGV2LT5tYXhfdGltZW91dCkKKwkJCXJldHVybiAtRU5PU1lTOworCisJCXRtcCA9IHZhbCAqIDEwMDA7CisKKwkJaWYgKHRtcCA8IGRldi0+bWluX3RpbWVvdXQgfHwKKwkJICAgIHRtcCA+IGRldi0+bWF4X3RpbWVvdXQpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJZGV2LT50aW1lb3V0ID0gdG1wOworCQlicmVhazsKKworCWNhc2UgTElSQ19TRVRfUkVDX1RJTUVPVVRfUkVQT1JUUzoKKwkJbGlyYy0+c2VuZF90aW1lb3V0X3JlcG9ydHMgPSAhIXZhbDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gbGlyY19kZXZfZm9wX2lvY3RsKGZpbGVwLCBjbWQsIGFyZyk7CisJfQorCisJaWYgKF9JT0NfRElSKGNtZCkgJiBfSU9DX1JFQUQpCisJCXJldCA9IHB1dF91c2VyKHZhbCwgKF9fdTMyICopYXJnKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaXJfbGlyY19vcGVuKHZvaWQgKmRhdGEpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGlyX2xpcmNfY2xvc2Uodm9pZCAqZGF0YSkKK3sKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxpcmNfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLndyaXRlCQk9IGlyX2xpcmNfdHJhbnNtaXRfaXIsCisJLnVubG9ja2VkX2lvY3RsCT0gaXJfbGlyY19pb2N0bCwKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJLmNvbXBhdF9pb2N0bAk9IGlyX2xpcmNfaW9jdGwsCisjZW5kaWYKKwkucmVhZAkJPSBsaXJjX2Rldl9mb3BfcmVhZCwKKwkucG9sbAkJPSBsaXJjX2Rldl9mb3BfcG9sbCwKKwkub3BlbgkJPSBsaXJjX2Rldl9mb3Bfb3BlbiwKKwkucmVsZWFzZQk9IGxpcmNfZGV2X2ZvcF9jbG9zZSwKKwkubGxzZWVrCQk9IG5vX2xsc2VlaywKK307CisKK3N0YXRpYyBpbnQgaXJfbGlyY19yZWdpc3RlcihzdHJ1Y3QgcmNfZGV2ICpkZXYpCit7CisJc3RydWN0IGxpcmNfZHJpdmVyICpkcnY7CisJc3RydWN0IGxpcmNfYnVmZmVyICpyYnVmOworCWludCByYyA9IC1FTk9NRU07CisJdW5zaWduZWQgbG9uZyBmZWF0dXJlczsKKworCWRydiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBsaXJjX2RyaXZlciksIEdGUF9LRVJORUwpOworCWlmICghZHJ2KQorCQlyZXR1cm4gcmM7CisKKwlyYnVmID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGxpcmNfYnVmZmVyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyYnVmKQorCQlnb3RvIHJidWZfYWxsb2NfZmFpbGVkOworCisJcmMgPSBsaXJjX2J1ZmZlcl9pbml0KHJidWYsIHNpemVvZihpbnQpLCBMSVJDQlVGX1NJWkUpOworCWlmIChyYykKKwkJZ290byByYnVmX2luaXRfZmFpbGVkOworCisJZmVhdHVyZXMgPSBMSVJDX0NBTl9SRUNfTU9ERTI7CisJaWYgKGRldi0+dHhfaXIpIHsKKwkJZmVhdHVyZXMgfD0gTElSQ19DQU5fU0VORF9QVUxTRTsKKwkJaWYgKGRldi0+c190eF9tYXNrKQorCQkJZmVhdHVyZXMgfD0gTElSQ19DQU5fU0VUX1RSQU5TTUlUVEVSX01BU0s7CisJCWlmIChkZXYtPnNfdHhfY2FycmllcikKKwkJCWZlYXR1cmVzIHw9IExJUkNfQ0FOX1NFVF9TRU5EX0NBUlJJRVI7CisJCWlmIChkZXYtPnNfdHhfZHV0eV9jeWNsZSkKKwkJCWZlYXR1cmVzIHw9IExJUkNfQ0FOX1NFVF9TRU5EX0RVVFlfQ1lDTEU7CisJfQorCisJaWYgKGRldi0+c19yeF9jYXJyaWVyX3JhbmdlKQorCQlmZWF0dXJlcyB8PSBMSVJDX0NBTl9TRVRfUkVDX0NBUlJJRVIgfAorCQkJTElSQ19DQU5fU0VUX1JFQ19DQVJSSUVSX1JBTkdFOworCisJaWYgKGRldi0+c19sZWFybmluZ19tb2RlKQorCQlmZWF0dXJlcyB8PSBMSVJDX0NBTl9VU0VfV0lERUJBTkRfUkVDRUlWRVI7CisKKwlpZiAoZGV2LT5zX2NhcnJpZXJfcmVwb3J0KQorCQlmZWF0dXJlcyB8PSBMSVJDX0NBTl9NRUFTVVJFX0NBUlJJRVI7CisKKwlpZiAoZGV2LT5tYXhfdGltZW91dCkKKwkJZmVhdHVyZXMgfD0gTElSQ19DQU5fU0VUX1JFQ19USU1FT1VUOworCisJc25wcmludGYoZHJ2LT5uYW1lLCBzaXplb2YoZHJ2LT5uYW1lKSwgImlyLWxpcmMtY29kZWMgKCVzKSIsCisJCSBkZXYtPmRyaXZlcl9uYW1lKTsKKwlkcnYtPm1pbm9yID0gLTE7CisJZHJ2LT5mZWF0dXJlcyA9IGZlYXR1cmVzOworCWRydi0+ZGF0YSA9ICZkZXYtPnJhdy0+bGlyYzsKKwlkcnYtPnJidWYgPSByYnVmOworCWRydi0+c2V0X3VzZV9pbmMgPSAmaXJfbGlyY19vcGVuOworCWRydi0+c2V0X3VzZV9kZWMgPSAmaXJfbGlyY19jbG9zZTsKKwlkcnYtPmNvZGVfbGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBpcl9yYXdfZXZlbnQpICogODsKKwlkcnYtPmZvcHMgPSAmbGlyY19mb3BzOworCWRydi0+ZGV2ID0gJmRldi0+ZGV2OworCWRydi0+b3duZXIgPSBUSElTX01PRFVMRTsKKworCWRydi0+bWlub3IgPSBsaXJjX3JlZ2lzdGVyX2RyaXZlcihkcnYpOworCWlmIChkcnYtPm1pbm9yIDwgMCkgeworCQlyYyA9IC1FTk9ERVY7CisJCWdvdG8gbGlyY19yZWdpc3Rlcl9mYWlsZWQ7CisJfQorCisJZGV2LT5yYXctPmxpcmMuZHJ2ID0gZHJ2OworCWRldi0+cmF3LT5saXJjLmRldiA9IGRldjsKKwlyZXR1cm4gMDsKKworbGlyY19yZWdpc3Rlcl9mYWlsZWQ6CityYnVmX2luaXRfZmFpbGVkOgorCWtmcmVlKHJidWYpOworcmJ1Zl9hbGxvY19mYWlsZWQ6CisJa2ZyZWUoZHJ2KTsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBpcl9saXJjX3VucmVnaXN0ZXIoc3RydWN0IHJjX2RldiAqZGV2KQoreworCXN0cnVjdCBsaXJjX2NvZGVjICpsaXJjID0gJmRldi0+cmF3LT5saXJjOworCisJbGlyY191bnJlZ2lzdGVyX2RyaXZlcihsaXJjLT5kcnYtPm1pbm9yKTsKKwlsaXJjX2J1ZmZlcl9mcmVlKGxpcmMtPmRydi0+cmJ1Zik7CisJa2ZyZWUobGlyYy0+ZHJ2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGlyX3Jhd19oYW5kbGVyIGxpcmNfaGFuZGxlciA9IHsKKwkucHJvdG9jb2xzCT0gUkNfVFlQRV9MSVJDLAorCS5kZWNvZGUJCT0gaXJfbGlyY19kZWNvZGUsCisJLnJhd19yZWdpc3Rlcgk9IGlyX2xpcmNfcmVnaXN0ZXIsCisJLnJhd191bnJlZ2lzdGVyCT0gaXJfbGlyY191bnJlZ2lzdGVyLAorfTsKKworc3RhdGljIGludCBfX2luaXQgaXJfbGlyY19jb2RlY19pbml0KHZvaWQpCit7CisJaXJfcmF3X2hhbmRsZXJfcmVnaXN0ZXIoJmxpcmNfaGFuZGxlcik7CisKKwlwcmludGsoS0VSTl9JTkZPICJJUiBMSVJDIGJyaWRnZSBoYW5kbGVyIGluaXRpYWxpemVkXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGlyX2xpcmNfY29kZWNfZXhpdCh2b2lkKQoreworCWlyX3Jhd19oYW5kbGVyX3VucmVnaXN0ZXIoJmxpcmNfaGFuZGxlcik7Cit9CisKK21vZHVsZV9pbml0KGlyX2xpcmNfY29kZWNfaW5pdCk7Cittb2R1bGVfZXhpdChpcl9saXJjX2NvZGVjX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJKYXJvZCBXaWxzb24gPGphcm9kQHJlZGhhdC5jb20+Iik7CitNT0RVTEVfQVVUSE9SKCJSZWQgSGF0IEluYy4gKGh0dHA6Ly93d3cucmVkaGF0LmNvbSkiKTsKK01PRFVMRV9ERVNDUklQVElPTigiTElSQyBJUiBoYW5kbGVyIGJyaWRnZSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9pci1uZWMtZGVjb2Rlci5jIGIvZHJpdmVycy9tZWRpYS9yYy9pci1uZWMtZGVjb2Rlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiNThiNGEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3JjL2lyLW5lYy1kZWNvZGVyLmMKQEAgLTAsMCArMSwyMjAgQEAKKy8qIGlyLW5lYy1kZWNvZGVyLmMgLSBoYW5kbGUgTkVDIElSIFB1bHNlL1NwYWNlIHByb3RvY29sCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvYml0cmV2Lmg+CisjaW5jbHVkZSAicmMtY29yZS1wcml2LmgiCisKKyNkZWZpbmUgTkVDX05CSVRTCQkzMgorI2RlZmluZSBORUNfVU5JVAkJNTYyNTAwICAvKiBucyAqLworI2RlZmluZSBORUNfSEVBREVSX1BVTFNFCSgxNiAqIE5FQ19VTklUKQorI2RlZmluZSBORUNYX0hFQURFUl9QVUxTRQkoOCAgKiBORUNfVU5JVCkgLyogTGVzcyBjb21tb24gTkVDIHZhcmlhbnQgKi8KKyNkZWZpbmUgTkVDX0hFQURFUl9TUEFDRQkoOCAgKiBORUNfVU5JVCkKKyNkZWZpbmUgTkVDX1JFUEVBVF9TUEFDRQkoNCAgKiBORUNfVU5JVCkKKyNkZWZpbmUgTkVDX0JJVF9QVUxTRQkJKDEgICogTkVDX1VOSVQpCisjZGVmaW5lIE5FQ19CSVRfMF9TUEFDRQkJKDEgICogTkVDX1VOSVQpCisjZGVmaW5lIE5FQ19CSVRfMV9TUEFDRQkJKDMgICogTkVDX1VOSVQpCisjZGVmaW5lCU5FQ19UUkFJTEVSX1BVTFNFCSgxICAqIE5FQ19VTklUKQorI2RlZmluZQlORUNfVFJBSUxFUl9TUEFDRQkoMTAgKiBORUNfVU5JVCkgLyogZXZlbiBsb25nZXIgaW4gcmVhbGl0eSAqLworI2RlZmluZSBORUNYX1JFUEVBVF9CSVRTCTEKKworZW51bSBuZWNfc3RhdGUgeworCVNUQVRFX0lOQUNUSVZFLAorCVNUQVRFX0hFQURFUl9TUEFDRSwKKwlTVEFURV9CSVRfUFVMU0UsCisJU1RBVEVfQklUX1NQQUNFLAorCVNUQVRFX1RSQUlMRVJfUFVMU0UsCisJU1RBVEVfVFJBSUxFUl9TUEFDRSwKK307CisKKy8qKgorICogaXJfbmVjX2RlY29kZSgpIC0gRGVjb2RlIG9uZSBORUMgcHVsc2Ugb3Igc3BhY2UKKyAqIEBkZXY6CXRoZSBzdHJ1Y3QgcmNfZGV2IGRlc2NyaXB0b3Igb2YgdGhlIGRldmljZQorICogQGR1cmF0aW9uOgl0aGUgc3RydWN0IGlyX3Jhd19ldmVudCBkZXNjcmlwdG9yIG9mIHRoZSBwdWxzZS9zcGFjZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAtRUlOVkFMIGlmIHRoZSBwdWxzZSB2aW9sYXRlcyB0aGUgc3RhdGUgbWFjaGluZQorICovCitzdGF0aWMgaW50IGlyX25lY19kZWNvZGUoc3RydWN0IHJjX2RldiAqZGV2LCBzdHJ1Y3QgaXJfcmF3X2V2ZW50IGV2KQoreworCXN0cnVjdCBuZWNfZGVjICpkYXRhID0gJmRldi0+cmF3LT5uZWM7CisJdTMyIHNjYW5jb2RlOworCXU4IGFkZHJlc3MsIG5vdF9hZGRyZXNzLCBjb21tYW5kLCBub3RfY29tbWFuZDsKKworCWlmICghKGRldi0+cmF3LT5lbmFibGVkX3Byb3RvY29scyAmIFJDX1RZUEVfTkVDKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIWlzX3RpbWluZ19ldmVudChldikpIHsKKwkJaWYgKGV2LnJlc2V0KQorCQkJZGF0YS0+c3RhdGUgPSBTVEFURV9JTkFDVElWRTsKKwkJcmV0dXJuIDA7CisJfQorCisJSVJfZHByaW50aygyLCAiTkVDIGRlY29kZSBzdGFydGVkIGF0IHN0YXRlICVkICgldXVzICVzKVxuIiwKKwkJICAgZGF0YS0+c3RhdGUsIFRPX1VTKGV2LmR1cmF0aW9uKSwgVE9fU1RSKGV2LnB1bHNlKSk7CisKKwlzd2l0Y2ggKGRhdGEtPnN0YXRlKSB7CisKKwljYXNlIFNUQVRFX0lOQUNUSVZFOgorCQlpZiAoIWV2LnB1bHNlKQorCQkJYnJlYWs7CisKKwkJaWYgKGVxX21hcmdpbihldi5kdXJhdGlvbiwgTkVDX0hFQURFUl9QVUxTRSwgTkVDX1VOSVQgLyAyKSkgeworCQkJZGF0YS0+aXNfbmVjX3ggPSBmYWxzZTsKKwkJCWRhdGEtPm5lY3hfcmVwZWF0ID0gZmFsc2U7CisJCX0gZWxzZSBpZiAoZXFfbWFyZ2luKGV2LmR1cmF0aW9uLCBORUNYX0hFQURFUl9QVUxTRSwgTkVDX1VOSVQgLyAyKSkKKwkJCWRhdGEtPmlzX25lY194ID0gdHJ1ZTsKKwkJZWxzZQorCQkJYnJlYWs7CisKKwkJZGF0YS0+Y291bnQgPSAwOworCQlkYXRhLT5zdGF0ZSA9IFNUQVRFX0hFQURFUl9TUEFDRTsKKwkJcmV0dXJuIDA7CisKKwljYXNlIFNUQVRFX0hFQURFUl9TUEFDRToKKwkJaWYgKGV2LnB1bHNlKQorCQkJYnJlYWs7CisKKwkJaWYgKGVxX21hcmdpbihldi5kdXJhdGlvbiwgTkVDX0hFQURFUl9TUEFDRSwgTkVDX1VOSVQgLyAyKSkgeworCQkJZGF0YS0+c3RhdGUgPSBTVEFURV9CSVRfUFVMU0U7CisJCQlyZXR1cm4gMDsKKwkJfSBlbHNlIGlmIChlcV9tYXJnaW4oZXYuZHVyYXRpb24sIE5FQ19SRVBFQVRfU1BBQ0UsIE5FQ19VTklUIC8gMikpIHsKKwkJCWlmICghZGV2LT5rZXlwcmVzc2VkKSB7CisJCQkJSVJfZHByaW50aygxLCAiRGlzY2FyZGluZyBsYXN0IGtleSByZXBlYXQ6IGV2ZW50IGFmdGVyIGtleSB1cFxuIik7CisJCQl9IGVsc2UgeworCQkJCXJjX3JlcGVhdChkZXYpOworCQkJCUlSX2RwcmludGsoMSwgIlJlcGVhdCBsYXN0IGtleVxuIik7CisJCQkJZGF0YS0+c3RhdGUgPSBTVEFURV9UUkFJTEVSX1BVTFNFOworCQkJfQorCQkJcmV0dXJuIDA7CisJCX0KKworCQlicmVhazsKKworCWNhc2UgU1RBVEVfQklUX1BVTFNFOgorCQlpZiAoIWV2LnB1bHNlKQorCQkJYnJlYWs7CisKKwkJaWYgKCFlcV9tYXJnaW4oZXYuZHVyYXRpb24sIE5FQ19CSVRfUFVMU0UsIE5FQ19VTklUIC8gMikpCisJCQlicmVhazsKKworCQlkYXRhLT5zdGF0ZSA9IFNUQVRFX0JJVF9TUEFDRTsKKwkJcmV0dXJuIDA7CisKKwljYXNlIFNUQVRFX0JJVF9TUEFDRToKKwkJaWYgKGV2LnB1bHNlKQorCQkJYnJlYWs7CisKKwkJaWYgKGRhdGEtPm5lY3hfcmVwZWF0ICYmIGRhdGEtPmNvdW50ID09IE5FQ1hfUkVQRUFUX0JJVFMgJiYKKwkJCWdlcV9tYXJnaW4oZXYuZHVyYXRpb24sCisJCQlORUNfVFJBSUxFUl9TUEFDRSwgTkVDX1VOSVQgLyAyKSkgeworCQkJCUlSX2RwcmludGsoMSwgIlJlcGVhdCBsYXN0IGtleVxuIik7CisJCQkJcmNfcmVwZWF0KGRldik7CisJCQkJZGF0YS0+c3RhdGUgPSBTVEFURV9JTkFDVElWRTsKKwkJCQlyZXR1cm4gMDsKKworCQl9IGVsc2UgaWYgKGRhdGEtPmNvdW50ID4gTkVDWF9SRVBFQVRfQklUUykKKwkJCWRhdGEtPm5lY3hfcmVwZWF0ID0gZmFsc2U7CisKKwkJZGF0YS0+Yml0cyA8PD0gMTsKKwkJaWYgKGVxX21hcmdpbihldi5kdXJhdGlvbiwgTkVDX0JJVF8xX1NQQUNFLCBORUNfVU5JVCAvIDIpKQorCQkJZGF0YS0+Yml0cyB8PSAxOworCQllbHNlIGlmICghZXFfbWFyZ2luKGV2LmR1cmF0aW9uLCBORUNfQklUXzBfU1BBQ0UsIE5FQ19VTklUIC8gMikpCisJCQlicmVhazsKKwkJZGF0YS0+Y291bnQrKzsKKworCQlpZiAoZGF0YS0+Y291bnQgPT0gTkVDX05CSVRTKQorCQkJZGF0YS0+c3RhdGUgPSBTVEFURV9UUkFJTEVSX1BVTFNFOworCQllbHNlCisJCQlkYXRhLT5zdGF0ZSA9IFNUQVRFX0JJVF9QVUxTRTsKKworCQlyZXR1cm4gMDsKKworCWNhc2UgU1RBVEVfVFJBSUxFUl9QVUxTRToKKwkJaWYgKCFldi5wdWxzZSkKKwkJCWJyZWFrOworCisJCWlmICghZXFfbWFyZ2luKGV2LmR1cmF0aW9uLCBORUNfVFJBSUxFUl9QVUxTRSwgTkVDX1VOSVQgLyAyKSkKKwkJCWJyZWFrOworCisJCWRhdGEtPnN0YXRlID0gU1RBVEVfVFJBSUxFUl9TUEFDRTsKKwkJcmV0dXJuIDA7CisKKwljYXNlIFNUQVRFX1RSQUlMRVJfU1BBQ0U6CisJCWlmIChldi5wdWxzZSkKKwkJCWJyZWFrOworCisJCWlmICghZ2VxX21hcmdpbihldi5kdXJhdGlvbiwgTkVDX1RSQUlMRVJfU1BBQ0UsIE5FQ19VTklUIC8gMikpCisJCQlicmVhazsKKworCQlhZGRyZXNzICAgICA9IGJpdHJldjgoKGRhdGEtPmJpdHMgPj4gMjQpICYgMHhmZik7CisJCW5vdF9hZGRyZXNzID0gYml0cmV2OCgoZGF0YS0+Yml0cyA+PiAxNikgJiAweGZmKTsKKwkJY29tbWFuZAkgICAgPSBiaXRyZXY4KChkYXRhLT5iaXRzID4+ICA4KSAmIDB4ZmYpOworCQlub3RfY29tbWFuZCA9IGJpdHJldjgoKGRhdGEtPmJpdHMgPj4gIDApICYgMHhmZik7CisKKwkJaWYgKChjb21tYW5kIF4gbm90X2NvbW1hbmQpICE9IDB4ZmYpIHsKKwkJCUlSX2RwcmludGsoMSwgIk5FQyBjaGVja3N1bSBlcnJvcjogcmVjZWl2ZWQgMHglMDh4XG4iLAorCQkJCSAgIGRhdGEtPmJpdHMpOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoKGFkZHJlc3MgXiBub3RfYWRkcmVzcykgIT0gMHhmZikgeworCQkJLyogRXh0ZW5kZWQgTkVDICovCisJCQlzY2FuY29kZSA9IGFkZHJlc3MgICAgIDw8IDE2IHwKKwkJCQkgICBub3RfYWRkcmVzcyA8PCAgOCB8CisJCQkJICAgY29tbWFuZDsKKwkJCUlSX2RwcmludGsoMSwgIk5FQyAoRXh0KSBzY2FuY29kZSAweCUwNnhcbiIsIHNjYW5jb2RlKTsKKwkJfSBlbHNlIHsKKwkJCS8qIE5vcm1hbCBORUMgKi8KKwkJCXNjYW5jb2RlID0gYWRkcmVzcyA8PCA4IHwgY29tbWFuZDsKKwkJCUlSX2RwcmludGsoMSwgIk5FQyBzY2FuY29kZSAweCUwNHhcbiIsIHNjYW5jb2RlKTsKKwkJfQorCisJCWlmIChkYXRhLT5pc19uZWNfeCkKKwkJCWRhdGEtPm5lY3hfcmVwZWF0ID0gdHJ1ZTsKKworCQlyY19rZXlkb3duKGRldiwgc2NhbmNvZGUsIDApOworCQlkYXRhLT5zdGF0ZSA9IFNUQVRFX0lOQUNUSVZFOworCQlyZXR1cm4gMDsKKwl9CisKKwlJUl9kcHJpbnRrKDEsICJORUMgZGVjb2RlIGZhaWxlZCBhdCBzdGF0ZSAlZCAoJXV1cyAlcylcbiIsCisJCSAgIGRhdGEtPnN0YXRlLCBUT19VUyhldi5kdXJhdGlvbiksIFRPX1NUUihldi5wdWxzZSkpOworCWRhdGEtPnN0YXRlID0gU1RBVEVfSU5BQ1RJVkU7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJfcmF3X2hhbmRsZXIgbmVjX2hhbmRsZXIgPSB7CisJLnByb3RvY29scwk9IFJDX1RZUEVfTkVDLAorCS5kZWNvZGUJCT0gaXJfbmVjX2RlY29kZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGlyX25lY19kZWNvZGVfaW5pdCh2b2lkKQoreworCWlyX3Jhd19oYW5kbGVyX3JlZ2lzdGVyKCZuZWNfaGFuZGxlcik7CisKKwlwcmludGsoS0VSTl9JTkZPICJJUiBORUMgcHJvdG9jb2wgaGFuZGxlciBpbml0aWFsaXplZFxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBpcl9uZWNfZGVjb2RlX2V4aXQodm9pZCkKK3sKKwlpcl9yYXdfaGFuZGxlcl91bnJlZ2lzdGVyKCZuZWNfaGFuZGxlcik7Cit9CisKK21vZHVsZV9pbml0KGlyX25lY19kZWNvZGVfaW5pdCk7Cittb2R1bGVfZXhpdChpcl9uZWNfZGVjb2RlX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4iKTsKK01PRFVMRV9BVVRIT1IoIlJlZCBIYXQgSW5jLiAoaHR0cDovL3d3dy5yZWRoYXQuY29tKSIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJORUMgSVIgcHJvdG9jb2wgZGVjb2RlciIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9pci1yYXcuYyBiL2RyaXZlcnMvbWVkaWEvcmMvaXItcmF3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg1YmFkZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvcmMvaXItcmF3LmMKQEAgLTAsMCArMSwzNzEgQEAKKy8qIGlyLXJhdy5jIC0gaGFuZGxlIElSIHB1bHNlL3NwYWNlIGV2ZW50cworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBieSBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgorI2luY2x1ZGUgInJjLWNvcmUtcHJpdi5oIgorCisvKiBEZWZpbmUgdGhlIG1heCBudW1iZXIgb2YgcHVsc2Uvc3BhY2UgdHJhbnNpdGlvbnMgdG8gYnVmZmVyICovCisjZGVmaW5lIE1BWF9JUl9FVkVOVF9TSVpFICAgICAgNTEyCisKKy8qIFVzZWQgdG8ga2VlcCB0cmFjayBvZiBJUiByYXcgY2xpZW50cywgcHJvdGVjdGVkIGJ5IGlyX3Jhd19oYW5kbGVyX2xvY2sgKi8KK3N0YXRpYyBMSVNUX0hFQUQoaXJfcmF3X2NsaWVudF9saXN0KTsKKworLyogVXNlZCB0byBoYW5kbGUgSVIgcmF3IGhhbmRsZXIgZXh0ZW5zaW9ucyAqLworc3RhdGljIERFRklORV9NVVRFWChpcl9yYXdfaGFuZGxlcl9sb2NrKTsKK3N0YXRpYyBMSVNUX0hFQUQoaXJfcmF3X2hhbmRsZXJfbGlzdCk7CitzdGF0aWMgdTY0IGF2YWlsYWJsZV9wcm90b2NvbHM7CisKKyNpZmRlZiBNT0RVTEUKKy8qIFVzZWQgdG8gbG9hZCB0aGUgZGVjb2RlcnMgKi8KK3N0YXRpYyBzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd3FfbG9hZDsKKyNlbmRpZgorCitzdGF0aWMgaW50IGlyX3Jhd19ldmVudF90aHJlYWQodm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgaXJfcmF3X2V2ZW50IGV2OworCXN0cnVjdCBpcl9yYXdfaGFuZGxlciAqaGFuZGxlcjsKKwlzdHJ1Y3QgaXJfcmF3X2V2ZW50X2N0cmwgKnJhdyA9IChzdHJ1Y3QgaXJfcmF3X2V2ZW50X2N0cmwgKilkYXRhOworCWludCByZXR2YWw7CisKKwl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgeworCisJCXNwaW5fbG9ja19pcnEoJnJhdy0+bG9jayk7CisJCXJldHZhbCA9IGtmaWZvX291dCgmcmF3LT5rZmlmbywgJmV2LCBzaXplb2YoZXYpKTsKKworCQlpZiAoIXJldHZhbCkgeworCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKworCQkJaWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkKKwkJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCisJCQlzcGluX3VubG9ja19pcnEoJnJhdy0+bG9jayk7CisJCQlzY2hlZHVsZSgpOworCQkJY29udGludWU7CisJCX0KKworCQlzcGluX3VubG9ja19pcnEoJnJhdy0+bG9jayk7CisKKworCQlCVUdfT04ocmV0dmFsICE9IHNpemVvZihldikpOworCisJCW11dGV4X2xvY2soJmlyX3Jhd19oYW5kbGVyX2xvY2spOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGhhbmRsZXIsICZpcl9yYXdfaGFuZGxlcl9saXN0LCBsaXN0KQorCQkJaGFuZGxlci0+ZGVjb2RlKHJhdy0+ZGV2LCBldik7CisJCXJhdy0+cHJldl9ldiA9IGV2OworCQltdXRleF91bmxvY2soJmlyX3Jhd19oYW5kbGVyX2xvY2spOworCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqIGlyX3Jhd19ldmVudF9zdG9yZSgpIC0gcGFzcyBhIHB1bHNlL3NwYWNlIGR1cmF0aW9uIHRvIHRoZSByYXcgaXIgZGVjb2RlcnMKKyAqIEBkZXY6CXRoZSBzdHJ1Y3QgcmNfZGV2IGRldmljZSBkZXNjcmlwdG9yCisgKiBAZXY6CQl0aGUgc3RydWN0IGlyX3Jhd19ldmVudCBkZXNjcmlwdG9yIG9mIHRoZSBwdWxzZS9zcGFjZQorICoKKyAqIFRoaXMgcm91dGluZSAod2hpY2ggbWF5IGJlIGNhbGxlZCBmcm9tIGFuIGludGVycnVwdCBjb250ZXh0KSBzdG9yZXMgYQorICogcHVsc2Uvc3BhY2UgZHVyYXRpb24gZm9yIHRoZSByYXcgaXIgZGVjb2Rpbmcgc3RhdGUgbWFjaGluZXMuIFB1bHNlcyBhcmUKKyAqIHNpZ25hbGxlZCBhcyBwb3NpdGl2ZSB2YWx1ZXMgYW5kIHNwYWNlcyBhcyBuZWdhdGl2ZSB2YWx1ZXMuIEEgemVybyB2YWx1ZQorICogd2lsbCByZXNldCB0aGUgZGVjb2Rpbmcgc3RhdGUgbWFjaGluZXMuCisgKi8KK2ludCBpcl9yYXdfZXZlbnRfc3RvcmUoc3RydWN0IHJjX2RldiAqZGV2LCBzdHJ1Y3QgaXJfcmF3X2V2ZW50ICpldikKK3sKKwlpZiAoIWRldi0+cmF3KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCUlSX2RwcmludGsoMiwgInNhbXBsZTogKCUwNWR1cyAlcylcbiIsCisJCSAgIFRPX1VTKGV2LT5kdXJhdGlvbiksIFRPX1NUUihldi0+cHVsc2UpKTsKKworCWlmIChrZmlmb19pbigmZGV2LT5yYXctPmtmaWZvLCBldiwgc2l6ZW9mKCpldikpICE9IHNpemVvZigqZXYpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaXJfcmF3X2V2ZW50X3N0b3JlKTsKKworLyoqCisgKiBpcl9yYXdfZXZlbnRfc3RvcmVfZWRnZSgpIC0gbm90aWZ5IHJhdyBpciBkZWNvZGVycyBvZiB0aGUgc3RhcnQgb2YgYSBwdWxzZS9zcGFjZQorICogQGRldjoJdGhlIHN0cnVjdCByY19kZXYgZGV2aWNlIGRlc2NyaXB0b3IKKyAqIEB0eXBlOgl0aGUgdHlwZSBvZiB0aGUgZXZlbnQgdGhhdCBoYXMgb2NjdXJyZWQKKyAqCisgKiBUaGlzIHJvdXRpbmUgKHdoaWNoIG1heSBiZSBjYWxsZWQgZnJvbSBhbiBpbnRlcnJ1cHQgY29udGV4dCkgaXMgdXNlZCB0bworICogc3RvcmUgdGhlIGJlZ2lubmluZyBvZiBhbiBpciBwdWxzZSBvciBzcGFjZSAob3IgdGhlIHN0YXJ0L2VuZCBvZiBpcgorICogcmVjZXB0aW9uKSBmb3IgdGhlIHJhdyBpciBkZWNvZGluZyBzdGF0ZSBtYWNoaW5lcy4gVGhpcyBpcyB1c2VkIGJ5CisgKiBoYXJkd2FyZSB3aGljaCBkb2VzIG5vdCBwcm92aWRlIGR1cmF0aW9ucyBkaXJlY3RseSBidXQgb25seSBpbnRlcnJ1cHRzCisgKiAob3Igc2ltaWxhciBldmVudHMpIG9uIHN0YXRlIGNoYW5nZS4KKyAqLworaW50IGlyX3Jhd19ldmVudF9zdG9yZV9lZGdlKHN0cnVjdCByY19kZXYgKmRldiwgZW51bSByYXdfZXZlbnRfdHlwZSB0eXBlKQoreworCWt0aW1lX3QJCQlub3c7CisJczY0CQkJZGVsdGE7IC8qIG5zICovCisJc3RydWN0IGlyX3Jhd19ldmVudAlldjsKKwlpbnQJCQlyYyA9IDA7CisKKwlpZiAoIWRldi0+cmF3KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW5vdyA9IGt0aW1lX2dldCgpOworCWRlbHRhID0ga3RpbWVfdG9fbnMoa3RpbWVfc3ViKG5vdywgZGV2LT5yYXctPmxhc3RfZXZlbnQpKTsKKworCS8qIENoZWNrIGZvciBhIGxvbmcgZHVyYXRpb24gc2luY2UgbGFzdCBldmVudCBvciBpZiB3ZSdyZQorCSAqIGJlaW5nIGNhbGxlZCBmb3IgdGhlIGZpcnN0IHRpbWUsIG5vdGUgdGhhdCBkZWx0YSBjYW4ndAorCSAqIHBvc3NpYmx5IGJlIG5lZ2F0aXZlLgorCSAqLworCWV2LmR1cmF0aW9uID0gMDsKKwlpZiAoZGVsdGEgPiBJUl9NQVhfRFVSQVRJT04gfHwgIWRldi0+cmF3LT5sYXN0X3R5cGUpCisJCXR5cGUgfD0gSVJfU1RBUlRfRVZFTlQ7CisJZWxzZQorCQlldi5kdXJhdGlvbiA9IGRlbHRhOworCisJaWYgKHR5cGUgJiBJUl9TVEFSVF9FVkVOVCkKKwkJaXJfcmF3X2V2ZW50X3Jlc2V0KGRldik7CisJZWxzZSBpZiAoZGV2LT5yYXctPmxhc3RfdHlwZSAmIElSX1NQQUNFKSB7CisJCWV2LnB1bHNlID0gZmFsc2U7CisJCXJjID0gaXJfcmF3X2V2ZW50X3N0b3JlKGRldiwgJmV2KTsKKwl9IGVsc2UgaWYgKGRldi0+cmF3LT5sYXN0X3R5cGUgJiBJUl9QVUxTRSkgeworCQlldi5wdWxzZSA9IHRydWU7CisJCXJjID0gaXJfcmF3X2V2ZW50X3N0b3JlKGRldiwgJmV2KTsKKwl9IGVsc2UKKwkJcmV0dXJuIDA7CisKKwlkZXYtPnJhdy0+bGFzdF9ldmVudCA9IG5vdzsKKwlkZXYtPnJhdy0+bGFzdF90eXBlID0gdHlwZTsKKwlyZXR1cm4gcmM7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpcl9yYXdfZXZlbnRfc3RvcmVfZWRnZSk7CisKKy8qKgorICogaXJfcmF3X2V2ZW50X3N0b3JlX3dpdGhfZmlsdGVyKCkgLSBwYXNzIG5leHQgcHVsc2Uvc3BhY2UgdG8gZGVjb2RlcnMgd2l0aCBzb21lIHByb2Nlc3NpbmcKKyAqIEBkZXY6CXRoZSBzdHJ1Y3QgcmNfZGV2IGRldmljZSBkZXNjcmlwdG9yCisgKiBAdHlwZToJdGhlIHR5cGUgb2YgdGhlIGV2ZW50IHRoYXQgaGFzIG9jY3VycmVkCisgKgorICogVGhpcyByb3V0aW5lICh3aGljaCBtYXkgYmUgY2FsbGVkIGZyb20gYW4gaW50ZXJydXB0IGNvbnRleHQpIHdvcmtzCisgKiBpbiBzaW1pbGlhciBtYW5uZXIgdG8gaXJfcmF3X2V2ZW50X3N0b3JlX2VkZ2UuCisgKiBUaGlzIHJvdXRpbmUgaXMgaW50ZW5kZWQgZm9yIGRldmljZXMgd2l0aCBsaW1pdGVkIGludGVybmFsIGJ1ZmZlcgorICogSXQgYXV0b21lcmdlcyBzYW1wbGVzIG9mIHNhbWUgdHlwZSwgYW5kIGhhbmRsZXMgdGltZW91dHMKKyAqLworaW50IGlyX3Jhd19ldmVudF9zdG9yZV93aXRoX2ZpbHRlcihzdHJ1Y3QgcmNfZGV2ICpkZXYsIHN0cnVjdCBpcl9yYXdfZXZlbnQgKmV2KQoreworCWlmICghZGV2LT5yYXcpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogSWdub3JlIHNwYWNlcyBpbiBpZGxlIG1vZGUgKi8KKwlpZiAoZGV2LT5pZGxlICYmICFldi0+cHVsc2UpCisJCXJldHVybiAwOworCWVsc2UgaWYgKGRldi0+aWRsZSkKKwkJaXJfcmF3X2V2ZW50X3NldF9pZGxlKGRldiwgZmFsc2UpOworCisJaWYgKCFkZXYtPnJhdy0+dGhpc19ldi5kdXJhdGlvbikKKwkJZGV2LT5yYXctPnRoaXNfZXYgPSAqZXY7CisJZWxzZSBpZiAoZXYtPnB1bHNlID09IGRldi0+cmF3LT50aGlzX2V2LnB1bHNlKQorCQlkZXYtPnJhdy0+dGhpc19ldi5kdXJhdGlvbiArPSBldi0+ZHVyYXRpb247CisJZWxzZSB7CisJCWlyX3Jhd19ldmVudF9zdG9yZShkZXYsICZkZXYtPnJhdy0+dGhpc19ldik7CisJCWRldi0+cmF3LT50aGlzX2V2ID0gKmV2OworCX0KKworCS8qIEVudGVyIGlkbGUgbW9kZSBpZiBuZXNzZXNhcnkgKi8KKwlpZiAoIWV2LT5wdWxzZSAmJiBkZXYtPnRpbWVvdXQgJiYKKwkgICAgZGV2LT5yYXctPnRoaXNfZXYuZHVyYXRpb24gPj0gZGV2LT50aW1lb3V0KQorCQlpcl9yYXdfZXZlbnRfc2V0X2lkbGUoZGV2LCB0cnVlKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaXJfcmF3X2V2ZW50X3N0b3JlX3dpdGhfZmlsdGVyKTsKKworLyoqCisgKiBpcl9yYXdfZXZlbnRfc2V0X2lkbGUoKSAtIHByb3ZpZGUgaGludCB0byByYy1jb3JlIHdoZW4gdGhlIGRldmljZSBpcyBpZGxlIG9yIG5vdAorICogQGRldjoJdGhlIHN0cnVjdCByY19kZXYgZGV2aWNlIGRlc2NyaXB0b3IKKyAqIEBpZGxlOgl3aGV0aGVyIHRoZSBkZXZpY2UgaXMgaWRsZSBvciBub3QKKyAqLwordm9pZCBpcl9yYXdfZXZlbnRfc2V0X2lkbGUoc3RydWN0IHJjX2RldiAqZGV2LCBib29sIGlkbGUpCit7CisJaWYgKCFkZXYtPnJhdykKKwkJcmV0dXJuOworCisJSVJfZHByaW50aygyLCAiJXMgaWRsZSBtb2RlXG4iLCBpZGxlID8gImVudGVyIiA6ICJsZWF2ZSIpOworCisJaWYgKGlkbGUpIHsKKwkJZGV2LT5yYXctPnRoaXNfZXYudGltZW91dCA9IHRydWU7CisJCWlyX3Jhd19ldmVudF9zdG9yZShkZXYsICZkZXYtPnJhdy0+dGhpc19ldik7CisJCWluaXRfaXJfcmF3X2V2ZW50KCZkZXYtPnJhdy0+dGhpc19ldik7CisJfQorCisJaWYgKGRldi0+c19pZGxlKQorCQlkZXYtPnNfaWRsZShkZXYsIGlkbGUpOworCisJZGV2LT5pZGxlID0gaWRsZTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlyX3Jhd19ldmVudF9zZXRfaWRsZSk7CisKKy8qKgorICogaXJfcmF3X2V2ZW50X2hhbmRsZSgpIC0gc2NoZWR1bGVzIHRoZSBkZWNvZGluZyBvZiBzdG9yZWQgaXIgZGF0YQorICogQGRldjoJdGhlIHN0cnVjdCByY19kZXYgZGV2aWNlIGRlc2NyaXB0b3IKKyAqCisgKiBUaGlzIHJvdXRpbmUgd2lsbCB0ZWxsIHJjLWNvcmUgdG8gc3RhcnQgZGVjb2Rpbmcgc3RvcmVkIGlyIGRhdGEuCisgKi8KK3ZvaWQgaXJfcmF3X2V2ZW50X2hhbmRsZShzdHJ1Y3QgcmNfZGV2ICpkZXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghZGV2LT5yYXcpCisJCXJldHVybjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnJhdy0+bG9jaywgZmxhZ3MpOworCXdha2VfdXBfcHJvY2VzcyhkZXYtPnJhdy0+dGhyZWFkKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnJhdy0+bG9jaywgZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaXJfcmF3X2V2ZW50X2hhbmRsZSk7CisKKy8qIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgc3lzZnMgaW50ZXJmYWNlICovCit1NjQKK2lyX3Jhd19nZXRfYWxsb3dlZF9wcm90b2NvbHMoKQoreworCXU2NCBwcm90b2NvbHM7CisJbXV0ZXhfbG9jaygmaXJfcmF3X2hhbmRsZXJfbG9jayk7CisJcHJvdG9jb2xzID0gYXZhaWxhYmxlX3Byb3RvY29sczsKKwltdXRleF91bmxvY2soJmlyX3Jhd19oYW5kbGVyX2xvY2spOworCXJldHVybiBwcm90b2NvbHM7Cit9CisKKy8qCisgKiBVc2VkIHRvICh1bilyZWdpc3RlciByYXcgZXZlbnQgY2xpZW50cworICovCitpbnQgaXJfcmF3X2V2ZW50X3JlZ2lzdGVyKHN0cnVjdCByY19kZXYgKmRldikKK3sKKwlpbnQgcmM7CisJc3RydWN0IGlyX3Jhd19oYW5kbGVyICpoYW5kbGVyOworCisJaWYgKCFkZXYpCisJCXJldHVybiAtRUlOVkFMOworCisJZGV2LT5yYXcgPSBremFsbG9jKHNpemVvZigqZGV2LT5yYXcpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldi0+cmF3KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRldi0+cmF3LT5kZXYgPSBkZXY7CisJZGV2LT5yYXctPmVuYWJsZWRfcHJvdG9jb2xzID0gfjA7CisJcmMgPSBrZmlmb19hbGxvYygmZGV2LT5yYXctPmtmaWZvLAorCQkJIHNpemVvZihzdHJ1Y3QgaXJfcmF3X2V2ZW50KSAqIE1BWF9JUl9FVkVOVF9TSVpFLAorCQkJIEdGUF9LRVJORUwpOworCWlmIChyYyA8IDApCisJCWdvdG8gb3V0OworCisJc3Bpbl9sb2NrX2luaXQoJmRldi0+cmF3LT5sb2NrKTsKKwlkZXYtPnJhdy0+dGhyZWFkID0ga3RocmVhZF9ydW4oaXJfcmF3X2V2ZW50X3RocmVhZCwgZGV2LT5yYXcsCisJCQkJICAgICAgICJyYyVsZCIsIGRldi0+ZGV2bm8pOworCisJaWYgKElTX0VSUihkZXYtPnJhdy0+dGhyZWFkKSkgeworCQlyYyA9IFBUUl9FUlIoZGV2LT5yYXctPnRocmVhZCk7CisJCWdvdG8gb3V0OworCX0KKworCW11dGV4X2xvY2soJmlyX3Jhd19oYW5kbGVyX2xvY2spOworCWxpc3RfYWRkX3RhaWwoJmRldi0+cmF3LT5saXN0LCAmaXJfcmF3X2NsaWVudF9saXN0KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGhhbmRsZXIsICZpcl9yYXdfaGFuZGxlcl9saXN0LCBsaXN0KQorCQlpZiAoaGFuZGxlci0+cmF3X3JlZ2lzdGVyKQorCQkJaGFuZGxlci0+cmF3X3JlZ2lzdGVyKGRldik7CisJbXV0ZXhfdW5sb2NrKCZpcl9yYXdfaGFuZGxlcl9sb2NrKTsKKworCXJldHVybiAwOworCitvdXQ6CisJa2ZyZWUoZGV2LT5yYXcpOworCWRldi0+cmF3ID0gTlVMTDsKKwlyZXR1cm4gcmM7Cit9CisKK3ZvaWQgaXJfcmF3X2V2ZW50X3VucmVnaXN0ZXIoc3RydWN0IHJjX2RldiAqZGV2KQoreworCXN0cnVjdCBpcl9yYXdfaGFuZGxlciAqaGFuZGxlcjsKKworCWlmICghZGV2IHx8ICFkZXYtPnJhdykKKwkJcmV0dXJuOworCisJa3RocmVhZF9zdG9wKGRldi0+cmF3LT50aHJlYWQpOworCisJbXV0ZXhfbG9jaygmaXJfcmF3X2hhbmRsZXJfbG9jayk7CisJbGlzdF9kZWwoJmRldi0+cmF3LT5saXN0KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGhhbmRsZXIsICZpcl9yYXdfaGFuZGxlcl9saXN0LCBsaXN0KQorCQlpZiAoaGFuZGxlci0+cmF3X3VucmVnaXN0ZXIpCisJCQloYW5kbGVyLT5yYXdfdW5yZWdpc3RlcihkZXYpOworCW11dGV4X3VubG9jaygmaXJfcmF3X2hhbmRsZXJfbG9jayk7CisKKwlrZmlmb19mcmVlKCZkZXYtPnJhdy0+a2ZpZm8pOworCWtmcmVlKGRldi0+cmF3KTsKKwlkZXYtPnJhdyA9IE5VTEw7Cit9CisKKy8qCisgKiBFeHRlbnNpb24gaW50ZXJmYWNlIC0gdXNlZCB0byByZWdpc3RlciB0aGUgSVIgZGVjb2RlcnMKKyAqLworCitpbnQgaXJfcmF3X2hhbmRsZXJfcmVnaXN0ZXIoc3RydWN0IGlyX3Jhd19oYW5kbGVyICppcl9yYXdfaGFuZGxlcikKK3sKKwlzdHJ1Y3QgaXJfcmF3X2V2ZW50X2N0cmwgKnJhdzsKKworCW11dGV4X2xvY2soJmlyX3Jhd19oYW5kbGVyX2xvY2spOworCWxpc3RfYWRkX3RhaWwoJmlyX3Jhd19oYW5kbGVyLT5saXN0LCAmaXJfcmF3X2hhbmRsZXJfbGlzdCk7CisJaWYgKGlyX3Jhd19oYW5kbGVyLT5yYXdfcmVnaXN0ZXIpCisJCWxpc3RfZm9yX2VhY2hfZW50cnkocmF3LCAmaXJfcmF3X2NsaWVudF9saXN0LCBsaXN0KQorCQkJaXJfcmF3X2hhbmRsZXItPnJhd19yZWdpc3RlcihyYXctPmRldik7CisJYXZhaWxhYmxlX3Byb3RvY29scyB8PSBpcl9yYXdfaGFuZGxlci0+cHJvdG9jb2xzOworCW11dGV4X3VubG9jaygmaXJfcmF3X2hhbmRsZXJfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woaXJfcmF3X2hhbmRsZXJfcmVnaXN0ZXIpOworCit2b2lkIGlyX3Jhd19oYW5kbGVyX3VucmVnaXN0ZXIoc3RydWN0IGlyX3Jhd19oYW5kbGVyICppcl9yYXdfaGFuZGxlcikKK3sKKwlzdHJ1Y3QgaXJfcmF3X2V2ZW50X2N0cmwgKnJhdzsKKworCW11dGV4X2xvY2soJmlyX3Jhd19oYW5kbGVyX2xvY2spOworCWxpc3RfZGVsKCZpcl9yYXdfaGFuZGxlci0+bGlzdCk7CisJaWYgKGlyX3Jhd19oYW5kbGVyLT5yYXdfdW5yZWdpc3RlcikKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShyYXcsICZpcl9yYXdfY2xpZW50X2xpc3QsIGxpc3QpCisJCQlpcl9yYXdfaGFuZGxlci0+cmF3X3VucmVnaXN0ZXIocmF3LT5kZXYpOworCWF2YWlsYWJsZV9wcm90b2NvbHMgJj0gfmlyX3Jhd19oYW5kbGVyLT5wcm90b2NvbHM7CisJbXV0ZXhfdW5sb2NrKCZpcl9yYXdfaGFuZGxlcl9sb2NrKTsKK30KK0VYUE9SVF9TWU1CT0woaXJfcmF3X2hhbmRsZXJfdW5yZWdpc3Rlcik7CisKKyNpZmRlZiBNT0RVTEUKK3N0YXRpYyB2b2lkIGluaXRfZGVjb2RlcnMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCS8qIExvYWQgdGhlIGRlY29kZXIgbW9kdWxlcyAqLworCisJbG9hZF9uZWNfZGVjb2RlKCk7CisJbG9hZF9yYzVfZGVjb2RlKCk7CisJbG9hZF9yYzZfZGVjb2RlKCk7CisJbG9hZF9qdmNfZGVjb2RlKCk7CisJbG9hZF9zb255X2RlY29kZSgpOworCWxvYWRfbGlyY19jb2RlYygpOworCisJLyogSWYgbmVlZGVkLCB3ZSBtYXkgbGF0ZXIgYWRkIHNvbWUgaW5pdCBjb2RlLiBJbiB0aGlzIGNhc2UsCisJICAgaXQgaXMgbmVlZGVkIHRvIGNoYW5nZSB0aGUgQ09ORklHX01PRFVMRSB0ZXN0IGF0IHJjLWNvcmUuaAorCSAqLworfQorI2VuZGlmCisKK3ZvaWQgaXJfcmF3X2luaXQodm9pZCkKK3sKKyNpZmRlZiBNT0RVTEUKKwlJTklUX1dPUksoJndxX2xvYWQsIGluaXRfZGVjb2RlcnMpOworCXNjaGVkdWxlX3dvcmsoJndxX2xvYWQpOworI2VuZGlmCit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JjL2lyLXJjNS1kZWNvZGVyLmMgYi9kcml2ZXJzL21lZGlhL3JjL2lyLXJjNS1kZWNvZGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWJkYmE1NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvcmMvaXItcmM1LWRlY29kZXIuYwpAQCAtMCwwICsxLDE4OSBAQAorLyogaXItcmM1LWRlY29kZXIuYyAtIGhhbmRsZSBSQzUoeCkgSVIgUHVsc2UvU3BhY2UgcHJvdG9jb2wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgYnkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qCisgKiBUaGlzIGNvZGUgaGFuZGxlcyAxNCBiaXRzIFJDNSBwcm90b2NvbHMgYW5kIDIwIGJpdHMgUkM1eCBwcm90b2NvbHMuCisgKiBUaGVyZSBhcmUgb3RoZXIgdmFyaWFudHMgdGhhdCB1c2UgYSBkaWZmZXJlbnQgbnVtYmVyIG9mIGJpdHMuCisgKiBUaGlzIGlzIGN1cnJlbnRseSB1bnN1cHBvcnRlZC4KKyAqIEl0IGNvbnNpZGVycyBhIGNhcnJpZXIgb2YgMzYga0h6LCB3aXRoIGEgdG90YWwgb2YgMTQvMjAgYml0cywgd2hlcmUKKyAqIHRoZSBmaXJzdCB0d28gYml0cyBhcmUgc3RhcnQgYml0cywgYW5kIGEgdGhpcmQgb25lIGlzIGEgZmlsaW5nIGJpdAorICovCisKKyNpbmNsdWRlICJyYy1jb3JlLXByaXYuaCIKKworI2RlZmluZSBSQzVfTkJJVFMJCTE0CisjZGVmaW5lIFJDNVhfTkJJVFMJCTIwCisjZGVmaW5lIENIRUNLX1JDNVhfTkJJVFMJOAorI2RlZmluZSBSQzVfVU5JVAkJODg4ODg4IC8qIG5zICovCisjZGVmaW5lIFJDNV9CSVRfU1RBUlQJCSgxICogUkM1X1VOSVQpCisjZGVmaW5lIFJDNV9CSVRfRU5ECQkoMSAqIFJDNV9VTklUKQorI2RlZmluZSBSQzVYX1NQQUNFCQkoNCAqIFJDNV9VTklUKQorCitlbnVtIHJjNV9zdGF0ZSB7CisJU1RBVEVfSU5BQ1RJVkUsCisJU1RBVEVfQklUX1NUQVJULAorCVNUQVRFX0JJVF9FTkQsCisJU1RBVEVfQ0hFQ0tfUkM1WCwKKwlTVEFURV9GSU5JU0hFRCwKK307CisKKy8qKgorICogaXJfcmM1X2RlY29kZSgpIC0gRGVjb2RlIG9uZSBSQy01IHB1bHNlIG9yIHNwYWNlCisgKiBAZGV2Ogl0aGUgc3RydWN0IHJjX2RldiBkZXNjcmlwdG9yIG9mIHRoZSBkZXZpY2UKKyAqIEBldjoJCXRoZSBzdHJ1Y3QgaXJfcmF3X2V2ZW50IGRlc2NyaXB0b3Igb2YgdGhlIHB1bHNlL3NwYWNlCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIC1FSU5WQUwgaWYgdGhlIHB1bHNlIHZpb2xhdGVzIHRoZSBzdGF0ZSBtYWNoaW5lCisgKi8KK3N0YXRpYyBpbnQgaXJfcmM1X2RlY29kZShzdHJ1Y3QgcmNfZGV2ICpkZXYsIHN0cnVjdCBpcl9yYXdfZXZlbnQgZXYpCit7CisJc3RydWN0IHJjNV9kZWMgKmRhdGEgPSAmZGV2LT5yYXctPnJjNTsKKwl1OCB0b2dnbGU7CisJdTMyIHNjYW5jb2RlOworCisgICAgICAgIGlmICghKGRldi0+cmF3LT5lbmFibGVkX3Byb3RvY29scyAmIFJDX1RZUEVfUkM1KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKworCWlmICghaXNfdGltaW5nX2V2ZW50KGV2KSkgeworCQlpZiAoZXYucmVzZXQpCisJCQlkYXRhLT5zdGF0ZSA9IFNUQVRFX0lOQUNUSVZFOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIWdlcV9tYXJnaW4oZXYuZHVyYXRpb24sIFJDNV9VTklULCBSQzVfVU5JVCAvIDIpKQorCQlnb3RvIG91dDsKKworYWdhaW46CisJSVJfZHByaW50aygyLCAiUkM1KHgpIGRlY29kZSBzdGFydGVkIGF0IHN0YXRlICVpICgldXVzICVzKVxuIiwKKwkJICAgZGF0YS0+c3RhdGUsIFRPX1VTKGV2LmR1cmF0aW9uKSwgVE9fU1RSKGV2LnB1bHNlKSk7CisKKwlpZiAoIWdlcV9tYXJnaW4oZXYuZHVyYXRpb24sIFJDNV9VTklULCBSQzVfVU5JVCAvIDIpKQorCQlyZXR1cm4gMDsKKworCXN3aXRjaCAoZGF0YS0+c3RhdGUpIHsKKworCWNhc2UgU1RBVEVfSU5BQ1RJVkU6CisJCWlmICghZXYucHVsc2UpCisJCQlicmVhazsKKworCQlkYXRhLT5zdGF0ZSA9IFNUQVRFX0JJVF9TVEFSVDsKKwkJZGF0YS0+Y291bnQgPSAxOworCQkvKiBXZSBqdXN0IG5lZWQgZW5vdWdoIGJpdHMgdG8gZ2V0IHRvIFNUQVRFX0NIRUNLX1JDNVggKi8KKwkJZGF0YS0+d2FudGVkX2JpdHMgPSBSQzVYX05CSVRTOworCQlkZWNyZWFzZV9kdXJhdGlvbigmZXYsIFJDNV9CSVRfU1RBUlQpOworCQlnb3RvIGFnYWluOworCisJY2FzZSBTVEFURV9CSVRfU1RBUlQ6CisJCWlmICghZXFfbWFyZ2luKGV2LmR1cmF0aW9uLCBSQzVfQklUX1NUQVJULCBSQzVfVU5JVCAvIDIpKQorCQkJYnJlYWs7CisKKwkJZGF0YS0+Yml0cyA8PD0gMTsKKwkJaWYgKCFldi5wdWxzZSkKKwkJCWRhdGEtPmJpdHMgfD0gMTsKKwkJZGF0YS0+Y291bnQrKzsKKwkJZGF0YS0+c3RhdGUgPSBTVEFURV9CSVRfRU5EOworCQlyZXR1cm4gMDsKKworCWNhc2UgU1RBVEVfQklUX0VORDoKKwkJaWYgKCFpc190cmFuc2l0aW9uKCZldiwgJmRldi0+cmF3LT5wcmV2X2V2KSkKKwkJCWJyZWFrOworCisJCWlmIChkYXRhLT5jb3VudCA9PSBkYXRhLT53YW50ZWRfYml0cykKKwkJCWRhdGEtPnN0YXRlID0gU1RBVEVfRklOSVNIRUQ7CisJCWVsc2UgaWYgKGRhdGEtPmNvdW50ID09IENIRUNLX1JDNVhfTkJJVFMpCisJCQlkYXRhLT5zdGF0ZSA9IFNUQVRFX0NIRUNLX1JDNVg7CisJCWVsc2UKKwkJCWRhdGEtPnN0YXRlID0gU1RBVEVfQklUX1NUQVJUOworCisJCWRlY3JlYXNlX2R1cmF0aW9uKCZldiwgUkM1X0JJVF9FTkQpOworCQlnb3RvIGFnYWluOworCisJY2FzZSBTVEFURV9DSEVDS19SQzVYOgorCQlpZiAoIWV2LnB1bHNlICYmIGdlcV9tYXJnaW4oZXYuZHVyYXRpb24sIFJDNVhfU1BBQ0UsIFJDNV9VTklUIC8gMikpIHsKKwkJCS8qIFJDNVggKi8KKwkJCWRhdGEtPndhbnRlZF9iaXRzID0gUkM1WF9OQklUUzsKKwkJCWRlY3JlYXNlX2R1cmF0aW9uKCZldiwgUkM1WF9TUEFDRSk7CisJCX0gZWxzZSB7CisJCQkvKiBSQzUgKi8KKwkJCWRhdGEtPndhbnRlZF9iaXRzID0gUkM1X05CSVRTOworCQl9CisJCWRhdGEtPnN0YXRlID0gU1RBVEVfQklUX1NUQVJUOworCQlnb3RvIGFnYWluOworCisJY2FzZSBTVEFURV9GSU5JU0hFRDoKKwkJaWYgKGV2LnB1bHNlKQorCQkJYnJlYWs7CisKKwkJaWYgKGRhdGEtPndhbnRlZF9iaXRzID09IFJDNVhfTkJJVFMpIHsKKwkJCS8qIFJDNVggKi8KKwkJCXU4IHhkYXRhLCBjb21tYW5kLCBzeXN0ZW07CisJCQl4ZGF0YSAgICA9IChkYXRhLT5iaXRzICYgMHgwMDAzRikgPj4gMDsKKwkJCWNvbW1hbmQgID0gKGRhdGEtPmJpdHMgJiAweDAwRkMwKSA+PiA2OworCQkJc3lzdGVtICAgPSAoZGF0YS0+Yml0cyAmIDB4MUYwMDApID4+IDEyOworCQkJdG9nZ2xlICAgPSAoZGF0YS0+Yml0cyAmIDB4MjAwMDApID8gMSA6IDA7CisJCQljb21tYW5kICs9IChkYXRhLT5iaXRzICYgMHgwMTAwMCkgPyAwIDogMHg0MDsKKwkJCXNjYW5jb2RlID0gc3lzdGVtIDw8IDE2IHwgY29tbWFuZCA8PCA4IHwgeGRhdGE7CisKKwkJCUlSX2RwcmludGsoMSwgIlJDNVggc2NhbmNvZGUgMHglMDZ4ICh0b2dnbGU6ICV1KVxuIiwKKwkJCQkgICBzY2FuY29kZSwgdG9nZ2xlKTsKKworCQl9IGVsc2UgeworCQkJLyogUkM1ICovCisJCQl1OCBjb21tYW5kLCBzeXN0ZW07CisJCQljb21tYW5kICA9IChkYXRhLT5iaXRzICYgMHgwMDAzRikgPj4gMDsKKwkJCXN5c3RlbSAgID0gKGRhdGEtPmJpdHMgJiAweDAwN0MwKSA+PiA2OworCQkJdG9nZ2xlICAgPSAoZGF0YS0+Yml0cyAmIDB4MDA4MDApID8gMSA6IDA7CisJCQljb21tYW5kICs9IChkYXRhLT5iaXRzICYgMHgwMTAwMCkgPyAwIDogMHg0MDsKKwkJCXNjYW5jb2RlID0gc3lzdGVtIDw8IDggfCBjb21tYW5kOworCisJCQlJUl9kcHJpbnRrKDEsICJSQzUgc2NhbmNvZGUgMHglMDR4ICh0b2dnbGU6ICV1KVxuIiwKKwkJCQkgICBzY2FuY29kZSwgdG9nZ2xlKTsKKwkJfQorCisJCXJjX2tleWRvd24oZGV2LCBzY2FuY29kZSwgdG9nZ2xlKTsKKwkJZGF0YS0+c3RhdGUgPSBTVEFURV9JTkFDVElWRTsKKwkJcmV0dXJuIDA7CisJfQorCitvdXQ6CisJSVJfZHByaW50aygxLCAiUkM1KHgpIGRlY29kZSBmYWlsZWQgYXQgc3RhdGUgJWkgKCV1dXMgJXMpXG4iLAorCQkgICBkYXRhLT5zdGF0ZSwgVE9fVVMoZXYuZHVyYXRpb24pLCBUT19TVFIoZXYucHVsc2UpKTsKKwlkYXRhLT5zdGF0ZSA9IFNUQVRFX0lOQUNUSVZFOworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgc3RydWN0IGlyX3Jhd19oYW5kbGVyIHJjNV9oYW5kbGVyID0geworCS5wcm90b2NvbHMJPSBSQ19UWVBFX1JDNSwKKwkuZGVjb2RlCQk9IGlyX3JjNV9kZWNvZGUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBpcl9yYzVfZGVjb2RlX2luaXQodm9pZCkKK3sKKwlpcl9yYXdfaGFuZGxlcl9yZWdpc3RlcigmcmM1X2hhbmRsZXIpOworCisJcHJpbnRrKEtFUk5fSU5GTyAiSVIgUkM1KHgpIHByb3RvY29sIGhhbmRsZXIgaW5pdGlhbGl6ZWRcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgaXJfcmM1X2RlY29kZV9leGl0KHZvaWQpCit7CisJaXJfcmF3X2hhbmRsZXJfdW5yZWdpc3RlcigmcmM1X2hhbmRsZXIpOworfQorCittb2R1bGVfaW5pdChpcl9yYzVfZGVjb2RlX2luaXQpOworbW9kdWxlX2V4aXQoaXJfcmM1X2RlY29kZV9leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+Iik7CitNT0RVTEVfQVVUSE9SKCJSZWQgSGF0IEluYy4gKGh0dHA6Ly93d3cucmVkaGF0LmNvbSkiKTsKK01PRFVMRV9ERVNDUklQVElPTigiUkM1KHgpIElSIHByb3RvY29sIGRlY29kZXIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMvaXItcmM1LXN6LWRlY29kZXIuYyBiL2RyaXZlcnMvbWVkaWEvcmMvaXItcmM1LXN6LWRlY29kZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGFhODg2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9pci1yYzUtc3otZGVjb2Rlci5jCkBAIC0wLDAgKzEsMTUzIEBACisvKiBpci1yYzUtc3otZGVjb2Rlci5jIC0gaGFuZGxlIFJDNSBTdHJlYW16YXAgSVIgUHVsc2UvU3BhY2UgcHJvdG9jb2wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgYnkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgYnkgSmFyb2QgV2lsc29uIDxqYXJvZEByZWRoYXQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKgorICogVGhpcyBjb2RlIGhhbmRsZXMgdGhlIDE1IGJpdCBSQzUtaXNoIHByb3RvY29sIHVzZWQgYnkgdGhlIFN0cmVhbXphcAorICogUEMgUmVtb3RlLgorICogSXQgY29uc2lkZXJzIGEgY2FycmllciBvZiAzNiBrSHosIHdpdGggYSB0b3RhbCBvZiAxNSBiaXRzLCB3aGVyZQorICogdGhlIGZpcnN0IHR3byBiaXRzIGFyZSBzdGFydCBiaXRzLCBhbmQgYSB0aGlyZCBvbmUgaXMgYSBmaWxpbmcgYml0CisgKi8KKworI2luY2x1ZGUgInJjLWNvcmUtcHJpdi5oIgorCisjZGVmaW5lIFJDNV9TWl9OQklUUwkJMTUKKyNkZWZpbmUgUkM1X1VOSVQJCTg4ODg4OCAvKiBucyAqLworI2RlZmluZSBSQzVfQklUX1NUQVJUCQkoMSAqIFJDNV9VTklUKQorI2RlZmluZSBSQzVfQklUX0VORAkJKDEgKiBSQzVfVU5JVCkKKworZW51bSByYzVfc3pfc3RhdGUgeworCVNUQVRFX0lOQUNUSVZFLAorCVNUQVRFX0JJVF9TVEFSVCwKKwlTVEFURV9CSVRfRU5ELAorCVNUQVRFX0ZJTklTSEVELAorfTsKKworLyoqCisgKiBpcl9yYzVfc3pfZGVjb2RlKCkgLSBEZWNvZGUgb25lIFJDLTUgU3RyZWFtemFwIHB1bHNlIG9yIHNwYWNlCisgKiBAZGV2Ogl0aGUgc3RydWN0IHJjX2RldiBkZXNjcmlwdG9yIG9mIHRoZSBkZXZpY2UKKyAqIEBldjoJCXRoZSBzdHJ1Y3QgaXJfcmF3X2V2ZW50IGRlc2NyaXB0b3Igb2YgdGhlIHB1bHNlL3NwYWNlCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIC1FSU5WQUwgaWYgdGhlIHB1bHNlIHZpb2xhdGVzIHRoZSBzdGF0ZSBtYWNoaW5lCisgKi8KK3N0YXRpYyBpbnQgaXJfcmM1X3N6X2RlY29kZShzdHJ1Y3QgcmNfZGV2ICpkZXYsIHN0cnVjdCBpcl9yYXdfZXZlbnQgZXYpCit7CisJc3RydWN0IHJjNV9zel9kZWMgKmRhdGEgPSAmZGV2LT5yYXctPnJjNV9zejsKKwl1OCB0b2dnbGUsIGNvbW1hbmQsIHN5c3RlbTsKKwl1MzIgc2NhbmNvZGU7CisKKyAgICAgICAgaWYgKCEoZGV2LT5yYXctPmVuYWJsZWRfcHJvdG9jb2xzICYgUkNfVFlQRV9SQzVfU1opKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworCisJaWYgKCFpc190aW1pbmdfZXZlbnQoZXYpKSB7CisJCWlmIChldi5yZXNldCkKKwkJCWRhdGEtPnN0YXRlID0gU1RBVEVfSU5BQ1RJVkU7CisJCXJldHVybiAwOworCX0KKworCWlmICghZ2VxX21hcmdpbihldi5kdXJhdGlvbiwgUkM1X1VOSVQsIFJDNV9VTklUIC8gMikpCisJCWdvdG8gb3V0OworCithZ2FpbjoKKwlJUl9kcHJpbnRrKDIsICJSQzUtc3ogZGVjb2RlIHN0YXJ0ZWQgYXQgc3RhdGUgJWkgKCV1dXMgJXMpXG4iLAorCQkgICBkYXRhLT5zdGF0ZSwgVE9fVVMoZXYuZHVyYXRpb24pLCBUT19TVFIoZXYucHVsc2UpKTsKKworCWlmICghZ2VxX21hcmdpbihldi5kdXJhdGlvbiwgUkM1X1VOSVQsIFJDNV9VTklUIC8gMikpCisJCXJldHVybiAwOworCisJc3dpdGNoIChkYXRhLT5zdGF0ZSkgeworCisJY2FzZSBTVEFURV9JTkFDVElWRToKKwkJaWYgKCFldi5wdWxzZSkKKwkJCWJyZWFrOworCisJCWRhdGEtPnN0YXRlID0gU1RBVEVfQklUX1NUQVJUOworCQlkYXRhLT5jb3VudCA9IDE7CisJCWRhdGEtPndhbnRlZF9iaXRzID0gUkM1X1NaX05CSVRTOworCQlkZWNyZWFzZV9kdXJhdGlvbigmZXYsIFJDNV9CSVRfU1RBUlQpOworCQlnb3RvIGFnYWluOworCisJY2FzZSBTVEFURV9CSVRfU1RBUlQ6CisJCWlmICghZXFfbWFyZ2luKGV2LmR1cmF0aW9uLCBSQzVfQklUX1NUQVJULCBSQzVfVU5JVCAvIDIpKQorCQkJYnJlYWs7CisKKwkJZGF0YS0+Yml0cyA8PD0gMTsKKwkJaWYgKCFldi5wdWxzZSkKKwkJCWRhdGEtPmJpdHMgfD0gMTsKKwkJZGF0YS0+Y291bnQrKzsKKwkJZGF0YS0+c3RhdGUgPSBTVEFURV9CSVRfRU5EOworCQlyZXR1cm4gMDsKKworCWNhc2UgU1RBVEVfQklUX0VORDoKKwkJaWYgKCFpc190cmFuc2l0aW9uKCZldiwgJmRldi0+cmF3LT5wcmV2X2V2KSkKKwkJCWJyZWFrOworCisJCWlmIChkYXRhLT5jb3VudCA9PSBkYXRhLT53YW50ZWRfYml0cykKKwkJCWRhdGEtPnN0YXRlID0gU1RBVEVfRklOSVNIRUQ7CisJCWVsc2UKKwkJCWRhdGEtPnN0YXRlID0gU1RBVEVfQklUX1NUQVJUOworCisJCWRlY3JlYXNlX2R1cmF0aW9uKCZldiwgUkM1X0JJVF9FTkQpOworCQlnb3RvIGFnYWluOworCisJY2FzZSBTVEFURV9GSU5JU0hFRDoKKwkJaWYgKGV2LnB1bHNlKQorCQkJYnJlYWs7CisKKwkJLyogUkM1LXN6ICovCisJCWNvbW1hbmQgID0gKGRhdGEtPmJpdHMgJiAweDAwMDNGKSA+PiAwOworCQlzeXN0ZW0gICA9IChkYXRhLT5iaXRzICYgMHgwMkZDMCkgPj4gNjsKKwkJdG9nZ2xlICAgPSAoZGF0YS0+Yml0cyAmIDB4MDEwMDApID8gMSA6IDA7CisJCXNjYW5jb2RlID0gc3lzdGVtIDw8IDYgfCBjb21tYW5kOworCisJCUlSX2RwcmludGsoMSwgIlJDNS1zeiBzY2FuY29kZSAweCUwNHggKHRvZ2dsZTogJXUpXG4iLAorCQkJICAgc2NhbmNvZGUsIHRvZ2dsZSk7CisKKwkJcmNfa2V5ZG93bihkZXYsIHNjYW5jb2RlLCB0b2dnbGUpOworCQlkYXRhLT5zdGF0ZSA9IFNUQVRFX0lOQUNUSVZFOworCQlyZXR1cm4gMDsKKwl9CisKK291dDoKKwlJUl9kcHJpbnRrKDEsICJSQzUtc3ogZGVjb2RlIGZhaWxlZCBhdCBzdGF0ZSAlaSAoJXV1cyAlcylcbiIsCisJCSAgIGRhdGEtPnN0YXRlLCBUT19VUyhldi5kdXJhdGlvbiksIFRPX1NUUihldi5wdWxzZSkpOworCWRhdGEtPnN0YXRlID0gU1RBVEVfSU5BQ1RJVkU7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJfcmF3X2hhbmRsZXIgcmM1X3N6X2hhbmRsZXIgPSB7CisJLnByb3RvY29scwk9IFJDX1RZUEVfUkM1X1NaLAorCS5kZWNvZGUJCT0gaXJfcmM1X3N6X2RlY29kZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGlyX3JjNV9zel9kZWNvZGVfaW5pdCh2b2lkKQoreworCWlyX3Jhd19oYW5kbGVyX3JlZ2lzdGVyKCZyYzVfc3pfaGFuZGxlcik7CisKKwlwcmludGsoS0VSTl9JTkZPICJJUiBSQzUgKHN0cmVhbXphcCkgcHJvdG9jb2wgaGFuZGxlciBpbml0aWFsaXplZFxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBpcl9yYzVfc3pfZGVjb2RlX2V4aXQodm9pZCkKK3sKKwlpcl9yYXdfaGFuZGxlcl91bnJlZ2lzdGVyKCZyYzVfc3pfaGFuZGxlcik7Cit9CisKK21vZHVsZV9pbml0KGlyX3JjNV9zel9kZWNvZGVfaW5pdCk7Cittb2R1bGVfZXhpdChpcl9yYzVfc3pfZGVjb2RlX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJKYXJvZCBXaWxzb24gPGphcm9kQHJlZGhhdC5jb20+Iik7CitNT0RVTEVfQVVUSE9SKCJSZWQgSGF0IEluYy4gKGh0dHA6Ly93d3cucmVkaGF0LmNvbSkiKTsKK01PRFVMRV9ERVNDUklQVElPTigiUkM1IChzdHJlYW16YXApIElSIHByb3RvY29sIGRlY29kZXIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMvaXItcmM2LWRlY29kZXIuYyBiL2RyaXZlcnMvbWVkaWEvcmMvaXItcmM2LWRlY29kZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTVkYWZhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9pci1yYzYtZGVjb2Rlci5jCkBAIC0wLDAgKzEsMjgwIEBACisvKiBpci1yYzYtZGVjb2Rlci5jIC0gQSBkZWNvZGVyIGZvciB0aGUgUkM2IElSIHByb3RvY29sCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIGJ5IERhdmlkIEjDpHJkZW1hbiA8ZGF2aWRAaGFyZGVtYW4ubnU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlICJyYy1jb3JlLXByaXYuaCIKKworLyoKKyAqIFRoaXMgZGVjb2RlciBjdXJyZW50bHkgc3VwcG9ydHM6CisgKiBSQzYtMC0xNgkoc3RhbmRhcmQgdG9nZ2xlIGJpdCBpbiBoZWFkZXIpCisgKiBSQzYtNkEtMjQJKG5vIHRvZ2dsZSBiaXQpCisgKiBSQzYtNkEtMzIJKE1DRSB2ZXJzaW9uIHdpdGggdG9nZ2xlIGJpdCBpbiBib2R5KQorICovCisKKyNkZWZpbmUgUkM2X1VOSVQJCTQ0NDQ0NAkvKiB1cyAqLworI2RlZmluZSBSQzZfSEVBREVSX05CSVRTCTQJLyogbm90IGluY2x1ZGluZyB0b2dnbGUgYml0ICovCisjZGVmaW5lIFJDNl8wX05CSVRTCQkxNgorI2RlZmluZSBSQzZfNkFfU01BTExfTkJJVFMJMjQKKyNkZWZpbmUgUkM2XzZBX0xBUkdFX05CSVRTCTMyCisjZGVmaW5lIFJDNl9QUkVGSVhfUFVMU0UJKDYgKiBSQzZfVU5JVCkKKyNkZWZpbmUgUkM2X1BSRUZJWF9TUEFDRQkoMiAqIFJDNl9VTklUKQorI2RlZmluZSBSQzZfQklUX1NUQVJUCQkoMSAqIFJDNl9VTklUKQorI2RlZmluZSBSQzZfQklUX0VORAkJKDEgKiBSQzZfVU5JVCkKKyNkZWZpbmUgUkM2X1RPR0dMRV9TVEFSVAkoMiAqIFJDNl9VTklUKQorI2RlZmluZSBSQzZfVE9HR0xFX0VORAkJKDIgKiBSQzZfVU5JVCkKKyNkZWZpbmUgUkM2X01PREVfTUFTSwkJMHgwNwkvKiBmb3IgdGhlIGhlYWRlciBiaXRzICovCisjZGVmaW5lIFJDNl9TVEFSVEJJVF9NQVNLCTB4MDgJLyogZm9yIHRoZSBoZWFkZXIgYml0cyAqLworI2RlZmluZSBSQzZfNkFfTUNFX1RPR0dMRV9NQVNLCTB4ODAwMAkvKiBmb3IgdGhlIGJvZHkgYml0cyAqLworCitlbnVtIHJjNl9tb2RlIHsKKwlSQzZfTU9ERV8wLAorCVJDNl9NT0RFXzZBLAorCVJDNl9NT0RFX1VOS05PV04sCit9OworCitlbnVtIHJjNl9zdGF0ZSB7CisJU1RBVEVfSU5BQ1RJVkUsCisJU1RBVEVfUFJFRklYX1NQQUNFLAorCVNUQVRFX0hFQURFUl9CSVRfU1RBUlQsCisJU1RBVEVfSEVBREVSX0JJVF9FTkQsCisJU1RBVEVfVE9HR0xFX1NUQVJULAorCVNUQVRFX1RPR0dMRV9FTkQsCisJU1RBVEVfQk9EWV9CSVRfU1RBUlQsCisJU1RBVEVfQk9EWV9CSVRfRU5ELAorCVNUQVRFX0ZJTklTSEVELAorfTsKKworc3RhdGljIGVudW0gcmM2X21vZGUgcmM2X21vZGUoc3RydWN0IHJjNl9kZWMgKmRhdGEpCit7CisJc3dpdGNoIChkYXRhLT5oZWFkZXIgJiBSQzZfTU9ERV9NQVNLKSB7CisJY2FzZSAwOgorCQlyZXR1cm4gUkM2X01PREVfMDsKKwljYXNlIDY6CisJCWlmICghZGF0YS0+dG9nZ2xlKQorCQkJcmV0dXJuIFJDNl9NT0RFXzZBOworCQkvKiBmYWxsIHRocm91Z2ggKi8KKwlkZWZhdWx0OgorCQlyZXR1cm4gUkM2X01PREVfVU5LTk9XTjsKKwl9Cit9CisKKy8qKgorICogaXJfcmM2X2RlY29kZSgpIC0gRGVjb2RlIG9uZSBSQzYgcHVsc2Ugb3Igc3BhY2UKKyAqIEBkZXY6CXRoZSBzdHJ1Y3QgcmNfZGV2IGRlc2NyaXB0b3Igb2YgdGhlIGRldmljZQorICogQGV2OgkJdGhlIHN0cnVjdCBpcl9yYXdfZXZlbnQgZGVzY3JpcHRvciBvZiB0aGUgcHVsc2Uvc3BhY2UKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgLUVJTlZBTCBpZiB0aGUgcHVsc2UgdmlvbGF0ZXMgdGhlIHN0YXRlIG1hY2hpbmUKKyAqLworc3RhdGljIGludCBpcl9yYzZfZGVjb2RlKHN0cnVjdCByY19kZXYgKmRldiwgc3RydWN0IGlyX3Jhd19ldmVudCBldikKK3sKKwlzdHJ1Y3QgcmM2X2RlYyAqZGF0YSA9ICZkZXYtPnJhdy0+cmM2OworCXUzMiBzY2FuY29kZTsKKwl1OCB0b2dnbGU7CisKKwlpZiAoIShkZXYtPnJhdy0+ZW5hYmxlZF9wcm90b2NvbHMgJiBSQ19UWVBFX1JDNikpCisJCXJldHVybiAwOworCisJaWYgKCFpc190aW1pbmdfZXZlbnQoZXYpKSB7CisJCWlmIChldi5yZXNldCkKKwkJCWRhdGEtPnN0YXRlID0gU1RBVEVfSU5BQ1RJVkU7CisJCXJldHVybiAwOworCX0KKworCWlmICghZ2VxX21hcmdpbihldi5kdXJhdGlvbiwgUkM2X1VOSVQsIFJDNl9VTklUIC8gMikpCisJCWdvdG8gb3V0OworCithZ2FpbjoKKwlJUl9kcHJpbnRrKDIsICJSQzYgZGVjb2RlIHN0YXJ0ZWQgYXQgc3RhdGUgJWkgKCV1dXMgJXMpXG4iLAorCQkgICBkYXRhLT5zdGF0ZSwgVE9fVVMoZXYuZHVyYXRpb24pLCBUT19TVFIoZXYucHVsc2UpKTsKKworCWlmICghZ2VxX21hcmdpbihldi5kdXJhdGlvbiwgUkM2X1VOSVQsIFJDNl9VTklUIC8gMikpCisJCXJldHVybiAwOworCisJc3dpdGNoIChkYXRhLT5zdGF0ZSkgeworCisJY2FzZSBTVEFURV9JTkFDVElWRToKKwkJaWYgKCFldi5wdWxzZSkKKwkJCWJyZWFrOworCisJCS8qIE5vdGU6IGxhcmdlciBtYXJnaW4gb24gZmlyc3QgcHVsc2Ugc2luY2UgZWFjaCBSQzZfVU5JVAorCQkgICBpcyBxdWl0ZSBzaG9ydCBhbmQgc29tZSBoYXJkd2FyZSB0YWtlcyBzb21lIHRpbWUgdG8KKwkJICAgYWRqdXN0IHRvIHRoZSBzaWduYWwgKi8KKwkJaWYgKCFlcV9tYXJnaW4oZXYuZHVyYXRpb24sIFJDNl9QUkVGSVhfUFVMU0UsIFJDNl9VTklUKSkKKwkJCWJyZWFrOworCisJCWRhdGEtPnN0YXRlID0gU1RBVEVfUFJFRklYX1NQQUNFOworCQlkYXRhLT5jb3VudCA9IDA7CisJCXJldHVybiAwOworCisJY2FzZSBTVEFURV9QUkVGSVhfU1BBQ0U6CisJCWlmIChldi5wdWxzZSkKKwkJCWJyZWFrOworCisJCWlmICghZXFfbWFyZ2luKGV2LmR1cmF0aW9uLCBSQzZfUFJFRklYX1NQQUNFLCBSQzZfVU5JVCAvIDIpKQorCQkJYnJlYWs7CisKKwkJZGF0YS0+c3RhdGUgPSBTVEFURV9IRUFERVJfQklUX1NUQVJUOworCQlyZXR1cm4gMDsKKworCWNhc2UgU1RBVEVfSEVBREVSX0JJVF9TVEFSVDoKKwkJaWYgKCFlcV9tYXJnaW4oZXYuZHVyYXRpb24sIFJDNl9CSVRfU1RBUlQsIFJDNl9VTklUIC8gMikpCisJCQlicmVhazsKKworCQlkYXRhLT5oZWFkZXIgPDw9IDE7CisJCWlmIChldi5wdWxzZSkKKwkJCWRhdGEtPmhlYWRlciB8PSAxOworCQlkYXRhLT5jb3VudCsrOworCQlkYXRhLT5zdGF0ZSA9IFNUQVRFX0hFQURFUl9CSVRfRU5EOworCQlyZXR1cm4gMDsKKworCWNhc2UgU1RBVEVfSEVBREVSX0JJVF9FTkQ6CisJCWlmICghaXNfdHJhbnNpdGlvbigmZXYsICZkZXYtPnJhdy0+cHJldl9ldikpCisJCQlicmVhazsKKworCQlpZiAoZGF0YS0+Y291bnQgPT0gUkM2X0hFQURFUl9OQklUUykKKwkJCWRhdGEtPnN0YXRlID0gU1RBVEVfVE9HR0xFX1NUQVJUOworCQllbHNlCisJCQlkYXRhLT5zdGF0ZSA9IFNUQVRFX0hFQURFUl9CSVRfU1RBUlQ7CisKKwkJZGVjcmVhc2VfZHVyYXRpb24oJmV2LCBSQzZfQklUX0VORCk7CisJCWdvdG8gYWdhaW47CisKKwljYXNlIFNUQVRFX1RPR0dMRV9TVEFSVDoKKwkJaWYgKCFlcV9tYXJnaW4oZXYuZHVyYXRpb24sIFJDNl9UT0dHTEVfU1RBUlQsIFJDNl9VTklUIC8gMikpCisJCQlicmVhazsKKworCQlkYXRhLT50b2dnbGUgPSBldi5wdWxzZTsKKwkJZGF0YS0+c3RhdGUgPSBTVEFURV9UT0dHTEVfRU5EOworCQlyZXR1cm4gMDsKKworCWNhc2UgU1RBVEVfVE9HR0xFX0VORDoKKwkJaWYgKCFpc190cmFuc2l0aW9uKCZldiwgJmRldi0+cmF3LT5wcmV2X2V2KSB8fAorCQkgICAgIWdlcV9tYXJnaW4oZXYuZHVyYXRpb24sIFJDNl9UT0dHTEVfRU5ELCBSQzZfVU5JVCAvIDIpKQorCQkJYnJlYWs7CisKKwkJaWYgKCEoZGF0YS0+aGVhZGVyICYgUkM2X1NUQVJUQklUX01BU0spKSB7CisJCQlJUl9kcHJpbnRrKDEsICJSQzYgaW52YWxpZCBzdGFydCBiaXRcbiIpOworCQkJYnJlYWs7CisJCX0KKworCQlkYXRhLT5zdGF0ZSA9IFNUQVRFX0JPRFlfQklUX1NUQVJUOworCQlkZWNyZWFzZV9kdXJhdGlvbigmZXYsIFJDNl9UT0dHTEVfRU5EKTsKKwkJZGF0YS0+Y291bnQgPSAwOworCisJCXN3aXRjaCAocmM2X21vZGUoZGF0YSkpIHsKKwkJY2FzZSBSQzZfTU9ERV8wOgorCQkJZGF0YS0+d2FudGVkX2JpdHMgPSBSQzZfMF9OQklUUzsKKwkJCWJyZWFrOworCQljYXNlIFJDNl9NT0RFXzZBOgorCQkJLyogVGhpcyBtaWdodCBsb29rIHdlaXJkLCBidXQgd2UgYmFzaWNhbGx5CisJCQkgICBjaGVjayB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IGJvZHkgYml0IHRvCisJCQkgICBkZXRlcm1pbmUgdGhlIG51bWJlciBvZiBiaXRzIGluIG1vZGUgNkEgKi8KKwkJCWlmICgoIWV2LnB1bHNlICYmICFnZXFfbWFyZ2luKGV2LmR1cmF0aW9uLCBSQzZfVU5JVCwgUkM2X1VOSVQgLyAyKSkgfHwKKwkJCSAgICBnZXFfbWFyZ2luKGV2LmR1cmF0aW9uLCBSQzZfVU5JVCwgUkM2X1VOSVQgLyAyKSkKKwkJCQlkYXRhLT53YW50ZWRfYml0cyA9IFJDNl82QV9MQVJHRV9OQklUUzsKKwkJCWVsc2UKKwkJCQlkYXRhLT53YW50ZWRfYml0cyA9IFJDNl82QV9TTUFMTF9OQklUUzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJSVJfZHByaW50aygxLCAiUkM2IHVua25vd24gbW9kZVxuIik7CisJCQlnb3RvIG91dDsKKwkJfQorCQlnb3RvIGFnYWluOworCisJY2FzZSBTVEFURV9CT0RZX0JJVF9TVEFSVDoKKwkJaWYgKCFlcV9tYXJnaW4oZXYuZHVyYXRpb24sIFJDNl9CSVRfU1RBUlQsIFJDNl9VTklUIC8gMikpCisJCQlicmVhazsKKworCQlkYXRhLT5ib2R5IDw8PSAxOworCQlpZiAoZXYucHVsc2UpCisJCQlkYXRhLT5ib2R5IHw9IDE7CisJCWRhdGEtPmNvdW50Kys7CisJCWRhdGEtPnN0YXRlID0gU1RBVEVfQk9EWV9CSVRfRU5EOworCQlyZXR1cm4gMDsKKworCWNhc2UgU1RBVEVfQk9EWV9CSVRfRU5EOgorCQlpZiAoIWlzX3RyYW5zaXRpb24oJmV2LCAmZGV2LT5yYXctPnByZXZfZXYpKQorCQkJYnJlYWs7CisKKwkJaWYgKGRhdGEtPmNvdW50ID09IGRhdGEtPndhbnRlZF9iaXRzKQorCQkJZGF0YS0+c3RhdGUgPSBTVEFURV9GSU5JU0hFRDsKKwkJZWxzZQorCQkJZGF0YS0+c3RhdGUgPSBTVEFURV9CT0RZX0JJVF9TVEFSVDsKKworCQlkZWNyZWFzZV9kdXJhdGlvbigmZXYsIFJDNl9CSVRfRU5EKTsKKwkJZ290byBhZ2FpbjsKKworCWNhc2UgU1RBVEVfRklOSVNIRUQ6CisJCWlmIChldi5wdWxzZSkKKwkJCWJyZWFrOworCisJCXN3aXRjaCAocmM2X21vZGUoZGF0YSkpIHsKKwkJY2FzZSBSQzZfTU9ERV8wOgorCQkJc2NhbmNvZGUgPSBkYXRhLT5ib2R5ICYgMHhmZmZmOworCQkJdG9nZ2xlID0gZGF0YS0+dG9nZ2xlOworCQkJSVJfZHByaW50aygxLCAiUkM2KDApIHNjYW5jb2RlIDB4JTA0eCAodG9nZ2xlOiAldSlcbiIsCisJCQkJICAgc2NhbmNvZGUsIHRvZ2dsZSk7CisJCQlicmVhazsKKwkJY2FzZSBSQzZfTU9ERV82QToKKwkJCWlmIChkYXRhLT53YW50ZWRfYml0cyA9PSBSQzZfNkFfTEFSR0VfTkJJVFMpIHsKKwkJCQl0b2dnbGUgPSBkYXRhLT5ib2R5ICYgUkM2XzZBX01DRV9UT0dHTEVfTUFTSyA/IDEgOiAwOworCQkJCXNjYW5jb2RlID0gZGF0YS0+Ym9keSAmIH5SQzZfNkFfTUNFX1RPR0dMRV9NQVNLOworCQkJfSBlbHNlIHsKKwkJCQl0b2dnbGUgPSAwOworCQkJCXNjYW5jb2RlID0gZGF0YS0+Ym9keSAmIDB4ZmZmZmZmOworCQkJfQorCisJCQlJUl9kcHJpbnRrKDEsICJSQzYoNkEpIHNjYW5jb2RlIDB4JTA4eCAodG9nZ2xlOiAldSlcbiIsCisJCQkJICAgc2NhbmNvZGUsIHRvZ2dsZSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCUlSX2RwcmludGsoMSwgIlJDNiB1bmtub3duIG1vZGVcbiIpOworCQkJZ290byBvdXQ7CisJCX0KKworCQlyY19rZXlkb3duKGRldiwgc2NhbmNvZGUsIHRvZ2dsZSk7CisJCWRhdGEtPnN0YXRlID0gU1RBVEVfSU5BQ1RJVkU7CisJCXJldHVybiAwOworCX0KKworb3V0OgorCUlSX2RwcmludGsoMSwgIlJDNiBkZWNvZGUgZmFpbGVkIGF0IHN0YXRlICVpICgldXVzICVzKVxuIiwKKwkJICAgZGF0YS0+c3RhdGUsIFRPX1VTKGV2LmR1cmF0aW9uKSwgVE9fU1RSKGV2LnB1bHNlKSk7CisJZGF0YS0+c3RhdGUgPSBTVEFURV9JTkFDVElWRTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIHN0cnVjdCBpcl9yYXdfaGFuZGxlciByYzZfaGFuZGxlciA9IHsKKwkucHJvdG9jb2xzCT0gUkNfVFlQRV9SQzYsCisJLmRlY29kZQkJPSBpcl9yYzZfZGVjb2RlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgaXJfcmM2X2RlY29kZV9pbml0KHZvaWQpCit7CisJaXJfcmF3X2hhbmRsZXJfcmVnaXN0ZXIoJnJjNl9oYW5kbGVyKTsKKworCXByaW50ayhLRVJOX0lORk8gIklSIFJDNiBwcm90b2NvbCBoYW5kbGVyIGluaXRpYWxpemVkXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGlyX3JjNl9kZWNvZGVfZXhpdCh2b2lkKQoreworCWlyX3Jhd19oYW5kbGVyX3VucmVnaXN0ZXIoJnJjNl9oYW5kbGVyKTsKK30KKworbW9kdWxlX2luaXQoaXJfcmM2X2RlY29kZV9pbml0KTsKK21vZHVsZV9leGl0KGlyX3JjNl9kZWNvZGVfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkRhdmlkIEjDpHJkZW1hbiA8ZGF2aWRAaGFyZGVtYW4ubnU+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlJDNiBJUiBwcm90b2NvbCBkZWNvZGVyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JjL2lyLXNvbnktZGVjb2Rlci5jIGIvZHJpdmVycy9tZWRpYS9yYy9pci1zb255LWRlY29kZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTJkZTgwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9pci1zb255LWRlY29kZXIuYwpAQCAtMCwwICsxLDE4MSBAQAorLyogaXItc29ueS1kZWNvZGVyLmMgLSBoYW5kbGUgU29ueSBJUiBQdWxzZS9TcGFjZSBwcm90b2NvbAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBieSBEYXZpZCBIw6RyZGVtYW4gPGRhdmlkQGhhcmRlbWFuLm51PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvYml0cmV2Lmg+CisjaW5jbHVkZSAicmMtY29yZS1wcml2LmgiCisKKyNkZWZpbmUgU09OWV9VTklUCQk2MDAwMDAgLyogbnMgKi8KKyNkZWZpbmUgU09OWV9IRUFERVJfUFVMU0UJKDQgKiBTT05ZX1VOSVQpCisjZGVmaW5lCVNPTllfSEVBREVSX1NQQUNFCSgxICogU09OWV9VTklUKQorI2RlZmluZSBTT05ZX0JJVF8wX1BVTFNFCSgxICogU09OWV9VTklUKQorI2RlZmluZSBTT05ZX0JJVF8xX1BVTFNFCSgyICogU09OWV9VTklUKQorI2RlZmluZSBTT05ZX0JJVF9TUEFDRQkJKDEgKiBTT05ZX1VOSVQpCisjZGVmaW5lIFNPTllfVFJBSUxFUl9TUEFDRQkoMTAgKiBTT05ZX1VOSVQpIC8qIG1pbmltdW0gKi8KKworZW51bSBzb255X3N0YXRlIHsKKwlTVEFURV9JTkFDVElWRSwKKwlTVEFURV9IRUFERVJfU1BBQ0UsCisJU1RBVEVfQklUX1BVTFNFLAorCVNUQVRFX0JJVF9TUEFDRSwKKwlTVEFURV9GSU5JU0hFRCwKK307CisKKy8qKgorICogaXJfc29ueV9kZWNvZGUoKSAtIERlY29kZSBvbmUgU29ueSBwdWxzZSBvciBzcGFjZQorICogQGRldjoJdGhlIHN0cnVjdCByY19kZXYgZGVzY3JpcHRvciBvZiB0aGUgZGV2aWNlCisgKiBAZXY6ICAgICAgICAgdGhlIHN0cnVjdCBpcl9yYXdfZXZlbnQgZGVzY3JpcHRvciBvZiB0aGUgcHVsc2Uvc3BhY2UKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgLUVJTlZBTCBpZiB0aGUgcHVsc2UgdmlvbGF0ZXMgdGhlIHN0YXRlIG1hY2hpbmUKKyAqLworc3RhdGljIGludCBpcl9zb255X2RlY29kZShzdHJ1Y3QgcmNfZGV2ICpkZXYsIHN0cnVjdCBpcl9yYXdfZXZlbnQgZXYpCit7CisJc3RydWN0IHNvbnlfZGVjICpkYXRhID0gJmRldi0+cmF3LT5zb255OworCXUzMiBzY2FuY29kZTsKKwl1OCBkZXZpY2UsIHN1YmRldmljZSwgZnVuY3Rpb247CisKKwlpZiAoIShkZXYtPnJhdy0+ZW5hYmxlZF9wcm90b2NvbHMgJiBSQ19UWVBFX1NPTlkpKQorCQlyZXR1cm4gMDsKKworCWlmICghaXNfdGltaW5nX2V2ZW50KGV2KSkgeworCQlpZiAoZXYucmVzZXQpCisJCQlkYXRhLT5zdGF0ZSA9IFNUQVRFX0lOQUNUSVZFOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIWdlcV9tYXJnaW4oZXYuZHVyYXRpb24sIFNPTllfVU5JVCwgU09OWV9VTklUIC8gMikpCisJCWdvdG8gb3V0OworCisJSVJfZHByaW50aygyLCAiU29ueSBkZWNvZGUgc3RhcnRlZCBhdCBzdGF0ZSAlZCAoJXV1cyAlcylcbiIsCisJCSAgIGRhdGEtPnN0YXRlLCBUT19VUyhldi5kdXJhdGlvbiksIFRPX1NUUihldi5wdWxzZSkpOworCisJc3dpdGNoIChkYXRhLT5zdGF0ZSkgeworCisJY2FzZSBTVEFURV9JTkFDVElWRToKKwkJaWYgKCFldi5wdWxzZSkKKwkJCWJyZWFrOworCisJCWlmICghZXFfbWFyZ2luKGV2LmR1cmF0aW9uLCBTT05ZX0hFQURFUl9QVUxTRSwgU09OWV9VTklUIC8gMikpCisJCQlicmVhazsKKworCQlkYXRhLT5jb3VudCA9IDA7CisJCWRhdGEtPnN0YXRlID0gU1RBVEVfSEVBREVSX1NQQUNFOworCQlyZXR1cm4gMDsKKworCWNhc2UgU1RBVEVfSEVBREVSX1NQQUNFOgorCQlpZiAoZXYucHVsc2UpCisJCQlicmVhazsKKworCQlpZiAoIWVxX21hcmdpbihldi5kdXJhdGlvbiwgU09OWV9IRUFERVJfU1BBQ0UsIFNPTllfVU5JVCAvIDIpKQorCQkJYnJlYWs7CisKKwkJZGF0YS0+c3RhdGUgPSBTVEFURV9CSVRfUFVMU0U7CisJCXJldHVybiAwOworCisJY2FzZSBTVEFURV9CSVRfUFVMU0U6CisJCWlmICghZXYucHVsc2UpCisJCQlicmVhazsKKworCQlkYXRhLT5iaXRzIDw8PSAxOworCQlpZiAoZXFfbWFyZ2luKGV2LmR1cmF0aW9uLCBTT05ZX0JJVF8xX1BVTFNFLCBTT05ZX1VOSVQgLyAyKSkKKwkJCWRhdGEtPmJpdHMgfD0gMTsKKwkJZWxzZSBpZiAoIWVxX21hcmdpbihldi5kdXJhdGlvbiwgU09OWV9CSVRfMF9QVUxTRSwgU09OWV9VTklUIC8gMikpCisJCQlicmVhazsKKworCQlkYXRhLT5jb3VudCsrOworCQlkYXRhLT5zdGF0ZSA9IFNUQVRFX0JJVF9TUEFDRTsKKwkJcmV0dXJuIDA7CisKKwljYXNlIFNUQVRFX0JJVF9TUEFDRToKKwkJaWYgKGV2LnB1bHNlKQorCQkJYnJlYWs7CisKKwkJaWYgKCFnZXFfbWFyZ2luKGV2LmR1cmF0aW9uLCBTT05ZX0JJVF9TUEFDRSwgU09OWV9VTklUIC8gMikpCisJCQlicmVhazsKKworCQlkZWNyZWFzZV9kdXJhdGlvbigmZXYsIFNPTllfQklUX1NQQUNFKTsKKworCQlpZiAoIWdlcV9tYXJnaW4oZXYuZHVyYXRpb24sIFNPTllfVU5JVCwgU09OWV9VTklUIC8gMikpIHsKKwkJCWRhdGEtPnN0YXRlID0gU1RBVEVfQklUX1BVTFNFOworCQkJcmV0dXJuIDA7CisJCX0KKworCQlkYXRhLT5zdGF0ZSA9IFNUQVRFX0ZJTklTSEVEOworCQkvKiBGYWxsIHRocm91Z2ggKi8KKworCWNhc2UgU1RBVEVfRklOSVNIRUQ6CisJCWlmIChldi5wdWxzZSkKKwkJCWJyZWFrOworCisJCWlmICghZ2VxX21hcmdpbihldi5kdXJhdGlvbiwgU09OWV9UUkFJTEVSX1NQQUNFLCBTT05ZX1VOSVQgLyAyKSkKKwkJCWJyZWFrOworCisJCXN3aXRjaCAoZGF0YS0+Y291bnQpIHsKKwkJY2FzZSAxMjoKKwkJCWRldmljZSAgICA9IGJpdHJldjgoKGRhdGEtPmJpdHMgPDwgIDMpICYgMHhGOCk7CisJCQlzdWJkZXZpY2UgPSAwOworCQkJZnVuY3Rpb24gID0gYml0cmV2OCgoZGF0YS0+Yml0cyA+PiAgNCkgJiAweEZFKTsKKwkJCWJyZWFrOworCQljYXNlIDE1OgorCQkJZGV2aWNlICAgID0gYml0cmV2OCgoZGF0YS0+Yml0cyA+PiAgMCkgJiAweEZGKTsKKwkJCXN1YmRldmljZSA9IDA7CisJCQlmdW5jdGlvbiAgPSBiaXRyZXY4KChkYXRhLT5iaXRzID4+ICA3KSAmIDB4RkQpOworCQkJYnJlYWs7CisJCWNhc2UgMjA6CisJCQlkZXZpY2UgICAgPSBiaXRyZXY4KChkYXRhLT5iaXRzID4+ICA1KSAmIDB4RjgpOworCQkJc3ViZGV2aWNlID0gYml0cmV2OCgoZGF0YS0+Yml0cyA+PiAgMCkgJiAweEZGKTsKKwkJCWZ1bmN0aW9uICA9IGJpdHJldjgoKGRhdGEtPmJpdHMgPj4gMTIpICYgMHhGRSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCUlSX2RwcmludGsoMSwgIlNvbnkgaW52YWxpZCBiaXRjb3VudCAldVxuIiwgZGF0YS0+Y291bnQpOworCQkJZ290byBvdXQ7CisJCX0KKworCQlzY2FuY29kZSA9IGRldmljZSA8PCAxNiB8IHN1YmRldmljZSA8PCA4IHwgZnVuY3Rpb247CisJCUlSX2RwcmludGsoMSwgIlNvbnkoJXUpIHNjYW5jb2RlIDB4JTA1eFxuIiwgZGF0YS0+Y291bnQsIHNjYW5jb2RlKTsKKwkJcmNfa2V5ZG93bihkZXYsIHNjYW5jb2RlLCAwKTsKKwkJZGF0YS0+c3RhdGUgPSBTVEFURV9JTkFDVElWRTsKKwkJcmV0dXJuIDA7CisJfQorCitvdXQ6CisJSVJfZHByaW50aygxLCAiU29ueSBkZWNvZGUgZmFpbGVkIGF0IHN0YXRlICVkICgldXVzICVzKVxuIiwKKwkJICAgZGF0YS0+c3RhdGUsIFRPX1VTKGV2LmR1cmF0aW9uKSwgVE9fU1RSKGV2LnB1bHNlKSk7CisJZGF0YS0+c3RhdGUgPSBTVEFURV9JTkFDVElWRTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIHN0cnVjdCBpcl9yYXdfaGFuZGxlciBzb255X2hhbmRsZXIgPSB7CisJLnByb3RvY29scwk9IFJDX1RZUEVfU09OWSwKKwkuZGVjb2RlCQk9IGlyX3NvbnlfZGVjb2RlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgaXJfc29ueV9kZWNvZGVfaW5pdCh2b2lkKQoreworCWlyX3Jhd19oYW5kbGVyX3JlZ2lzdGVyKCZzb255X2hhbmRsZXIpOworCisJcHJpbnRrKEtFUk5fSU5GTyAiSVIgU29ueSBwcm90b2NvbCBoYW5kbGVyIGluaXRpYWxpemVkXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGlyX3NvbnlfZGVjb2RlX2V4aXQodm9pZCkKK3sKKwlpcl9yYXdfaGFuZGxlcl91bnJlZ2lzdGVyKCZzb255X2hhbmRsZXIpOworfQorCittb2R1bGVfaW5pdChpcl9zb255X2RlY29kZV9pbml0KTsKK21vZHVsZV9leGl0KGlyX3NvbnlfZGVjb2RlX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJEYXZpZCBIw6RyZGVtYW4gPGRhdmlkQGhhcmRlbWFuLm51PiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTb255IElSIHByb3RvY29sIGRlY29kZXIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU2MTVmZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9LY29uZmlnCkBAIC0wLDAgKzEsMTUgQEAKK2NvbmZpZyBSQ19NQVAKKwl0cmlzdGF0ZSAiQ29tcGlsZSBSZW1vdGUgQ29udHJvbGxlciBrZXltYXAgbW9kdWxlcyIKKwlkZXBlbmRzIG9uIFJDX0NPUkUKKwlkZWZhdWx0IHkKKworCS0tLWhlbHAtLS0KKwkgICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBjb21waWxhdGlvbiBvZiBsb3RzIG9mIFJlbW90ZQorCSAgIENvbnRyb2xsZXIgdGFibGVzLiBUaGV5IGFyZSBzaG9ydCB0YWJsZXMsIGJ1dCBpZiB5b3UKKwkgICBkb24ndCB1c2UgYSByZW1vdGUgY29udHJvbGxlciwgb3IgcHJlZmVyIHRvIGxvYWQgdGhlCisJICAgdGFibGVzIG9uIHVzZXJzcGFjZSwgeW91IHNob3VsZCBkaXNhYmxlIGl0LgorCisJICAgVGhlIGlyLWtleXRhYmxlIHByb2dyYW0sIGF2YWlsYWJsZSBhdCB2NGwtdXRpbHMgcGFja2FnZQorCSAgIHByb3ZpZGUgdGhlIHRvb2wgYW5kIHRoZSBzYW1lIFJDIG1hcHMgZm9yIGxvYWQgZnJvbQorCSAgIHVzZXJzcGFjZS4gSXRzIGF2YWlsYWJsZSBhdAorCQkJaHR0cDovL2dpdC5saW51eHR2Lm9yZy92NGwtdXRpbHMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjU5ZTlmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL01ha2VmaWxlCkBAIC0wLDAgKzEsODggQEAKK29iai0kKENPTkZJR19SQ19NQVApICs9IHJjLWFkc3RlY2gtZHZiLXQtcGNpLm8gXAorCQkJcmMtYWxpbmstZHR1LW0ubyBcCisJCQlyYy1hbnlzZWUubyBcCisJCQlyYy1hcGFjLXZpZXdjb21wLm8gXAorCQkJcmMtYXN1cy1wYzM5Lm8gXAorCQkJcmMtYXRpLXR2LXdvbmRlci1oZC02MDAubyBcCisJCQlyYy1hdmVybWVkaWEtYTE2ZC5vIFwKKwkJCXJjLWF2ZXJtZWRpYS5vIFwKKwkJCXJjLWF2ZXJtZWRpYS1jYXJkYnVzLm8gXAorCQkJcmMtYXZlcm1lZGlhLWR2YnQubyBcCisJCQlyYy1hdmVybWVkaWEtbTEzNWEubyBcCisJCQlyYy1hdmVybWVkaWEtbTczM2Etcm0tazYubyBcCisJCQlyYy1hdmVybWVkaWEtcm0ta3MubyBcCisJCQlyYy1hdmVydHYtMzAzLm8gXAorCQkJcmMtYXp1cmV3YXZlLWFkLXR1NzAwLm8gXAorCQkJcmMtYmVob2xkLm8gXAorCQkJcmMtYmVob2xkLWNvbHVtYnVzLm8gXAorCQkJcmMtYnVkZ2V0LWNpLW9sZC5vIFwKKwkJCXJjLWNpbmVyZ3ktMTQwMC5vIFwKKwkJCXJjLWNpbmVyZ3kubyBcCisJCQlyYy1kaWIwNzAwLW5lYy5vIFwKKwkJCXJjLWRpYjA3MDAtcmM1Lm8gXAorCQkJcmMtZGlnaXRhbG5vdy10aW55dHdpbi5vIFwKKwkJCXJjLWRpZ2l0dHJhZGUubyBcCisJCQlyYy1kbTExMDUtbmVjLm8gXAorCQkJcmMtZG50di1saXZlLWR2Yi10Lm8gXAorCQkJcmMtZG50di1saXZlLWR2YnQtcHJvLm8gXAorCQkJcmMtZW0tdGVycmF0ZWMubyBcCisJCQlyYy1lbmNvcmUtZW5sdHYyLm8gXAorCQkJcmMtZW5jb3JlLWVubHR2Lm8gXAorCQkJcmMtZW5jb3JlLWVubHR2LWZtNTMubyBcCisJCQlyYy1ldmdhLWluZHR1YmUubyBcCisJCQlyYy1lenR2Lm8gXAorCQkJcmMtZmx5ZHZiLm8gXAorCQkJcmMtZmx5dmlkZW8ubyBcCisJCQlyYy1mdXNpb25oZHR2LW1jZS5vIFwKKwkJCXJjLWdhZG1laS1ybTAwOHoubyBcCisJCQlyYy1nZW5pdXMtdHZnby1hMTFtY2UubyBcCisJCQlyYy1nb3R2aWV3NzEzNS5vIFwKKwkJCXJjLWhhdXBwYXVnZS1uZXcubyBcCisJCQlyYy1pbW9uLW1jZS5vIFwKKwkJCXJjLWltb24tcGFkLm8gXAorCQkJcmMtaW9kYXRhLWJjdHY3ZS5vIFwKKwkJCXJjLWthaW9teS5vIFwKKwkJCXJjLWt3b3JsZC0zMTV1Lm8gXAorCQkJcmMta3dvcmxkLXBsdXMtdHYtYW5hbG9nLm8gXAorCQkJcmMtbGVhZHRlay15MDRnMDA1MS5vIFwKKwkJCXJjLWxpcmMubyBcCisJCQlyYy1sbWUyNTEwLm8gXAorCQkJcmMtbWFubGkubyBcCisJCQlyYy1tc2ktZGlnaXZveC1paS5vIFwKKwkJCXJjLW1zaS1kaWdpdm94LWlpaS5vIFwKKwkJCXJjLW1zaS10dmFueXdoZXJlLm8gXAorCQkJcmMtbXNpLXR2YW55d2hlcmUtcGx1cy5vIFwKKwkJCXJjLW5lYnVsYS5vIFwKKwkJCXJjLW5lYy10ZXJyYXRlYy1jaW5lcmd5LXhzLm8gXAorCQkJcmMtbm9yd29vZC5vIFwKKwkJCXJjLW5wZ3RlY2gubyBcCisJCQlyYy1wY3R2LXNlZG5hLm8gXAorCQkJcmMtcGlubmFjbGUtY29sb3IubyBcCisJCQlyYy1waW5uYWNsZS1ncmV5Lm8gXAorCQkJcmMtcGlubmFjbGUtcGN0di1oZC5vIFwKKwkJCXJjLXBpeGVsdmlldy5vIFwKKwkJCXJjLXBpeGVsdmlldy1tazEyLm8gXAorCQkJcmMtcGl4ZWx2aWV3LTAwMnQubyBcCisJCQlyYy1waXhlbHZpZXctbmV3Lm8gXAorCQkJcmMtcG93ZXJjb2xvci1yZWFsLWFuZ2VsLm8gXAorCQkJcmMtcHJvdGV1cy0yMzA5Lm8gXAorCQkJcmMtcHVycGxldHYubyBcCisJCQlyYy1wdjk1MS5vIFwKKwkJCXJjLXJjNS1oYXVwcGF1Z2UtbmV3Lm8gXAorCQkJcmMtcmM1LXR2Lm8gXAorCQkJcmMtcmM2LW1jZS5vIFwKKwkJCXJjLXJlYWwtYXVkaW8tMjIwLTMyLWtleXMubyBcCisJCQlyYy1zdHJlYW16YXAubyBcCisJCQlyYy10YnMtbmVjLm8gXAorCQkJcmMtdGVycmF0ZWMtY2luZXJneS14cy5vIFwKKwkJCXJjLXRlcnJhdGVjLXNsaW0ubyBcCisJCQlyYy10ZXZpaS1uZWMubyBcCisJCQlyYy10b3RhbC1tZWRpYS1pbi1oYW5kLm8gXAorCQkJcmMtdHJla3N0b3IubyBcCisJCQlyYy10dC0xNTAwLm8gXAorCQkJcmMtdHdpbmhhbjEwMjcubyBcCisJCQlyYy12aWRlb21hdGUtbTFmLm8gXAorCQkJcmMtdmlkZW9tYXRlLXMzNTAubyBcCisJCQlyYy12aWRlb21hdGUtdHYtcHZyLm8gXAorCQkJcmMtd2luZmFzdC5vIFwKKwkJCXJjLXdpbmZhc3QtdXNiaWktZGVsdXhlLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1hZHN0ZWNoLWR2Yi10LXBjaS5jIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLWFkc3RlY2gtZHZiLXQtcGNpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM2ZDM5NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1hZHN0ZWNoLWR2Yi10LXBjaS5jCkBAIC0wLDAgKzEsODkgQEAKKy8qIGFkc3RlY2gtZHZiLXQtcGNpLmggLSBLZXl0YWJsZSBmb3IgYWRzdGVjaF9kdmJfdF9wY2kgUmVtb3RlIENvbnRyb2xsZXIKKyAqCisgKiBrZXltYXAgaW1wb3J0ZWQgZnJvbSBpci1rZXltYXBzLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgYnkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bWVkaWEvcmMtbWFwLmg+CisKKy8qIEFEUyBUZWNoIEluc3RhbnQgVFYgRFZCLVQgUENJIFJlbW90ZSAqLworCitzdGF0aWMgc3RydWN0IHJjX21hcF90YWJsZSBhZHN0ZWNoX2R2Yl90X3BjaVtdID0geworCS8qIEtleXMgMCB0byA5ICovCisJeyAweDRkLCBLRVlfMCB9LAorCXsgMHg1NywgS0VZXzEgfSwKKwl7IDB4NGYsIEtFWV8yIH0sCisJeyAweDUzLCBLRVlfMyB9LAorCXsgMHg1NiwgS0VZXzQgfSwKKwl7IDB4NGUsIEtFWV81IH0sCisJeyAweDVlLCBLRVlfNiB9LAorCXsgMHg1NCwgS0VZXzcgfSwKKwl7IDB4NGMsIEtFWV84IH0sCisJeyAweDVjLCBLRVlfOSB9LAorCisJeyAweDViLCBLRVlfUE9XRVIgfSwKKwl7IDB4NWYsIEtFWV9NVVRFIH0sCisJeyAweDU1LCBLRVlfR09UTyB9LAorCXsgMHg1ZCwgS0VZX1NFQVJDSCB9LAorCXsgMHgxNywgS0VZX0VQRyB9LAkJLyogR3VpZGUgKi8KKwl7IDB4MWYsIEtFWV9NRU5VIH0sCisJeyAweDBmLCBLRVlfVVAgfSwKKwl7IDB4NDYsIEtFWV9ET1dOIH0sCisJeyAweDE2LCBLRVlfTEVGVCB9LAorCXsgMHgxZSwgS0VZX1JJR0hUIH0sCisJeyAweDBlLCBLRVlfU0VMRUNUIH0sCQkvKiBFbnRlciAqLworCXsgMHg1YSwgS0VZX0lORk8gfSwKKwl7IDB4NTIsIEtFWV9FWElUIH0sCisJeyAweDU5LCBLRVlfUFJFVklPVVMgfSwKKwl7IDB4NTEsIEtFWV9ORVhUIH0sCisJeyAweDU4LCBLRVlfUkVXSU5EIH0sCisJeyAweDUwLCBLRVlfRk9SV0FSRCB9LAorCXsgMHg0NCwgS0VZX1BMQVlQQVVTRSB9LAorCXsgMHgwNywgS0VZX1NUT1AgfSwKKwl7IDB4MWIsIEtFWV9SRUNPUkQgfSwKKwl7IDB4MTMsIEtFWV9UVU5FUiB9LAkJLyogTGl2ZSAqLworCXsgMHgwYSwgS0VZX0EgfSwKKwl7IDB4MTIsIEtFWV9CIH0sCisJeyAweDAzLCBLRVlfUFJPRzEgfSwJCS8qIDEgKi8KKwl7IDB4MDEsIEtFWV9QUk9HMiB9LAkJLyogMiAqLworCXsgMHgwMCwgS0VZX1BST0czIH0sCQkvKiAzICovCisJeyAweDA2LCBLRVlfRFZEIH0sCisJeyAweDQ4LCBLRVlfQVVYIH0sCQkvKiBQaG90byAqLworCXsgMHg0MCwgS0VZX1ZJREVPIH0sCisJeyAweDE5LCBLRVlfQVVESU8gfSwJCS8qIE11c2ljICovCisJeyAweDBiLCBLRVlfQ0hBTk5FTFVQIH0sCisJeyAweDA4LCBLRVlfQ0hBTk5FTERPV04gfSwKKwl7IDB4MTUsIEtFWV9WT0xVTUVVUCB9LAorCXsgMHgxYywgS0VZX1ZPTFVNRURPV04gfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmNfbWFwX2xpc3QgYWRzdGVjaF9kdmJfdF9wY2lfbWFwID0geworCS5tYXAgPSB7CisJCS5zY2FuICAgID0gYWRzdGVjaF9kdmJfdF9wY2ksCisJCS5zaXplICAgID0gQVJSQVlfU0laRShhZHN0ZWNoX2R2Yl90X3BjaSksCisJCS5yY190eXBlID0gUkNfVFlQRV9VTktOT1dOLAkvKiBMZWdhY3kgSVIgdHlwZSAqLworCQkubmFtZSAgICA9IFJDX01BUF9BRFNURUNIX0RWQl9UX1BDSSwKKwl9Cit9OworCitzdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcF9hZHN0ZWNoX2R2Yl90X3BjaSh2b2lkKQoreworCXJldHVybiByY19tYXBfcmVnaXN0ZXIoJmFkc3RlY2hfZHZiX3RfcGNpX21hcCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3JjX21hcF9hZHN0ZWNoX2R2Yl90X3BjaSh2b2lkKQoreworCXJjX21hcF91bnJlZ2lzdGVyKCZhZHN0ZWNoX2R2Yl90X3BjaV9tYXApOworfQorCittb2R1bGVfaW5pdChpbml0X3JjX21hcF9hZHN0ZWNoX2R2Yl90X3BjaSkKK21vZHVsZV9leGl0KGV4aXRfcmNfbWFwX2Fkc3RlY2hfZHZiX3RfcGNpKQorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1hbGluay1kdHUtbS5jIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLWFsaW5rLWR0dS1tLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU2NTJlOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1hbGluay1kdHUtbS5jCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBBLUxpbmsgRFRVKG0pIHJlbW90ZSBjb250cm9sbGVyIGtleXRhYmxlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFudHRpIFBhbG9zYWFyaSA8Y3JvcGVAaWtpLmZpPgorICoKKyAqICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogICAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqICAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKi8KKworI2luY2x1ZGUgPG1lZGlhL3JjLW1hcC5oPgorCisvKiBBLUxpbmsgRFRVKG0pIHNsaW0gcmVtb3RlLCA2IHJvd3MsIDMgY29sdW1ucy4gKi8KK3N0YXRpYyBzdHJ1Y3QgcmNfbWFwX3RhYmxlIGFsaW5rX2R0dV9tW10gPSB7CisJeyAweDA4MDAsIEtFWV9WT0xVTUVVUCB9LAorCXsgMHgwODAxLCBLRVlfMSB9LAorCXsgMHgwODAyLCBLRVlfMyB9LAorCXsgMHgwODAzLCBLRVlfNyB9LAorCXsgMHgwODA0LCBLRVlfOSB9LAorCXsgMHgwODA1LCBLRVlfTkVXIH0sICAgICAgICAgICAgIC8qIHN5bWJvbDogUElQICovCisJeyAweDA4MDYsIEtFWV8wIH0sCisJeyAweDA4MDcsIEtFWV9DSEFOTkVMIH0sICAgICAgICAgLyogSlVNUCAqLworCXsgMHgwODBkLCBLRVlfNSB9LAorCXsgMHgwODBmLCBLRVlfMiB9LAorCXsgMHgwODEyLCBLRVlfUE9XRVIyIH0sCisJeyAweDA4MTQsIEtFWV9DSEFOTkVMVVAgfSwKKwl7IDB4MDgxNiwgS0VZX1ZPTFVNRURPV04gfSwKKwl7IDB4MDgxOCwgS0VZXzYgfSwKKwl7IDB4MDgxYSwgS0VZX01VVEUgfSwKKwl7IDB4MDgxYiwgS0VZXzggfSwKKwl7IDB4MDgxYywgS0VZXzQgfSwKKwl7IDB4MDgxZCwgS0VZX0NIQU5ORUxET1dOIH0sCit9OworCitzdGF0aWMgc3RydWN0IHJjX21hcF9saXN0IGFsaW5rX2R0dV9tX21hcCA9IHsKKwkubWFwID0geworCQkuc2NhbiAgICA9IGFsaW5rX2R0dV9tLAorCQkuc2l6ZSAgICA9IEFSUkFZX1NJWkUoYWxpbmtfZHR1X20pLAorCQkucmNfdHlwZSA9IFJDX1RZUEVfTkVDLAorCQkubmFtZSAgICA9IFJDX01BUF9BTElOS19EVFVfTSwKKwl9Cit9OworCitzdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcF9hbGlua19kdHVfbSh2b2lkKQoreworCXJldHVybiByY19tYXBfcmVnaXN0ZXIoJmFsaW5rX2R0dV9tX21hcCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3JjX21hcF9hbGlua19kdHVfbSh2b2lkKQoreworCXJjX21hcF91bnJlZ2lzdGVyKCZhbGlua19kdHVfbV9tYXApOworfQorCittb2R1bGVfaW5pdChpbml0X3JjX21hcF9hbGlua19kdHVfbSkKK21vZHVsZV9leGl0KGV4aXRfcmNfbWFwX2FsaW5rX2R0dV9tKQorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJBbnR0aSBQYWxvc2FhcmkgPGNyb3BlQGlraS5maT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1hbnlzZWUuYyBiL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1hbnlzZWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODRmMWI1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLWFueXNlZS5jCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiBBbnlzZWUgcmVtb3RlIGNvbnRyb2xsZXIga2V5dGFibGUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQW50dGkgUGFsb3NhYXJpIDxjcm9wZUBpa2kuZmk+CisgKgorICogICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiAgICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bWVkaWEvcmMtbWFwLmg+CisKK3N0YXRpYyBzdHJ1Y3QgcmNfbWFwX3RhYmxlIGFueXNlZVtdID0geworCXsgMHgwODAwLCBLRVlfMCB9LAorCXsgMHgwODAxLCBLRVlfMSB9LAorCXsgMHgwODAyLCBLRVlfMiB9LAorCXsgMHgwODAzLCBLRVlfMyB9LAorCXsgMHgwODA0LCBLRVlfNCB9LAorCXsgMHgwODA1LCBLRVlfNSB9LAorCXsgMHgwODA2LCBLRVlfNiB9LAorCXsgMHgwODA3LCBLRVlfNyB9LAorCXsgMHgwODA4LCBLRVlfOCB9LAorCXsgMHgwODA5LCBLRVlfOSB9LAorCXsgMHgwODBhLCBLRVlfUE9XRVIyIH0sICAgICAgICAgIC8qIFtyZWQgcG93ZXIgYnV0dG9uXSAqLworCXsgMHgwODBiLCBLRVlfVklERU8gfSwgICAgICAgICAgIC8qIFsqXSBNT0RFICovCisJeyAweDA4MGMsIEtFWV9DSEFOTkVMIH0sICAgICAgICAgLyogW3N5bWJvbCBjb3VudGVyY2xvY2t3aXNlIGFycm93XSAqLworCXsgMHgwODBkLCBLRVlfTkVYVCB9LCAgICAgICAgICAgIC8qIFs+PnxdICovCisJeyAweDA4MGUsIEtFWV9NRU5VIH0sICAgICAgICAgICAgLyogTUVOVSAqLworCXsgMHgwODBmLCBLRVlfRVBHIH0sICAgICAgICAgICAgIC8qIFtFUEddICovCisJeyAweDA4MTAsIEtFWV9DTEVBUiB9LCAgICAgICAgICAgLyogRVhJVCAqLworCXsgMHgwODExLCBLRVlfQ0hBTk5FTFVQIH0sCisJeyAweDA4MTIsIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweDA4MTMsIEtFWV9WT0xVTUVVUCB9LAorCXsgMHgwODE0LCBLRVlfQ0hBTk5FTERPV04gfSwKKwl7IDB4MDgxNSwgS0VZX09LIH0sCisJeyAweDA4MTYsIEtFWV9SQURJTyB9LCAgICAgICAgICAgLyogW3N5bWJvbCBUVi9yYWRpb10gKi8KKwl7IDB4MDgxNywgS0VZX0lORk8gfSwgICAgICAgICAgICAvKiBbaV0gKi8KKwl7IDB4MDgxOCwgS0VZX1BSRVZJT1VTIH0sICAgICAgICAvKiBbfDw8XSAqLworCXsgMHgwODE5LCBLRVlfRkFWT1JJVEVTIH0sICAgICAgIC8qIEZBVi4gKi8KKwl7IDB4MDgxYSwgS0VZX1NVQlRJVExFIH0sICAgICAgICAvKiBTdWJ0aXRsZSAqLworCXsgMHgwODFiLCBLRVlfQ0FNRVJBIH0sICAgICAgICAgIC8qIFtzeW1ib2wgY2FtZXJhXSAqLworCXsgMHgwODFjLCBLRVlfWUVMTE9XIH0sCisJeyAweDA4MWQsIEtFWV9SRUQgfSwKKwl7IDB4MDgxZSwgS0VZX0xBTkdVQUdFIH0sICAgICAgICAvKiBbc3ltYm9sIFNlY29uZCBBdWRpbyBQcm9ncmFtXSAqLworCXsgMHgwODFmLCBLRVlfR1JFRU4gfSwKKwl7IDB4MDgyMCwgS0VZX1NMRUVQIH0sICAgICAgICAgICAvKiBTbGVlcCAqLworCXsgMHgwODIxLCBLRVlfU0NSRUVOIH0sICAgICAgICAgIC8qIDE2OjkgLyA0OjMgKi8KKwl7IDB4MDgyMiwgS0VZX1pPT00gfSwgICAgICAgICAgICAvKiBTSVpFICovCisJeyAweDA4MjQsIEtFWV9GTiB9LCAgICAgICAgICAgICAgLyogW0YxXSAqLworCXsgMHgwODI1LCBLRVlfRk4gfSwgICAgICAgICAgICAgIC8qIFtGMl0gKi8KKwl7IDB4MDg0MiwgS0VZX01VVEUgfSwgICAgICAgICAgICAvKiBzeW1ib2wgbXV0ZSAqLworCXsgMHgwODQ0LCBLRVlfQkxVRSB9LAorCXsgMHgwODQ3LCBLRVlfVEVYVCB9LCAgICAgICAgICAgIC8qIFRFWFQgKi8KKwl7IDB4MDg0OCwgS0VZX1NUT1AgfSwKKwl7IDB4MDg0OSwgS0VZX1JFQ09SRCB9LAorCXsgMHgwODUwLCBLRVlfUExBWSB9LAorCXsgMHgwODUxLCBLRVlfUEFVU0UgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmNfbWFwX2xpc3QgYW55c2VlX21hcCA9IHsKKwkubWFwID0geworCQkuc2NhbiAgICA9IGFueXNlZSwKKwkJLnNpemUgICAgPSBBUlJBWV9TSVpFKGFueXNlZSksCisJCS5yY190eXBlID0gUkNfVFlQRV9ORUMsCisJCS5uYW1lICAgID0gUkNfTUFQX0FOWVNFRSwKKwl9Cit9OworCitzdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcF9hbnlzZWUodm9pZCkKK3sKKwlyZXR1cm4gcmNfbWFwX3JlZ2lzdGVyKCZhbnlzZWVfbWFwKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGV4aXRfcmNfbWFwX2FueXNlZSh2b2lkKQoreworCXJjX21hcF91bnJlZ2lzdGVyKCZhbnlzZWVfbWFwKTsKK30KKworbW9kdWxlX2luaXQoaW5pdF9yY19tYXBfYW55c2VlKQorbW9kdWxlX2V4aXQoZXhpdF9yY19tYXBfYW55c2VlKQorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJBbnR0aSBQYWxvc2FhcmkgPGNyb3BlQGlraS5maT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1hcGFjLXZpZXdjb21wLmMgYi9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtYXBhYy12aWV3Y29tcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhZjE4ODIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtYXBhYy12aWV3Y29tcC5jCkBAIC0wLDAgKzEsODAgQEAKKy8qIGFwYWMtdmlld2NvbXAuaCAtIEtleXRhYmxlIGZvciBhcGFjX3ZpZXdjb21wIFJlbW90ZSBDb250cm9sbGVyCisgKgorICoga2V5bWFwIGltcG9ydGVkIGZyb20gaXIta2V5bWFwcy5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPG1lZGlhL3JjLW1hcC5oPgorCisvKiBBdHRpbGEgS29uZG9yb3MgPGF0dGlsYS5rb25kb3Jvc0BjaGVsbG8uaHU+ICovCisKK3N0YXRpYyBzdHJ1Y3QgcmNfbWFwX3RhYmxlIGFwYWNfdmlld2NvbXBbXSA9IHsKKworCXsgMHgwMSwgS0VZXzEgfSwKKwl7IDB4MDIsIEtFWV8yIH0sCisJeyAweDAzLCBLRVlfMyB9LAorCXsgMHgwNCwgS0VZXzQgfSwKKwl7IDB4MDUsIEtFWV81IH0sCisJeyAweDA2LCBLRVlfNiB9LAorCXsgMHgwNywgS0VZXzcgfSwKKwl7IDB4MDgsIEtFWV84IH0sCisJeyAweDA5LCBLRVlfOSB9LAorCXsgMHgwMCwgS0VZXzAgfSwKKwl7IDB4MTcsIEtFWV9MQVNUIH0sCQkvKiArMTAwICovCisJeyAweDBhLCBLRVlfTElTVCB9LAkJLyogcmVjYWxsICovCisKKworCXsgMHgxYywgS0VZX1RVTkVSIH0sCQkvKiBUVi9GTSAqLworCXsgMHgxNSwgS0VZX1NFQVJDSCB9LAkJLyogc2NhbiAqLworCXsgMHgxMiwgS0VZX1BPV0VSIH0sCQkvKiBwb3dlciAqLworCXsgMHgxZiwgS0VZX1ZPTFVNRURPV04gfSwJLyogdm9sIHVwICovCisJeyAweDFiLCBLRVlfVk9MVU1FVVAgfSwJCS8qIHZvbCBkb3duICovCisJeyAweDFlLCBLRVlfQ0hBTk5FTERPV04gfSwJLyogY2huIHVwICovCisJeyAweDFhLCBLRVlfQ0hBTk5FTFVQIH0sCS8qIGNobiBkb3duICovCisKKwl7IDB4MTEsIEtFWV9WSURFTyB9LAkJLyogdmlkZW8gKi8KKwl7IDB4MGYsIEtFWV9aT09NIH0sCQkvKiBmdWxsIHNjcmVlbiAqLworCXsgMHgxMywgS0VZX01VVEUgfSwJCS8qIG11dGUvdW5tdXRlICovCisJeyAweDEwLCBLRVlfVEVYVCB9LAkJLyogbWluICovCisKKwl7IDB4MGQsIEtFWV9TVE9QIH0sCQkvKiBmcmVlemUgKi8KKwl7IDB4MGUsIEtFWV9SRUNPUkQgfSwJCS8qIHJlY29yZCAqLworCXsgMHgxZCwgS0VZX1BMQVlQQVVTRSB9LAkvKiBzdG9wICovCisJeyAweDE5LCBLRVlfUExBWSB9LAkJLyogcGxheSAqLworCisJeyAweDE2LCBLRVlfR09UTyB9LAkJLyogb3NkICovCisJeyAweDE0LCBLRVlfUkVGUkVTSCB9LAkJLyogZGVmYXVsdCAqLworCXsgMHgwYywgS0VZX0tQUExVUyB9LAkJLyogZmluZSB0dW5lID4+Pj4gKi8KKwl7IDB4MTgsIEtFWV9LUE1JTlVTIH0sCQkvKiBmaW5lIHR1bmUgPDw8PCAqLworfTsKKworc3RhdGljIHN0cnVjdCByY19tYXBfbGlzdCBhcGFjX3ZpZXdjb21wX21hcCA9IHsKKwkubWFwID0geworCQkuc2NhbiAgICA9IGFwYWNfdmlld2NvbXAsCisJCS5zaXplICAgID0gQVJSQVlfU0laRShhcGFjX3ZpZXdjb21wKSwKKwkJLnJjX3R5cGUgPSBSQ19UWVBFX1VOS05PV04sCS8qIExlZ2FjeSBJUiB0eXBlICovCisJCS5uYW1lICAgID0gUkNfTUFQX0FQQUNfVklFV0NPTVAsCisJfQorfTsKKworc3RhdGljIGludCBfX2luaXQgaW5pdF9yY19tYXBfYXBhY192aWV3Y29tcCh2b2lkKQoreworCXJldHVybiByY19tYXBfcmVnaXN0ZXIoJmFwYWNfdmlld2NvbXBfbWFwKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGV4aXRfcmNfbWFwX2FwYWNfdmlld2NvbXAodm9pZCkKK3sKKwlyY19tYXBfdW5yZWdpc3RlcigmYXBhY192aWV3Y29tcF9tYXApOworfQorCittb2R1bGVfaW5pdChpbml0X3JjX21hcF9hcGFjX3ZpZXdjb21wKQorbW9kdWxlX2V4aXQoZXhpdF9yY19tYXBfYXBhY192aWV3Y29tcCkKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtYXN1cy1wYzM5LmMgYi9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtYXN1cy1wYzM5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI0ODExNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1hc3VzLXBjMzkuYwpAQCAtMCwwICsxLDkxIEBACisvKiBhc3VzLXBjMzkuaCAtIEtleXRhYmxlIGZvciBhc3VzX3BjMzkgUmVtb3RlIENvbnRyb2xsZXIKKyAqCisgKiBrZXltYXAgaW1wb3J0ZWQgZnJvbSBpci1rZXltYXBzLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgYnkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bWVkaWEvcmMtbWFwLmg+CisKKy8qCisgKiBNYXJjIEZhcmdhcyA8dGVsZW5pZWtvQHRlbGVuaWVrby5jb20+CisgKiB0aGlzIGlzIHRoZSByZW1vdGUgY29udHJvbCB0aGF0IGNvbWVzIHdpdGggdGhlIGFzdXMgcDcxMzEKKyAqIHdoaWNoIGhhcyBhIGxhYmVsIHNheWluZyBpcyAiTW9kZWwgUEMtMzkiCisgKi8KKworc3RhdGljIHN0cnVjdCByY19tYXBfdGFibGUgYXN1c19wYzM5W10gPSB7CisJLyogS2V5cyAwIHRvIDkgKi8KKwl7IDB4MDgyYSwgS0VZXzAgfSwKKwl7IDB4MDgxNiwgS0VZXzEgfSwKKwl7IDB4MDgxMiwgS0VZXzIgfSwKKwl7IDB4MDgxNCwgS0VZXzMgfSwKKwl7IDB4MDgzNiwgS0VZXzQgfSwKKwl7IDB4MDgzMiwgS0VZXzUgfSwKKwl7IDB4MDgzNCwgS0VZXzYgfSwKKwl7IDB4MDgwZSwgS0VZXzcgfSwKKwl7IDB4MDgwYSwgS0VZXzggfSwKKwl7IDB4MDgwYywgS0VZXzkgfSwKKworCXsgMHgwODAxLCBLRVlfUkFESU8gfSwJCS8qIHJhZGlvICovCisJeyAweDA4M2MsIEtFWV9NRU5VIH0sCQkvKiBkdmQvbWVudSAqLworCXsgMHgwODE1LCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4MDgyNiwgS0VZX1ZPTFVNRURPV04gfSwKKwl7IDB4MDgwOCwgS0VZX1VQIH0sCisJeyAweDA4MDQsIEtFWV9ET1dOIH0sCisJeyAweDA4MTgsIEtFWV9MRUZUIH0sCisJeyAweDA4MTAsIEtFWV9SSUdIVCB9LAorCXsgMHgwODFhLCBLRVlfVklERU8gfSwJCS8qIHZpZGVvICovCisJeyAweDA4MDYsIEtFWV9BVURJTyB9LAkJLyogbXVzaWMgKi8KKworCXsgMHgwODFlLCBLRVlfVFYgfSwJCS8qIHR2ICovCisJeyAweDA4MjIsIEtFWV9FWElUIH0sCQkvKiBiYWNrICovCisJeyAweDA4MzUsIEtFWV9DSEFOTkVMVVAgfSwJLyogY2hhbm5lbCAvIHByb2dyYW0gKyAqLworCXsgMHgwODI0LCBLRVlfQ0hBTk5FTERPV04gfSwJLyogY2hhbm5lbCAvIHByb2dyYW0gLSAqLworCXsgMHgwODI1LCBLRVlfRU5URVIgfSwJCS8qIGVudGVyICovCisKKwl7IDB4MDgzOSwgS0VZX1BBVVNFIH0sCQkvKiBwbGF5L3BhdXNlICovCisJeyAweDA4MjEsIEtFWV9QUkVWSU9VUyB9LAkJLyogcmV3ICovCisJeyAweDA4MTksIEtFWV9ORVhUIH0sCQkvKiBmb3J3YXJkICovCisJeyAweDA4MzEsIEtFWV9SRVdJTkQgfSwJCS8qIGJhY2t3YXJkIDw8ICovCisJeyAweDA4MDUsIEtFWV9GQVNURk9SV0FSRCB9LAkvKiBmb3J3YXJkID4+ICovCisJeyAweDA4MDksIEtFWV9TVE9QIH0sCisJeyAweDA4MTEsIEtFWV9SRUNPUkQgfSwJCS8qIHJlY29yZGluZyAqLworCXsgMHgwODI5LCBLRVlfUE9XRVIgfSwJCS8qIHRoZSBidXR0b24gdGhhdCByZWFkcyAiY2xvc2UiICovCisKKwl7IDB4MDgyZSwgS0VZX1pPT00gfSwJCS8qIGZ1bGwgc2NyZWVuICovCisJeyAweDA4MmMsIEtFWV9NQUNSTyB9LAkJLyogcmVjYWxsICovCisJeyAweDA4MWMsIEtFWV9IT01FIH0sCQkvKiBob21lICovCisJeyAweDA4M2EsIEtFWV9QVlIgfSwJCS8qIHBpY3R1cmUgKi8KKwl7IDB4MDgwMiwgS0VZX01VVEUgfSwJCS8qIG11dGUgKi8KKwl7IDB4MDgzZSwgS0VZX0RWRCB9LAkJLyogZHZkICovCit9OworCitzdGF0aWMgc3RydWN0IHJjX21hcF9saXN0IGFzdXNfcGMzOV9tYXAgPSB7CisJLm1hcCA9IHsKKwkJLnNjYW4gICAgPSBhc3VzX3BjMzksCisJCS5zaXplICAgID0gQVJSQVlfU0laRShhc3VzX3BjMzkpLAorCQkucmNfdHlwZSA9IFJDX1RZUEVfUkM1LAorCQkubmFtZSAgICA9IFJDX01BUF9BU1VTX1BDMzksCisJfQorfTsKKworc3RhdGljIGludCBfX2luaXQgaW5pdF9yY19tYXBfYXN1c19wYzM5KHZvaWQpCit7CisJcmV0dXJuIHJjX21hcF9yZWdpc3RlcigmYXN1c19wYzM5X21hcCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3JjX21hcF9hc3VzX3BjMzkodm9pZCkKK3sKKwlyY19tYXBfdW5yZWdpc3RlcigmYXN1c19wYzM5X21hcCk7Cit9CisKK21vZHVsZV9pbml0KGluaXRfcmNfbWFwX2FzdXNfcGMzOSkKK21vZHVsZV9leGl0KGV4aXRfcmNfbWFwX2FzdXNfcGMzOSkKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtYXRpLXR2LXdvbmRlci1oZC02MDAuYyBiL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1hdGktdHYtd29uZGVyLWhkLTYwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3NjZiMjQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtYXRpLXR2LXdvbmRlci1oZC02MDAuYwpAQCAtMCwwICsxLDY5IEBACisvKiBhdGktdHYtd29uZGVyLWhkLTYwMC5oIC0gS2V5dGFibGUgZm9yIGF0aV90dl93b25kZXJfaGRfNjAwIFJlbW90ZSBDb250cm9sbGVyCisgKgorICoga2V5bWFwIGltcG9ydGVkIGZyb20gaXIta2V5bWFwcy5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPG1lZGlhL3JjLW1hcC5oPgorCisvKiBBVEkgVFYgV29uZGVyIEhEIDYwMCBVU0IKKyAgIERldmluIEhlaXRtdWVsbGVyIDxkZXZpbi5oZWl0bXVlbGxlckBnbWFpbC5jb20+CisgKi8KKworc3RhdGljIHN0cnVjdCByY19tYXBfdGFibGUgYXRpX3R2X3dvbmRlcl9oZF82MDBbXSA9IHsKKwl7IDB4MDAsIEtFWV9SRUNPUkR9LAkJLyogUm93IDEgKi8KKwl7IDB4MDEsIEtFWV9QTEFZUEFVU0V9LAorCXsgMHgwMiwgS0VZX1NUT1B9LAorCXsgMHgwMywgS0VZX1BPV0VSfSwKKwl7IDB4MDQsIEtFWV9QUkVWSU9VU30sCS8qIFJvdyAyICovCisJeyAweDA1LCBLRVlfUkVXSU5EfSwKKwl7IDB4MDYsIEtFWV9GT1JXQVJEfSwKKwl7IDB4MDcsIEtFWV9ORVhUfSwKKwl7IDB4MDgsIEtFWV9FUEd9LAkJLyogUm93IDMgKi8KKwl7IDB4MDksIEtFWV9IT01FfSwKKwl7IDB4MGEsIEtFWV9NRU5VfSwKKwl7IDB4MGIsIEtFWV9DSEFOTkVMVVB9LAorCXsgMHgwYywgS0VZX0JBQ0t9LAkJLyogUm93IDQgKi8KKwl7IDB4MGQsIEtFWV9VUH0sCisJeyAweDBlLCBLRVlfSU5GT30sCisJeyAweDBmLCBLRVlfQ0hBTk5FTERPV059LAorCXsgMHgxMCwgS0VZX0xFRlR9LAkJLyogUm93IDUgKi8KKwl7IDB4MTEsIEtFWV9TRUxFQ1R9LAorCXsgMHgxMiwgS0VZX1JJR0hUfSwKKwl7IDB4MTMsIEtFWV9WT0xVTUVVUH0sCisJeyAweDE0LCBLRVlfTEFTVH0sCQkvKiBSb3cgNiAqLworCXsgMHgxNSwgS0VZX0RPV059LAorCXsgMHgxNiwgS0VZX01VVEV9LAorCXsgMHgxNywgS0VZX1ZPTFVNRURPV059LAorfTsKKworc3RhdGljIHN0cnVjdCByY19tYXBfbGlzdCBhdGlfdHZfd29uZGVyX2hkXzYwMF9tYXAgPSB7CisJLm1hcCA9IHsKKwkJLnNjYW4gICAgPSBhdGlfdHZfd29uZGVyX2hkXzYwMCwKKwkJLnNpemUgICAgPSBBUlJBWV9TSVpFKGF0aV90dl93b25kZXJfaGRfNjAwKSwKKwkJLnJjX3R5cGUgPSBSQ19UWVBFX1VOS05PV04sCS8qIExlZ2FjeSBJUiB0eXBlICovCisJCS5uYW1lICAgID0gUkNfTUFQX0FUSV9UVl9XT05ERVJfSERfNjAwLAorCX0KK307CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfcmNfbWFwX2F0aV90dl93b25kZXJfaGRfNjAwKHZvaWQpCit7CisJcmV0dXJuIHJjX21hcF9yZWdpc3RlcigmYXRpX3R2X3dvbmRlcl9oZF82MDBfbWFwKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGV4aXRfcmNfbWFwX2F0aV90dl93b25kZXJfaGRfNjAwKHZvaWQpCit7CisJcmNfbWFwX3VucmVnaXN0ZXIoJmF0aV90dl93b25kZXJfaGRfNjAwX21hcCk7Cit9CisKK21vZHVsZV9pbml0KGluaXRfcmNfbWFwX2F0aV90dl93b25kZXJfaGRfNjAwKQorbW9kdWxlX2V4aXQoZXhpdF9yY19tYXBfYXRpX3R2X3dvbmRlcl9oZF82MDApCisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIk1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLWF2ZXJtZWRpYS1hMTZkLmMgYi9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtYXZlcm1lZGlhLWExNmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzliZWVlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLWF2ZXJtZWRpYS1hMTZkLmMKQEAgLTAsMCArMSw3NSBAQAorLyogYXZlcm1lZGlhLWExNmQuaCAtIEtleXRhYmxlIGZvciBhdmVybWVkaWFfYTE2ZCBSZW1vdGUgQ29udHJvbGxlcgorICoKKyAqIGtleW1hcCBpbXBvcnRlZCBmcm9tIGlyLWtleW1hcHMuYworICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBieSBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxtZWRpYS9yYy1tYXAuaD4KKworc3RhdGljIHN0cnVjdCByY19tYXBfdGFibGUgYXZlcm1lZGlhX2ExNmRbXSA9IHsKKwl7IDB4MjAsIEtFWV9MSVNUfSwKKwl7IDB4MDAsIEtFWV9QT1dFUn0sCisJeyAweDI4LCBLRVlfMX0sCisJeyAweDE4LCBLRVlfMn0sCisJeyAweDM4LCBLRVlfM30sCisJeyAweDI0LCBLRVlfNH0sCisJeyAweDE0LCBLRVlfNX0sCisJeyAweDM0LCBLRVlfNn0sCisJeyAweDJjLCBLRVlfN30sCisJeyAweDFjLCBLRVlfOH0sCisJeyAweDNjLCBLRVlfOX0sCisJeyAweDEyLCBLRVlfU1VCVElUTEV9LAorCXsgMHgyMiwgS0VZXzB9LAorCXsgMHgzMiwgS0VZX1JFV0lORH0sCisJeyAweDNhLCBLRVlfU0hVRkZMRX0sCisJeyAweDAyLCBLRVlfUFJJTlR9LAorCXsgMHgxMSwgS0VZX0NIQU5ORUxET1dOfSwKKwl7IDB4MzEsIEtFWV9DSEFOTkVMVVB9LAorCXsgMHgwYywgS0VZX1pPT019LAorCXsgMHgxZSwgS0VZX1ZPTFVNRURPV059LAorCXsgMHgzZSwgS0VZX1ZPTFVNRVVQfSwKKwl7IDB4MGEsIEtFWV9NVVRFfSwKKwl7IDB4MDQsIEtFWV9BVURJT30sCisJeyAweDI2LCBLRVlfUkVDT1JEfSwKKwl7IDB4MDYsIEtFWV9QTEFZfSwKKwl7IDB4MzYsIEtFWV9TVE9QfSwKKwl7IDB4MTYsIEtFWV9QQVVTRX0sCisJeyAweDJlLCBLRVlfUkVXSU5EfSwKKwl7IDB4MGUsIEtFWV9GQVNURk9SV0FSRH0sCisJeyAweDMwLCBLRVlfVEVYVH0sCisJeyAweDIxLCBLRVlfR1JFRU59LAorCXsgMHgwMSwgS0VZX0JMVUV9LAorCXsgMHgwOCwgS0VZX0VQR30sCisJeyAweDJhLCBLRVlfTUVOVX0sCit9OworCitzdGF0aWMgc3RydWN0IHJjX21hcF9saXN0IGF2ZXJtZWRpYV9hMTZkX21hcCA9IHsKKwkubWFwID0geworCQkuc2NhbiAgICA9IGF2ZXJtZWRpYV9hMTZkLAorCQkuc2l6ZSAgICA9IEFSUkFZX1NJWkUoYXZlcm1lZGlhX2ExNmQpLAorCQkucmNfdHlwZSA9IFJDX1RZUEVfVU5LTk9XTiwJLyogTGVnYWN5IElSIHR5cGUgKi8KKwkJLm5hbWUgICAgPSBSQ19NQVBfQVZFUk1FRElBX0ExNkQsCisJfQorfTsKKworc3RhdGljIGludCBfX2luaXQgaW5pdF9yY19tYXBfYXZlcm1lZGlhX2ExNmQodm9pZCkKK3sKKwlyZXR1cm4gcmNfbWFwX3JlZ2lzdGVyKCZhdmVybWVkaWFfYTE2ZF9tYXApOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yY19tYXBfYXZlcm1lZGlhX2ExNmQodm9pZCkKK3sKKwlyY19tYXBfdW5yZWdpc3RlcigmYXZlcm1lZGlhX2ExNmRfbWFwKTsKK30KKworbW9kdWxlX2luaXQoaW5pdF9yY19tYXBfYXZlcm1lZGlhX2ExNmQpCittb2R1bGVfZXhpdChleGl0X3JjX21hcF9hdmVybWVkaWFfYTE2ZCkKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtYXZlcm1lZGlhLWNhcmRidXMuYyBiL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1hdmVybWVkaWEtY2FyZGJ1cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkZjk3YjcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtYXZlcm1lZGlhLWNhcmRidXMuYwpAQCAtMCwwICsxLDk3IEBACisvKiBhdmVybWVkaWEtY2FyZGJ1cy5oIC0gS2V5dGFibGUgZm9yIGF2ZXJtZWRpYV9jYXJkYnVzIFJlbW90ZSBDb250cm9sbGVyCisgKgorICoga2V5bWFwIGltcG9ydGVkIGZyb20gaXIta2V5bWFwcy5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPG1lZGlhL3JjLW1hcC5oPgorCisvKiBPbGRyaWNoIEplZGxpY2thIDxvbGRpdW0ucHJvQHNlem5hbS5jej4gKi8KKworc3RhdGljIHN0cnVjdCByY19tYXBfdGFibGUgYXZlcm1lZGlhX2NhcmRidXNbXSA9IHsKKwl7IDB4MDAsIEtFWV9QT1dFUiB9LAorCXsgMHgwMSwgS0VZX1RVTkVSIH0sCQkvKiBUVi9GTSAqLworCXsgMHgwMywgS0VZX1RFWFQgfSwJCS8qIFRlbGV0ZXh0ICovCisJeyAweDA0LCBLRVlfRVBHIH0sCisJeyAweDA1LCBLRVlfMSB9LAorCXsgMHgwNiwgS0VZXzIgfSwKKwl7IDB4MDcsIEtFWV8zIH0sCisJeyAweDA4LCBLRVlfQVVESU8gfSwKKwl7IDB4MDksIEtFWV80IH0sCisJeyAweDBhLCBLRVlfNSB9LAorCXsgMHgwYiwgS0VZXzYgfSwKKwl7IDB4MGMsIEtFWV9aT09NIH0sCQkvKiBGdWxsIHNjcmVlbiAqLworCXsgMHgwZCwgS0VZXzcgfSwKKwl7IDB4MGUsIEtFWV84IH0sCisJeyAweDBmLCBLRVlfOSB9LAorCXsgMHgxMCwgS0VZX1BBR0VVUCB9LAkJLyogMTYtQ0ggUFJFViAqLworCXsgMHgxMSwgS0VZXzAgfSwKKwl7IDB4MTIsIEtFWV9JTkZPIH0sCisJeyAweDEzLCBLRVlfQUdBSU4gfSwJCS8qIENIIFJUTiAtIGNoYW5uZWwgcmV0dXJuICovCisJeyAweDE0LCBLRVlfTVVURSB9LAorCXsgMHgxNSwgS0VZX0VESVQgfSwJCS8qIEF1dG9zY2FuICovCisJeyAweDE3LCBLRVlfU0FWRSB9LAkJLyogU2NyZWVuc2hvdCAqLworCXsgMHgxOCwgS0VZX1BMQVlQQVVTRSB9LAorCXsgMHgxOSwgS0VZX1JFQ09SRCB9LAorCXsgMHgxYSwgS0VZX1BMQVkgfSwKKwl7IDB4MWIsIEtFWV9TVE9QIH0sCisJeyAweDFjLCBLRVlfRkFTVEZPUldBUkQgfSwKKwl7IDB4MWQsIEtFWV9SRVdJTkQgfSwKKwl7IDB4MWUsIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweDFmLCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4MjIsIEtFWV9TTEVFUCB9LAkJLyogU2xlZXAgKi8KKwl7IDB4MjMsIEtFWV9aT09NIH0sCQkvKiBBc3BlY3QgKi8KKwl7IDB4MjYsIEtFWV9TQ1JFRU4gfSwJCS8qIFBvcyAqLworCXsgMHgyNywgS0VZX0FOR0xFIH0sCQkvKiBTaXplICovCisJeyAweDI4LCBLRVlfU0VMRUNUIH0sCQkvKiBTZWxlY3QgKi8KKwl7IDB4MjksIEtFWV9CTFVFIH0sCQkvKiBCbHVlL1BpY3R1cmUgKi8KKwl7IDB4MmEsIEtFWV9CQUNLU1BBQ0UgfSwJLyogQmFjayAqLworCXsgMHgyYiwgS0VZX01FRElBIH0sCQkvKiBQSVAgKFBpY3R1cmUtaW4tcGljdHVyZSkgKi8KKwl7IDB4MmMsIEtFWV9ET1dOIH0sCisJeyAweDJlLCBLRVlfRE9UIH0sCisJeyAweDJmLCBLRVlfVFYgfSwJCS8qIExpdmUgVFYgKi8KKwl7IDB4MzIsIEtFWV9MRUZUIH0sCisJeyAweDMzLCBLRVlfQ0xFQVIgfSwJCS8qIENsZWFyICovCisJeyAweDM1LCBLRVlfUkVEIH0sCQkvKiBSZWQvVFYgKi8KKwl7IDB4MzYsIEtFWV9VUCB9LAorCXsgMHgzNywgS0VZX0hPTUUgfSwJCS8qIEhvbWUgKi8KKwl7IDB4MzksIEtFWV9HUkVFTiB9LAkJLyogR3JlZW4vVmlkZW8gKi8KKwl7IDB4M2QsIEtFWV9ZRUxMT1cgfSwJCS8qIFllbGxvdy9NdXNpYyAqLworCXsgMHgzZSwgS0VZX09LIH0sCQkvKiBPayAqLworCXsgMHgzZiwgS0VZX1JJR0hUIH0sCisJeyAweDQwLCBLRVlfTkVYVCB9LAkJLyogTmV4dCAqLworCXsgMHg0MSwgS0VZX1BSRVZJT1VTIH0sCQkvKiBQcmV2aW91cyAqLworCXsgMHg0MiwgS0VZX0NIQU5ORUxET1dOIH0sCS8qIENoYW5uZWwgZG93biAqLworCXsgMHg0MywgS0VZX0NIQU5ORUxVUCB9LAkvKiBDaGFubmVsIHVwICovCit9OworCitzdGF0aWMgc3RydWN0IHJjX21hcF9saXN0IGF2ZXJtZWRpYV9jYXJkYnVzX21hcCA9IHsKKwkubWFwID0geworCQkuc2NhbiAgICA9IGF2ZXJtZWRpYV9jYXJkYnVzLAorCQkuc2l6ZSAgICA9IEFSUkFZX1NJWkUoYXZlcm1lZGlhX2NhcmRidXMpLAorCQkucmNfdHlwZSA9IFJDX1RZUEVfVU5LTk9XTiwJLyogTGVnYWN5IElSIHR5cGUgKi8KKwkJLm5hbWUgICAgPSBSQ19NQVBfQVZFUk1FRElBX0NBUkRCVVMsCisJfQorfTsKKworc3RhdGljIGludCBfX2luaXQgaW5pdF9yY19tYXBfYXZlcm1lZGlhX2NhcmRidXModm9pZCkKK3sKKwlyZXR1cm4gcmNfbWFwX3JlZ2lzdGVyKCZhdmVybWVkaWFfY2FyZGJ1c19tYXApOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yY19tYXBfYXZlcm1lZGlhX2NhcmRidXModm9pZCkKK3sKKwlyY19tYXBfdW5yZWdpc3RlcigmYXZlcm1lZGlhX2NhcmRidXNfbWFwKTsKK30KKworbW9kdWxlX2luaXQoaW5pdF9yY19tYXBfYXZlcm1lZGlhX2NhcmRidXMpCittb2R1bGVfZXhpdChleGl0X3JjX21hcF9hdmVybWVkaWFfY2FyZGJ1cykKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtYXZlcm1lZGlhLWR2YnQuYyBiL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1hdmVybWVkaWEtZHZidC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkZGI0MWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtYXZlcm1lZGlhLWR2YnQuYwpAQCAtMCwwICsxLDc4IEBACisvKiBhdmVybWVkaWEtZHZidC5oIC0gS2V5dGFibGUgZm9yIGF2ZXJtZWRpYV9kdmJ0IFJlbW90ZSBDb250cm9sbGVyCisgKgorICoga2V5bWFwIGltcG9ydGVkIGZyb20gaXIta2V5bWFwcy5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPG1lZGlhL3JjLW1hcC5oPgorCisvKiBNYXR0IEplc3NvbiA8ZHZiQGplc3Nvbi5lY2xpcHNlLmNvLnVrICovCisKK3N0YXRpYyBzdHJ1Y3QgcmNfbWFwX3RhYmxlIGF2ZXJtZWRpYV9kdmJ0W10gPSB7CisJeyAweDI4LCBLRVlfMCB9LAkJLyogJzAnIC8gJ2VudGVyJyAqLworCXsgMHgyMiwgS0VZXzEgfSwJCS8qICcxJyAqLworCXsgMHgxMiwgS0VZXzIgfSwJCS8qICcyJyAvICd1cCBhcnJvdycgKi8KKwl7IDB4MzIsIEtFWV8zIH0sCQkvKiAnMycgKi8KKwl7IDB4MjQsIEtFWV80IH0sCQkvKiAnNCcgLyAnbGVmdCBhcnJvdycgKi8KKwl7IDB4MTQsIEtFWV81IH0sCQkvKiAnNScgKi8KKwl7IDB4MzQsIEtFWV82IH0sCQkvKiAnNicgLyAncmlnaHQgYXJyb3cnICovCisJeyAweDI2LCBLRVlfNyB9LAkJLyogJzcnICovCisJeyAweDE2LCBLRVlfOCB9LAkJLyogJzgnIC8gJ2Rvd24gYXJyb3cnICovCisJeyAweDM2LCBLRVlfOSB9LAkJLyogJzknICovCisKKwl7IDB4MjAsIEtFWV9MSVNUIH0sCQkvKiAnc291cmNlJyAqLworCXsgMHgxMCwgS0VZX1RFWFQgfSwJCS8qICd0ZWxldGV4dCcgKi8KKwl7IDB4MDAsIEtFWV9QT1dFUiB9LAkJLyogJ3Bvd2VyJyAqLworCXsgMHgwNCwgS0VZX0FVRElPIH0sCQkvKiAnYXVkaW8nICovCisJeyAweDA2LCBLRVlfWk9PTSB9LAkJLyogJ2Z1bGwgc2NyZWVuJyAqLworCXsgMHgxOCwgS0VZX1ZJREVPIH0sCQkvKiAnZGlzcGxheScgKi8KKwl7IDB4MzgsIEtFWV9TRUFSQ0ggfSwJCS8qICdsb29wJyAqLworCXsgMHgwOCwgS0VZX0lORk8gfSwJCS8qICdwcmV2aWV3JyAqLworCXsgMHgyYSwgS0VZX1JFV0lORCB9LAkJLyogJ2JhY2t3YXJkIDw8JyAqLworCXsgMHgxYSwgS0VZX0ZBU1RGT1JXQVJEIH0sCS8qICdmb3J3YXJkID4+JyAqLworCXsgMHgzYSwgS0VZX1JFQ09SRCB9LAkJLyogJ2NhcHR1cmUnICovCisJeyAweDBhLCBLRVlfTVVURSB9LAkJLyogJ211dGUnICovCisJeyAweDJjLCBLRVlfUkVDT1JEIH0sCQkvKiAncmVjb3JkJyAqLworCXsgMHgxYywgS0VZX1BBVVNFIH0sCQkvKiAncGF1c2UnICovCisJeyAweDNjLCBLRVlfU1RPUCB9LAkJLyogJ3N0b3AnICovCisJeyAweDBjLCBLRVlfUExBWSB9LAkJLyogJ3BsYXknICovCisJeyAweDJlLCBLRVlfUkVEIH0sCQkvKiAncmVkJyAqLworCXsgMHgwMSwgS0VZX0JMVUUgfSwJCS8qICdibHVlJyAvICdjYW5jZWwnICovCisJeyAweDBlLCBLRVlfWUVMTE9XIH0sCQkvKiAneWVsbG93JyAvICdvaycgKi8KKwl7IDB4MjEsIEtFWV9HUkVFTiB9LAkJLyogJ2dyZWVuJyAqLworCXsgMHgxMSwgS0VZX0NIQU5ORUxET1dOIH0sCS8qICdjaGFubmVsIC0nICovCisJeyAweDMxLCBLRVlfQ0hBTk5FTFVQIH0sCS8qICdjaGFubmVsICsnICovCisJeyAweDFlLCBLRVlfVk9MVU1FRE9XTiB9LAkvKiAndm9sdW1lIC0nICovCisJeyAweDNlLCBLRVlfVk9MVU1FVVAgfSwJCS8qICd2b2x1bWUgKycgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgcmNfbWFwX2xpc3QgYXZlcm1lZGlhX2R2YnRfbWFwID0geworCS5tYXAgPSB7CisJCS5zY2FuICAgID0gYXZlcm1lZGlhX2R2YnQsCisJCS5zaXplICAgID0gQVJSQVlfU0laRShhdmVybWVkaWFfZHZidCksCisJCS5yY190eXBlID0gUkNfVFlQRV9VTktOT1dOLAkvKiBMZWdhY3kgSVIgdHlwZSAqLworCQkubmFtZSAgICA9IFJDX01BUF9BVkVSTUVESUFfRFZCVCwKKwl9Cit9OworCitzdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcF9hdmVybWVkaWFfZHZidCh2b2lkKQoreworCXJldHVybiByY19tYXBfcmVnaXN0ZXIoJmF2ZXJtZWRpYV9kdmJ0X21hcCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3JjX21hcF9hdmVybWVkaWFfZHZidCh2b2lkKQoreworCXJjX21hcF91bnJlZ2lzdGVyKCZhdmVybWVkaWFfZHZidF9tYXApOworfQorCittb2R1bGVfaW5pdChpbml0X3JjX21hcF9hdmVybWVkaWFfZHZidCkKK21vZHVsZV9leGl0KGV4aXRfcmNfbWFwX2F2ZXJtZWRpYV9kdmJ0KQorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1hdmVybWVkaWEtbTEzNWEuYyBiL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1hdmVybWVkaWEtbTEzNWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTdmZWE1OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1hdmVybWVkaWEtbTEzNWEuYwpAQCAtMCwwICsxLDE0NyBAQAorLyogYXZlcm1lZGlhLW0xMzVhLmMgLSBLZXl0YWJsZSBmb3IgQXZlcm1lZGlhIE0xMzVBIFJlbW90ZSBDb250cm9sbGVycworICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBieSBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4KKyAqIENvcHlyaWdodCAoYykgMjAxMCBieSBIZXJ0b24gUm9uYWxkbyBLcnplc2luc2tpIDxoZXJ0b25AbWFuZHJpdmEuY29tLmJyPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPG1lZGlhL3JjLW1hcC5oPgorCisvKgorICogQXZlcm1lZGlhIE0xMzVBIHdpdGggUk0tSlggYW5kIFJNLUs2IHJlbW90ZSBjb250cm9scworICoKKyAqIE9uIEF2ZXJtZWRpYSBNMTM1QSB3aXRoIElSIG1vZGVsIFJNLUpYLCB0aGUgc2FtZSBjb2RlcyBleGlzdCBvbiBib3RoCisgKiBQb3NpdGl2byAoQlIpIGFuZCBvcmlnaW5hbCBJUiwgaW5pdGlhbCB2ZXJzaW9uIGFuZCByZW1vdGUgY29udHJvbCBjb2RlcworICogYWRkZWQgYnkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQGluZnJhZGVhZC5vcmc+CisgKgorICogUG9zaXRpdm8gYWxzbyBzaGlwcyBBdmVybWVkaWEgTTEzNUEgd2l0aCBtb2RlbCBSTS1LNiwgZXh0cmEgY29udHJvbAorICogY29kZXMgYWRkZWQgYnkgSGVydG9uIFJvbmFsZG8gS3J6ZXNpbnNraSA8aGVydG9uQG1hbmRyaXZhLmNvbS5icj4KKyAqLworCitzdGF0aWMgc3RydWN0IHJjX21hcF90YWJsZSBhdmVybWVkaWFfbTEzNWFbXSA9IHsKKwkvKiBSTS1KWCAqLworCXsgMHgwMjAwLCBLRVlfUE9XRVIyIH0sCisJeyAweDAyMmUsIEtFWV9ET1QgfSwJCS8qICcuJyAqLworCXsgMHgwMjAxLCBLRVlfTU9ERSB9LAkJLyogVFYvRk0gb3IgU09VUkNFICovCisKKwl7IDB4MDIwNSwgS0VZXzEgfSwKKwl7IDB4MDIwNiwgS0VZXzIgfSwKKwl7IDB4MDIwNywgS0VZXzMgfSwKKwl7IDB4MDIwOSwgS0VZXzQgfSwKKwl7IDB4MDIwYSwgS0VZXzUgfSwKKwl7IDB4MDIwYiwgS0VZXzYgfSwKKwl7IDB4MDIwZCwgS0VZXzcgfSwKKwl7IDB4MDIwZSwgS0VZXzggfSwKKwl7IDB4MDIwZiwgS0VZXzkgfSwKKwl7IDB4MDIxMSwgS0VZXzAgfSwKKworCXsgMHgwMjEzLCBLRVlfUklHSFQgfSwJCS8qIC0+IG9yIEwgKi8KKwl7IDB4MDIxMiwgS0VZX0xFRlQgfSwJCS8qIDwtIG9yIFIgKi8KKworCXsgMHgwMjE3LCBLRVlfU0xFRVAgfSwJCS8qIENhcHR1cmFyIEltYWdlbSBvciBTbmFwc2hvdCAqLworCXsgMHgwMjEwLCBLRVlfU0hVRkZMRSB9LAkvKiBBbW9zdHJhIG9yIDE2IGNoYW4gcHJldiAqLworCisJeyAweDAzMDMsIEtFWV9DSEFOTkVMVVAgfSwKKwl7IDB4MDMwMiwgS0VZX0NIQU5ORUxET1dOIH0sCisJeyAweDAyMWYsIEtFWV9WT0xVTUVVUCB9LAorCXsgMHgwMjFlLCBLRVlfVk9MVU1FRE9XTiB9LAorCXsgMHgwMjBjLCBLRVlfRU5URVIgfSwJCS8qIEZ1bGwgU2NyZWVuICovCisKKwl7IDB4MDIxNCwgS0VZX01VVEUgfSwKKwl7IDB4MDIwOCwgS0VZX0FVRElPIH0sCisKKwl7IDB4MDIwMywgS0VZX1RFWFQgfSwJCS8qIFRlbGV0ZXh0ICovCisJeyAweDAyMDQsIEtFWV9FUEcgfSwKKwl7IDB4MDIyYiwgS0VZX1RWMiB9LAkJLyogVFYyIG9yIFBJUCAqLworCisJeyAweDAyMWQsIEtFWV9SRUQgfSwKKwl7IDB4MDIxYywgS0VZX1lFTExPVyB9LAorCXsgMHgwMzAxLCBLRVlfR1JFRU4gfSwKKwl7IDB4MDMwMCwgS0VZX0JMVUUgfSwKKworCXsgMHgwMjFhLCBLRVlfUExBWVBBVVNFIH0sCisJeyAweDAyMTksIEtFWV9SRUNPUkQgfSwKKwl7IDB4MDIxOCwgS0VZX1BMQVkgfSwKKwl7IDB4MDIxYiwgS0VZX1NUT1AgfSwKKworCS8qIFJNLUs2ICovCisJeyAweDA0MDEsIEtFWV9QT1dFUjIgfSwKKwl7IDB4MDQwNiwgS0VZX01VVEUgfSwKKwl7IDB4MDQwOCwgS0VZX01PREUgfSwgICAgIC8qIFRWL0ZNICovCisKKwl7IDB4MDQwOSwgS0VZXzEgfSwKKwl7IDB4MDQwYSwgS0VZXzIgfSwKKwl7IDB4MDQwYiwgS0VZXzMgfSwKKwl7IDB4MDQwYywgS0VZXzQgfSwKKwl7IDB4MDQwZCwgS0VZXzUgfSwKKwl7IDB4MDQwZSwgS0VZXzYgfSwKKwl7IDB4MDQwZiwgS0VZXzcgfSwKKwl7IDB4MDQxMCwgS0VZXzggfSwKKwl7IDB4MDQxMSwgS0VZXzkgfSwKKwl7IDB4MDQ0YywgS0VZX0RPVCB9LCAgICAgIC8qICcuJyAqLworCXsgMHgwNDEyLCBLRVlfMCB9LAorCXsgMHgwNDA3LCBLRVlfUkVGUkVTSCB9LCAgLyogUmVmcmVzaC9SZWxvYWQgKi8KKworCXsgMHgwNDEzLCBLRVlfQVVESU8gfSwKKwl7IDB4MDQ0MCwgS0VZX1NDUkVFTiB9LCAgIC8qIEZ1bGwgU2NyZWVuIHRvZ2dsZSAqLworCXsgMHgwNDQxLCBLRVlfSE9NRSB9LAorCXsgMHgwNDQyLCBLRVlfQkFDSyB9LAorCXsgMHgwNDQ3LCBLRVlfVVAgfSwKKwl7IDB4MDQ0OCwgS0VZX0RPV04gfSwKKwl7IDB4MDQ0OSwgS0VZX0xFRlQgfSwKKwl7IDB4MDQ0YSwgS0VZX1JJR0hUIH0sCisJeyAweDA0NGIsIEtFWV9PSyB9LAorCXsgMHgwNDA0LCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4MDQwNSwgS0VZX1ZPTFVNRURPV04gfSwKKwl7IDB4MDQwMiwgS0VZX0NIQU5ORUxVUCB9LAorCXsgMHgwNDAzLCBLRVlfQ0hBTk5FTERPV04gfSwKKworCXsgMHgwNDQzLCBLRVlfUkVEIH0sCisJeyAweDA0NDQsIEtFWV9HUkVFTiB9LAorCXsgMHgwNDQ1LCBLRVlfWUVMTE9XIH0sCisJeyAweDA0NDYsIEtFWV9CTFVFIH0sCisKKwl7IDB4MDQxNCwgS0VZX1RFWFQgfSwKKwl7IDB4MDQxNSwgS0VZX0VQRyB9LAorCXsgMHgwNDFhLCBLRVlfVFYyIH0sICAgICAgLyogUElQICovCisJeyAweDA0MWIsIEtFWV9NSFAgfSwgICAgICAvKiBTbmFwc2hvdCAqLworCisJeyAweDA0MTcsIEtFWV9SRUNPUkQgfSwKKwl7IDB4MDQxNiwgS0VZX1BMQVlQQVVTRSB9LAorCXsgMHgwNDE4LCBLRVlfU1RPUCB9LAorCXsgMHgwNDE5LCBLRVlfUEFVU0UgfSwKKworCXsgMHgwNDFmLCBLRVlfUFJFVklPVVMgfSwKKwl7IDB4MDQxYywgS0VZX1JFV0lORCB9LAorCXsgMHgwNDFkLCBLRVlfRk9SV0FSRCB9LAorCXsgMHgwNDFlLCBLRVlfTkVYVCB9LAorfTsKKworc3RhdGljIHN0cnVjdCByY19tYXBfbGlzdCBhdmVybWVkaWFfbTEzNWFfbWFwID0geworCS5tYXAgPSB7CisJCS5zY2FuICAgID0gYXZlcm1lZGlhX20xMzVhLAorCQkuc2l6ZSAgICA9IEFSUkFZX1NJWkUoYXZlcm1lZGlhX20xMzVhKSwKKwkJLnJjX3R5cGUgPSBSQ19UWVBFX05FQywKKwkJLm5hbWUgICAgPSBSQ19NQVBfQVZFUk1FRElBX00xMzVBLAorCX0KK307CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfcmNfbWFwX2F2ZXJtZWRpYV9tMTM1YSh2b2lkKQoreworCXJldHVybiByY19tYXBfcmVnaXN0ZXIoJmF2ZXJtZWRpYV9tMTM1YV9tYXApOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yY19tYXBfYXZlcm1lZGlhX20xMzVhKHZvaWQpCit7CisJcmNfbWFwX3VucmVnaXN0ZXIoJmF2ZXJtZWRpYV9tMTM1YV9tYXApOworfQorCittb2R1bGVfaW5pdChpbml0X3JjX21hcF9hdmVybWVkaWFfbTEzNWEpCittb2R1bGVfZXhpdChleGl0X3JjX21hcF9hdmVybWVkaWFfbTEzNWEpCisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIk1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLWF2ZXJtZWRpYS1tNzMzYS1ybS1rNi5jIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLWF2ZXJtZWRpYS1tNzMzYS1ybS1rNi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OTRlNmUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtYXZlcm1lZGlhLW03MzNhLXJtLWs2LmMKQEAgLTAsMCArMSw5NSBAQAorLyogYXZlcm1lZGlhLW03MzNhLXJtLWs2LmggLSBLZXl0YWJsZSBmb3IgYXZlcm1lZGlhX203MzNhX3JtX2s2IFJlbW90ZSBDb250cm9sbGVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIGJ5IEhlcnRvbiBSb25hbGRvIEtyemVzaW5za2kgPGhlcnRvbkBtYW5kcml2YS5jb20uYnI+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bWVkaWEvcmMtbWFwLmg+CisKKy8qCisgKiBBdmVybWVkaWEgTTczM0Egd2l0aCBJUiBtb2RlbCBSTS1LNgorICogVGhpcyBpcyB0aGUgc3RvY2sgcmVtb3RlIGNvbnRyb2xsZXIgdXNlZCB3aXRoIFBvc2l0aXZvIG1hY2hpbmVzIHdpdGggTTczM0EKKyAqIEhlcnRvbiBSb25hbGRvIEtyemVzaW5za2kgPGhlcnRvbkBtYW5kcml2YS5jb20uYnI+CisgKi8KKworc3RhdGljIHN0cnVjdCByY19tYXBfdGFibGUgYXZlcm1lZGlhX203MzNhX3JtX2s2W10gPSB7CisJeyAweDA0MDEsIEtFWV9QT1dFUjIgfSwKKwl7IDB4MDQwNiwgS0VZX01VVEUgfSwKKwl7IDB4MDQwOCwgS0VZX01PREUgfSwgICAgIC8qIFRWL0ZNICovCisKKwl7IDB4MDQwOSwgS0VZXzEgfSwKKwl7IDB4MDQwYSwgS0VZXzIgfSwKKwl7IDB4MDQwYiwgS0VZXzMgfSwKKwl7IDB4MDQwYywgS0VZXzQgfSwKKwl7IDB4MDQwZCwgS0VZXzUgfSwKKwl7IDB4MDQwZSwgS0VZXzYgfSwKKwl7IDB4MDQwZiwgS0VZXzcgfSwKKwl7IDB4MDQxMCwgS0VZXzggfSwKKwl7IDB4MDQxMSwgS0VZXzkgfSwKKwl7IDB4MDQ0YywgS0VZX0RPVCB9LCAgICAgIC8qICcuJyAqLworCXsgMHgwNDEyLCBLRVlfMCB9LAorCXsgMHgwNDA3LCBLRVlfUkVGUkVTSCB9LCAgLyogUmVmcmVzaC9SZWxvYWQgKi8KKworCXsgMHgwNDEzLCBLRVlfQVVESU8gfSwKKwl7IDB4MDQ0MCwgS0VZX1NDUkVFTiB9LCAgIC8qIEZ1bGwgU2NyZWVuIHRvZ2dsZSAqLworCXsgMHgwNDQxLCBLRVlfSE9NRSB9LAorCXsgMHgwNDQyLCBLRVlfQkFDSyB9LAorCXsgMHgwNDQ3LCBLRVlfVVAgfSwKKwl7IDB4MDQ0OCwgS0VZX0RPV04gfSwKKwl7IDB4MDQ0OSwgS0VZX0xFRlQgfSwKKwl7IDB4MDQ0YSwgS0VZX1JJR0hUIH0sCisJeyAweDA0NGIsIEtFWV9PSyB9LAorCXsgMHgwNDA0LCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4MDQwNSwgS0VZX1ZPTFVNRURPV04gfSwKKwl7IDB4MDQwMiwgS0VZX0NIQU5ORUxVUCB9LAorCXsgMHgwNDAzLCBLRVlfQ0hBTk5FTERPV04gfSwKKworCXsgMHgwNDQzLCBLRVlfUkVEIH0sCisJeyAweDA0NDQsIEtFWV9HUkVFTiB9LAorCXsgMHgwNDQ1LCBLRVlfWUVMTE9XIH0sCisJeyAweDA0NDYsIEtFWV9CTFVFIH0sCisKKwl7IDB4MDQxNCwgS0VZX1RFWFQgfSwKKwl7IDB4MDQxNSwgS0VZX0VQRyB9LAorCXsgMHgwNDFhLCBLRVlfVFYyIH0sICAgICAgLyogUElQICovCisJeyAweDA0MWIsIEtFWV9NSFAgfSwgICAgICAvKiBTbmFwc2hvdCAqLworCisJeyAweDA0MTcsIEtFWV9SRUNPUkQgfSwKKwl7IDB4MDQxNiwgS0VZX1BMQVlQQVVTRSB9LAorCXsgMHgwNDE4LCBLRVlfU1RPUCB9LAorCXsgMHgwNDE5LCBLRVlfUEFVU0UgfSwKKworCXsgMHgwNDFmLCBLRVlfUFJFVklPVVMgfSwKKwl7IDB4MDQxYywgS0VZX1JFV0lORCB9LAorCXsgMHgwNDFkLCBLRVlfRk9SV0FSRCB9LAorCXsgMHgwNDFlLCBLRVlfTkVYVCB9LAorfTsKKworc3RhdGljIHN0cnVjdCByY19tYXBfbGlzdCBhdmVybWVkaWFfbTczM2Ffcm1fazZfbWFwID0geworCS5tYXAgPSB7CisJCS5zY2FuICAgID0gYXZlcm1lZGlhX203MzNhX3JtX2s2LAorCQkuc2l6ZSAgICA9IEFSUkFZX1NJWkUoYXZlcm1lZGlhX203MzNhX3JtX2s2KSwKKwkJLnJjX3R5cGUgPSBSQ19UWVBFX05FQywKKwkJLm5hbWUgICAgPSBSQ19NQVBfQVZFUk1FRElBX003MzNBX1JNX0s2LAorCX0KK307CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfcmNfbWFwX2F2ZXJtZWRpYV9tNzMzYV9ybV9rNih2b2lkKQoreworCXJldHVybiByY19tYXBfcmVnaXN0ZXIoJmF2ZXJtZWRpYV9tNzMzYV9ybV9rNl9tYXApOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yY19tYXBfYXZlcm1lZGlhX203MzNhX3JtX2s2KHZvaWQpCit7CisJcmNfbWFwX3VucmVnaXN0ZXIoJmF2ZXJtZWRpYV9tNzMzYV9ybV9rNl9tYXApOworfQorCittb2R1bGVfaW5pdChpbml0X3JjX21hcF9hdmVybWVkaWFfbTczM2Ffcm1fazYpCittb2R1bGVfZXhpdChleGl0X3JjX21hcF9hdmVybWVkaWFfbTczM2Ffcm1fazYpCisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIk1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLWF2ZXJtZWRpYS1ybS1rcy5jIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLWF2ZXJtZWRpYS1ybS1rcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0Y2ExZmYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtYXZlcm1lZGlhLXJtLWtzLmMKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIEF2ZXJNZWRpYSBSTS1LUyByZW1vdGUgY29udHJvbGxlciBrZXl0YWJsZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBbnR0aSBQYWxvc2FhcmkgPGNyb3BlQGlraS5maT4KKyAqCisgKiAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqICAgIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiAgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICovCisKKyNpbmNsdWRlIDxtZWRpYS9yYy1tYXAuaD4KKworLyogSW5pdGlhbCBrZXl0YWJsZSBpcyBmcm9tIEpvc2UgQWxiZXJ0byBSZWd1ZXJvIDxqYXJlZ3Vlcm9AdGVsZWZvbmljYS5uZXQ+CisgICBhbmQgRmVsaXBlIE1vcmFsZXMgTW9yZW5vIDxmZWxpcGUubW9yYWxlcy5tb3Jlbm9AZ21haWwuY29tPiAqLworLyogRklYTUU6IG1hcHBpbmdzIGFyZSBub3QgMTAwJSBjb3JyZWN0PyAqLworc3RhdGljIHN0cnVjdCByY19tYXBfdGFibGUgYXZlcm1lZGlhX3JtX2tzW10gPSB7CisJeyAweDA1MDEsIEtFWV9QT1dFUjIgfSwKKwl7IDB4MDUwMiwgS0VZX0NIQU5ORUxVUCB9LAorCXsgMHgwNTAzLCBLRVlfQ0hBTk5FTERPV04gfSwKKwl7IDB4MDUwNCwgS0VZX1ZPTFVNRVVQIH0sCisJeyAweDA1MDUsIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweDA1MDYsIEtFWV9NVVRFIH0sCisJeyAweDA1MDcsIEtFWV9SSUdIVCB9LAorCXsgMHgwNTA4LCBLRVlfUFJPRzEgfSwKKwl7IDB4MDUwOSwgS0VZXzEgfSwKKwl7IDB4MDUwYSwgS0VZXzIgfSwKKwl7IDB4MDUwYiwgS0VZXzMgfSwKKwl7IDB4MDUwYywgS0VZXzQgfSwKKwl7IDB4MDUwZCwgS0VZXzUgfSwKKwl7IDB4MDUwZSwgS0VZXzYgfSwKKwl7IDB4MDUwZiwgS0VZXzcgfSwKKwl7IDB4MDUxMCwgS0VZXzggfSwKKwl7IDB4MDUxMSwgS0VZXzkgfSwKKwl7IDB4MDUxMiwgS0VZXzAgfSwKKwl7IDB4MDUxMywgS0VZX0FVRElPIH0sCisJeyAweDA1MTUsIEtFWV9FUEcgfSwKKwl7IDB4MDUxNiwgS0VZX1BMQVkgfSwKKwl7IDB4MDUxNywgS0VZX1JFQ09SRCB9LAorCXsgMHgwNTE4LCBLRVlfU1RPUCB9LAorCXsgMHgwNTFjLCBLRVlfQkFDSyB9LAorCXsgMHgwNTFkLCBLRVlfRk9SV0FSRCB9LAorCXsgMHgwNTRkLCBLRVlfTEVGVCB9LAorCXsgMHgwNTU2LCBLRVlfWk9PTSB9LAorfTsKKworc3RhdGljIHN0cnVjdCByY19tYXBfbGlzdCBhdmVybWVkaWFfcm1fa3NfbWFwID0geworCS5tYXAgPSB7CisJCS5zY2FuICAgID0gYXZlcm1lZGlhX3JtX2tzLAorCQkuc2l6ZSAgICA9IEFSUkFZX1NJWkUoYXZlcm1lZGlhX3JtX2tzKSwKKwkJLnJjX3R5cGUgPSBSQ19UWVBFX05FQywKKwkJLm5hbWUgICAgPSBSQ19NQVBfQVZFUk1FRElBX1JNX0tTLAorCX0KK307CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfcmNfbWFwX2F2ZXJtZWRpYV9ybV9rcyh2b2lkKQoreworCXJldHVybiByY19tYXBfcmVnaXN0ZXIoJmF2ZXJtZWRpYV9ybV9rc19tYXApOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yY19tYXBfYXZlcm1lZGlhX3JtX2tzKHZvaWQpCit7CisJcmNfbWFwX3VucmVnaXN0ZXIoJmF2ZXJtZWRpYV9ybV9rc19tYXApOworfQorCittb2R1bGVfaW5pdChpbml0X3JjX21hcF9hdmVybWVkaWFfcm1fa3MpCittb2R1bGVfZXhpdChleGl0X3JjX21hcF9hdmVybWVkaWFfcm1fa3MpCisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkFudHRpIFBhbG9zYWFyaSA8Y3JvcGVAaWtpLmZpPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLWF2ZXJtZWRpYS5jIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLWF2ZXJtZWRpYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkZmE3MTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtYXZlcm1lZGlhLmMKQEAgLTAsMCArMSw4NiBAQAorLyogYXZlcm1lZGlhLmggLSBLZXl0YWJsZSBmb3IgYXZlcm1lZGlhIFJlbW90ZSBDb250cm9sbGVyCisgKgorICoga2V5bWFwIGltcG9ydGVkIGZyb20gaXIta2V5bWFwcy5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPG1lZGlhL3JjLW1hcC5oPgorCisvKiBBbGV4IEhlcm1hbm4gPGdhYWZAZ214Lm5ldD4gKi8KKworc3RhdGljIHN0cnVjdCByY19tYXBfdGFibGUgYXZlcm1lZGlhW10gPSB7CisJeyAweDI4LCBLRVlfMSB9LAorCXsgMHgxOCwgS0VZXzIgfSwKKwl7IDB4MzgsIEtFWV8zIH0sCisJeyAweDI0LCBLRVlfNCB9LAorCXsgMHgxNCwgS0VZXzUgfSwKKwl7IDB4MzQsIEtFWV82IH0sCisJeyAweDJjLCBLRVlfNyB9LAorCXsgMHgxYywgS0VZXzggfSwKKwl7IDB4M2MsIEtFWV85IH0sCisJeyAweDIyLCBLRVlfMCB9LAorCisJeyAweDIwLCBLRVlfVFYgfSwJCS8qIFRWL0ZNICovCisJeyAweDEwLCBLRVlfQ0QgfSwJCS8qIENEICovCisJeyAweDMwLCBLRVlfVEVYVCB9LAkJLyogVEVMRVRFWFQgKi8KKwl7IDB4MDAsIEtFWV9QT1dFUiB9LAkJLyogUE9XRVIgKi8KKworCXsgMHgwOCwgS0VZX1ZJREVPIH0sCQkvKiBWSURFTyAqLworCXsgMHgwNCwgS0VZX0FVRElPIH0sCQkvKiBBVURJTyAqLworCXsgMHgwYywgS0VZX1pPT00gfSwJCS8qIEZVTEwgU0NSRUVOICovCisKKwl7IDB4MTIsIEtFWV9TVUJUSVRMRSB9LAkJLyogRElTUExBWSAqLworCXsgMHgzMiwgS0VZX1JFV0lORCB9LAkJLyogTE9PUAkqLworCXsgMHgwMiwgS0VZX1BSSU5UIH0sCQkvKiBQUkVWSUVXICovCisKKwl7IDB4MmEsIEtFWV9TRUFSQ0ggfSwJCS8qIEFVVE9TQ0FOICovCisJeyAweDFhLCBLRVlfU0xFRVAgfSwJCS8qIEZSRUVaRSAqLworCXsgMHgzYSwgS0VZX0NBTUVSQSB9LAkJLyogU05BUFNIT1QgKi8KKwl7IDB4MGEsIEtFWV9NVVRFIH0sCQkvKiBNVVRFICovCisKKwl7IDB4MjYsIEtFWV9SRUNPUkQgfSwJCS8qIFJFQ09SRCAqLworCXsgMHgxNiwgS0VZX1BBVVNFIH0sCQkvKiBQQVVTRSAqLworCXsgMHgzNiwgS0VZX1NUT1AgfSwJCS8qIFNUT1AgKi8KKwl7IDB4MDYsIEtFWV9QTEFZIH0sCQkvKiBQTEFZICovCisKKwl7IDB4MmUsIEtFWV9SRUQgfSwJCS8qIFJFRCAqLworCXsgMHgyMSwgS0VZX0dSRUVOIH0sCQkvKiBHUkVFTiAqLworCXsgMHgwZSwgS0VZX1lFTExPVyB9LAkJLyogWUVMTE9XICovCisJeyAweDAxLCBLRVlfQkxVRSB9LAkJLyogQkxVRSAqLworCisJeyAweDFlLCBLRVlfVk9MVU1FRE9XTiB9LAkvKiBWT0xVTUUtICovCisJeyAweDNlLCBLRVlfVk9MVU1FVVAgfSwJCS8qIFZPTFVNRSsgKi8KKwl7IDB4MTEsIEtFWV9DSEFOTkVMRE9XTiB9LAkvKiBDSEFOTkVML1BBR0UtICovCisJeyAweDMxLCBLRVlfQ0hBTk5FTFVQIH0JCS8qIENIQU5ORUwvUEFHRSsgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgcmNfbWFwX2xpc3QgYXZlcm1lZGlhX21hcCA9IHsKKwkubWFwID0geworCQkuc2NhbiAgICA9IGF2ZXJtZWRpYSwKKwkJLnNpemUgICAgPSBBUlJBWV9TSVpFKGF2ZXJtZWRpYSksCisJCS5yY190eXBlID0gUkNfVFlQRV9VTktOT1dOLAkvKiBMZWdhY3kgSVIgdHlwZSAqLworCQkubmFtZSAgICA9IFJDX01BUF9BVkVSTUVESUEsCisJfQorfTsKKworc3RhdGljIGludCBfX2luaXQgaW5pdF9yY19tYXBfYXZlcm1lZGlhKHZvaWQpCit7CisJcmV0dXJuIHJjX21hcF9yZWdpc3RlcigmYXZlcm1lZGlhX21hcCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3JjX21hcF9hdmVybWVkaWEodm9pZCkKK3sKKwlyY19tYXBfdW5yZWdpc3RlcigmYXZlcm1lZGlhX21hcCk7Cit9CisKK21vZHVsZV9pbml0KGluaXRfcmNfbWFwX2F2ZXJtZWRpYSkKK21vZHVsZV9leGl0KGV4aXRfcmNfbWFwX2F2ZXJtZWRpYSkKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtYXZlcnR2LTMwMy5jIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLWF2ZXJ0di0zMDMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMmU5NDk4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLWF2ZXJ0di0zMDMuYwpAQCAtMCwwICsxLDg1IEBACisvKiBhdmVydHYtMzAzLmggLSBLZXl0YWJsZSBmb3IgYXZlcnR2XzMwMyBSZW1vdGUgQ29udHJvbGxlcgorICoKKyAqIGtleW1hcCBpbXBvcnRlZCBmcm9tIGlyLWtleW1hcHMuYworICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBieSBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxtZWRpYS9yYy1tYXAuaD4KKworLyogQVZFUlRWIFNUVURJTyAzMDMgUmVtb3RlICovCisKK3N0YXRpYyBzdHJ1Y3QgcmNfbWFwX3RhYmxlIGF2ZXJ0dl8zMDNbXSA9IHsKKwl7IDB4MmEsIEtFWV8xIH0sCisJeyAweDMyLCBLRVlfMiB9LAorCXsgMHgzYSwgS0VZXzMgfSwKKwl7IDB4NGEsIEtFWV80IH0sCisJeyAweDUyLCBLRVlfNSB9LAorCXsgMHg1YSwgS0VZXzYgfSwKKwl7IDB4NmEsIEtFWV83IH0sCisJeyAweDcyLCBLRVlfOCB9LAorCXsgMHg3YSwgS0VZXzkgfSwKKwl7IDB4MGUsIEtFWV8wIH0sCisKKwl7IDB4MDIsIEtFWV9QT1dFUiB9LAorCXsgMHgyMiwgS0VZX1ZJREVPIH0sCisJeyAweDQyLCBLRVlfQVVESU8gfSwKKwl7IDB4NjIsIEtFWV9aT09NIH0sCisJeyAweDBhLCBLRVlfVFYgfSwKKwl7IDB4MTIsIEtFWV9DRCB9LAorCXsgMHgxYSwgS0VZX1RFWFQgfSwKKworCXsgMHgxNiwgS0VZX1NVQlRJVExFIH0sCisJeyAweDFlLCBLRVlfUkVXSU5EIH0sCisJeyAweDA2LCBLRVlfUFJJTlQgfSwKKworCXsgMHgyZSwgS0VZX1NFQVJDSCB9LAorCXsgMHgzNiwgS0VZX1NMRUVQIH0sCisJeyAweDNlLCBLRVlfU0hVRkZMRSB9LAorCXsgMHgyNiwgS0VZX01VVEUgfSwKKworCXsgMHg0ZSwgS0VZX1JFQ09SRCB9LAorCXsgMHg1NiwgS0VZX1BBVVNFIH0sCisJeyAweDVlLCBLRVlfU1RPUCB9LAorCXsgMHg0NiwgS0VZX1BMQVkgfSwKKworCXsgMHg2ZSwgS0VZX1JFRCB9LAorCXsgMHgwYiwgS0VZX0dSRUVOIH0sCisJeyAweDY2LCBLRVlfWUVMTE9XIH0sCisJeyAweDAzLCBLRVlfQkxVRSB9LAorCisJeyAweDc2LCBLRVlfTEVGVCB9LAorCXsgMHg3ZSwgS0VZX1JJR0hUIH0sCisJeyAweDEzLCBLRVlfRE9XTiB9LAorCXsgMHgxYiwgS0VZX1VQIH0sCit9OworCitzdGF0aWMgc3RydWN0IHJjX21hcF9saXN0IGF2ZXJ0dl8zMDNfbWFwID0geworCS5tYXAgPSB7CisJCS5zY2FuICAgID0gYXZlcnR2XzMwMywKKwkJLnNpemUgICAgPSBBUlJBWV9TSVpFKGF2ZXJ0dl8zMDMpLAorCQkucmNfdHlwZSA9IFJDX1RZUEVfVU5LTk9XTiwJLyogTGVnYWN5IElSIHR5cGUgKi8KKwkJLm5hbWUgICAgPSBSQ19NQVBfQVZFUlRWXzMwMywKKwl9Cit9OworCitzdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcF9hdmVydHZfMzAzKHZvaWQpCit7CisJcmV0dXJuIHJjX21hcF9yZWdpc3RlcigmYXZlcnR2XzMwM19tYXApOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yY19tYXBfYXZlcnR2XzMwMyh2b2lkKQoreworCXJjX21hcF91bnJlZ2lzdGVyKCZhdmVydHZfMzAzX21hcCk7Cit9CisKK21vZHVsZV9pbml0KGluaXRfcmNfbWFwX2F2ZXJ0dl8zMDMpCittb2R1bGVfZXhpdChleGl0X3JjX21hcF9hdmVydHZfMzAzKQorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1henVyZXdhdmUtYWQtdHU3MDAuYyBiL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1henVyZXdhdmUtYWQtdHU3MDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2Y2ZDYyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLWF6dXJld2F2ZS1hZC10dTcwMC5jCkBAIC0wLDAgKzEsMTAyIEBACisvKgorICogVHdpbkhhbiBBenVyZVdhdmUgQUQtVFU3MDAoNzA0SikgcmVtb3RlIGNvbnRyb2xsZXIga2V5dGFibGUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQW50dGkgUGFsb3NhYXJpIDxjcm9wZUBpa2kuZmk+CisgKgorICogICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiAgICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bWVkaWEvcmMtbWFwLmg+CisKK3N0YXRpYyBzdHJ1Y3QgcmNfbWFwX3RhYmxlIGF6dXJld2F2ZV9hZF90dTcwMFtdID0geworCXsgMHgwMDAwLCBLRVlfVEFCIH0sICAgICAgICAgICAgIC8qIFRhYiAqLworCXsgMHgwMDAxLCBLRVlfMiB9LAorCXsgMHgwMDAyLCBLRVlfQ0hBTk5FTERPV04gfSwKKwl7IDB4MDAwMywgS0VZXzEgfSwKKwl7IDB4MDAwNCwgS0VZX01FTlUgfSwgICAgICAgICAgICAvKiBSZWNvcmQgTGlzdCAqLworCXsgMHgwMDA1LCBLRVlfQ0hBTk5FTFVQIH0sCisJeyAweDAwMDYsIEtFWV8zIH0sCisJeyAweDAwMDcsIEtFWV9TTEVFUCB9LCAgICAgICAgICAgLyogSGliZXJuYXRlICovCisJeyAweDAwMDgsIEtFWV9WSURFTyB9LCAgICAgICAgICAgLyogQS9WICovCisJeyAweDAwMDksIEtFWV80IH0sCisJeyAweDAwMGEsIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweDAwMGMsIEtFWV9DQU5DRUwgfSwgICAgICAgICAgLyogQ2FuY2VsICovCisJeyAweDAwMGQsIEtFWV83IH0sCisJeyAweDAwMGUsIEtFWV9BR0FJTiB9LCAgICAgICAgICAgLyogUmVjYWxsICovCisJeyAweDAwMGYsIEtFWV9URVhUIH0sICAgICAgICAgICAgLyogVGVsZXRleHQgKi8KKwl7IDB4MDAxMCwgS0VZX01VVEUgfSwKKwl7IDB4MDAxMSwgS0VZX1JFQ09SRCB9LAorCXsgMHgwMDEyLCBLRVlfRkFTVEZPUldBUkQgfSwgICAgIC8qIEZGID4+ICovCisJeyAweDAwMTMsIEtFWV9CQUNLIH0sICAgICAgICAgICAgLyogQmFjayAqLworCXsgMHgwMDE0LCBLRVlfUExBWSB9LAorCXsgMHgwMDE1LCBLRVlfMCB9LAorCXsgMHgwMDE2LCBLRVlfUE9XRVIyIH0sICAgICAgICAgIC8qIFtyZWQgcG93ZXIgYnV0dG9uXSAqLworCXsgMHgwMDE3LCBLRVlfRkFWT1JJVEVTIH0sICAgICAgIC8qIEZhdm9yaXRlIExpc3QgKi8KKwl7IDB4MDAxOCwgS0VZX1JFRCB9LAorCXsgMHgwMDE5LCBLRVlfOCB9LAorCXsgMHgwMDFhLCBLRVlfU1RPUCB9LAorCXsgMHgwMDFiLCBLRVlfOSB9LAorCXsgMHgwMDFjLCBLRVlfRVBHIH0sICAgICAgICAgICAgIC8qIEluZm8vRVBHICovCisJeyAweDAwMWQsIEtFWV81IH0sCisJeyAweDAwMWUsIEtFWV9WT0xVTUVVUCB9LAorCXsgMHgwMDFmLCBLRVlfNiB9LAorCXsgMHgwMDQwLCBLRVlfUkVXSU5EIH0sICAgICAgICAgIC8qIEZSIDw8ICovCisJeyAweDAwNDEsIEtFWV9QUkVWSU9VUyB9LCAgICAgICAgLyogUmVwbGF5ICovCisJeyAweDAwNDIsIEtFWV9ORVhUIH0sICAgICAgICAgICAgLyogU2tpcCAqLworCXsgMHgwMDQzLCBLRVlfU1VCVElUTEUgfSwgICAgICAgIC8qIFN1YnRpdGxlIC8gQ0MgKi8KKwl7IDB4MDA0NSwgS0VZX0tQUExVUyB9LCAgICAgICAgICAvKiBab29tKyAqLworCXsgMHgwMDQ2LCBLRVlfS1BNSU5VUyB9LCAgICAgICAgIC8qIFpvb20tICovCisJeyAweDAwNDcsIEtFWV9ORVcgfSwgICAgICAgICAgICAgLyogUElQICovCisJeyAweDAwNDgsIEtFWV9JTkZPIH0sICAgICAgICAgICAgLyogUHJldmlldyAqLworCXsgMHgwMDQ5LCBLRVlfTU9ERSB9LCAgICAgICAgICAgIC8qIEwvUiAqLworCXsgMHgwMDRhLCBLRVlfQ0xFQVIgfSwgICAgICAgICAgIC8qIENsZWFyICovCisJeyAweDAwNGIsIEtFWV9VUCB9LCAgICAgICAgICAgICAgLyogdXAgYXJyb3cgKi8KKwl7IDB4MDA0YywgS0VZX1BBVVNFIH0sCisJeyAweDAwNGQsIEtFWV9aT09NIH0sICAgICAgICAgICAgLyogRnVsbCBTY3JlZW4gKi8KKwl7IDB4MDA0ZSwgS0VZX0xFRlQgfSwgICAgICAgICAgICAvKiBsZWZ0IGFycm93ICovCisJeyAweDAwNGYsIEtFWV9PSyB9LCAgICAgICAgICAgICAgLyogRW50ZXIgLyBvayAqLworCXsgMHgwMDUwLCBLRVlfTEFOR1VBR0UgfSwgICAgICAgIC8qIFNBUCAqLworCXsgMHgwMDUxLCBLRVlfRE9XTiB9LCAgICAgICAgICAgIC8qIGRvd24gYXJyb3cgKi8KKwl7IDB4MDA1MiwgS0VZX1JJR0hUIH0sICAgICAgICAgICAvKiByaWdodCBhcnJvdyAqLworCXsgMHgwMDUzLCBLRVlfR1JFRU4gfSwKKwl7IDB4MDA1NCwgS0VZX0NBTUVSQSB9LCAgICAgICAgICAvKiBDYXB0dXJlICovCisJeyAweDAwNWUsIEtFWV9ZRUxMT1cgfSwKKwl7IDB4MDA1ZiwgS0VZX0JMVUUgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmNfbWFwX2xpc3QgYXp1cmV3YXZlX2FkX3R1NzAwX21hcCA9IHsKKwkubWFwID0geworCQkuc2NhbiAgICA9IGF6dXJld2F2ZV9hZF90dTcwMCwKKwkJLnNpemUgICAgPSBBUlJBWV9TSVpFKGF6dXJld2F2ZV9hZF90dTcwMCksCisJCS5yY190eXBlID0gUkNfVFlQRV9ORUMsCisJCS5uYW1lICAgID0gUkNfTUFQX0FaVVJFV0FWRV9BRF9UVTcwMCwKKwl9Cit9OworCitzdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcF9henVyZXdhdmVfYWRfdHU3MDAodm9pZCkKK3sKKwlyZXR1cm4gcmNfbWFwX3JlZ2lzdGVyKCZhenVyZXdhdmVfYWRfdHU3MDBfbWFwKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGV4aXRfcmNfbWFwX2F6dXJld2F2ZV9hZF90dTcwMCh2b2lkKQoreworCXJjX21hcF91bnJlZ2lzdGVyKCZhenVyZXdhdmVfYWRfdHU3MDBfbWFwKTsKK30KKworbW9kdWxlX2luaXQoaW5pdF9yY19tYXBfYXp1cmV3YXZlX2FkX3R1NzAwKQorbW9kdWxlX2V4aXQoZXhpdF9yY19tYXBfYXp1cmV3YXZlX2FkX3R1NzAwKQorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJBbnR0aSBQYWxvc2FhcmkgPGNyb3BlQGlraS5maT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1iZWhvbGQtY29sdW1idXMuYyBiL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1iZWhvbGQtY29sdW1idXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Yjc4N2ZhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLWJlaG9sZC1jb2x1bWJ1cy5jCkBAIC0wLDAgKzEsMTA4IEBACisvKiBiZWhvbGQtY29sdW1idXMuaCAtIEtleXRhYmxlIGZvciBiZWhvbGRfY29sdW1idXMgUmVtb3RlIENvbnRyb2xsZXIKKyAqCisgKiBrZXltYXAgaW1wb3J0ZWQgZnJvbSBpci1rZXltYXBzLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgYnkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bWVkaWEvcmMtbWFwLmg+CisKKy8qIEJlaG9sZGVyIEludGwuIEx0ZC4gMjAwOAorICogRG1pdHJ5IEJlbGltb3YgZC5iZWxpbW92QGdvb2dsZS5jb20KKyAqIEtleXRhYmxlIGlzIHVzZWQgYnkgQmVob2xkVFYgQ29sdW1idXMKKyAqIFRoZSAiYXNjaWktYXJ0IHBpY3R1cmUiIGJlbG93IChpbiBjb21tZW50cywgZmlyc3Qgcm93CisgKiBpcyB0aGUga2V5Y29kZSBpbiBoZXgsIGFuZCBzdWJzZXF1ZW50IHJvdyhzKSBzaG93cworICogdGhlIGJ1dHRvbiBsYWJlbHMgKHNldmVyYWwgdmFyaWFudHMgd2hlbiBhcHByb3ByaWF0ZSkKKyAqIGhlbHBzIHRvIGRlc2NpZGUgd2hpY2gga2V5Y29kZXMgdG8gYXNzaWduIHRvIHRoZSBidXR0b25zLgorICovCisKK3N0YXRpYyBzdHJ1Y3QgcmNfbWFwX3RhYmxlIGJlaG9sZF9jb2x1bWJ1c1tdID0geworCisJLyogIDB4MTMgICAweDExICAgMHgxQyAgIDB4MTIgICoKKwkgKiAgTXV0ZSAgU291cmNlICBUVi9GTSAgUG93ZXIgKgorCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisJeyAweDEzLCBLRVlfTVVURSB9LAorCXsgMHgxMSwgS0VZX1BST1BTIH0sCisJeyAweDFDLCBLRVlfVFVORVIgfSwJLyogS0VZX1RWL0tFWV9SQURJTwkqLworCXsgMHgxMiwgS0VZX1BPV0VSIH0sCisKKwkvKiAgMHgwMSAgICAweDAyICAgIDB4MDMgIDB4MEQgICAgKgorCSAqICAgMSAgICAgICAyICAgICAgIDMgICBTdGVyZW8gICAqCisJICogICAgICAgICAgICAgICAgICAgICAgICAJICAqCisJICogIDB4MDQgICAgMHgwNSAgICAweDA2ICAweDE5ICAgICoKKwkgKiAgIDQgICAgICAgNSAgICAgICA2ICAgU25hcHNob3QgKgorCSAqICAgICAgICAgICAgICAgICAgICAgICAgCSAgKgorCSAqICAweDA3ICAgIDB4MDggICAgMHgwOSAgMHgxMCAgICAqCisJICogICA3ICAgICAgIDggICAgICAgOSAgICBab29tIAkgICoKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwl7IDB4MDEsIEtFWV8xIH0sCisJeyAweDAyLCBLRVlfMiB9LAorCXsgMHgwMywgS0VZXzMgfSwKKwl7IDB4MEQsIEtFWV9TRVRVUCB9LAkgIC8qIFNldHVwIGtleSAqLworCXsgMHgwNCwgS0VZXzQgfSwKKwl7IDB4MDUsIEtFWV81IH0sCisJeyAweDA2LCBLRVlfNiB9LAorCXsgMHgxOSwgS0VZX0NBTUVSQSB9LAkvKiBTbmFwc2hvdCBrZXkgKi8KKwl7IDB4MDcsIEtFWV83IH0sCisJeyAweDA4LCBLRVlfOCB9LAorCXsgMHgwOSwgS0VZXzkgfSwKKwl7IDB4MTAsIEtFWV9aT09NIH0sCisKKwkvKiAgMHgwQSAgICAweDAwICAgIDB4MEIgICAgICAgMHgwQyAgICoKKwkgKiBSRUNBTEwgICAgMCAgICBDaGFubmVsVXAgIFZvbHVtZVVwICoKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJeyAweDBBLCBLRVlfQUdBSU4gfSwKKwl7IDB4MDAsIEtFWV8wIH0sCisJeyAweDBCLCBLRVlfQ0hBTk5FTFVQIH0sCisJeyAweDBDLCBLRVlfVk9MVU1FVVAgfSwKKworCS8qICAgMHgxQiAgICAgIDB4MUQgICAgICAweDE1ICAgICAgICAweDE4ICAgICAqCisJICogVGltZXNoaWZ0ICBSZWNvcmQgIENoYW5uZWxEb3duICBWb2x1bWVEb3duICoKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworCXsgMHgxQiwgS0VZX1RJTUUgfSwKKwl7IDB4MUQsIEtFWV9SRUNPUkQgfSwKKwl7IDB4MTUsIEtFWV9DSEFOTkVMRE9XTiB9LAorCXsgMHgxOCwgS0VZX1ZPTFVNRURPV04gfSwKKworCS8qICAgMHgwRSAgIDB4MUUgICAgIDB4MEYgICAgIDB4MUEgICoKKwkgKiAgIFN0b3AgICBQYXVzZSAgUHJldmlvdXNlICBOZXh0ICAqCisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworCXsgMHgwRSwgS0VZX1NUT1AgfSwKKwl7IDB4MUUsIEtFWV9QQVVTRSB9LAorCXsgMHgwRiwgS0VZX1BSRVZJT1VTIH0sCisJeyAweDFBLCBLRVlfTkVYVCB9LAorCit9OworCitzdGF0aWMgc3RydWN0IHJjX21hcF9saXN0IGJlaG9sZF9jb2x1bWJ1c19tYXAgPSB7CisJLm1hcCA9IHsKKwkJLnNjYW4gICAgPSBiZWhvbGRfY29sdW1idXMsCisJCS5zaXplICAgID0gQVJSQVlfU0laRShiZWhvbGRfY29sdW1idXMpLAorCQkucmNfdHlwZSA9IFJDX1RZUEVfVU5LTk9XTiwJLyogTGVnYWN5IElSIHR5cGUgKi8KKwkJLm5hbWUgICAgPSBSQ19NQVBfQkVIT0xEX0NPTFVNQlVTLAorCX0KK307CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfcmNfbWFwX2JlaG9sZF9jb2x1bWJ1cyh2b2lkKQoreworCXJldHVybiByY19tYXBfcmVnaXN0ZXIoJmJlaG9sZF9jb2x1bWJ1c19tYXApOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yY19tYXBfYmVob2xkX2NvbHVtYnVzKHZvaWQpCit7CisJcmNfbWFwX3VucmVnaXN0ZXIoJmJlaG9sZF9jb2x1bWJ1c19tYXApOworfQorCittb2R1bGVfaW5pdChpbml0X3JjX21hcF9iZWhvbGRfY29sdW1idXMpCittb2R1bGVfZXhpdChleGl0X3JjX21hcF9iZWhvbGRfY29sdW1idXMpCisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIk1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLWJlaG9sZC5jIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLWJlaG9sZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlZTFmMTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtYmVob2xkLmMKQEAgLTAsMCArMSwxNDEgQEAKKy8qIGJlaG9sZC5oIC0gS2V5dGFibGUgZm9yIGJlaG9sZCBSZW1vdGUgQ29udHJvbGxlcgorICoKKyAqIGtleW1hcCBpbXBvcnRlZCBmcm9tIGlyLWtleW1hcHMuYworICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBieSBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxtZWRpYS9yYy1tYXAuaD4KKworLyoKKyAqIElnb3IgS3V6bmV0c292IDxpZ2s3MkB5YS5ydT4KKyAqIEFuZHJleSBKLiBNZWxuaWtvdiA8dGVtbm90YUBrbXYucnU+CisgKgorICogS2V5dGFibGUgaXMgdXNlZCBieSBCZWhvbGRUViA2MHggc2VyaWVzLCBNNiBzZXJpZXMgYXQKKyAqIGxlYXN0LCBhbmQgcHJvYmFibHkgb3RoZXIgY2FyZHMgdG9vLgorICogVGhlICJhc2NpaS1hcnQgcGljdHVyZSIgYmVsb3cgKGluIGNvbW1lbnRzLCBmaXJzdCByb3cKKyAqIGlzIHRoZSBrZXljb2RlIGluIGhleCwgYW5kIHN1YnNlcXVlbnQgcm93KHMpIHNob3dzCisgKiB0aGUgYnV0dG9uIGxhYmVscyAoc2V2ZXJhbCB2YXJpYW50cyB3aGVuIGFwcHJvcHJpYXRlKQorICogaGVscHMgdG8gZGVzY2lkZSB3aGljaCBrZXljb2RlcyB0byBhc3NpZ24gdG8gdGhlIGJ1dHRvbnMuCisgKi8KKworc3RhdGljIHN0cnVjdCByY19tYXBfdGFibGUgYmVob2xkW10gPSB7CisKKwkvKiAgMHgxYyAgICAgICAgICAgIDB4MTIgICoKKwkgKiAgVFYvRk0gICAgICAgICAgUE9XRVIgICoKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICovCisJeyAweDZiODYxYywgS0VZX1RVTkVSIH0sCS8qIFhYWCBLRVlfVFYgLyBLRVlfUkFESU8gKi8KKwl7IDB4NmI4NjEyLCBLRVlfUE9XRVIgfSwKKworCS8qICAweDAxICAgIDB4MDIgICAgMHgwMyAgKgorCSAqICAgMSAgICAgICAyICAgICAgIDMgICAgKgorCSAqICAgICAgICAgICAgICAgICAgICAgICAgKgorCSAqICAweDA0ICAgIDB4MDUgICAgMHgwNiAgKgorCSAqICAgNCAgICAgICA1ICAgICAgIDYgICAgKgorCSAqICAgICAgICAgICAgICAgICAgICAgICAgKgorCSAqICAweDA3ICAgIDB4MDggICAgMHgwOSAgKgorCSAqICAgNyAgICAgICA4ICAgICAgIDkgICAgKgorCSAqICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwl7IDB4NmI4NjAxLCBLRVlfMSB9LAorCXsgMHg2Yjg2MDIsIEtFWV8yIH0sCisJeyAweDZiODYwMywgS0VZXzMgfSwKKwl7IDB4NmI4NjA0LCBLRVlfNCB9LAorCXsgMHg2Yjg2MDUsIEtFWV81IH0sCisJeyAweDZiODYwNiwgS0VZXzYgfSwKKwl7IDB4NmI4NjA3LCBLRVlfNyB9LAorCXsgMHg2Yjg2MDgsIEtFWV84IH0sCisJeyAweDZiODYwOSwgS0VZXzkgfSwKKworCS8qICAweDBhICAgIDB4MDAgICAgMHgxNyAgKgorCSAqIFJFQ0FMTCAgICAwICAgICAgTU9ERSAgKgorCSAqICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwl7IDB4NmI4NjBhLCBLRVlfQUdBSU4gfSwKKwl7IDB4NmI4NjAwLCBLRVlfMCB9LAorCXsgMHg2Yjg2MTcsIEtFWV9NT0RFIH0sCisKKwkvKiAgMHgxNCAgICAgICAgICAweDEwICAgICoKKwkgKiBBU1BFQ1QgICAgICBGVUxMU0NSRUVOICoKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICovCisJeyAweDZiODYxNCwgS0VZX1NDUkVFTiB9LAorCXsgMHg2Yjg2MTAsIEtFWV9aT09NIH0sCisKKwkvKiAgICAgICAgICAweDBiICAgICAgICAgICoKKwkgKiAgICAgICAgICAgVXAgICAgICAgICAgICoKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICoKKwkgKiAgMHgxOCAgICAweDE2ICAgIDB4MGMgICoKKwkgKiAgTGVmdCAgICAgT2sgICAgIFJpZ2h0ICoKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICoKKwkgKiAgICAgICAgIDB4MDE1ICAgICAgICAgICoKKwkgKiAgICAgICAgIERvd24gICAgICAgICAgICoKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICovCisJeyAweDZiODYwYiwgS0VZX0NIQU5ORUxVUCB9LAorCXsgMHg2Yjg2MTgsIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweDZiODYxNiwgS0VZX09LIH0sCQkvKiBYWFggS0VZX0VOVEVSICovCisJeyAweDZiODYwYywgS0VZX1ZPTFVNRVVQIH0sCisJeyAweDZiODYxNSwgS0VZX0NIQU5ORUxET1dOIH0sCisKKwkvKiAgMHgxMSAgICAgICAgICAgIDB4MGQgICoKKwkgKiAgTVVURSAgICAgICAgICAgIElORk8gICoKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICovCisJeyAweDZiODYxMSwgS0VZX01VVEUgfSwKKwl7IDB4NmI4NjBkLCBLRVlfSU5GTyB9LAorCisJLyogIDB4MGYgICAgMHgxYiAgICAweDFhICAqCisJICogUkVDT1JEIFBMQVkvUEFVU0UgU1RPUCAqCisJICogICAgICAgICAgICAgICAgICAgICAgICAqCisJICogIDB4MGUgICAgMHgxZiAgICAweDFlICAqCisJICpURUxFVEVYVCAgQVVESU8gIFNPVVJDRSAqCisJICogICAgICAgICAgIFJFRCAgIFlFTExPVyAqCisJICogICAgICAgICAgICAgICAgICAgICAgICAqLworCXsgMHg2Yjg2MGYsIEtFWV9SRUNPUkQgfSwKKwl7IDB4NmI4NjFiLCBLRVlfUExBWVBBVVNFIH0sCisJeyAweDZiODYxYSwgS0VZX1NUT1AgfSwKKwl7IDB4NmI4NjBlLCBLRVlfVEVYVCB9LAorCXsgMHg2Yjg2MWYsIEtFWV9SRUQgfSwJLypYWFggS0VZX0FVRElPCSovCisJeyAweDZiODYxZSwgS0VZX1lFTExPVyB9LAkvKlhYWCBLRVlfU09VUkNFCSovCisKKwkvKiAgMHgxZCAgIDB4MTMgICAgIDB4MTkgICoKKwkgKiBTTEVFUCAgUFJFVklFVyAgIERWQiAgICoKKwkgKiAgICAgICAgIEdSRUVOICAgIEJMVUUgICoKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICovCisJeyAweDZiODYxZCwgS0VZX1NMRUVQIH0sCisJeyAweDZiODYxMywgS0VZX0dSRUVOIH0sCisJeyAweDZiODYxOSwgS0VZX0JMVUUgfSwJLyogWFhYIEtFWV9TQVQJKi8KKworCS8qICAweDU4ICAgICAgICAgICAweDVjICAgKgorCSAqIEZSRUVaRSAgICAgICAgU05BUFNIT1QgKgorCSAqICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwl7IDB4NmI4NjU4LCBLRVlfU0xPVyB9LAorCXsgMHg2Yjg2NWMsIEtFWV9DQU1FUkEgfSwKKworfTsKKworc3RhdGljIHN0cnVjdCByY19tYXBfbGlzdCBiZWhvbGRfbWFwID0geworCS5tYXAgPSB7CisJCS5zY2FuICAgID0gYmVob2xkLAorCQkuc2l6ZSAgICA9IEFSUkFZX1NJWkUoYmVob2xkKSwKKwkJLnJjX3R5cGUgPSBSQ19UWVBFX05FQywKKwkJLm5hbWUgICAgPSBSQ19NQVBfQkVIT0xELAorCX0KK307CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfcmNfbWFwX2JlaG9sZCh2b2lkKQoreworCXJldHVybiByY19tYXBfcmVnaXN0ZXIoJmJlaG9sZF9tYXApOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yY19tYXBfYmVob2xkKHZvaWQpCit7CisJcmNfbWFwX3VucmVnaXN0ZXIoJmJlaG9sZF9tYXApOworfQorCittb2R1bGVfaW5pdChpbml0X3JjX21hcF9iZWhvbGQpCittb2R1bGVfZXhpdChleGl0X3JjX21hcF9iZWhvbGQpCisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIk1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLWJ1ZGdldC1jaS1vbGQuYyBiL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1idWRnZXQtY2ktb2xkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdmYzM4NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1idWRnZXQtY2ktb2xkLmMKQEAgLTAsMCArMSw5MiBAQAorLyogYnVkZ2V0LWNpLW9sZC5oIC0gS2V5dGFibGUgZm9yIGJ1ZGdldF9jaV9vbGQgUmVtb3RlIENvbnRyb2xsZXIKKyAqCisgKiBrZXltYXAgaW1wb3J0ZWQgZnJvbSBpci1rZXltYXBzLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgYnkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bWVkaWEvcmMtbWFwLmg+CisKKy8qIEZyb20gcmVhZGluZyB0aGUgZm9sbG93aW5nIHJlbW90ZXM6CisgKiBaZW5pdGggVW5pdmVyc2FsIDcgLyBUViBNb2RlIDgwNyAvIFZDUiBNb2RlIDgzNworICogSGF1cHBhdWdlIChmcm9tIE5PVkEtQ0ktcyBib3ggcHJvZHVjdCkKKyAqIFRoaXMgaXMgYSAibWlkZGxlIG9mIHRoZSByb2FkIiBhcHByb2FjaCwgZGlmZmVyZW5jZXMgYXJlIG5vdGVkCisgKi8KKworc3RhdGljIHN0cnVjdCByY19tYXBfdGFibGUgYnVkZ2V0X2NpX29sZFtdID0geworCXsgMHgwMCwgS0VZXzAgfSwKKwl7IDB4MDEsIEtFWV8xIH0sCisJeyAweDAyLCBLRVlfMiB9LAorCXsgMHgwMywgS0VZXzMgfSwKKwl7IDB4MDQsIEtFWV80IH0sCisJeyAweDA1LCBLRVlfNSB9LAorCXsgMHgwNiwgS0VZXzYgfSwKKwl7IDB4MDcsIEtFWV83IH0sCisJeyAweDA4LCBLRVlfOCB9LAorCXsgMHgwOSwgS0VZXzkgfSwKKwl7IDB4MGEsIEtFWV9FTlRFUiB9LAorCXsgMHgwYiwgS0VZX1JFRCB9LAorCXsgMHgwYywgS0VZX1BPV0VSIH0sCQkvKiBSQURJTyBvbiBIYXVwcGF1Z2UgKi8KKwl7IDB4MGQsIEtFWV9NVVRFIH0sCisJeyAweDBmLCBLRVlfQSB9LAkJLyogVFYgb24gSGF1cHBhdWdlICovCisJeyAweDEwLCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4MTEsIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweDE0LCBLRVlfQiB9LAorCXsgMHgxYywgS0VZX1VQIH0sCisJeyAweDFkLCBLRVlfRE9XTiB9LAorCXsgMHgxZSwgS0VZX09QVElPTiB9LAkJLyogUkVTRVJWRUQgb24gSGF1cHBhdWdlICovCisJeyAweDFmLCBLRVlfQlJFQUsgfSwKKwl7IDB4MjAsIEtFWV9DSEFOTkVMVVAgfSwKKwl7IDB4MjEsIEtFWV9DSEFOTkVMRE9XTiB9LAorCXsgMHgyMiwgS0VZX1BSRVZJT1VTIH0sCQkvKiBQcmV2IENoIG9uIFplbml0aCwgU09VUkNFIG9uIEhhdXBwYXVnZSAqLworCXsgMHgyNCwgS0VZX1JFU1RBUlQgfSwKKwl7IDB4MjUsIEtFWV9PSyB9LAorCXsgMHgyNiwgS0VZX0NZQ0xFV0lORE9XUyB9LAkvKiBNSU5JTUlaRSBvbiBIYXVwcGF1Z2UgKi8KKwl7IDB4MjgsIEtFWV9FTlRFUiB9LAkJLyogVkNSIG1vZGUgb24gWmVuaXRoICovCisJeyAweDI5LCBLRVlfUEFVU0UgfSwKKwl7IDB4MmIsIEtFWV9SSUdIVCB9LAorCXsgMHgyYywgS0VZX0xFRlQgfSwKKwl7IDB4MmUsIEtFWV9NRU5VIH0sCQkvKiBGVUxMIFNDUkVFTiBvbiBIYXVwcGF1Z2UgKi8KKwl7IDB4MzAsIEtFWV9TTE9XIH0sCisJeyAweDMxLCBLRVlfUFJFVklPVVMgfSwJCS8qIFZDUiBtb2RlIG9uIFplbml0aCAqLworCXsgMHgzMiwgS0VZX1JFV0lORCB9LAorCXsgMHgzNCwgS0VZX0ZBU1RGT1JXQVJEIH0sCisJeyAweDM1LCBLRVlfUExBWSB9LAorCXsgMHgzNiwgS0VZX1NUT1AgfSwKKwl7IDB4MzcsIEtFWV9SRUNPUkQgfSwKKwl7IDB4MzgsIEtFWV9UVU5FUiB9LAkJLyogVFYvVkNSIG9uIFplbml0aCAqLworCXsgMHgzYSwgS0VZX0MgfSwKKwl7IDB4M2MsIEtFWV9FWElUIH0sCisJeyAweDNkLCBLRVlfUE9XRVIyIH0sCisJeyAweDNlLCBLRVlfVFVORVIgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmNfbWFwX2xpc3QgYnVkZ2V0X2NpX29sZF9tYXAgPSB7CisJLm1hcCA9IHsKKwkJLnNjYW4gICAgPSBidWRnZXRfY2lfb2xkLAorCQkuc2l6ZSAgICA9IEFSUkFZX1NJWkUoYnVkZ2V0X2NpX29sZCksCisJCS5yY190eXBlID0gUkNfVFlQRV9VTktOT1dOLAkvKiBMZWdhY3kgSVIgdHlwZSAqLworCQkubmFtZSAgICA9IFJDX01BUF9CVURHRVRfQ0lfT0xELAorCX0KK307CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfcmNfbWFwX2J1ZGdldF9jaV9vbGQodm9pZCkKK3sKKwlyZXR1cm4gcmNfbWFwX3JlZ2lzdGVyKCZidWRnZXRfY2lfb2xkX21hcCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3JjX21hcF9idWRnZXRfY2lfb2xkKHZvaWQpCit7CisJcmNfbWFwX3VucmVnaXN0ZXIoJmJ1ZGdldF9jaV9vbGRfbWFwKTsKK30KKworbW9kdWxlX2luaXQoaW5pdF9yY19tYXBfYnVkZ2V0X2NpX29sZCkKK21vZHVsZV9leGl0KGV4aXRfcmNfbWFwX2J1ZGdldF9jaV9vbGQpCisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIk1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLWNpbmVyZ3ktMTQwMC5jIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLWNpbmVyZ3ktMTQwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4NDUzNGIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtY2luZXJneS0xNDAwLmMKQEAgLTAsMCArMSw4NCBAQAorLyogY2luZXJneS0xNDAwLmggLSBLZXl0YWJsZSBmb3IgY2luZXJneV8xNDAwIFJlbW90ZSBDb250cm9sbGVyCisgKgorICoga2V5bWFwIGltcG9ydGVkIGZyb20gaXIta2V5bWFwcy5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPG1lZGlhL3JjLW1hcC5oPgorCisvKiBDaW5lcmd5IDE0MDAgRFZCLVQgKi8KKworc3RhdGljIHN0cnVjdCByY19tYXBfdGFibGUgY2luZXJneV8xNDAwW10gPSB7CisJeyAweDAxLCBLRVlfUE9XRVIgfSwKKwl7IDB4MDIsIEtFWV8xIH0sCisJeyAweDAzLCBLRVlfMiB9LAorCXsgMHgwNCwgS0VZXzMgfSwKKwl7IDB4MDUsIEtFWV80IH0sCisJeyAweDA2LCBLRVlfNSB9LAorCXsgMHgwNywgS0VZXzYgfSwKKwl7IDB4MDgsIEtFWV83IH0sCisJeyAweDA5LCBLRVlfOCB9LAorCXsgMHgwYSwgS0VZXzkgfSwKKwl7IDB4MGMsIEtFWV8wIH0sCisKKwl7IDB4MGIsIEtFWV9WSURFTyB9LAorCXsgMHgwZCwgS0VZX1JFRlJFU0ggfSwKKwl7IDB4MGUsIEtFWV9TRUxFQ1QgfSwKKwl7IDB4MGYsIEtFWV9FUEcgfSwKKwl7IDB4MTAsIEtFWV9VUCB9LAorCXsgMHgxMSwgS0VZX0xFRlQgfSwKKwl7IDB4MTIsIEtFWV9PSyB9LAorCXsgMHgxMywgS0VZX1JJR0hUIH0sCisJeyAweDE0LCBLRVlfRE9XTiB9LAorCXsgMHgxNSwgS0VZX1RFWFQgfSwKKwl7IDB4MTYsIEtFWV9JTkZPIH0sCisKKwl7IDB4MTcsIEtFWV9SRUQgfSwKKwl7IDB4MTgsIEtFWV9HUkVFTiB9LAorCXsgMHgxOSwgS0VZX1lFTExPVyB9LAorCXsgMHgxYSwgS0VZX0JMVUUgfSwKKworCXsgMHgxYiwgS0VZX0NIQU5ORUxVUCB9LAorCXsgMHgxYywgS0VZX1ZPTFVNRVVQIH0sCisJeyAweDFkLCBLRVlfTVVURSB9LAorCXsgMHgxZSwgS0VZX1ZPTFVNRURPV04gfSwKKwl7IDB4MWYsIEtFWV9DSEFOTkVMRE9XTiB9LAorCisJeyAweDQwLCBLRVlfUEFVU0UgfSwKKwl7IDB4NGMsIEtFWV9QTEFZIH0sCisJeyAweDU4LCBLRVlfUkVDT1JEIH0sCisJeyAweDU0LCBLRVlfUFJFVklPVVMgfSwKKwl7IDB4NDgsIEtFWV9TVE9QIH0sCisJeyAweDVjLCBLRVlfTkVYVCB9LAorfTsKKworc3RhdGljIHN0cnVjdCByY19tYXBfbGlzdCBjaW5lcmd5XzE0MDBfbWFwID0geworCS5tYXAgPSB7CisJCS5zY2FuICAgID0gY2luZXJneV8xNDAwLAorCQkuc2l6ZSAgICA9IEFSUkFZX1NJWkUoY2luZXJneV8xNDAwKSwKKwkJLnJjX3R5cGUgPSBSQ19UWVBFX1VOS05PV04sCS8qIExlZ2FjeSBJUiB0eXBlICovCisJCS5uYW1lICAgID0gUkNfTUFQX0NJTkVSR1lfMTQwMCwKKwl9Cit9OworCitzdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcF9jaW5lcmd5XzE0MDAodm9pZCkKK3sKKwlyZXR1cm4gcmNfbWFwX3JlZ2lzdGVyKCZjaW5lcmd5XzE0MDBfbWFwKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGV4aXRfcmNfbWFwX2NpbmVyZ3lfMTQwMCh2b2lkKQoreworCXJjX21hcF91bnJlZ2lzdGVyKCZjaW5lcmd5XzE0MDBfbWFwKTsKK30KKworbW9kdWxlX2luaXQoaW5pdF9yY19tYXBfY2luZXJneV8xNDAwKQorbW9kdWxlX2V4aXQoZXhpdF9yY19tYXBfY2luZXJneV8xNDAwKQorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1jaW5lcmd5LmMgYi9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtY2luZXJneS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5NTIwZmYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtY2luZXJneS5jCkBAIC0wLDAgKzEsNzggQEAKKy8qIGNpbmVyZ3kuaCAtIEtleXRhYmxlIGZvciBjaW5lcmd5IFJlbW90ZSBDb250cm9sbGVyCisgKgorICoga2V5bWFwIGltcG9ydGVkIGZyb20gaXIta2V5bWFwcy5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPG1lZGlhL3JjLW1hcC5oPgorCitzdGF0aWMgc3RydWN0IHJjX21hcF90YWJsZSBjaW5lcmd5W10gPSB7CisJeyAweDAwLCBLRVlfMCB9LAorCXsgMHgwMSwgS0VZXzEgfSwKKwl7IDB4MDIsIEtFWV8yIH0sCisJeyAweDAzLCBLRVlfMyB9LAorCXsgMHgwNCwgS0VZXzQgfSwKKwl7IDB4MDUsIEtFWV81IH0sCisJeyAweDA2LCBLRVlfNiB9LAorCXsgMHgwNywgS0VZXzcgfSwKKwl7IDB4MDgsIEtFWV84IH0sCisJeyAweDA5LCBLRVlfOSB9LAorCisJeyAweDBhLCBLRVlfUE9XRVIgfSwKKwl7IDB4MGIsIEtFWV9QUk9HMSB9LAkJLyogYXBwICovCisJeyAweDBjLCBLRVlfWk9PTSB9LAkJLyogem9vbS9mdWxsc2NyZWVuICovCisJeyAweDBkLCBLRVlfQ0hBTk5FTFVQIH0sCS8qIGNoYW5uZWwgKi8KKwl7IDB4MGUsIEtFWV9DSEFOTkVMRE9XTiB9LAkvKiBjaGFubmVsLSAqLworCXsgMHgwZiwgS0VZX1ZPTFVNRVVQIH0sCisJeyAweDEwLCBLRVlfVk9MVU1FRE9XTiB9LAorCXsgMHgxMSwgS0VZX1RVTkVSIH0sCQkvKiBBViAqLworCXsgMHgxMiwgS0VZX05VTUxPQ0sgfSwJCS8qIC0vLS0gKi8KKwl7IDB4MTMsIEtFWV9BVURJTyB9LAkJLyogYXVkaW8gKi8KKwl7IDB4MTQsIEtFWV9NVVRFIH0sCisJeyAweDE1LCBLRVlfVVAgfSwKKwl7IDB4MTYsIEtFWV9ET1dOIH0sCisJeyAweDE3LCBLRVlfTEVGVCB9LAorCXsgMHgxOCwgS0VZX1JJR0hUIH0sCisJeyAweDE5LCBCVE5fTEVGVCwgfSwKKwl7IDB4MWEsIEJUTl9SSUdIVCwgfSwKKwl7IDB4MWIsIEtFWV9XV1cgfSwJCS8qIHRleHQgKi8KKwl7IDB4MWMsIEtFWV9SRVdJTkQgfSwKKwl7IDB4MWQsIEtFWV9GT1JXQVJEIH0sCisJeyAweDFlLCBLRVlfUkVDT1JEIH0sCisJeyAweDFmLCBLRVlfUExBWSB9LAorCXsgMHgyMCwgS0VZX1BSRVZJT1VTU09ORyB9LAorCXsgMHgyMSwgS0VZX05FWFRTT05HIH0sCisJeyAweDIyLCBLRVlfUEFVU0UgfSwKKwl7IDB4MjMsIEtFWV9TVE9QIH0sCit9OworCitzdGF0aWMgc3RydWN0IHJjX21hcF9saXN0IGNpbmVyZ3lfbWFwID0geworCS5tYXAgPSB7CisJCS5zY2FuICAgID0gY2luZXJneSwKKwkJLnNpemUgICAgPSBBUlJBWV9TSVpFKGNpbmVyZ3kpLAorCQkucmNfdHlwZSA9IFJDX1RZUEVfVU5LTk9XTiwJLyogTGVnYWN5IElSIHR5cGUgKi8KKwkJLm5hbWUgICAgPSBSQ19NQVBfQ0lORVJHWSwKKwl9Cit9OworCitzdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcF9jaW5lcmd5KHZvaWQpCit7CisJcmV0dXJuIHJjX21hcF9yZWdpc3RlcigmY2luZXJneV9tYXApOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yY19tYXBfY2luZXJneSh2b2lkKQoreworCXJjX21hcF91bnJlZ2lzdGVyKCZjaW5lcmd5X21hcCk7Cit9CisKK21vZHVsZV9pbml0KGluaXRfcmNfbWFwX2NpbmVyZ3kpCittb2R1bGVfZXhpdChleGl0X3JjX21hcF9jaW5lcmd5KQorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1kaWIwNzAwLW5lYy5jIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLWRpYjA3MDAtbmVjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU5ODUxYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1kaWIwNzAwLW5lYy5jCkBAIC0wLDAgKzEsMTI0IEBACisvKiByYy1kdmIwNzAwLWJpZy5jIC0gS2V5dGFibGUgZm9yIGRldmljZXMgaW4gZHZiMDcwMAorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBieSBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4KKyAqCisgKiBUT0RPOiBUaGlzIHRhYmxlIGlzIGEgcmVhbCBtZXNzLCBhcyBpdCBtZXJnZXMgUkMgY29kZXMgZnJvbSBzZXZlcmFsCisgKiBkZXZpY2VzIGludG8gYSBiaWcgdGFibGUuIEl0IGFsc28gaGFzIGJvdGggUkMtNSBhbmQgTkVDIGNvZGVzIGluc2lkZS4KKyAqIEl0IHNob3VsZCBiZSBicm9rZW4gaW50byBzbWFsbCB0YWJsZXMsIGFuZCB0aGUgcHJvdG9jb2xzIHNob3VsZCBwcm9wZXJseQorICogYmUgaW5kZW50aWZpY2F0ZWQuCisgKgorICogVGhlIHRhYmxlIHdlcmUgaW1wb3J0ZWQgZnJvbSBkaWIwNzAwX2RldmljZXMuYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxtZWRpYS9yYy1tYXAuaD4KKworc3RhdGljIHN0cnVjdCByY19tYXBfdGFibGUgZGliMDcwMF9uZWNfdGFibGVbXSA9IHsKKwkvKiBLZXkgY29kZXMgZm9yIHRoZSBQaXhlbHZpZXcgU0JUVkQgcmVtb3RlICovCisJeyAweDg2MTMsIEtFWV9NVVRFIH0sCisJeyAweDg2MTIsIEtFWV9QT1dFUiB9LAorCXsgMHg4NjAxLCBLRVlfMSB9LAorCXsgMHg4NjAyLCBLRVlfMiB9LAorCXsgMHg4NjAzLCBLRVlfMyB9LAorCXsgMHg4NjA0LCBLRVlfNCB9LAorCXsgMHg4NjA1LCBLRVlfNSB9LAorCXsgMHg4NjA2LCBLRVlfNiB9LAorCXsgMHg4NjA3LCBLRVlfNyB9LAorCXsgMHg4NjA4LCBLRVlfOCB9LAorCXsgMHg4NjA5LCBLRVlfOSB9LAorCXsgMHg4NjAwLCBLRVlfMCB9LAorCXsgMHg4NjBkLCBLRVlfQ0hBTk5FTFVQIH0sCisJeyAweDg2MTksIEtFWV9DSEFOTkVMRE9XTiB9LAorCXsgMHg4NjEwLCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4ODYwYywgS0VZX1ZPTFVNRURPV04gfSwKKworCXsgMHg4NjBhLCBLRVlfQ0FNRVJBIH0sCisJeyAweDg2MGIsIEtFWV9aT09NIH0sCisJeyAweDg2MWIsIEtFWV9CQUNLU1BBQ0UgfSwKKwl7IDB4ODYxNSwgS0VZX0VOVEVSIH0sCisKKwl7IDB4ODYxZCwgS0VZX1VQIH0sCisJeyAweDg2MWUsIEtFWV9ET1dOIH0sCisJeyAweDg2MGUsIEtFWV9MRUZUIH0sCisJeyAweDg2MGYsIEtFWV9SSUdIVCB9LAorCisJeyAweDg2MTgsIEtFWV9SRUNPUkQgfSwKKwl7IDB4ODYxYSwgS0VZX1NUT1AgfSwKKworCS8qIEtleSBjb2RlcyBmb3IgdGhlIEV2b2x1dGVQQyBUVldheSsgcmVtb3RlICovCisJeyAweDdhMDAsIEtFWV9NRU5VIH0sCisJeyAweDdhMDEsIEtFWV9SRUNPUkQgfSwKKwl7IDB4N2EwMiwgS0VZX1BMQVkgfSwKKwl7IDB4N2EwMywgS0VZX1NUT1AgfSwKKwl7IDB4N2ExMCwgS0VZX0NIQU5ORUxVUCB9LAorCXsgMHg3YTExLCBLRVlfQ0hBTk5FTERPV04gfSwKKwl7IDB4N2ExMiwgS0VZX1ZPTFVNRVVQIH0sCisJeyAweDdhMTMsIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweDdhNDAsIEtFWV9QT1dFUiB9LAorCXsgMHg3YTQxLCBLRVlfTVVURSB9LAorCisJLyogS2V5IGNvZGVzIGZvciB0aGUgRWxnYXRvIEV5ZVRWIERpdmVyc2l0eSBzaWx2ZXIgcmVtb3RlICovCisJeyAweDQ1MDEsIEtFWV9QT1dFUiB9LAorCXsgMHg0NTAyLCBLRVlfTVVURSB9LAorCXsgMHg0NTAzLCBLRVlfMSB9LAorCXsgMHg0NTA0LCBLRVlfMiB9LAorCXsgMHg0NTA1LCBLRVlfMyB9LAorCXsgMHg0NTA2LCBLRVlfNCB9LAorCXsgMHg0NTA3LCBLRVlfNSB9LAorCXsgMHg0NTA4LCBLRVlfNiB9LAorCXsgMHg0NTA5LCBLRVlfNyB9LAorCXsgMHg0NTBhLCBLRVlfOCB9LAorCXsgMHg0NTBiLCBLRVlfOSB9LAorCXsgMHg0NTBjLCBLRVlfTEFTVCB9LAorCXsgMHg0NTBkLCBLRVlfMCB9LAorCXsgMHg0NTBlLCBLRVlfRU5URVIgfSwKKwl7IDB4NDUwZiwgS0VZX1JFRCB9LAorCXsgMHg0NTEwLCBLRVlfQ0hBTk5FTFVQIH0sCisJeyAweDQ1MTEsIEtFWV9HUkVFTiB9LAorCXsgMHg0NTEyLCBLRVlfVk9MVU1FRE9XTiB9LAorCXsgMHg0NTEzLCBLRVlfT0sgfSwKKwl7IDB4NDUxNCwgS0VZX1ZPTFVNRVVQIH0sCisJeyAweDQ1MTUsIEtFWV9ZRUxMT1cgfSwKKwl7IDB4NDUxNiwgS0VZX0NIQU5ORUxET1dOIH0sCisJeyAweDQ1MTcsIEtFWV9CTFVFIH0sCisJeyAweDQ1MTgsIEtFWV9MRUZUIH0sIC8qIFNraXAgYmFja3dhcmRzICovCisJeyAweDQ1MTksIEtFWV9QTEFZUEFVU0UgfSwKKwl7IDB4NDUxYSwgS0VZX1JJR0hUIH0sIC8qIFNraXAgZm9yd2FyZCAqLworCXsgMHg0NTFiLCBLRVlfUkVXSU5EIH0sCisJeyAweDQ1MWMsIEtFWV9MIH0sIC8qIExpdmUgKi8KKwl7IDB4NDUxZCwgS0VZX0ZBU1RGT1JXQVJEIH0sCisJeyAweDQ1MWUsIEtFWV9TVE9QIH0sIC8qICdSZXZlYWwnIGZvciBUZWxldGV4dCAqLworCXsgMHg0NTFmLCBLRVlfTUVOVSB9LCAvKiBLRVlfVEVYVCBmb3IgVGVsZXRleHQgKi8KKwl7IDB4NDU0MCwgS0VZX1JFQ09SRCB9LCAvKiBGb250ICdTaXplJyBmb3IgVGVsZXRleHQgKi8KKwl7IDB4NDU0MSwgS0VZX1NDUkVFTiB9LCAvKiAgRnVsbCBzY3JlZW4gdG9nZ2xlLCAnSG9sZCcgZm9yIFRlbGV0ZXh0ICovCisJeyAweDQ1NDIsIEtFWV9TRUxFQ1QgfSwgLyogU2VsZWN0IHZpZGVvIGlucHV0LCAnU2VsZWN0JyBmb3IgVGVsZXRleHQgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgcmNfbWFwX2xpc3QgZGliMDcwMF9uZWNfbWFwID0geworCS5tYXAgPSB7CisJCS5zY2FuICAgID0gZGliMDcwMF9uZWNfdGFibGUsCisJCS5zaXplICAgID0gQVJSQVlfU0laRShkaWIwNzAwX25lY190YWJsZSksCisJCS5yY190eXBlID0gUkNfVFlQRV9ORUMsCisJCS5uYW1lICAgID0gUkNfTUFQX0RJQjA3MDBfTkVDX1RBQkxFLAorCX0KK307CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfcmNfbWFwKHZvaWQpCit7CisJcmV0dXJuIHJjX21hcF9yZWdpc3RlcigmZGliMDcwMF9uZWNfbWFwKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGV4aXRfcmNfbWFwKHZvaWQpCit7CisJcmNfbWFwX3VucmVnaXN0ZXIoJmRpYjA3MDBfbmVjX21hcCk7Cit9CisKK21vZHVsZV9pbml0KGluaXRfcmNfbWFwKQorbW9kdWxlX2V4aXQoZXhpdF9yY19tYXApCisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIk1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLWRpYjA3MDAtcmM1LmMgYi9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtZGliMDcwMC1yYzUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWYxMmU0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLWRpYjA3MDAtcmM1LmMKQEAgLTAsMCArMSwyMzUgQEAKKy8qIHJjLWR2YjA3MDAtYmlnLmMgLSBLZXl0YWJsZSBmb3IgZGV2aWNlcyBpbiBkdmIwNzAwCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPgorICoKKyAqIFRPRE86IFRoaXMgdGFibGUgaXMgYSByZWFsIG1lc3MsIGFzIGl0IG1lcmdlcyBSQyBjb2RlcyBmcm9tIHNldmVyYWwKKyAqIGRldmljZXMgaW50byBhIGJpZyB0YWJsZS4gSXQgYWxzbyBoYXMgYm90aCBSQy01IGFuZCBORUMgY29kZXMgaW5zaWRlLgorICogSXQgc2hvdWxkIGJlIGJyb2tlbiBpbnRvIHNtYWxsIHRhYmxlcywgYW5kIHRoZSBwcm90b2NvbHMgc2hvdWxkIHByb3Blcmx5CisgKiBiZSBpbmRlbnRpZmljYXRlZC4KKyAqCisgKiBUaGUgdGFibGUgd2VyZSBpbXBvcnRlZCBmcm9tIGRpYjA3MDBfZGV2aWNlcy5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPG1lZGlhL3JjLW1hcC5oPgorCitzdGF0aWMgc3RydWN0IHJjX21hcF90YWJsZSBkaWIwNzAwX3JjNV90YWJsZVtdID0geworCS8qIEtleSBjb2RlcyBmb3IgdGhlIHRpbnkgUGlubmFjbGUgcmVtb3RlKi8KKwl7IDB4MDcwMCwgS0VZX01VVEUgfSwKKwl7IDB4MDcwMSwgS0VZX01FTlUgfSwgLyogUGlubmFjbGUgbG9nbyAqLworCXsgMHgwNzM5LCBLRVlfUE9XRVIgfSwKKwl7IDB4MDcwMywgS0VZX1ZPTFVNRVVQIH0sCisJeyAweDA3MDksIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweDA3MDYsIEtFWV9DSEFOTkVMVVAgfSwKKwl7IDB4MDcwYywgS0VZX0NIQU5ORUxET1dOIH0sCisJeyAweDA3MGYsIEtFWV8xIH0sCisJeyAweDA3MTUsIEtFWV8yIH0sCisJeyAweDA3MTAsIEtFWV8zIH0sCisJeyAweDA3MTgsIEtFWV80IH0sCisJeyAweDA3MWIsIEtFWV81IH0sCisJeyAweDA3MWUsIEtFWV82IH0sCisJeyAweDA3MTEsIEtFWV83IH0sCisJeyAweDA3MjEsIEtFWV84IH0sCisJeyAweDA3MTIsIEtFWV85IH0sCisJeyAweDA3MjcsIEtFWV8wIH0sCisJeyAweDA3MjQsIEtFWV9TQ1JFRU4gfSwgLyogJ1NxdWFyZScga2V5ICovCisJeyAweDA3MmEsIEtFWV9URVhUIH0sICAgLyogJ1QnIGtleSAqLworCXsgMHgwNzJkLCBLRVlfUkVXSU5EIH0sCisJeyAweDA3MzAsIEtFWV9QTEFZIH0sCisJeyAweDA3MzMsIEtFWV9GQVNURk9SV0FSRCB9LAorCXsgMHgwNzM2LCBLRVlfUkVDT1JEIH0sCisJeyAweDA3M2MsIEtFWV9TVE9QIH0sCisJeyAweDA3M2YsIEtFWV9DQU5DRUwgfSwgLyogJz8nIGtleSAqLworCisJLyogS2V5IGNvZGVzIGZvciB0aGUgVGVycmF0ZWMgQ2luZXJneSBEVCBYUyBEaXZlcnNpdHksIHNpbWlsYXIgdG8gY2luZXJneVQyLmMgKi8KKwl7IDB4ZWIwMSwgS0VZX1BPV0VSIH0sCisJeyAweGViMDIsIEtFWV8xIH0sCisJeyAweGViMDMsIEtFWV8yIH0sCisJeyAweGViMDQsIEtFWV8zIH0sCisJeyAweGViMDUsIEtFWV80IH0sCisJeyAweGViMDYsIEtFWV81IH0sCisJeyAweGViMDcsIEtFWV82IH0sCisJeyAweGViMDgsIEtFWV83IH0sCisJeyAweGViMDksIEtFWV84IH0sCisJeyAweGViMGEsIEtFWV85IH0sCisJeyAweGViMGIsIEtFWV9WSURFTyB9LAorCXsgMHhlYjBjLCBLRVlfMCB9LAorCXsgMHhlYjBkLCBLRVlfUkVGUkVTSCB9LAorCXsgMHhlYjBmLCBLRVlfRVBHIH0sCisJeyAweGViMTAsIEtFWV9VUCB9LAorCXsgMHhlYjExLCBLRVlfTEVGVCB9LAorCXsgMHhlYjEyLCBLRVlfT0sgfSwKKwl7IDB4ZWIxMywgS0VZX1JJR0hUIH0sCisJeyAweGViMTQsIEtFWV9ET1dOIH0sCisJeyAweGViMTYsIEtFWV9JTkZPIH0sCisJeyAweGViMTcsIEtFWV9SRUQgfSwKKwl7IDB4ZWIxOCwgS0VZX0dSRUVOIH0sCisJeyAweGViMTksIEtFWV9ZRUxMT1cgfSwKKwl7IDB4ZWIxYSwgS0VZX0JMVUUgfSwKKwl7IDB4ZWIxYiwgS0VZX0NIQU5ORUxVUCB9LAorCXsgMHhlYjFjLCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4ZWIxZCwgS0VZX01VVEUgfSwKKwl7IDB4ZWIxZSwgS0VZX1ZPTFVNRURPV04gfSwKKwl7IDB4ZWIxZiwgS0VZX0NIQU5ORUxET1dOIH0sCisJeyAweGViNDAsIEtFWV9QQVVTRSB9LAorCXsgMHhlYjQxLCBLRVlfSE9NRSB9LAorCXsgMHhlYjQyLCBLRVlfTUVOVSB9LCAvKiBEVkQgTWVudSAqLworCXsgMHhlYjQzLCBLRVlfU1VCVElUTEUgfSwKKwl7IDB4ZWI0NCwgS0VZX1RFWFQgfSwgLyogVGVsZXRleHQgKi8KKwl7IDB4ZWI0NSwgS0VZX0RFTEVURSB9LAorCXsgMHhlYjQ2LCBLRVlfVFYgfSwKKwl7IDB4ZWI0NywgS0VZX0RWRCB9LAorCXsgMHhlYjQ4LCBLRVlfU1RPUCB9LAorCXsgMHhlYjQ5LCBLRVlfVklERU8gfSwKKwl7IDB4ZWI0YSwgS0VZX0FVRElPIH0sIC8qIE11c2ljICovCisJeyAweGViNGIsIEtFWV9TQ1JFRU4gfSwgLyogUGljICovCisJeyAweGViNGMsIEtFWV9QTEFZIH0sCisJeyAweGViNGQsIEtFWV9CQUNLIH0sCisJeyAweGViNGUsIEtFWV9SRVdJTkQgfSwKKwl7IDB4ZWI0ZiwgS0VZX0ZBU1RGT1JXQVJEIH0sCisJeyAweGViNTQsIEtFWV9QUkVWSU9VUyB9LAorCXsgMHhlYjU4LCBLRVlfUkVDT1JEIH0sCisJeyAweGViNWMsIEtFWV9ORVhUIH0sCisKKwkvKiBLZXkgY29kZXMgZm9yIHRoZSBIYXVwYXVnZSBXaW5UViBOb3ZhLVRELCBjb3BpZWQgZnJvbSBub3ZhLXQtdXNiMi5jIChOb3ZhLVQgVVNCMikgKi8KKwl7IDB4MWUwMCwgS0VZXzAgfSwKKwl7IDB4MWUwMSwgS0VZXzEgfSwKKwl7IDB4MWUwMiwgS0VZXzIgfSwKKwl7IDB4MWUwMywgS0VZXzMgfSwKKwl7IDB4MWUwNCwgS0VZXzQgfSwKKwl7IDB4MWUwNSwgS0VZXzUgfSwKKwl7IDB4MWUwNiwgS0VZXzYgfSwKKwl7IDB4MWUwNywgS0VZXzcgfSwKKwl7IDB4MWUwOCwgS0VZXzggfSwKKwl7IDB4MWUwOSwgS0VZXzkgfSwKKwl7IDB4MWUwYSwgS0VZX0tQQVNURVJJU0sgfSwKKwl7IDB4MWUwYiwgS0VZX1JFRCB9LAorCXsgMHgxZTBjLCBLRVlfUkFESU8gfSwKKwl7IDB4MWUwZCwgS0VZX01FTlUgfSwKKwl7IDB4MWUwZSwgS0VZX0dSQVZFIH0sIC8qICMgKi8KKwl7IDB4MWUwZiwgS0VZX01VVEUgfSwKKwl7IDB4MWUxMCwgS0VZX1ZPTFVNRVVQIH0sCisJeyAweDFlMTEsIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweDFlMTIsIEtFWV9DSEFOTkVMIH0sCisJeyAweDFlMTQsIEtFWV9VUCB9LAorCXsgMHgxZTE1LCBLRVlfRE9XTiB9LAorCXsgMHgxZTE2LCBLRVlfTEVGVCB9LAorCXsgMHgxZTE3LCBLRVlfUklHSFQgfSwKKwl7IDB4MWUxOCwgS0VZX1ZJREVPIH0sCisJeyAweDFlMTksIEtFWV9BVURJTyB9LAorCXsgMHgxZTFhLCBLRVlfTUVESUEgfSwKKwl7IDB4MWUxYiwgS0VZX0VQRyB9LAorCXsgMHgxZTFjLCBLRVlfVFYgfSwKKwl7IDB4MWUxZSwgS0VZX05FWFQgfSwKKwl7IDB4MWUxZiwgS0VZX0JBQ0sgfSwKKwl7IDB4MWUyMCwgS0VZX0NIQU5ORUxVUCB9LAorCXsgMHgxZTIxLCBLRVlfQ0hBTk5FTERPV04gfSwKKwl7IDB4MWUyNCwgS0VZX0xBU1QgfSwgLyogU2tpcCBiYWNrd2FyZHMgKi8KKwl7IDB4MWUyNSwgS0VZX09LIH0sCisJeyAweDFlMjksIEtFWV9CTFVFfSwKKwl7IDB4MWUyZSwgS0VZX0dSRUVOIH0sCisJeyAweDFlMzAsIEtFWV9QQVVTRSB9LAorCXsgMHgxZTMyLCBLRVlfUkVXSU5EIH0sCisJeyAweDFlMzQsIEtFWV9GQVNURk9SV0FSRCB9LAorCXsgMHgxZTM1LCBLRVlfUExBWSB9LAorCXsgMHgxZTM2LCBLRVlfU1RPUCB9LAorCXsgMHgxZTM3LCBLRVlfUkVDT1JEIH0sCisJeyAweDFlMzgsIEtFWV9ZRUxMT1cgfSwKKwl7IDB4MWUzYiwgS0VZX0dPVE8gfSwKKwl7IDB4MWUzZCwgS0VZX1BPV0VSIH0sCisKKwkvKiBLZXkgY29kZXMgZm9yIHRoZSBMZWFkdGVrIFdpbmZhc3QgRFRWIERvbmdsZSAqLworCXsgMHgwMDQyLCBLRVlfUE9XRVIgfSwKKwl7IDB4MDc3YywgS0VZX1RVTkVSIH0sCisJeyAweDBmNGUsIEtFWV9QUklOVCB9LCAvKiBQUkVWSUVXICovCisJeyAweDA4NDAsIEtFWV9TQ1JFRU4gfSwgLyogZnVsbCBzY3JlZW4gdG9nZ2xlKi8KKwl7IDB4MGY3MSwgS0VZX0RPVCB9LCAvKiBmcmVxdWVuY3kgKi8KKwl7IDB4MDc0MywgS0VZXzAgfSwKKwl7IDB4MGM0MSwgS0VZXzEgfSwKKwl7IDB4MDQ0MywgS0VZXzIgfSwKKwl7IDB4MGI3ZiwgS0VZXzMgfSwKKwl7IDB4MGU0MSwgS0VZXzQgfSwKKwl7IDB4MDY0MywgS0VZXzUgfSwKKwl7IDB4MDk3ZiwgS0VZXzYgfSwKKwl7IDB4MGQ3ZSwgS0VZXzcgfSwKKwl7IDB4MDU3YywgS0VZXzggfSwKKwl7IDB4MGE0MCwgS0VZXzkgfSwKKwl7IDB4MGU0ZSwgS0VZX0NMRUFSIH0sCisJeyAweDA0N2MsIEtFWV9DSEFOTkVMIH0sIC8qIHNob3cgY2hhbm5lbCBudW1iZXIgKi8KKwl7IDB4MGY0MSwgS0VZX0xBU1QgfSwgLyogcmVjYWxsICovCisJeyAweDAzNDIsIEtFWV9NVVRFIH0sCisJeyAweDA2NGMsIEtFWV9SRVNFUlZFRCB9LCAvKiBQSVAgYnV0dG9uKi8KKwl7IDB4MDE3MiwgS0VZX1NIVUZGTEUgfSwgLyogU05BUFNIT1QgKi8KKwl7IDB4MGM0ZSwgS0VZX1BMQVlQQVVTRSB9LCAvKiBUSU1FU0hJRlQgKi8KKwl7IDB4MGI3MCwgS0VZX1JFQ09SRCB9LAorCXsgMHgwMzdkLCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4MDE3ZCwgS0VZX1ZPTFVNRURPV04gfSwKKwl7IDB4MDI0MiwgS0VZX0NIQU5ORUxVUCB9LAorCXsgMHgwMDdkLCBLRVlfQ0hBTk5FTERPV04gfSwKKworCS8qIEtleSBjb2RlcyBmb3IgTm92YS1URCAiY3JlZGl0IGNhcmQiIHJlbW90ZSBjb250cm9sLiAqLworCXsgMHgxZDAwLCBLRVlfMCB9LAorCXsgMHgxZDAxLCBLRVlfMSB9LAorCXsgMHgxZDAyLCBLRVlfMiB9LAorCXsgMHgxZDAzLCBLRVlfMyB9LAorCXsgMHgxZDA0LCBLRVlfNCB9LAorCXsgMHgxZDA1LCBLRVlfNSB9LAorCXsgMHgxZDA2LCBLRVlfNiB9LAorCXsgMHgxZDA3LCBLRVlfNyB9LAorCXsgMHgxZDA4LCBLRVlfOCB9LAorCXsgMHgxZDA5LCBLRVlfOSB9LAorCXsgMHgxZDBhLCBLRVlfVEVYVCB9LAorCXsgMHgxZDBkLCBLRVlfTUVOVSB9LAorCXsgMHgxZDBmLCBLRVlfTVVURSB9LAorCXsgMHgxZDEwLCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4MWQxMSwgS0VZX1ZPTFVNRURPV04gfSwKKwl7IDB4MWQxMiwgS0VZX0NIQU5ORUwgfSwKKwl7IDB4MWQxNCwgS0VZX1VQIH0sCisJeyAweDFkMTUsIEtFWV9ET1dOIH0sCisJeyAweDFkMTYsIEtFWV9MRUZUIH0sCisJeyAweDFkMTcsIEtFWV9SSUdIVCB9LAorCXsgMHgxZDFjLCBLRVlfVFYgfSwKKwl7IDB4MWQxZSwgS0VZX05FWFQgfSwKKwl7IDB4MWQxZiwgS0VZX0JBQ0sgfSwKKwl7IDB4MWQyMCwgS0VZX0NIQU5ORUxVUCB9LAorCXsgMHgxZDIxLCBLRVlfQ0hBTk5FTERPV04gfSwKKwl7IDB4MWQyNCwgS0VZX0xBU1QgfSwKKwl7IDB4MWQyNSwgS0VZX09LIH0sCisJeyAweDFkMzAsIEtFWV9QQVVTRSB9LAorCXsgMHgxZDMyLCBLRVlfUkVXSU5EIH0sCisJeyAweDFkMzQsIEtFWV9GQVNURk9SV0FSRCB9LAorCXsgMHgxZDM1LCBLRVlfUExBWSB9LAorCXsgMHgxZDM2LCBLRVlfU1RPUCB9LAorCXsgMHgxZDM3LCBLRVlfUkVDT1JEIH0sCisJeyAweDFkM2IsIEtFWV9HT1RPIH0sCisJeyAweDFkM2QsIEtFWV9QT1dFUiB9LAorfTsKKworc3RhdGljIHN0cnVjdCByY19tYXBfbGlzdCBkaWIwNzAwX3JjNV9tYXAgPSB7CisJLm1hcCA9IHsKKwkJLnNjYW4gICAgPSBkaWIwNzAwX3JjNV90YWJsZSwKKwkJLnNpemUgICAgPSBBUlJBWV9TSVpFKGRpYjA3MDBfcmM1X3RhYmxlKSwKKwkJLnJjX3R5cGUgPSBSQ19UWVBFX1JDNSwKKwkJLm5hbWUgICAgPSBSQ19NQVBfRElCMDcwMF9SQzVfVEFCTEUsCisJfQorfTsKKworc3RhdGljIGludCBfX2luaXQgaW5pdF9yY19tYXAodm9pZCkKK3sKKwlyZXR1cm4gcmNfbWFwX3JlZ2lzdGVyKCZkaWIwNzAwX3JjNV9tYXApOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yY19tYXAodm9pZCkKK3sKKwlyY19tYXBfdW5yZWdpc3RlcigmZGliMDcwMF9yYzVfbWFwKTsKK30KKworbW9kdWxlX2luaXQoaW5pdF9yY19tYXApCittb2R1bGVfZXhpdChleGl0X3JjX21hcCkKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtZGlnaXRhbG5vdy10aW55dHdpbi5jIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLWRpZ2l0YWxub3ctdGlueXR3aW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjhiNDUwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLWRpZ2l0YWxub3ctdGlueXR3aW4uYwpAQCAtMCwwICsxLDk4IEBACisvKgorICogRGlnaXRhbE5vdyBUaW55VHdpbiByZW1vdGUgY29udHJvbGxlciBrZXl0YWJsZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBbnR0aSBQYWxvc2FhcmkgPGNyb3BlQGlraS5maT4KKyAqCisgKiAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqICAgIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiAgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICovCisKKyNpbmNsdWRlIDxtZWRpYS9yYy1tYXAuaD4KKworc3RhdGljIHN0cnVjdCByY19tYXBfdGFibGUgZGlnaXRhbG5vd190aW55dHdpbltdID0geworCXsgMHgwMDAwLCBLRVlfTVVURSB9LCAgICAgICAgICAgIC8qIFtzeW1ib2wgc3BlYWtlcl0gKi8KKwl7IDB4MDAwMSwgS0VZX1ZPTFVNRVVQIH0sCisJeyAweDAwMDIsIEtFWV9QT1dFUjIgfSwgICAgICAgICAgLyogVFYgW3Bvd2VyIGJ1dHRvbl0gKi8KKwl7IDB4MDAwMywgS0VZXzIgfSwKKwl7IDB4MDAwNCwgS0VZXzMgfSwKKwl7IDB4MDAwNSwgS0VZXzQgfSwKKwl7IDB4MDAwNiwgS0VZXzYgfSwKKwl7IDB4MDAwNywgS0VZXzcgfSwKKwl7IDB4MDAwOCwgS0VZXzggfSwKKwl7IDB4MDAwOSwgS0VZX05VTUVSSUNfU1RBUiB9LCAgICAvKiBbKl0gKi8KKwl7IDB4MDAwYSwgS0VZXzAgfSwKKwl7IDB4MDAwYiwgS0VZX05VTUVSSUNfUE9VTkQgfSwgICAvKiBbI10gKi8KKwl7IDB4MDAwYywgS0VZX1JJR0hUIH0sICAgICAgICAgICAvKiBbcmlnaHQgYXJyb3ddICovCisJeyAweDAwMGQsIEtFWV9IT01FUEFHRSB9LCAgICAgICAgLyogW3N5bWJvbCBob21lXSBTdGFydCAqLworCXsgMHgwMDBlLCBLRVlfUkVEIH0sICAgICAgICAgICAgIC8qIFtyZWRdIFZpZGVvcyAqLworCXsgMHgwMDEwLCBLRVlfUE9XRVIgfSwgICAgICAgICAgIC8qIFBDIFtwb3dlciBidXR0b25dICovCisJeyAweDAwMTEsIEtFWV9ZRUxMT1cgfSwgICAgICAgICAgLyogW3llbGxvd10gUGljdHVyZXMgKi8KKwl7IDB4MDAxMiwgS0VZX0RPV04gfSwgICAgICAgICAgICAvKiBbZG93biBhcnJvd10gKi8KKwl7IDB4MDAxMywgS0VZX0dSRUVOIH0sICAgICAgICAgICAvKiBbZ3JlZW5dIE11c2ljICovCisJeyAweDAwMTQsIEtFWV9DWUNMRVdJTkRPV1MgfSwgICAgLyogQkFDSyAqLworCXsgMHgwMDE1LCBLRVlfRkFWT1JJVEVTIH0sICAgICAgIC8qIE1PUkUgKi8KKwl7IDB4MDAxNiwgS0VZX1VQIH0sICAgICAgICAgICAgICAvKiBbdXAgYXJyb3ddICovCisJeyAweDAwMTcsIEtFWV9MRUZUIH0sICAgICAgICAgICAgLyogW2xlZnQgYXJyb3ddICovCisJeyAweDAwMTgsIEtFWV9PSyB9LCAgICAgICAgICAgICAgLyogT0sgKi8KKwl7IDB4MDAxOSwgS0VZX0JMVUUgfSwgICAgICAgICAgICAvKiBbYmx1ZV0gTXlUViAqLworCXsgMHgwMDFhLCBLRVlfUkVXSU5EIH0sICAgICAgICAgIC8qIFJFVyBbPDxdICovCisJeyAweDAwMWIsIEtFWV9QTEFZIH0sICAgICAgICAgICAgLyogUExBWSAqLworCXsgMHgwMDFjLCBLRVlfNSB9LAorCXsgMHgwMDFkLCBLRVlfOSB9LAorCXsgMHgwMDFlLCBLRVlfVk9MVU1FRE9XTiB9LAorCXsgMHgwMDFmLCBLRVlfMSB9LAorCXsgMHgwMDQwLCBLRVlfU1RPUCB9LCAgICAgICAgICAgIC8qIFNUT1AgKi8KKwl7IDB4MDA0MiwgS0VZX1BBVVNFIH0sICAgICAgICAgICAvKiBQQVVTRSAqLworCXsgMHgwMDQzLCBLRVlfU0NSRUVOIH0sICAgICAgICAgIC8qIEFzcGVjdCAqLworCXsgMHgwMDQ0LCBLRVlfRk9SV0FSRCB9LCAgICAgICAgIC8qIEZXRCBbPj5dICovCisJeyAweDAwNDUsIEtFWV9ORVhUIH0sICAgICAgICAgICAgLyogU0tJUCAqLworCXsgMHgwMDQ4LCBLRVlfUkVDT1JEIH0sICAgICAgICAgIC8qIFJFQ09SRCAqLworCXsgMHgwMDQ5LCBLRVlfVklERU8gfSwgICAgICAgICAgIC8qIFJUViAqLworCXsgMHgwMDRhLCBLRVlfRVBHIH0sICAgICAgICAgICAgIC8qIEd1aWRlICovCisJeyAweDAwNGIsIEtFWV9DSEFOTkVMVVAgfSwKKwl7IDB4MDA0YywgS0VZX0hFTFAgfSwgICAgICAgICAgICAvKiBIZWxwICovCisJeyAweDAwNGQsIEtFWV9SQURJTyB9LCAgICAgICAgICAgLyogUmFkaW8gKi8KKwl7IDB4MDA0ZiwgS0VZX0NIQU5ORUxET1dOIH0sCisJeyAweDAwNTAsIEtFWV9EVkQgfSwgICAgICAgICAgICAgLyogRFZEICovCisJeyAweDAwNTEsIEtFWV9BVURJTyB9LCAgICAgICAgICAgLyogQXVkaW8gKi8KKwl7IDB4MDA1MiwgS0VZX1RJVExFIH0sICAgICAgICAgICAvKiBUaXRsZSAqLworCXsgMHgwMDUzLCBLRVlfTkVXIH0sICAgICAgICAgICAgIC8qIFtzeW1ib2wgUElQP10gKi8KKwl7IDB4MDA1NywgS0VZX01FTlUgfSwgICAgICAgICAgICAvKiBNb3VzZSAqLworCXsgMHgwMDVhLCBLRVlfUFJFVklPVVMgfSwgICAgICAgIC8qIFJFUExBWSAqLworfTsKKworc3RhdGljIHN0cnVjdCByY19tYXBfbGlzdCBkaWdpdGFsbm93X3Rpbnl0d2luX21hcCA9IHsKKwkubWFwID0geworCQkuc2NhbiAgICA9IGRpZ2l0YWxub3dfdGlueXR3aW4sCisJCS5zaXplICAgID0gQVJSQVlfU0laRShkaWdpdGFsbm93X3Rpbnl0d2luKSwKKwkJLnJjX3R5cGUgPSBSQ19UWVBFX05FQywKKwkJLm5hbWUgICAgPSBSQ19NQVBfRElHSVRBTE5PV19USU5ZVFdJTiwKKwl9Cit9OworCitzdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcF9kaWdpdGFsbm93X3Rpbnl0d2luKHZvaWQpCit7CisJcmV0dXJuIHJjX21hcF9yZWdpc3RlcigmZGlnaXRhbG5vd190aW55dHdpbl9tYXApOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yY19tYXBfZGlnaXRhbG5vd190aW55dHdpbih2b2lkKQoreworCXJjX21hcF91bnJlZ2lzdGVyKCZkaWdpdGFsbm93X3Rpbnl0d2luX21hcCk7Cit9CisKK21vZHVsZV9pbml0KGluaXRfcmNfbWFwX2RpZ2l0YWxub3dfdGlueXR3aW4pCittb2R1bGVfZXhpdChleGl0X3JjX21hcF9kaWdpdGFsbm93X3Rpbnl0d2luKQorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJBbnR0aSBQYWxvc2FhcmkgPGNyb3BlQGlraS5maT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1kaWdpdHRyYWRlLmMgYi9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtZGlnaXR0cmFkZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxZDQ5ODcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtZGlnaXR0cmFkZS5jCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBEaWdpdHRyYWRlIERWQi1UIFVTQiBTdGljayByZW1vdGUgY29udHJvbGxlciBrZXl0YWJsZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBbnR0aSBQYWxvc2FhcmkgPGNyb3BlQGlraS5maT4KKyAqCisgKiAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqICAgIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiAgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICovCisKKyNpbmNsdWRlIDxtZWRpYS9yYy1tYXAuaD4KKworLyogRGlnaXR0cmFkZSBEVkItVCBVU0IgU3RpY2sgcmVtb3RlIGNvbnRyb2xsZXIuICovCisvKiBJbXBvcnRlZCBmcm9tIGFmOTAxNS5oLgorICAgSW5pdGlhbCBrZXl0YWJsZSB3YXMgZnJvbSBBbGFpbiBLYWxrZXIgPG1pa2lAZGRzLm5sPiAqLworCisvKiBEaWdpdHRyYWRlIERWQi1UIFVTQiBTdGljayAqLworc3RhdGljIHN0cnVjdCByY19tYXBfdGFibGUgZGlnaXR0cmFkZVtdID0geworCXsgMHgwMDAwLCBLRVlfOSB9LAorCXsgMHgwMDAxLCBLRVlfRVBHIH0sICAgICAgICAgICAgIC8qIEVQRyAqLworCXsgMHgwMDAyLCBLRVlfVk9MVU1FRE9XTiB9LCAgICAgIC8qIFZvbCBEbiAqLworCXsgMHgwMDAzLCBLRVlfVEVYVCB9LCAgICAgICAgICAgIC8qIFRFTEVURVhUICovCisJeyAweDAwMDQsIEtFWV84IH0sCisJeyAweDAwMDUsIEtFWV9NVVRFIH0sICAgICAgICAgICAgLyogTVVURSAqLworCXsgMHgwMDA2LCBLRVlfUE9XRVIyIH0sICAgICAgICAgIC8qIFBPV0VSICovCisJeyAweDAwMDksIEtFWV9aT09NIH0sICAgICAgICAgICAgLyogRlVMTFNDUkVFTiAqLworCXsgMHgwMDBhLCBLRVlfUkVDT1JEIH0sICAgICAgICAgIC8qIFJFQ09SRCAqLworCXsgMHgwMDBkLCBLRVlfU1VCVElUTEUgfSwgICAgICAgIC8qIFNVQlRJVExFICovCisJeyAweDAwMGUsIEtFWV9TVE9QIH0sICAgICAgICAgICAgLyogU1RPUCAqLworCXsgMHgwMDEwLCBLRVlfT0sgfSwgICAgICAgICAgICAgIC8qIFJFVFVSTiAqLworCXsgMHgwMDExLCBLRVlfMiB9LAorCXsgMHgwMDEyLCBLRVlfNCB9LAorCXsgMHgwMDE1LCBLRVlfMyB9LAorCXsgMHgwMDE2LCBLRVlfNSB9LAorCXsgMHgwMDE3LCBLRVlfQ0hBTk5FTERPV04gfSwgICAgIC8qIENoIERuICovCisJeyAweDAwMTksIEtFWV9DSEFOTkVMVVAgfSwgICAgICAgLyogQ0ggVXAgKi8KKwl7IDB4MDAxYSwgS0VZX1BBVVNFIH0sICAgICAgICAgICAvKiBQQVVTRSAqLworCXsgMHgwMDFiLCBLRVlfMSB9LAorCXsgMHgwMDFkLCBLRVlfQVVESU8gfSwgICAgICAgICAgIC8qIERVQUwgU09VTkQgKi8KKwl7IDB4MDAxZSwgS0VZX1BMQVkgfSwgICAgICAgICAgICAvKiBQTEFZICovCisJeyAweDAwMWYsIEtFWV9DQU1FUkEgfSwgICAgICAgICAgLyogU05BUFNIT1QgKi8KKwl7IDB4MDA0MCwgS0VZX1ZPTFVNRVVQIH0sICAgICAgICAvKiBWb2wgVXAgKi8KKwl7IDB4MDA0OCwgS0VZXzcgfSwKKwl7IDB4MDA0YywgS0VZXzYgfSwKKwl7IDB4MDA0ZCwgS0VZX1BMQVlQQVVTRSB9LCAgICAgICAvKiBUSU1FU0hJRlQgKi8KKwl7IDB4MDA1NCwgS0VZXzAgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmNfbWFwX2xpc3QgZGlnaXR0cmFkZV9tYXAgPSB7CisJLm1hcCA9IHsKKwkJLnNjYW4gICAgPSBkaWdpdHRyYWRlLAorCQkuc2l6ZSAgICA9IEFSUkFZX1NJWkUoZGlnaXR0cmFkZSksCisJCS5yY190eXBlID0gUkNfVFlQRV9ORUMsCisJCS5uYW1lICAgID0gUkNfTUFQX0RJR0lUVFJBREUsCisJfQorfTsKKworc3RhdGljIGludCBfX2luaXQgaW5pdF9yY19tYXBfZGlnaXR0cmFkZSh2b2lkKQoreworCXJldHVybiByY19tYXBfcmVnaXN0ZXIoJmRpZ2l0dHJhZGVfbWFwKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGV4aXRfcmNfbWFwX2RpZ2l0dHJhZGUodm9pZCkKK3sKKwlyY19tYXBfdW5yZWdpc3RlcigmZGlnaXR0cmFkZV9tYXApOworfQorCittb2R1bGVfaW5pdChpbml0X3JjX21hcF9kaWdpdHRyYWRlKQorbW9kdWxlX2V4aXQoZXhpdF9yY19tYXBfZGlnaXR0cmFkZSkKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiQW50dGkgUGFsb3NhYXJpIDxjcm9wZUBpa2kuZmk+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtZG0xMTA1LW5lYy5jIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLWRtMTEwNS1uZWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDI0ZmJmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLWRtMTEwNS1uZWMuYwpAQCAtMCwwICsxLDc2IEBACisvKiBkbTExMDUtbmVjLmggLSBLZXl0YWJsZSBmb3IgZG0xMTA1X25lYyBSZW1vdGUgQ29udHJvbGxlcgorICoKKyAqIGtleW1hcCBpbXBvcnRlZCBmcm9tIGlyLWtleW1hcHMuYworICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBieSBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxtZWRpYS9yYy1tYXAuaD4KKworLyogRFZCV29ybGQgcmVtb3RlcworICAgSWdvciBNLiBMaXBsaWFuaW4gPGxpcGxpYW5pbkBtZS5ieT4KKyAqLworCitzdGF0aWMgc3RydWN0IHJjX21hcF90YWJsZSBkbTExMDVfbmVjW10gPSB7CisJeyAweDBhLCBLRVlfUE9XRVIyfSwJCS8qIHBvd2VyICovCisJeyAweDBjLCBLRVlfTVVURX0sCQkvKiBtdXRlICovCisJeyAweDExLCBLRVlfMX0sCisJeyAweDEyLCBLRVlfMn0sCisJeyAweDEzLCBLRVlfM30sCisJeyAweDE0LCBLRVlfNH0sCisJeyAweDE1LCBLRVlfNX0sCisJeyAweDE2LCBLRVlfNn0sCisJeyAweDE3LCBLRVlfN30sCisJeyAweDE4LCBLRVlfOH0sCisJeyAweDE5LCBLRVlfOX0sCisJeyAweDEwLCBLRVlfMH0sCisJeyAweDFjLCBLRVlfQ0hBTk5FTFVQfSwJCS8qIGNoKyAqLworCXsgMHgwZiwgS0VZX0NIQU5ORUxET1dOfSwJLyogY2gtICovCisJeyAweDFhLCBLRVlfVk9MVU1FVVB9LAkJLyogdm9sKyAqLworCXsgMHgwZSwgS0VZX1ZPTFVNRURPV059LAkvKiB2b2wtICovCisJeyAweDA0LCBLRVlfUkVDT1JEfSwJCS8qIHJlYyAqLworCXsgMHgwOSwgS0VZX0NIQU5ORUx9LAkJLyogZmF2ICovCisJeyAweDA4LCBLRVlfQkFDS1NQQUNFfSwJCS8qIHJld2luZCAqLworCXsgMHgwNywgS0VZX0ZBU1RGT1JXQVJEfSwJLyogZmFzdCAqLworCXsgMHgwYiwgS0VZX1BBVVNFfSwJCS8qIHBhdXNlICovCisJeyAweDAyLCBLRVlfRVNDfSwJCS8qIGNhbmNlbCAqLworCXsgMHgwMywgS0VZX1RBQn0sCQkvKiB0YWIgKi8KKwl7IDB4MDAsIEtFWV9VUH0sCQkvKiB1cCAqLworCXsgMHgxZiwgS0VZX0VOVEVSfSwJCS8qIG9rICovCisJeyAweDAxLCBLRVlfRE9XTn0sCQkvKiBkb3duICovCisJeyAweDA1LCBLRVlfUkVDT1JEfSwJCS8qIGNhcCAqLworCXsgMHgwNiwgS0VZX1NUT1B9LAkJLyogc3RvcCAqLworCXsgMHg0MCwgS0VZX1pPT019LAkJLyogZnVsbCAqLworCXsgMHgxZSwgS0VZX1RWfSwJCS8qIHR2bW9kZSAqLworCXsgMHgxYiwgS0VZX0J9LAkJCS8qIHJlY2FsbCAqLworfTsKKworc3RhdGljIHN0cnVjdCByY19tYXBfbGlzdCBkbTExMDVfbmVjX21hcCA9IHsKKwkubWFwID0geworCQkuc2NhbiAgICA9IGRtMTEwNV9uZWMsCisJCS5zaXplICAgID0gQVJSQVlfU0laRShkbTExMDVfbmVjKSwKKwkJLnJjX3R5cGUgPSBSQ19UWVBFX1VOS05PV04sCS8qIExlZ2FjeSBJUiB0eXBlICovCisJCS5uYW1lICAgID0gUkNfTUFQX0RNMTEwNV9ORUMsCisJfQorfTsKKworc3RhdGljIGludCBfX2luaXQgaW5pdF9yY19tYXBfZG0xMTA1X25lYyh2b2lkKQoreworCXJldHVybiByY19tYXBfcmVnaXN0ZXIoJmRtMTEwNV9uZWNfbWFwKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGV4aXRfcmNfbWFwX2RtMTEwNV9uZWModm9pZCkKK3sKKwlyY19tYXBfdW5yZWdpc3RlcigmZG0xMTA1X25lY19tYXApOworfQorCittb2R1bGVfaW5pdChpbml0X3JjX21hcF9kbTExMDVfbmVjKQorbW9kdWxlX2V4aXQoZXhpdF9yY19tYXBfZG0xMTA1X25lYykKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtZG50di1saXZlLWR2Yi10LmMgYi9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtZG50di1saXZlLWR2Yi10LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM5MTJiZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1kbnR2LWxpdmUtZHZiLXQuYwpAQCAtMCwwICsxLDc4IEBACisvKiBkbnR2LWxpdmUtZHZiLXQuaCAtIEtleXRhYmxlIGZvciBkbnR2X2xpdmVfZHZiX3QgUmVtb3RlIENvbnRyb2xsZXIKKyAqCisgKiBrZXltYXAgaW1wb3J0ZWQgZnJvbSBpci1rZXltYXBzLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgYnkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bWVkaWEvcmMtbWFwLmg+CisKKy8qIERpZ2l0YWxOb3cgRE5UViBMaXZlIERWQi1UIFJlbW90ZSAqLworCitzdGF0aWMgc3RydWN0IHJjX21hcF90YWJsZSBkbnR2X2xpdmVfZHZiX3RbXSA9IHsKKwl7IDB4MDAsIEtFWV9FU0MgfSwJCS8qICdnbyB1cCBhIGxldmVsPycgKi8KKwkvKiBLZXlzIDAgdG8gOSAqLworCXsgMHgwYSwgS0VZXzAgfSwKKwl7IDB4MDEsIEtFWV8xIH0sCisJeyAweDAyLCBLRVlfMiB9LAorCXsgMHgwMywgS0VZXzMgfSwKKwl7IDB4MDQsIEtFWV80IH0sCisJeyAweDA1LCBLRVlfNSB9LAorCXsgMHgwNiwgS0VZXzYgfSwKKwl7IDB4MDcsIEtFWV83IH0sCisJeyAweDA4LCBLRVlfOCB9LAorCXsgMHgwOSwgS0VZXzkgfSwKKworCXsgMHgwYiwgS0VZX1RVTkVSIH0sCQkvKiB0di9mbSAqLworCXsgMHgwYywgS0VZX1NFQVJDSCB9LAkJLyogc2NhbiAqLworCXsgMHgwZCwgS0VZX1NUT1AgfSwKKwl7IDB4MGUsIEtFWV9QQVVTRSB9LAorCXsgMHgwZiwgS0VZX0xJU1QgfSwJCS8qIHNvdXJjZSAqLworCisJeyAweDEwLCBLRVlfTVVURSB9LAorCXsgMHgxMSwgS0VZX1JFV0lORCB9LAkJLyogYmFja3dhcmQgPDwgKi8KKwl7IDB4MTIsIEtFWV9QT1dFUiB9LAorCXsgMHgxMywgS0VZX0NBTUVSQSB9LAkJLyogc25hcCAqLworCXsgMHgxNCwgS0VZX0FVRElPIH0sCQkvKiBzdGVyZW8gKi8KKwl7IDB4MTUsIEtFWV9DTEVBUiB9LAkJLyogcmVzZXQgKi8KKwl7IDB4MTYsIEtFWV9QTEFZIH0sCisJeyAweDE3LCBLRVlfRU5URVIgfSwKKwl7IDB4MTgsIEtFWV9aT09NIH0sCQkvKiBmdWxsIHNjcmVlbiAqLworCXsgMHgxOSwgS0VZX0ZBU1RGT1JXQVJEIH0sCS8qIGZvcndhcmQgPj4gKi8KKwl7IDB4MWEsIEtFWV9DSEFOTkVMVVAgfSwKKwl7IDB4MWIsIEtFWV9WT0xVTUVVUCB9LAorCXsgMHgxYywgS0VZX0lORk8gfSwJCS8qIHByZXZpZXcgKi8KKwl7IDB4MWQsIEtFWV9SRUNPUkQgfSwJCS8qIHJlY29yZCAqLworCXsgMHgxZSwgS0VZX0NIQU5ORUxET1dOIH0sCisJeyAweDFmLCBLRVlfVk9MVU1FRE9XTiB9LAorfTsKKworc3RhdGljIHN0cnVjdCByY19tYXBfbGlzdCBkbnR2X2xpdmVfZHZiX3RfbWFwID0geworCS5tYXAgPSB7CisJCS5zY2FuICAgID0gZG50dl9saXZlX2R2Yl90LAorCQkuc2l6ZSAgICA9IEFSUkFZX1NJWkUoZG50dl9saXZlX2R2Yl90KSwKKwkJLnJjX3R5cGUgPSBSQ19UWVBFX1VOS05PV04sCS8qIExlZ2FjeSBJUiB0eXBlICovCisJCS5uYW1lICAgID0gUkNfTUFQX0ROVFZfTElWRV9EVkJfVCwKKwl9Cit9OworCitzdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcF9kbnR2X2xpdmVfZHZiX3Qodm9pZCkKK3sKKwlyZXR1cm4gcmNfbWFwX3JlZ2lzdGVyKCZkbnR2X2xpdmVfZHZiX3RfbWFwKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGV4aXRfcmNfbWFwX2RudHZfbGl2ZV9kdmJfdCh2b2lkKQoreworCXJjX21hcF91bnJlZ2lzdGVyKCZkbnR2X2xpdmVfZHZiX3RfbWFwKTsKK30KKworbW9kdWxlX2luaXQoaW5pdF9yY19tYXBfZG50dl9saXZlX2R2Yl90KQorbW9kdWxlX2V4aXQoZXhpdF9yY19tYXBfZG50dl9saXZlX2R2Yl90KQorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1kbnR2LWxpdmUtZHZidC1wcm8uYyBiL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1kbnR2LWxpdmUtZHZidC1wcm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTVlOTlkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLWRudHYtbGl2ZS1kdmJ0LXByby5jCkBAIC0wLDAgKzEsOTcgQEAKKy8qIGRudHYtbGl2ZS1kdmJ0LXByby5oIC0gS2V5dGFibGUgZm9yIGRudHZfbGl2ZV9kdmJ0X3BybyBSZW1vdGUgQ29udHJvbGxlcgorICoKKyAqIGtleW1hcCBpbXBvcnRlZCBmcm9tIGlyLWtleW1hcHMuYworICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBieSBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxtZWRpYS9yYy1tYXAuaD4KKworLyogRGlnaXRhbE5vdyBETlRWIExpdmUhIERWQi1UIFBybyBSZW1vdGUgKi8KKworc3RhdGljIHN0cnVjdCByY19tYXBfdGFibGUgZG50dl9saXZlX2R2YnRfcHJvW10gPSB7CisJeyAweDE2LCBLRVlfUE9XRVIgfSwKKwl7IDB4NWIsIEtFWV9IT01FIH0sCisKKwl7IDB4NTUsIEtFWV9UViB9LAkJLyogbGl2ZSB0diAqLworCXsgMHg1OCwgS0VZX1RVTkVSIH0sCQkvKiBkaWdpdGFsIFJhZGlvICovCisJeyAweDVhLCBLRVlfUkFESU8gfSwJCS8qIEZNIHJhZGlvICovCisJeyAweDU5LCBLRVlfRFZEIH0sCQkvKiBkdmQgbWVudSAqLworCXsgMHgwMywgS0VZXzEgfSwKKwl7IDB4MDEsIEtFWV8yIH0sCisJeyAweDA2LCBLRVlfMyB9LAorCXsgMHgwOSwgS0VZXzQgfSwKKwl7IDB4MWQsIEtFWV81IH0sCisJeyAweDFmLCBLRVlfNiB9LAorCXsgMHgwZCwgS0VZXzcgfSwKKwl7IDB4MTksIEtFWV84IH0sCisJeyAweDFiLCBLRVlfOSB9LAorCXsgMHgwYywgS0VZX0NBTkNFTCB9LAorCXsgMHgxNSwgS0VZXzAgfSwKKwl7IDB4NGEsIEtFWV9DTEVBUiB9LAorCXsgMHgxMywgS0VZX0JBQ0sgfSwKKwl7IDB4MDAsIEtFWV9UQUIgfSwKKwl7IDB4NGIsIEtFWV9VUCB9LAorCXsgMHg0ZSwgS0VZX0xFRlQgfSwKKwl7IDB4NGYsIEtFWV9PSyB9LAorCXsgMHg1MiwgS0VZX1JJR0hUIH0sCisJeyAweDUxLCBLRVlfRE9XTiB9LAorCXsgMHgxZSwgS0VZX1ZPTFVNRVVQIH0sCisJeyAweDBhLCBLRVlfVk9MVU1FRE9XTiB9LAorCXsgMHgwMiwgS0VZX0NIQU5ORUxET1dOIH0sCisJeyAweDA1LCBLRVlfQ0hBTk5FTFVQIH0sCisJeyAweDExLCBLRVlfUkVDT1JEIH0sCisJeyAweDE0LCBLRVlfUExBWSB9LAorCXsgMHg0YywgS0VZX1BBVVNFIH0sCisJeyAweDFhLCBLRVlfU1RPUCB9LAorCXsgMHg0MCwgS0VZX1JFV0lORCB9LAorCXsgMHgxMiwgS0VZX0ZBU1RGT1JXQVJEIH0sCisJeyAweDQxLCBLRVlfUFJFVklPVVNTT05HIH0sCS8qIHJlcGxheSB8PCAqLworCXsgMHg0MiwgS0VZX05FWFRTT05HIH0sCQkvKiBza2lwID58ICovCisJeyAweDU0LCBLRVlfQ0FNRVJBIH0sCQkvKiBjYXB0dXJlICovCisJeyAweDUwLCBLRVlfTEFOR1VBR0UgfSwJCS8qIHNhcCAqLworCXsgMHg0NywgS0VZX1RWMiB9LAkJLyogcGlwICovCisJeyAweDRkLCBLRVlfU0NSRUVOIH0sCisJeyAweDQzLCBLRVlfU1VCVElUTEUgfSwKKwl7IDB4MTAsIEtFWV9NVVRFIH0sCisJeyAweDQ5LCBLRVlfQVVESU8gfSwJCS8qIGwvciAqLworCXsgMHgwNywgS0VZX1NMRUVQIH0sCisJeyAweDA4LCBLRVlfVklERU8gfSwJCS8qIGEvdiAqLworCXsgMHgwZSwgS0VZX1BSRVZJT1VTIH0sCQkvKiByZWNhbGwgKi8KKwl7IDB4NDUsIEtFWV9aT09NIH0sCQkvKiB6b29tICsgKi8KKwl7IDB4NDYsIEtFWV9BTkdMRSB9LAkJLyogem9vbSAtICovCisJeyAweDU2LCBLRVlfUkVEIH0sCisJeyAweDU3LCBLRVlfR1JFRU4gfSwKKwl7IDB4NWMsIEtFWV9ZRUxMT1cgfSwKKwl7IDB4NWQsIEtFWV9CTFVFIH0sCit9OworCitzdGF0aWMgc3RydWN0IHJjX21hcF9saXN0IGRudHZfbGl2ZV9kdmJ0X3Byb19tYXAgPSB7CisJLm1hcCA9IHsKKwkJLnNjYW4gICAgPSBkbnR2X2xpdmVfZHZidF9wcm8sCisJCS5zaXplICAgID0gQVJSQVlfU0laRShkbnR2X2xpdmVfZHZidF9wcm8pLAorCQkucmNfdHlwZSA9IFJDX1RZUEVfVU5LTk9XTiwJLyogTGVnYWN5IElSIHR5cGUgKi8KKwkJLm5hbWUgICAgPSBSQ19NQVBfRE5UVl9MSVZFX0RWQlRfUFJPLAorCX0KK307CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfcmNfbWFwX2RudHZfbGl2ZV9kdmJ0X3Bybyh2b2lkKQoreworCXJldHVybiByY19tYXBfcmVnaXN0ZXIoJmRudHZfbGl2ZV9kdmJ0X3Byb19tYXApOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yY19tYXBfZG50dl9saXZlX2R2YnRfcHJvKHZvaWQpCit7CisJcmNfbWFwX3VucmVnaXN0ZXIoJmRudHZfbGl2ZV9kdmJ0X3Byb19tYXApOworfQorCittb2R1bGVfaW5pdChpbml0X3JjX21hcF9kbnR2X2xpdmVfZHZidF9wcm8pCittb2R1bGVfZXhpdChleGl0X3JjX21hcF9kbnR2X2xpdmVfZHZidF9wcm8pCisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIk1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLWVtLXRlcnJhdGVjLmMgYi9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtZW0tdGVycmF0ZWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjlkNDI5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLWVtLXRlcnJhdGVjLmMKQEAgLTAsMCArMSw2OSBAQAorLyogZW0tdGVycmF0ZWMuaCAtIEtleXRhYmxlIGZvciBlbV90ZXJyYXRlYyBSZW1vdGUgQ29udHJvbGxlcgorICoKKyAqIGtleW1hcCBpbXBvcnRlZCBmcm9tIGlyLWtleW1hcHMuYworICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBieSBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxtZWRpYS9yYy1tYXAuaD4KKworc3RhdGljIHN0cnVjdCByY19tYXBfdGFibGUgZW1fdGVycmF0ZWNbXSA9IHsKKwl7IDB4MDEsIEtFWV9DSEFOTkVMIH0sCisJeyAweDAyLCBLRVlfU0VMRUNUIH0sCisJeyAweDAzLCBLRVlfTVVURSB9LAorCXsgMHgwNCwgS0VZX1BPV0VSIH0sCisJeyAweDA1LCBLRVlfMSB9LAorCXsgMHgwNiwgS0VZXzIgfSwKKwl7IDB4MDcsIEtFWV8zIH0sCisJeyAweDA4LCBLRVlfQ0hBTk5FTFVQIH0sCisJeyAweDA5LCBLRVlfNCB9LAorCXsgMHgwYSwgS0VZXzUgfSwKKwl7IDB4MGIsIEtFWV82IH0sCisJeyAweDBjLCBLRVlfQ0hBTk5FTERPV04gfSwKKwl7IDB4MGQsIEtFWV83IH0sCisJeyAweDBlLCBLRVlfOCB9LAorCXsgMHgwZiwgS0VZXzkgfSwKKwl7IDB4MTAsIEtFWV9WT0xVTUVVUCB9LAorCXsgMHgxMSwgS0VZXzAgfSwKKwl7IDB4MTIsIEtFWV9NRU5VIH0sCisJeyAweDEzLCBLRVlfUFJJTlQgfSwKKwl7IDB4MTQsIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweDE2LCBLRVlfUEFVU0UgfSwKKwl7IDB4MTgsIEtFWV9SRUNPUkQgfSwKKwl7IDB4MTksIEtFWV9SRVdJTkQgfSwKKwl7IDB4MWEsIEtFWV9QTEFZIH0sCisJeyAweDFiLCBLRVlfRk9SV0FSRCB9LAorCXsgMHgxYywgS0VZX0JBQ0tTUEFDRSB9LAorCXsgMHgxZSwgS0VZX1NUT1AgfSwKKwl7IDB4NDAsIEtFWV9aT09NIH0sCit9OworCitzdGF0aWMgc3RydWN0IHJjX21hcF9saXN0IGVtX3RlcnJhdGVjX21hcCA9IHsKKwkubWFwID0geworCQkuc2NhbiAgICA9IGVtX3RlcnJhdGVjLAorCQkuc2l6ZSAgICA9IEFSUkFZX1NJWkUoZW1fdGVycmF0ZWMpLAorCQkucmNfdHlwZSA9IFJDX1RZUEVfVU5LTk9XTiwJLyogTGVnYWN5IElSIHR5cGUgKi8KKwkJLm5hbWUgICAgPSBSQ19NQVBfRU1fVEVSUkFURUMsCisJfQorfTsKKworc3RhdGljIGludCBfX2luaXQgaW5pdF9yY19tYXBfZW1fdGVycmF0ZWModm9pZCkKK3sKKwlyZXR1cm4gcmNfbWFwX3JlZ2lzdGVyKCZlbV90ZXJyYXRlY19tYXApOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yY19tYXBfZW1fdGVycmF0ZWModm9pZCkKK3sKKwlyY19tYXBfdW5yZWdpc3RlcigmZW1fdGVycmF0ZWNfbWFwKTsKK30KKworbW9kdWxlX2luaXQoaW5pdF9yY19tYXBfZW1fdGVycmF0ZWMpCittb2R1bGVfZXhpdChleGl0X3JjX21hcF9lbV90ZXJyYXRlYykKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtZW5jb3JlLWVubHR2LWZtNTMuYyBiL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1lbmNvcmUtZW5sdHYtZm01My5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzODg2OTgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtZW5jb3JlLWVubHR2LWZtNTMuYwpAQCAtMCwwICsxLDgxIEBACisvKiBlbmNvcmUtZW5sdHYtZm01My5oIC0gS2V5dGFibGUgZm9yIGVuY29yZV9lbmx0dl9mbTUzIFJlbW90ZSBDb250cm9sbGVyCisgKgorICoga2V5bWFwIGltcG9ydGVkIGZyb20gaXIta2V5bWFwcy5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPG1lZGlhL3JjLW1hcC5oPgorCisvKiBFbmNvcmUgRU5MVFYtRk0gdjUuMworICAgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQGluZnJhZGVhZC5vcmc+CisgKi8KKworc3RhdGljIHN0cnVjdCByY19tYXBfdGFibGUgZW5jb3JlX2VubHR2X2ZtNTNbXSA9IHsKKwl7IDB4MTAsIEtFWV9QT1dFUjJ9LAorCXsgMHgwNiwgS0VZX01VVEV9LAorCisJeyAweDA5LCBLRVlfMX0sCisJeyAweDFkLCBLRVlfMn0sCisJeyAweDFmLCBLRVlfM30sCisJeyAweDE5LCBLRVlfNH0sCisJeyAweDFiLCBLRVlfNX0sCisJeyAweDExLCBLRVlfNn0sCisJeyAweDE3LCBLRVlfN30sCisJeyAweDEyLCBLRVlfOH0sCisJeyAweDE2LCBLRVlfOX0sCisJeyAweDQ4LCBLRVlfMH0sCisKKwl7IDB4MDQsIEtFWV9MSVNUfSwJCS8qIC0vLS0gKi8KKwl7IDB4NDAsIEtFWV9MQVNUfSwJCS8qIHJlY2FsbCAqLworCisJeyAweDAyLCBLRVlfTU9ERX0sCQkvKiBUVi9BViAqLworCXsgMHgwNSwgS0VZX0NBTUVSQX0sCQkvKiBTTkFQU0hPVCAqLworCisJeyAweDRjLCBLRVlfQ0hBTk5FTFVQfSwJCS8qIFVQICovCisJeyAweDAwLCBLRVlfQ0hBTk5FTERPV059LAkvKiBET1dOICovCisJeyAweDBkLCBLRVlfVk9MVU1FVVB9LAkJLyogUklHSFQgKi8KKwl7IDB4MTUsIEtFWV9WT0xVTUVET1dOfSwJLyogTEVGVCAqLworCXsgMHg0OSwgS0VZX0VOVEVSfSwJCS8qIE9LICovCisKKwl7IDB4NTQsIEtFWV9SRUNPUkR9LAorCXsgMHg0ZCwgS0VZX1BMQVl9LAkJLyogcGF1c2UgKi8KKworCXsgMHgxZSwgS0VZX01FTlV9LAkJLyogdmlkZW8gc2V0dGluZyAqLworCXsgMHgwZSwgS0VZX1JJR0hUfSwJCS8qIDwtICovCisJeyAweDFhLCBLRVlfTEVGVH0sCQkvKiAtPiAqLworCisJeyAweDBhLCBLRVlfQ0xFQVJ9LAkJLyogdmlkZW8gZGVmYXVsdCAqLworCXsgMHgwYywgS0VZX1pPT019LAkJLyogaGlkZSBwYW5uZWwgKi8KKwl7IDB4NDcsIEtFWV9TTEVFUH0sCQkvKiBzaHV0ZG93biAqLworfTsKKworc3RhdGljIHN0cnVjdCByY19tYXBfbGlzdCBlbmNvcmVfZW5sdHZfZm01M19tYXAgPSB7CisJLm1hcCA9IHsKKwkJLnNjYW4gICAgPSBlbmNvcmVfZW5sdHZfZm01MywKKwkJLnNpemUgICAgPSBBUlJBWV9TSVpFKGVuY29yZV9lbmx0dl9mbTUzKSwKKwkJLnJjX3R5cGUgPSBSQ19UWVBFX1VOS05PV04sCS8qIExlZ2FjeSBJUiB0eXBlICovCisJCS5uYW1lICAgID0gUkNfTUFQX0VOQ09SRV9FTkxUVl9GTTUzLAorCX0KK307CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfcmNfbWFwX2VuY29yZV9lbmx0dl9mbTUzKHZvaWQpCit7CisJcmV0dXJuIHJjX21hcF9yZWdpc3RlcigmZW5jb3JlX2VubHR2X2ZtNTNfbWFwKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGV4aXRfcmNfbWFwX2VuY29yZV9lbmx0dl9mbTUzKHZvaWQpCit7CisJcmNfbWFwX3VucmVnaXN0ZXIoJmVuY29yZV9lbmx0dl9mbTUzX21hcCk7Cit9CisKK21vZHVsZV9pbml0KGluaXRfcmNfbWFwX2VuY29yZV9lbmx0dl9mbTUzKQorbW9kdWxlX2V4aXQoZXhpdF9yY19tYXBfZW5jb3JlX2VubHR2X2ZtNTMpCisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIk1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLWVuY29yZS1lbmx0di5jIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLWVuY29yZS1lbmx0di5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmYTRlOTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtZW5jb3JlLWVubHR2LmMKQEAgLTAsMCArMSwxMTIgQEAKKy8qIGVuY29yZS1lbmx0di5oIC0gS2V5dGFibGUgZm9yIGVuY29yZV9lbmx0diBSZW1vdGUgQ29udHJvbGxlcgorICoKKyAqIGtleW1hcCBpbXBvcnRlZCBmcm9tIGlyLWtleW1hcHMuYworICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBieSBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxtZWRpYS9yYy1tYXAuaD4KKworLyogRW5jb3JlIEVOTFRWLUZNICAtIGJsYWNrIHBsYXN0aWMsIHdoaXRlIGZyb250IGNvdmVyIHdpdGggd2hpdGUgZ2xvd2luZyBidXR0b25zCisgICAgSnVhbiBQYWJsbyBTb3JtYW5pIDxzb3JtYW5AZ21haWwuY29tPiAqLworCitzdGF0aWMgc3RydWN0IHJjX21hcF90YWJsZSBlbmNvcmVfZW5sdHZbXSA9IHsKKworCS8qIFBvd2VyIGJ1dHRvbiBkb2VzIG5vdGhpbmcsIG5laXRoZXIgaW4gV2luZG93cyBhcHAsCisJIGFsdGhvdWdoIGl0IHNlbmRzIGRhdGEgKHVzZWQgZm9yIEJJT1Mgd2FrZXVwPykgKi8KKwl7IDB4MGQsIEtFWV9NVVRFIH0sCisKKwl7IDB4MWUsIEtFWV9UViB9LAorCXsgMHgwMCwgS0VZX1ZJREVPIH0sCisJeyAweDAxLCBLRVlfQVVESU8gfSwJCS8qIG11c2ljICovCisJeyAweDAyLCBLRVlfTUhQIH0sCQkvKiBwaWN0dXJlICovCisKKwl7IDB4MWYsIEtFWV8xIH0sCisJeyAweDAzLCBLRVlfMiB9LAorCXsgMHgwNCwgS0VZXzMgfSwKKwl7IDB4MDUsIEtFWV80IH0sCisJeyAweDFjLCBLRVlfNSB9LAorCXsgMHgwNiwgS0VZXzYgfSwKKwl7IDB4MDcsIEtFWV83IH0sCisJeyAweDA4LCBLRVlfOCB9LAorCXsgMHgxZCwgS0VZXzkgfSwKKwl7IDB4MGEsIEtFWV8wIH0sCisKKwl7IDB4MDksIEtFWV9MSVNUIH0sCQkvKiAtLy0tICovCisJeyAweDBiLCBLRVlfTEFTVCB9LAkJLyogcmVjYWxsICovCisKKwl7IDB4MTQsIEtFWV9IT01FIH0sCQkvKiB3aW4gc3RhcnQgbWVudSAqLworCXsgMHgxNSwgS0VZX0VYSVQgfSwJCS8qIGV4aXQgKi8KKwl7IDB4MTYsIEtFWV9DSEFOTkVMVVAgfSwJLyogVVAgKi8KKwl7IDB4MTIsIEtFWV9DSEFOTkVMRE9XTiB9LAkvKiBET1dOICovCisJeyAweDBjLCBLRVlfVk9MVU1FVVAgfSwJCS8qIFJJR0hUICovCisJeyAweDE3LCBLRVlfVk9MVU1FRE9XTiB9LAkvKiBMRUZUICovCisKKwl7IDB4MTgsIEtFWV9FTlRFUiB9LAkJLyogT0sgKi8KKworCXsgMHgwZSwgS0VZX0VTQyB9LAorCXsgMHgxMywgS0VZX0NZQ0xFV0lORE9XUyB9LAkvKiBkZXNrdG9wICovCisJeyAweDExLCBLRVlfVEFCIH0sCisJeyAweDE5LCBLRVlfU1dJVENIVklERU9NT0RFIH0sCS8qIHN3aXRjaCAqLworCisJeyAweDFhLCBLRVlfTUVOVSB9LAorCXsgMHgxYiwgS0VZX1pPT00gfSwJCS8qIGZ1bGxzY3JlZW4gKi8KKwl7IDB4NDQsIEtFWV9USU1FIH0sCQkvKiB0aW1lIHNoaWZ0ICovCisJeyAweDQwLCBLRVlfTU9ERSB9LAkJLyogc291cmNlICovCisKKwl7IDB4NWEsIEtFWV9SRUNPUkQgfSwKKwl7IDB4NDIsIEtFWV9QTEFZIH0sCQkvKiBwbGF5L3BhdXNlICovCisJeyAweDQ1LCBLRVlfU1RPUCB9LAorCXsgMHg0MywgS0VZX0NBTUVSQSB9LAkJLyogY2FtZXJhIGljb24gKi8KKworCXsgMHg0OCwgS0VZX1JFV0lORCB9LAorCXsgMHg0YSwgS0VZX0ZBU1RGT1JXQVJEIH0sCisJeyAweDQ5LCBLRVlfUFJFVklPVVMgfSwKKwl7IDB4NGIsIEtFWV9ORVhUIH0sCisKKwl7IDB4NGMsIEtFWV9GQVZPUklURVMgfSwJLyogdHYgd2FsbCAqLworCXsgMHg0ZCwgS0VZX1NPVU5EIH0sCQkvKiBEVkQgc291bmQgKi8KKwl7IDB4NGUsIEtFWV9MQU5HVUFHRSB9LAkJLyogRFZEIGxhbmcgKi8KKwl7IDB4NGYsIEtFWV9URVhUIH0sCQkvKiBEVkQgdGV4dCAqLworCisJeyAweDUwLCBLRVlfU0xFRVAgfSwJCS8qIHNodXRkb3duICovCisJeyAweDUxLCBLRVlfTU9ERSB9LAkJLyogc3RlcmVvID4gbWFpbiAqLworCXsgMHg1MiwgS0VZX1NFTEVDVCB9LAkJLyogc3RlcmVvID4gc2FwICovCisJeyAweDUzLCBLRVlfUFJPRzEgfSwJCS8qIHRlbGV0ZXh0ICovCisKKworCXsgMHg1OSwgS0VZX1JFRCB9LAkJLyogQVAxICovCisJeyAweDQxLCBLRVlfR1JFRU4gfSwJCS8qIEFQMiAqLworCXsgMHg0NywgS0VZX1lFTExPVyB9LAkJLyogQVAzICovCisJeyAweDU3LCBLRVlfQkxVRSB9LAkJLyogQVA0ICovCit9OworCitzdGF0aWMgc3RydWN0IHJjX21hcF9saXN0IGVuY29yZV9lbmx0dl9tYXAgPSB7CisJLm1hcCA9IHsKKwkJLnNjYW4gICAgPSBlbmNvcmVfZW5sdHYsCisJCS5zaXplICAgID0gQVJSQVlfU0laRShlbmNvcmVfZW5sdHYpLAorCQkucmNfdHlwZSA9IFJDX1RZUEVfVU5LTk9XTiwJLyogTGVnYWN5IElSIHR5cGUgKi8KKwkJLm5hbWUgICAgPSBSQ19NQVBfRU5DT1JFX0VOTFRWLAorCX0KK307CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfcmNfbWFwX2VuY29yZV9lbmx0dih2b2lkKQoreworCXJldHVybiByY19tYXBfcmVnaXN0ZXIoJmVuY29yZV9lbmx0dl9tYXApOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yY19tYXBfZW5jb3JlX2VubHR2KHZvaWQpCit7CisJcmNfbWFwX3VucmVnaXN0ZXIoJmVuY29yZV9lbmx0dl9tYXApOworfQorCittb2R1bGVfaW5pdChpbml0X3JjX21hcF9lbmNvcmVfZW5sdHYpCittb2R1bGVfZXhpdChleGl0X3JjX21hcF9lbmNvcmVfZW5sdHYpCisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIk1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLWVuY29yZS1lbmx0djIuYyBiL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1lbmNvcmUtZW5sdHYyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q1YjAwZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1lbmNvcmUtZW5sdHYyLmMKQEAgLTAsMCArMSw5MCBAQAorLyogZW5jb3JlLWVubHR2Mi5oIC0gS2V5dGFibGUgZm9yIGVuY29yZV9lbmx0djIgUmVtb3RlIENvbnRyb2xsZXIKKyAqCisgKiBrZXltYXAgaW1wb3J0ZWQgZnJvbSBpci1rZXltYXBzLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgYnkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bWVkaWEvcmMtbWFwLmg+CisKKy8qIEVuY29yZSBFTkxUVjItRk0gIC0gc2lsdmVyIHBsYXN0aWMgLSAiV2FuZCBNZWRpYSIgd3JpdHRlbiBhdCB0aGUgYm90dG9uCisgICAgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQGluZnJhZGVhZC5vcmc+ICovCisKK3N0YXRpYyBzdHJ1Y3QgcmNfbWFwX3RhYmxlIGVuY29yZV9lbmx0djJbXSA9IHsKKwl7IDB4NGMsIEtFWV9QT1dFUjIgfSwKKwl7IDB4NGEsIEtFWV9UVU5FUiB9LAorCXsgMHg0MCwgS0VZXzEgfSwKKwl7IDB4NjAsIEtFWV8yIH0sCisJeyAweDUwLCBLRVlfMyB9LAorCXsgMHg3MCwgS0VZXzQgfSwKKwl7IDB4NDgsIEtFWV81IH0sCisJeyAweDY4LCBLRVlfNiB9LAorCXsgMHg1OCwgS0VZXzcgfSwKKwl7IDB4NzgsIEtFWV84IH0sCisJeyAweDQ0LCBLRVlfOSB9LAorCXsgMHg1NCwgS0VZXzAgfSwKKworCXsgMHg2NCwgS0VZX0xBU1QgfSwJCS8qICsxMDAgKi8KKwl7IDB4NGUsIEtFWV9BR0FJTiB9LAkJLyogUmVjYWxsICovCisKKwl7IDB4NmMsIEtFWV9TV0lUQ0hWSURFT01PREUgfSwJLyogVmlkZW8gU291cmNlICovCisJeyAweDVlLCBLRVlfTUVOVSB9LAorCXsgMHg1NiwgS0VZX1NDUkVFTiB9LAorCXsgMHg3YSwgS0VZX1NFVFVQIH0sCisKKwl7IDB4NDYsIEtFWV9NVVRFIH0sCisJeyAweDVjLCBLRVlfTU9ERSB9LAkJLyogU3RlcmVvICovCisJeyAweDc0LCBLRVlfSU5GTyB9LAorCXsgMHg3YywgS0VZX0NMRUFSIH0sCisKKwl7IDB4NTUsIEtFWV9VUCB9LAorCXsgMHg0OSwgS0VZX0RPV04gfSwKKwl7IDB4N2UsIEtFWV9MRUZUIH0sCisJeyAweDU5LCBLRVlfUklHSFQgfSwKKwl7IDB4NmEsIEtFWV9FTlRFUiB9LAorCisJeyAweDQyLCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4NjIsIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweDUyLCBLRVlfQ0hBTk5FTFVQIH0sCisJeyAweDcyLCBLRVlfQ0hBTk5FTERPV04gfSwKKworCXsgMHg0MSwgS0VZX1JFQ09SRCB9LAorCXsgMHg1MSwgS0VZX0NBTUVSQSB9LAkJLyogU25hcHNob3QgKi8KKwl7IDB4NzUsIEtFWV9USU1FIH0sCQkvKiBUaW1lc2hpZnQgKi8KKwl7IDB4NzEsIEtFWV9UVjIgfSwJCS8qIFBJUCAqLworCisJeyAweDQ1LCBLRVlfUkVXSU5EIH0sCisJeyAweDZmLCBLRVlfUEFVU0UgfSwKKwl7IDB4N2QsIEtFWV9GT1JXQVJEIH0sCisJeyAweDc5LCBLRVlfU1RPUCB9LAorfTsKKworc3RhdGljIHN0cnVjdCByY19tYXBfbGlzdCBlbmNvcmVfZW5sdHYyX21hcCA9IHsKKwkubWFwID0geworCQkuc2NhbiAgICA9IGVuY29yZV9lbmx0djIsCisJCS5zaXplICAgID0gQVJSQVlfU0laRShlbmNvcmVfZW5sdHYyKSwKKwkJLnJjX3R5cGUgPSBSQ19UWVBFX1VOS05PV04sCS8qIExlZ2FjeSBJUiB0eXBlICovCisJCS5uYW1lICAgID0gUkNfTUFQX0VOQ09SRV9FTkxUVjIsCisJfQorfTsKKworc3RhdGljIGludCBfX2luaXQgaW5pdF9yY19tYXBfZW5jb3JlX2VubHR2Mih2b2lkKQoreworCXJldHVybiByY19tYXBfcmVnaXN0ZXIoJmVuY29yZV9lbmx0djJfbWFwKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGV4aXRfcmNfbWFwX2VuY29yZV9lbmx0djIodm9pZCkKK3sKKwlyY19tYXBfdW5yZWdpc3RlcigmZW5jb3JlX2VubHR2Ml9tYXApOworfQorCittb2R1bGVfaW5pdChpbml0X3JjX21hcF9lbmNvcmVfZW5sdHYyKQorbW9kdWxlX2V4aXQoZXhpdF9yY19tYXBfZW5jb3JlX2VubHR2MikKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtZXZnYS1pbmR0dWJlLmMgYi9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtZXZnYS1pbmR0dWJlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJiZjI0ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1ldmdhLWluZHR1YmUuYwpAQCAtMCwwICsxLDYxIEBACisvKiBldmdhLWluZHR1YmUuaCAtIEtleXRhYmxlIGZvciBldmdhX2luZHR1YmUgUmVtb3RlIENvbnRyb2xsZXIKKyAqCisgKiBrZXltYXAgaW1wb3J0ZWQgZnJvbSBpci1rZXltYXBzLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgYnkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bWVkaWEvcmMtbWFwLmg+CisKKy8qIEVWR0EgaW5EdHViZQorICAgRGV2aW4gSGVpdG11ZWxsZXIgPGRldmluLmhlaXRtdWVsbGVyQGdtYWlsLmNvbT4KKyAqLworCitzdGF0aWMgc3RydWN0IHJjX21hcF90YWJsZSBldmdhX2luZHR1YmVbXSA9IHsKKwl7IDB4MTIsIEtFWV9QT1dFUn0sCisJeyAweDAyLCBLRVlfTU9ERX0sCS8qIFRWICovCisJeyAweDE0LCBLRVlfTVVURX0sCisJeyAweDFhLCBLRVlfQ0hBTk5FTFVQfSwKKwl7IDB4MTYsIEtFWV9UVjJ9LAkvKiBQSVAgKi8KKwl7IDB4MWQsIEtFWV9WT0xVTUVVUH0sCisJeyAweDA1LCBLRVlfQ0hBTk5FTERPV059LAorCXsgMHgwZiwgS0VZX1BMQVlQQVVTRX0sCisJeyAweDE5LCBLRVlfVk9MVU1FRE9XTn0sCisJeyAweDFjLCBLRVlfUkVXSU5EfSwKKwl7IDB4MGQsIEtFWV9SRUNPUkR9LAorCXsgMHgxOCwgS0VZX0ZPUldBUkR9LAorCXsgMHgxZSwgS0VZX1BSRVZJT1VTfSwKKwl7IDB4MWIsIEtFWV9TVE9QfSwKKwl7IDB4MWYsIEtFWV9ORVhUfSwKKwl7IDB4MTMsIEtFWV9DQU1FUkF9LAorfTsKKworc3RhdGljIHN0cnVjdCByY19tYXBfbGlzdCBldmdhX2luZHR1YmVfbWFwID0geworCS5tYXAgPSB7CisJCS5zY2FuICAgID0gZXZnYV9pbmR0dWJlLAorCQkuc2l6ZSAgICA9IEFSUkFZX1NJWkUoZXZnYV9pbmR0dWJlKSwKKwkJLnJjX3R5cGUgPSBSQ19UWVBFX1VOS05PV04sCS8qIExlZ2FjeSBJUiB0eXBlICovCisJCS5uYW1lICAgID0gUkNfTUFQX0VWR0FfSU5EVFVCRSwKKwl9Cit9OworCitzdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcF9ldmdhX2luZHR1YmUodm9pZCkKK3sKKwlyZXR1cm4gcmNfbWFwX3JlZ2lzdGVyKCZldmdhX2luZHR1YmVfbWFwKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGV4aXRfcmNfbWFwX2V2Z2FfaW5kdHViZSh2b2lkKQoreworCXJjX21hcF91bnJlZ2lzdGVyKCZldmdhX2luZHR1YmVfbWFwKTsKK30KKworbW9kdWxlX2luaXQoaW5pdF9yY19tYXBfZXZnYV9pbmR0dWJlKQorbW9kdWxlX2V4aXQoZXhpdF9yY19tYXBfZXZnYV9pbmR0dWJlKQorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1lenR2LmMgYi9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtZXp0di5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlOGU1YjIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtZXp0di5jCkBAIC0wLDAgKzEsOTYgQEAKKy8qIGV6dHYuaCAtIEtleXRhYmxlIGZvciBlenR2IFJlbW90ZSBDb250cm9sbGVyCisgKgorICoga2V5bWFwIGltcG9ydGVkIGZyb20gaXIta2V5bWFwcy5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPG1lZGlhL3JjLW1hcC5oPgorCisvKiBBbGZvbnMgR2VzZXIgPGEuZ2VzZXJAY294Lm5ldD4KKyAqIHVwZGF0ZXMgZnJvbSBKb2IgRC4gUi4gQm9yZ2VzIDxqb2JkcmJAaWcuY29tLmJyPiAqLworCitzdGF0aWMgc3RydWN0IHJjX21hcF90YWJsZSBlenR2W10gPSB7CisJeyAweDEyLCBLRVlfUE9XRVIgfSwKKwl7IDB4MDEsIEtFWV9UViB9LAkvKiBEVlIgKi8KKwl7IDB4MTUsIEtFWV9EVkQgfSwJLyogRFZEICovCisJeyAweDE3LCBLRVlfQVVESU8gfSwJLyogbXVzaWMgKi8KKwkJCQkvKiBEVlIgbW9kZSAvIERWRCBtb2RlIC8gbXVzaWMgbW9kZSAqLworCisJeyAweDFiLCBLRVlfTVVURSB9LAkvKiBtdXRlICovCisJeyAweDAyLCBLRVlfTEFOR1VBR0UgfSwJLyogTVRTL1NBUCAvIGF1ZGlvIC8gYXV0b3NlZWsgKi8KKwl7IDB4MWUsIEtFWV9TVUJUSVRMRSB9LAkvKiBjbG9zZWQgY2FwdGlvbmluZyAvIHN1YnRpdGxlIC8gc2VlayAqLworCXsgMHgxNiwgS0VZX1pPT00gfSwJLyogZnVsbCBzY3JlZW4gKi8KKwl7IDB4MWMsIEtFWV9WSURFTyB9LAkvKiB2aWRlbyBzb3VyY2UgLyBlamVjdCAvIGRlbGFsbCAqLworCXsgMHgxZCwgS0VZX1JFU1RBUlQgfSwJLyogcGxheWJhY2sgLyBhbmdsZSAvIGRlbCAqLworCXsgMHgyZiwgS0VZX1NFQVJDSCB9LAkvKiBzY2FuIC8gbWVudSAvIHBsYXlsaXN0ICovCisJeyAweDMwLCBLRVlfQ0hBTk5FTCB9LAkvKiBDSCBzdXJmaW5nIC8gYm9va21hcmsgLyBtZW1vICovCisKKwl7IDB4MzEsIEtFWV9IRUxQIH0sCS8qIGhlbHAgKi8KKwl7IDB4MzIsIEtFWV9NT0RFIH0sCS8qIG51bS9tZW1vICovCisJeyAweDMzLCBLRVlfRVNDIH0sCS8qIGNhbmNlbCAqLworCisJeyAweDBjLCBLRVlfVVAgfSwJLyogdXAgKi8KKwl7IDB4MTAsIEtFWV9ET1dOIH0sCS8qIGRvd24gKi8KKwl7IDB4MDgsIEtFWV9MRUZUIH0sCS8qIGxlZnQgKi8KKwl7IDB4MDQsIEtFWV9SSUdIVCB9LAkvKiByaWdodCAqLworCXsgMHgwMywgS0VZX1NFTEVDVCB9LAkvKiBzZWxlY3QgKi8KKworCXsgMHgxZiwgS0VZX1JFV0lORCB9LAkvKiByZXdpbmQgKi8KKwl7IDB4MjAsIEtFWV9QTEFZUEFVU0UgfSwvKiBwbGF5L3BhdXNlICovCisJeyAweDI5LCBLRVlfRk9SV0FSRCB9LAkvKiBmb3J3YXJkICovCisJeyAweDE0LCBLRVlfQUdBSU4gfSwJLyogcmVwZWF0ICovCisJeyAweDJiLCBLRVlfUkVDT1JEIH0sCS8qIHJlY29yZGluZyAqLworCXsgMHgyYywgS0VZX1NUT1AgfSwJLyogc3RvcCAqLworCXsgMHgyZCwgS0VZX1BMQVkgfSwJLyogcGxheSAqLworCXsgMHgyZSwgS0VZX0NBTUVSQSB9LAkvKiBzbmFwc2hvdCAvIHNodWZmbGUgKi8KKworCXsgMHgwMCwgS0VZXzAgfSwKKwl7IDB4MDUsIEtFWV8xIH0sCisJeyAweDA2LCBLRVlfMiB9LAorCXsgMHgwNywgS0VZXzMgfSwKKwl7IDB4MDksIEtFWV80IH0sCisJeyAweDBhLCBLRVlfNSB9LAorCXsgMHgwYiwgS0VZXzYgfSwKKwl7IDB4MGQsIEtFWV83IH0sCisJeyAweDBlLCBLRVlfOCB9LAorCXsgMHgwZiwgS0VZXzkgfSwKKworCXsgMHgyYSwgS0VZX1ZPTFVNRVVQIH0sCisJeyAweDExLCBLRVlfVk9MVU1FRE9XTiB9LAorCXsgMHgxOCwgS0VZX0NIQU5ORUxVUCB9LC8qIENILnRyYWNraW5nIHVwICovCisJeyAweDE5LCBLRVlfQ0hBTk5FTERPV04gfSwvKiBDSC50cmFja2luZyBkb3duICovCisKKwl7IDB4MTMsIEtFWV9FTlRFUiB9LAkvKiBlbnRlciAqLworCXsgMHgyMSwgS0VZX0RPVCB9LAkvKiAuIChkZWNpbWFsIGRvdCkgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgcmNfbWFwX2xpc3QgZXp0dl9tYXAgPSB7CisJLm1hcCA9IHsKKwkJLnNjYW4gICAgPSBlenR2LAorCQkuc2l6ZSAgICA9IEFSUkFZX1NJWkUoZXp0diksCisJCS5yY190eXBlID0gUkNfVFlQRV9VTktOT1dOLAkvKiBMZWdhY3kgSVIgdHlwZSAqLworCQkubmFtZSAgICA9IFJDX01BUF9FWlRWLAorCX0KK307CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfcmNfbWFwX2V6dHYodm9pZCkKK3sKKwlyZXR1cm4gcmNfbWFwX3JlZ2lzdGVyKCZlenR2X21hcCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3JjX21hcF9lenR2KHZvaWQpCit7CisJcmNfbWFwX3VucmVnaXN0ZXIoJmV6dHZfbWFwKTsKK30KKworbW9kdWxlX2luaXQoaW5pdF9yY19tYXBfZXp0dikKK21vZHVsZV9leGl0KGV4aXRfcmNfbWFwX2V6dHYpCisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIk1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLWZseWR2Yi5jIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLWZseWR2Yi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlYTJmNGEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtZmx5ZHZiLmMKQEAgLTAsMCArMSw3NyBAQAorLyogZmx5ZHZiLmggLSBLZXl0YWJsZSBmb3IgZmx5ZHZiIFJlbW90ZSBDb250cm9sbGVyCisgKgorICoga2V5bWFwIGltcG9ydGVkIGZyb20gaXIta2V5bWFwcy5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPG1lZGlhL3JjLW1hcC5oPgorCitzdGF0aWMgc3RydWN0IHJjX21hcF90YWJsZSBmbHlkdmJbXSA9IHsKKwl7IDB4MDEsIEtFWV9aT09NIH0sCQkvKiBGdWxsIFNjcmVlbiAqLworCXsgMHgwMCwgS0VZX1BPV0VSIH0sCQkvKiBQb3dlciAqLworCisJeyAweDAzLCBLRVlfMSB9LAorCXsgMHgwNCwgS0VZXzIgfSwKKwl7IDB4MDUsIEtFWV8zIH0sCisJeyAweDA3LCBLRVlfNCB9LAorCXsgMHgwOCwgS0VZXzUgfSwKKwl7IDB4MDksIEtFWV82IH0sCisJeyAweDBiLCBLRVlfNyB9LAorCXsgMHgwYywgS0VZXzggfSwKKwl7IDB4MGQsIEtFWV85IH0sCisJeyAweDA2LCBLRVlfQUdBSU4gfSwJCS8qIFJlY2FsbCAqLworCXsgMHgwZiwgS0VZXzAgfSwKKwl7IDB4MTAsIEtFWV9NVVRFIH0sCQkvKiBNdXRlICovCisJeyAweDAyLCBLRVlfUkFESU8gfSwJCS8qIFRWL1JhZGlvICovCisJeyAweDFiLCBLRVlfTEFOR1VBR0UgfSwJCS8qIFNBUCAoU2Vjb25kIEF1ZGlvIFByb2dyYW0pICovCisKKwl7IDB4MTQsIEtFWV9WT0xVTUVVUCB9LAkJLyogVk9MKyAqLworCXsgMHgxNywgS0VZX1ZPTFVNRURPV04gfSwJLyogVk9MLSAqLworCXsgMHgxMiwgS0VZX0NIQU5ORUxVUCB9LAkvKiBDSCsgKi8KKwl7IDB4MTMsIEtFWV9DSEFOTkVMRE9XTiB9LAkvKiBDSC0gKi8KKwl7IDB4MWQsIEtFWV9FTlRFUiB9LAkJLyogRW50ZXIgKi8KKworCXsgMHgxYSwgS0VZX01PREUgfSwJCS8qIFBJUCAqLworCXsgMHgxOCwgS0VZX1RVTkVSIH0sCQkvKiBTb3VyY2UgKi8KKworCXsgMHgxZSwgS0VZX1JFQ09SRCB9LAkJLyogUmVjb3JkL1BhdXNlICovCisJeyAweDE1LCBLRVlfQU5HTEUgfSwJCS8qIFN3YXAgKG5vIGxhYmVsIG9uIGtleSkgKi8KKwl7IDB4MWMsIEtFWV9QQVVTRSB9LAkJLyogVGltZXNoaWZ0L1BhdXNlICovCisJeyAweDE5LCBLRVlfQkFDSyB9LAkJLyogUmV3aW5kIDw8ICovCisJeyAweDBhLCBLRVlfUExBWVBBVVNFIH0sCS8qIFBsYXkvUGF1c2UgKi8KKwl7IDB4MWYsIEtFWV9GT1JXQVJEIH0sCQkvKiBGb3J3YXJkID4+ICovCisJeyAweDE2LCBLRVlfUFJFVklPVVMgfSwJCS8qIEJhY2sgfDw8ICovCisJeyAweDExLCBLRVlfU1RPUCB9LAkJLyogU3RvcCAqLworCXsgMHgwZSwgS0VZX05FWFQgfSwJCS8qIEVuZCA+PnwgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgcmNfbWFwX2xpc3QgZmx5ZHZiX21hcCA9IHsKKwkubWFwID0geworCQkuc2NhbiAgICA9IGZseWR2YiwKKwkJLnNpemUgICAgPSBBUlJBWV9TSVpFKGZseWR2YiksCisJCS5yY190eXBlID0gUkNfVFlQRV9VTktOT1dOLAkvKiBMZWdhY3kgSVIgdHlwZSAqLworCQkubmFtZSAgICA9IFJDX01BUF9GTFlEVkIsCisJfQorfTsKKworc3RhdGljIGludCBfX2luaXQgaW5pdF9yY19tYXBfZmx5ZHZiKHZvaWQpCit7CisJcmV0dXJuIHJjX21hcF9yZWdpc3RlcigmZmx5ZHZiX21hcCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3JjX21hcF9mbHlkdmIodm9pZCkKK3sKKwlyY19tYXBfdW5yZWdpc3RlcigmZmx5ZHZiX21hcCk7Cit9CisKK21vZHVsZV9pbml0KGluaXRfcmNfbWFwX2ZseWR2YikKK21vZHVsZV9leGl0KGV4aXRfcmNfbWFwX2ZseWR2YikKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtZmx5dmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1mbHl2aWRlby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViYmU2ODMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtZmx5dmlkZW8uYwpAQCAtMCwwICsxLDcwIEBACisvKiBmbHl2aWRlby5oIC0gS2V5dGFibGUgZm9yIGZseXZpZGVvIFJlbW90ZSBDb250cm9sbGVyCisgKgorICoga2V5bWFwIGltcG9ydGVkIGZyb20gaXIta2V5bWFwcy5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPG1lZGlhL3JjLW1hcC5oPgorCitzdGF0aWMgc3RydWN0IHJjX21hcF90YWJsZSBmbHl2aWRlb1tdID0geworCXsgMHgwZiwgS0VZXzAgfSwKKwl7IDB4MDMsIEtFWV8xIH0sCisJeyAweDA0LCBLRVlfMiB9LAorCXsgMHgwNSwgS0VZXzMgfSwKKwl7IDB4MDcsIEtFWV80IH0sCisJeyAweDA4LCBLRVlfNSB9LAorCXsgMHgwOSwgS0VZXzYgfSwKKwl7IDB4MGIsIEtFWV83IH0sCisJeyAweDBjLCBLRVlfOCB9LAorCXsgMHgwZCwgS0VZXzkgfSwKKworCXsgMHgwZSwgS0VZX01PREUgfSwJLyogQWlyL0NhYmxlICovCisJeyAweDExLCBLRVlfVklERU8gfSwJLyogVmlkZW8gKi8KKwl7IDB4MTUsIEtFWV9BVURJTyB9LAkvKiBBdWRpbyAqLworCXsgMHgwMCwgS0VZX1BPV0VSIH0sCS8qIFBvd2VyICovCisJeyAweDE4LCBLRVlfVFVORVIgfSwJLyogQVYgU291cmNlICovCisJeyAweDAyLCBLRVlfWk9PTSB9LAkvKiBGdWxsc2NyZWVuICovCisJeyAweDFhLCBLRVlfTEFOR1VBR0UgfSwJLyogU3RlcmVvICovCisJeyAweDFiLCBLRVlfTVVURSB9LAkvKiBNdXRlICovCisJeyAweDE0LCBLRVlfVk9MVU1FVVAgfSwJLyogVm9sdW1lICsgKi8KKwl7IDB4MTcsIEtFWV9WT0xVTUVET1dOIH0sLyogVm9sdW1lIC0gKi8KKwl7IDB4MTIsIEtFWV9DSEFOTkVMVVAgfSwvKiBDaGFubmVsICsgKi8KKwl7IDB4MTMsIEtFWV9DSEFOTkVMRE9XTiB9LC8qIENoYW5uZWwgLSAqLworCXsgMHgwNiwgS0VZX0FHQUlOIH0sCS8qIFJlY2FsbCAqLworCXsgMHgxMCwgS0VZX0VOVEVSIH0sCS8qIEVudGVyICovCisKKwl7IDB4MTksIEtFWV9CQUNLIH0sCS8qIFJld2luZCAgKCA8PDwgKSAqLworCXsgMHgxZiwgS0VZX0ZPUldBUkQgfSwJLyogRm9yd2FyZCAoID4+PiApICovCisJeyAweDBhLCBLRVlfQU5HTEUgfSwJLyogbm8gbGFiZWwsIG1heSBiZSB1c2VkIGFzIHRoZSBQQVVTRSBidXR0b24gKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgcmNfbWFwX2xpc3QgZmx5dmlkZW9fbWFwID0geworCS5tYXAgPSB7CisJCS5zY2FuICAgID0gZmx5dmlkZW8sCisJCS5zaXplICAgID0gQVJSQVlfU0laRShmbHl2aWRlbyksCisJCS5yY190eXBlID0gUkNfVFlQRV9VTktOT1dOLAkvKiBMZWdhY3kgSVIgdHlwZSAqLworCQkubmFtZSAgICA9IFJDX01BUF9GTFlWSURFTywKKwl9Cit9OworCitzdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcF9mbHl2aWRlbyh2b2lkKQoreworCXJldHVybiByY19tYXBfcmVnaXN0ZXIoJmZseXZpZGVvX21hcCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3JjX21hcF9mbHl2aWRlbyh2b2lkKQoreworCXJjX21hcF91bnJlZ2lzdGVyKCZmbHl2aWRlb19tYXApOworfQorCittb2R1bGVfaW5pdChpbml0X3JjX21hcF9mbHl2aWRlbykKK21vZHVsZV9leGl0KGV4aXRfcmNfbWFwX2ZseXZpZGVvKQorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1mdXNpb25oZHR2LW1jZS5jIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLWZ1c2lvbmhkdHYtbWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzgwYjI1YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1mdXNpb25oZHR2LW1jZS5jCkBAIC0wLDAgKzEsOTggQEAKKy8qIGZ1c2lvbmhkdHYtbWNlLmggLSBLZXl0YWJsZSBmb3IgZnVzaW9uaGR0dl9tY2UgUmVtb3RlIENvbnRyb2xsZXIKKyAqCisgKiBrZXltYXAgaW1wb3J0ZWQgZnJvbSBpci1rZXltYXBzLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgYnkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bWVkaWEvcmMtbWFwLmg+CisKKy8qIERWaUNPIEZVU0lPTiBIRFRWIE1DRSByZW1vdGUgKi8KKworc3RhdGljIHN0cnVjdCByY19tYXBfdGFibGUgZnVzaW9uaGR0dl9tY2VbXSA9IHsKKworCXsgMHgwYiwgS0VZXzEgfSwKKwl7IDB4MTcsIEtFWV8yIH0sCisJeyAweDFiLCBLRVlfMyB9LAorCXsgMHgwNywgS0VZXzQgfSwKKwl7IDB4NTAsIEtFWV81IH0sCisJeyAweDU0LCBLRVlfNiB9LAorCXsgMHg0OCwgS0VZXzcgfSwKKwl7IDB4NGMsIEtFWV84IH0sCisJeyAweDU4LCBLRVlfOSB9LAorCXsgMHgwMywgS0VZXzAgfSwKKworCXsgMHg1ZSwgS0VZX09LIH0sCisJeyAweDUxLCBLRVlfVVAgfSwKKwl7IDB4NTMsIEtFWV9ET1dOIH0sCisJeyAweDViLCBLRVlfTEVGVCB9LAorCXsgMHg1ZiwgS0VZX1JJR0hUIH0sCisKKwl7IDB4MDIsIEtFWV9UViB9LAkJLyogTGFiZWxlZCBEVFYgb24gcmVtb3RlICovCisJeyAweDBlLCBLRVlfTVAzIH0sCisJeyAweDFhLCBLRVlfRFZEIH0sCisJeyAweDFlLCBLRVlfRkFWT1JJVEVTIH0sCS8qIExhYmVsZWQgQ1BGIG9uIHJlbW90ZSAqLworCXsgMHgxNiwgS0VZX1NFVFVQIH0sCisJeyAweDQ2LCBLRVlfUE9XRVIyIH0sCQkvKiBUViBPbi9PZmYgYnV0dG9uIG9uIHJlbW90ZSAqLworCXsgMHgwYSwgS0VZX0VQRyB9LAkJLyogTGFiZWxlZCBHdWlkZSBvbiByZW1vdGUgKi8KKworCXsgMHg0OSwgS0VZX0JBQ0sgfSwKKwl7IDB4NTksIEtFWV9JTkZPIH0sCQkvKiBMYWJlbGVkIE1PUkUgb24gcmVtb3RlICovCisJeyAweDRkLCBLRVlfTUVOVSB9LAkJLyogTGFiZWxlZCBEVkRNRU5VIG9uIHJlbW90ZSAqLworCXsgMHg1NSwgS0VZX0NZQ0xFV0lORE9XUyB9LAkvKiBMYWJlbGVkIEFMVC1UQUIgb24gcmVtb3RlICovCisKKwl7IDB4MGYsIEtFWV9QUkVWSU9VU1NPTkcgfSwJLyogTGFiZWxlZCB8PDwgUkVQTEFZIG9uIHJlbW90ZSAqLworCXsgMHgxMiwgS0VZX05FWFRTT05HIH0sCQkvKiBMYWJlbGVkID4+fCBTS0lQIG9uIHJlbW90ZSAqLworCXsgMHg0MiwgS0VZX0VOVEVSIH0sCQkvKiBMYWJlbGVkIFNUQVJUIHdpdGggYSBncmVlbgorCQkJCQkgICBNUyB3aW5kb3dzIGxvZ28gb24gcmVtb3RlICovCisKKwl7IDB4MTUsIEtFWV9WT0xVTUVVUCB9LAorCXsgMHgwNSwgS0VZX1ZPTFVNRURPV04gfSwKKwl7IDB4MTEsIEtFWV9DSEFOTkVMVVAgfSwKKwl7IDB4MDksIEtFWV9DSEFOTkVMRE9XTiB9LAorCisJeyAweDUyLCBLRVlfQ0FNRVJBIH0sCisJeyAweDVhLCBLRVlfVFVORVIgfSwKKwl7IDB4MTksIEtFWV9PUEVOIH0sCisKKwl7IDB4MTMsIEtFWV9NT0RFIH0sCQkvKiA0OjMgMTY6OSBzZWxlY3QgKi8KKwl7IDB4MWYsIEtFWV9aT09NIH0sCisKKwl7IDB4NDMsIEtFWV9SRVdJTkQgfSwKKwl7IDB4NDcsIEtFWV9QTEFZUEFVU0UgfSwKKwl7IDB4NGYsIEtFWV9GQVNURk9SV0FSRCB9LAorCXsgMHg1NywgS0VZX01VVEUgfSwKKwl7IDB4MGQsIEtFWV9TVE9QIH0sCisJeyAweDAxLCBLRVlfUkVDT1JEIH0sCisJeyAweDRlLCBLRVlfUE9XRVIgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmNfbWFwX2xpc3QgZnVzaW9uaGR0dl9tY2VfbWFwID0geworCS5tYXAgPSB7CisJCS5zY2FuICAgID0gZnVzaW9uaGR0dl9tY2UsCisJCS5zaXplICAgID0gQVJSQVlfU0laRShmdXNpb25oZHR2X21jZSksCisJCS5yY190eXBlID0gUkNfVFlQRV9VTktOT1dOLAkvKiBMZWdhY3kgSVIgdHlwZSAqLworCQkubmFtZSAgICA9IFJDX01BUF9GVVNJT05IRFRWX01DRSwKKwl9Cit9OworCitzdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcF9mdXNpb25oZHR2X21jZSh2b2lkKQoreworCXJldHVybiByY19tYXBfcmVnaXN0ZXIoJmZ1c2lvbmhkdHZfbWNlX21hcCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3JjX21hcF9mdXNpb25oZHR2X21jZSh2b2lkKQoreworCXJjX21hcF91bnJlZ2lzdGVyKCZmdXNpb25oZHR2X21jZV9tYXApOworfQorCittb2R1bGVfaW5pdChpbml0X3JjX21hcF9mdXNpb25oZHR2X21jZSkKK21vZHVsZV9leGl0KGV4aXRfcmNfbWFwX2Z1c2lvbmhkdHZfbWNlKQorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1nYWRtZWktcm0wMDh6LmMgYi9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtZ2FkbWVpLXJtMDA4ei5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2OGM5ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtZ2FkbWVpLXJtMDA4ei5jCkBAIC0wLDAgKzEsODEgQEAKKy8qIGdhZG1laS1ybTAwOHouaCAtIEtleXRhYmxlIGZvciBnYWRtZWlfcm0wMDh6IFJlbW90ZSBDb250cm9sbGVyCisgKgorICoga2V5bWFwIGltcG9ydGVkIGZyb20gaXIta2V5bWFwcy5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPG1lZGlhL3JjLW1hcC5oPgorCisvKiBHQURNRUkgVVRWMzMwKyBSTTAwOFogcmVtb3RlCisgICBTaGluZSBMaXUgPHNoaW5lbEBmb3htYWlsLmNvbT4KKyAqLworCitzdGF0aWMgc3RydWN0IHJjX21hcF90YWJsZSBnYWRtZWlfcm0wMDh6W10gPSB7CisJeyAweDE0LCBLRVlfUE9XRVIyfSwJCS8qIFBPV0VSIE9GRiAqLworCXsgMHgwYywgS0VZX01VVEV9LAkJLyogTVVURSAqLworCisJeyAweDE4LCBLRVlfVFZ9LAkJLyogVFYgKi8KKwl7IDB4MGUsIEtFWV9WSURFT30sCQkvKiBBViAqLworCXsgMHgwYiwgS0VZX0FVRElPfSwJCS8qIFNWICovCisJeyAweDBmLCBLRVlfUkFESU99LAkJLyogRk0gKi8KKworCXsgMHgwMCwgS0VZXzF9LAorCXsgMHgwMSwgS0VZXzJ9LAorCXsgMHgwMiwgS0VZXzN9LAorCXsgMHgwMywgS0VZXzR9LAorCXsgMHgwNCwgS0VZXzV9LAorCXsgMHgwNSwgS0VZXzZ9LAorCXsgMHgwNiwgS0VZXzd9LAorCXsgMHgwNywgS0VZXzh9LAorCXsgMHgwOCwgS0VZXzl9LAorCXsgMHgwOSwgS0VZXzB9LAorCXsgMHgwYSwgS0VZX0lORk99LAkJLyogT1NEICovCisJeyAweDFjLCBLRVlfQkFDS1NQQUNFfSwJCS8qIExBU1QgKi8KKworCXsgMHgwZCwgS0VZX1BMQVl9LAkJLyogUExBWSAqLworCXsgMHgxZSwgS0VZX0NBTUVSQX0sCQkvKiBTTkFQU0hPVCAqLworCXsgMHgxYSwgS0VZX1JFQ09SRH0sCQkvKiBSRUNPUkQgKi8KKwl7IDB4MTcsIEtFWV9TVE9QfSwJCS8qIFNUT1AgKi8KKworCXsgMHgxZiwgS0VZX1VQfSwJCS8qIFVQICovCisJeyAweDQ0LCBLRVlfRE9XTn0sCQkvKiBET1dOICovCisJeyAweDQ2LCBLRVlfVEFCfSwJCS8qIEJBQ0sgKi8KKwl7IDB4NGEsIEtFWV9aT09NfSwJCS8qIEZVTExTRUNSRUVOICovCisKKwl7IDB4MTAsIEtFWV9WT0xVTUVVUH0sCQkvKiBWT0xVTUVVUCAqLworCXsgMHgxMSwgS0VZX1ZPTFVNRURPV059LAkvKiBWT0xVTUVET1dOICovCisJeyAweDEyLCBLRVlfQ0hBTk5FTFVQfSwJCS8qIENIQU5ORUxVUCAqLworCXsgMHgxMywgS0VZX0NIQU5ORUxET1dOfSwJLyogQ0hBTk5FTERPV04gKi8KKwl7IDB4MTUsIEtFWV9FTlRFUn0sCQkvKiBPSyAqLworfTsKKworc3RhdGljIHN0cnVjdCByY19tYXBfbGlzdCBnYWRtZWlfcm0wMDh6X21hcCA9IHsKKwkubWFwID0geworCQkuc2NhbiAgICA9IGdhZG1laV9ybTAwOHosCisJCS5zaXplICAgID0gQVJSQVlfU0laRShnYWRtZWlfcm0wMDh6KSwKKwkJLnJjX3R5cGUgPSBSQ19UWVBFX1VOS05PV04sCS8qIExlZ2FjeSBJUiB0eXBlICovCisJCS5uYW1lICAgID0gUkNfTUFQX0dBRE1FSV9STTAwOFosCisJfQorfTsKKworc3RhdGljIGludCBfX2luaXQgaW5pdF9yY19tYXBfZ2FkbWVpX3JtMDA4eih2b2lkKQoreworCXJldHVybiByY19tYXBfcmVnaXN0ZXIoJmdhZG1laV9ybTAwOHpfbWFwKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGV4aXRfcmNfbWFwX2dhZG1laV9ybTAwOHoodm9pZCkKK3sKKwlyY19tYXBfdW5yZWdpc3RlcigmZ2FkbWVpX3JtMDA4el9tYXApOworfQorCittb2R1bGVfaW5pdChpbml0X3JjX21hcF9nYWRtZWlfcm0wMDh6KQorbW9kdWxlX2V4aXQoZXhpdF9yY19tYXBfZ2FkbWVpX3JtMDA4eikKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtZ2VuaXVzLXR2Z28tYTExbWNlLmMgYi9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtZ2VuaXVzLXR2Z28tYTExbWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RiYmVkNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1nZW5pdXMtdHZnby1hMTFtY2UuYwpAQCAtMCwwICsxLDg0IEBACisvKiBnZW5pdXMtdHZnby1hMTFtY2UuaCAtIEtleXRhYmxlIGZvciBnZW5pdXNfdHZnb19hMTFtY2UgUmVtb3RlIENvbnRyb2xsZXIKKyAqCisgKiBrZXltYXAgaW1wb3J0ZWQgZnJvbSBpci1rZXltYXBzLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgYnkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bWVkaWEvcmMtbWFwLmg+CisKKy8qCisgKiBSZW1vdGUgY29udHJvbCBmb3IgdGhlIEdlbml1cyBUVkdPIEExMU1DRQorICogQWRyaWFuIFBhcmRpbmkgPHBhcmRvLmJzc29AZ21haWwuY29tPgorICovCisKK3N0YXRpYyBzdHJ1Y3QgcmNfbWFwX3RhYmxlIGdlbml1c190dmdvX2ExMW1jZVtdID0geworCS8qIEtleXMgMCB0byA5ICovCisJeyAweDQ4LCBLRVlfMCB9LAorCXsgMHgwOSwgS0VZXzEgfSwKKwl7IDB4MWQsIEtFWV8yIH0sCisJeyAweDFmLCBLRVlfMyB9LAorCXsgMHgxOSwgS0VZXzQgfSwKKwl7IDB4MWIsIEtFWV81IH0sCisJeyAweDExLCBLRVlfNiB9LAorCXsgMHgxNywgS0VZXzcgfSwKKwl7IDB4MTIsIEtFWV84IH0sCisJeyAweDE2LCBLRVlfOSB9LAorCisJeyAweDU0LCBLRVlfUkVDT1JEIH0sCQkvKiByZWNvcmRpbmcgKi8KKwl7IDB4MDYsIEtFWV9NVVRFIH0sCQkvKiBtdXRlICovCisJeyAweDEwLCBLRVlfUE9XRVIgfSwKKwl7IDB4NDAsIEtFWV9MQVNUIH0sCQkvKiByZWNhbGwgKi8KKwl7IDB4NGMsIEtFWV9DSEFOTkVMVVAgfSwJLyogY2hhbm5lbCAvIHByb2dyYW0gKyAqLworCXsgMHgwMCwgS0VZX0NIQU5ORUxET1dOIH0sCS8qIGNoYW5uZWwgLyBwcm9ncmFtIC0gKi8KKwl7IDB4MGQsIEtFWV9WT0xVTUVVUCB9LAorCXsgMHgxNSwgS0VZX1ZPTFVNRURPV04gfSwKKwl7IDB4NGQsIEtFWV9PSyB9LAkJLyogYWxzbyBsYWJlbGVkIGFzIFBhdXNlICovCisJeyAweDFjLCBLRVlfWk9PTSB9LAkJLyogZnVsbCBzY3JlZW4gYW5kIFN0b3AqLworCXsgMHgwMiwgS0VZX01PREUgfSwJCS8qIEFWIFNvdXJjZSBvciBSZXdpbmQqLworCXsgMHgwNCwgS0VZX0xJU1QgfSwJCS8qIC0vLS0gKi8KKwkvKiBzbWFsbCBhcnJvd3MgYWJvdmUgbnVtYmVycyAqLworCXsgMHgxYSwgS0VZX05FWFQgfSwJCS8qIGFsc28gRmFzdCBGb3J3YXJkICovCisJeyAweDBlLCBLRVlfUFJFVklPVVMgfSwJCS8qIGFsc28gUmV3aW5kICovCisJLyogdGhlc2UgYXJlIGluIGEgcmF0aGVyIG5vbiBzdGFuZGFyZCBsYXlvdXQgYW5kIGhhdmUKKwlhbiBhbHRlcm5hdGUgbmFtZSB3cml0dGVuICovCisJeyAweDFlLCBLRVlfVVAgfSwJCS8qIFZpZGVvIFNldHRpbmcgKi8KKwl7IDB4MGEsIEtFWV9ET1dOIH0sCQkvKiBWaWRlbyBEZWZhdWx0ICovCisJeyAweDA1LCBLRVlfQ0FNRVJBIH0sCQkvKiBTbmFwc2hvdCAqLworCXsgMHgwYywgS0VZX1JJR0hUIH0sCQkvKiBIaWRlIFBhbmVsICovCisJLyogRm91ciBidXR0b25zIHdpdGhvdXQgbGFiZWwgKi8KKwl7IDB4NDksIEtFWV9SRUQgfSwKKwl7IDB4MGIsIEtFWV9HUkVFTiB9LAorCXsgMHgxMywgS0VZX1lFTExPVyB9LAorCXsgMHg1MCwgS0VZX0JMVUUgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmNfbWFwX2xpc3QgZ2VuaXVzX3R2Z29fYTExbWNlX21hcCA9IHsKKwkubWFwID0geworCQkuc2NhbiAgICA9IGdlbml1c190dmdvX2ExMW1jZSwKKwkJLnNpemUgICAgPSBBUlJBWV9TSVpFKGdlbml1c190dmdvX2ExMW1jZSksCisJCS5yY190eXBlID0gUkNfVFlQRV9VTktOT1dOLAkvKiBMZWdhY3kgSVIgdHlwZSAqLworCQkubmFtZSAgICA9IFJDX01BUF9HRU5JVVNfVFZHT19BMTFNQ0UsCisJfQorfTsKKworc3RhdGljIGludCBfX2luaXQgaW5pdF9yY19tYXBfZ2VuaXVzX3R2Z29fYTExbWNlKHZvaWQpCit7CisJcmV0dXJuIHJjX21hcF9yZWdpc3RlcigmZ2VuaXVzX3R2Z29fYTExbWNlX21hcCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3JjX21hcF9nZW5pdXNfdHZnb19hMTFtY2Uodm9pZCkKK3sKKwlyY19tYXBfdW5yZWdpc3RlcigmZ2VuaXVzX3R2Z29fYTExbWNlX21hcCk7Cit9CisKK21vZHVsZV9pbml0KGluaXRfcmNfbWFwX2dlbml1c190dmdvX2ExMW1jZSkKK21vZHVsZV9leGl0KGV4aXRfcmNfbWFwX2dlbml1c190dmdvX2ExMW1jZSkKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtZ290dmlldzcxMzUuYyBiL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1nb3R2aWV3NzEzNS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzOGJkZGUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtZ290dmlldzcxMzUuYwpAQCAtMCwwICsxLDc5IEBACisvKiBnb3R2aWV3NzEzNS5oIC0gS2V5dGFibGUgZm9yIGdvdHZpZXc3MTM1IFJlbW90ZSBDb250cm9sbGVyCisgKgorICoga2V5bWFwIGltcG9ydGVkIGZyb20gaXIta2V5bWFwcy5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPG1lZGlhL3JjLW1hcC5oPgorCisvKiBNaWtlIEJhaWtvdiA8bWlrZUBiYWlrb3YuY29tPiAqLworCitzdGF0aWMgc3RydWN0IHJjX21hcF90YWJsZSBnb3R2aWV3NzEzNVtdID0geworCisJeyAweDExLCBLRVlfUE9XRVIgfSwKKwl7IDB4MzUsIEtFWV9UViB9LAorCXsgMHgxYiwgS0VZXzAgfSwKKwl7IDB4MjksIEtFWV8xIH0sCisJeyAweDE5LCBLRVlfMiB9LAorCXsgMHgzOSwgS0VZXzMgfSwKKwl7IDB4MWYsIEtFWV80IH0sCisJeyAweDJjLCBLRVlfNSB9LAorCXsgMHgyMSwgS0VZXzYgfSwKKwl7IDB4MjQsIEtFWV83IH0sCisJeyAweDE4LCBLRVlfOCB9LAorCXsgMHgyYiwgS0VZXzkgfSwKKwl7IDB4M2IsIEtFWV9BR0FJTiB9LAkvKiBMT09QICovCisJeyAweDA2LCBLRVlfQVVESU8gfSwKKwl7IDB4MzEsIEtFWV9QUklOVCB9LAkvKiBQUkVWSUVXICovCisJeyAweDNlLCBLRVlfVklERU8gfSwKKwl7IDB4MTAsIEtFWV9DSEFOTkVMVVAgfSwKKwl7IDB4MjAsIEtFWV9DSEFOTkVMRE9XTiB9LAorCXsgMHgwYywgS0VZX1ZPTFVNRURPV04gfSwKKwl7IDB4MjgsIEtFWV9WT0xVTUVVUCB9LAorCXsgMHgwOCwgS0VZX01VVEUgfSwKKwl7IDB4MjYsIEtFWV9TRUFSQ0ggfSwJLyogU0NBTiAqLworCXsgMHgzZiwgS0VZX0NBTUVSQSB9LAkvKiBTTkFQU0hPVCAqLworCXsgMHgxMiwgS0VZX1JFQ09SRCB9LAorCXsgMHgzMiwgS0VZX1NUT1AgfSwKKwl7IDB4M2MsIEtFWV9QTEFZIH0sCisJeyAweDFkLCBLRVlfUkVXSU5EIH0sCisJeyAweDJkLCBLRVlfUEFVU0UgfSwKKwl7IDB4MGQsIEtFWV9GT1JXQVJEIH0sCisJeyAweDA1LCBLRVlfWk9PTSB9LAkvKkZVTEwqLworCisJeyAweDJhLCBLRVlfRjIxIH0sCS8qIExJVkUgVElNRVNISUZUICovCisJeyAweDBlLCBLRVlfRjIyIH0sCS8qIE1JTiBUSU1FU0hJRlQgKi8KKwl7IDB4MWUsIEtFWV9USU1FIH0sCS8qIFRJTUVTSElGVCAqLworCXsgMHgzOCwgS0VZX0YyNCB9LAkvKiBOT1JNQUwgVElNRVNISUZUICovCit9OworCitzdGF0aWMgc3RydWN0IHJjX21hcF9saXN0IGdvdHZpZXc3MTM1X21hcCA9IHsKKwkubWFwID0geworCQkuc2NhbiAgICA9IGdvdHZpZXc3MTM1LAorCQkuc2l6ZSAgICA9IEFSUkFZX1NJWkUoZ290dmlldzcxMzUpLAorCQkucmNfdHlwZSA9IFJDX1RZUEVfVU5LTk9XTiwJLyogTGVnYWN5IElSIHR5cGUgKi8KKwkJLm5hbWUgICAgPSBSQ19NQVBfR09UVklFVzcxMzUsCisJfQorfTsKKworc3RhdGljIGludCBfX2luaXQgaW5pdF9yY19tYXBfZ290dmlldzcxMzUodm9pZCkKK3sKKwlyZXR1cm4gcmNfbWFwX3JlZ2lzdGVyKCZnb3R2aWV3NzEzNV9tYXApOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yY19tYXBfZ290dmlldzcxMzUodm9pZCkKK3sKKwlyY19tYXBfdW5yZWdpc3RlcigmZ290dmlldzcxMzVfbWFwKTsKK30KKworbW9kdWxlX2luaXQoaW5pdF9yY19tYXBfZ290dmlldzcxMzUpCittb2R1bGVfZXhpdChleGl0X3JjX21hcF9nb3R2aWV3NzEzNSkKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtaGF1cHBhdWdlLW5ldy5jIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLWhhdXBwYXVnZS1uZXcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDExZGE0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLWhhdXBwYXVnZS1uZXcuYwpAQCAtMCwwICsxLDEwMCBAQAorLyogaGF1cHBhdWdlLW5ldy5oIC0gS2V5dGFibGUgZm9yIGhhdXBwYXVnZV9uZXcgUmVtb3RlIENvbnRyb2xsZXIKKyAqCisgKiBrZXltYXAgaW1wb3J0ZWQgZnJvbSBpci1rZXltYXBzLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgYnkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bWVkaWEvcmMtbWFwLmg+CisKKy8qIEhhdXBwYXVnZTogdGhlIG5ld2VyLCBncmF5IHJlbW90ZXMgKHNlZW1zIHRoZXJlIGFyZSBtdWx0aXBsZQorICogc2xpZ2h0bHkgZGlmZmVyZW50IHZlcnNpb25zKSwgc2hpcHBlZCB3aXRoIGN4ODgraXZ0diBjYXJkcy4KKyAqIGFsbW9zdCByYzUgY29kaW5nLCBidXQgc29tZSBub24tc3RhbmRhcmQga2V5cyAqLworCitzdGF0aWMgc3RydWN0IHJjX21hcF90YWJsZSBoYXVwcGF1Z2VfbmV3W10gPSB7CisJLyogS2V5cyAwIHRvIDkgKi8KKwl7IDB4MDAsIEtFWV8wIH0sCisJeyAweDAxLCBLRVlfMSB9LAorCXsgMHgwMiwgS0VZXzIgfSwKKwl7IDB4MDMsIEtFWV8zIH0sCisJeyAweDA0LCBLRVlfNCB9LAorCXsgMHgwNSwgS0VZXzUgfSwKKwl7IDB4MDYsIEtFWV82IH0sCisJeyAweDA3LCBLRVlfNyB9LAorCXsgMHgwOCwgS0VZXzggfSwKKwl7IDB4MDksIEtFWV85IH0sCisKKwl7IDB4MGEsIEtFWV9URVhUIH0sCQkvKiBrZXlwYWQgYXN0ZXJpc2sgYXMgd2VsbCAqLworCXsgMHgwYiwgS0VZX1JFRCB9LAkJLyogcmVkIGJ1dHRvbiAqLworCXsgMHgwYywgS0VZX1JBRElPIH0sCisJeyAweDBkLCBLRVlfTUVOVSB9LAorCXsgMHgwZSwgS0VZX1NVQlRJVExFIH0sCQkvKiBhbHNvIHRoZSAjIGtleSAqLworCXsgMHgwZiwgS0VZX01VVEUgfSwKKwl7IDB4MTAsIEtFWV9WT0xVTUVVUCB9LAorCXsgMHgxMSwgS0VZX1ZPTFVNRURPV04gfSwKKwl7IDB4MTIsIEtFWV9QUkVWSU9VUyB9LAkJLyogcHJldmlvdXMgY2hhbm5lbCAqLworCXsgMHgxNCwgS0VZX1VQIH0sCisJeyAweDE1LCBLRVlfRE9XTiB9LAorCXsgMHgxNiwgS0VZX0xFRlQgfSwKKwl7IDB4MTcsIEtFWV9SSUdIVCB9LAorCXsgMHgxOCwgS0VZX1ZJREVPIH0sCQkvKiBWaWRlb3MgKi8KKwl7IDB4MTksIEtFWV9BVURJTyB9LAkJLyogTXVzaWMgKi8KKwkvKiAweDFhOiBQaWN0dXJlcyAtIHByZXN1bWUgdGhpcyBtZWFucworCSAgICJNdWx0aW1lZGlhIEhvbWUgUGxhdGZvcm0iIC0KKwkgICBubyAiUElDVFVSRVMiIGtleSBpbiBpbnB1dC5oCisJICovCisJeyAweDFhLCBLRVlfTUhQIH0sCisKKwl7IDB4MWIsIEtFWV9FUEcgfSwJCS8qIEd1aWRlICovCisJeyAweDFjLCBLRVlfVFYgfSwKKwl7IDB4MWUsIEtFWV9ORVhUU09ORyB9LAkJLyogc2tpcCA+fCAqLworCXsgMHgxZiwgS0VZX0VYSVQgfSwJCS8qIGJhY2svZXhpdCAqLworCXsgMHgyMCwgS0VZX0NIQU5ORUxVUCB9LAkvKiBjaGFubmVsIC8gcHJvZ3JhbSArICovCisJeyAweDIxLCBLRVlfQ0hBTk5FTERPV04gfSwJLyogY2hhbm5lbCAvIHByb2dyYW0gLSAqLworCXsgMHgyMiwgS0VZX0NIQU5ORUwgfSwJCS8qIHNvdXJjZSAob2xkIGJsYWNrIHJlbW90ZSkgKi8KKwl7IDB4MjQsIEtFWV9QUkVWSU9VU1NPTkcgfSwJLyogcmVwbGF5IHw8ICovCisJeyAweDI1LCBLRVlfRU5URVIgfSwJCS8qIE9LICovCisJeyAweDI2LCBLRVlfU0xFRVAgfSwJCS8qIG1pbmltaXplIChvbGQgYmxhY2sgcmVtb3RlKSAqLworCXsgMHgyOSwgS0VZX0JMVUUgfSwJCS8qIGJsdWUga2V5ICovCisJeyAweDJlLCBLRVlfR1JFRU4gfSwJCS8qIGdyZWVuIGJ1dHRvbiAqLworCXsgMHgzMCwgS0VZX1BBVVNFIH0sCQkvKiBwYXVzZSAqLworCXsgMHgzMiwgS0VZX1JFV0lORCB9LAkJLyogYmFja3dhcmQgPDwgKi8KKwl7IDB4MzQsIEtFWV9GQVNURk9SV0FSRCB9LAkvKiBmb3J3YXJkID4+ICovCisJeyAweDM1LCBLRVlfUExBWSB9LAorCXsgMHgzNiwgS0VZX1NUT1AgfSwKKwl7IDB4MzcsIEtFWV9SRUNPUkQgfSwJCS8qIHJlY29yZGluZyAqLworCXsgMHgzOCwgS0VZX1lFTExPVyB9LAkJLyogeWVsbG93IGtleSAqLworCXsgMHgzYiwgS0VZX1NFTEVDVCB9LAkJLyogdG9wIHJpZ2h0IGJ1dHRvbiAqLworCXsgMHgzYywgS0VZX1pPT00gfSwJCS8qIGZ1bGwgKi8KKwl7IDB4M2QsIEtFWV9QT1dFUiB9LAkJLyogc3lzdGVtIHBvd2VyIChncmVlbiBidXR0b24pICovCit9OworCitzdGF0aWMgc3RydWN0IHJjX21hcF9saXN0IGhhdXBwYXVnZV9uZXdfbWFwID0geworCS5tYXAgPSB7CisJCS5zY2FuICAgID0gaGF1cHBhdWdlX25ldywKKwkJLnNpemUgICAgPSBBUlJBWV9TSVpFKGhhdXBwYXVnZV9uZXcpLAorCQkucmNfdHlwZSA9IFJDX1RZUEVfVU5LTk9XTiwJLyogTGVnYWN5IElSIHR5cGUgKi8KKwkJLm5hbWUgICAgPSBSQ19NQVBfSEFVUFBBVUdFX05FVywKKwl9Cit9OworCitzdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcF9oYXVwcGF1Z2VfbmV3KHZvaWQpCit7CisJcmV0dXJuIHJjX21hcF9yZWdpc3RlcigmaGF1cHBhdWdlX25ld19tYXApOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yY19tYXBfaGF1cHBhdWdlX25ldyh2b2lkKQoreworCXJjX21hcF91bnJlZ2lzdGVyKCZoYXVwcGF1Z2VfbmV3X21hcCk7Cit9CisKK21vZHVsZV9pbml0KGluaXRfcmNfbWFwX2hhdXBwYXVnZV9uZXcpCittb2R1bGVfZXhpdChleGl0X3JjX21hcF9oYXVwcGF1Z2VfbmV3KQorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1pbW9uLW1jZS5jIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLWltb24tbWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I2NzE4NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1pbW9uLW1jZS5jCkBAIC0wLDAgKzEsMTQyIEBACisvKiByYzUtaW1vbi1tY2UuYyAtIEtleXRhYmxlIGZvciBXaW5kb3dzIE1lZGlhIENlbnRlciBSQy02IHJlbW90ZXMgZm9yIHVzZQorICogd2l0aCB0aGUgU291bmRHcmFwaCBpTU9OL0FudGVjIFZlcmlzIGhhcmR3YXJlIElSIGRlY29kZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgYnkgSmFyb2QgV2lsc29uIDxqYXJvZEByZWRoYXQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPG1lZGlhL3JjLW1hcC5oPgorCisvKiBtY2UtbW9kZSBpbW9uIG1jZSByZW1vdGUga2V5IHRhYmxlICovCitzdGF0aWMgc3RydWN0IHJjX21hcF90YWJsZSBpbW9uX21jZVtdID0geworCS8qIGtleXMgc29ydGVkIG1vc3RseSBieSBmcmVxdWVuY3kgb2YgdXNlIHRvIG9wdGltaXplIGxvb2t1cHMgKi8KKwl7IDB4ODAwZmY0MTUsIEtFWV9SRVdJTkQgfSwKKwl7IDB4ODAwZmY0MTQsIEtFWV9GQVNURk9SV0FSRCB9LAorCXsgMHg4MDBmZjQxYiwgS0VZX1BSRVZJT1VTIH0sCisJeyAweDgwMGZmNDFhLCBLRVlfTkVYVCB9LAorCisJeyAweDgwMGZmNDE2LCBLRVlfUExBWSB9LAorCXsgMHg4MDBmZjQxOCwgS0VZX1BBVVNFIH0sCisJeyAweDgwMGZmNDE5LCBLRVlfU1RPUCB9LAorCXsgMHg4MDBmZjQxNywgS0VZX1JFQ09SRCB9LAorCisJeyAweDAyMDAwMDUyLCBLRVlfVVAgfSwKKwl7IDB4MDIwMDAwNTEsIEtFWV9ET1dOIH0sCisJeyAweDAyMDAwMDUwLCBLRVlfTEVGVCB9LAorCXsgMHgwMjAwMDA0ZiwgS0VZX1JJR0hUIH0sCisKKwl7IDB4ODAwZmY0MWUsIEtFWV9VUCB9LAorCXsgMHg4MDBmZjQxZiwgS0VZX0RPV04gfSwKKwl7IDB4ODAwZmY0MjAsIEtFWV9MRUZUIH0sCisJeyAweDgwMGZmNDIxLCBLRVlfUklHSFQgfSwKKworCS8qIDB4ODAwZmY0MGIgYWxzbyBLRVlfTlVNRVJJQ19QT1VORCBvbiBzb21lIHJlY2VpdmVycyAqLworCXsgMHg4MDBmZjQwYiwgS0VZX0VOVEVSIH0sCisJeyAweDAyMDAwMDI4LCBLRVlfRU5URVIgfSwKKy8qIHRoZSBPSyBhbmQgRW50ZXIgYnV0dG9ucyBkZWNvZGUgdG8gdGhlIHNhbWUgdmFsdWUgb24gc29tZSByZW1vdGVzCisJeyAweDAyMDAwMDI4LCBLRVlfT0sgfSwgKi8KKwl7IDB4ODAwZmY0MjIsIEtFWV9PSyB9LAorCXsgMHgwMjAwMDAyYSwgS0VZX0VYSVQgfSwKKwl7IDB4ODAwZmY0MjMsIEtFWV9FWElUIH0sCisJeyAweDAyMDAwMDI5LCBLRVlfREVMRVRFIH0sCisJLyogMHg4MDBmZjQwYSBhbHNvIEtFWV9OVU1FUklDX1NUQVIgb24gc29tZSByZWNlaXZlcnMgKi8KKwl7IDB4ODAwZmY0MGEsIEtFWV9ERUxFVEUgfSwKKworCXsgMHg4MDBmZjQwZSwgS0VZX01VVEUgfSwKKwl7IDB4ODAwZmY0MTAsIEtFWV9WT0xVTUVVUCB9LAorCXsgMHg4MDBmZjQxMSwgS0VZX1ZPTFVNRURPV04gfSwKKwl7IDB4ODAwZmY0MTIsIEtFWV9DSEFOTkVMVVAgfSwKKwl7IDB4ODAwZmY0MTMsIEtFWV9DSEFOTkVMRE9XTiB9LAorCisJeyAweDAyMDAwMDFlLCBLRVlfTlVNRVJJQ18xIH0sCisJeyAweDAyMDAwMDFmLCBLRVlfTlVNRVJJQ18yIH0sCisJeyAweDAyMDAwMDIwLCBLRVlfTlVNRVJJQ18zIH0sCisJeyAweDAyMDAwMDIxLCBLRVlfTlVNRVJJQ180IH0sCisJeyAweDAyMDAwMDIyLCBLRVlfTlVNRVJJQ181IH0sCisJeyAweDAyMDAwMDIzLCBLRVlfTlVNRVJJQ182IH0sCisJeyAweDAyMDAwMDI0LCBLRVlfTlVNRVJJQ183IH0sCisJeyAweDAyMDAwMDI1LCBLRVlfTlVNRVJJQ184IH0sCisJeyAweDAyMDAwMDI2LCBLRVlfTlVNRVJJQ185IH0sCisJeyAweDAyMDAwMDI3LCBLRVlfTlVNRVJJQ18wIH0sCisKKwl7IDB4ODAwZmY0MDEsIEtFWV9OVU1FUklDXzEgfSwKKwl7IDB4ODAwZmY0MDIsIEtFWV9OVU1FUklDXzIgfSwKKwl7IDB4ODAwZmY0MDMsIEtFWV9OVU1FUklDXzMgfSwKKwl7IDB4ODAwZmY0MDQsIEtFWV9OVU1FUklDXzQgfSwKKwl7IDB4ODAwZmY0MDUsIEtFWV9OVU1FUklDXzUgfSwKKwl7IDB4ODAwZmY0MDYsIEtFWV9OVU1FUklDXzYgfSwKKwl7IDB4ODAwZmY0MDcsIEtFWV9OVU1FUklDXzcgfSwKKwl7IDB4ODAwZmY0MDgsIEtFWV9OVU1FUklDXzggfSwKKwl7IDB4ODAwZmY0MDksIEtFWV9OVU1FUklDXzkgfSwKKwl7IDB4ODAwZmY0MDAsIEtFWV9OVU1FUklDXzAgfSwKKworCXsgMHgwMjIwMDAyNSwgS0VZX05VTUVSSUNfU1RBUiB9LAorCXsgMHgwMjIwMDAyMCwgS0VZX05VTUVSSUNfUE9VTkQgfSwKKwkvKiAweDgwMGZmNDFkIGFsc28gS0VZX0JMVUUgb24gc29tZSByZWNlaXZlcnMgKi8KKwl7IDB4ODAwZmY0MWQsIEtFWV9OVU1FUklDX1NUQVIgfSwKKwkvKiAweDgwMGZmNDFjIGFsc28gS0VZX1BSRVZJT1VTIG9uIHNvbWUgcmVjZWl2ZXJzICovCisJeyAweDgwMGZmNDFjLCBLRVlfTlVNRVJJQ19QT1VORCB9LAorCisJeyAweDgwMGZmNDQ2LCBLRVlfVFYgfSwKKwl7IDB4ODAwZmY0NDcsIEtFWV9BVURJTyB9LCAvKiBNeSBNdXNpYyAqLworCXsgMHg4MDBmZjQ0OCwgS0VZX1BWUiB9LCAvKiBSZWNvcmRlZFRWICovCisJeyAweDgwMGZmNDQ5LCBLRVlfQ0FNRVJBIH0sCisJeyAweDgwMGZmNDRhLCBLRVlfVklERU8gfSwKKwkvKiAweDgwMGZmNDI0IGFsc28gS0VZX01FTlUgb24gc29tZSByZWNlaXZlcnMgKi8KKwl7IDB4ODAwZmY0MjQsIEtFWV9EVkQgfSwKKwkvKiAweDgwMGZmNDI1IGFsc28gS0VZX0dSRUVOIG9uIHNvbWUgcmVjZWl2ZXJzICovCisJeyAweDgwMGZmNDI1LCBLRVlfVFVORVIgfSwgLyogTGl2ZVRWICovCisJeyAweDgwMGZmNDUwLCBLRVlfUkFESU8gfSwKKworCXsgMHg4MDBmZjQ0YywgS0VZX0xBTkdVQUdFIH0sCisJeyAweDgwMGZmNDI3LCBLRVlfWk9PTSB9LCAvKiBBc3BlY3QgKi8KKworCXsgMHg4MDBmZjQ1YiwgS0VZX1JFRCB9LAorCXsgMHg4MDBmZjQ1YywgS0VZX0dSRUVOIH0sCisJeyAweDgwMGZmNDVkLCBLRVlfWUVMTE9XIH0sCisJeyAweDgwMGZmNDVlLCBLRVlfQkxVRSB9LAorCisJeyAweDgwMGZmNDY2LCBLRVlfUkVEIH0sCisJLyogeyAweDgwMGZmNDI1LCBLRVlfR1JFRU4gfSwgKi8KKwl7IDB4ODAwZmY0NjgsIEtFWV9ZRUxMT1cgfSwKKwkvKiB7IDB4ODAwZmY0MWQsIEtFWV9CTFVFIH0sICovCisKKwl7IDB4ODAwZmY0MGYsIEtFWV9JTkZPIH0sCisJeyAweDgwMGZmNDI2LCBLRVlfRVBHIH0sIC8qIEd1aWRlICovCisJeyAweDgwMGZmNDVhLCBLRVlfU1VCVElUTEUgfSwgLyogQ2FwdGlvbi9UZWxldGV4dCAqLworCXsgMHg4MDBmZjQ0ZCwgS0VZX1RJVExFIH0sCisKKwl7IDB4ODAwZmY0MGMsIEtFWV9QT1dFUiB9LAorCXsgMHg4MDBmZjQwZCwgS0VZX1BST0cxIH0sIC8qIFdpbmRvd3MgTUNFIGJ1dHRvbiAqLworCit9OworCitzdGF0aWMgc3RydWN0IHJjX21hcF9saXN0IGltb25fbWNlX21hcCA9IHsKKwkubWFwID0geworCQkuc2NhbiAgICA9IGltb25fbWNlLAorCQkuc2l6ZSAgICA9IEFSUkFZX1NJWkUoaW1vbl9tY2UpLAorCQkvKiBpdHMgUkM2LCBidXQgdy9hIGhhcmR3YXJlIGRlY29kZXIgKi8KKwkJLnJjX3R5cGUgPSBSQ19UWVBFX1JDNiwKKwkJLm5hbWUgICAgPSBSQ19NQVBfSU1PTl9NQ0UsCisJfQorfTsKKworc3RhdGljIGludCBfX2luaXQgaW5pdF9yY19tYXBfaW1vbl9tY2Uodm9pZCkKK3sKKwlyZXR1cm4gcmNfbWFwX3JlZ2lzdGVyKCZpbW9uX21jZV9tYXApOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yY19tYXBfaW1vbl9tY2Uodm9pZCkKK3sKKwlyY19tYXBfdW5yZWdpc3RlcigmaW1vbl9tY2VfbWFwKTsKK30KKworbW9kdWxlX2luaXQoaW5pdF9yY19tYXBfaW1vbl9tY2UpCittb2R1bGVfZXhpdChleGl0X3JjX21hcF9pbW9uX21jZSkKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiSmFyb2QgV2lsc29uIDxqYXJvZEByZWRoYXQuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLWltb24tcGFkLmMgYi9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtaW1vbi1wYWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWY0NmI3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLWltb24tcGFkLmMKQEAgLTAsMCArMSwxNTYgQEAKKy8qIHJjNS1pbW9uLXBhZC5jIC0gS2V5dGFibGUgZm9yIFNvdW5kR3JhcGggaU1PTiBQQUQgYW5kIEFudGVjIFZlcmlzCisgKiBSTS0yMDAgUmVtb3RlIENvbnRyb2wKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgYnkgSmFyb2QgV2lsc29uIDxqYXJvZEByZWRoYXQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPG1lZGlhL3JjLW1hcC5oPgorCisvKgorICogc3RhbmRhcmQgaW1vbiByZW1vdGUga2V5IHRhYmxlLCB3aGljaCBpc24ndCByZWFsbHkgZW50aXJlbHkKKyAqICJzdGFuZGFyZCIsIGFzIGRpZmZlcmVudCByZWNlaXZlcnMgZGVjb2RlIHRoZSBzYW1lIGtleSBvbiB0aGUKKyAqIHNhbWUgcmVtb3RlIHRvIGRpZmZlcmVudCBoZXggY29kZXMsIGFuZCB0aGUgc2lsa3NjcmVlbmVkIG5hbWVzCisgKiB2YXJ5IGEgYml0IGJldHdlZW4gdGhlIFNvdW5kR3JhcGggYW5kIEFudGVjIHJlbW90ZXMuLi4gdWdoLgorICovCitzdGF0aWMgc3RydWN0IHJjX21hcF90YWJsZSBpbW9uX3BhZFtdID0geworCS8qIGtleXMgc29ydGVkIG1vc3RseSBieSBmcmVxdWVuY3kgb2YgdXNlIHRvIG9wdGltaXplIGxvb2t1cHMgKi8KKwl7IDB4MmE4MTk1YjcsIEtFWV9SRVdJTkQgfSwKKwl7IDB4Mjk4MzE1YjcsIEtFWV9SRVdJTkQgfSwKKwl7IDB4MmI4MTE1YjcsIEtFWV9GQVNURk9SV0FSRCB9LAorCXsgMHgyYjgzMTViNywgS0VZX0ZBU1RGT1JXQVJEIH0sCisJeyAweDJiOTExNWI3LCBLRVlfUFJFVklPVVMgfSwKKwl7IDB4Mjk4MTk1YjcsIEtFWV9ORVhUIH0sCisKKwl7IDB4MmE4MTE1YjcsIEtFWV9QTEFZIH0sCisJeyAweDJhODMxNWI3LCBLRVlfUExBWSB9LAorCXsgMHgyYTkxMTViNywgS0VZX1BBVVNFIH0sCisJeyAweDJiOTcxNWI3LCBLRVlfU1RPUCB9LAorCXsgMHgyOTgxMTViNywgS0VZX1JFQ09SRCB9LAorCisJeyAweDAxMDA4MDAwLCBLRVlfVVAgfSwKKwl7IDB4MDEwMDdmMDAsIEtFWV9ET1dOIH0sCisJeyAweDAxMDAwMDgwLCBLRVlfTEVGVCB9LAorCXsgMHgwMTAwMDA3ZiwgS0VZX1JJR0hUIH0sCisKKwl7IDB4MmFhNTE1YjcsIEtFWV9VUCB9LAorCXsgMHgyODk1MTViNywgS0VZX0RPV04gfSwKKwl7IDB4MjlhNTE1YjcsIEtFWV9MRUZUIH0sCisJeyAweDJiYTUxNWI3LCBLRVlfUklHSFQgfSwKKworCXsgMHgwMjAwMDAyYywgS0VZX1NQQUNFIH0sIC8qIFNlbGVjdC9TcGFjZSAqLworCXsgMHgyYTkzMTViNywgS0VZX1NQQUNFIH0sIC8qIFNlbGVjdC9TcGFjZSAqLworCXsgMHgwMjAwMDAyOCwgS0VZX0VOVEVSIH0sCisJeyAweDI4YTE5NWI3LCBLRVlfRU5URVIgfSwKKwl7IDB4Mjg4MTk1YjcsIEtFWV9FWElUIH0sCisJeyAweDAyMDAwMDI5LCBLRVlfRVNDIH0sCisJeyAweDJiYjcxNWI3LCBLRVlfRVNDIH0sCisJeyAweDAyMDAwMDJhLCBLRVlfQkFDS1NQQUNFIH0sCisJeyAweDI4YTExNWI3LCBLRVlfQkFDS1NQQUNFIH0sCisKKwl7IDB4MmI5NTk1YjcsIEtFWV9NVVRFIH0sCisJeyAweDI4YTM5NWI3LCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4MjhhNTk1YjcsIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweDI4OTM5NWI3LCBLRVlfQ0hBTk5FTFVQIH0sCisJeyAweDI4ODc5NWI3LCBLRVlfQ0hBTk5FTERPV04gfSwKKworCXsgMHgwMjAwMDAxZSwgS0VZX05VTUVSSUNfMSB9LAorCXsgMHgwMjAwMDAxZiwgS0VZX05VTUVSSUNfMiB9LAorCXsgMHgwMjAwMDAyMCwgS0VZX05VTUVSSUNfMyB9LAorCXsgMHgwMjAwMDAyMSwgS0VZX05VTUVSSUNfNCB9LAorCXsgMHgwMjAwMDAyMiwgS0VZX05VTUVSSUNfNSB9LAorCXsgMHgwMjAwMDAyMywgS0VZX05VTUVSSUNfNiB9LAorCXsgMHgwMjAwMDAyNCwgS0VZX05VTUVSSUNfNyB9LAorCXsgMHgwMjAwMDAyNSwgS0VZX05VTUVSSUNfOCB9LAorCXsgMHgwMjAwMDAyNiwgS0VZX05VTUVSSUNfOSB9LAorCXsgMHgwMjAwMDAyNywgS0VZX05VTUVSSUNfMCB9LAorCisJeyAweDI4YjU5NWI3LCBLRVlfTlVNRVJJQ18xIH0sCisJeyAweDJiYjE5NWI3LCBLRVlfTlVNRVJJQ18yIH0sCisJeyAweDI4YjE5NWI3LCBLRVlfTlVNRVJJQ18zIH0sCisJeyAweDJhODU5NWI3LCBLRVlfTlVNRVJJQ180IH0sCisJeyAweDI5OTU5NWI3LCBLRVlfTlVNRVJJQ181IH0sCisJeyAweDJhYTU5NWI3LCBLRVlfTlVNRVJJQ182IH0sCisJeyAweDJiOTM5NWI3LCBLRVlfTlVNRVJJQ183IH0sCisJeyAweDJhODUxNWI3LCBLRVlfTlVNRVJJQ184IH0sCisJeyAweDJhYTExNWI3LCBLRVlfTlVNRVJJQ185IH0sCisJeyAweDJiYTU5NWI3LCBLRVlfTlVNRVJJQ18wIH0sCisKKwl7IDB4MDIyMDAwMjUsIEtFWV9OVU1FUklDX1NUQVIgfSwKKwl7IDB4MjhiNTE1YjcsIEtFWV9OVU1FUklDX1NUQVIgfSwKKwl7IDB4MDIyMDAwMjAsIEtFWV9OVU1FUklDX1BPVU5EIH0sCisJeyAweDI5YTExNWI3LCBLRVlfTlVNRVJJQ19QT1VORCB9LAorCisJeyAweDJiODUxNWI3LCBLRVlfVklERU8gfSwKKwl7IDB4Mjk5MTk1YjcsIEtFWV9BVURJTyB9LAorCXsgMHgyYmExMTViNywgS0VZX0NBTUVSQSB9LAorCXsgMHgyOGE1MTViNywgS0VZX1RWIH0sCisJeyAweDI5YTM5NWI3LCBLRVlfRFZEIH0sCisJeyAweDI5YTI5NWI3LCBLRVlfRFZEIH0sCisKKwkvKiB0aGUgTWVudSBrZXkgYmV0d2VlbiBEVkQgYW5kIFN1YnRpdGxlIG9uIHRoZSBSTS0yMDAuLi4gKi8KKwl7IDB4MmJhMzg1YjcsIEtFWV9NRU5VIH0sCisJeyAweDJiYTM5NWI3LCBLRVlfTUVOVSB9LAorCisJeyAweDI4ODUxNWI3LCBLRVlfQk9PS01BUktTIH0sCisJeyAweDJhYjcxNWI3LCBLRVlfTUVESUEgfSwgLyogVGh1bWJuYWlsICovCisJeyAweDI5ODU5NWI3LCBLRVlfU1VCVElUTEUgfSwKKwl7IDB4MmI4NTk1YjcsIEtFWV9MQU5HVUFHRSB9LAorCisJeyAweDI5YTU5NWI3LCBLRVlfWk9PTSB9LAorCXsgMHgyYWEzOTViNywgS0VZX1NDUkVFTiB9LCAvKiBGdWxsU2NyZWVuICovCisKKwl7IDB4Mjk5MTE1YjcsIEtFWV9LRVlCT0FSRCB9LAorCXsgMHgyOTkxMzViNywgS0VZX0tFWUJPQVJEIH0sCisKKwl7IDB4MDEwMTAwMDAsIEJUTl9MRUZUIH0sCisJeyAweDAxMDIwMDAwLCBCVE5fUklHSFQgfSwKKwl7IDB4MDEwMTAwODAsIEJUTl9MRUZUIH0sCisJeyAweDAxMDIwMDgwLCBCVE5fUklHSFQgfSwKKwl7IDB4Njg4MzAxYjcsIEJUTl9MRUZUIH0sCisJeyAweDY4ODQ4MWI3LCBCVE5fUklHSFQgfSwKKworCXsgMHgyYTkzOTViNywgS0VZX0NZQ0xFV0lORE9XUyB9LCAvKiBUYXNrU3dpdGNoZXIgKi8KKwl7IDB4MmI4Mzk1YjcsIEtFWV9USU1FIH0sIC8qIFRpbWVyICovCisKKwl7IDB4Mjg5MTE1YjcsIEtFWV9QT1dFUiB9LAorCXsgMHgyOWIxOTViNywgS0VZX0VKRUNUQ0QgfSwgLyogdGhlIG9uZSBuZXh0IHRvIHBsYXkgKi8KKwl7IDB4Mjk5Mzk1YjcsIEtFWV9FSkVDVENMT1NFQ0QgfSwgLyogZWplY3QgKGJ5IFRhc2tTdykgKi8KKworCXsgMHgwMjgwMDAwMCwgS0VZX0NPTlRFWFRfTUVOVSB9LCAvKiBMZWZ0IE1lbnUgKi8KKwl7IDB4MmI4MTk1YjcsIEtFWV9DT05URVhUX01FTlUgfSwgLyogTGVmdCBNZW51Ki8KKwl7IDB4MDIwMDAwNjUsIEtFWV9DT01QT1NFIH0sIC8qIFJpZ2h0TWVudSAqLworCXsgMHgyOGI3MTViNywgS0VZX0NPTVBPU0UgfSwgLyogUmlnaHRNZW51ICovCisJeyAweDJhYjE5NWI3LCBLRVlfUFJPRzEgfSwgLyogR28gb3IgTXVsdGlNb24gKi8KKwl7IDB4MjliNzE1YjcsIEtFWV9EQVNIQk9BUkQgfSwgLyogQXBwTGF1bmNoZXIgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgcmNfbWFwX2xpc3QgaW1vbl9wYWRfbWFwID0geworCS5tYXAgPSB7CisJCS5zY2FuICAgID0gaW1vbl9wYWQsCisJCS5zaXplICAgID0gQVJSQVlfU0laRShpbW9uX3BhZCksCisJCS8qIGFjdHVhbCBwcm90b2NvbCBkZXRhaWxzIHVua25vd24sIGhhcmR3YXJlIGRlY29kZXIgKi8KKwkJLnJjX3R5cGUgPSBSQ19UWVBFX09USEVSLAorCQkubmFtZSAgICA9IFJDX01BUF9JTU9OX1BBRCwKKwl9Cit9OworCitzdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcF9pbW9uX3BhZCh2b2lkKQoreworCXJldHVybiByY19tYXBfcmVnaXN0ZXIoJmltb25fcGFkX21hcCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3JjX21hcF9pbW9uX3BhZCh2b2lkKQoreworCXJjX21hcF91bnJlZ2lzdGVyKCZpbW9uX3BhZF9tYXApOworfQorCittb2R1bGVfaW5pdChpbml0X3JjX21hcF9pbW9uX3BhZCkKK21vZHVsZV9leGl0KGV4aXRfcmNfbWFwX2ltb25fcGFkKQorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJKYXJvZCBXaWxzb24gPGphcm9kQHJlZGhhdC5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtaW9kYXRhLWJjdHY3ZS5jIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLWlvZGF0YS1iY3R2N2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjU5ZTE2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLWlvZGF0YS1iY3R2N2UuYwpAQCAtMCwwICsxLDg4IEBACisvKiBpb2RhdGEtYmN0djdlLmggLSBLZXl0YWJsZSBmb3IgaW9kYXRhX2JjdHY3ZSBSZW1vdGUgQ29udHJvbGxlcgorICoKKyAqIGtleW1hcCBpbXBvcnRlZCBmcm9tIGlyLWtleW1hcHMuYworICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBieSBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxtZWRpYS9yYy1tYXAuaD4KKworLyogSU8tREFUQSBCQ1RWN0UgUmVtb3RlICovCisKK3N0YXRpYyBzdHJ1Y3QgcmNfbWFwX3RhYmxlIGlvZGF0YV9iY3R2N2VbXSA9IHsKKwl7IDB4NDAsIEtFWV9UViB9LAorCXsgMHgyMCwgS0VZX1JBRElPIH0sCQkvKiBGTSAqLworCXsgMHg2MCwgS0VZX0VQRyB9LAorCXsgMHgwMCwgS0VZX1BPV0VSIH0sCisKKwkvKiBLZXlzIDAgdG8gOSAqLworCXsgMHg0NCwgS0VZXzAgfSwJCS8qIDEwICovCisJeyAweDUwLCBLRVlfMSB9LAorCXsgMHgzMCwgS0VZXzIgfSwKKwl7IDB4NzAsIEtFWV8zIH0sCisJeyAweDQ4LCBLRVlfNCB9LAorCXsgMHgyOCwgS0VZXzUgfSwKKwl7IDB4NjgsIEtFWV82IH0sCisJeyAweDU4LCBLRVlfNyB9LAorCXsgMHgzOCwgS0VZXzggfSwKKwl7IDB4NzgsIEtFWV85IH0sCisKKwl7IDB4MTAsIEtFWV9MIH0sCQkvKiBMaXZlICovCisJeyAweDA4LCBLRVlfVElNRSB9LAkJLyogVGltZSBTaGlmdCAqLworCisJeyAweDE4LCBLRVlfUExBWVBBVVNFIH0sCS8qIFBsYXkgKi8KKworCXsgMHgyNCwgS0VZX0VOVEVSIH0sCQkvKiAxMSAqLworCXsgMHg2NCwgS0VZX0VTQyB9LAkJLyogMTIgKi8KKwl7IDB4MDQsIEtFWV9NIH0sCQkvKiBNdWx0aSAqLworCisJeyAweDU0LCBLRVlfVklERU8gfSwKKwl7IDB4MzQsIEtFWV9DSEFOTkVMVVAgfSwKKwl7IDB4NzQsIEtFWV9WT0xVTUVVUCB9LAorCXsgMHgxNCwgS0VZX01VVEUgfSwKKworCXsgMHg0YywgS0VZX1ZDUiB9LAkJLyogU1ZJREVPICovCisJeyAweDJjLCBLRVlfQ0hBTk5FTERPV04gfSwKKwl7IDB4NmMsIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweDBjLCBLRVlfWk9PTSB9LAorCisJeyAweDVjLCBLRVlfUEFVU0UgfSwKKwl7IDB4M2MsIEtFWV9SRUQgfSwJCS8qIHx8IChyZWQpICovCisJeyAweDdjLCBLRVlfUkVDT1JEIH0sCQkvKiByZWNvcmRpbmcgKi8KKwl7IDB4MWMsIEtFWV9TVE9QIH0sCisKKwl7IDB4NDEsIEtFWV9SRVdJTkQgfSwJCS8qIGJhY2t3YXJkIDw8ICovCisJeyAweDIxLCBLRVlfUExBWSB9LAorCXsgMHg2MSwgS0VZX0ZBU1RGT1JXQVJEIH0sCS8qIGZvcndhcmQgPj4gKi8KKwl7IDB4MDEsIEtFWV9ORVhUIH0sCQkvKiBza2lwID58ICovCit9OworCitzdGF0aWMgc3RydWN0IHJjX21hcF9saXN0IGlvZGF0YV9iY3R2N2VfbWFwID0geworCS5tYXAgPSB7CisJCS5zY2FuICAgID0gaW9kYXRhX2JjdHY3ZSwKKwkJLnNpemUgICAgPSBBUlJBWV9TSVpFKGlvZGF0YV9iY3R2N2UpLAorCQkucmNfdHlwZSA9IFJDX1RZUEVfVU5LTk9XTiwJLyogTGVnYWN5IElSIHR5cGUgKi8KKwkJLm5hbWUgICAgPSBSQ19NQVBfSU9EQVRBX0JDVFY3RSwKKwl9Cit9OworCitzdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcF9pb2RhdGFfYmN0djdlKHZvaWQpCit7CisJcmV0dXJuIHJjX21hcF9yZWdpc3RlcigmaW9kYXRhX2JjdHY3ZV9tYXApOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yY19tYXBfaW9kYXRhX2JjdHY3ZSh2b2lkKQoreworCXJjX21hcF91bnJlZ2lzdGVyKCZpb2RhdGFfYmN0djdlX21hcCk7Cit9CisKK21vZHVsZV9pbml0KGluaXRfcmNfbWFwX2lvZGF0YV9iY3R2N2UpCittb2R1bGVfZXhpdChleGl0X3JjX21hcF9pb2RhdGFfYmN0djdlKQorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1rYWlvbXkuYyBiL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1rYWlvbXkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzFkYzVjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLWthaW9teS5jCkBAIC0wLDAgKzEsODcgQEAKKy8qIGthaW9teS5oIC0gS2V5dGFibGUgZm9yIGthaW9teSBSZW1vdGUgQ29udHJvbGxlcgorICoKKyAqIGtleW1hcCBpbXBvcnRlZCBmcm9tIGlyLWtleW1hcHMuYworICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBieSBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxtZWRpYS9yYy1tYXAuaD4KKworLyogS2Fpb215IFRWblBDIFUyCisgICBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAaW5mcmFkZWFkLm9yZz4KKyAqLworCitzdGF0aWMgc3RydWN0IHJjX21hcF90YWJsZSBrYWlvbXlbXSA9IHsKKwl7IDB4NDMsIEtFWV9QT1dFUjJ9LAorCXsgMHgwMSwgS0VZX0xJU1R9LAorCXsgMHgwYiwgS0VZX1pPT019LAorCXsgMHgwMywgS0VZX1BPV0VSfSwKKworCXsgMHgwNCwgS0VZXzF9LAorCXsgMHgwOCwgS0VZXzJ9LAorCXsgMHgwMiwgS0VZXzN9LAorCisJeyAweDBmLCBLRVlfNH0sCisJeyAweDA1LCBLRVlfNX0sCisJeyAweDA2LCBLRVlfNn0sCisKKwl7IDB4MGMsIEtFWV83fSwKKwl7IDB4MGQsIEtFWV84fSwKKwl7IDB4MGEsIEtFWV85fSwKKworCXsgMHgxMSwgS0VZXzB9LAorCisJeyAweDA5LCBLRVlfQ0hBTk5FTFVQfSwKKwl7IDB4MDcsIEtFWV9DSEFOTkVMRE9XTn0sCisKKwl7IDB4MGUsIEtFWV9WT0xVTUVVUH0sCisJeyAweDEzLCBLRVlfVk9MVU1FRE9XTn0sCisKKwl7IDB4MTAsIEtFWV9IT01FfSwKKwl7IDB4MTIsIEtFWV9FTlRFUn0sCisKKwl7IDB4MTQsIEtFWV9SRUNPUkR9LAorCXsgMHgxNSwgS0VZX1NUT1B9LAorCXsgMHgxNiwgS0VZX1BMQVl9LAorCXsgMHgxNywgS0VZX01VVEV9LAorCisJeyAweDE4LCBLRVlfVVB9LAorCXsgMHgxOSwgS0VZX0RPV059LAorCXsgMHgxYSwgS0VZX0xFRlR9LAorCXsgMHgxYiwgS0VZX1JJR0hUfSwKKworCXsgMHgxYywgS0VZX1JFRH0sCisJeyAweDFkLCBLRVlfR1JFRU59LAorCXsgMHgxZSwgS0VZX1lFTExPV30sCisJeyAweDFmLCBLRVlfQkxVRX0sCit9OworCitzdGF0aWMgc3RydWN0IHJjX21hcF9saXN0IGthaW9teV9tYXAgPSB7CisJLm1hcCA9IHsKKwkJLnNjYW4gICAgPSBrYWlvbXksCisJCS5zaXplICAgID0gQVJSQVlfU0laRShrYWlvbXkpLAorCQkucmNfdHlwZSA9IFJDX1RZUEVfVU5LTk9XTiwJLyogTGVnYWN5IElSIHR5cGUgKi8KKwkJLm5hbWUgICAgPSBSQ19NQVBfS0FJT01ZLAorCX0KK307CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfcmNfbWFwX2thaW9teSh2b2lkKQoreworCXJldHVybiByY19tYXBfcmVnaXN0ZXIoJmthaW9teV9tYXApOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yY19tYXBfa2Fpb215KHZvaWQpCit7CisJcmNfbWFwX3VucmVnaXN0ZXIoJmthaW9teV9tYXApOworfQorCittb2R1bGVfaW5pdChpbml0X3JjX21hcF9rYWlvbXkpCittb2R1bGVfZXhpdChleGl0X3JjX21hcF9rYWlvbXkpCisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIk1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLWt3b3JsZC0zMTV1LmMgYi9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMta3dvcmxkLTMxNXUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2U2ZWY3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLWt3b3JsZC0zMTV1LmMKQEAgLTAsMCArMSw4MyBAQAorLyoga3dvcmxkLTMxNXUuaCAtIEtleXRhYmxlIGZvciBrd29ybGRfMzE1dSBSZW1vdGUgQ29udHJvbGxlcgorICoKKyAqIGtleW1hcCBpbXBvcnRlZCBmcm9tIGlyLWtleW1hcHMuYworICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBieSBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxtZWRpYS9yYy1tYXAuaD4KKworLyogS3dvcmxkIDMxNVUKKyAqLworCitzdGF0aWMgc3RydWN0IHJjX21hcF90YWJsZSBrd29ybGRfMzE1dVtdID0geworCXsgMHg2MTQzLCBLRVlfUE9XRVIgfSwKKwl7IDB4NjEwMSwgS0VZX1RVTkVSIH0sCQkvKiBzb3VyY2UgKi8KKwl7IDB4NjEwYiwgS0VZX1pPT00gfSwKKwl7IDB4NjEwMywgS0VZX1BPV0VSMiB9LAkJLyogc2h1dGRvd24gKi8KKworCXsgMHg2MTA0LCBLRVlfMSB9LAorCXsgMHg2MTA4LCBLRVlfMiB9LAorCXsgMHg2MTAyLCBLRVlfMyB9LAorCXsgMHg2MTA5LCBLRVlfQ0hBTk5FTFVQIH0sCisKKwl7IDB4NjEwZiwgS0VZXzQgfSwKKwl7IDB4NjEwNSwgS0VZXzUgfSwKKwl7IDB4NjEwNiwgS0VZXzYgfSwKKwl7IDB4NjEwNywgS0VZX0NIQU5ORUxET1dOIH0sCisKKwl7IDB4NjEwYywgS0VZXzcgfSwKKwl7IDB4NjEwZCwgS0VZXzggfSwKKwl7IDB4NjEwYSwgS0VZXzkgfSwKKwl7IDB4NjEwZSwgS0VZX1ZPTFVNRVVQIH0sCisKKwl7IDB4NjExMCwgS0VZX0xBU1QgfSwKKwl7IDB4NjExMSwgS0VZXzAgfSwKKwl7IDB4NjExMiwgS0VZX0VOVEVSIH0sCisJeyAweDYxMTMsIEtFWV9WT0xVTUVET1dOIH0sCisKKwl7IDB4NjExNCwgS0VZX1JFQ09SRCB9LAorCXsgMHg2MTE1LCBLRVlfU1RPUCB9LAorCXsgMHg2MTE2LCBLRVlfUExBWSB9LAorCXsgMHg2MTE3LCBLRVlfTVVURSB9LAorCisJeyAweDYxMTgsIEtFWV9VUCB9LAorCXsgMHg2MTE5LCBLRVlfRE9XTiB9LAorCXsgMHg2MTFhLCBLRVlfTEVGVCB9LAorCXsgMHg2MTFiLCBLRVlfUklHSFQgfSwKKworCXsgMHg2MTFjLCBLRVlfUkVEIH0sCisJeyAweDYxMWQsIEtFWV9HUkVFTiB9LAorCXsgMHg2MTFlLCBLRVlfWUVMTE9XIH0sCisJeyAweDYxMWYsIEtFWV9CTFVFIH0sCit9OworCitzdGF0aWMgc3RydWN0IHJjX21hcF9saXN0IGt3b3JsZF8zMTV1X21hcCA9IHsKKwkubWFwID0geworCQkuc2NhbiAgICA9IGt3b3JsZF8zMTV1LAorCQkuc2l6ZSAgICA9IEFSUkFZX1NJWkUoa3dvcmxkXzMxNXUpLAorCQkucmNfdHlwZSA9IFJDX1RZUEVfTkVDLAorCQkubmFtZSAgICA9IFJDX01BUF9LV09STERfMzE1VSwKKwl9Cit9OworCitzdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcF9rd29ybGRfMzE1dSh2b2lkKQoreworCXJldHVybiByY19tYXBfcmVnaXN0ZXIoJmt3b3JsZF8zMTV1X21hcCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3JjX21hcF9rd29ybGRfMzE1dSh2b2lkKQoreworCXJjX21hcF91bnJlZ2lzdGVyKCZrd29ybGRfMzE1dV9tYXApOworfQorCittb2R1bGVfaW5pdChpbml0X3JjX21hcF9rd29ybGRfMzE1dSkKK21vZHVsZV9leGl0KGV4aXRfcmNfbWFwX2t3b3JsZF8zMTV1KQorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1rd29ybGQtcGx1cy10di1hbmFsb2cuYyBiL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1rd29ybGQtcGx1cy10di1hbmFsb2cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDVmMGI4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLWt3b3JsZC1wbHVzLXR2LWFuYWxvZy5jCkBAIC0wLDAgKzEsOTkgQEAKKy8qIGt3b3JsZC1wbHVzLXR2LWFuYWxvZy5oIC0gS2V5dGFibGUgZm9yIGt3b3JsZF9wbHVzX3R2X2FuYWxvZyBSZW1vdGUgQ29udHJvbGxlcgorICoKKyAqIGtleW1hcCBpbXBvcnRlZCBmcm9tIGlyLWtleW1hcHMuYworICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBieSBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxtZWRpYS9yYy1tYXAuaD4KKworLyogS3dvcmxkIFBsdXMgVFYgQW5hbG9nIExpdGUgUENJIElSCisgICBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAaW5mcmFkZWFkLm9yZz4KKyAqLworCitzdGF0aWMgc3RydWN0IHJjX21hcF90YWJsZSBrd29ybGRfcGx1c190dl9hbmFsb2dbXSA9IHsKKwl7IDB4MGMsIEtFWV9QUk9HMSB9LAkJLyogS3dvcmxkIGtleSAqLworCXsgMHgxNiwgS0VZX0NMT1NFQ0QgfSwJCS8qIC0+ICkgKi8KKwl7IDB4MWQsIEtFWV9QT1dFUjIgfSwKKworCXsgMHgwMCwgS0VZXzEgfSwKKwl7IDB4MDEsIEtFWV8yIH0sCisJeyAweDAyLCBLRVlfMyB9LAkJLyogVHdvIGtleXMgaGF2ZSB0aGUgc2FtZSBjb2RlOiAzIGFuZCBsZWZ0ICovCisJeyAweDAzLCBLRVlfNCB9LAkJLyogVHdvIGtleXMgaGF2ZSB0aGUgc2FtZSBjb2RlOiAzIGFuZCByaWdodCAqLworCXsgMHgwNCwgS0VZXzUgfSwKKwl7IDB4MDUsIEtFWV82IH0sCisJeyAweDA2LCBLRVlfNyB9LAorCXsgMHgwNywgS0VZXzggfSwKKwl7IDB4MDgsIEtFWV85IH0sCisJeyAweDBhLCBLRVlfMCB9LAorCisJeyAweDA5LCBLRVlfQUdBSU4gfSwKKwl7IDB4MTQsIEtFWV9NVVRFIH0sCisKKwl7IDB4MjAsIEtFWV9VUCB9LAorCXsgMHgyMSwgS0VZX0RPV04gfSwKKwl7IDB4MGIsIEtFWV9FTlRFUiB9LAorCisJeyAweDEwLCBLRVlfQ0hBTk5FTFVQIH0sCisJeyAweDExLCBLRVlfQ0hBTk5FTERPV04gfSwKKworCS8qIENvdWxkbid0IG1hcCBrZXkgbGVmdC9rZXkgcmlnaHQgc2luY2UgdGhvc2UKKwkgICBjb25mbGljdCB3aXRoICczJyBhbmQgJzQnIHNjYW5jb2RlcworCSAgIEkgZHVubm8gd2hhdCB0aGUgb3JpZ2luYWwgZHJpdmVyIGRvZXMKKwkgKi8KKworCXsgMHgxMywgS0VZX1ZPTFVNRVVQIH0sCisJeyAweDEyLCBLRVlfVk9MVU1FRE9XTiB9LAorCisJLyogVGhlIGxvd2VyIHBhcnQgb2YgdGhlIElSCisJICAgVGhlcmUgYXJlIHNldmVyYWwgZHVwbGljYXRlZCBrZXljb2RlcyB0aGVyZS4KKwkgICBNb3N0IG9mIHRoZW0gY29uZmxpY3Qgd2l0aCBkaWdpdHMuCisJICAgQWRkIG1hcHBpbmdzIGp1c3QgdG8gdGhlIHVudXNlZCBzY2FuY29kZXMuCisJICAgU29tZWhvdywgdGhlIG9yaWdpbmFsIGRyaXZlciBoYXMgYSB3YXkgdG8ga25vdywKKwkgICBidXQgdGhpcyBkb2Vzbid0IHNlZW0gdG8gYmUgb24gc29tZSBHUElPLgorCSAgIEFsc28sIGl0IGlzIG5vdCByZWxhdGVkIHRvIHRoZSB0aW1lIGJldHdlZW4ga2V5dXAKKwkgICBhbmQga2V5ZG93bi4KKwkgKi8KKwl7IDB4MTksIEtFWV9USU1FfSwJCS8qIFRpbWVzaGlmdCAqLworCXsgMHgxYSwgS0VZX1NUT1B9LAorCXsgMHgxYiwgS0VZX1JFQ09SRH0sCisKKwl7IDB4MjIsIEtFWV9URVhUfSwKKworCXsgMHgxNSwgS0VZX0FVRElPfSwJCS8qICgoKikpICovCisJeyAweDBmLCBLRVlfWk9PTX0sCisJeyAweDFjLCBLRVlfQ0FNRVJBfSwJCS8qIHNuYXBzaG90ICovCisKKwl7IDB4MTgsIEtFWV9SRUR9LAkJLyogQiAqLworCXsgMHgyMywgS0VZX0dSRUVOfSwJCS8qIEMgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgcmNfbWFwX2xpc3Qga3dvcmxkX3BsdXNfdHZfYW5hbG9nX21hcCA9IHsKKwkubWFwID0geworCQkuc2NhbiAgICA9IGt3b3JsZF9wbHVzX3R2X2FuYWxvZywKKwkJLnNpemUgICAgPSBBUlJBWV9TSVpFKGt3b3JsZF9wbHVzX3R2X2FuYWxvZyksCisJCS5yY190eXBlID0gUkNfVFlQRV9VTktOT1dOLAkvKiBMZWdhY3kgSVIgdHlwZSAqLworCQkubmFtZSAgICA9IFJDX01BUF9LV09STERfUExVU19UVl9BTkFMT0csCisJfQorfTsKKworc3RhdGljIGludCBfX2luaXQgaW5pdF9yY19tYXBfa3dvcmxkX3BsdXNfdHZfYW5hbG9nKHZvaWQpCit7CisJcmV0dXJuIHJjX21hcF9yZWdpc3Rlcigma3dvcmxkX3BsdXNfdHZfYW5hbG9nX21hcCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3JjX21hcF9rd29ybGRfcGx1c190dl9hbmFsb2codm9pZCkKK3sKKwlyY19tYXBfdW5yZWdpc3Rlcigma3dvcmxkX3BsdXNfdHZfYW5hbG9nX21hcCk7Cit9CisKK21vZHVsZV9pbml0KGluaXRfcmNfbWFwX2t3b3JsZF9wbHVzX3R2X2FuYWxvZykKK21vZHVsZV9leGl0KGV4aXRfcmNfbWFwX2t3b3JsZF9wbHVzX3R2X2FuYWxvZykKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtbGVhZHRlay15MDRnMDA1MS5jIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLWxlYWR0ZWsteTA0ZzAwNTEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmFhNTRmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLWxlYWR0ZWsteTA0ZzAwNTEuYwpAQCAtMCwwICsxLDk5IEBACisvKgorICogTGVhZFRlayBZMDRHMDA1MSByZW1vdGUgY29udHJvbGxlciBrZXl0YWJsZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBbnR0aSBQYWxvc2FhcmkgPGNyb3BlQGlraS5maT4KKyAqCisgKiAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqICAgIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiAgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICovCisKKyNpbmNsdWRlIDxtZWRpYS9yYy1tYXAuaD4KKworc3RhdGljIHN0cnVjdCByY19tYXBfdGFibGUgbGVhZHRla195MDRnMDA1MVtdID0geworCXsgMHgwMzAwLCBLRVlfUE9XRVIyIH0sCisJeyAweDAzMDMsIEtFWV9TQ1JFRU4gfSwKKwl7IDB4MDMwNCwgS0VZX1JJR0hUIH0sCisJeyAweDAzMDUsIEtFWV8xIH0sCisJeyAweDAzMDYsIEtFWV8yIH0sCisJeyAweDAzMDcsIEtFWV8zIH0sCisJeyAweDAzMDgsIEtFWV9MRUZUIH0sCisJeyAweDAzMDksIEtFWV80IH0sCisJeyAweDAzMGEsIEtFWV81IH0sCisJeyAweDAzMGIsIEtFWV82IH0sCisJeyAweDAzMGMsIEtFWV9VUCB9LAorCXsgMHgwMzBkLCBLRVlfNyB9LAorCXsgMHgwMzBlLCBLRVlfOCB9LAorCXsgMHgwMzBmLCBLRVlfOSB9LAorCXsgMHgwMzEwLCBLRVlfRE9XTiB9LAorCXsgMHgwMzExLCBLRVlfQUdBSU4gfSwKKwl7IDB4MDMxMiwgS0VZXzAgfSwKKwl7IDB4MDMxMywgS0VZX09LIH0sICAgICAgICAgICAgICAvKiAxc3Qgb2sgKi8KKwl7IDB4MDMxNCwgS0VZX01VVEUgfSwKKwl7IDB4MDMxNiwgS0VZX09LIH0sICAgICAgICAgICAgICAvKiAybmQgb2sgKi8KKwl7IDB4MDMxZSwgS0VZX1ZJREVPIH0sICAgICAgICAgICAvKiAybmQgdmlkZW8gKi8KKwl7IDB4MDMxYiwgS0VZX0FVRElPIH0sCisJeyAweDAzMWYsIEtFWV9URVhUIH0sCisJeyAweDAzNDAsIEtFWV9TTEVFUCB9LAorCXsgMHgwMzQxLCBLRVlfRE9UIH0sCisJeyAweDAzNDIsIEtFWV9SRVdJTkQgfSwKKwl7IDB4MDM0MywgS0VZX1BMQVkgfSwKKwl7IDB4MDM0NCwgS0VZX0ZBU1RGT1JXQVJEIH0sCisJeyAweDAzNDUsIEtFWV9USU1FIH0sCisJeyAweDAzNDYsIEtFWV9TVE9QIH0sICAgICAgICAgICAgLyogMm5kIHN0b3AgKi8KKwl7IDB4MDM0NywgS0VZX1JFQ09SRCB9LAorCXsgMHgwMzQ4LCBLRVlfQ0FNRVJBIH0sCisJeyAweDAzNDksIEtFWV9FU0MgfSwKKwl7IDB4MDM0YSwgS0VZX05FVyB9LAorCXsgMHgwMzRiLCBLRVlfUkVEIH0sCisJeyAweDAzNGMsIEtFWV9HUkVFTiB9LAorCXsgMHgwMzRkLCBLRVlfWUVMTE9XIH0sCisJeyAweDAzNGUsIEtFWV9CTFVFIH0sCisJeyAweDAzNGYsIEtFWV9NRU5VIH0sCisJeyAweDAzNTAsIEtFWV9TVE9QIH0sICAgICAgICAgICAgLyogMXN0IHN0b3AgKi8KKwl7IDB4MDM1MSwgS0VZX0NIQU5ORUwgfSwKKwl7IDB4MDM1MiwgS0VZX1ZJREVPIH0sICAgICAgICAgICAvKiAxc3QgdmlkZW8gKi8KKwl7IDB4MDM1MywgS0VZX0VQRyB9LAorCXsgMHgwMzU0LCBLRVlfUFJFVklPVVMgfSwKKwl7IDB4MDM1NSwgS0VZX05FWFQgfSwKKwl7IDB4MDM1NiwgS0VZX1RWIH0sCisJeyAweDAzNWEsIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweDAzNWIsIEtFWV9DSEFOTkVMVVAgfSwKKwl7IDB4MDM1ZSwgS0VZX1ZPTFVNRVVQIH0sCisJeyAweDAzNWYsIEtFWV9DSEFOTkVMRE9XTiB9LAorfTsKKworc3RhdGljIHN0cnVjdCByY19tYXBfbGlzdCBsZWFkdGVrX3kwNGcwMDUxX21hcCA9IHsKKwkubWFwID0geworCQkuc2NhbiAgICA9IGxlYWR0ZWtfeTA0ZzAwNTEsCisJCS5zaXplICAgID0gQVJSQVlfU0laRShsZWFkdGVrX3kwNGcwMDUxKSwKKwkJLnJjX3R5cGUgPSBSQ19UWVBFX05FQywKKwkJLm5hbWUgICAgPSBSQ19NQVBfTEVBRFRFS19ZMDRHMDA1MSwKKwl9Cit9OworCitzdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcF9sZWFkdGVrX3kwNGcwMDUxKHZvaWQpCit7CisJcmV0dXJuIHJjX21hcF9yZWdpc3RlcigmbGVhZHRla195MDRnMDA1MV9tYXApOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yY19tYXBfbGVhZHRla195MDRnMDA1MSh2b2lkKQoreworCXJjX21hcF91bnJlZ2lzdGVyKCZsZWFkdGVrX3kwNGcwMDUxX21hcCk7Cit9CisKK21vZHVsZV9pbml0KGluaXRfcmNfbWFwX2xlYWR0ZWtfeTA0ZzAwNTEpCittb2R1bGVfZXhpdChleGl0X3JjX21hcF9sZWFkdGVrX3kwNGcwMDUxKQorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJBbnR0aSBQYWxvc2FhcmkgPGNyb3BlQGlraS5maT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1saXJjLmMgYi9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtbGlyYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4ZTIzZTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtbGlyYy5jCkBAIC0wLDAgKzEsNDEgQEAKKy8qIHJjLWxpcmMuYyAtIEVtcHR5IGR1bW15IGtleXRhYmxlLCBmb3IgdXNlIHdoZW4gaXRzIHByZWZlcnJlZCB0byBwYXNzCisgKiBhbGwgcmF3IElSIGRhdGEgdG8gdGhlIGxpcmMgdXNlcnNwYWNlIGRlY29kZXIuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIGJ5IEphcm9kIFdpbHNvbiA8amFyb2RAcmVkaGF0LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxtZWRpYS9yYy1jb3JlLmg+CisKK3N0YXRpYyBzdHJ1Y3QgcmNfbWFwX3RhYmxlIGxpcmNbXSA9IHsKKwl7IH0sCit9OworCitzdGF0aWMgc3RydWN0IHJjX21hcF9saXN0IGxpcmNfbWFwID0geworCS5tYXAgPSB7CisJCS5zY2FuICAgID0gbGlyYywKKwkJLnNpemUgICAgPSBBUlJBWV9TSVpFKGxpcmMpLAorCQkucmNfdHlwZSA9IFJDX1RZUEVfTElSQywKKwkJLm5hbWUgICAgPSBSQ19NQVBfTElSQywKKwl9Cit9OworCitzdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcF9saXJjKHZvaWQpCit7CisJcmV0dXJuIHJjX21hcF9yZWdpc3RlcigmbGlyY19tYXApOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yY19tYXBfbGlyYyh2b2lkKQoreworCXJjX21hcF91bnJlZ2lzdGVyKCZsaXJjX21hcCk7Cit9CisKK21vZHVsZV9pbml0KGluaXRfcmNfbWFwX2xpcmMpCittb2R1bGVfZXhpdChleGl0X3JjX21hcF9saXJjKQorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJKYXJvZCBXaWxzb24gPGphcm9kQHJlZGhhdC5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtbG1lMjUxMC5jIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLWxtZTI1MTAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzVjZDgxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLWxtZTI1MTAuYwpAQCAtMCwwICsxLDY4IEBACisvKiBMTUUyNTEwIHJlbW90ZSBjb250cm9sCisgKgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBNYWxjb2xtIFByaWVzdGxleSAodHZib3hzcHlAZ21haWwuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPG1lZGlhL3JjLW1hcC5oPgorCisKK3N0YXRpYyBzdHJ1Y3QgcmNfbWFwX3RhYmxlIGxtZTI1MTBfcmNbXSA9IHsKKwl7IDB4YmE0NSwgS0VZXzAgfSwKKwl7IDB4YTA1ZiwgS0VZXzEgfSwKKwl7IDB4YWY1MCwgS0VZXzIgfSwKKwl7IDB4YTI1ZCwgS0VZXzMgfSwKKwl7IDB4YmU0MSwgS0VZXzQgfSwKKwl7IDB4ZjUwYSwgS0VZXzUgfSwKKwl7IDB4YmQ0MiwgS0VZXzYgfSwKKwl7IDB4Yjg0NywgS0VZXzcgfSwKKwl7IDB4YjY0OSwgS0VZXzggfSwKKwl7IDB4ZmEwNSwgS0VZXzkgfSwKKwl7IDB4YmM0MywgS0VZX1BPV0VSIH0sCisJeyAweGI5NDYsIEtFWV9TVUJUSVRMRSB9LAorCXsgMHhmOTA2LCBLRVlfUEFVU0UgfSwKKwl7IDB4ZmMwMywgS0VZX01FRElBX1JFUEVBVH0sCisJeyAweGZkMDIsIEtFWV9QQVVTRSB9LAorCXsgMHhhMTVlLCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4YTM1YywgS0VZX1ZPTFVNRURPV04gfSwKKwl7IDB4ZjYwOSwgS0VZX0NIQU5ORUxVUCB9LAorCXsgMHhlNTFhLCBLRVlfQ0hBTk5FTERPV04gfSwKKwl7IDB4ZTExZSwgS0VZX1BMQVkgfSwKKwl7IDB4ZTQxYiwgS0VZX1pPT00gfSwKKwl7IDB4YTY1OSwgS0VZX01VVEUgfSwKKwl7IDB4YTU1YSwgS0VZX1RWIH0sCisJeyAweGU3MTgsIEtFWV9SRUNPUkQgfSwKKwl7IDB4ZjgwNywgS0VZX0VQRyB9LAorCXsgMHhmZTAxLCBLRVlfU1RPUCB9LAorCit9OworCitzdGF0aWMgc3RydWN0IHJjX21hcF9saXN0IGxtZTI1MTBfbWFwID0geworCS5tYXAgPSB7CisJCS5zY2FuICAgID0gbG1lMjUxMF9yYywKKwkJLnNpemUgICAgPSBBUlJBWV9TSVpFKGxtZTI1MTBfcmMpLAorCQkucmNfdHlwZSA9IFJDX1RZUEVfVU5LTk9XTiwKKwkJLm5hbWUgICAgPSBSQ19NQVBfTE1FMjUxMCwKKwl9Cit9OworCitzdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX2xtZTI1MTBfbWFwKHZvaWQpCit7CisJcmV0dXJuIHJjX21hcF9yZWdpc3RlcigmbG1lMjUxMF9tYXApOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yY19sbWUyNTEwX21hcCh2b2lkKQoreworCXJjX21hcF91bnJlZ2lzdGVyKCZsbWUyNTEwX21hcCk7Cit9CisKK21vZHVsZV9pbml0KGluaXRfcmNfbG1lMjUxMF9tYXApCittb2R1bGVfZXhpdChleGl0X3JjX2xtZTI1MTBfbWFwKQorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJNYWxjb2xtIFByaWVzdGxleSB0dmJveHNweUBnbWFpbC5jb20iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1tYW5saS5jIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLW1hbmxpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNiMmQwNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1tYW5saS5jCkBAIC0wLDAgKzEsMTM0IEBACisvKiBtYW5saS5oIC0gS2V5dGFibGUgZm9yIG1hbmxpIFJlbW90ZSBDb250cm9sbGVyCisgKgorICoga2V5bWFwIGltcG9ydGVkIGZyb20gaXIta2V5bWFwcy5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPG1lZGlhL3JjLW1hcC5oPgorCisvKiBNaWNoYWVsIFRva2FyZXYgPG1qdEB0bHMubXNrLnJ1PgorICAga2V5dGFibGUgaXMgdXNlZCBieSBNQU5MSSBNVFYwMFsweDBjXSBhbmQgQmVob2xkVFYgNDBbMTNdIGF0CisgICBsZWFzdCwgYW5kIHByb2JhYmx5IG90aGVyIGNhcmRzIHRvby4KKyAgIFRoZSAiYXNjaWktYXJ0IHBpY3R1cmUiIGJlbG93IChpbiBjb21tZW50cywgZmlyc3Qgcm93CisgICBpcyB0aGUga2V5Y29kZSBpbiBoZXgsIGFuZCBzdWJzZXF1ZW50IHJvdyhzKSBzaG93cworICAgdGhlIGJ1dHRvbiBsYWJlbHMgKHNldmVyYWwgdmFyaWFudHMgd2hlbiBhcHByb3ByaWF0ZSkKKyAgIGhlbHBzIHRvIGRlc2NpZGUgd2hpY2gga2V5Y29kZXMgdG8gYXNzaWduIHRvIHRoZSBidXR0b25zLgorICovCisKK3N0YXRpYyBzdHJ1Y3QgcmNfbWFwX3RhYmxlIG1hbmxpW10gPSB7CisKKwkvKiAgMHgxYyAgICAgICAgICAgIDB4MTIgICoKKwkgKiBGVU5DVElPTiAgICAgICAgIFBPV0VSICoKKwkgKiAgIEZNICAgICAgICAgICAgICAofCkgICoKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICovCisJeyAweDFjLCBLRVlfUkFESU8gfSwJLypYWFgqLworCXsgMHgxMiwgS0VZX1BPV0VSIH0sCisKKwkvKiAgMHgwMSAgICAweDAyICAgIDB4MDMgICoKKwkgKiAgIDEgICAgICAgMiAgICAgICAzICAgICoKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICoKKwkgKiAgMHgwNCAgICAweDA1ICAgIDB4MDYgICoKKwkgKiAgIDQgICAgICAgNSAgICAgICA2ICAgICoKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICoKKwkgKiAgMHgwNyAgICAweDA4ICAgIDB4MDkgICoKKwkgKiAgIDcgICAgICAgOCAgICAgICA5ICAgICoKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICovCisJeyAweDAxLCBLRVlfMSB9LAorCXsgMHgwMiwgS0VZXzIgfSwKKwl7IDB4MDMsIEtFWV8zIH0sCisJeyAweDA0LCBLRVlfNCB9LAorCXsgMHgwNSwgS0VZXzUgfSwKKwl7IDB4MDYsIEtFWV82IH0sCisJeyAweDA3LCBLRVlfNyB9LAorCXsgMHgwOCwgS0VZXzggfSwKKwl7IDB4MDksIEtFWV85IH0sCisKKwkvKiAgMHgwYSAgICAweDAwICAgIDB4MTcgICoKKwkgKiBSRUNBTEwgICAgMCAgICAgICsxMDAgICoKKwkgKiAgICAgICAgICAgICAgICAgIFBMVVMgICoKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICovCisJeyAweDBhLCBLRVlfQUdBSU4gfSwJLypYWFggS0VZX1JFV0lORD8gKi8KKwl7IDB4MDAsIEtFWV8wIH0sCisJeyAweDE3LCBLRVlfRElHSVRTIH0sCS8qWFhYKi8KKworCS8qICAweDE0ICAgICAgICAgICAgMHgxMCAgKgorCSAqICBNRU5VICAgICAgICAgICAgSU5GTyAgKgorCSAqICBPU0QgICAgICAgICAgICAgICAgICAgKi8KKwl7IDB4MTQsIEtFWV9NRU5VIH0sCisJeyAweDEwLCBLRVlfSU5GTyB9LAorCisJLyogICAgICAgICAgMHgwYiAgICAgICAgICAqCisJICogICAgICAgICAgIFVwICAgICAgICAgICAqCisJICogICAgICAgICAgICAgICAgICAgICAgICAqCisJICogIDB4MTggICAgMHgxNiAgICAweDBjICAqCisJICogIExlZnQgICAgIE9rICAgICBSaWdodCAqCisJICogICAgICAgICAgICAgICAgICAgICAgICAqCisJICogICAgICAgICAweDAxNSAgICAgICAgICAqCisJICogICAgICAgICBEb3duICAgICAgICAgICAqCisJICogICAgICAgICAgICAgICAgICAgICAgICAqLworCXsgMHgwYiwgS0VZX1VQIH0sCisJeyAweDE4LCBLRVlfTEVGVCB9LAorCXsgMHgxNiwgS0VZX09LIH0sCS8qWFhYIEtFWV9TRUxFQ1Q/IEtFWV9FTlRFUj8gKi8KKwl7IDB4MGMsIEtFWV9SSUdIVCB9LAorCXsgMHgxNSwgS0VZX0RPV04gfSwKKworCS8qICAweDExICAgICAgICAgICAgMHgwZCAgKgorCSAqICBUVi9BViAgICAgICAgICAgTU9ERSAgKgorCSAqICBTT1VSQ0UgICAgICAgICBTVEVSRU8gKgorCSAqICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwl7IDB4MTEsIEtFWV9UViB9LAkvKlhYWCovCisJeyAweDBkLCBLRVlfTU9ERSB9LAkvKlhYWCB0aGVyZSdzIG5vIEtFWV9TVEVSRU8JKi8KKworCS8qICAweDBmICAgIDB4MWIgICAgMHgxYSAgKgorCSAqICBBVURJTyAgIFZvbCsgICAgQ2hhbisgKgorCSAqICAgICAgICBUSU1FU0hJRlQ/Pz8gICAgKgorCSAqICAgICAgICAgICAgICAgICAgICAgICAgKgorCSAqICAweDBlICAgIDB4MWYgICAgMHgxZSAgKgorCSAqICBTTEVFUCAgIFZvbC0gICAgQ2hhbi0gKgorCSAqICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwl7IDB4MGYsIEtFWV9BVURJTyB9LAorCXsgMHgxYiwgS0VZX1ZPTFVNRVVQIH0sCisJeyAweDFhLCBLRVlfQ0hBTk5FTFVQIH0sCisJeyAweDBlLCBLRVlfVElNRSB9LAorCXsgMHgxZiwgS0VZX1ZPTFVNRURPV04gfSwKKwl7IDB4MWUsIEtFWV9DSEFOTkVMRE9XTiB9LAorCisJLyogICAgICAgICAweDEzICAgICAweDE5ICAqCisJICogICAgICAgICBNVVRFICAgU05BUFNIT1QqCisJICogICAgICAgICAgICAgICAgICAgICAgICAqLworCXsgMHgxMywgS0VZX01VVEUgfSwKKwl7IDB4MTksIEtFWV9DQU1FUkEgfSwKKworCS8qIDB4MWQgdW51c2VkID8gKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgcmNfbWFwX2xpc3QgbWFubGlfbWFwID0geworCS5tYXAgPSB7CisJCS5zY2FuICAgID0gbWFubGksCisJCS5zaXplICAgID0gQVJSQVlfU0laRShtYW5saSksCisJCS5yY190eXBlID0gUkNfVFlQRV9VTktOT1dOLAkvKiBMZWdhY3kgSVIgdHlwZSAqLworCQkubmFtZSAgICA9IFJDX01BUF9NQU5MSSwKKwl9Cit9OworCitzdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcF9tYW5saSh2b2lkKQoreworCXJldHVybiByY19tYXBfcmVnaXN0ZXIoJm1hbmxpX21hcCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3JjX21hcF9tYW5saSh2b2lkKQoreworCXJjX21hcF91bnJlZ2lzdGVyKCZtYW5saV9tYXApOworfQorCittb2R1bGVfaW5pdChpbml0X3JjX21hcF9tYW5saSkKK21vZHVsZV9leGl0KGV4aXRfcmNfbWFwX21hbmxpKQorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1tc2ktZGlnaXZveC1paS5jIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLW1zaS1kaWdpdm94LWlpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I5YTAxYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1tc2ktZGlnaXZveC1paS5jCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBNU0kgRElHSVZPWCBtaW5pIElJIHJlbW90ZSBjb250cm9sbGVyIGtleXRhYmxlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFudHRpIFBhbG9zYWFyaSA8Y3JvcGVAaWtpLmZpPgorICoKKyAqICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogICAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqICAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKi8KKworI2luY2x1ZGUgPG1lZGlhL3JjLW1hcC5oPgorCitzdGF0aWMgc3RydWN0IHJjX21hcF90YWJsZSBtc2lfZGlnaXZveF9paVtdID0geworCXsgMHgwMDAyLCBLRVlfMiB9LAorCXsgMHgwMDAzLCBLRVlfVVAgfSwgICAgICAgICAgICAgIC8qIHVwICovCisJeyAweDAwMDQsIEtFWV8zIH0sCisJeyAweDAwMDUsIEtFWV9DSEFOTkVMRE9XTiB9LAorCXsgMHgwMDA4LCBLRVlfNSB9LAorCXsgMHgwMDA5LCBLRVlfMCB9LAorCXsgMHgwMDBiLCBLRVlfOCB9LAorCXsgMHgwMDBkLCBLRVlfRE9XTiB9LCAgICAgICAgICAgIC8qIGRvd24gKi8KKwl7IDB4MDAxMCwgS0VZXzkgfSwKKwl7IDB4MDAxMSwgS0VZXzcgfSwKKwl7IDB4MDAxNCwgS0VZX1ZPTFVNRVVQIH0sCisJeyAweDAwMTUsIEtFWV9DSEFOTkVMVVAgfSwKKwl7IDB4MDAxNiwgS0VZX09LIH0sCisJeyAweDAwMTcsIEtFWV9QT1dFUjIgfSwKKwl7IDB4MDAxYSwgS0VZXzEgfSwKKwl7IDB4MDAxYywgS0VZXzQgfSwKKwl7IDB4MDAxZCwgS0VZXzYgfSwKKwl7IDB4MDAxZiwgS0VZX1ZPTFVNRURPV04gfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmNfbWFwX2xpc3QgbXNpX2RpZ2l2b3hfaWlfbWFwID0geworCS5tYXAgPSB7CisJCS5zY2FuICAgID0gbXNpX2RpZ2l2b3hfaWksCisJCS5zaXplICAgID0gQVJSQVlfU0laRShtc2lfZGlnaXZveF9paSksCisJCS5yY190eXBlID0gUkNfVFlQRV9ORUMsCisJCS5uYW1lICAgID0gUkNfTUFQX01TSV9ESUdJVk9YX0lJLAorCX0KK307CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfcmNfbWFwX21zaV9kaWdpdm94X2lpKHZvaWQpCit7CisJcmV0dXJuIHJjX21hcF9yZWdpc3RlcigmbXNpX2RpZ2l2b3hfaWlfbWFwKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGV4aXRfcmNfbWFwX21zaV9kaWdpdm94X2lpKHZvaWQpCit7CisJcmNfbWFwX3VucmVnaXN0ZXIoJm1zaV9kaWdpdm94X2lpX21hcCk7Cit9CisKK21vZHVsZV9pbml0KGluaXRfcmNfbWFwX21zaV9kaWdpdm94X2lpKQorbW9kdWxlX2V4aXQoZXhpdF9yY19tYXBfbXNpX2RpZ2l2b3hfaWkpCisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkFudHRpIFBhbG9zYWFyaSA8Y3JvcGVAaWtpLmZpPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLW1zaS1kaWdpdm94LWlpaS5jIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLW1zaS1kaWdpdm94LWlpaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlOWQwNmIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtbXNpLWRpZ2l2b3gtaWlpLmMKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIE1TSSBESUdJVk9YIG1pbmkgSUlJIHJlbW90ZSBjb250cm9sbGVyIGtleXRhYmxlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFudHRpIFBhbG9zYWFyaSA8Y3JvcGVAaWtpLmZpPgorICoKKyAqICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogICAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqICAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKi8KKworI2luY2x1ZGUgPG1lZGlhL3JjLW1hcC5oPgorCisvKiBNU0kgRElHSVZPWCBtaW5pIElJSSAqLworLyogVXNlcyBORUMgZXh0ZW5kZWQgMHg2MWQ2LiAqLworLyogVGhpcyByZW1vdGUgc2VlbXMgdG8gYmUgc2FtZSBhcyByYy1rd29ybGQtMzE1dS5jLiBBbnlob3csIGFkZCBuZXcgcmVtb3RlCisgICBzaW5jZSByYy1rd29ybGQtMzE1dS5jIGxhY2tzIE5FQyBleHRlbmRlZCBhZGRyZXNzIGJ5dGUuICovCitzdGF0aWMgc3RydWN0IHJjX21hcF90YWJsZSBtc2lfZGlnaXZveF9paWlbXSA9IHsKKwl7IDB4NjFkNjAxLCBLRVlfVklERU8gfSwgICAgICAgICAgIC8qIFNvdXJjZSAqLworCXsgMHg2MWQ2MDIsIEtFWV8zIH0sCisJeyAweDYxZDYwMywgS0VZX1BPV0VSIH0sICAgICAgICAgICAvKiBTaHV0RG93biAqLworCXsgMHg2MWQ2MDQsIEtFWV8xIH0sCisJeyAweDYxZDYwNSwgS0VZXzUgfSwKKwl7IDB4NjFkNjA2LCBLRVlfNiB9LAorCXsgMHg2MWQ2MDcsIEtFWV9DSEFOTkVMRE9XTiB9LCAgICAgLyogQ0gtICovCisJeyAweDYxZDYwOCwgS0VZXzIgfSwKKwl7IDB4NjFkNjA5LCBLRVlfQ0hBTk5FTFVQIH0sICAgICAgIC8qIENIKyAqLworCXsgMHg2MWQ2MGEsIEtFWV85IH0sCisJeyAweDYxZDYwYiwgS0VZX1pPT00gfSwgICAgICAgICAgICAvKiBab29tICovCisJeyAweDYxZDYwYywgS0VZXzcgfSwKKwl7IDB4NjFkNjBkLCBLRVlfOCB9LAorCXsgMHg2MWQ2MGUsIEtFWV9WT0xVTUVVUCB9LCAgICAgICAgLyogVm9sKyAqLworCXsgMHg2MWQ2MGYsIEtFWV80IH0sCisJeyAweDYxZDYxMCwgS0VZX0VTQyB9LCAgICAgICAgICAgICAvKiBbYmFjayB1cCBhcnJvd10gKi8KKwl7IDB4NjFkNjExLCBLRVlfMCB9LAorCXsgMHg2MWQ2MTIsIEtFWV9PSyB9LCAgICAgICAgICAgICAgLyogW2VudGVyIGFycm93XSAqLworCXsgMHg2MWQ2MTMsIEtFWV9WT0xVTUVET1dOIH0sICAgICAgLyogVm9sLSAqLworCXsgMHg2MWQ2MTQsIEtFWV9SRUNPUkQgfSwgICAgICAgICAgLyogUmVjICovCisJeyAweDYxZDYxNSwgS0VZX1NUT1AgfSwgICAgICAgICAgICAvKiBTdG9wICovCisJeyAweDYxZDYxNiwgS0VZX1BMQVkgfSwgICAgICAgICAgICAvKiBQbGF5ICovCisJeyAweDYxZDYxNywgS0VZX01VVEUgfSwgICAgICAgICAgICAvKiBNdXRlICovCisJeyAweDYxZDYxOCwgS0VZX1VQIH0sCisJeyAweDYxZDYxOSwgS0VZX0RPV04gfSwKKwl7IDB4NjFkNjFhLCBLRVlfTEVGVCB9LAorCXsgMHg2MWQ2MWIsIEtFWV9SSUdIVCB9LAorCXsgMHg2MWQ2MWMsIEtFWV9SRUQgfSwKKwl7IDB4NjFkNjFkLCBLRVlfR1JFRU4gfSwKKwl7IDB4NjFkNjFlLCBLRVlfWUVMTE9XIH0sCisJeyAweDYxZDYxZiwgS0VZX0JMVUUgfSwKKwl7IDB4NjFkNjQzLCBLRVlfUE9XRVIyIH0sICAgICAgICAgIC8qIFtyZWQgcG93ZXIgYnV0dG9uXSAqLworfTsKKworc3RhdGljIHN0cnVjdCByY19tYXBfbGlzdCBtc2lfZGlnaXZveF9paWlfbWFwID0geworCS5tYXAgPSB7CisJCS5zY2FuICAgID0gbXNpX2RpZ2l2b3hfaWlpLAorCQkuc2l6ZSAgICA9IEFSUkFZX1NJWkUobXNpX2RpZ2l2b3hfaWlpKSwKKwkJLnJjX3R5cGUgPSBSQ19UWVBFX05FQywKKwkJLm5hbWUgICAgPSBSQ19NQVBfTVNJX0RJR0lWT1hfSUlJLAorCX0KK307CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfcmNfbWFwX21zaV9kaWdpdm94X2lpaSh2b2lkKQoreworCXJldHVybiByY19tYXBfcmVnaXN0ZXIoJm1zaV9kaWdpdm94X2lpaV9tYXApOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yY19tYXBfbXNpX2RpZ2l2b3hfaWlpKHZvaWQpCit7CisJcmNfbWFwX3VucmVnaXN0ZXIoJm1zaV9kaWdpdm94X2lpaV9tYXApOworfQorCittb2R1bGVfaW5pdChpbml0X3JjX21hcF9tc2lfZGlnaXZveF9paWkpCittb2R1bGVfZXhpdChleGl0X3JjX21hcF9tc2lfZGlnaXZveF9paWkpCisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkFudHRpIFBhbG9zYWFyaSA8Y3JvcGVAaWtpLmZpPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLW1zaS10dmFueXdoZXJlLXBsdXMuYyBiL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1tc2ktdHZhbnl3aGVyZS1wbHVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE4ZmQwYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1tc2ktdHZhbnl3aGVyZS1wbHVzLmMKQEAgLTAsMCArMSwxMjMgQEAKKy8qIG1zaS10dmFueXdoZXJlLXBsdXMuaCAtIEtleXRhYmxlIGZvciBtc2lfdHZhbnl3aGVyZV9wbHVzIFJlbW90ZSBDb250cm9sbGVyCisgKgorICoga2V5bWFwIGltcG9ydGVkIGZyb20gaXIta2V5bWFwcy5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPG1lZGlhL3JjLW1hcC5oPgorCisvKgorICBLZXljb2RlcyBmb3IgcmVtb3RlIG9uIHRoZSBNU0kgVFZAbnl3aGVyZSBQbHVzLiBUaGUgY29udHJvbGxlciBJQyBvbiB0aGUgY2FyZAorICBpcyBtYXJrZWQgIktTMDAzIi4gVGhlIGNvbnRyb2xsZXIgaXMgSTJDIGF0IGFkZHJlc3MgMHgzMCwgYnV0IGRvZXMgbm90IHNlZW0KKyAgdG8gcmVzcG9uZCB0byBwcm9iZXMgdW50aWwgYSByZWFkIGlzIHBlcmZvcm1lZCBmcm9tIGEgdmFsaWQgZGV2aWNlLgorICBJIGRvbid0IGtub3cgd2h5Li4uCisKKyAgTm90ZTogVGhpcyByZW1vdGUgbWF5IGJlIG9mIHNpbWlsYXIgb3IgaWRlbnRpY2FsIGRlc2lnbiB0byB0aGUKKyAgUGl4ZWx2aWV3IHJlbW90ZSAoPykuICBUaGUgcmF3IGNvZGVzIGFuZCBkdXBsaWNhdGUgYnV0dG9uIGNvZGVzCisgIGFwcGVhciB0byBiZSB0aGUgc2FtZS4KKworICBIZW5yeSBXb25nIDxoZW5yeUBzdHVmZmVkY293Lm5ldD4KKyAgU29tZSBjaGFuZ2VzIHRvIGZvcm1hdHRpbmcgYW5kIGtleWNvZGVzIGJ5IE1hcmsgU2NodWx0eiA8bjl4bWpAeWFob28uY29tPgorKi8KKworc3RhdGljIHN0cnVjdCByY19tYXBfdGFibGUgbXNpX3R2YW55d2hlcmVfcGx1c1tdID0geworCisvKiAgLS0tLSBSZW1vdGUgQnV0dG9uIExheW91dCAtLS0tCisKKyAgICBQT1dFUiAgIFNPVVJDRSAgU0NBTiAgICBNVVRFCisgICAgVFYvRk0gICAxICAgICAgIDIgICAgICAgMworICAgIHw+ICAgICAgNCAgICAgICA1ICAgICAgIDYKKyAgICA8fCAgICAgIDcgICAgICAgOCAgICAgICA5CisgICAgXl5VUCAgICAwICAgICAgICsgICAgICAgUkVDQUxMCisgICAgdnZETiAgICBSRUNPUkQgIFNUT1AgICAgUExBWQorCisJTUlOSU1JWkUgICAgICAgICAgWk9PTQorCisJCSAgQ0grCisgICAgICBWT0wtICAgICAgICAgICAgICAgICAgIFZPTCsKKwkJICBDSC0KKworCVNOQVBTSE9UICAgICAgICAgICBNVFMKKworICAgICA8PCAgICAgIEZVTkMgICAgPj4gICAgIFJFU0VUCisqLworCisJeyAweDAxLCBLRVlfMSB9LAkJLyogMSAqLworCXsgMHgwYiwgS0VZXzIgfSwJCS8qIDIgKi8KKwl7IDB4MWIsIEtFWV8zIH0sCQkvKiAzICovCisJeyAweDA1LCBLRVlfNCB9LAkJLyogNCAqLworCXsgMHgwOSwgS0VZXzUgfSwJCS8qIDUgKi8KKwl7IDB4MTUsIEtFWV82IH0sCQkvKiA2ICovCisJeyAweDA2LCBLRVlfNyB9LAkJLyogNyAqLworCXsgMHgwYSwgS0VZXzggfSwJCS8qIDggKi8KKwl7IDB4MTIsIEtFWV85IH0sCQkvKiA5ICovCisJeyAweDAyLCBLRVlfMCB9LAkJLyogMCAqLworCXsgMHgxMCwgS0VZX0tQUExVUyB9LAkJLyogKyAqLworCXsgMHgxMywgS0VZX0FHQUlOIH0sCQkvKiBSZWNhbGwgKi8KKworCXsgMHgxZSwgS0VZX1BPV0VSIH0sCQkvKiBQb3dlciAqLworCXsgMHgwNywgS0VZX1RVTkVSIH0sCQkvKiBTb3VyY2UgKi8KKwl7IDB4MWMsIEtFWV9TRUFSQ0ggfSwJCS8qIFNjYW4gKi8KKwl7IDB4MTgsIEtFWV9NVVRFIH0sCQkvKiBNdXRlICovCisKKwl7IDB4MDMsIEtFWV9SQURJTyB9LAkJLyogVFYvRk0gKi8KKwkvKiBUaGUgbmV4dCBmb3VyIGtleXMgYXJlIGR1cGxpY2F0ZXMgdGhhdCBhcHBlYXIgdG8gc2VuZCB0aGUKKwkgICBzYW1lIElSIGNvZGUgYXMgQ2grLCBDaC0sID4+LCBhbmQgPDwgLiAgVGhlIHJhdyBjb2RlIGFzc2lnbmVkCisJICAgdG8gdGhlbSBpcyB0aGUgYWN0dWFsIGNvZGUgKyAweDIwIC0gdGhleSB3aWxsIG5ldmVyIGJlCisJICAgZGV0ZWN0ZWQgYXMgc3VjaCB1bmxlc3Mgc29tZSB3YXkgaXMgZGlzY292ZXJlZCB0byBkaXN0aW5ndWlzaAorCSAgIHRoZXNlIGJ1dHRvbnMgZnJvbSB0aG9zZSB0aGF0IGhhdmUgdGhlIHNhbWUgY29kZS4gKi8KKwl7IDB4M2YsIEtFWV9SSUdIVCB9LAkJLyogfD4gYW5kIENoKyAqLworCXsgMHgzNywgS0VZX0xFRlQgfSwJCS8qIDx8IGFuZCBDaC0gKi8KKwl7IDB4MmMsIEtFWV9VUCB9LAkJLyogXl5VcCBhbmQgPj4gKi8KKwl7IDB4MjQsIEtFWV9ET1dOIH0sCQkvKiB2dkRuIGFuZCA8PCAqLworCisJeyAweDAwLCBLRVlfUkVDT1JEIH0sCQkvKiBSZWNvcmQgKi8KKwl7IDB4MDgsIEtFWV9TVE9QIH0sCQkvKiBTdG9wICovCisJeyAweDExLCBLRVlfUExBWSB9LAkJLyogUGxheSAqLworCisJeyAweDBmLCBLRVlfQ0xPU0UgfSwJCS8qIE1pbmltaXplICovCisJeyAweDE5LCBLRVlfWk9PTSB9LAkJLyogWm9vbSAqLworCXsgMHgxYSwgS0VZX0NBTUVSQSB9LAkJLyogU25hcHNob3QgKi8KKwl7IDB4MGQsIEtFWV9MQU5HVUFHRSB9LAkJLyogTVRTICovCisKKwl7IDB4MTQsIEtFWV9WT0xVTUVET1dOIH0sCS8qIFZvbC0gKi8KKwl7IDB4MTYsIEtFWV9WT0xVTUVVUCB9LAkJLyogVm9sKyAqLworCXsgMHgxNywgS0VZX0NIQU5ORUxET1dOIH0sCS8qIENoLSAqLworCXsgMHgxZiwgS0VZX0NIQU5ORUxVUCB9LAkvKiBDaCsgKi8KKworCXsgMHgwNCwgS0VZX1JFV0lORCB9LAkJLyogPDwgKi8KKwl7IDB4MGUsIEtFWV9NRU5VIH0sCQkvKiBGdW5jdGlvbiAqLworCXsgMHgwYywgS0VZX0ZBU1RGT1JXQVJEIH0sCS8qID4+ICovCisJeyAweDFkLCBLRVlfUkVTVEFSVCB9LAkJLyogUmVzZXQgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgcmNfbWFwX2xpc3QgbXNpX3R2YW55d2hlcmVfcGx1c19tYXAgPSB7CisJLm1hcCA9IHsKKwkJLnNjYW4gICAgPSBtc2lfdHZhbnl3aGVyZV9wbHVzLAorCQkuc2l6ZSAgICA9IEFSUkFZX1NJWkUobXNpX3R2YW55d2hlcmVfcGx1cyksCisJCS5yY190eXBlID0gUkNfVFlQRV9VTktOT1dOLAkvKiBMZWdhY3kgSVIgdHlwZSAqLworCQkubmFtZSAgICA9IFJDX01BUF9NU0lfVFZBTllXSEVSRV9QTFVTLAorCX0KK307CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfcmNfbWFwX21zaV90dmFueXdoZXJlX3BsdXModm9pZCkKK3sKKwlyZXR1cm4gcmNfbWFwX3JlZ2lzdGVyKCZtc2lfdHZhbnl3aGVyZV9wbHVzX21hcCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3JjX21hcF9tc2lfdHZhbnl3aGVyZV9wbHVzKHZvaWQpCit7CisJcmNfbWFwX3VucmVnaXN0ZXIoJm1zaV90dmFueXdoZXJlX3BsdXNfbWFwKTsKK30KKworbW9kdWxlX2luaXQoaW5pdF9yY19tYXBfbXNpX3R2YW55d2hlcmVfcGx1cykKK21vZHVsZV9leGl0KGV4aXRfcmNfbWFwX21zaV90dmFueXdoZXJlX3BsdXMpCisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIk1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLW1zaS10dmFueXdoZXJlLmMgYi9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtbXNpLXR2YW55d2hlcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGIzN2ZhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLW1zaS10dmFueXdoZXJlLmMKQEAgLTAsMCArMSw2OSBAQAorLyogbXNpLXR2YW55d2hlcmUuaCAtIEtleXRhYmxlIGZvciBtc2lfdHZhbnl3aGVyZSBSZW1vdGUgQ29udHJvbGxlcgorICoKKyAqIGtleW1hcCBpbXBvcnRlZCBmcm9tIGlyLWtleW1hcHMuYworICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBieSBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxtZWRpYS9yYy1tYXAuaD4KKworLyogTVNJIFRWQG55d2hlcmUgTUFTVEVSIHJlbW90ZSAqLworCitzdGF0aWMgc3RydWN0IHJjX21hcF90YWJsZSBtc2lfdHZhbnl3aGVyZVtdID0geworCS8qIEtleXMgMCB0byA5ICovCisJeyAweDAwLCBLRVlfMCB9LAorCXsgMHgwMSwgS0VZXzEgfSwKKwl7IDB4MDIsIEtFWV8yIH0sCisJeyAweDAzLCBLRVlfMyB9LAorCXsgMHgwNCwgS0VZXzQgfSwKKwl7IDB4MDUsIEtFWV81IH0sCisJeyAweDA2LCBLRVlfNiB9LAorCXsgMHgwNywgS0VZXzcgfSwKKwl7IDB4MDgsIEtFWV84IH0sCisJeyAweDA5LCBLRVlfOSB9LAorCisJeyAweDBjLCBLRVlfTVVURSB9LAorCXsgMHgwZiwgS0VZX1NDUkVFTiB9LAkJLyogRnVsbCBTY3JlZW4gKi8KKwl7IDB4MTAsIEtFWV9GTiB9LAkJLyogRnVudGlvbiAqLworCXsgMHgxMSwgS0VZX1RJTUUgfSwJCS8qIFRpbWUgc2hpZnQgKi8KKwl7IDB4MTIsIEtFWV9QT1dFUiB9LAorCXsgMHgxMywgS0VZX01FRElBIH0sCQkvKiBNVFMgKi8KKwl7IDB4MTQsIEtFWV9TTE9XIH0sCisJeyAweDE2LCBLRVlfUkVXSU5EIH0sCQkvKiBiYWNrd2FyZCA8PCAqLworCXsgMHgxNywgS0VZX0VOVEVSIH0sCQkvKiBSZXR1cm4gKi8KKwl7IDB4MTgsIEtFWV9GQVNURk9SV0FSRCB9LAkvKiBmb3J3YXJkID4+ICovCisJeyAweDFhLCBLRVlfQ0hBTk5FTFVQIH0sCisJeyAweDFiLCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4MWUsIEtFWV9DSEFOTkVMRE9XTiB9LAorCXsgMHgxZiwgS0VZX1ZPTFVNRURPV04gfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmNfbWFwX2xpc3QgbXNpX3R2YW55d2hlcmVfbWFwID0geworCS5tYXAgPSB7CisJCS5zY2FuICAgID0gbXNpX3R2YW55d2hlcmUsCisJCS5zaXplICAgID0gQVJSQVlfU0laRShtc2lfdHZhbnl3aGVyZSksCisJCS5yY190eXBlID0gUkNfVFlQRV9VTktOT1dOLAkvKiBMZWdhY3kgSVIgdHlwZSAqLworCQkubmFtZSAgICA9IFJDX01BUF9NU0lfVFZBTllXSEVSRSwKKwl9Cit9OworCitzdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcF9tc2lfdHZhbnl3aGVyZSh2b2lkKQoreworCXJldHVybiByY19tYXBfcmVnaXN0ZXIoJm1zaV90dmFueXdoZXJlX21hcCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3JjX21hcF9tc2lfdHZhbnl3aGVyZSh2b2lkKQoreworCXJjX21hcF91bnJlZ2lzdGVyKCZtc2lfdHZhbnl3aGVyZV9tYXApOworfQorCittb2R1bGVfaW5pdChpbml0X3JjX21hcF9tc2lfdHZhbnl3aGVyZSkKK21vZHVsZV9leGl0KGV4aXRfcmNfbWFwX21zaV90dmFueXdoZXJlKQorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1uZWJ1bGEuYyBiL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1uZWJ1bGEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTZmMDc3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLW5lYnVsYS5jCkBAIC0wLDAgKzEsOTYgQEAKKy8qIG5lYnVsYS5oIC0gS2V5dGFibGUgZm9yIG5lYnVsYSBSZW1vdGUgQ29udHJvbGxlcgorICoKKyAqIGtleW1hcCBpbXBvcnRlZCBmcm9tIGlyLWtleW1hcHMuYworICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBieSBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxtZWRpYS9yYy1tYXAuaD4KKworc3RhdGljIHN0cnVjdCByY19tYXBfdGFibGUgbmVidWxhW10gPSB7CisJeyAweDAwLCBLRVlfMCB9LAorCXsgMHgwMSwgS0VZXzEgfSwKKwl7IDB4MDIsIEtFWV8yIH0sCisJeyAweDAzLCBLRVlfMyB9LAorCXsgMHgwNCwgS0VZXzQgfSwKKwl7IDB4MDUsIEtFWV81IH0sCisJeyAweDA2LCBLRVlfNiB9LAorCXsgMHgwNywgS0VZXzcgfSwKKwl7IDB4MDgsIEtFWV84IH0sCisJeyAweDA5LCBLRVlfOSB9LAorCXsgMHgwYSwgS0VZX1RWIH0sCisJeyAweDBiLCBLRVlfQVVYIH0sCisJeyAweDBjLCBLRVlfRFZEIH0sCisJeyAweDBkLCBLRVlfUE9XRVIgfSwKKwl7IDB4MGUsIEtFWV9NSFAgfSwJLyogbGFiZWxsZWQgJ1BpY3R1cmUnICovCisJeyAweDBmLCBLRVlfQVVESU8gfSwKKwl7IDB4MTAsIEtFWV9JTkZPIH0sCisJeyAweDExLCBLRVlfRjEzIH0sCS8qIDE2OjkgKi8KKwl7IDB4MTIsIEtFWV9GMTQgfSwJLyogMTQ6OSAqLworCXsgMHgxMywgS0VZX0VQRyB9LAorCXsgMHgxNCwgS0VZX0VYSVQgfSwKKwl7IDB4MTUsIEtFWV9NRU5VIH0sCisJeyAweDE2LCBLRVlfVVAgfSwKKwl7IDB4MTcsIEtFWV9ET1dOIH0sCisJeyAweDE4LCBLRVlfTEVGVCB9LAorCXsgMHgxOSwgS0VZX1JJR0hUIH0sCisJeyAweDFhLCBLRVlfRU5URVIgfSwKKwl7IDB4MWIsIEtFWV9DSEFOTkVMVVAgfSwKKwl7IDB4MWMsIEtFWV9DSEFOTkVMRE9XTiB9LAorCXsgMHgxZCwgS0VZX1ZPTFVNRVVQIH0sCisJeyAweDFlLCBLRVlfVk9MVU1FRE9XTiB9LAorCXsgMHgxZiwgS0VZX1JFRCB9LAorCXsgMHgyMCwgS0VZX0dSRUVOIH0sCisJeyAweDIxLCBLRVlfWUVMTE9XIH0sCisJeyAweDIyLCBLRVlfQkxVRSB9LAorCXsgMHgyMywgS0VZX1NVQlRJVExFIH0sCisJeyAweDI0LCBLRVlfRjE1IH0sCS8qIEFEICovCisJeyAweDI1LCBLRVlfVEVYVCB9LAorCXsgMHgyNiwgS0VZX01VVEUgfSwKKwl7IDB4MjcsIEtFWV9SRVdJTkQgfSwKKwl7IDB4MjgsIEtFWV9TVE9QIH0sCisJeyAweDI5LCBLRVlfUExBWSB9LAorCXsgMHgyYSwgS0VZX0ZBU1RGT1JXQVJEIH0sCisJeyAweDJiLCBLRVlfRjE2IH0sCS8qIGNoYXB0ZXIgKi8KKwl7IDB4MmMsIEtFWV9QQVVTRSB9LAorCXsgMHgyZCwgS0VZX1BMQVkgfSwKKwl7IDB4MmUsIEtFWV9SRUNPUkQgfSwKKwl7IDB4MmYsIEtFWV9GMTcgfSwJLyogcGljdHVyZSBpbiBwaWN0dXJlICovCisJeyAweDMwLCBLRVlfS1BQTFVTIH0sCS8qIHpvb20gaW4gKi8KKwl7IDB4MzEsIEtFWV9LUE1JTlVTIH0sCS8qIHpvb20gb3V0ICovCisJeyAweDMyLCBLRVlfRjE4IH0sCS8qIGNhcHR1cmUgKi8KKwl7IDB4MzMsIEtFWV9GMTkgfSwJLyogd2ViICovCisJeyAweDM0LCBLRVlfRU1BSUwgfSwKKwl7IDB4MzUsIEtFWV9QSE9ORSB9LAorCXsgMHgzNiwgS0VZX1BDIH0sCit9OworCitzdGF0aWMgc3RydWN0IHJjX21hcF9saXN0IG5lYnVsYV9tYXAgPSB7CisJLm1hcCA9IHsKKwkJLnNjYW4gICAgPSBuZWJ1bGEsCisJCS5zaXplICAgID0gQVJSQVlfU0laRShuZWJ1bGEpLAorCQkucmNfdHlwZSA9IFJDX1RZUEVfVU5LTk9XTiwJLyogTGVnYWN5IElSIHR5cGUgKi8KKwkJLm5hbWUgICAgPSBSQ19NQVBfTkVCVUxBLAorCX0KK307CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfcmNfbWFwX25lYnVsYSh2b2lkKQoreworCXJldHVybiByY19tYXBfcmVnaXN0ZXIoJm5lYnVsYV9tYXApOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yY19tYXBfbmVidWxhKHZvaWQpCit7CisJcmNfbWFwX3VucmVnaXN0ZXIoJm5lYnVsYV9tYXApOworfQorCittb2R1bGVfaW5pdChpbml0X3JjX21hcF9uZWJ1bGEpCittb2R1bGVfZXhpdChleGl0X3JjX21hcF9uZWJ1bGEpCisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIk1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLW5lYy10ZXJyYXRlYy1jaW5lcmd5LXhzLmMgYi9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtbmVjLXRlcnJhdGVjLWNpbmVyZ3kteHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmYxMTRjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLW5lYy10ZXJyYXRlYy1jaW5lcmd5LXhzLmMKQEAgLTAsMCArMSwxMDUgQEAKKy8qIG5lYy10ZXJyYXRlYy1jaW5lcmd5LXhzLmggLSBLZXl0YWJsZSBmb3IgbmVjX3RlcnJhdGVjX2NpbmVyZ3lfeHMgUmVtb3RlIENvbnRyb2xsZXIKKyAqCisgKiBrZXltYXAgaW1wb3J0ZWQgZnJvbSBpci1rZXltYXBzLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgYnkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bWVkaWEvcmMtbWFwLmg+CisKKy8qIFRlcnJhdGVjIENpbmVyZ3kgSHlicmlkIFQgVVNCIFhTIEZNCisgICBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4KKyAqLworCitzdGF0aWMgc3RydWN0IHJjX21hcF90YWJsZSBuZWNfdGVycmF0ZWNfY2luZXJneV94c1tdID0geworCXsgMHgxNDQxLCBLRVlfSE9NRX0sCisJeyAweDE0MDEsIEtFWV9QT1dFUjJ9LAorCisJeyAweDE0NDIsIEtFWV9NRU5VfSwJCS8qIERWRCBtZW51ICovCisJeyAweDE0NDMsIEtFWV9TVUJUSVRMRX0sCisJeyAweDE0NDQsIEtFWV9URVhUfSwJCS8qIFRlbGV0ZXh0ICovCisJeyAweDE0NDUsIEtFWV9ERUxFVEV9LAorCisJeyAweDE0MDIsIEtFWV8xfSwKKwl7IDB4MTQwMywgS0VZXzJ9LAorCXsgMHgxNDA0LCBLRVlfM30sCisJeyAweDE0MDUsIEtFWV80fSwKKwl7IDB4MTQwNiwgS0VZXzV9LAorCXsgMHgxNDA3LCBLRVlfNn0sCisJeyAweDE0MDgsIEtFWV83fSwKKwl7IDB4MTQwOSwgS0VZXzh9LAorCXsgMHgxNDBhLCBLRVlfOX0sCisJeyAweDE0MGMsIEtFWV8wfSwKKworCXsgMHgxNDBiLCBLRVlfVFVORVJ9LAkJLyogQVYgKi8KKwl7IDB4MTQwZCwgS0VZX01PREV9LAkJLyogQS5CICovCisKKwl7IDB4MTQ0NiwgS0VZX1RWfSwKKwl7IDB4MTQ0NywgS0VZX0RWRH0sCisJeyAweDE0NDksIEtFWV9WSURFT30sCisJeyAweDE0NGEsIEtFWV9SQURJT30sCQkvKiBNdXNpYyAqLworCXsgMHgxNDRiLCBLRVlfQ0FNRVJBfSwJCS8qIFBJQyAqLworCisJeyAweDE0MTAsIEtFWV9VUH0sCisJeyAweDE0MTEsIEtFWV9MRUZUfSwKKwl7IDB4MTQxMiwgS0VZX09LfSwKKwl7IDB4MTQxMywgS0VZX1JJR0hUfSwKKwl7IDB4MTQxNCwgS0VZX0RPV059LAorCisJeyAweDE0MGYsIEtFWV9FUEd9LAorCXsgMHgxNDE2LCBLRVlfSU5GT30sCisJeyAweDE0NGQsIEtFWV9CQUNLU1BBQ0V9LAorCisJeyAweDE0MWMsIEtFWV9WT0xVTUVVUH0sCisJeyAweDE0MWUsIEtFWV9WT0xVTUVET1dOfSwKKworCXsgMHgxNDRjLCBLRVlfUExBWX0sCisJeyAweDE0MWQsIEtFWV9NVVRFfSwKKworCXsgMHgxNDFiLCBLRVlfQ0hBTk5FTFVQfSwKKwl7IDB4MTQxZiwgS0VZX0NIQU5ORUxET1dOfSwKKworCXsgMHgxNDE3LCBLRVlfUkVEfSwKKwl7IDB4MTQxOCwgS0VZX0dSRUVOfSwKKwl7IDB4MTQxOSwgS0VZX1lFTExPV30sCisJeyAweDE0MWEsIEtFWV9CTFVFfSwKKworCXsgMHgxNDU4LCBLRVlfUkVDT1JEfSwKKwl7IDB4MTQ0OCwgS0VZX1NUT1B9LAorCXsgMHgxNDQwLCBLRVlfUEFVU0V9LAorCisJeyAweDE0NTQsIEtFWV9MQVNUfSwKKwl7IDB4MTQ0ZSwgS0VZX1JFV0lORH0sCisJeyAweDE0NGYsIEtFWV9GQVNURk9SV0FSRH0sCisJeyAweDE0NWMsIEtFWV9ORVhUfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmNfbWFwX2xpc3QgbmVjX3RlcnJhdGVjX2NpbmVyZ3lfeHNfbWFwID0geworCS5tYXAgPSB7CisJCS5zY2FuICAgID0gbmVjX3RlcnJhdGVjX2NpbmVyZ3lfeHMsCisJCS5zaXplICAgID0gQVJSQVlfU0laRShuZWNfdGVycmF0ZWNfY2luZXJneV94cyksCisJCS5yY190eXBlID0gUkNfVFlQRV9ORUMsCisJCS5uYW1lICAgID0gUkNfTUFQX05FQ19URVJSQVRFQ19DSU5FUkdZX1hTLAorCX0KK307CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfcmNfbWFwX25lY190ZXJyYXRlY19jaW5lcmd5X3hzKHZvaWQpCit7CisJcmV0dXJuIHJjX21hcF9yZWdpc3RlcigmbmVjX3RlcnJhdGVjX2NpbmVyZ3lfeHNfbWFwKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGV4aXRfcmNfbWFwX25lY190ZXJyYXRlY19jaW5lcmd5X3hzKHZvaWQpCit7CisJcmNfbWFwX3VucmVnaXN0ZXIoJm5lY190ZXJyYXRlY19jaW5lcmd5X3hzX21hcCk7Cit9CisKK21vZHVsZV9pbml0KGluaXRfcmNfbWFwX25lY190ZXJyYXRlY19jaW5lcmd5X3hzKQorbW9kdWxlX2V4aXQoZXhpdF9yY19tYXBfbmVjX3RlcnJhdGVjX2NpbmVyZ3lfeHMpCisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIk1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLW5vcndvb2QuYyBiL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1ub3J3b29kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI5ZWU5ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1ub3J3b29kLmMKQEAgLTAsMCArMSw4NSBAQAorLyogbm9yd29vZC5oIC0gS2V5dGFibGUgZm9yIG5vcndvb2QgUmVtb3RlIENvbnRyb2xsZXIKKyAqCisgKiBrZXltYXAgaW1wb3J0ZWQgZnJvbSBpci1rZXltYXBzLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgYnkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bWVkaWEvcmMtbWFwLmg+CisKKy8qIE5vcndvb2QgTWljcm8gKG5vbi1Qcm8pIFRWIFR1bmVyCisgICBCeSBQZXRlciBOYXVsbHMgPHBldGVyQGNob2NreS5vcmc+CisgICBLZXkgY29tbWVudHMgYXJlIHRoZSBmdW5jdGlvbnMgZ2l2ZW4gaW4gdGhlIG1hbnVhbCAqLworCitzdGF0aWMgc3RydWN0IHJjX21hcF90YWJsZSBub3J3b29kW10gPSB7CisJLyogS2V5cyAwIHRvIDkgKi8KKwl7IDB4MjAsIEtFWV8wIH0sCisJeyAweDIxLCBLRVlfMSB9LAorCXsgMHgyMiwgS0VZXzIgfSwKKwl7IDB4MjMsIEtFWV8zIH0sCisJeyAweDI0LCBLRVlfNCB9LAorCXsgMHgyNSwgS0VZXzUgfSwKKwl7IDB4MjYsIEtFWV82IH0sCisJeyAweDI3LCBLRVlfNyB9LAorCXsgMHgyOCwgS0VZXzggfSwKKwl7IDB4MjksIEtFWV85IH0sCisKKwl7IDB4NzgsIEtFWV9UVU5FUiB9LAkJLyogVmlkZW8gU291cmNlICAgICAgICAqLworCXsgMHgyYywgS0VZX0VYSVQgfSwJCS8qIE9wZW4vQ2xvc2Ugc29mdHdhcmUgKi8KKwl7IDB4MmEsIEtFWV9TRUxFQ1QgfSwJCS8qIDIgRGlnaXQgU2VsZWN0ICAgICAgKi8KKwl7IDB4NjksIEtFWV9BR0FJTiB9LAkJLyogUmVjYWxsICAgICAgICAgICAgICAqLworCisJeyAweDMyLCBLRVlfQlJJR0hUTkVTU1VQIH0sCS8qIEJyaWdodG5lc3MgaW5jcmVhc2UgKi8KKwl7IDB4MzMsIEtFWV9CUklHSFRORVNTRE9XTiB9LAkvKiBCcmlnaHRuZXNzIGRlY3JlYXNlICovCisJeyAweDZiLCBLRVlfS1BQTFVTIH0sCQkvKiAobm90IG5hbWVkID4+Pj4+KSAgICovCisJeyAweDZjLCBLRVlfS1BNSU5VUyB9LAkJLyogKG5vdCBuYW1lZCA8PDw8PCkgICAqLworCisJeyAweDJkLCBLRVlfTVVURSB9LAkJLyogTXV0ZSAgICAgICAgICAgICAgICAqLworCXsgMHgzMCwgS0VZX1ZPTFVNRVVQIH0sCQkvKiBWb2x1bWUgdXAgICAgICAgICAgICovCisJeyAweDMxLCBLRVlfVk9MVU1FRE9XTiB9LAkvKiBWb2x1bWUgZG93biAgICAgICAgICovCisJeyAweDYwLCBLRVlfQ0hBTk5FTFVQIH0sCS8qIENoYW5uZWwgdXAgICAgICAgICAgKi8KKwl7IDB4NjEsIEtFWV9DSEFOTkVMRE9XTiB9LAkvKiBDaGFubmVsIGRvd24gICAgICAgICovCisKKwl7IDB4M2YsIEtFWV9SRUNPUkQgfSwJCS8qIFJlY29yZCAgICAgICAgICAgICAgKi8KKwl7IDB4MzcsIEtFWV9QTEFZIH0sCQkvKiBQbGF5ICAgICAgICAgICAgICAgICovCisJeyAweDM2LCBLRVlfUEFVU0UgfSwJCS8qIFBhdXNlICAgICAgICAgICAgICAgKi8KKwl7IDB4MmIsIEtFWV9TVE9QIH0sCQkvKiBTdG9wICAgICAgICAgICAgICAgICovCisJeyAweDY3LCBLRVlfRkFTVEZPUldBUkQgfSwJLyogRm93YXJkICAgICAgICAgICAgICAqLworCXsgMHg2NiwgS0VZX1JFV0lORCB9LAkJLyogUmV3aW5kICAgICAgICAgICAgICAqLworCXsgMHgzZSwgS0VZX1NFQVJDSCB9LAkJLyogQXV0byBTY2FuICAgICAgICAgICAqLworCXsgMHgyZSwgS0VZX0NBTUVSQSB9LAkJLyogQ2FwdHVyZSBWaWRlbyAgICAgICAqLworCXsgMHg2ZCwgS0VZX01FTlUgfSwJCS8qIFNob3cvSGlkZSBDb250cm9sICAgKi8KKwl7IDB4MmYsIEtFWV9aT09NIH0sCQkvKiBGdWxsIFNjcmVlbiAgICAgICAgICovCisJeyAweDM0LCBLRVlfUkFESU8gfSwJCS8qIEZNICAgICAgICAgICAgICAgICAgKi8KKwl7IDB4NjUsIEtFWV9QT1dFUiB9LAkJLyogQ29tcHV0ZXIgcG93ZXIgICAgICAqLworfTsKKworc3RhdGljIHN0cnVjdCByY19tYXBfbGlzdCBub3J3b29kX21hcCA9IHsKKwkubWFwID0geworCQkuc2NhbiAgICA9IG5vcndvb2QsCisJCS5zaXplICAgID0gQVJSQVlfU0laRShub3J3b29kKSwKKwkJLnJjX3R5cGUgPSBSQ19UWVBFX1VOS05PV04sCS8qIExlZ2FjeSBJUiB0eXBlICovCisJCS5uYW1lICAgID0gUkNfTUFQX05PUldPT0QsCisJfQorfTsKKworc3RhdGljIGludCBfX2luaXQgaW5pdF9yY19tYXBfbm9yd29vZCh2b2lkKQoreworCXJldHVybiByY19tYXBfcmVnaXN0ZXIoJm5vcndvb2RfbWFwKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGV4aXRfcmNfbWFwX25vcndvb2Qodm9pZCkKK3sKKwlyY19tYXBfdW5yZWdpc3Rlcigmbm9yd29vZF9tYXApOworfQorCittb2R1bGVfaW5pdChpbml0X3JjX21hcF9ub3J3b29kKQorbW9kdWxlX2V4aXQoZXhpdF9yY19tYXBfbm9yd29vZCkKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtbnBndGVjaC5jIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLW5wZ3RlY2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWE1ODhiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLW5wZ3RlY2guYwpAQCAtMCwwICsxLDgwIEBACisvKiBucGd0ZWNoLmggLSBLZXl0YWJsZSBmb3IgbnBndGVjaCBSZW1vdGUgQ29udHJvbGxlcgorICoKKyAqIGtleW1hcCBpbXBvcnRlZCBmcm9tIGlyLWtleW1hcHMuYworICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBieSBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxtZWRpYS9yYy1tYXAuaD4KKworc3RhdGljIHN0cnVjdCByY19tYXBfdGFibGUgbnBndGVjaFtdID0geworCXsgMHgxZCwgS0VZX1NXSVRDSFZJREVPTU9ERSB9LAkvKiBzd2l0Y2ggaW5wdXRzICovCisJeyAweDJhLCBLRVlfRlJPTlQgfSwKKworCXsgMHgzZSwgS0VZXzEgfSwKKwl7IDB4MDIsIEtFWV8yIH0sCisJeyAweDA2LCBLRVlfMyB9LAorCXsgMHgwYSwgS0VZXzQgfSwKKwl7IDB4MGUsIEtFWV81IH0sCisJeyAweDEyLCBLRVlfNiB9LAorCXsgMHgxNiwgS0VZXzcgfSwKKwl7IDB4MWEsIEtFWV84IH0sCisJeyAweDFlLCBLRVlfOSB9LAorCXsgMHgzYSwgS0VZXzAgfSwKKwl7IDB4MjIsIEtFWV9OVU1MT0NLIH0sCQkvKiAtLy0tICovCisJeyAweDIwLCBLRVlfUkVGUkVTSCB9LAorCisJeyAweDAzLCBLRVlfQlJJR0hUTkVTU0RPV04gfSwKKwl7IDB4MjgsIEtFWV9BVURJTyB9LAorCXsgMHgzYywgS0VZX0NIQU5ORUxVUCB9LAorCXsgMHgzZiwgS0VZX1ZPTFVNRURPV04gfSwKKwl7IDB4MmUsIEtFWV9NVVRFIH0sCisJeyAweDNiLCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4MDAsIEtFWV9DSEFOTkVMRE9XTiB9LAorCXsgMHgwNywgS0VZX0JSSUdIVE5FU1NVUCB9LAorCXsgMHgyYywgS0VZX1RFWFQgfSwKKworCXsgMHgzNywgS0VZX1JFQ09SRCB9LAorCXsgMHgxNywgS0VZX1BMQVkgfSwKKwl7IDB4MTMsIEtFWV9QQVVTRSB9LAorCXsgMHgyNiwgS0VZX1NUT1AgfSwKKwl7IDB4MTgsIEtFWV9GQVNURk9SV0FSRCB9LAorCXsgMHgxNCwgS0VZX1JFV0lORCB9LAorCXsgMHgzMywgS0VZX1pPT00gfSwKKwl7IDB4MzIsIEtFWV9LRVlCT0FSRCB9LAorCXsgMHgzMCwgS0VZX0dPVE8gfSwJCS8qIFBvaW50aW5nIGFycm93ICovCisJeyAweDM2LCBLRVlfTUFDUk8gfSwJCS8qIE1heGltaXplL01pbmltaXplICh5ZWxsb3cpICovCisJeyAweDBiLCBLRVlfUkFESU8gfSwKKwl7IDB4MTAsIEtFWV9QT1dFUiB9LAorCit9OworCitzdGF0aWMgc3RydWN0IHJjX21hcF9saXN0IG5wZ3RlY2hfbWFwID0geworCS5tYXAgPSB7CisJCS5zY2FuICAgID0gbnBndGVjaCwKKwkJLnNpemUgICAgPSBBUlJBWV9TSVpFKG5wZ3RlY2gpLAorCQkucmNfdHlwZSA9IFJDX1RZUEVfVU5LTk9XTiwJLyogTGVnYWN5IElSIHR5cGUgKi8KKwkJLm5hbWUgICAgPSBSQ19NQVBfTlBHVEVDSCwKKwl9Cit9OworCitzdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcF9ucGd0ZWNoKHZvaWQpCit7CisJcmV0dXJuIHJjX21hcF9yZWdpc3RlcigmbnBndGVjaF9tYXApOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yY19tYXBfbnBndGVjaCh2b2lkKQoreworCXJjX21hcF91bnJlZ2lzdGVyKCZucGd0ZWNoX21hcCk7Cit9CisKK21vZHVsZV9pbml0KGluaXRfcmNfbWFwX25wZ3RlY2gpCittb2R1bGVfZXhpdChleGl0X3JjX21hcF9ucGd0ZWNoKQorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1wY3R2LXNlZG5hLmMgYi9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtcGN0di1zZWRuYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNWFlNTkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtcGN0di1zZWRuYS5jCkBAIC0wLDAgKzEsODAgQEAKKy8qIHBjdHYtc2VkbmEuaCAtIEtleXRhYmxlIGZvciBwY3R2X3NlZG5hIFJlbW90ZSBDb250cm9sbGVyCisgKgorICoga2V5bWFwIGltcG9ydGVkIGZyb20gaXIta2V5bWFwcy5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPG1lZGlhL3JjLW1hcC5oPgorCisvKiBNYXBwaW5nIGZvciB0aGUgMjgga2V5IHJlbW90ZSBjb250cm9sIGFzIHNlZW4gYXQKKyAgIGh0dHA6Ly93d3cuc2VkbmFjb21wdXRlci5jb20vcGhvdG8vY2FyZGJ1cy10di5qcGcKKyAgIFBhdmVsIE1paGF5bG92IDxiaW5AYmFzaC5pbmZvPgorICAgQWxzbyBmb3IgdGhlIHJlbW90ZSBidW5kbGVkIHdpdGggS296dW1pIEtUVi0wMUMgY2FyZCAqLworCitzdGF0aWMgc3RydWN0IHJjX21hcF90YWJsZSBwY3R2X3NlZG5hW10gPSB7CisJeyAweDAwLCBLRVlfMCB9LAorCXsgMHgwMSwgS0VZXzEgfSwKKwl7IDB4MDIsIEtFWV8yIH0sCisJeyAweDAzLCBLRVlfMyB9LAorCXsgMHgwNCwgS0VZXzQgfSwKKwl7IDB4MDUsIEtFWV81IH0sCisJeyAweDA2LCBLRVlfNiB9LAorCXsgMHgwNywgS0VZXzcgfSwKKwl7IDB4MDgsIEtFWV84IH0sCisJeyAweDA5LCBLRVlfOSB9LAorCisJeyAweDBhLCBLRVlfQUdBSU4gfSwJLyogUmVjYWxsICovCisJeyAweDBiLCBLRVlfQ0hBTk5FTFVQIH0sCisJeyAweDBjLCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4MGQsIEtFWV9NT0RFIH0sCS8qIFN0ZXJlbyAqLworCXsgMHgwZSwgS0VZX1NUT1AgfSwKKwl7IDB4MGYsIEtFWV9QUkVWSU9VU1NPTkcgfSwKKwl7IDB4MTAsIEtFWV9aT09NIH0sCisJeyAweDExLCBLRVlfVFVORVIgfSwJLyogU291cmNlICovCisJeyAweDEyLCBLRVlfUE9XRVIgfSwKKwl7IDB4MTMsIEtFWV9NVVRFIH0sCisJeyAweDE1LCBLRVlfQ0hBTk5FTERPV04gfSwKKwl7IDB4MTgsIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweDE5LCBLRVlfQ0FNRVJBIH0sCS8qIFNuYXBzaG90ICovCisJeyAweDFhLCBLRVlfTkVYVFNPTkcgfSwKKwl7IDB4MWIsIEtFWV9USU1FIH0sCS8qIFRpbWUgU2hpZnQgKi8KKwl7IDB4MWMsIEtFWV9SQURJTyB9LAkvKiBGTSBSYWRpbyAqLworCXsgMHgxZCwgS0VZX1JFQ09SRCB9LAorCXsgMHgxZSwgS0VZX1BBVVNFIH0sCisJLyogYWRkaXRpb25hbCBjb2RlcyBmb3IgS296dW1pJ3MgcmVtb3RlICovCisJeyAweDE0LCBLRVlfSU5GTyB9LAkvKiBPU0QgKi8KKwl7IDB4MTYsIEtFWV9PSyB9LAkvKiBPSyAqLworCXsgMHgxNywgS0VZX0RJR0lUUyB9LAkvKiBQbHVzICovCisJeyAweDFmLCBLRVlfUExBWSB9LAkvKiBQbGF5ICovCit9OworCitzdGF0aWMgc3RydWN0IHJjX21hcF9saXN0IHBjdHZfc2VkbmFfbWFwID0geworCS5tYXAgPSB7CisJCS5zY2FuICAgID0gcGN0dl9zZWRuYSwKKwkJLnNpemUgICAgPSBBUlJBWV9TSVpFKHBjdHZfc2VkbmEpLAorCQkucmNfdHlwZSA9IFJDX1RZUEVfVU5LTk9XTiwJLyogTGVnYWN5IElSIHR5cGUgKi8KKwkJLm5hbWUgICAgPSBSQ19NQVBfUENUVl9TRUROQSwKKwl9Cit9OworCitzdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcF9wY3R2X3NlZG5hKHZvaWQpCit7CisJcmV0dXJuIHJjX21hcF9yZWdpc3RlcigmcGN0dl9zZWRuYV9tYXApOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yY19tYXBfcGN0dl9zZWRuYSh2b2lkKQoreworCXJjX21hcF91bnJlZ2lzdGVyKCZwY3R2X3NlZG5hX21hcCk7Cit9CisKK21vZHVsZV9pbml0KGluaXRfcmNfbWFwX3BjdHZfc2VkbmEpCittb2R1bGVfZXhpdChleGl0X3JjX21hcF9wY3R2X3NlZG5hKQorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1waW5uYWNsZS1jb2xvci5jIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLXBpbm5hY2xlLWNvbG9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNiOGM1MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1waW5uYWNsZS1jb2xvci5jCkBAIC0wLDAgKzEsOTQgQEAKKy8qIHBpbm5hY2xlLWNvbG9yLmggLSBLZXl0YWJsZSBmb3IgcGlubmFjbGVfY29sb3IgUmVtb3RlIENvbnRyb2xsZXIKKyAqCisgKiBrZXltYXAgaW1wb3J0ZWQgZnJvbSBpci1rZXltYXBzLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgYnkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bWVkaWEvcmMtbWFwLmg+CisKK3N0YXRpYyBzdHJ1Y3QgcmNfbWFwX3RhYmxlIHBpbm5hY2xlX2NvbG9yW10gPSB7CisJeyAweDU5LCBLRVlfTVVURSB9LAorCXsgMHg0YSwgS0VZX1BPV0VSIH0sCisKKwl7IDB4MTgsIEtFWV9URVhUIH0sCisJeyAweDI2LCBLRVlfVFYgfSwKKwl7IDB4M2QsIEtFWV9QUklOVCB9LAorCisJeyAweDQ4LCBLRVlfUkVEIH0sCisJeyAweDA0LCBLRVlfR1JFRU4gfSwKKwl7IDB4MTEsIEtFWV9ZRUxMT1cgfSwKKwl7IDB4MDAsIEtFWV9CTFVFIH0sCisKKwl7IDB4MmQsIEtFWV9WT0xVTUVVUCB9LAorCXsgMHgxZSwgS0VZX1ZPTFVNRURPV04gfSwKKworCXsgMHg0OSwgS0VZX01FTlUgfSwKKworCXsgMHgxNiwgS0VZX0NIQU5ORUxVUCB9LAorCXsgMHgxNywgS0VZX0NIQU5ORUxET1dOIH0sCisKKwl7IDB4MjAsIEtFWV9VUCB9LAorCXsgMHgyMSwgS0VZX0RPV04gfSwKKwl7IDB4MjIsIEtFWV9MRUZUIH0sCisJeyAweDIzLCBLRVlfUklHSFQgfSwKKwl7IDB4MGQsIEtFWV9TRUxFQ1QgfSwKKworCXsgMHgwOCwgS0VZX0JBQ0sgfSwKKwl7IDB4MDcsIEtFWV9SRUZSRVNIIH0sCisKKwl7IDB4MmYsIEtFWV9aT09NIH0sCisJeyAweDI5LCBLRVlfUkVDT1JEIH0sCisKKwl7IDB4NGIsIEtFWV9QQVVTRSB9LAorCXsgMHg0ZCwgS0VZX1JFV0lORCB9LAorCXsgMHgyZSwgS0VZX1BMQVkgfSwKKwl7IDB4NGUsIEtFWV9GT1JXQVJEIH0sCisJeyAweDUzLCBLRVlfUFJFVklPVVMgfSwKKwl7IDB4NGMsIEtFWV9TVE9QIH0sCisJeyAweDU0LCBLRVlfTkVYVCB9LAorCisJeyAweDY5LCBLRVlfMCB9LAorCXsgMHg2YSwgS0VZXzEgfSwKKwl7IDB4NmIsIEtFWV8yIH0sCisJeyAweDZjLCBLRVlfMyB9LAorCXsgMHg2ZCwgS0VZXzQgfSwKKwl7IDB4NmUsIEtFWV81IH0sCisJeyAweDZmLCBLRVlfNiB9LAorCXsgMHg3MCwgS0VZXzcgfSwKKwl7IDB4NzEsIEtFWV84IH0sCisJeyAweDcyLCBLRVlfOSB9LAorCisJeyAweDc0LCBLRVlfQ0hBTk5FTCB9LAorCXsgMHgwYSwgS0VZX0JBQ0tTUEFDRSB9LAorfTsKKworc3RhdGljIHN0cnVjdCByY19tYXBfbGlzdCBwaW5uYWNsZV9jb2xvcl9tYXAgPSB7CisJLm1hcCA9IHsKKwkJLnNjYW4gICAgPSBwaW5uYWNsZV9jb2xvciwKKwkJLnNpemUgICAgPSBBUlJBWV9TSVpFKHBpbm5hY2xlX2NvbG9yKSwKKwkJLnJjX3R5cGUgPSBSQ19UWVBFX1VOS05PV04sCS8qIExlZ2FjeSBJUiB0eXBlICovCisJCS5uYW1lICAgID0gUkNfTUFQX1BJTk5BQ0xFX0NPTE9SLAorCX0KK307CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfcmNfbWFwX3Bpbm5hY2xlX2NvbG9yKHZvaWQpCit7CisJcmV0dXJuIHJjX21hcF9yZWdpc3RlcigmcGlubmFjbGVfY29sb3JfbWFwKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGV4aXRfcmNfbWFwX3Bpbm5hY2xlX2NvbG9yKHZvaWQpCit7CisJcmNfbWFwX3VucmVnaXN0ZXIoJnBpbm5hY2xlX2NvbG9yX21hcCk7Cit9CisKK21vZHVsZV9pbml0KGluaXRfcmNfbWFwX3Bpbm5hY2xlX2NvbG9yKQorbW9kdWxlX2V4aXQoZXhpdF9yY19tYXBfcGlubmFjbGVfY29sb3IpCisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIk1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLXBpbm5hY2xlLWdyZXkuYyBiL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1waW5uYWNsZS1ncmV5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJhOGMzNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1waW5uYWNsZS1ncmV5LmMKQEAgLTAsMCArMSw4OSBAQAorLyogcGlubmFjbGUtZ3JleS5oIC0gS2V5dGFibGUgZm9yIHBpbm5hY2xlX2dyZXkgUmVtb3RlIENvbnRyb2xsZXIKKyAqCisgKiBrZXltYXAgaW1wb3J0ZWQgZnJvbSBpci1rZXltYXBzLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgYnkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bWVkaWEvcmMtbWFwLmg+CisKK3N0YXRpYyBzdHJ1Y3QgcmNfbWFwX3RhYmxlIHBpbm5hY2xlX2dyZXlbXSA9IHsKKwl7IDB4M2EsIEtFWV8wIH0sCisJeyAweDMxLCBLRVlfMSB9LAorCXsgMHgzMiwgS0VZXzIgfSwKKwl7IDB4MzMsIEtFWV8zIH0sCisJeyAweDM0LCBLRVlfNCB9LAorCXsgMHgzNSwgS0VZXzUgfSwKKwl7IDB4MzYsIEtFWV82IH0sCisJeyAweDM3LCBLRVlfNyB9LAorCXsgMHgzOCwgS0VZXzggfSwKKwl7IDB4MzksIEtFWV85IH0sCisKKwl7IDB4MmYsIEtFWV9QT1dFUiB9LAorCisJeyAweDJlLCBLRVlfUCB9LAorCXsgMHgxZiwgS0VZX0wgfSwKKwl7IDB4MmIsIEtFWV9JIH0sCisKKwl7IDB4MmQsIEtFWV9TQ1JFRU4gfSwKKwl7IDB4MWUsIEtFWV9aT09NIH0sCisJeyAweDFiLCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4MGYsIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweDE3LCBLRVlfQ0hBTk5FTFVQIH0sCisJeyAweDFjLCBLRVlfQ0hBTk5FTERPV04gfSwKKwl7IDB4MjUsIEtFWV9JTkZPIH0sCisKKwl7IDB4M2MsIEtFWV9NVVRFIH0sCisKKwl7IDB4M2QsIEtFWV9MRUZUIH0sCisJeyAweDNiLCBLRVlfUklHSFQgfSwKKworCXsgMHgzZiwgS0VZX1VQIH0sCisJeyAweDNlLCBLRVlfRE9XTiB9LAorCXsgMHgxYSwgS0VZX0VOVEVSIH0sCisKKwl7IDB4MWQsIEtFWV9NRU5VIH0sCisJeyAweDE5LCBLRVlfQUdBSU4gfSwKKwl7IDB4MTYsIEtFWV9QUkVWSU9VU1NPTkcgfSwKKwl7IDB4MTMsIEtFWV9ORVhUU09ORyB9LAorCXsgMHgxNSwgS0VZX1BBVVNFIH0sCisJeyAweDBlLCBLRVlfUkVXSU5EIH0sCisJeyAweDBkLCBLRVlfUExBWSB9LAorCXsgMHgwYiwgS0VZX1NUT1AgfSwKKwl7IDB4MDcsIEtFWV9GT1JXQVJEIH0sCisJeyAweDI3LCBLRVlfUkVDT1JEIH0sCisJeyAweDI2LCBLRVlfVFVORVIgfSwKKwl7IDB4MjksIEtFWV9URVhUIH0sCisJeyAweDJhLCBLRVlfTUVESUEgfSwKKwl7IDB4MTgsIEtFWV9FUEcgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmNfbWFwX2xpc3QgcGlubmFjbGVfZ3JleV9tYXAgPSB7CisJLm1hcCA9IHsKKwkJLnNjYW4gICAgPSBwaW5uYWNsZV9ncmV5LAorCQkuc2l6ZSAgICA9IEFSUkFZX1NJWkUocGlubmFjbGVfZ3JleSksCisJCS5yY190eXBlID0gUkNfVFlQRV9VTktOT1dOLAkvKiBMZWdhY3kgSVIgdHlwZSAqLworCQkubmFtZSAgICA9IFJDX01BUF9QSU5OQUNMRV9HUkVZLAorCX0KK307CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfcmNfbWFwX3Bpbm5hY2xlX2dyZXkodm9pZCkKK3sKKwlyZXR1cm4gcmNfbWFwX3JlZ2lzdGVyKCZwaW5uYWNsZV9ncmV5X21hcCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3JjX21hcF9waW5uYWNsZV9ncmV5KHZvaWQpCit7CisJcmNfbWFwX3VucmVnaXN0ZXIoJnBpbm5hY2xlX2dyZXlfbWFwKTsKK30KKworbW9kdWxlX2luaXQoaW5pdF9yY19tYXBfcGlubmFjbGVfZ3JleSkKK21vZHVsZV9leGl0KGV4aXRfcmNfbWFwX3Bpbm5hY2xlX2dyZXkpCisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIk1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLXBpbm5hY2xlLXBjdHYtaGQuYyBiL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1waW5uYWNsZS1wY3R2LWhkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmIxMGZmZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1waW5uYWNsZS1wY3R2LWhkLmMKQEAgLTAsMCArMSw3MyBAQAorLyogcGlubmFjbGUtcGN0di1oZC5oIC0gS2V5dGFibGUgZm9yIHBpbm5hY2xlX3BjdHZfaGQgUmVtb3RlIENvbnRyb2xsZXIKKyAqCisgKiBrZXltYXAgaW1wb3J0ZWQgZnJvbSBpci1rZXltYXBzLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgYnkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bWVkaWEvcmMtbWFwLmg+CisKKy8qIFBpbm5hY2xlIFBDVFYgSEQgODAwaSBtaW5pIHJlbW90ZSAqLworCitzdGF0aWMgc3RydWN0IHJjX21hcF90YWJsZSBwaW5uYWNsZV9wY3R2X2hkW10gPSB7CisKKwl7IDB4MGYsIEtFWV8xIH0sCisJeyAweDE1LCBLRVlfMiB9LAorCXsgMHgxMCwgS0VZXzMgfSwKKwl7IDB4MTgsIEtFWV80IH0sCisJeyAweDFiLCBLRVlfNSB9LAorCXsgMHgxZSwgS0VZXzYgfSwKKwl7IDB4MTEsIEtFWV83IH0sCisJeyAweDIxLCBLRVlfOCB9LAorCXsgMHgxMiwgS0VZXzkgfSwKKwl7IDB4MjcsIEtFWV8wIH0sCisKKwl7IDB4MjQsIEtFWV9aT09NIH0sCisJeyAweDJhLCBLRVlfU1VCVElUTEUgfSwKKworCXsgMHgwMCwgS0VZX01VVEUgfSwKKwl7IDB4MDEsIEtFWV9FTlRFUiB9LAkvKiBQaW5uYWNsZSBMb2dvICovCisJeyAweDM5LCBLRVlfUE9XRVIgfSwKKworCXsgMHgwMywgS0VZX1ZPTFVNRVVQIH0sCisJeyAweDA5LCBLRVlfVk9MVU1FRE9XTiB9LAorCXsgMHgwNiwgS0VZX0NIQU5ORUxVUCB9LAorCXsgMHgwYywgS0VZX0NIQU5ORUxET1dOIH0sCisKKwl7IDB4MmQsIEtFWV9SRVdJTkQgfSwKKwl7IDB4MzAsIEtFWV9QTEFZUEFVU0UgfSwKKwl7IDB4MzMsIEtFWV9GQVNURk9SV0FSRCB9LAorCXsgMHgzYywgS0VZX1NUT1AgfSwKKwl7IDB4MzYsIEtFWV9SRUNPUkQgfSwKKwl7IDB4M2YsIEtFWV9FUEcgfSwJLyogTGFiZWxlZCAiPyIgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgcmNfbWFwX2xpc3QgcGlubmFjbGVfcGN0dl9oZF9tYXAgPSB7CisJLm1hcCA9IHsKKwkJLnNjYW4gICAgPSBwaW5uYWNsZV9wY3R2X2hkLAorCQkuc2l6ZSAgICA9IEFSUkFZX1NJWkUocGlubmFjbGVfcGN0dl9oZCksCisJCS5yY190eXBlID0gUkNfVFlQRV9VTktOT1dOLAkvKiBMZWdhY3kgSVIgdHlwZSAqLworCQkubmFtZSAgICA9IFJDX01BUF9QSU5OQUNMRV9QQ1RWX0hELAorCX0KK307CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfcmNfbWFwX3Bpbm5hY2xlX3BjdHZfaGQodm9pZCkKK3sKKwlyZXR1cm4gcmNfbWFwX3JlZ2lzdGVyKCZwaW5uYWNsZV9wY3R2X2hkX21hcCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3JjX21hcF9waW5uYWNsZV9wY3R2X2hkKHZvaWQpCit7CisJcmNfbWFwX3VucmVnaXN0ZXIoJnBpbm5hY2xlX3BjdHZfaGRfbWFwKTsKK30KKworbW9kdWxlX2luaXQoaW5pdF9yY19tYXBfcGlubmFjbGVfcGN0dl9oZCkKK21vZHVsZV9leGl0KGV4aXRfcmNfbWFwX3Bpbm5hY2xlX3BjdHZfaGQpCisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIk1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLXBpeGVsdmlldy0wMDJ0LmMgYi9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtcGl4ZWx2aWV3LTAwMnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWFiMDcxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLXBpeGVsdmlldy0wMDJ0LmMKQEAgLTAsMCArMSw3NyBAQAorLyogcmMtcGl4ZWx2aWV3LW1rMTIuaCAtIEtleXRhYmxlIGZvciBwaXhlbHZpZXcgUmVtb3RlIENvbnRyb2xsZXIKKyAqCisgKiBrZXltYXAgaW1wb3J0ZWQgZnJvbSBpci1rZXltYXBzLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgYnkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bWVkaWEvcmMtbWFwLmg+CisKKy8qCisgKiBLZXl0YWJsZSBmb3IgMDAyLVQgSVIgcmVtb3RlIHByb3ZpZGVkIHRvZ2V0aGVyIHdpdGggUGl4ZWx2aWV3CisgKiBTQlRWRCBIeWJyaWQgUmVtb3RlIENvbnRyb2xsZXIuIFVzZXMgTkVDIGV4dGVuZGVkIGZvcm1hdC4KKyAqLworc3RhdGljIHN0cnVjdCByY19tYXBfdGFibGUgcGl4ZWx2aWV3XzAwMnRbXSA9IHsKKwl7IDB4ODY2YjEzLCBLRVlfTVVURSB9LAorCXsgMHg4NjZiMTIsIEtFWV9QT1dFUjIgfSwJLyogcG93ZXIgKi8KKworCXsgMHg4NjZiMDEsIEtFWV8xIH0sCisJeyAweDg2NmIwMiwgS0VZXzIgfSwKKwl7IDB4ODY2YjAzLCBLRVlfMyB9LAorCXsgMHg4NjZiMDQsIEtFWV80IH0sCisJeyAweDg2NmIwNSwgS0VZXzUgfSwKKwl7IDB4ODY2YjA2LCBLRVlfNiB9LAorCXsgMHg4NjZiMDcsIEtFWV83IH0sCisJeyAweDg2NmIwOCwgS0VZXzggfSwKKwl7IDB4ODY2YjA5LCBLRVlfOSB9LAorCXsgMHg4NjZiMDAsIEtFWV8wIH0sCisKKwl7IDB4ODY2YjBkLCBLRVlfQ0hBTk5FTFVQIH0sCisJeyAweDg2NmIxOSwgS0VZX0NIQU5ORUxET1dOIH0sCisJeyAweDg2NmIxMCwgS0VZX1ZPTFVNRVVQIH0sCS8qIHZvbCArICovCisJeyAweDg2NmIwYywgS0VZX1ZPTFVNRURPV04gfSwJLyogdm9sIC0gKi8KKworCXsgMHg4NjZiMGEsIEtFWV9DQU1FUkEgfSwJLyogc25hcHNob3QgKi8KKwl7IDB4ODY2YjBiLCBLRVlfWk9PTSB9LAkJLyogem9vbSAqLworCisJeyAweDg2NmIxYiwgS0VZX0JBQ0tTUEFDRSB9LAorCXsgMHg4NjZiMTUsIEtFWV9FTlRFUiB9LAorCisJeyAweDg2NmIxZCwgS0VZX1VQIH0sCisJeyAweDg2NmIxZSwgS0VZX0RPV04gfSwKKwl7IDB4ODY2YjBlLCBLRVlfTEVGVCB9LAorCXsgMHg4NjZiMGYsIEtFWV9SSUdIVCB9LAorCisJeyAweDg2NmIxOCwgS0VZX1JFQ09SRCB9LAorCXsgMHg4NjZiMWEsIEtFWV9TVE9QIH0sCit9OworCitzdGF0aWMgc3RydWN0IHJjX21hcF9saXN0IHBpeGVsdmlld19tYXAgPSB7CisJLm1hcCA9IHsKKwkJLnNjYW4gICAgPSBwaXhlbHZpZXdfMDAydCwKKwkJLnNpemUgICAgPSBBUlJBWV9TSVpFKHBpeGVsdmlld18wMDJ0KSwKKwkJLnJjX3R5cGUgPSBSQ19UWVBFX05FQywKKwkJLm5hbWUgICAgPSBSQ19NQVBfUElYRUxWSUVXXzAwMlQsCisJfQorfTsKKworc3RhdGljIGludCBfX2luaXQgaW5pdF9yY19tYXBfcGl4ZWx2aWV3KHZvaWQpCit7CisJcmV0dXJuIHJjX21hcF9yZWdpc3RlcigmcGl4ZWx2aWV3X21hcCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3JjX21hcF9waXhlbHZpZXcodm9pZCkKK3sKKwlyY19tYXBfdW5yZWdpc3RlcigmcGl4ZWx2aWV3X21hcCk7Cit9CisKK21vZHVsZV9pbml0KGluaXRfcmNfbWFwX3BpeGVsdmlldykKK21vZHVsZV9leGl0KGV4aXRfcmNfbWFwX3BpeGVsdmlldykKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtcGl4ZWx2aWV3LW1rMTIuYyBiL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1waXhlbHZpZXctbWsxMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkOWY2NjQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtcGl4ZWx2aWV3LW1rMTIuYwpAQCAtMCwwICsxLDgzIEBACisvKiByYy1waXhlbHZpZXctbWsxMi5oIC0gS2V5dGFibGUgZm9yIHBpeGVsdmlldyBSZW1vdGUgQ29udHJvbGxlcgorICoKKyAqIGtleW1hcCBpbXBvcnRlZCBmcm9tIGlyLWtleW1hcHMuYworICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBieSBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxtZWRpYS9yYy1tYXAuaD4KKworLyoKKyAqIEtleXRhYmxlIGZvciBNSy1GMTIgSVIgcmVtb3RlIHByb3ZpZGVkIHRvZ2V0aGVyIHdpdGggUGl4ZWx2aWV3CisgKiBVbHRyYSBQcm8gUmVtb3RlIENvbnRyb2xsZXIuIFVzZXMgTkVDIGV4dGVuZGVkIGZvcm1hdC4KKyAqLworc3RhdGljIHN0cnVjdCByY19tYXBfdGFibGUgcGl4ZWx2aWV3X21rMTJbXSA9IHsKKwl7IDB4ODY2YjAzLCBLRVlfVFVORVIgfSwJLyogVGltZXNoaWZ0ICovCisJeyAweDg2NmIxZSwgS0VZX1BPV0VSMiB9LAkvKiBwb3dlciAqLworCisJeyAweDg2NmIwMSwgS0VZXzEgfSwKKwl7IDB4ODY2YjBiLCBLRVlfMiB9LAorCXsgMHg4NjZiMWIsIEtFWV8zIH0sCisJeyAweDg2NmIwNSwgS0VZXzQgfSwKKwl7IDB4ODY2YjA5LCBLRVlfNSB9LAorCXsgMHg4NjZiMTUsIEtFWV82IH0sCisJeyAweDg2NmIwNiwgS0VZXzcgfSwKKwl7IDB4ODY2YjBhLCBLRVlfOCB9LAorCXsgMHg4NjZiMTIsIEtFWV85IH0sCisJeyAweDg2NmIwMiwgS0VZXzAgfSwKKworCXsgMHg4NjZiMTMsIEtFWV9BR0FJTiB9LAkvKiBsb29wICovCisJeyAweDg2NmIxMCwgS0VZX0RJR0lUUyB9LAkvKiArMTAwICovCisKKwl7IDB4ODY2YjAwLCBLRVlfTUVESUEgfSwJLyogc291cmNlICovCisJeyAweDg2NmIxOCwgS0VZX01VVEUgfSwJCS8qIG11dGUgKi8KKwl7IDB4ODY2YjE5LCBLRVlfQ0FNRVJBIH0sCS8qIHNuYXBzaG90ICovCisJeyAweDg2NmIxYSwgS0VZX1NFQVJDSCB9LAkvKiBzY2FuICovCisKKwl7IDB4ODY2YjE2LCBLRVlfQ0hBTk5FTFVQIH0sCS8qIGNobiArICovCisJeyAweDg2NmIxNCwgS0VZX0NIQU5ORUxET1dOIH0sCS8qIGNobiAtICovCisJeyAweDg2NmIxZiwgS0VZX1ZPTFVNRVVQIH0sCS8qIHZvbCArICovCisJeyAweDg2NmIxNywgS0VZX1ZPTFVNRURPV04gfSwJLyogdm9sIC0gKi8KKwl7IDB4ODY2YjFjLCBLRVlfWk9PTSB9LAkJLyogem9vbSAqLworCisJeyAweDg2NmIwNCwgS0VZX1JFV0lORCB9LAorCXsgMHg4NjZiMGUsIEtFWV9SRUNPUkQgfSwKKwl7IDB4ODY2YjBjLCBLRVlfRk9SV0FSRCB9LAorCisJeyAweDg2NmIxZCwgS0VZX1NUT1AgfSwKKwl7IDB4ODY2YjA4LCBLRVlfUExBWSB9LAorCXsgMHg4NjZiMGYsIEtFWV9QQVVTRSB9LAorCisJeyAweDg2NmIwZCwgS0VZX1RWIH0sCisJeyAweDg2NmIwNywgS0VZX1JBRElPIH0sCS8qIEZNICovCit9OworCitzdGF0aWMgc3RydWN0IHJjX21hcF9saXN0IHBpeGVsdmlld19tYXAgPSB7CisJLm1hcCA9IHsKKwkJLnNjYW4gICAgPSBwaXhlbHZpZXdfbWsxMiwKKwkJLnNpemUgICAgPSBBUlJBWV9TSVpFKHBpeGVsdmlld19tazEyKSwKKwkJLnJjX3R5cGUgPSBSQ19UWVBFX05FQywKKwkJLm5hbWUgICAgPSBSQ19NQVBfUElYRUxWSUVXX01LMTIsCisJfQorfTsKKworc3RhdGljIGludCBfX2luaXQgaW5pdF9yY19tYXBfcGl4ZWx2aWV3KHZvaWQpCit7CisJcmV0dXJuIHJjX21hcF9yZWdpc3RlcigmcGl4ZWx2aWV3X21hcCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3JjX21hcF9waXhlbHZpZXcodm9pZCkKK3sKKwlyY19tYXBfdW5yZWdpc3RlcigmcGl4ZWx2aWV3X21hcCk7Cit9CisKK21vZHVsZV9pbml0KGluaXRfcmNfbWFwX3BpeGVsdmlldykKK21vZHVsZV9leGl0KGV4aXRfcmNfbWFwX3BpeGVsdmlldykKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtcGl4ZWx2aWV3LW5ldy5jIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLXBpeGVsdmlldy1uZXcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzdhNzAwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLXBpeGVsdmlldy1uZXcuYwpAQCAtMCwwICsxLDgzIEBACisvKiBwaXhlbHZpZXctbmV3LmggLSBLZXl0YWJsZSBmb3IgcGl4ZWx2aWV3X25ldyBSZW1vdGUgQ29udHJvbGxlcgorICoKKyAqIGtleW1hcCBpbXBvcnRlZCBmcm9tIGlyLWtleW1hcHMuYworICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBieSBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxtZWRpYS9yYy1tYXAuaD4KKworLyoKKyAgIE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkBpbmZyYWRlYWQub3JnPgorICAgcHJlc2VudCBvbiBQViBNUEVHIDgwMDBHVAorICovCisKK3N0YXRpYyBzdHJ1Y3QgcmNfbWFwX3RhYmxlIHBpeGVsdmlld19uZXdbXSA9IHsKKwl7IDB4M2MsIEtFWV9USU1FIH0sCQkvKiBUaW1lc2hpZnQgKi8KKwl7IDB4MTIsIEtFWV9QT1dFUiB9LAorCisJeyAweDNkLCBLRVlfMSB9LAorCXsgMHgzOCwgS0VZXzIgfSwKKwl7IDB4MTgsIEtFWV8zIH0sCisJeyAweDM1LCBLRVlfNCB9LAorCXsgMHgzOSwgS0VZXzUgfSwKKwl7IDB4MTUsIEtFWV82IH0sCisJeyAweDM2LCBLRVlfNyB9LAorCXsgMHgzYSwgS0VZXzggfSwKKwl7IDB4MWUsIEtFWV85IH0sCisJeyAweDNlLCBLRVlfMCB9LAorCisJeyAweDFjLCBLRVlfQUdBSU4gfSwJCS8qIExPT1AJKi8KKwl7IDB4M2YsIEtFWV9NRURJQSB9LAkJLyogU291cmNlICovCisJeyAweDFmLCBLRVlfTEFTVCB9LAkJLyogKzEwMCAqLworCXsgMHgxYiwgS0VZX01VVEUgfSwKKworCXsgMHgxNywgS0VZX0NIQU5ORUxET1dOIH0sCisJeyAweDE2LCBLRVlfQ0hBTk5FTFVQIH0sCisJeyAweDEwLCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4MTQsIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweDEzLCBLRVlfWk9PTSB9LAorCisJeyAweDE5LCBLRVlfQ0FNRVJBIH0sCQkvKiBTTkFQU0hPVCAqLworCXsgMHgxYSwgS0VZX1NFQVJDSCB9LAkJLyogc2NhbiAqLworCisJeyAweDM3LCBLRVlfUkVXSU5EIH0sCQkvKiA8PCAqLworCXsgMHgzMiwgS0VZX1JFQ09SRCB9LAkJLyogbyAocmVkKSAqLworCXsgMHgzMywgS0VZX0ZPUldBUkQgfSwJCS8qID4+ICovCisJeyAweDExLCBLRVlfU1RPUCB9LAkJLyogc3F1YXJlICovCisJeyAweDNiLCBLRVlfUExBWSB9LAkJLyogPiAqLworCXsgMHgzMCwgS0VZX1BMQVlQQVVTRSB9LAkvKiB8fCAqLworCisJeyAweDMxLCBLRVlfVFYgfSwKKwl7IDB4MzQsIEtFWV9SQURJTyB9LAorfTsKKworc3RhdGljIHN0cnVjdCByY19tYXBfbGlzdCBwaXhlbHZpZXdfbmV3X21hcCA9IHsKKwkubWFwID0geworCQkuc2NhbiAgICA9IHBpeGVsdmlld19uZXcsCisJCS5zaXplICAgID0gQVJSQVlfU0laRShwaXhlbHZpZXdfbmV3KSwKKwkJLnJjX3R5cGUgPSBSQ19UWVBFX1VOS05PV04sCS8qIExlZ2FjeSBJUiB0eXBlICovCisJCS5uYW1lICAgID0gUkNfTUFQX1BJWEVMVklFV19ORVcsCisJfQorfTsKKworc3RhdGljIGludCBfX2luaXQgaW5pdF9yY19tYXBfcGl4ZWx2aWV3X25ldyh2b2lkKQoreworCXJldHVybiByY19tYXBfcmVnaXN0ZXIoJnBpeGVsdmlld19uZXdfbWFwKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGV4aXRfcmNfbWFwX3BpeGVsdmlld19uZXcodm9pZCkKK3sKKwlyY19tYXBfdW5yZWdpc3RlcigmcGl4ZWx2aWV3X25ld19tYXApOworfQorCittb2R1bGVfaW5pdChpbml0X3JjX21hcF9waXhlbHZpZXdfbmV3KQorbW9kdWxlX2V4aXQoZXhpdF9yY19tYXBfcGl4ZWx2aWV3X25ldykKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtcGl4ZWx2aWV3LmMgYi9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtcGl4ZWx2aWV3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGVjNTk4OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1waXhlbHZpZXcuYwpAQCAtMCwwICsxLDgyIEBACisvKiBwaXhlbHZpZXcuaCAtIEtleXRhYmxlIGZvciBwaXhlbHZpZXcgUmVtb3RlIENvbnRyb2xsZXIKKyAqCisgKiBrZXltYXAgaW1wb3J0ZWQgZnJvbSBpci1rZXltYXBzLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgYnkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bWVkaWEvcmMtbWFwLmg+CisKK3N0YXRpYyBzdHJ1Y3QgcmNfbWFwX3RhYmxlIHBpeGVsdmlld1tdID0geworCisJeyAweDFlLCBLRVlfUE9XRVIgfSwJLyogcG93ZXIgKi8KKwl7IDB4MDcsIEtFWV9NRURJQSB9LAkvKiBzb3VyY2UgKi8KKwl7IDB4MWMsIEtFWV9TRUFSQ0ggfSwJLyogc2NhbiAqLworCisKKwl7IDB4MDMsIEtFWV9UVU5FUiB9LAkJLyogVFYvRk0gKi8KKworCXsgMHgwMCwgS0VZX1JFQ09SRCB9LAorCXsgMHgwOCwgS0VZX1NUT1AgfSwKKwl7IDB4MTEsIEtFWV9QTEFZIH0sCisKKwl7IDB4MWEsIEtFWV9QTEFZUEFVU0UgfSwJLyogZnJlZXplICovCisJeyAweDE5LCBLRVlfWk9PTSB9LAkJLyogem9vbSAqLworCXsgMHgwZiwgS0VZX1RFWFQgfSwJCS8qIG1pbiAqLworCisJeyAweDAxLCBLRVlfMSB9LAorCXsgMHgwYiwgS0VZXzIgfSwKKwl7IDB4MWIsIEtFWV8zIH0sCisJeyAweDA1LCBLRVlfNCB9LAorCXsgMHgwOSwgS0VZXzUgfSwKKwl7IDB4MTUsIEtFWV82IH0sCisJeyAweDA2LCBLRVlfNyB9LAorCXsgMHgwYSwgS0VZXzggfSwKKwl7IDB4MTIsIEtFWV85IH0sCisJeyAweDAyLCBLRVlfMCB9LAorCXsgMHgxMCwgS0VZX0xBU1QgfSwJCS8qICsxMDAgKi8KKwl7IDB4MTMsIEtFWV9MSVNUIH0sCQkvKiByZWNhbGwgKi8KKworCXsgMHgxZiwgS0VZX0NIQU5ORUxVUCB9LAkvKiBjaG4gZG93biAqLworCXsgMHgxNywgS0VZX0NIQU5ORUxET1dOIH0sCS8qIGNobiB1cCAqLworCXsgMHgxNiwgS0VZX1ZPTFVNRVVQIH0sCQkvKiB2b2wgZG93biAqLworCXsgMHgxNCwgS0VZX1ZPTFVNRURPV04gfSwJLyogdm9sIHVwICovCisKKwl7IDB4MDQsIEtFWV9LUE1JTlVTIH0sCQkvKiA8PDwgKi8KKwl7IDB4MGUsIEtFWV9TRVRVUCB9LAkJLyogZnVuY3Rpb24gKi8KKwl7IDB4MGMsIEtFWV9LUFBMVVMgfSwJCS8qID4+PiAqLworCisJeyAweDBkLCBLRVlfR09UTyB9LAkJLyogbXRzICovCisJeyAweDFkLCBLRVlfUkVGUkVTSCB9LAkJLyogcmVzZXQgKi8KKwl7IDB4MTgsIEtFWV9NVVRFIH0sCQkvKiBtdXRlL3VubXV0ZSAqLworfTsKKworc3RhdGljIHN0cnVjdCByY19tYXBfbGlzdCBwaXhlbHZpZXdfbWFwID0geworCS5tYXAgPSB7CisJCS5zY2FuICAgID0gcGl4ZWx2aWV3LAorCQkuc2l6ZSAgICA9IEFSUkFZX1NJWkUocGl4ZWx2aWV3KSwKKwkJLnJjX3R5cGUgPSBSQ19UWVBFX1VOS05PV04sCS8qIExlZ2FjeSBJUiB0eXBlICovCisJCS5uYW1lICAgID0gUkNfTUFQX1BJWEVMVklFVywKKwl9Cit9OworCitzdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcF9waXhlbHZpZXcodm9pZCkKK3sKKwlyZXR1cm4gcmNfbWFwX3JlZ2lzdGVyKCZwaXhlbHZpZXdfbWFwKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGV4aXRfcmNfbWFwX3BpeGVsdmlldyh2b2lkKQoreworCXJjX21hcF91bnJlZ2lzdGVyKCZwaXhlbHZpZXdfbWFwKTsKK30KKworbW9kdWxlX2luaXQoaW5pdF9yY19tYXBfcGl4ZWx2aWV3KQorbW9kdWxlX2V4aXQoZXhpdF9yY19tYXBfcGl4ZWx2aWV3KQorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1wb3dlcmNvbG9yLXJlYWwtYW5nZWwuYyBiL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1wb3dlcmNvbG9yLXJlYWwtYW5nZWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjlkNTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLXBvd2VyY29sb3ItcmVhbC1hbmdlbC5jCkBAIC0wLDAgKzEsODEgQEAKKy8qIHBvd2VyY29sb3ItcmVhbC1hbmdlbC5oIC0gS2V5dGFibGUgZm9yIHBvd2VyY29sb3JfcmVhbF9hbmdlbCBSZW1vdGUgQ29udHJvbGxlcgorICoKKyAqIGtleW1hcCBpbXBvcnRlZCBmcm9tIGlyLWtleW1hcHMuYworICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBieSBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxtZWRpYS9yYy1tYXAuaD4KKworLyoKKyAqIFJlbW90ZSBjb250cm9sIGZvciBQb3dlcmNvbG9yIFJlYWwgQW5nZWwgMzMwCisgKiBEYW5pZWwgRnJhZ2EgPGZyYWdhYnJAZ21haWwuY29tPgorICovCisKK3N0YXRpYyBzdHJ1Y3QgcmNfbWFwX3RhYmxlIHBvd2VyY29sb3JfcmVhbF9hbmdlbFtdID0geworCXsgMHgzOCwgS0VZX1NXSVRDSFZJREVPTU9ERSB9LAkvKiBzd2l0Y2ggaW5wdXRzICovCisJeyAweDBjLCBLRVlfTUVESUEgfSwJCS8qIFR1cm4gT04vT0ZGIEFwcCAqLworCXsgMHgwMCwgS0VZXzAgfSwKKwl7IDB4MDEsIEtFWV8xIH0sCisJeyAweDAyLCBLRVlfMiB9LAorCXsgMHgwMywgS0VZXzMgfSwKKwl7IDB4MDQsIEtFWV80IH0sCisJeyAweDA1LCBLRVlfNSB9LAorCXsgMHgwNiwgS0VZXzYgfSwKKwl7IDB4MDcsIEtFWV83IH0sCisJeyAweDA4LCBLRVlfOCB9LAorCXsgMHgwOSwgS0VZXzkgfSwKKwl7IDB4MGEsIEtFWV9ESUdJVFMgfSwJCS8qIHNpbmdsZSwgZG91YmxlLCB0cmlwcGxlIGRpZ2l0ICovCisJeyAweDI5LCBLRVlfUFJFVklPVVMgfSwJCS8qIHByZXZpb3VzIGNoYW5uZWwgKi8KKwl7IDB4MTIsIEtFWV9CUklHSFRORVNTVVAgfSwKKwl7IDB4MTMsIEtFWV9CUklHSFRORVNTRE9XTiB9LAorCXsgMHgyYiwgS0VZX01PREUgfSwJCS8qIHN0ZXJlby9tb25vICovCisJeyAweDJjLCBLRVlfVEVYVCB9LAkJLyogdGVsZXRleHQgKi8KKwl7IDB4MjAsIEtFWV9DSEFOTkVMVVAgfSwJLyogY2hhbm5lbCB1cCAqLworCXsgMHgyMSwgS0VZX0NIQU5ORUxET1dOIH0sCS8qIGNoYW5uZWwgZG93biAqLworCXsgMHgxMCwgS0VZX1ZPTFVNRVVQIH0sCQkvKiB2b2x1bWUgdXAgKi8KKwl7IDB4MTEsIEtFWV9WT0xVTUVET1dOIH0sCS8qIHZvbHVtZSBkb3duICovCisJeyAweDBkLCBLRVlfTVVURSB9LAorCXsgMHgxZiwgS0VZX1JFQ09SRCB9LAorCXsgMHgxNywgS0VZX1BMQVkgfSwKKwl7IDB4MTYsIEtFWV9QQVVTRSB9LAorCXsgMHgwYiwgS0VZX1NUT1AgfSwKKwl7IDB4MjcsIEtFWV9GQVNURk9SV0FSRCB9LAorCXsgMHgyNiwgS0VZX1JFV0lORCB9LAorCXsgMHgxZSwgS0VZX1NFQVJDSCB9LAkJLyogYXV0b3NjYW4gKi8KKwl7IDB4MGUsIEtFWV9DQU1FUkEgfSwJCS8qIHNuYXBzaG90ICovCisJeyAweDJkLCBLRVlfU0VUVVAgfSwKKwl7IDB4MGYsIEtFWV9TQ1JFRU4gfSwJCS8qIGZ1bGwgc2NyZWVuICovCisJeyAweDE0LCBLRVlfUkFESU8gfSwJCS8qIEZNIHJhZGlvICovCisJeyAweDI1LCBLRVlfUE9XRVIgfSwJCS8qIHBvd2VyICovCit9OworCitzdGF0aWMgc3RydWN0IHJjX21hcF9saXN0IHBvd2VyY29sb3JfcmVhbF9hbmdlbF9tYXAgPSB7CisJLm1hcCA9IHsKKwkJLnNjYW4gICAgPSBwb3dlcmNvbG9yX3JlYWxfYW5nZWwsCisJCS5zaXplICAgID0gQVJSQVlfU0laRShwb3dlcmNvbG9yX3JlYWxfYW5nZWwpLAorCQkucmNfdHlwZSA9IFJDX1RZUEVfVU5LTk9XTiwJLyogTGVnYWN5IElSIHR5cGUgKi8KKwkJLm5hbWUgICAgPSBSQ19NQVBfUE9XRVJDT0xPUl9SRUFMX0FOR0VMLAorCX0KK307CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfcmNfbWFwX3Bvd2VyY29sb3JfcmVhbF9hbmdlbCh2b2lkKQoreworCXJldHVybiByY19tYXBfcmVnaXN0ZXIoJnBvd2VyY29sb3JfcmVhbF9hbmdlbF9tYXApOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yY19tYXBfcG93ZXJjb2xvcl9yZWFsX2FuZ2VsKHZvaWQpCit7CisJcmNfbWFwX3VucmVnaXN0ZXIoJnBvd2VyY29sb3JfcmVhbF9hbmdlbF9tYXApOworfQorCittb2R1bGVfaW5pdChpbml0X3JjX21hcF9wb3dlcmNvbG9yX3JlYWxfYW5nZWwpCittb2R1bGVfZXhpdChleGl0X3JjX21hcF9wb3dlcmNvbG9yX3JlYWxfYW5nZWwpCisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIk1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLXByb3RldXMtMjMwOS5jIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLXByb3RldXMtMjMwOS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhM2E2NDMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtcHJvdGV1cy0yMzA5LmMKQEAgLTAsMCArMSw2OSBAQAorLyogcHJvdGV1cy0yMzA5LmggLSBLZXl0YWJsZSBmb3IgcHJvdGV1c18yMzA5IFJlbW90ZSBDb250cm9sbGVyCisgKgorICoga2V5bWFwIGltcG9ydGVkIGZyb20gaXIta2V5bWFwcy5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPG1lZGlhL3JjLW1hcC5oPgorCisvKiBNaWNoYWwgTWFqY2hyb3dpY3ogPG1tYWpjaHJvd2ljekBnbWFpbC5jb20+ICovCisKK3N0YXRpYyBzdHJ1Y3QgcmNfbWFwX3RhYmxlIHByb3RldXNfMjMwOVtdID0geworCS8qIG51bWVyaWMgKi8KKwl7IDB4MDAsIEtFWV8wIH0sCisJeyAweDAxLCBLRVlfMSB9LAorCXsgMHgwMiwgS0VZXzIgfSwKKwl7IDB4MDMsIEtFWV8zIH0sCisJeyAweDA0LCBLRVlfNCB9LAorCXsgMHgwNSwgS0VZXzUgfSwKKwl7IDB4MDYsIEtFWV82IH0sCisJeyAweDA3LCBLRVlfNyB9LAorCXsgMHgwOCwgS0VZXzggfSwKKwl7IDB4MDksIEtFWV85IH0sCisKKwl7IDB4NWMsIEtFWV9QT1dFUiB9LAkJLyogcG93ZXIgICAgICAgKi8KKwl7IDB4MjAsIEtFWV9aT09NIH0sCQkvKiBmdWxsIHNjcmVlbiAqLworCXsgMHgwZiwgS0VZX0JBQ0tTUEFDRSB9LAkvKiByZWNhbGwgICAgICAqLworCXsgMHgxYiwgS0VZX0VOVEVSIH0sCQkvKiBtdXRlICAgICAgICAqLworCXsgMHg0MSwgS0VZX1JFQ09SRCB9LAkJLyogcmVjb3JkICAgICAgKi8KKwl7IDB4NDMsIEtFWV9TVE9QIH0sCQkvKiBzdG9wICAgICAgICAqLworCXsgMHgxNiwgS0VZX1MgfSwKKwl7IDB4MWEsIEtFWV9QT1dFUjIgfSwJCS8qIG9mZiAgICAgICAgICovCisJeyAweDJlLCBLRVlfUkVEIH0sCisJeyAweDFmLCBLRVlfQ0hBTk5FTERPV04gfSwJLyogY2hhbm5lbCAtICAgKi8KKwl7IDB4MWMsIEtFWV9DSEFOTkVMVVAgfSwJLyogY2hhbm5lbCArICAgKi8KKwl7IDB4MTAsIEtFWV9WT0xVTUVET1dOIH0sCS8qIHZvbHVtZSAtICAgICovCisJeyAweDFlLCBLRVlfVk9MVU1FVVAgfSwJCS8qIHZvbHVtZSArICAgICovCisJeyAweDE0LCBLRVlfRjEgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmNfbWFwX2xpc3QgcHJvdGV1c18yMzA5X21hcCA9IHsKKwkubWFwID0geworCQkuc2NhbiAgICA9IHByb3RldXNfMjMwOSwKKwkJLnNpemUgICAgPSBBUlJBWV9TSVpFKHByb3RldXNfMjMwOSksCisJCS5yY190eXBlID0gUkNfVFlQRV9VTktOT1dOLAkvKiBMZWdhY3kgSVIgdHlwZSAqLworCQkubmFtZSAgICA9IFJDX01BUF9QUk9URVVTXzIzMDksCisJfQorfTsKKworc3RhdGljIGludCBfX2luaXQgaW5pdF9yY19tYXBfcHJvdGV1c18yMzA5KHZvaWQpCit7CisJcmV0dXJuIHJjX21hcF9yZWdpc3RlcigmcHJvdGV1c18yMzA5X21hcCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3JjX21hcF9wcm90ZXVzXzIzMDkodm9pZCkKK3sKKwlyY19tYXBfdW5yZWdpc3RlcigmcHJvdGV1c18yMzA5X21hcCk7Cit9CisKK21vZHVsZV9pbml0KGluaXRfcmNfbWFwX3Byb3RldXNfMjMwOSkKK21vZHVsZV9leGl0KGV4aXRfcmNfbWFwX3Byb3RldXNfMjMwOSkKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtcHVycGxldHYuYyBiL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1wdXJwbGV0di5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmOTAyOTYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtcHVycGxldHYuYwpAQCAtMCwwICsxLDgxIEBACisvKiBwdXJwbGV0di5oIC0gS2V5dGFibGUgZm9yIHB1cnBsZXR2IFJlbW90ZSBDb250cm9sbGVyCisgKgorICoga2V5bWFwIGltcG9ydGVkIGZyb20gaXIta2V5bWFwcy5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPG1lZGlhL3JjLW1hcC5oPgorCitzdGF0aWMgc3RydWN0IHJjX21hcF90YWJsZSBwdXJwbGV0dltdID0geworCXsgMHgwMywgS0VZX1BPV0VSIH0sCisJeyAweDZmLCBLRVlfTVVURSB9LAorCXsgMHgxMCwgS0VZX0JBQ0tTUEFDRSB9LAkvKiBSZWNhbGwgKi8KKworCXsgMHgxMSwgS0VZXzAgfSwKKwl7IDB4MDQsIEtFWV8xIH0sCisJeyAweDA1LCBLRVlfMiB9LAorCXsgMHgwNiwgS0VZXzMgfSwKKwl7IDB4MDgsIEtFWV80IH0sCisJeyAweDA5LCBLRVlfNSB9LAorCXsgMHgwYSwgS0VZXzYgfSwKKwl7IDB4MGMsIEtFWV83IH0sCisJeyAweDBkLCBLRVlfOCB9LAorCXsgMHgwZSwgS0VZXzkgfSwKKwl7IDB4MTIsIEtFWV9ET1QgfSwJLyogMTAwKyAqLworCisJeyAweDA3LCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4MGIsIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweDFhLCBLRVlfS1BQTFVTIH0sCisJeyAweDE4LCBLRVlfS1BNSU5VUyB9LAorCXsgMHgxNSwgS0VZX1VQIH0sCisJeyAweDFkLCBLRVlfRE9XTiB9LAorCXsgMHgwZiwgS0VZX0NIQU5ORUxVUCB9LAorCXsgMHgxMywgS0VZX0NIQU5ORUxET1dOIH0sCisJeyAweDQ4LCBLRVlfWk9PTSB9LAorCisJeyAweDFiLCBLRVlfVklERU8gfSwJLyogVmlkZW8gc291cmNlICovCisJeyAweDFmLCBLRVlfQ0FNRVJBIH0sCS8qIFNuYXBzaG90ICovCisJeyAweDQ5LCBLRVlfTEFOR1VBR0UgfSwJLyogTVRTIFNlbGVjdCAqLworCXsgMHgxOSwgS0VZX1NFQVJDSCB9LAkvKiBBdXRvIFNjYW4gKi8KKworCXsgMHg0YiwgS0VZX1JFQ09SRCB9LAorCXsgMHg0NiwgS0VZX1BMQVkgfSwKKwl7IDB4NDUsIEtFWV9QQVVTRSB9LAkvKiBQYXVzZSAqLworCXsgMHg0NCwgS0VZX1NUT1AgfSwKKwl7IDB4NDMsIEtFWV9USU1FIH0sCS8qIFRpbWUgU2hpZnQgKi8KKwl7IDB4MTcsIEtFWV9DSEFOTkVMIH0sCS8qIFNVUkYgQ0ggKi8KKwl7IDB4NDAsIEtFWV9GT1JXQVJEIH0sCS8qIEZvcndhcmQgPyAqLworCXsgMHg0MiwgS0VZX1JFV0lORCB9LAkvKiBCYWNrd2FyZCA/ICovCisKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmNfbWFwX2xpc3QgcHVycGxldHZfbWFwID0geworCS5tYXAgPSB7CisJCS5zY2FuICAgID0gcHVycGxldHYsCisJCS5zaXplICAgID0gQVJSQVlfU0laRShwdXJwbGV0diksCisJCS5yY190eXBlID0gUkNfVFlQRV9VTktOT1dOLAkvKiBMZWdhY3kgSVIgdHlwZSAqLworCQkubmFtZSAgICA9IFJDX01BUF9QVVJQTEVUViwKKwl9Cit9OworCitzdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcF9wdXJwbGV0dih2b2lkKQoreworCXJldHVybiByY19tYXBfcmVnaXN0ZXIoJnB1cnBsZXR2X21hcCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3JjX21hcF9wdXJwbGV0dih2b2lkKQoreworCXJjX21hcF91bnJlZ2lzdGVyKCZwdXJwbGV0dl9tYXApOworfQorCittb2R1bGVfaW5pdChpbml0X3JjX21hcF9wdXJwbGV0dikKK21vZHVsZV9leGl0KGV4aXRfcmNfbWFwX3B1cnBsZXR2KQorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1wdjk1MS5jIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLXB2OTUxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNhNDE4ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1wdjk1MS5jCkBAIC0wLDAgKzEsNzggQEAKKy8qIHB2OTUxLmggLSBLZXl0YWJsZSBmb3IgcHY5NTEgUmVtb3RlIENvbnRyb2xsZXIKKyAqCisgKiBrZXltYXAgaW1wb3J0ZWQgZnJvbSBpci1rZXltYXBzLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgYnkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bWVkaWEvcmMtbWFwLmg+CisKKy8qIE1hcmsgUGhhbGFuIDxwaGFsYW5tQG8yLmllPiAqLworCitzdGF0aWMgc3RydWN0IHJjX21hcF90YWJsZSBwdjk1MVtdID0geworCXsgMHgwMCwgS0VZXzAgfSwKKwl7IDB4MDEsIEtFWV8xIH0sCisJeyAweDAyLCBLRVlfMiB9LAorCXsgMHgwMywgS0VZXzMgfSwKKwl7IDB4MDQsIEtFWV80IH0sCisJeyAweDA1LCBLRVlfNSB9LAorCXsgMHgwNiwgS0VZXzYgfSwKKwl7IDB4MDcsIEtFWV83IH0sCisJeyAweDA4LCBLRVlfOCB9LAorCXsgMHgwOSwgS0VZXzkgfSwKKworCXsgMHgxMiwgS0VZX1BPV0VSIH0sCisJeyAweDEwLCBLRVlfTVVURSB9LAorCXsgMHgxZiwgS0VZX1ZPTFVNRURPV04gfSwKKwl7IDB4MWIsIEtFWV9WT0xVTUVVUCB9LAorCXsgMHgxYSwgS0VZX0NIQU5ORUxVUCB9LAorCXsgMHgxZSwgS0VZX0NIQU5ORUxET1dOIH0sCisJeyAweDBlLCBLRVlfUEFHRVVQIH0sCisJeyAweDFkLCBLRVlfUEFHRURPV04gfSwKKwl7IDB4MTMsIEtFWV9TT1VORCB9LAorCisJeyAweDE4LCBLRVlfS1BQTFVTTUlOVVMgfSwJLyogQ0ggKy8tICovCisJeyAweDE2LCBLRVlfU1VCVElUTEUgfSwJCS8qIENDICovCisJeyAweDBkLCBLRVlfVEVYVCB9LAkJLyogVFRYICovCisJeyAweDBiLCBLRVlfVFYgfSwJCS8qIEFJUi9DQkwgKi8KKwl7IDB4MTEsIEtFWV9QQyB9LAkJLyogUEMvVFYgKi8KKwl7IDB4MTcsIEtFWV9PSyB9LAkJLyogQ0ggUlROICovCisJeyAweDE5LCBLRVlfTU9ERSB9LAkJLyogRlVOQyAqLworCXsgMHgwYywgS0VZX1NFQVJDSCB9LAkJLyogQVVUT1NDQU4gKi8KKworCS8qIE5vdCBzdXJlIHdoYXQgdG8gZG8gd2l0aCB0aGVzZSBvbmVzISAqLworCXsgMHgwZiwgS0VZX1NFTEVDVCB9LAkJLyogU09VUkNFICovCisJeyAweDBhLCBLRVlfS1BQTFVTIH0sCQkvKiArMTAwICovCisJeyAweDE0LCBLRVlfRVFVQUwgfSwJCS8qIFNZTkMgKi8KKwl7IDB4MWMsIEtFWV9NRURJQSB9LAkJLyogUEMvVFYgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgcmNfbWFwX2xpc3QgcHY5NTFfbWFwID0geworCS5tYXAgPSB7CisJCS5zY2FuICAgID0gcHY5NTEsCisJCS5zaXplICAgID0gQVJSQVlfU0laRShwdjk1MSksCisJCS5yY190eXBlID0gUkNfVFlQRV9VTktOT1dOLAkvKiBMZWdhY3kgSVIgdHlwZSAqLworCQkubmFtZSAgICA9IFJDX01BUF9QVjk1MSwKKwl9Cit9OworCitzdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcF9wdjk1MSh2b2lkKQoreworCXJldHVybiByY19tYXBfcmVnaXN0ZXIoJnB2OTUxX21hcCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3JjX21hcF9wdjk1MSh2b2lkKQoreworCXJjX21hcF91bnJlZ2lzdGVyKCZwdjk1MV9tYXApOworfQorCittb2R1bGVfaW5pdChpbml0X3JjX21hcF9wdjk1MSkKK21vZHVsZV9leGl0KGV4aXRfcmNfbWFwX3B2OTUxKQorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1yYzUtaGF1cHBhdWdlLW5ldy5jIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLXJjNS1oYXVwcGF1Z2UtbmV3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGZjOWIxNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1yYzUtaGF1cHBhdWdlLW5ldy5jCkBAIC0wLDAgKzEsMTQxIEBACisvKiByYzUtaGF1cHBhdWdlLW5ldy5oIC0gS2V5dGFibGUgZm9yIHJjNV9oYXVwcGF1Z2VfbmV3IFJlbW90ZSBDb250cm9sbGVyCisgKgorICoga2V5bWFwIGltcG9ydGVkIGZyb20gaXIta2V5bWFwcy5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPG1lZGlhL3JjLW1hcC5oPgorCisvKgorICogSGF1cHBhdWdlOnRoZSBuZXdlciwgZ3JheSByZW1vdGVzIChzZWVtcyB0aGVyZSBhcmUgbXVsdGlwbGUKKyAqIHNsaWdodGx5IGRpZmZlcmVudCB2ZXJzaW9ucyksIHNoaXBwZWQgd2l0aCBjeDg4K2l2dHYgY2FyZHMuCisgKgorICogVGhpcyB0YWJsZSBjb250YWlucyB0aGUgY29tcGxldGUgUkM1IGNvZGUsIGluc3RlYWQgb2YganVzdCB0aGUgZGF0YSBwYXJ0CisgKi8KKworc3RhdGljIHN0cnVjdCByY19tYXBfdGFibGUgcmM1X2hhdXBwYXVnZV9uZXdbXSA9IHsKKwkvKiBLZXlzIDAgdG8gOSAqLworCXsgMHgxZTAwLCBLRVlfMCB9LAorCXsgMHgxZTAxLCBLRVlfMSB9LAorCXsgMHgxZTAyLCBLRVlfMiB9LAorCXsgMHgxZTAzLCBLRVlfMyB9LAorCXsgMHgxZTA0LCBLRVlfNCB9LAorCXsgMHgxZTA1LCBLRVlfNSB9LAorCXsgMHgxZTA2LCBLRVlfNiB9LAorCXsgMHgxZTA3LCBLRVlfNyB9LAorCXsgMHgxZTA4LCBLRVlfOCB9LAorCXsgMHgxZTA5LCBLRVlfOSB9LAorCisJeyAweDFlMGEsIEtFWV9URVhUIH0sCQkvKiBrZXlwYWQgYXN0ZXJpc2sgYXMgd2VsbCAqLworCXsgMHgxZTBiLCBLRVlfUkVEIH0sCQkvKiByZWQgYnV0dG9uICovCisJeyAweDFlMGMsIEtFWV9SQURJTyB9LAorCXsgMHgxZTBkLCBLRVlfTUVOVSB9LAorCXsgMHgxZTBlLCBLRVlfU1VCVElUTEUgfSwJCS8qIGFsc28gdGhlICMga2V5ICovCisJeyAweDFlMGYsIEtFWV9NVVRFIH0sCisJeyAweDFlMTAsIEtFWV9WT0xVTUVVUCB9LAorCXsgMHgxZTExLCBLRVlfVk9MVU1FRE9XTiB9LAorCXsgMHgxZTEyLCBLRVlfUFJFVklPVVMgfSwJCS8qIHByZXZpb3VzIGNoYW5uZWwgKi8KKwl7IDB4MWUxNCwgS0VZX1VQIH0sCisJeyAweDFlMTUsIEtFWV9ET1dOIH0sCisJeyAweDFlMTYsIEtFWV9MRUZUIH0sCisJeyAweDFlMTcsIEtFWV9SSUdIVCB9LAorCXsgMHgxZTE4LCBLRVlfVklERU8gfSwJCS8qIFZpZGVvcyAqLworCXsgMHgxZTE5LCBLRVlfQVVESU8gfSwJCS8qIE11c2ljICovCisJLyogMHgxZTFhOiBQaWN0dXJlcyAtIHByZXN1bWUgdGhpcyBtZWFucworCSAgICJNdWx0aW1lZGlhIEhvbWUgUGxhdGZvcm0iIC0KKwkgICBubyAiUElDVFVSRVMiIGtleSBpbiBpbnB1dC5oCisJICovCisJeyAweDFlMWEsIEtFWV9NSFAgfSwKKworCXsgMHgxZTFiLCBLRVlfRVBHIH0sCQkvKiBHdWlkZSAqLworCXsgMHgxZTFjLCBLRVlfVFYgfSwKKwl7IDB4MWUxZSwgS0VZX05FWFRTT05HIH0sCQkvKiBza2lwID58ICovCisJeyAweDFlMWYsIEtFWV9FWElUIH0sCQkvKiBiYWNrL2V4aXQgKi8KKwl7IDB4MWUyMCwgS0VZX0NIQU5ORUxVUCB9LAkvKiBjaGFubmVsIC8gcHJvZ3JhbSArICovCisJeyAweDFlMjEsIEtFWV9DSEFOTkVMRE9XTiB9LAkvKiBjaGFubmVsIC8gcHJvZ3JhbSAtICovCisJeyAweDFlMjIsIEtFWV9DSEFOTkVMIH0sCQkvKiBzb3VyY2UgKG9sZCBibGFjayByZW1vdGUpICovCisJeyAweDFlMjQsIEtFWV9QUkVWSU9VU1NPTkcgfSwJLyogcmVwbGF5IHw8ICovCisJeyAweDFlMjUsIEtFWV9FTlRFUiB9LAkJLyogT0sgKi8KKwl7IDB4MWUyNiwgS0VZX1NMRUVQIH0sCQkvKiBtaW5pbWl6ZSAob2xkIGJsYWNrIHJlbW90ZSkgKi8KKwl7IDB4MWUyOSwgS0VZX0JMVUUgfSwJCS8qIGJsdWUga2V5ICovCisJeyAweDFlMmUsIEtFWV9HUkVFTiB9LAkJLyogZ3JlZW4gYnV0dG9uICovCisJeyAweDFlMzAsIEtFWV9QQVVTRSB9LAkJLyogcGF1c2UgKi8KKwl7IDB4MWUzMiwgS0VZX1JFV0lORCB9LAkJLyogYmFja3dhcmQgPDwgKi8KKwl7IDB4MWUzNCwgS0VZX0ZBU1RGT1JXQVJEIH0sCS8qIGZvcndhcmQgPj4gKi8KKwl7IDB4MWUzNSwgS0VZX1BMQVkgfSwKKwl7IDB4MWUzNiwgS0VZX1NUT1AgfSwKKwl7IDB4MWUzNywgS0VZX1JFQ09SRCB9LAkJLyogcmVjb3JkaW5nICovCisJeyAweDFlMzgsIEtFWV9ZRUxMT1cgfSwJCS8qIHllbGxvdyBrZXkgKi8KKwl7IDB4MWUzYiwgS0VZX1NFTEVDVCB9LAkJLyogdG9wIHJpZ2h0IGJ1dHRvbiAqLworCXsgMHgxZTNjLCBLRVlfWk9PTSB9LAkJLyogZnVsbCAqLworCXsgMHgxZTNkLCBLRVlfUE9XRVIgfSwJCS8qIHN5c3RlbSBwb3dlciAoZ3JlZW4gYnV0dG9uKSAqLworCisJLyogS2V5Y29kZXMgZm9yIERTUi0wMTEyIHJlbW90ZSBidW5kbGVkIHdpdGggSGF1cGF1Z2UgTWluaVN0aWNrICovCisJeyAweDFkMDAsIEtFWV8wIH0sCisJeyAweDFkMDEsIEtFWV8xIH0sCisJeyAweDFkMDIsIEtFWV8yIH0sCisJeyAweDFkMDMsIEtFWV8zIH0sCisJeyAweDFkMDQsIEtFWV80IH0sCisJeyAweDFkMDUsIEtFWV81IH0sCisJeyAweDFkMDYsIEtFWV82IH0sCisJeyAweDFkMDcsIEtFWV83IH0sCisJeyAweDFkMDgsIEtFWV84IH0sCisJeyAweDFkMDksIEtFWV85IH0sCisJeyAweDFkMGEsIEtFWV9URVhUIH0sCisJeyAweDFkMGQsIEtFWV9NRU5VIH0sCisJeyAweDFkMGYsIEtFWV9NVVRFIH0sCisJeyAweDFkMTAsIEtFWV9WT0xVTUVVUCB9LAorCXsgMHgxZDExLCBLRVlfVk9MVU1FRE9XTiB9LAorCXsgMHgxZDEyLCBLRVlfUFJFVklPVVMgfSwgICAgICAgIC8qIFByZXYuQ2ggLi4gPz8/ICovCisJeyAweDFkMTQsIEtFWV9VUCB9LAorCXsgMHgxZDE1LCBLRVlfRE9XTiB9LAorCXsgMHgxZDE2LCBLRVlfTEVGVCB9LAorCXsgMHgxZDE3LCBLRVlfUklHSFQgfSwKKwl7IDB4MWQxYywgS0VZX1RWIH0sCisJeyAweDFkMWUsIEtFWV9ORVhUIH0sICAgICAgICAgICAvKiA+fCAgICAgICAgICAgICAqLworCXsgMHgxZDFmLCBLRVlfRVhJVCB9LAorCXsgMHgxZDIwLCBLRVlfQ0hBTk5FTFVQIH0sCisJeyAweDFkMjEsIEtFWV9DSEFOTkVMRE9XTiB9LAorCXsgMHgxZDI0LCBLRVlfTEFTVCB9LCAgICAgICAgICAgLyogPHwgICAgICAgICAgICAgKi8KKwl7IDB4MWQyNSwgS0VZX09LIH0sCisJeyAweDFkMzAsIEtFWV9QQVVTRSB9LAorCXsgMHgxZDMyLCBLRVlfUkVXSU5EIH0sCisJeyAweDFkMzQsIEtFWV9GQVNURk9SV0FSRCB9LAorCXsgMHgxZDM1LCBLRVlfUExBWSB9LAorCXsgMHgxZDM2LCBLRVlfU1RPUCB9LAorCXsgMHgxZDM3LCBLRVlfUkVDT1JEIH0sCisJeyAweDFkM2IsIEtFWV9HT1RPIH0sCisJeyAweDFkM2QsIEtFWV9QT1dFUiB9LAorCXsgMHgxZDNmLCBLRVlfSE9NRSB9LAorfTsKKworc3RhdGljIHN0cnVjdCByY19tYXBfbGlzdCByYzVfaGF1cHBhdWdlX25ld19tYXAgPSB7CisJLm1hcCA9IHsKKwkJLnNjYW4gICAgPSByYzVfaGF1cHBhdWdlX25ldywKKwkJLnNpemUgICAgPSBBUlJBWV9TSVpFKHJjNV9oYXVwcGF1Z2VfbmV3KSwKKwkJLnJjX3R5cGUgPSBSQ19UWVBFX1JDNSwKKwkJLm5hbWUgICAgPSBSQ19NQVBfUkM1X0hBVVBQQVVHRV9ORVcsCisJfQorfTsKKworc3RhdGljIGludCBfX2luaXQgaW5pdF9yY19tYXBfcmM1X2hhdXBwYXVnZV9uZXcodm9pZCkKK3sKKwlyZXR1cm4gcmNfbWFwX3JlZ2lzdGVyKCZyYzVfaGF1cHBhdWdlX25ld19tYXApOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yY19tYXBfcmM1X2hhdXBwYXVnZV9uZXcodm9pZCkKK3sKKwlyY19tYXBfdW5yZWdpc3RlcigmcmM1X2hhdXBwYXVnZV9uZXdfbWFwKTsKK30KKworbW9kdWxlX2luaXQoaW5pdF9yY19tYXBfcmM1X2hhdXBwYXVnZV9uZXcpCittb2R1bGVfZXhpdChleGl0X3JjX21hcF9yYzVfaGF1cHBhdWdlX25ldykKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtcmM1LXR2LmMgYi9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtcmM1LXR2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZjZWY5ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1yYzUtdHYuYwpAQCAtMCwwICsxLDgxIEBACisvKiByYzUtdHYuaCAtIEtleXRhYmxlIGZvciByYzVfdHYgUmVtb3RlIENvbnRyb2xsZXIKKyAqCisgKiBrZXltYXAgaW1wb3J0ZWQgZnJvbSBpci1rZXltYXBzLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgYnkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bWVkaWEvcmMtbWFwLmg+CisKKy8qIGdlbmVyaWMgUkM1IGtleXRhYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIHNlZSBodHRwOi8vdXNlcnMucGFuZG9yYS5iZS9uZW55YS9lbGVjdHJvbmljcy9yYzUvY29kZXMwMC5odG0gKi8KKy8qIHVzZWQgYnkgb2xkIChibGFjaykgSGF1cHBhdWdlIHJlbW90ZXMgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworc3RhdGljIHN0cnVjdCByY19tYXBfdGFibGUgcmM1X3R2W10gPSB7CisJLyogS2V5cyAwIHRvIDkgKi8KKwl7IDB4MDAsIEtFWV8wIH0sCisJeyAweDAxLCBLRVlfMSB9LAorCXsgMHgwMiwgS0VZXzIgfSwKKwl7IDB4MDMsIEtFWV8zIH0sCisJeyAweDA0LCBLRVlfNCB9LAorCXsgMHgwNSwgS0VZXzUgfSwKKwl7IDB4MDYsIEtFWV82IH0sCisJeyAweDA3LCBLRVlfNyB9LAorCXsgMHgwOCwgS0VZXzggfSwKKwl7IDB4MDksIEtFWV85IH0sCisKKwl7IDB4MGIsIEtFWV9DSEFOTkVMIH0sCQkvKiBjaGFubmVsIC8gcHJvZ3JhbSAoamFwYW46IDExKSAqLworCXsgMHgwYywgS0VZX1BPV0VSIH0sCQkvKiBzdGFuZGJ5ICovCisJeyAweDBkLCBLRVlfTVVURSB9LAkJLyogbXV0ZSAvIGRlbXV0ZSAqLworCXsgMHgwZiwgS0VZX1RWIH0sCQkvKiBkaXNwbGF5ICovCisJeyAweDEwLCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4MTEsIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweDEyLCBLRVlfQlJJR0hUTkVTU1VQIH0sCisJeyAweDEzLCBLRVlfQlJJR0hUTkVTU0RPV04gfSwKKwl7IDB4MWUsIEtFWV9TRUFSQ0ggfSwJCS8qIHNlYXJjaCArICovCisJeyAweDIwLCBLRVlfQ0hBTk5FTFVQIH0sCS8qIGNoYW5uZWwgLyBwcm9ncmFtICsgKi8KKwl7IDB4MjEsIEtFWV9DSEFOTkVMRE9XTiB9LAkvKiBjaGFubmVsIC8gcHJvZ3JhbSAtICovCisJeyAweDIyLCBLRVlfQ0hBTk5FTCB9LAkJLyogYWx0IC8gY2hhbm5lbCAqLworCXsgMHgyMywgS0VZX0xBTkdVQUdFIH0sCQkvKiAxc3QgLyAybmQgbGFuZ3VhZ2UgKi8KKwl7IDB4MjYsIEtFWV9TTEVFUCB9LAkJLyogc2xlZXB0aW1lciAqLworCXsgMHgyZSwgS0VZX01FTlUgfSwJCS8qIDJuZCBjb250cm9scyAoVVNBOiBtZW51KSAqLworCXsgMHgzMCwgS0VZX1BBVVNFIH0sCisJeyAweDMyLCBLRVlfUkVXSU5EIH0sCisJeyAweDMzLCBLRVlfR09UTyB9LAorCXsgMHgzNSwgS0VZX1BMQVkgfSwKKwl7IDB4MzYsIEtFWV9TVE9QIH0sCisJeyAweDM3LCBLRVlfUkVDT1JEIH0sCQkvKiByZWNvcmRpbmcgKi8KKwl7IDB4M2MsIEtFWV9URVhUIH0sCQkvKiB0ZWxldGV4dCBzdWJtb2RlIChKYXBhbjogMTIpICovCisJeyAweDNkLCBLRVlfU1VTUEVORCB9LAkJLyogc3lzdGVtIHN0YW5kYnkgKi8KKworfTsKKworc3RhdGljIHN0cnVjdCByY19tYXBfbGlzdCByYzVfdHZfbWFwID0geworCS5tYXAgPSB7CisJCS5zY2FuICAgID0gcmM1X3R2LAorCQkuc2l6ZSAgICA9IEFSUkFZX1NJWkUocmM1X3R2KSwKKwkJLnJjX3R5cGUgPSBSQ19UWVBFX1VOS05PV04sCS8qIExlZ2FjeSBJUiB0eXBlICovCisJCS5uYW1lICAgID0gUkNfTUFQX1JDNV9UViwKKwl9Cit9OworCitzdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcF9yYzVfdHYodm9pZCkKK3sKKwlyZXR1cm4gcmNfbWFwX3JlZ2lzdGVyKCZyYzVfdHZfbWFwKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGV4aXRfcmNfbWFwX3JjNV90dih2b2lkKQoreworCXJjX21hcF91bnJlZ2lzdGVyKCZyYzVfdHZfbWFwKTsKK30KKworbW9kdWxlX2luaXQoaW5pdF9yY19tYXBfcmM1X3R2KQorbW9kdWxlX2V4aXQoZXhpdF9yY19tYXBfcmM1X3R2KQorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1yYzYtbWNlLmMgYi9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtcmM2LW1jZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiZjMzMzcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtcmM2LW1jZS5jCkBAIC0wLDAgKzEsMTEzIEBACisvKiByYy1yYzYtbWNlLmMgLSBLZXl0YWJsZSBmb3IgV2luZG93cyBNZWRpYSBDZW50ZXIgUkMtNiByZW1vdGVzIGZvciB1c2UKKyAqIHdpdGggdGhlIE1lZGlhIENlbnRlciBFZGl0aW9uIGVIb21lIEluZnJhcmVkIFRyYW5zY2VpdmVyLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBieSBKYXJvZCBXaWxzb24gPGphcm9kQHJlZGhhdC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bWVkaWEvcmMtbWFwLmg+CisKK3N0YXRpYyBzdHJ1Y3QgcmNfbWFwX3RhYmxlIHJjNl9tY2VbXSA9IHsKKworCXsgMHg4MDBmMDQwMCwgS0VZX05VTUVSSUNfMCB9LAorCXsgMHg4MDBmMDQwMSwgS0VZX05VTUVSSUNfMSB9LAorCXsgMHg4MDBmMDQwMiwgS0VZX05VTUVSSUNfMiB9LAorCXsgMHg4MDBmMDQwMywgS0VZX05VTUVSSUNfMyB9LAorCXsgMHg4MDBmMDQwNCwgS0VZX05VTUVSSUNfNCB9LAorCXsgMHg4MDBmMDQwNSwgS0VZX05VTUVSSUNfNSB9LAorCXsgMHg4MDBmMDQwNiwgS0VZX05VTUVSSUNfNiB9LAorCXsgMHg4MDBmMDQwNywgS0VZX05VTUVSSUNfNyB9LAorCXsgMHg4MDBmMDQwOCwgS0VZX05VTUVSSUNfOCB9LAorCXsgMHg4MDBmMDQwOSwgS0VZX05VTUVSSUNfOSB9LAorCisJeyAweDgwMGYwNDBhLCBLRVlfREVMRVRFIH0sCisJeyAweDgwMGYwNDBiLCBLRVlfRU5URVIgfSwKKwl7IDB4ODAwZjA0MGMsIEtFWV9QT1dFUiB9LAkJLyogUEMgUG93ZXIgKi8KKwl7IDB4ODAwZjA0MGQsIEtFWV9QUk9HMSB9LAkJLyogV2luZG93cyBNQ0UgYnV0dG9uICovCisJeyAweDgwMGYwNDBlLCBLRVlfTVVURSB9LAorCXsgMHg4MDBmMDQwZiwgS0VZX0lORk8gfSwKKworCXsgMHg4MDBmMDQxMCwgS0VZX1ZPTFVNRVVQIH0sCisJeyAweDgwMGYwNDExLCBLRVlfVk9MVU1FRE9XTiB9LAorCXsgMHg4MDBmMDQxMiwgS0VZX0NIQU5ORUxVUCB9LAorCXsgMHg4MDBmMDQxMywgS0VZX0NIQU5ORUxET1dOIH0sCisKKwl7IDB4ODAwZjA0MTQsIEtFWV9GQVNURk9SV0FSRCB9LAorCXsgMHg4MDBmMDQxNSwgS0VZX1JFV0lORCB9LAorCXsgMHg4MDBmMDQxNiwgS0VZX1BMQVkgfSwKKwl7IDB4ODAwZjA0MTcsIEtFWV9SRUNPUkQgfSwKKwl7IDB4ODAwZjA0MTgsIEtFWV9QQVVTRSB9LAorCXsgMHg4MDBmMDQ2ZSwgS0VZX1BMQVlQQVVTRSB9LAorCXsgMHg4MDBmMDQxOSwgS0VZX1NUT1AgfSwKKwl7IDB4ODAwZjA0MWEsIEtFWV9ORVhUIH0sCisJeyAweDgwMGYwNDFiLCBLRVlfUFJFVklPVVMgfSwKKwl7IDB4ODAwZjA0MWMsIEtFWV9OVU1FUklDX1BPVU5EIH0sCisJeyAweDgwMGYwNDFkLCBLRVlfTlVNRVJJQ19TVEFSIH0sCisKKwl7IDB4ODAwZjA0MWUsIEtFWV9VUCB9LAorCXsgMHg4MDBmMDQxZiwgS0VZX0RPV04gfSwKKwl7IDB4ODAwZjA0MjAsIEtFWV9MRUZUIH0sCisJeyAweDgwMGYwNDIxLCBLRVlfUklHSFQgfSwKKworCXsgMHg4MDBmMDQyMiwgS0VZX09LIH0sCisJeyAweDgwMGYwNDIzLCBLRVlfRVhJVCB9LAorCXsgMHg4MDBmMDQyNCwgS0VZX0RWRCB9LAorCXsgMHg4MDBmMDQyNSwgS0VZX1RVTkVSIH0sCQkvKiBMaXZlVFYgKi8KKwl7IDB4ODAwZjA0MjYsIEtFWV9FUEcgfSwJCS8qIEd1aWRlICovCisJeyAweDgwMGYwNDI3LCBLRVlfWk9PTSB9LAkJLyogQXNwZWN0ICovCisKKwl7IDB4ODAwZjA0M2EsIEtFWV9CUklHSFRORVNTVVAgfSwKKworCXsgMHg4MDBmMDQ0NiwgS0VZX1RWIH0sCisJeyAweDgwMGYwNDQ3LCBLRVlfQVVESU8gfSwJCS8qIE15IE11c2ljICovCisJeyAweDgwMGYwNDQ4LCBLRVlfUFZSIH0sCQkvKiBSZWNvcmRlZFRWICovCisJeyAweDgwMGYwNDQ5LCBLRVlfQ0FNRVJBIH0sCisJeyAweDgwMGYwNDRhLCBLRVlfVklERU8gfSwKKwl7IDB4ODAwZjA0NGMsIEtFWV9MQU5HVUFHRSB9LAorCXsgMHg4MDBmMDQ0ZCwgS0VZX1RJVExFIH0sCisJeyAweDgwMGYwNDRlLCBLRVlfUFJJTlQgfSwJLyogUHJpbnQgLSBIUCBPRU0gdmVyc2lvbiBvZiByZW1vdGUgKi8KKworCXsgMHg4MDBmMDQ1MCwgS0VZX1JBRElPIH0sCisKKwl7IDB4ODAwZjA0NWEsIEtFWV9TVUJUSVRMRSB9LAkJLyogQ2FwdGlvbi9UZWxldGV4dCAqLworCXsgMHg4MDBmMDQ1YiwgS0VZX1JFRCB9LAorCXsgMHg4MDBmMDQ1YywgS0VZX0dSRUVOIH0sCisJeyAweDgwMGYwNDVkLCBLRVlfWUVMTE9XIH0sCisJeyAweDgwMGYwNDVlLCBLRVlfQkxVRSB9LAorCisJeyAweDgwMGYwNDY1LCBLRVlfUE9XRVIyIH0sCS8qIFRWIFBvd2VyICovCisJeyAweDgwMGYwNDZlLCBLRVlfUExBWVBBVVNFIH0sCisJeyAweDgwMGYwNDZmLCBLRVlfTUVESUEgfSwJLyogU3RhcnQgbWVkaWEgYXBwbGljYXRpb24gKE5FVykgKi8KKworCXsgMHg4MDBmMDQ4MCwgS0VZX0JSSUdIVE5FU1NET1dOIH0sCisJeyAweDgwMGYwNDgxLCBLRVlfUExBWVBBVVNFIH0sCit9OworCitzdGF0aWMgc3RydWN0IHJjX21hcF9saXN0IHJjNl9tY2VfbWFwID0geworCS5tYXAgPSB7CisJCS5zY2FuICAgID0gcmM2X21jZSwKKwkJLnNpemUgICAgPSBBUlJBWV9TSVpFKHJjNl9tY2UpLAorCQkucmNfdHlwZSA9IFJDX1RZUEVfUkM2LAorCQkubmFtZSAgICA9IFJDX01BUF9SQzZfTUNFLAorCX0KK307CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfcmNfbWFwX3JjNl9tY2Uodm9pZCkKK3sKKwlyZXR1cm4gcmNfbWFwX3JlZ2lzdGVyKCZyYzZfbWNlX21hcCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3JjX21hcF9yYzZfbWNlKHZvaWQpCit7CisJcmNfbWFwX3VucmVnaXN0ZXIoJnJjNl9tY2VfbWFwKTsKK30KKworbW9kdWxlX2luaXQoaW5pdF9yY19tYXBfcmM2X21jZSkKK21vZHVsZV9leGl0KGV4aXRfcmNfbWFwX3JjNl9tY2UpCisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkphcm9kIFdpbHNvbiA8amFyb2RAcmVkaGF0LmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1yZWFsLWF1ZGlvLTIyMC0zMi1rZXlzLmMgYi9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtcmVhbC1hdWRpby0yMjAtMzIta2V5cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkMTQ1OTgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtcmVhbC1hdWRpby0yMjAtMzIta2V5cy5jCkBAIC0wLDAgKzEsNzggQEAKKy8qIHJlYWwtYXVkaW8tMjIwLTMyLWtleXMuaCAtIEtleXRhYmxlIGZvciByZWFsX2F1ZGlvXzIyMF8zMl9rZXlzIFJlbW90ZSBDb250cm9sbGVyCisgKgorICoga2V5bWFwIGltcG9ydGVkIGZyb20gaXIta2V5bWFwcy5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPG1lZGlhL3JjLW1hcC5oPgorCisvKiBab2dpcyBSZWFsIEF1ZGlvIDIyMCAtIDMyIGtleXMgSVIgKi8KKworc3RhdGljIHN0cnVjdCByY19tYXBfdGFibGUgcmVhbF9hdWRpb18yMjBfMzJfa2V5c1tdID0geworCXsgMHgxYywgS0VZX1JBRElPfSwKKwl7IDB4MTIsIEtFWV9QT1dFUjJ9LAorCisJeyAweDAxLCBLRVlfMX0sCisJeyAweDAyLCBLRVlfMn0sCisJeyAweDAzLCBLRVlfM30sCisJeyAweDA0LCBLRVlfNH0sCisJeyAweDA1LCBLRVlfNX0sCisJeyAweDA2LCBLRVlfNn0sCisJeyAweDA3LCBLRVlfN30sCisJeyAweDA4LCBLRVlfOH0sCisJeyAweDA5LCBLRVlfOX0sCisJeyAweDAwLCBLRVlfMH0sCisKKwl7IDB4MGMsIEtFWV9WT0xVTUVVUH0sCisJeyAweDE4LCBLRVlfVk9MVU1FRE9XTn0sCisJeyAweDBiLCBLRVlfQ0hBTk5FTFVQfSwKKwl7IDB4MTUsIEtFWV9DSEFOTkVMRE9XTn0sCisJeyAweDE2LCBLRVlfRU5URVJ9LAorCisJeyAweDExLCBLRVlfTElTVH0sCQkvKiBTb3VyY2UgKi8KKwl7IDB4MGQsIEtFWV9BVURJT30sCQkvKiBzdGVyZW8gKi8KKworCXsgMHgwZiwgS0VZX1BSRVZJT1VTfSwJCS8qIFByZXYgKi8KKwl7IDB4MWIsIEtFWV9USU1FfSwJCS8qIFRpbWVzaGlmdCAqLworCXsgMHgxYSwgS0VZX05FWFR9LAkJLyogTmV4dCAqLworCisJeyAweDBlLCBLRVlfU1RPUH0sCisJeyAweDFmLCBLRVlfUExBWX0sCisJeyAweDFlLCBLRVlfUExBWVBBVVNFfSwJCS8qIFBhdXNlICovCisKKwl7IDB4MWQsIEtFWV9SRUNPUkR9LAorCXsgMHgxMywgS0VZX01VVEV9LAorCXsgMHgxOSwgS0VZX0NBTUVSQX0sCQkvKiBTbmFwc2hvdCAqLworCit9OworCitzdGF0aWMgc3RydWN0IHJjX21hcF9saXN0IHJlYWxfYXVkaW9fMjIwXzMyX2tleXNfbWFwID0geworCS5tYXAgPSB7CisJCS5zY2FuICAgID0gcmVhbF9hdWRpb18yMjBfMzJfa2V5cywKKwkJLnNpemUgICAgPSBBUlJBWV9TSVpFKHJlYWxfYXVkaW9fMjIwXzMyX2tleXMpLAorCQkucmNfdHlwZSA9IFJDX1RZUEVfVU5LTk9XTiwJLyogTGVnYWN5IElSIHR5cGUgKi8KKwkJLm5hbWUgICAgPSBSQ19NQVBfUkVBTF9BVURJT18yMjBfMzJfS0VZUywKKwl9Cit9OworCitzdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcF9yZWFsX2F1ZGlvXzIyMF8zMl9rZXlzKHZvaWQpCit7CisJcmV0dXJuIHJjX21hcF9yZWdpc3RlcigmcmVhbF9hdWRpb18yMjBfMzJfa2V5c19tYXApOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yY19tYXBfcmVhbF9hdWRpb18yMjBfMzJfa2V5cyh2b2lkKQoreworCXJjX21hcF91bnJlZ2lzdGVyKCZyZWFsX2F1ZGlvXzIyMF8zMl9rZXlzX21hcCk7Cit9CisKK21vZHVsZV9pbml0KGluaXRfcmNfbWFwX3JlYWxfYXVkaW9fMjIwXzMyX2tleXMpCittb2R1bGVfZXhpdChleGl0X3JjX21hcF9yZWFsX2F1ZGlvXzIyMF8zMl9rZXlzKQorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1zdHJlYW16YXAuYyBiL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1zdHJlYW16YXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmNjMTBkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLXN0cmVhbXphcC5jCkBAIC0wLDAgKzEsODIgQEAKKy8qIHJjLXN0cmVhbXphcC5jIC0gS2V5dGFibGUgZm9yIFN0cmVhbXphcCBQQyBSZW1vdGUsIGZvciB1c2UKKyAqIHdpdGggdGhlIFN0cmVhbXphcCBQQyBSZW1vdGUgSVIgUmVjZWl2ZXIuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIGJ5IEphcm9kIFdpbHNvbiA8amFyb2RAcmVkaGF0LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxtZWRpYS9yYy1tYXAuaD4KKworc3RhdGljIHN0cnVjdCByY19tYXBfdGFibGUgc3RyZWFtemFwW10gPSB7CisvKgorICogVGhlIFN0cmVhbXphcCByZW1vdGUgaXMgYWxtb3N0LCBidXQgbm90IHF1aXRlLCBSQy01LCBhcyBpdCBoYXMgYW4gZXh0cmEKKyAqIGJpdCBpbiBpdCwgd2hpY2ggdGhyb3dzIHRoZSBpbi1rZXJuZWwgUkMtNSBkZWNvZGVyIGZvciBhIGxvb3AuIEN1cnJlbnRseSwKKyAqIGFuIGFkZGl0aW9uYWwgUkMtNS1zeiBkZWNvZGVyIGlzIGJlaW5nIGRlcGxveWVkIHRvIHN1cHBvcnQgaXQsIGJ1dCBpdAorICogbWF5IGJlIHBvc3NpYmxlIHRvIG1lcmdlIGl0IGJhY2sgd2l0aCB0aGUgc3RhbmRhcmQgUkMtNSBkZWNvZGVyLgorICovCisJeyAweDI4YzAsIEtFWV9OVU1FUklDXzAgfSwKKwl7IDB4MjhjMSwgS0VZX05VTUVSSUNfMSB9LAorCXsgMHgyOGMyLCBLRVlfTlVNRVJJQ18yIH0sCisJeyAweDI4YzMsIEtFWV9OVU1FUklDXzMgfSwKKwl7IDB4MjhjNCwgS0VZX05VTUVSSUNfNCB9LAorCXsgMHgyOGM1LCBLRVlfTlVNRVJJQ181IH0sCisJeyAweDI4YzYsIEtFWV9OVU1FUklDXzYgfSwKKwl7IDB4MjhjNywgS0VZX05VTUVSSUNfNyB9LAorCXsgMHgyOGM4LCBLRVlfTlVNRVJJQ184IH0sCisJeyAweDI4YzksIEtFWV9OVU1FUklDXzkgfSwKKwl7IDB4MjhjYSwgS0VZX1BPV0VSIH0sCisJeyAweDI4Y2IsIEtFWV9NVVRFIH0sCisJeyAweDI4Y2MsIEtFWV9DSEFOTkVMVVAgfSwKKwl7IDB4MjhjZCwgS0VZX1ZPTFVNRVVQIH0sCisJeyAweDI4Y2UsIEtFWV9DSEFOTkVMRE9XTiB9LAorCXsgMHgyOGNmLCBLRVlfVk9MVU1FRE9XTiB9LAorCXsgMHgyOGQwLCBLRVlfVVAgfSwKKwl7IDB4MjhkMSwgS0VZX0xFRlQgfSwKKwl7IDB4MjhkMiwgS0VZX09LIH0sCisJeyAweDI4ZDMsIEtFWV9SSUdIVCB9LAorCXsgMHgyOGQ0LCBLRVlfRE9XTiB9LAorCXsgMHgyOGQ1LCBLRVlfTUVOVSB9LAorCXsgMHgyOGQ2LCBLRVlfRVhJVCB9LAorCXsgMHgyOGQ3LCBLRVlfUExBWSB9LAorCXsgMHgyOGQ4LCBLRVlfUEFVU0UgfSwKKwl7IDB4MjhkOSwgS0VZX1NUT1AgfSwKKwl7IDB4MjhkYSwgS0VZX0JBQ0sgfSwKKwl7IDB4MjhkYiwgS0VZX0ZPUldBUkQgfSwKKwl7IDB4MjhkYywgS0VZX1JFQ09SRCB9LAorCXsgMHgyOGRkLCBLRVlfUkVXSU5EIH0sCisJeyAweDI4ZGUsIEtFWV9GQVNURk9SV0FSRCB9LAorCXsgMHgyOGUwLCBLRVlfUkVEIH0sCisJeyAweDI4ZTEsIEtFWV9HUkVFTiB9LAorCXsgMHgyOGUyLCBLRVlfWUVMTE9XIH0sCisJeyAweDI4ZTMsIEtFWV9CTFVFIH0sCisKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmNfbWFwX2xpc3Qgc3RyZWFtemFwX21hcCA9IHsKKwkubWFwID0geworCQkuc2NhbiAgICA9IHN0cmVhbXphcCwKKwkJLnNpemUgICAgPSBBUlJBWV9TSVpFKHN0cmVhbXphcCksCisJCS5yY190eXBlID0gUkNfVFlQRV9SQzVfU1osCisJCS5uYW1lICAgID0gUkNfTUFQX1NUUkVBTVpBUCwKKwl9Cit9OworCitzdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcF9zdHJlYW16YXAodm9pZCkKK3sKKwlyZXR1cm4gcmNfbWFwX3JlZ2lzdGVyKCZzdHJlYW16YXBfbWFwKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGV4aXRfcmNfbWFwX3N0cmVhbXphcCh2b2lkKQoreworCXJjX21hcF91bnJlZ2lzdGVyKCZzdHJlYW16YXBfbWFwKTsKK30KKworbW9kdWxlX2luaXQoaW5pdF9yY19tYXBfc3RyZWFtemFwKQorbW9kdWxlX2V4aXQoZXhpdF9yY19tYXBfc3RyZWFtemFwKQorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJKYXJvZCBXaWxzb24gPGphcm9kQHJlZGhhdC5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtdGJzLW5lYy5jIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLXRicy1uZWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjQyZWU2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLXRicy1uZWMuYwpAQCAtMCwwICsxLDc1IEBACisvKiB0YnMtbmVjLmggLSBLZXl0YWJsZSBmb3IgdGJzX25lYyBSZW1vdGUgQ29udHJvbGxlcgorICoKKyAqIGtleW1hcCBpbXBvcnRlZCBmcm9tIGlyLWtleW1hcHMuYworICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBieSBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxtZWRpYS9yYy1tYXAuaD4KKworc3RhdGljIHN0cnVjdCByY19tYXBfdGFibGUgdGJzX25lY1tdID0geworCXsgMHg4NCwgS0VZX1BPV0VSMn0sCQkvKiBwb3dlciAqLworCXsgMHg5NCwgS0VZX01VVEV9LAkJLyogbXV0ZSAqLworCXsgMHg4NywgS0VZXzF9LAorCXsgMHg4NiwgS0VZXzJ9LAorCXsgMHg4NSwgS0VZXzN9LAorCXsgMHg4YiwgS0VZXzR9LAorCXsgMHg4YSwgS0VZXzV9LAorCXsgMHg4OSwgS0VZXzZ9LAorCXsgMHg4ZiwgS0VZXzd9LAorCXsgMHg4ZSwgS0VZXzh9LAorCXsgMHg4ZCwgS0VZXzl9LAorCXsgMHg5MiwgS0VZXzB9LAorCXsgMHhjMCwgS0VZXzEwQ0hBTk5FTFNVUH0sCS8qIDEwKyAqLworCXsgMHhkMCwgS0VZXzEwQ0hBTk5FTFNET1dOfSwJLyogMTAtICovCisJeyAweDk2LCBLRVlfQ0hBTk5FTFVQfSwJCS8qIGNoKyAqLworCXsgMHg5MSwgS0VZX0NIQU5ORUxET1dOfSwJLyogY2gtICovCisJeyAweDkzLCBLRVlfVk9MVU1FVVB9LAkJLyogdm9sKyAqLworCXsgMHg4YywgS0VZX1ZPTFVNRURPV059LAkvKiB2b2wtICovCisJeyAweDgzLCBLRVlfUkVDT1JEfSwJCS8qIHJlYyAqLworCXsgMHg5OCwgS0VZX1BBVVNFfSwJCS8qIHBhdXNlLCB5ZWxsb3cgKi8KKwl7IDB4OTksIEtFWV9PS30sCQkvKiBvayAqLworCXsgMHg5YSwgS0VZX0NBTUVSQX0sCQkvKiBzbmFwc2hvdCAqLworCXsgMHg4MSwgS0VZX1VQfSwKKwl7IDB4OTAsIEtFWV9MRUZUfSwKKwl7IDB4ODIsIEtFWV9SSUdIVH0sCisJeyAweDg4LCBLRVlfRE9XTn0sCisJeyAweDk1LCBLRVlfRkFWT1JJVEVTfSwJCS8qIGJsdWUgKi8KKwl7IDB4OTcsIEtFWV9TVUJUSVRMRX0sCQkvKiBncmVlbiAqLworCXsgMHg5ZCwgS0VZX1pPT019LAorCXsgMHg5ZiwgS0VZX0VYSVR9LAorCXsgMHg5ZSwgS0VZX01FTlV9LAorCXsgMHg5YywgS0VZX0VQR30sCisJeyAweDgwLCBLRVlfUFJFVklPVVN9LAkJLyogcmVkICovCisJeyAweDliLCBLRVlfTU9ERX0sCit9OworCitzdGF0aWMgc3RydWN0IHJjX21hcF9saXN0IHRic19uZWNfbWFwID0geworCS5tYXAgPSB7CisJCS5zY2FuICAgID0gdGJzX25lYywKKwkJLnNpemUgICAgPSBBUlJBWV9TSVpFKHRic19uZWMpLAorCQkucmNfdHlwZSA9IFJDX1RZUEVfVU5LTk9XTiwJLyogTGVnYWN5IElSIHR5cGUgKi8KKwkJLm5hbWUgICAgPSBSQ19NQVBfVEJTX05FQywKKwl9Cit9OworCitzdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcF90YnNfbmVjKHZvaWQpCit7CisJcmV0dXJuIHJjX21hcF9yZWdpc3RlcigmdGJzX25lY19tYXApOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yY19tYXBfdGJzX25lYyh2b2lkKQoreworCXJjX21hcF91bnJlZ2lzdGVyKCZ0YnNfbmVjX21hcCk7Cit9CisKK21vZHVsZV9pbml0KGluaXRfcmNfbWFwX3Ric19uZWMpCittb2R1bGVfZXhpdChleGl0X3JjX21hcF90YnNfbmVjKQorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy10ZXJyYXRlYy1jaW5lcmd5LXhzLmMgYi9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtdGVycmF0ZWMtY2luZXJneS14cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjMzhlMzQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtdGVycmF0ZWMtY2luZXJneS14cy5jCkBAIC0wLDAgKzEsOTIgQEAKKy8qIHRlcnJhdGVjLWNpbmVyZ3kteHMuaCAtIEtleXRhYmxlIGZvciB0ZXJyYXRlY19jaW5lcmd5X3hzIFJlbW90ZSBDb250cm9sbGVyCisgKgorICoga2V5bWFwIGltcG9ydGVkIGZyb20gaXIta2V5bWFwcy5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPG1lZGlhL3JjLW1hcC5oPgorCisvKiBUZXJyYXRlYyBDaW5lcmd5IEh5YnJpZCBUIFVTQiBYUworICAgRGV2aW4gSGVpdG11ZWxsZXIgPGRoZWl0bXVlbGxlckBsaW51eHR2Lm9yZz4KKyAqLworCitzdGF0aWMgc3RydWN0IHJjX21hcF90YWJsZSB0ZXJyYXRlY19jaW5lcmd5X3hzW10gPSB7CisJeyAweDQxLCBLRVlfSE9NRX0sCisJeyAweDAxLCBLRVlfUE9XRVJ9LAorCXsgMHg0MiwgS0VZX01FTlV9LAorCXsgMHgwMiwgS0VZXzF9LAorCXsgMHgwMywgS0VZXzJ9LAorCXsgMHgwNCwgS0VZXzN9LAorCXsgMHg0MywgS0VZX1NVQlRJVExFfSwKKwl7IDB4MDUsIEtFWV80fSwKKwl7IDB4MDYsIEtFWV81fSwKKwl7IDB4MDcsIEtFWV82fSwKKwl7IDB4NDQsIEtFWV9URVhUfSwKKwl7IDB4MDgsIEtFWV83fSwKKwl7IDB4MDksIEtFWV84fSwKKwl7IDB4MGEsIEtFWV85fSwKKwl7IDB4NDUsIEtFWV9ERUxFVEV9LAorCXsgMHgwYiwgS0VZX1RVTkVSfSwKKwl7IDB4MGMsIEtFWV8wfSwKKwl7IDB4MGQsIEtFWV9NT0RFfSwKKwl7IDB4NDYsIEtFWV9UVn0sCisJeyAweDQ3LCBLRVlfRFZEfSwKKwl7IDB4NDksIEtFWV9WSURFT30sCisJeyAweDRiLCBLRVlfQVVYfSwKKwl7IDB4MTAsIEtFWV9VUH0sCisJeyAweDExLCBLRVlfTEVGVH0sCisJeyAweDEyLCBLRVlfT0t9LAorCXsgMHgxMywgS0VZX1JJR0hUfSwKKwl7IDB4MTQsIEtFWV9ET1dOfSwKKwl7IDB4MGYsIEtFWV9FUEd9LAorCXsgMHgxNiwgS0VZX0lORk99LAorCXsgMHg0ZCwgS0VZX0JBQ0tTUEFDRX0sCisJeyAweDFjLCBLRVlfVk9MVU1FVVB9LAorCXsgMHg0YywgS0VZX1BMQVl9LAorCXsgMHgxYiwgS0VZX0NIQU5ORUxVUH0sCisJeyAweDFlLCBLRVlfVk9MVU1FRE9XTn0sCisJeyAweDFkLCBLRVlfTVVURX0sCisJeyAweDFmLCBLRVlfQ0hBTk5FTERPV059LAorCXsgMHgxNywgS0VZX1JFRH0sCisJeyAweDE4LCBLRVlfR1JFRU59LAorCXsgMHgxOSwgS0VZX1lFTExPV30sCisJeyAweDFhLCBLRVlfQkxVRX0sCisJeyAweDU4LCBLRVlfUkVDT1JEfSwKKwl7IDB4NDgsIEtFWV9TVE9QfSwKKwl7IDB4NDAsIEtFWV9QQVVTRX0sCisJeyAweDU0LCBLRVlfTEFTVH0sCisJeyAweDRlLCBLRVlfUkVXSU5EfSwKKwl7IDB4NGYsIEtFWV9GQVNURk9SV0FSRH0sCisJeyAweDVjLCBLRVlfTkVYVH0sCit9OworCitzdGF0aWMgc3RydWN0IHJjX21hcF9saXN0IHRlcnJhdGVjX2NpbmVyZ3lfeHNfbWFwID0geworCS5tYXAgPSB7CisJCS5zY2FuICAgID0gdGVycmF0ZWNfY2luZXJneV94cywKKwkJLnNpemUgICAgPSBBUlJBWV9TSVpFKHRlcnJhdGVjX2NpbmVyZ3lfeHMpLAorCQkucmNfdHlwZSA9IFJDX1RZUEVfVU5LTk9XTiwJLyogTGVnYWN5IElSIHR5cGUgKi8KKwkJLm5hbWUgICAgPSBSQ19NQVBfVEVSUkFURUNfQ0lORVJHWV9YUywKKwl9Cit9OworCitzdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcF90ZXJyYXRlY19jaW5lcmd5X3hzKHZvaWQpCit7CisJcmV0dXJuIHJjX21hcF9yZWdpc3RlcigmdGVycmF0ZWNfY2luZXJneV94c19tYXApOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yY19tYXBfdGVycmF0ZWNfY2luZXJneV94cyh2b2lkKQoreworCXJjX21hcF91bnJlZ2lzdGVyKCZ0ZXJyYXRlY19jaW5lcmd5X3hzX21hcCk7Cit9CisKK21vZHVsZV9pbml0KGluaXRfcmNfbWFwX3RlcnJhdGVjX2NpbmVyZ3lfeHMpCittb2R1bGVfZXhpdChleGl0X3JjX21hcF90ZXJyYXRlY19jaW5lcmd5X3hzKQorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy10ZXJyYXRlYy1zbGltLmMgYi9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtdGVycmF0ZWMtc2xpbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhYmFmYTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtdGVycmF0ZWMtc2xpbS5jCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBUZXJyYVRlYyByZW1vdGUgY29udHJvbGxlciBrZXl0YWJsZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBbnR0aSBQYWxvc2FhcmkgPGNyb3BlQGlraS5maT4KKyAqCisgKiAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqICAgIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiAgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICovCisKKyNpbmNsdWRlIDxtZWRpYS9yYy1tYXAuaD4KKworLyogVGVycmFUZWMgc2xpbSByZW1vdGUsIDcgcm93cywgNCBjb2x1bW5zLiAqLworLyogVXNlcyBORUMgZXh0ZW5kZWQgMHgwMmJkLiAqLworc3RhdGljIHN0cnVjdCByY19tYXBfdGFibGUgdGVycmF0ZWNfc2xpbVtdID0geworCXsgMHgwMmJkMDAsIEtFWV8xIH0sCisJeyAweDAyYmQwMSwgS0VZXzIgfSwKKwl7IDB4MDJiZDAyLCBLRVlfMyB9LAorCXsgMHgwMmJkMDMsIEtFWV80IH0sCisJeyAweDAyYmQwNCwgS0VZXzUgfSwKKwl7IDB4MDJiZDA1LCBLRVlfNiB9LAorCXsgMHgwMmJkMDYsIEtFWV83IH0sCisJeyAweDAyYmQwNywgS0VZXzggfSwKKwl7IDB4MDJiZDA4LCBLRVlfOSB9LAorCXsgMHgwMmJkMDksIEtFWV8wIH0sCisJeyAweDAyYmQwYSwgS0VZX01VVEUgfSwKKwl7IDB4MDJiZDBiLCBLRVlfTkVXIH0sICAgICAgICAgICAgIC8qIHN5bWJvbDogUElQICovCisJeyAweDAyYmQwZSwgS0VZX1ZPTFVNRURPV04gfSwKKwl7IDB4MDJiZDBmLCBLRVlfUExBWVBBVVNFIH0sCisJeyAweDAyYmQxMCwgS0VZX1JJR0hUIH0sCisJeyAweDAyYmQxMSwgS0VZX0xFRlQgfSwKKwl7IDB4MDJiZDEyLCBLRVlfVVAgfSwKKwl7IDB4MDJiZDEzLCBLRVlfRE9XTiB9LAorCXsgMHgwMmJkMTUsIEtFWV9PSyB9LAorCXsgMHgwMmJkMTYsIEtFWV9TVE9QIH0sCisJeyAweDAyYmQxNywgS0VZX0NBTUVSQSB9LCAgICAgICAgICAvKiBzbmFwc2hvdCAqLworCXsgMHgwMmJkMTgsIEtFWV9DSEFOTkVMVVAgfSwKKwl7IDB4MDJiZDE5LCBLRVlfUkVDT1JEIH0sCisJeyAweDAyYmQxYSwgS0VZX0NIQU5ORUxET1dOIH0sCisJeyAweDAyYmQxYywgS0VZX0VTQyB9LAorCXsgMHgwMmJkMWYsIEtFWV9WT0xVTUVVUCB9LAorCXsgMHgwMmJkNDQsIEtFWV9FUEcgfSwKKwl7IDB4MDJiZDQ1LCBLRVlfUE9XRVIyIH0sICAgICAgICAgIC8qIFtyZWQgcG93ZXIgYnV0dG9uXSAqLworfTsKKworc3RhdGljIHN0cnVjdCByY19tYXBfbGlzdCB0ZXJyYXRlY19zbGltX21hcCA9IHsKKwkubWFwID0geworCQkuc2NhbiAgICA9IHRlcnJhdGVjX3NsaW0sCisJCS5zaXplICAgID0gQVJSQVlfU0laRSh0ZXJyYXRlY19zbGltKSwKKwkJLnJjX3R5cGUgPSBSQ19UWVBFX05FQywKKwkJLm5hbWUgICAgPSBSQ19NQVBfVEVSUkFURUNfU0xJTSwKKwl9Cit9OworCitzdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcF90ZXJyYXRlY19zbGltKHZvaWQpCit7CisJcmV0dXJuIHJjX21hcF9yZWdpc3RlcigmdGVycmF0ZWNfc2xpbV9tYXApOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yY19tYXBfdGVycmF0ZWNfc2xpbSh2b2lkKQoreworCXJjX21hcF91bnJlZ2lzdGVyKCZ0ZXJyYXRlY19zbGltX21hcCk7Cit9CisKK21vZHVsZV9pbml0KGluaXRfcmNfbWFwX3RlcnJhdGVjX3NsaW0pCittb2R1bGVfZXhpdChleGl0X3JjX21hcF90ZXJyYXRlY19zbGltKQorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJBbnR0aSBQYWxvc2FhcmkgPGNyb3BlQGlraS5maT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy10ZXZpaS1uZWMuYyBiL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy10ZXZpaS1uZWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjViYTNmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLXRldmlpLW5lYy5jCkBAIC0wLDAgKzEsODggQEAKKy8qIHRldmlpLW5lYy5oIC0gS2V5dGFibGUgZm9yIHRldmlpX25lYyBSZW1vdGUgQ29udHJvbGxlcgorICoKKyAqIGtleW1hcCBpbXBvcnRlZCBmcm9tIGlyLWtleW1hcHMuYworICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBieSBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxtZWRpYS9yYy1tYXAuaD4KKworc3RhdGljIHN0cnVjdCByY19tYXBfdGFibGUgdGV2aWlfbmVjW10gPSB7CisJeyAweDBhLCBLRVlfUE9XRVIyfSwKKwl7IDB4MGMsIEtFWV9NVVRFfSwKKwl7IDB4MTEsIEtFWV8xfSwKKwl7IDB4MTIsIEtFWV8yfSwKKwl7IDB4MTMsIEtFWV8zfSwKKwl7IDB4MTQsIEtFWV80fSwKKwl7IDB4MTUsIEtFWV81fSwKKwl7IDB4MTYsIEtFWV82fSwKKwl7IDB4MTcsIEtFWV83fSwKKwl7IDB4MTgsIEtFWV84fSwKKwl7IDB4MTksIEtFWV85fSwKKwl7IDB4MTAsIEtFWV8wfSwKKwl7IDB4MWMsIEtFWV9NRU5VfSwKKwl7IDB4MGYsIEtFWV9WT0xVTUVET1dOfSwKKwl7IDB4MWEsIEtFWV9MQVNUfSwKKwl7IDB4MGUsIEtFWV9PUEVOfSwKKwl7IDB4MDQsIEtFWV9SRUNPUkR9LAorCXsgMHgwOSwgS0VZX1ZPTFVNRVVQfSwKKwl7IDB4MDgsIEtFWV9DSEFOTkVMVVB9LAorCXsgMHgwNywgS0VZX1BWUn0sCisJeyAweDBiLCBLRVlfVElNRX0sCisJeyAweDAyLCBLRVlfUklHSFR9LAorCXsgMHgwMywgS0VZX0xFRlR9LAorCXsgMHgwMCwgS0VZX1VQfSwKKwl7IDB4MWYsIEtFWV9PS30sCisJeyAweDAxLCBLRVlfRE9XTn0sCisJeyAweDA1LCBLRVlfVFVORVJ9LAorCXsgMHgwNiwgS0VZX0NIQU5ORUxET1dOfSwKKwl7IDB4NDAsIEtFWV9QTEFZUEFVU0V9LAorCXsgMHgxZSwgS0VZX1JFV0lORH0sCisJeyAweDFiLCBLRVlfRkFWT1JJVEVTfSwKKwl7IDB4MWQsIEtFWV9CQUNLfSwKKwl7IDB4NGQsIEtFWV9GQVNURk9SV0FSRH0sCisJeyAweDQ0LCBLRVlfRVBHfSwKKwl7IDB4NGMsIEtFWV9JTkZPfSwKKwl7IDB4NDEsIEtFWV9BQn0sCisJeyAweDQzLCBLRVlfQVVESU99LAorCXsgMHg0NSwgS0VZX1NVQlRJVExFfSwKKwl7IDB4NGEsIEtFWV9MSVNUfSwKKwl7IDB4NDYsIEtFWV9GMX0sCisJeyAweDQ3LCBLRVlfRjJ9LAorCXsgMHg1ZSwgS0VZX0YzfSwKKwl7IDB4NWMsIEtFWV9GNH0sCisJeyAweDUyLCBLRVlfRjV9LAorCXsgMHg1YSwgS0VZX0Y2fSwKKwl7IDB4NTYsIEtFWV9NT0RFfSwKKwl7IDB4NTgsIEtFWV9TV0lUQ0hWSURFT01PREV9LAorfTsKKworc3RhdGljIHN0cnVjdCByY19tYXBfbGlzdCB0ZXZpaV9uZWNfbWFwID0geworCS5tYXAgPSB7CisJCS5zY2FuICAgID0gdGV2aWlfbmVjLAorCQkuc2l6ZSAgICA9IEFSUkFZX1NJWkUodGV2aWlfbmVjKSwKKwkJLnJjX3R5cGUgPSBSQ19UWVBFX1VOS05PV04sCS8qIExlZ2FjeSBJUiB0eXBlICovCisJCS5uYW1lICAgID0gUkNfTUFQX1RFVklJX05FQywKKwl9Cit9OworCitzdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcF90ZXZpaV9uZWModm9pZCkKK3sKKwlyZXR1cm4gcmNfbWFwX3JlZ2lzdGVyKCZ0ZXZpaV9uZWNfbWFwKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGV4aXRfcmNfbWFwX3RldmlpX25lYyh2b2lkKQoreworCXJjX21hcF91bnJlZ2lzdGVyKCZ0ZXZpaV9uZWNfbWFwKTsKK30KKworbW9kdWxlX2luaXQoaW5pdF9yY19tYXBfdGV2aWlfbmVjKQorbW9kdWxlX2V4aXQoZXhpdF9yY19tYXBfdGV2aWlfbmVjKQorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy10b3RhbC1tZWRpYS1pbi1oYW5kLmMgYi9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtdG90YWwtbWVkaWEtaW4taGFuZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwYWM0ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtdG90YWwtbWVkaWEtaW4taGFuZC5jCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBUb3RhbCBNZWRpYSBJbiBIYW5kIHJlbW90ZSBjb250cm9sbGVyIGtleXRhYmxlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFudHRpIFBhbG9zYWFyaSA8Y3JvcGVAaWtpLmZpPgorICoKKyAqICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogICAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqICAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKi8KKworI2luY2x1ZGUgPG1lZGlhL3JjLW1hcC5oPgorCisvKiBVc2VzIE5FQyBleHRlbmRlZCAweDAyYmQgKi8KK3N0YXRpYyBzdHJ1Y3QgcmNfbWFwX3RhYmxlIHRvdGFsX21lZGlhX2luX2hhbmRbXSA9IHsKKwl7IDB4MDJiZDAwLCBLRVlfMSB9LAorCXsgMHgwMmJkMDEsIEtFWV8yIH0sCisJeyAweDAyYmQwMiwgS0VZXzMgfSwKKwl7IDB4MDJiZDAzLCBLRVlfNCB9LAorCXsgMHgwMmJkMDQsIEtFWV81IH0sCisJeyAweDAyYmQwNSwgS0VZXzYgfSwKKwl7IDB4MDJiZDA2LCBLRVlfNyB9LAorCXsgMHgwMmJkMDcsIEtFWV84IH0sCisJeyAweDAyYmQwOCwgS0VZXzkgfSwKKwl7IDB4MDJiZDA5LCBLRVlfMCB9LAorCXsgMHgwMmJkMGEsIEtFWV9NVVRFIH0sCisJeyAweDAyYmQwYiwgS0VZX0NZQ0xFV0lORE9XUyB9LCAgICAvKiB5ZWxsb3csIFttaW4gLyBtYXhdICovCisJeyAweDAyYmQwYywgS0VZX1ZJREVPIH0sICAgICAgICAgICAvKiBUViAvIEFWICovCisJeyAweDAyYmQwZSwgS0VZX1ZPTFVNRURPV04gfSwKKwl7IDB4MDJiZDBmLCBLRVlfVElNRSB9LCAgICAgICAgICAgIC8qIFRpbWVTaGlmdCAqLworCXsgMHgwMmJkMTAsIEtFWV9SSUdIVCB9LCAgICAgICAgICAgLyogcmlnaHQgYXJyb3cgKi8KKwl7IDB4MDJiZDExLCBLRVlfTEVGVCB9LCAgICAgICAgICAgIC8qIGxlZnQgYXJyb3cgKi8KKwl7IDB4MDJiZDEyLCBLRVlfVVAgfSwgICAgICAgICAgICAgIC8qIHVwIGFycm93ICovCisJeyAweDAyYmQxMywgS0VZX0RPV04gfSwgICAgICAgICAgICAvKiBkb3duIGFycm93ICovCisJeyAweDAyYmQxNCwgS0VZX1BPV0VSMiB9LCAgICAgICAgICAvKiBbcmVkXSAqLworCXsgMHgwMmJkMTUsIEtFWV9PSyB9LCAgICAgICAgICAgICAgLyogT0sgKi8KKwl7IDB4MDJiZDE2LCBLRVlfU1RPUCB9LAorCXsgMHgwMmJkMTcsIEtFWV9DQU1FUkEgfSwgICAgICAgICAgLyogU25hcHNob3QgKi8KKwl7IDB4MDJiZDE4LCBLRVlfQ0hBTk5FTFVQIH0sCisJeyAweDAyYmQxOSwgS0VZX1JFQ09SRCB9LAorCXsgMHgwMmJkMWEsIEtFWV9DSEFOTkVMRE9XTiB9LAorCXsgMHgwMmJkMWMsIEtFWV9FU0MgfSwgICAgICAgICAgICAgLyogRXNjICovCisJeyAweDAyYmQxZSwgS0VZX1BMQVkgfSwKKwl7IDB4MDJiZDFmLCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4MDJiZDQwLCBLRVlfUEFVU0UgfSwKKwl7IDB4MDJiZDQxLCBLRVlfRkFTVEZPUldBUkQgfSwgICAgIC8qIEZGID4+ICovCisJeyAweDAyYmQ0MiwgS0VZX1JFV0lORCB9LCAgICAgICAgICAvKiBGUiA8PCAqLworCXsgMHgwMmJkNDMsIEtFWV9aT09NIH0sICAgICAgICAgICAgLyogW3dpbmRvdyArIG1vdXNlIHBvaW50ZXJdICovCisJeyAweDAyYmQ0NCwgS0VZX1NIVUZGTEUgfSwgICAgICAgICAvKiBTaHVmZmxlICovCisJeyAweDAyYmQ0NSwgS0VZX0lORk8gfSwgICAgICAgICAgICAvKiBbcmVkIChJKV0gKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgcmNfbWFwX2xpc3QgdG90YWxfbWVkaWFfaW5faGFuZF9tYXAgPSB7CisJLm1hcCA9IHsKKwkJLnNjYW4gICAgPSB0b3RhbF9tZWRpYV9pbl9oYW5kLAorCQkuc2l6ZSAgICA9IEFSUkFZX1NJWkUodG90YWxfbWVkaWFfaW5faGFuZCksCisJCS5yY190eXBlID0gUkNfVFlQRV9ORUMsCisJCS5uYW1lICAgID0gUkNfTUFQX1RPVEFMX01FRElBX0lOX0hBTkQsCisJfQorfTsKKworc3RhdGljIGludCBfX2luaXQgaW5pdF9yY19tYXBfdG90YWxfbWVkaWFfaW5faGFuZCh2b2lkKQoreworCXJldHVybiByY19tYXBfcmVnaXN0ZXIoJnRvdGFsX21lZGlhX2luX2hhbmRfbWFwKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGV4aXRfcmNfbWFwX3RvdGFsX21lZGlhX2luX2hhbmQodm9pZCkKK3sKKwlyY19tYXBfdW5yZWdpc3RlcigmdG90YWxfbWVkaWFfaW5faGFuZF9tYXApOworfQorCittb2R1bGVfaW5pdChpbml0X3JjX21hcF90b3RhbF9tZWRpYV9pbl9oYW5kKQorbW9kdWxlX2V4aXQoZXhpdF9yY19tYXBfdG90YWxfbWVkaWFfaW5faGFuZCkKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiQW50dGkgUGFsb3NhYXJpIDxjcm9wZUBpa2kuZmk+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtdHJla3N0b3IuYyBiL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy10cmVrc3Rvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4MTkwZWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtdHJla3N0b3IuYwpAQCAtMCwwICsxLDgwIEBACisvKgorICogVHJla1N0b3IgcmVtb3RlIGNvbnRyb2xsZXIga2V5dGFibGUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQW50dGkgUGFsb3NhYXJpIDxjcm9wZUBpa2kuZmk+CisgKgorICogICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiAgICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bWVkaWEvcmMtbWFwLmg+CisKKy8qIFRyZWtTdG9yIERWQi1UIFVTQiBTdGljayByZW1vdGUgY29udHJvbGxlci4gKi8KKy8qIEltcG9ydGVkIGZyb20gYWY5MDE1LmguCisgICBJbml0aWFsIGtleXRhYmxlIHdhcyBmcm9tIE1hcmMgU2NobmVpZGVyIDxtYWNrZUBtYWNrZS5vcmc+ICovCitzdGF0aWMgc3RydWN0IHJjX21hcF90YWJsZSB0cmVrc3RvcltdID0geworCXsgMHgwMDg0LCBLRVlfMCB9LAorCXsgMHgwMDg1LCBLRVlfTVVURSB9LCAgICAgICAgICAgIC8qIE11dGUgKi8KKwl7IDB4MDA4NiwgS0VZX0hPTUVQQUdFIH0sICAgICAgICAvKiBIb21lICovCisJeyAweDAwODcsIEtFWV9VUCB9LCAgICAgICAgICAgICAgLyogVXAgKi8KKwl7IDB4MDA4OCwgS0VZX09LIH0sICAgICAgICAgICAgICAvKiBPSyAqLworCXsgMHgwMDg5LCBLRVlfUklHSFQgfSwgICAgICAgICAgIC8qIFJpZ2h0ICovCisJeyAweDAwOGEsIEtFWV9GQVNURk9SV0FSRCB9LCAgICAgLyogRmFzdCBmb3J3YXJkICovCisJeyAweDAwOGIsIEtFWV9WT0xVTUVVUCB9LCAgICAgICAgLyogVm9sdW1lICsgKi8KKwl7IDB4MDA4YywgS0VZX0RPV04gfSwgICAgICAgICAgICAvKiBEb3duICovCisJeyAweDAwOGQsIEtFWV9QTEFZIH0sICAgICAgICAgICAgLyogUGxheS9QYXVzZSAqLworCXsgMHgwMDhlLCBLRVlfU1RPUCB9LCAgICAgICAgICAgIC8qIFN0b3AgKi8KKwl7IDB4MDA4ZiwgS0VZX0VQRyB9LCAgICAgICAgICAgICAvKiBJbmZvL0VQRyAqLworCXsgMHgwMDkwLCBLRVlfNyB9LAorCXsgMHgwMDkxLCBLRVlfNCB9LAorCXsgMHgwMDkyLCBLRVlfMSB9LAorCXsgMHgwMDkzLCBLRVlfQ0hBTk5FTERPV04gfSwgICAgIC8qIENoYW5uZWwgLSAqLworCXsgMHgwMDk0LCBLRVlfOCB9LAorCXsgMHgwMDk1LCBLRVlfNSB9LAorCXsgMHgwMDk2LCBLRVlfMiB9LAorCXsgMHgwMDk3LCBLRVlfQ0hBTk5FTFVQIH0sICAgICAgIC8qIENoYW5uZWwgKyAqLworCXsgMHgwMDk4LCBLRVlfOSB9LAorCXsgMHgwMDk5LCBLRVlfNiB9LAorCXsgMHgwMDlhLCBLRVlfMyB9LAorCXsgMHgwMDliLCBLRVlfVk9MVU1FRE9XTiB9LCAgICAgIC8qIFZvbHVtZSAtICovCisJeyAweDAwOWMsIEtFWV9UViB9LCAgICAgICAgICAgICAgLyogVFYgKi8KKwl7IDB4MDA5ZCwgS0VZX1JFQ09SRCB9LCAgICAgICAgICAvKiBSZWNvcmQgKi8KKwl7IDB4MDA5ZSwgS0VZX1JFV0lORCB9LCAgICAgICAgICAvKiBSZXdpbmQgKi8KKwl7IDB4MDA5ZiwgS0VZX0xFRlQgfSwgICAgICAgICAgICAvKiBMZWZ0ICovCit9OworCitzdGF0aWMgc3RydWN0IHJjX21hcF9saXN0IHRyZWtzdG9yX21hcCA9IHsKKwkubWFwID0geworCQkuc2NhbiAgICA9IHRyZWtzdG9yLAorCQkuc2l6ZSAgICA9IEFSUkFZX1NJWkUodHJla3N0b3IpLAorCQkucmNfdHlwZSA9IFJDX1RZUEVfTkVDLAorCQkubmFtZSAgICA9IFJDX01BUF9UUkVLU1RPUiwKKwl9Cit9OworCitzdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcF90cmVrc3Rvcih2b2lkKQoreworCXJldHVybiByY19tYXBfcmVnaXN0ZXIoJnRyZWtzdG9yX21hcCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3JjX21hcF90cmVrc3Rvcih2b2lkKQoreworCXJjX21hcF91bnJlZ2lzdGVyKCZ0cmVrc3Rvcl9tYXApOworfQorCittb2R1bGVfaW5pdChpbml0X3JjX21hcF90cmVrc3RvcikKK21vZHVsZV9leGl0KGV4aXRfcmNfbWFwX3RyZWtzdG9yKQorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJBbnR0aSBQYWxvc2FhcmkgPGNyb3BlQGlraS5maT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy10dC0xNTAwLmMgYi9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtdHQtMTUwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5NWYzNzMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtdHQtMTUwMC5jCkBAIC0wLDAgKzEsODIgQEAKKy8qIHR0LTE1MDAuaCAtIEtleXRhYmxlIGZvciB0dF8xNTAwIFJlbW90ZSBDb250cm9sbGVyCisgKgorICoga2V5bWFwIGltcG9ydGVkIGZyb20gaXIta2V5bWFwcy5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPG1lZGlhL3JjLW1hcC5oPgorCisvKiBmb3IgdGhlIFRlY2hub3RyZW5kIDE1MDAgYnVuZGxlZCByZW1vdGVzIChncmV5IGFuZCBibGFjayk6ICovCisKK3N0YXRpYyBzdHJ1Y3QgcmNfbWFwX3RhYmxlIHR0XzE1MDBbXSA9IHsKKwl7IDB4MTUwMSwgS0VZX1BPV0VSIH0sCisJeyAweDE1MDIsIEtFWV9TSFVGRkxFIH0sCQkvKiA/IGRvdWJsZS1hcnJvdyBrZXkgKi8KKwl7IDB4MTUwMywgS0VZXzEgfSwKKwl7IDB4MTUwNCwgS0VZXzIgfSwKKwl7IDB4MTUwNSwgS0VZXzMgfSwKKwl7IDB4MTUwNiwgS0VZXzQgfSwKKwl7IDB4MTUwNywgS0VZXzUgfSwKKwl7IDB4MTUwOCwgS0VZXzYgfSwKKwl7IDB4MTUwOSwgS0VZXzcgfSwKKwl7IDB4MTUwYSwgS0VZXzggfSwKKwl7IDB4MTUwYiwgS0VZXzkgfSwKKwl7IDB4MTUwYywgS0VZXzAgfSwKKwl7IDB4MTUwZCwgS0VZX1VQIH0sCisJeyAweDE1MGUsIEtFWV9MRUZUIH0sCisJeyAweDE1MGYsIEtFWV9PSyB9LAorCXsgMHgxNTEwLCBLRVlfUklHSFQgfSwKKwl7IDB4MTUxMSwgS0VZX0RPV04gfSwKKwl7IDB4MTUxMiwgS0VZX0lORk8gfSwKKwl7IDB4MTUxMywgS0VZX0VYSVQgfSwKKwl7IDB4MTUxNCwgS0VZX1JFRCB9LAorCXsgMHgxNTE1LCBLRVlfR1JFRU4gfSwKKwl7IDB4MTUxNiwgS0VZX1lFTExPVyB9LAorCXsgMHgxNTE3LCBLRVlfQkxVRSB9LAorCXsgMHgxNTE4LCBLRVlfTVVURSB9LAorCXsgMHgxNTE5LCBLRVlfVEVYVCB9LAorCXsgMHgxNTFhLCBLRVlfTU9ERSB9LAkJLyogPyBUVi9SYWRpbyAqLworCXsgMHgxNTIxLCBLRVlfT1BUSU9OIH0sCisJeyAweDE1MjIsIEtFWV9FUEcgfSwKKwl7IDB4MTUyMywgS0VZX0NIQU5ORUxVUCB9LAorCXsgMHgxNTI0LCBLRVlfQ0hBTk5FTERPV04gfSwKKwl7IDB4MTUyNSwgS0VZX1ZPTFVNRVVQIH0sCisJeyAweDE1MjYsIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweDE1MjcsIEtFWV9TRVRVUCB9LAorCXsgMHgxNTNhLCBLRVlfUkVDT1JEIH0sCQkvKiB0aGVzZSBrZXlzIGFyZSBvbmx5IGluIHRoZSBibGFjayByZW1vdGUgKi8KKwl7IDB4MTUzYiwgS0VZX1BMQVkgfSwKKwl7IDB4MTUzYywgS0VZX1NUT1AgfSwKKwl7IDB4MTUzZCwgS0VZX1JFV0lORCB9LAorCXsgMHgxNTNlLCBLRVlfUEFVU0UgfSwKKwl7IDB4MTUzZiwgS0VZX0ZPUldBUkQgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmNfbWFwX2xpc3QgdHRfMTUwMF9tYXAgPSB7CisJLm1hcCA9IHsKKwkJLnNjYW4gICAgPSB0dF8xNTAwLAorCQkuc2l6ZSAgICA9IEFSUkFZX1NJWkUodHRfMTUwMCksCisJCS5yY190eXBlID0gUkNfVFlQRV9VTktOT1dOLAkvKiBMZWdhY3kgSVIgdHlwZSAqLworCQkubmFtZSAgICA9IFJDX01BUF9UVF8xNTAwLAorCX0KK307CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfcmNfbWFwX3R0XzE1MDAodm9pZCkKK3sKKwlyZXR1cm4gcmNfbWFwX3JlZ2lzdGVyKCZ0dF8xNTAwX21hcCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3JjX21hcF90dF8xNTAwKHZvaWQpCit7CisJcmNfbWFwX3VucmVnaXN0ZXIoJnR0XzE1MDBfbWFwKTsKK30KKworbW9kdWxlX2luaXQoaW5pdF9yY19tYXBfdHRfMTUwMCkKK21vZHVsZV9leGl0KGV4aXRfcmNfbWFwX3R0XzE1MDApCisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIk1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLXR3aW5oYW4xMDI3LmMgYi9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtdHdpbmhhbjEwMjcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmY4ZGY2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLXR3aW5oYW4xMDI3LmMKQEAgLTAsMCArMSw4NyBAQAorI2luY2x1ZGUgPG1lZGlhL3JjLW1hcC5oPgorCitzdGF0aWMgc3RydWN0IHJjX21hcF90YWJsZSB0d2luaGFuX3ZwMTAyN1tdID0geworCXsgMHgxNiwgS0VZX1BPV0VSMiB9LAorCXsgMHgxNywgS0VZX0ZBVk9SSVRFUyB9LAorCXsgMHgwZiwgS0VZX1RFWFQgfSwKKwl7IDB4NDgsIEtFWV9JTkZPfSwKKwl7IDB4MWMsIEtFWV9FUEcgfSwKKwl7IDB4MDQsIEtFWV9MSVNUIH0sCisKKwl7IDB4MDMsIEtFWV8xIH0sCisJeyAweDAxLCBLRVlfMiB9LAorCXsgMHgwNiwgS0VZXzMgfSwKKwl7IDB4MDksIEtFWV80IH0sCisJeyAweDFkLCBLRVlfNSB9LAorCXsgMHgxZiwgS0VZXzYgfSwKKwl7IDB4MGQsIEtFWV83IH0sCisJeyAweDE5LCBLRVlfOCB9LAorCXsgMHgxYiwgS0VZXzkgfSwKKwl7IDB4MTUsIEtFWV8wIH0sCisKKwl7IDB4MGMsIEtFWV9DQU5DRUwgfSwKKwl7IDB4NGEsIEtFWV9DTEVBUiB9LAorCXsgMHgxMywgS0VZX0JBQ0tTUEFDRSB9LAorCXsgMHgwMCwgS0VZX1RBQiB9LAorCisJeyAweDRiLCBLRVlfVVAgfSwKKwl7IDB4NTEsIEtFWV9ET1dOIH0sCisJeyAweDRlLCBLRVlfTEVGVCB9LAorCXsgMHg1MiwgS0VZX1JJR0hUIH0sCisJeyAweDRmLCBLRVlfRU5URVIgfSwKKworCXsgMHgxZSwgS0VZX1ZPTFVNRVVQIH0sCisJeyAweDBhLCBLRVlfVk9MVU1FRE9XTiB9LAorCXsgMHgwMiwgS0VZX0NIQU5ORUxET1dOIH0sCisJeyAweDA1LCBLRVlfQ0hBTk5FTFVQIH0sCisJeyAweDExLCBLRVlfUkVDT1JEIH0sCisKKwl7IDB4MTQsIEtFWV9QTEFZIH0sCisJeyAweDRjLCBLRVlfUEFVU0UgfSwKKwl7IDB4MWEsIEtFWV9TVE9QIH0sCisJeyAweDQwLCBLRVlfUkVXSU5EIH0sCisJeyAweDEyLCBLRVlfRkFTVEZPUldBUkQgfSwKKwl7IDB4NDEsIEtFWV9QUkVWSU9VU1NPTkcgfSwKKwl7IDB4NDIsIEtFWV9ORVhUU09ORyB9LAorCXsgMHg1NCwgS0VZX1NBVkUgfSwKKwl7IDB4NTAsIEtFWV9MQU5HVUFHRSB9LAorCXsgMHg0NywgS0VZX01FRElBIH0sCisJeyAweDRkLCBLRVlfU0NSRUVOIH0sCisJeyAweDQzLCBLRVlfU1VCVElUTEUgfSwKKwl7IDB4MTAsIEtFWV9NVVRFIH0sCisJeyAweDQ5LCBLRVlfQVVESU8gfSwKKwl7IDB4MDcsIEtFWV9TTEVFUCB9LAorCXsgMHgwOCwgS0VZX1ZJREVPIH0sCisJeyAweDBlLCBLRVlfQUdBSU4gfSwKKwl7IDB4NDUsIEtFWV9FUVVBTCB9LAorCXsgMHg0NiwgS0VZX01JTlVTIH0sCisJeyAweDE4LCBLRVlfUkVEIH0sCisJeyAweDUzLCBLRVlfR1JFRU4gfSwKKwl7IDB4NWUsIEtFWV9ZRUxMT1cgfSwKKwl7IDB4NWYsIEtFWV9CTFVFIH0sCit9OworCitzdGF0aWMgc3RydWN0IHJjX21hcF9saXN0IHR3aW5oYW5fdnAxMDI3X21hcCA9IHsKKwkubWFwID0geworCQkuc2NhbiAgICA9IHR3aW5oYW5fdnAxMDI3LAorCQkuc2l6ZSAgICA9IEFSUkFZX1NJWkUodHdpbmhhbl92cDEwMjcpLAorCQkucmNfdHlwZSA9IFJDX1RZUEVfVU5LTk9XTiwJLyogTGVnYWN5IElSIHR5cGUgKi8KKwkJLm5hbWUgICAgPSBSQ19NQVBfVFdJTkhBTl9WUDEwMjdfRFZCUywKKwl9Cit9OworCitzdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcF90d2luaGFuX3ZwMTAyNyh2b2lkKQoreworCXJldHVybiByY19tYXBfcmVnaXN0ZXIoJnR3aW5oYW5fdnAxMDI3X21hcCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3JjX21hcF90d2luaGFuX3ZwMTAyNyh2b2lkKQoreworCXJjX21hcF91bnJlZ2lzdGVyKCZ0d2luaGFuX3ZwMTAyN19tYXApOworfQorCittb2R1bGVfaW5pdChpbml0X3JjX21hcF90d2luaGFuX3ZwMTAyNykKK21vZHVsZV9leGl0KGV4aXRfcmNfbWFwX3R3aW5oYW5fdnAxMDI3KQorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJTZXJnZXkgSXZhbm92IDwxMjNrYXNoQGdtYWlsLmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy12aWRlb21hdGUtbTFmLmMgYi9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtdmlkZW9tYXRlLW0xZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5OTRkNDAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtdmlkZW9tYXRlLW0xZi5jCkBAIC0wLDAgKzEsOTIgQEAKKy8qIHZpZGVvbWF0ZS1tMWYuaCAtIEtleXRhYmxlIGZvciB2aWRlb21hdGVfbTFmIFJlbW90ZSBDb250cm9sbGVyCisgKgorICoga2V5bWFwIGltcG9ydGVkIGZyb20gaXIta2V5bWFwcy5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIGJ5IFBhdmVsIE9zbm92YSA8cHZvc25vdmFAZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPG1lZGlhL3JjLW1hcC5oPgorCitzdGF0aWMgc3RydWN0IHJjX21hcF90YWJsZSB2aWRlb21hdGVfbTFmW10gPSB7CisJeyAweDAxLCBLRVlfUE9XRVIgfSwKKwl7IDB4MzEsIEtFWV9UVU5FUiB9LAorCXsgMHgzMywgS0VZX1ZJREVPIH0sCisJeyAweDJmLCBLRVlfUkFESU8gfSwKKwl7IDB4MzAsIEtFWV9DQU1FUkEgfSwKKwl7IDB4MmQsIEtFWV9ORVcgfSwgLyogVFYgcmVjb3JkIGJ1dHRvbiAqLworCXsgMHgxNywgS0VZX0NZQ0xFV0lORE9XUyB9LAorCXsgMHgyYywgS0VZX0FOR0xFIH0sCisJeyAweDJiLCBLRVlfTEFOR1VBR0UgfSwKKwl7IDB4MzIsIEtFWV9TRUFSQ0ggfSwgLyogJy4uLicgYnV0dG9uICovCisJeyAweDExLCBLRVlfVVAgfSwKKwl7IDB4MTMsIEtFWV9MRUZUIH0sCisJeyAweDE1LCBLRVlfT0sgfSwKKwl7IDB4MTQsIEtFWV9SSUdIVCB9LAorCXsgMHgxMiwgS0VZX0RPV04gfSwKKwl7IDB4MTYsIEtFWV9CQUNLU1BBQ0UgfSwKKwl7IDB4MDIsIEtFWV9aT09NIH0sIC8qIFdJTiBrZXkgKi8KKwl7IDB4MDQsIEtFWV9JTkZPIH0sCisJeyAweDA1LCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4MDMsIEtFWV9NVVRFIH0sCisJeyAweDA3LCBLRVlfQ0hBTk5FTFVQIH0sCisJeyAweDA2LCBLRVlfVk9MVU1FRE9XTiB9LAorCXsgMHgwOCwgS0VZX0NIQU5ORUxET1dOIH0sCisJeyAweDBjLCBLRVlfUkVDT1JEIH0sCisJeyAweDBlLCBLRVlfU1RPUCB9LAorCXsgMHgwYSwgS0VZX0JBQ0sgfSwKKwl7IDB4MGIsIEtFWV9QTEFZIH0sCisJeyAweDA5LCBLRVlfRk9SV0FSRCB9LAorCXsgMHgxMCwgS0VZX1BSRVZJT1VTIH0sCisJeyAweDBkLCBLRVlfUEFVU0UgfSwKKwl7IDB4MGYsIEtFWV9ORVhUIH0sCisJeyAweDFlLCBLRVlfMSB9LAorCXsgMHgxZiwgS0VZXzIgfSwKKwl7IDB4MjAsIEtFWV8zIH0sCisJeyAweDIxLCBLRVlfNCB9LAorCXsgMHgyMiwgS0VZXzUgfSwKKwl7IDB4MjMsIEtFWV82IH0sCisJeyAweDI0LCBLRVlfNyB9LAorCXsgMHgyNSwgS0VZXzggfSwKKwl7IDB4MjYsIEtFWV85IH0sCisJeyAweDJhLCBLRVlfTlVNRVJJQ19TVEFSIH0sIC8qICoga2V5ICovCisJeyAweDFkLCBLRVlfMCB9LAorCXsgMHgyOSwgS0VZX1NVQlRJVExFIH0sIC8qICMga2V5ICovCisJeyAweDI3LCBLRVlfQ0xFQVIgfSwKKwl7IDB4MzQsIEtFWV9TQ1JFRU4gfSwKKwl7IDB4MjgsIEtFWV9FTlRFUiB9LAorCXsgMHgxOSwgS0VZX1JFRCB9LAorCXsgMHgxYSwgS0VZX0dSRUVOIH0sCisJeyAweDFiLCBLRVlfWUVMTE9XIH0sCisJeyAweDFjLCBLRVlfQkxVRSB9LAorCXsgMHgxOCwgS0VZX1RFWFQgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmNfbWFwX2xpc3QgdmlkZW9tYXRlX20xZl9tYXAgPSB7CisJLm1hcCA9IHsKKwkJLnNjYW4gICAgPSB2aWRlb21hdGVfbTFmLAorCQkuc2l6ZSAgICA9IEFSUkFZX1NJWkUodmlkZW9tYXRlX20xZiksCisJCS5yY190eXBlID0gUkNfVFlQRV9VTktOT1dOLCAgICAgLyogTGVnYWN5IElSIHR5cGUgKi8KKwkJLm5hbWUgICAgPSBSQ19NQVBfVklERU9NQVRFX00xRiwKKwl9Cit9OworCitzdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcF92aWRlb21hdGVfbTFmKHZvaWQpCit7CisJcmV0dXJuIHJjX21hcF9yZWdpc3RlcigmdmlkZW9tYXRlX20xZl9tYXApOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yY19tYXBfdmlkZW9tYXRlX20xZih2b2lkKQoreworCXJjX21hcF91bnJlZ2lzdGVyKCZ2aWRlb21hdGVfbTFmX21hcCk7Cit9CisKK21vZHVsZV9pbml0KGluaXRfcmNfbWFwX3ZpZGVvbWF0ZV9tMWYpCittb2R1bGVfZXhpdChleGl0X3JjX21hcF92aWRlb21hdGVfbTFmKQorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJQYXZlbCBPc25vdmEgPHB2b3Nub3ZhQGdtYWlsLmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy12aWRlb21hdGUtczM1MC5jIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLXZpZGVvbWF0ZS1zMzUwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU0NzRhNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy12aWRlb21hdGUtczM1MC5jCkBAIC0wLDAgKzEsODUgQEAKKy8qIHZpZGVvbWF0ZS1zMzUwLmggLSBLZXl0YWJsZSBmb3IgdmlkZW9tYXRlX3MzNTAgUmVtb3RlIENvbnRyb2xsZXIKKyAqCisgKiBrZXltYXAgaW1wb3J0ZWQgZnJvbSBpci1rZXltYXBzLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgYnkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bWVkaWEvcmMtbWFwLmg+CisKK3N0YXRpYyBzdHJ1Y3QgcmNfbWFwX3RhYmxlIHZpZGVvbWF0ZV9zMzUwW10gPSB7CisJeyAweDAwLCBLRVlfVFZ9LAorCXsgMHgwMSwgS0VZX0RWRH0sCisJeyAweDA0LCBLRVlfUkVDT1JEfSwKKwl7IDB4MDUsIEtFWV9WSURFT30sCS8qIFRWL1ZpZGVvICovCisJeyAweDA3LCBLRVlfU1RPUH0sCisJeyAweDA4LCBLRVlfUExBWVBBVVNFfSwKKwl7IDB4MGEsIEtFWV9SRVdJTkR9LAorCXsgMHgwZiwgS0VZX0ZBU1RGT1JXQVJEfSwKKwl7IDB4MTAsIEtFWV9DSEFOTkVMVVB9LAorCXsgMHgxMiwgS0VZX1ZPTFVNRVVQfSwKKwl7IDB4MTMsIEtFWV9DSEFOTkVMRE9XTn0sCisJeyAweDE0LCBLRVlfTVVURX0sCisJeyAweDE1LCBLRVlfVk9MVU1FRE9XTn0sCisJeyAweDE2LCBLRVlfMX0sCisJeyAweDE3LCBLRVlfMn0sCisJeyAweDE4LCBLRVlfM30sCisJeyAweDE5LCBLRVlfNH0sCisJeyAweDFhLCBLRVlfNX0sCisJeyAweDFiLCBLRVlfNn0sCisJeyAweDFjLCBLRVlfN30sCisJeyAweDFkLCBLRVlfOH0sCisJeyAweDFlLCBLRVlfOX0sCisJeyAweDFmLCBLRVlfMH0sCisJeyAweDIxLCBLRVlfU0xFRVB9LAorCXsgMHgyNCwgS0VZX1pPT019LAorCXsgMHgyNSwgS0VZX0xBU1R9LAkvKiBSZWNhbGwgKi8KKwl7IDB4MjYsIEtFWV9TVUJUSVRMRX0sCS8qIENDICovCisJeyAweDI3LCBLRVlfTEFOR1VBR0V9LAkvKiBNVFMgKi8KKwl7IDB4MjksIEtFWV9DSEFOTkVMfSwJLyogU1VSRiAqLworCXsgMHgyYiwgS0VZX0F9LAorCXsgMHgyYywgS0VZX0J9LAorCXsgMHgyZiwgS0VZX0NBTUVSQX0sCS8qIFNuYXBzaG90ICovCisJeyAweDIzLCBLRVlfUkFESU99LAorCXsgMHgwMiwgS0VZX1BSRVZJT1VTU09OR30sCisJeyAweDA2LCBLRVlfTkVYVFNPTkd9LAorCXsgMHgwMywgS0VZX0VQR30sCisJeyAweDA5LCBLRVlfU0VUVVB9LAorCXsgMHgyMiwgS0VZX0JBQ0tTUEFDRX0sCisJeyAweDBjLCBLRVlfVVB9LAorCXsgMHgwZSwgS0VZX0RPV059LAorCXsgMHgwYiwgS0VZX0xFRlR9LAorCXsgMHgwZCwgS0VZX1JJR0hUfSwKKwl7IDB4MTEsIEtFWV9FTlRFUn0sCisJeyAweDIwLCBLRVlfVEVYVH0sCit9OworCitzdGF0aWMgc3RydWN0IHJjX21hcF9saXN0IHZpZGVvbWF0ZV9zMzUwX21hcCA9IHsKKwkubWFwID0geworCQkuc2NhbiAgICA9IHZpZGVvbWF0ZV9zMzUwLAorCQkuc2l6ZSAgICA9IEFSUkFZX1NJWkUodmlkZW9tYXRlX3MzNTApLAorCQkucmNfdHlwZSA9IFJDX1RZUEVfVU5LTk9XTiwJLyogTGVnYWN5IElSIHR5cGUgKi8KKwkJLm5hbWUgICAgPSBSQ19NQVBfVklERU9NQVRFX1MzNTAsCisJfQorfTsKKworc3RhdGljIGludCBfX2luaXQgaW5pdF9yY19tYXBfdmlkZW9tYXRlX3MzNTAodm9pZCkKK3sKKwlyZXR1cm4gcmNfbWFwX3JlZ2lzdGVyKCZ2aWRlb21hdGVfczM1MF9tYXApOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yY19tYXBfdmlkZW9tYXRlX3MzNTAodm9pZCkKK3sKKwlyY19tYXBfdW5yZWdpc3RlcigmdmlkZW9tYXRlX3MzNTBfbWFwKTsKK30KKworbW9kdWxlX2luaXQoaW5pdF9yY19tYXBfdmlkZW9tYXRlX3MzNTApCittb2R1bGVfZXhpdChleGl0X3JjX21hcF92aWRlb21hdGVfczM1MCkKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtdmlkZW9tYXRlLXR2LXB2ci5jIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLXZpZGVvbWF0ZS10di1wdnIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjJhNDZlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLXZpZGVvbWF0ZS10di1wdnIuYwpAQCAtMCwwICsxLDg3IEBACisvKiB2aWRlb21hdGUtdHYtcHZyLmggLSBLZXl0YWJsZSBmb3IgdmlkZW9tYXRlX3R2X3B2ciBSZW1vdGUgQ29udHJvbGxlcgorICoKKyAqIGtleW1hcCBpbXBvcnRlZCBmcm9tIGlyLWtleW1hcHMuYworICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBieSBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxtZWRpYS9yYy1tYXAuaD4KKworc3RhdGljIHN0cnVjdCByY19tYXBfdGFibGUgdmlkZW9tYXRlX3R2X3B2cltdID0geworCXsgMHgxNCwgS0VZX01VVEUgfSwKKwl7IDB4MjQsIEtFWV9aT09NIH0sCisKKwl7IDB4MDEsIEtFWV9EVkQgfSwKKwl7IDB4MjMsIEtFWV9SQURJTyB9LAorCXsgMHgwMCwgS0VZX1RWIH0sCisKKwl7IDB4MGEsIEtFWV9SRVdJTkQgfSwKKwl7IDB4MDgsIEtFWV9QTEFZUEFVU0UgfSwKKwl7IDB4MGYsIEtFWV9GT1JXQVJEIH0sCisKKwl7IDB4MDIsIEtFWV9QUkVWSU9VUyB9LAorCXsgMHgwNywgS0VZX1NUT1AgfSwKKwl7IDB4MDYsIEtFWV9ORVhUIH0sCisKKwl7IDB4MGMsIEtFWV9VUCB9LAorCXsgMHgwZSwgS0VZX0RPV04gfSwKKwl7IDB4MGIsIEtFWV9MRUZUIH0sCisJeyAweDBkLCBLRVlfUklHSFQgfSwKKwl7IDB4MTEsIEtFWV9PSyB9LAorCisJeyAweDAzLCBLRVlfTUVOVSB9LAorCXsgMHgwOSwgS0VZX1NFVFVQIH0sCisJeyAweDA1LCBLRVlfVklERU8gfSwKKwl7IDB4MjIsIEtFWV9DSEFOTkVMIH0sCisKKwl7IDB4MTIsIEtFWV9WT0xVTUVVUCB9LAorCXsgMHgxNSwgS0VZX1ZPTFVNRURPV04gfSwKKwl7IDB4MTAsIEtFWV9DSEFOTkVMVVAgfSwKKwl7IDB4MTMsIEtFWV9DSEFOTkVMRE9XTiB9LAorCisJeyAweDA0LCBLRVlfUkVDT1JEIH0sCisKKwl7IDB4MTYsIEtFWV8xIH0sCisJeyAweDE3LCBLRVlfMiB9LAorCXsgMHgxOCwgS0VZXzMgfSwKKwl7IDB4MTksIEtFWV80IH0sCisJeyAweDFhLCBLRVlfNSB9LAorCXsgMHgxYiwgS0VZXzYgfSwKKwl7IDB4MWMsIEtFWV83IH0sCisJeyAweDFkLCBLRVlfOCB9LAorCXsgMHgxZSwgS0VZXzkgfSwKKwl7IDB4MWYsIEtFWV8wIH0sCisKKwl7IDB4MjAsIEtFWV9MQU5HVUFHRSB9LAorCXsgMHgyMSwgS0VZX1NMRUVQIH0sCit9OworCitzdGF0aWMgc3RydWN0IHJjX21hcF9saXN0IHZpZGVvbWF0ZV90dl9wdnJfbWFwID0geworCS5tYXAgPSB7CisJCS5zY2FuICAgID0gdmlkZW9tYXRlX3R2X3B2ciwKKwkJLnNpemUgICAgPSBBUlJBWV9TSVpFKHZpZGVvbWF0ZV90dl9wdnIpLAorCQkucmNfdHlwZSA9IFJDX1RZUEVfVU5LTk9XTiwJLyogTGVnYWN5IElSIHR5cGUgKi8KKwkJLm5hbWUgICAgPSBSQ19NQVBfVklERU9NQVRFX1RWX1BWUiwKKwl9Cit9OworCitzdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcF92aWRlb21hdGVfdHZfcHZyKHZvaWQpCit7CisJcmV0dXJuIHJjX21hcF9yZWdpc3RlcigmdmlkZW9tYXRlX3R2X3B2cl9tYXApOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yY19tYXBfdmlkZW9tYXRlX3R2X3B2cih2b2lkKQoreworCXJjX21hcF91bnJlZ2lzdGVyKCZ2aWRlb21hdGVfdHZfcHZyX21hcCk7Cit9CisKK21vZHVsZV9pbml0KGluaXRfcmNfbWFwX3ZpZGVvbWF0ZV90dl9wdnIpCittb2R1bGVfZXhpdChleGl0X3JjX21hcF92aWRlb21hdGVfdHZfcHZyKQorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy13aW5mYXN0LXVzYmlpLWRlbHV4ZS5jIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLXdpbmZhc3QtdXNiaWktZGVsdXhlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQ4ZDAyMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy13aW5mYXN0LXVzYmlpLWRlbHV4ZS5jCkBAIC0wLDAgKzEsODIgQEAKKy8qIHdpbmZhc3QtdXNiaWktZGVsdXhlLmggLSBLZXl0YWJsZSBmb3Igd2luZmFzdF91c2JpaV9kZWx1eGUgUmVtb3RlIENvbnRyb2xsZXIKKyAqCisgKiBrZXltYXAgaW1wb3J0ZWQgZnJvbSBpci1rZXltYXBzLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgYnkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bWVkaWEvcmMtbWFwLmg+CisKKy8qIExlYWR0ZWsgV2luZmFzdCBUViBVU0IgSUkgRGVsdXhlIHJlbW90ZQorICAgTWFnbnVzIEFsbSA8bWFnbnVzLmFsbUBnbWFpbC5jb20+CisgKi8KKworc3RhdGljIHN0cnVjdCByY19tYXBfdGFibGUgd2luZmFzdF91c2JpaV9kZWx1eGVbXSA9IHsKKwl7IDB4NjIsIEtFWV8wfSwKKwl7IDB4NzUsIEtFWV8xfSwKKwl7IDB4NzYsIEtFWV8yfSwKKwl7IDB4NzcsIEtFWV8zfSwKKwl7IDB4NzksIEtFWV80fSwKKwl7IDB4N2EsIEtFWV81fSwKKwl7IDB4N2IsIEtFWV82fSwKKwl7IDB4N2QsIEtFWV83fSwKKwl7IDB4N2UsIEtFWV84fSwKKwl7IDB4N2YsIEtFWV85fSwKKworCXsgMHgzOCwgS0VZX0NBTUVSQX0sCQkvKiBTTkFQU0hPVCAqLworCXsgMHgzNywgS0VZX1JFQ09SRH0sCQkvKiBSRUNPUkQgKi8KKwl7IDB4MzUsIEtFWV9USU1FfSwJCS8qIFRJTUVTSElGVCAqLworCisJeyAweDc0LCBLRVlfVk9MVU1FVVB9LAkJLyogVk9MVU1FVVAgKi8KKwl7IDB4NzgsIEtFWV9WT0xVTUVET1dOfSwJLyogVk9MVU1FRE9XTiAqLworCXsgMHg2NCwgS0VZX01VVEV9LAkJLyogTVVURSAqLworCisJeyAweDIxLCBLRVlfQ0hBTk5FTH0sCQkvKiBTVVJGICovCisJeyAweDdjLCBLRVlfQ0hBTk5FTFVQfSwJCS8qIENIQU5ORUxVUCAqLworCXsgMHg2MCwgS0VZX0NIQU5ORUxET1dOfSwJLyogQ0hBTk5FTERPV04gKi8KKwl7IDB4NjEsIEtFWV9MQVNUfSwJCS8qIExBU1QgQ0hBTk5FTCAoUkVDQUxMKSAqLworCisJeyAweDcyLCBLRVlfVklERU99LCAJCS8qIElOUFVUIE1PREVTIChUVi9GTSkgKi8KKworCXsgMHg3MCwgS0VZX1BPV0VSMn0sCQkvKiBUViBPTi9PRkYgKi8KKworCXsgMHgzOSwgS0VZX0NZQ0xFV0lORE9XU30sCS8qIE1JTklNSVpFIChCT1NTKSAqLworCXsgMHgzYSwgS0VZX05FV30sCQkvKiBQSVAgKi8KKwl7IDB4NzMsIEtFWV9aT09NfSwJCS8qIEZVTExTRUNSRUVOICovCisKKwl7IDB4NjYsIEtFWV9JTkZPfSwJCS8qIE9TRCAoRElTUExBWSkgKi8KKworCXsgMHgzMSwgS0VZX0RPVH0sCQkvKiAnLicgKi8KKwl7IDB4NjMsIEtFWV9FTlRFUn0sCQkvKiBFTlRFUiAqLworCit9OworCitzdGF0aWMgc3RydWN0IHJjX21hcF9saXN0IHdpbmZhc3RfdXNiaWlfZGVsdXhlX21hcCA9IHsKKwkubWFwID0geworCQkuc2NhbiAgICA9IHdpbmZhc3RfdXNiaWlfZGVsdXhlLAorCQkuc2l6ZSAgICA9IEFSUkFZX1NJWkUod2luZmFzdF91c2JpaV9kZWx1eGUpLAorCQkucmNfdHlwZSA9IFJDX1RZUEVfVU5LTk9XTiwJLyogTGVnYWN5IElSIHR5cGUgKi8KKwkJLm5hbWUgICAgPSBSQ19NQVBfV0lORkFTVF9VU0JJSV9ERUxVWEUsCisJfQorfTsKKworc3RhdGljIGludCBfX2luaXQgaW5pdF9yY19tYXBfd2luZmFzdF91c2JpaV9kZWx1eGUodm9pZCkKK3sKKwlyZXR1cm4gcmNfbWFwX3JlZ2lzdGVyKCZ3aW5mYXN0X3VzYmlpX2RlbHV4ZV9tYXApOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yY19tYXBfd2luZmFzdF91c2JpaV9kZWx1eGUodm9pZCkKK3sKKwlyY19tYXBfdW5yZWdpc3Rlcigmd2luZmFzdF91c2JpaV9kZWx1eGVfbWFwKTsKK30KKworbW9kdWxlX2luaXQoaW5pdF9yY19tYXBfd2luZmFzdF91c2JpaV9kZWx1eGUpCittb2R1bGVfZXhpdChleGl0X3JjX21hcF93aW5mYXN0X3VzYmlpX2RlbHV4ZSkKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtd2luZmFzdC5jIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLXdpbmZhc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzQ3ZGI0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLXdpbmZhc3QuYwpAQCAtMCwwICsxLDEwMiBAQAorLyogd2luZmFzdC5oIC0gS2V5dGFibGUgZm9yIHdpbmZhc3QgUmVtb3RlIENvbnRyb2xsZXIKKyAqCisgKiBrZXltYXAgaW1wb3J0ZWQgZnJvbSBpci1rZXltYXBzLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgYnkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bWVkaWEvcmMtbWFwLmg+CisKKy8qIFRhYmxlIGZvciBMZWFkdGVrIFdpbmZhc3QgUmVtb3RlIENvbnRyb2xzIC0gdXNlZCBieSBib3RoIGJ0dHYgYW5kIGN4ODggKi8KKworc3RhdGljIHN0cnVjdCByY19tYXBfdGFibGUgd2luZmFzdFtdID0geworCS8qIEtleXMgMCB0byA5ICovCisJeyAweDEyLCBLRVlfMCB9LAorCXsgMHgwNSwgS0VZXzEgfSwKKwl7IDB4MDYsIEtFWV8yIH0sCisJeyAweDA3LCBLRVlfMyB9LAorCXsgMHgwOSwgS0VZXzQgfSwKKwl7IDB4MGEsIEtFWV81IH0sCisJeyAweDBiLCBLRVlfNiB9LAorCXsgMHgwZCwgS0VZXzcgfSwKKwl7IDB4MGUsIEtFWV84IH0sCisJeyAweDBmLCBLRVlfOSB9LAorCisJeyAweDAwLCBLRVlfUE9XRVIgfSwKKwl7IDB4MWIsIEtFWV9BVURJTyB9LAkJLyogQXVkaW8gU291cmNlICovCisJeyAweDAyLCBLRVlfVFVORVIgfSwJCS8qIFRWL0ZNLCBub3Qgb24gWTA0MDAwNTIgKi8KKwl7IDB4MWUsIEtFWV9WSURFTyB9LAkJLyogVmlkZW8gU291cmNlICovCisJeyAweDE2LCBLRVlfSU5GTyB9LAkJLyogRGlzcGxheSBpbmZvcm1hdGlvbiAqLworCXsgMHgwNCwgS0VZX1ZPTFVNRVVQIH0sCisJeyAweDA4LCBLRVlfVk9MVU1FRE9XTiB9LAorCXsgMHgwYywgS0VZX0NIQU5ORUxVUCB9LAorCXsgMHgxMCwgS0VZX0NIQU5ORUxET1dOIH0sCisJeyAweDAzLCBLRVlfWk9PTSB9LAkJLyogZnVsbHNjcmVlbiAqLworCXsgMHgxZiwgS0VZX1RFWFQgfSwJCS8qIGNsb3NlZCBjYXB0aW9uL3RlbGV0ZXh0ICovCisJeyAweDIwLCBLRVlfU0xFRVAgfSwKKwl7IDB4MjksIEtFWV9DTEVBUiB9LAkJLyogYm9zcyBrZXkgKi8KKwl7IDB4MTQsIEtFWV9NVVRFIH0sCisJeyAweDJiLCBLRVlfUkVEIH0sCisJeyAweDJjLCBLRVlfR1JFRU4gfSwKKwl7IDB4MmQsIEtFWV9ZRUxMT1cgfSwKKwl7IDB4MmUsIEtFWV9CTFVFIH0sCisJeyAweDE4LCBLRVlfS1BQTFVTIH0sCQkvKiBmaW5lIHR1bmUgKyAsIG5vdCBvbiBZMDQwMDUyICovCisJeyAweDE5LCBLRVlfS1BNSU5VUyB9LAkJLyogZmluZSB0dW5lIC0gLCBub3Qgb24gWTA0MDA1MiAqLworCXsgMHgyYSwgS0VZX01FRElBIH0sCQkvKiBQSVAgKFBpY3R1cmUgaW4gcGljdHVyZSAqLworCXsgMHgyMSwgS0VZX0RPVCB9LAorCXsgMHgxMywgS0VZX0VOVEVSIH0sCisJeyAweDExLCBLRVlfTEFTVCB9LAkJLyogUmVjYWxsIChsYXN0IGNoYW5uZWwgKi8KKwl7IDB4MjIsIEtFWV9QUkVWSU9VUyB9LAorCXsgMHgyMywgS0VZX1BMQVlQQVVTRSB9LAorCXsgMHgyNCwgS0VZX05FWFQgfSwKKwl7IDB4MjUsIEtFWV9USU1FIH0sCQkvKiBUaW1lIFNoaWZ0aW5nICovCisJeyAweDI2LCBLRVlfU1RPUCB9LAorCXsgMHgyNywgS0VZX1JFQ09SRCB9LAorCXsgMHgyOCwgS0VZX1NBVkUgfSwJCS8qIFNjcmVlbnNob3QgKi8KKwl7IDB4MmYsIEtFWV9NRU5VIH0sCisJeyAweDMwLCBLRVlfQ0FOQ0VMIH0sCisJeyAweDMxLCBLRVlfQ0hBTk5FTCB9LAkJLyogQ2hhbm5lbCBTdXJmICovCisJeyAweDMyLCBLRVlfU1VCVElUTEUgfSwKKwl7IDB4MzMsIEtFWV9MQU5HVUFHRSB9LAorCXsgMHgzNCwgS0VZX1JFV0lORCB9LAorCXsgMHgzNSwgS0VZX0ZBU1RGT1JXQVJEIH0sCisJeyAweDM2LCBLRVlfVFYgfSwKKwl7IDB4MzcsIEtFWV9SQURJTyB9LAkJLyogRk0gKi8KKwl7IDB4MzgsIEtFWV9EVkQgfSwKKworCXsgMHgxYSwgS0VZX01PREV9LAkJLyogY2hhbmdlIHRvIE1DRSBtb2RlIG9uIFkwNEcwMDUxICovCisJeyAweDNlLCBLRVlfRjIxIH0sCQkvKiBNQ0UgK1ZPTCwgb24gWTA0RzAwMzMgKi8KKwl7IDB4M2EsIEtFWV9GMjIgfSwJCS8qIE1DRSAtVk9MLCBvbiBZMDRHMDAzMyAqLworCXsgMHgzYiwgS0VZX0YyMyB9LAkJLyogTUNFICtDSCwgIG9uIFkwNEcwMDMzICovCisJeyAweDNmLCBLRVlfRjI0IH0JCS8qIE1DRSAtQ0gsICBvbiBZMDRHMDAzMyAqLworfTsKKworc3RhdGljIHN0cnVjdCByY19tYXBfbGlzdCB3aW5mYXN0X21hcCA9IHsKKwkubWFwID0geworCQkuc2NhbiAgICA9IHdpbmZhc3QsCisJCS5zaXplICAgID0gQVJSQVlfU0laRSh3aW5mYXN0KSwKKwkJLnJjX3R5cGUgPSBSQ19UWVBFX1VOS05PV04sCS8qIExlZ2FjeSBJUiB0eXBlICovCisJCS5uYW1lICAgID0gUkNfTUFQX1dJTkZBU1QsCisJfQorfTsKKworc3RhdGljIGludCBfX2luaXQgaW5pdF9yY19tYXBfd2luZmFzdCh2b2lkKQoreworCXJldHVybiByY19tYXBfcmVnaXN0ZXIoJndpbmZhc3RfbWFwKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGV4aXRfcmNfbWFwX3dpbmZhc3Qodm9pZCkKK3sKKwlyY19tYXBfdW5yZWdpc3Rlcigmd2luZmFzdF9tYXApOworfQorCittb2R1bGVfaW5pdChpbml0X3JjX21hcF93aW5mYXN0KQorbW9kdWxlX2V4aXQoZXhpdF9yY19tYXBfd2luZmFzdCkKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JjL2xpcmNfZGV2LmMgYi9kcml2ZXJzL21lZGlhL3JjL2xpcmNfZGV2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQyMzdhYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvcmMvbGlyY19kZXYuYwpAQCAtMCwwICsxLDgxNiBAQAorLyoKKyAqIExJUkMgYmFzZSBkcml2ZXIKKyAqCisgKiBieSBBcnR1ciBMaXBvd3NraSA8YWxpcG93c2tpQGludGVyaWEucGw+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KKworI2luY2x1ZGUgPG1lZGlhL2xpcmMuaD4KKyNpbmNsdWRlIDxtZWRpYS9saXJjX2Rldi5oPgorCitzdGF0aWMgaW50IGRlYnVnOworCisjZGVmaW5lIElSQ1RMX0RFVl9OQU1FCSJCYXNlUmVtb3RlQ3RsIgorI2RlZmluZSBOT1BMVUcJCS0xCisjZGVmaW5lIExPR0hFQUQJCSJsaXJjX2RldiAoJXNbJWRdKTogIgorCitzdGF0aWMgZGV2X3QgbGlyY19iYXNlX2RldjsKKworc3RydWN0IGlyY3RsIHsKKwlzdHJ1Y3QgbGlyY19kcml2ZXIgZDsKKwlpbnQgYXR0YWNoZWQ7CisJaW50IG9wZW47CisKKwlzdHJ1Y3QgbXV0ZXggaXJjdGxfbG9jazsKKwlzdHJ1Y3QgbGlyY19idWZmZXIgKmJ1ZjsKKwl1bnNpZ25lZCBpbnQgY2h1bmtfc2l6ZTsKKworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKKwlsb25nIGppZmZpZXNfdG9fd2FpdDsKK307CisKK3N0YXRpYyBERUZJTkVfTVVURVgobGlyY19kZXZfbG9jayk7CisKK3N0YXRpYyBzdHJ1Y3QgaXJjdGwgKmlyY3Rsc1tNQVhfSVJDVExfREVWSUNFU107CitzdGF0aWMgc3RydWN0IGNkZXYgY2RldnNbTUFYX0lSQ1RMX0RFVklDRVNdOworCisvKiBPbmx5IHVzZWQgZm9yIHN5c2ZzIGJ1dCBkZWZpbmVkIHRvIHZvaWQgb3RoZXJ3aXNlICovCitzdGF0aWMgc3RydWN0IGNsYXNzICpsaXJjX2NsYXNzOworCisvKiAgaGVscGVyIGZ1bmN0aW9uCisgKiAgaW5pdGlhbGl6ZXMgdGhlIGlyY3RsIHN0cnVjdHVyZQorICovCitzdGF0aWMgdm9pZCBsaXJjX2lyY3RsX2luaXQoc3RydWN0IGlyY3RsICppcikKK3sKKwltdXRleF9pbml0KCZpci0+aXJjdGxfbG9jayk7CisJaXItPmQubWlub3IgPSBOT1BMVUc7Cit9CisKK3N0YXRpYyB2b2lkIGxpcmNfaXJjdGxfY2xlYW51cChzdHJ1Y3QgaXJjdGwgKmlyKQoreworCWRldl9kYmcoaXItPmQuZGV2LCBMT0dIRUFEICJjbGVhbmluZyB1cFxuIiwgaXItPmQubmFtZSwgaXItPmQubWlub3IpOworCisJZGV2aWNlX2Rlc3Ryb3kobGlyY19jbGFzcywgTUtERVYoTUFKT1IobGlyY19iYXNlX2RldiksIGlyLT5kLm1pbm9yKSk7CisKKwlpZiAoaXItPmJ1ZiAhPSBpci0+ZC5yYnVmKSB7CisJCWxpcmNfYnVmZmVyX2ZyZWUoaXItPmJ1Zik7CisJCWtmcmVlKGlyLT5idWYpOworCX0KKwlpci0+YnVmID0gTlVMTDsKK30KKworLyogIGhlbHBlciBmdW5jdGlvbgorICogIHJlYWRzIGtleSBjb2RlcyBmcm9tIGRyaXZlciBhbmQgcHV0cyB0aGVtIGludG8gYnVmZmVyCisgKiAgcmV0dXJucyAwIG9uIHN1Y2Nlc3MKKyAqLworc3RhdGljIGludCBsaXJjX2FkZF90b19idWYoc3RydWN0IGlyY3RsICppcikKK3sKKwlpZiAoaXItPmQuYWRkX3RvX2J1ZikgeworCQlpbnQgcmVzID0gLUVOT0RBVEE7CisJCWludCBnb3RfZGF0YSA9IDA7CisKKwkJLyoKKwkJICogc2VydmljZSB0aGUgZGV2aWNlIGFzIGxvbmcgYXMgaXQgaXMgcmV0dXJuaW5nCisJCSAqIGRhdGEgYW5kIHdlIGhhdmUgc3BhY2UKKwkJICovCitnZXRfZGF0YToKKwkJcmVzID0gaXItPmQuYWRkX3RvX2J1Zihpci0+ZC5kYXRhLCBpci0+YnVmKTsKKwkJaWYgKHJlcyA9PSAwKSB7CisJCQlnb3RfZGF0YSsrOworCQkJZ290byBnZXRfZGF0YTsKKwkJfQorCisJCWlmIChyZXMgPT0gLUVOT0RFVikKKwkJCWt0aHJlYWRfc3RvcChpci0+dGFzayk7CisKKwkJcmV0dXJuIGdvdF9kYXRhID8gMCA6IHJlczsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogbWFpbiBmdW5jdGlvbiBvZiB0aGUgcG9sbGluZyB0aHJlYWQKKyAqLworc3RhdGljIGludCBsaXJjX3RocmVhZCh2b2lkICppcmN0bCkKK3sKKwlzdHJ1Y3QgaXJjdGwgKmlyID0gaXJjdGw7CisKKwlkZXZfZGJnKGlyLT5kLmRldiwgTE9HSEVBRCAicG9sbCB0aHJlYWQgc3RhcnRlZFxuIiwKKwkJaXItPmQubmFtZSwgaXItPmQubWlub3IpOworCisJZG8geworCQlpZiAoaXItPm9wZW4pIHsKKwkJCWlmIChpci0+amlmZmllc190b193YWl0KSB7CisJCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJCQlzY2hlZHVsZV90aW1lb3V0KGlyLT5qaWZmaWVzX3RvX3dhaXQpOworCQkJfQorCQkJaWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkKKwkJCQlicmVhazsKKwkJCWlmICghbGlyY19hZGRfdG9fYnVmKGlyKSkKKwkJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmlyLT5idWYtPndhaXRfcG9sbCk7CisJCX0gZWxzZSB7CisJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCQkJc2NoZWR1bGUoKTsKKwkJfQorCX0gd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpOworCisJZGV2X2RiZyhpci0+ZC5kZXYsIExPR0hFQUQgInBvbGwgdGhyZWFkIGVuZGVkXG4iLAorCQlpci0+ZC5uYW1lLCBpci0+ZC5taW5vcik7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBsaXJjX2Rldl9mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkucmVhZAkJPSBsaXJjX2Rldl9mb3BfcmVhZCwKKwkud3JpdGUJCT0gbGlyY19kZXZfZm9wX3dyaXRlLAorCS5wb2xsCQk9IGxpcmNfZGV2X2ZvcF9wb2xsLAorCS51bmxvY2tlZF9pb2N0bAk9IGxpcmNfZGV2X2ZvcF9pb2N0bCwKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJLmNvbXBhdF9pb2N0bAk9IGxpcmNfZGV2X2ZvcF9pb2N0bCwKKyNlbmRpZgorCS5vcGVuCQk9IGxpcmNfZGV2X2ZvcF9vcGVuLAorCS5yZWxlYXNlCT0gbGlyY19kZXZfZm9wX2Nsb3NlLAorCS5sbHNlZWsJCT0gbm9vcF9sbHNlZWssCit9OworCitzdGF0aWMgaW50IGxpcmNfY2Rldl9hZGQoc3RydWN0IGlyY3RsICppcikKK3sKKwlpbnQgcmV0dmFsOworCXN0cnVjdCBsaXJjX2RyaXZlciAqZCA9ICZpci0+ZDsKKwlzdHJ1Y3QgY2RldiAqY2RldiA9ICZjZGV2c1tkLT5taW5vcl07CisKKwlpZiAoZC0+Zm9wcykgeworCQljZGV2X2luaXQoY2RldiwgZC0+Zm9wcyk7CisJCWNkZXYtPm93bmVyID0gZC0+b3duZXI7CisJfSBlbHNlIHsKKwkJY2Rldl9pbml0KGNkZXYsICZsaXJjX2Rldl9mb3BzKTsKKwkJY2Rldi0+b3duZXIgPSBUSElTX01PRFVMRTsKKwl9CisJcmV0dmFsID0ga29iamVjdF9zZXRfbmFtZSgmY2Rldi0+a29iaiwgImxpcmMlZCIsIGQtPm1pbm9yKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJcmV0dmFsID0gY2Rldl9hZGQoY2RldiwgTUtERVYoTUFKT1IobGlyY19iYXNlX2RldiksIGQtPm1pbm9yKSwgMSk7CisJaWYgKHJldHZhbCkKKwkJa29iamVjdF9wdXQoJmNkZXYtPmtvYmopOworCisJcmV0dXJuIHJldHZhbDsKK30KKworaW50IGxpcmNfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBsaXJjX2RyaXZlciAqZCkKK3sKKwlzdHJ1Y3QgaXJjdGwgKmlyOworCWludCBtaW5vcjsKKwlpbnQgYnl0ZXNfaW5fa2V5OworCXVuc2lnbmVkIGludCBjaHVua19zaXplOworCXVuc2lnbmVkIGludCBidWZmZXJfc2l6ZTsKKwlpbnQgZXJyOworCisJaWYgKCFkKSB7CisJCXByaW50ayhLRVJOX0VSUiAibGlyY19kZXY6IGxpcmNfcmVnaXN0ZXJfZHJpdmVyOiAiCisJCSAgICAgICAiZHJpdmVyIHBvaW50ZXIgbXVzdCBiZSBub3QgTlVMTCFcbiIpOworCQllcnIgPSAtRUJBRFJRQzsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKCFkLT5kZXYpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZGV2IHBvaW50ZXIgbm90IGZpbGxlZCBpbiFcbiIsIF9fZnVuY19fKTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKE1BWF9JUkNUTF9ERVZJQ0VTIDw9IGQtPm1pbm9yKSB7CisJCWRldl9lcnIoZC0+ZGV2LCAibGlyY19kZXY6IGxpcmNfcmVnaXN0ZXJfZHJpdmVyOiAiCisJCQkiXCJtaW5vclwiIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAlZCAoJWQpIVxuIiwKKwkJCU1BWF9JUkNUTF9ERVZJQ0VTLTEsIGQtPm1pbm9yKTsKKwkJZXJyID0gLUVCQURSUUM7CisJCWdvdG8gb3V0OworCX0KKworCWlmICgxID4gZC0+Y29kZV9sZW5ndGggfHwgKEJVRkxFTiAqIDgpIDwgZC0+Y29kZV9sZW5ndGgpIHsKKwkJZGV2X2VycihkLT5kZXYsICJsaXJjX2RldjogbGlyY19yZWdpc3Rlcl9kcml2ZXI6ICIKKwkJCSJjb2RlIGxlbmd0aCBpbiBiaXRzIGZvciBtaW5vciAoJWQpICIKKwkJCSJtdXN0IGJlIGxlc3MgdGhhbiAlZCFcbiIsCisJCQlkLT5taW5vciwgQlVGTEVOICogOCk7CisJCWVyciA9IC1FQkFEUlFDOworCQlnb3RvIG91dDsKKwl9CisKKwlkZXZfZGJnKGQtPmRldiwgImxpcmNfZGV2OiBsaXJjX3JlZ2lzdGVyX2RyaXZlcjogc2FtcGxlX3JhdGU6ICVkXG4iLAorCQlkLT5zYW1wbGVfcmF0ZSk7CisJaWYgKGQtPnNhbXBsZV9yYXRlKSB7CisJCWlmICgyID4gZC0+c2FtcGxlX3JhdGUgfHwgSFogPCBkLT5zYW1wbGVfcmF0ZSkgeworCQkJZGV2X2VycihkLT5kZXYsICJsaXJjX2RldjogbGlyY19yZWdpc3Rlcl9kcml2ZXI6ICIKKwkJCQkic2FtcGxlX3JhdGUgbXVzdCBiZSBiZXR3ZWVuIDIgYW5kICVkIVxuIiwgSFopOworCQkJZXJyID0gLUVCQURSUUM7CisJCQlnb3RvIG91dDsKKwkJfQorCQlpZiAoIWQtPmFkZF90b19idWYpIHsKKwkJCWRldl9lcnIoZC0+ZGV2LCAibGlyY19kZXY6IGxpcmNfcmVnaXN0ZXJfZHJpdmVyOiAiCisJCQkJImFkZF90b19idWYgY2Fubm90IGJlIE5VTEwgd2hlbiAiCisJCQkJInNhbXBsZV9yYXRlIGlzIHNldFxuIik7CisJCQllcnIgPSAtRUJBRFJRQzsKKwkJCWdvdG8gb3V0OworCQl9CisJfSBlbHNlIGlmICghKGQtPmZvcHMgJiYgZC0+Zm9wcy0+cmVhZCkgJiYgIWQtPnJidWYpIHsKKwkJZGV2X2VycihkLT5kZXYsICJsaXJjX2RldjogbGlyY19yZWdpc3Rlcl9kcml2ZXI6ICIKKwkJCSJmb3BzLT5yZWFkIGFuZCByYnVmIGNhbm5vdCBhbGwgYmUgTlVMTCFcbiIpOworCQllcnIgPSAtRUJBRFJRQzsKKwkJZ290byBvdXQ7CisJfSBlbHNlIGlmICghZC0+cmJ1ZikgeworCQlpZiAoIShkLT5mb3BzICYmIGQtPmZvcHMtPnJlYWQgJiYgZC0+Zm9wcy0+cG9sbCAmJgorCQkgICAgICBkLT5mb3BzLT51bmxvY2tlZF9pb2N0bCkpIHsKKwkJCWRldl9lcnIoZC0+ZGV2LCAibGlyY19kZXY6IGxpcmNfcmVnaXN0ZXJfZHJpdmVyOiAiCisJCQkJIm5laXRoZXIgcmVhZCwgcG9sbCBub3IgdW5sb2NrZWRfaW9jdGwgY2FuIGJlIE5VTEwhXG4iKTsKKwkJCWVyciA9IC1FQkFEUlFDOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwltdXRleF9sb2NrKCZsaXJjX2Rldl9sb2NrKTsKKworCW1pbm9yID0gZC0+bWlub3I7CisKKwlpZiAobWlub3IgPCAwKSB7CisJCS8qIGZpbmQgZmlyc3QgZnJlZSBzbG90IGZvciBkcml2ZXIgKi8KKwkJZm9yIChtaW5vciA9IDA7IG1pbm9yIDwgTUFYX0lSQ1RMX0RFVklDRVM7IG1pbm9yKyspCisJCQlpZiAoIWlyY3Rsc1ttaW5vcl0pCisJCQkJYnJlYWs7CisJCWlmIChNQVhfSVJDVExfREVWSUNFUyA9PSBtaW5vcikgeworCQkJZGV2X2VycihkLT5kZXYsICJsaXJjX2RldjogbGlyY19yZWdpc3Rlcl9kcml2ZXI6ICIKKwkJCQkibm8gZnJlZSBzbG90cyBmb3IgZHJpdmVycyFcbiIpOworCQkJZXJyID0gLUVOT01FTTsKKwkJCWdvdG8gb3V0X2xvY2s7CisJCX0KKwl9IGVsc2UgaWYgKGlyY3Rsc1ttaW5vcl0pIHsKKwkJZGV2X2VycihkLT5kZXYsICJsaXJjX2RldjogbGlyY19yZWdpc3Rlcl9kcml2ZXI6ICIKKwkJCSJtaW5vciAoJWQpIGp1c3QgcmVnaXN0ZXJlZCFcbiIsIG1pbm9yKTsKKwkJZXJyID0gLUVCVVNZOworCQlnb3RvIG91dF9sb2NrOworCX0KKworCWlyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGlyY3RsKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpcikgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIG91dF9sb2NrOworCX0KKwlsaXJjX2lyY3RsX2luaXQoaXIpOworCWlyY3Rsc1ttaW5vcl0gPSBpcjsKKwlkLT5taW5vciA9IG1pbm9yOworCisJaWYgKGQtPnNhbXBsZV9yYXRlKSB7CisJCWlyLT5qaWZmaWVzX3RvX3dhaXQgPSBIWiAvIGQtPnNhbXBsZV9yYXRlOworCX0gZWxzZSB7CisJCS8qIGl0IG1lYW5zIC0gd2FpdCBmb3IgZXh0ZXJuYWwgZXZlbnQgaW4gdGFzayBxdWV1ZSAqLworCQlpci0+amlmZmllc190b193YWl0ID0gMDsKKwl9CisKKwkvKiBzb21lIHNhZmV0eSBjaGVjayA4LSkgKi8KKwlkLT5uYW1lW3NpemVvZihkLT5uYW1lKS0xXSA9ICdcMCc7CisKKwlieXRlc19pbl9rZXkgPSBCSVRTX1RPX0xPTkdTKGQtPmNvZGVfbGVuZ3RoKSArCisJCQkoZC0+Y29kZV9sZW5ndGggJSA4ID8gMSA6IDApOworCWJ1ZmZlcl9zaXplID0gZC0+YnVmZmVyX3NpemUgPyBkLT5idWZmZXJfc2l6ZSA6IEJVRkxFTiAvIGJ5dGVzX2luX2tleTsKKwljaHVua19zaXplICA9IGQtPmNodW5rX3NpemUgID8gZC0+Y2h1bmtfc2l6ZSAgOiBieXRlc19pbl9rZXk7CisKKwlpZiAoZC0+cmJ1ZikgeworCQlpci0+YnVmID0gZC0+cmJ1ZjsKKwl9IGVsc2UgeworCQlpci0+YnVmID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGxpcmNfYnVmZmVyKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghaXItPmJ1ZikgeworCQkJZXJyID0gLUVOT01FTTsKKwkJCWdvdG8gb3V0X2xvY2s7CisJCX0KKwkJZXJyID0gbGlyY19idWZmZXJfaW5pdChpci0+YnVmLCBjaHVua19zaXplLCBidWZmZXJfc2l6ZSk7CisJCWlmIChlcnIpIHsKKwkJCWtmcmVlKGlyLT5idWYpOworCQkJZ290byBvdXRfbG9jazsKKwkJfQorCX0KKwlpci0+Y2h1bmtfc2l6ZSA9IGlyLT5idWYtPmNodW5rX3NpemU7CisKKwlpZiAoZC0+ZmVhdHVyZXMgPT0gMCkKKwkJZC0+ZmVhdHVyZXMgPSBMSVJDX0NBTl9SRUNfTElSQ0NPREU7CisKKwlpci0+ZCA9ICpkOworCisJZGV2aWNlX2NyZWF0ZShsaXJjX2NsYXNzLCBpci0+ZC5kZXYsCisJCSAgICAgIE1LREVWKE1BSk9SKGxpcmNfYmFzZV9kZXYpLCBpci0+ZC5taW5vciksIE5VTEwsCisJCSAgICAgICJsaXJjJXUiLCBpci0+ZC5taW5vcik7CisKKwlpZiAoZC0+c2FtcGxlX3JhdGUpIHsKKwkJLyogdHJ5IHRvIGZpcmUgdXAgcG9sbGluZyB0aHJlYWQgKi8KKwkJaXItPnRhc2sgPSBrdGhyZWFkX3J1bihsaXJjX3RocmVhZCwgKHZvaWQgKilpciwgImxpcmNfZGV2Iik7CisJCWlmIChJU19FUlIoaXItPnRhc2spKSB7CisJCQlkZXZfZXJyKGQtPmRldiwgImxpcmNfZGV2OiBsaXJjX3JlZ2lzdGVyX2RyaXZlcjogIgorCQkJCSJjYW5ub3QgcnVuIHBvbGwgdGhyZWFkIGZvciBtaW5vciA9ICVkXG4iLAorCQkJCWQtPm1pbm9yKTsKKwkJCWVyciA9IC1FQ0hJTEQ7CisJCQlnb3RvIG91dF9zeXNmczsKKwkJfQorCX0KKworCWVyciA9IGxpcmNfY2Rldl9hZGQoaXIpOworCWlmIChlcnIpCisJCWdvdG8gb3V0X3N5c2ZzOworCisJaXItPmF0dGFjaGVkID0gMTsKKwltdXRleF91bmxvY2soJmxpcmNfZGV2X2xvY2spOworCisJZGV2X2luZm8oaXItPmQuZGV2LCAibGlyY19kZXY6IGRyaXZlciAlcyByZWdpc3RlcmVkIGF0IG1pbm9yID0gJWRcbiIsCisJCSBpci0+ZC5uYW1lLCBpci0+ZC5taW5vcik7CisJcmV0dXJuIG1pbm9yOworCitvdXRfc3lzZnM6CisJZGV2aWNlX2Rlc3Ryb3kobGlyY19jbGFzcywgTUtERVYoTUFKT1IobGlyY19iYXNlX2RldiksIGlyLT5kLm1pbm9yKSk7CitvdXRfbG9jazoKKwltdXRleF91bmxvY2soJmxpcmNfZGV2X2xvY2spOworb3V0OgorCXJldHVybiBlcnI7Cit9CitFWFBPUlRfU1lNQk9MKGxpcmNfcmVnaXN0ZXJfZHJpdmVyKTsKKworaW50IGxpcmNfdW5yZWdpc3Rlcl9kcml2ZXIoaW50IG1pbm9yKQoreworCXN0cnVjdCBpcmN0bCAqaXI7CisJc3RydWN0IGNkZXYgKmNkZXY7CisKKwlpZiAobWlub3IgPCAwIHx8IG1pbm9yID49IE1BWF9JUkNUTF9ERVZJQ0VTKSB7CisJCXByaW50ayhLRVJOX0VSUiAibGlyY19kZXY6ICVzOiBtaW5vciAoJWQpIG11c3QgYmUgYmV0d2VlbiAiCisJCSAgICAgICAiMCBhbmQgJWQhXG4iLCBfX2Z1bmNfXywgbWlub3IsIE1BWF9JUkNUTF9ERVZJQ0VTLTEpOworCQlyZXR1cm4gLUVCQURSUUM7CisJfQorCisJaXIgPSBpcmN0bHNbbWlub3JdOworCWlmICghaXIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJsaXJjX2RldjogJXM6IGZhaWxlZCB0byBnZXQgaXJjdGwgc3RydWN0ICIKKwkJICAgICAgICJmb3IgbWlub3IgJWQhXG4iLCBfX2Z1bmNfXywgbWlub3IpOworCQlyZXR1cm4gLUVOT0VOVDsKKwl9CisKKwljZGV2ID0gJmNkZXZzW21pbm9yXTsKKworCW11dGV4X2xvY2soJmxpcmNfZGV2X2xvY2spOworCisJaWYgKGlyLT5kLm1pbm9yICE9IG1pbm9yKSB7CisJCXByaW50ayhLRVJOX0VSUiAibGlyY19kZXY6ICVzOiBtaW5vciAoJWQpIGRldmljZSBub3QgIgorCQkgICAgICAgInJlZ2lzdGVyZWQhXG4iLCBfX2Z1bmNfXywgbWlub3IpOworCQltdXRleF91bmxvY2soJmxpcmNfZGV2X2xvY2spOworCQlyZXR1cm4gLUVOT0VOVDsKKwl9CisKKwkvKiBlbmQgdXAgcG9sbGluZyB0aHJlYWQgKi8KKwlpZiAoaXItPnRhc2spCisJCWt0aHJlYWRfc3RvcChpci0+dGFzayk7CisKKwlkZXZfZGJnKGlyLT5kLmRldiwgImxpcmNfZGV2OiBkcml2ZXIgJXMgdW5yZWdpc3RlcmVkIGZyb20gbWlub3IgPSAlZFxuIiwKKwkJaXItPmQubmFtZSwgaXItPmQubWlub3IpOworCisJaXItPmF0dGFjaGVkID0gMDsKKwlpZiAoaXItPm9wZW4pIHsKKwkJZGV2X2RiZyhpci0+ZC5kZXYsIExPR0hFQUQgInJlbGVhc2luZyBvcGVuZWQgZHJpdmVyXG4iLAorCQkJaXItPmQubmFtZSwgaXItPmQubWlub3IpOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmlyLT5idWYtPndhaXRfcG9sbCk7CisJCW11dGV4X2xvY2soJmlyLT5pcmN0bF9sb2NrKTsKKwkJaXItPmQuc2V0X3VzZV9kZWMoaXItPmQuZGF0YSk7CisJCW1vZHVsZV9wdXQoY2Rldi0+b3duZXIpOworCQltdXRleF91bmxvY2soJmlyLT5pcmN0bF9sb2NrKTsKKwl9IGVsc2UgeworCQlsaXJjX2lyY3RsX2NsZWFudXAoaXIpOworCQljZGV2X2RlbChjZGV2KTsKKwkJa2ZyZWUoaXIpOworCQlpcmN0bHNbbWlub3JdID0gTlVMTDsKKwl9CisKKwltdXRleF91bmxvY2soJmxpcmNfZGV2X2xvY2spOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGxpcmNfdW5yZWdpc3Rlcl9kcml2ZXIpOworCitpbnQgbGlyY19kZXZfZm9wX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGlyY3RsICppcjsKKwlzdHJ1Y3QgY2RldiAqY2RldjsKKwlpbnQgcmV0dmFsID0gMDsKKworCWlmIChpbWlub3IoaW5vZGUpID49IE1BWF9JUkNUTF9ERVZJQ0VTKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImxpcmNfZGV2IFslZF06IG9wZW4gcmVzdWx0ID0gLUVOT0RFVlxuIiwKKwkJICAgICAgIGltaW5vcihpbm9kZSkpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZsaXJjX2Rldl9sb2NrKSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCWlyID0gaXJjdGxzW2ltaW5vcihpbm9kZSldOworCWlmICghaXIpIHsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlkZXZfZGJnKGlyLT5kLmRldiwgTE9HSEVBRCAib3BlbiBjYWxsZWRcbiIsIGlyLT5kLm5hbWUsIGlyLT5kLm1pbm9yKTsKKworCWlmIChpci0+ZC5taW5vciA9PSBOT1BMVUcpIHsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlpZiAoaXItPm9wZW4pIHsKKwkJcmV0dmFsID0gLUVCVVNZOworCQlnb3RvIGVycm9yOworCX0KKworCWNkZXYgPSAmY2RldnNbaW1pbm9yKGlub2RlKV07CisJaWYgKHRyeV9tb2R1bGVfZ2V0KGNkZXYtPm93bmVyKSkgeworCQlpci0+b3BlbisrOworCQlyZXR2YWwgPSBpci0+ZC5zZXRfdXNlX2luYyhpci0+ZC5kYXRhKTsKKworCQlpZiAocmV0dmFsKSB7CisJCQltb2R1bGVfcHV0KGNkZXYtPm93bmVyKTsKKwkJCWlyLT5vcGVuLS07CisJCX0gZWxzZSB7CisJCQlsaXJjX2J1ZmZlcl9jbGVhcihpci0+YnVmKTsKKwkJfQorCQlpZiAoaXItPnRhc2spCisJCQl3YWtlX3VwX3Byb2Nlc3MoaXItPnRhc2spOworCX0KKworZXJyb3I6CisJaWYgKGlyKQorCQlkZXZfZGJnKGlyLT5kLmRldiwgTE9HSEVBRCAib3BlbiByZXN1bHQgPSAlZFxuIiwKKwkJCWlyLT5kLm5hbWUsIGlyLT5kLm1pbm9yLCByZXR2YWwpOworCisJbXV0ZXhfdW5sb2NrKCZsaXJjX2Rldl9sb2NrKTsKKworCW5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbGUpOworCisJcmV0dXJuIHJldHZhbDsKK30KK0VYUE9SVF9TWU1CT0wobGlyY19kZXZfZm9wX29wZW4pOworCitpbnQgbGlyY19kZXZfZm9wX2Nsb3NlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBpcmN0bCAqaXIgPSBpcmN0bHNbaW1pbm9yKGlub2RlKV07CisJc3RydWN0IGNkZXYgKmNkZXYgPSAmY2RldnNbaW1pbm9yKGlub2RlKV07CisKKwlpZiAoIWlyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbGxlZCB3aXRoIGludmFsaWQgaXJjdGxcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZGV2X2RiZyhpci0+ZC5kZXYsIExPR0hFQUQgImNsb3NlIGNhbGxlZFxuIiwgaXItPmQubmFtZSwgaXItPmQubWlub3IpOworCisJV0FSTl9PTihtdXRleF9sb2NrX2tpbGxhYmxlKCZsaXJjX2Rldl9sb2NrKSk7CisKKwlpci0+b3Blbi0tOworCWlmIChpci0+YXR0YWNoZWQpIHsKKwkJaXItPmQuc2V0X3VzZV9kZWMoaXItPmQuZGF0YSk7CisJCW1vZHVsZV9wdXQoY2Rldi0+b3duZXIpOworCX0gZWxzZSB7CisJCWxpcmNfaXJjdGxfY2xlYW51cChpcik7CisJCWNkZXZfZGVsKGNkZXYpOworCQlpcmN0bHNbaXItPmQubWlub3JdID0gTlVMTDsKKwkJa2ZyZWUoaXIpOworCX0KKworCW11dGV4X3VubG9jaygmbGlyY19kZXZfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wobGlyY19kZXZfZm9wX2Nsb3NlKTsKKwordW5zaWduZWQgaW50IGxpcmNfZGV2X2ZvcF9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KQoreworCXN0cnVjdCBpcmN0bCAqaXIgPSBpcmN0bHNbaW1pbm9yKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKV07CisJdW5zaWduZWQgaW50IHJldDsKKworCWlmICghaXIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogY2FsbGVkIHdpdGggaW52YWxpZCBpcmN0bFxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gUE9MTEVSUjsKKwl9CisKKwlkZXZfZGJnKGlyLT5kLmRldiwgTE9HSEVBRCAicG9sbCBjYWxsZWRcbiIsIGlyLT5kLm5hbWUsIGlyLT5kLm1pbm9yKTsKKworCWlmICghaXItPmF0dGFjaGVkKQorCQlyZXR1cm4gUE9MTEVSUjsKKworCXBvbGxfd2FpdChmaWxlLCAmaXItPmJ1Zi0+d2FpdF9wb2xsLCB3YWl0KTsKKworCWlmIChpci0+YnVmKQorCQlpZiAobGlyY19idWZmZXJfZW1wdHkoaXItPmJ1ZikpCisJCQlyZXQgPSAwOworCQllbHNlCisJCQlyZXQgPSBQT0xMSU4gfCBQT0xMUkROT1JNOworCWVsc2UKKwkJcmV0ID0gUE9MTEVSUjsKKworCWRldl9kYmcoaXItPmQuZGV2LCBMT0dIRUFEICJwb2xsIHJlc3VsdCA9ICVkXG4iLAorCQlpci0+ZC5uYW1lLCBpci0+ZC5taW5vciwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGxpcmNfZGV2X2ZvcF9wb2xsKTsKKworbG9uZyBsaXJjX2Rldl9mb3BfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCV9fdTMyIG1vZGU7CisJaW50IHJlc3VsdCA9IDA7CisJc3RydWN0IGlyY3RsICppciA9IGlyY3Rsc1tpbWlub3IoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpXTsKKworCWlmICghaXIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJsaXJjX2RldjogJXM6IG5vIGlyY3RsIGZvdW5kIVxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlkZXZfZGJnKGlyLT5kLmRldiwgTE9HSEVBRCAiaW9jdGwgY2FsbGVkICgweCV4KVxuIiwKKwkJaXItPmQubmFtZSwgaXItPmQubWlub3IsIGNtZCk7CisKKwlpZiAoaXItPmQubWlub3IgPT0gTk9QTFVHIHx8ICFpci0+YXR0YWNoZWQpIHsKKwkJZGV2X2RiZyhpci0+ZC5kZXYsIExPR0hFQUQgImlvY3RsIHJlc3VsdCA9IC1FTk9ERVZcbiIsCisJCQlpci0+ZC5uYW1lLCBpci0+ZC5taW5vcik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCW11dGV4X2xvY2soJmlyLT5pcmN0bF9sb2NrKTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBMSVJDX0dFVF9GRUFUVVJFUzoKKwkJcmVzdWx0ID0gcHV0X3VzZXIoaXItPmQuZmVhdHVyZXMsIChfX3UzMiAqKWFyZyk7CisJCWJyZWFrOworCWNhc2UgTElSQ19HRVRfUkVDX01PREU6CisJCWlmICghKGlyLT5kLmZlYXR1cmVzICYgTElSQ19DQU5fUkVDX01BU0spKSB7CisJCQlyZXN1bHQgPSAtRU5PU1lTOworCQkJYnJlYWs7CisJCX0KKworCQlyZXN1bHQgPSBwdXRfdXNlcihMSVJDX1JFQzJNT0RFCisJCQkJICAoaXItPmQuZmVhdHVyZXMgJiBMSVJDX0NBTl9SRUNfTUFTSyksCisJCQkJICAoX191MzIgKilhcmcpOworCQlicmVhazsKKwljYXNlIExJUkNfU0VUX1JFQ19NT0RFOgorCQlpZiAoIShpci0+ZC5mZWF0dXJlcyAmIExJUkNfQ0FOX1JFQ19NQVNLKSkgeworCQkJcmVzdWx0ID0gLUVOT1NZUzsKKwkJCWJyZWFrOworCQl9CisKKwkJcmVzdWx0ID0gZ2V0X3VzZXIobW9kZSwgKF9fdTMyICopYXJnKTsKKwkJaWYgKCFyZXN1bHQgJiYgIShMSVJDX01PREUyUkVDKG1vZGUpICYgaXItPmQuZmVhdHVyZXMpKQorCQkJcmVzdWx0ID0gLUVJTlZBTDsKKwkJLyoKKwkJICogRklYTUU6IFdlIHNob3VsZCBhY3R1YWxseSBzZXQgdGhlIG1vZGUgc29tZWhvdyBidXQKKwkJICogZm9yIG5vdywgbGlyY19zZXJpYWwgZG9lc24ndCBzdXBwb3J0IG1vZGUgY2hhbmdpbmcgZWl0aGVyCisJCSAqLworCQlicmVhazsKKwljYXNlIExJUkNfR0VUX0xFTkdUSDoKKwkJcmVzdWx0ID0gcHV0X3VzZXIoaXItPmQuY29kZV9sZW5ndGgsIChfX3UzMiAqKWFyZyk7CisJCWJyZWFrOworCWNhc2UgTElSQ19HRVRfTUlOX1RJTUVPVVQ6CisJCWlmICghKGlyLT5kLmZlYXR1cmVzICYgTElSQ19DQU5fU0VUX1JFQ19USU1FT1VUKSB8fAorCQkgICAgaXItPmQubWluX3RpbWVvdXQgPT0gMCkgeworCQkJcmVzdWx0ID0gLUVOT1NZUzsKKwkJCWJyZWFrOworCQl9CisKKwkJcmVzdWx0ID0gcHV0X3VzZXIoaXItPmQubWluX3RpbWVvdXQsIChfX3UzMiAqKWFyZyk7CisJCWJyZWFrOworCWNhc2UgTElSQ19HRVRfTUFYX1RJTUVPVVQ6CisJCWlmICghKGlyLT5kLmZlYXR1cmVzICYgTElSQ19DQU5fU0VUX1JFQ19USU1FT1VUKSB8fAorCQkgICAgaXItPmQubWF4X3RpbWVvdXQgPT0gMCkgeworCQkJcmVzdWx0ID0gLUVOT1NZUzsKKwkJCWJyZWFrOworCQl9CisKKwkJcmVzdWx0ID0gcHV0X3VzZXIoaXItPmQubWF4X3RpbWVvdXQsIChfX3UzMiAqKWFyZyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJlc3VsdCA9IC1FSU5WQUw7CisJfQorCisJZGV2X2RiZyhpci0+ZC5kZXYsIExPR0hFQUQgImlvY3RsIHJlc3VsdCA9ICVkXG4iLAorCQlpci0+ZC5uYW1lLCBpci0+ZC5taW5vciwgcmVzdWx0KTsKKworCW11dGV4X3VubG9jaygmaXItPmlyY3RsX2xvY2spOworCisJcmV0dXJuIHJlc3VsdDsKK30KK0VYUE9SVF9TWU1CT0wobGlyY19kZXZfZm9wX2lvY3RsKTsKKworc3NpemVfdCBsaXJjX2Rldl9mb3BfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgY2hhciBfX3VzZXIgKmJ1ZmZlciwKKwkJCSAgc2l6ZV90IGxlbmd0aCwKKwkJCSAgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBpcmN0bCAqaXIgPSBpcmN0bHNbaW1pbm9yKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKV07CisJdW5zaWduZWQgY2hhciAqYnVmOworCWludCByZXQgPSAwLCB3cml0dGVuID0gMDsKKwlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKKworCWlmICghaXIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogY2FsbGVkIHdpdGggaW52YWxpZCBpcmN0bFxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlkZXZfZGJnKGlyLT5kLmRldiwgTE9HSEVBRCAicmVhZCBjYWxsZWRcbiIsIGlyLT5kLm5hbWUsIGlyLT5kLm1pbm9yKTsKKworCWJ1ZiA9IGt6YWxsb2MoaXItPmNodW5rX3NpemUsIEdGUF9LRVJORUwpOworCWlmICghYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmlyLT5pcmN0bF9sb2NrKSkgeworCQlyZXQgPSAtRVJFU1RBUlRTWVM7CisJCWdvdG8gb3V0X3VubG9ja2VkOworCX0KKwlpZiAoIWlyLT5hdHRhY2hlZCkgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dF9sb2NrZWQ7CisJfQorCisJaWYgKGxlbmd0aCAlIGlyLT5jaHVua19zaXplKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0X2xvY2tlZDsKKwl9CisKKwkvKgorCSAqIHdlIGFkZCBvdXJzZWx2ZXMgdG8gdGhlIHRhc2sgcXVldWUgYmVmb3JlIGJ1ZmZlciBjaGVjaworCSAqIHRvIGF2b2lkIGxvc2luZyBzY2FuIGNvZGUgKGluIGNhc2Ugd2hlbiBxdWV1ZSBpcyBhd2FrZW4gc29tZXdoZXJlCisJICogYmV0d2VlbiB3aGlsZSBjb25kaXRpb24gY2hlY2tpbmcgYW5kIHNjaGVkdWxpbmcpCisJICovCisJYWRkX3dhaXRfcXVldWUoJmlyLT5idWYtPndhaXRfcG9sbCwgJndhaXQpOworCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisKKwkvKgorCSAqIHdoaWxlIHdlIGRpZG4ndCBwcm92aWRlICdsZW5ndGgnIGJ5dGVzLCBkZXZpY2UgaXMgb3BlbmVkIGluIGJsb2NraW5nCisJICogbW9kZSBhbmQgJ2NvcHlfdG9fdXNlcicgaXMgaGFwcHksIHdhaXQgZm9yIGRhdGEuCisJICovCisJd2hpbGUgKHdyaXR0ZW4gPCBsZW5ndGggJiYgcmV0ID09IDApIHsKKwkJaWYgKGxpcmNfYnVmZmVyX2VtcHR5KGlyLT5idWYpKSB7CisJCQkvKiBBY2NvcmRpbmcgdG8gdGhlIHJlYWQoMikgbWFuIHBhZ2UsICd3cml0dGVuJyBjYW4gYmUKKwkJCSAqIHJldHVybmVkIGFzIGxlc3MgdGhhbiAnbGVuZ3RoJywgaW5zdGVhZCBvZiBibG9ja2luZworCQkJICogYWdhaW4sIHJldHVybmluZyAtRVdPVUxEQkxPQ0ssIG9yIHJldHVybmluZworCQkJICogLUVSRVNUQVJUU1lTICovCisJCQlpZiAod3JpdHRlbikKKwkJCQlicmVhazsKKwkJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgeworCQkJCXJldCA9IC1FV09VTERCTE9DSzsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQkJCXJldCA9IC1FUkVTVEFSVFNZUzsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJbXV0ZXhfdW5sb2NrKCZpci0+aXJjdGxfbG9jayk7CisJCQlzY2hlZHVsZSgpOworCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKworCQkJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmaXItPmlyY3RsX2xvY2spKSB7CisJCQkJcmV0ID0gLUVSRVNUQVJUU1lTOworCQkJCXJlbW92ZV93YWl0X3F1ZXVlKCZpci0+YnVmLT53YWl0X3BvbGwsICZ3YWl0KTsKKwkJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCQkJCWdvdG8gb3V0X3VubG9ja2VkOworCQkJfQorCisJCQlpZiAoIWlyLT5hdHRhY2hlZCkgeworCQkJCXJldCA9IC1FTk9ERVY7CisJCQkJYnJlYWs7CisJCQl9CisJCX0gZWxzZSB7CisJCQlsaXJjX2J1ZmZlcl9yZWFkKGlyLT5idWYsIGJ1Zik7CisJCQlyZXQgPSBjb3B5X3RvX3VzZXIoKHZvaWQgKilidWZmZXIrd3JpdHRlbiwgYnVmLAorCQkJCQkgICBpci0+YnVmLT5jaHVua19zaXplKTsKKwkJCWlmICghcmV0KQorCQkJCXdyaXR0ZW4gKz0gaXItPmJ1Zi0+Y2h1bmtfc2l6ZTsKKwkJCWVsc2UKKwkJCQlyZXQgPSAtRUZBVUxUOworCQl9CisJfQorCisJcmVtb3ZlX3dhaXRfcXVldWUoJmlyLT5idWYtPndhaXRfcG9sbCwgJndhaXQpOworCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CisKK291dF9sb2NrZWQ6CisJbXV0ZXhfdW5sb2NrKCZpci0+aXJjdGxfbG9jayk7CisKK291dF91bmxvY2tlZDoKKwlrZnJlZShidWYpOworCWRldl9kYmcoaXItPmQuZGV2LCBMT0dIRUFEICJyZWFkIHJlc3VsdCA9ICVzICglZClcbiIsCisJCWlyLT5kLm5hbWUsIGlyLT5kLm1pbm9yLCByZXQgPyAiPGZhaWw+IiA6ICI8b2s+IiwgcmV0KTsKKworCXJldHVybiByZXQgPyByZXQgOiB3cml0dGVuOworfQorRVhQT1JUX1NZTUJPTChsaXJjX2Rldl9mb3BfcmVhZCk7CisKK3ZvaWQgKmxpcmNfZ2V0X3BkYXRhKHN0cnVjdCBmaWxlICpmaWxlKQoreworCXZvaWQgKmRhdGEgPSBOVUxMOworCisJaWYgKGZpbGUgJiYgZmlsZS0+Zl9kZW50cnkgJiYgZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUgJiYKKwkgICAgZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfcmRldikgeworCQlzdHJ1Y3QgaXJjdGwgKmlyOworCQlpciA9IGlyY3Rsc1tpbWlub3IoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpXTsKKwkJZGF0YSA9IGlyLT5kLmRhdGE7CisJfQorCisJcmV0dXJuIGRhdGE7Cit9CitFWFBPUlRfU1lNQk9MKGxpcmNfZ2V0X3BkYXRhKTsKKworCitzc2l6ZV90IGxpcmNfZGV2X2ZvcF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKKwkJCSAgIHNpemVfdCBsZW5ndGgsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgaXJjdGwgKmlyID0gaXJjdGxzW2ltaW5vcihmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSldOworCisJaWYgKCFpcikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYWxsZWQgd2l0aCBpbnZhbGlkIGlyY3RsXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWRldl9kYmcoaXItPmQuZGV2LCBMT0dIRUFEICJ3cml0ZSBjYWxsZWRcbiIsIGlyLT5kLm5hbWUsIGlyLT5kLm1pbm9yKTsKKworCWlmICghaXItPmF0dGFjaGVkKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldHVybiAtRUlOVkFMOworfQorRVhQT1JUX1NZTUJPTChsaXJjX2Rldl9mb3Bfd3JpdGUpOworCisKK3N0YXRpYyBpbnQgX19pbml0IGxpcmNfZGV2X2luaXQodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCisJbGlyY19jbGFzcyA9IGNsYXNzX2NyZWF0ZShUSElTX01PRFVMRSwgImxpcmMiKTsKKwlpZiAoSVNfRVJSKGxpcmNfY2xhc3MpKSB7CisJCXJldHZhbCA9IFBUUl9FUlIobGlyY19jbGFzcyk7CisJCXByaW50ayhLRVJOX0VSUiAibGlyY19kZXY6IGNsYXNzX2NyZWF0ZSBmYWlsZWRcbiIpOworCQlnb3RvIGVycm9yOworCX0KKworCXJldHZhbCA9IGFsbG9jX2NocmRldl9yZWdpb24oJmxpcmNfYmFzZV9kZXYsIDAsIE1BWF9JUkNUTF9ERVZJQ0VTLAorCQkJCSAgICAgSVJDVExfREVWX05BTUUpOworCWlmIChyZXR2YWwpIHsKKwkJY2xhc3NfZGVzdHJveShsaXJjX2NsYXNzKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJsaXJjX2RldjogYWxsb2NfY2hyZGV2X3JlZ2lvbiBmYWlsZWRcbiIpOworCQlnb3RvIGVycm9yOworCX0KKworCisJcHJpbnRrKEtFUk5fSU5GTyAibGlyY19kZXY6IElSIFJlbW90ZSBDb250cm9sIGRyaXZlciByZWdpc3RlcmVkLCAiCisJICAgICAgICJtYWpvciAlZCBcbiIsIE1BSk9SKGxpcmNfYmFzZV9kZXYpKTsKKworZXJyb3I6CisJcmV0dXJuIHJldHZhbDsKK30KKworCisKK3N0YXRpYyB2b2lkIF9fZXhpdCBsaXJjX2Rldl9leGl0KHZvaWQpCit7CisJY2xhc3NfZGVzdHJveShsaXJjX2NsYXNzKTsKKwl1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24obGlyY19iYXNlX2RldiwgTUFYX0lSQ1RMX0RFVklDRVMpOworCXByaW50ayhLRVJOX0lORk8gImxpcmNfZGV2OiBtb2R1bGUgdW5sb2FkZWRcbiIpOworfQorCittb2R1bGVfaW5pdChsaXJjX2Rldl9pbml0KTsKK21vZHVsZV9leGl0KGxpcmNfZGV2X2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkxJUkMgYmFzZSBkcml2ZXIgbW9kdWxlIik7CitNT0RVTEVfQVVUSE9SKCJBcnR1ciBMaXBvd3NraSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCittb2R1bGVfcGFyYW0oZGVidWcsIGJvb2wsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJFbmFibGUgZGVidWdnaW5nIG1lc3NhZ2VzIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JjL21jZXVzYi5jIGIvZHJpdmVycy9tZWRpYS9yYy9tY2V1c2IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmVmNmVmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9tY2V1c2IuYwpAQCAtMCwwICsxLDEzMTMgQEAKKy8qCisgKiBEcml2ZXIgZm9yIFVTQiBXaW5kb3dzIE1lZGlhIENlbnRlciBFZC4gZUhvbWUgSW5mcmFyZWQgVHJhbnNjZWl2ZXJzCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIGJ5IEphcm9kIFdpbHNvbiA8amFyb2RAcmVkaGF0LmNvbT4KKyAqCisgKiBCYXNlZCBvbiB0aGUgb3JpZ2luYWwgbGlyY19tY2V1c2IgYW5kIGxpcmNfbWNldXNiMiBkcml2ZXJzLCBieSBEYW4KKyAqIENvbnRpLCBNYXJ0aW4gQmxhdHRlciBhbmQgRGFuaWVsIE1lbGFuZGVyLCB0aGUgbGF0dGVyIG9mIHdoaWNoIHdhcworICogaW4gdHVybiBhbHNvIGJhc2VkIG9uIHRoZSBsaXJjX2F0aXVzYiBkcml2ZXIgYnkgUGF1bCBNaWxsZXIuIFRoZQorICogdHdvIG1jZSBkcml2ZXJzIHdlcmUgbWVyZ2VkIGludG8gb25lIGJ5IEphcm9kIFdpbHNvbiwgd2l0aCB0cmFuc21pdAorICogc3VwcG9ydCBmb3IgdGhlIDFzdC1nZW4gZGV2aWNlIGFkZGVkIHByaW1hcmlseSBieSBQYXRyaWNrIENhbGhvdW4sCisgKiB3aXRoIGEgYml0IG9mIHR3ZWFrcyBieSBKYXJvZC4gRGVidWdnaW5nIGltcHJvdmVtZW50cyBhbmQgcHJvcGVyCisgKiBzdXBwb3J0IGZvciB3aGF0IGFwcGVhcnMgdG8gYmUgM3JkLWdlbiBoYXJkd2FyZSBhZGRlZCBieSBKYXJvZC4KKyAqIEluaXRpYWwgcG9ydCBmcm9tIGxpcmMgZHJpdmVyIHRvIGlyLWNvcmUgZHJpdmVyeSBieSBKYXJvZCwgYmFzZWQKKyAqIHBhcnRpYWxseSBvbiBhIHBvcnQgdG8gYW4gZWFybGllciBwcm9wb3NlZCBJUiBpbmZyYXN0cnVjdHVyZSBieQorICogSm9uIFNtaXJsLCB3aGljaCBpbmNsdWRlZCBlbmhhbmNlbWVudHMgYW5kIHNpbXBsaWZpY2F0aW9ucyB0byB0aGUKKyAqIGluY29taW5nIElSIGJ1ZmZlciBwYXJzaW5nIHJvdXRpbmVzLgorICoKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi9pbnB1dC5oPgorI2luY2x1ZGUgPG1lZGlhL3JjLWNvcmUuaD4KKworI2RlZmluZSBEUklWRVJfVkVSU0lPTgkiMS45MSIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUgkiSmFyb2QgV2lsc29uIDxqYXJvZEB3aWxzb25ldC5jb20+IgorI2RlZmluZSBEUklWRVJfREVTQwkiV2luZG93cyBNZWRpYSBDZW50ZXIgRWQuIGVIb21lIEluZnJhcmVkIFRyYW5zY2VpdmVyICIgXAorCQkJImRldmljZSBkcml2ZXIiCisjZGVmaW5lIERSSVZFUl9OQU1FCSJtY2V1c2IiCisKKyNkZWZpbmUgVVNCX0JVRkxFTgkJMzIgLyogVVNCIHJlY2VwdGlvbiBidWZmZXIgbGVuZ3RoICovCisjZGVmaW5lIFVTQl9DVFJMX01TR19TWgkJMiAgLyogU2l6ZSBvZiB1c2IgY3RybCBtc2cgb24gZ2VuMSBodyAqLworI2RlZmluZSBNQ0VfRzFfSU5JVF9NU0dTCTQwIC8qIEluaXQgbWVzc2FnZXMgb24gZ2VuMSBodyB0byB0aHJvdyBvdXQgKi8KKyNkZWZpbmUgTVNfVE9fTlMobXNlYykJCSgobXNlYykgKiAxMDAwKQorCisvKiBNQ0UgY29uc3RhbnRzICovCisjZGVmaW5lIE1DRV9DTURCVUZfU0laRQkJMzg0ICAvKiBNQ0UgQ29tbWFuZCBidWZmZXIgbGVuZ3RoICovCisjZGVmaW5lIE1DRV9USU1FX1VOSVQJCTUwICAgLyogQXBwcm94IDUwdXMgcmVzb2x1dGlvbiAqLworI2RlZmluZSBNQ0VfQ09ERV9MRU5HVEgJCTUgICAgLyogTm9ybWFsIGxlbmd0aCBvZiBwYWNrZXQgKHdpdGggaGVhZGVyKSAqLworI2RlZmluZSBNQ0VfUEFDS0VUX1NJWkUJCTQgICAgLyogTm9ybWFsIGxlbmd0aCBvZiBwYWNrZXQgKHdpdGhvdXQgaGVhZGVyKSAqLworI2RlZmluZSBNQ0VfSVJEQVRBX0hFQURFUgkweDg0IC8qIEFjdHVhbCBoZWFkZXIgZm9ybWF0IGlzIDB4ODAgKyBudW1fYnl0ZXMgKi8KKyNkZWZpbmUgTUNFX0lSREFUQV9UUkFJTEVSCTB4ODAgLyogRW5kIG9mIElSIGRhdGEgKi8KKyNkZWZpbmUgTUNFX1RYX0hFQURFUl9MRU5HVEgJMyAgICAvKiAjIG9mIGJ5dGVzIGluIHRoZSBpbml0aWFsaXppbmcgdHggaGVhZGVyICovCisjZGVmaW5lIE1DRV9NQVhfQ0hBTk5FTFMJMiAgICAvKiBUd28gdHJhbnNtaXR0ZXJzLCBoYXJkd2FyZSBkZXBlbmRlbnQ/ICovCisjZGVmaW5lIE1DRV9ERUZBVUxUX1RYX01BU0sJMHgwMyAvKiBWYWxzOiBUWDE9MHgwMSwgVFgyPTB4MDIsIEFMTD0weDAzICovCisjZGVmaW5lIE1DRV9QVUxTRV9CSVQJCTB4ODAgLyogUHVsc2UgYml0LCBNU0Igc2V0ID09IFBVTFNFIGVsc2UgU1BBQ0UgKi8KKyNkZWZpbmUgTUNFX1BVTFNFX01BU0sJCTB4N2YgLyogUHVsc2UgbWFzayAqLworI2RlZmluZSBNQ0VfTUFYX1BVTFNFX0xFTkdUSAkweDdmIC8qIExvbmdlc3QgdHJhbnNtaXR0YWJsZSBwdWxzZSBzeW1ib2wgKi8KKworI2RlZmluZSBNQ0VfSFdfQ01EX0hFQURFUgkweGZmCS8qIE1DRSBoYXJkd2FyZSBjb21tYW5kIGhlYWRlciAqLworI2RlZmluZSBNQ0VfQ09NTUFORF9IRUFERVIJMHg5ZgkvKiBNQ0UgY29tbWFuZCBoZWFkZXIgKi8KKyNkZWZpbmUgTUNFX0NPTU1BTkRfTUFTSwkweGUwCS8qIE1hc2sgb3V0IGNvbW1hbmQgYml0cyAqLworI2RlZmluZSBNQ0VfQ09NTUFORF9OVUxMCTB4MDAJLyogVGhlc2Ugc2hvdyB1cCB2YXJpb3VzIHBsYWNlcy4uLiAqLworLyogaWYgYnVmW2ldICYgTUNFX0NPTU1BTkRfTUFTSyA9PSAweDgwIGFuZCBidWZbaV0gIT0gTUNFX0NPTU1BTkRfSEVBREVSLAorICogdGhlbiB3ZSdyZSBsb29raW5nIGF0IGEgcmF3IElSIGRhdGEgc2FtcGxlICovCisjZGVmaW5lIE1DRV9DT01NQU5EX0lSREFUQQkweDgwCisjZGVmaW5lIE1DRV9QQUNLRVRfTEVOR1RIX01BU0sJMHgxZiAvKiBQYWNrZXQgbGVuZ3RoIG1hc2sgKi8KKworLyogU3ViLWNvbW1hbmRzLCB3aGljaCBmb2xsb3cgTUNFX0NPTU1BTkRfSEVBREVSIG9yIE1DRV9IV19DTURfSEVBREVSICovCisjZGVmaW5lIE1DRV9DTURfU0lHX0VORAkJMHgwMQkvKiBFbmQgb2Ygc2lnbmFsICovCisjZGVmaW5lIE1DRV9DTURfUElORwkJMHgwMwkvKiBQaW5nIGRldmljZSAqLworI2RlZmluZSBNQ0VfQ01EX1VOS05PV04JCTB4MDQJLyogVW5rbm93biAqLworI2RlZmluZSBNQ0VfQ01EX1VOS05PV04yCTB4MDUJLyogVW5rbm93biAqLworI2RlZmluZSBNQ0VfQ01EX1NfQ0FSUklFUgkweDA2CS8qIFNldCBUWCBjYXJyaWVyIGZyZXF1ZW5jeSAqLworI2RlZmluZSBNQ0VfQ01EX0dfQ0FSUklFUgkweDA3CS8qIEdldCBUWCBjYXJyaWVyIGZyZXF1ZW5jeSAqLworI2RlZmluZSBNQ0VfQ01EX1NfVFhNQVNLCTB4MDgJLyogU2V0IFRYIHBvcnQgYml0bWFzayAqLworI2RlZmluZSBNQ0VfQ01EX1VOS05PV04zCTB4MDkJLyogVW5rbm93biAqLworI2RlZmluZSBNQ0VfQ01EX1VOS05PV040CTB4MGEJLyogVW5rbm93biAqLworI2RlZmluZSBNQ0VfQ01EX0dfUkVWSVNJT04JMHgwYgkvKiBHZXQgaHcvc3cgcmV2aXNpb24gKi8KKyNkZWZpbmUgTUNFX0NNRF9TX1RJTUVPVVQJMHgwYwkvKiBTZXQgUlggdGltZW91dCB2YWx1ZSAqLworI2RlZmluZSBNQ0VfQ01EX0dfVElNRU9VVAkweDBkCS8qIEdldCBSWCB0aW1lb3V0IHZhbHVlICovCisjZGVmaW5lIE1DRV9DTURfVU5LTk9XTjUJMHgwZQkvKiBVbmtub3duICovCisjZGVmaW5lIE1DRV9DTURfVU5LTk9XTjYJMHgwZgkvKiBVbmtub3duICovCisjZGVmaW5lIE1DRV9DTURfR19SWFBPUlRTVFMJMHgxMQkvKiBHZXQgUlggcG9ydCBzdGF0dXMgKi8KKyNkZWZpbmUgTUNFX0NNRF9HX1RYTUFTSwkweDEzCS8qIFNldCBUWCBwb3J0IGJpdG1hc2sgKi8KKyNkZWZpbmUgTUNFX0NNRF9TX1JYU0VOU09SCTB4MTQJLyogU2V0IFJYIHNlbnNvciAoc3RkL2xlYXJuaW5nKSAqLworI2RlZmluZSBNQ0VfQ01EX0dfUlhTRU5TT1IJMHgxNQkvKiBHZXQgUlggc2Vuc29yIChzdGQvbGVhcm5pbmcpICovCisjZGVmaW5lIE1DRV9SU1BfUFVMU0VfQ09VTlQJMHgxNQkvKiBSWCBwdWxzZSBjb3VudCAob25seSBpZiBsZWFybmluZykgKi8KKyNkZWZpbmUgTUNFX0NNRF9UWF9QT1JUUwkweDE2CS8qIEdldCBudW1iZXIgb2YgVFggcG9ydHMgKi8KKyNkZWZpbmUgTUNFX0NNRF9HX1dBS0VTUkMJMHgxNwkvKiBHZXQgd2FrZSBzb3VyY2UgKi8KKyNkZWZpbmUgTUNFX0NNRF9VTktOT1dONwkweDE4CS8qIFVua25vd24gKi8KKyNkZWZpbmUgTUNFX0NNRF9VTktOT1dOOAkweDE5CS8qIFVua25vd24gKi8KKyNkZWZpbmUgTUNFX0NNRF9VTktOT1dOOQkweDFiCS8qIFVua25vd24gKi8KKyNkZWZpbmUgTUNFX0NNRF9ERVZJQ0VfUkVTRVQJMHhhYQkvKiBSZXNldCB0aGUgaGFyZHdhcmUgKi8KKyNkZWZpbmUgTUNFX1JTUF9DTURfSU5WQUxJRAkweGZlCS8qIEludmFsaWQgY29tbWFuZCBpc3N1ZWQgKi8KKworCisvKiBtb2R1bGUgcGFyYW1ldGVycyAqLworI2lmZGVmIENPTkZJR19VU0JfREVCVUcKK3N0YXRpYyBpbnQgZGVidWcgPSAxOworI2Vsc2UKK3N0YXRpYyBpbnQgZGVidWc7CisjZW5kaWYKKworLyogZ2VuZXJhbCBjb25zdGFudHMgKi8KKyNkZWZpbmUgU0VORF9GTEFHX0lOX1BST0dSRVNTCTEKKyNkZWZpbmUgU0VORF9GTEFHX0NPTVBMRVRFCTIKKyNkZWZpbmUgUkVDVl9GTEFHX0lOX1BST0dSRVNTCTMKKyNkZWZpbmUgUkVDVl9GTEFHX0NPTVBMRVRFCTQKKworI2RlZmluZSBNQ0VVU0JfUlgJCTEKKyNkZWZpbmUgTUNFVVNCX1RYCQkyCisKKyNkZWZpbmUgVkVORE9SX1BISUxJUFMJCTB4MDQ3MQorI2RlZmluZSBWRU5ET1JfU01LCQkweDA2MDkKKyNkZWZpbmUgVkVORE9SX1RBVFVORwkJMHgxNDYwCisjZGVmaW5lIFZFTkRPUl9HQVRFV0FZCQkweDEwN2IKKyNkZWZpbmUgVkVORE9SX1NIVVRUTEUJCTB4MTMwOAorI2RlZmluZSBWRU5ET1JfU0hVVFRMRTIJCTB4MDUxYworI2RlZmluZSBWRU5ET1JfTUlUU1VNSQkJMHgwM2VlCisjZGVmaW5lIFZFTkRPUl9UT1BTRUVECQkweDE3ODQKKyNkZWZpbmUgVkVORE9SX1JJQ0FWSVNJT04JMHgxNzlkCisjZGVmaW5lIFZFTkRPUl9JVFJPTgkJMHgxOTVkCisjZGVmaW5lIFZFTkRPUl9GSUMJCTB4MTUwOQorI2RlZmluZSBWRU5ET1JfTEcJCTB4MDQzZQorI2RlZmluZSBWRU5ET1JfTUlDUk9TT0ZUCTB4MDQ1ZQorI2RlZmluZSBWRU5ET1JfRk9STU9TQQkJMHgxNDdhCisjZGVmaW5lIFZFTkRPUl9GSU5URUsJCTB4MTkzNAorI2RlZmluZSBWRU5ET1JfUElOTkFDTEUJCTB4MjMwNAorI2RlZmluZSBWRU5ET1JfRUNTCQkweDEwMTkKKyNkZWZpbmUgVkVORE9SX1dJU1RST04JCTB4MGZiOAorI2RlZmluZSBWRU5ET1JfQ09NUFJPCQkweDE4NWIKKyNkZWZpbmUgVkVORE9SX05PUlRIU1RBUgkweDA0ZWIKKyNkZWZpbmUgVkVORE9SX1JFQUxURUsJCTB4MGJkYQorI2RlZmluZSBWRU5ET1JfVElWTwkJMHgxMDVhCisjZGVmaW5lIFZFTkRPUl9DT05FWEFOVAkJMHgwNTcyCisKK2VudW0gbWNldXNiX21vZGVsX3R5cGUgeworCU1DRV9HRU4yID0gMCwJCS8qIE1vc3QgYm9hcmRzICovCisJTUNFX0dFTjEsCisJTUNFX0dFTjMsCisJTUNFX0dFTjJfVFhfSU5WLAorCVBPTEFSSVNfRVZLLAorCUNYX0hZQlJJRF9UViwKK307CisKK3N0cnVjdCBtY2V1c2JfbW9kZWwgeworCXUzMiBtY2VfZ2VuMToxOworCXUzMiBtY2VfZ2VuMjoxOworCXUzMiBtY2VfZ2VuMzoxOworCXUzMiB0eF9tYXNrX25vcm1hbDoxOworCXUzMiBpc19wb2xhcmlzOjE7CisJdTMyIG5vX3R4OjE7CisKKwljb25zdCBjaGFyICpyY19tYXA7CS8qIEFsbG93IHNwZWNpZnkgYSBwZXItYm9hcmQgbWFwICovCisJY29uc3QgY2hhciAqbmFtZTsJLyogcGVyLWJvYXJkIG5hbWUgKi8KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWNldXNiX21vZGVsIG1jZXVzYl9tb2RlbFtdID0geworCVtNQ0VfR0VOMV0gPSB7CisJCS5tY2VfZ2VuMSA9IDEsCisJCS50eF9tYXNrX25vcm1hbCA9IDEsCisJfSwKKwlbTUNFX0dFTjJdID0geworCQkubWNlX2dlbjIgPSAxLAorCX0sCisJW01DRV9HRU4yX1RYX0lOVl0gPSB7CisJCS5tY2VfZ2VuMiA9IDEsCisJCS50eF9tYXNrX25vcm1hbCA9IDEsCisJfSwKKwlbTUNFX0dFTjNdID0geworCQkubWNlX2dlbjMgPSAxLAorCQkudHhfbWFza19ub3JtYWwgPSAxLAorCX0sCisJW1BPTEFSSVNfRVZLXSA9IHsKKwkJLmlzX3BvbGFyaXMgPSAxLAorCQkvKgorCQkgKiBJbiBmYWN0LCB0aGUgRVZLIGlzIHNoaXBwZWQgd2l0aG91dAorCQkgKiByZW1vdGVzLCBidXQgd2Ugc2hvdWxkIGhhdmUgc29tZXRoaW5nIGhhbmR5LAorCQkgKiB0byBhbGxvdyB0ZXN0aW5nIGl0CisJCSAqLworCQkucmNfbWFwID0gUkNfTUFQX1JDNV9IQVVQUEFVR0VfTkVXLAorCQkubmFtZSA9ICJDb25leGFudCBIeWJyaWQgVFYgKGN4MjMxeHgpIE1DRSBJUiIsCisJfSwKKwlbQ1hfSFlCUklEX1RWXSA9IHsKKwkJLmlzX3BvbGFyaXMgPSAxLAorCQkubm9fdHggPSAxLCAvKiB0eCBpc24ndCB3aXJlZCB1cCBhdCBhbGwgKi8KKwkJLm5hbWUgPSAiQ29uZXhhbnQgSHlicmlkIFRWIChjeDIzMXh4KSBNQ0UgSVIiLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgbWNldXNiX2Rldl90YWJsZVtdID0geworCS8qIE9yaWdpbmFsIE1pY3Jvc29mdCBNQ0UgSVIgVHJhbnNjZWl2ZXIgKG9mdGVuIEhQLWJyYW5kZWQpICovCisJeyBVU0JfREVWSUNFKFZFTkRPUl9NSUNST1NPRlQsIDB4MDA2ZCksCisJICAuZHJpdmVyX2luZm8gPSBNQ0VfR0VOMSB9LAorCS8qIFBoaWxpcHMgSW5mcmFyZWQgVHJhbnNjZWl2ZXIgLSBTYWhhcmEgYnJhbmRlZCAqLworCXsgVVNCX0RFVklDRShWRU5ET1JfUEhJTElQUywgMHgwNjA4KSB9LAorCS8qIFBoaWxpcHMgSW5mcmFyZWQgVHJhbnNjZWl2ZXIgLSBIUCBicmFuZGVkICovCisJeyBVU0JfREVWSUNFKFZFTkRPUl9QSElMSVBTLCAweDA2MGMpLAorCSAgLmRyaXZlcl9pbmZvID0gTUNFX0dFTjJfVFhfSU5WIH0sCisJLyogUGhpbGlwcyBTUk01MTAwICovCisJeyBVU0JfREVWSUNFKFZFTkRPUl9QSElMSVBTLCAweDA2MGQpIH0sCisJLyogUGhpbGlwcyBJbmZyYXJlZCBUcmFuc2NlaXZlciAtIE9tYXVyYSAqLworCXsgVVNCX0RFVklDRShWRU5ET1JfUEhJTElQUywgMHgwNjBmKSB9LAorCS8qIFBoaWxpcHMgSW5mcmFyZWQgVHJhbnNjZWl2ZXIgLSBTcGluZWwgcGx1cyAqLworCXsgVVNCX0RFVklDRShWRU5ET1JfUEhJTElQUywgMHgwNjEzKSB9LAorCS8qIFBoaWxpcHMgZUhvbWUgSW5mcmFyZWQgVHJhbnNjZWl2ZXIgKi8KKwl7IFVTQl9ERVZJQ0UoVkVORE9SX1BISUxJUFMsIDB4MDgxNSkgfSwKKwkvKiBQaGlsaXBzL1NwaW5lbCBwbHVzIElSIHRyYW5zY2VpdmVyIGZvciBBU1VTICovCisJeyBVU0JfREVWSUNFKFZFTkRPUl9QSElMSVBTLCAweDIwNmMpIH0sCisJLyogUGhpbGlwcy9TcGluZWwgcGx1cyBJUiB0cmFuc2NlaXZlciBmb3IgQVNVUyAqLworCXsgVVNCX0RFVklDRShWRU5ET1JfUEhJTElQUywgMHgyMDg4KSB9LAorCS8qIFJlYWx0ZWsgTUNFIElSIFJlY2VpdmVyICovCisJeyBVU0JfREVWSUNFKFZFTkRPUl9SRUFMVEVLLCAweDAxNjEpIH0sCisJLyogU01LL1Rvc2hpYmEgRzgzQzAwMDRENDEwICovCisJeyBVU0JfREVWSUNFKFZFTkRPUl9TTUssIDB4MDMxZCksCisJICAuZHJpdmVyX2luZm8gPSBNQ0VfR0VOMl9UWF9JTlYgfSwKKwkvKiBTTUsgZUhvbWUgSW5mcmFyZWQgVHJhbnNjZWl2ZXIgKFNvbnkgVkFJTykgKi8KKwl7IFVTQl9ERVZJQ0UoVkVORE9SX1NNSywgMHgwMzIyKSwKKwkgIC5kcml2ZXJfaW5mbyA9IE1DRV9HRU4yX1RYX0lOViB9LAorCS8qIGJ1bmRsZWQgd2l0aCBIYXVwcGF1Z2UgUFZSLTE1MCAqLworCXsgVVNCX0RFVklDRShWRU5ET1JfU01LLCAweDAzMzQpLAorCSAgLmRyaXZlcl9pbmZvID0gTUNFX0dFTjJfVFhfSU5WIH0sCisJLyogU01LIGVIb21lIEluZnJhcmVkIFRyYW5zY2VpdmVyICovCisJeyBVU0JfREVWSUNFKFZFTkRPUl9TTUssIDB4MDMzOCkgfSwKKwkvKiBUYXR1bmcgZUhvbWUgSW5mcmFyZWQgVHJhbnNjZWl2ZXIgKi8KKwl7IFVTQl9ERVZJQ0UoVkVORE9SX1RBVFVORywgMHg5MTUwKSB9LAorCS8qIFNodXR0bGUgZUhvbWUgSW5mcmFyZWQgVHJhbnNjZWl2ZXIgKi8KKwl7IFVTQl9ERVZJQ0UoVkVORE9SX1NIVVRUTEUsIDB4YzAwMSkgfSwKKwkvKiBTaHV0dGxlIGVIb21lIEluZnJhcmVkIFRyYW5zY2VpdmVyICovCisJeyBVU0JfREVWSUNFKFZFTkRPUl9TSFVUVExFMiwgMHhjMDAxKSB9LAorCS8qIEdhdGV3YXkgZUhvbWUgSW5mcmFyZWQgVHJhbnNjZWl2ZXIgKi8KKwl7IFVTQl9ERVZJQ0UoVkVORE9SX0dBVEVXQVksIDB4MzAwOSkgfSwKKwkvKiBNaXRzdW1pICovCisJeyBVU0JfREVWSUNFKFZFTkRPUl9NSVRTVU1JLCAweDI1MDEpIH0sCisJLyogVG9wc2VlZCBlSG9tZSBJbmZyYXJlZCBUcmFuc2NlaXZlciAqLworCXsgVVNCX0RFVklDRShWRU5ET1JfVE9QU0VFRCwgMHgwMDAxKSwKKwkgIC5kcml2ZXJfaW5mbyA9IE1DRV9HRU4yX1RYX0lOViB9LAorCS8qIFRvcHNlZWQgSFAgZUhvbWUgSW5mcmFyZWQgVHJhbnNjZWl2ZXIgKi8KKwl7IFVTQl9ERVZJQ0UoVkVORE9SX1RPUFNFRUQsIDB4MDAwNiksCisJICAuZHJpdmVyX2luZm8gPSBNQ0VfR0VOMl9UWF9JTlYgfSwKKwkvKiBUb3BzZWVkIGVIb21lIEluZnJhcmVkIFRyYW5zY2VpdmVyICovCisJeyBVU0JfREVWSUNFKFZFTkRPUl9UT1BTRUVELCAweDAwMDcpLAorCSAgLmRyaXZlcl9pbmZvID0gTUNFX0dFTjJfVFhfSU5WIH0sCisJLyogVG9wc2VlZCBlSG9tZSBJbmZyYXJlZCBUcmFuc2NlaXZlciAqLworCXsgVVNCX0RFVklDRShWRU5ET1JfVE9QU0VFRCwgMHgwMDA4KSwKKwkgIC5kcml2ZXJfaW5mbyA9IE1DRV9HRU4zIH0sCisJLyogVG9wc2VlZCBlSG9tZSBJbmZyYXJlZCBUcmFuc2NlaXZlciAqLworCXsgVVNCX0RFVklDRShWRU5ET1JfVE9QU0VFRCwgMHgwMDBhKSwKKwkgIC5kcml2ZXJfaW5mbyA9IE1DRV9HRU4yX1RYX0lOViB9LAorCS8qIFRvcHNlZWQgZUhvbWUgSW5mcmFyZWQgVHJhbnNjZWl2ZXIgKi8KKwl7IFVTQl9ERVZJQ0UoVkVORE9SX1RPUFNFRUQsIDB4MDAxMSksCisJICAuZHJpdmVyX2luZm8gPSBNQ0VfR0VOMl9UWF9JTlYgfSwKKwkvKiBSaWNhdmlzaW9uIGludGVybmFsIEluZnJhcmVkIFRyYW5zY2VpdmVyICovCisJeyBVU0JfREVWSUNFKFZFTkRPUl9SSUNBVklTSU9OLCAweDAwMTApIH0sCisJLyogSXRyb24gaW9uZSBMaWJyYSBRLTExICovCisJeyBVU0JfREVWSUNFKFZFTkRPUl9JVFJPTiwgMHg3MDAyKSB9LAorCS8qIEZJQyBlSG9tZSBJbmZyYXJlZCBUcmFuc2NlaXZlciAqLworCXsgVVNCX0RFVklDRShWRU5ET1JfRklDLCAweDkyNDIpIH0sCisJLyogTEcgZUhvbWUgSW5mcmFyZWQgVHJhbnNjZWl2ZXIgKi8KKwl7IFVTQl9ERVZJQ0UoVkVORE9SX0xHLCAweDk4MDMpIH0sCisJLyogTWljcm9zb2Z0IE1DRSBJbmZyYXJlZCBUcmFuc2NlaXZlciAqLworCXsgVVNCX0RFVklDRShWRU5ET1JfTUlDUk9TT0ZULCAweDAwYTApIH0sCisJLyogRm9ybW9zYSBlSG9tZSBJbmZyYXJlZCBUcmFuc2NlaXZlciAqLworCXsgVVNCX0RFVklDRShWRU5ET1JfRk9STU9TQSwgMHhlMDE1KSB9LAorCS8qIEZvcm1vc2EyMSAvIGVIb21lIEluZnJhcmVkIFJlY2VpdmVyICovCisJeyBVU0JfREVWSUNFKFZFTkRPUl9GT1JNT1NBLCAweGUwMTYpIH0sCisJLyogRm9ybW9zYSBhaW0gLyBUcnVzdCBNQ0UgSW5mcmFyZWQgUmVjZWl2ZXIgKi8KKwl7IFVTQl9ERVZJQ0UoVkVORE9SX0ZPUk1PU0EsIDB4ZTAxNykgfSwKKwkvKiBGb3Jtb3NhIEluZHVzdHJpYWwgQ29tcHV0aW5nIC8gQmVhbmJhZyBFbXVsYXRpb24gRGV2aWNlICovCisJeyBVU0JfREVWSUNFKFZFTkRPUl9GT1JNT1NBLCAweGUwMTgpIH0sCisJLyogRm9ybW9zYTIxIC8gZUhvbWUgSW5mcmFyZWQgUmVjZWl2ZXIgKi8KKwl7IFVTQl9ERVZJQ0UoVkVORE9SX0ZPUk1PU0EsIDB4ZTAzYSkgfSwKKwkvKiBGb3Jtb3NhIEluZHVzdHJpYWwgQ29tcHV0aW5nIEFJTSBJUjYwNS9BICovCisJeyBVU0JfREVWSUNFKFZFTkRPUl9GT1JNT1NBLCAweGUwM2MpIH0sCisJLyogRm9ybW9zYSBJbmR1c3RyaWFsIENvbXB1dGluZyAqLworCXsgVVNCX0RFVklDRShWRU5ET1JfRk9STU9TQSwgMHhlMDNlKSB9LAorCS8qIEZpbnRlayBlSG9tZSBJbmZyYXJlZCBUcmFuc2NlaXZlciAoSFAgYnJhbmRlZCkgKi8KKwl7IFVTQl9ERVZJQ0UoVkVORE9SX0ZJTlRFSywgMHg1MTY4KSB9LAorCS8qIEZpbnRlayBlSG9tZSBJbmZyYXJlZCBUcmFuc2NlaXZlciAqLworCXsgVVNCX0RFVklDRShWRU5ET1JfRklOVEVLLCAweDA2MDIpIH0sCisJLyogRmludGVrIGVIb21lIEluZnJhcmVkIFRyYW5zY2VpdmVyIChpbiB0aGUgQU9wZW4gTVA0NSkgKi8KKwl7IFVTQl9ERVZJQ0UoVkVORE9SX0ZJTlRFSywgMHgwNzAyKSB9LAorCS8qIFBpbm5hY2xlIFJlbW90ZSBLaXQgKi8KKwl7IFVTQl9ERVZJQ0UoVkVORE9SX1BJTk5BQ0xFLCAweDAyMjUpLAorCSAgLmRyaXZlcl9pbmZvID0gTUNFX0dFTjMgfSwKKwkvKiBFbGl0ZWdyb3VwIENvbXB1dGVyIFN5c3RlbXMgSVIgKi8KKwl7IFVTQl9ERVZJQ0UoVkVORE9SX0VDUywgMHgwZjM4KSB9LAorCS8qIFdpc3Ryb24gQ29ycC4gZUhvbWUgSW5mcmFyZWQgUmVjZWl2ZXIgKi8KKwl7IFVTQl9ERVZJQ0UoVkVORE9SX1dJU1RST04sIDB4MDAwMikgfSwKKwkvKiBDb21wcm8gSzEwMCAqLworCXsgVVNCX0RFVklDRShWRU5ET1JfQ09NUFJPLCAweDMwMjApIH0sCisJLyogQ29tcHJvIEsxMDAgdjIgKi8KKwl7IFVTQl9ERVZJQ0UoVkVORE9SX0NPTVBSTywgMHgzMDgyKSB9LAorCS8qIE5vcnRoc3RhciBTeXN0ZW1zLCBJbmMuIGVIb21lIEluZnJhcmVkIFRyYW5zY2VpdmVyICovCisJeyBVU0JfREVWSUNFKFZFTkRPUl9OT1JUSFNUQVIsIDB4ZTAwNCkgfSwKKwkvKiBUaVZvIFBDIElSIFJlY2VpdmVyICovCisJeyBVU0JfREVWSUNFKFZFTkRPUl9USVZPLCAweDIwMDApIH0sCisJLyogQ29uZXhhbnQgSHlicmlkIFRWICJTaGVsYnkiIFBvbGFyaXMgU0RLICovCisJeyBVU0JfREVWSUNFKFZFTkRPUl9DT05FWEFOVCwgMHg1OGExKSwKKwkgIC5kcml2ZXJfaW5mbyA9IFBPTEFSSVNfRVZLIH0sCisJLyogQ29uZXhhbnQgSHlicmlkIFRWIFJEVTI1M1MgUG9sYXJpcyAqLworCXsgVVNCX0RFVklDRShWRU5ET1JfQ09ORVhBTlQsIDB4NThhNSksCisJICAuZHJpdmVyX2luZm8gPSBDWF9IWUJSSURfVFYgfSwKKwkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworCXsgfQorfTsKKworLyogZGF0YSBzdHJ1Y3R1cmUgZm9yIGVhY2ggdXNiIHRyYW5zY2VpdmVyICovCitzdHJ1Y3QgbWNldXNiX2RldiB7CisJLyogaXItY29yZSBiaXRzICovCisJc3RydWN0IHJjX2RldiAqcmM7CisKKwkvKiBvcHRpb25hbCBmZWF0dXJlcyB3ZSBjYW4gZW5hYmxlICovCisJYm9vbCBjYXJyaWVyX3JlcG9ydF9lbmFibGVkOworCWJvb2wgbGVhcm5pbmdfZW5hYmxlZDsKKworCS8qIGNvcmUgZGV2aWNlIGJpdHMgKi8KKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisKKwkvKiB1c2IgKi8KKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2OworCXN0cnVjdCB1cmIgKnVyYl9pbjsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKnVzYl9lcF9pbjsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKnVzYl9lcF9vdXQ7CisKKwkvKiBidWZmZXJzIGFuZCBkbWEgKi8KKwl1bnNpZ25lZCBjaGFyICpidWZfaW47CisJdW5zaWduZWQgaW50IGxlbl9pbjsKKwlkbWFfYWRkcl90IGRtYV9pbjsKKwlkbWFfYWRkcl90IGRtYV9vdXQ7CisKKwllbnVtIHsKKwkJQ01EX0hFQURFUiA9IDAsCisJCVNVQkNNRCwKKwkJQ01EX0RBVEEsCisJCVBBUlNFX0lSREFUQSwKKwl9IHBhcnNlcl9zdGF0ZTsKKworCXU4IGNtZCwgcmVtOwkJLyogUmVtYWluaW5nIElSIGRhdGEgYnl0ZXMgaW4gcGFja2V0ICovCisKKwlzdHJ1Y3QgeworCQl1MzIgY29ubmVjdGVkOjE7CisJCXUzMiB0eF9tYXNrX25vcm1hbDoxOworCQl1MzIgbWljcm9zb2Z0X2dlbjE6MTsKKwkJdTMyIG5vX3R4OjE7CisJfSBmbGFnczsKKworCS8qIHRyYW5zbWl0IHN1cHBvcnQgKi8KKwlpbnQgc2VuZF9mbGFnczsKKwl1MzIgY2FycmllcjsKKwl1bnNpZ25lZCBjaGFyIHR4X21hc2s7CisKKwljaGFyIG5hbWVbMTI4XTsKKwljaGFyIHBoeXNbNjRdOworCWVudW0gbWNldXNiX21vZGVsX3R5cGUgbW9kZWw7Cit9OworCisvKgorICogTUNFIERldmljZSBDb21tYW5kIFN0cmluZ3MKKyAqIERldmljZSBjb21tYW5kIHJlc3BvbnNlcyB2YXJ5IGZyb20gZGV2aWNlIHRvIGRldmljZS4uLgorICogLSBERVZJQ0VfUkVTRVQgcmVzZXRzIHRoZSBoYXJkd2FyZSB0byBpdHMgZGVmYXVsdCBzdGF0ZQorICogLSBHRVRfUkVWSVNJT04gZmV0Y2hlcyB0aGUgaGFyZHdhcmUvc29mdHdhcmUgcmV2aXNpb24sIGNvbW1vbgorICogICByZXBsaWVzIGFyZSBmZiAwYiA0NSBmZiAxYiAwOCBhbmQgZmYgMGIgNTAgZmYgMWIgNDIKKyAqIC0gR0VUX0NBUlJJRVJfRlJFUSBnZXRzIHRoZSBjYXJyaWVyIG1vZGUgYW5kIGZyZXF1ZW5jeSBvZiB0aGUKKyAqICAgZGV2aWNlLCB3aXRoIHJlcGxpZXMgaW4gdGhlIGZvcm0gb2YgOWYgMDYgTU0gRkYsIHdoZXJlIE1NIGlzIDAtMywKKyAqICAgbWVhbmluZyBjbGsgb2YgMTAwMDAwMDAsIDI1MDAwMDAsIDYyNTAwMCBvciAxNTYyNTAsIGFuZCBGRiBpcworICogICAoKGNsayAvIGZyZXF1ZW5jeSkgLSAxKQorICogLSBHRVRfUlhfVElNRU9VVCBmZXRjaGVzIHRoZSByZWNlaXZlciB0aW1lb3V0IGluIHVuaXRzIG9mIDUwdXMsCisgKiAgIHJlc3BvbnNlIGluIHRoZSBmb3JtIG9mIDlmIDBjIG1zYiBsc2IKKyAqIC0gR0VUX1RYX0JJVE1BU0sgZmV0Y2hlcyB0aGUgdHJhbnNtaXR0ZXIgYml0bWFzaywgcmVwbGllcyBpbgorICogICB0aGUgZm9ybSBvZiA5ZiAwOCBibSwgd2hlcmUgYm0gaXMgdGhlIGJpdG1hc2sKKyAqIC0gR0VUX1JYX1NFTlNPUiBmZXRjaGVzIHRoZSBSWCBzZW5zb3Igc2V0dGluZyAtLSBsb25nLXJhbmdlCisgKiAgIGdlbmVyYWwgdXNlIG9uZSBvciBzaG9ydC1yYW5nZSBsZWFybmluZyBvbmUsIGluIHRoZSBmb3JtIG9mCisgKiAgIDlmIDE0IHNzLCB3aGVyZSBzcyBpcyBlaXRoZXIgMDEgZm9yIGxvbmctcmFuZ2Ugb3IgMDIgZm9yIHNob3J0CisgKiAtIFNFVF9DQVJSSUVSX0ZSRVEgc2V0cyBhIG5ldyBjYXJyaWVyIG1vZGUgYW5kIGZyZXF1ZW5jeQorICogLSBTRVRfVFhfQklUTUFTSyBzZXRzIHRoZSB0cmFuc21pdHRlciBiaXRtYXNrCisgKiAtIFNFVF9SWF9USU1FT1VUIHNldHMgdGhlIHJlY2VpdmVyIHRpbWVvdXQKKyAqIC0gU0VUX1JYX1NFTlNPUiBzZXRzIHdoaWNoIHJlY2VpdmVyIHNlbnNvciB0byB1c2UKKyAqLworc3RhdGljIGNoYXIgREVWSUNFX1JFU0VUW10JPSB7TUNFX0NPTU1BTkRfTlVMTCwgTUNFX0hXX0NNRF9IRUFERVIsCisJCQkJICAgTUNFX0NNRF9ERVZJQ0VfUkVTRVR9Oworc3RhdGljIGNoYXIgR0VUX1JFVklTSU9OW10JPSB7TUNFX0hXX0NNRF9IRUFERVIsIE1DRV9DTURfR19SRVZJU0lPTn07CitzdGF0aWMgY2hhciBHRVRfVU5LTk9XTltdCT0ge01DRV9IV19DTURfSEVBREVSLCBNQ0VfQ01EX1VOS05PV043fTsKK3N0YXRpYyBjaGFyIEdFVF9VTktOT1dOMltdCT0ge01DRV9DT01NQU5EX0hFQURFUiwgTUNFX0NNRF9VTktOT1dOMn07CitzdGF0aWMgY2hhciBHRVRfQ0FSUklFUl9GUkVRW10JPSB7TUNFX0NPTU1BTkRfSEVBREVSLCBNQ0VfQ01EX0dfQ0FSUklFUn07CitzdGF0aWMgY2hhciBHRVRfUlhfVElNRU9VVFtdCT0ge01DRV9DT01NQU5EX0hFQURFUiwgTUNFX0NNRF9HX1RJTUVPVVR9Oworc3RhdGljIGNoYXIgR0VUX1RYX0JJVE1BU0tbXQk9IHtNQ0VfQ09NTUFORF9IRUFERVIsIE1DRV9DTURfR19UWE1BU0t9Oworc3RhdGljIGNoYXIgR0VUX1JYX1NFTlNPUltdCT0ge01DRV9DT01NQU5EX0hFQURFUiwgTUNFX0NNRF9HX1JYU0VOU09SfTsKKy8qIHN1YiBpbiBkZXNpcmVkIHZhbHVlcyBpbiBsb3dlciBieXRlIG9yIGJ5dGVzIGZvciBmdWxsIGNvbW1hbmQgKi8KKy8qIEZJWE1FOiBtYWtlIHVzZSBvZiB0aGVzZSBmb3IgdHJhbnNtaXQuCitzdGF0aWMgY2hhciBTRVRfQ0FSUklFUl9GUkVRW10JPSB7TUNFX0NPTU1BTkRfSEVBREVSLAorCQkJCSAgIE1DRV9DTURfU19DQVJSSUVSLCAweDAwLCAweDAwfTsKK3N0YXRpYyBjaGFyIFNFVF9UWF9CSVRNQVNLW10JPSB7TUNFX0NPTU1BTkRfSEVBREVSLCBNQ0VfQ01EX1NfVFhNQVNLLCAweDAwfTsKK3N0YXRpYyBjaGFyIFNFVF9SWF9USU1FT1VUW10JPSB7TUNFX0NPTU1BTkRfSEVBREVSLAorCQkJCSAgIE1DRV9DTURfU19USU1FT1VULCAweDAwLCAweDAwfTsKK3N0YXRpYyBjaGFyIFNFVF9SWF9TRU5TT1JbXQk9IHtNQ0VfQ09NTUFORF9IRUFERVIsCisJCQkJICAgTUNFX0NNRF9TX1JYU0VOU09SLCAweDAwfTsKKyovCisKK3N0YXRpYyBpbnQgbWNldXNiX2NtZHNpemUodTggY21kLCB1OCBzdWJjbWQpCit7CisJaW50IGRhdGFzaXplID0gMDsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBNQ0VfQ09NTUFORF9OVUxMOgorCQlpZiAoc3ViY21kID09IE1DRV9IV19DTURfSEVBREVSKQorCQkJZGF0YXNpemUgPSAxOworCQlicmVhazsKKwljYXNlIE1DRV9IV19DTURfSEVBREVSOgorCQlzd2l0Y2ggKHN1YmNtZCkgeworCQljYXNlIE1DRV9DTURfR19SRVZJU0lPTjoKKwkJCWRhdGFzaXplID0gMjsKKwkJCWJyZWFrOworCQl9CisJY2FzZSBNQ0VfQ09NTUFORF9IRUFERVI6CisJCXN3aXRjaCAoc3ViY21kKSB7CisJCWNhc2UgTUNFX0NNRF9VTktOT1dOOgorCQljYXNlIE1DRV9DTURfU19DQVJSSUVSOgorCQljYXNlIE1DRV9DTURfU19USU1FT1VUOgorCQljYXNlIE1DRV9SU1BfUFVMU0VfQ09VTlQ6CisJCQlkYXRhc2l6ZSA9IDI7CisJCQlicmVhazsKKwkJY2FzZSBNQ0VfQ01EX1NJR19FTkQ6CisJCWNhc2UgTUNFX0NNRF9TX1RYTUFTSzoKKwkJY2FzZSBNQ0VfQ01EX1NfUlhTRU5TT1I6CisJCQlkYXRhc2l6ZSA9IDE7CisJCQlicmVhazsKKwkJfQorCX0KKwlyZXR1cm4gZGF0YXNpemU7Cit9CisKK3N0YXRpYyB2b2lkIG1jZXVzYl9kZXZfcHJpbnRkYXRhKHN0cnVjdCBtY2V1c2JfZGV2ICppciwgY2hhciAqYnVmLAorCQkJCSBpbnQgb2Zmc2V0LCBpbnQgbGVuLCBib29sIG91dCkKK3sKKwljaGFyIGNvZGVzW1VTQl9CVUZMRU4gKiAzICsgMV07CisJY2hhciBpbm91dFs5XTsKKwl1OCBjbWQsIHN1YmNtZCwgZGF0YTEsIGRhdGEyOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGlyLT5kZXY7CisJaW50IGksIHN0YXJ0LCBza2lwID0gMDsKKworCWlmICghZGVidWcpCisJCXJldHVybjsKKworCS8qIHNraXAgbWVhbmluZ2xlc3MgMHhiMSAweDYwIGhlYWRlciBieXRlcyBvbiBvcmlnIHJlY2VpdmVyICovCisJaWYgKGlyLT5mbGFncy5taWNyb3NvZnRfZ2VuMSAmJiAhb3V0ICYmICFvZmZzZXQpCisJCXNraXAgPSAyOworCisJaWYgKGxlbiA8PSBza2lwKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuICYmIGkgPCBVU0JfQlVGTEVOOyBpKyspCisJCXNucHJpbnRmKGNvZGVzICsgaSAqIDMsIDQsICIlMDJ4ICIsIGJ1ZltpICsgb2Zmc2V0XSAmIDB4ZmYpOworCisJZGV2X2luZm8oZGV2LCAiJXN4IGRhdGE6ICVzKGxlbmd0aD0lZClcbiIsCisJCSAob3V0ID8gInQiIDogInIiKSwgY29kZXMsIGxlbik7CisKKwlpZiAob3V0KQorCQlzdHJjcHkoaW5vdXQsICJSZXF1ZXN0XDAiKTsKKwllbHNlCisJCXN0cmNweShpbm91dCwgIkdvdFwwIik7CisKKwlzdGFydCAgPSBvZmZzZXQgKyBza2lwOworCWNtZCAgICA9IGJ1ZltzdGFydF0gJiAweGZmOworCXN1YmNtZCA9IGJ1ZltzdGFydCArIDFdICYgMHhmZjsKKwlkYXRhMSAgPSBidWZbc3RhcnQgKyAyXSAmIDB4ZmY7CisJZGF0YTIgID0gYnVmW3N0YXJ0ICsgM10gJiAweGZmOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIE1DRV9DT01NQU5EX05VTEw6CisJCWlmICgoc3ViY21kID09IE1DRV9IV19DTURfSEVBREVSKSAmJgorCQkgICAgKGRhdGExID09IE1DRV9DTURfREVWSUNFX1JFU0VUKSkKKwkJCWRldl9pbmZvKGRldiwgIkRldmljZSByZXNldCByZXF1ZXN0ZWRcbiIpOworCQllbHNlCisJCQlkZXZfaW5mbyhkZXYsICJVbmtub3duIGNvbW1hbmQgMHglMDJ4IDB4JTAyeFxuIiwKKwkJCQkgY21kLCBzdWJjbWQpOworCQlicmVhazsKKwljYXNlIE1DRV9IV19DTURfSEVBREVSOgorCQlzd2l0Y2ggKHN1YmNtZCkgeworCQljYXNlIE1DRV9DTURfR19SRVZJU0lPTjoKKwkJCWlmIChsZW4gPT0gMikKKwkJCQlkZXZfaW5mbyhkZXYsICJHZXQgaHcvc3cgcmV2P1xuIik7CisJCQllbHNlCisJCQkJZGV2X2luZm8oZGV2LCAiaHcvc3cgcmV2IDB4JTAyeCAweCUwMnggIgorCQkJCQkgIjB4JTAyeCAweCUwMnhcbiIsIGRhdGExLCBkYXRhMiwKKwkJCQkJIGJ1ZltzdGFydCArIDRdLCBidWZbc3RhcnQgKyA1XSk7CisJCQlicmVhazsKKwkJY2FzZSBNQ0VfQ01EX0RFVklDRV9SRVNFVDoKKwkJCWRldl9pbmZvKGRldiwgIkRldmljZSByZXNldCByZXF1ZXN0ZWRcbiIpOworCQkJYnJlYWs7CisJCWNhc2UgTUNFX1JTUF9DTURfSU5WQUxJRDoKKwkJCWRldl9pbmZvKGRldiwgIlByZXZpb3VzIGNvbW1hbmQgbm90IHN1cHBvcnRlZFxuIik7CisJCQlicmVhazsKKwkJY2FzZSBNQ0VfQ01EX1VOS05PV043OgorCQljYXNlIE1DRV9DTURfVU5LTk9XTjk6CisJCWRlZmF1bHQ6CisJCQlkZXZfaW5mbyhkZXYsICJVbmtub3duIGNvbW1hbmQgMHglMDJ4IDB4JTAyeFxuIiwKKwkJCQkgY21kLCBzdWJjbWQpOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBNQ0VfQ09NTUFORF9IRUFERVI6CisJCXN3aXRjaCAoc3ViY21kKSB7CisJCWNhc2UgTUNFX0NNRF9TSUdfRU5EOgorCQkJZGV2X2luZm8oZGV2LCAiRW5kIG9mIHNpZ25hbFxuIik7CisJCQlicmVhazsKKwkJY2FzZSBNQ0VfQ01EX1BJTkc6CisJCQlkZXZfaW5mbyhkZXYsICJQaW5nXG4iKTsKKwkJCWJyZWFrOworCQljYXNlIE1DRV9DTURfVU5LTk9XTjoKKwkJCWRldl9pbmZvKGRldiwgIlJlc3AgdG8gOWYgMDUgb2YgMHglMDJ4IDB4JTAyeFxuIiwKKwkJCQkgZGF0YTEsIGRhdGEyKTsKKwkJCWJyZWFrOworCQljYXNlIE1DRV9DTURfU19DQVJSSUVSOgorCQkJZGV2X2luZm8oZGV2LCAiJXMgY2FycmllciBtb2RlIGFuZCBmcmVxIG9mICIKKwkJCQkgIjB4JTAyeCAweCUwMnhcbiIsIGlub3V0LCBkYXRhMSwgZGF0YTIpOworCQkJYnJlYWs7CisJCWNhc2UgTUNFX0NNRF9HX0NBUlJJRVI6CisJCQlkZXZfaW5mbyhkZXYsICJHZXQgY2FycmllciBtb2RlIGFuZCBmcmVxXG4iKTsKKwkJCWJyZWFrOworCQljYXNlIE1DRV9DTURfU19UWE1BU0s6CisJCQlkZXZfaW5mbyhkZXYsICIlcyB0cmFuc21pdCBibGFzdGVyIG1hc2sgb2YgMHglMDJ4XG4iLAorCQkJCSBpbm91dCwgZGF0YTEpOworCQkJYnJlYWs7CisJCWNhc2UgTUNFX0NNRF9TX1RJTUVPVVQ6CisJCQkvKiB2YWx1ZSBpcyBpbiB1bml0cyBvZiA1MHVzLCBzbyB4KjUwLzEwMCBvciB4LzIgbXMgKi8KKwkJCWRldl9pbmZvKGRldiwgIiVzIHJlY2VpdmUgdGltZW91dCBvZiAlZCBtc1xuIiwKKwkJCQkgaW5vdXQsICgoZGF0YTEgPDwgOCkgfCBkYXRhMikgLyAyKTsKKwkJCWJyZWFrOworCQljYXNlIE1DRV9DTURfR19USU1FT1VUOgorCQkJZGV2X2luZm8oZGV2LCAiR2V0IHJlY2VpdmUgdGltZW91dFxuIik7CisJCQlicmVhazsKKwkJY2FzZSBNQ0VfQ01EX0dfVFhNQVNLOgorCQkJZGV2X2luZm8oZGV2LCAiR2V0IHRyYW5zbWl0IGJsYXN0ZXIgbWFza1xuIik7CisJCQlicmVhazsKKwkJY2FzZSBNQ0VfQ01EX1NfUlhTRU5TT1I6CisJCQlkZXZfaW5mbyhkZXYsICIlcyAlcy1yYW5nZSByZWNlaXZlIHNlbnNvciBpbiB1c2VcbiIsCisJCQkJIGlub3V0LCBkYXRhMSA9PSAweDAyID8gInNob3J0IiA6ICJsb25nIik7CisJCQlicmVhazsKKwkJY2FzZSBNQ0VfQ01EX0dfUlhTRU5TT1I6CisJCS8qIGFrYSBNQ0VfUlNQX1BVTFNFX0NPVU5UICovCisJCQlpZiAob3V0KQorCQkJCWRldl9pbmZvKGRldiwgIkdldCByZWNlaXZlIHNlbnNvclxuIik7CisJCQllbHNlIGlmIChpci0+bGVhcm5pbmdfZW5hYmxlZCkKKwkJCQlkZXZfaW5mbyhkZXYsICJSWCBwdWxzZSBjb3VudDogJWRcbiIsCisJCQkJCSAoKGRhdGExIDw8IDgpIHwgZGF0YTIpKTsKKwkJCWJyZWFrOworCQljYXNlIE1DRV9SU1BfQ01EX0lOVkFMSUQ6CisJCQlkZXZfaW5mbyhkZXYsICJFcnJvciEgSGFyZHdhcmUgaXMgbGlrZWx5IHdlZGdlZC4uLlxuIik7CisJCQlicmVhazsKKwkJY2FzZSBNQ0VfQ01EX1VOS05PV04yOgorCQljYXNlIE1DRV9DTURfVU5LTk9XTjM6CisJCWNhc2UgTUNFX0NNRF9VTktOT1dONToKKwkJZGVmYXVsdDoKKwkJCWRldl9pbmZvKGRldiwgIlVua25vd24gY29tbWFuZCAweCUwMnggMHglMDJ4XG4iLAorCQkJCSBjbWQsIHN1YmNtZCk7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlpZiAoY21kID09IE1DRV9JUkRBVEFfVFJBSUxFUikKKwkJZGV2X2luZm8oZGV2LCAiRW5kIG9mIHJhdyBJUiBkYXRhXG4iKTsKKwllbHNlIGlmICgoY21kICE9IE1DRV9DT01NQU5EX0hFQURFUikgJiYKKwkJICgoY21kICYgTUNFX0NPTU1BTkRfTUFTSykgPT0gTUNFX0NPTU1BTkRfSVJEQVRBKSkKKwkJZGV2X2luZm8oZGV2LCAiUmF3IElSIGRhdGEsICVkIHB1bHNlL3NwYWNlIHNhbXBsZXNcbiIsIGlyLT5yZW0pOworfQorCitzdGF0aWMgdm9pZCBtY2VfYXN5bmNfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgbWNldXNiX2RldiAqaXI7CisJaW50IGxlbjsKKworCWlmICghdXJiKQorCQlyZXR1cm47CisKKwlpciA9IHVyYi0+Y29udGV4dDsKKwlpZiAoaXIpIHsKKwkJbGVuID0gdXJiLT5hY3R1YWxfbGVuZ3RoOworCisJCWRldl9kYmcoaXItPmRldiwgImNhbGxiYWNrIGNhbGxlZCAoc3RhdHVzPSVkIGxlbj0lZClcbiIsCisJCQl1cmItPnN0YXR1cywgbGVuKTsKKworCQltY2V1c2JfZGV2X3ByaW50ZGF0YShpciwgdXJiLT50cmFuc2Zlcl9idWZmZXIsIDAsIGxlbiwgdHJ1ZSk7CisJfQorCit9CisKKy8qIHJlcXVlc3QgaW5jb21pbmcgb3Igc2VuZCBvdXRnb2luZyB1c2IgcGFja2V0IC0gdXNlZCB0byBpbml0aWFsaXplIHJlbW90ZSAqLworc3RhdGljIHZvaWQgbWNlX3JlcXVlc3RfcGFja2V0KHN0cnVjdCBtY2V1c2JfZGV2ICppciwKKwkJCSAgICAgICBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwLAorCQkJICAgICAgIHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBzaXplLCBpbnQgdXJiX3R5cGUpCit7CisJaW50IHJlczsKKwlzdHJ1Y3QgdXJiICphc3luY191cmI7CisJc3RydWN0IGRldmljZSAqZGV2ID0gaXItPmRldjsKKwl1bnNpZ25lZCBjaGFyICphc3luY19idWY7CisKKwlpZiAodXJiX3R5cGUgPT0gTUNFVVNCX1RYKSB7CisJCWFzeW5jX3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJCWlmICh1bmxpa2VseSghYXN5bmNfdXJiKSkgeworCQkJZGV2X2VycihkZXYsICJFcnJvciwgY291bGRuJ3QgYWxsb2NhdGUgdXJiIVxuIik7CisJCQlyZXR1cm47CisJCX0KKworCQlhc3luY19idWYgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCQlpZiAoIWFzeW5jX2J1ZikgeworCQkJZGV2X2VycihkZXYsICJFcnJvciwgY291bGRuJ3QgYWxsb2NhdGUgYnVmIVxuIik7CisJCQl1c2JfZnJlZV91cmIoYXN5bmNfdXJiKTsKKwkJCXJldHVybjsKKwkJfQorCisJCS8qIG91dGJvdW5kIGRhdGEgKi8KKwkJdXNiX2ZpbGxfaW50X3VyYihhc3luY191cmIsIGlyLT51c2JkZXYsCisJCQl1c2Jfc25kaW50cGlwZShpci0+dXNiZGV2LCBlcC0+YkVuZHBvaW50QWRkcmVzcyksCisJCQlhc3luY19idWYsIHNpemUsICh1c2JfY29tcGxldGVfdCltY2VfYXN5bmNfY2FsbGJhY2ssCisJCQlpciwgZXAtPmJJbnRlcnZhbCk7CisJCW1lbWNweShhc3luY19idWYsIGRhdGEsIHNpemUpOworCisJfSBlbHNlIGlmICh1cmJfdHlwZSA9PSBNQ0VVU0JfUlgpIHsKKwkJLyogc3RhbmRhcmQgcmVxdWVzdCAqLworCQlhc3luY191cmIgPSBpci0+dXJiX2luOworCQlpci0+c2VuZF9mbGFncyA9IFJFQ1ZfRkxBR19JTl9QUk9HUkVTUzsKKworCX0gZWxzZSB7CisJCWRldl9lcnIoZGV2LCAiRXJyb3IhIFVua25vd24gdXJiIHR5cGUgJWRcbiIsIHVyYl90eXBlKTsKKwkJcmV0dXJuOworCX0KKworCWRldl9kYmcoZGV2LCAicmVjZWl2ZSByZXF1ZXN0IGNhbGxlZCAoc2l6ZT0lI3gpXG4iLCBzaXplKTsKKworCWFzeW5jX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IHNpemU7CisJYXN5bmNfdXJiLT5kZXYgPSBpci0+dXNiZGV2OworCisJcmVzID0gdXNiX3N1Ym1pdF91cmIoYXN5bmNfdXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmVzKSB7CisJCWRldl9kYmcoZGV2LCAicmVjZWl2ZSByZXF1ZXN0IEZBSUxFRCEgKHJlcz0lZClcbiIsIHJlcyk7CisJCXJldHVybjsKKwl9CisJZGV2X2RiZyhkZXYsICJyZWNlaXZlIHJlcXVlc3QgY29tcGxldGUgKHJlcz0lZClcbiIsIHJlcyk7Cit9CisKK3N0YXRpYyB2b2lkIG1jZV9hc3luY19vdXQoc3RydWN0IG1jZXVzYl9kZXYgKmlyLCB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgc2l6ZSkKK3sKKwltY2VfcmVxdWVzdF9wYWNrZXQoaXIsIGlyLT51c2JfZXBfb3V0LCBkYXRhLCBzaXplLCBNQ0VVU0JfVFgpOworfQorCitzdGF0aWMgdm9pZCBtY2Vfc3luY19pbihzdHJ1Y3QgbWNldXNiX2RldiAqaXIsIHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBzaXplKQoreworCW1jZV9yZXF1ZXN0X3BhY2tldChpciwgaXItPnVzYl9lcF9pbiwgZGF0YSwgc2l6ZSwgTUNFVVNCX1JYKTsKK30KKworLyogU2VuZCBkYXRhIG91dCB0aGUgSVIgYmxhc3RlciBwb3J0KHMpICovCitzdGF0aWMgaW50IG1jZXVzYl90eF9pcihzdHJ1Y3QgcmNfZGV2ICpkZXYsIGludCAqdHhidWYsIHUzMiBuKQoreworCXN0cnVjdCBtY2V1c2JfZGV2ICppciA9IGRldi0+cHJpdjsKKwlpbnQgaSwgcmV0ID0gMDsKKwlpbnQgY291bnQsIGNtZGNvdW50ID0gMDsKKwl1bnNpZ25lZCBjaGFyICpjbWRidWY7IC8qIE1DRSBjb21tYW5kIGJ1ZmZlciAqLworCWxvbmcgc2lnbmFsX2R1cmF0aW9uID0gMDsgLyogU2luZ25hbCBsZW5ndGggaW4gdXMgKi8KKwlzdHJ1Y3QgdGltZXZhbCBzdGFydF90aW1lLCBlbmRfdGltZTsKKworCWRvX2dldHRpbWVvZmRheSgmc3RhcnRfdGltZSk7CisKKwljb3VudCA9IG4gLyBzaXplb2YoaW50KTsKKworCWNtZGJ1ZiA9IGt6YWxsb2Moc2l6ZW9mKGludCkgKiBNQ0VfQ01EQlVGX1NJWkUsIEdGUF9LRVJORUwpOworCWlmICghY21kYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIE1DRSB0eCBpbml0IGhlYWRlciAqLworCWNtZGJ1ZltjbWRjb3VudCsrXSA9IE1DRV9DT01NQU5EX0hFQURFUjsKKwljbWRidWZbY21kY291bnQrK10gPSBNQ0VfQ01EX1NfVFhNQVNLOworCWNtZGJ1ZltjbWRjb3VudCsrXSA9IGlyLT50eF9tYXNrOworCisJLyogR2VuZXJhdGUgbWNlIHBhY2tldCBkYXRhICovCisJZm9yIChpID0gMDsgKGkgPCBjb3VudCkgJiYgKGNtZGNvdW50IDwgTUNFX0NNREJVRl9TSVpFKTsgaSsrKSB7CisJCXNpZ25hbF9kdXJhdGlvbiArPSB0eGJ1ZltpXTsKKwkJdHhidWZbaV0gPSB0eGJ1ZltpXSAvIE1DRV9USU1FX1VOSVQ7CisKKwkJZG8geyAvKiBsb29wIHRvIHN1cHBvcnQgbG9uZyBwdWxzZXMvc3BhY2VzID4gMTI3KjUwdXM9Ni4zNW1zICovCisKKwkJCS8qIEluc2VydCBtY2UgcGFja2V0IGhlYWRlciBldmVyeSA0dGggZW50cnkgKi8KKwkJCWlmICgoY21kY291bnQgPCBNQ0VfQ01EQlVGX1NJWkUpICYmCisJCQkgICAgKGNtZGNvdW50IC0gTUNFX1RYX0hFQURFUl9MRU5HVEgpICUKKwkJCSAgICAgTUNFX0NPREVfTEVOR1RIID09IDApCisJCQkJY21kYnVmW2NtZGNvdW50KytdID0gTUNFX0lSREFUQV9IRUFERVI7CisKKwkJCS8qIEluc2VydCBtY2UgcGFja2V0IGRhdGEgKi8KKwkJCWlmIChjbWRjb3VudCA8IE1DRV9DTURCVUZfU0laRSkKKwkJCQljbWRidWZbY21kY291bnQrK10gPQorCQkJCQkodHhidWZbaV0gPCBNQ0VfUFVMU0VfQklUID8KKwkJCQkJIHR4YnVmW2ldIDogTUNFX01BWF9QVUxTRV9MRU5HVEgpIHwKKwkJCQkJIChpICYgMSA/IDB4MDAgOiBNQ0VfUFVMU0VfQklUKTsKKwkJCWVsc2UgeworCQkJCXJldCA9IC1FSU5WQUw7CisJCQkJZ290byBvdXQ7CisJCQl9CisKKwkJfSB3aGlsZSAoKHR4YnVmW2ldID4gTUNFX01BWF9QVUxTRV9MRU5HVEgpICYmCisJCQkgKHR4YnVmW2ldIC09IE1DRV9NQVhfUFVMU0VfTEVOR1RIKSk7CisJfQorCisJLyogRml4IHBhY2tldCBsZW5ndGggaW4gbGFzdCBoZWFkZXIgKi8KKwljbWRidWZbY21kY291bnQgLSAoY21kY291bnQgLSBNQ0VfVFhfSEVBREVSX0xFTkdUSCkgJSBNQ0VfQ09ERV9MRU5HVEhdID0KKwkJTUNFX0NPTU1BTkRfSVJEQVRBICsgKGNtZGNvdW50IC0gTUNFX1RYX0hFQURFUl9MRU5HVEgpICUKKwkJTUNFX0NPREVfTEVOR1RIIC0gMTsKKworCS8qIENoZWNrIGlmIHdlIGhhdmUgcm9vbSBmb3IgdGhlIGVtcHR5IHBhY2tldCBhdCB0aGUgZW5kICovCisJaWYgKGNtZGNvdW50ID49IE1DRV9DTURCVUZfU0laRSkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBBbGwgbWNlIGNvbW1hbmRzIGVuZCB3aXRoIGFuIGVtcHR5IHBhY2tldCAoMHg4MCkgKi8KKwljbWRidWZbY21kY291bnQrK10gPSBNQ0VfSVJEQVRBX1RSQUlMRVI7CisKKwkvKiBUcmFuc21pdCB0aGUgY29tbWFuZCB0byB0aGUgbWNlIGRldmljZSAqLworCW1jZV9hc3luY19vdXQoaXIsIGNtZGJ1ZiwgY21kY291bnQpOworCisJLyoKKwkgKiBUaGUgbGlyY2QgZ2FwIGNhbGN1bGF0aW9uIGV4cGVjdHMgdGhlIHdyaXRlIGZ1bmN0aW9uIHRvCisJICogd2FpdCB0aGUgdGltZSBpdCB0YWtlcyBmb3IgdGhlIGlyY29tbWFuZCB0byBiZSBzZW50IGJlZm9yZQorCSAqIGl0IHJldHVybnMuCisJICovCisJZG9fZ2V0dGltZW9mZGF5KCZlbmRfdGltZSk7CisJc2lnbmFsX2R1cmF0aW9uIC09IChlbmRfdGltZS50dl91c2VjIC0gc3RhcnRfdGltZS50dl91c2VjKSArCisJCQkgICAoZW5kX3RpbWUudHZfc2VjIC0gc3RhcnRfdGltZS50dl9zZWMpICogMTAwMDAwMDsKKworCS8qIGRlbGF5IHdpdGggdGhlIGNsb3Nlc3QgbnVtYmVyIG9mIHRpY2tzICovCisJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwlzY2hlZHVsZV90aW1lb3V0KHVzZWNzX3RvX2ppZmZpZXMoc2lnbmFsX2R1cmF0aW9uKSk7CisKK291dDoKKwlrZnJlZShjbWRidWYpOworCXJldHVybiByZXQgPyByZXQgOiBuOworfQorCisvKiBTZXRzIGFjdGl2ZSBJUiBvdXRwdXRzIC0tIG1jZSBkZXZpY2VzIHR5cGljYWxseSBoYXZlIHR3byAqLworc3RhdGljIGludCBtY2V1c2Jfc2V0X3R4X21hc2soc3RydWN0IHJjX2RldiAqZGV2LCB1MzIgbWFzaykKK3sKKwlzdHJ1Y3QgbWNldXNiX2RldiAqaXIgPSBkZXYtPnByaXY7CisKKwlpZiAoaXItPmZsYWdzLnR4X21hc2tfbm9ybWFsKQorCQlpci0+dHhfbWFzayA9IG1hc2s7CisJZWxzZQorCQlpci0+dHhfbWFzayA9IChtYXNrICE9IE1DRV9ERUZBVUxUX1RYX01BU0sgPworCQkJCW1hc2sgXiBNQ0VfREVGQVVMVF9UWF9NQVNLIDogbWFzaykgPDwgMTsKKworCXJldHVybiAwOworfQorCisvKiBTZXRzIHRoZSBzZW5kIGNhcnJpZXIgZnJlcXVlbmN5IGFuZCBtb2RlICovCitzdGF0aWMgaW50IG1jZXVzYl9zZXRfdHhfY2FycmllcihzdHJ1Y3QgcmNfZGV2ICpkZXYsIHUzMiBjYXJyaWVyKQoreworCXN0cnVjdCBtY2V1c2JfZGV2ICppciA9IGRldi0+cHJpdjsKKwlpbnQgY2xrID0gMTAwMDAwMDA7CisJaW50IHByZXNjYWxlciA9IDAsIGRpdmlzb3IgPSAwOworCXVuc2lnbmVkIGNoYXIgY21kYnVmWzRdID0geyBNQ0VfQ09NTUFORF9IRUFERVIsCisJCQkJICAgIE1DRV9DTURfU19DQVJSSUVSLCAweDAwLCAweDAwIH07CisKKwkvKiBDYXJyaWVyIGhhcyBjaGFuZ2VkICovCisJaWYgKGlyLT5jYXJyaWVyICE9IGNhcnJpZXIpIHsKKworCQlpZiAoY2FycmllciA9PSAwKSB7CisJCQlpci0+Y2FycmllciA9IGNhcnJpZXI7CisJCQljbWRidWZbMl0gPSBNQ0VfQ01EX1NJR19FTkQ7CisJCQljbWRidWZbM10gPSBNQ0VfSVJEQVRBX1RSQUlMRVI7CisJCQlkZXZfZGJnKGlyLT5kZXYsICIlczogZGlzYWJsaW5nIGNhcnJpZXIgIgorCQkJCSJtb2R1bGF0aW9uXG4iLCBfX2Z1bmNfXyk7CisJCQltY2VfYXN5bmNfb3V0KGlyLCBjbWRidWYsIHNpemVvZihjbWRidWYpKTsKKwkJCXJldHVybiBjYXJyaWVyOworCQl9CisKKwkJZm9yIChwcmVzY2FsZXIgPSAwOyBwcmVzY2FsZXIgPCA0OyArK3ByZXNjYWxlcikgeworCQkJZGl2aXNvciA9IChjbGsgPj4gKDIgKiBwcmVzY2FsZXIpKSAvIGNhcnJpZXI7CisJCQlpZiAoZGl2aXNvciA8PSAweGZmKSB7CisJCQkJaXItPmNhcnJpZXIgPSBjYXJyaWVyOworCQkJCWNtZGJ1ZlsyXSA9IHByZXNjYWxlcjsKKwkJCQljbWRidWZbM10gPSBkaXZpc29yOworCQkJCWRldl9kYmcoaXItPmRldiwgIiVzOiByZXF1ZXN0aW5nICV1IEhaICIKKwkJCQkJImNhcnJpZXJcbiIsIF9fZnVuY19fLCBjYXJyaWVyKTsKKworCQkJCS8qIFRyYW5zbWl0IG5ldyBjYXJyaWVyIHRvIG1jZSBkZXZpY2UgKi8KKwkJCQltY2VfYXN5bmNfb3V0KGlyLCBjbWRidWYsIHNpemVvZihjbWRidWYpKTsKKwkJCQlyZXR1cm4gY2FycmllcjsKKwkJCX0KKwkJfQorCisJCXJldHVybiAtRUlOVkFMOworCisJfQorCisJcmV0dXJuIGNhcnJpZXI7Cit9CisKKy8qCisgKiBXZSBkb24ndCBkbyBhbnl0aGluZyBidXQgcHJpbnQgZGVidWcgc3BldyBmb3IgbWFueSBvZiB0aGUgY29tbWFuZCBiaXRzCisgKiB3ZSByZWNlaXZlIGZyb20gdGhlIGhhcmR3YXJlLCBidXQgc29tZSBvZiB0aGVtIGFyZSB1c2VmdWwgaW5mb3JtYXRpb24KKyAqIHdlIHdhbnQgdG8gc3RvcmUgc28gdGhhdCB3ZSBjYW4gdXNlIHRoZW0uCisgKi8KK3N0YXRpYyB2b2lkIG1jZXVzYl9oYW5kbGVfY29tbWFuZChzdHJ1Y3QgbWNldXNiX2RldiAqaXIsIGludCBpbmRleCkKK3sKKwl1OCBoaSA9IGlyLT5idWZfaW5baW5kZXggKyAxXSAmIDB4ZmY7CisJdTggbG8gPSBpci0+YnVmX2luW2luZGV4ICsgMl0gJiAweGZmOworCisJc3dpdGNoIChpci0+YnVmX2luW2luZGV4XSkgeworCS8qIDItYnl0ZSByZXR1cm4gdmFsdWUgY29tbWFuZHMgKi8KKwljYXNlIE1DRV9DTURfU19USU1FT1VUOgorCQlpci0+cmMtPnRpbWVvdXQgPSBNU19UT19OUygoaGkgPDwgOCB8IGxvKSAvIDIpOworCQlicmVhazsKKworCS8qIDEtYnl0ZSByZXR1cm4gdmFsdWUgY29tbWFuZHMgKi8KKwljYXNlIE1DRV9DTURfU19UWE1BU0s6CisJCWlyLT50eF9tYXNrID0gaGk7CisJCWJyZWFrOworCWNhc2UgTUNFX0NNRF9TX1JYU0VOU09SOgorCQlpci0+bGVhcm5pbmdfZW5hYmxlZCA9IChoaSA9PSAweDAyKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBtY2V1c2JfcHJvY2Vzc19pcl9kYXRhKHN0cnVjdCBtY2V1c2JfZGV2ICppciwgaW50IGJ1Zl9sZW4pCit7CisJREVGSU5FX0lSX1JBV19FVkVOVChyYXdpcik7CisJaW50IGkgPSAwOworCisJLyogc2tpcCBtZWFuaW5nbGVzcyAweGIxIDB4NjAgaGVhZGVyIGJ5dGVzIG9uIG9yaWcgcmVjZWl2ZXIgKi8KKwlpZiAoaXItPmZsYWdzLm1pY3Jvc29mdF9nZW4xKQorCQlpID0gMjsKKworCS8qIGlmIHRoZXJlJ3Mgbm8gZGF0YSwganVzdCByZXR1cm4gbm93ICovCisJaWYgKGJ1Zl9sZW4gPD0gaSkKKwkJcmV0dXJuOworCisJZm9yICg7IGkgPCBidWZfbGVuOyBpKyspIHsKKwkJc3dpdGNoIChpci0+cGFyc2VyX3N0YXRlKSB7CisJCWNhc2UgU1VCQ01EOgorCQkJaXItPnJlbSA9IG1jZXVzYl9jbWRzaXplKGlyLT5jbWQsIGlyLT5idWZfaW5baV0pOworCQkJbWNldXNiX2Rldl9wcmludGRhdGEoaXIsIGlyLT5idWZfaW4sIGkgLSAxLAorCQkJCQkgICAgIGlyLT5yZW0gKyAyLCBmYWxzZSk7CisJCQltY2V1c2JfaGFuZGxlX2NvbW1hbmQoaXIsIGkpOworCQkJaXItPnBhcnNlcl9zdGF0ZSA9IENNRF9EQVRBOworCQkJYnJlYWs7CisJCWNhc2UgUEFSU0VfSVJEQVRBOgorCQkJaXItPnJlbS0tOworCQkJcmF3aXIucHVsc2UgPSAoKGlyLT5idWZfaW5baV0gJiBNQ0VfUFVMU0VfQklUKSAhPSAwKTsKKwkJCXJhd2lyLmR1cmF0aW9uID0gKGlyLT5idWZfaW5baV0gJiBNQ0VfUFVMU0VfTUFTSykKKwkJCQkJICogTVNfVE9fTlMoTUNFX1RJTUVfVU5JVCk7CisKKwkJCWRldl9kYmcoaXItPmRldiwgIlN0b3JpbmcgJXMgd2l0aCBkdXJhdGlvbiAlZFxuIiwKKwkJCQlyYXdpci5wdWxzZSA/ICJwdWxzZSIgOiAic3BhY2UiLAorCQkJCXJhd2lyLmR1cmF0aW9uKTsKKworCQkJaXJfcmF3X2V2ZW50X3N0b3JlX3dpdGhfZmlsdGVyKGlyLT5yYywgJnJhd2lyKTsKKwkJCWJyZWFrOworCQljYXNlIENNRF9EQVRBOgorCQkJaXItPnJlbS0tOworCQkJYnJlYWs7CisJCWNhc2UgQ01EX0hFQURFUjoKKwkJCS8qIGRlY29kZSBtY2UgcGFja2V0cyBvZiB0aGUgZm9ybSAoODQpLEFBLEJCLENDLEREICovCisJCQkvKiBJUiBkYXRhIHBhY2tldHMgY2FuIHNwYW4gVVNCIG1lc3NhZ2VzIC0gcmVtICovCisJCQlpci0+Y21kID0gaXItPmJ1Zl9pbltpXTsKKwkJCWlmICgoaXItPmNtZCA9PSBNQ0VfQ09NTUFORF9IRUFERVIpIHx8CisJCQkgICAgKChpci0+Y21kICYgTUNFX0NPTU1BTkRfTUFTSykgIT0KKwkJCSAgICAgTUNFX0NPTU1BTkRfSVJEQVRBKSkgeworCQkJCWlyLT5wYXJzZXJfc3RhdGUgPSBTVUJDTUQ7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpci0+cmVtID0gKGlyLT5jbWQgJiBNQ0VfUEFDS0VUX0xFTkdUSF9NQVNLKTsKKwkJCW1jZXVzYl9kZXZfcHJpbnRkYXRhKGlyLCBpci0+YnVmX2luLAorCQkJCQkgICAgIGksIGlyLT5yZW0gKyAxLCBmYWxzZSk7CisJCQlpZiAoaXItPnJlbSkKKwkJCQlpci0+cGFyc2VyX3N0YXRlID0gUEFSU0VfSVJEQVRBOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoaXItPnBhcnNlcl9zdGF0ZSAhPSBDTURfSEVBREVSICYmICFpci0+cmVtKQorCQkJaXItPnBhcnNlcl9zdGF0ZSA9IENNRF9IRUFERVI7CisJfQorCWRldl9kYmcoaXItPmRldiwgInByb2Nlc3NlZCBJUiBkYXRhLCBjYWxsaW5nIGlyX3Jhd19ldmVudF9oYW5kbGVcbiIpOworCWlyX3Jhd19ldmVudF9oYW5kbGUoaXItPnJjKTsKK30KKworc3RhdGljIHZvaWQgbWNldXNiX2Rldl9yZWN2KHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IG1jZXVzYl9kZXYgKmlyOworCWludCBidWZfbGVuOworCisJaWYgKCF1cmIpCisJCXJldHVybjsKKworCWlyID0gdXJiLT5jb250ZXh0OworCWlmICghaXIpIHsKKwkJdXNiX3VubGlua191cmIodXJiKTsKKwkJcmV0dXJuOworCX0KKworCWJ1Zl9sZW4gPSB1cmItPmFjdHVhbF9sZW5ndGg7CisKKwlpZiAoaXItPnNlbmRfZmxhZ3MgPT0gUkVDVl9GTEFHX0lOX1BST0dSRVNTKSB7CisJCWlyLT5zZW5kX2ZsYWdzID0gU0VORF9GTEFHX0NPTVBMRVRFOworCQlkZXZfZGJnKGlyLT5kZXYsICJzZXR1cCBhbnN3ZXIgcmVjZWl2ZWQgJWQgYnl0ZXNcbiIsCisJCQlidWZfbGVuKTsKKwl9CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJLyogc3VjY2VzcyAqLworCWNhc2UgMDoKKwkJbWNldXNiX3Byb2Nlc3NfaXJfZGF0YShpciwgYnVmX2xlbik7CisJCWJyZWFrOworCisJY2FzZSAtRUNPTk5SRVNFVDoKKwljYXNlIC1FTk9FTlQ6CisJY2FzZSAtRVNIVVRET1dOOgorCQl1c2JfdW5saW5rX3VyYih1cmIpOworCQlyZXR1cm47CisKKwljYXNlIC1FUElQRToKKwlkZWZhdWx0OgorCQlkZXZfZGJnKGlyLT5kZXYsICJFcnJvcjogdXJiIHN0YXR1cyA9ICVkXG4iLCB1cmItPnN0YXR1cyk7CisJCWJyZWFrOworCX0KKworCXVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7Cit9CisKK3N0YXRpYyB2b2lkIG1jZXVzYl9nZW4xX2luaXQoc3RydWN0IG1jZXVzYl9kZXYgKmlyKQoreworCWludCByZXQ7CisJaW50IG1heHAgPSBpci0+bGVuX2luOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGlyLT5kZXY7CisJY2hhciAqZGF0YTsKKworCWRhdGEgPSBremFsbG9jKFVTQl9DVFJMX01TR19TWiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkYXRhKSB7CisJCWRldl9lcnIoZGV2LCAiJXM6IG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCFcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogVGhpcyBpcyBhIHN0cmFuZ2Ugb25lLiBXaW5kb3dzIGlzc3VlcyBhIHNldCBhZGRyZXNzIHRvIHRoZSBkZXZpY2UKKwkgKiBvbiB0aGUgcmVjZWl2ZSBjb250cm9sIHBpcGUgYW5kIGV4cGVjdCBhIGNlcnRhaW4gdmFsdWUgcGFpciBiYWNrCisJICovCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGlyLT51c2JkZXYsIHVzYl9yY3ZjdHJscGlwZShpci0+dXNiZGV2LCAwKSwKKwkJCSAgICAgIFVTQl9SRVFfU0VUX0FERFJFU1MsIFVTQl9UWVBFX1ZFTkRPUiwgMCwgMCwKKwkJCSAgICAgIGRhdGEsIFVTQl9DVFJMX01TR19TWiwgSFogKiAzKTsKKwlkZXZfZGJnKGRldiwgIiVzIC0gcmV0ID0gJWRcbiIsIF9fZnVuY19fLCByZXQpOworCWRldl9kYmcoZGV2LCAiJXMgLSBkYXRhWzBdID0gJWQsIGRhdGFbMV0gPSAlZFxuIiwKKwkJX19mdW5jX18sIGRhdGFbMF0sIGRhdGFbMV0pOworCisJLyogc2V0IGZlYXR1cmU6IGJpdCByYXRlIDM4NDAwIGJwcyAqLworCXJldCA9IHVzYl9jb250cm9sX21zZyhpci0+dXNiZGV2LCB1c2Jfc25kY3RybHBpcGUoaXItPnVzYmRldiwgMCksCisJCQkgICAgICBVU0JfUkVRX1NFVF9GRUFUVVJFLCBVU0JfVFlQRV9WRU5ET1IsCisJCQkgICAgICAweGMwNGUsIDB4MDAwMCwgTlVMTCwgMCwgSFogKiAzKTsKKworCWRldl9kYmcoZGV2LCAiJXMgLSByZXQgPSAlZFxuIiwgX19mdW5jX18sIHJldCk7CisKKwkvKiBiUmVxdWVzdCA0OiBzZXQgY2hhciBsZW5ndGggdG8gOCBiaXRzICovCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGlyLT51c2JkZXYsIHVzYl9zbmRjdHJscGlwZShpci0+dXNiZGV2LCAwKSwKKwkJCSAgICAgIDQsIFVTQl9UWVBFX1ZFTkRPUiwKKwkJCSAgICAgIDB4MDgwOCwgMHgwMDAwLCBOVUxMLCAwLCBIWiAqIDMpOworCWRldl9kYmcoZGV2LCAiJXMgLSByZXRCID0gJWRcbiIsIF9fZnVuY19fLCByZXQpOworCisJLyogYlJlcXVlc3QgMjogc2V0IGhhbmRzaGFraW5nIHRvIHVzZSBEVFIvRFNSICovCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGlyLT51c2JkZXYsIHVzYl9zbmRjdHJscGlwZShpci0+dXNiZGV2LCAwKSwKKwkJCSAgICAgIDIsIFVTQl9UWVBFX1ZFTkRPUiwKKwkJCSAgICAgIDB4MDAwMCwgMHgwMTAwLCBOVUxMLCAwLCBIWiAqIDMpOworCWRldl9kYmcoZGV2LCAiJXMgLSByZXRDID0gJWRcbiIsIF9fZnVuY19fLCByZXQpOworCisJLyogZGV2aWNlIHJlc2V0ICovCisJbWNlX2FzeW5jX291dChpciwgREVWSUNFX1JFU0VULCBzaXplb2YoREVWSUNFX1JFU0VUKSk7CisJbWNlX3N5bmNfaW4oaXIsIE5VTEwsIG1heHApOworCisJLyogZ2V0IGh3L3N3IHJldmlzaW9uPyAqLworCW1jZV9hc3luY19vdXQoaXIsIEdFVF9SRVZJU0lPTiwgc2l6ZW9mKEdFVF9SRVZJU0lPTikpOworCW1jZV9zeW5jX2luKGlyLCBOVUxMLCBtYXhwKTsKKworCWtmcmVlKGRhdGEpOworfTsKKworc3RhdGljIHZvaWQgbWNldXNiX2dlbjJfaW5pdChzdHJ1Y3QgbWNldXNiX2RldiAqaXIpCit7CisJaW50IG1heHAgPSBpci0+bGVuX2luOworCisJLyogZGV2aWNlIHJlc2V0ICovCisJbWNlX2FzeW5jX291dChpciwgREVWSUNFX1JFU0VULCBzaXplb2YoREVWSUNFX1JFU0VUKSk7CisJbWNlX3N5bmNfaW4oaXIsIE5VTEwsIG1heHApOworCisJLyogZ2V0IGh3L3N3IHJldmlzaW9uPyAqLworCW1jZV9hc3luY19vdXQoaXIsIEdFVF9SRVZJU0lPTiwgc2l6ZW9mKEdFVF9SRVZJU0lPTikpOworCW1jZV9zeW5jX2luKGlyLCBOVUxMLCBtYXhwKTsKKworCS8qIHVua25vd24gd2hhdCB0aGUgbmV4dCB0d28gYWN0dWFsbHkgcmV0dXJuLi4uICovCisJbWNlX2FzeW5jX291dChpciwgR0VUX1VOS05PV04sIHNpemVvZihHRVRfVU5LTk9XTikpOworCW1jZV9zeW5jX2luKGlyLCBOVUxMLCBtYXhwKTsKKwltY2VfYXN5bmNfb3V0KGlyLCBHRVRfVU5LTk9XTjIsIHNpemVvZihHRVRfVU5LTk9XTjIpKTsKKwltY2Vfc3luY19pbihpciwgTlVMTCwgbWF4cCk7Cit9CisKK3N0YXRpYyB2b2lkIG1jZXVzYl9nZXRfcGFyYW1ldGVycyhzdHJ1Y3QgbWNldXNiX2RldiAqaXIpCit7CisJaW50IG1heHAgPSBpci0+bGVuX2luOworCisJLyogZ2V0IHRoZSBjYXJyaWVyIGFuZCBmcmVxdWVuY3kgKi8KKwltY2VfYXN5bmNfb3V0KGlyLCBHRVRfQ0FSUklFUl9GUkVRLCBzaXplb2YoR0VUX0NBUlJJRVJfRlJFUSkpOworCW1jZV9zeW5jX2luKGlyLCBOVUxMLCBtYXhwKTsKKworCWlmICghaXItPmZsYWdzLm5vX3R4KSB7CisJCS8qIGdldCB0aGUgdHJhbnNtaXR0ZXIgYml0bWFzayAqLworCQltY2VfYXN5bmNfb3V0KGlyLCBHRVRfVFhfQklUTUFTSywgc2l6ZW9mKEdFVF9UWF9CSVRNQVNLKSk7CisJCW1jZV9zeW5jX2luKGlyLCBOVUxMLCBtYXhwKTsKKwl9CisKKwkvKiBnZXQgcmVjZWl2ZXIgdGltZW91dCB2YWx1ZSAqLworCW1jZV9hc3luY19vdXQoaXIsIEdFVF9SWF9USU1FT1VULCBzaXplb2YoR0VUX1JYX1RJTUVPVVQpKTsKKwltY2Vfc3luY19pbihpciwgTlVMTCwgbWF4cCk7CisKKwkvKiBnZXQgcmVjZWl2ZXIgc2Vuc29yIHNldHRpbmcgKi8KKwltY2VfYXN5bmNfb3V0KGlyLCBHRVRfUlhfU0VOU09SLCBzaXplb2YoR0VUX1JYX1NFTlNPUikpOworCW1jZV9zeW5jX2luKGlyLCBOVUxMLCBtYXhwKTsKK30KKworc3RhdGljIHN0cnVjdCByY19kZXYgKm1jZXVzYl9pbml0X3JjX2RldihzdHJ1Y3QgbWNldXNiX2RldiAqaXIpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gaXItPmRldjsKKwlzdHJ1Y3QgcmNfZGV2ICpyYzsKKwlpbnQgcmV0OworCisJcmMgPSByY19hbGxvY2F0ZV9kZXZpY2UoKTsKKwlpZiAoIXJjKSB7CisJCWRldl9lcnIoZGV2LCAicmVtb3RlIGRldiBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CisJCWdvdG8gb3V0OworCX0KKworCXNucHJpbnRmKGlyLT5uYW1lLCBzaXplb2YoaXItPm5hbWUpLCAiJXMgKCUwNHg6JTA0eCkiLAorCQkgbWNldXNiX21vZGVsW2lyLT5tb2RlbF0ubmFtZSA/CisJCQltY2V1c2JfbW9kZWxbaXItPm1vZGVsXS5uYW1lIDoKKwkJCSJNZWRpYSBDZW50ZXIgRWQuIGVIb21lIEluZnJhcmVkIFJlbW90ZSBUcmFuc2NlaXZlciIsCisJCSBsZTE2X3RvX2NwdShpci0+dXNiZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSwKKwkJIGxlMTZfdG9fY3B1KGlyLT51c2JkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSk7CisKKwl1c2JfbWFrZV9wYXRoKGlyLT51c2JkZXYsIGlyLT5waHlzLCBzaXplb2YoaXItPnBoeXMpKTsKKworCXJjLT5pbnB1dF9uYW1lID0gaXItPm5hbWU7CisJcmMtPmlucHV0X3BoeXMgPSBpci0+cGh5czsKKwl1c2JfdG9faW5wdXRfaWQoaXItPnVzYmRldiwgJnJjLT5pbnB1dF9pZCk7CisJcmMtPmRldi5wYXJlbnQgPSBkZXY7CisJcmMtPnByaXYgPSBpcjsKKwlyYy0+ZHJpdmVyX3R5cGUgPSBSQ19EUklWRVJfSVJfUkFXOworCXJjLT5hbGxvd2VkX3Byb3RvcyA9IFJDX1RZUEVfQUxMOworCXJjLT50aW1lb3V0ID0gTVNfVE9fTlMoMTAwMCk7CisJaWYgKCFpci0+ZmxhZ3Mubm9fdHgpIHsKKwkJcmMtPnNfdHhfbWFzayA9IG1jZXVzYl9zZXRfdHhfbWFzazsKKwkJcmMtPnNfdHhfY2FycmllciA9IG1jZXVzYl9zZXRfdHhfY2FycmllcjsKKwkJcmMtPnR4X2lyID0gbWNldXNiX3R4X2lyOworCX0KKwlyYy0+ZHJpdmVyX25hbWUgPSBEUklWRVJfTkFNRTsKKwlyYy0+bWFwX25hbWUgPSBtY2V1c2JfbW9kZWxbaXItPm1vZGVsXS5yY19tYXAgPworCQkJbWNldXNiX21vZGVsW2lyLT5tb2RlbF0ucmNfbWFwIDogUkNfTUFQX1JDNl9NQ0U7CisKKwlyZXQgPSByY19yZWdpc3Rlcl9kZXZpY2UocmMpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAicmVtb3RlIGRldiByZWdpc3RyYXRpb24gZmFpbGVkXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0dXJuIHJjOworCitvdXQ6CisJcmNfZnJlZV9kZXZpY2UocmMpOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBtY2V1c2JfZGV2X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppZGVzYzsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwID0gTlVMTDsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwX2luID0gTlVMTDsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwX291dCA9IE5VTEw7CisJc3RydWN0IG1jZXVzYl9kZXYgKmlyID0gTlVMTDsKKwlpbnQgcGlwZSwgbWF4cCwgaTsKKwljaGFyIGJ1Zls2M10sIG5hbWVbMTI4XSA9ICIiOworCWVudW0gbWNldXNiX21vZGVsX3R5cGUgbW9kZWwgPSBpZC0+ZHJpdmVyX2luZm87CisJYm9vbCBpc19nZW4zOworCWJvb2wgaXNfbWljcm9zb2Z0X2dlbjE7CisJYm9vbCB0eF9tYXNrX25vcm1hbDsKKwlib29sIGlzX3BvbGFyaXM7CisKKwlkZXZfZGJnKCZpbnRmLT5kZXYsICIlcyBjYWxsZWRcbiIsIF9fZnVuY19fKTsKKworCWlkZXNjICA9IGludGYtPmN1cl9hbHRzZXR0aW5nOworCisJaXNfZ2VuMyA9IG1jZXVzYl9tb2RlbFttb2RlbF0ubWNlX2dlbjM7CisJaXNfbWljcm9zb2Z0X2dlbjEgPSBtY2V1c2JfbW9kZWxbbW9kZWxdLm1jZV9nZW4xOworCXR4X21hc2tfbm9ybWFsID0gbWNldXNiX21vZGVsW21vZGVsXS50eF9tYXNrX25vcm1hbDsKKwlpc19wb2xhcmlzID0gbWNldXNiX21vZGVsW21vZGVsXS5pc19wb2xhcmlzOworCisJaWYgKGlzX3BvbGFyaXMpIHsKKwkJLyogSW50ZXJmYWNlIDAgaXMgSVIgKi8KKwkJaWYgKGlkZXNjLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIpCisJCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKiBzdGVwIHRocm91Z2ggdGhlIGVuZHBvaW50cyB0byBmaW5kIGZpcnN0IGJ1bGsgaW4gYW5kIG91dCBlbmRwb2ludCAqLworCWZvciAoaSA9IDA7IGkgPCBpZGVzYy0+ZGVzYy5iTnVtRW5kcG9pbnRzOyArK2kpIHsKKwkJZXAgPSAmaWRlc2MtPmVuZHBvaW50W2ldLmRlc2M7CisKKwkJaWYgKChlcF9pbiA9PSBOVUxMKQorCQkJJiYgKChlcC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9FTkRQT0lOVF9ESVJfTUFTSykKKwkJCSAgICA9PSBVU0JfRElSX0lOKQorCQkJJiYgKCgoZXAtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKQorCQkJICAgID09IFVTQl9FTkRQT0lOVF9YRkVSX0JVTEspCisJCQl8fCAoKGVwLT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykKKwkJCSAgICA9PSBVU0JfRU5EUE9JTlRfWEZFUl9JTlQpKSkgeworCisJCQllcF9pbiA9IGVwOworCQkJZXBfaW4tPmJtQXR0cmlidXRlcyA9IFVTQl9FTkRQT0lOVF9YRkVSX0lOVDsKKwkJCWVwX2luLT5iSW50ZXJ2YWwgPSAxOworCQkJZGV2X2RiZygmaW50Zi0+ZGV2LCAiYWNjZXB0YWJsZSBpbmJvdW5kIGVuZHBvaW50ICIKKwkJCQkiZm91bmRcbiIpOworCQl9CisKKwkJaWYgKChlcF9vdXQgPT0gTlVMTCkKKwkJCSYmICgoZXAtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfRElSX01BU0spCisJCQkgICAgPT0gVVNCX0RJUl9PVVQpCisJCQkmJiAoKChlcC0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spCisJCQkgICAgPT0gVVNCX0VORFBPSU5UX1hGRVJfQlVMSykKKwkJCXx8ICgoZXAtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKQorCQkJICAgID09IFVTQl9FTkRQT0lOVF9YRkVSX0lOVCkpKSB7CisKKwkJCWVwX291dCA9IGVwOworCQkJZXBfb3V0LT5ibUF0dHJpYnV0ZXMgPSBVU0JfRU5EUE9JTlRfWEZFUl9JTlQ7CisJCQllcF9vdXQtPmJJbnRlcnZhbCA9IDE7CisJCQlkZXZfZGJnKCZpbnRmLT5kZXYsICJhY2NlcHRhYmxlIG91dGJvdW5kIGVuZHBvaW50ICIKKwkJCQkiZm91bmRcbiIpOworCQl9CisJfQorCWlmIChlcF9pbiA9PSBOVUxMKSB7CisJCWRldl9kYmcoJmludGYtPmRldiwgImluYm91bmQgYW5kL29yIGVuZHBvaW50IG5vdCBmb3VuZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXBpcGUgPSB1c2JfcmN2aW50cGlwZShkZXYsIGVwX2luLT5iRW5kcG9pbnRBZGRyZXNzKTsKKwltYXhwID0gdXNiX21heHBhY2tldChkZXYsIHBpcGUsIHVzYl9waXBlb3V0KHBpcGUpKTsKKworCWlyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG1jZXVzYl9kZXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWlyKQorCQlnb3RvIG1lbV9hbGxvY19mYWlsOworCisJaXItPmJ1Zl9pbiA9IHVzYl9hbGxvY19jb2hlcmVudChkZXYsIG1heHAsIEdGUF9BVE9NSUMsICZpci0+ZG1hX2luKTsKKwlpZiAoIWlyLT5idWZfaW4pCisJCWdvdG8gYnVmX2luX2FsbG9jX2ZhaWw7CisKKwlpci0+dXJiX2luID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWlyLT51cmJfaW4pCisJCWdvdG8gdXJiX2luX2FsbG9jX2ZhaWw7CisKKwlpci0+dXNiZGV2ID0gZGV2OworCWlyLT5kZXYgPSAmaW50Zi0+ZGV2OworCWlyLT5sZW5faW4gPSBtYXhwOworCWlyLT5mbGFncy5taWNyb3NvZnRfZ2VuMSA9IGlzX21pY3Jvc29mdF9nZW4xOworCWlyLT5mbGFncy50eF9tYXNrX25vcm1hbCA9IHR4X21hc2tfbm9ybWFsOworCWlyLT5mbGFncy5ub190eCA9IG1jZXVzYl9tb2RlbFttb2RlbF0ubm9fdHg7CisJaXItPm1vZGVsID0gbW9kZWw7CisKKwkvKiBTYXZpbmcgdXNiIGludGVyZmFjZSBkYXRhIGZvciB1c2UgYnkgdGhlIHRyYW5zbWl0dGVyIHJvdXRpbmUgKi8KKwlpci0+dXNiX2VwX2luID0gZXBfaW47CisJaXItPnVzYl9lcF9vdXQgPSBlcF9vdXQ7CisKKwlpZiAoZGV2LT5kZXNjcmlwdG9yLmlNYW51ZmFjdHVyZXIKKwkgICAgJiYgdXNiX3N0cmluZyhkZXYsIGRldi0+ZGVzY3JpcHRvci5pTWFudWZhY3R1cmVyLAorCQkJICBidWYsIHNpemVvZihidWYpKSA+IDApCisJCXN0cmxjcHkobmFtZSwgYnVmLCBzaXplb2YobmFtZSkpOworCWlmIChkZXYtPmRlc2NyaXB0b3IuaVByb2R1Y3QKKwkgICAgJiYgdXNiX3N0cmluZyhkZXYsIGRldi0+ZGVzY3JpcHRvci5pUHJvZHVjdCwKKwkJCSAgYnVmLCBzaXplb2YoYnVmKSkgPiAwKQorCQlzbnByaW50ZihuYW1lICsgc3RybGVuKG5hbWUpLCBzaXplb2YobmFtZSkgLSBzdHJsZW4obmFtZSksCisJCQkgIiAlcyIsIGJ1Zik7CisKKwlpci0+cmMgPSBtY2V1c2JfaW5pdF9yY19kZXYoaXIpOworCWlmICghaXItPnJjKQorCQlnb3RvIHJjX2Rldl9mYWlsOworCisJLyogZmx1c2ggYnVmZmVycyBvbiB0aGUgZGV2aWNlICovCisJbWNlX3N5bmNfaW4oaXIsIE5VTEwsIG1heHApOworCW1jZV9zeW5jX2luKGlyLCBOVUxMLCBtYXhwKTsKKworCS8qIHdpcmUgdXAgaW5ib3VuZCBkYXRhIGhhbmRsZXIgKi8KKwl1c2JfZmlsbF9pbnRfdXJiKGlyLT51cmJfaW4sIGRldiwgcGlwZSwgaXItPmJ1Zl9pbiwKKwkJbWF4cCwgKHVzYl9jb21wbGV0ZV90KSBtY2V1c2JfZGV2X3JlY3YsIGlyLCBlcF9pbi0+YkludGVydmFsKTsKKwlpci0+dXJiX2luLT50cmFuc2Zlcl9kbWEgPSBpci0+ZG1hX2luOworCWlyLT51cmJfaW4tPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOworCisJLyogaW5pdGlhbGl6ZSBkZXZpY2UgKi8KKwlpZiAoaXItPmZsYWdzLm1pY3Jvc29mdF9nZW4xKQorCQltY2V1c2JfZ2VuMV9pbml0KGlyKTsKKwllbHNlIGlmICghaXNfZ2VuMykKKwkJbWNldXNiX2dlbjJfaW5pdChpcik7CisKKwltY2V1c2JfZ2V0X3BhcmFtZXRlcnMoaXIpOworCisJaWYgKCFpci0+ZmxhZ3Mubm9fdHgpCisJCW1jZXVzYl9zZXRfdHhfbWFzayhpci0+cmMsIE1DRV9ERUZBVUxUX1RYX01BU0spOworCisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBpcik7CisKKwlkZXZfaW5mbygmaW50Zi0+ZGV2LCAiUmVnaXN0ZXJlZCAlcyBvbiB1c2IlZDolZFxuIiwgbmFtZSwKKwkJIGRldi0+YnVzLT5idXNudW0sIGRldi0+ZGV2bnVtKTsKKworCXJldHVybiAwOworCisJLyogRXJyb3ItaGFuZGxpbmcgcGF0aCAqLworcmNfZGV2X2ZhaWw6CisJdXNiX2ZyZWVfdXJiKGlyLT51cmJfaW4pOwordXJiX2luX2FsbG9jX2ZhaWw6CisJdXNiX2ZyZWVfY29oZXJlbnQoZGV2LCBtYXhwLCBpci0+YnVmX2luLCBpci0+ZG1hX2luKTsKK2J1Zl9pbl9hbGxvY19mYWlsOgorCWtmcmVlKGlyKTsKK21lbV9hbGxvY19mYWlsOgorCWRldl9lcnIoJmludGYtPmRldiwgIiVzOiBkZXZpY2Ugc2V0dXAgZmFpbGVkIVxuIiwgX19mdW5jX18pOworCisJcmV0dXJuIC1FTk9NRU07Cit9CisKKworc3RhdGljIHZvaWQgX19kZXZleGl0IG1jZXVzYl9kZXZfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwlzdHJ1Y3QgbWNldXNiX2RldiAqaXIgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKKworCWlmICghaXIpCisJCXJldHVybjsKKworCWlyLT51c2JkZXYgPSBOVUxMOworCXJjX3VucmVnaXN0ZXJfZGV2aWNlKGlyLT5yYyk7CisJdXNiX2tpbGxfdXJiKGlyLT51cmJfaW4pOworCXVzYl9mcmVlX3VyYihpci0+dXJiX2luKTsKKwl1c2JfZnJlZV9jb2hlcmVudChkZXYsIGlyLT5sZW5faW4sIGlyLT5idWZfaW4sIGlyLT5kbWFfaW4pOworCisJa2ZyZWUoaXIpOworfQorCitzdGF0aWMgaW50IG1jZXVzYl9kZXZfc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCit7CisJc3RydWN0IG1jZXVzYl9kZXYgKmlyID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKwlkZXZfaW5mbyhpci0+ZGV2LCAic3VzcGVuZFxuIik7CisJdXNiX2tpbGxfdXJiKGlyLT51cmJfaW4pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1jZXVzYl9kZXZfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCBtY2V1c2JfZGV2ICppciA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisJZGV2X2luZm8oaXItPmRldiwgInJlc3VtZVxuIik7CisJaWYgKHVzYl9zdWJtaXRfdXJiKGlyLT51cmJfaW4sIEdGUF9BVE9NSUMpKQorCQlyZXR1cm4gLUVJTzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIG1jZXVzYl9kZXZfZHJpdmVyID0geworCS5uYW1lID0JCURSSVZFUl9OQU1FLAorCS5wcm9iZSA9CW1jZXVzYl9kZXZfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQltY2V1c2JfZGV2X2Rpc2Nvbm5lY3QsCisJLnN1c3BlbmQgPQltY2V1c2JfZGV2X3N1c3BlbmQsCisJLnJlc3VtZSA9CW1jZXVzYl9kZXZfcmVzdW1lLAorCS5yZXNldF9yZXN1bWUgPQltY2V1c2JfZGV2X3Jlc3VtZSwKKwkuaWRfdGFibGUgPQltY2V1c2JfZGV2X3RhYmxlCit9OworCitzdGF0aWMgaW50IF9faW5pdCBtY2V1c2JfZGV2X2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gdXNiX3JlZ2lzdGVyKCZtY2V1c2JfZGV2X2RyaXZlcik7CisJaWYgKHJldCA8IDApCisJCXByaW50ayhLRVJOX0VSUiBEUklWRVJfTkFNRQorCQkgICAgICAgIjogdXNiIHJlZ2lzdGVyIGZhaWxlZCwgcmVzdWx0ID0gJWRcbiIsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgbWNldXNiX2Rldl9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJm1jZXVzYl9kZXZfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQobWNldXNiX2Rldl9pbml0KTsKK21vZHVsZV9leGl0KG1jZXVzYl9kZXZfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIG1jZXVzYl9kZXZfdGFibGUpOworCittb2R1bGVfcGFyYW0oZGVidWcsIGJvb2wsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBlbmFibGVkIG9yIG5vdCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9udXZvdG9uLWNpci5jIGIvZHJpdmVycy9tZWRpYS9yYy9udXZvdG9uLWNpci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkNGNhZjgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3JjL251dm90b24tY2lyLmMKQEAgLTAsMCArMSwxMjQ0IEBACisvKgorICogRHJpdmVyIGZvciBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24gdzgzNjY3aGcvdzgzNjc3aGctaSBDSVIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSmFyb2QgV2lsc29uIDxqYXJvZEByZWRoYXQuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA5IE51dm90b24gUFMgVGVhbQorICoKKyAqIFNwZWNpYWwgdGhhbmtzIHRvIE51dm90b24gZm9yIHByb3ZpZGluZyBoYXJkd2FyZSwgc3BlYyBzaGVldHMgYW5kCisgKiBzYW1wbGUgY29kZSB1cG9uIHdoaWNoIHBvcnRpb25zIG9mIHRoaXMgZHJpdmVyIGFyZSBiYXNlZC4gSW5kaXJlY3QKKyAqIHRoYW5rcyBhbHNvIHRvIE1heGltIExldml0c2t5LCB3aG9zZSBlbmVfaXIgZHJpdmVyIHRoaXMgZHJpdmVyIGlzCisgKiBtb2RlbGVkIGFmdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyAqIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAqIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbnAuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPG1lZGlhL3JjLWNvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2lfaWRzLmg+CisKKyNpbmNsdWRlICJudXZvdG9uLWNpci5oIgorCitzdGF0aWMgY2hhciAqY2hpcF9pZCA9ICJ3ODM2eDdoZyI7CisKKy8qIHdyaXRlIHZhbCB0byBjb25maWcgcmVnICovCitzdGF0aWMgaW5saW5lIHZvaWQgbnZ0X2NyX3dyaXRlKHN0cnVjdCBudnRfZGV2ICpudnQsIHU4IHZhbCwgdTggcmVnKQoreworCW91dGIocmVnLCBudnQtPmNyX2VmaXIpOworCW91dGIodmFsLCBudnQtPmNyX2VmZHIpOworfQorCisvKiByZWFkIHZhbCBmcm9tIGNvbmZpZyByZWcgKi8KK3N0YXRpYyBpbmxpbmUgdTggbnZ0X2NyX3JlYWQoc3RydWN0IG52dF9kZXYgKm52dCwgdTggcmVnKQoreworCW91dGIocmVnLCBudnQtPmNyX2VmaXIpOworCXJldHVybiBpbmIobnZ0LT5jcl9lZmRyKTsKK30KKworLyogdXBkYXRlIGNvbmZpZyByZWdpc3RlciBiaXQgd2l0aG91dCBjaGFuZ2luZyBvdGhlciBiaXRzICovCitzdGF0aWMgaW5saW5lIHZvaWQgbnZ0X3NldF9yZWdfYml0KHN0cnVjdCBudnRfZGV2ICpudnQsIHU4IHZhbCwgdTggcmVnKQoreworCXU4IHRtcCA9IG52dF9jcl9yZWFkKG52dCwgcmVnKSB8IHZhbDsKKwludnRfY3Jfd3JpdGUobnZ0LCB0bXAsIHJlZyk7Cit9CisKKy8qIGNsZWFyIGNvbmZpZyByZWdpc3RlciBiaXQgd2l0aG91dCBjaGFuZ2luZyBvdGhlciBiaXRzICovCitzdGF0aWMgaW5saW5lIHZvaWQgbnZ0X2NsZWFyX3JlZ19iaXQoc3RydWN0IG52dF9kZXYgKm52dCwgdTggdmFsLCB1OCByZWcpCit7CisJdTggdG1wID0gbnZ0X2NyX3JlYWQobnZ0LCByZWcpICYgfnZhbDsKKwludnRfY3Jfd3JpdGUobnZ0LCB0bXAsIHJlZyk7Cit9CisKKy8qIGVudGVyIGV4dGVuZGVkIGZ1bmN0aW9uIG1vZGUgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBudnRfZWZtX2VuYWJsZShzdHJ1Y3QgbnZ0X2RldiAqbnZ0KQoreworCS8qIEVuYWJsaW5nIEV4dGVuZGVkIEZ1bmN0aW9uIE1vZGUgZXhwbGljaXRseSByZXF1aXJlcyB3cml0aW5nIDJ4ICovCisJb3V0YihFRkVSX0VGTV9FTkFCTEUsIG52dC0+Y3JfZWZpcik7CisJb3V0YihFRkVSX0VGTV9FTkFCTEUsIG52dC0+Y3JfZWZpcik7Cit9CisKKy8qIGV4aXQgZXh0ZW5kZWQgZnVuY3Rpb24gbW9kZSAqLworc3RhdGljIGlubGluZSB2b2lkIG52dF9lZm1fZGlzYWJsZShzdHJ1Y3QgbnZ0X2RldiAqbnZ0KQoreworCW91dGIoRUZFUl9FRk1fRElTQUJMRSwgbnZ0LT5jcl9lZmlyKTsKK30KKworLyoKKyAqIFdoZW4geW91IHdhbnQgdG8gYWRkcmVzcyBhIHNwZWNpZmljIGxvZ2ljYWwgZGV2aWNlLCB3cml0ZSBpdHMgbG9naWNhbAorICogZGV2aWNlIG51bWJlciB0byBDUl9MT0dJQ0FMX0RFVl9TRUwsIHRoZW4gZW5hYmxlL2Rpc2FibGUgYnkgd3JpdGluZworICogMHgxLzB4MCByZXNwZWN0aXZlbHkgdG8gQ1JfTE9HSUNBTF9ERVZfRU4uCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBudnRfc2VsZWN0X2xvZ2ljYWxfZGV2KHN0cnVjdCBudnRfZGV2ICpudnQsIHU4IGxkZXYpCit7CisJb3V0YihDUl9MT0dJQ0FMX0RFVl9TRUwsIG52dC0+Y3JfZWZpcik7CisJb3V0YihsZGV2LCBudnQtPmNyX2VmZHIpOworfQorCisvKiB3cml0ZSB2YWwgdG8gY2lyIGNvbmZpZyByZWdpc3RlciAqLworc3RhdGljIGlubGluZSB2b2lkIG52dF9jaXJfcmVnX3dyaXRlKHN0cnVjdCBudnRfZGV2ICpudnQsIHU4IHZhbCwgdTggb2Zmc2V0KQoreworCW91dGIodmFsLCBudnQtPmNpcl9hZGRyICsgb2Zmc2V0KTsKK30KKworLyogcmVhZCB2YWwgZnJvbSBjaXIgY29uZmlnIHJlZ2lzdGVyICovCitzdGF0aWMgdTggbnZ0X2Npcl9yZWdfcmVhZChzdHJ1Y3QgbnZ0X2RldiAqbnZ0LCB1OCBvZmZzZXQpCit7CisJdTggdmFsOworCisJdmFsID0gaW5iKG52dC0+Y2lyX2FkZHIgKyBvZmZzZXQpOworCisJcmV0dXJuIHZhbDsKK30KKworLyogd3JpdGUgdmFsIHRvIGNpciB3YWtlIHJlZ2lzdGVyICovCitzdGF0aWMgaW5saW5lIHZvaWQgbnZ0X2Npcl93YWtlX3JlZ193cml0ZShzdHJ1Y3QgbnZ0X2RldiAqbnZ0LAorCQkJCQkgIHU4IHZhbCwgdTggb2Zmc2V0KQoreworCW91dGIodmFsLCBudnQtPmNpcl93YWtlX2FkZHIgKyBvZmZzZXQpOworfQorCisvKiByZWFkIHZhbCBmcm9tIGNpciB3YWtlIGNvbmZpZyByZWdpc3RlciAqLworc3RhdGljIHU4IG52dF9jaXJfd2FrZV9yZWdfcmVhZChzdHJ1Y3QgbnZ0X2RldiAqbnZ0LCB1OCBvZmZzZXQpCit7CisJdTggdmFsOworCisJdmFsID0gaW5iKG52dC0+Y2lyX3dha2VfYWRkciArIG9mZnNldCk7CisKKwlyZXR1cm4gdmFsOworfQorCisjZGVmaW5lIHByX3JlZyh0ZXh0LCAuLi4pIFwKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgdGV4dCwgIyMgX19WQV9BUkdTX18pCisKKy8qIGR1bXAgY3VycmVudCBjaXIgcmVnaXN0ZXIgY29udGVudHMgKi8KK3N0YXRpYyB2b2lkIGNpcl9kdW1wX3JlZ3Moc3RydWN0IG52dF9kZXYgKm52dCkKK3sKKwludnRfZWZtX2VuYWJsZShudnQpOworCW52dF9zZWxlY3RfbG9naWNhbF9kZXYobnZ0LCBMT0dJQ0FMX0RFVl9DSVIpOworCisJcHJfcmVnKCIlczogRHVtcCBDSVIgbG9naWNhbCBkZXZpY2UgcmVnaXN0ZXJzOlxuIiwgTlZUX0RSSVZFUl9OQU1FKTsKKwlwcl9yZWcoIiAqIENSIENJUiBBQ1RJVkUgOiAgIDB4JXhcbiIsCisJICAgICAgIG52dF9jcl9yZWFkKG52dCwgQ1JfTE9HSUNBTF9ERVZfRU4pKTsKKwlwcl9yZWcoIiAqIENSIENJUiBCQVNFIEFERFI6IDB4JXhcbiIsCisJICAgICAgIChudnRfY3JfcmVhZChudnQsIENSX0NJUl9CQVNFX0FERFJfSEkpIDw8IDgpIHwKKwkJbnZ0X2NyX3JlYWQobnZ0LCBDUl9DSVJfQkFTRV9BRERSX0xPKSk7CisJcHJfcmVnKCIgKiBDUiBDSVIgSVJRIE5VTTogICAweCV4XG4iLAorCSAgICAgICBudnRfY3JfcmVhZChudnQsIENSX0NJUl9JUlFfUlNSQykpOworCisJbnZ0X2VmbV9kaXNhYmxlKG52dCk7CisKKwlwcl9yZWcoIiVzOiBEdW1wIENJUiByZWdpc3RlcnM6XG4iLCBOVlRfRFJJVkVSX05BTUUpOworCXByX3JlZygiICogSVJDT046ICAgICAweCV4XG4iLCBudnRfY2lyX3JlZ19yZWFkKG52dCwgQ0lSX0lSQ09OKSk7CisJcHJfcmVnKCIgKiBJUlNUUzogICAgIDB4JXhcbiIsIG52dF9jaXJfcmVnX3JlYWQobnZ0LCBDSVJfSVJTVFMpKTsKKwlwcl9yZWcoIiAqIElSRU46ICAgICAgMHgleFxuIiwgbnZ0X2Npcl9yZWdfcmVhZChudnQsIENJUl9JUkVOKSk7CisJcHJfcmVnKCIgKiBSWEZDT05UOiAgIDB4JXhcbiIsIG52dF9jaXJfcmVnX3JlYWQobnZ0LCBDSVJfUlhGQ09OVCkpOworCXByX3JlZygiICogQ1A6ICAgICAgICAweCV4XG4iLCBudnRfY2lyX3JlZ19yZWFkKG52dCwgQ0lSX0NQKSk7CisJcHJfcmVnKCIgKiBDQzogICAgICAgIDB4JXhcbiIsIG52dF9jaXJfcmVnX3JlYWQobnZ0LCBDSVJfQ0MpKTsKKwlwcl9yZWcoIiAqIFNMQ0g6ICAgICAgMHgleFxuIiwgbnZ0X2Npcl9yZWdfcmVhZChudnQsIENJUl9TTENIKSk7CisJcHJfcmVnKCIgKiBTTENMOiAgICAgIDB4JXhcbiIsIG52dF9jaXJfcmVnX3JlYWQobnZ0LCBDSVJfU0xDTCkpOworCXByX3JlZygiICogRklGT0NPTjogICAweCV4XG4iLCBudnRfY2lyX3JlZ19yZWFkKG52dCwgQ0lSX0ZJRk9DT04pKTsKKwlwcl9yZWcoIiAqIElSRklGT1NUUzogMHgleFxuIiwgbnZ0X2Npcl9yZWdfcmVhZChudnQsIENJUl9JUkZJRk9TVFMpKTsKKwlwcl9yZWcoIiAqIFNSWEZJRk86ICAgMHgleFxuIiwgbnZ0X2Npcl9yZWdfcmVhZChudnQsIENJUl9TUlhGSUZPKSk7CisJcHJfcmVnKCIgKiBUWEZDT05UOiAgIDB4JXhcbiIsIG52dF9jaXJfcmVnX3JlYWQobnZ0LCBDSVJfVFhGQ09OVCkpOworCXByX3JlZygiICogU1RYRklGTzogICAweCV4XG4iLCBudnRfY2lyX3JlZ19yZWFkKG52dCwgQ0lSX1NUWEZJRk8pKTsKKwlwcl9yZWcoIiAqIEZDQ0g6ICAgICAgMHgleFxuIiwgbnZ0X2Npcl9yZWdfcmVhZChudnQsIENJUl9GQ0NIKSk7CisJcHJfcmVnKCIgKiBGQ0NMOiAgICAgIDB4JXhcbiIsIG52dF9jaXJfcmVnX3JlYWQobnZ0LCBDSVJfRkNDTCkpOworCXByX3JlZygiICogSVJGU006ICAgICAweCV4XG4iLCBudnRfY2lyX3JlZ19yZWFkKG52dCwgQ0lSX0lSRlNNKSk7Cit9CisKKy8qIGR1bXAgY3VycmVudCBjaXIgd2FrZSByZWdpc3RlciBjb250ZW50cyAqLworc3RhdGljIHZvaWQgY2lyX3dha2VfZHVtcF9yZWdzKHN0cnVjdCBudnRfZGV2ICpudnQpCit7CisJdTggaSwgZmlmb19sZW47CisKKwludnRfZWZtX2VuYWJsZShudnQpOworCW52dF9zZWxlY3RfbG9naWNhbF9kZXYobnZ0LCBMT0dJQ0FMX0RFVl9DSVJfV0FLRSk7CisKKwlwcl9yZWcoIiVzOiBEdW1wIENJUiBXQUtFIGxvZ2ljYWwgZGV2aWNlIHJlZ2lzdGVyczpcbiIsCisJICAgICAgIE5WVF9EUklWRVJfTkFNRSk7CisJcHJfcmVnKCIgKiBDUiBDSVIgV0FLRSBBQ1RJVkUgOiAgIDB4JXhcbiIsCisJICAgICAgIG52dF9jcl9yZWFkKG52dCwgQ1JfTE9HSUNBTF9ERVZfRU4pKTsKKwlwcl9yZWcoIiAqIENSIENJUiBXQUtFIEJBU0UgQUREUjogMHgleFxuIiwKKwkgICAgICAgKG52dF9jcl9yZWFkKG52dCwgQ1JfQ0lSX0JBU0VfQUREUl9ISSkgPDwgOCkgfAorCQludnRfY3JfcmVhZChudnQsIENSX0NJUl9CQVNFX0FERFJfTE8pKTsKKwlwcl9yZWcoIiAqIENSIENJUiBXQUtFIElSUSBOVU06ICAgMHgleFxuIiwKKwkgICAgICAgbnZ0X2NyX3JlYWQobnZ0LCBDUl9DSVJfSVJRX1JTUkMpKTsKKworCW52dF9lZm1fZGlzYWJsZShudnQpOworCisJcHJfcmVnKCIlczogRHVtcCBDSVIgV0FLRSByZWdpc3RlcnNcbiIsIE5WVF9EUklWRVJfTkFNRSk7CisJcHJfcmVnKCIgKiBJUkNPTjogICAgICAgICAgMHgleFxuIiwKKwkgICAgICAgbnZ0X2Npcl93YWtlX3JlZ19yZWFkKG52dCwgQ0lSX1dBS0VfSVJDT04pKTsKKwlwcl9yZWcoIiAqIElSU1RTOiAgICAgICAgICAweCV4XG4iLAorCSAgICAgICBudnRfY2lyX3dha2VfcmVnX3JlYWQobnZ0LCBDSVJfV0FLRV9JUlNUUykpOworCXByX3JlZygiICogSVJFTjogICAgICAgICAgIDB4JXhcbiIsCisJICAgICAgIG52dF9jaXJfd2FrZV9yZWdfcmVhZChudnQsIENJUl9XQUtFX0lSRU4pKTsKKwlwcl9yZWcoIiAqIEZJRk8gQ01QIERFRVA6ICAweCV4XG4iLAorCSAgICAgICBudnRfY2lyX3dha2VfcmVnX3JlYWQobnZ0LCBDSVJfV0FLRV9GSUZPX0NNUF9ERUVQKSk7CisJcHJfcmVnKCIgKiBGSUZPIENNUCBUT0w6ICAgMHgleFxuIiwKKwkgICAgICAgbnZ0X2Npcl93YWtlX3JlZ19yZWFkKG52dCwgQ0lSX1dBS0VfRklGT19DTVBfVE9MKSk7CisJcHJfcmVnKCIgKiBGSUZPIENPVU5UOiAgICAgMHgleFxuIiwKKwkgICAgICAgbnZ0X2Npcl93YWtlX3JlZ19yZWFkKG52dCwgQ0lSX1dBS0VfRklGT19DT1VOVCkpOworCXByX3JlZygiICogU0xDSDogICAgICAgICAgIDB4JXhcbiIsCisJICAgICAgIG52dF9jaXJfd2FrZV9yZWdfcmVhZChudnQsIENJUl9XQUtFX1NMQ0gpKTsKKwlwcl9yZWcoIiAqIFNMQ0w6ICAgICAgICAgICAweCV4XG4iLAorCSAgICAgICBudnRfY2lyX3dha2VfcmVnX3JlYWQobnZ0LCBDSVJfV0FLRV9TTENMKSk7CisJcHJfcmVnKCIgKiBGSUZPQ09OOiAgICAgICAgMHgleFxuIiwKKwkgICAgICAgbnZ0X2Npcl93YWtlX3JlZ19yZWFkKG52dCwgQ0lSX1dBS0VfRklGT0NPTikpOworCXByX3JlZygiICogU1JYRlNUUzogICAgICAgIDB4JXhcbiIsCisJICAgICAgIG52dF9jaXJfd2FrZV9yZWdfcmVhZChudnQsIENJUl9XQUtFX1NSWEZTVFMpKTsKKwlwcl9yZWcoIiAqIFNBTVBMRSBSWCBGSUZPOiAweCV4XG4iLAorCSAgICAgICBudnRfY2lyX3dha2VfcmVnX3JlYWQobnZ0LCBDSVJfV0FLRV9TQU1QTEVfUlhfRklGTykpOworCXByX3JlZygiICogV1IgRklGTyBEQVRBOiAgIDB4JXhcbiIsCisJICAgICAgIG52dF9jaXJfd2FrZV9yZWdfcmVhZChudnQsIENJUl9XQUtFX1dSX0ZJRk9fREFUQSkpOworCXByX3JlZygiICogUkQgRklGTyBPTkxZOiAgIDB4JXhcbiIsCisJICAgICAgIG52dF9jaXJfd2FrZV9yZWdfcmVhZChudnQsIENJUl9XQUtFX1JEX0ZJRk9fT05MWSkpOworCXByX3JlZygiICogUkQgRklGTyBPTkxZIElEWDogMHgleFxuIiwKKwkgICAgICAgbnZ0X2Npcl93YWtlX3JlZ19yZWFkKG52dCwgQ0lSX1dBS0VfUkRfRklGT19PTkxZX0lEWCkpOworCXByX3JlZygiICogRklGTyBJR05PUkU6ICAgIDB4JXhcbiIsCisJICAgICAgIG52dF9jaXJfd2FrZV9yZWdfcmVhZChudnQsIENJUl9XQUtFX0ZJRk9fSUdOT1JFKSk7CisJcHJfcmVnKCIgKiBJUkZTTTogICAgICAgICAgMHgleFxuIiwKKwkgICAgICAgbnZ0X2Npcl93YWtlX3JlZ19yZWFkKG52dCwgQ0lSX1dBS0VfSVJGU00pKTsKKworCWZpZm9fbGVuID0gbnZ0X2Npcl93YWtlX3JlZ19yZWFkKG52dCwgQ0lSX1dBS0VfRklGT19DT1VOVCk7CisJcHJfcmVnKCIlczogRHVtcCBDSVIgV0FLRSBGSUZPIChsZW4gJWQpXG4iLCBOVlRfRFJJVkVSX05BTUUsIGZpZm9fbGVuKTsKKwlwcl9yZWcoIiogQ29udGVudHMgPSAiKTsKKwlmb3IgKGkgPSAwOyBpIDwgZmlmb19sZW47IGkrKykKKwkJcHJpbnRrKEtFUk5fQ09OVCAiJTAyeCAiLAorCQkgICAgICAgbnZ0X2Npcl93YWtlX3JlZ19yZWFkKG52dCwgQ0lSX1dBS0VfUkRfRklGT19PTkxZKSk7CisJcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKK30KKworLyogZGV0ZWN0IGhhcmR3YXJlIGZlYXR1cmVzICovCitzdGF0aWMgaW50IG52dF9od19kZXRlY3Qoc3RydWN0IG52dF9kZXYgKm52dCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXU4IGNoaXBfbWFqb3IsIGNoaXBfbWlub3I7CisJaW50IHJldCA9IDA7CisKKwludnRfZWZtX2VuYWJsZShudnQpOworCisJLyogQ2hlY2sgaWYgd2UncmUgd2lyZWQgZm9yIHRoZSBhbHRlcm5hdGUgRUZFUiBzZXR1cCAqLworCWNoaXBfbWFqb3IgPSBudnRfY3JfcmVhZChudnQsIENSX0NISVBfSURfSEkpOworCWlmIChjaGlwX21ham9yID09IDB4ZmYpIHsKKwkJbnZ0LT5jcl9lZmlyID0gQ1JfRUZJUjI7CisJCW52dC0+Y3JfZWZkciA9IENSX0VGRFIyOworCQludnRfZWZtX2VuYWJsZShudnQpOworCQljaGlwX21ham9yID0gbnZ0X2NyX3JlYWQobnZ0LCBDUl9DSElQX0lEX0hJKTsKKwl9CisKKwljaGlwX21pbm9yID0gbnZ0X2NyX3JlYWQobnZ0LCBDUl9DSElQX0lEX0xPKTsKKwludnRfZGJnKCIlczogY2hpcCBpZDogMHglMDJ4IDB4JTAyeCIsIGNoaXBfaWQsIGNoaXBfbWFqb3IsIGNoaXBfbWlub3IpOworCisJaWYgKGNoaXBfbWFqb3IgIT0gQ0hJUF9JRF9ISUdIIHx8CisJICAgIChjaGlwX21pbm9yICE9IENISVBfSURfTE9XICYmIGNoaXBfbWlub3IgIT0gQ0hJUF9JRF9MT1cyKSkgeworCQludnRfcHIoS0VSTl9FUlIsICIlczogdW5zdXBwb3J0ZWQgY2hpcCwgaWQ6IDB4JTAyeCAweCUwMngiLAorCQkgICAgICAgY2hpcF9pZCwgY2hpcF9tYWpvciwgY2hpcF9taW5vcik7CisJCXJldCA9IC1FTk9ERVY7CisJfQorCisJbnZ0X2VmbV9kaXNhYmxlKG52dCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbnZ0LT5udnRfbG9jaywgZmxhZ3MpOworCW52dC0+Y2hpcF9tYWpvciA9IGNoaXBfbWFqb3I7CisJbnZ0LT5jaGlwX21pbm9yID0gY2hpcF9taW5vcjsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZudnQtPm52dF9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBudnRfY2lyX2xkZXZfaW5pdChzdHJ1Y3QgbnZ0X2RldiAqbnZ0KQoreworCXU4IHZhbDsKKworCS8qIG91dHB1dCBwaW4gc2VsZWN0aW9uIChQaW45NT1DSVJSWCwgUGluOTY9Q0lSVFgxLCBXQiBlbmFibGVkICovCisJdmFsID0gbnZ0X2NyX3JlYWQobnZ0LCBDUl9PVVRQVVRfUElOX1NFTCk7CisJdmFsICY9IE9VVFBVVF9QSU5fU0VMX01BU0s7CisJdmFsIHw9IChPVVRQVVRfRU5BQkxFX0NJUiB8IE9VVFBVVF9FTkFCTEVfQ0lSV0IpOworCW52dF9jcl93cml0ZShudnQsIHZhbCwgQ1JfT1VUUFVUX1BJTl9TRUwpOworCisJLyogU2VsZWN0IENJUiBsb2dpY2FsIGRldmljZSBhbmQgZW5hYmxlICovCisJbnZ0X3NlbGVjdF9sb2dpY2FsX2RldihudnQsIExPR0lDQUxfREVWX0NJUik7CisJbnZ0X2NyX3dyaXRlKG52dCwgTE9HSUNBTF9ERVZfRU5BQkxFLCBDUl9MT0dJQ0FMX0RFVl9FTik7CisKKwludnRfY3Jfd3JpdGUobnZ0LCBudnQtPmNpcl9hZGRyID4+IDgsIENSX0NJUl9CQVNFX0FERFJfSEkpOworCW52dF9jcl93cml0ZShudnQsIG52dC0+Y2lyX2FkZHIgJiAweGZmLCBDUl9DSVJfQkFTRV9BRERSX0xPKTsKKworCW52dF9jcl93cml0ZShudnQsIG52dC0+Y2lyX2lycSwgQ1JfQ0lSX0lSUV9SU1JDKTsKKworCW52dF9kYmcoIkNJUiBpbml0aWFsaXplZCwgYmFzZSBpbyBwb3J0IGFkZHJlc3M6IDB4JWx4LCBpcnE6ICVkIiwKKwkJbnZ0LT5jaXJfYWRkciwgbnZ0LT5jaXJfaXJxKTsKK30KKworc3RhdGljIHZvaWQgbnZ0X2Npcl93YWtlX2xkZXZfaW5pdChzdHJ1Y3QgbnZ0X2RldiAqbnZ0KQoreworCS8qIFNlbGVjdCBBQ1BJIGxvZ2ljYWwgZGV2aWNlLCBlbmFibGUgaXQgYW5kIENJUiBXYWtlICovCisJbnZ0X3NlbGVjdF9sb2dpY2FsX2RldihudnQsIExPR0lDQUxfREVWX0FDUEkpOworCW52dF9jcl93cml0ZShudnQsIExPR0lDQUxfREVWX0VOQUJMRSwgQ1JfTE9HSUNBTF9ERVZfRU4pOworCisJLyogRW5hYmxlIENJUiBXYWtlIHZpYSBQU09VVCMgKFBpbjYwKSAqLworCW52dF9zZXRfcmVnX2JpdChudnQsIENJUl9XQUtFX0VOQUJMRV9CSVQsIENSX0FDUElfQ0lSX1dBS0UpOworCisJLyogZW5hYmxlIGNpciBpbnRlcnJ1cHQgb2YgbW91c2Uva2V5Ym9hcmQgSVJRIGV2ZW50ICovCisJbnZ0X3NldF9yZWdfYml0KG52dCwgQ0lSX0lOVFJfTU9VU0VfSVJRX0JJVCwgQ1JfQUNQSV9JUlFfRVZFTlRTKTsKKworCS8qIGVuYWJsZSBwbWUgaW50ZXJydXB0IG9mIGNpciB3YWtldXAgZXZlbnQgKi8KKwludnRfc2V0X3JlZ19iaXQobnZ0LCBQTUVfSU5UUl9DSVJfUEFTU19CSVQsIENSX0FDUElfSVJRX0VWRU5UUzIpOworCisJLyogU2VsZWN0IENJUiBXYWtlIGxvZ2ljYWwgZGV2aWNlIGFuZCBlbmFibGUgKi8KKwludnRfc2VsZWN0X2xvZ2ljYWxfZGV2KG52dCwgTE9HSUNBTF9ERVZfQ0lSX1dBS0UpOworCW52dF9jcl93cml0ZShudnQsIExPR0lDQUxfREVWX0VOQUJMRSwgQ1JfTE9HSUNBTF9ERVZfRU4pOworCisJbnZ0X2NyX3dyaXRlKG52dCwgbnZ0LT5jaXJfd2FrZV9hZGRyID4+IDgsIENSX0NJUl9CQVNFX0FERFJfSEkpOworCW52dF9jcl93cml0ZShudnQsIG52dC0+Y2lyX3dha2VfYWRkciAmIDB4ZmYsIENSX0NJUl9CQVNFX0FERFJfTE8pOworCisJbnZ0X2NyX3dyaXRlKG52dCwgbnZ0LT5jaXJfd2FrZV9pcnEsIENSX0NJUl9JUlFfUlNSQyk7CisKKwludnRfZGJnKCJDSVIgV2FrZSBpbml0aWFsaXplZCwgYmFzZSBpbyBwb3J0IGFkZHJlc3M6IDB4JWx4LCBpcnE6ICVkIiwKKwkJbnZ0LT5jaXJfd2FrZV9hZGRyLCBudnQtPmNpcl93YWtlX2lycSk7Cit9CisKKy8qIGNsZWFyIG91dCB0aGUgaGFyZHdhcmUncyBjaXIgcnggZmlmbyAqLworc3RhdGljIHZvaWQgbnZ0X2NsZWFyX2Npcl9maWZvKHN0cnVjdCBudnRfZGV2ICpudnQpCit7CisJdTggdmFsOworCisJdmFsID0gbnZ0X2Npcl9yZWdfcmVhZChudnQsIENJUl9GSUZPQ09OKTsKKwludnRfY2lyX3JlZ193cml0ZShudnQsIHZhbCB8IENJUl9GSUZPQ09OX1JYRklGT0NMUiwgQ0lSX0ZJRk9DT04pOworfQorCisvKiBjbGVhciBvdXQgdGhlIGhhcmR3YXJlJ3MgY2lyIHdha2UgcnggZmlmbyAqLworc3RhdGljIHZvaWQgbnZ0X2NsZWFyX2Npcl93YWtlX2ZpZm8oc3RydWN0IG52dF9kZXYgKm52dCkKK3sKKwl1OCB2YWw7CisKKwl2YWwgPSBudnRfY2lyX3dha2VfcmVnX3JlYWQobnZ0LCBDSVJfV0FLRV9GSUZPQ09OKTsKKwludnRfY2lyX3dha2VfcmVnX3dyaXRlKG52dCwgdmFsIHwgQ0lSX1dBS0VfRklGT0NPTl9SWEZJRk9DTFIsCisJCQkgICAgICAgQ0lSX1dBS0VfRklGT0NPTik7Cit9CisKKy8qIGNsZWFyIG91dCB0aGUgaGFyZHdhcmUncyBjaXIgdHggZmlmbyAqLworc3RhdGljIHZvaWQgbnZ0X2NsZWFyX3R4X2ZpZm8oc3RydWN0IG52dF9kZXYgKm52dCkKK3sKKwl1OCB2YWw7CisKKwl2YWwgPSBudnRfY2lyX3JlZ19yZWFkKG52dCwgQ0lSX0ZJRk9DT04pOworCW52dF9jaXJfcmVnX3dyaXRlKG52dCwgdmFsIHwgQ0lSX0ZJRk9DT05fVFhGSUZPQ0xSLCBDSVJfRklGT0NPTik7Cit9CisKKy8qIGVuYWJsZSBSWCBUcmlnZ2VyIExldmVsIFJlYWNoIGFuZCBQYWNrZXQgRW5kIGludGVycnVwdHMgKi8KK3N0YXRpYyB2b2lkIG52dF9zZXRfY2lyX2lyZW4oc3RydWN0IG52dF9kZXYgKm52dCkKK3sKKwl1OCBpcmVuOworCisJaXJlbiA9IENJUl9JUkVOX1JUUiB8IENJUl9JUkVOX1BFOworCW52dF9jaXJfcmVnX3dyaXRlKG52dCwgaXJlbiwgQ0lSX0lSRU4pOworfQorCitzdGF0aWMgdm9pZCBudnRfY2lyX3JlZ3NfaW5pdChzdHJ1Y3QgbnZ0X2RldiAqbnZ0KQoreworCS8qIHNldCBzYW1wbGUgbGltaXQgY291bnQgKFBFIGludGVycnVwdCByYWlzZWQgd2hlbiByZWFjaGVkKSAqLworCW52dF9jaXJfcmVnX3dyaXRlKG52dCwgQ0lSX1JYX0xJTUlUX0NPVU5UID4+IDgsIENJUl9TTENIKTsKKwludnRfY2lyX3JlZ193cml0ZShudnQsIENJUl9SWF9MSU1JVF9DT1VOVCAmIDB4ZmYsIENJUl9TTENMKTsKKworCS8qIHNldCBmaWZvIGlycSB0cmlnZ2VyIGxldmVscyAqLworCW52dF9jaXJfcmVnX3dyaXRlKG52dCwgQ0lSX0ZJRk9DT05fVFhfVFJJR0dFUl9MRVYgfAorCQkJICBDSVJfRklGT0NPTl9SWF9UUklHR0VSX0xFViwgQ0lSX0ZJRk9DT04pOworCisJLyoKKwkgKiBFbmFibGUgVFggYW5kIFJYLCBzcGVjaWZ5IGNhcnJpZXIgb24gPSBsb3csIG9mZiA9IGhpZ2gsIGFuZCBzZXQKKwkgKiBzYW1wbGUgcGVyaW9kIChjdXJyZW50bHkgNTB1cykKKwkgKi8KKwludnRfY2lyX3JlZ193cml0ZShudnQsCisJCQkgIENJUl9JUkNPTl9UWEVOIHwgQ0lSX0lSQ09OX1JYRU4gfAorCQkJICBDSVJfSVJDT05fUlhJTlYgfCBDSVJfSVJDT05fU0FNUExFX1BFUklPRF9TRUwsCisJCQkgIENJUl9JUkNPTik7CisKKwkvKiBjbGVhciBoYXJkd2FyZSByeCBhbmQgdHggZmlmb3MgKi8KKwludnRfY2xlYXJfY2lyX2ZpZm8obnZ0KTsKKwludnRfY2xlYXJfdHhfZmlmbyhudnQpOworCisJLyogY2xlYXIgYW55IGFuZCBhbGwgc3RyYXkgaW50ZXJydXB0cyAqLworCW52dF9jaXJfcmVnX3dyaXRlKG52dCwgMHhmZiwgQ0lSX0lSU1RTKTsKKworCS8qIGFuZCBmaW5hbGx5LCBlbmFibGUgaW50ZXJydXB0cyAqLworCW52dF9zZXRfY2lyX2lyZW4obnZ0KTsKK30KKworc3RhdGljIHZvaWQgbnZ0X2Npcl93YWtlX3JlZ3NfaW5pdChzdHJ1Y3QgbnZ0X2RldiAqbnZ0KQoreworCS8qIHNldCBudW1iZXIgb2YgYnl0ZXMgbmVlZGVkIGZvciB3YWtlIGtleSBjb21wYXJpc29uIChkZWZhdWx0IDY3KSAqLworCW52dF9jaXJfd2FrZV9yZWdfd3JpdGUobnZ0LCBDSVJfV0FLRV9GSUZPX0xFTiwgQ0lSX1dBS0VfRklGT19DTVBfREVFUCk7CisKKwkvKiBzZXQgdG9sZXJhbmNlL3ZhcmlhbmNlIGFsbG93ZWQgcGVyIGJ5dGUgZHVyaW5nIHdha2UgY29tcGFyZSAqLworCW52dF9jaXJfd2FrZV9yZWdfd3JpdGUobnZ0LCBDSVJfV0FLRV9DTVBfVE9MRVJBTkNFLAorCQkJICAgICAgIENJUl9XQUtFX0ZJRk9fQ01QX1RPTCk7CisKKwkvKiBzZXQgc2FtcGxlIGxpbWl0IGNvdW50IChQRSBpbnRlcnJ1cHQgcmFpc2VkIHdoZW4gcmVhY2hlZCkgKi8KKwludnRfY2lyX3dha2VfcmVnX3dyaXRlKG52dCwgQ0lSX1JYX0xJTUlUX0NPVU5UID4+IDgsIENJUl9XQUtFX1NMQ0gpOworCW52dF9jaXJfd2FrZV9yZWdfd3JpdGUobnZ0LCBDSVJfUlhfTElNSVRfQ09VTlQgJiAweGZmLCBDSVJfV0FLRV9TTENMKTsKKworCS8qIHNldCBjaXIgd2FrZSBmaWZvIHJ4IHRyaWdnZXIgbGV2ZWwgKGN1cnJlbnRseSA2NykgKi8KKwludnRfY2lyX3dha2VfcmVnX3dyaXRlKG52dCwgQ0lSX1dBS0VfRklGT0NPTl9SWF9UUklHR0VSX0xFViwKKwkJCSAgICAgICBDSVJfV0FLRV9GSUZPQ09OKTsKKworCS8qCisJICogRW5hYmxlIFRYIGFuZCBSWCwgc3BlY2lmaWMgY2FycmllciBvbiA9IGxvdywgb2ZmID0gaGlnaCwgYW5kIHNldAorCSAqIHNhbXBsZSBwZXJpb2QgKGN1cnJlbnRseSA1MHVzKQorCSAqLworCW52dF9jaXJfd2FrZV9yZWdfd3JpdGUobnZ0LCBDSVJfV0FLRV9JUkNPTl9NT0RFMCB8IENJUl9XQUtFX0lSQ09OX1JYRU4gfAorCQkJICAgICAgIENJUl9XQUtFX0lSQ09OX1IgfCBDSVJfV0FLRV9JUkNPTl9SWElOViB8CisJCQkgICAgICAgQ0lSX1dBS0VfSVJDT05fU0FNUExFX1BFUklPRF9TRUwsCisJCQkgICAgICAgQ0lSX1dBS0VfSVJDT04pOworCisJLyogY2xlYXIgY2lyIHdha2UgcnggZmlmbyAqLworCW52dF9jbGVhcl9jaXJfd2FrZV9maWZvKG52dCk7CisKKwkvKiBjbGVhciBhbnkgYW5kIGFsbCBzdHJheSBpbnRlcnJ1cHRzICovCisJbnZ0X2Npcl93YWtlX3JlZ193cml0ZShudnQsIDB4ZmYsIENJUl9XQUtFX0lSU1RTKTsKK30KKworc3RhdGljIHZvaWQgbnZ0X2VuYWJsZV93YWtlKHN0cnVjdCBudnRfZGV2ICpudnQpCit7CisJbnZ0X2VmbV9lbmFibGUobnZ0KTsKKworCW52dF9zZWxlY3RfbG9naWNhbF9kZXYobnZ0LCBMT0dJQ0FMX0RFVl9BQ1BJKTsKKwludnRfc2V0X3JlZ19iaXQobnZ0LCBDSVJfV0FLRV9FTkFCTEVfQklULCBDUl9BQ1BJX0NJUl9XQUtFKTsKKwludnRfc2V0X3JlZ19iaXQobnZ0LCBDSVJfSU5UUl9NT1VTRV9JUlFfQklULCBDUl9BQ1BJX0lSUV9FVkVOVFMpOworCW52dF9zZXRfcmVnX2JpdChudnQsIFBNRV9JTlRSX0NJUl9QQVNTX0JJVCwgQ1JfQUNQSV9JUlFfRVZFTlRTMik7CisKKwludnRfc2VsZWN0X2xvZ2ljYWxfZGV2KG52dCwgTE9HSUNBTF9ERVZfQ0lSX1dBS0UpOworCW52dF9jcl93cml0ZShudnQsIExPR0lDQUxfREVWX0VOQUJMRSwgQ1JfTE9HSUNBTF9ERVZfRU4pOworCisJbnZ0X2VmbV9kaXNhYmxlKG52dCk7CisKKwludnRfY2lyX3dha2VfcmVnX3dyaXRlKG52dCwgQ0lSX1dBS0VfSVJDT05fTU9ERTAgfCBDSVJfV0FLRV9JUkNPTl9SWEVOIHwKKwkJCSAgICAgICBDSVJfV0FLRV9JUkNPTl9SIHwgQ0lSX1dBS0VfSVJDT05fUlhJTlYgfAorCQkJICAgICAgIENJUl9XQUtFX0lSQ09OX1NBTVBMRV9QRVJJT0RfU0VMLAorCQkJICAgICAgIENJUl9XQUtFX0lSQ09OKTsKKwludnRfY2lyX3dha2VfcmVnX3dyaXRlKG52dCwgMHhmZiwgQ0lSX1dBS0VfSVJTVFMpOworCW52dF9jaXJfd2FrZV9yZWdfd3JpdGUobnZ0LCAwLCBDSVJfV0FLRV9JUkVOKTsKK30KKworLyogcnggY2FycmllciBkZXRlY3Qgb25seSB3b3JrcyBpbiBsZWFybmluZyBtb2RlLCBtdXN0IGJlIGNhbGxlZCB3L252dF9sb2NrICovCitzdGF0aWMgdTMyIG52dF9yeF9jYXJyaWVyX2RldGVjdChzdHJ1Y3QgbnZ0X2RldiAqbnZ0KQoreworCXUzMiBjb3VudCwgY2FycmllciwgZHVyYXRpb24gPSAwOworCWludCBpOworCisJY291bnQgPSBudnRfY2lyX3JlZ19yZWFkKG52dCwgQ0lSX0ZDQ0wpIHwKKwkJbnZ0X2Npcl9yZWdfcmVhZChudnQsIENJUl9GQ0NIKSA8PCA4OworCisJZm9yIChpID0gMDsgaSA8IG52dC0+cGt0czsgaSsrKSB7CisJCWlmIChudnQtPmJ1ZltpXSAmIEJVRl9QVUxTRV9CSVQpCisJCQlkdXJhdGlvbiArPSBudnQtPmJ1ZltpXSAmIEJVRl9MRU5fTUFTSzsKKwl9CisKKwlkdXJhdGlvbiAqPSBTQU1QTEVfUEVSSU9EOworCisJaWYgKCFjb3VudCB8fCAhZHVyYXRpb24pIHsKKwkJbnZ0X3ByKEtFUk5fTk9USUNFLCAiVW5hYmxlIHRvIGRldGVybWluZSBjYXJyaWVyISAoYzoldSwgZDoldSkiLAorCQkgICAgICAgY291bnQsIGR1cmF0aW9uKTsKKwkJcmV0dXJuIDA7CisJfQorCisJY2FycmllciA9IChjb3VudCAqIDEwMDAwMDApIC8gZHVyYXRpb247CisKKwlpZiAoKGNhcnJpZXIgPiBNQVhfQ0FSUklFUikgfHwgKGNhcnJpZXIgPCBNSU5fQ0FSUklFUikpCisJCW52dF9kYmcoIldURj8gQ2FycmllciBmcmVxdWVuY3kgb3V0IG9mIHJhbmdlISIpOworCisJbnZ0X2RiZygiQ2FycmllciBmcmVxdWVuY3k6ICV1IChjb3VudCAldSwgZHVyYXRpb24gJXUpIiwKKwkJY2FycmllciwgY291bnQsIGR1cmF0aW9uKTsKKworCXJldHVybiBjYXJyaWVyOworfQorCisvKgorICogc2V0IGNhcnJpZXIgZnJlcXVlbmN5CisgKgorICogc2V0IGNhcnJpZXIgb24gMiByZWdpc3RlcnM6IENQICYgQ0MKKyAqIGFsd2F5cyBzZXQgQ1AgYXMgMHg4MQorICogc2V0IENDIGJ5IFNQRUMsIENDID0gM01Iei9jYXJyaWVyIC0gMQorICovCitzdGF0aWMgaW50IG52dF9zZXRfdHhfY2FycmllcihzdHJ1Y3QgcmNfZGV2ICpkZXYsIHUzMiBjYXJyaWVyKQoreworCXN0cnVjdCBudnRfZGV2ICpudnQgPSBkZXYtPnByaXY7CisJdTE2IHZhbDsKKworCW52dF9jaXJfcmVnX3dyaXRlKG52dCwgMSwgQ0lSX0NQKTsKKwl2YWwgPSAzMDAwMDAwIC8gKGNhcnJpZXIpIC0gMTsKKwludnRfY2lyX3JlZ193cml0ZShudnQsIHZhbCAmIDB4ZmYsIENJUl9DQyk7CisKKwludnRfZGJnKCJjcDogMHgleCBjYzogMHgleFxuIiwKKwkJbnZ0X2Npcl9yZWdfcmVhZChudnQsIENJUl9DUCksIG52dF9jaXJfcmVnX3JlYWQobnZ0LCBDSVJfQ0MpKTsKKworCXJldHVybiAwOworfQorCisvKgorICogbnZ0X3R4X2lyCisgKgorICogMSkgY2xlYW4gVFggZmlmbyBmaXJzdCAoaGFuZGxlZCBieSBBUCkKKyAqIDIpIGNvcHkgZGF0YSBmcm9tIHVzZXIgc3BhY2UKKyAqIDMpIGRpc2FibGUgUlggaW50ZXJydXB0cywgZW5hYmxlIFRYIGludGVycnVwdHM6IFRUUiAmIFRGVQorICogNCkgc2VuZCA5IHBhY2tldHMgdG8gVFggRklGTyB0byBvcGVuIFRUUgorICogaW4gaW50ZXJydXB0X2hhbmRsZXI6CisgKiA1KSBzZW5kIGFsbCBkYXRhIG91dAorICogZ28gYmFjayB0byB3cml0ZSgpOgorICogNikgZGlzYWJsZSBUWCBpbnRlcnJ1cHRzLCByZS1lbmFibGUgUlggaW50ZXJ1cHRzCisgKgorICogVGhlIGtleSBwcm9ibGVtIG9mIHRoaXMgZnVuY3Rpb24gaXMgdXNlciBzcGFjZSBkYXRhIG1heSBsYXJnZXIgdGhhbgorICogZHJpdmVyJ3MgZGF0YSBidWYgbGVuZ3RoLiBTbyBudnRfdHhfaXIoKSB3aWxsIG9ubHkgY29weSBUWF9CVUZfTEVOIGRhdGEgdG8KKyAqIGJ1ZiwgYW5kIGtlZXAgY3VycmVudCBjb3BpZWQgZGF0YSBidWYgbnVtIGluIGN1cl9idWZfbnVtLiBCdXQgZHJpdmVyJ3MgYnVmCisgKiBudW1iZXIgbWF5IGxhcmdlciB0aGFuIFRYRkNPTlQgKDB4ZmYpLiBTbyBpbiBpbnRlcnJ1cHRfaGFuZGxlciwgaXQgaGFzIHRvCisgKiBzZXQgVFhGQ09OVCBhcyAweGZmLCB1bnRpbCBidWZfY291bnQgbGVzcyB0aGFuIDB4ZmYuCisgKi8KK3N0YXRpYyBpbnQgbnZ0X3R4X2lyKHN0cnVjdCByY19kZXYgKmRldiwgaW50ICp0eGJ1ZiwgdTMyIG4pCit7CisJc3RydWN0IG52dF9kZXYgKm52dCA9IGRldi0+cHJpdjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXNpemVfdCBjdXJfY291bnQ7CisJdW5zaWduZWQgaW50IGk7CisJdTggaXJlbjsKKwlpbnQgcmV0OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm52dC0+dHgubG9jaywgZmxhZ3MpOworCisJaWYgKG4gPj0gVFhfQlVGX0xFTikgeworCQludnQtPnR4LmJ1Zl9jb3VudCA9IGN1cl9jb3VudCA9IFRYX0JVRl9MRU47CisJCXJldCA9IFRYX0JVRl9MRU47CisJfSBlbHNlIHsKKwkJbnZ0LT50eC5idWZfY291bnQgPSBjdXJfY291bnQgPSBuOworCQlyZXQgPSBuOworCX0KKworCW1lbWNweShudnQtPnR4LmJ1ZiwgdHhidWYsIG52dC0+dHguYnVmX2NvdW50KTsKKworCW52dC0+dHguY3VyX2J1Zl9udW0gPSAwOworCisJLyogc2F2ZSBjdXJyZW50bHkgZW5hYmxlZCBpbnRlcnJ1cHRzICovCisJaXJlbiA9IG52dF9jaXJfcmVnX3JlYWQobnZ0LCBDSVJfSVJFTik7CisKKwkvKiBub3cgZGlzYWJsZSBhbGwgaW50ZXJydXB0cywgc2F2ZSBURlUgJiBUVFIgKi8KKwludnRfY2lyX3JlZ193cml0ZShudnQsIENJUl9JUkVOX1RGVSB8IENJUl9JUkVOX1RUUiwgQ0lSX0lSRU4pOworCisJbnZ0LT50eC50eF9zdGF0ZSA9IFNUX1RYX1JFUExZOworCisJbnZ0X2Npcl9yZWdfd3JpdGUobnZ0LCBDSVJfRklGT0NPTl9UWF9UUklHR0VSX0xFVl84IHwKKwkJCSAgQ0lSX0ZJRk9DT05fUlhGSUZPQ0xSLCBDSVJfRklGT0NPTik7CisKKwkvKiB0cmlnZ2VyIFRUUiBpbnRlcnJ1cHQgYnkgd3JpdGluZyBvdXQgb25lcywgKHllcywgaXQncyB1Z2x5KSAqLworCWZvciAoaSA9IDA7IGkgPCA5OyBpKyspCisJCW52dF9jaXJfcmVnX3dyaXRlKG52dCwgMHgwMSwgQ0lSX1NUWEZJRk8pOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbnZ0LT50eC5sb2NrLCBmbGFncyk7CisKKwl3YWl0X2V2ZW50KG52dC0+dHgucXVldWUsIG52dC0+dHgudHhfc3RhdGUgPT0gU1RfVFhfUkVRVUVTVCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbnZ0LT50eC5sb2NrLCBmbGFncyk7CisJbnZ0LT50eC50eF9zdGF0ZSA9IFNUX1RYX05PTkU7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbnZ0LT50eC5sb2NrLCBmbGFncyk7CisKKwkvKiByZXN0b3JlIGVuYWJsZWQgaW50ZXJydXB0cyB0byBwcmlvciBzdGF0ZSAqLworCW52dF9jaXJfcmVnX3dyaXRlKG52dCwgaXJlbiwgQ0lSX0lSRU4pOworCisJcmV0dXJuIHJldDsKK30KKworLyogZHVtcCBjb250ZW50cyBvZiB0aGUgbGFzdCByeCBidWZmZXIgd2UgZ290IGZyb20gdGhlIGh3IHJ4IGZpZm8gKi8KK3N0YXRpYyB2b2lkIG52dF9kdW1wX3J4X2J1ZihzdHJ1Y3QgbnZ0X2RldiAqbnZ0KQoreworCWludCBpOworCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzIChsZW4gJWQpOiAiLCBfX2Z1bmNfXywgbnZ0LT5wa3RzKTsKKwlmb3IgKGkgPSAwOyAoaSA8IG52dC0+cGt0cykgJiYgKGkgPCBSWF9CVUZfTEVOKTsgaSsrKQorCQlwcmludGsoS0VSTl9DT05UICIweCUwMnggIiwgbnZ0LT5idWZbaV0pOworCXByaW50ayhLRVJOX0NPTlQgIlxuIik7Cit9CisKKy8qCisgKiBQcm9jZXNzIHJhdyBkYXRhIGluIHJ4IGRyaXZlciBidWZmZXIsIHN0b3JlIGl0IGluIHJhdyBJUiBldmVudCBrZmlmbywKKyAqIHRyaWdnZXIgZGVjb2RlIHdoZW4gYXBwcm9wcmlhdGUuCisgKgorICogV2UgZ2V0IElSIGRhdGEgc2FtcGxlcyBvbmUgYnl0ZSBhdCBhIHRpbWUuIElmIHRoZSBtc2IgaXMgc2V0LCBpdHMgYSBwdWxzZSwKKyAqIG90aGVyd2lzZSBpdHMgYSBzcGFjZS4gVGhlIGxvd2VyIDcgYml0cyBhcmUgdGhlIGNvdW50IG9mIFNBTVBMRV9QRVJJT0QKKyAqIChkZWZhdWx0IDUwdXMpIGludGVydmFscyBmb3IgdGhhdCBwdWxzZS9zcGFjZS4gQSBkaXNjcmV0ZSBzaWduYWwgaXMKKyAqIGZvbGxvd2VkIGJ5IGEgc2VyaWVzIG9mIDB4N2YgcGFja2V0cywgdGhlbiBlaXRoZXIgMHg3PHNvbWV0aGluZz4gb3IgMHg4MAorICogdG8gc2lnbmFsIG1vcmUgSVIgY29taW5nIChyZXBlYXRzKSBvciBlbmQgb2YgSVIsIHJlc3BlY3RpdmVseS4gV2Ugc3RvcmUKKyAqIHNhbXBsZSBkYXRhIGluIHRoZSByYXcgZXZlbnQga2ZpZm8gdW50aWwgd2Ugc2VlIDB4Nzxzb21ldGhpbmc+IChleGNlcHQgZikKKyAqIG9yIDB4ODAsIGF0IHdoaWNoIHRpbWUsIHdlIHRyaWdnZXIgYSBkZWNvZGUgb3BlcmF0aW9uLgorICovCitzdGF0aWMgdm9pZCBudnRfcHJvY2Vzc19yeF9pcl9kYXRhKHN0cnVjdCBudnRfZGV2ICpudnQpCit7CisJREVGSU5FX0lSX1JBV19FVkVOVChyYXdpcik7CisJdW5zaWduZWQgaW50IGNvdW50OworCXUzMiBjYXJyaWVyOworCXU4IHNhbXBsZTsKKwlpbnQgaTsKKworCW52dF9kYmdfdmVyYm9zZSgiJXMgZmlyaW5nIiwgX19mdW5jX18pOworCisJaWYgKGRlYnVnKQorCQludnRfZHVtcF9yeF9idWYobnZ0KTsKKworCWlmIChudnQtPmNhcnJpZXJfZGV0ZWN0X2VuYWJsZWQpCisJCWNhcnJpZXIgPSBudnRfcnhfY2Fycmllcl9kZXRlY3QobnZ0KTsKKworCWNvdW50ID0gbnZ0LT5wa3RzOworCW52dF9kYmdfdmVyYm9zZSgiUHJvY2Vzc2luZyBidWZmZXIgb2YgbGVuICVkIiwgY291bnQpOworCisJaW5pdF9pcl9yYXdfZXZlbnQoJnJhd2lyKTsKKworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCW52dC0+cGt0cy0tOworCQlzYW1wbGUgPSBudnQtPmJ1ZltpXTsKKworCQlyYXdpci5wdWxzZSA9ICgoc2FtcGxlICYgQlVGX1BVTFNFX0JJVCkgIT0gMCk7CisJCXJhd2lyLmR1cmF0aW9uID0gKHNhbXBsZSAmIEJVRl9MRU5fTUFTSykKKwkJCQkJKiBTQU1QTEVfUEVSSU9EICogMTAwMDsKKworCQlpZiAoKHNhbXBsZSAmIEJVRl9MRU5fTUFTSykgPT0gQlVGX0xFTl9NQVNLKSB7CisJCQlpZiAobnZ0LT5yYXdpci5wdWxzZSA9PSByYXdpci5wdWxzZSkKKwkJCQludnQtPnJhd2lyLmR1cmF0aW9uICs9IHJhd2lyLmR1cmF0aW9uOworCQkJZWxzZSB7CisJCQkJbnZ0LT5yYXdpci5kdXJhdGlvbiA9IHJhd2lyLmR1cmF0aW9uOworCQkJCW52dC0+cmF3aXIucHVsc2UgPSByYXdpci5wdWxzZTsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisKKwkJcmF3aXIuZHVyYXRpb24gKz0gbnZ0LT5yYXdpci5kdXJhdGlvbjsKKworCQlpbml0X2lyX3Jhd19ldmVudCgmbnZ0LT5yYXdpcik7CisJCW52dC0+cmF3aXIuZHVyYXRpb24gPSAwOworCQludnQtPnJhd2lyLnB1bHNlID0gcmF3aXIucHVsc2U7CisKKwkJaWYgKHNhbXBsZSA9PSBCVUZfUFVMU0VfQklUKQorCQkJcmF3aXIucHVsc2UgPSBmYWxzZTsKKworCQlpZiAocmF3aXIuZHVyYXRpb24pIHsKKwkJCW52dF9kYmcoIlN0b3JpbmcgJXMgd2l0aCBkdXJhdGlvbiAlZCIsCisJCQkJcmF3aXIucHVsc2UgPyAicHVsc2UiIDogInNwYWNlIiwKKwkJCQlyYXdpci5kdXJhdGlvbik7CisKKwkJCWlyX3Jhd19ldmVudF9zdG9yZShudnQtPnJkZXYsICZyYXdpcik7CisJCX0KKworCQkvKgorCQkgKiBCVUZfUFVMU0VfQklUIGluZGljYXRlcyBlbmQgb2YgSVIgZGF0YSwgQlVGX1JFUEVBVF9CWVRFCisJCSAqIGluZGljYXRlcyBlbmQgb2YgSVIgc2lnbmFsLCBidXQgbmV3IGRhdGEgaW5jb21pbmcuIEluIGJvdGgKKwkJICogY2FzZXMsIGl0IG1lYW5zIHdlJ3JlIHJlYWR5IHRvIGNhbGwgaXJfcmF3X2V2ZW50X2hhbmRsZQorCQkgKi8KKwkJaWYgKChzYW1wbGUgPT0gQlVGX1BVTFNFX0JJVCkgJiYgbnZ0LT5wa3RzKSB7CisJCQludnRfZGJnKCJDYWxsaW5nIGlyX3Jhd19ldmVudF9oYW5kbGUgKHNpZ25hbCBlbmQpXG4iKTsKKwkJCWlyX3Jhd19ldmVudF9oYW5kbGUobnZ0LT5yZGV2KTsKKwkJfQorCX0KKworCW52dF9kYmcoIkNhbGxpbmcgaXJfcmF3X2V2ZW50X2hhbmRsZSAoYnVmZmVyIGVtcHR5KVxuIik7CisJaXJfcmF3X2V2ZW50X2hhbmRsZShudnQtPnJkZXYpOworCisJaWYgKG52dC0+cGt0cykgeworCQludnRfZGJnKCJPZGQsIHBrdHMgc2hvdWxkIGJlIDAgbm93Li4uIChpdHMgJXUpIiwgbnZ0LT5wa3RzKTsKKwkJbnZ0LT5wa3RzID0gMDsKKwl9CisKKwludnRfZGJnX3ZlcmJvc2UoIiVzIGRvbmUiLCBfX2Z1bmNfXyk7Cit9CisKK3N0YXRpYyB2b2lkIG52dF9oYW5kbGVfcnhfZmlmb19vdmVycnVuKHN0cnVjdCBudnRfZGV2ICpudnQpCit7CisJbnZ0X3ByKEtFUk5fV0FSTklORywgIlJYIEZJRk8gb3ZlcnJ1biBkZXRlY3RlZCwgZmx1c2hpbmcgZGF0YSEiKTsKKworCW52dC0+cGt0cyA9IDA7CisJbnZ0X2NsZWFyX2Npcl9maWZvKG52dCk7CisJaXJfcmF3X2V2ZW50X3Jlc2V0KG52dC0+cmRldik7Cit9CisKKy8qIGNvcHkgZGF0YSBmcm9tIGhhcmR3YXJlIHJ4IGZpZm8gaW50byBkcml2ZXIgYnVmZmVyICovCitzdGF0aWMgdm9pZCBudnRfZ2V0X3J4X2lyX2RhdGEoc3RydWN0IG52dF9kZXYgKm52dCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXU4IGZpZm9jb3VudCwgdmFsOworCXVuc2lnbmVkIGludCBiX2lkeDsKKwlib29sIG92ZXJydW4gPSBmYWxzZTsKKwlpbnQgaTsKKworCS8qIEdldCBjb3VudCBvZiBob3cgbWFueSBieXRlcyB0byByZWFkIGZyb20gUlggRklGTyAqLworCWZpZm9jb3VudCA9IG52dF9jaXJfcmVnX3JlYWQobnZ0LCBDSVJfUlhGQ09OVCk7CisJLyogaWYgd2UgZ2V0IDB4ZmYsIHByb2JhYmx5IG1lYW5zIHRoZSBsb2dpY2FsIGRldiBpcyBkaXNhYmxlZCAqLworCWlmIChmaWZvY291bnQgPT0gMHhmZikKKwkJcmV0dXJuOworCS8qIHdhdGNoIG91dCBmb3IgYSBmaWZvIG92ZXJydW4gY29uZGl0aW9uICovCisJZWxzZSBpZiAoZmlmb2NvdW50ID4gUlhfQlVGX0xFTikgeworCQlvdmVycnVuID0gdHJ1ZTsKKwkJZmlmb2NvdW50ID0gUlhfQlVGX0xFTjsKKwl9CisKKwludnRfZGJnKCJhdHRlbXB0aW5nIHRvIGZldGNoICV1IGJ5dGVzIGZyb20gaHcgcnggZmlmbyIsIGZpZm9jb3VudCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbnZ0LT5udnRfbG9jaywgZmxhZ3MpOworCisJYl9pZHggPSBudnQtPnBrdHM7CisKKwkvKiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4sIGJ1dCBsZXRzIGNoZWNrIGFueXdheS4uLiAqLworCWlmIChiX2lkeCArIGZpZm9jb3VudCA+IFJYX0JVRl9MRU4pIHsKKwkJbnZ0X3Byb2Nlc3NfcnhfaXJfZGF0YShudnQpOworCQliX2lkeCA9IDA7CisJfQorCisJLyogUmVhZCBmaWZvY291bnQgYnl0ZXMgZnJvbSBDSVIgU2FtcGxlIFJYIEZJRk8gcmVnaXN0ZXIgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZmlmb2NvdW50OyBpKyspIHsKKwkJdmFsID0gbnZ0X2Npcl9yZWdfcmVhZChudnQsIENJUl9TUlhGSUZPKTsKKwkJbnZ0LT5idWZbYl9pZHggKyBpXSA9IHZhbDsKKwl9CisKKwludnQtPnBrdHMgKz0gZmlmb2NvdW50OworCW52dF9kYmcoIiVzOiBwa3RzIG5vdyAlZCIsIF9fZnVuY19fLCBudnQtPnBrdHMpOworCisJbnZ0X3Byb2Nlc3NfcnhfaXJfZGF0YShudnQpOworCisJaWYgKG92ZXJydW4pCisJCW52dF9oYW5kbGVfcnhfZmlmb19vdmVycnVuKG52dCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZudnQtPm52dF9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIG52dF9jaXJfbG9nX2lycXModTggc3RhdHVzLCB1OCBpcmVuKQoreworCW52dF9wcihLRVJOX0lORk8sICJJUlEgMHglMDJ4IChJUkVOIDB4JTAyeCkgOiVzJXMlcyVzJXMlcyVzJXMlcyIsCisJCXN0YXR1cywgaXJlbiwKKwkJc3RhdHVzICYgQ0lSX0lSU1RTX1JEUgk/ICIgUkRSIgk6ICIiLAorCQlzdGF0dXMgJiBDSVJfSVJTVFNfUlRSCT8gIiBSVFIiCTogIiIsCisJCXN0YXR1cyAmIENJUl9JUlNUU19QRQk/ICIgUEUiCQk6ICIiLAorCQlzdGF0dXMgJiBDSVJfSVJTVFNfUkZPCT8gIiBSRk8iCTogIiIsCisJCXN0YXR1cyAmIENJUl9JUlNUU19URQk/ICIgVEUiCQk6ICIiLAorCQlzdGF0dXMgJiBDSVJfSVJTVFNfVFRSCT8gIiBUVFIiCTogIiIsCisJCXN0YXR1cyAmIENJUl9JUlNUU19URlUJPyAiIFRGVSIJOiAiIiwKKwkJc3RhdHVzICYgQ0lSX0lSU1RTX0dICT8gIiBHSCIJCTogIiIsCisJCXN0YXR1cyAmIH4oQ0lSX0lSU1RTX1JEUiB8IENJUl9JUlNUU19SVFIgfCBDSVJfSVJTVFNfUEUgfAorCQkJICAgQ0lSX0lSU1RTX1JGTyB8IENJUl9JUlNUU19URSB8IENJUl9JUlNUU19UVFIgfAorCQkJICAgQ0lSX0lSU1RTX1RGVSB8IENJUl9JUlNUU19HSCkgPyAiID8iIDogIiIpOworfQorCitzdGF0aWMgYm9vbCBudnRfY2lyX3R4X2luYWN0aXZlKHN0cnVjdCBudnRfZGV2ICpudnQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlib29sIHR4X2luYWN0aXZlOworCXU4IHR4X3N0YXRlOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm52dC0+dHgubG9jaywgZmxhZ3MpOworCXR4X3N0YXRlID0gbnZ0LT50eC50eF9zdGF0ZTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZudnQtPnR4LmxvY2ssIGZsYWdzKTsKKworCXR4X2luYWN0aXZlID0gKHR4X3N0YXRlID09IFNUX1RYX05PTkUpOworCisJcmV0dXJuIHR4X2luYWN0aXZlOworfQorCisvKiBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lIGZvciBpbmNvbWluZyBhbmQgb3V0Z29pbmcgQ0lSIGRhdGEgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBudnRfY2lyX2lzcihpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBudnRfZGV2ICpudnQgPSBkYXRhOworCXU4IHN0YXR1cywgaXJlbiwgY3VyX3N0YXRlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwludnRfZGJnX3ZlcmJvc2UoIiVzIGZpcmluZyIsIF9fZnVuY19fKTsKKworCW52dF9lZm1fZW5hYmxlKG52dCk7CisJbnZ0X3NlbGVjdF9sb2dpY2FsX2RldihudnQsIExPR0lDQUxfREVWX0NJUik7CisJbnZ0X2VmbV9kaXNhYmxlKG52dCk7CisKKwkvKgorCSAqIEdldCBJUiBTdGF0dXMgcmVnaXN0ZXIgY29udGVudHMuIFdyaXRlIDEgdG8gYWNrL2NsZWFyCisJICoKKwkgKiBiaXQ6IHJlZyBuYW1lICAgICAgLSBkZXNjcmlwdGlvbgorCSAqICAgNzogQ0lSX0lSU1RTX1JEUiAtIFJYIERhdGEgUmVhZHkKKwkgKiAgIDY6IENJUl9JUlNUU19SVFIgLSBSWCBGSUZPIFRyaWdnZXIgTGV2ZWwgUmVhY2gKKwkgKiAgIDU6IENJUl9JUlNUU19QRSAgLSBQYWNrZXQgRW5kCisJICogICA0OiBDSVJfSVJTVFNfUkZPIC0gUlggRklGTyBPdmVycnVuIChSRFIgd2lsbCBhbHNvIGJlIHNldCkKKwkgKiAgIDM6IENJUl9JUlNUU19URSAgLSBUWCBGSUZPIEVtcHR5CisJICogICAyOiBDSVJfSVJTVFNfVFRSIC0gVFggRklGTyBUcmlnZ2VyIExldmVsIFJlYWNoCisJICogICAxOiBDSVJfSVJTVFNfVEZVIC0gVFggRklGTyBVbmRlcnJ1bgorCSAqICAgMDogQ0lSX0lSU1RTX0dIICAtIE1pbiBMZW5ndGggRGV0ZWN0ZWQKKwkgKi8KKwlzdGF0dXMgPSBudnRfY2lyX3JlZ19yZWFkKG52dCwgQ0lSX0lSU1RTKTsKKwlpZiAoIXN0YXR1cykgeworCQludnRfZGJnX3ZlcmJvc2UoIiVzIGV4aXRpbmcsIElSU1RTIDB4MCIsIF9fZnVuY19fKTsKKwkJbnZ0X2Npcl9yZWdfd3JpdGUobnZ0LCAweGZmLCBDSVJfSVJTVFMpOworCQlyZXR1cm4gSVJRX1JFVFZBTChJUlFfTk9ORSk7CisJfQorCisJLyogYWNrL2NsZWFyIGFsbCBpcnEgZmxhZ3Mgd2UndmUgZ290ICovCisJbnZ0X2Npcl9yZWdfd3JpdGUobnZ0LCBzdGF0dXMsIENJUl9JUlNUUyk7CisJbnZ0X2Npcl9yZWdfd3JpdGUobnZ0LCAwLCBDSVJfSVJTVFMpOworCisJLyogSW50ZXJydXB0IG1heSBiZSBzaGFyZWQgd2l0aCBDSVIgV2FrZSwgYmFpbCBpZiBDSVIgbm90IGVuYWJsZWQgKi8KKwlpcmVuID0gbnZ0X2Npcl9yZWdfcmVhZChudnQsIENJUl9JUkVOKTsKKwlpZiAoIWlyZW4pIHsKKwkJbnZ0X2RiZ192ZXJib3NlKCIlcyBleGl0aW5nLCBDSVIgbm90IGVuYWJsZWQiLCBfX2Z1bmNfXyk7CisJCXJldHVybiBJUlFfUkVUVkFMKElSUV9OT05FKTsKKwl9CisKKwlpZiAoZGVidWcpCisJCW52dF9jaXJfbG9nX2lycXMoc3RhdHVzLCBpcmVuKTsKKworCWlmIChzdGF0dXMgJiBDSVJfSVJTVFNfUlRSKSB7CisJCS8qIEZJWE1FOiBhZGQgY29kZSBmb3Igc3R1ZHkvbGVhcm4gbW9kZSAqLworCQkvKiBXZSBvbmx5IGRvIHJ4IGlmIG5vdCB0eCdpbmcgKi8KKwkJaWYgKG52dF9jaXJfdHhfaW5hY3RpdmUobnZ0KSkKKwkJCW52dF9nZXRfcnhfaXJfZGF0YShudnQpOworCX0KKworCWlmIChzdGF0dXMgJiBDSVJfSVJTVFNfUEUpIHsKKwkJaWYgKG52dF9jaXJfdHhfaW5hY3RpdmUobnZ0KSkKKwkJCW52dF9nZXRfcnhfaXJfZGF0YShudnQpOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZudnQtPm52dF9sb2NrLCBmbGFncyk7CisKKwkJY3VyX3N0YXRlID0gbnZ0LT5zdHVkeV9zdGF0ZTsKKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZudnQtPm52dF9sb2NrLCBmbGFncyk7CisKKwkJaWYgKGN1cl9zdGF0ZSA9PSBTVF9TVFVEWV9OT05FKQorCQkJbnZ0X2NsZWFyX2Npcl9maWZvKG52dCk7CisJfQorCisJaWYgKHN0YXR1cyAmIENJUl9JUlNUU19URSkKKwkJbnZ0X2NsZWFyX3R4X2ZpZm8obnZ0KTsKKworCWlmIChzdGF0dXMgJiBDSVJfSVJTVFNfVFRSKSB7CisJCXVuc2lnbmVkIGludCBwb3MsIGNvdW50OworCQl1OCB0bXA7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJm52dC0+dHgubG9jaywgZmxhZ3MpOworCisJCXBvcyA9IG52dC0+dHguY3VyX2J1Zl9udW07CisJCWNvdW50ID0gbnZ0LT50eC5idWZfY291bnQ7CisKKwkJLyogV3JpdGUgZGF0YSBpbnRvIHRoZSBoYXJkd2FyZSB0eCBmaWZvIHdoaWxlIHBvcyA8IGNvdW50ICovCisJCWlmIChwb3MgPCBjb3VudCkgeworCQkJbnZ0X2Npcl9yZWdfd3JpdGUobnZ0LCBudnQtPnR4LmJ1Zltwb3NdLCBDSVJfU1RYRklGTyk7CisJCQludnQtPnR4LmN1cl9idWZfbnVtKys7CisJCS8qIERpc2FibGUgVFggRklGTyBUcmlnZ2VyIExldmVsIFJlYWNoIChUVFIpIGludGVycnVwdCAqLworCQl9IGVsc2UgeworCQkJdG1wID0gbnZ0X2Npcl9yZWdfcmVhZChudnQsIENJUl9JUkVOKTsKKwkJCW52dF9jaXJfcmVnX3dyaXRlKG52dCwgdG1wICYgfkNJUl9JUkVOX1RUUiwgQ0lSX0lSRU4pOworCQl9CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbnZ0LT50eC5sb2NrLCBmbGFncyk7CisKKwl9CisKKwlpZiAoc3RhdHVzICYgQ0lSX0lSU1RTX1RGVSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmbnZ0LT50eC5sb2NrLCBmbGFncyk7CisJCWlmIChudnQtPnR4LnR4X3N0YXRlID09IFNUX1RYX1JFUExZKSB7CisJCQludnQtPnR4LnR4X3N0YXRlID0gU1RfVFhfUkVRVUVTVDsKKwkJCXdha2VfdXAoJm52dC0+dHgucXVldWUpOworCQl9CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm52dC0+dHgubG9jaywgZmxhZ3MpOworCX0KKworCW52dF9kYmdfdmVyYm9zZSgiJXMgZG9uZSIsIF9fZnVuY19fKTsKKwlyZXR1cm4gSVJRX1JFVFZBTChJUlFfSEFORExFRCk7Cit9CisKKy8qIEludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUgZm9yIENJUiBXYWtlICovCitzdGF0aWMgaXJxcmV0dXJuX3QgbnZ0X2Npcl93YWtlX2lzcihpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXU4IHN0YXR1cywgaXJlbiwgdmFsOworCXN0cnVjdCBudnRfZGV2ICpudnQgPSBkYXRhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwludnRfZGJnX3dha2UoIiVzIGZpcmluZyIsIF9fZnVuY19fKTsKKworCXN0YXR1cyA9IG52dF9jaXJfd2FrZV9yZWdfcmVhZChudnQsIENJUl9XQUtFX0lSU1RTKTsKKwlpZiAoIXN0YXR1cykKKwkJcmV0dXJuIElSUV9SRVRWQUwoSVJRX05PTkUpOworCisJaWYgKHN0YXR1cyAmIENJUl9XQUtFX0lSU1RTX0lSX1BFTkRJTkcpCisJCW52dF9jbGVhcl9jaXJfd2FrZV9maWZvKG52dCk7CisKKwludnRfY2lyX3dha2VfcmVnX3dyaXRlKG52dCwgc3RhdHVzLCBDSVJfV0FLRV9JUlNUUyk7CisJbnZ0X2Npcl93YWtlX3JlZ193cml0ZShudnQsIDAsIENJUl9XQUtFX0lSU1RTKTsKKworCS8qIEludGVycnVwdCBtYXkgYmUgc2hhcmVkIHdpdGggQ0lSLCBiYWlsIGlmIFdha2Ugbm90IGVuYWJsZWQgKi8KKwlpcmVuID0gbnZ0X2Npcl93YWtlX3JlZ19yZWFkKG52dCwgQ0lSX1dBS0VfSVJFTik7CisJaWYgKCFpcmVuKSB7CisJCW52dF9kYmdfd2FrZSgiJXMgZXhpdGluZywgd2FrZSBub3QgZW5hYmxlZCIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIElSUV9SRVRWQUwoSVJRX0hBTkRMRUQpOworCX0KKworCWlmICgoc3RhdHVzICYgQ0lSX1dBS0VfSVJTVFNfUEUpICYmCisJICAgIChudnQtPndha2Vfc3RhdGUgPT0gU1RfV0FLRV9TVEFSVCkpIHsKKwkJd2hpbGUgKG52dF9jaXJfd2FrZV9yZWdfcmVhZChudnQsIENJUl9XQUtFX1JEX0ZJRk9fT05MWV9JRFgpKSB7CisJCQl2YWwgPSBudnRfY2lyX3dha2VfcmVnX3JlYWQobnZ0LCBDSVJfV0FLRV9SRF9GSUZPX09OTFkpOworCQkJbnZ0X2RiZygic2V0dGluZyB3YWtlIHVwIGtleTogMHgleCIsIHZhbCk7CisJCX0KKworCQludnRfY2lyX3dha2VfcmVnX3dyaXRlKG52dCwgMCwgQ0lSX1dBS0VfSVJFTik7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZudnQtPm52dF9sb2NrLCBmbGFncyk7CisJCW52dC0+d2FrZV9zdGF0ZSA9IFNUX1dBS0VfRklOSVNIOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZudnQtPm52dF9sb2NrLCBmbGFncyk7CisJfQorCisJbnZ0X2RiZ193YWtlKCIlcyBkb25lIiwgX19mdW5jX18pOworCXJldHVybiBJUlFfUkVUVkFMKElSUV9IQU5ETEVEKTsKK30KKworc3RhdGljIHZvaWQgbnZ0X2VuYWJsZV9jaXIoc3RydWN0IG52dF9kZXYgKm52dCkKK3sKKwkvKiBzZXQgZnVuY3Rpb24gZW5hYmxlIGZsYWdzICovCisJbnZ0X2Npcl9yZWdfd3JpdGUobnZ0LCBDSVJfSVJDT05fVFhFTiB8IENJUl9JUkNPTl9SWEVOIHwKKwkJCSAgQ0lSX0lSQ09OX1JYSU5WIHwgQ0lSX0lSQ09OX1NBTVBMRV9QRVJJT0RfU0VMLAorCQkJICBDSVJfSVJDT04pOworCisJbnZ0X2VmbV9lbmFibGUobnZ0KTsKKworCS8qIGVuYWJsZSB0aGUgQ0lSIGxvZ2ljYWwgZGV2aWNlICovCisJbnZ0X3NlbGVjdF9sb2dpY2FsX2RldihudnQsIExPR0lDQUxfREVWX0NJUik7CisJbnZ0X2NyX3dyaXRlKG52dCwgTE9HSUNBTF9ERVZfRU5BQkxFLCBDUl9MT0dJQ0FMX0RFVl9FTik7CisKKwludnRfZWZtX2Rpc2FibGUobnZ0KTsKKworCS8qIGNsZWFyIGFsbCBwZW5kaW5nIGludGVycnVwdHMgKi8KKwludnRfY2lyX3JlZ193cml0ZShudnQsIDB4ZmYsIENJUl9JUlNUUyk7CisKKwkvKiBlbmFibGUgaW50ZXJydXB0cyAqLworCW52dF9zZXRfY2lyX2lyZW4obnZ0KTsKK30KKworc3RhdGljIHZvaWQgbnZ0X2Rpc2FibGVfY2lyKHN0cnVjdCBudnRfZGV2ICpudnQpCit7CisJLyogZGlzYWJsZSBDSVIgaW50ZXJydXB0cyAqLworCW52dF9jaXJfcmVnX3dyaXRlKG52dCwgMCwgQ0lSX0lSRU4pOworCisJLyogY2xlYXIgYW55IGFuZCBhbGwgcGVuZGluZyBpbnRlcnJ1cHRzICovCisJbnZ0X2Npcl9yZWdfd3JpdGUobnZ0LCAweGZmLCBDSVJfSVJTVFMpOworCisJLyogY2xlYXIgYWxsIGZ1bmN0aW9uIGVuYWJsZSBmbGFncyAqLworCW52dF9jaXJfcmVnX3dyaXRlKG52dCwgMCwgQ0lSX0lSQ09OKTsKKworCS8qIGNsZWFyIGhhcmR3YXJlIHJ4IGFuZCB0eCBmaWZvcyAqLworCW52dF9jbGVhcl9jaXJfZmlmbyhudnQpOworCW52dF9jbGVhcl90eF9maWZvKG52dCk7CisKKwludnRfZWZtX2VuYWJsZShudnQpOworCisJLyogZGlzYWJsZSB0aGUgQ0lSIGxvZ2ljYWwgZGV2aWNlICovCisJbnZ0X3NlbGVjdF9sb2dpY2FsX2RldihudnQsIExPR0lDQUxfREVWX0NJUik7CisJbnZ0X2NyX3dyaXRlKG52dCwgTE9HSUNBTF9ERVZfRElTQUJMRSwgQ1JfTE9HSUNBTF9ERVZfRU4pOworCisJbnZ0X2VmbV9kaXNhYmxlKG52dCk7Cit9CisKK3N0YXRpYyBpbnQgbnZ0X29wZW4oc3RydWN0IHJjX2RldiAqZGV2KQoreworCXN0cnVjdCBudnRfZGV2ICpudnQgPSBkZXYtPnByaXY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZudnQtPm52dF9sb2NrLCBmbGFncyk7CisJbnZ0LT5pbl91c2UgPSB0cnVlOworCW52dF9lbmFibGVfY2lyKG52dCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbnZ0LT5udnRfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG52dF9jbG9zZShzdHJ1Y3QgcmNfZGV2ICpkZXYpCit7CisJc3RydWN0IG52dF9kZXYgKm52dCA9IGRldi0+cHJpdjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm52dC0+bnZ0X2xvY2ssIGZsYWdzKTsKKwludnQtPmluX3VzZSA9IGZhbHNlOworCW52dF9kaXNhYmxlX2NpcihudnQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm52dC0+bnZ0X2xvY2ssIGZsYWdzKTsKK30KKworLyogQWxsb2NhdGUgbWVtb3J5LCBwcm9iZSBoYXJkd2FyZSwgYW5kIGluaXRpYWxpemUgZXZlcnl0aGluZyAqLworc3RhdGljIGludCBudnRfcHJvYmUoc3RydWN0IHBucF9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwbnBfZGV2aWNlX2lkICpkZXZfaWQpCit7CisJc3RydWN0IG52dF9kZXYgKm52dDsKKwlzdHJ1Y3QgcmNfZGV2ICpyZGV2OworCWludCByZXQgPSAtRU5PTUVNOworCisJbnZ0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG52dF9kZXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW52dCkKKwkJcmV0dXJuIHJldDsKKworCS8qIGlucHV0IGRldmljZSBmb3IgSVIgcmVtb3RlIChhbmQgdHgpICovCisJcmRldiA9IHJjX2FsbG9jYXRlX2RldmljZSgpOworCWlmICghcmRldikKKwkJZ290byBmYWlsdXJlOworCisJcmV0ID0gLUVOT0RFVjsKKwkvKiB2YWxpZGF0ZSBwbnAgcmVzb3VyY2VzICovCisJaWYgKCFwbnBfcG9ydF92YWxpZChwZGV2LCAwKSB8fAorCSAgICBwbnBfcG9ydF9sZW4ocGRldiwgMCkgPCBDSVJfSU9SRUdfTEVOR1RIKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIklSIFBOUCBQb3J0IG5vdCB2YWxpZCFcbiIpOworCQlnb3RvIGZhaWx1cmU7CisJfQorCisJaWYgKCFwbnBfaXJxX3ZhbGlkKHBkZXYsIDApKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIlBOUCBJUlEgbm90IHZhbGlkIVxuIik7CisJCWdvdG8gZmFpbHVyZTsKKwl9CisKKwlpZiAoIXBucF9wb3J0X3ZhbGlkKHBkZXYsIDEpIHx8CisJICAgIHBucF9wb3J0X2xlbihwZGV2LCAxKSA8IENJUl9JT1JFR19MRU5HVEgpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiV2FrZSBQTlAgUG9ydCBub3QgdmFsaWQhXG4iKTsKKwkJZ290byBmYWlsdXJlOworCX0KKworCW52dC0+Y2lyX2FkZHIgPSBwbnBfcG9ydF9zdGFydChwZGV2LCAwKTsKKwludnQtPmNpcl9pcnEgID0gcG5wX2lycShwZGV2LCAwKTsKKworCW52dC0+Y2lyX3dha2VfYWRkciA9IHBucF9wb3J0X3N0YXJ0KHBkZXYsIDEpOworCS8qIGlycSBpcyBhbHdheXMgc2hhcmVkIGJldHdlZW4gY2lyIGFuZCBjaXIgd2FrZSAqLworCW52dC0+Y2lyX3dha2VfaXJxICA9IG52dC0+Y2lyX2lycTsKKworCW52dC0+Y3JfZWZpciA9IENSX0VGSVI7CisJbnZ0LT5jcl9lZmRyID0gQ1JfRUZEUjsKKworCXNwaW5fbG9ja19pbml0KCZudnQtPm52dF9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmbnZ0LT50eC5sb2NrKTsKKwlpbml0X2lyX3Jhd19ldmVudCgmbnZ0LT5yYXdpcik7CisKKwlyZXQgPSAtRUJVU1k7CisJLyogbm93IGNsYWltIHJlc291cmNlcyAqLworCWlmICghcmVxdWVzdF9yZWdpb24obnZ0LT5jaXJfYWRkciwKKwkJCSAgICBDSVJfSU9SRUdfTEVOR1RILCBOVlRfRFJJVkVSX05BTUUpKQorCQlnb3RvIGZhaWx1cmU7CisKKwlpZiAocmVxdWVzdF9pcnEobnZ0LT5jaXJfaXJxLCBudnRfY2lyX2lzciwgSVJRRl9TSEFSRUQsCisJCQlOVlRfRFJJVkVSX05BTUUsICh2b2lkICopbnZ0KSkKKwkJZ290byBmYWlsdXJlOworCisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihudnQtPmNpcl93YWtlX2FkZHIsCisJCQkgICAgQ0lSX0lPUkVHX0xFTkdUSCwgTlZUX0RSSVZFUl9OQU1FKSkKKwkJZ290byBmYWlsdXJlOworCisJaWYgKHJlcXVlc3RfaXJxKG52dC0+Y2lyX3dha2VfaXJxLCBudnRfY2lyX3dha2VfaXNyLCBJUlFGX1NIQVJFRCwKKwkJCU5WVF9EUklWRVJfTkFNRSwgKHZvaWQgKiludnQpKQorCQlnb3RvIGZhaWx1cmU7CisKKwlwbnBfc2V0X2RydmRhdGEocGRldiwgbnZ0KTsKKwludnQtPnBkZXYgPSBwZGV2OworCisJaW5pdF93YWl0cXVldWVfaGVhZCgmbnZ0LT50eC5xdWV1ZSk7CisKKwlyZXQgPSBudnRfaHdfZGV0ZWN0KG52dCk7CisJaWYgKHJldCkKKwkJZ290byBmYWlsdXJlOworCisJLyogSW5pdGlhbGl6ZSBDSVIgJiBDSVIgV2FrZSBMb2dpY2FsIERldmljZXMgKi8KKwludnRfZWZtX2VuYWJsZShudnQpOworCW52dF9jaXJfbGRldl9pbml0KG52dCk7CisJbnZ0X2Npcl93YWtlX2xkZXZfaW5pdChudnQpOworCW52dF9lZm1fZGlzYWJsZShudnQpOworCisJLyogSW5pdGlhbGl6ZSBDSVIgJiBDSVIgV2FrZSBDb25maWcgUmVnaXN0ZXJzICovCisJbnZ0X2Npcl9yZWdzX2luaXQobnZ0KTsKKwludnRfY2lyX3dha2VfcmVnc19pbml0KG52dCk7CisKKwkvKiBTZXQgdXAgdGhlIHJjIGRldmljZSAqLworCXJkZXYtPnByaXYgPSBudnQ7CisJcmRldi0+ZHJpdmVyX3R5cGUgPSBSQ19EUklWRVJfSVJfUkFXOworCXJkZXYtPmFsbG93ZWRfcHJvdG9zID0gUkNfVFlQRV9BTEw7CisJcmRldi0+b3BlbiA9IG52dF9vcGVuOworCXJkZXYtPmNsb3NlID0gbnZ0X2Nsb3NlOworCXJkZXYtPnR4X2lyID0gbnZ0X3R4X2lyOworCXJkZXYtPnNfdHhfY2FycmllciA9IG52dF9zZXRfdHhfY2FycmllcjsKKwlyZGV2LT5pbnB1dF9uYW1lID0gIk51dm90b24gdzgzNng3aGcgSW5mcmFyZWQgUmVtb3RlIFRyYW5zY2VpdmVyIjsKKwlyZGV2LT5pbnB1dF9pZC5idXN0eXBlID0gQlVTX0hPU1Q7CisJcmRldi0+aW5wdXRfaWQudmVuZG9yID0gUENJX1ZFTkRPUl9JRF9XSU5CT05EMjsKKwlyZGV2LT5pbnB1dF9pZC5wcm9kdWN0ID0gbnZ0LT5jaGlwX21ham9yOworCXJkZXYtPmlucHV0X2lkLnZlcnNpb24gPSBudnQtPmNoaXBfbWlub3I7CisJcmRldi0+ZHJpdmVyX25hbWUgPSBOVlRfRFJJVkVSX05BTUU7CisJcmRldi0+bWFwX25hbWUgPSBSQ19NQVBfUkM2X01DRTsKKyNpZiAwCisJcmRldi0+bWluX3RpbWVvdXQgPSBYWVo7CisJcmRldi0+bWF4X3RpbWVvdXQgPSBYWVo7CisJcmRldi0+dGltZW91dCA9IFhZWjsKKwkvKiByeCByZXNvbHV0aW9uIGlzIGhhcmR3aXJlZCB0byA1MHVzIGF0bSwgMSwgMjUsIDEwMCBhbHNvIHBvc3NpYmxlICovCisJcmRldi0+cnhfcmVzb2x1dGlvbiA9IFhZWjsKKwkvKiB0eCBiaXRzICovCisJcmRldi0+dHhfcmVzb2x1dGlvbiA9IFhZWjsKKyNlbmRpZgorCisJcmV0ID0gcmNfcmVnaXN0ZXJfZGV2aWNlKHJkZXYpOworCWlmIChyZXQpCisJCWdvdG8gZmFpbHVyZTsKKworCWRldmljZV9zZXRfd2FrZXVwX2NhcGFibGUoJnBkZXYtPmRldiwgMSk7CisJZGV2aWNlX3NldF93YWtldXBfZW5hYmxlKCZwZGV2LT5kZXYsIDEpOworCW52dC0+cmRldiA9IHJkZXY7CisJbnZ0X3ByKEtFUk5fTk9USUNFLCAiZHJpdmVyIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBsb2FkZWRcbiIpOworCWlmIChkZWJ1ZykgeworCQljaXJfZHVtcF9yZWdzKG52dCk7CisJCWNpcl93YWtlX2R1bXBfcmVncyhudnQpOworCX0KKworCXJldHVybiAwOworCitmYWlsdXJlOgorCWlmIChudnQtPmNpcl9pcnEpCisJCWZyZWVfaXJxKG52dC0+Y2lyX2lycSwgbnZ0KTsKKwlpZiAobnZ0LT5jaXJfYWRkcikKKwkJcmVsZWFzZV9yZWdpb24obnZ0LT5jaXJfYWRkciwgQ0lSX0lPUkVHX0xFTkdUSCk7CisKKwlpZiAobnZ0LT5jaXJfd2FrZV9pcnEpCisJCWZyZWVfaXJxKG52dC0+Y2lyX3dha2VfaXJxLCBudnQpOworCWlmIChudnQtPmNpcl93YWtlX2FkZHIpCisJCXJlbGVhc2VfcmVnaW9uKG52dC0+Y2lyX3dha2VfYWRkciwgQ0lSX0lPUkVHX0xFTkdUSCk7CisKKwlyY19mcmVlX2RldmljZShyZGV2KTsKKwlrZnJlZShudnQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IG52dF9yZW1vdmUoc3RydWN0IHBucF9kZXYgKnBkZXYpCit7CisJc3RydWN0IG52dF9kZXYgKm52dCA9IHBucF9nZXRfZHJ2ZGF0YShwZGV2KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm52dC0+bnZ0X2xvY2ssIGZsYWdzKTsKKwkvKiBkaXNhYmxlIENJUiAqLworCW52dF9jaXJfcmVnX3dyaXRlKG52dCwgMCwgQ0lSX0lSRU4pOworCW52dF9kaXNhYmxlX2NpcihudnQpOworCS8qIGVuYWJsZSBDSVIgV2FrZSAoZm9yIElSIHBvd2VyLW9uKSAqLworCW52dF9lbmFibGVfd2FrZShudnQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm52dC0+bnZ0X2xvY2ssIGZsYWdzKTsKKworCS8qIGZyZWUgcmVzb3VyY2VzICovCisJZnJlZV9pcnEobnZ0LT5jaXJfaXJxLCBudnQpOworCWZyZWVfaXJxKG52dC0+Y2lyX3dha2VfaXJxLCBudnQpOworCXJlbGVhc2VfcmVnaW9uKG52dC0+Y2lyX2FkZHIsIENJUl9JT1JFR19MRU5HVEgpOworCXJlbGVhc2VfcmVnaW9uKG52dC0+Y2lyX3dha2VfYWRkciwgQ0lSX0lPUkVHX0xFTkdUSCk7CisKKwlyY191bnJlZ2lzdGVyX2RldmljZShudnQtPnJkZXYpOworCisJa2ZyZWUobnZ0KTsKK30KKworc3RhdGljIGludCBudnRfc3VzcGVuZChzdHJ1Y3QgcG5wX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCBudnRfZGV2ICpudnQgPSBwbnBfZ2V0X2RydmRhdGEocGRldik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCW52dF9kYmcoIiVzIGNhbGxlZCIsIF9fZnVuY19fKTsKKworCS8qIHplcm8gb3V0IG1pc2Mgc3RhdGUgdHJhY2tpbmcgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmbnZ0LT5udnRfbG9jaywgZmxhZ3MpOworCW52dC0+c3R1ZHlfc3RhdGUgPSBTVF9TVFVEWV9OT05FOworCW52dC0+d2FrZV9zdGF0ZSA9IFNUX1dBS0VfTk9ORTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZudnQtPm52dF9sb2NrLCBmbGFncyk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbnZ0LT50eC5sb2NrLCBmbGFncyk7CisJbnZ0LT50eC50eF9zdGF0ZSA9IFNUX1RYX05PTkU7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbnZ0LT50eC5sb2NrLCBmbGFncyk7CisKKwkvKiBkaXNhYmxlIGFsbCBDSVIgaW50ZXJydXB0cyAqLworCW52dF9jaXJfcmVnX3dyaXRlKG52dCwgMCwgQ0lSX0lSRU4pOworCisJbnZ0X2VmbV9lbmFibGUobnZ0KTsKKworCS8qIGRpc2FibGUgY2lyIGxvZ2ljYWwgZGV2ICovCisJbnZ0X3NlbGVjdF9sb2dpY2FsX2RldihudnQsIExPR0lDQUxfREVWX0NJUik7CisJbnZ0X2NyX3dyaXRlKG52dCwgTE9HSUNBTF9ERVZfRElTQUJMRSwgQ1JfTE9HSUNBTF9ERVZfRU4pOworCisJbnZ0X2VmbV9kaXNhYmxlKG52dCk7CisKKwkvKiBtYWtlIHN1cmUgd2FrZSBpcyBlbmFibGVkICovCisJbnZ0X2VuYWJsZV93YWtlKG52dCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBudnRfcmVzdW1lKHN0cnVjdCBwbnBfZGV2ICpwZGV2KQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBudnRfZGV2ICpudnQgPSBwbnBfZ2V0X2RydmRhdGEocGRldik7CisKKwludnRfZGJnKCIlcyBjYWxsZWQiLCBfX2Z1bmNfXyk7CisKKwkvKiBvcGVuIGludGVycnVwdCAqLworCW52dF9zZXRfY2lyX2lyZW4obnZ0KTsKKworCS8qIEVuYWJsZSBDSVIgbG9naWNhbCBkZXZpY2UgKi8KKwludnRfZWZtX2VuYWJsZShudnQpOworCW52dF9zZWxlY3RfbG9naWNhbF9kZXYobnZ0LCBMT0dJQ0FMX0RFVl9DSVIpOworCW52dF9jcl93cml0ZShudnQsIExPR0lDQUxfREVWX0VOQUJMRSwgQ1JfTE9HSUNBTF9ERVZfRU4pOworCisJbnZ0X2VmbV9kaXNhYmxlKG52dCk7CisKKwludnRfY2lyX3JlZ3NfaW5pdChudnQpOworCW52dF9jaXJfd2FrZV9yZWdzX2luaXQobnZ0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG52dF9zaHV0ZG93bihzdHJ1Y3QgcG5wX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgbnZ0X2RldiAqbnZ0ID0gcG5wX2dldF9kcnZkYXRhKHBkZXYpOworCW52dF9lbmFibGVfd2FrZShudnQpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHBucF9kZXZpY2VfaWQgbnZ0X2lkc1tdID0geworCXsgIldFQzA1MzAiLCAwIH0sICAgLyogQ0lSICovCisJeyAiTlROMDUzMCIsIDAgfSwgICAvKiBDSVIgZm9yIG5ldyBjaGlwJ3MgcG5wIGlkKi8KKwl7ICIiLCAwIH0sCit9OworCitzdGF0aWMgc3RydWN0IHBucF9kcml2ZXIgbnZ0X2RyaXZlciA9IHsKKwkubmFtZQkJPSBOVlRfRFJJVkVSX05BTUUsCisJLmlkX3RhYmxlCT0gbnZ0X2lkcywKKwkuZmxhZ3MJCT0gUE5QX0RSSVZFUl9SRVNfRE9fTk9UX0NIQU5HRSwKKwkucHJvYmUJCT0gbnZ0X3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AobnZ0X3JlbW92ZSksCisJLnN1c3BlbmQJPSBudnRfc3VzcGVuZCwKKwkucmVzdW1lCQk9IG52dF9yZXN1bWUsCisJLnNodXRkb3duCT0gbnZ0X3NodXRkb3duLAorfTsKKworaW50IG52dF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBucF9yZWdpc3Rlcl9kcml2ZXIoJm52dF9kcml2ZXIpOworfQorCit2b2lkIG52dF9leGl0KHZvaWQpCit7CisJcG5wX3VucmVnaXN0ZXJfZHJpdmVyKCZudnRfZHJpdmVyKTsKK30KKworbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJFbmFibGUgZGVidWdnaW5nIG91dHB1dCIpOworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBucCwgbnZ0X2lkcyk7CitNT0RVTEVfREVTQ1JJUFRJT04oIk51dm90b24gVzgzNjY3SEctQSAmIFc4MzY3N0hHLUkgQ0lSIGRyaXZlciIpOworCitNT0RVTEVfQVVUSE9SKCJKYXJvZCBXaWxzb24gPGphcm9kQHJlZGhhdC5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK21vZHVsZV9pbml0KG52dF9pbml0KTsKK21vZHVsZV9leGl0KG52dF9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMvbnV2b3Rvbi1jaXIuaCBiL2RyaXZlcnMvbWVkaWEvcmMvbnV2b3Rvbi1jaXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGY4MjM1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9udXZvdG9uLWNpci5oCkBAIC0wLDAgKzEsNDA3IEBACisvKgorICogRHJpdmVyIGZvciBOdXZvdG9uIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24gdzgzNjY3aGcvdzgzNjc3aGctaSBDSVIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSmFyb2QgV2lsc29uIDxqYXJvZEByZWRoYXQuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA5IE51dm90b24gUFMgVGVhbQorICoKKyAqIFNwZWNpYWwgdGhhbmtzIHRvIE51dm90b24gZm9yIHByb3ZpZGluZyBoYXJkd2FyZSwgc3BlYyBzaGVldHMgYW5kCisgKiBzYW1wbGUgY29kZSB1cG9uIHdoaWNoIHBvcnRpb25zIG9mIHRoaXMgZHJpdmVyIGFyZSBiYXNlZC4gSW5kaXJlY3QKKyAqIHRoYW5rcyBhbHNvIHRvIE1heGltIExldml0c2t5LCB3aG9zZSBlbmVfaXIgZHJpdmVyIHRoaXMgZHJpdmVyIGlzCisgKiBtb2RlbGVkIGFmdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyAqIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAqIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisKKy8qIHBsYXRmb3JtIGRyaXZlciBuYW1lIHRvIHJlZ2lzdGVyICovCisjZGVmaW5lIE5WVF9EUklWRVJfTkFNRSAibnV2b3Rvbi1jaXIiCisKKy8qIGRlYnVnZ2luZyBtb2R1bGUgcGFyYW1ldGVyICovCitzdGF0aWMgaW50IGRlYnVnOworCisKKyNkZWZpbmUgbnZ0X3ByKGxldmVsLCB0ZXh0LCAuLi4pIFwKKwlwcmludGsobGV2ZWwgS0JVSUxEX01PRE5BTUUgIjogIiB0ZXh0LCAjIyBfX1ZBX0FSR1NfXykKKworI2RlZmluZSBudnRfZGJnKHRleHQsIC4uLikgXAorCWlmIChkZWJ1ZykgXAorCQlwcmludGsoS0VSTl9ERUJVRyBcCisJCQlLQlVJTERfTU9ETkFNRSAiOiAiIHRleHQgIlxuIiAsICMjIF9fVkFfQVJHU19fKQorCisjZGVmaW5lIG52dF9kYmdfdmVyYm9zZSh0ZXh0LCAuLi4pIFwKKwlpZiAoZGVidWcgPiAxKSBcCisJCXByaW50ayhLRVJOX0RFQlVHIFwKKwkJCUtCVUlMRF9NT0ROQU1FICI6ICIgdGV4dCAiXG4iICwgIyMgX19WQV9BUkdTX18pCisKKyNkZWZpbmUgbnZ0X2RiZ193YWtlKHRleHQsIC4uLikgXAorCWlmIChkZWJ1ZyA+IDIpIFwKKwkJcHJpbnRrKEtFUk5fREVCVUcgXAorCQkJS0JVSUxEX01PRE5BTUUgIjogIiB0ZXh0ICJcbiIgLCAjIyBfX1ZBX0FSR1NfXykKKworCisvKgorICogT3JpZ2luYWwgbGlyYyBkcml2ZXIgc2FpZCBtaW4gdmFsdWUgb2YgNzYsIGFuZCByZWNvbW1lbmRlZCB2YWx1ZSBvZiAyNTYKKyAqIGZvciB0aGUgYnVmZmVyIGxlbmd0aCwgYnV0IHRoZW4gdXNlZCAyMDQ4LiBOZXZlciBtaW5kIHRoYXQgdGhlIHNpemUgb2YgdGhlCisgKiBSWCBGSUZPIGlzIDMyIGJ5dGVzLi4uIFNvIEknbSB1c2luZyAzMiBmb3IgUlggYW5kIDI1NiBmb3IgVFggYXRtLCBidXQgSSdtCisgKiBub3Qgc3VyZSBpZiBtYXliZSB0aGF0IFRYIHZhbHVlIGlzIG9mZiBieSBhIGZhY3RvciBvZiA4IChiaXRzIHZzLiBieXRlcyksCisgKiBhbmQgSSBkb24ndCBoYXZlIFRYLWNhcGFibGUgaGFyZHdhcmUgdG8gdGVzdC9kZWJ1ZyBvbi4uLgorICovCisjZGVmaW5lIFRYX0JVRl9MRU4gMjU2CisjZGVmaW5lIFJYX0JVRl9MRU4gMzIKKworc3RydWN0IG52dF9kZXYgeworCXN0cnVjdCBwbnBfZGV2ICpwZGV2OworCXN0cnVjdCByY19kZXYgKnJkZXY7CisJc3RydWN0IGlyX3Jhd19ldmVudCByYXdpcjsKKworCXNwaW5sb2NrX3QgbnZ0X2xvY2s7CisJYm9vbCBpbl91c2U7CisKKwkvKiBmb3IgcnggKi8KKwl1OCBidWZbUlhfQlVGX0xFTl07CisJdW5zaWduZWQgaW50IHBrdHM7CisKKwlzdHJ1Y3QgeworCQlzcGlubG9ja190IGxvY2s7CisJCXU4IGJ1ZltUWF9CVUZfTEVOXTsKKwkJdW5zaWduZWQgaW50IGJ1Zl9jb3VudDsKKwkJdW5zaWduZWQgaW50IGN1cl9idWZfbnVtOworCQl3YWl0X3F1ZXVlX2hlYWRfdCBxdWV1ZTsKKwkJdTggdHhfc3RhdGU7CisJfSB0eDsKKworCS8qIEVGRVIgQ29uZmlnIHJlZ2lzdGVyIGluZGV4L2RhdGEgcGFpciAqLworCXU4IGNyX2VmaXI7CisJdTggY3JfZWZkcjsKKworCS8qIGhhcmR3YXJlIEkvTyBzZXR0aW5ncyAqLworCXVuc2lnbmVkIGxvbmcgY2lyX2FkZHI7CisJdW5zaWduZWQgbG9uZyBjaXJfd2FrZV9hZGRyOworCWludCBjaXJfaXJxOworCWludCBjaXJfd2FrZV9pcnE7CisKKwkvKiBoYXJkd2FyZSBpZCAqLworCXU4IGNoaXBfbWFqb3I7CisJdTggY2hpcF9taW5vcjsKKworCS8qIGhhcmR3YXJlIGZlYXR1cmVzICovCisJYm9vbCBod19sZWFybmluZ19jYXBhYmxlOworCWJvb2wgaHdfdHhfY2FwYWJsZTsKKworCS8qIHJ4IHNldHRpbmdzICovCisJYm9vbCBsZWFybmluZ19lbmFibGVkOworCWJvb2wgY2Fycmllcl9kZXRlY3RfZW5hYmxlZDsKKworCS8qIHRyYWNrIGNpciB3YWtlIHN0YXRlICovCisJdTggd2FrZV9zdGF0ZTsKKwkvKiBmb3Igc3R1ZHkgKi8KKwl1OCBzdHVkeV9zdGF0ZTsKKwkvKiBjYXJyaWVyIHBlcmlvZCA9IDEgLyBmcmVxdWVuY3kgKi8KKwl1MzIgY2FycmllcjsKK307CisKKy8qIHN0dWR5IHN0YXRlcyAqLworI2RlZmluZSBTVF9TVFVEWV9OT05FICAgICAgMHgwCisjZGVmaW5lIFNUX1NUVURZX1NUQVJUICAgICAweDEKKyNkZWZpbmUgU1RfU1RVRFlfQ0FSUklFUiAgIDB4MgorI2RlZmluZSBTVF9TVFVEWV9BTExfUkVDViAgMHg0CisKKy8qIHdha2Ugc3RhdGVzICovCisjZGVmaW5lIFNUX1dBS0VfTk9ORQkweDAKKyNkZWZpbmUgU1RfV0FLRV9TVEFSVAkweDEKKyNkZWZpbmUgU1RfV0FLRV9GSU5JU0gJMHgyCisKKy8qIHJlY2VpdmUgc3RhdGVzICovCisjZGVmaW5lIFNUX1JYX1dBSVRfN0YJCTB4MQorI2RlZmluZSBTVF9SWF9XQUlUX0hFQUQJCTB4MgorI2RlZmluZSBTVF9SWF9XQUlUX1NJTEVOVF9FTkQJMHg0CisKKy8qIHNlbmQgc3RhdGVzICovCisjZGVmaW5lIFNUX1RYX05PTkUJMHgwCisjZGVmaW5lIFNUX1RYX1JFUVVFU1QJMHgyCisjZGVmaW5lIFNUX1RYX1JFUExZCTB4NAorCisvKiBidWZmZXIgcGFja2V0IGNvbnN0YW50cyAqLworI2RlZmluZSBCVUZfUFVMU0VfQklUCTB4ODAKKyNkZWZpbmUgQlVGX0xFTl9NQVNLCTB4N2YKKyNkZWZpbmUgQlVGX1JFUEVBVF9CWVRFCTB4NzAKKyNkZWZpbmUgQlVGX1JFUEVBVF9NQVNLCTB4ZjAKKworLyogQ0lSIHNldHRpbmdzICovCisKKy8qIHRvdGFsIGxlbmd0aCBvZiBDSVIgYW5kIENJUiBXQUtFICovCisjZGVmaW5lIENJUl9JT1JFR19MRU5HVEgJMHgwZgorCisvKiBSWCBsaW1pdCBsZW5ndGgsIDggaGlnaCBiaXRzIGZvciBTTENILCA4IGxvdyBiaXRzIGZvciBTTENMICgweDdkMCA9IDIwMDApICovCisjZGVmaW5lIENJUl9SWF9MSU1JVF9DT1VOVAkweDdkMAorCisvKiBDSVIgUmVncyAqLworI2RlZmluZSBDSVJfSVJDT04JMHgwMAorI2RlZmluZSBDSVJfSVJTVFMJMHgwMQorI2RlZmluZSBDSVJfSVJFTgkweDAyCisjZGVmaW5lIENJUl9SWEZDT05UCTB4MDMKKyNkZWZpbmUgQ0lSX0NQCQkweDA0CisjZGVmaW5lIENJUl9DQwkJMHgwNQorI2RlZmluZSBDSVJfU0xDSAkweDA2CisjZGVmaW5lIENJUl9TTENMCTB4MDcKKyNkZWZpbmUgQ0lSX0ZJRk9DT04JMHgwOAorI2RlZmluZSBDSVJfSVJGSUZPU1RTCTB4MDkKKyNkZWZpbmUgQ0lSX1NSWEZJRk8JMHgwYQorI2RlZmluZSBDSVJfVFhGQ09OVAkweDBiCisjZGVmaW5lIENJUl9TVFhGSUZPCTB4MGMKKyNkZWZpbmUgQ0lSX0ZDQ0gJMHgwZAorI2RlZmluZSBDSVJfRkNDTAkweDBlCisjZGVmaW5lIENJUl9JUkZTTQkweDBmCisKKy8qIENJUiBJUkNPTiBzZXR0aW5ncyAqLworI2RlZmluZSBDSVJfSVJDT05fUkVDVgkgMHg4MAorI2RlZmluZSBDSVJfSVJDT05fV0lSRU4JIDB4NDAKKyNkZWZpbmUgQ0lSX0lSQ09OX1RYRU4JIDB4MjAKKyNkZWZpbmUgQ0lSX0lSQ09OX1JYRU4JIDB4MTAKKyNkZWZpbmUgQ0lSX0lSQ09OX1dSWElOViAweDA4CisjZGVmaW5lIENJUl9JUkNPTl9SWElOVgkgMHgwNAorCisjZGVmaW5lIENJUl9JUkNPTl9TQU1QTEVfUEVSSU9EX1NFTF8xCTB4MDAKKyNkZWZpbmUgQ0lSX0lSQ09OX1NBTVBMRV9QRVJJT0RfU0VMXzI1CTB4MDEKKyNkZWZpbmUgQ0lSX0lSQ09OX1NBTVBMRV9QRVJJT0RfU0VMXzUwCTB4MDIKKyNkZWZpbmUgQ0lSX0lSQ09OX1NBTVBMRV9QRVJJT0RfU0VMXzEwMAkweDAzCisKKy8qIEZJWE1FOiBtYWtlIHRoaXMgYSBydW50aW1lIG9wdGlvbiAqLworLyogc2VsZWN0IHNhbXBsZSBwZXJpb2QgYXMgNTB1cyAqLworI2RlZmluZSBDSVJfSVJDT05fU0FNUExFX1BFUklPRF9TRUwJQ0lSX0lSQ09OX1NBTVBMRV9QRVJJT0RfU0VMXzUwCisKKy8qIENJUiBJUlNUUyBzZXR0aW5ncyAqLworI2RlZmluZSBDSVJfSVJTVFNfUkRSCTB4ODAKKyNkZWZpbmUgQ0lSX0lSU1RTX1JUUgkweDQwCisjZGVmaW5lIENJUl9JUlNUU19QRQkweDIwCisjZGVmaW5lIENJUl9JUlNUU19SRk8JMHgxMAorI2RlZmluZSBDSVJfSVJTVFNfVEUJMHgwOAorI2RlZmluZSBDSVJfSVJTVFNfVFRSCTB4MDQKKyNkZWZpbmUgQ0lSX0lSU1RTX1RGVQkweDAyCisjZGVmaW5lIENJUl9JUlNUU19HSAkweDAxCisKKy8qIENJUiBJUkVOIHNldHRpbmdzICovCisjZGVmaW5lIENJUl9JUkVOX1JEUgkweDgwCisjZGVmaW5lIENJUl9JUkVOX1JUUgkweDQwCisjZGVmaW5lIENJUl9JUkVOX1BFCTB4MjAKKyNkZWZpbmUgQ0lSX0lSRU5fUkZPCTB4MTAKKyNkZWZpbmUgQ0lSX0lSRU5fVEUJMHgwOAorI2RlZmluZSBDSVJfSVJFTl9UVFIJMHgwNAorI2RlZmluZSBDSVJfSVJFTl9URlUJMHgwMgorI2RlZmluZSBDSVJfSVJFTl9HSAkweDAxCisKKy8qIENJUiBGSUZPQ09OIHNldHRpbmdzICovCisjZGVmaW5lIENJUl9GSUZPQ09OX1RYRklGT0NMUgkJMHg4MAorCisjZGVmaW5lIENJUl9GSUZPQ09OX1RYX1RSSUdHRVJfTEVWXzMxCTB4MDAKKyNkZWZpbmUgQ0lSX0ZJRk9DT05fVFhfVFJJR0dFUl9MRVZfMjQJMHgxMAorI2RlZmluZSBDSVJfRklGT0NPTl9UWF9UUklHR0VSX0xFVl8xNgkweDIwCisjZGVmaW5lIENJUl9GSUZPQ09OX1RYX1RSSUdHRVJfTEVWXzgJMHgzMAorCisvKiBGSVhNRTogbWFrZSB0aGlzIGEgcnVudGltZSBvcHRpb24gKi8KKy8qIHNlbGVjdCBUWCB0cmlnZ2VyIGxldmVsIGFzIDE2ICovCisjZGVmaW5lIENJUl9GSUZPQ09OX1RYX1RSSUdHRVJfTEVWCUNJUl9GSUZPQ09OX1RYX1RSSUdHRVJfTEVWXzE2CisKKyNkZWZpbmUgQ0lSX0ZJRk9DT05fUlhGSUZPQ0xSCQkweDA4CisKKyNkZWZpbmUgQ0lSX0ZJRk9DT05fUlhfVFJJR0dFUl9MRVZfMQkweDAwCisjZGVmaW5lIENJUl9GSUZPQ09OX1JYX1RSSUdHRVJfTEVWXzgJMHgwMQorI2RlZmluZSBDSVJfRklGT0NPTl9SWF9UUklHR0VSX0xFVl8xNgkweDAyCisjZGVmaW5lIENJUl9GSUZPQ09OX1JYX1RSSUdHRVJfTEVWXzI0CTB4MDMKKworLyogRklYTUU6IG1ha2UgdGhpcyBhIHJ1bnRpbWUgb3B0aW9uICovCisvKiBzZWxlY3QgUlggdHJpZ2dlciBsZXZlbCBhcyAyNCAqLworI2RlZmluZSBDSVJfRklGT0NPTl9SWF9UUklHR0VSX0xFVglDSVJfRklGT0NPTl9SWF9UUklHR0VSX0xFVl8yNAorCisvKiBDSVIgSVJGSUZPU1RTIHNldHRpbmdzICovCisjZGVmaW5lIENJUl9JUkZJRk9TVFNfSVJfUEVORElORwkweDgwCisjZGVmaW5lIENJUl9JUkZJRk9TVFNfUlhfR1MJCTB4NDAKKyNkZWZpbmUgQ0lSX0lSRklGT1NUU19SWF9GVEEJCTB4MjAKKyNkZWZpbmUgQ0lSX0lSRklGT1NUU19SWF9FTVBUWQkJMHgxMAorI2RlZmluZSBDSVJfSVJGSUZPU1RTX1JYX0ZVTEwJCTB4MDgKKyNkZWZpbmUgQ0lSX0lSRklGT1NUU19UWF9GVEEJCTB4MDQKKyNkZWZpbmUgQ0lSX0lSRklGT1NUU19UWF9FTVBUWQkJMHgwMgorI2RlZmluZSBDSVJfSVJGSUZPU1RTX1RYX0ZVTEwJCTB4MDEKKworCisvKiBDSVIgV0FLRSBVUCBSZWdzICovCisjZGVmaW5lIENJUl9XQUtFX0lSQ09OCQkJMHgwMAorI2RlZmluZSBDSVJfV0FLRV9JUlNUUwkJCTB4MDEKKyNkZWZpbmUgQ0lSX1dBS0VfSVJFTgkJCTB4MDIKKyNkZWZpbmUgQ0lSX1dBS0VfRklGT19DTVBfREVFUAkJMHgwMworI2RlZmluZSBDSVJfV0FLRV9GSUZPX0NNUF9UT0wJCTB4MDQKKyNkZWZpbmUgQ0lSX1dBS0VfRklGT19DT1VOVAkJMHgwNQorI2RlZmluZSBDSVJfV0FLRV9TTENICQkJMHgwNgorI2RlZmluZSBDSVJfV0FLRV9TTENMCQkJMHgwNworI2RlZmluZSBDSVJfV0FLRV9GSUZPQ09OCQkweDA4CisjZGVmaW5lIENJUl9XQUtFX1NSWEZTVFMJCTB4MDkKKyNkZWZpbmUgQ0lSX1dBS0VfU0FNUExFX1JYX0ZJRk8JCTB4MGEKKyNkZWZpbmUgQ0lSX1dBS0VfV1JfRklGT19EQVRBCQkweDBiCisjZGVmaW5lIENJUl9XQUtFX1JEX0ZJRk9fT05MWQkJMHgwYworI2RlZmluZSBDSVJfV0FLRV9SRF9GSUZPX09OTFlfSURYCTB4MGQKKyNkZWZpbmUgQ0lSX1dBS0VfRklGT19JR05PUkUJCTB4MGUKKyNkZWZpbmUgQ0lSX1dBS0VfSVJGU00JCQkweDBmCisKKy8qIENJUiBXQUtFIFVQIElSQ09OIHNldHRpbmdzICovCisjZGVmaW5lIENJUl9XQUtFX0lSQ09OX0RFQ19SU1QJCTB4ODAKKyNkZWZpbmUgQ0lSX1dBS0VfSVJDT05fTU9ERTEJCTB4NDAKKyNkZWZpbmUgQ0lSX1dBS0VfSVJDT05fTU9ERTAJCTB4MjAKKyNkZWZpbmUgQ0lSX1dBS0VfSVJDT05fUlhFTgkJMHgxMAorI2RlZmluZSBDSVJfV0FLRV9JUkNPTl9SCQkweDA4CisjZGVmaW5lIENJUl9XQUtFX0lSQ09OX1JYSU5WCQkweDA0CisKKy8qIEZJWE1FL2phcm9kOiBtYWtlIHRoaXMgYSBydW50aW1lIG9wdGlvbiAqLworLyogc2VsZWN0IGEgc2FtZSBzYW1wbGUgcGVyaW9kIGxpa2UgY2lyIHJlZ2lzdGVyICovCisjZGVmaW5lIENJUl9XQUtFX0lSQ09OX1NBTVBMRV9QRVJJT0RfU0VMCUNJUl9JUkNPTl9TQU1QTEVfUEVSSU9EX1NFTF81MAorCisvKiBDSVIgV0FLRSBJUlNUUyBCaXRzICovCisjZGVmaW5lIENJUl9XQUtFX0lSU1RTX1JEUgkJMHg4MAorI2RlZmluZSBDSVJfV0FLRV9JUlNUU19SVFIJCTB4NDAKKyNkZWZpbmUgQ0lSX1dBS0VfSVJTVFNfUEUJCTB4MjAKKyNkZWZpbmUgQ0lSX1dBS0VfSVJTVFNfUkZPCQkweDEwCisjZGVmaW5lIENJUl9XQUtFX0lSU1RTX0dICQkweDA4CisjZGVmaW5lIENJUl9XQUtFX0lSU1RTX0lSX1BFTkRJTkcJMHgwMQorCisvKiBDSVIgV0FLRSBVUCBJUkVOIEJpdHMgKi8KKyNkZWZpbmUgQ0lSX1dBS0VfSVJFTl9SRFIJCTB4ODAKKyNkZWZpbmUgQ0lSX1dBS0VfSVJFTl9SVFIJCTB4NDAKKyNkZWZpbmUgQ0lSX1dBS0VfSVJFTl9QRQkJMHgyMAorI2RlZmluZSBDSVJfV0FLRV9JUkVOX1JGTwkJMHgxMAorI2RlZmluZSBDSVJfV0FLRV9JUkVOX1RFCQkweDA4CisjZGVmaW5lIENJUl9XQUtFX0lSRU5fVFRSCQkweDA0CisjZGVmaW5lIENJUl9XQUtFX0lSRU5fVEZVCQkweDAyCisjZGVmaW5lIENJUl9XQUtFX0lSRU5fR0gJCTB4MDEKKworLyogQ0lSIFdBS0UgRklGT0NPTiBzZXR0aW5ncyAqLworI2RlZmluZSBDSVJfV0FLRV9GSUZPQ09OX1JYRklGT0NMUgkweDA4CisKKyNkZWZpbmUgQ0lSX1dBS0VfRklGT0NPTl9SWF9UUklHR0VSX0xFVl82NwkweDAwCisjZGVmaW5lIENJUl9XQUtFX0ZJRk9DT05fUlhfVFJJR0dFUl9MRVZfNjYJMHgwMQorI2RlZmluZSBDSVJfV0FLRV9GSUZPQ09OX1JYX1RSSUdHRVJfTEVWXzY1CTB4MDIKKyNkZWZpbmUgQ0lSX1dBS0VfRklGT0NPTl9SWF9UUklHR0VSX0xFVl82NAkweDAzCisKKy8qIEZJWE1FOiBtYWtlIHRoaXMgYSBydW50aW1lIG9wdGlvbiAqLworLyogc2VsZWN0IFdBS0UgVVAgUlggdHJpZ2dlciBsZXZlbCBhcyA2NyAqLworI2RlZmluZSBDSVJfV0FLRV9GSUZPQ09OX1JYX1RSSUdHRVJfTEVWCUNJUl9XQUtFX0ZJRk9DT05fUlhfVFJJR0dFUl9MRVZfNjcKKworLyogQ0lSIFdBS0UgU1JYRlNUUyBzZXR0aW5ncyAqLworI2RlZmluZSBDSVJfV0FLRV9JUkZJRk9TVFNfUlhfR1MJMHg4MAorI2RlZmluZSBDSVJfV0FLRV9JUkZJRk9TVFNfUlhfRlRBCTB4NDAKKyNkZWZpbmUgQ0lSX1dBS0VfSVJGSUZPU1RTX1JYX0VNUFRZCTB4MjAKKyNkZWZpbmUgQ0lSX1dBS0VfSVJGSUZPU1RTX1JYX0ZVTEwJMHgxMAorCisvKiBDSVIgV2FrZSBGSUZPIGJ1ZmZlciBpcyA2NyBieXRlcyBsb25nICovCisjZGVmaW5lIENJUl9XQUtFX0ZJRk9fTEVOCQk2NworLyogQ0lSIFdha2UgYnl0ZSBjb21wYXJpc29uIHRvbGVyYW5jZSAqLworI2RlZmluZSBDSVJfV0FLRV9DTVBfVE9MRVJBTkNFCQk1CisKKy8qCisgKiBFeHRlbmRlZCBGdW5jdGlvbiBFbmFibGUgUmVnaXN0ZXJzOgorICogIEV4dGVuZGVkIEZ1bmN0aW9uIEluZGV4IFJlZ2lzdGVyCisgKiAgRXh0ZW5kZWQgRnVuY3Rpb24gRGF0YSBSZWdpc3RlcgorICovCisjZGVmaW5lIENSX0VGSVIJCQkweDJlCisjZGVmaW5lIENSX0VGRFIJCQkweDJmCisKKy8qIFBvc3NpYmxlIGFsdGVybmF0ZSBFRkVSIHZhbHVlcywgZGVwZW5kcyBvbiBob3cgdGhlIGNoaXAgaXMgd2lyZWQgKi8KKyNkZWZpbmUgQ1JfRUZJUjIJCTB4NGUKKyNkZWZpbmUgQ1JfRUZEUjIJCTB4NGYKKworLyogRXh0ZW5kZWQgRnVuY3Rpb24gTW9kZSBlbmFibGUvZGlzYWJsZSBtYWdpYyB2YWx1ZXMgKi8KKyNkZWZpbmUgRUZFUl9FRk1fRU5BQkxFCQkweDg3CisjZGVmaW5lIEVGRVJfRUZNX0RJU0FCTEUJMHhhYQorCisvKiBDaGlwIElEcyBmb3VuZCBpbiBDUl9DSElQX0lEX3tISSxMT30gKi8KKyNkZWZpbmUgQ0hJUF9JRF9ISUdICQkweGI0CisjZGVmaW5lIENISVBfSURfTE9XCQkweDcyCisjZGVmaW5lIENISVBfSURfTE9XMgkJMHg3MworCisvKiBDb25maWcgcmVncyB3ZSBuZWVkIHRvIGNhcmUgYWJvdXQgKi8KKyNkZWZpbmUgQ1JfU09GVFdBUkVfUkVTRVQJMHgwMgorI2RlZmluZSBDUl9MT0dJQ0FMX0RFVl9TRUwJMHgwNworI2RlZmluZSBDUl9DSElQX0lEX0hJCQkweDIwCisjZGVmaW5lIENSX0NISVBfSURfTE8JCTB4MjEKKyNkZWZpbmUgQ1JfREVWX1BPV0VSX0RPV04JMHgyMiAvKiBiaXQgMiBpcyBDSVIgcG93ZXIsIGRlZmF1bHQgcG93ZXIgb24gKi8KKyNkZWZpbmUgQ1JfT1VUUFVUX1BJTl9TRUwJMHgyNworI2RlZmluZSBDUl9MT0dJQ0FMX0RFVl9FTgkweDMwIC8qIHZhbGlkIGZvciBhbGwgbG9naWNhbCBkZXZpY2VzICovCisvKiBuZXh0IHRocmVlIHJlZ3MgdmFsaWQgZm9yIGJvdGggdGhlIENJUiBhbmQgQ0lSX1dBS0UgbG9naWNhbCBkZXZpY2VzICovCisjZGVmaW5lIENSX0NJUl9CQVNFX0FERFJfSEkJMHg2MAorI2RlZmluZSBDUl9DSVJfQkFTRV9BRERSX0xPCTB4NjEKKyNkZWZpbmUgQ1JfQ0lSX0lSUV9SU1JDCQkweDcwCisvKiBuZXh0IHRocmVlIHJlZ3MgdmFsaWQgb25seSBmb3IgQUNQSSBsb2dpY2FsIGRldiAqLworI2RlZmluZSBDUl9BQ1BJX0NJUl9XQUtFCTB4ZTAKKyNkZWZpbmUgQ1JfQUNQSV9JUlFfRVZFTlRTCTB4ZjYKKyNkZWZpbmUgQ1JfQUNQSV9JUlFfRVZFTlRTMgkweGY3CisKKy8qIExvZ2ljYWwgZGV2aWNlcyB0aGF0IHdlIG5lZWQgdG8gY2FyZSBhYm91dCAqLworI2RlZmluZSBMT0dJQ0FMX0RFVl9MUFQJCTB4MDEKKyNkZWZpbmUgTE9HSUNBTF9ERVZfQ0lSCQkweDA2CisjZGVmaW5lIExPR0lDQUxfREVWX0FDUEkJMHgwYQorI2RlZmluZSBMT0dJQ0FMX0RFVl9DSVJfV0FLRQkweDBlCisKKyNkZWZpbmUgTE9HSUNBTF9ERVZfRElTQUJMRQkweDAwCisjZGVmaW5lIExPR0lDQUxfREVWX0VOQUJMRQkweDAxCisKKyNkZWZpbmUgQ0lSX1dBS0VfRU5BQkxFX0JJVAkweDA4CisjZGVmaW5lIENJUl9JTlRSX01PVVNFX0lSUV9CSVQJMHg4MAorI2RlZmluZSBQTUVfSU5UUl9DSVJfUEFTU19CSVQJMHgwOAorCisjZGVmaW5lIE9VVFBVVF9QSU5fU0VMX01BU0sJMHhiYworI2RlZmluZSBPVVRQVVRfRU5BQkxFX0NJUgkweDAxIC8qIFBpbjk1PUNJUlJYLCBQaW45Nj1DSVJUWDEgKi8KKyNkZWZpbmUgT1VUUFVUX0VOQUJMRV9DSVJXQgkweDQwIC8qIGVuYWJsZSB3aWRlLWJhbmQgc2Vuc29yICovCisKKy8qIE1DRSBDSVIgc2lnbmFsIGxlbmd0aCwgcmVsYXRlZCBvbiBzYW1wbGUgcGVyaW9kICovCisKKy8qIE1DRSBDSVIgY29udHJvbGxlciBzaWduYWwgbGVuZ3RoOiBhYm91dCA0M21zCisgKiA0M21zIC8gNTB1cyAoc2FtcGxlIHBlcmlvZCkgKiAwLjg1IChpbmFjY3VyYWN5KQorICovCisjZGVmaW5lIENPTlRST0xMRVJfQlVGX0xFTl9NSU4gODMwCisKKy8qIE1DRSBDSVIga2V5Ym9hcmQgc2lnbmFsIGxlbmd0aDogYWJvdXQgMjZtcworICogMjZtcyAvIDUwdXMgKHNhbXBsZSBwZXJpb2QpICogMC44NSAoaW5hY2N1cmFjeSkKKyAqLworI2RlZmluZSBLRVlCT0FSRF9CVUZfTEVOX01BWCA2NTAKKyNkZWZpbmUgS0VZQk9BUkRfQlVGX0xFTl9NSU4gNjEwCisKKy8qIE1DRSBDSVIgbW91c2Ugc2lnbmFsIGxlbmd0aDogYWJvdXQgMjRtcworICogMjRtcyAvIDUwdXMgKHNhbXBsZSBwZXJpb2QpICogMC44NSAoaW5hY2N1cmFjeSkKKyAqLworI2RlZmluZSBNT1VTRV9CVUZfTEVOX01JTiA1NjUKKworI2RlZmluZSBDSVJfU0FNUExFX1BFUklPRCA1MAorI2RlZmluZSBDSVJfU0FNUExFX0xPV19JTkFDQ1VSQUNZIDAuODUKKworLyogTUFYIHNpbGVuY2UgdGltZSB0aGF0IGRyaXZlciB3aWxsIHNlbnQgdG8gbGlyYyAqLworI2RlZmluZSBNQVhfU0lMRU5DRV9USU1FIDYwMDAwCisKKyNpZiBDSVJfSVJDT05fU0FNUExFX1BFUklPRF9TRUwgPT0gQ0lSX0lSQ09OX1NBTVBMRV9QRVJJT0RfU0VMXzEwMAorI2RlZmluZSBTQU1QTEVfUEVSSU9EIDEwMAorCisjZWxpZiBDSVJfSVJDT05fU0FNUExFX1BFUklPRF9TRUwgPT0gQ0lSX0lSQ09OX1NBTVBMRV9QRVJJT0RfU0VMXzUwCisjZGVmaW5lIFNBTVBMRV9QRVJJT0QgNTAKKworI2VsaWYgQ0lSX0lSQ09OX1NBTVBMRV9QRVJJT0RfU0VMID09IENJUl9JUkNPTl9TQU1QTEVfUEVSSU9EX1NFTF8yNQorI2RlZmluZSBTQU1QTEVfUEVSSU9EIDI1CisKKyNlbHNlCisjZGVmaW5lIFNBTVBMRV9QRVJJT0QgMQorI2VuZGlmCisKKy8qIGFzIFZJU1RBIE1DRSBkZWZpbml0aW9uLCB2YWxpZCBjYXJyaWVyIHZhbHVlICovCisjZGVmaW5lIE1BWF9DQVJSSUVSIDYwMDAwCisjZGVmaW5lIE1JTl9DQVJSSUVSIDMwMDAwCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JjL3JjLWNvcmUtcHJpdi5oIGIvZHJpdmVycy9tZWRpYS9yYy9yYy1jb3JlLXByaXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzNiMzg3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9yYy1jb3JlLXByaXYuaApAQCAtMCwwICsxLDE5MyBAQAorLyoKKyAqIFJlbW90ZSBDb250cm9sbGVyIGNvcmUgcmF3IGV2ZW50cyBoZWFkZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgYnkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX1JDX0NPUkVfUFJJVgorI2RlZmluZSBfUkNfQ09SRV9QUklWCisKKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxtZWRpYS9yYy1jb3JlLmg+CisKK3N0cnVjdCBpcl9yYXdfaGFuZGxlciB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCisJdTY0IHByb3RvY29sczsgLyogd2hpY2ggYXJlIGhhbmRsZWQgYnkgdGhpcyBoYW5kbGVyICovCisJaW50ICgqZGVjb2RlKShzdHJ1Y3QgcmNfZGV2ICpkZXYsIHN0cnVjdCBpcl9yYXdfZXZlbnQgZXZlbnQpOworCisJLyogVGhlc2UgdHdvIHNob3VsZCBvbmx5IGJlIHVzZWQgYnkgdGhlIGxpcmMgZGVjb2RlciAqLworCWludCAoKnJhd19yZWdpc3Rlcikoc3RydWN0IHJjX2RldiAqZGV2KTsKKwlpbnQgKCpyYXdfdW5yZWdpc3Rlcikoc3RydWN0IHJjX2RldiAqZGV2KTsKK307CisKK3N0cnVjdCBpcl9yYXdfZXZlbnRfY3RybCB7CisJc3RydWN0IGxpc3RfaGVhZAkJbGlzdDsJCS8qIHRvIGtlZXAgdHJhY2sgb2YgcmF3IGNsaWVudHMgKi8KKwlzdHJ1Y3QgdGFza19zdHJ1Y3QJCSp0aHJlYWQ7CisJc3BpbmxvY2tfdAkJCWxvY2s7CisJc3RydWN0IGtmaWZvCQkJa2ZpZm87CQkvKiBmaWZvIGZvciB0aGUgcHVsc2Uvc3BhY2UgZHVyYXRpb25zICovCisJa3RpbWVfdAkJCQlsYXN0X2V2ZW50OwkvKiB3aGVuIGxhc3QgZXZlbnQgb2NjdXJyZWQgKi8KKwllbnVtIHJhd19ldmVudF90eXBlCQlsYXN0X3R5cGU7CS8qIGxhc3QgZXZlbnQgdHlwZSAqLworCXN0cnVjdCByY19kZXYJCQkqZGV2OwkJLyogcG9pbnRlciB0byB0aGUgcGFyZW50IHJjX2RldiAqLworCXU2NAkJCQllbmFibGVkX3Byb3RvY29sczsgLyogZW5hYmxlZCByYXcgcHJvdG9jb2wgZGVjb2RlcnMgKi8KKworCS8qIHJhdyBkZWNvZGVyIHN0YXRlIGZvbGxvd3MgKi8KKwlzdHJ1Y3QgaXJfcmF3X2V2ZW50IHByZXZfZXY7CisJc3RydWN0IGlyX3Jhd19ldmVudCB0aGlzX2V2OworCXN0cnVjdCBuZWNfZGVjIHsKKwkJaW50IHN0YXRlOworCQl1bnNpZ25lZCBjb3VudDsKKwkJdTMyIGJpdHM7CisJCWJvb2wgaXNfbmVjX3g7CisJCWJvb2wgbmVjeF9yZXBlYXQ7CisJfSBuZWM7CisJc3RydWN0IHJjNV9kZWMgeworCQlpbnQgc3RhdGU7CisJCXUzMiBiaXRzOworCQl1bnNpZ25lZCBjb3VudDsKKwkJdW5zaWduZWQgd2FudGVkX2JpdHM7CisJfSByYzU7CisJc3RydWN0IHJjNl9kZWMgeworCQlpbnQgc3RhdGU7CisJCXU4IGhlYWRlcjsKKwkJdTMyIGJvZHk7CisJCWJvb2wgdG9nZ2xlOworCQl1bnNpZ25lZCBjb3VudDsKKwkJdW5zaWduZWQgd2FudGVkX2JpdHM7CisJfSByYzY7CisJc3RydWN0IHNvbnlfZGVjIHsKKwkJaW50IHN0YXRlOworCQl1MzIgYml0czsKKwkJdW5zaWduZWQgY291bnQ7CisJfSBzb255OworCXN0cnVjdCBqdmNfZGVjIHsKKwkJaW50IHN0YXRlOworCQl1MTYgYml0czsKKwkJdTE2IG9sZF9iaXRzOworCQl1bnNpZ25lZCBjb3VudDsKKwkJYm9vbCBmaXJzdDsKKwkJYm9vbCB0b2dnbGU7CisJfSBqdmM7CisJc3RydWN0IHJjNV9zel9kZWMgeworCQlpbnQgc3RhdGU7CisJCXUzMiBiaXRzOworCQl1bnNpZ25lZCBjb3VudDsKKwkJdW5zaWduZWQgd2FudGVkX2JpdHM7CisJfSByYzVfc3o7CisJc3RydWN0IGxpcmNfY29kZWMgeworCQlzdHJ1Y3QgcmNfZGV2ICpkZXY7CisJCXN0cnVjdCBsaXJjX2RyaXZlciAqZHJ2OworCQlpbnQgY2Fycmllcl9sb3c7CisKKwkJa3RpbWVfdCBnYXBfc3RhcnQ7CisJCXU2NCBnYXBfZHVyYXRpb247CisJCWJvb2wgZ2FwOworCQlib29sIHNlbmRfdGltZW91dF9yZXBvcnRzOworCisJfSBsaXJjOworfTsKKworLyogbWFjcm9zIGZvciBJUiBkZWNvZGVycyAqLworc3RhdGljIGlubGluZSBib29sIGdlcV9tYXJnaW4odW5zaWduZWQgZDEsIHVuc2lnbmVkIGQyLCB1bnNpZ25lZCBtYXJnaW4pCit7CisJcmV0dXJuIGQxID4gKGQyIC0gbWFyZ2luKTsKK30KKworc3RhdGljIGlubGluZSBib29sIGVxX21hcmdpbih1bnNpZ25lZCBkMSwgdW5zaWduZWQgZDIsIHVuc2lnbmVkIG1hcmdpbikKK3sKKwlyZXR1cm4gKChkMSA+IChkMiAtIG1hcmdpbikpICYmIChkMSA8IChkMiArIG1hcmdpbikpKTsKK30KKworc3RhdGljIGlubGluZSBib29sIGlzX3RyYW5zaXRpb24oc3RydWN0IGlyX3Jhd19ldmVudCAqeCwgc3RydWN0IGlyX3Jhd19ldmVudCAqeSkKK3sKKwlyZXR1cm4geC0+cHVsc2UgIT0geS0+cHVsc2U7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkZWNyZWFzZV9kdXJhdGlvbihzdHJ1Y3QgaXJfcmF3X2V2ZW50ICpldiwgdW5zaWduZWQgZHVyYXRpb24pCit7CisJaWYgKGR1cmF0aW9uID4gZXYtPmR1cmF0aW9uKQorCQlldi0+ZHVyYXRpb24gPSAwOworCWVsc2UKKwkJZXYtPmR1cmF0aW9uIC09IGR1cmF0aW9uOworfQorCisvKiBSZXR1cm5zIHRydWUgaWYgZXZlbnQgaXMgbm9ybWFsIHB1bHNlL3NwYWNlIGV2ZW50ICovCitzdGF0aWMgaW5saW5lIGJvb2wgaXNfdGltaW5nX2V2ZW50KHN0cnVjdCBpcl9yYXdfZXZlbnQgZXYpCit7CisJcmV0dXJuICFldi5jYXJyaWVyX3JlcG9ydCAmJiAhZXYucmVzZXQ7Cit9CisKKyNkZWZpbmUgVE9fVVMoZHVyYXRpb24pCQkJRElWX1JPVU5EX0NMT1NFU1QoKGR1cmF0aW9uKSwgMTAwMCkKKyNkZWZpbmUgVE9fU1RSKGlzX3B1bHNlKQkJKChpc19wdWxzZSkgPyAicHVsc2UiIDogInNwYWNlIikKKworLyoKKyAqIFJvdXRpbmVzIGZyb20gcmMtcmF3LmMgdG8gYmUgdXNlZCBpbnRlcm5hbGx5IGFuZCBieSBkZWNvZGVycworICovCit1NjQgaXJfcmF3X2dldF9hbGxvd2VkX3Byb3RvY29scyh2b2lkKTsKK2ludCBpcl9yYXdfZXZlbnRfcmVnaXN0ZXIoc3RydWN0IHJjX2RldiAqZGV2KTsKK3ZvaWQgaXJfcmF3X2V2ZW50X3VucmVnaXN0ZXIoc3RydWN0IHJjX2RldiAqZGV2KTsKK2ludCBpcl9yYXdfaGFuZGxlcl9yZWdpc3RlcihzdHJ1Y3QgaXJfcmF3X2hhbmRsZXIgKmlyX3Jhd19oYW5kbGVyKTsKK3ZvaWQgaXJfcmF3X2hhbmRsZXJfdW5yZWdpc3RlcihzdHJ1Y3QgaXJfcmF3X2hhbmRsZXIgKmlyX3Jhd19oYW5kbGVyKTsKK3ZvaWQgaXJfcmF3X2luaXQodm9pZCk7CisKKy8qCisgKiBEZWNvZGVyIGluaXRpYWxpemF0aW9uIGNvZGUKKyAqCisgKiBUaG9zZSBsb2FkIGxvZ2ljIGFyZSBjYWxsZWQgZHVyaW5nIGlyLWNvcmUgaW5pdCwgYW5kIGF1dG9tYXRpY2FsbHkKKyAqIGxvYWRzIHRoZSBjb21waWxlZCBkZWNvZGVycyBmb3IgdGhlaXIgdXNhZ2Ugd2l0aCBJUiByYXcgZXZlbnRzCisgKi8KKworLyogZnJvbSBpci1uZWMtZGVjb2Rlci5jICovCisjaWZkZWYgQ09ORklHX0lSX05FQ19ERUNPREVSX01PRFVMRQorI2RlZmluZSBsb2FkX25lY19kZWNvZGUoKQlyZXF1ZXN0X21vZHVsZSgiaXItbmVjLWRlY29kZXIiKQorI2Vsc2UKKyNkZWZpbmUgbG9hZF9uZWNfZGVjb2RlKCkJMAorI2VuZGlmCisKKy8qIGZyb20gaXItcmM1LWRlY29kZXIuYyAqLworI2lmZGVmIENPTkZJR19JUl9SQzVfREVDT0RFUl9NT0RVTEUKKyNkZWZpbmUgbG9hZF9yYzVfZGVjb2RlKCkJcmVxdWVzdF9tb2R1bGUoImlyLXJjNS1kZWNvZGVyIikKKyNlbHNlCisjZGVmaW5lIGxvYWRfcmM1X2RlY29kZSgpCTAKKyNlbmRpZgorCisvKiBmcm9tIGlyLXJjNi1kZWNvZGVyLmMgKi8KKyNpZmRlZiBDT05GSUdfSVJfUkM2X0RFQ09ERVJfTU9EVUxFCisjZGVmaW5lIGxvYWRfcmM2X2RlY29kZSgpCXJlcXVlc3RfbW9kdWxlKCJpci1yYzYtZGVjb2RlciIpCisjZWxzZQorI2RlZmluZSBsb2FkX3JjNl9kZWNvZGUoKQkwCisjZW5kaWYKKworLyogZnJvbSBpci1qdmMtZGVjb2Rlci5jICovCisjaWZkZWYgQ09ORklHX0lSX0pWQ19ERUNPREVSX01PRFVMRQorI2RlZmluZSBsb2FkX2p2Y19kZWNvZGUoKQlyZXF1ZXN0X21vZHVsZSgiaXItanZjLWRlY29kZXIiKQorI2Vsc2UKKyNkZWZpbmUgbG9hZF9qdmNfZGVjb2RlKCkJMAorI2VuZGlmCisKKy8qIGZyb20gaXItc29ueS1kZWNvZGVyLmMgKi8KKyNpZmRlZiBDT05GSUdfSVJfU09OWV9ERUNPREVSX01PRFVMRQorI2RlZmluZSBsb2FkX3NvbnlfZGVjb2RlKCkJcmVxdWVzdF9tb2R1bGUoImlyLXNvbnktZGVjb2RlciIpCisjZWxzZQorI2RlZmluZSBsb2FkX3NvbnlfZGVjb2RlKCkJMAorI2VuZGlmCisKKy8qIGZyb20gaXItbGlyYy1jb2RlYy5jICovCisjaWZkZWYgQ09ORklHX0lSX0xJUkNfQ09ERUNfTU9EVUxFCisjZGVmaW5lIGxvYWRfbGlyY19jb2RlYygpCXJlcXVlc3RfbW9kdWxlKCJpci1saXJjLWNvZGVjIikKKyNlbHNlCisjZGVmaW5lIGxvYWRfbGlyY19jb2RlYygpCTAKKyNlbmRpZgorCisKKyNlbmRpZiAvKiBfUkNfQ09SRV9QUklWICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JjL3JjLWxvb3BiYWNrLmMgYi9kcml2ZXJzL21lZGlhL3JjL3JjLWxvb3BiYWNrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDljZWU2MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvcmMvcmMtbG9vcGJhY2suYwpAQCAtMCwwICsxLDI2MCBAQAorLyoKKyAqIExvb3BiYWNrIGRyaXZlciBmb3IgcmMtY29yZSwKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgRGF2aWQgSMOkcmRlbWFuIDxkYXZpZEBoYXJkZW1hbi5udT4KKyAqCisgKiBUaGlzIGRyaXZlciByZWNlaXZlcyBUWCBkYXRhIGFuZCBwYXNzZXMgaXQgYmFjayBhcyBSWCBkYXRhLAorICogd2hpY2ggaXMgdXNlZnVsIGZvciAoc2NyaXB0ZWQpIGRlYnVnZ2luZyBvZiByYy1jb3JlIHdpdGhvdXQKKyAqIGhhdmluZyB0byB1c2UgYWN0dWFsIGhhcmR3YXJlLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPG1lZGlhL3JjLWNvcmUuaD4KKworI2RlZmluZSBEUklWRVJfTkFNRQkicmMtbG9vcGJhY2siCisjZGVmaW5lIGRwcmludGsoeC4uLikJaWYgKGRlYnVnKSBwcmludGsoS0VSTl9JTkZPIERSSVZFUl9OQU1FICI6ICIgeCkKKyNkZWZpbmUgUlhNQVNLX1JFR1VMQVIJMHgxCisjZGVmaW5lIFJYTUFTS19MRUFSTklORwkweDIKKworc3RhdGljIGJvb2wgZGVidWc7CisKK3N0cnVjdCBsb29wYmFja19kZXYgeworCXN0cnVjdCByY19kZXYgKmRldjsKKwl1MzIgdHhtYXNrOworCXUzMiB0eGNhcnJpZXI7CisJdTMyIHR4ZHV0eTsKKwlib29sIGlkbGU7CisJYm9vbCBsZWFybmluZzsKKwlib29sIGNhcnJpZXJyZXBvcnQ7CisJdTMyIHJ4Y2Fycmllcm1pbjsKKwl1MzIgcnhjYXJyaWVybWF4OworfTsKKworc3RhdGljIHN0cnVjdCBsb29wYmFja19kZXYgbG9vcGRldjsKKworc3RhdGljIGludCBsb29wX3NldF90eF9tYXNrKHN0cnVjdCByY19kZXYgKmRldiwgdTMyIG1hc2spCit7CisJc3RydWN0IGxvb3BiYWNrX2RldiAqbG9kZXYgPSBkZXYtPnByaXY7CisKKwlpZiAoKG1hc2sgJiAoUlhNQVNLX1JFR1VMQVIgfCBSWE1BU0tfTEVBUk5JTkcpKSAhPSBtYXNrKSB7CisJCWRwcmludGsoImludmFsaWQgdHggbWFzazogJXVcbiIsIG1hc2spOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlkcHJpbnRrKCJzZXR0aW5nIHR4IG1hc2s6ICV1XG4iLCBtYXNrKTsKKwlsb2Rldi0+dHhtYXNrID0gbWFzazsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsb29wX3NldF90eF9jYXJyaWVyKHN0cnVjdCByY19kZXYgKmRldiwgdTMyIGNhcnJpZXIpCit7CisJc3RydWN0IGxvb3BiYWNrX2RldiAqbG9kZXYgPSBkZXYtPnByaXY7CisKKwlkcHJpbnRrKCJzZXR0aW5nIHR4IGNhcnJpZXI6ICV1XG4iLCBjYXJyaWVyKTsKKwlsb2Rldi0+dHhjYXJyaWVyID0gY2FycmllcjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsb29wX3NldF90eF9kdXR5X2N5Y2xlKHN0cnVjdCByY19kZXYgKmRldiwgdTMyIGR1dHlfY3ljbGUpCit7CisJc3RydWN0IGxvb3BiYWNrX2RldiAqbG9kZXYgPSBkZXYtPnByaXY7CisKKwlpZiAoZHV0eV9jeWNsZSA8IDEgfHwgZHV0eV9jeWNsZSA+IDk5KSB7CisJCWRwcmludGsoImludmFsaWQgZHV0eSBjeWNsZTogJXVcbiIsIGR1dHlfY3ljbGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlkcHJpbnRrKCJzZXR0aW5nIGR1dHkgY3ljbGU6ICV1XG4iLCBkdXR5X2N5Y2xlKTsKKwlsb2Rldi0+dHhkdXR5ID0gZHV0eV9jeWNsZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsb29wX3NldF9yeF9jYXJyaWVyX3JhbmdlKHN0cnVjdCByY19kZXYgKmRldiwgdTMyIG1pbiwgdTMyIG1heCkKK3sKKwlzdHJ1Y3QgbG9vcGJhY2tfZGV2ICpsb2RldiA9IGRldi0+cHJpdjsKKworCWlmIChtaW4gPCAxIHx8IG1pbiA+IG1heCkgeworCQlkcHJpbnRrKCJpbnZhbGlkIHJ4IGNhcnJpZXIgcmFuZ2UgJXUgdG8gJXVcbiIsIG1pbiwgbWF4KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZHByaW50aygic2V0dGluZyByeCBjYXJyaWVyIHJhbmdlICV1IHRvICV1XG4iLCBtaW4sIG1heCk7CisJbG9kZXYtPnJ4Y2Fycmllcm1pbiA9IG1pbjsKKwlsb2Rldi0+cnhjYXJyaWVybWF4ID0gbWF4OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxvb3BfdHhfaXIoc3RydWN0IHJjX2RldiAqZGV2LCBpbnQgKnR4YnVmLCB1MzIgbikKK3sKKwlzdHJ1Y3QgbG9vcGJhY2tfZGV2ICpsb2RldiA9IGRldi0+cHJpdjsKKwl1MzIgcnhtYXNrOworCXVuc2lnbmVkIGNvdW50OworCXVuc2lnbmVkIHRvdGFsX2R1cmF0aW9uID0gMDsKKwl1bnNpZ25lZCBpOworCURFRklORV9JUl9SQVdfRVZFTlQocmF3aXIpOworCisJaWYgKG4gPT0gMCB8fCBuICUgc2l6ZW9mKGludCkpIHsKKwkJZHByaW50aygiaW52YWxpZCB0eCBidWZmZXIgc2l6ZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWNvdW50ID0gbiAvIHNpemVvZihpbnQpOworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorCQl0b3RhbF9kdXJhdGlvbiArPSBhYnModHhidWZbaV0pOworCisJaWYgKHRvdGFsX2R1cmF0aW9uID09IDApIHsKKwkJZHByaW50aygiaW52YWxpZCB0eCBkYXRhLCB0b3RhbCBkdXJhdGlvbiB6ZXJvXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGxvZGV2LT50eGNhcnJpZXIgPCBsb2Rldi0+cnhjYXJyaWVybWluIHx8CisJICAgIGxvZGV2LT50eGNhcnJpZXIgPiBsb2Rldi0+cnhjYXJyaWVybWF4KSB7CisJCWRwcmludGsoImlnbm9yaW5nIHR4LCBjYXJyaWVyIG91dCBvZiByYW5nZVxuIik7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChsb2Rldi0+bGVhcm5pbmcpCisJCXJ4bWFzayA9IFJYTUFTS19MRUFSTklORzsKKwllbHNlCisJCXJ4bWFzayA9IFJYTUFTS19SRUdVTEFSOworCisJaWYgKCEocnhtYXNrICYgbG9kZXYtPnR4bWFzaykpIHsKKwkJZHByaW50aygiaWdub3JpbmcgdHgsIHJ4IG1hc2sgbWlzbWF0Y2hcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlyYXdpci5wdWxzZSA9IGkgJSAyID8gZmFsc2UgOiB0cnVlOworCQlyYXdpci5kdXJhdGlvbiA9IGFicyh0eGJ1ZltpXSkgKiAxMDAwOworCQlpZiAocmF3aXIuZHVyYXRpb24pCisJCQlpcl9yYXdfZXZlbnRfc3RvcmVfd2l0aF9maWx0ZXIoZGV2LCAmcmF3aXIpOworCX0KKwlpcl9yYXdfZXZlbnRfaGFuZGxlKGRldik7CisKK291dDoKKwkvKiBMaXJjIGV4cGVjdHMgdGhpcyBmdW5jdGlvbiB0byB0YWtlIGFzIGxvbmcgYXMgdGhlIHRvdGFsIGR1cmF0aW9uICovCisJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwlzY2hlZHVsZV90aW1lb3V0KHVzZWNzX3RvX2ppZmZpZXModG90YWxfZHVyYXRpb24pKTsKKwlyZXR1cm4gbjsKK30KKworc3RhdGljIHZvaWQgbG9vcF9zZXRfaWRsZShzdHJ1Y3QgcmNfZGV2ICpkZXYsIGJvb2wgZW5hYmxlKQoreworCXN0cnVjdCBsb29wYmFja19kZXYgKmxvZGV2ID0gZGV2LT5wcml2OworCisJaWYgKGxvZGV2LT5pZGxlICE9IGVuYWJsZSkgeworCQlkcHJpbnRrKCIlc2luZyBpZGxlIG1vZGVcbiIsIGVuYWJsZSA/ICJlbnRlciIgOiAiZXhpdCIpOworCQlsb2Rldi0+aWRsZSA9IGVuYWJsZTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbG9vcF9zZXRfbGVhcm5pbmdfbW9kZShzdHJ1Y3QgcmNfZGV2ICpkZXYsIGludCBlbmFibGUpCit7CisJc3RydWN0IGxvb3BiYWNrX2RldiAqbG9kZXYgPSBkZXYtPnByaXY7CisKKwlpZiAobG9kZXYtPmxlYXJuaW5nICE9IGVuYWJsZSkgeworCQlkcHJpbnRrKCIlc2luZyBsZWFybmluZyBtb2RlXG4iLCBlbmFibGUgPyAiZW50ZXIiIDogImV4aXQiKTsKKwkJbG9kZXYtPmxlYXJuaW5nID0gISFlbmFibGU7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbG9vcF9zZXRfY2Fycmllcl9yZXBvcnQoc3RydWN0IHJjX2RldiAqZGV2LCBpbnQgZW5hYmxlKQoreworCXN0cnVjdCBsb29wYmFja19kZXYgKmxvZGV2ID0gZGV2LT5wcml2OworCisJaWYgKGxvZGV2LT5jYXJyaWVycmVwb3J0ICE9IGVuYWJsZSkgeworCQlkcHJpbnRrKCIlc2FibGluZyBjYXJyaWVyIHJlcG9ydHNcbiIsIGVuYWJsZSA/ICJlbiIgOiAiZGlzIik7CisJCWxvZGV2LT5jYXJyaWVycmVwb3J0ID0gISFlbmFibGU7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGxvb3BfaW5pdCh2b2lkKQoreworCXN0cnVjdCByY19kZXYgKnJjOworCWludCByZXQ7CisKKwlyYyA9IHJjX2FsbG9jYXRlX2RldmljZSgpOworCWlmICghcmMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIERSSVZFUl9OQU1FICI6IHJjX2RldiBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXJjLT5pbnB1dF9uYW1lCQk9ICJyYy1jb3JlIGxvb3BiYWNrIGRldmljZSI7CisJcmMtPmlucHV0X3BoeXMJCT0gInJjLWNvcmUvdmlydHVhbCI7CisJcmMtPmlucHV0X2lkLmJ1c3R5cGUJPSBCVVNfVklSVFVBTDsKKwlyYy0+aW5wdXRfaWQudmVyc2lvbgk9IDE7CisJcmMtPmRyaXZlcl9uYW1lCQk9IERSSVZFUl9OQU1FOworCXJjLT5tYXBfbmFtZQkJPSBSQ19NQVBfRU1QVFk7CisJcmMtPnByaXYJCT0gJmxvb3BkZXY7CisJcmMtPmRyaXZlcl90eXBlCQk9IFJDX0RSSVZFUl9JUl9SQVc7CisJcmMtPmFsbG93ZWRfcHJvdG9zCT0gUkNfVFlQRV9BTEw7CisJcmMtPnRpbWVvdXQJCT0gMTAwICogMTAwMCAqIDEwMDA7IC8qIDEwMCBtcyAqLworCXJjLT5taW5fdGltZW91dAkJPSAxOworCXJjLT5tYXhfdGltZW91dAkJPSBVSU5UX01BWDsKKwlyYy0+cnhfcmVzb2x1dGlvbgk9IDEwMDA7CisJcmMtPnR4X3Jlc29sdXRpb24JPSAxMDAwOworCXJjLT5zX3R4X21hc2sJCT0gbG9vcF9zZXRfdHhfbWFzazsKKwlyYy0+c190eF9jYXJyaWVyCT0gbG9vcF9zZXRfdHhfY2FycmllcjsKKwlyYy0+c190eF9kdXR5X2N5Y2xlCT0gbG9vcF9zZXRfdHhfZHV0eV9jeWNsZTsKKwlyYy0+c19yeF9jYXJyaWVyX3JhbmdlCT0gbG9vcF9zZXRfcnhfY2Fycmllcl9yYW5nZTsKKwlyYy0+dHhfaXIJCT0gbG9vcF90eF9pcjsKKwlyYy0+c19pZGxlCQk9IGxvb3Bfc2V0X2lkbGU7CisJcmMtPnNfbGVhcm5pbmdfbW9kZQk9IGxvb3Bfc2V0X2xlYXJuaW5nX21vZGU7CisJcmMtPnNfY2Fycmllcl9yZXBvcnQJPSBsb29wX3NldF9jYXJyaWVyX3JlcG9ydDsKKwlyYy0+cHJpdgkJPSAmbG9vcGRldjsKKworCWxvb3BkZXYudHhtYXNrCQk9IFJYTUFTS19SRUdVTEFSOworCWxvb3BkZXYudHhjYXJyaWVyCT0gMzYwMDA7CisJbG9vcGRldi50eGR1dHkJCT0gNTA7CisJbG9vcGRldi5yeGNhcnJpZXJtaW4JPSAxOworCWxvb3BkZXYucnhjYXJyaWVybWF4CT0gfjA7CisJbG9vcGRldi5pZGxlCQk9IHRydWU7CisJbG9vcGRldi5sZWFybmluZwk9IGZhbHNlOworCWxvb3BkZXYuY2FycmllcnJlcG9ydAk9IGZhbHNlOworCisJcmV0ID0gcmNfcmVnaXN0ZXJfZGV2aWNlKHJjKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgRFJJVkVSX05BTUUgIjogcmNfZGV2IHJlZ2lzdHJhdGlvbiBmYWlsZWRcbiIpOworCQlyY19mcmVlX2RldmljZShyYyk7CisJCXJldHVybiByZXQ7CisJfQorCisJbG9vcGRldi5kZXYgPSByYzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGxvb3BfZXhpdCh2b2lkKQoreworCXJjX3VucmVnaXN0ZXJfZGV2aWNlKGxvb3BkZXYuZGV2KTsKK30KKworbW9kdWxlX2luaXQobG9vcF9pbml0KTsKK21vZHVsZV9leGl0KGxvb3BfZXhpdCk7CisKK21vZHVsZV9wYXJhbShkZWJ1ZywgYm9vbCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkVuYWJsZSBkZWJ1ZyBtZXNzYWdlcyIpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkxvb3BiYWNrIGRldmljZSBmb3IgcmMtY29yZSBkZWJ1Z2dpbmciKTsKK01PRFVMRV9BVVRIT1IoIkRhdmlkIEjDpHJkZW1hbiA8ZGF2aWRAaGFyZGVtYW4ubnU+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JjL3JjLW1haW4uYyBiL2RyaXZlcnMvbWVkaWEvcmMvcmMtbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyYmU4YTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3JjL3JjLW1haW4uYwpAQCAtMCwwICsxLDExMzUgQEAKKy8qIHJjLW1haW4uYyAtIFJlbW90ZSBDb250cm9sbGVyIGNvcmUgbW9kdWxlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgYnkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxtZWRpYS9yYy1jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgInJjLWNvcmUtcHJpdi5oIgorCisvKiBTaXplcyBhcmUgaW4gYnl0ZXMsIDI1NiBieXRlcyBhbGxvd3MgZm9yIDMyIGVudHJpZXMgb24geDY0ICovCisjZGVmaW5lIElSX1RBQl9NSU5fU0laRQkyNTYKKyNkZWZpbmUgSVJfVEFCX01BWF9TSVpFCTgxOTIKKworLyogRklYTUU6IElSX0tFWVBSRVNTX1RJTUVPVVQgc2hvdWxkIGJlIHByb3RvY29sIHNwZWNpZmljICovCisjZGVmaW5lIElSX0tFWVBSRVNTX1RJTUVPVVQgMjUwCisKKy8qIFVzZWQgdG8ga2VlcCB0cmFjayBvZiBrbm93biBrZXltYXBzICovCitzdGF0aWMgTElTVF9IRUFEKHJjX21hcF9saXN0KTsKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0socmNfbWFwX2xvY2spOworCitzdGF0aWMgc3RydWN0IHJjX21hcF9saXN0ICpzZWVrX3JjX21hcChjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCByY19tYXBfbGlzdCAqbWFwID0gTlVMTDsKKworCXNwaW5fbG9jaygmcmNfbWFwX2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkobWFwLCAmcmNfbWFwX2xpc3QsIGxpc3QpIHsKKwkJaWYgKCFzdHJjbXAobmFtZSwgbWFwLT5tYXAubmFtZSkpIHsKKwkJCXNwaW5fdW5sb2NrKCZyY19tYXBfbG9jayk7CisJCQlyZXR1cm4gbWFwOworCQl9CisJfQorCXNwaW5fdW5sb2NrKCZyY19tYXBfbG9jayk7CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RydWN0IHJjX21hcCAqcmNfbWFwX2dldChjb25zdCBjaGFyICpuYW1lKQoreworCisJc3RydWN0IHJjX21hcF9saXN0ICptYXA7CisKKwltYXAgPSBzZWVrX3JjX21hcChuYW1lKTsKKyNpZmRlZiBNT0RVTEUKKwlpZiAoIW1hcCkgeworCQlpbnQgcmMgPSByZXF1ZXN0X21vZHVsZShuYW1lKTsKKwkJaWYgKHJjIDwgMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZG4ndCBsb2FkIElSIGtleW1hcCAlc1xuIiwgbmFtZSk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCQltc2xlZXAoMjApOwkvKiBHaXZlIHNvbWUgdGltZSBmb3IgSVIgdG8gcmVnaXN0ZXIgKi8KKworCQltYXAgPSBzZWVrX3JjX21hcChuYW1lKTsKKwl9CisjZW5kaWYKKwlpZiAoIW1hcCkgeworCQlwcmludGsoS0VSTl9FUlIgIklSIGtleW1hcCAlcyBub3QgZm91bmRcbiIsIG5hbWUpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICJSZWdpc3RlcmVkIElSIGtleW1hcCAlc1xuIiwgbWFwLT5tYXAubmFtZSk7CisKKwlyZXR1cm4gJm1hcC0+bWFwOworfQorRVhQT1JUX1NZTUJPTF9HUEwocmNfbWFwX2dldCk7CisKK2ludCByY19tYXBfcmVnaXN0ZXIoc3RydWN0IHJjX21hcF9saXN0ICptYXApCit7CisJc3Bpbl9sb2NrKCZyY19tYXBfbG9jayk7CisJbGlzdF9hZGRfdGFpbCgmbWFwLT5saXN0LCAmcmNfbWFwX2xpc3QpOworCXNwaW5fdW5sb2NrKCZyY19tYXBfbG9jayk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChyY19tYXBfcmVnaXN0ZXIpOworCit2b2lkIHJjX21hcF91bnJlZ2lzdGVyKHN0cnVjdCByY19tYXBfbGlzdCAqbWFwKQoreworCXNwaW5fbG9jaygmcmNfbWFwX2xvY2spOworCWxpc3RfZGVsKCZtYXAtPmxpc3QpOworCXNwaW5fdW5sb2NrKCZyY19tYXBfbG9jayk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChyY19tYXBfdW5yZWdpc3Rlcik7CisKKworc3RhdGljIHN0cnVjdCByY19tYXBfdGFibGUgZW1wdHlbXSA9IHsKKwl7IDB4MmEsIEtFWV9DT0ZGRUUgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmNfbWFwX2xpc3QgZW1wdHlfbWFwID0geworCS5tYXAgPSB7CisJCS5zY2FuICAgID0gZW1wdHksCisJCS5zaXplICAgID0gQVJSQVlfU0laRShlbXB0eSksCisJCS5yY190eXBlID0gUkNfVFlQRV9VTktOT1dOLAkvKiBMZWdhY3kgSVIgdHlwZSAqLworCQkubmFtZSAgICA9IFJDX01BUF9FTVBUWSwKKwl9Cit9OworCisvKioKKyAqIGlyX2NyZWF0ZV90YWJsZSgpIC0gaW5pdGlhbGl6ZXMgYSBzY2FuY29kZSB0YWJsZQorICogQHJjX21hcDoJdGhlIHJjX21hcCB0byBpbml0aWFsaXplCisgKiBAbmFtZToJbmFtZSB0byBhc3NpZ24gdG8gdGhlIHRhYmxlCisgKiBAcmNfdHlwZToJaXIgdHlwZSB0byBhc3NpZ24gdG8gdGhlIG5ldyB0YWJsZQorICogQHNpemU6CWluaXRpYWwgc2l6ZSBvZiB0aGUgdGFibGUKKyAqIEByZXR1cm46CXplcm8gb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUKKyAqCisgKiBUaGlzIHJvdXRpbmUgd2lsbCBpbml0aWFsaXplIHRoZSByY19tYXAgYW5kIHdpbGwgYWxsb2NhdGUKKyAqIG1lbW9yeSB0byBob2xkIGF0IGxlYXN0IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGVsZW1lbnRzLgorICovCitzdGF0aWMgaW50IGlyX2NyZWF0ZV90YWJsZShzdHJ1Y3QgcmNfbWFwICpyY19tYXAsCisJCQkgICBjb25zdCBjaGFyICpuYW1lLCB1NjQgcmNfdHlwZSwgc2l6ZV90IHNpemUpCit7CisJcmNfbWFwLT5uYW1lID0gbmFtZTsKKwlyY19tYXAtPnJjX3R5cGUgPSByY190eXBlOworCXJjX21hcC0+YWxsb2MgPSByb3VuZHVwX3Bvd19vZl90d28oc2l6ZSAqIHNpemVvZihzdHJ1Y3QgcmNfbWFwX3RhYmxlKSk7CisJcmNfbWFwLT5zaXplID0gcmNfbWFwLT5hbGxvYyAvIHNpemVvZihzdHJ1Y3QgcmNfbWFwX3RhYmxlKTsKKwlyY19tYXAtPnNjYW4gPSBrbWFsbG9jKHJjX21hcC0+YWxsb2MsIEdGUF9LRVJORUwpOworCWlmICghcmNfbWFwLT5zY2FuKQorCQlyZXR1cm4gLUVOT01FTTsKKworCUlSX2RwcmludGsoMSwgIkFsbG9jYXRlZCBzcGFjZSBmb3IgJXUga2V5Y29kZSBlbnRyaWVzICgldSBieXRlcylcbiIsCisJCSAgIHJjX21hcC0+c2l6ZSwgcmNfbWFwLT5hbGxvYyk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogaXJfZnJlZV90YWJsZSgpIC0gZnJlZXMgbWVtb3J5IGFsbG9jYXRlZCBieSBhIHNjYW5jb2RlIHRhYmxlCisgKiBAcmNfbWFwOgl0aGUgdGFibGUgd2hvc2UgbWFwcGluZ3MgbmVlZCB0byBiZSBmcmVlZAorICoKKyAqIFRoaXMgcm91dGluZSB3aWxsIGZyZWUgbWVtb3J5IGFsbG9jdGFlZCBmb3Iga2V5IG1hcHBpbmdzIHVzZWQgYnkgZ2l2ZW4KKyAqIHNjYW5jb2RlIHRhYmxlLgorICovCitzdGF0aWMgdm9pZCBpcl9mcmVlX3RhYmxlKHN0cnVjdCByY19tYXAgKnJjX21hcCkKK3sKKwlyY19tYXAtPnNpemUgPSAwOworCWtmcmVlKHJjX21hcC0+c2Nhbik7CisJcmNfbWFwLT5zY2FuID0gTlVMTDsKK30KKworLyoqCisgKiBpcl9yZXNpemVfdGFibGUoKSAtIHJlc2l6ZXMgYSBzY2FuY29kZSB0YWJsZSBpZiBuZWNlc3NhcnkKKyAqIEByY19tYXA6CXRoZSByY19tYXAgdG8gcmVzaXplCisgKiBAZ2ZwX2ZsYWdzOglnZnAgZmxhZ3MgdG8gdXNlIHdoZW4gYWxsb2NhdGluZyBtZW1vcnkKKyAqIEByZXR1cm46CXplcm8gb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUKKyAqCisgKiBUaGlzIHJvdXRpbmUgd2lsbCBzaHJpbmsgdGhlIHJjX21hcCBpZiBpdCBoYXMgbG90cyBvZgorICogdW51c2VkIGVudHJpZXMgYW5kIGdyb3cgaXQgaWYgaXQgaXMgZnVsbC4KKyAqLworc3RhdGljIGludCBpcl9yZXNpemVfdGFibGUoc3RydWN0IHJjX21hcCAqcmNfbWFwLCBnZnBfdCBnZnBfZmxhZ3MpCit7CisJdW5zaWduZWQgaW50IG9sZGFsbG9jID0gcmNfbWFwLT5hbGxvYzsKKwl1bnNpZ25lZCBpbnQgbmV3YWxsb2MgPSBvbGRhbGxvYzsKKwlzdHJ1Y3QgcmNfbWFwX3RhYmxlICpvbGRzY2FuID0gcmNfbWFwLT5zY2FuOworCXN0cnVjdCByY19tYXBfdGFibGUgKm5ld3NjYW47CisKKwlpZiAocmNfbWFwLT5zaXplID09IHJjX21hcC0+bGVuKSB7CisJCS8qIEFsbCBlbnRyaWVzIGluIHVzZSAtPiBncm93IGtleXRhYmxlICovCisJCWlmIChyY19tYXAtPmFsbG9jID49IElSX1RBQl9NQVhfU0laRSkKKwkJCXJldHVybiAtRU5PTUVNOworCisJCW5ld2FsbG9jICo9IDI7CisJCUlSX2RwcmludGsoMSwgIkdyb3dpbmcgdGFibGUgdG8gJXUgYnl0ZXNcbiIsIG5ld2FsbG9jKTsKKwl9CisKKwlpZiAoKHJjX21hcC0+bGVuICogMyA8IHJjX21hcC0+c2l6ZSkgJiYgKG9sZGFsbG9jID4gSVJfVEFCX01JTl9TSVpFKSkgeworCQkvKiBMZXNzIHRoYW4gMS8zIG9mIGVudHJpZXMgaW4gdXNlIC0+IHNocmluayBrZXl0YWJsZSAqLworCQluZXdhbGxvYyAvPSAyOworCQlJUl9kcHJpbnRrKDEsICJTaHJpbmtpbmcgdGFibGUgdG8gJXUgYnl0ZXNcbiIsIG5ld2FsbG9jKTsKKwl9CisKKwlpZiAobmV3YWxsb2MgPT0gb2xkYWxsb2MpCisJCXJldHVybiAwOworCisJbmV3c2NhbiA9IGttYWxsb2MobmV3YWxsb2MsIGdmcF9mbGFncyk7CisJaWYgKCFuZXdzY2FuKSB7CisJCUlSX2RwcmludGsoMSwgIkZhaWxlZCB0byBrbWFsbG9jICV1IGJ5dGVzXG4iLCBuZXdhbGxvYyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW1lbWNweShuZXdzY2FuLCByY19tYXAtPnNjYW4sIHJjX21hcC0+bGVuICogc2l6ZW9mKHN0cnVjdCByY19tYXBfdGFibGUpKTsKKwlyY19tYXAtPnNjYW4gPSBuZXdzY2FuOworCXJjX21hcC0+YWxsb2MgPSBuZXdhbGxvYzsKKwlyY19tYXAtPnNpemUgPSByY19tYXAtPmFsbG9jIC8gc2l6ZW9mKHN0cnVjdCByY19tYXBfdGFibGUpOworCWtmcmVlKG9sZHNjYW4pOworCXJldHVybiAwOworfQorCisvKioKKyAqIGlyX3VwZGF0ZV9tYXBwaW5nKCkgLSBzZXQgYSBrZXljb2RlIGluIHRoZSBzY2FuY29kZS0+a2V5Y29kZSB0YWJsZQorICogQGRldjoJdGhlIHN0cnVjdCByY19kZXYgZGV2aWNlIGRlc2NyaXB0b3IKKyAqIEByY19tYXA6CXNjYW5jb2RlIHRhYmxlIHRvIGJlIGFkanVzdGVkCisgKiBAaW5kZXg6CWluZGV4IG9mIHRoZSBtYXBwaW5nIHRoYXQgbmVlZHMgdG8gYmUgdXBkYXRlZAorICogQGtleWNvZGU6CXRoZSBkZXNpcmVkIGtleWNvZGUKKyAqIEByZXR1cm46CXByZXZpb3VzIGtleWNvZGUgYXNzaWduZWQgdG8gdGhlIG1hcHBpbmcKKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgdXNlZCB0byB1cGRhdGUgc2NhbmNvZGUtPmtleWNvZGUgbWFwcGluZyBhdCBnaXZlbgorICogcG9zaXRpb24uCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgaXJfdXBkYXRlX21hcHBpbmcoc3RydWN0IHJjX2RldiAqZGV2LAorCQkJCSAgICAgIHN0cnVjdCByY19tYXAgKnJjX21hcCwKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgaW5kZXgsCisJCQkJICAgICAgdW5zaWduZWQgaW50IG5ld19rZXljb2RlKQoreworCWludCBvbGRfa2V5Y29kZSA9IHJjX21hcC0+c2NhbltpbmRleF0ua2V5Y29kZTsKKwlpbnQgaTsKKworCS8qIERpZCB0aGUgdXNlciB3aXNoIHRvIHJlbW92ZSB0aGUgbWFwcGluZz8gKi8KKwlpZiAobmV3X2tleWNvZGUgPT0gS0VZX1JFU0VSVkVEIHx8IG5ld19rZXljb2RlID09IEtFWV9VTktOT1dOKSB7CisJCUlSX2RwcmludGsoMSwgIiMlZDogRGVsZXRpbmcgc2NhbiAweCUwNHhcbiIsCisJCQkgICBpbmRleCwgcmNfbWFwLT5zY2FuW2luZGV4XS5zY2FuY29kZSk7CisJCXJjX21hcC0+bGVuLS07CisJCW1lbW1vdmUoJnJjX21hcC0+c2NhbltpbmRleF0sICZyY19tYXAtPnNjYW5baW5kZXgrIDFdLAorCQkJKHJjX21hcC0+bGVuIC0gaW5kZXgpICogc2l6ZW9mKHN0cnVjdCByY19tYXBfdGFibGUpKTsKKwl9IGVsc2UgeworCQlJUl9kcHJpbnRrKDEsICIjJWQ6ICVzIHNjYW4gMHglMDR4IHdpdGgga2V5IDB4JTA0eFxuIiwKKwkJCSAgIGluZGV4LAorCQkJICAgb2xkX2tleWNvZGUgPT0gS0VZX1JFU0VSVkVEID8gIk5ldyIgOiAiUmVwbGFjaW5nIiwKKwkJCSAgIHJjX21hcC0+c2NhbltpbmRleF0uc2NhbmNvZGUsIG5ld19rZXljb2RlKTsKKwkJcmNfbWFwLT5zY2FuW2luZGV4XS5rZXljb2RlID0gbmV3X2tleWNvZGU7CisJCV9fc2V0X2JpdChuZXdfa2V5Y29kZSwgZGV2LT5pbnB1dF9kZXYtPmtleWJpdCk7CisJfQorCisJaWYgKG9sZF9rZXljb2RlICE9IEtFWV9SRVNFUlZFRCkgeworCQkvKiBBIHByZXZpb3VzIG1hcHBpbmcgd2FzIHVwZGF0ZWQuLi4gKi8KKwkJX19jbGVhcl9iaXQob2xkX2tleWNvZGUsIGRldi0+aW5wdXRfZGV2LT5rZXliaXQpOworCQkvKiAuLi4gYnV0IGFub3RoZXIgc2NhbmNvZGUgbWlnaHQgdXNlIHRoZSBzYW1lIGtleWNvZGUgKi8KKwkJZm9yIChpID0gMDsgaSA8IHJjX21hcC0+bGVuOyBpKyspIHsKKwkJCWlmIChyY19tYXAtPnNjYW5baV0ua2V5Y29kZSA9PSBvbGRfa2V5Y29kZSkgeworCQkJCV9fc2V0X2JpdChvbGRfa2V5Y29kZSwgZGV2LT5pbnB1dF9kZXYtPmtleWJpdCk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQkvKiBQb3NzaWJseSBzaHJpbmsgdGhlIGtleXRhYmxlLCBmYWlsdXJlIGlzIG5vdCBhIHByb2JsZW0gKi8KKwkJaXJfcmVzaXplX3RhYmxlKHJjX21hcCwgR0ZQX0FUT01JQyk7CisJfQorCisJcmV0dXJuIG9sZF9rZXljb2RlOworfQorCisvKioKKyAqIGlyX2VzdGFibGlzaF9zY2FuY29kZSgpIC0gc2V0IGEga2V5Y29kZSBpbiB0aGUgc2NhbmNvZGUtPmtleWNvZGUgdGFibGUKKyAqIEBkZXY6CXRoZSBzdHJ1Y3QgcmNfZGV2IGRldmljZSBkZXNjcmlwdG9yCisgKiBAcmNfbWFwOglzY2FuY29kZSB0YWJsZSB0byBiZSBzZWFyY2hlZAorICogQHNjYW5jb2RlOgl0aGUgZGVzaXJlZCBzY2FuY29kZQorICogQHJlc2l6ZToJY29udHJvbHMgd2hldGhlciB3ZSBhbGxvd2VkIHRvIHJlc2l6ZSB0aGUgdGFibGUgdG8KKyAqCQlhY2NvbW9kYXRlIG5vdCB5ZXQgcHJlc2VudCBzY2FuY29kZXMKKyAqIEByZXR1cm46CWluZGV4IG9mIHRoZSBtYXBwaW5nIGNvbnRhaW5pbmcgc2NhbmNvZGUgaW4gcXVlc3Rpb24KKyAqCQlvciAtMVUgaW4gY2FzZSBvZiBmYWlsdXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBpcyB1c2VkIHRvIGxvY2F0ZSBnaXZlbiBzY2FuY29kZSBpbiByY19tYXAuCisgKiBJZiBzY2FuY29kZSBpcyBub3QgeWV0IHByZXNlbnQgdGhlIHJvdXRpbmUgd2lsbCBhbGxvY2F0ZSBhIG5ldyBzbG90CisgKiBmb3IgaXQuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgaXJfZXN0YWJsaXNoX3NjYW5jb2RlKHN0cnVjdCByY19kZXYgKmRldiwKKwkJCQkJICBzdHJ1Y3QgcmNfbWFwICpyY19tYXAsCisJCQkJCSAgdW5zaWduZWQgaW50IHNjYW5jb2RlLAorCQkJCQkgIGJvb2wgcmVzaXplKQoreworCXVuc2lnbmVkIGludCBpOworCisJLyoKKwkgKiBVbmZvcnR1bmF0ZWx5LCBzb21lIGhhcmR3YXJlLWJhc2VkIElSIGRlY29kZXJzIGRvbid0IHByb3ZpZGUKKwkgKiBhbGwgYml0cyBmb3IgdGhlIGNvbXBsZXRlIElSIGNvZGUuIEluIGdlbmVyYWwsIHRoZXkgcHJvdmlkZSBvbmx5CisJICogdGhlIGNvbW1hbmQgcGFydCBvZiB0aGUgSVIgY29kZS4gWWV0LCBhcyBpdCBpcyBwb3NzaWJsZSB0byByZXBsYWNlCisJICogdGhlIHByb3ZpZGVkIElSIHdpdGggYW5vdGhlciBvbmUsIGl0IGlzIG5lZWRlZCB0byBhbGxvdyBsb2FkaW5nCisJICogSVIgdGFibGVzIGZyb20gb3RoZXIgcmVtb3Rlcy4gU28sIHdlIHN1cHBvcnQgc3BlY2lmeWluZyBhIG1hc2sgdG8KKwkgKiBpbmRpY2F0ZSB0aGUgdmFsaWQgYml0cyBvZiB0aGUgc2NhbmNvZGVzLgorCSAqLworCWlmIChkZXYtPnNjYW5tYXNrKQorCQlzY2FuY29kZSAmPSBkZXYtPnNjYW5tYXNrOworCisJLyogRmlyc3QgY2hlY2sgaWYgd2UgYWxyZWFkeSBoYXZlIGEgbWFwcGluZyBmb3IgdGhpcyBpciBjb21tYW5kICovCisJZm9yIChpID0gMDsgaSA8IHJjX21hcC0+bGVuOyBpKyspIHsKKwkJaWYgKHJjX21hcC0+c2NhbltpXS5zY2FuY29kZSA9PSBzY2FuY29kZSkKKwkJCXJldHVybiBpOworCisJCS8qIEtleXRhYmxlIGlzIHNvcnRlZCBmcm9tIGxvd2VzdCB0byBoaWdoZXN0IHNjYW5jb2RlICovCisJCWlmIChyY19tYXAtPnNjYW5baV0uc2NhbmNvZGUgPj0gc2NhbmNvZGUpCisJCQlicmVhazsKKwl9CisKKwkvKiBObyBwcmV2aW91cyBtYXBwaW5nIGZvdW5kLCB3ZSBtaWdodCBuZWVkIHRvIGdyb3cgdGhlIHRhYmxlICovCisJaWYgKHJjX21hcC0+c2l6ZSA9PSByY19tYXAtPmxlbikgeworCQlpZiAoIXJlc2l6ZSB8fCBpcl9yZXNpemVfdGFibGUocmNfbWFwLCBHRlBfQVRPTUlDKSkKKwkJCXJldHVybiAtMVU7CisJfQorCisJLyogaSBpcyB0aGUgcHJvcGVyIGluZGV4IHRvIGluc2VydCBvdXIgbmV3IGtleWNvZGUgKi8KKwlpZiAoaSA8IHJjX21hcC0+bGVuKQorCQltZW1tb3ZlKCZyY19tYXAtPnNjYW5baSArIDFdLCAmcmNfbWFwLT5zY2FuW2ldLAorCQkJKHJjX21hcC0+bGVuIC0gaSkgKiBzaXplb2Yoc3RydWN0IHJjX21hcF90YWJsZSkpOworCXJjX21hcC0+c2NhbltpXS5zY2FuY29kZSA9IHNjYW5jb2RlOworCXJjX21hcC0+c2NhbltpXS5rZXljb2RlID0gS0VZX1JFU0VSVkVEOworCXJjX21hcC0+bGVuKys7CisKKwlyZXR1cm4gaTsKK30KKworLyoqCisgKiBpcl9zZXRrZXljb2RlKCkgLSBzZXQgYSBrZXljb2RlIGluIHRoZSBzY2FuY29kZS0+a2V5Y29kZSB0YWJsZQorICogQGlkZXY6CXRoZSBzdHJ1Y3QgaW5wdXRfZGV2IGRldmljZSBkZXNjcmlwdG9yCisgKiBAc2NhbmNvZGU6CXRoZSBkZXNpcmVkIHNjYW5jb2RlCisgKiBAa2V5Y29kZToJcmVzdWx0CisgKiBAcmV0dXJuOgktRUlOVkFMIGlmIHRoZSBrZXljb2RlIGNvdWxkIG5vdCBiZSBpbnNlcnRlZCwgb3RoZXJ3aXNlIHplcm8uCisgKgorICogVGhpcyByb3V0aW5lIGlzIHVzZWQgdG8gaGFuZGxlIGV2ZGV2IEVWSU9DU0tFWSBpb2N0bC4KKyAqLworc3RhdGljIGludCBpcl9zZXRrZXljb2RlKHN0cnVjdCBpbnB1dF9kZXYgKmlkZXYsCisJCQkgY29uc3Qgc3RydWN0IGlucHV0X2tleW1hcF9lbnRyeSAqa2UsCisJCQkgdW5zaWduZWQgaW50ICpvbGRfa2V5Y29kZSkKK3sKKwlzdHJ1Y3QgcmNfZGV2ICpyZGV2ID0gaW5wdXRfZ2V0X2RydmRhdGEoaWRldik7CisJc3RydWN0IHJjX21hcCAqcmNfbWFwID0gJnJkZXYtPnJjX21hcDsKKwl1bnNpZ25lZCBpbnQgaW5kZXg7CisJdW5zaWduZWQgaW50IHNjYW5jb2RlOworCWludCByZXR2YWwgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcmNfbWFwLT5sb2NrLCBmbGFncyk7CisKKwlpZiAoa2UtPmZsYWdzICYgSU5QVVRfS0VZTUFQX0JZX0lOREVYKSB7CisJCWluZGV4ID0ga2UtPmluZGV4OworCQlpZiAoaW5kZXggPj0gcmNfbWFwLT5sZW4pIHsKKwkJCXJldHZhbCA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQorCX0gZWxzZSB7CisJCXJldHZhbCA9IGlucHV0X3NjYW5jb2RlX3RvX3NjYWxhcihrZSwgJnNjYW5jb2RlKTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gb3V0OworCisJCWluZGV4ID0gaXJfZXN0YWJsaXNoX3NjYW5jb2RlKHJkZXYsIHJjX21hcCwgc2NhbmNvZGUsIHRydWUpOworCQlpZiAoaW5kZXggPj0gcmNfbWFwLT5sZW4pIHsKKwkJCXJldHZhbCA9IC1FTk9NRU07CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCSpvbGRfa2V5Y29kZSA9IGlyX3VwZGF0ZV9tYXBwaW5nKHJkZXYsIHJjX21hcCwgaW5kZXgsIGtlLT5rZXljb2RlKTsKKworb3V0OgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJjX21hcC0+bG9jaywgZmxhZ3MpOworCXJldHVybiByZXR2YWw7Cit9CisKKy8qKgorICogaXJfc2V0a2V5dGFibGUoKSAtIHNldHMgc2V2ZXJhbCBlbnRyaWVzIGluIHRoZSBzY2FuY29kZS0+a2V5Y29kZSB0YWJsZQorICogQGRldjoJdGhlIHN0cnVjdCByY19kZXYgZGV2aWNlIGRlc2NyaXB0b3IKKyAqIEB0bzoJCXRoZSBzdHJ1Y3QgcmNfbWFwIHRvIGNvcHkgZW50cmllcyB0bworICogQGZyb206CXRoZSBzdHJ1Y3QgcmNfbWFwIHRvIGNvcHkgZW50cmllcyBmcm9tCisgKiBAcmV0dXJuOgktRU5PTUVNIGlmIGFsbCBrZXljb2RlcyBjb3VsZCBub3QgYmUgaW5zZXJ0ZWQsIG90aGVyd2lzZSB6ZXJvLgorICoKKyAqIFRoaXMgcm91dGluZSBpcyB1c2VkIHRvIGhhbmRsZSB0YWJsZSBpbml0aWFsaXphdGlvbi4KKyAqLworc3RhdGljIGludCBpcl9zZXRrZXl0YWJsZShzdHJ1Y3QgcmNfZGV2ICpkZXYsCisJCQkgIGNvbnN0IHN0cnVjdCByY19tYXAgKmZyb20pCit7CisJc3RydWN0IHJjX21hcCAqcmNfbWFwID0gJmRldi0+cmNfbWFwOworCXVuc2lnbmVkIGludCBpLCBpbmRleDsKKwlpbnQgcmM7CisKKwlyYyA9IGlyX2NyZWF0ZV90YWJsZShyY19tYXAsIGZyb20tPm5hbWUsCisJCQkgICAgIGZyb20tPnJjX3R5cGUsIGZyb20tPnNpemUpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJSVJfZHByaW50aygxLCAiQWxsb2NhdGVkIHNwYWNlIGZvciAldSBrZXljb2RlIGVudHJpZXMgKCV1IGJ5dGVzKVxuIiwKKwkJICAgcmNfbWFwLT5zaXplLCByY19tYXAtPmFsbG9jKTsKKworCWZvciAoaSA9IDA7IGkgPCBmcm9tLT5zaXplOyBpKyspIHsKKwkJaW5kZXggPSBpcl9lc3RhYmxpc2hfc2NhbmNvZGUoZGV2LCByY19tYXAsCisJCQkJCSAgICAgIGZyb20tPnNjYW5baV0uc2NhbmNvZGUsIGZhbHNlKTsKKwkJaWYgKGluZGV4ID49IHJjX21hcC0+bGVuKSB7CisJCQlyYyA9IC1FTk9NRU07CisJCQlicmVhazsKKwkJfQorCisJCWlyX3VwZGF0ZV9tYXBwaW5nKGRldiwgcmNfbWFwLCBpbmRleCwKKwkJCQkgIGZyb20tPnNjYW5baV0ua2V5Y29kZSk7CisJfQorCisJaWYgKHJjKQorCQlpcl9mcmVlX3RhYmxlKHJjX21hcCk7CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qKgorICogaXJfbG9va3VwX2J5X3NjYW5jb2RlKCkgLSBsb2NhdGUgbWFwcGluZyBieSBzY2FuY29kZQorICogQHJjX21hcDoJdGhlIHN0cnVjdCByY19tYXAgdG8gc2VhcmNoCisgKiBAc2NhbmNvZGU6CXNjYW5jb2RlIHRvIGxvb2sgZm9yIGluIHRoZSB0YWJsZQorICogQHJldHVybjoJaW5kZXggaW4gdGhlIHRhYmxlLCAtMVUgaWYgbm90IGZvdW5kCisgKgorICogVGhpcyByb3V0aW5lIHBlcmZvcm1zIGJpbmFyeSBzZWFyY2ggaW4gUkMga2V5a2V5bWFwIHRhYmxlIGZvcgorICogZ2l2ZW4gc2NhbmNvZGUuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgaXJfbG9va3VwX2J5X3NjYW5jb2RlKGNvbnN0IHN0cnVjdCByY19tYXAgKnJjX21hcCwKKwkJCQkJICB1bnNpZ25lZCBpbnQgc2NhbmNvZGUpCit7CisJaW50IHN0YXJ0ID0gMDsKKwlpbnQgZW5kID0gcmNfbWFwLT5sZW4gLSAxOworCWludCBtaWQ7CisKKwl3aGlsZSAoc3RhcnQgPD0gZW5kKSB7CisJCW1pZCA9IChzdGFydCArIGVuZCkgLyAyOworCQlpZiAocmNfbWFwLT5zY2FuW21pZF0uc2NhbmNvZGUgPCBzY2FuY29kZSkKKwkJCXN0YXJ0ID0gbWlkICsgMTsKKwkJZWxzZSBpZiAocmNfbWFwLT5zY2FuW21pZF0uc2NhbmNvZGUgPiBzY2FuY29kZSkKKwkJCWVuZCA9IG1pZCAtIDE7CisJCWVsc2UKKwkJCXJldHVybiBtaWQ7CisJfQorCisJcmV0dXJuIC0xVTsKK30KKworLyoqCisgKiBpcl9nZXRrZXljb2RlKCkgLSBnZXQgYSBrZXljb2RlIGZyb20gdGhlIHNjYW5jb2RlLT5rZXljb2RlIHRhYmxlCisgKiBAaWRldjoJdGhlIHN0cnVjdCBpbnB1dF9kZXYgZGV2aWNlIGRlc2NyaXB0b3IKKyAqIEBzY2FuY29kZToJdGhlIGRlc2lyZWQgc2NhbmNvZGUKKyAqIEBrZXljb2RlOgl1c2VkIHRvIHJldHVybiB0aGUga2V5Y29kZSwgaWYgZm91bmQsIG9yIEtFWV9SRVNFUlZFRAorICogQHJldHVybjoJYWx3YXlzIHJldHVybnMgemVyby4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgdXNlZCB0byBoYW5kbGUgZXZkZXYgRVZJT0NHS0VZIGlvY3RsLgorICovCitzdGF0aWMgaW50IGlyX2dldGtleWNvZGUoc3RydWN0IGlucHV0X2RldiAqaWRldiwKKwkJCSBzdHJ1Y3QgaW5wdXRfa2V5bWFwX2VudHJ5ICprZSkKK3sKKwlzdHJ1Y3QgcmNfZGV2ICpyZGV2ID0gaW5wdXRfZ2V0X2RydmRhdGEoaWRldik7CisJc3RydWN0IHJjX21hcCAqcmNfbWFwID0gJnJkZXYtPnJjX21hcDsKKwlzdHJ1Y3QgcmNfbWFwX3RhYmxlICplbnRyeTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBpbmRleDsKKwl1bnNpZ25lZCBpbnQgc2NhbmNvZGU7CisJaW50IHJldHZhbDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZyY19tYXAtPmxvY2ssIGZsYWdzKTsKKworCWlmIChrZS0+ZmxhZ3MgJiBJTlBVVF9LRVlNQVBfQllfSU5ERVgpIHsKKwkJaW5kZXggPSBrZS0+aW5kZXg7CisJfSBlbHNlIHsKKwkJcmV0dmFsID0gaW5wdXRfc2NhbmNvZGVfdG9fc2NhbGFyKGtlLCAmc2NhbmNvZGUpOworCQlpZiAocmV0dmFsKQorCQkJZ290byBvdXQ7CisKKwkJaW5kZXggPSBpcl9sb29rdXBfYnlfc2NhbmNvZGUocmNfbWFwLCBzY2FuY29kZSk7CisJfQorCisJaWYgKGluZGV4ID49IHJjX21hcC0+bGVuKSB7CisJCWlmICghKGtlLT5mbGFncyAmIElOUFVUX0tFWU1BUF9CWV9JTkRFWCkpCisJCQlJUl9kcHJpbnRrKDEsICJ1bmtub3duIGtleSBmb3Igc2NhbmNvZGUgMHglMDR4XG4iLAorCQkJCSAgIHNjYW5jb2RlKTsKKwkJcmV0dmFsID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJZW50cnkgPSAmcmNfbWFwLT5zY2FuW2luZGV4XTsKKworCWtlLT5pbmRleCA9IGluZGV4OworCWtlLT5rZXljb2RlID0gZW50cnktPmtleWNvZGU7CisJa2UtPmxlbiA9IHNpemVvZihlbnRyeS0+c2NhbmNvZGUpOworCW1lbWNweShrZS0+c2NhbmNvZGUsICZlbnRyeS0+c2NhbmNvZGUsIHNpemVvZihlbnRyeS0+c2NhbmNvZGUpKTsKKworCXJldHZhbCA9IDA7CisKK291dDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyY19tYXAtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKioKKyAqIHJjX2dfa2V5Y29kZV9mcm9tX3RhYmxlKCkgLSBnZXRzIHRoZSBrZXljb2RlIHRoYXQgY29ycmVzcG9uZHMgdG8gYSBzY2FuY29kZQorICogQGRldjoJdGhlIHN0cnVjdCByY19kZXYgZGVzY3JpcHRvciBvZiB0aGUgZGV2aWNlCisgKiBAc2NhbmNvZGU6CXRoZSBzY2FuY29kZSB0byBsb29rIGZvcgorICogQHJldHVybjoJdGhlIGNvcnJlc3BvbmRpbmcga2V5Y29kZSwgb3IgS0VZX1JFU0VSVkVECisgKgorICogVGhpcyByb3V0aW5lIGlzIHVzZWQgYnkgZHJpdmVycyB3aGljaCBuZWVkIHRvIGNvbnZlcnQgYSBzY2FuY29kZSB0byBhCisgKiBrZXljb2RlLiBOb3JtYWxseSBpdCBzaG91bGQgbm90IGJlIHVzZWQgc2luY2UgZHJpdmVycyBzaG91bGQgaGF2ZSBubworICogaW50ZXJlc3QgaW4ga2V5Y29kZXMuCisgKi8KK3UzMiByY19nX2tleWNvZGVfZnJvbV90YWJsZShzdHJ1Y3QgcmNfZGV2ICpkZXYsIHUzMiBzY2FuY29kZSkKK3sKKwlzdHJ1Y3QgcmNfbWFwICpyY19tYXAgPSAmZGV2LT5yY19tYXA7CisJdW5zaWduZWQgaW50IGtleWNvZGU7CisJdW5zaWduZWQgaW50IGluZGV4OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcmNfbWFwLT5sb2NrLCBmbGFncyk7CisKKwlpbmRleCA9IGlyX2xvb2t1cF9ieV9zY2FuY29kZShyY19tYXAsIHNjYW5jb2RlKTsKKwlrZXljb2RlID0gaW5kZXggPCByY19tYXAtPmxlbiA/CisJCQlyY19tYXAtPnNjYW5baW5kZXhdLmtleWNvZGUgOiBLRVlfUkVTRVJWRUQ7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyY19tYXAtPmxvY2ssIGZsYWdzKTsKKworCWlmIChrZXljb2RlICE9IEtFWV9SRVNFUlZFRCkKKwkJSVJfZHByaW50aygxLCAiJXM6IHNjYW5jb2RlIDB4JTA0eCBrZXljb2RlIDB4JTAyeFxuIiwKKwkJCSAgIGRldi0+aW5wdXRfbmFtZSwgc2NhbmNvZGUsIGtleWNvZGUpOworCisJcmV0dXJuIGtleWNvZGU7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChyY19nX2tleWNvZGVfZnJvbV90YWJsZSk7CisKKy8qKgorICogaXJfZG9fa2V5dXAoKSAtIGludGVybmFsIGZ1bmN0aW9uIHRvIHNpZ25hbCB0aGUgcmVsZWFzZSBvZiBhIGtleXByZXNzCisgKiBAZGV2Ogl0aGUgc3RydWN0IHJjX2RldiBkZXNjcmlwdG9yIG9mIHRoZSBkZXZpY2UKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgaW50ZXJuYWxseSB0byByZWxlYXNlIGEga2V5cHJlc3MsIGl0IG11c3QgYmUKKyAqIGNhbGxlZCB3aXRoIGtleWxvY2sgaGVsZC4KKyAqLworc3RhdGljIHZvaWQgaXJfZG9fa2V5dXAoc3RydWN0IHJjX2RldiAqZGV2KQoreworCWlmICghZGV2LT5rZXlwcmVzc2VkKQorCQlyZXR1cm47CisKKwlJUl9kcHJpbnRrKDEsICJrZXl1cCBrZXkgMHglMDR4XG4iLCBkZXYtPmxhc3Rfa2V5Y29kZSk7CisJaW5wdXRfcmVwb3J0X2tleShkZXYtPmlucHV0X2RldiwgZGV2LT5sYXN0X2tleWNvZGUsIDApOworCWlucHV0X3N5bmMoZGV2LT5pbnB1dF9kZXYpOworCWRldi0+a2V5cHJlc3NlZCA9IGZhbHNlOworfQorCisvKioKKyAqIHJjX2tleXVwKCkgLSBzaWduYWxzIHRoZSByZWxlYXNlIG9mIGEga2V5cHJlc3MKKyAqIEBkZXY6CXRoZSBzdHJ1Y3QgcmNfZGV2IGRlc2NyaXB0b3Igb2YgdGhlIGRldmljZQorICoKKyAqIFRoaXMgcm91dGluZSBpcyB1c2VkIHRvIHNpZ25hbCB0aGF0IGEga2V5IGhhcyBiZWVuIHJlbGVhc2VkIG9uIHRoZQorICogcmVtb3RlIGNvbnRyb2wuCisgKi8KK3ZvaWQgcmNfa2V5dXAoc3RydWN0IHJjX2RldiAqZGV2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5rZXlsb2NrLCBmbGFncyk7CisJaXJfZG9fa2V5dXAoZGV2KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmtleWxvY2ssIGZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJjX2tleXVwKTsKKworLyoqCisgKiBpcl90aW1lcl9rZXl1cCgpIC0gZ2VuZXJhdGVzIGEga2V5dXAgZXZlbnQgYWZ0ZXIgYSB0aW1lb3V0CisgKiBAY29va2llOglhIHBvaW50ZXIgdG8gdGhlIHN0cnVjdCByY19kZXYgZm9yIHRoZSBkZXZpY2UKKyAqCisgKiBUaGlzIHJvdXRpbmUgd2lsbCBnZW5lcmF0ZSBhIGtleXVwIGV2ZW50IHNvbWUgdGltZSBhZnRlciBhIGtleWRvd24gZXZlbnQKKyAqIGlzIGdlbmVyYXRlZCB3aGVuIG5vIGZ1cnRoZXIgYWN0aXZpdHkgaGFzIGJlZW4gZGV0ZWN0ZWQuCisgKi8KK3N0YXRpYyB2b2lkIGlyX3RpbWVyX2tleXVwKHVuc2lnbmVkIGxvbmcgY29va2llKQoreworCXN0cnVjdCByY19kZXYgKmRldiA9IChzdHJ1Y3QgcmNfZGV2ICopY29va2llOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKgorCSAqIGlyLT5rZXl1cF9qaWZmaWVzIGlzIHVzZWQgdG8gcHJldmVudCBhIHJhY2UgY29uZGl0aW9uIGlmIGEKKwkgKiBoYXJkd2FyZSBpbnRlcnJ1cHQgb2NjdXJzIGF0IHRoaXMgcG9pbnQgYW5kIHRoZSBrZXl1cCB0aW1lcgorCSAqIGV2ZW50IGlzIG1vdmVkIGZ1cnRoZXIgaW50byB0aGUgZnV0dXJlIGFzIGEgcmVzdWx0LgorCSAqCisJICogVGhlIHRpbWVyIHdpbGwgdGhlbiBiZSByZWFjdGl2YXRlZCBhbmQgdGhpcyBmdW5jdGlvbiBjYWxsZWQKKwkgKiBhZ2FpbiBpbiB0aGUgZnV0dXJlLiBXZSBuZWVkIHRvIGV4aXQgZ3JhY2VmdWxseSBpbiB0aGF0IGNhc2UKKwkgKiB0byBhbGxvdyB0aGUgaW5wdXQgc3Vic3lzdGVtIHRvIGRvIGl0cyBhdXRvLXJlcGVhdCBtYWdpYyBvcgorCSAqIGEga2V5dXAgZXZlbnQgbWlnaHQgZm9sbG93IGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBrZXlkb3duLgorCSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmtleWxvY2ssIGZsYWdzKTsKKwlpZiAodGltZV9pc19iZWZvcmVfZXFfamlmZmllcyhkZXYtPmtleXVwX2ppZmZpZXMpKQorCQlpcl9kb19rZXl1cChkZXYpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+a2V5bG9jaywgZmxhZ3MpOworfQorCisvKioKKyAqIHJjX3JlcGVhdCgpIC0gc2lnbmFscyB0aGF0IGEga2V5IGlzIHN0aWxsIHByZXNzZWQKKyAqIEBkZXY6CXRoZSBzdHJ1Y3QgcmNfZGV2IGRlc2NyaXB0b3Igb2YgdGhlIGRldmljZQorICoKKyAqIFRoaXMgcm91dGluZSBpcyB1c2VkIGJ5IElSIGRlY29kZXJzIHdoZW4gYSByZXBlYXQgbWVzc2FnZSB3aGljaCBkb2VzCisgKiBub3QgaW5jbHVkZSB0aGUgbmVjZXNzYXJ5IGJpdHMgdG8gcmVwcm9kdWNlIHRoZSBzY2FuY29kZSBoYXMgYmVlbgorICogcmVjZWl2ZWQuCisgKi8KK3ZvaWQgcmNfcmVwZWF0KHN0cnVjdCByY19kZXYgKmRldikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+a2V5bG9jaywgZmxhZ3MpOworCisJaW5wdXRfZXZlbnQoZGV2LT5pbnB1dF9kZXYsIEVWX01TQywgTVNDX1NDQU4sIGRldi0+bGFzdF9zY2FuY29kZSk7CisKKwlpZiAoIWRldi0+a2V5cHJlc3NlZCkKKwkJZ290byBvdXQ7CisKKwlkZXYtPmtleXVwX2ppZmZpZXMgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhJUl9LRVlQUkVTU19USU1FT1VUKTsKKwltb2RfdGltZXIoJmRldi0+dGltZXJfa2V5dXAsIGRldi0+a2V5dXBfamlmZmllcyk7CisKK291dDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmtleWxvY2ssIGZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJjX3JlcGVhdCk7CisKKy8qKgorICogaXJfZG9fa2V5ZG93bigpIC0gaW50ZXJuYWwgZnVuY3Rpb24gdG8gcHJvY2VzcyBhIGtleXByZXNzCisgKiBAZGV2Ogl0aGUgc3RydWN0IHJjX2RldiBkZXNjcmlwdG9yIG9mIHRoZSBkZXZpY2UKKyAqIEBzY2FuY29kZTogICB0aGUgc2NhbmNvZGUgb2YgdGhlIGtleXByZXNzCisgKiBAa2V5Y29kZTogICAgdGhlIGtleWNvZGUgb2YgdGhlIGtleXByZXNzCisgKiBAdG9nZ2xlOiAgICAgdGhlIHRvZ2dsZSB2YWx1ZSBvZiB0aGUga2V5cHJlc3MKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgaW50ZXJuYWxseSB0byByZWdpc3RlciBhIGtleXByZXNzLCBpdCBtdXN0IGJlCisgKiBjYWxsZWQgd2l0aCBrZXlsb2NrIGhlbGQuCisgKi8KK3N0YXRpYyB2b2lkIGlyX2RvX2tleWRvd24oc3RydWN0IHJjX2RldiAqZGV2LCBpbnQgc2NhbmNvZGUsCisJCQkgIHUzMiBrZXljb2RlLCB1OCB0b2dnbGUpCit7CisJaW5wdXRfZXZlbnQoZGV2LT5pbnB1dF9kZXYsIEVWX01TQywgTVNDX1NDQU4sIHNjYW5jb2RlKTsKKworCS8qIFJlcGVhdCBldmVudD8gKi8KKwlpZiAoZGV2LT5rZXlwcmVzc2VkICYmCisJICAgIGRldi0+bGFzdF9zY2FuY29kZSA9PSBzY2FuY29kZSAmJgorCSAgICBkZXYtPmxhc3RfdG9nZ2xlID09IHRvZ2dsZSkKKwkJcmV0dXJuOworCisJLyogUmVsZWFzZSBvbGQga2V5cHJlc3MgKi8KKwlpcl9kb19rZXl1cChkZXYpOworCisJZGV2LT5sYXN0X3NjYW5jb2RlID0gc2NhbmNvZGU7CisJZGV2LT5sYXN0X3RvZ2dsZSA9IHRvZ2dsZTsKKwlkZXYtPmxhc3Rfa2V5Y29kZSA9IGtleWNvZGU7CisKKwlpZiAoa2V5Y29kZSA9PSBLRVlfUkVTRVJWRUQpCisJCXJldHVybjsKKworCS8qIFJlZ2lzdGVyIGEga2V5cHJlc3MgKi8KKwlkZXYtPmtleXByZXNzZWQgPSB0cnVlOworCUlSX2RwcmludGsoMSwgIiVzOiBrZXkgZG93biBldmVudCwga2V5IDB4JTA0eCwgc2NhbmNvZGUgMHglMDR4XG4iLAorCQkgICBkZXYtPmlucHV0X25hbWUsIGtleWNvZGUsIHNjYW5jb2RlKTsKKwlpbnB1dF9yZXBvcnRfa2V5KGRldi0+aW5wdXRfZGV2LCBkZXYtPmxhc3Rfa2V5Y29kZSwgMSk7CisJaW5wdXRfc3luYyhkZXYtPmlucHV0X2Rldik7Cit9CisKKy8qKgorICogcmNfa2V5ZG93bigpIC0gZ2VuZXJhdGVzIGlucHV0IGV2ZW50IGZvciBhIGtleSBwcmVzcworICogQGRldjoJdGhlIHN0cnVjdCByY19kZXYgZGVzY3JpcHRvciBvZiB0aGUgZGV2aWNlCisgKiBAc2NhbmNvZGU6ICAgdGhlIHNjYW5jb2RlIHRoYXQgd2UncmUgc2Vla2luZworICogQHRvZ2dsZTogICAgIHRoZSB0b2dnbGUgdmFsdWUgKHByb3RvY29sIGRlcGVuZGVudCwgaWYgdGhlIHByb3RvY29sIGRvZXNuJ3QKKyAqICAgICAgICAgICAgICBzdXBwb3J0IHRvZ2dsZSB2YWx1ZXMsIHRoaXMgc2hvdWxkIGJlIHNldCB0byB6ZXJvKQorICoKKyAqIFRoaXMgcm91dGluZSBpcyB1c2VkIHRvIHNpZ25hbCB0aGF0IGEga2V5IGhhcyBiZWVuIHByZXNzZWQgb24gdGhlCisgKiByZW1vdGUgY29udHJvbC4KKyAqLwordm9pZCByY19rZXlkb3duKHN0cnVjdCByY19kZXYgKmRldiwgaW50IHNjYW5jb2RlLCB1OCB0b2dnbGUpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIga2V5Y29kZSA9IHJjX2dfa2V5Y29kZV9mcm9tX3RhYmxlKGRldiwgc2NhbmNvZGUpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+a2V5bG9jaywgZmxhZ3MpOworCWlyX2RvX2tleWRvd24oZGV2LCBzY2FuY29kZSwga2V5Y29kZSwgdG9nZ2xlKTsKKworCWlmIChkZXYtPmtleXByZXNzZWQpIHsKKwkJZGV2LT5rZXl1cF9qaWZmaWVzID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoSVJfS0VZUFJFU1NfVElNRU9VVCk7CisJCW1vZF90aW1lcigmZGV2LT50aW1lcl9rZXl1cCwgZGV2LT5rZXl1cF9qaWZmaWVzKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5rZXlsb2NrLCBmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChyY19rZXlkb3duKTsKKworLyoqCisgKiByY19rZXlkb3duX25vdGltZW91dCgpIC0gZ2VuZXJhdGVzIGlucHV0IGV2ZW50IGZvciBhIGtleSBwcmVzcyB3aXRob3V0CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYW4gYXV0b21hdGljIGtleXVwIGV2ZW50IGF0IGEgbGF0ZXIgdGltZQorICogQGRldjoJdGhlIHN0cnVjdCByY19kZXYgZGVzY3JpcHRvciBvZiB0aGUgZGV2aWNlCisgKiBAc2NhbmNvZGU6ICAgdGhlIHNjYW5jb2RlIHRoYXQgd2UncmUgc2Vla2luZworICogQHRvZ2dsZTogICAgIHRoZSB0b2dnbGUgdmFsdWUgKHByb3RvY29sIGRlcGVuZGVudCwgaWYgdGhlIHByb3RvY29sIGRvZXNuJ3QKKyAqICAgICAgICAgICAgICBzdXBwb3J0IHRvZ2dsZSB2YWx1ZXMsIHRoaXMgc2hvdWxkIGJlIHNldCB0byB6ZXJvKQorICoKKyAqIFRoaXMgcm91dGluZSBpcyB1c2VkIHRvIHNpZ25hbCB0aGF0IGEga2V5IGhhcyBiZWVuIHByZXNzZWQgb24gdGhlCisgKiByZW1vdGUgY29udHJvbC4gVGhlIGRyaXZlciBtdXN0IG1hbnVhbGx5IGNhbGwgcmNfa2V5dXAoKSBhdCBhIGxhdGVyIHN0YWdlLgorICovCit2b2lkIHJjX2tleWRvd25fbm90aW1lb3V0KHN0cnVjdCByY19kZXYgKmRldiwgaW50IHNjYW5jb2RlLCB1OCB0b2dnbGUpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIga2V5Y29kZSA9IHJjX2dfa2V5Y29kZV9mcm9tX3RhYmxlKGRldiwgc2NhbmNvZGUpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+a2V5bG9jaywgZmxhZ3MpOworCWlyX2RvX2tleWRvd24oZGV2LCBzY2FuY29kZSwga2V5Y29kZSwgdG9nZ2xlKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmtleWxvY2ssIGZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJjX2tleWRvd25fbm90aW1lb3V0KTsKKworc3RhdGljIGludCBpcl9vcGVuKHN0cnVjdCBpbnB1dF9kZXYgKmlkZXYpCit7CisJc3RydWN0IHJjX2RldiAqcmRldiA9IGlucHV0X2dldF9kcnZkYXRhKGlkZXYpOworCisJcmV0dXJuIHJkZXYtPm9wZW4ocmRldik7Cit9CisKK3N0YXRpYyB2b2lkIGlyX2Nsb3NlKHN0cnVjdCBpbnB1dF9kZXYgKmlkZXYpCit7CisJc3RydWN0IHJjX2RldiAqcmRldiA9IGlucHV0X2dldF9kcnZkYXRhKGlkZXYpOworCisJcmRldi0+Y2xvc2UocmRldik7Cit9CisKKy8qIGNsYXNzIGZvciAvc3lzL2NsYXNzL3JjICovCitzdGF0aWMgY2hhciAqaXJfZGV2bm9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIG1vZGVfdCAqbW9kZSkKK3sKKwlyZXR1cm4ga2FzcHJpbnRmKEdGUF9LRVJORUwsICJyYy8lcyIsIGRldl9uYW1lKGRldikpOworfQorCitzdGF0aWMgc3RydWN0IGNsYXNzIGlyX2lucHV0X2NsYXNzID0geworCS5uYW1lCQk9ICJyYyIsCisJLmRldm5vZGUJPSBpcl9kZXZub2RlLAorfTsKKworc3RhdGljIHN0cnVjdCB7CisJdTY0CXR5cGU7CisJY2hhcgkqbmFtZTsKK30gcHJvdG9fbmFtZXNbXSA9IHsKKwl7IFJDX1RZUEVfVU5LTk9XTiwJInVua25vd24iCX0sCisJeyBSQ19UWVBFX1JDNSwJCSJyYy01IgkJfSwKKwl7IFJDX1RZUEVfTkVDLAkJIm5lYyIJCX0sCisJeyBSQ19UWVBFX1JDNiwJCSJyYy02IgkJfSwKKwl7IFJDX1RZUEVfSlZDLAkJImp2YyIJCX0sCisJeyBSQ19UWVBFX1NPTlksCQkic29ueSIJCX0sCisJeyBSQ19UWVBFX1JDNV9TWiwJInJjLTUtc3oiCX0sCisJeyBSQ19UWVBFX0xJUkMsCQkibGlyYyIJCX0sCit9OworCisjZGVmaW5lIFBST1RPX05PTkUJIm5vbmUiCisKKy8qKgorICogc2hvd19wcm90b2NvbHMoKSAtIHNob3dzIHRoZSBjdXJyZW50IElSIHByb3RvY29sKHMpCisgKiBAZGV2aWNlOgl0aGUgZGV2aWNlIGRlc2NyaXB0b3IKKyAqIEBtYXR0cjoJdGhlIGRldmljZSBhdHRyaWJ1dGUgc3RydWN0ICh1bnVzZWQpCisgKiBAYnVmOglhIHBvaW50ZXIgdG8gdGhlIG91dHB1dCBidWZmZXIKKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgYSBjYWxsYmFjayByb3V0aW5lIGZvciBpbnB1dCByZWFkIHRoZSBJUiBwcm90b2NvbCB0eXBlKHMpLgorICogaXQgaXMgdHJpZ2dlZCBieSByZWFkaW5nIC9zeXMvY2xhc3MvcmMvcmM/L3Byb3RvY29scy4KKyAqIEl0IHJldHVybnMgdGhlIHByb3RvY29sIG5hbWVzIG9mIHN1cHBvcnRlZCBwcm90b2NvbHMuCisgKiBFbmFibGVkIHByb3RvY29scyBhcmUgcHJpbnRlZCBpbiBicmFja2V0cy4KKyAqLworc3RhdGljIHNzaXplX3Qgc2hvd19wcm90b2NvbHMoc3RydWN0IGRldmljZSAqZGV2aWNlLAorCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKm1hdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHJjX2RldiAqZGV2ID0gdG9fcmNfZGV2KGRldmljZSk7CisJdTY0IGFsbG93ZWQsIGVuYWJsZWQ7CisJY2hhciAqdG1wID0gYnVmOworCWludCBpOworCisJLyogRGV2aWNlIGlzIGJlaW5nIHJlbW92ZWQgKi8KKwlpZiAoIWRldikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZGV2LT5kcml2ZXJfdHlwZSA9PSBSQ19EUklWRVJfU0NBTkNPREUpIHsKKwkJZW5hYmxlZCA9IGRldi0+cmNfbWFwLnJjX3R5cGU7CisJCWFsbG93ZWQgPSBkZXYtPmFsbG93ZWRfcHJvdG9zOworCX0gZWxzZSB7CisJCWVuYWJsZWQgPSBkZXYtPnJhdy0+ZW5hYmxlZF9wcm90b2NvbHM7CisJCWFsbG93ZWQgPSBpcl9yYXdfZ2V0X2FsbG93ZWRfcHJvdG9jb2xzKCk7CisJfQorCisJSVJfZHByaW50aygxLCAiYWxsb3dlZCAtIDB4JWxseCwgZW5hYmxlZCAtIDB4JWxseFxuIiwKKwkJICAgKGxvbmcgbG9uZylhbGxvd2VkLAorCQkgICAobG9uZyBsb25nKWVuYWJsZWQpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocHJvdG9fbmFtZXMpOyBpKyspIHsKKwkJaWYgKGFsbG93ZWQgJiBlbmFibGVkICYgcHJvdG9fbmFtZXNbaV0udHlwZSkKKwkJCXRtcCArPSBzcHJpbnRmKHRtcCwgIlslc10gIiwgcHJvdG9fbmFtZXNbaV0ubmFtZSk7CisJCWVsc2UgaWYgKGFsbG93ZWQgJiBwcm90b19uYW1lc1tpXS50eXBlKQorCQkJdG1wICs9IHNwcmludGYodG1wLCAiJXMgIiwgcHJvdG9fbmFtZXNbaV0ubmFtZSk7CisJfQorCisJaWYgKHRtcCAhPSBidWYpCisJCXRtcC0tOworCSp0bXAgPSAnXG4nOworCXJldHVybiB0bXAgKyAxIC0gYnVmOworfQorCisvKioKKyAqIHN0b3JlX3Byb3RvY29scygpIC0gY2hhbmdlcyB0aGUgY3VycmVudCBJUiBwcm90b2NvbChzKQorICogQGRldmljZToJdGhlIGRldmljZSBkZXNjcmlwdG9yCisgKiBAbWF0dHI6CXRoZSBkZXZpY2UgYXR0cmlidXRlIHN0cnVjdCAodW51c2VkKQorICogQGJ1ZjoJYSBwb2ludGVyIHRvIHRoZSBpbnB1dCBidWZmZXIKKyAqIEBsZW46CWxlbmd0aCBvZiB0aGUgaW5wdXQgYnVmZmVyCisgKgorICogVGhpcyByb3V0aW5lIGlzIGZvciBjaGFuZ2luZyB0aGUgSVIgcHJvdG9jb2wgdHlwZS4KKyAqIEl0IGlzIHRyaWdnZWQgYnkgd3JpdGluZyB0byAvc3lzL2NsYXNzL3JjL3JjPy9wcm90b2NvbHMuCisgKiBXcml0aW5nICIrcHJvdG8iIHdpbGwgYWRkIGEgcHJvdG9jb2wgdG8gdGhlIGxpc3Qgb2YgZW5hYmxlZCBwcm90b2NvbHMuCisgKiBXcml0aW5nICItcHJvdG8iIHdpbGwgcmVtb3ZlIGEgcHJvdG9jb2wgZnJvbSB0aGUgbGlzdCBvZiBlbmFibGVkIHByb3RvY29scy4KKyAqIFdyaXRpbmcgInByb3RvIiB3aWxsIGVuYWJsZSBvbmx5ICJwcm90byIuCisgKiBXcml0aW5nICJub25lIiB3aWxsIGRpc2FibGUgYWxsIHByb3RvY29scy4KKyAqIFJldHVybnMgLUVJTlZBTCBpZiBhbiBpbnZhbGlkIHByb3RvY29sIGNvbWJpbmF0aW9uIG9yIHVua25vd24gcHJvdG9jb2wgbmFtZQorICogaXMgdXNlZCwgb3RoZXJ3aXNlIEBsZW4uCisgKi8KK3N0YXRpYyBzc2l6ZV90IHN0b3JlX3Byb3RvY29scyhzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsCisJCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKm1hdHRyLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKmRhdGEsCisJCQkgICAgICAgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgcmNfZGV2ICpkZXYgPSB0b19yY19kZXYoZGV2aWNlKTsKKwlib29sIGVuYWJsZSwgZGlzYWJsZTsKKwljb25zdCBjaGFyICp0bXA7CisJdTY0IHR5cGU7CisJdTY0IG1hc2s7CisJaW50IHJjLCBpLCBjb3VudCA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIERldmljZSBpcyBiZWluZyByZW1vdmVkICovCisJaWYgKCFkZXYpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGRldi0+ZHJpdmVyX3R5cGUgPT0gUkNfRFJJVkVSX1NDQU5DT0RFKQorCQl0eXBlID0gZGV2LT5yY19tYXAucmNfdHlwZTsKKwllbHNlIGlmIChkZXYtPnJhdykKKwkJdHlwZSA9IGRldi0+cmF3LT5lbmFibGVkX3Byb3RvY29sczsKKwllbHNlIHsKKwkJSVJfZHByaW50aygxLCAiUHJvdG9jb2wgc3dpdGNoaW5nIG5vdCBzdXBwb3J0ZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl3aGlsZSAoKHRtcCA9IHN0cnNlcCgoY2hhciAqKikgJmRhdGEsICIgXG4iKSkgIT0gTlVMTCkgeworCQlpZiAoISp0bXApCisJCQlicmVhazsKKworCQlpZiAoKnRtcCA9PSAnKycpIHsKKwkJCWVuYWJsZSA9IHRydWU7CisJCQlkaXNhYmxlID0gZmFsc2U7CisJCQl0bXArKzsKKwkJfSBlbHNlIGlmICgqdG1wID09ICctJykgeworCQkJZW5hYmxlID0gZmFsc2U7CisJCQlkaXNhYmxlID0gdHJ1ZTsKKwkJCXRtcCsrOworCQl9IGVsc2UgeworCQkJZW5hYmxlID0gZmFsc2U7CisJCQlkaXNhYmxlID0gZmFsc2U7CisJCX0KKworCQlpZiAoIWVuYWJsZSAmJiAhZGlzYWJsZSAmJiAhc3RybmNhc2VjbXAodG1wLCBQUk9UT19OT05FLCBzaXplb2YoUFJPVE9fTk9ORSkpKSB7CisJCQl0bXAgKz0gc2l6ZW9mKFBST1RPX05PTkUpOworCQkJbWFzayA9IDA7CisJCQljb3VudCsrOworCQl9IGVsc2UgeworCQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocHJvdG9fbmFtZXMpOyBpKyspIHsKKwkJCQlpZiAoIXN0cm5jYXNlY21wKHRtcCwgcHJvdG9fbmFtZXNbaV0ubmFtZSwgc3RybGVuKHByb3RvX25hbWVzW2ldLm5hbWUpKSkgeworCQkJCQl0bXAgKz0gc3RybGVuKHByb3RvX25hbWVzW2ldLm5hbWUpOworCQkJCQltYXNrID0gcHJvdG9fbmFtZXNbaV0udHlwZTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJaWYgKGkgPT0gQVJSQVlfU0laRShwcm90b19uYW1lcykpIHsKKwkJCQlJUl9kcHJpbnRrKDEsICJVbmtub3duIHByb3RvY29sOiAnJXMnXG4iLCB0bXApOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQkJY291bnQrKzsKKwkJfQorCisJCWlmIChlbmFibGUpCisJCQl0eXBlIHw9IG1hc2s7CisJCWVsc2UgaWYgKGRpc2FibGUpCisJCQl0eXBlICY9IH5tYXNrOworCQllbHNlCisJCQl0eXBlID0gbWFzazsKKwl9CisKKwlpZiAoIWNvdW50KSB7CisJCUlSX2RwcmludGsoMSwgIlByb3RvY29sIG5vdCBzcGVjaWZpZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoZGV2LT5jaGFuZ2VfcHJvdG9jb2wpIHsKKwkJcmMgPSBkZXYtPmNoYW5nZV9wcm90b2NvbChkZXYsIHR5cGUpOworCQlpZiAocmMgPCAwKSB7CisJCQlJUl9kcHJpbnRrKDEsICJFcnJvciBzZXR0aW5nIHByb3RvY29scyB0byAweCVsbHhcbiIsCisJCQkJICAgKGxvbmcgbG9uZyl0eXBlKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCisJaWYgKGRldi0+ZHJpdmVyX3R5cGUgPT0gUkNfRFJJVkVSX1NDQU5DT0RFKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnJjX21hcC5sb2NrLCBmbGFncyk7CisJCWRldi0+cmNfbWFwLnJjX3R5cGUgPSB0eXBlOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnJjX21hcC5sb2NrLCBmbGFncyk7CisJfSBlbHNlIHsKKwkJZGV2LT5yYXctPmVuYWJsZWRfcHJvdG9jb2xzID0gdHlwZTsKKwl9CisKKwlJUl9kcHJpbnRrKDEsICJDdXJyZW50IHByb3RvY29sKHMpOiAweCVsbHhcbiIsCisJCSAgIChsb25nIGxvbmcpdHlwZSk7CisKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgdm9pZCByY19kZXZfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCit7CisJc3RydWN0IHJjX2RldiAqZGV2ID0gdG9fcmNfZGV2KGRldmljZSk7CisKKwlrZnJlZShkZXYpOworCW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOworfQorCisjZGVmaW5lIEFERF9IT1RQTFVHX1ZBUihmbXQsIHZhbC4uLikJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCWludCBlcnIgPSBhZGRfdWV2ZW50X3ZhcihlbnYsIGZtdCwgdmFsKTsJCVwKKwkJaWYgKGVycikJCQkJCQlcCisJCQlyZXR1cm4gZXJyOwkJCQkJXAorCX0gd2hpbGUgKDApCisKK3N0YXRpYyBpbnQgcmNfZGV2X3VldmVudChzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBrb2JqX3VldmVudF9lbnYgKmVudikKK3sKKwlzdHJ1Y3QgcmNfZGV2ICpkZXYgPSB0b19yY19kZXYoZGV2aWNlKTsKKworCWlmIChkZXYtPnJjX21hcC5uYW1lKQorCQlBRERfSE9UUExVR19WQVIoIk5BTUU9JXMiLCBkZXYtPnJjX21hcC5uYW1lKTsKKwlpZiAoZGV2LT5kcml2ZXJfbmFtZSkKKwkJQUREX0hPVFBMVUdfVkFSKCJEUlZfTkFNRT0lcyIsIGRldi0+ZHJpdmVyX25hbWUpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTdGF0aWMgZGV2aWNlIGF0dHJpYnV0ZSBzdHJ1Y3Qgd2l0aCB0aGUgc3lzZnMgYXR0cmlidXRlcyBmb3IgSVIncworICovCitzdGF0aWMgREVWSUNFX0FUVFIocHJvdG9jb2xzLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJICAgc2hvd19wcm90b2NvbHMsIHN0b3JlX3Byb3RvY29scyk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpyY19kZXZfYXR0cnNbXSA9IHsKKwkmZGV2X2F0dHJfcHJvdG9jb2xzLmF0dHIsCisJTlVMTCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHJjX2Rldl9hdHRyX2dycCA9IHsKKwkuYXR0cnMJPSByY19kZXZfYXR0cnMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqcmNfZGV2X2F0dHJfZ3JvdXBzW10gPSB7CisJJnJjX2Rldl9hdHRyX2dycCwKKwlOVUxMCit9OworCitzdGF0aWMgc3RydWN0IGRldmljZV90eXBlIHJjX2Rldl90eXBlID0geworCS5ncm91cHMJCT0gcmNfZGV2X2F0dHJfZ3JvdXBzLAorCS5yZWxlYXNlCT0gcmNfZGV2X3JlbGVhc2UsCisJLnVldmVudAkJPSByY19kZXZfdWV2ZW50LAorfTsKKworc3RydWN0IHJjX2RldiAqcmNfYWxsb2NhdGVfZGV2aWNlKHZvaWQpCit7CisJc3RydWN0IHJjX2RldiAqZGV2OworCisJZGV2ID0ga3phbGxvYyhzaXplb2YoKmRldiksIEdGUF9LRVJORUwpOworCWlmICghZGV2KQorCQlyZXR1cm4gTlVMTDsKKworCWRldi0+aW5wdXRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CisJaWYgKCFkZXYtPmlucHV0X2RldikgeworCQlrZnJlZShkZXYpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlkZXYtPmlucHV0X2Rldi0+Z2V0a2V5Y29kZV9uZXcgPSBpcl9nZXRrZXljb2RlOworCWRldi0+aW5wdXRfZGV2LT5zZXRrZXljb2RlX25ldyA9IGlyX3NldGtleWNvZGU7CisJaW5wdXRfc2V0X2RydmRhdGEoZGV2LT5pbnB1dF9kZXYsIGRldik7CisKKwlzcGluX2xvY2tfaW5pdCgmZGV2LT5yY19tYXAubG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmRldi0+a2V5bG9jayk7CisJc2V0dXBfdGltZXIoJmRldi0+dGltZXJfa2V5dXAsIGlyX3RpbWVyX2tleXVwLCAodW5zaWduZWQgbG9uZylkZXYpOworCisJZGV2LT5kZXYudHlwZSA9ICZyY19kZXZfdHlwZTsKKwlkZXYtPmRldi5jbGFzcyA9ICZpcl9pbnB1dF9jbGFzczsKKwlkZXZpY2VfaW5pdGlhbGl6ZSgmZGV2LT5kZXYpOworCisJX19tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKTsKKwlyZXR1cm4gZGV2OworfQorRVhQT1JUX1NZTUJPTF9HUEwocmNfYWxsb2NhdGVfZGV2aWNlKTsKKwordm9pZCByY19mcmVlX2RldmljZShzdHJ1Y3QgcmNfZGV2ICpkZXYpCit7CisJaWYgKGRldikgeworCQlpbnB1dF9mcmVlX2RldmljZShkZXYtPmlucHV0X2Rldik7CisJCXB1dF9kZXZpY2UoJmRldi0+ZGV2KTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MX0dQTChyY19mcmVlX2RldmljZSk7CisKK2ludCByY19yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IHJjX2RldiAqZGV2KQoreworCXN0YXRpYyBhdG9taWNfdCBkZXZubyA9IEFUT01JQ19JTklUKDApOworCXN0cnVjdCByY19tYXAgKnJjX21hcDsKKwljb25zdCBjaGFyICpwYXRoOworCWludCByYzsKKworCWlmICghZGV2IHx8ICFkZXYtPm1hcF9uYW1lKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJjX21hcCA9IHJjX21hcF9nZXQoZGV2LT5tYXBfbmFtZSk7CisJaWYgKCFyY19tYXApCisJCXJjX21hcCA9IHJjX21hcF9nZXQoUkNfTUFQX0VNUFRZKTsKKwlpZiAoIXJjX21hcCB8fCAhcmNfbWFwLT5zY2FuIHx8IHJjX21hcC0+c2l6ZSA9PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNldF9iaXQoRVZfS0VZLCBkZXYtPmlucHV0X2Rldi0+ZXZiaXQpOworCXNldF9iaXQoRVZfUkVQLCBkZXYtPmlucHV0X2Rldi0+ZXZiaXQpOworCXNldF9iaXQoRVZfTVNDLCBkZXYtPmlucHV0X2Rldi0+ZXZiaXQpOworCXNldF9iaXQoTVNDX1NDQU4sIGRldi0+aW5wdXRfZGV2LT5tc2NiaXQpOworCWlmIChkZXYtPm9wZW4pCisJCWRldi0+aW5wdXRfZGV2LT5vcGVuID0gaXJfb3BlbjsKKwlpZiAoZGV2LT5jbG9zZSkKKwkJZGV2LT5pbnB1dF9kZXYtPmNsb3NlID0gaXJfY2xvc2U7CisKKwlkZXYtPmRldm5vID0gKHVuc2lnbmVkIGxvbmcpKGF0b21pY19pbmNfcmV0dXJuKCZkZXZubykgLSAxKTsKKwlkZXZfc2V0X25hbWUoJmRldi0+ZGV2LCAicmMlbGQiLCBkZXYtPmRldm5vKTsKKwlkZXZfc2V0X2RydmRhdGEoJmRldi0+ZGV2LCBkZXYpOworCXJjID0gZGV2aWNlX2FkZCgmZGV2LT5kZXYpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJcmMgPSBpcl9zZXRrZXl0YWJsZShkZXYsIHJjX21hcCk7CisJaWYgKHJjKQorCQlnb3RvIG91dF9kZXY7CisKKwlkZXYtPmlucHV0X2Rldi0+ZGV2LnBhcmVudCA9ICZkZXYtPmRldjsKKwltZW1jcHkoJmRldi0+aW5wdXRfZGV2LT5pZCwgJmRldi0+aW5wdXRfaWQsIHNpemVvZihkZXYtPmlucHV0X2lkKSk7CisJZGV2LT5pbnB1dF9kZXYtPnBoeXMgPSBkZXYtPmlucHV0X3BoeXM7CisJZGV2LT5pbnB1dF9kZXYtPm5hbWUgPSBkZXYtPmlucHV0X25hbWU7CisJcmMgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoZGV2LT5pbnB1dF9kZXYpOworCWlmIChyYykKKwkJZ290byBvdXRfdGFibGU7CisKKwkvKgorCSAqIERlZmF1bHQgZGVsYXkgb2YgMjUwbXMgaXMgdG9vIHNob3J0IGZvciBzb21lIHByb3RvY29scywgZXhwZWNpYWxseQorCSAqIHNpbmNlIHRoZSB0aW1lb3V0IGlzIGN1cnJlbnRseSBzZXQgdG8gMjUwbXMuIEluY3JlYXNlIGl0IHRvIDUwMG1zLAorCSAqIHRvIGF2b2lkIHdyb25nIHJlcGV0aXRpb24gb2YgdGhlIGtleWNvZGVzLiBOb3RlIHRoYXQgdGhpcyBtdXN0IGJlCisJICogc2V0IGFmdGVyIHRoZSBjYWxsIHRvIGlucHV0X3JlZ2lzdGVyX2RldmljZSgpLgorCSAqLworCWRldi0+aW5wdXRfZGV2LT5yZXBbUkVQX0RFTEFZXSA9IDUwMDsKKworCXBhdGggPSBrb2JqZWN0X2dldF9wYXRoKCZkZXYtPmRldi5rb2JqLCBHRlBfS0VSTkVMKTsKKwlwcmludGsoS0VSTl9JTkZPICIlczogJXMgYXMgJXNcbiIsCisJCWRldl9uYW1lKCZkZXYtPmRldiksCisJCWRldi0+aW5wdXRfbmFtZSA/IGRldi0+aW5wdXRfbmFtZSA6ICJVbnNwZWNpZmllZCBkZXZpY2UiLAorCQlwYXRoID8gcGF0aCA6ICJOL0EiKTsKKwlrZnJlZShwYXRoKTsKKworCWlmIChkZXYtPmRyaXZlcl90eXBlID09IFJDX0RSSVZFUl9JUl9SQVcpIHsKKwkJcmMgPSBpcl9yYXdfZXZlbnRfcmVnaXN0ZXIoZGV2KTsKKwkJaWYgKHJjIDwgMCkKKwkJCWdvdG8gb3V0X2lucHV0OworCX0KKworCWlmIChkZXYtPmNoYW5nZV9wcm90b2NvbCkgeworCQlyYyA9IGRldi0+Y2hhbmdlX3Byb3RvY29sKGRldiwgcmNfbWFwLT5yY190eXBlKTsKKwkJaWYgKHJjIDwgMCkKKwkJCWdvdG8gb3V0X3JhdzsKKwl9CisKKwlJUl9kcHJpbnRrKDEsICJSZWdpc3RlcmVkIHJjJWxkIChkcml2ZXI6ICVzLCByZW1vdGU6ICVzLCBtb2RlICVzKVxuIiwKKwkJICAgZGV2LT5kZXZubywKKwkJICAgZGV2LT5kcml2ZXJfbmFtZSA/IGRldi0+ZHJpdmVyX25hbWUgOiAidW5rbm93biIsCisJCSAgIHJjX21hcC0+bmFtZSA/IHJjX21hcC0+bmFtZSA6ICJ1bmtub3duIiwKKwkJICAgZGV2LT5kcml2ZXJfdHlwZSA9PSBSQ19EUklWRVJfSVJfUkFXID8gInJhdyIgOiAiY29va2VkIik7CisKKwlyZXR1cm4gMDsKKworb3V0X3JhdzoKKwlpZiAoZGV2LT5kcml2ZXJfdHlwZSA9PSBSQ19EUklWRVJfSVJfUkFXKQorCQlpcl9yYXdfZXZlbnRfdW5yZWdpc3RlcihkZXYpOworb3V0X2lucHV0OgorCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGRldi0+aW5wdXRfZGV2KTsKKwlkZXYtPmlucHV0X2RldiA9IE5VTEw7CitvdXRfdGFibGU6CisJaXJfZnJlZV90YWJsZSgmZGV2LT5yY19tYXApOworb3V0X2RldjoKKwlkZXZpY2VfZGVsKCZkZXYtPmRldik7CisJcmV0dXJuIHJjOworfQorRVhQT1JUX1NZTUJPTF9HUEwocmNfcmVnaXN0ZXJfZGV2aWNlKTsKKwordm9pZCByY191bnJlZ2lzdGVyX2RldmljZShzdHJ1Y3QgcmNfZGV2ICpkZXYpCit7CisJaWYgKCFkZXYpCisJCXJldHVybjsKKworCWRlbF90aW1lcl9zeW5jKCZkZXYtPnRpbWVyX2tleXVwKTsKKworCWlmIChkZXYtPmRyaXZlcl90eXBlID09IFJDX0RSSVZFUl9JUl9SQVcpCisJCWlyX3Jhd19ldmVudF91bnJlZ2lzdGVyKGRldik7CisKKwlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShkZXYtPmlucHV0X2Rldik7CisJZGV2LT5pbnB1dF9kZXYgPSBOVUxMOworCisJaXJfZnJlZV90YWJsZSgmZGV2LT5yY19tYXApOworCUlSX2RwcmludGsoMSwgIkZyZWVkIGtleWNvZGUgdGFibGVcbiIpOworCisJZGV2aWNlX3VucmVnaXN0ZXIoJmRldi0+ZGV2KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJjX3VucmVnaXN0ZXJfZGV2aWNlKTsKKworLyoKKyAqIEluaXQvZXhpdCBjb2RlIGZvciB0aGUgbW9kdWxlLiBCYXNpY2FsbHksIGNyZWF0ZXMvcmVtb3ZlcyAvc3lzL2NsYXNzL3JjCisgKi8KKworc3RhdGljIGludCBfX2luaXQgcmNfY29yZV9pbml0KHZvaWQpCit7CisJaW50IHJjID0gY2xhc3NfcmVnaXN0ZXIoJmlyX2lucHV0X2NsYXNzKTsKKwlpZiAocmMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJyY19jb3JlOiB1bmFibGUgdG8gcmVnaXN0ZXIgcmMgY2xhc3NcbiIpOworCQlyZXR1cm4gcmM7CisJfQorCisJLyogSW5pdGlhbGl6ZS9sb2FkIHRoZSBkZWNvZGVycy9rZXltYXAgY29kZSB0aGF0IHdpbGwgYmUgdXNlZCAqLworCWlyX3Jhd19pbml0KCk7CisJcmNfbWFwX3JlZ2lzdGVyKCZlbXB0eV9tYXApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCByY19jb3JlX2V4aXQodm9pZCkKK3sKKwljbGFzc191bnJlZ2lzdGVyKCZpcl9pbnB1dF9jbGFzcyk7CisJcmNfbWFwX3VucmVnaXN0ZXIoJmVtcHR5X21hcCk7Cit9CisKK21vZHVsZV9pbml0KHJjX2NvcmVfaW5pdCk7Cittb2R1bGVfZXhpdChyY19jb3JlX2V4aXQpOworCitpbnQgcmNfY29yZV9kZWJ1ZzsgICAgLyogaXJfZGVidWcgbGV2ZWwgKDAsMSwyKSAqLworRVhQT1JUX1NZTUJPTF9HUEwocmNfY29yZV9kZWJ1Zyk7Cittb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsIHJjX2NvcmVfZGVidWcsIGludCwgMDY0NCk7CisKK01PRFVMRV9BVVRIT1IoIk1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9zdHJlYW16YXAuYyBiL2RyaXZlcnMvbWVkaWEvcmMvc3RyZWFtemFwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmUyOTExYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvcmMvc3RyZWFtemFwLmMKQEAgLTAsMCArMSw1NTcgQEAKKy8qCisgKiBTdHJlYW16YXAgUmVtb3RlIENvbnRyb2wgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA1IENocmlzdG9waCBCYXJ0ZWxtdXMgPGxpcmNAYmFydGVsbXVzLmRlPgorICogQ29weXJpZ2h0IChjKSAyMDEwIEphcm9kIFdpbHNvbiA8amFyb2RAd2lsc29uZXQuY29tPgorICoKKyAqIFRoaXMgZHJpdmVyIHdhcyBiYXNlZCBvbiB0aGUgd29yayBvZiBHcmVnIFdpY2toYW0gYW5kIEFkcmlhbgorICogRGV3aHVyc3QuIEl0IHdhcyBzdWJzdGFudGlhbGx5IHJld3JpdHRlbiB0byBzdXBwb3J0IGNvcnJlY3Qgc2lnbmFsCisgKiBnYXBzIGFuZCBub3cgbWFpbnRhaW5zIGEgZGVsYXkgYnVmZmVyLCB3aGljaCBpcyB1c2VkIHRvIHByZXNlbnQKKyAqIGNvbnNpc3RlbnQgdGltaW5nIGJlaGF2aW91ciB0byB1c2VyIHNwYWNlIGFwcGxpY2F0aW9ucy4gV2l0aG91dCB0aGUKKyAqIGRlbGF5IGJ1ZmZlciBhbiB1Z2x5IGhhY2sgd291bGQgYmUgcmVxdWlyZWQgaW4gbGlyY2QsIHdoaWNoIGNhbgorICogY2F1c2Ugc2x1Z2dpc2ggc2lnbmFsIGRlY29kaW5nIGluIGNlcnRhaW4gc2l0dWF0aW9ucy4KKyAqCisgKiBQb3J0ZWQgdG8gaW4ta2VybmVsIGlyLWNvcmUgaW50ZXJmYWNlIGJ5IEphcm9kIFdpbHNvbgorICoKKyAqIFRoaXMgZHJpdmVyIGlzIGJhc2VkIG9uIHRoZSBVU0Igc2tlbGV0b24gZHJpdmVyIHBhY2thZ2VkIHdpdGggdGhlCisgKiBrZXJuZWw7IGNvcHlyaWdodCAoQykgMjAwMS0yMDAzIEdyZWcgS3JvYWgtSGFydG1hbiAoZ3JlZ0Brcm9haC5jb20pCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvaW5wdXQuaD4KKyNpbmNsdWRlIDxtZWRpYS9yYy1jb3JlLmg+CisKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04JIjEuNjEiCisjZGVmaW5lIERSSVZFUl9OQU1FCSJzdHJlYW16YXAiCisjZGVmaW5lIERSSVZFUl9ERVNDCSJTdHJlYW16YXAgUmVtb3RlIENvbnRyb2wgZHJpdmVyIgorCisjaWZkZWYgQ09ORklHX1VTQl9ERUJVRworc3RhdGljIGludCBkZWJ1ZyA9IDE7CisjZWxzZQorc3RhdGljIGludCBkZWJ1ZzsKKyNlbmRpZgorCisjZGVmaW5lIFVTQl9TVFJFQU1aQVBfVkVORE9SX0lECQkweDBlOWMKKyNkZWZpbmUgVVNCX1NUUkVBTVpBUF9QUk9EVUNUX0lECTB4MDAwMAorCisvKiB0YWJsZSBvZiBkZXZpY2VzIHRoYXQgd29yayB3aXRoIHRoaXMgZHJpdmVyICovCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgc3RyZWFtemFwX3RhYmxlW10gPSB7CisJLyogU3RyZWFtemFwIFJlbW90ZSBDb250cm9sICovCisJeyBVU0JfREVWSUNFKFVTQl9TVFJFQU1aQVBfVkVORE9SX0lELCBVU0JfU1RSRUFNWkFQX1BST0RVQ1RfSUQpIH0sCisJLyogVGVybWluYXRpbmcgZW50cnkgKi8KKwl7IH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBzdHJlYW16YXBfdGFibGUpOworCisjZGVmaW5lIFNaX1BVTFNFX01BU0sgMHhmMAorI2RlZmluZSBTWl9TUEFDRV9NQVNLIDB4MGYKKyNkZWZpbmUgU1pfVElNRU9VVCAgICAweGZmCisjZGVmaW5lIFNaX1JFU09MVVRJT04gMjU2CisKKy8qIG51bWJlciBvZiBzYW1wbGVzIGJ1ZmZlcmVkICovCisjZGVmaW5lIFNaX0JVRl9MRU4gMTI4CisKKy8qIGZyb20gaXItcmM1LXN6LWRlY29kZXIuYyAqLworI2lmZGVmIENPTkZJR19JUl9SQzVfU1pfREVDT0RFUl9NT0RVTEUKKyNkZWZpbmUgbG9hZF9yYzVfc3pfZGVjb2RlKCkgICAgcmVxdWVzdF9tb2R1bGUoImlyLXJjNS1zei1kZWNvZGVyIikKKyNlbHNlCisjZGVmaW5lIGxvYWRfcmM1X3N6X2RlY29kZSgpICAgIHt9CisjZW5kaWYKKworZW51bSBTdHJlYW16YXBEZWNvZGVyU3RhdGUgeworCVB1bHNlU3BhY2UsCisJRnVsbFB1bHNlLAorCUZ1bGxTcGFjZSwKKwlJZ25vcmVQdWxzZQorfTsKKworLyogc3RydWN0dXJlIHRvIGhvbGQgb3VyIGRldmljZSBzcGVjaWZpYyBzdHVmZiAqLworc3RydWN0IHN0cmVhbXphcF9pciB7CisJLyogaXItY29yZSAqLworCXN0cnVjdCByY19kZXYgKnJkZXY7CisKKwkvKiBjb3JlIGRldmljZSBpbmZvICovCisJc3RydWN0IGRldmljZSAqZGV2OworCisJLyogdXNiICovCisJc3RydWN0IHVzYl9kZXZpY2UJKnVzYmRldjsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZQkqaW50ZXJmYWNlOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcG9pbnQ7CisJc3RydWN0IHVyYgkJKnVyYl9pbjsKKworCS8qIGJ1ZmZlciAmIGRtYSAqLworCXVuc2lnbmVkIGNoYXIJCSpidWZfaW47CisJZG1hX2FkZHJfdAkJZG1hX2luOworCXVuc2lnbmVkIGludAkJYnVmX2luX2xlbjsKKworCS8qIHRyYWNrIHdoYXQgc3RhdGUgd2UncmUgaW4gKi8KKwllbnVtIFN0cmVhbXphcERlY29kZXJTdGF0ZSBkZWNvZGVyX3N0YXRlOworCS8qIHRyYWNrcyB3aGV0aGVyIHdlIGFyZSBjdXJyZW50bHkgcmVjZWl2aW5nIHNvbWUgc2lnbmFsICovCisJYm9vbAkJCWlkbGU7CisJLyogc3VtIG9mIHNpZ25hbCBsZW5ndGhzIHJlY2VpdmVkIHNpbmNlIHNpZ25hbCBzdGFydCAqLworCXVuc2lnbmVkIGxvbmcJCXN1bTsKKwkvKiBzdGFydCB0aW1lIG9mIHNpZ25hbDsgbmVjZXNzYXJ5IGZvciBnYXAgdHJhY2tpbmcgKi8KKwlzdHJ1Y3QgdGltZXZhbAkJc2lnbmFsX2xhc3Q7CisJc3RydWN0IHRpbWV2YWwJCXNpZ25hbF9zdGFydDsKKwlib29sCQkJdGltZW91dF9lbmFibGVkOworCisJY2hhcgkJCW5hbWVbMTI4XTsKKwljaGFyCQkJcGh5c1s2NF07Cit9OworCisKKy8qIGxvY2FsIGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KK3N0YXRpYyBpbnQgc3RyZWFtemFwX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCisJCQkgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpOworc3RhdGljIHZvaWQgc3RyZWFtemFwX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSk7CitzdGF0aWMgdm9pZCBzdHJlYW16YXBfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKTsKK3N0YXRpYyBpbnQgc3RyZWFtemFwX3N1c3BlbmQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKTsKK3N0YXRpYyBpbnQgc3RyZWFtemFwX3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zik7CisKKy8qIHVzYiBzcGVjaWZpYyBvYmplY3QgbmVlZGVkIHRvIHJlZ2lzdGVyIHRoaXMgZHJpdmVyIHdpdGggdGhlIHVzYiBzdWJzeXN0ZW0gKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBzdHJlYW16YXBfZHJpdmVyID0geworCS5uYW1lID0JCURSSVZFUl9OQU1FLAorCS5wcm9iZSA9CXN0cmVhbXphcF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CXN0cmVhbXphcF9kaXNjb25uZWN0LAorCS5zdXNwZW5kID0Jc3RyZWFtemFwX3N1c3BlbmQsCisJLnJlc3VtZSA9CXN0cmVhbXphcF9yZXN1bWUsCisJLmlkX3RhYmxlID0Jc3RyZWFtemFwX3RhYmxlLAorfTsKKworc3RhdGljIHZvaWQgc3pfcHVzaChzdHJ1Y3Qgc3RyZWFtemFwX2lyICpzeiwgc3RydWN0IGlyX3Jhd19ldmVudCByYXdpcikKK3sKKwlkZXZfZGJnKHN6LT5kZXYsICJTdG9yaW5nICVzIHdpdGggZHVyYXRpb24gJXUgdXNcbiIsCisJCShyYXdpci5wdWxzZSA/ICJwdWxzZSIgOiAic3BhY2UiKSwgcmF3aXIuZHVyYXRpb24pOworCWlyX3Jhd19ldmVudF9zdG9yZV93aXRoX2ZpbHRlcihzei0+cmRldiwgJnJhd2lyKTsKK30KKworc3RhdGljIHZvaWQgc3pfcHVzaF9mdWxsX3B1bHNlKHN0cnVjdCBzdHJlYW16YXBfaXIgKnN6LAorCQkJICAgICAgIHVuc2lnbmVkIGNoYXIgdmFsdWUpCit7CisJREVGSU5FX0lSX1JBV19FVkVOVChyYXdpcik7CisKKwlpZiAoc3otPmlkbGUpIHsKKwkJbG9uZyBkZWx0djsKKworCQlzei0+c2lnbmFsX2xhc3QgPSBzei0+c2lnbmFsX3N0YXJ0OworCQlkb19nZXR0aW1lb2ZkYXkoJnN6LT5zaWduYWxfc3RhcnQpOworCisJCWRlbHR2ID0gc3otPnNpZ25hbF9zdGFydC50dl9zZWMgLSBzei0+c2lnbmFsX2xhc3QudHZfc2VjOworCQlyYXdpci5wdWxzZSA9IGZhbHNlOworCQlpZiAoZGVsdHYgPiAxNSkgeworCQkJLyogcmVhbGx5IGxvbmcgdGltZSAqLworCQkJcmF3aXIuZHVyYXRpb24gPSBJUl9NQVhfRFVSQVRJT047CisJCX0gZWxzZSB7CisJCQlyYXdpci5kdXJhdGlvbiA9IChpbnQpKGRlbHR2ICogMTAwMDAwMCArCisJCQkJc3otPnNpZ25hbF9zdGFydC50dl91c2VjIC0KKwkJCQlzei0+c2lnbmFsX2xhc3QudHZfdXNlYyk7CisJCQlyYXdpci5kdXJhdGlvbiAtPSBzei0+c3VtOworCQkJcmF3aXIuZHVyYXRpb24gKj0gMTAwMDsKKwkJCXJhd2lyLmR1cmF0aW9uICY9IElSX01BWF9EVVJBVElPTjsKKwkJfQorCQlzel9wdXNoKHN6LCByYXdpcik7CisKKwkJc3otPmlkbGUgPSBmYWxzZTsKKwkJc3otPnN1bSA9IDA7CisJfQorCisJcmF3aXIucHVsc2UgPSB0cnVlOworCXJhd2lyLmR1cmF0aW9uID0gKChpbnQpIHZhbHVlKSAqIFNaX1JFU09MVVRJT047CisJcmF3aXIuZHVyYXRpb24gKz0gU1pfUkVTT0xVVElPTiAvIDI7CisJc3otPnN1bSArPSByYXdpci5kdXJhdGlvbjsKKwlyYXdpci5kdXJhdGlvbiAqPSAxMDAwOworCXJhd2lyLmR1cmF0aW9uICY9IElSX01BWF9EVVJBVElPTjsKKwlzel9wdXNoKHN6LCByYXdpcik7Cit9CisKK3N0YXRpYyB2b2lkIHN6X3B1c2hfaGFsZl9wdWxzZShzdHJ1Y3Qgc3RyZWFtemFwX2lyICpzeiwKKwkJCSAgICAgICB1bnNpZ25lZCBjaGFyIHZhbHVlKQoreworCXN6X3B1c2hfZnVsbF9wdWxzZShzeiwgKHZhbHVlICYgU1pfUFVMU0VfTUFTSykgPj4gNCk7Cit9CisKK3N0YXRpYyB2b2lkIHN6X3B1c2hfZnVsbF9zcGFjZShzdHJ1Y3Qgc3RyZWFtemFwX2lyICpzeiwKKwkJCSAgICAgICB1bnNpZ25lZCBjaGFyIHZhbHVlKQoreworCURFRklORV9JUl9SQVdfRVZFTlQocmF3aXIpOworCisJcmF3aXIucHVsc2UgPSBmYWxzZTsKKwlyYXdpci5kdXJhdGlvbiA9ICgoaW50KSB2YWx1ZSkgKiBTWl9SRVNPTFVUSU9OOworCXJhd2lyLmR1cmF0aW9uICs9IFNaX1JFU09MVVRJT04gLyAyOworCXN6LT5zdW0gKz0gcmF3aXIuZHVyYXRpb247CisJcmF3aXIuZHVyYXRpb24gKj0gMTAwMDsKKwlzel9wdXNoKHN6LCByYXdpcik7Cit9CisKK3N0YXRpYyB2b2lkIHN6X3B1c2hfaGFsZl9zcGFjZShzdHJ1Y3Qgc3RyZWFtemFwX2lyICpzeiwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIHZhbHVlKQoreworCXN6X3B1c2hfZnVsbF9zcGFjZShzeiwgdmFsdWUgJiBTWl9TUEFDRV9NQVNLKTsKK30KKworLyoqCisgKiBzdHJlYW16YXBfY2FsbGJhY2sgLSB1c2IgSVJRIGhhbmRsZXIgY2FsbGJhY2sKKyAqCisgKiBUaGlzIHByb2NlZHVyZSBpcyBpbnZva2VkIG9uIHJlY2VwdGlvbiBvZiBkYXRhIGZyb20KKyAqIHRoZSB1c2IgcmVtb3RlLgorICovCitzdGF0aWMgdm9pZCBzdHJlYW16YXBfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCBzdHJlYW16YXBfaXIgKnN6OworCXVuc2lnbmVkIGludCBpOworCWludCBsZW47CisKKwlpZiAoIXVyYikKKwkJcmV0dXJuOworCisJc3ogPSB1cmItPmNvbnRleHQ7CisJbGVuID0gdXJiLT5hY3R1YWxfbGVuZ3RoOworCisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCWNhc2UgLUVDT05OUkVTRVQ6CisJY2FzZSAtRU5PRU5UOgorCWNhc2UgLUVTSFVURE9XTjoKKwkJLyoKKwkJICogdGhpcyB1cmIgaXMgdGVybWluYXRlZCwgY2xlYW4gdXAuCisJCSAqIHN6IG1pZ2h0IGFscmVhZHkgYmUgaW52YWxpZCBhdCB0aGlzIHBvaW50CisJCSAqLworCQlkZXZfZXJyKHN6LT5kZXYsICJ1cmIgdGVybWluYXRlZCwgc3RhdHVzOiAlZFxuIiwgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJZGV2X2RiZyhzei0+ZGV2LCAiJXM6IHJlY2VpdmVkIHVyYiwgbGVuICVkXG4iLCBfX2Z1bmNfXywgbGVuKTsKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJZGV2X2RiZyhzei0+ZGV2LCAic3otPmJ1Zl9pblslZF06ICV4XG4iLAorCQkJaSwgKHVuc2lnbmVkIGNoYXIpc3otPmJ1Zl9pbltpXSk7CisJCXN3aXRjaCAoc3otPmRlY29kZXJfc3RhdGUpIHsKKwkJY2FzZSBQdWxzZVNwYWNlOgorCQkJaWYgKChzei0+YnVmX2luW2ldICYgU1pfUFVMU0VfTUFTSykgPT0KKwkJCQlTWl9QVUxTRV9NQVNLKSB7CisJCQkJc3otPmRlY29kZXJfc3RhdGUgPSBGdWxsUHVsc2U7CisJCQkJY29udGludWU7CisJCQl9IGVsc2UgaWYgKChzei0+YnVmX2luW2ldICYgU1pfU1BBQ0VfTUFTSykKKwkJCQkJPT0gU1pfU1BBQ0VfTUFTSykgeworCQkJCXN6X3B1c2hfaGFsZl9wdWxzZShzeiwgc3otPmJ1Zl9pbltpXSk7CisJCQkJc3otPmRlY29kZXJfc3RhdGUgPSBGdWxsU3BhY2U7CisJCQkJY29udGludWU7CisJCQl9IGVsc2UgeworCQkJCXN6X3B1c2hfaGFsZl9wdWxzZShzeiwgc3otPmJ1Zl9pbltpXSk7CisJCQkJc3pfcHVzaF9oYWxmX3NwYWNlKHN6LCBzei0+YnVmX2luW2ldKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIEZ1bGxQdWxzZToKKwkJCXN6X3B1c2hfZnVsbF9wdWxzZShzeiwgc3otPmJ1Zl9pbltpXSk7CisJCQlzei0+ZGVjb2Rlcl9zdGF0ZSA9IElnbm9yZVB1bHNlOworCQkJYnJlYWs7CisJCWNhc2UgRnVsbFNwYWNlOgorCQkJaWYgKHN6LT5idWZfaW5baV0gPT0gU1pfVElNRU9VVCkgeworCQkJCURFRklORV9JUl9SQVdfRVZFTlQocmF3aXIpOworCisJCQkJcmF3aXIucHVsc2UgPSBmYWxzZTsKKwkJCQlyYXdpci5kdXJhdGlvbiA9IHN6LT5yZGV2LT50aW1lb3V0OworCQkJCXN6LT5pZGxlID0gdHJ1ZTsKKwkJCQlpZiAoc3otPnRpbWVvdXRfZW5hYmxlZCkKKwkJCQkJc3pfcHVzaChzeiwgcmF3aXIpOworCQkJCWlyX3Jhd19ldmVudF9oYW5kbGUoc3otPnJkZXYpOworCQkJfSBlbHNlIHsKKwkJCQlzel9wdXNoX2Z1bGxfc3BhY2Uoc3osIHN6LT5idWZfaW5baV0pOworCQkJfQorCQkJc3otPmRlY29kZXJfc3RhdGUgPSBQdWxzZVNwYWNlOworCQkJYnJlYWs7CisJCWNhc2UgSWdub3JlUHVsc2U6CisJCQlpZiAoKHN6LT5idWZfaW5baV0gJiBTWl9TUEFDRV9NQVNLKSA9PQorCQkJCVNaX1NQQUNFX01BU0spIHsKKwkJCQlzei0+ZGVjb2Rlcl9zdGF0ZSA9IEZ1bGxTcGFjZTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCXN6X3B1c2hfaGFsZl9zcGFjZShzeiwgc3otPmJ1Zl9pbltpXSk7CisJCQlzei0+ZGVjb2Rlcl9zdGF0ZSA9IFB1bHNlU3BhY2U7CisJCQlicmVhazsKKwkJfQorCX0KKworCXVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmNfZGV2ICpzdHJlYW16YXBfaW5pdF9yY19kZXYoc3RydWN0IHN0cmVhbXphcF9pciAqc3opCit7CisJc3RydWN0IHJjX2RldiAqcmRldjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBzei0+ZGV2OworCWludCByZXQ7CisKKwlyZGV2ID0gcmNfYWxsb2NhdGVfZGV2aWNlKCk7CisJaWYgKCFyZGV2KSB7CisJCWRldl9lcnIoZGV2LCAicmVtb3RlIGRldiBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CisJCWdvdG8gb3V0OworCX0KKworCXNucHJpbnRmKHN6LT5uYW1lLCBzaXplb2Yoc3otPm5hbWUpLCAiU3RyZWFtemFwIFBDIFJlbW90ZSBJbmZyYXJlZCAiCisJCSAiUmVjZWl2ZXIgKCUwNHg6JTA0eCkiLAorCQkgbGUxNl90b19jcHUoc3otPnVzYmRldi0+ZGVzY3JpcHRvci5pZFZlbmRvciksCisJCSBsZTE2X3RvX2NwdShzei0+dXNiZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkpOworCXVzYl9tYWtlX3BhdGgoc3otPnVzYmRldiwgc3otPnBoeXMsIHNpemVvZihzei0+cGh5cykpOworCXN0cmxjYXQoc3otPnBoeXMsICIvaW5wdXQwIiwgc2l6ZW9mKHN6LT5waHlzKSk7CisKKwlyZGV2LT5pbnB1dF9uYW1lID0gc3otPm5hbWU7CisJcmRldi0+aW5wdXRfcGh5cyA9IHN6LT5waHlzOworCXVzYl90b19pbnB1dF9pZChzei0+dXNiZGV2LCAmcmRldi0+aW5wdXRfaWQpOworCXJkZXYtPmRldi5wYXJlbnQgPSBkZXY7CisJcmRldi0+cHJpdiA9IHN6OworCXJkZXYtPmRyaXZlcl90eXBlID0gUkNfRFJJVkVSX0lSX1JBVzsKKwlyZGV2LT5hbGxvd2VkX3Byb3RvcyA9IFJDX1RZUEVfQUxMOworCXJkZXYtPmRyaXZlcl9uYW1lID0gRFJJVkVSX05BTUU7CisJcmRldi0+bWFwX25hbWUgPSBSQ19NQVBfU1RSRUFNWkFQOworCisJcmV0ID0gcmNfcmVnaXN0ZXJfZGV2aWNlKHJkZXYpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAicmVtb3RlIGlucHV0IGRldmljZSByZWdpc3RlciBmYWlsZWRcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXR1cm4gcmRldjsKKworb3V0OgorCXJjX2ZyZWVfZGV2aWNlKHJkZXYpOworCXJldHVybiBOVUxMOworfQorCisvKioKKyAqCXN0cmVhbXphcF9wcm9iZQorICoKKyAqCUNhbGxlZCBieSB1c2ItY29yZSB0byBhc3NvY2lhdGVkIHdpdGggYSBjYW5kaWRhdGUgZGV2aWNlCisgKglPbiBhbnkgZmFpbHVyZSB0aGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBFUlJPUgorICoJT24gc3VjY2VzcyByZXR1cm4gMAorICovCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzdHJlYW16YXBfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQkJICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaWZhY2VfaG9zdDsKKwlzdHJ1Y3Qgc3RyZWFtemFwX2lyICpzeiA9IE5VTEw7CisJY2hhciBidWZbNjNdLCBuYW1lWzEyOF0gPSAiIjsKKwlpbnQgcmV0dmFsID0gLUVOT01FTTsKKwlpbnQgcGlwZSwgbWF4cDsKKworCS8qIEFsbG9jYXRlIHNwYWNlIGZvciBkZXZpY2UgZHJpdmVyIHNwZWNpZmljIGRhdGEgKi8KKwlzeiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzdHJlYW16YXBfaXIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXN6KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXN6LT51c2JkZXYgPSB1c2JkZXY7CisJc3otPmludGVyZmFjZSA9IGludGY7CisKKwkvKiBDaGVjayB0byBlbnN1cmUgZW5kcG9pbnQgaW5mb3JtYXRpb24gbWF0Y2hlcyByZXF1aXJlbWVudHMgKi8KKwlpZmFjZV9ob3N0ID0gaW50Zi0+Y3VyX2FsdHNldHRpbmc7CisKKwlpZiAoaWZhY2VfaG9zdC0+ZGVzYy5iTnVtRW5kcG9pbnRzICE9IDEpIHsKKwkJZGV2X2VycigmaW50Zi0+ZGV2LCAiJXM6IFVuZXhwZWN0ZWQgZGVzYy5iTnVtRW5kcG9pbnRzICglZClcbiIsCisJCQlfX2Z1bmNfXywgaWZhY2VfaG9zdC0+ZGVzYy5iTnVtRW5kcG9pbnRzKTsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBmcmVlX3N6OworCX0KKworCXN6LT5lbmRwb2ludCA9ICYoaWZhY2VfaG9zdC0+ZW5kcG9pbnRbMF0uZGVzYyk7CisJaWYgKChzei0+ZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfRElSX01BU0spCisJICAgICE9IFVTQl9ESVJfSU4pIHsKKwkJZGV2X2VycigmaW50Zi0+ZGV2LCAiJXM6IGVuZHBvaW50IGRvZXNuJ3QgbWF0Y2ggaW5wdXQgZGV2aWNlICIKKwkJCSIwMiUwMnhcbiIsIF9fZnVuY19fLCBzei0+ZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MpOworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIGZyZWVfc3o7CisJfQorCisJaWYgKChzei0+ZW5kcG9pbnQtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKQorCSAgICAhPSBVU0JfRU5EUE9JTlRfWEZFUl9JTlQpIHsKKwkJZGV2X2VycigmaW50Zi0+ZGV2LCAiJXM6IGVuZHBvaW50IGF0dHJpYnV0ZXMgZG9uJ3QgbWF0Y2ggeGZlciAiCisJCQkiMDIlMDJ4XG4iLCBfX2Z1bmNfXywgc3otPmVuZHBvaW50LT5ibUF0dHJpYnV0ZXMpOworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIGZyZWVfc3o7CisJfQorCisJcGlwZSA9IHVzYl9yY3ZpbnRwaXBlKHVzYmRldiwgc3otPmVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzKTsKKwltYXhwID0gdXNiX21heHBhY2tldCh1c2JkZXYsIHBpcGUsIHVzYl9waXBlb3V0KHBpcGUpKTsKKworCWlmIChtYXhwID09IDApIHsKKwkJZGV2X2VycigmaW50Zi0+ZGV2LCAiJXM6IGVuZHBvaW50IE1heCBQYWNrZXQgU2l6ZSBpcyAwIT8hXG4iLAorCQkJX19mdW5jX18pOworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIGZyZWVfc3o7CisJfQorCisJLyogQWxsb2NhdGUgdGhlIFVTQiBidWZmZXIgYW5kIElSUSBVUkIgKi8KKwlzei0+YnVmX2luID0gdXNiX2FsbG9jX2NvaGVyZW50KHVzYmRldiwgbWF4cCwgR0ZQX0FUT01JQywgJnN6LT5kbWFfaW4pOworCWlmICghc3otPmJ1Zl9pbikKKwkJZ290byBmcmVlX3N6OworCisJc3otPnVyYl9pbiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzei0+dXJiX2luKQorCQlnb3RvIGZyZWVfYnVmX2luOworCisJc3otPmRldiA9ICZpbnRmLT5kZXY7CisJc3otPmJ1Zl9pbl9sZW4gPSBtYXhwOworCisJaWYgKHVzYmRldi0+ZGVzY3JpcHRvci5pTWFudWZhY3R1cmVyCisJICAgICYmIHVzYl9zdHJpbmcodXNiZGV2LCB1c2JkZXYtPmRlc2NyaXB0b3IuaU1hbnVmYWN0dXJlciwKKwkJCSAgYnVmLCBzaXplb2YoYnVmKSkgPiAwKQorCQlzdHJsY3B5KG5hbWUsIGJ1Ziwgc2l6ZW9mKG5hbWUpKTsKKworCWlmICh1c2JkZXYtPmRlc2NyaXB0b3IuaVByb2R1Y3QKKwkgICAgJiYgdXNiX3N0cmluZyh1c2JkZXYsIHVzYmRldi0+ZGVzY3JpcHRvci5pUHJvZHVjdCwKKwkJCSAgYnVmLCBzaXplb2YoYnVmKSkgPiAwKQorCQlzbnByaW50ZihuYW1lICsgc3RybGVuKG5hbWUpLCBzaXplb2YobmFtZSkgLSBzdHJsZW4obmFtZSksCisJCQkgIiAlcyIsIGJ1Zik7CisKKwlzei0+cmRldiA9IHN0cmVhbXphcF9pbml0X3JjX2Rldihzeik7CisJaWYgKCFzei0+cmRldikKKwkJZ290byByY19kZXZfZmFpbDsKKworCXN6LT5pZGxlID0gdHJ1ZTsKKwlzei0+ZGVjb2Rlcl9zdGF0ZSA9IFB1bHNlU3BhY2U7CisJLyogRklYTUU6IGRvbid0IHlldCBoYXZlIGEgd2F5IHRvIHNldCB0aGlzICovCisJc3otPnRpbWVvdXRfZW5hYmxlZCA9IHRydWU7CisJc3otPnJkZXYtPnRpbWVvdXQgPSAoKChTWl9USU1FT1VUICogU1pfUkVTT0xVVElPTiAqIDEwMDApICYKKwkJCQlJUl9NQVhfRFVSQVRJT04pIHwgMHgwMzAwMDAwMCk7CisJI2lmIDAKKwkvKiBub3QgeWV0IHN1cHBvcnRlZCwgZGVwZW5kcyBvbiBwYXRjaGVzIGZyb20gbWF4aW0gKi8KKwkvKiBzZWUgYWxzbzogTElSQ19HRVRfUkVDX1JFU09MVVRJT04gYW5kIExJUkNfU0VUX1JFQ19USU1FT1VUICovCisJc3otPm1pbl90aW1lb3V0ID0gU1pfVElNRU9VVCAqIFNaX1JFU09MVVRJT04gKiAxMDAwOworCXN6LT5tYXhfdGltZW91dCA9IFNaX1RJTUVPVVQgKiBTWl9SRVNPTFVUSU9OICogMTAwMDsKKwkjZW5kaWYKKworCWRvX2dldHRpbWVvZmRheSgmc3otPnNpZ25hbF9zdGFydCk7CisKKwkvKiBDb21wbGV0ZSBmaW5hbCBpbml0aWFsaXNhdGlvbnMgKi8KKwl1c2JfZmlsbF9pbnRfdXJiKHN6LT51cmJfaW4sIHVzYmRldiwgcGlwZSwgc3otPmJ1Zl9pbiwKKwkJCSBtYXhwLCAodXNiX2NvbXBsZXRlX3Qpc3RyZWFtemFwX2NhbGxiYWNrLAorCQkJIHN6LCBzei0+ZW5kcG9pbnQtPmJJbnRlcnZhbCk7CisJc3otPnVyYl9pbi0+dHJhbnNmZXJfZG1hID0gc3otPmRtYV9pbjsKKwlzei0+dXJiX2luLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKKworCXVzYl9zZXRfaW50ZmRhdGEoaW50Ziwgc3opOworCisJaWYgKHVzYl9zdWJtaXRfdXJiKHN6LT51cmJfaW4sIEdGUF9BVE9NSUMpKQorCQlkZXZfZXJyKHN6LT5kZXYsICJ1cmIgc3VibWl0IGZhaWxlZFxuIik7CisKKwlkZXZfaW5mbyhzei0+ZGV2LCAiUmVnaXN0ZXJlZCAlcyBvbiB1c2IlZDolZFxuIiwgbmFtZSwKKwkJIHVzYmRldi0+YnVzLT5idXNudW0sIHVzYmRldi0+ZGV2bnVtKTsKKworCS8qIExvYWQgdGhlIHN0cmVhbXphcCBub3QtcXVpdGUtcmM1IGRlY29kZXIgdG9vICovCisJbG9hZF9yYzVfc3pfZGVjb2RlKCk7CisKKwlyZXR1cm4gMDsKKworcmNfZGV2X2ZhaWw6CisJdXNiX2ZyZWVfdXJiKHN6LT51cmJfaW4pOworZnJlZV9idWZfaW46CisJdXNiX2ZyZWVfY29oZXJlbnQodXNiZGV2LCBtYXhwLCBzei0+YnVmX2luLCBzei0+ZG1hX2luKTsKK2ZyZWVfc3o6CisJa2ZyZWUoc3opOworCisJcmV0dXJuIHJldHZhbDsKK30KKworLyoqCisgKiBzdHJlYW16YXBfZGlzY29ubmVjdAorICoKKyAqIENhbGxlZCBieSB0aGUgdXNiIGNvcmUgd2hlbiB0aGUgZGV2aWNlIGlzIHJlbW92ZWQgZnJvbSB0aGUgc3lzdGVtLgorICoKKyAqIFRoaXMgcm91dGluZSBndWFyYW50ZWVzIHRoYXQgdGhlIGRyaXZlciB3aWxsIG5vdCBzdWJtaXQgYW55IG1vcmUgdXJicworICogYnkgY2xlYXJpbmcgZGV2LT51c2JkZXYuICBJdCBpcyBhbHNvIHN1cHBvc2VkIHRvIHRlcm1pbmF0ZSBhbnkgY3VycmVudGx5CisgKiBhY3RpdmUgdXJicy4gIFVuZm9ydHVuYXRlbHksIHVzYl9idWxrX21zZygpLCB1c2VkIGluIHN0cmVhbXphcF9yZWFkKCksCisgKiBkb2VzIG5vdCBwcm92aWRlIGFueSB3YXkgdG8gZG8gdGhpcy4KKyAqLworc3RhdGljIHZvaWQgc3RyZWFtemFwX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3sKKwlzdHJ1Y3Qgc3RyZWFtemFwX2lyICpzeiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpOworCisJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOworCisJaWYgKCFzeikKKwkJcmV0dXJuOworCisJc3otPnVzYmRldiA9IE5VTEw7CisJcmNfdW5yZWdpc3Rlcl9kZXZpY2Uoc3otPnJkZXYpOworCXVzYl9raWxsX3VyYihzei0+dXJiX2luKTsKKwl1c2JfZnJlZV91cmIoc3otPnVyYl9pbik7CisJdXNiX2ZyZWVfY29oZXJlbnQodXNiZGV2LCBzei0+YnVmX2luX2xlbiwgc3otPmJ1Zl9pbiwgc3otPmRtYV9pbik7CisKKwlrZnJlZShzeik7Cit9CisKK3N0YXRpYyBpbnQgc3RyZWFtemFwX3N1c3BlbmQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKQoreworCXN0cnVjdCBzdHJlYW16YXBfaXIgKnN6ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKworCXVzYl9raWxsX3VyYihzei0+dXJiX2luKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0cmVhbXphcF9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IHN0cmVhbXphcF9pciAqc3ogPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCisJaWYgKHVzYl9zdWJtaXRfdXJiKHN6LT51cmJfaW4sIEdGUF9BVE9NSUMpKSB7CisJCWRldl9lcnIoc3otPmRldiwgIkVycm9yIHN1bWJpdGluZyB1cmJcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKglzdHJlYW16YXBfaW5pdAorICovCitzdGF0aWMgaW50IF9faW5pdCBzdHJlYW16YXBfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwkvKiByZWdpc3RlciB0aGlzIGRyaXZlciB3aXRoIHRoZSBVU0Igc3Vic3lzdGVtICovCisJcmV0ID0gdXNiX3JlZ2lzdGVyKCZzdHJlYW16YXBfZHJpdmVyKTsKKwlpZiAocmV0IDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSIERSSVZFUl9OQU1FICI6IHVzYiByZWdpc3RlciBmYWlsZWQsICIKKwkJICAgICAgICJyZXN1bHQgPSAlZFxuIiwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICoJc3RyZWFtemFwX2V4aXQKKyAqLworc3RhdGljIHZvaWQgX19leGl0IHN0cmVhbXphcF9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJnN0cmVhbXphcF9kcml2ZXIpOworfQorCisKK21vZHVsZV9pbml0KHN0cmVhbXphcF9pbml0KTsKK21vZHVsZV9leGl0KHN0cmVhbXphcF9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiSmFyb2QgV2lsc29uIDxqYXJvZEB3aWxzb25ldC5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCittb2R1bGVfcGFyYW0oZGVidWcsIGJvb2wsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJFbmFibGUgZGVidWdnaW5nIG1lc3NhZ2VzIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JjL3dpbmJvbmQtY2lyLmMgYi9kcml2ZXJzL21lZGlhL3JjL3dpbmJvbmQtY2lyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg2ZGU1NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvcmMvd2luYm9uZC1jaXIuYwpAQCAtMCwwICsxLDkzMiBAQAorLyoKKyAqICB3aW5ib25kLWNpci5jIC0gRHJpdmVyIGZvciB0aGUgQ29uc3VtZXIgSVIgZnVuY3Rpb25hbGl0eSBvZiBXaW5ib25kCisgKiAgICAgICAgICAgICAgICAgIFN1cGVySS9PIGNoaXBzLgorICoKKyAqICBDdXJyZW50bHkgc3VwcG9ydHMgdGhlIFdpbmJvbmQgV1BDRDM3NmkgY2hpcCAoUE5QIGlkIFdFQzEwMjIpLCBidXQKKyAqICBjb3VsZCBwcm9iYWJseSBzdXBwb3J0IG90aGVycyAoV2luYm9uZCBXRUMxMDJYLCBOYXRTZW1pLCBldGMpCisgKiAgd2l0aCBtaW5vciBtb2RpZmljYXRpb25zLgorICoKKyAqICBPcmlnaW5hbCBBdXRob3I6IERhdmlkIEjkcmRlbWFuIDxkYXZpZEBoYXJkZW1hbi5udT4KKyAqICAgICBDb3B5cmlnaHQgKEMpIDIwMDkgLSAyMDEwIERhdmlkIEjkcmRlbWFuIDxkYXZpZEBoYXJkZW1hbi5udT4KKyAqCisgKiAgRGVkaWNhdGVkIHRvIG15IGRhdWdodGVyIE1hdGlsZGEsIHdpdGhvdXQgd2hvc2UgbG92aW5nIGF0dGVudGlvbiB0aGlzCisgKiAgZHJpdmVyIHdvdWxkIGhhdmUgYmVlbiBmaW5pc2hlZCBpbiBoYWxmIHRoZSB0aW1lIGFuZCB3aXRoIGEgZnJhY3Rpb24KKyAqICBvZiB0aGUgYnVncy4KKyAqCisgKiAgV3JpdHRlbiB1c2luZzoKKyAqICAgIG8gV2luYm9uZCBXUENEMzc2SSBkYXRhc2hlZXQgaGVscGZ1bGx5IHByb3ZpZGVkIGJ5IEplc3NlIEJhcm5lcyBhdCBJbnRlbAorICogICAgbyBOYXRTZW1pIFBDODczMzgvUEM5NzMzOCBkYXRhc2hlZXQgKGZvciB0aGUgc2VyaWFsIHBvcnQgc3R1ZmYpCisgKiAgICBvIERTRFQgZHVtcHMKKyAqCisgKiAgU3VwcG9ydGVkIGZlYXR1cmVzOgorICogICAgbyBXYWtlLU9uLUNJUiBmdW5jdGlvbmFsaXR5CisgKgorICogIFRvIGRvOgorICogICAgbyBMZWFybmluZworICogICAgbyBJUiBUcmFuc21pdAorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BucC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvbGVkcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvcGNpX2lkcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvYml0cmV2Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPG1lZGlhL3JjLWNvcmUuaD4KKworI2RlZmluZSBEUlZOQU1FICJ3aW5ib25kLWNpciIKKworLyogQ0VJUiBXYWtlLVVwIFJlZ2lzdGVycywgcmVsYXRpdmUgdG8gZGF0YS0+d2Jhc2UgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgV0JDSVJfUkVHX1dDRUlSX0NUTAkweDAzIC8qIENFSVIgUmVjZWl2ZXIgQ29udHJvbAkJKi8KKyNkZWZpbmUgV0JDSVJfUkVHX1dDRUlSX1NUUwkweDA0IC8qIENFSVIgUmVjZWl2ZXIgU3RhdHVzCQkqLworI2RlZmluZSBXQkNJUl9SRUdfV0NFSVJfRVZfRU4JMHgwNSAvKiBDRUlSIFJlY2VpdmVyIEV2ZW50IEVuYWJsZQkqLworI2RlZmluZSBXQkNJUl9SRUdfV0NFSVJfQ05UTAkweDA2IC8qIENFSVIgUmVjZWl2ZXIgQ291bnRlciBMb3cJKi8KKyNkZWZpbmUgV0JDSVJfUkVHX1dDRUlSX0NOVEgJMHgwNyAvKiBDRUlSIFJlY2VpdmVyIENvdW50ZXIgSGlnaAkqLworI2RlZmluZSBXQkNJUl9SRUdfV0NFSVJfSU5ERVgJMHgwOCAvKiBDRUlSIFJlY2VpdmVyIEluZGV4CQkqLworI2RlZmluZSBXQkNJUl9SRUdfV0NFSVJfREFUQQkweDA5IC8qIENFSVIgUmVjZWl2ZXIgRGF0YQkJKi8KKyNkZWZpbmUgV0JDSVJfUkVHX1dDRUlSX0NTTAkweDBBIC8qIENFSVIgUmUuIENvbXBhcmUgU3RybGVuCQkqLworI2RlZmluZSBXQkNJUl9SRUdfV0NFSVJfQ0ZHMQkweDBCIC8qIENFSVIgUmUuIENvbmZpZ3VyYXRpb24gMQkqLworI2RlZmluZSBXQkNJUl9SRUdfV0NFSVJfQ0ZHMgkweDBDIC8qIENFSVIgUmUuIENvbmZpZ3VyYXRpb24gMgkqLworCisvKiBDRUlSIEVuaGFuY2VkIEZ1bmN0aW9uYWxpdHkgUmVnaXN0ZXJzLCByZWxhdGl2ZSB0byBkYXRhLT5lYmFzZSAgICAgICAqLworI2RlZmluZSBXQkNJUl9SRUdfRUNFSVJfQ1RTCTB4MDAgLyogRW5oYW5jZWQgSVIgQ29udHJvbCBTdGF0dXMJKi8KKyNkZWZpbmUgV0JDSVJfUkVHX0VDRUlSX0NDVEwJMHgwMSAvKiBJbmZyYXJlZCBDb3VudGVyIENvbnRyb2wJKi8KKyNkZWZpbmUgV0JDSVJfUkVHX0VDRUlSX0NOVF9MTwkweDAyIC8qIEluZnJhcmVkIENvdW50ZXIgTFNCCQkqLworI2RlZmluZSBXQkNJUl9SRUdfRUNFSVJfQ05UX0hJCTB4MDMgLyogSW5mcmFyZWQgQ291bnRlciBNU0IJCSovCisjZGVmaW5lIFdCQ0lSX1JFR19FQ0VJUl9JUkVNCTB4MDQgLyogSW5mcmFyZWQgRW1pdHRlciBTdGF0dXMJCSovCisKKy8qIFNQMyBCYW5rZWQgUmVnaXN0ZXJzLCByZWxhdGl2ZSB0byBkYXRhLT5zYmFzZSAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFdCQ0lSX1JFR19TUDNfQlNSCTB4MDMgLyogQmFuayBTZWxlY3QsIGFsbCBiYW5rcwkJKi8KKwkJCQkgICAgICAvKiBCYW5rIDAJCQkJKi8KKyNkZWZpbmUgV0JDSVJfUkVHX1NQM19SWERBVEEJMHgwMCAvKiBGSUZPIFJYIGRhdGEgKHIpCQkqLworI2RlZmluZSBXQkNJUl9SRUdfU1AzX1RYREFUQQkweDAwIC8qIEZJRk8gVFggZGF0YSAodykJCSovCisjZGVmaW5lIFdCQ0lSX1JFR19TUDNfSUVSCTB4MDEgLyogSW50ZXJydXB0IEVuYWJsZQkJKi8KKyNkZWZpbmUgV0JDSVJfUkVHX1NQM19FSVIJMHgwMiAvKiBFdmVudCBJZGVudGlmaWNhdGlvbiAocikJKi8KKyNkZWZpbmUgV0JDSVJfUkVHX1NQM19GQ1IJMHgwMiAvKiBGSUZPIENvbnRyb2wgKHcpCQkqLworI2RlZmluZSBXQkNJUl9SRUdfU1AzX01DUgkweDA0IC8qIE1vZGUgQ29udHJvbAkJCSovCisjZGVmaW5lIFdCQ0lSX1JFR19TUDNfTFNSCTB4MDUgLyogTGluayBTdGF0dXMJCQkqLworI2RlZmluZSBXQkNJUl9SRUdfU1AzX01TUgkweDA2IC8qIE1vZGVtIFN0YXR1cwkJCSovCisjZGVmaW5lIFdCQ0lSX1JFR19TUDNfQVNDUgkweDA3IC8qIEF1eCBTdGF0dXMgYW5kIENvbnRyb2wJCSovCisJCQkJICAgICAgLyogQmFuayAyCQkJCSovCisjZGVmaW5lIFdCQ0lSX1JFR19TUDNfQkdETAkweDAwIC8qIEJhdWQgRGl2aXNvciBMU0IJCSovCisjZGVmaW5lIFdCQ0lSX1JFR19TUDNfQkdESAkweDAxIC8qIEJhdWQgRGl2aXNvciBNU0IJCSovCisjZGVmaW5lIFdCQ0lSX1JFR19TUDNfRVhDUjEJMHgwMiAvKiBFeHRlbmRlZCBDb250cm9sIDEJCSovCisjZGVmaW5lIFdCQ0lSX1JFR19TUDNfRVhDUjIJMHgwNCAvKiBFeHRlbmRlZCBDb250cm9sIDIJCSovCisjZGVmaW5lIFdCQ0lSX1JFR19TUDNfVFhGTFYJMHgwNiAvKiBUWCBGSUZPIExldmVsCQkJKi8KKyNkZWZpbmUgV0JDSVJfUkVHX1NQM19SWEZMVgkweDA3IC8qIFJYIEZJRk8gTGV2ZWwJCQkqLworCQkJCSAgICAgIC8qIEJhbmsgMwkJCQkqLworI2RlZmluZSBXQkNJUl9SRUdfU1AzX01SSUQJMHgwMCAvKiBNb2R1bGUgSWRlbnRpZmljYXRpb24JCSovCisjZGVmaW5lIFdCQ0lSX1JFR19TUDNfU0hfTENSCTB4MDEgLyogTENSIFNoYWRvdwkJCSovCisjZGVmaW5lIFdCQ0lSX1JFR19TUDNfU0hfRkNSCTB4MDIgLyogRkNSIFNoYWRvdwkJCSovCisJCQkJICAgICAgLyogQmFuayA0CQkJCSovCisjZGVmaW5lIFdCQ0lSX1JFR19TUDNfSVJDUjEJMHgwMiAvKiBJbmZyYXJlZCBDb250cm9sIDEJCSovCisJCQkJICAgICAgLyogQmFuayA1CQkJCSovCisjZGVmaW5lIFdCQ0lSX1JFR19TUDNfSVJDUjIJMHgwNCAvKiBJbmZyYXJlZCBDb250cm9sIDIJCSovCisJCQkJICAgICAgLyogQmFuayA2CQkJCSovCisjZGVmaW5lIFdCQ0lSX1JFR19TUDNfSVJDUjMJMHgwMCAvKiBJbmZyYXJlZCBDb250cm9sIDMJCSovCisjZGVmaW5lIFdCQ0lSX1JFR19TUDNfU0lSX1BXCTB4MDIgLyogU0lSIFB1bHNlIFdpZHRoCQkJKi8KKwkJCQkgICAgICAvKiBCYW5rIDcJCQkJKi8KKyNkZWZpbmUgV0JDSVJfUkVHX1NQM19JUlJYREMJMHgwMCAvKiBJUiBSWCBEZW1vZCBDb250cm9sCQkqLworI2RlZmluZSBXQkNJUl9SRUdfU1AzX0lSVFhNQwkweDAxIC8qIElSIFRYIE1vZCBDb250cm9sCQkqLworI2RlZmluZSBXQkNJUl9SRUdfU1AzX1JDQ0ZHCTB4MDIgLyogQ0VJUiBDb25maWcJCQkqLworI2RlZmluZSBXQkNJUl9SRUdfU1AzX0lSQ0ZHMQkweDA0IC8qIEluZnJhcmVkIENvbmZpZyAxCQkqLworI2RlZmluZSBXQkNJUl9SRUdfU1AzX0lSQ0ZHNAkweDA3IC8qIEluZnJhcmVkIENvbmZpZyA0CQkqLworCisvKgorICogTWFnaWMgdmFsdWVzIGZvbGxvdworICovCisKKy8qIE5vIGludGVycnVwdHMgZm9yIFdCQ0lSX1JFR19TUDNfSUVSIGFuZCBXQkNJUl9SRUdfU1AzX0VJUiAqLworI2RlZmluZSBXQkNJUl9JUlFfTk9ORQkJMHgwMAorLyogUlggZGF0YSBiaXQgZm9yIFdCQ0lSX1JFR19TUDNfSUVSIGFuZCBXQkNJUl9SRUdfU1AzX0VJUiAqLworI2RlZmluZSBXQkNJUl9JUlFfUlgJCTB4MDEKKy8qIE92ZXIvVW5kZXItZmxvdyBiaXQgZm9yIFdCQ0lSX1JFR19TUDNfSUVSIGFuZCBXQkNJUl9SRUdfU1AzX0VJUiAqLworI2RlZmluZSBXQkNJUl9JUlFfRVJSCQkweDA0CisvKiBMZWQgZW5hYmxlL2Rpc2FibGUgYml0IGZvciBXQkNJUl9SRUdfRUNFSVJfQ1RTICovCisjZGVmaW5lIFdCQ0lSX0xFRF9FTkFCTEUJMHg4MAorLyogUlggZGF0YSBhdmFpbGFibGUgYml0IGZvciBXQkNJUl9SRUdfU1AzX0xTUiAqLworI2RlZmluZSBXQkNJUl9SWF9BVkFJTAkJMHgwMQorLyogUlggZGlzYWJsZSBiaXQgZm9yIFdCQ0lSX1JFR19TUDNfQVNDUiAqLworI2RlZmluZSBXQkNJUl9SWF9ESVNBQkxFCTB4MjAKKy8qIEV4dGVuZGVkIG1vZGUgZW5hYmxlIGJpdCBmb3IgV0JDSVJfUkVHX1NQM19FWENSMSAqLworI2RlZmluZSBXQkNJUl9FWFRfRU5BQkxFCTB4MDEKKy8qIFNlbGVjdCBjb21wYXJlIHJlZ2lzdGVyIGluIFdCQ0lSX1JFR19XQ0VJUl9JTkRFWCAoYml0cyA1ICYgNikgKi8KKyNkZWZpbmUgV0JDSVJfUkVHU0VMX0NPTVBBUkUJMHgxMAorLyogU2VsZWN0IG1hc2sgcmVnaXN0ZXIgaW4gV0JDSVJfUkVHX1dDRUlSX0lOREVYIChiaXRzIDUgJiA2KSAqLworI2RlZmluZSBXQkNJUl9SRUdTRUxfTUFTSwkweDIwCisvKiBTdGFydGluZyBhZGRyZXNzIG9mIHNlbGVjdGVkIHJlZ2lzdGVyIGluIFdCQ0lSX1JFR19XQ0VJUl9JTkRFWCAqLworI2RlZmluZSBXQkNJUl9SRUdfQUREUjAJCTB4MDAKKworLyogVmFsaWQgYmFua3MgZm9yIHRoZSBTUDMgVUFSVCAqLworZW51bSB3YmNpcl9iYW5rIHsKKwlXQkNJUl9CQU5LXzAgICAgICAgICAgPSAweDAwLAorCVdCQ0lSX0JBTktfMSAgICAgICAgICA9IDB4ODAsCisJV0JDSVJfQkFOS18yICAgICAgICAgID0gMHhFMCwKKwlXQkNJUl9CQU5LXzMgICAgICAgICAgPSAweEU0LAorCVdCQ0lSX0JBTktfNCAgICAgICAgICA9IDB4RTgsCisJV0JDSVJfQkFOS181ICAgICAgICAgID0gMHhFQywKKwlXQkNJUl9CQU5LXzYgICAgICAgICAgPSAweEYwLAorCVdCQ0lSX0JBTktfNyAgICAgICAgICA9IDB4RjQsCit9OworCisvKiBTdXBwb3J0ZWQgcG93ZXItb24gSVIgUHJvdG9jb2xzICovCitlbnVtIHdiY2lyX3Byb3RvY29sIHsKKwlJUl9QUk9UT0NPTF9SQzUgICAgICAgICAgPSAweDAsCisJSVJfUFJPVE9DT0xfTkVDICAgICAgICAgID0gMHgxLAorCUlSX1BST1RPQ09MX1JDNiAgICAgICAgICA9IDB4MiwKK307CisKKy8qIE1pc2MgKi8KKyNkZWZpbmUgV0JDSVJfTkFNRQkiV2luYm9uZCBDSVIiCisjZGVmaW5lIFdCQ0lSX0lEX0ZBTUlMWSAgICAgICAgICAweEYxIC8qIEZhbWlseSBJRCBmb3IgdGhlIFdQQ0QzNzZJCSovCisjZGVmaW5lCVdCQ0lSX0lEX0NISVAgICAgICAgICAgICAweDA0IC8qIENoaXAgSUQgZm9yIHRoZSBXUENEMzc2SQkqLworI2RlZmluZSBJTlZBTElEX1NDQU5DT0RFICAgMHg3RkZGRkZGRiAvKiBJbnZhbGlkIHdpdGggYWxsIHByb3RvcwkqLworI2RlZmluZSBXQUtFVVBfSU9NRU1fTEVOICAgICAgICAgMHgxMCAvKiBXYWtlLVVwIEkvTyBSZWcgTGVuCQkqLworI2RlZmluZSBFSEZVTkNfSU9NRU1fTEVOICAgICAgICAgMHgxMCAvKiBFbmhhbmNlZCBGdW5jIEkvTyBSZWcgTGVuCSovCisjZGVmaW5lIFNQX0lPTUVNX0xFTiAgICAgICAgICAgICAweDA4IC8qIFNlcmlhbCBQb3J0IDMgKElSKSBSZWcgTGVuCSovCisKKy8qIFBlci1kZXZpY2UgZGF0YSAqLworc3RydWN0IHdiY2lyX2RhdGEgeworCXNwaW5sb2NrX3Qgc3BpbmxvY2s7CisKKwl1bnNpZ25lZCBsb25nIHdiYXNlOyAgICAgICAgLyogV2FrZS1VcCBCYXNlYWRkcgkJKi8KKwl1bnNpZ25lZCBsb25nIGViYXNlOyAgICAgICAgLyogRW5oYW5jZWQgRnVuYy4gQmFzZWFkZHIJKi8KKwl1bnNpZ25lZCBsb25nIHNiYXNlOyAgICAgICAgLyogU2VyaWFsIFBvcnQgQmFzZWFkZHIJKi8KKwl1bnNpZ25lZCBpbnQgIGlycTsgICAgICAgICAgLyogU2VyaWFsIFBvcnQgSVJRCQkqLworCisJc3RydWN0IHJjX2RldiAqZGV2OworCisJc3RydWN0IGxlZF90cmlnZ2VyICpyeHRyaWdnZXI7CisJc3RydWN0IGxlZF90cmlnZ2VyICp0eHRyaWdnZXI7CisJc3RydWN0IGxlZF9jbGFzc2RldiBsZWQ7CisKKwkvKiBSWCBpcmRhdGEgc3RhdGUgKi8KKwlib29sIGlyZGF0YV9hY3RpdmU7CisJYm9vbCBpcmRhdGFfZXJyb3I7CisJc3RydWN0IGlyX3Jhd19ldmVudCBldjsKK307CisKK3N0YXRpYyBlbnVtIHdiY2lyX3Byb3RvY29sIHByb3RvY29sID0gSVJfUFJPVE9DT0xfUkM2OworbW9kdWxlX3BhcmFtKHByb3RvY29sLCB1aW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MocHJvdG9jb2wsICJJUiBwcm90b2NvbCB0byB1c2UgZm9yIHRoZSBwb3dlci1vbiBjb21tYW5kICIKKwkJICIoMCA9IFJDNSwgMSA9IE5FQywgMiA9IFJDNkEsIGRlZmF1bHQpIik7CisKK3N0YXRpYyBpbnQgaW52ZXJ0OyAvKiBkZWZhdWx0ID0gMCAqLworbW9kdWxlX3BhcmFtKGludmVydCwgYm9vbCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGludmVydCwgIkludmVydCB0aGUgc2lnbmFsIGZyb20gdGhlIElSIHJlY2VpdmVyIik7CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgd2FrZV9zYyA9IDB4ODAwRjA0MEM7Cittb2R1bGVfcGFyYW0od2FrZV9zYywgdWludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHdha2Vfc2MsICJTY2FuY29kZSBvZiB0aGUgcG93ZXItb24gSVIgY29tbWFuZCIpOworCitzdGF0aWMgdW5zaWduZWQgaW50IHdha2VfcmM2bW9kZSA9IDY7Cittb2R1bGVfcGFyYW0od2FrZV9yYzZtb2RlLCB1aW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0Mod2FrZV9yYzZtb2RlLCAiUkM2IG1vZGUgZm9yIHRoZSBwb3dlci1vbiBjb21tYW5kICIKKwkJICIoMCA9IDAsIDYgPSA2QSwgZGVmYXVsdCkiKTsKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFVUSUxJVFkgRlVOQ1RJT05TCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBDYWxsZXIgbmVlZHMgdG8gaG9sZCB3YmNpcl9sb2NrICovCitzdGF0aWMgdm9pZAord2JjaXJfc2V0X2JpdHModW5zaWduZWQgbG9uZyBhZGRyLCB1OCBiaXRzLCB1OCBtYXNrKQoreworCXU4IHZhbDsKKworCXZhbCA9IGluYihhZGRyKTsKKwl2YWwgPSAoKHZhbCAmIH5tYXNrKSB8IChiaXRzICYgbWFzaykpOworCW91dGIodmFsLCBhZGRyKTsKK30KKworLyogU2VsZWN0cyB0aGUgcmVnaXN0ZXIgYmFuayBmb3IgdGhlIHNlcmlhbCBwb3J0ICovCitzdGF0aWMgaW5saW5lIHZvaWQKK3diY2lyX3NlbGVjdF9iYW5rKHN0cnVjdCB3YmNpcl9kYXRhICpkYXRhLCBlbnVtIHdiY2lyX2JhbmsgYmFuaykKK3sKKwlvdXRiKGJhbmssIGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19CU1IpOworfQorCitzdGF0aWMgZW51bSBsZWRfYnJpZ2h0bmVzcword2JjaXJfbGVkX2JyaWdodG5lc3NfZ2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KQoreworCXN0cnVjdCB3YmNpcl9kYXRhICpkYXRhID0gY29udGFpbmVyX29mKGxlZF9jZGV2LAorCQkJCQkgICAgICAgc3RydWN0IHdiY2lyX2RhdGEsCisJCQkJCSAgICAgICBsZWQpOworCisJaWYgKGluYihkYXRhLT5lYmFzZSArIFdCQ0lSX1JFR19FQ0VJUl9DVFMpICYgV0JDSVJfTEVEX0VOQUJMRSkKKwkJcmV0dXJuIExFRF9GVUxMOworCWVsc2UKKwkJcmV0dXJuIExFRF9PRkY7Cit9CisKK3N0YXRpYyB2b2lkCit3YmNpcl9sZWRfYnJpZ2h0bmVzc19zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCisJCQkgZW51bSBsZWRfYnJpZ2h0bmVzcyBicmlnaHRuZXNzKQoreworCXN0cnVjdCB3YmNpcl9kYXRhICpkYXRhID0gY29udGFpbmVyX29mKGxlZF9jZGV2LAorCQkJCQkgICAgICAgc3RydWN0IHdiY2lyX2RhdGEsCisJCQkJCSAgICAgICBsZWQpOworCisJd2JjaXJfc2V0X2JpdHMoZGF0YS0+ZWJhc2UgKyBXQkNJUl9SRUdfRUNFSVJfQ1RTLAorCQkgICAgICAgYnJpZ2h0bmVzcyA9PSBMRURfT0ZGID8gMHgwMCA6IFdCQ0lSX0xFRF9FTkFCTEUsCisJCSAgICAgICBXQkNJUl9MRURfRU5BQkxFKTsKK30KKworLyogTWFuY2hlc3RlciBlbmNvZGVzIGJpdHMgdG8gUkM2IG1lc3NhZ2UgY2VsbHMgKHNlZSB3YmNpcl9zaHV0ZG93bikgKi8KK3N0YXRpYyB1OAord2JjaXJfdG9fcmM2Y2VsbHModTggdmFsKQoreworCXU4IGNvZGVkID0gMHgwMDsKKwlpbnQgaTsKKworCXZhbCAmPSAweDBGOworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJaWYgKHZhbCAmIDB4MDEpCisJCQljb2RlZCB8PSAweDAyIDw8IChpICogMik7CisJCWVsc2UKKwkJCWNvZGVkIHw9IDB4MDEgPDwgKGkgKiAyKTsKKwkJdmFsID4+PSAxOworCX0KKworCXJldHVybiBjb2RlZDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogSU5URVJSVVBUIEZVTkNUSU9OUworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGlycXJldHVybl90Cit3YmNpcl9pcnFfaGFuZGxlcihpbnQgaXJxbm8sIHZvaWQgKmNvb2tpZSkKK3sKKwlzdHJ1Y3QgcG5wX2RldiAqZGV2aWNlID0gY29va2llOworCXN0cnVjdCB3YmNpcl9kYXRhICpkYXRhID0gcG5wX2dldF9kcnZkYXRhKGRldmljZSk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1OCBpcmRhdGFbOF07CisJdTggZGlzYWJsZSA9IHRydWU7CisJdTggc3RhdHVzOworCWludCBpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRhdGEtPnNwaW5sb2NrLCBmbGFncyk7CisKKwl3YmNpcl9zZWxlY3RfYmFuayhkYXRhLCBXQkNJUl9CQU5LXzApOworCisJc3RhdHVzID0gaW5iKGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19FSVIpOworCisJaWYgKCEoc3RhdHVzICYgKFdCQ0lSX0lSUV9SWCB8IFdCQ0lSX0lSUV9FUlIpKSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkYXRhLT5zcGlubG9jaywgZmxhZ3MpOworCQlyZXR1cm4gSVJRX05PTkU7CisJfQorCisJLyogQ2hlY2sgZm9yIGUuZy4gYnVmZmVyIG92ZXJmbG93ICovCisJaWYgKHN0YXR1cyAmIFdCQ0lSX0lSUV9FUlIpIHsKKwkJZGF0YS0+aXJkYXRhX2Vycm9yID0gdHJ1ZTsKKwkJaXJfcmF3X2V2ZW50X3Jlc2V0KGRhdGEtPmRldik7CisJfQorCisJaWYgKCEoc3RhdHVzICYgV0JDSVJfSVJRX1JYKSkKKwkJZ290byBvdXQ7CisKKwlpZiAoIWRhdGEtPmlyZGF0YV9hY3RpdmUpIHsKKwkJZGF0YS0+aXJkYXRhX2FjdGl2ZSA9IHRydWU7CisJCWxlZF90cmlnZ2VyX2V2ZW50KGRhdGEtPnJ4dHJpZ2dlciwgTEVEX0ZVTEwpOworCX0KKworCS8qIFNpbmNlIFJYSERMRVYgaXMgc2V0LCBhdCBsZWFzdCA4IGJ5dGVzIGFyZSBpbiB0aGUgRklGTyAqLworCWluc2IoZGF0YS0+c2Jhc2UgKyBXQkNJUl9SRUdfU1AzX1JYREFUQSwgJmlyZGF0YVswXSwgOCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCXU4IHB1bHNlOworCQl1MzIgZHVyYXRpb247CisKKwkJaWYgKGlyZGF0YVtpXSAhPSAweEZGICYmIGlyZGF0YVtpXSAhPSAweDAwKQorCQkJZGlzYWJsZSA9IGZhbHNlOworCisJCWlmIChkYXRhLT5pcmRhdGFfZXJyb3IpCisJCQljb250aW51ZTsKKworCQlwdWxzZSA9IGlyZGF0YVtpXSAmIDB4ODAgPyBmYWxzZSA6IHRydWU7CisJCWR1cmF0aW9uID0gKGlyZGF0YVtpXSAmIDB4N0YpICogMTAwMDA7IC8qIG5zICovCisKKwkJaWYgKGRhdGEtPmV2LnB1bHNlICE9IHB1bHNlKSB7CisJCQlpZiAoZGF0YS0+ZXYuZHVyYXRpb24gIT0gMCkgeworCQkJCWlyX3Jhd19ldmVudF9zdG9yZShkYXRhLT5kZXYsICZkYXRhLT5ldik7CisJCQkJZGF0YS0+ZXYuZHVyYXRpb24gPSAwOworCQkJfQorCisJCQlkYXRhLT5ldi5wdWxzZSA9IHB1bHNlOworCQl9CisKKwkJZGF0YS0+ZXYuZHVyYXRpb24gKz0gZHVyYXRpb247CisJfQorCisJaWYgKGRpc2FibGUpIHsKKwkJaWYgKGRhdGEtPmV2LmR1cmF0aW9uICE9IDAgJiYgIWRhdGEtPmlyZGF0YV9lcnJvcikgeworCQkJaXJfcmF3X2V2ZW50X3N0b3JlKGRhdGEtPmRldiwgJmRhdGEtPmV2KTsKKwkJCWRhdGEtPmV2LmR1cmF0aW9uID0gMDsKKwkJfQorCisJCS8qIFNldCBSWElOQUNUSVZFICovCisJCW91dGIoV0JDSVJfUlhfRElTQUJMRSwgZGF0YS0+c2Jhc2UgKyBXQkNJUl9SRUdfU1AzX0FTQ1IpOworCisJCS8qIERyYWluIHRoZSBGSUZPICovCisJCXdoaWxlIChpbmIoZGF0YS0+c2Jhc2UgKyBXQkNJUl9SRUdfU1AzX0xTUikgJiBXQkNJUl9SWF9BVkFJTCkKKwkJCWluYihkYXRhLT5zYmFzZSArIFdCQ0lSX1JFR19TUDNfUlhEQVRBKTsKKworCQlpcl9yYXdfZXZlbnRfcmVzZXQoZGF0YS0+ZGV2KTsKKwkJZGF0YS0+aXJkYXRhX2Vycm9yID0gZmFsc2U7CisJCWRhdGEtPmlyZGF0YV9hY3RpdmUgPSBmYWxzZTsKKwkJbGVkX3RyaWdnZXJfZXZlbnQoZGF0YS0+cnh0cmlnZ2VyLCBMRURfT0ZGKTsKKwl9CisKKwlpcl9yYXdfZXZlbnRfaGFuZGxlKGRhdGEtPmRldik7CisKK291dDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkYXRhLT5zcGlubG9jaywgZmxhZ3MpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFNFVFVQL0lOSVQvU1VTUEVORC9SRVNVTUUgRlVOQ1RJT05TCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZAord2JjaXJfc2h1dGRvd24oc3RydWN0IHBucF9kZXYgKmRldmljZSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmZGV2aWNlLT5kZXY7CisJc3RydWN0IHdiY2lyX2RhdGEgKmRhdGEgPSBwbnBfZ2V0X2RydmRhdGEoZGV2aWNlKTsKKwlpbnQgZG9fd2FrZSA9IDE7CisJdTggbWF0Y2hbMTFdOworCXU4IG1hc2tbMTFdOworCXU4IHJjNl9jc2wgPSAwOworCWludCBpOworCisJbWVtc2V0KG1hdGNoLCAwLCBzaXplb2YobWF0Y2gpKTsKKwltZW1zZXQobWFzaywgMCwgc2l6ZW9mKG1hc2spKTsKKworCWlmICh3YWtlX3NjID09IElOVkFMSURfU0NBTkNPREUgfHwgIWRldmljZV9tYXlfd2FrZXVwKGRldikpIHsKKwkJZG9fd2FrZSA9IDA7CisJCWdvdG8gZmluaXNoOworCX0KKworCXN3aXRjaCAocHJvdG9jb2wpIHsKKwljYXNlIElSX1BST1RPQ09MX1JDNToKKwkJaWYgKHdha2Vfc2MgPiAweEZGRikgeworCQkJZG9fd2FrZSA9IDA7CisJCQlkZXZfZXJyKGRldiwgIlJDNSAtIEludmFsaWQgd2FrZSBzY2FuY29kZVxuIik7CisJCQlicmVhazsKKwkJfQorCisJCS8qIE1hc2sgPSAxMyBiaXRzLCBleCB0b2dnbGUgKi8KKwkJbWFza1swXSA9IDB4RkY7CisJCW1hc2tbMV0gPSAweDE3OworCisJCW1hdGNoWzBdICA9ICh3YWtlX3NjICYgMHgwMDNGKTsgICAgICAvKiA2IGNvbW1hbmQgYml0cyAqLworCQltYXRjaFswXSB8PSAod2FrZV9zYyAmIDB4MDE4MCkgPj4gMTsgLyogMiBhZGRyZXNzIGJpdHMgKi8KKwkJbWF0Y2hbMV0gID0gKHdha2Vfc2MgJiAweDBFMDApID4+IDk7IC8qIDMgYWRkcmVzcyBiaXRzICovCisJCWlmICghKHdha2Vfc2MgJiAweDAwNDApKSAgICAgICAgICAgICAvKiAybmQgc3RhcnQgYml0ICAqLworCQkJbWF0Y2hbMV0gfD0gMHgxMDsKKworCQlicmVhazsKKworCWNhc2UgSVJfUFJPVE9DT0xfTkVDOgorCQlpZiAod2FrZV9zYyA+IDB4RkZGRkZGKSB7CisJCQlkb193YWtlID0gMDsKKwkJCWRldl9lcnIoZGV2LCAiTkVDIC0gSW52YWxpZCB3YWtlIHNjYW5jb2RlXG4iKTsKKwkJCWJyZWFrOworCQl9CisKKwkJbWFza1swXSA9IG1hc2tbMV0gPSBtYXNrWzJdID0gbWFza1szXSA9IDB4RkY7CisKKwkJbWF0Y2hbMV0gPSBiaXRyZXY4KCh3YWtlX3NjICYgMHhGRikpOworCQltYXRjaFswXSA9IH5tYXRjaFsxXTsKKworCQltYXRjaFszXSA9IGJpdHJldjgoKHdha2Vfc2MgJiAweEZGMDApID4+IDgpOworCQlpZiAod2FrZV9zYyA+IDB4RkZGRikKKwkJCW1hdGNoWzJdID0gYml0cmV2OCgod2FrZV9zYyAmIDB4RkYwMDAwKSA+PiAxNik7CisJCWVsc2UKKwkJCW1hdGNoWzJdID0gfm1hdGNoWzNdOworCisJCWJyZWFrOworCisJY2FzZSBJUl9QUk9UT0NPTF9SQzY6CisKKwkJaWYgKHdha2VfcmM2bW9kZSA9PSAwKSB7CisJCQlpZiAod2FrZV9zYyA+IDB4RkZGRikgeworCQkJCWRvX3dha2UgPSAwOworCQkJCWRldl9lcnIoZGV2LCAiUkM2IC0gSW52YWxpZCB3YWtlIHNjYW5jb2RlXG4iKTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJLyogQ29tbWFuZCAqLworCQkJbWF0Y2hbMF0gPSB3YmNpcl90b19yYzZjZWxscyh3YWtlX3NjID4+ICAwKTsKKwkJCW1hc2tbMF0gID0gMHhGRjsKKwkJCW1hdGNoWzFdID0gd2JjaXJfdG9fcmM2Y2VsbHMod2FrZV9zYyA+PiAgNCk7CisJCQltYXNrWzFdICA9IDB4RkY7CisKKwkJCS8qIEFkZHJlc3MgKi8KKwkJCW1hdGNoWzJdID0gd2JjaXJfdG9fcmM2Y2VsbHMod2FrZV9zYyA+PiAgOCk7CisJCQltYXNrWzJdICA9IDB4RkY7CisJCQltYXRjaFszXSA9IHdiY2lyX3RvX3JjNmNlbGxzKHdha2Vfc2MgPj4gMTIpOworCQkJbWFza1szXSAgPSAweEZGOworCisJCQkvKiBIZWFkZXIgKi8KKwkJCW1hdGNoWzRdID0gMHg1MDsgLyogbW9kZTEgPSBtb2RlMCA9IDAsIGlnbm9yZSB0b2dnbGUgKi8KKwkJCW1hc2tbNF0gID0gMHhGMDsKKwkJCW1hdGNoWzVdID0gMHgwOTsgLyogc3RhcnQgYml0ID0gMSwgbW9kZTIgPSAwICovCisJCQltYXNrWzVdICA9IDB4MEY7CisKKwkJCXJjNl9jc2wgPSA0NDsKKworCQl9IGVsc2UgaWYgKHdha2VfcmM2bW9kZSA9PSA2KSB7CisJCQlpID0gMDsKKworCQkJLyogQ29tbWFuZCAqLworCQkJbWF0Y2hbaV0gID0gd2JjaXJfdG9fcmM2Y2VsbHMod2FrZV9zYyA+PiAgMCk7CisJCQltYXNrW2krK10gPSAweEZGOworCQkJbWF0Y2hbaV0gID0gd2JjaXJfdG9fcmM2Y2VsbHMod2FrZV9zYyA+PiAgNCk7CisJCQltYXNrW2krK10gPSAweEZGOworCisJCQkvKiBBZGRyZXNzICsgVG9nZ2xlICovCisJCQltYXRjaFtpXSAgPSB3YmNpcl90b19yYzZjZWxscyh3YWtlX3NjID4+ICA4KTsKKwkJCW1hc2tbaSsrXSA9IDB4RkY7CisJCQltYXRjaFtpXSAgPSB3YmNpcl90b19yYzZjZWxscyh3YWtlX3NjID4+IDEyKTsKKwkJCW1hc2tbaSsrXSA9IDB4M0Y7CisKKwkJCS8qIEN1c3RvbWVyIGJpdHMgNyAtIDAgKi8KKwkJCW1hdGNoW2ldICA9IHdiY2lyX3RvX3JjNmNlbGxzKHdha2Vfc2MgPj4gMTYpOworCQkJbWFza1tpKytdID0gMHhGRjsKKwkJCW1hdGNoW2ldICA9IHdiY2lyX3RvX3JjNmNlbGxzKHdha2Vfc2MgPj4gMjApOworCQkJbWFza1tpKytdID0gMHhGRjsKKworCQkJaWYgKHdha2Vfc2MgJiAweDgwMDAwMDAwKSB7CisJCQkJLyogQ3VzdG9tZXIgcmFuZ2UgYml0IGFuZCBiaXRzIDE1IC0gOCAqLworCQkJCW1hdGNoW2ldICA9IHdiY2lyX3RvX3JjNmNlbGxzKHdha2Vfc2MgPj4gMjQpOworCQkJCW1hc2tbaSsrXSA9IDB4RkY7CisJCQkJbWF0Y2hbaV0gID0gd2JjaXJfdG9fcmM2Y2VsbHMod2FrZV9zYyA+PiAyOCk7CisJCQkJbWFza1tpKytdID0gMHhGRjsKKwkJCQlyYzZfY3NsID0gNzY7CisJCQl9IGVsc2UgaWYgKHdha2Vfc2MgPD0gMHgwMDdGRkZGRikgeworCQkJCXJjNl9jc2wgPSA2MDsKKwkJCX0gZWxzZSB7CisJCQkJZG9fd2FrZSA9IDA7CisJCQkJZGV2X2VycihkZXYsICJSQzYgLSBJbnZhbGlkIHdha2Ugc2NhbmNvZGVcbiIpOworCQkJCWJyZWFrOworCQkJfQorCisJCQkvKiBIZWFkZXIgKi8KKwkJCW1hdGNoW2ldICA9IDB4OTM7IC8qIG1vZGUxID0gbW9kZTAgPSAxLCBzdWJtb2RlID0gMCAqLworCQkJbWFza1tpKytdID0gMHhGRjsKKwkJCW1hdGNoW2ldICA9IDB4MEE7IC8qIHN0YXJ0IGJpdCA9IDEsIG1vZGUyID0gMSAqLworCQkJbWFza1tpKytdID0gMHgwRjsKKworCQl9IGVsc2UgeworCQkJZG9fd2FrZSA9IDA7CisJCQlkZXZfZXJyKGRldiwgIlJDNiAtIEludmFsaWQgd2FrZSBtb2RlXG4iKTsKKwkJfQorCisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZG9fd2FrZSA9IDA7CisJCWJyZWFrOworCX0KKworZmluaXNoOgorCWlmIChkb193YWtlKSB7CisJCS8qIFNldCBjb21wYXJlIGFuZCBjb21wYXJlIG1hc2sgKi8KKwkJd2JjaXJfc2V0X2JpdHMoZGF0YS0+d2Jhc2UgKyBXQkNJUl9SRUdfV0NFSVJfSU5ERVgsCisJCQkgICAgICAgV0JDSVJfUkVHU0VMX0NPTVBBUkUgfCBXQkNJUl9SRUdfQUREUjAsCisJCQkgICAgICAgMHgzRik7CisJCW91dHNiKGRhdGEtPndiYXNlICsgV0JDSVJfUkVHX1dDRUlSX0RBVEEsIG1hdGNoLCAxMSk7CisJCXdiY2lyX3NldF9iaXRzKGRhdGEtPndiYXNlICsgV0JDSVJfUkVHX1dDRUlSX0lOREVYLAorCQkJICAgICAgIFdCQ0lSX1JFR1NFTF9NQVNLIHwgV0JDSVJfUkVHX0FERFIwLAorCQkJICAgICAgIDB4M0YpOworCQlvdXRzYihkYXRhLT53YmFzZSArIFdCQ0lSX1JFR19XQ0VJUl9EQVRBLCBtYXNrLCAxMSk7CisKKwkJLyogUkM2IENvbXBhcmUgU3RyaW5nIExlbiAqLworCQlvdXRiKHJjNl9jc2wsIGRhdGEtPndiYXNlICsgV0JDSVJfUkVHX1dDRUlSX0NTTCk7CisKKwkJLyogQ2xlYXIgc3RhdHVzIGJpdHMgTkVDX1JFUCwgQlVGRiwgTVNHX0VORCwgTUFUQ0ggKi8KKwkJd2JjaXJfc2V0X2JpdHMoZGF0YS0+d2Jhc2UgKyBXQkNJUl9SRUdfV0NFSVJfU1RTLCAweDE3LCAweDE3KTsKKworCQkvKiBDbGVhciBCVUZGX0VOLCBDbGVhciBFTkRfRU4sIFNldCBNQVRDSF9FTiAqLworCQl3YmNpcl9zZXRfYml0cyhkYXRhLT53YmFzZSArIFdCQ0lSX1JFR19XQ0VJUl9FVl9FTiwgMHgwMSwgMHgwNyk7CisKKwkJLyogU2V0IENFSVJfRU4gKi8KKwkJd2JjaXJfc2V0X2JpdHMoZGF0YS0+d2Jhc2UgKyBXQkNJUl9SRUdfV0NFSVJfQ1RMLCAweDAxLCAweDAxKTsKKworCX0gZWxzZSB7CisJCS8qIENsZWFyIEJVRkZfRU4sIENsZWFyIEVORF9FTiwgQ2xlYXIgTUFUQ0hfRU4gKi8KKwkJd2JjaXJfc2V0X2JpdHMoZGF0YS0+d2Jhc2UgKyBXQkNJUl9SRUdfV0NFSVJfRVZfRU4sIDB4MDAsIDB4MDcpOworCisJCS8qIENsZWFyIENFSVJfRU4gKi8KKwkJd2JjaXJfc2V0X2JpdHMoZGF0YS0+d2Jhc2UgKyBXQkNJUl9SRUdfV0NFSVJfQ1RMLCAweDAwLCAweDAxKTsKKwl9CisKKwkvKiBEaXNhYmxlIGludGVycnVwdHMgKi8KKwl3YmNpcl9zZWxlY3RfYmFuayhkYXRhLCBXQkNJUl9CQU5LXzApOworCW91dGIoV0JDSVJfSVJRX05PTkUsIGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19JRVIpOworCisJLyogRGlzYWJsZSBMRUQgKi8KKwlkYXRhLT5pcmRhdGFfYWN0aXZlID0gZmFsc2U7CisJbGVkX3RyaWdnZXJfZXZlbnQoZGF0YS0+cnh0cmlnZ2VyLCBMRURfT0ZGKTsKKworCS8qCisJICogQUNQSSB3aWxsIHNldCB0aGUgSFcgZGlzYWJsZSBiaXQgZm9yIFNQMyB3aGljaCBtZWFucyB0aGF0IHRoZQorCSAqIG91dHB1dCBzaWduYWxzIGFyZSBsZWZ0IGluIGFuIHVuZGVmaW5lZCBzdGF0ZSB3aGljaCBtYXkgY2F1c2UKKwkgKiBzcHVyaW91cyBpbnRlcnJ1cHRzIHdoaWNoIHdlIG5lZWQgdG8gaWdub3JlIHVudGlsIHRoZSBoYXJkd2FyZQorCSAqIGlzIHJlaW5pdGlhbGl6ZWQuCisJICovCisJZGlzYWJsZV9pcnEoZGF0YS0+aXJxKTsKK30KKworc3RhdGljIGludAord2JjaXJfc3VzcGVuZChzdHJ1Y3QgcG5wX2RldiAqZGV2aWNlLCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJd2JjaXJfc2h1dGRvd24oZGV2aWNlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3diY2lyX2luaXRfaHcoc3RydWN0IHdiY2lyX2RhdGEgKmRhdGEpCit7CisJdTggdG1wOworCisJLyogRGlzYWJsZSBpbnRlcnJ1cHRzICovCisJd2JjaXJfc2VsZWN0X2JhbmsoZGF0YSwgV0JDSVJfQkFOS18wKTsKKwlvdXRiKFdCQ0lSX0lSUV9OT05FLCBkYXRhLT5zYmFzZSArIFdCQ0lSX1JFR19TUDNfSUVSKTsKKworCS8qIFNldCBQUk9UX1NFTCwgUlhfSU5WLCBDbGVhciBDRUlSX0VOIChuZWVkZWQgZm9yIHRoZSBsZWQpICovCisJdG1wID0gcHJvdG9jb2wgPDwgNDsKKwlpZiAoaW52ZXJ0KQorCQl0bXAgfD0gMHgwODsKKwlvdXRiKHRtcCwgZGF0YS0+d2Jhc2UgKyBXQkNJUl9SRUdfV0NFSVJfQ1RMKTsKKworCS8qIENsZWFyIHN0YXR1cyBiaXRzIE5FQ19SRVAsIEJVRkYsIE1TR19FTkQsIE1BVENIICovCisJd2JjaXJfc2V0X2JpdHMoZGF0YS0+d2Jhc2UgKyBXQkNJUl9SRUdfV0NFSVJfU1RTLCAweDE3LCAweDE3KTsKKworCS8qIENsZWFyIEJVRkZfRU4sIENsZWFyIEVORF9FTiwgQ2xlYXIgTUFUQ0hfRU4gKi8KKwl3YmNpcl9zZXRfYml0cyhkYXRhLT53YmFzZSArIFdCQ0lSX1JFR19XQ0VJUl9FVl9FTiwgMHgwMCwgMHgwNyk7CisKKwkvKiBTZXQgUkM1IGNlbGwgdGltZSB0byBjb3JyZXNwb25kIHRvIDM2IGtIeiAqLworCXdiY2lyX3NldF9iaXRzKGRhdGEtPndiYXNlICsgV0JDSVJfUkVHX1dDRUlSX0NGRzEsIDB4NEEsIDB4N0YpOworCisJLyogU2V0IElSVFhfSU5WICovCisJaWYgKGludmVydCkKKwkJb3V0YigweDA0LCBkYXRhLT5lYmFzZSArIFdCQ0lSX1JFR19FQ0VJUl9DQ1RMKTsKKwllbHNlCisJCW91dGIoMHgwMCwgZGF0YS0+ZWJhc2UgKyBXQkNJUl9SRUdfRUNFSVJfQ0NUTCk7CisKKwkvKgorCSAqIENsZWFyIElSIExFRCwgc2V0IFNQMyBjbG9jayB0byAyNE1oegorCSAqIHNldCBTUDNfSVJSWF9TVyB0byBiaW5hcnkgMDEsIGhlbHBmdWxseSBub3QgZG9jdW1lbnRlZAorCSAqLworCW91dGIoMHgxMCwgZGF0YS0+ZWJhc2UgKyBXQkNJUl9SRUdfRUNFSVJfQ1RTKTsKKworCS8qIEVuYWJsZSBleHRlbmRlZCBtb2RlICovCisJd2JjaXJfc2VsZWN0X2JhbmsoZGF0YSwgV0JDSVJfQkFOS18yKTsKKwlvdXRiKFdCQ0lSX0VYVF9FTkFCTEUsIGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19FWENSMSk7CisKKwkvKgorCSAqIENvbmZpZ3VyZSBiYXVkIGdlbmVyYXRvciwgSVIgZGF0YSB3aWxsIGJlIHNhbXBsZWQgYXQKKwkgKiBhIGJpdHJhdGUgb2Y6ICgyNE1oeiAqIHByZXNjYWxlcikgLyAoZGl2aXNvciAqIDE2KS4KKwkgKgorCSAqIFRoZSBFQ0lSIHJlZ2lzdGVycyBpbmNsdWRlIGEgZmxhZyB0byBjaGFuZ2UgdGhlCisJICogMjRNaHogY2xvY2sgZnJlcSB0byA0OE1oei4KKwkgKgorCSAqIEl0J3Mgbm90IGRvY3VtZW50ZWQgaW4gdGhlIHNwZWNzLCBidXQgZmlmbyBsZXZlbHMKKwkgKiBvdGhlciB0aGFuIDE2IHNlZW1zIHRvIGJlIHVuc3VwcG9ydGVkLgorCSAqLworCisJLyogcHJlc2NhbGVyIDEuMCwgdHgvcnggZmlmbyBsdmwgMTYgKi8KKwlvdXRiKDB4MzAsIGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19FWENSMik7CisKKwkvKiBTZXQgYmF1ZCBkaXZpc29yIHRvIGdlbmVyYXRlIG9uZSBieXRlIHBlciBiaXQvY2VsbCAqLworCXN3aXRjaCAocHJvdG9jb2wpIHsKKwljYXNlIElSX1BST1RPQ09MX1JDNToKKwkJb3V0YigweEE3LCBkYXRhLT5zYmFzZSArIFdCQ0lSX1JFR19TUDNfQkdETCk7CisJCWJyZWFrOworCWNhc2UgSVJfUFJPVE9DT0xfUkM2OgorCQlvdXRiKDB4NTMsIGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19CR0RMKTsKKwkJYnJlYWs7CisJY2FzZSBJUl9QUk9UT0NPTF9ORUM6CisJCW91dGIoMHg2OSwgZGF0YS0+c2Jhc2UgKyBXQkNJUl9SRUdfU1AzX0JHREwpOworCQlicmVhazsKKwl9CisJb3V0YigweDAwLCBkYXRhLT5zYmFzZSArIFdCQ0lSX1JFR19TUDNfQkdESCk7CisKKwkvKiBTZXQgQ0VJUiBtb2RlICovCisJd2JjaXJfc2VsZWN0X2JhbmsoZGF0YSwgV0JDSVJfQkFOS18wKTsKKwlvdXRiKDB4QzAsIGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19NQ1IpOworCWluYihkYXRhLT5zYmFzZSArIFdCQ0lSX1JFR19TUDNfTFNSKTsgLyogQ2xlYXIgTFNSICovCisJaW5iKGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19NU1IpOyAvKiBDbGVhciBNU1IgKi8KKworCS8qIERpc2FibGUgUlggZGVtb2QsIHJ1bi1sZW5ndGggZW5jb2RpbmcvZGVjb2RpbmcsIHNldCBmcmVxIHNwYW4gKi8KKwl3YmNpcl9zZWxlY3RfYmFuayhkYXRhLCBXQkNJUl9CQU5LXzcpOworCW91dGIoMHgxMCwgZGF0YS0+c2Jhc2UgKyBXQkNJUl9SRUdfU1AzX1JDQ0ZHKTsKKworCS8qIERpc2FibGUgdGltZXIgKi8KKwl3YmNpcl9zZWxlY3RfYmFuayhkYXRhLCBXQkNJUl9CQU5LXzQpOworCW91dGIoMHgwMCwgZGF0YS0+c2Jhc2UgKyBXQkNJUl9SRUdfU1AzX0lSQ1IxKTsKKworCS8qIEVuYWJsZSBNU1IgaW50ZXJydXB0LCBDbGVhciBBVVhfSVJYICovCisJd2JjaXJfc2VsZWN0X2JhbmsoZGF0YSwgV0JDSVJfQkFOS181KTsKKwlvdXRiKDB4MDAsIGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19JUkNSMik7CisKKwkvKiBEaXNhYmxlIENSQyAqLworCXdiY2lyX3NlbGVjdF9iYW5rKGRhdGEsIFdCQ0lSX0JBTktfNik7CisJb3V0YigweDIwLCBkYXRhLT5zYmFzZSArIFdCQ0lSX1JFR19TUDNfSVJDUjMpOworCisJLyogU2V0IFJYL1RYIChkZSltb2R1bGF0aW9uIGZyZXEsIG5vdCByZWFsbHkgdXNlZCAqLworCXdiY2lyX3NlbGVjdF9iYW5rKGRhdGEsIFdCQ0lSX0JBTktfNyk7CisJb3V0YigweEYyLCBkYXRhLT5zYmFzZSArIFdCQ0lSX1JFR19TUDNfSVJSWERDKTsKKwlvdXRiKDB4NjksIGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19JUlRYTUMpOworCisJLyogU2V0IGludmVydCBhbmQgcGluIGRpcmVjdGlvbiAqLworCWlmIChpbnZlcnQpCisJCW91dGIoMHgxMCwgZGF0YS0+c2Jhc2UgKyBXQkNJUl9SRUdfU1AzX0lSQ0ZHNCk7CisJZWxzZQorCQlvdXRiKDB4MDAsIGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19JUkNGRzQpOworCisJLyogU2V0IEZJRk8gdGhyZXNob2xkcyAoUlggPSA4LCBUWCA9IDMpLCByZXNldCBSWC9UWCAqLworCXdiY2lyX3NlbGVjdF9iYW5rKGRhdGEsIFdCQ0lSX0JBTktfMCk7CisJb3V0YigweDk3LCBkYXRhLT5zYmFzZSArIFdCQ0lSX1JFR19TUDNfRkNSKTsKKworCS8qIENsZWFyIEFVWCBzdGF0dXMgYml0cyAqLworCW91dGIoMHhFMCwgZGF0YS0+c2Jhc2UgKyBXQkNJUl9SRUdfU1AzX0FTQ1IpOworCisJLyogQ2xlYXIgSVIgZGVjb2Rpbmcgc3RhdGUgKi8KKwlkYXRhLT5pcmRhdGFfYWN0aXZlID0gZmFsc2U7CisJbGVkX3RyaWdnZXJfZXZlbnQoZGF0YS0+cnh0cmlnZ2VyLCBMRURfT0ZGKTsKKwlkYXRhLT5pcmRhdGFfZXJyb3IgPSBmYWxzZTsKKwlkYXRhLT5ldi5kdXJhdGlvbiA9IDA7CisJaXJfcmF3X2V2ZW50X3Jlc2V0KGRhdGEtPmRldik7CisJaXJfcmF3X2V2ZW50X2hhbmRsZShkYXRhLT5kZXYpOworCisJLyogRW5hYmxlIGludGVycnVwdHMgKi8KKwlvdXRiKFdCQ0lSX0lSUV9SWCB8IFdCQ0lSX0lSUV9FUlIsIGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19JRVIpOworfQorCitzdGF0aWMgaW50Cit3YmNpcl9yZXN1bWUoc3RydWN0IHBucF9kZXYgKmRldmljZSkKK3sKKwlzdHJ1Y3Qgd2JjaXJfZGF0YSAqZGF0YSA9IHBucF9nZXRfZHJ2ZGF0YShkZXZpY2UpOworCisJd2JjaXJfaW5pdF9odyhkYXRhKTsKKwllbmFibGVfaXJxKGRhdGEtPmlycSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQKK3diY2lyX3Byb2JlKHN0cnVjdCBwbnBfZGV2ICpkZXZpY2UsIGNvbnN0IHN0cnVjdCBwbnBfZGV2aWNlX2lkICpkZXZfaWQpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmRldmljZS0+ZGV2OworCXN0cnVjdCB3YmNpcl9kYXRhICpkYXRhOworCWludCBlcnI7CisKKwlpZiAoIShwbnBfcG9ydF9sZW4oZGV2aWNlLCAwKSA9PSBFSEZVTkNfSU9NRU1fTEVOICYmCisJICAgICAgcG5wX3BvcnRfbGVuKGRldmljZSwgMSkgPT0gV0FLRVVQX0lPTUVNX0xFTiAmJgorCSAgICAgIHBucF9wb3J0X2xlbihkZXZpY2UsIDIpID09IFNQX0lPTUVNX0xFTikpIHsKKwkJZGV2X2VycihkZXYsICJJbnZhbGlkIHJlc291cmNlc1xuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWRhdGEgPSBremFsbG9jKHNpemVvZigqZGF0YSksIEdGUF9LRVJORUwpOworCWlmICghZGF0YSkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGV4aXQ7CisJfQorCisJcG5wX3NldF9kcnZkYXRhKGRldmljZSwgZGF0YSk7CisKKwlzcGluX2xvY2tfaW5pdCgmZGF0YS0+c3BpbmxvY2spOworCWRhdGEtPmViYXNlID0gcG5wX3BvcnRfc3RhcnQoZGV2aWNlLCAwKTsKKwlkYXRhLT53YmFzZSA9IHBucF9wb3J0X3N0YXJ0KGRldmljZSwgMSk7CisJZGF0YS0+c2Jhc2UgPSBwbnBfcG9ydF9zdGFydChkZXZpY2UsIDIpOworCWRhdGEtPmlycSA9IHBucF9pcnEoZGV2aWNlLCAwKTsKKworCWlmIChkYXRhLT53YmFzZSA9PSAwIHx8IGRhdGEtPmViYXNlID09IDAgfHwKKwkgICAgZGF0YS0+c2Jhc2UgPT0gMCB8fCBkYXRhLT5pcnEgPT0gMCkgeworCQllcnIgPSAtRU5PREVWOworCQlkZXZfZXJyKGRldiwgIkludmFsaWQgcmVzb3VyY2VzXG4iKTsKKwkJZ290byBleGl0X2ZyZWVfZGF0YTsKKwl9CisKKwlkZXZfZGJnKCZkZXZpY2UtPmRldiwgIkZvdW5kIGRldmljZSAiCisJCSIodzogMHglbFgsIGU6IDB4JWxYLCBzOiAweCVsWCwgaTogJXUpXG4iLAorCQlkYXRhLT53YmFzZSwgZGF0YS0+ZWJhc2UsIGRhdGEtPnNiYXNlLCBkYXRhLT5pcnEpOworCisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihkYXRhLT53YmFzZSwgV0FLRVVQX0lPTUVNX0xFTiwgRFJWTkFNRSkpIHsKKwkJZGV2X2VycihkZXYsICJSZWdpb24gMHglbHgtMHglbHggYWxyZWFkeSBpbiB1c2UhXG4iLAorCQkJZGF0YS0+d2Jhc2UsIGRhdGEtPndiYXNlICsgV0FLRVVQX0lPTUVNX0xFTiAtIDEpOworCQllcnIgPSAtRUJVU1k7CisJCWdvdG8gZXhpdF9mcmVlX2RhdGE7CisJfQorCisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihkYXRhLT5lYmFzZSwgRUhGVU5DX0lPTUVNX0xFTiwgRFJWTkFNRSkpIHsKKwkJZGV2X2VycihkZXYsICJSZWdpb24gMHglbHgtMHglbHggYWxyZWFkeSBpbiB1c2UhXG4iLAorCQkJZGF0YS0+ZWJhc2UsIGRhdGEtPmViYXNlICsgRUhGVU5DX0lPTUVNX0xFTiAtIDEpOworCQllcnIgPSAtRUJVU1k7CisJCWdvdG8gZXhpdF9yZWxlYXNlX3diYXNlOworCX0KKworCWlmICghcmVxdWVzdF9yZWdpb24oZGF0YS0+c2Jhc2UsIFNQX0lPTUVNX0xFTiwgRFJWTkFNRSkpIHsKKwkJZGV2X2VycihkZXYsICJSZWdpb24gMHglbHgtMHglbHggYWxyZWFkeSBpbiB1c2UhXG4iLAorCQkJZGF0YS0+c2Jhc2UsIGRhdGEtPnNiYXNlICsgU1BfSU9NRU1fTEVOIC0gMSk7CisJCWVyciA9IC1FQlVTWTsKKwkJZ290byBleGl0X3JlbGVhc2VfZWJhc2U7CisJfQorCisJZXJyID0gcmVxdWVzdF9pcnEoZGF0YS0+aXJxLCB3YmNpcl9pcnFfaGFuZGxlciwKKwkJCSAgSVJRRl9ESVNBQkxFRCwgRFJWTkFNRSwgZGV2aWNlKTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGNsYWltIElSUSAldVxuIiwgZGF0YS0+aXJxKTsKKwkJZXJyID0gLUVCVVNZOworCQlnb3RvIGV4aXRfcmVsZWFzZV9zYmFzZTsKKwl9CisKKwlsZWRfdHJpZ2dlcl9yZWdpc3Rlcl9zaW1wbGUoImNpci10eCIsICZkYXRhLT50eHRyaWdnZXIpOworCWlmICghZGF0YS0+dHh0cmlnZ2VyKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXhpdF9mcmVlX2lycTsKKwl9CisKKwlsZWRfdHJpZ2dlcl9yZWdpc3Rlcl9zaW1wbGUoImNpci1yeCIsICZkYXRhLT5yeHRyaWdnZXIpOworCWlmICghZGF0YS0+cnh0cmlnZ2VyKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXhpdF91bnJlZ2lzdGVyX3R4dHJpZ2dlcjsKKwl9CisKKwlkYXRhLT5sZWQubmFtZSA9ICJjaXI6OmFjdGl2aXR5IjsKKwlkYXRhLT5sZWQuZGVmYXVsdF90cmlnZ2VyID0gImNpci1yeCI7CisJZGF0YS0+bGVkLmJyaWdodG5lc3Nfc2V0ID0gd2JjaXJfbGVkX2JyaWdodG5lc3Nfc2V0OworCWRhdGEtPmxlZC5icmlnaHRuZXNzX2dldCA9IHdiY2lyX2xlZF9icmlnaHRuZXNzX2dldDsKKwllcnIgPSBsZWRfY2xhc3NkZXZfcmVnaXN0ZXIoJmRldmljZS0+ZGV2LCAmZGF0YS0+bGVkKTsKKwlpZiAoZXJyKQorCQlnb3RvIGV4aXRfdW5yZWdpc3Rlcl9yeHRyaWdnZXI7CisKKwlkYXRhLT5kZXYgPSByY19hbGxvY2F0ZV9kZXZpY2UoKTsKKwlpZiAoIWRhdGEtPmRldikgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGV4aXRfdW5yZWdpc3Rlcl9sZWQ7CisJfQorCisJZGF0YS0+ZGV2LT5kcml2ZXJfbmFtZSA9IFdCQ0lSX05BTUU7CisJZGF0YS0+ZGV2LT5pbnB1dF9uYW1lID0gV0JDSVJfTkFNRTsKKwlkYXRhLT5kZXYtPmlucHV0X3BoeXMgPSAid2JjaXIvY2lyMCI7CisJZGF0YS0+ZGV2LT5pbnB1dF9pZC5idXN0eXBlID0gQlVTX0hPU1Q7CisJZGF0YS0+ZGV2LT5pbnB1dF9pZC52ZW5kb3IgPSBQQ0lfVkVORE9SX0lEX1dJTkJPTkQ7CisJZGF0YS0+ZGV2LT5pbnB1dF9pZC5wcm9kdWN0ID0gV0JDSVJfSURfRkFNSUxZOworCWRhdGEtPmRldi0+aW5wdXRfaWQudmVyc2lvbiA9IFdCQ0lSX0lEX0NISVA7CisJZGF0YS0+ZGV2LT5wcml2ID0gZGF0YTsKKwlkYXRhLT5kZXYtPmRldi5wYXJlbnQgPSAmZGV2aWNlLT5kZXY7CisKKwllcnIgPSByY19yZWdpc3Rlcl9kZXZpY2UoZGF0YS0+ZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIGV4aXRfZnJlZV9yYzsKKworCWRldmljZV9pbml0X3dha2V1cCgmZGV2aWNlLT5kZXYsIDEpOworCisJd2JjaXJfaW5pdF9odyhkYXRhKTsKKworCXJldHVybiAwOworCitleGl0X2ZyZWVfcmM6CisJcmNfZnJlZV9kZXZpY2UoZGF0YS0+ZGV2KTsKK2V4aXRfdW5yZWdpc3Rlcl9sZWQ6CisJbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoJmRhdGEtPmxlZCk7CitleGl0X3VucmVnaXN0ZXJfcnh0cmlnZ2VyOgorCWxlZF90cmlnZ2VyX3VucmVnaXN0ZXJfc2ltcGxlKGRhdGEtPnJ4dHJpZ2dlcik7CitleGl0X3VucmVnaXN0ZXJfdHh0cmlnZ2VyOgorCWxlZF90cmlnZ2VyX3VucmVnaXN0ZXJfc2ltcGxlKGRhdGEtPnR4dHJpZ2dlcik7CitleGl0X2ZyZWVfaXJxOgorCWZyZWVfaXJxKGRhdGEtPmlycSwgZGV2aWNlKTsKK2V4aXRfcmVsZWFzZV9zYmFzZToKKwlyZWxlYXNlX3JlZ2lvbihkYXRhLT5zYmFzZSwgU1BfSU9NRU1fTEVOKTsKK2V4aXRfcmVsZWFzZV9lYmFzZToKKwlyZWxlYXNlX3JlZ2lvbihkYXRhLT5lYmFzZSwgRUhGVU5DX0lPTUVNX0xFTik7CitleGl0X3JlbGVhc2Vfd2Jhc2U6CisJcmVsZWFzZV9yZWdpb24oZGF0YS0+d2Jhc2UsIFdBS0VVUF9JT01FTV9MRU4pOworZXhpdF9mcmVlX2RhdGE6CisJa2ZyZWUoZGF0YSk7CisJcG5wX3NldF9kcnZkYXRhKGRldmljZSwgTlVMTCk7CitleGl0OgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdAord2JjaXJfcmVtb3ZlKHN0cnVjdCBwbnBfZGV2ICpkZXZpY2UpCit7CisJc3RydWN0IHdiY2lyX2RhdGEgKmRhdGEgPSBwbnBfZ2V0X2RydmRhdGEoZGV2aWNlKTsKKworCS8qIERpc2FibGUgaW50ZXJydXB0cyAqLworCXdiY2lyX3NlbGVjdF9iYW5rKGRhdGEsIFdCQ0lSX0JBTktfMCk7CisJb3V0YihXQkNJUl9JUlFfTk9ORSwgZGF0YS0+c2Jhc2UgKyBXQkNJUl9SRUdfU1AzX0lFUik7CisKKwlmcmVlX2lycShkYXRhLT5pcnEsIGRldmljZSk7CisKKwkvKiBDbGVhciBzdGF0dXMgYml0cyBORUNfUkVQLCBCVUZGLCBNU0dfRU5ELCBNQVRDSCAqLworCXdiY2lyX3NldF9iaXRzKGRhdGEtPndiYXNlICsgV0JDSVJfUkVHX1dDRUlSX1NUUywgMHgxNywgMHgxNyk7CisKKwkvKiBDbGVhciBDRUlSX0VOICovCisJd2JjaXJfc2V0X2JpdHMoZGF0YS0+d2Jhc2UgKyBXQkNJUl9SRUdfV0NFSVJfQ1RMLCAweDAwLCAweDAxKTsKKworCS8qIENsZWFyIEJVRkZfRU4sIEVORF9FTiwgTUFUQ0hfRU4gKi8KKwl3YmNpcl9zZXRfYml0cyhkYXRhLT53YmFzZSArIFdCQ0lSX1JFR19XQ0VJUl9FVl9FTiwgMHgwMCwgMHgwNyk7CisKKwlyY191bnJlZ2lzdGVyX2RldmljZShkYXRhLT5kZXYpOworCisJbGVkX3RyaWdnZXJfdW5yZWdpc3Rlcl9zaW1wbGUoZGF0YS0+cnh0cmlnZ2VyKTsKKwlsZWRfdHJpZ2dlcl91bnJlZ2lzdGVyX3NpbXBsZShkYXRhLT50eHRyaWdnZXIpOworCWxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKCZkYXRhLT5sZWQpOworCisJLyogVGhpcyBpcyBvayBzaW5jZSAmZGF0YS0+bGVkIGlzbid0IGFjdHVhbGx5IHVzZWQgKi8KKwl3YmNpcl9sZWRfYnJpZ2h0bmVzc19zZXQoJmRhdGEtPmxlZCwgTEVEX09GRik7CisKKwlyZWxlYXNlX3JlZ2lvbihkYXRhLT53YmFzZSwgV0FLRVVQX0lPTUVNX0xFTik7CisJcmVsZWFzZV9yZWdpb24oZGF0YS0+ZWJhc2UsIEVIRlVOQ19JT01FTV9MRU4pOworCXJlbGVhc2VfcmVnaW9uKGRhdGEtPnNiYXNlLCBTUF9JT01FTV9MRU4pOworCisJa2ZyZWUoZGF0YSk7CisKKwlwbnBfc2V0X2RydmRhdGEoZGV2aWNlLCBOVUxMKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBwbnBfZGV2aWNlX2lkIHdiY2lyX2lkc1tdID0geworCXsgIldFQzEwMjIiLCAwIH0sCisJeyAiIiwgMCB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShwbnAsIHdiY2lyX2lkcyk7CisKK3N0YXRpYyBzdHJ1Y3QgcG5wX2RyaXZlciB3YmNpcl9kcml2ZXIgPSB7CisJLm5hbWUgICAgID0gV0JDSVJfTkFNRSwKKwkuaWRfdGFibGUgPSB3YmNpcl9pZHMsCisJLnByb2JlICAgID0gd2JjaXJfcHJvYmUsCisJLnJlbW92ZSAgID0gX19kZXZleGl0X3Aod2JjaXJfcmVtb3ZlKSwKKwkuc3VzcGVuZCAgPSB3YmNpcl9zdXNwZW5kLAorCS5yZXN1bWUgICA9IHdiY2lyX3Jlc3VtZSwKKwkuc2h1dGRvd24gPSB3YmNpcl9zaHV0ZG93bgorfTsKKworc3RhdGljIGludCBfX2luaXQKK3diY2lyX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJc3dpdGNoIChwcm90b2NvbCkgeworCWNhc2UgSVJfUFJPVE9DT0xfUkM1OgorCWNhc2UgSVJfUFJPVE9DT0xfTkVDOgorCWNhc2UgSVJfUFJPVE9DT0xfUkM2OgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIgRFJWTkFNRSAiOiBJbnZhbGlkIHBvd2VyLW9uIHByb3RvY29sXG4iKTsKKwl9CisKKwlyZXQgPSBwbnBfcmVnaXN0ZXJfZHJpdmVyKCZ3YmNpcl9kcml2ZXIpOworCWlmIChyZXQpCisJCXByaW50ayhLRVJOX0VSUiBEUlZOQU1FICI6IFVuYWJsZSB0byByZWdpc3RlciBkcml2ZXJcbiIpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0Cit3YmNpcl9leGl0KHZvaWQpCit7CisJcG5wX3VucmVnaXN0ZXJfZHJpdmVyKCZ3YmNpcl9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh3YmNpcl9pbml0KTsKK21vZHVsZV9leGl0KHdiY2lyX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJEYXZpZCBI5HJkZW1hbiA8ZGF2aWRAaGFyZGVtYW4ubnU+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIldpbmJvbmQgU3VwZXJJL08gQ29uc3VtZXIgSVIgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL0tjb25maWcKaW5kZXggNjgzMGQyOC4uZWI4NzVhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vS2NvbmZpZwpAQCAtNywxMSArNyw2IEBACiAJZGVwZW5kcyBvbiBWSURFT19ERVYgJiYgVklERU9fVjRMMl9DT01NT04KIAlkZWZhdWx0IFZJREVPX0RFViAmJiBWSURFT19WNEwyX0NPTU1PTgogCi1jb25maWcgVklERU9fVjRMMQotCXRyaXN0YXRlCi0JZGVwZW5kcyBvbiBWSURFT19ERVYgJiYgVklERU9fVjRMMl9DT01NT04gJiYgVklERU9fQUxMT1dfVjRMMQotCWRlZmF1bHQgVklERU9fREVWICYmIFZJREVPX1Y0TDJfQ09NTU9OICYmIFZJREVPX0FMTE9XX1Y0TDEKLQogY29uZmlnIFZJREVPQlVGX0dFTgogCXRyaXN0YXRlCiAKQEAgLTk2LDcgKzkxLDcgQEAKIAogY29uZmlnIFZJREVPX0lSX0kyQwogCXRyaXN0YXRlICJJMkMgbW9kdWxlIGZvciBJUiIgaWYgIVZJREVPX0hFTFBFUl9DSElQU19BVVRPCi0JZGVwZW5kcyBvbiBJMkMgJiYgVklERU9fSVIKKwlkZXBlbmRzIG9uIEkyQyAmJiBSQ19DT1JFCiAJZGVmYXVsdCB5CiAJLS0taGVscC0tLQogCSAgTW9zdCBib2FyZHMgaGF2ZSBhbiBJUiBjaGlwIGRpcmVjdGx5IGNvbm5lY3RlZCB2aWEgR1BJTy4gSG93ZXZlciwKQEAgLTY2Niw2ICs2NjEsMTYgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGhleGl1bV9nZW1pbmkuCiAKK2NvbmZpZyBWSURFT19USU1CRVJEQUxFCisJdHJpc3RhdGUgIlN1cHBvcnQgZm9yIHRpbWJlcmRhbGUgVmlkZW8gSW4vTG9naVdJTiIKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgSTJDCisJc2VsZWN0IERNQV9FTkdJTkUKKwlzZWxlY3QgVElNQl9ETUEKKwlzZWxlY3QgVklERU9fQURWNzE4MAorCXNlbGVjdCBWSURFT0JVRl9ETUFfQ09OVElHCisJLS0taGVscC0tLQorCUFkZCBzdXBwb3J0IGZvciB0aGUgVmlkZW8gSW4gcGVyaXBoZXJpYWwgb2YgdGhlIHRpbWJlcmRhbGUgRlBHQS4KKwogc291cmNlICJkcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvS2NvbmZpZyIKIAogc291cmNlICJkcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvS2NvbmZpZyIKQEAgLTc4OSw2ICs3OTQsMTIgQEAKIAloZWxwCiAJICBUaGlzIGlzIGEgZ2VuZXJpYyBTb0MgY2FtZXJhIHBsYXRmb3JtIGRyaXZlciwgdXNlZnVsIGZvciB0ZXN0aW5nCiAKK2NvbmZpZyBTT0NfQ0FNRVJBX09WMjY0MAorCXRyaXN0YXRlICJvdjI2NDAgY2FtZXJhIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBTT0NfQ0FNRVJBICYmIEkyQworCWhlbHAKKwkgIFRoaXMgaXMgYSBvdjI2NDAgY2FtZXJhIGRyaXZlcgorCiBjb25maWcgU09DX0NBTUVSQV9PVjY2NTAKIAl0cmlzdGF0ZSAib3Y2NjUwIHNlbnNvciBzdXBwb3J0IgogCWRlcGVuZHMgb24gU09DX0NBTUVSQSAmJiBJMkMKQEAgLTkwNSwyMSArOTE2LDggQEAKIAogc291cmNlICJkcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi9LY29uZmlnIgogCi1zb3VyY2UgImRyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vS2NvbmZpZyIKLQogc291cmNlICJkcml2ZXJzL21lZGlhL3ZpZGVvL2V0NjF4MjUxL0tjb25maWciCiAKLWNvbmZpZyBVU0JfU0U0MDEKLQl0cmlzdGF0ZSAiVVNCIFNFNDAxIENhbWVyYSBzdXBwb3J0IgotCWRlcGVuZHMgb24gVklERU9fVjRMMQotCS0tLWhlbHAtLS0KLQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gY29ubmVjdCB0aGlzIHR5cGUgb2YgY2FtZXJhIHRvIHlvdXIKLQkgIGNvbXB1dGVyJ3MgVVNCIHBvcnQuIFNlZSA8ZmlsZTpEb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3NlNDAxLnR4dD4KLQkgIGZvciBtb3JlIGluZm9ybWF0aW9uIGFuZCBmb3IgYSBsaXN0IG9mIHN1cHBvcnRlZCBjYW1lcmFzLgotCi0JICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzZTQwMS4KLQogc291cmNlICJkcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvS2NvbmZpZyIKIAogc291cmNlICJkcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vTWFrZWZpbGUKaW5kZXggYWY3OWQ0Ny4uODFlMzhjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL01ha2VmaWxlCkBAIC0yMiwxMCArMjIsNiBAQAogCiBvYmotJChDT05GSUdfVklERU9fVjRMMl9DT01NT04pICs9IHY0bDItY29tbW9uLm8KIAotaWZlcSAoJChDT05GSUdfVklERU9fVjRMMV9DT01QQVQpLHkpCi0gIG9iai0kKENPTkZJR19WSURFT19ERVYpICs9IHY0bDEtY29tcGF0Lm8KLWVuZGlmCi0KICMgQWxsIGkyYyBtb2R1bGVzIG11c3QgY29tZSBmaXJzdDoKIAogb2JqLSQoQ09ORklHX1ZJREVPX1RVTkVSKSArPSB0dW5lci5vCkBAIC03OSw2ICs3NSw3IEBACiBvYmotJChDT05GSUdfU09DX0NBTUVSQV9NVDlUMDMxKQkrPSBtdDl0MDMxLm8KIG9iai0kKENPTkZJR19TT0NfQ0FNRVJBX01UOVQxMTIpCSs9IG10OXQxMTIubwogb2JqLSQoQ09ORklHX1NPQ19DQU1FUkFfTVQ5VjAyMikJKz0gbXQ5djAyMi5vCitvYmotJChDT05GSUdfU09DX0NBTUVSQV9PVjI2NDApCQkrPSBvdjI2NDAubwogb2JqLSQoQ09ORklHX1NPQ19DQU1FUkFfT1Y2NjUwKQkJKz0gb3Y2NjUwLm8KIG9iai0kKENPTkZJR19TT0NfQ0FNRVJBX09WNzcyWCkJCSs9IG92NzcyeC5vCiBvYmotJChDT05GSUdfU09DX0NBTUVSQV9PVjk2NDApCQkrPSBvdjk2NDAubwpAQCAtMTA2LDYgKzEwMyw3IEBACiBvYmotJChDT05GSUdfVklERU9fTVhCKSArPSBteGIubwogb2JqLSQoQ09ORklHX1ZJREVPX0hFWElVTV9PUklPTikgKz0gaGV4aXVtX29yaW9uLm8KIG9iai0kKENPTkZJR19WSURFT19IRVhJVU1fR0VNSU5JKSArPSBoZXhpdW1fZ2VtaW5pLm8KK29iai0kKENPTkZJR19WSURFT19USU1CRVJEQUxFKQkrPSB0aW1ibG9naXcubwogCiBvYmotJChDT05GSUdfVklERU9CVUZfR0VOKSArPSB2aWRlb2J1Zi1jb3JlLm8KIG9iai0kKENPTkZJR19WSURFT0JVRl9ETUFfU0cpICs9IHZpZGVvYnVmLWRtYS1zZy5vCkBAIC0xMjQsOCArMTIyLDYgQEAKIAogb2JqLSQoQ09ORklHX1ZJREVPX1ZJQV9DQU1FUkEpICs9IHZpYS1jYW1lcmEubwogCi1vYmotJChDT05GSUdfVVNCX0RBQlVTQikgICAgICAgICs9IGRhYnVzYi5vCi1vYmotJChDT05GSUdfVVNCX1NFNDAxKSAgICAgICAgICs9IHNlNDAxLm8KIG9iai0kKENPTkZJR19VU0JfWlIzNjRYWCkgICAgICAgKz0genIzNjR4eC5vCiBvYmotJChDT05GSUdfVVNCX1NUS1dFQkNBTSkgICAgICs9IHN0a3dlYmNhbS5vCiAKQEAgLTEzNiwxMCArMTMyLDYgQEAKIAogb2JqLSQoQ09ORklHX1ZJREVPX0hEUFZSKQkrPSBoZHB2ci8KIAotb2JqLSQoQ09ORklHX1VTQl9JQk1DQU0pICAgICAgICArPSB1c2J2aWRlby8KLW9iai0kKENPTkZJR19VU0JfS09OSUNBV0MpICAgICAgKz0gdXNidmlkZW8vCi1vYmotJChDT05GSUdfVVNCX1ZJQ0FNKSAgICAgICAgICs9IHVzYnZpZGVvLwotb2JqLSQoQ09ORklHX1VTQl9RVUlDS0NBTV9NRVNTRU5HRVIpCSs9IHVzYnZpZGVvLwogb2JqLSQoQ09ORklHX1VTQl9TMjI1NSkJCSs9IHMyMjU1ZHJ2Lm8KIAogb2JqLSQoQ09ORklHX1ZJREVPX0lWVFYpICs9IGl2dHYvCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjgtdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC12aWRlby5jCmluZGV4IDE2MmZkNWYuLmU0MWU0YWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC12aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC12aWRlby5jCkBAIC0xMjIsNiArMTIyLDcgQEAKIHsKIAlzdHJ1Y3QgYXUwODI4X2RtYXF1ZXVlICAqZG1hX3EgPSB1cmItPmNvbnRleHQ7CiAJc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IGNvbnRhaW5lcl9vZihkbWFfcSwgc3RydWN0IGF1MDgyOF9kZXYsIHZpZHEpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwogCWludCByYywgaTsKIAogCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKQEAgLTEzOSw5ICsxNDAsOSBAQAogCX0KIAogCS8qIENvcHkgZGF0YSBmcm9tIFVSQiAqLwotCXNwaW5fbG9jaygmZGV2LT5zbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c2xvY2ssIGZsYWdzKTsKIAlyYyA9IGRldi0+aXNvY19jdGwuaXNvY19jb3B5KGRldiwgdXJiKTsKLQlzcGluX3VubG9jaygmZGV2LT5zbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zbG9jaywgZmxhZ3MpOwogCiAJLyogUmVzZXQgdXJiIGJ1ZmZlcnMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgdXJiLT5udW1iZXJfb2ZfcGFja2V0czsgaSsrKSB7CkBAIC01NzYsNyArNTc3LDcgQEAKIAkJCXAgKz0gNDsKIAkJCWF1MDgyOF9pc29jZGJnKCJWaWRlbyBmcmFtZSAlc1xuIiwKIAkJCQkgICAgICAgKGZieXRlICYgMHg0MCkgPyAib2RkIiA6ICJldmVuIik7Ci0JCQlpZiAoIShmYnl0ZSAmIDB4NDApKSB7CisJCQlpZiAoZmJ5dGUgJiAweDQwKSB7CiAJCQkJLyogVkJJICovCiAJCQkJaWYgKHZiaV9idWYgIT0gTlVMTCkKIAkJCQkJdmJpX2J1ZmZlcl9maWxsZWQoZGV2LApAQCAtNTk3LDYgKzU5OCwxNSBAQAogCQkJCQlvdXRwID0gTlVMTDsKIAkJCQllbHNlCiAJCQkJCW91dHAgPSB2aWRlb2J1Zl90b192bWFsbG9jKCZidWYtPnZiKTsKKworCQkJCS8qIEFzIGxvbmcgYXMgaXNvYyB0cmFmZmljIGlzIGFycml2aW5nLCBrZWVwCisJCQkJICAgcmVzZXR0aW5nIHRoZSB0aW1lciAqLworCQkJCWlmIChkZXYtPnZpZF90aW1lb3V0X3J1bm5pbmcpCisJCQkJCW1vZF90aW1lcigmZGV2LT52aWRfdGltZW91dCwKKwkJCQkJCSAgamlmZmllcyArIChIWiAvIDEwKSk7CisJCQkJaWYgKGRldi0+dmJpX3RpbWVvdXRfcnVubmluZykKKwkJCQkJbW9kX3RpbWVyKCZkZXYtPnZiaV90aW1lb3V0LAorCQkJCQkJICBqaWZmaWVzICsgKEhaIC8gMTApKTsKIAkJCX0KIAogCQkJaWYgKGJ1ZiAhPSBOVUxMKSB7CkBAIC05MDcsNiArOTE3LDU3IEBACiAJfQogfQogCisvKiBUaGlzIGZ1bmN0aW9uIGVuc3VyZXMgdGhhdCB2aWRlbyBmcmFtZXMgY29udGludWUgdG8gYmUgZGVsaXZlcmVkIGV2ZW4gaWYKKyAgIHRoZSBJVFUtNjU2IGlucHV0IGlzbid0IHJlY2VpdmluZyBhbnkgZGF0YSAodGhlcmVieSBwcmV2ZW50aW5nIGFwcGxpY2F0aW9ucworICAgc3VjaCBhcyB0dnRpbWUgZnJvbSBoYW5naW5nKSAqLwordm9pZCBhdTA4MjhfdmlkX2J1ZmZlcl90aW1lb3V0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgYXUwODI4X2RldiAqZGV2ID0gKHN0cnVjdCBhdTA4MjhfZGV2ICopIGRhdGE7CisJc3RydWN0IGF1MDgyOF9kbWFxdWV1ZSAqZG1hX3EgPSAmZGV2LT52aWRxOworCXN0cnVjdCBhdTA4MjhfYnVmZmVyICpidWY7CisJdW5zaWduZWQgY2hhciAqdmlkX2RhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zbG9jaywgZmxhZ3MpOworCisJYnVmID0gZGV2LT5pc29jX2N0bC5idWY7CisJaWYgKGJ1ZiAhPSBOVUxMKSB7CisJCXZpZF9kYXRhID0gdmlkZW9idWZfdG9fdm1hbGxvYygmYnVmLT52Yik7CisJCW1lbXNldCh2aWRfZGF0YSwgMHgwMCwgYnVmLT52Yi5zaXplKTsgLyogQmxhbmsgZ3JlZW4gZnJhbWUgKi8KKwkJYnVmZmVyX2ZpbGxlZChkZXYsIGRtYV9xLCBidWYpOworCX0KKwlnZXRfbmV4dF9idWYoZG1hX3EsICZidWYpOworCisJaWYgKGRldi0+dmlkX3RpbWVvdXRfcnVubmluZyA9PSAxKQorCQltb2RfdGltZXIoJmRldi0+dmlkX3RpbWVvdXQsIGppZmZpZXMgKyAoSFogLyAxMCkpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zbG9jaywgZmxhZ3MpOworfQorCit2b2lkIGF1MDgyOF92YmlfYnVmZmVyX3RpbWVvdXQodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSAoc3RydWN0IGF1MDgyOF9kZXYgKikgZGF0YTsKKwlzdHJ1Y3QgYXUwODI4X2RtYXF1ZXVlICpkbWFfcSA9ICZkZXYtPnZiaXE7CisJc3RydWN0IGF1MDgyOF9idWZmZXIgKmJ1ZjsKKwl1bnNpZ25lZCBjaGFyICp2YmlfZGF0YTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNsb2NrLCBmbGFncyk7CisKKwlidWYgPSBkZXYtPmlzb2NfY3RsLnZiaV9idWY7CisJaWYgKGJ1ZiAhPSBOVUxMKSB7CisJCXZiaV9kYXRhID0gdmlkZW9idWZfdG9fdm1hbGxvYygmYnVmLT52Yik7CisJCW1lbXNldCh2YmlfZGF0YSwgMHgwMCwgYnVmLT52Yi5zaXplKTsKKwkJdmJpX2J1ZmZlcl9maWxsZWQoZGV2LCBkbWFfcSwgYnVmKTsKKwl9CisJdmJpX2dldF9uZXh0X2J1ZihkbWFfcSwgJmJ1Zik7CisKKwlpZiAoZGV2LT52YmlfdGltZW91dF9ydW5uaW5nID09IDEpCisJCW1vZF90aW1lcigmZGV2LT52YmlfdGltZW91dCwgamlmZmllcyArIChIWiAvIDEwKSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zbG9jaywgZmxhZ3MpOworfQorCisKIHN0YXRpYyBpbnQgYXUwODI4X3Y0bDJfb3BlbihzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKIAlpbnQgcmV0ID0gMDsKQEAgLTk3Niw3ICsxMDM3LDYgQEAKIAkJCQkgICAgVjRMMl9GSUVMRF9TRVFfVEIsCiAJCQkJICAgIHNpemVvZihzdHJ1Y3QgYXUwODI4X2J1ZmZlciksIGZoLCBOVUxMKTsKIAotCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtOTg3LDExICsxMDQ3LDE5IEBACiAJc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IGZoLT5kZXY7CiAKIAlpZiAocmVzX2NoZWNrKGZoLCBBVTA4MjhfUkVTT1VSQ0VfVklERU8pKSB7CisJCS8qIENhbmNlbCB0aW1lb3V0IHRocmVhZCBpbiBjYXNlIHRoZXkgZGlkbid0IGNhbGwgc3RyZWFtb2ZmICovCisJCWRldi0+dmlkX3RpbWVvdXRfcnVubmluZyA9IDA7CisJCWRlbF90aW1lcl9zeW5jKCZkZXYtPnZpZF90aW1lb3V0KTsKKwogCQl2aWRlb2J1Zl9zdG9wKCZmaC0+dmJfdmlkcSk7CiAJCXJlc19mcmVlKGZoLCBBVTA4MjhfUkVTT1VSQ0VfVklERU8pOwogCX0KIAogCWlmIChyZXNfY2hlY2soZmgsIEFVMDgyOF9SRVNPVVJDRV9WQkkpKSB7CisJCS8qIENhbmNlbCB0aW1lb3V0IHRocmVhZCBpbiBjYXNlIHRoZXkgZGlkbid0IGNhbGwgc3RyZWFtb2ZmICovCisJCWRldi0+dmJpX3RpbWVvdXRfcnVubmluZyA9IDA7CisJCWRlbF90aW1lcl9zeW5jKCZkZXYtPnZiaV90aW1lb3V0KTsKKwogCQl2aWRlb2J1Zl9zdG9wKCZmaC0+dmJfdmJpcSk7CiAJCXJlc19mcmVlKGZoLCBBVTA4MjhfUkVTT1VSQ0VfVkJJKTsKIAl9CkBAIC0xMDQ4LDYgKzExMTYsMTMgQEAKIAkJaWYgKCFyZXNfZ2V0KGZoLCBBVTA4MjhfUkVTT1VSQ0VfVkJJKSkKIAkJCXJldHVybiAtRUJVU1k7CiAKKwkJaWYgKGRldi0+dmJpX3RpbWVvdXRfcnVubmluZyA9PSAwKSB7CisJCQkvKiBIYW5kbGUgY2FzZSB3aGVyZSBjYWxsZXIgdHJpZXMgdG8gcmVhZCB3aXRob3V0CisJCQkgICBjYWxsaW5nIHN0cmVhbW9uIGZpcnN0ICovCisJCQlkZXYtPnZiaV90aW1lb3V0X3J1bm5pbmcgPSAxOworCQkJbW9kX3RpbWVyKCZkZXYtPnZiaV90aW1lb3V0LCBqaWZmaWVzICsgKEhaIC8gMTApKTsKKwkJfQorCiAJCXJldHVybiB2aWRlb2J1Zl9yZWFkX3N0cmVhbSgmZmgtPnZiX3ZiaXEsIGJ1ZiwgY291bnQsIHBvcywgMCwKIAkJCQkJICAgIGZpbHAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKIAl9CkBAIC0xNTc3LDEwICsxNjUyLDE1IEBACiAJCXY0bDJfZGV2aWNlX2NhbGxfYWxsKCZkZXYtPnY0bDJfZGV2LCAwLCB2aWRlbywgc19zdHJlYW0sIDEpOwogCX0KIAotCWlmIChmaC0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJaWYgKGZoLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkgewogCQlyYyA9IHZpZGVvYnVmX3N0cmVhbW9uKCZmaC0+dmJfdmlkcSk7Ci0JZWxzZSBpZiAoZmgtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRSkKKwkJZGV2LT52aWRfdGltZW91dF9ydW5uaW5nID0gMTsKKwkJbW9kX3RpbWVyKCZkZXYtPnZpZF90aW1lb3V0LCBqaWZmaWVzICsgKEhaIC8gMTApKTsKKwl9IGVsc2UgaWYgKGZoLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkUpIHsKIAkJcmMgPSB2aWRlb2J1Zl9zdHJlYW1vbigmZmgtPnZiX3ZiaXEpOworCQlkZXYtPnZiaV90aW1lb3V0X3J1bm5pbmcgPSAxOworCQltb2RfdGltZXIoJmRldi0+dmJpX3RpbWVvdXQsIGppZmZpZXMgKyAoSFogLyAxMCkpOworCX0KIAogCXJldHVybiByYzsKIH0KQEAgLTE2MDcsNiArMTY4Nyw5IEBACiAJCWZoLCB0eXBlLCBmaC0+cmVzb3VyY2VzLCBkZXYtPnJlc291cmNlcyk7CiAKIAlpZiAoZmgtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKSB7CisJCWRldi0+dmlkX3RpbWVvdXRfcnVubmluZyA9IDA7CisJCWRlbF90aW1lcl9zeW5jKCZkZXYtPnZpZF90aW1lb3V0KTsKKwogCQl2NGwyX2RldmljZV9jYWxsX2FsbCgmZGV2LT52NGwyX2RldiwgMCwgdmlkZW8sIHNfc3RyZWFtLCAwKTsKIAkJcmMgPSBhdTA4Mjhfc3RyZWFtX2ludGVycnVwdChkZXYpOwogCQlpZiAocmMgIT0gMCkKQEAgLTE2MjEsNiArMTcwNCw5IEBACiAJCXZpZGVvYnVmX3N0cmVhbW9mZigmZmgtPnZiX3ZpZHEpOwogCQlyZXNfZnJlZShmaCwgQVUwODI4X1JFU09VUkNFX1ZJREVPKTsKIAl9IGVsc2UgaWYgKGZoLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkUpIHsKKwkJZGV2LT52YmlfdGltZW91dF9ydW5uaW5nID0gMDsKKwkJZGVsX3RpbWVyX3N5bmMoJmRldi0+dmJpX3RpbWVvdXQpOworCiAJCXZpZGVvYnVmX3N0cmVhbW9mZigmZmgtPnZiX3ZiaXEpOwogCQlyZXNfZnJlZShmaCwgQVUwODI4X1JFU09VUkNFX1ZCSSk7CiAJfQpAQCAtMTcyMywxNSArMTgwOSw2IEBACiAJcmV0dXJuIHZpZGVvYnVmX2RxYnVmKCZmaC0+dmJfdmlkcSwgYiwgZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOwogfQogCi0jaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCi1zdGF0aWMgaW50IHZpZGlvY2dtYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdmlkZW9fbWJ1ZiAqbWJ1ZikKLXsKLQlzdHJ1Y3QgYXUwODI4X2ZoICpmaCA9IHByaXY7Ci0KLQlyZXR1cm4gdmlkZW9idWZfY2dtYnVmKCZmaC0+dmJfdmlkcSwgbWJ1ZiwgOCk7Ci19Ci0jZW5kaWYKLQogc3RhdGljIHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyBhdTA4MjhfdjRsX2ZvcHMgPSB7CiAJLm93bmVyICAgICAgPSBUSElTX01PRFVMRSwKIAkub3BlbiAgICAgICA9IGF1MDgyOF92NGwyX29wZW4sCkBAIC0xNzc1LDkgKzE4NTIsNiBAQAogCS52aWRpb2Nfc19yZWdpc3RlciAgICAgICAgICA9IHZpZGlvY19zX3JlZ2lzdGVyLAogI2VuZGlmCiAJLnZpZGlvY19nX2NoaXBfaWRlbnQgICAgICAgID0gdmlkaW9jX2dfY2hpcF9pZGVudCwKLSNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKLQkudmlkaW9jZ21idWYgICAgICAgICAgICAgICAgPSB2aWRpb2NnbWJ1ZiwKLSNlbmRpZgogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2aWRlb19kZXZpY2UgYXUwODI4X3ZpZGVvX3RlbXBsYXRlID0gewpAQCAtMTg0MCw2ICsxOTE0LDE0IEBACiAJSU5JVF9MSVNUX0hFQUQoJmRldi0+dmJpcS5hY3RpdmUpOwogCUlOSVRfTElTVF9IRUFEKCZkZXYtPnZiaXEucXVldWVkKTsKIAorCWRldi0+dmlkX3RpbWVvdXQuZnVuY3Rpb24gPSBhdTA4MjhfdmlkX2J1ZmZlcl90aW1lb3V0OworCWRldi0+dmlkX3RpbWVvdXQuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBkZXY7CisJaW5pdF90aW1lcigmZGV2LT52aWRfdGltZW91dCk7CisKKwlkZXYtPnZiaV90aW1lb3V0LmZ1bmN0aW9uID0gYXUwODI4X3ZiaV9idWZmZXJfdGltZW91dDsKKwlkZXYtPnZiaV90aW1lb3V0LmRhdGEgPSAodW5zaWduZWQgbG9uZykgZGV2OworCWluaXRfdGltZXIoJmRldi0+dmJpX3RpbWVvdXQpOworCiAJZGV2LT53aWR0aCA9IE5UU0NfU1REX1c7CiAJZGV2LT5oZWlnaHQgPSBOVFNDX1NURF9IOwogCWRldi0+ZmllbGRfc2l6ZSA9IGRldi0+d2lkdGggKiBkZXYtPmhlaWdodDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LmgKaW5kZXggOTkwNWJjNC4uOWNkZTM1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LmgKQEAgLTUzLDcgKzUzLDcgQEAKIAogLyogRGVmaW5hdGlvbiBmb3IgQVUwODI4IFVTQiB0cmFuc2ZlciAqLwogI2RlZmluZSBBVTA4MjhfTUFYX0lTT19CVUZTICAgIDEyICAvKiBtYXliZSByZXNpemUgdGhpcyB2YWx1ZSBpbiB0aGUgZnV0dXJlICovCi0jZGVmaW5lIEFVMDgyOF9JU09fUEFDS0VUU19QRVJfVVJCICAgICAgMTAKKyNkZWZpbmUgQVUwODI4X0lTT19QQUNLRVRTX1BFUl9VUkIgICAgICAxMjgKIAogI2RlZmluZSBBVTA4MjhfTUlOX0JVRiA0CiAjZGVmaW5lIEFVMDgyOF9ERUZfQlVGIDgKQEAgLTIwNCw2ICsyMDQsMTAgQEAKIAl1bnNpZ25lZCBpbnQgcmVzb3VyY2VzOwkvKiByZXNvdXJjZXMgaW4gdXNlICovCiAJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldjsKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2YmlfZGV2OworCXN0cnVjdCB0aW1lcl9saXN0IHZpZF90aW1lb3V0OworCWludCB2aWRfdGltZW91dF9ydW5uaW5nOworCXN0cnVjdCB0aW1lcl9saXN0IHZiaV90aW1lb3V0OworCWludCB2YmlfdGltZW91dF9ydW5uaW5nOwogCWludCB3aWR0aDsKIAlpbnQgaGVpZ2h0OwogCWludCB2Ymlfd2lkdGg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L0tjb25maWcKaW5kZXggMWE0YTg5Zi4uN2RhNWMyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvS2NvbmZpZwpAQCAtMSwxMCArMSwxMCBAQAogY29uZmlnIFZJREVPX0JUODQ4CiAJdHJpc3RhdGUgIkJUODQ4IFZpZGVvIEZvciBMaW51eCIKLQlkZXBlbmRzIG9uIFZJREVPX0RFViAmJiBQQ0kgJiYgSTJDICYmIFZJREVPX1Y0TDIgJiYgSU5QVVQKKwlkZXBlbmRzIG9uIFZJREVPX0RFViAmJiBQQ0kgJiYgSTJDICYmIFZJREVPX1Y0TDIKIAlzZWxlY3QgSTJDX0FMR09CSVQKIAlzZWxlY3QgVklERU9fQlRDWAogCXNlbGVjdCBWSURFT0JVRl9ETUFfU0cKLQlkZXBlbmRzIG9uIFZJREVPX0lSCisJZGVwZW5kcyBvbiBSQ19DT1JFCiAJc2VsZWN0IFZJREVPX1RVTkVSCiAJc2VsZWN0IFZJREVPX1RWRUVQUk9NCiAJc2VsZWN0IFZJREVPX01TUDM0MDAgaWYgVklERU9fSEVMUEVSX0NISVBTX0FVVE8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1kcml2ZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1kcml2ZXIuYwppbmRleCAwOTAyZWMwLi45MTM5OWM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtZHJpdmVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWRyaXZlci5jCkBAIC01NSw3ICs1NSw3IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogCi0jaW5jbHVkZSA8bWVkaWEvcmRzLmg+CisjaW5jbHVkZSA8bWVkaWEvc2FhNjU4OC5oPgogCiAKIHVuc2lnbmVkIGludCBidHR2X251bTsJCQkvKiBudW1iZXIgb2YgQnQ4NDhzIGluIHVzZSAqLwpAQCAtMTg5LDggKzE4OSwxNCBAQAogCUlOSVRfV09SSygmZGV2LT5yZXF1ZXN0X21vZHVsZV93aywgcmVxdWVzdF9tb2R1bGVfYXN5bmMpOwogCXNjaGVkdWxlX3dvcmsoJmRldi0+cmVxdWVzdF9tb2R1bGVfd2spOwogfQorCitzdGF0aWMgdm9pZCBmbHVzaF9yZXF1ZXN0X21vZHVsZXMoc3RydWN0IGJ0dHYgKmRldikKK3sKKwlmbHVzaF93b3JrX3N5bmMoJmRldi0+cmVxdWVzdF9tb2R1bGVfd2spOworfQogI2Vsc2UKICNkZWZpbmUgcmVxdWVzdF9tb2R1bGVzKGRldikKKyNkZWZpbmUgZmx1c2hfcmVxdWVzdF9tb2R1bGVzKGRldikKICNlbmRpZiAvKiBDT05GSUdfTU9EVUxFUyAqLwogCiAKQEAgLTI1OTcsMzEgKzI2MDMsNiBAQAogCXJldHVybiBzZXR1cF93aW5kb3dfbG9jayhmaCwgYnR2LCAmZi0+Zm10LndpbiwgMSk7CiB9CiAKLSNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKLXN0YXRpYyBpbnQgdmlkaW9jZ21idWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2aWRlb19tYnVmICptYnVmKQotewotCWludCByZXR2YWw7Ci0JdW5zaWduZWQgaW50IGk7Ci0Jc3RydWN0IGJ0dHZfZmggKmZoID0gcHJpdjsKLQotCXJldHZhbCA9IF9fdmlkZW9idWZfbW1hcF9zZXR1cCgmZmgtPmNhcCwgZ2J1ZmZlcnMsIGdidWZzaXplLAotCQkJCSAgICAgVjRMMl9NRU1PUllfTU1BUCk7Ci0JaWYgKHJldHZhbCA8IDApIHsKLQkJcmV0dXJuIHJldHZhbDsKLQl9Ci0KLQlnYnVmZmVycyA9IHJldHZhbDsKLQltZW1zZXQobWJ1ZiwgMCwgc2l6ZW9mKCptYnVmKSk7Ci0JbWJ1Zi0+ZnJhbWVzID0gZ2J1ZmZlcnM7Ci0JbWJ1Zi0+c2l6ZSAgID0gZ2J1ZmZlcnMgKiBnYnVmc2l6ZTsKLQotCWZvciAoaSA9IDA7IGkgPCBnYnVmZmVyczsgaSsrKQotCQltYnVmLT5vZmZzZXRzW2ldID0gaSAqIGdidWZzaXplOwotCi0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQogc3RhdGljIGludCBidHR2X3F1ZXJ5Y2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICpjYXApCiB7CkBAIC0zMzU0LDkgKzMzMzUsNiBAQAogCS52aWRpb2Nfc3RyZWFtb2ZmICAgICAgICAgICAgICAgPSBidHR2X3N0cmVhbW9mZiwKIAkudmlkaW9jX2dfdHVuZXIgICAgICAgICAgICAgICAgID0gYnR0dl9nX3R1bmVyLAogCS52aWRpb2Nfc190dW5lciAgICAgICAgICAgICAgICAgPSBidHR2X3NfdHVuZXIsCi0jaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCi0JLnZpZGlvY2dtYnVmICAgICAgICAgICAgICAgICAgICA9IHZpZGlvY2dtYnVmLAotI2VuZGlmCiAJLnZpZGlvY19nX2Nyb3AgICAgICAgICAgICAgICAgICA9IGJ0dHZfZ19jcm9wLAogCS52aWRpb2Nfc19jcm9wICAgICAgICAgICAgICAgICAgPSBidHR2X3NfY3JvcCwKIAkudmlkaW9jX2dfZmJ1ZiAgICAgICAgICAgICAgICAgID0gYnR0dl9nX2ZidWYsCkBAIC0zNDE2LDcgKzMzOTQsNyBAQAogewogCXN0cnVjdCBidHR2X2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgYnR0diAqYnR2ID0gZmgtPmJ0djsKLQlzdHJ1Y3QgcmRzX2NvbW1hbmQgY21kOworCXN0cnVjdCBzYWE2NTg4X2NvbW1hbmQgY21kOwogCiAJdjRsMl9wcmlvX2Nsb3NlKCZidHYtPnByaW8sIGZoLT5wcmlvKTsKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOwpAQCAtMzQyNCw3ICszNDAyLDcgQEAKIAogCWJ0di0+cmFkaW9fdXNlci0tOwogCi0JYnR0dl9jYWxsX2FsbChidHYsIGNvcmUsIGlvY3RsLCBSRFNfQ01EX0NMT1NFLCAmY21kKTsKKwlidHR2X2NhbGxfYWxsKGJ0diwgY29yZSwgaW9jdGwsIFNBQTY1ODhfQ01EX0NMT1NFLCAmY21kKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzU1MSwxMyArMzUyOSwxMyBAQAogewogCXN0cnVjdCBidHR2X2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgYnR0diAqYnR2ID0gZmgtPmJ0djsKLQlzdHJ1Y3QgcmRzX2NvbW1hbmQgY21kOworCXN0cnVjdCBzYWE2NTg4X2NvbW1hbmQgY21kOwogCWNtZC5ibG9ja19jb3VudCA9IGNvdW50LzM7CiAJY21kLmJ1ZmZlciA9IGRhdGE7CiAJY21kLmluc3RhbmNlID0gZmlsZTsKIAljbWQucmVzdWx0ID0gLUVOT0RFVjsKIAotCWJ0dHZfY2FsbF9hbGwoYnR2LCBjb3JlLCBpb2N0bCwgUkRTX0NNRF9SRUFELCAmY21kKTsKKwlidHR2X2NhbGxfYWxsKGJ0diwgY29yZSwgaW9jdGwsIFNBQTY1ODhfQ01EX1JFQUQsICZjbWQpOwogCiAJcmV0dXJuIGNtZC5yZXN1bHQ7CiB9CkBAIC0zNTY2LDExICszNTQ0LDExIEBACiB7CiAJc3RydWN0IGJ0dHZfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBidHR2ICpidHYgPSBmaC0+YnR2OwotCXN0cnVjdCByZHNfY29tbWFuZCBjbWQ7CisJc3RydWN0IHNhYTY1ODhfY29tbWFuZCBjbWQ7CiAJY21kLmluc3RhbmNlID0gZmlsZTsKIAljbWQuZXZlbnRfbGlzdCA9IHdhaXQ7CiAJY21kLnJlc3VsdCA9IC1FTk9ERVY7Ci0JYnR0dl9jYWxsX2FsbChidHYsIGNvcmUsIGlvY3RsLCBSRFNfQ01EX1BPTEwsICZjbWQpOworCWJ0dHZfY2FsbF9hbGwoYnR2LCBjb3JlLCBpb2N0bCwgU0FBNjU4OF9DTURfUE9MTCwgJmNtZCk7CiAKIAlyZXR1cm4gY21kLnJlc3VsdDsKIH0KQEAgLTQwNDEsOSArNDAxOSw2IEBACiAKIAlidHY9KHN0cnVjdCBidHR2ICopZGV2X2lkOwogCi0JaWYgKGJ0di0+Y3VzdG9tX2lycSkKLQkJaGFuZGxlZCA9IGJ0di0+Y3VzdG9tX2lycShidHYpOwotCiAJY291bnQ9MDsKIAl3aGlsZSAoMSkgewogCQkvKiBnZXQvY2xlYXIgaW50ZXJydXB0IHN0YXR1cyBiaXRzICovCkBAIC00MDc5LDcgKzQwNTQsNiBAQAogCQkJYnR2LT5maWVsZF9jb3VudCsrOwogCiAJCWlmICgoYXN0YXQgJiBCVDg0OF9JTlRfR1BJTlQpICYmIGJ0di0+cmVtb3RlKSB7Ci0JCQl3YWtlX3VwKCZidHYtPmdwaW9xKTsKIAkJCWJ0dHZfaW5wdXRfaXJxKGJ0dik7CiAJCX0KIApAQCAtNDI4NCw3ICs0MjU4LDYgQEAKIAltdXRleF9pbml0KCZidHYtPmxvY2spOwogCXNwaW5fbG9ja19pbml0KCZidHYtPnNfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmJ0di0+Z3Bpb19sb2NrKTsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZidHYtPmdwaW9xKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZidHYtPmkyY19xdWV1ZSk7CiAJSU5JVF9MSVNUX0hFQUQoJmJ0di0+Yy5zdWJzKTsKIAlJTklUX0xJU1RfSEVBRCgmYnR2LT5jYXB0dXJlKTsKQEAgLTQ0NjIsNiArNDQzNSw5IEBACiAJaWYgKGJ0dHZfdmVyYm9zZSkKIAkJcHJpbnRrKCJidHR2JWQ6IHVubG9hZGluZ1xuIixidHYtPmMubnIpOwogCisJaWYgKGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0uaGFzX2R2YikKKwkJZmx1c2hfcmVxdWVzdF9tb2R1bGVzKGJ0dik7CisKIAkvKiBzaHV0ZG93biBldmVyeXRoaW5nIChETUErSVJRcykgKi8KIAlidGFuZCh+MTUsIEJUODQ4X0dQSU9fRE1BX0NUTCk7CiAJYnR3cml0ZSgwLCBCVDg0OF9JTlRfTUFTSyk7CkBAIC00NDcyLDcgKzQ0NDgsNiBAQAogCiAJLyogdGVsbCBncGlvIG1vZHVsZXMgd2UgYXJlIGxlYXZpbmcgLi4uICovCiAJYnR2LT5zaHV0ZG93bj0xOwotCXdha2VfdXAoJmJ0di0+Z3Bpb3EpOwogCWJ0dHZfaW5wdXRfZmluaShidHYpOwogCWJ0dHZfc3ViX2RlbF9kZXZpY2VzKCZidHYtPmMpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtaW5wdXQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1pbnB1dC5jCmluZGV4IDZiZjA1YTcuLmU4YjY0YmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1pbnB1dC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1pbnB1dC5jCkBAIC0zMSwxNSArMzEsOSBAQAogCiBzdGF0aWMgaW50IGlyX2RlYnVnOwogbW9kdWxlX3BhcmFtKGlyX2RlYnVnLCBpbnQsIDA2NDQpOwotc3RhdGljIGludCByZXBlYXRfZGVsYXkgPSA1MDA7Ci1tb2R1bGVfcGFyYW0ocmVwZWF0X2RlbGF5LCBpbnQsIDA2NDQpOwotc3RhdGljIGludCByZXBlYXRfcGVyaW9kID0gMzM7Ci1tb2R1bGVfcGFyYW0ocmVwZWF0X3BlcmlvZCwgaW50LCAwNjQ0KTsKIAogc3RhdGljIGludCBpcl9yYzVfcmVtb3RlX2dhcCA9IDg4NTsKIG1vZHVsZV9wYXJhbShpcl9yYzVfcmVtb3RlX2dhcCwgaW50LCAwNjQ0KTsKLXN0YXRpYyBpbnQgaXJfcmM1X2tleV90aW1lb3V0ID0gMjAwOwotbW9kdWxlX3BhcmFtKGlyX3JjNV9rZXlfdGltZW91dCwgaW50LCAwNjQ0KTsKIAogI3VuZGVmIGRwcmludGsKICNkZWZpbmUgZHByaW50ayhhcmcuLi4pIGRvIHsJXApAQCAtNTUsNyArNDksNyBAQAogCiBzdGF0aWMgdm9pZCBpcl9oYW5kbGVfa2V5KHN0cnVjdCBidHR2ICpidHYpCiB7Ci0Jc3RydWN0IGNhcmRfaXIgKmlyID0gYnR2LT5yZW1vdGU7CisJc3RydWN0IGJ0dHZfaXIgKmlyID0gYnR2LT5yZW1vdGU7CiAJdTMyIGdwaW8sZGF0YTsKIAogCS8qIHJlYWQgZ3BpbyB2YWx1ZSAqLwpAQCAtNzQsMjMgKzY4LDIyIEBACiAJCShncGlvICYgaXItPm1hc2tfa2V5ZG93bikgPyAiIGRvd24iIDogIiIsCiAJCShncGlvICYgaXItPm1hc2tfa2V5dXApICAgPyAiIHVwIiAgIDogIiIpOwogCi0JaWYgKChpci0+bWFza19rZXlkb3duICAmJiAgKDAgIT0gKGdwaW8gJiBpci0+bWFza19rZXlkb3duKSkpIHx8Ci0JICAgIChpci0+bWFza19rZXl1cCAgICAmJiAgKDAgPT0gKGdwaW8gJiBpci0+bWFza19rZXl1cCkpKSkgewotCQlpcl9pbnB1dF9rZXlkb3duKGlyLT5kZXYsICZpci0+aXIsIGRhdGEpOworCWlmICgoaXItPm1hc2tfa2V5ZG93biAmJiAoZ3BpbyAmIGlyLT5tYXNrX2tleWRvd24pKSB8fAorCSAgICAoaXItPm1hc2tfa2V5dXAgICAmJiAhKGdwaW8gJiBpci0+bWFza19rZXl1cCkpKSB7CisJCXJjX2tleWRvd25fbm90aW1lb3V0KGlyLT5kZXYsIGRhdGEsIDApOwogCX0gZWxzZSB7CiAJCS8qIEhBQ0s6IFByb2JhYmx5LCBpci0+bWFza19rZXlkb3duIGlzIG1pc3NpbmcKIAkJICAgZm9yIHRoaXMgYm9hcmQgKi8KIAkJaWYgKGJ0di0+Yy50eXBlID09IEJUVFZfQk9BUkRfV0lORkFTVDIwMDApCi0JCQlpcl9pbnB1dF9rZXlkb3duKGlyLT5kZXYsICZpci0+aXIsIGRhdGEpOworCQkJcmNfa2V5ZG93bl9ub3RpbWVvdXQoaXItPmRldiwgZGF0YSwgMCk7CiAKLQkJaXJfaW5wdXRfbm9rZXkoaXItPmRldiwmaXItPmlyKTsKKwkJcmNfa2V5dXAoaXItPmRldik7CiAJfQotCiB9CiAKIHN0YXRpYyB2b2lkIGlyX2VubHR2X2hhbmRsZV9rZXkoc3RydWN0IGJ0dHYgKmJ0dikKIHsKLQlzdHJ1Y3QgY2FyZF9pciAqaXIgPSBidHYtPnJlbW90ZTsKKwlzdHJ1Y3QgYnR0dl9pciAqaXIgPSBidHYtPnJlbW90ZTsKIAl1MzIgZ3BpbywgZGF0YSwga2V5dXA7CiAKIAkvKiByZWFkIGdwaW8gdmFsdWUgKi8KQEAgLTEwNyw5ICsxMDAsOSBAQAogCQkJZ3BpbywgZGF0YSwKIAkJCShncGlvICYgaXItPm1hc2tfa2V5dXApID8gIiB1cCIgOiAidXAvZG93biIpOwogCi0JCWlyX2lucHV0X2tleWRvd24oaXItPmRldiwgJmlyLT5pciwgZGF0YSk7CisJCXJjX2tleWRvd25fbm90aW1lb3V0KGlyLT5kZXYsIGRhdGEsIDApOwogCQlpZiAoa2V5dXApCi0JCQlpcl9pbnB1dF9ub2tleShpci0+ZGV2LCAmaXItPmlyKTsKKwkJCXJjX2tleXVwKGlyLT5kZXYpOwogCX0gZWxzZSB7CiAJCWlmICgoaXItPmxhc3RfZ3BpbyAmIDEgPDwgMzEpID09IGtleXVwKQogCQkJcmV0dXJuOwpAQCAtMTE5LDI2ICsxMTIsMzAgQEAKIAkJCShncGlvICYgaXItPm1hc2tfa2V5dXApID8gIiB1cCIgOiAiZG93biIpOwogCiAJCWlmIChrZXl1cCkKLQkJCWlyX2lucHV0X25va2V5KGlyLT5kZXYsICZpci0+aXIpOworCQkJcmNfa2V5dXAoaXItPmRldik7CiAJCWVsc2UKLQkJCWlyX2lucHV0X2tleWRvd24oaXItPmRldiwgJmlyLT5pciwgZGF0YSk7CisJCQlyY19rZXlkb3duX25vdGltZW91dChpci0+ZGV2LCBkYXRhLCAwKTsKIAl9CiAKIAlpci0+bGFzdF9ncGlvID0gZGF0YSB8IGtleXVwOwogfQogCitzdGF0aWMgaW50IGJ0dHZfcmM1X2lycShzdHJ1Y3QgYnR0diAqYnR2KTsKKwogdm9pZCBidHR2X2lucHV0X2lycShzdHJ1Y3QgYnR0diAqYnR2KQogewotCXN0cnVjdCBjYXJkX2lyICppciA9IGJ0di0+cmVtb3RlOworCXN0cnVjdCBidHR2X2lyICppciA9IGJ0di0+cmVtb3RlOwogCi0JaWYgKCFpci0+cG9sbGluZykKKwlpZiAoaXItPnJjNV9ncGlvKQorCQlidHR2X3JjNV9pcnEoYnR2KTsKKwllbHNlIGlmICghaXItPnBvbGxpbmcpCiAJCWlyX2hhbmRsZV9rZXkoYnR2KTsKIH0KIAogc3RhdGljIHZvaWQgYnR0dl9pbnB1dF90aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJc3RydWN0IGJ0dHYgKmJ0diA9IChzdHJ1Y3QgYnR0diopZGF0YTsKLQlzdHJ1Y3QgY2FyZF9pciAqaXIgPSBidHYtPnJlbW90ZTsKKwlzdHJ1Y3QgYnR0dl9pciAqaXIgPSBidHYtPnJlbW90ZTsKIAogCWlmIChidHYtPmMudHlwZSA9PSBCVFRWX0JPQVJEX0VOTFRWX0ZNXzIpCiAJCWlyX2VubHR2X2hhbmRsZV9rZXkoYnR2KTsKQEAgLTE0NywxMSArMTQ0LDEwOSBAQAogCW1vZF90aW1lcigmaXItPnRpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhpci0+cG9sbGluZykpOwogfQogCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqIEZJWE1FOiBOZWJ1bGEgZGlnaSB1c2VzIHRoZSBsZWdhY3kgd2F5IHRvIGRlY29kZSBSQzUsIGluc3RlYWQgb2YgcmVseWluZworICogb24gdGhlIHJjLWNvcmUgd2F5LiBBcyB3ZSBuZWVkIHRvIGJlIHN1cmUgdGhhdCBib3RoIElSUSB0cmFuc2l0aW9ucyBhcmUKKyAqIHByb3Blcmx5IHRyaWdnZXJlZCwgQmV0dGVyIHRvIHRvdWNoIGl0IG9ubHkgd2l0aCB0aGlzIGhhcmR3YXJlIGZvcgorICogdGVzdGluZy4KKyAqLworCisjZGVmaW5lIFJDNV9TVEFSVCh4KQkoKCh4KSA+PiAxMikgJiAzKQorI2RlZmluZSBSQzVfVE9HR0xFKHgpCSgoKHgpID4+IDExKSAmIDEpCisjZGVmaW5lIFJDNV9BRERSKHgpCSgoKHgpID4+IDYpICYgMzEpCisjZGVmaW5lIFJDNV9JTlNUUih4KQkoKHgpICYgNjMpCisKKy8qIGRlY29kZSByYXcgYml0IHBhdHRlcm4gdG8gUkM1IGNvZGUgKi8KK3N0YXRpYyB1MzIgYnR0dl9yYzVfZGVjb2RlKHVuc2lnbmVkIGludCBjb2RlKQoreworCXVuc2lnbmVkIGludCBvcmdfY29kZSA9IGNvZGU7CisJdW5zaWduZWQgaW50IHBhaXI7CisJdW5zaWduZWQgaW50IHJjNSA9IDA7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMTQ7ICsraSkgeworCQlwYWlyID0gY29kZSAmIDB4MzsKKwkJY29kZSA+Pj0gMjsKKworCQlyYzUgPDw9IDE7CisJCXN3aXRjaCAocGFpcikgeworCQljYXNlIDA6CisJCWNhc2UgMjoKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlyYzUgfD0gMTsKKwkJYnJlYWs7CisJCWNhc2UgMzoKKwkJCWRwcmludGsoS0VSTl9JTkZPIERFVk5BTUUgIjpyYzVfZGVjb2RlKCV4KSBiYWQgY29kZVxuIiwKKwkJCQlvcmdfY29kZSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlkcHJpbnRrKEtFUk5fSU5GTyBERVZOQU1FICI6IgorCQkiY29kZT0leCwgcmM1PSV4LCBzdGFydD0leCwgdG9nZ2xlPSV4LCBhZGRyZXNzPSV4LCAiCisJCSJpbnN0cj0leFxuIiwgcmM1LCBvcmdfY29kZSwgUkM1X1NUQVJUKHJjNSksCisJCVJDNV9UT0dHTEUocmM1KSwgUkM1X0FERFIocmM1KSwgUkM1X0lOU1RSKHJjNSkpOworCXJldHVybiByYzU7Cit9CisKK3N0YXRpYyB2b2lkIGJ0dHZfcmM1X3RpbWVyX2VuZCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IGJ0dHZfaXIgKmlyID0gKHN0cnVjdCBidHR2X2lyICopZGF0YTsKKwlzdHJ1Y3QgdGltZXZhbCB0djsKKwl1bnNpZ25lZCBsb25nIGN1cnJlbnRfamlmZmllczsKKwl1MzIgZ2FwOworCXUzMiByYzUgPSAwOworCisJLyogZ2V0IHRpbWUgKi8KKwljdXJyZW50X2ppZmZpZXMgPSBqaWZmaWVzOworCWRvX2dldHRpbWVvZmRheSgmdHYpOworCisJLyogYXZvaWQgb3ZlcmZsb3cgd2l0aCBnYXAgPjFzICovCisJaWYgKHR2LnR2X3NlYyAtIGlyLT5iYXNlX3RpbWUudHZfc2VjID4gMSkgeworCQlnYXAgPSAyMDAwMDA7CisJfSBlbHNlIHsKKwkJZ2FwID0gMTAwMDAwMCAqICh0di50dl9zZWMgLSBpci0+YmFzZV90aW1lLnR2X3NlYykgKworCQkgICAgdHYudHZfdXNlYyAtIGlyLT5iYXNlX3RpbWUudHZfdXNlYzsKKwl9CisKKwkvKiBzaWduYWwgd2UncmUgcmVhZHkgdG8gc3RhcnQgYSBuZXcgY29kZSAqLworCWlyLT5hY3RpdmUgPSBmYWxzZTsKKworCS8qIEFsbG93IHNvbWUgdGltZXIgaml0dGVyIChSQzUgaXMgfjI0bXMgYW55d2F5IHNvIHRoaXMgaXMgb2spICovCisJaWYgKGdhcCA8IDI4MDAwKSB7CisJCWRwcmludGsoS0VSTl9JTkZPIERFVk5BTUUgIjogc3B1cmlvdXMgdGltZXJfZW5kXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChpci0+bGFzdF9iaXQgPCAyMCkgeworCQkvKiBpZ25vcmUgc3B1cmlvdXMgY29kZXMgKGNhdXNlZCBieSBsaWdodC9vdGhlciByZW1vdGVzKSAqLworCQlkcHJpbnRrKEtFUk5fSU5GTyBERVZOQU1FICI6IHNob3J0IGNvZGU6ICV4XG4iLCBpci0+Y29kZSk7CisJfSBlbHNlIHsKKwkJaXItPmNvZGUgPSAoaXItPmNvZGUgPDwgaXItPnNoaWZ0X2J5KSB8IDE7CisJCXJjNSA9IGJ0dHZfcmM1X2RlY29kZShpci0+Y29kZSk7CisKKwkJLyogdHdvIHN0YXJ0IGJpdHM/ICovCisJCWlmIChSQzVfU1RBUlQocmM1KSAhPSBpci0+c3RhcnQpIHsKKwkJCXByaW50ayhLRVJOX0lORk8gREVWTkFNRSAiOiIKKwkJCSAgICAgICAiIHJjNSBzdGFydCBiaXRzIGludmFsaWQ6ICV1XG4iLCBSQzVfU1RBUlQocmM1KSk7CisKKwkJCS8qIHJpZ2h0IGFkZHJlc3M/ICovCisJCX0gZWxzZSBpZiAoUkM1X0FERFIocmM1KSA9PSBpci0+YWRkcikgeworCQkJdTMyIHRvZ2dsZSA9IFJDNV9UT0dHTEUocmM1KTsKKwkJCXUzMiBpbnN0ciA9IFJDNV9JTlNUUihyYzUpOworCisJCQkvKiBHb29kIGNvZGUgKi8KKwkJCXJjX2tleWRvd24oaXItPmRldiwgaW5zdHIsIHRvZ2dsZSk7CisJCQlkcHJpbnRrKEtFUk5fSU5GTyBERVZOQU1FICI6IgorCQkJCSIgaW5zdHJ1Y3Rpb24gJXgsIHRvZ2dsZSAleFxuIiwKKwkJCQlpbnN0ciwgdG9nZ2xlKTsKKwkJfQorCX0KK30KIAogc3RhdGljIGludCBidHR2X3JjNV9pcnEoc3RydWN0IGJ0dHYgKmJ0dikKIHsKLQlzdHJ1Y3QgY2FyZF9pciAqaXIgPSBidHYtPnJlbW90ZTsKKwlzdHJ1Y3QgYnR0dl9pciAqaXIgPSBidHYtPnJlbW90ZTsKIAlzdHJ1Y3QgdGltZXZhbCB0djsKIAl1MzIgZ3BpbzsKIAl1MzIgZ2FwOwpAQCAtMTYwLDEwICsyNTUsNiBAQAogCS8qIHJlYWQgZ3BpbyBwb3J0ICovCiAJZ3BpbyA9IGJ0dHZfZ3Bpb19yZWFkKCZidHYtPmMpOwogCi0JLyogcmVtb3RlIElSUT8gKi8KLQlpZiAoIShncGlvICYgMHgyMCkpCi0JCXJldHVybiAwOwotCiAJLyogZ2V0IHRpbWUgb2YgYml0ICovCiAJY3VycmVudF9qaWZmaWVzID0gamlmZmllczsKIAlkb19nZXR0aW1lb2ZkYXkoJnR2KTsKQEAgLTE3Niw2ICsyNjcsMTMgQEAKIAkJICAgIHR2LnR2X3VzZWMgLSBpci0+YmFzZV90aW1lLnR2X3VzZWM7CiAJfQogCisJZHByaW50ayhLRVJOX0lORk8gREVWTkFNRSAiOiBSQzUgSVJROiBnYXAgJWQgdXMgZm9yICVzXG4iLAorCQlnYXAsIChncGlvICYgMHgyMCkgPyAibWFyayIgOiAic3BhY2UiKTsKKworCS8qIHJlbW90ZSBJUlE/ICovCisJaWYgKCEoZ3BpbyAmIDB4MjApKQorCQlyZXR1cm4gMDsKKwogCS8qIGFjdGl2ZSBjb2RlID0+IGFkZCBiaXQgKi8KIAlpZiAoaXItPmFjdGl2ZSkgewogCQkvKiBvbmx5IGlmIGluIHRoZSBjb2RlIChvdGhlcndpc2Ugc3B1cmlvdXMgSVJRIG9yIHRpbWVyCkBAIC0xODcsMTMgKzI4NSwxMiBAQAogCQl9CiAJCS8qIHN0YXJ0aW5nIG5ldyBjb2RlICovCiAJfSBlbHNlIHsKLQkJaXItPmFjdGl2ZSA9IDE7CisJCWlyLT5hY3RpdmUgPSB0cnVlOwogCQlpci0+Y29kZSA9IDA7CiAJCWlyLT5iYXNlX3RpbWUgPSB0djsKIAkJaXItPmxhc3RfYml0ID0gMDsKIAotCQltb2RfdGltZXIoJmlyLT50aW1lcl9lbmQsCi0JCQkgIGN1cnJlbnRfamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMzApKTsKKwkJbW9kX3RpbWVyKCZpci0+dGltZXIsIGN1cnJlbnRfamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMzApKTsKIAl9CiAKIAkvKiB0b2dnbGUgR1BJTyBwaW4gNCB0byByZXNldCB0aGUgaXJxICovCkBAIC0yMDQsNyArMzAxLDcgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgdm9pZCBidHR2X2lyX3N0YXJ0KHN0cnVjdCBidHR2ICpidHYsIHN0cnVjdCBjYXJkX2lyICppcikKK3N0YXRpYyB2b2lkIGJ0dHZfaXJfc3RhcnQoc3RydWN0IGJ0dHYgKmJ0diwgc3RydWN0IGJ0dHZfaXIgKmlyKQogewogCWlmIChpci0+cG9sbGluZykgewogCQlzZXR1cF90aW1lcigmaXItPnRpbWVyLCBidHR2X2lucHV0X3RpbWVyLCAodW5zaWduZWQgbG9uZylidHYpOwpAQCAtMjEyLDMzICszMDksMjMgQEAKIAkJYWRkX3RpbWVyKCZpci0+dGltZXIpOwogCX0gZWxzZSBpZiAoaXItPnJjNV9ncGlvKSB7CiAJCS8qIHNldCB0aW1lcl9lbmQgZm9yIGNvZGUgY29tcGxldGlvbiAqLwotCQlpbml0X3RpbWVyKCZpci0+dGltZXJfZW5kKTsKLQkJaXItPnRpbWVyX2VuZC5mdW5jdGlvbiA9IGlyX3JjNV90aW1lcl9lbmQ7Ci0JCWlyLT50aW1lcl9lbmQuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWlyOwotCi0JCWluaXRfdGltZXIoJmlyLT50aW1lcl9rZXl1cCk7Ci0JCWlyLT50aW1lcl9rZXl1cC5mdW5jdGlvbiA9IGlyX3JjNV90aW1lcl9rZXl1cDsKLQkJaXItPnRpbWVyX2tleXVwLmRhdGEgPSAodW5zaWduZWQgbG9uZylpcjsKKwkJc2V0dXBfdGltZXIoJmlyLT50aW1lciwgYnR0dl9yYzVfdGltZXJfZW5kLCAodW5zaWduZWQgbG9uZylpcik7CiAJCWlyLT5zaGlmdF9ieSA9IDE7CiAJCWlyLT5zdGFydCA9IDM7CiAJCWlyLT5hZGRyID0gMHgwOwotCQlpci0+cmM1X2tleV90aW1lb3V0ID0gaXJfcmM1X2tleV90aW1lb3V0OwogCQlpci0+cmM1X3JlbW90ZV9nYXAgPSBpcl9yYzVfcmVtb3RlX2dhcDsKIAl9CiB9CiAKIHN0YXRpYyB2b2lkIGJ0dHZfaXJfc3RvcChzdHJ1Y3QgYnR0diAqYnR2KQogewotCWlmIChidHYtPnJlbW90ZS0+cG9sbGluZykgeworCWlmIChidHYtPnJlbW90ZS0+cG9sbGluZykKIAkJZGVsX3RpbWVyX3N5bmMoJmJ0di0+cmVtb3RlLT50aW1lcik7Ci0JCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7Ci0JfQogCiAJaWYgKGJ0di0+cmVtb3RlLT5yYzVfZ3BpbykgewogCQl1MzIgZ3BpbzsKIAotCQlkZWxfdGltZXJfc3luYygmYnR2LT5yZW1vdGUtPnRpbWVyX2VuZCk7Ci0JCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisJCWRlbF90aW1lcl9zeW5jKCZidHYtPnJlbW90ZS0+dGltZXIpOwogCiAJCWdwaW8gPSBidHR2X2dwaW9fcmVhZCgmYnR2LT5jKTsKIAkJYnR0dl9ncGlvX3dyaXRlKCZidHYtPmMsIGdwaW8gJiB+KDEgPDwgNCkpOwpAQCAtMjY0LDYgKzM1MSwxOCBAQAogCQlyZXR1cm4gMDsKIAlkcHJpbnRrKEtFUk5fSU5GTyBERVZOQU1FICI6IGtleSAlMDJ4XG4iLCBiKTsKIAorCS8qCisJICogTk9URToKKwkgKiBsaXJjX2kyYyBtYXBzIHRoZSBwdjk1MSBjb2RlIGFzOgorCSAqCWFkZHIgPSAweDYxRDYKKwkgKiAJY21kID0gYml0X3JldmVyc2UgKGIpCisJICogU28sIGl0IHNlZW1zIHRoYXQgdGhpcyBkZXZpY2UgdXNlcyBORUMgZXh0ZW5kZWQKKwkgKiBJIGRlY2lkZWQgdG8gbm90IGZpeCB0aGUgdGFibGUsIGR1ZSB0byB0d28gcmVhc29uczoKKwkgKiAJMSkgV2l0aG91dCB0aGUgYWN0dWFsIGRldmljZSwgdGhpcyBpcyBvbmx5IGEgZ3Vlc3M7CisJICogCTIpIEFzIHRoZSBhZGRyIGlzIG5vdCByZXBvcnRlZCB2aWEgSTJDLCBub3IgY2FuIGJlIGNoYW5nZWQsCisJICogCSAgIHRoZSBkZXZpY2UgaXMgYm91bmQgdG8gdGhlIHZlbmRvci1wcm92aWRlZCBSQy4KKwkgKi8KKwogCSppcl9rZXkgPSBiOwogCSppcl9yYXcgPSBiOwogCXJldHVybiAxOwpAQCAtMjkwLDE2ICszODksMTUgQEAKIAkJYnR2LT5pbml0X2RhdGEubmFtZSA9ICJQVjk1MSI7CiAJCWJ0di0+aW5pdF9kYXRhLmdldF9rZXkgPSBnZXRfa2V5X3B2OTUxOwogCQlidHYtPmluaXRfZGF0YS5pcl9jb2RlcyA9IFJDX01BUF9QVjk1MTsKLQkJYnR2LT5pbml0X2RhdGEudHlwZSA9IElSX1RZUEVfT1RIRVI7CiAJCWluZm8uYWRkciA9IDB4NGI7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCS8qCiAJCSAqIFRoZSBleHRlcm5hbCBJUiByZWNlaXZlciBpcyBhdCBpMmMgYWRkcmVzcyAweDM0ICgweDM1IGZvcgotICAgICAgICAgICAgICAgICAqIHJlYWRzKS4gIEZ1dHVyZSBIYXVwcGF1Z2UgY2FyZHMgd2lsbCBoYXZlIGFuIGludGVybmFsCi0gICAgICAgICAgICAgICAgICogcmVjZWl2ZXIgYXQgMHgzMCAoMHgzMSBmb3IgcmVhZHMpLiAgSW4gdGhlb3J5LCBib3RoIGNhbiBiZQotICAgICAgICAgICAgICAgICAqIGZpdHRlZCwgYW5kIEhhdXBwYXVnZSBzdWdnZXN0IGFuIGV4dGVybmFsIG92ZXJyaWRlcyBhbgotICAgICAgICAgICAgICAgICAqIGludGVybmFsLgorCQkgKiByZWFkcykuICBGdXR1cmUgSGF1cHBhdWdlIGNhcmRzIHdpbGwgaGF2ZSBhbiBpbnRlcm5hbAorCQkgKiByZWNlaXZlciBhdCAweDMwICgweDMxIGZvciByZWFkcykuICBJbiB0aGVvcnksIGJvdGggY2FuIGJlCisJCSAqIGZpdHRlZCwgYW5kIEhhdXBwYXVnZSBzdWdnZXN0IGFuIGV4dGVybmFsIG92ZXJyaWRlcyBhbgorCQkgKiBpbnRlcm5hbC4KIAkJICogVGhhdCdzIHdoeSB3ZSBwcm9iZSAweDFhICh+MHgzNCkgZmlyc3QuIENCCiAJCSAqLwogCkBAIC0zMjQsMTggKzQyMiwxNyBAQAogCiBpbnQgYnR0dl9pbnB1dF9pbml0KHN0cnVjdCBidHR2ICpidHYpCiB7Ci0Jc3RydWN0IGNhcmRfaXIgKmlyOworCXN0cnVjdCBidHR2X2lyICppcjsKIAljaGFyICppcl9jb2RlcyA9IE5VTEw7Ci0Jc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OwotCXU2NCBpcl90eXBlID0gSVJfVFlQRV9PVEhFUjsKKwlzdHJ1Y3QgcmNfZGV2ICpyYzsKIAlpbnQgZXJyID0gLUVOT01FTTsKIAogCWlmICghYnR2LT5oYXNfcmVtb3RlKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCWlyID0ga3phbGxvYyhzaXplb2YoKmlyKSxHRlBfS0VSTkVMKTsKLQlpbnB1dF9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKLQlpZiAoIWlyIHx8ICFpbnB1dF9kZXYpCisJcmMgPSByY19hbGxvY2F0ZV9kZXZpY2UoKTsKKwlpZiAoIWlyIHx8ICFyYykKIAkJZ290byBlcnJfb3V0X2ZyZWU7CiAKIAkvKiBkZXRlY3QgJiBjb25maWd1cmUgKi8KQEAgLTM5OCw4ICs0OTUsNyBAQAogCQlicmVhazsKIAljYXNlIEJUVFZfQk9BUkRfTkVCVUxBX0RJR0lUVjoKIAkJaXJfY29kZXMgPSBSQ19NQVBfTkVCVUxBOwotCQlidHYtPmN1c3RvbV9pcnEgPSBidHR2X3JjNV9pcnE7Ci0JCWlyLT5yYzVfZ3BpbyA9IDE7CisJCWlyLT5yYzVfZ3BpbyA9IHRydWU7CiAJCWJyZWFrOwogCWNhc2UgQlRUVl9CT0FSRF9NQUNIVFZfTUFHSUNUVjoKIAkJaXJfY29kZXMgICAgICAgICA9IFJDX01BUF9BUEFDX1ZJRVdDT01QOwpAQCAtNDQxLDQ4ICs1MzcsNDMgQEAKIAl9CiAKIAkvKiBpbml0IGlucHV0IGRldmljZSAqLwotCWlyLT5kZXYgPSBpbnB1dF9kZXY7CisJaXItPmRldiA9IHJjOwogCiAJc25wcmludGYoaXItPm5hbWUsIHNpemVvZihpci0+bmFtZSksICJidHR2IElSIChjYXJkPSVkKSIsCiAJCSBidHYtPmMudHlwZSk7CiAJc25wcmludGYoaXItPnBoeXMsIHNpemVvZihpci0+cGh5cyksICJwY2ktJXMvaXIwIiwKIAkJIHBjaV9uYW1lKGJ0di0+Yy5wY2kpKTsKIAotCWVyciA9IGlyX2lucHV0X2luaXQoaW5wdXRfZGV2LCAmaXItPmlyLCBpcl90eXBlKTsKLQlpZiAoZXJyIDwgMCkKLQkJZ290byBlcnJfb3V0X2ZyZWU7Ci0KLQlpbnB1dF9kZXYtPm5hbWUgPSBpci0+bmFtZTsKLQlpbnB1dF9kZXYtPnBoeXMgPSBpci0+cGh5czsKLQlpbnB1dF9kZXYtPmlkLmJ1c3R5cGUgPSBCVVNfUENJOwotCWlucHV0X2Rldi0+aWQudmVyc2lvbiA9IDE7CisJcmMtPmlucHV0X25hbWUgPSBpci0+bmFtZTsKKwlyYy0+aW5wdXRfcGh5cyA9IGlyLT5waHlzOworCXJjLT5pbnB1dF9pZC5idXN0eXBlID0gQlVTX1BDSTsKKwlyYy0+aW5wdXRfaWQudmVyc2lvbiA9IDE7CiAJaWYgKGJ0di0+Yy5wY2ktPnN1YnN5c3RlbV92ZW5kb3IpIHsKLQkJaW5wdXRfZGV2LT5pZC52ZW5kb3IgID0gYnR2LT5jLnBjaS0+c3Vic3lzdGVtX3ZlbmRvcjsKLQkJaW5wdXRfZGV2LT5pZC5wcm9kdWN0ID0gYnR2LT5jLnBjaS0+c3Vic3lzdGVtX2RldmljZTsKKwkJcmMtPmlucHV0X2lkLnZlbmRvciAgPSBidHYtPmMucGNpLT5zdWJzeXN0ZW1fdmVuZG9yOworCQlyYy0+aW5wdXRfaWQucHJvZHVjdCA9IGJ0di0+Yy5wY2ktPnN1YnN5c3RlbV9kZXZpY2U7CiAJfSBlbHNlIHsKLQkJaW5wdXRfZGV2LT5pZC52ZW5kb3IgID0gYnR2LT5jLnBjaS0+dmVuZG9yOwotCQlpbnB1dF9kZXYtPmlkLnByb2R1Y3QgPSBidHYtPmMucGNpLT5kZXZpY2U7CisJCXJjLT5pbnB1dF9pZC52ZW5kb3IgID0gYnR2LT5jLnBjaS0+dmVuZG9yOworCQlyYy0+aW5wdXRfaWQucHJvZHVjdCA9IGJ0di0+Yy5wY2ktPmRldmljZTsKIAl9Ci0JaW5wdXRfZGV2LT5kZXYucGFyZW50ID0gJmJ0di0+Yy5wY2ktPmRldjsKKwlyYy0+ZGV2LnBhcmVudCA9ICZidHYtPmMucGNpLT5kZXY7CisJcmMtPm1hcF9uYW1lID0gaXJfY29kZXM7CisJcmMtPmRyaXZlcl9uYW1lID0gTU9EVUxFX05BTUU7CiAKIAlidHYtPnJlbW90ZSA9IGlyOwogCWJ0dHZfaXJfc3RhcnQoYnR2LCBpcik7CiAKIAkvKiBhbGwgZG9uZSAqLwotCWVyciA9IGlyX2lucHV0X3JlZ2lzdGVyKGJ0di0+cmVtb3RlLT5kZXYsIGlyX2NvZGVzLCBOVUxMLCBNT0RVTEVfTkFNRSk7CisJZXJyID0gcmNfcmVnaXN0ZXJfZGV2aWNlKHJjKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9vdXRfc3RvcDsKIAotCS8qIHRoZSByZW1vdGUgaXNuJ3QgYXMgYm91bmN5IGFzIGEga2V5Ym9hcmQgKi8KLQlpci0+ZGV2LT5yZXBbUkVQX0RFTEFZXSA9IHJlcGVhdF9kZWxheTsKLQlpci0+ZGV2LT5yZXBbUkVQX1BFUklPRF0gPSByZXBlYXRfcGVyaW9kOwotCiAJcmV0dXJuIDA7CiAKICBlcnJfb3V0X3N0b3A6CiAJYnR0dl9pcl9zdG9wKGJ0dik7CiAJYnR2LT5yZW1vdGUgPSBOVUxMOwogIGVycl9vdXRfZnJlZToKKwlyY19mcmVlX2RldmljZShyYyk7CiAJa2ZyZWUoaXIpOwogCXJldHVybiBlcnI7CiB9CkBAIC00OTMsNyArNTg0LDcgQEAKIAkJcmV0dXJuOwogCiAJYnR0dl9pcl9zdG9wKGJ0dik7Ci0JaXJfaW5wdXRfdW5yZWdpc3RlcihidHYtPnJlbW90ZS0+ZGV2KTsKKwlyY191bnJlZ2lzdGVyX2RldmljZShidHYtPnJlbW90ZS0+ZGV2KTsKIAlrZnJlZShidHYtPnJlbW90ZSk7CiAJYnR2LT5yZW1vdGUgPSBOVUxMOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYuaAppbmRleCA2ZmQyYThlLi5mZDYyYmYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYuaApAQCAtMTcsNyArMTcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bWVkaWEvaXItY29tbW9uLmg+CiAjaW5jbHVkZSA8bWVkaWEvaTJjLWFkZHIuaD4KICNpbmNsdWRlIDxtZWRpYS90dW5lci5oPgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHZwLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHZwLmgKaW5kZXggZDFlMjZhNC4uOWI3NzZmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2cC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0dnAuaApAQCAtNDEsNyArNDEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPG1lZGlhL3ZpZGVvYnVmLWRtYS1zZy5oPgogI2luY2x1ZGUgPG1lZGlhL3R2ZWVwcm9tLmg+Ci0jaW5jbHVkZSA8bWVkaWEvaXItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvcmMtY29yZS5oPgogI2luY2x1ZGUgPG1lZGlhL2lyLWtiZC1pMmMuaD4KIAogI2luY2x1ZGUgImJ0ODQ4LmgiCkBAIC0xMjAsNiArMTIwLDMzIEBACiAJaW50ICBoc2hpZnQsdnNoaWZ0OyAgIC8qIGZvciBwbGFuYXIgbW9kZXMgICAqLwogfTsKIAorc3RydWN0IGJ0dHZfaXIgeworCXN0cnVjdCByY19kZXYgICAgICAgICAgICpkZXY7CisJc3RydWN0IHRpbWVyX2xpc3QgICAgICAgdGltZXI7CisKKwljaGFyICAgICAgICAgICAgICAgICAgICBuYW1lWzMyXTsKKwljaGFyICAgICAgICAgICAgICAgICAgICBwaHlzWzMyXTsKKworCS8qIFVzdWFsIGdwaW8gc2lnbmFsbGluZyAqLworCXUzMiAgICAgICAgICAgICAgICAgICAgIG1hc2tfa2V5Y29kZTsKKwl1MzIgICAgICAgICAgICAgICAgICAgICBtYXNrX2tleWRvd247CisJdTMyICAgICAgICAgICAgICAgICAgICAgbWFza19rZXl1cDsKKwl1MzIgICAgICAgICAgICAgICAgICAgICBwb2xsaW5nOworCXUzMiAgICAgICAgICAgICAgICAgICAgIGxhc3RfZ3BpbzsKKwlpbnQgICAgICAgICAgICAgICAgICAgICBzaGlmdF9ieTsKKwlpbnQgICAgICAgICAgICAgICAgICAgICBzdGFydDsgLy8gV2hhdCBzaG91bGQgUkM1X1NUQVJUKCkgYmUKKwlpbnQgICAgICAgICAgICAgICAgICAgICBhZGRyOyAvLyBXaGF0IFJDNV9BRERSKCkgc2hvdWxkIGJlLgorCWludCAgICAgICAgICAgICAgICAgICAgIHJjNV9yZW1vdGVfZ2FwOworCisJLyogUkM1IGdwaW8gKi8KKwlib29sCQkJcmM1X2dwaW87ICAgLyogSXMgUkM1IGxlZ2FjeSBHUElPIGVuYWJsZWQ/ICovCisJdTMyICAgICAgICAgICAgICAgICAgICAgbGFzdF9iaXQ7ICAgLyogbGFzdCByYXcgYml0IHNlZW4gKi8KKwl1MzIgICAgICAgICAgICAgICAgICAgICBjb2RlOyAgICAgICAvKiByYXcgY29kZSB1bmRlciBjb25zdHJ1Y3Rpb24gKi8KKwlzdHJ1Y3QgdGltZXZhbCAgICAgICAgICBiYXNlX3RpbWU7ICAvKiB0aW1lIG9mIGxhc3Qgc2VlbiBjb2RlICovCisJYm9vbCAgICAgICAgICAgICAgICAgICAgYWN0aXZlOyAgICAgLyogYnVpbGRpbmcgcmF3IGNvZGUgKi8KK307CisKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdHJ1Y3QgYnR0dl9nZW9tZXRyeSB7CkBAIC0zMDUsNyArMzMyLDYgQEAKIC8qIGZvciBncGlvLWNvbm5lY3RlZCByZW1vdGUgY29udHJvbCAqLwogc3RydWN0IGJ0dHZfaW5wdXQgewogCXN0cnVjdCBpbnB1dF9kZXYgICAgICAqZGV2OwotCXN0cnVjdCBpcl9pbnB1dF9zdGF0ZSBpcjsKIAljaGFyICAgICAgICAgICAgICAgICAgbmFtZVszMl07CiAJY2hhciAgICAgICAgICAgICAgICAgIHBoeXNbMzJdOwogCXUzMiAgICAgICAgICAgICAgICAgICBtYXNrX2tleWNvZGU7CkBAIC0zMzgsMTIgKzM2NCwxMCBAQAogCXN0cnVjdCBidHR2X3BsbF9pbmZvIHBsbDsKIAlpbnQgdHJpdG9uMTsKIAlpbnQgZ3Bpb2lycTsKLQlpbnQgKCpjdXN0b21faXJxKShzdHJ1Y3QgYnR0diAqYnR2KTsKIAogCWludCB1c2VfaTJjX2h3OwogCiAJLyogb2xkIGdwaW8gaW50ZXJmYWNlICovCi0Jd2FpdF9xdWV1ZV9oZWFkX3QgZ3Bpb3E7CiAJaW50IHNodXRkb3duOwogCiAJdm9pZCAoKnZvbHVtZV9ncGlvKShzdHJ1Y3QgYnR0diAqYnR2LCBfX3UxNiB2b2x1bWUpOwpAQCAtMzY4LDcgKzM5Miw3IEBACiAKIAkvKiBpbmZyYXJlZCByZW1vdGUgKi8KIAlpbnQgaGFzX3JlbW90ZTsKLQlzdHJ1Y3QgY2FyZF9pciAqcmVtb3RlOworCXN0cnVjdCBidHR2X2lyICpyZW1vdGU7CiAKIAkvKiBJMkMgcmVtb3RlIGRhdGEgKi8KIAlzdHJ1Y3QgSVJfaTJjX2luaXRfZGF0YSAgICBpbml0X2RhdGE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NhZmVfY2NpYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jYWZlX2NjaWMuYwppbmRleCAwZGZmZjUwLi43ODkwODdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NhZmVfY2NpYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY2FmZV9jY2ljLmMKQEAgLTg1OSw4ICs4NTksNiBAQAogCXN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgbWJ1c19mbXQ7CiAJaW50IHJldDsKIAotCWlmIChjYW0tPnN0YXRlICE9IFNfSURMRSkKLQkJcmV0dXJuIC1FSU5WQUw7CiAJdjRsMl9maWxsX21idXNfZm9ybWF0KCZtYnVzX2ZtdCwgJmNhbS0+cGl4X2Zvcm1hdCwgY2FtLT5tYnVzX2NvZGUpOwogCXJldCA9IHNlbnNvcl9jYWxsKGNhbSwgY29yZSwgaW5pdCwgMCk7CiAJaWYgKHJldCA9PSAwKQpAQCAtMjE5NiwxMiArMjE5NCwxMyBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAljYWZlX2N0bHJfaW5pdChjYW0pOwotCWNhZmVfY3Rscl9wb3dlcl9kb3duKGNhbSk7CiAKIAltdXRleF9sb2NrKCZjYW0tPnNfbXV0ZXgpOwogCWlmIChjYW0tPnVzZXJzID4gMCkgewogCQljYWZlX2N0bHJfcG93ZXJfdXAoY2FtKTsKIAkJX19jYWZlX2NhbV9yZXNldChjYW0pOworCX0gZWxzZSB7CisJCWNhZmVfY3Rscl9wb3dlcl9kb3duKGNhbSk7CiAJfQogCW11dGV4X3VubG9jaygmY2FtLT5zX211dGV4KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhMi9jcGlhMl92NGwuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYTIvY3BpYTJfdjRsLmMKaW5kZXggNDZiNDMzYi4uN2VkZjgwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhMi9jcGlhMl92NGwuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEyL2NwaWEyX3Y0bC5jCkBAIC00MTksMjggKzQxOSw2IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiAgaW9jdGxfZ2V0X21idWYKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCi1zdGF0aWMgaW50IGlvY3RsX2dldF9tYnVmKHZvaWQgKmFyZywgc3RydWN0IGNhbWVyYV9kYXRhICpjYW0pCi17Ci0Jc3RydWN0IHZpZGVvX21idWYgKnZtOwotCWludCBpOwotCXZtID0gYXJnOwotCi0JbWVtc2V0KHZtLCAwLCBzaXplb2YoKnZtKSk7Ci0Jdm0tPnNpemUgPSBjYW0tPmZyYW1lX3NpemUqY2FtLT5udW1fZnJhbWVzOwotCXZtLT5mcmFtZXMgPSBjYW0tPm51bV9mcmFtZXM7Ci0JZm9yIChpID0gMDsgaSA8IGNhbS0+bnVtX2ZyYW1lczsgaSsrKQotCQl2bS0+b2Zmc2V0c1tpXSA9IGNhbS0+ZnJhbWVfc2l6ZSAqIGk7Ci0KLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgogICogIGlvY3RsX3NldF9ncGlvCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMTM4MCwxNyArMTM1OCw2IEBACiAJCX0KIAkJYnJlYWs7CiAJfQotI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAotCWNhc2UgVklESU9DR01CVUY6Ci0JewotCQlzdHJ1Y3QgY3BpYTJfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCQlpZihmaC0+cHJpbyAhPSBWNEwyX1BSSU9SSVRZX1JFQ09SRCkgewotCQkJbXV0ZXhfdW5sb2NrKCZjYW0tPmJ1c3lfbG9jayk7Ci0JCQlyZXR1cm4gLUVCVVNZOwotCQl9Ci0JCWJyZWFrOwotCX0KLSNlbmRpZgogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KQEAgLTE0MDAsMTEgKzEzNjcsNiBAQAogCWNhc2UgQ1BJQTJfSU9DX1NFVF9HUElPOgogCQlyZXR2YWwgPSBpb2N0bF9zZXRfZ3BpbyhhcmcsIGNhbSk7CiAJCWJyZWFrOwotI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAotCWNhc2UgVklESU9DR01CVUY6CS8qIG1tYXAgaW50ZXJmYWNlICovCi0JCXJldHZhbCA9IGlvY3RsX2dldF9tYnVmKGFyZywgY2FtKTsKLQkJYnJlYWs7Ci0jZW5kaWYKIAljYXNlIFZJRElPQ19RVUVSWUNBUDoKIAkJcmV0dmFsID0gaW9jdGxfcXVlcnljYXAoYXJnLGNhbSk7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvS2NvbmZpZwppbmRleCA3NmMwNTRkLi5kOWQyZjZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvS2NvbmZpZwpAQCAtMSw5ICsxLDggQEAKIGNvbmZpZyBWSURFT19DWDE4CiAJdHJpc3RhdGUgIkNvbmV4YW50IGN4MjM0MTggTVBFRyBlbmNvZGVyIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIERWQl9DT1JFICYmIFBDSSAmJiBJMkMgJiYgRVhQRVJJTUVOVEFMCi0JZGVwZW5kcyBvbiBJTlBVVAkjIGR1ZSB0byBWSURFT19JUgogCXNlbGVjdCBJMkNfQUxHT0JJVAotCWRlcGVuZHMgb24gVklERU9fSVIKKwlkZXBlbmRzIG9uIFJDX0NPUkUKIAlzZWxlY3QgVklERU9fVFVORVIKIAlzZWxlY3QgVklERU9fVFZFRVBST00KIAlzZWxlY3QgVklERU9fQ1gyMzQxWApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWNhcmRzLmMKaW5kZXggZmUxMDkwOS4uODcxNzc3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1jYXJkcy5jCkBAIC0zOSw3ICszOSw3IEBACiAJLnR2ICAgID0geyAweDYxLCAweDYwLCBJMkNfQ0xJRU5UX0VORCB9LAogfTsKIAotLyogUGxlYXNlIGFkZCBuZXcgUENJIElEcyB0bzogaHR0cDovL3BjaS1pZHMudWN3LmN6LyAKKy8qIFBsZWFzZSBhZGQgbmV3IFBDSSBJRHMgdG86IGh0dHA6Ly9wY2ktaWRzLnVjdy5jei8KICAgIFRoaXMga2VlcHMgdGhlIFBDSSBJRCBkYXRhYmFzZSB1cCB0byBkYXRlLiBOb3RlIHRoYXQgdGhlIGVudHJpZXMKICAgIG11c3QgYmUgYWRkZWQgdW5kZXIgdmVuZG9yIDB4NDQ0NCAoQ29uZXhhbnQpIGFzIHN1YnN5c3RlbSBJRHMuCiAgICBOZXcgdmVuZG9yIElEcyBzaG91bGQgc3RpbGwgYmUgYWRkZWQgdG8gdGhlIHZlbmRvciBJRCBsaXN0LiAqLwpAQCAtMjUxLDYgKzI1MSw2NiBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKKy8qIEdvVFZpZXcgUENJICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3gxOF9jYXJkX3BjaV9pbmZvIGN4MThfcGNpX2dvdHZpZXdfZHZkM1tdID0geworCXsgUENJX0RFVklDRV9JRF9DWDIzNDE4LCBDWDE4X1BDSV9JRF9HT1RWSUVXLCAweDMzNDMgfSwKKwl7IDAsIDAsIDAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjeDE4X2NhcmQgY3gxOF9jYXJkX2dvdHZpZXdfZHZkMyA9IHsKKwkudHlwZSA9IENYMThfQ0FSRF9HT1RWSUVXX1BDSV9EVkQzLAorCS5uYW1lID0gIkdvVFZpZXcgUENJIERWRDMgSHlicmlkIiwKKwkuY29tbWVudCA9ICJFeHBlcmltZW50ZXJzIG5lZWRlZCBmb3IgZGV2aWNlIHRvIHdvcmsgd2VsbC5cbiIKKwkJICAiXHRUbyBoZWxwLCBtYWlsIHRoZSBpdnR2LWRldmVsIGxpc3QgKHd3dy5pdnR2ZHJpdmVyLm9yZykuXG4iLAorCS52NGwyX2NhcGFiaWxpdGllcyA9IENYMThfQ0FQX0VOQ09ERVIsCisJLmh3X2F1ZGlvX2N0cmwgPSBDWDE4X0hXXzQxOF9BViwKKwkuaHdfbXV4ZXIgPSBDWDE4X0hXX0dQSU9fTVVYLAorCS5od19hbGwgPSBDWDE4X0hXX1RWRUVQUk9NIHwgQ1gxOF9IV180MThfQVYgfCBDWDE4X0hXX1RVTkVSIHwKKwkJICBDWDE4X0hXX0dQSU9fTVVYIHwgQ1gxOF9IV19EVkIgfCBDWDE4X0hXX0dQSU9fUkVTRVRfQ1RSTCwKKwkudmlkZW9faW5wdXRzID0geworCQl7IENYMThfQ0FSRF9JTlBVVF9WSURfVFVORVIsICAwLCBDWDE4X0FWX0NPTVBPU0lURTIgfSwKKwkJeyBDWDE4X0NBUkRfSU5QVVRfU1ZJREVPMSwgICAgMSwKKwkJCQlDWDE4X0FWX1NWSURFT19MVU1BMyB8IENYMThfQVZfU1ZJREVPX0NIUk9NQTQgfSwKKwkJeyBDWDE4X0NBUkRfSU5QVVRfQ09NUE9TSVRFMSwgMSwgQ1gxOF9BVl9DT01QT1NJVEUxIH0sCisJCXsgQ1gxOF9DQVJEX0lOUFVUX1NWSURFTzIsICAgIDIsCisJCQkJQ1gxOF9BVl9TVklERU9fTFVNQTcgfCBDWDE4X0FWX1NWSURFT19DSFJPTUE4IH0sCisJCXsgQ1gxOF9DQVJEX0lOUFVUX0NPTVBPU0lURTIsIDIsIENYMThfQVZfQ09NUE9TSVRFNiB9LAorCX0sCisJLmF1ZGlvX2lucHV0cyA9IHsKKwkJeyBDWDE4X0NBUkRfSU5QVVRfQVVEX1RVTkVSLCBDWDE4X0FWX0FVRElPNSwgICAgICAgIDAgfSwKKwkJeyBDWDE4X0NBUkRfSU5QVVRfTElORV9JTjEsICBDWDE4X0FWX0FVRElPX1NFUklBTDEsIDEgfSwKKwkJeyBDWDE4X0NBUkRfSU5QVVRfTElORV9JTjIsICBDWDE4X0FWX0FVRElPX1NFUklBTDIsIDEgfSwKKwl9LAorCS50dW5lcnMgPSB7CisJCS8qIFhDMzAyOCB0dW5lciAqLworCQl7IC5zdGQgPSBWNEwyX1NURF9BTEwsIC50dW5lciA9IFRVTkVSX1hDMjAyOCB9LAorCX0sCisJLyogRklYTUUgLSB0aGUgRk0gcmFkaW8gaXMganVzdCBhIGd1ZXNzIGFuZCBkcml2ZXIgZG9lc24ndCB1c2UgU0lGICovCisJLnJhZGlvX2lucHV0ID0geyBDWDE4X0NBUkRfSU5QVVRfQVVEX1RVTkVSLCBDWDE4X0FWX0FVRElPNSwgMiB9LAorCS5kZHIgPSB7CisJCS8qIEh5bml4IEhZNURVMjgzMjIyQiBERFIgUkFNICovCisJCS5jaGlwX2NvbmZpZyA9IDB4MzAzLAorCQkucmVmcmVzaCA9IDB4M2JkLAorCQkudGltaW5nMSA9IDB4MzYzMjA5NjYsCisJCS50aW1pbmcyID0gMHgxZiwKKwkJLnR1bmVfbGFuZSA9IDAsCisJCS5pbml0aWFsX2VtcnMgPSAyLAorCX0sCisJLmdwaW9faW5pdC5pbml0aWFsX3ZhbHVlID0gMHgxLAorCS5ncGlvX2luaXQuZGlyZWN0aW9uID0gMHgzLAorCisJLmdwaW9fYXVkaW9faW5wdXQgPSB7IC5tYXNrICAgPSAweDMsCisJCQkgICAgICAudHVuZXIgID0gMHgxLAorCQkJICAgICAgLmxpbmVpbiA9IDB4MiwKKwkJCSAgICAgIC5yYWRpbyAgPSAweDEgfSwKKwkueGNlaXZlX3BpbiA9IDAsCisJLnBjaV9saXN0ID0gY3gxOF9wY2lfZ290dmlld19kdmQzLAorCS5pMmMgPSAmY3gxOF9pMmNfc3RkLAorfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCiAvKiBDb25leGFudCBSYXB0b3IgUEFML1NFQ0FNOiBub3RlIHRoYXQgdGhpcyBjYXJkIGlzIGFuYWxvZyBvbmx5ISAqLwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGN4MThfY2FyZF9wY2lfaW5mbyBjeDE4X3BjaV9jbnh0X3JhcHRvcl9wYWxbXSA9IHsKQEAgLTQ2Myw2ICs1MjMsNyBAQAogCSZjeDE4X2NhcmRfdG9zaGliYV9xb3NtaW9fZHZidCwKIAkmY3gxOF9jYXJkX2xlYWR0ZWtfcHZyMjEwMCwKIAkmY3gxOF9jYXJkX2xlYWR0ZWtfZHZyMzEwMGgsCisJJmN4MThfY2FyZF9nb3R2aWV3X2R2ZDMKIH07CiAKIGNvbnN0IHN0cnVjdCBjeDE4X2NhcmQgKmN4MThfZ2V0X2NhcmQodTE2IGluZGV4KQpAQCAtNDg1LDcgKzU0Niw2IEBACiAJCSJDb21wb25lbnQgMSIKIAl9OwogCi0JbWVtc2V0KGlucHV0LCAwLCBzaXplb2YoKmlucHV0KSk7CiAJaWYgKGluZGV4ID49IGN4LT5ub2ZfaW5wdXRzKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlpbnB1dC0+aW5kZXggPSBpbmRleDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWNvbnRyb2xzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1jb250cm9scy5jCmluZGV4IDY3MDQzYzcuLjk3ZDdiN2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWNvbnRyb2xzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtY29udHJvbHMuYwpAQCAtMTA4LDcgKzEwOCw3IEBACiAJCQkJCXN0cnVjdCB2NGwyX2V4dF9jb250cm9sICp2Y3RybCkKIHsKIAlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgcWN0cmw7Ci0JY29uc3QgY2hhciAqKm1lbnVfaXRlbXMgPSBOVUxMOworCWNvbnN0IGNoYXIgKiBjb25zdCAqbWVudV9pdGVtcyA9IE5VTEw7CiAJaW50IGVycjsKIAogCXFjdHJsLmlkID0gdmN0cmwtPmlkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZHJpdmVyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kcml2ZXIuYwppbmRleCBkZjYwZjI3Li4xMzNlYzJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kcml2ZXIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kcml2ZXIuYwpAQCAtMTU2LDYgKzE1Niw3IEBACiAJCSAiXHRcdFx0IDYgPSBUb3NoaWJhIFFvc21pbyBEVkItVC9BbmFsb2dcbiIKIAkJICJcdFx0XHQgNyA9IExlYWR0ZWsgV2luRmFzdCBQVlIyMTAwXG4iCiAJCSAiXHRcdFx0IDggPSBMZWFkdGVrIFdpbkZhc3QgRFZSMzEwMCBIXG4iCisJCSAiXHRcdFx0IDkgPSBHb1RWaWV3IFBDSSBEVkQzIEh5YnJpZFxuIgogCQkgIlx0XHRcdCAwID0gQXV0b2RldGVjdCAoZGVmYXVsdClcbiIKIAkJICJcdFx0XHQtMSA9IElnbm9yZSB0aGlzIGNhcmRcblx0XHQiKTsKIE1PRFVMRV9QQVJNX0RFU0MocGFsLCAiU2V0IFBBTCBzdGFuZGFyZDogQiwgRywgSCwgRCwgSywgSSwgTSwgTiwgTmMsIDYwIik7CkBAIC0yNjYsOCArMjY3LDE0IEBACiAJSU5JVF9XT1JLKCZkZXYtPnJlcXVlc3RfbW9kdWxlX3drLCByZXF1ZXN0X21vZHVsZV9hc3luYyk7CiAJc2NoZWR1bGVfd29yaygmZGV2LT5yZXF1ZXN0X21vZHVsZV93ayk7CiB9CisKK3N0YXRpYyB2b2lkIGZsdXNoX3JlcXVlc3RfbW9kdWxlcyhzdHJ1Y3QgY3gxOCAqZGV2KQoreworCWZsdXNoX3dvcmtfc3luYygmZGV2LT5yZXF1ZXN0X21vZHVsZV93ayk7Cit9CiAjZWxzZQogI2RlZmluZSByZXF1ZXN0X21vZHVsZXMoZGV2KQorI2RlZmluZSBmbHVzaF9yZXF1ZXN0X21vZHVsZXMoZGV2KQogI2VuZGlmIC8qIENPTkZJR19NT0RVTEVTICovCiAKIC8qIEdlbmVyaWMgdXRpbGl0eSBmdW5jdGlvbnMgKi8KQEAgLTMzMyw2ICszNDAsNyBAQAogCQl0dmVlcHJvbV9oYXVwcGF1Z2VfYW5hbG9nKCZjLCB0diwgZWVkYXRhKTsKIAkJYnJlYWs7CiAJY2FzZSBDWDE4X0NBUkRfWVVBTl9NUEM3MTg6CisJY2FzZSBDWDE4X0NBUkRfR09UVklFV19QQ0lfRFZEMzoKIAkJdHYtPm1vZGVsID0gMHg3MTg7CiAJCWN4MThfZWVwcm9tX2R1bXAoY3gsIGVlZGF0YSwgc2l6ZW9mKGVlZGF0YSkpOwogCQlDWDE4X0lORk8oImVlcHJvbSBQQ0kgSUQ6ICUwMnglMDJ4OiUwMnglMDJ4XG4iLApAQCAtOTIzLDggKzkzMSwxMyBAQAogCWN4LT5lbmNfbWVtID0gaW9yZW1hcF9ub2NhY2hlKGN4LT5iYXNlX2FkZHIgKyBDWDE4X01FTV9PRkZTRVQsCiAJCQkJICAgICAgIENYMThfTUVNX1NJWkUpOwogCWlmICghY3gtPmVuY19tZW0pIHsKLQkJQ1gxOF9FUlIoImlvcmVtYXAgZmFpbGVkLCBwZXJoYXBzIGluY3JlYXNpbmcgX19WTUFMTE9DX1JFU0VSVkUgaW4gcGFnZS5oXG4iKTsKLQkJQ1gxOF9FUlIoIm9yIGRpc2FibGluZyBDT05GSUdfSElHSE1FTTRHIGludG8gdGhlIGtlcm5lbCB3b3VsZCBoZWxwXG4iKTsKKwkJQ1gxOF9FUlIoImlvcmVtYXAgZmFpbGVkLiBDYW4ndCBnZXQgYSB3aW5kb3cgaW50byBDWDIzNDE4ICIKKwkJCSAibWVtb3J5IGFuZCByZWdpc3RlciBzcGFjZVxuIik7CisJCUNYMThfRVJSKCJFYWNoIGNhcHR1cmUgY2FyZCB3aXRoIGEgQ1gyMzQxOCBuZWVkcyA2NCBNQiBvZiAiCisJCQkgInZtYWxsb2MgYWRkcmVzcyBzcGFjZSBmb3IgdGhlIHdpbmRvd1xuIik7CisJCUNYMThfRVJSKCJDaGVjayB0aGUgb3V0cHV0IG9mICdncmVwIFZtYWxsb2MgL3Byb2MvbWVtaW5mbydcbiIpOworCQlDWDE4X0VSUigiVXNlIHRoZSB2bWFsbG9jPSBrZXJuZWwgY29tbWFuZCBsaW5lIG9wdGlvbiB0byBzZXQgIgorCQkJICJWbWFsbG9jVG90YWwgdG8gYSBsYXJnZXIgdmFsdWVcbiIpOwogCQlyZXR2YWwgPSAtRU5PTUVNOwogCQlnb3RvIGZyZWVfbWVtOwogCX0KQEAgLTEyMjYsNiArMTIzOSw4IEBACiAKIAlDWDE4X0RFQlVHX0lORk8oIlJlbW92aW5nIENhcmRcbiIpOwogCisJZmx1c2hfcmVxdWVzdF9tb2R1bGVzKGN4KTsKKwogCS8qIFN0b3AgYWxsIGNhcHR1cmVzICovCiAJQ1gxOF9ERUJVR19JTkZPKCJTdG9wcGluZyBhbGwgc3RyZWFtc1xuIik7CiAJaWYgKGF0b21pY19yZWFkKCZjeC0+dG90X2NhcHR1cmluZykgPiAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZHJpdmVyLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kcml2ZXIuaAppbmRleCA3N2JlNThjLi5mNmYzZTUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kcml2ZXIuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kcml2ZXIuaApAQCAtODQsNyArODQsOCBAQAogI2RlZmluZSBDWDE4X0NBUkRfVE9TSElCQV9RT1NNSU9fRFZCVCA1IC8qIFRvc2hpYmEgUW9zbWlvIEludGVyYWwgRFZCLVQvQW5hbG9nKi8KICNkZWZpbmUgQ1gxOF9DQVJEX0xFQURURUtfUFZSMjEwMCAgICAgNiAvKiBMZWFkdGVrIFdpbkZhc3QgUFZSMjEwMCAqLwogI2RlZmluZSBDWDE4X0NBUkRfTEVBRFRFS19EVlIzMTAwSCAgICA3IC8qIExlYWR0ZWsgV2luRmFzdCBEVlIzMTAwIEggKi8KLSNkZWZpbmUgQ1gxOF9DQVJEX0xBU1QgCQkgICAgICA3CisjZGVmaW5lIENYMThfQ0FSRF9HT1RWSUVXX1BDSV9EVkQzICAgIDggLyogR29UVmlldyBQQ0kgRFZEMyBIeWJyaWQgKi8KKyNkZWZpbmUgQ1gxOF9DQVJEX0xBU1QJCSAgICAgIDgKIAogI2RlZmluZSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9NUEcgIDAKICNkZWZpbmUgQ1gxOF9FTkNfU1RSRUFNX1RZUEVfVFMgICAxCkBAIC0xMDYsNiArMTA3LDcgQEAKICNkZWZpbmUgQ1gxOF9QQ0lfSURfQ09ORVhBTlQJCTB4MTRmMQogI2RlZmluZSBDWDE4X1BDSV9JRF9UT1NISUJBCQkweDExNzkKICNkZWZpbmUgQ1gxOF9QQ0lfSURfTEVBRFRFSwkJMHgxMDdECisjZGVmaW5lIENYMThfUENJX0lEX0dPVFZJRVcJCTB4NTg1NAogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09IFNUQVJUIFVTRVIgU0VUVEFCTEUgRE1BIFZBUklBQkxFUyA9PT09PT09PT09PSAqLwpAQCAtMzIzLDcgKzMyNSwxMCBAQAogCXNwaW5sb2NrX3QgbG9jazsKIH07CiAKK3N0cnVjdCBjeDE4X3N0cmVhbTsgLyogZm9yd2FyZCByZWZlcmVuY2UgKi8KKwogc3RydWN0IGN4MThfZHZiIHsKKwlzdHJ1Y3QgY3gxOF9zdHJlYW0gKnN0cmVhbTsKIAlzdHJ1Y3QgZG14X2Zyb250ZW5kIGh3X2Zyb250ZW5kOwogCXN0cnVjdCBkbXhfZnJvbnRlbmQgbWVtX2Zyb250ZW5kOwogCXN0cnVjdCBkbXhkZXYgZG14ZGV2OwpAQCAtMzYzLDkgKzM2OCwxMCBAQAogI2RlZmluZSBDWDE4X0lOVkFMSURfVEFTS19IQU5ETEUgMHhmZmZmZmZmZgogCiBzdHJ1Y3QgY3gxOF9zdHJlYW0gewotCS8qIFRoZXNlIGZpcnN0IGZvdXIgZmllbGRzIGFyZSBhbHdheXMgc2V0LCBldmVuIGlmIHRoZSBzdHJlYW0KKwkvKiBUaGVzZSBmaXJzdCBmaXZlIGZpZWxkcyBhcmUgYWx3YXlzIHNldCwgZXZlbiBpZiB0aGUgc3RyZWFtCiAJICAgaXMgbm90IGFjdHVhbGx5IGNyZWF0ZWQuICovCiAJc3RydWN0IHZpZGVvX2RldmljZSAqdmlkZW9fZGV2OwkvKiBOVUxMIHdoZW4gc3RyZWFtIG5vdCBjcmVhdGVkICovCisJc3RydWN0IGN4MThfZHZiICpkdmI7CQkvKiBEVkIgLyBEaWdpdGFsIFRyYW5zcG9ydCAqLwogCXN0cnVjdCBjeDE4ICpjeDsgCQkvKiBmb3IgZWFzZSBvZiB1c2UgKi8KIAljb25zdCBjaGFyICpuYW1lOwkJLyogbmFtZSBvZiB0aGUgc3RyZWFtICovCiAJaW50IHR5cGU7CQkJLyogc3RyZWFtIHR5cGUgKi8KQEAgLTM5NSw5ICs0MDEsNiBAQAogCXN0cnVjdCBjeDE4X3F1ZXVlIHFfaWRsZTsJLyogaWRsZSAtIG5vdCBpbiByb3RhdGlvbiAqLwogCiAJc3RydWN0IHdvcmtfc3RydWN0IG91dF93b3JrX29yZGVyOwotCi0JLyogRFZCIC8gRGlnaXRhbCBUcmFuc3BvcnQgKi8KLQlzdHJ1Y3QgY3gxOF9kdmIgZHZiOwogfTsKIAogc3RydWN0IGN4MThfb3Blbl9pZCB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kdmIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWR2Yi5jCmluZGV4IDZkMTlmMDQuLmYwMzgxZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWR2Yi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWR2Yi5jCkBAIC0xMzcsNyArMTM3LDcgQEAKIHsKIAlzdHJ1Y3QgY3gxOF9kdmIgKmR2YiA9IGNvbnRhaW5lcl9vZihmZS0+ZHZiLAogCQkJCQkgICAgc3RydWN0IGN4MThfZHZiLCBkdmJfYWRhcHRlcik7Ci0Jc3RydWN0IGN4MThfc3RyZWFtICpzdHJlYW0gPSBjb250YWluZXJfb2YoZHZiLCBzdHJ1Y3QgY3gxOF9zdHJlYW0sIGR2Yik7CisJc3RydWN0IGN4MThfc3RyZWFtICpzdHJlYW0gPSBkdmItPnN0cmVhbTsKIAljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3ID0gTlVMTDsKIAlpbnQgcmV0OwogCWludCBpOwpAQCAtMjAzLDYgKzIwMywxNCBAQAogCS5kaXNhYmxlX2kyY19nYXRlX2N0cmwgPSAxLCAgICAgICAgIC8qIERpc2FibGUgdGhlIEkyQyBnYXRlICovCiB9OwogCitzdGF0aWMgc3RydWN0IHpsMTAzNTNfY29uZmlnIGdvdHZpZXdfZHZkM196bDEwMzUzX2RlbW9kID0geworCS5kZW1vZF9hZGRyZXNzICAgICAgICAgPSAweDFlID4+IDEsIC8qIERhdGFzaGVldCBzdWdnZXN0ZWQgc3RyYXBzICovCisJLmlmMiAgICAgICAgICAgICAgICAgICA9IDQ1NjAwLCAgICAgLyogNC41NjAgTUh6IElGIGZyb20gdGhlIFhDMzAyOCAqLworCS5wYXJhbGxlbF90cyAgICAgICAgICAgPSAxLCAgICAgICAgIC8qIE5vdCBhIHNlcmlhbCBUUyAqLworCS5ub190dW5lciAgICAgICAgICAgICAgPSAxLCAgICAgICAgIC8qIFhDMzAyOCBpcyBub3QgYmVoaW5kIHRoZSBnYXRlICovCisJLmRpc2FibGVfaTJjX2dhdGVfY3RybCA9IDEsICAgICAgICAgLyogRGlzYWJsZSB0aGUgSTJDIGdhdGUgKi8KK307CisKIHN0YXRpYyBpbnQgZHZiX3JlZ2lzdGVyKHN0cnVjdCBjeDE4X3N0cmVhbSAqc3RyZWFtKTsKIAogLyogS2VybmVsIERWQiBmcmFtZXdvcmsgY2FsbHMgdGhpcyB3aGVuIHRoZSBmZWVkIG5lZWRzIHRvIHN0YXJ0LgpAQCAtMjQ3LDYgKzI1NSw3IEBACiAKIAljYXNlIENYMThfQ0FSRF9MRUFEVEVLX0RWUjMxMDBIOgogCWNhc2UgQ1gxOF9DQVJEX1lVQU5fTVBDNzE4OgorCWNhc2UgQ1gxOF9DQVJEX0dPVFZJRVdfUENJX0RWRDM6CiAJZGVmYXVsdDoKIAkJLyogQXNzdW1wdGlvbiAtIFBhcmFsbGVsIHRyYW5zcG9ydCAtIFNpZ25hbGxpbmcKIAkJICogdW5kZWZpbmVkIG9yIGRlZmF1bHQuCkBAIC0yNTcsMjIgKzI2NiwyMiBAQAogCWlmICghZGVtdXgtPmRteC5mcm9udGVuZCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQltdXRleF9sb2NrKCZzdHJlYW0tPmR2Yi5mZWVkbG9jayk7Ci0JaWYgKHN0cmVhbS0+ZHZiLmZlZWRpbmcrKyA9PSAwKSB7CisJbXV0ZXhfbG9jaygmc3RyZWFtLT5kdmItPmZlZWRsb2NrKTsKKwlpZiAoc3RyZWFtLT5kdmItPmZlZWRpbmcrKyA9PSAwKSB7CiAJCUNYMThfREVCVUdfSU5GTygiU3RhcnRpbmcgVHJhbnNwb3J0IERNQVxuIik7CiAJCW11dGV4X2xvY2soJmN4LT5zZXJpYWxpemVfbG9jayk7CiAJCXNldF9iaXQoQ1gxOF9GX1NfU1RSRUFNSU5HLCAmc3RyZWFtLT5zX2ZsYWdzKTsKIAkJcmV0ID0gY3gxOF9zdGFydF92NGwyX2VuY29kZV9zdHJlYW0oc3RyZWFtKTsKIAkJaWYgKHJldCA8IDApIHsKIAkJCUNYMThfREVCVUdfSU5GTygiRmFpbGVkIHRvIHN0YXJ0IFRyYW5zcG9ydCBETUFcbiIpOwotCQkJc3RyZWFtLT5kdmIuZmVlZGluZy0tOwotCQkJaWYgKHN0cmVhbS0+ZHZiLmZlZWRpbmcgPT0gMCkKKwkJCXN0cmVhbS0+ZHZiLT5mZWVkaW5nLS07CisJCQlpZiAoc3RyZWFtLT5kdmItPmZlZWRpbmcgPT0gMCkKIAkJCQljbGVhcl9iaXQoQ1gxOF9GX1NfU1RSRUFNSU5HLCAmc3RyZWFtLT5zX2ZsYWdzKTsKIAkJfQogCQltdXRleF91bmxvY2soJmN4LT5zZXJpYWxpemVfbG9jayk7CiAJfSBlbHNlCiAJCXJldCA9IDA7Ci0JbXV0ZXhfdW5sb2NrKCZzdHJlYW0tPmR2Yi5mZWVkbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZzdHJlYW0tPmR2Yi0+ZmVlZGxvY2spOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTI5MCwxNSArMjk5LDE1IEBACiAJCUNYMThfREVCVUdfSU5GTygiU3RvcCBmZWVkOiBwaWQgPSAweCV4IGluZGV4ID0gJWRcbiIsCiAJCQkJZmVlZC0+cGlkLCBmZWVkLT5pbmRleCk7CiAKLQkJbXV0ZXhfbG9jaygmc3RyZWFtLT5kdmIuZmVlZGxvY2spOwotCQlpZiAoLS1zdHJlYW0tPmR2Yi5mZWVkaW5nID09IDApIHsKKwkJbXV0ZXhfbG9jaygmc3RyZWFtLT5kdmItPmZlZWRsb2NrKTsKKwkJaWYgKC0tc3RyZWFtLT5kdmItPmZlZWRpbmcgPT0gMCkgewogCQkJQ1gxOF9ERUJVR19JTkZPKCJTdG9wcGluZyBUcmFuc3BvcnQgRE1BXG4iKTsKIAkJCW11dGV4X2xvY2soJmN4LT5zZXJpYWxpemVfbG9jayk7CiAJCQlyZXQgPSBjeDE4X3N0b3BfdjRsMl9lbmNvZGVfc3RyZWFtKHN0cmVhbSwgMCk7CiAJCQltdXRleF91bmxvY2soJmN4LT5zZXJpYWxpemVfbG9jayk7CiAJCX0gZWxzZQogCQkJcmV0ID0gMDsKLQkJbXV0ZXhfdW5sb2NrKCZzdHJlYW0tPmR2Yi5mZWVkbG9jayk7CisJCW11dGV4X3VubG9jaygmc3RyZWFtLT5kdmItPmZlZWRsb2NrKTsKIAl9CiAKIAlyZXR1cm4gcmV0OwpAQCAtMzA3LDcgKzMxNiw3IEBACiBpbnQgY3gxOF9kdmJfcmVnaXN0ZXIoc3RydWN0IGN4MThfc3RyZWFtICpzdHJlYW0pCiB7CiAJc3RydWN0IGN4MTggKmN4ID0gc3RyZWFtLT5jeDsKLQlzdHJ1Y3QgY3gxOF9kdmIgKmR2YiA9ICZzdHJlYW0tPmR2YjsKKwlzdHJ1Y3QgY3gxOF9kdmIgKmR2YiA9IHN0cmVhbS0+ZHZiOwogCXN0cnVjdCBkdmJfYWRhcHRlciAqZHZiX2FkYXB0ZXI7CiAJc3RydWN0IGR2Yl9kZW11eCAqZHZiZGVtdXg7CiAJc3RydWN0IGRteF9kZW11eCAqZG14OwpAQCAtMzE2LDYgKzMyNSw5IEBACiAJaWYgKCFkdmIpCiAJCXJldHVybiAtRUlOVkFMOwogCisJZHZiLT5lbmFibGVkID0gMDsKKwlkdmItPnN0cmVhbSA9IHN0cmVhbTsKKwogCXJldCA9IGR2Yl9yZWdpc3Rlcl9hZGFwdGVyKCZkdmItPmR2Yl9hZGFwdGVyLAogCQkJQ1gxOF9EUklWRVJfTkFNRSwKIAkJCVRISVNfTU9EVUxFLCAmY3gtPnBjaV9kZXYtPmRldiwgYWRhcHRlcl9ucik7CkBAIC0zNjksNyArMzgxLDcgQEAKIAogCUNYMThfSU5GTygiRFZCIEZyb250ZW5kIHJlZ2lzdGVyZWRcbiIpOwogCUNYMThfSU5GTygiUmVnaXN0ZXJlZCBEVkIgYWRhcHRlciVkIGZvciAlcyAoJWQgeCAlZC4lMDJkIGtCKVxuIiwKLQkJICBzdHJlYW0tPmR2Yi5kdmJfYWRhcHRlci5udW0sIHN0cmVhbS0+bmFtZSwKKwkJICBzdHJlYW0tPmR2Yi0+ZHZiX2FkYXB0ZXIubnVtLCBzdHJlYW0tPm5hbWUsCiAJCSAgc3RyZWFtLT5idWZmZXJzLCBzdHJlYW0tPmJ1Zl9zaXplLzEwMjQsCiAJCSAgKHN0cmVhbS0+YnVmX3NpemUgKiAxMDAgLyAxMDI0KSAlIDEwMCk7CiAKQEAgLTM5NiwxMyArNDA4LDE2IEBACiB2b2lkIGN4MThfZHZiX3VucmVnaXN0ZXIoc3RydWN0IGN4MThfc3RyZWFtICpzdHJlYW0pCiB7CiAJc3RydWN0IGN4MTggKmN4ID0gc3RyZWFtLT5jeDsKLQlzdHJ1Y3QgY3gxOF9kdmIgKmR2YiA9ICZzdHJlYW0tPmR2YjsKKwlzdHJ1Y3QgY3gxOF9kdmIgKmR2YiA9IHN0cmVhbS0+ZHZiOwogCXN0cnVjdCBkdmJfYWRhcHRlciAqZHZiX2FkYXB0ZXI7CiAJc3RydWN0IGR2Yl9kZW11eCAqZHZiZGVtdXg7CiAJc3RydWN0IGRteF9kZW11eCAqZG14OwogCiAJQ1gxOF9JTkZPKCJ1bnJlZ2lzdGVyIERWQlxuIik7CiAKKwlpZiAoZHZiID09IE5VTEwgfHwgIWR2Yi0+ZW5hYmxlZCkKKwkJcmV0dXJuOworCiAJZHZiX2FkYXB0ZXIgPSAmZHZiLT5kdmJfYWRhcHRlcjsKIAlkdmJkZW11eCA9ICZkdmItPmRlbXV4OwogCWRteCA9ICZkdmJkZW11eC0+ZG14OwpAQCAtNDIzLDcgKzQzOCw3IEBACiAgKi8KIHN0YXRpYyBpbnQgZHZiX3JlZ2lzdGVyKHN0cnVjdCBjeDE4X3N0cmVhbSAqc3RyZWFtKQogewotCXN0cnVjdCBjeDE4X2R2YiAqZHZiID0gJnN0cmVhbS0+ZHZiOworCXN0cnVjdCBjeDE4X2R2YiAqZHZiID0gc3RyZWFtLT5kdmI7CiAJc3RydWN0IGN4MTggKmN4ID0gc3RyZWFtLT5jeDsKIAlpbnQgcmV0ID0gMDsKIApAQCAtNDk1LDYgKzUxMCwyOSBAQAogCQkJCWZlLT5vcHMudHVuZXJfb3BzLnNldF9jb25maWcoZmUsICZjdHJsKTsKIAkJfQogCQlicmVhazsKKwljYXNlIENYMThfQ0FSRF9HT1RWSUVXX1BDSV9EVkQzOgorCQkJZHZiLT5mZSA9IGR2Yl9hdHRhY2goemwxMDM1M19hdHRhY2gsCisJCQkJCSAgICAgJmdvdHZpZXdfZHZkM196bDEwMzUzX2RlbW9kLAorCQkJCQkgICAgICZjeC0+aTJjX2FkYXBbMV0pOworCQlpZiAoZHZiLT5mZSAhPSBOVUxMKSB7CisJCQlzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZTsKKwkJCXN0cnVjdCB4YzIwMjhfY29uZmlnIGNmZyA9IHsKKwkJCQkuaTJjX2FkYXAgPSAmY3gtPmkyY19hZGFwWzFdLAorCQkJCS5pMmNfYWRkciA9IDB4YzIgPj4gMSwKKwkJCQkuY3RybCA9IE5VTEwsCisJCQl9OworCQkJc3RhdGljIHN0cnVjdCB4YzIwMjhfY3RybCBjdHJsID0geworCQkJCS5mbmFtZSAgID0gWEMyMDI4X0RFRkFVTFRfRklSTVdBUkUsCisJCQkJLm1heF9sZW4gPSA2NCwKKwkJCQkuZGVtb2QgICA9IFhDMzAyOF9GRV9aQVJMSU5LNDU2LAorCQkJCS50eXBlICAgID0gWEMyMDI4X0FVVE8sCisJCQl9OworCisJCQlmZSA9IGR2Yl9hdHRhY2goeGMyMDI4X2F0dGFjaCwgZHZiLT5mZSwgJmNmZyk7CisJCQlpZiAoZmUgIT0gTlVMTCAmJiBmZS0+b3BzLnR1bmVyX29wcy5zZXRfY29uZmlnICE9IE5VTEwpCisJCQkJZmUtPm9wcy50dW5lcl9vcHMuc2V0X2NvbmZpZyhmZSwgJmN0cmwpOworCQl9CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCS8qIE5vIERpZ2l0YWwgVHYgU3VwcG9ydCAqLwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWkyYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtaTJjLmMKaW5kZXggZTcxYTAyNi4uYzMzMGZiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtaTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtaTJjLmMKQEAgLTk4LDcgKzk4LDcgQEAKIAljYXNlIENYMThfSFdfWjhGMDgxMV9JUl9SWF9IQVVQOgogCQlpbml0X2RhdGEtPmlyX2NvZGVzID0gUkNfTUFQX0hBVVBQQVVHRV9ORVc7CiAJCWluaXRfZGF0YS0+aW50ZXJuYWxfZ2V0X2tleV9mdW5jID0gSVJfS0JEX0dFVF9LRVlfSEFVUF9YVlI7Ci0JCWluaXRfZGF0YS0+dHlwZSA9IElSX1RZUEVfUkM1OworCQlpbml0X2RhdGEtPnR5cGUgPSBSQ19UWVBFX1JDNTsKIAkJaW5pdF9kYXRhLT5uYW1lID0gY3gtPmNhcmRfbmFtZTsKIAkJaW5mby5wbGF0Zm9ybV9kYXRhID0gaW5pdF9kYXRhOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LW1haWxib3guYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LW1haWxib3guYwppbmRleCA5NTZhYTE5Li5jNTQ1ZjNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1tYWlsYm94LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtbWFpbGJveC5jCkBAIC0xMzYsNyArMTM2LDcgQEAKIHsKIAlzdHJ1Y3QgY3gxOF9idWZmZXIgKmJ1ZjsKIAotCWlmICghcy0+ZHZiLmVuYWJsZWQgfHwgbWRsLT5ieXRlc3VzZWQgPT0gMCkKKwlpZiAocy0+ZHZiID09IE5VTEwgfHwgIXMtPmR2Yi0+ZW5hYmxlZCB8fCBtZGwtPmJ5dGVzdXNlZCA9PSAwKQogCQlyZXR1cm47CiAKIAkvKiBXZSBpZ25vcmUgbWRsIGFuZCBidWYgcmVhZHBvcyBhY2NvdW50aW5nIGhlcmUgLSBpdCBkb2Vzbid0IG1hdHRlciAqLwpAQCAtMTQ2LDcgKzE0Niw3IEBACiAJCWJ1ZiA9IGxpc3RfZmlyc3RfZW50cnkoJm1kbC0+YnVmX2xpc3QsIHN0cnVjdCBjeDE4X2J1ZmZlciwKIAkJCQkgICAgICAgbGlzdCk7CiAJCWlmIChidWYtPmJ5dGVzdXNlZCkKLQkJCWR2Yl9kbXhfc3dmaWx0ZXIoJnMtPmR2Yi5kZW11eCwKKwkJCWR2Yl9kbXhfc3dmaWx0ZXIoJnMtPmR2Yi0+ZGVtdXgsCiAJCQkJCSBidWYtPmJ1ZiwgYnVmLT5ieXRlc3VzZWQpOwogCQlyZXR1cm47CiAJfQpAQCAtMTU0LDcgKzE1NCw3IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeShidWYsICZtZGwtPmJ1Zl9saXN0LCBsaXN0KSB7CiAJCWlmIChidWYtPmJ5dGVzdXNlZCA9PSAwKQogCQkJYnJlYWs7Ci0JCWR2Yl9kbXhfc3dmaWx0ZXIoJnMtPmR2Yi5kZW11eCwgYnVmLT5idWYsIGJ1Zi0+Ynl0ZXN1c2VkKTsKKwkJZHZiX2RteF9zd2ZpbHRlcigmcy0+ZHZiLT5kZW11eCwgYnVmLT5idWYsIGJ1Zi0+Ynl0ZXN1c2VkKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXN0cmVhbXMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXN0cmVhbXMuYwppbmRleCBhYjQ2MWUyLi45NGY1ZDc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1zdHJlYW1zLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtc3RyZWFtcy5jCkBAIC0xMDcsNiArMTA3LDcgQEAKIAlzLT52aWRlb19kZXYgPSB2aWRlb19kZXY7CiAKIAkvKiBpbml0aWFsaXplIGN4MThfc3RyZWFtIGZpZWxkcyAqLworCXMtPmR2YiA9IE5VTEw7CiAJcy0+Y3ggPSBjeDsKIAlzLT50eXBlID0gdHlwZTsKIAlzLT5uYW1lID0gY3gxOF9zdHJlYW1faW5mb1t0eXBlXS5uYW1lOwpAQCAtMTQwLDEwICsxNDEsMTUgQEAKIAlpbnQgbnVtX29mZnNldCA9IGN4MThfc3RyZWFtX2luZm9bdHlwZV0ubnVtX29mZnNldDsKIAlpbnQgbnVtID0gY3gtPmluc3RhbmNlICsgY3gxOF9maXJzdF9taW5vciArIG51bV9vZmZzZXQ7CiAKLQkvKiBUaGVzZSBmb3VyIGZpZWxkcyBhcmUgYWx3YXlzIGluaXRpYWxpemVkLiBJZiB2aWRlb19kZXYgPT0gTlVMTCwgdGhlbgotCSAgIHRoaXMgc3RyZWFtIGlzIG5vdCBpbiB1c2UuIEluIHRoYXQgY2FzZSBubyBvdGhlciBmaWVsZHMgYnV0IHRoZXNlCi0JICAgZm91ciBjYW4gYmUgdXNlZC4gKi8KKwkvKgorCSAqIFRoZXNlIGZpdmUgZmllbGRzIGFyZSBhbHdheXMgaW5pdGlhbGl6ZWQuCisJICogRm9yIGFuYWxvZyBjYXB0dXJlIHJlbGF0ZWQgc3RyZWFtcywgaWYgdmlkZW9fZGV2ID09IE5VTEwgdGhlbiB0aGUKKwkgKiBzdHJlYW0gaXMgbm90IGluIHVzZS4KKwkgKiBGb3IgdGhlIFRTIHN0cmVhbSwgaWYgZHZiID09IE5VTEwgdGhlbiB0aGUgc3RyZWFtIGlzIG5vdCBpbiB1c2UuCisJICogSW4gdGhvc2UgY2FzZXMgbm8gb3RoZXIgZmllbGRzIGJ1dCB0aGVzZSBmb3VyIGNhbiBiZSB1c2VkLgorCSAqLwogCXMtPnZpZGVvX2RldiA9IE5VTEw7CisJcy0+ZHZiID0gTlVMTDsKIAlzLT5jeCA9IGN4OwogCXMtPnR5cGUgPSB0eXBlOwogCXMtPm5hbWUgPSBjeDE4X3N0cmVhbV9pbmZvW3R5cGVdLm5hbWU7CkBAIC0xNjcsNiArMTczLDIxIEBACiAKIAljeDE4X3N0cmVhbV9pbml0KGN4LCB0eXBlKTsKIAorCS8qIEFsbG9jYXRlIHRoZSBjeDE4X2R2YiBzdHJ1Y3Qgb25seSBmb3IgdGhlIFRTIG9uIGNhcmRzIHdpdGggRFRWICovCisJaWYgKHR5cGUgPT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfVFMpIHsKKwkJaWYgKGN4LT5jYXJkLT5od19hbGwgJiBDWDE4X0hXX0RWQikgeworCQkJcy0+ZHZiID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGN4MThfZHZiKSwgR0ZQX0tFUk5FTCk7CisJCQlpZiAocy0+ZHZiID09IE5VTEwpIHsKKwkJCQlDWDE4X0VSUigiQ291bGRuJ3QgYWxsb2NhdGUgY3gxOF9kdmIgc3RydWN0dXJlIgorCQkJCQkgIiBmb3IgJXNcbiIsIHMtPm5hbWUpOworCQkJCXJldHVybiAtRU5PTUVNOworCQkJfQorCQl9IGVsc2UgeworCQkJLyogRG9uJ3QgbmVlZCBidWZmZXJzIGZvciB0aGUgVFMsIGlmIHRoZXJlIGlzIG5vIERWQiAqLworCQkJcy0+YnVmZmVycyA9IDA7CisJCX0KKwl9CisKIAlpZiAobnVtX29mZnNldCA9PSAtMSkKIAkJcmV0dXJuIDA7CiAKQEAgLTIyMiwxMyArMjQzLDcgQEAKIAljb25zdCBjaGFyICpuYW1lOwogCWludCBudW0sIHJldDsKIAotCS8qIFRPRE86IFNob3VsZG4ndCB0aGlzIGJlIGEgVkZMX1RZUEVfVFJBTlNQT1JUIG9yIHNvbWV0aGluZz8KLQkgKiBXZSBuZWVkIGEgVkZMX1RZUEVfVFMgZGVmaW5lZC4KLQkgKi8KLQlpZiAoc3RyY21wKCJUUyIsIHMtPm5hbWUpID09IDApIHsKLQkJLyoganVzdCByZXR1cm4gaWYgbm8gRFZCIGlzIHN1cHBvcnRlZCAqLwotCQlpZiAoKGN4LT5jYXJkLT5od19hbGwgJiBDWDE4X0hXX0RWQikgPT0gMCkKLQkJCXJldHVybiAwOworCWlmICh0eXBlID09IENYMThfRU5DX1NUUkVBTV9UWVBFX1RTICYmIHMtPmR2YiAhPSBOVUxMKSB7CiAJCXJldCA9IGN4MThfZHZiX3JlZ2lzdGVyKHMpOwogCQlpZiAocmV0IDwgMCkgewogCQkJQ1gxOF9FUlIoIkRWQiBmYWlsZWQgdG8gcmVnaXN0ZXJcbiIpOwpAQCAtMzIwLDExICszMzUsMTMgQEAKIAkvKiBUZWFyZG93biBhbGwgc3RyZWFtcyAqLwogCWZvciAodHlwZSA9IDA7IHR5cGUgPCBDWDE4X01BWF9TVFJFQU1TOyB0eXBlKyspIHsKIAotCQkvKiBObyBzdHJ1Y3QgdmlkZW9fZGV2aWNlLCBidXQgY2FuIGhhdmUgYnVmZmVycyBhbGxvY2F0ZWQgKi8KKwkJLyogVGhlIFRTIGhhcyBhIGN4MThfZHZiIHN0cnVjdHVyZSwgbm90IGEgdmlkZW9fZGV2aWNlICovCiAJCWlmICh0eXBlID09IENYMThfRU5DX1NUUkVBTV9UWVBFX1RTKSB7Ci0JCQlpZiAoY3gtPnN0cmVhbXNbdHlwZV0uZHZiLmVuYWJsZWQpIHsKLQkJCQljeDE4X2R2Yl91bnJlZ2lzdGVyKCZjeC0+c3RyZWFtc1t0eXBlXSk7Ci0JCQkJY3gtPnN0cmVhbXNbdHlwZV0uZHZiLmVuYWJsZWQgPSBmYWxzZTsKKwkJCWlmIChjeC0+c3RyZWFtc1t0eXBlXS5kdmIgIT0gTlVMTCkgeworCQkJCWlmICh1bnJlZ2lzdGVyKQorCQkJCQljeDE4X2R2Yl91bnJlZ2lzdGVyKCZjeC0+c3RyZWFtc1t0eXBlXSk7CisJCQkJa2ZyZWUoY3gtPnN0cmVhbXNbdHlwZV0uZHZiKTsKKwkJCQljeC0+c3RyZWFtc1t0eXBlXS5kdmIgPSBOVUxMOwogCQkJCWN4MThfc3RyZWFtX2ZyZWUoJmN4LT5zdHJlYW1zW3R5cGVdKTsKIAkJCX0KIAkJCWNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtc3RyZWFtcy5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtc3RyZWFtcy5oCmluZGV4IDc3NDEyYmUuLjUxNzY1ZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXN0cmVhbXMuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1zdHJlYW1zLmgKQEAgLTMzLDcgKzMzLDggQEAKIAogc3RhdGljIGlubGluZSBib29sIGN4MThfc3RyZWFtX2VuYWJsZWQoc3RydWN0IGN4MThfc3RyZWFtICpzKQogewotCXJldHVybiBzLT52aWRlb19kZXYgfHwgcy0+ZHZiLmVuYWJsZWQgfHwKKwlyZXR1cm4gcy0+dmlkZW9fZGV2IHx8CisJICAgICAgIChzLT5kdmIgJiYgcy0+ZHZiLT5lbmFibGVkKSB8fAogCSAgICAgICAocy0+dHlwZSA9PSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9JRFggJiYKIAkJcy0+Y3gtPnN0cmVhbV9idWZmZXJzW0NYMThfRU5DX1NUUkVBTV9UWVBFX0lEWF0gIT0gMCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjMxeHgvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzF4eC9LY29uZmlnCmluZGV4IGJiMDQ5MTQuLmFlODVhN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzF4eC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzF4eC9LY29uZmlnCkBAIC0xLDkgKzEsOSBAQAogY29uZmlnIFZJREVPX0NYMjMxWFgKIAl0cmlzdGF0ZSAiQ29uZXhhbnQgY3gyMzF4eCBVU0IgdmlkZW8gY2FwdHVyZSBzdXBwb3J0IgotCWRlcGVuZHMgb24gVklERU9fREVWICYmIEkyQyAmJiBJTlBVVAorCWRlcGVuZHMgb24gVklERU9fREVWICYmIEkyQwogCXNlbGVjdCBWSURFT19UVU5FUgogCXNlbGVjdCBWSURFT19UVkVFUFJPTQotCWRlcGVuZHMgb24gVklERU9fSVIKKwlkZXBlbmRzIG9uIFJDX0NPUkUKIAlzZWxlY3QgVklERU9CVUZfVk1BTExPQwogCXNlbGVjdCBWSURFT19DWDI1ODQwCiAJc2VsZWN0IFZJREVPX0NYMjM0MVgKQEAgLTE0LDYgKzE0LDE5IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjeDIzMXh4CiAKK2NvbmZpZyBWSURFT19DWDIzMVhYX1JDCisJYm9vbCAiQ29uZXhhbnQgY3gyMzF4eCBSZW1vdGUgQ29udHJvbGxlciBhZGRpdGlvbmFsIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBSQ19DT1JFCisJZGVwZW5kcyBvbiBWSURFT19DWDIzMVhYCisJZGVmYXVsdCB5CisJLS0taGVscC0tLQorCSAgY3gyMzF4eCBoYXJkd2FyZSBoYXMgYSBidWlsdGluIFJYL1RYIHN1cHBvcnQuIEhvd2V2ZXIsIGEgZmV3CisJICBkZXNpZ25zIG9wdGVkIHRvIG5vdCB1c2UgaXQsIGJ1dCwgaW5zdGVhZCwgc29tZSBvdGhlciBoYXJkd2FyZS4KKwkgIFRoaXMgbW9kdWxlIGVuYWJsZXMgdGhlIHVzYWdlIG9mIHRob3NlIG90aGVyIGhhcmR3YXJlLCBsaWtlIHRoZQorCSAgb25lcyB1c2VkIHdpdGggSVNEQi1UIGJvYXJkcy4KKworCSAgT24gbW9zdCBjYXNlcywgYWxsIHlvdSBuZWVkIGZvciBJUiBpcyBtY2V1c2IgbW9kdWxlLgorCiBjb25maWcgVklERU9fQ1gyMzFYWF9BTFNBCiAJdHJpc3RhdGUgIkNvbmV4YW50IEN4MjMxeHggQUxTQSBhdWRpbyBtb2R1bGUiCiAJZGVwZW5kcyBvbiBWSURFT19DWDIzMVhYICYmIFNORApAQCAtMzAsNiArNDMsOCBAQAogCWRlcGVuZHMgb24gVklERU9fQ1gyMzFYWCAmJiBEVkJfQ09SRQogCXNlbGVjdCBWSURFT0JVRl9EVkIKIAlzZWxlY3QgTUVESUFfVFVORVJfWEM1MDAwIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IE1FRElBX1RVTkVSX05YUDE4MjcxIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9NQjg2QTIwUyBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCiAJLS0taGVscC0tLQogCSAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIERWQiBjYXJkcyBiYXNlZCBvbiB0aGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzF4eC9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzF4eC9NYWtlZmlsZQppbmRleCBhNmJjNGNjLi4yYzI0ODQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjMxeHgvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzMXh4L01ha2VmaWxlCkBAIC0xLDUgKzEsNiBAQAotY3gyMzF4eC1vYmpzICAgICA6PSBjeDIzMXh4LXZpZGVvLm8gY3gyMzF4eC1pMmMubyBjeDIzMXh4LWNhcmRzLm8gY3gyMzF4eC1jb3JlLm8gXAotCQkgICAgY3gyMzF4eC1hdmNvcmUubyBjeDIzMXh4LTQxNy5vIGN4MjMxeHgtcGNiLWNmZy5vIGN4MjMxeHgtdmJpLm8KK2N4MjMxeHgteSArPSBjeDIzMXh4LXZpZGVvLm8gY3gyMzF4eC1pMmMubyBjeDIzMXh4LWNhcmRzLm8gY3gyMzF4eC1jb3JlLm8KK2N4MjMxeHgteSArPSBjeDIzMXh4LWF2Y29yZS5vIGN4MjMxeHgtNDE3Lm8gY3gyMzF4eC1wY2ItY2ZnLm8gY3gyMzF4eC12YmkubworY3gyMzF4eC0kKENPTkZJR19WSURFT19DWDIzMVhYX1JDKSArPSBjeDIzMXh4LWlucHV0Lm8KIAogY3gyMzF4eC1hbHNhLW9ianMgOj0gY3gyMzF4eC1hdWRpby5vCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzF4eC9jeDIzMXh4LTQxNy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzMXh4L2N4MjMxeHgtNDE3LmMKaW5kZXggNGM3Y2FjMy4uZmM5NTI2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzMXh4L2N4MjMxeHgtNDE3LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzMXh4L2N4MjMxeHgtNDE3LmMKQEAgLTk0MCwxNCArOTQwLDE0IEBACiAJdTE2IF9idWZmZXJfc2l6ZSA9IDQwOTY7CiAJdTggKnBfYnVmZmVyOwogCi0JcF9jdXJyZW50X2Z3ID0gKHUzMiAqKXZtYWxsb2MoMTg4NDE4MCo0KTsKKwlwX2N1cnJlbnRfZncgPSB2bWFsbG9jKDE4ODQxODAgKiA0KTsKIAlwX2Z3ID0gcF9jdXJyZW50X2Z3OwogCWlmIChwX2N1cnJlbnRfZncgPT0gMCkgewogCQlkcHJpbnRrKDIsICJGQUlMISEhXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIAotCXBfYnVmZmVyID0gKHU4ICopdm1hbGxvYyg0MDk2KTsKKwlwX2J1ZmZlciA9IHZtYWxsb2MoNDA5Nik7CiAJaWYgKHBfYnVmZmVyID09IDApIHsKIAkJZHByaW50aygyLCAiRkFJTCEhIVxuIik7CiAJCXJldHVybiAtMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzF4eC9jeDIzMXh4LWF2Y29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzMXh4L2N4MjMxeHgtYXZjb3JlLmMKaW5kZXggY2Y1MGZhZi4uYzUzZTk3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzMXh4L2N4MjMxeHgtYXZjb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzMXh4L2N4MjMxeHgtYXZjb3JlLmMKQEAgLTI3NCw3ICsyNzQsNyBAQAogCiAJaWYgKGNoMV9zZXR0aW5nICE9IDApIHsKIAkJc3RhdHVzID0gYWZlX3JlYWRfYnl0ZShkZXYsIEFEQ19JTlBVVF9DSDEsICZ2YWx1ZSk7Ci0JCXZhbHVlICY9ICghSU5QVVRfU0VMX01BU0spOworCQl2YWx1ZSAmPSB+SU5QVVRfU0VMX01BU0s7CiAJCXZhbHVlIHw9IChjaDFfc2V0dGluZyAtIDEpIDw8IDQ7CiAJCXZhbHVlICY9IDB4ZmY7CiAJCXN0YXR1cyA9IGFmZV93cml0ZV9ieXRlKGRldiwgQURDX0lOUFVUX0NIMSwgdmFsdWUpOwpAQCAtMjgyLDcgKzI4Miw3IEBACiAKIAlpZiAoY2gyX3NldHRpbmcgIT0gMCkgewogCQlzdGF0dXMgPSBhZmVfcmVhZF9ieXRlKGRldiwgQURDX0lOUFVUX0NIMiwgJnZhbHVlKTsKLQkJdmFsdWUgJj0gKCFJTlBVVF9TRUxfTUFTSyk7CisJCXZhbHVlICY9IH5JTlBVVF9TRUxfTUFTSzsKIAkJdmFsdWUgfD0gKGNoMl9zZXR0aW5nIC0gMSkgPDwgNDsKIAkJdmFsdWUgJj0gMHhmZjsKIAkJc3RhdHVzID0gYWZlX3dyaXRlX2J5dGUoZGV2LCBBRENfSU5QVVRfQ0gyLCB2YWx1ZSk7CkBAIC0yOTIsNyArMjkyLDcgQEAKIAkgICA3IGxlc3MgdGhhbiB0aGUgaW5wdXQgbnVtYmVyICovCiAJaWYgKGNoM19zZXR0aW5nICE9IDApIHsKIAkJc3RhdHVzID0gYWZlX3JlYWRfYnl0ZShkZXYsIEFEQ19JTlBVVF9DSDMsICZ2YWx1ZSk7Ci0JCXZhbHVlICY9ICghSU5QVVRfU0VMX01BU0spOworCQl2YWx1ZSAmPSB+SU5QVVRfU0VMX01BU0s7CiAJCXZhbHVlIHw9IChjaDNfc2V0dGluZyAtIDEpIDw8IDQ7CiAJCXZhbHVlICY9IDB4ZmY7CiAJCXN0YXR1cyA9IGFmZV93cml0ZV9ieXRlKGRldiwgQURDX0lOUFVUX0NIMywgdmFsdWUpOwpAQCAtMzU0LDYgKzM1NCw3IEBACiAJY2FzZSBDWDIzMVhYX0JPQVJEX0NOWFRfVklERU9fR1JBQkJFUjoKIAljYXNlIENYMjMxWFhfQk9BUkRfSEFVUFBBVUdFX0VYRVRFUjoKIAljYXNlIENYMjMxWFhfQk9BUkRfSEFVUFBBVUdFX1VTQkxJVkUyOgorCWNhc2UgQ1gyMzFYWF9CT0FSRF9QVl9QTEFZVFZfVVNCX0hZQlJJRDoKIAkJaWYgKGF2bW9kZSA9PSBQT0xBUklTX0FWTU9ERV9BTkFMT0dUX1RWKSB7CiAJCQl3aGlsZSAoYWZlX3Bvd2VyX3N0YXR1cyAhPSAoRkxEX1BXUkROX1RVTklOR19CSUFTIHwKIAkJCQkJCUZMRF9QV1JETl9FTkFCTEVfUExMKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzMXh4L2N4MjMxeHgtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzF4eC9jeDIzMXh4LWNhcmRzLmMKaW5kZXggMmM3OGQxOC4uNTg4ZjNlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzMXh4L2N4MjMxeHgtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjMxeHgvY3gyMzF4eC1jYXJkcy5jCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSA8bWVkaWEvY3gyNTg0MC5oPgogI2luY2x1ZGUgImR2Yi11c2ItaWRzLmgiCiAjaW5jbHVkZSAieGM1MDAwLmgiCisjaW5jbHVkZSAidGRhMTgyNzEuaCIKIAogI2luY2x1ZGUgImN4MjMxeHguaCIKIApAQCAtMzk1LDYgKzM5Niw0NSBAQAogCQkJLmdwaW8gPSAwLAogCQl9IH0sCiAJfSwKKwlbQ1gyMzFYWF9CT0FSRF9QVl9QTEFZVFZfVVNCX0hZQlJJRF0gPSB7CisJCS5uYW1lID0gIlBpeGVsdmlldyBQbGF5VFYgVVNCIEh5YnJpZCIsCisJCS50dW5lcl90eXBlID0gVFVORVJfTlhQX1REQTE4MjcxLAorCQkudHVuZXJfYWRkciA9IDB4NjAsCisJCS5kZWNvZGVyID0gQ1gyMzFYWF9BVkRFQ09ERVIsCisJCS5vdXRwdXRfbW9kZSA9IE9VVF9NT0RFX1ZJUDExLAorCQkuZGVtb2RfeGZlcl9tb2RlID0gMCwKKwkJLmN0bF9waW5fc3RhdHVzX21hc2sgPSAweEZGRkZGRkM0LAorCQkuYWdjX2FuYWxvZ19kaWdpdGFsX3NlbGVjdF9ncGlvID0gMHgwMCwJLyogQWNjb3JkaW5nIHdpdGggUFYgY3hQb2xhcmlzLmluZiBmaWxlICovCisJCS50dW5lcl9zaWZfZ3BpbyA9IC0xLAorCQkudHVuZXJfc2NsX2dwaW8gPSAtMSwKKwkJLnR1bmVyX3NkYV9ncGlvID0gLTEsCisJCS5ncGlvX3Bpbl9zdGF0dXNfbWFzayA9IDB4NDAwMTAwMCwKKwkJLnR1bmVyX2kyY19tYXN0ZXIgPSAyLAorCQkuZGVtb2RfaTJjX21hc3RlciA9IDEsCisJCS5pcl9pMmNfbWFzdGVyID0gMiwKKwkJLnJjX21hcF9uYW1lID0gUkNfTUFQX1BJWEVMVklFV18wMDJULAorCQkuaGFzX2R2YiA9IDEsCisJCS5kZW1vZF9hZGRyID0gMHgxMCwKKwkJLm5vcm0gPSBWNEwyX1NURF9QQUxfTSwKKwkJLmlucHV0ID0ge3sKKwkJCS50eXBlID0gQ1gyMzFYWF9WTVVYX1RFTEVWSVNJT04sCisJCQkudm11eCA9IENYMjMxWFhfVklOXzNfMSwKKwkJCS5hbXV4ID0gQ1gyMzFYWF9BTVVYX1ZJREVPLAorCQkJLmdwaW8gPSAwLAorCQl9LCB7CisJCQkudHlwZSA9IENYMjMxWFhfVk1VWF9DT01QT1NJVEUxLAorCQkJLnZtdXggPSBDWDIzMVhYX1ZJTl8yXzEsCisJCQkuYW11eCA9IENYMjMxWFhfQU1VWF9MSU5FX0lOLAorCQkJLmdwaW8gPSAwLAorCQl9LCB7CisJCQkudHlwZSA9IENYMjMxWFhfVk1VWF9TVklERU8sCisJCQkudm11eCA9IENYMjMxWFhfVklOXzFfMSB8CisJCQkJKENYMjMxWFhfVklOXzFfMiA8PCA4KSB8CisJCQkJQ1gyNTg0MF9TVklERU9fT04sCisJCQkuYW11eCA9IENYMjMxWFhfQU1VWF9MSU5FX0lOLAorCQkJLmdwaW8gPSAwLAorCQl9IH0sCisJfSwKIH07CiBjb25zdCB1bnNpZ25lZCBpbnQgY3gyMzF4eF9iY291bnQgPSBBUlJBWV9TSVpFKGN4MjMxeHhfYm9hcmRzKTsKIApAQCAtNDAyLDggKzQ0Miw2IEBACiBzdHJ1Y3QgdXNiX2RldmljZV9pZCBjeDIzMXh4X2lkX3RhYmxlW10gPSB7CiAJe1VTQl9ERVZJQ0UoMHgwNTcyLCAweDVBM0MpLAogCSAuZHJpdmVyX2luZm8gPSBDWDIzMVhYX0JPQVJEX1VOS05PV059LAotCXtVU0JfREVWSUNFX1ZFUihVU0JfVklEX1BJWEVMVklFVywgVVNCX1BJRF9QSVhFTFZJRVdfU0JUVkQsIDB4NDAwMCwweDRmZmYpLAotCSAuZHJpdmVyX2luZm8gPSBDWDIzMVhYX0JPQVJEX1VOS05PV059LAogCXtVU0JfREVWSUNFKDB4MDU3MiwgMHg1OEEyKSwKIAkgLmRyaXZlcl9pbmZvID0gQ1gyMzFYWF9CT0FSRF9DTlhUX0NBUlJBRVJBfSwKIAl7VVNCX0RFVklDRSgweDA1NzIsIDB4NThBMSksCkBAIC00MjQsNiArNDYyLDggQEAKIAkgLmRyaXZlcl9pbmZvID0gQ1gyMzFYWF9CT0FSRF9IQVVQUEFVR0VfRVhFVEVSfSwKIAl7VVNCX0RFVklDRSgweDIwNDAsIDB4YzIwMCksCiAJIC5kcml2ZXJfaW5mbyA9IENYMjMxWFhfQk9BUkRfSEFVUFBBVUdFX1VTQkxJVkUyfSwKKwl7VVNCX0RFVklDRV9WRVIoVVNCX1ZJRF9QSVhFTFZJRVcsIFVTQl9QSURfUElYRUxWSUVXX1NCVFZELCAweDQwMDAsIDB4NDAwMSksCisJIC5kcml2ZXJfaW5mbyA9IENYMjMxWFhfQk9BUkRfUFZfUExBWVRWX1VTQl9IWUJSSUR9LAogCXt9LAogfTsKIApAQCAtNDUzLDYgKzQ5MywxNiBAQAogCQkJCQkgICAgICAgMSk7CiAJCQltc2xlZXAoMTApOwogCQl9CisJfSBlbHNlIGlmIChkZXYtPnR1bmVyX3R5cGUgPT0gVFVORVJfTlhQX1REQTE4MjcxKSB7CisJCXN3aXRjaCAoY29tbWFuZCkgeworCQljYXNlIFREQTE4MjcxX0NBTExCQUNLX0NNRF9BR0NfRU5BQkxFOgorCQkJaWYgKGRldi0+bW9kZWwgPT0gQ1gyMzFYWF9CT0FSRF9QVl9QTEFZVFZfVVNCX0hZQlJJRCkKKwkJCQlyYyA9IGN4MjMxeHhfc2V0X2FnY19hbmFsb2dfZGlnaXRhbF9tdXhfc2VsZWN0KGRldiwgYXJnKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmMgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KIAl9CiAJcmV0dXJuIHJjOwogfQpAQCAtNjE1LDggKzY2NSwxMSBAQAogCiAJY3gyMzF4eF9yZW1vdmVfZnJvbV9kZXZsaXN0KGRldik7CiAKKwkvKiBSZWxlYXNlIEkyQyBidXNlcyAqLwogCWN4MjMxeHhfZGV2X3VuaW5pdChkZXYpOwogCisJY3gyMzF4eF9pcl9leGl0KGRldik7CisKIAl1c2JfcHV0X2RldihkZXYtPnVkZXYpOwogCiAJLyogTWFyayBkZXZpY2UgYXMgdW51c2VkICovCkBAIC03MzEsMTYgKzc4NCwxNCBAQAogCXJldHZhbCA9IGN4MjMxeHhfcmVnaXN0ZXJfYW5hbG9nX2RldmljZXMoZGV2KTsKIAlpZiAocmV0dmFsIDwgMCkgewogCQljeDIzMXh4X3JlbGVhc2VfcmVzb3VyY2VzKGRldik7Ci0JCWdvdG8gZmFpbF9yZWdfZGV2aWNlczsKKwkJcmV0dXJuIHJldHZhbDsKIAl9CiAKKwljeDIzMXh4X2lyX2luaXQoZGV2KTsKKwogCWN4MjMxeHhfaW5pdF9leHRlbnNpb24oZGV2KTsKIAogCXJldHVybiAwOwotCi1mYWlsX3JlZ19kZXZpY2VzOgotCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKLQlyZXR1cm4gcmV0dmFsOwogfQogCiAjaWYgZGVmaW5lZChDT05GSUdfTU9EVUxFUykgJiYgZGVmaW5lZChNT0RVTEUpCkBAIC03NjIsOCArODEzLDE0IEBACiAJSU5JVF9XT1JLKCZkZXYtPnJlcXVlc3RfbW9kdWxlX3drLCByZXF1ZXN0X21vZHVsZV9hc3luYyk7CiAJc2NoZWR1bGVfd29yaygmZGV2LT5yZXF1ZXN0X21vZHVsZV93ayk7CiB9CisKK3N0YXRpYyB2b2lkIGZsdXNoX3JlcXVlc3RfbW9kdWxlcyhzdHJ1Y3QgY3gyMzF4eCAqZGV2KQoreworCWZsdXNoX3dvcmtfc3luYygmZGV2LT5yZXF1ZXN0X21vZHVsZV93ayk7Cit9CiAjZWxzZQogI2RlZmluZSByZXF1ZXN0X21vZHVsZXMoZGV2KQorI2RlZmluZSBmbHVzaF9yZXF1ZXN0X21vZHVsZXMoZGV2KQogI2VuZGlmIC8qIENPTkZJR19NT0RVTEVTICovCiAKIC8qCkBAIC0xMDk2LDYgKzExNTMsOCBAQAogCWlmICghZGV2LT51ZGV2KQogCQlyZXR1cm47CiAKKwlmbHVzaF9yZXF1ZXN0X21vZHVsZXMoZGV2KTsKKwogCS8qIGRlbGV0ZSB2NGwyIGRldmljZSAqLwogCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJmRldi0+djRsMl9kZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjMxeHgvY3gyMzF4eC1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjMxeHgvY3gyMzF4eC1jb3JlLmMKaW5kZXggNGFmNDZmYy4uN2Q2MmQ1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzMXh4L2N4MjMxeHgtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzF4eC9jeDIzMXh4LWNvcmUuYwpAQCAtNzQwLDYgKzc0MCw3IEBACiAJCWNhc2UgQ1gyMzFYWF9CT0FSRF9DTlhUX1JERV8yNTNTOgogCQljYXNlIENYMjMxWFhfQk9BUkRfQ05YVF9SRFVfMjUzUzoKIAkJY2FzZSBDWDIzMVhYX0JPQVJEX0hBVVBQQVVHRV9FWEVURVI6CisJCWNhc2UgQ1gyMzFYWF9CT0FSRF9QVl9QTEFZVFZfVVNCX0hZQlJJRDoKIAkJZXJyQ29kZSA9IGN4MjMxeHhfc2V0X2FnY19hbmFsb2dfZGlnaXRhbF9tdXhfc2VsZWN0KGRldiwgMCk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKQEAgLTEyODgsNyArMTI4OSw3IEBACiAJLyogSW50ZXJuYWwgTWFzdGVyIDMgQnVzICovCiAJZGV2LT5pMmNfYnVzWzJdLm5yID0gMjsKIAlkZXYtPmkyY19idXNbMl0uZGV2ID0gZGV2OwotCWRldi0+aTJjX2J1c1syXS5pMmNfcGVyaW9kID0gSTJDX1NQRUVEXzQwMEs7CS8qIDQwMGtIeiAqLworCWRldi0+aTJjX2J1c1syXS5pMmNfcGVyaW9kID0gSTJDX1NQRUVEXzEwMEs7CS8qIDEwMGtIeiAqLwogCWRldi0+aTJjX2J1c1syXS5pMmNfbm9zdG9wID0gMDsKIAlkZXYtPmkyY19idXNbMl0uaTJjX3Jlc2VydmUgPSAwOwogCkBAIC0xMzgxLDYgKzEzODIsNyBAQAogCWNhc2UgQ1gyMzFYWF9CT0FSRF9DTlhUX1JERV8yNTNTOgogCWNhc2UgQ1gyMzFYWF9CT0FSRF9DTlhUX1JEVV8yNTNTOgogCWNhc2UgQ1gyMzFYWF9CT0FSRF9IQVVQUEFVR0VfRVhFVEVSOgorCWNhc2UgQ1gyMzFYWF9CT0FSRF9QVl9QTEFZVFZfVVNCX0hZQlJJRDoKIAllcnJDb2RlID0gY3gyMzF4eF9zZXRfYWdjX2FuYWxvZ19kaWdpdGFsX211eF9zZWxlY3QoZGV2LCAwKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTE1MTMsNyArMTUxNSw3IEBACiAKIAlpZiAoc2FkZHJfbGVuID09IDApCiAJCXNhZGRyID0gMDsKLQllbHNlIGlmIChzYWRkcl9sZW4gPT0gMCkKKwllbHNlIGlmIChzYWRkcl9sZW4gPT0gMSkKIAkJc2FkZHIgJj0gMHhmZjsKIAogCS8qIHByZXBhcmUgeGZlcl9kYXRhIHN0cnVjdCAqLwpAQCAtMTU2NCw3ICsxNTY2LDcgQEAKIAogCWlmIChzYWRkcl9sZW4gPT0gMCkKIAkJc2FkZHIgPSAwOwotCWVsc2UgaWYgKHNhZGRyX2xlbiA9PSAwKQorCWVsc2UgaWYgKHNhZGRyX2xlbiA9PSAxKQogCQlzYWRkciAmPSAweGZmOwogCiAJLyogcHJlcGFyZSB4ZmVyX2RhdGEgc3RydWN0ICovCkBAIC0xNTk4LDcgKzE2MDAsNyBAQAogCiAJaWYgKHNhZGRyX2xlbiA9PSAwKQogCQlzYWRkciA9IDA7Ci0JZWxzZSBpZiAoc2FkZHJfbGVuID09IDApCisJZWxzZSBpZiAoc2FkZHJfbGVuID09IDEpCiAJCXNhZGRyICY9IDB4ZmY7CiAKIAkvKiBwcmVwYXJlIHhmZXJfZGF0YSBzdHJ1Y3QgKi8KQEAgLTE2MzksNyArMTY0MSw3IEBACiAKIAlpZiAoc2FkZHJfbGVuID09IDApCiAJCXNhZGRyID0gMDsKLQllbHNlIGlmIChzYWRkcl9sZW4gPT0gMCkKKwllbHNlIGlmIChzYWRkcl9sZW4gPT0gMSkKIAkJc2FkZHIgJj0gMHhmZjsKIAogCS8qIHByZXBhcmUgeGZlcl9kYXRhIHN0cnVjdCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzMXh4L2N4MjMxeHgtZHZiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjMxeHgvY3gyMzF4eC1kdmIuYwppbmRleCA1ZmViM2VlLi5mZTU5YTFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjMxeHgvY3gyMzF4eC1kdmIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjMxeHgvY3gyMzF4eC1kdmIuYwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgInRkYTE4MjcxLmgiCiAjaW5jbHVkZSAiczVoMTQxMS5oIgogI2luY2x1ZGUgImxnZHQzMzA1LmgiCisjaW5jbHVkZSAibWI4NmEyMHMuaCIKIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJkcml2ZXIgZm9yIGN4MjMxeHggYmFzZWQgRFZCIGNhcmRzIik7CiBNT0RVTEVfQVVUSE9SKCJTcmluaXZhc2EgRGVldmkgPHNyaW5pdmFzYS5kZWV2aUBjb25leGFudC5jb20+Iik7CkBAIC04OCw2ICs4OSwxMSBAQAogCQkgICAgICAuaWZfbHZsID0gMSwgLnJmYWdjX3RvcCA9IDB4MzcsIH0sCiB9OwogCitzdGF0aWMgc3RydWN0IHRkYTE4MjcxX3N0ZF9tYXAgbWI4NmEyMHNfdGRhMTgyNzFfY29uZmlnID0geworCS5kdmJ0XzYgICA9IHsgLmlmX2ZyZXEgPSAzMzAwLCAuYWdjX21vZGUgPSAzLCAuc3RkID0gNCwKKwkJICAgICAgLmlmX2x2bCA9IDcsIC5yZmFnY190b3AgPSAweDM3LCB9LAorfTsKKwogc3RhdGljIHN0cnVjdCB0ZGExODI3MV9jb25maWcgY254dF9yZGUyNTNzX3R1bmVyY29uZmlnID0gewogCS5zdGRfbWFwID0gJmNueHRfcmRlMjUzc190ZGExODI3MV9zdGRfbWFwLAogCS5nYXRlICAgID0gVERBMTgyNzFfR0FURV9BTkFMT0csCkBAIC0xMzUsNiArMTQxLDE3IEBACiAJLmdhdGUgICAgPSBUREExODI3MV9HQVRFX0RJR0lUQUwsCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG1iODZhMjBzX2NvbmZpZyBwdl9tYjg2YTIwc19jb25maWcgPSB7CisJLmRlbW9kX2FkZHJlc3MgPSAweDEwLAorCS5pc19zZXJpYWwgPSB0cnVlLAorfTsKKworc3RhdGljIHN0cnVjdCB0ZGExODI3MV9jb25maWcgcHZfdGRhMTgyNzFfY29uZmlnID0geworCS5zdGRfbWFwID0gJm1iODZhMjBzX3RkYTE4MjcxX2NvbmZpZywKKwkuZ2F0ZSAgICA9IFREQTE4MjcxX0dBVEVfRElHSVRBTCwKKwkuc21hbGxfaTJjID0gVERBMTgyNzFfMDNfQllURV9DSFVOS19JTklULAorfTsKKwogc3RhdGljIGlubGluZSB2b2lkIHByaW50X2Vycl9zdGF0dXMoc3RydWN0IGN4MjMxeHggKmRldiwgaW50IHBhY2tldCwgaW50IHN0YXR1cykKIHsKIAljaGFyICplcnJtc2cgPSAiVW5rbm93biI7CkBAIC02ODcsNiArNzA0LDI5IEBACiAJCQkgICAmaGN3X3RkYTE4MjcxX2NvbmZpZyk7CiAJCWJyZWFrOwogCisJY2FzZSBDWDIzMVhYX0JPQVJEX1BWX1BMQVlUVl9VU0JfSFlCUklEOgorCisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBsb29raW5nIGZvciBkZW1vZCBvbiBpMmMgYnVzOiAlZFxuIiwKKwkJICAgICAgIF9fZnVuY19fLCBpMmNfYWRhcHRlcl9pZCgmZGV2LT5pMmNfYnVzW2Rldi0+Ym9hcmQudHVuZXJfaTJjX21hc3Rlcl0uaTJjX2FkYXApKTsKKworCQlkZXYtPmR2Yi0+ZnJvbnRlbmQgPSBkdmJfYXR0YWNoKG1iODZhMjBzX2F0dGFjaCwKKwkJCQkJCSZwdl9tYjg2YTIwc19jb25maWcsCisJCQkJCQkmZGV2LT5pMmNfYnVzW2Rldi0+Ym9hcmQuZGVtb2RfaTJjX21hc3Rlcl0uaTJjX2FkYXApOworCisJCWlmIChkZXYtPmR2Yi0+ZnJvbnRlbmQgPT0gTlVMTCkgeworCQkJcHJpbnRrKERSSVZFUl9OQU1FCisJCQkgICAgICAgIjogRmFpbGVkIHRvIGF0dGFjaCBtYjg2YTIwcyBkZW1vZFxuIik7CisJCQlyZXN1bHQgPSAtRUlOVkFMOworCQkJZ290byBvdXRfZnJlZTsKKwkJfQorCisJCS8qIGRlZmluZSBnZW5lcmFsLXB1cnBvc2UgY2FsbGJhY2sgcG9pbnRlciAqLworCQlkdmItPmZyb250ZW5kLT5jYWxsYmFjayA9IGN4MjMxeHhfdHVuZXJfY2FsbGJhY2s7CisKKwkJZHZiX2F0dGFjaCh0ZGExODI3MV9hdHRhY2gsIGRldi0+ZHZiLT5mcm9udGVuZCwKKwkJCSAgIDB4NjAsICZkZXYtPmkyY19idXNbZGV2LT5ib2FyZC50dW5lcl9pMmNfbWFzdGVyXS5pMmNfYWRhcCwKKwkJCSAgICZwdl90ZGExODI3MV9jb25maWcpOworCQlicmVhazsKIAogCWRlZmF1bHQ6CiAJCXByaW50ayhLRVJOX0VSUiAiJXMvMjogVGhlIGZyb250ZW5kIG9mIHlvdXIgRFZCL0FUU0MgY2FyZCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzF4eC9jeDIzMXh4LWlucHV0LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjMxeHgvY3gyMzF4eC1pbnB1dC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1ZTE0Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjMxeHgvY3gyMzF4eC1pbnB1dC5jCkBAIC0wLDAgKzEsMTEyIEBACisvKgorICogICBjeDIzMXh4IElSIGdsdWUgZHJpdmVyCisgKgorICogICBDb3B5cmlnaHQgKEMpIDIwMTAgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+CisgKgorICogICBQb2xhcmlzIChjeDIzMXh4KSBoYXMgaXRzIHN1cHBvcnQgZm9yIElSJ3Mgd2l0aCBhIGRlc2lnbiBjbG9zZSB0byBNQ0UuCisgKiAgIGhvd2V2ZXIsIGEgZmV3IGRlc2lnbnMgYXJlIHVzaW5nIGFuIGV4dGVybmFsIEkyQyBjaGlwIGZvciBJUiwgaW5zdGVhZAorICogICBvZiB1c2luZyB0aGUgb25lIHByb3ZpZGVkIGJ5IHRoZSBjaGlwLgorICogICBUaGlzIGRyaXZlciBwcm92aWRlcyBzdXBwb3J0IGZvciB0aG9zZSBleHRyYSBkZXZpY2VzCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHZlcnNpb24gMi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgImN4MjMxeHguaCIKKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKyNkZWZpbmUgTU9EVUxFX05BTUUgImN4MjMxeHgtaW5wdXQiCisKK3N0YXRpYyBpbnQgZ2V0X2tleV9pc2RidChzdHJ1Y3QgSVJfaTJjICppciwgdTMyICppcl9rZXksCisJCQkgdTMyICppcl9yYXcpCit7CisJdTgJY21kLCBzY2FuY29kZTsKKworCWRldl9kYmcoJmlyLT5yYy0+aW5wdXRfZGV2LT5kZXYsICIlc1xuIiwgX19mdW5jX18pOworCisJCS8qIHBvbGwgSVIgY2hpcCAqLworCWlmICgxICE9IGkyY19tYXN0ZXJfcmVjdihpci0+YywgJmNtZCwgMSkpCisJCXJldHVybiAtRUlPOworCisJLyogaXQgc2VlbXMgdGhhdCAweEZFIGluZGljYXRlcyB0aGF0IGEgYnV0dG9uIGlzIHN0aWxsIGhvbGQKKwkgICBkb3duLCB3aGlsZSAweGZmIGluZGljYXRlcyB0aGF0IG5vIGJ1dHRvbiBpcyBob2xkCisJICAgZG93bi4gMHhmZSBzZXF1ZW5jZXMgYXJlIHNvbWV0aW1lcyBpbnRlcnJ1cHRlZCBieSAweEZGICovCisKKwlpZiAoY21kID09IDB4ZmYpCisJCXJldHVybiAwOworCisJc2NhbmNvZGUgPQorCQkgKChjbWQgJiAweDAxKSA/IDB4ODAgOiAwKSB8CisJCSAoKGNtZCAmIDB4MDIpID8gMHg0MCA6IDApIHwKKwkJICgoY21kICYgMHgwNCkgPyAweDIwIDogMCkgfAorCQkgKChjbWQgJiAweDA4KSA/IDB4MTAgOiAwKSB8CisJCSAoKGNtZCAmIDB4MTApID8gMHgwOCA6IDApIHwKKwkJICgoY21kICYgMHgyMCkgPyAweDA0IDogMCkgfAorCQkgKChjbWQgJiAweDQwKSA/IDB4MDIgOiAwKSB8CisJCSAoKGNtZCAmIDB4ODApID8gMHgwMSA6IDApOworCisJZGV2X2RiZygmaXItPnJjLT5pbnB1dF9kZXYtPmRldiwgImNtZCAlMDJ4LCBzY2FuID0gJTAyeFxuIiwKKwkJY21kLCBzY2FuY29kZSk7CisKKwkqaXJfa2V5ID0gc2NhbmNvZGU7CisJKmlyX3JhdyA9IHNjYW5jb2RlOworCXJldHVybiAxOworfQorCitpbnQgY3gyMzF4eF9pcl9pbml0KHN0cnVjdCBjeDIzMXh4ICpkZXYpCit7CisJc3RydWN0IGkyY19ib2FyZF9pbmZvIGluZm87CisJdTggaXJfaTJjX2J1czsKKworCWRldl9kYmcoJmRldi0+dWRldi0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKKworCS8qIE9ubHkgaW5pdGlhbGl6ZSBpZiBhIHJjIGtleWNvZGUgbWFwIGlzIGRlZmluZWQgKi8KKwlpZiAoIWN4MjMxeHhfYm9hcmRzW2Rldi0+bW9kZWxdLnJjX21hcF9uYW1lKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJlcXVlc3RfbW9kdWxlKCJpci1rYmQtaTJjIik7CisKKwltZW1zZXQoJmluZm8sIDAsIHNpemVvZihzdHJ1Y3QgaTJjX2JvYXJkX2luZm8pKTsKKwltZW1zZXQoJmRldi0+aW5pdF9kYXRhLCAwLCBzaXplb2YoZGV2LT5pbml0X2RhdGEpKTsKKwlkZXYtPmluaXRfZGF0YS5yY19kZXYgPSByY19hbGxvY2F0ZV9kZXZpY2UoKTsKKwlpZiAoIWRldi0+aW5pdF9kYXRhLnJjX2RldikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkZXYtPmluaXRfZGF0YS5uYW1lID0gY3gyMzF4eF9ib2FyZHNbZGV2LT5tb2RlbF0ubmFtZTsKKworCXN0cmxjcHkoaW5mby50eXBlLCAiaXJfdmlkZW8iLCBJMkNfTkFNRV9TSVpFKTsKKwlpbmZvLnBsYXRmb3JtX2RhdGEgPSAmZGV2LT5pbml0X2RhdGE7CisKKwkvKgorCSAqIEJvYXJkLWRlcGVuZGVudCB2YWx1ZXMKKwkgKgorCSAqIEZvciBub3csIHRoZXJlJ3MganVzdCBvbmUgdHlwZSBvZiBoYXJkd2FyZSBkZXNpZ24gdXNpbmcKKwkgKiBhbiBpMmMgZGV2aWNlLgorCSAqLworCWRldi0+aW5pdF9kYXRhLmdldF9rZXkgPSBnZXRfa2V5X2lzZGJ0OworCWRldi0+aW5pdF9kYXRhLmlyX2NvZGVzID0gY3gyMzF4eF9ib2FyZHNbZGV2LT5tb2RlbF0ucmNfbWFwX25hbWU7CisJLyogVGhlIGkyYyBtaWNyby1jb250cm9sbGVyIG9ubHkgb3V0cHV0cyB0aGUgY21kIHBhcnQgb2YgTkVDIHByb3RvY29sICovCisJZGV2LT5pbml0X2RhdGEucmNfZGV2LT5zY2FubWFzayA9IDB4ZmY7CisJZGV2LT5pbml0X2RhdGEucmNfZGV2LT5kcml2ZXJfbmFtZSA9ICJjeDIzMXh4IjsKKwlkZXYtPmluaXRfZGF0YS50eXBlID0gUkNfVFlQRV9ORUM7CisJaW5mby5hZGRyID0gMHgzMDsKKworCS8qIExvYWQgYW5kIGJpbmQgaXIta2JkLWkyYyAqLworCWlyX2kyY19idXMgPSBjeDIzMXh4X2JvYXJkc1tkZXYtPm1vZGVsXS5pcl9pMmNfbWFzdGVyOworCWRldl9kYmcoJmRldi0+dWRldi0+ZGV2LCAiVHJ5aW5nIHRvIGJpbmQgaXIgYXQgYnVzICVkLCBhZGRyIDB4JTAyeFxuIiwKKwkJaXJfaTJjX2J1cywgaW5mby5hZGRyKTsKKwlpMmNfbmV3X2RldmljZSgmZGV2LT5pMmNfYnVzW2lyX2kyY19idXNdLmkyY19hZGFwLCAmaW5mbyk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBjeDIzMXh4X2lyX2V4aXQoc3RydWN0IGN4MjMxeHggKmRldikKK3sKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzF4eC9jeDIzMXh4LXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjMxeHgvY3gyMzF4eC12aWRlby5jCmluZGV4IGIxM2I2OWYuLjdlM2U4YzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzF4eC9jeDIzMXh4LXZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzMXh4L2N4MjMxeHgtdmlkZW8uYwpAQCAtMjA0NCwxNSArMjA0NCw2IEBACiAJcmV0dXJuIHZpZGVvYnVmX2RxYnVmKCZmaC0+dmJfdmlkcSwgYiwgZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOwogfQogCi0jaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCi1zdGF0aWMgaW50IHZpZGlvY2dtYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdmlkZW9fbWJ1ZiAqbWJ1ZikKLXsKLQlzdHJ1Y3QgY3gyMzF4eF9maCAqZmggPSBwcml2OwotCi0JcmV0dXJuIHZpZGVvYnVmX2NnbWJ1ZigmZmgtPnZiX3ZpZHEsIG1idWYsIDgpOwotfQotI2VuZGlmCi0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBSQURJTyBFU1BFQ0lGSUMgSU9DVExTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTI1MDcsOSArMjQ5OCw2IEBACiAJLnZpZGlvY19nX3JlZ2lzdGVyICAgICAgICAgICAgID0gdmlkaW9jX2dfcmVnaXN0ZXIsCiAJLnZpZGlvY19zX3JlZ2lzdGVyICAgICAgICAgICAgID0gdmlkaW9jX3NfcmVnaXN0ZXIsCiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKLQkudmlkaW9jZ21idWYgICAgICAgICAgICAgICAgICAgPSB2aWRpb2NnbWJ1ZiwKLSNlbmRpZgogfTsKIAogc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgY3gyMzF4eF92YmlfdGVtcGxhdGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjMxeHgvY3gyMzF4eC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzMXh4L2N4MjMxeHguaAppbmRleCBkMDY3ZGY5Li43MmJiZWEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjMxeHgvY3gyMzF4eC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzF4eC9jeDIzMXh4LmgKQEAgLTM0LDcgKzM0LDggQEAKIAogI2luY2x1ZGUgPG1lZGlhL3ZpZGVvYnVmLXZtYWxsb2MuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgotI2luY2x1ZGUgPG1lZGlhL2lyLWNvcmUuaD4KKyNpbmNsdWRlIDxtZWRpYS9yYy1jb3JlLmg+CisjaW5jbHVkZSA8bWVkaWEvaXIta2JkLWkyYy5oPgogI2luY2x1ZGUgPG1lZGlhL3ZpZGVvYnVmLWR2Yi5oPgogCiAjaW5jbHVkZSAiY3gyMzF4eC1yZWcuaCIKQEAgLTYyLDYgKzYzLDcgQEAKICNkZWZpbmUgQ1gyMzFYWF9CT0FSRF9DTlhUX1JEVV8yNTAJNwogI2RlZmluZSBDWDIzMVhYX0JPQVJEX0hBVVBQQVVHRV9FWEVURVIgIDgKICNkZWZpbmUgQ1gyMzFYWF9CT0FSRF9IQVVQUEFVR0VfVVNCTElWRTIgOQorI2RlZmluZSBDWDIzMVhYX0JPQVJEX1BWX1BMQVlUVl9VU0JfSFlCUklEIDEwCiAKIC8qIExpbWl0cyBtaW5pbXVtIGFuZCBkZWZhdWx0IG51bWJlciBvZiBidWZmZXJzICovCiAjZGVmaW5lIENYMjMxWFhfTUlOX0JVRiAgICAgICAgICAgICAgICAgNApAQCAtMzQ0LDYgKzM0NiwxMCBAQAogCS8qIGkyYyBtYXN0ZXJzICovCiAJdTggdHVuZXJfaTJjX21hc3RlcjsKIAl1OCBkZW1vZF9pMmNfbWFzdGVyOworCXU4IGlyX2kyY19tYXN0ZXI7CisKKwkvKiBmb3IgZGV2aWNlcyB3aXRoIEkyQyBjaGlwcyBmb3IgSVIgKi8KKwljaGFyICpyY19tYXBfbmFtZTsKIAogCXVuc2lnbmVkIGludCBtYXhfcmFuZ2VfNjQwXzQ4MDoxOwogCXVuc2lnbmVkIGludCBoYXNfZHZiOjE7CkBAIC0zNTYsNyArMzYyLDcgQEAKIAogCXN0cnVjdCBjeDIzMXh4X2lucHV0IGlucHV0W01BWF9DWDIzMVhYX0lOUFVUXTsKIAlzdHJ1Y3QgY3gyMzF4eF9pbnB1dCByYWRpbzsKLQlzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgKmlyX2NvZGVzOworCXN0cnVjdCByY19tYXAgKmlyX2NvZGVzOwogfTsKIAogLyogZGV2aWNlIHN0YXRlcyAqLwpAQCAtNjA1LDYgKzYxMSw5IEBACiAKIAlzdHJ1Y3QgY3gyMzF4eF9ib2FyZCBib2FyZDsKIAorCS8qIEZvciBJMkMgSVIgc3VwcG9ydCAqLworCXN0cnVjdCBJUl9pMmNfaW5pdF9kYXRhICAgIGluaXRfZGF0YTsKKwogCXVuc2lnbmVkIGludCBzdHJlYW1fb246MTsJLyogTG9ja3Mgc3RyZWFtcyAqLwogCXVuc2lnbmVkIGludCB2Ymlfc3RyZWFtX29uOjE7CS8qIExvY2tzIHN0cmVhbXMgZm9yIFZCSSAqLwogCXVuc2lnbmVkIGludCBoYXNfYXVkaW9fY2xhc3M6MTsKQEAgLTYxNiw4ICs2MjUsNiBAQAogCXN0cnVjdCB2NGwyX3N1YmRldiAqc2RfY3gyNTg0MDsKIAlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkX3R1bmVyOwogCi0Jc3RydWN0IGN4MjMxeHhfSVIgKmlyOwotCiAJc3RydWN0IHdvcmtfc3RydWN0IHdxX3RyaWdnZXI7CQkvKiBUcmlnZ2VyIHRvIHN0YXJ0L3N0b3AgYXVkaW8gZm9yIGFsc2EgbW9kdWxlICovCiAJYXRvbWljX3QJICAgc3RyZWFtX3N0YXJ0ZWQ7CS8qIHN0cmVhbSBzaG91bGQgYmUgcnVubmluZyBpZiB0cnVlICovCiAKQEAgLTk1NCw2ICs5NjEsMTcgQEAKIGV4dGVybiBpbnQgY3gyMzF4eF80MTdfcmVnaXN0ZXIoc3RydWN0IGN4MjMxeHggKmRldik7CiBleHRlcm4gdm9pZCBjeDIzMXh4XzQxN191bnJlZ2lzdGVyKHN0cnVjdCBjeDIzMXh4ICpkZXYpOwogCisvKiBjeDIzODg1LWlucHV0LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisjaWYgZGVmaW5lZChDT05GSUdfVklERU9fQ1gyMzFYWF9SQykKK2ludCBjeDIzMXh4X2lyX2luaXQoc3RydWN0IGN4MjMxeHggKmRldik7Cit2b2lkIGN4MjMxeHhfaXJfZXhpdChzdHJ1Y3QgY3gyMzF4eCAqZGV2KTsKKyNlbHNlCisjZGVmaW5lIGN4MjMxeHhfaXJfaW5pdChkZXYpCSgwKQorI2RlZmluZSBjeDIzMXh4X2lyX2V4aXQoZGV2KQkoMCkKKyNlbmRpZgorCisKIC8qIHByaW50ayBtYWNyb3MgKi8KIAogI2RlZmluZSBjeDIzMXh4X2VycihmbXQsIGFyZy4uLikgZG8ge1wKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzQxeC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzNDF4LmMKaW5kZXggZTVjM2M4ZC4uMTAzZWY2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzNDF4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzNDF4LmMKQEAgLTg1Myw5ICs4NTMsOSBAQAogfQogRVhQT1JUX1NZTUJPTChjeDIzNDF4X2N0cmxfcXVlcnkpOwogCi1jb25zdCBjaGFyICoqY3gyMzQxeF9jdHJsX2dldF9tZW51KGNvbnN0IHN0cnVjdCBjeDIzNDF4X21wZWdfcGFyYW1zICpwLCB1MzIgaWQpCitjb25zdCBjaGFyICogY29uc3QgKmN4MjM0MXhfY3RybF9nZXRfbWVudShjb25zdCBzdHJ1Y3QgY3gyMzQxeF9tcGVnX3BhcmFtcyAqcCwgdTMyIGlkKQogewotCXN0YXRpYyBjb25zdCBjaGFyICptcGVnX3N0cmVhbV90eXBlX3dpdGhvdXRfdHNbXSA9IHsKKwlzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG1wZWdfc3RyZWFtX3R5cGVfd2l0aG91dF90c1tdID0gewogCQkiTVBFRy0yIFByb2dyYW0gU3RyZWFtIiwKIAkJIiIsCiAJCSJNUEVHLTEgU3lzdGVtIFN0cmVhbSIsCkBAIC05NTIsNyArOTUyLDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgY3RybHMtPmNvdW50OyBpKyspIHsKIAkJc3RydWN0IHY0bDJfZXh0X2NvbnRyb2wgKmN0cmwgPSBjdHJscy0+Y29udHJvbHMgKyBpOwogCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgcWN0cmw7Ci0JCWNvbnN0IGNoYXIgKiptZW51X2l0ZW1zID0gTlVMTDsKKwkJY29uc3QgY2hhciAqIGNvbnN0ICptZW51X2l0ZW1zID0gTlVMTDsKIAogCQlxY3RybC5pZCA9IGN0cmwtPmlkOwogCQllcnIgPSBjeDIzNDF4X2N0cmxfcXVlcnkocGFyYW1zLCAmcWN0cmwpOwpAQCAtMTEzNSw3ICsxMTM1LDcgQEAKIAogc3RhdGljIGNvbnN0IGNoYXIgKmN4MjM0MXhfbWVudV9pdGVtKGNvbnN0IHN0cnVjdCBjeDIzNDF4X21wZWdfcGFyYW1zICpwLCB1MzIgaWQpCiB7Ci0JY29uc3QgY2hhciAqKm1lbnUgPSBjeDIzNDF4X2N0cmxfZ2V0X21lbnUocCwgaWQpOworCWNvbnN0IGNoYXIgKiBjb25zdCAqbWVudSA9IGN4MjM0MXhfY3RybF9nZXRfbWVudShwLCBpZCk7CiAJc3RydWN0IHY0bDJfZXh0X2NvbnRyb2wgY3RybDsKIAogCWlmIChtZW51ID09IE5VTEwpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9LY29uZmlnCmluZGV4IGUxMzY3YjMuLjZiNGE1MTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9LY29uZmlnCkBAIC01LDcgKzUsNyBAQAogCXNlbGVjdCBWSURFT19CVENYCiAJc2VsZWN0IFZJREVPX1RVTkVSCiAJc2VsZWN0IFZJREVPX1RWRUVQUk9NCi0JZGVwZW5kcyBvbiBJUl9DT1JFCisJZGVwZW5kcyBvbiBSQ19DT1JFCiAJc2VsZWN0IFZJREVPQlVGX0RWQgogCXNlbGVjdCBWSURFT0JVRl9ETUFfU0cKIAlzZWxlY3QgVklERU9fQ1gyNTg0MApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2NpbWF4Mi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2NpbWF4Mi5jCmluZGV4IGM5NWU3YmMuLjIwOWI5NzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jaW1heDIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY2ltYXgyLmMKQEAgLTM2OCw3ICszNjgsNyBAQAogCQkJCURWQl9DQV9FTjUwMjIxX1BPTExfQ0FNX1JFQURZOwogCQllbHNlCiAJCQlzdGF0ZS0+c3RhdHVzID0gMDsKLQl9OworCX0KIH0KIAogLyogQ0kgaXJxIGhhbmRsZXIgKi8KQEAgLTM3NywxNiArMzc3LDI0IEBACiAJc3RydWN0IGN4MjM4ODVfdHNwb3J0ICpwb3J0ID0gTlVMTDsKIAlzdHJ1Y3QgbmV0dXBfY2lfc3RhdGUgKnN0YXRlID0gTlVMTDsKIAotCWlmIChwY2lfc3RhdHVzICYgUENJX01TS19HUElPMCkKLQkJcG9ydCA9ICZkZXYtPnRzMTsKLQllbHNlIGlmIChwY2lfc3RhdHVzICYgUENJX01TS19HUElPMSkKLQkJcG9ydCA9ICZkZXYtPnRzMjsKLQllbHNlIC8qIHdobyBjYWxscyA/ICovCisJY2lfZGJnX3ByaW50KCIlczpcbiIsIF9fZnVuY19fKTsKKworCWlmICgwID09IChwY2lfc3RhdHVzICYgKFBDSV9NU0tfR1BJTzAgfCBQQ0lfTVNLX0dQSU8xKSkpCiAJCXJldHVybiAwOwogCi0Jc3RhdGUgPSBwb3J0LT5wb3J0X3ByaXY7CisJaWYgKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX0dQSU8wKSB7CisJCXBvcnQgPSAmZGV2LT50czE7CisJCXN0YXRlID0gcG9ydC0+cG9ydF9wcml2OworCQlzY2hlZHVsZV93b3JrKCZzdGF0ZS0+d29yayk7CisJCWNpX2RiZ19wcmludCgiJXM6IFdha2V1cCBDSTBcbiIsIF9fZnVuY19fKTsKKwl9CiAKLQlzY2hlZHVsZV93b3JrKCZzdGF0ZS0+d29yayk7CisJaWYgKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX0dQSU8xKSB7CisJCXBvcnQgPSAmZGV2LT50czI7CisJCXN0YXRlID0gcG9ydC0+cG9ydF9wcml2OworCQlzY2hlZHVsZV93b3JrKCZzdGF0ZS0+d29yayk7CisJCWNpX2RiZ19wcmludCgiJXM6IFdha2V1cCBDSTFcbiIsIF9fZnVuY19fKTsKKwl9CiAKIAlyZXR1cm4gMTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1jYXJkcy5jCmluZGV4IDg4NjEzMDkuLmIyOThiNzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWNhcmRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtY2FyZHMuYwpAQCAtMzA5LDYgKzMwOSwyNiBAQAogCQkJCSAgQ1gyNTg0MF9DT01QT05FTlRfT04sCiAJCX0gfSwKIAl9LAorCVtDWDIzODg1X0JPQVJEX0dPVFZJRVdfWDVfM0RfSFlCUklEXSA9IHsKKwkJLm5hbWUJCT0gIkdvVFZpZXcgWDUgM0QgSHlicmlkIiwKKwkJLnR1bmVyX3R5cGUJPSBUVU5FUl9YQzUwMDAsCisJCS50dW5lcl9hZGRyCT0gMHg2NCwKKwkJLnBvcnRhCQk9IENYMjM4ODVfQU5BTE9HX1ZJREVPLAorCQkucG9ydGIJCT0gQ1gyMzg4NV9NUEVHX0RWQiwKKwkJLmlucHV0ICAgICAgICAgID0ge3sKKwkJCS50eXBlICAgPSBDWDIzODg1X1ZNVVhfVEVMRVZJU0lPTiwKKwkJCS52bXV4ICAgPSBDWDI1ODQwX1ZJTjJfQ0gxIHwKKwkJCQkgIENYMjU4NDBfVklONV9DSDIsCisJCQkuZ3BpbzAJPSAweDAyLAorCQl9LCB7CisJCQkudHlwZSAgID0gQ1gyMzg4NV9WTVVYX0NPTVBPU0lURTEsCisJCQkudm11eCAgID0gQ1gyMzg4NV9WTVVYX0NPTVBPU0lURTEsCisJCX0sIHsKKwkJCS50eXBlICAgPSBDWDIzODg1X1ZNVVhfU1ZJREVPLAorCQkJLnZtdXggICA9IENYMjU4NDBfU1ZJREVPX0xVTUEzIHwKKwkJCQkgIENYMjU4NDBfU1ZJREVPX0NIUk9NQTQsCisJCX0gfSwKKwl9LAogfTsKIGNvbnN0IHVuc2lnbmVkIGludCBjeDIzODg1X2Jjb3VudCA9IEFSUkFZX1NJWkUoY3gyMzg4NV9ib2FyZHMpOwogCkBAIC00OTYsNiArNTE2LDEwIEBACiAJCS5zdWJ2ZW5kb3IgPSAweDEwN2QsCiAJCS5zdWJkZXZpY2UgPSAweDZmMjIsCiAJCS5jYXJkICAgICAgPSBDWDIzODg1X0JPQVJEX0xFQURURUtfV0lORkFTVF9QWFRWMTIwMCwKKwl9LCB7CisJCS5zdWJ2ZW5kb3IgPSAweDU2NTQsCisJCS5zdWJkZXZpY2UgPSAweDIzOTAsCisJCS5jYXJkICAgICAgPSBDWDIzODg1X0JPQVJEX0dPVFZJRVdfWDVfM0RfSFlCUklELAogCX0sCiB9OwogY29uc3QgdW5zaWduZWQgaW50IGN4MjM4ODVfaWRjb3VudCA9IEFSUkFZX1NJWkUoY3gyMzg4NV9zdWJpZHMpOwpAQCAtNzEyLDYgKzczNiwxMCBAQAogCQllbHNlIGlmIChwb3J0LT5uciA9PSAyKQogCQkJYml0bWFzayA9IDB4MDQ7CiAJCWJyZWFrOworCWNhc2UgQ1gyMzg4NV9CT0FSRF9HT1RWSUVXX1g1XzNEX0hZQlJJRDoKKwkJLyogVHVuZXIgUmVzZXQgQ29tbWFuZCAqLworCQliaXRtYXNrID0gMHgwMjsKKwkJYnJlYWs7CiAJfQogCiAJaWYgKGJpdG1hc2spIHsKQEAgLTk2Nyw2ICs5OTUsOSBAQAogCQkvKiBDWDI0MjI4IEdQSU8gKi8KIAkJLyogQ29ubmVjdGVkIHRvIElGIC8gTXV4ICovCiAJCWJyZWFrOworCWNhc2UgQ1gyMzg4NV9CT0FSRF9HT1RWSUVXX1g1XzNEX0hZQlJJRDoKKwkJY3hfc2V0KEdQMF9JTywgMHgwMDAxMDAwMSk7IC8qIEJyaW5nIHRoZSBwYXJ0IG91dCBvZiByZXNldCAqLworCQlicmVhazsKIAl9CiB9CiAKQEAgLTEyMTgsNiArMTI0OSw3IEBACiAJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxODUwOgogCWNhc2UgQ1gyMzg4NV9CT0FSRF9DT01QUk9fVklERU9NQVRFX0U4MDA6CiAJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxMjkwOgorCWNhc2UgQ1gyMzg4NV9CT0FSRF9HT1RWSUVXX1g1XzNEX0hZQlJJRDoKIAlkZWZhdWx0OgogCQl0czItPmdlbl9jdHJsX3ZhbCAgPSAweGM7IC8qIFNlcmlhbCBidXMgKyBwdW5jdHVyZWQgY2xvY2sgKi8KIAkJdHMyLT50c19jbGtfZW5fdmFsID0gMHgxOyAvKiBFbmFibGUgVFNfQ0xLICovCkBAIC0xMjQ1LDYgKzEyNzcsNyBAQAogCWNhc2UgQ1gyMzg4NV9CT0FSRF9NQUdJQ1BST19QUk9IRFRWRTI6CiAJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxMjkwOgogCWNhc2UgQ1gyMzg4NV9CT0FSRF9MRUFEVEVLX1dJTkZBU1RfUFhUVjEyMDA6CisJY2FzZSBDWDIzODg1X0JPQVJEX0dPVFZJRVdfWDVfM0RfSFlCUklEOgogCQlkZXYtPnNkX2N4MjU4NDAgPSB2NGwyX2kyY19uZXdfc3ViZGV2KCZkZXYtPnY0bDJfZGV2LAogCQkJCSZkZXYtPmkyY19idXNbMl0uaTJjX2FkYXAsCiAJCQkJImN4MjU4NDAiLCAweDg4ID4+IDEsIE5VTEwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtaW5wdXQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWlucHV0LmMKaW5kZXggYmI2MTg3MC4uMTk5Yjk5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtaW5wdXQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1pbnB1dC5jCkBAIC0zNSw5ICszNSw4IEBACiAgKiAgMDIxMTAtMTMwMSwgVVNBLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxtZWRpYS9pci1jb3JlLmg+CisjaW5jbHVkZSA8bWVkaWEvcmMtY29yZS5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItc3ViZGV2Lmg+CiAKICNpbmNsdWRlICJjeDIzODg1LmgiCkBAIC02MiwxNiArNjEsMTYgQEAKIAkJY291bnQgPSBudW0gLyBzaXplb2Yoc3RydWN0IGlyX3Jhd19ldmVudCk7CiAKIAkJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLQkJCWlyX3Jhd19ldmVudF9zdG9yZShrZXJuZWxfaXItPmlucF9kZXYsCisJCQlpcl9yYXdfZXZlbnRfc3RvcmUoa2VybmVsX2lyLT5yYywKIAkJCQkJICAgJmlyX2NvcmVfZXZlbnRbaV0pOwogCQkJaGFuZGxlID0gdHJ1ZTsKIAkJfQogCX0gd2hpbGUgKG51bSAhPSAwKTsKIAogCWlmIChvdmVycnVuKQotCQlpcl9yYXdfZXZlbnRfcmVzZXQoa2VybmVsX2lyLT5pbnBfZGV2KTsKKwkJaXJfcmF3X2V2ZW50X3Jlc2V0KGtlcm5lbF9pci0+cmMpOwogCWVsc2UgaWYgKGhhbmRsZSkKLQkJaXJfcmF3X2V2ZW50X2hhbmRsZShrZXJuZWxfaXItPmlucF9kZXYpOworCQlpcl9yYXdfZXZlbnRfaGFuZGxlKGtlcm5lbF9pci0+cmMpOwogfQogCiB2b2lkIGN4MjM4ODVfaW5wdXRfcnhfd29ya19oYW5kbGVyKHN0cnVjdCBjeDIzODg1X2RldiAqZGV2LCB1MzIgZXZlbnRzKQpAQCAtMTk3LDkgKzE5Niw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY3gyMzg4NV9pbnB1dF9pcl9vcGVuKHZvaWQgKnByaXYpCitzdGF0aWMgaW50IGN4MjM4ODVfaW5wdXRfaXJfb3BlbihzdHJ1Y3QgcmNfZGV2ICpyYykKIHsKLQlzdHJ1Y3QgY3gyMzg4NV9rZXJuZWxfaXIgKmtlcm5lbF9pciA9IHByaXY7CisJc3RydWN0IGN4MjM4ODVfa2VybmVsX2lyICprZXJuZWxfaXIgPSByYy0+cHJpdjsKIAogCWlmIChrZXJuZWxfaXItPmN4ID09IE5VTEwpCiAJCXJldHVybiAtRU5PREVWOwpAQCAtMjMwLDEzICsyMjksMTEgQEAKIAkJdjRsMl9zdWJkZXZfY2FsbChkZXYtPnNkX2lyLCBpciwgcnhfc19wYXJhbWV0ZXJzLCAmcGFyYW1zKTsKIAkJdjRsMl9zdWJkZXZfY2FsbChkZXYtPnNkX2lyLCBpciwgcnhfZ19wYXJhbWV0ZXJzLCAmcGFyYW1zKTsKIAl9Ci0KLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwogfQogCi1zdGF0aWMgdm9pZCBjeDIzODg1X2lucHV0X2lyX2Nsb3NlKHZvaWQgKnByaXYpCitzdGF0aWMgdm9pZCBjeDIzODg1X2lucHV0X2lyX2Nsb3NlKHN0cnVjdCByY19kZXYgKnJjKQogewotCXN0cnVjdCBjeDIzODg1X2tlcm5lbF9pciAqa2VybmVsX2lyID0gcHJpdjsKKwlzdHJ1Y3QgY3gyMzg4NV9rZXJuZWxfaXIgKmtlcm5lbF9pciA9IHJjLT5wcml2OwogCiAJaWYgKGtlcm5lbF9pci0+Y3ggIT0gTlVMTCkKIAkJY3gyMzg4NV9pbnB1dF9pcl9zdG9wKGtlcm5lbF9pci0+Y3gpOwpAQCAtMjQ1LDkgKzI0Miw3IEBACiBpbnQgY3gyMzg4NV9pbnB1dF9pbml0KHN0cnVjdCBjeDIzODg1X2RldiAqZGV2KQogewogCXN0cnVjdCBjeDIzODg1X2tlcm5lbF9pciAqa2VybmVsX2lyOwotCXN0cnVjdCBpbnB1dF9kZXYgKmlucF9kZXY7Ci0Jc3RydWN0IGlyX2Rldl9wcm9wcyAqcHJvcHM7Ci0KKwlzdHJ1Y3QgcmNfZGV2ICpyYzsKIAljaGFyICpyY19tYXA7CiAJZW51bSByY19kcml2ZXJfdHlwZSBkcml2ZXJfdHlwZTsKIAl1bnNpZ25lZCBsb25nIGFsbG93ZWRfcHJvdG9zOwpAQCAtMjY3LDE0ICsyNjIsMTQgQEAKIAljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjEyNTA6CiAJCS8qIEludGVncmF0ZWQgQ1gyMzg4WzU4XSBJUiBjb250cm9sbGVyICovCiAJCWRyaXZlcl90eXBlID0gUkNfRFJJVkVSX0lSX1JBVzsKLQkJYWxsb3dlZF9wcm90b3MgPSBJUl9UWVBFX0FMTDsKKwkJYWxsb3dlZF9wcm90b3MgPSBSQ19UWVBFX0FMTDsKIAkJLyogVGhlIGdyZXkgSGF1cHBhdWdlIFJDLTUgcmVtb3RlICovCiAJCXJjX21hcCA9IFJDX01BUF9SQzVfSEFVUFBBVUdFX05FVzsKIAkJYnJlYWs7CiAJY2FzZSBDWDIzODg1X0JPQVJEX1RFVklJX1M0NzA6CiAJCS8qIEludGVncmF0ZWQgQ1gyMzg4NSBJUiBjb250cm9sbGVyICovCiAJCWRyaXZlcl90eXBlID0gUkNfRFJJVkVSX0lSX1JBVzsKLQkJYWxsb3dlZF9wcm90b3MgPSBJUl9UWVBFX0FMTDsKKwkJYWxsb3dlZF9wcm90b3MgPSBSQ19UWVBFX0FMTDsKIAkJLyogQSBndWVzcyBhdCB0aGUgcmVtb3RlICovCiAJCXJjX21hcCA9IFJDX01BUF9URVZJSV9ORUM7CiAJCWJyZWFrOwpAQCAtMjk0LDM3ICsyODksMzYgQEAKIAkJCQkgICAgcGNpX25hbWUoZGV2LT5wY2kpKTsKIAogCS8qIGlucHV0IGRldmljZSAqLwotCWlucF9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKLQlpZiAoaW5wX2RldiA9PSBOVUxMKSB7CisJcmMgPSByY19hbGxvY2F0ZV9kZXZpY2UoKTsKKwlpZiAoIXJjKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX291dF9mcmVlOwogCX0KIAotCWtlcm5lbF9pci0+aW5wX2RldiA9IGlucF9kZXY7Ci0JaW5wX2Rldi0+bmFtZSA9IGtlcm5lbF9pci0+bmFtZTsKLQlpbnBfZGV2LT5waHlzID0ga2VybmVsX2lyLT5waHlzOwotCWlucF9kZXYtPmlkLmJ1c3R5cGUgPSBCVVNfUENJOwotCWlucF9kZXYtPmlkLnZlcnNpb24gPSAxOworCWtlcm5lbF9pci0+cmMgPSByYzsKKwlyYy0+aW5wdXRfbmFtZSA9IGtlcm5lbF9pci0+bmFtZTsKKwlyYy0+aW5wdXRfcGh5cyA9IGtlcm5lbF9pci0+cGh5czsKKwlyYy0+aW5wdXRfaWQuYnVzdHlwZSA9IEJVU19QQ0k7CisJcmMtPmlucHV0X2lkLnZlcnNpb24gPSAxOwogCWlmIChkZXYtPnBjaS0+c3Vic3lzdGVtX3ZlbmRvcikgewotCQlpbnBfZGV2LT5pZC52ZW5kb3IgID0gZGV2LT5wY2ktPnN1YnN5c3RlbV92ZW5kb3I7Ci0JCWlucF9kZXYtPmlkLnByb2R1Y3QgPSBkZXYtPnBjaS0+c3Vic3lzdGVtX2RldmljZTsKKwkJcmMtPmlucHV0X2lkLnZlbmRvciAgPSBkZXYtPnBjaS0+c3Vic3lzdGVtX3ZlbmRvcjsKKwkJcmMtPmlucHV0X2lkLnByb2R1Y3QgPSBkZXYtPnBjaS0+c3Vic3lzdGVtX2RldmljZTsKIAl9IGVsc2UgewotCQlpbnBfZGV2LT5pZC52ZW5kb3IgID0gZGV2LT5wY2ktPnZlbmRvcjsKLQkJaW5wX2Rldi0+aWQucHJvZHVjdCA9IGRldi0+cGNpLT5kZXZpY2U7CisJCXJjLT5pbnB1dF9pZC52ZW5kb3IgID0gZGV2LT5wY2ktPnZlbmRvcjsKKwkJcmMtPmlucHV0X2lkLnByb2R1Y3QgPSBkZXYtPnBjaS0+ZGV2aWNlOwogCX0KLQlpbnBfZGV2LT5kZXYucGFyZW50ID0gJmRldi0+cGNpLT5kZXY7Ci0KLQkvKiBrZXJuZWwgaXIgZGV2aWNlIHByb3BlcnRpZXMgKi8KLQlwcm9wcyA9ICZrZXJuZWxfaXItPnByb3BzOwotCXByb3BzLT5kcml2ZXJfdHlwZSA9IGRyaXZlcl90eXBlOwotCXByb3BzLT5hbGxvd2VkX3Byb3RvcyA9IGFsbG93ZWRfcHJvdG9zOwotCXByb3BzLT5wcml2ID0ga2VybmVsX2lyOwotCXByb3BzLT5vcGVuID0gY3gyMzg4NV9pbnB1dF9pcl9vcGVuOwotCXByb3BzLT5jbG9zZSA9IGN4MjM4ODVfaW5wdXRfaXJfY2xvc2U7CisJcmMtPmRldi5wYXJlbnQgPSAmZGV2LT5wY2ktPmRldjsKKwlyYy0+ZHJpdmVyX3R5cGUgPSBkcml2ZXJfdHlwZTsKKwlyYy0+YWxsb3dlZF9wcm90b3MgPSBhbGxvd2VkX3Byb3RvczsKKwlyYy0+cHJpdiA9IGtlcm5lbF9pcjsKKwlyYy0+b3BlbiA9IGN4MjM4ODVfaW5wdXRfaXJfb3BlbjsKKwlyYy0+Y2xvc2UgPSBjeDIzODg1X2lucHV0X2lyX2Nsb3NlOworCXJjLT5tYXBfbmFtZSA9IHJjX21hcDsKKwlyYy0+ZHJpdmVyX25hbWUgPSBNT0RVTEVfTkFNRTsKIAogCS8qIEdvICovCiAJZGV2LT5rZXJuZWxfaXIgPSBrZXJuZWxfaXI7Ci0JcmV0ID0gaXJfaW5wdXRfcmVnaXN0ZXIoaW5wX2RldiwgcmNfbWFwLCBwcm9wcywgTU9EVUxFX05BTUUpOworCXJldCA9IHJjX3JlZ2lzdGVyX2RldmljZShyYyk7CiAJaWYgKHJldCkKIAkJZ290byBlcnJfb3V0X3N0b3A7CiAKQEAgLTMzMyw3ICszMjcsNyBAQAogZXJyX291dF9zdG9wOgogCWN4MjM4ODVfaW5wdXRfaXJfc3RvcChkZXYpOwogCWRldi0+a2VybmVsX2lyID0gTlVMTDsKLQkvKiBUT0RPOiBkb3VibGUgY2hlY2sgY2xlYW4tdXAgb2Yga2VybmVsX2lyLT5pbnBfZGV2ICovCisJcmNfZnJlZV9kZXZpY2UocmMpOwogZXJyX291dF9mcmVlOgogCWtmcmVlKGtlcm5lbF9pci0+cGh5cyk7CiAJa2ZyZWUoa2VybmVsX2lyLT5uYW1lKTsKQEAgLTM0OCw3ICszNDIsNyBAQAogCiAJaWYgKGRldi0+a2VybmVsX2lyID09IE5VTEwpCiAJCXJldHVybjsKLQlpcl9pbnB1dF91bnJlZ2lzdGVyKGRldi0+a2VybmVsX2lyLT5pbnBfZGV2KTsKKwlyY191bnJlZ2lzdGVyX2RldmljZShkZXYtPmtlcm5lbF9pci0+cmMpOwogCWtmcmVlKGRldi0+a2VybmVsX2lyLT5waHlzKTsKIAlrZnJlZShkZXYtPmtlcm5lbF9pci0+bmFtZSk7CiAJa2ZyZWUoZGV2LT5rZXJuZWxfaXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LXZpZGVvLmMKaW5kZXggOGIyZmI4YS4uNjQ0ZmNiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtdmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS12aWRlby5jCkBAIC0xMDI0LDM1ICsxMDI0LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAotc3RhdGljIGludCB2aWRpb2NnbWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKLQlzdHJ1Y3QgdmlkZW9fbWJ1ZiAqbWJ1ZikKLXsKLQlzdHJ1Y3QgY3gyMzg4NV9maCAqZmggPSBwcml2OwotCXN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcTsKLQlzdHJ1Y3QgdjRsMl9yZXF1ZXN0YnVmZmVycyByZXE7Ci0JdW5zaWduZWQgaW50IGk7Ci0JaW50IGVycjsKLQotCXEgPSBnZXRfcXVldWUoZmgpOwotCW1lbXNldCgmcmVxLCAwLCBzaXplb2YocmVxKSk7Ci0JcmVxLnR5cGUgICA9IHEtPnR5cGU7Ci0JcmVxLmNvdW50ICA9IDg7Ci0JcmVxLm1lbW9yeSA9IFY0TDJfTUVNT1JZX01NQVA7Ci0JZXJyID0gdmlkZW9idWZfcmVxYnVmcyhxLCAmcmVxKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQotCW1idWYtPmZyYW1lcyA9IHJlcS5jb3VudDsKLQltYnVmLT5zaXplICAgPSAwOwotCWZvciAoaSA9IDA7IGkgPCBtYnVmLT5mcmFtZXM7IGkrKykgewotCQltYnVmLT5vZmZzZXRzW2ldICA9IHEtPmJ1ZnNbaV0tPmJvZmY7Ci0JCW1idWYtPnNpemUgICAgICAgKz0gcS0+YnVmc1tpXS0+YnNpemU7Ci0JfQotCXJldHVybiAwOwotfQotI2VuZGlmCi0KIHN0YXRpYyBpbnQgdmlkaW9jX3JlcWJ1ZnMoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJc3RydWN0IHY0bDJfcmVxdWVzdGJ1ZmZlcnMgKnApCiB7CkBAIC0xMTU1LDcgKzExMjYsNiBAQAogCWlmICgwID09IElOUFVUKG4pLT50eXBlKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCW1lbXNldChpLCAwLCBzaXplb2YoKmkpKTsKIAlpLT5pbmRleCA9IG47CiAJaS0+dHlwZSAgPSBWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBOwogCXN0cmNweShpLT5uYW1lLCBpbmFtZVtJTlBVVChuKS0+dHlwZV0pOwpAQCAtMTQyNyw5ICsxMzk3LDYgQEAKIAkudmlkaW9jX3NfY3RybCAgICAgICAgPSB2aWRpb2Nfc19jdHJsLAogCS52aWRpb2Nfc3RyZWFtb24gICAgICA9IHZpZGlvY19zdHJlYW1vbiwKIAkudmlkaW9jX3N0cmVhbW9mZiAgICAgPSB2aWRpb2Nfc3RyZWFtb2ZmLAotI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAotCS52aWRpb2NnbWJ1ZiAgICAgICAgICA9IHZpZGlvY2dtYnVmLAotI2VuZGlmCiAJLnZpZGlvY19nX3R1bmVyICAgICAgID0gdmlkaW9jX2dfdHVuZXIsCiAJLnZpZGlvY19zX3R1bmVyICAgICAgID0gdmlkaW9jX3NfdHVuZXIsCiAJLnZpZGlvY19nX2ZyZXF1ZW5jeSAgID0gdmlkaW9jX2dfZnJlcXVlbmN5LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LmgKaW5kZXggZWQ5NGIxNy4uNjJlNDFhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS5oCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSA8bWVkaWEvdHZlZXByb20uaD4KICNpbmNsdWRlIDxtZWRpYS92aWRlb2J1Zi1kbWEtc2cuaD4KICNpbmNsdWRlIDxtZWRpYS92aWRlb2J1Zi1kdmIuaD4KLSNpbmNsdWRlIDxtZWRpYS9pci1jb3JlLmg+CisjaW5jbHVkZSA8bWVkaWEvcmMtY29yZS5oPgogCiAjaW5jbHVkZSAiYnRjeC1yaXNjLmgiCiAjaW5jbHVkZSAiY3gyMzg4NS1yZWcuaCIKQEAgLTg0LDYgKzg0LDcgQEAKICNkZWZpbmUgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTI5MCAgICAgICAgMjYKICNkZWZpbmUgQ1gyMzg4NV9CT0FSRF9NWUdJQ0FfWDg1NThQUk8gICAgICAgICAgMjcKICNkZWZpbmUgQ1gyMzg4NV9CT0FSRF9MRUFEVEVLX1dJTkZBU1RfUFhUVjEyMDAgMjgKKyNkZWZpbmUgQ1gyMzg4NV9CT0FSRF9HT1RWSUVXX1g1XzNEX0hZQlJJRCAgICAgMjkKIAogI2RlZmluZSBHUElPXzAgMHgwMDAwMDAwMQogI2RlZmluZSBHUElPXzEgMHgwMDAwMDAwMgpAQCAtMzEwLDggKzMxMSw3IEBACiAJY2hhcgkJCSpuYW1lOwogCWNoYXIJCQkqcGh5czsKIAotCXN0cnVjdCBpbnB1dF9kZXYJKmlucF9kZXY7Ci0Jc3RydWN0IGlyX2Rldl9wcm9wcwlwcm9wczsKKwlzdHJ1Y3QgcmNfZGV2CQkqcmM7CiB9OwogCiBzdHJ1Y3QgY3gyMzg4NV9kZXYgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODgtaXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg4LWlyLmMKaW5kZXggZTc4ZTNlNC4uZTM3YmU2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODgtaXIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4OC1pci5jCkBAIC0yNiw3ICsyNiw3IEBACiAKICNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY2hpcC1pZGVudC5oPgotI2luY2x1ZGUgPG1lZGlhL2lyLWNvcmUuaD4KKyNpbmNsdWRlIDxtZWRpYS9yYy1jb3JlLmg+CiAKICNpbmNsdWRlICJjeDIzODg1LmgiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLWlyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1pci5jCmluZGV4IDk3YTRlOWIuLjYyNzkyNmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLWlyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtaXIuYwpAQCAtMjQsNyArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9rZmlmby5oPgogI2luY2x1ZGUgPG1lZGlhL2N4MjU4NDAuaD4KLSNpbmNsdWRlIDxtZWRpYS9pci1jb3JlLmg+CisjaW5jbHVkZSA8bWVkaWEvcmMtY29yZS5oPgogCiAjaW5jbHVkZSAiY3gyNTg0MC1jb3JlLmgiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L0tjb25maWcKaW5kZXggMGZhODVjYi4uNWM0MmFiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L0tjb25maWcKQEAgLTEsMTIgKzEsMTEgQEAKIGNvbmZpZyBWSURFT19DWDg4CiAJdHJpc3RhdGUgIkNvbmV4YW50IDIzODh4IChidDg3OCBzdWNjZXNzb3IpIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBWSURFT19ERVYgJiYgUENJICYmIEkyQyAmJiBJTlBVVAorCWRlcGVuZHMgb24gVklERU9fREVWICYmIFBDSSAmJiBJMkMgJiYgUkNfQ09SRQogCXNlbGVjdCBJMkNfQUxHT0JJVAogCXNlbGVjdCBWSURFT19CVENYCiAJc2VsZWN0IFZJREVPQlVGX0RNQV9TRwogCXNlbGVjdCBWSURFT19UVU5FUgogCXNlbGVjdCBWSURFT19UVkVFUFJPTQotCWRlcGVuZHMgb24gVklERU9fSVIKIAlzZWxlY3QgVklERU9fV004Nzc1IGlmIFZJREVPX0hFTFBFUl9DSElQU19BVVRPCiAJLS0taGVscC0tLQogCSAgVGhpcyBpcyBhIHZpZGVvNGxpbnV4IGRyaXZlciBmb3IgQ29uZXhhbnQgMjM4OHggYmFzZWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWJsYWNrYmlyZC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtYmxhY2tiaXJkLmMKaW5kZXggZDdjOTQ4NC4uYmNhMzA3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtYmxhY2tiaXJkLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtYmxhY2tiaXJkLmMKQEAgLTEwNjQsNyArMTA2NCw3IEBACiAJCWVyciA9IGRydi0+cmVxdWVzdF9hY3F1aXJlKGRydik7CiAJCWlmKGVyciAhPSAwKSB7CiAJCQlkcHJpbnRrKDEsIiVzOiBVbmFibGUgdG8gYWNxdWlyZSBoYXJkd2FyZSwgJWRcbiIsIF9fZnVuY19fLCBlcnIpOwotCQkJbXV0ZXhfdW5sb2NrKCZkZXYtPmNvcmUtPmxvY2spOzsKKwkJCW11dGV4X3VubG9jaygmZGV2LT5jb3JlLT5sb2NrKTsKIAkJCXJldHVybiBlcnI7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jYXJkcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY2FyZHMuYwppbmRleCAwY2NjMmFmLi40ZTZlZTU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNhcmRzLmMKQEAgLTQ3LDcgKzQ3LDcgQEAKIAogc3RhdGljIGludCBkaXNhYmxlX2lyOwogbW9kdWxlX3BhcmFtKGRpc2FibGVfaXIsIGludCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGxhdGVuY3ksICJEaXNhYmxlIElSIHN1cHBvcnQiKTsKK01PRFVMRV9QQVJNX0RFU0MoZGlzYWJsZV9pciwgIkRpc2FibGUgSVIgc3VwcG9ydCIpOwogCiAjZGVmaW5lIGluZm9fcHJpbnRrKGNvcmUsIGZtdCwgYXJnLi4uKSBcCiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICIgZm10LCBjb3JlLT5uYW1lICwgIyMgYXJnKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtZHZiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1kdmIuYwppbmRleCAzNjdhNjUzLi45MDcxN2VlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1kdmIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1kdmIuYwpAQCAtNjcsNiArNjcsMTAgQEAKIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsImVuYWJsZSBkZWJ1ZyBtZXNzYWdlcyBbZHZiXSIpOwogCitzdGF0aWMgdW5zaWduZWQgaW50IGR2Yl9idWZfdHNjbnQgPSAzMjsKK21vZHVsZV9wYXJhbShkdmJfYnVmX3RzY250LCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkdmJfYnVmX3RzY250LCAiRFZCIEJ1ZmZlciBUUyBjb3VudCBbZHZiXSIpOworCiBEVkJfREVGSU5FX01PRF9PUFRfQURBUFRFUl9OUihhZGFwdGVyX25yKTsKIAogI2RlZmluZSBkcHJpbnRrKGxldmVsLGZtdCwgYXJnLi4uKQlpZiAoZGVidWcgPj0gbGV2ZWwpIFwKQEAgLTgwLDEwICs4NCwxMCBAQAogCXN0cnVjdCBjeDg4MDJfZGV2ICpkZXYgPSBxLT5wcml2X2RhdGE7CiAKIAlkZXYtPnRzX3BhY2tldF9zaXplICA9IDE4OCAqIDQ7Ci0JZGV2LT50c19wYWNrZXRfY291bnQgPSAzMjsKKwlkZXYtPnRzX3BhY2tldF9jb3VudCA9IGR2Yl9idWZfdHNjbnQ7CiAKIAkqc2l6ZSAgPSBkZXYtPnRzX3BhY2tldF9zaXplICogZGV2LT50c19wYWNrZXRfY291bnQ7Ci0JKmNvdW50ID0gMzI7CisJKmNvdW50ID0gZHZiX2J1Zl90c2NudDsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtaTJjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1pMmMuYwppbmRleCBmNTM4MzZiLi5hMWZlMGFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1pMmMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1pMmMuYwpAQCAtMTQ2LDcgKzE0Niw2IEBACiAJY29yZS0+aTJjX2FkYXAuZGV2LnBhcmVudCA9ICZwY2ktPmRldjsKIAlzdHJsY3B5KGNvcmUtPmkyY19hZGFwLm5hbWUsY29yZS0+bmFtZSxzaXplb2YoY29yZS0+aTJjX2FkYXAubmFtZSkpOwogCWNvcmUtPmkyY19hZGFwLm93bmVyID0gVEhJU19NT0RVTEU7Ci0JY29yZS0+aTJjX2FkYXAuaWQgPSBJMkNfSFdfQl9DWDIzODh4OwogCWNvcmUtPmkyY19hbGdvLnVkZWxheSA9IGkyY191ZGVsYXk7CiAJY29yZS0+aTJjX2FsZ28uZGF0YSA9IGNvcmU7CiAJaTJjX3NldF9hZGFwZGF0YSgmY29yZS0+aTJjX2FkYXAsICZjb3JlLT52NGwyX2Rldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1pbnB1dC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtaW5wdXQuYwppbmRleCBmYzc3N2JjLi4wNmY3ZDFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1pbnB1dC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWlucHV0LmMKQEAgLTI0LDE0ICsyNCwxMiBAQAogCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2hydGltZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAogI2luY2x1ZGUgImN4ODguaCIKLSNpbmNsdWRlIDxtZWRpYS9pci1jb3JlLmg+Ci0jaW5jbHVkZSA8bWVkaWEvaXItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvcmMtY29yZS5oPgogCiAjZGVmaW5lIE1PRFVMRV9OQU1FICJjeDg4eHgiCiAKQEAgLTM5LDkgKzM3LDcgQEAKIAogc3RydWN0IGN4ODhfSVIgewogCXN0cnVjdCBjeDg4X2NvcmUgKmNvcmU7Ci0Jc3RydWN0IGlucHV0X2RldiAqaW5wdXQ7Ci0Jc3RydWN0IGlyX2Rldl9wcm9wcyBwcm9wczsKLQl1NjQgaXJfdHlwZTsKKwlzdHJ1Y3QgcmNfZGV2ICpkZXY7CiAKIAlpbnQgdXNlcnM7CiAKQEAgLTUwLDggKzQ2LDYgQEAKIAogCS8qIHNhbXBsZSBmcm9tIGdwaW8gcGluIDE2ICovCiAJdTMyIHNhbXBsaW5nOwotCXUzMiBzYW1wbGVzWzE2XTsKLQlpbnQgc2NvdW50OwogCiAJLyogcG9sbCBleHRlcm5hbCBkZWNvZGVyICovCiAJaW50IHBvbGxpbmc7CkBAIC02Myw2ICs1NywxMCBAQAogCXUzMiBtYXNrX2tleXVwOwogfTsKIAorc3RhdGljIHVuc2lnbmVkIGlyX3NhbXBsZXJhdGUgPSA0OworbW9kdWxlX3BhcmFtKGlyX3NhbXBsZXJhdGUsIHVpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhpcl9zYW1wbGVyYXRlLCAiSVIgc2FtcGxlcmF0ZSBpbiBrSHosIDEgLSAyMCwgZGVmYXVsdCA0Iik7CisKIHN0YXRpYyBpbnQgaXJfZGVidWc7CiBtb2R1bGVfcGFyYW0oaXJfZGVidWcsIGludCwgMDY0NCk7CS8qIGRlYnVnIGxldmVsIFtJUl0gKi8KIE1PRFVMRV9QQVJNX0RFU0MoaXJfZGVidWcsICJlbmFibGUgZGVidWcgbWVzc2FnZXMgW0lSXSIpOwpAQCAtNzAsNiArNjgsOSBAQAogI2RlZmluZSBpcl9kcHJpbnRrKGZtdCwgYXJnLi4uKQlpZiAoaXJfZGVidWcpIFwKIAlwcmludGsoS0VSTl9ERUJVRyAiJXMgSVI6ICIgZm10ICwgaXItPmNvcmUtPm5hbWUgLCAjI2FyZykKIAorI2RlZmluZSBkcHJpbnRrKGZtdCwgYXJnLi4uKQlpZiAoaXJfZGVidWcpIFwKKwlwcmludGsoS0VSTl9ERUJVRyAiY3g4OCBJUjogIiBmbXQgLCAjI2FyZykKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgdm9pZCBjeDg4X2lyX2hhbmRsZV9rZXkoc3RydWN0IGN4ODhfSVIgKmlyKQpAQCAtMTI1LDIxICsxMjYsMjYgQEAKIAogCQlkYXRhID0gKGRhdGEgPDwgNCkgfCAoKGdwaW9fa2V5ICYgMHhmMCkgPj4gNCk7CiAKLQkJaXJfa2V5ZG93bihpci0+aW5wdXQsIGRhdGEsIDApOworCQlyY19rZXlkb3duKGlyLT5kZXYsIGRhdGEsIDApOwogCiAJfSBlbHNlIGlmIChpci0+bWFza19rZXlkb3duKSB7CiAJCS8qIGJpdCBzZXQgb24ga2V5ZG93biAqLwogCQlpZiAoZ3BpbyAmIGlyLT5tYXNrX2tleWRvd24pCi0JCQlpcl9rZXlkb3duKGlyLT5pbnB1dCwgZGF0YSwgMCk7CisJCQlyY19rZXlkb3duX25vdGltZW91dChpci0+ZGV2LCBkYXRhLCAwKTsKKwkJZWxzZQorCQkJcmNfa2V5dXAoaXItPmRldik7CiAKIAl9IGVsc2UgaWYgKGlyLT5tYXNrX2tleXVwKSB7CiAJCS8qIGJpdCBjbGVhcmVkIG9uIGtleWRvd24gKi8KIAkJaWYgKDAgPT0gKGdwaW8gJiBpci0+bWFza19rZXl1cCkpCi0JCQlpcl9rZXlkb3duKGlyLT5pbnB1dCwgZGF0YSwgMCk7CisJCQlyY19rZXlkb3duX25vdGltZW91dChpci0+ZGV2LCBkYXRhLCAwKTsKKwkJZWxzZQorCQkJcmNfa2V5dXAoaXItPmRldik7CiAKIAl9IGVsc2UgewogCQkvKiBjYW4ndCBkaXN0aW5ndWlzaCBrZXlkb3duL3VwIDotLyAqLwotCQlpcl9rZXlkb3duKGlyLT5pbnB1dCwgZGF0YSwgMCk7CisJCXJjX2tleWRvd25fbm90aW1lb3V0KGlyLT5kZXYsIGRhdGEsIDApOworCQlyY19rZXl1cChpci0+ZGV2KTsKIAl9CiB9CiAKQEAgLTE3Niw4ICsxODIsOCBAQAogCX0KIAlpZiAoaXItPnNhbXBsaW5nKSB7CiAJCWNvcmUtPnBjaV9pcnFtYXNrIHw9IFBDSV9JTlRfSVJfU01QSU5UOwotCQljeF93cml0ZShNT19ERFNfSU8sIDB4YTgwYTgwKTsJLyogNCBrSHogc2FtcGxlIHJhdGUgKi8KLQkJY3hfd3JpdGUoTU9fRERTQ0ZHX0lPLCAweDUpOwkvKiBlbmFibGUgKi8KKwkJY3hfd3JpdGUoTU9fRERTX0lPLCAweDMzRjI4NiAqIGlyX3NhbXBsZXJhdGUpOyAvKiBzYW1wbGVyYXRlICovCisJCWN4X3dyaXRlKE1PX0REU0NGR19JTywgMHg1KTsgLyogZW5hYmxlICovCiAJfQogCXJldHVybiAwOwogfQpAQCAtMjE0LDE3ICsyMjAsMTcgQEAKIAkJX19jeDg4X2lyX3N0b3AoY29yZSk7CiB9CiAKLXN0YXRpYyBpbnQgY3g4OF9pcl9vcGVuKHZvaWQgKnByaXYpCitzdGF0aWMgaW50IGN4ODhfaXJfb3BlbihzdHJ1Y3QgcmNfZGV2ICpyYykKIHsKLQlzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlID0gcHJpdjsKKwlzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlID0gcmMtPnByaXY7CiAKIAljb3JlLT5pci0+dXNlcnMrKzsKIAlyZXR1cm4gX19jeDg4X2lyX3N0YXJ0KGNvcmUpOwogfQogCi1zdGF0aWMgdm9pZCBjeDg4X2lyX2Nsb3NlKHZvaWQgKnByaXYpCitzdGF0aWMgdm9pZCBjeDg4X2lyX2Nsb3NlKHN0cnVjdCByY19kZXYgKnJjKQogewotCXN0cnVjdCBjeDg4X2NvcmUgKmNvcmUgPSBwcml2OworCXN0cnVjdCBjeDg4X2NvcmUgKmNvcmUgPSByYy0+cHJpdjsKIAogCWNvcmUtPmlyLT51c2Vycy0tOwogCWlmICghY29yZS0+aXItPnVzZXJzKQpAQCAtMjM2LDIwICsyNDIsMjAgQEAKIGludCBjeDg4X2lyX2luaXQoc3RydWN0IGN4ODhfY29yZSAqY29yZSwgc3RydWN0IHBjaV9kZXYgKnBjaSkKIHsKIAlzdHJ1Y3QgY3g4OF9JUiAqaXI7Ci0Jc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OworCXN0cnVjdCByY19kZXYgKmRldjsKIAljaGFyICppcl9jb2RlcyA9IE5VTEw7Ci0JdTY0IGlyX3R5cGUgPSBJUl9UWVBFX09USEVSOworCXU2NCByY190eXBlID0gUkNfVFlQRV9PVEhFUjsKIAlpbnQgZXJyID0gLUVOT01FTTsKIAl1MzIgaGFyZHdhcmVfbWFzayA9IDA7CS8qIEZvciBkZXZpY2VzIHdpdGggYSBoYXJkd2FyZSBtYXNrLCB3aGVuCiAJCQkJICogdXNlZCB3aXRoIGEgZnVsbC1jb2RlIElSIHRhYmxlCiAJCQkJICovCiAKIAlpciA9IGt6YWxsb2Moc2l6ZW9mKCppciksIEdGUF9LRVJORUwpOwotCWlucHV0X2RldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOwotCWlmICghaXIgfHwgIWlucHV0X2RldikKKwlkZXYgPSByY19hbGxvY2F0ZV9kZXZpY2UoKTsKKwlpZiAoIWlyIHx8ICFkZXYpCiAJCWdvdG8gZXJyX291dF9mcmVlOwogCi0JaXItPmlucHV0ID0gaW5wdXRfZGV2OworCWlyLT5kZXYgPSBkZXY7CiAKIAkvKiBkZXRlY3QgJiBjb25maWd1cmUgKi8KIAlzd2l0Y2ggKGNvcmUtPmJvYXJkbnIpIHsKQEAgLTI2NCw3ICsyNzAsNiBAQAogCQlicmVhazsKIAljYXNlIENYODhfQk9BUkRfVEVSUkFURUNfQ0lORVJHWV8xNDAwX0RWQl9UMToKIAkJaXJfY29kZXMgPSBSQ19NQVBfQ0lORVJHWV8xNDAwOwotCQlpcl90eXBlID0gSVJfVFlQRV9ORUM7CiAJCWlyLT5zYW1wbGluZyA9IDB4ZWIwNDsgLyogYWRkcmVzcyAqLwogCQlicmVhazsKIAljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFOgpAQCAtMjc5LDcgKzI4NCw2IEBACiAJY2FzZSBDWDg4X0JPQVJEX1BDSERUVl9IRDU1MDA6CiAJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9JUk9OTFk6CiAJCWlyX2NvZGVzID0gUkNfTUFQX0hBVVBQQVVHRV9ORVc7Ci0JCWlyX3R5cGUgPSBJUl9UWVBFX1JDNTsKIAkJaXItPnNhbXBsaW5nID0gMTsKIAkJYnJlYWs7CiAJY2FzZSBDWDg4X0JPQVJEX1dJTkZBU1RfRFRWMjAwMEg6CkBAIC0zNjcsMTggKzM3MSwxNSBAQAogCWNhc2UgQ1g4OF9CT0FSRF9QUk9GXzczMDE6CiAJY2FzZSBDWDg4X0JPQVJEX1BST0ZfNjIwMDoKIAkJaXJfY29kZXMgPSBSQ19NQVBfVEJTX05FQzsKLQkJaXJfdHlwZSA9IElSX1RZUEVfTkVDOwogCQlpci0+c2FtcGxpbmcgPSAweGZmMDA7IC8qIGFkZHJlc3MgKi8KIAkJYnJlYWs7CiAJY2FzZSBDWDg4X0JPQVJEX1RFVklJX1M0NjA6CiAJY2FzZSBDWDg4X0JPQVJEX1RFVklJX1M0MjA6CiAJCWlyX2NvZGVzID0gUkNfTUFQX1RFVklJX05FQzsKLQkJaXJfdHlwZSA9IElSX1RZUEVfTkVDOwogCQlpci0+c2FtcGxpbmcgPSAweGZmMDA7IC8qIGFkZHJlc3MgKi8KIAkJYnJlYWs7CiAJY2FzZSBDWDg4X0JPQVJEX0ROVFZfTElWRV9EVkJfVF9QUk86CiAJCWlyX2NvZGVzICAgICAgICAgPSBSQ19NQVBfRE5UVl9MSVZFX0RWQlRfUFJPOwotCQlpcl90eXBlICAgICAgICAgID0gSVJfVFlQRV9ORUM7CiAJCWlyLT5zYW1wbGluZyAgICAgPSAweGZmMDA7IC8qIGFkZHJlc3MgKi8KIAkJYnJlYWs7CiAJY2FzZSBDWDg4X0JPQVJEX05PUldPT0RfTUlDUk86CkBAIC0zOTYsNyArMzk3LDYgQEAKIAkJYnJlYWs7CiAJY2FzZSBDWDg4X0JPQVJEX1BJTk5BQ0xFX1BDVFZfSERfODAwaToKIAkJaXJfY29kZXMgICAgICAgICA9IFJDX01BUF9QSU5OQUNMRV9QQ1RWX0hEOwotCQlpcl90eXBlICAgICAgICAgID0gSVJfVFlQRV9SQzU7CiAJCWlyLT5zYW1wbGluZyAgICAgPSAxOwogCQlicmVhazsKIAljYXNlIENYODhfQk9BUkRfUE9XRVJDT0xPUl9SRUFMX0FOR0VMOgpAQCAtNDA3LDEyICs0MDcsMTIgQEAKIAkJYnJlYWs7CiAJY2FzZSBDWDg4X0JPQVJEX1RXSU5IQU5fVlAxMDI3X0RWQlM6CiAJCWlyX2NvZGVzICAgICAgICAgPSBSQ19NQVBfVFdJTkhBTl9WUDEwMjdfRFZCUzsKLQkJaXJfdHlwZSAgICAgICAgICA9IElSX1RZUEVfTkVDOworCQlyY190eXBlICAgICAgICAgID0gUkNfVFlQRV9ORUM7CiAJCWlyLT5zYW1wbGluZyAgICAgPSAweGZmMDA7IC8qIGFkZHJlc3MgKi8KIAkJYnJlYWs7CiAJfQogCi0JaWYgKE5VTEwgPT0gaXJfY29kZXMpIHsKKwlpZiAoIWlyX2NvZGVzKSB7CiAJCWVyciA9IC1FTk9ERVY7CiAJCWdvdG8gZXJyX291dF9mcmVlOwogCX0KQEAgLTQzNiwzNyArNDM2LDQ1IEBACiAJc25wcmludGYoaXItPm5hbWUsIHNpemVvZihpci0+bmFtZSksICJjeDg4IElSICglcykiLCBjb3JlLT5ib2FyZC5uYW1lKTsKIAlzbnByaW50Zihpci0+cGh5cywgc2l6ZW9mKGlyLT5waHlzKSwgInBjaS0lcy9pcjAiLCBwY2lfbmFtZShwY2kpKTsKIAotCWlyLT5pcl90eXBlID0gaXJfdHlwZTsKLQotCWlucHV0X2Rldi0+bmFtZSA9IGlyLT5uYW1lOwotCWlucHV0X2Rldi0+cGh5cyA9IGlyLT5waHlzOwotCWlucHV0X2Rldi0+aWQuYnVzdHlwZSA9IEJVU19QQ0k7Ci0JaW5wdXRfZGV2LT5pZC52ZXJzaW9uID0gMTsKKwlkZXYtPmlucHV0X25hbWUgPSBpci0+bmFtZTsKKwlkZXYtPmlucHV0X3BoeXMgPSBpci0+cGh5czsKKwlkZXYtPmlucHV0X2lkLmJ1c3R5cGUgPSBCVVNfUENJOworCWRldi0+aW5wdXRfaWQudmVyc2lvbiA9IDE7CiAJaWYgKHBjaS0+c3Vic3lzdGVtX3ZlbmRvcikgewotCQlpbnB1dF9kZXYtPmlkLnZlbmRvciA9IHBjaS0+c3Vic3lzdGVtX3ZlbmRvcjsKLQkJaW5wdXRfZGV2LT5pZC5wcm9kdWN0ID0gcGNpLT5zdWJzeXN0ZW1fZGV2aWNlOworCQlkZXYtPmlucHV0X2lkLnZlbmRvciA9IHBjaS0+c3Vic3lzdGVtX3ZlbmRvcjsKKwkJZGV2LT5pbnB1dF9pZC5wcm9kdWN0ID0gcGNpLT5zdWJzeXN0ZW1fZGV2aWNlOwogCX0gZWxzZSB7Ci0JCWlucHV0X2Rldi0+aWQudmVuZG9yID0gcGNpLT52ZW5kb3I7Ci0JCWlucHV0X2Rldi0+aWQucHJvZHVjdCA9IHBjaS0+ZGV2aWNlOworCQlkZXYtPmlucHV0X2lkLnZlbmRvciA9IHBjaS0+dmVuZG9yOworCQlkZXYtPmlucHV0X2lkLnByb2R1Y3QgPSBwY2ktPmRldmljZTsKIAl9Ci0JaW5wdXRfZGV2LT5kZXYucGFyZW50ID0gJnBjaS0+ZGV2OwotCS8qIHJlY29yZCBoYW5kbGVzIHRvIG91cnNlbGYgKi8KKwlkZXYtPmRldi5wYXJlbnQgPSAmcGNpLT5kZXY7CisJZGV2LT5tYXBfbmFtZSA9IGlyX2NvZGVzOworCWRldi0+ZHJpdmVyX25hbWUgPSBNT0RVTEVfTkFNRTsKKwlkZXYtPnByaXYgPSBjb3JlOworCWRldi0+b3BlbiA9IGN4ODhfaXJfb3BlbjsKKwlkZXYtPmNsb3NlID0gY3g4OF9pcl9jbG9zZTsKKwlkZXYtPnNjYW5tYXNrID0gaGFyZHdhcmVfbWFzazsKKworCWlmIChpci0+c2FtcGxpbmcpIHsKKwkJZGV2LT5kcml2ZXJfdHlwZSA9IFJDX0RSSVZFUl9JUl9SQVc7CisJCWRldi0+dGltZW91dCA9IDEwICogMTAwMCAqIDEwMDA7IC8qIDEwIG1zICovCisJfSBlbHNlIHsKKwkJZGV2LT5kcml2ZXJfdHlwZSA9IFJDX0RSSVZFUl9TQ0FOQ09ERTsKKwkJZGV2LT5hbGxvd2VkX3Byb3RvcyA9IHJjX3R5cGU7CisJfQorCiAJaXItPmNvcmUgPSBjb3JlOwogCWNvcmUtPmlyID0gaXI7CiAKLQlpci0+cHJvcHMucHJpdiA9IGNvcmU7Ci0JaXItPnByb3BzLm9wZW4gPSBjeDg4X2lyX29wZW47Ci0JaXItPnByb3BzLmNsb3NlID0gY3g4OF9pcl9jbG9zZTsKLQlpci0+cHJvcHMuc2Nhbm1hc2sgPSBoYXJkd2FyZV9tYXNrOwotCiAJLyogYWxsIGRvbmUgKi8KLQllcnIgPSBpcl9pbnB1dF9yZWdpc3Rlcihpci0+aW5wdXQsIGlyX2NvZGVzLCAmaXItPnByb3BzLCBNT0RVTEVfTkFNRSk7CisJZXJyID0gcmNfcmVnaXN0ZXJfZGV2aWNlKGRldik7CiAJaWYgKGVycikKIAkJZ290byBlcnJfb3V0X2ZyZWU7CiAKIAlyZXR1cm4gMDsKIAotIGVycl9vdXRfZnJlZToKK2Vycl9vdXRfZnJlZToKKwlyY19mcmVlX2RldmljZShkZXYpOwogCWNvcmUtPmlyID0gTlVMTDsKIAlrZnJlZShpcik7CiAJcmV0dXJuIGVycjsKQEAgLTQ4MSw3ICs0ODksNyBAQAogCQlyZXR1cm4gMDsKIAogCWN4ODhfaXJfc3RvcChjb3JlKTsKLQlpcl9pbnB1dF91bnJlZ2lzdGVyKGlyLT5pbnB1dCk7CisJcmNfdW5yZWdpc3Rlcl9kZXZpY2UoaXItPmRldik7CiAJa2ZyZWUoaXIpOwogCiAJLyogZG9uZSAqLwpAQCAtNDk0LDEzNSArNTAyLDc1IEBACiB2b2lkIGN4ODhfaXJfaXJxKHN0cnVjdCBjeDg4X2NvcmUgKmNvcmUpCiB7CiAJc3RydWN0IGN4ODhfSVIgKmlyID0gY29yZS0+aXI7Ci0JdTMyIHNhbXBsZXMsIGlyY29kZTsKLQlpbnQgaSwgc3RhcnQsIHJhbmdlLCB0b2dnbGUsIGRldiwgY29kZTsKKwl1MzIgc2FtcGxlczsKKwl1bnNpZ25lZCB0b2RvLCBiaXRzOworCXN0cnVjdCBpcl9yYXdfZXZlbnQgZXY7CiAKLQlpZiAoTlVMTCA9PSBpcikKLQkJcmV0dXJuOwotCWlmICghaXItPnNhbXBsaW5nKQorCWlmICghaXIgfHwgIWlyLT5zYW1wbGluZykKIAkJcmV0dXJuOwogCisJLyoKKwkgKiBTYW1wbGVzIGFyZSBzdG9yZWQgaW4gYSAzMiBiaXQgcmVnaXN0ZXIsIG9sZGVzdCBzYW1wbGUgaW4KKwkgKiB0aGUgbXNiLiBBIHNldCBiaXQgcmVwcmVzZW50cyBzcGFjZSBhbmQgYW4gdW5zZXQgYml0CisJICogcmVwcmVzZW50cyBhIHB1bHNlLgorCSAqLwogCXNhbXBsZXMgPSBjeF9yZWFkKE1PX1NBTVBMRV9JTyk7Ci0JaWYgKDAgIT0gc2FtcGxlcyAmJiAweGZmZmZmZmZmICE9IHNhbXBsZXMpIHsKLQkJLyogcmVjb3JkIHNhbXBsZSBkYXRhICovCi0JCWlmIChpci0+c2NvdW50IDwgQVJSQVlfU0laRShpci0+c2FtcGxlcykpCi0JCQlpci0+c2FtcGxlc1tpci0+c2NvdW50KytdID0gc2FtcGxlczsKKworCWlmIChzYW1wbGVzID09IDB4ZmYgJiYgaXItPmRldi0+aWRsZSkKIAkJcmV0dXJuOworCisJaW5pdF9pcl9yYXdfZXZlbnQoJmV2KTsKKwlmb3IgKHRvZG8gPSAzMjsgdG9kbyA+IDA7IHRvZG8gLT0gYml0cykgeworCQlldi5wdWxzZSA9IHNhbXBsZXMgJiAweDgwMDAwMDAwID8gZmFsc2UgOiB0cnVlOworCQliaXRzID0gbWluKHRvZG8sIDMyVSAtIGZscyhldi5wdWxzZSA/IHNhbXBsZXMgOiB+c2FtcGxlcykpOworCQlldi5kdXJhdGlvbiA9IChiaXRzICogTlNFQ19QRVJfU0VDKSAvICgxMDAwICogaXJfc2FtcGxlcmF0ZSk7CisJCWlyX3Jhd19ldmVudF9zdG9yZV93aXRoX2ZpbHRlcihpci0+ZGV2LCAmZXYpOworCQlzYW1wbGVzIDw8PSBiaXRzOwogCX0KLQlpZiAoIWlyLT5zY291bnQpIHsKLQkJLyogbm90aGluZyB0byBzYW1wbGUgKi8KLQkJcmV0dXJuOwotCX0KLQotCS8qIGhhdmUgYSBjb21wbGV0ZSBzYW1wbGUgKi8KLQlpZiAoaXItPnNjb3VudCA8IEFSUkFZX1NJWkUoaXItPnNhbXBsZXMpKQotCQlpci0+c2FtcGxlc1tpci0+c2NvdW50KytdID0gc2FtcGxlczsKLQlmb3IgKGkgPSAwOyBpIDwgaXItPnNjb3VudDsgaSsrKQotCQlpci0+c2FtcGxlc1tpXSA9IH5pci0+c2FtcGxlc1tpXTsKLQlpZiAoaXJfZGVidWcpCi0JCWlyX2R1bXBfc2FtcGxlcyhpci0+c2FtcGxlcywgaXItPnNjb3VudCk7Ci0KLQkvKiBkZWNvZGUgaXQgKi8KLQlzd2l0Y2ggKGNvcmUtPmJvYXJkbnIpIHsKLQljYXNlIENYODhfQk9BUkRfVEVWSUlfUzQ2MDoKLQljYXNlIENYODhfQk9BUkRfVEVWSUlfUzQyMDoKLQljYXNlIENYODhfQk9BUkRfVEVSUkFURUNfQ0lORVJHWV8xNDAwX0RWQl9UMToKLQljYXNlIENYODhfQk9BUkRfRE5UVl9MSVZFX0RWQl9UX1BSTzoKLQljYXNlIENYODhfQk9BUkRfT01JQ09NX1NTNF9QQ0k6Ci0JY2FzZSBDWDg4X0JPQVJEX1NBVFRSQURFX1NUNDIwMDoKLQljYXNlIENYODhfQk9BUkRfVEJTXzg5MjA6Ci0JY2FzZSBDWDg4X0JPQVJEX1RCU184OTEwOgotCWNhc2UgQ1g4OF9CT0FSRF9QUk9GXzczMDA6Ci0JY2FzZSBDWDg4X0JPQVJEX1BST0ZfNzMwMToKLQljYXNlIENYODhfQk9BUkRfUFJPRl82MjAwOgotCWNhc2UgQ1g4OF9CT0FSRF9UV0lOSEFOX1ZQMTAyN19EVkJTOgotCQlpcmNvZGUgPSBpcl9kZWNvZGVfcHVsc2VkaXN0YW5jZShpci0+c2FtcGxlcywgaXItPnNjb3VudCwgMSwgNCk7Ci0KLQkJaWYgKGlyY29kZSA9PSAweGZmZmZmZmZmKSB7IC8qIGRlY29kaW5nIGVycm9yICovCi0JCQlpcl9kcHJpbnRrKCJwdWxzZSBkaXN0YW5jZSBkZWNvZGluZyBlcnJvclxuIik7Ci0JCQlicmVhazsKLQkJfQotCi0JCWlyX2RwcmludGsoInB1bHNlIGRpc3RhbmNlIGRlY29kZWQ6ICV4XG4iLCBpcmNvZGUpOwotCi0JCWlmIChpcmNvZGUgPT0gMCkgeyAvKiBrZXkgc3RpbGwgcHJlc3NlZCAqLwotCQkJaXJfZHByaW50aygicHVsc2UgZGlzdGFuY2UgZGVjb2RlZCByZXBlYXQgY29kZVxuIik7Ci0JCQlpcl9yZXBlYXQoaXItPmlucHV0KTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJaWYgKChpcmNvZGUgJiAweGZmZmYpICE9IChpci0+c2FtcGxpbmcgJiAweGZmZmYpKSB7IC8qIHdyb25nIGFkZHJlc3MgKi8KLQkJCWlyX2RwcmludGsoInB1bHNlIGRpc3RhbmNlIGRlY29kZWQgd3JvbmcgYWRkcmVzc1xuIik7Ci0JCQlicmVhazsKLQkJfQotCi0JCWlmICgoKH5pcmNvZGUgPj4gMjQpICYgMHhmZikgIT0gKChpcmNvZGUgPj4gMTYpICYgMHhmZikpIHsgLyogd3JvbmcgY2hlY2tzdW0gKi8KLQkJCWlyX2RwcmludGsoInB1bHNlIGRpc3RhbmNlIGRlY29kZWQgd3JvbmcgY2hlY2sgc3VtXG4iKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJaXJfZHByaW50aygiS2V5IENvZGU6ICV4XG4iLCAoaXJjb2RlID4+IDE2KSAmIDB4ZmYpOwotCQlpcl9rZXlkb3duKGlyLT5pbnB1dCwgKGlyY29kZSA+PiAxNikgJiAweGZmLCAwKTsKLQkJYnJlYWs7Ci0JY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRToKLQljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX0RWQl9UMToKLQljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX05PVkFTRTJfUzE6Ci0JY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9OT1ZBU1BMVVNfUzE6Ci0JY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlIxMTAwOgotCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfSFZSMzAwMDoKLQljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjQwMDA6Ci0JY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlI0MDAwTElURToKLQljYXNlIENYODhfQk9BUkRfUENIRFRWX0hEMzAwMDoKLQljYXNlIENYODhfQk9BUkRfUENIRFRWX0hENTUwMDoKLQljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX0lST05MWToKLQkJaXJjb2RlID0gaXJfZGVjb2RlX2JpcGhhc2UoaXItPnNhbXBsZXMsIGlyLT5zY291bnQsIDUsIDcpOwotCQlpcl9kcHJpbnRrKCJiaXBoYXNlIGRlY29kZWQ6ICV4XG4iLCBpcmNvZGUpOwotCQkvKgotCQkgKiBSQzUgaGFzIGFuIGV4dGVuc2lvbiBiaXQgd2hpY2ggYWRkcyBhIG5ldyByYW5nZQotCQkgKiBvZiBhdmFpbGFibGUgY29kZXMsIHRoaXMgaXMgZGV0ZWN0ZWQgaGVyZS4gQWxzbwotCQkgKiBoYXVwcGF1Z2UgcmVtb3RlcyAoYmxhY2svc2lsdmVyKSBhbHdheXMgdXNlCi0JCSAqIHNwZWNpZmljIGRldmljZSBpZHMuIElmIHdlIGRvIG5vdCBmaWx0ZXIgdGhlCi0JCSAqIGRldmljZSBpZHMgdGhlbiBtZXNzYWdlcyBkZXN0aW5lZCBmb3IgZGV2aWNlcwotCQkgKiBzdWNoIGFzIFRWcyAoaWQ9MCkgd2lsbCBnZXQgdGhyb3VnaCB0byB0aGUKLQkJICogZGV2aWNlIGNhdXNpbmcgbWlzLWZpcmVkIGV2ZW50cy4KLQkJICovCi0JCS8qIHNwbGl0IHJjNSBkYXRhIGJsb2NrIC4uLiAqLwotCQlzdGFydCA9IChpcmNvZGUgJiAweDIwMDApID4+IDEzOwotCQlyYW5nZSA9IChpcmNvZGUgJiAweDEwMDApID4+IDEyOwotCQl0b2dnbGU9IChpcmNvZGUgJiAweDA4MDApID4+IDExOwotCQlkZXYgICA9IChpcmNvZGUgJiAweDA3YzApID4+IDY7Ci0JCWNvZGUgID0gKGlyY29kZSAmIDB4MDAzZikgfCAoKHJhbmdlIDw8IDYpIF4gMHgwMDQwKTsKLQkJaWYoIHN0YXJ0ICE9IDEpCi0JCQkvKiBubyBrZXkgcHJlc3NlZCAqLwotCQkJYnJlYWs7Ci0JCWlmICggZGV2ICE9IDB4MWUgJiYgZGV2ICE9IDB4MWYgKQotCQkJLyogbm90IGEgaGF1cHBhdWdlIHJlbW90ZSAqLwotCQkJYnJlYWs7Ci0JCWlyX2tleWRvd24oaXItPmlucHV0LCBjb2RlLCB0b2dnbGUpOwotCQlicmVhazsKLQljYXNlIENYODhfQk9BUkRfUElOTkFDTEVfUENUVl9IRF84MDBpOgotCQlpcmNvZGUgPSBpcl9kZWNvZGVfYmlwaGFzZShpci0+c2FtcGxlcywgaXItPnNjb3VudCwgNSwgNyk7Ci0JCWlyX2RwcmludGsoImJpcGhhc2UgZGVjb2RlZDogJXhcbiIsIGlyY29kZSk7Ci0JCWlmICgoaXJjb2RlICYgMHhmZmZmZjAwMCkgIT0gMHgzMDAwKQotCQkJYnJlYWs7Ci0JCS8qIE5vdGU6IGJpdCAweDgwMCBiZWluZyB0aGUgdG9nZ2xlIGlzIGFzc3VtZWQsIG5vdCBjaGVja2VkCi0JCSAgIHdpdGggcmVhbCBoYXJkd2FyZSAgKi8KLQkJaXJfa2V5ZG93bihpci0+aW5wdXQsIGlyY29kZSAmIDB4M2YsIGlyY29kZSAmIDB4MDgwMCA/IDEgOiAwKTsKLQkJYnJlYWs7Ci0JfQotCi0JaXItPnNjb3VudCA9IDA7Ci0JcmV0dXJuOworCWlyX3Jhd19ldmVudF9oYW5kbGUoaXItPmRldik7CiB9CiAKK3N0YXRpYyBpbnQgZ2V0X2tleV9wdnIyMDAwKHN0cnVjdCBJUl9pMmMgKmlyLCB1MzIgKmlyX2tleSwgdTMyICppcl9yYXcpCit7CisJaW50IGZsYWdzLCBjb2RlOworCisJLyogcG9sbCBJUiBjaGlwICovCisJZmxhZ3MgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoaXItPmMsIDB4MTApOworCWlmIChmbGFncyA8IDApIHsKKwkJZHByaW50aygicmVhZCBlcnJvclxuIik7CisJCXJldHVybiAwOworCX0KKwkvKiBrZXkgcHJlc3NlZCA/ICovCisJaWYgKDAgPT0gKGZsYWdzICYgMHg4MCkpCisJCXJldHVybiAwOworCisJLyogcmVhZCBhY3R1YWwga2V5IGNvZGUgKi8KKwljb2RlID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGlyLT5jLCAweDAwKTsKKwlpZiAoY29kZSA8IDApIHsKKwkJZHByaW50aygicmVhZCBlcnJvclxuIik7CisJCXJldHVybiAwOworCX0KKworCWRwcmludGsoIklSIEtleS9GbGFnczogKDB4JTAyeC8weCUwMngpXG4iLAorCQkgICBjb2RlICYgMHhmZiwgZmxhZ3MgJiAweGZmKTsKKworCSppcl9rZXkgPSBjb2RlICYgMHhmZjsKKwkqaXJfcmF3ID0gY29kZTsKKwlyZXR1cm4gMTsKK30KIAogdm9pZCBjeDg4X2kyY19pbml0X2lyKHN0cnVjdCBjeDg4X2NvcmUgKmNvcmUpCiB7CiAJc3RydWN0IGkyY19ib2FyZF9pbmZvIGluZm87Ci0JY29uc3QgdW5zaWduZWQgc2hvcnQgYWRkcl9saXN0W10gPSB7CisJY29uc3QgdW5zaWduZWQgc2hvcnQgZGVmYXVsdF9hZGRyX2xpc3RbXSA9IHsKIAkJMHgxOCwgMHg2YiwgMHg3MSwKIAkJSTJDX0NMSUVOVF9FTkQKIAl9OworCWNvbnN0IHVuc2lnbmVkIHNob3J0IHB2cjIwMDBfYWRkcl9saXN0W10gPSB7CisJCTB4MTgsIDB4MWEsCisJCUkyQ19DTElFTlRfRU5ECisJfTsKKwljb25zdCB1bnNpZ25lZCBzaG9ydCAqYWRkcl9saXN0ID0gZGVmYXVsdF9hZGRyX2xpc3Q7CiAJY29uc3QgdW5zaWduZWQgc2hvcnQgKmFkZHJwOwogCS8qIEluc3RhbnRpYXRlIHRoZSBJUiByZWNlaXZlciBkZXZpY2UsIGlmIHByZXNlbnQgKi8KIAlpZiAoMCAhPSBjb3JlLT5pMmNfcmMpCkBAIC02MzEsNiArNTc5LDE2IEBACiAJbWVtc2V0KCZpbmZvLCAwLCBzaXplb2Yoc3RydWN0IGkyY19ib2FyZF9pbmZvKSk7CiAJc3RybGNweShpbmZvLnR5cGUsICJpcl92aWRlbyIsIEkyQ19OQU1FX1NJWkUpOwogCisJc3dpdGNoIChjb3JlLT5ib2FyZG5yKSB7CisJY2FzZSBDWDg4X0JPQVJEX0xFQURURUtfUFZSMjAwMDoKKwkJYWRkcl9saXN0ID0gcHZyMjAwMF9hZGRyX2xpc3Q7CisJCWNvcmUtPmluaXRfZGF0YS5uYW1lID0gImN4ODggTGVhZHRlayBQVlIgMjAwMCByZW1vdGUiOworCQljb3JlLT5pbml0X2RhdGEudHlwZSA9IFJDX1RZUEVfVU5LTk9XTjsKKwkJY29yZS0+aW5pdF9kYXRhLmdldF9rZXkgPSBnZXRfa2V5X3B2cjIwMDA7CisJCWNvcmUtPmluaXRfZGF0YS5pcl9jb2RlcyA9IFJDX01BUF9FTVBUWTsKKwkJYnJlYWs7CisJfQorCiAJLyoKIAkgKiBXZSBjYW4ndCBjYWxsIGkyY19uZXdfcHJvYmVkX2RldmljZSgpIGJlY2F1c2UgaXQgdXNlcwogCSAqIHF1aWNrIHdyaXRlcyBmb3IgcHJvYmluZyBhbmQgYXQgbGVhc3Qgc29tZSBSQyByZWNlaXZlcgpAQCAtNjQ2LDcgKzYwNCw3IEBACiAJCQkvKiBIYXVwcGF1Z2UgWFZSICovCiAJCQljb3JlLT5pbml0X2RhdGEubmFtZSA9ICJjeDg4IEhhdXBwYXVnZSBYVlIgcmVtb3RlIjsKIAkJCWNvcmUtPmluaXRfZGF0YS5pcl9jb2RlcyA9IFJDX01BUF9IQVVQUEFVR0VfTkVXOwotCQkJY29yZS0+aW5pdF9kYXRhLnR5cGUgPSBJUl9UWVBFX1JDNTsKKwkJCWNvcmUtPmluaXRfZGF0YS50eXBlID0gUkNfVFlQRV9SQzU7CiAJCQljb3JlLT5pbml0X2RhdGEuaW50ZXJuYWxfZ2V0X2tleV9mdW5jID0gSVJfS0JEX0dFVF9LRVlfSEFVUF9YVlI7CiAKIAkJCWluZm8ucGxhdGZvcm1fZGF0YSA9ICZjb3JlLT5pbml0X2RhdGE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1tcGVnLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1tcGVnLmMKaW5kZXggZjdkNzFhYy4uYWRkZjk1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtbXBlZy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LW1wZWcuYwpAQCAtNjYsOCArNjYsMTQgQEAKIAlJTklUX1dPUksoJmRldi0+cmVxdWVzdF9tb2R1bGVfd2ssIHJlcXVlc3RfbW9kdWxlX2FzeW5jKTsKIAlzY2hlZHVsZV93b3JrKCZkZXYtPnJlcXVlc3RfbW9kdWxlX3drKTsKIH0KKworc3RhdGljIHZvaWQgZmx1c2hfcmVxdWVzdF9tb2R1bGVzKHN0cnVjdCBjeDg4MDJfZGV2ICpkZXYpCit7CisJZmx1c2hfd29ya19zeW5jKCZkZXYtPnJlcXVlc3RfbW9kdWxlX3drKTsKK30KICNlbHNlCiAjZGVmaW5lIHJlcXVlc3RfbW9kdWxlcyhkZXYpCisjZGVmaW5lIGZsdXNoX3JlcXVlc3RfbW9kdWxlcyhkZXYpCiAjZW5kaWYgLyogQ09ORklHX01PRFVMRVMgKi8KIAogCkBAIC04MTksNiArODI1LDggQEAKIAogCWRwcmludGsoIDEsICIlc1xuIiwgX19mdW5jX18pOwogCisJZmx1c2hfcmVxdWVzdF9tb2R1bGVzKGRldik7CisKIAlpZiAoIWxpc3RfZW1wdHkoJmRldi0+ZHJ2bGlzdCkpIHsKIAkJc3RydWN0IGN4ODgwMl9kcml2ZXIgKmRydiwgKnRtcDsKIAkJaW50IGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC12aWRlby5jCmluZGV4IGQ5MjQ5ZTUuLjUwOGRhYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdmlkZW8uYwpAQCAtMTE1NiwxNSArMTE1Niw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKLXN0YXRpYyBpbnQgdmlkaW9jZ21idWYgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdmlkZW9fbWJ1ZiAqbWJ1ZikKLXsKLQlzdHJ1Y3QgY3g4ODAwX2ZoICAgICAgICAgICAqZmggID0gcHJpdjsKLQotCXJldHVybiB2aWRlb2J1Zl9jZ21idWYgKGdldF9xdWV1ZShmaCksIG1idWYsIDgpOwotfQotI2VuZGlmCi0KIHN0YXRpYyBpbnQgdmlkaW9jX3JlcWJ1ZnMgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9yZXF1ZXN0YnVmZmVycyAqcCkKIHsKIAlzdHJ1Y3QgY3g4ODAwX2ZoICAqZmggICA9IHByaXY7CkBAIC0xNzA2LDkgKzE2OTcsNiBAQAogCS52aWRpb2Nfc19jdHJsICAgICAgICA9IHZpZGlvY19zX2N0cmwsCiAJLnZpZGlvY19zdHJlYW1vbiAgICAgID0gdmlkaW9jX3N0cmVhbW9uLAogCS52aWRpb2Nfc3RyZWFtb2ZmICAgICA9IHZpZGlvY19zdHJlYW1vZmYsCi0jaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCi0JLnZpZGlvY2dtYnVmICAgICAgICAgID0gdmlkaW9jZ21idWYsCi0jZW5kaWYKIAkudmlkaW9jX2dfdHVuZXIgICAgICAgPSB2aWRpb2NfZ190dW5lciwKIAkudmlkaW9jX3NfdHVuZXIgICAgICAgPSB2aWRpb2Nfc190dW5lciwKIAkudmlkaW9jX2dfZnJlcXVlbmN5ICAgPSB2aWRpb2NfZ19mcmVxdWVuY3ksCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC12cDMwNTQtaTJjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC12cDMwNTQtaTJjLmMKaW5kZXggZWM1NDc2ZC4uZDc3ZjhlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdnAzMDU0LWkyYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXZwMzA1NC1pMmMuYwpAQCAtMTI1LDcgKzEyNSw2IEBACiAJc3RybGNweSh2cDMwNTRfaTJjLT5hZGFwLm5hbWUsIGNvcmUtPm5hbWUsCiAJCXNpemVvZih2cDMwNTRfaTJjLT5hZGFwLm5hbWUpKTsKIAl2cDMwNTRfaTJjLT5hZGFwLm93bmVyID0gVEhJU19NT0RVTEU7Ci0JdnAzMDU0X2kyYy0+YWRhcC5pZCA9IEkyQ19IV19CX0NYMjM4OHg7CiAJdnAzMDU0X2kyYy0+YWxnby5kYXRhID0gZGV2OwogCWkyY19zZXRfYWRhcGRhdGEoJnZwMzA1NF9pMmMtPmFkYXAsIGRldik7CiAJdnAzMDU0X2kyYy0+YWRhcC5hbGdvX2RhdGEgPSAmdnAzMDU0X2kyYy0+YWxnbzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS92cGZlX2NhcHR1cmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS92cGZlX2NhcHR1cmUuYwppbmRleCA3MzMzYTliLi4zNTNlYWRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvdnBmZV9jYXB0dXJlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL3ZwZmVfY2FwdHVyZS5jCkBAIC0xMjc2LDcgKzEyNzYsNyBAQAogCQl2Yi0+c2l6ZSA9IHZwZmVfZGV2LT5mbXQuZm10LnBpeC5zaXplaW1hZ2U7CiAJCXZiLT5maWVsZCA9IGZpZWxkOwogCi0JCXJldCA9IHZpZGVvYnVmX2lvbG9jayh2cSwgdmIsIE5VTEwpOzsKKwkJcmV0ID0gdmlkZW9idWZfaW9sb2NrKHZxLCB2YiwgTlVMTCk7CiAJCWlmIChyZXQgPCAwKQogCQkJcmV0dXJuIHJldDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L0tjb25maWcKaW5kZXggNjZhZWZkNi4uOTg1MTAwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9LY29uZmlnCkBAIC0xLDkgKzEsOSBAQAogY29uZmlnIFZJREVPX0VNMjhYWAogCXRyaXN0YXRlICJFbXBpYSBFTTI4eHggVVNCIHZpZGVvIGNhcHR1cmUgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFZJREVPX0RFViAmJiBJMkMgJiYgSU5QVVQKKwlkZXBlbmRzIG9uIFZJREVPX0RFViAmJiBJMkMKIAlzZWxlY3QgVklERU9fVFVORVIKIAlzZWxlY3QgVklERU9fVFZFRVBST00KLQlkZXBlbmRzIG9uIFZJREVPX0lSCisJZGVwZW5kcyBvbiBSQ19DT1JFCiAJc2VsZWN0IFZJREVPQlVGX1ZNQUxMT0MKIAlzZWxlY3QgVklERU9fU0FBNzExWCBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTwogCXNlbGVjdCBWSURFT19UVlA1MTUwIGlmIFZJREVPX0hFTFBFUl9DSElQU19BVVRPCkBAIC0zNyw2ICszNyw3IEBACiAJc2VsZWN0IERWQl9MR0RUMzMwWCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfWkwxMDM1MyBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfVERBMTAwMjMgaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX1M5MjEgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgVklERU9CVUZfRFZCCiAJLS0taGVscC0tLQogCSAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIERWQiBjYXJkcyBiYXNlZCBvbiB0aGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1jYXJkcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWNhcmRzLmMKaW5kZXggZjdlOTE2OC4uMDk5ZDVkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWNhcmRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWNhcmRzLmMKQEAgLTI2OCw2ICsyNjgsMjAgQEAKIH07CiAKIAorLyogUmVzZXQgZm9yIHRoZSBtb3N0IFtkaWdpdGFsXSBib2FyZHMgKi8KK3N0YXRpYyBzdHJ1Y3QgZW0yOHh4X3JlZ19zZXEgbGVhZGVyc2hpcF9kaWdpdGFsW10gPSB7CisJe0VNMjg3NF9SODBfR1BJTywJMHg3MCwJMHhmZiwJMTB9LAorCXsJLTEsCQktMSwJLTEsCS0xfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZW0yOHh4X3JlZ19zZXEgbGVhZGVyc2hpcF9yZXNldFtdID0geworCXtFTTI4NzRfUjgwX0dQSU8sCTB4ZjAsCTB4ZmYsCTEwfSwKKwl7RU0yODc0X1I4MF9HUElPLAkweGIwLAkweGZmLAkxMH0sCisJe0VNMjg3NF9SODBfR1BJTywJMHhmMCwJMHhmZiwJMTB9LAorCXsJLTEsCQktMSwJLTEsCS0xfSwKK307CisKKwogLyoKICAqICBCb2FyZCBkZWZpbml0aW9ucwogICovCkBAIC0xMjI0LDYgKzEyMzgsMTkgQEAKIAkJCS52bXV4ICAgICA9IFNBQTcxMTVfQ09NUE9TSVRFMCwKIAkJfSB9LAogCX0sCisKKwlbRU0yODc0X0xFQURFUlNISVBfSVNEQlRdID0geworCQkuaTJjX3NwZWVkICAgICAgPSBFTTI4NzRfSTJDX1NFQ09OREFSWV9CVVNfU0VMRUNUIHwKKwkJCQkgIEVNMjhYWF9JMkNfQ0xLX1dBSVRfRU5BQkxFIHwKKwkJCQkgIEVNMjhYWF9JMkNfRlJFUV8xMDBfS0haLAorCQkueGNsawkJPSBFTTI4WFhfWENMS19GUkVRVUVOQ1lfMTBNSFosCisJCS5uYW1lCQk9ICJFTTI4NzQgTGVhZGVyc2hpcCBJU0RCVCIsCisJCS50dW5lcl90eXBlCT0gVFVORVJfQUJTRU5ULAorCQkudHVuZXJfZ3BpbyAgICAgPSBsZWFkZXJzaGlwX3Jlc2V0LAorCQkuZHZiX2dwaW8gICAgICAgPSBsZWFkZXJzaGlwX2RpZ2l0YWwsCisJCS5oYXNfZHZiCT0gMSwKKwl9LAorCiAJW0VNMjg4MF9CT0FSRF9NU0lfRElHSVZPWF9BRF0gPSB7CiAJCS5uYW1lICAgICAgICAgPSAiTVNJIERpZ2lWb3ggQS9EIiwKIAkJLnZhbGlkICAgICAgICA9IEVNMjhYWF9CT0FSRF9OT1RfVkFMSURBVEVELApAQCAtMTQ2OSw3ICsxNDk2LDcgQEAKIAkJfSB9LAogCX0sCiAJW0VNMjg4Ml9CT0FSRF9URVJSQVRFQ19IWUJSSURfWFNdID0gewotCQkubmFtZSAgICAgICAgID0gIlRlcnJhdGVjIEh5YnJpZCBYUyAoZW0yODgyKSIsCisJCS5uYW1lICAgICAgICAgPSAiVGVycmF0ZWMgQ2lubmVyZ3kgSHlicmlkIFQgVVNCIFhTIChlbTI4ODIpIiwKIAkJLnR1bmVyX3R5cGUgICA9IFRVTkVSX1hDMjAyOCwKIAkJLnR1bmVyX2dwaW8gICA9IGRlZmF1bHRfdHVuZXJfZ3BpbywKIAkJLm10c19maXJtd2FyZSA9IDEsCkBAIC0xNjMzLDExICsxNjYwLDExIEBACiAJCS5pbnB1dCAgICAgICAgICAgPSB7IHsKIAkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX0NPTVBPU0lURTEsCiAJCQkudm11eCAgICAgPSBTQUE3MTE1X0NPTVBPU0lURTAsCi0JCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9WSURFTzIsCisJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9MSU5FX0lOLAogCQl9LCB7CiAJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9TVklERU8sCiAJCQkudm11eCAgICAgPSBTQUE3MTE1X1NWSURFTzMsCi0JCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9WSURFTzIsCisJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9MSU5FX0lOLAogCQl9IH0sCiAJfSwKIAlbRU0yODYwX0JPQVJEX1RFUlJBVEVDX0FWMzUwXSA9IHsKQEAgLTE3NTQsNiArMTc4MSw4IEBACiAJCQkuZHJpdmVyX2luZm8gPSBFTTI4MjBfQk9BUkRfVU5LTk9XTiB9LAogCXsgVVNCX0RFVklDRSgweGViMWEsIDB4Mjg2OCksCiAJCQkuZHJpdmVyX2luZm8gPSBFTTI4MjBfQk9BUkRfVU5LTk9XTiB9LAorCXsgVVNCX0RFVklDRSgweGViMWEsIDB4Mjg3NSksCisJCQkuZHJpdmVyX2luZm8gPSBFTTI4MjBfQk9BUkRfVU5LTk9XTiB9LAogCXsgVVNCX0RFVklDRSgweGViMWEsIDB4ZTMwMCksCiAJCQkuZHJpdmVyX2luZm8gPSBFTTI4NjFfQk9BUkRfS1dPUkxEX1BWUlRWXzMwMFUgfSwKIAl7IFVTQl9ERVZJQ0UoMHhlYjFhLCAweGUzMDMpLApAQCAtMTc5MSw3ICsxODIwLDcgQEAKIAl7IFVTQl9ERVZJQ0UoMHgwY2NkLCAweDAwNWUpLAogCQkJLmRyaXZlcl9pbmZvID0gRU0yODgyX0JPQVJEX1RFUlJBVEVDX0hZQlJJRF9YUyB9LAogCXsgVVNCX0RFVklDRSgweDBjY2QsIDB4MDA0MiksCi0JCQkuZHJpdmVyX2luZm8gPSBFTTI4ODBfQk9BUkRfVEVSUkFURUNfSFlCUklEX1hTIH0sCisJCQkuZHJpdmVyX2luZm8gPSBFTTI4ODJfQk9BUkRfVEVSUkFURUNfSFlCUklEX1hTIH0sCiAJeyBVU0JfREVWSUNFKDB4MGNjZCwgMHgwMDQzKSwKIAkJCS5kcml2ZXJfaW5mbyA9IEVNMjg3MF9CT0FSRF9URVJSQVRFQ19YUyB9LAogCXsgVVNCX0RFVklDRSgweDBjY2QsIDB4MDA0NyksCkBAIC0xODczLDYgKzE5MDIsNyBAQAogCXsweDc3ODAwMDgwLCBFTTI4NjBfQk9BUkRfVFZQNTE1MF9SRUZFUkVOQ0VfREVTSUdOLCBUVU5FUl9BQlNFTlR9LAogCXsweGM1MTIwMGUzLCBFTTI4MjBfQk9BUkRfR0FETUVJX1RWUjIwMCwgVFVORVJfTEdfUEFMX05FV19UQVBDfSwKIAl7MHg0YmE1MDA4MCwgRU0yODYxX0JPQVJEX0dBRE1FSV9VVFYzMzBQTFVTLCBUVU5FUl9UTkZfNTMzNU1GfSwKKwl7MHg2YjgwMDA4MCwgRU0yODc0X0xFQURFUlNISVBfSVNEQlQsIFRVTkVSX0FCU0VOVH0sCiB9OwogCiAvKiBJMkMgcG9zc2libGUgYWRkcmVzcyB0byBzYWE3MTE1LCB0dnA1MTUwLCBtc3AzNDAwLCB0dmF1ZGlvICovCkBAIC0yNDA4LDcgKzI0MzgsNyBAQAogCQlkZXYtPmluaXRfZGF0YS5nZXRfa2V5ID0gZW0yOHh4X2dldF9rZXlfZW1faGF1cDsKIAkJZGV2LT5pbml0X2RhdGEubmFtZSA9ICJpMmMgSVIgKEVNMjg0MCBIYXVwcGF1Z2UpIjsKIAljYXNlIEVNMjgyMF9CT0FSRF9MRUFEVEVLX1dJTkZBU1RfVVNCSUlfREVMVVhFOgotCQlkZXYtPmluaXRfZGF0YS5pcl9jb2RlcyA9IFJDX01BUF9XSU5GQVNUX1VTQklJX0RFTFVYRTs7CisJCWRldi0+aW5pdF9kYXRhLmlyX2NvZGVzID0gUkNfTUFQX1dJTkZBU1RfVVNCSUlfREVMVVhFOwogCQlkZXYtPmluaXRfZGF0YS5nZXRfa2V5ID0gZW0yOHh4X2dldF9rZXlfd2luZmFzdF91c2JpaV9kZWx1eGU7CiAJCWRldi0+aW5pdF9kYXRhLm5hbWUgPSAiaTJjIElSIChFTTI4MjAgV2luZmFzdCBUViBVU0JJSSBEZWx1eGUpIjsKIAkJYnJlYWs7CkBAIC0yNDMwLDggKzI0NjAsMzYgQEAKIAkJCWRldi0+Ym9hcmQuaXNfd2ViY2FtID0gMDsKIAkJZWxzZQogCQkJZGV2LT5wcm9ncmVzc2l2ZSA9IDE7Ci0JfSBlbHNlCi0JCWVtMjh4eF9zZXRfbW9kZWwoZGV2KTsKKwl9CisKKwlpZiAoIWRldi0+Ym9hcmQuaXNfd2ViY2FtKSB7CisJCXN3aXRjaCAoZGV2LT5tb2RlbCkgeworCQljYXNlIEVNMjgyMF9CT0FSRF9VTktOT1dOOgorCQljYXNlIEVNMjgwMF9CT0FSRF9VTktOT1dOOgorCQkvKgorCQkgKiBUaGUgSy1XT1JMRCBEVkItVCAzMTBVIGlzIGRldGVjdGVkIGFzIGFuIE1TSSBEaWdpdm94IEFELgorCQkgKgorCQkgKiBUaGlzIG9jY3VycyBiZWNhdXNlIHRoZXkgc2hhcmUgaWRlbnRpY2FsIFVTQiB2ZW5kb3IgYW5kCisJCSAqIHByb2R1Y3QgSURzLgorCQkgKgorCQkgKiBXaGF0IHdlIGRvIGhlcmUgaXMgbG9vayB1cCB0aGUgRUVQUk9NIGhhc2ggb2YgdGhlIEstV09STEQKKwkJICogYW5kIGlmIGl0IGlzIGZvdW5kIHRoZW4gd2UgZGVjaWRlIHRoYXQgd2UgZG8gbm90IGhhdmUKKwkJICogYSBESUdJVk9YIGFuZCByZXNldCB0aGUgZGV2aWNlIHRvIHRoZSBLLVdPUkxEIGluc3RlYWQuCisJCSAqCisJCSAqIFRoaXMgc29sdXRpb24gaXMgb25seSB2YWxpZCBpZiB0aGV5IGRvIG5vdCBzaGFyZSBlZXByb20KKwkJICogaGFzaCBpZGVudGl0aWVzIHdoaWNoIGhhcyBub3QgYmVlbiBkZXRlcm1pbmVkIGFzIHlldC4KKwkJICovCisJCWlmIChlbTI4eHhfaGludF9ib2FyZChkZXYpIDwgMCkKKwkJCWVtMjh4eF9lcnJkZXYoIkJvYXJkIG5vdCBkaXNjb3ZlcmVkXG4iKTsKKwkJZWxzZSB7CisJCQllbTI4eHhfc2V0X21vZGVsKGRldik7CisJCQllbTI4eHhfcHJlX2NhcmRfc2V0dXAoZGV2KTsKKwkJfQorCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVtMjh4eF9zZXRfbW9kZWwoZGV2KTsKKwkJfQorCX0KIAogCWVtMjh4eF9pbmZvKCJJZGVudGlmaWVkIGFzICVzIChjYXJkPSVkKVxuIiwKIAkJICAgIGRldi0+Ym9hcmQubmFtZSwgZGV2LT5tb2RlbCk7CkBAIC0yNjMyLDggKzI2OTAsMTQgQEAKIAlJTklUX1dPUksoJmRldi0+cmVxdWVzdF9tb2R1bGVfd2ssIHJlcXVlc3RfbW9kdWxlX2FzeW5jKTsKIAlzY2hlZHVsZV93b3JrKCZkZXYtPnJlcXVlc3RfbW9kdWxlX3drKTsKIH0KKworc3RhdGljIHZvaWQgZmx1c2hfcmVxdWVzdF9tb2R1bGVzKHN0cnVjdCBlbTI4eHggKmRldikKK3sKKwlmbHVzaF93b3JrX3N5bmMoJmRldi0+cmVxdWVzdF9tb2R1bGVfd2spOworfQogI2Vsc2UKICNkZWZpbmUgcmVxdWVzdF9tb2R1bGVzKGRldikKKyNkZWZpbmUgZmx1c2hfcmVxdWVzdF9tb2R1bGVzKGRldikKICNlbmRpZiAvKiBDT05GSUdfTU9EVUxFUyAqLwogCiAvKgpAQCAtMjc0OSw4ICsyODEzLDggQEAKIAllbTI4eHhfcHJlX2NhcmRfc2V0dXAoZGV2KTsKIAogCWlmICghZGV2LT5ib2FyZC5pc19lbTI4MDApIHsKLQkJLyogU2V0cyBJMkMgc3BlZWQgdG8gMTAwIEtIeiAqLwotCQlyZXR2YWwgPSBlbTI4eHhfd3JpdGVfcmVnKGRldiwgRU0yOFhYX1IwNl9JMkNfQ0xLLCAweDQwKTsKKwkJLyogUmVzZXRzIEkyQyBzcGVlZCAqLworCQllbTI4eHhfd3JpdGVfcmVnKGRldiwgRU0yOFhYX1IwNl9JMkNfQ0xLLCBkZXYtPmJvYXJkLmkyY19zcGVlZCk7CiAJCWlmIChyZXR2YWwgPCAwKSB7CiAJCQllbTI4eHhfZXJyZGV2KCIlczogZW0yOHh4X3dyaXRlX3JlZ3NfcmVxIGZhaWxlZCEiCiAJCQkJICAgICAgIiByZXR2YWwgWyVkXVxuIiwKQEAgLTMwNjAsNiArMzEyNCw4IEBACiAKIAllbTI4eHhfaW5mbygiZGlzY29ubmVjdGluZyAlc1xuIiwgZGV2LT52ZGV2LT5uYW1lKTsKIAorCWZsdXNoX3JlcXVlc3RfbW9kdWxlcyhkZXYpOworCiAJLyogd2FpdCB1bnRpbCBhbGwgY3VycmVudCB2NGwyIGlvIGlzIGZpbmlzaGVkIHRoZW4gZGVhbGxvY2F0ZQogCSAgIHJlc291cmNlcyAqLwogCW11dGV4X2xvY2soJmRldi0+bG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtZHZiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtZHZiLmMKaW5kZXggM2FjOGQzMC4uYzdjMDRiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWR2Yi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1kdmIuYwpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIm10MzUyX3ByaXYuaCIgLyogRklYTUUgKi8KICNpbmNsdWRlICJ0ZGExMDAyeC5oIgogI2luY2x1ZGUgInRkYTE4MjcxLmgiCisjaW5jbHVkZSAiczkyMS5oIgogCiBNT0RVTEVfREVTQ1JJUFRJT04oImRyaXZlciBmb3IgZW0yOHh4IGJhc2VkIERWQiBjYXJkcyIpOwogTU9EVUxFX0FVVEhPUigiTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQGluZnJhZGVhZC5vcmc+Iik7CkBAIC0yNDUsNiArMjQ2LDEwIEBACiAJLnFhbV9pZl9raHogICAgICAgICA9IDQwMDAsCiB9OwogCitzdGF0aWMgc3RydWN0IHM5MjFfY29uZmlnIHNoYXJwX2lzZGJ0ID0geworCS5kZW1vZF9hZGRyZXNzID0gMHgzMCA+PiAxCit9OworCiBzdGF0aWMgc3RydWN0IHpsMTAzNTNfY29uZmlnIGVtMjh4eF96bDEwMzUzX3dpdGhfeGMzMDI4ID0gewogCS5kZW1vZF9hZGRyZXNzID0gKDB4MWUgPj4gMSksCiAJLm5vX3R1bmVyID0gMSwKQEAgLTQ4MSw2ICs0ODYsNyBAQAogCiAJaWYgKCFkZXYtPmJvYXJkLmhhc19kdmIpIHsKIAkJLyogVGhpcyBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGUgZXh0ZW5zaW9uICovCisJCXByaW50ayhLRVJOX0lORk8gImVtMjh4eF9kdmI6IFRoaXMgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhlIGV4dGVuc2lvblxuIik7CiAJCXJldHVybiAwOwogCX0KIApAQCAtNDk2LDYgKzUwMiwxNiBAQAogCWVtMjh4eF9zZXRfbW9kZShkZXYsIEVNMjhYWF9ESUdJVEFMX01PREUpOwogCS8qIGluaXQgZnJvbnRlbmQgKi8KIAlzd2l0Y2ggKGRldi0+bW9kZWwpIHsKKwljYXNlIEVNMjg3NF9MRUFERVJTSElQX0lTREJUOgorCQlkdmItPmZyb250ZW5kID0gZHZiX2F0dGFjaChzOTIxX2F0dGFjaCwKKwkJCQkmc2hhcnBfaXNkYnQsICZkZXYtPmkyY19hZGFwKTsKKworCQlpZiAoIWR2Yi0+ZnJvbnRlbmQpIHsKKwkJCXJlc3VsdCA9IC1FSU5WQUw7CisJCQlnb3RvIG91dF9mcmVlOworCQl9CisKKwkJYnJlYWs7CiAJY2FzZSBFTTI4ODNfQk9BUkRfSEFVUFBBVUdFX1dJTlRWX0hWUl84NTA6CiAJY2FzZSBFTTI4ODNfQk9BUkRfSEFVUFBBVUdFX1dJTlRWX0hWUl85NTA6CiAJY2FzZSBFTTI4ODBfQk9BUkRfUElOTkFDTEVfUENUVl9IRF9QUk86CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtaW5wdXQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1pbnB1dC5jCmluZGV4IDY3NTljZDUuLmJhMWJhODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1pbnB1dC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1pbnB1dC5jCkBAIC0yNSw3ICsyNSw2IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKQEAgLTY0LDcgKzYzLDcgQEAKIAogc3RydWN0IGVtMjh4eF9JUiB7CiAJc3RydWN0IGVtMjh4eCAqZGV2OwotCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0OworCXN0cnVjdCByY19kZXYgKnJjOwogCWNoYXIgbmFtZVszMl07CiAJY2hhciBwaHlzWzMyXTsKIApAQCAtNzUsMTAgKzc0LDYgQEAKIAl1bnNpZ25lZCBpbnQgbGFzdF9yZWFkY291bnQ7CiAKIAlpbnQgICgqZ2V0X2tleSkoc3RydWN0IGVtMjh4eF9JUiAqLCBzdHJ1Y3QgZW0yOHh4X2lyX3BvbGxfcmVzdWx0ICopOwotCi0JLyogSVIgZGV2aWNlIHByb3BlcnRpZXMgKi8KLQotCXN0cnVjdCBpcl9kZXZfcHJvcHMgcHJvcHM7CiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMzAyLDEyICsyOTcsMTIgQEAKIAkJCXBvbGxfcmVzdWx0LnRvZ2dsZV9iaXQsIHBvbGxfcmVzdWx0LnJlYWRfY291bnQsCiAJCQlwb2xsX3Jlc3VsdC5yY19hZGRyZXNzLCBwb2xsX3Jlc3VsdC5yY19kYXRhWzBdKTsKIAkJaWYgKGlyLT5mdWxsX2NvZGUpCi0JCQlpcl9rZXlkb3duKGlyLT5pbnB1dCwKKwkJCXJjX2tleWRvd24oaXItPnJjLAogCQkJCSAgIHBvbGxfcmVzdWx0LnJjX2FkZHJlc3MgPDwgOCB8CiAJCQkJICAgcG9sbF9yZXN1bHQucmNfZGF0YVswXSwKIAkJCQkgICBwb2xsX3Jlc3VsdC50b2dnbGVfYml0KTsKIAkJZWxzZQotCQkJaXJfa2V5ZG93bihpci0+aW5wdXQsCisJCQlyY19rZXlkb3duKGlyLT5yYywKIAkJCQkgICBwb2xsX3Jlc3VsdC5yY19kYXRhWzBdLAogCQkJCSAgIHBvbGxfcmVzdWx0LnRvZ2dsZV9iaXQpOwogCkBAIC0zMzEsOSArMzI2LDkgQEAKIAlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmlyLT53b3JrLCBtc2Vjc190b19qaWZmaWVzKGlyLT5wb2xsaW5nKSk7CiB9CiAKLXN0YXRpYyBpbnQgZW0yOHh4X2lyX3N0YXJ0KHZvaWQgKnByaXYpCitzdGF0aWMgaW50IGVtMjh4eF9pcl9zdGFydChzdHJ1Y3QgcmNfZGV2ICpyYykKIHsKLQlzdHJ1Y3QgZW0yOHh4X0lSICppciA9IHByaXY7CisJc3RydWN0IGVtMjh4eF9JUiAqaXIgPSByYy0+cHJpdjsKIAogCUlOSVRfREVMQVlFRF9XT1JLKCZpci0+d29yaywgZW0yOHh4X2lyX3dvcmspOwogCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmaXItPndvcmssIDApOwpAQCAtMzQxLDMwICszMzYsMzAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgZW0yOHh4X2lyX3N0b3Aodm9pZCAqcHJpdikKK3N0YXRpYyB2b2lkIGVtMjh4eF9pcl9zdG9wKHN0cnVjdCByY19kZXYgKnJjKQogewotCXN0cnVjdCBlbTI4eHhfSVIgKmlyID0gcHJpdjsKKwlzdHJ1Y3QgZW0yOHh4X0lSICppciA9IHJjLT5wcml2OwogCiAJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZpci0+d29yayk7CiB9CiAKLWludCBlbTI4eHhfaXJfY2hhbmdlX3Byb3RvY29sKHZvaWQgKnByaXYsIHU2NCBpcl90eXBlKQoraW50IGVtMjh4eF9pcl9jaGFuZ2VfcHJvdG9jb2woc3RydWN0IHJjX2RldiAqcmNfZGV2LCB1NjQgcmNfdHlwZSkKIHsKIAlpbnQgcmMgPSAwOwotCXN0cnVjdCBlbTI4eHhfSVIgKmlyID0gcHJpdjsKKwlzdHJ1Y3QgZW0yOHh4X0lSICppciA9IHJjX2Rldi0+cHJpdjsKIAlzdHJ1Y3QgZW0yOHh4ICpkZXYgPSBpci0+ZGV2OwogCXU4IGlyX2NvbmZpZyA9IEVNMjg3NF9JUl9SQzU7CiAKIAkvKiBBZGp1c3QgeGNsayBiYXNlZCBvIElSIHRhYmxlIGZvciBSQzUvTkVDIHRhYmxlcyAqLwogCi0JaWYgKGlyX3R5cGUgPT0gSVJfVFlQRV9SQzUpIHsKKwlpZiAocmNfdHlwZSA9PSBSQ19UWVBFX1JDNSkgewogCQlkZXYtPmJvYXJkLnhjbGsgfD0gRU0yOFhYX1hDTEtfSVJfUkM1X01PREU7CiAJCWlyLT5mdWxsX2NvZGUgPSAxOwotCX0gZWxzZSBpZiAoaXJfdHlwZSA9PSBJUl9UWVBFX05FQykgeworCX0gZWxzZSBpZiAocmNfdHlwZSA9PSBSQ19UWVBFX05FQykgewogCQlkZXYtPmJvYXJkLnhjbGsgJj0gfkVNMjhYWF9YQ0xLX0lSX1JDNV9NT0RFOwogCQlpcl9jb25maWcgPSBFTTI4NzRfSVJfTkVDOwogCQlpci0+ZnVsbF9jb2RlID0gMTsKLQl9IGVsc2UgaWYgKGlyX3R5cGUgIT0gSVJfVFlQRV9VTktOT1dOKQorCX0gZWxzZSBpZiAocmNfdHlwZSAhPSBSQ19UWVBFX1VOS05PV04pCiAJCXJjID0gLUVJTlZBTDsKIAogCWVtMjh4eF93cml0ZV9yZWdfYml0cyhkZXYsIEVNMjhYWF9SMEZfWENMSywgZGV2LT5ib2FyZC54Y2xrLApAQCAtMzkxLDcgKzM4Niw3IEBACiBpbnQgZW0yOHh4X2lyX2luaXQoc3RydWN0IGVtMjh4eCAqZGV2KQogewogCXN0cnVjdCBlbTI4eHhfSVIgKmlyOwotCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldjsKKwlzdHJ1Y3QgcmNfZGV2ICpyYzsKIAlpbnQgZXJyID0gLUVOT01FTTsKIAogCWlmIChkZXYtPmJvYXJkLmlyX2NvZGVzID09IE5VTEwpIHsKQEAgLTQwMCwyOCArMzk1LDI3IEBACiAJfQogCiAJaXIgPSBremFsbG9jKHNpemVvZigqaXIpLCBHRlBfS0VSTkVMKTsKLQlpbnB1dF9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKLQlpZiAoIWlyIHx8ICFpbnB1dF9kZXYpCisJcmMgPSByY19hbGxvY2F0ZV9kZXZpY2UoKTsKKwlpZiAoIWlyIHx8ICFyYykKIAkJZ290byBlcnJfb3V0X2ZyZWU7CiAKIAkvKiByZWNvcmQgaGFuZGxlcyB0byBvdXJzZWxmICovCiAJaXItPmRldiA9IGRldjsKIAlkZXYtPmlyID0gaXI7Ci0KLQlpci0+aW5wdXQgPSBpbnB1dF9kZXY7CisJaXItPnJjID0gcmM7CiAKIAkvKgogCSAqIGVtMjg3NCBzdXBwb3J0cyBtb3JlIHByb3RvY29scy4gRm9yIG5vdywgbGV0J3MganVzdCBhbm5vdW5jZQogCSAqIHRoZSB0d28gcHJvdG9jb2xzIHRoYXQgd2VyZSBhbHJlYWR5IHRlc3RlZAogCSAqLwotCWlyLT5wcm9wcy5hbGxvd2VkX3Byb3RvcyA9IElSX1RZUEVfUkM1IHwgSVJfVFlQRV9ORUM7Ci0JaXItPnByb3BzLnByaXYgPSBpcjsKLQlpci0+cHJvcHMuY2hhbmdlX3Byb3RvY29sID0gZW0yOHh4X2lyX2NoYW5nZV9wcm90b2NvbDsKLQlpci0+cHJvcHMub3BlbiA9IGVtMjh4eF9pcl9zdGFydDsKLQlpci0+cHJvcHMuY2xvc2UgPSBlbTI4eHhfaXJfc3RvcDsKKwlyYy0+YWxsb3dlZF9wcm90b3MgPSBSQ19UWVBFX1JDNSB8IFJDX1RZUEVfTkVDOworCXJjLT5wcml2ID0gaXI7CisJcmMtPmNoYW5nZV9wcm90b2NvbCA9IGVtMjh4eF9pcl9jaGFuZ2VfcHJvdG9jb2w7CisJcmMtPm9wZW4gPSBlbTI4eHhfaXJfc3RhcnQ7CisJcmMtPmNsb3NlID0gZW0yOHh4X2lyX3N0b3A7CiAKIAkvKiBCeSBkZWZhdWx0LCBrZWVwIHByb3RvY29sIGZpZWxkIHVudG91Y2hlZCAqLwotCWVyciA9IGVtMjh4eF9pcl9jaGFuZ2VfcHJvdG9jb2woaXIsIElSX1RZUEVfVU5LTk9XTik7CisJZXJyID0gZW0yOHh4X2lyX2NoYW5nZV9wcm90b2NvbChyYywgUkNfVFlQRV9VTktOT1dOKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9vdXRfZnJlZTsKIApAQCAtNDM1LDI3ICs0MjksMjcgQEAKIAl1c2JfbWFrZV9wYXRoKGRldi0+dWRldiwgaXItPnBoeXMsIHNpemVvZihpci0+cGh5cykpOwogCXN0cmxjYXQoaXItPnBoeXMsICIvaW5wdXQwIiwgc2l6ZW9mKGlyLT5waHlzKSk7CiAKLQlpbnB1dF9kZXYtPm5hbWUgPSBpci0+bmFtZTsKLQlpbnB1dF9kZXYtPnBoeXMgPSBpci0+cGh5czsKLQlpbnB1dF9kZXYtPmlkLmJ1c3R5cGUgPSBCVVNfVVNCOwotCWlucHV0X2Rldi0+aWQudmVyc2lvbiA9IDE7Ci0JaW5wdXRfZGV2LT5pZC52ZW5kb3IgPSBsZTE2X3RvX2NwdShkZXYtPnVkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpOwotCWlucHV0X2Rldi0+aWQucHJvZHVjdCA9IGxlMTZfdG9fY3B1KGRldi0+dWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpOwotCi0JaW5wdXRfZGV2LT5kZXYucGFyZW50ID0gJmRldi0+dWRldi0+ZGV2OwotCi0KKwlyYy0+aW5wdXRfbmFtZSA9IGlyLT5uYW1lOworCXJjLT5pbnB1dF9waHlzID0gaXItPnBoeXM7CisJcmMtPmlucHV0X2lkLmJ1c3R5cGUgPSBCVVNfVVNCOworCXJjLT5pbnB1dF9pZC52ZXJzaW9uID0gMTsKKwlyYy0+aW5wdXRfaWQudmVuZG9yID0gbGUxNl90b19jcHUoZGV2LT51ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKTsKKwlyYy0+aW5wdXRfaWQucHJvZHVjdCA9IGxlMTZfdG9fY3B1KGRldi0+dWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpOworCXJjLT5kZXYucGFyZW50ID0gJmRldi0+dWRldi0+ZGV2OworCXJjLT5tYXBfbmFtZSA9IGRldi0+Ym9hcmQuaXJfY29kZXM7CisJcmMtPmRyaXZlcl9uYW1lID0gTU9EVUxFX05BTUU7CiAKIAkvKiBhbGwgZG9uZSAqLwotCWVyciA9IGlyX2lucHV0X3JlZ2lzdGVyKGlyLT5pbnB1dCwgZGV2LT5ib2FyZC5pcl9jb2RlcywKLQkJCQkmaXItPnByb3BzLCBNT0RVTEVfTkFNRSk7CisJZXJyID0gcmNfcmVnaXN0ZXJfZGV2aWNlKHJjKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9vdXRfc3RvcDsKIAogCXJldHVybiAwOworCiAgZXJyX291dF9zdG9wOgogCWRldi0+aXIgPSBOVUxMOwogIGVycl9vdXRfZnJlZToKKwlyY19mcmVlX2RldmljZShyYyk7CiAJa2ZyZWUoaXIpOwogCXJldHVybiBlcnI7CiB9CkBAIC00NjgsOCArNDYyLDggQEAKIAlpZiAoIWlyKQogCQlyZXR1cm4gMDsKIAotCWVtMjh4eF9pcl9zdG9wKGlyKTsKLQlpcl9pbnB1dF91bnJlZ2lzdGVyKGlyLT5pbnB1dCk7CisJZW0yOHh4X2lyX3N0b3AoaXItPnJjKTsKKwlyY191bnJlZ2lzdGVyX2RldmljZShpci0+cmMpOwogCWtmcmVlKGlyKTsKIAogCS8qIGRvbmUgKi8KQEAgLTU1Nyw3ICs1NTEsNyBAQAogewogCWlmIChkZXYtPnNidXR0b25faW5wdXRfZGV2ICE9IE5VTEwpIHsKIAkJZW0yOHh4X2luZm8oIkRlcmVnaXN0ZXJpbmcgc25hcHNob3QgYnV0dG9uXG4iKTsKLQkJY2FuY2VsX3JlYXJtaW5nX2RlbGF5ZWRfd29yaygmZGV2LT5zYnV0dG9uX3F1ZXJ5X3dvcmspOworCQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmRldi0+c2J1dHRvbl9xdWVyeV93b3JrKTsKIAkJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoZGV2LT5zYnV0dG9uX2lucHV0X2Rldik7CiAJCWRldi0+c2J1dHRvbl9pbnB1dF9kZXYgPSBOVUxMOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC12YmkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC12YmkuYwppbmRleCA3ZjFjNGEyLi4yYjRjOWNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtdmJpLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LXZiaS5jCkBAIC0yMyw2ICsyMyw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogCiAjaW5jbHVkZSAiZW0yOHh4LmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC12aWRlby5jCmluZGV4IDJjMzAwNzIuLmYzNGQ1MjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC12aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC12aWRlby5jCkBAIC0xNDM0LDcgKzE0MzQsNyBAQAogCiAJLyogSXQgaXNuJ3QgYW4gQUM5NyBjb250cm9sLiBTZW5kcyBpdCB0byB0aGUgdjRsMiBkZXYgaW50ZXJmYWNlICovCiAJaWYgKHJjID09IDEpIHsKLQkJdjRsMl9kZXZpY2VfY2FsbF9hbGwoJmRldi0+djRsMl9kZXYsIDAsIGNvcmUsIHNfY3RybCwgY3RybCk7CisJCXJjID0gdjRsMl9kZXZpY2VfY2FsbF91bnRpbF9lcnIoJmRldi0+djRsMl9kZXYsIDAsIGNvcmUsIHNfY3RybCwgY3RybCk7CiAKIAkJLyoKIAkJICogSW4gdGhlIGNhc2Ugb2Ygbm9uLUFDOTcgdm9sdW1lIGNvbnRyb2xzLCB3ZSBzdGlsbCBuZWVkCkBAIC0xNzA4LDExICsxNzA4LDE1IEBACiAJCQlmaCwgdHlwZSwgZmgtPnJlc291cmNlcywgZGV2LT5yZXNvdXJjZXMpOwogCiAJaWYgKGZoLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkgewotCQl2aWRlb2J1Zl9zdHJlYW1vZmYoJmZoLT52Yl92aWRxKTsKLQkJcmVzX2ZyZWUoZmgsIEVNMjhYWF9SRVNPVVJDRV9WSURFTyk7CisJCWlmIChyZXNfY2hlY2soZmgsIEVNMjhYWF9SRVNPVVJDRV9WSURFTykpIHsKKwkJCXZpZGVvYnVmX3N0cmVhbW9mZigmZmgtPnZiX3ZpZHEpOworCQkJcmVzX2ZyZWUoZmgsIEVNMjhYWF9SRVNPVVJDRV9WSURFTyk7CisJCX0KIAl9IGVsc2UgaWYgKGZoLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkUpIHsKLQkJdmlkZW9idWZfc3RyZWFtb2ZmKCZmaC0+dmJfdmJpcSk7Ci0JCXJlc19mcmVlKGZoLCBFTTI4WFhfUkVTT1VSQ0VfVkJJKTsKKwkJaWYgKHJlc19jaGVjayhmaCwgRU0yOFhYX1JFU09VUkNFX1ZCSSkpIHsKKwkJCXZpZGVvYnVmX3N0cmVhbW9mZigmZmgtPnZiX3ZiaXEpOworCQkJcmVzX2ZyZWUoZmgsIEVNMjhYWF9SRVNPVVJDRV9WQkkpOworCQl9CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0xOTM0LDE5ICsxOTM4LDYgQEAKIAkJCQkgICAgICBPX05PTkJMT0NLKTsKIH0KIAotI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAotc3RhdGljIGludCB2aWRpb2NnbWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHZpZGVvX21idWYgKm1idWYpCi17Ci0Jc3RydWN0IGVtMjh4eF9maCAgKmZoID0gcHJpdjsKLQotCWlmIChmaC0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCi0JCXJldHVybiB2aWRlb2J1Zl9jZ21idWYoJmZoLT52Yl92aWRxLCBtYnVmLCA4KTsKLQllbHNlCi0JCXJldHVybiB2aWRlb2J1Zl9jZ21idWYoJmZoLT52Yl92YmlxLCBtYnVmLCA4KTsKLX0KLSNlbmRpZgotCi0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBSQURJTyBFU1BFQ0lGSUMgSU9DVExTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTIzNTksOSArMjM1MCw2IEBACiAJLnZpZGlvY19zX3JlZ2lzdGVyICAgICAgICAgID0gdmlkaW9jX3NfcmVnaXN0ZXIsCiAJLnZpZGlvY19nX2NoaXBfaWRlbnQgICAgICAgID0gdmlkaW9jX2dfY2hpcF9pZGVudCwKICNlbmRpZgotI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAotCS52aWRpb2NnbWJ1ZiAgICAgICAgICAgICAgICA9IHZpZGlvY2dtYnVmLAotI2VuZGlmCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHZpZGVvX2RldmljZSBlbTI4eHhfdmlkZW9fdGVtcGxhdGUgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHguaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC5oCmluZGV4IDZhNzVlNmEuLjZmMjc5NWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC5oCkBAIC0zMyw3ICszMyw3IEBACiAjaW5jbHVkZSA8bWVkaWEvdmlkZW9idWYtdm1hbGxvYy5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CiAjaW5jbHVkZSA8bWVkaWEvaXIta2JkLWkyYy5oPgotI2luY2x1ZGUgPG1lZGlhL2lyLWNvcmUuaD4KKyNpbmNsdWRlIDxtZWRpYS9yYy1jb3JlLmg+CiAjaWYgZGVmaW5lZChDT05GSUdfVklERU9fRU0yOFhYX0RWQikgfHwgZGVmaW5lZChDT05GSUdfVklERU9fRU0yOFhYX0RWQl9NT0RVTEUpCiAjaW5jbHVkZSA8bWVkaWEvdmlkZW9idWYtZHZiLmg+CiAjZW5kaWYKQEAgLTExNyw2ICsxMTcsOCBAQAogI2RlZmluZSBFTTI4MDBfQk9BUkRfVkMyMTFBCQkJICA3NAogI2RlZmluZSBFTTI4ODJfQk9BUkRfRElLT01fREszMDAJCSAgNzUKICNkZWZpbmUgRU0yODcwX0JPQVJEX0tXT1JMRF9BMzQwCQkgIDc2CisjZGVmaW5lIEVNMjg3NF9MRUFERVJTSElQX0lTREJUCQkJICA3NworCiAKIC8qIExpbWl0cyBtaW5pbXVtIGFuZCBkZWZhdWx0IG51bWJlciBvZiBidWZmZXJzICovCiAjZGVmaW5lIEVNMjhYWF9NSU5fQlVGIDQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZXQ2MXgyNTEvZXQ2MXgyNTFfY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9ldDYxeDI1MS9ldDYxeDI1MV9jb3JlLmMKaW5kZXggYmIxNjQwOS4uYTk4Mjc1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9ldDYxeDI1MS9ldDYxeDI1MV9jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9ldDYxeDI1MS9ldDYxeDI1MV9jb3JlLmMKQEAgLTE2MTAsNiArMTYxMCw3IEBACiAJbWVtc2V0KCZpLCAwLCBzaXplb2YoaSkpOwogCXN0cmNweShpLm5hbWUsICJDYW1lcmEiKTsKIAlpLnR5cGUgPSBWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBOworCWkuY2FwYWJpbGl0aWVzID0gVjRMMl9JTl9DQVBfU1REOwogCiAJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZpLCBzaXplb2YoaSkpKQogCQlyZXR1cm4gLUVGQVVMVDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZnNsLXZpdS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9mc2wtdml1LmMKaW5kZXggYjhmYWZmMi4uZTRiYmE4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9mc2wtdml1LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9mc2wtdml1LmMKQEAgLTE5NCw2ICsxOTQsOCBAQAogCiAJLyogZGVjb2RlciAqLwogCXN0cnVjdCB2NGwyX3N1YmRldgkqZGVjb2RlcjsKKworCXY0bDJfc3RkX2lkCQlzdGQ7CiB9OwogCiBzdHJ1Y3Qgdml1X2ZoIHsKQEAgLTkxNSw2ICs5MTcsOCBAQAogCWlmIChmaC0+dHlwZSAhPSBpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCXZpdV9zdGFydF9kbWEoZmgtPmRldik7CisKIAlyZXR1cm4gdmlkZW9idWZfc3RyZWFtb24oJmZoLT52Yl92aWRxKTsKIH0KIApAQCAtOTI3LDIwICs5MzEsMzkgQEAKIAlpZiAoZmgtPnR5cGUgIT0gaSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwl2aXVfc3RvcF9kbWEoZmgtPmRldik7CisKIAlyZXR1cm4gdmlkZW9idWZfc3RyZWFtb2ZmKCZmaC0+dmJfdmlkcSk7CiB9CiAKICNkZWZpbmUgZGVjb2Rlcl9jYWxsKHZpdSwgbywgZiwgYXJncy4uLikgXAogCXY0bDJfc3ViZGV2X2NhbGwodml1LT5kZWNvZGVyLCBvLCBmLCAjI2FyZ3MpCiAKK3N0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5c3RkKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCB2NGwyX3N0ZF9pZCAqc3RkX2lkKQoreworCXN0cnVjdCB2aXVfZmggKmZoID0gcHJpdjsKKworCWRlY29kZXJfY2FsbChmaC0+ZGV2LCB2aWRlbywgcXVlcnlzdGQsIHN0ZF9pZCk7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgdmlkaW9jX3Nfc3RkKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCB2NGwyX3N0ZF9pZCAqaWQpCiB7CiAJc3RydWN0IHZpdV9maCAqZmggPSBwcml2OwogCisJZmgtPmRldi0+c3RkID0gKmlkOwogCWRlY29kZXJfY2FsbChmaC0+ZGV2LCBjb3JlLCBzX3N0ZCwgKmlkKTsKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCB2aWRpb2NfZ19zdGQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHY0bDJfc3RkX2lkICpzdGRfaWQpCit7CisJc3RydWN0IHZpdV9maCAqZmggPSBwcml2OworCisJKnN0ZF9pZCA9IGZoLT5kZXYtPnN0ZDsKKwlyZXR1cm4gMDsKK30KKwogLyogb25seSBvbmUgaW5wdXQgaW4gdGhpcyBkcml2ZXIgKi8KIHN0YXRpYyBpbnQgdmlkaW9jX2VudW1faW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2lucHV0ICppbnApCkBAIC0xMzMxLDYgKzEzNTQsNyBAQAogCiAJdml1X3N0b3BfZG1hKGRldik7CiAJdmlkZW9idWZfc3RvcCgmZmgtPnZiX3ZpZHEpOworCXZpZGVvYnVmX21tYXBfZnJlZSgmZmgtPnZiX3ZpZHEpOwogCiAJa2ZyZWUoZmgpOwogCkBAIC0xMzk3LDcgKzE0MjEsOSBAQAogCS52aWRpb2NfcXVlcnlidWYgICAgICA9IHZpZGlvY19xdWVyeWJ1ZiwKIAkudmlkaW9jX3FidWYgICAgICAgICAgPSB2aWRpb2NfcWJ1ZiwKIAkudmlkaW9jX2RxYnVmICAgICAgICAgPSB2aWRpb2NfZHFidWYsCisJLnZpZGlvY19nX3N0ZCAgICAgICAgID0gdmlkaW9jX2dfc3RkLAogCS52aWRpb2Nfc19zdGQgICAgICAgICA9IHZpZGlvY19zX3N0ZCwKKwkudmlkaW9jX3F1ZXJ5c3RkICAgICAgPSB2aWRpb2NfcXVlcnlzdGQsCiAJLnZpZGlvY19lbnVtX2lucHV0ICAgID0gdmlkaW9jX2VudW1faW5wdXQsCiAJLnZpZGlvY19nX2lucHV0ICAgICAgID0gdmlkaW9jX2dfaW5wdXQsCiAJLnZpZGlvY19zX2lucHV0ICAgICAgID0gdmlkaW9jX3NfaW5wdXQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2NwaWExLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2NwaWExLmMKaW5kZXggOWIxMjE2OC4uYzFhZTA1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9jcGlhMS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvY3BpYTEuYwpAQCAtMzcsNyArMzcsNyBAQAogLyogY29uc3RhbnQgdmFsdWUncyAqLwogI2RlZmluZSBNQUdJQ18wCQkweDE5CiAjZGVmaW5lIE1BR0lDXzEJCTB4NjgKLSNkZWZpbmUgREFUQV9JTgkJMHhDMAorI2RlZmluZSBEQVRBX0lOCQkweGMwCiAjZGVmaW5lIERBVEFfT1VUCTB4NDAKICNkZWZpbmUgVklERU9TSVpFX1FDSUYJMAkvKiAxNzZ4MTQ0ICovCiAjZGVmaW5lIFZJREVPU0laRV9DSUYJMQkvKiAzNTJ4Mjg4ICovCkBAIC02NjAsOSArNjYwLDkgQEAKIAkJaWYgKHNkLT5wYXJhbXMucXgzLmJ1dHRvbikgewogCQkJLyogYnV0dG9uIHByZXNzZWQgLSB1bmxvY2sgdGhlIGxhdGNoICovCiAJCQlkb19jb21tYW5kKGdzcGNhX2RldiwgQ1BJQV9DT01NQU5EX1dyaXRlTUNQb3J0LAotCQkJCSAgIDMsIDB4REYsIDB4REYsIDApOworCQkJCSAgIDMsIDB4ZGYsIDB4ZGYsIDApOwogCQkJZG9fY29tbWFuZChnc3BjYV9kZXYsIENQSUFfQ09NTUFORF9Xcml0ZU1DUG9ydCwKLQkJCQkgICAzLCAweEZGLCAweEZGLCAwKTsKKwkJCQkgICAzLCAweGZmLCAweGZmLCAwKTsKIAkJfQogCiAJCS8qIHRlc3Qgd2hldGhlciBtaWNyb3Njb3BlIGlzIGNyYWRsZWQgKi8KQEAgLTgyOSw3ICs4MjksNyBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlkb19jb21tYW5kKGdzcGNhX2RldiwgQ1BJQV9DT01NQU5EX0dldENhbWVyYVN0YXR1cywgMCwgMCwgMCwgMCk7CisJcmV0ID0gZG9fY29tbWFuZChnc3BjYV9kZXYsIENQSUFfQ09NTUFORF9HZXRDYW1lcmFTdGF0dXMsIDAsIDAsIDAsIDApOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKQEAgLTExMTAsMTIgKzExMTAsMTIgQEAKIAlwMiA9IChzZC0+cGFyYW1zLnF4My50b3BsaWdodCA9PSAwKSA8PCAzOwogCiAJcmV0ID0gZG9fY29tbWFuZChnc3BjYV9kZXYsIENQSUFfQ09NTUFORF9Xcml0ZVZDUmVnLAotCQkJIDB4OTAsIDB4OEYsIDB4NTAsIDApOworCQkJIDB4OTAsIDB4OGYsIDB4NTAsIDApOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKIAlyZXR1cm4gZG9fY29tbWFuZChnc3BjYV9kZXYsIENQSUFfQ09NTUFORF9Xcml0ZU1DUG9ydCwgMiwgMCwKLQkJCSAgcDEgfCBwMiB8IDB4RTAsIDApOworCQkJICBwMSB8IHAyIHwgMHhlMCwgMCk7CiB9CiAKIHN0YXRpYyBpbnQgc2V0X2ZsaWNrZXIoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBpbnQgb24sIGludCBhcHBseSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ3NwY2EuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ3NwY2EuYwppbmRleCA4ZmU4ZmI0Li40NDI5NzAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dzcGNhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5jCkBAIC01NSw3ICs1NSw3IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIkdTUENBIFVTQiBDYW1lcmEgRHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLSNkZWZpbmUgRFJJVkVSX1ZFUlNJT05fTlVNQkVSCUtFUk5FTF9WRVJTSU9OKDIsIDEwLCAwKQorI2RlZmluZSBEUklWRVJfVkVSU0lPTl9OVU1CRVIJS0VSTkVMX1ZFUlNJT04oMiwgMTEsIDApCiAKICNpZmRlZiBHU1BDQV9ERUJVRwogaW50IGdzcGNhX2RlYnVnID0gRF9FUlIgfCBEX1BST0JFOwpAQCAtMjI0LDEyICsyMjQsMTIgQEAKIAkJYnVmZmVyLCBidWZmZXJfbGVuLAogCQlpbnRfaXJxLCAodm9pZCAqKWdzcGNhX2RldiwgaW50ZXJ2YWwpOwogCXVyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7Ci0JZ3NwY2FfZGV2LT5pbnRfdXJiID0gdXJiOwogCXJldCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0tFUk5FTCk7CiAJaWYgKHJldCA8IDApIHsKIAkJUERFQlVHKERfRVJSLCAic3VibWl0IGludCBVUkIgZmFpbGVkIHdpdGggZXJyb3IgJWkiLCByZXQpOwogCQlnb3RvIGVycm9yX3N1Ym1pdDsKIAl9CisJZ3NwY2FfZGV2LT5pbnRfdXJiID0gdXJiOwogCXJldHVybiByZXQ7CiAKIGVycm9yX3N1Ym1pdDoKQEAgLTMxOCwxNCArMzE4LDkgQEAKIAl9CiAJcGt0X3NjYW4gPSBnc3BjYV9kZXYtPnNkX2Rlc2MtPnBrdF9zY2FuOwogCWZvciAoaSA9IDA7IGkgPCB1cmItPm51bWJlcl9vZl9wYWNrZXRzOyBpKyspIHsKKwkJbGVuID0gdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoOwogCiAJCS8qIGNoZWNrIHRoZSBwYWNrZXQgc3RhdHVzIGFuZCBsZW5ndGggKi8KLQkJbGVuID0gdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoOwotCQlpZiAobGVuID09IDApIHsKLQkJCWlmIChnc3BjYV9kZXYtPmVtcHR5X3BhY2tldCA9PSAwKQotCQkJCWdzcGNhX2Rldi0+ZW1wdHlfcGFja2V0ID0gMTsKLQkJCWNvbnRpbnVlOwotCQl9CiAJCXN0ID0gdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXM7CiAJCWlmIChzdCkgewogCQkJZXJyKCJJU09DIGRhdGEgZXJyb3I6IFslZF0gbGVuPSVkLCBzdGF0dXM9JWQiLApAQCAtMzMzLDYgKzMyOCwxMSBAQAogCQkJZ3NwY2FfZGV2LT5sYXN0X3BhY2tldF90eXBlID0gRElTQ0FSRF9QQUNLRVQ7CiAJCQljb250aW51ZTsKIAkJfQorCQlpZiAobGVuID09IDApIHsKKwkJCWlmIChnc3BjYV9kZXYtPmVtcHR5X3BhY2tldCA9PSAwKQorCQkJCWdzcGNhX2Rldi0+ZW1wdHlfcGFja2V0ID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CiAKIAkJLyogbGV0IHRoZSBwYWNrZXQgYmUgYW5hbHl6ZWQgYnkgdGhlIHN1YmRyaXZlciAqLwogCQlQREVCVUcoRF9QQUNLLCAicGFja2V0IFslZF0gbzolZCBsOiVkIiwKQEAgLTY1MiwxNiArNjUyLDEyIEBACiAJCQkJICAgOiBVU0JfRU5EUE9JTlRfWEZFUl9JU09DOwogCWkgPSBnc3BjYV9kZXYtPmFsdDsJCQkvKiBwcmV2aW91cyBhbHQgc2V0dGluZyAqLwogCWlmIChnc3BjYV9kZXYtPmNhbS5yZXZlcnNlX2FsdHMpIHsKLQkJaWYgKGdzcGNhX2Rldi0+YXVkaW8gJiYgaSA8IGdzcGNhX2Rldi0+bmJhbHQgLSAyKQotCQkJaSsrOwogCQl3aGlsZSAoKytpIDwgZ3NwY2FfZGV2LT5uYmFsdCkgewogCQkJZXAgPSBhbHRfeGZlcigmaW50Zi0+YWx0c2V0dGluZ1tpXSwgeGZlcik7CiAJCQlpZiAoZXApCiAJCQkJYnJlYWs7CiAJCX0KIAl9IGVsc2UgewotCQlpZiAoZ3NwY2FfZGV2LT5hdWRpbyAmJiBpID4gMSkKLQkJCWktLTsKIAkJd2hpbGUgKC0taSA+PSAwKSB7CiAJCQllcCA9IGFsdF94ZmVyKCZpbnRmLT5hbHRzZXR0aW5nW2ldLCB4ZmVyKTsKIAkJCWlmIChlcCkKQEAgLTY3NiwxMyArNjcyLDExIEBACiAJCQlpLCBlcC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzKTsKIAlnc3BjYV9kZXYtPmFsdCA9IGk7CQkvKiBtZW1vcml6ZSB0aGUgY3VycmVudCBhbHQgc2V0dGluZyAqLwogCWlmIChnc3BjYV9kZXYtPm5iYWx0ID4gMSkgewotCQlnc3BjYV9pbnB1dF9kZXN0cm95X3VyYihnc3BjYV9kZXYpOwogCQlyZXQgPSB1c2Jfc2V0X2ludGVyZmFjZShnc3BjYV9kZXYtPmRldiwgZ3NwY2FfZGV2LT5pZmFjZSwgaSk7CiAJCWlmIChyZXQgPCAwKSB7CiAJCQllcnIoInNldCBhbHQgJWQgZXJyICVkIiwgaSwgcmV0KTsKIAkJCWVwID0gTlVMTDsKIAkJfQotCQlnc3BjYV9pbnB1dF9jcmVhdGVfdXJiKGdzcGNhX2Rldik7CiAJfQogCXJldHVybiBlcDsKIH0KQEAgLTc1OSw3ICs3NTMsNyBAQAogCQkJfQogCQl9IGVsc2UgewkJLyogYnVsayAqLwogCQkJdXJiLT5waXBlID0gdXNiX3JjdmJ1bGtwaXBlKGdzcGNhX2Rldi0+ZGV2LAotCQkJCQkJZXAtPmRlc2MuYkVuZHBvaW50QWRkcmVzcyksCisJCQkJCQllcC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzKTsKIAkJCXVyYi0+dHJhbnNmZXJfZmxhZ3MgPSBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKIAkJCXVyYi0+Y29tcGxldGUgPSBidWxrX2lycTsKIAkJfQpAQCAtNzgxLDcgKzc3NSw3IEBACiAKIAlpZiAoIWdzcGNhX2Rldi0+cHJlc2VudCkgewogCQlyZXQgPSAtRU5PREVWOwotCQlnb3RvIG91dDsKKwkJZ290byB1bmxvY2s7CiAJfQogCiAJLyogcmVzZXQgdGhlIHN0cmVhbWluZyB2YXJpYWJsZXMgKi8KQEAgLTgwMiw4ICs3OTYsMTAgQEAKIAlpZiAoZ3NwY2FfZGV2LT5zZF9kZXNjLT5pc29jX2luaXQpIHsKIAkJcmV0ID0gZ3NwY2FfZGV2LT5zZF9kZXNjLT5pc29jX2luaXQoZ3NwY2FfZGV2KTsKIAkJaWYgKHJldCA8IDApCi0JCQlnb3RvIG91dDsKKwkJCWdvdG8gdW5sb2NrOwogCX0KKworCWdzcGNhX2lucHV0X2Rlc3Ryb3lfdXJiKGdzcGNhX2Rldik7CiAJZXAgPSBnZXRfZXAoZ3NwY2FfZGV2KTsKIAlpZiAoZXAgPT0gTlVMTCkgewogCQlyZXQgPSAtRUlPOwpAQCAtODczLDYgKzg2OSw4IEBACiAJCX0KIAl9CiBvdXQ6CisJZ3NwY2FfaW5wdXRfY3JlYXRlX3VyYihnc3BjYV9kZXYpOwordW5sb2NrOgogCW11dGV4X3VubG9jaygmZ3NwY2FfZGV2LT51c2JfbG9jayk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTEyOTksMTcgKzEyOTcsMTkgQEAKIAkJcmV0ID0gLUVOT0RFVjsKIAkJZ290byBvdXQ7CiAJfQotCXN0cm5jcHkoY2FwLT5kcml2ZXIsIGdzcGNhX2Rldi0+c2RfZGVzYy0+bmFtZSwgc2l6ZW9mIGNhcC0+ZHJpdmVyKTsKKwlzdHJuY3B5KChjaGFyICopIGNhcC0+ZHJpdmVyLCBnc3BjYV9kZXYtPnNkX2Rlc2MtPm5hbWUsCisJCQlzaXplb2YgY2FwLT5kcml2ZXIpOwogCWlmIChnc3BjYV9kZXYtPmRldi0+cHJvZHVjdCAhPSBOVUxMKSB7Ci0JCXN0cm5jcHkoY2FwLT5jYXJkLCBnc3BjYV9kZXYtPmRldi0+cHJvZHVjdCwKKwkJc3RybmNweSgoY2hhciAqKSBjYXAtPmNhcmQsIGdzcGNhX2Rldi0+ZGV2LT5wcm9kdWN0LAogCQkJc2l6ZW9mIGNhcC0+Y2FyZCk7CiAJfSBlbHNlIHsKLQkJc25wcmludGYoY2FwLT5jYXJkLCBzaXplb2YgY2FwLT5jYXJkLAorCQlzbnByaW50ZigoY2hhciAqKSBjYXAtPmNhcmQsIHNpemVvZiBjYXAtPmNhcmQsCiAJCQkiVVNCIENhbWVyYSAoJTA0eDolMDR4KSIsCiAJCQlsZTE2X3RvX2NwdShnc3BjYV9kZXYtPmRldi0+ZGVzY3JpcHRvci5pZFZlbmRvciksCiAJCQlsZTE2X3RvX2NwdShnc3BjYV9kZXYtPmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpKTsKIAl9Ci0JdXNiX21ha2VfcGF0aChnc3BjYV9kZXYtPmRldiwgY2FwLT5idXNfaW5mbywgc2l6ZW9mKGNhcC0+YnVzX2luZm8pKTsKKwl1c2JfbWFrZV9wYXRoKGdzcGNhX2Rldi0+ZGV2LCAoY2hhciAqKSBjYXAtPmJ1c19pbmZvLAorCQkJc2l6ZW9mKGNhcC0+YnVzX2luZm8pKTsKIAljYXAtPnZlcnNpb24gPSBEUklWRVJfVkVSU0lPTl9OVU1CRVI7CiAJY2FwLT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9WSURFT19DQVBUVVJFCiAJCQkgIHwgVjRMMl9DQVBfU1RSRUFNSU5HCkBAIC0xNzEwLDEyICsxNzEwLDEzIEBACiAKIAkJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZ3NwY2FfZGV2LT51c2JfbG9jaykpCiAJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwotCQlnc3BjYV9kZXYtPnVzYl9lcnIgPSAwOwotCQlpZiAoZ3NwY2FfZGV2LT5wcmVzZW50KQotCQkJcmV0ID0gZ3NwY2FfZGV2LT5zZF9kZXNjLT5nZXRfc3RyZWFtcGFybShnc3BjYV9kZXYsCi0JCQkJCQkJCSBwYXJtKTsKLQkJZWxzZQorCQlpZiAoZ3NwY2FfZGV2LT5wcmVzZW50KSB7CisJCQlnc3BjYV9kZXYtPnVzYl9lcnIgPSAwOworCQkJZ3NwY2FfZGV2LT5zZF9kZXNjLT5nZXRfc3RyZWFtcGFybShnc3BjYV9kZXYsIHBhcm0pOworCQkJcmV0ID0gZ3NwY2FfZGV2LT51c2JfZXJyOworCQl9IGVsc2UgewogCQkJcmV0ID0gLUVOT0RFVjsKKwkJfQogCQltdXRleF91bmxvY2soJmdzcGNhX2Rldi0+dXNiX2xvY2spOwogCQlyZXR1cm4gcmV0OwogCX0KQEAgLTE3NDAsMTIgKzE3NDEsMTMgQEAKIAogCQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZnc3BjYV9kZXYtPnVzYl9sb2NrKSkKIAkJCXJldHVybiAtRVJFU1RBUlRTWVM7Ci0JCWdzcGNhX2Rldi0+dXNiX2VyciA9IDA7Ci0JCWlmIChnc3BjYV9kZXYtPnByZXNlbnQpCi0JCQlyZXQgPSBnc3BjYV9kZXYtPnNkX2Rlc2MtPnNldF9zdHJlYW1wYXJtKGdzcGNhX2RldiwKLQkJCQkJCQkJIHBhcm0pOwotCQllbHNlCisJCWlmIChnc3BjYV9kZXYtPnByZXNlbnQpIHsKKwkJCWdzcGNhX2Rldi0+dXNiX2VyciA9IDA7CisJCQlnc3BjYV9kZXYtPnNkX2Rlc2MtPnNldF9zdHJlYW1wYXJtKGdzcGNhX2RldiwgcGFybSk7CisJCQlyZXQgPSBnc3BjYV9kZXYtPnVzYl9lcnI7CisJCX0gZWxzZSB7CiAJCQlyZXQgPSAtRU5PREVWOworCQl9CiAJCW11dGV4X3VubG9jaygmZ3NwY2FfZGV2LT51c2JfbG9jayk7CiAJCXJldHVybiByZXQ7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5oCmluZGV4IGQ0ZDIxMGIuLjk3Yjc3YTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ3NwY2EuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dzcGNhLmgKQEAgLTYyLDcgKzYyLDcgQEAKIC8qIGRldmljZSBpbmZvcm1hdGlvbiAtIHNldCBhdCBwcm9iZSB0aW1lICovCiBzdHJ1Y3QgY2FtIHsKIAljb25zdCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpjYW1fbW9kZTsJLyogc2l6ZSBubW9kZXMgKi8KLQljb25zdCBzdHJ1Y3QgZnJhbWVyYXRlcyAqbW9kZV9mcmFtZXJhdGVzOyAvKiBtdXN0IGhhdmUgc2l6ZSBubW9kZSwKKwljb25zdCBzdHJ1Y3QgZnJhbWVyYXRlcyAqbW9kZV9mcmFtZXJhdGVzOyAvKiBtdXN0IGhhdmUgc2l6ZSBubW9kZXMsCiAJCQkJCQkgICAqIGp1c3QgbGlrZSBjYW1fbW9kZSAqLwogCXN0cnVjdCBnc3BjYV9jdHJsICpjdHJsczsJLyogY29udHJvbCB0YWJsZSAtIHNpemUgbmN0cmxzICovCiAJCQkJCS8qIG1heSBiZSBOVUxMICovCkBAIC05Myw3ICs5Myw3IEBACiAJCQkJc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyICopOwogdHlwZWRlZiBpbnQgKCpjYW1faWRlbnRfb3ApIChzdHJ1Y3QgZ3NwY2FfZGV2ICosCiAJCQkJc3RydWN0IHY0bDJfZGJnX2NoaXBfaWRlbnQgKik7Ci10eXBlZGVmIGludCAoKmNhbV9zdHJlYW1wYXJtX29wKSAoc3RydWN0IGdzcGNhX2RldiAqLAordHlwZWRlZiB2b2lkICgqY2FtX3N0cmVhbXBhcm1fb3ApIChzdHJ1Y3QgZ3NwY2FfZGV2ICosCiAJCQkJICBzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtICopOwogdHlwZWRlZiBpbnQgKCpjYW1fcW1udV9vcCkgKHN0cnVjdCBnc3BjYV9kZXYgKiwKIAkJCXN0cnVjdCB2NGwyX3F1ZXJ5bWVudSAqKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfb3Y5NjUwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX292OTY1MC5jCmluZGV4IDhkZWQ4YjEuLjcwM2Q0ODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfb3Y5NjUwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9vdjk2NTAuYwpAQCAtNjI0LDcgKzYyNCw3IEBACiAKIAkvKiBNYXNrIGF3YXkgYWxsIHVuaW50ZXJlc3RpbmcgYml0cyAqLwogCWkyY19kYXRhID0gKCh2YWwgJiAweDAzMDApID4+IDIpIHwKLQkJCShpMmNfZGF0YSAmIDB4M0YpOworCQkJKGkyY19kYXRhICYgMHgzZik7CiAJZXJyID0gbTU2MDJfd3JpdGVfc2Vuc29yKHNkLCBPVjk2NTBfVlJFRiwgJmkyY19kYXRhLCAxKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MTkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MTkuYwppbmRleCA2Y2Y2ODU1Li5lMWMzYjkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL292NTE5LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9vdjUxOS5jCkBAIC03NSwxNCArNzUsMTQgQEAKIAogCXN0cnVjdCBnc3BjYV9jdHJsIGN0cmxzW05DVFJMXTsKIAotCV9fdTggcGFja2V0X25yOworCXU4IHBhY2tldF9ucjsKIAogCWNoYXIgYnJpZGdlOwogI2RlZmluZSBCUklER0VfT1Y1MTEJCTAKICNkZWZpbmUgQlJJREdFX09WNTExUExVUwkxCiAjZGVmaW5lIEJSSURHRV9PVjUxOAkJMgogI2RlZmluZSBCUklER0VfT1Y1MThQTFVTCTMKLSNkZWZpbmUgQlJJREdFX09WNTE5CQk0CisjZGVmaW5lIEJSSURHRV9PVjUxOQkJNAkJLyogPSBvdjUzMCAqLwogI2RlZmluZSBCUklER0VfT1ZGWDIJCTUKICNkZWZpbmUgQlJJREdFX1c5OTY4Q0YJCTYKICNkZWZpbmUgQlJJREdFX01BU0sJCTcKQEAgLTk0LDQyICs5NCw0NCBAQAogCWNoYXIgc25hcHNob3RfbmVlZHNfcmVzZXQ7CiAKIAkvKiBEZXRlcm1pbmVkIGJ5IHNlbnNvciB0eXBlICovCi0JX191OCBzaWY7CisJdTggc2lmOwogCi0JX191OCBxdWFsaXR5OworCXU4IHF1YWxpdHk7CiAjZGVmaW5lIFFVQUxJVFlfTUlOIDUwCiAjZGVmaW5lIFFVQUxJVFlfTUFYIDcwCiAjZGVmaW5lIFFVQUxJVFlfREVGIDUwCiAKLQlfX3U4IHN0b3BwZWQ7CQkvKiBTdHJlYW1pbmcgaXMgdGVtcG9yYXJpbHkgcGF1c2VkICovCi0JX191OCBmaXJzdF9mcmFtZTsKKwl1OCBzdG9wcGVkOwkJLyogU3RyZWFtaW5nIGlzIHRlbXBvcmFyaWx5IHBhdXNlZCAqLworCXU4IGZpcnN0X2ZyYW1lOwogCi0JX191OCBmcmFtZV9yYXRlOwkvKiBjdXJyZW50IEZyYW1lcmF0ZSAqLwotCV9fdTggY2xvY2tkaXY7CQkvKiBjbG9ja2RpdiBvdmVycmlkZSAqLworCXU4IGZyYW1lX3JhdGU7CQkvKiBjdXJyZW50IEZyYW1lcmF0ZSAqLworCXU4IGNsb2NrZGl2OwkJLyogY2xvY2tkaXYgb3ZlcnJpZGUgKi8KIAotCWNoYXIgc2Vuc29yOwkJLyogVHlwZSBvZiBpbWFnZSBzZW5zb3IgY2hpcCAoU0VOXyopICovCi0jZGVmaW5lIFNFTl9VTktOT1dOIDAKLSNkZWZpbmUgU0VOX09WMjYxMCAxCi0jZGVmaW5lIFNFTl9PVjM2MTAgMgotI2RlZmluZSBTRU5fT1Y2NjIwIDMKLSNkZWZpbmUgU0VOX09WNjYzMCA0Ci0jZGVmaW5lIFNFTl9PVjY2MzA4QUYgNQotI2RlZmluZSBTRU5fT1Y3NjEwIDYKLSNkZWZpbmUgU0VOX09WNzYyMCA3Ci0jZGVmaW5lIFNFTl9PVjc2MjBBRSA4Ci0jZGVmaW5lIFNFTl9PVjc2NDAgOQotI2RlZmluZSBTRU5fT1Y3NjQ4IDEwCi0jZGVmaW5lIFNFTl9PVjc2NzAgMTEKLSNkZWZpbmUgU0VOX09WNzZCRSAxMgotI2RlZmluZSBTRU5fT1Y4NjEwIDEzCisJczggc2Vuc29yOwkJLyogVHlwZSBvZiBpbWFnZSBzZW5zb3IgY2hpcCAoU0VOXyopICovCiAKIAl1OCBzZW5zb3JfYWRkcjsKLQlpbnQgc2Vuc29yX3dpZHRoOwotCWludCBzZW5zb3JfaGVpZ2h0OwotCWludCBzZW5zb3JfcmVnX2NhY2hlWzI1Nl07CisJdTE2IHNlbnNvcl93aWR0aDsKKwl1MTYgc2Vuc29yX2hlaWdodDsKKwlzMTYgc2Vuc29yX3JlZ19jYWNoZVsyNTZdOwogCiAJdTgganBlZ19oZHJbSlBFR19IRFJfU1pdOwogfTsKK2VudW0gc2Vuc29ycyB7CisJU0VOX09WMjYxMCwKKwlTRU5fT1YzNjEwLAorCVNFTl9PVjY2MjAsCisJU0VOX09WNjYzMCwKKwlTRU5fT1Y2NjMwOEFGLAorCVNFTl9PVjc2MTAsCisJU0VOX09WNzYyMCwKKwlTRU5fT1Y3NjIwQUUsCisJU0VOX09WNzY0MCwKKwlTRU5fT1Y3NjQ4LAorCVNFTl9PVjc2NjAsCisJU0VOX09WNzY3MCwKKwlTRU5fT1Y3NkJFLAorCVNFTl9PVjg2MTAsCit9OwogCiAvKiBOb3RlIHRoaXMgaXMgYSBiaXQgb2YgYSBoYWNrLCBidXQgdGhlIHc5OTY4Y2YgZHJpdmVyIG5lZWRzIHRoZSBjb2RlIGZvciBhbGwKICAgIHRoZSBvdiBzZW5zb3JzIHdoaWNoIGlzIGFscmVhZHkgcHJlc2VudCBoZXJlLiBXaGVuIHdlIGhhdmUgdGhlIHRpbWUgd2UKQEAgLTE4Miw3ICsxODQsNyBAQAogCSAgICB9LAogCSAgICAuc2V0X2NvbnRyb2wgPSBzZXRjb2xvcnMsCiAJfSwKLS8qIFRoZSBmbGlwIGNvbnRyb2xzIHdvcmsgd2l0aCBvdjc2NzAgb25seSAqLworLyogVGhlIGZsaXAgY29udHJvbHMgd29yayBmb3Igc2Vuc29ycyBvdjc2NjAgYW5kIG92NzY3MCBvbmx5ICovCiBbSEZMSVBdID0gewogCSAgICB7CiAJCS5pZCAgICAgID0gVjRMMl9DSURfSEZMSVAsCkBAIC0yMjUsNyArMjI3LDcgQEAKIAkJLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9NRU5VLAogCQkubmFtZSAgICA9ICJMaWdodCBmcmVxdWVuY3kgZmlsdGVyIiwKIAkJLm1pbmltdW0gPSAwLAotCQkubWF4aW11bSA9IDIsCS8qIDA6IDAsIDE6IDUwSHosIDI6NjBIeiAqLworCQkubWF4aW11bSA9IDIsCS8qIDA6IG5vIGZsaWNrZXIsIDE6IDUwSHosIDI6NjBIeiwgMzogYXV0byAqLwogCQkuc3RlcCAgICA9IDEsCiAJCS5kZWZhdWx0X3ZhbHVlID0gMCwKIAkgICAgfSwKQEAgLTIzMyw2ICsyMzUsNTMgQEAKIAl9LAogfTsKIAorLyogdGFibGUgb2YgdGhlIGRpc2FibGVkIGNvbnRyb2xzICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY3RybF9kaXNbXSA9IHsKK1tTRU5fT1YyNjEwXSA9CQkoMSA8PCBOQ1RSTCkgLSAxLAkvKiBubyBjb250cm9sICovCisKK1tTRU5fT1YzNjEwXSA9CQkoMSA8PCBOQ1RSTCkgLSAxLAkvKiBubyBjb250cm9sICovCisKK1tTRU5fT1Y2NjIwXSA9CQkoMSA8PCBIRkxJUCkgfAorCQkJKDEgPDwgVkZMSVApLAorCitbU0VOX09WNjYzMF0gPQkJKDEgPDwgSEZMSVApIHwKKwkJCSgxIDw8IFZGTElQKSwKKworW1NFTl9PVjY2MzA4QUZdID0JKDEgPDwgSEZMSVApIHwKKwkJCSgxIDw8IFZGTElQKSwKKworW1NFTl9PVjc2MTBdID0JCSgxIDw8IEhGTElQKSB8CisJCQkoMSA8PCBWRkxJUCksCisKK1tTRU5fT1Y3NjIwXSA9CQkoMSA8PCBIRkxJUCkgfAorCQkJKDEgPDwgVkZMSVApLAorCitbU0VOX09WNzYyMEFFXSA9CSgxIDw8IEhGTElQKSB8CisJCQkoMSA8PCBWRkxJUCksCisKK1tTRU5fT1Y3NjQwXSA9CQkoMSA8PCBIRkxJUCkgfAorCQkJKDEgPDwgVkZMSVApIHwKKwkJCSgxIDw8IEFVVE9CUklHSFQpIHwKKwkJCSgxIDw8IENPTlRSQVNUKSwKKworW1NFTl9PVjc2NDhdID0JCSgxIDw8IEhGTElQKSB8CisJCQkoMSA8PCBWRkxJUCkgfAorCQkJKDEgPDwgQVVUT0JSSUdIVCkgfAorCQkJKDEgPDwgQ09OVFJBU1QpLAorCitbU0VOX09WNzY2MF0gPQkJKDEgPDwgQVVUT0JSSUdIVCksCisKK1tTRU5fT1Y3NjcwXSA9CQkoMSA8PCBDT0xPUlMpIHwKKwkJCSgxIDw8IEFVVE9CUklHSFQpLAorCitbU0VOX09WNzZCRV0gPQkJKDEgPDwgSEZMSVApIHwKKwkJCSgxIDw8IFZGTElQKSwKKworW1NFTl9PVjg2MTBdID0JCSgxIDw8IEhGTElQKSB8CisJCQkoMSA8PCBWRkxJUCkgfAorCQkJKDEgPDwgRlJFUSksCit9OworCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBvdjUxOV92Z2FfbW9kZVtdID0gewogCXszMjAsIDI0MCwgVjRMMl9QSVhfRk1UX0pQRUcsIFY0TDJfRklFTERfTk9ORSwKIAkJLmJ5dGVzcGVybGluZSA9IDMyMCwKQEAgLTQxMiw3ICs0NjEsNiBAQAogCQkucHJpdiA9IDB9LAogfTsKIAotCiAvKiBSZWdpc3RlcnMgY29tbW9uIHRvIE9WNTExIC8gT1Y1MTggKi8KICNkZWZpbmUgUjUxeF9GSUZPX1BTSVpFCQkJMHgzMAkvKiAyIGJ5dGVzIHdpZGUgdy8gT1Y1MTgoKykgKi8KICNkZWZpbmUgUjUxeF9TWVNfUkVTRVQJCQkweDUwCkBAIC00MjAsNyArNDY4LDcgQEAKIAkjZGVmaW5lCU9WNTExX1JFU0VUX09NTklDRQkweDA4CiAjZGVmaW5lIFI1MXhfU1lTX0lOSVQJCQkweDUzCiAjZGVmaW5lIFI1MXhfU1lTX1NOQVAJCQkweDUyCi0jZGVmaW5lIFI1MXhfU1lTX0NVU1RfSUQJCTB4NUYKKyNkZWZpbmUgUjUxeF9TWVNfQ1VTVF9JRAkJMHg1ZgogI2RlZmluZSBSNTF4X0NPTVBfTFVUX0JFR0lOCQkweDgwCiAKIC8qIE9WNTExIENhbWVyYSBpbnRlcmZhY2UgcmVnaXN0ZXIgbnVtYmVycyAqLwpAQCAtNDM1LDEzICs0ODMsMTMgQEAKICNkZWZpbmUgUjUxMV9DQU1fT1BUUwkJCTB4MTgKIAogI2RlZmluZSBSNTExX1NOQVBfRlJBTUUJCQkweDE5Ci0jZGVmaW5lIFI1MTFfU05BUF9QWENOVAkJCTB4MUEKLSNkZWZpbmUgUjUxMV9TTkFQX0xOQ05UCQkJMHgxQgotI2RlZmluZSBSNTExX1NOQVBfUFhESVYJCQkweDFDCi0jZGVmaW5lIFI1MTFfU05BUF9MTkRJVgkJCTB4MUQKLSNkZWZpbmUgUjUxMV9TTkFQX1VWX0VOCQkJMHgxRQotI2RlZmluZSBSNTExX1NOQVBfVVZfRU4JCQkweDFFCi0jZGVmaW5lIFI1MTFfU05BUF9PUFRTCQkJMHgxRgorI2RlZmluZSBSNTExX1NOQVBfUFhDTlQJCQkweDFhCisjZGVmaW5lIFI1MTFfU05BUF9MTkNOVAkJCTB4MWIKKyNkZWZpbmUgUjUxMV9TTkFQX1BYRElWCQkJMHgxYworI2RlZmluZSBSNTExX1NOQVBfTE5ESVYJCQkweDFkCisjZGVmaW5lIFI1MTFfU05BUF9VVl9FTgkJCTB4MWUKKyNkZWZpbmUgUjUxMV9TTkFQX1VWX0VOCQkJMHgxZQorI2RlZmluZSBSNTExX1NOQVBfT1BUUwkJCTB4MWYKIAogI2RlZmluZSBSNTExX0RSQU1fRkxPV19DVEwJCTB4MjAKICNkZWZpbmUgUjUxMV9GSUZPX09QVFMJCQkweDMxCkBAIC00NjYsMTMgKzUxNCwxNCBAQAogI2RlZmluZSBPVjUxOV9SMjVfRk9STUFUCQkweDI1CiAKIC8qIE9WNTE5IFN5c3RlbSBDb250cm9sbGVyIHJlZ2lzdGVyIG51bWJlcnMgKi8KLSNkZWZpbmUgT1Y1MTlfU1lTX1JFU0VUMSAweDUxCi0jZGVmaW5lIE9WNTE5X1NZU19FTl9DTEsxIDB4NTQKKyNkZWZpbmUgT1Y1MTlfUjUxX1JFU0VUMQkJMHg1MQorI2RlZmluZSBPVjUxOV9SNTRfRU5fQ0xLMQkJMHg1NAorI2RlZmluZSBPVjUxOV9SNTdfU05BUFNIT1QJCTB4NTcKIAogI2RlZmluZSBPVjUxOV9HUElPX0RBVEFfT1VUMAkJMHg3MQogI2RlZmluZSBPVjUxOV9HUElPX0lPX0NUUkwwCQkweDcyCiAKLSNkZWZpbmUgT1Y1MTFfRU5EUE9JTlRfQUREUkVTUyAgMQkvKiBJc29jIGVuZHBvaW50IG51bWJlciAqLworLyojZGVmaW5lIE9WNTExX0VORFBPSU5UX0FERFJFU1MgMQkgKiBJc29jIGVuZHBvaW50IG51bWJlciAqLwogCiAvKgogICogVGhlIEZYMiBjaGlwIGRvZXMgbm90IGdpdmUgdXMgYSB6ZXJvIGxlbmd0aCByZWFkIGF0IGVuZCBvZiBmcmFtZS4KQEAgLTUyNiw4MCArNTc1LDgxIEBACiAjZGVmaW5lIE9WNzYxMF9SRUdfSURfTE9XCTB4MWQJLyogbWFudWZhY3R1cmVyIElEIExTQiAqLwogI2RlZmluZSBPVjc2MTBfUkVHX0NPTV9JCTB4MjkJLyogbWlzYyBzZXR0aW5ncyAqLwogCi0vKiBPVjc2NzAgcmVnaXN0ZXJzICovCi0jZGVmaW5lIE9WNzY3MF9SRUdfR0FJTiAgICAgICAgMHgwMCAgICAvKiBHYWluIGxvd2VyIDggYml0cyAocmVzdCBpbiB2cmVmKSAqLwotI2RlZmluZSBPVjc2NzBfUkVHX0JMVUUgICAgICAgIDB4MDEgICAgLyogYmx1ZSBnYWluICovCi0jZGVmaW5lIE9WNzY3MF9SRUdfUkVEICAgICAgICAgMHgwMiAgICAvKiByZWQgZ2FpbiAqLwotI2RlZmluZSBPVjc2NzBfUkVHX1ZSRUYgICAgICAgIDB4MDMgICAgLyogUGllY2VzIG9mIEdBSU4sIFZTVEFSVCwgVlNUT1AgKi8KLSNkZWZpbmUgT1Y3NjcwX1JFR19DT00xICAgICAgICAweDA0ICAgIC8qIENvbnRyb2wgMSAqLwotI2RlZmluZSBPVjc2NzBfUkVHX0FFQ0hIICAgICAgIDB4MDcgICAgLyogQUVDIE1TIDUgYml0cyAqLwotI2RlZmluZSBPVjc2NzBfUkVHX0NPTTMgICAgICAgIDB4MGMgICAgLyogQ29udHJvbCAzICovCi0jZGVmaW5lIE9WNzY3MF9SRUdfQ09NNCAgICAgICAgMHgwZCAgICAvKiBDb250cm9sIDQgKi8KLSNkZWZpbmUgT1Y3NjcwX1JFR19DT001ICAgICAgICAweDBlICAgIC8qIEFsbCAicmVzZXJ2ZWQiICovCi0jZGVmaW5lIE9WNzY3MF9SRUdfQ09NNiAgICAgICAgMHgwZiAgICAvKiBDb250cm9sIDYgKi8KLSNkZWZpbmUgT1Y3NjcwX1JFR19BRUNIICAgICAgICAweDEwICAgIC8qIE1vcmUgYml0cyBvZiBBRUMgdmFsdWUgKi8KLSNkZWZpbmUgT1Y3NjcwX1JFR19DTEtSQyAgICAgICAweDExICAgIC8qIENsb2NrIGNvbnRyb2wgKi8KLSNkZWZpbmUgT1Y3NjcwX1JFR19DT003ICAgICAgICAweDEyICAgIC8qIENvbnRyb2wgNyAqLwotI2RlZmluZSAgIE9WNzY3MF9DT003X0ZNVF9WR0EgICAgMHgwMAotI2RlZmluZSAgIE9WNzY3MF9DT003X1lVViAgICAgICAgMHgwMCAgICAvKiBZVVYgKi8KLSNkZWZpbmUgICBPVjc2NzBfQ09NN19GTVRfUVZHQSAgIDB4MTAgICAgLyogUVZHQSBmb3JtYXQgKi8KLSNkZWZpbmUgICBPVjc2NzBfQ09NN19GTVRfTUFTSyAgIDB4MzgKLSNkZWZpbmUgICBPVjc2NzBfQ09NN19SRVNFVCAgICAgIDB4ODAgICAgLyogUmVnaXN0ZXIgcmVzZXQgKi8KLSNkZWZpbmUgT1Y3NjcwX1JFR19DT004ICAgICAgICAweDEzICAgIC8qIENvbnRyb2wgOCAqLwotI2RlZmluZSAgIE9WNzY3MF9DT004X0FFQyAgICAgICAgMHgwMSAgICAvKiBBdXRvIGV4cG9zdXJlIGVuYWJsZSAqLwotI2RlZmluZSAgIE9WNzY3MF9DT004X0FXQiAgICAgICAgMHgwMiAgICAvKiBXaGl0ZSBiYWxhbmNlIGVuYWJsZSAqLwotI2RlZmluZSAgIE9WNzY3MF9DT004X0FHQyAgICAgICAgMHgwNCAgICAvKiBBdXRvIGdhaW4gZW5hYmxlICovCi0jZGVmaW5lICAgT1Y3NjcwX0NPTThfQkZJTFQgICAgICAweDIwICAgIC8qIEJhbmQgZmlsdGVyIGVuYWJsZSAqLwotI2RlZmluZSAgIE9WNzY3MF9DT004X0FFQ1NURVAgICAgMHg0MCAgICAvKiBVbmxpbWl0ZWQgQUVDIHN0ZXAgc2l6ZSAqLwotI2RlZmluZSAgIE9WNzY3MF9DT004X0ZBU1RBRUMgICAgMHg4MCAgICAvKiBFbmFibGUgZmFzdCBBR0MvQUVDICovCi0jZGVmaW5lIE9WNzY3MF9SRUdfQ09NOSAgICAgICAgMHgxNCAgICAvKiBDb250cm9sIDkgIC0gZ2FpbiBjZWlsaW5nICovCi0jZGVmaW5lIE9WNzY3MF9SRUdfQ09NMTAgICAgICAgMHgxNSAgICAvKiBDb250cm9sIDEwICovCi0jZGVmaW5lIE9WNzY3MF9SRUdfSFNUQVJUICAgICAgMHgxNyAgICAvKiBIb3JpeiBzdGFydCBoaWdoIGJpdHMgKi8KLSNkZWZpbmUgT1Y3NjcwX1JFR19IU1RPUCAgICAgICAweDE4ICAgIC8qIEhvcml6IHN0b3AgaGlnaCBiaXRzICovCi0jZGVmaW5lIE9WNzY3MF9SRUdfVlNUQVJUICAgICAgMHgxOSAgICAvKiBWZXJ0IHN0YXJ0IGhpZ2ggYml0cyAqLwotI2RlZmluZSBPVjc2NzBfUkVHX1ZTVE9QICAgICAgIDB4MWEgICAgLyogVmVydCBzdG9wIGhpZ2ggYml0cyAqLwotI2RlZmluZSBPVjc2NzBfUkVHX01WRlAgICAgICAgIDB4MWUgICAgLyogTWlycm9yIC8gdmZsaXAgKi8KLSNkZWZpbmUgICBPVjc2NzBfTVZGUF9WRkxJUAkgMHgxMCAgICAvKiB2ZXJ0aWNhbCBmbGlwICovCi0jZGVmaW5lICAgT1Y3NjcwX01WRlBfTUlSUk9SICAgICAweDIwICAgIC8qIE1pcnJvciBpbWFnZSAqLwotI2RlZmluZSBPVjc2NzBfUkVHX0FFVyAgICAgICAgIDB4MjQgICAgLyogQUdDIHVwcGVyIGxpbWl0ICovCi0jZGVmaW5lIE9WNzY3MF9SRUdfQUVCICAgICAgICAgMHgyNSAgICAvKiBBR0MgbG93ZXIgbGltaXQgKi8KLSNkZWZpbmUgT1Y3NjcwX1JFR19WUFQgICAgICAgICAweDI2ICAgIC8qIEFHQy9BRUMgZmFzdCBtb2RlIG9wIHJlZ2lvbiAqLwotI2RlZmluZSBPVjc2NzBfUkVHX0hSRUYgICAgICAgIDB4MzIgICAgLyogSFJFRiBwaWVjZXMgKi8KLSNkZWZpbmUgT1Y3NjcwX1JFR19UU0xCICAgICAgICAweDNhICAgIC8qIGxvdHMgb2Ygc3R1ZmYgKi8KLSNkZWZpbmUgT1Y3NjcwX1JFR19DT00xMSAgICAgICAweDNiICAgIC8qIENvbnRyb2wgMTEgKi8KLSNkZWZpbmUgICBPVjc2NzBfQ09NMTFfRVhQICAgICAgIDB4MDIKLSNkZWZpbmUgICBPVjc2NzBfQ09NMTFfSFpBVVRPICAgIDB4MTAgICAgLyogQXV0byBkZXRlY3QgNTAvNjAgSHogKi8KLSNkZWZpbmUgT1Y3NjcwX1JFR19DT00xMiAgICAgICAweDNjICAgIC8qIENvbnRyb2wgMTIgKi8KLSNkZWZpbmUgT1Y3NjcwX1JFR19DT00xMyAgICAgICAweDNkICAgIC8qIENvbnRyb2wgMTMgKi8KLSNkZWZpbmUgICBPVjc2NzBfQ09NMTNfR0FNTUEgICAgIDB4ODAgICAgLyogR2FtbWEgZW5hYmxlICovCi0jZGVmaW5lICAgT1Y3NjcwX0NPTTEzX1VWU0FUICAgICAweDQwICAgIC8qIFVWIHNhdHVyYXRpb24gYXV0byBhZGp1c3RtZW50ICovCi0jZGVmaW5lIE9WNzY3MF9SRUdfQ09NMTQgICAgICAgMHgzZSAgICAvKiBDb250cm9sIDE0ICovCi0jZGVmaW5lIE9WNzY3MF9SRUdfRURHRSAgICAgICAgMHgzZiAgICAvKiBFZGdlIGVuaGFuY2VtZW50IGZhY3RvciAqLwotI2RlZmluZSBPVjc2NzBfUkVHX0NPTTE1ICAgICAgIDB4NDAgICAgLyogQ29udHJvbCAxNSAqLwotI2RlZmluZSAgIE9WNzY3MF9DT00xNV9SMDBGRiAgICAgMHhjMCAgICAvKiAgICAgICAgICAgIDAwIHRvIEZGICovCi0jZGVmaW5lIE9WNzY3MF9SRUdfQ09NMTYgICAgICAgMHg0MSAgICAvKiBDb250cm9sIDE2ICovCi0jZGVmaW5lICAgT1Y3NjcwX0NPTTE2X0FXQkdBSU4gICAweDA4ICAgIC8qIEFXQiBnYWluIGVuYWJsZSAqLwotI2RlZmluZSBPVjc2NzBfUkVHX0JSSUdIVCAgICAgIDB4NTUgICAgLyogQnJpZ2h0bmVzcyAqLwotI2RlZmluZSBPVjc2NzBfUkVHX0NPTlRSQVMgICAgIDB4NTYgICAgLyogQ29udHJhc3QgY29udHJvbCAqLwotI2RlZmluZSBPVjc2NzBfUkVHX0dGSVggICAgICAgIDB4NjkgICAgLyogRml4IGdhaW4gY29udHJvbCAqLwotI2RlZmluZSBPVjc2NzBfUkVHX1JHQjQ0NCAgICAgIDB4OGMgICAgLyogUkdCIDQ0NCBjb250cm9sICovCi0jZGVmaW5lIE9WNzY3MF9SRUdfSEFFQ0MxICAgICAgMHg5ZiAgICAvKiBIaXN0IEFFQy9BR0MgY29udHJvbCAxICovCi0jZGVmaW5lIE9WNzY3MF9SRUdfSEFFQ0MyICAgICAgMHhhMCAgICAvKiBIaXN0IEFFQy9BR0MgY29udHJvbCAyICovCi0jZGVmaW5lIE9WNzY3MF9SRUdfQkQ1ME1BWCAgICAgMHhhNSAgICAvKiA1MGh6IGJhbmRpbmcgc3RlcCBsaW1pdCAqLwotI2RlZmluZSBPVjc2NzBfUkVHX0hBRUNDMyAgICAgIDB4YTYgICAgLyogSGlzdCBBRUMvQUdDIGNvbnRyb2wgMyAqLwotI2RlZmluZSBPVjc2NzBfUkVHX0hBRUNDNCAgICAgIDB4YTcgICAgLyogSGlzdCBBRUMvQUdDIGNvbnRyb2wgNCAqLwotI2RlZmluZSBPVjc2NzBfUkVHX0hBRUNDNSAgICAgIDB4YTggICAgLyogSGlzdCBBRUMvQUdDIGNvbnRyb2wgNSAqLwotI2RlZmluZSBPVjc2NzBfUkVHX0hBRUNDNiAgICAgIDB4YTkgICAgLyogSGlzdCBBRUMvQUdDIGNvbnRyb2wgNiAqLwotI2RlZmluZSBPVjc2NzBfUkVHX0hBRUNDNyAgICAgIDB4YWEgICAgLyogSGlzdCBBRUMvQUdDIGNvbnRyb2wgNyAqLwotI2RlZmluZSBPVjc2NzBfUkVHX0JENjBNQVggICAgIDB4YWIgICAgLyogNjBoeiBiYW5kaW5nIHN0ZXAgbGltaXQgKi8KKy8qIE9WNzY2MCBhbmQgT1Y3NjcwIHJlZ2lzdGVycyAqLworI2RlZmluZSBPVjc2NzBfUjAwX0dBSU4JCTB4MDAJLyogR2FpbiBsb3dlciA4IGJpdHMgKHJlc3QgaW4gdnJlZikgKi8KKyNkZWZpbmUgT1Y3NjcwX1IwMV9CTFVFCQkweDAxCS8qIGJsdWUgZ2FpbiAqLworI2RlZmluZSBPVjc2NzBfUjAyX1JFRAkJMHgwMgkvKiByZWQgZ2FpbiAqLworI2RlZmluZSBPVjc2NzBfUjAzX1ZSRUYJCTB4MDMJLyogUGllY2VzIG9mIEdBSU4sIFZTVEFSVCwgVlNUT1AgKi8KKyNkZWZpbmUgT1Y3NjcwX1IwNF9DT00xCQkweDA0CS8qIENvbnRyb2wgMSAqLworLyojZGVmaW5lIE9WNzY3MF9SMDdfQUVDSEgJMHgwNwkgKiBBRUMgTVMgNSBiaXRzICovCisjZGVmaW5lIE9WNzY3MF9SMENfQ09NMwkJMHgwYwkvKiBDb250cm9sIDMgKi8KKyNkZWZpbmUgT1Y3NjcwX1IwRF9DT000CQkweDBkCS8qIENvbnRyb2wgNCAqLworI2RlZmluZSBPVjc2NzBfUjBFX0NPTTUJCTB4MGUJLyogQWxsICJyZXNlcnZlZCIgKi8KKyNkZWZpbmUgT1Y3NjcwX1IwRl9DT002CQkweDBmCS8qIENvbnRyb2wgNiAqLworI2RlZmluZSBPVjc2NzBfUjEwX0FFQ0gJCTB4MTAJLyogTW9yZSBiaXRzIG9mIEFFQyB2YWx1ZSAqLworI2RlZmluZSBPVjc2NzBfUjExX0NMS1JDCTB4MTEJLyogQ2xvY2sgY29udHJvbCAqLworI2RlZmluZSBPVjc2NzBfUjEyX0NPTTcJCTB4MTIJLyogQ29udHJvbCA3ICovCisjZGVmaW5lICAgT1Y3NjcwX0NPTTdfRk1UX1ZHQQkgMHgwMAorLyojZGVmaW5lICAgT1Y3NjcwX0NPTTdfWVVWCSAweDAwCSAqIFlVViAqLworI2RlZmluZSAgIE9WNzY3MF9DT003X0ZNVF9RVkdBCSAweDEwCS8qIFFWR0EgZm9ybWF0ICovCisjZGVmaW5lICAgT1Y3NjcwX0NPTTdfRk1UX01BU0sJIDB4MzgKKyNkZWZpbmUgICBPVjc2NzBfQ09NN19SRVNFVAkgMHg4MAkvKiBSZWdpc3RlciByZXNldCAqLworI2RlZmluZSBPVjc2NzBfUjEzX0NPTTgJCTB4MTMJLyogQ29udHJvbCA4ICovCisjZGVmaW5lICAgT1Y3NjcwX0NPTThfQUVDCSAweDAxCS8qIEF1dG8gZXhwb3N1cmUgZW5hYmxlICovCisjZGVmaW5lICAgT1Y3NjcwX0NPTThfQVdCCSAweDAyCS8qIFdoaXRlIGJhbGFuY2UgZW5hYmxlICovCisjZGVmaW5lICAgT1Y3NjcwX0NPTThfQUdDCSAweDA0CS8qIEF1dG8gZ2FpbiBlbmFibGUgKi8KKyNkZWZpbmUgICBPVjc2NzBfQ09NOF9CRklMVAkgMHgyMAkvKiBCYW5kIGZpbHRlciBlbmFibGUgKi8KKyNkZWZpbmUgICBPVjc2NzBfQ09NOF9BRUNTVEVQCSAweDQwCS8qIFVubGltaXRlZCBBRUMgc3RlcCBzaXplICovCisjZGVmaW5lICAgT1Y3NjcwX0NPTThfRkFTVEFFQwkgMHg4MAkvKiBFbmFibGUgZmFzdCBBR0MvQUVDICovCisjZGVmaW5lIE9WNzY3MF9SMTRfQ09NOQkJMHgxNAkvKiBDb250cm9sIDkgLSBnYWluIGNlaWxpbmcgKi8KKyNkZWZpbmUgT1Y3NjcwX1IxNV9DT00xMAkweDE1CS8qIENvbnRyb2wgMTAgKi8KKyNkZWZpbmUgT1Y3NjcwX1IxN19IU1RBUlQJMHgxNwkvKiBIb3JpeiBzdGFydCBoaWdoIGJpdHMgKi8KKyNkZWZpbmUgT1Y3NjcwX1IxOF9IU1RPUAkweDE4CS8qIEhvcml6IHN0b3AgaGlnaCBiaXRzICovCisjZGVmaW5lIE9WNzY3MF9SMTlfVlNUQVJUCTB4MTkJLyogVmVydCBzdGFydCBoaWdoIGJpdHMgKi8KKyNkZWZpbmUgT1Y3NjcwX1IxQV9WU1RPUAkweDFhCS8qIFZlcnQgc3RvcCBoaWdoIGJpdHMgKi8KKyNkZWZpbmUgT1Y3NjcwX1IxRV9NVkZQCQkweDFlCS8qIE1pcnJvciAvIHZmbGlwICovCisjZGVmaW5lICAgT1Y3NjcwX01WRlBfVkZMSVAJIDB4MTAJLyogdmVydGljYWwgZmxpcCAqLworI2RlZmluZSAgIE9WNzY3MF9NVkZQX01JUlJPUgkgMHgyMAkvKiBNaXJyb3IgaW1hZ2UgKi8KKyNkZWZpbmUgT1Y3NjcwX1IyNF9BRVcJCTB4MjQJLyogQUdDIHVwcGVyIGxpbWl0ICovCisjZGVmaW5lIE9WNzY3MF9SMjVfQUVCCQkweDI1CS8qIEFHQyBsb3dlciBsaW1pdCAqLworI2RlZmluZSBPVjc2NzBfUjI2X1ZQVAkJMHgyNgkvKiBBR0MvQUVDIGZhc3QgbW9kZSBvcCByZWdpb24gKi8KKyNkZWZpbmUgT1Y3NjcwX1IzMl9IUkVGCQkweDMyCS8qIEhSRUYgcGllY2VzICovCisjZGVmaW5lIE9WNzY3MF9SM0FfVFNMQgkJMHgzYQkvKiBsb3RzIG9mIHN0dWZmICovCisjZGVmaW5lIE9WNzY3MF9SM0JfQ09NMTEJMHgzYgkvKiBDb250cm9sIDExICovCisjZGVmaW5lICAgT1Y3NjcwX0NPTTExX0VYUAkgMHgwMgorI2RlZmluZSAgIE9WNzY3MF9DT00xMV9IWkFVVE8JIDB4MTAJLyogQXV0byBkZXRlY3QgNTAvNjAgSHogKi8KKyNkZWZpbmUgT1Y3NjcwX1IzQ19DT00xMgkweDNjCS8qIENvbnRyb2wgMTIgKi8KKyNkZWZpbmUgT1Y3NjcwX1IzRF9DT00xMwkweDNkCS8qIENvbnRyb2wgMTMgKi8KKyNkZWZpbmUgICBPVjc2NzBfQ09NMTNfR0FNTUEJIDB4ODAJLyogR2FtbWEgZW5hYmxlICovCisjZGVmaW5lICAgT1Y3NjcwX0NPTTEzX1VWU0FUCSAweDQwCS8qIFVWIHNhdHVyYXRpb24gYXV0byBhZGp1c3RtZW50ICovCisjZGVmaW5lIE9WNzY3MF9SM0VfQ09NMTQJMHgzZQkvKiBDb250cm9sIDE0ICovCisjZGVmaW5lIE9WNzY3MF9SM0ZfRURHRQkJMHgzZgkvKiBFZGdlIGVuaGFuY2VtZW50IGZhY3RvciAqLworI2RlZmluZSBPVjc2NzBfUjQwX0NPTTE1CTB4NDAJLyogQ29udHJvbCAxNSAqLworLyojZGVmaW5lICAgT1Y3NjcwX0NPTTE1X1IwMEZGCSAweGMwCSAqCTAwIHRvIEZGICovCisjZGVmaW5lIE9WNzY3MF9SNDFfQ09NMTYJMHg0MQkvKiBDb250cm9sIDE2ICovCisjZGVmaW5lICAgT1Y3NjcwX0NPTTE2X0FXQkdBSU4JIDB4MDgJLyogQVdCIGdhaW4gZW5hYmxlICovCisvKiBlbmQgb2Ygb3Y3NjYwIGNvbW1vbiByZWdpc3RlcnMgKi8KKyNkZWZpbmUgT1Y3NjcwX1I1NV9CUklHSFQJMHg1NQkvKiBCcmlnaHRuZXNzICovCisjZGVmaW5lIE9WNzY3MF9SNTZfQ09OVFJBUwkweDU2CS8qIENvbnRyYXN0IGNvbnRyb2wgKi8KKyNkZWZpbmUgT1Y3NjcwX1I2OV9HRklYCQkweDY5CS8qIEZpeCBnYWluIGNvbnRyb2wgKi8KKy8qI2RlZmluZSBPVjc2NzBfUjhDX1JHQjQ0NAkweDhjCSAqIFJHQiA0NDQgY29udHJvbCAqLworI2RlZmluZSBPVjc2NzBfUjlGX0hBRUNDMQkweDlmCS8qIEhpc3QgQUVDL0FHQyBjb250cm9sIDEgKi8KKyNkZWZpbmUgT1Y3NjcwX1JBMF9IQUVDQzIJMHhhMAkvKiBIaXN0IEFFQy9BR0MgY29udHJvbCAyICovCisjZGVmaW5lIE9WNzY3MF9SQTVfQkQ1ME1BWAkweGE1CS8qIDUwaHogYmFuZGluZyBzdGVwIGxpbWl0ICovCisjZGVmaW5lIE9WNzY3MF9SQTZfSEFFQ0MzCTB4YTYJLyogSGlzdCBBRUMvQUdDIGNvbnRyb2wgMyAqLworI2RlZmluZSBPVjc2NzBfUkE3X0hBRUNDNAkweGE3CS8qIEhpc3QgQUVDL0FHQyBjb250cm9sIDQgKi8KKyNkZWZpbmUgT1Y3NjcwX1JBOF9IQUVDQzUJMHhhOAkvKiBIaXN0IEFFQy9BR0MgY29udHJvbCA1ICovCisjZGVmaW5lIE9WNzY3MF9SQTlfSEFFQ0M2CTB4YTkJLyogSGlzdCBBRUMvQUdDIGNvbnRyb2wgNiAqLworI2RlZmluZSBPVjc2NzBfUkFBX0hBRUNDNwkweGFhCS8qIEhpc3QgQUVDL0FHQyBjb250cm9sIDcgKi8KKyNkZWZpbmUgT1Y3NjcwX1JBQl9CRDYwTUFYCTB4YWIJLyogNjBoeiBiYW5kaW5nIHN0ZXAgbGltaXQgKi8KIAogc3RydWN0IG92X3JlZ3ZhbHMgewotCV9fdTggcmVnOwotCV9fdTggdmFsOworCXU4IHJlZzsKKwl1OCB2YWw7CiB9Owogc3RydWN0IG92X2kyY19yZWd2YWxzIHsKLQlfX3U4IHJlZzsKLQlfX3U4IHZhbDsKKwl1OCByZWc7CisJdTggdmFsOwogfTsKIAogLyogU2V0dGluZ3MgZm9yIE9WMjYxMCBjYW1lcmEgY2hpcCAqLwpAQCAtNjE3LDcgKzY2Nyw2IEBACiAJICogIndhaXQgNDA5NiBleHRlcm5hbCBjbG9jayAuLi4gdG8gbWFrZSBzdXJlIHRoZSBzZW5zb3IgaXMKIAkgKiBzdGFibGUgYW5kIHJlYWR5IHRvIGFjY2VzcyByZWdpc3RlcnMiIGkuZS4gMTYwdXMgYXQgMjRNSHoKIAkgKi8KLQogCXsgMHgxMiwgMHg4MCB9LCAvKiBDT01IIHJlc2V0ICovCiAJeyAweDEyLCAweDAwIH0sIC8qIFFYR0EsIG1hc3RlciAqLwogCkBAIC02NTAsNyArNjk5LDcgQEAKIAkgKiAgICBDT01JWzBdICJFeHBvc3VyZSBjb250cm9sIgogCSAqICAgICAgICAgICAgICAgICAgPSAgIDAgKDB4MDApIC4uLi4uLi4wICJNYW51YWwiCiAJICovCi0JeyAweDEzLCAweEMwIH0sCisJeyAweDEzLCAweGMwIH0sCiAKIAkvKgogCSAqIDA5IENPTUMgIkNvbW1vbiBDb250cm9sIEMiCkBAIC03MDYsNyArNzU1LDcgQEAKIAkgKiAgICBDT01FWzBdICJBdXRvIHplcm8gY2lyY3VpdCBzZWxlY3QiCiAJICogICAgICAgICAgICAgICAgICA9ICAgMSAoMHgwMSkgLi4uLi4uLjEgIk9uIgogCSAqLwotCXsgMHgwZCwgMHhBMSB9LAorCXsgMHgwZCwgMHhhMSB9LAogCiAJLyoKIAkgKiAwRSBDT01GICJDb21tb24gQ29udHJvbCBGIgpAQCAtNzcwLDcgKzgxOSw3IEBACiAJICogICAgQ09NSlswXSAiUmVzZXJ2ZWQiCiAJICogICAgICAgICAgICAgICAgICA9ICAgMCAoMHgwMCkgLi4uLi4uLjAKIAkgKi8KLQl7IDB4MTQsIDB4QzYgfSwKKwl7IDB4MTQsIDB4YzYgfSwKIAogCS8qCiAJICogMTUgQ09NSyAiQ29tbW9uIENvbnRyb2wgSyIKQEAgLTg3Niw3ICs5MjUsNyBAQAogCSAqICAgIEZWT1BUWzc6MF0gIlJhbmdlIgogCSAqICAgICAgICAgICAgICAgICAgPSAgMzEgKDB4MUYpIDAwMDExMTExCiAJICovCi0JeyAweDNjLCAweDFGIH0sCisJeyAweDNjLCAweDFmIH0sCiAKIAkvKgogCSAqIDQ0IFVuZG9jdW1lbnRlZCAgPSAgIDAgKDB4MDApIDAwMDAwMDAwCkBAIC05MjUsNyArOTc0LDcgQEAKIAkgKiAgICA0OFs3OjBdICJJdCdzIGEgc2VjcmV0IgogCSAqICAgICAgICAgICAgICAgICAgPSAxOTIgKDB4QzApIDExMDAwMDAwCiAJICovCi0JeyAweDQ4LCAweEMwIH0sCisJeyAweDQ4LCAweGMwIH0sCiAKIAkvKgogCSAqIDQ5IFVuZG9jdW1lbnRlZCAgPSAgMjUgKDB4MTkpIDAwMDExMDAxCkBAIC05MzksMTggKzk4OCwxOCBAQAogCSAqICAgIDRCWzc6MF0gIkl0J3MgYSBzZWNyZXQiCiAJICogICAgICAgICAgICAgICAgICA9IDEyOCAoMHg4MCkgMTAwMDAwMDAKIAkgKi8KLQl7IDB4NEIsIDB4ODAgfSwKKwl7IDB4NGIsIDB4ODAgfSwKIAogCS8qCiAJICogNEQgVW5kb2N1bWVudGVkICA9IDE5NiAoMHhDNCkgMTEwMDAxMDAKIAkgKiAgICA0RFs3OjBdICJJdCdzIGEgc2VjcmV0IgogCSAqICAgICAgICAgICAgICAgICAgPSAxOTYgKDB4QzQpIDExMDAwMTAwCiAJICovCi0JeyAweDRELCAweEM0IH0sCisJeyAweDRkLCAweGM0IH0sCiAKIAkvKgogCSAqIDM1IFZSRUYgIlJlZmVyZW5jZSBWb2x0YWdlIENvbnRyb2wiCi0JICogICAgICAgICAgICAgICAgICA9ICA3NiAoMHg0QykgMDEwMDExMDAKKwkgKiAgICAgICAgICAgICAgICAgID0gIDc2ICgweDRjKSAwMTAwMTEwMAogCSAqICAgIFZSRUZbNzo1XSAiQ29sdW1uIGhpZ2ggcmVmZXJlbmNlIGNvbnRyb2wiCiAJICogICAgICAgICAgICAgICAgICA9ICAgMiAoMHgwMikgMDEwLi4uLi4gImhpZ2hlciB2b2x0YWdlIgogCSAqICAgIFZSRUZbNDoyXSAiQ29sdW1uIGxvdyByZWZlcmVuY2UgY29udHJvbCIKQEAgLTk1OCwyMSArMTAwNywyMSBAQAogCSAqICAgIFZSRUZbMTowXSAiUmVzZXJ2ZWQiCiAJICogICAgICAgICAgICAgICAgICA9ICAgMCAoMHgwMCkgLi4uLi4uMDAKIAkgKi8KLQl7IDB4MzUsIDB4NEMgfSwKKwl7IDB4MzUsIDB4NGMgfSwKIAogCS8qCiAJICogM0QgVW5kb2N1bWVudGVkICA9ICAgMCAoMHgwMCkgMDAwMDAwMDAKIAkgKiAgICAzRFs3OjBdICJJdCdzIGEgc2VjcmV0IgogCSAqICAgICAgICAgICAgICAgICAgPSAgIDAgKDB4MDApIDAwMDAwMDAwCiAJICovCi0JeyAweDNELCAweDAwIH0sCisJeyAweDNkLCAweDAwIH0sCiAKIAkvKgogCSAqIDNFIFVuZG9jdW1lbnRlZCAgPSAgIDAgKDB4MDApIDAwMDAwMDAwCiAJICogICAgM0VbNzowXSAiSXQncyBhIHNlY3JldCIKIAkgKiAgICAgICAgICAgICAgICAgID0gICAwICgweDAwKSAwMDAwMDAwMAogCSAqLwotCXsgMHgzRSwgMHgwMCB9LAorCXsgMHgzZSwgMHgwMCB9LAogCiAJLyoKIAkgKiAzQiBGUkVGQiAiSW50ZXJuYWwgUmVmZXJlbmNlIEFkanVzdG1lbnQiCkBAIC0xMDEyLDcgKzEwNjEsNyBAQAogCSAqICAgIFZCTE1bMzowXSAiU2Vuc29yIGN1cnJlbnQgY29udHJvbCIKIAkgKiAgICAgICAgICAgICAgICAgID0gIDEwICgweDBBKSAuLi4uMTAxMAogCSAqLwotCXsgMHgzNCwgMHg1QSB9LAorCXsgMHgzNCwgMHg1YSB9LAogCiAJLyoKIAkgKiAzQiBGUkVGQiAiSW50ZXJuYWwgUmVmZXJlbmNlIEFkanVzdG1lbnQiCkBAIC0xMDc4LDcgKzExMjcsNyBAQAogCSAqICAgIEhSRUZTVFs3OjBdICJIb3Jpem9udGFsIHdpbmRvdyBzdGFydCwgOCBNU0JzIgogCSAqICAgICAgICAgICAgICAgICAgPSAgMzEgKDB4MUYpIDAwMDExMTExCiAJICovCi0JeyAweDE3LCAweDFGIH0sCisJeyAweDE3LCAweDFmIH0sCiAKIAkvKgogCSAqIDE4IEhSRUZFTkQgIkhvcml6b250YWwgd2luZG93IGVuZCIKQEAgLTEwODYsNyArMTEzNSw3IEBACiAJICogICAgSFJFRkVORFs3OjBdICJIb3Jpem9udGFsIFdpbmRvdyBFbmQsIDggTVNCcyIKIAkgKiAgICAgICAgICAgICAgICAgID0gIDk1ICgweDVGKSAwMTAxMTExMQogCSAqLwotCXsgMHgxOCwgMHg1RiB9LAorCXsgMHgxOCwgMHg1ZiB9LAogCiAJLyoKIAkgKiAxOSBWU1RSVCAiVmVydGljYWwgd2luZG93IHN0YXJ0IgpAQCAtMTEyNiw3ICsxMTc1LDcgQEAKIAkgKiAgICBDT01BWzE6MF0gIlZlcnRpY2FsIHdpbmRvdyBzdGFydCBsaW5lIGNvbnRyb2wgMiBMU0JzIgogCSAqICAgICAgICAgICAgICAgICAgPSAgIDIgKDB4MDIpIC4uLi4uLjEwCiAJICovCi0JeyAweDAzLCAweDRBIH0sCisJeyAweDAzLCAweDRhIH0sCiAKIAkvKgogCSAqIDExIENMS1JDICJDbG9jayBSYXRlIENvbnRyb2wiCkBAIC0xMTgzLDcgKzEyMzIsNyBAQAogCSAqICAgIEhSRUZTVFs3OjBdICJIb3Jpem9udGFsIHdpbmRvdyBzdGFydCwgOCBNU0JzIgogCSAqICAgICAgICAgICAgICAgICAgPSAgMzEgKDB4MUYpIDAwMDExMTExCiAJICovCi0JeyAweDE3LCAweDFGIH0sCisJeyAweDE3LCAweDFmIH0sCiAKIAkvKgogCSAqIDE4IEhSRUZFTkQgIkhvcml6b250YWwgd2luZG93IGVuZCIKQEAgLTExOTEsNyArMTI0MCw3IEBACiAJICogICAgSFJFRkVORFs3OjBdICJIb3Jpem9udGFsIFdpbmRvdyBFbmQsIDggTVNCcyIKIAkgKiAgICAgICAgICAgICAgICAgID0gIDk1ICgweDVGKSAwMTAxMTExMQogCSAqLwotCXsgMHgxOCwgMHg1RiB9LAorCXsgMHgxOCwgMHg1ZiB9LAogCiAJLyoKIAkgKiAxOSBWU1RSVCAiVmVydGljYWwgd2luZG93IHN0YXJ0IgpAQCAtMTIzMSw3ICsxMjgwLDcgQEAKIAkgKiAgICBDT01BWzE6MF0gIlZlcnRpY2FsIHdpbmRvdyBzdGFydCBsaW5lIGNvbnRyb2wgMiBMU0JzIgogCSAqICAgICAgICAgICAgICAgICAgPSAgIDIgKDB4MDIpIC4uLi4uLjEwCiAJICovCi0JeyAweDAzLCAweDRBIH0sCisJeyAweDAzLCAweDRhIH0sCiAKIAkvKgogCSAqIDAyIFJFRCAiUmVkIEdhaW4gQ29udHJvbCIKQEAgLTEyNDEsNyArMTI5MCw3IEBACiAJICogICAgUkVEWzY6MF0gIlZhbHVlIgogCSAqICAgICAgICAgICAgICAgICAgPSAgNDcgKDB4MkYpIC4wMTAxMTExCiAJICovCi0JeyAweDAyLCAweEFGIH0sCisJeyAweDAyLCAweGFmIH0sCiAKIAkvKgogCSAqIDJEIEFERFZTTCAiVlNZTkMgUHVsc2UgV2lkdGgiCkBAIC0xMjQ5LDcgKzEyOTgsNyBAQAogCSAqICAgIEFERFZTTFs3OjBdICJWU1lOQyBwdWxzZSB3aWR0aCwgTFNCIgogCSAqICAgICAgICAgICAgICAgICAgPSAyMTAgKDB4RDIpIDExMDEwMDEwCiAJICovCi0JeyAweDJkLCAweEQyIH0sCisJeyAweDJkLCAweGQyIH0sCiAKIAkvKgogCSAqIDAwIEdBSU4gICAgICAgICAgPSAgMjQgKDB4MTgpIDAwMDExMDAwCkBAIC0xMjcyLDcgKzEzMjEsNyBAQAogCSAqICAgIEJMVUVbNjowXSAiVmFsdWUiCiAJICogICAgICAgICAgICAgICAgICA9IDExMiAoMHg3MCkgLjExMTAwMDAKIAkgKi8KLQl7IDB4MDEsIDB4RjAgfSwKKwl7IDB4MDEsIDB4ZjAgfSwKIAogCS8qCiAJICogMTAgQUVDICJBdXRvbWF0aWMgRXhwb3N1cmUgQ29udHJvbCIKQEAgLTEyODAsMTQgKzEzMjksMTQgQEAKIAkgKiAgICBBRUNbNzowXSAiQXV0b21hdGljIEV4cG9zdXJlIENvbnRyb2wsIDggTVNCcyIKIAkgKiAgICAgICAgICAgICAgICAgID0gIDEwICgweDBBKSAwMDAwMTAxMAogCSAqLwotCXsgMHgxMCwgMHgwQSB9LAorCXsgMHgxMCwgMHgwYSB9LAogCi0JeyAweEUxLCAweDY3IH0sCi0JeyAweEUzLCAweDAzIH0sCi0JeyAweEU0LCAweDI2IH0sCi0JeyAweEU1LCAweDNFIH0sCi0JeyAweEY4LCAweDAxIH0sCi0JeyAweEZGLCAweDAxIH0sCisJeyAweGUxLCAweDY3IH0sCisJeyAweGUzLCAweDAzIH0sCisJeyAweGU0LCAweDI2IH0sCisJeyAweGU1LCAweDNlIH0sCisJeyAweGY4LCAweDAxIH0sCisJeyAweGZmLCAweDAxIH0sCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG92X2kyY19yZWd2YWxzIG5vcm1fNngyMFtdID0gewpAQCAtMTI5Niw3ICsxMzQ1LDcgQEAKIAl7IDB4MDMsIDB4NjAgfSwKIAl7IDB4MDUsIDB4N2YgfSwgLyogRm9yIHdoZW4gYXV0b2FkanVzdCBpcyBvZmYgKi8KIAl7IDB4MDcsIDB4YTggfSwKLQkvKiBUaGUgcmF0aW8gb2YgMHgwYyBhbmQgMHgwZCAgY29udHJvbHMgdGhlIHdoaXRlIHBvaW50ICovCisJLyogVGhlIHJhdGlvIG9mIDB4MGMgYW5kIDB4MGQgY29udHJvbHMgdGhlIHdoaXRlIHBvaW50ICovCiAJeyAweDBjLCAweDI0IH0sCiAJeyAweDBkLCAweDI0IH0sCiAJeyAweDBmLCAweDE1IH0sIC8qIENPTVMgKi8KQEAgLTE0NjQsNyArMTUxMyw3IEBACiAJeyAweDAwLCAweDAwIH0sCQkvKiBnYWluICovCiAJeyAweDAxLCAweDgwIH0sCQkvKiBibHVlIGdhaW4gKi8KIAl7IDB4MDIsIDB4ODAgfSwJCS8qIHJlZCBnYWluICovCi0JeyAweDAzLCAweGMwIH0sCQkvKiBPVjc2NzBfUkVHX1ZSRUYgKi8KKwl7IDB4MDMsIDB4YzAgfSwJCS8qIE9WNzY3MF9SMDNfVlJFRiAqLwogCXsgMHgwNiwgMHg2MCB9LAogCXsgMHgwNywgMHgwMCB9LAogCXsgMHgwYywgMHgyNCB9LApAQCAtMTUzMiwzMyArMTU4MSwxNzcgQEAKIAl7IDB4MTIsIDB4MTQgfSwKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3ZfcmVndmFscyBpbml0XzUxOV9vdjc2NjBbXSA9IHsKKwl7IDB4NWQsCTB4MDMgfSwgLyogVHVybiBvZmYgc3VzcGVuZCBtb2RlICovCisJeyAweDUzLAkweDliIH0sIC8qIDB4OWYgZW5hYmxlcyB0aGUgKHVudXNlZCkgbWljcm9jb250cm9sbGVyICovCisJeyAweDU0LAkweDBmIH0sIC8qIGJpdDIgKGpwZWcgZW5hYmxlKSAqLworCXsgMHhhMiwJMHgyMCB9LCAvKiBhMi1hNSBhcmUgdW5kb2N1bWVudGVkICovCisJeyAweGEzLAkweDE4IH0sCisJeyAweGE0LAkweDA0IH0sCisJeyAweGE1LAkweDI4IH0sCisJeyAweDM3LAkweDAwIH0sCS8qIFNldFVzYkluaXQgKi8KKwl7IDB4NTUsCTB4MDIgfSwgLyogNC4wOTYgTWh6IGF1ZGlvIGNsb2NrICovCisJLyogRW5hYmxlIGJvdGggZmllbGRzLCBZVVYgSW5wdXQsIGRpc2FibGUgZGVmZWN0IGNvbXAgKHdoeT8pICovCisJeyAweDIwLAkweDBjIH0sCS8qIDB4MGQgZG9lcyBVIDwtPiBWIHN3YXAgKi8KKwl7IDB4MjEsCTB4MzggfSwKKwl7IDB4MjIsCTB4MWQgfSwKKwl7IDB4MTcsCTB4NTAgfSwgLyogdW5kb2N1bWVudGVkICovCisJeyAweDM3LAkweDAwIH0sIC8qIHVuZG9jdW1lbnRlZCAqLworCXsgMHg0MCwJMHhmZiB9LCAvKiBJMkMgdGltZW91dCBjb3VudGVyICovCisJeyAweDQ2LAkweDAwIH0sIC8qIEkyQyBjbG9jayBwcmVzY2FsZXIgKi8KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IG92X2kyY19yZWd2YWxzIG5vcm1fNzY2MFtdID0geworCXtPVjc2NzBfUjEyX0NPTTcsIE9WNzY3MF9DT003X1JFU0VUfSwKKwl7T1Y3NjcwX1IxMV9DTEtSQywgMHg4MX0sCisJezB4OTIsIDB4MDB9LAkJCS8qIERNX0xOTCAqLworCXsweDkzLCAweDAwfSwJCQkvKiBETV9MTkggKi8KKwl7MHg5ZCwgMHg0Y30sCQkJLyogQkQ1MFNUICovCisJezB4OWUsIDB4M2Z9LAkJCS8qIEJENjBTVCAqLworCXtPVjc2NzBfUjNCX0NPTTExLCAweDAyfSwKKwl7T1Y3NjcwX1IxM19DT004LCAweGY1fSwKKwl7T1Y3NjcwX1IxMF9BRUNILCAweDAwfSwKKwl7T1Y3NjcwX1IwMF9HQUlOLCAweDAwfSwKKwl7T1Y3NjcwX1IwMV9CTFVFLCAweDdjfSwKKwl7T1Y3NjcwX1IwMl9SRUQsIDB4OWR9LAorCXtPVjc2NzBfUjEyX0NPTTcsIDB4MDB9LAorCXtPVjc2NzBfUjA0X0NPTTEsIDAwfSwKKwl7T1Y3NjcwX1IxOF9IU1RPUCwgMHgwMX0sCisJe09WNzY3MF9SMTdfSFNUQVJULCAweDEzfSwKKwl7T1Y3NjcwX1IzMl9IUkVGLCAweDkyfSwKKwl7T1Y3NjcwX1IxOV9WU1RBUlQsIDB4MDJ9LAorCXtPVjc2NzBfUjFBX1ZTVE9QLCAweDdhfSwKKwl7T1Y3NjcwX1IwM19WUkVGLCAweDAwfSwKKwl7T1Y3NjcwX1IwRV9DT001LCAweDA0fSwKKwl7T1Y3NjcwX1IwRl9DT002LCAweDYyfSwKKwl7T1Y3NjcwX1IxNV9DT00xMCwgMHgwMH0sCisJezB4MTYsIDB4MDJ9LAkJCS8qIFJTVkQgKi8KKwl7MHgxYiwgMHgwMH0sCQkJLyogUFNIRlQgKi8KKwl7T1Y3NjcwX1IxRV9NVkZQLCAweDAxfSwKKwl7MHgyOSwgMHgzY30sCQkJLyogUlNWRCAqLworCXsweDMzLCAweDAwfSwJCQkvKiBDSExGICovCisJezB4MzQsIDB4MDd9LAkJCS8qIEFSQkxNICovCisJezB4MzUsIDB4ODR9LAkJCS8qIFJTVkQgKi8KKwl7MHgzNiwgMHgwMH0sCQkJLyogUlNWRCAqLworCXsweDM3LCAweDA0fSwJCQkvKiBBREMgKi8KKwl7MHgzOSwgMHg0M30sCQkJLyogT0ZPTiAqLworCXtPVjc2NzBfUjNBX1RTTEIsIDB4MDB9LAorCXtPVjc2NzBfUjNDX0NPTTEyLCAweDZjfSwKKwl7T1Y3NjcwX1IzRF9DT00xMywgMHg5OH0sCisJe09WNzY3MF9SM0ZfRURHRSwgMHgyM30sCisJe09WNzY3MF9SNDBfQ09NMTUsIDB4YzF9LAorCXtPVjc2NzBfUjQxX0NPTTE2LCAweDIyfSwKKwl7MHg2YiwgMHgwYX0sCQkJLyogREJMViAqLworCXsweGExLCAweDA4fSwJCQkvKiBSU1ZEICovCisJezB4NjksIDB4ODB9LAkJCS8qIEhWICovCisJezB4NDMsIDB4ZjB9LAkJCS8qIFJTVkQuLiAqLworCXsweDQ0LCAweDEwfSwKKwl7MHg0NSwgMHg3OH0sCisJezB4NDYsIDB4YTh9LAorCXsweDQ3LCAweDYwfSwKKwl7MHg0OCwgMHg4MH0sCisJezB4NTksIDB4YmF9LAorCXsweDVhLCAweDlhfSwKKwl7MHg1YiwgMHgyMn0sCisJezB4NWMsIDB4Yjl9LAorCXsweDVkLCAweDlifSwKKwl7MHg1ZSwgMHgxMH0sCisJezB4NWYsIDB4ZTB9LAorCXsweDYwLCAweDg1fSwKKwl7MHg2MSwgMHg2MH0sCisJezB4OWYsIDB4OWR9LAkJCS8qIFJTVkQgKi8KKwl7MHhhMCwgMHhhMH0sCQkJLyogRFNQQzIgKi8KKwl7MHg0ZiwgMHg2MH0sCQkJLyogbWF0cml4ICovCisJezB4NTAsIDB4NjR9LAorCXsweDUxLCAweDA0fSwKKwl7MHg1MiwgMHgxOH0sCisJezB4NTMsIDB4M2N9LAorCXsweDU0LCAweDU0fSwKKwl7MHg1NSwgMHg0MH0sCisJezB4NTYsIDB4NDB9LAorCXsweDU3LCAweDQwfSwKKwl7MHg1OCwgMHgwZH0sCQkJLyogbWF0cml4IHNpZ24gKi8KKwl7MHg4YiwgMHhjY30sCQkJLyogUlNWRCAqLworCXsweDhjLCAweGNjfSwKKwl7MHg4ZCwgMHhjZn0sCisJezB4NmMsIDB4NDB9LAkJCS8qIGdhbW1hIGN1cnZlICovCisJezB4NmQsIDB4ZTB9LAorCXsweDZlLCAweGEwfSwKKwl7MHg2ZiwgMHg4MH0sCisJezB4NzAsIDB4NzB9LAorCXsweDcxLCAweDgwfSwKKwl7MHg3MiwgMHg2MH0sCisJezB4NzMsIDB4NjB9LAorCXsweDc0LCAweDUwfSwKKwl7MHg3NSwgMHg0MH0sCisJezB4NzYsIDB4Mzh9LAorCXsweDc3LCAweDNjfSwKKwl7MHg3OCwgMHgzMn0sCisJezB4NzksIDB4MWF9LAorCXsweDdhLCAweDI4fSwKKwl7MHg3YiwgMHgyNH0sCisJezB4N2MsIDB4MDR9LAkJCS8qIGdhbW1hIGN1cnZlICovCisJezB4N2QsIDB4MTJ9LAorCXsweDdlLCAweDI2fSwKKwl7MHg3ZiwgMHg0Nn0sCisJezB4ODAsIDB4NTR9LAorCXsweDgxLCAweDY0fSwKKwl7MHg4MiwgMHg3MH0sCisJezB4ODMsIDB4N2N9LAorCXsweDg0LCAweDg2fSwKKwl7MHg4NSwgMHg4ZX0sCisJezB4ODYsIDB4OWN9LAorCXsweDg3LCAweGFifSwKKwl7MHg4OCwgMHhjNH0sCisJezB4ODksIDB4ZDF9LAorCXsweDhhLCAweGU1fSwKKwl7T1Y3NjcwX1IxNF9DT005LCAweDFlfSwKKwl7T1Y3NjcwX1IyNF9BRVcsIDB4ODB9LAorCXtPVjc2NzBfUjI1X0FFQiwgMHg3Mn0sCisJe09WNzY3MF9SMjZfVlBULCAweGIzfSwKKwl7MHg2MiwgMHg4MH0sCQkJLyogTENDMSAqLworCXsweDYzLCAweDgwfSwJCQkvKiBMQ0MyICovCisJezB4NjQsIDB4MDZ9LAkJCS8qIExDQzMgKi8KKwl7MHg2NSwgMHgwMH0sCQkJLyogTENDNCAqLworCXsweDY2LCAweDAxfSwJCQkvKiBMQ0M1ICovCisJezB4OTQsIDB4MGV9LAkJCS8qIFJTVkQuLiAqLworCXsweDk1LCAweDE0fSwKKwl7T1Y3NjcwX1IxM19DT004LCBPVjc2NzBfQ09NOF9GQVNUQUVDCisJCQl8IE9WNzY3MF9DT004X0FFQ1NURVAKKwkJCXwgT1Y3NjcwX0NPTThfQkZJTFQKKwkJCXwgMHgxMAorCQkJfCBPVjc2NzBfQ09NOF9BR0MKKwkJCXwgT1Y3NjcwX0NPTThfQVdCCisJCQl8IE9WNzY3MF9DT004X0FFQ30sCisJezB4YTEsIDB4Yzh9Cit9OworCiAvKiA3NjcwLiBEZWZhdWx0cyB0YWtlbiBmcm9tIE9tbmlWaXNpb24gcHJvdmlkZWQgZGF0YSwKICogIGFzIHByb3ZpZGVkIGJ5IEpvbmF0aGFuIENvcmJldCBvZiBPTFBDCQkqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBvdl9pMmNfcmVndmFscyBub3JtXzc2NzBbXSA9IHsKLQl7IE9WNzY3MF9SRUdfQ09NNywgT1Y3NjcwX0NPTTdfUkVTRVQgfSwKLQl7IE9WNzY3MF9SRUdfVFNMQiwgMHgwNCB9LAkJLyogT1YgKi8KLQl7IE9WNzY3MF9SRUdfQ09NNywgT1Y3NjcwX0NPTTdfRk1UX1ZHQSB9LCAvKiBWR0EgKi8KLQl7IE9WNzY3MF9SRUdfQ0xLUkMsIDB4MDEgfSwKKwl7IE9WNzY3MF9SMTJfQ09NNywgT1Y3NjcwX0NPTTdfUkVTRVQgfSwKKwl7IE9WNzY3MF9SM0FfVFNMQiwgMHgwNCB9LAkJLyogT1YgKi8KKwl7IE9WNzY3MF9SMTJfQ09NNywgT1Y3NjcwX0NPTTdfRk1UX1ZHQSB9LCAvKiBWR0EgKi8KKwl7IE9WNzY3MF9SMTFfQ0xLUkMsIDB4MDEgfSwKIC8qCiAgKiBTZXQgdGhlIGhhcmR3YXJlIHdpbmRvdy4gIFRoZXNlIHZhbHVlcyBmcm9tIE9WIGRvbid0IGVudGlyZWx5CiAgKiBtYWtlIHNlbnNlIC0gaHN0b3AgaXMgbGVzcyB0aGFuIGhzdGFydC4gIEJ1dCB0aGV5IHdvcmsuLi4KICAqLwotCXsgT1Y3NjcwX1JFR19IU1RBUlQsIDB4MTMgfSwKLQl7IE9WNzY3MF9SRUdfSFNUT1AsIDB4MDEgfSwKLQl7IE9WNzY3MF9SRUdfSFJFRiwgMHhiNiB9LAotCXsgT1Y3NjcwX1JFR19WU1RBUlQsIDB4MDIgfSwKLQl7IE9WNzY3MF9SRUdfVlNUT1AsIDB4N2EgfSwKLQl7IE9WNzY3MF9SRUdfVlJFRiwgMHgwYSB9LAorCXsgT1Y3NjcwX1IxN19IU1RBUlQsIDB4MTMgfSwKKwl7IE9WNzY3MF9SMThfSFNUT1AsIDB4MDEgfSwKKwl7IE9WNzY3MF9SMzJfSFJFRiwgMHhiNiB9LAorCXsgT1Y3NjcwX1IxOV9WU1RBUlQsIDB4MDIgfSwKKwl7IE9WNzY3MF9SMUFfVlNUT1AsIDB4N2EgfSwKKwl7IE9WNzY3MF9SMDNfVlJFRiwgMHgwYSB9LAogCi0JeyBPVjc2NzBfUkVHX0NPTTMsIDB4MDAgfSwKLQl7IE9WNzY3MF9SRUdfQ09NMTQsIDB4MDAgfSwKKwl7IE9WNzY3MF9SMENfQ09NMywgMHgwMCB9LAorCXsgT1Y3NjcwX1IzRV9DT00xNCwgMHgwMCB9LAogLyogTXlzdGVyeSBzY2FsaW5nIG51bWJlcnMgKi8KIAl7IDB4NzAsIDB4M2EgfSwKIAl7IDB4NzEsIDB4MzUgfSwKIAl7IDB4NzIsIDB4MTEgfSwKIAl7IDB4NzMsIDB4ZjAgfSwKIAl7IDB4YTIsIDB4MDIgfSwKLS8qCXsgT1Y3NjcwX1JFR19DT00xMCwgMHgwIH0sICovCisvKgl7IE9WNzY3MF9SMTVfQ09NMTAsIDB4MCB9LCAqLwogCiAvKiBHYW1tYSBjdXJ2ZSB2YWx1ZXMgKi8KIAl7IDB4N2EsIDB4MjAgfSwKQEAgLTE1ODAsMzcgKzE3NzMsMzcgQEAKIAogLyogQUdDIGFuZCBBRUMgcGFyYW1ldGVycy4gIE5vdGUgd2Ugc3RhcnQgYnkgZGlzYWJsaW5nIHRob3NlIGZlYXR1cmVzLAogICAgdGhlbiB0dXJuIHRoZW0gb25seSBhZnRlciB0d2Vha2luZyB0aGUgdmFsdWVzLiAqLwotCXsgT1Y3NjcwX1JFR19DT004LCBPVjc2NzBfQ09NOF9GQVNUQUVDCisJeyBPVjc2NzBfUjEzX0NPTTgsIE9WNzY3MF9DT004X0ZBU1RBRUMKIAkJCSB8IE9WNzY3MF9DT004X0FFQ1NURVAKIAkJCSB8IE9WNzY3MF9DT004X0JGSUxUIH0sCi0JeyBPVjc2NzBfUkVHX0dBSU4sIDB4MDAgfSwKLQl7IE9WNzY3MF9SRUdfQUVDSCwgMHgwMCB9LAotCXsgT1Y3NjcwX1JFR19DT000LCAweDQwIH0sIC8qIG1hZ2ljIHJlc2VydmVkIGJpdCAqLwotCXsgT1Y3NjcwX1JFR19DT005LCAweDE4IH0sIC8qIDR4IGdhaW4gKyBtYWdpYyByc3ZkIGJpdCAqLwotCXsgT1Y3NjcwX1JFR19CRDUwTUFYLCAweDA1IH0sCi0JeyBPVjc2NzBfUkVHX0JENjBNQVgsIDB4MDcgfSwKLQl7IE9WNzY3MF9SRUdfQUVXLCAweDk1IH0sCi0JeyBPVjc2NzBfUkVHX0FFQiwgMHgzMyB9LAotCXsgT1Y3NjcwX1JFR19WUFQsIDB4ZTMgfSwKLQl7IE9WNzY3MF9SRUdfSEFFQ0MxLCAweDc4IH0sCi0JeyBPVjc2NzBfUkVHX0hBRUNDMiwgMHg2OCB9LAorCXsgT1Y3NjcwX1IwMF9HQUlOLCAweDAwIH0sCisJeyBPVjc2NzBfUjEwX0FFQ0gsIDB4MDAgfSwKKwl7IE9WNzY3MF9SMERfQ09NNCwgMHg0MCB9LCAvKiBtYWdpYyByZXNlcnZlZCBiaXQgKi8KKwl7IE9WNzY3MF9SMTRfQ09NOSwgMHgxOCB9LCAvKiA0eCBnYWluICsgbWFnaWMgcnN2ZCBiaXQgKi8KKwl7IE9WNzY3MF9SQTVfQkQ1ME1BWCwgMHgwNSB9LAorCXsgT1Y3NjcwX1JBQl9CRDYwTUFYLCAweDA3IH0sCisJeyBPVjc2NzBfUjI0X0FFVywgMHg5NSB9LAorCXsgT1Y3NjcwX1IyNV9BRUIsIDB4MzMgfSwKKwl7IE9WNzY3MF9SMjZfVlBULCAweGUzIH0sCisJeyBPVjc2NzBfUjlGX0hBRUNDMSwgMHg3OCB9LAorCXsgT1Y3NjcwX1JBMF9IQUVDQzIsIDB4NjggfSwKIAl7IDB4YTEsIDB4MDMgfSwgLyogbWFnaWMgKi8KLQl7IE9WNzY3MF9SRUdfSEFFQ0MzLCAweGQ4IH0sCi0JeyBPVjc2NzBfUkVHX0hBRUNDNCwgMHhkOCB9LAotCXsgT1Y3NjcwX1JFR19IQUVDQzUsIDB4ZjAgfSwKLQl7IE9WNzY3MF9SRUdfSEFFQ0M2LCAweDkwIH0sCi0JeyBPVjc2NzBfUkVHX0hBRUNDNywgMHg5NCB9LAotCXsgT1Y3NjcwX1JFR19DT004LCBPVjc2NzBfQ09NOF9GQVNUQUVDCisJeyBPVjc2NzBfUkE2X0hBRUNDMywgMHhkOCB9LAorCXsgT1Y3NjcwX1JBN19IQUVDQzQsIDB4ZDggfSwKKwl7IE9WNzY3MF9SQThfSEFFQ0M1LCAweGYwIH0sCisJeyBPVjc2NzBfUkE5X0hBRUNDNiwgMHg5MCB9LAorCXsgT1Y3NjcwX1JBQV9IQUVDQzcsIDB4OTQgfSwKKwl7IE9WNzY3MF9SMTNfQ09NOCwgT1Y3NjcwX0NPTThfRkFTVEFFQwogCQkJfCBPVjc2NzBfQ09NOF9BRUNTVEVQCiAJCQl8IE9WNzY3MF9DT004X0JGSUxUCiAJCQl8IE9WNzY3MF9DT004X0FHQwogCQkJfCBPVjc2NzBfQ09NOF9BRUMgfSwKIAogLyogQWxtb3N0IGFsbCBvZiB0aGVzZSBhcmUgbWFnaWMgInJlc2VydmVkIiB2YWx1ZXMuICAqLwotCXsgT1Y3NjcwX1JFR19DT001LCAweDYxIH0sCi0JeyBPVjc2NzBfUkVHX0NPTTYsIDB4NGIgfSwKKwl7IE9WNzY3MF9SMEVfQ09NNSwgMHg2MSB9LAorCXsgT1Y3NjcwX1IwRl9DT002LCAweDRiIH0sCiAJeyAweDE2LCAweDAyIH0sCi0JeyBPVjc2NzBfUkVHX01WRlAsIDB4MDcgfSwKKwl7IE9WNzY3MF9SMUVfTVZGUCwgMHgwNyB9LAogCXsgMHgyMSwgMHgwMiB9LAogCXsgMHgyMiwgMHg5MSB9LAogCXsgMHgyOSwgMHgwNyB9LApAQCAtMTYxOSwxMCArMTgxMiwxMCBAQAogCXsgMHgzNywgMHgxZCB9LAogCXsgMHgzOCwgMHg3MSB9LAogCXsgMHgzOSwgMHgyYSB9LAotCXsgT1Y3NjcwX1JFR19DT00xMiwgMHg3OCB9LAorCXsgT1Y3NjcwX1IzQ19DT00xMiwgMHg3OCB9LAogCXsgMHg0ZCwgMHg0MCB9LAogCXsgMHg0ZSwgMHgyMCB9LAotCXsgT1Y3NjcwX1JFR19HRklYLCAweDAwIH0sCisJeyBPVjc2NzBfUjY5X0dGSVgsIDB4MDAgfSwKIAl7IDB4NmIsIDB4NGEgfSwKIAl7IDB4NzQsIDB4MTAgfSwKIAl7IDB4OGQsIDB4NGYgfSwKQEAgLTE2NTcsOSArMTg1MCw5IEBACiAJeyAweDZmLCAweDlmIH0sCiAJCQkJCS8qICI5ZSBmb3IgYWR2YW5jZSBBV0IiICovCiAJeyAweDZhLCAweDQwIH0sCi0JeyBPVjc2NzBfUkVHX0JMVUUsIDB4NDAgfSwKLQl7IE9WNzY3MF9SRUdfUkVELCAweDYwIH0sCi0JeyBPVjc2NzBfUkVHX0NPTTgsIE9WNzY3MF9DT004X0ZBU1RBRUMKKwl7IE9WNzY3MF9SMDFfQkxVRSwgMHg0MCB9LAorCXsgT1Y3NjcwX1IwMl9SRUQsIDB4NjAgfSwKKwl7IE9WNzY3MF9SMTNfQ09NOCwgT1Y3NjcwX0NPTThfRkFTVEFFQwogCQkJfCBPVjc2NzBfQ09NOF9BRUNTVEVQCiAJCQl8IE9WNzY3MF9DT004X0JGSUxUCiAJCQl8IE9WNzY3MF9DT004X0FHQwpAQCAtMTY3NSwyMiArMTg2OCwyMiBAQAogCXsgMHg1NCwgMHg4MCB9LAogCXsgMHg1OCwgMHg5ZSB9LAogCi0JeyBPVjc2NzBfUkVHX0NPTTE2LCBPVjc2NzBfQ09NMTZfQVdCR0FJTiB9LAotCXsgT1Y3NjcwX1JFR19FREdFLCAweDAwIH0sCisJeyBPVjc2NzBfUjQxX0NPTTE2LCBPVjc2NzBfQ09NMTZfQVdCR0FJTiB9LAorCXsgT1Y3NjcwX1IzRl9FREdFLCAweDAwIH0sCiAJeyAweDc1LCAweDA1IH0sCiAJeyAweDc2LCAweGUxIH0sCiAJeyAweDRjLCAweDAwIH0sCiAJeyAweDc3LCAweDAxIH0sCi0JeyBPVjc2NzBfUkVHX0NPTTEzLCBPVjc2NzBfQ09NMTNfR0FNTUEKKwl7IE9WNzY3MF9SM0RfQ09NMTMsIE9WNzY3MF9DT00xM19HQU1NQQogCQkJICB8IE9WNzY3MF9DT00xM19VVlNBVAogCQkJICB8IDJ9LAkJLyogd2FzIDMgKi8KIAl7IDB4NGIsIDB4MDkgfSwKIAl7IDB4YzksIDB4NjAgfSwKLQl7IE9WNzY3MF9SRUdfQ09NMTYsIDB4MzggfSwKKwl7IE9WNzY3MF9SNDFfQ09NMTYsIDB4MzggfSwKIAl7IDB4NTYsIDB4NDAgfSwKIAogCXsgMHgzNCwgMHgxMSB9LAotCXsgT1Y3NjcwX1JFR19DT00xMSwgT1Y3NjcwX0NPTTExX0VYUHxPVjc2NzBfQ09NMTFfSFpBVVRPIH0sCisJeyBPVjc2NzBfUjNCX0NPTTExLCBPVjc2NzBfQ09NMTFfRVhQfE9WNzY3MF9DT00xMV9IWkFVVE8gfSwKIAl7IDB4YTQsIDB4ODggfSwKIAl7IDB4OTYsIDB4MDAgfSwKIAl7IDB4OTcsIDB4MzAgfSwKQEAgLTE4MjUsMTAgKzIwMTgsMTMgQEAKIH0KIAogLyogV3JpdGUgYSBPVjUxOSByZWdpc3RlciAqLwotc3RhdGljIGludCByZWdfdyhzdHJ1Y3Qgc2QgKnNkLCBfX3UxNiBpbmRleCwgX191MTYgdmFsdWUpCitzdGF0aWMgdm9pZCByZWdfdyhzdHJ1Y3Qgc2QgKnNkLCB1MTYgaW5kZXgsIHUxNiB2YWx1ZSkKIHsKIAlpbnQgcmV0LCByZXEgPSAwOwogCisJaWYgKHNkLT5nc3BjYV9kZXYudXNiX2VyciA8IDApCisJCXJldHVybjsKKwogCXN3aXRjaCAoc2QtPmJyaWRnZSkgewogCWNhc2UgQlJJREdFX09WNTExOgogCWNhc2UgQlJJREdFX09WNTExUExVUzoKQEAgLTE4MzgsNiArMjAzNCw4IEBACiAJCXJlcSA9IDB4MGE7CiAJCS8qIGZhbGwgdGhyb3VnaCAqLwogCWNhc2UgQlJJREdFX1c5OTY4Q0Y6CisJCVBERUJVRyhEX1VTQk8sICJTRVQgJTAyeCAlMDR4ICUwNHgiLAorCQkJCXJlcSwgdmFsdWUsIGluZGV4KTsKIAkJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHNkLT5nc3BjYV9kZXYuZGV2LAogCQkJdXNiX3NuZGN0cmxwaXBlKHNkLT5nc3BjYV9kZXYuZGV2LCAwKSwKIAkJCXJlcSwKQEAgLTE4NDgsNiArMjA0Niw4IEBACiAJCXJlcSA9IDE7CiAJfQogCisJUERFQlVHKERfVVNCTywgIlNFVCAlMDJ4IDAwMDAgJTA0eCAlMDJ4IiwKKwkJCXJlcSwgaW5kZXgsIHZhbHVlKTsKIAlzZC0+Z3NwY2FfZGV2LnVzYl9idWZbMF0gPSB2YWx1ZTsKIAlyZXQgPSB1c2JfY29udHJvbF9tc2coc2QtPmdzcGNhX2Rldi5kZXYsCiAJCQl1c2Jfc25kY3RybHBpcGUoc2QtPmdzcGNhX2Rldi5kZXYsIDApLApAQCAtMTg1NywyMiArMjA1NywyMiBAQAogCQkJc2QtPmdzcGNhX2Rldi51c2JfYnVmLCAxLCA1MDApOwogbGVhdmU6CiAJaWYgKHJldCA8IDApIHsKLQkJZXJyKCJXcml0ZSByZWcgMHglMDR4IC0+IFsweCUwMnhdIGZhaWxlZCIsCi0JCSAgICAgICB2YWx1ZSwgaW5kZXgpOwotCQlyZXR1cm4gcmV0OworCQllcnIoInJlZ193ICUwMnggZmFpbGVkICVkIiwgaW5kZXgsIHJldCk7CisJCXNkLT5nc3BjYV9kZXYudXNiX2VyciA9IHJldDsKKwkJcmV0dXJuOwogCX0KLQotCVBERUJVRyhEX1VTQk8sICJXcml0ZSByZWcgMHglMDR4IC0+IFsweCUwMnhdIiwgdmFsdWUsIGluZGV4KTsKLQlyZXR1cm4gMDsKIH0KIAogLyogUmVhZCBmcm9tIGEgT1Y1MTkgcmVnaXN0ZXIsIG5vdGUgbm90IHZhbGlkIGZvciB0aGUgdzk5NjhjZiEhICovCiAvKiByZXR1cm5zOiBuZWdhdGl2ZSBpcyBlcnJvciwgcG9zIG9yIHplcm8gaXMgZGF0YSAqLwotc3RhdGljIGludCByZWdfcihzdHJ1Y3Qgc2QgKnNkLCBfX3UxNiBpbmRleCkKK3N0YXRpYyBpbnQgcmVnX3Ioc3RydWN0IHNkICpzZCwgdTE2IGluZGV4KQogewogCWludCByZXQ7CiAJaW50IHJlcTsKIAorCWlmIChzZC0+Z3NwY2FfZGV2LnVzYl9lcnIgPCAwKQorCQlyZXR1cm4gLTE7CisKIAlzd2l0Y2ggKHNkLT5icmlkZ2UpIHsKIAljYXNlIEJSSURHRV9PVjUxMToKIAljYXNlIEJSSURHRV9PVjUxMVBMVVM6CkBAIC0xODkzLDI5ICsyMDkzLDM3IEBACiAKIAlpZiAocmV0ID49IDApIHsKIAkJcmV0ID0gc2QtPmdzcGNhX2Rldi51c2JfYnVmWzBdOwotCQlQREVCVUcoRF9VU0JJLCAiUmVhZCByZWcgWzB4JTAyWF0gLT4gMHglMDRYIiwgaW5kZXgsIHJldCk7Ci0JfSBlbHNlCi0JCWVycigiUmVhZCByZWcgWzB4JTAyeF0gZmFpbGVkIiwgaW5kZXgpOworCQlQREVCVUcoRF9VU0JJLCAiR0VUICUwMnggMDAwMCAlMDR4ICUwMngiLAorCQkJcmVxLCBpbmRleCwgcmV0KTsKKwl9IGVsc2UgeworCQllcnIoInJlZ19yICUwMnggZmFpbGVkICVkIiwgaW5kZXgsIHJldCk7CisJCXNkLT5nc3BjYV9kZXYudXNiX2VyciA9IHJldDsKKwl9CiAKIAlyZXR1cm4gcmV0OwogfQogCiAvKiBSZWFkIDggdmFsdWVzIGZyb20gYSBPVjUxOSByZWdpc3RlciAqLwogc3RhdGljIGludCByZWdfcjgoc3RydWN0IHNkICpzZCwKLQkJICBfX3UxNiBpbmRleCkKKwkJICB1MTYgaW5kZXgpCiB7CiAJaW50IHJldDsKIAorCWlmIChzZC0+Z3NwY2FfZGV2LnVzYl9lcnIgPCAwKQorCQlyZXR1cm4gLTE7CisKIAlyZXQgPSB1c2JfY29udHJvbF9tc2coc2QtPmdzcGNhX2Rldi5kZXYsCiAJCQl1c2JfcmN2Y3RybHBpcGUoc2QtPmdzcGNhX2Rldi5kZXYsIDApLAogCQkJMSwJCQkvKiBSRVFfSU8gKi8KIAkJCVVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAogCQkJMCwgaW5kZXgsIHNkLT5nc3BjYV9kZXYudXNiX2J1ZiwgOCwgNTAwKTsKIAotCWlmIChyZXQgPj0gMCkKKwlpZiAocmV0ID49IDApIHsKIAkJcmV0ID0gc2QtPmdzcGNhX2Rldi51c2JfYnVmWzBdOwotCWVsc2UKLQkJZXJyKCJSZWFkIHJlZyA4IFsweCUwMnhdIGZhaWxlZCIsIGluZGV4KTsKKwl9IGVsc2UgeworCQllcnIoInJlZ19yOCAlMDJ4IGZhaWxlZCAlZCIsIGluZGV4LCByZXQpOworCQlzZC0+Z3NwY2FfZGV2LnVzYl9lcnIgPSByZXQ7CisJfQogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTE5MjYsMzQgKzIxMzQsMzcgQEAKICAqIHRoYXQgYXJlIGluIHRoZSBzYW1lIHBvc2l0aW9uIGFzIDAncyBpbiAibWFzayIgYXJlIHByZXNlcnZlZCwgcmVnYXJkbGVzcwogICogb2YgdGhlaXIgcmVzcGVjdGl2ZSBzdGF0ZSBpbiAidmFsdWUiLgogICovCi1zdGF0aWMgaW50IHJlZ193X21hc2soc3RydWN0IHNkICpzZCwKLQkJCV9fdTE2IGluZGV4LAotCQkJX191OCB2YWx1ZSwKLQkJCV9fdTggbWFzaykKK3N0YXRpYyB2b2lkIHJlZ193X21hc2soc3RydWN0IHNkICpzZCwKKwkJCXUxNiBpbmRleCwKKwkJCXU4IHZhbHVlLAorCQkJdTggbWFzaykKIHsKIAlpbnQgcmV0OwotCV9fdTggb2xkdmFsOworCXU4IG9sZHZhbDsKIAogCWlmIChtYXNrICE9IDB4ZmYpIHsKIAkJdmFsdWUgJj0gbWFzazsJCQkvKiBFbmZvcmNlIG1hc2sgb24gdmFsdWUgKi8KIAkJcmV0ID0gcmVnX3Ioc2QsIGluZGV4KTsKIAkJaWYgKHJldCA8IDApCi0JCQlyZXR1cm4gcmV0OworCQkJcmV0dXJuOwogCiAJCW9sZHZhbCA9IHJldCAmIH5tYXNrOwkJLyogQ2xlYXIgdGhlIG1hc2tlZCBiaXRzICovCiAJCXZhbHVlIHw9IG9sZHZhbDsJCS8qIFNldCB0aGUgZGVzaXJlZCBiaXRzICovCiAJfQotCXJldHVybiByZWdfdyhzZCwgaW5kZXgsIHZhbHVlKTsKKwlyZWdfdyhzZCwgaW5kZXgsIHZhbHVlKTsKIH0KIAogLyoKICAqIFdyaXRlcyBtdWx0aXBsZSAobikgYnl0ZSB2YWx1ZSB0byBhIHNpbmdsZSByZWdpc3Rlci4gT25seSB2YWxpZCB3aXRoIGNlcnRhaW4KICAqIHJlZ2lzdGVycyAoMHgzMCBhbmQgMHhjNCAtIDB4Y2UpLgogICovCi1zdGF0aWMgaW50IG92NTE4X3JlZ193MzIoc3RydWN0IHNkICpzZCwgX191MTYgaW5kZXgsIHUzMiB2YWx1ZSwgaW50IG4pCitzdGF0aWMgdm9pZCBvdjUxOF9yZWdfdzMyKHN0cnVjdCBzZCAqc2QsIHUxNiBpbmRleCwgdTMyIHZhbHVlLCBpbnQgbikKIHsKIAlpbnQgcmV0OwogCisJaWYgKHNkLT5nc3BjYV9kZXYudXNiX2VyciA8IDApCisJCXJldHVybjsKKwogCSooKF9fbGUzMiAqKSBzZC0+Z3NwY2FfZGV2LnVzYl9idWYpID0gX19jcHVfdG9fbGUzMih2YWx1ZSk7CiAKIAlyZXQgPSB1c2JfY29udHJvbF9tc2coc2QtPmdzcGNhX2Rldi5kZXYsCkBAIC0xOTYzLDY5ICsyMTc0LDU1IEBACiAJCQkwLCBpbmRleCwKIAkJCXNkLT5nc3BjYV9kZXYudXNiX2J1ZiwgbiwgNTAwKTsKIAlpZiAocmV0IDwgMCkgewotCQllcnIoIldyaXRlIHJlZzMyIFslMDJ4XSAlMDh4IGZhaWxlZCIsIGluZGV4LCB2YWx1ZSk7Ci0JCXJldHVybiByZXQ7CisJCWVycigicmVnX3czMiAlMDJ4IGZhaWxlZCAlZCIsIGluZGV4LCByZXQpOworCQlzZC0+Z3NwY2FfZGV2LnVzYl9lcnIgPSByZXQ7CiAJfQotCi0JcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgb3Y1MTFfaTJjX3coc3RydWN0IHNkICpzZCwgX191OCByZWcsIF9fdTggdmFsdWUpCitzdGF0aWMgdm9pZCBvdjUxMV9pMmNfdyhzdHJ1Y3Qgc2QgKnNkLCB1OCByZWcsIHU4IHZhbHVlKQogewogCWludCByYywgcmV0cmllczsKIAotCVBERUJVRyhEX1VTQk8sICJpMmMgMHglMDJ4IC0+IFsweCUwMnhdIiwgdmFsdWUsIHJlZyk7CisJUERFQlVHKERfVVNCTywgIm92NTExX2kyY193ICUwMnggJTAyeCIsIHJlZywgdmFsdWUpOwogCiAJLyogVGhyZWUgYnl0ZSB3cml0ZSBjeWNsZSAqLwogCWZvciAocmV0cmllcyA9IDY7IDsgKSB7CiAJCS8qIFNlbGVjdCBjYW1lcmEgcmVnaXN0ZXIgKi8KLQkJcmMgPSByZWdfdyhzZCwgUjUxeF9JMkNfU0FERFJfMywgcmVnKTsKLQkJaWYgKHJjIDwgMCkKLQkJCXJldHVybiByYzsKKwkJcmVnX3coc2QsIFI1MXhfSTJDX1NBRERSXzMsIHJlZyk7CiAKIAkJLyogV3JpdGUgInZhbHVlIiB0byBJMkMgZGF0YSBwb3J0IG9mIE9WNTExICovCi0JCXJjID0gcmVnX3coc2QsIFI1MXhfSTJDX0RBVEEsIHZhbHVlKTsKLQkJaWYgKHJjIDwgMCkKLQkJCXJldHVybiByYzsKKwkJcmVnX3coc2QsIFI1MXhfSTJDX0RBVEEsIHZhbHVlKTsKIAogCQkvKiBJbml0aWF0ZSAzLWJ5dGUgd3JpdGUgY3ljbGUgKi8KLQkJcmMgPSByZWdfdyhzZCwgUjUxMV9JMkNfQ1RMLCAweDAxKTsKLQkJaWYgKHJjIDwgMCkKLQkJCXJldHVybiByYzsKKwkJcmVnX3coc2QsIFI1MTFfSTJDX0NUTCwgMHgwMSk7CiAKIAkJZG8gewogCQkJcmMgPSByZWdfcihzZCwgUjUxMV9JMkNfQ1RMKTsKIAkJfSB3aGlsZSAocmMgPiAwICYmICgocmMgJiAxKSA9PSAwKSk7IC8qIFJldHJ5IHVudGlsIGlkbGUgKi8KIAogCQlpZiAocmMgPCAwKQotCQkJcmV0dXJuIHJjOworCQkJcmV0dXJuOwogCiAJCWlmICgocmMgJiAyKSA9PSAwKSAvKiBBY2s/ICovCiAJCQlicmVhazsKIAkJaWYgKC0tcmV0cmllcyA8IDApIHsKIAkJCVBERUJVRyhEX1VTQk8sICJpMmMgd3JpdGUgcmV0cmllcyBleGhhdXN0ZWQiKTsKLQkJCXJldHVybiAtMTsKKwkJCXJldHVybjsKIAkJfQogCX0KLQotCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG92NTExX2kyY19yKHN0cnVjdCBzZCAqc2QsIF9fdTggcmVnKQorc3RhdGljIGludCBvdjUxMV9pMmNfcihzdHJ1Y3Qgc2QgKnNkLCB1OCByZWcpCiB7CiAJaW50IHJjLCB2YWx1ZSwgcmV0cmllczsKIAogCS8qIFR3byBieXRlIHdyaXRlIGN5Y2xlICovCiAJZm9yIChyZXRyaWVzID0gNjsgOyApIHsKIAkJLyogU2VsZWN0IGNhbWVyYSByZWdpc3RlciAqLwotCQlyYyA9IHJlZ193KHNkLCBSNTF4X0kyQ19TQUREUl8yLCByZWcpOwotCQlpZiAocmMgPCAwKQotCQkJcmV0dXJuIHJjOworCQlyZWdfdyhzZCwgUjUxeF9JMkNfU0FERFJfMiwgcmVnKTsKIAogCQkvKiBJbml0aWF0ZSAyLWJ5dGUgd3JpdGUgY3ljbGUgKi8KLQkJcmMgPSByZWdfdyhzZCwgUjUxMV9JMkNfQ1RMLCAweDAzKTsKLQkJaWYgKHJjIDwgMCkKLQkJCXJldHVybiByYzsKKwkJcmVnX3coc2QsIFI1MTFfSTJDX0NUTCwgMHgwMyk7CiAKIAkJZG8gewogCQkJcmMgPSByZWdfcihzZCwgUjUxMV9JMkNfQ1RMKTsKQEAgLTIwNDksOSArMjI0Niw3IEBACiAJLyogVHdvIGJ5dGUgcmVhZCBjeWNsZSAqLwogCWZvciAocmV0cmllcyA9IDY7IDsgKSB7CiAJCS8qIEluaXRpYXRlIDItYnl0ZSByZWFkIGN5Y2xlICovCi0JCXJjID0gcmVnX3coc2QsIFI1MTFfSTJDX0NUTCwgMHgwNSk7Ci0JCWlmIChyYyA8IDApCi0JCQlyZXR1cm4gcmM7CisJCXJlZ193KHNkLCBSNTExX0kyQ19DVEwsIDB4MDUpOwogCiAJCWRvIHsKIAkJCXJjID0gcmVnX3Ioc2QsIFI1MTFfSTJDX0NUTCk7CkBAIC0yMDY0LDkgKzIyNTksNyBAQAogCQkJYnJlYWs7CiAKIAkJLyogSTJDIGFib3J0ICovCi0JCXJjID0gcmVnX3coc2QsIFI1MTFfSTJDX0NUTCwgMHgxMCk7Ci0JCWlmIChyYyA8IDApCi0JCQlyZXR1cm4gcmM7CisJCXJlZ193KHNkLCBSNTExX0kyQ19DVEwsIDB4MTApOwogCiAJCWlmICgtLXJldHJpZXMgPCAwKSB7CiAJCQlQREVCVUcoRF9VU0JJLCAiaTJjIHJlYWQgcmV0cmllcyBleGhhdXN0ZWQiKTsKQEAgLTIwNzYsMTIgKzIyNjksMTAgQEAKIAogCXZhbHVlID0gcmVnX3Ioc2QsIFI1MXhfSTJDX0RBVEEpOwogCi0JUERFQlVHKERfVVNCSSwgImkyYyBbMHglMDJYXSAtPiAweCUwMlgiLCByZWcsIHZhbHVlKTsKKwlQREVCVUcoRF9VU0JJLCAib3Y1MTFfaTJjX3IgJTAyeCAlMDJ4IiwgcmVnLCB2YWx1ZSk7CiAKIAkvKiBUaGlzIGlzIG5lZWRlZCB0byBtYWtlIGkyY193KCkgd29yayAqLwotCXJjID0gcmVnX3coc2QsIFI1MTFfSTJDX0NUTCwgMHgwNSk7Ci0JaWYgKHJjIDwgMCkKLQkJcmV0dXJuIHJjOworCXJlZ193KHNkLCBSNTExX0kyQ19DVEwsIDB4MDUpOwogCiAJcmV0dXJuIHZhbHVlOwogfQpAQCAtMjA5MSwzMiArMjI4MiwyNCBAQAogICogVGhpcyBpcyBub3JtYWxseSBvbmx5IGNhbGxlZCBmcm9tIGkyY193KCkuIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uCiAgKiBhbHdheXMgc3VjY2VlZHMgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBzZW5zb3IgaXMgcHJlc2VudCBhbmQgd29ya2luZy4KICAqLwotc3RhdGljIGludCBvdjUxOF9pMmNfdyhzdHJ1Y3Qgc2QgKnNkLAotCQlfX3U4IHJlZywKLQkJX191OCB2YWx1ZSkKK3N0YXRpYyB2b2lkIG92NTE4X2kyY193KHN0cnVjdCBzZCAqc2QsCisJCXU4IHJlZywKKwkJdTggdmFsdWUpCiB7Ci0JaW50IHJjOwotCi0JUERFQlVHKERfVVNCTywgImkyYyAweCUwMnggLT4gWzB4JTAyeF0iLCB2YWx1ZSwgcmVnKTsKKwlQREVCVUcoRF9VU0JPLCAib3Y1MThfaTJjX3cgJTAyeCAlMDJ4IiwgcmVnLCB2YWx1ZSk7CiAKIAkvKiBTZWxlY3QgY2FtZXJhIHJlZ2lzdGVyICovCi0JcmMgPSByZWdfdyhzZCwgUjUxeF9JMkNfU0FERFJfMywgcmVnKTsKLQlpZiAocmMgPCAwKQotCQlyZXR1cm4gcmM7CisJcmVnX3coc2QsIFI1MXhfSTJDX1NBRERSXzMsIHJlZyk7CiAKIAkvKiBXcml0ZSAidmFsdWUiIHRvIEkyQyBkYXRhIHBvcnQgb2YgT1Y1MTEgKi8KLQlyYyA9IHJlZ193KHNkLCBSNTF4X0kyQ19EQVRBLCB2YWx1ZSk7Ci0JaWYgKHJjIDwgMCkKLQkJcmV0dXJuIHJjOworCXJlZ193KHNkLCBSNTF4X0kyQ19EQVRBLCB2YWx1ZSk7CiAKIAkvKiBJbml0aWF0ZSAzLWJ5dGUgd3JpdGUgY3ljbGUgKi8KLQlyYyA9IHJlZ193KHNkLCBSNTE4X0kyQ19DVEwsIDB4MDEpOwotCWlmIChyYyA8IDApCi0JCXJldHVybiByYzsKKwlyZWdfdyhzZCwgUjUxOF9JMkNfQ1RMLCAweDAxKTsKIAogCS8qIHdhaXQgZm9yIHdyaXRlIGNvbXBsZXRlICovCiAJbXNsZWVwKDQpOwotCXJldHVybiByZWdfcjgoc2QsIFI1MThfSTJDX0NUTCk7CisJcmVnX3I4KHNkLCBSNTE4X0kyQ19DVEwpOwogfQogCiAvKgpAQCAtMjEyNiwxMDUgKzIzMDksMTAyIEBACiAgKiBUaGlzIGlzIG5vcm1hbGx5IG9ubHkgY2FsbGVkIGZyb20gaTJjX3IoKS4gTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24KICAqIGFsd2F5cyBzdWNjZWVkcyByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIHNlbnNvciBpcyBwcmVzZW50IGFuZCB3b3JraW5nLgogICovCi1zdGF0aWMgaW50IG92NTE4X2kyY19yKHN0cnVjdCBzZCAqc2QsIF9fdTggcmVnKQorc3RhdGljIGludCBvdjUxOF9pMmNfcihzdHJ1Y3Qgc2QgKnNkLCB1OCByZWcpCiB7Ci0JaW50IHJjLCB2YWx1ZTsKKwlpbnQgdmFsdWU7CiAKIAkvKiBTZWxlY3QgY2FtZXJhIHJlZ2lzdGVyICovCi0JcmMgPSByZWdfdyhzZCwgUjUxeF9JMkNfU0FERFJfMiwgcmVnKTsKLQlpZiAocmMgPCAwKQotCQlyZXR1cm4gcmM7CisJcmVnX3coc2QsIFI1MXhfSTJDX1NBRERSXzIsIHJlZyk7CiAKIAkvKiBJbml0aWF0ZSAyLWJ5dGUgd3JpdGUgY3ljbGUgKi8KLQlyYyA9IHJlZ193KHNkLCBSNTE4X0kyQ19DVEwsIDB4MDMpOwotCWlmIChyYyA8IDApCi0JCXJldHVybiByYzsKKwlyZWdfdyhzZCwgUjUxOF9JMkNfQ1RMLCAweDAzKTsKIAogCS8qIEluaXRpYXRlIDItYnl0ZSByZWFkIGN5Y2xlICovCi0JcmMgPSByZWdfdyhzZCwgUjUxOF9JMkNfQ1RMLCAweDA1KTsKLQlpZiAocmMgPCAwKQotCQlyZXR1cm4gcmM7CisJcmVnX3coc2QsIFI1MThfSTJDX0NUTCwgMHgwNSk7CiAJdmFsdWUgPSByZWdfcihzZCwgUjUxeF9JMkNfREFUQSk7Ci0JUERFQlVHKERfVVNCSSwgImkyYyBbMHglMDJYXSAtPiAweCUwMlgiLCByZWcsIHZhbHVlKTsKKwlQREVCVUcoRF9VU0JJLCAib3Y1MThfaTJjX3IgJTAyeCAlMDJ4IiwgcmVnLCB2YWx1ZSk7CiAJcmV0dXJuIHZhbHVlOwogfQogCi1zdGF0aWMgaW50IG92ZngyX2kyY193KHN0cnVjdCBzZCAqc2QsIF9fdTggcmVnLCBfX3U4IHZhbHVlKQorc3RhdGljIHZvaWQgb3ZmeDJfaTJjX3coc3RydWN0IHNkICpzZCwgdTggcmVnLCB1OCB2YWx1ZSkKIHsKIAlpbnQgcmV0OwogCisJaWYgKHNkLT5nc3BjYV9kZXYudXNiX2VyciA8IDApCisJCXJldHVybjsKKwogCXJldCA9IHVzYl9jb250cm9sX21zZyhzZC0+Z3NwY2FfZGV2LmRldiwKIAkJCXVzYl9zbmRjdHJscGlwZShzZC0+Z3NwY2FfZGV2LmRldiwgMCksCiAJCQkweDAyLAogCQkJVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAotCQkJKF9fdTE2KXZhbHVlLCAoX191MTYpcmVnLCBOVUxMLCAwLCA1MDApOworCQkJKHUxNikgdmFsdWUsICh1MTYpIHJlZywgTlVMTCwgMCwgNTAwKTsKIAogCWlmIChyZXQgPCAwKSB7Ci0JCWVycigiaTJjIDB4JTAyeCAtPiBbMHglMDJ4XSBmYWlsZWQiLCB2YWx1ZSwgcmVnKTsKLQkJcmV0dXJuIHJldDsKKwkJZXJyKCJvdmZ4Ml9pMmNfdyAlMDJ4IGZhaWxlZCAlZCIsIHJlZywgcmV0KTsKKwkJc2QtPmdzcGNhX2Rldi51c2JfZXJyID0gcmV0OwogCX0KIAotCVBERUJVRyhEX1VTQk8sICJpMmMgMHglMDJ4IC0+IFsweCUwMnhdIiwgdmFsdWUsIHJlZyk7Ci0JcmV0dXJuIDA7CisJUERFQlVHKERfVVNCTywgIm92ZngyX2kyY193ICUwMnggJTAyeCIsIHJlZywgdmFsdWUpOwogfQogCi1zdGF0aWMgaW50IG92ZngyX2kyY19yKHN0cnVjdCBzZCAqc2QsIF9fdTggcmVnKQorc3RhdGljIGludCBvdmZ4Ml9pMmNfcihzdHJ1Y3Qgc2QgKnNkLCB1OCByZWcpCiB7CiAJaW50IHJldDsKIAorCWlmIChzZC0+Z3NwY2FfZGV2LnVzYl9lcnIgPCAwKQorCQlyZXR1cm4gLTE7CisKIAlyZXQgPSB1c2JfY29udHJvbF9tc2coc2QtPmdzcGNhX2Rldi5kZXYsCiAJCQl1c2JfcmN2Y3RybHBpcGUoc2QtPmdzcGNhX2Rldi5kZXYsIDApLAogCQkJMHgwMywKIAkJCVVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAotCQkJMCwgKF9fdTE2KXJlZywgc2QtPmdzcGNhX2Rldi51c2JfYnVmLCAxLCA1MDApOworCQkJMCwgKHUxNikgcmVnLCBzZC0+Z3NwY2FfZGV2LnVzYl9idWYsIDEsIDUwMCk7CiAKIAlpZiAocmV0ID49IDApIHsKIAkJcmV0ID0gc2QtPmdzcGNhX2Rldi51c2JfYnVmWzBdOwotCQlQREVCVUcoRF9VU0JJLCAiaTJjIFsweCUwMlhdIC0+IDB4JTAyWCIsIHJlZywgcmV0KTsKLQl9IGVsc2UKLQkJZXJyKCJpMmMgcmVhZCBbMHglMDJ4XSBmYWlsZWQiLCByZWcpOworCQlQREVCVUcoRF9VU0JJLCAib3ZmeDJfaTJjX3IgJTAyeCAlMDJ4IiwgcmVnLCByZXQpOworCX0gZWxzZSB7CisJCWVycigib3ZmeDJfaTJjX3IgJTAyeCBmYWlsZWQgJWQiLCByZWcsIHJldCk7CisJCXNkLT5nc3BjYV9kZXYudXNiX2VyciA9IHJldDsKKwl9CiAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGkyY193KHN0cnVjdCBzZCAqc2QsIF9fdTggcmVnLCBfX3U4IHZhbHVlKQorc3RhdGljIHZvaWQgaTJjX3coc3RydWN0IHNkICpzZCwgdTggcmVnLCB1OCB2YWx1ZSkKIHsKLQlpbnQgcmV0ID0gLTE7Ci0KIAlpZiAoc2QtPnNlbnNvcl9yZWdfY2FjaGVbcmVnXSA9PSB2YWx1ZSkKLQkJcmV0dXJuIDA7CisJCXJldHVybjsKIAogCXN3aXRjaCAoc2QtPmJyaWRnZSkgewogCWNhc2UgQlJJREdFX09WNTExOgogCWNhc2UgQlJJREdFX09WNTExUExVUzoKLQkJcmV0ID0gb3Y1MTFfaTJjX3coc2QsIHJlZywgdmFsdWUpOworCQlvdjUxMV9pMmNfdyhzZCwgcmVnLCB2YWx1ZSk7CiAJCWJyZWFrOwogCWNhc2UgQlJJREdFX09WNTE4OgogCWNhc2UgQlJJREdFX09WNTE4UExVUzoKIAljYXNlIEJSSURHRV9PVjUxOToKLQkJcmV0ID0gb3Y1MThfaTJjX3coc2QsIHJlZywgdmFsdWUpOworCQlvdjUxOF9pMmNfdyhzZCwgcmVnLCB2YWx1ZSk7CiAJCWJyZWFrOwogCWNhc2UgQlJJREdFX09WRlgyOgotCQlyZXQgPSBvdmZ4Ml9pMmNfdyhzZCwgcmVnLCB2YWx1ZSk7CisJCW92ZngyX2kyY193KHNkLCByZWcsIHZhbHVlKTsKIAkJYnJlYWs7CiAJY2FzZSBCUklER0VfVzk5NjhDRjoKLQkJcmV0ID0gdzk5NjhjZl9pMmNfdyhzZCwgcmVnLCB2YWx1ZSk7CisJCXc5OTY4Y2ZfaTJjX3coc2QsIHJlZywgdmFsdWUpOwogCQlicmVhazsKIAl9CiAKLQlpZiAocmV0ID49IDApIHsKKwlpZiAoc2QtPmdzcGNhX2Rldi51c2JfZXJyID49IDApIHsKIAkJLyogVXAgb24gc2Vuc29yIHJlc2V0IGVtcHR5IHRoZSByZWdpc3RlciBjYWNoZSAqLwogCQlpZiAocmVnID09IDB4MTIgJiYgKHZhbHVlICYgMHg4MCkpCiAJCQltZW1zZXQoc2QtPnNlbnNvcl9yZWdfY2FjaGUsIC0xLAotCQkJICAgICAgIHNpemVvZihzZC0+c2Vuc29yX3JlZ19jYWNoZSkpOworCQkJCXNpemVvZihzZC0+c2Vuc29yX3JlZ19jYWNoZSkpOwogCQllbHNlCiAJCQlzZC0+c2Vuc29yX3JlZ19jYWNoZVtyZWddID0gdmFsdWU7CiAJfQotCi0JcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBpMmNfcihzdHJ1Y3Qgc2QgKnNkLCBfX3U4IHJlZykKK3N0YXRpYyBpbnQgaTJjX3Ioc3RydWN0IHNkICpzZCwgdTggcmVnKQogewogCWludCByZXQgPSAtMTsKIApAQCAtMjI2MCw5NSArMjQ0MCw5OSBAQAogICogdGhhdCBhcmUgaW4gdGhlIHNhbWUgcG9zaXRpb24gYXMgMCdzIGluICJtYXNrIiBhcmUgcHJlc2VydmVkLCByZWdhcmRsZXNzCiAgKiBvZiB0aGVpciByZXNwZWN0aXZlIHN0YXRlIGluICJ2YWx1ZSIuCiAgKi8KLXN0YXRpYyBpbnQgaTJjX3dfbWFzayhzdHJ1Y3Qgc2QgKnNkLAotCQkgICBfX3U4IHJlZywKLQkJICAgX191OCB2YWx1ZSwKLQkJICAgX191OCBtYXNrKQorc3RhdGljIHZvaWQgaTJjX3dfbWFzayhzdHJ1Y3Qgc2QgKnNkLAorCQkJdTggcmVnLAorCQkJdTggdmFsdWUsCisJCQl1OCBtYXNrKQogewogCWludCByYzsKLQlfX3U4IG9sZHZhbDsKKwl1OCBvbGR2YWw7CiAKIAl2YWx1ZSAmPSBtYXNrOwkJCS8qIEVuZm9yY2UgbWFzayBvbiB2YWx1ZSAqLwogCXJjID0gaTJjX3Ioc2QsIHJlZyk7CiAJaWYgKHJjIDwgMCkKLQkJcmV0dXJuIHJjOworCQlyZXR1cm47CiAJb2xkdmFsID0gcmMgJiB+bWFzazsJCS8qIENsZWFyIHRoZSBtYXNrZWQgYml0cyAqLwogCXZhbHVlIHw9IG9sZHZhbDsJCS8qIFNldCB0aGUgZGVzaXJlZCBiaXRzICovCi0JcmV0dXJuIGkyY193KHNkLCByZWcsIHZhbHVlKTsKKwlpMmNfdyhzZCwgcmVnLCB2YWx1ZSk7CiB9CiAKIC8qIFRlbXBvcmFyaWx5IHN0b3BzIE9WNTExIGZyb20gZnVuY3Rpb25pbmcuIE11c3QgZG8gdGhpcyBiZWZvcmUgY2hhbmdpbmcKICAqIHJlZ2lzdGVycyB3aGlsZSB0aGUgY2FtZXJhIGlzIHN0cmVhbWluZyAqLwotc3RhdGljIGlubGluZSBpbnQgb3Y1MXhfc3RvcChzdHJ1Y3Qgc2QgKnNkKQorc3RhdGljIGlubGluZSB2b2lkIG92NTF4X3N0b3Aoc3RydWN0IHNkICpzZCkKIHsKIAlQREVCVUcoRF9TVFJFQU0sICJzdG9wcGluZyIpOwogCXNkLT5zdG9wcGVkID0gMTsKIAlzd2l0Y2ggKHNkLT5icmlkZ2UpIHsKIAljYXNlIEJSSURHRV9PVjUxMToKIAljYXNlIEJSSURHRV9PVjUxMVBMVVM6Ci0JCXJldHVybiByZWdfdyhzZCwgUjUxeF9TWVNfUkVTRVQsIDB4M2QpOworCQlyZWdfdyhzZCwgUjUxeF9TWVNfUkVTRVQsIDB4M2QpOworCQlicmVhazsKIAljYXNlIEJSSURHRV9PVjUxODoKIAljYXNlIEJSSURHRV9PVjUxOFBMVVM6Ci0JCXJldHVybiByZWdfd19tYXNrKHNkLCBSNTF4X1NZU19SRVNFVCwgMHgzYSwgMHgzYSk7CisJCXJlZ193X21hc2soc2QsIFI1MXhfU1lTX1JFU0VULCAweDNhLCAweDNhKTsKKwkJYnJlYWs7CiAJY2FzZSBCUklER0VfT1Y1MTk6Ci0JCXJldHVybiByZWdfdyhzZCwgT1Y1MTlfU1lTX1JFU0VUMSwgMHgwZik7CisJCXJlZ193KHNkLCBPVjUxOV9SNTFfUkVTRVQxLCAweDBmKTsKKwkJcmVnX3coc2QsIE9WNTE5X1I1MV9SRVNFVDEsIDB4MDApOworCQlyZWdfdyhzZCwgMHgyMiwgMHgwMCk7CQkvKiBGUkFSICovCisJCWJyZWFrOwogCWNhc2UgQlJJREdFX09WRlgyOgotCQlyZXR1cm4gcmVnX3dfbWFzayhzZCwgMHgwZiwgMHgwMCwgMHgwMik7CisJCXJlZ193X21hc2soc2QsIDB4MGYsIDB4MDAsIDB4MDIpOworCQlicmVhazsKIAljYXNlIEJSSURHRV9XOTk2OENGOgotCQlyZXR1cm4gcmVnX3coc2QsIDB4M2MsIDB4MGEwNSk7IC8qIHN0b3AgVVNCIHRyYW5zZmVyICovCisJCXJlZ193KHNkLCAweDNjLCAweDBhMDUpOyAvKiBzdG9wIFVTQiB0cmFuc2ZlciAqLworCQlicmVhazsKIAl9Ci0KLQlyZXR1cm4gMDsKIH0KIAogLyogUmVzdGFydHMgT1Y1MTEgYWZ0ZXIgb3Y1MTFfc3RvcCgpIGlzIGNhbGxlZC4gSGFzIG5vIGVmZmVjdCBpZiBpdCBpcyBub3QKICAqIGFjdHVhbGx5IHN0b3BwZWQgKGZvciBwZXJmb3JtYW5jZSkuICovCi1zdGF0aWMgaW5saW5lIGludCBvdjUxeF9yZXN0YXJ0KHN0cnVjdCBzZCAqc2QpCitzdGF0aWMgaW5saW5lIHZvaWQgb3Y1MXhfcmVzdGFydChzdHJ1Y3Qgc2QgKnNkKQogewotCWludCByYzsKLQogCVBERUJVRyhEX1NUUkVBTSwgInJlc3RhcnRpbmciKTsKIAlpZiAoIXNkLT5zdG9wcGVkKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuOwogCXNkLT5zdG9wcGVkID0gMDsKIAogCS8qIFJlaW5pdGlhbGl6ZSB0aGUgc3RyZWFtICovCiAJc3dpdGNoIChzZC0+YnJpZGdlKSB7CiAJY2FzZSBCUklER0VfT1Y1MTE6CiAJY2FzZSBCUklER0VfT1Y1MTFQTFVTOgotCQlyZXR1cm4gcmVnX3coc2QsIFI1MXhfU1lTX1JFU0VULCAweDAwKTsKKwkJcmVnX3coc2QsIFI1MXhfU1lTX1JFU0VULCAweDAwKTsKKwkJYnJlYWs7CiAJY2FzZSBCUklER0VfT1Y1MTg6CiAJY2FzZSBCUklER0VfT1Y1MThQTFVTOgotCQlyYyA9IHJlZ193KHNkLCAweDJmLCAweDgwKTsKLQkJaWYgKHJjIDwgMCkKLQkJCXJldHVybiByYzsKLQkJcmV0dXJuIHJlZ193KHNkLCBSNTF4X1NZU19SRVNFVCwgMHgwMCk7CisJCXJlZ193KHNkLCAweDJmLCAweDgwKTsKKwkJcmVnX3coc2QsIFI1MXhfU1lTX1JFU0VULCAweDAwKTsKKwkJYnJlYWs7CiAJY2FzZSBCUklER0VfT1Y1MTk6Ci0JCXJldHVybiByZWdfdyhzZCwgT1Y1MTlfU1lTX1JFU0VUMSwgMHgwMCk7CisJCXJlZ193KHNkLCBPVjUxOV9SNTFfUkVTRVQxLCAweDBmKTsKKwkJcmVnX3coc2QsIE9WNTE5X1I1MV9SRVNFVDEsIDB4MDApOworCQlyZWdfdyhzZCwgMHgyMiwgMHgxZCk7CQkvKiBGUkFSICovCisJCWJyZWFrOwogCWNhc2UgQlJJREdFX09WRlgyOgotCQlyZXR1cm4gcmVnX3dfbWFzayhzZCwgMHgwZiwgMHgwMiwgMHgwMik7CisJCXJlZ193X21hc2soc2QsIDB4MGYsIDB4MDIsIDB4MDIpOworCQlicmVhazsKIAljYXNlIEJSSURHRV9XOTk2OENGOgotCQlyZXR1cm4gcmVnX3coc2QsIDB4M2MsIDB4OGEwNSk7IC8qIFVTQiBGSUZPIGVuYWJsZSAqLworCQlyZWdfdyhzZCwgMHgzYywgMHg4YTA1KTsgLyogVVNCIEZJRk8gZW5hYmxlICovCisJCWJyZWFrOwogCX0KLQotCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG92NTF4X3NldF9zbGF2ZV9pZHMoc3RydWN0IHNkICpzZCwgX191OCBzbGF2ZSk7CitzdGF0aWMgdm9pZCBvdjUxeF9zZXRfc2xhdmVfaWRzKHN0cnVjdCBzZCAqc2QsIHU4IHNsYXZlKTsKIAogLyogVGhpcyBkb2VzIGFuIGluaXRpYWwgcmVzZXQgb2YgYW4gT21uaVZpc2lvbiBzZW5zb3IgYW5kIGVuc3VyZXMgdGhhdCBJMkMKICAqIGlzIHN5bmNocm9uaXplZC4gUmV0dXJucyA8MCBvbiBmYWlsdXJlLgogICovCi1zdGF0aWMgaW50IGluaXRfb3Zfc2Vuc29yKHN0cnVjdCBzZCAqc2QsIF9fdTggc2xhdmUpCitzdGF0aWMgaW50IGluaXRfb3Zfc2Vuc29yKHN0cnVjdCBzZCAqc2QsIHU4IHNsYXZlKQogewogCWludCBpOwogCi0JaWYgKG92NTF4X3NldF9zbGF2ZV9pZHMoc2QsIHNsYXZlKSA8IDApCi0JCXJldHVybiAtRUlPOworCW92NTF4X3NldF9zbGF2ZV9pZHMoc2QsIHNsYXZlKTsKIAogCS8qIFJlc2V0IHRoZSBzZW5zb3IgKi8KLQlpZiAoaTJjX3coc2QsIDB4MTIsIDB4ODApIDwgMCkKLQkJcmV0dXJuIC1FSU87CisJaTJjX3coc2QsIDB4MTIsIDB4ODApOwogCiAJLyogV2FpdCBmb3IgaXQgdG8gaW5pdGlhbGl6ZSAqLwogCW1zbGVlcCgxNTApOwpAQCAtMjM2MSwxNSArMjU0NSwxNiBAQAogCQl9CiAKIAkJLyogUmVzZXQgdGhlIHNlbnNvciAqLwotCQlpZiAoaTJjX3coc2QsIDB4MTIsIDB4ODApIDwgMCkKLQkJCXJldHVybiAtRUlPOworCQlpMmNfdyhzZCwgMHgxMiwgMHg4MCk7CisKIAkJLyogV2FpdCBmb3IgaXQgdG8gaW5pdGlhbGl6ZSAqLwogCQltc2xlZXAoMTUwKTsKKwogCQkvKiBEdW1teSByZWFkIHRvIHN5bmMgSTJDICovCiAJCWlmIChpMmNfcihzZCwgMHgwMCkgPCAwKQotCQkJcmV0dXJuIC1FSU87CisJCQlyZXR1cm4gLTE7CiAJfQotCXJldHVybiAtRUlPOworCXJldHVybiAtMTsKIH0KIAogLyogU2V0IHRoZSByZWFkIGFuZCB3cml0ZSBzbGF2ZSBJRHMuIFRoZSAic2xhdmUiIGFyZ3VtZW50IGlzIHRoZSB3cml0ZSBzbGF2ZSwKQEAgLTIzNzcsNTMgKzI1NjIsNDAgQEAKICAqIFRoaXMgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZnJvbSBvdXRzaWRlIHRoZSBpMmMgSS9PIGZ1bmN0aW9ucy4KICAqIFNldHMgSTJDIHJlYWQgYW5kIHdyaXRlIHNsYXZlIElEcy4gUmV0dXJucyA8MCBmb3IgZXJyb3IKICAqLwotc3RhdGljIGludCBvdjUxeF9zZXRfc2xhdmVfaWRzKHN0cnVjdCBzZCAqc2QsCi0JCQkJX191OCBzbGF2ZSkKK3N0YXRpYyB2b2lkIG92NTF4X3NldF9zbGF2ZV9pZHMoc3RydWN0IHNkICpzZCwKKwkJCQl1OCBzbGF2ZSkKIHsKLQlpbnQgcmM7Ci0KIAlzd2l0Y2ggKHNkLT5icmlkZ2UpIHsKIAljYXNlIEJSSURHRV9PVkZYMjoKLQkJcmV0dXJuIHJlZ193KHNkLCBPVkZYMl9JMkNfQUREUiwgc2xhdmUpOworCQlyZWdfdyhzZCwgT1ZGWDJfSTJDX0FERFIsIHNsYXZlKTsKKwkJcmV0dXJuOwogCWNhc2UgQlJJREdFX1c5OTY4Q0Y6CiAJCXNkLT5zZW5zb3JfYWRkciA9IHNsYXZlOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuOwogCX0KIAotCXJjID0gcmVnX3coc2QsIFI1MXhfSTJDX1dfU0lELCBzbGF2ZSk7Ci0JaWYgKHJjIDwgMCkKLQkJcmV0dXJuIHJjOwotCXJldHVybiByZWdfdyhzZCwgUjUxeF9JMkNfUl9TSUQsIHNsYXZlICsgMSk7CisJcmVnX3coc2QsIFI1MXhfSTJDX1dfU0lELCBzbGF2ZSk7CisJcmVnX3coc2QsIFI1MXhfSTJDX1JfU0lELCBzbGF2ZSArIDEpOwogfQogCi1zdGF0aWMgaW50IHdyaXRlX3JlZ3ZhbHMoc3RydWN0IHNkICpzZCwKK3N0YXRpYyB2b2lkIHdyaXRlX3JlZ3ZhbHMoc3RydWN0IHNkICpzZCwKIAkJCSBjb25zdCBzdHJ1Y3Qgb3ZfcmVndmFscyAqcmVndmFscywKIAkJCSBpbnQgbikKIHsKLQlpbnQgcmM7Ci0KIAl3aGlsZSAoLS1uID49IDApIHsKLQkJcmMgPSByZWdfdyhzZCwgcmVndmFscy0+cmVnLCByZWd2YWxzLT52YWwpOwotCQlpZiAocmMgPCAwKQotCQkJcmV0dXJuIHJjOworCQlyZWdfdyhzZCwgcmVndmFscy0+cmVnLCByZWd2YWxzLT52YWwpOwogCQlyZWd2YWxzKys7CiAJfQotCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHdyaXRlX2kyY19yZWd2YWxzKHN0cnVjdCBzZCAqc2QsCi0JCQkgICAgIGNvbnN0IHN0cnVjdCBvdl9pMmNfcmVndmFscyAqcmVndmFscywKLQkJCSAgICAgaW50IG4pCitzdGF0aWMgdm9pZCB3cml0ZV9pMmNfcmVndmFscyhzdHJ1Y3Qgc2QgKnNkLAorCQkJY29uc3Qgc3RydWN0IG92X2kyY19yZWd2YWxzICpyZWd2YWxzLAorCQkJaW50IG4pCiB7Ci0JaW50IHJjOwotCiAJd2hpbGUgKC0tbiA+PSAwKSB7Ci0JCXJjID0gaTJjX3coc2QsIHJlZ3ZhbHMtPnJlZywgcmVndmFscy0+dmFsKTsKLQkJaWYgKHJjIDwgMCkKLQkJCXJldHVybiByYzsKKwkJaTJjX3coc2QsIHJlZ3ZhbHMtPnJlZywgcmVndmFscy0+dmFsKTsKIAkJcmVndmFscysrOwogCX0KLQlyZXR1cm4gMDsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTI0MzMsMTMgKzI2MDUsMTMgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qIFRoaXMgaW5pdGlhbGl6ZXMgdGhlIE9WMngxMCAvIE9WMzYxMCAvIE9WMzYyMCAqLwotc3RhdGljIGludCBvdl9oaXJlc19jb25maWd1cmUoc3RydWN0IHNkICpzZCkKK3N0YXRpYyB2b2lkIG92X2hpcmVzX2NvbmZpZ3VyZShzdHJ1Y3Qgc2QgKnNkKQogewogCWludCBoaWdoLCBsb3c7CiAKIAlpZiAoc2QtPmJyaWRnZSAhPSBCUklER0VfT1ZGWDIpIHsKIAkJZXJyKCJlcnJvciBoaXJlcyBzZW5zb3JzIG9ubHkgc3VwcG9ydGVkIHdpdGggb3ZmeDIiKTsKLQkJcmV0dXJuIC0xOworCQlyZXR1cm47CiAJfQogCiAJUERFQlVHKERfUFJPQkUsICJzdGFydGluZyBvdiBoaXJlcyBjb25maWd1cmF0aW9uIik7CkBAIC0yNDU1LDIwICsyNjI3LDE1IEBACiAJCVBERUJVRyhEX1BST0JFLCAiU2Vuc29yIGlzIGFuIE9WMzYxMCIpOwogCQlzZC0+c2Vuc29yID0gU0VOX09WMzYxMDsKIAl9IGVsc2UgewotCQllcnIoIkVycm9yIHVua25vd24gc2Vuc29yIHR5cGU6IDB4JTAyeCUwMngiLAotCQkgICAgICAgaGlnaCwgbG93KTsKLQkJcmV0dXJuIC0xOworCQllcnIoIkVycm9yIHVua25vd24gc2Vuc29yIHR5cGU6ICUwMnglMDJ4IiwKKwkJCWhpZ2gsIGxvdyk7CiAJfQotCi0JLyogU2V0IHNlbnNvci1zcGVjaWZpYyB2YXJzICovCi0JcmV0dXJuIDA7CiB9CiAKLQogLyogVGhpcyBpbml0aWFsaXplcyB0aGUgT1Y4MTEwLCBPVjg2MTAgc2Vuc29yLiBUaGUgT1Y4MTEwIHVzZXMKICAqIHRoZSBzYW1lIHJlZ2lzdGVyIHNldHRpbmdzIGFzIHRoZSBPVjg2MTAsIHNpbmNlIHRoZXkgYXJlIHZlcnkgc2ltaWxhci4KICAqLwotc3RhdGljIGludCBvdjh4eDBfY29uZmlndXJlKHN0cnVjdCBzZCAqc2QpCitzdGF0aWMgdm9pZCBvdjh4eDBfY29uZmlndXJlKHN0cnVjdCBzZCAqc2QpCiB7CiAJaW50IHJjOwogCkBAIC0yNDc4LDI3ICsyNjQ1LDIxIEBACiAJcmMgPSBpMmNfcihzZCwgT1Y3NjEwX1JFR19DT01fSSk7CiAJaWYgKHJjIDwgMCkgewogCQlQREVCVUcoRF9FUlIsICJFcnJvciBkZXRlY3Rpbmcgc2Vuc29yIHR5cGUiKTsKLQkJcmV0dXJuIC0xOworCQlyZXR1cm47CiAJfQotCWlmICgocmMgJiAzKSA9PSAxKSB7CisJaWYgKChyYyAmIDMpID09IDEpCiAJCXNkLT5zZW5zb3IgPSBTRU5fT1Y4NjEwOwotCX0gZWxzZSB7CisJZWxzZQogCQllcnIoIlVua25vd24gaW1hZ2Ugc2Vuc29yIHZlcnNpb246ICVkIiwgcmMgJiAzKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCS8qIFNldCBzZW5zb3Itc3BlY2lmaWMgdmFycyAqLwotCXJldHVybiAwOwogfQogCiAvKiBUaGlzIGluaXRpYWxpemVzIHRoZSBPVjc2MTAsIE9WNzYyMCwgb3IgT1Y3NkJFIHNlbnNvci4gVGhlIE9WNzZCRSB1c2VzCiAgKiB0aGUgc2FtZSByZWdpc3RlciBzZXR0aW5ncyBhcyB0aGUgT1Y3NjEwLCBzaW5jZSB0aGV5IGFyZSB2ZXJ5IHNpbWlsYXIuCiAgKi8KLXN0YXRpYyBpbnQgb3Y3eHgwX2NvbmZpZ3VyZShzdHJ1Y3Qgc2QgKnNkKQorc3RhdGljIHZvaWQgb3Y3eHgwX2NvbmZpZ3VyZShzdHJ1Y3Qgc2QgKnNkKQogewogCWludCByYywgaGlnaCwgbG93OwogCi0KIAlQREVCVUcoRF9QUk9CRSwgInN0YXJ0aW5nIE9WN3h4MCBjb25maWd1cmF0aW9uIik7CiAKIAkvKiBEZXRlY3Qgc2Vuc29yIChzdWIpdHlwZSAqLwpAQCAtMjUwOCwxNSArMjY2OSwxNSBAQAogCSAqIGl0IGFwcGVhcnMgdG8gYmUgd3JvbmdseSBkZXRlY3RlZCBhcyBhIDc2MTAgYnkgZGVmYXVsdCAqLwogCWlmIChyYyA8IDApIHsKIAkJUERFQlVHKERfRVJSLCAiRXJyb3IgZGV0ZWN0aW5nIHNlbnNvciB0eXBlIik7Ci0JCXJldHVybiAtMTsKKwkJcmV0dXJuOwogCX0KIAlpZiAoKHJjICYgMykgPT0gMykgewogCQkvKiBxdWljayBoYWNrIHRvIG1ha2UgT1Y3NjcwcyB3b3JrICovCiAJCWhpZ2ggPSBpMmNfcihzZCwgMHgwYSk7CiAJCWxvdyA9IGkyY19yKHNkLCAweDBiKTsKIAkJLyogaW5mbygiJXgsICV4IiwgaGlnaCwgbG93KTsgKi8KLQkJaWYgKGhpZ2ggPT0gMHg3NiAmJiBsb3cgPT0gMHg3MykgewotCQkJUERFQlVHKERfUFJPQkUsICJTZW5zb3IgaXMgYW4gT1Y3NjcwIik7CisJCWlmIChoaWdoID09IDB4NzYgJiYgKGxvdyAmIDB4ZjApID09IDB4NzApIHsKKwkJCVBERUJVRyhEX1BST0JFLCAiU2Vuc29yIGlzIGFuIE9WNzYlMDJ4IiwgbG93KTsKIAkJCXNkLT5zZW5zb3IgPSBTRU5fT1Y3NjcwOwogCQl9IGVsc2UgewogCQkJUERFQlVHKERfUFJPQkUsICJTZW5zb3IgaXMgYW4gT1Y3NjEwIik7CkBAIC0yNTM2LDE5ICsyNjk3LDE5IEBACiAJCWhpZ2ggPSBpMmNfcihzZCwgMHgwYSk7CiAJCWlmIChoaWdoIDwgMCkgewogCQkJUERFQlVHKERfRVJSLCAiRXJyb3IgZGV0ZWN0aW5nIGNhbWVyYSBjaGlwIFBJRCIpOwotCQkJcmV0dXJuIGhpZ2g7CisJCQlyZXR1cm47CiAJCX0KIAkJbG93ID0gaTJjX3Ioc2QsIDB4MGIpOwogCQlpZiAobG93IDwgMCkgewogCQkJUERFQlVHKERfRVJSLCAiRXJyb3IgZGV0ZWN0aW5nIGNhbWVyYSBjaGlwIFZFUiIpOwotCQkJcmV0dXJuIGxvdzsKKwkJCXJldHVybjsKIAkJfQogCQlpZiAoaGlnaCA9PSAweDc2KSB7CiAJCQlzd2l0Y2ggKGxvdykgewogCQkJY2FzZSAweDMwOgogCQkJCWVycigiU2Vuc29yIGlzIGFuIE9WNzYzMC9PVjc2MzUiKTsKIAkJCQllcnIoIjc2MzAgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlciIpOwotCQkJCXJldHVybiAtMTsKKwkJCQlyZXR1cm47CiAJCQljYXNlIDB4NDA6CiAJCQkJUERFQlVHKERfUFJPQkUsICJTZW5zb3IgaXMgYW4gT1Y3NjQ1Iik7CiAJCQkJc2QtPnNlbnNvciA9IFNFTl9PVjc2NDA7IC8qIEZJWE1FICovCkBAIC0yNTYxLDkgKzI3MjIsMTQgQEAKIAkJCQlQREVCVUcoRF9QUk9CRSwgIlNlbnNvciBpcyBhbiBPVjc2NDgiKTsKIAkJCQlzZC0+c2Vuc29yID0gU0VOX09WNzY0ODsKIAkJCQlicmVhazsKKwkJCWNhc2UgMHg2MDoKKwkJCQlQREVCVUcoRF9QUk9CRSwgIlNlbnNvciBpcyBhIE9WNzY2MCIpOworCQkJCXNkLT5zZW5zb3IgPSBTRU5fT1Y3NjYwOworCQkJCXNkLT5pbnZlcnRfbGVkID0gMDsKKwkJCQlicmVhazsKIAkJCWRlZmF1bHQ6CiAJCQkJUERFQlVHKERfUFJPQkUsICJVbmtub3duIHNlbnNvcjogMHg3NiV4IiwgbG93KTsKLQkJCQlyZXR1cm4gLTE7CisJCQkJcmV0dXJuOwogCQkJfQogCQl9IGVsc2UgewogCQkJUERFQlVHKERfUFJPQkUsICJTZW5zb3IgaXMgYW4gT1Y3NjIwIik7CkBAIC0yNTcxLDE1ICsyNzM3LDExIEBACiAJCX0KIAl9IGVsc2UgewogCQllcnIoIlVua25vd24gaW1hZ2Ugc2Vuc29yIHZlcnNpb246ICVkIiwgcmMgJiAzKTsKLQkJcmV0dXJuIC0xOwogCX0KLQotCS8qIFNldCBzZW5zb3Itc3BlY2lmaWMgdmFycyAqLwotCXJldHVybiAwOwogfQogCiAvKiBUaGlzIGluaXRpYWxpemVzIHRoZSBPVjY2MjAsIE9WNjYzMCwgT1Y2NjMwQUUsIG9yIE9WNjYzMEFGIHNlbnNvci4gKi8KLXN0YXRpYyBpbnQgb3Y2eHgwX2NvbmZpZ3VyZShzdHJ1Y3Qgc2QgKnNkKQorc3RhdGljIHZvaWQgb3Y2eHgwX2NvbmZpZ3VyZShzdHJ1Y3Qgc2QgKnNkKQogewogCWludCByYzsKIAlQREVCVUcoRF9QUk9CRSwgInN0YXJ0aW5nIE9WNnh4MCBjb25maWd1cmF0aW9uIik7CkBAIC0yNTg4LDcgKzI3NTAsNyBAQAogCXJjID0gaTJjX3Ioc2QsIE9WNzYxMF9SRUdfQ09NX0kpOwogCWlmIChyYyA8IDApIHsKIAkJUERFQlVHKERfRVJSLCAiRXJyb3IgZGV0ZWN0aW5nIHNlbnNvciB0eXBlIik7Ci0JCXJldHVybiAtMTsKKwkJcmV0dXJuOwogCX0KIAogCS8qIFVnaC4gVGhlIGZpcnN0IHR3byBiaXRzIGFyZSB0aGUgdmVyc2lvbiBiaXRzLCBidXQKQEAgLTI2MTksMTMgKzI3ODEsMTEgQEAKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJZXJyKCJGQVRBTDogVW5rbm93biBzZW5zb3IgdmVyc2lvbjogMHglMDJ4IiwgcmMpOwotCQlyZXR1cm4gLTE7CisJCXJldHVybjsKIAl9CiAKIAkvKiBTZXQgc2Vuc29yLXNwZWNpZmljIHZhcnMgKi8KIAlzZC0+c2lmID0gMTsKLQotCXJldHVybiAwOwogfQogCiAvKiBUdXJucyBvbiBvciBvZmYgdGhlIExFRC4gT25seSBoYXMgYW4gZWZmZWN0IHdpdGggT1Y1MTErL09WNTE4KCspL09WNTE5ICovCkBAIC0yNjM3LDE0ICsyNzk3LDE0IEBACiAJc3dpdGNoIChzZC0+YnJpZGdlKSB7CiAJLyogT1Y1MTEgaGFzIG5vIExFRCBjb250cm9sICovCiAJY2FzZSBCUklER0VfT1Y1MTFQTFVTOgotCQlyZWdfdyhzZCwgUjUxMV9TWVNfTEVEX0NUTCwgb24gPyAxIDogMCk7CisJCXJlZ193KHNkLCBSNTExX1NZU19MRURfQ1RMLCBvbik7CiAJCWJyZWFrOwogCWNhc2UgQlJJREdFX09WNTE4OgogCWNhc2UgQlJJREdFX09WNTE4UExVUzoKLQkJcmVnX3dfbWFzayhzZCwgUjUxOF9HUElPX09VVCwgb24gPyAweDAyIDogMHgwMCwgMHgwMik7CisJCXJlZ193X21hc2soc2QsIFI1MThfR1BJT19PVVQsIDB4MDIgKiBvbiwgMHgwMik7CiAJCWJyZWFrOwogCWNhc2UgQlJJREdFX09WNTE5OgotCQlyZWdfd19tYXNrKHNkLCBPVjUxOV9HUElPX0RBVEFfT1VUMCwgIW9uLCAxKTsJLyogMCAvIDEgKi8KKwkJcmVnX3dfbWFzayhzZCwgT1Y1MTlfR1BJT19EQVRBX09VVDAsIG9uLCAxKTsKIAkJYnJlYWs7CiAJfQogfQpAQCAtMjY3OSw3ICsyODM5LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgb3Y1MXhfdXBsb2FkX3F1YW5fdGFibGVzKHN0cnVjdCBzZCAqc2QpCitzdGF0aWMgdm9pZCBvdjUxeF91cGxvYWRfcXVhbl90YWJsZXMoc3RydWN0IHNkICpzZCkKIHsKIAljb25zdCB1bnNpZ25lZCBjaGFyIHlRdWFuVGFibGU1MTFbXSA9IHsKIAkJMCwgMSwgMSwgMiwgMiwgMywgMywgNCwKQEAgLTI3MTAsNyArMjg3MCw2IEBACiAJCTYsIDYsIDYsIDYsIDcsIDcsIDcsIDgsCiAJCTcsIDcsIDYsIDcsIDcsIDcsIDgsIDgKIAl9OwotCiAJY29uc3QgdW5zaWduZWQgY2hhciB1dlF1YW5UYWJsZTUxOFtdID0gewogCQk2LCA2LCA2LCA3LCA3LCA3LCA3LCA3LAogCQk2LCA2LCA2LCA3LCA3LCA3LCA3LCA3LApAQCAtMjcyMCwxOCArMjg3OSwxOCBAQAogCiAJY29uc3QgdW5zaWduZWQgY2hhciAqcFlUYWJsZSwgKnBVVlRhYmxlOwogCXVuc2lnbmVkIGNoYXIgdmFsMCwgdmFsMTsKLQlpbnQgaSwgc2l6ZSwgcmMsIHJlZyA9IFI1MXhfQ09NUF9MVVRfQkVHSU47CisJaW50IGksIHNpemUsIHJlZyA9IFI1MXhfQ09NUF9MVVRfQkVHSU47CiAKIAlQREVCVUcoRF9QUk9CRSwgIlVwbG9hZGluZyBxdWFudGl6YXRpb24gdGFibGVzIik7CiAKIAlpZiAoc2QtPmJyaWRnZSA9PSBCUklER0VfT1Y1MTEgfHwgc2QtPmJyaWRnZSA9PSBCUklER0VfT1Y1MTFQTFVTKSB7CiAJCXBZVGFibGUgPSB5UXVhblRhYmxlNTExOwogCQlwVVZUYWJsZSA9IHV2UXVhblRhYmxlNTExOwotCQlzaXplICA9IDMyOworCQlzaXplID0gMzI7CiAJfSBlbHNlIHsKIAkJcFlUYWJsZSA9IHlRdWFuVGFibGU1MTg7CiAJCXBVVlRhYmxlID0gdXZRdWFuVGFibGU1MTg7Ci0JCXNpemUgID0gMTY7CisJCXNpemUgPSAxNjsKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CkBAIC0yNzQwLDMwICsyODk5LDIzIEBACiAJCXZhbDAgJj0gMHgwZjsKIAkJdmFsMSAmPSAweDBmOwogCQl2YWwwIHw9IHZhbDEgPDwgNDsKLQkJcmMgPSByZWdfdyhzZCwgcmVnLCB2YWwwKTsKLQkJaWYgKHJjIDwgMCkKLQkJCXJldHVybiByYzsKKwkJcmVnX3coc2QsIHJlZywgdmFsMCk7CiAKIAkJdmFsMCA9ICpwVVZUYWJsZSsrOwogCQl2YWwxID0gKnBVVlRhYmxlKys7CiAJCXZhbDAgJj0gMHgwZjsKIAkJdmFsMSAmPSAweDBmOwogCQl2YWwwIHw9IHZhbDEgPDwgNDsKLQkJcmMgPSByZWdfdyhzZCwgcmVnICsgc2l6ZSwgdmFsMCk7Ci0JCWlmIChyYyA8IDApCi0JCQlyZXR1cm4gcmM7CisJCXJlZ193KHNkLCByZWcgKyBzaXplLCB2YWwwKTsKIAogCQlyZWcrKzsKIAl9Ci0KLQlyZXR1cm4gMDsKIH0KIAogLyogVGhpcyBpbml0aWFsaXplcyB0aGUgT1Y1MTEvT1Y1MTErIGFuZCB0aGUgc2Vuc29yICovCi1zdGF0aWMgaW50IG92NTExX2NvbmZpZ3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgdm9pZCBvdjUxMV9jb25maWd1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlpbnQgcmM7CiAKIAkvKiBGb3IgNTExIGFuZCA1MTErICovCiAJY29uc3Qgc3RydWN0IG92X3JlZ3ZhbHMgaW5pdF81MTFbXSA9IHsKQEAgLTI4MDksNDIgKzI5NjEsMjcgQEAKIAogCVBERUJVRyhEX1BST0JFLCAiRGV2aWNlIGN1c3RvbSBpZCAleCIsIHJlZ19yKHNkLCBSNTF4X1NZU19DVVNUX0lEKSk7CiAKLQlyYyA9IHdyaXRlX3JlZ3ZhbHMoc2QsIGluaXRfNTExLCBBUlJBWV9TSVpFKGluaXRfNTExKSk7Ci0JaWYgKHJjIDwgMCkKLQkJcmV0dXJuIHJjOworCXdyaXRlX3JlZ3ZhbHMoc2QsIGluaXRfNTExLCBBUlJBWV9TSVpFKGluaXRfNTExKSk7CiAKIAlzd2l0Y2ggKHNkLT5icmlkZ2UpIHsKIAljYXNlIEJSSURHRV9PVjUxMToKLQkJcmMgPSB3cml0ZV9yZWd2YWxzKHNkLCBub3JtXzUxMSwgQVJSQVlfU0laRShub3JtXzUxMSkpOwotCQlpZiAocmMgPCAwKQotCQkJcmV0dXJuIHJjOworCQl3cml0ZV9yZWd2YWxzKHNkLCBub3JtXzUxMSwgQVJSQVlfU0laRShub3JtXzUxMSkpOwogCQlicmVhazsKIAljYXNlIEJSSURHRV9PVjUxMVBMVVM6Ci0JCXJjID0gd3JpdGVfcmVndmFscyhzZCwgbm9ybV81MTFfcCwgQVJSQVlfU0laRShub3JtXzUxMV9wKSk7Ci0JCWlmIChyYyA8IDApCi0JCQlyZXR1cm4gcmM7CisJCXdyaXRlX3JlZ3ZhbHMoc2QsIG5vcm1fNTExX3AsIEFSUkFZX1NJWkUobm9ybV81MTFfcCkpOwogCQlicmVhazsKIAl9CiAKIAkvKiBJbml0IGNvbXByZXNzaW9uICovCi0JcmMgPSB3cml0ZV9yZWd2YWxzKHNkLCBjb21wcmVzc181MTEsIEFSUkFZX1NJWkUoY29tcHJlc3NfNTExKSk7Ci0JaWYgKHJjIDwgMCkKLQkJcmV0dXJuIHJjOworCXdyaXRlX3JlZ3ZhbHMoc2QsIGNvbXByZXNzXzUxMSwgQVJSQVlfU0laRShjb21wcmVzc181MTEpKTsKIAotCXJjID0gb3Y1MXhfdXBsb2FkX3F1YW5fdGFibGVzKHNkKTsKLQlpZiAocmMgPCAwKSB7Ci0JCVBERUJVRyhEX0VSUiwgIkVycm9yIHVwbG9hZGluZyBxdWFudGl6YXRpb24gdGFibGVzIik7Ci0JCXJldHVybiByYzsKLQl9Ci0KLQlyZXR1cm4gMDsKKwlvdjUxeF91cGxvYWRfcXVhbl90YWJsZXMoc2QpOwogfQogCiAvKiBUaGlzIGluaXRpYWxpemVzIHRoZSBPVjUxOC9PVjUxOCsgYW5kIHRoZSBzZW5zb3IgKi8KLXN0YXRpYyBpbnQgb3Y1MThfY29uZmlndXJlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3N0YXRpYyB2b2lkIG92NTE4X2NvbmZpZ3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCWludCByYzsKIAogCS8qIEZvciA1MTggYW5kIDUxOCsgKi8KIAljb25zdCBzdHJ1Y3Qgb3ZfcmVndmFscyBpbml0XzUxOFtdID0gewpAQCAtMjg5Miw2NSArMzAyOSw0OSBAQAogCiAJLyogRmlyc3QgNSBiaXRzIG9mIGN1c3RvbSBJRCByZWcgYXJlIGEgcmV2aXNpb24gSUQgb24gT1Y1MTggKi8KIAlQREVCVUcoRF9QUk9CRSwgIkRldmljZSByZXZpc2lvbiAlZCIsCi0JICAgICAgIDB4MUYgJiByZWdfcihzZCwgUjUxeF9TWVNfQ1VTVF9JRCkpOworCQkweDFmICYgcmVnX3Ioc2QsIFI1MXhfU1lTX0NVU1RfSUQpKTsKIAotCXJjID0gd3JpdGVfcmVndmFscyhzZCwgaW5pdF81MTgsIEFSUkFZX1NJWkUoaW5pdF81MTgpKTsKLQlpZiAocmMgPCAwKQotCQlyZXR1cm4gcmM7CisJd3JpdGVfcmVndmFscyhzZCwgaW5pdF81MTgsIEFSUkFZX1NJWkUoaW5pdF81MTgpKTsKIAogCS8qIFNldCBMRUQgR1BJTyBwaW4gdG8gb3V0cHV0IG1vZGUgKi8KLQlyYyA9IHJlZ193X21hc2soc2QsIFI1MThfR1BJT19DVEwsIDB4MDAsIDB4MDIpOwotCWlmIChyYyA8IDApCi0JCXJldHVybiByYzsKKwlyZWdfd19tYXNrKHNkLCBSNTE4X0dQSU9fQ1RMLCAweDAwLCAweDAyKTsKIAogCXN3aXRjaCAoc2QtPmJyaWRnZSkgewogCWNhc2UgQlJJREdFX09WNTE4OgotCQlyYyA9IHdyaXRlX3JlZ3ZhbHMoc2QsIG5vcm1fNTE4LCBBUlJBWV9TSVpFKG5vcm1fNTE4KSk7Ci0JCWlmIChyYyA8IDApCi0JCQlyZXR1cm4gcmM7CisJCXdyaXRlX3JlZ3ZhbHMoc2QsIG5vcm1fNTE4LCBBUlJBWV9TSVpFKG5vcm1fNTE4KSk7CiAJCWJyZWFrOwogCWNhc2UgQlJJREdFX09WNTE4UExVUzoKLQkJcmMgPSB3cml0ZV9yZWd2YWxzKHNkLCBub3JtXzUxOF9wLCBBUlJBWV9TSVpFKG5vcm1fNTE4X3ApKTsKLQkJaWYgKHJjIDwgMCkKLQkJCXJldHVybiByYzsKKwkJd3JpdGVfcmVndmFscyhzZCwgbm9ybV81MThfcCwgQVJSQVlfU0laRShub3JtXzUxOF9wKSk7CiAJCWJyZWFrOwogCX0KIAotCXJjID0gb3Y1MXhfdXBsb2FkX3F1YW5fdGFibGVzKHNkKTsKLQlpZiAocmMgPCAwKSB7Ci0JCVBERUJVRyhEX0VSUiwgIkVycm9yIHVwbG9hZGluZyBxdWFudGl6YXRpb24gdGFibGVzIik7Ci0JCXJldHVybiByYzsKLQl9CisJb3Y1MXhfdXBsb2FkX3F1YW5fdGFibGVzKHNkKTsKIAotCXJjID0gcmVnX3coc2QsIDB4MmYsIDB4ODApOwotCWlmIChyYyA8IDApCi0JCXJldHVybiByYzsKLQotCXJldHVybiAwOworCXJlZ193KHNkLCAweDJmLCAweDgwKTsKIH0KIAotc3RhdGljIGludCBvdjUxOV9jb25maWd1cmUoc3RydWN0IHNkICpzZCkKK3N0YXRpYyB2b2lkIG92NTE5X2NvbmZpZ3VyZShzdHJ1Y3Qgc2QgKnNkKQogewogCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3ZfcmVndmFscyBpbml0XzUxOVtdID0gewotCQl7IDB4NWEsICAweDZkIH0sIC8qIEVuYWJsZVN5c3RlbSAqLwotCQl7IDB4NTMsICAweDliIH0sCi0JCXsgMHg1NCwgIDB4ZmYgfSwgLyogc2V0IGJpdDIgdG8gZW5hYmxlIGpwZWcgKi8KLQkJeyAweDVkLCAgMHgwMyB9LAotCQl7IDB4NDksICAweDAxIH0sCi0JCXsgMHg0OCwgIDB4MDAgfSwKKwkJeyAweDVhLCAweDZkIH0sIC8qIEVuYWJsZVN5c3RlbSAqLworCQl7IDB4NTMsIDB4OWIgfSwKKwkJeyBPVjUxOV9SNTRfRU5fQ0xLMSwgMHhmZiB9LCAvKiBzZXQgYml0MiB0byBlbmFibGUganBlZyAqLworCQl7IDB4NWQsIDB4MDMgfSwKKwkJeyAweDQ5LCAweDAxIH0sCisJCXsgMHg0OCwgMHgwMCB9LAogCQkvKiBTZXQgTEVEIHBpbiB0byBvdXRwdXQgbW9kZS4gQml0IDQgbXVzdCBiZSBjbGVhcmVkIG9yIHNlbnNvcgogCQkgKiBkZXRlY3Rpb24gd2lsbCBmYWlsLiBUaGlzIGRlc2VydmVzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gKi8KIAkJeyBPVjUxOV9HUElPX0lPX0NUUkwwLCAgIDB4ZWUgfSwKLQkJeyAweDUxLCAgMHgwZiB9LCAvKiBTZXRVc2JJbml0ICovCi0JCXsgMHg1MSwgIDB4MDAgfSwKLQkJeyAweDIyLCAgMHgwMCB9LAorCQl7IE9WNTE5X1I1MV9SRVNFVDEsIDB4MGYgfSwKKwkJeyBPVjUxOV9SNTFfUkVTRVQxLCAweDAwIH0sCisJCXsgMHgyMiwgMHgwMCB9LAogCQkvKiB3aW5kb3dzIHJlYWRzIDB4NTUgYXQgdGhpcyBwb2ludCovCiAJfTsKIAotCXJldHVybiB3cml0ZV9yZWd2YWxzKHNkLCBpbml0XzUxOSwgQVJSQVlfU0laRShpbml0XzUxOSkpOworCXdyaXRlX3JlZ3ZhbHMoc2QsIGluaXRfNTE5LCBBUlJBWV9TSVpFKGluaXRfNTE5KSk7CiB9CiAKLXN0YXRpYyBpbnQgb3ZmeDJfY29uZmlndXJlKHN0cnVjdCBzZCAqc2QpCitzdGF0aWMgdm9pZCBvdmZ4Ml9jb25maWd1cmUoc3RydWN0IHNkICpzZCkKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IG92X3JlZ3ZhbHMgaW5pdF9meDJbXSA9IHsKIAkJeyAweDAwLCAweDYwIH0sCkBAIC0yOTY0LDcgKzMwODUsOTIgQEAKIAogCXNkLT5zdG9wcGVkID0gMTsKIAotCXJldHVybiB3cml0ZV9yZWd2YWxzKHNkLCBpbml0X2Z4MiwgQVJSQVlfU0laRShpbml0X2Z4MikpOworCXdyaXRlX3JlZ3ZhbHMoc2QsIGluaXRfZngyLCBBUlJBWV9TSVpFKGluaXRfZngyKSk7Cit9CisKKy8qIHNldCB0aGUgbW9kZSAqLworLyogVGhpcyBmdW5jdGlvbiB3b3JrcyBmb3Igb3Y3NjYwIG9ubHkgKi8KK3N0YXRpYyB2b2lkIG92NTE5X3NldF9tb2RlKHN0cnVjdCBzZCAqc2QpCit7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBvdl9yZWd2YWxzIGJyaWRnZV9vdjc2NjBbMl1bMTBdID0geworCQl7ezB4MTAsIDB4MTR9LCB7MHgxMSwgMHgxZX0sIHsweDEyLCAweDAwfSwgezB4MTMsIDB4MDB9LAorCQkgezB4MTQsIDB4MDB9LCB7MHgxNSwgMHgwMH0sIHsweDE2LCAweDAwfSwgezB4MjAsIDB4MGN9LAorCQkgezB4MjUsIDB4MDF9LCB7MHgyNiwgMHgwMH19LAorCQl7ezB4MTAsIDB4Mjh9LCB7MHgxMSwgMHgzY30sIHsweDEyLCAweDAwfSwgezB4MTMsIDB4MDB9LAorCQkgezB4MTQsIDB4MDB9LCB7MHgxNSwgMHgwMH0sIHsweDE2LCAweDAwfSwgezB4MjAsIDB4MGN9LAorCQkgezB4MjUsIDB4MDN9LCB7MHgyNiwgMHgwMH19CisJfTsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IG92X2kyY19yZWd2YWxzIHNlbnNvcl9vdjc2NjBbMl1bM10gPSB7CisJCXt7MHgxMiwgMHgwMH0sIHsweDI0LCAweDAwfSwgezB4MGMsIDB4MGN9fSwKKwkJe3sweDEyLCAweDAwfSwgezB4MDQsIDB4MDB9LCB7MHgwYywgMHgwMH19CisJfTsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IG92X2kyY19yZWd2YWxzIHNlbnNvcl9vdjc2NjBfMltdID0geworCQl7T1Y3NjcwX1IxN19IU1RBUlQsIDB4MTN9LAorCQl7T1Y3NjcwX1IxOF9IU1RPUCwgMHgwMX0sCisJCXtPVjc2NzBfUjMyX0hSRUYsIDB4OTJ9LAorCQl7T1Y3NjcwX1IxOV9WU1RBUlQsIDB4MDJ9LAorCQl7T1Y3NjcwX1IxQV9WU1RPUCwgMHg3YX0sCisJCXtPVjc2NzBfUjAzX1ZSRUYsIDB4MDB9LAorLyoJCXsweDMzLCAweDAwfSwgKi8KKy8qCQl7MHgzNCwgMHgwN30sICovCisvKgkJezB4MzYsIDB4MDB9LCAqLworLyoJCXsweDZiLCAweDBhfSwgKi8KKwl9OworCisJd3JpdGVfcmVndmFscyhzZCwgYnJpZGdlX292NzY2MFtzZC0+Z3NwY2FfZGV2LmN1cnJfbW9kZV0sCisJCQlBUlJBWV9TSVpFKGJyaWRnZV9vdjc2NjBbMF0pKTsKKwl3cml0ZV9pMmNfcmVndmFscyhzZCwgc2Vuc29yX292NzY2MFtzZC0+Z3NwY2FfZGV2LmN1cnJfbW9kZV0sCisJCQlBUlJBWV9TSVpFKHNlbnNvcl9vdjc2NjBbMF0pKTsKKwl3cml0ZV9pMmNfcmVndmFscyhzZCwgc2Vuc29yX292NzY2MF8yLAorCQkJQVJSQVlfU0laRShzZW5zb3Jfb3Y3NjYwXzIpKTsKK30KKworLyogc2V0IHRoZSBmcmFtZSByYXRlICovCisvKiBUaGlzIGZ1bmN0aW9uIHdvcmtzIGZvciBzZW5zb3JzIG92NzY0MCwgb3Y3NjQ4IG92NzY2MCBhbmQgb3Y3NjcwIG9ubHkgKi8KK3N0YXRpYyB2b2lkIG92NTE5X3NldF9mcihzdHJ1Y3Qgc2QgKnNkKQoreworCWludCBmcjsKKwl1OCBjbG9jazsKKwkvKiBmcmFtZSByYXRlIHRhYmxlIHdpdGggaW5kaWNlczoKKwkgKgktIG1vZGUgPSAwOiAzMjB4MjQwLCAxOiA2NDB4NDgwCisJICoJLSBmciByYXRlID0gMDogMzAsIDE6IDI1LCAyOiAyMCwgMzogMTUsIDQ6IDEwLCA1OiA1CisJICoJLSByZWcgPSAwOiBicmlkZ2UgYTQsIDE6IGJyaWRnZSAyMywgMjogc2Vuc29yIDExIChjbG9jaykKKwkgKi8KKwlzdGF0aWMgY29uc3QgdTggZnJfdGJbMl1bNl1bM10gPSB7CisJCXt7MHgwNCwgMHhmZiwgMHgwMH0sCisJCSB7MHgwNCwgMHgxZiwgMHgwMH0sCisJCSB7MHgwNCwgMHgxYiwgMHgwMH0sCisJCSB7MHgwNCwgMHgxNSwgMHgwMH0sCisJCSB7MHgwNCwgMHgwOSwgMHgwMH0sCisJCSB7MHgwNCwgMHgwMSwgMHgwMH19LAorCQl7ezB4MGMsIDB4ZmYsIDB4MDB9LAorCQkgezB4MGMsIDB4MWYsIDB4MDB9LAorCQkgezB4MGMsIDB4MWIsIDB4MDB9LAorCQkgezB4MDQsIDB4ZmYsIDB4MDF9LAorCQkgezB4MDQsIDB4MWYsIDB4MDF9LAorCQkgezB4MDQsIDB4MWIsIDB4MDF9fSwKKwl9OworCisJaWYgKGZyYW1lX3JhdGUgPiAwKQorCQlzZC0+ZnJhbWVfcmF0ZSA9IGZyYW1lX3JhdGU7CisJaWYgKHNkLT5mcmFtZV9yYXRlID49IDMwKQorCQlmciA9IDA7CisJZWxzZSBpZiAoc2QtPmZyYW1lX3JhdGUgPj0gMjUpCisJCWZyID0gMTsKKwllbHNlIGlmIChzZC0+ZnJhbWVfcmF0ZSA+PSAyMCkKKwkJZnIgPSAyOworCWVsc2UgaWYgKHNkLT5mcmFtZV9yYXRlID49IDE1KQorCQlmciA9IDM7CisJZWxzZSBpZiAoc2QtPmZyYW1lX3JhdGUgPj0gMTApCisJCWZyID0gNDsKKwllbHNlCisJCWZyID0gNTsKKwlyZWdfdyhzZCwgMHhhNCwgZnJfdGJbc2QtPmdzcGNhX2Rldi5jdXJyX21vZGVdW2ZyXVswXSk7CisJcmVnX3coc2QsIDB4MjMsIGZyX3RiW3NkLT5nc3BjYV9kZXYuY3Vycl9tb2RlXVtmcl1bMV0pOworCWNsb2NrID0gZnJfdGJbc2QtPmdzcGNhX2Rldi5jdXJyX21vZGVdW2ZyXVsyXTsKKwlpZiAoc2QtPnNlbnNvciA9PSBTRU5fT1Y3NjYwKQorCQljbG9jayB8PSAweDgwOwkJLyogZW5hYmxlIGRvdWJsZSBjbG9jayAqLworCW92NTE4X2kyY193KHNkLCBPVjc2NzBfUjExX0NMS1JDLCBjbG9jayk7CiB9CiAKIC8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIHRpbWUgKi8KQEAgLTI5NzMsOTkgKzMxNzksMTE5IEBACiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCXN0cnVjdCBjYW0gKmNhbSA9ICZnc3BjYV9kZXYtPmNhbTsKLQlpbnQgcmV0ID0gMDsKIAogCXNkLT5icmlkZ2UgPSBpZC0+ZHJpdmVyX2luZm8gJiBCUklER0VfTUFTSzsKLQlzZC0+aW52ZXJ0X2xlZCA9IGlkLT5kcml2ZXJfaW5mbyAmIEJSSURHRV9JTlZFUlRfTEVEOworCXNkLT5pbnZlcnRfbGVkID0gKGlkLT5kcml2ZXJfaW5mbyAmIEJSSURHRV9JTlZFUlRfTEVEKSAhPSAwOwogCiAJc3dpdGNoIChzZC0+YnJpZGdlKSB7CiAJY2FzZSBCUklER0VfT1Y1MTE6CiAJY2FzZSBCUklER0VfT1Y1MTFQTFVTOgotCQlyZXQgPSBvdjUxMV9jb25maWd1cmUoZ3NwY2FfZGV2KTsKKwkJY2FtLT5jYW1fbW9kZSA9IG92NTExX3ZnYV9tb2RlOworCQljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUob3Y1MTFfdmdhX21vZGUpOwogCQlicmVhazsKIAljYXNlIEJSSURHRV9PVjUxODoKIAljYXNlIEJSSURHRV9PVjUxOFBMVVM6Ci0JCXJldCA9IG92NTE4X2NvbmZpZ3VyZShnc3BjYV9kZXYpOworCQljYW0tPmNhbV9tb2RlID0gb3Y1MThfdmdhX21vZGU7CisJCWNhbS0+bm1vZGVzID0gQVJSQVlfU0laRShvdjUxOF92Z2FfbW9kZSk7CiAJCWJyZWFrOwogCWNhc2UgQlJJREdFX09WNTE5OgotCQlyZXQgPSBvdjUxOV9jb25maWd1cmUoc2QpOworCQljYW0tPmNhbV9tb2RlID0gb3Y1MTlfdmdhX21vZGU7CisJCWNhbS0+bm1vZGVzID0gQVJSQVlfU0laRShvdjUxOV92Z2FfbW9kZSk7CisJCXNkLT5pbnZlcnRfbGVkID0gIXNkLT5pbnZlcnRfbGVkOwogCQlicmVhazsKIAljYXNlIEJSSURHRV9PVkZYMjoKLQkJcmV0ID0gb3ZmeDJfY29uZmlndXJlKHNkKTsKKwkJY2FtLT5jYW1fbW9kZSA9IG92NTE5X3ZnYV9tb2RlOworCQljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUob3Y1MTlfdmdhX21vZGUpOwogCQljYW0tPmJ1bGtfc2l6ZSA9IE9WRlgyX0JVTEtfU0laRTsKIAkJY2FtLT5idWxrX251cmJzID0gTUFYX05VUkJTOwogCQljYW0tPmJ1bGsgPSAxOwogCQlicmVhazsKIAljYXNlIEJSSURHRV9XOTk2OENGOgotCQlyZXQgPSB3OTk2OGNmX2NvbmZpZ3VyZShzZCk7CisJCWNhbS0+Y2FtX21vZGUgPSB3OTk2OGNmX3ZnYV9tb2RlOworCQljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUodzk5NjhjZl92Z2FfbW9kZSk7CiAJCWNhbS0+cmV2ZXJzZV9hbHRzID0gMTsKIAkJYnJlYWs7CiAJfQogCi0JaWYgKHJldCkKLQkJZ290byBlcnJvcjsKKwlnc3BjYV9kZXYtPmNhbS5jdHJscyA9IHNkLT5jdHJsczsKKwlzZC0+cXVhbGl0eSA9IFFVQUxJVFlfREVGOwogCi0Jb3Y1MXhfbGVkX2NvbnRyb2woc2QsIDApOwkvKiB0dXJuIExFRCBvZmYgKi8KKwlyZXR1cm4gMDsKK30KKworLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgcHJvYmUgYW5kIHJlc3VtZSB0aW1lICovCitzdGF0aWMgaW50IHNkX2luaXQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlzdHJ1Y3QgY2FtICpjYW0gPSAmZ3NwY2FfZGV2LT5jYW07CisKKwlzd2l0Y2ggKHNkLT5icmlkZ2UpIHsKKwljYXNlIEJSSURHRV9PVjUxMToKKwljYXNlIEJSSURHRV9PVjUxMVBMVVM6CisJCW92NTExX2NvbmZpZ3VyZShnc3BjYV9kZXYpOworCQlicmVhazsKKwljYXNlIEJSSURHRV9PVjUxODoKKwljYXNlIEJSSURHRV9PVjUxOFBMVVM6CisJCW92NTE4X2NvbmZpZ3VyZShnc3BjYV9kZXYpOworCQlicmVhazsKKwljYXNlIEJSSURHRV9PVjUxOToKKwkJb3Y1MTlfY29uZmlndXJlKHNkKTsKKwkJYnJlYWs7CisJY2FzZSBCUklER0VfT1ZGWDI6CisJCW92ZngyX2NvbmZpZ3VyZShzZCk7CisJCWJyZWFrOworCWNhc2UgQlJJREdFX1c5OTY4Q0Y6CisJCXc5OTY4Y2ZfY29uZmlndXJlKHNkKTsKKwkJYnJlYWs7CisJfQogCiAJLyogVGhlIE9WNTE5IG11c3QgYmUgbW9yZSBhZ2dyZXNzaXZlIGFib3V0IHNlbnNvciBkZXRlY3Rpb24gc2luY2UKIAkgKiBJMkMgd3JpdGUgd2lsbCBuZXZlciBmYWlsIGlmIHRoZSBzZW5zb3IgaXMgbm90IHByZXNlbnQuIFdlIGhhdmUKIAkgKiB0byB0cnkgdG8gaW5pdGlhbGl6ZSB0aGUgc2Vuc29yIHRvIGRldGVjdCBpdHMgcHJlc2VuY2UgKi8KKwlzZC0+c2Vuc29yID0gLTE7CiAKIAkvKiBUZXN0IGZvciA3Nnh4ICovCiAJaWYgKGluaXRfb3Zfc2Vuc29yKHNkLCBPVjd4eDBfU0lEKSA+PSAwKSB7Ci0JCWlmIChvdjd4eDBfY29uZmlndXJlKHNkKSA8IDApIHsKLQkJCVBERUJVRyhEX0VSUiwgIkZhaWxlZCB0byBjb25maWd1cmUgT1Y3eHgwIik7Ci0JCQlnb3RvIGVycm9yOwotCQl9CisJCW92N3h4MF9jb25maWd1cmUoc2QpOworCiAJLyogVGVzdCBmb3IgNnh4MCAqLwogCX0gZWxzZSBpZiAoaW5pdF9vdl9zZW5zb3Ioc2QsIE9WNnh4MF9TSUQpID49IDApIHsKLQkJaWYgKG92Nnh4MF9jb25maWd1cmUoc2QpIDwgMCkgewotCQkJUERFQlVHKERfRVJSLCAiRmFpbGVkIHRvIGNvbmZpZ3VyZSBPVjZ4eDAiKTsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KKwkJb3Y2eHgwX2NvbmZpZ3VyZShzZCk7CisKIAkvKiBUZXN0IGZvciA4eHgwICovCiAJfSBlbHNlIGlmIChpbml0X292X3NlbnNvcihzZCwgT1Y4eHgwX1NJRCkgPj0gMCkgewotCQlpZiAob3Y4eHgwX2NvbmZpZ3VyZShzZCkgPCAwKSB7Ci0JCQlQREVCVUcoRF9FUlIsICJGYWlsZWQgdG8gY29uZmlndXJlIE9WOHh4MCIpOwotCQkJZ290byBlcnJvcjsKLQkJfQorCQlvdjh4eDBfY29uZmlndXJlKHNkKTsKKwogCS8qIFRlc3QgZm9yIDN4eHggLyAyeHh4ICovCiAJfSBlbHNlIGlmIChpbml0X292X3NlbnNvcihzZCwgT1ZfSElSRVNfU0lEKSA+PSAwKSB7Ci0JCWlmIChvdl9oaXJlc19jb25maWd1cmUoc2QpIDwgMCkgewotCQkJUERFQlVHKERfRVJSLCAiRmFpbGVkIHRvIGNvbmZpZ3VyZSBoaWdoIHJlcyBPViIpOwotCQkJZ290byBlcnJvcjsKLQkJfQorCQlvdl9oaXJlc19jb25maWd1cmUoc2QpOwogCX0gZWxzZSB7CiAJCWVycigiQ2FuJ3QgZGV0ZXJtaW5lIHNlbnNvciBzbGF2ZSBJRHMiKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKKwlpZiAoc2QtPnNlbnNvciA8IDApCisJCWdvdG8gZXJyb3I7CisKKwlvdjUxeF9sZWRfY29udHJvbChzZCwgMCk7CS8qIHR1cm4gTEVEIG9mZiAqLworCiAJc3dpdGNoIChzZC0+YnJpZGdlKSB7CiAJY2FzZSBCUklER0VfT1Y1MTE6CiAJY2FzZSBCUklER0VfT1Y1MTFQTFVTOgotCQlpZiAoIXNkLT5zaWYpIHsKLQkJCWNhbS0+Y2FtX21vZGUgPSBvdjUxMV92Z2FfbW9kZTsKLQkJCWNhbS0+bm1vZGVzID0gQVJSQVlfU0laRShvdjUxMV92Z2FfbW9kZSk7Ci0JCX0gZWxzZSB7CisJCWlmIChzZC0+c2lmKSB7CiAJCQljYW0tPmNhbV9tb2RlID0gb3Y1MTFfc2lmX21vZGU7CiAJCQljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUob3Y1MTFfc2lmX21vZGUpOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgQlJJREdFX09WNTE4OgogCWNhc2UgQlJJREdFX09WNTE4UExVUzoKLQkJaWYgKCFzZC0+c2lmKSB7Ci0JCQljYW0tPmNhbV9tb2RlID0gb3Y1MThfdmdhX21vZGU7Ci0JCQljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUob3Y1MThfdmdhX21vZGUpOwotCQl9IGVsc2UgeworCQlpZiAoc2QtPnNpZikgewogCQkJY2FtLT5jYW1fbW9kZSA9IG92NTE4X3NpZl9tb2RlOwogCQkJY2FtLT5ubW9kZXMgPSBBUlJBWV9TSVpFKG92NTE4X3NpZl9tb2RlKTsKIAkJfQogCQlicmVhazsKIAljYXNlIEJSSURHRV9PVjUxOToKLQkJaWYgKCFzZC0+c2lmKSB7Ci0JCQljYW0tPmNhbV9tb2RlID0gb3Y1MTlfdmdhX21vZGU7Ci0JCQljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUob3Y1MTlfdmdhX21vZGUpOwotCQl9IGVsc2UgeworCQlpZiAoc2QtPnNpZikgewogCQkJY2FtLT5jYW1fbW9kZSA9IG92NTE5X3NpZl9tb2RlOwogCQkJY2FtLT5ubW9kZXMgPSBBUlJBWV9TSVpFKG92NTE5X3NpZl9tb2RlKTsKIAkJfQpAQCAtMzA3NywxMTggKzMzMDMsMTA3IEBACiAJCX0gZWxzZSBpZiAoc2QtPnNlbnNvciA9PSBTRU5fT1YzNjEwKSB7CiAJCQljYW0tPmNhbV9tb2RlID0gb3ZmeDJfb3YzNjEwX21vZGU7CiAJCQljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUob3ZmeDJfb3YzNjEwX21vZGUpOwotCQl9IGVsc2UgaWYgKCFzZC0+c2lmKSB7Ci0JCQljYW0tPmNhbV9tb2RlID0gb3Y1MTlfdmdhX21vZGU7Ci0JCQljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUob3Y1MTlfdmdhX21vZGUpOwotCQl9IGVsc2UgeworCQl9IGVsc2UgaWYgKHNkLT5zaWYpIHsKIAkJCWNhbS0+Y2FtX21vZGUgPSBvdjUxOV9zaWZfbW9kZTsKIAkJCWNhbS0+bm1vZGVzID0gQVJSQVlfU0laRShvdjUxOV9zaWZfbW9kZSk7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBCUklER0VfVzk5NjhDRjoKLQkJY2FtLT5jYW1fbW9kZSA9IHc5OTY4Y2ZfdmdhX21vZGU7Ci0JCWNhbS0+bm1vZGVzID0gQVJSQVlfU0laRSh3OTk2OGNmX3ZnYV9tb2RlKTsKIAkJaWYgKHNkLT5zaWYpCi0JCQljYW0tPm5tb2Rlcy0tOworCQkJY2FtLT5ubW9kZXMgPSBBUlJBWV9TSVpFKHc5OTY4Y2ZfdmdhX21vZGUpIC0gMTsKIAogCQkvKiB3OTk2OGNmIG5lZWRzIGluaXRpYWxpc2F0aW9uIG9uY2UgdGhlIHNlbnNvciBpcyBrbm93biAqLwotCQlpZiAodzk5NjhjZl9pbml0KHNkKSA8IDApCi0JCQlnb3RvIGVycm9yOworCQl3OTk2OGNmX2luaXQoc2QpOwogCQlicmVhazsKIAl9Ci0JZ3NwY2FfZGV2LT5jYW0uY3RybHMgPSBzZC0+Y3RybHM7Ci0JaWYgKHNkLT5zZW5zb3IgPT0gU0VOX09WNzY3MCkKLQkJZ3NwY2FfZGV2LT5jdHJsX2RpcyA9IDEgPDwgQ09MT1JTOwotCWVsc2UKLQkJZ3NwY2FfZGV2LT5jdHJsX2RpcyA9ICgxIDw8IEhGTElQKSB8ICgxIDw8IFZGTElQKTsKLQlzZC0+cXVhbGl0eSA9IFFVQUxJVFlfREVGOwotCWlmIChzZC0+c2Vuc29yID09IFNFTl9PVjc2NDAgfHwKLQkgICAgc2QtPnNlbnNvciA9PSBTRU5fT1Y3NjQ4KQotCQlnc3BjYV9kZXYtPmN0cmxfZGlzIHw9ICgxIDw8IEFVVE9CUklHSFQpIHwgKDEgPDwgQ09OVFJBU1QpOwotCWlmIChzZC0+c2Vuc29yID09IFNFTl9PVjc2NzApCi0JCWdzcGNhX2Rldi0+Y3RybF9kaXMgfD0gMSA8PCBBVVRPQlJJR0hUOwotCS8qIE9WODYxMCBGcmVxdWVuY3kgZmlsdGVyIGNvbnRyb2wgc2hvdWxkIHdvcmsgYnV0IG5lZWRzIHRlc3RpbmcgKi8KLQlpZiAoc2QtPnNlbnNvciA9PSBTRU5fT1Y4NjEwKQotCQlnc3BjYV9kZXYtPmN0cmxfZGlzIHw9IDEgPDwgRlJFUTsKLQkvKiBObyBjb250cm9scyBmb3IgdGhlIE9WMjYxMC9PVjM2MTAgKi8KLQlpZiAoc2QtPnNlbnNvciA9PSBTRU5fT1YyNjEwIHx8IHNkLT5zZW5zb3IgPT0gU0VOX09WMzYxMCkKLQkJZ3NwY2FfZGV2LT5jdHJsX2RpcyB8PSAoMSA8PCBOQ1RSTCkgLSAxOwogCi0JcmV0dXJuIDA7Ci1lcnJvcjoKLQlQREVCVUcoRF9FUlIsICJPVjUxOSBDb25maWcgZmFpbGVkIik7Ci0JcmV0dXJuIC1FQlVTWTsKLX0KLQotLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgcHJvYmUgYW5kIHJlc3VtZSB0aW1lICovCi1zdGF0aWMgaW50IHNkX2luaXQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQotewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlnc3BjYV9kZXYtPmN0cmxfZGlzID0gY3RybF9kaXNbc2QtPnNlbnNvcl07CiAKIAkvKiBpbml0aWFsaXplIHRoZSBzZW5zb3IgKi8KIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKIAljYXNlIFNFTl9PVjI2MTA6Ci0JCWlmICh3cml0ZV9pMmNfcmVndmFscyhzZCwgbm9ybV8yNjEwLCBBUlJBWV9TSVpFKG5vcm1fMjYxMCkpKQotCQkJcmV0dXJuIC1FSU87CisJCXdyaXRlX2kyY19yZWd2YWxzKHNkLCBub3JtXzI2MTAsIEFSUkFZX1NJWkUobm9ybV8yNjEwKSk7CisKIAkJLyogRW5hYmxlIGF1dG9nYWluLCBhdXRvZXhwbywgYXdiLCBiYW5kZmlsdGVyICovCi0JCWlmIChpMmNfd19tYXNrKHNkLCAweDEzLCAweDI3LCAweDI3KSA8IDApCi0JCQlyZXR1cm4gLUVJTzsKKwkJaTJjX3dfbWFzayhzZCwgMHgxMywgMHgyNywgMHgyNyk7CiAJCWJyZWFrOwogCWNhc2UgU0VOX09WMzYxMDoKLQkJaWYgKHdyaXRlX2kyY19yZWd2YWxzKHNkLCBub3JtXzM2MjBiLCBBUlJBWV9TSVpFKG5vcm1fMzYyMGIpKSkKLQkJCXJldHVybiAtRUlPOworCQl3cml0ZV9pMmNfcmVndmFscyhzZCwgbm9ybV8zNjIwYiwgQVJSQVlfU0laRShub3JtXzM2MjBiKSk7CisKIAkJLyogRW5hYmxlIGF1dG9nYWluLCBhdXRvZXhwbywgYXdiLCBiYW5kZmlsdGVyICovCi0JCWlmIChpMmNfd19tYXNrKHNkLCAweDEzLCAweDI3LCAweDI3KSA8IDApCi0JCQlyZXR1cm4gLUVJTzsKKwkJaTJjX3dfbWFzayhzZCwgMHgxMywgMHgyNywgMHgyNyk7CiAJCWJyZWFrOwogCWNhc2UgU0VOX09WNjYyMDoKLQkJaWYgKHdyaXRlX2kyY19yZWd2YWxzKHNkLCBub3JtXzZ4MjAsIEFSUkFZX1NJWkUobm9ybV82eDIwKSkpCi0JCQlyZXR1cm4gLUVJTzsKKwkJd3JpdGVfaTJjX3JlZ3ZhbHMoc2QsIG5vcm1fNngyMCwgQVJSQVlfU0laRShub3JtXzZ4MjApKTsKIAkJYnJlYWs7CiAJY2FzZSBTRU5fT1Y2NjMwOgogCWNhc2UgU0VOX09WNjYzMDhBRjoKIAkJc2QtPmN0cmxzW0NPTlRSQVNUXS5kZWYgPSAyMDA7CiAJCQkJIC8qIFRoZSBkZWZhdWx0IGlzIHRvbyBsb3cgZm9yIHRoZSBvdjY2MzAgKi8KLQkJaWYgKHdyaXRlX2kyY19yZWd2YWxzKHNkLCBub3JtXzZ4MzAsIEFSUkFZX1NJWkUobm9ybV82eDMwKSkpCi0JCQlyZXR1cm4gLUVJTzsKKwkJd3JpdGVfaTJjX3JlZ3ZhbHMoc2QsIG5vcm1fNngzMCwgQVJSQVlfU0laRShub3JtXzZ4MzApKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIC8qCWNhc2UgU0VOX09WNzYxMDogKi8KIC8qCWNhc2UgU0VOX09WNzZCRTogKi8KLQkJaWYgKHdyaXRlX2kyY19yZWd2YWxzKHNkLCBub3JtXzc2MTAsIEFSUkFZX1NJWkUobm9ybV83NjEwKSkpCi0JCQlyZXR1cm4gLUVJTzsKLQkJaWYgKGkyY193X21hc2soc2QsIDB4MGUsIDB4MDAsIDB4NDApKQotCQkJcmV0dXJuIC1FSU87CisJCXdyaXRlX2kyY19yZWd2YWxzKHNkLCBub3JtXzc2MTAsIEFSUkFZX1NJWkUobm9ybV83NjEwKSk7CisJCWkyY193X21hc2soc2QsIDB4MGUsIDB4MDAsIDB4NDApOwogCQlicmVhazsKIAljYXNlIFNFTl9PVjc2MjA6CiAJY2FzZSBTRU5fT1Y3NjIwQUU6Ci0JCWlmICh3cml0ZV9pMmNfcmVndmFscyhzZCwgbm9ybV83NjIwLCBBUlJBWV9TSVpFKG5vcm1fNzYyMCkpKQotCQkJcmV0dXJuIC1FSU87CisJCXdyaXRlX2kyY19yZWd2YWxzKHNkLCBub3JtXzc2MjAsIEFSUkFZX1NJWkUobm9ybV83NjIwKSk7CiAJCWJyZWFrOwogCWNhc2UgU0VOX09WNzY0MDoKIAljYXNlIFNFTl9PVjc2NDg6Ci0JCWlmICh3cml0ZV9pMmNfcmVndmFscyhzZCwgbm9ybV83NjQwLCBBUlJBWV9TSVpFKG5vcm1fNzY0MCkpKQotCQkJcmV0dXJuIC1FSU87CisJCXdyaXRlX2kyY19yZWd2YWxzKHNkLCBub3JtXzc2NDAsIEFSUkFZX1NJWkUobm9ybV83NjQwKSk7CisJCWJyZWFrOworCWNhc2UgU0VOX09WNzY2MDoKKwkJaTJjX3coc2QsIE9WNzY3MF9SMTJfQ09NNywgT1Y3NjcwX0NPTTdfUkVTRVQpOworCQltc2xlZXAoMTQpOworCQlyZWdfdyhzZCwgT1Y1MTlfUjU3X1NOQVBTSE9ULCAweDIzKTsKKwkJd3JpdGVfcmVndmFscyhzZCwgaW5pdF81MTlfb3Y3NjYwLAorCQkJCUFSUkFZX1NJWkUoaW5pdF81MTlfb3Y3NjYwKSk7CisJCXdyaXRlX2kyY19yZWd2YWxzKHNkLCBub3JtXzc2NjAsIEFSUkFZX1NJWkUobm9ybV83NjYwKSk7CisJCXNkLT5nc3BjYV9kZXYuY3Vycl9tb2RlID0gMTsJLyogNjQweDQ4MCAqLworCQlzZC0+ZnJhbWVfcmF0ZSA9IDE1OworCQlvdjUxOV9zZXRfbW9kZShzZCk7CisJCW92NTE5X3NldF9mcihzZCk7CisJCXNkLT5jdHJsc1tDT0xPUlNdLm1heCA9IDQ7CS8qIDAuLjQgKi8KKwkJc2QtPmN0cmxzW0NPTE9SU10udmFsID0KKwkJCXNkLT5jdHJsc1tDT0xPUlNdLmRlZiA9IDI7CisJCXNldGNvbG9ycyhnc3BjYV9kZXYpOworCQlzZC0+Y3RybHNbQ09OVFJBU1RdLm1heCA9IDY7CS8qIDAuLjYgKi8KKwkJc2QtPmN0cmxzW0NPTlRSQVNUXS52YWwgPQorCQkJc2QtPmN0cmxzW0NPTlRSQVNUXS5kZWYgPSAzOworCQlzZXRjb250cmFzdChnc3BjYV9kZXYpOworCQlzZC0+Y3RybHNbQlJJR0hUTkVTU10ubWF4ID0gNjsJLyogMC4uNiAqLworCQlzZC0+Y3RybHNbQlJJR0hUTkVTU10udmFsID0KKwkJCXNkLT5jdHJsc1tCUklHSFRORVNTXS5kZWYgPSAzOworCQlzZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7CisJCXNkX3Jlc2V0X3NuYXBzaG90KGdzcGNhX2Rldik7CisJCW92NTF4X3Jlc3RhcnQoc2QpOworCQlvdjUxeF9zdG9wKHNkKTsJCQkvKiBub3QgaW4gd2luIHRyYWNlcyAqLworCQlvdjUxeF9sZWRfY29udHJvbChzZCwgMCk7CiAJCWJyZWFrOwogCWNhc2UgU0VOX09WNzY3MDoKIAkJc2QtPmN0cmxzW0ZSRVFdLm1heCA9IDM7CS8qIGF1dG8gKi8KIAkJc2QtPmN0cmxzW0ZSRVFdLmRlZiA9IDM7Ci0JCWlmICh3cml0ZV9pMmNfcmVndmFscyhzZCwgbm9ybV83NjcwLCBBUlJBWV9TSVpFKG5vcm1fNzY3MCkpKQotCQkJcmV0dXJuIC1FSU87CisJCXdyaXRlX2kyY19yZWd2YWxzKHNkLCBub3JtXzc2NzAsIEFSUkFZX1NJWkUobm9ybV83NjcwKSk7CiAJCWJyZWFrOwogCWNhc2UgU0VOX09WODYxMDoKLQkJaWYgKHdyaXRlX2kyY19yZWd2YWxzKHNkLCBub3JtXzg2MTAsIEFSUkFZX1NJWkUobm9ybV84NjEwKSkpCi0JCQlyZXR1cm4gLUVJTzsKKwkJd3JpdGVfaTJjX3JlZ3ZhbHMoc2QsIG5vcm1fODYxMCwgQVJSQVlfU0laRShub3JtXzg2MTApKTsKIAkJYnJlYWs7CiAJfQotCXJldHVybiAwOworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7CitlcnJvcjoKKwlQREVCVUcoRF9FUlIsICJPVjUxOSBDb25maWcgZmFpbGVkIik7CisJcmV0dXJuIC1FSU5WQUw7CiB9CiAKIC8qIFNldCB1cCB0aGUgT1Y1MTEvT1Y1MTErIHdpdGggdGhlIGdpdmVuIGltYWdlIHBhcmFtZXRlcnMuCiAgKgogICogRG8gbm90IHB1dCBhbnkgc2Vuc29yLXNwZWNpZmljIGNvZGUgaW4gaGVyZSAoaW5jbHVkaW5nIEkyQyBJL08gZnVuY3Rpb25zKQogICovCi1zdGF0aWMgaW50IG92NTExX21vZGVfaW5pdF9yZWdzKHN0cnVjdCBzZCAqc2QpCitzdGF0aWMgdm9pZCBvdjUxMV9tb2RlX2luaXRfcmVncyhzdHJ1Y3Qgc2QgKnNkKQogewogCWludCBoc2VncywgdnNlZ3MsIHBhY2tldF9zaXplLCBmcHMsIG5lZWRlZDsKIAlpbnQgaW50ZXJsYWNlZCA9IDA7CkBAIC0zMTk5LDcgKzM0MTQsOCBAQAogCWFsdCA9IHVzYl9hbHRudW1fdG9fYWx0c2V0dGluZyhpbnRmLCBzZC0+Z3NwY2FfZGV2LmFsdCk7CiAJaWYgKCFhbHQpIHsKIAkJZXJyKCJDb3VsZG4ndCBnZXQgYWx0c2V0dGluZyIpOwotCQlyZXR1cm4gLUVJTzsKKwkJc2QtPmdzcGNhX2Rldi51c2JfZXJyID0gLUVJTzsKKwkJcmV0dXJuOwogCX0KIAogCXBhY2tldF9zaXplID0gbGUxNl90b19jcHUoYWx0LT5lbmRwb2ludFswXS5kZXNjLndNYXhQYWNrZXRTaXplKTsKQEAgLTMzMDIsOCArMzUxOCw2IEBACiAKIAlyZWdfdyhzZCwgUjUxeF9TWVNfUkVTRVQsIE9WNTExX1JFU0VUX09NTklDRSk7CiAJcmVnX3coc2QsIFI1MXhfU1lTX1JFU0VULCAwKTsKLQotCXJldHVybiAwOwogfQogCiAvKiBTZXRzIHVwIHRoZSBPVjUxOC9PVjUxOCsgd2l0aCB0aGUgZ2l2ZW4gaW1hZ2UgcGFyYW1ldGVycwpAQCAtMzMxMyw3ICszNTI3LDcgQEAKICAqCiAgKiBEbyBub3QgcHV0IGFueSBzZW5zb3Itc3BlY2lmaWMgY29kZSBpbiBoZXJlIChpbmNsdWRpbmcgSTJDIEkvTyBmdW5jdGlvbnMpCiAgKi8KLXN0YXRpYyBpbnQgb3Y1MThfbW9kZV9pbml0X3JlZ3Moc3RydWN0IHNkICpzZCkKK3N0YXRpYyB2b2lkIG92NTE4X21vZGVfaW5pdF9yZWdzKHN0cnVjdCBzZCAqc2QpCiB7CiAJaW50IGhzZWdzLCB2c2VncywgcGFja2V0X3NpemU7CiAJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqYWx0OwpAQCAtMzMyMywxNCArMzUzNywxNCBAQAogCWFsdCA9IHVzYl9hbHRudW1fdG9fYWx0c2V0dGluZyhpbnRmLCBzZC0+Z3NwY2FfZGV2LmFsdCk7CiAJaWYgKCFhbHQpIHsKIAkJZXJyKCJDb3VsZG4ndCBnZXQgYWx0c2V0dGluZyIpOwotCQlyZXR1cm4gLUVJTzsKKwkJc2QtPmdzcGNhX2Rldi51c2JfZXJyID0gLUVJTzsKKwkJcmV0dXJuOwogCX0KIAogCXBhY2tldF9zaXplID0gbGUxNl90b19jcHUoYWx0LT5lbmRwb2ludFswXS5kZXNjLndNYXhQYWNrZXRTaXplKTsKIAlvdjUxOF9yZWdfdzMyKHNkLCBSNTF4X0ZJRk9fUFNJWkUsIHBhY2tldF9zaXplICYgfjcsIDIpOwogCiAJLyoqKioqKioqIFNldCB0aGUgbW9kZSAqKioqKioqKi8KLQogCXJlZ193KHNkLCAweDJiLCAwKTsKIAlyZWdfdyhzZCwgMHgyYywgMCk7CiAJcmVnX3coc2QsIDB4MmQsIDApOwpAQCAtMzM2NCw3ICszNTc4LDcgQEAKIAkvKiBXaW5kb3dzIGRyaXZlciBkb2VzIHRoaXMgaGVyZTsgd2hvIGtub3dzIHdoeSAqLwogCXJlZ193KHNkLCAweDJmLCAweDgwKTsKIAotCS8qKioqKioqKiBTZXQgdGhlIGZyYW1lcmF0ZSAgKioqKioqKiovCisJLyoqKioqKioqIFNldCB0aGUgZnJhbWVyYXRlICoqKioqKioqLwogCXNkLT5jbG9ja2RpdiA9IDE7CiAKIAkvKiBNb2RlIGluZGVwZW5kZW50LCBidXQgZnJhbWVyYXRlIGRlcGVuZGVudCwgcmVncyAqLwpAQCAtMzQyNywxMSArMzY0MSw4IEBACiAJfQogCiAJcmVnX3coc2QsIDB4MmYsIDB4ODApOwotCi0JcmV0dXJuIDA7CiB9CiAKLQogLyogU2V0cyB1cCB0aGUgT1Y1MTkgd2l0aCB0aGUgZ2l2ZW4gaW1hZ2UgcGFyYW1ldGVycwogICoKICAqIE9WNTE5IG5lZWRzIGEgY29tcGxldGVseSBkaWZmZXJlbnQgYXBwcm9hY2gsIHVudGlsIHdlIGNhbiBmaWd1cmUgb3V0IHdoYXQKQEAgLTM0MzksMTIgKzM2NTAsMTIgQEAKICAqCiAgKiBEbyBub3QgcHV0IGFueSBzZW5zb3Itc3BlY2lmaWMgY29kZSBpbiBoZXJlIChpbmNsdWRpbmcgSTJDIEkvTyBmdW5jdGlvbnMpCiAgKi8KLXN0YXRpYyBpbnQgb3Y1MTlfbW9kZV9pbml0X3JlZ3Moc3RydWN0IHNkICpzZCkKK3N0YXRpYyB2b2lkIG92NTE5X21vZGVfaW5pdF9yZWdzKHN0cnVjdCBzZCAqc2QpCiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBvdl9yZWd2YWxzIG1vZGVfaW5pdF81MTlfb3Y3NjcwW10gPSB7CiAJCXsgMHg1ZCwJMHgwMyB9LCAvKiBUdXJuIG9mZiBzdXNwZW5kIG1vZGUgKi8KIAkJeyAweDUzLAkweDlmIH0sIC8qIHdhcyA5YiBpbiAxLjY1LTEuMDggKi8KLQkJeyAweDU0LAkweDBmIH0sIC8qIGJpdDIgKGpwZWcgZW5hYmxlKSAqLworCQl7IE9WNTE5X1I1NF9FTl9DTEsxLCAweDBmIH0sIC8qIGJpdDIgKGpwZWcgZW5hYmxlKSAqLwogCQl7IDB4YTIsCTB4MjAgfSwgLyogYTItYTUgYXJlIHVuZG9jdW1lbnRlZCAqLwogCQl7IDB4YTMsCTB4MTggfSwKIAkJeyAweGE0LAkweDA0IH0sCkBAIC0zNDY3LDcgKzM2NzgsNyBAQAogCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3ZfcmVndmFscyBtb2RlX2luaXRfNTE5W10gPSB7CiAJCXsgMHg1ZCwJMHgwMyB9LCAvKiBUdXJuIG9mZiBzdXNwZW5kIG1vZGUgKi8KIAkJeyAweDUzLAkweDlmIH0sIC8qIHdhcyA5YiBpbiAxLjY1LTEuMDggKi8KLQkJeyAweDU0LAkweDBmIH0sIC8qIGJpdDIgKGpwZWcgZW5hYmxlKSAqLworCQl7IE9WNTE5X1I1NF9FTl9DTEsxLCAweDBmIH0sIC8qIGJpdDIgKGpwZWcgZW5hYmxlKSAqLwogCQl7IDB4YTIsCTB4MjAgfSwgLyogYTItYTUgYXJlIHVuZG9jdW1lbnRlZCAqLwogCQl7IDB4YTMsCTB4MTggfSwKIAkJeyAweGE0LAkweDA0IH0sCkBAIC0zNDg2LDE5ICszNjk3LDIxIEBACiAJfTsKIAogCS8qKioqKioqKiBTZXQgdGhlIG1vZGUgKioqKioqKiovCi0JaWYgKHNkLT5zZW5zb3IgIT0gU0VOX09WNzY3MCkgewotCQlpZiAod3JpdGVfcmVndmFscyhzZCwgbW9kZV9pbml0XzUxOSwKLQkJCQkgIEFSUkFZX1NJWkUobW9kZV9pbml0XzUxOSkpKQotCQkJcmV0dXJuIC1FSU87CisJc3dpdGNoIChzZC0+c2Vuc29yKSB7CisJZGVmYXVsdDoKKwkJd3JpdGVfcmVndmFscyhzZCwgbW9kZV9pbml0XzUxOSwgQVJSQVlfU0laRShtb2RlX2luaXRfNTE5KSk7CiAJCWlmIChzZC0+c2Vuc29yID09IFNFTl9PVjc2NDAgfHwKIAkJICAgIHNkLT5zZW5zb3IgPT0gU0VOX09WNzY0OCkgewogCQkJLyogU2VsZWN0IDgtYml0IGlucHV0IG1vZGUgKi8KIAkJCXJlZ193X21hc2soc2QsIE9WNTE5X1IyMF9ERlIsIDB4MTAsIDB4MTApOwogCQl9Ci0JfSBlbHNlIHsKLQkJaWYgKHdyaXRlX3JlZ3ZhbHMoc2QsIG1vZGVfaW5pdF81MTlfb3Y3NjcwLAotCQkJCSAgQVJSQVlfU0laRShtb2RlX2luaXRfNTE5X292NzY3MCkpKQotCQkJcmV0dXJuIC1FSU87CisJCWJyZWFrOworCWNhc2UgU0VOX09WNzY2MDoKKwkJcmV0dXJuOwkJLyogZG9uZSBieSBvdjUxOV9zZXRfbW9kZS9mcigpICovCisJY2FzZSBTRU5fT1Y3NjcwOgorCQl3cml0ZV9yZWd2YWxzKHNkLCBtb2RlX2luaXRfNTE5X292NzY3MCwKKwkJCQlBUlJBWV9TSVpFKG1vZGVfaW5pdF81MTlfb3Y3NjcwKSk7CisJCWJyZWFrOwogCX0KIAogCXJlZ193KHNkLCBPVjUxOV9SMTBfSF9TSVpFLAlzZC0+Z3NwY2FfZGV2LndpZHRoID4+IDQpOwpAQCAtMzU5NCwxNyArMzgwNywxNiBAQAogCQl9CiAJCWJyZWFrOwogCX0KLQlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtb2RlX2luaXRfb3Zfc2Vuc29yX3JlZ3Moc3RydWN0IHNkICpzZCkKK3N0YXRpYyB2b2lkIG1vZGVfaW5pdF9vdl9zZW5zb3JfcmVncyhzdHJ1Y3Qgc2QgKnNkKQogewogCXN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldjsKIAlpbnQgcXZnYSwgeHN0YXJ0LCB4ZW5kLCB5c3RhcnQsIHllbmQ7Ci0JX191OCB2OworCXU4IHY7CiAKIAlnc3BjYV9kZXYgPSAmc2QtPmdzcGNhX2RldjsKLQlxdmdhID0gZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGVbKGludCkgZ3NwY2FfZGV2LT5jdXJyX21vZGVdLnByaXYgJiAxOworCXF2Z2EgPSBnc3BjYV9kZXYtPmNhbS5jYW1fbW9kZVtnc3BjYV9kZXYtPmN1cnJfbW9kZV0ucHJpdiAmIDE7CiAKIAkvKioqKioqKiogTW9kZSAoVkdBL1FWR0EpIGFuZCBzZW5zb3Igc3BlY2lmaWMgcmVncyAqKioqKioqKi8KIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKQEAgLTM2MTYsNyArMzgyOCw3IEBACiAJCWkyY193X21hc2soc2QsIDB4MmQsIHF2Z2EgPyAweDQwIDogMHgwMCwgMHg0MCk7CiAJCWkyY193X21hc2soc2QsIDB4NjcsIHF2Z2EgPyAweGYwIDogMHg5MCwgMHhmMCk7CiAJCWkyY193X21hc2soc2QsIDB4NzQsIHF2Z2EgPyAweDIwIDogMHgwMCwgMHgyMCk7Ci0JCXJldHVybiAwOworCQlyZXR1cm47CiAJY2FzZSBTRU5fT1YzNjEwOgogCQlpZiAocXZnYSkgewogCQkJeHN0YXJ0ID0gKDEwNDAgLSBnc3BjYV9kZXYtPndpZHRoKSAvIDIgKyAoMHgxZiA8PCA0KTsKQEAgLTM2NDAsNyArMzg1Miw3IEBACiAJCWkyY193KHNkLCAweDE4LCB4ZW5kID4+IDQpOwogCQlpMmNfdyhzZCwgMHgxOSwgeXN0YXJ0ID4+IDMpOwogCQlpMmNfdyhzZCwgMHgxYSwgeWVuZCA+PiAzKTsKLQkJcmV0dXJuIDA7CisJCXJldHVybjsKIAljYXNlIFNFTl9PVjg2MTA6CiAJCS8qIEZvciBPVjg2MTAgcXZnYSBtZWFucyBxc3ZnYSAqLwogCQlpMmNfd19tYXNrKHNkLCBPVjc2MTBfUkVHX0NPTV9DLCBxdmdhID8gKDEgPDwgNSkgOiAwLCAxIDw8IDUpOwpAQCAtMzY4NywxMSArMzg5OSwxMSBAQAogCQkvKiBzZXQgQ09NN19GTVRfVkdBIG9yIENPTTdfRk1UX1FWR0EKIAkJICogZG8gd2UgbmVlZCB0byBzZXQgYW55dGhpbmcgZWxzZT8KIAkJICoJSFNUQVJUIGV0YyBhcmUgc2V0IGluIHNldF9vdl9zZW5zb3Jfd2luZG93IGl0c2VsZiAqLwotCQlpMmNfd19tYXNrKHNkLCBPVjc2NzBfUkVHX0NPTTcsCisJCWkyY193X21hc2soc2QsIE9WNzY3MF9SMTJfQ09NNywKIAkJCSBxdmdhID8gT1Y3NjcwX0NPTTdfRk1UX1FWR0EgOiBPVjc2NzBfQ09NN19GTVRfVkdBLAogCQkJIE9WNzY3MF9DT003X0ZNVF9NQVNLKTsKIAkJaTJjX3dfbWFzayhzZCwgMHgxMywgMHgwMCwgMHgyMCk7IC8qIFNlbGVjdCAxNiBiaXQgZGF0YSBidXMgKi8KLQkJaTJjX3dfbWFzayhzZCwgT1Y3NjcwX1JFR19DT004LCBPVjc2NzBfQ09NOF9BV0IsCisJCWkyY193X21hc2soc2QsIE9WNzY3MF9SMTNfQ09NOCwgT1Y3NjcwX0NPTThfQVdCLAogCQkJCU9WNzY3MF9DT004X0FXQik7CiAJCWlmIChxdmdhKSB7CQkvKiBRVkdBIGZyb20gb3Y3NjcwLmMgYnkKIAkJCQkJICogSm9uYXRoYW4gQ29yYmV0ICovCkBAIC0zNzA3LDIxICszOTE5LDIxIEBACiAJCX0KIAkJLyogT1Y3NjcwIGhhcmR3YXJlIHdpbmRvdyByZWdpc3RlcnMgYXJlIHNwbGl0IGFjcm9zcwogCQkgKiBtdWx0aXBsZSBsb2NhdGlvbnMgKi8KLQkJaTJjX3coc2QsIE9WNzY3MF9SRUdfSFNUQVJULCB4c3RhcnQgPj4gMyk7Ci0JCWkyY193KHNkLCBPVjc2NzBfUkVHX0hTVE9QLCB4ZW5kID4+IDMpOwotCQl2ID0gaTJjX3Ioc2QsIE9WNzY3MF9SRUdfSFJFRik7CisJCWkyY193KHNkLCBPVjc2NzBfUjE3X0hTVEFSVCwgeHN0YXJ0ID4+IDMpOworCQlpMmNfdyhzZCwgT1Y3NjcwX1IxOF9IU1RPUCwgeGVuZCA+PiAzKTsKKwkJdiA9IGkyY19yKHNkLCBPVjc2NzBfUjMyX0hSRUYpOwogCQl2ID0gKHYgJiAweGMwKSB8ICgoeGVuZCAmIDB4NykgPDwgMykgfCAoeHN0YXJ0ICYgMHgwNyk7CiAJCW1zbGVlcCgxMCk7CS8qIG5lZWQgdG8gc2xlZXAgYmV0d2VlbiByZWFkIGFuZCB3cml0ZSB0bwogCQkJCSAqIHNhbWUgcmVnISAqLwotCQlpMmNfdyhzZCwgT1Y3NjcwX1JFR19IUkVGLCB2KTsKKwkJaTJjX3coc2QsIE9WNzY3MF9SMzJfSFJFRiwgdik7CiAKLQkJaTJjX3coc2QsIE9WNzY3MF9SRUdfVlNUQVJULCB5c3RhcnQgPj4gMik7Ci0JCWkyY193KHNkLCBPVjc2NzBfUkVHX1ZTVE9QLCB5ZW5kID4+IDIpOwotCQl2ID0gaTJjX3Ioc2QsIE9WNzY3MF9SRUdfVlJFRik7CisJCWkyY193KHNkLCBPVjc2NzBfUjE5X1ZTVEFSVCwgeXN0YXJ0ID4+IDIpOworCQlpMmNfdyhzZCwgT1Y3NjcwX1IxQV9WU1RPUCwgeWVuZCA+PiAyKTsKKwkJdiA9IGkyY19yKHNkLCBPVjc2NzBfUjAzX1ZSRUYpOwogCQl2ID0gKHYgJiAweGMwKSB8ICgoeWVuZCAmIDB4MykgPDwgMikgfCAoeXN0YXJ0ICYgMHgwMyk7CiAJCW1zbGVlcCgxMCk7CS8qIG5lZWQgdG8gc2xlZXAgYmV0d2VlbiByZWFkIGFuZCB3cml0ZSB0bwogCQkJCSAqIHNhbWUgcmVnISAqLwotCQlpMmNfdyhzZCwgT1Y3NjcwX1JFR19WUkVGLCB2KTsKKwkJaTJjX3coc2QsIE9WNzY3MF9SMDNfVlJFRiwgdik7CiAJCWJyZWFrOwogCWNhc2UgU0VOX09WNjYyMDoKIAkJaTJjX3dfbWFzayhzZCwgMHgxNCwgcXZnYSA/IDB4MjAgOiAweDAwLCAweDIwKTsKQEAgLTM3MzQsNDYgKzM5NDYsNTAgQEAKIAkJaTJjX3dfbWFzayhzZCwgMHgxMiwgMHgwNCwgMHgwNik7IC8qIEFXQjogMSBUZXN0IHBhdHRlcm46IDAgKi8KIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybjsKIAl9CiAKIAkvKioqKioqKiogQ2xvY2sgcHJvZ3JhbW1pbmcgKioqKioqKiovCiAJaTJjX3coc2QsIDB4MTEsIHNkLT5jbG9ja2Rpdik7Ci0KLQlyZXR1cm4gMDsKIH0KIAorLyogdGhpcyBmdW5jdGlvbiB3b3JrcyBmb3IgYnJpZGdlIG92NTE5IGFuZCBzZW5zb3JzIG92NzY2MCBhbmQgb3Y3NjcwIG9ubHkgKi8KIHN0YXRpYyB2b2lkIHNldGh2ZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCi0JaWYgKHNkLT5zZW5zb3IgIT0gU0VOX09WNzY3MCkKLQkJcmV0dXJuOwogCWlmIChzZC0+Z3NwY2FfZGV2LnN0cmVhbWluZykKLQkJb3Y1MXhfc3RvcChzZCk7Ci0JaTJjX3dfbWFzayhzZCwgT1Y3NjcwX1JFR19NVkZQLAorCQlyZWdfdyhzZCwgT1Y1MTlfUjUxX1JFU0VUMSwgMHgwZik7CS8qIGJsb2NrIHN0cmVhbSAqLworCWkyY193X21hc2soc2QsIE9WNzY3MF9SMUVfTVZGUCwKIAkJT1Y3NjcwX01WRlBfTUlSUk9SICogc2QtPmN0cmxzW0hGTElQXS52YWwKIAkJCXwgT1Y3NjcwX01WRlBfVkZMSVAgKiBzZC0+Y3RybHNbVkZMSVBdLnZhbCwKIAkJT1Y3NjcwX01WRlBfTUlSUk9SIHwgT1Y3NjcwX01WRlBfVkZMSVApOwogCWlmIChzZC0+Z3NwY2FfZGV2LnN0cmVhbWluZykKLQkJb3Y1MXhfcmVzdGFydChzZCk7CisJCXJlZ193KHNkLCBPVjUxOV9SNTFfUkVTRVQxLCAweDAwKTsJLyogcmVzdGFydCBzdHJlYW0gKi8KIH0KIAotc3RhdGljIGludCBzZXRfb3Zfc2Vuc29yX3dpbmRvdyhzdHJ1Y3Qgc2QgKnNkKQorc3RhdGljIHZvaWQgc2V0X292X3NlbnNvcl93aW5kb3coc3RydWN0IHNkICpzZCkKIHsKIAlzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXY7CiAJaW50IHF2Z2EsIGNyb3A7CiAJaW50IGh3c2Jhc2UsIGh3ZWJhc2UsIHZ3c2Jhc2UsIHZ3ZWJhc2UsIGh3c2NhbGUsIHZ3c2NhbGU7Ci0JaW50IHJldDsKIAogCS8qIG1vZGUgc2V0dXAgaXMgZnVsbHkgaGFuZGxlZCBpbiBtb2RlX2luaXRfb3Zfc2Vuc29yX3JlZ3MgZm9yIHRoZXNlICovCi0JaWYgKHNkLT5zZW5zb3IgPT0gU0VOX09WMjYxMCB8fCBzZC0+c2Vuc29yID09IFNFTl9PVjM2MTAgfHwKLQkgICAgc2QtPnNlbnNvciA9PSBTRU5fT1Y3NjcwKQotCQlyZXR1cm4gbW9kZV9pbml0X292X3NlbnNvcl9yZWdzKHNkKTsKKwlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKKwljYXNlIFNFTl9PVjI2MTA6CisJY2FzZSBTRU5fT1YzNjEwOgorCWNhc2UgU0VOX09WNzY3MDoKKwkJbW9kZV9pbml0X292X3NlbnNvcl9yZWdzKHNkKTsKKwkJcmV0dXJuOworCWNhc2UgU0VOX09WNzY2MDoKKwkJb3Y1MTlfc2V0X21vZGUoc2QpOworCQlvdjUxOV9zZXRfZnIoc2QpOworCQlyZXR1cm47CisJfQogCiAJZ3NwY2FfZGV2ID0gJnNkLT5nc3BjYV9kZXY7Ci0JcXZnYSA9IGdzcGNhX2Rldi0+Y2FtLmNhbV9tb2RlWyhpbnQpIGdzcGNhX2Rldi0+Y3Vycl9tb2RlXS5wcml2ICYgMTsKLQljcm9wID0gZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGVbKGludCkgZ3NwY2FfZGV2LT5jdXJyX21vZGVdLnByaXYgJiAyOworCXF2Z2EgPSBnc3BjYV9kZXYtPmNhbS5jYW1fbW9kZVtnc3BjYV9kZXYtPmN1cnJfbW9kZV0ucHJpdiAmIDE7CisJY3JvcCA9IGdzcGNhX2Rldi0+Y2FtLmNhbV9tb2RlW2dzcGNhX2Rldi0+Y3Vycl9tb2RlXS5wcml2ICYgMjsKIAogCS8qIFRoZSBkaWZmZXJlbnQgc2Vuc29yIElDcyBoYW5kbGUgc2V0dGluZyB1cCBvZiB3aW5kb3cgZGlmZmVyZW50bHkuCiAJICogSUYgWU9VIFNFVCBJVCBXUk9ORywgWU9VIFdJTEwgR0VUIEFMTCBaRVJPIElTT0MgREFUQSBGUk9NIE9WNTF4ISEgKi8KQEAgLTM4MjAsNyArNDAzNiw3IEBACiAJCXZ3c2Jhc2UgPSB2d2ViYXNlID0gMHgwMzsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybjsKIAl9CiAKIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKQEAgLTM4NTUsMjMgKzQwNzEsMTggQEAKIAkJfQogCX0KIAotCXJldCA9IG1vZGVfaW5pdF9vdl9zZW5zb3JfcmVncyhzZCk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7CisJbW9kZV9pbml0X292X3NlbnNvcl9yZWdzKHNkKTsKIAogCWkyY193KHNkLCAweDE3LCBod3NiYXNlKTsKIAlpMmNfdyhzZCwgMHgxOCwgaHdlYmFzZSArIChzZC0+c2Vuc29yX3dpZHRoID4+IGh3c2NhbGUpKTsKIAlpMmNfdyhzZCwgMHgxOSwgdndzYmFzZSk7CiAJaTJjX3coc2QsIDB4MWEsIHZ3ZWJhc2UgKyAoc2QtPnNlbnNvcl9oZWlnaHQgPj4gdndzY2FsZSkpOwotCi0JcmV0dXJuIDA7CiB9CiAKIC8qIC0tIHN0YXJ0IHRoZSBjYW1lcmEgLS0gKi8KIHN0YXRpYyBpbnQgc2Rfc3RhcnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlpbnQgcmV0ID0gMDsKIAogCS8qIERlZmF1bHQgZm9yIG1vc3QgYnJpZGdlcywgYWxsb3cgYnJpZGdlX21vZGVfaW5pdF9yZWdzIHRvIG92ZXJyaWRlICovCiAJc2QtPnNlbnNvcl93aWR0aCA9IHNkLT5nc3BjYV9kZXYud2lkdGg7CkBAIC0zODgwLDUwICs0MDkxLDQ2IEBACiAJc3dpdGNoIChzZC0+YnJpZGdlKSB7CiAJY2FzZSBCUklER0VfT1Y1MTE6CiAJY2FzZSBCUklER0VfT1Y1MTFQTFVTOgotCQlyZXQgPSBvdjUxMV9tb2RlX2luaXRfcmVncyhzZCk7CisJCW92NTExX21vZGVfaW5pdF9yZWdzKHNkKTsKIAkJYnJlYWs7CiAJY2FzZSBCUklER0VfT1Y1MTg6CiAJY2FzZSBCUklER0VfT1Y1MThQTFVTOgotCQlyZXQgPSBvdjUxOF9tb2RlX2luaXRfcmVncyhzZCk7CisJCW92NTE4X21vZGVfaW5pdF9yZWdzKHNkKTsKIAkJYnJlYWs7CiAJY2FzZSBCUklER0VfT1Y1MTk6Ci0JCXJldCA9IG92NTE5X21vZGVfaW5pdF9yZWdzKHNkKTsKKwkJb3Y1MTlfbW9kZV9pbml0X3JlZ3Moc2QpOwogCQlicmVhazsKIAkvKiBjYXNlIEJSSURHRV9PVkZYMjogbm90aGluZyB0byBkbyAqLwogCWNhc2UgQlJJREdFX1c5OTY4Q0Y6Ci0JCXJldCA9IHc5OTY4Y2ZfbW9kZV9pbml0X3JlZ3Moc2QpOworCQl3OTk2OGNmX21vZGVfaW5pdF9yZWdzKHNkKTsKIAkJYnJlYWs7CiAJfQotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dDsKIAotCXJldCA9IHNldF9vdl9zZW5zb3Jfd2luZG93KHNkKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBvdXQ7CisJc2V0X292X3NlbnNvcl93aW5kb3coc2QpOwogCi0Jc2V0Y29udHJhc3QoZ3NwY2FfZGV2KTsKLQlzZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7Ci0Jc2V0Y29sb3JzKGdzcGNhX2Rldik7Ci0Jc2V0aHZmbGlwKGdzcGNhX2Rldik7Ci0Jc2V0YXV0b2JyaWdodChnc3BjYV9kZXYpOwotCXNldGZyZXFfaShzZCk7CisJaWYgKCEoc2QtPmdzcGNhX2Rldi5jdHJsX2RpcyAmICgxIDw8IENPTlRSQVNUKSkpCisJCXNldGNvbnRyYXN0KGdzcGNhX2Rldik7CisJaWYgKCEoc2QtPmdzcGNhX2Rldi5jdHJsX2RpcyAmICgxIDw8IEJSSUdIVE5FU1MpKSkKKwkJc2V0YnJpZ2h0bmVzcyhnc3BjYV9kZXYpOworCWlmICghKHNkLT5nc3BjYV9kZXYuY3RybF9kaXMgJiAoMSA8PCBDT0xPUlMpKSkKKwkJc2V0Y29sb3JzKGdzcGNhX2Rldik7CisJaWYgKCEoc2QtPmdzcGNhX2Rldi5jdHJsX2RpcyAmICgoMSA8PCBIRkxJUCkgfCAoMSA8PCBWRkxJUCkpKSkKKwkJc2V0aHZmbGlwKGdzcGNhX2Rldik7CisJaWYgKCEoc2QtPmdzcGNhX2Rldi5jdHJsX2RpcyAmICgxIDw8IEFVVE9CUklHSFQpKSkKKwkJc2V0YXV0b2JyaWdodChnc3BjYV9kZXYpOworCWlmICghKHNkLT5nc3BjYV9kZXYuY3RybF9kaXMgJiAoMSA8PCBGUkVRKSkpCisJCXNldGZyZXFfaShzZCk7CiAKIAkvKiBGb3JjZSBjbGVhciBzbmFwc2hvdCBzdGF0ZSBpbiBjYXNlIHRoZSBzbmFwc2hvdCBidXR0b24gd2FzCiAJICAgcHJlc3NlZCB3aGlsZSB3ZSB3ZXJlbid0IHN0cmVhbWluZyAqLwogCXNkLT5zbmFwc2hvdF9uZWVkc19yZXNldCA9IDE7CiAJc2RfcmVzZXRfc25hcHNob3QoZ3NwY2FfZGV2KTsKLQlzZC0+c25hcHNob3RfcHJlc3NlZCA9IDA7CiAKIAlzZC0+Zmlyc3RfZnJhbWUgPSAzOwogCi0JcmV0ID0gb3Y1MXhfcmVzdGFydChzZCk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gb3V0OworCW92NTF4X3Jlc3RhcnQoc2QpOwogCW92NTF4X2xlZF9jb250cm9sKHNkLCAxKTsKLQlyZXR1cm4gMDsKLW91dDoKLQlQREVCVUcoRF9FUlIsICJjYW1lcmEgc3RhcnQgZXJyb3I6JWQiLCByZXQpOwotCXJldHVybiByZXQ7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKIH0KIAogc3RhdGljIHZvaWQgc2Rfc3RvcE4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQpAQCAtMzkzOCw4ICs0MTQ1LDIxIEBACiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCisJaWYgKCFzZC0+Z3NwY2FfZGV2LnByZXNlbnQpCisJCXJldHVybjsKIAlpZiAoc2QtPmJyaWRnZSA9PSBCUklER0VfVzk5NjhDRikKIAkJdzk5NjhjZl9zdG9wMChzZCk7CisKKyNpZiBkZWZpbmVkKENPTkZJR19JTlBVVCkgfHwgZGVmaW5lZChDT05GSUdfSU5QVVRfTU9EVUxFKQorCS8qIElmIHRoZSBsYXN0IGJ1dHRvbiBzdGF0ZSBpcyBwcmVzc2VkLCByZWxlYXNlIGl0IG5vdyEgKi8KKwlpZiAoc2QtPnNuYXBzaG90X3ByZXNzZWQpIHsKKwkJaW5wdXRfcmVwb3J0X2tleShnc3BjYV9kZXYtPmlucHV0X2RldiwgS0VZX0NBTUVSQSwgMCk7CisJCWlucHV0X3N5bmMoZ3NwY2FfZGV2LT5pbnB1dF9kZXYpOworCQlzZC0+c25hcHNob3RfcHJlc3NlZCA9IDA7CisJfQorI2VuZGlmCisJaWYgKHNkLT5icmlkZ2UgPT0gQlJJREdFX09WNTE5KQorCQlyZWdfdyhzZCwgT1Y1MTlfUjU3X1NOQVBTSE9ULCAweDIzKTsKIH0KIAogc3RhdGljIHZvaWQgb3Y1MXhfaGFuZGxlX2J1dHRvbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHU4IHN0YXRlKQpAQCAtNDE2MCw2ICs0MzgwLDIyIEBACiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCWludCB2YWw7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBvdl9pMmNfcmVndmFscyBicml0Xzc2NjBbXVs3XSA9IHsKKwkJe3sweDBmLCAweDZhfSwgezB4MjQsIDB4NDB9LCB7MHgyNSwgMHgyYn0sIHsweDI2LCAweDkwfSwKKwkJCXsweDI3LCAweGUwfSwgezB4MjgsIDB4ZTB9LCB7MHgyYywgMHhlMH19LAorCQl7ezB4MGYsIDB4NmF9LCB7MHgyNCwgMHg1MH0sIHsweDI1LCAweDQwfSwgezB4MjYsIDB4YTF9LAorCQkJezB4MjcsIDB4YzB9LCB7MHgyOCwgMHhjMH0sIHsweDJjLCAweGMwfX0sCisJCXt7MHgwZiwgMHg2YX0sIHsweDI0LCAweDY4fSwgezB4MjUsIDB4NTh9LCB7MHgyNiwgMHhjMn0sCisJCQl7MHgyNywgMHhhMH0sIHsweDI4LCAweGEwfSwgezB4MmMsIDB4YTB9fSwKKwkJe3sweDBmLCAweDZhfSwgezB4MjQsIDB4NzB9LCB7MHgyNSwgMHg2OH0sIHsweDI2LCAweGQzfSwKKwkJCXsweDI3LCAweDgwfSwgezB4MjgsIDB4ODB9LCB7MHgyYywgMHg4MH19LAorCQl7ezB4MGYsIDB4NmF9LCB7MHgyNCwgMHg4MH0sIHsweDI1LCAweDcwfSwgezB4MjYsIDB4ZDN9LAorCQkJezB4MjcsIDB4MjB9LCB7MHgyOCwgMHgyMH0sIHsweDJjLCAweDIwfX0sCisJCXt7MHgwZiwgMHg2YX0sIHsweDI0LCAweDg4fSwgezB4MjUsIDB4Nzh9LCB7MHgyNiwgMHhkM30sCisJCQl7MHgyNywgMHg0MH0sIHsweDI4LCAweDQwfSwgezB4MmMsIDB4NDB9fSwKKwkJe3sweDBmLCAweDZhfSwgezB4MjQsIDB4OTB9LCB7MHgyNSwgMHg4MH0sIHsweDI2LCAweGQ0fSwKKwkJCXsweDI3LCAweDYwfSwgezB4MjgsIDB4NjB9LCB7MHgyYywgMHg2MH19CisJfTsKIAogCXZhbCA9IHNkLT5jdHJsc1tCUklHSFRORVNTXS52YWw7CiAJc3dpdGNoIChzZC0+c2Vuc29yKSB7CkBAIC00MTc5LDEwICs0NDE1LDE0IEBACiAJCWlmICghc2QtPmN0cmxzW0FVVE9CUklHSFRdLnZhbCkKIAkJCWkyY193KHNkLCBPVjc2MTBfUkVHX0JSVCwgdmFsKTsKIAkJYnJlYWs7CisJY2FzZSBTRU5fT1Y3NjYwOgorCQl3cml0ZV9pMmNfcmVndmFscyhzZCwgYnJpdF83NjYwW3ZhbF0sCisJCQkJQVJSQVlfU0laRShicml0Xzc2NjBbMF0pKTsKKwkJYnJlYWs7CiAJY2FzZSBTRU5fT1Y3NjcwOgogLyp3aW4gdHJhY2UKLSAqCQlpMmNfd19tYXNrKHNkLCBPVjc2NzBfUkVHX0NPTTgsIDAsIE9WNzY3MF9DT004X0FFQyk7ICovCi0JCWkyY193KHNkLCBPVjc2NzBfUkVHX0JSSUdIVCwgb3Y3NjcwX2Fic190b19zbSh2YWwpKTsKKyAqCQlpMmNfd19tYXNrKHNkLCBPVjc2NzBfUjEzX0NPTTgsIDAsIE9WNzY3MF9DT004X0FFQyk7ICovCisJCWkyY193KHNkLCBPVjc2NzBfUjU1X0JSSUdIVCwgb3Y3NjcwX2Fic190b19zbSh2YWwpKTsKIAkJYnJlYWs7CiAJfQogfQpAQCAtNDE5MSw2ICs0NDMxLDY0IEBACiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCWludCB2YWw7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBvdl9pMmNfcmVndmFscyBjb250cmFzdF83NjYwW11bMzFdID0geworCQl7ezB4NmMsIDB4ZjB9LCB7MHg2ZCwgMHhmMH0sIHsweDZlLCAweGY4fSwgezB4NmYsIDB4YTB9LAorCQkgezB4NzAsIDB4NTh9LCB7MHg3MSwgMHgzOH0sIHsweDcyLCAweDMwfSwgezB4NzMsIDB4MzB9LAorCQkgezB4NzQsIDB4Mjh9LCB7MHg3NSwgMHgyOH0sIHsweDc2LCAweDI0fSwgezB4NzcsIDB4MjR9LAorCQkgezB4NzgsIDB4MjJ9LCB7MHg3OSwgMHgyOH0sIHsweDdhLCAweDJhfSwgezB4N2IsIDB4MzR9LAorCQkgezB4N2MsIDB4MGZ9LCB7MHg3ZCwgMHgxZX0sIHsweDdlLCAweDNkfSwgezB4N2YsIDB4NjV9LAorCQkgezB4ODAsIDB4NzB9LCB7MHg4MSwgMHg3N30sIHsweDgyLCAweDdkfSwgezB4ODMsIDB4ODN9LAorCQkgezB4ODQsIDB4ODh9LCB7MHg4NSwgMHg4ZH0sIHsweDg2LCAweDk2fSwgezB4ODcsIDB4OWZ9LAorCQkgezB4ODgsIDB4YjB9LCB7MHg4OSwgMHhjNH0sIHsweDhhLCAweGQ5fX0sCisJCXt7MHg2YywgMHhmMH0sIHsweDZkLCAweGYwfSwgezB4NmUsIDB4Zjh9LCB7MHg2ZiwgMHg5NH0sCisJCSB7MHg3MCwgMHg1OH0sIHsweDcxLCAweDQwfSwgezB4NzIsIDB4MzB9LCB7MHg3MywgMHgzMH0sCisJCSB7MHg3NCwgMHgzMH0sIHsweDc1LCAweDMwfSwgezB4NzYsIDB4MmN9LCB7MHg3NywgMHgyNH0sCisJCSB7MHg3OCwgMHgyMn0sIHsweDc5LCAweDI4fSwgezB4N2EsIDB4MmF9LCB7MHg3YiwgMHgzMX0sCisJCSB7MHg3YywgMHgwZn0sIHsweDdkLCAweDFlfSwgezB4N2UsIDB4M2R9LCB7MHg3ZiwgMHg2Mn0sCisJCSB7MHg4MCwgMHg2ZH0sIHsweDgxLCAweDc1fSwgezB4ODIsIDB4N2J9LCB7MHg4MywgMHg4MX0sCisJCSB7MHg4NCwgMHg4N30sIHsweDg1LCAweDhkfSwgezB4ODYsIDB4OTh9LCB7MHg4NywgMHhhMX0sCisJCSB7MHg4OCwgMHhiMn0sIHsweDg5LCAweGM2fSwgezB4OGEsIDB4ZGJ9fSwKKwkJe3sweDZjLCAweGYwfSwgezB4NmQsIDB4ZjB9LCB7MHg2ZSwgMHhmMH0sIHsweDZmLCAweDg0fSwKKwkJIHsweDcwLCAweDU4fSwgezB4NzEsIDB4NDh9LCB7MHg3MiwgMHg0MH0sIHsweDczLCAweDQwfSwKKwkJIHsweDc0LCAweDI4fSwgezB4NzUsIDB4Mjh9LCB7MHg3NiwgMHgyOH0sIHsweDc3LCAweDI0fSwKKwkJIHsweDc4LCAweDI2fSwgezB4NzksIDB4Mjh9LCB7MHg3YSwgMHgyOH0sIHsweDdiLCAweDM0fSwKKwkJIHsweDdjLCAweDBmfSwgezB4N2QsIDB4MWV9LCB7MHg3ZSwgMHgzY30sIHsweDdmLCAweDVkfSwKKwkJIHsweDgwLCAweDY4fSwgezB4ODEsIDB4NzF9LCB7MHg4MiwgMHg3OX0sIHsweDgzLCAweDgxfSwKKwkJIHsweDg0LCAweDg2fSwgezB4ODUsIDB4OGJ9LCB7MHg4NiwgMHg5NX0sIHsweDg3LCAweDllfSwKKwkJIHsweDg4LCAweGIxfSwgezB4ODksIDB4YzV9LCB7MHg4YSwgMHhkOX19LAorCQl7ezB4NmMsIDB4ZjB9LCB7MHg2ZCwgMHhmMH0sIHsweDZlLCAweGYwfSwgezB4NmYsIDB4NzB9LAorCQkgezB4NzAsIDB4NTh9LCB7MHg3MSwgMHg1OH0sIHsweDcyLCAweDQ4fSwgezB4NzMsIDB4NDh9LAorCQkgezB4NzQsIDB4Mzh9LCB7MHg3NSwgMHg0MH0sIHsweDc2LCAweDM0fSwgezB4NzcsIDB4MzR9LAorCQkgezB4NzgsIDB4MmV9LCB7MHg3OSwgMHgyOH0sIHsweDdhLCAweDI0fSwgezB4N2IsIDB4MjJ9LAorCQkgezB4N2MsIDB4MGZ9LCB7MHg3ZCwgMHgxZX0sIHsweDdlLCAweDNjfSwgezB4N2YsIDB4NTh9LAorCQkgezB4ODAsIDB4NjN9LCB7MHg4MSwgMHg2ZX0sIHsweDgyLCAweDc3fSwgezB4ODMsIDB4ODB9LAorCQkgezB4ODQsIDB4ODd9LCB7MHg4NSwgMHg4Zn0sIHsweDg2LCAweDljfSwgezB4ODcsIDB4YTl9LAorCQkgezB4ODgsIDB4YzB9LCB7MHg4OSwgMHhkNH0sIHsweDhhLCAweGU2fX0sCisJCXt7MHg2YywgMHhhMH0sIHsweDZkLCAweGYwfSwgezB4NmUsIDB4OTB9LCB7MHg2ZiwgMHg4MH0sCisJCSB7MHg3MCwgMHg3MH0sIHsweDcxLCAweDgwfSwgezB4NzIsIDB4NjB9LCB7MHg3MywgMHg2MH0sCisJCSB7MHg3NCwgMHg1OH0sIHsweDc1LCAweDYwfSwgezB4NzYsIDB4NGN9LCB7MHg3NywgMHgzOH0sCisJCSB7MHg3OCwgMHgzOH0sIHsweDc5LCAweDJhfSwgezB4N2EsIDB4MjB9LCB7MHg3YiwgMHgwZX0sCisJCSB7MHg3YywgMHgwYX0sIHsweDdkLCAweDE0fSwgezB4N2UsIDB4MjZ9LCB7MHg3ZiwgMHg0Nn0sCisJCSB7MHg4MCwgMHg1NH0sIHsweDgxLCAweDY0fSwgezB4ODIsIDB4NzB9LCB7MHg4MywgMHg3Y30sCisJCSB7MHg4NCwgMHg4N30sIHsweDg1LCAweDkzfSwgezB4ODYsIDB4YTZ9LCB7MHg4NywgMHhiNH0sCisJCSB7MHg4OCwgMHhkMH0sIHsweDg5LCAweGU1fSwgezB4OGEsIDB4ZjV9fSwKKwkJe3sweDZjLCAweDYwfSwgezB4NmQsIDB4ODB9LCB7MHg2ZSwgMHg2MH0sIHsweDZmLCAweDgwfSwKKwkJIHsweDcwLCAweDgwfSwgezB4NzEsIDB4ODB9LCB7MHg3MiwgMHg4OH0sIHsweDczLCAweDMwfSwKKwkJIHsweDc0LCAweDcwfSwgezB4NzUsIDB4Njh9LCB7MHg3NiwgMHg2NH0sIHsweDc3LCAweDUwfSwKKwkJIHsweDc4LCAweDNjfSwgezB4NzksIDB4MjJ9LCB7MHg3YSwgMHgxMH0sIHsweDdiLCAweDA4fSwKKwkJIHsweDdjLCAweDA2fSwgezB4N2QsIDB4MGV9LCB7MHg3ZSwgMHgxYX0sIHsweDdmLCAweDNhfSwKKwkJIHsweDgwLCAweDRhfSwgezB4ODEsIDB4NWF9LCB7MHg4MiwgMHg2Yn0sIHsweDgzLCAweDdifSwKKwkJIHsweDg0LCAweDg5fSwgezB4ODUsIDB4OTZ9LCB7MHg4NiwgMHhhZn0sIHsweDg3LCAweGMzfSwKKwkJIHsweDg4LCAweGUxfSwgezB4ODksIDB4ZjJ9LCB7MHg4YSwgMHhmYX19LAorCQl7ezB4NmMsIDB4MjB9LCB7MHg2ZCwgMHg0MH0sIHsweDZlLCAweDIwfSwgezB4NmYsIDB4NjB9LAorCQkgezB4NzAsIDB4ODh9LCB7MHg3MSwgMHhjOH0sIHsweDcyLCAweGMwfSwgezB4NzMsIDB4Yjh9LAorCQkgezB4NzQsIDB4YTh9LCB7MHg3NSwgMHhiOH0sIHsweDc2LCAweDgwfSwgezB4NzcsIDB4NWN9LAorCQkgezB4NzgsIDB4MjZ9LCB7MHg3OSwgMHgxMH0sIHsweDdhLCAweDA4fSwgezB4N2IsIDB4MDR9LAorCQkgezB4N2MsIDB4MDJ9LCB7MHg3ZCwgMHgwNn0sIHsweDdlLCAweDBhfSwgezB4N2YsIDB4MjJ9LAorCQkgezB4ODAsIDB4MzN9LCB7MHg4MSwgMHg0Y30sIHsweDgyLCAweDY0fSwgezB4ODMsIDB4N2J9LAorCQkgezB4ODQsIDB4OTB9LCB7MHg4NSwgMHhhN30sIHsweDg2LCAweGM3fSwgezB4ODcsIDB4ZGV9LAorCQkgezB4ODgsIDB4ZjF9LCB7MHg4OSwgMHhmOX0sIHsweDhhLCAweGZkfX0sCisJfTsKIAogCXZhbCA9IHNkLT5jdHJsc1tDT05UUkFTVF0udmFsOwogCXN3aXRjaCAoc2QtPnNlbnNvcikgewpAQCAtNDIwMyw3ICs0NTAxLDcgQEAKIAkJaTJjX3dfbWFzayhzZCwgT1Y3NjEwX1JFR19DTlQsIHZhbCA+PiA0LCAweDBmKTsKIAkJYnJlYWs7CiAJY2FzZSBTRU5fT1Y4NjEwOiB7Ci0JCXN0YXRpYyBjb25zdCBfX3U4IGN0YWJbXSA9IHsKKwkJc3RhdGljIGNvbnN0IHU4IGN0YWJbXSA9IHsKIAkJCTB4MDMsIDB4MDksIDB4MGIsIDB4MGYsIDB4NTMsIDB4NmYsIDB4MzUsIDB4N2YKIAkJfTsKIApAQCAtNDIxMyw3ICs0NTExLDcgQEAKIAkgICAgfQogCWNhc2UgU0VOX09WNzYyMDoKIAljYXNlIFNFTl9PVjc2MjBBRTogewotCQlzdGF0aWMgY29uc3QgX191OCBjdGFiW10gPSB7CisJCXN0YXRpYyBjb25zdCB1OCBjdGFiW10gPSB7CiAJCQkweDAxLCAweDA1LCAweDA5LCAweDExLCAweDE1LCAweDM1LCAweDM3LCAweDU3LAogCQkJMHg1YiwgMHhhNSwgMHhhNywgMHhjNywgMHhjOSwgMHhjZiwgMHhlZiwgMHhmZgogCQl9OwpAQCAtNDIyMiw5ICs0NTIwLDEzIEBACiAJCWkyY193KHNkLCAweDY0LCBjdGFiW3ZhbCA+PiA0XSk7CiAJCWJyZWFrOwogCSAgICB9CisJY2FzZSBTRU5fT1Y3NjYwOgorCQl3cml0ZV9pMmNfcmVndmFscyhzZCwgY29udHJhc3RfNzY2MFt2YWxdLAorCQkJCQlBUlJBWV9TSVpFKGNvbnRyYXN0Xzc2NjBbMF0pKTsKKwkJYnJlYWs7CiAJY2FzZSBTRU5fT1Y3NjcwOgogCQkvKiBjaGVjayB0aGF0IHRoaXMgaXNuJ3QganVzdCB0aGUgc2FtZSBhcyBvdjc2MTAgKi8KLQkJaTJjX3coc2QsIE9WNzY3MF9SRUdfQ09OVFJBUywgdmFsID4+IDEpOworCQlpMmNfdyhzZCwgT1Y3NjcwX1I1Nl9DT05UUkFTLCB2YWwgPj4gMSk7CiAJCWJyZWFrOwogCX0KIH0KQEAgLTQyMzMsNiArNDUzNSwxOCBAQAogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAlpbnQgdmFsOworCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3ZfaTJjX3JlZ3ZhbHMgY29sb3JzXzc2NjBbXVs2XSA9IHsKKwkJe3sweDRmLCAweDI4fSwgezB4NTAsIDB4MmF9LCB7MHg1MSwgMHgwMn0sIHsweDUyLCAweDBhfSwKKwkJIHsweDUzLCAweDE5fSwgezB4NTQsIDB4MjN9fSwKKwkJe3sweDRmLCAweDQ3fSwgezB4NTAsIDB4NGF9LCB7MHg1MSwgMHgwM30sIHsweDUyLCAweDExfSwKKwkJIHsweDUzLCAweDJjfSwgezB4NTQsIDB4M2V9fSwKKwkJe3sweDRmLCAweDY2fSwgezB4NTAsIDB4NmJ9LCB7MHg1MSwgMHgwNX0sIHsweDUyLCAweDE5fSwKKwkJIHsweDUzLCAweDQwfSwgezB4NTQsIDB4NTl9fSwKKwkJe3sweDRmLCAweDg0fSwgezB4NTAsIDB4OGJ9LCB7MHg1MSwgMHgwNn0sIHsweDUyLCAweDIwfSwKKwkJIHsweDUzLCAweDUzfSwgezB4NTQsIDB4NzN9fSwKKwkJe3sweDRmLCAweGEzfSwgezB4NTAsIDB4YWJ9LCB7MHg1MSwgMHgwOH0sIHsweDUyLCAweDI4fSwKKwkJIHsweDUzLCAweDY2fSwgezB4NTQsIDB4OGV9fSwKKwl9OwogCiAJdmFsID0gc2QtPmN0cmxzW0NPTE9SU10udmFsOwogCXN3aXRjaCAoc2QtPnNlbnNvcikgewpAQCAtNDI1Niw2ICs0NTcwLDEwIEBACiAJY2FzZSBTRU5fT1Y3NjQ4OgogCQlpMmNfdyhzZCwgT1Y3NjEwX1JFR19TQVQsIHZhbCAmIDB4ZjApOwogCQlicmVhazsKKwljYXNlIFNFTl9PVjc2NjA6CisJCXdyaXRlX2kyY19yZWd2YWxzKHNkLCBjb2xvcnNfNzY2MFt2YWxdLAorCQkJCQlBUlJBWV9TSVpFKGNvbG9yc183NjYwWzBdKSk7CisJCWJyZWFrOwogCWNhc2UgU0VOX09WNzY3MDoKIAkJLyogc3VwcG9ydGVkIGxhdGVyIG9uY2UgSSB3b3JrIG91dCBob3cgdG8gZG8gaXQKIAkJICogdHJhbnNwYXJlbnRseSBmYWlsIG5vdyEgKi8KQEAgLTQyNjgsMzggKzQ1ODYsMzEgQEAKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKLQlpZiAoc2QtPnNlbnNvciA9PSBTRU5fT1Y3NjQwIHx8IHNkLT5zZW5zb3IgPT0gU0VOX09WNzY0OCB8fAotCSAgICBzZC0+c2Vuc29yID09IFNFTl9PVjc2NzAgfHwKLQkgICAgc2QtPnNlbnNvciA9PSBTRU5fT1YyNjEwIHx8IHNkLT5zZW5zb3IgPT0gU0VOX09WMzYxMCkKLQkJcmV0dXJuOwotCiAJaTJjX3dfbWFzayhzZCwgMHgyZCwgc2QtPmN0cmxzW0FVVE9CUklHSFRdLnZhbCA/IDB4MTAgOiAweDAwLCAweDEwKTsKIH0KIAogc3RhdGljIHZvaWQgc2V0ZnJlcV9pKHN0cnVjdCBzZCAqc2QpCiB7Ci0JaWYgKHNkLT5zZW5zb3IgPT0gU0VOX09WMjYxMCB8fCBzZC0+c2Vuc29yID09IFNFTl9PVjM2MTApCi0JCXJldHVybjsKLQotCWlmIChzZC0+c2Vuc29yID09IFNFTl9PVjc2NzApIHsKKwlpZiAoc2QtPnNlbnNvciA9PSBTRU5fT1Y3NjYwCisJIHx8IHNkLT5zZW5zb3IgPT0gU0VOX09WNzY3MCkgewogCQlzd2l0Y2ggKHNkLT5jdHJsc1tGUkVRXS52YWwpIHsKIAkJY2FzZSAwOiAvKiBCYW5kaW5nIGZpbHRlciBkaXNhYmxlZCAqLwotCQkJaTJjX3dfbWFzayhzZCwgT1Y3NjcwX1JFR19DT004LCAwLCBPVjc2NzBfQ09NOF9CRklMVCk7CisJCQlpMmNfd19tYXNrKHNkLCBPVjc2NzBfUjEzX0NPTTgsIDAsIE9WNzY3MF9DT004X0JGSUxUKTsKIAkJCWJyZWFrOwogCQljYXNlIDE6IC8qIDUwIGh6ICovCi0JCQlpMmNfd19tYXNrKHNkLCBPVjc2NzBfUkVHX0NPTTgsIE9WNzY3MF9DT004X0JGSUxULAorCQkJaTJjX3dfbWFzayhzZCwgT1Y3NjcwX1IxM19DT004LCBPVjc2NzBfQ09NOF9CRklMVCwKIAkJCQkgICBPVjc2NzBfQ09NOF9CRklMVCk7Ci0JCQlpMmNfd19tYXNrKHNkLCBPVjc2NzBfUkVHX0NPTTExLCAweDA4LCAweDE4KTsKKwkJCWkyY193X21hc2soc2QsIE9WNzY3MF9SM0JfQ09NMTEsIDB4MDgsIDB4MTgpOwogCQkJYnJlYWs7CiAJCWNhc2UgMjogLyogNjAgaHogKi8KLQkJCWkyY193X21hc2soc2QsIE9WNzY3MF9SRUdfQ09NOCwgT1Y3NjcwX0NPTThfQkZJTFQsCisJCQlpMmNfd19tYXNrKHNkLCBPVjc2NzBfUjEzX0NPTTgsIE9WNzY3MF9DT004X0JGSUxULAogCQkJCSAgIE9WNzY3MF9DT004X0JGSUxUKTsKLQkJCWkyY193X21hc2soc2QsIE9WNzY3MF9SRUdfQ09NMTEsIDB4MDAsIDB4MTgpOworCQkJaTJjX3dfbWFzayhzZCwgT1Y3NjcwX1IzQl9DT00xMSwgMHgwMCwgMHgxOCk7CiAJCQlicmVhazsKLQkJY2FzZSAzOiAvKiBBdXRvIGh6ICovCi0JCQlpMmNfd19tYXNrKHNkLCBPVjc2NzBfUkVHX0NPTTgsIE9WNzY3MF9DT004X0JGSUxULAorCQljYXNlIDM6IC8qIEF1dG8gaHogLSBvdjc2NzAgb25seSAqLworCQkJaTJjX3dfbWFzayhzZCwgT1Y3NjcwX1IxM19DT004LCBPVjc2NzBfQ09NOF9CRklMVCwKIAkJCQkgICBPVjc2NzBfQ09NOF9CRklMVCk7Ci0JCQlpMmNfd19tYXNrKHNkLCBPVjc2NzBfUkVHX0NPTTExLCBPVjc2NzBfQ09NMTFfSFpBVVRPLAorCQkJaTJjX3dfbWFzayhzZCwgT1Y3NjcwX1IzQl9DT00xMSwgT1Y3NjcwX0NPTTExX0haQVVUTywKIAkJCQkgICAweDE4KTsKIAkJCWJyZWFrOwogCQl9CkBAIC00NDQzLDE0ICs0NzU0LDE0IEBACiAJe1VTQl9ERVZJQ0UoMHgwNDFlLCAweDQwNjApLCAuZHJpdmVyX2luZm8gPSBCUklER0VfT1Y1MTkgfSwKIAl7VVNCX0RFVklDRSgweDA0MWUsIDB4NDA2MSksIC5kcml2ZXJfaW5mbyA9IEJSSURHRV9PVjUxOSB9LAogCXtVU0JfREVWSUNFKDB4MDQxZSwgMHg0MDY0KSwKLQkgLmRyaXZlcl9pbmZvID0gQlJJREdFX09WNTE5IHwgQlJJREdFX0lOVkVSVF9MRUQgfSwKKwkJLmRyaXZlcl9pbmZvID0gQlJJREdFX09WNTE5IHwgQlJJREdFX0lOVkVSVF9MRUQgfSwKIAl7VVNCX0RFVklDRSgweDA0MWUsIDB4NDA2NyksIC5kcml2ZXJfaW5mbyA9IEJSSURHRV9PVjUxOSB9LAogCXtVU0JfREVWSUNFKDB4MDQxZSwgMHg0MDY4KSwKLQkgLmRyaXZlcl9pbmZvID0gQlJJREdFX09WNTE5IHwgQlJJREdFX0lOVkVSVF9MRUQgfSwKKwkJLmRyaXZlcl9pbmZvID0gQlJJREdFX09WNTE5IHwgQlJJREdFX0lOVkVSVF9MRUQgfSwKIAl7VVNCX0RFVklDRSgweDA0NWUsIDB4MDI4YyksIC5kcml2ZXJfaW5mbyA9IEJSSURHRV9PVjUxOSB9LAogCXtVU0JfREVWSUNFKDB4MDU0YywgMHgwMTU0KSwgLmRyaXZlcl9pbmZvID0gQlJJREdFX09WNTE5IH0sCiAJe1VTQl9ERVZJQ0UoMHgwNTRjLCAweDAxNTUpLAotCSAuZHJpdmVyX2luZm8gPSBCUklER0VfT1Y1MTkgfCBCUklER0VfSU5WRVJUX0xFRCB9LAorCQkuZHJpdmVyX2luZm8gPSBCUklER0VfT1Y1MTkgfCBCUklER0VfSU5WRVJUX0xFRCB9LAogCXtVU0JfREVWSUNFKDB4MDVhOSwgMHgwNTExKSwgLmRyaXZlcl9pbmZvID0gQlJJREdFX09WNTExIH0sCiAJe1VTQl9ERVZJQ0UoMHgwNWE5LCAweDA1MTgpLCAuZHJpdmVyX2luZm8gPSBCUklER0VfT1Y1MTggfSwKIAl7VVNCX0RFVklDRSgweDA1YTksIDB4MDUxOSksIC5kcml2ZXJfaW5mbyA9IEJSSURHRV9PVjUxOSB9LApAQCAtNDQ2NCw3ICs0Nzc1LDcgQEAKIAl7VVNCX0RFVklDRSgweDBiNjIsIDB4MDA1OSksIC5kcml2ZXJfaW5mbyA9IEJSSURHRV9PVkZYMiB9LAogCXtVU0JfREVWSUNFKDB4MGU5NiwgMHhjMDAxKSwgLmRyaXZlcl9pbmZvID0gQlJJREdFX09WRlgyIH0sCiAJe1VTQl9ERVZJQ0UoMHgxMDQ2LCAweDk5NjcpLCAuZHJpdmVyX2luZm8gPSBCUklER0VfVzk5NjhDRiB9LAotCXtVU0JfREVWSUNFKDB4ODAyMCwgMHhFRjA0KSwgLmRyaXZlcl9pbmZvID0gQlJJREdFX09WRlgyIH0sCisJe1VTQl9ERVZJQ0UoMHg4MDIwLCAweGVmMDQpLCAuZHJpdmVyX2luZm8gPSBCUklER0VfT1ZGWDIgfSwKIAl7fQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9vdjUzNC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9vdjUzNC5jCmluZGV4IDg4ZWYwM2YuLjBlZGY5MzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MzQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL292NTM0LmMKQEAgLTEyNDMsMzQgKzEyNDMsMjYgQEAKIH0KIAogLyogZ2V0IHN0cmVhbSBwYXJhbWV0ZXJzIChmcmFtZXJhdGUpICovCi1zdGF0aWMgaW50IHNkX2dldF9zdHJlYW1wYXJtKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKK3N0YXRpYyB2b2lkIHNkX2dldF9zdHJlYW1wYXJtKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKIAkJCSAgICAgc3RydWN0IHY0bDJfc3RyZWFtcGFybSAqcGFybSkKIHsKIAlzdHJ1Y3QgdjRsMl9jYXB0dXJlcGFybSAqY3AgPSAmcGFybS0+cGFybS5jYXB0dXJlOwogCXN0cnVjdCB2NGwyX2ZyYWN0ICp0cGYgPSAmY3AtPnRpbWVwZXJmcmFtZTsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKLQlpZiAocGFybS0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCi0JCXJldHVybiAtRUlOVkFMOwotCiAJY3AtPmNhcGFiaWxpdHkgfD0gVjRMMl9DQVBfVElNRVBFUkZSQU1FOwogCXRwZi0+bnVtZXJhdG9yID0gMTsKIAl0cGYtPmRlbm9taW5hdG9yID0gc2QtPmZyYW1lX3JhdGU7Ci0KLQlyZXR1cm4gMDsKIH0KIAogLyogc2V0IHN0cmVhbSBwYXJhbWV0ZXJzIChmcmFtZXJhdGUpICovCi1zdGF0aWMgaW50IHNkX3NldF9zdHJlYW1wYXJtKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKK3N0YXRpYyB2b2lkIHNkX3NldF9zdHJlYW1wYXJtKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKIAkJCSAgICAgc3RydWN0IHY0bDJfc3RyZWFtcGFybSAqcGFybSkKIHsKIAlzdHJ1Y3QgdjRsMl9jYXB0dXJlcGFybSAqY3AgPSAmcGFybS0+cGFybS5jYXB0dXJlOwogCXN0cnVjdCB2NGwyX2ZyYWN0ICp0cGYgPSAmY3AtPnRpbWVwZXJmcmFtZTsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKLQlpZiAocGFybS0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCi0JCXJldHVybiAtRUlOVkFMOwotCiAJLyogU2V0IHJlcXVlc3RlZCBmcmFtZXJhdGUgKi8KIAlzZC0+ZnJhbWVfcmF0ZSA9IHRwZi0+ZGVub21pbmF0b3IgLyB0cGYtPm51bWVyYXRvcjsKIAlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCkBAIC0xMjc5LDggKzEyNzEsNiBAQAogCS8qIFJldHVybiB0aGUgYWN0dWFsIGZyYW1lcmF0ZSAqLwogCXRwZi0+bnVtZXJhdG9yID0gMTsKIAl0cGYtPmRlbm9taW5hdG9yID0gc2QtPmZyYW1lX3JhdGU7Ci0KLQlyZXR1cm4gMDsKIH0KIAogLyogc3ViLWRyaXZlciBkZXNjcmlwdGlvbiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9vdjUzNF85LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL292NTM0XzkuYwppbmRleCBlODMxZjBkLi5jNTI0NGI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL292NTM0XzkuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL292NTM0XzkuYwpAQCAtOTQ1LDcgKzk0NSw2IEBACiAJdTggdmFsOwogCiAvKmZpeG1lOiBzaG91bGQgYWRqdXN0IGFnYy9hd2IvYWVjIGJ5IGRpZmZlcmVudCBjb250cm9scyAqLwotCXZhbCA9IHNkLT5hdXRvZ2FpbjsKIAl2YWwgPSBzY2NiX3JlYWQoZ3NwY2FfZGV2LCAweDEzKTsJCS8qIGNvbTggKi8KIAlzY2NiX3dyaXRlKGdzcGNhX2RldiwgMHhmZiwgMHgwMCk7CiAJaWYgKHNkLT5hdXRvZ2FpbikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvcGFjMjA3LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhYzIwNy5jCmluZGV4IDE1ZTk3ZmEuLjk2Zjk5ODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvcGFjMjA3LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9wYWMyMDcuYwpAQCAtMTYyLDcgKzE2Miw3IEBACiAJezB4MTAsIDB4MTIsIDB4MGQsIDB4MTIsIDB4MGMsIDB4MDEsIDB4MjksIDB4ODR9LAogCXsweDQ5LCAweDY0LCAweDY0LCAweDY0LCAweDA0LCAweDEwLCAweGYwLCAweDMwfSwKIAl7MHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHhhMCwgMHhmOCwgMHgwMCwgMHgwMH0sCi0JezB4MzIsIDB4MDAsIDB4OTYsIDB4MDAsIDB4QTIsIDB4MDIsIDB4YWYsIDB4MDB9LAorCXsweDMyLCAweDAwLCAweDk2LCAweDAwLCAweGEyLCAweDAyLCAweGFmLCAweDAwfSwKIH07CiAKIHN0YXRpYyBpbnQgcGFjMjA3X3dyaXRlX3JlZ3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCB1MTYgaW5kZXgsCkBAIC0yMjgsNyArMjI4LDcgQEAKIAogCWlkcmVnWzBdID0gcGFjMjA3X3JlYWRfcmVnKGdzcGNhX2RldiwgMHgwMDAwKTsKIAlpZHJlZ1sxXSA9IHBhYzIwN19yZWFkX3JlZyhnc3BjYV9kZXYsIDB4MDAwMSk7Ci0JaWRyZWdbMF0gPSAoKGlkcmVnWzBdICYgMHgwRikgPDwgNCkgfCAoKGlkcmVnWzFdICYgMHhmMCkgPj4gNCk7CisJaWRyZWdbMF0gPSAoKGlkcmVnWzBdICYgMHgwZikgPDwgNCkgfCAoKGlkcmVnWzFdICYgMHhmMCkgPj4gNCk7CiAJaWRyZWdbMV0gPSBpZHJlZ1sxXSAmIDB4MGY7CiAJUERFQlVHKERfUFJPQkUsICJQaXhhcnQgU2Vuc29yIElEIDB4JTAyWCBDaGlwcyBJRCAweCUwMlgiLAogCQlpZHJlZ1swXSwgaWRyZWdbMV0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9wYWM3MzAyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhYzczMDIuYwppbmRleCA1NWZiZWE3Li4yNzAwOTc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhYzczMDIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhYzczMDIuYwpAQCAtMzkzLDcgKzM5Myw3IEBACiAKIHN0YXRpYyB2b2lkIHJlZ193X2J1ZihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCiAJCSAgX191OCBpbmRleCwKLQkJICBjb25zdCBjaGFyICpidWZmZXIsIGludCBsZW4pCisJCSAgY29uc3QgdTggKmJ1ZmZlciwgaW50IGxlbikKIHsKIAlpbnQgcmV0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhYzczMTEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvcGFjNzMxMS5jCmluZGV4IDc2NTdiNDMuLjY4MjBmNWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvcGFjNzMxMS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvcGFjNzMxMS5jCkBAIC0yNjEsNyArMjYxLDcgQEAKIAogc3RhdGljIHZvaWQgcmVnX3dfYnVmKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKIAkJICBfX3U4IGluZGV4LAotCQkgIGNvbnN0IGNoYXIgKmJ1ZmZlciwgaW50IGxlbikKKwkJICBjb25zdCB1OCAqYnVmZmVyLCBpbnQgbGVuKQogewogCWludCByZXQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc245YzIweC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zbjljMjB4LmMKaW5kZXggNmIxNTVhZS4uY2IwOGQwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zbjljMjB4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zbjljMjB4LmMKQEAgLTMzLDYgKzMzLDE0IEBACiAKICNkZWZpbmUgTU9EVUxFX05BTUUgInNuOWMyMHgiCiAKKy8qCisgKiBQaXhlbCBmb3JtYXQgcHJpdmF0ZSBkYXRhCisgKi8KKyNkZWZpbmUgU0NBTEVfTUFTSwkweDBmCisjZGVmaW5lIFNDQUxFXzE2MHgxMjAJMAorI2RlZmluZSBTQ0FMRV8zMjB4MjQwCTEKKyNkZWZpbmUgU0NBTEVfNjQweDQ4MAkyCisjZGVmaW5lIFNDQUxFXzEyODB4MTAyNAkzCiAjZGVmaW5lIE1PREVfUkFXCTB4MTAKICNkZWZpbmUgTU9ERV9KUEVHCTB4MjAKICNkZWZpbmUgTU9ERV9TWEdBCTB4ODAKQEAgLTM0OCw0NyArMzU2LDQ3IEBACiAJCS5ieXRlc3BlcmxpbmUgPSAxNjAsCiAJCS5zaXplaW1hZ2UgPSAxNjAgKiAxMjAgKiA0IC8gOCArIDU5MCwKIAkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywKLQkJLnByaXYgPSAwIHwgTU9ERV9KUEVHfSwKKwkJLnByaXYgPSBTQ0FMRV8xNjB4MTIwIHwgTU9ERV9KUEVHfSwKIAl7MTYwLCAxMjAsIFY0TDJfUElYX0ZNVF9TQkdHUjgsIFY0TDJfRklFTERfTk9ORSwKIAkJLmJ5dGVzcGVybGluZSA9IDE2MCwKIAkJLnNpemVpbWFnZSA9IDE2MCAqIDEyMCwKIAkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKLQkJLnByaXYgPSAwIHwgTU9ERV9SQVd9LAorCQkucHJpdiA9IFNDQUxFXzE2MHgxMjAgfCBNT0RFX1JBV30sCiAJezE2MCwgMTIwLCBWNEwyX1BJWF9GTVRfU045QzIwWF9JNDIwLCBWNEwyX0ZJRUxEX05PTkUsCiAJCS5ieXRlc3BlcmxpbmUgPSAxNjAsCiAJCS5zaXplaW1hZ2UgPSAyNDAgKiAxMjAsCiAJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCi0JCS5wcml2ID0gMH0sCisJCS5wcml2ID0gU0NBTEVfMTYweDEyMH0sCiAJezMyMCwgMjQwLCBWNEwyX1BJWF9GTVRfSlBFRywgVjRMMl9GSUVMRF9OT05FLAogCQkuYnl0ZXNwZXJsaW5lID0gMzIwLAogCQkuc2l6ZWltYWdlID0gMzIwICogMjQwICogMyAvIDggKyA1OTAsCiAJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX0pQRUcsCi0JCS5wcml2ID0gMSB8IE1PREVfSlBFR30sCisJCS5wcml2ID0gU0NBTEVfMzIweDI0MCB8IE1PREVfSlBFR30sCiAJezMyMCwgMjQwLCBWNEwyX1BJWF9GTVRfU0JHR1I4LCBWNEwyX0ZJRUxEX05PTkUsCiAJCS5ieXRlc3BlcmxpbmUgPSAzMjAsCiAJCS5zaXplaW1hZ2UgPSAzMjAgKiAyNDAgLAogCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAotCQkucHJpdiA9IDEgfCBNT0RFX1JBV30sCisJCS5wcml2ID0gU0NBTEVfMzIweDI0MCB8IE1PREVfUkFXfSwKIAl7MzIwLCAyNDAsIFY0TDJfUElYX0ZNVF9TTjlDMjBYX0k0MjAsIFY0TDJfRklFTERfTk9ORSwKIAkJLmJ5dGVzcGVybGluZSA9IDMyMCwKIAkJLnNpemVpbWFnZSA9IDQ4MCAqIDI0MCAsCiAJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCi0JCS5wcml2ID0gMX0sCisJCS5wcml2ID0gU0NBTEVfMzIweDI0MH0sCiAJezY0MCwgNDgwLCBWNEwyX1BJWF9GTVRfSlBFRywgVjRMMl9GSUVMRF9OT05FLAogCQkuYnl0ZXNwZXJsaW5lID0gNjQwLAogCQkuc2l6ZWltYWdlID0gNjQwICogNDgwICogMyAvIDggKyA1OTAsCiAJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX0pQRUcsCi0JCS5wcml2ID0gMiB8IE1PREVfSlBFR30sCisJCS5wcml2ID0gU0NBTEVfNjQweDQ4MCB8IE1PREVfSlBFR30sCiAJezY0MCwgNDgwLCBWNEwyX1BJWF9GTVRfU0JHR1I4LCBWNEwyX0ZJRUxEX05PTkUsCiAJCS5ieXRlc3BlcmxpbmUgPSA2NDAsCiAJCS5zaXplaW1hZ2UgPSA2NDAgKiA0ODAsCiAJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCi0JCS5wcml2ID0gMiB8IE1PREVfUkFXfSwKKwkJLnByaXYgPSBTQ0FMRV82NDB4NDgwIHwgTU9ERV9SQVd9LAogCXs2NDAsIDQ4MCwgVjRMMl9QSVhfRk1UX1NOOUMyMFhfSTQyMCwgVjRMMl9GSUVMRF9OT05FLAogCQkuYnl0ZXNwZXJsaW5lID0gNjQwLAogCQkuc2l6ZWltYWdlID0gOTYwICogNDgwLAogCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAotCQkucHJpdiA9IDJ9LAorCQkucHJpdiA9IFNDQUxFXzY0MHg0ODB9LAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgc3hnYV9tb2RlW10gPSB7CkBAIC0zOTYsNTIgKzQwNCw3NSBAQAogCQkuYnl0ZXNwZXJsaW5lID0gMTYwLAogCQkuc2l6ZWltYWdlID0gMTYwICogMTIwICogNCAvIDggKyA1OTAsCiAJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX0pQRUcsCi0JCS5wcml2ID0gMCB8IE1PREVfSlBFR30sCisJCS5wcml2ID0gU0NBTEVfMTYweDEyMCB8IE1PREVfSlBFR30sCiAJezE2MCwgMTIwLCBWNEwyX1BJWF9GTVRfU0JHR1I4LCBWNEwyX0ZJRUxEX05PTkUsCiAJCS5ieXRlc3BlcmxpbmUgPSAxNjAsCiAJCS5zaXplaW1hZ2UgPSAxNjAgKiAxMjAsCiAJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCi0JCS5wcml2ID0gMCB8IE1PREVfUkFXfSwKKwkJLnByaXYgPSBTQ0FMRV8xNjB4MTIwIHwgTU9ERV9SQVd9LAogCXsxNjAsIDEyMCwgVjRMMl9QSVhfRk1UX1NOOUMyMFhfSTQyMCwgVjRMMl9GSUVMRF9OT05FLAogCQkuYnl0ZXNwZXJsaW5lID0gMTYwLAogCQkuc2l6ZWltYWdlID0gMjQwICogMTIwLAogCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAotCQkucHJpdiA9IDB9LAorCQkucHJpdiA9IFNDQUxFXzE2MHgxMjB9LAogCXszMjAsIDI0MCwgVjRMMl9QSVhfRk1UX0pQRUcsIFY0TDJfRklFTERfTk9ORSwKIAkJLmJ5dGVzcGVybGluZSA9IDMyMCwKIAkJLnNpemVpbWFnZSA9IDMyMCAqIDI0MCAqIDMgLyA4ICsgNTkwLAogCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9KUEVHLAotCQkucHJpdiA9IDEgfCBNT0RFX0pQRUd9LAorCQkucHJpdiA9IFNDQUxFXzMyMHgyNDAgfCBNT0RFX0pQRUd9LAogCXszMjAsIDI0MCwgVjRMMl9QSVhfRk1UX1NCR0dSOCwgVjRMMl9GSUVMRF9OT05FLAogCQkuYnl0ZXNwZXJsaW5lID0gMzIwLAogCQkuc2l6ZWltYWdlID0gMzIwICogMjQwICwKIAkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKLQkJLnByaXYgPSAxIHwgTU9ERV9SQVd9LAorCQkucHJpdiA9IFNDQUxFXzMyMHgyNDAgfCBNT0RFX1JBV30sCiAJezMyMCwgMjQwLCBWNEwyX1BJWF9GTVRfU045QzIwWF9JNDIwLCBWNEwyX0ZJRUxEX05PTkUsCiAJCS5ieXRlc3BlcmxpbmUgPSAzMjAsCiAJCS5zaXplaW1hZ2UgPSA0ODAgKiAyNDAgLAogCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAotCQkucHJpdiA9IDF9LAorCQkucHJpdiA9IFNDQUxFXzMyMHgyNDB9LAogCXs2NDAsIDQ4MCwgVjRMMl9QSVhfRk1UX0pQRUcsIFY0TDJfRklFTERfTk9ORSwKIAkJLmJ5dGVzcGVybGluZSA9IDY0MCwKIAkJLnNpemVpbWFnZSA9IDY0MCAqIDQ4MCAqIDMgLyA4ICsgNTkwLAogCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9KUEVHLAotCQkucHJpdiA9IDIgfCBNT0RFX0pQRUd9LAorCQkucHJpdiA9IFNDQUxFXzY0MHg0ODAgfCBNT0RFX0pQRUd9LAogCXs2NDAsIDQ4MCwgVjRMMl9QSVhfRk1UX1NCR0dSOCwgVjRMMl9GSUVMRF9OT05FLAogCQkuYnl0ZXNwZXJsaW5lID0gNjQwLAogCQkuc2l6ZWltYWdlID0gNjQwICogNDgwLAogCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAotCQkucHJpdiA9IDIgfCBNT0RFX1JBV30sCisJCS5wcml2ID0gU0NBTEVfNjQweDQ4MCB8IE1PREVfUkFXfSwKIAl7NjQwLCA0ODAsIFY0TDJfUElYX0ZNVF9TTjlDMjBYX0k0MjAsIFY0TDJfRklFTERfTk9ORSwKIAkJLmJ5dGVzcGVybGluZSA9IDY0MCwKIAkJLnNpemVpbWFnZSA9IDk2MCAqIDQ4MCwKIAkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKLQkJLnByaXYgPSAyfSwKKwkJLnByaXYgPSBTQ0FMRV82NDB4NDgwfSwKIAl7MTI4MCwgMTAyNCwgVjRMMl9QSVhfRk1UX1NCR0dSOCwgVjRMMl9GSUVMRF9OT05FLAogCQkuYnl0ZXNwZXJsaW5lID0gMTI4MCwKIAkJLnNpemVpbWFnZSA9IDEyODAgKiAxMDI0LAogCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAotCQkucHJpdiA9IDMgfCBNT0RFX1JBVyB8IE1PREVfU1hHQX0sCisJCS5wcml2ID0gU0NBTEVfMTI4MHgxMDI0IHwgTU9ERV9SQVcgfCBNT0RFX1NYR0F9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgbW9ub19tb2RlW10gPSB7CisJezE2MCwgMTIwLCBWNEwyX1BJWF9GTVRfR1JFWSwgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMTYwLAorCQkuc2l6ZWltYWdlID0gMTYwICogMTIwLAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAorCQkucHJpdiA9IFNDQUxFXzE2MHgxMjAgfCBNT0RFX1JBV30sCisJezMyMCwgMjQwLCBWNEwyX1BJWF9GTVRfR1JFWSwgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMzIwLAorCQkuc2l6ZWltYWdlID0gMzIwICogMjQwICwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKKwkJLnByaXYgPSBTQ0FMRV8zMjB4MjQwIHwgTU9ERV9SQVd9LAorCXs2NDAsIDQ4MCwgVjRMMl9QSVhfRk1UX0dSRVksIFY0TDJfRklFTERfTk9ORSwKKwkJLmJ5dGVzcGVybGluZSA9IDY0MCwKKwkJLnNpemVpbWFnZSA9IDY0MCAqIDQ4MCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKKwkJLnByaXYgPSBTQ0FMRV82NDB4NDgwIHwgTU9ERV9SQVd9LAorCXsxMjgwLCAxMDI0LCBWNEwyX1BJWF9GTVRfR1JFWSwgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMTI4MCwKKwkJLnNpemVpbWFnZSA9IDEyODAgKiAxMDI0LAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAorCQkucHJpdiA9IFNDQUxFXzEyODB4MTAyNCB8IE1PREVfUkFXIHwgTU9ERV9TWEdBfSwKIH07CiAKIHN0YXRpYyBjb25zdCBzMTYgaHN2X3JlZF94W10gPSB7CkBAIC0xMDI5LDE2ICsxMDYwLDE5IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IGkyY19yZWdfdTE2IG10OW0wMDFfaW5pdFtdID0gewotCXsweDBkLCAweDAwMDF9LCB7MHgwZCwgMHgwMDAwfSwgezB4MDEsIDB4MDAwZX0sCi0JezB4MDIsIDB4MDAxNH0sIHsweDAzLCAweDAzYzF9LCB7MHgwNCwgMHgwNTAxfSwKLQl7MHgwNSwgMHgwMDgzfSwgezB4MDYsIDB4MDAwNn0sIHsweDBkLCAweDAwMDJ9LAotCXsweDBhLCAweDAwMDB9LCB7MHgwYywgMHgwMDAwfSwgezB4MTEsIDB4MDAwMH0sCi0JezB4MWUsIDB4ODAwMH0sIHsweDVmLCAweDg5MDR9LCB7MHg2MCwgMHgwMDAwfSwKLQl7MHg2MSwgMHgwMDAwfSwgezB4NjIsIDB4MDQ5OH0sIHsweDYzLCAweDAwMDB9LAotCXsweDY0LCAweDAwMDB9LCB7MHgyMCwgMHgxMTFkfSwgezB4MDYsIDB4MDBmMn0sCi0JezB4MDUsIDB4MDAxM30sIHsweDA5LCAweDEwZjJ9LCB7MHgwNywgMHgwMDAzfSwKLQl7MHgyYiwgMHgwMDJhfSwgezB4MmQsIDB4MDAyYX0sIHsweDJjLCAweDAwMmF9LAotCXsweDJlLCAweDAwMjl9LCB7MHgwNywgMHgwMDAyfSwKKwl7MHgwZCwgMHgwMDAxfSwKKwl7MHgwZCwgMHgwMDAwfSwKKwl7MHgwNCwgMHgwNTAwfSwJCS8qIGhyZXMgPSAxMjgwICovCisJezB4MDMsIDB4MDQwMH0sCQkvKiB2cmVzID0gMTAyNCAqLworCXsweDIwLCAweDExMDB9LAorCXsweDA2LCAweDAwMTB9LAorCXsweDJiLCAweDAwMjR9LAorCXsweDJlLCAweDAwMjR9LAorCXsweDM1LCAweDAwMjR9LAorCXsweDJkLCAweDAwMjB9LAorCXsweDJjLCAweDAwMjB9LAorCXsweDA5LCAweDBhZDR9LAorCXsweDM1LCAweDAwNTd9LAogfTsKIAogc3RhdGljIHN0cnVjdCBpMmNfcmVnX3UxNiBtdDltMTExX2luaXRbXSA9IHsKQEAgLTEyMjQsOCArMTI1OCwxNyBAQAogc3RhdGljIGludCBvdjk2NTBfaW5pdF9zZW5zb3Ioc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCWludCBpOworCXUxNiBpZDsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKKwlpZiAoaTJjX3IyKGdzcGNhX2RldiwgMHgxYywgJmlkKSA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGlkICE9IDB4N2ZhMikgeworCQllcnIoInNlbnNvciBpZCBmb3Igb3Y5NjUwIGRvZXNuJ3QgbWF0Y2ggKDB4JTA0eCkiLCBpZCk7CisJCXJldHVybiAtRU5PREVWOworCX0KKwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG92OTY1MF9pbml0KTsgaSsrKSB7CiAJCWlmIChpMmNfdzEoZ3NwY2FfZGV2LCBvdjk2NTBfaW5pdFtpXS5yZWcsCiAJCQkJb3Y5NjUwX2luaXRbaV0udmFsKSA8IDApIHsKQEAgLTE0MjUsNiArMTQ2OCwyNSBAQAogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAlpbnQgaTsKKwl1MTYgaWQ7CisKKwlpZiAoaTJjX3IyKGdzcGNhX2RldiwgMHgwMCwgJmlkKSA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJLyogbXVzdCBiZSAweDg0MTEgb3IgMHg4NDIxIGZvciBjb2xvdXIgc2Vuc29yIGFuZCA4NDMxIGZvciBidyAqLworCXN3aXRjaCAoaWQpIHsKKwljYXNlIDB4ODQxMToKKwljYXNlIDB4ODQyMToKKwkJaW5mbygiTVQ5TTAwMSBjb2xvciBzZW5zb3IgZGV0ZWN0ZWQiKTsKKwkJYnJlYWs7CisJY2FzZSAweDg0MzE6CisJCWluZm8oIk1UOU0wMDEgbW9ubyBzZW5zb3IgZGV0ZWN0ZWQiKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZXJyKCJObyBNVDlNMDAxIGNoaXAgZGV0ZWN0ZWQsIElEID0gJXhcbiIsIGlkKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobXQ5bTAwMV9pbml0KTsgaSsrKSB7CiAJCWlmIChpMmNfdzIoZ3NwY2FfZGV2LCBtdDltMDAxX2luaXRbaV0ucmVnLAogCQkJCW10OW0wMDFfaW5pdFtpXS52YWwpIDwgMCkgewpAQCAtMTQzNCw4ICsxNDk2LDggQEAKIAl9CiAJLyogZGlzYWJsZSBoZmxpcCBhbmQgdmZsaXAgKi8KIAlnc3BjYV9kZXYtPmN0cmxfZGlzID0gKDEgPDwgSEZMSVBfSURYKSB8ICgxIDw8IFZGTElQX0lEWCk7Ci0Jc2QtPmhzdGFydCA9IDI7Ci0Jc2QtPnZzdGFydCA9IDI7CisJc2QtPmhzdGFydCA9IDE7CisJc2QtPnZzdGFydCA9IDE7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE5NzcsNiArMjAzOSwxMCBAQAogCQljYW0tPmNhbV9tb2RlID0gc3hnYV9tb2RlOwogCQljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUoc3hnYV9tb2RlKTsKIAkJYnJlYWs7CisJY2FzZSBTRU5TT1JfTVQ5TTAwMToKKwkJY2FtLT5jYW1fbW9kZSA9IG1vbm9fbW9kZTsKKwkJY2FtLT5ubW9kZXMgPSBBUlJBWV9TSVpFKG1vbm9fbW9kZSk7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWNhbS0+Y2FtX21vZGUgPSB2Z2FfbW9kZTsKIAkJY2FtLT5ubW9kZXMgPSBBUlJBWV9TSVpFKHZnYV9tb2RlKTsKQEAgLTIwNzUsNyArMjE0MSw2IEBACiAJY2FzZSBTRU5TT1JfTVQ5TTAwMToKIAkJaWYgKG10OW0wMDFfaW5pdF9zZW5zb3IoZ3NwY2FfZGV2KSA8IDApCiAJCQlyZXR1cm4gLUVOT0RFVjsKLQkJaW5mbygiTVQ5TTAwMSBzZW5zb3IgZGV0ZWN0ZWQiKTsKIAkJYnJlYWs7CiAJY2FzZSBTRU5TT1JfSFY3MTMxUjoKIAkJaWYgKGh2NzEzMXJfaW5pdF9zZW5zb3IoZ3NwY2FfZGV2KSA8IDApCkBAIC0yMTczLDIyICsyMjM4LDIyIEBACiAJZWxzZSBpZiAobW9kZSAmIE1PREVfSlBFRykKIAkJZm10ID0gMHgyYzsKIAllbHNlCi0JCWZtdCA9IDB4MmY7CisJCWZtdCA9IDB4MmY7CS8qIFlVViA0MjAgKi8KIAotCXN3aXRjaCAobW9kZSAmIDB4MGYpIHsKLQljYXNlIDM6CisJc3dpdGNoIChtb2RlICYgU0NBTEVfTUFTSykgeworCWNhc2UgU0NBTEVfMTI4MHgxMDI0OgogCQlzY2FsZSA9IDB4YzA7CiAJCWluZm8oIlNldCAxMjgweDEwMjQiKTsKIAkJYnJlYWs7Ci0JY2FzZSAyOgorCWNhc2UgU0NBTEVfNjQweDQ4MDoKIAkJc2NhbGUgPSAweDgwOwogCQlpbmZvKCJTZXQgNjQweDQ4MCIpOwogCQlicmVhazsKLQljYXNlIDE6CisJY2FzZSBTQ0FMRV8zMjB4MjQwOgogCQlzY2FsZSA9IDB4OTA7CiAJCWluZm8oIlNldCAzMjB4MjQwIik7CiAJCWJyZWFrOwotCWNhc2UgMDoKKwljYXNlIFNDQUxFXzE2MHgxMjA6CiAJCXNjYWxlID0gMHhhMDsKIAkJaW5mbygiU2V0IDE2MHgxMjAiKTsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Nvbml4Yi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zb25peGIuYwppbmRleCA3MDZmOTZmLi43MzUwNGEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Nvbml4Yi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc29uaXhiLmMKQEAgLTU2LDYgKzU2LDggQEAKIAlpbnQgcHJldl9hdmdfbHVtOwogCWludCBleHBfdG9vX2xvd19jbnQ7CiAJaW50IGV4cF90b29faGlnaF9jbnQ7CisJaW50IGhlYWRlcl9yZWFkOworCXU4IGhlYWRlclsxMl07IC8qIEhlYWRlciB3aXRob3V0IHNvZiBtYXJrZXIgKi8KIAogCXVuc2lnbmVkIHNob3J0IGV4cG9zdXJlOwogCXVuc2lnbmVkIGNoYXIgZ2FpbjsKQEAgLTcxLDE0ICs3MywxNSBAQAogI2RlZmluZSBCUklER0VfMTAzIDEKIAogCV9fdTggc2Vuc29yOwkJCS8qIFR5cGUgb2YgaW1hZ2Ugc2Vuc29yIGNoaXAgKi8KLSNkZWZpbmUgU0VOU09SX0hWNzEzMVIgMAotI2RlZmluZSBTRU5TT1JfT1Y2NjUwIDEKLSNkZWZpbmUgU0VOU09SX09WNzYzMCAyCi0jZGVmaW5lIFNFTlNPUl9QQVMxMDYgMwotI2RlZmluZSBTRU5TT1JfUEFTMjAyIDQKLSNkZWZpbmUgU0VOU09SX1RBUzUxMTBDIDUKLSNkZWZpbmUgU0VOU09SX1RBUzUxMTBEIDYKLSNkZWZpbmUgU0VOU09SX1RBUzUxMzBDWFggNworI2RlZmluZSBTRU5TT1JfSFY3MTMxRCAwCisjZGVmaW5lIFNFTlNPUl9IVjcxMzFSIDEKKyNkZWZpbmUgU0VOU09SX09WNjY1MCAyCisjZGVmaW5lIFNFTlNPUl9PVjc2MzAgMworI2RlZmluZSBTRU5TT1JfUEFTMTA2IDQKKyNkZWZpbmUgU0VOU09SX1BBUzIwMiA1CisjZGVmaW5lIFNFTlNPUl9UQVM1MTEwQyA2CisjZGVmaW5lIFNFTlNPUl9UQVM1MTEwRCA3CisjZGVmaW5lIFNFTlNPUl9UQVM1MTMwQ1hYIDgKIAlfX3U4IHJlZzExOwogfTsKIApAQCAtMzAzLDE0ICszMDYsMjkgQEAKIAkJLnByaXYgPSAwfSwKIH07CiAKLXN0YXRpYyBjb25zdCBfX3U4IGluaXRIdjcxMzFbXSA9IHsKK3N0YXRpYyBjb25zdCBfX3U4IGluaXRIdjcxMzFkW10gPSB7CisJMHgwNCwgMHgwMywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDIsIDB4MDAsCisJMHgyOCwgMHgxZSwgMHg2MCwgMHg4ZSwgMHg0MiwKKwkweDFkLCAweDEwLCAweDAyLCAweDAzLCAweDBmLCAweDBjCit9Oworc3RhdGljIGNvbnN0IF9fdTggaHY3MTMxZF9zZW5zb3JfaW5pdFtdWzhdID0geworCXsweGEwLCAweDExLCAweDAxLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDE3fSwKKwl7MHhhMCwgMHgxMSwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxN30sCisJezB4YTAsIDB4MTEsIDB4MjgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTd9LAorCXsweGEwLCAweDExLCAweDMwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDE3fSwgLyogcmVzZXQgbGV2ZWwgKi8KKwl7MHhhMCwgMHgxMSwgMHgzNCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxN30sIC8qIHBpeGVsIGJpYXMgdm9sdCAqLworfTsKKworc3RhdGljIGNvbnN0IF9fdTggaW5pdEh2NzEzMXJbXSA9IHsKIAkweDQ2LCAweDc3LCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDExLCAweDAwLCAweDAwLCAweDAwLAogCTB4MDAsIDB4MDAsCiAJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMSwgMHgwMCwKIAkweDI4LCAweDFlLCAweDYwLCAweDhhLCAweDIwLAogCTB4MWQsIDB4MTAsIDB4MDIsIDB4MDMsIDB4MGYsIDB4MGMKIH07Ci1zdGF0aWMgY29uc3QgX191OCBodjcxMzFfc2Vuc29yX2luaXRbXVs4XSA9IHsKK3N0YXRpYyBjb25zdCBfX3U4IGh2NzEzMXJfc2Vuc29yX2luaXRbXVs4XSA9IHsKIAl7MHhjMCwgMHgxMSwgMHgzMSwgMHgzOCwgMHgyYSwgMHgyZSwgMHgwMCwgMHgxMH0sCiAJezB4YTAsIDB4MTEsIDB4MDEsIDB4MDgsIDB4MmEsIDB4MmUsIDB4MDAsIDB4MTB9LAogCXsweGIwLCAweDExLCAweDIwLCAweDAwLCAweGQwLCAweDJlLCAweDAwLCAweDEwfSwKQEAgLTM0MCw3ICszNTgsNyBAQAogCQkgKiBidXQgYmx1ZSB3b250IGJlIHRoZXJlLiBBdm9pZCB0aGlzIGRhdGEgLi4uICovCiAJezB4ZDAsIDB4NjAsIDB4MjYsIDB4MDEsIDB4MTQsIDB4ZDgsIDB4YTQsIDB4MTB9LCAvKiBmb3JtYXQgb3V0PyAqLwogCXsweGQwLCAweDYwLCAweDI2LCAweDAxLCAweDE0LCAweGQ4LCAweGE0LCAweDEwfSwKLQl7MHhhMCwgMHg2MCwgMHgzMCwgMHgzZCwgMHgwQSwgMHhkOCwgMHhhNCwgMHgxMH0sCisJezB4YTAsIDB4NjAsIDB4MzAsIDB4M2QsIDB4MGEsIDB4ZDgsIDB4YTQsIDB4MTB9LAogCS8qIEVuYWJsZSByZ2IgYnJpZ2h0bmVzcyBjb250cm9sICovCiAJezB4YTAsIDB4NjAsIDB4NjEsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAogCS8qIEhERzogTm90ZSB3aW5kb3dzIHVzZXMgdGhlIGxpbmUgYmVsb3csIHdoaWNoIHNldHMgYm90aCByZWdpc3RlciAweDYwCkBAIC01MDUsNyArNTIzLDcgQEAKIAl7MHhhMCwgMHg0MCwgMHgwMiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCiAJezB4ZDAsIDB4NDAsIDB4MDQsIDB4MDcsIDB4MzQsIDB4MDAsIDB4MDksIDB4MTB9LAogCXsweGQwLCAweDQwLCAweDA4LCAweDAxLCAweDAwLCAweDAwLCAweDAxLCAweDEwfSwKLQl7MHhkMCwgMHg0MCwgMHgwQywgMHgwMCwgMHgwQywgMHgwMSwgMHgzMiwgMHgxMH0sCisJezB4ZDAsIDB4NDAsIDB4MGMsIDB4MDAsIDB4MGMsIDB4MDEsIDB4MzIsIDB4MTB9LAogCXsweGQwLCAweDQwLCAweDEwLCAweDAwLCAweDAxLCAweDAwLCAweDYzLCAweDEwfSwKIAl7MHhhMCwgMHg0MCwgMHgxNSwgMHg3MCwgMHgwMSwgMHgwMCwgMHg2MywgMHgxMH0sCiAJezB4YTAsIDB4NDAsIDB4MTgsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NjMsIDB4MTB9LApAQCAtNTUxLDcgKzU2OSw4IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHNlbnNvcl9kYXRhIHNlbnNvcl9kYXRhW10gPSB7Ci1TRU5TKGluaXRIdjcxMzEsIE5VTEwsIGh2NzEzMV9zZW5zb3JfaW5pdCwgTlVMTCwgTlVMTCwgMCwgTk9fRVhQT3xOT19GUkVRLCAwKSwKK1NFTlMoaW5pdEh2NzEzMWQsIE5VTEwsIGh2NzEzMWRfc2Vuc29yX2luaXQsIE5VTEwsIE5VTEwsIEZfR0FJTiwgTk9fQlJJR0hUTkVTU3xOT19GUkVRLCAwKSwKK1NFTlMoaW5pdEh2NzEzMXIsIE5VTEwsIGh2NzEzMXJfc2Vuc29yX2luaXQsIE5VTEwsIE5VTEwsIDAsIE5PX0JSSUdIVE5FU1N8Tk9fRVhQT3xOT19GUkVRLCAwKSwKIFNFTlMoaW5pdE92NjY1MCwgTlVMTCwgb3Y2NjUwX3NlbnNvcl9pbml0LCBOVUxMLCBOVUxMLCBGX0dBSU58Rl9TSUYsIDAsIDB4NjApLAogU0VOUyhpbml0T3Y3NjMwLCBpbml0T3Y3NjMwXzMsIG92NzYzMF9zZW5zb3JfaW5pdCwgTlVMTCwgb3Y3NjMwX3NlbnNvcl9pbml0XzMsCiAJRl9HQUlOLCAwLCAweDIxKSwKQEAgLTcwMSw3ICs3MjAsMTggQEAKIAl1bnNpZ25lZCBjaGFyIGdhaW4gPSBzZC0+Z2FpbjsKIAogCXN3aXRjaCAoc2QtPnNlbnNvcikgeworCWNhc2UgU0VOU09SX0hWNzEzMUQ6IHsKKwkJX191OCBpMmNbXSA9CisJCQl7MHhjMCwgMHgxMSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxN307CiAKKwkJaTJjWzNdID0gMHgzZiAtIChzZC0+Z2FpbiAvIDQpOworCQlpMmNbNF0gPSAweDNmIC0gKHNkLT5nYWluIC8gNCk7CisJCWkyY1s1XSA9IDB4M2YgLSAoc2QtPmdhaW4gLyA0KTsKKworCQlpZiAoaTJjX3coZ3NwY2FfZGV2LCBpMmMpIDwgMCkKKwkJCWdvdG8gZXJyOworCQlicmVhazsKKwkgICAgfQogCWNhc2UgU0VOU09SX1RBUzUxMTBDOgogCWNhc2UgU0VOU09SX1RBUzUxMTBEOiB7CiAJCV9fdTggaTJjW10gPQpAQCAtNzg4LDYgKzgxOCwyMyBAQAogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAogCXN3aXRjaCAoc2QtPnNlbnNvcikgeworCWNhc2UgU0VOU09SX0hWNzEzMUQ6IHsKKwkJLyogTm90ZSB0aGUgZGF0YXNoZWV0IHdyb25nbHkgc2F5cyBsaW5lIG1vZGUgZXhwb3N1cmUgdXNlcyByZWcKKwkJICAgMHgyNiBhbmQgMHgyNywgdGVzdGluZyBoYXMgc2hvd24gMHgyNSArIDB4MjYgKi8KKwkJX191OCBpMmNbXSA9IHsweGMwLCAweDExLCAweDI1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3fTsKKwkJLyogVGhlIEhWNzEzMUQncyBleHBvc3VyZSBnb2VzIGZyb20gMCAtIDY1NTM1LCB3ZSBzY2FsZSBvdXIKKwkJICAgZXhwb3N1cmUgb2YgMC0xMDIzIHRvIDAtNjEzOC4gVGhlcmUgYXJlIDIgcmVhc29ucyBmb3IgdGhpczoKKwkJICAgMSkgVGhpcyBwdXRzIG91ciBleHBvc3VyZSBrbmVlIG9mIDIwMCBhdCBhcHByb3ggdGhlIHBvaW50CisJCSAgICAgIHdoZXJlIHRoZSBmcmFtZXJhdGUgc3RhcnRzIGRyb3BwaW5nCisJCSAgIDIpIEF0IDYxMzggdGhlIGZyYW1lcmF0ZSBoYXMgYWxyZWFkeSBkcm9wcGVkIHRvIDIgZnBzLAorCQkgICAgICBnb2luZyBhbnkgbG93ZXIgbWFrZXMgbGl0dGxlIHNlbnNlICovCisJCV9fdTE2IHJlZyA9IHNkLT5leHBvc3VyZSAqIDY7CisJCWkyY1szXSA9IHJlZyA+PiA4OworCQlpMmNbNF0gPSByZWcgJiAweGZmOworCQlpZiAoaTJjX3coZ3NwY2FfZGV2LCBpMmMpICE9IDApCisJCQlnb3RvIGVycjsKKwkJYnJlYWs7CisJICAgIH0KIAljYXNlIFNFTlNPUl9UQVM1MTEwQzoKIAljYXNlIFNFTlNPUl9UQVM1MTEwRDogewogCQkvKiByZWdpc3RlciAxOSdzIGhpZ2ggbmliYmxlIGNvbnRhaW5zIHRoZSBzbjljMTB4IGNsb2NrIGRpdmlkZXIKQEAgLTExNzcsMTMgKzEyMjQsMTAgQEAKIAlzZF9pbml0KGdzcGNhX2Rldik7CiB9CiAKLXN0YXRpYyB2b2lkIHNkX3BrdF9zY2FuKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKLQkJCXU4ICpkYXRhLAkJCS8qIGlzb2MgcGFja2V0ICovCi0JCQlpbnQgbGVuKQkJCS8qIGlzbyBwYWNrZXQgbGVuZ3RoICovCitzdGF0aWMgdTgqIGZpbmRfc29mKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgdTggKmRhdGEsIGludCBsZW4pCiB7Ci0JaW50IGk7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCXN0cnVjdCBjYW0gKmNhbSA9ICZnc3BjYV9kZXYtPmNhbTsKKwlpbnQgaSwgaGVhZGVyX3NpemUgPSAoc2QtPmJyaWRnZSA9PSBCUklER0VfMTAzKSA/IDE4IDogMTI7CiAKIAkvKiBmcmFtZXMgc3RhcnQgd2l0aDoKIAkgKglmZiBmZiAwMCBjNCBjNCA5NglzeW5jaHJvCkBAIC0xMTk0LDU4ICsxMjM4LDg0IEBACiAJICoJbGwgbW0JCWJyaWdodG5lc3Mgc3VtIG91dHNpZGUgYXV0byBleHBvc3VyZQogCSAqCSh4eCB4eCB4eCB4eCB4eCkJYXVkaW8gdmFsdWVzIGZvciBzbmMxMDMKIAkgKi8KLQlpZiAobGVuID4gNiAmJiBsZW4gPCAyNCkgewotCQlmb3IgKGkgPSAwOyBpIDwgbGVuIC0gNjsgaSsrKSB7Ci0JCQlpZiAoZGF0YVswICsgaV0gPT0gMHhmZgotCQkJICAgICYmIGRhdGFbMSArIGldID09IDB4ZmYKLQkJCSAgICAmJiBkYXRhWzIgKyBpXSA9PSAweDAwCi0JCQkgICAgJiYgZGF0YVszICsgaV0gPT0gMHhjNAotCQkJICAgICYmIGRhdGFbNCArIGldID09IDB4YzQKLQkJCSAgICAmJiBkYXRhWzUgKyBpXSA9PSAweDk2KSB7CS8qIHN0YXJ0IG9mIGZyYW1lICovCi0JCQkJaW50IGx1bSA9IC0xOwotCQkJCWludCBwa3RfdHlwZSA9IExBU1RfUEFDS0VUOwotCQkJCWludCBmcl9oX3N6ID0gKHNkLT5icmlkZ2UgPT0gQlJJREdFXzEwMykgPwotCQkJCQkxOCA6IDEyOwotCi0JCQkJaWYgKGxlbiAtIGkgPCBmcl9oX3N6KSB7Ci0JCQkJCVBERUJVRyhEX1NUUkVBTSwgInBhY2tldCB0b28gc2hvcnQgdG8iCi0JCQkJCQkiIGdldCBhdmcgYnJpZ2h0bmVzcyIpOwotCQkJCX0gZWxzZSBpZiAoc2QtPmJyaWRnZSA9PSBCUklER0VfMTAzKSB7Ci0JCQkJCWx1bSA9IGRhdGFbaSArIDldICsKLQkJCQkJCShkYXRhW2kgKyAxMF0gPDwgOCk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJbHVtID0gZGF0YVtpICsgOF0gKyAoZGF0YVtpICsgOV0gPDwgOCk7Ci0JCQkJfQotCQkJCS8qIFdoZW4gZXhwb3N1cmUgY2hhbmdlcyBtaWR3YXkgYSBmcmFtZSB3ZQotCQkJCSAgIGdldCBhIGx1bSBvZiAwIGluIHRoaXMgY2FzZSBkcm9wIDIgZnJhbWVzCi0JCQkJICAgYXMgdGhlIGZyYW1lcyBkaXJlY3RseSBhZnRlciBhbiBleHBvc3VyZQotCQkJCSAgIGNoYW5nZSBoYXZlIGFuIHVuc3RhYmxlIGltYWdlLiBTb21ldGltZXMgbHVtCi0JCQkJICAgKnJlYWxseSogaXMgMCAoY2FtIHVzZWQgaW4gbG93IGxpZ2h0IHdpdGgKLQkJCQkgICBsb3cgZXhwb3N1cmUgc2V0dGluZyksIHNvIGRvIG5vdCBkcm9wIGZyYW1lcwotCQkJCSAgIGlmIHRoZSBwcmV2aW91cyBsdW0gd2FzIDAgdG9vLiAqLwotCQkJCWlmIChsdW0gPT0gMCAmJiBzZC0+cHJldl9hdmdfbHVtICE9IDApIHsKLQkJCQkJbHVtID0gLTE7Ci0JCQkJCXNkLT5mcmFtZXNfdG9fZHJvcCA9IDI7Ci0JCQkJCXNkLT5wcmV2X2F2Z19sdW0gPSAwOwotCQkJCX0gZWxzZQotCQkJCQlzZC0+cHJldl9hdmdfbHVtID0gbHVtOwotCQkJCWF0b21pY19zZXQoJnNkLT5hdmdfbHVtLCBsdW0pOwotCi0JCQkJaWYgKHNkLT5mcmFtZXNfdG9fZHJvcCkgewotCQkJCQlzZC0+ZnJhbWVzX3RvX2Ryb3AtLTsKLQkJCQkJcGt0X3R5cGUgPSBESVNDQVJEX1BBQ0tFVDsKLQkJCQl9Ci0KLQkJCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBwa3RfdHlwZSwKLQkJCQkJCU5VTEwsIDApOwotCQkJCWRhdGEgKz0gaSArIGZyX2hfc3o7Ci0JCQkJbGVuIC09IGkgKyBmcl9oX3N6OwotCQkJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIEZJUlNUX1BBQ0tFVCwKLQkJCQkJCWRhdGEsIGxlbik7Ci0JCQkJcmV0dXJuOworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworCQlzd2l0Y2ggKHNkLT5oZWFkZXJfcmVhZCkgeworCQljYXNlIDA6CisJCQlpZiAoZGF0YVtpXSA9PSAweGZmKQorCQkJCXNkLT5oZWFkZXJfcmVhZCsrOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCWlmIChkYXRhW2ldID09IDB4ZmYpCisJCQkJc2QtPmhlYWRlcl9yZWFkKys7CisJCQllbHNlCisJCQkJc2QtPmhlYWRlcl9yZWFkID0gMDsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlpZiAoZGF0YVtpXSA9PSAweDAwKQorCQkJCXNkLT5oZWFkZXJfcmVhZCsrOworCQkJZWxzZSBpZiAoZGF0YVtpXSAhPSAweGZmKQorCQkJCXNkLT5oZWFkZXJfcmVhZCA9IDA7CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQkJaWYgKGRhdGFbaV0gPT0gMHhjNCkKKwkJCQlzZC0+aGVhZGVyX3JlYWQrKzsKKwkJCWVsc2UgaWYgKGRhdGFbaV0gPT0gMHhmZikKKwkJCQlzZC0+aGVhZGVyX3JlYWQgPSAxOworCQkJZWxzZQorCQkJCXNkLT5oZWFkZXJfcmVhZCA9IDA7CisJCQlicmVhazsKKwkJY2FzZSA0OgorCQkJaWYgKGRhdGFbaV0gPT0gMHhjNCkKKwkJCQlzZC0+aGVhZGVyX3JlYWQrKzsKKwkJCWVsc2UgaWYgKGRhdGFbaV0gPT0gMHhmZikKKwkJCQlzZC0+aGVhZGVyX3JlYWQgPSAxOworCQkJZWxzZQorCQkJCXNkLT5oZWFkZXJfcmVhZCA9IDA7CisJCQlicmVhazsKKwkJY2FzZSA1OgorCQkJaWYgKGRhdGFbaV0gPT0gMHg5NikKKwkJCQlzZC0+aGVhZGVyX3JlYWQrKzsKKwkJCWVsc2UgaWYgKGRhdGFbaV0gPT0gMHhmZikKKwkJCQlzZC0+aGVhZGVyX3JlYWQgPSAxOworCQkJZWxzZQorCQkJCXNkLT5oZWFkZXJfcmVhZCA9IDA7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXNkLT5oZWFkZXJbc2QtPmhlYWRlcl9yZWFkIC0gNl0gPSBkYXRhW2ldOworCQkJc2QtPmhlYWRlcl9yZWFkKys7CisJCQlpZiAoc2QtPmhlYWRlcl9yZWFkID09IGhlYWRlcl9zaXplKSB7CisJCQkJc2QtPmhlYWRlcl9yZWFkID0gMDsKKwkJCQlyZXR1cm4gZGF0YSArIGkgKyAxOwogCQkJfQogCQl9CiAJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBzZF9wa3Rfc2NhbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQl1OCAqZGF0YSwJCQkvKiBpc29jIHBhY2tldCAqLworCQkJaW50IGxlbikJCQkvKiBpc28gcGFja2V0IGxlbmd0aCAqLworeworCWludCBmcl9oX3N6ID0gMCwgbHVtX29mZnNldCA9IDAsIGxlbl9hZnRlcl9zb2YgPSAwOworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlzdHJ1Y3QgY2FtICpjYW0gPSAmZ3NwY2FfZGV2LT5jYW07CisJdTggKnNvZjsKKworCXNvZiA9IGZpbmRfc29mKGdzcGNhX2RldiwgZGF0YSwgbGVuKTsKKwlpZiAoc29mKSB7CisJCWlmIChzZC0+YnJpZGdlID09IEJSSURHRV8xMDMpIHsKKwkJCWZyX2hfc3ogPSAxODsKKwkJCWx1bV9vZmZzZXQgPSAzOworCQl9IGVsc2UgeworCQkJZnJfaF9zeiA9IDEyOworCQkJbHVtX29mZnNldCA9IDI7CisJCX0KKworCQlsZW5fYWZ0ZXJfc29mID0gbGVuIC0gKHNvZiAtIGRhdGEpOworCQlsZW4gPSAoc29mIC0gZGF0YSkgLSBmcl9oX3N6OworCQlpZiAobGVuIDwgMCkKKwkJCWxlbiA9IDA7CisJfQogCiAJaWYgKGNhbS0+Y2FtX21vZGVbZ3NwY2FfZGV2LT5jdXJyX21vZGVdLnByaXYgJiBNT0RFX1JBVykgewogCQkvKiBJbiByYXcgbW9kZSB3ZSBzb21ldGltZXMgZ2V0IHNvbWUgZ2FyYmFnZSBhZnRlciB0aGUgZnJhbWUKQEAgLTEyNTksNiArMTMyOSwzMyBAQAogCX0KIAogCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIElOVEVSX1BBQ0tFVCwgZGF0YSwgbGVuKTsKKworCWlmIChzb2YpIHsKKwkJaW50ICBsdW0gPSBzZC0+aGVhZGVyW2x1bV9vZmZzZXRdICsKKwkJCSAgKHNkLT5oZWFkZXJbbHVtX29mZnNldCArIDFdIDw8IDgpOworCisJCS8qIFdoZW4gZXhwb3N1cmUgY2hhbmdlcyBtaWR3YXkgYSBmcmFtZSB3ZQorCQkgICBnZXQgYSBsdW0gb2YgMCBpbiB0aGlzIGNhc2UgZHJvcCAyIGZyYW1lcworCQkgICBhcyB0aGUgZnJhbWVzIGRpcmVjdGx5IGFmdGVyIGFuIGV4cG9zdXJlCisJCSAgIGNoYW5nZSBoYXZlIGFuIHVuc3RhYmxlIGltYWdlLiBTb21ldGltZXMgbHVtCisJCSAgICpyZWFsbHkqIGlzIDAgKGNhbSB1c2VkIGluIGxvdyBsaWdodCB3aXRoCisJCSAgIGxvdyBleHBvc3VyZSBzZXR0aW5nKSwgc28gZG8gbm90IGRyb3AgZnJhbWVzCisJCSAgIGlmIHRoZSBwcmV2aW91cyBsdW0gd2FzIDAgdG9vLiAqLworCQlpZiAobHVtID09IDAgJiYgc2QtPnByZXZfYXZnX2x1bSAhPSAwKSB7CisJCQlsdW0gPSAtMTsKKwkJCXNkLT5mcmFtZXNfdG9fZHJvcCA9IDI7CisJCQlzZC0+cHJldl9hdmdfbHVtID0gMDsKKwkJfSBlbHNlCisJCQlzZC0+cHJldl9hdmdfbHVtID0gbHVtOworCQlhdG9taWNfc2V0KCZzZC0+YXZnX2x1bSwgbHVtKTsKKworCQlpZiAoc2QtPmZyYW1lc190b19kcm9wKQorCQkJc2QtPmZyYW1lc190b19kcm9wLS07CisJCWVsc2UKKwkJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIExBU1RfUEFDS0VULCBOVUxMLCAwKTsKKworCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBGSVJTVF9QQUNLRVQsIHNvZiwgbGVuX2FmdGVyX3NvZik7CisJfQogfQogCiBzdGF0aWMgaW50IHNkX3NldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCkBAIC0xNDMxLDkgKzE1MjgsNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdIF9fZGV2aW5pdGNvbnN0ID0gewogCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDAxKSwgU0IoVEFTNTExMEMsIDEwMil9LCAvKiBUQVM1MTEwQzFCICovCiAJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMDUpLCBTQihUQVM1MTEwQywgMTAxKX0sIC8qIFRBUzUxMTBDMUIgKi8KLSNpZiAhZGVmaW5lZCBDT05GSUdfVVNCX1NOOUMxMDIgJiYgIWRlZmluZWQgQ09ORklHX1VTQl9TTjlDMTAyX01PRFVMRQogCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDA3KSwgU0IoVEFTNTExMEQsIDEwMSl9LCAvKiBUQVM1MTEwRCAqLwotI2VuZGlmCiAJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMDkpLCBTQihQQVMxMDYsIDEwMSl9LAogCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDBkKSwgU0IoUEFTMTA2LCAxMDEpfSwKIAl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjAxMSksIFNCKE9WNjY1MCwgMTAxKX0sCkBAIC0xNDQ0LDkgKzE1MzksMTIgQEAKICNlbmRpZgogCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDI4KSwgU0IoUEFTMjAyLCAxMDIpfSwKIAl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjAyOSksIFNCKFBBUzEwNiwgMTAyKX0sCisJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMmEpLCBTQihIVjcxMzFELCAxMDIpfSwKKwkvKiB7VVNCX0RFVklDRSgweDBjNDUsIDB4NjAyYiksIFNCKE1JMDM0MywgMTAyKX0sICovCiAJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMmMpLCBTQihPVjc2MzAsIDEwMil9LAogCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDJkKSwgU0IoSFY3MTMxUiwgMTAyKX0sCiAJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMmUpLCBTQihPVjc2MzAsIDEwMil9LAorCS8qIHtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDJiKSwgU0IoTUkwM1hYLCAxMDIpfSwgKi8gLyogTUkwMzQzIE1JMDM2MCBNSTAzMzAgKi8KIAl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjA4ZiksIFNCKE9WNzYzMCwgMTAzKX0sCiAjaWYgIWRlZmluZWQgQ09ORklHX1VTQl9TTjlDMTAyICYmICFkZWZpbmVkIENPTkZJR19VU0JfU045QzEwMl9NT0RVTEUKIAl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjBhZiksIFNCKFBBUzIwMiwgMTAzKX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Nvbml4ai5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zb25peGouYwppbmRleCBlMjNkZTU3Li4yZDBiYjE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Nvbml4ai5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc29uaXhqLmMKQEAgLTE1OTgsMjIgKzE1OTgsMjIgQEAKIAl9CiB9CiAKKy8qIGNoZWNrIHRoZSBJRCBvZiB0aGUgaHY3MTMxIHNlbnNvciAqLworLyogdGhpcyBzZXF1ZW5jZSBpcyBuZWVkZWQgYmVjYXVzZSBpdCBhY3RpdmF0ZXMgdGhlIHNlbnNvciAqLwogc3RhdGljIHZvaWQgaHY3MTMxcl9wcm9iZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7Ci0JaTJjX3cxKGdzcGNhX2RldiwgMHgwMiwgMCk7CQkJLyogc2Vuc29yIHdha2V1cCAqLworCWkyY193MShnc3BjYV9kZXYsIDB4MDIsIDApOwkJLyogc2Vuc29yIHdha2V1cCAqLwogCW1zbGVlcCgxMCk7Ci0JcmVnX3cxKGdzcGNhX2RldiwgMHgwMiwgMHg2Nik7CQkJLyogR3BpbyBvbiAqLworCXJlZ193MShnc3BjYV9kZXYsIDB4MDIsIDB4NjYpOwkJLyogR3BpbyBvbiAqLwogCW1zbGVlcCgxMCk7Ci0JaTJjX3IoZ3NwY2FfZGV2LCAwLCA1KTsJCQkJLyogcmVhZCBzZW5zb3IgaWQgKi8KLQlpZiAoZ3NwY2FfZGV2LT51c2JfYnVmWzBdID09IDB4MDIKKwlpMmNfcihnc3BjYV9kZXYsIDAsIDUpOwkJCS8qIHJlYWQgc2Vuc29yIGlkICovCisJaWYgKGdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9PSAweDAyCS8qIGNoaXAgSUQgKDAyIGlzIFIpICovCiAJICAgICYmIGdzcGNhX2Rldi0+dXNiX2J1ZlsxXSA9PSAweDA5Ci0JICAgICYmIGdzcGNhX2Rldi0+dXNiX2J1ZlsyXSA9PSAweDAxCi0JICAgICYmIGdzcGNhX2Rldi0+dXNiX2J1ZlszXSA9PSAweDAwCi0JICAgICYmIGdzcGNhX2Rldi0+dXNiX2J1Zls0XSA9PSAweDAwKSB7Ci0JCVBERUJVRyhEX1BST0JFLCAiU2Vuc29yIHNuOWMxMDJQIEhWNzEzMVIgZm91bmQiKTsKKwkgICAgJiYgZ3NwY2FfZGV2LT51c2JfYnVmWzJdID09IDB4MDEpIHsKKwkJUERFQlVHKERfUFJPQkUsICJTZW5zb3IgSFY3MTMxUiBmb3VuZCIpOwogCQlyZXR1cm47CiAJfQotCVBERUJVRyhEX1BST0JFLCAiU2Vuc29yIDB4JTAyeCAweCUwMnggMHglMDJ4IC0gc245YzEwMlAgbm90IGZvdW5kIiwKKwl3YXJuKCJFcnJvbmVvdXMgSFY3MTMxUiBJRCAweCUwMnggMHglMDJ4IDB4JTAyeCIsCiAJCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSwgZ3NwY2FfZGV2LT51c2JfYnVmWzFdLAogCQlnc3BjYV9kZXYtPnVzYl9idWZbMl0pOwogfQpAQCAtMjUzMyw3ICsyNTMzLDcgQEAKIAkJaW5pdCA9IG9tNjgwMl9zZW5zb3JfcGFyYW0xOwogCQlpZiAoIW1vZGUpIHsJCQkvKiBpZiA2NDB4NDgwICovCiAJCQlyZWcxNyAmPSB+TUNLX1NJWkVfTUFTSzsKLQkJCXJlZzE3IHw9IDB4MDE7CQkvKiBjbG9jayAvIDQgKi8KKwkJCXJlZzE3IHw9IDB4MDQ7CQkvKiBjbG9jayAvIDQgKi8KIAkJfQogCQlicmVhazsKIAljYXNlIFNFTlNPUl9PVjc2MzA6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1NjEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTU2MS5jCmluZGV4IGFkNzNmNDguLjNhMTYyYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTU2MS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTU2MS5jCkBAIC01OTcsNyArNTk3LDcgQEAKIAllbHNlIGlmIChzZC0+Z2FpbiA8IDEyOCkKIAkJZ3NwY2FfZGV2LT51c2JfYnVmWzBdID0gKHNkLT5nYWluIC8gMikgfCAweDQwOwogCWVsc2UKLQkJZ3NwY2FfZGV2LT51c2JfYnVmWzBdID0gKHNkLT5nYWluIC8gNCkgfCAweEMwOworCQlnc3BjYV9kZXYtPnVzYl9idWZbMF0gPSAoc2QtPmdhaW4gLyA0KSB8IDB4YzA7CiAKIAlnc3BjYV9kZXYtPnVzYl9idWZbMV0gPSAwOwogCXJlZ193X2J1Zihnc3BjYV9kZXYsIDB4ODMzNSwgMik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NxOTA1Yy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcTkwNWMuYwppbmRleCBjMmU4OGI1Li44YmExOTk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NxOTA1Yy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3E5MDVjLmMKQEAgLTMwMSw2ICszMDEsNyBAQAogc3RhdGljIGNvbnN0IF9fZGV2aW5pdGRhdGEgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gPSB7CiAJe1VTQl9ERVZJQ0UoMHgyNzcwLCAweDkwNWMpfSwKIAl7VVNCX0RFVklDRSgweDI3NzAsIDB4OTA1MCl9LAorCXtVU0JfREVWSUNFKDB4Mjc3MCwgMHg5MDUxKX0sCiAJe1VTQl9ERVZJQ0UoMHgyNzcwLCAweDkwNTIpfSwKIAl7VVNCX0RFVklDRSgweDI3NzAsIDB4OTEzZCl9LAogCXt9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NxOTMweC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcTkzMHguYwppbmRleCAzZTRiMGI5Li5hNGE5ODgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NxOTMweC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3E5MzB4LmMKQEAgLTY4NywxMCArNjg3LDE5IEBACiAJCWlmIChnc3BjYV9kZXYtPnVzYl9idWZbMF0gIT0gMCkKIAkJCWJyZWFrOwogCX0KLQlpZiAoaSA+PSBBUlJBWV9TSVpFKHByb2JlX29yZGVyKSkKKwlpZiAoaSA+PSBBUlJBWV9TSVpFKHByb2JlX29yZGVyKSkgewogCQllcnIoIlVua25vd24gc2Vuc29yIik7Ci0JZWxzZQotCQlzZC0+c2Vuc29yID0gcHJvYmVfb3JkZXJbaV07CisJCWdzcGNhX2Rldi0+dXNiX2VyciA9IC1FSU5WQUw7CisJCXJldHVybjsKKwl9CisJc2QtPnNlbnNvciA9IHByb2JlX29yZGVyW2ldOworCXN3aXRjaCAoc2QtPnNlbnNvcikgeworCWNhc2UgU0VOU09SX09WNzY2MDoKKwljYXNlIFNFTlNPUl9PVjk2MzA6CisJCWVycigiU2Vuc29yICVzIG5vdCB5ZXQgdHJlYXRlZCIsIHNlbnNvcl90YltzZC0+c2Vuc29yXS5uYW1lKTsKKwkJZ3NwY2FfZGV2LT51c2JfZXJyID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQogfQogCiBzdGF0aWMgdm9pZCBtdDl2MTExX2luaXQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQpAQCAtODY3LDYgKzg3Niw5IEBACiAgKi8KIAogCXJlZ19yKGdzcGNhX2RldiwgU1E5MzBfQ1RSTF9HRVRfREVWX0lORk8sIDgpOworCWlmIChnc3BjYV9kZXYtPnVzYl9lcnIgPCAwKQorCQlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfZXJyOworCiAvKiBpdCByZXR1cm5zOgogICogMDMgMDAgMTIgOTMgMGIgZjYgYzkgMDAJbGl2ZSEgdWx0cmEKICAqIDAzIDAwIDA3IDkzIDBiIGY2IGNhIDAwCWxpdmUhIHVsdHJhIGZvciBub3RlYm9vawpAQCAtOTAwLDE1ICs5MTIsMTUgQEAKIAlpZiAoc2QtPnNlbnNvciA9PSBTRU5TT1JfTUkwMzYwKSB7CiAKIAkJLyogbm8gc2Vuc29yIHByb2JlIGZvciBpY2FtIHRyYWNlciAqLwotCQlpZiAoZ3NwY2FfZGV2LT51c2JfYnVmWzVdID09IDB4ZjYpCS8qIGlmIENNT1MgKi8KKwkJaWYgKGdzcGNhX2Rldi0+dXNiX2J1Zls1XSA9PSAweGY2KQkvKiBpZiBjY2QgKi8KIAkJCXNkLT5zZW5zb3IgPSBTRU5TT1JfSUNYMDk4QlE7CiAJCWVsc2UKIAkJCWNtb3NfcHJvYmUoZ3NwY2FfZGV2KTsKIAl9Ci0KLQlQREVCVUcoRF9QUk9CRSwgIlNlbnNvciAlcyIsIHNlbnNvcl90YltzZC0+c2Vuc29yXS5uYW1lKTsKLQotCWdsb2JhbF9pbml0KHNkLCAxKTsKKwlpZiAoZ3NwY2FfZGV2LT51c2JfZXJyID49IDApIHsKKwkJUERFQlVHKERfUFJPQkUsICJTZW5zb3IgJXMiLCBzZW5zb3JfdGJbc2QtPnNlbnNvcl0ubmFtZSk7CisJCWdsb2JhbF9pbml0KHNkLCAxKTsKKwl9CiAJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4LmMKaW5kZXggMDg2ZGU0NC4uMjhlYTQxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHguYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eC5jCkBAIC0yNjMsNyArMjYzLDIxIEBACiBzdGF0aWMgaW50IHN0djA2eHhfc3RhcnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlpbnQgZXJyOworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmFsdDsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZjsKKwlpbnQgZXJyLCBwYWNrZXRfc2l6ZTsKKworCWludGYgPSB1c2JfaWZudW1fdG9faWYoc2QtPmdzcGNhX2Rldi5kZXYsIHNkLT5nc3BjYV9kZXYuaWZhY2UpOworCWFsdCA9IHVzYl9hbHRudW1fdG9fYWx0c2V0dGluZyhpbnRmLCBzZC0+Z3NwY2FfZGV2LmFsdCk7CisJaWYgKCFhbHQpIHsKKwkJUERFQlVHKERfRVJSLCAiQ291bGRuJ3QgZ2V0IGFsdHNldHRpbmciKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJcGFja2V0X3NpemUgPSBsZTE2X3RvX2NwdShhbHQtPmVuZHBvaW50WzBdLmRlc2Mud01heFBhY2tldFNpemUpOworCWVyciA9IHN0djA2eHhfd3JpdGVfYnJpZGdlKHNkLCBTVFZfSVNPX1NJWkVfTCwgcGFja2V0X3NpemUpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJLyogUHJlcGFyZSB0aGUgc2Vuc29yIGZvciBzdGFydCAqLwogCWVyciA9IHNkLT5zZW5zb3ItPnN0YXJ0KHNkKTsKQEAgLTI4Miw2ICsyOTYsNDMgQEAKIAlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKIH0KIAorc3RhdGljIGludCBzdHYwNnh4X2lzb2NfaW5pdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqYWx0OworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCS8qIFN0YXJ0IGlzb2MgYmFuZHdpZHRoICJuZWdvdGlhdGlvbiIgYXQgbWF4IGlzb2MgYmFuZHdpZHRoICovCisJYWx0ID0gJmdzcGNhX2Rldi0+ZGV2LT5jb25maWctPmludGZfY2FjaGVbMF0tPmFsdHNldHRpbmdbMV07CisJYWx0LT5lbmRwb2ludFswXS5kZXNjLndNYXhQYWNrZXRTaXplID0KKwkJY3B1X3RvX2xlMTYoc2QtPnNlbnNvci0+bWF4X3BhY2tldF9zaXplW2dzcGNhX2Rldi0+Y3Vycl9tb2RlXSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdHYwNnh4X2lzb2NfbmVnbyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJaW50IHJldCwgcGFja2V0X3NpemUsIG1pbl9wYWNrZXRfc2l6ZTsKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICphbHQ7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJYWx0ID0gJmdzcGNhX2Rldi0+ZGV2LT5jb25maWctPmludGZfY2FjaGVbMF0tPmFsdHNldHRpbmdbMV07CisJcGFja2V0X3NpemUgPSBsZTE2X3RvX2NwdShhbHQtPmVuZHBvaW50WzBdLmRlc2Mud01heFBhY2tldFNpemUpOworCW1pbl9wYWNrZXRfc2l6ZSA9IHNkLT5zZW5zb3ItPm1pbl9wYWNrZXRfc2l6ZVtnc3BjYV9kZXYtPmN1cnJfbW9kZV07CisJaWYgKHBhY2tldF9zaXplIDw9IG1pbl9wYWNrZXRfc2l6ZSkKKwkJcmV0dXJuIC1FSU87CisKKwlwYWNrZXRfc2l6ZSAtPSAxMDA7CisJaWYgKHBhY2tldF9zaXplIDwgbWluX3BhY2tldF9zaXplKQorCQlwYWNrZXRfc2l6ZSA9IG1pbl9wYWNrZXRfc2l6ZTsKKwlhbHQtPmVuZHBvaW50WzBdLmRlc2Mud01heFBhY2tldFNpemUgPSBjcHVfdG9fbGUxNihwYWNrZXRfc2l6ZSk7CisKKwlyZXQgPSB1c2Jfc2V0X2ludGVyZmFjZShnc3BjYV9kZXYtPmRldiwgZ3NwY2FfZGV2LT5pZmFjZSwgMSk7CisJaWYgKHJldCA8IDApCisJCVBERUJVRyhEX0VSUnxEX1NUUkVBTSwgInNldCBhbHQgMSBlcnIgJWQiLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIHZvaWQgc3R2MDZ4eF9zdG9wTihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJaW50IGVycjsKQEAgLTM0OSw3ICs0MDAsNyBAQAogCQl9CiAKIAkJLyogRmlyc3QgYnl0ZSBzZWVtIHRvIGJlIDAyPWRhdGEgMm5kIGJ5dGUgaXMgdW5rbm93bj8/PyAqLwotCQlpZiAoc2QtPmJyaWRnZSA9PSBCUklER0VfU1Q2NDIyICYmIChpZCAmIDB4RkYwMCkgPT0gMHgwMjAwKQorCQlpZiAoc2QtPmJyaWRnZSA9PSBCUklER0VfU1Q2NDIyICYmIChpZCAmIDB4ZmYwMCkgPT0gMHgwMjAwKQogCQkJZ290byBmcmFtZV9kYXRhOwogCiAJCXN3aXRjaCAoaWQpIHsKQEAgLTQ2Miw2ICs1MTMsOCBAQAogCS5zdGFydCA9IHN0djA2eHhfc3RhcnQsCiAJLnN0b3BOID0gc3R2MDZ4eF9zdG9wTiwKIAkucGt0X3NjYW4gPSBzdHYwNnh4X3BrdF9zY2FuLAorCS5pc29jX2luaXQgPSBzdHYwNnh4X2lzb2NfaW5pdCwKKwkuaXNvY19uZWdvID0gc3R2MDZ4eF9pc29jX25lZ28sCiAjaWYgZGVmaW5lZChDT05GSUdfSU5QVVQpIHx8IGRlZmluZWQoQ09ORklHX0lOUFVUX01PRFVMRSkKIAkuaW50X3BrdF9zY2FuID0gc2RfaW50X3BrdF9zY2FuLAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eF9oZGNzLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eF9oZGNzLmgKaW5kZXggY2YzZDBjYy4uYjUzOGRjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfaGRjcy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4X2hkY3MuaApAQCAtMTQ2LDYgKzE0NiwxMSBAQAogCS5pMmNfYWRkciA9ICgweDU1IDw8IDEpLAogCS5pMmNfbGVuID0gMSwKIAorCS8qIEZJWE1FIChzZWUgaWYgd2UgY2FuIGxvd2VyIG1pbl9wYWNrZXRfc2l6ZSwgbmVlZHMgdGVzdGluZywgYW5kIGFsc28KKwkgICBhZGp1c3RpbmcgZnJhbWVyYXRlIHdoZW4gdGhlIGJhbmR3aWR0aCBnZXRzIGxvd2VyKSAqLworCS5taW5fcGFja2V0X3NpemUgPSB7IDg0NyB9LAorCS5tYXhfcGFja2V0X3NpemUgPSB7IDg0NyB9LAorCiAJLmluaXQgPSBoZGNzX2luaXQsCiAJLnByb2JlID0gaGRjc19wcm9iZV8xeDAwLAogCS5zdGFydCA9IGhkY3Nfc3RhcnQsCkBAIC0xNjAsNiArMTY1LDExIEBACiAJLmkyY19hZGRyID0gKDB4NTUgPDwgMSksCiAJLmkyY19sZW4gPSAxLAogCisJLyogRklYTUUgKHNlZSBpZiB3ZSBjYW4gbG93ZXIgbWluX3BhY2tldF9zaXplLCBuZWVkcyB0ZXN0aW5nLCBhbmQgYWxzbworCSAgIGFkanVzdGluZyBmcmFtZXJhdGUgd2hlbiB0aGUgYmFuZHdpZHRobSBnZXRzIGxvd2VyKSAqLworCS5taW5fcGFja2V0X3NpemUgPSB7IDg0NyB9LAorCS5tYXhfcGFja2V0X3NpemUgPSB7IDg0NyB9LAorCiAJLmluaXQgPSBoZGNzX2luaXQsCiAJLnByb2JlID0gaGRjc19wcm9iZV8xMDIwLAogCS5zdGFydCA9IGhkY3Nfc3RhcnQsCkBAIC0xNzcsNyArMTg3LDYgQEAKIAl7U1RWX1JFRzA0LCAweDA3fSwKIAogCXtTVFZfU0NBTl9SQVRFLCAweDIwfSwKLQl7U1RWX0lTT19TSVpFX0wsIDg0N30sCiAJe1NUVl9ZX0NUUkwsIDB4MDF9LAogCXtTVFZfWF9DVFJMLCAweDBhfQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4X3BiMDEwMC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfcGIwMTAwLmMKaW5kZXggMjg1MjIxZS4uYWM0N2I0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfcGIwMTAwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfcGIwMTAwLmMKQEAgLTIwOCwxMSArMjA4LDI0IEBACiAKIHN0YXRpYyBpbnQgcGIwMTAwX3N0YXJ0KHN0cnVjdCBzZCAqc2QpCiB7Ci0JaW50IGVycjsKKwlpbnQgZXJyLCBwYWNrZXRfc2l6ZSwgbWF4X3BhY2tldF9zaXplOworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmFsdDsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZjsKIAlzdHJ1Y3QgY2FtICpjYW0gPSAmc2QtPmdzcGNhX2Rldi5jYW07CiAJczMyICpzZW5zb3Jfc2V0dGluZ3MgPSBzZC0+c2Vuc29yX3ByaXY7CiAJdTMyIG1vZGUgPSBjYW0tPmNhbV9tb2RlW3NkLT5nc3BjYV9kZXYuY3Vycl9tb2RlXS5wcml2OwogCisJaW50ZiA9IHVzYl9pZm51bV90b19pZihzZC0+Z3NwY2FfZGV2LmRldiwgc2QtPmdzcGNhX2Rldi5pZmFjZSk7CisJYWx0ID0gdXNiX2FsdG51bV90b19hbHRzZXR0aW5nKGludGYsIHNkLT5nc3BjYV9kZXYuYWx0KTsKKwlwYWNrZXRfc2l6ZSA9IGxlMTZfdG9fY3B1KGFsdC0+ZW5kcG9pbnRbMF0uZGVzYy53TWF4UGFja2V0U2l6ZSk7CisKKwkvKiBJZiB3ZSBkb24ndCBoYXZlIGVub3VnaCBiYW5kd2lkdGggdXNlIGEgbG93ZXIgZnJhbWVyYXRlICovCisJbWF4X3BhY2tldF9zaXplID0gc2QtPnNlbnNvci0+bWF4X3BhY2tldF9zaXplW3NkLT5nc3BjYV9kZXYuY3Vycl9tb2RlXTsKKwlpZiAocGFja2V0X3NpemUgPCBtYXhfcGFja2V0X3NpemUpCisJCXN0djA2eHhfd3JpdGVfc2Vuc29yKHNkLCBQQl9ST1dTUEVFRCwgQklUKDQpfEJJVCgzKXxCSVQoMSkpOworCWVsc2UKKwkJc3R2MDZ4eF93cml0ZV9zZW5zb3Ioc2QsIFBCX1JPV1NQRUVELCBCSVQoNSl8QklUKDMpfEJJVCgxKSk7CisKIAkvKiBTZXR1cCBzZW5zb3Igd2luZG93ICovCiAJaWYgKG1vZGUgJiBQQjAxMDBfQ1JPUF9UT19WR0EpIHsKIAkJc3R2MDZ4eF93cml0ZV9zZW5zb3Ioc2QsIFBCX1JTVEFSVCwgMzApOwpAQCAtMzI4LDkgKzM0MSw2IEBACiAJc3R2MDZ4eF93cml0ZV9icmlkZ2Uoc2QsIFNUVl9SRUcwMywgMHg0NSk7CiAJc3R2MDZ4eF93cml0ZV9icmlkZ2Uoc2QsIFNUVl9SRUcwNCwgMHgwNyk7CiAKLQkvKiBJU08tU2l6ZSAoMHgyN2I6IDYzNS4uLiB3aHk/IC0gSERDUyB1c2VzIDg0NykgKi8KLQlzdHYwNnh4X3dyaXRlX2JyaWRnZShzZCwgU1RWX0lTT19TSVpFX0wsIDg0Nyk7Ci0KIAkvKiBTY2FuL3RpbWluZyBmb3IgdGhlIHNlbnNvciAqLwogCXN0djA2eHhfd3JpdGVfc2Vuc29yKHNkLCBQQl9ST1dTUEVFRCwgQklUKDQpfEJJVCgzKXxCSVQoMSkpOwogCXN0djA2eHhfd3JpdGVfc2Vuc29yKHNkLCBQQl9DRklMTElOLCAxNCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eF9wYjAxMDAuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4X3BiMDEwMC5oCmluZGV4IDRkZTRmYTUuLjc1N2RlMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4X3BiMDEwMC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4X3BiMDEwMC5oCkBAIC0xMzgsNiArMTM4LDkgQEAKIAkuaTJjX2FkZHIgPSAweGJhLAogCS5pMmNfbGVuID0gMiwKIAorCS5taW5fcGFja2V0X3NpemUgPSB7IDYzNSwgODQ3IH0sCisJLm1heF9wYWNrZXRfc2l6ZSA9IHsgODQ3LCA5MjMgfSwKKwogCS5pbml0ID0gcGIwMTAwX2luaXQsCiAJLnByb2JlID0gcGIwMTAwX3Byb2JlLAogCS5zdGFydCA9IHBiMDEwMF9zdGFydCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4X3NlbnNvci5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfc2Vuc29yLmgKaW5kZXggOTM0YjljZS4uZmIyMjlkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfc2Vuc29yLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfc2Vuc29yLmgKQEAgLTUzLDYgKzUzLDEwIEBACiAJLyogbGVuZ3RoIG9mIGFuIGkyYyB3b3JkICovCiAJdTggaTJjX2xlbjsKIAorCS8qIElzb2MgcGFja2V0IHNpemUgKHBlciBtb2RlKSAqLworCWludCBtaW5fcGFja2V0X3NpemVbNF07CisJaW50IG1heF9wYWNrZXRfc2l6ZVs0XTsKKwogCS8qIFByb2JlcyBpZiB0aGUgc2Vuc29yIGlzIGNvbm5lY3RlZCAqLwogCWludCAoKnByb2JlKShzdHJ1Y3Qgc2QgKnNkKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfc3Q2NDIyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eF9zdDY0MjIuYwppbmRleCAzYWY1MzI2Li44YTQ1NmRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eF9zdDY0MjIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eF9zdDY0MjIuYwpAQCAtMjgsNiArMjgsMjAgQEAKIAogI2luY2x1ZGUgInN0djA2eHhfc3Q2NDIyLmgiCiAKKy8qIGNvbnRyb2xzICovCitlbnVtIGVfY3RybCB7CisJQlJJR0hUTkVTUywKKwlDT05UUkFTVCwKKwlHQUlOLAorCUVYUE9TVVJFLAorCU5DVFJMUwkJLyogbnVtYmVyIG9mIGNvbnRyb2xzICovCit9OworCisvKiBzZW5zb3Igc2V0dGluZ3MgKi8KK3N0cnVjdCBzdDY0MjJfc2V0dGluZ3MgeworCXN0cnVjdCBnc3BjYV9jdHJsIGN0cmxzW05DVFJMU107Cit9OworCiBzdGF0aWMgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBzdDY0MjJfbW9kZVtdID0gewogCS8qIE5vdGUgd2UgYWN0dWFsbHkgZ2V0IDEyNCBsaW5lcyBvZiBkYXRhLCBvZiB3aGljaCB3ZSBza2lwIHRoZSA0c3QKIAkgICA0IGFzIHRoZXkgYXJlIGdhcmJhZ2UgKi8KQEAgLTU3LDkgKzcxLDE0IEBACiAJfSwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RybCBzdDY0MjJfY3RybFtdID0gewotI2RlZmluZSBCUklHSFRORVNTX0lEWCAwCi0JeworLyogVjRMMiBjb250cm9scyBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlciAqLworc3RhdGljIHZvaWQgc3Q2NDIyX3NldF9icmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2Rldik7CitzdGF0aWMgdm9pZCBzdDY0MjJfc2V0X2NvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2Rldik7CitzdGF0aWMgdm9pZCBzdDY0MjJfc2V0X2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KTsKK3N0YXRpYyB2b2lkIHN0NjQyMl9zZXRfZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHN0NjQyMl9jdHJsW05DVFJMU10gPSB7CitbQlJJR0hUTkVTU10gPSB7CiAJCXsKIAkJCS5pZAkJPSBWNEwyX0NJRF9CUklHSFRORVNTLAogCQkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKQEAgLTY5LDExICs4OCw5IEBACiAJCQkuc3RlcAkJPSAxLAogCQkJLmRlZmF1bHRfdmFsdWUgID0gMwogCQl9LAotCQkuc2V0ID0gc3Q2NDIyX3NldF9icmlnaHRuZXNzLAotCQkuZ2V0ID0gc3Q2NDIyX2dldF9icmlnaHRuZXNzCisJCS5zZXRfY29udHJvbCA9IHN0NjQyMl9zZXRfYnJpZ2h0bmVzcwogCX0sCi0jZGVmaW5lIENPTlRSQVNUX0lEWCAxCi0JeworW0NPTlRSQVNUXSA9IHsKIAkJewogCQkJLmlkCQk9IFY0TDJfQ0lEX0NPTlRSQVNULAogCQkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKQEAgLTgzLDExICsxMDAsOSBAQAogCQkJLnN0ZXAJCT0gMSwKIAkJCS5kZWZhdWx0X3ZhbHVlICA9IDExCiAJCX0sCi0JCS5zZXQgPSBzdDY0MjJfc2V0X2NvbnRyYXN0LAotCQkuZ2V0ID0gc3Q2NDIyX2dldF9jb250cmFzdAorCQkuc2V0X2NvbnRyb2wgPSBzdDY0MjJfc2V0X2NvbnRyYXN0CiAJfSwKLSNkZWZpbmUgR0FJTl9JRFggMgotCXsKK1tHQUlOXSA9IHsKIAkJewogCQkJLmlkCQk9IFY0TDJfQ0lEX0dBSU4sCiAJCQkudHlwZQkJPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLApAQCAtOTcsNDkgKzExMiw0MyBAQAogCQkJLnN0ZXAJCT0gMSwKIAkJCS5kZWZhdWx0X3ZhbHVlICA9IDY0CiAJCX0sCi0JCS5zZXQgPSBzdDY0MjJfc2V0X2dhaW4sCi0JCS5nZXQgPSBzdDY0MjJfZ2V0X2dhaW4KKwkJLnNldF9jb250cm9sID0gc3Q2NDIyX3NldF9nYWluCiAJfSwKLSNkZWZpbmUgRVhQT1NVUkVfSURYIDMKLQl7CitbRVhQT1NVUkVdID0gewogCQl7CiAJCQkuaWQJCT0gVjRMMl9DSURfRVhQT1NVUkUsCiAJCQkudHlwZQkJPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAogCQkJLm5hbWUJCT0gIkV4cG9zdXJlIiwKIAkJCS5taW5pbXVtCT0gMCwKLQkJCS5tYXhpbXVtCT0gMTAyMywKKyNkZWZpbmUgRVhQT1NVUkVfTUFYIDEwMjMKKwkJCS5tYXhpbXVtCT0gRVhQT1NVUkVfTUFYLAogCQkJLnN0ZXAJCT0gMSwKIAkJCS5kZWZhdWx0X3ZhbHVlICA9IDI1NgogCQl9LAotCQkuc2V0ID0gc3Q2NDIyX3NldF9leHBvc3VyZSwKLQkJLmdldCA9IHN0NjQyMl9nZXRfZXhwb3N1cmUKKwkJLnNldF9jb250cm9sID0gc3Q2NDIyX3NldF9leHBvc3VyZQogCX0sCiB9OwogCiBzdGF0aWMgaW50IHN0NjQyMl9wcm9iZShzdHJ1Y3Qgc2QgKnNkKQogewotCWludCBpOwotCXMzMiAqc2Vuc29yX3NldHRpbmdzOworCXN0cnVjdCBzdDY0MjJfc2V0dGluZ3MgKnNlbnNvcl9zZXR0aW5nczsKIAogCWlmIChzZC0+YnJpZGdlICE9IEJSSURHRV9TVDY0MjIpCiAJCXJldHVybiAtRU5PREVWOwogCiAJaW5mbygic3Q2NDIyIHNlbnNvciBkZXRlY3RlZCIpOwogCi0Jc2Vuc29yX3NldHRpbmdzID0ga21hbGxvYyhBUlJBWV9TSVpFKHN0NjQyMl9jdHJsKSAqIHNpemVvZihzMzIpLAotCQkJCSAgR0ZQX0tFUk5FTCk7CisJc2Vuc29yX3NldHRpbmdzID0ga21hbGxvYyhzaXplb2YgKnNlbnNvcl9zZXR0aW5ncywgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzZW5zb3Jfc2V0dGluZ3MpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJc2QtPmdzcGNhX2Rldi5jYW0uY2FtX21vZGUgPSBzdDY0MjJfbW9kZTsKIAlzZC0+Z3NwY2FfZGV2LmNhbS5ubW9kZXMgPSBBUlJBWV9TSVpFKHN0NjQyMl9tb2RlKTsKKwlzZC0+Z3NwY2FfZGV2LmNhbS5jdHJscyA9IHNlbnNvcl9zZXR0aW5ncy0+Y3RybHM7CiAJc2QtPmRlc2MuY3RybHMgPSBzdDY0MjJfY3RybDsKIAlzZC0+ZGVzYy5uY3RybHMgPSBBUlJBWV9TSVpFKHN0NjQyMl9jdHJsKTsKIAlzZC0+c2Vuc29yX3ByaXYgPSBzZW5zb3Jfc2V0dGluZ3M7CiAKLQlmb3IgKGkgPSAwOyBpIDwgc2QtPmRlc2MubmN0cmxzOyBpKyspCi0JCXNlbnNvcl9zZXR0aW5nc1tpXSA9IHN0NjQyMl9jdHJsW2ldLnFjdHJsLmRlZmF1bHRfdmFsdWU7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMTUxLDExICsxNjAsMTEgQEAKIAkJeyBTVFZfSVNPX0VOQUJMRSwgMHgwMCB9LCAvKiBkaXNhYmxlIGNhcHR1cmUgKi8KIAkJeyAweDE0MzYsIDB4MDAgfSwKIAkJeyAweDE0MzIsIDB4MDMgfSwJLyogMHgwMC0weDFGIGJyaWdodG5lc3MgKi8KLQkJeyAweDE0M2EsIDB4RjkgfSwJLyogMHgwMC0weDBGIGNvbnRyYXN0ICovCisJCXsgMHgxNDNhLCAweGY5IH0sCS8qIDB4MDAtMHgwRiBjb250cmFzdCAqLwogCQl7IDB4MDUwOSwgMHgzOCB9LAkvKiBSICovCiAJCXsgMHgwNTBhLCAweDM4IH0sCS8qIEcgKi8KIAkJeyAweDA1MGIsIDB4MzggfSwJLyogQiAqLwotCQl7IDB4MDUwYywgMHgyQSB9LAorCQl7IDB4MDUwYywgMHgyYSB9LAogCQl7IDB4MDUwZCwgMHgwMSB9LAogCiAKQEAgLTIxMyw3ICsyMjIsNiBAQAogCQl7IDB4MTUwZSwgMHg4ZSB9LAogCQl7IDB4MTUwZiwgMHgzNyB9LAogCQl7IDB4MTVjMCwgMHgwMCB9LAotCQl7IDB4MTVjMSwgMTAyMyB9LCAvKiAxNjB4MTIwLCBJU09DX1BBQ0tFVF9TSVpFICovCiAJCXsgMHgxNWMzLCAweDA4IH0sCS8qIDB4MDQvMHgxNCAuLi4gdGVzdCBwaWN0dXJlcyA/Pz8gKi8KIAogCkBAIC0yMzUsMjYgKzI0Myw3MiBAQAogCWtmcmVlKHNkLT5zZW5zb3JfcHJpdik7CiB9CiAKLXN0YXRpYyBpbnQgc3Q2NDIyX3N0YXJ0KHN0cnVjdCBzZCAqc2QpCitzdGF0aWMgaW50IHNldGJyaWdodG5lc3Moc3RydWN0IHNkICpzZCkKIHsKLQlpbnQgZXJyLCBwYWNrZXRfc2l6ZTsKLQlzdHJ1Y3QgY2FtICpjYW0gPSAmc2QtPmdzcGNhX2Rldi5jYW07Ci0JczMyICpzZW5zb3Jfc2V0dGluZ3MgPSBzZC0+c2Vuc29yX3ByaXY7Ci0Jc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqYWx0OwotCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmOworCXN0cnVjdCBzdDY0MjJfc2V0dGluZ3MgKnNlbnNvcl9zZXR0aW5ncyA9IHNkLT5zZW5zb3JfcHJpdjsKIAotCWludGYgPSB1c2JfaWZudW1fdG9faWYoc2QtPmdzcGNhX2Rldi5kZXYsIHNkLT5nc3BjYV9kZXYuaWZhY2UpOwotCWFsdCA9IHVzYl9hbHRudW1fdG9fYWx0c2V0dGluZyhpbnRmLCBzZC0+Z3NwY2FfZGV2LmFsdCk7Ci0JaWYgKCFhbHQpIHsKLQkJZXJyKCJDb3VsZG4ndCBnZXQgYWx0c2V0dGluZyIpOwotCQlyZXR1cm4gLUVJTzsKLQl9CisJLyogdmFsIGdvZXMgZnJvbSAwIC0+IDMxICovCisJcmV0dXJuIHN0djA2eHhfd3JpdGVfYnJpZGdlKHNkLCAweDE0MzIsCisJCQlzZW5zb3Jfc2V0dGluZ3MtPmN0cmxzW0JSSUdIVE5FU1NdLnZhbCk7Cit9CiAKLQlwYWNrZXRfc2l6ZSA9IGxlMTZfdG9fY3B1KGFsdC0+ZW5kcG9pbnRbMF0uZGVzYy53TWF4UGFja2V0U2l6ZSk7Ci0JZXJyID0gc3R2MDZ4eF93cml0ZV9icmlkZ2Uoc2QsIDB4MTVjMSwgcGFja2V0X3NpemUpOworc3RhdGljIGludCBzZXRjb250cmFzdChzdHJ1Y3Qgc2QgKnNkKQoreworCXN0cnVjdCBzdDY0MjJfc2V0dGluZ3MgKnNlbnNvcl9zZXR0aW5ncyA9IHNkLT5zZW5zb3JfcHJpdjsKKworCS8qIFZhbCBnb2VzIGZyb20gMCAtPiAxNSAqLworCXJldHVybiBzdHYwNnh4X3dyaXRlX2JyaWRnZShzZCwgMHgxNDNhLAorCQkJc2Vuc29yX3NldHRpbmdzLT5jdHJsc1tDT05UUkFTVF0udmFsIHwgMHhmMCk7Cit9CisKK3N0YXRpYyBpbnQgc2V0Z2FpbihzdHJ1Y3Qgc2QgKnNkKQoreworCXN0cnVjdCBzdDY0MjJfc2V0dGluZ3MgKnNlbnNvcl9zZXR0aW5ncyA9IHNkLT5zZW5zb3JfcHJpdjsKKwl1OCBnYWluOworCWludCBlcnI7CisKKwlnYWluID0gc2Vuc29yX3NldHRpbmdzLT5jdHJsc1tHQUlOXS52YWw7CisKKwkvKiBTZXQgcmVkLCBncmVlbiwgYmx1ZSwgZ2FpbiAqLworCWVyciA9IHN0djA2eHhfd3JpdGVfYnJpZGdlKHNkLCAweDA1MDksIGdhaW4pOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCisJZXJyID0gc3R2MDZ4eF93cml0ZV9icmlkZ2Uoc2QsIDB4MDUwYSwgZ2Fpbik7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBzdHYwNnh4X3dyaXRlX2JyaWRnZShzZCwgMHgwNTBiLCBnYWluKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCS8qIDIgbXlzdGVyeSB3cml0ZXMgKi8KKwllcnIgPSBzdHYwNnh4X3dyaXRlX2JyaWRnZShzZCwgMHgwNTBjLCAweDJhKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCXJldHVybiBzdHYwNnh4X3dyaXRlX2JyaWRnZShzZCwgMHgwNTBkLCAweDAxKTsKK30KKworc3RhdGljIGludCBzZXRleHBvc3VyZShzdHJ1Y3Qgc2QgKnNkKQoreworCXN0cnVjdCBzdDY0MjJfc2V0dGluZ3MgKnNlbnNvcl9zZXR0aW5ncyA9IHNkLT5zZW5zb3JfcHJpdjsKKwl1MTYgZXhwbzsKKwlpbnQgZXJyOworCisJZXhwbyA9IHNlbnNvcl9zZXR0aW5ncy0+Y3RybHNbRVhQT1NVUkVdLnZhbDsKKwllcnIgPSBzdHYwNnh4X3dyaXRlX2JyaWRnZShzZCwgMHgxNDNkLCBleHBvICYgMHhmZik7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlyZXR1cm4gc3R2MDZ4eF93cml0ZV9icmlkZ2Uoc2QsIDB4MTQzZSwgZXhwbyA+PiA4KTsKK30KKworc3RhdGljIGludCBzdDY0MjJfc3RhcnQoc3RydWN0IHNkICpzZCkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBjYW0gKmNhbSA9ICZzZC0+Z3NwY2FfZGV2LmNhbTsKKwogCWlmIChjYW0tPmNhbV9tb2RlW3NkLT5nc3BjYV9kZXYuY3Vycl9tb2RlXS5wcml2KQogCQllcnIgPSBzdHYwNnh4X3dyaXRlX2JyaWRnZShzZCwgMHgxNTA1LCAweDBmKTsKIAllbHNlCkBAIC0yNjIsMjkgKzMxNiwyNSBAQAogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JZXJyID0gc3Q2NDIyX3NldF9icmlnaHRuZXNzKCZzZC0+Z3NwY2FfZGV2LAotCQkJCSAgICBzZW5zb3Jfc2V0dGluZ3NbQlJJR0hUTkVTU19JRFhdKTsKKwllcnIgPSBzZXRicmlnaHRuZXNzKHNkKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAotCWVyciA9IHN0NjQyMl9zZXRfY29udHJhc3QoJnNkLT5nc3BjYV9kZXYsCi0JCQkJICBzZW5zb3Jfc2V0dGluZ3NbQ09OVFJBU1RfSURYXSk7CisJZXJyID0gc2V0Y29udHJhc3Qoc2QpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JZXJyID0gc3Q2NDIyX3NldF9leHBvc3VyZSgmc2QtPmdzcGNhX2RldiwKLQkJCQkgIHNlbnNvcl9zZXR0aW5nc1tFWFBPU1VSRV9JRFhdKTsKKwllcnIgPSBzZXRleHBvc3VyZShzZCk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKLQllcnIgPSBzdDY0MjJfc2V0X2dhaW4oJnNkLT5nc3BjYV9kZXYsCi0JCQkgICAgICBzZW5zb3Jfc2V0dGluZ3NbR0FJTl9JRFhdKTsKKwllcnIgPSBzZXRnYWluKHNkKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAotCVBERUJVRyhEX1NUUkVBTSwgIlN0YXJ0aW5nIHN0cmVhbSIpOwotCi0JcmV0dXJuIDA7CisJLyogY29tbWl0IHNldHRpbmdzICovCisJZXJyID0gc3R2MDZ4eF93cml0ZV9icmlkZ2Uoc2QsIDB4MTQzZiwgMHgwMSk7CisJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7CiB9CiAKIHN0YXRpYyBpbnQgc3Q2NDIyX3N0b3Aoc3RydWN0IHNkICpzZCkKQEAgLTI5NCwxNTkgKzM0NCw1OCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHN0NjQyMl9nZXRfYnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCi17Ci0Jc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCXMzMiAqc2Vuc29yX3NldHRpbmdzID0gc2QtPnNlbnNvcl9wcml2OwotCi0JKnZhbCA9IHNlbnNvcl9zZXR0aW5nc1tCUklHSFRORVNTX0lEWF07Ci0KLQlQREVCVUcoRF9WNEwyLCAiUmVhZCBicmlnaHRuZXNzICVkIiwgKnZhbCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzdDY0MjJfc2V0X2JyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCitzdGF0aWMgdm9pZCBzdDY0MjJfc2V0X2JyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCWludCBlcnI7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCXMzMiAqc2Vuc29yX3NldHRpbmdzID0gc2QtPnNlbnNvcl9wcml2OwogCi0Jc2Vuc29yX3NldHRpbmdzW0JSSUdIVE5FU1NfSURYXSA9IHZhbDsKLQotCWlmICghZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCi0JCXJldHVybiAwOwotCi0JLyogdmFsIGdvZXMgZnJvbSAwIC0+IDMxICovCi0JUERFQlVHKERfVjRMMiwgIlNldCBicmlnaHRuZXNzIHRvICVkIiwgdmFsKTsKLQllcnIgPSBzdHYwNnh4X3dyaXRlX2JyaWRnZShzZCwgMHgxNDMyLCB2YWwpOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOworCWVyciA9IHNldGJyaWdodG5lc3Moc2QpOwogCiAJLyogY29tbWl0IHNldHRpbmdzICovCi0JZXJyID0gc3R2MDZ4eF93cml0ZV9icmlkZ2Uoc2QsIDB4MTQzZiwgMHgwMSk7Ci0JcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7CisJaWYgKGVyciA+PSAwKQorCQllcnIgPSBzdHYwNnh4X3dyaXRlX2JyaWRnZShzZCwgMHgxNDNmLCAweDAxKTsKKworCWdzcGNhX2Rldi0+dXNiX2VyciA9IGVycjsKIH0KIAotc3RhdGljIGludCBzdDY0MjJfZ2V0X2NvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKLXsKLQlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JczMyICpzZW5zb3Jfc2V0dGluZ3MgPSBzZC0+c2Vuc29yX3ByaXY7Ci0KLQkqdmFsID0gc2Vuc29yX3NldHRpbmdzW0NPTlRSQVNUX0lEWF07Ci0KLQlQREVCVUcoRF9WNEwyLCAiUmVhZCBjb250cmFzdCAlZCIsICp2YWwpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc3Q2NDIyX3NldF9jb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3N0YXRpYyB2b2lkIHN0NjQyMl9zZXRfY29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCWludCBlcnI7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCXMzMiAqc2Vuc29yX3NldHRpbmdzID0gc2QtPnNlbnNvcl9wcml2OwogCi0Jc2Vuc29yX3NldHRpbmdzW0NPTlRSQVNUX0lEWF0gPSB2YWw7Ci0KLQlpZiAoIWdzcGNhX2Rldi0+c3RyZWFtaW5nKQotCQlyZXR1cm4gMDsKLQotCS8qIFZhbCBnb2VzIGZyb20gMCAtPiAxNSAqLwotCVBERUJVRyhEX1Y0TDIsICJTZXQgY29udHJhc3QgdG8gJWRcbiIsIHZhbCk7Ci0JZXJyID0gc3R2MDZ4eF93cml0ZV9icmlkZ2Uoc2QsIDB4MTQzYSwgMHhmMCB8IHZhbCk7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7CisJZXJyID0gc2V0Y29udHJhc3Qoc2QpOwogCiAJLyogY29tbWl0IHNldHRpbmdzICovCi0JZXJyID0gc3R2MDZ4eF93cml0ZV9icmlkZ2Uoc2QsIDB4MTQzZiwgMHgwMSk7Ci0JcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7CisJaWYgKGVyciA+PSAwKQorCQllcnIgPSBzdHYwNnh4X3dyaXRlX2JyaWRnZShzZCwgMHgxNDNmLCAweDAxKTsKKworCWdzcGNhX2Rldi0+dXNiX2VyciA9IGVycjsKIH0KIAotc3RhdGljIGludCBzdDY0MjJfZ2V0X2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQotewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlzMzIgKnNlbnNvcl9zZXR0aW5ncyA9IHNkLT5zZW5zb3JfcHJpdjsKLQotCSp2YWwgPSBzZW5zb3Jfc2V0dGluZ3NbR0FJTl9JRFhdOwotCi0JUERFQlVHKERfVjRMMiwgIlJlYWQgZ2FpbiAlZCIsICp2YWwpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc3Q2NDIyX3NldF9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQorc3RhdGljIHZvaWQgc3Q2NDIyX3NldF9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlpbnQgZXJyOwogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlzMzIgKnNlbnNvcl9zZXR0aW5ncyA9IHNkLT5zZW5zb3JfcHJpdjsKIAotCXNlbnNvcl9zZXR0aW5nc1tHQUlOX0lEWF0gPSB2YWw7Ci0KLQlpZiAoIWdzcGNhX2Rldi0+c3RyZWFtaW5nKQotCQlyZXR1cm4gMDsKLQotCVBERUJVRyhEX1Y0TDIsICJTZXQgZ2FpbiB0byAlZCIsIHZhbCk7Ci0KLQkvKiBTZXQgcmVkLCBncmVlbiwgYmx1ZSwgZ2FpbiAqLwotCWVyciA9IHN0djA2eHhfd3JpdGVfYnJpZGdlKHNkLCAweDA1MDksIHZhbCk7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7Ci0KLQllcnIgPSBzdHYwNnh4X3dyaXRlX2JyaWRnZShzZCwgMHgwNTBhLCB2YWwpOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCi0JZXJyID0gc3R2MDZ4eF93cml0ZV9icmlkZ2Uoc2QsIDB4MDUwYiwgdmFsKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQotCS8qIDIgbXlzdGVyeSB3cml0ZXMgKi8KLQllcnIgPSBzdHYwNnh4X3dyaXRlX2JyaWRnZShzZCwgMHgwNTBjLCAweDJhKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQotCWVyciA9IHN0djA2eHhfd3JpdGVfYnJpZGdlKHNkLCAweDA1MGQsIDB4MDEpOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOworCWVyciA9IHNldGdhaW4oc2QpOwogCiAJLyogY29tbWl0IHNldHRpbmdzICovCi0JZXJyID0gc3R2MDZ4eF93cml0ZV9icmlkZ2Uoc2QsIDB4MTQzZiwgMHgwMSk7Ci0JcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7CisJaWYgKGVyciA+PSAwKQorCQllcnIgPSBzdHYwNnh4X3dyaXRlX2JyaWRnZShzZCwgMHgxNDNmLCAweDAxKTsKKworCWdzcGNhX2Rldi0+dXNiX2VyciA9IGVycjsKIH0KIAotc3RhdGljIGludCBzdDY0MjJfZ2V0X2V4cG9zdXJlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKLXsKLQlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JczMyICpzZW5zb3Jfc2V0dGluZ3MgPSBzZC0+c2Vuc29yX3ByaXY7Ci0KLQkqdmFsID0gc2Vuc29yX3NldHRpbmdzW0VYUE9TVVJFX0lEWF07Ci0KLQlQREVCVUcoRF9WNEwyLCAiUmVhZCBleHBvc3VyZSAlZCIsICp2YWwpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc3Q2NDIyX3NldF9leHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3N0YXRpYyB2b2lkIHN0NjQyMl9zZXRfZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCWludCBlcnI7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCXMzMiAqc2Vuc29yX3NldHRpbmdzID0gc2QtPnNlbnNvcl9wcml2OwogCi0Jc2Vuc29yX3NldHRpbmdzW0VYUE9TVVJFX0lEWF0gPSB2YWw7Ci0KLQlpZiAoIWdzcGNhX2Rldi0+c3RyZWFtaW5nKQotCQlyZXR1cm4gMDsKLQotCVBERUJVRyhEX1Y0TDIsICJTZXQgZXhwb3N1cmUgdG8gJWRcbiIsIHZhbCk7Ci0JZXJyID0gc3R2MDZ4eF93cml0ZV9icmlkZ2Uoc2QsIDB4MTQzZCwgdmFsICYgMHhmZik7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7Ci0KLQllcnIgPSBzdHYwNnh4X3dyaXRlX2JyaWRnZShzZCwgMHgxNDNlLCB2YWwgPj4gOCk7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7CisJZXJyID0gc2V0ZXhwb3N1cmUoc2QpOwogCiAJLyogY29tbWl0IHNldHRpbmdzICovCi0JZXJyID0gc3R2MDZ4eF93cml0ZV9icmlkZ2Uoc2QsIDB4MTQzZiwgMHgwMSk7Ci0JcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7CisJaWYgKGVyciA+PSAwKQorCQllcnIgPSBzdHYwNnh4X3dyaXRlX2JyaWRnZShzZCwgMHgxNDNmLCAweDAxKTsKKworCWdzcGNhX2Rldi0+dXNiX2VyciA9IGVycjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4X3N0NjQyMi5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfc3Q2NDIyLmgKaW5kZXggYjJkNDVmZS4uZDc0OThlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfc3Q2NDIyLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfc3Q2NDIyLmgKQEAgLTM3LDE4ICszNywxMSBAQAogc3RhdGljIGludCBzdDY0MjJfc3RvcChzdHJ1Y3Qgc2QgKnNkKTsKIHN0YXRpYyB2b2lkIHN0NjQyMl9kaXNjb25uZWN0KHN0cnVjdCBzZCAqc2QpOwogCi0vKiBWNEwyIGNvbnRyb2xzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyICovCi1zdGF0aWMgaW50IHN0NjQyMl9nZXRfYnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOwotc3RhdGljIGludCBzdDY0MjJfc2V0X2JyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwotc3RhdGljIGludCBzdDY0MjJfZ2V0X2NvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7Ci1zdGF0aWMgaW50IHN0NjQyMl9zZXRfY29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwotc3RhdGljIGludCBzdDY0MjJfZ2V0X2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKLXN0YXRpYyBpbnQgc3Q2NDIyX3NldF9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKLXN0YXRpYyBpbnQgc3Q2NDIyX2dldF9leHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOwotc3RhdGljIGludCBzdDY0MjJfc2V0X2V4cG9zdXJlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKLQogY29uc3Qgc3RydWN0IHN0djA2eHhfc2Vuc29yIHN0djA2eHhfc2Vuc29yX3N0NjQyMiA9IHsKIAkubmFtZSA9ICJTVDY0MjIiLAorCS8qIE5vIGtub3duIHdheSB0byBsb3dlciBmcmFtZXJhdGUgaW4gY2FzZSBvZiBsZXNzIGJhbmR3aWR0aCAqLworCS5taW5fcGFja2V0X3NpemUgPSB7IDMwMCwgODQ3IH0sCisJLm1heF9wYWNrZXRfc2l6ZSA9IHsgMzAwLCA4NDcgfSwKIAkuaW5pdCA9IHN0NjQyMl9pbml0LAogCS5wcm9iZSA9IHN0NjQyMl9wcm9iZSwKIAkuc3RhcnQgPSBzdDY0MjJfc3RhcnQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eF92djY0MTAuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4X3Z2NjQxMC5oCmluZGV4IGIzYjU1MDguLjdmZTM1ODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4X3Z2NjQxMC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4X3Z2NjQxMC5oCkBAIC0xOTcsNiArMTk3LDEwIEBACiAJLmkyY19mbHVzaCA9IDUsCiAJLmkyY19hZGRyID0gMHgyMCwKIAkuaTJjX2xlbiA9IDEsCisJLyogRklYTUUgKHNlZSBpZiB3ZSBjYW4gbG93ZXIgcGFja2V0X3NpemUtcywgbmVlZHMgdGVzdGluZywgYW5kIGFsc28KKwkgICBhZGp1c3RpbmcgZnJhbWVyYXRlIHdoZW4gdGhlIGJhbmR3aWR0aCBnZXRzIGxvd2VyKSAqLworCS5taW5fcGFja2V0X3NpemUgPSB7IDEwMjMgfSwKKwkubWF4X3BhY2tldF9zaXplID0geyAxMDIzIH0sCiAJLmluaXQgPSB2djY0MTBfaW5pdCwKIAkucHJvYmUgPSB2djY0MTBfcHJvYmUsCiAJLnN0YXJ0ID0gdnY2NDEwX3N0YXJ0LApAQCAtMjIwLDEwICsyMjQsNiBAQAogCTB4MDIsIDB4MDAsIDB4NjAsIDB4MDEsIDB4MjAsIDB4MDEKIH07CiAKLXN0YXRpYyBjb25zdCB1OCB4MTVjMVtdID0gewkvKiAweDE1YzEgLSAweDE1YzIgKi8KLQkweGZmLCAweDAzIC8qIE91dHB1dCB3b3JkIDB4MDNmZiA9IDEwMjMgKElTTyBzaXplKSAqLwotfTsKLQogc3RhdGljIGNvbnN0IHN0cnVjdCBzdHZfaW5pdCBzdHZfYnJpZGdlX2luaXRbXSA9IHsKIAkvKiBUaGlzIHJlZyBpcyB3cml0dGVuIHR3aWNlLiBTb21lIGtpbmQgb2YgcmVzZXQ/ICovCiAJe05VTEwsICAweDE2MjAsIDB4ODB9LApAQCAtMjMyLDcgKzIzMiw2IEBACiAJe05VTEwsICAweDE0MjMsIDB4MDR9LAogCXt4MTUwMCwgMHgxNTAwLCBBUlJBWV9TSVpFKHgxNTAwKX0sCiAJe3gxNTM2LCAweDE1MzYsIEFSUkFZX1NJWkUoeDE1MzYpfSwKLQl7eDE1YzEsIDB4MTVjMSwgQVJSQVlfU0laRSh4MTVjMSl9CiB9OwogCiBzdGF0aWMgY29uc3QgdTggdnY2NDEwX3NlbnNvcl9pbml0W11bMl0gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Q2MTMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdDYxMy5jCmluZGV4IGI0NWY0ZDAuLjhmMGMzMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdDYxMy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdDYxMy5jCkBAIC00ODcsNyArNDg3LDcgQEAKIAl7MHgwMCwgMHgwMiwgMHgwNywgMHgwZiwgMHgxOCwgMHgyNCwgMHgzMCwgMHgzZiwJLyogMyAqLwogCSAweDRmLCAweDYxLCAweDczLCAweDg4LCAweDlkLCAweGI0LCAweGNkLCAweGU2LAogCSAweGZmfSwKLQl7MHgwMCwgMHgwNCwgMHgwQiwgMHgxNSwgMHgyMCwgMHgyZCwgMHgzYiwgMHg0YSwJLyogNCAqLworCXsweDAwLCAweDA0LCAweDBiLCAweDE1LCAweDIwLCAweDJkLCAweDNiLCAweDRhLAkvKiA0ICovCiAJIDB4NWIsIDB4NmMsIDB4N2YsIDB4OTIsIDB4YTcsIDB4YmMsIDB4ZDIsIDB4ZTksCiAJIDB4ZmZ9LAogCXsweDAwLCAweDA3LCAweDExLCAweDE1LCAweDIwLCAweDJkLCAweDQ4LCAweDU4LAkvKiA1ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3R2ODUzMi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS90djg1MzIuYwppbmRleCBkOWUzYzYwLi4zOGMyMmYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3R2ODUzMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdHY4NTMyLmMKQEAgLTEzMiw3ICsxMzIsNyBAQAogI2RlZmluZSBSMzZfUElECQkweDM2CiAjZGVmaW5lIFIzN19QSURICTB4MzcKICNkZWZpbmUgUjM5X1Rlc3QxCTB4MzkJCS8qIEdQSU8gKi8KLSNkZWZpbmUgUjNCX1Rlc3QzCTB4M0IJCS8qIEdQSU8gKi8KKyNkZWZpbmUgUjNCX1Rlc3QzCTB4M2IJCS8qIEdQSU8gKi8KICNkZWZpbmUgUjgzX0FEX0lESAkweDgzCiAjZGVmaW5lIFI5MV9BRF9TTE9QRVJFRyAweDkxCiAjZGVmaW5lIFI5NF9BRF9CSVRDT05UUk9MIDB4OTQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdmMwMzJ4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3ZjMDMyeC5jCmluZGV4IDM4YTZlZmUuLjliMmFlMWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdmMwMzJ4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS92YzAzMnguYwpAQCAtNDcsMjQgKzQ3LDI5IEBACiAJdTggaW1hZ2Vfb2Zmc2V0OwogCiAJdTggYnJpZGdlOwotI2RlZmluZSBCUklER0VfVkMwMzIxIDAKLSNkZWZpbmUgQlJJREdFX1ZDMDMyMyAxCiAJdTggc2Vuc29yOwotI2RlZmluZSBTRU5TT1JfSFY3MTMxUiAwCi0jZGVmaW5lIFNFTlNPUl9NSTAzNjAgMQotI2RlZmluZSBTRU5TT1JfTUkxMzEwX1NPQyAyCi0jZGVmaW5lIFNFTlNPUl9NSTEzMjAgMwotI2RlZmluZSBTRU5TT1JfTUkxMzIwX1NPQyA0Ci0jZGVmaW5lIFNFTlNPUl9PVjc2NjAgNQotI2RlZmluZSBTRU5TT1JfT1Y3NjcwIDYKLSNkZWZpbmUgU0VOU09SX1BPMTIwMCA3Ci0jZGVmaW5lIFNFTlNPUl9QTzMxMzBOQyA4Ci0jZGVmaW5lIFNFTlNPUl9QT3h4eHggOQogCXU4IGZsYWdzOwogI2RlZmluZSBGTF9TQU1TVU5HIDB4MDEJCS8qIFNhbXN1bmdRMSAoMiBzZW5zb3JzKSAqLwogI2RlZmluZSBGTF9IRkxJUCAweDAyCQkvKiBtaXJyb3JlZCBieSBkZWZhdWx0ICovCiAjZGVmaW5lIEZMX1ZGTElQIDB4MDQJCS8qIHZlcnRpY2FsIGZsaXBwZWQgYnkgZGVmYXVsdCAqLwogfTsKK2VudW0gYnJpZGdlcyB7CisJQlJJREdFX1ZDMDMyMSwKKwlCUklER0VfVkMwMzIzLAorfTsKK2VudW0gc2Vuc29ycyB7CisJU0VOU09SX0hWNzEzMVIsCisJU0VOU09SX01JMDM2MCwKKwlTRU5TT1JfTUkxMzEwX1NPQywKKwlTRU5TT1JfTUkxMzIwLAorCVNFTlNPUl9NSTEzMjBfU09DLAorCVNFTlNPUl9PVjc2NjAsCisJU0VOU09SX09WNzY3MCwKKwlTRU5TT1JfUE8xMjAwLAorCVNFTlNPUl9QTzMxMzBOQywKKwlTRU5TT1JfUE94eHh4LAorCU5TRU5TT1JTCit9OwogCiAvKiBWNEwyIGNvbnRyb2xzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyICovCiBzdGF0aWMgaW50IHNkX3NldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwpAQCAtMjYwLDU2ICsyNjUsNTYgQEAKIH07CiAKIC8qIHRhYmxlIG9mIHRoZSBkaXNhYmxlZCBjb250cm9scyAqLwotc3RhdGljIHUzMiBjdHJsX2Rpc1tdID0gewotLyogU0VOU09SX0hWNzEzMVIgMCAqLworc3RhdGljIHUzMiBjdHJsX2Rpc1tOU0VOU09SU10gPSB7CisgICAgW1NFTlNPUl9IVjcxMzFSXSA9CiAJKDEgPDwgQlJJR0hUTkVTU19JRFgpIHwgKDEgPDwgQ09OVFJBU1RfSURYKSB8ICgxIDw8IENPTE9SU19JRFgpCiAJCXwgKDEgPDwgSEZMSVBfSURYKSB8ICgxIDw8IFZGTElQX0lEWCkgfCAoMSA8PCBMSUdIVEZSRVFfSURYKQogCQl8ICgxIDw8IFNIQVJQTkVTU19JRFgpCiAJCXwgKDEgPDwgR0FJTl9JRFgpIHwgKDEgPDwgRVhQT1NVUkVfSURYKQogCQl8ICgxIDw8IEFVVE9HQUlOX0lEWCkgfCAoMSA8PCBCQUNLTElHSFRfSURYKSwKLS8qIFNFTlNPUl9NSTAzNjAgMSAqLworICAgIFtTRU5TT1JfTUkwMzYwXSA9CiAJKDEgPDwgQlJJR0hUTkVTU19JRFgpIHwgKDEgPDwgQ09OVFJBU1RfSURYKSB8ICgxIDw8IENPTE9SU19JRFgpCiAJCXwgKDEgPDwgSEZMSVBfSURYKSB8ICgxIDw8IFZGTElQX0lEWCkgfCAoMSA8PCBMSUdIVEZSRVFfSURYKQogCQl8ICgxIDw8IFNIQVJQTkVTU19JRFgpCiAJCXwgKDEgPDwgR0FJTl9JRFgpIHwgKDEgPDwgRVhQT1NVUkVfSURYKQogCQl8ICgxIDw8IEFVVE9HQUlOX0lEWCkgfCAoMSA8PCBCQUNLTElHSFRfSURYKSwKLS8qIFNFTlNPUl9NSTEzMTBfU09DIDIgKi8KKyAgICBbU0VOU09SX01JMTMxMF9TT0NdID0KIAkoMSA8PCBCUklHSFRORVNTX0lEWCkgfCAoMSA8PCBDT05UUkFTVF9JRFgpIHwgKDEgPDwgQ09MT1JTX0lEWCkKIAkJfCAoMSA8PCBMSUdIVEZSRVFfSURYKSB8ICgxIDw8IFNIQVJQTkVTU19JRFgpCiAJCXwgKDEgPDwgR0FJTl9JRFgpIHwgKDEgPDwgRVhQT1NVUkVfSURYKQogCQl8ICgxIDw8IEFVVE9HQUlOX0lEWCkgfCAoMSA8PCBCQUNLTElHSFRfSURYKSwKLS8qIFNFTlNPUl9NSTEzMjAgMyAqLworICAgIFtTRU5TT1JfTUkxMzIwXSA9CiAJKDEgPDwgQlJJR0hUTkVTU19JRFgpIHwgKDEgPDwgQ09OVFJBU1RfSURYKSB8ICgxIDw8IENPTE9SU19JRFgpCiAJCXwgKDEgPDwgTElHSFRGUkVRX0lEWCkgfCAoMSA8PCBTSEFSUE5FU1NfSURYKQogCQl8ICgxIDw8IEdBSU5fSURYKSB8ICgxIDw8IEVYUE9TVVJFX0lEWCkKIAkJfCAoMSA8PCBBVVRPR0FJTl9JRFgpIHwgKDEgPDwgQkFDS0xJR0hUX0lEWCksCi0vKiBTRU5TT1JfTUkxMzIwX1NPQyA0ICovCisgICAgW1NFTlNPUl9NSTEzMjBfU09DXSA9CiAJKDEgPDwgQlJJR0hUTkVTU19JRFgpIHwgKDEgPDwgQ09OVFJBU1RfSURYKSB8ICgxIDw8IENPTE9SU19JRFgpCiAJCXwgKDEgPDwgTElHSFRGUkVRX0lEWCkgfCAoMSA8PCBTSEFSUE5FU1NfSURYKQogCQl8ICgxIDw8IEdBSU5fSURYKSB8ICgxIDw8IEVYUE9TVVJFX0lEWCkKIAkJfCAoMSA8PCBBVVRPR0FJTl9JRFgpIHwgKDEgPDwgQkFDS0xJR0hUX0lEWCksCi0vKiBTRU5TT1JfT1Y3NjYwIDUgKi8KKyAgICBbU0VOU09SX09WNzY2MF0gPQogCSgxIDw8IEJSSUdIVE5FU1NfSURYKSB8ICgxIDw8IENPTlRSQVNUX0lEWCkgfCAoMSA8PCBDT0xPUlNfSURYKQogCQl8ICgxIDw8IExJR0hURlJFUV9JRFgpIHwgKDEgPDwgU0hBUlBORVNTX0lEWCkKIAkJfCAoMSA8PCBHQUlOX0lEWCkgfCAoMSA8PCBFWFBPU1VSRV9JRFgpCiAJCXwgKDEgPDwgQVVUT0dBSU5fSURYKSB8ICgxIDw8IEJBQ0tMSUdIVF9JRFgpLAotLyogU0VOU09SX09WNzY3MCA2ICovCisgICAgW1NFTlNPUl9PVjc2NzBdID0KIAkoMSA8PCBCUklHSFRORVNTX0lEWCkgfCAoMSA8PCBDT05UUkFTVF9JRFgpIHwgKDEgPDwgQ09MT1JTX0lEWCkKIAkJfCAoMSA8PCBTSEFSUE5FU1NfSURYKQogCQl8ICgxIDw8IEdBSU5fSURYKSB8ICgxIDw8IEVYUE9TVVJFX0lEWCkKIAkJfCAoMSA8PCBBVVRPR0FJTl9JRFgpIHwgKDEgPDwgQkFDS0xJR0hUX0lEWCksCi0vKiBTRU5TT1JfUE8xMjAwIDcgKi8KKyAgICBbU0VOU09SX1BPMTIwMF0gPQogCSgxIDw8IEJSSUdIVE5FU1NfSURYKSB8ICgxIDw8IENPTlRSQVNUX0lEWCkgfCAoMSA8PCBDT0xPUlNfSURYKQogCQl8ICgxIDw8IExJR0hURlJFUV9JRFgpCiAJCXwgKDEgPDwgR0FJTl9JRFgpIHwgKDEgPDwgRVhQT1NVUkVfSURYKQogCQl8ICgxIDw8IEFVVE9HQUlOX0lEWCkgfCAoMSA8PCBCQUNLTElHSFRfSURYKSwKLS8qIFNFTlNPUl9QTzMxMzBOQyA4ICovCisgICAgW1NFTlNPUl9QTzMxMzBOQ10gPQogCSgxIDw8IEJSSUdIVE5FU1NfSURYKSB8ICgxIDw8IENPTlRSQVNUX0lEWCkgfCAoMSA8PCBDT0xPUlNfSURYKQogCQl8ICgxIDw8IEhGTElQX0lEWCkgfCAoMSA8PCBWRkxJUF9JRFgpIHwgKDEgPDwgTElHSFRGUkVRX0lEWCkKIAkJfCAoMSA8PCBTSEFSUE5FU1NfSURYKQogCQl8ICgxIDw8IEdBSU5fSURYKSB8ICgxIDw8IEVYUE9TVVJFX0lEWCkKIAkJfCAoMSA8PCBBVVRPR0FJTl9JRFgpIHwgKDEgPDwgQkFDS0xJR0hUX0lEWCksCi0vKiBTRU5TT1JfUE94eHh4IDkgKi8KKyAgICBbU0VOU09SX1BPeHh4eF0gPQogCSgxIDw8IEhGTElQX0lEWCkgfCAoMSA8PCBWRkxJUF9JRFgpIHwgKDEgPDwgTElHSFRGUkVRX0lEWCksCiB9OwogCkBAIC0zNDIwLDE3ICszNDI1LDE4IEBACiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCXN0cnVjdCBjYW0gKmNhbTsKIAlpbnQgc2Vuc29yOwotCXN0YXRpYyB1OCBucGt0W10gPSB7CS8qIG51bWJlciBvZiBwYWNrZXRzIHBlciBJU09DIG1lc3NhZ2UgKi8KLQkJNjQsCQkvKiBIVjcxMzFSIDAgKi8KLQkJMzIsCQkvKiBNSTAzNjAgMSAqLwotCQkzMiwJCS8qIE1JMTMxMF9TT0MgMiAqLwotCQk2NCwJCS8qIE1JMTMyMCAzICovCi0JCTEyOCwJCS8qIE1JMTMyMF9TT0MgNCAqLwotCQkzMiwJCS8qIE9WNzY2MCA1ICovCi0JCTY0LAkJLyogT1Y3NjcwIDYgKi8KLQkJMTI4LAkJLyogUE8xMjAwIDcgKi8KLQkJMTI4LAkJLyogUE8zMTMwTkMgOCAqLwotCQkxMjgsCQkvKiBQT3h4eHggOSAqLworCS8qIG51bWJlciBvZiBwYWNrZXRzIHBlciBJU09DIG1lc3NhZ2UgKi8KKwlzdGF0aWMgdTggbnBrdFtOU0VOU09SU10gPSB7CisJCVtTRU5TT1JfSFY3MTMxUl0gPQk2NCwKKwkJW1NFTlNPUl9NSTAzNjBdID0JMzIsCisJCVtTRU5TT1JfTUkxMzEwX1NPQ10gPQkzMiwKKwkJW1NFTlNPUl9NSTEzMjBdID0JNjQsCisJCVtTRU5TT1JfTUkxMzIwX1NPQ10gPQkxMjgsCisJCVtTRU5TT1JfT1Y3NjYwXSA9CTMyLAorCQlbU0VOU09SX09WNzY3MF0gPQk2NCwKKwkJW1NFTlNPUl9QTzEyMDBdID0JMTI4LAorCQlbU0VOU09SX1BPMzEzME5DXSA9CTEyOCwKKwkJW1NFTlNPUl9QT3h4eHhdID0JMTI4LAogCX07CiAKIAlpZiAoc2QtPnNlbnNvciAhPSBTRU5TT1JfUE94eHh4KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS93OTk2WGNmLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3c5OTZYY2YuYwppbmRleCA0MDY2YWM4Li40YTllNjIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3c5OTZYY2YuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3c5OTZYY2YuYwpAQCAtNTksMTggKzU5LDIxIEBACiAJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX0pQRUd9LAogfTsKIAotc3RhdGljIGludCByZWdfdyhzdHJ1Y3Qgc2QgKnNkLCBfX3UxNiBpbmRleCwgX191MTYgdmFsdWUpOworc3RhdGljIHZvaWQgcmVnX3coc3RydWN0IHNkICpzZCwgdTE2IGluZGV4LCB1MTYgdmFsdWUpOwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIFdyaXRlIDY0LWJpdCBkYXRhIHRvIHRoZSBmYXN0IHNlcmlhbCBidXMgcmVnaXN0ZXJzLgogICBSZXR1cm4gMCBvbiBzdWNjZXNzLCAtMSBvdGhlcndpc2UuCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyBpbnQgdzk5NjhjZl93cml0ZV9mc2Ioc3RydWN0IHNkICpzZCwgdTE2KiBkYXRhKQorc3RhdGljIHZvaWQgdzk5NjhjZl93cml0ZV9mc2Ioc3RydWN0IHNkICpzZCwgdTE2KiBkYXRhKQogewogCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gc2QtPmdzcGNhX2Rldi5kZXY7CiAJdTE2IHZhbHVlOwogCWludCByZXQ7CiAKKwlpZiAoc2QtPmdzcGNhX2Rldi51c2JfZXJyIDwgMCkKKwkJcmV0dXJuOworCiAJdmFsdWUgPSAqZGF0YSsrOwogCW1lbWNweShzZC0+Z3NwY2FfZGV2LnVzYl9idWYsIGRhdGEsIDYpOwogCkBAIC03OSwyMCArODIsMjEgQEAKIAkJCSAgICAgIHZhbHVlLCAweDA2LCBzZC0+Z3NwY2FfZGV2LnVzYl9idWYsIDYsIDUwMCk7CiAJaWYgKHJldCA8IDApIHsKIAkJZXJyKCJXcml0ZSBGU0IgcmVnaXN0ZXJzIGZhaWxlZCAoJWQpIiwgcmV0KTsKLQkJcmV0dXJuIHJldDsKKwkJc2QtPmdzcGNhX2Rldi51c2JfZXJyID0gcmV0OwogCX0KLQotCXJldHVybiAwOwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIFdyaXRlIGRhdGEgdG8gdGhlIHNlcmlhbCBidXMgY29udHJvbCByZWdpc3Rlci4KICAgUmV0dXJuIDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBudW1iZXIgb3RoZXJ3aXNlLgogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1zdGF0aWMgaW50IHc5OTY4Y2Zfd3JpdGVfc2Ioc3RydWN0IHNkICpzZCwgdTE2IHZhbHVlKQorc3RhdGljIHZvaWQgdzk5NjhjZl93cml0ZV9zYihzdHJ1Y3Qgc2QgKnNkLCB1MTYgdmFsdWUpCiB7CiAJaW50IHJldDsKIAorCWlmIChzZC0+Z3NwY2FfZGV2LnVzYl9lcnIgPCAwKQorCQlyZXR1cm47CisKIAkvKiBXZSBkb24ndCB1c2UgcmVnX3cgaGVyZSwgYXMgdGhhdCB3b3VsZCBjYXVzZSBhbGwgd3JpdGVzIHdoZW4KIAkgICBiaXRiYW5naW5nIGkyYyB0byBiZSBsb2dnZWQsIG1ha2luZyB0aGUgbG9ncyBpbXBvc3NpYmxlIHRvIHJlYWQgKi8KIAlyZXQgPSB1c2JfY29udHJvbF9tc2coc2QtPmdzcGNhX2Rldi5kZXYsCkBAIC0xMDUsMTAgKzEwOSw4IEBACiAKIAlpZiAocmV0IDwgMCkgewogCQllcnIoIldyaXRlIFNCIHJlZyBbMDFdICUwNHggZmFpbGVkIiwgdmFsdWUpOwotCQlyZXR1cm4gcmV0OworCQlzZC0+Z3NwY2FfZGV2LnVzYl9lcnIgPSByZXQ7CiAJfQotCi0JcmV0dXJuIDA7CiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTExOSw2ICsxMjEsOSBAQAogewogCWludCByZXQ7CiAKKwlpZiAoc2QtPmdzcGNhX2Rldi51c2JfZXJyIDwgMCkKKwkJcmV0dXJuIC0xOworCiAJLyogV2UgZG9uJ3QgdXNlIHJlZ19yIGhlcmUsIGFzIHRoZSB3OTk2OGNmIGlzIHNwZWNpYWwgYW5kIGhhcyAxNgogCSAgIGJpdCByZWdpc3RlcnMgaW5zdGVhZCBvZiA4IGJpdCAqLwogCXJldCA9IHVzYl9jb250cm9sX21zZyhzZC0+Z3NwY2FfZGV2LmRldiwKQEAgLTEyNiwxMSArMTMxLDEzIEBACiAJCQkxLAogCQkJVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCiAJCQkwLCAweDAxLCBzZC0+Z3NwY2FfZGV2LnVzYl9idWYsIDIsIDUwMCk7Ci0JaWYgKHJldCA+PSAwKQorCWlmIChyZXQgPj0gMCkgewogCQlyZXQgPSBzZC0+Z3NwY2FfZGV2LnVzYl9idWZbMF0gfAogCQkgICAgICAoc2QtPmdzcGNhX2Rldi51c2JfYnVmWzFdIDw8IDgpOwotCWVsc2UKKwl9IGVsc2UgewogCQllcnIoIlJlYWQgU0IgcmVnIFswMV0gZmFpbGVkIik7CisJCXNkLT5nc3BjYV9kZXYudXNiX2VyciA9IHJldDsKKwl9CiAKIAl1ZGVsYXkoVzk5NjhDRl9JMkNfQlVTX0RFTEFZKTsKIApAQCAtMTQyLDIyICsxNDksMjAgQEAKICAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdzk5NjhjZl9zdGFydF90cmFuc2ZlcigpLgogICBSZXR1cm4gMCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIG51bWJlciBvdGhlcndpc2UuCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyBpbnQgdzk5NjhjZl91cGxvYWRfcXVhbnRpemF0aW9udGFibGVzKHN0cnVjdCBzZCAqc2QpCitzdGF0aWMgdm9pZCB3OTk2OGNmX3VwbG9hZF9xdWFudGl6YXRpb250YWJsZXMoc3RydWN0IHNkICpzZCkKIHsKIAl1MTYgYSwgYjsKLQlpbnQgcmV0ID0gMCwgaSwgajsKKwlpbnQgaSwgajsKIAotCXJldCArPSByZWdfdyhzZCwgMHgzOSwgMHgwMDEwKTsgLyogSlBFRyBjbG9jayBlbmFibGUgKi8KKwlyZWdfdyhzZCwgMHgzOSwgMHgwMDEwKTsgLyogSlBFRyBjbG9jayBlbmFibGUgKi8KIAogCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgMzI7IGkrKywgaiArPSAyKSB7Ci0JCWEgPSBZX1FVQU5UQUJMRVtqXSB8ICgodW5zaWduZWQpKFlfUVVBTlRBQkxFW2orMV0pIDw8IDgpOwotCQliID0gVVZfUVVBTlRBQkxFW2pdIHwgKCh1bnNpZ25lZCkoVVZfUVVBTlRBQkxFW2orMV0pIDw8IDgpOwotCQlyZXQgKz0gcmVnX3coc2QsIDB4NDAraSwgYSk7Ci0JCXJldCArPSByZWdfdyhzZCwgMHg2MCtpLCBiKTsKKwkJYSA9IFlfUVVBTlRBQkxFW2pdIHwgKCh1bnNpZ25lZCkoWV9RVUFOVEFCTEVbaiArIDFdKSA8PCA4KTsKKwkJYiA9IFVWX1FVQU5UQUJMRVtqXSB8ICgodW5zaWduZWQpKFVWX1FVQU5UQUJMRVtqICsgMV0pIDw8IDgpOworCQlyZWdfdyhzZCwgMHg0MCArIGksIGEpOworCQlyZWdfdyhzZCwgMHg2MCArIGksIGIpOwogCX0KLQlyZXQgKz0gcmVnX3coc2QsIDB4MzksIDB4MDAxMik7IC8qIEpQRUcgZW5jb2RlciBlbmFibGUgKi8KLQotCXJldHVybiByZXQ7CisJcmVnX3coc2QsIDB4MzksIDB4MDAxMik7IC8qIEpQRUcgZW5jb2RlciBlbmFibGUgKi8KIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTE2OCw1MCArMTczLDM5IEBACiAgKiBpMmNfYWRhcF9yZWFkX2J5dGUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyBpbnQgdzk5NjhjZl9zbWJ1c19zdGFydChzdHJ1Y3Qgc2QgKnNkKQorc3RhdGljIHZvaWQgdzk5NjhjZl9zbWJ1c19zdGFydChzdHJ1Y3Qgc2QgKnNkKQogewotCWludCByZXQgPSAwOwotCi0JcmV0ICs9IHc5OTY4Y2Zfd3JpdGVfc2Ioc2QsIDB4MDAxMSk7IC8qIFNERT0xLCBTREE9MCwgU0NMPTEgKi8KLQlyZXQgKz0gdzk5NjhjZl93cml0ZV9zYihzZCwgMHgwMDEwKTsgLyogU0RFPTEsIFNEQT0wLCBTQ0w9MCAqLwotCi0JcmV0dXJuIHJldDsKKwl3OTk2OGNmX3dyaXRlX3NiKHNkLCAweDAwMTEpOyAvKiBTREU9MSwgU0RBPTAsIFNDTD0xICovCisJdzk5NjhjZl93cml0ZV9zYihzZCwgMHgwMDEwKTsgLyogU0RFPTEsIFNEQT0wLCBTQ0w9MCAqLwogfQogCi1zdGF0aWMgaW50IHc5OTY4Y2Zfc21idXNfc3RvcChzdHJ1Y3Qgc2QgKnNkKQorc3RhdGljIHZvaWQgdzk5NjhjZl9zbWJ1c19zdG9wKHN0cnVjdCBzZCAqc2QpCiB7Ci0JaW50IHJldCA9IDA7Ci0KLQlyZXQgKz0gdzk5NjhjZl93cml0ZV9zYihzZCwgMHgwMDEwKTsgLyogU0RFPTEsIFNEQT0wLCBTQ0w9MCAqLwotCXJldCArPSB3OTk2OGNmX3dyaXRlX3NiKHNkLCAweDAwMTEpOyAvKiBTREU9MSwgU0RBPTAsIFNDTD0xICovCi0JcmV0ICs9IHc5OTY4Y2Zfd3JpdGVfc2Ioc2QsIDB4MDAxMyk7IC8qIFNERT0xLCBTREE9MSwgU0NMPTEgKi8KLQotCXJldHVybiByZXQ7CisJdzk5NjhjZl93cml0ZV9zYihzZCwgMHgwMDEwKTsgLyogU0RFPTEsIFNEQT0wLCBTQ0w9MCAqLworCXc5OTY4Y2Zfd3JpdGVfc2Ioc2QsIDB4MDAxMSk7IC8qIFNERT0xLCBTREE9MCwgU0NMPTEgKi8KKwl3OTk2OGNmX3dyaXRlX3NiKHNkLCAweDAwMTMpOyAvKiBTREU9MSwgU0RBPTEsIFNDTD0xICovCiB9CiAKLXN0YXRpYyBpbnQgdzk5NjhjZl9zbWJ1c193cml0ZV9ieXRlKHN0cnVjdCBzZCAqc2QsIHU4IHYpCitzdGF0aWMgdm9pZCB3OTk2OGNmX3NtYnVzX3dyaXRlX2J5dGUoc3RydWN0IHNkICpzZCwgdTggdikKIHsKIAl1OCBiaXQ7Ci0JaW50IHJldCA9IDAsIHNkYTsKKwlpbnQgc2RhOwogCiAJZm9yIChiaXQgPSAwIDsgYml0IDwgOCA7IGJpdCsrKSB7CiAJCXNkYSA9ICh2ICYgMHg4MCkgPyAyIDogMDsKIAkJdiA8PD0gMTsKIAkJLyogU0RFPTEsIFNEQT1zZGEsIFNDTD0wICovCi0JCXJldCArPSB3OTk2OGNmX3dyaXRlX3NiKHNkLCAweDEwIHwgc2RhKTsKKwkJdzk5NjhjZl93cml0ZV9zYihzZCwgMHgxMCB8IHNkYSk7CiAJCS8qIFNERT0xLCBTREE9c2RhLCBTQ0w9MSAqLwotCQlyZXQgKz0gdzk5NjhjZl93cml0ZV9zYihzZCwgMHgxMSB8IHNkYSk7CisJCXc5OTY4Y2Zfd3JpdGVfc2Ioc2QsIDB4MTEgfCBzZGEpOwogCQkvKiBTREU9MSwgU0RBPXNkYSwgU0NMPTAgKi8KLQkJcmV0ICs9IHc5OTY4Y2Zfd3JpdGVfc2Ioc2QsIDB4MTAgfCBzZGEpOworCQl3OTk2OGNmX3dyaXRlX3NiKHNkLCAweDEwIHwgc2RhKTsKIAl9Ci0KLQlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHc5OTY4Y2Zfc21idXNfcmVhZF9ieXRlKHN0cnVjdCBzZCAqc2QsIHU4KiB2KQorc3RhdGljIHZvaWQgdzk5NjhjZl9zbWJ1c19yZWFkX2J5dGUoc3RydWN0IHNkICpzZCwgdTggKnYpCiB7CiAJdTggYml0OwotCWludCByZXQgPSAwOwogCiAJLyogTm8gbmVlZCB0byBlbnN1cmUgU0RBIGlzIGhpZ2ggYXMgd2UgYXJlIGFsd2F5cyBjYWxsZWQgYWZ0ZXIKIAkgICByZWFkX2FjayB3aGljaCBlbmRzIHdpdGggU0RBIGhpZ2ggKi8KQEAgLTIxOSw1MSArMjEzLDQwIEBACiAJZm9yIChiaXQgPSAwIDsgYml0IDwgOCA7IGJpdCsrKSB7CiAJCSp2IDw8PSAxOwogCQkvKiBTREU9MSwgU0RBPTEsIFNDTD0xICovCi0JCXJldCArPSB3OTk2OGNmX3dyaXRlX3NiKHNkLCAweDAwMTMpOworCQl3OTk2OGNmX3dyaXRlX3NiKHNkLCAweDAwMTMpOwogCQkqdiB8PSAodzk5NjhjZl9yZWFkX3NiKHNkKSAmIDB4MDAwOCkgPyAxIDogMDsKIAkJLyogU0RFPTEsIFNEQT0xLCBTQ0w9MCAqLwotCQlyZXQgKz0gdzk5NjhjZl93cml0ZV9zYihzZCwgMHgwMDEyKTsKKwkJdzk5NjhjZl93cml0ZV9zYihzZCwgMHgwMDEyKTsKIAl9Ci0KLQlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHc5OTY4Y2Zfc21idXNfd3JpdGVfbmFjayhzdHJ1Y3Qgc2QgKnNkKQorc3RhdGljIHZvaWQgdzk5NjhjZl9zbWJ1c193cml0ZV9uYWNrKHN0cnVjdCBzZCAqc2QpCiB7Ci0JaW50IHJldCA9IDA7Ci0KIAkvKiBObyBuZWVkIHRvIGVuc3VyZSBTREEgaXMgaGlnaCBhcyB3ZSBhcmUgYWx3YXlzIGNhbGxlZCBhZnRlcgogCSAgIHJlYWRfYnl0ZSB3aGljaCBlbmRzIHdpdGggU0RBIGhpZ2ggKi8KLQlyZXQgKz0gdzk5NjhjZl93cml0ZV9zYihzZCwgMHgwMDEzKTsgLyogU0RFPTEsIFNEQT0xLCBTQ0w9MSAqLwotCXJldCArPSB3OTk2OGNmX3dyaXRlX3NiKHNkLCAweDAwMTIpOyAvKiBTREU9MSwgU0RBPTEsIFNDTD0wICovCi0KLQlyZXR1cm4gcmV0OworCXc5OTY4Y2Zfd3JpdGVfc2Ioc2QsIDB4MDAxMyk7IC8qIFNERT0xLCBTREE9MSwgU0NMPTEgKi8KKwl3OTk2OGNmX3dyaXRlX3NiKHNkLCAweDAwMTIpOyAvKiBTREU9MSwgU0RBPTEsIFNDTD0wICovCiB9CiAKLXN0YXRpYyBpbnQgdzk5NjhjZl9zbWJ1c19yZWFkX2FjayhzdHJ1Y3Qgc2QgKnNkKQorc3RhdGljIHZvaWQgdzk5NjhjZl9zbWJ1c19yZWFkX2FjayhzdHJ1Y3Qgc2QgKnNkKQogewotCWludCByZXQgPSAwLCBzZGE7CisJaW50IHNkYTsKIAogCS8qIEVuc3VyZSBTREEgaXMgaGlnaCBiZWZvcmUgcmFpc2luZyBjbG9jayB0byBhdm9pZCBhIHNwdXJpb3VzIHN0b3AgKi8KLQlyZXQgKz0gdzk5NjhjZl93cml0ZV9zYihzZCwgMHgwMDEyKTsgLyogU0RFPTEsIFNEQT0xLCBTQ0w9MCAqLwotCXJldCArPSB3OTk2OGNmX3dyaXRlX3NiKHNkLCAweDAwMTMpOyAvKiBTREU9MSwgU0RBPTEsIFNDTD0xICovCisJdzk5NjhjZl93cml0ZV9zYihzZCwgMHgwMDEyKTsgLyogU0RFPTEsIFNEQT0xLCBTQ0w9MCAqLworCXc5OTY4Y2Zfd3JpdGVfc2Ioc2QsIDB4MDAxMyk7IC8qIFNERT0xLCBTREE9MSwgU0NMPTEgKi8KIAlzZGEgPSB3OTk2OGNmX3JlYWRfc2Ioc2QpOwotCXJldCArPSB3OTk2OGNmX3dyaXRlX3NiKHNkLCAweDAwMTIpOyAvKiBTREU9MSwgU0RBPTEsIFNDTD0wICovCi0JaWYgKHNkYSA8IDApCi0JCXJldCArPSBzZGE7Ci0JZWxzZSBpZiAoc2RhICYgMHgwOCkgeworCXc5OTY4Y2Zfd3JpdGVfc2Ioc2QsIDB4MDAxMik7IC8qIFNERT0xLCBTREE9MSwgU0NMPTAgKi8KKwlpZiAoc2RhID49IDAgJiYgKHNkYSAmIDB4MDgpKSB7CiAJCVBERUJVRyhEX1VTQkksICJEaWQgbm90IHJlY2VpdmUgaTJjIEFDSyIpOwotCQlyZXQgKz0gLTE7CisJCXNkLT5nc3BjYV9kZXYudXNiX2VyciA9IC1FSU87CiAJfQotCi0JcmV0dXJuIHJldDsKIH0KIAogLyogU01CdXMgcHJvdG9jb2w6IFMgQWRkciBXciBbQV0gU3ViYWRkciBbQV0gVmFsdWUgW0FdIFAgKi8KLXN0YXRpYyBpbnQgdzk5NjhjZl9pMmNfdyhzdHJ1Y3Qgc2QgKnNkLCB1OCByZWcsIHU4IHZhbHVlKQorc3RhdGljIHZvaWQgdzk5NjhjZl9pMmNfdyhzdHJ1Y3Qgc2QgKnNkLCB1OCByZWcsIHU4IHZhbHVlKQogewogCXUxNiogZGF0YSA9ICh1MTYgKilzZC0+Z3NwY2FfZGV2LnVzYl9idWY7Ci0JaW50IHJldCA9IDA7CiAKIAlkYXRhWzBdID0gMHgwODJmIHwgKChzZC0+c2Vuc29yX2FkZHIgJiAweDgwKSA/IDB4MTUwMCA6IDB4MCk7CiAJZGF0YVswXSB8PSAoc2QtPnNlbnNvcl9hZGRyICYgMHg0MCkgPyAweDQwMDAgOiAweDA7CkBAIC0yNzYsNyArMjU5LDcgQEAKIAlkYXRhWzNdID0gMHgxZDIwIHwgKChzZC0+c2Vuc29yX2FkZHIgJiAweDAyKSA/IDB4MDAwMSA6IDB4MCk7CiAJZGF0YVszXSB8PSAoc2QtPnNlbnNvcl9hZGRyICYgMHgwMSkgPyAweDAwNTQgOiAweDA7CiAKLQlyZXQgKz0gdzk5NjhjZl93cml0ZV9mc2Ioc2QsIGRhdGEpOworCXc5OTY4Y2Zfd3JpdGVfZnNiKHNkLCBkYXRhKTsKIAogCWRhdGFbMF0gPSAweDgyMDggfCAoKHJlZyAmIDB4ODApID8gMHgwMDE1IDogMHgwKTsKIAlkYXRhWzBdIHw9IChyZWcgJiAweDQwKSA/IDB4MDU0MCA6IDB4MDsKQEAgLTI5MCw3ICsyNzMsNyBAQAogCWRhdGFbMl0gfD0gKHJlZyAmIDB4MDEpID8gMHg1NDAwIDogMHgwOwogCWRhdGFbM10gPSAweDAwMWQ7CiAKLQlyZXQgKz0gdzk5NjhjZl93cml0ZV9mc2Ioc2QsIGRhdGEpOworCXc5OTY4Y2Zfd3JpdGVfZnNiKHNkLCBkYXRhKTsKIAogCWRhdGFbMF0gPSAweDgyMDggfCAoKHZhbHVlICYgMHg4MCkgPyAweDAwMTUgOiAweDApOwogCWRhdGFbMF0gfD0gKHZhbHVlICYgMHg0MCkgPyAweDA1NDAgOiAweDA7CkBAIC0zMDQsMTQgKzI4Nyw5IEBACiAJZGF0YVsyXSB8PSAodmFsdWUgJiAweDAxKSA/IDB4NTQwMCA6IDB4MDsKIAlkYXRhWzNdID0gMHhmZTFkOwogCi0JcmV0ICs9IHc5OTY4Y2Zfd3JpdGVfZnNiKHNkLCBkYXRhKTsKKwl3OTk2OGNmX3dyaXRlX2ZzYihzZCwgZGF0YSk7CiAKLQlpZiAoIXJldCkKLQkJUERFQlVHKERfVVNCTywgImkyYyAweCUwMnggLT4gWzB4JTAyeF0iLCB2YWx1ZSwgcmVnKTsKLQllbHNlCi0JCVBERUJVRyhEX0VSUiwgImkyYyAweCUwMnggLT4gWzB4JTAyeF0gZmFpbGVkIiwgdmFsdWUsIHJlZyk7Ci0KLQlyZXR1cm4gcmV0OworCVBERUJVRyhEX1VTQk8sICJpMmMgMHglMDJ4IC0+IFsweCUwMnhdIiwgdmFsdWUsIHJlZyk7CiB9CiAKIC8qIFNNQnVzIHByb3RvY29sOiBTIEFkZHIgV3IgW0FdIFN1YmFkZHIgW0FdIFAgUyBBZGRyKzEgUmQgW0FdIFtWYWx1ZV0gTkEgUCAqLwpAQCAtMzIxLDI4ICsyOTksMjggQEAKIAl1OCB2YWx1ZTsKIAogCS8qIEZhc3Qgc2VyaWFsIGJ1cyBkYXRhIGNvbnRyb2wgZGlzYWJsZSAqLwotCXJldCArPSB3OTk2OGNmX3dyaXRlX3NiKHNkLCAweDAwMTMpOyAvKiBkb24ndCBjaGFuZ2UgISAqLworCXc5OTY4Y2Zfd3JpdGVfc2Ioc2QsIDB4MDAxMyk7IC8qIGRvbid0IGNoYW5nZSAhICovCiAKLQlyZXQgKz0gdzk5NjhjZl9zbWJ1c19zdGFydChzZCk7Ci0JcmV0ICs9IHc5OTY4Y2Zfc21idXNfd3JpdGVfYnl0ZShzZCwgc2QtPnNlbnNvcl9hZGRyKTsKLQlyZXQgKz0gdzk5NjhjZl9zbWJ1c19yZWFkX2FjayhzZCk7Ci0JcmV0ICs9IHc5OTY4Y2Zfc21idXNfd3JpdGVfYnl0ZShzZCwgcmVnKTsKLQlyZXQgKz0gdzk5NjhjZl9zbWJ1c19yZWFkX2FjayhzZCk7Ci0JcmV0ICs9IHc5OTY4Y2Zfc21idXNfc3RvcChzZCk7Ci0JcmV0ICs9IHc5OTY4Y2Zfc21idXNfc3RhcnQoc2QpOwotCXJldCArPSB3OTk2OGNmX3NtYnVzX3dyaXRlX2J5dGUoc2QsIHNkLT5zZW5zb3JfYWRkciArIDEpOwotCXJldCArPSB3OTk2OGNmX3NtYnVzX3JlYWRfYWNrKHNkKTsKLQlyZXQgKz0gdzk5NjhjZl9zbWJ1c19yZWFkX2J5dGUoc2QsICZ2YWx1ZSk7CisJdzk5NjhjZl9zbWJ1c19zdGFydChzZCk7CisJdzk5NjhjZl9zbWJ1c193cml0ZV9ieXRlKHNkLCBzZC0+c2Vuc29yX2FkZHIpOworCXc5OTY4Y2Zfc21idXNfcmVhZF9hY2soc2QpOworCXc5OTY4Y2Zfc21idXNfd3JpdGVfYnl0ZShzZCwgcmVnKTsKKwl3OTk2OGNmX3NtYnVzX3JlYWRfYWNrKHNkKTsKKwl3OTk2OGNmX3NtYnVzX3N0b3Aoc2QpOworCXc5OTY4Y2Zfc21idXNfc3RhcnQoc2QpOworCXc5OTY4Y2Zfc21idXNfd3JpdGVfYnl0ZShzZCwgc2QtPnNlbnNvcl9hZGRyICsgMSk7CisJdzk5NjhjZl9zbWJ1c19yZWFkX2FjayhzZCk7CisJdzk5NjhjZl9zbWJ1c19yZWFkX2J5dGUoc2QsICZ2YWx1ZSk7CiAJLyogc2lnbmFsIHdlIGRvbid0IHdhbnQgdG8gcmVhZCBhbnltb3JlLCB0aGUgdjRsMSBkcml2ZXIgdXNlZCB0bwogCSAgIHNlbmQgYW4gYWNrIGhlcmUgd2hpY2ggaXMgdmVyeSB3cm9uZyEgKGFuZCB0aGVuIGZpeGVkCiAJICAgdGhlIGlzc3VlcyB0aGlzIGdhdmUgYnkgcmV0cnlpbmcgcmVhZHMpICovCi0JcmV0ICs9IHc5OTY4Y2Zfc21idXNfd3JpdGVfbmFjayhzZCk7Ci0JcmV0ICs9IHc5OTY4Y2Zfc21idXNfc3RvcChzZCk7CisJdzk5NjhjZl9zbWJ1c193cml0ZV9uYWNrKHNkKTsKKwl3OTk2OGNmX3NtYnVzX3N0b3Aoc2QpOwogCiAJLyogRmFzdCBzZXJpYWwgYnVzIGRhdGEgY29udHJvbCByZS1lbmFibGUgKi8KLQlyZXQgKz0gdzk5NjhjZl93cml0ZV9zYihzZCwgMHgwMDMwKTsKKwl3OTk2OGNmX3dyaXRlX3NiKHNkLCAweDAwMzApOwogCi0JaWYgKCFyZXQpIHsKKwlpZiAoc2QtPmdzcGNhX2Rldi51c2JfZXJyID49IDApIHsKIAkJcmV0ID0gdmFsdWU7CiAJCVBERUJVRyhEX1VTQkksICJpMmMgWzB4JTAyWF0gLT4gMHglMDJYIiwgcmVnLCB2YWx1ZSk7CiAJfSBlbHNlCkBAIC0zNTEsNzkgKzMyOSw2OCBAQAogCXJldHVybiByZXQ7CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBUdXJuIG9uIHRoZSBMRUQgb24gc29tZSB3ZWJjYW1zLiBBIGJlZXAgc2hvdWxkIGJlIGhlYXJkIHRvby4KICAgUmV0dXJuIDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBudW1iZXIgb3RoZXJ3aXNlLgogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1zdGF0aWMgaW50IHc5OTY4Y2ZfY29uZmlndXJlKHN0cnVjdCBzZCAqc2QpCitzdGF0aWMgdm9pZCB3OTk2OGNmX2NvbmZpZ3VyZShzdHJ1Y3Qgc2QgKnNkKQogewotCWludCByZXQgPSAwOwotCi0JcmV0ICs9IHJlZ193KHNkLCAweDAwLCAweGZmMDApOyAvKiBwb3dlci1kb3duICovCi0JcmV0ICs9IHJlZ193KHNkLCAweDAwLCAweGJmMTcpOyAvKiByZXNldCBldmVyeXRoaW5nICovCi0JcmV0ICs9IHJlZ193KHNkLCAweDAwLCAweGJmMTApOyAvKiBub3JtYWwgb3BlcmF0aW9uICovCi0JcmV0ICs9IHJlZ193KHNkLCAweDAxLCAweDAwMTApOyAvKiBzZXJpYWwgYnVzLCBTRFMgaGlnaCAqLwotCXJldCArPSByZWdfdyhzZCwgMHgwMSwgMHgwMDAwKTsgLyogc2VyaWFsIGJ1cywgU0RTIGxvdyAqLwotCXJldCArPSByZWdfdyhzZCwgMHgwMSwgMHgwMDEwKTsgLyogLi5oaWdoICdiZWVwLWJlZXAnICovCi0JcmV0ICs9IHJlZ193KHNkLCAweDAxLCAweDAwMzApOyAvKiBTZXQgc2RhIHNjbCB0byBGU0IgbW9kZSAqLwotCi0JaWYgKHJldCkKLQkJUERFQlVHKERfRVJSLCAiQ291bGRuJ3QgdHVybiBvbiB0aGUgTEVEIik7CisJcmVnX3coc2QsIDB4MDAsIDB4ZmYwMCk7IC8qIHBvd2VyLWRvd24gKi8KKwlyZWdfdyhzZCwgMHgwMCwgMHhiZjE3KTsgLyogcmVzZXQgZXZlcnl0aGluZyAqLworCXJlZ193KHNkLCAweDAwLCAweGJmMTApOyAvKiBub3JtYWwgb3BlcmF0aW9uICovCisJcmVnX3coc2QsIDB4MDEsIDB4MDAxMCk7IC8qIHNlcmlhbCBidXMsIFNEUyBoaWdoICovCisJcmVnX3coc2QsIDB4MDEsIDB4MDAwMCk7IC8qIHNlcmlhbCBidXMsIFNEUyBsb3cgKi8KKwlyZWdfdyhzZCwgMHgwMSwgMHgwMDEwKTsgLyogLi5oaWdoICdiZWVwLWJlZXAnICovCisJcmVnX3coc2QsIDB4MDEsIDB4MDAzMCk7IC8qIFNldCBzZGEgc2NsIHRvIEZTQiBtb2RlICovCiAKIAlzZC0+c3RvcHBlZCA9IDE7Ci0KLQlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHc5OTY4Y2ZfaW5pdChzdHJ1Y3Qgc2QgKnNkKQorc3RhdGljIHZvaWQgdzk5NjhjZl9pbml0KHN0cnVjdCBzZCAqc2QpCiB7Ci0JaW50IHJldCA9IDA7CiAJdW5zaWduZWQgbG9uZyBod19idWZzaXplID0gc2QtPnNpZiA/ICgzNTIgKiAyODggKiAyKSA6ICg2NDAgKiA0ODAgKiAyKSwKIAkJICAgICAgeTAgPSAweDAwMDAsCi0JCSAgICAgIHUwID0geTAgKyBod19idWZzaXplLzIsCi0JCSAgICAgIHYwID0gdTAgKyBod19idWZzaXplLzQsCi0JCSAgICAgIHkxID0gdjAgKyBod19idWZzaXplLzQsCi0JCSAgICAgIHUxID0geTEgKyBod19idWZzaXplLzIsCi0JCSAgICAgIHYxID0gdTEgKyBod19idWZzaXplLzQ7CisJCSAgICAgIHUwID0geTAgKyBod19idWZzaXplIC8gMiwKKwkJICAgICAgdjAgPSB1MCArIGh3X2J1ZnNpemUgLyA0LAorCQkgICAgICB5MSA9IHYwICsgaHdfYnVmc2l6ZSAvIDQsCisJCSAgICAgIHUxID0geTEgKyBod19idWZzaXplIC8gMiwKKwkJICAgICAgdjEgPSB1MSArIGh3X2J1ZnNpemUgLyA0OwogCi0JcmV0ICs9IHJlZ193KHNkLCAweDAwLCAweGZmMDApOyAvKiBwb3dlciBvZmYgKi8KLQlyZXQgKz0gcmVnX3coc2QsIDB4MDAsIDB4YmYxMCk7IC8qIHBvd2VyIG9uICovCisJcmVnX3coc2QsIDB4MDAsIDB4ZmYwMCk7IC8qIHBvd2VyIG9mZiAqLworCXJlZ193KHNkLCAweDAwLCAweGJmMTApOyAvKiBwb3dlciBvbiAqLwogCi0JcmV0ICs9IHJlZ193KHNkLCAweDAzLCAweDQwNWQpOyAvKiBEUkFNIHRpbWluZ3MgKi8KLQlyZXQgKz0gcmVnX3coc2QsIDB4MDQsIDB4MDAzMCk7IC8qIFNEUkFNIHRpbWluZ3MgKi8KKwlyZWdfdyhzZCwgMHgwMywgMHg0MDVkKTsgLyogRFJBTSB0aW1pbmdzICovCisJcmVnX3coc2QsIDB4MDQsIDB4MDAzMCk7IC8qIFNEUkFNIHRpbWluZ3MgKi8KIAotCXJldCArPSByZWdfdyhzZCwgMHgyMCwgeTAgJiAweGZmZmYpOyAvKiBZIGJ1Zi4wLCBsb3cgKi8KLQlyZXQgKz0gcmVnX3coc2QsIDB4MjEsIHkwID4+IDE2KTsgICAgLyogWSBidWYuMCwgaGlnaCAqLwotCXJldCArPSByZWdfdyhzZCwgMHgyNCwgdTAgJiAweGZmZmYpOyAvKiBVIGJ1Zi4wLCBsb3cgKi8KLQlyZXQgKz0gcmVnX3coc2QsIDB4MjUsIHUwID4+IDE2KTsgICAgLyogVSBidWYuMCwgaGlnaCAqLwotCXJldCArPSByZWdfdyhzZCwgMHgyOCwgdjAgJiAweGZmZmYpOyAvKiBWIGJ1Zi4wLCBsb3cgKi8KLQlyZXQgKz0gcmVnX3coc2QsIDB4MjksIHYwID4+IDE2KTsgICAgLyogViBidWYuMCwgaGlnaCAqLworCXJlZ193KHNkLCAweDIwLCB5MCAmIDB4ZmZmZik7IC8qIFkgYnVmLjAsIGxvdyAqLworCXJlZ193KHNkLCAweDIxLCB5MCA+PiAxNik7ICAgIC8qIFkgYnVmLjAsIGhpZ2ggKi8KKwlyZWdfdyhzZCwgMHgyNCwgdTAgJiAweGZmZmYpOyAvKiBVIGJ1Zi4wLCBsb3cgKi8KKwlyZWdfdyhzZCwgMHgyNSwgdTAgPj4gMTYpOyAgICAvKiBVIGJ1Zi4wLCBoaWdoICovCisJcmVnX3coc2QsIDB4MjgsIHYwICYgMHhmZmZmKTsgLyogViBidWYuMCwgbG93ICovCisJcmVnX3coc2QsIDB4MjksIHYwID4+IDE2KTsgICAgLyogViBidWYuMCwgaGlnaCAqLwogCi0JcmV0ICs9IHJlZ193KHNkLCAweDIyLCB5MSAmIDB4ZmZmZik7IC8qIFkgYnVmLjEsIGxvdyAqLwotCXJldCArPSByZWdfdyhzZCwgMHgyMywgeTEgPj4gMTYpOyAgICAvKiBZIGJ1Zi4xLCBoaWdoICovCi0JcmV0ICs9IHJlZ193KHNkLCAweDI2LCB1MSAmIDB4ZmZmZik7IC8qIFUgYnVmLjEsIGxvdyAqLwotCXJldCArPSByZWdfdyhzZCwgMHgyNywgdTEgPj4gMTYpOyAgICAvKiBVIGJ1Zi4xLCBoaWdoICovCi0JcmV0ICs9IHJlZ193KHNkLCAweDJhLCB2MSAmIDB4ZmZmZik7IC8qIFYgYnVmLjEsIGxvdyAqLwotCXJldCArPSByZWdfdyhzZCwgMHgyYiwgdjEgPj4gMTYpOyAgICAvKiBWIGJ1Zi4xLCBoaWdoICovCisJcmVnX3coc2QsIDB4MjIsIHkxICYgMHhmZmZmKTsgLyogWSBidWYuMSwgbG93ICovCisJcmVnX3coc2QsIDB4MjMsIHkxID4+IDE2KTsgICAgLyogWSBidWYuMSwgaGlnaCAqLworCXJlZ193KHNkLCAweDI2LCB1MSAmIDB4ZmZmZik7IC8qIFUgYnVmLjEsIGxvdyAqLworCXJlZ193KHNkLCAweDI3LCB1MSA+PiAxNik7ICAgIC8qIFUgYnVmLjEsIGhpZ2ggKi8KKwlyZWdfdyhzZCwgMHgyYSwgdjEgJiAweGZmZmYpOyAvKiBWIGJ1Zi4xLCBsb3cgKi8KKwlyZWdfdyhzZCwgMHgyYiwgdjEgPj4gMTYpOyAgICAvKiBWIGJ1Zi4xLCBoaWdoICovCiAKLQlyZXQgKz0gcmVnX3coc2QsIDB4MzIsIHkxICYgMHhmZmZmKTsgLyogSlBFRyBidWYgMCBsb3cgKi8KLQlyZXQgKz0gcmVnX3coc2QsIDB4MzMsIHkxID4+IDE2KTsgICAgLyogSlBFRyBidWYgMCBoaWdoICovCisJcmVnX3coc2QsIDB4MzIsIHkxICYgMHhmZmZmKTsgLyogSlBFRyBidWYgMCBsb3cgKi8KKwlyZWdfdyhzZCwgMHgzMywgeTEgPj4gMTYpOyAgICAvKiBKUEVHIGJ1ZiAwIGhpZ2ggKi8KIAotCXJldCArPSByZWdfdyhzZCwgMHgzNCwgeTEgJiAweGZmZmYpOyAvKiBKUEVHIGJ1ZiAxIGxvdyAqLwotCXJldCArPSByZWdfdyhzZCwgMHgzNSwgeTEgPj4gMTYpOyAgICAvKiBKUEVHIGJ1ZyAxIGhpZ2ggKi8KKwlyZWdfdyhzZCwgMHgzNCwgeTEgJiAweGZmZmYpOyAvKiBKUEVHIGJ1ZiAxIGxvdyAqLworCXJlZ193KHNkLCAweDM1LCB5MSA+PiAxNik7ICAgIC8qIEpQRUcgYnVnIDEgaGlnaCAqLwogCi0JcmV0ICs9IHJlZ193KHNkLCAweDM2LCAweDAwMDApOy8qIEpQRUcgcmVzdGFydCBpbnRlcnZhbCAqLwotCXJldCArPSByZWdfdyhzZCwgMHgzNywgMHgwODA0KTsvKkpQRUcgVkxFIEZJRk8gdGhyZXNob2xkKi8KLQlyZXQgKz0gcmVnX3coc2QsIDB4MzgsIDB4MDAwMCk7LyogZGlzYWJsZSBodyB1cC1zY2FsaW5nICovCi0JcmV0ICs9IHJlZ193KHNkLCAweDNmLCAweDAwMDApOyAvKiBKUEVHL01DVEwgdGVzdCBkYXRhICovCi0KLQlyZXR1cm4gcmV0OworCXJlZ193KHNkLCAweDM2LCAweDAwMDApOy8qIEpQRUcgcmVzdGFydCBpbnRlcnZhbCAqLworCXJlZ193KHNkLCAweDM3LCAweDA4MDQpOy8qSlBFRyBWTEUgRklGTyB0aHJlc2hvbGQqLworCXJlZ193KHNkLCAweDM4LCAweDAwMDApOy8qIGRpc2FibGUgaHcgdXAtc2NhbGluZyAqLworCXJlZ193KHNkLCAweDNmLCAweDAwMDApOyAvKiBKUEVHL01DVEwgdGVzdCBkYXRhICovCiB9CiAKLXN0YXRpYyBpbnQgdzk5NjhjZl9zZXRfY3JvcF93aW5kb3coc3RydWN0IHNkICpzZCkKK3N0YXRpYyB2b2lkIHc5OTY4Y2Zfc2V0X2Nyb3Bfd2luZG93KHN0cnVjdCBzZCAqc2QpCiB7Ci0JaW50IHJldCA9IDAsIHN0YXJ0X2Nyb3B4LCBzdGFydF9jcm9weSwgIHgsIHksIGZ3LCBmaCwgY3csIGNoLAorCWludCBzdGFydF9jcm9weCwgc3RhcnRfY3JvcHksICB4LCB5LCBmdywgZmgsIGN3LCBjaCwKIAkgICAgbWF4X3dpZHRoLCBtYXhfaGVpZ2h0OwogCiAJaWYgKHNkLT5zaWYpIHsKQEAgLTQ1Niw4ICs0MjMsOCBAQAogCWZ3ID0gU0Moc2QtPmdzcGNhX2Rldi53aWR0aCkgLyBtYXhfd2lkdGg7CiAJZmggPSBTQyhzZC0+Z3NwY2FfZGV2LmhlaWdodCkgLyBtYXhfaGVpZ2h0OwogCi0JY3cgPSAoZncgPj0gZmgpID8gbWF4X3dpZHRoIDogU0Moc2QtPmdzcGNhX2Rldi53aWR0aCkvZmg7Ci0JY2ggPSAoZncgPj0gZmgpID8gU0Moc2QtPmdzcGNhX2Rldi5oZWlnaHQpL2Z3IDogbWF4X2hlaWdodDsKKwljdyA9IChmdyA+PSBmaCkgPyBtYXhfd2lkdGggOiBTQyhzZC0+Z3NwY2FfZGV2LndpZHRoKSAvIGZoOworCWNoID0gKGZ3ID49IGZoKSA/IFNDKHNkLT5nc3BjYV9kZXYuaGVpZ2h0KSAvIGZ3IDogbWF4X2hlaWdodDsKIAogCXNkLT5zZW5zb3Jfd2lkdGggPSBtYXhfd2lkdGg7CiAJc2QtPnNlbnNvcl9oZWlnaHQgPSBtYXhfaGVpZ2h0OwpAQCAtNDY1LDQyICs0MzIsNDAgQEAKIAl4ID0gKG1heF93aWR0aCAtIGN3KSAvIDI7CiAJeSA9IChtYXhfaGVpZ2h0IC0gY2gpIC8gMjsKIAotCXJldCArPSByZWdfdyhzZCwgMHgxMCwgc3RhcnRfY3JvcHggKyB4KTsKLQlyZXQgKz0gcmVnX3coc2QsIDB4MTEsIHN0YXJ0X2Nyb3B5ICsgeSk7Ci0JcmV0ICs9IHJlZ193KHNkLCAweDEyLCBzdGFydF9jcm9weCArIHggKyBjdyk7Ci0JcmV0ICs9IHJlZ193KHNkLCAweDEzLCBzdGFydF9jcm9weSArIHkgKyBjaCk7Ci0KLQlyZXR1cm4gcmV0OworCXJlZ193KHNkLCAweDEwLCBzdGFydF9jcm9weCArIHgpOworCXJlZ193KHNkLCAweDExLCBzdGFydF9jcm9weSArIHkpOworCXJlZ193KHNkLCAweDEyLCBzdGFydF9jcm9weCArIHggKyBjdyk7CisJcmVnX3coc2QsIDB4MTMsIHN0YXJ0X2Nyb3B5ICsgeSArIGNoKTsKIH0KIAotc3RhdGljIGludCB3OTk2OGNmX21vZGVfaW5pdF9yZWdzKHN0cnVjdCBzZCAqc2QpCitzdGF0aWMgdm9pZCB3OTk2OGNmX21vZGVfaW5pdF9yZWdzKHN0cnVjdCBzZCAqc2QpCiB7Ci0JaW50IHJldCA9IDAsIHZhbCwgdnNfcG9sYXJpdHksIGhzX3BvbGFyaXR5OworCWludCB2YWwsIHZzX3BvbGFyaXR5LCBoc19wb2xhcml0eTsKIAotCXJldCArPSB3OTk2OGNmX3NldF9jcm9wX3dpbmRvdyhzZCk7CisJdzk5NjhjZl9zZXRfY3JvcF93aW5kb3coc2QpOwogCi0JcmV0ICs9IHJlZ193KHNkLCAweDE0LCBzZC0+Z3NwY2FfZGV2LndpZHRoKTsKLQlyZXQgKz0gcmVnX3coc2QsIDB4MTUsIHNkLT5nc3BjYV9kZXYuaGVpZ2h0KTsKKwlyZWdfdyhzZCwgMHgxNCwgc2QtPmdzcGNhX2Rldi53aWR0aCk7CisJcmVnX3coc2QsIDB4MTUsIHNkLT5nc3BjYV9kZXYuaGVpZ2h0KTsKIAogCS8qIEpQRUcgd2lkdGggJiBoZWlnaHQgKi8KLQlyZXQgKz0gcmVnX3coc2QsIDB4MzAsIHNkLT5nc3BjYV9kZXYud2lkdGgpOwotCXJldCArPSByZWdfdyhzZCwgMHgzMSwgc2QtPmdzcGNhX2Rldi5oZWlnaHQpOworCXJlZ193KHNkLCAweDMwLCBzZC0+Z3NwY2FfZGV2LndpZHRoKTsKKwlyZWdfdyhzZCwgMHgzMSwgc2QtPmdzcGNhX2Rldi5oZWlnaHQpOwogCiAJLyogWSAmIFVWIGZyYW1lIGJ1ZmZlciBzdHJpZGVzIChpbiBXT1JEKSAqLwogCWlmICh3OTk2OGNmX3ZnYV9tb2RlW3NkLT5nc3BjYV9kZXYuY3Vycl9tb2RlXS5waXhlbGZvcm1hdCA9PQogCSAgICBWNEwyX1BJWF9GTVRfSlBFRykgewotCQlyZXQgKz0gcmVnX3coc2QsIDB4MmMsIHNkLT5nc3BjYV9kZXYud2lkdGgvMik7Ci0JCXJldCArPSByZWdfdyhzZCwgMHgyZCwgc2QtPmdzcGNhX2Rldi53aWR0aC80KTsKKwkJcmVnX3coc2QsIDB4MmMsIHNkLT5nc3BjYV9kZXYud2lkdGggLyAyKTsKKwkJcmVnX3coc2QsIDB4MmQsIHNkLT5nc3BjYV9kZXYud2lkdGggLyA0KTsKIAl9IGVsc2UKLQkJcmV0ICs9IHJlZ193KHNkLCAweDJjLCBzZC0+Z3NwY2FfZGV2LndpZHRoKTsKKwkJcmVnX3coc2QsIDB4MmMsIHNkLT5nc3BjYV9kZXYud2lkdGgpOwogCi0JcmV0ICs9IHJlZ193KHNkLCAweDAwLCAweGJmMTcpOyAvKiByZXNldCBldmVyeXRoaW5nICovCi0JcmV0ICs9IHJlZ193KHNkLCAweDAwLCAweGJmMTApOyAvKiBub3JtYWwgb3BlcmF0aW9uICovCisJcmVnX3coc2QsIDB4MDAsIDB4YmYxNyk7IC8qIHJlc2V0IGV2ZXJ5dGhpbmcgKi8KKwlyZWdfdyhzZCwgMHgwMCwgMHhiZjEwKTsgLyogbm9ybWFsIG9wZXJhdGlvbiAqLwogCiAJLyogVHJhbnNmZXIgc2l6ZSBpbiBXT1JEUyAoZm9yIFVZVlkgZm9ybWF0IG9ubHkpICovCiAJdmFsID0gc2QtPmdzcGNhX2Rldi53aWR0aCAqIHNkLT5nc3BjYV9kZXYuaGVpZ2h0OwotCXJldCArPSByZWdfdyhzZCwgMHgzZCwgdmFsICYgMHhmZmZmKTsgLyogbG93IGJpdHMgKi8KLQlyZXQgKz0gcmVnX3coc2QsIDB4M2UsIHZhbCA+PiAxNik7ICAgIC8qIGhpZ2ggYml0cyAqLworCXJlZ193KHNkLCAweDNkLCB2YWwgJiAweGZmZmYpOyAvKiBsb3cgYml0cyAqLworCXJlZ193KHNkLCAweDNlLCB2YWwgPj4gMTYpOyAgICAvKiBoaWdoIGJpdHMgKi8KIAogCWlmICh3OTk2OGNmX3ZnYV9tb2RlW3NkLT5nc3BjYV9kZXYuY3Vycl9tb2RlXS5waXhlbGZvcm1hdCA9PQogCSAgICBWNEwyX1BJWF9GTVRfSlBFRykgewpAQCAtNTA4LDcgKzQ3Myw3IEBACiAJCWpwZWdfZGVmaW5lKHNkLT5qcGVnX2hkciwgc2QtPmdzcGNhX2Rldi5oZWlnaHQsCiAJCQkgICAgc2QtPmdzcGNhX2Rldi53aWR0aCwgMHgyMik7IC8qIEpQRUcgNDIwICovCiAJCWpwZWdfc2V0X3F1YWwoc2QtPmpwZWdfaGRyLCBzZC0+cXVhbGl0eSk7Ci0JCXJldCArPSB3OTk2OGNmX3VwbG9hZF9xdWFudGl6YXRpb250YWJsZXMoc2QpOworCQl3OTk2OGNmX3VwbG9hZF9xdWFudGl6YXRpb250YWJsZXMoc2QpOwogCX0KIAogCS8qIFZpZGVvIENhcHR1cmUgQ29udHJvbCBSZWdpc3RlciAqLwpAQCAtNTQwLDE5ICs1MDUsMTUgQEAKIAogCXZhbCB8PSAweDgwMDA7IC8qIGNhcHQuIGVuYWJsZSAqLwogCi0JcmV0ICs9IHJlZ193KHNkLCAweDE2LCB2YWwpOworCXJlZ193KHNkLCAweDE2LCB2YWwpOwogCiAJc2QtPmdzcGNhX2Rldi5lbXB0eV9wYWNrZXQgPSAwOwotCi0JcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgdzk5NjhjZl9zdG9wMChzdHJ1Y3Qgc2QgKnNkKQogewotCWlmIChzZC0+Z3NwY2FfZGV2LnByZXNlbnQpIHsKLQkJcmVnX3coc2QsIDB4MzksIDB4MDAwMCk7IC8qIGRpc2FibGUgSlBFRyBlbmNvZGVyICovCi0JCXJlZ193KHNkLCAweDE2LCAweDAwMDApOyAvKiBzdG9wIHZpZGVvIGNhcHR1cmUgKi8KLQl9CisJcmVnX3coc2QsIDB4MzksIDB4MDAwMCk7IC8qIGRpc2FibGUgSlBFRyBlbmNvZGVyICovCisJcmVnX3coc2QsIDB4MTYsIDB4MDAwMCk7IC8qIHN0b3AgdmlkZW8gY2FwdHVyZSAqLwogfQogCiAvKiBUaGUgdzk5NjhjZiBkb2NzIHNheSB0aGF0IGEgMCBzaXplZCBwYWNrZXQgbWVhbnMgRU9GIChhbmQgYWxzbyBTT0YKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EveGlybGlua19jaXQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EveGlybGlua19jaXQuYwppbmRleCA4NzE1NTc3Li41YjUwMzlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3hpcmxpbmtfY2l0LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS94aXJsaW5rX2NpdC5jCkBAIC0yOSw2ICsyOSw3IEBACiAKICNkZWZpbmUgTU9EVUxFX05BTUUgInhpcmxpbmstY2l0IgogCisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlICJnc3BjYS5oIgogCiBNT0RVTEVfQVVUSE9SKCJIYW5zIGRlIEdvZWRlIDxoZGVnb2VkZUByZWRoYXQuY29tPiIpOwpAQCAtNTgsNiArNTksNyBAQAogI2RlZmluZSBDSVRfTU9ERUw0IDQKICNkZWZpbmUgQ0lUX0lCTV9ORVRDQU1fUFJPIDUKIAl1OCBpbnB1dF9pbmRleDsKKwl1OCBidXR0b25fc3RhdGU7CiAJdTggc3RvcF9vbl9jb250cm9sX2NoYW5nZTsKIAl1OCBzb2ZfcmVhZDsKIAl1OCBzb2ZfbGVuOwpAQCAtMTg1LDYwICsxODcsNjAgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IGNpZl95dXZfbW9kZVtdID0gewogCXsxNzYsIDE0NCwgVjRMMl9QSVhfRk1UX0NJVF9ZWVZZVVksIFY0TDJfRklFTERfTk9ORSwKIAkJLmJ5dGVzcGVybGluZSA9IDE3NiwKLQkJLnNpemVpbWFnZSA9IDE3NiAqIDE0NCAqIDMgLyAyLAorCQkuc2l6ZWltYWdlID0gMTc2ICogMTQ0ICogMyAvIDIgKyA0LAogCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCfSwKIAl7MzUyLCAyODgsIFY0TDJfUElYX0ZNVF9DSVRfWVlWWVVZLCBWNEwyX0ZJRUxEX05PTkUsCiAJCS5ieXRlc3BlcmxpbmUgPSAzNTIsCi0JCS5zaXplaW1hZ2UgPSAzNTIgKiAyODggKiAzIC8gMiwKKwkJLnNpemVpbWFnZSA9IDM1MiAqIDI4OCAqIDMgLyAyICsgNCwKIAkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQn0sCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCB2Z2FfeXV2X21vZGVbXSA9IHsKIAl7MTYwLCAxMjAsIFY0TDJfUElYX0ZNVF9DSVRfWVlWWVVZLCBWNEwyX0ZJRUxEX05PTkUsCiAJCS5ieXRlc3BlcmxpbmUgPSAxNjAsCi0JCS5zaXplaW1hZ2UgPSAxNjAgKiAxMjAgKiAzIC8gMiwKKwkJLnNpemVpbWFnZSA9IDE2MCAqIDEyMCAqIDMgLyAyICsgNCwKIAkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQn0sCiAJezMyMCwgMjQwLCBWNEwyX1BJWF9GTVRfQ0lUX1lZVllVWSwgVjRMMl9GSUVMRF9OT05FLAogCQkuYnl0ZXNwZXJsaW5lID0gMzIwLAotCQkuc2l6ZWltYWdlID0gMzIwICogMjQwICogMyAvIDIsCisJCS5zaXplaW1hZ2UgPSAzMjAgKiAyNDAgKiAzIC8gMiArIDQsCiAJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0J9LAogCXs2NDAsIDQ4MCwgVjRMMl9QSVhfRk1UX0NJVF9ZWVZZVVksIFY0TDJfRklFTERfTk9ORSwKIAkJLmJ5dGVzcGVybGluZSA9IDY0MCwKLQkJLnNpemVpbWFnZSA9IDY0MCAqIDQ4MCAqIDMgLyAyLAorCQkuc2l6ZWltYWdlID0gNjQwICogNDgwICogMyAvIDIgKyA0LAogCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCfSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IG1vZGVsMF9tb2RlW10gPSB7CiAJezE2MCwgMTIwLCBWNEwyX1BJWF9GTVRfQ0lUX1lZVllVWSwgVjRMMl9GSUVMRF9OT05FLAogCQkuYnl0ZXNwZXJsaW5lID0gMTYwLAotCQkuc2l6ZWltYWdlID0gMTYwICogMTIwICogMyAvIDIsCisJCS5zaXplaW1hZ2UgPSAxNjAgKiAxMjAgKiAzIC8gMiArIDQsCiAJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0J9LAogCXsxNzYsIDE0NCwgVjRMMl9QSVhfRk1UX0NJVF9ZWVZZVVksIFY0TDJfRklFTERfTk9ORSwKIAkJLmJ5dGVzcGVybGluZSA9IDE3NiwKLQkJLnNpemVpbWFnZSA9IDE3NiAqIDE0NCAqIDMgLyAyLAorCQkuc2l6ZWltYWdlID0gMTc2ICogMTQ0ICogMyAvIDIgKyA0LAogCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCfSwKIAl7MzIwLCAyNDAsIFY0TDJfUElYX0ZNVF9DSVRfWVlWWVVZLCBWNEwyX0ZJRUxEX05PTkUsCiAJCS5ieXRlc3BlcmxpbmUgPSAzMjAsCi0JCS5zaXplaW1hZ2UgPSAzMjAgKiAyNDAgKiAzIC8gMiwKKwkJLnNpemVpbWFnZSA9IDMyMCAqIDI0MCAqIDMgLyAyICsgNCwKIAkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQn0sCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBtb2RlbDJfbW9kZVtdID0gewogCXsxNjAsIDEyMCwgVjRMMl9QSVhfRk1UX0NJVF9ZWVZZVVksIFY0TDJfRklFTERfTk9ORSwKIAkJLmJ5dGVzcGVybGluZSA9IDE2MCwKLQkJLnNpemVpbWFnZSA9IDE2MCAqIDEyMCAqIDMgLyAyLAorCQkuc2l6ZWltYWdlID0gMTYwICogMTIwICogMyAvIDIgKyA0LAogCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCfSwKIAl7MTc2LCAxNDQsIFY0TDJfUElYX0ZNVF9DSVRfWVlWWVVZLCBWNEwyX0ZJRUxEX05PTkUsCiAJCS5ieXRlc3BlcmxpbmUgPSAxNzYsCi0JCS5zaXplaW1hZ2UgPSAxNzYgKiAxNDQgKiAzIC8gMiwKKwkJLnNpemVpbWFnZSA9IDE3NiAqIDE0NCAqIDMgLyAyICsgNCwKIAkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQn0sCiAJezMyMCwgMjQwLCBWNEwyX1BJWF9GTVRfU0dSQkc4LCBWNEwyX0ZJRUxEX05PTkUsCiAJCS5ieXRlc3BlcmxpbmUgPSAzMjAsCi0JCS5zaXplaW1hZ2UgPSAzMjAgKiAyNDAsCisJCS5zaXplaW1hZ2UgPSAzMjAgKiAyNDAgKyA0LAogCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCfSwKIAl7MzUyLCAyODgsIFY0TDJfUElYX0ZNVF9TR1JCRzgsIFY0TDJfRklFTERfTk9ORSwKIAkJLmJ5dGVzcGVybGluZSA9IDM1MiwKLQkJLnNpemVpbWFnZSA9IDM1MiAqIDI4OCwKKwkJLnNpemVpbWFnZSA9IDM1MiAqIDI4OCArIDQsCiAJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0J9LAogfTsKIApAQCAtODA0LDcgKzgwNiw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY2l0X3JlYWRfcmVnKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgdTE2IGluZGV4KQorc3RhdGljIGludCBjaXRfcmVhZF9yZWcoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCB1MTYgaW5kZXgsIGludCB2ZXJib3NlKQogewogCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gZ3NwY2FfZGV2LT5kZXY7CiAJX191OCAqYnVmID0gZ3NwY2FfZGV2LT51c2JfYnVmOwpAQCAtODE5LDEwICs4MjEsOCBAQAogCQlyZXR1cm4gcmVzOwogCX0KIAotCVBERUJVRyhEX1BST0JFLAotCSAgICAgICAiUmVnaXN0ZXIgJTA0eCB2YWx1ZTogJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4IiwKLQkgICAgICAgaW5kZXgsCi0JICAgICAgIGJ1ZlswXSwgYnVmWzFdLCBidWZbMl0sIGJ1ZlszXSwgYnVmWzRdLCBidWZbNV0sIGJ1Zls2XSwgYnVmWzddKTsKKwlpZiAodmVyYm9zZSkKKwkJUERFQlVHKERfUFJPQkUsICJSZWdpc3RlciAlMDR4IHZhbHVlOiAlMDJ4IiwgaW5kZXgsIGJ1ZlswXSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTkwNyw3ICs5MDcsNyBAQAogCWNpdF9zZW5kX3hfMDBfMDUoZ3NwY2FfZGV2LCAweDAwODkpOwogCWNpdF9zZW5kX3hfMDAoZ3NwY2FfZGV2LCBma2V5KTsKIAljaXRfc2VuZF8wMF8wNF8wNihnc3BjYV9kZXYpOwotCWNpdF9yZWFkX3JlZyhnc3BjYV9kZXYsIDB4MDEyNik7CisJY2l0X3JlYWRfcmVnKGdzcGNhX2RldiwgMHgwMTI2LCAwKTsKIAljaXRfc2VuZF9GRl8wNF8wMihnc3BjYV9kZXYpOwogfQogCkBAIC0xMDc0LDEyICsxMDc0LDEyIEBACiAKIHN0YXRpYyBpbnQgY2l0X2luaXRfaWJtX25ldGNhbV9wcm8oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewotCWNpdF9yZWFkX3JlZyhnc3BjYV9kZXYsIDB4MTI4KTsKKwljaXRfcmVhZF9yZWcoZ3NwY2FfZGV2LCAweDEyOCwgMSk7CiAJY2l0X3dyaXRlX3JlZyhnc3BjYV9kZXYsIDB4MDAwMywgMHgwMTMzKTsKIAljaXRfd3JpdGVfcmVnKGdzcGNhX2RldiwgMHgwMDAwLCAweDAxMTcpOwogCWNpdF93cml0ZV9yZWcoZ3NwY2FfZGV2LCAweDAwMDgsIDB4MDEyMyk7CiAJY2l0X3dyaXRlX3JlZyhnc3BjYV9kZXYsIDB4MDAwMCwgMHgwMTAwKTsKLQljaXRfcmVhZF9yZWcoZ3NwY2FfZGV2LCAweDAxMTYpOworCWNpdF9yZWFkX3JlZyhnc3BjYV9kZXYsIDB4MDExNiwgMCk7CiAJY2l0X3dyaXRlX3JlZyhnc3BjYV9kZXYsIDB4MDA2MCwgMHgwMTE2KTsKIAljaXRfd3JpdGVfcmVnKGdzcGNhX2RldiwgMHgwMDAyLCAweDAxMTIpOwogCWNpdF93cml0ZV9yZWcoZ3NwY2FfZGV2LCAweDAwMDAsIDB4MDEzMyk7CkBAIC0xMDk4LDcgKzEwOTgsNyBAQAogCWNpdF93cml0ZV9yZWcoZ3NwY2FfZGV2LCAweDAwZmYsIDB4MDEzMCk7CiAJY2l0X3dyaXRlX3JlZyhnc3BjYV9kZXYsIDB4Y2Q0MSwgMHgwMTI0KTsKIAljaXRfd3JpdGVfcmVnKGdzcGNhX2RldiwgMHhmZmZhLCAweDAxMjQpOwotCWNpdF9yZWFkX3JlZyhnc3BjYV9kZXYsIDB4MDEyNik7CisJY2l0X3JlYWRfcmVnKGdzcGNhX2RldiwgMHgwMTI2LCAxKTsKIAogCWNpdF9tb2RlbDNfUGFja2V0MShnc3BjYV9kZXYsIDB4MDAwMCwgMHgwMDAwKTsKIAljaXRfbW9kZWwzX1BhY2tldDEoZ3NwY2FfZGV2LCAweDAwMDAsIDB4MDAwMSk7CkBAIC0xNTU3LDE4ICsxNTU3LDIwIEBACiAJc3dpdGNoIChzZC0+bW9kZWwpIHsKIAljYXNlIENJVF9NT0RFTDA6CiAJY2FzZSBDSVRfTU9ERUwxOgotCWNhc2UgQ0lUX01PREVMMzoKLQljYXNlIENJVF9JQk1fTkVUQ0FNX1BSTzoKIAkJY2l0X3dyaXRlX3JlZyhnc3BjYV9kZXYsIDB4MDAwMSwgMHgwMTE0KTsKIAkJLyogRmFsbCB0aHJvdWdoICovCiAJY2FzZSBDSVRfTU9ERUwyOgogCWNhc2UgQ0lUX01PREVMNDoKIAkJY2l0X3dyaXRlX3JlZyhnc3BjYV9kZXYsIDB4MDBjMCwgMHgwMTBjKTsgLyogR28hICovCiAJCXVzYl9jbGVhcl9oYWx0KGdzcGNhX2Rldi0+ZGV2LCBnc3BjYV9kZXYtPnVyYlswXS0+cGlwZSk7Ci0JCS8qIFRoaXMgaGFwcGVucyByZXBlYXRlZGx5IHdoaWxlIHN0cmVhbWluZyB3aXRoIHRoZSBpYm0gbmV0Y2FtCi0JCSAgIHBybyBhbmQgdGhlIGlibWNhbSBkcml2ZXIgZGlkIGl0IGZvciBtb2RlbDMgYWZ0ZXIgY2hhbmdpbmcKLQkJICAgc2V0dGluZ3MsIGJ1dCBpdCBkb2VzIG5vdCBzZWVtIHRvIGhhdmUgYW55IGVmZmVjdC4gKi8KLQkJLyogY2l0X3dyaXRlX3JlZyhnc3BjYV9kZXYsIDB4MDAwMSwgMHgwMTEzKTsgKi8KKwkJYnJlYWs7CisJY2FzZSBDSVRfTU9ERUwzOgorCWNhc2UgQ0lUX0lCTV9ORVRDQU1fUFJPOgorCQljaXRfd3JpdGVfcmVnKGdzcGNhX2RldiwgMHgwMDAxLCAweDAxMTQpOworCQljaXRfd3JpdGVfcmVnKGdzcGNhX2RldiwgMHgwMGMwLCAweDAxMGMpOyAvKiBHbyEgKi8KKwkJdXNiX2NsZWFyX2hhbHQoZ3NwY2FfZGV2LT5kZXYsIGdzcGNhX2Rldi0+dXJiWzBdLT5waXBlKTsKKwkJLyogQ2xlYXIgYnV0dG9uIGV2ZW50cyBmcm9tIHdoaWxlIHdlIHdlcmUgbm90IHN0cmVhbWluZyAqLworCQljaXRfd3JpdGVfcmVnKGdzcGNhX2RldiwgMHgwMDAxLCAweDAxMTMpOwogCQlicmVhazsKIAl9CiAKQEAgLTE2ODAsMjMgKzE2ODIsMjMgQEAKIAlpZiAoY2xvY2tfZGl2IDwgMCkKIAkJcmV0dXJuIGNsb2NrX2RpdjsKIAotCWNpdF9yZWFkX3JlZyhnc3BjYV9kZXYsIDB4MDEyOCk7Ci0JY2l0X3JlYWRfcmVnKGdzcGNhX2RldiwgMHgwMTAwKTsKKwljaXRfcmVhZF9yZWcoZ3NwY2FfZGV2LCAweDAxMjgsIDEpOworCWNpdF9yZWFkX3JlZyhnc3BjYV9kZXYsIDB4MDEwMCwgMCk7CiAJY2l0X3dyaXRlX3JlZyhnc3BjYV9kZXYsIDB4MDEsIDB4MDEwMCk7CS8qIExFRCBPbiAgKi8KLQljaXRfcmVhZF9yZWcoZ3NwY2FfZGV2LCAweDAxMDApOworCWNpdF9yZWFkX3JlZyhnc3BjYV9kZXYsIDB4MDEwMCwgMCk7CiAJY2l0X3dyaXRlX3JlZyhnc3BjYV9kZXYsIDB4ODEsIDB4MDEwMCk7CS8qIExFRCBPZmYgKi8KLQljaXRfcmVhZF9yZWcoZ3NwY2FfZGV2LCAweDAxMDApOworCWNpdF9yZWFkX3JlZyhnc3BjYV9kZXYsIDB4MDEwMCwgMCk7CiAJY2l0X3dyaXRlX3JlZyhnc3BjYV9kZXYsIDB4MDEsIDB4MDEwMCk7CS8qIExFRCBPbiAgKi8KIAljaXRfd3JpdGVfcmVnKGdzcGNhX2RldiwgMHgwMSwgMHgwMTA4KTsKIAogCWNpdF93cml0ZV9yZWcoZ3NwY2FfZGV2LCAweDAzLCAweDAxMTIpOwotCWNpdF9yZWFkX3JlZyhnc3BjYV9kZXYsIDB4MDExNSk7CisJY2l0X3JlYWRfcmVnKGdzcGNhX2RldiwgMHgwMTE1LCAwKTsKIAljaXRfd3JpdGVfcmVnKGdzcGNhX2RldiwgMHgwNiwgMHgwMTE1KTsKLQljaXRfcmVhZF9yZWcoZ3NwY2FfZGV2LCAweDAxMTYpOworCWNpdF9yZWFkX3JlZyhnc3BjYV9kZXYsIDB4MDExNiwgMCk7CiAJY2l0X3dyaXRlX3JlZyhnc3BjYV9kZXYsIDB4NDQsIDB4MDExNik7Ci0JY2l0X3JlYWRfcmVnKGdzcGNhX2RldiwgMHgwMTE2KTsKKwljaXRfcmVhZF9yZWcoZ3NwY2FfZGV2LCAweDAxMTYsIDApOwogCWNpdF93cml0ZV9yZWcoZ3NwY2FfZGV2LCAweDQwLCAweDAxMTYpOwotCWNpdF9yZWFkX3JlZyhnc3BjYV9kZXYsIDB4MDExNSk7CisJY2l0X3JlYWRfcmVnKGdzcGNhX2RldiwgMHgwMTE1LCAwKTsKIAljaXRfd3JpdGVfcmVnKGdzcGNhX2RldiwgMHgwZSwgMHgwMTE1KTsKIAljaXRfd3JpdGVfcmVnKGdzcGNhX2RldiwgMHgxOSwgMHgwMTJjKTsKIApAQCAtMTg3OCw3ICsxODgwLDcgQEAKIAlpbnQgY2xvY2tfZGl2ID0gMDsKIAogCWNpdF93cml0ZV9yZWcoZ3NwY2FfZGV2LCAweDAwMDAsIDB4MDEwMCk7CS8qIExFRCBvbiAqLwotCWNpdF9yZWFkX3JlZyhnc3BjYV9kZXYsIDB4MDExNik7CisJY2l0X3JlYWRfcmVnKGdzcGNhX2RldiwgMHgwMTE2LCAwKTsKIAljaXRfd3JpdGVfcmVnKGdzcGNhX2RldiwgMHgwMDYwLCAweDAxMTYpOwogCWNpdF93cml0ZV9yZWcoZ3NwY2FfZGV2LCAweDAwMDIsIDB4MDExMik7CiAJY2l0X3dyaXRlX3JlZyhnc3BjYV9kZXYsIDB4MDBiYywgMHgwMTJjKTsKQEAgLTIwNzAsMTAgKzIwNzIsMTAgQEAKIAogCS8qIEhERyBub3QgaW4gaWJtY2FtIGRyaXZlciwgYWRkZWQgdG8gc2VlIGlmIGl0IGhlbHBzIHdpdGgKIAkgICBhdXRvLWRldGVjdGluZyBiZXR3ZWVuIG1vZGVsMyBhbmQgaWJtIG5ldGNhbWVyYSBwcm8gKi8KLQljaXRfcmVhZF9yZWcoZ3NwY2FfZGV2LCAweDEyOCk7CisJY2l0X3JlYWRfcmVnKGdzcGNhX2RldiwgMHgxMjgsIDEpOwogCiAJY2l0X3dyaXRlX3JlZyhnc3BjYV9kZXYsIDB4MDAwMCwgMHgwMTAwKTsKLQljaXRfcmVhZF9yZWcoZ3NwY2FfZGV2LCAweDAxMTYpOworCWNpdF9yZWFkX3JlZyhnc3BjYV9kZXYsIDB4MDExNiwgMCk7CiAJY2l0X3dyaXRlX3JlZyhnc3BjYV9kZXYsIDB4MDA2MCwgMHgwMTE2KTsKIAljaXRfd3JpdGVfcmVnKGdzcGNhX2RldiwgMHgwMDAyLCAweDAxMTIpOwogCWNpdF93cml0ZV9yZWcoZ3NwY2FfZGV2LCAweDAwMDAsIDB4MDEyMyk7CkBAIC0yMDgzLDcgKzIwODUsNyBAQAogCWNpdF93cml0ZV9yZWcoZ3NwY2FfZGV2LCAweDAwNjAsIDB4MDExNik7CiAJY2l0X3dyaXRlX3JlZyhnc3BjYV9kZXYsIDB4MDAwMiwgMHgwMTE1KTsKIAljaXRfd3JpdGVfcmVnKGdzcGNhX2RldiwgMHgwMDAzLCAweDAxMTUpOwotCWNpdF9yZWFkX3JlZyhnc3BjYV9kZXYsIDB4MDExNSk7CisJY2l0X3JlYWRfcmVnKGdzcGNhX2RldiwgMHgwMTE1LCAwKTsKIAljaXRfd3JpdGVfcmVnKGdzcGNhX2RldiwgMHgwMDBiLCAweDAxMTUpOwogCiAJLyogVEVTVE1FIEhERyBub3QgaW4gaWJtY2FtIGRyaXZlciwgYWRkZWQgdG8gc2VlIGlmIGl0IGhlbHBzIHdpdGgKQEAgLTIwOTYsNyArMjA5OCw3IEBACiAJCWNpdF93cml0ZV9yZWcoZ3NwY2FfZGV2LCAweDAwZmYsIDB4MDEzMCk7CiAJCWNpdF93cml0ZV9yZWcoZ3NwY2FfZGV2LCAweGNkNDEsIDB4MDEyNCk7CiAJCWNpdF93cml0ZV9yZWcoZ3NwY2FfZGV2LCAweGZmZmEsIDB4MDEyNCk7Ci0JCWNpdF9yZWFkX3JlZyhnc3BjYV9kZXYsIDB4MDEyNik7CisJCWNpdF9yZWFkX3JlZyhnc3BjYV9kZXYsIDB4MDEyNiwgMSk7CiAJfQogCiAJY2l0X21vZGVsM19QYWNrZXQxKGdzcGNhX2RldiwgMHgwMDBhLCAweDAwNDApOwpAQCAtMjI5Myw3ICsyMjk1LDcgQEAKIAlpZiAocmNhX2lucHV0KSB7CiAJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJjYV9pbml0ZGF0YSk7IGkrKykgewogCQkJaWYgKHJjYV9pbml0ZGF0YVtpXVswXSkKLQkJCQljaXRfcmVhZF9yZWcoZ3NwY2FfZGV2LCByY2FfaW5pdGRhdGFbaV1bMl0pOworCQkJCWNpdF9yZWFkX3JlZyhnc3BjYV9kZXYsIHJjYV9pbml0ZGF0YVtpXVsyXSwgMCk7CiAJCQllbHNlCiAJCQkJY2l0X3dyaXRlX3JlZyhnc3BjYV9kZXYsIHJjYV9pbml0ZGF0YVtpXVsxXSwKIAkJCQkJICAgICAgcmNhX2luaXRkYXRhW2ldWzJdKTsKQEAgLTI3MTIsNyArMjcxNCw3IEBACiAJaWYgKHJjYV9pbnB1dCkgewogCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyY2FfaW5pdGRhdGEpOyBpKyspIHsKIAkJCWlmIChyY2FfaW5pdGRhdGFbaV1bMF0pCi0JCQkJY2l0X3JlYWRfcmVnKGdzcGNhX2RldiwgcmNhX2luaXRkYXRhW2ldWzJdKTsKKwkJCQljaXRfcmVhZF9yZWcoZ3NwY2FfZGV2LCByY2FfaW5pdGRhdGFbaV1bMl0sIDApOwogCQkJZWxzZQogCQkJCWNpdF93cml0ZV9yZWcoZ3NwY2FfZGV2LCByY2FfaW5pdGRhdGFbaV1bMV0sCiAJCQkJCSAgICAgIHJjYV9pbml0ZGF0YVtpXVsyXSk7CkBAIC0yNzY5LDE2ICsyNzcxLDU1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgc2RfaXNvY19pbml0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICphbHQ7CisJaW50IG1heF9wYWNrZXRfc2l6ZTsKKworCXN3aXRjaCAoZ3NwY2FfZGV2LT53aWR0aCkgeworCWNhc2UgMTYwOgorCQltYXhfcGFja2V0X3NpemUgPSA0NTA7CisJCWJyZWFrOworCWNhc2UgMTc2OgorCQltYXhfcGFja2V0X3NpemUgPSA2MDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCW1heF9wYWNrZXRfc2l6ZSA9IDEwMjI7CisJCWJyZWFrOworCX0KKworCS8qIFN0YXJ0IGlzb2MgYmFuZHdpZHRoICJuZWdvdGlhdGlvbiIgYXQgbWF4IGlzb2MgYmFuZHdpZHRoICovCisJYWx0ID0gJmdzcGNhX2Rldi0+ZGV2LT5jb25maWctPmludGZfY2FjaGVbMF0tPmFsdHNldHRpbmdbMV07CisJYWx0LT5lbmRwb2ludFswXS5kZXNjLndNYXhQYWNrZXRTaXplID0gY3B1X3RvX2xlMTYobWF4X3BhY2tldF9zaXplKTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHNkX2lzb2NfbmVnbyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7Ci0JaW50IHJldCwgcGFja2V0X3NpemU7CisJaW50IHJldCwgcGFja2V0X3NpemUsIG1pbl9wYWNrZXRfc2l6ZTsKIAlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICphbHQ7CiAKKwlzd2l0Y2ggKGdzcGNhX2Rldi0+d2lkdGgpIHsKKwljYXNlIDE2MDoKKwkJbWluX3BhY2tldF9zaXplID0gMjAwOworCQlicmVhazsKKwljYXNlIDE3NjoKKwkJbWluX3BhY2tldF9zaXplID0gMjY2OworCQlicmVhazsKKwlkZWZhdWx0OgorCQltaW5fcGFja2V0X3NpemUgPSA0MDA7CisJCWJyZWFrOworCX0KKwogCWFsdCA9ICZnc3BjYV9kZXYtPmRldi0+Y29uZmlnLT5pbnRmX2NhY2hlWzBdLT5hbHRzZXR0aW5nWzFdOwogCXBhY2tldF9zaXplID0gbGUxNl90b19jcHUoYWx0LT5lbmRwb2ludFswXS5kZXNjLndNYXhQYWNrZXRTaXplKTsKLQlwYWNrZXRfc2l6ZSAtPSAxMDA7Ci0JaWYgKHBhY2tldF9zaXplIDwgMzAwKQorCWlmIChwYWNrZXRfc2l6ZSA8PSBtaW5fcGFja2V0X3NpemUpCiAJCXJldHVybiAtRUlPOworCisJcGFja2V0X3NpemUgLT0gMTAwOworCWlmIChwYWNrZXRfc2l6ZSA8IG1pbl9wYWNrZXRfc2l6ZSkKKwkJcGFja2V0X3NpemUgPSBtaW5fcGFja2V0X3NpemU7CiAJYWx0LT5lbmRwb2ludFswXS5kZXNjLndNYXhQYWNrZXRTaXplID0gY3B1X3RvX2xlMTYocGFja2V0X3NpemUpOwogCiAJcmV0ID0gdXNiX3NldF9pbnRlcmZhY2UoZ3NwY2FfZGV2LT5kZXYsIGdzcGNhX2Rldi0+aWZhY2UsIDEpOwpAQCAtMjc5NiwxNSArMjgzNywxMiBAQAogc3RhdGljIHZvaWQgc2Rfc3RvcDAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICphbHQ7CiAKIAkvKiBXZSBjYW5ub3QgdXNlIGdzcGNhX2Rldi0+cHJlc2VudCBoZXJlIGFzIHRoYXQgaXMgbm90IHNldCB3aGVuCiAJICAgc2RfaW5pdCBnZXRzIGNhbGxlZCBhbmQgd2UgZ2V0IGNhbGxlZCBmcm9tIHNkX2luaXQgKi8KIAlpZiAoIWdzcGNhX2Rldi0+ZGV2KQogCQlyZXR1cm47CiAKLQlhbHQgPSAmZ3NwY2FfZGV2LT5kZXYtPmNvbmZpZy0+aW50Zl9jYWNoZVswXS0+YWx0c2V0dGluZ1sxXTsKLQogCXN3aXRjaCAoc2QtPm1vZGVsKSB7CiAJY2FzZSBDSVRfTU9ERUwwOgogCQkvKiBIREcgd2luZG93cyBkb2VzIHRoaXMsIGJ1dCBpdCBjYXVzZXMgdGhlIGNhbXMgYXV0b2dhaW4gdG8KQEAgLTI4MTUsNyArMjg1Myw3IEBACiAJCWJyZWFrOwogCWNhc2UgQ0lUX01PREVMMToKIAkJY2l0X3NlbmRfRkZfMDRfMDIoZ3NwY2FfZGV2KTsKLQkJY2l0X3JlYWRfcmVnKGdzcGNhX2RldiwgMHgwMTAwKTsKKwkJY2l0X3JlYWRfcmVnKGdzcGNhX2RldiwgMHgwMTAwLCAwKTsKIAkJY2l0X3dyaXRlX3JlZyhnc3BjYV9kZXYsIDB4ODEsIDB4MDEwMCk7CS8qIExFRCBPZmYgKi8KIAkJYnJlYWs7CiAJY2FzZSBDSVRfTU9ERUwyOgpAQCAtMjgzNCw5ICsyODcyLDkgQEAKIAljYXNlIENJVF9NT0RFTDM6CiAJCWNpdF93cml0ZV9yZWcoZ3NwY2FfZGV2LCAweDAwMDYsIDB4MDEyYyk7CiAJCWNpdF9tb2RlbDNfUGFja2V0MShnc3BjYV9kZXYsIDB4MDA0NiwgMHgwMDAwKTsKLQkJY2l0X3JlYWRfcmVnKGdzcGNhX2RldiwgMHgwMTE2KTsKKwkJY2l0X3JlYWRfcmVnKGdzcGNhX2RldiwgMHgwMTE2LCAwKTsKIAkJY2l0X3dyaXRlX3JlZyhnc3BjYV9kZXYsIDB4MDA2NCwgMHgwMTE2KTsKLQkJY2l0X3JlYWRfcmVnKGdzcGNhX2RldiwgMHgwMTE1KTsKKwkJY2l0X3JlYWRfcmVnKGdzcGNhX2RldiwgMHgwMTE1LCAwKTsKIAkJY2l0X3dyaXRlX3JlZyhnc3BjYV9kZXYsIDB4MDAwMywgMHgwMTE1KTsKIAkJY2l0X3dyaXRlX3JlZyhnc3BjYV9kZXYsIDB4MDAwOCwgMHgwMTIzKTsKIAkJY2l0X3dyaXRlX3JlZyhnc3BjYV9kZXYsIDB4MDAwMCwgMHgwMTE3KTsKQEAgLTI4NTksMTIgKzI4OTcsMTcgQEAKIAkJICAgcmVzdGFydGluZyB0aGUgc3RyZWFtIGFmdGVyIHRoaXMgKi8KIAkJLyogY2l0X3dyaXRlX3JlZyhnc3BjYV9kZXYsIDB4MDAwMCwgMHgwMTEyKTsgKi8KIAkJY2l0X3dyaXRlX3JlZyhnc3BjYV9kZXYsIDB4MDBjMCwgMHgwMTAwKTsKLQotCQkvKiBTdGFydCBpc29jIGJhbmR3aWR0aCAibmVnb3RpYXRpb24iIGF0IG1heCBpc29jIGJhbmR3aXRoCi0JCSAgIG5leHQgc3RyZWFtIHN0YXJ0ICovCi0JCWFsdC0+ZW5kcG9pbnRbMF0uZGVzYy53TWF4UGFja2V0U2l6ZSA9IGNwdV90b19sZTE2KDEwMjIpOwogCQlicmVhazsKIAl9CisKKyNpZiBkZWZpbmVkKENPTkZJR19JTlBVVCkgfHwgZGVmaW5lZChDT05GSUdfSU5QVVRfTU9EVUxFKQorCS8qIElmIHRoZSBsYXN0IGJ1dHRvbiBzdGF0ZSBpcyBwcmVzc2VkLCByZWxlYXNlIGl0IG5vdyEgKi8KKwlpZiAoc2QtPmJ1dHRvbl9zdGF0ZSkgeworCQlpbnB1dF9yZXBvcnRfa2V5KGdzcGNhX2Rldi0+aW5wdXRfZGV2LCBLRVlfQ0FNRVJBLCAwKTsKKwkJaW5wdXRfc3luYyhnc3BjYV9kZXYtPmlucHV0X2Rldik7CisJCXNkLT5idXR0b25fc3RhdGUgPSAwOworCX0KKyNlbmRpZgogfQogCiBzdGF0aWMgdTggKmNpdF9maW5kX3NvZihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHU4ICpkYXRhLCBpbnQgbGVuKQpAQCAtMzE1OCw2ICszMjAxLDM4IEBACiAJcmV0dXJuIDA7CiB9CiAKKyNpZiBkZWZpbmVkKENPTkZJR19JTlBVVCkgfHwgZGVmaW5lZChDT05GSUdfSU5QVVRfTU9EVUxFKQorc3RhdGljIHZvaWQgY2l0X2NoZWNrX2J1dHRvbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJaW50IG5ld19idXR0b25fc3RhdGU7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKilnc3BjYV9kZXY7CisKKwlzd2l0Y2ggKHNkLT5tb2RlbCkgeworCWNhc2UgQ0lUX01PREVMMzoKKwljYXNlIENJVF9JQk1fTkVUQ0FNX1BSTzoKKwkJYnJlYWs7CisJZGVmYXVsdDogLyogVEVTVCBNRSB1bmtub3duIGlmIHRoaXMgd29ya3Mgb24gb3RoZXIgbW9kZWxzIHRvbyAqLworCQlyZXR1cm47CisJfQorCisJLyogUmVhZCB0aGUgYnV0dG9uIHN0YXRlICovCisJY2l0X3JlYWRfcmVnKGdzcGNhX2RldiwgMHgwMTEzLCAwKTsKKwluZXdfYnV0dG9uX3N0YXRlID0gIWdzcGNhX2Rldi0+dXNiX2J1ZlswXTsKKworCS8qIFRlbGwgdGhlIGNhbSB3ZSd2ZSBzZWVuIHRoZSBidXR0b24gcHJlc3MsIG5vdGljZSB0aGF0IHRoaXMKKwkgICBpcyBhIG5vcCAoaW93IHRoZSBjYW0ga2VlcHMgcmVwb3J0aW5nIHByZXNzZWQpIHVudGlsIHRoZQorCSAgIGJ1dHRvbiBpcyBhY3R1YWxseSByZWxlYXNlZC4gKi8KKwlpZiAobmV3X2J1dHRvbl9zdGF0ZSkKKwkJY2l0X3dyaXRlX3JlZyhnc3BjYV9kZXYsIDB4MDEsIDB4MDExMyk7CisKKwlpZiAoc2QtPmJ1dHRvbl9zdGF0ZSAhPSBuZXdfYnV0dG9uX3N0YXRlKSB7CisJCWlucHV0X3JlcG9ydF9rZXkoZ3NwY2FfZGV2LT5pbnB1dF9kZXYsIEtFWV9DQU1FUkEsCisJCQkJIG5ld19idXR0b25fc3RhdGUpOworCQlpbnB1dF9zeW5jKGdzcGNhX2Rldi0+aW5wdXRfZGV2KTsKKwkJc2QtPmJ1dHRvbl9zdGF0ZSA9IG5ld19idXR0b25fc3RhdGU7CisJfQorfQorI2VuZGlmCiAKIC8qIHN1Yi1kcml2ZXIgZGVzY3JpcHRpb24gKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0gewpAQCAtMzE3MCw2ICszMjQ1LDEwIEBACiAJLnN0b3BOID0gc2Rfc3RvcE4sCiAJLnN0b3AwID0gc2Rfc3RvcDAsCiAJLnBrdF9zY2FuID0gc2RfcGt0X3NjYW4sCisjaWYgZGVmaW5lZChDT05GSUdfSU5QVVQpIHx8IGRlZmluZWQoQ09ORklHX0lOUFVUX01PRFVMRSkKKwkuZHFfY2FsbGJhY2sgPSBjaXRfY2hlY2tfYnV0dG9uLAorCS5vdGhlcl9pbnB1dCA9IDEsCisjZW5kaWYKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjX2lzb2NfbmVnbyA9IHsKQEAgLTMxNzksMTAgKzMyNTgsMTUgQEAKIAkuY29uZmlnID0gc2RfY29uZmlnLAogCS5pbml0ID0gc2RfaW5pdCwKIAkuc3RhcnQgPSBzZF9zdGFydCwKKwkuaXNvY19pbml0ID0gc2RfaXNvY19pbml0LAogCS5pc29jX25lZ28gPSBzZF9pc29jX25lZ28sCiAJLnN0b3BOID0gc2Rfc3RvcE4sCiAJLnN0b3AwID0gc2Rfc3RvcDAsCiAJLnBrdF9zY2FuID0gc2RfcGt0X3NjYW4sCisjaWYgZGVmaW5lZChDT05GSUdfSU5QVVQpIHx8IGRlZmluZWQoQ09ORklHX0lOUFVUX01PRFVMRSkKKwkuZHFfY2FsbGJhY2sgPSBjaXRfY2hlY2tfYnV0dG9uLAorCS5vdGhlcl9pbnB1dCA9IDEsCisjZW5kaWYKIH07CiAKIC8qIC0tIG1vZHVsZSBpbml0aWFsaXNhdGlvbiAtLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS96YzN4eC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS96YzN4eC5jCmluZGV4IGM3ZTE5NzAuLjE0Yjg1ZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvemMzeHguYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3pjM3h4LmMKQEAgLTM1LDE2ICszNSwyMyBAQAogI2RlZmluZSBRVUFOVF9WQUwgMQkJLyogcXVhbnRpemF0aW9uIHRhYmxlICovCiAjaW5jbHVkZSAiemMzeHgtcmVnLmgiCiAKKy8qIGNvbnRyb2xzICovCitlbnVtIGVfY3RybCB7CisJQlJJR0hUTkVTUywKKwlDT05UUkFTVCwKKwlHQU1NQSwKKwlBVVRPR0FJTiwKKwlMSUdIVEZSRVEsCisJU0hBUlBORVNTLAorCU5DVFJMUwkJLyogbnVtYmVyIG9mIGNvbnRyb2xzICovCit9OworCiAvKiBzcGVjaWZpYyB3ZWJjYW0gZGVzY3JpcHRvciAqLwogc3RydWN0IHNkIHsKIAlzdHJ1Y3QgZ3NwY2FfZGV2IGdzcGNhX2RldjsJLyogISEgbXVzdCBiZSB0aGUgZmlyc3QgaXRlbSAqLwogCi0JdTggYnJpZ2h0bmVzczsKLQl1OCBjb250cmFzdDsKLQl1OCBnYW1tYTsKLQl1OCBhdXRvZ2FpbjsKLQl1OCBsaWdodGZyZXE7Ci0JdTggc2hhcnBuZXNzOworCXN0cnVjdCBnc3BjYV9jdHJsIGN0cmxzW05DVFJMU107CisKIAl1OCBxdWFsaXR5OwkJCS8qIGltYWdlIHF1YWxpdHkgKi8KICNkZWZpbmUgUVVBTElUWV9NSU4gNTAKICNkZWZpbmUgUVVBTElUWV9NQVggODAKQEAgLTY0LDYgKzcxLDcgQEAKIAlTRU5TT1JfQURDTTI3MDAsCiAJU0VOU09SX0NTMjEwMiwKIAlTRU5TT1JfQ1MyMTAySywKKwlTRU5TT1JfR0MwMzAzLAogCVNFTlNPUl9HQzAzMDUsCiAJU0VOU09SX0hEQ1MyMDIwYiwKIAlTRU5TT1JfSFY3MTMxQiwKQEAgLTc5LDI2ICs4NywxNyBAQAogCVNFTlNPUl9QQjAzMzAsCiAJU0VOU09SX1BPMjAzMCwKIAlTRU5TT1JfVEFTNTEzMEMsCi0JU0VOU09SX1RBUzUxMzBDX1ZGMDI1MCwKIAlTRU5TT1JfTUFYCiB9OwogCiAvKiBWNEwyIGNvbnRyb2xzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyICovCi1zdGF0aWMgaW50IHNkX3NldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwotc3RhdGljIGludCBzZF9nZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7Ci1zdGF0aWMgaW50IHNkX3NldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKLXN0YXRpYyBpbnQgc2RfZ2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKLXN0YXRpYyBpbnQgc2Rfc2V0YXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwotc3RhdGljIGludCBzZF9nZXRhdXRvZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOwotc3RhdGljIGludCBzZF9zZXRnYW1tYShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7Ci1zdGF0aWMgaW50IHNkX2dldGdhbW1hKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7Ci1zdGF0aWMgaW50IHNkX3NldGZyZXEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwotc3RhdGljIGludCBzZF9nZXRmcmVxKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7Ci1zdGF0aWMgaW50IHNkX3NldHNoYXJwbmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7Ci1zdGF0aWMgaW50IHNkX2dldHNoYXJwbmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworc3RhdGljIHZvaWQgc2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KTsKK3N0YXRpYyB2b2lkIHNldGF1dG9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2Rldik7CitzdGF0aWMgdm9pZCBzZXRsaWdodGZyZXEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KTsKK3N0YXRpYyB2b2lkIHNldHNoYXJwbmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpOwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKLQl7CitzdGF0aWMgY29uc3Qgc3RydWN0IGN0cmwgc2RfY3RybHNbTkNUUkxTXSA9IHsKK1tCUklHSFRORVNTXSA9IHsKIAkgICAgewogCQkuaWQgICAgICA9IFY0TDJfQ0lEX0JSSUdIVE5FU1MsCiAJCS50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKQEAgLTEwNiwxMyArMTA1LDExIEBACiAJCS5taW5pbXVtID0gMCwKIAkJLm1heGltdW0gPSAyNTUsCiAJCS5zdGVwICAgID0gMSwKLSNkZWZpbmUgQlJJR0hUTkVTU19ERUYgMTI4Ci0JCS5kZWZhdWx0X3ZhbHVlID0gQlJJR0hUTkVTU19ERUYsCisJCS5kZWZhdWx0X3ZhbHVlID0gMTI4LAogCSAgICB9LAotCSAgICAuc2V0ID0gc2Rfc2V0YnJpZ2h0bmVzcywKLQkgICAgLmdldCA9IHNkX2dldGJyaWdodG5lc3MsCisJICAgIC5zZXRfY29udHJvbCA9IHNldGNvbnRyYXN0CiAJfSwKLQl7CitbQ09OVFJBU1RdID0gewogCSAgICB7CiAJCS5pZCAgICAgID0gVjRMMl9DSURfQ09OVFJBU1QsCiAJCS50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKQEAgLTEyMCwxMyArMTE3LDExIEBACiAJCS5taW5pbXVtID0gMCwKIAkJLm1heGltdW0gPSAyNTUsCiAJCS5zdGVwICAgID0gMSwKLSNkZWZpbmUgQ09OVFJBU1RfREVGIDEyOAotCQkuZGVmYXVsdF92YWx1ZSA9IENPTlRSQVNUX0RFRiwKKwkJLmRlZmF1bHRfdmFsdWUgPSAxMjgsCiAJICAgIH0sCi0JICAgIC5zZXQgPSBzZF9zZXRjb250cmFzdCwKLQkgICAgLmdldCA9IHNkX2dldGNvbnRyYXN0LAorCSAgICAuc2V0X2NvbnRyb2wgPSBzZXRjb250cmFzdAogCX0sCi0JeworW0dBTU1BXSA9IHsKIAkgICAgewogCQkuaWQgICAgICA9IFY0TDJfQ0lEX0dBTU1BLAogCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCkBAIC0xMzYsMTAgKzEzMSw5IEBACiAJCS5zdGVwICAgID0gMSwKIAkJLmRlZmF1bHRfdmFsdWUgPSA0LAogCSAgICB9LAotCSAgICAuc2V0ID0gc2Rfc2V0Z2FtbWEsCi0JICAgIC5nZXQgPSBzZF9nZXRnYW1tYSwKKwkgICAgLnNldF9jb250cm9sID0gc2V0Y29udHJhc3QKIAl9LAotCXsKK1tBVVRPR0FJTl0gPSB7CiAJICAgIHsKIAkJLmlkICAgICAgPSBWNEwyX0NJRF9BVVRPR0FJTiwKIAkJLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLApAQCAtMTQ3LDE0ICsxNDEsMTEgQEAKIAkJLm1pbmltdW0gPSAwLAogCQkubWF4aW11bSA9IDEsCiAJCS5zdGVwICAgID0gMSwKLSNkZWZpbmUgQVVUT0dBSU5fREVGIDEKLQkJLmRlZmF1bHRfdmFsdWUgPSBBVVRPR0FJTl9ERUYsCisJCS5kZWZhdWx0X3ZhbHVlID0gMSwKIAkgICAgfSwKLQkgICAgLnNldCA9IHNkX3NldGF1dG9nYWluLAotCSAgICAuZ2V0ID0gc2RfZ2V0YXV0b2dhaW4sCisJICAgIC5zZXRfY29udHJvbCA9IHNldGF1dG9nYWluCiAJfSwKLSNkZWZpbmUgTElHSFRGUkVRX0lEWCA0Ci0JeworW0xJR0hURlJFUV0gPSB7CiAJICAgIHsKIAkJLmlkCSA9IFY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZLAogCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX01FTlUsCkBAIC0xNjIsMTMgKzE1MywxMSBAQAogCQkubWluaW11bSA9IDAsCiAJCS5tYXhpbXVtID0gMiwJLyogMDogMCwgMTogNTBIeiwgMjo2MEh6ICovCiAJCS5zdGVwICAgID0gMSwKLSNkZWZpbmUgRlJFUV9ERUYgMAotCQkuZGVmYXVsdF92YWx1ZSA9IEZSRVFfREVGLAorCQkuZGVmYXVsdF92YWx1ZSA9IDAsCiAJICAgIH0sCi0JICAgIC5zZXQgPSBzZF9zZXRmcmVxLAotCSAgICAuZ2V0ID0gc2RfZ2V0ZnJlcSwKKwkgICAgLnNldF9jb250cm9sID0gc2V0bGlnaHRmcmVxCiAJfSwKLQl7CitbU0hBUlBORVNTXSA9IHsKIAkgICAgewogCQkuaWQJID0gVjRMMl9DSURfU0hBUlBORVNTLAogCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCkBAIC0xNzYsMTEgKzE2NSw5IEBACiAJCS5taW5pbXVtID0gMCwKIAkJLm1heGltdW0gPSAzLAogCQkuc3RlcCAgICA9IDEsCi0jZGVmaW5lIFNIQVJQTkVTU19ERUYgMgotCQkuZGVmYXVsdF92YWx1ZSA9IFNIQVJQTkVTU19ERUYsCisJCS5kZWZhdWx0X3ZhbHVlID0gMiwKIAkgICAgfSwKLQkgICAgLnNldCA9IHNkX3NldHNoYXJwbmVzcywKLQkgICAgLmdldCA9IHNkX2dldHNoYXJwbmVzcywKKwkgICAgLnNldF9jb250cm9sID0gc2V0c2hhcnBuZXNzCiAJfSwKIH07CiAKQEAgLTQ0OTksNyArNDQ4Niw3IEBACiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sCiAJezB4YTAsIDB4MDMsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HfSwKIAl7MHhhMCwgMHgwYSwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwKLQl7MHhhMCwgMHgwNCwgWkMzWFhfUjAwMl9DTE9DS1NFTEVDVH0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LAogCXsweGEwLCAweDAyLCBaQzNYWF9SMDAzX0ZSQU1FV0lEVEhISUdIfSwKIAl7MHhhMCwgMHg4MCwgWkMzWFhfUjAwNF9GUkFNRVdJRFRITE9XfSwKIAl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwNV9GUkFNRUhFSUdIVEhJR0h9LApAQCAtNTQwNiw3ICs1MzkzLDcgQEAKIAl7fQogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHRhczUxMzBjX3ZmMDI1MF9Jbml0aWFsU2NhbGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBnYzAzMDNfSW5pdGlhbFNjYWxlW10gPSB7CiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sCQkvKiAwMCwwMCwwMSxjYywgKi8KIAl7MHhhMCwgMHgwMiwgWkMzWFhfUjAwOF9DTE9DS1NFVFRJTkd9LAkJLyogMDAsMDgsMDIsY2MsICovCiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCS8qIDAwLDEwLDAxLGNjLCAqLwpAQCAtNTQ3Myw3ICs1NDYwLDcgQEAKIAl7fQogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHRhczUxMzBjX3ZmMDI1MF9Jbml0aWFsW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gZ2MwMzAzX0luaXRpYWxbXSA9IHsKIAl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMF9TWVNURU1DT05UUk9MfSwJCS8qIDAwLDAwLDAxLGNjLCAqLwogCXsweGEwLCAweDAyLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCQkvKiAwMCwwOCwwMixjYywgKi8KIAl7MHhhMCwgMHgwMSwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwJLyogMDAsMTAsMDEsY2MsICovCkBAIC01NTM4LDcgKzU1MjUsNyBAQAogCXsweGEwLCAweDY1LCBaQzNYWF9SMTE4X0JHQUlOfSwJCS8qIDAxLDE4LDY1LGNjICovCiAJe30KIH07Ci1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gdGFzNTEzMGNfdmYwMjUwXzUwSFpTY2FsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGdjMDMwM181MEhaU2NhbGVbXSA9IHsKIAl7MHhhYSwgMHg4MiwgMHgwMDAwfSwJCS8qIDAwLDgyLDAwLGFhICovCiAJezB4YWEsIDB4ODMsIDB4MDAwMX0sCQkvKiAwMCw4MywwMSxhYSAqLwogCXsweGFhLCAweDg0LCAweDAwYWF9LAkJLyogMDAsODQsYWEsYWEgKi8KQEAgLTU1NjIsNyArNTU0OSw3IEBACiAJe30KIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiB0YXM1MTMwY192ZjAyNTBfNTBIWltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGdjMDMwM181MEhaW10gPSB7CiAJezB4YWEsIDB4ODIsIDB4MDAwMH0sCQkvKiAwMCw4MiwwMCxhYSAqLwogCXsweGFhLCAweDgzLCAweDAwMDN9LAkJLyogMDAsODMsMDMsYWEgKi8KIAl7MHhhYSwgMHg4NCwgMHgwMDU0fSwJCS8qIDAwLDg0LDU0LGFhICovCkBAIC01NTg2LDcgKzU1NzMsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gdGFzNTEzMGNfdmYwMjUwXzYwSFpTY2FsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGdjMDMwM182MEhaU2NhbGVbXSA9IHsKIAl7MHhhYSwgMHg4MiwgMHgwMDAwfSwJCS8qIDAwLDgyLDAwLGFhICovCiAJezB4YWEsIDB4ODMsIDB4MDAwMX0sCQkvKiAwMCw4MywwMSxhYSAqLwogCXsweGFhLCAweDg0LCAweDAwNjJ9LAkJLyogMDAsODQsNjIsYWEgKi8KQEAgLTU2MTAsNyArNTU5Nyw3IEBACiAJe30KIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiB0YXM1MTMwY192ZjAyNTBfNjBIWltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGdjMDMwM182MEhaW10gPSB7CiAJezB4YWEsIDB4ODIsIDB4MDAwMH0sCQkvKiAwMCw4MiwwMCxhYSAqLwogCXsweGFhLCAweDgzLCAweDAwMDJ9LAkJLyogMDAsODMsMDIsYWEgKi8KIAl7MHhhYSwgMHg4NCwgMHgwMGM0fSwJCS8qIDAwLDg0LGM0LGFhICovCkBAIC01NjM0LDcgKzU2MjEsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gdGFzNTEzMGNfdmYwMjUwX05vRmxpa2VyU2NhbGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBnYzAzMDNfTm9GbGlrZXJTY2FsZVtdID0gewogCXsweGEwLCAweDBjLCBaQzNYWF9SMTAwX09QRVJBVElPTk1PREV9LAkJLyogMDEsMDAsMGMsY2MsICovCiAJezB4YWEsIDB4ODIsIDB4MDAwMH0sCQkvKiAwMCw4MiwwMCxhYSAqLwogCXsweGFhLCAweDgzLCAweDAwMDB9LAkJLyogMDAsODMsMDAsYWEgKi8KQEAgLTU2NTYsNyArNTY0Myw3IEBACiAJe30KIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiB0YXM1MTMwY192ZjAyNTBfTm9GbGlrZXJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBnYzAzMDNfTm9GbGlrZXJbXSA9IHsKIAl7MHhhMCwgMHgwYywgWkMzWFhfUjEwMF9PUEVSQVRJT05NT0RFfSwJCS8qIDAxLDAwLDBjLGNjLCAqLwogCXsweGFhLCAweDgyLCAweDAwMDB9LAkJLyogMDAsODIsMDAsYWEgKi8KIAl7MHhhYSwgMHg4MywgMHgwMDAwfSwJCS8qIDAwLDgzLDAwLGFhICovCkBAIC01ODMzLDEyICs1ODIwLDEzIEBACiAJCXsweDYwLCAweGYwLCAweGYwLCAweGYwLCAweDYwLCAweGYwLCAweGYwLCAweGYwLCAweDYwfTsKIAlzdGF0aWMgY29uc3QgdTggdGFzNTEzMGNfbWF0cml4WzldID0KIAkJezB4NjgsIDB4ZWMsIDB4ZWMsIDB4ZWMsIDB4NjgsIDB4ZWMsIDB4ZWMsIDB4ZWMsIDB4Njh9OwotCXN0YXRpYyBjb25zdCB1OCB2ZjAyNTBfbWF0cml4WzldID0KKwlzdGF0aWMgY29uc3QgdTggZ2MwMzAzX21hdHJpeFs5XSA9CiAJCXsweDdiLCAweGVhLCAweGVhLCAweGVhLCAweDdiLCAweGVhLCAweGVhLCAweGVhLCAweDdifTsKIAlzdGF0aWMgY29uc3QgdTggKm1hdHJpeF90YltTRU5TT1JfTUFYXSA9IHsKIAkJW1NFTlNPUl9BRENNMjcwMF0gPQlhZGNtMjcwMF9tYXRyaXgsCiAJCVtTRU5TT1JfQ1MyMTAyXSA9CW92NzYyMF9tYXRyaXgsCiAJCVtTRU5TT1JfQ1MyMTAyS10gPQlOVUxMLAorCQlbU0VOU09SX0dDMDMwM10gPQlnYzAzMDNfbWF0cml4LAogCQlbU0VOU09SX0dDMDMwNV0gPQlnYzAzMDVfbWF0cml4LAogCQlbU0VOU09SX0hEQ1MyMDIwYl0gPQlOVUxMLAogCQlbU0VOU09SX0hWNzEzMUJdID0JTlVMTCwKQEAgLTU4NTQsNyArNTg0Miw2IEBACiAJCVtTRU5TT1JfUEIwMzMwXSA9CWdjMDMwNV9tYXRyaXgsCiAJCVtTRU5TT1JfUE8yMDMwXSA9CXBvMjAzMF9tYXRyaXgsCiAJCVtTRU5TT1JfVEFTNTEzMENdID0JdGFzNTEzMGNfbWF0cml4LAotCQlbU0VOU09SX1RBUzUxMzBDX1ZGMDI1MF0gPSB2ZjAyNTBfbWF0cml4LAogCX07CiAKIAltYXRyaXggPSBtYXRyaXhfdGJbc2QtPnNlbnNvcl07CkBAIC01ODc1LDcgKzU4NjIsNyBAQAogCQl7MHgxMCwgMHgxZX0KIAl9OwogCi0Jc2hhcnBuZXNzID0gc2QtPnNoYXJwbmVzczsKKwlzaGFycG5lc3MgPSBzZC0+Y3RybHNbU0hBUlBORVNTXS52YWw7CiAJcmVnX3coZ3NwY2FfZGV2LCBzaGFycG5lc3NfdGJbc2hhcnBuZXNzXVswXSwgMHgwMWM2KTsKIAlyZWdfcihnc3BjYV9kZXYsIDB4MDFjOCk7CiAJcmVnX3IoZ3NwY2FfZGV2LCAweDAxYzkpOwpAQCAtNTkxMCwxMCArNTg5NywxMCBAQAogCQkgMHhlMCwgMHhlYiwgMHhmNCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZn0sCiAJfTsKIAotCVRnYW1tYSA9IGdhbW1hX3RiW3NkLT5nYW1tYSAtIDFdOworCVRnYW1tYSA9IGdhbW1hX3RiW3NkLT5jdHJsc1tHQU1NQV0udmFsIC0gMV07CiAKLQljb250cmFzdCA9ICgoaW50KSBzZC0+Y29udHJhc3QgLSAxMjgpOwkJLyogLTEyOCAvIDEyNyAqLwotCWJyaWdodG5lc3MgPSAoKGludCkgc2QtPmJyaWdodG5lc3MgLSAxMjgpOwkvKiAtMTI4IC8gOTIgKi8KKwljb250cmFzdCA9ICgoaW50KSBzZC0+Y3RybHNbQ09OVFJBU1RdLnZhbCAtIDEyOCk7IC8qIC0xMjggLyAxMjcgKi8KKwlicmlnaHRuZXNzID0gKChpbnQpIHNkLT5jdHJsc1tCUklHSFRORVNTXS52YWwgLSAxMjgpOyAvKiAtMTI4IC8gOTIgKi8KIAlhZGogPSAwOwogCWdwMSA9IGdwMiA9IDA7CiAJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKQEAgLTU5OTQsNiArNTk4MSwxMCBAQAogCQl7Y3MyMTAyX05vRmxpa2VyLCBjczIxMDJfTm9GbGlrZXJTY2FsZSwKIAkJIE5VTEwsIE5VTEwsIC8qIGN1cnJlbnRseSBkaXNhYmxlZCAqLwogCQkgTlVMTCwgTlVMTH0sCisJW1NFTlNPUl9HQzAzMDNdID0KKwkJe2djMDMwM19Ob0ZsaWtlciwgZ2MwMzAzX05vRmxpa2VyU2NhbGUsCisJCSBnYzAzMDNfNTBIWiwgZ2MwMzAzXzUwSFpTY2FsZSwKKwkJIGdjMDMwM182MEhaLCBnYzAzMDNfNjBIWlNjYWxlfSwKIAlbU0VOU09SX0dDMDMwNV0gPQogCQl7Z2MwMzA1X05vRmxpa2VyLCBnYzAzMDVfTm9GbGlrZXIsCiAJCSBnYzAzMDVfNTBIWiwgZ2MwMzA1XzUwSFosCkBAIC02MDU0LDE0ICs2MDQ1LDEwIEBACiAJCXt0YXM1MTMwY19Ob0ZsaWtlciwgdGFzNTEzMGNfTm9GbGlrZXJTY2FsZSwKIAkJIHRhczUxMzBjXzUwSFosIHRhczUxMzBjXzUwSFpTY2FsZSwKIAkJIHRhczUxMzBjXzYwSFosIHRhczUxMzBjXzYwSFpTY2FsZX0sCi0JW1NFTlNPUl9UQVM1MTMwQ19WRjAyNTBdID0KLQkJe3RhczUxMzBjX3ZmMDI1MF9Ob0ZsaWtlciwgdGFzNTEzMGNfdmYwMjUwX05vRmxpa2VyU2NhbGUsCi0JCSB0YXM1MTMwY192ZjAyNTBfNTBIWiwgdGFzNTEzMGNfdmYwMjUwXzUwSFpTY2FsZSwKLQkJIHRhczUxMzBjX3ZmMDI1MF82MEhaLCB0YXM1MTMwY192ZjAyNTBfNjBIWlNjYWxlfSwKIAl9OwogCi0JaSA9IHNkLT5saWdodGZyZXEgKiAyOwotCW1vZGUgPSBnc3BjYV9kZXYtPmNhbS5jYW1fbW9kZVsoaW50KSBnc3BjYV9kZXYtPmN1cnJfbW9kZV0ucHJpdjsKKwlpID0gc2QtPmN0cmxzW0xJR0hURlJFUV0udmFsICogMjsKKwltb2RlID0gZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGVbZ3NwY2FfZGV2LT5jdXJyX21vZGVdLnByaXY7CiAJaWYgKG1vZGUpCiAJCWkrKzsJCQkvKiAzMjB4MjQwICovCiAJemMzX2ZyZXEgPSBmcmVxX3RiW3NkLT5zZW5zb3JdW2ldOwpAQCAtNjA3MCwxNCArNjA1NywxNCBAQAogCXVzYl9leGNoYW5nZShnc3BjYV9kZXYsIHpjM19mcmVxKTsKIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKIAljYXNlIFNFTlNPUl9HQzAzMDU6Ci0JCWlmIChtb2RlCQkJLyogaWYgMzIweDI0MCAqLwotCQkgICAgJiYgc2QtPmxpZ2h0ZnJlcSA9PSAxKQkvKiBhbmQgNTBIeiAqLworCQlpZiAobW9kZQkJCQkvKiBpZiAzMjB4MjQwICovCisJCSAgICAmJiBzZC0+Y3RybHNbTElHSFRGUkVRXS52YWwgPT0gMSkJLyogYW5kIDUwSHogKi8KIAkJCXJlZ193KGdzcGNhX2RldiwgMHg4NSwgMHgwMThkKTsKIAkJCQkJLyogd2luOiAweDgwLCAweDAxOGQgKi8KIAkJYnJlYWs7CiAJY2FzZSBTRU5TT1JfT1Y3NjIwOgotCQlpZiAoIW1vZGUpIHsJCQkvKiBpZiA2NDB4NDgwICovCi0JCQlpZiAoc2QtPmxpZ2h0ZnJlcSAhPSAwKQkvKiBhbmQgNTAgb3IgNjAgSHogKi8KKwkJaWYgKCFtb2RlKSB7CQkJCS8qIGlmIDY0MHg0ODAgKi8KKwkJCWlmIChzZC0+Y3RybHNbTElHSFRGUkVRXS52YWwgIT0gMCkgLyogYW5kIGZpbHRlciAqLwogCQkJCXJlZ193KGdzcGNhX2RldiwgMHg0MCwgMHgwMDAyKTsKIAkJCWVsc2UKIAkJCQlyZWdfdyhnc3BjYV9kZXYsIDB4NDQsIDB4MDAwMik7CkBAIC02MDk0LDcgKzYwODEsNyBAQAogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAl1OCBhdXRvdmFsOwogCi0JaWYgKHNkLT5hdXRvZ2FpbikKKwlpZiAoc2QtPmN0cmxzW0FVVE9HQUlOXS52YWwpCiAJCWF1dG92YWwgPSAweDQyOwogCWVsc2UKIAkJYXV0b3ZhbCA9IDB4MDI7CkBAIC02MzMwLDggKzYzMTcsOCBAQAogCXJldHdvcmQgPSBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MDApOwogCWlmIChyZXR3b3JkICE9IDApIHsKIAkJUERFQlVHKERfUFJPQkUsICJwcm9iZSAzd3IgdmdhIHR5cGUgJTAyeCIsIHJldHdvcmQpOwotCQlpZiAocmV0d29yZCA9PSAweDAwMTEpCQkJLyogVkYwMjUwICovCi0JCQlyZXR1cm4gMHgwMjUwOworCQlpZiAocmV0d29yZCA9PSAweDAwMTEpCQkJLyogZ2MwMzAzICovCisJCQlyZXR1cm4gMHgwMzAzOwogCQlpZiAocmV0d29yZCA9PSAweDAwMjkpCQkJLyogZ2MwMzA1ICovCiAJCQlzZW5kX3Vua25vd24oZ3NwY2FfZGV2LCBTRU5TT1JfR0MwMzA1KTsKIAkJcmV0dXJuIHJldHdvcmQ7CkBAIC02MzkyLDcgKzYzNzksNyBAQAogCXN3aXRjaCAoc2QtPnNlbnNvcikgewogCWNhc2UgU0VOU09SX01DNTAxQ0I6CiAJCXJldHVybiAtMTsJCS8qIGRvbid0IHByb2JlICovCi0JY2FzZSBTRU5TT1JfVEFTNTEzMENfVkYwMjUwOgorCWNhc2UgU0VOU09SX0dDMDMwMzoKIAkJCS8qIG1heSBwcm9iZSBidXQgd2l0aCBubyB3cml0ZSBpbiByZWcgMHgwMDEwICovCiAJCXJldHVybiAtMTsJCS8qIGRvbid0IHByb2JlICovCiAJY2FzZSBTRU5TT1JfUEFTMTA2OgpAQCAtNjQyMSwxMSArNjQwOCw3IEBACiAJLyogZGVmaW5lIHNvbWUgc2Vuc29ycyBmcm9tIHRoZSB2ZW5kb3IvcHJvZHVjdCAqLwogCXNkLT5zZW5zb3IgPSBpZC0+ZHJpdmVyX2luZm87CiAKLQlzZC0+c2hhcnBuZXNzID0gU0hBUlBORVNTX0RFRjsKLQlzZC0+YnJpZ2h0bmVzcyA9IEJSSUdIVE5FU1NfREVGOwotCXNkLT5jb250cmFzdCA9IENPTlRSQVNUX0RFRjsKLQlzZC0+YXV0b2dhaW4gPSBBVVRPR0FJTl9ERUY7Ci0Jc2QtPmxpZ2h0ZnJlcSA9IEZSRVFfREVGOworCWdzcGNhX2Rldi0+Y2FtLmN0cmxzID0gc2QtPmN0cmxzOwogCXNkLT5xdWFsaXR5ID0gUVVBTElUWV9ERUY7CiAKIAlyZXR1cm4gMDsKQEAgLTY0NDEsNiArNjQyNCw3IEBACiAJCVtTRU5TT1JfQURDTTI3MDBdID0JNCwKIAkJW1NFTlNPUl9DUzIxMDJdID0JNCwKIAkJW1NFTlNPUl9DUzIxMDJLXSA9CTUsCisJCVtTRU5TT1JfR0MwMzAzXSA9CTMsCiAJCVtTRU5TT1JfR0MwMzA1XSA9CTQsCiAJCVtTRU5TT1JfSERDUzIwMjBiXSA9CTQsCiAJCVtTRU5TT1JfSFY3MTMxQl0gPQk0LApAQCAtNjQ1NiwxMiArNjQ0MCwxMiBAQAogCQlbU0VOU09SX1BCMDMzMF0gPQk0LAogCQlbU0VOU09SX1BPMjAzMF0gPQk0LAogCQlbU0VOU09SX1RBUzUxMzBDXSA9CTMsCi0JCVtTRU5TT1JfVEFTNTEzMENfVkYwMjUwXSA9IDMsCiAJfTsKIAlzdGF0aWMgY29uc3QgdTggbW9kZV90YltTRU5TT1JfTUFYXSA9IHsKIAkJW1NFTlNPUl9BRENNMjcwMF0gPQkyLAogCQlbU0VOU09SX0NTMjEwMl0gPQkxLAogCQlbU0VOU09SX0NTMjEwMktdID0JMSwKKwkJW1NFTlNPUl9HQzAzMDNdID0JMSwKIAkJW1NFTlNPUl9HQzAzMDVdID0JMSwKIAkJW1NFTlNPUl9IRENTMjAyMGJdID0JMSwKIAkJW1NFTlNPUl9IVjcxMzFCXSA9CTEsCkBAIC02NDc3LDcgKzY0NjEsNiBAQAogCQlbU0VOU09SX1BCMDMzMF0gPQkxLAogCQlbU0VOU09SX1BPMjAzMF0gPQkxLAogCQlbU0VOU09SX1RBUzUxMzBDXSA9CTEsCi0JCVtTRU5TT1JfVEFTNTEzMENfVkYwMjUwXSA9IDEsCiAJfTsKIAogCXNlbnNvciA9IHpjeHhfcHJvYmVTZW5zb3IoZ3NwY2FfZGV2KTsKQEAgLTY0OTMsOCArNjQ3Niw4IEBACiAJCQljYXNlIFNFTlNPUl9NQzUwMUNCOgogCQkJCVBERUJVRyhEX1BST0JFLCAiU2Vuc29yIE1DNTAxQ0IiKTsKIAkJCQlicmVhazsKLQkJCWNhc2UgU0VOU09SX1RBUzUxMzBDX1ZGMDI1MDoKLQkJCQlQREVCVUcoRF9QUk9CRSwgIlNlbnNvciBUYXM1MTMwIChWRjAyNTApIik7CisJCQljYXNlIFNFTlNPUl9HQzAzMDM6CisJCQkJUERFQlVHKERfUFJPQkUsICJTZW5zb3IgR0MwMzAzIik7CiAJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgogCQkJCXdhcm4oIlVua25vd24gc2Vuc29yIC0gc2V0IHRvIFRBUzUxMzBDIik7CkBAIC02NTgxLDE0ICs2NTY0LDE0IEBACiAJCQlQREVCVUcoRF9QUk9CRSwgIkZpbmQgU2Vuc29yIEdDMDMwNSIpOwogCQkJc2QtPnNlbnNvciA9IFNFTlNPUl9HQzAzMDU7CiAJCQlicmVhazsKLQkJY2FzZSAweDAyNTA6Ci0JCQlQREVCVUcoRF9QUk9CRSwgIlNlbnNvciBUYXM1MTMwIChWRjAyNTApIik7Ci0JCQlzZC0+c2Vuc29yID0gIFNFTlNPUl9UQVM1MTMwQ19WRjAyNTA7CisJCWNhc2UgMHgwMzAzOgorCQkJUERFQlVHKERfUFJPQkUsICJTZW5zb3IgR0MwMzAzIik7CisJCQlzZC0+c2Vuc29yID0gIFNFTlNPUl9HQzAzMDM7CiAJCQlicmVhazsKIAkJY2FzZSAweDIwMzA6CiAJCQlQREVCVUcoRF9QUk9CRSwgIkZpbmQgU2Vuc29yIFBPMjAzMCIpOwogCQkJc2QtPnNlbnNvciA9IFNFTlNPUl9QTzIwMzA7Ci0JCQlzZC0+c2hhcnBuZXNzID0gMDsJCS8qIGZyb20gd2luIHRyYWNlcyAqLworCQkJc2QtPmN0cmxzW1NIQVJQTkVTU10uZGVmID0gMDsJLyogZnJvbSB3aW4gdHJhY2VzICovCiAJCQlicmVhazsKIAkJY2FzZSAweDc2MjA6CiAJCQlQREVCVUcoRF9QUk9CRSwgIkZpbmQgU2Vuc29yIE9WNzYyMCIpOwpAQCAtNjYyOSwxMSArNjYxMiwxMiBAQAogCQljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUoYnJva2VuX3ZnYV9tb2RlKTsKIAkJYnJlYWs7CiAJfQotCXNkLT5nYW1tYSA9IGdhbW1hW3NkLT5zZW5zb3JdOworCisJc2QtPmN0cmxzW0dBTU1BXS5kZWYgPSBnYW1tYVtzZC0+c2Vuc29yXTsKIAogCXN3aXRjaCAoc2QtPnNlbnNvcikgewogCWNhc2UgU0VOU09SX09WNzYzMEM6Ci0JCWdzcGNhX2Rldi0+Y3RybF9kaXMgPSAoMSA8PCBMSUdIVEZSRVFfSURYKTsKKwkJZ3NwY2FfZGV2LT5jdHJsX2RpcyA9ICgxIDw8IExJR0hURlJFUSk7CiAJCWJyZWFrOwogCX0KIApAQCAtNjY1Myw2ICs2NjM3LDggQEAKIAkJCXtjczIxMDJfSW5pdGlhbCwgY3MyMTAyX0luaXRpYWxTY2FsZX0sCiAJW1NFTlNPUl9DUzIxMDJLXSA9CiAJCQl7Y3MyMTAyS19Jbml0aWFsLCBjczIxMDJLX0luaXRpYWxTY2FsZX0sCisJW1NFTlNPUl9HQzAzMDNdID0KKwkJe2djMDMwM19Jbml0aWFsLCBnYzAzMDNfSW5pdGlhbFNjYWxlfSwKIAlbU0VOU09SX0dDMDMwNV0gPQogCQkJe2djMDMwNV9Jbml0aWFsLCBnYzAzMDVfSW5pdGlhbFNjYWxlfSwKIAlbU0VOU09SX0hEQ1MyMDIwYl0gPQpAQCAtNjY4Myw4ICs2NjY5LDYgQEAKIAkJCXtwbzIwMzBfSW5pdGlhbCwgcG8yMDMwX0luaXRpYWxTY2FsZX0sCiAJW1NFTlNPUl9UQVM1MTMwQ10gPQogCQkJe3RhczUxMzBjX0luaXRpYWwsIHRhczUxMzBjX0luaXRpYWxTY2FsZX0sCi0JW1NFTlNPUl9UQVM1MTMwQ19WRjAyNTBdID0KLQkJe3RhczUxMzBjX3ZmMDI1MF9Jbml0aWFsLCB0YXM1MTMwY192ZjAyNTBfSW5pdGlhbFNjYWxlfSwKIAl9OwogCiAJLyogY3JlYXRlIHRoZSBKUEVHIGhlYWRlciAqLwpAQCAtNjcwOSw3ICs2NjkzLDcgQEAKIAljYXNlIFNFTlNPUl9PVjc2MjA6CiAJY2FzZSBTRU5TT1JfUE8yMDMwOgogCWNhc2UgU0VOU09SX1RBUzUxMzBDOgotCWNhc2UgU0VOU09SX1RBUzUxMzBDX1ZGMDI1MDoKKwljYXNlIFNFTlNPUl9HQzAzMDM6CiAvKgkJbXNsZWVwKDEwMCk7CQkJICogPz8gKi8KIAkJcmVnX3IoZ3NwY2FfZGV2LCAweDAwMDIpOwkvKiAtLT4gMHg0MCAqLwogCQlyZWdfdyhnc3BjYV9kZXYsIDB4MDksIDB4MDFhZCk7CS8qIChmcm9tIHdpbiB0cmFjZXMpICovCkBAIC02ODQzLDExNCArNjgyNyw2IEBACiAJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgSU5URVJfUEFDS0VULCBkYXRhLCBsZW4pOwogfQogCi1zdGF0aWMgaW50IHNkX3NldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCi17Ci0Jc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCi0Jc2QtPmJyaWdodG5lc3MgPSB2YWw7Ci0JaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQotCQlzZXRjb250cmFzdChnc3BjYV9kZXYpOwotCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7Ci19Ci0KLXN0YXRpYyBpbnQgc2RfZ2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCi17Ci0Jc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCi0JKnZhbCA9IHNkLT5icmlnaHRuZXNzOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNkX3NldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQotewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQotCXNkLT5jb250cmFzdCA9IHZhbDsKLQlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCi0JCXNldGNvbnRyYXN0KGdzcGNhX2Rldik7Ci0JcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKLX0KLQotc3RhdGljIGludCBzZF9nZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCi17Ci0Jc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCi0JKnZhbCA9IHNkLT5jb250cmFzdDsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzZF9zZXRhdXRvZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKLXsKLQlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0KLQlzZC0+YXV0b2dhaW4gPSB2YWw7Ci0JaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQotCQlzZXRhdXRvZ2Fpbihnc3BjYV9kZXYpOwotCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7Ci19Ci0KLXN0YXRpYyBpbnQgc2RfZ2V0YXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQotewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQotCSp2YWwgPSBzZC0+YXV0b2dhaW47Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc2Rfc2V0Z2FtbWEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCi17Ci0Jc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCi0Jc2QtPmdhbW1hID0gdmFsOwotCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKLQkJc2V0Y29udHJhc3QoZ3NwY2FfZGV2KTsKLQlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfZXJyOwotfQotCi1zdGF0aWMgaW50IHNkX2dldGdhbW1hKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKLXsKLQlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0KLQkqdmFsID0gc2QtPmdhbW1hOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNkX3NldGZyZXEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCi17Ci0Jc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCi0Jc2QtPmxpZ2h0ZnJlcSA9IHZhbDsKLQlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCi0JCXNldGxpZ2h0ZnJlcShnc3BjYV9kZXYpOwotCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7Ci19Ci0KLXN0YXRpYyBpbnQgc2RfZ2V0ZnJlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCi17Ci0Jc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCi0JKnZhbCA9IHNkLT5saWdodGZyZXE7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc2Rfc2V0c2hhcnBuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQotewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQotCXNkLT5zaGFycG5lc3MgPSB2YWw7Ci0JaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQotCQlzZXRzaGFycG5lc3MoZ3NwY2FfZGV2KTsKLQlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfZXJyOwotfQotCi1zdGF0aWMgaW50IHNkX2dldHNoYXJwbmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCi17Ci0Jc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCi0JKnZhbCA9IHNkLT5zaGFycG5lc3M7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgc2RfcXVlcnltZW51KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKIAkJCXN0cnVjdCB2NGwyX3F1ZXJ5bWVudSAqbWVudSkKIHsKQEAgLTcwNDUsOCArNjkyMSw4IEBACiAJe1VTQl9ERVZJQ0UoMHgwNDFlLCAweDQwMzUpLCAuZHJpdmVyX2luZm8gPSBTRU5TT1JfUEFTMTA2fSwKIAl7VVNCX0RFVklDRSgweDA0MWUsIDB4NDAzNil9LAogCXtVU0JfREVWSUNFKDB4MDQxZSwgMHg0MDNhKX0sCi0Je1VTQl9ERVZJQ0UoMHgwNDFlLCAweDQwNTEpLCAuZHJpdmVyX2luZm8gPSBTRU5TT1JfVEFTNTEzMENfVkYwMjUwfSwKLQl7VVNCX0RFVklDRSgweDA0MWUsIDB4NDA1MyksIC5kcml2ZXJfaW5mbyA9IFNFTlNPUl9UQVM1MTMwQ19WRjAyNTB9LAorCXtVU0JfREVWSUNFKDB4MDQxZSwgMHg0MDUxKSwgLmRyaXZlcl9pbmZvID0gU0VOU09SX0dDMDMwM30sCisJe1VTQl9ERVZJQ0UoMHgwNDFlLCAweDQwNTMpLCAuZHJpdmVyX2luZm8gPSBTRU5TT1JfR0MwMzAzfSwKIAl7VVNCX0RFVklDRSgweDA0NTgsIDB4NzAwNyl9LAogCXtVU0JfREVWSUNFKDB4MDQ1OCwgMHg3MDBjKX0sCiAJe1VTQl9ERVZJQ0UoMHgwNDU4LCAweDcwMGYpfSwKQEAgLTcwNjYsOCArNjk0Miw4IEBACiAJe1VTQl9ERVZJQ0UoMHgwNDZkLCAweDA4YWYpfSwKIAl7VVNCX0RFVklDRSgweDA0NmQsIDB4MDhiOSl9LAogCXtVU0JfREVWSUNFKDB4MDQ2ZCwgMHgwOGQ3KX0sCi0Je1VTQl9ERVZJQ0UoMHgwNDZkLCAweDA4ZDkpfSwKIAl7VVNCX0RFVklDRSgweDA0NmQsIDB4MDhkOCl9LAorCXtVU0JfREVWSUNFKDB4MDQ2ZCwgMHgwOGQ5KX0sCiAJe1VTQl9ERVZJQ0UoMHgwNDZkLCAweDA4ZGEpfSwKIAl7VVNCX0RFVklDRSgweDA0NmQsIDB4MDhkZCksIC5kcml2ZXJfaW5mbyA9IFNFTlNPUl9NQzUwMUNCfSwKIAl7VVNCX0RFVklDRSgweDA0NzEsIDB4MDMyNSksIC5kcml2ZXJfaW5mbyA9IFNFTlNPUl9QQVMxMDZ9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLWNvcmUuYwppbmRleCBiNzBkNmFmLi5mN2QxZWU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLWNvcmUuYwpAQCAtMzg1LDYgKzM4NSwxMSBAQAogCQl2NGwyX2VycigmZGV2LT52NGwyX2RldiwgInJlZ2lzdGVyaW5nIGkyYyBhZGFwdGVyIGZhaWxlZFxuIik7CiAJCWdvdG8gZXJyb3I7CiAJfQorCisJLyogdW50aWwgaTJjIGlzIHdvcmtpbmcgcHJvcGVybHkgKi8KKwlyZXR2YWwgPSAwOyAvKiBoZHB2cl9yZWdpc3Rlcl9pMmNfaXIoZGV2KTsgKi8KKwlpZiAocmV0dmFsIDwgMCkKKwkJdjRsMl9lcnIoJmRldi0+djRsMl9kZXYsICJyZWdpc3RlcmluZyBpMmMgSVIgZGV2aWNlcyBmYWlsZWRcbiIpOwogI2VuZGlmIC8qIENPTkZJR19JMkMgKi8KIAogCS8qIGxldCB0aGUgdXNlciBrbm93IHdoYXQgbm9kZSB0aGlzIGRldmljZSBpcyBub3cgYXR0YWNoZWQgdG8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnItaTJjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLWkyYy5jCmluZGV4IDQwOWRlMTEuLjI0OTY2YWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnItaTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci1pMmMuYwpAQCAtNCw2ICs0LDkgQEAKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggICAgICBKYW5uZSBHcnVuYXUgKGpAamFubmF1Lm5ldCkKICAqCisgKiBJUiBkZXZpY2UgcmVnaXN0cmF0aW9uIGNvZGUgaXMKKyAqIENvcHlyaWdodCAoQykgMjAxMAlBbmR5IFdhbGxzIDxhd2FsbHNAbWQubWV0cm9jYXN0Lm5ldD4KKyAqCiAgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwogICoJcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KQEAgLTIyLDYgKzI1LDU2IEBACiAjZGVmaW5lIFJFUVRZUEVfSTJDX1dSSVRFCTB4YjAKICNkZWZpbmUgUkVRVFlQRV9JMkNfV1JJVEVfU1RBVFQJMHhkMAogCisjZGVmaW5lIFo4RjA4MTFfSVJfVFhfSTJDX0FERFIJMHg3MAorI2RlZmluZSBaOEYwODExX0lSX1JYX0kyQ19BRERSCTB4NzEKKworc3RhdGljIGNvbnN0IHU4IGlyX2kyY19hZGRyc1tdID0geworCVo4RjA4MTFfSVJfVFhfSTJDX0FERFIsCisJWjhGMDgxMV9JUl9SWF9JMkNfQUREUiwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgaXJfZGV2aWNlbmFtZXNbXSA9IHsKKwkiaXJfdHhfejhmMDgxMV9oZHB2ciIsCisJImlyX3J4X3o4ZjA4MTFfaGRwdnIiLAorfTsKKworc3RhdGljIGludCBoZHB2cl9uZXdfaTJjX2lyKHN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldiwgc3RydWN0IGkyY19hZGFwdGVyICphZGFwLAorCQkJICAgIGNvbnN0IGNoYXIgKnR5cGUsIHU4IGFkZHIpCit7CisJc3RydWN0IGkyY19ib2FyZF9pbmZvIGluZm87CisJc3RydWN0IElSX2kyY19pbml0X2RhdGEgKmluaXRfZGF0YSA9ICZkZXYtPmlyX2kyY19pbml0X2RhdGE7CisJdW5zaWduZWQgc2hvcnQgYWRkcl9saXN0WzJdID0geyBhZGRyLCBJMkNfQ0xJRU5UX0VORCB9OworCisJbWVtc2V0KCZpbmZvLCAwLCBzaXplb2Yoc3RydWN0IGkyY19ib2FyZF9pbmZvKSk7CisJc3RybGNweShpbmZvLnR5cGUsIHR5cGUsIEkyQ19OQU1FX1NJWkUpOworCisJLyogT3VyIGRlZmF1bHQgaW5mb3JtYXRpb24gZm9yIGlyLWtiZC1pMmMuYyB0byB1c2UgKi8KKwlzd2l0Y2ggKGFkZHIpIHsKKwljYXNlIFo4RjA4MTFfSVJfUlhfSTJDX0FERFI6CisJCWluaXRfZGF0YS0+aXJfY29kZXMgPSBSQ19NQVBfSEFVUFBBVUdFX05FVzsKKwkJaW5pdF9kYXRhLT5pbnRlcm5hbF9nZXRfa2V5X2Z1bmMgPSBJUl9LQkRfR0VUX0tFWV9IQVVQX1hWUjsKKwkJaW5pdF9kYXRhLT50eXBlID0gUkNfVFlQRV9SQzU7CisJCWluaXRfZGF0YS0+bmFtZSA9ICJIRCBQVlIiOworCQlpbmZvLnBsYXRmb3JtX2RhdGEgPSBpbml0X2RhdGE7CisJCWJyZWFrOworCX0KKworCXJldHVybiBpMmNfbmV3X3Byb2JlZF9kZXZpY2UoYWRhcCwgJmluZm8sIGFkZHJfbGlzdCwgTlVMTCkgPT0gTlVMTCA/CisJICAgICAgIC0xIDogMDsKK30KKworaW50IGhkcHZyX3JlZ2lzdGVyX2kyY19pcihzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYpCit7CisJaW50IGk7CisJaW50IHJldCA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpcl9pMmNfYWRkcnMpOyBpKyspCisJCXJldCArPSBoZHB2cl9uZXdfaTJjX2lyKGRldiwgZGV2LT5pMmNfYWRhcHRlciwKKwkJCQkJaXJfZGV2aWNlbmFtZXNbaV0sIGlyX2kyY19hZGRyc1tpXSk7CisKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgaW50IGhkcHZyX2kyY19yZWFkKHN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldiwgdW5zaWduZWQgY2hhciBhZGRyLAogCQkJICBjaGFyICpkYXRhLCBpbnQgbGVuKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci5oCmluZGV4IDVlZmM5NjMuLjM3ZjFlNGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnIuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLmgKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KIAogI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisjaW5jbHVkZSA8bWVkaWEvaXIta2JkLWkyYy5oPgogCiAjZGVmaW5lIEhEUFZSX01BSk9SX1ZFUlNJT04gMAogI2RlZmluZSBIRFBWUl9NSU5PUl9WRVJTSU9OIDIKQEAgLTEwOSw2ICsxMTAsOSBAQAogCS8qIEkyQyBsb2NrICovCiAJc3RydWN0IG11dGV4CQlpMmNfbXV0ZXg7CiAKKwkvKiBGb3IgcGFzc2luZyBkYXRhIHRvIGlyLWtiZC1pMmMgKi8KKwlzdHJ1Y3QgSVJfaTJjX2luaXRfZGF0YQlpcl9pMmNfaW5pdF9kYXRhOworCiAJLyogdXNiIGNvbnRyb2wgdHJhbnNmZXIgYnVmZmVyIGFuZCBsb2NrICovCiAJc3RydWN0IG11dGV4CQl1c2JjX211dGV4OwogCXU4CQkJKnVzYmNfYnVmOwpAQCAtMzA2LDYgKzMxMCw4IEBACiAvKiBpMmMgYWRhcHRlciByZWdpc3RyYXRpb24gKi8KIGludCBoZHB2cl9yZWdpc3Rlcl9pMmNfYWRhcHRlcihzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYpOwogCitpbnQgaGRwdnJfcmVnaXN0ZXJfaTJjX2lyKHN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldik7CisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIC8qIGJ1ZmZlciBtYW5hZ2VtZW50ICovCiBpbnQgaGRwdnJfZnJlZV9idWZmZXJzKHN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2hleGl1bV9nZW1pbmkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGV4aXVtX2dlbWluaS5jCmluZGV4IDdhZTk2MzYuLmNkZjhiMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGV4aXVtX2dlbWluaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGV4aXVtX2dlbWluaS5jCkBAIC0zNywxNSArMzcsMTUgQEAKIAogI2RlZmluZSBIRVhJVU1fSU5QVVRTCTkKIHN0YXRpYyBzdHJ1Y3QgdjRsMl9pbnB1dCBoZXhpdW1faW5wdXRzW0hFWElVTV9JTlBVVFNdID0gewotCXsgMCwgIkNWQlMgMSIsCVY0TDJfSU5QVVRfVFlQRV9DQU1FUkEsCTIsIDAsIFY0TDJfU1REX1BBTF9CR3xWNEwyX1NURF9OVFNDX00sIDAgfSwKLQl7IDEsICJDVkJTIDIiLAlWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBLAkyLCAwLCBWNEwyX1NURF9QQUxfQkd8VjRMMl9TVERfTlRTQ19NLCAwIH0sCi0JeyAyLCAiQ1ZCUyAzIiwJVjRMMl9JTlBVVF9UWVBFX0NBTUVSQSwJMiwgMCwgVjRMMl9TVERfUEFMX0JHfFY0TDJfU1REX05UU0NfTSwgMCB9LAotCXsgMywgIkNWQlMgNCIsCVY0TDJfSU5QVVRfVFlQRV9DQU1FUkEsCTIsIDAsIFY0TDJfU1REX1BBTF9CR3xWNEwyX1NURF9OVFNDX00sIDAgfSwKLQl7IDQsICJDVkJTIDUiLAlWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBLAkyLCAwLCBWNEwyX1NURF9QQUxfQkd8VjRMMl9TVERfTlRTQ19NLCAwIH0sCi0JeyA1LCAiQ1ZCUyA2IiwJVjRMMl9JTlBVVF9UWVBFX0NBTUVSQSwJMiwgMCwgVjRMMl9TVERfUEFMX0JHfFY0TDJfU1REX05UU0NfTSwgMCB9LAotCXsgNiwgIlkvQyAxIiwJVjRMMl9JTlBVVF9UWVBFX0NBTUVSQSwJMiwgMCwgVjRMMl9TVERfUEFMX0JHfFY0TDJfU1REX05UU0NfTSwgMCB9LAotCXsgNywgIlkvQyAyIiwJVjRMMl9JTlBVVF9UWVBFX0NBTUVSQSwJMiwgMCwgVjRMMl9TVERfUEFMX0JHfFY0TDJfU1REX05UU0NfTSwgMCB9LAotCXsgOCwgIlkvQyAzIiwJVjRMMl9JTlBVVF9UWVBFX0NBTUVSQSwJMiwgMCwgVjRMMl9TVERfUEFMX0JHfFY0TDJfU1REX05UU0NfTSwgMCB9LAorCXsgMCwgIkNWQlMgMSIsCVY0TDJfSU5QVVRfVFlQRV9DQU1FUkEsCTIsIDAsIFY0TDJfU1REX1BBTF9CR3xWNEwyX1NURF9OVFNDX00sIDAsIFY0TDJfSU5fQ0FQX1NURCB9LAorCXsgMSwgIkNWQlMgMiIsCVY0TDJfSU5QVVRfVFlQRV9DQU1FUkEsCTIsIDAsIFY0TDJfU1REX1BBTF9CR3xWNEwyX1NURF9OVFNDX00sIDAsIFY0TDJfSU5fQ0FQX1NURCB9LAorCXsgMiwgIkNWQlMgMyIsCVY0TDJfSU5QVVRfVFlQRV9DQU1FUkEsCTIsIDAsIFY0TDJfU1REX1BBTF9CR3xWNEwyX1NURF9OVFNDX00sIDAsIFY0TDJfSU5fQ0FQX1NURCB9LAorCXsgMywgIkNWQlMgNCIsCVY0TDJfSU5QVVRfVFlQRV9DQU1FUkEsCTIsIDAsIFY0TDJfU1REX1BBTF9CR3xWNEwyX1NURF9OVFNDX00sIDAsIFY0TDJfSU5fQ0FQX1NURCB9LAorCXsgNCwgIkNWQlMgNSIsCVY0TDJfSU5QVVRfVFlQRV9DQU1FUkEsCTIsIDAsIFY0TDJfU1REX1BBTF9CR3xWNEwyX1NURF9OVFNDX00sIDAsIFY0TDJfSU5fQ0FQX1NURCB9LAorCXsgNSwgIkNWQlMgNiIsCVY0TDJfSU5QVVRfVFlQRV9DQU1FUkEsCTIsIDAsIFY0TDJfU1REX1BBTF9CR3xWNEwyX1NURF9OVFNDX00sIDAsIFY0TDJfSU5fQ0FQX1NURCB9LAorCXsgNiwgIlkvQyAxIiwJVjRMMl9JTlBVVF9UWVBFX0NBTUVSQSwJMiwgMCwgVjRMMl9TVERfUEFMX0JHfFY0TDJfU1REX05UU0NfTSwgMCwgVjRMMl9JTl9DQVBfU1REIH0sCisJeyA3LCAiWS9DIDIiLAlWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBLAkyLCAwLCBWNEwyX1NURF9QQUxfQkd8VjRMMl9TVERfTlRTQ19NLCAwLCBWNEwyX0lOX0NBUF9TVEQgfSwKKwl7IDgsICJZL0MgMyIsCVY0TDJfSU5QVVRfVFlQRV9DQU1FUkEsCTIsIDAsIFY0TDJfU1REX1BBTF9CR3xWNEwyX1NURF9OVFNDX00sIDAsIFY0TDJfSU5fQ0FQX1NURCB9LAogfTsKIAogI2RlZmluZSBIRVhJVU1fQVVESU9TCTAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGV4aXVtX29yaW9uLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hleGl1bV9vcmlvbi5jCmluZGV4IGI3MmQwZjAuLjZhZDdlMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGV4aXVtX29yaW9uLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9oZXhpdW1fb3Jpb24uYwpAQCAtMzgsMTUgKzM4LDE1IEBACiAKICNkZWZpbmUgSEVYSVVNX0lOUFVUUwk5CiBzdGF0aWMgc3RydWN0IHY0bDJfaW5wdXQgaGV4aXVtX2lucHV0c1tIRVhJVU1fSU5QVVRTXSA9IHsKLQl7IDAsICJDVkJTIDEiLAlWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBLAkyLCAwLCBWNEwyX1NURF9QQUxfQkd8VjRMMl9TVERfTlRTQ19NLCAwIH0sCi0JeyAxLCAiQ1ZCUyAyIiwJVjRMMl9JTlBVVF9UWVBFX0NBTUVSQSwJMiwgMCwgVjRMMl9TVERfUEFMX0JHfFY0TDJfU1REX05UU0NfTSwgMCB9LAotCXsgMiwgIkNWQlMgMyIsCVY0TDJfSU5QVVRfVFlQRV9DQU1FUkEsCTIsIDAsIFY0TDJfU1REX1BBTF9CR3xWNEwyX1NURF9OVFNDX00sIDAgfSwKLQl7IDMsICJDVkJTIDQiLAlWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBLAkyLCAwLCBWNEwyX1NURF9QQUxfQkd8VjRMMl9TVERfTlRTQ19NLCAwIH0sCi0JeyA0LCAiQ1ZCUyA1IiwJVjRMMl9JTlBVVF9UWVBFX0NBTUVSQSwJMiwgMCwgVjRMMl9TVERfUEFMX0JHfFY0TDJfU1REX05UU0NfTSwgMCB9LAotCXsgNSwgIkNWQlMgNiIsCVY0TDJfSU5QVVRfVFlQRV9DQU1FUkEsCTIsIDAsIFY0TDJfU1REX1BBTF9CR3xWNEwyX1NURF9OVFNDX00sIDAgfSwKLQl7IDYsICJZL0MgMSIsCVY0TDJfSU5QVVRfVFlQRV9DQU1FUkEsCTIsIDAsIFY0TDJfU1REX1BBTF9CR3xWNEwyX1NURF9OVFNDX00sIDAgfSwKLQl7IDcsICJZL0MgMiIsCVY0TDJfSU5QVVRfVFlQRV9DQU1FUkEsCTIsIDAsIFY0TDJfU1REX1BBTF9CR3xWNEwyX1NURF9OVFNDX00sIDAgfSwKLQl7IDgsICJZL0MgMyIsCVY0TDJfSU5QVVRfVFlQRV9DQU1FUkEsCTIsIDAsIFY0TDJfU1REX1BBTF9CR3xWNEwyX1NURF9OVFNDX00sIDAgfSwKKwl7IDAsICJDVkJTIDEiLAlWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBLAkyLCAwLCBWNEwyX1NURF9QQUxfQkd8VjRMMl9TVERfTlRTQ19NLCAwLCBWNEwyX0lOX0NBUF9TVEQgfSwKKwl7IDEsICJDVkJTIDIiLAlWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBLAkyLCAwLCBWNEwyX1NURF9QQUxfQkd8VjRMMl9TVERfTlRTQ19NLCAwLCBWNEwyX0lOX0NBUF9TVEQgfSwKKwl7IDIsICJDVkJTIDMiLAlWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBLAkyLCAwLCBWNEwyX1NURF9QQUxfQkd8VjRMMl9TVERfTlRTQ19NLCAwLCBWNEwyX0lOX0NBUF9TVEQgfSwKKwl7IDMsICJDVkJTIDQiLAlWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBLAkyLCAwLCBWNEwyX1NURF9QQUxfQkd8VjRMMl9TVERfTlRTQ19NLCAwLCBWNEwyX0lOX0NBUF9TVEQgfSwKKwl7IDQsICJDVkJTIDUiLAlWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBLAkyLCAwLCBWNEwyX1NURF9QQUxfQkd8VjRMMl9TVERfTlRTQ19NLCAwLCBWNEwyX0lOX0NBUF9TVEQgfSwKKwl7IDUsICJDVkJTIDYiLAlWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBLAkyLCAwLCBWNEwyX1NURF9QQUxfQkd8VjRMMl9TVERfTlRTQ19NLCAwLCBWNEwyX0lOX0NBUF9TVEQgfSwKKwl7IDYsICJZL0MgMSIsCVY0TDJfSU5QVVRfVFlQRV9DQU1FUkEsCTIsIDAsIFY0TDJfU1REX1BBTF9CR3xWNEwyX1NURF9OVFNDX00sIDAsIFY0TDJfSU5fQ0FQX1NURCB9LAorCXsgNywgIlkvQyAyIiwJVjRMMl9JTlBVVF9UWVBFX0NBTUVSQSwJMiwgMCwgVjRMMl9TVERfUEFMX0JHfFY0TDJfU1REX05UU0NfTSwgMCwgVjRMMl9JTl9DQVBfU1REIH0sCisJeyA4LCAiWS9DIDMiLAlWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBLAkyLCAwLCBWNEwyX1NURF9QQUxfQkd8VjRMMl9TVERfTlRTQ19NLCAwLCBWNEwyX0lOX0NBUF9TVEQgfSwKIH07CiAKICNkZWZpbmUgSEVYSVVNX0FVRElPUwkwCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2lteDA3NC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pbXgwNzQuYwppbmRleCAyN2I1ZGZkLi4xYTExNjkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2lteDA3NC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaW14MDc0LmMKQEAgLTQ2Nyw3ICs0NjcsNiBAQAogCWljZC0+b3BzID0gTlVMTDsKIAlpZiAoaWNsLT5mcmVlX2J1cykKIAkJaWNsLT5mcmVlX2J1cyhpY2wpOwotCWNsaWVudC0+ZHJpdmVyID0gTlVMTDsKIAlrZnJlZShwcml2KTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pci1rYmQtaTJjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2lyLWtiZC1pMmMuYwppbmRleCBjZTRhNzUzLi5jODdiNmJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2lyLWtiZC1pMmMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2lyLWtiZC1pMmMuYwpAQCAtNDYsNyArNDYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogCi0jaW5jbHVkZSA8bWVkaWEvaXItY29yZS5oPgorI2luY2x1ZGUgPG1lZGlhL3JjLWNvcmUuaD4KICNpbmNsdWRlIDxtZWRpYS9pci1rYmQtaTJjLmg+CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0yNTIsNyArMjUyLDcgQEAKIAl9CiAKIAlpZiAocmMpCi0JCWlyX2tleWRvd24oaXItPmlucHV0LCBpcl9rZXksIDApOworCQlyY19rZXlkb3duKGlyLT5yYywgaXJfa2V5LCAwKTsKIH0KIAogc3RhdGljIHZvaWQgaXJfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCkBAIC0yNjksMjIgKzI2OSwxOCBAQAogewogCWNoYXIgKmlyX2NvZGVzID0gTlVMTDsKIAljb25zdCBjaGFyICpuYW1lID0gTlVMTDsKLQl1NjQgaXJfdHlwZSA9IDA7CisJdTY0IHJjX3R5cGUgPSBSQ19UWVBFX1VOS05PV047CiAJc3RydWN0IElSX2kyYyAqaXI7Ci0Jc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OworCXN0cnVjdCByY19kZXYgKnJjID0gTlVMTDsKIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAgPSBjbGllbnQtPmFkYXB0ZXI7CiAJdW5zaWduZWQgc2hvcnQgYWRkciA9IGNsaWVudC0+YWRkcjsKIAlpbnQgZXJyOwogCi0JaXIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgSVJfaTJjKSxHRlBfS0VSTkVMKTsKLQlpbnB1dF9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKLQlpZiAoIWlyIHx8ICFpbnB1dF9kZXYpIHsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBlcnJfb3V0X2ZyZWU7Ci0JfQorCWlyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IElSX2kyYyksIEdGUF9LRVJORUwpOworCWlmICghaXIpCisJCXJldHVybiAtRU5PTUVNOwogCiAJaXItPmMgPSBjbGllbnQ7Ci0JaXItPmlucHV0ID0gaW5wdXRfZGV2OwogCWlyLT5wb2xsaW5nX2ludGVydmFsID0gREVGQVVMVF9QT0xMSU5HX0lOVEVSVkFMOwogCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGlyKTsKIApAQCAtMjkyLDcgKzI4OCw3IEBACiAJY2FzZSAweDY0OgogCQluYW1lICAgICAgICA9ICJQaXhlbHZpZXciOwogCQlpci0+Z2V0X2tleSA9IGdldF9rZXlfcGl4ZWx2aWV3OwotCQlpcl90eXBlICAgICA9IElSX1RZUEVfT1RIRVI7CisJCXJjX3R5cGUgICAgID0gUkNfVFlQRV9PVEhFUjsKIAkJaXJfY29kZXMgICAgPSBSQ19NQVBfRU1QVFk7CiAJCWJyZWFrOwogCWNhc2UgMHgxODoKQEAgLTMwMCw3ICsyOTYsNyBAQAogCWNhc2UgMHgxYToKIAkJbmFtZSAgICAgICAgPSAiSGF1cHBhdWdlIjsKIAkJaXItPmdldF9rZXkgPSBnZXRfa2V5X2hhdXA7Ci0JCWlyX3R5cGUgICAgID0gSVJfVFlQRV9SQzU7CisJCXJjX3R5cGUgICAgID0gUkNfVFlQRV9SQzU7CiAJCWlmIChoYXVwcGF1Z2UgPT0gMSkgewogCQkJaXJfY29kZXMgICAgPSBSQ19NQVBfSEFVUFBBVUdFX05FVzsKIAkJfSBlbHNlIHsKQEAgLTMxMCwxOSArMzA2LDE5IEBACiAJY2FzZSAweDMwOgogCQluYW1lICAgICAgICA9ICJLTkMgT25lIjsKIAkJaXItPmdldF9rZXkgPSBnZXRfa2V5X2tuYzE7Ci0JCWlyX3R5cGUgICAgID0gSVJfVFlQRV9PVEhFUjsKKwkJcmNfdHlwZSAgICAgPSBSQ19UWVBFX09USEVSOwogCQlpcl9jb2RlcyAgICA9IFJDX01BUF9FTVBUWTsKIAkJYnJlYWs7CiAJY2FzZSAweDZiOgogCQluYW1lICAgICAgICA9ICJGdXNpb25IRFRWIjsKIAkJaXItPmdldF9rZXkgPSBnZXRfa2V5X2Z1c2lvbmhkdHY7Ci0JCWlyX3R5cGUgICAgID0gSVJfVFlQRV9SQzU7CisJCXJjX3R5cGUgICAgID0gUkNfVFlQRV9SQzU7CiAJCWlyX2NvZGVzICAgID0gUkNfTUFQX0ZVU0lPTkhEVFZfTUNFOwogCQlicmVhazsKIAljYXNlIDB4NDA6CiAJCW5hbWUgICAgICAgID0gIkFWZXJNZWRpYSBDYXJkYnVzIHJlbW90ZSI7CiAJCWlyLT5nZXRfa2V5ID0gZ2V0X2tleV9hdmVybWVkaWFfY2FyZGJ1czsKLQkJaXJfdHlwZSAgICAgPSBJUl9UWVBFX09USEVSOworCQlyY190eXBlICAgICA9IFJDX1RZUEVfT1RIRVI7CiAJCWlyX2NvZGVzICAgID0gUkNfTUFQX0FWRVJNRURJQV9DQVJEQlVTOwogCQlicmVhazsKIAl9CkBAIC0zMzMsOSArMzI5LDExIEBACiAJCQkJCQljbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOwogCiAJCWlyX2NvZGVzID0gaW5pdF9kYXRhLT5pcl9jb2RlczsKKwkJcmMgPSBpbml0X2RhdGEtPnJjX2RldjsKKwogCQluYW1lID0gaW5pdF9kYXRhLT5uYW1lOwogCQlpZiAoaW5pdF9kYXRhLT50eXBlKQotCQkJaXJfdHlwZSA9IGluaXRfZGF0YS0+dHlwZTsKKwkJCXJjX3R5cGUgPSBpbml0X2RhdGEtPnR5cGU7CiAKIAkJaWYgKGluaXRfZGF0YS0+cG9sbGluZ19pbnRlcnZhbCkKIAkJCWlyLT5wb2xsaW5nX2ludGVydmFsID0gaW5pdF9kYXRhLT5wb2xsaW5nX2ludGVydmFsOwpAQCAtMzY2LDggKzM2NCwyMSBAQAogCQl9CiAJfQogCisJaWYgKCFyYykgeworCQkvKgorCQkgKiBJZiBwbGF0Zm9ybV9kYXRhIGRvZXNuJ3Qgc3BlY2lmeSByY19kZXYsIGluaXRpbGl6ZSBpdAorCQkgKiBpbnRlcm5hbGx5CisJCSAqLworCQlyYyA9IHJjX2FsbG9jYXRlX2RldmljZSgpOworCQlpZiAoIXJjKSB7CisJCQllcnIgPSAtRU5PTUVNOworCQkJZ290byBlcnJfb3V0X2ZyZWU7CisJCX0KKwl9CisJaXItPnJjID0gcmM7CisKIAkvKiBNYWtlIHN1cmUgd2UgYXJlIGFsbCBzZXR1cCBiZWZvcmUgZ29pbmcgb24gKi8KLQlpZiAoIW5hbWUgfHwgIWlyLT5nZXRfa2V5IHx8ICFpcl90eXBlIHx8ICFpcl9jb2RlcykgeworCWlmICghbmFtZSB8fCAhaXItPmdldF9rZXkgfHwgIXJjX3R5cGUgfHwgIWlyX2NvZGVzKSB7CiAJCWRwcmludGsoMSwgIjogVW5zdXBwb3J0ZWQgZGV2aWNlIGF0IGFkZHJlc3MgMHglMDJ4XG4iLAogCQkJYWRkcik7CiAJCWVyciA9IC1FTk9ERVY7CkBAIC0zODIsMTggKzM5MywyOCBAQAogCQkgZGV2X25hbWUoJmFkYXAtPmRldiksCiAJCSBkZXZfbmFtZSgmY2xpZW50LT5kZXYpKTsKIAotCS8qIGluaXQgKyByZWdpc3RlciBpbnB1dCBkZXZpY2UgKi8KLQlpci0+aXJfdHlwZSA9IGlyX3R5cGU7Ci0JaW5wdXRfZGV2LT5pZC5idXN0eXBlID0gQlVTX0kyQzsKLQlpbnB1dF9kZXYtPm5hbWUgICAgICAgPSBpci0+bmFtZTsKLQlpbnB1dF9kZXYtPnBoeXMgICAgICAgPSBpci0+cGh5czsKKwkvKgorCSAqIEluaXRpYWxpemUgaW5wdXRfZGV2IGZpZWxkcworCSAqIEl0IGRvZXNuJ3QgbWFrZSBzZW5zZSB0byBhbGxvdyBvdmVycmlkaW5nIHRoZW0gdmlhIHBsYXRmb3JtX2RhdGEKKwkgKi8KKwlyYy0+aW5wdXRfaWQuYnVzdHlwZSA9IEJVU19JMkM7CisJcmMtPmlucHV0X3BoeXMgICAgICAgPSBpci0+cGh5czsKKwlyYy0+aW5wdXRfbmFtZQkgICAgID0gaXItPm5hbWU7CiAKLQllcnIgPSBpcl9pbnB1dF9yZWdpc3Rlcihpci0+aW5wdXQsIGlyLT5pcl9jb2RlcywgTlVMTCwgTU9EVUxFX05BTUUpOworCS8qCisJICogSW5pdGlhbGl6ZSB0aGUgb3RoZXIgZmllbGRzIG9mIHJjX2RldgorCSAqLworCXJjLT5tYXBfbmFtZSAgICAgICA9IGlyLT5pcl9jb2RlczsKKwlyYy0+YWxsb3dlZF9wcm90b3MgPSByY190eXBlOworCWlmICghcmMtPmRyaXZlcl9uYW1lKQorCQlyYy0+ZHJpdmVyX25hbWUgPSBNT0RVTEVfTkFNRTsKKworCWVyciA9IHJjX3JlZ2lzdGVyX2RldmljZShyYyk7CiAJaWYgKGVycikKIAkJZ290byBlcnJfb3V0X2ZyZWU7CiAKIAlwcmludGsoTU9EVUxFX05BTUUgIjogJXMgZGV0ZWN0ZWQgYXQgJXMgWyVzXVxuIiwKLQkgICAgICAgaXItPmlucHV0LT5uYW1lLCBpci0+aW5wdXQtPnBoeXMsIGFkYXAtPm5hbWUpOworCSAgICAgICBpci0+bmFtZSwgaXItPnBoeXMsIGFkYXAtPm5hbWUpOwogCiAJLyogc3RhcnQgcG9sbGluZyB2aWEgZXZlbnRkICovCiAJSU5JVF9ERUxBWUVEX1dPUksoJmlyLT53b3JrLCBpcl93b3JrKTsKQEAgLTQwMiw2ICs0MjMsOCBAQAogCXJldHVybiAwOwogCiAgZXJyX291dF9mcmVlOgorCS8qIE9ubHkgZnJlZXMgcmMgaWYgaXQgd2VyZSBhbGxvY2F0ZWQgaW50ZXJuYWxseSAqLworCXJjX2ZyZWVfZGV2aWNlKHJjKTsKIAlrZnJlZShpcik7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTQxNCw3ICs0MzcsNyBAQAogCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmaXItPndvcmspOwogCiAJLyogdW5yZWdpc3RlciBkZXZpY2UgKi8KLQlpcl9pbnB1dF91bnJlZ2lzdGVyKGlyLT5pbnB1dCk7CisJcmNfdW5yZWdpc3Rlcl9kZXZpY2UoaXItPnJjKTsKIAogCS8qIGZyZWUgbWVtb3J5ICovCiAJa2ZyZWUoaXIpOwpAQCAtNDI2LDYgKzQ0OSw3IEBACiAJeyAiaXJfdmlkZW8iLCAwIH0sCiAJLyogSVIgZGV2aWNlIHNwZWNpZmljIGVudHJpZXMgc2hvdWxkIGJlIGFkZGVkIGhlcmUgKi8KIAl7ICJpcl9yeF96OGYwODExX2hhdXAiLCAwIH0sCisJeyAiaXJfcnhfejhmMDgxMV9oZHB2ciIsIDAgfSwKIAl7IH0KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L0tjb25maWcKaW5kZXggYmU0YWYxZi4uODlmNjU5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L0tjb25maWcKQEAgLTEsOSArMSw4IEBACiBjb25maWcgVklERU9fSVZUVgogCXRyaXN0YXRlICJDb25leGFudCBjeDIzNDE2L2N4MjM0MTUgTVBFRyBlbmNvZGVyL2RlY29kZXIgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgUENJICYmIEkyQwotCWRlcGVuZHMgb24gSU5QVVQgICAjIGR1ZSB0byBWSURFT19JUgogCXNlbGVjdCBJMkNfQUxHT0JJVAotCWRlcGVuZHMgb24gVklERU9fSVIKKwlkZXBlbmRzIG9uIFJDX0NPUkUKIAlzZWxlY3QgVklERU9fVFVORVIKIAlzZWxlY3QgVklERU9fVFZFRVBST00KIAlzZWxlY3QgVklERU9fQ1gyMzQxWApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWNhcmRzLmMKaW5kZXggODdhZmJiZS4uMTQ1ZTQ3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1jYXJkcy5jCkBAIC00MDUsNyArNDA1LDggQEAKIAkuaHdfYXVkaW9fY3RybCA9IElWVFZfSFdfTVNQMzRYWCwKIAkuaHdfbXV4ZXIgPSBJVlRWX0hXX0NTNTNMMzJBLAogCS5od19hbGwgPSBJVlRWX0hXX01TUDM0WFggfCBJVlRWX0hXX0NTNTNMMzJBIHwKLQkJICBJVlRWX0hXX1NBQTcxMTUgfCBJVlRWX0hXX1RVTkVSLAorCQkgIElWVFZfSFdfU0FBNzExNSB8IElWVFZfSFdfVFVORVIgfAorCQkgIElWVFZfSFdfSTJDX0lSX1JYX0FEQVBURUMsCiAJLnZpZGVvX2lucHV0cyA9IHsKIAkJeyBJVlRWX0NBUkRfSU5QVVRfVklEX1RVTkVSLCAgMCwgSVZUVl9TQUE3MVhYX0NPTVBPU0lURTQgfSwKIAkJeyBJVlRWX0NBUkRfSU5QVVRfU1ZJREVPMSwgICAgMSwgSVZUVl9TQUE3MVhYX1NWSURFTzAgICAgfSwKQEAgLTEzMTMsNyArMTMxNCw2IEBACiAJCSJDb21wb3NpdGUgMyIKIAl9OwogCi0JbWVtc2V0KGlucHV0LCAwLCBzaXplb2YoKmlucHV0KSk7CiAJaWYgKGluZGV4ID49IGl0di0+bm9mX2lucHV0cykKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaW5wdXQtPmluZGV4ID0gaW5kZXg7CkBAIC0xMzMxLDcgKzEzMzEsNiBAQAogewogCWNvbnN0IHN0cnVjdCBpdnR2X2NhcmRfb3V0cHV0ICpjYXJkX291dHB1dCA9IGl0di0+Y2FyZC0+dmlkZW9fb3V0cHV0cyArIGluZGV4OwogCi0JbWVtc2V0KG91dHB1dCwgMCwgc2l6ZW9mKCpvdXRwdXQpKTsKIAlpZiAoaW5kZXggPj0gaXR2LT5jYXJkLT5ub2Zfb3V0cHV0cykKIAkJcmV0dXJuIC1FSU5WQUw7CiAJb3V0cHV0LT5pbmRleCA9IGluZGV4OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtY2FyZHMuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWNhcmRzLmgKaW5kZXggNzhlY2E5OTIuLmU2ZjVjMDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWNhcmRzLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtY2FyZHMuaApAQCAtMTExLDYgKzExMSw3IEBACiAjZGVmaW5lIElWVFZfSFdfSTJDX0lSX1JYX0hBVVBfSU5UCSgxIDw8IDE4KQogI2RlZmluZSBJVlRWX0hXX1o4RjA4MTFfSVJfVFhfSEFVUAkoMSA8PCAxOSkKICNkZWZpbmUgSVZUVl9IV19aOEYwODExX0lSX1JYX0hBVVAJKDEgPDwgMjApCisjZGVmaW5lIElWVFZfSFdfSTJDX0lSX1JYX0FEQVBURUMJKDEgPDwgMjEpCiAKICNkZWZpbmUgSVZUVl9IV19aOEYwODExX0lSX0hBVVAJKElWVFZfSFdfWjhGMDgxMV9JUl9SWF9IQVVQIHwgXAogCQkJCSBJVlRWX0hXX1o4RjA4MTFfSVJfVFhfSEFVUCkKQEAgLTEyMCw3ICsxMjEsOCBAQAogI2RlZmluZSBJVlRWX0hXX0lSX1JYX0FOWSAoSVZUVl9IV19JMkNfSVJfUlhfQVZFUiB8IFwKIAkJCSAgIElWVFZfSFdfSTJDX0lSX1JYX0hBVVBfRVhUIHwgXAogCQkJICAgSVZUVl9IV19JMkNfSVJfUlhfSEFVUF9JTlQgfCBcCi0JCQkgICBJVlRWX0hXX1o4RjA4MTFfSVJfUlhfSEFVUCkKKwkJCSAgIElWVFZfSFdfWjhGMDgxMV9JUl9SWF9IQVVQIHwgXAorCQkJICAgSVZUVl9IV19JMkNfSVJfUlhfQURBUFRFQykKIAogI2RlZmluZSBJVlRWX0hXX0lSX1RYX0FOWSAoSVZUVl9IV19aOEYwODExX0lSX1RYX0hBVVApCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWRyaXZlci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZHJpdmVyLmMKaW5kZXggZTQyMWQxNS4uMzk5NDY0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZHJpdmVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZHJpdmVyLmMKQEAgLTEwMjksOCArMTAyOSwxMyBAQAogCWl0di0+ZW5jX21lbSA9IGlvcmVtYXBfbm9jYWNoZShpdHYtPmJhc2VfYWRkciArIElWVFZfRU5DT0RFUl9PRkZTRVQsCiAJCQkJICAgICAgIElWVFZfRU5DT0RFUl9TSVpFKTsKIAlpZiAoIWl0di0+ZW5jX21lbSkgewotCQlJVlRWX0VSUigiaW9yZW1hcCBmYWlsZWQsIHBlcmhhcHMgaW5jcmVhc2luZyBfX1ZNQUxMT0NfUkVTRVJWRSBpbiBwYWdlLmhcbiIpOwotCQlJVlRWX0VSUigib3IgZGlzYWJsaW5nIENPTkZJR19ISUdITUVNNEcgaW50byB0aGUga2VybmVsIHdvdWxkIGhlbHBcbiIpOworCQlJVlRWX0VSUigiaW9yZW1hcCBmYWlsZWQuIENhbid0IGdldCBhIHdpbmRvdyBpbnRvIENYMjM0MTUvNiAiCisJCQkgImVuY29kZXIgbWVtb3J5XG4iKTsKKwkJSVZUVl9FUlIoIkVhY2ggY2FwdHVyZSBjYXJkIHdpdGggYSBDWDIzNDE1LzYgbmVlZHMgOCBNQiBvZiAiCisJCQkgInZtYWxsb2MgYWRkcmVzcyBzcGFjZSBmb3IgdGhpcyB3aW5kb3dcbiIpOworCQlJVlRWX0VSUigiQ2hlY2sgdGhlIG91dHB1dCBvZiAnZ3JlcCBWbWFsbG9jIC9wcm9jL21lbWluZm8nXG4iKTsKKwkJSVZUVl9FUlIoIlVzZSB0aGUgdm1hbGxvYz0ga2VybmVsIGNvbW1hbmQgbGluZSBvcHRpb24gdG8gc2V0ICIKKwkJCSAiVm1hbGxvY1RvdGFsIHRvIGEgbGFyZ2VyIHZhbHVlXG4iKTsKIAkJcmV0dmFsID0gLUVOT01FTTsKIAkJZ290byBmcmVlX21lbTsKIAl9CkBAIC0xMDQxLDggKzEwNDYsMTQgQEAKIAkJaXR2LT5kZWNfbWVtID0gaW9yZW1hcF9ub2NhY2hlKGl0di0+YmFzZV9hZGRyICsgSVZUVl9ERUNPREVSX09GRlNFVCwKIAkJCQlJVlRWX0RFQ09ERVJfU0laRSk7CiAJCWlmICghaXR2LT5kZWNfbWVtKSB7Ci0JCQlJVlRWX0VSUigiaW9yZW1hcCBmYWlsZWQsIHBlcmhhcHMgaW5jcmVhc2luZyBfX1ZNQUxMT0NfUkVTRVJWRSBpbiBwYWdlLmhcbiIpOwotCQkJSVZUVl9FUlIoIm9yIGRpc2FibGluZyBDT05GSUdfSElHSE1FTTRHIGludG8gdGhlIGtlcm5lbCB3b3VsZCBoZWxwXG4iKTsKKwkJCUlWVFZfRVJSKCJpb3JlbWFwIGZhaWxlZC4gQ2FuJ3QgZ2V0IGEgd2luZG93IGludG8gIgorCQkJCSAiQ1gyMzQxNSBkZWNvZGVyIG1lbW9yeVxuIik7CisJCQlJVlRWX0VSUigiRWFjaCBjYXB0dXJlIGNhcmQgd2l0aCBhIENYMjM0MTUgbmVlZHMgOCBNQiAiCisJCQkJICJvZiB2bWFsbG9jIGFkZHJlc3Mgc3BhY2UgZm9yIHRoaXMgd2luZG93XG4iKTsKKwkJCUlWVFZfRVJSKCJDaGVjayB0aGUgb3V0cHV0IG9mICdncmVwIFZtYWxsb2MgIgorCQkJCSAiL3Byb2MvbWVtaW5mbydcbiIpOworCQkJSVZUVl9FUlIoIlVzZSB0aGUgdm1hbGxvYz0ga2VybmVsIGNvbW1hbmQgbGluZSBvcHRpb24gIgorCQkJCSAidG8gc2V0IFZtYWxsb2NUb3RhbCB0byBhIGxhcmdlciB2YWx1ZVxuIik7CiAJCQlyZXR2YWwgPSAtRU5PTUVNOwogCQkJZ290byBmcmVlX21lbTsKIAkJfQpAQCAtMTA1Nyw4ICsxMDY4LDEzIEBACiAJaXR2LT5yZWdfbWVtID0KIAkgICAgaW9yZW1hcF9ub2NhY2hlKGl0di0+YmFzZV9hZGRyICsgSVZUVl9SRUdfT0ZGU0VULCBJVlRWX1JFR19TSVpFKTsKIAlpZiAoIWl0di0+cmVnX21lbSkgewotCQlJVlRWX0VSUigiaW9yZW1hcCBmYWlsZWQsIHBlcmhhcHMgaW5jcmVhc2luZyBfX1ZNQUxMT0NfUkVTRVJWRSBpbiBwYWdlLmhcbiIpOwotCQlJVlRWX0VSUigib3IgZGlzYWJsaW5nIENPTkZJR19ISUdITUVNNEcgaW50byB0aGUga2VybmVsIHdvdWxkIGhlbHBcbiIpOworCQlJVlRWX0VSUigiaW9yZW1hcCBmYWlsZWQuIENhbid0IGdldCBhIHdpbmRvdyBpbnRvIENYMjM0MTUvNiAiCisJCQkgInJlZ2lzdGVyIHNwYWNlXG4iKTsKKwkJSVZUVl9FUlIoIkVhY2ggY2FwdHVyZSBjYXJkIHdpdGggYSBDWDIzNDE1LzYgbmVlZHMgNjQga0Igb2YgIgorCQkJICJ2bWFsbG9jIGFkZHJlc3Mgc3BhY2UgZm9yIHRoaXMgd2luZG93XG4iKTsKKwkJSVZUVl9FUlIoIkNoZWNrIHRoZSBvdXRwdXQgb2YgJ2dyZXAgVm1hbGxvYyAvcHJvYy9tZW1pbmZvJ1xuIik7CisJCUlWVFZfRVJSKCJVc2UgdGhlIHZtYWxsb2M9IGtlcm5lbCBjb21tYW5kIGxpbmUgb3B0aW9uIHRvIHNldCAiCisJCQkgIlZtYWxsb2NUb3RhbCB0byBhIGxhcmdlciB2YWx1ZVxuIik7CiAJCXJldHZhbCA9IC1FTk9NRU07CiAJCWdvdG8gZnJlZV9pbzsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1maWxlb3BzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1maWxlb3BzLmMKaW5kZXggZDcyNzQ4NS4uYzU3YTU4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZmlsZW9wcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWZpbGVvcHMuYwpAQCAtNTcwLDggKzU3MCw4IEBACiAJCWludCBlbGVtcyA9IGNvdW50IC8gc2l6ZW9mKHN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZGF0YSk7CiAKIAkJc2V0X2JpdChJVlRWX0ZfU19BUFBMX0lPLCAmcy0+c19mbGFncyk7Ci0JCWl2dHZfd3JpdGVfdmJpKGl0diwgKGNvbnN0IHN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZGF0YSAqKXVzZXJfYnVmLCBlbGVtcyk7Ci0JCXJldHVybiBlbGVtcyAqIHNpemVvZihzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2RhdGEpOworCQlyZXR1cm4gaXZ0dl93cml0ZV92YmlfZnJvbV91c2VyKGl0diwKKwkJICAgKGNvbnN0IHN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZGF0YSBfX3VzZXIgKil1c2VyX2J1ZiwgZWxlbXMpOwogCX0KIAogCW1vZGUgPSBzLT50eXBlID09IElWVFZfREVDX1NUUkVBTV9UWVBFX01QRyA/IE9VVF9NUEcgOiBPVVRfWVVWOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaTJjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1pMmMuYwppbmRleCA2NjUxOTFjLi5lMTAzYjhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1pMmMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1pMmMuYwpAQCAtOTQsNiArOTQsNyBAQAogI2RlZmluZSBJVlRWX0hBVVBfSU5UX0lSX1JYX0kyQ19BRERSIAkweDE4CiAjZGVmaW5lIElWVFZfWjhGMDgxMV9JUl9UWF9JMkNfQUREUgkweDcwCiAjZGVmaW5lIElWVFZfWjhGMDgxMV9JUl9SWF9JMkNfQUREUgkweDcxCisjZGVmaW5lIElWVFZfQURBUFRFQ19JUl9BRERSCQkweDZiCiAKIC8qIFRoaXMgYXJyYXkgc2hvdWxkIG1hdGNoIHRoZSBJVlRWX0hXXyBkZWZpbmVzICovCiBzdGF0aWMgY29uc3QgdTggaHdfYWRkcnNbXSA9IHsKQEAgLTExOCw2ICsxMTksNyBAQAogCUlWVFZfSEFVUF9JTlRfSVJfUlhfSTJDX0FERFIsCS8qIElWVFZfSFdfSTJDX0lSX1JYX0hBVVBfSU5UICovCiAJSVZUVl9aOEYwODExX0lSX1RYX0kyQ19BRERSLAkvKiBJVlRWX0hXX1o4RjA4MTFfSVJfVFhfSEFVUCAqLwogCUlWVFZfWjhGMDgxMV9JUl9SWF9JMkNfQUREUiwJLyogSVZUVl9IV19aOEYwODExX0lSX1JYX0hBVVAgKi8KKwlJVlRWX0FEQVBURUNfSVJfQUREUiwJCS8qIElWVFZfSFdfSTJDX0lSX1JYX0FEQVBURUMgKi8KIH07CiAKIC8qIFRoaXMgYXJyYXkgc2hvdWxkIG1hdGNoIHRoZSBJVlRWX0hXXyBkZWZpbmVzICovCkBAIC0xNDMsOCArMTQ1LDM0IEBACiAJImlyX3ZpZGVvIiwJCS8qIElWVFZfSFdfSTJDX0lSX1JYX0hBVVBfSU5UICovCiAJImlyX3R4X3o4ZjA4MTFfaGF1cCIsCS8qIElWVFZfSFdfWjhGMDgxMV9JUl9UWF9IQVVQICovCiAJImlyX3J4X3o4ZjA4MTFfaGF1cCIsCS8qIElWVFZfSFdfWjhGMDgxMV9JUl9SWF9IQVVQICovCisJImlyX3ZpZGVvIiwJCS8qIElWVFZfSFdfSTJDX0lSX1JYX0FEQVBURUMgKi8KIH07CiAKK3N0YXRpYyBpbnQgZ2V0X2tleV9hZGFwdGVjKHN0cnVjdCBJUl9pMmMgKmlyLCB1MzIgKmlyX2tleSwgdTMyICppcl9yYXcpCit7CisJdW5zaWduZWQgY2hhciBrZXlidWZbNF07CisKKwlrZXlidWZbMF0gPSAweDAwOworCWkyY19tYXN0ZXJfc2VuZChpci0+Yywga2V5YnVmLCAxKTsKKwkvKiBwb2xsIElSIGNoaXAgKi8KKwlpZiAoaTJjX21hc3Rlcl9yZWN2KGlyLT5jLCBrZXlidWYsIHNpemVvZihrZXlidWYpKSAhPSBzaXplb2Yoa2V5YnVmKSkgeworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBrZXkgcHJlc3NlZCA/ICovCisJaWYgKGtleWJ1ZlsyXSA9PSAweGZmKQorCQlyZXR1cm4gMDsKKworCS8qIHJlbW92ZSByZXBlYXQgYml0ICovCisJa2V5YnVmWzJdICY9IDB4N2Y7CisJa2V5YnVmWzNdIHw9IDB4ODA7CisKKwkqaXJfa2V5ID0ga2V5YnVmWzNdIHwga2V5YnVmWzJdIDw8IDggfCBrZXlidWZbMV0gPDwgMTYgfGtleWJ1ZlswXSA8PCAyNDsKKwkqaXJfcmF3ID0gKmlyX2tleTsKKworCXJldHVybiAxOworfQorCiBzdGF0aWMgaW50IGl2dHZfaTJjX25ld19pcihzdHJ1Y3QgaXZ0diAqaXR2LCB1MzIgaHcsIGNvbnN0IGNoYXIgKnR5cGUsIHU4IGFkZHIpCiB7CiAJc3RydWN0IGkyY19ib2FyZF9pbmZvIGluZm87CkBAIC0xNzIsNyArMjAwLDcgQEAKIAkJaW5pdF9kYXRhLT5pcl9jb2RlcyA9IFJDX01BUF9BVkVSTUVESUFfQ0FSREJVUzsKIAkJaW5pdF9kYXRhLT5pbnRlcm5hbF9nZXRfa2V5X2Z1bmMgPQogCQkJCQlJUl9LQkRfR0VUX0tFWV9BVkVSTUVESUFfQ0FSREJVUzsKLQkJaW5pdF9kYXRhLT50eXBlID0gSVJfVFlQRV9PVEhFUjsKKwkJaW5pdF9kYXRhLT50eXBlID0gUkNfVFlQRV9PVEhFUjsKIAkJaW5pdF9kYXRhLT5uYW1lID0gIkFWZXJNZWRpYSBBVmVyVFYgY2FyZCI7CiAJCWJyZWFrOwogCWNhc2UgSVZUVl9IV19JMkNfSVJfUlhfSEFVUF9FWFQ6CkBAIC0xODAsMTYgKzIwOCwyMyBAQAogCQkvKiBEZWZhdWx0IHRvIG9sZCBibGFjayByZW1vdGUgKi8KIAkJaW5pdF9kYXRhLT5pcl9jb2RlcyA9IFJDX01BUF9SQzVfVFY7CiAJCWluaXRfZGF0YS0+aW50ZXJuYWxfZ2V0X2tleV9mdW5jID0gSVJfS0JEX0dFVF9LRVlfSEFVUDsKLQkJaW5pdF9kYXRhLT50eXBlID0gSVJfVFlQRV9SQzU7CisJCWluaXRfZGF0YS0+dHlwZSA9IFJDX1RZUEVfUkM1OwogCQlpbml0X2RhdGEtPm5hbWUgPSBpdHYtPmNhcmRfbmFtZTsKIAkJYnJlYWs7CiAJY2FzZSBJVlRWX0hXX1o4RjA4MTFfSVJfUlhfSEFVUDoKIAkJLyogRGVmYXVsdCB0byBncmV5IHJlbW90ZSAqLwogCQlpbml0X2RhdGEtPmlyX2NvZGVzID0gUkNfTUFQX0hBVVBQQVVHRV9ORVc7CiAJCWluaXRfZGF0YS0+aW50ZXJuYWxfZ2V0X2tleV9mdW5jID0gSVJfS0JEX0dFVF9LRVlfSEFVUF9YVlI7Ci0JCWluaXRfZGF0YS0+dHlwZSA9IElSX1RZUEVfUkM1OworCQlpbml0X2RhdGEtPnR5cGUgPSBSQ19UWVBFX1JDNTsKIAkJaW5pdF9kYXRhLT5uYW1lID0gaXR2LT5jYXJkX25hbWU7CiAJCWJyZWFrOworCWNhc2UgSVZUVl9IV19JMkNfSVJfUlhfQURBUFRFQzoKKwkJaW5pdF9kYXRhLT5nZXRfa2V5ID0gZ2V0X2tleV9hZGFwdGVjOworCQlpbml0X2RhdGEtPm5hbWUgPSBpdHYtPmNhcmRfbmFtZTsKKwkJLyogRklYTUU6IFRoZSBwcm90b2NvbCBhbmQgUkNfTUFQIG5lZWRzIHRvIGJlIGNvcnJlY3RlZCAqLworCQlpbml0X2RhdGEtPmlyX2NvZGVzID0gUkNfTUFQX0VNUFRZOworCQlpbml0X2RhdGEtPnR5cGUgPSBSQ19UWVBFX1VOS05PV047CisJCWJyZWFrOwogCX0KIAogCW1lbXNldCgmaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBpMmNfYm9hcmRfaW5mbykpOwpAQCAtMjE4LDggKzI1Myw2IEBACiAJY29uc3QgdW5zaWduZWQgc2hvcnQgYWRkcl9saXN0W10gPSB7CiAJCTB4MWEsCS8qIEhhdXBwYXVnZSBJUiBleHRlcm5hbCAtIGNvbGxpZGVzIHdpdGggV004NzM5ICovCiAJCTB4MTgsCS8qIEhhdXBwYXVnZSBJUiBpbnRlcm5hbCAqLwotCQkweDcxLAkvKiBIYXVwcGF1Z2UgSVIgKFBWUjE1MCkgKi8KLQkJMHg2YiwJLyogQWRhcHRlYyBJUiAqLwogCQlJMkNfQ0xJRU5UX0VORAogCX07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXZiaS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtdmJpLmMKaW5kZXggZTFjMzQ3ZS4uMmRmYTk1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtdmJpLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtdmJpLmMKQEAgLTkyLDUyICs5Miw5NSBAQAogCXJldHVybiBjICYgMTsKIH0KIAotdm9pZCBpdnR2X3dyaXRlX3ZiaShzdHJ1Y3QgaXZ0diAqaXR2LCBjb25zdCBzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2RhdGEgKnNsaWNlZCwgc2l6ZV90IGNudCkKK3N0YXRpYyB2b2lkIGl2dHZfd3JpdGVfdmJpX2xpbmUoc3RydWN0IGl2dHYgKml0diwKKwkJCQljb25zdCBzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2RhdGEgKmQsCisJCQkJc3RydWN0IHZiaV9jYyAqY2MsIGludCAqZm91bmRfY2MpCiB7CiAJc3RydWN0IHZiaV9pbmZvICp2aSA9ICZpdHYtPnZiaTsKKworCWlmIChkLT5pZCA9PSBWNEwyX1NMSUNFRF9DQVBUSU9OXzUyNSAmJiBkLT5saW5lID09IDIxKSB7CisJCWlmIChkLT5maWVsZCkgeworCQkJY2MtPmV2ZW5bMF0gPSBkLT5kYXRhWzBdOworCQkJY2MtPmV2ZW5bMV0gPSBkLT5kYXRhWzFdOworCQl9IGVsc2UgeworCQkJY2MtPm9kZFswXSA9IGQtPmRhdGFbMF07CisJCQljYy0+b2RkWzFdID0gZC0+ZGF0YVsxXTsKKwkJfQorCQkqZm91bmRfY2MgPSAxOworCX0gZWxzZSBpZiAoZC0+aWQgPT0gVjRMMl9TTElDRURfVlBTICYmIGQtPmxpbmUgPT0gMTYgJiYgZC0+ZmllbGQgPT0gMCkgeworCQlzdHJ1Y3QgdmJpX3ZwcyB2cHM7CisKKwkJdnBzLmRhdGFbMF0gPSBkLT5kYXRhWzJdOworCQl2cHMuZGF0YVsxXSA9IGQtPmRhdGFbOF07CisJCXZwcy5kYXRhWzJdID0gZC0+ZGF0YVs5XTsKKwkJdnBzLmRhdGFbM10gPSBkLT5kYXRhWzEwXTsKKwkJdnBzLmRhdGFbNF0gPSBkLT5kYXRhWzExXTsKKwkJaWYgKG1lbWNtcCgmdnBzLCAmdmktPnZwc19wYXlsb2FkLCBzaXplb2YodnBzKSkpIHsKKwkJCXZpLT52cHNfcGF5bG9hZCA9IHZwczsKKwkJCXNldF9iaXQoSVZUVl9GX0lfVVBEQVRFX1ZQUywgJml0di0+aV9mbGFncyk7CisJCX0KKwl9IGVsc2UgaWYgKGQtPmlkID09IFY0TDJfU0xJQ0VEX1dTU182MjUgJiYKKwkJICAgZC0+bGluZSA9PSAyMyAmJiBkLT5maWVsZCA9PSAwKSB7CisJCWludCB3c3MgPSBkLT5kYXRhWzBdIHwgZC0+ZGF0YVsxXSA8PCA4OworCisJCWlmICh2aS0+d3NzX3BheWxvYWQgIT0gd3NzKSB7CisJCQl2aS0+d3NzX3BheWxvYWQgPSB3c3M7CisJCQlzZXRfYml0KElWVFZfRl9JX1VQREFURV9XU1MsICZpdHYtPmlfZmxhZ3MpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBpdnR2X3dyaXRlX3ZiaV9jY19saW5lcyhzdHJ1Y3QgaXZ0diAqaXR2LCBjb25zdCBzdHJ1Y3QgdmJpX2NjICpjYykKK3sKKwlzdHJ1Y3QgdmJpX2luZm8gKnZpID0gJml0di0+dmJpOworCisJaWYgKHZpLT5jY19wYXlsb2FkX2lkeCA8IEFSUkFZX1NJWkUodmktPmNjX3BheWxvYWQpKSB7CisJCW1lbWNweSgmdmktPmNjX3BheWxvYWRbdmktPmNjX3BheWxvYWRfaWR4XSwgY2MsCisJCSAgICAgICBzaXplb2Yoc3RydWN0IHZiaV9jYykpOworCQl2aS0+Y2NfcGF5bG9hZF9pZHgrKzsKKwkJc2V0X2JpdChJVlRWX0ZfSV9VUERBVEVfQ0MsICZpdHYtPmlfZmxhZ3MpOworCX0KK30KKworc3RhdGljIHZvaWQgaXZ0dl93cml0ZV92Ymkoc3RydWN0IGl2dHYgKml0diwKKwkJCSAgIGNvbnN0IHN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZGF0YSAqc2xpY2VkLAorCQkJICAgc2l6ZV90IGNudCkKK3sKIAlzdHJ1Y3QgdmJpX2NjIGNjID0geyAub2RkID0geyAweDgwLCAweDgwIH0sIC5ldmVuID0geyAweDgwLCAweDgwIH0gfTsKIAlpbnQgZm91bmRfY2MgPSAwOwogCXNpemVfdCBpOwogCisJZm9yIChpID0gMDsgaSA8IGNudDsgaSsrKQorCQlpdnR2X3dyaXRlX3ZiaV9saW5lKGl0diwgc2xpY2VkICsgaSwgJmNjLCAmZm91bmRfY2MpOworCisJaWYgKGZvdW5kX2NjKQorCQlpdnR2X3dyaXRlX3ZiaV9jY19saW5lcyhpdHYsICZjYyk7Cit9CisKK3NzaXplX3QKK2l2dHZfd3JpdGVfdmJpX2Zyb21fdXNlcihzdHJ1Y3QgaXZ0diAqaXR2LAorCQkJIGNvbnN0IHN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZGF0YSBfX3VzZXIgKnNsaWNlZCwKKwkJCSBzaXplX3QgY250KQoreworCXN0cnVjdCB2YmlfY2MgY2MgPSB7IC5vZGQgPSB7IDB4ODAsIDB4ODAgfSwgLmV2ZW4gPSB7IDB4ODAsIDB4ODAgfSB9OworCWludCBmb3VuZF9jYyA9IDA7CisJc2l6ZV90IGk7CisJc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9kYXRhIGQ7CisJc3NpemVfdCByZXQgPSBjbnQgKiBzaXplb2Yoc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9kYXRhKTsKKwogCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKykgewotCQljb25zdCBzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2RhdGEgKmQgPSBzbGljZWQgKyBpOwotCi0JCWlmIChkLT5pZCA9PSBWNEwyX1NMSUNFRF9DQVBUSU9OXzUyNSAmJiBkLT5saW5lID09IDIxKSB7Ci0JCQlpZiAoZC0+ZmllbGQpIHsKLQkJCQljYy5ldmVuWzBdID0gZC0+ZGF0YVswXTsKLQkJCQljYy5ldmVuWzFdID0gZC0+ZGF0YVsxXTsKLQkJCX0gZWxzZSB7Ci0JCQkJY2Mub2RkWzBdID0gZC0+ZGF0YVswXTsKLQkJCQljYy5vZGRbMV0gPSBkLT5kYXRhWzFdOwotCQkJfQotCQkJZm91bmRfY2MgPSAxOworCQlpZiAoY29weV9mcm9tX3VzZXIoJmQsIHNsaWNlZCArIGksCisJCQkJICAgc2l6ZW9mKHN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZGF0YSkpKSB7CisJCQlyZXQgPSAtRUZBVUxUOworCQkJYnJlYWs7CiAJCX0KLQkJZWxzZSBpZiAoZC0+aWQgPT0gVjRMMl9TTElDRURfVlBTICYmIGQtPmxpbmUgPT0gMTYgJiYgZC0+ZmllbGQgPT0gMCkgewotCQkJc3RydWN0IHZiaV92cHMgdnBzOwotCi0JCQl2cHMuZGF0YVswXSA9IGQtPmRhdGFbMl07Ci0JCQl2cHMuZGF0YVsxXSA9IGQtPmRhdGFbOF07Ci0JCQl2cHMuZGF0YVsyXSA9IGQtPmRhdGFbOV07Ci0JCQl2cHMuZGF0YVszXSA9IGQtPmRhdGFbMTBdOwotCQkJdnBzLmRhdGFbNF0gPSBkLT5kYXRhWzExXTsKLQkJCWlmIChtZW1jbXAoJnZwcywgJnZpLT52cHNfcGF5bG9hZCwgc2l6ZW9mKHZwcykpKSB7Ci0JCQkJdmktPnZwc19wYXlsb2FkID0gdnBzOwotCQkJCXNldF9iaXQoSVZUVl9GX0lfVVBEQVRFX1ZQUywgJml0di0+aV9mbGFncyk7Ci0JCQl9Ci0JCX0KLQkJZWxzZSBpZiAoZC0+aWQgPT0gVjRMMl9TTElDRURfV1NTXzYyNSAmJiBkLT5saW5lID09IDIzICYmIGQtPmZpZWxkID09IDApIHsKLQkJCWludCB3c3MgPSBkLT5kYXRhWzBdIHwgZC0+ZGF0YVsxXSA8PCA4OwotCi0JCQlpZiAodmktPndzc19wYXlsb2FkICE9IHdzcykgewotCQkJCXZpLT53c3NfcGF5bG9hZCA9IHdzczsKLQkJCQlzZXRfYml0KElWVFZfRl9JX1VQREFURV9XU1MsICZpdHYtPmlfZmxhZ3MpOwotCQkJfQotCQl9CisJCWl2dHZfd3JpdGVfdmJpX2xpbmUoaXR2LCBzbGljZWQgKyBpLCAmY2MsICZmb3VuZF9jYyk7CiAJfQotCWlmIChmb3VuZF9jYyAmJiB2aS0+Y2NfcGF5bG9hZF9pZHggPCBBUlJBWV9TSVpFKHZpLT5jY19wYXlsb2FkKSkgewotCQl2aS0+Y2NfcGF5bG9hZFt2aS0+Y2NfcGF5bG9hZF9pZHgrK10gPSBjYzsKLQkJc2V0X2JpdChJVlRWX0ZfSV9VUERBVEVfQ0MsICZpdHYtPmlfZmxhZ3MpOwotCX0KKworCWlmIChmb3VuZF9jYykKKwkJaXZ0dl93cml0ZV92YmlfY2NfbGluZXMoaXR2LCAmY2MpOworCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgY29weV92YmlfZGF0YShzdHJ1Y3QgaXZ0diAqaXR2LCBpbnQgbGluZXMsIHUzMiBwdHNfc3RhbXApCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di12YmkuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXZiaS5oCmluZGV4IDk3MDU2N2IuLjE2NmRkMGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXZiaS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXZiaS5oCkBAIC0yMCw3ICsyMCwxMCBAQAogI2lmbmRlZiBJVlRWX1ZCSV9ICiAjZGVmaW5lIElWVFZfVkJJX0gKIAotdm9pZCBpdnR2X3dyaXRlX3ZiaShzdHJ1Y3QgaXZ0diAqaXR2LCBjb25zdCBzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2RhdGEgKnNsaWNlZCwgc2l6ZV90IGNvdW50KTsKK3NzaXplX3QKK2l2dHZfd3JpdGVfdmJpX2Zyb21fdXNlcihzdHJ1Y3QgaXZ0diAqaXR2LAorCQkJIGNvbnN0IHN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZGF0YSBfX3VzZXIgKnNsaWNlZCwKKwkJCSBzaXplX3QgY291bnQpOwogdm9pZCBpdnR2X3Byb2Nlc3NfdmJpX2RhdGEoc3RydWN0IGl2dHYgKml0diwgc3RydWN0IGl2dHZfYnVmZmVyICpidWYsCiAJCQkgICB1NjQgcHRzX3N0YW1wLCBpbnQgc3RyZWFtdHlwZSk7CiBpbnQgaXZ0dl91c2VkX2xpbmUoc3RydWN0IGl2dHYgKml0diwgaW50IGxpbmUsIGludCBmaWVsZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL21lbTJtZW1fdGVzdGRldi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9tZW0ybWVtX3Rlc3RkZXYuYwppbmRleCAzYjE5ZjViLi5jMTc5MDQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL21lbTJtZW1fdGVzdGRldi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbWVtMm1lbV90ZXN0ZGV2LmMKQEAgLTUyNCw3ICs1MjQsNiBAQAogewogCXN0cnVjdCBtMm10ZXN0X3FfZGF0YSAqcV9kYXRhOwogCXN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqdnE7Ci0JaW50IHJldCA9IDA7CiAKIAl2cSA9IHY0bDJfbTJtX2dldF92cShjdHgtPm0ybV9jdHgsIGYtPnR5cGUpOwogCWlmICghdnEpCkBAIC01MzQsMTIgKzUzMyw5IEBACiAJaWYgKCFxX2RhdGEpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JbXV0ZXhfbG9jaygmdnEtPnZiX2xvY2spOwotCiAJaWYgKHZpZGVvYnVmX3F1ZXVlX2lzX2J1c3kodnEpKSB7CiAJCXY0bDJfZXJyKCZjdHgtPmRldi0+djRsMl9kZXYsICIlcyBxdWV1ZSBidXN5XG4iLCBfX2Z1bmNfXyk7Ci0JCXJldCA9IC1FQlVTWTsKLQkJZ290byBvdXQ7CisJCXJldHVybiAtRUJVU1k7CiAJfQogCiAJcV9kYXRhLT5mbXQJCT0gZmluZF9mb3JtYXQoZik7CkBAIC01NTMsOSArNTQ5LDcgQEAKIAkJIlNldHRpbmcgZm9ybWF0IGZvciB0eXBlICVkLCB3eGg6ICVkeCVkLCBmbXQ6ICVkXG4iLAogCQlmLT50eXBlLCBxX2RhdGEtPndpZHRoLCBxX2RhdGEtPmhlaWdodCwgcV9kYXRhLT5mbXQtPmZvdXJjYyk7CiAKLW91dDoKLQltdXRleF91bmxvY2soJnZxLT52Yl9sb2NrKTsKLQlyZXR1cm4gcmV0OworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19zX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LApAQCAtODQ1LDEwICs4MzksMTIgQEAKIAkJICAgICAgIGVudW0gdjRsMl9idWZfdHlwZSB0eXBlKQogewogCXN0cnVjdCBtMm10ZXN0X2N0eCAqY3R4ID0gcHJpdjsKKwlzdHJ1Y3QgbTJtdGVzdF9kZXYgKmRldiA9IGN0eC0+ZGV2OwogCi0JdmlkZW9idWZfcXVldWVfdm1hbGxvY19pbml0KHZxLCAmbTJtdGVzdF9xb3BzLCBjdHgtPmRldi0+djRsMl9kZXYuZGV2LAotCQkJCSAgICAmY3R4LT5kZXYtPmlycWxvY2ssIHR5cGUsIFY0TDJfRklFTERfTk9ORSwKLQkJCQkgICAgc2l6ZW9mKHN0cnVjdCBtMm10ZXN0X2J1ZmZlciksIHByaXYsIE5VTEwpOworCXZpZGVvYnVmX3F1ZXVlX3ZtYWxsb2NfaW5pdCh2cSwgJm0ybXRlc3RfcW9wcywgZGV2LT52NGwyX2Rldi5kZXYsCisJCQkJICAgICZkZXYtPmlycWxvY2ssIHR5cGUsIFY0TDJfRklFTERfTk9ORSwKKwkJCQkgICAgc2l6ZW9mKHN0cnVjdCBtMm10ZXN0X2J1ZmZlciksIHByaXYsCisJCQkJICAgICZkZXYtPmRldl9tdXRleCk7CiB9CiAKIApAQCAtOTIwLDcgKzkxNiw3IEBACiAJLm9wZW4JCT0gbTJtdGVzdF9vcGVuLAogCS5yZWxlYXNlCT0gbTJtdGVzdF9yZWxlYXNlLAogCS5wb2xsCQk9IG0ybXRlc3RfcG9sbCwKLQkuaW9jdGwJCT0gdmlkZW9faW9jdGwyLAorCS51bmxvY2tlZF9pb2N0bAk9IHZpZGVvX2lvY3RsMiwKIAkubW1hcAkJPSBtMm10ZXN0X21tYXAsCiB9OwogCkBAIC05NjUsNiArOTYxLDcgQEAKIAl9CiAKIAkqdmZkID0gbTJtdGVzdF92aWRlb2RldjsKKwl2ZmQtPmxvY2sgPSAmZGV2LT5kZXZfbXV0ZXg7CiAKIAlyZXQgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UodmZkLCBWRkxfVFlQRV9HUkFCQkVSLCAwKTsKIAlpZiAocmV0KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL210OW0wMDEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5bTAwMS5jCmluZGV4IGZjYjRjZDkuLmY3ZmM4OGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5bTAwMS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5bTAwMS5jCkBAIC03OTgsNyArNzk4LDYgQEAKIAogCWljZC0+b3BzID0gTlVMTDsKIAltdDltMDAxX3ZpZGVvX3JlbW92ZShpY2QpOwotCWNsaWVudC0+ZHJpdmVyID0gTlVMTDsKIAlrZnJlZShtdDltMDAxKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9tdDltMTExLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL210OW0xMTEuYwppbmRleCA1MjVhMTZlLi41M2ZhMmE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL210OW0xMTEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL210OW0xMTEuYwpAQCAtMTA5Miw3ICsxMDkyLDYgQEAKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAKIAlpY2QtPm9wcyA9IE5VTEw7Ci0JY2xpZW50LT5kcml2ZXIgPSBOVUxMOwogCWtmcmVlKG10OW0xMTEpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL210OXQwMzEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5dDAzMS5jCmluZGV4IDliZDQ0YTguLjdjZTI3OWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5dDAzMS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5dDAzMS5jCkBAIC04OTYsNyArODk2LDYgQEAKIAogCWlmIChpY2QpCiAJCWljZC0+b3BzID0gTlVMTDsKLQljbGllbnQtPmRyaXZlciA9IE5VTEw7CiAJa2ZyZWUobXQ5dDAzMSk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5djAyMi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9tdDl2MDIyLmMKaW5kZXggYjk2MTcxYy4uNmE3ODRjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9tdDl2MDIyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9tdDl2MDIyLmMKQEAgLTkzMCw3ICs5MzAsNiBAQAogCiAJaWNkLT5vcHMgPSBOVUxMOwogCW10OXYwMjJfdmlkZW9fcmVtb3ZlKGljZCk7Ci0JY2xpZW50LT5kcml2ZXIgPSBOVUxMOwogCWtmcmVlKG10OXYwMjIpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL214MV9jYW1lcmEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXgxX2NhbWVyYS5jCmluZGV4IDVlNDg2YTguLmJjMGMyM2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXgxX2NhbWVyYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXgxX2NhbWVyYS5jCkBAIC0zODIsMTAgKzM4Miw5IEBACiAJc3RydWN0IG14MV9jYW1lcmFfZGV2ICpwY2RldiA9IGljaS0+cHJpdjsKIAogCXZpZGVvYnVmX3F1ZXVlX2RtYV9jb250aWdfaW5pdChxLCAmbXgxX3ZpZGVvYnVmX29wcywgaWNkLT5kZXYucGFyZW50LAotCQkJCQkmcGNkZXYtPmxvY2ssCi0JCQkJCVY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSwKLQkJCQkJVjRMMl9GSUVMRF9OT05FLAotCQkJCQlzaXplb2Yoc3RydWN0IG14MV9idWZmZXIpLCBpY2QsIE5VTEwpOworCQkJCSZwY2Rldi0+bG9jaywgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFLAorCQkJCVY0TDJfRklFTERfTk9ORSwKKwkJCQlzaXplb2Yoc3RydWN0IG14MV9idWZmZXIpLCBpY2QsICZpY2QtPnZpZGVvX2xvY2spOwogfQogCiBzdGF0aWMgaW50IG1jbGtfZ2V0X2Rpdmlzb3Ioc3RydWN0IG14MV9jYW1lcmFfZGV2ICpwY2RldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXgyX2NhbWVyYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9teDJfY2FtZXJhLmMKaW5kZXggMTM1NjVjYi4uNGVhYjFjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9teDJfY2FtZXJhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9teDJfY2FtZXJhLmMKQEAgLTY4Myw3ICs2ODMsOCBAQAogCiAJdmlkZW9idWZfcXVldWVfZG1hX2NvbnRpZ19pbml0KHEsICZteDJfdmlkZW9idWZfb3BzLCBwY2Rldi0+ZGV2LAogCQkJJnBjZGV2LT5sb2NrLCBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUsCi0JCQlWNEwyX0ZJRUxEX05PTkUsIHNpemVvZihzdHJ1Y3QgbXgyX2J1ZmZlciksIGljZCwgTlVMTCk7CisJCQlWNEwyX0ZJRUxEX05PTkUsIHNpemVvZihzdHJ1Y3QgbXgyX2J1ZmZlciksCisJCQlpY2QsICZpY2QtPnZpZGVvX2xvY2spOwogfQogCiAjZGVmaW5lIE1YMl9CVVNfRkxBR1MJKFNPQ0FNX0RBVEFXSURUSF84IHwgXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9teDNfY2FtZXJhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL214M19jYW1lcmEuYwppbmRleCBhYTg3MWMyLi5iOWNiNGE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL214M19jYW1lcmEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL214M19jYW1lcmEuYwpAQCAtNDQzLDcgKzQ0Myw3IEBACiAJCQkJICAgICAgIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSwKIAkJCQkgICAgICAgVjRMMl9GSUVMRF9OT05FLAogCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IG14M19jYW1lcmFfYnVmZmVyKSwgaWNkLAotCQkJCSAgICAgICBOVUxMKTsKKwkJCQkgICAgICAgJmljZC0+dmlkZW9fbG9jayk7CiB9CiAKIC8qIEZpcnN0IHBhcnQgb2YgaXB1X2NzaV9pbml0X2ludGVyZmFjZSgpICovCkBAIC0xMTg2LDEzICsxMTg2LDEyIEBACiAJCWdvdG8gZWdldHJlczsKIAl9CiAKLQlteDNfY2FtID0gdm1hbGxvYyhzaXplb2YoKm14M19jYW0pKTsKKwlteDNfY2FtID0gdnphbGxvYyhzaXplb2YoKm14M19jYW0pKTsKIAlpZiAoIW14M19jYW0pIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ291bGQgbm90IGFsbG9jYXRlIG14MyBjYW1lcmEgb2JqZWN0XG4iKTsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBlYWxsb2M7CiAJfQotCW1lbXNldChteDNfY2FtLCAwLCBzaXplb2YoKm14M19jYW0pKTsKIAogCW14M19jYW0tPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgTlVMTCk7CiAJaWYgKElTX0VSUihteDNfY2FtLT5jbGspKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL214Yi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9teGIuYwppbmRleCA0ZThmZDk2Li5lODg0NmEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL214Yi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXhiLmMKQEAgLTU5LDEwICs1OSwxMCBAQAogZW51bSB7IFRVTkVSLCBBVVgxLCBBVVgzLCBBVVgzX1lDIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdjRsMl9pbnB1dCBteGJfaW5wdXRzW01YQl9JTlBVVFNdID0gewotCXsgVFVORVIsCSJUdW5lciIsCQlWNEwyX0lOUFVUX1RZUEVfVFVORVIsCTEsIDAsIFY0TDJfU1REX1BBTF9CR3xWNEwyX1NURF9OVFNDX00sIDAgfSwKLQl7IEFVWDEsCQkiQVVYMSIsCQkJVjRMMl9JTlBVVF9UWVBFX0NBTUVSQSwJMiwgMCwgVjRMMl9TVERfUEFMX0JHfFY0TDJfU1REX05UU0NfTSwgMCB9LAotCXsgQVVYMywJCSJBVVgzIENvbXBvc2l0ZSIsCVY0TDJfSU5QVVRfVFlQRV9DQU1FUkEsCTQsIDAsIFY0TDJfU1REX1BBTF9CR3xWNEwyX1NURF9OVFNDX00sIDAgfSwKLQl7IEFVWDNfWUMsCSJBVVgzIFMtVmlkZW8iLAkJVjRMMl9JTlBVVF9UWVBFX0NBTUVSQSwJNCwgMCwgVjRMMl9TVERfUEFMX0JHfFY0TDJfU1REX05UU0NfTSwgMCB9LAorCXsgVFVORVIsCSJUdW5lciIsCQlWNEwyX0lOUFVUX1RZUEVfVFVORVIsCTEsIDAsIFY0TDJfU1REX1BBTF9CR3xWNEwyX1NURF9OVFNDX00sIDAsIFY0TDJfSU5fQ0FQX1NURCB9LAorCXsgQVVYMSwJCSJBVVgxIiwJCQlWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBLAkyLCAwLCBWNEwyX1NURF9QQUxfQkd8VjRMMl9TVERfTlRTQ19NLCAwLCBWNEwyX0lOX0NBUF9TVEQgfSwKKwl7IEFVWDMsCQkiQVVYMyBDb21wb3NpdGUiLAlWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBLAk0LCAwLCBWNEwyX1NURF9QQUxfQkd8VjRMMl9TVERfTlRTQ19NLCAwLCBWNEwyX0lOX0NBUF9TVEQgfSwKKwl7IEFVWDNfWUMsCSJBVVgzIFMtVmlkZW8iLAkJVjRMMl9JTlBVVF9UWVBFX0NBTUVSQSwJNCwgMCwgVjRMMl9TVERfUEFMX0JHfFY0TDJfU1REX05UU0NfTSwgMCwgVjRMMl9JTl9DQVBfU1REIH0sCiB9OwogCiAvKiB0aGlzIGFycmF5IGhvbGRzIHRoZSBpbmZvcm1hdGlvbiwgd2hpY2ggcG9ydCBvZiB0aGUgc2FhNzE0NiBlYWNoCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAvb21hcF92b3V0LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAvb21hcF92b3V0LmMKaW5kZXggMTVmODc5My4uODNkZTk3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwL29tYXBfdm91dC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcC9vbWFwX3ZvdXQuYwpAQCAtMjIzMCw3ICsyMjMwLDYgQEAKIAogCXN0cmxjcHkodmZkLT5uYW1lLCBWT1VUX05BTUUsIHNpemVvZih2ZmQtPm5hbWUpKTsKIAotCS8qIG5lZWQgdG8gcmVnaXN0ZXIgZm9yIGEgVklEX0hBUkRXQVJFXyogSUQgaW4gdmlkZW9kZXYuaCAqLwogCXZmZC0+Zm9wcyA9ICZvbWFwX3ZvdXRfZm9wczsKIAl2ZmQtPnY0bDJfZGV2ID0gJnZvdXQtPnZpZF9kZXYtPnY0bDJfZGV2OwogCW11dGV4X2luaXQoJnZvdXQtPmxvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwMV9jYW1lcmEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDFfY2FtZXJhLmMKaW5kZXggY2JmZDA3Zi4uMGEyZmIyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwMV9jYW1lcmEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAxX2NhbWVyYS5jCkBAIC0xMzY1LDEyICsxMzY1LDEyIEBACiAJCXZpZGVvYnVmX3F1ZXVlX2RtYV9jb250aWdfaW5pdChxLCAmb21hcDFfdmlkZW9idWZfb3BzLAogCQkJCWljZC0+ZGV2LnBhcmVudCwgJnBjZGV2LT5sb2NrLAogCQkJCVY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSwgVjRMMl9GSUVMRF9OT05FLAotCQkJCXNpemVvZihzdHJ1Y3Qgb21hcDFfY2FtX2J1ZiksIGljZCwgTlVMTCk7CisJCQkJc2l6ZW9mKHN0cnVjdCBvbWFwMV9jYW1fYnVmKSwgaWNkLCAmaWNkLT52aWRlb19sb2NrKTsKIAllbHNlCiAJCXZpZGVvYnVmX3F1ZXVlX3NnX2luaXQocSwgJm9tYXAxX3ZpZGVvYnVmX29wcywKIAkJCQlpY2QtPmRldi5wYXJlbnQsICZwY2Rldi0+bG9jaywKIAkJCQlWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUsIFY0TDJfRklFTERfTk9ORSwKLQkJCQlzaXplb2Yoc3RydWN0IG9tYXAxX2NhbV9idWYpLCBpY2QsIE5VTEwpOworCQkJCXNpemVvZihzdHJ1Y3Qgb21hcDFfY2FtX2J1ZiksIGljZCwgJmljZC0+dmlkZW9fbG9jayk7CiAKIAkvKiB1c2UgdmlkZW9idWYgbW9kZSAoYXV0bylzZWxlY3RlZCB3aXRoIHRoZSBtb2R1bGUgcGFyYW1ldGVyICovCiAJcGNkZXYtPnZiX21vZGUgPSBzZ19tb2RlID8gT01BUDFfQ0FNX0RNQV9TRyA6IE9NQVAxX0NBTV9ETUFfQ09OVElHOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwMjR4eGNhbS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwMjR4eGNhbS5jCmluZGV4IDM3OGIwOTQuLjAxNzU1MjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDI0eHhjYW0uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAyNHh4Y2FtLmMKQEAgLTExOTgsNyArMTE5OCw3IEBACiAKIAlhdG9taWNfaW5jKCZjYW0tPnJlc2V0X2Rpc2FibGUpOwogCi0JZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwlmbHVzaF93b3JrX3N5bmMoJmNhbS0+c2Vuc29yX3Jlc2V0X3dvcmspOwogCiAJcnZhbCA9IHZpZGVvYnVmX3N0cmVhbW9mZihxKTsKIAlpZiAoIXJ2YWwpIHsKQEAgLTE1MTIsNyArMTUxMiw3IEBACiAKIAlhdG9taWNfaW5jKCZjYW0tPnJlc2V0X2Rpc2FibGUpOwogCi0JZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwlmbHVzaF93b3JrX3N5bmMoJmNhbS0+c2Vuc29yX3Jlc2V0X3dvcmspOwogCiAJLyogc3RvcCBzdHJlYW1pbmcgY2FwdHVyZSAqLwogCXZpZGVvYnVmX3N0cmVhbW9mZigmZmgtPnZicSk7CkBAIC0xNTM2LDcgKzE1MzYsNyBAQAogCSAqIG5vdCBiZSBzY2hlZHVsZWQgYW55bW9yZSBzaW5jZSBzdHJlYW1pbmcgaXMgYWxyZWFkeQogCSAqIGRpc2FibGVkLikKIAkgKi8KLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCWZsdXNoX3dvcmtfc3luYygmY2FtLT5zZW5zb3JfcmVzZXRfd29yayk7CiAKIAltdXRleF9sb2NrKCZjYW0tPm11dGV4KTsKIAlpZiAoYXRvbWljX2RlY19yZXR1cm4oJmNhbS0+dXNlcnMpID09IDApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3YyNjQwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL292MjY0MC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjZWEwY2YKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL292MjY0MC5jCkBAIC0wLDAgKzEsMTIwNSBAQAorLyoKKyAqIG92MjY0MCBDYW1lcmEgRHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFsYmVydG8gUGFuaXp6byA8bWFyYW1hb3BlcmNoZXNlaW1vcnRvQGdtYWlsLmNvbT4KKyAqCisgKiBCYXNlZCBvbiBvdjc3MngsIG92OTY0MCBkcml2ZXJzIGFuZCBwcmV2aW91cyBub24gbWVyZ2VkIGltcGxlbWVudGF0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgMjAwNS0yMDA5IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIE9tbmlWaXNpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1zdWJkZXYuaD4KKyNpbmNsdWRlIDxtZWRpYS9zb2NfY2FtZXJhLmg+CisjaW5jbHVkZSA8bWVkaWEvc29jX21lZGlhYnVzLmg+CisKKyNkZWZpbmUgVkFMX1NFVCh4LCBtYXNrLCByc2hpZnQsIGxzaGlmdCkgIFwKKwkJKCgoKHgpID4+IHJzaGlmdCkgJiBtYXNrKSA8PCBsc2hpZnQpCisvKgorICogRFNQIHJlZ2lzdGVycworICogcmVnaXN0ZXIgb2Zmc2V0IGZvciBCQU5LX1NFTCA9PSBCQU5LX1NFTF9EU1AKKyAqLworI2RlZmluZSBSX0JZUEFTUyAgICAweDA1IC8qIEJ5cGFzcyBEU1AgKi8KKyNkZWZpbmUgICBSX0JZUEFTU19EU1BfQllQQVMgICAgMHgwMSAvKiBCeXBhc3MgRFNQLCBzZW5zb3Igb3V0IGRpcmVjdGx5ICovCisjZGVmaW5lICAgUl9CWVBBU1NfVVNFX0RTUCAgICAgIDB4MDAgLyogVXNlIHRoZSBpbnRlcm5hbCBEU1AgKi8KKyNkZWZpbmUgUVMgICAgICAgICAgMHg0NCAvKiBRdWFudGl6YXRpb24gU2NhbGUgRmFjdG9yICovCisjZGVmaW5lIENUUkxJICAgICAgIDB4NTAKKyNkZWZpbmUgICBDVFJMSV9MUF9EUCAgICAgICAgICAgMHg4MAorI2RlZmluZSAgIENUUkxJX1JPVU5EICAgICAgICAgICAweDQwCisjZGVmaW5lICAgQ1RSTElfVl9ESVZfU0VUKHgpICAgIFZBTF9TRVQoeCwgMHgzLCAwLCAzKQorI2RlZmluZSAgIENUUkxJX0hfRElWX1NFVCh4KSAgICBWQUxfU0VUKHgsIDB4MywgMCwgMCkKKyNkZWZpbmUgSFNJWkUgICAgICAgMHg1MSAvKiBIX1NJWkVbNzowXSAocmVhbC80KSAqLworI2RlZmluZSAgIEhTSVpFX1NFVCh4KSAgICAgICAgICBWQUxfU0VUKHgsIDB4RkYsIDIsIDApCisjZGVmaW5lIFZTSVpFICAgICAgIDB4NTIgLyogVl9TSVpFWzc6MF0gKHJlYWwvNCkgKi8KKyNkZWZpbmUgICBWU0laRV9TRVQoeCkgICAgICAgICAgVkFMX1NFVCh4LCAweEZGLCAyLCAwKQorI2RlZmluZSBYT0ZGTCAgICAgICAweDUzIC8qIE9GRlNFVF9YWzc6MF0gKi8KKyNkZWZpbmUgICBYT0ZGTF9TRVQoeCkgICAgICAgICAgVkFMX1NFVCh4LCAweEZGLCAwLCAwKQorI2RlZmluZSBZT0ZGTCAgICAgICAweDU0IC8qIE9GRlNFVF9ZWzc6MF0gKi8KKyNkZWZpbmUgICBZT0ZGTF9TRVQoeCkgICAgICAgICAgVkFMX1NFVCh4LCAweEZGLCAwLCAwKQorI2RlZmluZSBWSFlYICAgICAgICAweDU1IC8qIE9mZnNldCBhbmQgc2l6ZSBjb21wbGV0aW9uICovCisjZGVmaW5lICAgVkhZWF9WU0laRV9TRVQoeCkgICAgIFZBTF9TRVQoeCwgMHgxLCAoOCsyKSwgNykKKyNkZWZpbmUgICBWSFlYX0hTSVpFX1NFVCh4KSAgICAgVkFMX1NFVCh4LCAweDEsICg4KzIpLCAzKQorI2RlZmluZSAgIFZIWVhfWU9GRl9TRVQoeCkgICAgICBWQUxfU0VUKHgsIDB4MywgOCwgNCkKKyNkZWZpbmUgICBWSFlYX1hPRkZfU0VUKHgpICAgICAgVkFMX1NFVCh4LCAweDMsIDgsIDApCisjZGVmaW5lIERQUlAgICAgICAgIDB4NTYKKyNkZWZpbmUgVEVTVCAgICAgICAgMHg1NyAvKiBIb3Jpem9udGFsIHNpemUgY29tcGxldGlvbiAqLworI2RlZmluZSAgIFRFU1RfSFNJWkVfU0VUKHgpICAgICBWQUxfU0VUKHgsIDB4MSwgKDkrMiksIDcpCisjZGVmaW5lIFpNT1cgICAgICAgIDB4NUEgLyogWm9vbTogT3V0IFdpZHRoICBPVVRXWzc6MF0gKHJlYWwvNCkgKi8KKyNkZWZpbmUgICBaTU9XX09VVFdfU0VUKHgpICAgICAgVkFMX1NFVCh4LCAweEZGLCAyLCAwKQorI2RlZmluZSBaTU9IICAgICAgICAweDVCIC8qIFpvb206IE91dCBIZWlnaHQgT1VUSFs3OjBdIChyZWFsLzQpICovCisjZGVmaW5lICAgWk1PSF9PVVRIX1NFVCh4KSAgICAgIFZBTF9TRVQoeCwgMHhGRiwgMiwgMCkKKyNkZWZpbmUgWk1ISCAgICAgICAgMHg1QyAvKiBab29tOiBTcGVlZCBhbmQgSCZXIGNvbXBsZXRpb24gKi8KKyNkZWZpbmUgICBaTUhIX1pTUEVFRF9TRVQoeCkgICAgVkFMX1NFVCh4LCAweDBGLCAwLCA0KQorI2RlZmluZSAgIFpNSEhfT1VUSF9TRVQoeCkgICAgICBWQUxfU0VUKHgsIDB4MSwgKDgrMiksIDIpCisjZGVmaW5lICAgWk1ISF9PVVRXX1NFVCh4KSAgICAgIFZBTF9TRVQoeCwgMHgzLCAoOCsyKSwgMCkKKyNkZWZpbmUgQlBBRERSICAgICAgMHg3QyAvKiBTREUgSW5kaXJlY3QgUmVnaXN0ZXIgQWNjZXNzOiBBZGRyZXNzICovCisjZGVmaW5lIEJQREFUQSAgICAgIDB4N0QgLyogU0RFIEluZGlyZWN0IFJlZ2lzdGVyIEFjY2VzczogRGF0YSAqLworI2RlZmluZSBDVFJMMiAgICAgICAweDg2IC8qIERTUCBNb2R1bGUgZW5hYmxlIDIgKi8KKyNkZWZpbmUgICBDVFJMMl9EQ1dfRU4gICAgICAgICAgMHgyMAorI2RlZmluZSAgIENUUkwyX1NERV9FTiAgICAgICAgICAweDEwCisjZGVmaW5lICAgQ1RSTDJfVVZfQURKX0VOICAgICAgIDB4MDgKKyNkZWZpbmUgICBDVFJMMl9VVl9BVkdfRU4gICAgICAgMHgwNAorI2RlZmluZSAgIENUUkwyX0NNWF9FTiAgICAgICAgICAweDAxCisjZGVmaW5lIENUUkwzICAgICAgIDB4ODcgLyogRFNQIE1vZHVsZSBlbmFibGUgMyAqLworI2RlZmluZSAgIENUUkwzX0JQQ19FTiAgICAgICAgICAweDgwCisjZGVmaW5lICAgQ1RSTDNfV1BDX0VOICAgICAgICAgIDB4NDAKKyNkZWZpbmUgU0laRUwgICAgICAgMHg4QyAvKiBJbWFnZSBTaXplIENvbXBsZXRpb24gKi8KKyNkZWZpbmUgICBTSVpFTF9IU0laRThfMTFfU0VUKHgpIFZBTF9TRVQoeCwgMHgxLCAxMSwgNikKKyNkZWZpbmUgICBTSVpFTF9IU0laRThfU0VUKHgpICAgIFZBTF9TRVQoeCwgMHg3LCAwLCAzKQorI2RlZmluZSAgIFNJWkVMX1ZTSVpFOF9TRVQoeCkgICAgVkFMX1NFVCh4LCAweDcsIDAsIDApCisjZGVmaW5lIEhTSVpFOCAgICAgIDB4QzAgLyogSW1hZ2UgSG9yaXpvbnRhbCBTaXplIEhTSVpFWzEwOjNdICovCisjZGVmaW5lICAgSFNJWkU4X1NFVCh4KSAgICAgICAgIFZBTF9TRVQoeCwgMHhGRiwgMywgMCkKKyNkZWZpbmUgVlNJWkU4ICAgICAgMHhDMSAvKiBJbWFnZSBWZXJ0aWNhbCBTaXplIFZTSVpFWzEwOjNdICovCisjZGVmaW5lICAgVlNJWkU4X1NFVCh4KSAgICAgICAgIFZBTF9TRVQoeCwgMHhGRiwgMywgMCkKKyNkZWZpbmUgQ1RSTDAgICAgICAgMHhDMiAvKiBEU1AgTW9kdWxlIGVuYWJsZSAwICovCisjZGVmaW5lICAgQ1RSTDBfQUVDX0VOICAgICAgIDB4ODAKKyNkZWZpbmUgICBDVFJMMF9BRUNfU0VMICAgICAgMHg0MAorI2RlZmluZSAgIENUUkwwX1NUQVRfU0VMICAgICAweDIwCisjZGVmaW5lICAgQ1RSTDBfVkZJUlNUICAgICAgIDB4MTAKKyNkZWZpbmUgICBDVFJMMF9ZVVY0MjIgICAgICAgMHgwOAorI2RlZmluZSAgIENUUkwwX1lVVl9FTiAgICAgICAweDA0CisjZGVmaW5lICAgQ1RSTDBfUkdCX0VOICAgICAgIDB4MDIKKyNkZWZpbmUgICBDVFJMMF9SQVdfRU4gICAgICAgMHgwMQorI2RlZmluZSBDVFJMMSAgICAgICAweEMzIC8qIERTUCBNb2R1bGUgZW5hYmxlIDEgKi8KKyNkZWZpbmUgICBDVFJMMV9DSVAgICAgICAgICAgMHg4MAorI2RlZmluZSAgIENUUkwxX0RNWSAgICAgICAgICAweDQwCisjZGVmaW5lICAgQ1RSTDFfUkFXX0dNQSAgICAgIDB4MjAKKyNkZWZpbmUgICBDVFJMMV9ERyAgICAgICAgICAgMHgxMAorI2RlZmluZSAgIENUUkwxX0FXQiAgICAgICAgICAweDA4CisjZGVmaW5lICAgQ1RSTDFfQVdCX0dBSU4gICAgIDB4MDQKKyNkZWZpbmUgICBDVFJMMV9MRU5DICAgICAgICAgMHgwMgorI2RlZmluZSAgIENUUkwxX1BSRSAgICAgICAgICAweDAxCisjZGVmaW5lIFJfRFZQX1NQICAgIDB4RDMgLyogRFZQIG91dHB1dCBzcGVlZCBjb250cm9sICovCisjZGVmaW5lICAgUl9EVlBfU1BfQVVUT19NT0RFIDB4ODAKKyNkZWZpbmUgICBSX0RWUF9TUF9EVlBfTUFTSyAgMHgzRiAvKiBEVlAgUENMSyA9IHN5c2NsayAoNDgpL1s2OjBdIChZVVYwKTsKKwkJCQkgICAqICAgICAgICAgID0gc3lzY2xrICg0OCkvKDIqWzY6MF0pIChSQVcpOyovCisjZGVmaW5lIElNQUdFX01PREUgIDB4REEgLyogSW1hZ2UgT3V0cHV0IEZvcm1hdCBTZWxlY3QgKi8KKyNkZWZpbmUgICBJTUFHRV9NT0RFX1k4X0RWUF9FTiAgIDB4NDAKKyNkZWZpbmUgICBJTUFHRV9NT0RFX0pQRUdfRU4gICAgIDB4MTAKKyNkZWZpbmUgICBJTUFHRV9NT0RFX1lVVjQyMiAgICAgIDB4MDAKKyNkZWZpbmUgICBJTUFHRV9NT0RFX1JBVzEwICAgICAgIDB4MDQgLyogKERWUCkgKi8KKyNkZWZpbmUgICBJTUFHRV9NT0RFX1JHQjU2NSAgICAgIDB4MDgKKyNkZWZpbmUgICBJTUFHRV9NT0RFX0hSRUZfVlNZTkMgIDB4MDIgLyogSFJFRiB0aW1pbmcgc2VsZWN0IGluIERWUCBKUEVHIG91dHB1dAorCQkJCSAgICAgICAqIG1vZGUgKDAgZm9yIEhSRUYgaXMgc2FtZSBhcyBzZW5zb3IpICovCisjZGVmaW5lICAgSU1BR0VfTU9ERV9MQllURV9GSVJTVCAweDAxIC8qIEJ5dGUgc3dhcCBlbmFibGUgZm9yIERWUAorCQkJCSAgICAgICAqICAgIDE6IExvdyBieXRlIGZpcnN0IFVZVlkgKEMyWzRdID0wKQorCQkJCSAgICAgICAqICAgICAgICBWWVVZIChDMls0XSA9MSkKKwkJCQkgICAgICAgKiAgICAwOiBIaWdoIGJ5dGUgZmlyc3QgWVVZViAoQzJbNF09MCkKKwkJCQkgICAgICAgKiAgICAgICAgWVZZVSAoQzJbNF0gPSAxKSAqLworI2RlZmluZSBSRVNFVCAgICAgICAweEUwIC8qIFJlc2V0ICovCisjZGVmaW5lICAgUkVTRVRfTUlDUk9DICAgICAgIDB4NDAKKyNkZWZpbmUgICBSRVNFVF9TQ0NCICAgICAgICAgMHgyMAorI2RlZmluZSAgIFJFU0VUX0pQRUcgICAgICAgICAweDEwCisjZGVmaW5lICAgUkVTRVRfRFZQICAgICAgICAgIDB4MDQKKyNkZWZpbmUgICBSRVNFVF9JUFUgICAgICAgICAgMHgwMgorI2RlZmluZSAgIFJFU0VUX0NJRiAgICAgICAgICAweDAxCisjZGVmaW5lIFJFR0VEICAgICAgIDB4RUQgLyogUmVnaXN0ZXIgRUQgKi8KKyNkZWZpbmUgICBSRUdFRF9DTEtfT1VUX0RJUyAgMHgxMAorI2RlZmluZSBNU19TUCAgICAgICAweEYwIC8qIFNDQ0IgTWFzdGVyIFNwZWVkICovCisjZGVmaW5lIFNTX0lEICAgICAgIDB4RjcgLyogU0NDQiBTbGF2ZSBJRCAqLworI2RlZmluZSBTU19DVFJMICAgICAweEY4IC8qIFNDQ0IgU2xhdmUgQ29udHJvbCAqLworI2RlZmluZSAgIFNTX0NUUkxfQUREX0FVVE9fSU5DICAweDIwCisjZGVmaW5lICAgU1NfQ1RSTF9FTiAgICAgICAgICAgIDB4MDgKKyNkZWZpbmUgICBTU19DVFJMX0RFTEFZX0NMSyAgICAgMHgwNAorI2RlZmluZSAgIFNTX0NUUkxfQUNDX0VOICAgICAgICAweDAyCisjZGVmaW5lICAgU1NfQ1RSTF9TRU5fUEFTU19USFIgIDB4MDEKKyNkZWZpbmUgTUNfQklTVCAgICAgMHhGOSAvKiBNaWNyb2NvbnRyb2xsZXIgbWlzYyByZWdpc3RlciAqLworI2RlZmluZSAgIE1DX0JJU1RfUkVTRVQgICAgICAgICAgIDB4ODAgLyogTWljcm9jb250cm9sbGVyIFJlc2V0ICovCisjZGVmaW5lICAgTUNfQklTVF9CT09UX1JPTV9TRUwgICAgMHg0MAorI2RlZmluZSAgIE1DX0JJU1RfMTJLQl9TRUwgICAgICAgIDB4MjAKKyNkZWZpbmUgICBNQ19CSVNUXzEyS0JfTUFTSyAgICAgICAweDMwCisjZGVmaW5lICAgTUNfQklTVF81MTJLQl9TRUwgICAgICAgMHgwOAorI2RlZmluZSAgIE1DX0JJU1RfNTEyS0JfTUFTSyAgICAgIDB4MEMKKyNkZWZpbmUgICBNQ19CSVNUX0JVU1lfQklUX1IgICAgICAweDAyCisjZGVmaW5lICAgTUNfQklTVF9NQ19SRVNfT05FX1NIX1cgMHgwMgorI2RlZmluZSAgIE1DX0JJU1RfTEFVTkNIICAgICAgICAgIDB4MDEKKyNkZWZpbmUgQkFOS19TRUwgICAgMHhGRiAvKiBSZWdpc3RlciBCYW5rIFNlbGVjdCAqLworI2RlZmluZSAgIEJBTktfU0VMX0RTUCAgICAgMHgwMAorI2RlZmluZSAgIEJBTktfU0VMX1NFTlMgICAgMHgwMQorCisvKgorICogU2Vuc29yIHJlZ2lzdGVycworICogcmVnaXN0ZXIgb2Zmc2V0IGZvciBCQU5LX1NFTCA9PSBCQU5LX1NFTF9TRU5TCisgKi8KKyNkZWZpbmUgR0FJTiAgICAgICAgMHgwMCAvKiBBR0MgLSBHYWluIGNvbnRyb2wgZ2FpbiBzZXR0aW5nICovCisjZGVmaW5lIENPTTEgICAgICAgIDB4MDMgLyogQ29tbW9uIGNvbnRyb2wgMSAqLworI2RlZmluZSAgIENPTTFfMV9EVU1NWV9GUiAgICAgICAgICAweDQwCisjZGVmaW5lICAgQ09NMV8zX0RVTU1ZX0ZSICAgICAgICAgIDB4ODAKKyNkZWZpbmUgICBDT00xXzdfRFVNTVlfRlIgICAgICAgICAgMHhDMAorI2RlZmluZSAgIENPTTFfVldJTl9MU0JfVVhHQSAgICAgICAweDBGCisjZGVmaW5lICAgQ09NMV9WV0lOX0xTQl9TVkdBICAgICAgIDB4MEEKKyNkZWZpbmUgICBDT00xX1ZXSU5fTFNCX0NJRiAgICAgICAgMHgwNgorI2RlZmluZSBSRUcwNCAgICAgICAweDA0IC8qIFJlZ2lzdGVyIDA0ICovCisjZGVmaW5lICAgUkVHMDRfREVGICAgICAgICAgICAgIDB4MjAgLyogQWx3YXlzIHNldCAqLworI2RlZmluZSAgIFJFRzA0X0hGTElQX0lNRyAgICAgICAweDgwIC8qIEhvcml6b250YWwgbWlycm9yIGltYWdlIE9OL09GRiAqLworI2RlZmluZSAgIFJFRzA0X1ZGTElQX0lNRyAgICAgICAweDQwIC8qIFZlcnRpY2FsIGZsaXAgaW1hZ2UgT04vT0ZGICovCisjZGVmaW5lICAgUkVHMDRfVlJFRl9FTiAgICAgICAgIDB4MTAKKyNkZWZpbmUgICBSRUcwNF9IUkVGX0VOICAgICAgICAgMHgwOAorI2RlZmluZSAgIFJFRzA0X0FFQ19TRVQoeCkgICAgICBWQUxfU0VUKHgsIDB4MywgMCwgMCkKKyNkZWZpbmUgUkVHMDggICAgICAgMHgwOCAvKiBGcmFtZSBFeHBvc3VyZSBPbmUtcGluIENvbnRyb2wgUHJlLWNoYXJnZSBSb3cgTnVtICovCisjZGVmaW5lIENPTTIgICAgICAgIDB4MDkgLyogQ29tbW9uIGNvbnRyb2wgMiAqLworI2RlZmluZSAgIENPTTJfU09GVF9TTEVFUF9NT0RFICAweDEwIC8qIFNvZnQgc2xlZXAgbW9kZSAqLworCQkJCSAgICAgLyogT3V0cHV0IGRyaXZlIGNhcGFiaWxpdHkgKi8KKyNkZWZpbmUgICBDT00yX09DQVBfTnhfU0VUKE4pICAgKCgoTikgLSAxKSAmIDB4MDMpIC8qIE4gPSBbMXggLi4gNHhdICovCisjZGVmaW5lIFBJRCAgICAgICAgIDB4MEEgLyogUHJvZHVjdCBJRCBOdW1iZXIgTVNCICovCisjZGVmaW5lIFZFUiAgICAgICAgIDB4MEIgLyogUHJvZHVjdCBJRCBOdW1iZXIgTFNCICovCisjZGVmaW5lIENPTTMgICAgICAgIDB4MEMgLyogQ29tbW9uIGNvbnRyb2wgMyAqLworI2RlZmluZSAgIENPTTNfQkFORF81MEggICAgICAgIDB4MDQgLyogMCBGb3IgQmFuZGluZyBhdCA2MEggKi8KKyNkZWZpbmUgICBDT00zX0JBTkRfQVVUTyAgICAgICAweDAyIC8qIEF1dG8gQmFuZGluZyAqLworI2RlZmluZSAgIENPTTNfU0lOR19GUl9TTkFQU0ggIDB4MDEgLyogMCBGb3IgZW5hYmxlIGxpdmUgdmlkZW8gb3V0cHV0IGFmdGVyIHRoZQorCQkJCSAgICAgKiBzbmFwc2hvdCBzZXF1ZW5jZSovCisjZGVmaW5lIEFFQyAgICAgICAgIDB4MTAgLyogQUVDWzk6Ml0gRXhwb3N1cmUgVmFsdWUgKi8KKyNkZWZpbmUgQ0xLUkMgICAgICAgMHgxMSAvKiBJbnRlcm5hbCBjbG9jayAqLworI2RlZmluZSAgIENMS1JDX0VOICAgICAgICAgICAgIDB4ODAKKyNkZWZpbmUgICBDTEtSQ19ESVZfU0VUKHgpICAgICAoKCh4KSAtIDEpICYgMHgxRikgLyogQ0xLID0gWFZDTEsvKHgpICovCisjZGVmaW5lIENPTTcgICAgICAgIDB4MTIgLyogQ29tbW9uIGNvbnRyb2wgNyAqLworI2RlZmluZSAgIENPTTdfU1JTVCAgICAgICAgICAgIDB4ODAgLyogSW5pdGlhdGVzIHN5c3RlbSByZXNldC4gQWxsIHJlZ2lzdGVycyBhcmUKKwkJCQkgICAgICogc2V0IHRvIGZhY3RvcnkgZGVmYXVsdCB2YWx1ZXMgYWZ0ZXIgd2hpY2gKKwkJCQkgICAgICogdGhlIGNoaXAgcmVzdW1lcyBub3JtYWwgb3BlcmF0aW9uICovCisjZGVmaW5lICAgQ09NN19SRVNfVVhHQSAgICAgICAgMHgwMCAvKiBSZXNvbHV0aW9uIHNlbGVjdG9ycyBmb3IgVVhHQSAqLworI2RlZmluZSAgIENPTTdfUkVTX1NWR0EgICAgICAgIDB4NDAgLyogU1ZHQSAqLworI2RlZmluZSAgIENPTTdfUkVTX0NJRiAgICAgICAgIDB4MjAgLyogQ0lGICovCisjZGVmaW5lICAgQ09NN19aT09NX0VOICAgICAgICAgMHgwNCAvKiBFbmFibGUgWm9vbSBtb2RlICovCisjZGVmaW5lICAgQ09NN19DT0xPUl9CQVJfVEVTVCAgMHgwMiAvKiBFbmFibGUgQ29sb3IgQmFyIFRlc3QgUGF0dGVybiAqLworI2RlZmluZSBDT004ICAgICAgICAweDEzIC8qIENvbW1vbiBjb250cm9sIDggKi8KKyNkZWZpbmUgICBDT004X0RFRiAgICAgICAgICAgICAweEMwIC8qIEJhbmRpbmcgZmlsdGVyIE9OL09GRiAqLworI2RlZmluZSAgIENPTThfQk5ERl9FTiAgICAgICAgIDB4MjAgLyogQmFuZGluZyBmaWx0ZXIgT04vT0ZGICovCisjZGVmaW5lICAgQ09NOF9BR0NfRU4gICAgICAgICAgMHgwNCAvKiBBR0MgQXV0by9NYW51YWwgY29udHJvbCBzZWxlY3Rpb24gKi8KKyNkZWZpbmUgICBDT004X0FFQ19FTiAgICAgICAgICAweDAxIC8qIEF1dG8vTWFudWFsIEV4cG9zdXJlIGNvbnRyb2wgKi8KKyNkZWZpbmUgQ09NOSAgICAgICAgMHgxNCAvKiBDb21tb24gY29udHJvbCA5CisJCQkgICogQXV0b21hdGljIGdhaW4gY2VpbGluZyAtIG1heGltdW0gQUdDIHZhbHVlIFs3OjVdKi8KKyNkZWZpbmUgICBDT005X0FHQ19HQUlOXzJ4ICAgICAweDAwIC8qIDAwMCA6ICAgMnggKi8KKyNkZWZpbmUgICBDT005X0FHQ19HQUlOXzR4ICAgICAweDIwIC8qIDAwMSA6ICAgNHggKi8KKyNkZWZpbmUgICBDT005X0FHQ19HQUlOXzh4ICAgICAweDQwIC8qIDAxMCA6ICAgOHggKi8KKyNkZWZpbmUgICBDT005X0FHQ19HQUlOXzE2eCAgICAweDYwIC8qIDAxMSA6ICAxNnggKi8KKyNkZWZpbmUgICBDT005X0FHQ19HQUlOXzMyeCAgICAweDgwIC8qIDEwMCA6ICAzMnggKi8KKyNkZWZpbmUgICBDT005X0FHQ19HQUlOXzY0eCAgICAweEEwIC8qIDEwMSA6ICA2NHggKi8KKyNkZWZpbmUgICBDT005X0FHQ19HQUlOXzEyOHggICAweEMwIC8qIDExMCA6IDEyOHggKi8KKyNkZWZpbmUgQ09NMTAgICAgICAgMHgxNSAvKiBDb21tb24gY29udHJvbCAxMCAqLworI2RlZmluZSAgIENPTTEwX1BDTEtfSFJFRiAgICAgIDB4MjAgLyogUENMSyBvdXRwdXQgcXVhbGlmaWVkIGJ5IEhSRUYgKi8KKyNkZWZpbmUgICBDT00xMF9QQ0xLX1JJU0UgICAgICAweDEwIC8qIERhdGEgaXMgdXBkYXRlZCBhdCB0aGUgcmlzaW5nIGVkZ2Ugb2YKKwkJCQkgICAgICogUENMSyAodXNlciBjYW4gbGF0Y2ggZGF0YSBhdCB0aGUgbmV4dAorCQkJCSAgICAgKiBmYWxsaW5nIGVkZ2Ugb2YgUENMSykuCisJCQkJICAgICAqIDAgb3RoZXJ3aXNlLiAqLworI2RlZmluZSAgIENPTTEwX0hSRUZfSU5WICAgICAgIDB4MDggLyogSW52ZXJ0IEhSRUYgcG9sYXJpdHk6CisJCQkJICAgICAqIEhSRUYgbmVnYXRpdmUgZm9yIHZhbGlkIGRhdGEqLworI2RlZmluZSAgIENPTTEwX1ZTSU5DX0lOViAgICAgIDB4MDIgLyogSW52ZXJ0IFZTWU5DIHBvbGFyaXR5ICovCisjZGVmaW5lIEhTVEFSVCAgICAgIDB4MTcgLyogSG9yaXpvbnRhbCBXaW5kb3cgc3RhcnQgTVNCIDggYml0ICovCisjZGVmaW5lIEhFTkQgICAgICAgIDB4MTggLyogSG9yaXpvbnRhbCBXaW5kb3cgZW5kIE1TQiA4IGJpdCAqLworI2RlZmluZSBWU1RBUlQgICAgICAweDE5IC8qIFZlcnRpY2FsIFdpbmRvdyBzdGFydCBNU0IgOCBiaXQgKi8KKyNkZWZpbmUgVkVORCAgICAgICAgMHgxQSAvKiBWZXJ0aWNhbCBXaW5kb3cgZW5kIE1TQiA4IGJpdCAqLworI2RlZmluZSBNSURIICAgICAgICAweDFDIC8qIE1hbnVmYWN0dXJlciBJRCBieXRlIC0gaGlnaCAqLworI2RlZmluZSBNSURMICAgICAgICAweDFEIC8qIE1hbnVmYWN0dXJlciBJRCBieXRlIC0gbG93ICAqLworI2RlZmluZSBBRVcgICAgICAgICAweDI0IC8qIEFHQy9BRUMgLSBTdGFibGUgb3BlcmF0aW5nIHJlZ2lvbiAodXBwZXIgbGltaXQpICovCisjZGVmaW5lIEFFQiAgICAgICAgIDB4MjUgLyogQUdDL0FFQyAtIFN0YWJsZSBvcGVyYXRpbmcgcmVnaW9uIChsb3dlciBsaW1pdCkgKi8KKyNkZWZpbmUgVlYgICAgICAgICAgMHgyNiAvKiBBR0MvQUVDIEZhc3QgbW9kZSBvcGVyYXRpbmcgcmVnaW9uICovCisjZGVmaW5lICAgVlZfSElHSF9USF9TRVQoeCkgICAgICBWQUxfU0VUKHgsIDB4RiwgMCwgNCkKKyNkZWZpbmUgICBWVl9MT1dfVEhfU0VUKHgpICAgICAgIFZBTF9TRVQoeCwgMHhGLCAwLCAwKQorI2RlZmluZSBSRUcyQSAgICAgICAweDJBIC8qIER1bW15IHBpeGVsIGluc2VydCBNU0IgKi8KKyNkZWZpbmUgRlJBUkwgICAgICAgMHgyQiAvKiBEdW1teSBwaXhlbCBpbnNlcnQgTFNCICovCisjZGVmaW5lIEFERFZGTCAgICAgIDB4MkQgLyogTFNCIG9mIGluc2VydCBkdW1teSBsaW5lcyBpbiBWZXJ0aWNhbCBkaXJlY3Rpb24gKi8KKyNkZWZpbmUgQUREVkZIICAgICAgMHgyRSAvKiBNU0Igb2YgaW5zZXJ0IGR1bW15IGxpbmVzIGluIFZlcnRpY2FsIGRpcmVjdGlvbiAqLworI2RlZmluZSBZQVZHICAgICAgICAweDJGIC8qIFkvRyBDaGFubmVsIEF2ZXJhZ2UgdmFsdWUgKi8KKyNkZWZpbmUgUkVHMzIgICAgICAgMHgzMiAvKiBDb21tb24gQ29udHJvbCAzMiAqLworI2RlZmluZSAgIFJFRzMyX1BDTEtfRElWXzIgICAgMHg4MCAvKiBQQ0xLIGZyZXEgZGl2aWRlZCBieSAyICovCisjZGVmaW5lICAgUkVHMzJfUENMS19ESVZfNCAgICAweEMwIC8qIFBDTEsgZnJlcSBkaXZpZGVkIGJ5IDQgKi8KKyNkZWZpbmUgQVJDT00yICAgICAgMHgzNCAvKiBab29tOiBIb3Jpem9udGFsIHN0YXJ0IHBvaW50ICovCisjZGVmaW5lIFJFRzQ1ICAgICAgIDB4NDUgLyogUmVnaXN0ZXIgNDUgKi8KKyNkZWZpbmUgRkxMICAgICAgICAgMHg0NiAvKiBGcmFtZSBMZW5ndGggQWRqdXN0bWVudCBMU0JzICovCisjZGVmaW5lIEZMSCAgICAgICAgIDB4NDcgLyogRnJhbWUgTGVuZ3RoIEFkanVzdG1lbnQgTVNCcyAqLworI2RlZmluZSBDT00xOSAgICAgICAweDQ4IC8qIFpvb206IFZlcnRpY2FsIHN0YXJ0IHBvaW50ICovCisjZGVmaW5lIFpPT01TICAgICAgIDB4NDkgLyogWm9vbTogVmVydGljYWwgc3RhcnQgcG9pbnQgKi8KKyNkZWZpbmUgQ09NMjIgICAgICAgMHg0QiAvKiBGbGFzaCBsaWdodCBjb250cm9sICovCisjZGVmaW5lIENPTTI1ICAgICAgIDB4NEUgLyogRm9yIEJhbmRpbmcgb3BlcmF0aW9ucyAqLworI2RlZmluZSBCRDUwICAgICAgICAweDRGIC8qIDUwSHogQmFuZGluZyBBRUMgOCBMU0JzICovCisjZGVmaW5lIEJENjAgICAgICAgIDB4NTAgLyogNjBIeiBCYW5kaW5nIEFFQyA4IExTQnMgKi8KKyNkZWZpbmUgUkVHNUQgICAgICAgMHg1RCAvKiBBVkdzZWxbNzowXSwgICAxNi16b25lIGF2ZXJhZ2Ugd2VpZ2h0IG9wdGlvbiAqLworI2RlZmluZSBSRUc1RSAgICAgICAweDVFIC8qIEFWR3NlbFsxNTo4XSwgIDE2LXpvbmUgYXZlcmFnZSB3ZWlnaHQgb3B0aW9uICovCisjZGVmaW5lIFJFRzVGICAgICAgIDB4NUYgLyogQVZHc2VsWzIzOjE2XSwgMTYtem9uZSBhdmVyYWdlIHdlaWdodCBvcHRpb24gKi8KKyNkZWZpbmUgUkVHNjAgICAgICAgMHg2MCAvKiBBVkdzZWxbMzE6MjRdLCAxNi16b25lIGF2ZXJhZ2Ugd2VpZ2h0IG9wdGlvbiAqLworI2RlZmluZSBISVNUT19MT1cgICAweDYxIC8qIEhpc3RvZ3JhbSBBbGdvcml0aG0gTG93IExldmVsICovCisjZGVmaW5lIEhJU1RPX0hJR0ggIDB4NjIgLyogSGlzdG9ncmFtIEFsZ29yaXRobSBIaWdoIExldmVsICovCisKKy8qCisgKiBJRAorICovCisjZGVmaW5lIE1BTlVGQUNUVVJFUl9JRAkweDdGQTIKKyNkZWZpbmUgUElEX09WMjY0MAkweDI2NDIKKyNkZWZpbmUgVkVSU0lPTihwaWQsIHZlcikgKChwaWQgPDwgOCkgfCAodmVyICYgMHhGRikpCisKKy8qCisgKiBTdHJ1Y3QKKyAqLworc3RydWN0IHJlZ3ZhbF9saXN0IHsKKwl1OCByZWdfbnVtOworCXU4IHZhbHVlOworfTsKKworLyogU3VwcG9ydGVkIHJlc29sdXRpb25zICovCitlbnVtIG92MjY0MF93aWR0aCB7CisJV19RQ0lGCT0gMTc2LAorCVdfUVZHQQk9IDMyMCwKKwlXX0NJRgk9IDM1MiwKKwlXX1ZHQQk9IDY0MCwKKwlXX1NWR0EJPSA4MDAsCisJV19YR0EJPSAxMDI0LAorCVdfU1hHQQk9IDEyODAsCisJV19VWEdBCT0gMTYwMCwKK307CisKK2VudW0gb3YyNjQwX2hlaWdodCB7CisJSF9RQ0lGCT0gMTQ0LAorCUhfUVZHQQk9IDI0MCwKKwlIX0NJRgk9IDI4OCwKKwlIX1ZHQQk9IDQ4MCwKKwlIX1NWR0EJPSA2MDAsCisJSF9YR0EJPSA3NjgsCisJSF9TWEdBCT0gMTAyNCwKKwlIX1VYR0EJPSAxMjAwLAorfTsKKworc3RydWN0IG92MjY0MF93aW5fc2l6ZSB7CisJY2hhcgkJCQkqbmFtZTsKKwllbnVtIG92MjY0MF93aWR0aAkJd2lkdGg7CisJZW51bSBvdjI2NDBfaGVpZ2h0CQloZWlnaHQ7CisJY29uc3Qgc3RydWN0IHJlZ3ZhbF9saXN0CSpyZWdzOworfTsKKworCitzdHJ1Y3Qgb3YyNjQwX3ByaXYgeworCXN0cnVjdCB2NGwyX3N1YmRldgkJc3ViZGV2OworCXN0cnVjdCBvdjI2NDBfY2FtZXJhX2luZm8JKmluZm87CisJZW51bSB2NGwyX21idXNfcGl4ZWxjb2RlCWNmbXRfY29kZTsKKwljb25zdCBzdHJ1Y3Qgb3YyNjQwX3dpbl9zaXplCSp3aW47CisJaW50CQkJCW1vZGVsOworCXUxNgkJCQlmbGFnX3ZmbGlwOjE7CisJdTE2CQkJCWZsYWdfaGZsaXA6MTsKK307CisKKy8qCisgKiBSZWdpc3RlcnMgc2V0dGluZ3MKKyAqLworCisjZGVmaW5lIEVORE1BUktFUiB7IDB4ZmYsIDB4ZmYgfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ3ZhbF9saXN0IG92MjY0MF9pbml0X3JlZ3NbXSA9IHsKKwl7IEJBTktfU0VMLCBCQU5LX1NFTF9EU1AgfSwKKwl7IDB4MmMsICAgMHhmZiB9LAorCXsgMHgyZSwgICAweGRmIH0sCisJeyBCQU5LX1NFTCwgQkFOS19TRUxfU0VOUyB9LAorCXsgMHgzYywgICAweDMyIH0sCisJeyBDTEtSQywgQ0xLUkNfRElWX1NFVCgxKSB9LAorCXsgQ09NMiwgQ09NMl9PQ0FQX054X1NFVCgzKSB9LAorCXsgUkVHMDQsIFJFRzA0X0RFRiB8IFJFRzA0X0hSRUZfRU4gfSwKKwl7IENPTTgsICBDT004X0RFRiB8IENPTThfQk5ERl9FTiB8IENPTThfQUdDX0VOIHwgQ09NOF9BRUNfRU4gfSwKKwl7IENPTTksIENPTTlfQUdDX0dBSU5fOHggfCAweDA4fSwKKwl7IDB4MmMsICAgMHgwYyB9LAorCXsgMHgzMywgICAweDc4IH0sCisJeyAweDNhLCAgIDB4MzMgfSwKKwl7IDB4M2IsICAgMHhmYiB9LAorCXsgMHgzZSwgICAweDAwIH0sCisJeyAweDQzLCAgIDB4MTEgfSwKKwl7IDB4MTYsICAgMHgxMCB9LAorCXsgMHgzOSwgICAweDAyIH0sCisJeyAweDM1LCAgIDB4ODggfSwKKwl7IDB4MjIsICAgMHgwYSB9LAorCXsgMHgzNywgICAweDQwIH0sCisJeyAweDIzLCAgIDB4MDAgfSwKKwl7IEFSQ09NMiwgMHhhMCB9LAorCXsgMHgwNiwgICAweDAyIH0sCisJeyAweDA2LCAgIDB4ODggfSwKKwl7IDB4MDcsICAgMHhjMCB9LAorCXsgMHgwZCwgICAweGI3IH0sCisJeyAweDBlLCAgIDB4MDEgfSwKKwl7IDB4NGMsICAgMHgwMCB9LAorCXsgMHg0YSwgICAweDgxIH0sCisJeyAweDIxLCAgIDB4OTkgfSwKKwl7IEFFVywgICAgMHg0MCB9LAorCXsgQUVCLCAgICAweDM4IH0sCisJeyBWViwgICAgIFZWX0hJR0hfVEhfU0VUKDB4MDgpIHwgVlZfTE9XX1RIX1NFVCgweDAyKSB9LAorCXsgMHg1YywgICAweDAwIH0sCisJeyAweDYzLCAgIDB4MDAgfSwKKwl7IEZMTCwgICAgMHgyMiB9LAorCXsgQ09NMywgICAweDM4IHwgQ09NM19CQU5EX0FVVE8gfSwKKwl7IFJFRzVELCAgMHg1NSB9LAorCXsgUkVHNUUsICAweDdkIH0sCisJeyBSRUc1RiwgIDB4N2QgfSwKKwl7IFJFRzYwLCAgMHg1NSB9LAorCXsgSElTVE9fTE9XLCAgIDB4NzAgfSwKKwl7IEhJU1RPX0hJR0gsICAweDgwIH0sCisJeyAweDdjLCAgIDB4MDUgfSwKKwl7IDB4MjAsICAgMHg4MCB9LAorCXsgMHgyOCwgICAweDMwIH0sCisJeyAweDZjLCAgIDB4MDAgfSwKKwl7IDB4NmQsICAgMHg4MCB9LAorCXsgMHg2ZSwgICAweDAwIH0sCisJeyAweDcwLCAgIDB4MDIgfSwKKwl7IDB4NzEsICAgMHg5NCB9LAorCXsgMHg3MywgICAweGMxIH0sCisJeyAweDNkLCAgIDB4MzQgfSwKKwl7IENPTTcsIENPTTdfUkVTX1VYR0EgfCBDT003X1pPT01fRU4gfSwKKwl7IDB4NWEsICAgMHg1NyB9LAorCXsgQkQ1MCwgICAweGJiIH0sCisJeyBCRDYwLCAgIDB4OWMgfSwKKwl7IEJBTktfU0VMLCBCQU5LX1NFTF9EU1AgfSwKKwl7IDB4ZTUsICAgMHg3ZiB9LAorCXsgTUNfQklTVCwgTUNfQklTVF9SRVNFVCB8IE1DX0JJU1RfQk9PVF9ST01fU0VMIH0sCisJeyAweDQxLCAgIDB4MjQgfSwKKwl7IFJFU0VULCBSRVNFVF9KUEVHIHwgUkVTRVRfRFZQIH0sCisJeyAweDc2LCAgIDB4ZmYgfSwKKwl7IDB4MzMsICAgMHhhMCB9LAorCXsgMHg0MiwgICAweDIwIH0sCisJeyAweDQzLCAgIDB4MTggfSwKKwl7IDB4NGMsICAgMHgwMCB9LAorCXsgQ1RSTDMsIENUUkwzX0JQQ19FTiB8IENUUkwzX1dQQ19FTiB8IDB4MTAgfSwKKwl7IDB4ODgsICAgMHgzZiB9LAorCXsgMHhkNywgICAweDAzIH0sCisJeyAweGQ5LCAgIDB4MTAgfSwKKwl7IFJfRFZQX1NQICwgUl9EVlBfU1BfQVVUT19NT0RFIHwgMHgyIH0sCisJeyAweGM4LCAgIDB4MDggfSwKKwl7IDB4YzksICAgMHg4MCB9LAorCXsgQlBBRERSLCAweDAwIH0sCisJeyBCUERBVEEsIDB4MDAgfSwKKwl7IEJQQUREUiwgMHgwMyB9LAorCXsgQlBEQVRBLCAweDQ4IH0sCisJeyBCUERBVEEsIDB4NDggfSwKKwl7IEJQQUREUiwgMHgwOCB9LAorCXsgQlBEQVRBLCAweDIwIH0sCisJeyBCUERBVEEsIDB4MTAgfSwKKwl7IEJQREFUQSwgMHgwZSB9LAorCXsgMHg5MCwgICAweDAwIH0sCisJeyAweDkxLCAgIDB4MGUgfSwKKwl7IDB4OTEsICAgMHgxYSB9LAorCXsgMHg5MSwgICAweDMxIH0sCisJeyAweDkxLCAgIDB4NWEgfSwKKwl7IDB4OTEsICAgMHg2OSB9LAorCXsgMHg5MSwgICAweDc1IH0sCisJeyAweDkxLCAgIDB4N2UgfSwKKwl7IDB4OTEsICAgMHg4OCB9LAorCXsgMHg5MSwgICAweDhmIH0sCisJeyAweDkxLCAgIDB4OTYgfSwKKwl7IDB4OTEsICAgMHhhMyB9LAorCXsgMHg5MSwgICAweGFmIH0sCisJeyAweDkxLCAgIDB4YzQgfSwKKwl7IDB4OTEsICAgMHhkNyB9LAorCXsgMHg5MSwgICAweGU4IH0sCisJeyAweDkxLCAgIDB4MjAgfSwKKwl7IDB4OTIsICAgMHgwMCB9LAorCXsgMHg5MywgICAweDA2IH0sCisJeyAweDkzLCAgIDB4ZTMgfSwKKwl7IDB4OTMsICAgMHgwMyB9LAorCXsgMHg5MywgICAweDAzIH0sCisJeyAweDkzLCAgIDB4MDAgfSwKKwl7IDB4OTMsICAgMHgwMiB9LAorCXsgMHg5MywgICAweDAwIH0sCisJeyAweDkzLCAgIDB4MDAgfSwKKwl7IDB4OTMsICAgMHgwMCB9LAorCXsgMHg5MywgICAweDAwIH0sCisJeyAweDkzLCAgIDB4MDAgfSwKKwl7IDB4OTMsICAgMHgwMCB9LAorCXsgMHg5MywgICAweDAwIH0sCisJeyAweDk2LCAgIDB4MDAgfSwKKwl7IDB4OTcsICAgMHgwOCB9LAorCXsgMHg5NywgICAweDE5IH0sCisJeyAweDk3LCAgIDB4MDIgfSwKKwl7IDB4OTcsICAgMHgwYyB9LAorCXsgMHg5NywgICAweDI0IH0sCisJeyAweDk3LCAgIDB4MzAgfSwKKwl7IDB4OTcsICAgMHgyOCB9LAorCXsgMHg5NywgICAweDI2IH0sCisJeyAweDk3LCAgIDB4MDIgfSwKKwl7IDB4OTcsICAgMHg5OCB9LAorCXsgMHg5NywgICAweDgwIH0sCisJeyAweDk3LCAgIDB4MDAgfSwKKwl7IDB4OTcsICAgMHgwMCB9LAorCXsgMHhhNCwgICAweDAwIH0sCisJeyAweGE4LCAgIDB4MDAgfSwKKwl7IDB4YzUsICAgMHgxMSB9LAorCXsgMHhjNiwgICAweDUxIH0sCisJeyAweGJmLCAgIDB4ODAgfSwKKwl7IDB4YzcsICAgMHgxMCB9LAorCXsgMHhiNiwgICAweDY2IH0sCisJeyAweGI4LCAgIDB4QTUgfSwKKwl7IDB4YjcsICAgMHg2NCB9LAorCXsgMHhiOSwgICAweDdDIH0sCisJeyAweGIzLCAgIDB4YWYgfSwKKwl7IDB4YjQsICAgMHg5NyB9LAorCXsgMHhiNSwgICAweEZGIH0sCisJeyAweGIwLCAgIDB4QzUgfSwKKwl7IDB4YjEsICAgMHg5NCB9LAorCXsgMHhiMiwgICAweDBmIH0sCisJeyAweGM0LCAgIDB4NWMgfSwKKwl7IDB4YTYsICAgMHgwMCB9LAorCXsgMHhhNywgICAweDIwIH0sCisJeyAweGE3LCAgIDB4ZDggfSwKKwl7IDB4YTcsICAgMHgxYiB9LAorCXsgMHhhNywgICAweDMxIH0sCisJeyAweGE3LCAgIDB4MDAgfSwKKwl7IDB4YTcsICAgMHgxOCB9LAorCXsgMHhhNywgICAweDIwIH0sCisJeyAweGE3LCAgIDB4ZDggfSwKKwl7IDB4YTcsICAgMHgxOSB9LAorCXsgMHhhNywgICAweDMxIH0sCisJeyAweGE3LCAgIDB4MDAgfSwKKwl7IDB4YTcsICAgMHgxOCB9LAorCXsgMHhhNywgICAweDIwIH0sCisJeyAweGE3LCAgIDB4ZDggfSwKKwl7IDB4YTcsICAgMHgxOSB9LAorCXsgMHhhNywgICAweDMxIH0sCisJeyAweGE3LCAgIDB4MDAgfSwKKwl7IDB4YTcsICAgMHgxOCB9LAorCXsgMHg3ZiwgICAweDAwIH0sCisJeyAweGU1LCAgIDB4MWYgfSwKKwl7IDB4ZTEsICAgMHg3NyB9LAorCXsgMHhkZCwgICAweDdmIH0sCisJeyBDVFJMMCwgIENUUkwwX1lVVjQyMiB8IENUUkwwX1lVVl9FTiB8IENUUkwwX1JHQl9FTiB9LAorCUVORE1BUktFUiwKK307CisKKy8qCisgKiBSZWdpc3RlciBzZXR0aW5ncyBmb3Igd2luZG93IHNpemUKKyAqIFRoZSBwcmVhbWJsZSwgc2V0dXAgdGhlIGludGVybmFsIERTUCB0byBpbnB1dCBhbiBVWEdBICgxNjAweDEyMDApIGltYWdlLgorICogVGhlbiB0aGUgZGlmZmVyZW50IHpvb21pbmcgY29uZmlndXJhdGlvbnMgd2lsbCBzZXR1cCB0aGUgb3V0cHV0IGltYWdlIHNpemUuCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVndmFsX2xpc3Qgb3YyNjQwX3NpemVfY2hhbmdlX3ByZWFtYmxlX3JlZ3NbXSA9IHsKKwl7IEJBTktfU0VMLCBCQU5LX1NFTF9EU1AgfSwKKwl7IFJFU0VULCBSRVNFVF9EVlAgfSwKKwl7IEhTSVpFOCwgSFNJWkU4X1NFVChXX1VYR0EpIH0sCisJeyBWU0laRTgsIFZTSVpFOF9TRVQoSF9VWEdBKSB9LAorCXsgQ1RSTDIsIENUUkwyX0RDV19FTiB8IENUUkwyX1NERV9FTiB8CisJCSBDVFJMMl9VVl9BVkdfRU4gfCBDVFJMMl9DTVhfRU4gfCBDVFJMMl9VVl9BREpfRU4gfSwKKwl7IEhTSVpFLCBIU0laRV9TRVQoV19VWEdBKSB9LAorCXsgVlNJWkUsIFZTSVpFX1NFVChIX1VYR0EpIH0sCisJeyBYT0ZGTCwgWE9GRkxfU0VUKDApIH0sCisJeyBZT0ZGTCwgWU9GRkxfU0VUKDApIH0sCisJeyBWSFlYLCBWSFlYX0hTSVpFX1NFVChXX1VYR0EpIHwgVkhZWF9WU0laRV9TRVQoSF9VWEdBKSB8CisJCVZIWVhfWE9GRl9TRVQoMCkgfCBWSFlYX1lPRkZfU0VUKDApfSwKKwl7IFRFU1QsIFRFU1RfSFNJWkVfU0VUKFdfVVhHQSkgfSwKKwlFTkRNQVJLRVIsCit9OworCisjZGVmaW5lIFBFUl9TSVpFX1JFR19TRVEoeCwgeSwgdl9kaXYsIGhfZGl2LCBwY2xrX2RpdikJXAorCXsgQ1RSTEksIENUUkxJX0xQX0RQIHwgQ1RSTElfVl9ESVZfU0VUKHZfZGl2KSB8CVwKKwkJIENUUkxJX0hfRElWX1NFVChoX2Rpdil9LAkJXAorCXsgWk1PVywgWk1PV19PVVRXX1NFVCh4KSB9LAkJCVwKKwl7IFpNT0gsIFpNT0hfT1VUSF9TRVQoeSkgfSwJCQlcCisJeyBaTUhILCBaTUhIX09VVFdfU0VUKHgpIHwgWk1ISF9PVVRIX1NFVCh5KSB9LAlcCisJeyBSX0RWUF9TUCwgcGNsa19kaXYgfSwJCQkJXAorCXsgUkVTRVQsIDB4MDB9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVndmFsX2xpc3Qgb3YyNjQwX3FjaWZfcmVnc1tdID0geworCVBFUl9TSVpFX1JFR19TRVEoV19RQ0lGLCBIX1FDSUYsIDMsIDMsIDQpLAorCUVORE1BUktFUiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVndmFsX2xpc3Qgb3YyNjQwX3F2Z2FfcmVnc1tdID0geworCVBFUl9TSVpFX1JFR19TRVEoV19RVkdBLCBIX1FWR0EsIDIsIDIsIDQpLAorCUVORE1BUktFUiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVndmFsX2xpc3Qgb3YyNjQwX2NpZl9yZWdzW10gPSB7CisJUEVSX1NJWkVfUkVHX1NFUShXX0NJRiwgSF9DSUYsIDIsIDIsIDgpLAorCUVORE1BUktFUiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVndmFsX2xpc3Qgb3YyNjQwX3ZnYV9yZWdzW10gPSB7CisJUEVSX1NJWkVfUkVHX1NFUShXX1ZHQSwgSF9WR0EsIDAsIDAsIDIpLAorCUVORE1BUktFUiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVndmFsX2xpc3Qgb3YyNjQwX3N2Z2FfcmVnc1tdID0geworCVBFUl9TSVpFX1JFR19TRVEoV19TVkdBLCBIX1NWR0EsIDEsIDEsIDIpLAorCUVORE1BUktFUiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVndmFsX2xpc3Qgb3YyNjQwX3hnYV9yZWdzW10gPSB7CisJUEVSX1NJWkVfUkVHX1NFUShXX1hHQSwgSF9YR0EsIDAsIDAsIDIpLAorCXsgQ1RSTEksICAgIDB4MDB9LAorCUVORE1BUktFUiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVndmFsX2xpc3Qgb3YyNjQwX3N4Z2FfcmVnc1tdID0geworCVBFUl9TSVpFX1JFR19TRVEoV19TWEdBLCBIX1NYR0EsIDAsIDAsIDIpLAorCXsgQ1RSTEksICAgIDB4MDB9LAorCXsgUl9EVlBfU1AsIDIgfCBSX0RWUF9TUF9BVVRPX01PREUgfSwKKwlFTkRNQVJLRVIsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ3ZhbF9saXN0IG92MjY0MF91eGdhX3JlZ3NbXSA9IHsKKwlQRVJfU0laRV9SRUdfU0VRKFdfVVhHQSwgSF9VWEdBLCAwLCAwLCAwKSwKKwl7IENUUkxJLCAgICAweDAwfSwKKwl7IFJfRFZQX1NQLCAwIHwgUl9EVlBfU1BfQVVUT19NT0RFIH0sCisJRU5ETUFSS0VSLAorfTsKKworI2RlZmluZSBPVjI2NDBfU0laRShuLCB3LCBoLCByKSBcCisJey5uYW1lID0gbiwgLndpZHRoID0gdyAsIC5oZWlnaHQgPSBoLCAucmVncyA9IHIgfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG92MjY0MF93aW5fc2l6ZSBvdjI2NDBfc3VwcG9ydGVkX3dpbl9zaXplc1tdID0geworCU9WMjY0MF9TSVpFKCJRQ0lGIiwgV19RQ0lGLCBIX1FDSUYsIG92MjY0MF9xY2lmX3JlZ3MpLAorCU9WMjY0MF9TSVpFKCJRVkdBIiwgV19RVkdBLCBIX1FWR0EsIG92MjY0MF9xdmdhX3JlZ3MpLAorCU9WMjY0MF9TSVpFKCJDSUYiLCBXX0NJRiwgSF9DSUYsIG92MjY0MF9jaWZfcmVncyksCisJT1YyNjQwX1NJWkUoIlZHQSIsIFdfVkdBLCBIX1ZHQSwgb3YyNjQwX3ZnYV9yZWdzKSwKKwlPVjI2NDBfU0laRSgiU1ZHQSIsIFdfU1ZHQSwgSF9TVkdBLCBvdjI2NDBfc3ZnYV9yZWdzKSwKKwlPVjI2NDBfU0laRSgiWEdBIiwgV19YR0EsIEhfWEdBLCBvdjI2NDBfeGdhX3JlZ3MpLAorCU9WMjY0MF9TSVpFKCJTWEdBIiwgV19TWEdBLCBIX1NYR0EsIG92MjY0MF9zeGdhX3JlZ3MpLAorCU9WMjY0MF9TSVpFKCJVWEdBIiwgV19VWEdBLCBIX1VYR0EsIG92MjY0MF91eGdhX3JlZ3MpLAorfTsKKworLyoKKyAqIFJlZ2lzdGVyIHNldHRpbmdzIGZvciBwaXhlbCBmb3JtYXRzCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVndmFsX2xpc3Qgb3YyNjQwX2Zvcm1hdF9jaGFuZ2VfcHJlYW1ibGVfcmVnc1tdID0geworCXsgQkFOS19TRUwsIEJBTktfU0VMX0RTUCB9LAorCXsgUl9CWVBBU1MsIFJfQllQQVNTX1VTRV9EU1AgfSwKKwlFTkRNQVJLRVIsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ3ZhbF9saXN0IG92MjY0MF95dXY0MjJfcmVnc1tdID0geworCXsgSU1BR0VfTU9ERSwgSU1BR0VfTU9ERV9MQllURV9GSVJTVCB8IElNQUdFX01PREVfWVVWNDIyIH0sCisJeyAweEQ3LCAweDAxIH0sCisJeyAweDMzLCAweGEwIH0sCisJeyAweGUxLCAweDY3IH0sCisJeyBSRVNFVCwgIDB4MDAgfSwKKwl7IFJfQllQQVNTLCBSX0JZUEFTU19VU0VfRFNQIH0sCisJRU5ETUFSS0VSLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCByZWd2YWxfbGlzdCBvdjI2NDBfcmdiNTY1X3JlZ3NbXSA9IHsKKwl7IElNQUdFX01PREUsIElNQUdFX01PREVfTEJZVEVfRklSU1QgfCBJTUFHRV9NT0RFX1JHQjU2NSB9LAorCXsgMHhkNywgMHgwMyB9LAorCXsgUkVTRVQsICAweDAwIH0sCisJeyBSX0JZUEFTUywgUl9CWVBBU1NfVVNFX0RTUCB9LAorCUVORE1BUktFUiwKK307CisKK3N0YXRpYyBlbnVtIHY0bDJfbWJ1c19waXhlbGNvZGUgb3YyNjQwX2NvZGVzW10gPSB7CisJVjRMMl9NQlVTX0ZNVF9VWVZZOF8yWDgsCisJVjRMMl9NQlVTX0ZNVF9SR0I1NjVfMlg4X0xFLAorfTsKKworLyoKKyAqIFN1cHBvcnRlZCBjb250cm9scworICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfcXVlcnljdHJsIG92MjY0MF9jb250cm9sc1tdID0geworCXsKKwkJLmlkCQk9IFY0TDJfQ0lEX1ZGTElQLAorCQkudHlwZQkJPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAorCQkubmFtZQkJPSAiRmxpcCBWZXJ0aWNhbGx5IiwKKwkJLm1pbmltdW0JPSAwLAorCQkubWF4aW11bQk9IDEsCisJCS5zdGVwCQk9IDEsCisJCS5kZWZhdWx0X3ZhbHVlCT0gMCwKKwl9LCB7CisJCS5pZAkJPSBWNEwyX0NJRF9IRkxJUCwKKwkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKKwkJLm5hbWUJCT0gIkZsaXAgSG9yaXpvbnRhbGx5IiwKKwkJLm1pbmltdW0JPSAwLAorCQkubWF4aW11bQk9IDEsCisJCS5zdGVwCQk9IDEsCisJCS5kZWZhdWx0X3ZhbHVlCT0gMCwKKwl9LAorfTsKKworLyoKKyAqIEdlbmVyYWwgZnVuY3Rpb25zCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgb3YyNjQwX3ByaXYgKnRvX292MjY0MChjb25zdCBzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXJldHVybiBjb250YWluZXJfb2YoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCksIHN0cnVjdCBvdjI2NDBfcHJpdiwKKwkJCSAgICBzdWJkZXYpOworfQorCitzdGF0aWMgaW50IG92MjY0MF93cml0ZV9hcnJheShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJICAgICAgY29uc3Qgc3RydWN0IHJlZ3ZhbF9saXN0ICp2YWxzKQoreworCWludCByZXQ7CisKKwl3aGlsZSAoKHZhbHMtPnJlZ19udW0gIT0gMHhmZikgfHwgKHZhbHMtPnZhbHVlICE9IDB4ZmYpKSB7CisJCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LAorCQkJCQkJdmFscy0+cmVnX251bSwgdmFscy0+dmFsdWUpOworCQlkZXZfdmRiZygmY2xpZW50LT5kZXYsICJhcnJheTogMHglMDJ4LCAweCUwMngiLAorCQkJIHZhbHMtPnJlZ19udW0sIHZhbHMtPnZhbHVlKTsKKworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJCXZhbHMrKzsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3YyNjQwX21hc2tfc2V0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkgICB1OCAgcmVnLCB1OCAgbWFzaywgdTggIHNldCkKK3sKKwlzMzIgdmFsID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgcmVnKTsKKwlpZiAodmFsIDwgMCkKKwkJcmV0dXJuIHZhbDsKKworCXZhbCAmPSB+bWFzazsKKwl2YWwgfD0gc2V0ICYgbWFzazsKKworCWRldl92ZGJnKCZjbGllbnQtPmRldiwgIm1hc2tzOiAweCUwMngsIDB4JTAyeCIsIHJlZywgdmFsKTsKKworCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLCB2YWwpOworfQorCitzdGF0aWMgaW50IG92MjY0MF9yZXNldChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCWludCByZXQ7CisJY29uc3Qgc3RydWN0IHJlZ3ZhbF9saXN0IHJlc2V0X3NlcVtdID0geworCQl7QkFOS19TRUwsIEJBTktfU0VMX1NFTlN9LAorCQl7Q09NNywgQ09NN19TUlNUfSwKKwkJRU5ETUFSS0VSLAorCX07CisKKwlyZXQgPSBvdjI2NDBfd3JpdGVfYXJyYXkoY2xpZW50LCByZXNldF9zZXEpOworCWlmIChyZXQpCisJCWdvdG8gZXJyOworCisJbXNsZWVwKDUpOworZXJyOgorCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiJXM6IChyZXQgJWQpIiwgX19mdW5jX18sIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIHNvY19jYW1lcmFfb3BzIGZ1bmN0aW9ucworICovCitzdGF0aWMgaW50IG92MjY0MF9zX3N0cmVhbShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBpbnQgZW5hYmxlKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG92MjY0MF9zZXRfYnVzX3BhcmFtKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJCXVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsID0gdG9fc29jX2NhbWVyYV9saW5rKGljZCk7CisJdW5zaWduZWQgbG9uZyB3aWR0aF9mbGFnID0gZmxhZ3MgJiBTT0NBTV9EQVRBV0lEVEhfTUFTSzsKKworCS8qIE9ubHkgb25lIHdpZHRoIGJpdCBtYXkgYmUgc2V0ICovCisJaWYgKCFpc19wb3dlcl9vZl8yKHdpZHRoX2ZsYWcpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChpY2wtPnNldF9idXNfcGFyYW0pCisJCXJldHVybiBpY2wtPnNldF9idXNfcGFyYW0oaWNsLCB3aWR0aF9mbGFnKTsKKworCS8qCisJICogV2l0aG91dCBib2FyZCBzcGVjaWZpYyBidXMgd2lkdGggc2V0dGluZ3Mgd2Ugc3VwcG9ydCBvbmx5IHRoZQorCSAqIHNlbnNvcnMgbmF0aXZlIGJ1cyB3aWR0aCB3aXRjaCBhcmUgdGVzdGVkIHdvcmtpbmcKKwkgKi8KKwlpZiAod2lkdGhfZmxhZyAmIChTT0NBTV9EQVRBV0lEVEhfMTAgfCBTT0NBTV9EQVRBV0lEVEhfOCkpCisJCXJldHVybiAwOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG92MjY0MF9xdWVyeV9idXNfcGFyYW0oc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCit7CisJc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsID0gdG9fc29jX2NhbWVyYV9saW5rKGljZCk7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IFNPQ0FNX1BDTEtfU0FNUExFX1JJU0lORyB8IFNPQ0FNX01BU1RFUiB8CisJCVNPQ0FNX1ZTWU5DX0FDVElWRV9ISUdIIHwgU09DQU1fSFNZTkNfQUNUSVZFX0hJR0ggfAorCQlTT0NBTV9EQVRBX0FDVElWRV9ISUdIOworCisJaWYgKGljbC0+cXVlcnlfYnVzX3BhcmFtKQorCQlmbGFncyB8PSBpY2wtPnF1ZXJ5X2J1c19wYXJhbShpY2wpICYgU09DQU1fREFUQVdJRFRIX01BU0s7CisJZWxzZQorCQlmbGFncyB8PSBTT0NBTV9EQVRBV0lEVEhfMTA7CisKKwlyZXR1cm4gc29jX2NhbWVyYV9hcHBseV9zZW5zb3JfZmxhZ3MoaWNsLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgb3YyNjQwX2dfY3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisJc3RydWN0IG92MjY0MF9wcml2ICpwcml2ID0gdG9fb3YyNjQwKGNsaWVudCk7CisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9WRkxJUDoKKwkJY3RybC0+dmFsdWUgPSBwcml2LT5mbGFnX3ZmbGlwOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0hGTElQOgorCQljdHJsLT52YWx1ZSA9IHByaXYtPmZsYWdfaGZsaXA7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvdjI2NDBfc19jdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3RydWN0IGkyY19jbGllbnQgICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwlzdHJ1Y3Qgb3YyNjQwX3ByaXYgKnByaXYgPSB0b19vdjI2NDAoY2xpZW50KTsKKwlpbnQgcmV0ID0gMDsKKwl1OCB2YWw7CisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9WRkxJUDoKKwkJdmFsID0gY3RybC0+dmFsdWUgPyBSRUcwNF9WRkxJUF9JTUcgOiAweDAwOworCQlwcml2LT5mbGFnX3ZmbGlwID0gY3RybC0+dmFsdWUgPyAxIDogMDsKKwkJcmV0ID0gb3YyNjQwX21hc2tfc2V0KGNsaWVudCwgUkVHMDQsIFJFRzA0X1ZGTElQX0lNRywgdmFsKTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9IRkxJUDoKKwkJdmFsID0gY3RybC0+dmFsdWUgPyBSRUcwNF9IRkxJUF9JTUcgOiAweDAwOworCQlwcml2LT5mbGFnX2hmbGlwID0gY3RybC0+dmFsdWUgPyAxIDogMDsKKwkJcmV0ID0gb3YyNjQwX21hc2tfc2V0KGNsaWVudCwgUkVHMDQsIFJFRzA0X0hGTElQX0lNRywgdmFsKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBvdjI2NDBfZ19jaGlwX2lkZW50KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCQkgICAgICAgc3RydWN0IHY0bDJfZGJnX2NoaXBfaWRlbnQgKmlkKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwlzdHJ1Y3Qgb3YyNjQwX3ByaXYgKnByaXYgPSB0b19vdjI2NDAoY2xpZW50KTsKKworCWlkLT5pZGVudCAgICA9IHByaXYtPm1vZGVsOworCWlkLT5yZXZpc2lvbiA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKK3N0YXRpYyBpbnQgb3YyNjQwX2dfcmVnaXN0ZXIoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCSAgICAgc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyICpyZWcpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCWludCByZXQ7CisKKwlyZWctPnNpemUgPSAxOworCWlmIChyZWctPnJlZyA+IDB4ZmYpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLT5yZWcpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmVnLT52YWwgPSByZXQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvdjI2NDBfc19yZWdpc3RlcihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJICAgICBzdHJ1Y3QgdjRsMl9kYmdfcmVnaXN0ZXIgKnJlZykKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKKwlpZiAocmVnLT5yZWcgPiAweGZmIHx8CisJICAgIHJlZy0+dmFsID4gMHhmZikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZy0+cmVnLCByZWctPnZhbCk7Cit9CisjZW5kaWYKKworLyogU2VsZWN0IHRoZSBuZWFyZXN0IGhpZ2hlciByZXNvbHV0aW9uIGZvciBjYXB0dXJlICovCitzdGF0aWMgY29uc3Qgc3RydWN0IG92MjY0MF93aW5fc2l6ZSAqb3YyNjQwX3NlbGVjdF93aW4odTMyICp3aWR0aCwgdTMyICpoZWlnaHQpCit7CisJaW50IGksIGRlZmF1bHRfc2l6ZSA9IEFSUkFZX1NJWkUob3YyNjQwX3N1cHBvcnRlZF93aW5fc2l6ZXMpIC0gMTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG92MjY0MF9zdXBwb3J0ZWRfd2luX3NpemVzKTsgaSsrKSB7CisJCWlmIChvdjI2NDBfc3VwcG9ydGVkX3dpbl9zaXplc1tpXS53aWR0aCAgPj0gKndpZHRoICYmCisJCSAgICBvdjI2NDBfc3VwcG9ydGVkX3dpbl9zaXplc1tpXS5oZWlnaHQgPj0gKmhlaWdodCkgeworCQkJKndpZHRoID0gb3YyNjQwX3N1cHBvcnRlZF93aW5fc2l6ZXNbaV0ud2lkdGg7CisJCQkqaGVpZ2h0ID0gb3YyNjQwX3N1cHBvcnRlZF93aW5fc2l6ZXNbaV0uaGVpZ2h0OworCQkJcmV0dXJuICZvdjI2NDBfc3VwcG9ydGVkX3dpbl9zaXplc1tpXTsKKwkJfQorCX0KKworCSp3aWR0aCA9IG92MjY0MF9zdXBwb3J0ZWRfd2luX3NpemVzW2RlZmF1bHRfc2l6ZV0ud2lkdGg7CisJKmhlaWdodCA9IG92MjY0MF9zdXBwb3J0ZWRfd2luX3NpemVzW2RlZmF1bHRfc2l6ZV0uaGVpZ2h0OworCXJldHVybiAmb3YyNjQwX3N1cHBvcnRlZF93aW5fc2l6ZXNbZGVmYXVsdF9zaXplXTsKK30KKworc3RhdGljIGludCBvdjI2NDBfc2V0X3BhcmFtcyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1MzIgKndpZHRoLCB1MzIgKmhlaWdodCwKKwkJCSAgICAgZW51bSB2NGwyX21idXNfcGl4ZWxjb2RlIGNvZGUpCit7CisJc3RydWN0IG92MjY0MF9wcml2ICAgICAgICpwcml2ID0gdG9fb3YyNjQwKGNsaWVudCk7CisJY29uc3Qgc3RydWN0IHJlZ3ZhbF9saXN0ICpzZWxlY3RlZF9jZm10X3JlZ3M7CisJaW50IHJldDsKKworCS8qIHNlbGVjdCB3aW4gKi8KKwlwcml2LT53aW4gPSBvdjI2NDBfc2VsZWN0X3dpbih3aWR0aCwgaGVpZ2h0KTsKKworCS8qIHNlbGVjdCBmb3JtYXQgKi8KKwlwcml2LT5jZm10X2NvZGUgPSAwOworCXN3aXRjaCAoY29kZSkgeworCWNhc2UgVjRMMl9NQlVTX0ZNVF9SR0I1NjVfMlg4X0xFOgorCQlkZXZfZGJnKCZjbGllbnQtPmRldiwgIiVzOiBTZWxlY3RlZCBjZm10IFJHQjU2NSIsIF9fZnVuY19fKTsKKwkJc2VsZWN0ZWRfY2ZtdF9yZWdzID0gb3YyNjQwX3JnYjU2NV9yZWdzOworCQlicmVhazsKKwlkZWZhdWx0OgorCWNhc2UgVjRMMl9NQlVTX0ZNVF9VWVZZOF8yWDg6CisJCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiJXM6IFNlbGVjdGVkIGNmbXQgWVVWNDIyIiwgX19mdW5jX18pOworCQlzZWxlY3RlZF9jZm10X3JlZ3MgPSBvdjI2NDBfeXV2NDIyX3JlZ3M7CisJfQorCisJLyogcmVzZXQgaGFyZHdhcmUgKi8KKwlvdjI2NDBfcmVzZXQoY2xpZW50KTsKKworCS8qIGluaXRpYWxpemUgdGhlIHNlbnNvciB3aXRoIGRlZmF1bHQgZGF0YSAqLworCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiJXM6IEluaXQgZGVmYXVsdCIsIF9fZnVuY19fKTsKKwlyZXQgPSBvdjI2NDBfd3JpdGVfYXJyYXkoY2xpZW50LCBvdjI2NDBfaW5pdF9yZWdzKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnI7CisKKwkvKiBzZWxlY3QgcHJlYW1ibGUgKi8KKwlkZXZfZGJnKCZjbGllbnQtPmRldiwgIiVzOiBTZXQgc2l6ZSB0byAlcyIsIF9fZnVuY19fLCBwcml2LT53aW4tPm5hbWUpOworCXJldCA9IG92MjY0MF93cml0ZV9hcnJheShjbGllbnQsIG92MjY0MF9zaXplX2NoYW5nZV9wcmVhbWJsZV9yZWdzKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnI7CisKKwkvKiBzZXQgc2l6ZSB3aW4gKi8KKwlyZXQgPSBvdjI2NDBfd3JpdGVfYXJyYXkoY2xpZW50LCBwcml2LT53aW4tPnJlZ3MpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycjsKKworCS8qIGNmbXQgcHJlYW1ibGUgKi8KKwlkZXZfZGJnKCZjbGllbnQtPmRldiwgIiVzOiBTZXQgY2ZtdCIsIF9fZnVuY19fKTsKKwlyZXQgPSBvdjI2NDBfd3JpdGVfYXJyYXkoY2xpZW50LCBvdjI2NDBfZm9ybWF0X2NoYW5nZV9wcmVhbWJsZV9yZWdzKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnI7CisKKwkvKiBzZXQgY2ZtdCAqLworCXJldCA9IG92MjY0MF93cml0ZV9hcnJheShjbGllbnQsIHNlbGVjdGVkX2NmbXRfcmVncyk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyOworCisJcHJpdi0+Y2ZtdF9jb2RlID0gY29kZTsKKwkqd2lkdGggPSBwcml2LT53aW4tPndpZHRoOworCSpoZWlnaHQgPSBwcml2LT53aW4tPmhlaWdodDsKKworCXJldHVybiAwOworCitlcnI6CisJZGV2X2VycigmY2xpZW50LT5kZXYsICIlczogRXJyb3IgJWQiLCBfX2Z1bmNfXywgcmV0KTsKKwlvdjI2NDBfcmVzZXQoY2xpZW50KTsKKwlwcml2LT53aW4gPSBOVUxMOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBvdjI2NDBfZ19mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCXN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgKm1mKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisJc3RydWN0IG92MjY0MF9wcml2ICpwcml2ID0gdG9fb3YyNjQwKGNsaWVudCk7CisKKwlpZiAoIXByaXYtPndpbikgeworCQl1MzIgd2lkdGggPSBXX1NWR0EsIGhlaWdodCA9IEhfU1ZHQTsKKwkJaW50IHJldCA9IG92MjY0MF9zZXRfcGFyYW1zKGNsaWVudCwgJndpZHRoLCAmaGVpZ2h0LAorCQkJCQkgICAgVjRMMl9NQlVTX0ZNVF9VWVZZOF8yWDgpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJbWYtPndpZHRoCT0gcHJpdi0+d2luLT53aWR0aDsKKwltZi0+aGVpZ2h0CT0gcHJpdi0+d2luLT5oZWlnaHQ7CisJbWYtPmNvZGUJPSBwcml2LT5jZm10X2NvZGU7CisKKwlzd2l0Y2ggKG1mLT5jb2RlKSB7CisJY2FzZSBWNEwyX01CVVNfRk1UX1JHQjU2NV8yWDhfTEU6CisJCW1mLT5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0I7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJY2FzZSBWNEwyX01CVVNfRk1UX1VZVlk4XzJYODoKKwkJbWYtPmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRzsKKwl9CisJbWYtPmZpZWxkCT0gVjRMMl9GSUVMRF9OT05FOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3YyNjQwX3NfZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCQlzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10ICptZikKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisJaW50IHJldDsKKworCisJc3dpdGNoIChtZi0+Y29kZSkgeworCWNhc2UgVjRMMl9NQlVTX0ZNVF9SR0I1NjVfMlg4X0xFOgorCQltZi0+Y29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCOworCQlicmVhazsKKwlkZWZhdWx0OgorCQltZi0+Y29kZSA9IFY0TDJfTUJVU19GTVRfVVlWWThfMlg4OworCWNhc2UgVjRMMl9NQlVTX0ZNVF9VWVZZOF8yWDg6CisJCW1mLT5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX0pQRUc7CisJfQorCisJcmV0ID0gb3YyNjQwX3NldF9wYXJhbXMoY2xpZW50LCAmbWYtPndpZHRoLCAmbWYtPmhlaWdodCwgbWYtPmNvZGUpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBvdjI2NDBfdHJ5X2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJICBzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10ICptZikKK3sKKwljb25zdCBzdHJ1Y3Qgb3YyNjQwX3dpbl9zaXplICp3aW47CisKKwkvKgorCSAqIHNlbGVjdCBzdWl0YWJsZSB3aW4KKwkgKi8KKwl3aW4gPSBvdjI2NDBfc2VsZWN0X3dpbigmbWYtPndpZHRoLCAmbWYtPmhlaWdodCk7CisKKwltZi0+ZmllbGQJPSBWNEwyX0ZJRUxEX05PTkU7CisKKwlzd2l0Y2ggKG1mLT5jb2RlKSB7CisJY2FzZSBWNEwyX01CVVNfRk1UX1JHQjU2NV8yWDhfTEU6CisJCW1mLT5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0I7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCW1mLT5jb2RlID0gVjRMMl9NQlVTX0ZNVF9VWVZZOF8yWDg7CisJY2FzZSBWNEwyX01CVVNfRk1UX1VZVlk4XzJYODoKKwkJbWYtPmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvdjI2NDBfZW51bV9mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdW5zaWduZWQgaW50IGluZGV4LAorCQkJICAgZW51bSB2NGwyX21idXNfcGl4ZWxjb2RlICpjb2RlKQoreworCWlmIChpbmRleCA+PSBBUlJBWV9TSVpFKG92MjY0MF9jb2RlcykpCisJCXJldHVybiAtRUlOVkFMOworCisJKmNvZGUgPSBvdjI2NDBfY29kZXNbaW5kZXhdOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG92MjY0MF9nX2Nyb3Aoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY3JvcCAqYSkKK3sKKwlhLT5jLmxlZnQJPSAwOworCWEtPmMudG9wCT0gMDsKKwlhLT5jLndpZHRoCT0gV19VWEdBOworCWEtPmMuaGVpZ2h0CT0gSF9VWEdBOworCWEtPnR5cGUJCT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3YyNjQwX2Nyb3BjYXAoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY3JvcGNhcCAqYSkKK3sKKwlhLT5ib3VuZHMubGVmdAkJCT0gMDsKKwlhLT5ib3VuZHMudG9wCQkJPSAwOworCWEtPmJvdW5kcy53aWR0aAkJCT0gV19VWEdBOworCWEtPmJvdW5kcy5oZWlnaHQJCT0gSF9VWEdBOworCWEtPmRlZnJlY3QJCQk9IGEtPmJvdW5kczsKKwlhLT50eXBlCQkJCT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCWEtPnBpeGVsYXNwZWN0Lm51bWVyYXRvcgk9IDE7CisJYS0+cGl4ZWxhc3BlY3QuZGVub21pbmF0b3IJPSAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3YyNjQwX3ZpZGVvX3Byb2JlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJICAgICAgc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3Qgb3YyNjQwX3ByaXYgKnByaXYgPSB0b19vdjI2NDAoY2xpZW50KTsKKwl1OCBwaWQsIHZlciwgbWlkaCwgbWlkbDsKKwljb25zdCBjaGFyICpkZXZuYW1lOworCWludCByZXQ7CisKKwkvKgorCSAqIHdlIG11c3QgaGF2ZSBhIHBhcmVudCBieSBub3cuIEFuZCBpdCBjYW5ub3QgYmUgYSB3cm9uZyBvbmUuCisJICogU28gdGhpcyBlbnRpcmUgdGVzdCBpcyBjb21wbGV0ZWx5IHJlZHVuZGFudC4KKwkgKi8KKwlpZiAoIWljZC0+ZGV2LnBhcmVudCB8fAorCSAgICB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KS0+bnIgIT0gaWNkLT5pZmFjZSkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIlBhcmVudCBtaXNzaW5nIG9yIGludmFsaWQhXG4iKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBlcnI7CisJfQorCisJLyoKKwkgKiBjaGVjayBhbmQgc2hvdyBwcm9kdWN0IElEIGFuZCBtYW51ZmFjdHVyZXIgSUQKKwkgKi8KKwlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgQkFOS19TRUwsIEJBTktfU0VMX1NFTlMpOworCXBpZCAgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBQSUQpOworCXZlciAgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBWRVIpOworCW1pZGggPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBNSURIKTsKKwltaWRsID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgTUlETCk7CisKKwlzd2l0Y2ggKFZFUlNJT04ocGlkLCB2ZXIpKSB7CisJY2FzZSBQSURfT1YyNjQwOgorCQlkZXZuYW1lICAgICA9ICJvdjI2NDAiOworCQlwcml2LT5tb2RlbCA9IFY0TDJfSURFTlRfT1YyNjQwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKCZjbGllbnQtPmRldiwKKwkJCSJQcm9kdWN0IElEIGVycm9yICV4OiV4XG4iLCBwaWQsIHZlcik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyOworCX0KKworCWRldl9pbmZvKCZjbGllbnQtPmRldiwKKwkJICIlcyBQcm9kdWN0IElEICUweDolMHggTWFudWZhY3R1cmVyIElEICV4OiV4XG4iLAorCQkgZGV2bmFtZSwgcGlkLCB2ZXIsIG1pZGgsIG1pZGwpOworCisJcmV0dXJuIDA7CisKK2VycjoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IHNvY19jYW1lcmFfb3BzIG92MjY0MF9vcHMgPSB7CisJLnNldF9idXNfcGFyYW0JCT0gb3YyNjQwX3NldF9idXNfcGFyYW0sCisJLnF1ZXJ5X2J1c19wYXJhbQk9IG92MjY0MF9xdWVyeV9idXNfcGFyYW0sCisJLmNvbnRyb2xzCQk9IG92MjY0MF9jb250cm9scywKKwkubnVtX2NvbnRyb2xzCQk9IEFSUkFZX1NJWkUob3YyNjQwX2NvbnRyb2xzKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgb3YyNjQwX3N1YmRldl9jb3JlX29wcyA9IHsKKwkuZ19jdHJsCQk9IG92MjY0MF9nX2N0cmwsCisJLnNfY3RybAkJPSBvdjI2NDBfc19jdHJsLAorCS5nX2NoaXBfaWRlbnQJPSBvdjI2NDBfZ19jaGlwX2lkZW50LAorI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKKwkuZ19yZWdpc3Rlcgk9IG92MjY0MF9nX3JlZ2lzdGVyLAorCS5zX3JlZ2lzdGVyCT0gb3YyNjQwX3NfcmVnaXN0ZXIsCisjZW5kaWYKK307CisKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9zdWJkZXZfdmlkZW9fb3BzIG92MjY0MF9zdWJkZXZfdmlkZW9fb3BzID0geworCS5zX3N0cmVhbQk9IG92MjY0MF9zX3N0cmVhbSwKKwkuZ19tYnVzX2ZtdAk9IG92MjY0MF9nX2ZtdCwKKwkuc19tYnVzX2ZtdAk9IG92MjY0MF9zX2ZtdCwKKwkudHJ5X21idXNfZm10CT0gb3YyNjQwX3RyeV9mbXQsCisJLmNyb3BjYXAJPSBvdjI2NDBfY3JvcGNhcCwKKwkuZ19jcm9wCQk9IG92MjY0MF9nX2Nyb3AsCisJLmVudW1fbWJ1c19mbXQJPSBvdjI2NDBfZW51bV9mbXQsCit9OworCitzdGF0aWMgc3RydWN0IHY0bDJfc3ViZGV2X29wcyBvdjI2NDBfc3ViZGV2X29wcyA9IHsKKwkuY29yZQk9ICZvdjI2NDBfc3ViZGV2X2NvcmVfb3BzLAorCS52aWRlbwk9ICZvdjI2NDBfc3ViZGV2X3ZpZGVvX29wcywKK307CisKKy8qCisgKiBpMmNfZHJpdmVyIGZ1bmN0aW9ucworICovCitzdGF0aWMgaW50IG92MjY0MF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmRpZCkKK3sKKwlzdHJ1Y3Qgb3YyNjQwX3ByaXYgICAgICAgICpwcml2OworCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAgKmljZCA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IGkyY19hZGFwdGVyICAgICAgICAqYWRhcHRlciA9IHRvX2kyY19hZGFwdGVyKGNsaWVudC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHNvY19jYW1lcmFfbGluayAgICAqaWNsOworCWludCAgICAgICAgICAgICAgICAgICAgICAgIHJldDsKKworCWlmICghaWNkKSB7CisJCWRldl9lcnIoJmFkYXB0ZXItPmRldiwgIk9WMjY0MDogbWlzc2luZyBzb2MtY2FtZXJhIGRhdGEhXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWNsID0gdG9fc29jX2NhbWVyYV9saW5rKGljZCk7CisJaWYgKCFpY2wpIHsKKwkJZGV2X2VycigmYWRhcHRlci0+ZGV2LAorCQkJIk9WMjY0MDogTWlzc2luZyBwbGF0Zm9ybV9kYXRhIGZvciBkcml2ZXJcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpIHsKKwkJZGV2X2VycigmYWRhcHRlci0+ZGV2LAorCQkJIk9WMjY0MDogSTJDLUFkYXB0ZXIgZG9lc24ndCBzdXBwb3J0IFNNQlVTXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBvdjI2NDBfcHJpdiksIEdGUF9LRVJORUwpOworCWlmICghcHJpdikgeworCQlkZXZfZXJyKCZhZGFwdGVyLT5kZXYsCisJCQkiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgcHJpdmF0ZSBkYXRhIVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXByaXYtPmluZm8gPSBpY2wtPnByaXY7CisKKwl2NGwyX2kyY19zdWJkZXZfaW5pdCgmcHJpdi0+c3ViZGV2LCBjbGllbnQsICZvdjI2NDBfc3ViZGV2X29wcyk7CisKKwlpY2QtPm9wcyA9ICZvdjI2NDBfb3BzOworCisJcmV0ID0gb3YyNjQwX3ZpZGVvX3Byb2JlKGljZCwgY2xpZW50KTsKKwlpZiAocmV0KSB7CisJCWljZC0+b3BzID0gTlVMTDsKKwkJa2ZyZWUocHJpdik7CisJfSBlbHNlIHsKKwkJZGV2X2luZm8oJmFkYXB0ZXItPmRldiwgIk9WMjY0MCBQcm9iZWRcbiIpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb3YyNjQwX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBvdjI2NDBfcHJpdiAgICAgICAqcHJpdiA9IHRvX292MjY0MChjbGllbnQpOworCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKKworCWljZC0+b3BzID0gTlVMTDsKKwlrZnJlZShwcml2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIG92MjY0MF9pZFtdID0geworCXsgIm92MjY0MCIsIDAgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgb3YyNjQwX2lkKTsKKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIG92MjY0MF9pMmNfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gIm92MjY0MCIsCisJfSwKKwkucHJvYmUgICAgPSBvdjI2NDBfcHJvYmUsCisJLnJlbW92ZSAgID0gb3YyNjQwX3JlbW92ZSwKKwkuaWRfdGFibGUgPSBvdjI2NDBfaWQsCit9OworCisvKgorICogTW9kdWxlIGZ1bmN0aW9ucworICovCitzdGF0aWMgaW50IF9faW5pdCBvdjI2NDBfbW9kdWxlX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJm92MjY0MF9pMmNfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG92MjY0MF9tb2R1bGVfZXhpdCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZvdjI2NDBfaTJjX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KG92MjY0MF9tb2R1bGVfaW5pdCk7Cittb2R1bGVfZXhpdChvdjI2NDBfbW9kdWxlX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIlNvQyBDYW1lcmEgZHJpdmVyIGZvciBPbW5pIFZpc2lvbiAyNjQwIHNlbnNvciIpOworTU9EVUxFX0FVVEhPUigiQWxiZXJ0byBQYW5penpvIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL292NzcyeC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9vdjc3MnguYwppbmRleCBhODRiNzcwLi40ODg5NWVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL292NzcyeC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3Y3NzJ4LmMKQEAgLTYwMCw3ICs2MDAsNyBAQAogc3RhdGljIGludCBvdjc3Mnhfc19zdHJlYW0oc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgaW50IGVuYWJsZSkKIHsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7Ci0Jc3RydWN0IG92NzcyeF9wcml2ICpwcml2ID0gdG9fb3Y3NzJ4KGNsaWVudCk7CisJc3RydWN0IG92NzcyeF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHNkLCBzdHJ1Y3Qgb3Y3NzJ4X3ByaXYsIHN1YmRldik7CiAKIAlpZiAoIWVuYWJsZSkgewogCQlvdjc3MnhfbWFza19zZXQoY2xpZW50LCBDT00yLCBTT0ZUX1NMRUVQX01PREUsIFNPRlRfU0xFRVBfTU9ERSk7CkBAIC02NDUsOCArNjQ1LDcgQEAKIAogc3RhdGljIGludCBvdjc3MnhfZ19jdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOwotCXN0cnVjdCBvdjc3MnhfcHJpdiAqcHJpdiA9IHRvX292NzcyeChjbGllbnQpOworCXN0cnVjdCBvdjc3MnhfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZihzZCwgc3RydWN0IG92NzcyeF9wcml2LCBzdWJkZXYpOwogCiAJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfVkZMSVA6CkBAIC02NjUsNyArNjY0LDcgQEAKIHN0YXRpYyBpbnQgb3Y3NzJ4X3NfY3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKLQlzdHJ1Y3Qgb3Y3NzJ4X3ByaXYgKnByaXYgPSB0b19vdjc3MngoY2xpZW50KTsKKwlzdHJ1Y3Qgb3Y3NzJ4X3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yoc2QsIHN0cnVjdCBvdjc3MnhfcHJpdiwgc3ViZGV2KTsKIAlpbnQgcmV0ID0gMDsKIAl1OCB2YWw7CiAKQEAgLTcxNSw4ICs3MTQsNyBAQAogc3RhdGljIGludCBvdjc3MnhfZ19jaGlwX2lkZW50KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCiAJCQkgICAgICAgc3RydWN0IHY0bDJfZGJnX2NoaXBfaWRlbnQgKmlkKQogewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKLQlzdHJ1Y3Qgb3Y3NzJ4X3ByaXYgKnByaXYgPSB0b19vdjc3MngoY2xpZW50KTsKKwlzdHJ1Y3Qgb3Y3NzJ4X3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yoc2QsIHN0cnVjdCBvdjc3MnhfcHJpdiwgc3ViZGV2KTsKIAogCWlkLT5pZGVudCAgICA9IHByaXYtPm1vZGVsOwogCWlkLT5yZXZpc2lvbiA9IDA7CkBAIC05NTUsNyArOTUzLDcgQEAKIAkJCXN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgKm1mKQogewogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKLQlzdHJ1Y3Qgb3Y3NzJ4X3ByaXYgKnByaXYgPSB0b19vdjc3MngoY2xpZW50KTsKKwlzdHJ1Y3Qgb3Y3NzJ4X3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yoc2QsIHN0cnVjdCBvdjc3MnhfcHJpdiwgc3ViZGV2KTsKIAogCWlmICghcHJpdi0+d2luIHx8ICFwcml2LT5jZm10KSB7CiAJCXUzMiB3aWR0aCA9IFZHQV9XSURUSCwgaGVpZ2h0ID0gVkdBX0hFSUdIVDsKQEAgLTk3OCw3ICs5NzYsNyBAQAogCQkJc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCAqbWYpCiB7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOwotCXN0cnVjdCBvdjc3MnhfcHJpdiAqcHJpdiA9IHRvX292NzcyeChjbGllbnQpOworCXN0cnVjdCBvdjc3MnhfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZihzZCwgc3RydWN0IG92NzcyeF9wcml2LCBzdWJkZXYpOwogCWludCByZXQgPSBvdjc3Mnhfc2V0X3BhcmFtcyhjbGllbnQsICZtZi0+d2lkdGgsICZtZi0+aGVpZ2h0LAogCQkJCSAgICBtZi0+Y29kZSk7CiAKQEAgLTk5MSw4ICs5ODksNyBAQAogc3RhdGljIGludCBvdjc3MnhfdHJ5X2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAogCQkJICBzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10ICptZikKIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7Ci0Jc3RydWN0IG92NzcyeF9wcml2ICpwcml2ID0gdG9fb3Y3NzJ4KGNsaWVudCk7CisJc3RydWN0IG92NzcyeF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHNkLCBzdHJ1Y3Qgb3Y3NzJ4X3ByaXYsIHN1YmRldik7CiAJY29uc3Qgc3RydWN0IG92NzcyeF93aW5fc2l6ZSAqd2luOwogCWludCBpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL292OTY0MC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9vdjk2NDAuYwppbmRleCA5OWU5ZTFkLi41M2Q4OGEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL292OTY0MC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3Y5NjQwLmMKQEAgLTMxLDYgKzMxLDggQEAKIAogI2luY2x1ZGUgIm92OTY0MC5oIgogCisjZGVmaW5lIHRvX292OTY0MF9zZW5zb3Ioc2QpCWNvbnRhaW5lcl9vZihzZCwgc3RydWN0IG92OTY0MF9wcml2LCBzdWJkZXYpCisKIC8qIGRlZmF1bHQgcmVnaXN0ZXIgc2V0dXAgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3Y5NjQwX3JlZyBvdjk2NDBfcmVnc19kZmx0W10gPSB7CiAJeyBPVjk2NDBfQ09NNSwJT1Y5NjQwX0NPTTVfU1lTQ0xLIHwgT1Y5NjQwX0NPTTVfTE9OR0VYUCB9LApAQCAtMzA4LDkgKzMxMCw3IEBACiAvKiBHZXQgc3RhdHVzIG9mIGFkZGl0aW9uYWwgY2FtZXJhIGNhcGFiaWxpdGllcyAqLwogc3RhdGljIGludCBvdjk2NDBfZ19jdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOwotCXN0cnVjdCBvdjk2NDBfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZihpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSwKLQkJCQkJc3RydWN0IG92OTY0MF9wcml2LCBzdWJkZXYpOworCXN0cnVjdCBvdjk2NDBfcHJpdiAqcHJpdiA9IHRvX292OTY0MF9zZW5zb3Ioc2QpOwogCiAJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfVkZMSVA6CkBAIC0zMjcsOCArMzI3LDcgQEAKIHN0YXRpYyBpbnQgb3Y5NjQwX3NfY3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKLQlzdHJ1Y3Qgb3Y5NjQwX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2YoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCksCi0JCQkJCXN0cnVjdCBvdjk2NDBfcHJpdiwgc3ViZGV2KTsKKwlzdHJ1Y3Qgb3Y5NjQwX3ByaXYgKnByaXYgPSB0b19vdjk2NDBfc2Vuc29yKHNkKTsKIAogCWludCByZXQgPSAwOwogCkBAIC0zNjAsOSArMzU5LDcgQEAKIHN0YXRpYyBpbnQgb3Y5NjQwX2dfY2hpcF9pZGVudChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAogCQkJCXN0cnVjdCB2NGwyX2RiZ19jaGlwX2lkZW50ICppZCkKIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7Ci0Jc3RydWN0IG92OTY0MF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpLAotCQkJCQlzdHJ1Y3Qgb3Y5NjQwX3ByaXYsIHN1YmRldik7CisJc3RydWN0IG92OTY0MF9wcml2ICpwcml2ID0gdG9fb3Y5NjQwX3NlbnNvcihzZCk7CiAKIAlpZC0+aWRlbnQJPSBwcml2LT5tb2RlbDsKIAlpZC0+cmV2aXNpb24JPSBwcml2LT5yZXZpc2lvbjsKQEAgLTY1NCw3ICs2NTEsOCBAQAogc3RhdGljIGludCBvdjk2NDBfdmlkZW9fcHJvYmUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCiAJCQkJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlzdHJ1Y3Qgb3Y5NjQwX3ByaXYgKnByaXYgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IG92OTY0MF9wcml2ICpwcml2ID0gdG9fb3Y5NjQwX3NlbnNvcihzZCk7CiAJdTgJCXBpZCwgdmVyLCBtaWRoLCBtaWRsOwogCWNvbnN0IGNoYXIJKmRldm5hbWU7CiAJaW50CQlyZXQgPSAwOwpAQCAtNzkxLDcgKzc4OSw4IEBACiAKIHN0YXRpYyBpbnQgb3Y5NjQwX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCXN0cnVjdCBvdjk2NDBfcHJpdiAqcHJpdiA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3Qgb3Y5NjQwX3ByaXYgKnByaXYgPSB0b19vdjk2NDBfc2Vuc29yKHNkKTsKIAogCWtmcmVlKHByaXYpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItY3RybC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItY3RybC5jCmluZGV4IDU1ZWE5MTQuLjdkNWE3MTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWN0cmwuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1jdHJsLmMKQEAgLTIwMyw3ICsyMDMsNyBAQAogCSpibGVuID0gMDsKIAlMT0NLX1RBS0UoY3B0ci0+aGR3LT5iaWdfbG9jayk7IGRvIHsKIAkJaWYgKGNwdHItPmluZm8tPnR5cGUgPT0gcHZyMl9jdGxfZW51bSkgewotCQkJY29uc3QgY2hhciAqKm5hbWVzOworCQkJY29uc3QgY2hhciAqIGNvbnN0ICpuYW1lczsKIAkJCW5hbWVzID0gY3B0ci0+aW5mby0+ZGVmLnR5cGVfZW51bS52YWx1ZV9uYW1lczsKIAkJCWlmIChwdnIyX2N0cmxfcmFuZ2VfY2hlY2soY3B0cix2YWwpID09IDApIHsKIAkJCQlpZiAobmFtZXNbdmFsXSkgewpAQCAtMzY3LDcgKzM2Nyw3IEBACiAKIHN0YXRpYyBpbnQgcGFyc2VfdG9rZW4oY29uc3QgY2hhciAqcHRyLHVuc2lnbmVkIGludCBsZW4sCiAJCSAgICAgICBpbnQgKnZhbHB0ciwKLQkJICAgICAgIGNvbnN0IGNoYXIgKipuYW1lcyx1bnNpZ25lZCBpbnQgbmFtZWNudCkKKwkJICAgICAgIGNvbnN0IGNoYXIgKiBjb25zdCAqbmFtZXMsIHVuc2lnbmVkIGludCBuYW1lY250KQogewogCWNoYXIgYnVmWzMzXTsKIAl1bnNpZ25lZCBpbnQgc2xlbjsKQEAgLTU1OSw3ICs1NTksNyBAQAogCQkqbGVuID0gc2NucHJpbnRmKGJ1ZixtYXhsZW4sIiVzIix2YWwgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKIAkJcmV0ID0gMDsKIAl9IGVsc2UgaWYgKGNwdHItPmluZm8tPnR5cGUgPT0gcHZyMl9jdGxfZW51bSkgewotCQljb25zdCBjaGFyICoqbmFtZXM7CisJCWNvbnN0IGNoYXIgKiBjb25zdCAqbmFtZXM7CiAJCW5hbWVzID0gY3B0ci0+aW5mby0+ZGVmLnR5cGVfZW51bS52YWx1ZV9uYW1lczsKIAkJaWYgKCh2YWwgPj0gMCkgJiYKIAkJICAgICh2YWwgPCBjcHRyLT5pbmZvLT5kZWYudHlwZV9lbnVtLmNvdW50KSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LWludGVybmFsLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHctaW50ZXJuYWwuaAppbmRleCBjYjQwNTdiLi5hYzk0YThiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHctaW50ZXJuYWwuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHctaW50ZXJuYWwuaApAQCAtMTE1LDcgKzExNSw3IEBACiAJCX0gdHlwZV9pbnQ7CiAJCXN0cnVjdCB7IC8qIGVudW1lcmF0ZWQgY29udHJvbCAqLwogCQkJdW5zaWduZWQgaW50IGNvdW50OyAgICAgICAvKiBlbnVtIHZhbHVlIGNvdW50ICovCi0JCQljb25zdCBjaGFyICoqdmFsdWVfbmFtZXM7IC8qIHN5bWJvbCBuYW1lcyAqLworCQkJY29uc3QgY2hhciAqIGNvbnN0ICp2YWx1ZV9uYW1lczsgLyogc3ltYm9sIG5hbWVzICovCiAJCX0gdHlwZV9lbnVtOwogCQlzdHJ1Y3QgeyAvKiBiaXRtYXNrIGNvbnRyb2wgKi8KIAkJCXVuc2lnbmVkIGludCB2YWxpZF9iaXRzOyAvKiBiaXRzIGluIHVzZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItc3lzZnMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXN5c2ZzLmMKaW5kZXggM2Q3ZTVhYS4uMjgxODA2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItc3lzZnMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1zeXNmcy5jCkBAIC02NDcsNyArNjQ3LDcgQEAKIAlpZiAocmV0KSB7CiAJCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9FUlJPUl9MRUdTLAogCQkJICAgImRldmljZV9yZWdpc3RlciBmYWlsZWQiKTsKLQkJa2ZyZWUoY2xhc3NfZGV2KTsKKwkJcHV0X2RldmljZShjbGFzc19kZXYpOwogCQlyZXR1cm47CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi12NGwyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi12NGwyLmMKaW5kZXggYWFhZmEwMy4uNTg2MTdmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItdjRsMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXY0bDIuYwpAQCAtODUyLDggKzg1Miw4IEBACiAjZW5kaWYKIAogCWRlZmF1bHQgOgotCQlyZXQgPSB2NGxfY29tcGF0X3RyYW5zbGF0ZV9pb2N0bChmaWxlLCBjbWQsCi0JCQkJCQkgYXJnLCBwdnIyX3Y0bDJfZG9faW9jdGwpOworCQlyZXQgPSAtRUlOVkFMOworCQlicmVhazsKIAl9CiAKIAlwdnIyX2hkd19jb21taXRfY3RsKGhkdyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2MtY3RybC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLWN0cmwuYwppbmRleCA2YjhmYmRkLi4xNTkzZjhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2MtY3RybC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy1jdHJsLmMKQEAgLTEzODYsMTEgKzEzODYsMTYgQEAKIAl7CiAJCUFSR19ERUYoaW50LCBxdWFsKQogCisJCWlmIChwZGV2LT5pc29faW5pdCkgeworCQkJcmV0ID0gLUVCVVNZOworCQkJYnJlYWs7CisJCX0KKwogCQlBUkdfSU4ocXVhbCkKIAkJaWYgKEFSR1IocXVhbCkgPCAwIHx8IEFSR1IocXVhbCkgPiAzKQogCQkJcmV0ID0gLUVJTlZBTDsKIAkJZWxzZQotCQkJcmV0ID0gcHdjX3RyeV92aWRlb19tb2RlKHBkZXYsIHBkZXYtPnZpZXcueCwgcGRldi0+dmlldy55LCBwZGV2LT52ZnJhbWVzLCBBUkdSKHF1YWwpLCBwZGV2LT52c25hcHNob3QpOworCQkJcmV0ID0gcHdjX3NldF92aWRlb19tb2RlKHBkZXYsIHBkZXYtPnZpZXcueCwgcGRldi0+dmlldy55LCBwZGV2LT52ZnJhbWVzLCBBUkdSKHF1YWwpLCBwZGV2LT52c25hcHNob3QpOwogCQlpZiAocmV0ID49IDApCiAJCQlwZGV2LT52Y29tcHJlc3Npb24gPSBBUkdSKHF1YWwpOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy1pZi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLWlmLmMKaW5kZXggZjNkYzg5ZC4uYmQxNTE5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLWlmLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLWlmLmMKQEAgLTI4NywxNCArMjg3LDEzIEBACiAJLyogY3JlYXRlIGZyYW1lIGJ1ZmZlcnMsIGFuZCBtYWtlIGNpcmN1bGFyIHJpbmcgKi8KIAlmb3IgKGkgPSAwOyBpIDwgZGVmYXVsdF9mYnVmczsgaSsrKSB7CiAJCWlmIChwZGV2LT5mYnVmW2ldLmRhdGEgPT0gTlVMTCkgewotCQkJa2J1ZiA9IHZtYWxsb2MoUFdDX0ZSQU1FX1NJWkUpOyAvKiBuZWVkIHZtYWxsb2Mgc2luY2UgZnJhbWUgYnVmZmVyID4gMTI4SyAqLworCQkJa2J1ZiA9IHZ6YWxsb2MoUFdDX0ZSQU1FX1NJWkUpOyAvKiBuZWVkIHZtYWxsb2Mgc2luY2UgZnJhbWUgYnVmZmVyID4gMTI4SyAqLwogCQkJaWYgKGtidWYgPT0gTlVMTCkgewogCQkJCVBXQ19FUlJPUigiRmFpbGVkIHRvIGFsbG9jYXRlIGZyYW1lIGJ1ZmZlciAlZC5cbiIsIGkpOwogCQkJCXJldHVybiAtRU5PTUVNOwogCQkJfQogCQkJUFdDX0RFQlVHX01FTU9SWSgiQWxsb2NhdGVkIGZyYW1lIGJ1ZmZlciAlZCBhdCAlcC5cbiIsIGksIGtidWYpOwogCQkJcGRldi0+ZmJ1ZltpXS5kYXRhID0ga2J1ZjsKLQkJCW1lbXNldChrYnVmLCAwLCBQV0NfRlJBTUVfU0laRSk7CiAJCX0KIAl9CiAKQEAgLTg5OSwxMCArODk4LDEzIEBACiAJLyogbGluayAqLwogCWZvciAoaSA9IDA7IGkgPCBNQVhfSVNPX0JVRlM7IGkrKykgewogCQlyZXQgPSB1c2Jfc3VibWl0X3VyYihwZGV2LT5zYnVmW2ldLnVyYiwgR0ZQX0tFUk5FTCk7Ci0JCWlmIChyZXQpCisJCWlmIChyZXQpIHsKIAkJCVBXQ19FUlJPUigiaXNvY19pbml0KCkgc3VibWl0X3VyYiAlZCBmYWlsZWQgd2l0aCBlcnJvciAlZFxuIiwgaSwgcmV0KTsKLQkJZWxzZQotCQkJUFdDX0RFQlVHX01FTU9SWSgiVVJCIDB4JXAgc3VibWl0dGVkLlxuIiwgcGRldi0+c2J1ZltpXS51cmIpOworCQkJcGRldi0+aXNvX2luaXQgPSAxOworCQkJcHdjX2lzb2NfY2xlYW51cChwZGV2KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwkJUFdDX0RFQlVHX01FTU9SWSgiVVJCIDB4JXAgc3VibWl0dGVkLlxuIiwgcGRldi0+c2J1ZltpXS51cmIpOwogCX0KIAogCS8qIEFsbCBpcyBkb25lLi4uICovCkBAIC05NTgsNyArOTYwLDcgQEAKIAkvKiBTdG9wIGNhbWVyYSwgYnV0IG9ubHkgaWYgd2UgYXJlIHN1cmUgdGhlIGNhbWVyYSBpcyBzdGlsbCB0aGVyZSAodW5wbHVnCiAJICAgaXMgc2lnbmFsbGVkIGJ5IEVQSVBFKQogCSAqLwotCWlmIChwZGV2LT5lcnJvcl9zdGF0dXMgJiYgcGRldi0+ZXJyb3Jfc3RhdHVzICE9IEVQSVBFKSB7CisJaWYgKHBkZXYtPmVycm9yX3N0YXR1cyAhPSBFUElQRSkgewogCQlQV0NfREVCVUdfT1BFTigiU2V0dGluZyBhbHRlcm5hdGUgaW50ZXJmYWNlIDAuXG4iKTsKIAkJdXNiX3NldF9pbnRlcmZhY2UocGRldi0+dWRldiwgMCwgMCk7CiAJfQpAQCAtOTY3LDM2ICs5NjksNiBAQAogCVBXQ19ERUJVR19PUEVOKCI8PCBwd2NfaXNvY19jbGVhbnVwKClcbiIpOwogfQogCi1pbnQgcHdjX3RyeV92aWRlb19tb2RlKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBuZXdfZnBzLCBpbnQgbmV3X2NvbXByZXNzaW9uLCBpbnQgbmV3X3NuYXBzaG90KQotewotCWludCByZXQsIHN0YXJ0OwotCi0JLyogU3RvcCBpc29jIHN0dWZmICovCi0JcHdjX2lzb2NfY2xlYW51cChwZGV2KTsKLQkvKiBSZXNldCBwYXJhbWV0ZXJzICovCi0JcHdjX3Jlc2V0X2J1ZmZlcnMocGRldik7Ci0JLyogVHJ5IHRvIHNldCB2aWRlbyBtb2RlLi4uICovCi0Jc3RhcnQgPSByZXQgPSBwd2Nfc2V0X3ZpZGVvX21vZGUocGRldiwgd2lkdGgsIGhlaWdodCwgbmV3X2ZwcywgbmV3X2NvbXByZXNzaW9uLCBuZXdfc25hcHNob3QpOwotCWlmIChyZXQpIHsKLQkJUFdDX0RFQlVHX0ZMT1coInB3Y19zZXRfdmlkZW9fbW9kZSBhdHRlbXB0IDEgZmFpbGVkLlxuIik7Ci0JCS8qIFRoYXQgZmFpbGVkLi4uIHJlc3RvcmUgb2xkIG1vZGUgKHdlIGtub3cgdGhhdCB3b3JrZWQpICovCi0JCXN0YXJ0ID0gcHdjX3NldF92aWRlb19tb2RlKHBkZXYsIHBkZXYtPnZpZXcueCwgcGRldi0+dmlldy55LCBwZGV2LT52ZnJhbWVzLCBwZGV2LT52Y29tcHJlc3Npb24sIHBkZXYtPnZzbmFwc2hvdCk7Ci0JCWlmIChzdGFydCkgewotCQkJUFdDX0RFQlVHX0ZMT1coInB3Y19zZXRfdmlkZW9fbW9kZSBhdHRlbXB0IDIgZmFpbGVkLlxuIik7Ci0JCX0KLQl9Ci0JaWYgKHN0YXJ0ID09IDApCi0JewotCQlpZiAocHdjX2lzb2NfaW5pdChwZGV2KSA8IDApCi0JCXsKLQkJCVBXQ19XQVJOSU5HKCJGYWlsZWQgdG8gcmVzdGFydCBJU09DIHRyYW5zZmVycyBpbiBwd2NfdHJ5X3ZpZGVvX21vZGUuXG4iKTsKLQkJCXJldCA9IC1FQUdBSU47IC8qIGxldCdzIHRyeSBhZ2Fpbiwgd2hvIGtub3dzIGlmIGl0IHdvcmtzIGEgc2Vjb25kIHRpbWUgKi8KLQkJfQotCX0KLQlwZGV2LT5kcm9wX2ZyYW1lcysrOyAvKiB0cnkgdG8gYXZvaWQgZ2FyYmFnZSBkdXJpbmcgc3dpdGNoICovCi0JcmV0dXJuIHJldDsgLyogUmV0dXJuIG9yaWdpbmFsIGVycm9yIGNvZGUgKi8KLX0KLQogLyoqKioqKioqKgogICogc3lzZnMKICAqKioqKioqKiovCkBAIC0xMTc2LDcgKzExNDgsNyBAQAogCS8qIFNldCBzb21lIGRlZmF1bHRzICovCiAJcGRldi0+dnNuYXBzaG90ID0gMDsKIAotCS8qIFN0YXJ0IGlzbyBwaXBlIGZvciB2aWRlbzsgZmlyc3QgdHJ5IHRoZSBsYXN0IHVzZWQgdmlkZW8gc2l6ZQorCS8qIFNldCB2aWRlbyBzaXplLCBmaXJzdCB0cnkgdGhlIGxhc3QgdXNlZCB2aWRlbyBzaXplCiAJICAgKG9yIHRoZSBkZWZhdWx0IG9uZSk7IGlmIHRoYXQgZmFpbHMgdHJ5IFFDSUYvMTAgb3IgUVNJRi8xMDsKIAkgICBpdCB0aGF0IGZhaWxzIHRvbywgZ2l2ZSB1cC4KIAkgKi8KQEAgLTEyMDMsMTUgKzExNzUsNiBAQAogCQlyZXR1cm4gaTsKIAl9CiAKLQlpID0gcHdjX2lzb2NfaW5pdChwZGV2KTsKLQlpZiAoaSkgewotCQlQV0NfREVCVUdfT1BFTigiRmFpbGVkIHRvIGluaXQgSVNPQyBzdHVmZiA9ICVkLlxuIiwgaSk7Ci0JCXB3Y19pc29jX2NsZWFudXAocGRldik7Ci0JCXB3Y19mcmVlX2J1ZmZlcnMocGRldik7Ci0JCW11dGV4X3VubG9jaygmcGRldi0+bW9kbG9jayk7Ci0JCXJldHVybiBpOwotCX0KLQogCS8qIEluaXRpYWxpemUgdGhlIHdlYmNhbSB0byBzYW5lIHZhbHVlICovCiAJcHdjX3NldF9icmlnaHRuZXNzKHBkZXYsIDB4N2ZmZik7CiAJcHdjX3NldF9hZ2MocGRldiwgMSwgMCk7CkBAIC0xMzI2LDYgKzEyODksMTEgQEAKIAkJZ290byBlcnJfb3V0OwogCX0KIAorCS8qIFN0YXJ0IHRoZSBzdHJlYW0gKGlmIG5vdCBhbHJlYWR5IHN0YXJ0ZWQpICovCisJcnYgPSBwd2NfaXNvY19pbml0KHBkZXYpOworCWlmIChydikKKwkJZ290byBlcnJfb3V0OworCiAJLyogSW4gY2FzZSB3ZSdyZSBkb2luZyBwYXJ0aWFsIHJlYWRzLCB3ZSBkb24ndCBoYXZlIHRvIHdhaXQgZm9yIGEgZnJhbWUgKi8KIAlpZiAocGRldi0+aW1hZ2VfcmVhZF9wb3MgPT0gMCkgewogCQkvKiBEbyB3YWl0IHF1ZXVlaW5nIGFjY29yZGluZyB0byB0aGUgKGRvYylib29rICovCkBAIC0xMzk1LDYgKzEzNjMsNyBAQAogewogCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHB3Y19kZXZpY2UgKnBkZXY7CisJaW50IHJldDsKIAogCWlmICh2ZGV2ID09IE5VTEwpCiAJCXJldHVybiAtRUZBVUxUOwpAQCAtMTQwMiw2ICsxMzcxLDEzIEBACiAJaWYgKHBkZXYgPT0gTlVMTCkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKKwkvKiBTdGFydCB0aGUgc3RyZWFtIChpZiBub3QgYWxyZWFkeSBzdGFydGVkKSAqLworCW11dGV4X2xvY2soJnBkZXYtPm1vZGxvY2spOworCXJldCA9IHB3Y19pc29jX2luaXQocGRldik7CisJbXV0ZXhfdW5sb2NrKCZwZGV2LT5tb2Rsb2NrKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCiAJcG9sbF93YWl0KGZpbGUsICZwZGV2LT5mcmFtZXEsIHdhaXQpOwogCWlmIChwZGV2LT5lcnJvcl9zdGF0dXMpCiAJCXJldHVybiBQT0xMRVJSOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLXY0bC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLXY0bC5jCmluZGV4IDcwNjFhMDMuLjhjYTRkMjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy12NGwuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2MtdjRsLmMKQEAgLTMwOSw3ICszMDksMTAgQEAKIAkgICAgcGl4ZWxmb3JtYXQgIT0gVjRMMl9QSVhfRk1UX1BXQzIpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JUFdDX0RFQlVHX0lPQ1RMKCJUcnkgdG8gY2hhbmdlIGZvcm1hdCB0bzogd2lkdGg9JWQgaGVpZ2h0PSVkIGZwcz0lZCAiCisJaWYgKHBkZXYtPmlzb19pbml0KQorCQlyZXR1cm4gLUVCVVNZOworCisJUFdDX0RFQlVHX0lPQ1RMKCJUcnlpbmcgdG8gc2V0IGZvcm1hdCB0bzogd2lkdGg9JWQgaGVpZ2h0PSVkIGZwcz0lZCAiCiAJCQkiY29tcHJlc3Npb249JWQgc25hcHNob3Q9JWQgZm9ybWF0PSVjJWMlYyVjXG4iLAogCQkJZi0+Zm10LnBpeC53aWR0aCwgZi0+Zm10LnBpeC5oZWlnaHQsIGZwcywKIAkJCWNvbXByZXNzaW9uLCBzbmFwc2hvdCwKQEAgLTMxOCwxNCArMzIxLDE0IEBACiAJCQkocGl4ZWxmb3JtYXQ+PjE2KSYyNTUsCiAJCQkocGl4ZWxmb3JtYXQ+PjI0KSYyNTUpOwogCi0JcmV0ID0gcHdjX3RyeV92aWRlb19tb2RlKHBkZXYsCisJcmV0ID0gcHdjX3NldF92aWRlb19tb2RlKHBkZXYsCiAJCQkJIGYtPmZtdC5waXgud2lkdGgsCiAJCQkJIGYtPmZtdC5waXguaGVpZ2h0LAogCQkJCSBmcHMsCiAJCQkJIGNvbXByZXNzaW9uLAogCQkJCSBzbmFwc2hvdCk7CiAKLQlQV0NfREVCVUdfSU9DVEwoInB3Y190cnlfdmlkZW9fbW9kZSgpLCByZXR1cm49JWRcbiIsIHJldCk7CisJUFdDX0RFQlVHX0lPQ1RMKCJwd2Nfc2V0X3ZpZGVvX21vZGUoKSwgcmV0dXJuPSVkXG4iLCByZXQpOwogCiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKQEAgLTM1OSwyMyArMzYyLDYgQEAKIAogCiAJc3dpdGNoIChjbWQpIHsKLSNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKLQkJLyogbW1hcCgpIGZ1bmN0aW9ucyAqLwotCQljYXNlIFZJRElPQ0dNQlVGOgotCQl7Ci0JCQkvKiBUZWxsIHRoZSB1c2VyIHByb2dyYW0gaG93IG11Y2ggbWVtb3J5IGlzIG5lZWRlZCBmb3IgYSBtbWFwKCkgKi8KLQkJCXN0cnVjdCB2aWRlb19tYnVmICp2bSA9IGFyZzsKLQkJCWludCBpOwotCi0JCQltZW1zZXQodm0sIDAsIHNpemVvZigqdm0pKTsKLQkJCXZtLT5zaXplID0gcHdjX21idWZzICogcGRldi0+bGVuX3Blcl9pbWFnZTsKLQkJCXZtLT5mcmFtZXMgPSBwd2NfbWJ1ZnM7IC8qIGRvdWJsZSBidWZmZXJpbmcgc2hvdWxkIGJlIGVub3VnaCBmb3IgbW9zdCBhcHBsaWNhdGlvbnMgKi8KLQkJCWZvciAoaSA9IDA7IGkgPCBwd2NfbWJ1ZnM7IGkrKykKLQkJCQl2bS0+b2Zmc2V0c1tpXSA9IGkgKiBwZGV2LT5sZW5fcGVyX2ltYWdlOwotCQkJYnJlYWs7Ci0JCX0KLSNlbmRpZgotCiAJCS8qIFY0TDIgTGF5ZXIgKi8KIAkJY2FzZSBWSURJT0NfUVVFUllDQVA6CiAJCXsKQEAgLTg4Miw5ICs4NjgsNyBAQAogCiAJCWNhc2UgVklESU9DX1NUUkVBTU9OOgogCQl7Ci0JCQkvKiBXQVJOSU5HOiBwd2NfdHJ5X3ZpZGVvX21vZGUoKSBjYWxsZWQgcHdjX2lzb2NfaW5pdCAqLwotCQkJcHdjX2lzb2NfaW5pdChwZGV2KTsKLQkJCXJldHVybiAwOworCQkJcmV0dXJuIHB3Y19pc29jX2luaXQocGRldik7CiAJCX0KIAogCQljYXNlIFZJRElPQ19TVFJFQU1PRkY6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2MuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy5oCmluZGV4IDM2YTljODMuLjE2YmJjNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy5oCkBAIC0yNzUsNyArMjc1LDYgQEAKIGV4dGVybiBpbnQgcHdjX21idWZzOwogCiAvKiogZnVuY3Rpb25zIGluIHB3Yy1pZi5jICovCi1pbnQgcHdjX3RyeV92aWRlb19tb2RlKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBuZXdfZnBzLCBpbnQgbmV3X2NvbXByZXNzaW9uLCBpbnQgbmV3X3NuYXBzaG90KTsKIGludCBwd2NfaGFuZGxlX2ZyYW1lKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2KTsKIHZvaWQgcHdjX25leHRfaW1hZ2Uoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYpOwogaW50IHB3Y19pc29jX2luaXQoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9weGFfY2FtZXJhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B4YV9jYW1lcmEuYwppbmRleCBjMTQzZWQwLi4wMjY4Njc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B4YV9jYW1lcmEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B4YV9jYW1lcmEuYwpAQCAtODUyLDcgKzg1Miw3IEBACiAJICovCiAJdmlkZW9idWZfcXVldWVfc2dfaW5pdChxLCAmcHhhX3ZpZGVvYnVmX29wcywgTlVMTCwgJnBjZGV2LT5sb2NrLAogCQkJCVY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSwgVjRMMl9GSUVMRF9OT05FLAotCQkJCXNpemVvZihzdHJ1Y3QgcHhhX2J1ZmZlciksIGljZCwgTlVMTCk7CisJCQkJc2l6ZW9mKHN0cnVjdCBweGFfYnVmZmVyKSwgaWNkLCAmaWNkLT52aWRlb19sb2NrKTsKIH0KIAogc3RhdGljIHUzMiBtY2xrX2dldF9kaXZpc29yKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3JqNTRuMWNiMGMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcmo1NG4xY2IwYy5jCmluZGV4IGQyZmEyZDQuLjU3ZTExYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcmo1NG4xY2IwYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcmo1NG4xY2IwYy5jCkBAIC0xNDYwLDcgKzE0NjAsNiBAQAogCWljZC0+b3BzID0gTlVMTDsKIAlpZiAoaWNsLT5mcmVlX2J1cykKIAkJaWNsLT5mcmVlX2J1cyhpY2wpOwotCWNsaWVudC0+ZHJpdmVyID0gTlVMTDsKIAlrZnJlZShyajU0bjEpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3MyMjU1ZHJ2LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3MyMjU1ZHJ2LmMKaW5kZXggYTg0NTc1My4uYjYzZjhjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zMjI1NWRydi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vczIyNTVkcnYuYwpAQCAtMjY4LDcgKzI2OCw3IEBACiAJc3RydWN0IHY0bDJfZGV2aWNlIAl2NGwyX2RldjsKIAlhdG9taWNfdCAgICAgICAgICAgICAgICBudW1fY2hhbm5lbHM7CiAJaW50CQkJZnJhbWVzOwotCXN0cnVjdCBtdXRleAkJbG9jazsKKwlzdHJ1Y3QgbXV0ZXgJCWxvY2s7CS8qIGNoYW5uZWxzW10udmRldi5sb2NrICovCiAJc3RydWN0IG11dGV4CQlvcGVuX2xvY2s7CiAJc3RydWN0IHVzYl9kZXZpY2UJKnVkZXY7CiAJc3RydWN0IHVzYl9pbnRlcmZhY2UJKmludGVyZmFjZTsKQEAgLTc4MCwyMCArNzgwLDE0IEBACiAKIHN0YXRpYyBpbnQgcmVzX2dldChzdHJ1Y3QgczIyNTVfZmggKmZoKQogewotCXN0cnVjdCBzMjI1NV9kZXYgKmRldiA9IGZoLT5kZXY7Ci0JLyogaXMgaXQgZnJlZT8gKi8KIAlzdHJ1Y3QgczIyNTVfY2hhbm5lbCAqY2hhbm5lbCA9IGZoLT5jaGFubmVsOwotCW11dGV4X2xvY2soJmRldi0+bG9jayk7Ci0JaWYgKGNoYW5uZWwtPnJlc291cmNlcykgewotCQkvKiBubywgc29tZW9uZSBlbHNlIHVzZXMgaXQgKi8KLQkJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwotCQlyZXR1cm4gMDsKLQl9CisJLyogaXMgaXQgZnJlZT8gKi8KKwlpZiAoY2hhbm5lbC0+cmVzb3VyY2VzKQorCQlyZXR1cm4gMDsgLyogbm8sIHNvbWVvbmUgZWxzZSB1c2VzIGl0ICovCiAJLyogaXQncyBmcmVlLCBncmFiIGl0ICovCiAJY2hhbm5lbC0+cmVzb3VyY2VzID0gMTsKIAlmaC0+cmVzb3VyY2VzID0gMTsKIAlkcHJpbnRrKDEsICJzMjI1NTogcmVzOiBnZXRcbiIpOwotCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKIAlyZXR1cm4gMTsKIH0KIApAQCAtODExLDExICs4MDUsOCBAQAogc3RhdGljIHZvaWQgcmVzX2ZyZWUoc3RydWN0IHMyMjU1X2ZoICpmaCkKIHsKIAlzdHJ1Y3QgczIyNTVfY2hhbm5lbCAqY2hhbm5lbCA9IGZoLT5jaGFubmVsOwotCXN0cnVjdCBzMjI1NV9kZXYgKmRldiA9IGZoLT5kZXY7Ci0JbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKIAljaGFubmVsLT5yZXNvdXJjZXMgPSAwOwogCWZoLT5yZXNvdXJjZXMgPSAwOwotCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKIAlkcHJpbnRrKDEsICJyZXM6IHB1dFxuIik7CiB9CiAKQEAgLTExMDYsMTUgKzEwOTcsNiBAQAogCXJldHVybiByYzsKIH0KIAotI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAotc3RhdGljIGludCB2aWRpb2NfY2dtYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdmlkZW9fbWJ1ZiAqbWJ1ZikKLXsKLQlzdHJ1Y3QgczIyNTVfZmggKmZoID0gcHJpdjsKLQotCXJldHVybiB2aWRlb2J1Zl9jZ21idWYoJmZoLT52Yl92aWRxLCBtYnVmLCA4KTsKLX0KLSNlbmRpZgotCiAvKiB3cml0ZSB0byB0aGUgY29uZmlndXJhdGlvbiBwaXBlLCBzeW5jaHJvbm91c2x5ICovCiBzdGF0aWMgaW50IHMyMjU1X3dyaXRlX2NvbmZpZyhzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgdW5zaWduZWQgY2hhciAqcGJ1ZiwKIAkJCSAgICAgIGludCBzaXplKQpAQCAtMTIxOCw3ICsxMjAwLDYgQEAKIAlfX2xlMzIgKmJ1ZmZlcjsKIAl1bnNpZ25lZCBsb25nIGNobl9yZXY7CiAJc3RydWN0IHMyMjU1X2RldiAqZGV2ID0gdG9fczIyNTVfZGV2KGNoYW5uZWwtPnZkZXYudjRsMl9kZXYpOwotCW11dGV4X2xvY2soJmRldi0+bG9jayk7CiAJY2huX3JldiA9IEdfY2hubWFwW2NoYW5uZWwtPmlkeF07CiAJZHByaW50aygzLCAiJXMgY2hhbm5lbDogJWRcbiIsIF9fZnVuY19fLCBjaGFubmVsLT5pZHgpOwogCS8qIGlmIEpQRUcsIHNldCB0aGUgcXVhbGl0eSAqLwpAQCAtMTIzNSw3ICsxMjE2LDYgQEAKIAlidWZmZXIgPSBremFsbG9jKDUxMiwgR0ZQX0tFUk5FTCk7CiAJaWYgKGJ1ZmZlciA9PSBOVUxMKSB7CiAJCWRldl9lcnIoJmRldi0+dWRldi0+ZGV2LCAib3V0IG9mIG1lbVxuIik7Ci0JCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCS8qIHNldCB0aGUgbW9kZSAqLwpAQCAtMTI2MCw3ICsxMjQwLDYgQEAKIAl9CiAJLyogY2xlYXIgdGhlIHJlc3RhcnQgZmxhZyAqLwogCWNoYW5uZWwtPm1vZGUucmVzdGFydCA9IDA7Ci0JbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwogCWRwcmludGsoMSwgIiVzIGNobiAlZCwgcmVzdWx0OiAlZFxuIiwgX19mdW5jX18sIGNoYW5uZWwtPmlkeCwgcmVzKTsKIAlyZXR1cm4gcmVzOwogfQpAQCAtMTI3MSwxMyArMTI1MCwxMSBAQAogCV9fbGUzMiAqYnVmZmVyOwogCXUzMiBjaG5fcmV2OwogCXN0cnVjdCBzMjI1NV9kZXYgKmRldiA9IHRvX3MyMjU1X2RldihjaGFubmVsLT52ZGV2LnY0bDJfZGV2KTsKLQltdXRleF9sb2NrKCZkZXYtPmxvY2spOwogCWNobl9yZXYgPSBHX2Nobm1hcFtjaGFubmVsLT5pZHhdOwogCWRwcmludGsoNCwgIiVzIGNoYW4gJWRcbiIsIF9fZnVuY19fLCBjaGFubmVsLT5pZHgpOwogCWJ1ZmZlciA9IGt6YWxsb2MoNTEyLCBHRlBfS0VSTkVMKTsKIAlpZiAoYnVmZmVyID09IE5VTEwpIHsKIAkJZGV2X2VycigmZGV2LT51ZGV2LT5kZXYsICJvdXQgb2YgbWVtXG4iKTsKLQkJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJLyogZm9ybSB0aGUgZ2V0IHZpZCBzdGF0dXMgY29tbWFuZCAqLwpAQCAtMTI5Nyw3ICsxMjc0LDYgQEAKIAl9CiAJKnBzdGF0dXMgPSBjaGFubmVsLT52aWRzdGF0dXM7CiAJZHByaW50ayg0LCAiJXMsIHZpZCBzdGF0dXMgJWRcbiIsIF9fZnVuY19fLCAqcHN0YXR1cyk7Ci0JbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwogCXJldHVybiByZXM7CiB9CiAKQEAgLTE4MTYsNyArMTc5Miw4IEBACiAJCQkJICAgIE5VTEwsICZkZXYtPnNsb2NrLAogCQkJCSAgICBmaC0+dHlwZSwKIAkJCQkgICAgVjRMMl9GSUVMRF9JTlRFUkxBQ0VELAotCQkJCSAgICBzaXplb2Yoc3RydWN0IHMyMjU1X2J1ZmZlciksIGZoLCBOVUxMKTsKKwkJCQkgICAgc2l6ZW9mKHN0cnVjdCBzMjI1NV9idWZmZXIpLAorCQkJCSAgICBmaCwgdmRldi0+bG9jayk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE4OTksNyArMTg3Niw3IEBACiAJLm9wZW4gPSBzMjI1NV9vcGVuLAogCS5yZWxlYXNlID0gczIyNTVfcmVsZWFzZSwKIAkucG9sbCA9IHMyMjU1X3BvbGwsCi0JLmlvY3RsID0gdmlkZW9faW9jdGwyLAkvKiBWNEwyIGlvY3RsIGhhbmRsZXIgKi8KKwkudW5sb2NrZWRfaW9jdGwgPSB2aWRlb19pb2N0bDIsCS8qIFY0TDIgaW9jdGwgaGFuZGxlciAqLwogCS5tbWFwID0gczIyNTVfbW1hcF92NGwsCiB9OwogCkBAIC0xOTIzLDkgKzE5MDAsNiBAQAogCS52aWRpb2Nfc19jdHJsID0gdmlkaW9jX3NfY3RybCwKIAkudmlkaW9jX3N0cmVhbW9uID0gdmlkaW9jX3N0cmVhbW9uLAogCS52aWRpb2Nfc3RyZWFtb2ZmID0gdmlkaW9jX3N0cmVhbW9mZiwKLSNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKLQkudmlkaW9jZ21idWYgPSB2aWRpb2NfY2dtYnVmLAotI2VuZGlmCiAJLnZpZGlvY19zX2pwZWdjb21wID0gdmlkaW9jX3NfanBlZ2NvbXAsCiAJLnZpZGlvY19nX2pwZWdjb21wID0gdmlkaW9jX2dfanBlZ2NvbXAsCiAJLnZpZGlvY19zX3Bhcm0gPSB2aWRpb2Nfc19wYXJtLApAQCAtMTk2OSw2ICsxOTQzLDcgQEAKIAkJY2hhbm5lbC0+dmlkcS5kZXYgPSBkZXY7CiAJCS8qIHJlZ2lzdGVyIDQgdmlkZW8gZGV2aWNlcyAqLwogCQljaGFubmVsLT52ZGV2ID0gdGVtcGxhdGU7CisJCWNoYW5uZWwtPnZkZXYubG9jayA9ICZkZXYtPmxvY2s7CiAJCWNoYW5uZWwtPnZkZXYudjRsMl9kZXYgPSAmZGV2LT52NGwyX2RldjsKIAkJdmlkZW9fc2V0X2RydmRhdGEoJmNoYW5uZWwtPnZkZXYsIGNoYW5uZWwpOwogCQlpZiAodmlkZW9fbnIgPT0gLTEpCkBAIC0yNjc1LDcgKzI2NTAsOSBAQAogCXN0cnVjdCBzMjI1NV9kZXYgKmRldiA9IHRvX3MyMjU1X2Rldih1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSkpOwogCWludCBpOwogCWludCBjaGFubmVscyA9IGF0b21pY19yZWFkKCZkZXYtPm51bV9jaGFubmVscyk7CisJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKIAl2NGwyX2RldmljZV9kaXNjb25uZWN0KCZkZXYtPnY0bDJfZGV2KTsKKwltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiAJLypzZWUgY29tbWVudHMgaW4gdGhlIHV2Y19kcml2ZXIuYyB1c2IgZGlzY29ubmVjdCBmdW5jdGlvbiAqLwogCWF0b21pY19pbmMoJmRldi0+bnVtX2NoYW5uZWxzKTsKIAkvKiB1bnJlZ2lzdGVyIGVhY2ggdmlkZW8gZGV2aWNlLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zNXAtZmltYy9maW1jLWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vczVwLWZpbWMvZmltYy1jb3JlLmMKaW5kZXggYmI5OWYyZC4uODE3YWE2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zNXAtZmltYy9maW1jLWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3M1cC1maW1jL2ZpbWMtY29yZS5jCkBAIC01NDMsNyArNTQzLDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiByZXQ7CiAKLQlpZiAoV0FSTighY3R4LCAibnVsbCBoYXJkd2FyZSBjb250ZXh0IikpCisJaWYgKFdBUk4oIWN0eCwgIm51bGwgaGFyZHdhcmUgY29udGV4dFxuIikpCiAJCXJldHVybjsKIAogCWZpbWMgPSBjdHgtPmZpbWNfZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE2NTg4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTY1ODguYwppbmRleCA5ODRjMGZlLi45OWEyYWMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTY1ODguYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTY1ODguYwpAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCi0jaW5jbHVkZSA8bWVkaWEvcmRzLmg+CisjaW5jbHVkZSA8bWVkaWEvc2FhNjU4OC5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+CiAKQEAgLTE4MSw3ICsxODEsNyBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgdm9pZCByZWFkX2Zyb21fYnVmKHN0cnVjdCBzYWE2NTg4ICpzLCBzdHJ1Y3QgcmRzX2NvbW1hbmQgKmEpCitzdGF0aWMgdm9pZCByZWFkX2Zyb21fYnVmKHN0cnVjdCBzYWE2NTg4ICpzLCBzdHJ1Y3Qgc2FhNjU4OF9jb21tYW5kICphKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTM5MiwyNSArMzkyLDI1IEBACiBzdGF0aWMgbG9uZyBzYWE2NTg4X2lvY3RsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKIHsKIAlzdHJ1Y3Qgc2FhNjU4OCAqcyA9IHRvX3NhYTY1ODgoc2QpOwotCXN0cnVjdCByZHNfY29tbWFuZCAqYSA9IGFyZzsKKwlzdHJ1Y3Qgc2FhNjU4OF9jb21tYW5kICphID0gYXJnOwogCiAJc3dpdGNoIChjbWQpIHsKIAkJLyogLS0tIG9wZW4oKSBmb3IgL2Rldi9yYWRpbyAtLS0gKi8KLQljYXNlIFJEU19DTURfT1BFTjoKKwljYXNlIFNBQTY1ODhfQ01EX09QRU46CiAJCWEtPnJlc3VsdCA9IDA7CS8qIHJldHVybiBlcnJvciBpZiBjaGlwIGRvZXNuJ3Qgd29yayA/Pz8gKi8KIAkJYnJlYWs7CiAJCS8qIC0tLSBjbG9zZSgpIGZvciAvZGV2L3JhZGlvIC0tLSAqLwotCWNhc2UgUkRTX0NNRF9DTE9TRToKKwljYXNlIFNBQTY1ODhfQ01EX0NMT1NFOgogCQlzLT5kYXRhX2F2YWlsYWJsZV9mb3JfcmVhZCA9IDE7CiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcy0+cmVhZF9xdWV1ZSk7CiAJCWEtPnJlc3VsdCA9IDA7CiAJCWJyZWFrOwogCQkvKiAtLS0gcmVhZCgpIGZvciAvZGV2L3JhZGlvIC0tLSAqLwotCWNhc2UgUkRTX0NNRF9SRUFEOgorCWNhc2UgU0FBNjU4OF9DTURfUkVBRDoKIAkJcmVhZF9mcm9tX2J1ZihzLCBhKTsKIAkJYnJlYWs7CiAJCS8qIC0tLSBwb2xsKCkgZm9yIC9kZXYvcmFkaW8gLS0tICovCi0JY2FzZSBSRFNfQ01EX1BPTEw6CisJY2FzZSBTQUE2NTg4X0NNRF9QT0xMOgogCQlhLT5yZXN1bHQgPSAwOwogCQlpZiAocy0+ZGF0YV9hdmFpbGFibGVfZm9yX3JlYWQpIHsKIAkJCWEtPnJlc3VsdCB8PSBQT0xMSU4gfCBQT0xMUkROT1JNOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTE1LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTUuYwppbmRleCAzMDFjNjJiLi5mMzU0NTlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTUuYwpAQCAtMTM0OCw4ICsxMzQ4LDE3IEBACiAJaW50IHJlZzFlOwogCiAJKnN0ZCA9IFY0TDJfU1REX0FMTDsKLQlpZiAoc3RhdGUtPmlkZW50ICE9IFY0TDJfSURFTlRfU0FBNzExNSkKKwlpZiAoc3RhdGUtPmlkZW50ICE9IFY0TDJfSURFTlRfU0FBNzExNSkgeworCQlpbnQgcmVnMWYgPSBzYWE3MTF4X3JlYWQoc2QsIFJfMUZfU1RBVFVTX0JZVEVfMl9WRF9ERUMpOworCisJCWlmIChyZWcxZiAmIDB4MjApCisJCQkqc3RkID0gVjRMMl9TVERfNTI1XzYwOworCQllbHNlCisJCQkqc3RkID0gVjRMMl9TVERfNjI1XzUwOworCiAJCXJldHVybiAwOworCX0KKwogCXJlZzFlID0gc2FhNzExeF9yZWFkKHNkLCBSXzFFX1NUQVRVU19CWVRFXzFfVkRfREVDKTsKIAogCXN3aXRjaCAocmVnMWUgJiAweDAzKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9LY29uZmlnCmluZGV4IDNmZTcxYmUuLjM4MGYxYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9LY29uZmlnCkBAIC0yNiw3ICsyNiw3IEBACiAKIGNvbmZpZyBWSURFT19TQUE3MTM0X1JDCiAJYm9vbCAiUGhpbGlwcyBTQUE3MTM0IFJlbW90ZSBDb250cm9sbGVyIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBWSURFT19JUgorCWRlcGVuZHMgb24gUkNfQ09SRQogCWRlcGVuZHMgb24gVklERU9fU0FBNzEzNAogCWRlZmF1bHQgeQogCS0tLWhlbHAtLS0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jYXJkcy5jCmluZGV4IDFkNGQwYTQuLmU3YWE1ODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNhcmRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY2FyZHMuYwpAQCAtNTE3Niw2ICs1MTc2LDU4IEBACiAJCQkuYW11eCA9IDIsCiAJCX0sCiAJfSwKKwlbU0FBNzEzNF9CT0FSRF9LV09STERfUENJX1NCVFZEX0ZVTExTRUddID0geworCQkubmFtZSAgICAgICAgICAgPSAiS3dvcmxkIFBDSSBTQlRWRC9JU0RCLVQgRnVsbC1TZWcgSHlicmlkIiwKKwkJLmF1ZGlvX2Nsb2NrICAgID0gMHgwMDE4N2RlNywKKyNpZiAwCisJLyoKKwkgKiBGSVhNRTogQW5hbG9nIG1vZGUgZG9lc24ndCB3b3JrLCBpZiBkaWdpdGFsIGlzIGVuYWJsZWQuIFRoZSBwcm9wZXIKKwkgKiBmaXggaXMgdG8gdXNlIHRkYTgyOTAgZHJpdmVyLCBidXQgS3dvcmxkIHNlZW1zIHRvIHVzZSBhbgorCSAqIHVuc3VwcG9ydGVkIHZlcnNpb24gb2YgdGRhODI5NS4KKwkgKi8KKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfTlhQX1REQTE4MjcxLAkvKiBUVU5FUl9QSElMSVBTX1REQTgyOTAgKi8KKwkJLnR1bmVyX2FkZHIgICAgID0gMHg2MCwKKyNlbHNlCisJCS50dW5lcl90eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfYWRkciAgICAgPSBBRERSX1VOU0VULAorI2VuZGlmCisJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAorCQkucmFkaW9fYWRkcgk9IEFERFJfVU5TRVQsCisJCS5ncGlvbWFzayAgICAgICA9IDB4OGUwNTQwMDAsCisJCS5tcGVnICAgICAgICAgICA9IFNBQTcxMzRfTVBFR19EVkIsCisJCS50c190eXBlCT0gU0FBNzEzNF9NUEVHX1RTX1BBUkFMTEVMLAorCQkuaW5wdXRzID0geyB7CisJCQkubmFtZSAgID0gbmFtZV90diwKKwkJCS52bXV4ICAgPSAxLAorCQkJLmFtdXggICA9IFRWLAorCQkJLnR2ICAgICA9IDEsCisjaWYgMAkvKiBGSVhNRSAqLworCQl9LCB7CisJCQkubmFtZSAgID0gbmFtZV9jb21wMSwKKwkJCS52bXV4ICAgPSAzLAorCQkJLmFtdXggICA9IExJTkUxLAorCQkJLmdwaW8gICA9IDB4MjAwLAorCQl9LCB7CisJCQkubmFtZSAgID0gbmFtZV9zdmlkZW8sCisJCQkudm11eCAgID0gOCwKKwkJCS5hbXV4ICAgPSBMSU5FMSwKKwkJCS5ncGlvICAgPSAweDIwMCwKKyNlbmRpZgorCQl9IH0sCisjaWYgMAorCQkucmFkaW8gPSB7CisJCQkubmFtZSAgID0gbmFtZV9yYWRpbywKKwkJCS52bXV4ICAgPSAxLAorCQkJLmFtdXggICA9IExJTkUxLAorCQkJLmdwaW8gICA9IDB4MTAwLAorCQl9LAorI2VuZGlmCisJCS5tdXRlID0geworCQkJLm5hbWUgPSBuYW1lX211dGUsCisJCQkudm11eCA9IDAsCisJCQkuYW11eCA9IFRWLAorCQl9LAorCX0sCiAJW1NBQTcxMzRfQk9BUkRfQVZFUk1FRElBX0dPXzAwN19GTV9QTFVTXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIkF2ZXJtZWRpYSBBVmVyVFYgR08gMDA3IEZNIFBsdXMiLAogCQkuYXVkaW9fY2xvY2sgICAgPSAweDAwMTg3ZGU3LApAQCAtNTQ4Niw2ICs1NTM4LDM3IEBACiAJCQkuYW11eCAgID0gTElORTIsCiAJCX0gfSwKIAl9LAorCVtTQUE3MTM0X0JPQVJEX1ZJREVPTUFURV9NMUZdID0geworCQkvKiBQYXZlbCBPc25vdmEgPHB2b3Nub3ZhQGdtYWlsLmNvbT4gKi8KKwkJLm5hbWUgICAgICAgICAgID0gIkNvbXBybyBWaWRlb01hdGUgVmlzdGEgTTFGIiwKKwkJLmF1ZGlvX2Nsb2NrICAgID0gMHgwMDE4N2RlNywKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfTEdfUEFMX05FV19UQVBDLAorCQkucmFkaW9fdHlwZSAgICAgPSBUVU5FUl9URUE1NzY3LAorCQkudHVuZXJfYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSAweDYwLAorCQkuaW5wdXRzICAgICAgICAgPSB7IHsKKwkJCS5uYW1lID0gbmFtZV90diwKKwkJCS52bXV4ID0gMSwKKwkJCS5hbXV4ID0gVFYsCisJCQkudHYgICA9IDEsCisJCX0sIHsKKwkJCS5uYW1lID0gbmFtZV9jb21wMSwKKwkJCS52bXV4ID0gMywKKwkJCS5hbXV4ID0gTElORTIsCisJCX0sIHsKKwkJCS5uYW1lID0gbmFtZV9zdmlkZW8sCisJCQkudm11eCA9IDgsCisJCQkuYW11eCA9IExJTkUyLAorCQl9IH0sCisJCS5yYWRpbyA9IHsKKwkJCS5uYW1lID0gbmFtZV9yYWRpbywKKwkJCS5hbXV4ID0gTElORTEsCisJCX0sCisJCS5tdXRlID0geworCQkJLm5hbWUgPSBuYW1lX211dGUsCisJCQkuYW11eCA9IFRWLAorCQl9LAorCX0sCiAKIH07CiAKQEAgLTY2MTUsNiArNjY5OCwxMiBAQAogCX0sIHsKIAkJLnZlbmRvciAgICAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKIAkJLmRldmljZSAgICAgICA9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTMzLAorCQkuc3VidmVuZG9yICAgID0gMHgxN2RlLAorCQkuc3ViZGV2aWNlICAgID0gMHhiMTM2LAorCQkuZHJpdmVyX2RhdGEgID0gU0FBNzEzNF9CT0FSRF9LV09STERfUENJX1NCVFZEX0ZVTExTRUcsCisJfSwgeworCQkudmVuZG9yICAgICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAorCQkuZGV2aWNlICAgICAgID0gUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzMsCiAJCS5zdWJ2ZW5kb3IgICAgPSAweDE0NjEsIC8qIEF2ZXJtZWRpYSBUZWNobm9sb2dpZXMgSW5jICovCiAJCS5zdWJkZXZpY2UgICAgPSAweGYzMWQsCiAJCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX0FWRVJNRURJQV9HT18wMDdfRk1fUExVUywKQEAgLTY2NzMsNiArNjc2MiwxMiBAQAogCQkuc3ViZGV2aWNlICAgID0gMHg3MDkwLAogCQkuZHJpdmVyX2RhdGEgID0gU0FBNzEzNF9CT0FSRF9CRUhPTERfQTcsCiAJfSwgeworCQkudmVuZG9yICAgICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAorCQkuZGV2aWNlICAgICAgID0gUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzUsCisJCS5zdWJ2ZW5kb3IgICAgPSAweDE4NWIsCisJCS5zdWJkZXZpY2UgICAgPSAweGM5MDAsCisJCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX1ZJREVPTUFURV9NMUYsCisJfSwgewogCQkvKiAtLS0gYm9hcmRzIHdpdGhvdXQgZWVwcm9tICsgc3Vic3lzdGVtIElEIC0tLSAqLwogCQkudmVuZG9yICAgICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAogCQkuZGV2aWNlICAgICAgID0gUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzQsCkBAIC02ODMxLDYgKzY5MjYsMjMgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgc2FhNzEzNF9rd29ybGRfc2J0dmRfdG9nZ2xlX2FnYyhzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiwKKwkJCQkJCSAgZW51bSB0ZGExODI3MV9tb2RlIG1vZGUpCit7CisJLyogdG9nZ2xlIEFHQyBzd2l0Y2ggdGhyb3VnaCBHUElPIDI3ICovCisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBUREExODI3MV9BTkFMT0c6CisJCXNhYTcxMzRfc2V0X2dwaW8oZGV2LCAyNywgMCk7CisJCWJyZWFrOworCWNhc2UgVERBMTgyNzFfRElHSVRBTDoKKwkJc2FhNzEzNF9zZXRfZ3BpbyhkZXYsIDI3LCAxKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHNhYTcxMzRfdGRhODI5MF8xODI3MV9jYWxsYmFjayhzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiwKIAkJCQkJICBpbnQgY29tbWFuZCwgaW50IGFyZykKIHsKQEAgLTY4NDMsNiArNjk1NSw5IEBACiAJCWNhc2UgU0FBNzEzNF9CT0FSRF9IQVVQUEFVR0VfSFZSMTEyMDoKIAkJCXJldCA9IHNhYTcxMzRfdGRhMTgyNzFfaHZyMTF4MF90b2dnbGVfYWdjKGRldiwgYXJnKTsKIAkJCWJyZWFrOworCQljYXNlIFNBQTcxMzRfQk9BUkRfS1dPUkxEX1BDSV9TQlRWRF9GVUxMU0VHOgorCQkJcmV0ID0gc2FhNzEzNF9rd29ybGRfc2J0dmRfdG9nZ2xlX2FnYyhkZXYsIGFyZyk7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWJyZWFrOwogCQl9CkBAIC02ODYzLDYgKzY5NzgsNyBAQAogCWNhc2UgU0FBNzEzNF9CT0FSRF9IQVVQUEFVR0VfSFZSMTE1MDoKIAljYXNlIFNBQTcxMzRfQk9BUkRfSEFVUFBBVUdFX0hWUjExMjA6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0FWRVJNRURJQV9NNzMzQToKKwljYXNlIFNBQTcxMzRfQk9BUkRfS1dPUkxEX1BDSV9TQlRWRF9GVUxMU0VHOgogCQkvKiB0ZGE4MjkwICsgdGRhMTgyNzEgKi8KIAkJcmV0ID0gc2FhNzEzNF90ZGE4MjkwXzE4MjcxX2NhbGxiYWNrKGRldiwgY29tbWFuZCwgYXJnKTsKIAkJYnJlYWs7CkBAIC02OTY3LDYgKzcwODMsNyBAQAogCWNhc2UgU0FBNzEzNF9CT0FSRF9WSURFT01BVEVfVFZfUFZSOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9WSURFT01BVEVfR09MRF9QTFVTOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9WSURFT01BVEVfVFZfR09MRF9QTFVTSUk6CisJY2FzZSBTQUE3MTM0X0JPQVJEX1ZJREVPTUFURV9NMUY6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX1ZJREVPTUFURV9EVkJUXzMwMDoKIAljYXNlIFNBQTcxMzRfQk9BUkRfVklERU9NQVRFX0RWQlRfMjAwOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9WSURFT01BVEVfRFZCVF8yMDBBOgpAQCAtNzU0MSw2ICs3NjU4LDM3IEBACiAJCQkJICAgICAgIGRldi0+bmFtZSk7CiAJCWJyZWFrOwogCX0KKwljYXNlIFNBQTcxMzRfQk9BUkRfS1dPUkxEX1BDSV9TQlRWRF9GVUxMU0VHOgorCXsKKwkJc3RydWN0IGkyY19tc2cgbXNnID0geyAuYWRkciA9IDB4NGIsIC5mbGFncyA9IDAgfTsKKwkJaW50IGk7CisJCXN0YXRpYyB1OCBidWZmZXJbXVsyXSA9IHsKKwkJCXsweDMwLCAweDMxfSwKKwkJCXsweGZmLCAweDAwfSwKKwkJCXsweDQxLCAweDAzfSwKKwkJCXsweDQxLCAweDFhfSwKKwkJCXsweGZmLCAweDAyfSwKKwkJCXsweDM0LCAweDAwfSwKKwkJCXsweDQ1LCAweDk3fSwKKwkJCXsweDQ1LCAweGMxfSwKKwkJfTsKKwkJc2FhX3dyaXRlbChTQUE3MTM0X0dQSU9fR1BNT0RFMCA+PiAyLCAweDQwMDApOworCQlzYWFfd3JpdGVsKFNBQTcxMzRfR1BJT19HUFNUQVRVUzAgPj4gMiwgMHg0MDAwKTsKKworCQkvKgorCQkgKiBGSVhNRTogaWRlbnRpZnkgd2hhdCBkZXZpY2UgaXMgYXQgYWRkciAweDRiIGFuZCB3aGF0IG1lYW5zCisJCSAqIHRoaXMgaW5pdGlhbGl6YXRpb24KKwkJICovCisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGJ1ZmZlcik7IGkrKykgeworCQkJbXNnLmJ1ZiA9ICZidWZmZXJbaV1bMF07CisJCQltc2cubGVuID0gQVJSQVlfU0laRShidWZmZXJbMF0pOworCQkJaWYgKGkyY190cmFuc2ZlcigmZGV2LT5pMmNfYWRhcCwgJm1zZywgMSkgIT0gMSkKKwkJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkJICAgICAgICIlczogVW5hYmxlIHRvIGVuYWJsZSB0dW5lciglaSkuXG4iLAorCQkJCSAgICAgICBkZXYtPm5hbWUsIGkpOworCQl9CisJCWJyZWFrOworCX0KIAl9IC8qIHN3aXRjaCgpICovCiAKIAkvKiBpbml0aWFsaXplIHR1bmVyICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jb3JlLmMKaW5kZXggNzU2YTI3OC4uNmFiZWVjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNvcmUuYwpAQCAtMTY2LDggKzE2NiwxNCBAQAogCXNjaGVkdWxlX3dvcmsoJmRldi0+cmVxdWVzdF9tb2R1bGVfd2spOwogfQogCitzdGF0aWMgdm9pZCBmbHVzaF9yZXF1ZXN0X3N1Ym1vZHVsZXMoc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYpCit7CisJZmx1c2hfd29ya19zeW5jKCZkZXYtPnJlcXVlc3RfbW9kdWxlX3drKTsKK30KKwogI2Vsc2UKICNkZWZpbmUgcmVxdWVzdF9zdWJtb2R1bGVzKGRldikKKyNkZWZpbmUgZmx1c2hfcmVxdWVzdF9zdWJtb2R1bGVzKGRldikKICNlbmRpZiAvKiBDT05GSUdfTU9EVUxFUyAqLwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTEwMTAsOCArMTAxNiw2IEBACiAJCX0KIAl9CiAKLQlyZXF1ZXN0X3N1Ym1vZHVsZXMoZGV2KTsKLQogCXY0bDJfcHJpb19pbml0KCZkZXYtPnByaW8pOwogCiAJbXV0ZXhfbG9jaygmc2FhNzEzNF9kZXZsaXN0X2xvY2spOwpAQCAtMTA2Niw2ICsxMDcwLDcgQEAKIAlpZiAoc2FhNzEzNF9kbWFzb3VuZF9pbml0ICYmICFkZXYtPmRtYXNvdW5kLnByaXZfZGF0YSkKIAkJc2FhNzEzNF9kbWFzb3VuZF9pbml0KGRldik7CiAKKwlyZXF1ZXN0X3N1Ym1vZHVsZXMoZGV2KTsKIAlyZXR1cm4gMDsKIAogIGZhaWw0OgpAQCAtMTA5MSw2ICsxMDk2LDggQEAKIAlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiA9IGNvbnRhaW5lcl9vZih2NGwyX2Rldiwgc3RydWN0IHNhYTcxMzRfZGV2LCB2NGwyX2Rldik7CiAJc3RydWN0IHNhYTcxMzRfbXBlZ19vcHMgKm1vcHM7CiAKKwlmbHVzaF9yZXF1ZXN0X3N1Ym1vZHVsZXMoZGV2KTsKKwogCS8qIFJlbGVhc2UgRE1BIHNvdW5kIG1vZHVsZXMgaWYgcHJlc2VudCAqLwogCWlmIChzYWE3MTM0X2RtYXNvdW5kX2V4aXQgJiYgZGV2LT5kbWFzb3VuZC5wcml2X2RhdGEpIHsKIAkJc2FhNzEzNF9kbWFzb3VuZF9leGl0KGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1kdmIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWR2Yi5jCmluZGV4IGJlYjk1ZTIuLjMzMTVhNDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWR2Yi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWR2Yi5jCkBAIC01Miw2ICs1Miw3IEBACiAjaW5jbHVkZSAidGRhMTgyNzEuaCIKICNpbmNsdWRlICJsZ2R0MzMwNS5oIgogI2luY2x1ZGUgInRkYTgyOTAuaCIKKyNpbmNsdWRlICJtYjg2YTIwcy5oIgogCiAjaW5jbHVkZSAiemwxMDM1My5oIgogCkBAIC0yMjgsNiArMjI5LDIwIEBACiAJLmRlbW9kX2luaXQgICAgICA9IG10MzUyX2F2ZXJtZWRpYV94YzMwMjhfaW5pdCwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgdGRhMTgyNzFfc3RkX21hcCBtYjg2YTIwc190ZGExODI3MV9zdGRfbWFwID0geworCS5kdmJ0XzYgICA9IHsgLmlmX2ZyZXEgPSAzMzAwLCAuYWdjX21vZGUgPSAzLCAuc3RkID0gNCwKKwkJICAgICAgLmlmX2x2bCA9IDcsIC5yZmFnY190b3AgPSAweDM3LCB9LAorfTsKKworc3RhdGljIHN0cnVjdCB0ZGExODI3MV9jb25maWcga3dvcmxkX3RkYTE4MjcxX2NvbmZpZyA9IHsKKwkuc3RkX21hcCA9ICZtYjg2YTIwc190ZGExODI3MV9zdGRfbWFwLAorCS5nYXRlICAgID0gVERBMTgyNzFfR0FURV9ESUdJVEFMLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBtYjg2YTIwc19jb25maWcga3dvcmxkX21iODZhMjBzX2NvbmZpZyA9IHsKKwkuZGVtb2RfYWRkcmVzcyA9IDB4MTAsCit9OworCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqIHRkYTEwMDR4IGJhc2VkIERWQi1UIGNhcmRzLCBoZWxwZXIgZnVuY3Rpb25zCiAgKi8KQEAgLTYwOCw2ICs2MjMsMzcgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKK3N0YXRpYyBpbnQgX19rd29ybGRfc2J0dmRfaTJjX2dhdGVfY3RybChzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiwgaW50IGVuYWJsZSkKK3sKKwl1bnNpZ25lZCBjaGFyIGluaXRtc2dbXSA9IHsweDQ1LCAweDk3fTsKKwl1bnNpZ25lZCBjaGFyIG1zZ19lbmFibGVbXSA9IHsweDQ1LCAweGMxfTsKKwl1bnNpZ25lZCBjaGFyIG1zZ19kaXNhYmxlW10gPSB7MHg0NSwgMHg4MX07CisJc3RydWN0IGkyY19tc2cgbXNnID0gey5hZGRyID0gMHg0YiwgLmZsYWdzID0gMCwgLmJ1ZiA9IGluaXRtc2csIC5sZW4gPSAyfTsKKworCWlmIChpMmNfdHJhbnNmZXIoJmRldi0+aTJjX2FkYXAsICZtc2csIDEpICE9IDEpIHsKKwkJd3ByaW50aygiY291bGQgbm90IGFjY2VzcyB0aGUgSTJDIGdhdGVcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJaWYgKGVuYWJsZSkKKwkJbXNnLmJ1ZiA9IG1zZ19lbmFibGU7CisJZWxzZQorCQltc2cuYnVmID0gbXNnX2Rpc2FibGU7CisJaWYgKGkyY190cmFuc2ZlcigmZGV2LT5pMmNfYWRhcCwgJm1zZywgMSkgIT0gMSkgeworCQl3cHJpbnRrKCJjb3VsZCBub3QgYWNjZXNzIHRoZSBJMkMgZ2F0ZVxuIik7CisJCXJldHVybiAtRUlPOworCX0KKwltc2xlZXAoMjApOworCXJldHVybiAwOworfQorc3RhdGljIGludCBrd29ybGRfc2J0dmRfaTJjX2dhdGVfY3RybChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgaW50IGVuYWJsZSkKK3sKKwlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiA9IGZlLT5kdmItPnByaXY7CisKKwlyZXR1cm4gX19rd29ybGRfc2J0dmRfaTJjX2dhdGVfY3RybChkZXYsIGVuYWJsZSk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCiBzdGF0aWMgc3RydWN0IHRkYTEwMDR4X2NvbmZpZyB0ZGE4Mjd4X2xpZmV2aWV3X2NvbmZpZyA9IHsKIAkuZGVtb2RfYWRkcmVzcyA9IDB4MDgsCiAJLmludmVydCAgICAgICAgPSAxLApAQCAtMTYxMyw2ICsxNjU5LDI5IEBACiAJCQkJICAgJmR0djEwMDBzX3RkYTE4MjcxX2NvbmZpZyk7CiAJCX0KIAkJYnJlYWs7CisJY2FzZSBTQUE3MTM0X0JPQVJEX0tXT1JMRF9QQ0lfU0JUVkRfRlVMTFNFRzoKKwkJX19rd29ybGRfc2J0dmRfaTJjX2dhdGVfY3RybChkZXYsIDApOworCQlzYWFfd3JpdGVsKFNBQTcxMzRfR1BJT19HUE1PREUwID4+IDIsIDB4MTQwMDApOworCQlzYWFfd3JpdGVsKFNBQTcxMzRfR1BJT19HUFNUQVRVUzAgPj4gMiwgMHgxNDAwMCk7CisJCW1zbGVlcCgyMCk7CisJCXNhYV93cml0ZWwoU0FBNzEzNF9HUElPX0dQTU9ERTAgPj4gMiwgMHg1NDAwMCk7CisJCXNhYV93cml0ZWwoU0FBNzEzNF9HUElPX0dQU1RBVFVTMCA+PiAyLCAweDU0MDAwKTsKKwkJbXNsZWVwKDIwKTsKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKG1iODZhMjBzX2F0dGFjaCwKKwkJCQkJICAgICAgICZrd29ybGRfbWI4NmEyMHNfY29uZmlnLAorCQkJCQkgICAgICAgJmRldi0+aTJjX2FkYXApOworCQlfX2t3b3JsZF9zYnR2ZF9pMmNfZ2F0ZV9jdHJsKGRldiwgMSk7CisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCQlkdmJfYXR0YWNoKHRkYTE4MjcxX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCisJCQkJICAgMHg2MCwgJmRldi0+aTJjX2FkYXAsCisJCQkJICAgJmt3b3JsZF90ZGExODI3MV9jb25maWcpOworCQkJLyoKKwkJCSAqIE9ubHkgYWZ0ZXIgc3VjY2VzcywgaXQgY2FuIGluaXRpYWxpemUgdGhlIGdhdGUsIG90aGVyd2lzZQorCQkJICogYW4gT09QUyB3aWxsIGhpdCwgZHVlIHRvIGtmcmVlKGZlMC0+ZHZiLmZyb250ZW5kKQorCQkJICovCisJCQlmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLmkyY19nYXRlX2N0cmwgPSBrd29ybGRfc2J0dmRfaTJjX2dhdGVfY3RybDsKKwkJfQorCQlicmVhazsKIAlkZWZhdWx0OgogCQl3cHJpbnRrKCJIdWg/IHVua25vd24gRFZCIGNhcmQ/XG4iKTsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1lbXByZXNzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1lbXByZXNzLmMKaW5kZXggYjg5MGFhZi4uNmI4NDU5YzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWVtcHJlc3MuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1lbXByZXNzLmMKQEAgLTU1Myw3ICs1NTMsNyBAQAogCiAJaWYgKE5VTEwgPT0gZGV2LT5lbXByZXNzX2RldikKIAkJcmV0dXJuIDA7Ci0JZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwlmbHVzaF93b3JrX3N5bmMoJmRldi0+ZW1wcmVzc193b3JrcXVldWUpOwogCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKGRldi0+ZW1wcmVzc19kZXYpOwogCWRldi0+ZW1wcmVzc19kZXYgPSBOVUxMOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtaW5wdXQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWlucHV0LmMKaW5kZXggNDZkMzFkZi4uZGM2NDZlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtaW5wdXQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1pbnB1dC5jCkBAIC0yMiw3ICsyMiw2IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKICNpbmNsdWRlICJzYWE3MTM0LXJlZy5oIgpAQCAtNDIsNDEgKzQxLDE5IEBACiBtb2R1bGVfcGFyYW0ocGlubmFjbGVfcmVtb3RlLCBpbnQsIDA2NDQpOyAgICAvKiBDaG9vc2UgUGlubmFjbGUgUENUViByZW1vdGUgKi8KIE1PRFVMRV9QQVJNX0RFU0MocGlubmFjbGVfcmVtb3RlLCAiU3BlY2lmeSBQaW5uYWNsZSBQQ1RWIHJlbW90ZTogMD1jb2xvdXJlZCwgMT1ncmV5IChkZWZhdWx0cyB0byAwKSIpOwogCi1zdGF0aWMgaW50IGlyX3JjNV9yZW1vdGVfZ2FwID0gODg1OwotbW9kdWxlX3BhcmFtKGlyX3JjNV9yZW1vdGVfZ2FwLCBpbnQsIDA2NDQpOwotc3RhdGljIGludCBpcl9yYzVfa2V5X3RpbWVvdXQgPSAxMTU7Ci1tb2R1bGVfcGFyYW0oaXJfcmM1X2tleV90aW1lb3V0LCBpbnQsIDA2NDQpOwotCi1zdGF0aWMgaW50IHJlcGVhdF9kZWxheSA9IDUwMDsKLW1vZHVsZV9wYXJhbShyZXBlYXRfZGVsYXksIGludCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHJlcGVhdF9kZWxheSwgImRlbGF5IGJlZm9yZSBrZXkgcmVwZWF0IHN0YXJ0ZWQiKTsKLXN0YXRpYyBpbnQgcmVwZWF0X3BlcmlvZCA9IDMzOwotbW9kdWxlX3BhcmFtKHJlcGVhdF9wZXJpb2QsIGludCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHJlcGVhdF9wZXJpb2QsICJyZXBlYXQgcGVyaW9kIGJldHdlZW4gIgotICAgICJrZXlwcmVzc2VzIHdoZW4ga2V5IGlzIGRvd24iKTsKLQotc3RhdGljIHVuc2lnbmVkIGludCBkaXNhYmxlX290aGVyX2lyOwotbW9kdWxlX3BhcmFtKGRpc2FibGVfb3RoZXJfaXIsIGludCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGRpc2FibGVfb3RoZXJfaXIsICJkaXNhYmxlIGZ1bGwgY29kZXMgb2YgIgotICAgICJhbHRlcm5hdGl2ZSByZW1vdGVzIGZyb20gb3RoZXIgbWFudWZhY3R1cmVycyIpOwotCiAjZGVmaW5lIGRwcmludGsoZm10LCBhcmcuLi4pCWlmIChpcl9kZWJ1ZykgXAogCXByaW50ayhLRVJOX0RFQlVHICIlcy9pcjogIiBmbXQsIGRldi0+bmFtZSAsICMjIGFyZykKICNkZWZpbmUgaTJjZHByaW50ayhmbXQsIGFyZy4uLikgICAgaWYgKGlyX2RlYnVnKSBcCiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzL2lyOiAiIGZtdCwgaXItPm5hbWUgLCAjIyBhcmcpCiAKLS8qIEhlbHBlciBmdW5jdGlvbnMgZm9yIFJDNSBhbmQgTkVDIGRlY29kaW5nIGF0IEdQSU8xNiBvciBHUElPMTggKi8KLXN0YXRpYyBpbnQgc2FhNzEzNF9yYzVfaXJxKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2KTsKLXN0YXRpYyBpbnQgc2FhNzEzNF9uZWNfaXJxKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2KTsKKy8qIEhlbHBlciBmdW5jdGlvbiBmb3IgcmF3IGRlY29kaW5nIGF0IEdQSU8xNiBvciBHUElPMTggKi8KIHN0YXRpYyBpbnQgc2FhNzEzNF9yYXdfZGVjb2RlX2lycShzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldik7Ci1zdGF0aWMgdm9pZCBuZWNfdGFzayh1bnNpZ25lZCBsb25nIGRhdGEpOwotc3RhdGljIHZvaWQgc2FhNzEzNF9uZWNfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0gR1BJTyBnZW5lcmljIGtleWNvZGUgYnVpbGRlciAtLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgaW50IGJ1aWxkX2tleShzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldikKIHsKLQlzdHJ1Y3QgY2FyZF9pciAqaXIgPSBkZXYtPnJlbW90ZTsKKwlzdHJ1Y3Qgc2FhNzEzNF9jYXJkX2lyICppciA9IGRldi0+cmVtb3RlOwogCXUzMiBncGlvLCBkYXRhOwogCiAJLyogaGVyZSBjb21lcyB0aGUgYWRkaXRpb25hbCBoYW5kc2hha2Ugc3RlcHMgZm9yIHNvbWUgY2FyZHMgKi8KQEAgLTEwNCwyNSArODEsMjUgQEAKIAlzd2l0Y2ggKGRldi0+Ym9hcmQpIHsKIAljYXNlIFNBQTcxMzRfQk9BUkRfS1dPUkxEX1BMVVNfVFZfQU5BTE9HOgogCQlpZiAoZGF0YSA9PSBpci0+bWFza19rZXljb2RlKQotCQkJaXJfaW5wdXRfbm9rZXkoaXItPmRldiwgJmlyLT5pcik7CisJCQlyY19rZXl1cChpci0+ZGV2KTsKIAkJZWxzZQotCQkJaXJfaW5wdXRfa2V5ZG93bihpci0+ZGV2LCAmaXItPmlyLCBkYXRhKTsKKwkJCXJjX2tleWRvd25fbm90aW1lb3V0KGlyLT5kZXYsIGRhdGEsIDApOwogCQlyZXR1cm4gMDsKIAl9CiAKIAlpZiAoaXItPnBvbGxpbmcpIHsKIAkJaWYgKChpci0+bWFza19rZXlkb3duICAmJiAgKDAgIT0gKGdwaW8gJiBpci0+bWFza19rZXlkb3duKSkpIHx8CiAJCSAgICAoaXItPm1hc2tfa2V5dXAgICAgJiYgICgwID09IChncGlvICYgaXItPm1hc2tfa2V5dXApKSkpIHsKLQkJCWlyX2lucHV0X2tleWRvd24oaXItPmRldiwgJmlyLT5pciwgZGF0YSk7CisJCQlyY19rZXlkb3duX25vdGltZW91dChpci0+ZGV2LCBkYXRhLCAwKTsKIAkJfSBlbHNlIHsKLQkJCWlyX2lucHV0X25va2V5KGlyLT5kZXYsICZpci0+aXIpOworCQkJcmNfa2V5dXAoaXItPmRldik7CiAJCX0KIAl9CiAJZWxzZSB7CS8qIElSUSBkcml2ZW4gbW9kZSAtIGhhbmRsZSBrZXkgcHJlc3MgYW5kIHJlbGVhc2UgaW4gb25lIGdvICovCiAJCWlmICgoaXItPm1hc2tfa2V5ZG93biAgJiYgICgwICE9IChncGlvICYgaXItPm1hc2tfa2V5ZG93bikpKSB8fAogCQkgICAgKGlyLT5tYXNrX2tleXVwICAgICYmICAoMCA9PSAoZ3BpbyAmIGlyLT5tYXNrX2tleXVwKSkpKSB7Ci0JCQlpcl9pbnB1dF9rZXlkb3duKGlyLT5kZXYsICZpci0+aXIsIGRhdGEpOwotCQkJaXJfaW5wdXRfbm9rZXkoaXItPmRldiwgJmlyLT5pcik7CisJCQlyY19rZXlkb3duX25vdGltZW91dChpci0+ZGV2LCBkYXRhLCAwKTsKKwkJCXJjX2tleXVwKGlyLT5kZXYpOwogCQl9CiAJfQogCkBAIC0zMDAsMjIgKzI3NywxMiBAQAogCQlpMmNkcHJpbnRrKCJyZWFkIGVycm9yXG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQotCS8qIElSIG9mIHRoaXMgY2FyZCBub3JtYWxseSBkZWNvZGUgc2lnbmFscyBORUMtc3RhbmRhcmQgZnJvbQotCSAqIC0gU3ZlbiBJSE9PIE1UIDUuMVIgcmVtb3RlLiB4eHl5ZTcxOAotCSAqIC0gU3ZlbiBEVkQgSEQtMTB4eCByZW1vdGUuIHh4eXlmNzA4Ci0JICogLSBCQksgLi4uCi0JICogLSBtYXlieSBvdGhlcnMKLQkgKiBTbywgc2tpcCBub3Qgb3VyLCBpZiBkaXNhYmxlIGZ1bGwgY29kZXMgbW9kZS4KLQkgKi8KLQlpZiAoZGF0YVsxMF0gIT0gMHg2YiAmJiBkYXRhWzExXSAhPSAweDg2ICYmIGRpc2FibGVfb3RoZXJfaXIpCi0JCXJldHVybiAwOwogCi0JLyogV3JvbmcgZGF0YSBkZWNvZGUgZml4ICovCiAJaWYgKGRhdGFbOV0gIT0gKHVuc2lnbmVkIGNoYXIpKH5kYXRhWzhdKSkKIAkJcmV0dXJuIDA7CiAKLQkqaXJfa2V5ID0gZGF0YVs5XTsKLQkqaXJfcmF3ID0gZGF0YVs5XTsKKwkqaXJfcmF3ID0gKChkYXRhWzEwXSA8PCAxNikgfCAoZGF0YVsxMV0gPDwgOCkgfCAoZGF0YVs5XSA8PCAwKSk7CisJKmlyX2tleSA9ICppcl9yYXc7CiAKIAlyZXR1cm4gMTsKIH0KQEAgLTQwMCw3ICszNjcsNyBAQAogCiB2b2lkIHNhYTcxMzRfaW5wdXRfaXJxKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2KQogewotCXN0cnVjdCBjYXJkX2lyICppcjsKKwlzdHJ1Y3Qgc2FhNzEzNF9jYXJkX2lyICppcjsKIAogCWlmICghZGV2IHx8ICFkZXYtPnJlbW90ZSkKIAkJcmV0dXJuOwpAQCAtNDA5LDEyICszNzYsOCBAQAogCWlmICghaXItPnJ1bm5pbmcpCiAJCXJldHVybjsKIAotCWlmIChpci0+bmVjX2dwaW8pIHsKLQkJc2FhNzEzNF9uZWNfaXJxKGRldik7Ci0JfSBlbHNlIGlmICghaXItPnBvbGxpbmcgJiYgIWlyLT5yYzVfZ3BpbyAmJiAhaXItPnJhd19kZWNvZGUpIHsKKwlpZiAoIWlyLT5wb2xsaW5nICYmICFpci0+cmF3X2RlY29kZSkgewogCQlidWlsZF9rZXkoZGV2KTsKLQl9IGVsc2UgaWYgKGlyLT5yYzVfZ3BpbykgewotCQlzYWE3MTM0X3JjNV9pcnEoZGV2KTsKIAl9IGVsc2UgaWYgKGlyLT5yYXdfZGVjb2RlKSB7CiAJCXNhYTcxMzRfcmF3X2RlY29kZV9pcnEoZGV2KTsKIAl9CkBAIC00MjMsNyArMzg2LDcgQEAKIHN0YXRpYyB2b2lkIHNhYTcxMzRfaW5wdXRfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2ID0gKHN0cnVjdCBzYWE3MTM0X2RldiAqKWRhdGE7Ci0Jc3RydWN0IGNhcmRfaXIgKmlyID0gZGV2LT5yZW1vdGU7CisJc3RydWN0IHNhYTcxMzRfY2FyZF9pciAqaXIgPSBkZXYtPnJlbW90ZTsKIAogCWJ1aWxkX2tleShkZXYpOwogCW1vZF90aW1lcigmaXItPnRpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhpci0+cG9sbGluZykpOwpAQCAtNDMyLDU3ICszOTUsMzcgQEAKIHN0YXRpYyB2b2lkIGlyX3Jhd19kZWNvZGVfdGltZXJfZW5kKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKIAlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiA9IChzdHJ1Y3Qgc2FhNzEzNF9kZXYgKilkYXRhOwotCXN0cnVjdCBjYXJkX2lyICppciA9IGRldi0+cmVtb3RlOworCXN0cnVjdCBzYWE3MTM0X2NhcmRfaXIgKmlyID0gZGV2LT5yZW1vdGU7CiAKIAlpcl9yYXdfZXZlbnRfaGFuZGxlKGRldi0+cmVtb3RlLT5kZXYpOwogCi0JaXItPmFjdGl2ZSA9IDA7CisJaXItPmFjdGl2ZSA9IGZhbHNlOwogfQogCiBzdGF0aWMgaW50IF9fc2FhNzEzNF9pcl9zdGFydCh2b2lkICpwcml2KQogewogCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2ID0gcHJpdjsKLQlzdHJ1Y3QgY2FyZF9pciAqaXI7CisJc3RydWN0IHNhYTcxMzRfY2FyZF9pciAqaXI7CiAKLQlpZiAoIWRldikKKwlpZiAoIWRldiB8fCAhZGV2LT5yZW1vdGUpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaXIgID0gZGV2LT5yZW1vdGU7Ci0JaWYgKCFpcikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAlpZiAoaXItPnJ1bm5pbmcpCiAJCXJldHVybiAwOwogCi0JaXItPnJ1bm5pbmcgPSAxOworCWlyLT5ydW5uaW5nID0gdHJ1ZTsKKwlpci0+YWN0aXZlID0gZmFsc2U7CisKIAlpZiAoaXItPnBvbGxpbmcpIHsKIAkJc2V0dXBfdGltZXIoJmlyLT50aW1lciwgc2FhNzEzNF9pbnB1dF90aW1lciwKIAkJCSAgICAodW5zaWduZWQgbG9uZylkZXYpOwotCQlpci0+dGltZXIuZXhwaXJlcyAgPSBqaWZmaWVzICsgSFo7CisJCWlyLT50aW1lci5leHBpcmVzID0gamlmZmllcyArIEhaOwogCQlhZGRfdGltZXIoJmlyLT50aW1lcik7Ci0JfSBlbHNlIGlmIChpci0+cmM1X2dwaW8pIHsKLQkJLyogc2V0IHRpbWVyX2VuZCBmb3IgY29kZSBjb21wbGV0aW9uICovCi0JCWluaXRfdGltZXIoJmlyLT50aW1lcl9lbmQpOwotCQlpci0+dGltZXJfZW5kLmZ1bmN0aW9uID0gaXJfcmM1X3RpbWVyX2VuZDsKLQkJaXItPnRpbWVyX2VuZC5kYXRhID0gKHVuc2lnbmVkIGxvbmcpaXI7Ci0JCWluaXRfdGltZXIoJmlyLT50aW1lcl9rZXl1cCk7Ci0JCWlyLT50aW1lcl9rZXl1cC5mdW5jdGlvbiA9IGlyX3JjNV90aW1lcl9rZXl1cDsKLQkJaXItPnRpbWVyX2tleXVwLmRhdGEgPSAodW5zaWduZWQgbG9uZylpcjsKLQkJaXItPnNoaWZ0X2J5ID0gMjsKLQkJaXItPnN0YXJ0ID0gMHgyOwotCQlpci0+YWRkciA9IDB4MTc7Ci0JCWlyLT5yYzVfa2V5X3RpbWVvdXQgPSBpcl9yYzVfa2V5X3RpbWVvdXQ7Ci0JCWlyLT5yYzVfcmVtb3RlX2dhcCA9IGlyX3JjNV9yZW1vdGVfZ2FwOwotCX0gZWxzZSBpZiAoaXItPm5lY19ncGlvKSB7Ci0JCXNldHVwX3RpbWVyKCZpci0+dGltZXJfa2V5dXAsIHNhYTcxMzRfbmVjX3RpbWVyLAotCQkJICAgICh1bnNpZ25lZCBsb25nKWRldik7Ci0JCXRhc2tsZXRfaW5pdCgmaXItPnRsZXQsIG5lY190YXNrLCAodW5zaWduZWQgbG9uZylkZXYpOwogCX0gZWxzZSBpZiAoaXItPnJhd19kZWNvZGUpIHsKIAkJLyogc2V0IHRpbWVyX2VuZCBmb3IgY29kZSBjb21wbGV0aW9uICovCi0JCWluaXRfdGltZXIoJmlyLT50aW1lcl9lbmQpOwotCQlpci0+dGltZXJfZW5kLmZ1bmN0aW9uID0gaXJfcmF3X2RlY29kZV90aW1lcl9lbmQ7Ci0JCWlyLT50aW1lcl9lbmQuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWRldjsKLQkJaXItPmFjdGl2ZSA9IDA7CisJCXNldHVwX3RpbWVyKCZpci0+dGltZXIsIGlyX3Jhd19kZWNvZGVfdGltZXJfZW5kLAorCQkJICAgICh1bnNpZ25lZCBsb25nKWRldik7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC00OTEsMjkgKzQzNCwyMCBAQAogc3RhdGljIHZvaWQgX19zYWE3MTM0X2lyX3N0b3Aodm9pZCAqcHJpdikKIHsKIAlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiA9IHByaXY7Ci0Jc3RydWN0IGNhcmRfaXIgKmlyOworCXN0cnVjdCBzYWE3MTM0X2NhcmRfaXIgKmlyOwogCi0JaWYgKCFkZXYpCisJaWYgKCFkZXYgfHwgIWRldi0+cmVtb3RlKQogCQlyZXR1cm47CiAKIAlpciAgPSBkZXYtPnJlbW90ZTsKLQlpZiAoIWlyKQotCQlyZXR1cm47Ci0KIAlpZiAoIWlyLT5ydW5uaW5nKQogCQlyZXR1cm47Ci0JaWYgKGRldi0+cmVtb3RlLT5wb2xsaW5nKQotCQlkZWxfdGltZXJfc3luYygmZGV2LT5yZW1vdGUtPnRpbWVyKTsKLQllbHNlIGlmIChpci0+cmM1X2dwaW8pCi0JCWRlbF90aW1lcl9zeW5jKCZpci0+dGltZXJfZW5kKTsKLQllbHNlIGlmIChpci0+bmVjX2dwaW8pCi0JCXRhc2tsZXRfa2lsbCgmaXItPnRsZXQpOwotCWVsc2UgaWYgKGlyLT5yYXdfZGVjb2RlKSB7Ci0JCWRlbF90aW1lcl9zeW5jKCZpci0+dGltZXJfZW5kKTsKLQkJaXItPmFjdGl2ZSA9IDA7Ci0JfQogCi0JaXItPnJ1bm5pbmcgPSAwOworCWlmIChpci0+cG9sbGluZyB8fCBpci0+cmF3X2RlY29kZSkKKwkJZGVsX3RpbWVyX3N5bmMoJmlyLT50aW1lcik7CisKKwlpci0+YWN0aXZlID0gZmFsc2U7CisJaXItPnJ1bm5pbmcgPSBmYWxzZTsKIAogCXJldHVybjsKIH0KQEAgLTUzMiw3MSArNDY2LDMzIEBACiAJCV9fc2FhNzEzNF9pcl9zdG9wKGRldik7CiB9CiAKLXN0YXRpYyBpbnQgc2FhNzEzNF9pcl9vcGVuKHZvaWQgKnByaXYpCitzdGF0aWMgaW50IHNhYTcxMzRfaXJfb3BlbihzdHJ1Y3QgcmNfZGV2ICpyYykKIHsKLQlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiA9IHByaXY7CisJc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYgPSByYy0+cHJpdjsKIAogCWRldi0+cmVtb3RlLT51c2VycysrOwogCXJldHVybiBfX3NhYTcxMzRfaXJfc3RhcnQoZGV2KTsKIH0KIAotc3RhdGljIHZvaWQgc2FhNzEzNF9pcl9jbG9zZSh2b2lkICpwcml2KQorc3RhdGljIHZvaWQgc2FhNzEzNF9pcl9jbG9zZShzdHJ1Y3QgcmNfZGV2ICpyYykKIHsKLQlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiA9IHByaXY7CisJc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYgPSByYy0+cHJpdjsKIAogCWRldi0+cmVtb3RlLT51c2Vycy0tOwogCWlmICghZGV2LT5yZW1vdGUtPnVzZXJzKQogCQlfX3NhYTcxMzRfaXJfc3RvcChkZXYpOwogfQogCi0KLXN0YXRpYyBpbnQgc2FhNzEzNF9pcl9jaGFuZ2VfcHJvdG9jb2wodm9pZCAqcHJpdiwgdTY0IGlyX3R5cGUpCi17Ci0Jc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYgPSBwcml2OwotCXN0cnVjdCBjYXJkX2lyICppciA9IGRldi0+cmVtb3RlOwotCXUzMiBuZWNfZ3BpbywgcmM1X2dwaW87Ci0KLQlpZiAoaXJfdHlwZSA9PSBJUl9UWVBFX1JDNSkgewotCQlkcHJpbnRrKCJDaGFuZ2luZyBwcm90b2NvbCB0byBSQzVcbiIpOwotCQluZWNfZ3BpbyA9IDA7Ci0JCXJjNV9ncGlvID0gMTsKLQl9IGVsc2UgaWYgKGlyX3R5cGUgPT0gSVJfVFlQRV9ORUMpIHsKLQkJZHByaW50aygiQ2hhbmdpbmcgcHJvdG9jb2wgdG8gTkVDXG4iKTsKLQkJbmVjX2dwaW8gPSAxOwotCQlyYzVfZ3BpbyA9IDA7Ci0JfSBlbHNlIHsKLQkJZHByaW50aygiSVIgcHJvdG9jb2wgdHlwZSAldWQgaXMgbm90IHN1cHBvcnRlZFxuIiwKLQkJCSh1bnNpZ25lZClpcl90eXBlKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKGlyLT5ydW5uaW5nKSB7Ci0JCXNhYTcxMzRfaXJfc3RvcChkZXYpOwotCQlpci0+bmVjX2dwaW8gPSBuZWNfZ3BpbzsKLQkJaXItPnJjNV9ncGlvID0gcmM1X2dwaW87Ci0JCXNhYTcxMzRfaXJfc3RhcnQoZGV2KTsKLQl9IGVsc2UgewotCQlpci0+bmVjX2dwaW8gPSBuZWNfZ3BpbzsKLQkJaXItPnJjNV9ncGlvID0gcmM1X2dwaW87Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KIGludCBzYWE3MTM0X2lucHV0X2luaXQxKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2KQogewotCXN0cnVjdCBjYXJkX2lyICppcjsKLQlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7CisJc3RydWN0IHNhYTcxMzRfY2FyZF9pciAqaXI7CisJc3RydWN0IHJjX2RldiAqcmM7CiAJY2hhciAqaXJfY29kZXMgPSBOVUxMOwogCXUzMiBtYXNrX2tleWNvZGUgPSAwOwogCXUzMiBtYXNrX2tleWRvd24gPSAwOwogCXUzMiBtYXNrX2tleXVwICAgPSAwOwotCWludCBwb2xsaW5nICAgICAgPSAwOwotCWludCByYzVfZ3BpbwkgPSAwOwotCWludCBuZWNfZ3BpbwkgPSAwOwotCWludCByYXdfZGVjb2RlICAgPSAwOwotCWludCBhbGxvd19wcm90b2NvbF9jaGFuZ2UgPSAwOwotCXU2NCBpcl90eXBlID0gSVJfVFlQRV9PVEhFUjsKKwl1bnNpZ25lZCBwb2xsaW5nID0gMDsKKwlib29sIHJhd19kZWNvZGUgID0gZmFsc2U7CiAJaW50IGVycjsKIAogCWlmIChkZXYtPmhhc19yZW1vdGUgIT0gU0FBNzEzNF9SRU1PVEVfR1BJTykKQEAgLTY2MSwxNCArNTU3LDE0IEBACiAJCW1hc2tfa2V5ZG93biA9IDB4MDA0MDAwMDsJLyogRW5hYmxlIEdQSU8xOCBsaW5lIG9uIGJvdGggZWRnZXMgKi8KIAkJbWFza19rZXl1cCAgID0gMHgwMDQwMDAwOwogCQltYXNrX2tleWNvZGUgPSAweGZmZmY7Ci0JCXJhd19kZWNvZGUgICA9IDE7CisJCXJhd19kZWNvZGUgICA9IHRydWU7CiAJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfTTczM0E6CiAJCWlyX2NvZGVzICAgICA9IFJDX01BUF9BVkVSTUVESUFfTTczM0FfUk1fSzY7CiAJCW1hc2tfa2V5ZG93biA9IDB4MDA0MDAwMDsKIAkJbWFza19rZXl1cCAgID0gMHgwMDQwMDAwOwogCQltYXNrX2tleWNvZGUgPSAweGZmZmY7Ci0JCXJhd19kZWNvZGUgICA9IDE7CisJCXJhd19kZWNvZGUgICA9IHRydWU7CiAJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfNzc3OgogCWNhc2UgU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfQTE2QVI6CkBAIC03NzUsNyArNjcxLDcgQEAKIAkJbWFza19rZXlkb3duID0gMHgwMDQwMDAwOwkvKiBFbmFibGUgR1BJTzE4IGxpbmUgb24gYm90aCBlZGdlcyAqLwogCQltYXNrX2tleXVwICAgPSAweDAwNDAwMDA7CiAJCW1hc2tfa2V5Y29kZSA9IDB4ZmZmZjsKLQkJcmF3X2RlY29kZSAgID0gMTsKKwkJcmF3X2RlY29kZSAgID0gdHJ1ZTsKIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0VOQ09SRV9FTkxUVjoKIAljYXNlIFNBQTcxMzRfQk9BUkRfRU5DT1JFX0VOTFRWX0ZNOgpAQCAtNzg2LDkgKzY4MiwxMCBAQAogCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfRU5DT1JFX0VOTFRWX0ZNNTM6CiAJCWlyX2NvZGVzICAgICA9IFJDX01BUF9FTkNPUkVfRU5MVFZfRk01MzsKLQkJbWFza19rZXlkb3duID0gMHgwMDQwMDAwOwotCQltYXNrX2tleWNvZGUgPSAweDAwMDA3ZjsKLQkJbmVjX2dwaW8gPSAxOworCQltYXNrX2tleWRvd24gPSAweDAwNDAwMDA7CS8qIEVuYWJsZSBHUElPMTggbGluZSBvbiBib3RoIGVkZ2VzICovCisJCW1hc2tfa2V5dXAgICA9IDB4MDA0MDAwMDsKKwkJbWFza19rZXljb2RlID0gMHhmZmZmOworCQlyYXdfZGVjb2RlICAgPSB0cnVlOwogCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfMTBNT09OU1RWTUFTVEVSMzoKIAkJaXJfY29kZXMgICAgID0gUkNfTUFQX0VOQ09SRV9FTkxUVjsKQEAgLTgyNCw2ICs3MjEsMTEgQEAKIAkJbWFza19rZXl1cCAgID0gMHgwMjAwMDA7CiAJCXBvbGxpbmcgICAgICA9IDUwOyAvKiBtcyAqLwogCQlicmVhazsKKwljYXNlIFNBQTcxMzRfQk9BUkRfVklERU9NQVRFX00xRjoKKwkJaXJfY29kZXMgICAgID0gUkNfTUFQX1ZJREVPTUFURV9NMUY7CisJCW1hc2tfa2V5Y29kZSA9IDB4MGZmMDA7CisJCW1hc2tfa2V5dXAgICA9IDB4MDQwMDAwOworCQlicmVhazsKIAl9CiAJaWYgKE5VTEwgPT0gaXJfY29kZXMpIHsKIAkJcHJpbnRrKCIlczogT29wczogSVIgY29uZmlnIGVycm9yIFtjYXJkPSVkXVxuIiwKQEAgLTgzMiwyNCArNzM0LDIwIEBACiAJfQogCiAJaXIgPSBremFsbG9jKHNpemVvZigqaXIpLCBHRlBfS0VSTkVMKTsKLQlpbnB1dF9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKLQlpZiAoIWlyIHx8ICFpbnB1dF9kZXYpIHsKKwlyYyA9IHJjX2FsbG9jYXRlX2RldmljZSgpOworCWlmICghaXIgfHwgIXJjKSB7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX291dF9mcmVlOwogCX0KIAotCWlyLT5kZXYgPSBpbnB1dF9kZXY7CisJaXItPmRldiA9IHJjOwogCWRldi0+cmVtb3RlID0gaXI7CiAKLQlpci0+cnVubmluZyA9IDA7Ci0KIAkvKiBpbml0IGhhcmR3YXJlLXNwZWNpZmljIHN0dWZmICovCiAJaXItPm1hc2tfa2V5Y29kZSA9IG1hc2tfa2V5Y29kZTsKIAlpci0+bWFza19rZXlkb3duID0gbWFza19rZXlkb3duOwogCWlyLT5tYXNrX2tleXVwICAgPSBtYXNrX2tleXVwOwogCWlyLT5wb2xsaW5nICAgICAgPSBwb2xsaW5nOwotCWlyLT5yYzVfZ3BpbwkgPSByYzVfZ3BpbzsKLQlpci0+bmVjX2dwaW8JID0gbmVjX2dwaW87CiAJaXItPnJhd19kZWNvZGUJID0gcmF3X2RlY29kZTsKIAogCS8qIGluaXQgaW5wdXQgZGV2aWNlICovCkBAIC04NTgsNDcgKzc1NiwzNSBAQAogCXNucHJpbnRmKGlyLT5waHlzLCBzaXplb2YoaXItPnBoeXMpLCAicGNpLSVzL2lyMCIsCiAJCSBwY2lfbmFtZShkZXYtPnBjaSkpOwogCi0KLQlpci0+cHJvcHMucHJpdiA9IGRldjsKLQlpci0+cHJvcHMub3BlbiA9IHNhYTcxMzRfaXJfb3BlbjsKLQlpci0+cHJvcHMuY2xvc2UgPSBzYWE3MTM0X2lyX2Nsb3NlOwotCisJcmMtPnByaXYgPSBkZXY7CisJcmMtPm9wZW4gPSBzYWE3MTM0X2lyX29wZW47CisJcmMtPmNsb3NlID0gc2FhNzEzNF9pcl9jbG9zZTsKIAlpZiAocmF3X2RlY29kZSkKLQkJaXItPnByb3BzLmRyaXZlcl90eXBlID0gUkNfRFJJVkVSX0lSX1JBVzsKKwkJcmMtPmRyaXZlcl90eXBlID0gUkNfRFJJVkVSX0lSX1JBVzsKIAotCWlmICghcmF3X2RlY29kZSAmJiBhbGxvd19wcm90b2NvbF9jaGFuZ2UpIHsKLQkJaXItPnByb3BzLmFsbG93ZWRfcHJvdG9zID0gSVJfVFlQRV9SQzUgfCBJUl9UWVBFX05FQzsKLQkJaXItPnByb3BzLmNoYW5nZV9wcm90b2NvbCA9IHNhYTcxMzRfaXJfY2hhbmdlX3Byb3RvY29sOwotCX0KLQotCWVyciA9IGlyX2lucHV0X2luaXQoaW5wdXRfZGV2LCAmaXItPmlyLCBpcl90eXBlKTsKLQlpZiAoZXJyIDwgMCkKLQkJZ290byBlcnJfb3V0X2ZyZWU7Ci0KLQlpbnB1dF9kZXYtPm5hbWUgPSBpci0+bmFtZTsKLQlpbnB1dF9kZXYtPnBoeXMgPSBpci0+cGh5czsKLQlpbnB1dF9kZXYtPmlkLmJ1c3R5cGUgPSBCVVNfUENJOwotCWlucHV0X2Rldi0+aWQudmVyc2lvbiA9IDE7CisJcmMtPmlucHV0X25hbWUgPSBpci0+bmFtZTsKKwlyYy0+aW5wdXRfcGh5cyA9IGlyLT5waHlzOworCXJjLT5pbnB1dF9pZC5idXN0eXBlID0gQlVTX1BDSTsKKwlyYy0+aW5wdXRfaWQudmVyc2lvbiA9IDE7CiAJaWYgKGRldi0+cGNpLT5zdWJzeXN0ZW1fdmVuZG9yKSB7Ci0JCWlucHV0X2Rldi0+aWQudmVuZG9yICA9IGRldi0+cGNpLT5zdWJzeXN0ZW1fdmVuZG9yOwotCQlpbnB1dF9kZXYtPmlkLnByb2R1Y3QgPSBkZXYtPnBjaS0+c3Vic3lzdGVtX2RldmljZTsKKwkJcmMtPmlucHV0X2lkLnZlbmRvciAgPSBkZXYtPnBjaS0+c3Vic3lzdGVtX3ZlbmRvcjsKKwkJcmMtPmlucHV0X2lkLnByb2R1Y3QgPSBkZXYtPnBjaS0+c3Vic3lzdGVtX2RldmljZTsKIAl9IGVsc2UgewotCQlpbnB1dF9kZXYtPmlkLnZlbmRvciAgPSBkZXYtPnBjaS0+dmVuZG9yOwotCQlpbnB1dF9kZXYtPmlkLnByb2R1Y3QgPSBkZXYtPnBjaS0+ZGV2aWNlOworCQlyYy0+aW5wdXRfaWQudmVuZG9yICA9IGRldi0+cGNpLT52ZW5kb3I7CisJCXJjLT5pbnB1dF9pZC5wcm9kdWN0ID0gZGV2LT5wY2ktPmRldmljZTsKIAl9Ci0JaW5wdXRfZGV2LT5kZXYucGFyZW50ID0gJmRldi0+cGNpLT5kZXY7CisJcmMtPmRldi5wYXJlbnQgPSAmZGV2LT5wY2ktPmRldjsKKwlyYy0+bWFwX25hbWUgPSBpcl9jb2RlczsKKwlyYy0+ZHJpdmVyX25hbWUgPSBNT0RVTEVfTkFNRTsKIAotCWVyciA9IGlyX2lucHV0X3JlZ2lzdGVyKGlyLT5kZXYsIGlyX2NvZGVzLCAmaXItPnByb3BzLCBNT0RVTEVfTkFNRSk7CisJZXJyID0gcmNfcmVnaXN0ZXJfZGV2aWNlKHJjKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9vdXRfZnJlZTsKIAotCS8qIHRoZSByZW1vdGUgaXNuJ3QgYXMgYm91bmN5IGFzIGEga2V5Ym9hcmQgKi8KLQlpci0+ZGV2LT5yZXBbUkVQX0RFTEFZXSA9IHJlcGVhdF9kZWxheTsKLQlpci0+ZGV2LT5yZXBbUkVQX1BFUklPRF0gPSByZXBlYXRfcGVyaW9kOwotCiAJcmV0dXJuIDA7CiAKIGVycl9vdXRfZnJlZToKKwlyY19mcmVlX2RldmljZShyYyk7CiAJZGV2LT5yZW1vdGUgPSBOVUxMOwogCWtmcmVlKGlyKTsKIAlyZXR1cm4gZXJyOwpAQCAtOTEwLDcgKzc5Niw3IEBACiAJCXJldHVybjsKIAogCXNhYTcxMzRfaXJfc3RvcChkZXYpOwotCWlyX2lucHV0X3VucmVnaXN0ZXIoZGV2LT5yZW1vdGUtPmRldik7CisJcmNfdW5yZWdpc3Rlcl9kZXZpY2UoZGV2LT5yZW1vdGUtPmRldik7CiAJa2ZyZWUoZGV2LT5yZW1vdGUpOwogCWRldi0+cmVtb3RlID0gTlVMTDsKIH0KQEAgLTkxOCwxNCArODA0LDEyIEBACiB2b2lkIHNhYTcxMzRfcHJvYmVfaTJjX2lyKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2KQogewogCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyBpbmZvOwotCiAJc3RydWN0IGkyY19tc2cgbXNnX21zaSA9IHsKIAkJLmFkZHIgPSAweDUwLAogCQkuZmxhZ3MgPSBJMkNfTV9SRCwKIAkJLmxlbiA9IDAsCiAJCS5idWYgPSBOVUxMLAogCX07Ci0KIAlpbnQgcmM7CiAKIAlpZiAoZGlzYWJsZV9pcikgewpAQCAtOTcyLDcgKzg1Niw3IEBACiAJCSAgIGFuIGV4aXN0aW5nIGRldmljZS4gV2VpcmQuLi4KIAkJICAgUkVWSVNJVDogbWlnaHQgbm8gbG9uZ2VyIGJlIG5lZWRlZCAqLwogCQlyYyA9IGkyY190cmFuc2ZlcigmZGV2LT5pMmNfYWRhcCwgJm1zZ19tc2ksIDEpOwotCQlkcHJpbnRrKEtFUk5fREVCVUcgInByb2JlIDB4JTAyeCBAICVzOiAlc1xuIiwKKwkJZHByaW50aygicHJvYmUgMHglMDJ4IEAgJXM6ICVzXG4iLAogCQkJbXNnX21zaS5hZGRyLCBkZXYtPmkyY19hZGFwLm5hbWUsCiAJCQkoMSA9PSByYykgPyAieWVzIiA6ICJubyIpOwogCQlicmVhazsKQEAgLTEwMDAsNyArODg0LDcgQEAKIAkJZGV2LT5pbml0X2RhdGEubmFtZSA9ICJCZWhvbGRUViI7CiAJCWRldi0+aW5pdF9kYXRhLmdldF9rZXkgPSBnZXRfa2V5X2JlaG9sZG02eHg7CiAJCWRldi0+aW5pdF9kYXRhLmlyX2NvZGVzID0gUkNfTUFQX0JFSE9MRDsKLQkJZGV2LT5pbml0X2RhdGEudHlwZSA9IElSX1RZUEVfTkVDOworCQlkZXYtPmluaXRfZGF0YS50eXBlID0gUkNfVFlQRV9ORUM7CiAJCWluZm8uYWRkciA9IDB4MmQ7CiAJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfQ0FSREJVU181MDE6CkBAIC0xMDI1LDggKzkwOSw4IEBACiAKIHN0YXRpYyBpbnQgc2FhNzEzNF9yYXdfZGVjb2RlX2lycShzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldikKIHsKLQlzdHJ1Y3QgY2FyZF9pcgkqaXIgPSBkZXYtPnJlbW90ZTsKLQl1bnNpZ25lZCBsb25nIAl0aW1lb3V0OworCXN0cnVjdCBzYWE3MTM0X2NhcmRfaXIgKmlyID0gZGV2LT5yZW1vdGU7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OwogCWludCBzcGFjZTsKIAogCS8qIEdlbmVyYXRlIGluaXRpYWwgZXZlbnQgKi8KQEAgLTEwMzUsNyArOTE5LDYgQEAKIAlzcGFjZSA9IHNhYV9yZWFkbChTQUE3MTM0X0dQSU9fR1BTVEFUVVMwID4+IDIpICYgaXItPm1hc2tfa2V5ZG93bjsKIAlpcl9yYXdfZXZlbnRfc3RvcmVfZWRnZShkZXYtPnJlbW90ZS0+ZGV2LCBzcGFjZSA/IElSX1NQQUNFIDogSVJfUFVMU0UpOwogCi0KIAkvKgogCSAqIFdhaXQgMTUgbXMgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIGZpcnN0IElSIGV2ZW50IGJlZm9yZSBwcm9jZXNzaW5nCiAJICogdGhlIGV2ZW50LiBUaGlzIHRpbWUgaXMgZW5vdWdoIGZvciBORUMgcHJvdG9jb2wuIE1heSBuZWVkIGFkanVzdG1lbnRzCkBAIC0xMDQzLDE3MyArOTI2LDkgQEAKIAkgKi8KIAlpZiAoIWlyLT5hY3RpdmUpIHsKIAkJdGltZW91dCA9IGppZmZpZXMgKyBqaWZmaWVzX3RvX21zZWNzKDE1KTsKLQkJbW9kX3RpbWVyKCZpci0+dGltZXJfZW5kLCB0aW1lb3V0KTsKLQkJaXItPmFjdGl2ZSA9IDE7CisJCW1vZF90aW1lcigmaXItPnRpbWVyLCB0aW1lb3V0KTsKKwkJaXItPmFjdGl2ZSA9IHRydWU7CiAJfQogCiAJcmV0dXJuIDE7CiB9Ci0KLXN0YXRpYyBpbnQgc2FhNzEzNF9yYzVfaXJxKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2KQotewotCXN0cnVjdCBjYXJkX2lyICppciA9IGRldi0+cmVtb3RlOwotCXN0cnVjdCB0aW1ldmFsIHR2OwotCXUzMiBnYXA7Ci0JdW5zaWduZWQgbG9uZyBjdXJyZW50X2ppZmZpZXMsIHRpbWVvdXQ7Ci0KLQkvKiBnZXQgdGltZSBvZiBiaXQgKi8KLQljdXJyZW50X2ppZmZpZXMgPSBqaWZmaWVzOwotCWRvX2dldHRpbWVvZmRheSgmdHYpOwotCi0JLyogYXZvaWQgb3ZlcmZsb3cgd2l0aCBnYXAgPjFzICovCi0JaWYgKHR2LnR2X3NlYyAtIGlyLT5iYXNlX3RpbWUudHZfc2VjID4gMSkgewotCQlnYXAgPSAyMDAwMDA7Ci0JfSBlbHNlIHsKLQkJZ2FwID0gMTAwMDAwMCAqICh0di50dl9zZWMgLSBpci0+YmFzZV90aW1lLnR2X3NlYykgKwotCQkgICAgdHYudHZfdXNlYyAtIGlyLT5iYXNlX3RpbWUudHZfdXNlYzsKLQl9Ci0KLQkvKiBhY3RpdmUgY29kZSA9PiBhZGQgYml0ICovCi0JaWYgKGlyLT5hY3RpdmUpIHsKLQkJLyogb25seSBpZiBpbiB0aGUgY29kZSAob3RoZXJ3aXNlIHNwdXJpb3VzIElSUSBvciB0aW1lcgotCQkgICBsYXRlKSAqLwotCQlpZiAoaXItPmxhc3RfYml0IDwgMjgpIHsKLQkJCWlyLT5sYXN0X2JpdCA9IChnYXAgLSBpcl9yYzVfcmVtb3RlX2dhcCAvIDIpIC8KLQkJCSAgICBpcl9yYzVfcmVtb3RlX2dhcDsKLQkJCWlyLT5jb2RlIHw9IDEgPDwgaXItPmxhc3RfYml0OwotCQl9Ci0JCS8qIHN0YXJ0aW5nIG5ldyBjb2RlICovCi0JfSBlbHNlIHsKLQkJaXItPmFjdGl2ZSA9IDE7Ci0JCWlyLT5jb2RlID0gMDsKLQkJaXItPmJhc2VfdGltZSA9IHR2OwotCQlpci0+bGFzdF9iaXQgPSAwOwotCi0JCXRpbWVvdXQgPSBjdXJyZW50X2ppZmZpZXMgKyAoNTAwICsgMzAgKiBIWikgLyAxMDAwOwotCQltb2RfdGltZXIoJmlyLT50aW1lcl9lbmQsIHRpbWVvdXQpOwotCX0KLQotCXJldHVybiAxOwotfQotCi0vKiBPbiBORUMgcHJvdG9jb2wsIE9uZSBoYXMgMi4yNSBtcywgYW5kIHplcm8gaGFzIDEuMTI1IG1zCi0gICBUaGUgZmlyc3QgcHVsc2UgKHN0YXJ0KSBoYXMgOSArIDQuNSBtcwotICovCi0KLXN0YXRpYyB2b2lkIHNhYTcxMzRfbmVjX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiA9IChzdHJ1Y3Qgc2FhNzEzNF9kZXYgKikgZGF0YTsKLQlzdHJ1Y3QgY2FyZF9pciAqaXIgPSBkZXYtPnJlbW90ZTsKLQotCWRwcmludGsoIkNhbmNlbCBrZXkgcmVwZWF0XG4iKTsKLQotCWlyX2lucHV0X25va2V5KGlyLT5kZXYsICZpci0+aXIpOwotfQotCi1zdGF0aWMgdm9pZCBuZWNfdGFzayh1bnNpZ25lZCBsb25nIGRhdGEpCi17Ci0Jc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYgPSAoc3RydWN0IHNhYTcxMzRfZGV2ICopIGRhdGE7Ci0Jc3RydWN0IGNhcmRfaXIgKmlyOwotCXN0cnVjdCB0aW1ldmFsIHR2OwotCWludCBjb3VudCwgcHVsc2UsIG9sZHB1bHNlLCBnYXA7Ci0JdTMyIGlyY29kZSA9IDAsIG5vdF9jb2RlID0gMDsKLQlpbnQgbmdhcCA9IDA7Ci0KLQlpZiAoIWRhdGEpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJzYWE3MTN4L2lyOiBDYW4ndCByZWNvdmVyIGRldiBzdHJ1Y3RcbiIpOwotCQkvKiBHUElPIHdpbGwgYmUga2VwdCBkaXNhYmxlZCAqLwotCQlyZXR1cm47Ci0JfQotCi0JaXIgPSBkZXYtPnJlbW90ZTsKLQotCS8qIHJpc2luZyBTQUE3MTM0X0dQSU9fR1BSRVNDQU4gcmVhZHMgdGhlIHN0YXR1cyAqLwotCXNhYV9jbGVhcmIoU0FBNzEzNF9HUElPX0dQTU9ERTMsIFNBQTcxMzRfR1BJT19HUFJFU0NBTik7Ci0Jc2FhX3NldGIoU0FBNzEzNF9HUElPX0dQTU9ERTMsIFNBQTcxMzRfR1BJT19HUFJFU0NBTik7Ci0KLQlvbGRwdWxzZSA9IHNhYV9yZWFkbChTQUE3MTM0X0dQSU9fR1BTVEFUVVMwID4+IDIpICYgaXItPm1hc2tfa2V5ZG93bjsKLQlwdWxzZSA9IG9sZHB1bHNlOwotCi0JZG9fZ2V0dGltZW9mZGF5KCZ0dik7Ci0JaXItPmJhc2VfdGltZSA9IHR2OwotCi0JLyogRGVjb2RlIE5FQyBwdWxzZWNvZGUuIFRoaXMgY29kZSBjYW4gdGFrZSB1cCB0byA3Ni41IG1zIHRvIHJ1bi4KLQkgICBVbmZvcnR1bmF0ZWx5LCB1c2luZyBJUlEgdG8gZGVjb2RlIHB1bHNlIGRpZG4ndCB3b3JrLCBzaW5jZSBpdCB1c2VzCi0JICAgYSBwdWxzZSB0cmFpbiBvZiAzOEtIei4gVGhpcyBtZWFucyBvbmUgcHVsc2Ugb24gZWFjaCA1MiB1cwotCSAqLwotCWRvIHsKLQkJLyogV2FpdCB1bnRpbCB0aGUgZW5kIG9mIHB1bHNlL3NwYWNlIG9yIDUgbXMgKi8KLQkJZm9yIChjb3VudCA9IDA7IGNvdW50IDwgNTAwOyBjb3VudCsrKSAgewotCQkJdWRlbGF5KDEwKTsKLQkJCS8qIHJpc2luZyBTQUE3MTM0X0dQSU9fR1BSRVNDQU4gcmVhZHMgdGhlIHN0YXR1cyAqLwotCQkJc2FhX2NsZWFyYihTQUE3MTM0X0dQSU9fR1BNT0RFMywgU0FBNzEzNF9HUElPX0dQUkVTQ0FOKTsKLQkJCXNhYV9zZXRiKFNBQTcxMzRfR1BJT19HUE1PREUzLCBTQUE3MTM0X0dQSU9fR1BSRVNDQU4pOwotCQkJcHVsc2UgPSBzYWFfcmVhZGwoU0FBNzEzNF9HUElPX0dQU1RBVFVTMCA+PiAyKQotCQkJCSYgaXItPm1hc2tfa2V5ZG93bjsKLQkJCWlmIChwdWxzZSAhPSBvbGRwdWxzZSkKLQkJCQlicmVhazsKLQkJfQotCi0JCWRvX2dldHRpbWVvZmRheSgmdHYpOwotCQlnYXAgPSAxMDAwMDAwICogKHR2LnR2X3NlYyAtIGlyLT5iYXNlX3RpbWUudHZfc2VjKSArCi0JCQkJdHYudHZfdXNlYyAtIGlyLT5iYXNlX3RpbWUudHZfdXNlYzsKLQotCQlpZiAoIXB1bHNlKSB7Ci0JCQkvKiBCaXQgMCBoYXMgNTYwIHVzLCB3aGlsZSBiaXQgMSBoYXMgMTEyMCB1cy4KLQkJCSAgIERvIHNvbWV0aGluZyBvbmx5IGlmIGJpdCA9PSAxCi0JCQkgKi8KLQkJCWlmIChuZ2FwICYmIChnYXAgPiA1NjAgKyAyODApKSB7Ci0JCQkJdW5zaWduZWQgaW50IHNoaWZ0ID0gbmdhcCAtIDE7Ci0KLQkJCQkvKiBBZGRyZXNzIGZpcnN0LCB0aGVuIGNvbW1hbmQgKi8KLQkJCQlpZiAoc2hpZnQgPCA4KSB7Ci0JCQkJCXNoaWZ0ICs9IDg7Ci0JCQkJCWlyY29kZSB8PSAxIDw8IHNoaWZ0OwotCQkJCX0gZWxzZSBpZiAoc2hpZnQgPCAxNikgewotCQkJCQlub3RfY29kZSB8PSAxIDw8IHNoaWZ0OwotCQkJCX0gZWxzZSBpZiAoc2hpZnQgPCAyNCkgewotCQkJCQlzaGlmdCAtPSAxNjsKLQkJCQkJaXJjb2RlIHw9IDEgPDwgc2hpZnQ7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJc2hpZnQgLT0gMjQ7Ci0JCQkJCW5vdF9jb2RlIHw9IDEgPDwgc2hpZnQ7Ci0JCQkJfQotCQkJfQotCQkJbmdhcCsrOwotCQl9Ci0KLQotCQlpci0+YmFzZV90aW1lID0gdHY7Ci0KLQkJLyogVElNRU9VVCAtIExvbmcgcHVsc2UgKi8KLQkJaWYgKGdhcCA+PSA1MDAwKQotCQkJYnJlYWs7Ci0JCW9sZHB1bHNlID0gcHVsc2U7Ci0JfSB3aGlsZSAobmdhcCA8IDMyKTsKLQotCWlmIChuZ2FwID09IDMyKSB7Ci0JCS8qIEZJWE1FOiBzaG91bGQgY2hlY2sgaWYgbm90X2NvZGUgPT0gfmlyY29kZSAqLwotCQlpci0+Y29kZSA9IGlyX2V4dHJhY3RfYml0cyhpcmNvZGUsIGlyLT5tYXNrX2tleWNvZGUpOwotCi0JCWRwcmludGsoInNjYW5jb2RlID0gMHglMDJ4IChjb2RlID0gMHglMDJ4LCBub3Rjb2RlPSAweCUwMngpXG4iLAotCQkJIGlyLT5jb2RlLCBpcmNvZGUsIG5vdF9jb2RlKTsKLQotCQlpcl9pbnB1dF9rZXlkb3duKGlyLT5kZXYsICZpci0+aXIsIGlyLT5jb2RlKTsKLQl9IGVsc2UKLQkJZHByaW50aygiUmVwZWF0IGxhc3Qga2V5XG4iKTsKLQotCS8qIEtlZXAgcmVwZWF0aW5nIHRoZSBsYXN0IGtleSAqLwotCW1vZF90aW1lcigmaXItPnRpbWVyX2tleXVwLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygxNTApKTsKLQotCXNhYV9zZXRsKFNBQTcxMzRfSVJRMiwgU0FBNzEzNF9JUlEyX0lOVEVfR1BJTzE4X1ApOwotfQotCi1zdGF0aWMgaW50IHNhYTcxMzRfbmVjX2lycShzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldikKLXsKLQlzdHJ1Y3QgY2FyZF9pciAqaXIgPSBkZXYtPnJlbW90ZTsKLQotCXNhYV9jbGVhcmwoU0FBNzEzNF9JUlEyLCBTQUE3MTM0X0lSUTJfSU5URV9HUElPMThfUCk7Ci0JdGFza2xldF9zY2hlZHVsZSgmaXItPnRsZXQpOwotCi0JcmV0dXJuIDE7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC10dmF1ZGlvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC10dmF1ZGlvLmMKaW5kZXggM2U3ZDJmZC4uNTdlNjQ2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtdHZhdWRpby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXR2YXVkaW8uYwpAQCAtNTUwLDE2ICs1NTAsMTYgQEAKIAkJfSBlbHNlIGlmICgwICE9IGRldi0+bGFzdF9jYXJyaWVyKSB7CiAJCQkvKiBubyBjYXJyaWVyIC0tIHRyeSBsYXN0IGRldGVjdGVkIG9uZSBhcyBmYWxsYmFjayAqLwogCQkJY2FycmllciA9IGRldi0+bGFzdF9jYXJyaWVyOwotCQkJZHByaW50ayhLRVJOX1dBUk5JTkcgIiVzL2F1ZGlvOiBhdWRpbyBjYXJyaWVyIHNjYW4gZmFpbGVkLCAiCi0JCQkgICAgICAgInVzaW5nICVkLiUwM2QgTUh6IFtsYXN0IGRldGVjdGVkXVxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIGNhcnJpZXIvMTAwMCwgY2FycmllciUxMDAwKTsKKwkJCWRwcmludGsoImF1ZGlvIGNhcnJpZXIgc2NhbiBmYWlsZWQsICIKKwkJCQkidXNpbmcgJWQuJTAzZCBNSHogW2xhc3QgZGV0ZWN0ZWRdXG4iLAorCQkJCWNhcnJpZXIvMTAwMCwgY2FycmllciUxMDAwKTsKIAogCQl9IGVsc2UgewogCQkJLyogbm8gY2FycmllciArIG5vIGZhbGxiYWNrIC0tIHVzZSBkZWZhdWx0ICovCiAJCQljYXJyaWVyID0gZGVmYXVsdF9jYXJyaWVyOwotCQkJZHByaW50ayhLRVJOX1dBUk5JTkcgIiVzL2F1ZGlvOiBhdWRpbyBjYXJyaWVyIHNjYW4gZmFpbGVkLCAiCi0JCQkgICAgICAgInVzaW5nICVkLiUwM2QgTUh6IFtkZWZhdWx0XVxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIGNhcnJpZXIvMTAwMCwgY2FycmllciUxMDAwKTsKKwkJCWRwcmludGsoImF1ZGlvIGNhcnJpZXIgc2NhbiBmYWlsZWQsICIKKwkJCQkidXNpbmcgJWQuJTAzZCBNSHogW2RlZmF1bHRdXG4iLAorCQkJCWNhcnJpZXIvMTAwMCwgY2FycmllciUxMDAwKTsKIAkJfQogCQl0dmF1ZGlvX3NldGNhcnJpZXIoZGV2LGNhcnJpZXIsY2Fycmllcik7CiAJCWRldi0+YXV0b211dGUgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXZpZGVvLmMKaW5kZXggZjBiMTU3My4uNzc2YmEyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtdmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC12aWRlby5jCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSAic2FhNzEzNC1yZWcuaCIKICNpbmNsdWRlICJzYWE3MTM0LmgiCiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KLSNpbmNsdWRlIDxtZWRpYS9yZHMuaD4KKyNpbmNsdWRlIDxtZWRpYS9zYWE2NTg4Lmg+CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCkBAIC0xNDU5LDcgKzE0NTksNyBAQAogewogCXN0cnVjdCBzYWE3MTM0X2ZoICAqZmggID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2ID0gZmgtPmRldjsKLQlzdHJ1Y3QgcmRzX2NvbW1hbmQgY21kOworCXN0cnVjdCBzYWE2NTg4X2NvbW1hbmQgY21kOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAkvKiB0dXJuIG9mZiBvdmVybGF5ICovCkBAIC0xNDk0LDcgKzE0OTQsNyBAQAogCiAJc2FhX2NhbGxfYWxsKGRldiwgY29yZSwgc19wb3dlciwgMCk7CiAJaWYgKGZoLT5yYWRpbykKLQkJc2FhX2NhbGxfYWxsKGRldiwgY29yZSwgaW9jdGwsIFJEU19DTURfQ0xPU0UsICZjbWQpOworCQlzYWFfY2FsbF9hbGwoZGV2LCBjb3JlLCBpb2N0bCwgU0FBNjU4OF9DTURfQ0xPU0UsICZjbWQpOwogCiAJLyogZnJlZSBzdHVmZiAqLwogCXZpZGVvYnVmX21tYXBfZnJlZSgmZmgtPmNhcCk7CkBAIC0xNTIwLDE0ICsxNTIwLDE0IEBACiB7CiAJc3RydWN0IHNhYTcxMzRfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2ID0gZmgtPmRldjsKLQlzdHJ1Y3QgcmRzX2NvbW1hbmQgY21kOworCXN0cnVjdCBzYWE2NTg4X2NvbW1hbmQgY21kOwogCiAJY21kLmJsb2NrX2NvdW50ID0gY291bnQvMzsKIAljbWQuYnVmZmVyID0gZGF0YTsKIAljbWQuaW5zdGFuY2UgPSBmaWxlOwogCWNtZC5yZXN1bHQgPSAtRU5PREVWOwogCi0Jc2FhX2NhbGxfYWxsKGRldiwgY29yZSwgaW9jdGwsIFJEU19DTURfUkVBRCwgJmNtZCk7CisJc2FhX2NhbGxfYWxsKGRldiwgY29yZSwgaW9jdGwsIFNBQTY1ODhfQ01EX1JFQUQsICZjbWQpOwogCiAJcmV0dXJuIGNtZC5yZXN1bHQ7CiB9CkBAIC0xNTM2LDEyICsxNTM2LDEyIEBACiB7CiAJc3RydWN0IHNhYTcxMzRfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2ID0gZmgtPmRldjsKLQlzdHJ1Y3QgcmRzX2NvbW1hbmQgY21kOworCXN0cnVjdCBzYWE2NTg4X2NvbW1hbmQgY21kOwogCiAJY21kLmluc3RhbmNlID0gZmlsZTsKIAljbWQuZXZlbnRfbGlzdCA9IHdhaXQ7CiAJY21kLnJlc3VsdCA9IC1FTk9ERVY7Ci0Jc2FhX2NhbGxfYWxsKGRldiwgY29yZSwgaW9jdGwsIFJEU19DTURfUE9MTCwgJmNtZCk7CisJc2FhX2NhbGxfYWxsKGRldiwgY29yZSwgaW9jdGwsIFNBQTY1ODhfQ01EX1BPTEwsICZjbWQpOwogCiAJcmV0dXJuIGNtZC5yZXN1bHQ7CiB9CkBAIC0xNzQ4LDcgKzE3NDgsNiBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoTlVMTCA9PSBjYXJkX2luKGRldiwgaS0+aW5kZXgpLm5hbWUpCiAJCXJldHVybiAtRUlOVkFMOwotCW1lbXNldChpLCAwLCBzaXplb2YoKmkpKTsKIAlpLT5pbmRleCA9IG47CiAJaS0+dHlwZSAgPSBWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBOwogCXN0cmNweShpLT5uYW1lLCBjYXJkX2luKGRldiwgbikubmFtZSk7CkBAIC0yMjExLDE0ICsyMjEwLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAotc3RhdGljIGludCB2aWRpb2NnbWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHZpZGVvX21idWYgKm1idWYpCi17Ci0Jc3RydWN0IHNhYTcxMzRfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXJldHVybiB2aWRlb2J1Zl9jZ21idWYoc2FhNzEzNF9xdWV1ZShmaCksIG1idWYsIDgpOwotfQotI2VuZGlmCi0KIHN0YXRpYyBpbnQgc2FhNzEzNF9yZXFidWZzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9yZXF1ZXN0YnVmZmVycyAqcCkKIHsKQEAgLTI0NTYsOSArMjQ0Nyw2IEBACiAJLnZpZGlvY19zdHJlYW1vZmYJCT0gc2FhNzEzNF9zdHJlYW1vZmYsCiAJLnZpZGlvY19nX3R1bmVyCQkJPSBzYWE3MTM0X2dfdHVuZXIsCiAJLnZpZGlvY19zX3R1bmVyCQkJPSBzYWE3MTM0X3NfdHVuZXIsCi0jaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCi0JLnZpZGlvY2dtYnVmCQkJPSB2aWRpb2NnbWJ1ZiwKLSNlbmRpZgogCS52aWRpb2NfZ19jcm9wCQkJPSBzYWE3MTM0X2dfY3JvcCwKIAkudmlkaW9jX3NfY3JvcAkJCT0gc2FhNzEzNF9zX2Nyb3AsCiAJLnZpZGlvY19nX2ZidWYJCQk9IHNhYTcxMzRfZ19mYnVmLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LmgKaW5kZXggZDNiNmExOS4uNWIwYTM0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC5oCkBAIC0zNyw3ICszNyw3IEBACiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CiAjaW5jbHVkZSA8bWVkaWEvdHVuZXIuaD4KLSNpbmNsdWRlIDxtZWRpYS9pci1jb21tb24uaD4KKyNpbmNsdWRlIDxtZWRpYS9yYy1jb3JlLmg+CiAjaW5jbHVkZSA8bWVkaWEvaXIta2JkLWkyYy5oPgogI2luY2x1ZGUgPG1lZGlhL3ZpZGVvYnVmLWRtYS1zZy5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KQEAgLTExOSw2ICsxMTksMjYgQEAKIAl1bnNpZ25lZCBpbnQgICB1dnN3YXA6MTsKIH07CiAKK3N0cnVjdCBzYWE3MTM0X2NhcmRfaXIgeworCXN0cnVjdCByY19kZXYJCSpkZXY7CisKKwljaGFyICAgICAgICAgICAgICAgICAgICBuYW1lWzMyXTsKKwljaGFyICAgICAgICAgICAgICAgICAgICBwaHlzWzMyXTsKKwl1bnNpZ25lZCAgICAgICAgICAgICAgICB1c2VyczsKKworCXUzMgkJCXBvbGxpbmc7CisgICAgICAgIHUzMgkJCWxhc3RfZ3BpbzsKKyAgICAgICAgdTMyCQkJbWFza19rZXljb2RlLCBtYXNrX2tleWRvd24sIG1hc2tfa2V5dXA7CisKKwlib29sICAgICAgICAgICAgICAgICAgICBydW5uaW5nOworCWJvb2wJCQlhY3RpdmU7CisKKwlzdHJ1Y3QgdGltZXJfbGlzdCAgICAgICB0aW1lcjsKKworCS8qIElSIGNvcmUgcmF3IGRlY29kaW5nICovCisJdTMyICAgICAgICAgICAgICAgICAgICAgcmF3X2RlY29kZTsKK307CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBjYXJkIGNvbmZpZ3VyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCkBAIC0zMDUsNiArMzI1LDggQEAKICNkZWZpbmUgU0FBNzEzNF9CT0FSRF9CRUhPTERfQTcgICAgICAgICAgICAgMTc5CiAjZGVmaW5lIFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBX003MzNBICAgICAgIDE4MAogI2RlZmluZSBTQUE3MTM0X0JPQVJEX1RFQ0hOT1RSRU5EX0JVREdFVF9UMzAwMCAxODEKKyNkZWZpbmUgU0FBNzEzNF9CT0FSRF9LV09STERfUENJX1NCVFZEX0ZVTExTRUcgMTgyCisjZGVmaW5lIFNBQTcxMzRfQk9BUkRfVklERU9NQVRFX00xRiAgICAgICAgIDE4MwogCiAjZGVmaW5lIFNBQTcxMzRfTUFYQk9BUkRTIDMyCiAjZGVmaW5lIFNBQTcxMzRfSU5QVVRfTUFYIDgKQEAgLTUyOSw3ICs1NTEsNyBAQAogCiAJLyogaW5mcmFyZWQgcmVtb3RlICovCiAJaW50ICAgICAgICAgICAgICAgICAgICAgICAgaGFzX3JlbW90ZTsKLQlzdHJ1Y3QgY2FyZF9pcgkJICAgKnJlbW90ZTsKKwlzdHJ1Y3Qgc2FhNzEzNF9jYXJkX2lyICAgICAqcmVtb3RlOwogCiAJLyogcGNpIGkvbyAqLwogCWNoYXIgICAgICAgICAgICAgICAgICAgICAgIG5hbWVbMzJdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTY0L3NhYTcxNjQtYXBpLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC1hcGkuYwppbmRleCBhZDNiYzQxLi5iZDg2ZDk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC1hcGkuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC1hcGkuYwpAQCAtNDAsOSArNDAsOCBAQAogCiAJcmV0ID0gc2FhNzE2NF9jbWRfc2VuZChkZXYsIDAsIEdFVF9DVVIsCiAJCUdFVF9GV19TVEFUVVNfQ09OVFJPTCwgc2l6ZW9mKHN0cnVjdCB0bUZ3SW5mb1N0cnVjdCksIGkpOwotCWlmIChyZXQgIT0gU0FBX09LKSB7CisJaWYgKHJldCAhPSBTQUFfT0spCiAJCXByaW50ayhLRVJOX0VSUiAiJXMoKSBlcnJvciwgcmV0ID0gMHgleFxuIiwgX19mdW5jX18sIHJldCk7Ci0JfQogCiAJcHJpbnRrKEtFUk5fSU5GTyAic2FhNzE2NFslZF0tQ1BVOiAlZCBwZXJjZW50IiwgZGV2LT5uciwgaS0+Q1BVTG9hZCk7CiAKQEAgLTYzLDE0ICs2MiwxNSBAQAogCiAJCXJldCA9IHNhYTcxNjRfY21kX3NlbmQoZGV2LCAwLCBHRVRfQ1VSLAogCQkJR0VUX0RFQlVHX0RBVEFfQ09OVFJPTCwgc2l6ZW9mKGQpLCAmZCk7Ci0JCWlmIChyZXQgIT0gU0FBX09LKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgZXJyb3IsIHJldCA9IDB4JXhcbiIsIF9fZnVuY19fLCByZXQpOwotCQl9CisJCWlmIChyZXQgIT0gU0FBX09LKQorCQkJcHJpbnRrKEtFUk5fRVJSICIlcygpIGVycm9yLCByZXQgPSAweCV4XG4iLAorCQkJCV9fZnVuY19fLCByZXQpOwogCiAJCWlmIChkLmR3UmVzdWx0ICE9IFNBQV9PSykKIAkJCWJyZWFrOwogCi0JCXByaW50ayhLRVJOX0lORk8gInNhYTcxNjRbJWRdLUZXTVNHOiAlcyIsIGRldi0+bnIsIGQudWNEZWJ1Z0RhdGEpOworCQlwcmludGsoS0VSTl9JTkZPICJzYWE3MTY0WyVkXS1GV01TRzogJXMiLCBkZXYtPm5yLAorCQkJZC51Y0RlYnVnRGF0YSk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC04Niw5ICs4Niw5IEBACiAJLyogUmV0cmlldmUgY3VycmVudCBzdGF0ZSAqLwogCXJldCA9IHNhYTcxNjRfY21kX3NlbmQoZGV2LCAwLCBHRVRfQ1VSLAogCQlTRVRfREVCVUdfTEVWRUxfQ09OVFJPTCwgc2l6ZW9mKGx2bCksICZsdmwpOwotCWlmIChyZXQgIT0gU0FBX09LKSB7CisJaWYgKHJldCAhPSBTQUFfT0spCiAJCXByaW50ayhLRVJOX0VSUiAiJXMoKSBlcnJvciwgcmV0ID0gMHgleFxuIiwgX19mdW5jX18sIHJldCk7Ci0JfQorCiAJZHByaW50ayhEQkdMVkxfQVBJLCAiJXMoKSBXYXMgJWRcbiIsIF9fZnVuY19fLCBsdmwuZHdEZWJ1Z0xldmVsKTsKIAogCWx2bC5kd0RlYnVnTGV2ZWwgPSBsZXZlbDsKQEAgLTk2LDkgKzk2LDggQEAKIAkvKiBzZXQgbmV3IHN0YXRlICovCiAJcmV0ID0gc2FhNzE2NF9jbWRfc2VuZChkZXYsIDAsIFNFVF9DVVIsCiAJCVNFVF9ERUJVR19MRVZFTF9DT05UUk9MLCBzaXplb2YobHZsKSwgJmx2bCk7Ci0JaWYgKHJldCAhPSBTQUFfT0spIHsKKwlpZiAocmV0ICE9IFNBQV9PSykKIAkJcHJpbnRrKEtFUk5fRVJSICIlcygpIGVycm9yLCByZXQgPSAweCV4XG4iLCBfX2Z1bmNfXywgcmV0KTsKLQl9CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTUyLDggKzE1MSwxMCBAQAogCQkJCWRwcmludGsoREJHTFZMX0FQSSwgIlNFVC9DT01NSVQgVmVyaWZpZWRcbiIpOwogCiAJCQlkcHJpbnRrKERCR0xWTF9BUEksICJyc3AuYm1IaW50ID0gMHgleFxuIiwgcnNwLmJtSGludCk7Ci0JCQlkcHJpbnRrKERCR0xWTF9BUEksICJyc3AuYkZvcm1hdEluZGV4ID0gMHgleFxuIiwgcnNwLmJGb3JtYXRJbmRleCk7Ci0JCQlkcHJpbnRrKERCR0xWTF9BUEksICJyc3AuYkZyYW1lSW5kZXggPSAweCV4XG4iLCByc3AuYkZyYW1lSW5kZXgpOworCQkJZHByaW50ayhEQkdMVkxfQVBJLCAicnNwLmJGb3JtYXRJbmRleCA9IDB4JXhcbiIsCisJCQkJcnNwLmJGb3JtYXRJbmRleCk7CisJCQlkcHJpbnRrKERCR0xWTF9BUEksICJyc3AuYkZyYW1lSW5kZXggPSAweCV4XG4iLAorCQkJCXJzcC5iRnJhbWVJbmRleCk7CiAJCX0gZWxzZQogCQkJcHJpbnRrKEtFUk5fRVJSICIlcygpIGNvbXBhcmUgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CiAJfQpAQCAtMjEwLDE0ICsyMTEsMTcgQEAKIAkJcHJpbnRrKEtFUk5fRVJSICIlcygpIGVycm9yLCByZXQgPSAweCV4XG4iLCBfX2Z1bmNfXywgcmV0KTsKIAogCS8qIEVzdGFibGlzaCB2aWRlbyBiaXRyYXRlcyAqLwotCWlmIChwb3J0LT5lbmNvZGVyX3BhcmFtcy5iaXRyYXRlX21vZGUgPT0gVjRMMl9NUEVHX1ZJREVPX0JJVFJBVEVfTU9ERV9DQlIpCisJaWYgKHBvcnQtPmVuY29kZXJfcGFyYW1zLmJpdHJhdGVfbW9kZSA9PQorCQlWNEwyX01QRUdfVklERU9fQklUUkFURV9NT0RFX0NCUikKIAkJdmIudWNWaWRlb0JpdFJhdGVNb2RlID0gRVVfVklERU9fQklUX1JBVEVfTU9ERV9DT05TVEFOVDsKIAllbHNlCiAJCXZiLnVjVmlkZW9CaXRSYXRlTW9kZSA9IEVVX1ZJREVPX0JJVF9SQVRFX01PREVfVkFSSUFCTEVfUEVBSzsKIAl2Yi5kd1ZpZGVvQml0UmF0ZSA9IHBvcnQtPmVuY29kZXJfcGFyYW1zLmJpdHJhdGU7CiAJdmIuZHdWaWRlb0JpdFJhdGVQZWFrID0gcG9ydC0+ZW5jb2Rlcl9wYXJhbXMuYml0cmF0ZV9wZWFrOwogCXJldCA9IHNhYTcxNjRfY21kX3NlbmQocG9ydC0+ZGV2LCBwb3J0LT5od2NmZy5zb3VyY2VpZCwgU0VUX0NVUiwKLQkJRVVfVklERU9fQklUX1JBVEVfQ09OVFJPTCwgc2l6ZW9mKHN0cnVjdCB0bUNvbVJlc0VuY1ZpZGVvQml0UmF0ZSksICZ2Yik7CisJCUVVX1ZJREVPX0JJVF9SQVRFX0NPTlRST0wsCisJCXNpemVvZihzdHJ1Y3QgdG1Db21SZXNFbmNWaWRlb0JpdFJhdGUpLAorCQkmdmIpOwogCWlmIChyZXQgIT0gU0FBX09LKQogCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgZXJyb3IsIHJldCA9IDB4JXhcbiIsIF9fZnVuY19fLCByZXQpOwogCkBAIC0yMjYsOSArMjMwLDEyIEBACiAJYWIuZHdBdWRpb0JpdFJhdGUgPSAzODQwMDA7CiAJYWIuZHdBdWRpb0JpdFJhdGVQZWFrID0gYWIuZHdBdWRpb0JpdFJhdGU7CiAJcmV0ID0gc2FhNzE2NF9jbWRfc2VuZChwb3J0LT5kZXYsIHBvcnQtPmh3Y2ZnLnNvdXJjZWlkLCBTRVRfQ1VSLAotCQlFVV9BVURJT19CSVRfUkFURV9DT05UUk9MLCBzaXplb2Yoc3RydWN0IHRtQ29tUmVzRW5jQXVkaW9CaXRSYXRlKSwgJmFiKTsKKwkJRVVfQVVESU9fQklUX1JBVEVfQ09OVFJPTCwKKwkJc2l6ZW9mKHN0cnVjdCB0bUNvbVJlc0VuY0F1ZGlvQml0UmF0ZSksCisJCSZhYik7CiAJaWYgKHJldCAhPSBTQUFfT0spCi0JCXByaW50ayhLRVJOX0VSUiAiJXMoKSBlcnJvciwgcmV0ID0gMHgleFxuIiwgX19mdW5jX18sIHJldCk7CisJCXByaW50ayhLRVJOX0VSUiAiJXMoKSBlcnJvciwgcmV0ID0gMHgleFxuIiwgX19mdW5jX18sCisJCQlyZXQpOwogCiAJc2FhNzE2NF9hcGlfc2V0X2FzcGVjdF9yYXRpbyhwb3J0KTsKIAlzYWE3MTY0X2FwaV9zZXRfZ29wX3NpemUocG9ydCk7CkBAIC0yNDQsNyArMjUxLDggQEAKIAlzdHJ1Y3QgdG1Db21SZXNFbmNWaWRlb0lucHV0QXNwZWN0UmF0aW8gYXI7CiAJaW50IHJldDsKIAotCWRwcmludGsoREJHTFZMX0VOQywgIiVzKCkgdW5pdGlkPTB4JXhcbiIsIF9fZnVuY19fLCBwb3J0LT5od2NmZy5zb3VyY2VpZCk7CisJZHByaW50ayhEQkdMVkxfRU5DLCAiJXMoKSB1bml0aWQ9MHgleFxuIiwgX19mdW5jX18sCisJCXBvcnQtPmh3Y2ZnLnNvdXJjZWlkKTsKIAogCXBvcnQtPmVuY29kZXJfcHJvZmlsZSA9IDA7CiAJcG9ydC0+dmlkZW9fZm9ybWF0ID0gMDsKQEAgLTI1Nyw3ICsyNjUsOCBAQAogCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgZXJyb3IsIHJldCA9IDB4JXhcbiIsIF9fZnVuY19fLCByZXQpOwogCiAJcmV0ID0gc2FhNzE2NF9jbWRfc2VuZChwb3J0LT5kZXYsIHBvcnQtPmh3Y2ZnLnNvdXJjZWlkLCBHRVRfQ1VSLAotCQlFVV9WSURFT19SRVNPTFVUSU9OX0NPTlRST0wsIHNpemVvZih1OCksICZwb3J0LT52aWRlb19yZXNvbHV0aW9uKTsKKwkJRVVfVklERU9fUkVTT0xVVElPTl9DT05UUk9MLCBzaXplb2YodTgpLAorCQkmcG9ydC0+dmlkZW9fcmVzb2x1dGlvbik7CiAJaWYgKHJldCAhPSBTQUFfT0spCiAJCXByaW50ayhLRVJOX0VSUiAiJXMoKSBlcnJvciwgcmV0ID0gMHgleFxuIiwgX19mdW5jX18sIHJldCk7CiAKQEAgLTI5NCwxMyArMzAzLDIwIEBACiAJZHByaW50ayhEQkdMVkxfRU5DLCAidmlkZW9fZm9ybWF0ICAgID0gJWRcbiIsIHBvcnQtPnZpZGVvX2Zvcm1hdCk7CiAJZHByaW50ayhEQkdMVkxfRU5DLCAiYXVkaW9fZm9ybWF0ICAgID0gJWRcbiIsIHBvcnQtPmF1ZGlvX2Zvcm1hdCk7CiAJZHByaW50ayhEQkdMVkxfRU5DLCAidmlkZW9fcmVzb2x1dGlvbj0gJWRcbiIsIHBvcnQtPnZpZGVvX3Jlc29sdXRpb24pOwotCWRwcmludGsoREJHTFZMX0VOQywgInYudWNWaWRlb0JpdFJhdGVNb2RlID0gJWRcbiIsIHYudWNWaWRlb0JpdFJhdGVNb2RlKTsKLQlkcHJpbnRrKERCR0xWTF9FTkMsICJ2LmR3VmlkZW9CaXRSYXRlICAgICA9ICVkXG4iLCB2LmR3VmlkZW9CaXRSYXRlKTsKLQlkcHJpbnRrKERCR0xWTF9FTkMsICJ2LmR3VmlkZW9CaXRSYXRlUGVhayA9ICVkXG4iLCB2LmR3VmlkZW9CaXRSYXRlUGVhayk7Ci0JZHByaW50ayhEQkdMVkxfRU5DLCAiYS51Y1ZpZGVvQml0UmF0ZU1vZGUgPSAlZFxuIiwgYS51Y0F1ZGlvQml0UmF0ZU1vZGUpOwotCWRwcmludGsoREJHTFZMX0VOQywgImEuZHdWaWRlb0JpdFJhdGUgICAgID0gJWRcbiIsIGEuZHdBdWRpb0JpdFJhdGUpOwotCWRwcmludGsoREJHTFZMX0VOQywgImEuZHdWaWRlb0JpdFJhdGVQZWFrID0gJWRcbiIsIGEuZHdBdWRpb0JpdFJhdGVQZWFrKTsKLQlkcHJpbnRrKERCR0xWTF9FTkMsICJhc3BlY3Qud2lkdGggLyBoZWlnaHQgPSAlZDolZFxuIiwgYXIud2lkdGgsIGFyLmhlaWdodCk7CisJZHByaW50ayhEQkdMVkxfRU5DLCAidi51Y1ZpZGVvQml0UmF0ZU1vZGUgPSAlZFxuIiwKKwkJdi51Y1ZpZGVvQml0UmF0ZU1vZGUpOworCWRwcmludGsoREJHTFZMX0VOQywgInYuZHdWaWRlb0JpdFJhdGUgICAgID0gJWRcbiIsCisJCXYuZHdWaWRlb0JpdFJhdGUpOworCWRwcmludGsoREJHTFZMX0VOQywgInYuZHdWaWRlb0JpdFJhdGVQZWFrID0gJWRcbiIsCisJCXYuZHdWaWRlb0JpdFJhdGVQZWFrKTsKKwlkcHJpbnRrKERCR0xWTF9FTkMsICJhLnVjVmlkZW9CaXRSYXRlTW9kZSA9ICVkXG4iLAorCQlhLnVjQXVkaW9CaXRSYXRlTW9kZSk7CisJZHByaW50ayhEQkdMVkxfRU5DLCAiYS5kd1ZpZGVvQml0UmF0ZSAgICAgPSAlZFxuIiwKKwkJYS5kd0F1ZGlvQml0UmF0ZSk7CisJZHByaW50ayhEQkdMVkxfRU5DLCAiYS5kd1ZpZGVvQml0UmF0ZVBlYWsgPSAlZFxuIiwKKwkJYS5kd0F1ZGlvQml0UmF0ZVBlYWspOworCWRwcmludGsoREJHTFZMX0VOQywgImFzcGVjdC53aWR0aCAvIGhlaWdodCA9ICVkOiVkXG4iLAorCQlhci53aWR0aCwgYXIuaGVpZ2h0KTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC00MzksNyArNDU1LDggQEAKIAogCS8qIEF1ZGlvIE11eCAqLwogCXJldCA9IHNhYTcxNjRfY21kX3NlbmQocG9ydC0+ZGV2LCBwb3J0LT5hdWRmZWF0LnNvdXJjZWlkLCBTRVRfQ1VSLAotCQlTVV9JTlBVVF9TRUxFQ1RfQ09OVFJPTCwgc2l6ZW9mKHU4KSwgJmlucHV0c1twb3J0LT5tdXhfaW5wdXQgLSAxXSk7CisJCVNVX0lOUFVUX1NFTEVDVF9DT05UUk9MLCBzaXplb2YodTgpLAorCQkmaW5wdXRzW3BvcnQtPm11eF9pbnB1dCAtIDFdKTsKIAlpZiAocmV0ICE9IFNBQV9PSykKIAkJcHJpbnRrKEtFUk5fRVJSICIlcygpIGVycm9yLCByZXQgPSAweCV4XG4iLCBfX2Z1bmNfXywgcmV0KTsKIApAQCAtNDkyLDcgKzUwOSw4IEBACiAJaWYgKHJldCAhPSBTQUFfT0spCiAJCXByaW50ayhLRVJOX0VSUiAiJXMoKSBlcnJvciwgcmV0ID0gMHgleFxuIiwgX19mdW5jX18sIHJldCk7CiAKLQlkcHJpbnRrKERCR0xWTF9BUEksICIlcyglZCkgbWluPSVkIG1heD0lZCBjdXI9JWRcbiIsIF9fZnVuY19fLCBsZXZlbCwgbWluLCBtYXgsIHYpOworCWRwcmludGsoREJHTFZMX0FQSSwgIiVzKCVkKSBtaW49JWQgbWF4PSVkIGN1cj0lZFxuIiwgX19mdW5jX18sCisJCWxldmVsLCBtaW4sIG1heCwgdik7CiAKIAl2ID0gbGV2ZWw7CiAJaWYgKHYgPCBtaW4pCkBAIC01MTcsNyArNTM1LDggQEAKIAlpZiAocmV0ICE9IFNBQV9PSykKIAkJcHJpbnRrKEtFUk5fRVJSICIlcygpIGVycm9yLCByZXQgPSAweCV4XG4iLCBfX2Z1bmNfXywgcmV0KTsKIAotCWRwcmludGsoREJHTFZMX0FQSSwgIiVzKCVkKSBtaW49JWQgbWF4PSVkIGN1cj0lZFxuIiwgX19mdW5jX18sIGxldmVsLCBtaW4sIG1heCwgdik7CisJZHByaW50ayhEQkdMVkxfQVBJLCAiJXMoJWQpIG1pbj0lZCBtYXg9JWQgY3VyPSVkXG4iLCBfX2Z1bmNfXywKKwkJbGV2ZWwsIG1pbiwgbWF4LCB2KTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC01MzksNyArNTU4LDggQEAKIAlsdmwudWNTQVBfTGV2ZWwgPSBUTUhXX0xFVl9BREpfU0FQTEVWX0RFRkFVTFQ7CiAJbHZsLnVjQURDX0xldmVsID0gVE1IV19MRVZfQURKX0FEQ0xFVl9ERUZBVUxUOwogCXJldCA9IHNhYTcxNjRfY21kX3NlbmQocG9ydC0+ZGV2LCBwb3J0LT5hdWRmZWF0LnVuaXRpZCwgU0VUX0NVUiwKLQkJQVVESU9fREVGQVVMVF9DT05UUk9MLCBzaXplb2Yoc3RydWN0IHRtQ29tUmVzQXVkaW9EZWZhdWx0cyksICZsdmwpOworCQlBVURJT19ERUZBVUxUX0NPTlRST0wsIHNpemVvZihzdHJ1Y3QgdG1Db21SZXNBdWRpb0RlZmF1bHRzKSwKKwkJJmx2bCk7CiAJaWYgKHJldCAhPSBTQUFfT0spCiAJCXByaW50ayhLRVJOX0VSUiAiJXMoKSBlcnJvciwgcmV0ID0gMHgleFxuIiwgX19mdW5jX18sIHJldCk7CiAKQEAgLTU1NSw3ICs1NzUsOCBAQAogCXJldCA9IHNhYTcxNjRfY21kX3NlbmQocG9ydC0+ZGV2LCBwb3J0LT50dW5lcnVuaXQudW5pdGlkLCBTRVRfQ1VSLAogCQlUVV9TVEFOREFSRF9DT05UUk9MLCBzaXplb2YodHZhdWRpbyksICZ0dmF1ZGlvKTsKIAlpZiAocmV0ICE9IFNBQV9PSykKLQkJcHJpbnRrKEtFUk5fRVJSICIlcygpIFRVX1NUQU5EQVJEX0NPTlRST0wgZXJyb3IsIHJldCA9IDB4JXhcbiIsIF9fZnVuY19fLCByZXQpOworCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgVFVfU1RBTkRBUkRfQ09OVFJPTCBlcnJvciwgcmV0ID0gMHgleFxuIiwKKwkJCV9fZnVuY19fLCByZXQpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTU3NSw3ICs1OTYsOSBAQAogCXJldCA9IHNhYTcxNjRfY21kX3NlbmQocG9ydC0+ZGV2LCBwb3J0LT50dW5lcnVuaXQudW5pdGlkLCBTRVRfQ1VSLAogCQlUVV9TVEFOREFSRF9BVVRPX0NPTlRST0wsIHNpemVvZihwKSwgJnApOwogCWlmIChyZXQgIT0gU0FBX09LKQotCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgVFVfU1RBTkRBUkRfQVVUT19DT05UUk9MIGVycm9yLCByZXQgPSAweCV4XG4iLCBfX2Z1bmNfXywgcmV0KTsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkiJXMoKSBUVV9TVEFOREFSRF9BVVRPX0NPTlRST0wgZXJyb3IsIHJldCA9IDB4JXhcbiIsCisJCQlfX2Z1bmNfXywgcmV0KTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC02NDYsOSArNjY5LDkgQEAKIAkJRVhVX1JFR0lTVEVSX0FDQ0VTU19DT05UUk9MLCBsZW4sICZidWYpOwogCWlmIChyZXQgIT0gU0FBX09LKQogCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgZXJyb3IsIHJldCgyKSA9IDB4JXhcbiIsIF9fZnVuY19fLCByZXQpOwotCi0JLy9zYWE3MTY0X2R1bXBoZXgxNihkZXYsIGJ1ZiwgMTYpOwotCisjaWYgMAorCXNhYTcxNjRfZHVtcGhleDE2KGRldiwgYnVmLCAxNik7CisjZW5kaWYKIAlyZXR1cm4gcmV0ID09IFNBQV9PSyA/IDAgOiAtRUlPOwogfQogCkBAIC02OTYsNyArNzE5LDggQEAKIAl9IGVsc2UgewogCQkvKiBVbmtub3duIHN0YW5kYXJkLCBhc3N1bWUgRFRWICovCiAJCWRwcmludGsoREJHTFZMX0FQSSwgIiBVbmtub3duIChhc3N1bWluZyBEVFYpXG4iKTsKLQkJc2FhNzE2NF9hcGlfc2V0X2RpZihwb3J0LCAweDAwLCAweDgwKTsgLyogVW5kZWZpbmVkIFZpZGVvIFN0YW5kYXJkICovCisJCS8qIFVuZGVmaW5kZWQgVmlkZW8gU3RhbmRhcmQgKi8KKwkJc2FhNzE2NF9hcGlfc2V0X2RpZihwb3J0LCAweDAwLCAweDgwKTsKIAkJYWdjX2Rpc2FibGUgPSAxOwogCX0KIApAQCAtOTMzLDcgKzk1Nyw3IEBACiAJCWlmIChoZHItPnR5cGUgIT0gQ1NfSU5URVJGQUNFKQogCQkJcmV0dXJuIFNBQV9FUlJfTk9UX1NVUFBPUlRFRDsKIAotCQlkcHJpbnRrKERCR0xWTF9BUEksICJAIDB4JXggPSBcbiIsIGlkeCk7CisJCWRwcmludGsoREJHTFZMX0FQSSwgIkAgMHgleCA9XG4iLCBpZHgpOwogCQlzd2l0Y2ggKGhkci0+c3VidHlwZSkgewogCQljYXNlIEdFTkVSQUxfUkVRVUVTVDoKIAkJCWRwcmludGsoREJHTFZMX0FQSSwgIiBHRU5FUkFMX1JFUVVFU1RcbiIpOwpAQCAtMTA4NSw3ICsxMTA5LDggQEAKIAkJCQkJCXZiaXBvcnQgPSAmZGV2LT5wb3J0c1tTQUE3MTY0X1BPUlRfVkJJMl07CiAJCQkJCW1lbWNweSgmdmJpcG9ydC0+aHdjZmcsIHZjb3V0cHV0dGVybWhkciwKIAkJCQkJCXNpemVvZigqdmNvdXRwdXR0ZXJtaGRyKSk7Ci0JCQkJCW1lbWNweSgmdmJpcG9ydC0+dmJpX2ZtdF9udHNjLCB2YmlmbXQsIHNpemVvZigqdmJpZm10KSk7CisJCQkJCW1lbWNweSgmdmJpcG9ydC0+dmJpX2ZtdF9udHNjLCB2YmlmbXQsCisJCQkJCQlzaXplb2YoKnZiaWZtdCkpOwogCQkJCQlzYWE3MTY0X2FwaV9jb25maWd1cmVfcG9ydF92YmkoZGV2LAogCQkJCQkJdmJpcG9ydCk7CiAJCQkJCWJyZWFrOwpAQCAtMTEzNCw3ICsxMTU5LDkgQEAKIAkJCQkJZW5jcG9ydCA9ICZkZXYtPnBvcnRzW1NBQTcxNjRfUE9SVF9FTkMyXTsKIAkJCQltZW1jcHkoJmVuY3BvcnQtPnR1bmVydW5pdCwgdHVuZXJ1bml0aGRyLAogCQkJCQlzaXplb2Yoc3RydWN0IHRtQ29tUmVzVHVuZXJEZXNjckhlYWRlcikpOwotCQkJCWRwcmludGsoREJHTFZMX0FQSSwgIiAgKGJlY29tZXMgZGV2LT5lbmNbJWRdIHR1bmVyKVxuIiwgZW5jcG9ydC0+bnIpOworCQkJCWRwcmludGsoREJHTFZMX0FQSSwKKwkJCQkJIiAgKGJlY29tZXMgZGV2LT5lbmNbJWRdIHR1bmVyKVxuIiwKKwkJCQkJZW5jcG9ydC0+bnIpOwogCQkJfQogCQkJYnJlYWs7CiAJCWNhc2UgVkNfU0VMRUNUT1JfVU5JVDoKQEAgLTExNjMsNyArMTE5MCw4IEBACiAJCQkJCWVuY3BvcnQgPSAmZGV2LT5wb3J0c1tTQUE3MTY0X1BPUlRfRU5DMl07CiAJCQkJbWVtY3B5KCZlbmNwb3J0LT52aWRwcm9jLCBwZGgsCiAJCQkJCXNpemVvZihzdHJ1Y3QgdG1Db21SZXNQcm9jRGVzY3JIZWFkZXIpKTsKLQkJCQlkcHJpbnRrKERCR0xWTF9BUEksICIgIChiZWNvbWVzIGRldi0+ZW5jWyVkXSlcbiIsIGVuY3BvcnQtPm5yKTsKKwkJCQlkcHJpbnRrKERCR0xWTF9BUEksICIgIChiZWNvbWVzIGRldi0+ZW5jWyVkXSlcbiIsCisJCQkJCWVuY3BvcnQtPm5yKTsKIAkJCX0KIAkJCWJyZWFrOwogCQljYXNlIEZFQVRVUkVfVU5JVDoKQEAgLTExODEsMTUgKzEyMDksMTggQEAKIAkJCQllbmNwb3J0ID0gJmRldi0+cG9ydHNbU0FBNzE2NF9QT1JUX0VOQzJdOwogCQkJbWVtY3B5KCZlbmNwb3J0LT5hdWRmZWF0LCBhZmQsCiAJCQkJc2l6ZW9mKHN0cnVjdCB0bUNvbVJlc0FGZWF0dXJlRGVzY3JIZWFkZXIpKTsKLQkJCWRwcmludGsoREJHTFZMX0FQSSwgIiAgKGJlY29tZXMgZGV2LT5lbmNbJWRdKVxuIiwgZW5jcG9ydC0+bnIpOworCQkJZHByaW50ayhEQkdMVkxfQVBJLCAiICAoYmVjb21lcyBkZXYtPmVuY1slZF0pXG4iLAorCQkJCWVuY3BvcnQtPm5yKTsKIAkJCWJyZWFrOwogCQljYXNlIEVOQ09ERVJfVU5JVDoKIAkJCWVkaCA9IChzdHJ1Y3QgdG1Db21SZXNFbmNvZGVyRGVzY3JIZWFkZXIgKikoYnVmICsgaWR4KTsKIAkJCWRwcmludGsoREJHTFZMX0FQSSwgIiBFTkNPREVSX1VOSVRcbiIpOwogCQkJZHByaW50ayhEQkdMVkxfQVBJLCAiICBzdWJ0eXBlID0gMHgleFxuIiwgZWRoLT5zdWJ0eXBlKTsKIAkJCWRwcmludGsoREJHTFZMX0FQSSwgIiAgdW5pdGlkID0gMHgleFxuIiwgZWRoLT51bml0aWQpOwotCQkJZHByaW50ayhEQkdMVkxfQVBJLCAiICB2c291cmNlaWQgPSAweCV4XG4iLCBlZGgtPnZzb3VyY2VpZCk7Ci0JCQlkcHJpbnRrKERCR0xWTF9BUEksICIgIGFzb3VyY2VpZCA9IDB4JXhcbiIsIGVkaC0+YXNvdXJjZWlkKTsKKwkJCWRwcmludGsoREJHTFZMX0FQSSwgIiAgdnNvdXJjZWlkID0gMHgleFxuIiwKKwkJCWVkaC0+dnNvdXJjZWlkKTsKKwkJCWRwcmludGsoREJHTFZMX0FQSSwgIiAgYXNvdXJjZWlkID0gMHgleFxuIiwKKwkJCQllZGgtPmFzb3VyY2VpZCk7CiAJCQlkcHJpbnRrKERCR0xWTF9BUEksICIgIGl1bml0ID0gMHgleFxuIiwgZWRoLT5pdW5pdCk7CiAJCQlpZiAoZWRoLT5pdW5pdCA9PSBlZGgtPnVuaXRpZCkgewogCQkJCWlmIChjdXJycGF0aCA9PSAxKQpAQCAtMTE5OCw3ICsxMjI5LDkgQEAKIAkJCQkJZW5jcG9ydCA9ICZkZXYtPnBvcnRzW1NBQTcxNjRfUE9SVF9FTkMyXTsKIAkJCQltZW1jcHkoJmVuY3BvcnQtPmVuY3VuaXQsIGVkaCwKIAkJCQkJc2l6ZW9mKHN0cnVjdCB0bUNvbVJlc0VuY29kZXJEZXNjckhlYWRlcikpOwotCQkJCWRwcmludGsoREJHTFZMX0FQSSwgIiAgKGJlY29tZXMgZGV2LT5lbmNbJWRdKVxuIiwgZW5jcG9ydC0+bnIpOworCQkJCWRwcmludGsoREJHTFZMX0FQSSwKKwkJCQkJIiAgKGJlY29tZXMgZGV2LT5lbmNbJWRdKVxuIiwKKwkJCQkJZW5jcG9ydC0+bnIpOwogCQkJfQogCQkJYnJlYWs7CiAJCWNhc2UgRVhURU5TSU9OX1VOSVQ6CkBAIC0xMjYyLDcgKzEyOTUsOSBAQAogCQkJCQllbmNwb3J0ID0gJmRldi0+cG9ydHNbU0FBNzE2NF9QT1JUX0VOQzJdOwogCQkJCW1lbWNweSgmZW5jcG9ydC0+aWZ1bml0LCBleHRoZHIsCiAJCQkJCXNpemVvZihzdHJ1Y3QgdG1Db21SZXNFeHREZXZEZXNjckhlYWRlcikpOwotCQkJCWRwcmludGsoREJHTFZMX0FQSSwgIiAgKGJlY29tZXMgZGV2LT5lbmNbJWRdKVxuIiwgZW5jcG9ydC0+bnIpOworCQkJCWRwcmludGsoREJHTFZMX0FQSSwKKwkJCQkJIiAgKGJlY29tZXMgZGV2LT5lbmNbJWRdKVxuIiwKKwkJCQkJZW5jcG9ydC0+bnIpOwogCQkJfQogCQkJYnJlYWs7CiAJCWNhc2UgUFZDX0lORlJBUkVEX1VOSVQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC1idWZmZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9zYWE3MTY0LWJ1ZmZlci5jCmluZGV4IDcyMzA5MTIuLmRkZDI1MjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9zYWE3MTY0LWJ1ZmZlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9zYWE3MTY0LWJ1ZmZlci5jCkBAIC0yNCw0NiArMjQsNDYgQEAKICNpbmNsdWRlICJzYWE3MTY0LmgiCiAKIC8qIFRoZSBQQ0kgYWRkcmVzcyBzcGFjZSBmb3IgYnVmZmVyIGhhbmRsaW5nIGxvb2tzIGxpa2UgdGhpczoKLQotICstdTMyIHdpZGUtLS0tLS0tLS0tLS0tKwotIHwgICAgICAgICAgICAgICAgICAgICAgKwotICstdTY0IHdpZGUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKLSArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSB8IEN1cnJlbnRCdWZmZXJQdHIgICAgICsgUG9pbnRlciB0byBjdXJyZW50IFBDSSBidWZmZXIgPi0rCi0gKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotIHwgVW51c2VkICAgICAgICAgICAgICAgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gfCBQaXRjaCAgICAgICAgICAgICAgICArID0gMTg4IChieXRlcykgICAgICAgICAgICAgICAgICAgfAotICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSB8IFBDSSBidWZmZXIgc2l6ZSAgICAgICsgPSBwaXRjaCAqIG51bWJlciBvZiBsaW5lcyAoMzEyKSB8Ci0gKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotIHwwfCBCdWYwIFdyaXRlIE9mZnNldCAgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2Ci0gfDF8IEJ1ZjEgV3JpdGUgT2Zmc2V0ICArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSB8MnwgQnVmMiBXcml0ZSBPZmZzZXQgICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotIHwzfCBCdWYzIFdyaXRlIE9mZnNldCAgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gLi4uIE1vcmUgd3JpdGUgb2Zmc2V0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgICAgIHwKLSArMHwgc2V0IG9mIHB0cnMgdG8gUENJIHBhZ2V0YWJsZXMgICAgICAgICAgICAgKyAgICAgICAgICB8Ci0gKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgICAgICAgICAgfAotICsxfCBzZXQgb2YgcHRycyB0byBQQ0kgcGFnZXRhYmxlcyAgICAgICAgICAgICArIDwtLS0tLS0tLSsKLSArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICsyfCBzZXQgb2YgcHRycyB0byBQQ0kgcGFnZXRhYmxlcyAgICAgICAgICAgICArCi0gKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSArM3wgc2V0IG9mIHB0cnMgdG8gUENJIHBhZ2V0YWJsZXMgICAgICAgICAgICAgKyA+LS0rCi0gKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgICAgfAotIC4uLiBNb3JlIGJ1ZmZlciBwb2ludGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICstLS0tLS0tLS0tLS0tLS0tKwotCQkJCQkJICAgICstPnwgcHRbMF0gVFMgZGF0YSAgfAotCQkJCQkJICAgIHwgICstLS0tLS0tLS0tLS0tLS0tKwotCQkJCQkJICAgIHwKLQkJCQkJCSAgICB8ICArLS0tLS0tLS0tLS0tLS0tLSsKLQkJCQkJCSAgICArLT58IHB0WzFdIFRTIGRhdGEgIHwKLQkJCQkJCSAgICB8ICArLS0tLS0tLS0tLS0tLS0tLSsKLQkJCQkJCSAgICB8IGV0YworICoKKyAqICstdTMyIHdpZGUtLS0tLS0tLS0tLS0tKworICogfCAgICAgICAgICAgICAgICAgICAgICArCisgKiArLXU2NCB3aWRlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICogKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKKyAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICogfCBDdXJyZW50QnVmZmVyUHRyICAgICArIFBvaW50ZXIgdG8gY3VycmVudCBQQ0kgYnVmZmVyID4tKworICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogfCBVbnVzZWQgICAgICAgICAgICAgICArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogfCBQaXRjaCAgICAgICAgICAgICAgICArID0gMTg4IChieXRlcykgICAgICAgICAgICAgICAgICAgfAorICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogfCBQQ0kgYnVmZmVyIHNpemUgICAgICArID0gcGl0Y2ggKiBudW1iZXIgb2YgbGluZXMgKDMxMikgfAorICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogfDB8IEJ1ZjAgV3JpdGUgT2Zmc2V0ICArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdgorICogfDF8IEJ1ZjEgV3JpdGUgT2Zmc2V0ICArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogfDJ8IEJ1ZjIgV3JpdGUgT2Zmc2V0ICArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogfDN8IEJ1ZjMgV3JpdGUgT2Zmc2V0ICArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogLi4uIE1vcmUgd3JpdGUgb2Zmc2V0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgICAgICAgICAgfAorICogKzB8IHNldCBvZiBwdHJzIHRvIFBDSSBwYWdldGFibGVzICAgICAgICAgICAgICsgICAgICAgICAgfAorICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgICAgICAgICAgfAorICogKzF8IHNldCBvZiBwdHJzIHRvIFBDSSBwYWdldGFibGVzICAgICAgICAgICAgICsgPC0tLS0tLS0tKworICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqICsyfCBzZXQgb2YgcHRycyB0byBQQ0kgcGFnZXRhYmxlcyAgICAgICAgICAgICArCisgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICogKzN8IHNldCBvZiBwdHJzIHRvIFBDSSBwYWdldGFibGVzICAgICAgICAgICAgICsgPi0tKworICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgICAgfAorICogLi4uIE1vcmUgYnVmZmVyIHBvaW50ZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgKy0tLS0tLS0tLS0tLS0tLS0rCisgKgkJCQkJCSAgICArLT58IHB0WzBdIFRTIGRhdGEgIHwKKyAqCQkJCQkJICAgIHwgICstLS0tLS0tLS0tLS0tLS0tKworICoJCQkJCQkgICAgfAorICoJCQkJCQkgICAgfCAgKy0tLS0tLS0tLS0tLS0tLS0rCisgKgkJCQkJCSAgICArLT58IHB0WzFdIFRTIGRhdGEgIHwKKyAqCQkJCQkJICAgIHwgICstLS0tLS0tLS0tLS0tLS0tKworICoJCQkJCQkgICAgfCBldGMKICAqLwogCiB2b2lkIHNhYTcxNjRfYnVmZmVyX2Rpc3BsYXkoc3RydWN0IHNhYTcxNjRfYnVmZmVyICpidWYpCkBAIC0yODMsNyArMjgzLDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RydWN0IHNhYTcxNjRfdXNlcl9idWZmZXIgKnNhYTcxNjRfYnVmZmVyX2FsbG9jX3VzZXIoc3RydWN0IHNhYTcxNjRfZGV2ICpkZXYsIHUzMiBsZW4pCitzdHJ1Y3Qgc2FhNzE2NF91c2VyX2J1ZmZlciAqc2FhNzE2NF9idWZmZXJfYWxsb2NfdXNlcihzdHJ1Y3Qgc2FhNzE2NF9kZXYgKmRldiwKKwl1MzIgbGVuKQogewogCXN0cnVjdCBzYWE3MTY0X3VzZXJfYnVmZmVyICpidWY7CiAKQEAgLTMxMywxMiArMzE0LDkgQEAKIAlpZiAoIWJ1ZikKIAkJcmV0dXJuOwogCi0JaWYgKGJ1Zi0+ZGF0YSkgewotCQlrZnJlZShidWYtPmRhdGEpOwotCQlidWYtPmRhdGEgPSAwOwotCX0KKwlrZnJlZShidWYtPmRhdGEpOworCWJ1Zi0+ZGF0YSA9IDA7CiAKLQlpZiAoYnVmKQotCQlrZnJlZShidWYpOworCWtmcmVlKGJ1Zik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9zYWE3MTY0LWJ1cy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTY0L3NhYTcxNjQtYnVzLmMKaW5kZXggMzBkNTI4My4uYjJiMGQ5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTY0L3NhYTcxNjQtYnVzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTY0L3NhYTcxNjQtYnVzLmMKQEAgLTQzLDcgKzQzLDggQEAKIAogCWItPm1fZHdTaXplR2V0UmluZwk9IFNBQV9ERVZJQ0VfQlVGRkVSQkxPQ0tTSVpFOwogCi0JYi0+bV9kd1NldFdyaXRlUG9zCT0gKCh1MzIpZGV2LT5pbnRmZGVzYy5CQVJMb2NhdGlvbikgKyAoMiAqIHNpemVvZih1NjQpKTsKKwliLT5tX2R3U2V0V3JpdGVQb3MJPSAoKHUzMilkZXYtPmludGZkZXNjLkJBUkxvY2F0aW9uKSArCisJCSgyICogc2l6ZW9mKHU2NCkpOwogCWItPm1fZHdTZXRSZWFkUG9zCT0gYi0+bV9kd1NldFdyaXRlUG9zICsgKDEgKiBzaXplb2YodTMyKSk7CiAKIAliLT5tX2R3R2V0V3JpdGVQb3MJPSBiLT5tX2R3U2V0V3JpdGVQb3MgKyAoMiAqIHNpemVvZih1MzIpKTsKQEAgLTEwNSw3ICsxMDYsOCBAQAogCX0KIH0KIAotdm9pZCBzYWE3MTY0X2J1c19kdW1wbXNnKHN0cnVjdCBzYWE3MTY0X2RldiAqZGV2LCBzdHJ1Y3QgdG1Db21SZXNJbmZvKiBtLCB2b2lkICpidWYpCit2b2lkIHNhYTcxNjRfYnVzX2R1bXBtc2coc3RydWN0IHNhYTcxNjRfZGV2ICpkZXYsIHN0cnVjdCB0bUNvbVJlc0luZm8qIG0sCisJdm9pZCAqYnVmKQogewogCWRwcmludGsoREJHTFZMX0JVUywgIkR1bXBpbmcgbXNnIHN0cnVjdHVyZTpcbiIpOwogCWRwcmludGsoREJHTFZMX0JVUywgIiAuaWQgICAgICAgICAgICAgICA9ICVkXG4iLCAgIG0tPmlkKTsKQEAgLTEyOSw3ICsxMzEsOCBAQAogICogIFNBQV9PSyAgICAgVGhlIGZ1bmN0aW9uIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4KICAqICA8IDAgICAgICAgIE9uZSBvciBtb3JlIG1lbWJlcnMgYXJlIG5vdCBpbml0aWFsaXplZC4KICAqLwotaW50IHNhYTcxNjRfYnVzX3NldChzdHJ1Y3Qgc2FhNzE2NF9kZXYgKmRldiwgc3RydWN0IHRtQ29tUmVzSW5mbyogbXNnLCB2b2lkICpidWYpCitpbnQgc2FhNzE2NF9idXNfc2V0KHN0cnVjdCBzYWE3MTY0X2RldiAqZGV2LCBzdHJ1Y3QgdG1Db21SZXNJbmZvKiBtc2csCisJdm9pZCAqYnVmKQogewogCXN0cnVjdCB0bUNvbVJlc0J1c0luZm8gKmJ1cyA9ICZkZXYtPmJ1czsKIAl1MzIgYnl0ZXNfdG9fd3JpdGUsIGZyZWVfd3JpdGVfc3BhY2UsIHRpbWVvdXQsIGN1cnJfc3JwLCBjdXJyX3N3cDsKQEAgLTI5NCwxNCArMjk3LDE1IEBACiAvKgogICogUmVjZWl2ZSBhIGNvbW1hbmQgb3IgYSByZXNwb25zZSBmcm9tIHRoZSBidXMuIFRoZSBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdAogICoga25vdyBpZiBpdCBpcyBhIGNvbW1hbmQgb3IgYSByZXNwb25zZSBpdCBzaW1wbHkgZGVxdWV1ZXMgdGhlIGRhdGEsCi0gKiBkZXBlbmRpbmcgb24gdGhlIGJ1cyBpbmZvcm1hdGlvbiBnaXZlbiBpbiB0aGUgc3RydWN0IHRtQ29tUmVzQnVzSW5mbyBzdHJ1Y3R1cmUuCisgKiBkZXBlbmRpbmcgb24gdGhlIGJ1cyBpbmZvcm1hdGlvbiBnaXZlbiBpbiB0aGUgc3RydWN0IHRtQ29tUmVzQnVzSW5mbworICogc3RydWN0dXJlLgogICoKICAqIFJldHVybiBWYWx1ZToKICAqICAwICAgICAgICAgIFRoZSBmdW5jdGlvbiBleGVjdXRlZCBzdWNjZXNzZnVsbHkuCiAgKiAgPCAwICAgICAgICBPbmUgb3IgbW9yZSBtZW1iZXJzIGFyZSBub3QgaW5pdGlhbGl6ZWQuCiAgKi8KLWludCBzYWE3MTY0X2J1c19nZXQoc3RydWN0IHNhYTcxNjRfZGV2ICpkZXYsIHN0cnVjdCB0bUNvbVJlc0luZm8qIG1zZywgdm9pZCAqYnVmLAotCWludCBwZWVrb25seSkKK2ludCBzYWE3MTY0X2J1c19nZXQoc3RydWN0IHNhYTcxNjRfZGV2ICpkZXYsIHN0cnVjdCB0bUNvbVJlc0luZm8qIG1zZywKKwl2b2lkICpidWYsIGludCBwZWVrb25seSkKIHsKIAlzdHJ1Y3QgdG1Db21SZXNCdXNJbmZvICpidXMgPSAmZGV2LT5idXM7CiAJdTMyIGJ5dGVzX3RvX3JlYWQsIHdyaXRlX2Rpc3RhbmNlLCBjdXJyX2dycCwgY3Vycl9nd3AsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC1jYXJkcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTY0L3NhYTcxNjQtY2FyZHMuYwppbmRleCA0Y2I2MzRlLi42OTgyMmE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9zYWE3MTY0LWNhcmRzLmMKQEAgLTQ4Miw3ICs0ODIsNyBAQAogCQlzYWE3MTY0X2FwaV9jbGVhcl9ncGlvYml0KGRldiwgUENJRUJSSURHRV9VTklUSUQsIDIpOwogCQlzYWE3MTY0X2FwaV9jbGVhcl9ncGlvYml0KGRldiwgUENJRUJSSURHRV9VTklUSUQsIDMpOwogCi0JCW1zbGVlcCgxMCk7CisJCW1zbGVlcCgyMCk7CiAKIAkJc2FhNzE2NF9hcGlfc2V0X2dwaW9iaXQoZGV2LCBQQ0lFQlJJREdFX1VOSVRJRCwgMik7CiAJCXNhYTcxNjRfYXBpX3NldF9ncGlvYml0KGRldiwgUENJRUJSSURHRV9VTklUSUQsIDMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTY0L3NhYTcxNjQtY21kLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC1jbWQuYwppbmRleCAzMDFhOWUzLi5hOTdhZTE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC1jbWQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC1jbWQuYwpAQCAtMTIyLDggKzEyMiw4IEBACiAJCQkJcmV0dXJuIHJldDsKIAkJfQogCi0JCS8qIEl0J3MgdW5saWtlbHkgdG8gaGF2ZSBtb3JlIHRoYW4gNCBvciA1IHBlbmRpbmcgbWVzc2FnZXMsIGVuc3VyZSB3ZSBleGl0Ci0JCSAqIGF0IHNvbWUgcG9pbnQgcmVnYXJkbGVzLgorCQkvKiBJdCdzIHVubGlrZWx5IHRvIGhhdmUgbW9yZSB0aGFuIDQgb3IgNSBwZW5kaW5nIG1lc3NhZ2VzLAorCQkgKiBlbnN1cmUgd2UgZXhpdCBhdCBzb21lIHBvaW50IHJlZ2FyZGxlc3MuCiAJCSAqLwogCX0gd2hpbGUgKGkrKyA8IDMyKTsKIApAQCAtMTg2LDcgKzE4Niw4IEBACiAJcmV0dXJuIFNBQV9PSzsKIH0KIAotaW50IHNhYTcxNjRfY21kX3NldChzdHJ1Y3Qgc2FhNzE2NF9kZXYgKmRldiwgc3RydWN0IHRtQ29tUmVzSW5mbyogbXNnLCB2b2lkICpidWYpCitpbnQgc2FhNzE2NF9jbWRfc2V0KHN0cnVjdCBzYWE3MTY0X2RldiAqZGV2LCBzdHJ1Y3QgdG1Db21SZXNJbmZvICptc2csCisJdm9pZCAqYnVmKQogewogCXN0cnVjdCB0bUNvbVJlc0J1c0luZm8gKmJ1cyA9ICZkZXYtPmJ1czsKIAl1OCBjbWRfc2VudDsKQEAgLTI5Miw3ICsyOTMsOCBAQAogCQkJICogV2UgdHlwaWNhbGx5IGFyZSBzaWduYWxsZWQgaW4gPCA1MG1zIGJ1dCBpdCBjYW4KIAkJCSAqIHRha2UgTVVDSCBsb25nZXIuCiAJCQkgKi8KLQkJCXdhaXRfZXZlbnRfdGltZW91dCgqcSwgZGV2LT5jbWRzW3NlcW5vXS5zaWduYWxsZWQsIChIWiAqIHdhaXRzZWNzKSk7CisJCQl3YWl0X2V2ZW50X3RpbWVvdXQoKnEsIGRldi0+Y21kc1tzZXFub10uc2lnbmFsbGVkLAorCQkJCShIWiAqIHdhaXRzZWNzKSk7CiAJCQlyID0gdGltZV9iZWZvcmUoamlmZmllcywgc3RhbXAgKyAoSFogKiB3YWl0c2VjcykpOwogCQkJaWYgKHIpCiAJCQkJcmV0ID0gU0FBX09LOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTY0L3NhYTcxNjQtY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTY0L3NhYTcxNjQtY29yZS5jCmluZGV4IGUxYmFjNTAuLmQ2YmYzZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9zYWE3MTY0LWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC1jb3JlLmMKQEAgLTQwLDEyICs0MCwxMiBAQAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiAvKgotICAxIEJhc2ljCi0gIDIKLSAgNCBpMmMKLSAgOCBhcGkKLSAxNiBjbWQKLSAzMiBidXMKKyAqICAxIEJhc2ljCisgKiAgMgorICogIDQgaTJjCisgKiAgOCBhcGkKKyAqIDE2IGNtZAorICogMzIgYnVzCiAgKi8KIAogdW5zaWduZWQgaW50IHNhYV9kZWJ1ZzsKQEAgLTgyLDcgKzgyLDggQEAKIAogdW5zaWduZWQgaW50IGd1YXJkX2NoZWNraW5nID0gMTsKIG1vZHVsZV9wYXJhbShndWFyZF9jaGVja2luZywgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoZ3VhcmRfY2hlY2tpbmcsICJlbmFibGUgZG1hIHNhbml0eSBjaGVja2luZyBmb3IgYnVmZmVyIG92ZXJydW5zIik7CitNT0RVTEVfUEFSTV9ERVNDKGd1YXJkX2NoZWNraW5nLAorCSJlbmFibGUgZG1hIHNhbml0eSBjaGVja2luZyBmb3IgYnVmZmVyIG92ZXJydW5zIik7CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2FhNzE2NF9kZXZjb3VudDsKIApAQCAtMTIzLDcgKzEyNCw5IEBACiAJCWlmICgoKihwICsgaSArIDApICE9IDB4MDApIHx8ICgqKHAgKyBpICsgMSkgIT0gMHgwMCkgfHwKIAkJCSgqKHAgKyBpICsgMikgIT0gMHgwMSkgfHwgKCoocCArIGkgKyAzKSAhPSAweEJBKSkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJObyBwYWNrIGF0IDB4JXhcbiIsIGkpOwotLy8JCQlzYWE3MTY0X2R1bXBoZXgxNkZGKGJ1Zi0+cG9ydC0+ZGV2LCAocCArIGkpLCAzMik7CisjaWYgMAorCQkJc2FhNzE2NF9kdW1waGV4MTZGRihidWYtPnBvcnQtPmRldiwgKHAgKyBpKSwgMzIpOworI2VuZGlmCiAJCX0KIAl9CiB9CkBAIC0xOTksMTkgKzIwMiwxNiBAQAogCXN0cmNweShoZy0+bmFtZSwgbmFtZSk7CiAKIAkvKiBGaXJzdCAzMG1zIHggMW1zICovCi0JZm9yIChpID0gMDsgaSA8IDMwOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgMzA7IGkrKykKIAkJaGctPmNvdW50ZXIxWzAgKyBpXS52YWwgPSBpOwotCX0KIAogCS8qIDMwIC0gMjAwbXMgeCAxMG1zICAqLwotCWZvciAoaSA9IDA7IGkgPCAxODsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IDE4OyBpKyspCiAJCWhnLT5jb3VudGVyMVszMCArIGldLnZhbCA9IDMwICsgKGkgKiAxMCk7Ci0JfQogCiAJLyogMjAwIC0gMjAwMG1zIHggMTAwbXMgICovCi0JZm9yIChpID0gMDsgaSA8IDE1OyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgMTU7IGkrKykKIAkJaGctPmNvdW50ZXIxWzQ4ICsgaV0udmFsID0gMjAwICsgKGkgKiAyMDApOwotCX0KIAogCS8qIENhdGNoIGFsbCBtYXNzaXZlIHZhbHVlICgyc2VjcykgKi8KIAloZy0+Y291bnRlcjFbNTVdLnZhbCA9IDIwMDA7CkBAIC0zMTUsNyArMzE1LDkgQEAKIAkJCQkJKCoocCArIGJ1Zi0+YWN0dWFsX3NpemUgKyAweDEzKSAhPSAweGZmKSkgewogCQkJCQkJcHJpbnRrKEtFUk5fRVJSICIlcygpIGJ1ZiAlcCBndWFyZCBidWZmZXIgYnJlYWNoXG4iLAogCQkJCQkJCV9fZnVuY19fLCBidWYpOwotLy8JCQkJCQlzYWE3MTY0X2R1bXBoZXgxNkZGKGRldiwgKHAgKyBidWYtPmFjdHVhbF9zaXplKSAtIDMyICwgNjQpOworI2lmIDAKKwkJCQkJCXNhYTcxNjRfZHVtcGhleDE2RkYoZGV2LCAocCArIGJ1Zi0+YWN0dWFsX3NpemUpIC0gMzIgLCA2NCk7CisjZW5kaWYKIAkJCQl9CiAJCQl9CiAKQEAgLTk2MSw5ICs5NjMsNyBAQAogCiAJCS8qIFdlIG5lZWQgYSBkZWZlcnJlZCBpbnRlcnJ1cHQgaGFuZGxlciBmb3IgY21kIGhhbmRsaW5nICovCiAJCUlOSVRfV09SSygmcG9ydC0+d29ya2VuYywgc2FhNzE2NF93b3JrX2VuY2hhbmRsZXIpOwotCX0KLQllbHNlCi0JaWYgKChwb3J0bnIgPT0gU0FBNzE2NF9QT1JUX1ZCSTEpIHx8IChwb3J0bnIgPT0gU0FBNzE2NF9QT1JUX1ZCSTIpKSB7CisJfSBlbHNlIGlmICgocG9ydG5yID09IFNBQTcxNjRfUE9SVF9WQkkxKSB8fCAocG9ydG5yID09IFNBQTcxNjRfUE9SVF9WQkkyKSkgewogCQlwb3J0LT50eXBlID0gU0FBNzE2NF9NUEVHX1ZCSTsKIAogCQkvKiBXZSBuZWVkIGEgZGVmZXJyZWQgaW50ZXJydXB0IGhhbmRsZXIgZm9yIGNtZCBoYW5kbGluZyAqLwpAQCAtMTAwMSw3ICsxMDAxLDcgQEAKIAlhdG9taWNfaW5jKCZkZXYtPnJlZmNvdW50KTsKIAlkZXYtPm5yID0gc2FhNzE2NF9kZXZjb3VudCsrOwogCi0Jc3ByaW50ZihkZXYtPm5hbWUsICJzYWE3MTY0WyVkXSIsIGRldi0+bnIpOworCXNucHJpbnRmKGRldi0+bmFtZSwgc2l6ZW9mKGRldi0+bmFtZSksICJzYWE3MTY0WyVkXSIsIGRldi0+bnIpOwogCiAJbXV0ZXhfbG9jaygmZGV2bGlzdCk7CiAJbGlzdF9hZGRfdGFpbCgmZGV2LT5kZXZsaXN0LCAmc2FhNzE2NF9kZXZsaXN0KTsKQEAgLTExNjksNyArMTE2OSw3IEBACiAJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbHAsIHNhYTcxNjRfcHJvY19zaG93LCBOVUxMKTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2FhNzE2NF9wcm9jX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzYWE3MTY0X3Byb2NfZm9wcyA9IHsKIAkub3BlbgkJPSBzYWE3MTY0X3Byb2Nfb3BlbiwKIAkucmVhZAkJPSBzZXFfcmVhZCwKIAkubGxzZWVrCQk9IHNlcV9sc2VlaywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9zYWE3MTY0LWVuY29kZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9zYWE3MTY0LWVuY29kZXIuYwppbmRleCBjYmI1M2QwLi4xODM4NDA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC1lbmNvZGVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTY0L3NhYTcxNjQtZW5jb2Rlci5jCkBAIC0xMjUsMTYgKzEyNSwyMiBAQAogCiAJZHByaW50ayhEQkdMVkxfRU5DLCAiJXMoKVxuIiwgX19mdW5jX18pOwogCi0JaWYgKHBvcnQtPmVuY29kZXJfcGFyYW1zLnN0cmVhbV90eXBlID09IFY0TDJfTVBFR19TVFJFQU1fVFlQRV9NUEVHMl9QUykgewotCQlkcHJpbnRrKERCR0xWTF9FTkMsICIlcygpIHR5cGU9VjRMMl9NUEVHX1NUUkVBTV9UWVBFX01QRUcyX1BTXG4iLCBfX2Z1bmNfXyk7CisJaWYgKHBvcnQtPmVuY29kZXJfcGFyYW1zLnN0cmVhbV90eXBlID09CisJCVY0TDJfTVBFR19TVFJFQU1fVFlQRV9NUEVHMl9QUykgeworCQlkcHJpbnRrKERCR0xWTF9FTkMsCisJCQkiJXMoKSB0eXBlPVY0TDJfTVBFR19TVFJFQU1fVFlQRV9NUEVHMl9QU1xuIiwKKwkJCV9fZnVuY19fKTsKIAkJcGFyYW1zLT5zYW1wbGVzcGVybGluZSA9IDEyODsKIAkJcGFyYW1zLT5udW1iZXJvZmxpbmVzID0gMjU2OwogCQlwYXJhbXMtPnBpdGNoID0gMTI4OwogCQlwYXJhbXMtPm51bXBhZ2V0YWJsZXMgPSAyICsKIAkJCSgoU0FBNzE2NF9QU19OVU1CRVJfT0ZfTElORVMgKiAxMjgpIC8gUEFHRV9TSVpFKTsKIAl9IGVsc2UKLQlpZiAocG9ydC0+ZW5jb2Rlcl9wYXJhbXMuc3RyZWFtX3R5cGUgPT0gVjRMMl9NUEVHX1NUUkVBTV9UWVBFX01QRUcyX1RTKSB7Ci0JCWRwcmludGsoREJHTFZMX0VOQywgIiVzKCkgdHlwZT1WNEwyX01QRUdfU1RSRUFNX1RZUEVfTVBFRzJfVFNcbiIsIF9fZnVuY19fKTsKKwlpZiAocG9ydC0+ZW5jb2Rlcl9wYXJhbXMuc3RyZWFtX3R5cGUgPT0KKwkJVjRMMl9NUEVHX1NUUkVBTV9UWVBFX01QRUcyX1RTKSB7CisJCWRwcmludGsoREJHTFZMX0VOQywKKwkJCSIlcygpIHR5cGU9VjRMMl9NUEVHX1NUUkVBTV9UWVBFX01QRUcyX1RTXG4iLAorCQkJX19mdW5jX18pOwogCQlwYXJhbXMtPnNhbXBsZXNwZXJsaW5lID0gMTg4OwogCQlwYXJhbXMtPm51bWJlcm9mbGluZXMgPSAzMTI7CiAJCXBhcmFtcy0+cGl0Y2ggPSAxODg7CkBAIC04MjYsNyArODMyLDggQEAKIAkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKGMsIDEsIDI1NSwgMSwgMTUpOwogCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFX01PREU6CiAJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChjLAotCQkJVjRMMl9NUEVHX1ZJREVPX0JJVFJBVEVfTU9ERV9WQlIsIFY0TDJfTVBFR19WSURFT19CSVRSQVRFX01PREVfQ0JSLAorCQkJVjRMMl9NUEVHX1ZJREVPX0JJVFJBVEVfTU9ERV9WQlIsCisJCQlWNEwyX01QRUdfVklERU9fQklUUkFURV9NT0RFX0NCUiwKIAkJCTEsIFY0TDJfTVBFR19WSURFT19CSVRSQVRFX01PREVfVkJSKTsKIAljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQl9GUkFNRVM6CiAJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChjLApAQCAtMTExMyw3ICsxMTIwLDkgQEAKIAkJaWYgKGNyY19jaGVja2luZykgewogCQkJY3JjID0gY3JjMzIoMCwgdWJ1Zi0+ZGF0YSwgdWJ1Zi0+YWN0dWFsX3NpemUpOwogCQkJaWYgKGNyYyAhPSB1YnVmLT5jcmMpIHsKLQkJCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgdWJ1ZiAlcCBjcmMgYmVjYW1lIGludmFsaWQsIHdhcyAweCV4IGJlY2FtZSAweCV4XG4iLCBfX2Z1bmNfXywKKwkJCQlwcmludGsoS0VSTl9FUlIKKwkJIiVzKCkgdWJ1ZiAlcCBjcmMgYmVjYW1lIGludmFsaWQsIHdhcyAweCV4IGJlY2FtZSAweCV4XG4iLAorCQkJCQlfX2Z1bmNfXywKIAkJCQkJdWJ1ZiwgdWJ1Zi0+Y3JjLCBjcmMpOwogCQkJfQogCQl9CkBAIC0xMjAxLDkgKzEyMTAsOCBAQAogCQlidWZmZXIgKz0gY250OwogCQlyZXQgKz0gY250OwogCi0JCWlmICh1YnVmLT5wb3MgPiB1YnVmLT5hY3R1YWxfc2l6ZSkgeworCQlpZiAodWJ1Zi0+cG9zID4gdWJ1Zi0+YWN0dWFsX3NpemUpCiAJCQlwcmludGsoS0VSTl9FUlIgInJlYWQoKSBwb3MgPiBhY3R1YWwsIGh1aD9cbiIpOwotCQl9CiAKIAkJaWYgKHVidWYtPnBvcyA9PSB1YnVmLT5hY3R1YWxfc2l6ZSkgewogCkBAIC0xMjI3LDE2ICsxMjM1LDE2IEBACiAJCX0KIAl9CiBlcnI6Ci0JaWYgKCFyZXQgJiYgIXVidWYpIHsKKwlpZiAoIXJldCAmJiAhdWJ1ZikKIAkJcmV0ID0gLUVBR0FJTjsKLQl9CiAKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdW5zaWduZWQgaW50IGZvcHNfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCkKIHsKLQlzdHJ1Y3Qgc2FhNzE2NF9lbmNvZGVyX2ZoICpmaCA9IChzdHJ1Y3Qgc2FhNzE2NF9lbmNvZGVyX2ZoICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzYWE3MTY0X2VuY29kZXJfZmggKmZoID0KKwkJKHN0cnVjdCBzYWE3MTY0X2VuY29kZXJfZmggKilmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNhYTcxNjRfcG9ydCAqcG9ydCA9IGZoLT5wb3J0OwogCXN0cnVjdCBzYWE3MTY0X3VzZXJfYnVmZmVyICp1YnVmOwogCXVuc2lnbmVkIGludCBtYXNrID0gMDsKQEAgLTEyNDksOSArMTI1Nyw4IEBACiAJc2FhNzE2NF9oaXN0b2dyYW1fdXBkYXRlKCZwb3J0LT5wb2xsX2ludGVydmFsLAogCQlwb3J0LT5sYXN0X3BvbGxfbXNlY3NfZGlmZik7CiAKLQlpZiAoIXZpZGVvX2lzX3JlZ2lzdGVyZWQocG9ydC0+djRsX2RldmljZSkpIHsKKwlpZiAoIXZpZGVvX2lzX3JlZ2lzdGVyZWQocG9ydC0+djRsX2RldmljZSkpCiAJCXJldHVybiAtRUlPOwotCX0KIAogCWlmIChhdG9taWNfY21weGNoZygmZmgtPnY0bF9yZWFkaW5nLCAwLCAxKSA9PSAwKSB7CiAJCWlmIChhdG9taWNfaW5jX3JldHVybigmcG9ydC0+djRsX3JlYWRlcl9jb3VudCkgPT0gMSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTY0L3NhYTcxNjQtZncuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9zYWE3MTY0LWZ3LmMKaW5kZXggNDg0NTMzYy4uZWJlZDZmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTY0L3NhYTcxNjQtZncuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC1mdy5jCkBAIC0xNzgsNyArMTc4LDcgQEAKIAkJCWdvdG8gb3V0OwogCQl9CiAKLQkJbXNsZWVwKDEwKTsKKwkJbXNsZWVwKDEwKTsgLyogQ2hlY2twYXRjaCB0aHJvd3MgYSA8IDIwbXMgd2FybmluZyAqLwogCQlpZiAodGltZW91dCsrID4gNjApCiAJCQlicmVhazsKIAl9CkBAIC0yMzUsNyArMjM1LDcgQEAKIAkJd2hpbGUgKGVycl9mbGFncyAhPSBTQUFfREVWSUNFX0lNQUdFX0JPT1RJTkcpIHsKIAkJCWRwcmludGsoREJHTFZMX0ZXLCAiJXMoKSBlcnJfZmxhZ3MgPSAleFxuIiwKIAkJCQlfX2Z1bmNfXywgZXJyX2ZsYWdzKTsKLQkJCW1zbGVlcCgxMCk7CisJCQltc2xlZXAoMTApOyAvKiBDaGVja3BhdGNoIHRocm93cyBhIDwgMjBtcyB3YXJuaW5nICovCiAKIAkJCWlmIChlcnJfZmxhZ3MgJiBTQUFfREVWSUNFX0lNQUdFX0NPUlJVUFQpIHsKIAkJCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgZmlybXdhcmUgY29ycnVwdFxuIiwKQEAgLTI5NCw3ICsyOTQsNyBAQAogCQkJd2hpbGUgKGVycl9mbGFncyAhPSBTQUFfREVWSUNFX0lNQUdFX0JPT1RJTkcpIHsKIAkJCQlkcHJpbnRrKERCR0xWTF9GVywgIiVzKCkgZXJyX2ZsYWdzMiA9ICV4XG4iLAogCQkJCQlfX2Z1bmNfXywgZXJyX2ZsYWdzKTsKLQkJCQltc2xlZXAoMTApOworCQkJCW1zbGVlcCgxMCk7IC8qIENoZWNrcGF0Y2ggdGhyb3dzIGEgPCAyMG1zIHdhcm5pbmcgKi8KIAogCQkJCWlmIChlcnJfZmxhZ3MgJiBTQUFfREVWSUNFX0lNQUdFX0NPUlJVUFQpIHsKIAkJCQkJcHJpbnRrKEtFUk5fRVJSCkBAIC0zNjUsNyArMzY1LDcgQEAKIAogCQkJZmlyc3RfdGltZW91dCA9IFNBQV9ERVZJQ0VfVElNRU9VVDsKIAkJCXdoaWxlIChmaXJzdF90aW1lb3V0KSB7Ci0JCQkJbXNsZWVwKDEwKTsKKwkJCQltc2xlZXAoMTApOyAvKiBDaGVja3BhdGNoIHRocm93cyBhIDwgMjBtcyB3YXJuaW5nICovCiAKIAkJCQl2ZXJzaW9uID0KIAkJCQkJc2FhNzE2NF9nZXRjdXJyZW50ZmlybXdhcmV2ZXJzaW9uKGRldik7CkBAIC02MDgsOCArNjA4LDYgQEAKIAlyZXQgPSAwOwogCiBvdXQ6Ci0JaWYgKGZ3KQotCQlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKLQorCXJlbGVhc2VfZmlybXdhcmUoZncpOwogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC1pMmMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9zYWE3MTY0LWkyYy5jCmluZGV4IGI1MTY3ZDMuLjI2MTQ4ZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9zYWE3MTY0LWkyYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9zYWE3MTY0LWkyYy5jCkBAIC0yMyw3ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSAic2FhNzE2NC5oIgogCkBAIC02NSw3ICs2NSw3IEBACiAJfQogCXJldHVybiBudW07CiAKLSBlcnI6CitlcnI6CiAJcmV0dXJuIHJldHZhbDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTY0L3NhYTcxNjQtdmJpLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC12YmkuYwppbmRleCAzMjNjN2NkLi44YWJiZTZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC12YmkuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC12YmkuYwpAQCAtNTEsMTEgKzUxLDE1IEBACiAJLyogU2V0IHVwIHRoZSBESUYgKGVuYWJsZSBpdCkgZm9yIGFuYWxvZyBtb2RlIGJ5IGRlZmF1bHQgKi8KIAlzYWE3MTY0X2FwaV9pbml0aWFsaXplX2RpZihwb3J0KTsKIAotLy8JLyogQ29uZmlndXJlIHRoZSBjb3JyZWN0IHZpZGVvIHN0YW5kYXJkICovCi0vLwlzYWE3MTY0X2FwaV9jb25maWd1cmVfZGlmKHBvcnQsIHBvcnQtPmVuY29kZXJub3JtLmlkKTsKKwkvKiBDb25maWd1cmUgdGhlIGNvcnJlY3QgdmlkZW8gc3RhbmRhcmQgKi8KKyNpZiAwCisJc2FhNzE2NF9hcGlfY29uZmlndXJlX2RpZihwb3J0LCBwb3J0LT5lbmNvZGVybm9ybS5pZCk7CisjZW5kaWYKIAotLy8JLyogRW5zdXJlIHRoZSBhdWRpbyBkZWNvZGVyIGlzIGNvcnJlY3QgY29uZmlndXJlZCAqLwotLy8Jc2FhNzE2NF9hcGlfc2V0X2F1ZGlvX3N0ZChwb3J0KTsKKyNpZiAwCisJLyogRW5zdXJlIHRoZSBhdWRpbyBkZWNvZGVyIGlzIGNvcnJlY3QgY29uZmlndXJlZCAqLworCXNhYTcxNjRfYXBpX3NldF9hdWRpb19zdGQocG9ydCk7CisjZW5kaWYKIAlkcHJpbnRrKERCR0xWTF9WQkksICIlcygpIGVuZHNcbiIsIF9fZnVuY19fKTsKIH0KIApAQCAtOTE5LDggKzkyMywxMCBAQAogCXNhYTcxNjRfdmJpX2J1ZmZlcnNfYWxsb2MocG9ydCk7CiAKIAkvKiBDb25maWd1cmUgdGhlIGVuY29kZXIgd2l0aCBhbnkgY2FjaGUgdmFsdWVzICovCi0vLwlzYWE3MTY0X2FwaV9zZXRfZW5jb2Rlcihwb3J0KTsKLS8vCXNhYTcxNjRfYXBpX2dldF9lbmNvZGVyKHBvcnQpOworI2lmIDAKKwlzYWE3MTY0X2FwaV9zZXRfZW5jb2Rlcihwb3J0KTsKKwlzYWE3MTY0X2FwaV9nZXRfZW5jb2Rlcihwb3J0KTsKKyNlbmRpZgogCiAJLyogUGxhY2UgdGhlIGVtcHR5IGJ1ZmZlcnMgb24gdGhlIGhhcmR3YXJlICovCiAJc2FhNzE2NF9idWZmZXJfY2ZnX3BvcnQocG9ydCk7CkBAIC0xMDYwLDcgKzEwNjYsOCBAQAogCQlpZiAoY3JjX2NoZWNraW5nKSB7CiAJCQljcmMgPSBjcmMzMigwLCB1YnVmLT5kYXRhLCB1YnVmLT5hY3R1YWxfc2l6ZSk7CiAJCQlpZiAoY3JjICE9IHVidWYtPmNyYykgewotCQkJCXByaW50ayhLRVJOX0VSUiAiJXMoKSB1YnVmICVwIGNyYyBiZWNhbWUgaW52YWxpZCwgd2FzIDB4JXggYmVjYW1lIDB4JXhcbiIsIF9fZnVuY19fLAorCQkJCXByaW50ayhLRVJOX0VSUiAiJXMoKSB1YnVmICVwIGNyYyBiZWNhbWUgaW52YWxpZCwgd2FzIDB4JXggYmVjYW1lIDB4JXhcbiIsCisJCQkJCV9fZnVuY19fLAogCQkJCQl1YnVmLCB1YnVmLT5jcmMsIGNyYyk7CiAJCQl9CiAJCX0KQEAgLTExNDgsOSArMTE1NSw4IEBACiAJCWJ1ZmZlciArPSBjbnQ7CiAJCXJldCArPSBjbnQ7CiAKLQkJaWYgKHVidWYtPnBvcyA+IHVidWYtPmFjdHVhbF9zaXplKSB7CisJCWlmICh1YnVmLT5wb3MgPiB1YnVmLT5hY3R1YWxfc2l6ZSkKIAkJCXByaW50ayhLRVJOX0VSUiAicmVhZCgpIHBvcyA+IGFjdHVhbCwgaHVoP1xuIik7Ci0JCX0KIAogCQlpZiAodWJ1Zi0+cG9zID09IHVidWYtPmFjdHVhbF9zaXplKSB7CiAKQEAgLTExOTcsOSArMTIwMyw4IEBACiAJc2FhNzE2NF9oaXN0b2dyYW1fdXBkYXRlKCZwb3J0LT5wb2xsX2ludGVydmFsLAogCQlwb3J0LT5sYXN0X3BvbGxfbXNlY3NfZGlmZik7CiAKLQlpZiAoIXZpZGVvX2lzX3JlZ2lzdGVyZWQocG9ydC0+djRsX2RldmljZSkpIHsKKwlpZiAoIXZpZGVvX2lzX3JlZ2lzdGVyZWQocG9ydC0+djRsX2RldmljZSkpCiAJCXJldHVybiAtRUlPOwotCX0KIAogCWlmIChhdG9taWNfY21weGNoZygmZmgtPnY0bF9yZWFkaW5nLCAwLCAxKSA9PSAwKSB7CiAJCWlmIChhdG9taWNfaW5jX3JldHVybigmcG9ydC0+djRsX3JlYWRlcl9jb3VudCkgPT0gMSkgewpAQCAtMTI1NywxMCArMTI2MiwxNCBAQAogCS52aWRpb2NfdHJ5X2V4dF9jdHJscwkgPSB2aWRpb2NfdHJ5X2V4dF9jdHJscywKIAkudmlkaW9jX2xvZ19zdGF0dXMJID0gdmlkaW9jX2xvZ19zdGF0dXMsCiAJLnZpZGlvY19xdWVyeWN0cmwJID0gdmlkaW9jX3F1ZXJ5Y3RybCwKLS8vCS52aWRpb2NfZ19jaGlwX2lkZW50CSA9IHNhYTcxNjRfZ19jaGlwX2lkZW50LAorI2lmIDAKKwkudmlkaW9jX2dfY2hpcF9pZGVudAkgPSBzYWE3MTY0X2dfY2hpcF9pZGVudCwKKyNlbmRpZgogI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKLS8vCS52aWRpb2NfZ19yZWdpc3RlcgkgPSBzYWE3MTY0X2dfcmVnaXN0ZXIsCi0vLwkudmlkaW9jX3NfcmVnaXN0ZXIJID0gc2FhNzE2NF9zX3JlZ2lzdGVyLAorI2lmIDAKKwkudmlkaW9jX2dfcmVnaXN0ZXIJID0gc2FhNzE2NF9nX3JlZ2lzdGVyLAorCS52aWRpb2Nfc19yZWdpc3RlcgkgPSBzYWE3MTY0X3NfcmVnaXN0ZXIsCisjZW5kaWYKICNlbmRpZgogCS52aWRpb2NfZ19mbXRfdmJpX2NhcAkgPSBzYWE3MTY0X3ZiaV9mbXQsCiAJLnZpZGlvY190cnlfZm10X3ZiaV9jYXAJID0gc2FhNzE2NF92YmlfZm10LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTY0L3NhYTcxNjQuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9zYWE3MTY0LmgKaW5kZXggMDQxYWU4ZS4uMTY3NDVkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTY0L3NhYTcxNjQuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC5oCkBAIC0xMTMsNyArMTEzLDggQEAKICNkZWZpbmUgREJHTFZMX1RIUiA0MDk2CiAjZGVmaW5lIERCR0xWTF9DUFUgODE5MgogCi0jZGVmaW5lIFNBQTcxNjRfTk9STVMgKFY0TDJfU1REX05UU0NfTSB8ICBWNEwyX1NURF9OVFNDX01fSlAgfCAgVjRMMl9TVERfTlRTQ180NDMpCisjZGVmaW5lIFNBQTcxNjRfTk9STVMgXAorCShWNEwyX1NURF9OVFNDX00gfCAgVjRMMl9TVERfTlRTQ19NX0pQIHwgIFY0TDJfU1REX05UU0NfNDQzKQogCiBlbnVtIHBvcnRfdCB7CiAJU0FBNzE2NF9NUEVHX1VOREVGSU5FRCA9IDAsCkBAIC0xODIsMTUgKzE4MywxMSBAQAogCiBzdHJ1Y3Qgc2FhNzE2NF9lbmNvZGVyX2ZoIHsKIAlzdHJ1Y3Qgc2FhNzE2NF9wb3J0ICpwb3J0OwotLy8JdTMyIGZyZXE7Ci0vLwl1MzIgdHVuZXJfdHlwZTsKIAlhdG9taWNfdCB2NGxfcmVhZGluZzsKIH07CiAKIHN0cnVjdCBzYWE3MTY0X3ZiaV9maCB7CiAJc3RydWN0IHNhYTcxNjRfcG9ydCAqcG9ydDsKLS8vCXUzMiBmcmVxOwotLy8JdTMyIHR1bmVyX3R5cGU7CiAJYXRvbWljX3QgdjRsX3JlYWRpbmc7CiB9OwogCkBAIC0yNjUsOCArMjYyLDYgQEAKIHN0cnVjdCBzYWE3MTY0X3R2bm9ybSB7CiAJY2hhcgkJKm5hbWU7CiAJdjRsMl9zdGRfaWQJaWQ7Ci0vLwl1MzIJCWN4aWZvcm1hdDsKLS8vCXUzMgkJY3hvZm9ybWF0OwogfTsKIAogc3RydWN0IHNhYTcxNjRfZW5jb2Rlcl9wYXJhbXMgewpAQCAtNDQ3LDcgKzQ0Miw3IEBACiAJaW50CW5yOwogCWludAlod3JldmlzaW9uOwogCXUzMglib2FyZDsKLQljaGFyCW5hbWVbMzJdOworCWNoYXIJbmFtZVsxNl07CiAKIAkvKiBmaXJtd2FyZSBzdGF0dXMgKi8KIAlzdHJ1Y3Qgc2FhNzE2NF9md19zdGF0dXMJZndfc3RhdHVzOwpAQCAtNTEwLDcgKzUwNSw4IEBACiAvKiBzYWE3MTY0LWJ1cy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogaW50IHNhYTcxNjRfYnVzX3NldHVwKHN0cnVjdCBzYWE3MTY0X2RldiAqZGV2KTsKIHZvaWQgc2FhNzE2NF9idXNfZHVtcChzdHJ1Y3Qgc2FhNzE2NF9kZXYgKmRldik7Ci1pbnQgc2FhNzE2NF9idXNfc2V0KHN0cnVjdCBzYWE3MTY0X2RldiAqZGV2LCBzdHJ1Y3QgdG1Db21SZXNJbmZvKiBtc2csIHZvaWQgKmJ1Zik7CitpbnQgc2FhNzE2NF9idXNfc2V0KHN0cnVjdCBzYWE3MTY0X2RldiAqZGV2LCBzdHJ1Y3QgdG1Db21SZXNJbmZvKiBtc2csCisJdm9pZCAqYnVmKTsKIGludCBzYWE3MTY0X2J1c19nZXQoc3RydWN0IHNhYTcxNjRfZGV2ICpkZXYsIHN0cnVjdCB0bUNvbVJlc0luZm8qIG1zZywKIAl2b2lkICpidWYsIGludCBwZWVrb25seSk7CiAKQEAgLTU1Miw3ICs1NDgsOCBAQAogaW50IHNhYTcxNjRfYXBpX3NldF92YmlfZm9ybWF0KHN0cnVjdCBzYWE3MTY0X3BvcnQgKnBvcnQpOwogaW50IHNhYTcxNjRfYXBpX3NldF9kZWJ1ZyhzdHJ1Y3Qgc2FhNzE2NF9kZXYgKmRldiwgdTggbGV2ZWwpOwogaW50IHNhYTcxNjRfYXBpX2NvbGxlY3RfZGVidWcoc3RydWN0IHNhYTcxNjRfZGV2ICpkZXYpOwotaW50IHNhYTcxNjRfYXBpX2dldF9sb2FkX2luZm8oc3RydWN0IHNhYTcxNjRfZGV2ICpkZXYsIHN0cnVjdCB0bUZ3SW5mb1N0cnVjdCAqaSk7CitpbnQgc2FhNzE2NF9hcGlfZ2V0X2xvYWRfaW5mbyhzdHJ1Y3Qgc2FhNzE2NF9kZXYgKmRldiwKKwlzdHJ1Y3QgdG1Gd0luZm9TdHJ1Y3QgKmkpOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogc2FhNzE2NC1jYXJkcy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2U0MDEuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2U0MDEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmY3ZDJlOS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NlNDAxLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMzYgKzAsMCBAQAotCi0jaWZuZGVmIF9fTElOVVhfc2U0MDFfSAotI2RlZmluZSBfX0xJTlVYX3NlNDAxX0gKLQotI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgotI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Ci0KLSNkZWZpbmUgc2U0MDFfREVCVUcJLyogVHVybiBvbiBkZWJ1ZyBtZXNzYWdlcyAqLwotCi0jaWZkZWYgc2U0MDFfREVCVUcKLSMgIGRlZmluZSBQREVCVUcobGV2ZWwsIGZtdCwgYXJncy4uLikgXAotaWYgKGRlYnVnID49IGxldmVsKSBcCi0JaW5mbygiWyIgX19QUkVUVFlfRlVOQ1RJT05fXyAiOiVkXSAiIGZtdCwgX19MSU5FX18gLCAjIyBhcmdzKQotI2Vsc2UKLSMgIGRlZmluZSBQREVCVUcobGV2ZWwsIGZtdCwgYXJncy4uLikgZG8ge30gd2hpbGUgKDApCi0jZW5kaWYKLQotLyogQW4gYWxtb3N0IGRyb3AtaW4gcmVwbGFjZW1lbnQgZm9yIHNsZWVwX29uX2ludGVycnVwdGlibGUgKi8KLSNkZWZpbmUgd2FpdF9pbnRlcnJ1cHRpYmxlKHRlc3QsIHF1ZXVlLCB3YWl0KSBcCi17IFwKLQlhZGRfd2FpdF9xdWV1ZShxdWV1ZSwgd2FpdCk7IFwKLQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOyBcCi0JaWYgKHRlc3QpIFwKLQkJc2NoZWR1bGUoKTsgXAotCXJlbW92ZV93YWl0X3F1ZXVlKHF1ZXVlLCB3YWl0KTsgXAotCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7IFwKLQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIFwKLQkJYnJlYWs7IFwKLX0KLQotI2RlZmluZSBTRTQwMV9SRVFfR0VUX0NBTUVSQV9ERVNDUklQVE9SCQkweDA2Ci0jZGVmaW5lIFNFNDAxX1JFUV9TVEFSVF9DT05USU5VT1VTX0NBUFRVUkUJMHg0MQotI2RlZmluZSBTRTQwMV9SRVFfU1RPUF9DT05USU5VT1VTX0NBUFRVUkUJMHg0MgotI2RlZmluZSBTRTQwMV9SRVFfQ0FQVFVSRV9GUkFNRQkJCTB4NDMKLSNkZWZpbmUgU0U0MDFfUkVRX0dFVF9CUlQJCQkweDQ0Ci0jZGVmaW5lIFNFNDAxX1JFUV9TRVRfQlJUCQkJMHg0NQotI2RlZmluZSBTRTQwMV9SRVFfR0VUX1dJRFRICQkJMHg0YwotI2RlZmluZSBTRTQwMV9SRVFfU0VUX1dJRFRICQkJMHg0ZAotI2RlZmluZSBTRTQwMV9SRVFfR0VUX0hFSUdIVAkJCTB4NGUKLSNkZWZpbmUgU0U0MDFfUkVRX1NFVF9IRUlHSFQJCQkweDRmCi0jZGVmaW5lIFNFNDAxX1JFUV9HRVRfT1VUUFVUX01PREUJCTB4NTAKLSNkZWZpbmUgU0U0MDFfUkVRX1NFVF9PVVRQVVRfTU9ERQkJMHg1MQotI2RlZmluZSBTRTQwMV9SRVFfR0VUX0VYVF9GRUFUVVJFCQkweDUyCi0jZGVmaW5lIFNFNDAxX1JFUV9TRVRfRVhUX0ZFQVRVUkUJCTB4NTMKLSNkZWZpbmUgU0U0MDFfUkVRX0NBTUVSQV9QT1dFUgkJCTB4NTYKLSNkZWZpbmUgU0U0MDFfUkVRX0xFRF9DT05UUk9MCQkJMHg1NwotI2RlZmluZSBTRTQwMV9SRVFfQklPUwkJCQkweGZmCi0KLSNkZWZpbmUgU0U0MDFfQklPU19SRUFECQkJCTB4MDcKLQotI2RlZmluZSBTRTQwMV9GT1JNQVRfQkFZRVIJMHg0MAotCi0vKiBIeXVuZGFpIGh2NzEzMWIgcmVnaXN0ZXJzCi0gICA3MTIxIGFuZCA3MTQxIHNob3VsZCBiZSB0aGUgc2FtZSAoaGF2ZW4ndCByZWFsbHkgY2hlY2tlZC4uLikgKi8KLS8qIE1vZGUgcmVnaXN0ZXJzOiAqLwotI2RlZmluZSBIVjcxMzFfUkVHX01PREVfQQkJMHgwMAotI2RlZmluZSBIVjcxMzFfUkVHX01PREVfQgkJMHgwMQotI2RlZmluZSBIVjcxMzFfUkVHX01PREVfQwkJMHgwMgotLyogRnJhbWUgcmVnaXN0ZXJzOiAqLwotI2RlZmluZSBIVjcxMzFfUkVHX0ZSU1UJCTB4MTAKLSNkZWZpbmUgSFY3MTMxX1JFR19GUlNMCQkweDExCi0jZGVmaW5lIEhWNzEzMV9SRUdfRkNTVQkJMHgxMgotI2RlZmluZSBIVjcxMzFfUkVHX0ZDU0wJCTB4MTMKLSNkZWZpbmUgSFY3MTMxX1JFR19GV0hVCQkweDE0Ci0jZGVmaW5lIEhWNzEzMV9SRUdfRldITAkJMHgxNQotI2RlZmluZSBIVjcxMzFfUkVHX0ZXV1UJCTB4MTYKLSNkZWZpbmUgSFY3MTMxX1JFR19GV1dMCQkweDE3Ci0vKiBUaW1pbmcgcmVnaXN0ZXJzOiAqLwotI2RlZmluZSBIVjcxMzFfUkVHX1RIQlUJCTB4MjAKLSNkZWZpbmUgSFY3MTMxX1JFR19USEJMCQkweDIxCi0jZGVmaW5lIEhWNzEzMV9SRUdfVFZCVQkJMHgyMgotI2RlZmluZSBIVjcxMzFfUkVHX1RWQkwJCTB4MjMKLSNkZWZpbmUgSFY3MTMxX1JFR19USVRVCQkweDI1Ci0jZGVmaW5lIEhWNzEzMV9SRUdfVElUTQkJMHgyNgotI2RlZmluZSBIVjcxMzFfUkVHX1RJVEwJCTB4MjcKLSNkZWZpbmUgSFY3MTMxX1JFR19UTUNECQkweDI4Ci0vKiBBZGp1c3QgUmVnaXN0ZXJzOiAqLwotI2RlZmluZSBIVjcxMzFfUkVHX0FSTFYJCTB4MzAKLSNkZWZpbmUgSFY3MTMxX1JFR19BUkNHCQkweDMxCi0jZGVmaW5lIEhWNzEzMV9SRUdfQUdDRwkJMHgzMgotI2RlZmluZSBIVjcxMzFfUkVHX0FCQ0cJCTB4MzMKLSNkZWZpbmUgSFY3MTMxX1JFR19BUEJWCQkweDM0Ci0jZGVmaW5lIEhWNzEzMV9SRUdfQVNMUAkJMHg1NAotLyogT2Zmc2V0IFJlZ2lzdGVyczogKi8KLSNkZWZpbmUgSFY3MTMxX1JFR19PRlNSCQkweDUwCi0jZGVmaW5lIEhWNzEzMV9SRUdfT0ZTRwkJMHg1MQotI2RlZmluZSBIVjcxMzFfUkVHX09GU0IJCTB4NTIKLS8qIFJFc2V0IGxldmVsIHN0YXRpc3RpY3MgcmVnaXN0ZXJzOiAqLwotI2RlZmluZSBIVjcxMzFfUkVHX0xPUkVGTk9ICTB4NTcKLSNkZWZpbmUgSFY3MTMxX1JFR19MT1JFRk5PTAkweDU4Ci0jZGVmaW5lIEhWNzEzMV9SRUdfSElSRUZOT0gJMHg1OQotI2RlZmluZSBIVjcxMzFfUkVHX0hJUkVGTk9MCTB4NWEKLQotLyogc2U0MDEgcmVnaXN0ZXJzICovCi0jZGVmaW5lIFNFNDAxX09QRVJBVElOR01PREUJMHgyMDAwCi0KLQotLyogc2l6ZSBvZiB1c2IgdHJhbnNmZXJzICovCi0jZGVmaW5lIFNFNDAxX1BBQ0tFVFNJWkUJNDA5NgotLyogbnVtYmVyIG9mIHF1ZXVlZCBidWxrIHRyYW5zZmVycyB0byB1c2UsIHNob3VsZCBiZSBhYm91dCA4ICovCi0jZGVmaW5lIFNFNDAxX05VTVNCVUYJCTEKLS8qIHJlYWQgdGhlIHVzYiBzcGVjcyBmb3IgdGhpcyBvbmUgOikgKi8KLSNkZWZpbmUgU0U0MDFfVklERU9fRU5EUE9JTlQJMQotI2RlZmluZSBTRTQwMV9CVVRUT05fRU5EUE9JTlQJMgotLyogbnVtYmVyIG9mIGZyYW1lcyBzdXBwb3J0ZWQgYnkgdGhlIHY0bCBwYXJ0ICovCi0jZGVmaW5lIFNFNDAxX05VTUZSQU1FUwkJMgotLyogc2NyYXRjaCBidWZmZXJzIGZvciBwYXNzaW5nIGRhdGEgdG8gdGhlIGRlY29kZXJzICovCi0jZGVmaW5lIFNFNDAxX05VTVNDUkFUQ0gJMzIKLS8qIG1heGltdW0gYW1vdW50IG9mIGRhdGEgaW4gYSBKYW5nR3UgcGFja2V0ICovCi0jZGVmaW5lIFNFNDAxX1ZMQ0RBVEFMRU4JMTAyNAotLyogbnVtYmVyIG9mIG51bCBzaXplZCBwYWNrZXRzIHRvIHJlY2VpdmUgYmVmb3JlIGtpY2tpbmcgdGhlIGNhbWVyYSAqLwotI2RlZmluZSBTRTQwMV9NQVhfTlVMTFBBQ0tFVFMJNDAwMAotLyogbnVtYmVyIG9mIGRlY29kaW5nIGVycm9ycyBiZWZvcmUga2lja2luZyB0aGUgY2FtZXJhICovCi0jZGVmaW5lIFNFNDAxX01BWF9FUlJPUlMJMjAwCi0KLXN0cnVjdCB1c2JfZGV2aWNlOwotCi1zdHJ1Y3Qgc2U0MDFfc2J1ZiB7Ci0JdW5zaWduZWQgY2hhciAqZGF0YTsKLX07Ci0KLWVudW0gewotCUZSQU1FX1VOVVNFRCwJCS8qIFVudXNlZCAobm8gTUNBUFRVUkUpICovCi0JRlJBTUVfUkVBRFksCQkvKiBSZWFkeSB0byBzdGFydCBncmFiYmluZyAqLwotCUZSQU1FX0dSQUJCSU5HLAkJLyogSW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgZ3JhYmJlZCBpbnRvICovCi0JRlJBTUVfRE9ORSwJCS8qIEZpbmlzaGVkIGdyYWJiaW5nLCBidXQgbm90IGJlZW4gc3luY2VkIHlldCAqLwotCUZSQU1FX0VSUk9SLAkJLyogU29tZXRoaW5nIGJhZCBoYXBwZW5lZCB3aGlsZSBwcm9jZXNzaW5nICovCi19OwotCi1lbnVtIHsKLQlGTVRfQkFZRVIsCi0JRk1UX0pBTkdHVSwKLX07Ci0KLWVudW0gewotCUJVRkZFUl9VTlVTRUQsCi0JQlVGRkVSX1JFQURZLAotCUJVRkZFUl9CVVNZLAotCUJVRkZFUl9ET05FLAotfTsKLQotc3RydWN0IHNlNDAxX3NjcmF0Y2ggewotCXVuc2lnbmVkIGNoYXIgKmRhdGE7Ci0Jdm9sYXRpbGUgaW50IHN0YXRlOwotCWludCBvZmZzZXQ7Ci0JaW50IGxlbmd0aDsKLX07Ci0KLXN0cnVjdCBzZTQwMV9mcmFtZSB7Ci0JdW5zaWduZWQgY2hhciAqZGF0YTsJCS8qIEZyYW1lIGJ1ZmZlciAqLwotCi0Jdm9sYXRpbGUgaW50IGdyYWJzdGF0ZTsJLyogU3RhdGUgb2YgZ3JhYmJpbmcgKi8KLQotCXVuc2lnbmVkIGNoYXIgKmN1cmxpbmU7Ci0JaW50IGN1cmxpbmVwaXg7Ci0JaW50IGN1cnBpeDsKLX07Ci0KLXN0cnVjdCB1c2Jfc2U0MDEgewotCXN0cnVjdCB2aWRlb19kZXZpY2UgdmRldjsKLQotCS8qIERldmljZSBzdHJ1Y3R1cmUgKi8KLQlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2OwotCi0JdW5zaWduZWQgY2hhciBpZmFjZTsKLQotCWNoYXIgKmNhbWVyYV9uYW1lOwotCi0JaW50IGNoYW5nZTsKLQlpbnQgYnJpZ2h0bmVzczsKLQlpbnQgaHVlOwotCWludCByZ2FpbjsKLQlpbnQgZ2dhaW47Ci0JaW50IGJnYWluOwotCWludCBleHBvc2VfaDsKLQlpbnQgZXhwb3NlX207Ci0JaW50IGV4cG9zZV9sOwotCWludCByZXNldGxldmVsOwotCi0JaW50IGVuaGFuY2U7Ci0KLQlpbnQgZm9ybWF0OwotCWludCBzaXplczsKLQlpbnQgKndpZHRoOwotCWludCAqaGVpZ2h0OwotCWludCBjd2lkdGg7CQkvKiBjdXJyZW50IHdpZHRoICovCi0JaW50IGNoZWlnaHQ7CQkvKiBjdXJyZW50IGhlaWdodCAqLwotCWludCBwYWxldHRlOwotCWludCBtYXhmcmFtZXNpemU7Ci0JaW50IGNmcmFtZXNpemU7CQkvKiBjdXJyZW50IGZyYW1lc2l6ZSAqLwotCi0Jc3RydWN0IG11dGV4IGxvY2s7Ci0JaW50IHVzZXI7CQkvKiB1c2VyIGNvdW50IGZvciBleGNsdXNpdmUgdXNlICovCi0JaW50IHJlbW92ZWQ7CQkvKiBkZXZpY2UgZGlzY29ubmVjdGVkICovCi0KLQlpbnQgc3RyZWFtaW5nOwkJLyogQXJlIHdlIHN0cmVhbWluZyB2aWRlbz8gKi8KLQotCWNoYXIgKmZidWY7CQkvKiBWaWRlb2RldiBidWZmZXIgYXJlYSAqLwotCi0Jc3RydWN0IHVyYiAqdXJiW1NFNDAxX05VTVNCVUZdOwotCXN0cnVjdCB1cmIgKmludHVyYjsKLQotCWludCBidXR0b247Ci0JaW50IGJ1dHRvbnByZXNzZWQ7Ci0KLQlpbnQgY3VyZnJhbWU7CQkvKiBDdXJyZW50IHJlY2VpdmluZyBmcmFtZSAqLwotCXN0cnVjdCBzZTQwMV9mcmFtZSBmcmFtZVtTRTQwMV9OVU1GUkFNRVNdOwotCWludCByZWFkY291bnQ7Ci0JaW50IGZyYW1lY291bnQ7Ci0JaW50IGVycm9yOwotCWludCBkcm9wcGVkOwotCi0JaW50IHNjcmF0Y2hfbmV4dDsKLQlpbnQgc2NyYXRjaF91c2U7Ci0JaW50IHNjcmF0Y2hfb3ZlcmZsb3c7Ci0Jc3RydWN0IHNlNDAxX3NjcmF0Y2ggc2NyYXRjaFtTRTQwMV9OVU1TQ1JBVENIXTsKLQotCS8qIERlY29kZXIgc3BlY2lmaWMgZGF0YTogKi8KLQl1bnNpZ25lZCBjaGFyIHZsY2RhdGFbU0U0MDFfVkxDREFUQUxFTl07Ci0JaW50IHZsY2RhdGFwb3M7Ci0JaW50IGJheWVyb2Zmc2V0OwotCi0Jc3RydWN0IHNlNDAxX3NidWYgc2J1ZltTRTQwMV9OVU1TQlVGXTsKLQotCXdhaXRfcXVldWVfaGVhZF90IHdxOwkvKiBQcm9jZXNzZXMgd2FpdGluZyAqLwotCi0JaW50IG51bGxwYWNrZXRzOwotfTsKLQotCi0KLSNlbmRpZgotCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NoX21vYmlsZV9jZXVfY2FtZXJhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NoX21vYmlsZV9jZXVfY2FtZXJhLmMKaW5kZXggMjQ4NjUyMC4uOTU0MjIyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zaF9tb2JpbGVfY2V1X2NhbWVyYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2hfbW9iaWxlX2NldV9jYW1lcmEuYwpAQCAtMTc4Niw3ICsxNzg2LDcgQEAKIAkJCQkgICAgICAgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFLAogCQkJCSAgICAgICBwY2Rldi0+ZmllbGQsCiAJCQkJICAgICAgIHNpemVvZihzdHJ1Y3Qgc2hfbW9iaWxlX2NldV9idWZmZXIpLAotCQkJCSAgICAgICBpY2QsIE5VTEwpOworCQkJCSAgICAgICBpY2QsICZpY2QtPnZpZGVvX2xvY2spOwogfQogCiBzdGF0aWMgaW50IHNoX21vYmlsZV9jZXVfZ2V0X2N0cmwoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9jb3JlLmMKaW5kZXggZjQ5ZmJmYi4uODQ5ODRmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX2NvcmUuYwpAQCAtMjE4OSw2ICsyMTg5LDcgQEAKIAltZW1zZXQoJmksIDAsIHNpemVvZihpKSk7CiAJc3RyY3B5KGkubmFtZSwgIkNhbWVyYSIpOwogCWkudHlwZSA9IFY0TDJfSU5QVVRfVFlQRV9DQU1FUkE7CisJaS5jYXBhYmlsaXRpZXMgPSBWNEwyX0lOX0NBUF9TVEQ7CiAKIAlpZiAoY29weV90b191c2VyKGFyZywgJmksIHNpemVvZihpKSkpCiAJCXJldHVybiAtRUZBVUxUOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfZGV2dGFibGUuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX2RldnRhYmxlLmgKaW5kZXggY2NmYTU5Yy4uNDEwNjRjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfZGV2dGFibGUuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9kZXZ0YWJsZS5oCkBAIC00Myw5ICs0Myw3IEBACiAjaWYgIWRlZmluZWQgQ09ORklHX1VTQl9HU1BDQV9TT05JWEIgJiYgIWRlZmluZWQgQ09ORklHX1VTQl9HU1BDQV9TT05JWEJfTU9EVUxFCiAJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMDEsIEJSSURHRV9TTjlDMTAyKSwgfSwKIAl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjAwNSwgQlJJREdFX1NOOUMxMDIpLCB9LAotI2VuZGlmCiAJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMDcsIEJSSURHRV9TTjlDMTAyKSwgfSwKLSNpZiAhZGVmaW5lZCBDT05GSUdfVVNCX0dTUENBX1NPTklYQiAmJiAhZGVmaW5lZCBDT05GSUdfVVNCX0dTUENBX1NPTklYQl9NT0RVTEUKIAl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjAwOSwgQlJJREdFX1NOOUMxMDIpLCB9LAogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MDBkLCBCUklER0VfU045QzEwMiksIH0sCiAvKgl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjAxMSwgQlJJREdFX1NOOUMxMDIpLCB9LCBPVjY2NTAgKi8KQEAgLTU2LDggKzU0LDggQEAKICNpZiAhZGVmaW5lZCBDT05GSUdfVVNCX0dTUENBX1NPTklYQiAmJiAhZGVmaW5lZCBDT05GSUdfVVNCX0dTUENBX1NPTklYQl9NT0RVTEUKIAl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjAyOCwgQlJJREdFX1NOOUMxMDIpLCB9LAogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MDI5LCBCUklER0VfU045QzEwMiksIH0sCi0jZW5kaWYKIAl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjAyYSwgQlJJREdFX1NOOUMxMDIpLCB9LAorI2VuZGlmCiAJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMmIsIEJSSURHRV9TTjlDMTAyKSwgfSwKICNpZiAhZGVmaW5lZCBDT05GSUdfVVNCX0dTUENBX1NPTklYQiAmJiAhZGVmaW5lZCBDT05GSUdfVVNCX0dTUENBX1NPTklYQl9NT0RVTEUKIAl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjAyYywgQlJJREdFX1NOOUMxMDIpLCB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfY2FtZXJhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NvY19jYW1lcmEuYwppbmRleCAwNTJiZDZkLi5hNjY4MTFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NvY19jYW1lcmEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NvY19jYW1lcmEuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CkBAIC00Myw2ICs0NCw1MSBAQAogc3RhdGljIExJU1RfSEVBRChkZXZpY2VzKTsKIHN0YXRpYyBERUZJTkVfTVVURVgobGlzdF9sb2NrKTsJCS8qIFByb3RlY3RzIHRoZSBsaXN0IG9mIGhvc3RzICovCiAKK3N0YXRpYyBpbnQgc29jX2NhbWVyYV9wb3dlcl9zZXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCQkJc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsLAorCQkJCWludCBwb3dlcl9vbikKK3sKKwlpbnQgcmV0OworCisJaWYgKHBvd2VyX29uKSB7CisJCXJldCA9IHJlZ3VsYXRvcl9idWxrX2VuYWJsZShpY2wtPm51bV9yZWd1bGF0b3JzLAorCQkJCQkgICAgaWNsLT5yZWd1bGF0b3JzKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWRldl9lcnIoJmljZC0+ZGV2LCAiQ2Fubm90IGVuYWJsZSByZWd1bGF0b3JzXG4iKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQlpZiAoaWNsLT5wb3dlcikKKwkJCXJldCA9IGljbC0+cG93ZXIoaWNkLT5wZGV2LCBwb3dlcl9vbik7CisJCWlmIChyZXQgPCAwKSB7CisJCQlkZXZfZXJyKCZpY2QtPmRldiwKKwkJCQkiUGxhdGZvcm0gZmFpbGVkIHRvIHBvd2VyLW9uIHRoZSBjYW1lcmEuXG4iKTsKKworCQkJcmVndWxhdG9yX2J1bGtfZGlzYWJsZShpY2wtPm51bV9yZWd1bGF0b3JzLAorCQkJCQkgICAgICAgaWNsLT5yZWd1bGF0b3JzKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9IGVsc2UgeworCQlyZXQgPSAwOworCQlpZiAoaWNsLT5wb3dlcikKKwkJCXJldCA9IGljbC0+cG93ZXIoaWNkLT5wZGV2LCAwKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWRldl9lcnIoJmljZC0+ZGV2LAorCQkJCSJQbGF0Zm9ybSBmYWlsZWQgdG8gcG93ZXItb2ZmIHRoZSBjYW1lcmEuXG4iKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQlyZXQgPSByZWd1bGF0b3JfYnVsa19kaXNhYmxlKGljbC0+bnVtX3JlZ3VsYXRvcnMsCisJCQkJCSAgICAgaWNsLT5yZWd1bGF0b3JzKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWRldl9lcnIoJmljZC0+ZGV2LCAiQ2Fubm90IGRpc2FibGUgcmVndWxhdG9yc1xuIik7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKIGNvbnN0IHN0cnVjdCBzb2NfY2FtZXJhX2Zvcm1hdF94bGF0ZSAqc29jX2NhbWVyYV94bGF0ZV9ieV9mb3VyY2MoCiAJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsIHVuc2lnbmVkIGludCBmb3VyY2MpCiB7CkBAIC0zNTIsMTIgKzM5OCw2IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCS8qCi0JICogUHJvdGVjdCBhZ2FpbnN0IGljZC0+b3BzLT5yZW1vdmUoKSB1bnRpbCB3ZSBtb2R1bGVfZ2V0KCkgYm90aAotCSAqIGRyaXZlcnMuCi0JICovCi0JbXV0ZXhfbG9jaygmaWNkLT52aWRlb19sb2NrKTsKLQogCWljZC0+dXNlX2NvdW50Kys7CiAKIAkvKiBOb3cgd2UgcmVhbGx5IGhhdmUgdG8gYWN0aXZhdGUgdGhlIGNhbWVyYSAqLwpAQCAtMzc1LDExICs0MTUsOSBAQAogCQkJfSwKIAkJfTsKIAotCQlpZiAoaWNsLT5wb3dlcikgewotCQkJcmV0ID0gaWNsLT5wb3dlcihpY2QtPnBkZXYsIDEpOwotCQkJaWYgKHJldCA8IDApCi0JCQkJZ290byBlcG93ZXI7Ci0JCX0KKwkJcmV0ID0gc29jX2NhbWVyYV9wb3dlcl9zZXQoaWNkLCBpY2wsIDEpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gZXBvd2VyOwogCiAJCS8qIFRoZSBjYW1lcmEgY291bGQgaGF2ZSBiZWVuIGFscmVhZHkgb24sIHRyeSB0byByZXNldCAqLwogCQlpZiAoaWNsLT5yZXNldCkKQEAgLTQxMiw4ICs0NTAsNiBAQAogCWZpbGUtPnByaXZhdGVfZGF0YSA9IGljZDsKIAlkZXZfZGJnKCZpY2QtPmRldiwgImNhbWVyYSBkZXZpY2Ugb3BlblxuIik7CiAKLQltdXRleF91bmxvY2soJmljZC0+dmlkZW9fbG9jayk7Ci0KIAlyZXR1cm4gMDsKIAogCS8qCkBAIC00MjUsMTEgKzQ2MSw5IEBACiBlcmVzdW1lOgogCWljaS0+b3BzLT5yZW1vdmUoaWNkKTsKIGVpY2lhZGQ6Ci0JaWYgKGljbC0+cG93ZXIpCi0JCWljbC0+cG93ZXIoaWNkLT5wZGV2LCAwKTsKKwlzb2NfY2FtZXJhX3Bvd2VyX3NldChpY2QsIGljbCwgMCk7CiBlcG93ZXI6CiAJaWNkLT51c2VfY291bnQtLTsKLQltdXRleF91bmxvY2soJmljZC0+dmlkZW9fbG9jayk7CiAJbW9kdWxlX3B1dChpY2ktPm9wcy0+b3duZXIpOwogCiAJcmV0dXJuIHJldDsKQEAgLTQ0MCw3ICs0NzQsNiBAQAogCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOwogCi0JbXV0ZXhfbG9jaygmaWNkLT52aWRlb19sb2NrKTsKIAlpY2QtPnVzZV9jb3VudC0tOwogCWlmICghaWNkLT51c2VfY291bnQpIHsKIAkJc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsID0gdG9fc29jX2NhbWVyYV9saW5rKGljZCk7CkBAIC00NTAsMTUgKzQ4MywxMiBAQAogCiAJCWljaS0+b3BzLT5yZW1vdmUoaWNkKTsKIAotCQlpZiAoaWNsLT5wb3dlcikKLQkJCWljbC0+cG93ZXIoaWNkLT5wZGV2LCAwKTsKKwkJc29jX2NhbWVyYV9wb3dlcl9zZXQoaWNkLCBpY2wsIDApOwogCX0KIAogCWlmIChpY2QtPnN0cmVhbWVyID09IGZpbGUpCiAJCWljZC0+c3RyZWFtZXIgPSBOVUxMOwogCi0JbXV0ZXhfdW5sb2NrKCZpY2QtPnZpZGVvX2xvY2spOwotCiAJbW9kdWxlX3B1dChpY2ktPm9wcy0+b3duZXIpOwogCiAJZGV2X2RiZygmaWNkLT5kZXYsICJjYW1lcmEgZGV2aWNlIGNsb3NlXG4iKTsKQEAgLTUxNyw3ICs1NDcsNyBAQAogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkub3BlbgkJPSBzb2NfY2FtZXJhX29wZW4sCiAJLnJlbGVhc2UJPSBzb2NfY2FtZXJhX2Nsb3NlLAotCS5pb2N0bAkJPSB2aWRlb19pb2N0bDIsCisJLnVubG9ja2VkX2lvY3RsCT0gdmlkZW9faW9jdGwyLAogCS5yZWFkCQk9IHNvY19jYW1lcmFfcmVhZCwKIAkubW1hcAkJPSBzb2NfY2FtZXJhX21tYXAsCiAJLnBvbGwJCT0gc29jX2NhbWVyYV9wb2xsLApAQCAtNTM0LDEyICs1NjQsOSBAQAogCWlmIChpY2QtPnN0cmVhbWVyICYmIGljZC0+c3RyZWFtZXIgIT0gZmlsZSkKIAkJcmV0dXJuIC1FQlVTWTsKIAotCW11dGV4X2xvY2soJmljZC0+dmJfdmlkcS52Yl9sb2NrKTsKLQogCWlmIChpY2QtPnZiX3ZpZHEuYnVmc1swXSkgewogCQlkZXZfZXJyKCZpY2QtPmRldiwgIlNfRk1UIGRlbmllZDogcXVldWUgaW5pdGlhbGlzZWRcbiIpOwotCQlyZXQgPSAtRUJVU1k7Ci0JCWdvdG8gdW5sb2NrOworCQlyZXR1cm4gLUVCVVNZOwogCX0KIAogCXJldCA9IHNvY19jYW1lcmFfc2V0X2ZtdChpY2QsIGYpOwpAQCAtNTQ3LDkgKzU3NCw2IEBACiAJaWYgKCFyZXQgJiYgIWljZC0+c3RyZWFtZXIpCiAJCWljZC0+c3RyZWFtZXIgPSBmaWxlOwogCi11bmxvY2s6Ci0JbXV0ZXhfdW5sb2NrKCZpY2QtPnZiX3ZpZHEudmJfbG9jayk7Ci0KIAlyZXR1cm4gcmV0OwogfQogCkBAIC02MjIsMTUgKzY0NiwxMSBAQAogCWlmIChpY2QtPnN0cmVhbWVyICE9IGZpbGUpCiAJCXJldHVybiAtRUJVU1k7CiAKLQltdXRleF9sb2NrKCZpY2QtPnZpZGVvX2xvY2spOwotCiAJdjRsMl9zdWJkZXZfY2FsbChzZCwgdmlkZW8sIHNfc3RyZWFtLCAxKTsKIAogCS8qIFRoaXMgY2FsbHMgYnVmX3F1ZXVlIGZyb20gaG9zdCBkcml2ZXIncyB2aWRlb2J1Zl9xdWV1ZV9vcHMgKi8KIAlyZXQgPSB2aWRlb2J1Zl9zdHJlYW1vbigmaWNkLT52Yl92aWRxKTsKIAotCW11dGV4X3VubG9jaygmaWNkLT52aWRlb19sb2NrKTsKLQogCXJldHVybiByZXQ7CiB9CiAKQEAgLTY0OCw4ICs2NjgsNiBAQAogCWlmIChpY2QtPnN0cmVhbWVyICE9IGZpbGUpCiAJCXJldHVybiAtRUJVU1k7CiAKLQltdXRleF9sb2NrKCZpY2QtPnZpZGVvX2xvY2spOwotCiAJLyoKIAkgKiBUaGlzIGNhbGxzIGJ1Zl9yZWxlYXNlIGZyb20gaG9zdCBkcml2ZXIncyB2aWRlb2J1Zl9xdWV1ZV9vcHMgZm9yIGFsbAogCSAqIHJlbWFpbmluZyBidWZmZXJzLiBXaGVuIHRoZSBsYXN0IGJ1ZmZlciBpcyBmcmVlZCwgc3RvcCBjYXB0dXJlCkBAIC02NTgsOCArNjc2LDYgQEAKIAogCXY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCBzX3N0cmVhbSwgMCk7CiAKLQltdXRleF91bmxvY2soJmljZC0+dmlkZW9fbG9jayk7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtNzQ4LDkgKzc2NCw3IEBACiAJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CiAJaW50IHJldDsKIAotCW11dGV4X2xvY2soJmljZC0+dmJfdmlkcS52Yl9sb2NrKTsKIAlyZXQgPSBpY2ktPm9wcy0+Z2V0X2Nyb3AoaWNkLCBhKTsKLQltdXRleF91bmxvY2soJmljZC0+dmJfdmlkcS52Yl9sb2NrKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC03NzUsOSArNzg5LDYgQEAKIAlkZXZfZGJnKCZpY2QtPmRldiwgIlNfQ1JPUCgldXgldUAldToldSlcbiIsCiAJCXJlY3QtPndpZHRoLCByZWN0LT5oZWlnaHQsIHJlY3QtPmxlZnQsIHJlY3QtPnRvcCk7CiAKLQkvKiBDcm9wcGluZyBpcyBhbGxvd2VkIGR1cmluZyBhIHJ1bm5pbmcgY2FwdHVyZSwgZ3VhcmQgY29uc2lzdGVuY3kgKi8KLQltdXRleF9sb2NrKCZpY2QtPnZiX3ZpZHEudmJfbG9jayk7Ci0KIAkvKiBJZiBnZXRfY3JvcCBmYWlscywgd2UnbGwgbGV0IGhvc3QgYW5kIC8gb3IgY2xpZW50IGRyaXZlcnMgZGVjaWRlICovCiAJcmV0ID0gaWNpLT5vcHMtPmdldF9jcm9wKGljZCwgJmN1cnJlbnRfY3JvcCk7CiAKQEAgLTc5NSw4ICs4MDYsNiBAQAogCQlyZXQgPSBpY2ktPm9wcy0+c2V0X2Nyb3AoaWNkLCBhKTsKIAl9CiAKLQltdXRleF91bmxvY2soJmljZC0+dmJfdmlkcS52Yl9sb2NrKTsKLQogCXJldHVybiByZXQ7CiB9CiAKQEAgLTk0MSwxNCArOTUwLDE0IEBACiAKIAlkZXZfaW5mbyhkZXYsICJQcm9iaW5nICVzXG4iLCBkZXZfbmFtZShkZXYpKTsKIAotCWlmIChpY2wtPnBvd2VyKSB7Ci0JCXJldCA9IGljbC0+cG93ZXIoaWNkLT5wZGV2LCAxKTsKLQkJaWYgKHJldCA8IDApIHsKLQkJCWRldl9lcnIoZGV2LAotCQkJCSJQbGF0Zm9ybSBmYWlsZWQgdG8gcG93ZXItb24gdGhlIGNhbWVyYS5cbiIpOwotCQkJZ290byBlcG93ZXI7Ci0JCX0KLQl9CisJcmV0ID0gcmVndWxhdG9yX2J1bGtfZ2V0KGljZC0+cGRldiwgaWNsLT5udW1fcmVndWxhdG9ycywKKwkJCQkgaWNsLT5yZWd1bGF0b3JzKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcmVnOworCisJcmV0ID0gc29jX2NhbWVyYV9wb3dlcl9zZXQoaWNkLCBpY2wsIDEpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVwb3dlcjsKIAogCS8qIFRoZSBjYW1lcmEgY291bGQgaGF2ZSBiZWVuIGFscmVhZHkgb24sIHRyeSB0byByZXNldCAqLwogCWlmIChpY2wtPnJlc2V0KQpAQCAtOTk4LDcgKzEwMDcsMTMgQEAKIAogCWljZC0+ZmllbGQgPSBWNEwyX0ZJRUxEX0FOWTsKIAotCS8qIC4uLl92aWRlb19zdGFydCgpIHdpbGwgY3JlYXRlIGEgZGV2aWNlIG5vZGUsIHNvIHdlIGhhdmUgdG8gcHJvdGVjdCAqLworCWljZC0+dmRldi0+bG9jayA9ICZpY2QtPnZpZGVvX2xvY2s7CisKKwkvKgorCSAqIC4uLl92aWRlb19zdGFydCgpIHdpbGwgY3JlYXRlIGEgZGV2aWNlIG5vZGUsIHZpZGVvX3JlZ2lzdGVyX2RldmljZSgpCisJICogaXRzZWxmIGlzIHByb3RlY3RlZCBhZ2FpbnN0IGNvbmN1cnJlbnQgb3BlbigpIGNhbGxzLCBidXQgd2UgYWxzbyBoYXZlCisJICogdG8gcHJvdGVjdCBvdXIgZGF0YS4KKwkgKi8KIAltdXRleF9sb2NrKCZpY2QtPnZpZGVvX2xvY2spOwogCiAJcmV0ID0gc29jX2NhbWVyYV92aWRlb19zdGFydChpY2QpOwpAQCAtMTAyMSw4ICsxMDM2LDcgQEAKIAogCWljaS0+b3BzLT5yZW1vdmUoaWNkKTsKIAotCWlmIChpY2wtPnBvd2VyKQotCQlpY2wtPnBvd2VyKGljZC0+cGRldiwgMCk7CisJc29jX2NhbWVyYV9wb3dlcl9zZXQoaWNkLCBpY2wsIDApOwogCiAJbXV0ZXhfdW5sb2NrKCZpY2QtPnZpZGVvX2xvY2spOwogCkBAIC0xMDQ0LDkgKzEwNTgsMTAgQEAKIGV2ZGM6CiAJaWNpLT5vcHMtPnJlbW92ZShpY2QpOwogZWFkZDoKLQlpZiAoaWNsLT5wb3dlcikKLQkJaWNsLT5wb3dlcihpY2QtPnBkZXYsIDApOworCXNvY19jYW1lcmFfcG93ZXJfc2V0KGljZCwgaWNsLCAwKTsKIGVwb3dlcjoKKwlyZWd1bGF0b3JfYnVsa19mcmVlKGljbC0+bnVtX3JlZ3VsYXRvcnMsIGljbC0+cmVndWxhdG9ycyk7CitlcmVnOgogCXJldHVybiByZXQ7CiB9CiAKQEAgLTEwNjMsMTAgKzEwNzgsOCBAQAogCUJVR19PTighZGV2LT5wYXJlbnQpOwogCiAJaWYgKHZkZXYpIHsKLQkJbXV0ZXhfbG9jaygmaWNkLT52aWRlb19sb2NrKTsKIAkJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UodmRldik7CiAJCWljZC0+dmRldiA9IE5VTEw7Ci0JCW11dGV4X3VubG9jaygmaWNkLT52aWRlb19sb2NrKTsKIAl9CiAKIAlpZiAoaWNsLT5ib2FyZF9pbmZvKSB7CkBAIC0xMDgxLDYgKzEwOTQsOCBAQAogCX0KIAlzb2NfY2FtZXJhX2ZyZWVfdXNlcl9mb3JtYXRzKGljZCk7CiAKKwlyZWd1bGF0b3JfYnVsa19mcmVlKGljbC0+bnVtX3JlZ3VsYXRvcnMsIGljbC0+cmVndWxhdG9ycyk7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zcjAzMHBjMzAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3IwMzBwYzMwLmMKaW5kZXggYzlkYzY3YS4uODY0Njk2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zcjAzMHBjMzAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NyMDMwcGMzMC5jCkBAIC03MzUsNyArNzM1LDcgQEAKIAljb25zdCBzdHJ1Y3Qgc3IwMzBwYzMwX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gaW5mby0+cGRhdGE7CiAJaW50IHJldDsKIAotCWlmIChXQVJOKHBkYXRhID09IE5VTEwsICJObyBwbGF0Zm9ybSBkYXRhISIpKQorCWlmIChXQVJOKHBkYXRhID09IE5VTEwsICJObyBwbGF0Zm9ybSBkYXRhIVxuIikpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3RrLXdlYmNhbS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zdGstd2ViY2FtLmMKaW5kZXggYjVhZmU1Zi4uZDFhMmNlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zdGstd2ViY2FtLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zdGstd2ViY2FtLmMKQEAgLTIzMCwxMjAgKzIzMCw2IEBACiAJCXJldHVybiAtMTsKIH0KIAotI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAotCi0vKiBzeXNmcyBmdW5jdGlvbnMgKi8KLS8qRklYTUUgY2xlYW51cCB0aGlzICovCi0KLXN0YXRpYyBzc2l6ZV90IHNob3dfYnJpZ2h0bmVzcyhzdHJ1Y3QgZGV2aWNlICpjbGFzcywKLQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCi17Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IHRvX3ZpZGVvX2RldmljZShjbGFzcyk7Ci0Jc3RydWN0IHN0a19jYW1lcmEgKmRldiA9IHZkZXZfdG9fY2FtZXJhKHZkZXYpOwotCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJVhcbiIsIGRldi0+dnNldHRpbmdzLmJyaWdodG5lc3MpOwotfQotCi1zdGF0aWMgc3NpemVfdCBzdG9yZV9icmlnaHRuZXNzKHN0cnVjdCBkZXZpY2UgKmNsYXNzLAotCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCi17Ci0JY2hhciAqZW5kcDsKLQl1bnNpZ25lZCBsb25nIHZhbHVlOwotCWludCByZXQ7Ci0KLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gdG9fdmlkZW9fZGV2aWNlKGNsYXNzKTsKLQlzdHJ1Y3Qgc3RrX2NhbWVyYSAqZGV2ID0gdmRldl90b19jYW1lcmEodmRldik7Ci0KLQl2YWx1ZSA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgJmVuZHAsIDE2KTsKLQotCWRldi0+dnNldHRpbmdzLmJyaWdodG5lc3MgPSAoaW50KSB2YWx1ZTsKLQotCXJldCA9IHN0a19zZW5zb3Jfc2V0X2JyaWdodG5lc3MoZGV2LCB2YWx1ZSA+PiA4KTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCWVsc2UKLQkJcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgc3NpemVfdCBzaG93X2hmbGlwKHN0cnVjdCBkZXZpY2UgKmNsYXNzLAotCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQotewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSB0b192aWRlb19kZXZpY2UoY2xhc3MpOwotCXN0cnVjdCBzdGtfY2FtZXJhICpkZXYgPSB2ZGV2X3RvX2NhbWVyYSh2ZGV2KTsKLQotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBkZXYtPnZzZXR0aW5ncy5oZmxpcCk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHN0b3JlX2hmbGlwKHN0cnVjdCBkZXZpY2UgKmNsYXNzLAotCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCi17Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IHRvX3ZpZGVvX2RldmljZShjbGFzcyk7Ci0Jc3RydWN0IHN0a19jYW1lcmEgKmRldiA9IHZkZXZfdG9fY2FtZXJhKHZkZXYpOwotCi0JaWYgKHN0cm5jbXAoYnVmLCAiMSIsIDEpID09IDApCi0JCWRldi0+dnNldHRpbmdzLmhmbGlwID0gMTsKLQllbHNlIGlmIChzdHJuY21wKGJ1ZiwgIjAiLCAxKSA9PSAwKQotCQlkZXYtPnZzZXR0aW5ncy5oZmxpcCA9IDA7Ci0JZWxzZQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXJldHVybiBzdHJsZW4oYnVmKTsKLX0KLQotc3RhdGljIHNzaXplX3Qgc2hvd192ZmxpcChzdHJ1Y3QgZGV2aWNlICpjbGFzcywKLQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gdG9fdmlkZW9fZGV2aWNlKGNsYXNzKTsKLQlzdHJ1Y3Qgc3RrX2NhbWVyYSAqZGV2ID0gdmRldl90b19jYW1lcmEodmRldik7Ci0KLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgZGV2LT52c2V0dGluZ3MudmZsaXApOwotfQotCi1zdGF0aWMgc3NpemVfdCBzdG9yZV92ZmxpcChzdHJ1Y3QgZGV2aWNlICpjbGFzcywKLQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQotewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSB0b192aWRlb19kZXZpY2UoY2xhc3MpOwotCXN0cnVjdCBzdGtfY2FtZXJhICpkZXYgPSB2ZGV2X3RvX2NhbWVyYSh2ZGV2KTsKLQotCWlmIChzdHJuY21wKGJ1ZiwgIjEiLCAxKSA9PSAwKQotCQlkZXYtPnZzZXR0aW5ncy52ZmxpcCA9IDE7Ci0JZWxzZSBpZiAoc3RybmNtcChidWYsICIwIiwgMSkgPT0gMCkKLQkJZGV2LT52c2V0dGluZ3MudmZsaXAgPSAwOwotCWVsc2UKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXR1cm4gc3RybGVuKGJ1Zik7Ci19Ci0KLXN0YXRpYyBERVZJQ0VfQVRUUihicmlnaHRuZXNzLCBTX0lSVUdPIHwgU19JV1VHTywKLQkJCXNob3dfYnJpZ2h0bmVzcywgc3RvcmVfYnJpZ2h0bmVzcyk7Ci1zdGF0aWMgREVWSUNFX0FUVFIoaGZsaXAsIFNfSVJVR08gfCBTX0lXVUdPLCBzaG93X2hmbGlwLCBzdG9yZV9oZmxpcCk7Ci1zdGF0aWMgREVWSUNFX0FUVFIodmZsaXAsIFNfSVJVR08gfCBTX0lXVUdPLCBzaG93X3ZmbGlwLCBzdG9yZV92ZmxpcCk7Ci0KLXN0YXRpYyBpbnQgc3RrX2NyZWF0ZV9zeXNmc19maWxlcyhzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2KQotewotCWludCByZXQ7Ci0KLQlyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnZkZXYtPmRldiwgJmRldl9hdHRyX2JyaWdodG5lc3MpOwotCXJldCArPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnZkZXYtPmRldiwgJmRldl9hdHRyX2hmbGlwKTsKLQlyZXQgKz0gZGV2aWNlX2NyZWF0ZV9maWxlKCZ2ZGV2LT5kZXYsICZkZXZfYXR0cl92ZmxpcCk7Ci0JaWYgKHJldCkKLQkJU1RLX1dBUk5JTkcoIkNvdWxkIG5vdCBjcmVhdGUgc3lzZnMgZmlsZXNcbiIpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0a19yZW1vdmVfc3lzZnNfZmlsZXMoc3RydWN0IHZpZGVvX2RldmljZSAqdmRldikKLXsKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnZkZXYtPmRldiwgJmRldl9hdHRyX2JyaWdodG5lc3MpOwotCWRldmljZV9yZW1vdmVfZmlsZSgmdmRldi0+ZGV2LCAmZGV2X2F0dHJfaGZsaXApOwotCWRldmljZV9yZW1vdmVfZmlsZSgmdmRldi0+ZGV2LCAmZGV2X2F0dHJfdmZsaXApOwotfQotCi0jZWxzZQotI2RlZmluZSBzdGtfY3JlYXRlX3N5c2ZzX2ZpbGVzKGEpCi0jZGVmaW5lIHN0a19yZW1vdmVfc3lzZnNfZmlsZXMoYSkKLSNlbmRpZgotCiAvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwogLyoKICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFzIGFuIFVSQiB0cmFuc2ZlcnQgaXMgY29tcGxldGUgKElzb2Nocm9ub3VzIHBpcGUpLgpAQCAtODc4LDcgKzc2NCwyNCBAQAogCQkuc3RlcCAgICA9IDB4MDEwMCwKIAkJLmRlZmF1bHRfdmFsdWUgPSAweDYwMDAsCiAJfSwKLQkvKlRPRE86IGdldCBtb3JlIGNvbnRyb2xzIHRvIHdvcmsgKi8KKwl7CisJCS5pZCAgICAgID0gVjRMMl9DSURfSEZMSVAsCisJCS50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKKwkJLm5hbWUgICAgPSAiSG9yaXpvbnRhbCBGbGlwIiwKKwkJLm1pbmltdW0gPSAwLAorCQkubWF4aW11bSA9IDEsCisJCS5zdGVwICAgID0gMSwKKwkJLmRlZmF1bHRfdmFsdWUgPSAxLAorCX0sCisJeworCQkuaWQgICAgICA9IFY0TDJfQ0lEX1ZGTElQLAorCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCisJCS5uYW1lICAgID0gIlZlcnRpY2FsIEZsaXAiLAorCQkubWluaW11bSA9IDAsCisJCS5tYXhpbXVtID0gMSwKKwkJLnN0ZXAgICAgPSAxLAorCQkuZGVmYXVsdF92YWx1ZSA9IDEsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgc3RrX3ZpZGlvY19xdWVyeWN0cmwoc3RydWN0IGZpbGUgKmZpbHAsCkBAIC05MDYsNiArODA5LDEyIEBACiAJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgogCQljLT52YWx1ZSA9IGRldi0+dnNldHRpbmdzLmJyaWdodG5lc3M7CiAJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfSEZMSVA6CisJCWMtPnZhbHVlID0gZGV2LT52c2V0dGluZ3MuaGZsaXA7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfVkZMSVA6CisJCWMtPnZhbHVlID0gZGV2LT52c2V0dGluZ3MudmZsaXA7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTkyMCw2ICs4MjksMTIgQEAKIAljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CiAJCWRldi0+dnNldHRpbmdzLmJyaWdodG5lc3MgPSBjLT52YWx1ZTsKIAkJcmV0dXJuIHN0a19zZW5zb3Jfc2V0X2JyaWdodG5lc3MoZGV2LCBjLT52YWx1ZSA+PiA4KTsKKwljYXNlIFY0TDJfQ0lEX0hGTElQOgorCQlkZXYtPnZzZXR0aW5ncy5oZmxpcCA9IGMtPnZhbHVlOworCQlyZXR1cm4gMDsKKwljYXNlIFY0TDJfQ0lEX1ZGTElQOgorCQlkZXYtPnZzZXR0aW5ncy52ZmxpcCA9IGMtPnZhbHVlOworCQlyZXR1cm4gMDsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0xMzk0LDggKzEzMDksNiBAQAogCQlnb3RvIGVycm9yOwogCX0KIAotCXN0a19jcmVhdGVfc3lzZnNfZmlsZXMoJmRldi0+dmRldik7Ci0KIAlyZXR1cm4gMDsKIAogZXJyb3I6CkBAIC0xNDExLDcgKzEzMjQsNiBAQAogCXVuc2V0X3ByZXNlbnQoZGV2KTsKIAogCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZGV2LT53YWl0X2ZyYW1lKTsKLQlzdGtfcmVtb3ZlX3N5c2ZzX2ZpbGVzKCZkZXYtPnZkZXYpOwogCiAJU1RLX0lORk8oIlN5bnRlayBVU0IyLjAgQ2FtZXJhIHJlbGVhc2UgcmVzb3VyY2VzIGRldmljZSAlc1xuIiwKIAkJIHZpZGVvX2RldmljZV9ub2RlX25hbWUoJmRldi0+dmRldikpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90ZWE2NDE1Yy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90ZWE2NDE1Yy5jCmluZGV4IDNlOTljZWEuLjE5NjIxZWQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RlYTY0MTVjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90ZWE2NDE1Yy5jCkBAIC0xNDgsNyArMTQ4LDcgQEAKIAogCS8qIGxldCdzIHNlZSB3aGV0aGVyIHRoaXMgYWRhcHRlciBjYW4gc3VwcG9ydCB3aGF0IHdlIG5lZWQgKi8KIAlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfV1JJVEVfQllURSkpCi0JCXJldHVybiAwOworCQlyZXR1cm4gLUVJTzsKIAogCXY0bF9pbmZvKGNsaWVudCwgImNoaXAgZm91bmQgQCAweCV4ICglcylcbiIsCiAJCQljbGllbnQtPmFkZHIgPDwgMSwgY2xpZW50LT5hZGFwdGVyLT5uYW1lKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGltYmxvZ2l3LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RpbWJsb2dpdy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjNjExZWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RpbWJsb2dpdy5jCkBAIC0wLDAgKzEsODkzIEBACisvKgorICogdGltYmxvZ2l3LmMgdGltYmVyZGFsZSBGUEdBIExvZ2lXaW4gVmlkZW8gSW4gZHJpdmVyCisgKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKy8qIFN1cHBvcnRzOgorICogVGltYmVyZGFsZSBGUEdBIExvZ2lXaW4gVmlkZW8gSW4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWFlbmdpbmUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KKyNpbmNsdWRlIDxtZWRpYS92aWRlb2J1Zi1kbWEtY29udGlnLmg+CisjaW5jbHVkZSA8bWVkaWEvdGltYl92aWRlby5oPgorCisjZGVmaW5lIERSSVZFUl9OQU1FCQkJInRpbWItdmlkZW8iCisKKyNkZWZpbmUgVElNQkxPR0lXSU5fTkFNRQkJIlRpbWJlcmRhbGUgVmlkZW8tSW4iCisjZGVmaW5lIFRJTUJMT0dJV19WRVJTSU9OX0NPREUJCTB4MDQKKworI2RlZmluZSBUSU1CTE9HSVdfTElORVNfUEVSX0RFU0MJNDQKKyNkZWZpbmUgVElNQkxPR0lXX01BWF9WSURFT19NRU0JCTE2CisKKyNkZWZpbmUgVElNQkxPR0lXX0hBU19ERUNPREVSKGx3KQkobHctPnBkYXRhLmVuY29kZXIubW9kdWxlX25hbWUpCisKKworc3RydWN0IHRpbWJsb2dpdyB7CisJc3RydWN0IHZpZGVvX2RldmljZQkJdmlkZW9fZGV2OworCXN0cnVjdCB2NGwyX2RldmljZQkJdjRsMl9kZXY7IC8qIG11dHVhbCBleGNsdXNpb24gKi8KKwlzdHJ1Y3QgbXV0ZXgJCQlsb2NrOworCXN0cnVjdCBkZXZpY2UJCQkqZGV2OworCXN0cnVjdCB0aW1iX3ZpZGVvX3BsYXRmb3JtX2RhdGEgcGRhdGE7CisJc3RydWN0IHY0bDJfc3ViZGV2CQkqc2RfZW5jOwkvKiBlbmNvZGVyICovCisJYm9vbAkJCQlvcGVuZWQ7Cit9OworCitzdHJ1Y3QgdGltYmxvZ2l3X3R2bm9ybSB7CisJdjRsMl9zdGRfaWQgc3RkOworCXUxNiAgICAgd2lkdGg7CisJdTE2ICAgICBoZWlnaHQ7CisJdTgJZnBzOworfTsKKworc3RydWN0IHRpbWJsb2dpd19maCB7CisJc3RydWN0IHZpZGVvYnVmX3F1ZXVlCQl2Yl92aWRxOworCXN0cnVjdCB0aW1ibG9naXdfdHZub3JtIGNvbnN0CSpjdXJfbm9ybTsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQljYXB0dXJlOworCXN0cnVjdCBkbWFfY2hhbgkJCSpjaGFuOworCXNwaW5sb2NrX3QJCQlxdWV1ZV9sb2NrOyAvKiBtdXR1YWwgZXhjbHVzaW9uICovCisJdW5zaWduZWQgaW50CQkJZnJhbWVfY291bnQ7Cit9OworCitzdHJ1Y3QgdGltYmxvZ2l3X2J1ZmZlciB7CisJLyogY29tbW9uIHY0bCBidWZmZXIgc3R1ZmYgLS0gbXVzdCBiZSBmaXJzdCAqLworCXN0cnVjdCB2aWRlb2J1Zl9idWZmZXIJdmI7CisJc3RydWN0IHNjYXR0ZXJsaXN0CXNnWzE2XTsKKwlkbWFfY29va2llX3QJCWNvb2tpZTsKKwlzdHJ1Y3QgdGltYmxvZ2l3X2ZoCSpmaDsKK307CisKK2NvbnN0IHN0cnVjdCB0aW1ibG9naXdfdHZub3JtIHRpbWJsb2dpd190dm5vcm1zW10gPSB7CisJeworCQkuc3RkCQkJPSBWNEwyX1NURF9QQUwsCisJCS53aWR0aAkJCT0gNzIwLAorCQkuaGVpZ2h0CQkJPSA1NzYsCisJCS5mcHMJCQk9IDI1CisJfSwKKwl7CisJCS5zdGQJCQk9IFY0TDJfU1REX05UU0MsCisJCS53aWR0aAkJCT0gNzIwLAorCQkuaGVpZ2h0CQkJPSA0ODAsCisJCS5mcHMJCQk9IDMwCisJfQorfTsKKworc3RhdGljIGludCB0aW1ibG9naXdfYnl0ZXNfcGVyX2xpbmUoY29uc3Qgc3RydWN0IHRpbWJsb2dpd190dm5vcm0gKm5vcm0pCit7CisJcmV0dXJuIG5vcm0tPndpZHRoICogMjsKK30KKworCitzdGF0aWMgaW50IHRpbWJsb2dpd19mcmFtZV9zaXplKGNvbnN0IHN0cnVjdCB0aW1ibG9naXdfdHZub3JtICpub3JtKQoreworCXJldHVybiBub3JtLT5oZWlnaHQgKiB0aW1ibG9naXdfYnl0ZXNfcGVyX2xpbmUobm9ybSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdGltYmxvZ2l3X3R2bm9ybSAqdGltYmxvZ2l3X2dldF9ub3JtKGNvbnN0IHY0bDJfc3RkX2lkIHN0ZCkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0aW1ibG9naXdfdHZub3Jtcyk7IGkrKykKKwkJaWYgKHRpbWJsb2dpd190dm5vcm1zW2ldLnN0ZCAmIHN0ZCkKKwkJCXJldHVybiB0aW1ibG9naXdfdHZub3JtcyArIGk7CisKKwkvKiBkZWZhdWx0IHRvIGZpcnN0IGVsZW1lbnQgKi8KKwlyZXR1cm4gdGltYmxvZ2l3X3R2bm9ybXM7Cit9CisKK3N0YXRpYyB2b2lkIHRpbWJsb2dpd19kbWFfY2Iodm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgdGltYmxvZ2l3X2J1ZmZlciAqYnVmID0gZGF0YTsKKwlzdHJ1Y3QgdGltYmxvZ2l3X2ZoICpmaCA9IGJ1Zi0+Zmg7CisJc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIgPSAmYnVmLT52YjsKKworCXNwaW5fbG9jaygmZmgtPnF1ZXVlX2xvY2spOworCisJLyogbWFyayB0aGUgdHJhbnNmZXIgZG9uZSAqLworCWJ1Zi0+Y29va2llID0gLTE7CisKKwlmaC0+ZnJhbWVfY291bnQrKzsKKworCWlmICh2Yi0+c3RhdGUgIT0gVklERU9CVUZfRVJST1IpIHsKKwkJbGlzdF9kZWwoJnZiLT5xdWV1ZSk7CisJCWRvX2dldHRpbWVvZmRheSgmdmItPnRzKTsKKwkJdmItPmZpZWxkX2NvdW50ID0gZmgtPmZyYW1lX2NvdW50ICogMjsKKwkJdmItPnN0YXRlID0gVklERU9CVUZfRE9ORTsKKworCQl3YWtlX3VwKCZ2Yi0+ZG9uZSk7CisJfQorCisJaWYgKCFsaXN0X2VtcHR5KCZmaC0+Y2FwdHVyZSkpIHsKKwkJdmIgPSBsaXN0X2VudHJ5KGZoLT5jYXB0dXJlLm5leHQsIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIsCisJCQlxdWV1ZSk7CisJCXZiLT5zdGF0ZSA9IFZJREVPQlVGX0FDVElWRTsKKwl9CisKKwlzcGluX3VubG9jaygmZmgtPnF1ZXVlX2xvY2spOworfQorCitzdGF0aWMgYm9vbCB0aW1ibG9naXdfZG1hX2ZpbHRlcl9mbihzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sIHZvaWQgKmZpbHRlcl9wYXJhbSkKK3sKKwlyZXR1cm4gY2hhbi0+Y2hhbl9pZCA9PSAodWludHB0cl90KWZpbHRlcl9wYXJhbTsKK30KKworLyogSU9DVEwgZnVuY3Rpb25zICovCisKK3N0YXRpYyBpbnQgdGltYmxvZ2l3X2dfZm10KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICAqcHJpdiwKKwlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZvcm1hdCkKK3sKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgdGltYmxvZ2l3ICpsdyA9IHZpZGVvX2dldF9kcnZkYXRhKHZkZXYpOworCXN0cnVjdCB0aW1ibG9naXdfZmggKmZoID0gcHJpdjsKKworCWRldl9kYmcoJnZkZXYtPmRldiwgIiVzIGVudHJ5XG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAoZm9ybWF0LT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZsdy0+bG9jayk7CisKKwlmb3JtYXQtPmZtdC5waXgud2lkdGggPSBmaC0+Y3VyX25vcm0tPndpZHRoOworCWZvcm1hdC0+Zm10LnBpeC5oZWlnaHQgPSBmaC0+Y3VyX25vcm0tPmhlaWdodDsKKwlmb3JtYXQtPmZtdC5waXgucGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfVVlWWTsKKwlmb3JtYXQtPmZtdC5waXguYnl0ZXNwZXJsaW5lID0gdGltYmxvZ2l3X2J5dGVzX3Blcl9saW5lKGZoLT5jdXJfbm9ybSk7CisJZm9ybWF0LT5mbXQucGl4LnNpemVpbWFnZSA9IHRpbWJsb2dpd19mcmFtZV9zaXplKGZoLT5jdXJfbm9ybSk7CisJZm9ybWF0LT5mbXQucGl4LmZpZWxkID0gVjRMMl9GSUVMRF9OT05FOworCisJbXV0ZXhfdW5sb2NrKCZsdy0+bG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0aW1ibG9naXdfdHJ5X2ZtdChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAgKnByaXYsCisJc3RydWN0IHY0bDJfZm9ybWF0ICpmb3JtYXQpCit7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7CisJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJmZvcm1hdC0+Zm10LnBpeDsKKworCWRldl9kYmcoJnZkZXYtPmRldiwKKwkJIiVzIC0gd2lkdGg9JWQsIGhlaWdodD0lZCwgcGl4ZWxmb3JtYXQ9JWQsIGZpZWxkPSVkXG4iCisJCSJieXRlcyBwZXIgbGluZSAlZCwgc2l6ZSBpbWFnZTogJWQsIGNvbG9yc3BhY2U6ICVkXG4iLAorCQlfX2Z1bmNfXywKKwkJcGl4LT53aWR0aCwgcGl4LT5oZWlnaHQsIHBpeC0+cGl4ZWxmb3JtYXQsIHBpeC0+ZmllbGQsCisJCXBpeC0+Ynl0ZXNwZXJsaW5lLCBwaXgtPnNpemVpbWFnZSwgcGl4LT5jb2xvcnNwYWNlKTsKKworCWlmIChmb3JtYXQtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChwaXgtPmZpZWxkICE9IFY0TDJfRklFTERfTk9ORSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAocGl4LT5waXhlbGZvcm1hdCAhPSBWNEwyX1BJWF9GTVRfVVlWWSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0aW1ibG9naXdfc19mbXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgICpwcml2LAorCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZm9ybWF0KQoreworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOworCXN0cnVjdCB0aW1ibG9naXcgKmx3ID0gdmlkZW9fZ2V0X2RydmRhdGEodmRldik7CisJc3RydWN0IHRpbWJsb2dpd19maCAqZmggPSBwcml2OworCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeCA9ICZmb3JtYXQtPmZtdC5waXg7CisJaW50IGVycjsKKworCW11dGV4X2xvY2soJmx3LT5sb2NrKTsKKworCWVyciA9IHRpbWJsb2dpd190cnlfZm10KGZpbGUsIHByaXYsIGZvcm1hdCk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwlpZiAodmlkZW9idWZfcXVldWVfaXNfYnVzeSgmZmgtPnZiX3ZpZHEpKSB7CisJCWRldl9lcnIoJnZkZXYtPmRldiwgIiVzIHF1ZXVlIGJ1c3lcbiIsIF9fZnVuY19fKTsKKwkJZXJyID0gLUVCVVNZOworCQlnb3RvIG91dDsKKwl9CisKKwlwaXgtPndpZHRoID0gZmgtPmN1cl9ub3JtLT53aWR0aDsKKwlwaXgtPmhlaWdodCA9IGZoLT5jdXJfbm9ybS0+aGVpZ2h0OworCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZsdy0+bG9jayk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCB0aW1ibG9naXdfcXVlcnljYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgICpwcml2LAorCXN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKmNhcCkKK3sKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKKworCWRldl9kYmcoJnZkZXYtPmRldiwgIiVzOiBFbnRyeVxuIiwgIF9fZnVuY19fKTsKKwltZW1zZXQoY2FwLCAwLCBzaXplb2YoKmNhcCkpOworCXN0cm5jcHkoY2FwLT5jYXJkLCBUSU1CTE9HSVdJTl9OQU1FLCBzaXplb2YoY2FwLT5jYXJkKS0xKTsKKwlzdHJuY3B5KGNhcC0+ZHJpdmVyLCBEUklWRVJfTkFNRSwgc2l6ZW9mKGNhcC0+ZHJpdmVyKSAtIDEpOworCXN0cmxjcHkoY2FwLT5idXNfaW5mbywgdmRldi0+bmFtZSwgc2l6ZW9mKGNhcC0+YnVzX2luZm8pKTsKKwljYXAtPnZlcnNpb24gPSBUSU1CTE9HSVdfVkVSU0lPTl9DT0RFOworCWNhcC0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8IFY0TDJfQ0FQX1NUUkVBTUlORyB8CisJCVY0TDJfQ0FQX1JFQURXUklURTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRpbWJsb2dpd19lbnVtX2ZtdChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAgKnByaXYsCisJc3RydWN0IHY0bDJfZm10ZGVzYyAqZm10KQoreworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOworCisJZGV2X2RiZygmdmRldi0+ZGV2LCAiJXMsIGluZGV4OiAlZFxuIiwgIF9fZnVuY19fLCBmbXQtPmluZGV4KTsKKworCWlmIChmbXQtPmluZGV4ICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCW1lbXNldChmbXQsIDAsIHNpemVvZigqZm10KSk7CisJZm10LT5pbmRleCA9IDA7CisJZm10LT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCXN0cm5jcHkoZm10LT5kZXNjcmlwdGlvbiwgIjQ6MjoyLCBwYWNrZWQsIFlVWVYiLAorCQlzaXplb2YoZm10LT5kZXNjcmlwdGlvbiktMSk7CisJZm10LT5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9VWVZZOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGltYmxvZ2l3X2dfcGFybShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwlzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtICpzcCkKK3sKKwlzdHJ1Y3QgdGltYmxvZ2l3X2ZoICpmaCA9IHByaXY7CisJc3RydWN0IHY0bDJfY2FwdHVyZXBhcm0gKmNwID0gJnNwLT5wYXJtLmNhcHR1cmU7CisKKwljcC0+Y2FwYWJpbGl0eSA9IFY0TDJfQ0FQX1RJTUVQRVJGUkFNRTsKKwljcC0+dGltZXBlcmZyYW1lLm51bWVyYXRvciA9IDE7CisJY3AtPnRpbWVwZXJmcmFtZS5kZW5vbWluYXRvciA9IGZoLT5jdXJfbm9ybS0+ZnBzOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGltYmxvZ2l3X3JlcWJ1ZnMoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgICpwcml2LAorCXN0cnVjdCB2NGwyX3JlcXVlc3RidWZmZXJzICpyYikKK3sKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgdGltYmxvZ2l3X2ZoICpmaCA9IHByaXY7CisKKwlkZXZfZGJnKCZ2ZGV2LT5kZXYsICIlczogZW50cnlcbiIsICBfX2Z1bmNfXyk7CisKKwlyZXR1cm4gdmlkZW9idWZfcmVxYnVmcygmZmgtPnZiX3ZpZHEsIHJiKTsKK30KKworc3RhdGljIGludCB0aW1ibG9naXdfcXVlcnlidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgICpwcml2LAorCXN0cnVjdCB2NGwyX2J1ZmZlciAqYikKK3sKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgdGltYmxvZ2l3X2ZoICpmaCA9IHByaXY7CisKKwlkZXZfZGJnKCZ2ZGV2LT5kZXYsICIlczogZW50cnlcbiIsICBfX2Z1bmNfXyk7CisKKwlyZXR1cm4gdmlkZW9idWZfcXVlcnlidWYoJmZoLT52Yl92aWRxLCBiKTsKK30KKworc3RhdGljIGludCB0aW1ibG9naXdfcWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAgKnByaXYsIHN0cnVjdCB2NGwyX2J1ZmZlciAqYikKK3sKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgdGltYmxvZ2l3X2ZoICpmaCA9IHByaXY7CisKKwlkZXZfZGJnKCZ2ZGV2LT5kZXYsICIlczogZW50cnlcbiIsICBfX2Z1bmNfXyk7CisKKwlyZXR1cm4gdmlkZW9idWZfcWJ1ZigmZmgtPnZiX3ZpZHEsIGIpOworfQorCitzdGF0aWMgaW50IHRpbWJsb2dpd19kcWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAgKnByaXYsCisJc3RydWN0IHY0bDJfYnVmZmVyICpiKQoreworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOworCXN0cnVjdCB0aW1ibG9naXdfZmggKmZoID0gcHJpdjsKKworCWRldl9kYmcoJnZkZXYtPmRldiwgIiVzOiBlbnRyeVxuIiwgIF9fZnVuY19fKTsKKworCXJldHVybiB2aWRlb2J1Zl9kcWJ1ZigmZmgtPnZiX3ZpZHEsIGIsIGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKK30KKworc3RhdGljIGludCB0aW1ibG9naXdfZ19zdGQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgICpwcml2LCB2NGwyX3N0ZF9pZCAqc3RkKQoreworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOworCXN0cnVjdCB0aW1ibG9naXdfZmggKmZoID0gcHJpdjsKKworCWRldl9kYmcoJnZkZXYtPmRldiwgIiVzOiBlbnRyeVxuIiwgIF9fZnVuY19fKTsKKworCSpzdGQgPSBmaC0+Y3VyX25vcm0tPnN0ZDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0aW1ibG9naXdfc19zdGQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgICpwcml2LCB2NGwyX3N0ZF9pZCAqc3RkKQoreworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOworCXN0cnVjdCB0aW1ibG9naXcgKmx3ID0gdmlkZW9fZ2V0X2RydmRhdGEodmRldik7CisJc3RydWN0IHRpbWJsb2dpd19maCAqZmggPSBwcml2OworCWludCBlcnIgPSAwOworCisJZGV2X2RiZygmdmRldi0+ZGV2LCAiJXM6IGVudHJ5XG4iLCAgX19mdW5jX18pOworCisJbXV0ZXhfbG9jaygmbHctPmxvY2spOworCisJaWYgKFRJTUJMT0dJV19IQVNfREVDT0RFUihsdykpCisJCWVyciA9IHY0bDJfc3ViZGV2X2NhbGwobHctPnNkX2VuYywgY29yZSwgc19zdGQsICpzdGQpOworCisJaWYgKCFlcnIpCisJCWZoLT5jdXJfbm9ybSA9IHRpbWJsb2dpd19nZXRfbm9ybSgqc3RkKTsKKworCW11dGV4X3VubG9jaygmbHctPmxvY2spOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCB0aW1ibG9naXdfZW51bWlucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICAqcHJpdiwKKwlzdHJ1Y3QgdjRsMl9pbnB1dCAqaW5wKQoreworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOworCWludCBpOworCisJZGV2X2RiZygmdmRldi0+ZGV2LCAiJXM6IEVudHJ5XG4iLCAgX19mdW5jX18pOworCisJaWYgKGlucC0+aW5kZXggIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpbnAtPmluZGV4ID0gMDsKKworCXN0cm5jcHkoaW5wLT5uYW1lLCAiVGltYiBpbnB1dCAxIiwgc2l6ZW9mKGlucC0+bmFtZSkgLSAxKTsKKwlpbnAtPnR5cGUgPSBWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBOworCisJaW5wLT5zdGQgPSAwOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRpbWJsb2dpd190dm5vcm1zKTsgaSsrKQorCQlpbnAtPnN0ZCB8PSB0aW1ibG9naXdfdHZub3Jtc1tpXS5zdGQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0aW1ibG9naXdfZ19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAgKnByaXYsCisJdW5zaWduZWQgaW50ICppbnB1dCkKK3sKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKKworCWRldl9kYmcoJnZkZXYtPmRldiwgIiVzOiBFbnRyeVxuIiwgIF9fZnVuY19fKTsKKworCSppbnB1dCA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0aW1ibG9naXdfc19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAgKnByaXYsIHVuc2lnbmVkIGludCBpbnB1dCkKK3sKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKKworCWRldl9kYmcoJnZkZXYtPmRldiwgIiVzOiBFbnRyeVxuIiwgIF9fZnVuY19fKTsKKworCWlmIChpbnB1dCAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0aW1ibG9naXdfc3RyZWFtb24oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgICpwcml2LCB1bnNpZ25lZCBpbnQgdHlwZSkKK3sKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgdGltYmxvZ2l3X2ZoICpmaCA9IHByaXY7CisKKwlkZXZfZGJnKCZ2ZGV2LT5kZXYsICIlczogZW50cnlcbiIsICBfX2Z1bmNfXyk7CisKKwlpZiAodHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpIHsKKwkJZGV2X2RiZygmdmRldi0+ZGV2LCAiJXMgLSBObyBjYXB0dXJlIGRldmljZVxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlmaC0+ZnJhbWVfY291bnQgPSAwOworCXJldHVybiB2aWRlb2J1Zl9zdHJlYW1vbigmZmgtPnZiX3ZpZHEpOworfQorCitzdGF0aWMgaW50IHRpbWJsb2dpd19zdHJlYW1vZmYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgICpwcml2LAorCXVuc2lnbmVkIGludCB0eXBlKQoreworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOworCXN0cnVjdCB0aW1ibG9naXdfZmggKmZoID0gcHJpdjsKKworCWRldl9kYmcoJnZkZXYtPmRldiwgIiVzIGVudHJ5XG4iLCAgX19mdW5jX18pOworCisJaWYgKHR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiB2aWRlb2J1Zl9zdHJlYW1vZmYoJmZoLT52Yl92aWRxKTsKK30KKworc3RhdGljIGludCB0aW1ibG9naXdfcXVlcnlzdGQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgICpwcml2LCB2NGwyX3N0ZF9pZCAqc3RkKQoreworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOworCXN0cnVjdCB0aW1ibG9naXcgKmx3ID0gdmlkZW9fZ2V0X2RydmRhdGEodmRldik7CisJc3RydWN0IHRpbWJsb2dpd19maCAqZmggPSBwcml2OworCisJZGV2X2RiZygmdmRldi0+ZGV2LCAiJXMgZW50cnlcbiIsICBfX2Z1bmNfXyk7CisKKwlpZiAoVElNQkxPR0lXX0hBU19ERUNPREVSKGx3KSkKKwkJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwobHctPnNkX2VuYywgdmlkZW8sIHF1ZXJ5c3RkLCBzdGQpOworCWVsc2UgeworCQkqc3RkID0gZmgtPmN1cl9ub3JtLT5zdGQ7CisJCXJldHVybiAwOworCX0KK30KKworc3RhdGljIGludCB0aW1ibG9naXdfZW51bV9mcmFtZXNpemVzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICAqcHJpdiwKKwlzdHJ1Y3QgdjRsMl9mcm1zaXplZW51bSAqZnNpemUpCit7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7CisJc3RydWN0IHRpbWJsb2dpd19maCAqZmggPSBwcml2OworCisJZGV2X2RiZygmdmRldi0+ZGV2LCAiJXMgLSBpbmRleDogJWQsIGZvcm1hdDogJWRcbiIsICBfX2Z1bmNfXywKKwkJZnNpemUtPmluZGV4LCBmc2l6ZS0+cGl4ZWxfZm9ybWF0KTsKKworCWlmICgoZnNpemUtPmluZGV4ICE9IDApIHx8CisJCShmc2l6ZS0+cGl4ZWxfZm9ybWF0ICE9IFY0TDJfUElYX0ZNVF9VWVZZKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmc2l6ZS0+dHlwZSA9IFY0TDJfRlJNU0laRV9UWVBFX0RJU0NSRVRFOworCWZzaXplLT5kaXNjcmV0ZS53aWR0aCA9IGZoLT5jdXJfbm9ybS0+d2lkdGg7CisJZnNpemUtPmRpc2NyZXRlLmhlaWdodCA9IGZoLT5jdXJfbm9ybS0+aGVpZ2h0OworCisJcmV0dXJuIDA7Cit9CisKKy8qIFZpZGVvIGJ1ZmZlciBmdW5jdGlvbnMgKi8KKworc3RhdGljIGludCBidWZmZXJfc2V0dXAoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICp2cSwgdW5zaWduZWQgaW50ICpjb3VudCwKKwl1bnNpZ25lZCBpbnQgKnNpemUpCit7CisJc3RydWN0IHRpbWJsb2dpd19maCAqZmggPSB2cS0+cHJpdl9kYXRhOworCisJKnNpemUgPSB0aW1ibG9naXdfZnJhbWVfc2l6ZShmaC0+Y3VyX25vcm0pOworCisJaWYgKCEqY291bnQpCisJCSpjb3VudCA9IDMyOworCisJd2hpbGUgKCpzaXplICogKmNvdW50ID4gVElNQkxPR0lXX01BWF9WSURFT19NRU0gKiAxMDI0ICogMTAyNCkKKwkJKCpjb3VudCktLTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJ1ZmZlcl9wcmVwYXJlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqdnEsIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiLAorCWVudW0gdjRsMl9maWVsZCBmaWVsZCkKK3sKKwlzdHJ1Y3QgdGltYmxvZ2l3X2ZoICpmaCA9IHZxLT5wcml2X2RhdGE7CisJc3RydWN0IHRpbWJsb2dpd19idWZmZXIgKmJ1ZiA9IGNvbnRhaW5lcl9vZih2Yiwgc3RydWN0IHRpbWJsb2dpd19idWZmZXIsCisJCXZiKTsKKwl1bnNpZ25lZCBpbnQgZGF0YV9zaXplID0gdGltYmxvZ2l3X2ZyYW1lX3NpemUoZmgtPmN1cl9ub3JtKTsKKwlpbnQgZXJyID0gMDsKKworCWlmICh2Yi0+YmFkZHIgJiYgdmItPmJzaXplIDwgZGF0YV9zaXplKQorCQkvKiBVc2VyIHByb3ZpZGVkIGJ1ZmZlciwgYnV0IGl0IGlzIHRvbyBzbWFsbCAqLworCQlyZXR1cm4gLUVOT01FTTsKKworCXZiLT5zaXplID0gZGF0YV9zaXplOworCXZiLT53aWR0aCA9IGZoLT5jdXJfbm9ybS0+d2lkdGg7CisJdmItPmhlaWdodCA9IGZoLT5jdXJfbm9ybS0+aGVpZ2h0OworCXZiLT5maWVsZCA9IGZpZWxkOworCisJaWYgKHZiLT5zdGF0ZSA9PSBWSURFT0JVRl9ORUVEU19JTklUKSB7CisJCWludCBpOworCQl1bnNpZ25lZCBpbnQgc2l6ZTsKKwkJdW5zaWduZWQgaW50IGJ5dGVzX3Blcl9kZXNjID0gVElNQkxPR0lXX0xJTkVTX1BFUl9ERVNDICoKKwkJCXRpbWJsb2dpd19ieXRlc19wZXJfbGluZShmaC0+Y3VyX25vcm0pOworCQlkbWFfYWRkcl90IGFkZHI7CisKKwkJc2dfaW5pdF90YWJsZShidWYtPnNnLCBBUlJBWV9TSVpFKGJ1Zi0+c2cpKTsKKworCQllcnIgPSB2aWRlb2J1Zl9pb2xvY2sodnEsIHZiLCBOVUxMKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyOworCisJCWFkZHIgPSB2aWRlb2J1Zl90b19kbWFfY29udGlnKHZiKTsKKwkJZm9yIChpID0gMCwgc2l6ZSA9IDA7IHNpemUgPCBkYXRhX3NpemU7IGkrKykgeworCQkJc2dfZG1hX2FkZHJlc3MoYnVmLT5zZyArIGkpID0gYWRkciArIHNpemU7CisJCQlzaXplICs9IGJ5dGVzX3Blcl9kZXNjOworCQkJc2dfZG1hX2xlbihidWYtPnNnICsgaSkgPSAoc2l6ZSA+IGRhdGFfc2l6ZSkgPworCQkJCShieXRlc19wZXJfZGVzYyAtIChzaXplIC0gZGF0YV9zaXplKSkgOgorCQkJCWJ5dGVzX3Blcl9kZXNjOworCQl9CisKKwkJdmItPnN0YXRlID0gVklERU9CVUZfUFJFUEFSRUQ7CisJCWJ1Zi0+Y29va2llID0gLTE7CisJCWJ1Zi0+ZmggPSBmaDsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyOgorCXZpZGVvYnVmX2RtYV9jb250aWdfZnJlZSh2cSwgdmIpOworCXZiLT5zdGF0ZSA9IFZJREVPQlVGX05FRURTX0lOSVQ7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgYnVmZmVyX3F1ZXVlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqdnEsIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiKQoreworCXN0cnVjdCB0aW1ibG9naXdfZmggKmZoID0gdnEtPnByaXZfZGF0YTsKKwlzdHJ1Y3QgdGltYmxvZ2l3X2J1ZmZlciAqYnVmID0gY29udGFpbmVyX29mKHZiLCBzdHJ1Y3QgdGltYmxvZ2l3X2J1ZmZlciwKKwkJdmIpOworCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqZGVzYzsKKwlpbnQgc2dfZWxlbXM7CisJaW50IGJ5dGVzX3Blcl9kZXNjID0gVElNQkxPR0lXX0xJTkVTX1BFUl9ERVNDICoKKwkJdGltYmxvZ2l3X2J5dGVzX3Blcl9saW5lKGZoLT5jdXJfbm9ybSk7CisKKwlzZ19lbGVtcyA9IHRpbWJsb2dpd19mcmFtZV9zaXplKGZoLT5jdXJfbm9ybSkgLyBieXRlc19wZXJfZGVzYzsKKwlzZ19lbGVtcyArPQorCQkodGltYmxvZ2l3X2ZyYW1lX3NpemUoZmgtPmN1cl9ub3JtKSAlIGJ5dGVzX3Blcl9kZXNjKSA/IDEgOiAwOworCisJaWYgKGxpc3RfZW1wdHkoJmZoLT5jYXB0dXJlKSkKKwkJdmItPnN0YXRlID0gVklERU9CVUZfQUNUSVZFOworCWVsc2UKKwkJdmItPnN0YXRlID0gVklERU9CVUZfUVVFVUVEOworCisJbGlzdF9hZGRfdGFpbCgmdmItPnF1ZXVlLCAmZmgtPmNhcHR1cmUpOworCisJc3Bpbl91bmxvY2tfaXJxKCZmaC0+cXVldWVfbG9jayk7CisKKwlkZXNjID0gZmgtPmNoYW4tPmRldmljZS0+ZGV2aWNlX3ByZXBfc2xhdmVfc2coZmgtPmNoYW4sCisJCWJ1Zi0+c2csIHNnX2VsZW1zLCBETUFfRlJPTV9ERVZJQ0UsCisJCURNQV9QUkVQX0lOVEVSUlVQVCB8IERNQV9DT01QTF9TS0lQX1NSQ19VTk1BUCk7CisJaWYgKCFkZXNjKSB7CisJCXNwaW5fbG9ja19pcnEoJmZoLT5xdWV1ZV9sb2NrKTsKKwkJbGlzdF9kZWxfaW5pdCgmdmItPnF1ZXVlKTsKKwkJdmItPnN0YXRlID0gVklERU9CVUZfUFJFUEFSRUQ7CisJCXJldHVybjsKKwl9CisKKwlkZXNjLT5jYWxsYmFja19wYXJhbSA9IGJ1ZjsKKwlkZXNjLT5jYWxsYmFjayA9IHRpbWJsb2dpd19kbWFfY2I7CisKKwlidWYtPmNvb2tpZSA9IGRlc2MtPnR4X3N1Ym1pdChkZXNjKTsKKworCXNwaW5fbG9ja19pcnEoJmZoLT5xdWV1ZV9sb2NrKTsKK30KKworc3RhdGljIHZvaWQgYnVmZmVyX3JlbGVhc2Uoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICp2cSwKKwlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YikKK3sKKwlzdHJ1Y3QgdGltYmxvZ2l3X2ZoICpmaCA9IHZxLT5wcml2X2RhdGE7CisJc3RydWN0IHRpbWJsb2dpd19idWZmZXIgKmJ1ZiA9IGNvbnRhaW5lcl9vZih2Yiwgc3RydWN0IHRpbWJsb2dpd19idWZmZXIsCisJCXZiKTsKKworCXZpZGVvYnVmX3dhaXRvbih2cSwgdmIsIDAsIDApOworCWlmIChidWYtPmNvb2tpZSA+PSAwKQorCQlkbWFfc3luY193YWl0KGZoLT5jaGFuLCBidWYtPmNvb2tpZSk7CisKKwl2aWRlb2J1Zl9kbWFfY29udGlnX2ZyZWUodnEsIHZiKTsKKwl2Yi0+c3RhdGUgPSBWSURFT0JVRl9ORUVEU19JTklUOworfQorCitzdGF0aWMgc3RydWN0IHZpZGVvYnVmX3F1ZXVlX29wcyB0aW1ibG9naXdfdmlkZW9fcW9wcyA9IHsKKwkuYnVmX3NldHVwICAgICAgPSBidWZmZXJfc2V0dXAsCisJLmJ1Zl9wcmVwYXJlICAgID0gYnVmZmVyX3ByZXBhcmUsCisJLmJ1Zl9xdWV1ZSAgICAgID0gYnVmZmVyX3F1ZXVlLAorCS5idWZfcmVsZWFzZSAgICA9IGJ1ZmZlcl9yZWxlYXNlLAorfTsKKworLyogRGV2aWNlIE9wZXJhdGlvbnMgZnVuY3Rpb25zICovCisKK3N0YXRpYyBpbnQgdGltYmxvZ2l3X29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7CisJc3RydWN0IHRpbWJsb2dpdyAqbHcgPSB2aWRlb19nZXRfZHJ2ZGF0YSh2ZGV2KTsKKwlzdHJ1Y3QgdGltYmxvZ2l3X2ZoICpmaDsKKwl2NGwyX3N0ZF9pZCBzdGQ7CisJZG1hX2NhcF9tYXNrX3QgbWFzazsKKwlpbnQgZXJyID0gMDsKKworCWRldl9kYmcoJnZkZXYtPmRldiwgIiVzOiBlbnRyeVxuIiwgX19mdW5jX18pOworCisJbXV0ZXhfbG9jaygmbHctPmxvY2spOworCWlmIChsdy0+b3BlbmVkKSB7CisJCWVyciA9IC1FQlVTWTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKFRJTUJMT0dJV19IQVNfREVDT0RFUihsdykgJiYgIWx3LT5zZF9lbmMpIHsKKwkJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdDsKKworCQkvKiBmaW5kIHRoZSB2aWRlbyBkZWNvZGVyICovCisJCWFkYXB0ID0gaTJjX2dldF9hZGFwdGVyKGx3LT5wZGF0YS5pMmNfYWRhcHRlcik7CisJCWlmICghYWRhcHQpIHsKKwkJCWRldl9lcnIoJnZkZXYtPmRldiwgIk5vIEkyQyBidXMgIyVkXG4iLAorCQkJCWx3LT5wZGF0YS5pMmNfYWRhcHRlcik7CisJCQllcnIgPSAtRU5PREVWOworCQkJZ290byBvdXQ7CisJCX0KKworCQkvKiBub3cgZmluZCB0aGUgZW5jb2RlciAqLworCQlsdy0+c2RfZW5jID0gdjRsMl9pMmNfbmV3X3N1YmRldl9ib2FyZCgmbHctPnY0bDJfZGV2LCBhZGFwdCwKKwkJCWx3LT5wZGF0YS5lbmNvZGVyLmluZm8sIE5VTEwpOworCisJCWkyY19wdXRfYWRhcHRlcihhZGFwdCk7CisKKwkJaWYgKCFsdy0+c2RfZW5jKSB7CisJCQlkZXZfZXJyKCZ2ZGV2LT5kZXYsICJGYWlsZWQgdG8gZ2V0IGVuY29kZXI6ICVzXG4iLAorCQkJCWx3LT5wZGF0YS5lbmNvZGVyLm1vZHVsZV9uYW1lKTsKKwkJCWVyciA9IC1FTk9ERVY7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCWZoID0ga3phbGxvYyhzaXplb2YoKmZoKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFmaCkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlmaC0+Y3VyX25vcm0gPSB0aW1ibG9naXdfdHZub3JtczsKKwl0aW1ibG9naXdfcXVlcnlzdGQoZmlsZSwgZmgsICZzdGQpOworCWZoLT5jdXJfbm9ybSA9IHRpbWJsb2dpd19nZXRfbm9ybShzdGQpOworCisJSU5JVF9MSVNUX0hFQUQoJmZoLT5jYXB0dXJlKTsKKwlzcGluX2xvY2tfaW5pdCgmZmgtPnF1ZXVlX2xvY2spOworCisJZG1hX2NhcF96ZXJvKG1hc2spOworCWRtYV9jYXBfc2V0KERNQV9TTEFWRSwgbWFzayk7CisJZG1hX2NhcF9zZXQoRE1BX1BSSVZBVEUsIG1hc2spOworCisJLyogZmluZCB0aGUgRE1BIGNoYW5uZWwgKi8KKwlmaC0+Y2hhbiA9IGRtYV9yZXF1ZXN0X2NoYW5uZWwobWFzaywgdGltYmxvZ2l3X2RtYV9maWx0ZXJfZm4sCisJCQkodm9pZCAqKSh1aW50cHRyX3QpbHctPnBkYXRhLmRtYV9jaGFubmVsKTsKKwlpZiAoIWZoLT5jaGFuKSB7CisJCWRldl9lcnIoJnZkZXYtPmRldiwgIkZhaWxlZCB0byBnZXQgRE1BIGNoYW5uZWxcbiIpOworCQlrZnJlZShmaCk7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gb3V0OworCX0KKworCWZpbGUtPnByaXZhdGVfZGF0YSA9IGZoOworCXZpZGVvYnVmX3F1ZXVlX2RtYV9jb250aWdfaW5pdCgmZmgtPnZiX3ZpZHEsCisJCSZ0aW1ibG9naXdfdmlkZW9fcW9wcywgbHctPmRldiwgJmZoLT5xdWV1ZV9sb2NrLAorCQlWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUsIFY0TDJfRklFTERfTk9ORSwKKwkJc2l6ZW9mKHN0cnVjdCB0aW1ibG9naXdfYnVmZmVyKSwgZmgsIE5VTEwpOworCisJbHctPm9wZW5lZCA9IHRydWU7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZsdy0+bG9jayk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHRpbWJsb2dpd19jbG9zZShzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgdGltYmxvZ2l3ICpsdyA9IHZpZGVvX2dldF9kcnZkYXRhKHZkZXYpOworCXN0cnVjdCB0aW1ibG9naXdfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJZGV2X2RiZygmdmRldi0+ZGV2LCAiJXM6IEVudHJ5XG4iLCAgX19mdW5jX18pOworCisJdmlkZW9idWZfc3RvcCgmZmgtPnZiX3ZpZHEpOworCXZpZGVvYnVmX21tYXBfZnJlZSgmZmgtPnZiX3ZpZHEpOworCisJZG1hX3JlbGVhc2VfY2hhbm5lbChmaC0+Y2hhbik7CisKKwlrZnJlZShmaCk7CisKKwltdXRleF9sb2NrKCZsdy0+bG9jayk7CisJbHctPm9wZW5lZCA9IGZhbHNlOworCW11dGV4X3VubG9jaygmbHctPmxvY2spOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCB0aW1ibG9naXdfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmRhdGEsCisJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7CisJc3RydWN0IHRpbWJsb2dpd19maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlkZXZfZGJnKCZ2ZGV2LT5kZXYsICIlczogZW50cnlcbiIsICBfX2Z1bmNfXyk7CisKKwlyZXR1cm4gdmlkZW9idWZfcmVhZF9zdHJlYW0oJmZoLT52Yl92aWRxLCBkYXRhLCBjb3VudCwgcHBvcywgMCwKKwkJZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHRpbWJsb2dpd19wb2xsKHN0cnVjdCBmaWxlICpmaWxlLAorCXN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqd2FpdCkKK3sKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgdGltYmxvZ2l3X2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCWRldl9kYmcoJnZkZXYtPmRldiwgIiVzOiBlbnRyeVxuIiwgIF9fZnVuY19fKTsKKworCXJldHVybiB2aWRlb2J1Zl9wb2xsX3N0cmVhbShmaWxlLCAmZmgtPnZiX3ZpZHEsIHdhaXQpOworfQorCitzdGF0aWMgaW50IHRpbWJsb2dpd19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgdGltYmxvZ2l3X2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCWRldl9kYmcoJnZkZXYtPmRldiwgIiVzOiBlbnRyeVxuIiwgX19mdW5jX18pOworCisJcmV0dXJuIHZpZGVvYnVmX21tYXBfbWFwcGVyKCZmaC0+dmJfdmlkcSwgdm1hKTsKK30KKworLyogUGxhdGZvcm0gZGV2aWNlIGZ1bmN0aW9ucyAqLworCitzdGF0aWMgX19kZXZpbml0Y29uc3Qgc3RydWN0IHY0bDJfaW9jdGxfb3BzIHRpbWJsb2dpd19pb2N0bF9vcHMgPSB7CisJLnZpZGlvY19xdWVyeWNhcAkJPSB0aW1ibG9naXdfcXVlcnljYXAsCisJLnZpZGlvY19lbnVtX2ZtdF92aWRfY2FwCT0gdGltYmxvZ2l3X2VudW1fZm10LAorCS52aWRpb2NfZ19mbXRfdmlkX2NhcAkJPSB0aW1ibG9naXdfZ19mbXQsCisJLnZpZGlvY190cnlfZm10X3ZpZF9jYXAJCT0gdGltYmxvZ2l3X3RyeV9mbXQsCisJLnZpZGlvY19zX2ZtdF92aWRfY2FwCQk9IHRpbWJsb2dpd19zX2ZtdCwKKwkudmlkaW9jX2dfcGFybQkJCT0gdGltYmxvZ2l3X2dfcGFybSwKKwkudmlkaW9jX3JlcWJ1ZnMJCQk9IHRpbWJsb2dpd19yZXFidWZzLAorCS52aWRpb2NfcXVlcnlidWYJCT0gdGltYmxvZ2l3X3F1ZXJ5YnVmLAorCS52aWRpb2NfcWJ1ZgkJCT0gdGltYmxvZ2l3X3FidWYsCisJLnZpZGlvY19kcWJ1ZgkJCT0gdGltYmxvZ2l3X2RxYnVmLAorCS52aWRpb2NfZ19zdGQJCQk9IHRpbWJsb2dpd19nX3N0ZCwKKwkudmlkaW9jX3Nfc3RkCQkJPSB0aW1ibG9naXdfc19zdGQsCisJLnZpZGlvY19lbnVtX2lucHV0CQk9IHRpbWJsb2dpd19lbnVtaW5wdXQsCisJLnZpZGlvY19nX2lucHV0CQkJPSB0aW1ibG9naXdfZ19pbnB1dCwKKwkudmlkaW9jX3NfaW5wdXQJCQk9IHRpbWJsb2dpd19zX2lucHV0LAorCS52aWRpb2Nfc3RyZWFtb24JCT0gdGltYmxvZ2l3X3N0cmVhbW9uLAorCS52aWRpb2Nfc3RyZWFtb2ZmCQk9IHRpbWJsb2dpd19zdHJlYW1vZmYsCisJLnZpZGlvY19xdWVyeXN0ZAkJPSB0aW1ibG9naXdfcXVlcnlzdGQsCisJLnZpZGlvY19lbnVtX2ZyYW1lc2l6ZXMJCT0gdGltYmxvZ2l3X2VudW1fZnJhbWVzaXplcywKK307CisKK3N0YXRpYyBfX2RldmluaXRjb25zdCBzdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgdGltYmxvZ2l3X2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IHRpbWJsb2dpd19vcGVuLAorCS5yZWxlYXNlCT0gdGltYmxvZ2l3X2Nsb3NlLAorCS51bmxvY2tlZF9pb2N0bAkJPSB2aWRlb19pb2N0bDIsIC8qIFY0TDIgaW9jdGwgaGFuZGxlciAqLworCS5tbWFwCQk9IHRpbWJsb2dpd19tbWFwLAorCS5yZWFkCQk9IHRpbWJsb2dpd19yZWFkLAorCS5wb2xsCQk9IHRpbWJsb2dpd19wb2xsLAorfTsKKworc3RhdGljIF9fZGV2aW5pdGNvbnN0IHN0cnVjdCB2aWRlb19kZXZpY2UgdGltYmxvZ2l3X3RlbXBsYXRlID0geworCS5uYW1lCQk9IFRJTUJMT0dJV0lOX05BTUUsCisJLmZvcHMJCT0gJnRpbWJsb2dpd19mb3BzLAorCS5pb2N0bF9vcHMJPSAmdGltYmxvZ2l3X2lvY3RsX29wcywKKwkucmVsZWFzZQk9IHZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5LAorCS5taW5vcgkJPSAtMSwKKwkudHZub3Jtcwk9IFY0TDJfU1REX1BBTCB8IFY0TDJfU1REX05UU0MKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHRpbWJsb2dpd19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWludCBlcnI7CisJc3RydWN0IHRpbWJsb2dpdyAqbHcgPSBOVUxMOworCXN0cnVjdCB0aW1iX3ZpZGVvX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKKwlpZiAoIXBkYXRhKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIk5vIHBsYXRmb3JtIGRhdGFcbiIpOworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIGVycjsKKwl9CisKKwlpZiAoIXBkYXRhLT5lbmNvZGVyLm1vZHVsZV9uYW1lKQorCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiUnVubmluZyB3aXRob3V0IGRlY29kZXJcbiIpOworCisJbHcgPSBremFsbG9jKHNpemVvZigqbHcpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWx3KSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyOworCX0KKworCWlmIChwZGV2LT5kZXYucGFyZW50KQorCQlsdy0+ZGV2ID0gcGRldi0+ZGV2LnBhcmVudDsKKwllbHNlCisJCWx3LT5kZXYgPSAmcGRldi0+ZGV2OworCisJbWVtY3B5KCZsdy0+cGRhdGEsIHBkYXRhLCBzaXplb2YobHctPnBkYXRhKSk7CisKKwltdXRleF9pbml0KCZsdy0+bG9jayk7CisKKwlsdy0+dmlkZW9fZGV2ID0gdGltYmxvZ2l3X3RlbXBsYXRlOworCisJc3RybGNweShsdy0+djRsMl9kZXYubmFtZSwgRFJJVkVSX05BTUUsIHNpemVvZihsdy0+djRsMl9kZXYubmFtZSkpOworCWVyciA9IHY0bDJfZGV2aWNlX3JlZ2lzdGVyKE5VTEwsICZsdy0+djRsMl9kZXYpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX3JlZ2lzdGVyOworCisJbHctPnZpZGVvX2Rldi52NGwyX2RldiA9ICZsdy0+djRsMl9kZXY7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBsdyk7CisJdmlkZW9fc2V0X2RydmRhdGEoJmx3LT52aWRlb19kZXYsIGx3KTsKKworCWVyciA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmbHctPnZpZGVvX2RldiwgVkZMX1RZUEVfR1JBQkJFUiwgMCk7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJFcnJvciByZWcgdmlkZW86ICVkXG4iLCBlcnIpOworCQlnb3RvIGVycl9yZXF1ZXN0OworCX0KKworCisJcmV0dXJuIDA7CisKK2Vycl9yZXF1ZXN0OgorCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJmx3LT52NGwyX2Rldik7CitlcnJfcmVnaXN0ZXI6CisJa2ZyZWUobHcpOworZXJyOgorCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlcjogJWRcbiIsIGVycik7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCB0aW1ibG9naXdfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHRpbWJsb2dpdyAqbHcgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKCZsdy0+dmlkZW9fZGV2KTsKKworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJmx3LT52NGwyX2Rldik7CisKKwlrZnJlZShsdyk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB0aW1ibG9naXdfcGxhdGZvcm1fZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCT0gRFJJVkVSX05BTUUsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlCQk9IHRpbWJsb2dpd19wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHRpbWJsb2dpd19yZW1vdmUpLAorfTsKKworLyogTW9kdWxlIGZ1bmN0aW9ucyAqLworCitzdGF0aWMgaW50IF9faW5pdCB0aW1ibG9naXdfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnRpbWJsb2dpd19wbGF0Zm9ybV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdGltYmxvZ2l3X2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdGltYmxvZ2l3X3BsYXRmb3JtX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHRpbWJsb2dpd19pbml0KTsKK21vZHVsZV9leGl0KHRpbWJsb2dpd19leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKFRJTUJMT0dJV0lOX05BTUUpOworTU9EVUxFX0FVVEhPUigiUGVsYWdpY29yZSBBQiA8aW5mb0BwZWxhZ2ljb3JlLmNvbT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06IkRSSVZFUl9OQU1FKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGxnMjMwMC9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby90bGcyMzAwL0tjb25maWcKaW5kZXggMTY4NmViZi4uNjQ1ZDkxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90bGcyMzAwL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90bGcyMzAwL0tjb25maWcKQEAgLTEsOSArMSw5IEBACiBjb25maWcgVklERU9fVExHMjMwMAogCXRyaXN0YXRlICJUZWxlZ2VudCBUTEcyMzAwIFVTQiB2aWRlbyBjYXB0dXJlIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBWSURFT19ERVYgJiYgSTJDICYmIElOUFVUICYmIFNORCAmJiBEVkJfQ09SRQorCWRlcGVuZHMgb24gVklERU9fREVWICYmIEkyQyAmJiBTTkQgJiYgRFZCX0NPUkUKIAlzZWxlY3QgVklERU9fVFVORVIKIAlzZWxlY3QgVklERU9fVFZFRVBST00KLQlkZXBlbmRzIG9uIFZJREVPX0lSCisJZGVwZW5kcyBvbiBSQ19DT1JFCiAJc2VsZWN0IFZJREVPQlVGX1ZNQUxMT0MKIAlzZWxlY3QgU05EX1BDTQogCXNlbGVjdCBWSURFT0JVRl9EVkIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGxnMjMwMC9wZC1tYWluLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RsZzIzMDAvcGQtbWFpbi5jCmluZGV4IGM5MTQyNGMuLjk5YzgxYTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGxnMjMwMC9wZC1tYWluLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90bGcyMzAwL3BkLW1haW4uYwpAQCAtNDUyLDcgKzQ1Miw4IEBACiAKIAlkZXZpY2VfaW5pdF93YWtldXAoJnVkZXYtPmRldiwgMSk7CiAjaWZkZWYgQ09ORklHX1BNCi0JcGQtPnVkZXYtPmF1dG9zdXNwZW5kX2RlbGF5ID0gSFogKiBQTV9TVVNQRU5EX0RFTEFZOworCXBtX3J1bnRpbWVfc2V0X2F1dG9zdXNwZW5kX2RlbGF5KCZwZC0+dWRldi0+ZGV2LAorCQkJMTAwMCAqIFBNX1NVU1BFTkRfREVMQVkpOwogCXVzYl9lbmFibGVfYXV0b3N1c3BlbmQocGQtPnVkZXYpOwogCiAJaWYgKGluX2hpYmVybmF0aW9uKHBkKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby9LY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZmE3ZmM2Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vS2NvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLWNvbmZpZyBWSURFT19VU0JWSURFTwotCXRyaXN0YXRlCi0KLWNvbmZpZyBVU0JfVklDQU0KLQl0cmlzdGF0ZSAiVVNCIDNjb20gSG9tZUNvbm5lY3QgKGFrYSB2aWNhbSkgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIFZJREVPX1Y0TDEgJiYgRVhQRVJJTUVOVEFMCi0Jc2VsZWN0IFZJREVPX1VTQlZJREVPCi0JLS0taGVscC0tLQotCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSAzY29tIGhvbWVjb25uZWN0IGNhbWVyYSAodmljYW0pLgotCi0JICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB2aWNhbS4KLQotY29uZmlnIFVTQl9JQk1DQU0KLQl0cmlzdGF0ZSAiVVNCIElCTSAoWGlybGluaykgQy1pdCBDYW1lcmEgc3VwcG9ydCAoREVQUkVDQVRFRCkiCi0JZGVwZW5kcyBvbiBWSURFT19WNEwxCi0Jc2VsZWN0IFZJREVPX1VTQlZJREVPCi0JLS0taGVscC0tLQotCSAgVGhpcyBkcml2ZXIgaXMgREVQUkVDQVRFRCBwbGVhc2UgdXNlIHRoZSBnc3BjYSB4aXJsaW5rX2NpdCBtb2R1bGUKLQkgIGluc3RlYWQuCi0KLQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gY29ubmVjdCBhIElCTSAiQy1JdCIgY2FtZXJhLCBhbHNvIGtub3duIGFzCi0JICAiWGlybGluayBQQyBDYW1lcmEiIHRvIHlvdXIgY29tcHV0ZXIncyBVU0IgcG9ydC4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgaWJtY2FtLgotCi0JICBUaGlzIGNhbWVyYSBoYXMgc2V2ZXJhbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2hpY2gKLQkgIGNhbiBiZSBzcGVjaWZpZWQgd2hlbiB5b3UgbG9hZCB0aGUgbW9kdWxlLiBSZWFkCi0JICA8ZmlsZTpEb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2libWNhbS50eHQ+IHRvIGxlYXJuIG1vcmUuCi0KLWNvbmZpZyBVU0JfS09OSUNBV0MKLQl0cmlzdGF0ZSAiVVNCIEtvbmljYSBXZWJjYW0gc3VwcG9ydCAoREVQUkVDQVRFRCkiCi0JZGVwZW5kcyBvbiBWSURFT19WNEwxCi0Jc2VsZWN0IFZJREVPX1VTQlZJREVPCi0JLS0taGVscC0tLQotCSAgVGhpcyBkcml2ZXIgaXMgREVQUkVDQVRFRCAoYW5kIGtub3duIHRvIGNyYXNoKSBwbGVhc2UgdXNlIHRoZQotCSAgZ3NwY2Ega29uaWNhIG1vZHVsZSBpbnN0ZWFkLgotCi0JICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIHdlYmNhbXMgYmFzZWQgb24gYSBLb25pY2EKLQkgIGNoaXBzZXQuIFRoaXMgaXMga25vd24gdG8gd29yayB3aXRoIHRoZSBJbnRlbCBZQzc2IHdlYmNhbS4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQga29uaWNhd2MuCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjUyZWI4Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLW9iai0kKENPTkZJR19WSURFT19VU0JWSURFTykgICAgKz0gdXNidmlkZW8ubwotb2JqLSQoQ09ORklHX1VTQl9JQk1DQU0pICAgICAgICArPSBpYm1jYW0ubyB1bHRyYWNhbS5vCi1vYmotJChDT05GSUdfVVNCX0tPTklDQVdDKSAgICAgICs9IGtvbmljYXdjLm8KLW9iai0kKENPTkZJR19VU0JfVklDQU0pICAgICAgICAgKz0gdmljYW0ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby9pYm1jYW0uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vaWJtY2FtLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwODU0OTYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby9pYm1jYW0uYworKysgL2Rldi9udWxsCkBAIC0xLDM5NzcgKzAsMCBAQAotLyoKLSAqIFVTQiBJQk0gQy1JdCBWaWRlbyBDYW1lcmEgZHJpdmVyCi0gKgotICogU3VwcG9ydHMgWGlybGluayBDLUl0IFZpZGVvIENhbWVyYSwgSUJNIFBDIENhbWVyYSwKLSAqIElCTSBOZXRDYW1lcmEgYW5kIFZlbyBTdGluZ3JheS4KLSAqCi0gKiBUaGlzIGRyaXZlciBpcyBiYXNlZCBvbiBlYXJsaWVyIHdvcmsgb2Y6Ci0gKgotICogKEMpIENvcHlyaWdodCAxOTk5IEpvaGFubmVzIEVyZGZlbHQKLSAqIChDKSBDb3B5cmlnaHQgMTk5OSBSYW5keSBEdW5sYXAKLSAqCi0gKiA1LzI0LzAwIFJlbW92ZWQgb3B0aW9uYWwgKGFuZCB1bm5lY2Vzc2FyeSkgbG9ja2luZyBvZiB0aGUgZHJpdmVyIHdoaWxlCi0gKiB0aGUgZGV2aWNlIHJlbWFpbnMgcGx1Z2dlZCBpbi4gQ29ycmVjdGVkIHJhY2UgY29uZGl0aW9ucyBpbiBpYm1jYW1fb3BlbgotICogYW5kIGlibWNhbV9wcm9iZSgpIHJvdXRpbmVzIHVzaW5nIHRoaXMgYXMgYSBndWlkZWxpbmU6Ci0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLQotI2luY2x1ZGUgInVzYnZpZGVvLmgiCi0KLSNkZWZpbmUgSUJNQ0FNX1ZFTkRPUl9JRAkweDA1NDUKLSNkZWZpbmUgSUJNQ0FNX1BST0RVQ1RfSUQJMHg4MDgwCi0jZGVmaW5lIE5FVENBTV9QUk9EVUNUX0lECTB4ODAwMgkvKiBJQk0gTmV0Q2FtZXJhLCBjbG9zZSB0byBtb2RlbCAyICovCi0jZGVmaW5lIFZFT184MDBDX1BST0RVQ1RfSUQJMHg4MDBDCS8qIFZlbyBTdGluZ3JheSwgcmVwYWNrYWdlZCBNb2RlbCAyICovCi0jZGVmaW5lIFZFT184MDBEX1BST0RVQ1RfSUQJMHg4MDBECS8qIFZlbyBTdGluZ3JheSwgcmVwYWNrYWdlZCBNb2RlbCA0ICovCi0KLSNkZWZpbmUgTUFYX0lCTUNBTQkJNAkvKiBIb3cgbWFueSBkZXZpY2VzIHdlIGFsbG93IHRvIGNvbm5lY3QgKi8KLSNkZWZpbmUgVVNFU19JQk1DQU1fUFVUUElYRUwgICAgMCAgICAgICAvKiAwPUZhc3Qvb29wcyAxPVNsb3cvc2VjdXJlICovCi0KLS8qIEhlYWRlciBzaWduYXR1cmVzICovCi0KLS8qIE1vZGVsIDEgaGVhZGVyOiAwMCBGRiAwMCB4eCAqLwotI2RlZmluZSBIRFJTSUdfTU9ERUwxXzEyOHg5NgkweDA2CS8qIFUgWSBWIFkgLi4uICovCi0jZGVmaW5lIEhEUlNJR19NT0RFTDFfMTc2eDE0NAkweDBlCS8qIFUgWSBWIFkgLi4uICovCi0jZGVmaW5lIEhEUlNJR19NT0RFTDFfMzUyeDI4OAkweDAwCS8qIFYgWSBVIFkgLi4uICovCi0KLSNkZWZpbmUJSUJNQ0FNX01PREVMXzEJMQkvKiBYVlAtNTAxLCAzIGludGVyZmFjZXMsIHJldi4gMC4wMiAqLwotI2RlZmluZSBJQk1DQU1fTU9ERUxfMgkyCS8qIEtTWC1YOTkwMywgMiBpbnRlcmZhY2VzLCByZXYuIDMuMGEgKi8KLSNkZWZpbmUgSUJNQ0FNX01PREVMXzMJMwkvKiBLU1gtWDk5MDIsIDIgaW50ZXJmYWNlcywgcmV2LiAzLjAxICovCi0jZGVmaW5lCUlCTUNBTV9NT0RFTF80CTQJLyogSUJNIE5ldENhbWVyYSwgMDU0NS84MDAyLzMuMGEgKi8KLQotLyogVmlkZW8gc2l6ZXMgc3VwcG9ydGVkICovCi0jZGVmaW5lCVZJREVPU0laRV8xMjh4OTYJVklERU9TSVpFKDEyOCwgOTYpCi0jZGVmaW5lCVZJREVPU0laRV8xNzZ4MTQ0CVZJREVPU0laRSgxNzYsMTQ0KQotI2RlZmluZQlWSURFT1NJWkVfMzUyeDI4OAlWSURFT1NJWkUoMzUyLDI4OCkKLSNkZWZpbmUJVklERU9TSVpFXzMyMHgyNDAJVklERU9TSVpFKDMyMCwyNDApCi0jZGVmaW5lCVZJREVPU0laRV8zNTJ4MjQwCVZJREVPU0laRSgzNTIsMjQwKQotI2RlZmluZQlWSURFT1NJWkVfNjQweDQ4MAlWSURFT1NJWkUoNjQwLDQ4MCkKLSNkZWZpbmUJVklERU9TSVpFXzE2MHgxMjAJVklERU9TSVpFKDE2MCwxMjApCi0KLS8qIFZpZGVvIHNpemVzIHN1cHBvcnRlZCAqLwotZW51bSB7Ci0JU0laRV8xMjh4OTYgPSAwLAotCVNJWkVfMTYweDEyMCwKLQlTSVpFXzE3NngxNDQsCi0JU0laRV8zMjB4MjQwLAotCVNJWkVfMzUyeDI0MCwKLQlTSVpFXzM1MngyODgsCi0JU0laRV82NDB4NDgwLAotCS8qIEFkZC9yZW1vdmUvcmVhcnJhbmdlIGl0ZW1zIGJlZm9yZSB0aGlzIGxpbmUgKi8KLQlTSVpFX0xhc3RJdGVtCi19OwotCi0vKgotICogVGhpcyBzdHJ1Y3R1cmUgbGl2ZXMgaW4gdXZkLT51c2VyIGZpZWxkLgotICovCi10eXBlZGVmIHN0cnVjdCB7Ci0JaW50IGluaXRpYWxpemVkOwkvKiBIYWQgd2UgYWxyZWFkeSBzZW50IGluaXQgc2VxdWVuY2U/ICovCi0JaW50IGNhbWVyYV9tb2RlbDsJLyogV2hhdCB0eXBlIG9mIElCTSBjYW1lcmEgd2UgZ290PyAqLwotCWludCBoYXNfaGRyOwotfSBpYm1jYW1fdDsKLSNkZWZpbmUJSUJNQ0FNX1QodXZkKQkoKGlibWNhbV90ICopKCh1dmQpLT51c2VyX2RhdGEpKQotCi1zdGF0aWMgc3RydWN0IHVzYnZpZGVvICpjYW1zOwotCi1zdGF0aWMgaW50IGRlYnVnOwotCi1zdGF0aWMgaW50IGZsYWdzOyAvKiA9IEZMQUdTX0RJU1BMQVlfSElOVFMgfCBGTEFHU19PVkVSTEFZX1NUQVRTOyAqLwotCi1zdGF0aWMgY29uc3QgaW50IG1pbl9jYW52YXNXaWR0aCAgPSA4Owotc3RhdGljIGNvbnN0IGludCBtaW5fY2FudmFzSGVpZ2h0ID0gNDsKLQotc3RhdGljIGludCBsaWdodGluZyA9IDE7IC8qIE1lZGl1bSAqLwotCi0jZGVmaW5lIFNIQVJQTkVTU19NSU4JMAotI2RlZmluZSBTSEFSUE5FU1NfTUFYCTYKLXN0YXRpYyBpbnQgc2hhcnBuZXNzID0gNDsgLyogTG93IG5vaXNlLCBnb29kIGRldGFpbHMgKi8KLQotI2RlZmluZSBGUkFNRVJBVEVfTUlOCTAKLSNkZWZpbmUgRlJBTUVSQVRFX01BWAk2Ci1zdGF0aWMgaW50IGZyYW1lcmF0ZSA9IC0xOwotCi1zdGF0aWMgaW50IHNpemUgPSBTSVpFXzM1MngyODg7Ci0KLS8qCi0gKiBIZXJlIHdlIGRlZmluZSBzZXZlcmFsIGluaXRpYWxpemF0aW9uIHZhcmlhYmxlcy4gVGhleSBtYXkKLSAqIGJlIHVzZWQgdG8gYXV0b21hdGljYWxseSBzZXQgY29sb3IsIGh1ZSwgYnJpZ2h0bmVzcyBhbmQKLSAqIGNvbnRyYXN0IHRvIGRlc2lyZWQgdmFsdWVzLiBUaGlzIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgaW4KLSAqIGNhc2Ugb2Ygd2ViY2FtcyAod2hpY2ggaGF2ZSBubyBjb250cm9scyBhbmQgbm8gb24tc2NyZWVuCi0gKiBvdXRwdXQpIGFuZCBhbHNvIHdoZW4gYSBjbGllbnQgVjRMIHNvZnR3YXJlIGlzIHVzZWQgdGhhdAotICogZG9lcyBub3QgaGF2ZSBzb21lIG9mIHRob3NlIGNvbnRyb2xzLiBJbiBhbnkgY2FzZSBpdCdzCi0gKiBnb29kIHRvIGhhdmUgc3RhcnR1cCB2YWx1ZXMgYXMgb3B0aW9ucy4KLSAqCi0gKiBUaGVzZSB2YWx1ZXMgYXJlIGFsbCBpbiBbMC4uMjU1XSByYW5nZS4gVGhpcyBzaW1wbGlmaWVzCi0gKiBvcGVyYXRpb24uIE5vdGUgdGhhdCBhY3R1YWwgdmFsdWVzIG9mIFY0TCB2YXJpYWJsZXMgbWF5Ci0gKiBiZSBzY2FsZWQgdXAgKGFzIG11Y2ggYXMgPDwgOCkuIFVzZXIgY2FuIHNlZSB0aGF0IG9ubHkKLSAqIG9uIG92ZXJsYXkgb3V0cHV0LCBob3dldmVyLCBvciB0aHJvdWdoIGEgVjRMIGNsaWVudC4KLSAqLwotc3RhdGljIGludCBpbml0X2JyaWdodG5lc3MgPSAxMjg7Ci1zdGF0aWMgaW50IGluaXRfY29udHJhc3QgPSAxOTI7Ci1zdGF0aWMgaW50IGluaXRfY29sb3IgPSAxMjg7Ci1zdGF0aWMgaW50IGluaXRfaHVlID0gMTI4Owotc3RhdGljIGludCBodWVfY29ycmVjdGlvbiA9IDEyODsKLQotLyogU2V0dGluZ3MgZm9yIGNhbWVyYSBtb2RlbCAyICovCi1zdGF0aWMgaW50IGluaXRfbW9kZWwyX3JnMiA9IC0xOwotc3RhdGljIGludCBpbml0X21vZGVsMl9zYXQgPSAtMTsKLXN0YXRpYyBpbnQgaW5pdF9tb2RlbDJfeWIgPSAtMTsKLQotLyogMDEuMDEuMDggLSBBZGRlZCBmb3IgUkNBIHZpZGVvIGluIHN1cHBvcnQgLUxPICovCi0vKiBTZXR0aW5ncyBmb3IgY2FtZXJhIG1vZGVsIDMgKi8KLXN0YXRpYyBpbnQgaW5pdF9tb2RlbDNfaW5wdXQ7Ci0KLW1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBsZXZlbDogMC05IChkZWZhdWx0PTApIik7Ci1tb2R1bGVfcGFyYW0oZmxhZ3MsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGZsYWdzLCAiQml0ZmllbGQ6IDA9VklESU9DU1lOQywgMT1CL1csIDI9c2hvdyBoaW50cywgMz1zaG93IHN0YXRzLCA0PXRlc3QgcGF0dGVybiwgNT1zZXBhcmF0ZSBmcmFtZXMsIDY9Y2xlYW4gZnJhbWVzIik7Ci1tb2R1bGVfcGFyYW0oZnJhbWVyYXRlLCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhmcmFtZXJhdGUsICJGcmFtZXJhdGUgc2V0dGluZzogMD1zbG93ZXN0LCA2PWZhc3Rlc3QgKGRlZmF1bHQ9MikiKTsKLW1vZHVsZV9wYXJhbShsaWdodGluZywgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MobGlnaHRpbmcsICJQaG90b3NlbnNpdGl2aXR5OiAwPWJyaWdodCwgMT1tZWRpdW0gKGRlZmF1bHQpLCAyPWxvdyBsaWdodCIpOwotbW9kdWxlX3BhcmFtKHNoYXJwbmVzcywgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0Moc2hhcnBuZXNzLCAiTW9kZWwxIG5vaXNlIHJlZHVjdGlvbjogMD1zbW9vdGgsIDY9c2hhcnAgKGRlZmF1bHQ9NCkiKTsKLW1vZHVsZV9wYXJhbShzaXplLCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhzaXplLCAiSW1hZ2Ugc2l6ZTogMD0xMjh4OTYgMT0xNjB4MTIwIDI9MTc2eDE0NCAzPTMyMHgyNDAgND0zNTJ4MjQwIDU9MzUyeDI4OCA2PTY0MHg0ODAgIChkZWZhdWx0PTUpIik7Ci1tb2R1bGVfcGFyYW0oaW5pdF9icmlnaHRuZXNzLCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhpbml0X2JyaWdodG5lc3MsICJCcmlnaHRuZXNzIHByZWNvbmZpZ3VyYXRpb246IDAtMjU1IChkZWZhdWx0PTEyOCkiKTsKLW1vZHVsZV9wYXJhbShpbml0X2NvbnRyYXN0LCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhpbml0X2NvbnRyYXN0LCAiQ29udHJhc3QgcHJlY29uZmlndXJhdGlvbjogMC0yNTUgKGRlZmF1bHQ9MTkyKSIpOwotbW9kdWxlX3BhcmFtKGluaXRfY29sb3IsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGluaXRfY29sb3IsICJDb2xvciBwcmVjb25maWd1cmF0aW9uOiAwLTI1NSAoZGVmYXVsdD0xMjgpIik7Ci1tb2R1bGVfcGFyYW0oaW5pdF9odWUsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGluaXRfaHVlLCAiSHVlIHByZWNvbmZpZ3VyYXRpb246IDAtMjU1IChkZWZhdWx0PTEyOCkiKTsKLW1vZHVsZV9wYXJhbShodWVfY29ycmVjdGlvbiwgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoaHVlX2NvcnJlY3Rpb24sICJZVVYgY29sb3JzcGFjZSByZWd1bGF0aW9uOiAwLTI1NSAoZGVmYXVsdD0xMjgpIik7Ci0KLW1vZHVsZV9wYXJhbShpbml0X21vZGVsMl9yZzIsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGluaXRfbW9kZWwyX3JnMiwgIk1vZGVsMiBwcmVjb25maWd1cmF0aW9uOiAwLTI1NSAoZGVmYXVsdD00NykiKTsKLW1vZHVsZV9wYXJhbShpbml0X21vZGVsMl9zYXQsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGluaXRfbW9kZWwyX3NhdCwgIk1vZGVsMiBwcmVjb25maWd1cmF0aW9uOiAwLTI1NSAoZGVmYXVsdD01MikiKTsKLW1vZHVsZV9wYXJhbShpbml0X21vZGVsMl95YiwgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoaW5pdF9tb2RlbDJfeWIsICJNb2RlbDIgcHJlY29uZmlndXJhdGlvbjogMC0yNTUgKGRlZmF1bHQ9MTYwKSIpOwotCi0vKiAwMS4wMS4wOCAtIEFkZGVkIGZvciBSQ0EgdmlkZW8gaW4gc3VwcG9ydCAtTE8gKi8KLW1vZHVsZV9wYXJhbShpbml0X21vZGVsM19pbnB1dCwgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoaW5pdF9tb2RlbDNfaW5wdXQsICJNb2RlbDMgaW5wdXQ6IDA9Q0NEIDE9UkNBIik7Ci0KLU1PRFVMRV9BVVRIT1IgKCJEbWl0cmkiKTsKLU1PRFVMRV9ERVNDUklQVElPTiAoIklCTS9YaXJsaW5rIEMtaXQgVVNCIENhbWVyYSBEcml2ZXIgZm9yIExpbnV4IChjKSAyMDAwIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLS8qIFN0aWxsIG15c3RlcmlvdXMgaTJjIGNvbW1hbmRzICovCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgdW5rbm93bl84OCA9IDB4MDA4ODsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCB1bmtub3duXzg5ID0gMHgwMDg5Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGJyaWdodF8zeFszXSA9IHsgMHgwMDMxLCAweDAwMzIsIDB4MDAzMyB9Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGNvbnRyYXN0XzE0ID0gMHgwMDE0Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGxpZ2h0XzI3ID0gMHgwMDI3Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IHNoYXJwXzEzID0gMHgwMDEzOwotCi0vKiBpMmMgY29tbWFuZHMgZm9yIE1vZGVsIDIgY2FtZXJhcyAqLwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG1vZDJfYnJpZ2h0bmVzcyA9IDB4MDAxYTsJCS8qICQ1YiAuLiAkZWU7IGRlZmF1bHQ9JDVhICovCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbW9kMl9zZXRfZnJhbWVyYXRlID0gMHgwMDFjOwkvKiAwIChmYXN0KS4uICQxRiAoc2xvdykgKi8KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBtb2QyX2NvbG9yX2JhbGFuY2VfcmcyID0gMHgwMDFlOwkvKiAwIChyZWQpIC4uICQ3RiAoZ3JlZW4pICovCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbW9kMl9zYXR1cmF0aW9uID0gMHgwMDIwOwkJLyogMCAoYi93KSAtICQ3RiAoZnVsbCBjb2xvcikgKi8KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBtb2QyX2NvbG9yX2JhbGFuY2VfeWIgPSAweDAwMjI7CS8qIDAuLiQ3RiwgJDUwIGlzIGFib3V0IHJpZ2h0ICovCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbW9kMl9odWUgPSAweDAwMjQ7CQkJLyogMC4uJDdGLCAkNzAgaXMgYWJvdXQgcmlnaHQgKi8KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBtb2QyX3NlbnNpdGl2aXR5ID0gMHgwMDI4OwkJLyogMCAobWluKSAuLiAkMUYgKG1heCkgKi8KLQotc3RydWN0IHN0cnVjdF9pbml0RGF0YSB7Ci0JdW5zaWduZWQgY2hhciByZXE7Ci0JdW5zaWduZWQgc2hvcnQgdmFsdWU7Ci0JdW5zaWduZWQgc2hvcnQgaW5kZXg7Ci19OwotCi0vKgotICogaWJtY2FtX3NpemVfdG9fdmlkZW9zaXplKCkKLSAqCi0gKiBUaGlzIHByb2NlZHVyZSBjb252ZXJ0cyBtb2R1bGUgb3B0aW9uICdzaXplJyBpbnRvIHRoZSBhY3R1YWwKLSAqIHZpZGVvc2l6ZV90IHRoYXQgZGVmaW5lcyB0aGUgaW1hZ2Ugc2l6ZSBpbiBwaXhlbHMuIFdlIG5lZWQKLSAqIHNpbXBsaWZpZWQgJ3NpemUnIGJlY2F1c2UgdXNlciB3YW50cyBhIHNpbXBsZSBlbnVtZXJhdGVkIGxpc3QKLSAqIG9mIGNob2ljZXMsIG5vdCBhbiBpbmZpbml0ZSBzZXQgb2YgcG9zc2liaWxpdGllcy4KLSAqLwotc3RhdGljIHZpZGVvc2l6ZV90IGlibWNhbV9zaXplX3RvX3ZpZGVvc2l6ZShpbnQgc2l6ZSkKLXsKLQl2aWRlb3NpemVfdCB2cyA9IFZJREVPU0laRV8zNTJ4Mjg4OwotCVJFU1RSSUNUX1RPX1JBTkdFKHNpemUsIDAsIChTSVpFX0xhc3RJdGVtLTEpKTsKLQlzd2l0Y2ggKHNpemUpIHsKLQljYXNlIFNJWkVfMTI4eDk2OgotCQl2cyA9IFZJREVPU0laRV8xMjh4OTY7Ci0JCWJyZWFrOwotCWNhc2UgU0laRV8xNjB4MTIwOgotCQl2cyA9IFZJREVPU0laRV8xNjB4MTIwOwotCQlicmVhazsKLQljYXNlIFNJWkVfMTc2eDE0NDoKLQkJdnMgPSBWSURFT1NJWkVfMTc2eDE0NDsKLQkJYnJlYWs7Ci0JY2FzZSBTSVpFXzMyMHgyNDA6Ci0JCXZzID0gVklERU9TSVpFXzMyMHgyNDA7Ci0JCWJyZWFrOwotCWNhc2UgU0laRV8zNTJ4MjQwOgotCQl2cyA9IFZJREVPU0laRV8zNTJ4MjQwOwotCQlicmVhazsKLQljYXNlIFNJWkVfMzUyeDI4ODoKLQkJdnMgPSBWSURFT1NJWkVfMzUyeDI4ODsKLQkJYnJlYWs7Ci0JY2FzZSBTSVpFXzY0MHg0ODA6Ci0JCXZzID0gVklERU9TSVpFXzY0MHg0ODA7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWVycigic2l6ZT0lZC4gaXMgbm90IHZhbGlkIiwgc2l6ZSk7Ci0JCWJyZWFrOwotCX0KLQlyZXR1cm4gdnM7Ci19Ci0KLS8qCi0gKiBpYm1jYW1fZmluZF9oZWFkZXIoKQotICoKLSAqIExvY2F0ZSBvbmUgb2Ygc3VwcG9ydGVkIGhlYWRlciBtYXJrZXJzIGluIHRoZSBxdWV1ZS4KLSAqIE9uY2UgZm91bmQsIHJlbW92ZSBhbGwgcHJlY2VkaW5nIGJ5dGVzIEFORCB0aGUgbWFya2VyICg0IGJ5dGVzKQotICogZnJvbSB0aGUgZGF0YSBwdW1wIHF1ZXVlLiBXaGF0ZXZlciBmb2xsb3dzIG11c3QgYmUgdmlkZW8gbGluZXMuCi0gKgotICogSGlzdG9yeToKLSAqIDEvMjEvMDAgIENyZWF0ZWQuCi0gKi8KLXN0YXRpYyBlbnVtIFBhcnNlU3RhdGUgaWJtY2FtX2ZpbmRfaGVhZGVyKHN0cnVjdCB1dmQgKnV2ZCkgLyogRklYTUU6IEFkZCBmcmFtZSBoZXJlICovCi17Ci0Jc3RydWN0IHVzYnZpZGVvX2ZyYW1lICpmcmFtZTsKLQlpYm1jYW1fdCAqaWNhbTsKLQotCWlmICgodXZkLT5jdXJmcmFtZSkgPCAwIHx8ICh1dmQtPmN1cmZyYW1lID49IFVTQlZJREVPX05VTUZSQU1FUykpIHsKLQkJZXJyKCJpYm1jYW1fZmluZF9oZWFkZXI6IElsbGVnYWwgZnJhbWUgJWQuIiwgdXZkLT5jdXJmcmFtZSk7Ci0JCXJldHVybiBzY2FuX0VuZFBhcnNlOwotCX0KLQlpY2FtID0gSUJNQ0FNX1QodXZkKTsKLQlhc3NlcnQoaWNhbSAhPSBOVUxMKTsKLQlmcmFtZSA9ICZ1dmQtPmZyYW1lW3V2ZC0+Y3VyZnJhbWVdOwotCWljYW0tPmhhc19oZHIgPSAwOwotCXN3aXRjaCAoaWNhbS0+Y2FtZXJhX21vZGVsKSB7Ci0JY2FzZSBJQk1DQU1fTU9ERUxfMToKLQl7Ci0JCWNvbnN0IGludCBtYXJrZXJfbGVuID0gNDsKLQkJd2hpbGUgKFJpbmdRdWV1ZV9HZXRMZW5ndGgoJnV2ZC0+ZHApID49IG1hcmtlcl9sZW4pIHsKLQkJCWlmICgoUklOR19RVUVVRV9QRUVLKCZ1dmQtPmRwLCAwKSA9PSAweDAwKSAmJgotCQkJICAgIChSSU5HX1FVRVVFX1BFRUsoJnV2ZC0+ZHAsIDEpID09IDB4RkYpICYmCi0JCQkgICAgKFJJTkdfUVVFVUVfUEVFSygmdXZkLT5kcCwgMikgPT0gMHgwMCkpCi0JCQl7Ci0jaWYgMAkJCQkvKiBUaGlzIGNvZGUgaGVscHMgdG8gZGV0ZWN0IG5ldyBmcmFtZSBtYXJrZXJzICovCi0JCQkJZGV2X2luZm8oJnV2ZC0+ZGV2LT5kZXYsCi0JCQkJCSAiSGVhZGVyIHNpZzogMDAgRkYgMDAgJTAyWFxuIiwKLQkJCQkJIFJJTkdfUVVFVUVfUEVFSygmdXZkLT5kcCwgMykpOwotI2VuZGlmCi0JCQkJZnJhbWUtPmhlYWRlciA9IFJJTkdfUVVFVUVfUEVFSygmdXZkLT5kcCwgMyk7Ci0JCQkJaWYgKChmcmFtZS0+aGVhZGVyID09IEhEUlNJR19NT0RFTDFfMTI4eDk2KSB8fAotCQkJCSAgICAoZnJhbWUtPmhlYWRlciA9PSBIRFJTSUdfTU9ERUwxXzE3NngxNDQpIHx8Ci0JCQkJICAgIChmcmFtZS0+aGVhZGVyID09IEhEUlNJR19NT0RFTDFfMzUyeDI4OCkpCi0JCQkJewotI2lmIDAKLQkJCQkJZGV2X2luZm8oJnV2ZC0+ZGV2LT5kZXYsCi0JCQkJCQkgIkhlYWRlciBmb3VuZC5cbiIpOwotI2VuZGlmCi0JCQkJCVJJTkdfUVVFVUVfREVRVUVVRV9CWVRFUygmdXZkLT5kcCwgbWFya2VyX2xlbik7Ci0JCQkJCWljYW0tPmhhc19oZHIgPSAxOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCQkvKiBJZiB3ZSBhcmUgc3RpbGwgaGVyZSB0aGVuIHRoaXMgZG9lc24ndCBsb29rIGxpa2UgYSBoZWFkZXIgKi8KLQkJCVJJTkdfUVVFVUVfREVRVUVVRV9CWVRFUygmdXZkLT5kcCwgMSk7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCWNhc2UgSUJNQ0FNX01PREVMXzI6Ci1jYXNlIElCTUNBTV9NT0RFTF80OgotCXsKLQkJaW50IG1hcmtlcl9sZW4gPSAwOwotCQlzd2l0Y2ggKHV2ZC0+dmlkZW9zaXplKSB7Ci0JCWNhc2UgVklERU9TSVpFXzE3NngxNDQ6Ci0JCQltYXJrZXJfbGVuID0gMTA7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCW1hcmtlcl9sZW4gPSAyOwotCQkJYnJlYWs7Ci0JCX0KLQkJd2hpbGUgKFJpbmdRdWV1ZV9HZXRMZW5ndGgoJnV2ZC0+ZHApID49IG1hcmtlcl9sZW4pIHsKLQkJCWlmICgoUklOR19RVUVVRV9QRUVLKCZ1dmQtPmRwLCAwKSA9PSAweDAwKSAmJgotCQkJICAgIChSSU5HX1FVRVVFX1BFRUsoJnV2ZC0+ZHAsIDEpID09IDB4RkYpKQotCQkJewotI2lmIDAKLQkJCQlkZXZfaW5mbygmdXZkLT5kZXYtPmRldiwgIkhlYWRlciBmb3VuZC5cbiIpOwotI2VuZGlmCi0JCQkJUklOR19RVUVVRV9ERVFVRVVFX0JZVEVTKCZ1dmQtPmRwLCBtYXJrZXJfbGVuKTsKLQkJCQlpY2FtLT5oYXNfaGRyID0gMTsKLQkJCQlmcmFtZS0+aGVhZGVyID0gSERSU0lHX01PREVMMV8xNzZ4MTQ0OwotCQkJCWJyZWFrOwotCQkJfQotCQkJLyogSWYgd2UgYXJlIHN0aWxsIGhlcmUgdGhlbiB0aGlzIGRvZXNuJ3QgbG9vayBsaWtlIGEgaGVhZGVyICovCi0JCQlSSU5HX1FVRVVFX0RFUVVFVUVfQllURVMoJnV2ZC0+ZHAsIDEpOwotCQl9Ci0JCWJyZWFrOwotCX0KLQljYXNlIElCTUNBTV9NT0RFTF8zOgotCXsJLyoKLQkJICogSGVhZGVyczogKG9uZSBwcmVjZWRlcyBldmVyeSBmcmFtZSkuIG5jPW5vIGNvbXByZXNzaW9uLAotCQkgKiBicT1iZXN0IHF1YWxpdHkgYmY9YmVzdCBmcmFtZSByYXRlLgotCQkgKgotCQkgKiAxNzZ4MTQ0OiAwMCBGRiAwMiB7IDBBPW5jIENBPWJxIEVBPWJmIH0KLQkJICogMzIweDI0MDogMDAgRkYgMDIgeyAwOD1uYyAyOD1icSA2OD1iZiB9Ci0JCSAqIDY0MHg0ODA6IDAwIEZGIDAzIHsgMDg9bmMgMjg9YnEgNjg9YmYgfQotCQkgKgotCQkgKiBCeXRlcyAnMDAgRkYnIHNlZW0gdG8gaW5kaWNhdGUgaGVhZGVyLiBPdGhlciB0d28gYnl0ZXMKLQkJICogZW5jb2RlIHRoZSBmcmFtZSB0eXBlLiBUaGlzIGlzIGEgc2V0IG9mIGJpdCBmaWVsZHMgdGhhdAotCQkgKiBlbmNvZGUgaW1hZ2Ugc2l6ZSwgY29tcHJlc3Npb24gdHlwZSBldGMuIFRoZXNlIGZpZWxkcwotCQkgKiBkbyBOT1QgY29udGFpbiBmcmFtZSBudW1iZXIgYmVjYXVzZSBhbGwgZnJhbWVzIGNhcnJ5Ci0JCSAqIHRoZSBzYW1lIGhlYWRlci4KLQkJICovCi0JCWNvbnN0IGludCBtYXJrZXJfbGVuID0gNDsKLQkJd2hpbGUgKFJpbmdRdWV1ZV9HZXRMZW5ndGgoJnV2ZC0+ZHApID49IG1hcmtlcl9sZW4pIHsKLQkJCWlmICgoUklOR19RVUVVRV9QRUVLKCZ1dmQtPmRwLCAwKSA9PSAweDAwKSAmJgotCQkJICAgIChSSU5HX1FVRVVFX1BFRUsoJnV2ZC0+ZHAsIDEpID09IDB4RkYpICYmCi0JCQkgICAgKFJJTkdfUVVFVUVfUEVFSygmdXZkLT5kcCwgMikgIT0gMHhGRikpCi0JCQl7Ci0JCQkJLyoKLQkJCQkgKiBDb21iaW5lIDIgYnl0ZXMgb2YgZnJhbWUgdHlwZSBpbnRvIG9uZQotCQkJCSAqIGVhc3kgdG8gdXNlIHZhbHVlCi0JCQkJICovCi0JCQkJdW5zaWduZWQgbG9uZyBieXRlMywgYnl0ZTQ7Ci0KLQkJCQlieXRlMyA9IFJJTkdfUVVFVUVfUEVFSygmdXZkLT5kcCwgMik7Ci0JCQkJYnl0ZTQgPSBSSU5HX1FVRVVFX1BFRUsoJnV2ZC0+ZHAsIDMpOwotCQkJCWZyYW1lLT5oZWFkZXIgPSAoYnl0ZTMgPDwgOCkgfCBieXRlNDsKLSNpZiAwCi0JCQkJZGV2X2luZm8oJnV2ZC0+ZGV2LT5kZXYsICJIZWFkZXIgZm91bmQuXG4iKTsKLSNlbmRpZgotCQkJCVJJTkdfUVVFVUVfREVRVUVVRV9CWVRFUygmdXZkLT5kcCwgbWFya2VyX2xlbik7Ci0JCQkJaWNhbS0+aGFzX2hkciA9IDE7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQkvKiBJZiB3ZSBhcmUgc3RpbGwgaGVyZSB0aGVuIHRoaXMgZG9lc24ndCBsb29rIGxpa2UgYSBoZWFkZXIgKi8KLQkJCVJJTkdfUVVFVUVfREVRVUVVRV9CWVRFUygmdXZkLT5kcCwgMSk7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLQlpZiAoIWljYW0tPmhhc19oZHIpIHsKLQkJaWYgKHV2ZC0+ZGVidWcgPiAyKQotCQkJZGV2X2luZm8oJnV2ZC0+ZGV2LT5kZXYsCi0JCQkJICJTa2lwcGluZyBmcmFtZSwgbm8gaGVhZGVyXG4iKTsKLQkJcmV0dXJuIHNjYW5fRW5kUGFyc2U7Ci0JfQotCi0JLyogSGVhZGVyIGZvdW5kICovCi0JaWNhbS0+aGFzX2hkciA9IDE7Ci0JdXZkLT5zdGF0cy5oZWFkZXJfY291bnQrKzsKLQlmcmFtZS0+c2NhbnN0YXRlID0gU2NhblN0YXRlX0xpbmVzOwotCWZyYW1lLT5jdXJsaW5lID0gMDsKLQotCWlmIChmbGFncyAmIEZMQUdTX0ZPUkNFX1RFU1RQQVRURVJOKSB7Ci0JCXVzYnZpZGVvX1Rlc3RQYXR0ZXJuKHV2ZCwgMSwgMSk7Ci0JCXJldHVybiBzY2FuX05leHRGcmFtZTsKLQl9Ci0JcmV0dXJuIHNjYW5fQ29udGludWU7Ci19Ci0KLS8qCi0gKiBpYm1jYW1fcGFyc2VfbGluZXMoKQotICoKLSAqIFBhcnNlIG9uZSBsaW5lIChpbnRlcmxhY2VkKSBmcm9tIHRoZSBidWZmZXIsIHB1dAotICogZGVjb2RlZCBSR0IgdmFsdWUgaW50byB0aGUgY3VycmVudCBmcmFtZSBidWZmZXIKLSAqIGFuZCBhZGQgdGhlIHdyaXR0ZW4gbnVtYmVyIG9mIGJ5dGVzIChSR0IpIHRvCi0gKiB0aGUgKnBjb3B5bGVuLgotICoKLSAqIEhpc3Rvcnk6Ci0gKiAyMS1KYW4tMjAwMCBDcmVhdGVkLgotICogMTItT2N0LTIwMDAgUmV3b3JrZWQgdG8gcmVmbGVjdCBpbnRlcmxhY2VkIG5hdHVyZSBvZiB0aGUgZGF0YS4KLSAqLwotc3RhdGljIGVudW0gUGFyc2VTdGF0ZSBpYm1jYW1fcGFyc2VfbGluZXMoCi0Jc3RydWN0IHV2ZCAqdXZkLAotCXN0cnVjdCB1c2J2aWRlb19mcmFtZSAqZnJhbWUsCi0JbG9uZyAqcGNvcHlsZW4pCi17Ci0JdW5zaWduZWQgY2hhciAqZjsKLQlpYm1jYW1fdCAqaWNhbTsKLQl1bnNpZ25lZCBpbnQgbGVuLCBzY2FuTGVuZ3RoLCBzY2FuSGVpZ2h0LCBvcmRlcl91diwgb3JkZXJfeWM7Ci0JaW50IHY0bF9saW5lc2l6ZTsgLyogVjRMIGxpbmUgb2Zmc2V0ICovCi0JY29uc3QgaW50IGh1ZV9jb3JyICA9ICh1dmQtPnZwaWMuaHVlIC0gMHg4MDAwKSA+PiAxMDsJLyogLTMyLi4rMzEgKi8KLQljb25zdCBpbnQgaHVlMl9jb3JyID0gKGh1ZV9jb3JyZWN0aW9uIC0gMTI4KSAvIDQ7CQkvKiAtMzIuLiszMSAqLwotCWNvbnN0IGludCBjY20gPSAxMjg7IC8qIENvbG9yIGNvcnJlY3Rpb24gbWVkaWFuIC0gc2VlIGJlbG93ICovCi0JaW50IHksIHUsIHYsIGksIGZyYW1lX2RvbmU9MCwgY29sb3JfY29ycjsKLQlzdGF0aWMgdW5zaWduZWQgY2hhciBsaW5lQnVmZmVyWzY0MCozXTsKLQl1bnNpZ25lZCBjb25zdCBjaGFyICpjaHJvbWFMaW5lLCAqbHVtYUxpbmU7Ci0KLQlhc3NlcnQodXZkICE9IE5VTEwpOwotCWFzc2VydChmcmFtZSAhPSBOVUxMKTsKLQlpY2FtID0gSUJNQ0FNX1QodXZkKTsKLQlhc3NlcnQoaWNhbSAhPSBOVUxMKTsKLQljb2xvcl9jb3JyID0gKHV2ZC0+dnBpYy5jb2xvdXIgLSAweDgwMDApID4+IDg7IC8qIC0xMjguLisxMjcgPSAtY2NtLi4rKGNjbS0xKSovCi0JUkVTVFJJQ1RfVE9fUkFOR0UoY29sb3JfY29yciwgLWNjbSwgY2NtKzEpOwotCi0JdjRsX2xpbmVzaXplID0gVklERU9TSVpFX1goZnJhbWUtPnJlcXVlc3QpICogVjRMX0JZVEVTX1BFUl9QSVhFTDsKLQotCWlmIChJQk1DQU1fVCh1dmQpLT5jYW1lcmFfbW9kZWwgPT0gSUJNQ0FNX01PREVMXzQpIHsKLQkJLyogTW9kZWwgNCBmcmFtZSBtYXJrZXJzIGRvIG5vdCBjYXJyeSBpbWFnZSBzaXplIGlkZW50aWZpY2F0aW9uICovCi0JCXN3aXRjaCAodXZkLT52aWRlb3NpemUpIHsKLQkJY2FzZSBWSURFT1NJWkVfMTI4eDk2OgotCQljYXNlIFZJREVPU0laRV8xNjB4MTIwOgotCQljYXNlIFZJREVPU0laRV8xNzZ4MTQ0OgotCQkJc2Nhbkxlbmd0aCA9IFZJREVPU0laRV9YKHV2ZC0+dmlkZW9zaXplKTsKLQkJCXNjYW5IZWlnaHQgPSBWSURFT1NJWkVfWSh1dmQtPnZpZGVvc2l6ZSk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWVycigiaWJtY2FtX3BhcnNlX2xpbmVzOiBXcm9uZyBtb2RlLiIpOwotCQkJcmV0dXJuIHNjYW5fT3V0OwotCQl9Ci0JCW9yZGVyX3ljID0gMTsJLyogb3JkZXJfeWM6IHRydWU9WWMgZmFsc2U9Y1kgKCdjJz1laXRoZXIgVSBvciBWKSAqLwotCQlvcmRlcl91diA9IDE7CS8qIEFsd2F5cyB0cnVlIGluIHRoaXMgYWxnb3JpdGhtICovCi0JfSBlbHNlIHsKLQkJc3dpdGNoIChmcmFtZS0+aGVhZGVyKSB7Ci0JCWNhc2UgSERSU0lHX01PREVMMV8xMjh4OTY6Ci0JCQlzY2FuTGVuZ3RoID0gMTI4OwotCQkJc2NhbkhlaWdodCA9IDk2OwotCQkJb3JkZXJfdXYgPSAxOwkvKiBVIFkgViBZIC4uLiAqLwotCQkJYnJlYWs7Ci0JCWNhc2UgSERSU0lHX01PREVMMV8xNzZ4MTQ0OgotCQkJc2Nhbkxlbmd0aCA9IDE3NjsKLQkJCXNjYW5IZWlnaHQgPSAxNDQ7Ci0JCQlvcmRlcl91diA9IDE7CS8qIFUgWSBWIFkgLi4uICovCi0JCQlicmVhazsKLQkJY2FzZSBIRFJTSUdfTU9ERUwxXzM1MngyODg6Ci0JCQlzY2FuTGVuZ3RoID0gMzUyOwotCQkJc2NhbkhlaWdodCA9IDI4ODsKLQkJCW9yZGVyX3V2ID0gMDsJLyogWSBWIFkgViAuLi4gKi8KLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJZXJyKCJVbmtub3duIGhlYWRlciBzaWduYXR1cmUgMDAgRkYgMDAgJTAybFgiLCBmcmFtZS0+aGVhZGVyKTsKLQkJCXJldHVybiBzY2FuX05leHRGcmFtZTsKLQkJfQotCQkvKiBvcmRlcl95YzogdHJ1ZT1ZYyBmYWxzZT1jWSAoJ2MnPWVpdGhlciBVIG9yIFYpICovCi0JCW9yZGVyX3ljID0gKElCTUNBTV9UKHV2ZCktPmNhbWVyYV9tb2RlbCA9PSBJQk1DQU1fTU9ERUxfMik7Ci0JfQotCi0JbGVuID0gc2Nhbkxlbmd0aCAqIDM7Ci0JYXNzZXJ0KGxlbiA8PSBzaXplb2YobGluZUJ1ZmZlcikpOwotCi0JLyoKLQkgKiBMaW5lcyBhcmUgb3JnYW5pemVkIHRoaXMgd2F5OgotCSAqCi0JICogSTQyMDoKLQkgKiB+fn5+Ci0JICogPHNjYW5MZW5ndGgtPgotCSAqIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCi0JICogfC0tLS0tWS0tLS0tfC0tLVVWVVZVVi4uLlVWVVYtLS0tLXwgXAotCSAqIHwtLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS18ICBcCi0JICogfDwtLSAxNzYgLS0+fDwtLS0tLS0gMTc2KjIgLS0tLS0tPnwgIFRvdGFsIDcyLiBsaW5lcyAoaW50ZXJsYWNlZCkKLQkgKiB8Li4uCSAgIC4uLiB8ICAgICAgICAuLi4gICAgICAgICAgfCAgLwotCSAqIHw8LS0gMzUyIC0tPnw8LS0tLS0tIDM1MioyIC0tLS0tLT58ICBUb3RhbCAxNDQuIGxpbmVzIChpbnRlcmxhY2VkKQotCSAqIHxfX19fX19fX19fX3xfX19fX19fX19fX19fX19fX19fX198IC8KLQkgKiAgXCAgICAgICAgICAgXAotCSAqICAgbHVtYUxpbmUgICAgY2hyb21hTGluZQotCSAqLwotCi0JLyogTWFrZSBzdXJlIHRoZXJlJ3MgZW5vdWdoIGRhdGEgZm9yIHRoZSBlbnRpcmUgbGluZSAqLwotCWlmIChSaW5nUXVldWVfR2V0TGVuZ3RoKCZ1dmQtPmRwKSA8IGxlbikKLQkJcmV0dXJuIHNjYW5fT3V0OwotCi0JLyogU3VjayBvbmUgbGluZSBvdXQgb2YgdGhlIHJpbmcgcXVldWUgKi8KLQlSaW5nUXVldWVfRGVxdWV1ZSgmdXZkLT5kcCwgbGluZUJ1ZmZlciwgbGVuKTsKLQotCS8qCi0JICogTWFrZSBzdXJlIHRoYXQgb3VyIHdyaXRpbmcgaW50byBvdXRwdXQgYnVmZmVyCi0JICogd2lsbCBub3QgZXhjZWVkIHRoZSBidWZmZXIuIE1pbmQgdGhhdCB3ZSBtYXkgd3JpdGUKLQkgKiBub3QgaW50byBjdXJyZW50IG91dHB1dCBzY2FubGluZSBidXQgaW4gc2V2ZXJhbCBhZnRlcgotCSAqIGl0IGFzIHdlbGwgKGlmIHdlIGVubGFyZ2UgaW1hZ2UgdmVydGljYWxseS4pCi0JICovCi0JaWYgKChmcmFtZS0+Y3VybGluZSArIDIpID49IFZJREVPU0laRV9ZKGZyYW1lLT5yZXF1ZXN0KSkKLQkJcmV0dXJuIHNjYW5fTmV4dEZyYW1lOwotCi0JLyoKLQkgKiBOb3cgd2UgYXJlIHN1cmUgdGhhdCBlbnRpcmUgbGluZSAocmVwcmVzZW50aW5nIGFsbCAnc2Nhbkxlbmd0aCcKLQkgKiBwaXhlbHMgZnJvbSB0aGUgY2FtZXJhKSBpcyBhdmFpbGFibGUgaW4gdGhlIGJ1ZmZlci4gV2UKLQkgKiBzdGFydCBjb3B5aW5nIHRoZSBsaW5lIGxlZnQtYWxpZ25lZCB0byB0aGUgVjRMIGJ1ZmZlci4KLQkgKiBJZiB0aGUgY2FtZXJhIGxpbmUgaXMgc2hvcnRlciB0aGVuIHdlIHNob3VsZCBwYWQgdGhlIFY0TAotCSAqIGJ1ZmZlciB3aXRoIHNvbWV0aGluZyAoYmxhY2spIHRvIGNvbXBsZXRlIHRoZSBsaW5lLgotCSAqLwotCWFzc2VydChmcmFtZS0+ZGF0YSAhPSBOVUxMKTsKLQlmID0gZnJhbWUtPmRhdGEgKyAodjRsX2xpbmVzaXplICogZnJhbWUtPmN1cmxpbmUpOwotCi0JLyoKLQkgKiBUbyBvYnRhaW4gY2hyb21pbmFuY2UgZGF0YSBmcm9tIHRoZSAnY2hyb21hTGluZScgdXNlIHRoaXM6Ci0JICogICB2ID0gY2hyb21hTGluZVswXTsgLy8gMC0xOlswXSwgMi0zOls0XSwgNC01Ols4XS4uLgotCSAqICAgdSA9IGNocm9tYUxpbmVbMl07IC8vIDAtMTpbMl0sIDItMzpbNl0sIDQtNTpbMTBdLi4uCi0JICoKLQkgKiBJbmRpY2VzIG11c3QgYmUgY2FsY3VsYXRlZCB0aGlzIHdheToKLQkgKiB2X2luZGV4ID0gKGkgPj4gMSkgPDwgMjsKLQkgKiB1X2luZGV4ID0gKGkgPj4gMSkgPDwgMiArIDI7Ci0JICoKLQkgKiB3aGVyZSAnaScgaXMgdGhlIGNvbHVtbiBudW1iZXIgWzAuLlZJREVPU0laRV9YKGZyYW1lLT5yZXF1ZXN0KS0xXQotCSAqLwotCWx1bWFMaW5lID0gbGluZUJ1ZmZlcjsKLQljaHJvbWFMaW5lID0gbGluZUJ1ZmZlciArIHNjYW5MZW5ndGg7Ci0JZm9yIChpID0gMDsgaSA8IFZJREVPU0laRV9YKGZyYW1lLT5yZXF1ZXN0KTsgaSsrKQotCXsKLQkJdW5zaWduZWQgY2hhciBydiwgZ3YsIGJ2OwkvKiBSR0IgY29tcG9uZW50cyAqLwotCi0JCS8qIENoZWNrIGZvciB2YXJpb3VzIHZpc3VhbCBkZWJ1Z2dpbmcgaGludHMgKGNvbG9yaXplZCBwaXhlbHMpICovCi0JCWlmICgoZmxhZ3MgJiBGTEFHU19ESVNQTEFZX0hJTlRTKSAmJiAoaWNhbS0+aGFzX2hkcikpIHsKLQkJCS8qCi0JCQkgKiBUaGlzIGlzIGJhZCBhbmQgc2hvdWxkIG5vdCBoYXBwZW4uIFRoaXMgbWVhbnMgdGhhdAotCQkJICogd2Ugc29tZWhvdyBvdmVyc2hvb3QgdGhlIGxpbmUgYW5kIGVuY291bnRlcmVkIG5ldwotCQkJICogZnJhbWUhIE9idmlvdXNseSBvdXIgY2FtZXJhL1Y0TCBmcmFtZSBzaXplIGlzIG91dAotCQkJICogb2Ygd2hhY2suIFRoaXMgY3lhbiBkb3Qgd2lsbCBoZWxwIHlvdSB0byBmaWd1cmUKLQkJCSAqIG91dCB3aGVyZSBleGFjdGx5IHRoZSBuZXcgZnJhbWUgYXJyaXZlZC4KLQkJCSAqLwotCQkJaWYgKGljYW0tPmhhc19oZHIgPT0gMSkgewotCQkJCWJ2ID0gMDsgLyogWWVsbG93IG1hcmtlciAqLwotCQkJCWd2ID0gMHhGRjsKLQkJCQlydiA9IDB4RkY7Ci0JCQl9IGVsc2UgewotCQkJCWJ2ID0gMHhGRjsgLyogQ3lhbiBtYXJrZXIgKi8KLQkJCQlndiA9IDB4RkY7Ci0JCQkJcnYgPSAwOwotCQkJfQotCQkJaWNhbS0+aGFzX2hkciA9IDA7Ci0JCQlnb3RvIG1ha2VfcGl4ZWw7Ci0JCX0KLQotCQkvKgotCQkgKiBDaGVjayBpZiB3ZSBhcmUgc3RpbGwgaW4gcmFuZ2UuIFdlIG1heSBiZSBvdXQgb2YgcmFuZ2UgaWYgb3VyCi0JCSAqIFY0TCBjYW52YXMgaXMgd2lkZXIgb3IgdGFsbGVyIHRoYW4gdGhlIGNhbWVyYSAibmF0aXZlIiBpbWFnZS4KLQkJICogVGhlbiB3ZSBxdWlja2x5IGZpbGwgdGhlIHJlbWFpbmRlciBvZiB0aGUgbGluZSB3aXRoIHplcm9zIHRvCi0JCSAqIG1ha2UgYmxhY2sgY29sb3IgYW5kIHF1aXQgdGhlIGhvcml6b250YWwgc2Nhbm5pbmcgbG9vcC4KLQkJICovCi0JCWlmICgoKGZyYW1lLT5jdXJsaW5lICsgMikgPj0gc2NhbkhlaWdodCkgfHwgKGkgPj0gc2Nhbkxlbmd0aCkpIHsKLQkJCWNvbnN0IGludCBqID0gaSAqIFY0TF9CWVRFU19QRVJfUElYRUw7Ci0jaWYgVVNFU19JQk1DQU1fUFVUUElYRUwKLQkJCS8qIFJlZnJlc2ggJ2YnIGJlY2F1c2Ugd2UgZG9uJ3QgdXNlIGl0IG11Y2ggd2l0aCBQVVRQSVhFTCAqLwotCQkJZiA9IGZyYW1lLT5kYXRhICsgKHY0bF9saW5lc2l6ZSAqIGZyYW1lLT5jdXJsaW5lKSArIGo7Ci0jZW5kaWYKLQkJCW1lbXNldChmLCAwLCB2NGxfbGluZXNpemUgLSBqKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJeSA9IGx1bWFMaW5lW2ldOwotCQlpZiAoZmxhZ3MgJiBGTEFHU19NT05PQ0hST01FKSAvKiBVc2UgbW9ub2Nocm9tZSBmb3IgZGVidWdnaW5nICovCi0JCQlydiA9IGd2ID0gYnYgPSB5OwotCQllbHNlIHsKLQkJCWludCBvZmZfMCwgb2ZmXzI7Ci0KLQkJCW9mZl8wID0gKGkgPj4gMSkgPDwgMjsKLQkJCW9mZl8yID0gb2ZmXzAgKyAyOwotCi0JCQlpZiAob3JkZXJfeWMpIHsKLQkJCQlvZmZfMCsrOwotCQkJCW9mZl8yKys7Ci0JCQl9Ci0JCQlpZiAoIW9yZGVyX3V2KSB7Ci0JCQkJb2ZmXzAgKz0gMjsKLQkJCQlvZmZfMiAtPSAyOwotCQkJfQotCQkJdSA9IGNocm9tYUxpbmVbb2ZmXzBdICsgaHVlX2NvcnI7Ci0JCQl2ID0gY2hyb21hTGluZVtvZmZfMl0gKyBodWUyX2NvcnI7Ci0KLQkJCS8qIEFwcGx5IGNvbG9yIGNvcnJlY3Rpb24gKi8KLQkJCWlmIChjb2xvcl9jb3JyICE9IDApIHsKLQkJCQkvKiBNYWduaWZ5IHVwIHRvIDIgdGltZXMsIHJlZHVjZSBkb3duIHRvIHplcm8gc2F0dXJhdGlvbiAqLwotCQkJCXUgPSAxMjggKyAoKGNjbSArIGNvbG9yX2NvcnIpICogKHUgLSAxMjgpKSAvIGNjbTsKLQkJCQl2ID0gMTI4ICsgKChjY20gKyBjb2xvcl9jb3JyKSAqICh2IC0gMTI4KSkgLyBjY207Ci0JCQl9Ci0JCQlZVVZfVE9fUkdCX0JZX1RIRV9CT09LKHksIHUsIHYsIHJ2LCBndiwgYnYpOwotCQl9Ci0KLQltYWtlX3BpeGVsOgotCQkvKgotCQkgKiBUaGUgcHVycG9zZSBvZiBjcmVhdGluZyB0aGUgcGl4ZWwgaGVyZSwgaW4gb25lLAotCQkgKiBkZWRpY2F0ZWQgcGxhY2UgaXMgdGhhdCB3ZSBtYXkgbmVlZCB0byBtYWtlIHRoZQotCQkgKiBwaXhlbCB3aWRlciBhbmQgdGFsbGVyIHRoYW4gaXQgYWN0dWFsbHkgaXMuIFRoaXMKLQkJICogbWF5IGJlIHVzZWQgaWYgY2FtZXJhIGdlbmVyYXRlcyBzbWFsbCBmcmFtZXMgZm9yCi0JCSAqIHNha2Ugb2YgZnJhbWUgcmF0ZSAob3IgYW55IG90aGVyIHJlYXNvbi4pCi0JCSAqCi0JCSAqIFRoZSBvdXRwdXQgZGF0YSBjb25zaXN0cyBvZiBCLCBHLCBSIGJ5dGVzCi0JCSAqIChpbiB0aGlzIG9yZGVyKS4KLQkJICovCi0jaWYgVVNFU19JQk1DQU1fUFVUUElYRUwKLQkJUkdCMjRfUFVUUElYRUwoZnJhbWUsIGksIGZyYW1lLT5jdXJsaW5lLCBydiwgZ3YsIGJ2KTsKLSNlbHNlCi0JCSpmKysgPSBidjsKLQkJKmYrKyA9IGd2OwotCQkqZisrID0gcnY7Ci0jZW5kaWYKLQkJLyoKLQkJICogVHlwaWNhbGx5IHdlIGRvIG5vdCBkZWNpZGUgd2l0aGluIGEgbGVnaXRpbWF0ZSBmcmFtZQotCQkgKiB0aGF0IHdlIHdhbnQgdG8gZW5kIHRoZSBmcmFtZS4gSG93ZXZlciBkZWJ1Z2dpbmcgY29kZQotCQkgKiBtYXkgZGV0ZWN0IG1hcmtlciBvZiBuZXcgZnJhbWUgd2l0aGluIHRoZSBkYXRhLiBUaGVuCi0JCSAqIHRoaXMgY29uZGl0aW9uIGFjdGl2YXRlcy4gVGhlICdkYXRhJyBwb2ludGVyIGlzIGFscmVhZHkKLQkJICogcG9pbnRpbmcgYXQgdGhlIG5ldyBtYXJrZXIsIHNvIHdlJ2QgYmV0dGVyIGxlYXZlIGl0IGFzIGlzLgotCQkgKi8KLQkJaWYgKGZyYW1lX2RvbmUpCi0JCQlicmVhazsJLyogRW5kIHNjYW5uaW5nIG9mIGxpbmVzICovCi0JfQotCS8qCi0JICogQWNjb3VudCBmb3IgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgd2Ugd3JvdGUgaW50byBvdXRwdXQgVjRMIGZyYW1lLgotCSAqIFdlIGRvIGl0IGhlcmUsIGFmdGVyIHdlIGFyZSBkb25lIHdpdGggdGhlIHNjYW5saW5lLCBiZWNhdXNlIHdlCi0JICogbWF5IGZpbGwgbW9yZSB0aGFuIG9uZSBvdXRwdXQgc2NhbmxpbmUgaWYgd2UgZG8gdmVydGljYWwKLQkgKiBlbmxhcmdlbWVudC4KLQkgKi8KLQlmcmFtZS0+Y3VybGluZSArPSAyOwotCWlmIChwY29weWxlbiAhPSBOVUxMKQotCQkqcGNvcHlsZW4gKz0gMiAqIHY0bF9saW5lc2l6ZTsKLQlmcmFtZS0+ZGVpbnRlcmxhY2UgPSBEZWludGVybGFjZV9GaWxsT2RkTGluZXM7Ci0KLQlpZiAoZnJhbWVfZG9uZSB8fCAoZnJhbWUtPmN1cmxpbmUgPj0gVklERU9TSVpFX1koZnJhbWUtPnJlcXVlc3QpKSkKLQkJcmV0dXJuIHNjYW5fTmV4dEZyYW1lOwotCWVsc2UKLQkJcmV0dXJuIHNjYW5fQ29udGludWU7Ci19Ci0KLS8qCi0gKiBpYm1jYW1fbW9kZWwyXzMyMHgyNDBfcGFyc2VfbGluZXMoKQotICoKLSAqIFRoaXMgcHJvY2VkdXJlIGRlYWxzIHdpdGggYSB3ZWlyZCBSR0IgZm9ybWF0IHRoYXQgaXMgcHJvZHVjZWQgYnkgSUJNCi0gKiBjYW1lcmEgbW9kZWwgMiBpbiBtb2RlcyAzMjB4MjQwIGFuZCBhYm92ZTsgJ3gnIGJlbG93IGlzIDE1OSBvciAxNzUsCi0gKiBkZXBlbmRpbmcgb24gaG9yaXpvbnRhbCBzaXplIG9mIHRoZSBwaWN0dXJlOgotICoKLSAqIDwtLS0gMTYwIG9yIDE3NiBwYWlycyBvZiBSQSxSQiBieXRlcyAtLS0tLT4KLSAqICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSogXAotICogfCBSQTAgfCBSQjAgfCBSQTEgfCBSQjEgfCAuLi4gfCBSQXggfCBSQnggfCAgXCAgIFRoaXMgaXMgcGFpciBvZiBob3Jpem9udGFsIGxpbmVzLAotICogfC0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKyAuLi4gKy0tLS0tKy0tLS0tfCAgICotIG9yIG9uZSBpbnRlcmxhY2VkIGxpbmUsIHRvdGFsCi0gKiB8IEIwICB8IEcwICB8IEIxICB8IEcxICB8IC4uLiB8IEJ4ICB8IEd4ICB8ICAvICAgMTIwIG9yIDE0NCBzdWNoIHBhaXJzIHdoaWNoIHlpZWxkCi0gKiB8PT09PT0rPT09PT0rPT09PT0rPT09PT0rIC4uLiArPT09PT0rPT09PT18IC8gICAgMjQwIG9yIDI4OCBsaW5lcyBhZnRlciBkZWludGVybGFjaW5nLgotICoKLSAqIEVhY2ggZ3JvdXAgb2YgRk9VUiBieXRlcyAoUkFpLCBSQmksIEJpLCBHaSkgd2hlcmUgaT0wLi5mcmFtZV93aWR0aC8yLTEKLSAqIGRlZmluZXMgT05FIHBpeGVsLiBUaGVyZWZvcmUgdGhpcyBmb3JtYXQgeWllbGRzIDE3NngxNDQgImRlY29kZWQiCi0gKiByZXNvbHV0aW9uIGF0IGJlc3QuIEkgZG8gbm90IGtub3cgd2h5IGNhbWVyYSBzZW5kcyBzdWNoIGZvcm1hdCAtIHRoZQotICogcHJldmlvdXMgbW9kZWwgKDEpIGp1c3QgdXNlZCBpbnRlcmxhY2VkIEk0MjAgYW5kIGV2ZXJ5b25lIHdhcyBoYXBweS4KLSAqCi0gKiBJIGRvIG5vdCBrbm93IHdoYXQgaXMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBSQWkgYW5kIFJCaSBieXRlcy4gQm90aAotICogc2VlbWluZ2x5IHJlcHJlc2VudCBSIGNvbXBvbmVudCwgYnV0IHNsaWdodGx5IHZhcnkgaW4gdmFsdWUgKHNvIHRoYXQKLSAqIHRoZSBwaWN0dXJlIGxvb2tzIGEgYml0IGNvbG9yZWQgaWYgb25lIG9yIGFub3RoZXIgaXMgdXNlZCkuIEkgdXNlCi0gKiB0aGVtIGJvdGggYXMgUiBjb21wb25lbnQgaW4gYXR0ZW1wdCB0byBhdCBsZWFzdCBwYXJ0aWFsbHkgcmVjb3ZlciB0aGUKLSAqIGxvc3QgcmVzb2x1dGlvbi4KLSAqLwotc3RhdGljIGVudW0gUGFyc2VTdGF0ZSBpYm1jYW1fbW9kZWwyXzMyMHgyNDBfcGFyc2VfbGluZXMoCi0Jc3RydWN0IHV2ZCAqdXZkLAotCXN0cnVjdCB1c2J2aWRlb19mcmFtZSAqZnJhbWUsCi0JbG9uZyAqcGNvcHlsZW4pCi17Ci0JdW5zaWduZWQgY2hhciAqZiwgKmxhLCAqbGI7Ci0JdW5zaWduZWQgaW50IGxlbjsKLQlpbnQgdjRsX2xpbmVzaXplOyAvKiBWNEwgbGluZSBvZmZzZXQgKi8KLQlpbnQgaSwgaiwgZnJhbWVfZG9uZT0wLCBjb2xvcl9jb3JyOwotCWludCBzY2FuTGVuZ3RoLCBzY2FuSGVpZ2h0OwotCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGxpbmVCdWZmZXJbMzUyKjJdOwotCi0Jc3dpdGNoICh1dmQtPnZpZGVvc2l6ZSkgewotCWNhc2UgVklERU9TSVpFXzMyMHgyNDA6Ci0JY2FzZSBWSURFT1NJWkVfMzUyeDI0MDoKLQljYXNlIFZJREVPU0laRV8zNTJ4Mjg4OgotCQlzY2FuTGVuZ3RoID0gVklERU9TSVpFX1godXZkLT52aWRlb3NpemUpOwotCQlzY2FuSGVpZ2h0ID0gVklERU9TSVpFX1kodXZkLT52aWRlb3NpemUpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQllcnIoImlibWNhbV9tb2RlbDJfMzIweDI0MF9wYXJzZV9saW5lczogV3JvbmcgbW9kZS4iKTsKLQkJcmV0dXJuIHNjYW5fT3V0OwotCX0KLQotCWNvbG9yX2NvcnIgPSAodXZkLT52cGljLmNvbG91cikgPj4gODsgLyogMC4uKzI1NSAqLwotCXY0bF9saW5lc2l6ZSA9IFZJREVPU0laRV9YKGZyYW1lLT5yZXF1ZXN0KSAqIFY0TF9CWVRFU19QRVJfUElYRUw7Ci0KLQlsZW4gPSBzY2FuTGVuZ3RoICogMjsgLyogU2VlIGV4cGxhbmF0aW9uIGFib3ZlICovCi0JYXNzZXJ0KGxlbiA8PSBzaXplb2YobGluZUJ1ZmZlcikpOwotCi0JLyogTWFrZSBzdXJlIHRoZXJlJ3MgZW5vdWdoIGRhdGEgZm9yIHRoZSBlbnRpcmUgbGluZSAqLwotCWlmIChSaW5nUXVldWVfR2V0TGVuZ3RoKCZ1dmQtPmRwKSA8IGxlbikKLQkJcmV0dXJuIHNjYW5fT3V0OwotCi0JLyogU3VjayBvbmUgbGluZSBvdXQgb2YgdGhlIHJpbmcgcXVldWUgKi8KLQlSaW5nUXVldWVfRGVxdWV1ZSgmdXZkLT5kcCwgbGluZUJ1ZmZlciwgbGVuKTsKLQotCS8qCi0JICogTWFrZSBzdXJlIHRoYXQgb3VyIHdyaXRpbmcgaW50byBvdXRwdXQgYnVmZmVyCi0JICogd2lsbCBub3QgZXhjZWVkIHRoZSBidWZmZXIuIE1pbmQgdGhhdCB3ZSBtYXkgd3JpdGUKLQkgKiBub3QgaW50byBjdXJyZW50IG91dHB1dCBzY2FubGluZSBidXQgaW4gc2V2ZXJhbCBhZnRlcgotCSAqIGl0IGFzIHdlbGwgKGlmIHdlIGVubGFyZ2UgaW1hZ2UgdmVydGljYWxseS4pCi0JICovCi0JaWYgKChmcmFtZS0+Y3VybGluZSArIDIpID49IFZJREVPU0laRV9ZKGZyYW1lLT5yZXF1ZXN0KSkKLQkJcmV0dXJuIHNjYW5fTmV4dEZyYW1lOwotCi0JbGEgPSBsaW5lQnVmZmVyOwotCWxiID0gbGluZUJ1ZmZlciArIHNjYW5MZW5ndGg7Ci0KLQkvKgotCSAqIE5vdyB3ZSBhcmUgc3VyZSB0aGF0IGVudGlyZSBsaW5lIChyZXByZXNlbnRpbmcgYWxsCi0JICogICAgICAgICBWSURFT1NJWkVfWChmcmFtZS0+cmVxdWVzdCkKLQkgKiBwaXhlbHMgZnJvbSB0aGUgY2FtZXJhKSBpcyBhdmFpbGFibGUgaW4gdGhlIHNjcmF0Y2ggYnVmZmVyLiBXZQotCSAqIHN0YXJ0IGNvcHlpbmcgdGhlIGxpbmUgbGVmdC1hbGlnbmVkIHRvIHRoZSBWNEwgYnVmZmVyICh3aGljaAotCSAqIG1pZ2h0IGJlIGxhcmdlciAtIG5vdCBzbWFsbGVyLCBob3BlZnVsbHkpLiBJZiB0aGUgY2FtZXJhCi0JICogbGluZSBpcyBzaG9ydGVyIHRoZW4gd2Ugc2hvdWxkIHBhZCB0aGUgVjRMIGJ1ZmZlciB3aXRoIHNvbWV0aGluZwotCSAqIChibGFjayBpbiB0aGlzIGNhc2UpIHRvIGNvbXBsZXRlIHRoZSBsaW5lLgotCSAqLwotCWYgPSBmcmFtZS0+ZGF0YSArICh2NGxfbGluZXNpemUgKiBmcmFtZS0+Y3VybGluZSk7Ci0KLQkvKiBGaWxsIHRoZSAyLWxpbmUgc3RyaXAgKi8KLQlmb3IgKGkgPSAwOyBpIDwgVklERU9TSVpFX1goZnJhbWUtPnJlcXVlc3QpOyBpKyspIHsKLQkJaW50IHksIHJ2LCBndiwgYnY7CS8qIFJHQiBjb21wb25lbnRzICovCi0KLQkJaiA9IGkgJiAofjEpOwotCi0JCS8qIENoZWNrIGZvciB2YXJpb3VzIHZpc3VhbCBkZWJ1Z2dpbmcgaGludHMgKGNvbG9yaXplZCBwaXhlbHMpICovCi0JCWlmICgoZmxhZ3MgJiBGTEFHU19ESVNQTEFZX0hJTlRTKSAmJiAoSUJNQ0FNX1QodXZkKS0+aGFzX2hkcikpIHsKLQkJCWlmIChJQk1DQU1fVCh1dmQpLT5oYXNfaGRyID09IDEpIHsKLQkJCQlidiA9IDA7IC8qIFllbGxvdyBtYXJrZXIgKi8KLQkJCQlndiA9IDB4RkY7Ci0JCQkJcnYgPSAweEZGOwotCQkJfSBlbHNlIHsKLQkJCQlidiA9IDB4RkY7IC8qIEN5YW4gbWFya2VyICovCi0JCQkJZ3YgPSAweEZGOwotCQkJCXJ2ID0gMDsKLQkJCX0KLQkJCUlCTUNBTV9UKHV2ZCktPmhhc19oZHIgPSAwOwotCQkJZ290byBtYWtlX3BpeGVsOwotCQl9Ci0KLQkJLyoKLQkJICogQ2hlY2sgaWYgd2UgYXJlIHN0aWxsIGluIHJhbmdlLiBXZSBtYXkgYmUgb3V0IG9mIHJhbmdlIGlmIG91cgotCQkgKiBWNEwgY2FudmFzIGlzIHdpZGVyIG9yIHRhbGxlciB0aGFuIHRoZSBjYW1lcmEgIm5hdGl2ZSIgaW1hZ2UuCi0JCSAqIFRoZW4gd2UgcXVpY2tseSBmaWxsIHRoZSByZW1haW5kZXIgb2YgdGhlIGxpbmUgd2l0aCB6ZXJvcyB0bwotCQkgKiBtYWtlIGJsYWNrIGNvbG9yIGFuZCBxdWl0IHRoZSBob3Jpem9udGFsIHNjYW5uaW5nIGxvb3AuCi0JCSAqLwotCQlpZiAoKChmcmFtZS0+Y3VybGluZSArIDIpID49IHNjYW5IZWlnaHQpIHx8IChpID49IHNjYW5MZW5ndGgpKSB7Ci0JCQljb25zdCBpbnQgb2Zmc2V0ID0gaSAqIFY0TF9CWVRFU19QRVJfUElYRUw7Ci0jaWYgVVNFU19JQk1DQU1fUFVUUElYRUwKLQkJCS8qIFJlZnJlc2ggJ2YnIGJlY2F1c2Ugd2UgZG9uJ3QgdXNlIGl0IG11Y2ggd2l0aCBQVVRQSVhFTCAqLwotCQkJZiA9IGZyYW1lLT5kYXRhICsgKHY0bF9saW5lc2l6ZSAqIGZyYW1lLT5jdXJsaW5lKSArIG9mZnNldDsKLSNlbmRpZgotCQkJbWVtc2V0KGYsIDAsIHY0bF9saW5lc2l6ZSAtIG9mZnNldCk7Ci0JCQlicmVhazsKLQkJfQotCi0JCS8qCi0JCSAqIEhlcmUgSSB1c2UgUkEgYW5kIFJCIGNvbXBvbmVudHMsIG9uZSBwZXIgcGh5c2ljYWwgcGl4ZWwuCi0JCSAqIFRoaXMgY2F1c2VzIGZpbmUgdmVydGljYWwgZ3JpZCBvbiB0aGUgcGljdHVyZSBidXQgbWF5IGltcHJvdmUKLQkJICogaG9yaXpvbnRhbCByZXNvbHV0aW9uLiBJZiB5b3UgcHJlZmVyIHJlcGxpY2F0aW5nLCB1c2UgdGhpczoKLQkJICogICBydiA9IGxhW2ogKyAwXTsgICAuLi4gb3IgLi4uIHJ2ID0gbGFbaiArIDFdOwotCQkgKiB0aGVuIHRoZSBwaXhlbCB3aWxsIGJlIHJlcGxpY2F0ZWQuCi0JCSAqLwotCQlydiA9IGxhW2ldOwotCQlndiA9IGxiW2ogKyAxXTsKLQkJYnYgPSBsYltqICsgMF07Ci0KLQkJeSA9IChydiArIGd2ICsgYnYpIC8gMzsgLyogQnJpZ2h0bmVzcyAoYmFkbHkgY2FsY3VsYXRlZCkgKi8KLQotCQlpZiAoZmxhZ3MgJiBGTEFHU19NT05PQ0hST01FKSAvKiBVc2UgbW9ub2Nocm9tZSBmb3IgZGVidWdnaW5nICovCi0JCQlydiA9IGd2ID0gYnYgPSB5OwotCQllbHNlIGlmIChjb2xvcl9jb3JyICE9IDEyOCkgewotCi0JCQkvKiBDYWxjdWxhdGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGNvbG9yIGFuZCBicmlnaHRuZXNzICovCi0JCQlydiAtPSB5OwotCQkJZ3YgLT0geTsKLQkJCWJ2IC09IHk7Ci0KLQkJCS8qIFNjYWxlIGRpZmZlcmVuY2VzICovCi0JCQlydiA9IChydiAqIGNvbG9yX2NvcnIpIC8gMTI4OwotCQkJZ3YgPSAoZ3YgKiBjb2xvcl9jb3JyKSAvIDEyODsKLQkJCWJ2ID0gKGJ2ICogY29sb3JfY29ycikgLyAxMjg7Ci0KLQkJCS8qIFJlYXBwbHkgYnJpZ2h0bmVzcyAqLwotCQkJcnYgKz0geTsKLQkJCWd2ICs9IHk7Ci0JCQlidiArPSB5OwotCi0JCQkvKiBXYXRjaCBmb3Igb3ZlcmZsb3dzICovCi0JCQlSRVNUUklDVF9UT19SQU5HRShydiwgMCwgMjU1KTsKLQkJCVJFU1RSSUNUX1RPX1JBTkdFKGd2LCAwLCAyNTUpOwotCQkJUkVTVFJJQ1RfVE9fUkFOR0UoYnYsIDAsIDI1NSk7Ci0JCX0KLQotCW1ha2VfcGl4ZWw6Ci0JCVJHQjI0X1BVVFBJWEVMKGZyYW1lLCBpLCBmcmFtZS0+Y3VybGluZSwgcnYsIGd2LCBidik7Ci0JfQotCS8qCi0JICogQWNjb3VudCBmb3IgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgd2Ugd3JvdGUgaW50byBvdXRwdXQgVjRMIGZyYW1lLgotCSAqIFdlIGRvIGl0IGhlcmUsIGFmdGVyIHdlIGFyZSBkb25lIHdpdGggdGhlIHNjYW5saW5lLCBiZWNhdXNlIHdlCi0JICogbWF5IGZpbGwgbW9yZSB0aGFuIG9uZSBvdXRwdXQgc2NhbmxpbmUgaWYgd2UgZG8gdmVydGljYWwKLQkgKiBlbmxhcmdlbWVudC4KLQkgKi8KLQlmcmFtZS0+Y3VybGluZSArPSAyOwotCSpwY29weWxlbiArPSB2NGxfbGluZXNpemUgKiAyOwotCWZyYW1lLT5kZWludGVybGFjZSA9IERlaW50ZXJsYWNlX0ZpbGxPZGRMaW5lczsKLQotCWlmIChmcmFtZV9kb25lIHx8IChmcmFtZS0+Y3VybGluZSA+PSBWSURFT1NJWkVfWShmcmFtZS0+cmVxdWVzdCkpKQotCQlyZXR1cm4gc2Nhbl9OZXh0RnJhbWU7Ci0JZWxzZQotCQlyZXR1cm4gc2Nhbl9Db250aW51ZTsKLX0KLQotLyoKLSAqIGlibWNhbV9tb2RlbDNfcGFyc2VfbGluZXMoKQotICoKLSAqIHwgRXZlbiBsaW5lcyB8ICAgICBPZGQgTGluZXMgICAgICAgfAotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18Ci0gKiB8WVlZLi4uLi4uLi5ZfFVZVllVWVZZLi4uLi4uLi4uVVlWWXwKLSAqIHxZWVkuLi4uLi4uLll8VVlWWVVZVlkuLi4uLi4uLi5VWVZZfAotICogfC4uLi4uLi4uLi4uLnwuLi4uLi4uLi4uLi4uLi4uLi4uLi58Ci0gKiB8WVlZLi4uLi4uLi5ZfFVZVllVWVZZLi4uLi4uLi4uVVlWWXwKLSAqIHwtLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAotICoKLSAqIFRoZXJlIGlzIG9uZSAoVSwgVikgY2hyb21hIHBhaXIgZm9yIGV2ZXJ5IGZvdXIgbHVtYSAoWSkgdmFsdWVzLiAgVGhpcwotICogZnVuY3Rpb24gcmVhZHMgYSBwYWlyIG9mIGxpbmVzIGF0IGEgdGltZSBhbmQgb2J0YWlucyBtaXNzaW5nIGNocm9tYSB2YWx1ZXMKLSAqIGZyb20gYWRqYWNlbnQgcGl4ZWxzLgotICovCi1zdGF0aWMgZW51bSBQYXJzZVN0YXRlIGlibWNhbV9tb2RlbDNfcGFyc2VfbGluZXMoCi0Jc3RydWN0IHV2ZCAqdXZkLAotCXN0cnVjdCB1c2J2aWRlb19mcmFtZSAqZnJhbWUsCi0JbG9uZyAqcGNvcHlsZW4pCi17Ci0JdW5zaWduZWQgY2hhciAqZGF0YTsKLQljb25zdCB1bnNpZ25lZCBjaGFyICpjb2xvcjsKLQl1bnNpZ25lZCBpbnQgbGVuOwotCWludCB2NGxfbGluZXNpemU7IC8qIFY0TCBsaW5lIG9mZnNldCAqLwotCWNvbnN0IGludCBodWVfY29yciAgPSAodXZkLT52cGljLmh1ZSAtIDB4ODAwMCkgPj4gMTA7CS8qIC0zMi4uKzMxICovCi0JY29uc3QgaW50IGh1ZTJfY29yciA9IChodWVfY29ycmVjdGlvbiAtIDEyOCkgLyA0OwkJLyogLTMyLi4rMzEgKi8KLQljb25zdCBpbnQgY2NtID0gMTI4OyAvKiBDb2xvciBjb3JyZWN0aW9uIG1lZGlhbiAtIHNlZSBiZWxvdyAqLwotCWludCBpLCB1LCB2LCBydywgZGF0YV93PTAsIGRhdGFfaD0wLCBjb2xvcl9jb3JyOwotCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGxpbmVCdWZmZXJbNjQwKjNdOwotCWludCBsaW5lOwotCi0JY29sb3JfY29yciA9ICh1dmQtPnZwaWMuY29sb3VyIC0gMHg4MDAwKSA+PiA4OyAvKiAtMTI4Li4rMTI3ID0gLWNjbS4uKyhjY20tMSkqLwotCVJFU1RSSUNUX1RPX1JBTkdFKGNvbG9yX2NvcnIsIC1jY20sIGNjbSsxKTsKLQotCXY0bF9saW5lc2l6ZSA9IFZJREVPU0laRV9YKGZyYW1lLT5yZXF1ZXN0KSAqIFY0TF9CWVRFU19QRVJfUElYRUw7Ci0KLQkvKiBUaGUgaGVhZGVyIHRlbGxzIHVzIHdoYXQgc29ydCBvZiBkYXRhIGlzIGluIHRoaXMgZnJhbWUgKi8KLQlzd2l0Y2ggKGZyYW1lLT5oZWFkZXIpIHsKLQkJLyoKLQkJICogVW5jb21wcmVzc2VkIG1vZGVzICh0aGF0IGFyZSBlYXN5IHRvIGRlY29kZSkuCi0JCSAqLwotCWNhc2UgMHgwMzA4OgotCQlkYXRhX3cgPSA2NDA7Ci0JCWRhdGFfaCA9IDQ4MDsKLQkJYnJlYWs7Ci0JY2FzZSAweDAyMDg6Ci0JCWRhdGFfdyA9IDMyMDsKLQkJZGF0YV9oID0gMjQwOwotCQlicmVhazsKLQljYXNlIDB4MDIwQToKLQkJZGF0YV93ID0gMTYwOwotCQlkYXRhX2ggPSAxMjA7Ci0JCWJyZWFrOwotCQkvKgotCQkgKiBDb21wcmVzc2VkIG1vZGVzIChWaUNFIC0gdGhhdCBJIGRvbid0IGtub3cgaG93IHRvIGRlY29kZSkuCi0JCSAqLwotCWNhc2UgMHgwMzI4OgkvKiA2NDB4NDgwLCBiZXN0IHF1YWxpdHkgY29tcHJlc3Npb24gKi8KLQljYXNlIDB4MDM2ODoJLyogNjQweDQ4MCwgYmVzdCBmcmFtZSByYXRlIGNvbXByZXNzaW9uICovCi0JY2FzZSAweDAyMjg6CS8qIDMyMHgyNDAsIGJlc3QgcXVhbGl0eSBjb21wcmVzc2lvbiAqLwotCWNhc2UgMHgwMjY4OgkvKiAzMjB4MjQwLCBiZXN0IGZyYW1lIHJhdGUgY29tcHJlc3Npb24gKi8KLQljYXNlIDB4MDJDQToJLyogMTYweDEyMCwgYmVzdCBxdWFsaXR5IGNvbXByZXNzaW9uICovCi0JY2FzZSAweDAyRUE6CS8qIDE2MHgxMjAsIGJlc3QgZnJhbWUgcmF0ZSBjb21wcmVzc2lvbiAqLwotCQkvKiBEbyBub3RoaW5nIHdpdGggdGhpcyAtIG5vdCBzdXBwb3J0ZWQgKi8KLQkJZXJyKCJVbnN1cHBvcnRlZCBtb2RlICQlMDRseCIsIGZyYW1lLT5oZWFkZXIpOwotCQlyZXR1cm4gc2Nhbl9OZXh0RnJhbWU7Ci0JZGVmYXVsdDoKLQkJLyogQ2F0Y2ggdW5rbm93biBoZWFkZXJzLCBtYXkgaGVscCBpbiBsZWFybmluZyBuZXcgaGVhZGVycyAqLwotCQllcnIoIlN0cmFuZ2UgZnJhbWUtPmhlYWRlcj0kJTA4bHgiLCBmcmFtZS0+aGVhZGVyKTsKLQkJcmV0dXJuIHNjYW5fTmV4dEZyYW1lOwotCX0KLQotCS8qCi0JICogTWFrZSBzdXJlIHRoYXQgb3VyIHdyaXRpbmcgaW50byBvdXRwdXQgYnVmZmVyCi0JICogd2lsbCBub3QgZXhjZWVkIHRoZSBidWZmZXIuIE5vdGUgdGhhdCB3ZSBtYXkgd3JpdGUKLQkgKiBub3QgaW50byBjdXJyZW50IG91dHB1dCBzY2FubGluZSBidXQgaW4gc2V2ZXJhbCBhZnRlcgotCSAqIGl0IGFzIHdlbGwgKGlmIHdlIGVubGFyZ2UgaW1hZ2UgdmVydGljYWxseS4pCi0JICovCi0JaWYgKChmcmFtZS0+Y3VybGluZSArIDEpID49IGRhdGFfaCkgewotCQlpZiAodXZkLT5kZWJ1ZyA+PSAzKQotCQkJZGV2X2luZm8oJnV2ZC0+ZGV2LT5kZXYsCi0JCQkJICJSZWFjaGVkIGxpbmUgJWQuIChmcmFtZSBpcyBkb25lKVxuIiwKLQkJCQkgZnJhbWUtPmN1cmxpbmUpOwotCQlyZXR1cm4gc2Nhbl9OZXh0RnJhbWU7Ci0JfQotCi0JLyogTWFrZSBzdXJlIHRoYXQgbGluZUJ1ZmZlciBjYW4gc3RvcmUgdHdvIGxpbmVzIG9mIGRhdGEgKi8KLQlsZW4gPSAzICogZGF0YV93OyAvKiA8eS1kYXRhPiA8dXl2eS1kYXRhPiAqLwotCWFzc2VydChsZW4gPD0gc2l6ZW9mKGxpbmVCdWZmZXIpKTsKLQotCS8qIE1ha2Ugc3VyZSB0aGVyZSdzIGVub3VnaCBkYXRhIGZvciB0d28gbGluZXMgKi8KLQlpZiAoUmluZ1F1ZXVlX0dldExlbmd0aCgmdXZkLT5kcCkgPCBsZW4pCi0JCXJldHVybiBzY2FuX091dDsKLQotCS8qIFN1Y2sgdHdvIGxpbmVzIG9mIGRhdGEgb3V0IG9mIHRoZSByaW5nIHF1ZXVlICovCi0JUmluZ1F1ZXVlX0RlcXVldWUoJnV2ZC0+ZHAsIGxpbmVCdWZmZXIsIGxlbik7Ci0KLQlkYXRhID0gbGluZUJ1ZmZlcjsKLQljb2xvciA9IGRhdGEgKyBkYXRhX3c7CQkvKiBQb2ludCB0byB3aGVyZSBjb2xvciBwbGFuZXMgYmVnaW4gKi8KLQotCS8qIEJvdHRvbS10by10b3Agc2Nhbm5pbmcgKi8KLQlydyA9IChpbnQpVklERU9TSVpFX1koZnJhbWUtPnJlcXVlc3QpIC0gKGludCkoZnJhbWUtPmN1cmxpbmUpIC0gMTsKLQlSRVNUUklDVF9UT19SQU5HRShydywgMCwgVklERU9TSVpFX1koZnJhbWUtPnJlcXVlc3QpLTEpOwotCi0JLyogSXRlcmF0ZSBvdmVyIHR3byBsaW5lcy4gKi8KLQlmb3IgKGxpbmUgPSAwOyBsaW5lIDwgMjsgbGluZSsrKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBWSURFT1NJWkVfWChmcmFtZS0+cmVxdWVzdCk7IGkrKykgewotCQkJaW50IHk7Ci0JCQlpbnQgcnYsIGd2LCBidjsJLyogUkdCIGNvbXBvbmVudHMgKi8KLQotCQkJaWYgKGkgPj0gZGF0YV93KSB7Ci0JCQkJUkdCMjRfUFVUUElYRUwoZnJhbWUsIGksIHJ3LCAwLCAwLCAwKTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQotCQkJLyogZmlyc3QgbGluZSBpcyBZWVkuLi5ZOyBzZWNvbmQgaXMgVVlWWS4uLlVZVlkgKi8KLQkJCXkgPSBkYXRhWyhsaW5lID09IDApID8gaSA6IChpKjIgKyAxKV07Ci0KLQkJCS8qIEFwcGx5IHN0YXRpYyBjb2xvciBjb3JyZWN0aW9uICovCi0JCQl1ID0gY29sb3JbKGkvMikqNF0gKyBodWVfY29ycjsKLQkJCXYgPSBjb2xvclsoaS8yKSo0ICsgMl0gKyBodWUyX2NvcnI7Ci0KLQkJCS8qIEFwcGx5IGNvbG9yIGNvcnJlY3Rpb24gKi8KLQkJCWlmIChjb2xvcl9jb3JyICE9IDApIHsKLQkJCQkvKiBNYWduaWZ5IHVwIHRvIDIgdGltZXMsIHJlZHVjZSBkb3duIHRvIHplcm8gc2F0dXJhdGlvbiAqLwotCQkJCXUgPSAxMjggKyAoKGNjbSArIGNvbG9yX2NvcnIpICogKHUgLSAxMjgpKSAvIGNjbTsKLQkJCQl2ID0gMTI4ICsgKChjY20gKyBjb2xvcl9jb3JyKSAqICh2IC0gMTI4KSkgLyBjY207Ci0JCQl9Ci0KLQotCQkJWVVWX1RPX1JHQl9CWV9USEVfQk9PSyh5LCB1LCB2LCBydiwgZ3YsIGJ2KTsKLQkJCVJHQjI0X1BVVFBJWEVMKGZyYW1lLCBpLCBydywgcnYsIGd2LCBidik7ICAvKiBObyBkZWludGVybGFjaW5nICovCi0JCX0KLQotCQkvKiBDaGVjayBmb3IgdGhlIGVuZCBvZiByZXF1ZXN0ZWQgZGF0YSAqLwotCQlpZiAocncgPT0gMCkKLQkJCWJyZWFrOwotCi0JCS8qIFByZXBhcmUgZm9yIHRoZSBzZWNvbmQgbGluZSAqLwotCQlydy0tOwotCQlkYXRhID0gbGluZUJ1ZmZlciArIGRhdGFfdzsKLQl9Ci0JZnJhbWUtPmRlaW50ZXJsYWNlID0gRGVpbnRlcmxhY2VfTm9uZTsKLQotCS8qCi0JICogQWNjb3VudCBmb3IgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgd2Ugd3JvdGUgaW50byBvdXRwdXQgVjRMIGZyYW1lLgotCSAqIFdlIGRvIGl0IGhlcmUsIGFmdGVyIHdlIGFyZSBkb25lIHdpdGggdGhlIHNjYW5saW5lLCBiZWNhdXNlIHdlCi0JICogbWF5IGZpbGwgbW9yZSB0aGFuIG9uZSBvdXRwdXQgc2NhbmxpbmUgaWYgd2UgZG8gdmVydGljYWwKLQkgKiBlbmxhcmdlbWVudC4KLQkgKi8KLQlmcmFtZS0+Y3VybGluZSArPSAyOwotCSpwY29weWxlbiArPSAyICogdjRsX2xpbmVzaXplOwotCi0JaWYgKGZyYW1lLT5jdXJsaW5lID49IFZJREVPU0laRV9ZKGZyYW1lLT5yZXF1ZXN0KSkgewotCQlpZiAodXZkLT5kZWJ1ZyA+PSAzKSB7Ci0JCQlkZXZfaW5mbygmdXZkLT5kZXYtPmRldiwKLQkJCQkgIkFsbCByZXF1ZXN0ZWQgbGluZXMgKCVsZC4pIGRvbmUuXG4iLAotCQkJCSBWSURFT1NJWkVfWShmcmFtZS0+cmVxdWVzdCkpOwotCQl9Ci0JCXJldHVybiBzY2FuX05leHRGcmFtZTsKLQl9IGVsc2UKLQkJcmV0dXJuIHNjYW5fQ29udGludWU7Ci19Ci0KLS8qCi0gKiBpYm1jYW1fbW9kZWw0XzEyOHg5Nl9wYXJzZV9saW5lcygpCi0gKgotICogVGhpcyBkZWNvZGVyIGlzIGZvciBvbmUgc3RyYW5nZSBkYXRhIGZvcm1hdCB0aGF0IGlzIHByb2R1Y2VkIGJ5IE1vZGVsIDQKLSAqIGNhbWVyYSBvbmx5IGluIDEyOHg5NiBtb2RlLiBUaGlzIGlzIFJHQiBmb3JtYXQgYW5kIGhlcmUgaXMgaXRzIGRlc2NyaXB0aW9uLgotICogRmlyc3Qgb2YgYWxsLCB0aGlzIGlzIG5vbi1pbnRlcmxhY2VkIHN0cmVhbSwgbWVhbmluZyB0aGF0IGFsbCBzY2FuIGxpbmVzCi0gKiBhcmUgcHJlc2VudCBpbiB0aGUgZGF0YXN0cmVhbS4gVGhlcmUgYXJlIDk2IGNvbnNlY3V0aXZlIGJsb2NrcyBvZiBkYXRhCi0gKiB0aGF0IGRlc2NyaWJlIGFsbCA5NiBsaW5lcyBvZiB0aGUgaW1hZ2UuIEVhY2ggYmxvY2sgaXMgNSoxMjggYnl0ZXMgbG9uZwotICogYW5kIGNhcnJpZXMgUiwgRywgQiBjb21wb25lbnRzLiBUaGUgZm9ybWF0IG9mIHRoZSBibG9jayBpcyBzaG93biBpbiB0aGUKLSAqIGNvZGUgYmVsb3cuIEZpcnN0IDEyOCoyIGJ5dGVzIGFyZSBpbnRlcmxlYXZlZCBSIGFuZCBHIGNvbXBvbmVudHMuIFRoZW4KLSAqIHdlIGhhdmUgYSBnYXAgKGp1bmsgZGF0YSkgNjQgYnl0ZXMgbG9uZy4gVGhlbiBmb2xsb3cgQiBhbmQgc29tZXRoaW5nCi0gKiBlbHNlLCBhbHNvIGludGVybGVhdmVkICh0aGlzIG1ha2VzIGFub3RoZXIgMTI4KjIgYnl0ZXMpLiBBZnRlciB0aGF0Ci0gKiBwcm9iYWJseSBhbm90aGVyIDY0IGJ5dGVzIG9mIGp1bmsgZm9sbG93LgotICoKLSAqIEhpc3Rvcnk6Ci0gKiAxMC1GZWItMjAwMSBDcmVhdGVkLgotICovCi1zdGF0aWMgZW51bSBQYXJzZVN0YXRlIGlibWNhbV9tb2RlbDRfMTI4eDk2X3BhcnNlX2xpbmVzKAotCXN0cnVjdCB1dmQgKnV2ZCwKLQlzdHJ1Y3QgdXNidmlkZW9fZnJhbWUgKmZyYW1lLAotCWxvbmcgKnBjb3B5bGVuKQotewotCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGFfcnYsICpkYXRhX2d2LCAqZGF0YV9idjsKLQl1bnNpZ25lZCBpbnQgbGVuOwotCWludCBpLCB2NGxfbGluZXNpemU7IC8qIFY0TCBsaW5lIG9mZnNldCAqLwotCWNvbnN0IGludCBkYXRhX3c9MTI4LCBkYXRhX2g9OTY7Ci0Jc3RhdGljIHVuc2lnbmVkIGNoYXIgbGluZUJ1ZmZlclsxMjgqNV07Ci0KLQl2NGxfbGluZXNpemUgPSBWSURFT1NJWkVfWChmcmFtZS0+cmVxdWVzdCkgKiBWNExfQllURVNfUEVSX1BJWEVMOwotCi0JLyoKLQkgKiBNYWtlIHN1cmUgdGhhdCBvdXIgd3JpdGluZyBpbnRvIG91dHB1dCBidWZmZXIKLQkgKiB3aWxsIG5vdCBleGNlZWQgdGhlIGJ1ZmZlci4gTm90ZSB0aGF0IHdlIG1heSB3cml0ZQotCSAqIG5vdCBpbnRvIGN1cnJlbnQgb3V0cHV0IHNjYW5saW5lIGJ1dCBpbiBzZXZlcmFsIGFmdGVyCi0JICogaXQgYXMgd2VsbCAoaWYgd2UgZW5sYXJnZSBpbWFnZSB2ZXJ0aWNhbGx5LikKLQkgKi8KLQlpZiAoKGZyYW1lLT5jdXJsaW5lICsgMSkgPj0gZGF0YV9oKSB7Ci0JCWlmICh1dmQtPmRlYnVnID49IDMpCi0JCQlkZXZfaW5mbygmdXZkLT5kZXYtPmRldiwKLQkJCQkgIlJlYWNoZWQgbGluZSAlZC4gKGZyYW1lIGlzIGRvbmUpXG4iLAotCQkJCSBmcmFtZS0+Y3VybGluZSk7Ci0JCXJldHVybiBzY2FuX05leHRGcmFtZTsKLQl9Ci0KLQkvKgotCSAqIFJHUkdSRyAuLi4uIFJHUkdfX19fX19fX19fX19fQj9CP0I/IC4uLiBCP0I/X19fX19fX19fX19fCi0JICogPC0tLS0gMTI4KjIgLS0tPjwtLS0tIDY0IC0tLT48LS0tIDEyOCoyIC0tLT48LS0tIDY0IC0tLT4KLQkgKi8KLQotCS8qIE1ha2Ugc3VyZSB0aGVyZSdzIGVub3VnaCBkYXRhIGZvciB0aGUgZW50aXJlIGxpbmUgKi8KLQlsZW4gPSA1ICogZGF0YV93OwotCWFzc2VydChsZW4gPD0gc2l6ZW9mKGxpbmVCdWZmZXIpKTsKLQotCS8qIE1ha2Ugc3VyZSB0aGVyZSdzIGVub3VnaCBkYXRhIGZvciB0aGUgZW50aXJlIGxpbmUgKi8KLQlpZiAoUmluZ1F1ZXVlX0dldExlbmd0aCgmdXZkLT5kcCkgPCBsZW4pCi0JCXJldHVybiBzY2FuX091dDsKLQotCS8qIFN1Y2sgb25lIGxpbmUgb3V0IG9mIHRoZSByaW5nIHF1ZXVlICovCi0JUmluZ1F1ZXVlX0RlcXVldWUoJnV2ZC0+ZHAsIGxpbmVCdWZmZXIsIGxlbik7Ci0KLQlkYXRhX3J2ID0gbGluZUJ1ZmZlcjsKLQlkYXRhX2d2ID0gbGluZUJ1ZmZlciArIDE7Ci0JZGF0YV9idiA9IGxpbmVCdWZmZXIgKyBkYXRhX3cqMiArIGRhdGFfdy8yOwotCWZvciAoaSA9IDA7IGkgPCBWSURFT1NJWkVfWChmcmFtZS0+cmVxdWVzdCk7IGkrKykgewotCQlpbnQgcnYsIGd2LCBidjsJLyogUkdCIGNvbXBvbmVudHMgKi8KLQkJaWYgKGkgPCBkYXRhX3cpIHsKLQkJCWNvbnN0IGludCBqID0gaSAqIDI7Ci0JCQlndiA9IGRhdGFfcnZbal07Ci0JCQlydiA9IGRhdGFfZ3Zbal07Ci0JCQlidiA9IGRhdGFfYnZbal07Ci0JCQlpZiAoZmxhZ3MgJiBGTEFHU19NT05PQ0hST01FKSB7Ci0JCQkJdW5zaWduZWQgbG9uZyB5OwotCQkJCXkgPSBydiArIGd2ICsgYnY7Ci0JCQkJeSAvPSAzOwotCQkJCWlmICh5ID4gMHhGRikKLQkJCQkJeSA9IDB4RkY7Ci0JCQkJcnYgPSBndiA9IGJ2ID0gKHVuc2lnbmVkIGNoYXIpIHk7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlydiA9IGd2ID0gYnYgPSAwOwotCQl9Ci0JCVJHQjI0X1BVVFBJWEVMKGZyYW1lLCBpLCBmcmFtZS0+Y3VybGluZSwgcnYsIGd2LCBidik7Ci0JfQotCWZyYW1lLT5kZWludGVybGFjZSA9IERlaW50ZXJsYWNlX05vbmU7Ci0JZnJhbWUtPmN1cmxpbmUrKzsKLQkqcGNvcHlsZW4gKz0gdjRsX2xpbmVzaXplOwotCi0JaWYgKGZyYW1lLT5jdXJsaW5lID49IFZJREVPU0laRV9ZKGZyYW1lLT5yZXF1ZXN0KSkgewotCQlpZiAodXZkLT5kZWJ1ZyA+PSAzKSB7Ci0JCQlkZXZfaW5mbygmdXZkLT5kZXYtPmRldiwKLQkJCQkgIkFsbCByZXF1ZXN0ZWQgbGluZXMgKCVsZC4pIGRvbmUuXG4iLAotCQkJCSBWSURFT1NJWkVfWShmcmFtZS0+cmVxdWVzdCkpOwotCQl9Ci0JCXJldHVybiBzY2FuX05leHRGcmFtZTsKLQl9IGVsc2UKLQkJcmV0dXJuIHNjYW5fQ29udGludWU7Ci19Ci0KLS8qCi0gKiBpYm1jYW1fUHJvY2Vzc0lzb2NEYXRhKCkKLSAqCi0gKiBHZW5lcmljIHJvdXRpbmUgdG8gcGFyc2UgdGhlIHJpbmcgcXVldWUgZGF0YS4gSXQgZW1wbG95cyBlaXRoZXIKLSAqIGlibWNhbV9maW5kX2hlYWRlcigpIG9yIGlibWNhbV9wYXJzZV9saW5lcygpIHRvIGRvIG1vc3QKLSAqIG9mIHdvcmsuCi0gKgotICogSGlzdG9yeToKLSAqIDEvMjEvMDAgIENyZWF0ZWQuCi0gKi8KLXN0YXRpYyB2b2lkIGlibWNhbV9Qcm9jZXNzSXNvY0RhdGEoc3RydWN0IHV2ZCAqdXZkLAotCQkJCSAgIHN0cnVjdCB1c2J2aWRlb19mcmFtZSAqZnJhbWUpCi17Ci0JZW51bSBQYXJzZVN0YXRlIG5ld3N0YXRlOwotCWxvbmcgY29weWxlbiA9IDA7Ci0JaW50IG1vZCA9IElCTUNBTV9UKHV2ZCktPmNhbWVyYV9tb2RlbDsKLQotCXdoaWxlICgxKSB7Ci0JCW5ld3N0YXRlID0gc2Nhbl9PdXQ7Ci0JCWlmIChSaW5nUXVldWVfR2V0TGVuZ3RoKCZ1dmQtPmRwKSA+IDApIHsKLQkJCWlmIChmcmFtZS0+c2NhbnN0YXRlID09IFNjYW5TdGF0ZV9TY2FubmluZykgewotCQkJCW5ld3N0YXRlID0gaWJtY2FtX2ZpbmRfaGVhZGVyKHV2ZCk7Ci0JCQl9IGVsc2UgaWYgKGZyYW1lLT5zY2Fuc3RhdGUgPT0gU2NhblN0YXRlX0xpbmVzKSB7Ci0JCQkJaWYgKChtb2QgPT0gSUJNQ0FNX01PREVMXzIpICYmCi0JCQkJICAgICgodXZkLT52aWRlb3NpemUgPT0gVklERU9TSVpFXzM1MngyODgpIHx8Ci0JCQkJICAgICAodXZkLT52aWRlb3NpemUgPT0gVklERU9TSVpFXzMyMHgyNDApIHx8Ci0JCQkJICAgICAodXZkLT52aWRlb3NpemUgPT0gVklERU9TSVpFXzM1MngyNDApKSkKLQkJCQl7Ci0JCQkJCW5ld3N0YXRlID0gaWJtY2FtX21vZGVsMl8zMjB4MjQwX3BhcnNlX2xpbmVzKAotCQkJCQkJdXZkLCBmcmFtZSwgJmNvcHlsZW4pOwotCQkJCX0gZWxzZSBpZiAobW9kID09IElCTUNBTV9NT0RFTF80KSB7Ci0JCQkJCS8qCi0JCQkJCSAqIE1vZGVsIDQgY2FtZXJhcyAoSUJNIE5ldENhbWVyYSkgdXNlIE1vZGVsIDIgZGVjb2RlciAoUkdCKQotCQkJCQkgKiBmb3IgMzIweDI0MCBhbmQgYWJvdmU7IDE2MHgxMjAgYW5kIDE3NngxNDQgdXNlcyBNb2RlbCAxCi0JCQkJCSAqIGRlY29kZXIgKFlVViksIGFuZCAxMjh4OTYgbW9kZSB1c2VzID8/PwotCQkJCQkgKi8KLQkJCQkJaWYgKCh1dmQtPnZpZGVvc2l6ZSA9PSBWSURFT1NJWkVfMzUyeDI4OCkgfHwKLQkJCQkJICAgICh1dmQtPnZpZGVvc2l6ZSA9PSBWSURFT1NJWkVfMzIweDI0MCkgfHwKLQkJCQkJICAgICh1dmQtPnZpZGVvc2l6ZSA9PSBWSURFT1NJWkVfMzUyeDI0MCkpCi0JCQkJCXsKLQkJCQkJCW5ld3N0YXRlID0gaWJtY2FtX21vZGVsMl8zMjB4MjQwX3BhcnNlX2xpbmVzKHV2ZCwgZnJhbWUsICZjb3B5bGVuKTsKLQkJCQkJfSBlbHNlIGlmICh1dmQtPnZpZGVvc2l6ZSA9PSBWSURFT1NJWkVfMTI4eDk2KSB7Ci0JCQkJCQluZXdzdGF0ZSA9IGlibWNhbV9tb2RlbDRfMTI4eDk2X3BhcnNlX2xpbmVzKHV2ZCwgZnJhbWUsICZjb3B5bGVuKTsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCW5ld3N0YXRlID0gaWJtY2FtX3BhcnNlX2xpbmVzKHV2ZCwgZnJhbWUsICZjb3B5bGVuKTsKLQkJCQkJfQotCQkJCX0gZWxzZSBpZiAobW9kID09IElCTUNBTV9NT0RFTF8zKSB7Ci0JCQkJCW5ld3N0YXRlID0gaWJtY2FtX21vZGVsM19wYXJzZV9saW5lcyh1dmQsIGZyYW1lLCAmY29weWxlbik7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJbmV3c3RhdGUgPSBpYm1jYW1fcGFyc2VfbGluZXModXZkLCBmcmFtZSwgJmNvcHlsZW4pOwotCQkJCX0KLQkJCX0KLQkJfQotCQlpZiAobmV3c3RhdGUgPT0gc2Nhbl9Db250aW51ZSkKLQkJCWNvbnRpbnVlOwotCQllbHNlIGlmICgobmV3c3RhdGUgPT0gc2Nhbl9OZXh0RnJhbWUpIHx8IChuZXdzdGF0ZSA9PSBzY2FuX091dCkpCi0JCQlicmVhazsKLQkJZWxzZQotCQkJcmV0dXJuOyAvKiBzY2FuX0VuZFBhcnNlICovCi0JfQotCi0JaWYgKG5ld3N0YXRlID09IHNjYW5fTmV4dEZyYW1lKSB7Ci0JCWZyYW1lLT5mcmFtZVN0YXRlID0gRnJhbWVTdGF0ZV9Eb25lOwotCQl1dmQtPmN1cmZyYW1lID0gLTE7Ci0JCXV2ZC0+c3RhdHMuZnJhbWVfbnVtKys7Ci0JCWlmICgobW9kID09IElCTUNBTV9NT0RFTF8yKSB8fCAobW9kID09IElCTUNBTV9NT0RFTF80KSkgewotCQkJLyogTmVlZCBzb2Z0d2FyZSBjb250cmFzdCBhZGp1c3RtZW50IGZvciB0aG9zZSBjYW1lcmFzICovCi0JCQlmcmFtZS0+ZmxhZ3MgfD0gVVNCVklERU9fRlJBTUVfRkxBR19TT0ZUV0FSRV9DT05UUkFTVDsKLQkJfQotCX0KLQotCS8qIFVwZGF0ZSB0aGUgZnJhbWUncyB1bmNvbXByZXNzZWQgbGVuZ3RoLiAqLwotCWZyYW1lLT5zZXFSZWFkX0xlbmd0aCArPSBjb3B5bGVuOwotCi0jaWYgMAotCXsKLQkJc3RhdGljIHVuc2lnbmVkIGNoYXIgaj0wOwotCQltZW1zZXQoZnJhbWUtPmRhdGEsIGorKywgdXZkLT5tYXhfZnJhbWVfc2l6ZSk7Ci0JCWZyYW1lLT5mcmFtZVN0YXRlID0gRnJhbWVTdGF0ZV9SZWFkeTsKLQl9Ci0jZW5kaWYKLX0KLQotLyoKLSAqIGlibWNhbV92ZWlvKCkKLSAqCi0gKiBIaXN0b3J5OgotICogMS8yNy8wMCAgQWRkZWQgY2hlY2sgZm9yIGRldiA9PSBOVUxMOyB0aGlzIGhhcHBlbnMgaWYgY2FtZXJhIGlzIHVucGx1Z2dlZC4KLSAqLwotc3RhdGljIGludCBpYm1jYW1fdmVpbygKLQlzdHJ1Y3QgdXZkICp1dmQsCi0JdW5zaWduZWQgY2hhciByZXEsCi0JdW5zaWduZWQgc2hvcnQgdmFsdWUsCi0JdW5zaWduZWQgc2hvcnQgaW5kZXgpCi17Ci0Jc3RhdGljIGNvbnN0IGNoYXIgcHJvY1tdID0gImlibWNhbV92ZWlvIjsKLQl1bnNpZ25lZCBjaGFyIGNwWzhdIC8qID0geyAweGRlLCAweGFkLCAweGJlLCAweGVmLCAweGRlLCAweGFkLCAweGJlLCAweGVmIH0gKi87Ci0JaW50IGk7Ci0KLQlpZiAoIUNBTUVSQV9JU19PUEVSQVRJT05BTCh1dmQpKQotCQlyZXR1cm4gMDsKLQotCWlmIChyZXEgPT0gMSkgewotCQlpID0gdXNiX2NvbnRyb2xfbXNnKAotCQkJdXZkLT5kZXYsCi0JCQl1c2JfcmN2Y3RybHBpcGUodXZkLT5kZXYsIDApLAotCQkJcmVxLAotCQkJVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9FTkRQT0lOVCwKLQkJCXZhbHVlLAotCQkJaW5kZXgsCi0JCQljcCwKLQkJCXNpemVvZihjcCksCi0JCQkxMDAwKTsKLSNpZiAwCi0JCWRldl9pbmZvKCZ1dmQtPmRldi0+ZGV2LAotCQkJICJVU0IgPT4gJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnggIgotCQkJICIocmVxPSQlMDJ4IHZhbD0kJTA0eCBpbmQ9JCUwNHgpXG4iLAotCQkJIGNwWzBdLGNwWzFdLGNwWzJdLGNwWzNdLGNwWzRdLGNwWzVdLGNwWzZdLGNwWzddLAotCQkJIHJlcSwgdmFsdWUsIGluZGV4KTsKLSNlbmRpZgotCX0gZWxzZSB7Ci0JCWkgPSB1c2JfY29udHJvbF9tc2coCi0JCQl1dmQtPmRldiwKLQkJCXVzYl9zbmRjdHJscGlwZSh1dmQtPmRldiwgMCksCi0JCQlyZXEsCi0JCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9FTkRQT0lOVCwKLQkJCXZhbHVlLAotCQkJaW5kZXgsCi0JCQlOVUxMLAotCQkJMCwKLQkJCTEwMDApOwotCX0KLQlpZiAoaSA8IDApIHsKLQkJZXJyKCIlczogRVJST1I9JWQuIENhbWVyYSBzdG9wcGVkOyBSZWNvbm5lY3Qgb3IgcmVsb2FkIGRyaXZlci4iLAotCQkgICAgcHJvYywgaSk7Ci0JCXV2ZC0+bGFzdF9lcnJvciA9IGk7Ci0JfQotCXJldHVybiBpOwotfQotCi0vKgotICogaWJtY2FtX2NhbGN1bGF0ZV9mcHMoKQotICoKLSAqIFRoaXMgcHJvY2VkdXJlIHJvdWdobHkgY2FsY3VsYXRlcyB0aGUgcmVhbCBmcmFtZSByYXRlIGJhc2VkCi0gKiBvbiBGUFMgY29kZSAoZnJhbWVyYXRlPU5OTiBvcHRpb24pLiBBY3R1YWwgRlBTIGRpZmZlcnMKLSAqIHNsaWdodGx5IGRlcGVuZGluZyBvbiBsaWdodGluZyBjb25kaXRpb25zLCBzbyB0aGF0IGFjdHVhbCBmcmFtZQotICogcmF0ZSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBjYW1lcmEuIFNpbmNlIEkgZG9uJ3Qga25vdyBob3cgdG8gYXNrCi0gKiB0aGUgY2FtZXJhIHdoYXQgRlBTIGlzIG5vdyBJIGhhdmUgdG8gdXNlIHRoZSBGUFMgY29kZSBpbnN0ZWFkLgotICoKLSAqIFRoZSBGUFMgY29kZSBpcyBpbiByYW5nZSBbMC4uNl0sIDAgaXMgc2xvd2VzdCwgNiBpcyBmYXN0ZXN0LgotICogQ29ycmVzcG9uZGluZyByZWFsIEZQUyBzaG91bGQgYmUgaW4gcmFuZ2UgWzMuLjMwXSBmcmFtZXMgcGVyIHNlY29uZC4KLSAqIFRoZSBjb252ZXJzaW9uIGZvcm11bGEgaXMgb2J2aW91czoKLSAqCi0gKiByZWFsX2ZwcyA9IDMgKyAoZnBzX2NvZGUgKiA0LjUpCi0gKgotICogSGlzdG9yeToKLSAqIDEvMTgvMDAgIENyZWF0ZWQuCi0gKi8KLXN0YXRpYyBpbnQgaWJtY2FtX2NhbGN1bGF0ZV9mcHMoc3RydWN0IHV2ZCAqdXZkKQotewotCXJldHVybiAzICsgZnJhbWVyYXRlKjQgKyBmcmFtZXJhdGUvMjsKLX0KLQotLyoKLSAqIGlibWNhbV9zZW5kX0ZGXzA0XzAyKCkKLSAqCi0gKiBUaGlzIHByb2NlZHVyZSBzZW5kcyBtYWdpYyAzLWNvbW1hbmQgcHJlZml4IHRvIHRoZSBjYW1lcmEuCi0gKiBUaGUgcHVycG9zZSBvZiB0aGlzIHByZWZpeCBpcyBub3Qga25vd24uCi0gKgotICogSGlzdG9yeToKLSAqIDEvMi8wMCAgIENyZWF0ZWQuCi0gKi8KLXN0YXRpYyB2b2lkIGlibWNhbV9zZW5kX0ZGXzA0XzAyKHN0cnVjdCB1dmQgKnV2ZCkKLXsKLQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBGRiwgMHgwMTI3KTsKLQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwNCwgMHgwMTI0KTsKLQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMiwgMHgwMTI0KTsKLX0KLQotc3RhdGljIHZvaWQgaWJtY2FtX3NlbmRfMDBfMDRfMDYoc3RydWN0IHV2ZCAqdXZkKQotewotCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMjcpOwotCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDA0LCAweDAxMjQpOwotCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDA2LCAweDAxMjQpOwotfQotCi1zdGF0aWMgdm9pZCBpYm1jYW1fc2VuZF94XzAwKHN0cnVjdCB1dmQgKnV2ZCwgdW5zaWduZWQgc2hvcnQgeCkKLXsKLQlpYm1jYW1fdmVpbyh1dmQsIDAsIHgsICAgICAgMHgwMTI3KTsKLQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTI0KTsKLX0KLQotc3RhdGljIHZvaWQgaWJtY2FtX3NlbmRfeF8wMF8wNShzdHJ1Y3QgdXZkICp1dmQsIHVuc2lnbmVkIHNob3J0IHgpCi17Ci0JaWJtY2FtX3NlbmRfeF8wMCh1dmQsIHgpOwotCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDA1LCAweDAxMjQpOwotfQotCi1zdGF0aWMgdm9pZCBpYm1jYW1fc2VuZF94XzAwXzA1XzAyKHN0cnVjdCB1dmQgKnV2ZCwgdW5zaWduZWQgc2hvcnQgeCkKLXsKLQlpYm1jYW1fdmVpbyh1dmQsIDAsIHgsICAgICAgMHgwMTI3KTsKLQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTI0KTsKLQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwNSwgMHgwMTI0KTsKLQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMiwgMHgwMTI0KTsKLX0KLQotc3RhdGljIHZvaWQgaWJtY2FtX3NlbmRfeF8wMV8wMF8wNShzdHJ1Y3QgdXZkICp1dmQsIHVuc2lnbmVkIHNob3J0IHgpCi17Ci0JaWJtY2FtX3ZlaW8odXZkLCAwLCB4LCAgICAgIDB4MDEyNyk7Ci0JaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDEsIDB4MDEyNCk7Ci0JaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEyNCk7Ci0JaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDUsIDB4MDEyNCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGlibWNhbV9zZW5kX3hfMDBfMDVfMDJfMDEoc3RydWN0IHV2ZCAqdXZkLCB1bnNpZ25lZCBzaG9ydCB4KQotewotCWlibWNhbV92ZWlvKHV2ZCwgMCwgeCwgICAgICAweDAxMjcpOwotCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMjQpOwotCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDA1LCAweDAxMjQpOwotCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAyLCAweDAxMjQpOwotCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAxLCAweDAxMjQpOwotfQotCi1zdGF0aWMgdm9pZCBpYm1jYW1fc2VuZF94XzAwXzA1XzAyXzA4XzAxKHN0cnVjdCB1dmQgKnV2ZCwgdW5zaWduZWQgc2hvcnQgeCkKLXsKLQlpYm1jYW1fdmVpbyh1dmQsIDAsIHgsICAgICAgMHgwMTI3KTsKLQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTI0KTsKLQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwNSwgMHgwMTI0KTsKLQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMiwgMHgwMTI0KTsKLQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwOCwgMHgwMTI0KTsKLQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMSwgMHgwMTI0KTsKLX0KLQotc3RhdGljIHZvaWQgaWJtY2FtX1BhY2tldF9Gb3JtYXQxKHN0cnVjdCB1dmQgKnV2ZCwgdW5zaWduZWQgY2hhciBma2V5LCB1bnNpZ25lZCBjaGFyIHZhbCkKLXsKLQlpYm1jYW1fc2VuZF94XzAxXzAwXzA1KHV2ZCwgdW5rbm93bl84OCk7Ci0JaWJtY2FtX3NlbmRfeF8wMF8wNSh1dmQsIGZrZXkpOwotCWlibWNhbV9zZW5kX3hfMDBfMDVfMDJfMDhfMDEodXZkLCB2YWwpOwotCWlibWNhbV9zZW5kX3hfMDBfMDUodXZkLCB1bmtub3duXzg4KTsKLQlpYm1jYW1fc2VuZF94XzAwXzA1XzAyXzAxKHV2ZCwgZmtleSk7Ci0JaWJtY2FtX3NlbmRfeF8wMF8wNSh1dmQsIHVua25vd25fODkpOwotCWlibWNhbV9zZW5kX3hfMDAodXZkLCBma2V5KTsKLQlpYm1jYW1fc2VuZF8wMF8wNF8wNih1dmQpOwotCWlibWNhbV92ZWlvKHV2ZCwgMSwgMHgwMDAwLCAweDAxMjYpOwotCWlibWNhbV9zZW5kX0ZGXzA0XzAyKHV2ZCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGlibWNhbV9QYWNrZXRGb3JtYXQyKHN0cnVjdCB1dmQgKnV2ZCwgdW5zaWduZWQgY2hhciBma2V5LCB1bnNpZ25lZCBjaGFyIHZhbCkKLXsKLQlpYm1jYW1fc2VuZF94XzAxXzAwXzA1CSh1dmQsIHVua25vd25fODgpOwotCWlibWNhbV9zZW5kX3hfMDBfMDUJKHV2ZCwgZmtleSk7Ci0JaWJtY2FtX3NlbmRfeF8wMF8wNV8wMgkodXZkLCB2YWwpOwotfQotCi1zdGF0aWMgdm9pZCBpYm1jYW1fbW9kZWwyX1BhY2tldDIoc3RydWN0IHV2ZCAqdXZkKQotewotCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGZmLCAweDAxMmQpOwotCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhmZWEzLCAweDAxMjQpOwotfQotCi1zdGF0aWMgdm9pZCBpYm1jYW1fbW9kZWwyX1BhY2tldDEoc3RydWN0IHV2ZCAqdXZkLCB1bnNpZ25lZCBzaG9ydCB2MSwgdW5zaWduZWQgc2hvcnQgdjIpCi17Ci0JaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZCk7Ci0JaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwZmYsIDB4MDEyZSk7Ci0JaWJtY2FtX3ZlaW8odXZkLCAwLCB2MSwgICAgIDB4MDEyZik7Ci0JaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwZmYsIDB4MDEzMCk7Ci0JaWJtY2FtX3ZlaW8odXZkLCAwLCAweGM3MTksIDB4MDEyNCk7Ci0JaWJtY2FtX3ZlaW8odXZkLCAwLCB2MiwgICAgIDB4MDEyNyk7Ci0KLQlpYm1jYW1fbW9kZWwyX1BhY2tldDIodXZkKTsKLX0KLQotLyoKLSAqIGlibWNhbV9tb2RlbDNfUGFja2V0MSgpCi0gKgotICogMDBfMDA3OF8wMTJkCi0gKiAwMF8wMDk3XzAxMmYKLSAqIDAwX2QxNDFfMDEyNAotICogMDBfMDA5Nl8wMTI3Ci0gKiAwMF9mZWE4XzAxMjQKLSovCi1zdGF0aWMgdm9pZCBpYm1jYW1fbW9kZWwzX1BhY2tldDEoc3RydWN0IHV2ZCAqdXZkLCB1bnNpZ25lZCBzaG9ydCB2MSwgdW5zaWduZWQgc2hvcnQgdjIpCi17Ci0JaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwNzgsIDB4MDEyZCk7Ci0JaWJtY2FtX3ZlaW8odXZkLCAwLCB2MSwgICAgIDB4MDEyZik7Ci0JaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDEsIDB4MDEyNCk7Ci0JaWJtY2FtX3ZlaW8odXZkLCAwLCB2MiwgICAgIDB4MDEyNyk7Ci0JaWJtY2FtX3ZlaW8odXZkLCAwLCAweGZlYTgsIDB4MDEyNCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGlibWNhbV9tb2RlbDRfQnJpZ2h0bmVzc1BhY2tldChzdHJ1Y3QgdXZkICp1dmQsIGludCBpKQotewotCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmQpOwotCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDI2LCAweDAxMmYpOwotCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQxLCAweDAxMjQpOwotCWlibWNhbV92ZWlvKHV2ZCwgMCwgaSwgICAgICAweDAxMjcpOwotCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMzApOwotCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg4MmE4LCAweDAxMjQpOwotCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDM4LCAweDAxMmQpOwotCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDA0LCAweDAxMmYpOwotCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQ1LCAweDAxMjQpOwotCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhmZmZhLCAweDAxMjQpOwotfQotCi0vKgotICogaWJtY2FtX2FkanVzdF9jb250cmFzdCgpCi0gKgotICogVGhlIGNvbnRyYXN0IHZhbHVlIGNoYW5nZXMgZnJvbSAwIChoaWdoIGNvbnRyYXN0KSB0byAxNSAobG93IGNvbnRyYXN0KS4KLSAqIFRoaXMgaXMgaW4gcmV2ZXJzZSB0byB1c3VhbCBvcmRlciBvZiB0aGluZ3MgKHN1Y2ggYXMgVFYgY29udHJvbHMpLCBzbwotICogd2UgcmV2ZXJzZSBpdCBhZ2FpbiBoZXJlLgotICoKLSAqIFRPRE86IHdlIHByb2JhYmx5IGRvbid0IG5lZWQgdG8gc2VuZCB0aGUgc2V0dXAgNSB0aW1lcy4uLgotICoKLSAqIEhpc3Rvcnk6Ci0gKiAxLzIvMDAgICBDcmVhdGVkLgotICovCi1zdGF0aWMgdm9pZCBpYm1jYW1fYWRqdXN0X2NvbnRyYXN0KHN0cnVjdCB1dmQgKnV2ZCkKLXsKLQl1bnNpZ25lZCBjaGFyIGFfY29udHJhc3QgPSB1dmQtPnZwaWMuY29udHJhc3QgPj4gMTI7Ci0JdW5zaWduZWQgY2hhciBuZXdfY29udHJhc3Q7Ci0KLQlpZiAoYV9jb250cmFzdCA+PSAxNikKLQkJYV9jb250cmFzdCA9IDE1OwotCW5ld19jb250cmFzdCA9IDE1IC0gYV9jb250cmFzdDsKLQlpZiAobmV3X2NvbnRyYXN0ID09IHV2ZC0+dnBpY19vbGQuY29udHJhc3QpCi0JCXJldHVybjsKLQl1dmQtPnZwaWNfb2xkLmNvbnRyYXN0ID0gbmV3X2NvbnRyYXN0OwotCXN3aXRjaCAoSUJNQ0FNX1QodXZkKS0+Y2FtZXJhX21vZGVsKSB7Ci0JY2FzZSBJQk1DQU1fTU9ERUxfMToKLQl7Ci0JCWNvbnN0IGludCBudHJpZXMgPSA1OwotCQlpbnQgaTsKLQkJZm9yIChpPTA7IGkgPCBudHJpZXM7IGkrKykgewotCQkJaWJtY2FtX1BhY2tldF9Gb3JtYXQxKHV2ZCwgY29udHJhc3RfMTQsIG5ld19jb250cmFzdCk7Ci0JCQlpYm1jYW1fc2VuZF9GRl8wNF8wMih1dmQpOwotCQl9Ci0JCWJyZWFrOwotCX0KLQljYXNlIElCTUNBTV9NT0RFTF8yOgotCWNhc2UgSUJNQ0FNX01PREVMXzQ6Ci0JCS8qIE1vZGVscyAyLCA0IGRvIG5vdCBoYXZlIHRoaXMgY29udHJvbDsgaW1wbGVtZW50ZWQgaW4gc29mdHdhcmUuICovCi0JCWJyZWFrOwotCWNhc2UgSUJNQ0FNX01PREVMXzM6Ci0JewkvKiBQcmVzZXQgaGFyZHdhcmUgdmFsdWVzICovCi0JCXN0YXRpYyBjb25zdCBzdHJ1Y3QgewotCQkJdW5zaWduZWQgc2hvcnQgY3YxOwotCQkJdW5zaWduZWQgc2hvcnQgY3YyOwotCQkJdW5zaWduZWQgc2hvcnQgY3YzOwotCQl9IGN2WzddID0gewotCQkJeyAweDA1LCAweDA1LCAweDBmIH0sCS8qIE1pbmltdW0gKi8KLQkJCXsgMHgwNCwgMHgwNCwgMHgxNiB9LAotCQkJeyAweDAyLCAweDAzLCAweDE2IH0sCi0JCQl7IDB4MDIsIDB4MDgsIDB4MTYgfSwKLQkJCXsgMHgwMSwgMHgwYywgMHgxNiB9LAotCQkJeyAweDAxLCAweDBlLCAweDE2IH0sCi0JCQl7IDB4MDEsIDB4MTAsIDB4MTYgfQkvKiBNYXhpbXVtICovCi0JCX07Ci0JCWludCBpID0gYV9jb250cmFzdCAvIDI7Ci0JCVJFU1RSSUNUX1RPX1JBTkdFKGksIDAsIDYpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTBjKTsJLyogU3RvcCAqLwotCQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwNjcsIGN2W2ldLmN2MSk7Ci0JCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA1YiwgY3ZbaV0uY3YyKTsKLQkJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDVjLCBjdltpXS5jdjMpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMSwgMHgwMTE0KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYzAsIDB4MDEwYyk7CS8qIEdvISAqLwotCQl1c2JfY2xlYXJfaGFsdCh1dmQtPmRldiwgdXNiX3Jjdmlzb2NwaXBlKHV2ZC0+ZGV2LCB1dmQtPnZpZGVvX2VuZHApKTsKLQkJYnJlYWs7Ci0JfQotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLX0KLQotLyoKLSAqIGlibWNhbV9jaGFuZ2VfbGlnaHRpbmdfY29uZGl0aW9ucygpCi0gKgotICogQ2FtZXJhIG1vZGVsIDE6Ci0gKiBXZSBoYXZlIDMgbGV2ZWxzIG9mIGxpZ2h0aW5nIGNvbmRpdGlvbnM6IDA9QnJpZ2h0LCAxPU1lZGl1bSwgMj1Mb3cuCi0gKgotICogQ2FtZXJhIG1vZGVsIDI6Ci0gKiBXZSBoYXZlIDE2IGxldmVscyBvZiBsaWdodGluZywgMCBmb3IgYnJpZ2h0IGxpZ2h0IGFuZCB1cCB0byAxNSBmb3IKLSAqIGxvdyBsaWdodC4gQnV0IHZhbHVlcyBhYm92ZSA1IG9yIHNvIGFyZSB1c2VsZXNzIGJlY2F1c2UgY2FtZXJhIGlzCi0gKiBub3QgcmVhbGx5IGNhcGFibGUgdG8gcHJvZHVjZSBhbnl0aGluZyB3b3J0aCB2aWV3aW5nIGF0IHN1Y2ggbGlnaHQuCi0gKiBUaGlzIHNldHRpbmcgbWF5IGJlIGFsdGVyZWQgb25seSBpbiBjZXJ0YWluIGNhbWVyYSBzdGF0ZS4KLSAqCi0gKiBMb3cgbGlnaHRpbmcgZm9yY2VzIHNsb3dlciBGUFMuIExpZ2h0aW5nIGlzIHNldCBhcyBhIG1vZHVsZSBwYXJhbWV0ZXIuCi0gKgotICogSGlzdG9yeToKLSAqIDEvNS8wMCAgIENyZWF0ZWQuCi0gKiAyLzIwLzAwICBBZGRlZCBzdXBwb3J0IGZvciBNb2RlbCAyIGNhbWVyYXMuCi0gKi8KLXN0YXRpYyB2b2lkIGlibWNhbV9jaGFuZ2VfbGlnaHRpbmdfY29uZGl0aW9ucyhzdHJ1Y3QgdXZkICp1dmQpCi17Ci0JaWYgKGRlYnVnID4gMCkKLQkJZGV2X2luZm8oJnV2ZC0+ZGV2LT5kZXYsCi0JCQkgIiVzOiBTZXQgbGlnaHRpbmcgdG8gJWh1LlxuIiwgX19mdW5jX18sIGxpZ2h0aW5nKTsKLQotCXN3aXRjaCAoSUJNQ0FNX1QodXZkKS0+Y2FtZXJhX21vZGVsKSB7Ci0JY2FzZSBJQk1DQU1fTU9ERUxfMToKLQl7Ci0JCWNvbnN0IGludCBudHJpZXMgPSA1OwotCQlpbnQgaTsKLQkJZm9yIChpPTA7IGkgPCBudHJpZXM7IGkrKykKLQkJCWlibWNhbV9QYWNrZXRfRm9ybWF0MSh1dmQsIGxpZ2h0XzI3LCAodW5zaWduZWQgc2hvcnQpIGxpZ2h0aW5nKTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgSUJNQ0FNX01PREVMXzI6Ci0jaWYgMAotCQkvKgotCQkgKiBUaGlzIGNvbW1hbmQgYXBwYXJlbnRseSByZXF1aXJlcyBjYW1lcmEgdG8gYmUgc3RvcHBlZC4gTXkKLQkJICogZXhwZXJpbWVudHMgc2hvd2VkIHRoYXQgaXQgLWlzLSBwb3NzaWJsZSB0byBhbHRlciB0aGUgbGlnaHRpbmcKLQkJICogY29uZGl0aW9ucyBzZXR0aW5nICJvbiB0aGUgZmx5IiwgYnV0IHdoeSBib3RoZXI/IFRoaXMgc2V0dGluZyBkb2VzCi0JCSAqIG5vdCB3b3JrIHJlbGlhYmx5IGluIGFsbCBjYXNlcywgc28gSSBkZWNpZGVkIHNpbXBseSB0byBsZWF2ZSB0aGUKLQkJICogc2V0dGluZyB3aGVyZSBYaXJsaW5rIHB1dCBpdCAtIGluIHRoZSBjYW1lcmEgc2V0dXAgcGhhc2UuIFRoaXMgY29kZQotCQkgKiBpcyBjb21tZW50ZWQgb3V0IGJlY2F1c2UgaXQgZG9lcyBub3Qgd29yayBhdCAtYW55LSBtb21lbnQsIHNvIGl0cwotCQkgKiBwcmVzZW5jZSBtYWtlcyBubyBzZW5zZS4gWW91IG1heSB1c2UgaXQgZm9yIGV4cGVyaW1lbnRzLgotCQkgKi8KLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEwYyk7CS8qIFN0b3AgY2FtZXJhICovCi0JCWlibWNhbV9tb2RlbDJfUGFja2V0MSh1dmQsIG1vZDJfc2Vuc2l0aXZpdHksIGxpZ2h0aW5nKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYzAsIDB4MDEwYyk7CS8qIFN0YXJ0IGNhbWVyYSAqLwotI2VuZGlmCi0JCWJyZWFrOwotCWNhc2UgSUJNQ0FNX01PREVMXzM6Ci0JY2FzZSBJQk1DQU1fTU9ERUxfNDoKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci19Ci0KLS8qCi0gKiBpYm1jYW1fc2V0X3NoYXJwbmVzcygpCi0gKgotICogQ2FtZXJhcyBtb2RlbCAxIGhhdmUgaW50ZXJuYWwgc21vb3RoaW5nIGZlYXR1cmUuIEl0IGlzIGNvbnRyb2xsZWQgYnkgdmFsdWUgaW4KLSAqIHJhbmdlIFswLi42XSwgd2hlcmUgMCBpcyBtb3N0IHNtb290aCBhbmQgNiBpcyBtb3N0IHNoYXJwIChyYXcgaW1hZ2UsIEkgZ3Vlc3MpLgotICogUmVjb21tZW5kZWQgdmFsdWUgaXMgNC4gQ2FtZXJhcyBtb2RlbCAyIGRvIG5vdCBoYXZlIHRoaXMgZmVhdHVyZSBhdCBhbGwuCi0gKi8KLXN0YXRpYyB2b2lkIGlibWNhbV9zZXRfc2hhcnBuZXNzKHN0cnVjdCB1dmQgKnV2ZCkKLXsKLQlzd2l0Y2ggKElCTUNBTV9UKHV2ZCktPmNhbWVyYV9tb2RlbCkgewotCWNhc2UgSUJNQ0FNX01PREVMXzE6Ci0JewotCQlzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgc2FbXSA9IHsgMHgxMSwgMHgxMywgMHgxNiwgMHgxOCwgMHgxYSwgMHg4LCAweDBhIH07Ci0JCXVuc2lnbmVkIHNob3J0IGksIHN2OwotCi0JCVJFU1RSSUNUX1RPX1JBTkdFKHNoYXJwbmVzcywgU0hBUlBORVNTX01JTiwgU0hBUlBORVNTX01BWCk7Ci0JCWlmIChkZWJ1ZyA+IDApCi0JCQlkZXZfaW5mbygmdXZkLT5kZXYtPmRldiwgIiVzOiBTZXQgc2hhcnBuZXNzIHRvICVodS5cbiIsCi0JCQkJIF9fZnVuY19fLCBzaGFycG5lc3MpOwotCi0JCXN2ID0gc2Fbc2hhcnBuZXNzIC0gU0hBUlBORVNTX01JTl07Ci0JCWZvciAoaT0wOyBpIDwgMjsgaSsrKSB7Ci0JCQlpYm1jYW1fc2VuZF94XzAxXzAwXzA1CSh1dmQsIHVua25vd25fODgpOwotCQkJaWJtY2FtX3NlbmRfeF8wMF8wNQkJKHV2ZCwgc2hhcnBfMTMpOwotCQkJaWJtY2FtX3NlbmRfeF8wMF8wNV8wMgkodXZkLCBzdik7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCWNhc2UgSUJNQ0FNX01PREVMXzI6Ci0JY2FzZSBJQk1DQU1fTU9ERUxfNDoKLQkJLyogTW9kZWxzIDIsIDQgZG8gbm90IGhhdmUgdGhpcyBjb250cm9sICovCi0JCWJyZWFrOwotCWNhc2UgSUJNQ0FNX01PREVMXzM6Ci0JewkvKgotCQkgKiAiVXNlIGEgdGFibGUgb2YgbWFnaWMgbnVtYmVycy4KLQkJICogIFRoaXMgc2V0dGluZyBkb2Vzbid0IHJlYWxseSBjaGFuZ2UgbXVjaC4KLQkJICogIEJ1dCB0aGF0J3MgaG93IFdpbmRvd3MgZG9lcyBpdC4iCi0JCSAqLwotCQlzdGF0aWMgY29uc3Qgc3RydWN0IHsKLQkJCXVuc2lnbmVkIHNob3J0IHN2MTsKLQkJCXVuc2lnbmVkIHNob3J0IHN2MjsKLQkJCXVuc2lnbmVkIHNob3J0IHN2MzsKLQkJCXVuc2lnbmVkIHNob3J0IHN2NDsKLQkJfSBzdls3XSA9IHsKLQkJCXsgMHgwMCwgMHgwMCwgMHgwNSwgMHgxNCB9LAkvKiBTbW9vdGhlc3QgKi8KLQkJCXsgMHgwMSwgMHgwNCwgMHgwNSwgMHgxNCB9LAotCQkJeyAweDAyLCAweDA0LCAweDA1LCAweDE0IH0sCi0JCQl7IDB4MDMsIDB4MDQsIDB4MDUsIDB4MTQgfSwKLQkJCXsgMHgwMywgMHgwNSwgMHgwNSwgMHgxNCB9LAotCQkJeyAweDAzLCAweDA2LCAweDA1LCAweDE0IH0sCi0JCQl7IDB4MDMsIDB4MDcsIDB4MDUsIDB4MTQgfQkvKiBTaGFycGVzdCAqLwotCQl9OwotCQlSRVNUUklDVF9UT19SQU5HRShzaGFycG5lc3MsIFNIQVJQTkVTU19NSU4sIFNIQVJQTkVTU19NQVgpOwotCQlSRVNUUklDVF9UT19SQU5HRShzaGFycG5lc3MsIDAsIDYpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTBjKTsJLyogU3RvcCAqLwotCQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwNjAsIHN2W3NoYXJwbmVzc10uc3YxKTsKLQkJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDYxLCBzdltzaGFycG5lc3NdLnN2Mik7Ci0JCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA2Miwgc3Zbc2hhcnBuZXNzXS5zdjMpOwotCQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwNjMsIHN2W3NoYXJwbmVzc10uc3Y0KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDEsIDB4MDExNCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGMwLCAweDAxMGMpOwkvKiBHbyEgKi8KLQkJdXNiX2NsZWFyX2hhbHQodXZkLT5kZXYsIHVzYl9yY3Zpc29jcGlwZSh1dmQtPmRldiwgdXZkLT52aWRlb19lbmRwKSk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAxLCAweDAxMTMpOwotCQlicmVhazsKLQl9Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotfQotCi0vKgotICogaWJtY2FtX3NldF9icmlnaHRuZXNzKCkKLSAqCi0gKiBUaGlzIHByb2NlZHVyZSBjaGFuZ2VzIGJyaWdodG5lc3Mgb2YgdGhlIHBpY3R1cmUuCi0gKi8KLXN0YXRpYyB2b2lkIGlibWNhbV9zZXRfYnJpZ2h0bmVzcyhzdHJ1Y3QgdXZkICp1dmQpCi17Ci0Jc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG4gPSAxOwotCi0JaWYgKGRlYnVnID4gMCkKLQkJZGV2X2luZm8oJnV2ZC0+ZGV2LT5kZXYsICIlczogU2V0IGJyaWdodG5lc3MgdG8gJWh1LlxuIiwKLQkJCSBfX2Z1bmNfXywgdXZkLT52cGljLmJyaWdodG5lc3MpOwotCi0Jc3dpdGNoIChJQk1DQU1fVCh1dmQpLT5jYW1lcmFfbW9kZWwpIHsKLQljYXNlIElCTUNBTV9NT0RFTF8xOgotCXsKLQkJdW5zaWduZWQgc2hvcnQgaSwgaiwgYnZbM107Ci0JCWJ2WzBdID0gYnZbMV0gPSBidlsyXSA9IHV2ZC0+dnBpYy5icmlnaHRuZXNzID4+IDEwOwotCQlpZiAoYnZbMF0gPT0gKHV2ZC0+dnBpY19vbGQuYnJpZ2h0bmVzcyA+PiAxMCkpCi0JCQlyZXR1cm47Ci0JCXV2ZC0+dnBpY19vbGQuYnJpZ2h0bmVzcyA9IGJ2WzBdOwotCQlmb3IgKGo9MDsgaiA8IDM7IGorKykKLQkJCWZvciAoaT0wOyBpIDwgbjsgaSsrKQotCQkJCWlibWNhbV9QYWNrZXRfRm9ybWF0MSh1dmQsIGJyaWdodF8zeFtqXSwgYnZbal0pOwotCQlicmVhazsKLQl9Ci0JY2FzZSBJQk1DQU1fTU9ERUxfMjoKLQl7Ci0JCXVuc2lnbmVkIHNob3J0IGksIGo7Ci0JCWkgPSB1dmQtPnZwaWMuYnJpZ2h0bmVzcyA+PiAxMjsJLyogMCAuLiAxNSAqLwotCQlqID0gMHg2MCArIGkgKiAoKDB4ZWUgLSAweDYwKSAvIDE2KTsJLyogMHg2MCAuLiAweGVlIG9yIHNvICovCi0JCWlmICh1dmQtPnZwaWNfb2xkLmJyaWdodG5lc3MgPT0gaikKLQkJCWJyZWFrOwotCQl1dmQtPnZwaWNfb2xkLmJyaWdodG5lc3MgPSBqOwotCQlpYm1jYW1fbW9kZWwyX1BhY2tldDEodXZkLCBtb2QyX2JyaWdodG5lc3MsIGopOwotCQlicmVhazsKLQl9Ci0JY2FzZSBJQk1DQU1fTU9ERUxfMzoKLQl7Ci0JCS8qIE1vZGVsIDM6IEJyaWdodG5lc3MgcmFuZ2UgJ2knIGluIFsweDBDLi4weDNGXSAqLwotCQl1bnNpZ25lZCBzaG9ydCBpID0KLQkJCTB4MEMgKyAodXZkLT52cGljLmJyaWdodG5lc3MgLyAoMHhGRkZGIC8gKDB4M0YgLSAweDBDICsgMSkpKTsKLQkJUkVTVFJJQ1RfVE9fUkFOR0UoaSwgMHgwQywgMHgzRik7Ci0JCWlmICh1dmQtPnZwaWNfb2xkLmJyaWdodG5lc3MgPT0gaSkKLQkJCWJyZWFrOwotCQl1dmQtPnZwaWNfb2xkLmJyaWdodG5lc3MgPSBpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTBjKTsJLyogU3RvcCAqLwotCQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwMzYsIGkpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMSwgMHgwMTE0KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYzAsIDB4MDEwYyk7CS8qIEdvISAqLwotCQl1c2JfY2xlYXJfaGFsdCh1dmQtPmRldiwgdXNiX3Jjdmlzb2NwaXBlKHV2ZC0+ZGV2LCB1dmQtPnZpZGVvX2VuZHApKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDEsIDB4MDExMyk7Ci0JCWJyZWFrOwotCX0KLQljYXNlIElCTUNBTV9NT0RFTF80OgotCXsKLQkJLyogTW9kZWwgNDogQnJpZ2h0bmVzcyByYW5nZSAnaScgaW4gWzB4MDQuLjB4YjRdICovCi0JCXVuc2lnbmVkIHNob3J0IGkgPSAweDA0ICsgKHV2ZC0+dnBpYy5icmlnaHRuZXNzIC8gKDB4RkZGRiAvICgweGI0IC0gMHgwNCArIDEpKSk7Ci0JCVJFU1RSSUNUX1RPX1JBTkdFKGksIDB4MDQsIDB4YjQpOwotCQlpZiAodXZkLT52cGljX29sZC5icmlnaHRuZXNzID09IGkpCi0JCQlicmVhazsKLQkJdXZkLT52cGljX29sZC5icmlnaHRuZXNzID0gaTsKLQkJaWJtY2FtX21vZGVsNF9CcmlnaHRuZXNzUGFja2V0KHV2ZCwgaSk7Ci0JCWJyZWFrOwotCX0KLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGlibWNhbV9zZXRfaHVlKHN0cnVjdCB1dmQgKnV2ZCkKLXsKLQlzd2l0Y2ggKElCTUNBTV9UKHV2ZCktPmNhbWVyYV9tb2RlbCkgewotCWNhc2UgSUJNQ0FNX01PREVMXzI6Ci0JewotCQl1bnNpZ25lZCBzaG9ydCBodWUgPSB1dmQtPnZwaWMuaHVlID4+IDk7IC8qIDAgLi4gN0YgKi8KLQkJaWYgKHV2ZC0+dnBpY19vbGQuaHVlID09IGh1ZSkKLQkJCXJldHVybjsKLQkJdXZkLT52cGljX29sZC5odWUgPSBodWU7Ci0JCWlibWNhbV9tb2RlbDJfUGFja2V0MSh1dmQsIG1vZDJfaHVlLCBodWUpOwotCQkvKiBpYm1jYW1fbW9kZWwyX1BhY2tldDEodXZkLCBtb2QyX3NhdHVyYXRpb24sIHNhdCk7ICovCi0JCWJyZWFrOwotCX0KLQljYXNlIElCTUNBTV9NT0RFTF8zOgotCXsKLSNpZiAwIC8qIFRoaXMgc2VlbXMgbm90IHRvIHdvcmsuIE5vIHByb2JsZW0sIHdpbGwgZml4IHByb2dyYW1tYXRpY2FsbHkgKi8KLQkJdW5zaWduZWQgc2hvcnQgaHVlID0gMHgwNSArICh1dmQtPnZwaWMuaHVlIC8gKDB4RkZGRiAvICgweDM3IC0gMHgwNSArIDEpKSk7Ci0JCVJFU1RSSUNUX1RPX1JBTkdFKGh1ZSwgMHgwNSwgMHgzNyk7Ci0JCWlmICh1dmQtPnZwaWNfb2xkLmh1ZSA9PSBodWUpCi0JCQlyZXR1cm47Ci0JCXV2ZC0+dnBpY19vbGQuaHVlID0gaHVlOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTBjKTsJLyogU3RvcCAqLwotCQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwN2UsIGh1ZSk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAxLCAweDAxMTQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBjMCwgMHgwMTBjKTsJLyogR28hICovCi0JCXVzYl9jbGVhcl9oYWx0KHV2ZC0+ZGV2LCB1c2JfcmN2aXNvY3BpcGUodXZkLT5kZXYsIHV2ZC0+dmlkZW9fZW5kcCkpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMSwgMHgwMTEzKTsKLSNlbmRpZgotCQlicmVhazsKLQl9Ci0JY2FzZSBJQk1DQU1fTU9ERUxfNDoKLQl7Ci0JCXVuc2lnbmVkIHNob3J0IHJfZ2FpbiwgZ19nYWluLCBiX2dhaW4sIGh1ZTsKLQotCQkvKgotCQkgKiBJIGFtIG5vdCBzdXJlIHIvZy9iX2dhaW4gdmFyaWFibGVzIGV4YWN0bHkgY29udHJvbCBnYWluCi0JCSAqIG9mIHRob3NlIGNoYW5uZWxzLiBNb3N0IGxpa2VseSB0aGV5IHN1YnRseSBjaGFuZ2Ugc29tZQotCQkgKiB2ZXJ5IGludGVybmFsIGltYWdlIHByb2Nlc3Npbmcgc2V0dGluZ3MgaW4gdGhlIGNhbWVyYS4KLQkJICogSW4gYW55IGNhc2UsIGhlcmUgaXMgd2hhdCB0aGV5IGRvLCBhbmQgZmVlbCBmcmVlIHRvIHR3ZWFrOgotCQkgKgotCQkgKiByX2dhaW46IHNlcmlvdXNseSBhZmZlY3RzIHJlZCBnYWluCi0JCSAqIGdfZ2Fpbjogc2VyaW91c2x5IGFmZmVjdHMgZ3JlZW4gZ2FpbgotCQkgKiBiX2dhaW46IHNlcmlvdXNseSBhZmZlY3RzIGJsdWUgZ2FpbgotCQkgKiBodWU6IGNoYW5nZXMgYXZlcmFnZSBjb2xvciBmcm9tIHZpb2xldCAoMCkgdG8gcmVkICgweEZGKQotCQkgKgotCQkgKiBUaGVzZSBzZXR0aW5ncyBhcmUgcHJlc2V0IGZvciBhIGRlY2VudCB3aGl0ZSBiYWxhbmNlIGluCi0JCSAqIDMyMHgyNDAsIDM1MngyODggbW9kZXMuIExvdy1yZXMgbW9kZXMgZXhoaWJpdCBoaWdoZXIgY29udHJhc3QKLQkJICogYW5kIHRoZXJlZm9yZSBtYXkgbmVlZCBkaWZmZXJlbnQgdmFsdWVzIGhlcmUuCi0JCSAqLwotCQlodWUgPSAyMCArICh1dmQtPnZwaWMuaHVlID4+IDkpOwotCQlzd2l0Y2ggKHV2ZC0+dmlkZW9zaXplKSB7Ci0JCWNhc2UgVklERU9TSVpFXzEyOHg5NjoKLQkJCXJfZ2FpbiA9IDkwOwotCQkJZ19nYWluID0gMTY2OwotCQkJYl9nYWluID0gMTc1OwotCQkJYnJlYWs7Ci0JCWNhc2UgVklERU9TSVpFXzE2MHgxMjA6Ci0JCQlyX2dhaW4gPSA3MDsKLQkJCWdfZ2FpbiA9IDE2NjsKLQkJCWJfZ2FpbiA9IDE4NTsKLQkJCWJyZWFrOwotCQljYXNlIFZJREVPU0laRV8xNzZ4MTQ0OgotCQkJcl9nYWluID0gMTYwOwotCQkJZ19nYWluID0gMTc1OwotCQkJYl9nYWluID0gMTg1OwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyX2dhaW4gPSAxMjA7Ci0JCQlnX2dhaW4gPSAxNjY7Ci0JCQliX2dhaW4gPSAxNzU7Ci0JCQlicmVhazsKLQkJfQotCQlSRVNUUklDVF9UT19SQU5HRShodWUsIDEsIDB4N2YpOwotCi0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxZSwgMHgwMTJmKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDEsIDB4MDEyNCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgZ19nYWluLCAweDAxMjcpOwkvKiBHcmVlbiBnYWluICovCi0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgcl9nYWluLCAweDAxMmUpOwkvKiBSZWQgZ2FpbiAqLwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIGJfZ2FpbiwgMHgwMTMwKTsJLyogQmx1ZSBnYWluICovCi0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg4YTI4LCAweDAxMjQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIGh1ZSwgICAgMHgwMTJkKTsJLyogSHVlICovCi0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhmNTQ1LCAweDAxMjQpOwotCQlicmVhazsKLQl9Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotfQotCi0vKgotICogaWJtY2FtX2FkanVzdF9waWN0dXJlKCkKLSAqCi0gKiBUaGlzIHByb2NlZHVyZSBnZXRzIGNhbGxlZCBmcm9tIFY0TCBpbnRlcmZhY2UgdG8gdXBkYXRlIHBpY3R1cmUgc2V0dGluZ3MuCi0gKiBIZXJlIHdlIGNoYW5nZSBicmlnaHRuZXNzIGFuZCBjb250cmFzdC4KLSAqLwotc3RhdGljIHZvaWQgaWJtY2FtX2FkanVzdF9waWN0dXJlKHN0cnVjdCB1dmQgKnV2ZCkKLXsKLQlpYm1jYW1fYWRqdXN0X2NvbnRyYXN0KHV2ZCk7Ci0JaWJtY2FtX3NldF9icmlnaHRuZXNzKHV2ZCk7Ci0JaWJtY2FtX3NldF9odWUodXZkKTsKLX0KLQotc3RhdGljIGludCBpYm1jYW1fbW9kZWwxX3NldHVwKHN0cnVjdCB1dmQgKnV2ZCkKLXsKLQljb25zdCBpbnQgbnRyaWVzID0gNTsKLQlpbnQgaTsKLQotCWlibWNhbV92ZWlvKHV2ZCwgMSwgMHgwMCwgMHgwMTI4KTsKLQlpYm1jYW1fdmVpbyh1dmQsIDEsIDB4MDAsIDB4MDEwMCk7Ci0JaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAxLCAweDAxMDApOwkvKiBMRUQgT24gICovCi0JaWJtY2FtX3ZlaW8odXZkLCAxLCAweDAwLCAweDAxMDApOwotCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg4MSwgMHgwMTAwKTsJLyogTEVEIE9mZiAqLwotCWlibWNhbV92ZWlvKHV2ZCwgMSwgMHgwMCwgMHgwMTAwKTsKLQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDEsIDB4MDEwMCk7CS8qIExFRCBPbiAgKi8KLQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDEsIDB4MDEwOCk7Ci0KLQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDMsIDB4MDExMik7Ci0JaWJtY2FtX3ZlaW8odXZkLCAxLCAweDAwLCAweDAxMTUpOwotCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwNiwgMHgwMTE1KTsKLQlpYm1jYW1fdmVpbyh1dmQsIDEsIDB4MDAsIDB4MDExNik7Ci0JaWJtY2FtX3ZlaW8odXZkLCAwLCAweDQ0LCAweDAxMTYpOwotCWlibWNhbV92ZWlvKHV2ZCwgMSwgMHgwMCwgMHgwMTE2KTsKLQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4NDAsIDB4MDExNik7Ci0JaWJtY2FtX3ZlaW8odXZkLCAxLCAweDAwLCAweDAxMTUpOwotCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwZSwgMHgwMTE1KTsKLQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MTksIDB4MDEyYyk7Ci0KLQlpYm1jYW1fUGFja2V0X0Zvcm1hdDEodXZkLCAweDAwLCAweDFlKTsKLQlpYm1jYW1fUGFja2V0X0Zvcm1hdDEodXZkLCAweDM5LCAweDBkKTsKLQlpYm1jYW1fUGFja2V0X0Zvcm1hdDEodXZkLCAweDM5LCAweDA5KTsKLQlpYm1jYW1fUGFja2V0X0Zvcm1hdDEodXZkLCAweDNiLCAweDAwKTsKLQlpYm1jYW1fUGFja2V0X0Zvcm1hdDEodXZkLCAweDI4LCAweDIyKTsKLQlpYm1jYW1fUGFja2V0X0Zvcm1hdDEodXZkLCBsaWdodF8yNywgMCk7Ci0JaWJtY2FtX1BhY2tldF9Gb3JtYXQxKHV2ZCwgMHgyYiwgMHgxZik7Ci0JaWJtY2FtX1BhY2tldF9Gb3JtYXQxKHV2ZCwgMHgzOSwgMHgwOCk7Ci0KLQlmb3IgKGk9MDsgaSA8IG50cmllczsgaSsrKQotCQlpYm1jYW1fUGFja2V0X0Zvcm1hdDEodXZkLCAweDJjLCAweDAwKTsKLQotCWZvciAoaT0wOyBpIDwgbnRyaWVzOyBpKyspCi0JCWlibWNhbV9QYWNrZXRfRm9ybWF0MSh1dmQsIDB4MzAsIDB4MTQpOwotCi0JaWJtY2FtX1BhY2tldEZvcm1hdDIodXZkLCAweDM5LCAweDAyKTsKLQlpYm1jYW1fUGFja2V0Rm9ybWF0Mih1dmQsIDB4MDEsIDB4ZTEpOwotCWlibWNhbV9QYWNrZXRGb3JtYXQyKHV2ZCwgMHgwMiwgMHhjZCk7Ci0JaWJtY2FtX1BhY2tldEZvcm1hdDIodXZkLCAweDAzLCAweGNkKTsKLQlpYm1jYW1fUGFja2V0Rm9ybWF0Mih1dmQsIDB4MDQsIDB4ZmEpOwotCWlibWNhbV9QYWNrZXRGb3JtYXQyKHV2ZCwgMHgzZiwgMHhmZik7Ci0JaWJtY2FtX1BhY2tldEZvcm1hdDIodXZkLCAweDM5LCAweDAwKTsKLQotCWlibWNhbV9QYWNrZXRGb3JtYXQyKHV2ZCwgMHgzOSwgMHgwMik7Ci0JaWJtY2FtX1BhY2tldEZvcm1hdDIodXZkLCAweDBhLCAweDM3KTsKLQlpYm1jYW1fUGFja2V0Rm9ybWF0Mih1dmQsIDB4MGIsIDB4YjgpOwotCWlibWNhbV9QYWNrZXRGb3JtYXQyKHV2ZCwgMHgwYywgMHhmMyk7Ci0JaWJtY2FtX1BhY2tldEZvcm1hdDIodXZkLCAweDBkLCAweGUzKTsKLQlpYm1jYW1fUGFja2V0Rm9ybWF0Mih1dmQsIDB4MGUsIDB4MGQpOwotCWlibWNhbV9QYWNrZXRGb3JtYXQyKHV2ZCwgMHgwZiwgMHhmMik7Ci0JaWJtY2FtX1BhY2tldEZvcm1hdDIodXZkLCAweDEwLCAweGQ1KTsKLQlpYm1jYW1fUGFja2V0Rm9ybWF0Mih1dmQsIDB4MTEsIDB4YmEpOwotCWlibWNhbV9QYWNrZXRGb3JtYXQyKHV2ZCwgMHgxMiwgMHg1Myk7Ci0JaWJtY2FtX1BhY2tldEZvcm1hdDIodXZkLCAweDNmLCAweGZmKTsKLQlpYm1jYW1fUGFja2V0Rm9ybWF0Mih1dmQsIDB4MzksIDB4MDApOwotCi0JaWJtY2FtX1BhY2tldEZvcm1hdDIodXZkLCAweDM5LCAweDAyKTsKLQlpYm1jYW1fUGFja2V0Rm9ybWF0Mih1dmQsIDB4MTYsIDB4MDApOwotCWlibWNhbV9QYWNrZXRGb3JtYXQyKHV2ZCwgMHgxNywgMHgyOCk7Ci0JaWJtY2FtX1BhY2tldEZvcm1hdDIodXZkLCAweDE4LCAweDdkKTsKLQlpYm1jYW1fUGFja2V0Rm9ybWF0Mih1dmQsIDB4MTksIDB4YmUpOwotCWlibWNhbV9QYWNrZXRGb3JtYXQyKHV2ZCwgMHgzZiwgMHhmZik7Ci0JaWJtY2FtX1BhY2tldEZvcm1hdDIodXZkLCAweDM5LCAweDAwKTsKLQotCWZvciAoaT0wOyBpIDwgbnRyaWVzOyBpKyspCi0JCWlibWNhbV9QYWNrZXRfRm9ybWF0MSh1dmQsIDB4MDAsIDB4MTgpOwotCWZvciAoaT0wOyBpIDwgbnRyaWVzOyBpKyspCi0JCWlibWNhbV9QYWNrZXRfRm9ybWF0MSh1dmQsIDB4MTMsIDB4MTgpOwotCWZvciAoaT0wOyBpIDwgbnRyaWVzOyBpKyspCi0JCWlibWNhbV9QYWNrZXRfRm9ybWF0MSh1dmQsIDB4MTQsIDB4MDYpOwotCi0JLyogVGhpcyBpcyBkZWZhdWx0IGJyaWdodG5lc3MgKi8KLQlmb3IgKGk9MDsgaSA8IG50cmllczsgaSsrKQotCQlpYm1jYW1fUGFja2V0X0Zvcm1hdDEodXZkLCAweDMxLCAweDM3KTsKLQlmb3IgKGk9MDsgaSA8IG50cmllczsgaSsrKQotCQlpYm1jYW1fUGFja2V0X0Zvcm1hdDEodXZkLCAweDMyLCAweDQ2KTsKLQlmb3IgKGk9MDsgaSA8IG50cmllczsgaSsrKQotCQlpYm1jYW1fUGFja2V0X0Zvcm1hdDEodXZkLCAweDMzLCAweDU1KTsKLQotCWlibWNhbV9QYWNrZXRfRm9ybWF0MSh1dmQsIDB4MmUsIDB4MDQpOwotCWZvciAoaT0wOyBpIDwgbnRyaWVzOyBpKyspCi0JCWlibWNhbV9QYWNrZXRfRm9ybWF0MSh1dmQsIDB4MmQsIDB4MDQpOwotCWZvciAoaT0wOyBpIDwgbnRyaWVzOyBpKyspCi0JCWlibWNhbV9QYWNrZXRfRm9ybWF0MSh1dmQsIDB4MjksIDB4ODApOwotCWlibWNhbV9QYWNrZXRfRm9ybWF0MSh1dmQsIDB4MmMsIDB4MDEpOwotCWlibWNhbV9QYWNrZXRfRm9ybWF0MSh1dmQsIDB4MzAsIDB4MTcpOwotCWlibWNhbV9QYWNrZXRfRm9ybWF0MSh1dmQsIDB4MzksIDB4MDgpOwotCWZvciAoaT0wOyBpIDwgbnRyaWVzOyBpKyspCi0JCWlibWNhbV9QYWNrZXRfRm9ybWF0MSh1dmQsIDB4MzQsIDB4MDApOwotCi0JaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwLCAweDAxMDEpOwotCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMCwgMHgwMTBhKTsKLQotCXN3aXRjaCAodXZkLT52aWRlb3NpemUpIHsKLQljYXNlIFZJREVPU0laRV8xMjh4OTY6Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg4MCwgMHgwMTAzKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDYwLCAweDAxMDUpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MGMsIDB4MDEwYik7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwNCwgMHgwMTFiKTsJLyogU2FtZSBldmVyeXdoZXJlICovCi0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwYiwgMHgwMTFkKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwLCAweDAxMWUpOwkvKiBTYW1lIGV2ZXJ5d2hlcmUgKi8KLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwLCAweDAxMjkpOwotCQlicmVhazsKLQljYXNlIFZJREVPU0laRV8xNzZ4MTQ0OgotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4YjAsIDB4MDEwMyk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg4ZiwgMHgwMTA1KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDA2LCAweDAxMGIpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDQsIDB4MDExYik7CS8qIFNhbWUgZXZlcnl3aGVyZSAqLwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MGQsIDB4MDExZCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMCwgMHgwMTFlKTsJLyogU2FtZSBldmVyeXdoZXJlICovCi0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMywgMHgwMTI5KTsKLQkJYnJlYWs7Ci0JY2FzZSBWSURFT1NJWkVfMzUyeDI4ODoKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGIwLCAweDAxMDMpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4OTAsIDB4MDEwNSk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMiwgMHgwMTBiKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDA0LCAweDAxMWIpOwkvKiBTYW1lIGV2ZXJ5d2hlcmUgKi8KLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDA1LCAweDAxMWQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAsIDB4MDExZSk7CS8qIFNhbWUgZXZlcnl3aGVyZSAqLwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAsIDB4MDEyOSk7Ci0JCWJyZWFrOwotCX0KLQotCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhmZiwgMHgwMTJiKTsKLQotCS8qIFRoaXMgaXMgYW5vdGhlciBicmlnaHRuZXNzIC0gZG9uJ3Qga25vdyB3aHkgKi8KLQlmb3IgKGk9MDsgaSA8IG50cmllczsgaSsrKQotCQlpYm1jYW1fUGFja2V0X0Zvcm1hdDEodXZkLCAweDMxLCAweGMzKTsKLQlmb3IgKGk9MDsgaSA8IG50cmllczsgaSsrKQotCQlpYm1jYW1fUGFja2V0X0Zvcm1hdDEodXZkLCAweDMyLCAweGQyKTsKLQlmb3IgKGk9MDsgaSA8IG50cmllczsgaSsrKQotCQlpYm1jYW1fUGFja2V0X0Zvcm1hdDEodXZkLCAweDMzLCAweGUxKTsKLQotCS8qIERlZmF1bHQgY29udHJhc3QgKi8KLQlmb3IgKGk9MDsgaSA8IG50cmllczsgaSsrKQotCQlpYm1jYW1fUGFja2V0X0Zvcm1hdDEodXZkLCBjb250cmFzdF8xNCwgMHgwYSk7Ci0KLQkvKiBEZWZhdWx0IHNoYXJwbmVzcyAqLwotCWZvciAoaT0wOyBpIDwgMjsgaSsrKQotCQlpYm1jYW1fUGFja2V0Rm9ybWF0Mih1dmQsIHNoYXJwXzEzLCAweDFhKTsJLyogTGV2ZWwgNCBGSVhNRSAqLwotCi0JLyogRGVmYXVsdCBsaWdodGluZyBjb25kaXRpb25zICovCi0JaWJtY2FtX1BhY2tldF9Gb3JtYXQxKHV2ZCwgbGlnaHRfMjcsIGxpZ2h0aW5nKTsgLyogMD1CcmlnaHQgMj1Mb3cgKi8KLQotCS8qIEFzc29ydGVkIGluaXQgKi8KLQotCXN3aXRjaCAodXZkLT52aWRlb3NpemUpIHsKLQljYXNlIFZJREVPU0laRV8xMjh4OTY6Ci0JCWlibWNhbV9QYWNrZXRfRm9ybWF0MSh1dmQsIDB4MmIsIDB4MWUpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4YzksIDB4MDExOSk7CS8qIFNhbWUgZXZlcnl3aGVyZSAqLwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ODAsIDB4MDEwOSk7CS8qIFNhbWUgZXZlcnl3aGVyZSAqLwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MzYsIDB4MDEwMik7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgxYSwgMHgwMTA0KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDA0LCAweDAxMWEpOwkvKiBTYW1lIGV2ZXJ5d2hlcmUgKi8KLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDJiLCAweDAxMWMpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MjMsIDB4MDEyYSk7CS8qIFNhbWUgZXZlcnl3aGVyZSAqLwotI2lmIDAKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwLCAweDAxMDYpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MzgsIDB4MDEwNyk7Ci0jZWxzZQotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDIsIDB4MDEwNik7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgyYSwgMHgwMTA3KTsKLSNlbmRpZgotCQlicmVhazsKLQljYXNlIFZJREVPU0laRV8xNzZ4MTQ0OgotCQlpYm1jYW1fUGFja2V0X0Zvcm1hdDEodXZkLCAweDJiLCAweDFlKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGM5LCAweDAxMTkpOwkvKiBTYW1lIGV2ZXJ5d2hlcmUgKi8KLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDgwLCAweDAxMDkpOwkvKiBTYW1lIGV2ZXJ5d2hlcmUgKi8KLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDA0LCAweDAxMDIpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDIsIDB4MDEwNCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwNCwgMHgwMTFhKTsJLyogU2FtZSBldmVyeXdoZXJlICovCi0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgyYiwgMHgwMTFjKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDIzLCAweDAxMmEpOwkvKiBTYW1lIGV2ZXJ5d2hlcmUgKi8KLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAxLCAweDAxMDYpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4Y2EsIDB4MDEwNyk7Ci0JCWJyZWFrOwotCWNhc2UgVklERU9TSVpFXzM1MngyODg6Ci0JCWlibWNhbV9QYWNrZXRfRm9ybWF0MSh1dmQsIDB4MmIsIDB4MWYpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4YzksIDB4MDExOSk7CS8qIFNhbWUgZXZlcnl3aGVyZSAqLwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ODAsIDB4MDEwOSk7CS8qIFNhbWUgZXZlcnl3aGVyZSAqLwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDgsIDB4MDEwMik7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMSwgMHgwMTA0KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDA0LCAweDAxMWEpOwkvKiBTYW1lIGV2ZXJ5d2hlcmUgKi8KLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDJmLCAweDAxMWMpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MjMsIDB4MDEyYSk7CS8qIFNhbWUgZXZlcnl3aGVyZSAqLwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDMsIDB4MDEwNik7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhmNiwgMHgwMTA3KTsKLQkJYnJlYWs7Ci0JfQotCXJldHVybiAoQ0FNRVJBX0lTX09QRVJBVElPTkFMKHV2ZCkgPyAwIDogLUVGQVVMVCk7Ci19Ci0KLXN0YXRpYyBpbnQgaWJtY2FtX21vZGVsMl9zZXR1cChzdHJ1Y3QgdXZkICp1dmQpCi17Ci0JaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEwMCk7CS8qIExFRCBvbiAqLwotCWlibWNhbV92ZWlvKHV2ZCwgMSwgMHgwMDAwLCAweDAxMTYpOwotCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDYwLCAweDAxMTYpOwotCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAyLCAweDAxMTIpOwotCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGJjLCAweDAxMmMpOwotCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDA4LCAweDAxMmIpOwotCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMDgpOwotCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAxLCAweDAxMzMpOwotCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAxLCAweDAxMDIpOwotCXN3aXRjaCAodXZkLT52aWRlb3NpemUpIHsKLQljYXNlIFZJREVPU0laRV8xNzZ4MTQ0OgotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAyYywgMHgwMTAzKTsJLyogQWxsIGV4Y2VwdCAzMjB4MjQwICovCi0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMDQpOwkvKiBTYW1lICovCi0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDI0LCAweDAxMDUpOwkvKiAxNzZ4MTQ0LCAzNTJ4Mjg4ICovCi0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGI5LCAweDAxMGEpOwkvKiBVbmlxdWUgdG8gdGhpcyBtb2RlICovCi0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDM4LCAweDAxMTkpOwkvKiBVbmlxdWUgdG8gdGhpcyBtb2RlICovCi0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAzLCAweDAxMDYpOwkvKiBTYW1lICovCi0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDkwLCAweDAxMDcpOwkvKiBVbmlxdWUgdG8gZXZlcnkgbW9kZSovCi0JCWJyZWFrOwotCWNhc2UgVklERU9TSVpFXzMyMHgyNDA6Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDI4LCAweDAxMDMpOwkvKiBVbmlxdWUgdG8gdGhpcyBtb2RlICovCi0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMDQpOwkvKiBTYW1lICovCi0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDFlLCAweDAxMDUpOwkvKiAzMjB4MjQwLCAzNTJ4MjQwICovCi0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDM5LCAweDAxMGEpOwkvKiBBbGwgZXhjZXB0IDE3NngxNDQgKi8KLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwNzAsIDB4MDExOSk7CS8qIEFsbCBleGNlcHQgMTc2eDE0NCAqLwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMywgMHgwMTA2KTsJLyogU2FtZSAqLwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA5OCwgMHgwMTA3KTsJLyogVW5pcXVlIHRvIGV2ZXJ5IG1vZGUqLwotCQlicmVhazsKLQljYXNlIFZJREVPU0laRV8zNTJ4MjQwOgotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAyYywgMHgwMTAzKTsJLyogQWxsIGV4Y2VwdCAzMjB4MjQwICovCi0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMDQpOwkvKiBTYW1lICovCi0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDFlLCAweDAxMDUpOwkvKiAzMjB4MjQwLCAzNTJ4MjQwICovCi0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDM5LCAweDAxMGEpOwkvKiBBbGwgZXhjZXB0IDE3NngxNDQgKi8KLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwNzAsIDB4MDExOSk7CS8qIEFsbCBleGNlcHQgMTc2eDE0NCAqLwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMywgMHgwMTA2KTsJLyogU2FtZSAqLwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBkYSwgMHgwMTA3KTsJLyogVW5pcXVlIHRvIGV2ZXJ5IG1vZGUqLwotCQlicmVhazsKLQljYXNlIFZJREVPU0laRV8zNTJ4Mjg4OgotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAyYywgMHgwMTAzKTsJLyogQWxsIGV4Y2VwdCAzMjB4MjQwICovCi0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMDQpOwkvKiBTYW1lICovCi0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDI0LCAweDAxMDUpOwkvKiAxNzZ4MTQ0LCAzNTJ4Mjg4ICovCi0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDM5LCAweDAxMGEpOwkvKiBBbGwgZXhjZXB0IDE3NngxNDQgKi8KLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwNzAsIDB4MDExOSk7CS8qIEFsbCBleGNlcHQgMTc2eDE0NCAqLwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMywgMHgwMTA2KTsJLyogU2FtZSAqLwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBmZSwgMHgwMTA3KTsJLyogVW5pcXVlIHRvIGV2ZXJ5IG1vZGUqLwotCQlicmVhazsKLQl9Ci0JcmV0dXJuIChDQU1FUkFfSVNfT1BFUkFUSU9OQUwodXZkKSA/IDAgOiAtRUZBVUxUKTsKLX0KLQotLyoKLSAqIGlibWNhbV9tb2RlbDFfc2V0dXBfYWZ0ZXJfdmlkZW9faWYoKQotICoKLSAqIFRoaXMgY29kZSBhZGRzIGZpbmlzaGluZyB0b3VjaGVzIHRvIHRoZSB2aWRlbyBkYXRhIGludGVyZmFjZS4KLSAqIEhlcmUgd2UgY29uZmlndXJlIHRoZSBmcmFtZSByYXRlIGFuZCB0dXJuIG9uIHRoZSBMRUQuCi0gKi8KLXN0YXRpYyB2b2lkIGlibWNhbV9tb2RlbDFfc2V0dXBfYWZ0ZXJfdmlkZW9faWYoc3RydWN0IHV2ZCAqdXZkKQotewotCXVuc2lnbmVkIHNob3J0IGludGVybmFsX2ZyYW1lX3JhdGU7Ci0KLQlSRVNUUklDVF9UT19SQU5HRShmcmFtZXJhdGUsIEZSQU1FUkFURV9NSU4sIEZSQU1FUkFURV9NQVgpOwotCWludGVybmFsX2ZyYW1lX3JhdGUgPSBGUkFNRVJBVEVfTUFYIC0gZnJhbWVyYXRlOyAvKiAwPUZhc3QgNj1TbG93ICovCi0JaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAxLCAweDAxMDApOwkvKiBMRUQgT24gICovCi0JaWJtY2FtX3ZlaW8odXZkLCAwLCBpbnRlcm5hbF9mcmFtZV9yYXRlLCAweDAxMTEpOwotCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMSwgMHgwMTE0KTsKLQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4YzAsIDB4MDEwYyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGlibWNhbV9tb2RlbDJfc2V0dXBfYWZ0ZXJfdmlkZW9faWYoc3RydWN0IHV2ZCAqdXZkKQotewotCXVuc2lnbmVkIHNob3J0IHNldHVwX21vZGVsMl9yZzIsIHNldHVwX21vZGVsMl9zYXQsIHNldHVwX21vZGVsMl95YjsKLQotCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMDApOwkvKiBMRUQgb24gKi8KLQotCXN3aXRjaCAodXZkLT52aWRlb3NpemUpIHsKLQljYXNlIFZJREVPU0laRV8xNzZ4MTQ0OgotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA1MCwgMHgwMTExKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwZDAsIDB4MDExMSk7Ci0JCWJyZWFrOwotCWNhc2UgVklERU9TSVpFXzMyMHgyNDA6Ci0JY2FzZSBWSURFT1NJWkVfMzUyeDI0MDoKLQljYXNlIFZJREVPU0laRV8zNTJ4Mjg4OgotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA0MCwgMHgwMTExKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYzAsIDB4MDExMSk7Ci0JCWJyZWFrOwotCX0KLQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA5YiwgMHgwMTBmKTsKLQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBiYiwgMHgwMTBmKTsKLQotCS8qCi0JICogSGFyZHdhcmUgc2V0dGluZ3MsIG1heSBhZmZlY3QgQ01PUyBzZW5zb3I7IG5vdCB1c2VyIGNvbnRyb2xzIQotCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQkgKiAweDAwMDQ6IG5vIGVmZmVjdAotCSAqIDB4MDAwNjogaGFyZHdhcmUgZWZmZWN0Ci0JICogMHgwMDA4OiBubyBlZmZlY3QKLQkgKiAweDAwMGE6IHN0b3BzIHZpZGVvIHN0cmVhbSwgcHJvYmFibHkgaW1wb3J0YW50IGgvdyBzZXR0aW5nCi0JICogMHgwMDBjOiBjaGFuZ2VzIGNvbG9yIGluIGhhcmR3YXJlIG1hbm5lciAobm90IHVzZXIgc2V0dGluZykKLQkgKiAweDAwMTI6IGNoYW5nZXMgbnVtYmVyIG9mIGNvbG9ycyAoZG9lcyBub3QgYWZmZWN0IHNwZWVkKQotCSAqIDB4MDAyYTogbm8gZWZmZWN0Ci0JICogMHgwMDJjOiBoYXJkd2FyZSBzZXR0aW5nIChyZWxhdGVkIHRvIHNjYW4gbGluZXMpCi0JICogMHgwMDJlOiBzdG9wcyB2aWRlbyBzdHJlYW0sIHByb2JhYmx5IGltcG9ydGFudCBoL3cgc2V0dGluZwotCSAqLwotCWlibWNhbV9tb2RlbDJfUGFja2V0MSh1dmQsIDB4MDAwYSwgMHgwMDVjKTsKLQlpYm1jYW1fbW9kZWwyX1BhY2tldDEodXZkLCAweDAwMDQsIDB4MDAwMCk7Ci0JaWJtY2FtX21vZGVsMl9QYWNrZXQxKHV2ZCwgMHgwMDA2LCAweDAwZmIpOwotCWlibWNhbV9tb2RlbDJfUGFja2V0MSh1dmQsIDB4MDAwOCwgMHgwMDAwKTsKLQlpYm1jYW1fbW9kZWwyX1BhY2tldDEodXZkLCAweDAwMGMsIDB4MDAwOSk7Ci0JaWJtY2FtX21vZGVsMl9QYWNrZXQxKHV2ZCwgMHgwMDEyLCAweDAwMGEpOwotCWlibWNhbV9tb2RlbDJfUGFja2V0MSh1dmQsIDB4MDAyYSwgMHgwMDAwKTsKLQlpYm1jYW1fbW9kZWwyX1BhY2tldDEodXZkLCAweDAwMmMsIDB4MDAwMCk7Ci0JaWJtY2FtX21vZGVsMl9QYWNrZXQxKHV2ZCwgMHgwMDJlLCAweDAwMDgpOwotCi0JLyoKLQkgKiBGdW5jdGlvbiAweDAwMzAgcG9wcyB1cCBhbGwgb3ZlciB0aGUgcGxhY2UuIEFwcGFyZW50bHkKLQkgKiBpdCBpcyBhIGhhcmR3YXJlIGNvbnRyb2wgcmVnaXN0ZXIsIHdpdGggZXZlcnkgYml0IGFzc2lnbmVkIHRvCi0JICogZG8gc29tZXRoaW5nLgotCSAqLwotCWlibWNhbV9tb2RlbDJfUGFja2V0MSh1dmQsIDB4MDAzMCwgMHgwMDAwKTsKLQotCS8qCi0JICogTWFnaWMgY29udHJvbCBvZiBDTU9TIHNlbnNvci4gT25seSBsb3dlciB2YWx1ZXMgbGlrZQotCSAqIDAtMyB3b3JrLCBhbmQgcGljdHVyZSBzaGlmdHMgbGVmdCBvciByaWdodC4gRG9uJ3QgY2hhbmdlLgotCSAqLwotCXN3aXRjaCAodXZkLT52aWRlb3NpemUpIHsKLQljYXNlIFZJREVPU0laRV8xNzZ4MTQ0OgotCQlpYm1jYW1fbW9kZWwyX1BhY2tldDEodXZkLCAweDAwMTQsIDB4MDAwMik7Ci0JCWlibWNhbV9tb2RlbDJfUGFja2V0MSh1dmQsIDB4MDAxNiwgMHgwMDAyKTsgLyogSG9yaXpvbnRhbCBzaGlmdCAqLwotCQlpYm1jYW1fbW9kZWwyX1BhY2tldDEodXZkLCAweDAwMTgsIDB4MDA0YSk7IC8qIEFub3RoZXIgaGFyZHdhcmUgc2V0dGluZyAqLwotCQlicmVhazsKLQljYXNlIFZJREVPU0laRV8zMjB4MjQwOgotCQlpYm1jYW1fbW9kZWwyX1BhY2tldDEodXZkLCAweDAwMTQsIDB4MDAwOSk7Ci0JCWlibWNhbV9tb2RlbDJfUGFja2V0MSh1dmQsIDB4MDAxNiwgMHgwMDA1KTsgLyogSG9yaXpvbnRhbCBzaGlmdCAqLwotCQlpYm1jYW1fbW9kZWwyX1BhY2tldDEodXZkLCAweDAwMTgsIDB4MDA0NCk7IC8qIEFub3RoZXIgaGFyZHdhcmUgc2V0dGluZyAqLwotCQlicmVhazsKLQljYXNlIFZJREVPU0laRV8zNTJ4MjQwOgotCQkvKiBUaGlzIG1vZGUgZG9lc24ndCB3b3JrIGFzIFdpbmRvd3MgcHJvZ3JhbXMgaXQ7IGNoYW5nZWQgdG8gd29yayAqLwotCQlpYm1jYW1fbW9kZWwyX1BhY2tldDEodXZkLCAweDAwMTQsIDB4MDAwOSk7IC8qIFdpbmRvd3Mgc2V0cyB0aGlzIHRvIDggKi8KLQkJaWJtY2FtX21vZGVsMl9QYWNrZXQxKHV2ZCwgMHgwMDE2LCAweDAwMDMpOyAvKiBIb3Jpem9udGFsIHNoaWZ0ICovCi0JCWlibWNhbV9tb2RlbDJfUGFja2V0MSh1dmQsIDB4MDAxOCwgMHgwMDQ0KTsgLyogV2luZG93cyBzZXRzIHRoaXMgdG8gMHgwMDQ1ICovCi0JCWJyZWFrOwotCWNhc2UgVklERU9TSVpFXzM1MngyODg6Ci0JCWlibWNhbV9tb2RlbDJfUGFja2V0MSh1dmQsIDB4MDAxNCwgMHgwMDAzKTsKLQkJaWJtY2FtX21vZGVsMl9QYWNrZXQxKHV2ZCwgMHgwMDE2LCAweDAwMDIpOyAvKiBIb3Jpem9udGFsIHNoaWZ0ICovCi0JCWlibWNhbV9tb2RlbDJfUGFja2V0MSh1dmQsIDB4MDAxOCwgMHgwMDRhKTsgLyogQW5vdGhlciBoYXJkd2FyZSBzZXR0aW5nICovCi0JCWJyZWFrOwotCX0KLQotCWlibWNhbV9tb2RlbDJfUGFja2V0MSh1dmQsIG1vZDJfYnJpZ2h0bmVzcywgMHgwMDVhKTsKLQotCS8qCi0JICogV2UgaGF2ZSBvdXIgb3duIGZyYW1lIHJhdGUgc2V0dGluZyB2YXJ5aW5nIGZyb20gMCAoc2xvd2VzdCkgdG8gNiAoZmFzdGVzdCkuCi0JICogVGhlIGNhbWVyYSBtb2RlbCAyIGFsbG93cyBmcmFtZSByYXRlIGluIHJhbmdlIFswLi4weDFGXSB3aGVyZSAwIGlzIGFsc28gdGhlCi0JICogc2xvd2VzdCBzZXR0aW5nLiBIb3dldmVyIGZvciBhbGwgcHJhY3RpY2FsIHJlYXNvbnMgaGlnaCBzZXR0aW5ncyBtYWtlIG5vCi0JICogc2Vuc2UgYmVjYXVzZSBVU0IgaXMgbm90IGZhc3QgZW5vdWdoIHRvIHN1cHBvcnQgaGlnaCBGUFMuIEJlIGF3YXJlIHRoYXQKLQkgKiB0aGUgcGljdHVyZSBkYXRhc3RyZWFtIHdpbGwgYmUgc2V2ZXJlbHkgZGlzcnVwdGVkIGlmIHlvdSBhc2sgZm9yCi0JICogZnJhbWUgcmF0ZSBmYXN0ZXIgdGhhbiBhbGxvd2VkIGZvciB0aGUgdmlkZW8gc2l6ZSAtIHNlZSBiZWxvdzoKLQkgKgotCSAqIEFsbG93YWJsZSByYW5nZXMgKG9idGFpbmVkIGV4cGVyaW1lbnRhbGx5IG9uIE9IQ0ksIEs2LTMsIDQ1MCBNSHopOgotCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JICogMTc2eDE0NDogWzYuLjMxXQotCSAqIDMyMHgyNDA6IFs4Li4zMV0KLQkgKiAzNTJ4MjQwOiBbMTAuLjMxXQotCSAqIDM1MngyODg6IFsxNi4uMzFdIEkgaGF2ZSB0byByYWlzZSBsb3dlciB0aHJlc2hvbGQgZm9yIHN0YWJpbGl0eS4uLgotCSAqCi0JICogQXMgdXN1YWwsIHNsb3dlciBGUFMgcHJvdmlkZXMgYmV0dGVyIHNlbnNpdGl2aXR5LgotCSAqLwotCXsKLQkJc2hvcnQgaHdfZnBzPTMxLCBpX2ZyYW1lcmF0ZTsKLQotCQlSRVNUUklDVF9UT19SQU5HRShmcmFtZXJhdGUsIEZSQU1FUkFURV9NSU4sIEZSQU1FUkFURV9NQVgpOwotCQlpX2ZyYW1lcmF0ZSA9IEZSQU1FUkFURV9NQVggLSBmcmFtZXJhdGUgKyBGUkFNRVJBVEVfTUlOOwotCQlzd2l0Y2ggKHV2ZC0+dmlkZW9zaXplKSB7Ci0JCWNhc2UgVklERU9TSVpFXzE3NngxNDQ6Ci0JCQlod19mcHMgPSA2ICsgaV9mcmFtZXJhdGUqNDsKLQkJCWJyZWFrOwotCQljYXNlIFZJREVPU0laRV8zMjB4MjQwOgotCQkJaHdfZnBzID0gOCArIGlfZnJhbWVyYXRlKjM7Ci0JCQlicmVhazsKLQkJY2FzZSBWSURFT1NJWkVfMzUyeDI0MDoKLQkJCWh3X2ZwcyA9IDEwICsgaV9mcmFtZXJhdGUqMjsKLQkJCWJyZWFrOwotCQljYXNlIFZJREVPU0laRV8zNTJ4Mjg4OgotCQkJaHdfZnBzID0gMjggKyBpX2ZyYW1lcmF0ZS8yOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKHV2ZC0+ZGVidWcgPiAwKQotCQkJZGV2X2luZm8oJnV2ZC0+ZGV2LT5kZXYsICJGcmFtZXJhdGUgKGhhcmR3YXJlKTogJWhkLlxuIiwKLQkJCQkgaHdfZnBzKTsKLQkJUkVTVFJJQ1RfVE9fUkFOR0UoaHdfZnBzLCAwLCAzMSk7Ci0JCWlibWNhbV9tb2RlbDJfUGFja2V0MSh1dmQsIG1vZDJfc2V0X2ZyYW1lcmF0ZSwgaHdfZnBzKTsKLQl9Ci0KLQkvKgotCSAqIFRoaXMgc2V0dGluZyBkb2VzIG5vdCB2aXNpYmx5IGFmZmVjdCBwaWN0dXJlczsgbGVmdCBpdCBoZXJlCi0JICogYmVjYXVzZSBpdCB3YXMgcHJlc2VudCBpbiBXaW5kb3dzIFVTQiBkYXRhIHN0cmVhbS4gVGhpcyBmdW5jdGlvbgotCSAqIGRvZXMgbm90IGFsbG93IGFyYml0cmFyeSB2YWx1ZXMgYW5kIGFwcGFyZW50bHkgaXMgYSBiaXQgbWFzaywgdG8KLQkgKiBiZSBhY3RpdmF0ZWQgb25seSBhdCBhcHByb3ByaWF0ZSB0aW1lLiBEb24ndCBjaGFuZ2UgaXQgcmFuZG9tbHkhCi0JICovCi0Jc3dpdGNoICh1dmQtPnZpZGVvc2l6ZSkgewotCWNhc2UgVklERU9TSVpFXzE3NngxNDQ6Ci0JCWlibWNhbV9tb2RlbDJfUGFja2V0MSh1dmQsIDB4MDAyNiwgMHgwMGMyKTsKLQkJYnJlYWs7Ci0JY2FzZSBWSURFT1NJWkVfMzIweDI0MDoKLQkJaWJtY2FtX21vZGVsMl9QYWNrZXQxKHV2ZCwgMHgwMDI2LCAweDAwNDQpOwotCQlicmVhazsKLQljYXNlIFZJREVPU0laRV8zNTJ4MjQwOgotCQlpYm1jYW1fbW9kZWwyX1BhY2tldDEodXZkLCAweDAwMjYsIDB4MDA0Nik7Ci0JCWJyZWFrOwotCWNhc2UgVklERU9TSVpFXzM1MngyODg6Ci0JCWlibWNhbV9tb2RlbDJfUGFja2V0MSh1dmQsIDB4MDAyNiwgMHgwMDQ4KTsKLQkJYnJlYWs7Ci0JfQotCi0JaWJtY2FtX21vZGVsMl9QYWNrZXQxKHV2ZCwgbW9kMl9zZW5zaXRpdml0eSwgbGlnaHRpbmcpOwotCi0JaWYgKGluaXRfbW9kZWwyX3JnMiA+PSAwKSB7Ci0JCVJFU1RSSUNUX1RPX1JBTkdFKGluaXRfbW9kZWwyX3JnMiwgMCwgMjU1KTsKLQkJc2V0dXBfbW9kZWwyX3JnMiA9IGluaXRfbW9kZWwyX3JnMjsKLQl9IGVsc2UKLQkJc2V0dXBfbW9kZWwyX3JnMiA9IDB4MDAyZjsKLQotCWlmIChpbml0X21vZGVsMl9zYXQgPj0gMCkgewotCQlSRVNUUklDVF9UT19SQU5HRShpbml0X21vZGVsMl9zYXQsIDAsIDI1NSk7Ci0JCXNldHVwX21vZGVsMl9zYXQgPSBpbml0X21vZGVsMl9zYXQ7Ci0JfSBlbHNlCi0JCXNldHVwX21vZGVsMl9zYXQgPSAweDAwMzQ7Ci0KLQlpZiAoaW5pdF9tb2RlbDJfeWIgPj0gMCkgewotCQlSRVNUUklDVF9UT19SQU5HRShpbml0X21vZGVsMl95YiwgMCwgMjU1KTsKLQkJc2V0dXBfbW9kZWwyX3liID0gaW5pdF9tb2RlbDJfeWI7Ci0JfSBlbHNlCi0JCXNldHVwX21vZGVsMl95YiA9IDB4MDBhMDsKLQotCWlibWNhbV9tb2RlbDJfUGFja2V0MSh1dmQsIG1vZDJfY29sb3JfYmFsYW5jZV9yZzIsIHNldHVwX21vZGVsMl9yZzIpOwotCWlibWNhbV9tb2RlbDJfUGFja2V0MSh1dmQsIG1vZDJfc2F0dXJhdGlvbiwgc2V0dXBfbW9kZWwyX3NhdCk7Ci0JaWJtY2FtX21vZGVsMl9QYWNrZXQxKHV2ZCwgbW9kMl9jb2xvcl9iYWxhbmNlX3liLCBzZXR1cF9tb2RlbDJfeWIpOwotCWlibWNhbV9tb2RlbDJfUGFja2V0MSh1dmQsIG1vZDJfaHVlLCB1dmQtPnZwaWMuaHVlID4+IDkpOyAvKiAwIC4uIDdGICovOwotCi0JLyogSGFyZHdhcmUgY29udHJvbCBjb21tYW5kICovCi0JaWJtY2FtX21vZGVsMl9QYWNrZXQxKHV2ZCwgMHgwMDMwLCAweDAwMDQpOwotCi0JaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYzAsIDB4MDEwYyk7CS8qIEdvIGNhbWVyYSwgZ28hICovCi0JdXNiX2NsZWFyX2hhbHQodXZkLT5kZXYsIHVzYl9yY3Zpc29jcGlwZSh1dmQtPmRldiwgdXZkLT52aWRlb19lbmRwKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGlibWNhbV9tb2RlbDRfc2V0dXBfYWZ0ZXJfdmlkZW9faWYoc3RydWN0IHV2ZCAqdXZkKQotewotCXN3aXRjaCAodXZkLT52aWRlb3NpemUpIHsKLQljYXNlIFZJREVPU0laRV8xMjh4OTY6Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMDApOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBjMCwgMHgwMTExKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYmMsIDB4MDEyYyk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDgwLCAweDAxMmIpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTA4KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDEsIDB4MDEzMyk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDliLCAweDAxMGYpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBiYiwgMHgwMTBmKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDM4LCAweDAxMmYpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0MSwgMHgwMTI0KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEyNyk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhmZWE4LCAweDAxMjQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJkKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMGEsIDB4MDEyZik7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQxLCAweDAxMjQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA1YywgMHgwMTI3KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGZlYTgsIDB4MDEyNCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwNCwgMHgwMTJmKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDEsIDB4MDEyNCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMjcpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBmYiwgMHgwMTJlKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEzMCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg4YTI4LCAweDAxMjQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJmKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQwNTUsIDB4MDEyNCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDBjLCAweDAxMjcpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwOSwgMHgwMTJlKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGFhMjgsIDB4MDEyNCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxMiwgMHgwMTJmKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDEsIDB4MDEyNCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDA4LCAweDAxMjcpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTMwKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDgyYTgsIDB4MDEyNCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDJhLCAweDAxMmQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTJmKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDUsIDB4MDEyNCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhmZmZhLCAweDAxMjQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJkKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMzQsIDB4MDEyZik7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQxLCAweDAxMjQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTI3KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGZlYTgsIDB4MDEyNCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDcwLCAweDAxMTkpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBkMiwgMHgwMTA3KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDMsIDB4MDEwNik7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDVlLCAweDAxMDcpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMywgMHgwMTA2KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwZDAsIDB4MDExMSk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDM5LCAweDAxMGEpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMSwgMHgwMTAyKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMjgsIDB4MDEwMyk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMDQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxZSwgMHgwMTA1KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDE2LCAweDAxMmYpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0MSwgMHgwMTI0KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMGEsIDB4MDEyNyk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMzApOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ODJhOCwgMHgwMTI0KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMTQsIDB4MDEyZCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDA4LCAweDAxMmYpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0NSwgMHgwMTI0KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZSk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDFhLCAweDAxMzApOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4OGEwYSwgMHgwMTI0KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwNWEsIDB4MDEyZCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg5NTQ1LCAweDAxMjQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTI3KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMTgsIDB4MDEyZSk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDQzLCAweDAxMzApOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4OGEyOCwgMHgwMTI0KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZik7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMDU1LCAweDAxMjQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxYywgMHgwMTI3KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwZWIsIDB4MDEyZSk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhhYTI4LCAweDAxMjQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJkKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMzIsIDB4MDEyZik7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQxLCAweDAxMjQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTI3KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEzMCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg4MmE4LCAweDAxMjQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAzNiwgMHgwMTJkKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDgsIDB4MDEyZik7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQ1LCAweDAxMjQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZmZmYSwgMHgwMTI0KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDFlLCAweDAxMmYpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0MSwgMHgwMTI0KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMTcsIDB4MDEyNyk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDEzLCAweDAxMmUpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAzMSwgMHgwMTMwKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDhhMjgsIDB4MDEyNCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDE3LCAweDAxMmQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA3OCwgMHgwMTJmKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDUsIDB4MDEyNCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMjcpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZmVhOCwgMHgwMTI0KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDM4LCAweDAxMmYpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0MSwgMHgwMTI0KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDQsIDB4MDEyNyk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhmZWE4LCAweDAxMjQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBjMCwgMHgwMTBjKTsKLQkJYnJlYWs7Ci0JY2FzZSBWSURFT1NJWkVfMTYweDEyMDoKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEwMCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGMwLCAweDAxMTEpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBiYywgMHgwMTJjKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwODAsIDB4MDEyYik7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMDgpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMSwgMHgwMTMzKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwOWIsIDB4MDEwZik7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGJiLCAweDAxMGYpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJkKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMzgsIDB4MDEyZik7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQxLCAweDAxMjQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTI3KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGZlYTgsIDB4MDEyNCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwYSwgMHgwMTJmKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDEsIDB4MDEyNCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDVjLCAweDAxMjcpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZmVhOCwgMHgwMTI0KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDA0LCAweDAxMmYpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0MSwgMHgwMTI0KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEyNyk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGZiLCAweDAxMmUpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTMwKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDhhMjgsIDB4MDEyNCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmYpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDA1NSwgMHgwMTI0KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMGMsIDB4MDEyNyk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDA5LCAweDAxMmUpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4YWEyOCwgMHgwMTI0KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDEyLCAweDAxMmYpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0MSwgMHgwMTI0KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDgsIDB4MDEyNyk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMzApOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ODJhOCwgMHgwMTI0KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMmEsIDB4MDEyZCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMmYpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0NSwgMHgwMTI0KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGZmZmEsIDB4MDEyNCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAzNCwgMHgwMTJmKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDEsIDB4MDEyNCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMjcpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZmVhOCwgMHgwMTI0KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMzgsIDB4MDExOSk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGQ4LCAweDAxMDcpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMiwgMHgwMTA2KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwZDAsIDB4MDExMSk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGI5LCAweDAxMGEpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMSwgMHgwMTAyKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMjgsIDB4MDEwMyk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMDQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxZSwgMHgwMTA1KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDE2LCAweDAxMmYpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0MSwgMHgwMTI0KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMGIsIDB4MDEyNyk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMzApOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ODJhOCwgMHgwMTI0KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMTQsIDB4MDEyZCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDA4LCAweDAxMmYpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0NSwgMHgwMTI0KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZSk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDFhLCAweDAxMzApOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4OGEwYSwgMHgwMTI0KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwNWEsIDB4MDEyZCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg5NTQ1LCAweDAxMjQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTI3KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMTgsIDB4MDEyZSk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDQzLCAweDAxMzApOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4OGEyOCwgMHgwMTI0KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZik7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMDU1LCAweDAxMjQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxYywgMHgwMTI3KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYzcsIDB4MDEyZSk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhhYTI4LCAweDAxMjQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJkKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMzIsIDB4MDEyZik7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQxLCAweDAxMjQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAyNSwgMHgwMTI3KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEzMCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg4MmE4LCAweDAxMjQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAzNiwgMHgwMTJkKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDgsIDB4MDEyZik7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQ1LCAweDAxMjQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZmZmYSwgMHgwMTI0KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDFlLCAweDAxMmYpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0MSwgMHgwMTI0KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwNDgsIDB4MDEyNyk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDM1LCAweDAxMmUpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBkMCwgMHgwMTMwKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDhhMjgsIDB4MDEyNCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDQ4LCAweDAxMmQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA5MCwgMHgwMTJmKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDUsIDB4MDEyNCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAxLCAweDAxMjcpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZmVhOCwgMHgwMTI0KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDM4LCAweDAxMmYpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0MSwgMHgwMTI0KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDQsIDB4MDEyNyk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhmZWE4LCAweDAxMjQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBjMCwgMHgwMTBjKTsKLQkJYnJlYWs7Ci0JY2FzZSBWSURFT1NJWkVfMTc2eDE0NDoKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEwMCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGMwLCAweDAxMTEpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBiYywgMHgwMTJjKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwODAsIDB4MDEyYik7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMDgpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMSwgMHgwMTMzKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwOWIsIDB4MDEwZik7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGJiLCAweDAxMGYpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJkKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMzgsIDB4MDEyZik7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQxLCAweDAxMjQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTI3KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGZlYTgsIDB4MDEyNCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwYSwgMHgwMTJmKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDEsIDB4MDEyNCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDVjLCAweDAxMjcpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZmVhOCwgMHgwMTI0KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDA0LCAweDAxMmYpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0MSwgMHgwMTI0KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEyNyk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGZiLCAweDAxMmUpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTMwKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDhhMjgsIDB4MDEyNCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmYpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDA1NSwgMHgwMTI0KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMGMsIDB4MDEyNyk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDA5LCAweDAxMmUpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4YWEyOCwgMHgwMTI0KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDEyLCAweDAxMmYpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0MSwgMHgwMTI0KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDgsIDB4MDEyNyk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMzApOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ODJhOCwgMHgwMTI0KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMmEsIDB4MDEyZCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMmYpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0NSwgMHgwMTI0KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGZmZmEsIDB4MDEyNCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAzNCwgMHgwMTJmKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDEsIDB4MDEyNCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMjcpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZmVhOCwgMHgwMTI0KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMzgsIDB4MDExOSk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGQ2LCAweDAxMDcpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMywgMHgwMTA2KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMTgsIDB4MDEwNyk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAzLCAweDAxMDYpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBkMCwgMHgwMTExKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYjksIDB4MDEwYSk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAxLCAweDAxMDIpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAyYywgMHgwMTAzKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEwNCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDI0LCAweDAxMDUpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJkKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMTYsIDB4MDEyZik7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQxLCAweDAxMjQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwNywgMHgwMTI3KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEzMCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg4MmE4LCAweDAxMjQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxNCwgMHgwMTJkKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDEsIDB4MDEyZik7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQ1LCAweDAxMjQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJlKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMWEsIDB4MDEzMCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg4YTBhLCAweDAxMjQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA1ZSwgMHgwMTJkKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDk1NDUsIDB4MDEyNCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMjcpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxOCwgMHgwMTJlKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwNDksIDB4MDEzMCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg4YTI4LCAweDAxMjQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJmKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQwNTUsIDB4MDEyNCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDFjLCAweDAxMjcpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBjNywgMHgwMTJlKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGFhMjgsIDB4MDEyNCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAzMiwgMHgwMTJmKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDEsIDB4MDEyNCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDI4LCAweDAxMjcpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTMwKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDgyYTgsIDB4MDEyNCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDM2LCAweDAxMmQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwOCwgMHgwMTJmKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDUsIDB4MDEyNCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhmZmZhLCAweDAxMjQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJkKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMWUsIDB4MDEyZik7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQxLCAweDAxMjQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxMCwgMHgwMTI3KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMTMsIDB4MDEyZSk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDJhLCAweDAxMzApOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4OGEyOCwgMHgwMTI0KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMTAsIDB4MDEyZCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDZkLCAweDAxMmYpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0NSwgMHgwMTI0KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDEsIDB4MDEyNyk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhmZWE4LCAweDAxMjQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJkKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMzgsIDB4MDEyZik7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQxLCAweDAxMjQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwNCwgMHgwMTI3KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGZlYTgsIDB4MDEyNCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGMwLCAweDAxMGMpOwotCQlicmVhazsKLQljYXNlIFZJREVPU0laRV8zMjB4MjQwOgotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTAwKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYzAsIDB4MDExMSk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGJjLCAweDAxMmMpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA4MCwgMHgwMTJiKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEwOCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAxLCAweDAxMzMpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA5YiwgMHgwMTBmKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYmIsIDB4MDEwZik7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAzOCwgMHgwMTJmKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDEsIDB4MDEyNCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMjcpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZmVhOCwgMHgwMTI0KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDBhLCAweDAxMmYpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0MSwgMHgwMTI0KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwNWMsIDB4MDEyNyk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhmZWE4LCAweDAxMjQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJkKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDQsIDB4MDEyZik7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQxLCAweDAxMjQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTI3KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwZmIsIDB4MDEyZSk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMzApOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4OGEyOCwgMHgwMTI0KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZik7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMDU1LCAweDAxMjQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwYywgMHgwMTI3KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDksIDB4MDEyZSk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhhYTI4LCAweDAxMjQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJkKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMTIsIDB4MDEyZik7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQxLCAweDAxMjQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwOCwgMHgwMTI3KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEzMCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg4MmE4LCAweDAxMjQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAyYSwgMHgwMTJkKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEyZik7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQ1LCAweDAxMjQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZmZmYSwgMHgwMTI0KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDM0LCAweDAxMmYpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0MSwgMHgwMTI0KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEyNyk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhmZWE4LCAweDAxMjQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA3MCwgMHgwMTE5KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwZDIsIDB4MDEwNyk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAzLCAweDAxMDYpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA1ZSwgMHgwMTA3KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDMsIDB4MDEwNik7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGQwLCAweDAxMTEpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAzOSwgMHgwMTBhKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDEsIDB4MDEwMik7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDI4LCAweDAxMDMpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTA0KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMWUsIDB4MDEwNSk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxNiwgMHgwMTJmKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDEsIDB4MDEyNCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDBhLCAweDAxMjcpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTMwKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDgyYTgsIDB4MDEyNCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDE0LCAweDAxMmQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwOCwgMHgwMTJmKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDUsIDB4MDEyNCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmUpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxYSwgMHgwMTMwKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDhhMGEsIDB4MDEyNCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDVhLCAweDAxMmQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4OTU0NSwgMHgwMTI0KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyNyk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDE4LCAweDAxMmUpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA0MywgMHgwMTMwKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDhhMjgsIDB4MDEyNCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmYpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDA1NSwgMHgwMTI0KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMWMsIDB4MDEyNyk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGViLCAweDAxMmUpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4YWEyOCwgMHgwMTI0KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDMyLCAweDAxMmYpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0MSwgMHgwMTI0KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEyNyk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMzApOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ODJhOCwgMHgwMTI0KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMzYsIDB4MDEyZCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDA4LCAweDAxMmYpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0NSwgMHgwMTI0KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGZmZmEsIDB4MDEyNCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxZSwgMHgwMTJmKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDEsIDB4MDEyNCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDE3LCAweDAxMjcpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxMywgMHgwMTJlKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMzEsIDB4MDEzMCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg4YTI4LCAweDAxMjQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxNywgMHgwMTJkKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwNzgsIDB4MDEyZik7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQ1LCAweDAxMjQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTI3KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGZlYTgsIDB4MDEyNCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAzOCwgMHgwMTJmKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDEsIDB4MDEyNCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDA0LCAweDAxMjcpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZmVhOCwgMHgwMTI0KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYzAsIDB4MDEwYyk7Ci0JCWJyZWFrOwotCWNhc2UgVklERU9TSVpFXzM1MngyODg6Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMDApOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBjMCwgMHgwMTExKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYmMsIDB4MDEyYyk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDgwLCAweDAxMmIpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTA4KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDEsIDB4MDEzMyk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDliLCAweDAxMGYpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBiYiwgMHgwMTBmKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDM4LCAweDAxMmYpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0MSwgMHgwMTI0KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEyNyk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhmZWE4LCAweDAxMjQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJkKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMGEsIDB4MDEyZik7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQxLCAweDAxMjQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA1YywgMHgwMTI3KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGZlYTgsIDB4MDEyNCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwNCwgMHgwMTJmKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDEsIDB4MDEyNCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMjcpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBmYiwgMHgwMTJlKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEzMCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg4YTI4LCAweDAxMjQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJmKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQwNTUsIDB4MDEyNCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDBjLCAweDAxMjcpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwOSwgMHgwMTJlKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGFhMjgsIDB4MDEyNCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxMiwgMHgwMTJmKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDEsIDB4MDEyNCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDA4LCAweDAxMjcpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTMwKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDgyYTgsIDB4MDEyNCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDJhLCAweDAxMmQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTJmKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDUsIDB4MDEyNCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhmZmZhLCAweDAxMjQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJkKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMzQsIDB4MDEyZik7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQxLCAweDAxMjQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTI3KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGZlYTgsIDB4MDEyNCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDcwLCAweDAxMTkpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBmMiwgMHgwMTA3KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDMsIDB4MDEwNik7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDhjLCAweDAxMDcpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMywgMHgwMTA2KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYzAsIDB4MDExMSk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDM5LCAweDAxMGEpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMSwgMHgwMTAyKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMmMsIDB4MDEwMyk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMDQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAyNCwgMHgwMTA1KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDE2LCAweDAxMmYpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0MSwgMHgwMTI0KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDYsIDB4MDEyNyk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMzApOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ODJhOCwgMHgwMTI0KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMTQsIDB4MDEyZCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAyLCAweDAxMmYpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0NSwgMHgwMTI0KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZSk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDFhLCAweDAxMzApOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4OGEwYSwgMHgwMTI0KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwNWUsIDB4MDEyZCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg5NTQ1LCAweDAxMjQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTI3KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMTgsIDB4MDEyZSk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDQ5LCAweDAxMzApOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4OGEyOCwgMHgwMTI0KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZik7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMDU1LCAweDAxMjQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxYywgMHgwMTI3KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwY2YsIDB4MDEyZSk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhhYTI4LCAweDAxMjQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJkKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMzIsIDB4MDEyZik7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQxLCAweDAxMjQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTI3KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEzMCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg4MmE4LCAweDAxMjQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAzNiwgMHgwMTJkKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDgsIDB4MDEyZik7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQ1LCAweDAxMjQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZmZmYSwgMHgwMTI0KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDFlLCAweDAxMmYpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0MSwgMHgwMTI0KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMTAsIDB4MDEyNyk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDEzLCAweDAxMmUpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAyNSwgMHgwMTMwKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDhhMjgsIDB4MDEyNCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDEwLCAweDAxMmQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA0OCwgMHgwMTJmKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDUsIDB4MDEyNCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMjcpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZmVhOCwgMHgwMTI0KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDM4LCAweDAxMmYpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0MSwgMHgwMTI0KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDQsIDB4MDEyNyk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhmZWE4LCAweDAxMjQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBjMCwgMHgwMTBjKTsKLQkJYnJlYWs7Ci0JfQotCXVzYl9jbGVhcl9oYWx0KHV2ZC0+ZGV2LCB1c2JfcmN2aXNvY3BpcGUodXZkLT5kZXYsIHV2ZC0+dmlkZW9fZW5kcCkpOwotfQotCi1zdGF0aWMgdm9pZCBpYm1jYW1fbW9kZWwzX3NldHVwX2FmdGVyX3ZpZGVvX2lmKHN0cnVjdCB1dmQgKnV2ZCkKLXsKLQlpbnQgaTsKLQkvKgotCSAqIDAxLjAxLjA4IC0gQWRkZWQgZm9yIFJDQSB2aWRlbyBpbiBzdXBwb3J0IC1MTwotCSAqIFRoaXMgc3RydWN0IGlzIHVzZWQgdG8gaW5pdCB0aGUgTW9kZWwzIGNhbSB0byB1c2UgdGhlIFJDQSB2aWRlbyBpbiBwb3J0Ci0JICogaW5zdGVhZCBvZiB0aGUgQ0NEIHNlbnNvci4KLQkgKi8KLQlzdGF0aWMgY29uc3Qgc3RydWN0IHN0cnVjdF9pbml0RGF0YSBpbml0RGF0YVtdID0gewotCQl7MCwgMHgwMDAwLCAweDAxMGN9LAotCQl7MCwgMHgwMDA2LCAweDAxMmN9LAotCQl7MCwgMHgwMDc4LCAweDAxMmR9LAotCQl7MCwgMHgwMDQ2LCAweDAxMmZ9LAotCQl7MCwgMHhkMTQxLCAweDAxMjR9LAotCQl7MCwgMHgwMDAwLCAweDAxMjd9LAotCQl7MCwgMHhmZWE4LCAweDAxMjR9LAotCQl7MSwgMHgwMDAwLCAweDAxMTZ9LAotCQl7MCwgMHgwMDY0LCAweDAxMTZ9LAotCQl7MSwgMHgwMDAwLCAweDAxMTV9LAotCQl7MCwgMHgwMDAzLCAweDAxMTV9LAotCQl7MCwgMHgwMDA4LCAweDAxMjN9LAotCQl7MCwgMHgwMDAwLCAweDAxMTd9LAotCQl7MCwgMHgwMDAwLCAweDAxMTJ9LAotCQl7MCwgMHgwMDgwLCAweDAxMDB9LAotCQl7MCwgMHgwMDAwLCAweDAxMDB9LAotCQl7MSwgMHgwMDAwLCAweDAxMTZ9LAotCQl7MCwgMHgwMDYwLCAweDAxMTZ9LAotCQl7MCwgMHgwMDAyLCAweDAxMTJ9LAotCQl7MCwgMHgwMDAwLCAweDAxMjN9LAotCQl7MCwgMHgwMDAxLCAweDAxMTd9LAotCQl7MCwgMHgwMDQwLCAweDAxMDh9LAotCQl7MCwgMHgwMDE5LCAweDAxMmN9LAotCQl7MCwgMHgwMDQwLCAweDAxMTZ9LAotCQl7MCwgMHgwMDBhLCAweDAxMTV9LAotCQl7MCwgMHgwMDBiLCAweDAxMTV9LAotCQl7MCwgMHgwMDc4LCAweDAxMmR9LAotCQl7MCwgMHgwMDQ2LCAweDAxMmZ9LAotCQl7MCwgMHhkMTQxLCAweDAxMjR9LAotCQl7MCwgMHgwMDAwLCAweDAxMjd9LAotCQl7MCwgMHhmZWE4LCAweDAxMjR9LAotCQl7MCwgMHgwMDY0LCAweDAxMTZ9LAotCQl7MCwgMHgwMDAwLCAweDAxMTV9LAotCQl7MCwgMHgwMDAxLCAweDAxMTV9LAotCQl7MCwgMHhmZmZmLCAweDAxMjR9LAotCQl7MCwgMHhmZmY5LCAweDAxMjR9LAotCQl7MCwgMHgwMDg2LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMGFhLCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDAwLCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHhmZmZhLCAweDAxMjR9LAotCQl7MCwgMHhmZmZmLCAweDAxMjR9LAotCQl7MCwgMHhmZmY5LCAweDAxMjR9LAotCQl7MCwgMHgwMDg2LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMGYyLCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDBmLCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHhmZmZhLCAweDAxMjR9LAotCQl7MCwgMHhmZmZmLCAweDAxMjR9LAotCQl7MCwgMHhmZmY5LCAweDAxMjR9LAotCQl7MCwgMHgwMDg2LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMGY4LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMGZjLCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHhmZmZhLCAweDAxMjR9LAotCQl7MCwgMHhmZmZmLCAweDAxMjR9LAotCQl7MCwgMHhmZmY5LCAweDAxMjR9LAotCQl7MCwgMHgwMDg2LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMGY5LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDNjLCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHhmZmZhLCAweDAxMjR9LAotCQl7MCwgMHhmZmZmLCAweDAxMjR9LAotCQl7MCwgMHhmZmY5LCAweDAxMjR9LAotCQl7MCwgMHgwMDg2LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDI3LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDE5LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHhmZmZhLCAweDAxMjR9LAotCQl7MCwgMHhmZmY5LCAweDAxMjR9LAotCQl7MCwgMHgwMDg2LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDM3LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDAwLCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDIxLCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHhmZmZhLCAweDAxMjR9LAotCQl7MCwgMHhmZmY5LCAweDAxMjR9LAotCQl7MCwgMHgwMDg2LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDM4LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDA2LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDQ1LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHhmZmZhLCAweDAxMjR9LAotCQl7MCwgMHhmZmY5LCAweDAxMjR9LAotCQl7MCwgMHgwMDg2LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDM3LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDAxLCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDJhLCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHhmZmZhLCAweDAxMjR9LAotCQl7MCwgMHhmZmY5LCAweDAxMjR9LAotCQl7MCwgMHgwMDg2LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDM4LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDAwLCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDBlLCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHhmZmZhLCAweDAxMjR9LAotCQl7MCwgMHhmZmY5LCAweDAxMjR9LAotCQl7MCwgMHgwMDg2LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDM3LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDAxLCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDJiLCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHhmZmZhLCAweDAxMjR9LAotCQl7MCwgMHhmZmY5LCAweDAxMjR9LAotCQl7MCwgMHgwMDg2LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDM4LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDAxLCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMGY0LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHhmZmZhLCAweDAxMjR9LAotCQl7MCwgMHhmZmY5LCAweDAxMjR9LAotCQl7MCwgMHgwMDg2LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDM3LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDAxLCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDJjLCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHhmZmZhLCAweDAxMjR9LAotCQl7MCwgMHhmZmY5LCAweDAxMjR9LAotCQl7MCwgMHgwMDg2LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDM4LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDAxLCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDA0LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHhmZmZhLCAweDAxMjR9LAotCQl7MCwgMHhmZmY5LCAweDAxMjR9LAotCQl7MCwgMHgwMDg2LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDM3LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDAxLCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDJkLCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHhmZmZhLCAweDAxMjR9LAotCQl7MCwgMHhmZmY5LCAweDAxMjR9LAotCQl7MCwgMHgwMDg2LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDM4LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDAwLCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDE0LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHhmZmZhLCAweDAxMjR9LAotCQl7MCwgMHhmZmY5LCAweDAxMjR9LAotCQl7MCwgMHgwMDg2LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDM3LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDAxLCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDJlLCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHhmZmZhLCAweDAxMjR9LAotCQl7MCwgMHhmZmY5LCAweDAxMjR9LAotCQl7MCwgMHgwMDg2LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDM4LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDAzLCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDAwLCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHhmZmZhLCAweDAxMjR9LAotCQl7MCwgMHhmZmY5LCAweDAxMjR9LAotCQl7MCwgMHgwMDg2LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDM3LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDAxLCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDJmLCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHhmZmZhLCAweDAxMjR9LAotCQl7MCwgMHhmZmY5LCAweDAxMjR9LAotCQl7MCwgMHgwMDg2LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDM4LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDAzLCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDE0LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHhmZmZhLCAweDAxMjR9LAotCQl7MCwgMHhmZmY5LCAweDAxMjR9LAotCQl7MCwgMHgwMDg2LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDM3LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDAxLCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDQwLCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHhmZmZhLCAweDAxMjR9LAotCQl7MCwgMHhmZmY5LCAweDAxMjR9LAotCQl7MCwgMHgwMDg2LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDM4LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDAwLCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDQwLCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHhmZmZhLCAweDAxMjR9LAotCQl7MCwgMHhmZmY5LCAweDAxMjR9LAotCQl7MCwgMHgwMDg2LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDM3LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDAxLCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDUzLCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHhmZmZhLCAweDAxMjR9LAotCQl7MCwgMHhmZmY5LCAweDAxMjR9LAotCQl7MCwgMHgwMDg2LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDM4LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDAwLCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDM4LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHhmZmZhLCAweDAxMjR9LAotCQl7MCwgMHgwMDAwLCAweDAxMDF9LAotCQl7MCwgMHgwMGEwLCAweDAxMDN9LAotCQl7MCwgMHgwMDc4LCAweDAxMDV9LAotCQl7MCwgMHgwMDAwLCAweDAxMGF9LAotCQl7MCwgMHgwMDI0LCAweDAxMGJ9LAotCQl7MCwgMHgwMDI4LCAweDAxMTl9LAotCQl7MCwgMHgwMDg4LCAweDAxMWJ9LAotCQl7MCwgMHgwMDAyLCAweDAxMWR9LAotCQl7MCwgMHgwMDAzLCAweDAxMWV9LAotCQl7MCwgMHgwMDAwLCAweDAxMjl9LAotCQl7MCwgMHgwMGZjLCAweDAxMmJ9LAotCQl7MCwgMHgwMDA4LCAweDAxMDJ9LAotCQl7MCwgMHgwMDAwLCAweDAxMDR9LAotCQl7MCwgMHgwMDA4LCAweDAxMWF9LAotCQl7MCwgMHgwMDI4LCAweDAxMWN9LAotCQl7MCwgMHgwMDIxLCAweDAxMmF9LAotCQl7MCwgMHgwMDAwLCAweDAxMTh9LAotCQl7MCwgMHgwMDAwLCAweDAxMzJ9LAotCQl7MCwgMHgwMDAwLCAweDAxMDl9LAotCQl7MCwgMHhmZmY5LCAweDAxMjR9LAotCQl7MCwgMHgwMDg2LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDM3LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDAxLCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDMxLCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHhmZmZhLCAweDAxMjR9LAotCQl7MCwgMHhmZmY5LCAweDAxMjR9LAotCQl7MCwgMHgwMDg2LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDM4LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDAwLCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDAwLCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHhmZmZhLCAweDAxMjR9LAotCQl7MCwgMHhmZmY5LCAweDAxMjR9LAotCQl7MCwgMHgwMDg2LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDM3LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDAxLCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDQwLCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHhmZmZhLCAweDAxMjR9LAotCQl7MCwgMHhmZmY5LCAweDAxMjR9LAotCQl7MCwgMHgwMDg2LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDM4LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDAwLCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDQwLCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHhmZmZhLCAweDAxMjR9LAotCQl7MCwgMHhmZmY5LCAweDAxMjR9LAotCQl7MCwgMHgwMDg2LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDM3LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDAwLCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMGRjLCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHhmZmZhLCAweDAxMjR9LAotCQl7MCwgMHhmZmY5LCAweDAxMjR9LAotCQl7MCwgMHgwMDg2LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDM4LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDAwLCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDAwLCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHhmZmZhLCAweDAxMjR9LAotCQl7MCwgMHhmZmY5LCAweDAxMjR9LAotCQl7MCwgMHgwMDg2LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDM3LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDAxLCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDMyLCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHhmZmZhLCAweDAxMjR9LAotCQl7MCwgMHhmZmY5LCAweDAxMjR9LAotCQl7MCwgMHgwMDg2LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDM4LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDAxLCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDIwLCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHhmZmZhLCAweDAxMjR9LAotCQl7MCwgMHhmZmY5LCAweDAxMjR9LAotCQl7MCwgMHgwMDg2LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDM3LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDAxLCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDQwLCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHhmZmZhLCAweDAxMjR9LAotCQl7MCwgMHhmZmY5LCAweDAxMjR9LAotCQl7MCwgMHgwMDg2LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDM4LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDAwLCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDQwLCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHhmZmZhLCAweDAxMjR9LAotCQl7MCwgMHhmZmY5LCAweDAxMjR9LAotCQl7MCwgMHgwMDg2LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDM3LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDAwLCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDMwLCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHhmZmZhLCAweDAxMjR9LAotCQl7MCwgMHhmZmY5LCAweDAxMjR9LAotCQl7MCwgMHgwMDg2LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDM4LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDA4LCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHgwMDAwLCAweDAxMjd9LAotCQl7MCwgMHhmZmY4LCAweDAxMjR9LAotCQl7MCwgMHhmZmZkLCAweDAxMjR9LAotCQl7MCwgMHhmZmZhLCAweDAxMjR9LAotCQl7MCwgMHgwMDAzLCAweDAxMDZ9LAotCQl7MCwgMHgwMDYyLCAweDAxMDd9LAotCQl7MCwgMHgwMDAzLCAweDAxMTF9LAotCX07Ci0jZGVmaW5lIE5VTV9JTklUX0RBVEEKLQotCXVuc2lnbmVkIHNob3J0IGNvbXByZXNzaW9uID0gMDsJLyogMD1ub25lLCA3PWJlc3QgZnJhbWUgcmF0ZSAgKi8KLQlpbnQgZl9yYXRlOyAvKiAwPUZhc3Rlc3QgNz1zbG93ZXN0ICovCi0KLQlpZiAoSUJNQ0FNX1QodXZkKS0+aW5pdGlhbGl6ZWQpCi0JCXJldHVybjsKLQotCS8qIEludGVybmFsIGZyYW1lIHJhdGUgaXMgY29udHJvbGxlZCBieSBmX3JhdGUgdmFsdWUgKi8KLQlmX3JhdGUgPSA3IC0gZnJhbWVyYXRlOwotCVJFU1RSSUNUX1RPX1JBTkdFKGZfcmF0ZSwgMCwgNyk7Ci0KLQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTAwKTsKLQlpYm1jYW1fdmVpbyh1dmQsIDEsIDB4MDAwMCwgMHgwMTE2KTsKLQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA2MCwgMHgwMTE2KTsKLQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMiwgMHgwMTEyKTsKLQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTIzKTsKLQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMSwgMHgwMTE3KTsKLQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA0MCwgMHgwMTA4KTsKLQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxOSwgMHgwMTJjKTsKLQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA2MCwgMHgwMTE2KTsKLQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMiwgMHgwMTE1KTsKLQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMywgMHgwMTE1KTsKLQlpYm1jYW1fdmVpbyh1dmQsIDEsIDB4MDAwMCwgMHgwMTE1KTsKLQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwYiwgMHgwMTE1KTsKLQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwMGEsIDB4MDA0MCk7Ci0JaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDBiLCAweDAwZjYpOwotCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDAwYywgMHgwMDAyKTsKLQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwMGQsIDB4MDAyMCk7Ci0JaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDBlLCAweDAwMzMpOwotCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDAwZiwgMHgwMDA3KTsKLQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwMTAsIDB4MDAwMCk7Ci0JaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDExLCAweDAwNzApOwotCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDAxMiwgMHgwMDMwKTsKLQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwMTMsIDB4MDAwMCk7Ci0JaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDE0LCAweDAwMDEpOwotCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDAxNSwgMHgwMDAxKTsKLQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwMTYsIDB4MDAwMSk7Ci0JaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDE3LCAweDAwMDEpOwotCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDAxOCwgMHgwMDAwKTsKLQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwMWUsIDB4MDBjMyk7Ci0JaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDIwLCAweDAwMDApOwotCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDAyOCwgMHgwMDEwKTsKLQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwMjksIDB4MDA1NCk7Ci0JaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDJhLCAweDAwMTMpOwotCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDAyYiwgMHgwMDA3KTsKLQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwMmQsIDB4MDAyOCk7Ci0JaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDJlLCAweDAwMDApOwotCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDAzMSwgMHgwMDAwKTsKLQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwMzIsIDB4MDAwMCk7Ci0JaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDMzLCAweDAwMDApOwotCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDAzNCwgMHgwMDAwKTsKLQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwMzUsIDB4MDAzOCk7Ci0JaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDNhLCAweDAwMDEpOwotCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDAzYywgMHgwMDFlKTsKLQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwM2YsIDB4MDAwYSk7Ci0JaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDQxLCAweDAwMDApOwotCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA0NiwgMHgwMDNmKTsKLQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwNDcsIDB4MDAwMCk7Ci0JaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDUwLCAweDAwMDUpOwotCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA1MiwgMHgwMDFhKTsKLQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwNTMsIDB4MDAwMyk7Ci0JaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDVhLCAweDAwNmIpOwotCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA1ZCwgMHgwMDFlKTsKLQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwNWUsIDB4MDAzMCk7Ci0JaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDVmLCAweDAwNDEpOwotCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA2NCwgMHgwMDA4KTsKLQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwNjUsIDB4MDAxNSk7Ci0JaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDY4LCAweDAwMGYpOwotCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA3OSwgMHgwMDAwKTsKLQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwN2EsIDB4MDAwMCk7Ci0JaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDdjLCAweDAwM2YpOwotCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA4MiwgMHgwMDBmKTsKLQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwODUsIDB4MDAwMCk7Ci0JaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDk5LCAweDAwMDApOwotCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA5YiwgMHgwMDIzKTsKLQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwOWMsIDB4MDAyMik7Ci0JaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDlkLCAweDAwOTYpOwotCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA5ZSwgMHgwMDk2KTsKLQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwOWYsIDB4MDAwYSk7Ci0KLQlzd2l0Y2ggKHV2ZC0+dmlkZW9zaXplKSB7Ci0JY2FzZSBWSURFT1NJWkVfMTYweDEyMDoKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEwMSk7IC8qIFNhbWUgb24gMTc2eDE0NCwgMzIweDI0MCAqLwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhMCwgMHgwMTAzKTsgLyogU2FtZSBvbiAxNzZ4MTQ0LCAzMjB4MjQwICovCi0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDc4LCAweDAxMDUpOyAvKiBTYW1lIG9uIDE3NngxNDQsIDMyMHgyNDAgKi8KLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEwYSk7IC8qIFNhbWUgKi8KLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMjQsIDB4MDEwYik7IC8qIERpZmZlcnMgZXZlcnl3aGVyZSAqLwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhOSwgMHgwMTE5KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMTYsIDB4MDExYik7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAyLCAweDAxMWQpOyAvKiBTYW1lIG9uIDE3NngxNDQsIDMyMHgyNDAgKi8KLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDMsIDB4MDExZSk7IC8qIFNhbWUgb24gMTc2eDE0NCwgNjQweDQ4MCAqLwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTI5KTsgLyogU2FtZSAqLwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBmYywgMHgwMTJiKTsgLyogU2FtZSAqLwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxOCwgMHgwMTAyKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDQsIDB4MDEwNCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDA0LCAweDAxMWEpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAyOCwgMHgwMTFjKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMjIsIDB4MDEyYSk7IC8qIFNhbWUgKi8KLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDExOCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMzIpOwotCQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwMjEsIDB4MDAwMSk7IC8qIFNhbWUgKi8KLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCBjb21wcmVzc2lvbiwgMHgwMTA5KTsKLQkJYnJlYWs7Ci0JY2FzZSBWSURFT1NJWkVfMzIweDI0MDoKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEwMSk7IC8qIFNhbWUgb24gMTc2eDE0NCwgMzIweDI0MCAqLwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhMCwgMHgwMTAzKTsgLyogU2FtZSBvbiAxNzZ4MTQ0LCAzMjB4MjQwICovCi0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDc4LCAweDAxMDUpOyAvKiBTYW1lIG9uIDE3NngxNDQsIDMyMHgyNDAgKi8KLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEwYSk7IC8qIFNhbWUgKi8KLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMjgsIDB4MDEwYik7IC8qIERpZmZlcnMgZXZlcnl3aGVyZSAqLwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMiwgMHgwMTFkKTsgLyogU2FtZSAqLwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTFlKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEyOSk7IC8qIFNhbWUgKi8KLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwZmMsIDB4MDEyYik7IC8qIFNhbWUgKi8KLQkJLyogNCBjb21tYW5kcyBmcm9tIDE2MHgxMjAgc2tpcHBlZCAqLwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAyMiwgMHgwMTJhKTsgLyogU2FtZSAqLwotCQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwMjEsIDB4MDAwMSk7IC8qIFNhbWUgKi8KLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCBjb21wcmVzc2lvbiwgMHgwMTA5KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwZDksIDB4MDExOSk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDA2LCAweDAxMWIpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAyMSwgMHgwMTAyKTsgLyogU2FtZSBvbiAzMjB4MjQwLCA2NDB4NDgwICovCi0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDEwLCAweDAxMDQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwNCwgMHgwMTFhKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwM2YsIDB4MDExYyk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDFjLCAweDAxMTgpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTMyKTsKLQkJYnJlYWs7Ci0JY2FzZSBWSURFT1NJWkVfNjQweDQ4MDoKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwZjAsIDB4MDEwNSk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMGEpOyAvKiBTYW1lICovCi0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDM4LCAweDAxMGIpOyAvKiBEaWZmZXJzIGV2ZXJ5d2hlcmUgKi8KLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwZDksIDB4MDExOSk7IC8qIFNhbWUgb24gMzIweDI0MCwgNjQweDQ4MCAqLwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwNiwgMHgwMTFiKTsgLyogU2FtZSBvbiAzMjB4MjQwLCA2NDB4NDgwICovCi0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDA0LCAweDAxMWQpOyAvKiBOQyAqLwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMywgMHgwMTFlKTsgLyogU2FtZSBvbiAxNzZ4MTQ0LCA2NDB4NDgwICovCi0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMjkpOyAvKiBTYW1lICovCi0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGZjLCAweDAxMmIpOyAvKiBTYW1lICovCi0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDIxLCAweDAxMDIpOyAvKiBTYW1lIG9uIDMyMHgyNDAsIDY0MHg0ODAgKi8KLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMTYsIDB4MDEwNCk7IC8qIE5DICovCi0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDA0LCAweDAxMWEpOyAvKiBTYW1lIG9uIDMyMHgyNDAsIDY0MHg0ODAgKi8KLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwM2YsIDB4MDExYyk7IC8qIFNhbWUgb24gMzIweDI0MCwgNjQweDQ4MCAqLwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAyMiwgMHgwMTJhKTsgLyogU2FtZSAqLwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxYywgMHgwMTE4KTsgLyogU2FtZSBvbiAzMjB4MjQwLCA2NDB4NDgwICovCi0JCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDAyMSwgMHgwMDAxKTsgLyogU2FtZSAqLwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIGNvbXByZXNzaW9uLCAweDAxMDkpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA0MCwgMHgwMTAxKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwNDAsIDB4MDEwMyk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMzIpOyAvKiBTYW1lIG9uIDMyMHgyNDAsIDY0MHg0ODAgKi8KLQkJYnJlYWs7Ci0JfQotCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA3ZSwgMHgwMDBlKTsJLyogSHVlICovCi0JaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDM2LCAweDAwMTEpOwkvKiBCcmlnaHRuZXNzICovCi0JaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDYwLCAweDAwMDIpOwkvKiBTaGFycG5lc3MgKi8KLQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwNjEsIDB4MDAwNCk7CS8qIFNoYXJwbmVzcyAqLwotCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA2MiwgMHgwMDA1KTsJLyogU2hhcnBuZXNzICovCi0JaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDYzLCAweDAwMTQpOwkvKiBTaGFycG5lc3MgKi8KLQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwOTYsIDB4MDBhMCk7CS8qIFJlZCBnYWluICovCi0JaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDk3LCAweDAwOTYpOwkvKiBCbHVlIGdhaW4gKi8KLQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwNjcsIDB4MDAwMSk7CS8qIENvbnRyYXN0ICovCi0JaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDViLCAweDAwMGMpOwkvKiBDb250cmFzdCAqLwotCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA1YywgMHgwMDE2KTsJLyogQ29udHJhc3QgKi8KLQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwOTgsIDB4MDAwYik7Ci0JaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDJjLCAweDAwMDMpOwkvKiBXYXMgMSwgYnJva2UgNjQweDQ4MCAqLwotCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDAyZiwgMHgwMDJhKTsKLQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwMzAsIDB4MDAyOSk7Ci0JaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDM3LCAweDAwMDIpOwotCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDAzOCwgMHgwMDU5KTsKLQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwM2QsIDB4MDAyZSk7Ci0JaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDNlLCAweDAwMjgpOwotCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA3OCwgMHgwMDA1KTsKLQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwN2IsIDB4MDAxMSk7Ci0JaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDdkLCAweDAwNGIpOwotCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA3ZiwgMHgwMDIyKTsKLQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwODAsIDB4MDAwYyk7Ci0JaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDgxLCAweDAwMGIpOwotCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA4MywgMHgwMGZkKTsKLQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwODYsIDB4MDAwYik7Ci0JaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDg3LCAweDAwMGIpOwotCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA3ZSwgMHgwMDBlKTsKLQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwOTYsIDB4MDBhMCk7CS8qIFJlZCBnYWluICovCi0JaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDk3LCAweDAwOTYpOwkvKiBCbHVlIGdhaW4gKi8KLQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwOTgsIDB4MDAwYik7Ci0KLQlzd2l0Y2ggKHV2ZC0+dmlkZW9zaXplKSB7Ci0JY2FzZSBWSURFT1NJWkVfMTYweDEyMDoKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDIsIDB4MDEwNik7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDA4LCAweDAxMDcpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIGZfcmF0ZSwgMHgwMTExKTsJLyogRnJhbWUgcmF0ZSAqLwotCQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwMWYsIDB4MDAwMCk7IC8qIFNhbWUgKi8KLQkJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDM5LCAweDAwMWYpOyAvKiBTYW1lICovCi0JCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDAzYiwgMHgwMDNjKTsgLyogU2FtZSAqLwotCQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwNDAsIDB4MDAwYSk7Ci0JCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA1MSwgMHgwMDBhKTsKLQkJYnJlYWs7Ci0JY2FzZSBWSURFT1NJWkVfMzIweDI0MDoKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDMsIDB4MDEwNik7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDYyLCAweDAxMDcpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIGZfcmF0ZSwgMHgwMTExKTsJLyogRnJhbWUgcmF0ZSAqLwotCQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwMWYsIDB4MDAwMCk7IC8qIFNhbWUgKi8KLQkJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDM5LCAweDAwMWYpOyAvKiBTYW1lICovCi0JCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDAzYiwgMHgwMDNjKTsgLyogU2FtZSAqLwotCQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwNDAsIDB4MDAwOCk7Ci0JCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA1MSwgMHgwMDBiKTsKLQkJYnJlYWs7Ci0JY2FzZSBWSURFT1NJWkVfNjQweDQ4MDoKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDIsIDB4MDEwNik7CS8qIEFkanVzdG1lbnRzICovCi0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGI0LCAweDAxMDcpOwkvKiBBZGp1c3RtZW50cyAqLwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIGZfcmF0ZSwgMHgwMTExKTsJLyogRnJhbWUgcmF0ZSAqLwotCQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwMWYsIDB4MDAwMik7IC8qICFTYW1lICovCi0JCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDAzOSwgMHgwMDNlKTsgLyogIVNhbWUgKi8KLQkJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDQwLCAweDAwMDgpOwotCQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwNTEsIDB4MDAwYSk7Ci0JCWJyZWFrOwotCX0KLQotCS8qIDAxLjAxLjA4IC0gQWRkZWQgZm9yIFJDQSB2aWRlbyBpbiBzdXBwb3J0IC1MTyAqLwotCWlmKGluaXRfbW9kZWwzX2lucHV0KSB7Ci0JCWlmIChkZWJ1ZyA+IDApCi0JCQlkZXZfaW5mbygmdXZkLT5kZXYtPmRldiwgIlNldHRpbmcgaW5wdXQgdG8gUkNBLlxuIik7Ci0JCWZvciAoaT0wOyBpIDwgQVJSQVlfU0laRShpbml0RGF0YSk7IGkrKykgewotCQkJaWJtY2FtX3ZlaW8odXZkLCBpbml0RGF0YVtpXS5yZXEsIGluaXREYXRhW2ldLnZhbHVlLCBpbml0RGF0YVtpXS5pbmRleCk7Ci0JCX0KLQl9Ci0KLQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMSwgMHgwMTE0KTsKLQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBjMCwgMHgwMTBjKTsKLQl1c2JfY2xlYXJfaGFsdCh1dmQtPmRldiwgdXNiX3Jjdmlzb2NwaXBlKHV2ZC0+ZGV2LCB1dmQtPnZpZGVvX2VuZHApKTsKLX0KLQotLyoKLSAqIGlibWNhbV92aWRlb19zdG9wKCkKLSAqCi0gKiBUaGlzIGNvZGUgdGVsbHMgY2FtZXJhIHRvIHN0b3Agc3RyZWFtaW5nLiBUaGUgaW50ZXJmYWNlIHJlbWFpbnMKLSAqIGNvbmZpZ3VyZWQgYW5kIGJhbmR3aWR0aCAtIGNsYWltZWQuCi0gKi8KLXN0YXRpYyB2b2lkIGlibWNhbV92aWRlb19zdG9wKHN0cnVjdCB1dmQgKnV2ZCkKLXsKLQlzd2l0Y2ggKElCTUNBTV9UKHV2ZCktPmNhbWVyYV9tb2RlbCkgewotCWNhc2UgSUJNQ0FNX01PREVMXzE6Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMCwgMHgwMTBjKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwLCAweDAxMGMpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDEsIDB4MDExNCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhjMCwgMHgwMTBjKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwLCAweDAxMGMpOwotCQlpYm1jYW1fc2VuZF9GRl8wNF8wMih1dmQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDEsIDB4MDAsIDB4MDEwMCk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg4MSwgMHgwMTAwKTsJLyogTEVEIE9mZiAqLwotCQlicmVhazsKLQljYXNlIElCTUNBTV9NT0RFTF8yOgotY2FzZSBJQk1DQU1fTU9ERUxfNDoKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEwYyk7CS8qIFN0b3AgdGhlIGNhbWVyYSAqLwotCi0JCWlibWNhbV9tb2RlbDJfUGFja2V0MSh1dmQsIDB4MDAzMCwgMHgwMDA0KTsKLQotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA4MCwgMHgwMTAwKTsJLyogTEVEIE9mZiAqLwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAyMCwgMHgwMTExKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYTAsIDB4MDExMSk7Ci0KLQkJaWJtY2FtX21vZGVsMl9QYWNrZXQxKHV2ZCwgMHgwMDMwLCAweDAwMDIpOwotCi0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDIwLCAweDAxMTEpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTEyKTsKLQkJYnJlYWs7Ci0JY2FzZSBJQk1DQU1fTU9ERUxfMzoKLSNpZiAxCi0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMGMpOwotCi0JCS8qIEhlcmUgd2UgYXJlIHN1cHBvc2VkIHRvIHNlbGVjdCB2aWRlbyBpbnRlcmZhY2UgYWx0LiBzZXR0aW5nIDAgKi8KLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDYsIDB4MDEyYyk7Ci0KLQkJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDQ2LCAweDAwMDApOwotCi0JCWlibWNhbV92ZWlvKHV2ZCwgMSwgMHgwMDAwLCAweDAxMTYpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA2NCwgMHgwMTE2KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAxLCAweDAwMDAsIDB4MDExNSk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAzLCAweDAxMTUpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwOCwgMHgwMTIzKTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDExNyk7Ci0JCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMTIpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA4MCwgMHgwMTAwKTsKLQkJSUJNQ0FNX1QodXZkKS0+aW5pdGlhbGl6ZWQgPSAwOwotI2VuZGlmCi0JCWJyZWFrOwotCX0gLyogc3dpdGNoICovCi19Ci0KLS8qCi0gKiBpYm1jYW1fcmVpbml0X2lzbygpCi0gKgotICogVGhpcyBwcm9jZWR1cmUgc2VuZHMgY291cGxlIG9mIGNvbW1hbmRzIHRvIHRoZSBjYW1lcmEgYW5kIHRoZW4KLSAqIHJlc2V0cyB0aGUgdmlkZW8gcGlwZS4gVGhpcyBzZXF1ZW5jZSB3YXMgb2JzZXJ2ZWQgdG8gcmVpbml0IHRoZQotICogY2FtZXJhIG9yLCBhdCBsZWFzdCwgdG8gaW5pdGlhdGUgSVNPIGRhdGEgc3RyZWFtLgotICoKLSAqIEhpc3Rvcnk6Ci0gKiAxLzIvMDAgICBDcmVhdGVkLgotICovCi1zdGF0aWMgdm9pZCBpYm1jYW1fcmVpbml0X2lzbyhzdHJ1Y3QgdXZkICp1dmQsIGludCBkb19zdG9wKQotewotCXN3aXRjaCAoSUJNQ0FNX1QodXZkKS0+Y2FtZXJhX21vZGVsKSB7Ci0JY2FzZSBJQk1DQU1fTU9ERUxfMToKLQkJaWYgKGRvX3N0b3ApCi0JCQlpYm1jYW1fdmlkZW9fc3RvcCh1dmQpOwotCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMSwgMHgwMTE0KTsKLQkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYzAsIDB4MDEwYyk7Ci0JCXVzYl9jbGVhcl9oYWx0KHV2ZC0+ZGV2LCB1c2JfcmN2aXNvY3BpcGUodXZkLT5kZXYsIHV2ZC0+dmlkZW9fZW5kcCkpOwotCQlpYm1jYW1fbW9kZWwxX3NldHVwX2FmdGVyX3ZpZGVvX2lmKHV2ZCk7Ci0JCWJyZWFrOwotCWNhc2UgSUJNQ0FNX01PREVMXzI6Ci0JCWlibWNhbV9tb2RlbDJfc2V0dXBfYWZ0ZXJfdmlkZW9faWYodXZkKTsKLQkJYnJlYWs7Ci0JY2FzZSBJQk1DQU1fTU9ERUxfMzoKLQkJaWJtY2FtX3ZpZGVvX3N0b3AodXZkKTsKLQkJaWJtY2FtX21vZGVsM19zZXR1cF9hZnRlcl92aWRlb19pZih1dmQpOwotCQlicmVhazsKLQljYXNlIElCTUNBTV9NT0RFTF80OgotCQlpYm1jYW1fbW9kZWw0X3NldHVwX2FmdGVyX3ZpZGVvX2lmKHV2ZCk7Ci0JCWJyZWFrOwotCX0KLX0KLQotc3RhdGljIHZvaWQgaWJtY2FtX3ZpZGVvX3N0YXJ0KHN0cnVjdCB1dmQgKnV2ZCkKLXsKLQlpYm1jYW1fY2hhbmdlX2xpZ2h0aW5nX2NvbmRpdGlvbnModXZkKTsKLQlpYm1jYW1fc2V0X3NoYXJwbmVzcyh1dmQpOwotCWlibWNhbV9yZWluaXRfaXNvKHV2ZCwgMCk7Ci19Ci0KLS8qCi0gKiBSZXR1cm4gbmVnYXRpdmUgY29kZSBvbiBmYWlsdXJlLCAwIG9uIHN1Y2Nlc3MuCi0gKi8KLXN0YXRpYyBpbnQgaWJtY2FtX3NldHVwX29uX29wZW4oc3RydWN0IHV2ZCAqdXZkKQotewotCWludCBzZXR1cF9vayA9IDA7IC8qIFN1Y2Nlc3MgYnkgZGVmYXVsdCAqLwotCS8qIFNlbmQgaW5pdCBzZXF1ZW5jZSBvbmx5IG9uY2UsIGl0J3MgbGFyZ2UhICovCi0JaWYgKCFJQk1DQU1fVCh1dmQpLT5pbml0aWFsaXplZCkgeyAvKiBGSVhNRSByZW5hbWUgKi8KLQkJc3dpdGNoIChJQk1DQU1fVCh1dmQpLT5jYW1lcmFfbW9kZWwpIHsKLQkJY2FzZSBJQk1DQU1fTU9ERUxfMToKLQkJCXNldHVwX29rID0gaWJtY2FtX21vZGVsMV9zZXR1cCh1dmQpOwotCQkJYnJlYWs7Ci0JCWNhc2UgSUJNQ0FNX01PREVMXzI6Ci0JCQlzZXR1cF9vayA9IGlibWNhbV9tb2RlbDJfc2V0dXAodXZkKTsKLQkJCWJyZWFrOwotCQljYXNlIElCTUNBTV9NT0RFTF8zOgotCQljYXNlIElCTUNBTV9NT0RFTF80OgotCQkJLyogV2UgZG8gYWxsIHNldHVwIHdoZW4gSXNvYyBzdHJlYW0gaXMgcmVxdWVzdGVkICovCi0JCQlicmVhazsKLQkJfQotCQlJQk1DQU1fVCh1dmQpLT5pbml0aWFsaXplZCA9IChzZXR1cF9vayAhPSAwKTsKLQl9Ci0JcmV0dXJuIHNldHVwX29rOwotfQotCi1zdGF0aWMgdm9pZCBpYm1jYW1fY29uZmlndXJlX3ZpZGVvKHN0cnVjdCB1dmQgKnV2ZCkKLXsKLQlpZiAodXZkID09IE5VTEwpCi0JCXJldHVybjsKLQotCVJFU1RSSUNUX1RPX1JBTkdFKGluaXRfYnJpZ2h0bmVzcywgMCwgMjU1KTsKLQlSRVNUUklDVF9UT19SQU5HRShpbml0X2NvbnRyYXN0LCAwLCAyNTUpOwotCVJFU1RSSUNUX1RPX1JBTkdFKGluaXRfY29sb3IsIDAsIDI1NSk7Ci0JUkVTVFJJQ1RfVE9fUkFOR0UoaW5pdF9odWUsIDAsIDI1NSk7Ci0JUkVTVFJJQ1RfVE9fUkFOR0UoaHVlX2NvcnJlY3Rpb24sIDAsIDI1NSk7Ci0KLQltZW1zZXQoJnV2ZC0+dnBpYywgMCwgc2l6ZW9mKHV2ZC0+dnBpYykpOwotCW1lbXNldCgmdXZkLT52cGljX29sZCwgMHg1NSwgc2l6ZW9mKHV2ZC0+dnBpY19vbGQpKTsKLQotCXV2ZC0+dnBpYy5jb2xvdXIgPSBpbml0X2NvbG9yIDw8IDg7Ci0JdXZkLT52cGljLmh1ZSA9IGluaXRfaHVlIDw8IDg7Ci0JdXZkLT52cGljLmJyaWdodG5lc3MgPSBpbml0X2JyaWdodG5lc3MgPDwgODsKLQl1dmQtPnZwaWMuY29udHJhc3QgPSBpbml0X2NvbnRyYXN0IDw8IDg7Ci0JdXZkLT52cGljLndoaXRlbmVzcyA9IDEwNSA8PCA4OyAvKiBUaGlzIG9uZSBpc24ndCB1c2VkICovCi0JdXZkLT52cGljLmRlcHRoID0gMjQ7Ci0JdXZkLT52cGljLnBhbGV0dGUgPSBWSURFT19QQUxFVFRFX1JHQjI0OwotCi0JbWVtc2V0KCZ1dmQtPnZjYXAsIDAsIHNpemVvZih1dmQtPnZjYXApKTsKLQlzdHJjcHkodXZkLT52Y2FwLm5hbWUsICJJQk0gVVNCIENhbWVyYSIpOwotCXV2ZC0+dmNhcC50eXBlID0gVklEX1RZUEVfQ0FQVFVSRTsKLQl1dmQtPnZjYXAuY2hhbm5lbHMgPSAxOwotCXV2ZC0+dmNhcC5hdWRpb3MgPSAwOwotCXV2ZC0+dmNhcC5tYXh3aWR0aCA9IFZJREVPU0laRV9YKHV2ZC0+Y2FudmFzKTsKLQl1dmQtPnZjYXAubWF4aGVpZ2h0ID0gVklERU9TSVpFX1kodXZkLT5jYW52YXMpOwotCXV2ZC0+dmNhcC5taW53aWR0aCA9IG1pbl9jYW52YXNXaWR0aDsKLQl1dmQtPnZjYXAubWluaGVpZ2h0ID0gbWluX2NhbnZhc0hlaWdodDsKLQotCW1lbXNldCgmdXZkLT52Y2hhbiwgMCwgc2l6ZW9mKHV2ZC0+dmNoYW4pKTsKLQl1dmQtPnZjaGFuLmZsYWdzID0gMDsKLQl1dmQtPnZjaGFuLnR1bmVycyA9IDA7Ci0JdXZkLT52Y2hhbi5jaGFubmVsID0gMDsKLQl1dmQtPnZjaGFuLnR5cGUgPSBWSURFT19UWVBFX0NBTUVSQTsKLQlzdHJjcHkodXZkLT52Y2hhbi5uYW1lLCAiQ2FtZXJhIik7Ci19Ci0KLS8qCi0gKiBpYm1jYW1fcHJvYmUoKQotICoKLSAqIFRoaXMgcHJvY2VkdXJlIHF1ZXJpZXMgZGV2aWNlIGRlc2NyaXB0b3IgYW5kIGFjY2VwdHMgdGhlIGludGVyZmFjZQotICogaWYgaXQgbG9va3MgbGlrZSBJQk0gQy1pdCBjYW1lcmEuCi0gKgotICogSGlzdG9yeToKLSAqIDIyLUphbi0yMDAwIE1vdmVkIGNhbWVyYSBpbml0IGNvZGUgdG8gaWJtY2FtX29wZW4oKQotICogMjc9SmFuLTIwMDAgQ2hhbmdlZCB0byB1c2Ugc3RhdGljIHN0cnVjdHVyZXMsIGFkZGVkIGxvY2tpbmcuCi0gKiAyNC1NYXktMjAwMCBDb3JyZWN0ZWQgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbiAoTU9EX3h4eF9VU0VfQ09VTlQpLgotICogMDMtSnVsLTIwMDAgRml4ZWQgZW5kaWFubmVzcyBidWcuCi0gKiAxMi1Ob3YtMjAwMCBSZXdvcmtlZCB0byBjb21wbHkgd2l0aCBuZXcgcHJvYmUoKSBzaWduYXR1cmUuCi0gKiAyMy1KYW4tMjAwMSBBZGRlZCBjb21wYXRpYmlsaXR5IHdpdGggMi4yLngga2VybmVscy4KLSAqLwotc3RhdGljIGludCBpYm1jYW1fcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICpkZXZpZCkKLXsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKLQlzdHJ1Y3QgdXZkICp1dmQgPSBOVUxMOwotCWludCBpeCwgaSwgbmFzLCBtb2RlbD0wLCBjYW52YXNYPTAsIGNhbnZhc1k9MDsKLQlpbnQgYWN0SW50ZXJmYWNlPS0xLCBpbmFjdEludGVyZmFjZT0tMSwgbWF4UFM9MDsKLQlfX3U4IGlmbnVtID0gaW50Zi0+YWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyOwotCXVuc2lnbmVkIGNoYXIgdmlkZW9fZXAgPSAwOwotCi0JaWYgKGRlYnVnID49IDEpCi0JCWRldl9pbmZvKCZkZXYtPmRldiwgImlibWNhbV9wcm9iZSglcCwldS4pXG4iLCBpbnRmLCBpZm51bSk7Ci0KLQkvKiBXZSBkb24ndCBoYW5kbGUgbXVsdGktY29uZmlnIGNhbWVyYXMgKi8KLQlpZiAoZGV2LT5kZXNjcmlwdG9yLmJOdW1Db25maWd1cmF0aW9ucyAhPSAxKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCS8qIENoZWNrIHRoZSB2ZXJzaW9uL3JldmlzaW9uICovCi0Jc3dpdGNoIChsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKSkgewotCWNhc2UgMHgwMDAyOgotCQlpZiAoaWZudW0gIT0gMikKLQkJCXJldHVybiAtRU5PREVWOwotCQltb2RlbCA9IElCTUNBTV9NT0RFTF8xOwotCQlicmVhazsKLQljYXNlIDB4MDMwQToKLQkJaWYgKGlmbnVtICE9IDApCi0JCQlyZXR1cm4gLUVOT0RFVjsKLQkJaWYgKChsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSA9PSBORVRDQU1fUFJPRFVDVF9JRCkgfHwKLQkJICAgIChsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSA9PSBWRU9fODAwRF9QUk9EVUNUX0lEKSkKLQkJCW1vZGVsID0gSUJNQ0FNX01PREVMXzQ7Ci0JCWVsc2UKLQkJCW1vZGVsID0gSUJNQ0FNX01PREVMXzI7Ci0JCWJyZWFrOwotCWNhc2UgMHgwMzAxOgotCQlpZiAoaWZudW0gIT0gMCkKLQkJCXJldHVybiAtRU5PREVWOwotCQltb2RlbCA9IElCTUNBTV9NT0RFTF8zOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQllcnIoIklCTSBjYW1lcmEgd2l0aCByZXZpc2lvbiAweCUwNHggaXMgbm90IHN1cHBvcnRlZC4iLAotCQkJbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSkpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQkvKiBQcmludCBkZXRhaWxlZCBpbmZvIG9uIHdoYXQgd2UgZm91bmQgc28gZmFyICovCi0JZG8gewotCQljaGFyICpicmFuZCA9IE5VTEw7Ci0JCXN3aXRjaCAobGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkpIHsKLQkJY2FzZSBORVRDQU1fUFJPRFVDVF9JRDoKLQkJCWJyYW5kID0gIklCTSBOZXRDYW1lcmEiOwotCQkJYnJlYWs7Ci0JCWNhc2UgVkVPXzgwMENfUFJPRFVDVF9JRDoKLQkJCWJyYW5kID0gIlZlbyBTdGluZ3JheSBbODAwQ10iOwotCQkJYnJlYWs7Ci0JCWNhc2UgVkVPXzgwMERfUFJPRFVDVF9JRDoKLQkJCWJyYW5kID0gIlZlbyBTdGluZ3JheSBbODAwRF0iOwotCQkJYnJlYWs7Ci0JCWNhc2UgSUJNQ0FNX1BST0RVQ1RfSUQ6Ci0JCWRlZmF1bHQ6Ci0JCQlicmFuZCA9ICJJQk0gUEMgQ2FtZXJhIjsgLyogYS5rLmEuIFhpcmxpbmsgQy1JdCAqLwotCQkJYnJlYWs7Ci0JCX0KLQkJZGV2X2luZm8oJmRldi0+ZGV2LAotCQkJICIlcyBVU0IgY2FtZXJhIGZvdW5kIChtb2RlbCAlZCwgcmV2LiAweCUwNHgpXG4iLAotCQkJIGJyYW5kLCBtb2RlbCwgbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSkpOwotCX0gd2hpbGUgKDApOwotCi0JLyogVmFsaWRhdGUgZm91bmQgaW50ZXJmYWNlOiBtdXN0IGhhdmUgb25lIElTTyBlbmRwb2ludCAqLwotCW5hcyA9IGludGYtPm51bV9hbHRzZXR0aW5nOwotCWlmIChkZWJ1ZyA+IDApCi0JCWRldl9pbmZvKCZkZXYtPmRldiwgIk51bWJlciBvZiBhbHRlcm5hdGUgc2V0dGluZ3M9JWQuXG4iLAotCQkJIG5hcyk7Ci0JaWYgKG5hcyA8IDIpIHsKLQkJZXJyKCJUb28gZmV3IGFsdGVybmF0ZSBzZXR0aW5ncyBmb3IgdGhpcyBjYW1lcmEhIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQkvKiBWYWxpZGF0ZSBhbGwgYWx0ZXJuYXRlIHNldHRpbmdzICovCi0JZm9yIChpeD0wOyBpeCA8IG5hczsgaXgrKykgewotCQljb25zdCBzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppbnRlcmZhY2U7Ci0JCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcG9pbnQ7Ci0KLQkJaW50ZXJmYWNlID0gJmludGYtPmFsdHNldHRpbmdbaXhdOwotCQlpID0gaW50ZXJmYWNlLT5kZXNjLmJBbHRlcm5hdGVTZXR0aW5nOwotCQlpZiAoaW50ZXJmYWNlLT5kZXNjLmJOdW1FbmRwb2ludHMgIT0gMSkgewotCQkJZXJyKCJJbnRlcmZhY2UgJWQuIGhhcyAldS4gZW5kcG9pbnRzISIsCi0JCQkgICAgaWZudW0sICh1bnNpZ25lZCkoaW50ZXJmYWNlLT5kZXNjLmJOdW1FbmRwb2ludHMpKTsKLQkJCXJldHVybiAtRU5PREVWOwotCQl9Ci0JCWVuZHBvaW50ID0gJmludGVyZmFjZS0+ZW5kcG9pbnRbMF0uZGVzYzsKLQkJaWYgKHZpZGVvX2VwID09IDApCi0JCQl2aWRlb19lcCA9IGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzOwotCQllbHNlIGlmICh2aWRlb19lcCAhPSBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcykgewotCQkJZXJyKCJBbHRlcm5hdGUgc2V0dGluZ3MgaGF2ZSBkaWZmZXJlbnQgZW5kcG9pbnQgYWRkcmVzc2VzISIpOwotCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCX0KLQkJaWYgKCF1c2JfZW5kcG9pbnRfeGZlcl9pc29jKGVuZHBvaW50KSkgewotCQkJZXJyKCJJbnRlcmZhY2UgJWQuIGhhcyBub24tSVNPIGVuZHBvaW50ISIsIGlmbnVtKTsKLQkJCXJldHVybiAtRU5PREVWOwotCQl9Ci0JCWlmICh1c2JfZW5kcG9pbnRfZGlyX291dChlbmRwb2ludCkpIHsKLQkJCWVycigiSW50ZXJmYWNlICVkLiBoYXMgSVNPIE9VVCBlbmRwb2ludCEiLCBpZm51bSk7Ci0JCQlyZXR1cm4gLUVOT0RFVjsKLQkJfQotCQlpZiAobGUxNl90b19jcHUoZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplKSA9PSAwKSB7Ci0JCQlpZiAoaW5hY3RJbnRlcmZhY2UgPCAwKQotCQkJCWluYWN0SW50ZXJmYWNlID0gaTsKLQkJCWVsc2UgewotCQkJCWVycigiTW9yZSB0aGFuIG9uZSBpbmFjdGl2ZSBhbHQuIHNldHRpbmchIik7Ci0JCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoYWN0SW50ZXJmYWNlIDwgMCkgewotCQkJCWFjdEludGVyZmFjZSA9IGk7Ci0JCQkJbWF4UFMgPSBsZTE2X3RvX2NwdShlbmRwb2ludC0+d01heFBhY2tldFNpemUpOwotCQkJCWlmIChkZWJ1ZyA+IDApCi0JCQkJCWRldl9pbmZvKCZkZXYtPmRldiwKLQkJCQkJCSAiQWN0aXZlIHNldHRpbmc9JWQuICIKLQkJCQkJCSAibWF4UFM9JWQuXG4iLCBpLCBtYXhQUyk7Ci0JCQl9IGVsc2UKLQkJCQllcnIoIk1vcmUgdGhhbiBvbmUgYWN0aXZlIGFsdC4gc2V0dGluZyEgSWdub3JpbmcgIyVkLiIsIGkpOwotCQl9Ci0JfQotCWlmICgobWF4UFMgPD0gMCkgfHwgKGFjdEludGVyZmFjZSA8IDApIHx8IChpbmFjdEludGVyZmFjZSA8IDApKSB7Ci0JCWVycigiRmFpbGVkIHRvIHJlY29nbml6ZSB0aGUgY2FtZXJhISIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQkvKiBWYWxpZGF0ZSBvcHRpb25zICovCi0Jc3dpdGNoIChtb2RlbCkgewotCWNhc2UgSUJNQ0FNX01PREVMXzE6Ci0JCVJFU1RSSUNUX1RPX1JBTkdFKGxpZ2h0aW5nLCAwLCAyKTsKLQkJUkVTVFJJQ1RfVE9fUkFOR0Uoc2l6ZSwgU0laRV8xMjh4OTYsIFNJWkVfMzUyeDI4OCk7Ci0JCWlmIChmcmFtZXJhdGUgPCAwKQotCQkJZnJhbWVyYXRlID0gMjsKLQkJY2FudmFzWCA9IDM1MjsKLQkJY2FudmFzWSA9IDI4ODsKLQkJYnJlYWs7Ci0JY2FzZSBJQk1DQU1fTU9ERUxfMjoKLQkJUkVTVFJJQ1RfVE9fUkFOR0UobGlnaHRpbmcsIDAsIDE1KTsKLQkJUkVTVFJJQ1RfVE9fUkFOR0Uoc2l6ZSwgU0laRV8xNzZ4MTQ0LCBTSVpFXzM1MngyNDApOwotCQlpZiAoZnJhbWVyYXRlIDwgMCkKLQkJCWZyYW1lcmF0ZSA9IDI7Ci0JCWNhbnZhc1ggPSAzNTI7Ci0JCWNhbnZhc1kgPSAyNDA7Ci0JCWJyZWFrOwotCWNhc2UgSUJNQ0FNX01PREVMXzM6Ci0JCVJFU1RSSUNUX1RPX1JBTkdFKGxpZ2h0aW5nLCAwLCAxNSk7IC8qIEZJWE1FICovCi0JCXN3aXRjaCAoc2l6ZSkgewotCQljYXNlIFNJWkVfMTYweDEyMDoKLQkJCWNhbnZhc1ggPSAxNjA7Ci0JCQljYW52YXNZID0gMTIwOwotCQkJaWYgKGZyYW1lcmF0ZSA8IDApCi0JCQkJZnJhbWVyYXRlID0gMjsKLQkJCVJFU1RSSUNUX1RPX1JBTkdFKGZyYW1lcmF0ZSwgMCwgNSk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWRldl9pbmZvKCZkZXYtPmRldiwgIklCTSBjYW1lcmE6IHVzaW5nIDMyMHgyNDBcbiIpOwotCQkJc2l6ZSA9IFNJWkVfMzIweDI0MDsKLQkJCS8qIE5vIGJyZWFrIGhlcmUgKi8KLQkJY2FzZSBTSVpFXzMyMHgyNDA6Ci0JCQljYW52YXNYID0gMzIwOwotCQkJY2FudmFzWSA9IDI0MDsKLQkJCWlmIChmcmFtZXJhdGUgPCAwKQotCQkJCWZyYW1lcmF0ZSA9IDM7Ci0JCQlSRVNUUklDVF9UT19SQU5HRShmcmFtZXJhdGUsIDAsIDUpOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0laRV82NDB4NDgwOgotCQkJY2FudmFzWCA9IDY0MDsKLQkJCWNhbnZhc1kgPSA0ODA7Ci0JCQlmcmFtZXJhdGUgPSAwOwkvKiBTbG93ZXN0LCBhbmQgbWF5YmUgZXZlbiB0aGF0IGlzIHRvbyBmYXN0ICovCi0JCQlicmVhazsKLQkJfQotCQlicmVhazsKLQljYXNlIElCTUNBTV9NT0RFTF80OgotCQlSRVNUUklDVF9UT19SQU5HRShsaWdodGluZywgMCwgMik7Ci0JCXN3aXRjaCAoc2l6ZSkgewotCQljYXNlIFNJWkVfMTI4eDk2OgotCQkJY2FudmFzWCA9IDEyODsKLQkJCWNhbnZhc1kgPSA5NjsKLQkJCWJyZWFrOwotCQljYXNlIFNJWkVfMTYweDEyMDoKLQkJCWNhbnZhc1ggPSAxNjA7Ci0JCQljYW52YXNZID0gMTIwOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlkZXZfaW5mbygmZGV2LT5kZXYsICJJQk0gTmV0Q2FtZXJhOiB1c2luZyAxNzZ4MTQ0XG4iKTsKLQkJCXNpemUgPSBTSVpFXzE3NngxNDQ7Ci0JCQkvKiBObyBicmVhayBoZXJlICovCi0JCWNhc2UgU0laRV8xNzZ4MTQ0OgotCQkJY2FudmFzWCA9IDE3NjsKLQkJCWNhbnZhc1kgPSAxNDQ7Ci0JCQlicmVhazsKLQkJY2FzZSBTSVpFXzMyMHgyNDA6Ci0JCQljYW52YXNYID0gMzIwOwotCQkJY2FudmFzWSA9IDI0MDsKLQkJCWJyZWFrOwotCQljYXNlIFNJWkVfMzUyeDI4ODoKLQkJCWNhbnZhc1ggPSAzNTI7Ci0JCQljYW52YXNZID0gMjg4OwotCQkJYnJlYWs7Ci0JCX0KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZXJyKCJJQk0gY2FtZXJhOiBNb2RlbCAlZC4gbm90IHN1cHBvcnRlZCEiLCBtb2RlbCk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCXV2ZCA9IHVzYnZpZGVvX0FsbG9jYXRlRGV2aWNlKGNhbXMpOwotCWlmICh1dmQgIT0gTlVMTCkgewotCQkvKiBIZXJlIHV2ZCBpcyBhIGZ1bGx5IGFsbG9jYXRlZCB1dmQgb2JqZWN0ICovCi0JCXV2ZC0+ZmxhZ3MgPSBmbGFnczsKLQkJdXZkLT5kZWJ1ZyA9IGRlYnVnOwotCQl1dmQtPmRldiA9IGRldjsKLQkJdXZkLT5pZmFjZSA9IGlmbnVtOwotCQl1dmQtPmlmYWNlQWx0SW5hY3RpdmUgPSBpbmFjdEludGVyZmFjZTsKLQkJdXZkLT5pZmFjZUFsdEFjdGl2ZSA9IGFjdEludGVyZmFjZTsKLQkJdXZkLT52aWRlb19lbmRwID0gdmlkZW9fZXA7Ci0JCXV2ZC0+aXNvX3BhY2tldF9sZW4gPSBtYXhQUzsKLQkJdXZkLT5wYWxldHRlQml0cyA9IDFMIDw8IFZJREVPX1BBTEVUVEVfUkdCMjQ7Ci0JCXV2ZC0+ZGVmYXVsdFBhbGV0dGUgPSBWSURFT19QQUxFVFRFX1JHQjI0OwotCQl1dmQtPmNhbnZhcyA9IFZJREVPU0laRShjYW52YXNYLCBjYW52YXNZKTsKLQkJdXZkLT52aWRlb3NpemUgPSBpYm1jYW1fc2l6ZV90b192aWRlb3NpemUoc2l6ZSk7Ci0KLQkJLyogSW5pdGlhbGl6ZSBpYm1jYW0tc3BlY2lmaWMgZGF0YSAqLwotCQlhc3NlcnQoSUJNQ0FNX1QodXZkKSAhPSBOVUxMKTsKLQkJSUJNQ0FNX1QodXZkKS0+Y2FtZXJhX21vZGVsID0gbW9kZWw7Ci0JCUlCTUNBTV9UKHV2ZCktPmluaXRpYWxpemVkID0gMDsKLQotCQlpYm1jYW1fY29uZmlndXJlX3ZpZGVvKHV2ZCk7Ci0KLQkJaSA9IHVzYnZpZGVvX1JlZ2lzdGVyVmlkZW9EZXZpY2UodXZkKTsKLQkJaWYgKGkgIT0gMCkgewotCQkJZXJyKCJ1c2J2aWRlb19SZWdpc3RlclZpZGVvRGV2aWNlKCkgZmFpbGVkLiIpOwotCQkJdXZkID0gTlVMTDsKLQkJfQotCX0KLQl1c2Jfc2V0X2ludGZkYXRhIChpbnRmLCB1dmQpOwotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZVtdID0gewotCXsgVVNCX0RFVklDRV9WRVIoSUJNQ0FNX1ZFTkRPUl9JRCwgSUJNQ0FNX1BST0RVQ1RfSUQsIDB4MDAwMiwgMHgwMDAyKSB9LAkvKiBNb2RlbCAxICovCi0JeyBVU0JfREVWSUNFX1ZFUihJQk1DQU1fVkVORE9SX0lELCBJQk1DQU1fUFJPRFVDVF9JRCwgMHgwMzBhLCAweDAzMGEpIH0sCS8qIE1vZGVsIDIgKi8KLQl7IFVTQl9ERVZJQ0VfVkVSKElCTUNBTV9WRU5ET1JfSUQsIElCTUNBTV9QUk9EVUNUX0lELCAweDAzMDEsIDB4MDMwMSkgfSwJLyogTW9kZWwgMyAqLwotCXsgVVNCX0RFVklDRV9WRVIoSUJNQ0FNX1ZFTkRPUl9JRCwgTkVUQ0FNX1BST0RVQ1RfSUQsIDB4MDMwYSwgMHgwMzBhKSB9LAkvKiBNb2RlbCA0ICovCi0JeyBVU0JfREVWSUNFX1ZFUihJQk1DQU1fVkVORE9SX0lELCBWRU9fODAwQ19QUk9EVUNUX0lELCAweDAzMGEsIDB4MDMwYSkgfSwJLyogTW9kZWwgMiAqLwotCXsgVVNCX0RFVklDRV9WRVIoSUJNQ0FNX1ZFTkRPUl9JRCwgVkVPXzgwMERfUFJPRFVDVF9JRCwgMHgwMzBhLCAweDAzMGEpIH0sCS8qIE1vZGVsIDQgKi8KLQl7IH0gIC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCi19OwotCi0vKgotICogaWJtY2FtX2luaXQoKQotICoKLSAqIFRoaXMgY29kZSBpcyBydW4gdG8gaW5pdGlhbGl6ZSB0aGUgZHJpdmVyLgotICoKLSAqIEhpc3Rvcnk6Ci0gKiAxLzI3LzAwICBSZXdvcmtlZCB0byB1c2Ugc3RhdGljYWxseSBhbGxvY2F0ZWQgaWJtY2FtIHN0cnVjdHVyZXMuCi0gKiAyMS8xMC8wMCBDb21wbGV0ZWx5IHJlZGVzaWduZWQgdG8gdXNlIHVzYnZpZGVvIHNlcnZpY2VzLgotICovCi1zdGF0aWMgaW50IF9faW5pdCBpYm1jYW1faW5pdCh2b2lkKQotewotCXN0cnVjdCB1c2J2aWRlb19jYiBjYlRibDsKLQltZW1zZXQoJmNiVGJsLCAwLCBzaXplb2YoY2JUYmwpKTsKLQljYlRibC5wcm9iZSA9IGlibWNhbV9wcm9iZTsKLQljYlRibC5zZXR1cE9uT3BlbiA9IGlibWNhbV9zZXR1cF9vbl9vcGVuOwotCWNiVGJsLnZpZGVvU3RhcnQgPSBpYm1jYW1fdmlkZW9fc3RhcnQ7Ci0JY2JUYmwudmlkZW9TdG9wID0gaWJtY2FtX3ZpZGVvX3N0b3A7Ci0JY2JUYmwucHJvY2Vzc0RhdGEgPSBpYm1jYW1fUHJvY2Vzc0lzb2NEYXRhOwotCWNiVGJsLnBvc3RQcm9jZXNzID0gdXNidmlkZW9fRGVpbnRlcmxhY2VGcmFtZTsKLQljYlRibC5hZGp1c3RQaWN0dXJlID0gaWJtY2FtX2FkanVzdF9waWN0dXJlOwotCWNiVGJsLmdldEZQUyA9IGlibWNhbV9jYWxjdWxhdGVfZnBzOwotCXJldHVybiB1c2J2aWRlb19yZWdpc3RlcigKLQkJJmNhbXMsCi0JCU1BWF9JQk1DQU0sCi0JCXNpemVvZihpYm1jYW1fdCksCi0JCSJpYm1jYW0iLAotCQkmY2JUYmwsCi0JCVRISVNfTU9EVUxFLAotCQlpZF90YWJsZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBpYm1jYW1fY2xlYW51cCh2b2lkKQotewotCXVzYnZpZGVvX0RlcmVnaXN0ZXIoJmNhbXMpOwotfQotCi1NT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgaWRfdGFibGUpOwotCi1tb2R1bGVfaW5pdChpYm1jYW1faW5pdCk7Ci1tb2R1bGVfZXhpdChpYm1jYW1fY2xlYW51cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL2tvbmljYXdjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL2tvbmljYXdjLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2MmUxZDEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby9rb25pY2F3Yy5jCisrKyAvZGV2L251bGwKQEAgLTEsOTkyICswLDAgQEAKLS8qCi0gKiBrb25pY2F3Yy5jIC0ga29uaWNhIHdlYmNhbSBkcml2ZXIKLSAqCi0gKiBBdXRob3I6IFNpbW9uIEV2YW5zIDxzcHNlQHNlY3JldC5vcmcudWs+Ci0gKgotICogQ29weXJpZ2h0IChDKSAyMDAyIFNpbW9uIEV2YW5zCi0gKgotICogTGljZW5jZTogR1BMCi0gKgotICogRHJpdmVyIGZvciBVU0Igd2ViY2FtcyBiYXNlZCBvbiBLb25pY2EgY2hpcHNldC4gVGhpcwotICogY2hpcHNldCBpcyB1c2VkIGluIEludGVsIFlDNzYgY2FtZXJhLgotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3VzYi9pbnB1dC5oPgotI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgotCi0jaW5jbHVkZSAidXNidmlkZW8uaCIKLQotI2RlZmluZSBNQVhfQlJJR0hUTkVTUwkxMDgKLSNkZWZpbmUgTUFYX0NPTlRSQVNUCTEwOAotI2RlZmluZSBNQVhfU0FUVVJBVElPTgkxMDgKLSNkZWZpbmUgTUFYX1NIQVJQTkVTUwkxMDgKLSNkZWZpbmUgTUFYX1dISVRFQkFMCTM3MgotI2RlZmluZSBNQVhfU1BFRUQJNgotCi0KLSNkZWZpbmUgTUFYX0NBTUVSQVMJMQotCi0jZGVmaW5lIERSSVZFUl9WRVJTSU9OCSJ2MS40IgotI2RlZmluZSBEUklWRVJfREVTQwkiS29uaWNhIFdlYmNhbSBkcml2ZXIiCi0KLWVudW0gY3RybF9yZXEgewotCVNldFdoaXRlYmFsCT0gMHgwMSwKLQlTZXRCcmlnaHRuZXNzCT0gMHgwMiwKLQlTZXRTaGFycG5lc3MJPSAweDAzLAotCVNldENvbnRyYXN0CT0gMHgwNCwKLQlTZXRTYXR1cmF0aW9uCT0gMHgwNSwKLX07Ci0KLQotZW51bSBmcmFtZV9zaXplcyB7Ci0JU0laRV8xNjBYMTIwCT0gMCwKLQlTSVpFXzE2MFgxMzYJPSAxLAotCVNJWkVfMTc2WDE0NAk9IDIsCi0JU0laRV8zMjBYMjQwCT0gMywKLQotfTsKLQotI2RlZmluZSBNQVhfRlJBTUVfU0laRQlTSVpFXzMyMFgyNDAKLQotc3RhdGljIHN0cnVjdCB1c2J2aWRlbyAqY2FtczsKLQotI2lmZGVmIENPTkZJR19VU0JfREVCVUcKLXN0YXRpYyBpbnQgZGVidWc7Ci0jZGVmaW5lIERFQlVHKG4sIGZvcm1hdCwgYXJnLi4uKSBcCi0JaWYgKG4gPD0gZGVidWcpIHsJIFwKLQkJcHJpbnRrKEtFUk5fREVCVUcgX19GSUxFX18gIjolcygpOiAiIGZvcm1hdCAiXG4iLCBfX2Z1bmNfXyAsICMjIGFyZyk7IFwKLQl9Ci0jZWxzZQotI2RlZmluZSBERUJVRyhuLCBhcmcuLi4pCi1zdGF0aWMgY29uc3QgaW50IGRlYnVnOwotI2VuZGlmCi0KLQotLyogU29tZSBkZWZhdWx0IHZhbHVlcyBmb3IgaW5pdGlhbCBjYW1lcmEgc2V0dGluZ3MsCi0gICBjYW4gYmUgc2V0IGJ5IG1vZHByb2JlICovCi0KLXN0YXRpYyBpbnQgc2l6ZTsKLXN0YXRpYyBpbnQgc3BlZWQgPSA2OwkJLyogU3BlZWQgKGZwcykgMCAoc2xvd2VzdCkgdG8gNiAoZmFzdGVzdCkgKi8KLXN0YXRpYyBpbnQgYnJpZ2h0bmVzcyA9CU1BWF9CUklHSFRORVNTLzI7Ci1zdGF0aWMgaW50IGNvbnRyYXN0ID0JTUFYX0NPTlRSQVNULzI7Ci1zdGF0aWMgaW50IHNhdHVyYXRpb24gPQlNQVhfU0FUVVJBVElPTi8yOwotc3RhdGljIGludCBzaGFycG5lc3MgPQlNQVhfU0hBUlBORVNTLzI7Ci1zdGF0aWMgaW50IHdoaXRlYmFsID0JMyooTUFYX1dISVRFQkFMLzQpOwotCi1zdGF0aWMgY29uc3QgaW50IHNwZF90b19pZmFjZVtdID0geyAxLCAwLCAzLCAyLCA0LCA1LCA2IH07Ci0KLS8qIFRoZXNlIEZQUyBzcGVlZHMgYXJlIGZyb20gdGhlIHdpbmRvd3MgY29uZmlnIGJveC4gVGhleSBhcmUKLSAqIGluZGV4ZWQgb24gc2l6ZSAoMC0yKSBhbmQgc3BlZWQgKDAtNikuIERpdmlkZSBieSAzIHRvIGdldCB0aGUKLSAqIHJlYWwgZnBzLgotICovCi0KLXN0YXRpYyBjb25zdCBpbnQgc3BkX3RvX2Zwc1tdWzddID0geyB7IDI0LCA0MCwgNDgsIDYwLCA3MiwgODAsIDEwMCB9LAotCQkJICAgICAgIHsgMjQsIDQwLCA0OCwgNjAsIDcyLCA4MCwgMTAwIH0sCi0JCQkgICAgICAgeyAxOCwgMzAsIDM2LCA0NSwgNTQsIDYwLCA3NSAgfSwKLQkJCSAgICAgICB7IDYsICAxMCwgMTIsIDE1LCAxOCwgMjEsIDI1ICB9IH07Ci0KLXN0cnVjdCBjYW1fc2l6ZSB7Ci0JdTE2CXdpZHRoOwotCXUxNgloZWlnaHQ7Ci0JdTgJY21kOwotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjYW1fc2l6ZSBjYW1lcmFfc2l6ZXNbXSA9IHsgeyAxNjAsIDEyMCwgMHg3IH0sCi0JCQkJCSAgeyAxNjAsIDEzNiwgMHhhIH0sCi0JCQkJCSAgeyAxNzYsIDE0NCwgMHg0IH0sCi0JCQkJCSAgeyAzMjAsIDI0MCwgMHg1IH0gfTsKLQotc3RydWN0IGtvbmljYXdjIHsKLQl1OCBicmlnaHRuZXNzOwkJLyogY2FtZXJhIHVzZXMgMCAtIDksIHgxMSBmb3IgcmVhbCB2YWx1ZSAqLwotCXU4IGNvbnRyYXN0OwkJLyogYXMgYWJvdmUgKi8KLQl1OCBzYXR1cmF0aW9uOwkJLyogYXMgYWJvdmUgKi8KLQl1OCBzaGFycG5lc3M7CQkvKiBhcyBhYm92ZSAqLwotCXU4IHdoaXRlX2JhbDsJCS8qIDAgLSAzMywgeDExIGZvciByZWFsIHZhbHVlICovCi0JdTggc3BlZWQ7CQkvKiBTdG9yZWQgYXMgMCAtIDYsIHVzZWQgYXMgaW5kZXggaW4gc3BkX3RvXyogKGFib3ZlKSAqLwotCXU4IHNpemU7CQkvKiBGcmFtZSBTaXplICovCi0JaW50IGhlaWdodDsKLQlpbnQgd2lkdGg7Ci0Jc3RydWN0IHVyYiAqc3RzX3VyYltVU0JWSURFT19OVU1TQlVGXTsKLQl1OCBzdHNfYnVmW1VTQlZJREVPX05VTVNCVUZdW0ZSQU1FU19QRVJfREVTQ107Ci0Jc3RydWN0IHVyYiAqbGFzdF9kYXRhX3VyYjsKLQlpbnQgbGFzdGZyYW1lOwotCWludCBjdXJfZnJhbWVfc2l6ZTsJLyogbnVtYmVyIG9mIGJ5dGVzIGluIGN1cnJlbnQgZnJhbWUgc2l6ZSAqLwotCWludCBtYXhsaW5lOwkJLyogbnVtYmVyIG9mIGxpbmVzIHBlciBmcmFtZSAqLwotCWludCB5cGxhbmVzejsJCS8qIE51bWJlciBvZiBieXRlcyBpbiB0aGUgWSBwbGFuZSAqLwotCXVuc2lnbmVkIGludCBidXR0b25zdHM6MTsKLSNpZmRlZiBDT05GSUdfSU5QVVQKLQlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dDsKLQljaGFyIGlucHV0X3BoeXNuYW1lWzY0XTsKLSNlbmRpZgotfTsKLQotCi0jZGVmaW5lIGtvbmljYXdjX3NldF9taXNjKHV2ZCwgcmVxLCB2YWx1ZSwgaW5kZXgpCQlrb25pY2F3Y19jdHJsX21zZyh1dmQsIFVTQl9ESVJfT1VULCByZXEsIHZhbHVlLCBpbmRleCwgTlVMTCwgMCkKLSNkZWZpbmUga29uaWNhd2NfZ2V0X21pc2ModXZkLCByZXEsIHZhbHVlLCBpbmRleCwgYnVmLCBzeikJa29uaWNhd2NfY3RybF9tc2codXZkLCBVU0JfRElSX0lOLCByZXEsIHZhbHVlLCBpbmRleCwgYnVmLCBzeikKLSNkZWZpbmUga29uaWNhd2Nfc2V0X3ZhbHVlKHV2ZCwgdmFsdWUsIGluZGV4KQkJCWtvbmljYXdjX2N0cmxfbXNnKHV2ZCwgVVNCX0RJUl9PVVQsIDIsIHZhbHVlLCBpbmRleCwgTlVMTCwgMCkKLQotCi1zdGF0aWMgaW50IGtvbmljYXdjX2N0cmxfbXNnKHN0cnVjdCB1dmQgKnV2ZCwgdTggZGlyLCB1OCByZXF1ZXN0LCB1MTYgdmFsdWUsIHUxNiBpbmRleCwgdm9pZCAqYnVmLCBpbnQgbGVuKQotewotCWludCByZXR2YWwgPSB1c2JfY29udHJvbF9tc2codXZkLT5kZXYsCi0JCWRpciA/IHVzYl9yY3ZjdHJscGlwZSh1dmQtPmRldiwgMCkgOiB1c2Jfc25kY3RybHBpcGUodXZkLT5kZXYsIDApLAotCQkgICAgcmVxdWVzdCwgMHg0MCB8IGRpciwgdmFsdWUsIGluZGV4LCBidWYsIGxlbiwgMTAwMCk7Ci0JcmV0dXJuIHJldHZhbCA8IDAgPyByZXR2YWwgOiAwOwotfQotCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBrb25pY2F3Y19jYW1lcmFfb24oc3RydWN0IHV2ZCAqdXZkKQotewotCURFQlVHKDAsICJjYW1lcmEgb24iKTsKLQlrb25pY2F3Y19zZXRfbWlzYyh1dmQsIDB4MiwgMSwgMHgwYik7Ci19Ci0KLQotc3RhdGljIGlubGluZSB2b2lkIGtvbmljYXdjX2NhbWVyYV9vZmYoc3RydWN0IHV2ZCAqdXZkKQotewotCURFQlVHKDAsICJjYW1lcmEgb2ZmIik7Ci0Ja29uaWNhd2Nfc2V0X21pc2ModXZkLCAweDIsIDAsIDB4MGIpOwotfQotCi0KLXN0YXRpYyB2b2lkIGtvbmljYXdjX3NldF9jYW1lcmFfc2l6ZShzdHJ1Y3QgdXZkICp1dmQpCi17Ci0Jc3RydWN0IGtvbmljYXdjICpjYW0gPSAoc3RydWN0IGtvbmljYXdjICopdXZkLT51c2VyX2RhdGE7Ci0KLQlrb25pY2F3Y19zZXRfbWlzYyh1dmQsIDB4MiwgY2FtZXJhX3NpemVzW2NhbS0+c2l6ZV0uY21kLCAweDA4KTsKLQljYW0tPndpZHRoID0gY2FtZXJhX3NpemVzW2NhbS0+c2l6ZV0ud2lkdGg7Ci0JY2FtLT5oZWlnaHQgPSBjYW1lcmFfc2l6ZXNbY2FtLT5zaXplXS5oZWlnaHQ7Ci0JY2FtLT55cGxhbmVzeiA9IGNhbS0+aGVpZ2h0ICogY2FtLT53aWR0aDsKLQljYW0tPmN1cl9mcmFtZV9zaXplID0gKGNhbS0+eXBsYW5lc3ogKiAzKSAvIDI7Ci0JY2FtLT5tYXhsaW5lID0gY2FtLT55cGxhbmVzeiAvIDI1NjsKLQl1dmQtPnZpZGVvc2l6ZSA9IFZJREVPU0laRShjYW0tPndpZHRoLCBjYW0tPmhlaWdodCk7Ci19Ci0KLQotc3RhdGljIGludCBrb25pY2F3Y19zZXR1cF9vbl9vcGVuKHN0cnVjdCB1dmQgKnV2ZCkKLXsKLQlzdHJ1Y3Qga29uaWNhd2MgKmNhbSA9IChzdHJ1Y3Qga29uaWNhd2MgKil1dmQtPnVzZXJfZGF0YTsKLQotCURFQlVHKDEsICJzZXR0aW5nIGJyaWdodG5lc3MgdG8gJWQgKCVkKSIsIGNhbS0+YnJpZ2h0bmVzcywKLQkgICAgY2FtLT5icmlnaHRuZXNzICogMTEpOwotCWtvbmljYXdjX3NldF92YWx1ZSh1dmQsIGNhbS0+YnJpZ2h0bmVzcywgU2V0QnJpZ2h0bmVzcyk7Ci0JREVCVUcoMSwgInNldHRpbmcgd2hpdGUgYmFsYW5jZSB0byAlZCAoJWQpIiwgY2FtLT53aGl0ZV9iYWwsCi0JICAgIGNhbS0+d2hpdGVfYmFsICogMTEpOwotCWtvbmljYXdjX3NldF92YWx1ZSh1dmQsIGNhbS0+d2hpdGVfYmFsLCBTZXRXaGl0ZWJhbCk7Ci0JREVCVUcoMSwgInNldHRpbmcgY29udHJhc3QgdG8gJWQgKCVkKSIsIGNhbS0+Y29udHJhc3QsCi0JICAgIGNhbS0+Y29udHJhc3QgKiAxMSk7Ci0Ja29uaWNhd2Nfc2V0X3ZhbHVlKHV2ZCwgY2FtLT5jb250cmFzdCwgU2V0Q29udHJhc3QpOwotCURFQlVHKDEsICJzZXR0aW5nIHNhdHVyYXRpb24gdG8gJWQgKCVkKSIsIGNhbS0+c2F0dXJhdGlvbiwKLQkgICAgY2FtLT5zYXR1cmF0aW9uICogMTEpOwotCWtvbmljYXdjX3NldF92YWx1ZSh1dmQsIGNhbS0+c2F0dXJhdGlvbiwgU2V0U2F0dXJhdGlvbik7Ci0JREVCVUcoMSwgInNldHRpbmcgc2hhcnBuZXNzIHRvICVkICglZCkiLCBjYW0tPnNoYXJwbmVzcywKLQkgICAgY2FtLT5zaGFycG5lc3MgKiAxMSk7Ci0Ja29uaWNhd2Nfc2V0X3ZhbHVlKHV2ZCwgY2FtLT5zaGFycG5lc3MsIFNldFNoYXJwbmVzcyk7Ci0Ja29uaWNhd2Nfc2V0X2NhbWVyYV9zaXplKHV2ZCk7Ci0JY2FtLT5sYXN0ZnJhbWUgPSAtMjsKLQljYW0tPmJ1dHRvbnN0cyA9IDA7Ci0JcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIHZvaWQga29uaWNhd2NfYWRqdXN0X3BpY3R1cmUoc3RydWN0IHV2ZCAqdXZkKQotewotCXN0cnVjdCBrb25pY2F3YyAqY2FtID0gKHN0cnVjdCBrb25pY2F3YyAqKXV2ZC0+dXNlcl9kYXRhOwotCi0Ja29uaWNhd2NfY2FtZXJhX29mZih1dmQpOwotCURFQlVHKDEsICJuZXcgYnJpZ2h0bmVzczogJWQiLCB1dmQtPnZwaWMuYnJpZ2h0bmVzcyk7Ci0JdXZkLT52cGljLmJyaWdodG5lc3MgPSAodXZkLT52cGljLmJyaWdodG5lc3MgPiBNQVhfQlJJR0hUTkVTUykgPyBNQVhfQlJJR0hUTkVTUyA6IHV2ZC0+dnBpYy5icmlnaHRuZXNzOwotCWlmKGNhbS0+YnJpZ2h0bmVzcyAhPSB1dmQtPnZwaWMuYnJpZ2h0bmVzcyAvIDExKSB7Ci0JICAgY2FtLT5icmlnaHRuZXNzID0gdXZkLT52cGljLmJyaWdodG5lc3MgLyAxMTsKLQkgICBERUJVRygxLCAic2V0dGluZyBicmlnaHRuZXNzIHRvICVkICglZCkiLCBjYW0tPmJyaWdodG5lc3MsCi0JICAgICAgIGNhbS0+YnJpZ2h0bmVzcyAqIDExKTsKLQkgICBrb25pY2F3Y19zZXRfdmFsdWUodXZkLCBjYW0tPmJyaWdodG5lc3MsIFNldEJyaWdodG5lc3MpOwotCX0KLQotCURFQlVHKDEsICJuZXcgY29udHJhc3Q6ICVkIiwgdXZkLT52cGljLmNvbnRyYXN0KTsKLQl1dmQtPnZwaWMuY29udHJhc3QgPSAodXZkLT52cGljLmNvbnRyYXN0ID4gTUFYX0NPTlRSQVNUKSA/IE1BWF9DT05UUkFTVCA6IHV2ZC0+dnBpYy5jb250cmFzdDsKLQlpZihjYW0tPmNvbnRyYXN0ICE9IHV2ZC0+dnBpYy5jb250cmFzdCAvIDExKSB7Ci0JCWNhbS0+Y29udHJhc3QgPSB1dmQtPnZwaWMuY29udHJhc3QgLyAxMTsKLQkJREVCVUcoMSwgInNldHRpbmcgY29udHJhc3QgdG8gJWQgKCVkKSIsIGNhbS0+Y29udHJhc3QsCi0JCSAgICBjYW0tPmNvbnRyYXN0ICogMTEpOwotCQlrb25pY2F3Y19zZXRfdmFsdWUodXZkLCBjYW0tPmNvbnRyYXN0LCBTZXRDb250cmFzdCk7Ci0JfQotCWtvbmljYXdjX2NhbWVyYV9vbih1dmQpOwotfQotCi0jaWZkZWYgQ09ORklHX0lOUFVUCi0KLXN0YXRpYyB2b2lkIGtvbmljYXdjX3JlZ2lzdGVyX2lucHV0KHN0cnVjdCBrb25pY2F3YyAqY2FtLCBzdHJ1Y3QgdXNiX2RldmljZSAqZGV2KQotewotCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldjsKLQlpbnQgZXJyb3I7Ci0KLQl1c2JfbWFrZV9wYXRoKGRldiwgY2FtLT5pbnB1dF9waHlzbmFtZSwgc2l6ZW9mKGNhbS0+aW5wdXRfcGh5c25hbWUpKTsKLQlzdHJsY2F0KGNhbS0+aW5wdXRfcGh5c25hbWUsICIvaW5wdXQwIiwgc2l6ZW9mKGNhbS0+aW5wdXRfcGh5c25hbWUpKTsKLQotCWNhbS0+aW5wdXQgPSBpbnB1dF9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKLQlpZiAoIWlucHV0X2RldikgewotCQlkZXZfd2FybigmZGV2LT5kZXYsCi0JCQkgIk5vdCBlbm91Z2ggbWVtb3J5IGZvciBjYW1lcmEncyBpbnB1dCBkZXZpY2VcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JaW5wdXRfZGV2LT5uYW1lID0gIktvbmljYXdjIHNuYXBzaG90IGJ1dHRvbiI7Ci0JaW5wdXRfZGV2LT5waHlzID0gY2FtLT5pbnB1dF9waHlzbmFtZTsKLQl1c2JfdG9faW5wdXRfaWQoZGV2LCAmaW5wdXRfZGV2LT5pZCk7Ci0JaW5wdXRfZGV2LT5kZXYucGFyZW50ID0gJmRldi0+ZGV2OwotCi0JaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX0tFWSk7Ci0JaW5wdXRfZGV2LT5rZXliaXRbQklUX1dPUkQoS0VZX0NBTUVSQSldID0gQklUX01BU0soS0VZX0NBTUVSQSk7Ci0KLQllcnJvciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShjYW0tPmlucHV0KTsKLQlpZiAoZXJyb3IpIHsKLQkJZGV2X3dhcm4oJmRldi0+ZGV2LAotCQkJICJGYWlsZWQgdG8gcmVnaXN0ZXIgY2FtZXJhJ3MgaW5wdXQgZGV2aWNlLCBlcnI6ICVkXG4iLAotCQkJIGVycm9yKTsKLQkJaW5wdXRfZnJlZV9kZXZpY2UoY2FtLT5pbnB1dCk7Ci0JCWNhbS0+aW5wdXQgPSBOVUxMOwotCX0KLX0KLQotc3RhdGljIHZvaWQga29uaWNhd2NfdW5yZWdpc3Rlcl9pbnB1dChzdHJ1Y3Qga29uaWNhd2MgKmNhbSkKLXsKLQlpZiAoY2FtLT5pbnB1dCkgewotCQlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShjYW0tPmlucHV0KTsKLQkJY2FtLT5pbnB1dCA9IE5VTEw7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBrb25pY2F3Y19yZXBvcnRfYnV0dG9uc3RhdChzdHJ1Y3Qga29uaWNhd2MgKmNhbSkKLXsKLQlpZiAoY2FtLT5pbnB1dCkgewotCQlpbnB1dF9yZXBvcnRfa2V5KGNhbS0+aW5wdXQsIEtFWV9DQU1FUkEsIGNhbS0+YnV0dG9uc3RzKTsKLQkJaW5wdXRfc3luYyhjYW0tPmlucHV0KTsKLQl9Ci19Ci0KLSNlbHNlCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBrb25pY2F3Y19yZWdpc3Rlcl9pbnB1dChzdHJ1Y3Qga29uaWNhd2MgKmNhbSwgc3RydWN0IHVzYl9kZXZpY2UgKmRldikgeyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQga29uaWNhd2NfdW5yZWdpc3Rlcl9pbnB1dChzdHJ1Y3Qga29uaWNhd2MgKmNhbSkgeyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQga29uaWNhd2NfcmVwb3J0X2J1dHRvbnN0YXQoc3RydWN0IGtvbmljYXdjICpjYW0pIHsgfQotCi0jZW5kaWYgLyogQ09ORklHX0lOUFVUICovCi0KLXN0YXRpYyBpbnQga29uaWNhd2NfY29tcHJlc3NfaXNvKHN0cnVjdCB1dmQgKnV2ZCwgc3RydWN0IHVyYiAqZGF0YXVyYiwgc3RydWN0IHVyYiAqc3RzdXJiKQotewotCWNoYXIgKmNkYXRhOwotCWludCBpLCB0b3RsZW4gPSAwOwotCXVuc2lnbmVkIGNoYXIgKnN0YXR1cyA9IHN0c3VyYi0+dHJhbnNmZXJfYnVmZmVyOwotCWludCBrZWVwID0gMCwgZGlzY2FyZCA9IDAsIGJhZCA9IDA7Ci0Jc3RydWN0IGtvbmljYXdjICpjYW0gPSAoc3RydWN0IGtvbmljYXdjICopdXZkLT51c2VyX2RhdGE7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZGF0YXVyYi0+bnVtYmVyX29mX3BhY2tldHM7IGkrKykgewotCQlpbnQgYnV0dG9uID0gY2FtLT5idXR0b25zdHM7Ci0JCXVuc2lnbmVkIGNoYXIgc3RzOwotCQlpbnQgbiA9IGRhdGF1cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGg7Ci0JCWludCBzdCA9IGRhdGF1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1czsKLQkJY2RhdGEgPSBkYXRhdXJiLT50cmFuc2Zlcl9idWZmZXIgKwotCQkJZGF0YXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ub2Zmc2V0OwotCi0JCS8qIERldGVjdCBhbmQgaWdub3JlIGVycm9yZWQgcGFja2V0cyAqLwotCQlpZiAoc3QgPCAwKSB7Ci0JCQlERUJVRygxLCAiRGF0YSBlcnJvcjogcGFja2V0PSVkLiBsZW49JWQuIHN0YXR1cz0lZC4iLAotCQkJICAgICAgaSwgbiwgc3QpOwotCQkJdXZkLT5zdGF0cy5pc29fZXJyX2NvdW50Kys7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCS8qIERldGVjdCBhbmQgaWdub3JlIGVtcHR5IHBhY2tldHMgKi8KLQkJaWYgKG4gPD0gMCkgewotCQkJdXZkLT5zdGF0cy5pc29fc2tpcF9jb3VudCsrOwotCQkJY29udGludWU7Ci0JCX0KLQotCQkvKiBTZWUgd2hhdCB0aGUgc3RhdHVzIGRhdGEgc2FpZCBhYm91dCB0aGUgcGFja2V0ICovCi0JCXN0cyA9ICooc3RhdHVzK3N0c3VyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ub2Zmc2V0KTsKLQotCQkvKiBzdHM6IDB4ODAtMHhmZjogZnJhbWUgc3RhcnQgd2l0aCBmcmFtZSBudW1iZXIgKGllIDAtN2YpCi0JCSAqIG90aGVyd2lzZToKLQkJICogYml0IDAgMDoga2VlcCBwYWNrZXQKLQkJICoJIDE6IGRyb3AgcGFja2V0IChwYWRkaW5nIGRhdGEpCi0JCSAqCi0JCSAqIGJpdCA0IDAgYnV0dG9uIG5vdCBjbGlja2VkCi0JCSAqICAgICAgIDEgYnV0dG9uIGNsaWNrZWQKLQkJICogYnV0dG9uIGlzIHVzZWQgdG8gYHRha2UgYSBwaWN0dXJlJyAoaW4gc29mdHdhcmUpCi0JCSAqLwotCi0JCWlmKHN0cyA8IDB4ODApIHsKLQkJCWJ1dHRvbiA9ICEhKHN0cyAmIDB4NDApOwotCQkJc3RzICY9IH4weDQwOwotCQl9Ci0KLQkJLyogd29yayBvdXQgdGhlIGJ1dHRvbiBzdGF0dXMsIGJ1dCBkb24ndCBkbwotCQkgICBhbnl0aGluZyB3aXRoIGl0IGZvciBub3cgKi8KLQotCQlpZihidXR0b24gIT0gY2FtLT5idXR0b25zdHMpIHsKLQkJCURFQlVHKDIsICJidXR0b246ICVzY2xpY2tlZCIsIGJ1dHRvbiA/ICIiIDogInVuIik7Ci0JCQljYW0tPmJ1dHRvbnN0cyA9IGJ1dHRvbjsKLQkJCWtvbmljYXdjX3JlcG9ydF9idXR0b25zdGF0KGNhbSk7Ci0JCX0KLQotCQlpZihzdHMgPT0gMHgwMSkgeyAvKiBkcm9wIGZyYW1lICovCi0JCQlkaXNjYXJkKys7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCWlmKChzdHMgPiAweDAxKSAmJiAoc3RzIDwgMHg4MCkpIHsKLQkJCWRldl9pbmZvKCZ1dmQtPmRldi0+ZGV2LCAidW5rbm93biBzdGF0dXMgJTIuMnhcbiIsCi0JCQkJIHN0cyk7Ci0JCQliYWQrKzsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmKCFzdHMgJiYgY2FtLT5sYXN0ZnJhbWUgPT0gLTIpIHsKLQkJCURFQlVHKDIsICJkcm9wcGluZyBmcmFtZSBsb29raW5nIGZvciBpbWFnZSBzdGFydCIpOwotCQkJY29udGludWU7Ci0JCX0KLQotCQlrZWVwKys7Ci0JCWlmKHN0cyAmIDB4ODApIHsgLyogZnJhbWUgc3RhcnQgKi8KLQkJCXVuc2lnbmVkIGNoYXIgbWFya2VyW10gPSB7IDAsIDB4ZmYsIDAsIDB4MDAgfTsKLQotCQkJaWYoY2FtLT5sYXN0ZnJhbWUgPT0gLTIpIHsKLQkJCQlERUJVRygyLCAiZm91bmQgaW5pdGlhbCBpbWFnZSIpOwotCQkJCWNhbS0+bGFzdGZyYW1lID0gLTE7Ci0JCQl9Ci0KLQkJCW1hcmtlclszXSA9IHN0cyAmIDB4N0Y7Ci0JCQlSaW5nUXVldWVfRW5xdWV1ZSgmdXZkLT5kcCwgbWFya2VyLCA0KTsKLQkJCXRvdGxlbiArPSA0OwotCQl9Ci0KLQkJdG90bGVuICs9IG47CS8qIExpdHRsZSBsb2NhbCBhY2NvdW50aW5nICovCi0JCVJpbmdRdWV1ZV9FbnF1ZXVlKCZ1dmQtPmRwLCBjZGF0YSwgbik7Ci0JfQotCURFQlVHKDgsICJmaW5pc2hlZDoga2VlcCA9ICVkIGRpc2NhcmQgPSAlZCBiYWQgPSAlZCBhZGRlZCAlZCBieXRlcyIsCi0JCSAgICBrZWVwLCBkaXNjYXJkLCBiYWQsIHRvdGxlbik7Ci0JcmV0dXJuIHRvdGxlbjsKLX0KLQotCi1zdGF0aWMgdm9pZCByZXN1Ym1pdF91cmIoc3RydWN0IHV2ZCAqdXZkLCBzdHJ1Y3QgdXJiICp1cmIpCi17Ci0JaW50IGksIHJldDsKLQlmb3IgKGkgPSAwOyBpIDwgRlJBTUVTX1BFUl9ERVNDOyBpKyspIHsKLQkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXMgPSAwOwotCX0KLQl1cmItPmRldiA9IHV2ZC0+ZGV2OwotCXVyYi0+c3RhdHVzID0gMDsKLQlyZXQgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwotCURFQlVHKDMsICJzdWJtaXR0aW5nIHVyYiBvZiBsZW5ndGggJWQiLCB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpOwotCWlmKHJldCkKLQkJZXJyKCJ1c2Jfc3VibWl0X3VyYiBlcnJvciAoJWQpIiwgcmV0KTsKLQotfQotCi0KLXN0YXRpYyB2b2lkIGtvbmljYXdjX2lzb2NfaXJxKHN0cnVjdCB1cmIgKnVyYikKLXsKLQlzdHJ1Y3QgdXZkICp1dmQgPSB1cmItPmNvbnRleHQ7Ci0Jc3RydWN0IGtvbmljYXdjICpjYW0gPSAoc3RydWN0IGtvbmljYXdjICopdXZkLT51c2VyX2RhdGE7Ci0KLQkvKiBXZSBkb24ndCB3YW50IHRvIGRvIGFueXRoaW5nIGlmIHdlIGFyZSBhYm91dCB0byBiZSByZW1vdmVkISAqLwotCWlmICghQ0FNRVJBX0lTX09QRVJBVElPTkFMKHV2ZCkpCi0JCXJldHVybjsKLQotCWlmICghdXZkLT5zdHJlYW1pbmcpIHsKLQkJREVCVUcoMSwgIk5vdCBzdHJlYW1pbmcsIGJ1dCBpbnRlcnJ1cHQhIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlERUJVRygzLCAiZ290IGZyYW1lICVkIGxlbiA9ICVkIGJ1ZmxlbiA9JWQiLCB1cmItPnN0YXJ0X2ZyYW1lLCB1cmItPmFjdHVhbF9sZW5ndGgsIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCk7Ci0KLQl1dmQtPnN0YXRzLnVyYl9jb3VudCsrOwotCi0JaWYgKHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA+IDMyKSB7Ci0JCWNhbS0+bGFzdF9kYXRhX3VyYiA9IHVyYjsKLQkJcmV0dXJuOwotCX0KLQkvKiBDb3B5IHRoZSBkYXRhIHJlY2VpdmVkIGludG8gcmluZyBxdWV1ZSAqLwotCWlmKGNhbS0+bGFzdF9kYXRhX3VyYikgewotCQlpbnQgbGVuID0gMDsKLQkJaWYodXJiLT5zdGFydF9mcmFtZSAhPSBjYW0tPmxhc3RfZGF0YV91cmItPnN0YXJ0X2ZyYW1lKQotCQkJZXJyKCJMb3N0IHN5bmMgb24gZnJhbWVzIik7Ci0JCWVsc2UgaWYgKCF1cmItPnN0YXR1cyAmJiAhY2FtLT5sYXN0X2RhdGFfdXJiLT5zdGF0dXMpCi0JCQlsZW4gPSBrb25pY2F3Y19jb21wcmVzc19pc28odXZkLCBjYW0tPmxhc3RfZGF0YV91cmIsIHVyYik7Ci0KLQkJcmVzdWJtaXRfdXJiKHV2ZCwgY2FtLT5sYXN0X2RhdGFfdXJiKTsKLQkJcmVzdWJtaXRfdXJiKHV2ZCwgdXJiKTsKLQkJY2FtLT5sYXN0X2RhdGFfdXJiID0gTlVMTDsKLQkJdXZkLT5zdGF0cy51cmJfbGVuZ3RoID0gbGVuOwotCQl1dmQtPnN0YXRzLmRhdGFfY291bnQgKz0gbGVuOwotCQlpZihsZW4pCi0JCQlSaW5nUXVldWVfV2FrZVVwSW50ZXJydXB0aWJsZSgmdXZkLT5kcCk7Ci0JCXJldHVybjsKLQl9Ci0JcmV0dXJuOwotfQotCi0KLXN0YXRpYyBpbnQga29uaWNhd2Nfc3RhcnRfZGF0YShzdHJ1Y3QgdXZkICp1dmQpCi17Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IHV2ZC0+ZGV2OwotCWludCBpLCBlcnJGbGFnOwotCXN0cnVjdCBrb25pY2F3YyAqY2FtID0gKHN0cnVjdCBrb25pY2F3YyAqKXV2ZC0+dXNlcl9kYXRhOwotCWludCBwa3RzejsKLQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZjsKLQlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppbnRlcmZhY2UgPSBOVUxMOwotCi0JaW50ZiA9IHVzYl9pZm51bV90b19pZihkZXYsIHV2ZC0+aWZhY2UpOwotCWlmIChpbnRmKQotCQlpbnRlcmZhY2UgPSB1c2JfYWx0bnVtX3RvX2FsdHNldHRpbmcoaW50ZiwKLQkJCQlzcGRfdG9faWZhY2VbY2FtLT5zcGVlZF0pOwotCWlmICghaW50ZXJmYWNlKQotCQlyZXR1cm4gLUVOWElPOwotCXBrdHN6ID0gbGUxNl90b19jcHUoaW50ZXJmYWNlLT5lbmRwb2ludFsxXS5kZXNjLndNYXhQYWNrZXRTaXplKTsKLQlERUJVRygxLCAicGt0c3ogPSAlZCIsIHBrdHN6KTsKLQlpZiAoIUNBTUVSQV9JU19PUEVSQVRJT05BTCh1dmQpKSB7Ci0JCWVycigiQ2FtZXJhIGlzIG5vdCBvcGVyYXRpb25hbCIpOwotCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0JdXZkLT5jdXJmcmFtZSA9IC0xOwotCWtvbmljYXdjX2NhbWVyYV9vbih1dmQpOwotCS8qIEFsdGVybmF0ZSBpbnRlcmZhY2UgMSBpcyBpcyB0aGUgYmlnZ2VzdCBmcmFtZSBzaXplICovCi0JaSA9IHVzYl9zZXRfaW50ZXJmYWNlKGRldiwgdXZkLT5pZmFjZSwgdXZkLT5pZmFjZUFsdEFjdGl2ZSk7Ci0JaWYgKGkgPCAwKSB7Ci0JCWVycigidXNiX3NldF9pbnRlcmZhY2UgZXJyb3IiKTsKLQkJdXZkLT5sYXN0X2Vycm9yID0gaTsKLQkJcmV0dXJuIC1FQlVTWTsKLQl9Ci0KLQkvKiBXZSBkb3VibGUgYnVmZmVyIHRoZSBJc28gbGlzdHMgKi8KLQlmb3IgKGk9MDsgaSA8IFVTQlZJREVPX05VTVNCVUY7IGkrKykgewotCQlpbnQgaiwgazsKLQkJc3RydWN0IHVyYiAqdXJiID0gdXZkLT5zYnVmW2ldLnVyYjsKLQkJdXJiLT5kZXYgPSBkZXY7Ci0JCXVyYi0+Y29udGV4dCA9IHV2ZDsKLQkJdXJiLT5waXBlID0gdXNiX3Jjdmlzb2NwaXBlKGRldiwgdXZkLT52aWRlb19lbmRwKTsKLQkJdXJiLT5pbnRlcnZhbCA9IDE7Ci0JCXVyYi0+dHJhbnNmZXJfZmxhZ3MgPSBVUkJfSVNPX0FTQVA7Ci0JCXVyYi0+dHJhbnNmZXJfYnVmZmVyID0gdXZkLT5zYnVmW2ldLmRhdGE7Ci0JCXVyYi0+Y29tcGxldGUgPSBrb25pY2F3Y19pc29jX2lycTsKLQkJdXJiLT5udW1iZXJfb2ZfcGFja2V0cyA9IEZSQU1FU19QRVJfREVTQzsKLQkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gcGt0c3ogKiBGUkFNRVNfUEVSX0RFU0M7Ci0JCWZvciAoaj1rPTA7IGogPCBGUkFNRVNfUEVSX0RFU0M7IGorKywgayArPSBwa3RzeikgewotCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tqXS5vZmZzZXQgPSBrOwotCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tqXS5sZW5ndGggPSBwa3RzejsKLQkJfQotCi0JCXVyYiA9IGNhbS0+c3RzX3VyYltpXTsKLQkJdXJiLT5kZXYgPSBkZXY7Ci0JCXVyYi0+Y29udGV4dCA9IHV2ZDsKLQkJdXJiLT5waXBlID0gdXNiX3Jjdmlzb2NwaXBlKGRldiwgdXZkLT52aWRlb19lbmRwLTEpOwotCQl1cmItPmludGVydmFsID0gMTsKLQkJdXJiLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9JU09fQVNBUDsKLQkJdXJiLT50cmFuc2Zlcl9idWZmZXIgPSBjYW0tPnN0c19idWZbaV07Ci0JCXVyYi0+Y29tcGxldGUgPSBrb25pY2F3Y19pc29jX2lycTsKLQkJdXJiLT5udW1iZXJfb2ZfcGFja2V0cyA9IEZSQU1FU19QRVJfREVTQzsKLQkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gRlJBTUVTX1BFUl9ERVNDOwotCQlmb3IgKGo9MDsgaiA8IEZSQU1FU19QRVJfREVTQzsgaisrKSB7Ci0JCQl1cmItPmlzb19mcmFtZV9kZXNjW2pdLm9mZnNldCA9IGo7Ci0JCQl1cmItPmlzb19mcmFtZV9kZXNjW2pdLmxlbmd0aCA9IDE7Ci0JCX0KLQl9Ci0KLQljYW0tPmxhc3RfZGF0YV91cmIgPSBOVUxMOwotCi0JLyogU3VibWl0IGFsbCBVUkJzICovCi0JZm9yIChpPTA7IGkgPCBVU0JWSURFT19OVU1TQlVGOyBpKyspIHsKLQkJZXJyRmxhZyA9IHVzYl9zdWJtaXRfdXJiKGNhbS0+c3RzX3VyYltpXSwgR0ZQX0tFUk5FTCk7Ci0JCWlmIChlcnJGbGFnKQotCQkJZXJyKCJ1c2Jfc3VibWl0X2lzb2MoJWQpIHJldCAlZCIsIGksIGVyckZsYWcpOwotCi0JCWVyckZsYWcgPSB1c2Jfc3VibWl0X3VyYih1dmQtPnNidWZbaV0udXJiLCBHRlBfS0VSTkVMKTsKLQkJaWYgKGVyckZsYWcpCi0JCQllcnIgKCJ1c2Jfc3VibWl0X2lzb2MoJWQpIHJldCAlZCIsIGksIGVyckZsYWcpOwotCX0KLQotCXV2ZC0+c3RyZWFtaW5nID0gMTsKLQlERUJVRygxLCAic3RyZWFtaW5nPTEgdmlkZW9fZW5kcD0kJTAyeCIsIHV2ZC0+dmlkZW9fZW5kcCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIHZvaWQga29uaWNhd2Nfc3RvcF9kYXRhKHN0cnVjdCB1dmQgKnV2ZCkKLXsKLQlpbnQgaSwgajsKLQlzdHJ1Y3Qga29uaWNhd2MgKmNhbTsKLQotCWlmICgodXZkID09IE5VTEwpIHx8ICghdXZkLT5zdHJlYW1pbmcpIHx8ICh1dmQtPmRldiA9PSBOVUxMKSkKLQkJcmV0dXJuOwotCi0Ja29uaWNhd2NfY2FtZXJhX29mZih1dmQpOwotCXV2ZC0+c3RyZWFtaW5nID0gMDsKLQljYW0gPSAoc3RydWN0IGtvbmljYXdjICopdXZkLT51c2VyX2RhdGE7Ci0JY2FtLT5sYXN0X2RhdGFfdXJiID0gTlVMTDsKLQotCS8qIFVuc2NoZWR1bGUgYWxsIG9mIHRoZSBpc28gdGQncyAqLwotCWZvciAoaT0wOyBpIDwgVVNCVklERU9fTlVNU0JVRjsgaSsrKSB7Ci0JCXVzYl9raWxsX3VyYih1dmQtPnNidWZbaV0udXJiKTsKLQkJdXNiX2tpbGxfdXJiKGNhbS0+c3RzX3VyYltpXSk7Ci0JfQotCi0JaWYgKCF1dmQtPnJlbW92ZV9wZW5kaW5nKSB7Ci0JCS8qIFNldCBwYWNrZXQgc2l6ZSB0byAwICovCi0JCWogPSB1c2Jfc2V0X2ludGVyZmFjZSh1dmQtPmRldiwgdXZkLT5pZmFjZSwgdXZkLT5pZmFjZUFsdEluYWN0aXZlKTsKLQkJaWYgKGogPCAwKSB7Ci0JCQllcnIoInVzYl9zZXRfaW50ZXJmYWNlKCkgZXJyb3IgJWQuIiwgaik7Ci0JCQl1dmQtPmxhc3RfZXJyb3IgPSBqOwotCQl9Ci0JfQotfQotCi0KLXN0YXRpYyB2b2lkIGtvbmljYXdjX3Byb2Nlc3NfaXNvYyhzdHJ1Y3QgdXZkICp1dmQsIHN0cnVjdCB1c2J2aWRlb19mcmFtZSAqZnJhbWUpCi17Ci0Jc3RydWN0IGtvbmljYXdjICpjYW0gPSAoc3RydWN0IGtvbmljYXdjICopdXZkLT51c2VyX2RhdGE7Ci0JaW50IG1heGxpbmUgPSBjYW0tPm1heGxpbmU7Ci0JaW50IHlwbGFuZXN6ID0gY2FtLT55cGxhbmVzejsKLQotCWFzc2VydChmcmFtZSAhPSBOVUxMKTsKLQotCURFQlVHKDUsICJtYXhsaW5lID0gJWQgeXBsYW5lc3ogPSAlZCIsIG1heGxpbmUsIHlwbGFuZXN6KTsKLQlERUJVRygzLCAiRnJhbWUgc3RhdGUgPSAlZCIsIGZyYW1lLT5zY2Fuc3RhdGUpOwotCi0JaWYoZnJhbWUtPnNjYW5zdGF0ZSA9PSBTY2FuU3RhdGVfU2Nhbm5pbmcpIHsKLQkJaW50IGRyb3AgPSAwOwotCQlpbnQgY3VyZnJhbWU7Ci0JCWludCBmZHJvcHMgPSAwOwotCQlERUJVRygzLCAiU2VhcmNoaW5nIGZvciBtYXJrZXIsIHF1ZXVlIGxlbiA9ICVkIiwgUmluZ1F1ZXVlX0dldExlbmd0aCgmdXZkLT5kcCkpOwotCQl3aGlsZShSaW5nUXVldWVfR2V0TGVuZ3RoKCZ1dmQtPmRwKSA+PSA0KSB7Ci0JCQlpZiAoKFJJTkdfUVVFVUVfUEVFSygmdXZkLT5kcCwgMCkgPT0gMHgwMCkgJiYKLQkJCSAgICAoUklOR19RVUVVRV9QRUVLKCZ1dmQtPmRwLCAxKSA9PSAweGZmKSAmJgotCQkJICAgIChSSU5HX1FVRVVFX1BFRUsoJnV2ZC0+ZHAsIDIpID09IDB4MDApICYmCi0JCQkgICAgKFJJTkdfUVVFVUVfUEVFSygmdXZkLT5kcCwgMykgPCAweDgwKSkgewotCQkJCWN1cmZyYW1lID0gUklOR19RVUVVRV9QRUVLKCZ1dmQtPmRwLCAzKTsKLQkJCQlpZihjYW0tPmxhc3RmcmFtZSA+PSAwKSB7Ci0JCQkJCWZkcm9wcyA9ICgweDgwICsgY3VyZnJhbWUgLSBjYW0tPmxhc3RmcmFtZSkgJiAweDdGOwotCQkJCQlmZHJvcHMtLTsKLQkJCQkJaWYoZmRyb3BzKSB7Ci0JCQkJCQlkZXZfaW5mbygmdXZkLT5kZXYtPmRldiwKLQkJCQkJCQkgIkRyb3BwZWQgJWQgZnJhbWVzICIKLQkJCQkJCQkgIiglZCAtPiAlZClcbiIsCi0JCQkJCQkJIGZkcm9wcywKLQkJCQkJCQkgY2FtLT5sYXN0ZnJhbWUsCi0JCQkJCQkJIGN1cmZyYW1lKTsKLQkJCQkJfQotCQkJCX0KLQkJCQljYW0tPmxhc3RmcmFtZSA9IGN1cmZyYW1lOwotCQkJCWZyYW1lLT5jdXJsaW5lID0gMDsKLQkJCQlmcmFtZS0+c2NhbnN0YXRlID0gU2NhblN0YXRlX0xpbmVzOwotCQkJCVJJTkdfUVVFVUVfREVRVUVVRV9CWVRFUygmdXZkLT5kcCwgNCk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlSSU5HX1FVRVVFX0RFUVVFVUVfQllURVMoJnV2ZC0+ZHAsIDEpOwotCQkJZHJvcCsrOwotCQl9Ci0JCWlmKGRyb3ApCi0JCQlERUJVRygyLCAiZHJvcHBlZCAlZCBieXRlcyBsb29raW5nIGZvciBuZXcgZnJhbWUiLCBkcm9wKTsKLQl9Ci0KLQlpZihmcmFtZS0+c2NhbnN0YXRlID09IFNjYW5TdGF0ZV9TY2FubmluZykKLQkJcmV0dXJuOwotCi0JLyogVHJ5IHRvIG1vdmUgZGF0YSBmcm9tIHF1ZXVlIGludG8gZnJhbWUgYnVmZmVyCi0JICogV2UgZ2V0IGRhdGEgaW4gYmxvY2tzIG9mIDM4NCBieXRlcyBtYWRlIHVwIG9mOgotCSAqIDI1NiBZLCA2NCBVLCA2NCBWLgotCSAqIFRoaXMgbmVlZHMgdG8gYmUgd3JpdHRlbiBvdXQgYXMgYSBZIHBsYW5lLCBhIFUgcGxhbmUgYW5kIGEgViBwbGFuZS4KLQkgKi8KLQotCXdoaWxlICggZnJhbWUtPmN1cmxpbmUgPCBtYXhsaW5lICYmIChSaW5nUXVldWVfR2V0TGVuZ3RoKCZ1dmQtPmRwKSA+PSAzODQpKSB7Ci0JCS8qIFkgKi8KLQkJUmluZ1F1ZXVlX0RlcXVldWUoJnV2ZC0+ZHAsIGZyYW1lLT5kYXRhICsgKGZyYW1lLT5jdXJsaW5lICogMjU2KSwgMjU2KTsKLQkJLyogVSAqLwotCQlSaW5nUXVldWVfRGVxdWV1ZSgmdXZkLT5kcCwgZnJhbWUtPmRhdGEgKyB5cGxhbmVzeiArIChmcmFtZS0+Y3VybGluZSAqIDY0KSwgNjQpOwotCQkvKiBWICovCi0JCVJpbmdRdWV1ZV9EZXF1ZXVlKCZ1dmQtPmRwLCBmcmFtZS0+ZGF0YSArICg1ICogeXBsYW5lc3opLzQgKyAoZnJhbWUtPmN1cmxpbmUgKiA2NCksIDY0KTsKLQkJZnJhbWUtPnNlcVJlYWRfTGVuZ3RoICs9IDM4NDsKLQkJZnJhbWUtPmN1cmxpbmUrKzsKLQl9Ci0JLyogU2VlIGlmIHdlIGZpbGxlZCB0aGUgZnJhbWUgKi8KLQlpZiAoZnJhbWUtPmN1cmxpbmUgPT0gbWF4bGluZSkgewotCQlERUJVRyg1LCAiZ290IHdob2xlIGZyYW1lIik7Ci0KLQkJZnJhbWUtPmZyYW1lU3RhdGUgPSBGcmFtZVN0YXRlX0RvbmVfSG9sZDsKLQkJZnJhbWUtPmN1cmxpbmUgPSAwOwotCQl1dmQtPmN1cmZyYW1lID0gLTE7Ci0JCXV2ZC0+c3RhdHMuZnJhbWVfbnVtKys7Ci0JfQotfQotCi0KLXN0YXRpYyBpbnQga29uaWNhd2NfZmluZF9mcHMoaW50IHNpemUsIGludCBmcHMpCi17Ci0JaW50IGk7Ci0KLQlmcHMgKj0gMzsKLQlERUJVRygxLCAia29uaWNhX2ZpbmRfZnBzOiBzaXplID0gJWQgZnBzID0gJWQiLCBzaXplLCBmcHMpOwotCWlmKGZwcyA8PSBzcGRfdG9fZnBzW3NpemVdWzBdKQotCQlyZXR1cm4gMDsKLQotCWlmKGZwcyA+PSBzcGRfdG9fZnBzW3NpemVdW01BWF9TUEVFRF0pCi0JCXJldHVybiBNQVhfU1BFRUQ7Ci0KLQlmb3IoaSA9IDA7IGkgPCBNQVhfU1BFRUQ7IGkrKykgewotCQlpZigoZnBzID49IHNwZF90b19mcHNbc2l6ZV1baV0pICYmIChmcHMgPD0gc3BkX3RvX2Zwc1tzaXplXVtpKzFdKSkgewotCQkJREVCVUcoMiwgImZwcyAlZCBiZXR3ZWVuICVkIGFuZCAlZCIsIGZwcywgaSwgaSsxKTsKLQkJCWlmKCAoZnBzIC0gc3BkX3RvX2Zwc1tzaXplXVtpXSkgPCAoc3BkX3RvX2Zwc1tzaXplXVtpKzFdIC0gZnBzKSkKLQkJCQlyZXR1cm4gaTsKLQkJCWVsc2UKLQkJCQlyZXR1cm4gaSsxOwotCQl9Ci0JfQotCXJldHVybiBNQVhfU1BFRUQrMTsKLX0KLQotCi1zdGF0aWMgaW50IGtvbmljYXdjX3NldF92aWRlb19tb2RlKHN0cnVjdCB1dmQgKnV2ZCwgc3RydWN0IHZpZGVvX3dpbmRvdyAqdncpCi17Ci0Jc3RydWN0IGtvbmljYXdjICpjYW0gPSAoc3RydWN0IGtvbmljYXdjICopdXZkLT51c2VyX2RhdGE7Ci0JaW50IG5ld3NwZWVkID0gY2FtLT5zcGVlZDsKLQlpbnQgbmV3c2l6ZTsKLQlpbnQgeCA9IHZ3LT53aWR0aDsKLQlpbnQgeSA9IHZ3LT5oZWlnaHQ7Ci0JaW50IGZwcyA9IHZ3LT5mbGFnczsKLQotCWlmKHggPiAwICYmIHkgPiAwKSB7Ci0JCURFQlVHKDIsICJ0cnlpbmcgdG8gZmluZCBzaXplICVkLCVkIiwgeCwgeSk7Ci0JCWZvcihuZXdzaXplID0gMDsgbmV3c2l6ZSA8PSBNQVhfRlJBTUVfU0laRTsgbmV3c2l6ZSsrKSB7Ci0JCQlpZigoY2FtZXJhX3NpemVzW25ld3NpemVdLndpZHRoID09IHgpICYmIChjYW1lcmFfc2l6ZXNbbmV3c2l6ZV0uaGVpZ2h0ID09IHkpKQotCQkJCWJyZWFrOwotCQl9Ci0JfSBlbHNlIHsKLQkJbmV3c2l6ZSA9IGNhbS0+c2l6ZTsKLQl9Ci0KLQlpZihuZXdzaXplID4gTUFYX0ZSQU1FX1NJWkUpIHsKLQkJREVCVUcoMSwgImNvdWxkbid0IGZpbmQgc2l6ZSAlZCwlZCIsIHgsIHkpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZihmcHMgPiAwKSB7Ci0JCURFQlVHKDEsICJ0cnlpbmcgdG8gc2V0IGZwcyB0byAlZCIsIGZwcyk7Ci0JCW5ld3NwZWVkID0ga29uaWNhd2NfZmluZF9mcHMobmV3c2l6ZSwgZnBzKTsKLQkJREVCVUcoMSwgImZpbmRfZnBzIHJldHVybmVkICVkICglZCkiLCBuZXdzcGVlZCwgc3BkX3RvX2Zwc1tuZXdzaXplXVtuZXdzcGVlZF0pOwotCX0KLQotCWlmKG5ld3NwZWVkID4gTUFYX1NQRUVEKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCURFQlVHKDEsICJzZXR0aW5nIHNpemUgdG8gJWQgc3BlZWQgdG8gJWQiLCBuZXdzaXplLCBuZXdzcGVlZCk7Ci0JaWYoKG5ld3NpemUgPT0gY2FtLT5zaXplKSAmJiAobmV3c3BlZWQgPT0gY2FtLT5zcGVlZCkpIHsKLQkJREVCVUcoMSwgIk5vdGhpbmcgdG8gZG8iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCURFQlVHKDAsICJzZXR0aW5nIHRvICAlZHglZCBAICVkIGZwcyIsIGNhbWVyYV9zaXplc1tuZXdzaXplXS53aWR0aCwKLQkgICAgIGNhbWVyYV9zaXplc1tuZXdzaXplXS5oZWlnaHQsIHNwZF90b19mcHNbbmV3c2l6ZV1bbmV3c3BlZWRdLzMpOwotCi0Ja29uaWNhd2Nfc3RvcF9kYXRhKHV2ZCk7Ci0JdXZkLT5pZmFjZUFsdEFjdGl2ZSA9IHNwZF90b19pZmFjZVtuZXdzcGVlZF07Ci0JREVCVUcoMSwgIm5ldyBpbnRlcmZhY2UgPSAlZCIsIHV2ZC0+aWZhY2VBbHRBY3RpdmUpOwotCWNhbS0+c3BlZWQgPSBuZXdzcGVlZDsKLQotCWlmKGNhbS0+c2l6ZSAhPSBuZXdzaXplKSB7Ci0JCWNhbS0+c2l6ZSA9IG5ld3NpemU7Ci0JCWtvbmljYXdjX3NldF9jYW1lcmFfc2l6ZSh1dmQpOwotCX0KLQotCS8qIEZsdXNoIHRoZSBpbnB1dCBxdWV1ZSBhbmQgY2xlYXIgYW55IGN1cnJlbnQgZnJhbWUgaW4gcHJvZ3Jlc3MgKi8KLQotCVJpbmdRdWV1ZV9GbHVzaCgmdXZkLT5kcCk7Ci0JY2FtLT5sYXN0ZnJhbWUgPSAtMjsKLQlpZih1dmQtPmN1cmZyYW1lICE9IC0xKSB7Ci0JCXV2ZC0+ZnJhbWVbdXZkLT5jdXJmcmFtZV0uY3VybGluZSA9IDA7Ci0JCXV2ZC0+ZnJhbWVbdXZkLT5jdXJmcmFtZV0uc2VxUmVhZF9MZW5ndGggPSAwOwotCQl1dmQtPmZyYW1lW3V2ZC0+Y3VyZnJhbWVdLnNlcVJlYWRfSW5kZXggPSAwOwotCX0KLQotCWtvbmljYXdjX3N0YXJ0X2RhdGEodXZkKTsKLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgaW50IGtvbmljYXdjX2NhbGN1bGF0ZV9mcHMoc3RydWN0IHV2ZCAqdXZkKQotewotCXN0cnVjdCBrb25pY2F3YyAqY2FtID0gdXZkLT51c2VyX2RhdGE7Ci0JcmV0dXJuIHNwZF90b19mcHNbY2FtLT5zaXplXVtjYW0tPnNwZWVkXS8zOwotfQotCi0KLXN0YXRpYyB2b2lkIGtvbmljYXdjX2NvbmZpZ3VyZV92aWRlbyhzdHJ1Y3QgdXZkICp1dmQpCi17Ci0Jc3RydWN0IGtvbmljYXdjICpjYW0gPSAoc3RydWN0IGtvbmljYXdjICopdXZkLT51c2VyX2RhdGE7Ci0JdTggYnVmWzJdOwotCi0JbWVtc2V0KCZ1dmQtPnZwaWMsIDAsIHNpemVvZih1dmQtPnZwaWMpKTsKLQltZW1zZXQoJnV2ZC0+dnBpY19vbGQsIDB4NTUsIHNpemVvZih1dmQtPnZwaWNfb2xkKSk7Ci0KLQlSRVNUUklDVF9UT19SQU5HRShicmlnaHRuZXNzLCAwLCBNQVhfQlJJR0hUTkVTUyk7Ci0JUkVTVFJJQ1RfVE9fUkFOR0UoY29udHJhc3QsIDAsIE1BWF9DT05UUkFTVCk7Ci0JUkVTVFJJQ1RfVE9fUkFOR0Uoc2F0dXJhdGlvbiwgMCwgTUFYX1NBVFVSQVRJT04pOwotCVJFU1RSSUNUX1RPX1JBTkdFKHNoYXJwbmVzcywgMCwgTUFYX1NIQVJQTkVTUyk7Ci0JUkVTVFJJQ1RfVE9fUkFOR0Uod2hpdGViYWwsIDAsIE1BWF9XSElURUJBTCk7Ci0KLQljYW0tPmJyaWdodG5lc3MgPSBicmlnaHRuZXNzIC8gMTE7Ci0JY2FtLT5jb250cmFzdCA9IGNvbnRyYXN0IC8gMTE7Ci0JY2FtLT5zYXR1cmF0aW9uID0gc2F0dXJhdGlvbiAvIDExOwotCWNhbS0+c2hhcnBuZXNzID0gc2hhcnBuZXNzIC8gMTE7Ci0JY2FtLT53aGl0ZV9iYWwgPSB3aGl0ZWJhbCAvIDExOwotCi0JdXZkLT52cGljLmNvbG91ciA9IDEwODsKLQl1dmQtPnZwaWMuaHVlID0gMTA4OwotCXV2ZC0+dnBpYy5icmlnaHRuZXNzID0gYnJpZ2h0bmVzczsKLQl1dmQtPnZwaWMuY29udHJhc3QgPSBjb250cmFzdDsKLQl1dmQtPnZwaWMud2hpdGVuZXNzID0gd2hpdGViYWw7Ci0JdXZkLT52cGljLmRlcHRoID0gNjsKLQl1dmQtPnZwaWMucGFsZXR0ZSA9IFZJREVPX1BBTEVUVEVfWVVWNDIwUDsKLQotCW1lbXNldCgmdXZkLT52Y2FwLCAwLCBzaXplb2YodXZkLT52Y2FwKSk7Ci0Jc3RyY3B5KHV2ZC0+dmNhcC5uYW1lLCAiS29uaWNhIFdlYmNhbSIpOwotCXV2ZC0+dmNhcC50eXBlID0gVklEX1RZUEVfQ0FQVFVSRTsKLQl1dmQtPnZjYXAuY2hhbm5lbHMgPSAxOwotCXV2ZC0+dmNhcC5hdWRpb3MgPSAwOwotCXV2ZC0+dmNhcC5taW53aWR0aCA9IGNhbWVyYV9zaXplc1tTSVpFXzE2MFgxMjBdLndpZHRoOwotCXV2ZC0+dmNhcC5taW5oZWlnaHQgPSBjYW1lcmFfc2l6ZXNbU0laRV8xNjBYMTIwXS5oZWlnaHQ7Ci0JdXZkLT52Y2FwLm1heHdpZHRoID0gY2FtZXJhX3NpemVzW1NJWkVfMzIwWDI0MF0ud2lkdGg7Ci0JdXZkLT52Y2FwLm1heGhlaWdodCA9IGNhbWVyYV9zaXplc1tTSVpFXzMyMFgyNDBdLmhlaWdodDsKLQotCW1lbXNldCgmdXZkLT52Y2hhbiwgMCwgc2l6ZW9mKHV2ZC0+dmNoYW4pKTsKLQl1dmQtPnZjaGFuLmZsYWdzID0gMCA7Ci0JdXZkLT52Y2hhbi50dW5lcnMgPSAwOwotCXV2ZC0+dmNoYW4uY2hhbm5lbCA9IDA7Ci0JdXZkLT52Y2hhbi50eXBlID0gVklERU9fVFlQRV9DQU1FUkE7Ci0Jc3RyY3B5KHV2ZC0+dmNoYW4ubmFtZSwgIkNhbWVyYSIpOwotCi0JLyogVGFsayB0byBkZXZpY2UgKi8KLQlERUJVRygxLCAiZGV2aWNlIGluaXQiKTsKLQlpZigha29uaWNhd2NfZ2V0X21pc2ModXZkLCAweDMsIDAsIDB4MTAsIGJ1ZiwgMikpCi0JCURFQlVHKDIsICIzLDEwIC0+ICUyLjJ4ICUyLjJ4IiwgYnVmWzBdLCBidWZbMV0pOwotCWlmKCFrb25pY2F3Y19nZXRfbWlzYyh1dmQsIDB4MywgMCwgMHgxMCwgYnVmLCAyKSkKLQkJREVCVUcoMiwgIjMsMTAgLT4gJTIuMnggJTIuMngiLCBidWZbMF0sIGJ1ZlsxXSk7Ci0JaWYoa29uaWNhd2Nfc2V0X21pc2ModXZkLCAweDIsIDAsIDB4ZCkpCi0JCURFQlVHKDIsICIyLDAsZCBmYWlsZWQiKTsKLQlERUJVRygxLCAic2V0dGluZyBpbml0aWFsIHZhbHVlcyIpOwotfQotCi1zdGF0aWMgaW50IGtvbmljYXdjX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqZGV2aWQpCi17Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7Ci0Jc3RydWN0IHV2ZCAqdXZkID0gTlVMTDsKLQlpbnQgaXgsIGksIG5hczsKLQlpbnQgYWN0SW50ZXJmYWNlPS0xLCBpbmFjdEludGVyZmFjZT0tMSwgbWF4UFM9MDsKLQl1bnNpZ25lZCBjaGFyIHZpZGVvX2VwID0gMDsKLQotCURFQlVHKDEsICJrb25pY2F3Y19wcm9iZSglcCkiLCBpbnRmKTsKLQotCS8qIFdlIGRvbid0IGhhbmRsZSBtdWx0aS1jb25maWcgY2FtZXJhcyAqLwotCWlmIChkZXYtPmRlc2NyaXB0b3IuYk51bUNvbmZpZ3VyYXRpb25zICE9IDEpCi0JCXJldHVybiAtRU5PREVWOwotCi0JZGV2X2luZm8oJmludGYtPmRldiwgIktvbmljYSBXZWJjYW0gKHJldi4gMHglMDR4KVxuIiwKLQkJIGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UpKTsKLQlSRVNUUklDVF9UT19SQU5HRShzcGVlZCwgMCwgTUFYX1NQRUVEKTsKLQotCS8qIFZhbGlkYXRlIGZvdW5kIGludGVyZmFjZTogbXVzdCBoYXZlIG9uZSBJU08gZW5kcG9pbnQgKi8KLQluYXMgPSBpbnRmLT5udW1fYWx0c2V0dGluZzsKLQlpZiAobmFzICE9IDgpIHsKLQkJZXJyKCJJbmNvcnJlY3QgbnVtYmVyIG9mIGFsdGVybmF0ZSBzZXR0aW5ncyAoJWQpIGZvciB0aGlzIGNhbWVyYSEiLCBuYXMpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0JLyogVmFsaWRhdGUgYWxsIGFsdGVybmF0ZSBzZXR0aW5ncyAqLwotCWZvciAoaXg9MDsgaXggPCBuYXM7IGl4KyspIHsKLQkJY29uc3Qgc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaW50ZXJmYWNlOwotCQljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVuZHBvaW50OwotCi0JCWludGVyZmFjZSA9ICZpbnRmLT5hbHRzZXR0aW5nW2l4XTsKLQkJaSA9IGludGVyZmFjZS0+ZGVzYy5iQWx0ZXJuYXRlU2V0dGluZzsKLQkJaWYgKGludGVyZmFjZS0+ZGVzYy5iTnVtRW5kcG9pbnRzICE9IDIpIHsKLQkJCWVycigiSW50ZXJmYWNlICVkLiBoYXMgJXUuIGVuZHBvaW50cyEiLAotCQkJICAgIGludGVyZmFjZS0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyLAotCQkJICAgICh1bnNpZ25lZCkoaW50ZXJmYWNlLT5kZXNjLmJOdW1FbmRwb2ludHMpKTsKLQkJCXJldHVybiAtRU5PREVWOwotCQl9Ci0JCWVuZHBvaW50ID0gJmludGVyZmFjZS0+ZW5kcG9pbnRbMV0uZGVzYzsKLQkJREVCVUcoMSwgImZvdW5kIGVuZHBvaW50OiBhZGRyOiAweCUyLjJ4IG1heHBzID0gMHglNC40eCIsCi0JCSAgICBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcywgbGUxNl90b19jcHUoZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplKSk7Ci0JCWlmICh2aWRlb19lcCA9PSAwKQotCQkJdmlkZW9fZXAgPSBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzczsKLQkJZWxzZSBpZiAodmlkZW9fZXAgIT0gZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MpIHsKLQkJCWVycigiQWx0ZXJuYXRlIHNldHRpbmdzIGhhdmUgZGlmZmVyZW50IGVuZHBvaW50IGFkZHJlc3NlcyEiKTsKLQkJCXJldHVybiAtRU5PREVWOwotCQl9Ci0JCWlmICghdXNiX2VuZHBvaW50X3hmZXJfaXNvYyhlbmRwb2ludCkpIHsKLQkJCWVycigiSW50ZXJmYWNlICVkLiBoYXMgbm9uLUlTTyBlbmRwb2ludCEiLAotCQkJICAgIGludGVyZmFjZS0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyKTsKLQkJCXJldHVybiAtRU5PREVWOwotCQl9Ci0JCWlmICh1c2JfZW5kcG9pbnRfZGlyX291dChlbmRwb2ludCkpIHsKLQkJCWVycigiSW50ZXJmYWNlICVkLiBoYXMgSVNPIE9VVCBlbmRwb2ludCEiLAotCQkJICAgIGludGVyZmFjZS0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyKTsKLQkJCXJldHVybiAtRU5PREVWOwotCQl9Ci0JCWlmIChsZTE2X3RvX2NwdShlbmRwb2ludC0+d01heFBhY2tldFNpemUpID09IDApIHsKLQkJCWlmIChpbmFjdEludGVyZmFjZSA8IDApCi0JCQkJaW5hY3RJbnRlcmZhY2UgPSBpOwotCQkJZWxzZSB7Ci0JCQkJZXJyKCJNb3JlIHRoYW4gb25lIGluYWN0aXZlIGFsdC4gc2V0dGluZyEiKTsKLQkJCQlyZXR1cm4gLUVOT0RFVjsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCWlmIChpID09IHNwZF90b19pZmFjZVtzcGVlZF0pIHsKLQkJCQkvKiBUaGlzIG9uZSBpcyB0aGUgcmVxdWVzdGVkIG9uZSAqLwotCQkJCWFjdEludGVyZmFjZSA9IGk7Ci0JCQl9Ci0JCX0KLQkJaWYgKGxlMTZfdG9fY3B1KGVuZHBvaW50LT53TWF4UGFja2V0U2l6ZSkgPiBtYXhQUykKLQkJCW1heFBTID0gbGUxNl90b19jcHUoZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplKTsKLQl9Ci0JaWYoYWN0SW50ZXJmYWNlID09IC0xKSB7Ci0JCWVycigiQ2FudCBmaW5kIHJlcXVpcmVkIGVuZHBvaW50Iik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCURFQlVHKDEsICJTZWxlY3RpbmcgcmVxdWVzdGVkIGFjdGl2ZSBzZXR0aW5nPSVkLiBtYXhQUz0lZC4iLCBhY3RJbnRlcmZhY2UsIG1heFBTKTsKLQotCXV2ZCA9IHVzYnZpZGVvX0FsbG9jYXRlRGV2aWNlKGNhbXMpOwotCWlmICh1dmQgIT0gTlVMTCkgewotCQlzdHJ1Y3Qga29uaWNhd2MgKmNhbSA9IChzdHJ1Y3Qga29uaWNhd2MgKikodXZkLT51c2VyX2RhdGEpOwotCQkvKiBIZXJlIHV2ZCBpcyBhIGZ1bGx5IGFsbG9jYXRlZCB1dmQgb2JqZWN0ICovCi0JCWZvcihpID0gMDsgaSA8IFVTQlZJREVPX05VTVNCVUY7IGkrKykgewotCQkJY2FtLT5zdHNfdXJiW2ldID0gdXNiX2FsbG9jX3VyYihGUkFNRVNfUEVSX0RFU0MsIEdGUF9LRVJORUwpOwotCQkJaWYoY2FtLT5zdHNfdXJiW2ldID09IE5VTEwpIHsKLQkJCQl3aGlsZShpLS0pIHsKLQkJCQkJdXNiX2ZyZWVfdXJiKGNhbS0+c3RzX3VyYltpXSk7Ci0JCQkJfQotCQkJCWVycigiY2FuJ3QgYWxsb2NhdGUgdXJicyIpOwotCQkJCXJldHVybiAtRU5PTUVNOwotCQkJfQotCQl9Ci0JCWNhbS0+c3BlZWQgPSBzcGVlZDsKLQkJUkVTVFJJQ1RfVE9fUkFOR0Uoc2l6ZSwgU0laRV8xNjBYMTIwLCBTSVpFXzMyMFgyNDApOwotCQljYW0tPndpZHRoID0gY2FtZXJhX3NpemVzW3NpemVdLndpZHRoOwotCQljYW0tPmhlaWdodCA9IGNhbWVyYV9zaXplc1tzaXplXS5oZWlnaHQ7Ci0JCWNhbS0+c2l6ZSA9IHNpemU7Ci0KLQkJdXZkLT5mbGFncyA9IDA7Ci0JCXV2ZC0+ZGVidWcgPSBkZWJ1ZzsKLQkJdXZkLT5kZXYgPSBkZXY7Ci0JCXV2ZC0+aWZhY2UgPSBpbnRmLT5hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXI7Ci0JCXV2ZC0+aWZhY2VBbHRJbmFjdGl2ZSA9IGluYWN0SW50ZXJmYWNlOwotCQl1dmQtPmlmYWNlQWx0QWN0aXZlID0gYWN0SW50ZXJmYWNlOwotCQl1dmQtPnZpZGVvX2VuZHAgPSB2aWRlb19lcDsKLQkJdXZkLT5pc29fcGFja2V0X2xlbiA9IG1heFBTOwotCQl1dmQtPnBhbGV0dGVCaXRzID0gMUwgPDwgVklERU9fUEFMRVRURV9ZVVY0MjBQOwotCQl1dmQtPmRlZmF1bHRQYWxldHRlID0gVklERU9fUEFMRVRURV9ZVVY0MjBQOwotCQl1dmQtPmNhbnZhcyA9IFZJREVPU0laRSgzMjAsIDI0MCk7Ci0JCXV2ZC0+dmlkZW9zaXplID0gVklERU9TSVpFKGNhbS0+d2lkdGgsIGNhbS0+aGVpZ2h0KTsKLQotCQkvKiBJbml0aWFsaXplIGtvbmljYXdjIHNwZWNpZmljIGRhdGEgKi8KLQkJa29uaWNhd2NfY29uZmlndXJlX3ZpZGVvKHV2ZCk7Ci0KLQkJaSA9IHVzYnZpZGVvX1JlZ2lzdGVyVmlkZW9EZXZpY2UodXZkKTsKLQkJdXZkLT5tYXhfZnJhbWVfc2l6ZSA9ICgzMjAgKiAyNDAgKiAzKS8yOwotCQlpZiAoaSAhPSAwKSB7Ci0JCQllcnIoInVzYnZpZGVvX1JlZ2lzdGVyVmlkZW9EZXZpY2UoKSBmYWlsZWQuIik7Ci0JCQl1dmQgPSBOVUxMOwotCQl9Ci0KLQkJa29uaWNhd2NfcmVnaXN0ZXJfaW5wdXQoY2FtLCBkZXYpOwotCX0KLQotCWlmICh1dmQpIHsKLQkJdXNiX3NldF9pbnRmZGF0YSAoaW50ZiwgdXZkKTsKLQkJcmV0dXJuIDA7Ci0JfQotCXJldHVybiAtRUlPOwotfQotCi0KLXN0YXRpYyB2b2lkIGtvbmljYXdjX2ZyZWVfdXZkKHN0cnVjdCB1dmQgKnV2ZCkKLXsKLQlpbnQgaTsKLQlzdHJ1Y3Qga29uaWNhd2MgKmNhbSA9IChzdHJ1Y3Qga29uaWNhd2MgKil1dmQtPnVzZXJfZGF0YTsKLQotCWtvbmljYXdjX3VucmVnaXN0ZXJfaW5wdXQoY2FtKTsKLQotCWZvciAoaSA9IDA7IGkgPCBVU0JWSURFT19OVU1TQlVGOyBpKyspIHsKLQkJdXNiX2ZyZWVfdXJiKGNhbS0+c3RzX3VyYltpXSk7Ci0JCWNhbS0+c3RzX3VyYltpXSA9IE5VTEw7Ci0JfQotfQotCi0KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZVtdID0gewotCXsgVVNCX0RFVklDRSgweDA0YzgsIDB4MDcyMCkgfSwgLyogSW50ZWwgWUMgNzYgKi8KLQl7IH0gIC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCi19OwotCi0KLXN0YXRpYyBpbnQgX19pbml0IGtvbmljYXdjX2luaXQodm9pZCkKLXsKLQlzdHJ1Y3QgdXNidmlkZW9fY2IgY2JUYmw7Ci0JcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgotCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKLQltZW1zZXQoJmNiVGJsLCAwLCBzaXplb2YoY2JUYmwpKTsKLQljYlRibC5wcm9iZSA9IGtvbmljYXdjX3Byb2JlOwotCWNiVGJsLnNldHVwT25PcGVuID0ga29uaWNhd2Nfc2V0dXBfb25fb3BlbjsKLQljYlRibC5wcm9jZXNzRGF0YSA9IGtvbmljYXdjX3Byb2Nlc3NfaXNvYzsKLQljYlRibC5nZXRGUFMgPSBrb25pY2F3Y19jYWxjdWxhdGVfZnBzOwotCWNiVGJsLnNldFZpZGVvTW9kZSA9IGtvbmljYXdjX3NldF92aWRlb19tb2RlOwotCWNiVGJsLnN0YXJ0RGF0YVB1bXAgPSBrb25pY2F3Y19zdGFydF9kYXRhOwotCWNiVGJsLnN0b3BEYXRhUHVtcCA9IGtvbmljYXdjX3N0b3BfZGF0YTsKLQljYlRibC5hZGp1c3RQaWN0dXJlID0ga29uaWNhd2NfYWRqdXN0X3BpY3R1cmU7Ci0JY2JUYmwudXNlckZyZWUgPSBrb25pY2F3Y19mcmVlX3V2ZDsKLQlyZXR1cm4gdXNidmlkZW9fcmVnaXN0ZXIoCi0JCSZjYW1zLAotCQlNQVhfQ0FNRVJBUywKLQkJc2l6ZW9mKHN0cnVjdCBrb25pY2F3YyksCi0JCSJrb25pY2F3YyIsCi0JCSZjYlRibCwKLQkJVEhJU19NT0RVTEUsCi0JCWlkX3RhYmxlKTsKLX0KLQotCi1zdGF0aWMgdm9pZCBfX2V4aXQga29uaWNhd2NfY2xlYW51cCh2b2lkKQotewotCXVzYnZpZGVvX0RlcmVnaXN0ZXIoJmNhbXMpOwotfQotCi0KLU1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBpZF90YWJsZSk7Ci0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IoIlNpbW9uIEV2YW5zIDxzcHNlQHNlY3JldC5vcmcudWs+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOwotbW9kdWxlX3BhcmFtKHNwZWVkLCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhzcGVlZCwgIkluaXRpYWwgc3BlZWQ6IDAgKHNsb3dlc3QpIC0gNiAoZmFzdGVzdCkiKTsKLW1vZHVsZV9wYXJhbShzaXplLCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhzaXplLCAiSW5pdGlhbCBTaXplIDA6IDE2MHgxMjAgMTogMTYweDEzNiAyOiAxNzZ4MTQ0IDM6IDMyMHgyNDAiKTsKLW1vZHVsZV9wYXJhbShicmlnaHRuZXNzLCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhicmlnaHRuZXNzLCAiSW5pdGlhbCBicmlnaHRuZXNzIDAgLSAxMDgiKTsKLW1vZHVsZV9wYXJhbShjb250cmFzdCwgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoY29udHJhc3QsICJJbml0aWFsIGNvbnRyYXN0IDAgLSAxMDgiKTsKLW1vZHVsZV9wYXJhbShzYXR1cmF0aW9uLCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhzYXR1cmF0aW9uLCAiSW5pdGlhbCBzYXR1cmF0aW9uIDAgLSAxMDgiKTsKLW1vZHVsZV9wYXJhbShzaGFycG5lc3MsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHNoYXJwbmVzcywgIkluaXRpYWwgYnJpZ2h0bmVzcyAwIC0gMTA4Iik7Ci1tb2R1bGVfcGFyYW0od2hpdGViYWwsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHdoaXRlYmFsLCAiSW5pdGlhbCB3aGl0ZSBiYWxhbmNlIDAgLSAzNjMiKTsKLQotI2lmZGVmIENPTkZJR19VU0JfREVCVUcKLW1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7Ci1NT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgbGV2ZWw6IDAtOSAoZGVmYXVsdD0wKSIpOwotI2VuZGlmCi0KLW1vZHVsZV9pbml0KGtvbmljYXdjX2luaXQpOwotbW9kdWxlX2V4aXQoa29uaWNhd2NfY2xlYW51cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL3VsdHJhY2FtLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL3VsdHJhY2FtLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiZDFiNjMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby91bHRyYWNhbS5jCisrKyAvZGV2L251bGwKQEAgLTEsNjg1ICswLDAgQEAKLS8qCi0gKiBVU0IgTkIgQ2FtZXJhIGRyaXZlcgotICoKLSAqIEhJU1RPUlk6Ci0gKiAyNS1EZWMtMjAwMiBEbWl0cmkgICAgICBSZW1vdmVkIGxpZ2h0aW5nLCBzaGFycG5lc3MgcGFyYW1ldGVycywgbWV0aG9kcy4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotCi0jaW5jbHVkZSAidXNidmlkZW8uaCIKLQotI2RlZmluZQlVTFRSQUNBTV9WRU5ET1JfSUQJMHgwNDYxCi0jZGVmaW5lCVVMVFJBQ0FNX1BST0RVQ1RfSUQJMHgwODEzCi0KLSNkZWZpbmUgTUFYX0NBTUVSQVMJCTQJLyogSG93IG1hbnkgZGV2aWNlcyB3ZSBhbGxvdyB0byBjb25uZWN0ICovCi0KLS8qCi0gKiBUaGlzIHN0cnVjdHVyZSBsaXZlcyBpbiB1dmRfdC0+dXNlciBmaWVsZC4KLSAqLwotdHlwZWRlZiBzdHJ1Y3QgewotCWludCBpbml0aWFsaXplZDsJLyogSGFkIHdlIGFscmVhZHkgc2VudCBpbml0IHNlcXVlbmNlPyAqLwotCWludCBjYW1lcmFfbW9kZWw7CS8qIFdoYXQgdHlwZSBvZiBJQk0gY2FtZXJhIHdlIGdvdD8gKi8KLQlpbnQgaGFzX2hkcjsKLX0gdWx0cmFjYW1fdDsKLSNkZWZpbmUJVUxUUkFDQU1fVCh1dmQpCSgodWx0cmFjYW1fdCAqKSgodXZkKS0+dXNlcl9kYXRhKSkKLQotc3RhdGljIHN0cnVjdCB1c2J2aWRlbyAqY2FtcyA9IE5VTEw7Ci0KLXN0YXRpYyBpbnQgZGVidWc7Ci0KLXN0YXRpYyBpbnQgZmxhZ3M7IC8qIEZMQUdTX0RJU1BMQVlfSElOVFMgfCBGTEFHU19PVkVSTEFZX1NUQVRTOyAqLwotCi1zdGF0aWMgY29uc3QgaW50IG1pbl9jYW52YXNXaWR0aCAgPSA4Owotc3RhdGljIGNvbnN0IGludCBtaW5fY2FudmFzSGVpZ2h0ID0gNDsKLQotI2RlZmluZSBGUkFNRVJBVEVfTUlOCTAKLSNkZWZpbmUgRlJBTUVSQVRFX01BWAk2Ci1zdGF0aWMgaW50IGZyYW1lcmF0ZSA9IC0xOwotCi0vKgotICogSGVyZSB3ZSBkZWZpbmUgc2V2ZXJhbCBpbml0aWFsaXphdGlvbiB2YXJpYWJsZXMuIFRoZXkgbWF5Ci0gKiBiZSB1c2VkIHRvIGF1dG9tYXRpY2FsbHkgc2V0IGNvbG9yLCBodWUsIGJyaWdodG5lc3MgYW5kCi0gKiBjb250cmFzdCB0byBkZXNpcmVkIHZhbHVlcy4gVGhpcyBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGluCi0gKiBjYXNlIG9mIHdlYmNhbXMgKHdoaWNoIGhhdmUgbm8gY29udHJvbHMgYW5kIG5vIG9uLXNjcmVlbgotICogb3V0cHV0KSBhbmQgYWxzbyB3aGVuIGEgY2xpZW50IFY0TCBzb2Z0d2FyZSBpcyB1c2VkIHRoYXQKLSAqIGRvZXMgbm90IGhhdmUgc29tZSBvZiB0aG9zZSBjb250cm9scy4gSW4gYW55IGNhc2UgaXQncwotICogZ29vZCB0byBoYXZlIHN0YXJ0dXAgdmFsdWVzIGFzIG9wdGlvbnMuCi0gKgotICogVGhlc2UgdmFsdWVzIGFyZSBhbGwgaW4gWzAuLjI1NV0gcmFuZ2UuIFRoaXMgc2ltcGxpZmllcwotICogb3BlcmF0aW9uLiBOb3RlIHRoYXQgYWN0dWFsIHZhbHVlcyBvZiBWNEwgdmFyaWFibGVzIG1heQotICogYmUgc2NhbGVkIHVwIChhcyBtdWNoIGFzIDw8IDgpLiBVc2VyIGNhbiBzZWUgdGhhdCBvbmx5Ci0gKiBvbiBvdmVybGF5IG91dHB1dCwgaG93ZXZlciwgb3IgdGhyb3VnaCBhIFY0TCBjbGllbnQuCi0gKi8KLXN0YXRpYyBpbnQgaW5pdF9icmlnaHRuZXNzID0gMTI4Owotc3RhdGljIGludCBpbml0X2NvbnRyYXN0ID0gMTkyOwotc3RhdGljIGludCBpbml0X2NvbG9yID0gMTI4Owotc3RhdGljIGludCBpbml0X2h1ZSA9IDEyODsKLXN0YXRpYyBpbnQgaHVlX2NvcnJlY3Rpb24gPSAxMjg7Ci0KLW1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7Ci1NT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgbGV2ZWw6IDAtOSAoZGVmYXVsdD0wKSIpOwotbW9kdWxlX3BhcmFtKGZsYWdzLCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhmbGFncywKLQkJIkJpdGZpZWxkOiAwPVZJRElPQ1NZTkMsICIKLQkJIjE9Qi9XLCAiCi0JCSIyPXNob3cgaGludHMsICIKLQkJIjM9c2hvdyBzdGF0cywgIgotCQkiND10ZXN0IHBhdHRlcm4sICIKLQkJIjU9c2VwYXJhdGUgZnJhbWVzLCAiCi0JCSI2PWNsZWFuIGZyYW1lcyIpOwotbW9kdWxlX3BhcmFtKGZyYW1lcmF0ZSwgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoZnJhbWVyYXRlLCAiRnJhbWVyYXRlIHNldHRpbmc6IDA9c2xvd2VzdCwgNj1mYXN0ZXN0IChkZWZhdWx0PTIpIik7Ci0KLW1vZHVsZV9wYXJhbShpbml0X2JyaWdodG5lc3MsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGluaXRfYnJpZ2h0bmVzcywgIkJyaWdodG5lc3MgcHJlY29uZmlndXJhdGlvbjogMC0yNTUgKGRlZmF1bHQ9MTI4KSIpOwotbW9kdWxlX3BhcmFtKGluaXRfY29udHJhc3QsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGluaXRfY29udHJhc3QsICJDb250cmFzdCBwcmVjb25maWd1cmF0aW9uOiAwLTI1NSAoZGVmYXVsdD0xOTIpIik7Ci1tb2R1bGVfcGFyYW0oaW5pdF9jb2xvciwgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoaW5pdF9jb2xvciwgIkNvbG9yIHByZWNvbmZpZ3VyYXRpb246IDAtMjU1IChkZWZhdWx0PTEyOCkiKTsKLW1vZHVsZV9wYXJhbShpbml0X2h1ZSwgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoaW5pdF9odWUsICJIdWUgcHJlY29uZmlndXJhdGlvbjogMC0yNTUgKGRlZmF1bHQ9MTI4KSIpOwotbW9kdWxlX3BhcmFtKGh1ZV9jb3JyZWN0aW9uLCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhodWVfY29ycmVjdGlvbiwgIllVViBjb2xvcnNwYWNlIHJlZ3VsYXRpb246IDAtMjU1IChkZWZhdWx0PTEyOCkiKTsKLQotLyoKLSAqIHVsdHJhY2FtX1Byb2Nlc3NJc29jRGF0YSgpCi0gKgotICogR2VuZXJpYyByb3V0aW5lIHRvIHBhcnNlIHRoZSByaW5nIHF1ZXVlIGRhdGEuIEl0IGVtcGxveXMgZWl0aGVyCi0gKiB1bHRyYWNhbV9maW5kX2hlYWRlcigpIG9yIHVsdHJhY2FtX3BhcnNlX2xpbmVzKCkgdG8gZG8gbW9zdAotICogb2Ygd29yay4KLSAqCi0gKiAwMi1Ob3YtMjAwMCBGaXJzdCAobW9zdGx5IGR1bW15KSB2ZXJzaW9uLgotICogMDYtTm92LTIwMDAgUmV3cm90ZSB0byBkdW1wIGFsbCBkYXRhIGludG8gZnJhbWUuCi0gKi8KLXN0YXRpYyB2b2lkIHVsdHJhY2FtX1Byb2Nlc3NJc29jRGF0YShzdHJ1Y3QgdXZkICp1dmQsIHN0cnVjdCB1c2J2aWRlb19mcmFtZSAqZnJhbWUpCi17Ci0JaW50IG47Ci0KLQlhc3NlcnQodXZkICE9IE5VTEwpOwotCWFzc2VydChmcmFtZSAhPSBOVUxMKTsKLQotCS8qIFRyeSB0byBtb3ZlIGRhdGEgZnJvbSBxdWV1ZSBpbnRvIGZyYW1lIGJ1ZmZlciAqLwotCW4gPSBSaW5nUXVldWVfR2V0TGVuZ3RoKCZ1dmQtPmRwKTsKLQlpZiAobiA+IDApIHsKLQkJaW50IG07Ci0JCS8qIFNlZSBob3cgbXVjaCBzcGFyZSB3ZSBoYXZlIGxlZnQgKi8KLQkJbSA9IHV2ZC0+bWF4X2ZyYW1lX3NpemUgLSBmcmFtZS0+c2VxUmVhZF9MZW5ndGg7Ci0JCWlmIChuID4gbSkKLQkJCW4gPSBtOwotCQkvKiBOb3cgbW92ZSB0aGF0IG11Y2ggZGF0YSBpbnRvIGZyYW1lIGJ1ZmZlciAqLwotCQlSaW5nUXVldWVfRGVxdWV1ZSgKLQkJCSZ1dmQtPmRwLAotCQkJZnJhbWUtPmRhdGEgKyBmcmFtZS0+c2VxUmVhZF9MZW5ndGgsCi0JCQltKTsKLQkJZnJhbWUtPnNlcVJlYWRfTGVuZ3RoICs9IG07Ci0JfQotCS8qIFNlZSBpZiB3ZSBmaWxsZWQgdGhlIGZyYW1lICovCi0JaWYgKGZyYW1lLT5zZXFSZWFkX0xlbmd0aCA+PSB1dmQtPm1heF9mcmFtZV9zaXplKSB7Ci0JCWZyYW1lLT5mcmFtZVN0YXRlID0gRnJhbWVTdGF0ZV9Eb25lOwotCQl1dmQtPmN1cmZyYW1lID0gLTE7Ci0JCXV2ZC0+c3RhdHMuZnJhbWVfbnVtKys7Ci0JfQotfQotCi0vKgotICogdWx0cmFjYW1fdmVpbygpCi0gKgotICogSGlzdG9yeToKLSAqIDEvMjcvMDAgIEFkZGVkIGNoZWNrIGZvciBkZXYgPT0gTlVMTDsgdGhpcyBoYXBwZW5zIGlmIGNhbWVyYSBpcyB1bnBsdWdnZWQuCi0gKi8KLXN0YXRpYyBpbnQgdWx0cmFjYW1fdmVpbygKLQlzdHJ1Y3QgdXZkICp1dmQsCi0JdW5zaWduZWQgY2hhciByZXEsCi0JdW5zaWduZWQgc2hvcnQgdmFsdWUsCi0JdW5zaWduZWQgc2hvcnQgaW5kZXgsCi0JaW50IGlzX291dCkKLXsKLQlzdGF0aWMgY29uc3QgY2hhciBwcm9jW10gPSAidWx0cmFjYW1fdmVpbyI7Ci0JdW5zaWduZWQgY2hhciBjcFs4XSAvKiA9IHsgMHhkZSwgMHhhZCwgMHhiZSwgMHhlZiwgMHhkZSwgMHhhZCwgMHhiZSwgMHhlZiB9ICovOwotCWludCBpOwotCi0JaWYgKCFDQU1FUkFfSVNfT1BFUkFUSU9OQUwodXZkKSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoIWlzX291dCkgewotCQlpID0gdXNiX2NvbnRyb2xfbXNnKAotCQkJdXZkLT5kZXYsCi0JCQl1c2JfcmN2Y3RybHBpcGUodXZkLT5kZXYsIDApLAotCQkJcmVxLAotCQkJVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCi0JCQl2YWx1ZSwKLQkJCWluZGV4LAotCQkJY3AsCi0JCQlzaXplb2YoY3ApLAotCQkJMTAwMCk7Ci0jaWYgMQotCQlkZXZfaW5mbygmdXZkLT5kZXYtPmRldiwKLQkJCSAiVVNCID0+ICUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4ICIKLQkJCSAiKHJlcT0kJTAyeCB2YWw9JCUwNHggaW5kPSQlMDR4KVxuIiwKLQkJCSBjcFswXSxjcFsxXSxjcFsyXSxjcFszXSxjcFs0XSxjcFs1XSxjcFs2XSxjcFs3XSwKLQkJCSByZXEsIHZhbHVlLCBpbmRleCk7Ci0jZW5kaWYKLQl9IGVsc2UgewotCQlpID0gdXNiX2NvbnRyb2xfbXNnKAotCQkJdXZkLT5kZXYsCi0JCQl1c2Jfc25kY3RybHBpcGUodXZkLT5kZXYsIDApLAotCQkJcmVxLAotCQkJVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAotCQkJdmFsdWUsCi0JCQlpbmRleCwKLQkJCU5VTEwsCi0JCQkwLAotCQkJMTAwMCk7Ci0JfQotCWlmIChpIDwgMCkgewotCQllcnIoIiVzOiBFUlJPUj0lZC4gQ2FtZXJhIHN0b3BwZWQ7IFJlY29ubmVjdCBvciByZWxvYWQgZHJpdmVyLiIsCi0JCSAgICBwcm9jLCBpKTsKLQkJdXZkLT5sYXN0X2Vycm9yID0gaTsKLQl9Ci0JcmV0dXJuIGk7Ci19Ci0KLS8qCi0gKiB1bHRyYWNhbV9jYWxjdWxhdGVfZnBzKCkKLSAqLwotc3RhdGljIGludCB1bHRyYWNhbV9jYWxjdWxhdGVfZnBzKHN0cnVjdCB1dmQgKnV2ZCkKLXsKLQlyZXR1cm4gMyArIGZyYW1lcmF0ZSo0ICsgZnJhbWVyYXRlLzI7Ci19Ci0KLS8qCi0gKiB1bHRyYWNhbV9hZGp1c3RfY29udHJhc3QoKQotICovCi1zdGF0aWMgdm9pZCB1bHRyYWNhbV9hZGp1c3RfY29udHJhc3Qoc3RydWN0IHV2ZCAqdXZkKQotewotfQotCi0vKgotICogdWx0cmFjYW1fc2V0X2JyaWdodG5lc3MoKQotICoKLSAqIFRoaXMgcHJvY2VkdXJlIGNoYW5nZXMgYnJpZ2h0bmVzcyBvZiB0aGUgcGljdHVyZS4KLSAqLwotc3RhdGljIHZvaWQgdWx0cmFjYW1fc2V0X2JyaWdodG5lc3Moc3RydWN0IHV2ZCAqdXZkKQotewotfQotCi1zdGF0aWMgdm9pZCB1bHRyYWNhbV9zZXRfaHVlKHN0cnVjdCB1dmQgKnV2ZCkKLXsKLX0KLQotLyoKLSAqIHVsdHJhY2FtX2FkanVzdF9waWN0dXJlKCkKLSAqCi0gKiBUaGlzIHByb2NlZHVyZSBnZXRzIGNhbGxlZCBmcm9tIFY0TCBpbnRlcmZhY2UgdG8gdXBkYXRlIHBpY3R1cmUgc2V0dGluZ3MuCi0gKiBIZXJlIHdlIGNoYW5nZSBicmlnaHRuZXNzIGFuZCBjb250cmFzdC4KLSAqLwotc3RhdGljIHZvaWQgdWx0cmFjYW1fYWRqdXN0X3BpY3R1cmUoc3RydWN0IHV2ZCAqdXZkKQotewotCXVsdHJhY2FtX2FkanVzdF9jb250cmFzdCh1dmQpOwotCXVsdHJhY2FtX3NldF9icmlnaHRuZXNzKHV2ZCk7Ci0JdWx0cmFjYW1fc2V0X2h1ZSh1dmQpOwotfQotCi0vKgotICogdWx0cmFjYW1fdmlkZW9fc3RvcCgpCi0gKgotICogVGhpcyBjb2RlIHRlbGxzIGNhbWVyYSB0byBzdG9wIHN0cmVhbWluZy4gVGhlIGludGVyZmFjZSByZW1haW5zCi0gKiBjb25maWd1cmVkIGFuZCBiYW5kd2lkdGggLSBjbGFpbWVkLgotICovCi1zdGF0aWMgdm9pZCB1bHRyYWNhbV92aWRlb19zdG9wKHN0cnVjdCB1dmQgKnV2ZCkKLXsKLX0KLQotLyoKLSAqIHVsdHJhY2FtX3JlaW5pdF9pc28oKQotICoKLSAqIFRoaXMgcHJvY2VkdXJlIHNlbmRzIGNvdXBsZSBvZiBjb21tYW5kcyB0byB0aGUgY2FtZXJhIGFuZCB0aGVuCi0gKiByZXNldHMgdGhlIHZpZGVvIHBpcGUuIFRoaXMgc2VxdWVuY2Ugd2FzIG9ic2VydmVkIHRvIHJlaW5pdCB0aGUKLSAqIGNhbWVyYSBvciwgYXQgbGVhc3QsIHRvIGluaXRpYXRlIElTTyBkYXRhIHN0cmVhbS4KLSAqLwotc3RhdGljIHZvaWQgdWx0cmFjYW1fcmVpbml0X2lzbyhzdHJ1Y3QgdXZkICp1dmQsIGludCBkb19zdG9wKQotewotfQotCi1zdGF0aWMgdm9pZCB1bHRyYWNhbV92aWRlb19zdGFydChzdHJ1Y3QgdXZkICp1dmQpCi17Ci0JdWx0cmFjYW1fcmVpbml0X2lzbyh1dmQsIDApOwotfQotCi1zdGF0aWMgaW50IHVsdHJhY2FtX3Jlc2V0UGlwZShzdHJ1Y3QgdXZkICp1dmQpCi17Ci0JdXNiX2NsZWFyX2hhbHQodXZkLT5kZXYsIHV2ZC0+dmlkZW9fZW5kcCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdWx0cmFjYW1fYWx0ZXJuYXRlU2V0dGluZyhzdHJ1Y3QgdXZkICp1dmQsIGludCBzZXR0aW5nKQotewotCXN0YXRpYyBjb25zdCBjaGFyIHByb2NbXSA9ICJ1bHRyYWNhbV9hbHRlcm5hdGVTZXR0aW5nIjsKLQlpbnQgaTsKLQlpID0gdXNiX3NldF9pbnRlcmZhY2UodXZkLT5kZXYsIHV2ZC0+aWZhY2UsIHNldHRpbmcpOwotCWlmIChpIDwgMCkgewotCQllcnIoIiVzOiB1c2Jfc2V0X2ludGVyZmFjZSBlcnJvciIsIHByb2MpOwotCQl1dmQtPmxhc3RfZXJyb3IgPSBpOwotCQlyZXR1cm4gLUVCVVNZOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIFJldHVybiBuZWdhdGl2ZSBjb2RlIG9uIGZhaWx1cmUsIDAgb24gc3VjY2Vzcy4KLSAqLwotc3RhdGljIGludCB1bHRyYWNhbV9zZXR1cF9vbl9vcGVuKHN0cnVjdCB1dmQgKnV2ZCkKLXsKLQlpbnQgc2V0dXBfb2sgPSAwOyAvKiBTdWNjZXNzIGJ5IGRlZmF1bHQgKi8KLQkvKiBTZW5kIGluaXQgc2VxdWVuY2Ugb25seSBvbmNlLCBpdCdzIGxhcmdlISAqLwotCWlmICghVUxUUkFDQU1fVCh1dmQpLT5pbml0aWFsaXplZCkgewotCQl1bHRyYWNhbV9hbHRlcm5hdGVTZXR0aW5nKHV2ZCwgMHgwNCk7Ci0JCXVsdHJhY2FtX2FsdGVybmF0ZVNldHRpbmcodXZkLCAweDAwKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDIsIDB4MDAwNCwgMHgwMDBiLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDIsIDB4MDAwMSwgMHgwMDA1LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDIsIDB4ODAwMCwgMHgwMDAwLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMDAwLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDBiMCwgMHgwMDAxLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMDAyLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwYywgMHgwMDAzLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwYiwgMHgwMDA0LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMDA1LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMDA2LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDA3OSwgMHgwMDA3LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAzYiwgMHgwMDA4LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMiwgMHgwMDBmLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMSwgMHgwMDEwLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMDExLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGJmLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMSwgMHgwMGMwLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAxMCwgMHgwMGNiLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDEsIDB4MDBhNCwgMHgwMDAxLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDEsIDB4MDAxMCwgMHgwMDAyLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDEsIDB4MDA2NiwgMHgwMDA3LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDEsIDB4MDAwYiwgMHgwMDA4LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDEsIDB4MDAzNCwgMHgwMDA5LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDEsIDB4MDAwMCwgMHgwMDBhLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDEsIDB4MDAyZSwgMHgwMDBiLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDEsIDB4MDBkNiwgMHgwMDBjLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDEsIDB4MDBmYywgMHgwMDBkLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDEsIDB4MDBmMSwgMHgwMDBlLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDEsIDB4MDBkYSwgMHgwMDBmLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDEsIDB4MDAzNiwgMHgwMDEwLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDEsIDB4MDAwYiwgMHgwMDExLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDEsIDB4MDAwMSwgMHgwMDEyLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDEsIDB4MDAwMCwgMHgwMDEzLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDEsIDB4MDAwMCwgMHgwMDE0LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDEsIDB4MDA4NywgMHgwMDUxLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDEsIDB4MDA0MCwgMHgwMDUyLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDEsIDB4MDA1OCwgMHgwMDUzLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDEsIDB4MDA0MCwgMHgwMDU0LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDEsIDB4MDAwMCwgMHgwMDQwLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDEsIDB4MDAxMCwgMHgwMDQxLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDEsIDB4MDAyMCwgMHgwMDQyLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDEsIDB4MDAzMCwgMHgwMDQzLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDEsIDB4MDA0MCwgMHgwMDQ0LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDEsIDB4MDA1MCwgMHgwMDQ1LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDEsIDB4MDA2MCwgMHgwMDQ2LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDEsIDB4MDA3MCwgMHgwMDQ3LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDEsIDB4MDA4MCwgMHgwMDQ4LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDEsIDB4MDA5MCwgMHgwMDQ5LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDEsIDB4MDBhMCwgMHgwMDRhLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDEsIDB4MDBiMCwgMHgwMDRiLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDEsIDB4MDBjMCwgMHgwMDRjLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDEsIDB4MDBkMCwgMHgwMDRkLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDEsIDB4MDBlMCwgMHgwMDRlLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDEsIDB4MDBmMCwgMHgwMDRmLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDEsIDB4MDBmZiwgMHgwMDUwLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDEsIDB4MDAwMCwgMHgwMDU2LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDA4MCwgMHgwMGMxLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGMyLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGNhLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGM5LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGM5LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGM5LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGM5LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGM5LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGM5LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGM5LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGM5LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGM5LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGM5LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGM5LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGM5LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGM5LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGM5LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGM5LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGM5LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGM5LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGM5LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDA4MCwgMHgwMGMxLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwNCwgMHgwMGMyLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGNhLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGM5LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGM5LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGM5LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGM5LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGM5LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGM5LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGM5LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGM5LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGM5LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGM5LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGM5LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGM5LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGM5LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGM5LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGM5LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGM5LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGM5LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGM5LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMiwgMHgwMGMxLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAyMCwgMHgwMGMyLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGNhLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGMzLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGM0LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGM1LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGM2LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGM3LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGM4LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGM5LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGMzLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGM0LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGM1LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGM2LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGM3LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGM4LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGM5LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDA0MCwgMHgwMGMxLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAxNywgMHgwMGMyLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGNhLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGMzLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGM0LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGM1LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGM2LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGM3LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGM4LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGM5LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGMzLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGM0LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGM1LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGM2LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGM3LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGM4LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGM5LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDBjMCwgMHgwMGMxLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGMyLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGNhLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDIsIDB4YzA0MCwgMHgwMDAxLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDEsIDB4MDAwMCwgMHgwMDA4LCAwKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDEsIDB4MDAwMCwgMHgwMDA5LCAwKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDEsIDB4MDAwMCwgMHgwMDBhLCAwKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDEsIDB4MDAwMCwgMHgwMDBiLCAwKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDEsIDB4MDAwMCwgMHgwMDBjLCAwKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDEsIDB4MDAwMCwgMHgwMDBkLCAwKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDEsIDB4MDAwMCwgMHgwMDBlLCAwKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDEsIDB4MDAwMCwgMHgwMDBmLCAwKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDEsIDB4MDAwMCwgMHgwMDEwLCAwKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDEsIDB4MDAwYiwgMHgwMDA4LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDEsIDB4MDAzNCwgMHgwMDA5LCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDEsIDB4MDAwMCwgMHgwMDBhLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDEsIDB4MDAyZSwgMHgwMDBiLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDEsIDB4MDBkNiwgMHgwMDBjLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDEsIDB4MDBmYywgMHgwMDBkLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDEsIDB4MDBmMSwgMHgwMDBlLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDEsIDB4MDBkYSwgMHgwMDBmLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDEsIDB4MDAzNiwgMHgwMDEwLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDEsIDB4MDAwMCwgMHgwMDAxLCAwKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDEsIDB4MDA2NCwgMHgwMDAxLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDEsIDB4MDA1OSwgMHgwMDUxLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDEsIDB4MDAzZiwgMHgwMDUyLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDEsIDB4MDA5NCwgMHgwMDUzLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDEsIDB4MDBmZiwgMHgwMDExLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDEsIDB4MDAwMywgMHgwMDEyLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDEsIDB4MDBmNywgMHgwMDEzLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwOSwgMHgwMDExLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMDAxLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMDAwLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAyMCwgMHgwMGMxLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAxMCwgMHgwMGMyLCAxKTsKLQkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDAsIDB4MDAwMCwgMHgwMGNhLCAxKTsKLQkJdWx0cmFjYW1fYWx0ZXJuYXRlU2V0dGluZyh1dmQsIDB4MDQpOwotCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMiwgMHgwMDAwLCAweDAwMDEsIDEpOwotCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMiwgMHgwMDAwLCAweDAwMDEsIDEpOwotCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMiwgMHgwMDAwLCAweDAwMDYsIDEpOwotCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMiwgMHg5MDAwLCAweDAwMDcsIDEpOwotCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMiwgMHgwMDQyLCAweDAwMDEsIDEpOwotCQl1bHRyYWNhbV92ZWlvKHV2ZCwgMHgwMiwgMHgwMDAwLCAweDAwMGIsIDApOwotCQl1bHRyYWNhbV9yZXNldFBpcGUodXZkKTsKLQkJVUxUUkFDQU1fVCh1dmQpLT5pbml0aWFsaXplZCA9IChzZXR1cF9vayAhPSAwKTsKLQl9Ci0JcmV0dXJuIHNldHVwX29rOwotfQotCi1zdGF0aWMgdm9pZCB1bHRyYWNhbV9jb25maWd1cmVfdmlkZW8oc3RydWN0IHV2ZCAqdXZkKQotewotCWlmICh1dmQgPT0gTlVMTCkKLQkJcmV0dXJuOwotCi0JUkVTVFJJQ1RfVE9fUkFOR0UoaW5pdF9icmlnaHRuZXNzLCAwLCAyNTUpOwotCVJFU1RSSUNUX1RPX1JBTkdFKGluaXRfY29udHJhc3QsIDAsIDI1NSk7Ci0JUkVTVFJJQ1RfVE9fUkFOR0UoaW5pdF9jb2xvciwgMCwgMjU1KTsKLQlSRVNUUklDVF9UT19SQU5HRShpbml0X2h1ZSwgMCwgMjU1KTsKLQlSRVNUUklDVF9UT19SQU5HRShodWVfY29ycmVjdGlvbiwgMCwgMjU1KTsKLQotCW1lbXNldCgmdXZkLT52cGljLCAwLCBzaXplb2YodXZkLT52cGljKSk7Ci0JbWVtc2V0KCZ1dmQtPnZwaWNfb2xkLCAweDU1LCBzaXplb2YodXZkLT52cGljX29sZCkpOwotCi0JdXZkLT52cGljLmNvbG91ciA9IGluaXRfY29sb3IgPDwgODsKLQl1dmQtPnZwaWMuaHVlID0gaW5pdF9odWUgPDwgODsKLQl1dmQtPnZwaWMuYnJpZ2h0bmVzcyA9IGluaXRfYnJpZ2h0bmVzcyA8PCA4OwotCXV2ZC0+dnBpYy5jb250cmFzdCA9IGluaXRfY29udHJhc3QgPDwgODsKLQl1dmQtPnZwaWMud2hpdGVuZXNzID0gMTA1IDw8IDg7IC8qIFRoaXMgb25lIGlzbid0IHVzZWQgKi8KLQl1dmQtPnZwaWMuZGVwdGggPSAyNDsKLQl1dmQtPnZwaWMucGFsZXR0ZSA9IFZJREVPX1BBTEVUVEVfUkdCMjQ7Ci0KLQltZW1zZXQoJnV2ZC0+dmNhcCwgMCwgc2l6ZW9mKHV2ZC0+dmNhcCkpOwotCXN0cmNweSh1dmQtPnZjYXAubmFtZSwgIklCTSBVbHRyYSBDYW1lcmEiKTsKLQl1dmQtPnZjYXAudHlwZSA9IFZJRF9UWVBFX0NBUFRVUkU7Ci0JdXZkLT52Y2FwLmNoYW5uZWxzID0gMTsKLQl1dmQtPnZjYXAuYXVkaW9zID0gMDsKLQl1dmQtPnZjYXAubWF4d2lkdGggPSBWSURFT1NJWkVfWCh1dmQtPmNhbnZhcyk7Ci0JdXZkLT52Y2FwLm1heGhlaWdodCA9IFZJREVPU0laRV9ZKHV2ZC0+Y2FudmFzKTsKLQl1dmQtPnZjYXAubWlud2lkdGggPSBtaW5fY2FudmFzV2lkdGg7Ci0JdXZkLT52Y2FwLm1pbmhlaWdodCA9IG1pbl9jYW52YXNIZWlnaHQ7Ci0KLQltZW1zZXQoJnV2ZC0+dmNoYW4sIDAsIHNpemVvZih1dmQtPnZjaGFuKSk7Ci0JdXZkLT52Y2hhbi5mbGFncyA9IDA7Ci0JdXZkLT52Y2hhbi50dW5lcnMgPSAwOwotCXV2ZC0+dmNoYW4uY2hhbm5lbCA9IDA7Ci0JdXZkLT52Y2hhbi50eXBlID0gVklERU9fVFlQRV9DQU1FUkE7Ci0Jc3RyY3B5KHV2ZC0+dmNoYW4ubmFtZSwgIkNhbWVyYSIpOwotfQotCi0vKgotICogdWx0cmFjYW1fcHJvYmUoKQotICoKLSAqIFRoaXMgcHJvY2VkdXJlIHF1ZXJpZXMgZGV2aWNlIGRlc2NyaXB0b3IgYW5kIGFjY2VwdHMgdGhlIGludGVyZmFjZQotICogaWYgaXQgbG9va3MgbGlrZSBvdXIgY2FtZXJhLgotICoKLSAqIEhpc3Rvcnk6Ci0gKiAxMi1Ob3YtMjAwMCBSZXdvcmtlZCB0byBjb21wbHkgd2l0aCBuZXcgcHJvYmUoKSBzaWduYXR1cmUuCi0gKiAyMy1KYW4tMjAwMSBBZGRlZCBjb21wYXRpYmlsaXR5IHdpdGggMi4yLngga2VybmVscy4KLSAqLwotc3RhdGljIGludCB1bHRyYWNhbV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmRldmlkKQotewotCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOwotCXN0cnVjdCB1dmQgKnV2ZCA9IE5VTEw7Ci0JaW50IGl4LCBpLCBuYXM7Ci0JaW50IGFjdEludGVyZmFjZT0tMSwgaW5hY3RJbnRlcmZhY2U9LTEsIG1heFBTPTA7Ci0JdW5zaWduZWQgY2hhciB2aWRlb19lcCA9IDA7Ci0KLQlpZiAoZGVidWcgPj0gMSkKLQkJZGV2X2luZm8oJmludGYtPmRldiwgInVsdHJhY2FtX3Byb2JlXG4iKTsKLQotCS8qIFdlIGRvbid0IGhhbmRsZSBtdWx0aS1jb25maWcgY2FtZXJhcyAqLwotCWlmIChkZXYtPmRlc2NyaXB0b3IuYk51bUNvbmZpZ3VyYXRpb25zICE9IDEpCi0JCXJldHVybiAtRU5PREVWOwotCi0JZGV2X2luZm8oJmludGYtPmRldiwgIklCTSBVbHRyYSBjYW1lcmEgZm91bmQgKHJldi4gMHglMDR4KVxuIiwKLQkJIGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UpKTsKLQotCS8qIFZhbGlkYXRlIGZvdW5kIGludGVyZmFjZTogbXVzdCBoYXZlIG9uZSBJU08gZW5kcG9pbnQgKi8KLQluYXMgPSBpbnRmLT5udW1fYWx0c2V0dGluZzsKLQlpZiAoZGVidWcgPiAwKQotCQlkZXZfaW5mbygmaW50Zi0+ZGV2LCAiTnVtYmVyIG9mIGFsdGVybmF0ZSBzZXR0aW5ncz0lZC5cbiIsCi0JCQkgbmFzKTsKLQlpZiAobmFzIDwgOCkgewotCQllcnIoIlRvbyBmZXcgYWx0ZXJuYXRlIHNldHRpbmdzIGZvciB0aGlzIGNhbWVyYSEiKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCS8qIFZhbGlkYXRlIGFsbCBhbHRlcm5hdGUgc2V0dGluZ3MgKi8KLQlmb3IgKGl4PTA7IGl4IDwgbmFzOyBpeCsrKSB7Ci0JCWNvbnN0IHN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmludGVyZmFjZTsKLQkJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplbmRwb2ludDsKLQotCQlpbnRlcmZhY2UgPSAmaW50Zi0+YWx0c2V0dGluZ1tpeF07Ci0JCWkgPSBpbnRlcmZhY2UtPmRlc2MuYkFsdGVybmF0ZVNldHRpbmc7Ci0JCWlmIChpbnRlcmZhY2UtPmRlc2MuYk51bUVuZHBvaW50cyAhPSAxKSB7Ci0JCQllcnIoIkludGVyZmFjZSAlZC4gaGFzICV1LiBlbmRwb2ludHMhIiwKLQkJCSAgICBpbnRlcmZhY2UtPmRlc2MuYkludGVyZmFjZU51bWJlciwKLQkJCSAgICAodW5zaWduZWQpKGludGVyZmFjZS0+ZGVzYy5iTnVtRW5kcG9pbnRzKSk7Ci0JCQlyZXR1cm4gLUVOT0RFVjsKLQkJfQotCQllbmRwb2ludCA9ICZpbnRlcmZhY2UtPmVuZHBvaW50WzBdLmRlc2M7Ci0JCWlmICh2aWRlb19lcCA9PSAwKQotCQkJdmlkZW9fZXAgPSBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzczsKLQkJZWxzZSBpZiAodmlkZW9fZXAgIT0gZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MpIHsKLQkJCWVycigiQWx0ZXJuYXRlIHNldHRpbmdzIGhhdmUgZGlmZmVyZW50IGVuZHBvaW50IGFkZHJlc3NlcyEiKTsKLQkJCXJldHVybiAtRU5PREVWOwotCQl9Ci0JCWlmICghdXNiX2VuZHBvaW50X3hmZXJfaXNvYyhlbmRwb2ludCkpIHsKLQkJCWVycigiSW50ZXJmYWNlICVkLiBoYXMgbm9uLUlTTyBlbmRwb2ludCEiLAotCQkJICAgIGludGVyZmFjZS0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyKTsKLQkJCXJldHVybiAtRU5PREVWOwotCQl9Ci0JCWlmICh1c2JfZW5kcG9pbnRfZGlyX291dChlbmRwb2ludCkpIHsKLQkJCWVycigiSW50ZXJmYWNlICVkLiBoYXMgSVNPIE9VVCBlbmRwb2ludCEiLAotCQkJICAgIGludGVyZmFjZS0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyKTsKLQkJCXJldHVybiAtRU5PREVWOwotCQl9Ci0JCWlmIChsZTE2X3RvX2NwdShlbmRwb2ludC0+d01heFBhY2tldFNpemUpID09IDApIHsKLQkJCWlmIChpbmFjdEludGVyZmFjZSA8IDApCi0JCQkJaW5hY3RJbnRlcmZhY2UgPSBpOwotCQkJZWxzZSB7Ci0JCQkJZXJyKCJNb3JlIHRoYW4gb25lIGluYWN0aXZlIGFsdC4gc2V0dGluZyEiKTsKLQkJCQlyZXR1cm4gLUVOT0RFVjsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCWlmIChhY3RJbnRlcmZhY2UgPCAwKSB7Ci0JCQkJYWN0SW50ZXJmYWNlID0gaTsKLQkJCQltYXhQUyA9IGxlMTZfdG9fY3B1KGVuZHBvaW50LT53TWF4UGFja2V0U2l6ZSk7Ci0JCQkJaWYgKGRlYnVnID4gMCkKLQkJCQkJZGV2X2luZm8oJmludGYtPmRldiwKLQkJCQkJCSAiQWN0aXZlIHNldHRpbmc9JWQuICIKLQkJCQkJCSAibWF4UFM9JWQuXG4iLCBpLCBtYXhQUyk7Ci0JCQl9IGVsc2UgewotCQkJCS8qIEdvdCBhbm90aGVyIGFjdGl2ZSBhbHQuIHNldHRpbmcgKi8KLQkJCQlpZiAobWF4UFMgPCBsZTE2X3RvX2NwdShlbmRwb2ludC0+d01heFBhY2tldFNpemUpKSB7Ci0JCQkJCS8qIFRoaXMgb25lIGlzIGJldHRlciEgKi8KLQkJCQkJYWN0SW50ZXJmYWNlID0gaTsKLQkJCQkJbWF4UFMgPSBsZTE2X3RvX2NwdShlbmRwb2ludC0+d01heFBhY2tldFNpemUpOwotCQkJCQlpZiAoZGVidWcgPiAwKSB7Ci0JCQkJCQlkZXZfaW5mbygmaW50Zi0+ZGV2LAotCQkJCQkJCSAiRXZlbiBiZXR0ZXIgY3RpdmUgIgotCQkJCQkJCSAic2V0dGluZz0lZC4gIgotCQkJCQkJCSAibWF4UFM9JWQuXG4iLAotCQkJCQkJCSBpLCBtYXhQUyk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0JaWYgKChtYXhQUyA8PSAwKSB8fCAoYWN0SW50ZXJmYWNlIDwgMCkgfHwgKGluYWN0SW50ZXJmYWNlIDwgMCkpIHsKLQkJZXJyKCJGYWlsZWQgdG8gcmVjb2duaXplIHRoZSBjYW1lcmEhIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCXV2ZCA9IHVzYnZpZGVvX0FsbG9jYXRlRGV2aWNlKGNhbXMpOwotCWlmICh1dmQgIT0gTlVMTCkgewotCQkvKiBIZXJlIHV2ZCBpcyBhIGZ1bGx5IGFsbG9jYXRlZCB1dmQgb2JqZWN0ICovCi0JCXV2ZC0+ZmxhZ3MgPSBmbGFnczsKLQkJdXZkLT5kZWJ1ZyA9IGRlYnVnOwotCQl1dmQtPmRldiA9IGRldjsKLQkJdXZkLT5pZmFjZSA9IGludGYtPmFsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlcjsKLQkJdXZkLT5pZmFjZUFsdEluYWN0aXZlID0gaW5hY3RJbnRlcmZhY2U7Ci0JCXV2ZC0+aWZhY2VBbHRBY3RpdmUgPSBhY3RJbnRlcmZhY2U7Ci0JCXV2ZC0+dmlkZW9fZW5kcCA9IHZpZGVvX2VwOwotCQl1dmQtPmlzb19wYWNrZXRfbGVuID0gbWF4UFM7Ci0JCXV2ZC0+cGFsZXR0ZUJpdHMgPSAxTCA8PCBWSURFT19QQUxFVFRFX1JHQjI0OwotCQl1dmQtPmRlZmF1bHRQYWxldHRlID0gVklERU9fUEFMRVRURV9SR0IyNDsKLQkJdXZkLT5jYW52YXMgPSBWSURFT1NJWkUoNjQwLCA0ODApOwkvKiBGSVhNRSAqLwotCQl1dmQtPnZpZGVvc2l6ZSA9IHV2ZC0+Y2FudmFzOyAvKiB1bHRyYWNhbV9zaXplX3RvX3ZpZGVvc2l6ZShzaXplKTsqLwotCi0JCS8qIEluaXRpYWxpemUgaWJtY2FtLXNwZWNpZmljIGRhdGEgKi8KLQkJYXNzZXJ0KFVMVFJBQ0FNX1QodXZkKSAhPSBOVUxMKTsKLQkJVUxUUkFDQU1fVCh1dmQpLT5jYW1lcmFfbW9kZWwgPSAwOyAvKiBOb3QgdXNlZCB5ZXQgKi8KLQkJVUxUUkFDQU1fVCh1dmQpLT5pbml0aWFsaXplZCA9IDA7Ci0KLQkJdWx0cmFjYW1fY29uZmlndXJlX3ZpZGVvKHV2ZCk7Ci0KLQkJaSA9IHVzYnZpZGVvX1JlZ2lzdGVyVmlkZW9EZXZpY2UodXZkKTsKLQkJaWYgKGkgIT0gMCkgewotCQkJZXJyKCJ1c2J2aWRlb19SZWdpc3RlclZpZGVvRGV2aWNlKCkgZmFpbGVkLiIpOwotCQkJdXZkID0gTlVMTDsKLQkJfQotCX0KLQotCWlmICh1dmQpIHsKLQkJdXNiX3NldF9pbnRmZGF0YSAoaW50ZiwgdXZkKTsKLQkJcmV0dXJuIDA7Ci0JfQotCXJldHVybiAtRUlPOwotfQotCi0KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZVtdID0gewotCXsgVVNCX0RFVklDRShVTFRSQUNBTV9WRU5ET1JfSUQsIFVMVFJBQ0FNX1BST0RVQ1RfSUQpIH0sCi0JeyB9ICAvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwotfTsKLQotLyoKLSAqIHVsdHJhY2FtX2luaXQoKQotICoKLSAqIFRoaXMgY29kZSBpcyBydW4gdG8gaW5pdGlhbGl6ZSB0aGUgZHJpdmVyLgotICovCi1zdGF0aWMgaW50IF9faW5pdCB1bHRyYWNhbV9pbml0KHZvaWQpCi17Ci0Jc3RydWN0IHVzYnZpZGVvX2NiIGNiVGJsOwotCW1lbXNldCgmY2JUYmwsIDAsIHNpemVvZihjYlRibCkpOwotCWNiVGJsLnByb2JlID0gdWx0cmFjYW1fcHJvYmU7Ci0JY2JUYmwuc2V0dXBPbk9wZW4gPSB1bHRyYWNhbV9zZXR1cF9vbl9vcGVuOwotCWNiVGJsLnZpZGVvU3RhcnQgPSB1bHRyYWNhbV92aWRlb19zdGFydDsKLQljYlRibC52aWRlb1N0b3AgPSB1bHRyYWNhbV92aWRlb19zdG9wOwotCWNiVGJsLnByb2Nlc3NEYXRhID0gdWx0cmFjYW1fUHJvY2Vzc0lzb2NEYXRhOwotCWNiVGJsLnBvc3RQcm9jZXNzID0gdXNidmlkZW9fRGVpbnRlcmxhY2VGcmFtZTsKLQljYlRibC5hZGp1c3RQaWN0dXJlID0gdWx0cmFjYW1fYWRqdXN0X3BpY3R1cmU7Ci0JY2JUYmwuZ2V0RlBTID0gdWx0cmFjYW1fY2FsY3VsYXRlX2ZwczsKLQlyZXR1cm4gdXNidmlkZW9fcmVnaXN0ZXIoCi0JCSZjYW1zLAotCQlNQVhfQ0FNRVJBUywKLQkJc2l6ZW9mKHVsdHJhY2FtX3QpLAotCQkidWx0cmFjYW0iLAotCQkmY2JUYmwsCi0JCVRISVNfTU9EVUxFLAotCQlpZF90YWJsZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCB1bHRyYWNhbV9jbGVhbnVwKHZvaWQpCi17Ci0JdXNidmlkZW9fRGVyZWdpc3RlcigmY2Ftcyk7Ci19Ci0KLU1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBpZF90YWJsZSk7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLW1vZHVsZV9pbml0KHVsdHJhY2FtX2luaXQpOwotbW9kdWxlX2V4aXQodWx0cmFjYW1fY2xlYW51cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL3VzYnZpZGVvLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL3VzYnZpZGVvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2Njk4NWIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby91c2J2aWRlby5oCisrKyAvZGV2L251bGwKQEAgLTEsMzk1ICswLDAgQEAKLS8qCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotI2lmbmRlZiB1c2J2aWRlb19oCi0jZGVmaW5lCXVzYnZpZGVvX2gKLQotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+Ci0jaW5jbHVkZSA8bGludXgvdXNiLmg+Ci0jaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KLQotLyogTW9zdCBoZWxwZnVsIGRlYnVnZ2luZyBhaWQgKi8KLSNkZWZpbmUgYXNzZXJ0KGV4cHIpICgodm9pZCkgKChleHByKSA/IDAgOiAoZXJyKCJhc3NlcnQgZmFpbGVkIGF0IGxpbmUgJWQiLF9fTElORV9fKSkpKQotCi0jZGVmaW5lIFVTQlZJREVPX1JFUE9SVF9TVEFUUwkxCS8qIFNldCB0byAwIHRvIGJsb2NrIHN0YXRpc3RpY3Mgb24gY2xvc2UgKi8KLQotLyogQml0IGZsYWdzIChvcHRpb25zKSAqLwotI2RlZmluZSBGTEFHU19SRVRSWV9WSURJT0NTWU5DCQkoMSA8PCAwKQotI2RlZmluZQlGTEFHU19NT05PQ0hST01FCQkoMSA8PCAxKQotI2RlZmluZSBGTEFHU19ESVNQTEFZX0hJTlRTCQkoMSA8PCAyKQotI2RlZmluZSBGTEFHU19PVkVSTEFZX1NUQVRTCQkoMSA8PCAzKQotI2RlZmluZSBGTEFHU19GT1JDRV9URVNUUEFUVEVSTgkJKDEgPDwgNCkKLSNkZWZpbmUgRkxBR1NfU0VQQVJBVEVfRlJBTUVTCQkoMSA8PCA1KQotI2RlZmluZSBGTEFHU19DTEVBTl9GUkFNRVMJCSgxIDw8IDYpCi0jZGVmaW5lCUZMQUdTX05PX0RFQ09ESU5HCQkoMSA8PCA3KQotCi0vKiBCaXQgZmxhZ3MgZm9yIGZyYW1lcyAoYXBwbHkgdG8gdGhlIGZyYW1lIHdoZXJlIHRoZXkgYXJlIHNwZWNpZmllZCkgKi8KLSNkZWZpbmUgVVNCVklERU9fRlJBTUVfRkxBR19TT0ZUV0FSRV9DT05UUkFTVAkoMSA8PCAwKQotCi0vKiBDYW1lcmEgY2FwYWJpbGl0aWVzIChtYXhpbXVtKSAqLwotI2RlZmluZSBDQU1FUkFfVVJCX0ZSQU1FUyAgICAgICAzMgotI2RlZmluZSBDQU1FUkFfTUFYX0lTT19QQUNLRVQgICAxMDIzIC8qIDEwMjIgYWN0dWFsbHkgc2VudCBieSBjYW1lcmEgKi8KLSNkZWZpbmUgRlJBTUVTX1BFUl9ERVNDCQkoQ0FNRVJBX1VSQl9GUkFNRVMpCi0jZGVmaW5lIEZSQU1FX1NJWkVfUEVSX0RFU0MJKENBTUVSQV9NQVhfSVNPX1BBQ0tFVCkKLQotLyogVGhpcyBtYWNybyByZXN0cmljdHMgYW4gaW50IHZhcmlhYmxlIHRvIGFuIGluY2x1c2l2ZSByYW5nZSAqLwotI2RlZmluZSBSRVNUUklDVF9UT19SQU5HRSh2LG1pLG1hKSB7IGlmICgodikgPCAobWkpKSAodikgPSAobWkpOyBlbHNlIGlmICgodikgPiAobWEpKSAodikgPSAobWEpOyB9Ci0KLSNkZWZpbmUgVjRMX0JZVEVTX1BFUl9QSVhFTCAgICAgMwkvKiBCZWNhdXNlIHdlIHByb2R1Y2UgUkdCMjQgKi8KLQotLyoKLSAqIFVzZSB0aGlzIG1hY3JvIHRvIGNvbnN0cnVjdCBjb25zdGFudHMgZm9yIGRpZmZlcmVudCB2aWRlbyBzaXplcy4KLSAqIFdlIGhhdmUgdG8gZGVhbCB3aXRoIGRpZmZlcmVudCB2aWRlbyBzaXplcyB0aGF0IGhhdmUgdG8gYmUKLSAqIGNvbmZpZ3VyZWQgaW4gdGhlIGRldmljZSBvciBjb21wYXJlZCBhZ2FpbnN0IHdoZW4gd2UgcmVjZWl2ZQotICogYSBkYXRhLiBOb3JtYWxseSBvbmUgd291bGQgZGVmaW5lIGEgYnVuY2ggb2YgVklERU9TSVpFX3hfYnlfeQotICogI2RlZmluZXMgYW5kIHRoYXQncyB0aGUgZW5kIG9mIHN0b3J5LiBIb3dldmVyIHRoaXMgc29sdXRpb24KLSAqIGRvZXMgbm90IGFsbG93IHRvIGNvbnZlcnQgYmV0d2VlbiByZWFsIHBpeGVsIHNpemVzIGFuZCB0aGUKLSAqIGNvbnN0YW50IChpbnRlZ2VyKSB2YWx1ZSB0aGF0IG1heSBiZSB1c2VkIHRvIHRhZyBhIGZyYW1lIG9yCi0gKiB3aGF0ZXZlci4gVGhlIHNldCBvZiBtYWNyb3MgYmVsb3cgY29uc3RydWN0cyB2aWRlb3NpemUgY29uc3RhbnRzCi0gKiBmcm9tIHRoZSBwaXhlbCBzaXplIGFuZCBhbGxvd3MgdG8gcmVjb25zdHJ1Y3QgdGhlIHBpeGVsIHNpemUKLSAqIGZyb20gdGhlIGNvbWJpbmVkIHZhbHVlIGxhdGVyLgotICovCi0jZGVmaW5lCVZJREVPU0laRSh4LHkpCSgoKHgpICYgMHhGRkZGTCkgfCAoKCh5KSAmIDB4RkZGRkwpIDw8IDE2KSkKLSNkZWZpbmUJVklERU9TSVpFX1godnMpCSgodnMpICYgMHhGRkZGTCkKLSNkZWZpbmUJVklERU9TSVpFX1kodnMpCSgoKHZzKSA+PiAxNikgJiAweEZGRkZMKQotdHlwZWRlZiB1bnNpZ25lZCBsb25nIHZpZGVvc2l6ZV90OwotCi0vKgotICogVGhpcyBtYWNybyBjaGVja3MgaWYgdGhlIGNhbWVyYSBpcyBzdGlsbCBvcGVyYXRpb25hbC4gVGhlICd1dmQnCi0gKiBwb2ludGVyIG11c3QgYmUgdmFsaWQsIHV2ZC0+ZGV2IG11c3QgYmUgdmFsaWQsIHdlIGFyZSBub3QKLSAqIHJlbW92aW5nIHRoZSBkZXZpY2UgYW5kIHRoZSBkZXZpY2UgaGFzIG5vdCBlcnJlZCBvbiB1cy4KLSAqLwotI2RlZmluZSBDQU1FUkFfSVNfT1BFUkFUSU9OQUwodXZkKSAoXAotCSh1dmQgIT0gTlVMTCkgJiYgXAotCSgodXZkKS0+ZGV2ICE9IE5VTEwpICYmIFwKLQkoKHV2ZCktPmxhc3RfZXJyb3IgPT0gMCkgJiYgXAotCSghKHV2ZCktPnJlbW92ZV9wZW5kaW5nKSkKLQotLyoKLSAqIFdlIHVzZSBtYWNyb3MgdG8gZG8gWVVWIC0+IFJHQiBjb252ZXJzaW9uIGJlY2F1c2UgdGhpcyBpcwotICogdmVyeSBpbXBvcnRhbnQgZm9yIHNwZWVkIGFuZCB0b3RhbGx5IHVuaW1wb3J0YW50IGZvciBzaXplLgotICoKLSAqIFlVViAtPiBSR0IgQ29udmVyc2lvbgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKgotICogQiA9IDEuMTY0KihZLTE2KQkJICAgICsgMi4wMTgqKFYtMTI4KQotICogRyA9IDEuMTY0KihZLTE2KSAtIDAuODEzKihVLTEyOCkgLSAwLjM5MSooVi0xMjgpCi0gKiBSID0gMS4xNjQqKFktMTYpICsgMS41OTYqKFUtMTI4KQotICoKLSAqIElmIHlvdSBmYW5jeSBpbnRlZ2VyIGFyaXRobWV0aWNzIChhcyB5b3Ugc2hvdWxkKSwgaGVhciB0aGlzOgotICoKLSAqIDY1NTM2KkIgPSA3NjI4NCooWS0xNikJCSAgKyAxMzIyNTIqKFYtMTI4KQotICogNjU1MzYqRyA9IDc2Mjg0KihZLTE2KSAtICA1MzI4MSooVS0xMjgpIC0gIDI1NjI1KihWLTEyOCkKLSAqIDY1NTM2KlIgPSA3NjI4NCooWS0xNikgKyAxMDQ1OTUqKFUtMTI4KQotICoKLSAqIE1ha2Ugc3VyZSB0aGUgb3V0cHV0IHZhbHVlcyBhcmUgd2l0aGluIFswLi4yNTVdIHJhbmdlLgotICovCi0jZGVmaW5lIExJTUlUX1JHQih4KSAoKCh4KSA8IDApID8gMCA6ICgoKHgpID4gMjU1KSA/IDI1NSA6ICh4KSkpCi0jZGVmaW5lIFlVVl9UT19SR0JfQllfVEhFX0JPT0sobXksbXUsbXYsbXIsbWcsbWIpIHsgXAotICAgIGludCBtbV95LCBtbV95YywgbW1fdSwgbW1fdiwgbW1fciwgbW1fZywgbW1fYjsgXAotICAgIG1tX3kgPSAobXkpIC0gMTY7ICBcCi0gICAgbW1fdSA9IChtdSkgLSAxMjg7IFwKLSAgICBtbV92ID0gKG12KSAtIDEyODsgXAotICAgIG1tX3ljPSBtbV95ICogNzYyODQ7IFwKLSAgICBtbV9iID0gKG1tX3ljCQkrIDEzMjI1MiptbV92CSkgPj4gMTY7IFwKLSAgICBtbV9nID0gKG1tX3ljIC0gIDUzMjgxKm1tX3UgLSAgMjU2MjUqbW1fdgkpID4+IDE2OyBcCi0gICAgbW1fciA9IChtbV95YyArIDEwNDU5NSptbV91CQkJKSA+PiAxNjsgXAotICAgIG1iID0gTElNSVRfUkdCKG1tX2IpOyBcCi0gICAgbWcgPSBMSU1JVF9SR0IobW1fZyk7IFwKLSAgICBtciA9IExJTUlUX1JHQihtbV9yKTsgXAotfQotCi0jZGVmaW5lCVJJTkdfUVVFVUVfU0laRQkJKDEyOCoxMDI0KQkvKiBNdXN0IGJlIGEgcG93ZXIgb2YgMiAqLwotI2RlZmluZQlSSU5HX1FVRVVFX0FEVkFOQ0VfSU5ERVgocnEsaW5kLG4pIChycSktPmluZCA9ICgocnEpLT5pbmQgKyAobikpICYgKChycSktPmxlbmd0aC0xKQotI2RlZmluZQlSSU5HX1FVRVVFX0RFUVVFVUVfQllURVMocnEsbikgUklOR19RVUVVRV9BRFZBTkNFX0lOREVYKHJxLHJpLG4pCi0jZGVmaW5lCVJJTkdfUVVFVUVfUEVFSyhycSxvZnMpICgocnEpLT5xdWV1ZVsoKG9mcykgKyAocnEpLT5yaSkgJiAoKHJxKS0+bGVuZ3RoLTEpXSkKLQotc3RydWN0IFJpbmdRdWV1ZSB7Ci0JdW5zaWduZWQgY2hhciAqcXVldWU7CS8qIERhdGEgZnJvbSB0aGUgSXNvYyBkYXRhIHB1bXAgKi8KLQlpbnQgbGVuZ3RoOwkJLyogSG93IG1hbnkgYnl0ZXMgYWxsb2NhdGVkIGZvciB0aGUgcXVldWUgKi8KLQlpbnQgd2k7CQkJLyogVGhhdCdzIHdoZXJlIHdlIHdyaXRlICovCi0JaW50IHJpOwkJCS8qIFJlYWQgZnJvbSBoZXJlIHVudGlsIHlvdSBoaXQgd3JpdGUgaW5kZXggKi8KLQl3YWl0X3F1ZXVlX2hlYWRfdCB3cWg7CS8qIFByb2Nlc3NlcyB3YWl0aW5nICovCi19OwotCi1lbnVtIFNjYW5TdGF0ZSB7Ci0JU2NhblN0YXRlX1NjYW5uaW5nLAkvKiBTY2FubmluZyBmb3IgaGVhZGVyICovCi0JU2NhblN0YXRlX0xpbmVzCQkvKiBQYXJzaW5nIGxpbmVzICovCi19OwotCi0vKiBDb21wbGV0aW9uIHN0YXRlcyBvZiB0aGUgZGF0YSBwYXJzZXIgKi8KLWVudW0gUGFyc2VTdGF0ZSB7Ci0Jc2Nhbl9Db250aW51ZSwJCS8qIEp1c3QgcGFyc2UgbmV4dCBpdGVtICovCi0Jc2Nhbl9OZXh0RnJhbWUsCQkvKiBGcmFtZSBkb25lLCBzZW5kIGl0IHRvIFY0TCAqLwotCXNjYW5fT3V0LAkJLyogTm90IGVub3VnaCBkYXRhIGZvciBmcmFtZSAqLwotCXNjYW5fRW5kUGFyc2UJCS8qIEVuZCBwYXJzaW5nICovCi19OwotCi1lbnVtIEZyYW1lU3RhdGUgewotCUZyYW1lU3RhdGVfVW51c2VkLAkvKiBVbnVzZWQgKG5vIE1DQVBUVVJFKSAqLwotCUZyYW1lU3RhdGVfUmVhZHksCS8qIFJlYWR5IHRvIHN0YXJ0IGdyYWJiaW5nICovCi0JRnJhbWVTdGF0ZV9HcmFiYmluZywJLyogSW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgZ3JhYmJlZCBpbnRvICovCi0JRnJhbWVTdGF0ZV9Eb25lLAkvKiBGaW5pc2hlZCBncmFiYmluZywgYnV0IG5vdCBiZWVuIHN5bmNlZCB5ZXQgKi8KLQlGcmFtZVN0YXRlX0RvbmVfSG9sZCwJLyogQXJlIHN5bmNpbmcgb3IgcmVhZGluZyAqLwotCUZyYW1lU3RhdGVfRXJyb3IsCS8qIFNvbWV0aGluZyBiYWQgaGFwcGVuZWQgd2hpbGUgcHJvY2Vzc2luZyAqLwotfTsKLQotLyoKLSAqIFNvbWUgZnJhbWVzIG1heSBjb250YWluIG9ubHkgZXZlbiBvciBvZGQgbGluZXMuIFRoaXMgdHlwZQotICogc3BlY2lmaWVzIHdoYXQgdHlwZSBvZiBkZWludGVybGFjaW5nIGlzIHJlcXVpcmVkLgotICovCi1lbnVtIERlaW50ZXJsYWNlIHsKLQlEZWludGVybGFjZV9Ob25lPTAsCi0JRGVpbnRlcmxhY2VfRmlsbE9kZExpbmVzLAotCURlaW50ZXJsYWNlX0ZpbGxFdmVuTGluZXMKLX07Ci0KLSNkZWZpbmUgVVNCVklERU9fTlVNRlJBTUVTCTIJLyogSG93IG1hbnkgZnJhbWVzIHdlIHdvcmsgd2l0aCAqLwotI2RlZmluZSBVU0JWSURFT19OVU1TQlVGCTIJLyogSG93IG1hbnkgVVJCcyBsaW5rZWQgaW4gYSByaW5nICovCi0KLS8qIFRoaXMgc3RydWN0dXJlIHJlcHJlc2VudHMgb25lIElzb2MgcmVxdWVzdCAtIFVSQiBhbmQgYnVmZmVyICovCi1zdHJ1Y3QgdXNidmlkZW9fc2J1ZiB7Ci0JY2hhciAqZGF0YTsKLQlzdHJ1Y3QgdXJiICp1cmI7Ci19OwotCi1zdHJ1Y3QgdXNidmlkZW9fZnJhbWUgewotCWNoYXIgKmRhdGE7CQkvKiBGcmFtZSBidWZmZXIgKi8KLQl1bnNpZ25lZCBsb25nIGhlYWRlcjsJLyogU2lnbmlmaWNhbnQgYml0cyBmcm9tIHRoZSBoZWFkZXIgKi8KLQotCXZpZGVvc2l6ZV90IGNhbnZhczsJLyogVGhlIGNhbnZhcyAobWF4LiBpbWFnZSkgYWxsb2NhdGVkICovCi0JdmlkZW9zaXplX3QgcmVxdWVzdDsJLyogVGhhdCdzIHdoYXQgdGhlIGFwcGxpY2F0aW9uIGFza2VkIGZvciAqLwotCXVuc2lnbmVkIHNob3J0IHBhbGV0dGU7CS8qIFRoZSBkZXNpcmVkIGZvcm1hdCAqLwotCi0JZW51bSBGcmFtZVN0YXRlIGZyYW1lU3RhdGU7LyogU3RhdGUgb2YgZ3JhYmJpbmcgKi8KLQllbnVtIFNjYW5TdGF0ZSBzY2Fuc3RhdGU7CS8qIFN0YXRlIG9mIHNjYW5uaW5nICovCi0JZW51bSBEZWludGVybGFjZSBkZWludGVybGFjZTsKLQlpbnQgZmxhZ3M7CQkvKiBVU0JWSURFT19GUkFNRV9GTEFHX3h4eCBiaXQgZmxhZ3MgKi8KLQotCWludCBjdXJsaW5lOwkJLyogTGluZSBvZiBmcmFtZSB3ZSdyZSB3b3JraW5nIG9uICovCi0KLQlsb25nIHNlcVJlYWRfTGVuZ3RoOwkvKiBSYXcgZGF0YSBsZW5ndGggb2YgZnJhbWUgKi8KLQlsb25nIHNlcVJlYWRfSW5kZXg7CS8qIEFtb3VudCBvZiBkYXRhIHRoYXQgaGFzIGJlZW4gYWxyZWFkeSByZWFkICovCi0KLQl2b2lkICp1c2VyOwkJLyogQWRkaXRpb25hbCBkYXRhIHRoYXQgdXNlciBtYXkgbmVlZCAqLwotfTsKLQotLyogU3RhdGlzdGljcyB0aGF0IGNhbiBiZSBvdmVybGFpZCBvbiBzY3JlZW4gKi8KLXN0cnVjdCB1c2J2aWRlb19zdGF0aXN0aWNzIHsKLQl1bnNpZ25lZCBsb25nIGZyYW1lX251bTsJLyogU2VxdWVudGlhbCBudW1iZXIgb2YgdGhlIGZyYW1lICovCi0JdW5zaWduZWQgbG9uZyB1cmJfY291bnQ7ICAgICAgICAvKiBIb3cgbWFueSBVUkJzIHdlIHJlY2VpdmVkIHNvIGZhciAqLwotCXVuc2lnbmVkIGxvbmcgdXJiX2xlbmd0aDsgICAgICAgLyogTGVuZ3RoIG9mIGxhc3QgVVJCICovCi0JdW5zaWduZWQgbG9uZyBkYXRhX2NvdW50OyAgICAgICAvKiBIb3cgbWFueSBieXRlcyB3ZSByZWNlaXZlZCAqLwotCXVuc2lnbmVkIGxvbmcgaGVhZGVyX2NvdW50OyAgICAgLyogSG93IG1hbnkgZnJhbWUgaGVhZGVycyB3ZSBmb3VuZCAqLwotCXVuc2lnbmVkIGxvbmcgaXNvX3NraXBfY291bnQ7CS8qIEhvdyBtYW55IGVtcHR5IElTTyBwYWNrZXRzIHJlY2VpdmVkICovCi0JdW5zaWduZWQgbG9uZyBpc29fZXJyX2NvdW50OwkvKiBIb3cgbWFueSBiYWQgSVNPIHBhY2tldHMgcmVjZWl2ZWQgKi8KLX07Ci0KLXN0cnVjdCB1c2J2aWRlbzsKLQotc3RydWN0IHV2ZCB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSB2ZGV2OwkvKiBNdXN0IGJlIHRoZSBmaXJzdCBmaWVsZCEgKi8KLQlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2OwotCXN0cnVjdCB1c2J2aWRlbyAqaGFuZGxlOwkvKiBQb2ludHMgYmFjayB0byB0aGUgc3RydWN0IHVzYnZpZGVvICovCi0Jdm9pZCAqdXNlcl9kYXRhOwkJLyogQ2FtZXJhLWRlcGVuZGVudCBkYXRhICovCi0JaW50IHVzZXJfc2l6ZTsJCQkvKiBTaXplIG9mIHRoYXQgY2FtZXJhLWRlcGVuZGVudCBkYXRhICovCi0JaW50IGRlYnVnOwkJCS8qIERlYnVnIGxldmVsIGZvciB1c2J2aWRlbyAqLwotCXVuc2lnbmVkIGNoYXIgaWZhY2U7CQkvKiBWaWRlbyBpbnRlcmZhY2UgbnVtYmVyICovCi0JdW5zaWduZWQgY2hhciB2aWRlb19lbmRwOwotCXVuc2lnbmVkIGNoYXIgaWZhY2VBbHRBY3RpdmU7Ci0JdW5zaWduZWQgY2hhciBpZmFjZUFsdEluYWN0aXZlOyAvKiBBbHQgc2V0dGluZ3MgKi8KLQl1bnNpZ25lZCBsb25nIGZsYWdzOwkJLyogRkxBR1NfVVNCVklERU9feHh4ICovCi0JdW5zaWduZWQgbG9uZyBwYWxldHRlQml0czsJLyogV2hpY2ggcGFsZXR0ZXMgd2UgYWNjZXB0PyAqLwotCXVuc2lnbmVkIHNob3J0IGRlZmF1bHRQYWxldHRlOwkvKiBXaGF0IHBhbGV0dGUgdG8gdXNlIGZvciByZWFkKCkgKi8KLQlzdHJ1Y3QgbXV0ZXggbG9jazsKLQlpbnQgdXNlcjsJCS8qIHVzZXIgY291bnQgZm9yIGV4Y2x1c2l2ZSB1c2UgKi8KLQotCXZpZGVvc2l6ZV90IHZpZGVvc2l6ZTsJLyogQ3VycmVudCBzZXR0aW5nICovCi0JdmlkZW9zaXplX3QgY2FudmFzOwkvKiBUaGlzIGlzIHRoZSB3aWR0aCxoZWlnaHQgb2YgdGhlIFY0TCBjYW52YXMgKi8KLQlpbnQgbWF4X2ZyYW1lX3NpemU7CS8qIEJ5dGVzIGluIG9uZSB2aWRlbyBmcmFtZSAqLwotCi0JaW50IHV2ZF91c2VkOyAgICAgICAgCS8qIElzIHRoaXMgc3RydWN0dXJlIGluIHVzZT8gKi8KLQlpbnQgc3RyZWFtaW5nOwkJLyogQXJlIHdlIHN0cmVhbWluZyBJc29jaHJvbm91cz8gKi8KLQlpbnQgZ3JhYmJpbmc7CQkvKiBBcmUgd2UgZ3JhYmJpbmc/ICovCi0JaW50IHNldHRpbmdzQWRqdXN0ZWQ7CS8qIEhhdmUgd2UgYWRqdXN0ZWQgY29udHJhc3QgZXRjLj8gKi8KLQlpbnQgbGFzdF9lcnJvcjsJCS8qIFdoYXQgY2FsYW1pdHkgc3RydWNrIHVzPyAqLwotCi0JY2hhciAqZmJ1ZjsJCS8qIFZpZGVvZGV2IGJ1ZmZlciBhcmVhICovCi0JaW50IGZidWZfc2l6ZTsJCS8qIFZpZGVvZGV2IGJ1ZmZlciBzaXplICovCi0KLQlpbnQgY3VyZnJhbWU7Ci0JaW50IGlzb19wYWNrZXRfbGVuOwkvKiBWaWRlb21vZGUtZGVwZW5kZW50LCBzYXZlcyBidXMgYmFuZHdpZHRoICovCi0KLQlzdHJ1Y3QgUmluZ1F1ZXVlIGRwOwkvKiBJc29jIGRhdGEgcHVtcCAqLwotCXN0cnVjdCB1c2J2aWRlb19mcmFtZSBmcmFtZVtVU0JWSURFT19OVU1GUkFNRVNdOwotCXN0cnVjdCB1c2J2aWRlb19zYnVmIHNidWZbVVNCVklERU9fTlVNU0JVRl07Ci0KLQl2b2xhdGlsZSBpbnQgcmVtb3ZlX3BlbmRpbmc7CS8qIElmIHNldCB0aGVuIGFib3V0IHRvIGV4aXQgKi8KLQotCXN0cnVjdCB2aWRlb19waWN0dXJlIHZwaWMsIHZwaWNfb2xkOwkvKiBQaWN0dXJlIHNldHRpbmdzICovCi0Jc3RydWN0IHZpZGVvX2NhcGFiaWxpdHkgdmNhcDsJCS8qIFZpZGVvIGNhcGFiaWxpdGllcyAqLwotCXN0cnVjdCB2aWRlb19jaGFubmVsIHZjaGFuOwkvKiBNYXkgYmUgdXNlZCBmb3IgdHVuZXIgc3VwcG9ydCAqLwotCXN0cnVjdCB1c2J2aWRlb19zdGF0aXN0aWNzIHN0YXRzOwotCWNoYXIgdmlkZW9OYW1lWzMyXTsJCS8qIEhvbGRzIG5hbWUgbGlrZSAidmlkZW83IiAqLwotfTsKLQotLyoKLSAqIHVzYnZpZGVvIGNhbGxiYWNrcyAodmlydHVhbCBtZXRob2RzKS4gVGhleSBhcmUgc2V0IHdoZW4gdXNidmlkZW8KLSAqIHNlcnZpY2VzIGFyZSByZWdpc3RlcmVkLiBBbGwgb2YgdGhlc2UgZGVmYXVsdCB0byBOVUxMLCBleGNlcHQgdGhvc2UKLSAqIHRoYXQgZGVmYXVsdCB0byB1c2J2aWRlby1wcm92aWRlZCBtZXRob2RzLgotICovCi1zdHJ1Y3QgdXNidmlkZW9fY2IgewotCWludCAoKnByb2JlKShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqKTsKLQl2b2lkICgqdXNlckZyZWUpKHN0cnVjdCB1dmQgKik7Ci0Jdm9pZCAoKmRpc2Nvbm5lY3QpKHN0cnVjdCB1c2JfaW50ZXJmYWNlICopOwotCWludCAoKnNldHVwT25PcGVuKShzdHJ1Y3QgdXZkICopOwotCXZvaWQgKCp2aWRlb1N0YXJ0KShzdHJ1Y3QgdXZkICopOwotCXZvaWQgKCp2aWRlb1N0b3ApKHN0cnVjdCB1dmQgKik7Ci0Jdm9pZCAoKnByb2Nlc3NEYXRhKShzdHJ1Y3QgdXZkICosIHN0cnVjdCB1c2J2aWRlb19mcmFtZSAqKTsKLQl2b2lkICgqcG9zdFByb2Nlc3MpKHN0cnVjdCB1dmQgKiwgc3RydWN0IHVzYnZpZGVvX2ZyYW1lICopOwotCXZvaWQgKCphZGp1c3RQaWN0dXJlKShzdHJ1Y3QgdXZkICopOwotCWludCAoKmdldEZQUykoc3RydWN0IHV2ZCAqKTsKLQlpbnQgKCpvdmVybGF5SG9vaykoc3RydWN0IHV2ZCAqLCBzdHJ1Y3QgdXNidmlkZW9fZnJhbWUgKik7Ci0JaW50ICgqZ2V0RnJhbWUpKHN0cnVjdCB1dmQgKiwgaW50KTsKLQlpbnQgKCpzdGFydERhdGFQdW1wKShzdHJ1Y3QgdXZkICp1dmQpOwotCXZvaWQgKCpzdG9wRGF0YVB1bXApKHN0cnVjdCB1dmQgKnV2ZCk7Ci0JaW50ICgqc2V0VmlkZW9Nb2RlKShzdHJ1Y3QgdXZkICp1dmQsIHN0cnVjdCB2aWRlb193aW5kb3cgKnZ3KTsKLX07Ci0KLXN0cnVjdCB1c2J2aWRlbyB7Ci0JaW50IG51bV9jYW1lcmFzOwkJLyogQXMgYWxsb2NhdGVkICovCi0Jc3RydWN0IHVzYl9kcml2ZXIgdXNiZHJ2OwkvKiBJbnRlcmZhY2UgdG8gdGhlIFVTQiBzdGFjayAqLwotCWNoYXIgZHJ2TmFtZVs4MF07CQkvKiBEcml2ZXIgbmFtZSAqLwotCXN0cnVjdCBtdXRleCBsb2NrOwkJLyogTXV0ZXggcHJvdGVjdGluZyBjYW1lcmEgc3RydWN0dXJlcyAqLwotCXN0cnVjdCB1c2J2aWRlb19jYiBjYjsJCS8qIFRhYmxlIG9mIGNhbGxiYWNrcyAodmlydHVhbCBtZXRob2RzKSAqLwotCXN0cnVjdCB2aWRlb19kZXZpY2UgdmR0OwkvKiBWaWRlbyBkZXZpY2UgdGVtcGxhdGUgKi8KLQlzdHJ1Y3QgdXZkICpjYW07CQkJLyogQXJyYXkgb2YgY2FtZXJhIHN0cnVjdHVyZXMgKi8KLQlzdHJ1Y3QgbW9kdWxlICptZF9tb2R1bGU7CS8qIE1pbmlkcml2ZXIgbW9kdWxlICovCi19OwotCi0KLS8qCi0gKiBUaGlzIG1hY3JvIHJldHJpZXZlcyBjYWxsYmFjayBhZGRyZXNzIGZyb20gdGhlIHN0cnVjdCB1dmQgb2JqZWN0LgotICogTm8gdmFsaWRpdHkgY2hlY2tzIGFyZSBkb25lIGhlcmUsIHNvIGJlIHN1cmUgdG8gY2hlY2sgdGhlCi0gKiBjYWxsYmFjayBiZWZvcmVoYW5kIHdpdGggVkFMSURfQ0FMTEJBQ0suCi0gKi8KLSNkZWZpbmUJR0VUX0NBTExCQUNLKHV2ZCxjYk5hbWUpICgodXZkKS0+aGFuZGxlLT5jYi5jYk5hbWUpCi0KLS8qCi0gKiBUaGlzIG1hY3JvIHJldHVybnMgZWl0aGVyIGNhbGxiYWNrIHBvaW50ZXIgb3IgTlVMTC4gVGhpcyBpcyBzYWZlCi0gKiBtYWNybywgbWVhbmluZyB0aGF0IG1vc3Qgb2YgY29tcG9uZW50cyBvZiBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQKLSAqIG1heSBiZSBOVUxMIC0gdGhpcyBvbmx5IHJlc3VsdHMgaW4gTlVMTCBiZWluZyByZXR1cm5lZC4gWW91IG1heQotICogd2lzaCB0byB1c2UgdGhpcyBtYWNybyB0byBtYWtlIHN1cmUgdGhhdCB0aGUgY2FsbGJhY2sgaXMgY2FsbGFibGUuCi0gKiBIb3dldmVyIGtlZXAgaW4gbWluZCB0aGF0IHRob3NlIGNoZWNrcyB0YWtlIHRpbWUuCi0gKi8KLSNkZWZpbmUJVkFMSURfQ0FMTEJBQ0sodXZkLGNiTmFtZSkgKCgoKHV2ZCkgIT0gTlVMTCkgJiYgXAotCQkoKHV2ZCktPmhhbmRsZSAhPSBOVUxMKSkgPyBHRVRfQ0FMTEJBQ0sodXZkLGNiTmFtZSkgOiBOVUxMKQotCi1pbnQgIFJpbmdRdWV1ZV9EZXF1ZXVlKHN0cnVjdCBSaW5nUXVldWUgKnJxLCB1bnNpZ25lZCBjaGFyICpkc3QsIGludCBsZW4pOwotaW50ICBSaW5nUXVldWVfRW5xdWV1ZShzdHJ1Y3QgUmluZ1F1ZXVlICpycSwgY29uc3QgdW5zaWduZWQgY2hhciAqY2RhdGEsIGludCBuKTsKLXZvaWQgUmluZ1F1ZXVlX1dha2VVcEludGVycnVwdGlibGUoc3RydWN0IFJpbmdRdWV1ZSAqcnEpOwotdm9pZCBSaW5nUXVldWVfRmx1c2goc3RydWN0IFJpbmdRdWV1ZSAqcnEpOwotCi1zdGF0aWMgaW5saW5lIGludCBSaW5nUXVldWVfR2V0TGVuZ3RoKGNvbnN0IHN0cnVjdCBSaW5nUXVldWUgKnJxKQotewotCXJldHVybiAocnEtPndpIC0gcnEtPnJpICsgcnEtPmxlbmd0aCkgJiAocnEtPmxlbmd0aC0xKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgUmluZ1F1ZXVlX0dldEZyZWVTcGFjZShjb25zdCBzdHJ1Y3QgUmluZ1F1ZXVlICpycSkKLXsKLQlyZXR1cm4gcnEtPmxlbmd0aCAtIFJpbmdRdWV1ZV9HZXRMZW5ndGgocnEpOwotfQotCi12b2lkIHVzYnZpZGVvX0RyYXdMaW5lKAotCXN0cnVjdCB1c2J2aWRlb19mcmFtZSAqZnJhbWUsCi0JaW50IHgxLCBpbnQgeTEsCi0JaW50IHgyLCBpbnQgeTIsCi0JdW5zaWduZWQgY2hhciBjciwgdW5zaWduZWQgY2hhciBjZywgdW5zaWduZWQgY2hhciBjYik7Ci12b2lkIHVzYnZpZGVvX0hleER1bXAoY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGxlbik7Ci12b2lkIHVzYnZpZGVvX1NheUFuZFdhaXQoY29uc3QgY2hhciAqd2hhdCk7Ci12b2lkIHVzYnZpZGVvX1Rlc3RQYXR0ZXJuKHN0cnVjdCB1dmQgKnV2ZCwgaW50IGZ1bGxmcmFtZSwgaW50IHBtb2RlKTsKLQotLyogTWVtb3J5IGFsbG9jYXRpb24gcm91dGluZXMgKi8KLXVuc2lnbmVkIGxvbmcgdXNidmlkZW9fa3ZpcnRfdG9fcGEodW5zaWduZWQgbG9uZyBhZHIpOwotCi1pbnQgdXNidmlkZW9fcmVnaXN0ZXIoCi0Jc3RydWN0IHVzYnZpZGVvICoqcENhbXMsCi0JY29uc3QgaW50IG51bV9jYW1zLAotCWNvbnN0IGludCBudW1fZXh0cmEsCi0JY29uc3QgY2hhciAqZHJpdmVyTmFtZSwKLQljb25zdCBzdHJ1Y3QgdXNidmlkZW9fY2IgKmNiVGFibGUsCi0Jc3RydWN0IG1vZHVsZSAqbWQsCi0JY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkX3RhYmxlKTsKLXN0cnVjdCB1dmQgKnVzYnZpZGVvX0FsbG9jYXRlRGV2aWNlKHN0cnVjdCB1c2J2aWRlbyAqY2Ftcyk7Ci1pbnQgdXNidmlkZW9fUmVnaXN0ZXJWaWRlb0RldmljZShzdHJ1Y3QgdXZkICp1dmQpOwotdm9pZCB1c2J2aWRlb19EZXJlZ2lzdGVyKHN0cnVjdCB1c2J2aWRlbyAqKnV2dCk7Ci0KLWludCB1c2J2aWRlb192NGxfaW5pdGlhbGl6ZShzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYpOwotCi12b2lkIHVzYnZpZGVvX0RlaW50ZXJsYWNlRnJhbWUoc3RydWN0IHV2ZCAqdXZkLCBzdHJ1Y3QgdXNidmlkZW9fZnJhbWUgKmZyYW1lKTsKLQotLyoKLSAqIFRoaXMgY29kZSBwZXJmb3JtcyBib3VuZHMgY2hlY2tpbmcgLSB1c2UgaXQgd2hlbiB3b3JraW5nIHdpdGgKLSAqIG5ldyBmb3JtYXRzLCBvciBlbHNlIHlvdSBtYXkgZ2V0IG9vcHNlcyBhbGwgb3ZlciB0aGUgcGxhY2UuCi0gKiBJZiBwaXhlbCBmYWxscyBvdXQgb2YgYm91bmRzIHRoZW4gaXQgZ2V0cyBzaG92ZWQgYmFjayAoYXMgY2xvc2UKLSAqIHRvIHBsYWNlIG9mIG9mZmVuY2UgYXMgcG9zc2libGUpIGFuZCBpcyBwYWludGVkIGJyaWdodCByZWQuCi0gKgotICogVGhlcmUgYXJlIHR3byBpbXBvcnRhbnQgY29uY2VwdHM6IGZyYW1lIHdpZHRoLCBoZWlnaHQgYW5kCi0gKiBWNEwgY2FudmFzIHdpZHRoLCBoZWlnaHQuIFRoZSBmb3JtZXIgaXMgdGhlIGFyZWEgcmVxdWVzdGVkIGJ5Ci0gKiB0aGUgYXBwbGljYXRpb24gLWZvciB0aGlzIHZlcnkgZnJhbWUtLiBUaGUgbGF0dGVyIGlzIHRoZSBsYXJnZXN0Ci0gKiBwb3NzaWJsZSBmcmFtZSB0aGF0IHdlIGNhbiBzZXJ2ZSAod2UgYWR2ZXJ0aXNlIHRoYXQgdmlhIFY0TCBpb2N0bCkuCi0gKiBUaGUgZnJhbWUgZGF0YSBpcyBleHBlY3RlZCB0byBiZSBmb3JtYXR0ZWQgYXMgbGluZXMgb2YgbGVuZ3RoCi0gKiBWSURFT1NJWkVfWChmci0+cmVxdWVzdCksIHRvdGFsIFZJREVPU0laRV9ZKGZyYW1lLT5yZXF1ZXN0KSBsaW5lcy4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIFJHQjI0X1BVVFBJWEVMKAotCXN0cnVjdCB1c2J2aWRlb19mcmFtZSAqZnIsCi0JaW50IGl4LCBpbnQgaXksCi0JdW5zaWduZWQgY2hhciB2ciwKLQl1bnNpZ25lZCBjaGFyIHZnLAotCXVuc2lnbmVkIGNoYXIgdmIpCi17Ci0JcmVnaXN0ZXIgdW5zaWduZWQgY2hhciAqcGY7Ci0JaW50IGxpbWl0ZXIgPSAwLCBteCwgbXk7Ci0JbXggPSBpeDsKLQlteSA9IGl5OwotCWlmIChteCA8IDApIHsKLQkJbXg9MDsKLQkJbGltaXRlcisrOwotCX0gZWxzZSBpZiAobXggPj0gVklERU9TSVpFX1goKGZyKS0+cmVxdWVzdCkpIHsKLQkJbXg9IFZJREVPU0laRV9YKChmciktPnJlcXVlc3QpIC0gMTsKLQkJbGltaXRlcisrOwotCX0KLQlpZiAobXkgPCAwKSB7Ci0JCW15ID0gMDsKLQkJbGltaXRlcisrOwotCX0gZWxzZSBpZiAobXkgPj0gVklERU9TSVpFX1koKGZyKS0+cmVxdWVzdCkpIHsKLQkJbXkgPSBWSURFT1NJWkVfWSgoZnIpLT5yZXF1ZXN0KSAtIDE7Ci0JCWxpbWl0ZXIrKzsKLQl9Ci0JcGYgPSAoZnIpLT5kYXRhICsgVjRMX0JZVEVTX1BFUl9QSVhFTCooKGl5KSpWSURFT1NJWkVfWCgoZnIpLT5yZXF1ZXN0KSArIChpeCkpOwotCWlmIChsaW1pdGVyKSB7Ci0JCSpwZisrID0gMDsKLQkJKnBmKysgPSAwOwotCQkqcGYrKyA9IDB4RkY7Ci0JfSBlbHNlIHsKLQkJKnBmKysgPSAodmIpOwotCQkqcGYrKyA9ICh2Zyk7Ci0JCSpwZisrID0gKHZyKTsKLQl9Ci19Ci0KLSNlbmRpZiAvKiB1c2J2aWRlb19oICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL3ZpY2FtLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL3ZpY2FtLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjMTdjY2UuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby92aWNhbS5jCisrKyAvZGV2L251bGwKQEAgLTEsOTUyICswLDAgQEAKLS8qCi0gKiBVU0IgVmlDYW0gV2ViQ2FtIGRyaXZlcgotICogQ29weXJpZ2h0IChjKSAyMDAyIEpvZSBCdXJrcyAoamJ1cmtzQHdhdmljbGUub3JnKSwKLSAqICAgICAgICAgICAgICAgICAgICBDaHJpc3RvcGhlciBMIENoZW5leSAoY2NoZW5leUBjaGVuZXkuY3gpLAotICogICAgICAgICAgICAgICAgICAgIFBhdmVsIE1hY2hlayAocGF2ZWxAdWN3LmN6KSwKLSAqICAgICAgICAgICAgICAgICAgICBKb2huIFR5bmVyIChqdHluZXJAY3MudWNyLmVkdSksCi0gKiAgICAgICAgICAgICAgICAgICAgTW9ucm9lIFdpbGxpYW1zIChtb25yb2VAcG9ib3guY29tKQotICoKLSAqIFN1cHBvcnRzIDNDT00gSG9tZUNvbm5lY3QgUEMgRGlnaXRhbCBXZWJDYW0KLSAqIFN1cHBvcnRzIENvbXBybyBQUzM5VSBXZWJDYW0KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqCi0gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGJhc2VkIGhlYXZpbHkgb24gdGhlIENQaUEgd2ViY2FtIGRyaXZlciB3aGljaCB3YXMKLSAqIHdyaXR0ZW4gYnkgUGV0ZXIgUHJlZ2xlciwgU2NvdHQgSi4gQmVydGluIGFuZCBKb2hhbm5lcyBFcmRmZWx0Ci0gKgotICogUG9ydGlvbnMgb2YgdGhpcyBjb2RlIHdlcmUgYWxzbyBjb3BpZWQgZnJvbSB1c2J2aWRlby5jCi0gKgotICogU3BlY2lhbCB0aGFua3MgdG8gdGhlIHdob2xlIHRlYW0gYXQgU291cmNlZm9yZ2UgZm9yIGhlbHAgbWFraW5nCi0gKiB0aGlzIGRyaXZlciBiZWNvbWUgYSByZWFsaXR5LiAgTm90YWJseToKLSAqIEFuZHkgQXJtc3Ryb25nIHdobyByZXZlcnNlIGVuZ2luZWVyZWQgdGhlIGNvbG9yIGVuY29kaW5nIGFuZAotICogUGF2ZWwgTWFjaGVrIGFuZCBDaHJpcyBDaGVuZXkgd2hvIHdvcmtlZCBvbiByZXZlcnNlIGVuZ2luZWVyaW5nIHRoZQotICogICAgY2FtZXJhIGNvbnRyb2xzIGFuZCB3cm90ZSB0aGUgZmlyc3QgZ2VuZXJhdGlvbiBkcml2ZXIuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgotI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgotI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+Ci0jaW5jbHVkZSA8bGludXgvaWhleC5oPgotI2luY2x1ZGUgInVzYnZpZGVvLmgiCi0KLS8vICNkZWZpbmUgVklDQU1fREVCVUcKLQotI2lmZGVmIFZJQ0FNX0RFQlVHCi0jZGVmaW5lIEFEQkcobGluZW5vLGZtdCxhcmdzLi4uKSBwcmludGsoZm10LCBqaWZmaWVzLCBfX2Z1bmNfXywgbGluZW5vLCAjI2FyZ3MpCi0jZGVmaW5lIERCRyhmbXQsYXJncy4uLikgQURCRygoX19MSU5FX18pLEtFUk5fREVCVUcgX19GSUxFX18iKCVsZCk6JXMgKCVkKToiZm10LCMjYXJncykKLSNlbHNlCi0jZGVmaW5lIERCRyhmbW4sYXJncy4uLikgZG8ge30gd2hpbGUoMCkKLSNlbmRpZgotCi0jZGVmaW5lIERSSVZFUl9BVVRIT1IgICAgICAgICAgICJKb2UgQnVya3MsIGpidXJrc0B3YXZpY2xlLm9yZyIKLSNkZWZpbmUgRFJJVkVSX0RFU0MgICAgICAgICAgICAgIlZpQ2FtIFdlYkNhbSBEcml2ZXIiCi0KLS8qIERlZmluZSB0aGVzZSB2YWx1ZXMgdG8gbWF0Y2ggeW91ciBkZXZpY2UgKi8KLSNkZWZpbmUgVVNCX1ZJQ0FNX1ZFTkRPUl9JRAkweDA0YzEKLSNkZWZpbmUgVVNCX1ZJQ0FNX1BST0RVQ1RfSUQJMHgwMDlkCi0jZGVmaW5lIFVTQl9DT01QUk9fVkVORE9SX0lECTB4MDYwMgotI2RlZmluZSBVU0JfQ09NUFJPX1BST0RVQ1RfSUQJMHgxMDAxCi0KLSNkZWZpbmUgVklDQU1fQllURVNfUEVSX1BJWEVMICAgMwotI2RlZmluZSBWSUNBTV9NQVhfUkVBRF9TSVpFICAgICAoNTEyKjI0MisxMjgpCi0jZGVmaW5lIFZJQ0FNX01BWF9GUkFNRV9TSVpFICAgIChWSUNBTV9CWVRFU19QRVJfUElYRUwqMzIwKjI0MCkKLSNkZWZpbmUgVklDQU1fRlJBTUVTICAgICAgICAgICAgMgotCi0jZGVmaW5lIFZJQ0FNX0hFQURFUl9TSVpFICAgICAgIDY0Ci0KLS8qIHJ2bWFsbG9jIC8gcnZmcmVlIGNvcGllZCBmcm9tIHVzYnZpZGVvLmMKLSAqCi0gKiBOb3Qgc3VyZSB3aHkgdGhlc2UgYXJlIG5vdCB5ZXQgbm9uLXN0YXRpY3Mgd2hpY2ggSSBjYW4gcmVmZXJlbmNlIHRocm91Z2gKLSAqIHVzYnZpZGVvLmggdGhlIHNhbWUgYXMgaXQgaXMgaW4gMi40LjIwLiAgSSBiZXQgdGhpcyB3aWxsIGdldCBmaXhlZCBzb21ldGltZQotICogaW4gdGhlIGZ1dHVyZS4KLSAqCi0qLwotc3RhdGljIHZvaWQgKnJ2bWFsbG9jKHVuc2lnbmVkIGxvbmcgc2l6ZSkKLXsKLQl2b2lkICptZW07Ci0JdW5zaWduZWQgbG9uZyBhZHI7Ci0KLQlzaXplID0gUEFHRV9BTElHTihzaXplKTsKLQltZW0gPSB2bWFsbG9jXzMyKHNpemUpOwotCWlmICghbWVtKQotCQlyZXR1cm4gTlVMTDsKLQotCW1lbXNldChtZW0sIDAsIHNpemUpOyAvKiBDbGVhciB0aGUgcmFtIG91dCwgbm8ganVuayB0byB0aGUgdXNlciAqLwotCWFkciA9ICh1bnNpZ25lZCBsb25nKSBtZW07Ci0Jd2hpbGUgKHNpemUgPiAwKSB7Ci0JCVNldFBhZ2VSZXNlcnZlZCh2bWFsbG9jX3RvX3BhZ2UoKHZvaWQgKilhZHIpKTsKLQkJYWRyICs9IFBBR0VfU0laRTsKLQkJc2l6ZSAtPSBQQUdFX1NJWkU7Ci0JfQotCi0JcmV0dXJuIG1lbTsKLX0KLQotc3RhdGljIHZvaWQgcnZmcmVlKHZvaWQgKm1lbSwgdW5zaWduZWQgbG9uZyBzaXplKQotewotCXVuc2lnbmVkIGxvbmcgYWRyOwotCi0JaWYgKCFtZW0pCi0JCXJldHVybjsKLQotCWFkciA9ICh1bnNpZ25lZCBsb25nKSBtZW07Ci0Jd2hpbGUgKChsb25nKSBzaXplID4gMCkgewotCQlDbGVhclBhZ2VSZXNlcnZlZCh2bWFsbG9jX3RvX3BhZ2UoKHZvaWQgKilhZHIpKTsKLQkJYWRyICs9IFBBR0VfU0laRTsKLQkJc2l6ZSAtPSBQQUdFX1NJWkU7Ci0JfQotCXZmcmVlKG1lbSk7Ci19Ci0KLXN0cnVjdCB2aWNhbV9jYW1lcmEgewotCXUxNiBzaHV0dGVyX3NwZWVkOwkvLyBjYXB0dXJlIHNodXR0ZXIgc3BlZWQKLQl1MTYgZ2FpbjsJCS8vIGNhcHR1cmUgZ2FpbgotCi0JdTggKnJhd19pbWFnZTsJCS8vIHJhdyBkYXRhIGNhcHR1cmVkIGZyb20gdGhlIGNhbWVyYQotCXU4ICpmcmFtZWJ1ZjsJCS8vIHByb2Nlc3NlZCBkYXRhIGluIFJHQjI0IGZvcm1hdAotCXU4ICpjbnRybGJ1ZjsJCS8vIGFyZWEgdXNlZCB0byBzZW5kIGNvbnRyb2wgbXNncwotCi0Jc3RydWN0IHZpZGVvX2RldmljZSB2ZGV2OwkvLyB2NGwgdmlkZW8gZGV2aWNlCi0Jc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CS8vIHVzYiBkZXZpY2UKLQotCS8qIGd1YXJkIGFnYWluc3Qgc2ltdWx0YW5lb3VzIGFjY2Vzc2VzIHRvIHRoZSBjYW1lcmEgKi8KLQlzdHJ1Y3QgbXV0ZXggY2FtX2xvY2s7Ci0KLQlpbnQgaXNfaW5pdGlhbGl6ZWQ7Ci0JdTggb3Blbl9jb3VudDsKLQl1OCBidWxrRW5kcG9pbnQ7Ci0JaW50IG5lZWRzRHVtbXlSZWFkOwotfTsKLQotc3RhdGljIGludCB2aWNhbV9wcm9iZSggc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCk7Ci1zdGF0aWMgdm9pZCB2aWNhbV9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKTsKLXN0YXRpYyB2b2lkIHJlYWRfZnJhbWUoc3RydWN0IHZpY2FtX2NhbWVyYSAqY2FtLCBpbnQgZnJhbWVudW0pOwotc3RhdGljIHZvaWQgdmljYW1fZGVjb2RlX2NvbG9yKGNvbnN0IHU4ICosIHU4ICopOwotCi1zdGF0aWMgaW50IF9fc2VuZF9jb250cm9sX21zZyhzdHJ1Y3QgdmljYW1fY2FtZXJhICpjYW0sCi0JCQkgICAgICB1OCByZXF1ZXN0LAotCQkJICAgICAgdTE2IHZhbHVlLAotCQkJICAgICAgdTE2IGluZGV4LAotCQkJICAgICAgdW5zaWduZWQgY2hhciAqY3AsCi0JCQkgICAgICB1MTYgc2l6ZSkKLXsKLQlpbnQgc3RhdHVzOwotCi0JLyogY3AgbXVzdCBiZSBtZW1vcnkgdGhhdCBoYXMgYmVlbiBhbGxvY2F0ZWQgYnkga21hbGxvYyAqLwotCi0Jc3RhdHVzID0gdXNiX2NvbnRyb2xfbXNnKGNhbS0+dWRldiwKLQkJCQkgdXNiX3NuZGN0cmxwaXBlKGNhbS0+dWRldiwgMCksCi0JCQkJIHJlcXVlc3QsCi0JCQkJIFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwKLQkJCQkgVVNCX1JFQ0lQX0RFVklDRSwgdmFsdWUsIGluZGV4LAotCQkJCSBjcCwgc2l6ZSwgMTAwMCk7Ci0KLQlzdGF0dXMgPSBtaW4oc3RhdHVzLCAwKTsKLQotCWlmIChzdGF0dXMgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIkZhaWxlZCBzZW5kaW5nIGNvbnRyb2wgbWVzc2FnZSwgZXJyb3IgJWQuXG4iLAotCQkgICAgICAgc3RhdHVzKTsKLQl9Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi1zdGF0aWMgaW50IHNlbmRfY29udHJvbF9tc2coc3RydWN0IHZpY2FtX2NhbWVyYSAqY2FtLAotCQkJICAgIHU4IHJlcXVlc3QsCi0JCQkgICAgdTE2IHZhbHVlLAotCQkJICAgIHUxNiBpbmRleCwKLQkJCSAgICB1bnNpZ25lZCBjaGFyICpjcCwKLQkJCSAgICB1MTYgc2l6ZSkKLXsKLQlpbnQgc3RhdHVzID0gLUVOT0RFVjsKLQltdXRleF9sb2NrKCZjYW0tPmNhbV9sb2NrKTsKLQlpZiAoY2FtLT51ZGV2KSB7Ci0JCXN0YXR1cyA9IF9fc2VuZF9jb250cm9sX21zZyhjYW0sIHJlcXVlc3QsIHZhbHVlLAotCQkJCQkgICAgaW5kZXgsIGNwLCBzaXplKTsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZjYW0tPmNhbV9sb2NrKTsKLQlyZXR1cm4gc3RhdHVzOwotfQotc3RhdGljIGludAotaW5pdGlhbGl6ZV9jYW1lcmEoc3RydWN0IHZpY2FtX2NhbWVyYSAqY2FtKQotewotCWludCBlcnI7Ci0JY29uc3Qgc3RydWN0IGloZXhfYmlucmVjICpyZWM7Ci0JY29uc3Qgc3RydWN0IGZpcm13YXJlICp1bmluaXRpYWxpemVkX3Zhcihmdyk7Ci0KLQllcnIgPSByZXF1ZXN0X2loZXhfZmlybXdhcmUoJmZ3LCAidmljYW0vZmlybXdhcmUuZnciLCAmY2FtLT51ZGV2LT5kZXYpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gbG9hZCBcInZpY2FtL2Zpcm13YXJlLmZ3XCI6ICVkXG4iLAotCQkgICAgICAgZXJyKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlmb3IgKHJlYyA9ICh2b2lkICopZnctPmRhdGE7IHJlYzsgcmVjID0gaWhleF9uZXh0X2JpbnJlYyhyZWMpKSB7Ci0JCW1lbWNweShjYW0tPmNudHJsYnVmLCByZWMtPmRhdGEsIGJlMTZfdG9fY3B1KHJlYy0+bGVuKSk7Ci0KLQkJZXJyID0gc2VuZF9jb250cm9sX21zZyhjYW0sIDB4ZmYsIDAsIDAsCi0JCQkJICAgICAgIGNhbS0+Y250cmxidWYsIGJlMTZfdG9fY3B1KHJlYy0+bGVuKSk7Ci0JCWlmIChlcnIpCi0JCQlicmVhazsKLQl9Ci0KLQlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQKLXNldF9jYW1lcmFfcG93ZXIoc3RydWN0IHZpY2FtX2NhbWVyYSAqY2FtLCBpbnQgc3RhdGUpCi17Ci0JaW50IHN0YXR1czsKLQotCWlmICgoc3RhdHVzID0gc2VuZF9jb250cm9sX21zZyhjYW0sIDB4NTAsIHN0YXRlLCAwLCBOVUxMLCAwKSkgPCAwKQotCQlyZXR1cm4gc3RhdHVzOwotCi0JaWYgKHN0YXRlKSB7Ci0JCXNlbmRfY29udHJvbF9tc2coY2FtLCAweDU1LCAxLCAwLCBOVUxMLCAwKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGxvbmcKLXZpY2FtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgaW9jdGxuciwgdW5zaWduZWQgbG9uZyBhcmcpCi17Ci0Jdm9pZCBfX3VzZXIgKnVzZXJfYXJnID0gKHZvaWQgX191c2VyICopYXJnOwotCXN0cnVjdCB2aWNhbV9jYW1lcmEgKmNhbSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlsb25nIHJldHZhbCA9IDA7Ci0KLQlpZiAoIWNhbSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlzd2l0Y2ggKGlvY3RsbnIpIHsKLQkJLyogcXVlcnkgY2FwYWJpbGl0aWVzICovCi0JY2FzZSBWSURJT0NHQ0FQOgotCQl7Ci0JCQlzdHJ1Y3QgdmlkZW9fY2FwYWJpbGl0eSBiOwotCi0JCQlEQkcoIlZJRElPQ0dDQVBcbiIpOwotCQkJbWVtc2V0KCZiLCAwLCBzaXplb2YoYikpOwotCQkJc3RyY3B5KGIubmFtZSwgIlZpQ2FtLWJhc2VkIENhbWVyYSIpOwotCQkJYi50eXBlID0gVklEX1RZUEVfQ0FQVFVSRTsKLQkJCWIuY2hhbm5lbHMgPSAxOwotCQkJYi5hdWRpb3MgPSAwOwotCQkJYi5tYXh3aWR0aCA9IDMyMDsJLyogVklERU9TSVpFX0NJRiAqLwotCQkJYi5tYXhoZWlnaHQgPSAyNDA7Ci0JCQliLm1pbndpZHRoID0gMzIwOwkvKiBWSURFT1NJWkVfNDhfNDggKi8KLQkJCWIubWluaGVpZ2h0ID0gMjQwOwotCi0JCQlpZiAoY29weV90b191c2VyKHVzZXJfYXJnLCAmYiwgc2l6ZW9mKGIpKSkKLQkJCQlyZXR2YWwgPSAtRUZBVUxUOwotCi0JCQlicmVhazsKLQkJfQotCQkvKiBnZXQvc2V0IHZpZGVvIHNvdXJjZSAtIHdlIGFyZSBhIGNhbWVyYSBhbmQgbm90aGluZyBlbHNlICovCi0JY2FzZSBWSURJT0NHQ0hBTjoKLQkJewotCQkJc3RydWN0IHZpZGVvX2NoYW5uZWwgdjsKLQotCQkJREJHKCJWSURJT0NHQ0hBTlxuIik7Ci0JCQlpZiAoY29weV9mcm9tX3VzZXIoJnYsIHVzZXJfYXJnLCBzaXplb2YodikpKSB7Ci0JCQkJcmV0dmFsID0gLUVGQVVMVDsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWlmICh2LmNoYW5uZWwgIT0gMCkgewotCQkJCXJldHZhbCA9IC1FSU5WQUw7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0KLQkJCXYuY2hhbm5lbCA9IDA7Ci0JCQlzdHJjcHkodi5uYW1lLCAiQ2FtZXJhIik7Ci0JCQl2LnR1bmVycyA9IDA7Ci0JCQl2LmZsYWdzID0gMDsKLQkJCXYudHlwZSA9IFZJREVPX1RZUEVfQ0FNRVJBOwotCQkJdi5ub3JtID0gMDsKLQotCQkJaWYgKGNvcHlfdG9fdXNlcih1c2VyX2FyZywgJnYsIHNpemVvZih2KSkpCi0JCQkJcmV0dmFsID0gLUVGQVVMVDsKLQkJCWJyZWFrOwotCQl9Ci0KLQljYXNlIFZJRElPQ1NDSEFOOgotCQl7Ci0JCQlpbnQgdjsKLQotCQkJaWYgKGNvcHlfZnJvbV91c2VyKCZ2LCB1c2VyX2FyZywgc2l6ZW9mKHYpKSkKLQkJCQlyZXR2YWwgPSAtRUZBVUxUOwotCQkJREJHKCJWSURJT0NTQ0hBTiAlZFxuIiwgdik7Ci0KLQkJCWlmIChyZXR2YWwgPT0gMCAmJiB2ICE9IDApCi0JCQkJcmV0dmFsID0gLUVJTlZBTDsKLQotCQkJYnJlYWs7Ci0JCX0KLQotCQkvKiBpbWFnZSBwcm9wZXJ0aWVzICovCi0JY2FzZSBWSURJT0NHUElDVDoKLQkJewotCQkJc3RydWN0IHZpZGVvX3BpY3R1cmUgdnA7Ci0JCQlEQkcoIlZJRElPQ0dQSUNUXG4iKTsKLQkJCW1lbXNldCgmdnAsIDAsIHNpemVvZiAoc3RydWN0IHZpZGVvX3BpY3R1cmUpKTsKLQkJCXZwLmJyaWdodG5lc3MgPSBjYW0tPmdhaW4gPDwgODsKLQkJCXZwLmRlcHRoID0gMjQ7Ci0JCQl2cC5wYWxldHRlID0gVklERU9fUEFMRVRURV9SR0IyNDsKLQkJCWlmIChjb3B5X3RvX3VzZXIodXNlcl9hcmcsICZ2cCwgc2l6ZW9mIChzdHJ1Y3QgdmlkZW9fcGljdHVyZSkpKQotCQkJCXJldHZhbCA9IC1FRkFVTFQ7Ci0JCQlicmVhazsKLQkJfQotCi0JY2FzZSBWSURJT0NTUElDVDoKLQkJewotCQkJc3RydWN0IHZpZGVvX3BpY3R1cmUgdnA7Ci0KLQkJCWlmIChjb3B5X2Zyb21fdXNlcigmdnAsIHVzZXJfYXJnLCBzaXplb2YodnApKSkgewotCQkJCXJldHZhbCA9IC1FRkFVTFQ7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0KLQkJCURCRygiVklESU9DU1BJQ1QgZGVwdGggPSAlZCwgcGFsID0gJWRcbiIsIHZwLmRlcHRoLAotCQkJICAgIHZwLnBhbGV0dGUpOwotCi0JCQljYW0tPmdhaW4gPSB2cC5icmlnaHRuZXNzID4+IDg7Ci0KLQkJCWlmICh2cC5kZXB0aCAhPSAyNAotCQkJICAgIHx8IHZwLnBhbGV0dGUgIT0gVklERU9fUEFMRVRURV9SR0IyNCkKLQkJCQlyZXR2YWwgPSAtRUlOVkFMOwotCi0JCQlicmVhazsKLQkJfQotCi0JCS8qIGdldC9zZXQgY2FwdHVyZSB3aW5kb3cgKi8KLQljYXNlIFZJRElPQ0dXSU46Ci0JCXsKLQkJCXN0cnVjdCB2aWRlb193aW5kb3cgdnc7Ci0JCQl2dy54ID0gMDsKLQkJCXZ3LnkgPSAwOwotCQkJdncud2lkdGggPSAzMjA7Ci0JCQl2dy5oZWlnaHQgPSAyNDA7Ci0JCQl2dy5jaHJvbWFrZXkgPSAwOwotCQkJdncuZmxhZ3MgPSAwOwotCQkJdncuY2xpcHMgPSBOVUxMOwotCQkJdncuY2xpcGNvdW50ID0gMDsKLQotCQkJREJHKCJWSURJT0NHV0lOXG4iKTsKLQotCQkJaWYgKGNvcHlfdG9fdXNlcih1c2VyX2FyZywgKHZvaWQgKikmdncsIHNpemVvZih2dykpKQotCQkJCXJldHZhbCA9IC1FRkFVTFQ7Ci0KLQkJCS8vIEknbSBub3Qgc3VyZSB3aGF0IHRoZSBkZWFsIHdpdGggYSBjYXB0dXJlIHdpbmRvdyBpcywgaXQgaXMgdmVyeSBwb29ybHkgZGVzY3JpYmVkCi0JCQkvLyBpbiB0aGUgZG9jLiAgU28gSSB3b24ndCBzdXBwb3J0IGl0IG5vdy4KLQkJCWJyZWFrOwotCQl9Ci0KLQljYXNlIFZJRElPQ1NXSU46Ci0JCXsKLQotCQkJc3RydWN0IHZpZGVvX3dpbmRvdyB2dzsKLQotCQkJaWYgKGNvcHlfZnJvbV91c2VyKCZ2dywgdXNlcl9hcmcsIHNpemVvZih2dykpKSB7Ci0JCQkJcmV0dmFsID0gLUVGQVVMVDsKLQkJCQlicmVhazsKLQkJCX0KLQotCQkJREJHKCJWSURJT0NTV0lOICVkIHggJWRcbiIsIHZ3LndpZHRoLCB2dy5oZWlnaHQpOwotCi0JCQlpZiAoIHZ3LndpZHRoICE9IDMyMCB8fCB2dy5oZWlnaHQgIT0gMjQwICkKLQkJCQlyZXR2YWwgPSAtRUZBVUxUOwotCi0JCQlicmVhazsKLQkJfQotCi0JCS8qIG1tYXAgaW50ZXJmYWNlICovCi0JY2FzZSBWSURJT0NHTUJVRjoKLQkJewotCQkJc3RydWN0IHZpZGVvX21idWYgdm07Ci0JCQlpbnQgaTsKLQotCQkJREJHKCJWSURJT0NHTUJVRlxuIik7Ci0JCQltZW1zZXQoJnZtLCAwLCBzaXplb2YgKHZtKSk7Ci0JCQl2bS5zaXplID0KLQkJCSAgICBWSUNBTV9NQVhfRlJBTUVfU0laRSAqIFZJQ0FNX0ZSQU1FUzsKLQkJCXZtLmZyYW1lcyA9IFZJQ0FNX0ZSQU1FUzsKLQkJCWZvciAoaSA9IDA7IGkgPCBWSUNBTV9GUkFNRVM7IGkrKykKLQkJCQl2bS5vZmZzZXRzW2ldID0gVklDQU1fTUFYX0ZSQU1FX1NJWkUgKiBpOwotCi0JCQlpZiAoY29weV90b191c2VyKHVzZXJfYXJnLCAodm9pZCAqKSZ2bSwgc2l6ZW9mKHZtKSkpCi0JCQkJcmV0dmFsID0gLUVGQVVMVDsKLQotCQkJYnJlYWs7Ci0JCX0KLQotCWNhc2UgVklESU9DTUNBUFRVUkU6Ci0JCXsKLQkJCXN0cnVjdCB2aWRlb19tbWFwIHZtOwotCQkJLy8gaW50IHZpZGVvX3NpemU7Ci0KLQkJCWlmIChjb3B5X2Zyb21fdXNlcigodm9pZCAqKSZ2bSwgdXNlcl9hcmcsIHNpemVvZih2bSkpKSB7Ci0JCQkJcmV0dmFsID0gLUVGQVVMVDsKLQkJCQlicmVhazsKLQkJCX0KLQotCQkJREJHKCJWSURJT0NNQ0FQVFVSRSBmcmFtZT0lZCwgaGVpZ2h0PSVkLCB3aWR0aD0lZCwgZm9ybWF0PSVkLlxuIix2bS5mcmFtZSx2bS53aWR0aCx2bS5oZWlnaHQsdm0uZm9ybWF0KTsKLQotCQkJaWYgKCB2bS5mcmFtZSA+PSBWSUNBTV9GUkFNRVMgfHwgdm0uZm9ybWF0ICE9IFZJREVPX1BBTEVUVEVfUkdCMjQgKQotCQkJCXJldHZhbCA9IC1FSU5WQUw7Ci0KLQkJCS8vIGluIHRoZW9yeSByaWdodCBoZXJlIHdlJ2Qgc3RhcnQgdGhlIGltYWdlIGNhcHR1cmluZwotCQkJLy8gKGZpbGwgaW4gYSBidWxrIHVyYiBhbmQgc3VibWl0IGl0IGFzeW5jaHJvbm91c2x5KQotCQkJLy8KLQkJCS8vIEluc3RlYWQgd2UncmUgZ29pbmcgdG8gZG8gYSB0b3RhbCBoYWNrIGpvYiBmb3Igbm93IGFuZAotCQkJLy8gcmV0cmlldmUgdGhlIGZyYW1lIGluIFZJRElPQ1NZTkMKLQotCQkJYnJlYWs7Ci0JCX0KLQotCWNhc2UgVklESU9DU1lOQzoKLQkJewotCQkJaW50IGZyYW1lOwotCi0JCQlpZiAoY29weV9mcm9tX3VzZXIoKHZvaWQgKikmZnJhbWUsIHVzZXJfYXJnLCBzaXplb2YoaW50KSkpIHsKLQkJCQlyZXR2YWwgPSAtRUZBVUxUOwotCQkJCWJyZWFrOwotCQkJfQotCQkJREJHKCJWSURJT0NTWU5DOiAlZFxuIiwgZnJhbWUpOwotCi0JCQlyZWFkX2ZyYW1lKGNhbSwgZnJhbWUpOwotCQkJdmljYW1fZGVjb2RlX2NvbG9yKGNhbS0+cmF3X2ltYWdlLAotCQkJCQkgICBjYW0tPmZyYW1lYnVmICsKLQkJCQkJICAgZnJhbWUgKiBWSUNBTV9NQVhfRlJBTUVfU0laRSApOwotCi0JCQlicmVhazsKLQkJfQotCi0JCS8qIHBvaW50bGVzcyB0byBpbXBsZW1lbnQgb3ZlcmxheSB3aXRoIHRoaXMgY2FtZXJhICovCi0JY2FzZSBWSURJT0NDQVBUVVJFOgotCWNhc2UgVklESU9DR0ZCVUY6Ci0JY2FzZSBWSURJT0NTRkJVRjoKLQljYXNlIFZJRElPQ0tFWToKLQkJcmV0dmFsID0gLUVJTlZBTDsKLQkJYnJlYWs7Ci0KLQkJLyogdHVuZXIgaW50ZXJmYWNlIC0gd2UgaGF2ZSBub25lICovCi0JY2FzZSBWSURJT0NHVFVORVI6Ci0JY2FzZSBWSURJT0NTVFVORVI6Ci0JY2FzZSBWSURJT0NHRlJFUToKLQljYXNlIFZJRElPQ1NGUkVROgotCQlyZXR2YWwgPSAtRUlOVkFMOwotCQlicmVhazsKLQotCQkvKiBhdWRpbyBpbnRlcmZhY2UgLSB3ZSBoYXZlIG5vbmUgKi8KLQljYXNlIFZJRElPQ0dBVURJTzoKLQljYXNlIFZJRElPQ1NBVURJTzoKLQkJcmV0dmFsID0gLUVJTlZBTDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dmFsID0gLUVOT0lPQ1RMQ01EOwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gcmV0dmFsOwotfQotCi1zdGF0aWMgaW50Ci12aWNhbV9vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQotewotCXN0cnVjdCB2aWNhbV9jYW1lcmEgKmNhbSA9IHZpZGVvX2RydmRhdGEoZmlsZSk7Ci0KLQlEQkcoIm9wZW5cbiIpOwotCi0JaWYgKCFjYW0pIHsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAidmljYW0gdmlkZW9fZGV2aWNlIGltcHJvcGVybHkgaW5pdGlhbGl6ZWQiKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyogY2FtX2xvY2svb3Blbl9jb3VudCBwcm90ZWN0cyB1cyBmcm9tIHNpbXVsdGFuZW91cyBvcGVucwotCSAqIC4uLiBmb3Igbm93LiB3ZSBwcm9iYWJseSBzaG91bGRuJ3QgcmVseSBvbiB0aGlzIGZhY3QgZm9yZXZlci4KLQkgKi8KLQotCW11dGV4X2xvY2soJmNhbS0+Y2FtX2xvY2spOwotCWlmIChjYW0tPm9wZW5fY291bnQgPiAwKSB7Ci0JCXByaW50ayhLRVJOX0lORk8KLQkJICAgICAgICJ2aWNhbV9vcGVuIGNhbGxlZCBvbiBhbHJlYWR5IG9wZW5lZCBjYW1lcmEiKTsKLQkJbXV0ZXhfdW5sb2NrKCZjYW0tPmNhbV9sb2NrKTsKLQkJcmV0dXJuIC1FQlVTWTsKLQl9Ci0KLQljYW0tPnJhd19pbWFnZSA9IGttYWxsb2MoVklDQU1fTUFYX1JFQURfU0laRSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjYW0tPnJhd19pbWFnZSkgewotCQltdXRleF91bmxvY2soJmNhbS0+Y2FtX2xvY2spOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQljYW0tPmZyYW1lYnVmID0gcnZtYWxsb2MoVklDQU1fTUFYX0ZSQU1FX1NJWkUgKiBWSUNBTV9GUkFNRVMpOwotCWlmICghY2FtLT5mcmFtZWJ1ZikgewotCQlrZnJlZShjYW0tPnJhd19pbWFnZSk7Ci0JCW11dGV4X3VubG9jaygmY2FtLT5jYW1fbG9jayk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCWNhbS0+Y250cmxidWYgPSBrbWFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjYW0tPmNudHJsYnVmKSB7Ci0JCWtmcmVlKGNhbS0+cmF3X2ltYWdlKTsKLQkJcnZmcmVlKGNhbS0+ZnJhbWVidWYsIFZJQ0FNX01BWF9GUkFNRV9TSVpFICogVklDQU1fRlJBTUVTKTsKLQkJbXV0ZXhfdW5sb2NrKCZjYW0tPmNhbV9sb2NrKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JY2FtLT5uZWVkc0R1bW15UmVhZCA9IDE7Ci0JY2FtLT5vcGVuX2NvdW50Kys7Ci0KLQlmaWxlLT5wcml2YXRlX2RhdGEgPSBjYW07Ci0JbXV0ZXhfdW5sb2NrKCZjYW0tPmNhbV9sb2NrKTsKLQotCi0JLy8gRmlyc3QgdXBsb2FkIGZpcm13YXJlLCB0aGVuIHR1cm4gdGhlIGNhbWVyYSBvbgotCi0JaWYgKCFjYW0tPmlzX2luaXRpYWxpemVkKSB7Ci0JCWluaXRpYWxpemVfY2FtZXJhKGNhbSk7Ci0KLQkJY2FtLT5pc19pbml0aWFsaXplZCA9IDE7Ci0JfQotCi0Jc2V0X2NhbWVyYV9wb3dlcihjYW0sIDEpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLXZpY2FtX2Nsb3NlKHN0cnVjdCBmaWxlICpmaWxlKQotewotCXN0cnVjdCB2aWNhbV9jYW1lcmEgKmNhbSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlpbnQgb3Blbl9jb3VudDsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKLQotCURCRygiY2xvc2VcbiIpOwotCi0JLyogaXQncyBub3QgdGhlIGVuZCBvZiB0aGUgd29ybGQgaWYKLQkgKiB3ZSBmYWlsIHRvIHR1cm4gdGhlIGNhbWVyYSBvZmYuCi0JICovCi0KLQlzZXRfY2FtZXJhX3Bvd2VyKGNhbSwgMCk7Ci0KLQlrZnJlZShjYW0tPnJhd19pbWFnZSk7Ci0JcnZmcmVlKGNhbS0+ZnJhbWVidWYsIFZJQ0FNX01BWF9GUkFNRV9TSVpFICogVklDQU1fRlJBTUVTKTsKLQlrZnJlZShjYW0tPmNudHJsYnVmKTsKLQotCW11dGV4X2xvY2soJmNhbS0+Y2FtX2xvY2spOwotCi0JY2FtLT5vcGVuX2NvdW50LS07Ci0Jb3Blbl9jb3VudCA9IGNhbS0+b3Blbl9jb3VudDsKLQl1ZGV2ID0gY2FtLT51ZGV2OwotCi0JbXV0ZXhfdW5sb2NrKCZjYW0tPmNhbV9sb2NrKTsKLQotCWlmICghb3Blbl9jb3VudCAmJiAhdWRldikgewotCQlrZnJlZShjYW0pOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCB2aWNhbV9kZWNvZGVfY29sb3IoY29uc3QgdTggKmRhdGEsIHU4ICpyZ2IpCi17Ci0JLyogdmljYW1fZGVjb2RlX2NvbG9yIC0gQ29udmVydCBmcm9tIFZpY2FtIFktQ3ItQ2IgdG8gUkdCCi0JICogQ29weXJpZ2h0IChDKSAyMDAyIE1vbnJvZSBXaWxsaWFtcyAobW9ucm9lQHBvYm94LmNvbSkKLQkgKi8KLQotCWludCBpLCBwcmV2WSwgbmV4dFk7Ci0KLQlwcmV2WSA9IDUxMjsKLQluZXh0WSA9IDUxMjsKLQotCWRhdGEgKz0gVklDQU1fSEVBREVSX1NJWkU7Ci0KLQlmb3IoIGkgPSAwOyBpIDwgMjQwOyBpKyssIGRhdGEgKz0gNTEyICkgewotCQljb25zdCBpbnQgeSA9ICggaSAqIDI0MiApIC8gMjQwOwotCi0JCWludCBqLCBwcmV2WCwgbmV4dFg7Ci0JCWludCBZLCBDciwgQ2I7Ci0KLQkJaWYgKCB5ID09IDI0MiAtIDEgKSB7Ci0JCQluZXh0WSA9IC01MTI7Ci0JCX0KLQotCQlwcmV2WCA9IDE7Ci0JCW5leHRYID0gMTsKLQotCQlmb3IgKCBqID0gMDsgaiA8IDMyMDsgaisrLCByZ2IgKz0gMyApIHsKLQkJCWNvbnN0IGludCB4ID0gKCBqICogNTEyICkgLyAzMjA7Ci0JCQljb25zdCB1OCAqIGNvbnN0IHNyYyA9ICZkYXRhW3hdOwotCi0JCQlpZiAoIHggPT0gNTEyIC0gMSApIHsKLQkJCQluZXh0WCA9IC0xOwotCQkJfQotCi0JCQlDciA9ICggc3JjW3ByZXZYXSAtIHNyY1swXSApICsKLQkJCQkoIHNyY1tuZXh0WF0gLSBzcmNbMF0gKTsKLQkJCUNyIC89IDI7Ci0KLQkJCUNiID0gKCBzcmNbcHJldlldIC0gc3JjW3ByZXZYICsgcHJldlldICkgKwotCQkJCSggc3JjW3ByZXZZXSAtIHNyY1tuZXh0WCArIHByZXZZXSApICsKLQkJCQkoIHNyY1tuZXh0WV0gLSBzcmNbcHJldlggKyBuZXh0WV0gKSArCi0JCQkJKCBzcmNbbmV4dFldIC0gc3JjW25leHRYICsgbmV4dFldICk7Ci0JCQlDYiAvPSA0OwotCi0JCQlZID0gMTE2MCAqICggc3JjWzBdICsgKCBDciAvIDIgKSAtIDE2ICk7Ci0KLQkJCWlmICggaSAmIDEgKSB7Ci0JCQkJaW50IEN0ID0gQ3I7Ci0JCQkJQ3IgPSBDYjsKLQkJCQlDYiA9IEN0OwotCQkJfQotCi0JCQlpZiAoICggeCBeIGkgKSAmIDEgKSB7Ci0JCQkJQ3IgPSAtQ3I7Ci0JCQkJQ2IgPSAtQ2I7Ci0JCQl9Ci0KLQkJCXJnYlswXSA9IGNsYW1wKCAoICggWSArICggMjAxNyAqIENiICkgKSArCi0JCQkJCTUwMCApIC8gOTAwLCAwLCAyNTUgKTsKLQkJCXJnYlsxXSA9IGNsYW1wKCAoICggWSAtICggMzkyICogQ2IgKSAtCi0JCQkJCSAgKCA4MTMgKiBDciApICkgKwotCQkJCQkgIDUwMCApIC8gMTAwMCwgMCwgMjU1ICk7Ci0JCQlyZ2JbMl0gPSBjbGFtcCggKCAoIFkgKyAoIDE1OTQgKiBDciApICkgKwotCQkJCQk1MDAgKSAvIDEzMDAsIDAsIDI1NSApOwotCi0JCQlwcmV2WCA9IC0xOwotCQl9Ci0KLQkJcHJldlkgPSAtNTEyOwotCX0KLX0KLQotc3RhdGljIHZvaWQKLXJlYWRfZnJhbWUoc3RydWN0IHZpY2FtX2NhbWVyYSAqY2FtLCBpbnQgZnJhbWVudW0pCi17Ci0JdW5zaWduZWQgY2hhciAqcmVxdWVzdCA9IGNhbS0+Y250cmxidWY7Ci0JaW50IHJlYWxTaHV0dGVyOwotCWludCBuOwotCWludCBhY3R1YWxfbGVuZ3RoOwotCi0JaWYgKGNhbS0+bmVlZHNEdW1teVJlYWQpIHsKLQkJY2FtLT5uZWVkc0R1bW15UmVhZCA9IDA7Ci0JCXJlYWRfZnJhbWUoY2FtLCBmcmFtZW51bSk7Ci0JfQotCi0JbWVtc2V0KHJlcXVlc3QsIDAsIDE2KTsKLQlyZXF1ZXN0WzBdID0gY2FtLT5nYWluOwkvLyAwID0gMCUgZ2FpbiwgRkYgPSAxMDAlIGdhaW4KLQotCXJlcXVlc3RbMV0gPSAwOwkvLyA1MTJ4MjQyIGNhcHR1cmUKLQotCXJlcXVlc3RbMl0gPSAweDkwOwkvLyB0aGUgZnVuY3Rpb24gb2YgdGhlc2UgdHdvIGJ5dGVzCi0JcmVxdWVzdFszXSA9IDB4MDc7CS8vIGlzIG5vdCB5ZXQgdW5kZXJzdG9vZAotCi0JaWYgKGNhbS0+c2h1dHRlcl9zcGVlZCA+IDYwKSB7Ci0JCS8vIFNob3J0IGV4cG9zdXJlCi0JCXJlYWxTaHV0dGVyID0KLQkJICAgICgoLTE1NjMxOTAwIC8gY2FtLT5zaHV0dGVyX3NwZWVkKSArIDI2MDUzMykgLyAxMDAwOwotCQlyZXF1ZXN0WzRdID0gcmVhbFNodXR0ZXIgJiAweEZGOwotCQlyZXF1ZXN0WzVdID0gKHJlYWxTaHV0dGVyID4+IDgpICYgMHhGRjsKLQkJcmVxdWVzdFs2XSA9IDB4MDM7Ci0JCXJlcXVlc3RbN10gPSAweDAxOwotCX0gZWxzZSB7Ci0JCS8vIExvbmcgZXhwb3N1cmUKLQkJcmVhbFNodXR0ZXIgPSAxNTYwMCAvIGNhbS0+c2h1dHRlcl9zcGVlZCAtIDE7Ci0JCXJlcXVlc3RbNF0gPSAwOwotCQlyZXF1ZXN0WzVdID0gMDsKLQkJcmVxdWVzdFs2XSA9IHJlYWxTaHV0dGVyICYgMHhGRjsKLQkJcmVxdWVzdFs3XSA9IHJlYWxTaHV0dGVyID4+IDg7Ci0JfQotCi0JLy8gUGVyIEpvaG4gTWFya3VzIEJqw7hybmRhbGVuLCBieXRlIGF0IGluZGV4IDggY2F1c2VzIHByb2JsZW1zIGlmIGl0IGlzbid0IDAKLQlyZXF1ZXN0WzhdID0gMDsKLQkvLyBieXRlcyA5LTE1IGRvIG5vdCBzZWVtIHRvIGFmZmVjdCBleHBvc3VyZSBvciBpbWFnZSBxdWFsaXR5Ci0KLQltdXRleF9sb2NrKCZjYW0tPmNhbV9sb2NrKTsKLQotCWlmICghY2FtLT51ZGV2KSB7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0KLQluID0gX19zZW5kX2NvbnRyb2xfbXNnKGNhbSwgMHg1MSwgMHg4MCwgMCwgcmVxdWVzdCwgMTYpOwotCi0JaWYgKG4gPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgIiBQcm9ibGVtIHNlbmRpbmcgZnJhbWUgY2FwdHVyZSBjb250cm9sIG1lc3NhZ2UiKTsKLQkJZ290byBkb25lOwotCX0KLQotCW4gPSB1c2JfYnVsa19tc2coY2FtLT51ZGV2LAotCQkJIHVzYl9yY3ZidWxrcGlwZShjYW0tPnVkZXYsIGNhbS0+YnVsa0VuZHBvaW50KSwKLQkJCSBjYW0tPnJhd19pbWFnZSwKLQkJCSA1MTIgKiAyNDIgKyAxMjgsICZhY3R1YWxfbGVuZ3RoLCAxMDAwMCk7Ci0KLQlpZiAobiA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJQcm9ibGVtIGR1cmluZyBidWxrIHJlYWQgb2YgZnJhbWUgZGF0YTogJWRcbiIsCi0JCSAgICAgICBuKTsKLQl9Ci0KLSBkb25lOgotCW11dGV4X3VubG9jaygmY2FtLT5jYW1fbG9jayk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90Ci12aWNhbV9yZWFkKCBzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MgKQotewotCXN0cnVjdCB2aWNhbV9jYW1lcmEgKmNhbSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQotCURCRygicmVhZCAlZCBieXRlcy5cbiIsIChpbnQpIGNvdW50KTsKLQotCWlmICgqcHBvcyA+PSBWSUNBTV9NQVhfRlJBTUVfU0laRSkgewotCQkqcHBvcyA9IDA7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmICgqcHBvcyA9PSAwKSB7Ci0JCXJlYWRfZnJhbWUoY2FtLCAwKTsKLQkJdmljYW1fZGVjb2RlX2NvbG9yKGNhbS0+cmF3X2ltYWdlLAotCQkJCSAgIGNhbS0+ZnJhbWVidWYgKwotCQkJCSAgIDAgKiBWSUNBTV9NQVhfRlJBTUVfU0laRSk7Ci0JfQotCi0JY291bnQgPSBtaW5fdChzaXplX3QsIGNvdW50LCBWSUNBTV9NQVhfRlJBTUVfU0laRSAtICpwcG9zKTsKLQotCWlmIChjb3B5X3RvX3VzZXIoYnVmLCAmY2FtLT5mcmFtZWJ1ZlsqcHBvc10sIGNvdW50KSkgewotCQljb3VudCA9IC1FRkFVTFQ7Ci0JfSBlbHNlIHsKLQkJKnBwb3MgKz0gY291bnQ7Ci0JfQotCi0JaWYgKGNvdW50ID09IFZJQ0FNX01BWF9GUkFNRV9TSVpFKSB7Ci0JCSpwcG9zID0gMDsKLQl9Ci0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLQotc3RhdGljIGludAotdmljYW1fbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCi17Ci0JLy8gVE9ETzogYWxsb2NhdGUgdGhlIHJhdyBmcmFtZSBidWZmZXIgaWYgbmVjZXNzYXJ5Ci0JdW5zaWduZWQgbG9uZyBwYWdlLCBwb3M7Ci0JdW5zaWduZWQgbG9uZyBzdGFydCA9IHZtYS0+dm1fc3RhcnQ7Ci0JdW5zaWduZWQgbG9uZyBzaXplICA9IHZtYS0+dm1fZW5kLXZtYS0+dm1fc3RhcnQ7Ci0Jc3RydWN0IHZpY2FtX2NhbWVyYSAqY2FtID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCi0JaWYgKCFjYW0pCi0JCXJldHVybiAtRU5PREVWOwotCi0JREJHKCJ2aWNhbV9tbWFwOiAlbGRcbiIsIHNpemUpOwotCi0JLyogV2UgbGV0IG1tYXAgYWxsb2NhdGUgYXMgbXVjaCBhcyBpdCB3YW50cyBiZWNhdXNlIExpbnV4IHdhcyBhZGRpbmcgMjA0OCBieXRlcwotCSAqIHRvIHRoZSBzaXplIHRoZSBhcHBsaWNhdGlvbiByZXF1ZXN0ZWQgZm9yIG1tYXAgYW5kIGl0IHdhcyBzY3Jld2luZyBhcHBzIHVwLgotCSBpZiAoc2l6ZSA+IFZJQ0FNX0ZSQU1FUypWSUNBTV9NQVhfRlJBTUVfU0laRSkKLQkgcmV0dXJuIC1FSU5WQUw7Ci0JICovCi0KLQlwb3MgPSAodW5zaWduZWQgbG9uZyljYW0tPmZyYW1lYnVmOwotCXdoaWxlIChzaXplID4gMCkgewotCQlwYWdlID0gdm1hbGxvY190b19wZm4oKHZvaWQgKilwb3MpOwotCQlpZiAocmVtYXBfcGZuX3JhbmdlKHZtYSwgc3RhcnQsIHBhZ2UsIFBBR0VfU0laRSwgUEFHRV9TSEFSRUQpKQotCQkJcmV0dXJuIC1FQUdBSU47Ci0KLQkJc3RhcnQgKz0gUEFHRV9TSVpFOwotCQlwb3MgKz0gUEFHRV9TSVpFOwotCQlpZiAoc2l6ZSA+IFBBR0VfU0laRSkKLQkJCXNpemUgLT0gUEFHRV9TSVpFOwotCQllbHNlCi0JCQlzaXplID0gMDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyB2aWNhbV9mb3BzID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkub3BlbgkJPSB2aWNhbV9vcGVuLAotCS5yZWxlYXNlCT0gdmljYW1fY2xvc2UsCi0JLnJlYWQJCT0gdmljYW1fcmVhZCwKLQkubW1hcAkJPSB2aWNhbV9tbWFwLAotCS5pb2N0bAkJPSB2aWNhbV9pb2N0bCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIHZpY2FtX3RlbXBsYXRlID0gewotCS5uYW1lIAkJPSAiVmlDYW0tYmFzZWQgVVNCIENhbWVyYSIsCi0JLmZvcHMgCQk9ICZ2aWNhbV9mb3BzLAotCS5yZWxlYXNlIAk9IHZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5LAotfTsKLQotLyogdGFibGUgb2YgZGV2aWNlcyB0aGF0IHdvcmsgd2l0aCB0aGlzIGRyaXZlciAqLwotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHZpY2FtX3RhYmxlW10gPSB7Ci0Je1VTQl9ERVZJQ0UoVVNCX1ZJQ0FNX1ZFTkRPUl9JRCwgVVNCX1ZJQ0FNX1BST0RVQ1RfSUQpfSwKLQl7VVNCX0RFVklDRShVU0JfQ09NUFJPX1ZFTkRPUl9JRCwgVVNCX0NPTVBST19QUk9EVUNUX0lEKX0sCi0Je30JCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwotfTsKLQotTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIHZpY2FtX3RhYmxlKTsKLQotc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHZpY2FtX2RyaXZlciA9IHsKLQkubmFtZQkJPSAidmljYW0iLAotCS5wcm9iZQkJPSB2aWNhbV9wcm9iZSwKLQkuZGlzY29ubmVjdAk9IHZpY2FtX2Rpc2Nvbm5lY3QsCi0JLmlkX3RhYmxlCT0gdmljYW1fdGFibGUKLX07Ci0KLS8qKgotICoJdmljYW1fcHJvYmUKLSAqCUBpbnRmOiB0aGUgaW50ZXJmYWNlCi0gKglAaWQ6IHRoZSBkZXZpY2UgaWQKLSAqCi0gKglDYWxsZWQgYnkgdGhlIHVzYiBjb3JlIHdoZW4gYSBuZXcgZGV2aWNlIGlzIGNvbm5lY3RlZCB0aGF0IGl0IHRoaW5rcwotICoJdGhpcyBkcml2ZXIgbWlnaHQgYmUgaW50ZXJlc3RlZCBpbi4KLSAqLwotc3RhdGljIGludAotdmljYW1fcHJvYmUoIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCi17Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7Ci0JaW50IGJ1bGtFbmRwb2ludCA9IDA7Ci0JY29uc3Qgc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaW50ZXJmYWNlOwotCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcG9pbnQ7Ci0Jc3RydWN0IHZpY2FtX2NhbWVyYSAqY2FtOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiVmlDYW0gYmFzZWQgd2ViY2FtIGNvbm5lY3RlZFxuIik7Ci0KLQlpbnRlcmZhY2UgPSBpbnRmLT5jdXJfYWx0c2V0dGluZzsKLQotCURCRyhLRVJOX0RFQlVHICJJbnRlcmZhY2UgJWQuIGhhcyAldS4gZW5kcG9pbnRzIVxuIiwKLQkgICAgICAgaW50ZXJmYWNlLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIsICh1bnNpZ25lZCkgKGludGVyZmFjZS0+ZGVzYy5iTnVtRW5kcG9pbnRzKSk7Ci0JZW5kcG9pbnQgPSAmaW50ZXJmYWNlLT5lbmRwb2ludFswXS5kZXNjOwotCi0JaWYgKHVzYl9lbmRwb2ludF9pc19idWxrX2luKGVuZHBvaW50KSkgewotCQkvKiB3ZSBmb3VuZCBhIGJ1bGsgaW4gZW5kcG9pbnQgKi8KLQkJYnVsa0VuZHBvaW50ID0gZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3M7Ci0JfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiTm8gYnVsayBpbiBlbmRwb2ludCB3YXMgZm91bmQgPyEgKHRoaXMgaXMgYmFkKVxuIik7Ci0JfQotCi0JaWYgKChjYW0gPQotCSAgICAga3phbGxvYyhzaXplb2YgKHN0cnVjdCB2aWNhbV9jYW1lcmEpLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiY291bGQgbm90IGFsbG9jYXRlIGtlcm5lbCBtZW1vcnkgZm9yIHZpY2FtX2NhbWVyYSBzdHJ1Y3RcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQotCWNhbS0+c2h1dHRlcl9zcGVlZCA9IDE1OwotCi0JbXV0ZXhfaW5pdCgmY2FtLT5jYW1fbG9jayk7Ci0KLQltZW1jcHkoJmNhbS0+dmRldiwgJnZpY2FtX3RlbXBsYXRlLCBzaXplb2YodmljYW1fdGVtcGxhdGUpKTsKLQl2aWRlb19zZXRfZHJ2ZGF0YSgmY2FtLT52ZGV2LCBjYW0pOwotCi0JY2FtLT51ZGV2ID0gZGV2OwotCWNhbS0+YnVsa0VuZHBvaW50ID0gYnVsa0VuZHBvaW50OwotCi0JaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmY2FtLT52ZGV2LCBWRkxfVFlQRV9HUkFCQkVSLCAtMSkgPCAwKSB7Ci0JCWtmcmVlKGNhbSk7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgInZpZGVvX3JlZ2lzdGVyX2RldmljZSBmYWlsZWRcbiIpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQlwcmludGsoS0VSTl9JTkZPICJWaUNhbSB3ZWJjYW0gZHJpdmVyIG5vdyBjb250cm9sbGluZyBkZXZpY2UgJXNcbiIsCi0JCXZpZGVvX2RldmljZV9ub2RlX25hbWUoJmNhbS0+dmRldikpOwotCi0JdXNiX3NldF9pbnRmZGF0YSAoaW50ZiwgY2FtKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZAotdmljYW1fZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKLXsKLQlpbnQgb3Blbl9jb3VudDsKLQlzdHJ1Y3QgdmljYW1fY2FtZXJhICpjYW0gPSB1c2JfZ2V0X2ludGZkYXRhIChpbnRmKTsKLQl1c2Jfc2V0X2ludGZkYXRhIChpbnRmLCBOVUxMKTsKLQotCS8qIHdlIG11c3QgdW5yZWdpc3RlciB0aGUgZGV2aWNlIGJlZm9yZSB0YWtpbmcgaXRzCi0JICogY2FtX2xvY2suIFRoaXMgaXMgYmVjYXVzZSB0aGUgdmlkZW8gb3BlbiBjYWxsCi0JICogaG9sZHMgdGhlIHNhbWUgbG9jayBhcyB2aWRlbyB1bnJlZ2lzdGVyLiBpZiB3ZQotCSAqIHVucmVnaXN0ZXIgaW5zaWRlIG9mIHRoZSBjYW1fbG9jayBhbmQgb3BlbiBhbHNvCi0JICogdXNlcyB0aGUgY2FtX2xvY2ssIHdlIGdldCBkZWFkbG9jay4KLQkgKi8KLQotCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKCZjYW0tPnZkZXYpOwotCi0JLyogc3RvcCB0aGUgY2FtZXJhIGZyb20gYmVpbmcgdXNlZCAqLwotCi0JbXV0ZXhfbG9jaygmY2FtLT5jYW1fbG9jayk7Ci0KLQkvKiBtYXJrIHRoZSBjYW1lcmEgYXMgZ29uZSAqLwotCi0JY2FtLT51ZGV2ID0gTlVMTDsKLQotCS8qIHRoZSBvbmx5IHRoaW5nIGxlZnQgdG8gZG8gaXMgc3luY2hyb25pemUgd2l0aAotCSAqIG91ciBjbG9zZS9yZWxlYXNlIGZ1bmN0aW9uIG9uIHdobyBzaG91bGQgcmVsZWFzZQotCSAqIHRoZSBjYW1lcmEgbWVtb3J5LiBpZiB0aGVyZSBhcmUgYW55IHVzZXJzIHVzaW5nIHRoZQotCSAqIGNhbWVyYSwgaXQncyB0aGVpciBqb2IuIGlmIHRoZXJlIGFyZSBubyB1c2VycywKLQkgKiBpdCdzIG91cnMuCi0JICovCi0KLQlvcGVuX2NvdW50ID0gY2FtLT5vcGVuX2NvdW50OwotCi0JbXV0ZXhfdW5sb2NrKCZjYW0tPmNhbV9sb2NrKTsKLQotCWlmICghb3Blbl9jb3VudCkgewotCQlrZnJlZShjYW0pOwotCX0KLQotCXByaW50ayhLRVJOX0RFQlVHICJWaUNhbS1iYXNlZCBXZWJDYW0gZGlzY29ubmVjdGVkXG4iKTsKLX0KLQotLyoKLSAqLwotc3RhdGljIGludCBfX2luaXQKLXVzYl92aWNhbV9pbml0KHZvaWQpCi17Ci0JaW50IHJldHZhbDsKLQlEQkcoS0VSTl9JTkZPICJWaUNhbS1iYXNlZCBXZWJDYW0gZHJpdmVyIHN0YXJ0dXBcbiIpOwotCXJldHZhbCA9IHVzYl9yZWdpc3RlcigmdmljYW1fZHJpdmVyKTsKLQlpZiAocmV0dmFsKQotCQlwcmludGsoS0VSTl9XQVJOSU5HICJ1c2JfcmVnaXN0ZXIgZmFpbGVkIVxuIik7Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0Ci11c2JfdmljYW1fZXhpdCh2b2lkKQotewotCURCRyhLRVJOX0lORk8KLQkgICAgICAgIlZpQ2FtLWJhc2VkIFdlYkNhbSBkcml2ZXIgc2h1dGRvd25cbiIpOwotCi0JdXNiX2RlcmVnaXN0ZXIoJnZpY2FtX2RyaXZlcik7Ci19Ci0KLW1vZHVsZV9pbml0KHVzYl92aWNhbV9pbml0KTsKLW1vZHVsZV9leGl0KHVzYl92aWNhbV9leGl0KTsKLQotTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKLU1PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfRklSTVdBUkUoInZpY2FtL2Zpcm13YXJlLmZ3Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi91c2J2aXNpb24tY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi1jYXJkcy5jCmluZGV4IDUwM2IxM2IuLjY4Yjk5OGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi1jYXJkcy5jCkBAIC0zMiwxMDcyICszMiwxMDcyIEBACiAvKiBTdXBwb3J0ZWQgRGV2aWNlczogQSB0YWJsZSBmb3IgdXNidmlzaW9uLmMqLwogc3RydWN0IHVzYnZpc2lvbl9kZXZpY2VfZGF0YV9zdCAgdXNidmlzaW9uX2RldmljZV9kYXRhW10gPSB7CiAJW1hBTkJPT10gPSB7Ci0JCS5JbnRlcmZhY2UgICAgID0gLTEsCi0JCS5Db2RlYyAgICAgICAgID0gQ09ERUNfU0FBNzExMywKLQkJLlZpZGVvQ2hhbm5lbHMgPSA0LAotCQkuVmlkZW9Ob3JtICAgICA9IFY0TDJfU1REX05UU0MsCi0JCS5BdWRpb0NoYW5uZWxzID0gMSwKLQkJLlJhZGlvICAgICAgICAgPSAwLAotCQkudmJpICAgICAgICAgICA9IDEsCi0JCS5UdW5lciAgICAgICAgID0gMCwKLQkJLlR1bmVyVHlwZSAgICAgPSAwLAotCQkuWF9PZmZzZXQgICAgICA9IC0xLAotCQkuWV9PZmZzZXQgICAgICA9IC0xLAotCQkuTW9kZWxTdHJpbmcgICA9ICJYYW5ib28iLAorCQkuaW50ZXJmYWNlICAgICAgPSAtMSwKKwkJLmNvZGVjICAgICAgICAgID0gQ09ERUNfU0FBNzExMywKKwkJLnZpZGVvX2NoYW5uZWxzID0gNCwKKwkJLnZpZGVvX25vcm0gICAgID0gVjRMMl9TVERfTlRTQywKKwkJLmF1ZGlvX2NoYW5uZWxzID0gMSwKKwkJLnJhZGlvICAgICAgICAgID0gMCwKKwkJLnZiaSAgICAgICAgICAgID0gMSwKKwkJLnR1bmVyICAgICAgICAgID0gMCwKKwkJLnR1bmVyX3R5cGUgICAgID0gMCwKKwkJLnhfb2Zmc2V0ICAgICAgID0gLTEsCisJCS55X29mZnNldCAgICAgICA9IC0xLAorCQkubW9kZWxfc3RyaW5nICAgPSAiWGFuYm9vIiwKIAl9LAogCVtCRUxLSU5fVklERU9CVVNfSUldID0gewotCQkuSW50ZXJmYWNlICAgICA9IC0xLAotCQkuQ29kZWMgICAgICAgICA9IENPREVDX1NBQTcxMTMsCi0JCS5WaWRlb0NoYW5uZWxzID0gMiwKLQkJLlZpZGVvTm9ybSAgICAgPSBWNEwyX1NURF9QQUwsCi0JCS5BdWRpb0NoYW5uZWxzID0gMSwKLQkJLlJhZGlvICAgICAgICAgPSAwLAotCQkudmJpICAgICAgICAgICA9IDEsCi0JCS5UdW5lciAgICAgICAgID0gMCwKLQkJLlR1bmVyVHlwZSAgICAgPSAwLAotCQkuWF9PZmZzZXQgICAgICA9IDAsCi0JCS5ZX09mZnNldCAgICAgID0gMywKLQkJLkR2aV95dXZfb3ZlcnJpZGUgPSAxLAotCQkuRHZpX3l1diAgICAgICA9IDcsCi0JCS5Nb2RlbFN0cmluZyAgID0gIkJlbGtpbiBVU0IgVmlkZW9CdXMgSUkgQWRhcHRlciIsCisJCS5pbnRlcmZhY2UgICAgICA9IC0xLAorCQkuY29kZWMgICAgICAgICAgPSBDT0RFQ19TQUE3MTEzLAorCQkudmlkZW9fY2hhbm5lbHMgPSAyLAorCQkudmlkZW9fbm9ybSAgICAgPSBWNEwyX1NURF9QQUwsCisJCS5hdWRpb19jaGFubmVscyA9IDEsCisJCS5yYWRpbyAgICAgICAgICA9IDAsCisJCS52YmkgICAgICAgICAgICA9IDEsCisJCS50dW5lciAgICAgICAgICA9IDAsCisJCS50dW5lcl90eXBlICAgICA9IDAsCisJCS54X29mZnNldCAgICAgICA9IDAsCisJCS55X29mZnNldCAgICAgICA9IDMsCisJCS5kdmlfeXV2X292ZXJyaWRlID0gMSwKKwkJLmR2aV95dXYgICAgICAgID0gNywKKwkJLm1vZGVsX3N0cmluZyAgID0gIkJlbGtpbiBVU0IgVmlkZW9CdXMgSUkgQWRhcHRlciIsCiAJfSwKIAlbQkVMS0lOX1ZJREVPQlVTXSA9IHsKLQkJLkludGVyZmFjZSAgICAgPSAtMSwKLQkJLkNvZGVjICAgICAgICAgPSBDT0RFQ19TQUE3MTExLAotCQkuVmlkZW9DaGFubmVscyA9IDIsCi0JCS5WaWRlb05vcm0gICAgID0gVjRMMl9TVERfTlRTQywKLQkJLkF1ZGlvQ2hhbm5lbHMgPSAxLAotCQkuUmFkaW8gICAgICAgICA9IDAsCi0JCS52YmkgICAgICAgICAgID0gMSwKLQkJLlR1bmVyICAgICAgICAgPSAwLAotCQkuVHVuZXJUeXBlICAgICA9IDAsCi0JCS5YX09mZnNldCAgICAgID0gLTEsCi0JCS5ZX09mZnNldCAgICAgID0gLTEsCi0JCS5Nb2RlbFN0cmluZyAgID0gIkJlbGtpbiBDb21wb25lbnRzIFVTQiBWaWRlb0J1cyIsCisJCS5pbnRlcmZhY2UgICAgICA9IC0xLAorCQkuY29kZWMgICAgICAgICAgPSBDT0RFQ19TQUE3MTExLAorCQkudmlkZW9fY2hhbm5lbHMgPSAyLAorCQkudmlkZW9fbm9ybSAgICAgPSBWNEwyX1NURF9OVFNDLAorCQkuYXVkaW9fY2hhbm5lbHMgPSAxLAorCQkucmFkaW8gICAgICAgICAgPSAwLAorCQkudmJpICAgICAgICAgICAgPSAxLAorCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkudHVuZXJfdHlwZSAgICAgPSAwLAorCQkueF9vZmZzZXQgICAgICAgPSAtMSwKKwkJLnlfb2Zmc2V0ICAgICAgID0gLTEsCisJCS5tb2RlbF9zdHJpbmcgICA9ICJCZWxraW4gQ29tcG9uZW50cyBVU0IgVmlkZW9CdXMiLAogCX0sCiAJW0JFTEtJTl9VU0JfVklERU9CVVNfSUldID0gewotCQkuSW50ZXJmYWNlICAgICA9IC0xLAotCQkuQ29kZWMgICAgICAgICA9IENPREVDX1NBQTcxMTMsCi0JCS5WaWRlb0NoYW5uZWxzID0gMiwKLQkJLlZpZGVvTm9ybSAgICAgPSBWNEwyX1NURF9OVFNDLAotCQkuQXVkaW9DaGFubmVscyA9IDEsCi0JCS5SYWRpbyAgICAgICAgID0gMCwKLQkJLnZiaSAgICAgICAgICAgPSAxLAotCQkuVHVuZXIgICAgICAgICA9IDAsCi0JCS5UdW5lclR5cGUgICAgID0gMCwKLQkJLlhfT2Zmc2V0ICAgICAgPSAwLAotCQkuWV9PZmZzZXQgICAgICA9IDMsCi0JCS5EdmlfeXV2X292ZXJyaWRlID0gMSwKLQkJLkR2aV95dXYgICAgICAgPSA3LAotCQkuTW9kZWxTdHJpbmcgICA9ICJCZWxraW4gVVNCIFZpZGVvQnVzIElJIiwKKwkJLmludGVyZmFjZSAgICAgID0gLTEsCisJCS5jb2RlYyAgICAgICAgICA9IENPREVDX1NBQTcxMTMsCisJCS52aWRlb19jaGFubmVscyA9IDIsCisJCS52aWRlb19ub3JtICAgICA9IFY0TDJfU1REX05UU0MsCisJCS5hdWRpb19jaGFubmVscyA9IDEsCisJCS5yYWRpbyAgICAgICAgICA9IDAsCisJCS52YmkgICAgICAgICAgICA9IDEsCisJCS50dW5lciAgICAgICAgICA9IDAsCisJCS50dW5lcl90eXBlICAgICA9IDAsCisJCS54X29mZnNldCAgICAgICA9IDAsCisJCS55X29mZnNldCAgICAgICA9IDMsCisJCS5kdmlfeXV2X292ZXJyaWRlID0gMSwKKwkJLmR2aV95dXYgICAgICAgID0gNywKKwkJLm1vZGVsX3N0cmluZyAgID0gIkJlbGtpbiBVU0IgVmlkZW9CdXMgSUkiLAogCX0sCiAJW0VDSE9GWF9JTlRFUlZJRVdfTElURV0gPSB7Ci0JCS5JbnRlcmZhY2UgICAgID0gMCwKLQkJLkNvZGVjICAgICAgICAgPSBDT0RFQ19TQUE3MTExLAotCQkuVmlkZW9DaGFubmVscyA9IDIsCi0JCS5WaWRlb05vcm0gICAgID0gVjRMMl9TVERfUEFMLAotCQkuQXVkaW9DaGFubmVscyA9IDAsCi0JCS5SYWRpbyAgICAgICAgID0gMCwKLQkJLnZiaSAgICAgICAgICAgPSAxLAotCQkuVHVuZXIgICAgICAgICA9IDAsCi0JCS5UdW5lclR5cGUgICAgID0gMCwKLQkJLlhfT2Zmc2V0ICAgICAgPSAtMSwKLQkJLllfT2Zmc2V0ICAgICAgPSAtMSwKLQkJLkR2aV95dXZfb3ZlcnJpZGUgPSAxLAotCQkuRHZpX3l1diAgICAgICA9IDcsCi0JCS5Nb2RlbFN0cmluZyAgID0gImVjaG9GWCBJbnRlclZpZXcgTGl0ZSIsCisJCS5pbnRlcmZhY2UgICAgICA9IDAsCisJCS5jb2RlYyAgICAgICAgICA9IENPREVDX1NBQTcxMTEsCisJCS52aWRlb19jaGFubmVscyA9IDIsCisJCS52aWRlb19ub3JtICAgICA9IFY0TDJfU1REX1BBTCwKKwkJLmF1ZGlvX2NoYW5uZWxzID0gMCwKKwkJLnJhZGlvICAgICAgICAgID0gMCwKKwkJLnZiaSAgICAgICAgICAgID0gMSwKKwkJLnR1bmVyICAgICAgICAgID0gMCwKKwkJLnR1bmVyX3R5cGUgICAgID0gMCwKKwkJLnhfb2Zmc2V0ICAgICAgID0gLTEsCisJCS55X29mZnNldCAgICAgICA9IC0xLAorCQkuZHZpX3l1dl9vdmVycmlkZSA9IDEsCisJCS5kdmlfeXV2ICAgICAgICA9IDcsCisJCS5tb2RlbF9zdHJpbmcgICA9ICJlY2hvRlggSW50ZXJWaWV3IExpdGUiLAogCX0sCiAJW1VTQkdFQVJfVVNCR19WMV0gPSB7Ci0JCS5JbnRlcmZhY2UgICAgID0gLTEsCi0JCS5Db2RlYyAgICAgICAgID0gQ09ERUNfU0FBNzExMSwKLQkJLlZpZGVvQ2hhbm5lbHMgPSAyLAotCQkuVmlkZW9Ob3JtICAgICA9IFY0TDJfU1REX05UU0MsCi0JCS5BdWRpb0NoYW5uZWxzID0gMSwKLQkJLlJhZGlvICAgICAgICAgPSAwLAotCQkudmJpICAgICAgICAgICA9IDEsCi0JCS5UdW5lciAgICAgICAgID0gMCwKLQkJLlR1bmVyVHlwZSAgICAgPSAwLAotCQkuWF9PZmZzZXQgICAgICA9IC0xLAotCQkuWV9PZmZzZXQgICAgICA9IC0xLAotCQkuTW9kZWxTdHJpbmcgICA9ICJVU0JHZWFyIFVTQkctVjEgcmVzcC4gSEFNQSBVU0IiLAorCQkuaW50ZXJmYWNlICAgICAgPSAtMSwKKwkJLmNvZGVjICAgICAgICAgID0gQ09ERUNfU0FBNzExMSwKKwkJLnZpZGVvX2NoYW5uZWxzID0gMiwKKwkJLnZpZGVvX25vcm0gICAgID0gVjRMMl9TVERfTlRTQywKKwkJLmF1ZGlvX2NoYW5uZWxzID0gMSwKKwkJLnJhZGlvICAgICAgICAgID0gMCwKKwkJLnZiaSAgICAgICAgICAgID0gMSwKKwkJLnR1bmVyICAgICAgICAgID0gMCwKKwkJLnR1bmVyX3R5cGUgICAgID0gMCwKKwkJLnhfb2Zmc2V0ICAgICAgID0gLTEsCisJCS55X29mZnNldCAgICAgICA9IC0xLAorCQkubW9kZWxfc3RyaW5nICAgPSAiVVNCR2VhciBVU0JHLVYxIHJlc3AuIEhBTUEgVVNCIiwKIAl9LAogCVtEX0xJTktfVjEwMF0gPSB7Ci0JCS5JbnRlcmZhY2UgICAgID0gLTEsCi0JCS5Db2RlYyAgICAgICAgID0gQ09ERUNfU0FBNzExMywKLQkJLlZpZGVvQ2hhbm5lbHMgPSA0LAotCQkuVmlkZW9Ob3JtICAgICA9IFY0TDJfU1REX05UU0MsCi0JCS5BdWRpb0NoYW5uZWxzID0gMCwKLQkJLlJhZGlvICAgICAgICAgPSAwLAotCQkudmJpICAgICAgICAgICA9IDEsCi0JCS5UdW5lciAgICAgICAgID0gMCwKLQkJLlR1bmVyVHlwZSAgICAgPSAwLAotCQkuWF9PZmZzZXQgICAgICA9IDAsCi0JCS5ZX09mZnNldCAgICAgID0gMywKLQkJLkR2aV95dXZfb3ZlcnJpZGUgPSAxLAotCQkuRHZpX3l1diAgICAgICA9IDcsCi0JCS5Nb2RlbFN0cmluZyAgID0gIkQtTGluayBWMTAwIiwKKwkJLmludGVyZmFjZSAgICAgID0gLTEsCisJCS5jb2RlYyAgICAgICAgICA9IENPREVDX1NBQTcxMTMsCisJCS52aWRlb19jaGFubmVscyA9IDQsCisJCS52aWRlb19ub3JtICAgICA9IFY0TDJfU1REX05UU0MsCisJCS5hdWRpb19jaGFubmVscyA9IDAsCisJCS5yYWRpbyAgICAgICAgICA9IDAsCisJCS52YmkgICAgICAgICAgICA9IDEsCisJCS50dW5lciAgICAgICAgICA9IDAsCisJCS50dW5lcl90eXBlICAgICA9IDAsCisJCS54X29mZnNldCAgICAgICA9IDAsCisJCS55X29mZnNldCAgICAgICA9IDMsCisJCS5kdmlfeXV2X292ZXJyaWRlID0gMSwKKwkJLmR2aV95dXYgICAgICAgID0gNywKKwkJLm1vZGVsX3N0cmluZyAgID0gIkQtTGluayBWMTAwIiwKIAl9LAogCVtYMTBfVVNCX0NBTUVSQV0gPSB7Ci0JCS5JbnRlcmZhY2UgICAgID0gLTEsCi0JCS5Db2RlYyAgICAgICAgID0gQ09ERUNfU0FBNzExMSwKLQkJLlZpZGVvQ2hhbm5lbHMgPSAyLAotCQkuVmlkZW9Ob3JtICAgICA9IFY0TDJfU1REX05UU0MsCi0JCS5BdWRpb0NoYW5uZWxzID0gMSwKLQkJLlJhZGlvICAgICAgICAgPSAwLAotCQkudmJpICAgICAgICAgICA9IDEsCi0JCS5UdW5lciAgICAgICAgID0gMCwKLQkJLlR1bmVyVHlwZSAgICAgPSAwLAotCQkuWF9PZmZzZXQgICAgICA9IC0xLAotCQkuWV9PZmZzZXQgICAgICA9IC0xLAotCQkuTW9kZWxTdHJpbmcgICA9ICJYMTAgVVNCIENhbWVyYSIsCisJCS5pbnRlcmZhY2UgICAgICA9IC0xLAorCQkuY29kZWMgICAgICAgICAgPSBDT0RFQ19TQUE3MTExLAorCQkudmlkZW9fY2hhbm5lbHMgPSAyLAorCQkudmlkZW9fbm9ybSAgICAgPSBWNEwyX1NURF9OVFNDLAorCQkuYXVkaW9fY2hhbm5lbHMgPSAxLAorCQkucmFkaW8gICAgICAgICAgPSAwLAorCQkudmJpICAgICAgICAgICAgPSAxLAorCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkudHVuZXJfdHlwZSAgICAgPSAwLAorCQkueF9vZmZzZXQgICAgICAgPSAtMSwKKwkJLnlfb2Zmc2V0ICAgICAgID0gLTEsCisJCS5tb2RlbF9zdHJpbmcgICA9ICJYMTAgVVNCIENhbWVyYSIsCiAJfSwKIAlbSFBHX1dJTlRWX0xJVkVfUEFMX0JHXSA9IHsKLQkJLkludGVyZmFjZSAgICAgPSAtMSwKLQkJLkNvZGVjICAgICAgICAgPSBDT0RFQ19TQUE3MTExLAotCQkuVmlkZW9DaGFubmVscyA9IDIsCi0JCS5WaWRlb05vcm0gICAgID0gVjRMMl9TVERfUEFMLAotCQkuQXVkaW9DaGFubmVscyA9IDEsCi0JCS5SYWRpbyAgICAgICAgID0gMCwKLQkJLnZiaSAgICAgICAgICAgPSAxLAotCQkuVHVuZXIgICAgICAgICA9IDAsCi0JCS5UdW5lclR5cGUgICAgID0gMCwKLQkJLlhfT2Zmc2V0ICAgICAgPSAtMSwKLQkJLllfT2Zmc2V0ICAgICAgPSAzLAotCQkuRHZpX3l1dl9vdmVycmlkZSA9IDEsCi0JCS5EdmlfeXV2ICAgICAgID0gNywKLQkJLk1vZGVsU3RyaW5nICAgPSAiSGF1cHBhdWdlIFdpblRWIFVTQiBMaXZlIChQQUwgQi9HKSIsCisJCS5pbnRlcmZhY2UgICAgICA9IC0xLAorCQkuY29kZWMgICAgICAgICAgPSBDT0RFQ19TQUE3MTExLAorCQkudmlkZW9fY2hhbm5lbHMgPSAyLAorCQkudmlkZW9fbm9ybSAgICAgPSBWNEwyX1NURF9QQUwsCisJCS5hdWRpb19jaGFubmVscyA9IDEsCisJCS5yYWRpbyAgICAgICAgICA9IDAsCisJCS52YmkgICAgICAgICAgICA9IDEsCisJCS50dW5lciAgICAgICAgICA9IDAsCisJCS50dW5lcl90eXBlICAgICA9IDAsCisJCS54X29mZnNldCAgICAgICA9IC0xLAorCQkueV9vZmZzZXQgICAgICAgPSAzLAorCQkuZHZpX3l1dl9vdmVycmlkZSA9IDEsCisJCS5kdmlfeXV2ICAgICAgICA9IDcsCisJCS5tb2RlbF9zdHJpbmcgICA9ICJIYXVwcGF1Z2UgV2luVFYgVVNCIExpdmUgKFBBTCBCL0cpIiwKIAl9LAogCVtIUEdfV0lOVFZfTElWRV9QUk9fTlRTQ19NTl0gPSB7Ci0JCS5JbnRlcmZhY2UgICAgID0gLTEsCi0JCS5Db2RlYyAgICAgICAgID0gQ09ERUNfU0FBNzExMywKLQkJLlZpZGVvQ2hhbm5lbHMgPSAyLAotCQkuVmlkZW9Ob3JtICAgICA9IFY0TDJfU1REX05UU0MsCi0JCS5BdWRpb0NoYW5uZWxzID0gMCwKLQkJLlJhZGlvICAgICAgICAgPSAwLAotCQkudmJpICAgICAgICAgICA9IDEsCi0JCS5UdW5lciAgICAgICAgID0gMCwKLQkJLlR1bmVyVHlwZSAgICAgPSAwLAotCQkuWF9PZmZzZXQgICAgICA9IDAsCi0JCS5ZX09mZnNldCAgICAgID0gMywKLQkJLkR2aV95dXZfb3ZlcnJpZGUgPSAxLAotCQkuRHZpX3l1diAgICAgICA9IDcsCi0JCS5Nb2RlbFN0cmluZyAgID0gIkhhdXBwYXVnZSBXaW5UViBVU0IgTGl2ZSBQcm8gKE5UU0MgTS9OKSIsCisJCS5pbnRlcmZhY2UgICAgICA9IC0xLAorCQkuY29kZWMgICAgICAgICAgPSBDT0RFQ19TQUE3MTEzLAorCQkudmlkZW9fY2hhbm5lbHMgPSAyLAorCQkudmlkZW9fbm9ybSAgICAgPSBWNEwyX1NURF9OVFNDLAorCQkuYXVkaW9fY2hhbm5lbHMgPSAwLAorCQkucmFkaW8gICAgICAgICAgPSAwLAorCQkudmJpICAgICAgICAgICAgPSAxLAorCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkudHVuZXJfdHlwZSAgICAgPSAwLAorCQkueF9vZmZzZXQgICAgICAgPSAwLAorCQkueV9vZmZzZXQgICAgICAgPSAzLAorCQkuZHZpX3l1dl9vdmVycmlkZSA9IDEsCisJCS5kdmlfeXV2ICAgICAgICA9IDcsCisJCS5tb2RlbF9zdHJpbmcgICA9ICJIYXVwcGF1Z2UgV2luVFYgVVNCIExpdmUgUHJvIChOVFNDIE0vTikiLAogCX0sCiAJW1pPUkFOX1BNRF9OT0dBVEVDSF0gPSB7Ci0JCS5JbnRlcmZhY2UgICAgID0gLTEsCi0JCS5Db2RlYyAgICAgICAgID0gQ09ERUNfU0FBNzExMywKLQkJLlZpZGVvQ2hhbm5lbHMgPSAyLAotCQkuVmlkZW9Ob3JtICAgICA9IFY0TDJfU1REX1BBTCwKLQkJLkF1ZGlvQ2hhbm5lbHMgPSAyLAotCQkuUmFkaW8gICAgICAgICA9IDAsCi0JCS52YmkgICAgICAgICAgID0gMSwKLQkJLlR1bmVyICAgICAgICAgPSAwLAotCQkuVHVuZXJUeXBlICAgICA9IDAsCi0JCS5YX09mZnNldCAgICAgID0gMCwKLQkJLllfT2Zmc2V0ICAgICAgPSAzLAotCQkuRHZpX3l1dl9vdmVycmlkZSA9IDEsCi0JCS5EdmlfeXV2ICAgICAgID0gNywKLQkJLk1vZGVsU3RyaW5nICAgPSAiWm9yYW4gQ28uIFBNRCAoTm9nYXRlY2gpIEFWLWdyYWJiZXIgTWFuaGF0dGFuIiwKKwkJLmludGVyZmFjZSAgICAgID0gLTEsCisJCS5jb2RlYyAgICAgICAgICA9IENPREVDX1NBQTcxMTMsCisJCS52aWRlb19jaGFubmVscyA9IDIsCisJCS52aWRlb19ub3JtICAgICA9IFY0TDJfU1REX1BBTCwKKwkJLmF1ZGlvX2NoYW5uZWxzID0gMiwKKwkJLnJhZGlvICAgICAgICAgID0gMCwKKwkJLnZiaSAgICAgICAgICAgID0gMSwKKwkJLnR1bmVyICAgICAgICAgID0gMCwKKwkJLnR1bmVyX3R5cGUgICAgID0gMCwKKwkJLnhfb2Zmc2V0ICAgICAgID0gMCwKKwkJLnlfb2Zmc2V0ICAgICAgID0gMywKKwkJLmR2aV95dXZfb3ZlcnJpZGUgPSAxLAorCQkuZHZpX3l1diAgICAgICAgPSA3LAorCQkubW9kZWxfc3RyaW5nICAgPSAiWm9yYW4gQ28uIFBNRCAoTm9nYXRlY2gpIEFWLWdyYWJiZXIgTWFuaGF0dGFuIiwKIAl9LAogCVtOT0dBVEVDSF9VU0JfVFZfTlRTQ19GTV0gPSB7Ci0JCS5JbnRlcmZhY2UgICAgID0gLTEsCi0JCS5Db2RlYyAgICAgICAgID0gQ09ERUNfU0FBNzExMSwKLQkJLlZpZGVvQ2hhbm5lbHMgPSAzLAotCQkuVmlkZW9Ob3JtICAgICA9IFY0TDJfU1REX05UU0MsCi0JCS5BdWRpb0NoYW5uZWxzID0gMSwKLQkJLlJhZGlvICAgICAgICAgPSAxLAotCQkudmJpICAgICAgICAgICA9IDEsCi0JCS5UdW5lciAgICAgICAgID0gMSwKLQkJLlR1bmVyVHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX05UU0NfTSwKLQkJLlhfT2Zmc2V0ICAgICAgPSAtMSwKLQkJLllfT2Zmc2V0ICAgICAgPSAyMCwKLQkJLk1vZGVsU3RyaW5nICAgPSAiTm9nYXRlY2ggVVNCLVRWIChOVFNDKSBGTSIsCisJCS5pbnRlcmZhY2UgICAgICA9IC0xLAorCQkuY29kZWMgICAgICAgICAgPSBDT0RFQ19TQUE3MTExLAorCQkudmlkZW9fY2hhbm5lbHMgPSAzLAorCQkudmlkZW9fbm9ybSAgICAgPSBWNEwyX1NURF9OVFNDLAorCQkuYXVkaW9fY2hhbm5lbHMgPSAxLAorCQkucmFkaW8gICAgICAgICAgPSAxLAorCQkudmJpICAgICAgICAgICAgPSAxLAorCQkudHVuZXIgICAgICAgICAgPSAxLAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX05UU0NfTSwKKwkJLnhfb2Zmc2V0ICAgICAgID0gLTEsCisJCS55X29mZnNldCAgICAgICA9IDIwLAorCQkubW9kZWxfc3RyaW5nICAgPSAiTm9nYXRlY2ggVVNCLVRWIChOVFNDKSBGTSIsCiAJfSwKIAlbUE5ZX1VTQl9UVl9OVFNDX0ZNXSA9IHsKLQkJLkludGVyZmFjZSAgICAgPSAtMSwKLQkJLkNvZGVjICAgICAgICAgPSBDT0RFQ19TQUE3MTExLAotCQkuVmlkZW9DaGFubmVscyA9IDMsCi0JCS5WaWRlb05vcm0gICAgID0gVjRMMl9TVERfTlRTQywKLQkJLkF1ZGlvQ2hhbm5lbHMgPSAxLAotCQkuUmFkaW8gICAgICAgICA9IDEsCi0JCS52YmkgICAgICAgICAgID0gMSwKLQkJLlR1bmVyICAgICAgICAgPSAxLAotCQkuVHVuZXJUeXBlICAgICA9IFRVTkVSX1BISUxJUFNfTlRTQ19NLAotCQkuWF9PZmZzZXQgICAgICA9IC0xLAotCQkuWV9PZmZzZXQgICAgICA9IDIwLAotCQkuTW9kZWxTdHJpbmcgICA9ICJQTlkgVVNCLVRWIChOVFNDKSBGTSIsCisJCS5pbnRlcmZhY2UgICAgICA9IC0xLAorCQkuY29kZWMgICAgICAgICAgPSBDT0RFQ19TQUE3MTExLAorCQkudmlkZW9fY2hhbm5lbHMgPSAzLAorCQkudmlkZW9fbm9ybSAgICAgPSBWNEwyX1NURF9OVFNDLAorCQkuYXVkaW9fY2hhbm5lbHMgPSAxLAorCQkucmFkaW8gICAgICAgICAgPSAxLAorCQkudmJpICAgICAgICAgICAgPSAxLAorCQkudHVuZXIgICAgICAgICAgPSAxLAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX05UU0NfTSwKKwkJLnhfb2Zmc2V0ICAgICAgID0gLTEsCisJCS55X29mZnNldCAgICAgICA9IDIwLAorCQkubW9kZWxfc3RyaW5nICAgPSAiUE5ZIFVTQi1UViAoTlRTQykgRk0iLAogCX0sCiAJW1BWX1BMQVlUVl9VU0JfUFJPX1BBTF9GTV0gPSB7Ci0JCS5JbnRlcmZhY2UgICAgID0gMCwKLQkJLkNvZGVjICAgICAgICAgPSBDT0RFQ19TQUE3MTEzLAotCQkuVmlkZW9DaGFubmVscyA9IDMsCi0JCS5WaWRlb05vcm0gICAgID0gVjRMMl9TVERfUEFMLAotCQkuQXVkaW9DaGFubmVscyA9IDEsCi0JCS5SYWRpbyAgICAgICAgID0gMSwKLQkJLnZiaSAgICAgICAgICAgPSAxLAotCQkuVHVuZXIgICAgICAgICA9IDEsCi0JCS5UdW5lclR5cGUgICAgID0gVFVORVJfUEhJTElQU19QQUwsCi0JCS5YX09mZnNldCAgICAgID0gMCwKLQkJLllfT2Zmc2V0ICAgICAgPSAzLAotCQkuRHZpX3l1dl9vdmVycmlkZSA9IDEsCi0JCS5EdmlfeXV2ICAgICAgID0gNywKLQkJLk1vZGVsU3RyaW5nICAgPSAiUGl4ZWxWaWV3IFBsYXlUdi1VU0IgUFJPIChQQUwpIEZNIiwKKwkJLmludGVyZmFjZSAgICAgID0gMCwKKwkJLmNvZGVjICAgICAgICAgID0gQ09ERUNfU0FBNzExMywKKwkJLnZpZGVvX2NoYW5uZWxzID0gMywKKwkJLnZpZGVvX25vcm0gICAgID0gVjRMMl9TVERfUEFMLAorCQkuYXVkaW9fY2hhbm5lbHMgPSAxLAorCQkucmFkaW8gICAgICAgICAgPSAxLAorCQkudmJpICAgICAgICAgICAgPSAxLAorCQkudHVuZXIgICAgICAgICAgPSAxLAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1BBTCwKKwkJLnhfb2Zmc2V0ICAgICAgID0gMCwKKwkJLnlfb2Zmc2V0ICAgICAgID0gMywKKwkJLmR2aV95dXZfb3ZlcnJpZGUgPSAxLAorCQkuZHZpX3l1diAgICAgICAgPSA3LAorCQkubW9kZWxfc3RyaW5nICAgPSAiUGl4ZWxWaWV3IFBsYXlUdi1VU0IgUFJPIChQQUwpIEZNIiwKIAl9LAogCVtaVF83MjFdID0gewotCQkuSW50ZXJmYWNlICAgICA9IDAsCi0JCS5Db2RlYyAgICAgICAgID0gQ09ERUNfU0FBNzExMywKLQkJLlZpZGVvQ2hhbm5lbHMgPSAzLAotCQkuVmlkZW9Ob3JtICAgICA9IFY0TDJfU1REX1BBTCwKLQkJLkF1ZGlvQ2hhbm5lbHMgPSAxLAotCQkuUmFkaW8gICAgICAgICA9IDEsCi0JCS52YmkgICAgICAgICAgID0gMSwKLQkJLlR1bmVyICAgICAgICAgPSAxLAotCQkuVHVuZXJUeXBlICAgICA9IFRVTkVSX1BISUxJUFNfUEFMLAotCQkuWF9PZmZzZXQgICAgICA9IDAsCi0JCS5ZX09mZnNldCAgICAgID0gMywKLQkJLkR2aV95dXZfb3ZlcnJpZGUgPSAxLAotCQkuRHZpX3l1diAgICAgICA9IDcsCi0JCS5Nb2RlbFN0cmluZyAgID0gIlpUViBaVC03MjEgMi40R0h6IFVTQiBBL1YgUmVjZWl2ZXIiLAorCQkuaW50ZXJmYWNlICAgICAgPSAwLAorCQkuY29kZWMgICAgICAgICAgPSBDT0RFQ19TQUE3MTEzLAorCQkudmlkZW9fY2hhbm5lbHMgPSAzLAorCQkudmlkZW9fbm9ybSAgICAgPSBWNEwyX1NURF9QQUwsCisJCS5hdWRpb19jaGFubmVscyA9IDEsCisJCS5yYWRpbyAgICAgICAgICA9IDEsCisJCS52YmkgICAgICAgICAgICA9IDEsCisJCS50dW5lciAgICAgICAgICA9IDEsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfUEFMLAorCQkueF9vZmZzZXQgICAgICAgPSAwLAorCQkueV9vZmZzZXQgICAgICAgPSAzLAorCQkuZHZpX3l1dl9vdmVycmlkZSA9IDEsCisJCS5kdmlfeXV2ICAgICAgICA9IDcsCisJCS5tb2RlbF9zdHJpbmcgICA9ICJaVFYgWlQtNzIxIDIuNEdIeiBVU0IgQS9WIFJlY2VpdmVyIiwKIAl9LAogCVtIUEdfV0lOVFZfTlRTQ19NTl0gPSB7Ci0JCS5JbnRlcmZhY2UgICAgID0gLTEsCi0JCS5Db2RlYyAgICAgICAgID0gQ09ERUNfU0FBNzExMSwKLQkJLlZpZGVvQ2hhbm5lbHMgPSAzLAotCQkuVmlkZW9Ob3JtICAgICA9IFY0TDJfU1REX05UU0MsCi0JCS5BdWRpb0NoYW5uZWxzID0gMSwKLQkJLlJhZGlvICAgICAgICAgPSAwLAotCQkudmJpICAgICAgICAgICA9IDEsCi0JCS5UdW5lciAgICAgICAgID0gMSwKLQkJLlR1bmVyVHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX05UU0NfTSwKLQkJLlhfT2Zmc2V0ICAgICAgPSAtMSwKLQkJLllfT2Zmc2V0ICAgICAgPSAyMCwKLQkJLk1vZGVsU3RyaW5nICAgPSAiSGF1cHBhdWdlIFdpblRWIFVTQiAoTlRTQyBNL04pIiwKKwkJLmludGVyZmFjZSAgICAgID0gLTEsCisJCS5jb2RlYyAgICAgICAgICA9IENPREVDX1NBQTcxMTEsCisJCS52aWRlb19jaGFubmVscyA9IDMsCisJCS52aWRlb19ub3JtICAgICA9IFY0TDJfU1REX05UU0MsCisJCS5hdWRpb19jaGFubmVscyA9IDEsCisJCS5yYWRpbyAgICAgICAgICA9IDAsCisJCS52YmkgICAgICAgICAgICA9IDEsCisJCS50dW5lciAgICAgICAgICA9IDEsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfTlRTQ19NLAorCQkueF9vZmZzZXQgICAgICAgPSAtMSwKKwkJLnlfb2Zmc2V0ICAgICAgID0gMjAsCisJCS5tb2RlbF9zdHJpbmcgICA9ICJIYXVwcGF1Z2UgV2luVFYgVVNCIChOVFNDIE0vTikiLAogCX0sCiAJW0hQR19XSU5UVl9QQUxfQkddID0gewotCQkuSW50ZXJmYWNlICAgICA9IC0xLAotCQkuQ29kZWMgICAgICAgICA9IENPREVDX1NBQTcxMTEsCi0JCS5WaWRlb0NoYW5uZWxzID0gMywKLQkJLlZpZGVvTm9ybSAgICAgPSBWNEwyX1NURF9QQUwsCi0JCS5BdWRpb0NoYW5uZWxzID0gMSwKLQkJLlJhZGlvICAgICAgICAgPSAwLAotCQkudmJpICAgICAgICAgICA9IDEsCi0JCS5UdW5lciAgICAgICAgID0gMSwKLQkJLlR1bmVyVHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1BBTCwKLQkJLlhfT2Zmc2V0ICAgICAgPSAtMSwKLQkJLllfT2Zmc2V0ICAgICAgPSAtMSwKLQkJLk1vZGVsU3RyaW5nICAgPSAiSGF1cHBhdWdlIFdpblRWIFVTQiAoUEFMIEIvRykiLAorCQkuaW50ZXJmYWNlICAgICAgPSAtMSwKKwkJLmNvZGVjICAgICAgICAgID0gQ09ERUNfU0FBNzExMSwKKwkJLnZpZGVvX2NoYW5uZWxzID0gMywKKwkJLnZpZGVvX25vcm0gICAgID0gVjRMMl9TVERfUEFMLAorCQkuYXVkaW9fY2hhbm5lbHMgPSAxLAorCQkucmFkaW8gICAgICAgICAgPSAwLAorCQkudmJpICAgICAgICAgICAgPSAxLAorCQkudHVuZXIgICAgICAgICAgPSAxLAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1BBTCwKKwkJLnhfb2Zmc2V0ICAgICAgID0gLTEsCisJCS55X29mZnNldCAgICAgICA9IC0xLAorCQkubW9kZWxfc3RyaW5nICAgPSAiSGF1cHBhdWdlIFdpblRWIFVTQiAoUEFMIEIvRykiLAogCX0sCiAJW0hQR19XSU5UVl9QQUxfSV0gPSB7Ci0JCS5JbnRlcmZhY2UgICAgID0gLTEsCi0JCS5Db2RlYyAgICAgICAgID0gQ09ERUNfU0FBNzExMSwKLQkJLlZpZGVvQ2hhbm5lbHMgPSAzLAotCQkuVmlkZW9Ob3JtICAgICA9IFY0TDJfU1REX1BBTCwKLQkJLkF1ZGlvQ2hhbm5lbHMgPSAxLAotCQkuUmFkaW8gICAgICAgICA9IDAsCi0JCS52YmkgICAgICAgICAgID0gMSwKLQkJLlR1bmVyICAgICAgICAgPSAxLAotCQkuVHVuZXJUeXBlICAgICA9IFRVTkVSX1BISUxJUFNfUEFMLAotCQkuWF9PZmZzZXQgICAgICA9IC0xLAotCQkuWV9PZmZzZXQgICAgICA9IC0xLAotCQkuTW9kZWxTdHJpbmcgICA9ICJIYXVwcGF1Z2UgV2luVFYgVVNCIChQQUwgSSkiLAorCQkuaW50ZXJmYWNlICAgICAgPSAtMSwKKwkJLmNvZGVjICAgICAgICAgID0gQ09ERUNfU0FBNzExMSwKKwkJLnZpZGVvX2NoYW5uZWxzID0gMywKKwkJLnZpZGVvX25vcm0gICAgID0gVjRMMl9TVERfUEFMLAorCQkuYXVkaW9fY2hhbm5lbHMgPSAxLAorCQkucmFkaW8gICAgICAgICAgPSAwLAorCQkudmJpICAgICAgICAgICAgPSAxLAorCQkudHVuZXIgICAgICAgICAgPSAxLAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1BBTCwKKwkJLnhfb2Zmc2V0ICAgICAgID0gLTEsCisJCS55X29mZnNldCAgICAgICA9IC0xLAorCQkubW9kZWxfc3RyaW5nICAgPSAiSGF1cHBhdWdlIFdpblRWIFVTQiAoUEFMIEkpIiwKIAl9LAogCVtIUEdfV0lOVFZfUEFMX1NFQ0FNX0xdID0gewotCQkuSW50ZXJmYWNlICAgICA9IC0xLAotCQkuQ29kZWMgICAgICAgICA9IENPREVDX1NBQTcxMTEsCi0JCS5WaWRlb0NoYW5uZWxzID0gMywKLQkJLlZpZGVvTm9ybSAgICAgPSBWNEwyX1NURF9TRUNBTSwKLQkJLkF1ZGlvQ2hhbm5lbHMgPSAxLAotCQkuUmFkaW8gICAgICAgICA9IDAsCi0JCS52YmkgICAgICAgICAgID0gMSwKLQkJLlR1bmVyICAgICAgICAgPSAxLAotCQkuVHVuZXJUeXBlICAgICA9IFRVTkVSX1BISUxJUFNfU0VDQU0sCi0JCS5YX09mZnNldCAgICAgID0gMHg4MCwKLQkJLllfT2Zmc2V0ICAgICAgPSAweDE2LAotCQkuTW9kZWxTdHJpbmcgICA9ICJIYXVwcGF1Z2UgV2luVFYgVVNCIChQQUwvU0VDQU0gTCkiLAorCQkuaW50ZXJmYWNlICAgICAgPSAtMSwKKwkJLmNvZGVjICAgICAgICAgID0gQ09ERUNfU0FBNzExMSwKKwkJLnZpZGVvX2NoYW5uZWxzID0gMywKKwkJLnZpZGVvX25vcm0gICAgID0gVjRMMl9TVERfU0VDQU0sCisJCS5hdWRpb19jaGFubmVscyA9IDEsCisJCS5yYWRpbyAgICAgICAgICA9IDAsCisJCS52YmkgICAgICAgICAgICA9IDEsCisJCS50dW5lciAgICAgICAgICA9IDEsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfU0VDQU0sCisJCS54X29mZnNldCAgICAgICA9IDB4ODAsCisJCS55X29mZnNldCAgICAgICA9IDB4MTYsCisJCS5tb2RlbF9zdHJpbmcgICA9ICJIYXVwcGF1Z2UgV2luVFYgVVNCIChQQUwvU0VDQU0gTCkiLAogCX0sCiAJW0hQR19XSU5UVl9QQUxfRF9LXSA9IHsKLQkJLkludGVyZmFjZSAgICAgPSAtMSwKLQkJLkNvZGVjICAgICAgICAgPSBDT0RFQ19TQUE3MTExLAotCQkuVmlkZW9DaGFubmVscyA9IDMsCi0JCS5WaWRlb05vcm0gICAgID0gVjRMMl9TVERfUEFMLAotCQkuQXVkaW9DaGFubmVscyA9IDEsCi0JCS5SYWRpbyAgICAgICAgID0gMCwKLQkJLnZiaSAgICAgICAgICAgPSAxLAotCQkuVHVuZXIgICAgICAgICA9IDEsCi0JCS5UdW5lclR5cGUgICAgID0gVFVORVJfUEhJTElQU19QQUwsCi0JCS5YX09mZnNldCAgICAgID0gLTEsCi0JCS5ZX09mZnNldCAgICAgID0gLTEsCi0JCS5Nb2RlbFN0cmluZyAgID0gIkhhdXBwYXVnZSBXaW5UViBVU0IgKFBBTCBEL0spIiwKKwkJLmludGVyZmFjZSAgICAgID0gLTEsCisJCS5jb2RlYyAgICAgICAgICA9IENPREVDX1NBQTcxMTEsCisJCS52aWRlb19jaGFubmVscyA9IDMsCisJCS52aWRlb19ub3JtICAgICA9IFY0TDJfU1REX1BBTCwKKwkJLmF1ZGlvX2NoYW5uZWxzID0gMSwKKwkJLnJhZGlvICAgICAgICAgID0gMCwKKwkJLnZiaSAgICAgICAgICAgID0gMSwKKwkJLnR1bmVyICAgICAgICAgID0gMSwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19QQUwsCisJCS54X29mZnNldCAgICAgICA9IC0xLAorCQkueV9vZmZzZXQgICAgICAgPSAtMSwKKwkJLm1vZGVsX3N0cmluZyAgID0gIkhhdXBwYXVnZSBXaW5UViBVU0IgKFBBTCBEL0spIiwKIAl9LAogCVtIUEdfV0lOVFZfTlRTQ19GTV0gPSB7Ci0JCS5JbnRlcmZhY2UgICAgID0gLTEsCi0JCS5Db2RlYyAgICAgICAgID0gQ09ERUNfU0FBNzExMSwKLQkJLlZpZGVvQ2hhbm5lbHMgPSAzLAotCQkuVmlkZW9Ob3JtICAgICA9IFY0TDJfU1REX05UU0MsCi0JCS5BdWRpb0NoYW5uZWxzID0gMSwKLQkJLlJhZGlvICAgICAgICAgPSAxLAotCQkudmJpICAgICAgICAgICA9IDEsCi0JCS5UdW5lciAgICAgICAgID0gMSwKLQkJLlR1bmVyVHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX05UU0NfTSwKLQkJLlhfT2Zmc2V0ICAgICAgPSAtMSwKLQkJLllfT2Zmc2V0ICAgICAgPSAtMSwKLQkJLk1vZGVsU3RyaW5nICAgPSAiSGF1cHBhdWdlIFdpblRWIFVTQiAoTlRTQyBGTSkiLAorCQkuaW50ZXJmYWNlICAgICAgPSAtMSwKKwkJLmNvZGVjICAgICAgICAgID0gQ09ERUNfU0FBNzExMSwKKwkJLnZpZGVvX2NoYW5uZWxzID0gMywKKwkJLnZpZGVvX25vcm0gICAgID0gVjRMMl9TVERfTlRTQywKKwkJLmF1ZGlvX2NoYW5uZWxzID0gMSwKKwkJLnJhZGlvICAgICAgICAgID0gMSwKKwkJLnZiaSAgICAgICAgICAgID0gMSwKKwkJLnR1bmVyICAgICAgICAgID0gMSwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19OVFNDX00sCisJCS54X29mZnNldCAgICAgICA9IC0xLAorCQkueV9vZmZzZXQgICAgICAgPSAtMSwKKwkJLm1vZGVsX3N0cmluZyAgID0gIkhhdXBwYXVnZSBXaW5UViBVU0IgKE5UU0MgRk0pIiwKIAl9LAogCVtIUEdfV0lOVFZfUEFMX0JHX0ZNXSA9IHsKLQkJLkludGVyZmFjZSAgICAgPSAtMSwKLQkJLkNvZGVjICAgICAgICAgPSBDT0RFQ19TQUE3MTExLAotCQkuVmlkZW9DaGFubmVscyA9IDMsCi0JCS5WaWRlb05vcm0gICAgID0gVjRMMl9TVERfUEFMLAotCQkuQXVkaW9DaGFubmVscyA9IDEsCi0JCS5SYWRpbyAgICAgICAgID0gMSwKLQkJLnZiaSAgICAgICAgICAgPSAxLAotCQkuVHVuZXIgICAgICAgICA9IDEsCi0JCS5UdW5lclR5cGUgICAgID0gVFVORVJfUEhJTElQU19QQUwsCi0JCS5YX09mZnNldCAgICAgID0gLTEsCi0JCS5ZX09mZnNldCAgICAgID0gLTEsCi0JCS5Nb2RlbFN0cmluZyAgID0gIkhhdXBwYXVnZSBXaW5UViBVU0IgKFBBTCBCL0cgRk0pIiwKKwkJLmludGVyZmFjZSAgICAgID0gLTEsCisJCS5jb2RlYyAgICAgICAgICA9IENPREVDX1NBQTcxMTEsCisJCS52aWRlb19jaGFubmVscyA9IDMsCisJCS52aWRlb19ub3JtICAgICA9IFY0TDJfU1REX1BBTCwKKwkJLmF1ZGlvX2NoYW5uZWxzID0gMSwKKwkJLnJhZGlvICAgICAgICAgID0gMSwKKwkJLnZiaSAgICAgICAgICAgID0gMSwKKwkJLnR1bmVyICAgICAgICAgID0gMSwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19QQUwsCisJCS54X29mZnNldCAgICAgICA9IC0xLAorCQkueV9vZmZzZXQgICAgICAgPSAtMSwKKwkJLm1vZGVsX3N0cmluZyAgID0gIkhhdXBwYXVnZSBXaW5UViBVU0IgKFBBTCBCL0cgRk0pIiwKIAl9LAogCVtIUEdfV0lOVFZfUEFMX0lfRk1dID0gewotCQkuSW50ZXJmYWNlICAgICA9IC0xLAotCQkuQ29kZWMgICAgICAgICA9IENPREVDX1NBQTcxMTEsCi0JCS5WaWRlb0NoYW5uZWxzID0gMywKLQkJLlZpZGVvTm9ybSAgICAgPSBWNEwyX1NURF9QQUwsCi0JCS5BdWRpb0NoYW5uZWxzID0gMSwKLQkJLlJhZGlvICAgICAgICAgPSAxLAotCQkudmJpICAgICAgICAgICA9IDEsCi0JCS5UdW5lciAgICAgICAgID0gMSwKLQkJLlR1bmVyVHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1BBTCwKLQkJLlhfT2Zmc2V0ICAgICAgPSAtMSwKLQkJLllfT2Zmc2V0ICAgICAgPSAtMSwKLQkJLk1vZGVsU3RyaW5nICAgPSAiSGF1cHBhdWdlIFdpblRWIFVTQiAoUEFMIEkgRk0pIiwKKwkJLmludGVyZmFjZSAgICAgID0gLTEsCisJCS5jb2RlYyAgICAgICAgICA9IENPREVDX1NBQTcxMTEsCisJCS52aWRlb19jaGFubmVscyA9IDMsCisJCS52aWRlb19ub3JtICAgICA9IFY0TDJfU1REX1BBTCwKKwkJLmF1ZGlvX2NoYW5uZWxzID0gMSwKKwkJLnJhZGlvICAgICAgICAgID0gMSwKKwkJLnZiaSAgICAgICAgICAgID0gMSwKKwkJLnR1bmVyICAgICAgICAgID0gMSwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19QQUwsCisJCS54X29mZnNldCAgICAgICA9IC0xLAorCQkueV9vZmZzZXQgICAgICAgPSAtMSwKKwkJLm1vZGVsX3N0cmluZyAgID0gIkhhdXBwYXVnZSBXaW5UViBVU0IgKFBBTCBJIEZNKSIsCiAJfSwKIAlbSFBHX1dJTlRWX1BBTF9EX0tfRk1dID0gewotCQkuSW50ZXJmYWNlICAgICA9IC0xLAotCQkuQ29kZWMgICAgICAgICA9IENPREVDX1NBQTcxMTEsCi0JCS5WaWRlb0NoYW5uZWxzID0gMywKLQkJLlZpZGVvTm9ybSAgICAgPSBWNEwyX1NURF9QQUwsCi0JCS5BdWRpb0NoYW5uZWxzID0gMSwKLQkJLlJhZGlvICAgICAgICAgPSAxLAotCQkudmJpICAgICAgICAgICA9IDEsCi0JCS5UdW5lciAgICAgICAgID0gMSwKLQkJLlR1bmVyVHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1BBTCwKLQkJLlhfT2Zmc2V0ICAgICAgPSAtMSwKLQkJLllfT2Zmc2V0ICAgICAgPSAtMSwKLQkJLk1vZGVsU3RyaW5nICAgPSAiSGF1cHBhdWdlIFdpblRWIFVTQiAoUEFMIEQvSyBGTSkiLAorCQkuaW50ZXJmYWNlICAgICAgPSAtMSwKKwkJLmNvZGVjICAgICAgICAgID0gQ09ERUNfU0FBNzExMSwKKwkJLnZpZGVvX2NoYW5uZWxzID0gMywKKwkJLnZpZGVvX25vcm0gICAgID0gVjRMMl9TVERfUEFMLAorCQkuYXVkaW9fY2hhbm5lbHMgPSAxLAorCQkucmFkaW8gICAgICAgICAgPSAxLAorCQkudmJpICAgICAgICAgICAgPSAxLAorCQkudHVuZXIgICAgICAgICAgPSAxLAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1BBTCwKKwkJLnhfb2Zmc2V0ICAgICAgID0gLTEsCisJCS55X29mZnNldCAgICAgICA9IC0xLAorCQkubW9kZWxfc3RyaW5nICAgPSAiSGF1cHBhdWdlIFdpblRWIFVTQiAoUEFMIEQvSyBGTSkiLAogCX0sCiAJW0hQR19XSU5UVl9QUk9fTlRTQ19NTl0gPSB7Ci0JCS5JbnRlcmZhY2UgICAgID0gMCwKLQkJLkNvZGVjICAgICAgICAgPSBDT0RFQ19TQUE3MTEzLAotCQkuVmlkZW9DaGFubmVscyA9IDMsCi0JCS5WaWRlb05vcm0gICAgID0gVjRMMl9TVERfTlRTQywKLQkJLkF1ZGlvQ2hhbm5lbHMgPSAxLAotCQkuUmFkaW8gICAgICAgICA9IDEsCi0JCS52YmkgICAgICAgICAgID0gMSwKLQkJLlR1bmVyICAgICAgICAgPSAxLAotCQkuVHVuZXJUeXBlICAgICA9IFRVTkVSX01JQ1JPVFVORV80MDQ5Rk01LAotCQkuWF9PZmZzZXQgICAgICA9IDAsCi0JCS5ZX09mZnNldCAgICAgID0gMywKLQkJLkR2aV95dXZfb3ZlcnJpZGUgPSAxLAotCQkuRHZpX3l1diAgICAgICA9IDcsCi0JCS5Nb2RlbFN0cmluZyAgID0gIkhhdXBwYXVnZSBXaW5UViBVU0IgUHJvIChOVFNDIE0vTikiLAorCQkuaW50ZXJmYWNlICAgICAgPSAwLAorCQkuY29kZWMgICAgICAgICAgPSBDT0RFQ19TQUE3MTEzLAorCQkudmlkZW9fY2hhbm5lbHMgPSAzLAorCQkudmlkZW9fbm9ybSAgICAgPSBWNEwyX1NURF9OVFNDLAorCQkuYXVkaW9fY2hhbm5lbHMgPSAxLAorCQkucmFkaW8gICAgICAgICAgPSAxLAorCQkudmJpICAgICAgICAgICAgPSAxLAorCQkudHVuZXIgICAgICAgICAgPSAxLAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9NSUNST1RVTkVfNDA0OUZNNSwKKwkJLnhfb2Zmc2V0ICAgICAgID0gMCwKKwkJLnlfb2Zmc2V0ICAgICAgID0gMywKKwkJLmR2aV95dXZfb3ZlcnJpZGUgPSAxLAorCQkuZHZpX3l1diAgICAgICAgPSA3LAorCQkubW9kZWxfc3RyaW5nICAgPSAiSGF1cHBhdWdlIFdpblRWIFVTQiBQcm8gKE5UU0MgTS9OKSIsCiAJfSwKIAlbSFBHX1dJTlRWX1BST19OVFNDX01OX1YyXSA9IHsKLQkJLkludGVyZmFjZSAgICAgPSAwLAotCQkuQ29kZWMgICAgICAgICA9IENPREVDX1NBQTcxMTMsCi0JCS5WaWRlb0NoYW5uZWxzID0gMywKLQkJLlZpZGVvTm9ybSAgICAgPSBWNEwyX1NURF9OVFNDLAotCQkuQXVkaW9DaGFubmVscyA9IDEsCi0JCS5SYWRpbyAgICAgICAgID0gMSwKLQkJLnZiaSAgICAgICAgICAgPSAxLAotCQkuVHVuZXIgICAgICAgICA9IDEsCi0JCS5UdW5lclR5cGUgICAgID0gVFVORVJfTUlDUk9UVU5FXzQwNDlGTTUsCi0JCS5YX09mZnNldCAgICAgID0gMCwKLQkJLllfT2Zmc2V0ICAgICAgPSAzLAotCQkuRHZpX3l1dl9vdmVycmlkZSA9IDEsCi0JCS5EdmlfeXV2ICAgICAgID0gNywKLQkJLk1vZGVsU3RyaW5nICAgPSAiSGF1cHBhdWdlIFdpblRWIFVTQiBQcm8gKE5UU0MgTS9OKSBWMiIsCisJCS5pbnRlcmZhY2UgICAgICA9IDAsCisJCS5jb2RlYyAgICAgICAgICA9IENPREVDX1NBQTcxMTMsCisJCS52aWRlb19jaGFubmVscyA9IDMsCisJCS52aWRlb19ub3JtICAgICA9IFY0TDJfU1REX05UU0MsCisJCS5hdWRpb19jaGFubmVscyA9IDEsCisJCS5yYWRpbyAgICAgICAgICA9IDEsCisJCS52YmkgICAgICAgICAgICA9IDEsCisJCS50dW5lciAgICAgICAgICA9IDEsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX01JQ1JPVFVORV80MDQ5Rk01LAorCQkueF9vZmZzZXQgICAgICAgPSAwLAorCQkueV9vZmZzZXQgICAgICAgPSAzLAorCQkuZHZpX3l1dl9vdmVycmlkZSA9IDEsCisJCS5kdmlfeXV2ICAgICAgICA9IDcsCisJCS5tb2RlbF9zdHJpbmcgICA9ICJIYXVwcGF1Z2UgV2luVFYgVVNCIFBybyAoTlRTQyBNL04pIFYyIiwKIAl9LAogCVtIUEdfV0lOVFZfUFJPX1BBTF0gPSB7Ci0JCS5JbnRlcmZhY2UgICAgID0gMCwKLQkJLkNvZGVjICAgICAgICAgPSBDT0RFQ19TQUE3MTEzLAotCQkuVmlkZW9DaGFubmVscyA9IDMsCi0JCS5WaWRlb05vcm0gICAgID0gVjRMMl9TVERfUEFMLAotCQkuQXVkaW9DaGFubmVscyA9IDEsCi0JCS5SYWRpbyAgICAgICAgID0gMCwKLQkJLnZiaSAgICAgICAgICAgPSAxLAotCQkuVHVuZXIgICAgICAgICA9IDEsCi0JCS5UdW5lclR5cGUgICAgID0gVFVORVJfUEhJTElQU19GTTEyMTZNRV9NSzMsCi0JCS5YX09mZnNldCAgICAgID0gMCwKLQkJLllfT2Zmc2V0ICAgICAgPSAzLAotCQkuRHZpX3l1dl9vdmVycmlkZSA9IDEsCi0JCS5EdmlfeXV2ICAgICAgID0gNywKLQkJLk1vZGVsU3RyaW5nICAgPSAiSGF1cHBhdWdlIFdpblRWIFVTQiBQcm8gKFBBTC9TRUNBTSBCL0cvSS9EL0svTCkiLAorCQkuaW50ZXJmYWNlICAgICAgPSAwLAorCQkuY29kZWMgICAgICAgICAgPSBDT0RFQ19TQUE3MTEzLAorCQkudmlkZW9fY2hhbm5lbHMgPSAzLAorCQkudmlkZW9fbm9ybSAgICAgPSBWNEwyX1NURF9QQUwsCisJCS5hdWRpb19jaGFubmVscyA9IDEsCisJCS5yYWRpbyAgICAgICAgICA9IDAsCisJCS52YmkgICAgICAgICAgICA9IDEsCisJCS50dW5lciAgICAgICAgICA9IDEsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfRk0xMjE2TUVfTUszLAorCQkueF9vZmZzZXQgICAgICAgPSAwLAorCQkueV9vZmZzZXQgICAgICAgPSAzLAorCQkuZHZpX3l1dl9vdmVycmlkZSA9IDEsCisJCS5kdmlfeXV2ICAgICAgICA9IDcsCisJCS5tb2RlbF9zdHJpbmcgICA9ICJIYXVwcGF1Z2UgV2luVFYgVVNCIFBybyAoUEFML1NFQ0FNIEIvRy9JL0QvSy9MKSIsCiAJfSwKIAlbSFBHX1dJTlRWX1BST19OVFNDX01OX1YzXSA9IHsKLQkJLkludGVyZmFjZSAgICAgPSAwLAotCQkuQ29kZWMgICAgICAgICA9IENPREVDX1NBQTcxMTMsCi0JCS5WaWRlb0NoYW5uZWxzID0gMywKLQkJLlZpZGVvTm9ybSAgICAgPSBWNEwyX1NURF9OVFNDLAotCQkuQXVkaW9DaGFubmVscyA9IDEsCi0JCS5SYWRpbyAgICAgICAgID0gMSwKLQkJLnZiaSAgICAgICAgICAgPSAxLAotCQkuVHVuZXIgICAgICAgICA9IDEsCi0JCS5UdW5lclR5cGUgICAgID0gVFVORVJfUEhJTElQU19OVFNDX00sCi0JCS5YX09mZnNldCAgICAgID0gMCwKLQkJLllfT2Zmc2V0ICAgICAgPSAzLAotCQkuRHZpX3l1dl9vdmVycmlkZSA9IDEsCi0JCS5EdmlfeXV2ICAgICAgID0gNywKLQkJLk1vZGVsU3RyaW5nICAgPSAiSGF1cHBhdWdlIFdpblRWIFVTQiBQcm8gKE5UU0MgTS9OKSBWMyIsCisJCS5pbnRlcmZhY2UgICAgICA9IDAsCisJCS5jb2RlYyAgICAgICAgICA9IENPREVDX1NBQTcxMTMsCisJCS52aWRlb19jaGFubmVscyA9IDMsCisJCS52aWRlb19ub3JtICAgICA9IFY0TDJfU1REX05UU0MsCisJCS5hdWRpb19jaGFubmVscyA9IDEsCisJCS5yYWRpbyAgICAgICAgICA9IDEsCisJCS52YmkgICAgICAgICAgICA9IDEsCisJCS50dW5lciAgICAgICAgICA9IDEsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfTlRTQ19NLAorCQkueF9vZmZzZXQgICAgICAgPSAwLAorCQkueV9vZmZzZXQgICAgICAgPSAzLAorCQkuZHZpX3l1dl9vdmVycmlkZSA9IDEsCisJCS5kdmlfeXV2ICAgICAgICA9IDcsCisJCS5tb2RlbF9zdHJpbmcgICA9ICJIYXVwcGF1Z2UgV2luVFYgVVNCIFBybyAoTlRTQyBNL04pIFYzIiwKIAl9LAogCVtIUEdfV0lOVFZfUFJPX1BBTF9CR10gPSB7Ci0JCS5JbnRlcmZhY2UgICAgID0gMCwKLQkJLkNvZGVjICAgICAgICAgPSBDT0RFQ19TQUE3MTEzLAotCQkuVmlkZW9DaGFubmVscyA9IDMsCi0JCS5WaWRlb05vcm0gICAgID0gVjRMMl9TVERfUEFMLAotCQkuQXVkaW9DaGFubmVscyA9IDEsCi0JCS5SYWRpbyAgICAgICAgID0gMCwKLQkJLnZiaSAgICAgICAgICAgPSAxLAotCQkuVHVuZXIgICAgICAgICA9IDEsCi0JCS5UdW5lclR5cGUgICAgID0gVFVORVJfUEhJTElQU19QQUwsCi0JCS5YX09mZnNldCAgICAgID0gMCwKLQkJLllfT2Zmc2V0ICAgICAgPSAzLAotCQkuRHZpX3l1dl9vdmVycmlkZSA9IDEsCi0JCS5EdmlfeXV2ICAgICAgID0gNywKLQkJLk1vZGVsU3RyaW5nICAgPSAiSGF1cHBhdWdlIFdpblRWIFVTQiBQcm8gKFBBTCBCL0cpIiwKKwkJLmludGVyZmFjZSAgICAgID0gMCwKKwkJLmNvZGVjICAgICAgICAgID0gQ09ERUNfU0FBNzExMywKKwkJLnZpZGVvX2NoYW5uZWxzID0gMywKKwkJLnZpZGVvX25vcm0gICAgID0gVjRMMl9TVERfUEFMLAorCQkuYXVkaW9fY2hhbm5lbHMgPSAxLAorCQkucmFkaW8gICAgICAgICAgPSAwLAorCQkudmJpICAgICAgICAgICAgPSAxLAorCQkudHVuZXIgICAgICAgICAgPSAxLAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1BBTCwKKwkJLnhfb2Zmc2V0ICAgICAgID0gMCwKKwkJLnlfb2Zmc2V0ICAgICAgID0gMywKKwkJLmR2aV95dXZfb3ZlcnJpZGUgPSAxLAorCQkuZHZpX3l1diAgICAgICAgPSA3LAorCQkubW9kZWxfc3RyaW5nICAgPSAiSGF1cHBhdWdlIFdpblRWIFVTQiBQcm8gKFBBTCBCL0cpIiwKIAl9LAogCVtIUEdfV0lOVFZfUFJPX1BBTF9JXSA9IHsKLQkJLkludGVyZmFjZSAgICAgPSAwLAotCQkuQ29kZWMgICAgICAgICA9IENPREVDX1NBQTcxMTMsCi0JCS5WaWRlb0NoYW5uZWxzID0gMywKLQkJLlZpZGVvTm9ybSAgICAgPSBWNEwyX1NURF9QQUwsCi0JCS5BdWRpb0NoYW5uZWxzID0gMSwKLQkJLlJhZGlvICAgICAgICAgPSAwLAotCQkudmJpICAgICAgICAgICA9IDEsCi0JCS5UdW5lciAgICAgICAgID0gMSwKLQkJLlR1bmVyVHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1BBTCwKLQkJLlhfT2Zmc2V0ICAgICAgPSAwLAotCQkuWV9PZmZzZXQgICAgICA9IDMsCi0JCS5EdmlfeXV2X292ZXJyaWRlID0gMSwKLQkJLkR2aV95dXYgICAgICAgPSA3LAotCQkuTW9kZWxTdHJpbmcgICA9ICJIYXVwcGF1Z2UgV2luVFYgVVNCIFBybyAoUEFMIEkpIiwKKwkJLmludGVyZmFjZSAgICAgID0gMCwKKwkJLmNvZGVjICAgICAgICAgID0gQ09ERUNfU0FBNzExMywKKwkJLnZpZGVvX2NoYW5uZWxzID0gMywKKwkJLnZpZGVvX25vcm0gICAgID0gVjRMMl9TVERfUEFMLAorCQkuYXVkaW9fY2hhbm5lbHMgPSAxLAorCQkucmFkaW8gICAgICAgICAgPSAwLAorCQkudmJpICAgICAgICAgICAgPSAxLAorCQkudHVuZXIgICAgICAgICAgPSAxLAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1BBTCwKKwkJLnhfb2Zmc2V0ICAgICAgID0gMCwKKwkJLnlfb2Zmc2V0ICAgICAgID0gMywKKwkJLmR2aV95dXZfb3ZlcnJpZGUgPSAxLAorCQkuZHZpX3l1diAgICAgICAgPSA3LAorCQkubW9kZWxfc3RyaW5nICAgPSAiSGF1cHBhdWdlIFdpblRWIFVTQiBQcm8gKFBBTCBJKSIsCiAJfSwKIAlbSFBHX1dJTlRWX1BST19QQUxfU0VDQU1fTF0gPSB7Ci0JCS5JbnRlcmZhY2UgICAgID0gLTEsCi0JCS5Db2RlYyAgICAgICAgID0gQ09ERUNfU0FBNzExMywKLQkJLlZpZGVvQ2hhbm5lbHMgPSAzLAotCQkuVmlkZW9Ob3JtICAgICA9IFY0TDJfU1REX1NFQ0FNLAotCQkuQXVkaW9DaGFubmVscyA9IDEsCi0JCS5SYWRpbyAgICAgICAgID0gMCwKLQkJLnZiaSAgICAgICAgICAgPSAxLAotCQkuVHVuZXIgICAgICAgICA9IDEsCi0JCS5UdW5lclR5cGUgICAgID0gVFVORVJfUEhJTElQU19TRUNBTSwKLQkJLlhfT2Zmc2V0ICAgICAgPSAwLAotCQkuWV9PZmZzZXQgICAgICA9IDMsCi0JCS5EdmlfeXV2X292ZXJyaWRlID0gMSwKLQkJLkR2aV95dXYgICAgICAgPSA3LAotCQkuTW9kZWxTdHJpbmcgICA9ICJIYXVwcGF1Z2UgV2luVFYgVVNCIFBybyAoUEFML1NFQ0FNIEwpIiwKKwkJLmludGVyZmFjZSAgICAgID0gLTEsCisJCS5jb2RlYyAgICAgICAgICA9IENPREVDX1NBQTcxMTMsCisJCS52aWRlb19jaGFubmVscyA9IDMsCisJCS52aWRlb19ub3JtICAgICA9IFY0TDJfU1REX1NFQ0FNLAorCQkuYXVkaW9fY2hhbm5lbHMgPSAxLAorCQkucmFkaW8gICAgICAgICAgPSAwLAorCQkudmJpICAgICAgICAgICAgPSAxLAorCQkudHVuZXIgICAgICAgICAgPSAxLAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1NFQ0FNLAorCQkueF9vZmZzZXQgICAgICAgPSAwLAorCQkueV9vZmZzZXQgICAgICAgPSAzLAorCQkuZHZpX3l1dl9vdmVycmlkZSA9IDEsCisJCS5kdmlfeXV2ICAgICAgICA9IDcsCisJCS5tb2RlbF9zdHJpbmcgICA9ICJIYXVwcGF1Z2UgV2luVFYgVVNCIFBybyAoUEFML1NFQ0FNIEwpIiwKIAl9LAogCVtIUEdfV0lOVFZfUFJPX1BBTF9EX0tdID0gewotCQkuSW50ZXJmYWNlICAgICA9IC0xLAotCQkuQ29kZWMgICAgICAgICA9IENPREVDX1NBQTcxMTMsCi0JCS5WaWRlb0NoYW5uZWxzID0gMywKLQkJLlZpZGVvTm9ybSAgICAgPSBWNEwyX1NURF9QQUwsCi0JCS5BdWRpb0NoYW5uZWxzID0gMSwKLQkJLlJhZGlvICAgICAgICAgPSAwLAotCQkudmJpICAgICAgICAgICA9IDEsCi0JCS5UdW5lciAgICAgICAgID0gMSwKLQkJLlR1bmVyVHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1BBTCwKLQkJLlhfT2Zmc2V0ICAgICAgPSAwLAotCQkuWV9PZmZzZXQgICAgICA9IDMsCi0JCS5EdmlfeXV2X292ZXJyaWRlID0gMSwKLQkJLkR2aV95dXYgICAgICAgPSA3LAotCQkuTW9kZWxTdHJpbmcgICA9ICJIYXVwcGF1Z2UgV2luVFYgVVNCIFBybyAoUEFMIEQvSykiLAorCQkuaW50ZXJmYWNlICAgICAgPSAtMSwKKwkJLmNvZGVjICAgICAgICAgID0gQ09ERUNfU0FBNzExMywKKwkJLnZpZGVvX2NoYW5uZWxzID0gMywKKwkJLnZpZGVvX25vcm0gICAgID0gVjRMMl9TVERfUEFMLAorCQkuYXVkaW9fY2hhbm5lbHMgPSAxLAorCQkucmFkaW8gICAgICAgICAgPSAwLAorCQkudmJpICAgICAgICAgICAgPSAxLAorCQkudHVuZXIgICAgICAgICAgPSAxLAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1BBTCwKKwkJLnhfb2Zmc2V0ICAgICAgID0gMCwKKwkJLnlfb2Zmc2V0ICAgICAgID0gMywKKwkJLmR2aV95dXZfb3ZlcnJpZGUgPSAxLAorCQkuZHZpX3l1diAgICAgICAgPSA3LAorCQkubW9kZWxfc3RyaW5nICAgPSAiSGF1cHBhdWdlIFdpblRWIFVTQiBQcm8gKFBBTCBEL0spIiwKIAl9LAogCVtIUEdfV0lOVFZfUFJPX1BBTF9TRUNBTV0gPSB7Ci0JCS5JbnRlcmZhY2UgICAgID0gLTEsCi0JCS5Db2RlYyAgICAgICAgID0gQ09ERUNfU0FBNzExMywKLQkJLlZpZGVvQ2hhbm5lbHMgPSAzLAotCQkuVmlkZW9Ob3JtICAgICA9IFY0TDJfU1REX1NFQ0FNLAotCQkuQXVkaW9DaGFubmVscyA9IDEsCi0JCS5SYWRpbyAgICAgICAgID0gMCwKLQkJLnZiaSAgICAgICAgICAgPSAxLAotCQkuVHVuZXIgICAgICAgICA9IDEsCi0JCS5UdW5lclR5cGUgICAgID0gVFVORVJfUEhJTElQU19TRUNBTSwKLQkJLlhfT2Zmc2V0ICAgICAgPSAwLAotCQkuWV9PZmZzZXQgICAgICA9IDMsCi0JCS5EdmlfeXV2X292ZXJyaWRlID0gMSwKLQkJLkR2aV95dXYgICAgICAgPSA3LAotCQkuTW9kZWxTdHJpbmcgICA9ICJIYXVwcGF1Z2UgV2luVFYgVVNCIFBybyAoUEFML1NFQ0FNIEJHREsvSS9MKSIsCisJCS5pbnRlcmZhY2UgICAgICA9IC0xLAorCQkuY29kZWMgICAgICAgICAgPSBDT0RFQ19TQUE3MTEzLAorCQkudmlkZW9fY2hhbm5lbHMgPSAzLAorCQkudmlkZW9fbm9ybSAgICAgPSBWNEwyX1NURF9TRUNBTSwKKwkJLmF1ZGlvX2NoYW5uZWxzID0gMSwKKwkJLnJhZGlvICAgICAgICAgID0gMCwKKwkJLnZiaSAgICAgICAgICAgID0gMSwKKwkJLnR1bmVyICAgICAgICAgID0gMSwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19TRUNBTSwKKwkJLnhfb2Zmc2V0ICAgICAgID0gMCwKKwkJLnlfb2Zmc2V0ICAgICAgID0gMywKKwkJLmR2aV95dXZfb3ZlcnJpZGUgPSAxLAorCQkuZHZpX3l1diAgICAgICAgPSA3LAorCQkubW9kZWxfc3RyaW5nICAgPSAiSGF1cHBhdWdlIFdpblRWIFVTQiBQcm8gKFBBTC9TRUNBTSBCR0RLL0kvTCkiLAogCX0sCiAJW0hQR19XSU5UVl9QUk9fUEFMX1NFQ0FNX1YyXSA9IHsKLQkJLkludGVyZmFjZSAgICAgPSAtMSwKLQkJLkNvZGVjICAgICAgICAgPSBDT0RFQ19TQUE3MTEzLAotCQkuVmlkZW9DaGFubmVscyA9IDMsCi0JCS5WaWRlb05vcm0gICAgID0gVjRMMl9TVERfU0VDQU0sCi0JCS5BdWRpb0NoYW5uZWxzID0gMSwKLQkJLlJhZGlvICAgICAgICAgPSAwLAotCQkudmJpICAgICAgICAgICA9IDEsCi0JCS5UdW5lciAgICAgICAgID0gMSwKLQkJLlR1bmVyVHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1NFQ0FNLAotCQkuWF9PZmZzZXQgICAgICA9IDAsCi0JCS5ZX09mZnNldCAgICAgID0gMywKLQkJLkR2aV95dXZfb3ZlcnJpZGUgPSAxLAotCQkuRHZpX3l1diAgICAgICA9IDcsCi0JCS5Nb2RlbFN0cmluZyAgID0gIkhhdXBwYXVnZSBXaW5UViBVU0IgUHJvIChQQUwvU0VDQU0gQkdESy9JL0wpIFYyIiwKKwkJLmludGVyZmFjZSAgICAgID0gLTEsCisJCS5jb2RlYyAgICAgICAgICA9IENPREVDX1NBQTcxMTMsCisJCS52aWRlb19jaGFubmVscyA9IDMsCisJCS52aWRlb19ub3JtICAgICA9IFY0TDJfU1REX1NFQ0FNLAorCQkuYXVkaW9fY2hhbm5lbHMgPSAxLAorCQkucmFkaW8gICAgICAgICAgPSAwLAorCQkudmJpICAgICAgICAgICAgPSAxLAorCQkudHVuZXIgICAgICAgICAgPSAxLAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1NFQ0FNLAorCQkueF9vZmZzZXQgICAgICAgPSAwLAorCQkueV9vZmZzZXQgICAgICAgPSAzLAorCQkuZHZpX3l1dl9vdmVycmlkZSA9IDEsCisJCS5kdmlfeXV2ICAgICAgICA9IDcsCisJCS5tb2RlbF9zdHJpbmcgICA9ICJIYXVwcGF1Z2UgV2luVFYgVVNCIFBybyAoUEFML1NFQ0FNIEJHREsvSS9MKSBWMiIsCiAJfSwKIAlbSFBHX1dJTlRWX1BST19QQUxfQkdfVjJdID0gewotCQkuSW50ZXJmYWNlICAgICA9IC0xLAotCQkuQ29kZWMgICAgICAgICA9IENPREVDX1NBQTcxMTMsCi0JCS5WaWRlb0NoYW5uZWxzID0gMywKLQkJLlZpZGVvTm9ybSAgICAgPSBWNEwyX1NURF9QQUwsCi0JCS5BdWRpb0NoYW5uZWxzID0gMSwKLQkJLlJhZGlvICAgICAgICAgPSAwLAotCQkudmJpICAgICAgICAgICA9IDEsCi0JCS5UdW5lciAgICAgICAgID0gMSwKLQkJLlR1bmVyVHlwZSAgICAgPSBUVU5FUl9BTFBTX1RTQkUxX1BBTCwKLQkJLlhfT2Zmc2V0ICAgICAgPSAwLAotCQkuWV9PZmZzZXQgICAgICA9IDMsCi0JCS5EdmlfeXV2X292ZXJyaWRlID0gMSwKLQkJLkR2aV95dXYgICAgICAgPSA3LAotCQkuTW9kZWxTdHJpbmcgICA9ICJIYXVwcGF1Z2UgV2luVFYgVVNCIFBybyAoUEFMIEIvRykgVjIiLAorCQkuaW50ZXJmYWNlICAgICAgPSAtMSwKKwkJLmNvZGVjICAgICAgICAgID0gQ09ERUNfU0FBNzExMywKKwkJLnZpZGVvX2NoYW5uZWxzID0gMywKKwkJLnZpZGVvX25vcm0gICAgID0gVjRMMl9TVERfUEFMLAorCQkuYXVkaW9fY2hhbm5lbHMgPSAxLAorCQkucmFkaW8gICAgICAgICAgPSAwLAorCQkudmJpICAgICAgICAgICAgPSAxLAorCQkudHVuZXIgICAgICAgICAgPSAxLAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BTFBTX1RTQkUxX1BBTCwKKwkJLnhfb2Zmc2V0ICAgICAgID0gMCwKKwkJLnlfb2Zmc2V0ICAgICAgID0gMywKKwkJLmR2aV95dXZfb3ZlcnJpZGUgPSAxLAorCQkuZHZpX3l1diAgICAgICAgPSA3LAorCQkubW9kZWxfc3RyaW5nICAgPSAiSGF1cHBhdWdlIFdpblRWIFVTQiBQcm8gKFBBTCBCL0cpIFYyIiwKIAl9LAogCVtIUEdfV0lOVFZfUFJPX1BBTF9CR19EX0tdID0gewotCQkuSW50ZXJmYWNlICAgICA9IC0xLAotCQkuQ29kZWMgICAgICAgICA9IENPREVDX1NBQTcxMTMsCi0JCS5WaWRlb0NoYW5uZWxzID0gMywKLQkJLlZpZGVvTm9ybSAgICAgPSBWNEwyX1NURF9QQUwsCi0JCS5BdWRpb0NoYW5uZWxzID0gMSwKLQkJLlJhZGlvICAgICAgICAgPSAwLAotCQkudmJpICAgICAgICAgICA9IDEsCi0JCS5UdW5lciAgICAgICAgID0gMSwKLQkJLlR1bmVyVHlwZSAgICAgPSBUVU5FUl9BTFBTX1RTQkUxX1BBTCwKLQkJLlhfT2Zmc2V0ICAgICAgPSAwLAotCQkuWV9PZmZzZXQgICAgICA9IDMsCi0JCS5EdmlfeXV2X292ZXJyaWRlID0gMSwKLQkJLkR2aV95dXYgICAgICAgPSA3LAotCQkuTW9kZWxTdHJpbmcgICA9ICJIYXVwcGF1Z2UgV2luVFYgVVNCIFBybyAoUEFMIEIvRyxEL0spIiwKKwkJLmludGVyZmFjZSAgICAgID0gLTEsCisJCS5jb2RlYyAgICAgICAgICA9IENPREVDX1NBQTcxMTMsCisJCS52aWRlb19jaGFubmVscyA9IDMsCisJCS52aWRlb19ub3JtICAgICA9IFY0TDJfU1REX1BBTCwKKwkJLmF1ZGlvX2NoYW5uZWxzID0gMSwKKwkJLnJhZGlvICAgICAgICAgID0gMCwKKwkJLnZiaSAgICAgICAgICAgID0gMSwKKwkJLnR1bmVyICAgICAgICAgID0gMSwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUxQU19UU0JFMV9QQUwsCisJCS54X29mZnNldCAgICAgICA9IDAsCisJCS55X29mZnNldCAgICAgICA9IDMsCisJCS5kdmlfeXV2X292ZXJyaWRlID0gMSwKKwkJLmR2aV95dXYgICAgICAgID0gNywKKwkJLm1vZGVsX3N0cmluZyAgID0gIkhhdXBwYXVnZSBXaW5UViBVU0IgUHJvIChQQUwgQi9HLEQvSykiLAogCX0sCiAJW0hQR19XSU5UVl9QUk9fUEFMX0lfRF9LXSA9IHsKLQkJLkludGVyZmFjZSAgICAgPSAtMSwKLQkJLkNvZGVjICAgICAgICAgPSBDT0RFQ19TQUE3MTEzLAotCQkuVmlkZW9DaGFubmVscyA9IDMsCi0JCS5WaWRlb05vcm0gICAgID0gVjRMMl9TVERfUEFMLAotCQkuQXVkaW9DaGFubmVscyA9IDEsCi0JCS5SYWRpbyAgICAgICAgID0gMCwKLQkJLnZiaSAgICAgICAgICAgPSAxLAotCQkuVHVuZXIgICAgICAgICA9IDEsCi0JCS5UdW5lclR5cGUgICAgID0gVFVORVJfTEdfUEFMX05FV19UQVBDLAotCQkuWF9PZmZzZXQgICAgICA9IDAsCi0JCS5ZX09mZnNldCAgICAgID0gMywKLQkJLkR2aV95dXZfb3ZlcnJpZGUgPSAxLAotCQkuRHZpX3l1diAgICAgICA9IDcsCi0JCS5Nb2RlbFN0cmluZyAgID0gIkhhdXBwYXVnZSBXaW5UViBVU0IgUHJvIChQQUwgSSxEL0spIiwKKwkJLmludGVyZmFjZSAgICAgID0gLTEsCisJCS5jb2RlYyAgICAgICAgICA9IENPREVDX1NBQTcxMTMsCisJCS52aWRlb19jaGFubmVscyA9IDMsCisJCS52aWRlb19ub3JtICAgICA9IFY0TDJfU1REX1BBTCwKKwkJLmF1ZGlvX2NoYW5uZWxzID0gMSwKKwkJLnJhZGlvICAgICAgICAgID0gMCwKKwkJLnZiaSAgICAgICAgICAgID0gMSwKKwkJLnR1bmVyICAgICAgICAgID0gMSwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfTEdfUEFMX05FV19UQVBDLAorCQkueF9vZmZzZXQgICAgICAgPSAwLAorCQkueV9vZmZzZXQgICAgICAgPSAzLAorCQkuZHZpX3l1dl9vdmVycmlkZSA9IDEsCisJCS5kdmlfeXV2ICAgICAgICA9IDcsCisJCS5tb2RlbF9zdHJpbmcgICA9ICJIYXVwcGF1Z2UgV2luVFYgVVNCIFBybyAoUEFMIEksRC9LKSIsCiAJfSwKIAlbSFBHX1dJTlRWX1BST19OVFNDX01OX0ZNXSA9IHsKLQkJLkludGVyZmFjZSAgICAgPSAtMSwKLQkJLkNvZGVjICAgICAgICAgPSBDT0RFQ19TQUE3MTEzLAotCQkuVmlkZW9DaGFubmVscyA9IDMsCi0JCS5WaWRlb05vcm0gICAgID0gVjRMMl9TVERfTlRTQywKLQkJLkF1ZGlvQ2hhbm5lbHMgPSAxLAotCQkuUmFkaW8gICAgICAgICA9IDEsCi0JCS52YmkgICAgICAgICAgID0gMSwKLQkJLlR1bmVyICAgICAgICAgPSAxLAotCQkuVHVuZXJUeXBlICAgICA9IFRVTkVSX1BISUxJUFNfTlRTQ19NLAotCQkuWF9PZmZzZXQgICAgICA9IDAsCi0JCS5ZX09mZnNldCAgICAgID0gMywKLQkJLkR2aV95dXZfb3ZlcnJpZGUgPSAxLAotCQkuRHZpX3l1diAgICAgICA9IDcsCi0JCS5Nb2RlbFN0cmluZyAgID0gIkhhdXBwYXVnZSBXaW5UViBVU0IgUHJvIChOVFNDIE0vTiBGTSkiLAorCQkuaW50ZXJmYWNlICAgICAgPSAtMSwKKwkJLmNvZGVjICAgICAgICAgID0gQ09ERUNfU0FBNzExMywKKwkJLnZpZGVvX2NoYW5uZWxzID0gMywKKwkJLnZpZGVvX25vcm0gICAgID0gVjRMMl9TVERfTlRTQywKKwkJLmF1ZGlvX2NoYW5uZWxzID0gMSwKKwkJLnJhZGlvICAgICAgICAgID0gMSwKKwkJLnZiaSAgICAgICAgICAgID0gMSwKKwkJLnR1bmVyICAgICAgICAgID0gMSwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19OVFNDX00sCisJCS54X29mZnNldCAgICAgICA9IDAsCisJCS55X29mZnNldCAgICAgICA9IDMsCisJCS5kdmlfeXV2X292ZXJyaWRlID0gMSwKKwkJLmR2aV95dXYgICAgICAgID0gNywKKwkJLm1vZGVsX3N0cmluZyAgID0gIkhhdXBwYXVnZSBXaW5UViBVU0IgUHJvIChOVFNDIE0vTiBGTSkiLAogCX0sCiAJW0hQR19XSU5UVl9QUk9fUEFMX0JHX0ZNXSA9IHsKLQkJLkludGVyZmFjZSAgICAgPSAwLAotCQkuQ29kZWMgICAgICAgICA9IENPREVDX1NBQTcxMTMsCi0JCS5WaWRlb0NoYW5uZWxzID0gMywKLQkJLlZpZGVvTm9ybSAgICAgPSBWNEwyX1NURF9QQUwsCi0JCS5BdWRpb0NoYW5uZWxzID0gMSwKLQkJLlJhZGlvICAgICAgICAgPSAxLAotCQkudmJpICAgICAgICAgICA9IDEsCi0JCS5UdW5lciAgICAgICAgID0gMSwKLQkJLlR1bmVyVHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1BBTCwKLQkJLlhfT2Zmc2V0ICAgICAgPSAwLAotCQkuWV9PZmZzZXQgICAgICA9IDMsCi0JCS5EdmlfeXV2X292ZXJyaWRlID0gMSwKLQkJLkR2aV95dXYgICAgICAgPSA3LAotCQkuTW9kZWxTdHJpbmcgICA9ICJIYXVwcGF1Z2UgV2luVFYgVVNCIFBybyAoUEFMIEIvRyBGTSkiLAorCQkuaW50ZXJmYWNlICAgICAgPSAwLAorCQkuY29kZWMgICAgICAgICAgPSBDT0RFQ19TQUE3MTEzLAorCQkudmlkZW9fY2hhbm5lbHMgPSAzLAorCQkudmlkZW9fbm9ybSAgICAgPSBWNEwyX1NURF9QQUwsCisJCS5hdWRpb19jaGFubmVscyA9IDEsCisJCS5yYWRpbyAgICAgICAgICA9IDEsCisJCS52YmkgICAgICAgICAgICA9IDEsCisJCS50dW5lciAgICAgICAgICA9IDEsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfUEFMLAorCQkueF9vZmZzZXQgICAgICAgPSAwLAorCQkueV9vZmZzZXQgICAgICAgPSAzLAorCQkuZHZpX3l1dl9vdmVycmlkZSA9IDEsCisJCS5kdmlfeXV2ICAgICAgICA9IDcsCisJCS5tb2RlbF9zdHJpbmcgICA9ICJIYXVwcGF1Z2UgV2luVFYgVVNCIFBybyAoUEFMIEIvRyBGTSkiLAogCX0sCiAJW0hQR19XSU5UVl9QUk9fUEFMX0lfRk1dID0gewotCQkuSW50ZXJmYWNlICAgICA9IDAsCi0JCS5Db2RlYyAgICAgICAgID0gQ09ERUNfU0FBNzExMywKLQkJLlZpZGVvQ2hhbm5lbHMgPSAzLAotCQkuVmlkZW9Ob3JtICAgICA9IFY0TDJfU1REX1BBTCwKLQkJLkF1ZGlvQ2hhbm5lbHMgPSAxLAotCQkuUmFkaW8gICAgICAgICA9IDEsCi0JCS52YmkgICAgICAgICAgID0gMSwKLQkJLlR1bmVyICAgICAgICAgPSAxLAotCQkuVHVuZXJUeXBlICAgICA9IFRVTkVSX1BISUxJUFNfUEFMLAotCQkuWF9PZmZzZXQgICAgICA9IDAsCi0JCS5ZX09mZnNldCAgICAgID0gMywKLQkJLkR2aV95dXZfb3ZlcnJpZGUgPSAxLAotCQkuRHZpX3l1diAgICAgICA9IDcsCi0JCS5Nb2RlbFN0cmluZyAgID0gIkhhdXBwYXVnZSBXaW5UViBVU0IgUHJvIChQQUwgSSBGTSkiLAorCQkuaW50ZXJmYWNlICAgICAgPSAwLAorCQkuY29kZWMgICAgICAgICAgPSBDT0RFQ19TQUE3MTEzLAorCQkudmlkZW9fY2hhbm5lbHMgPSAzLAorCQkudmlkZW9fbm9ybSAgICAgPSBWNEwyX1NURF9QQUwsCisJCS5hdWRpb19jaGFubmVscyA9IDEsCisJCS5yYWRpbyAgICAgICAgICA9IDEsCisJCS52YmkgICAgICAgICAgICA9IDEsCisJCS50dW5lciAgICAgICAgICA9IDEsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfUEFMLAorCQkueF9vZmZzZXQgICAgICAgPSAwLAorCQkueV9vZmZzZXQgICAgICAgPSAzLAorCQkuZHZpX3l1dl9vdmVycmlkZSA9IDEsCisJCS5kdmlfeXV2ICAgICAgICA9IDcsCisJCS5tb2RlbF9zdHJpbmcgICA9ICJIYXVwcGF1Z2UgV2luVFYgVVNCIFBybyAoUEFMIEkgRk0pIiwKIAl9LAogCVtIUEdfV0lOVFZfUFJPX1BBTF9EX0tfRk1dID0gewotCQkuSW50ZXJmYWNlICAgICA9IDAsCi0JCS5Db2RlYyAgICAgICAgID0gQ09ERUNfU0FBNzExMywKLQkJLlZpZGVvQ2hhbm5lbHMgPSAzLAotCQkuVmlkZW9Ob3JtICAgICA9IFY0TDJfU1REX1BBTCwKLQkJLkF1ZGlvQ2hhbm5lbHMgPSAxLAotCQkuUmFkaW8gICAgICAgICA9IDEsCi0JCS52YmkgICAgICAgICAgID0gMSwKLQkJLlR1bmVyICAgICAgICAgPSAxLAotCQkuVHVuZXJUeXBlICAgICA9IFRVTkVSX1BISUxJUFNfUEFMLAotCQkuWF9PZmZzZXQgICAgICA9IDAsCi0JCS5ZX09mZnNldCAgICAgID0gMywKLQkJLkR2aV95dXZfb3ZlcnJpZGUgPSAxLAotCQkuRHZpX3l1diAgICAgICA9IDcsCi0JCS5Nb2RlbFN0cmluZyAgID0gIkhhdXBwYXVnZSBXaW5UViBVU0IgUHJvIChQQUwgRC9LIEZNKSIsCisJCS5pbnRlcmZhY2UgICAgICA9IDAsCisJCS5jb2RlYyAgICAgICAgICA9IENPREVDX1NBQTcxMTMsCisJCS52aWRlb19jaGFubmVscyA9IDMsCisJCS52aWRlb19ub3JtICAgICA9IFY0TDJfU1REX1BBTCwKKwkJLmF1ZGlvX2NoYW5uZWxzID0gMSwKKwkJLnJhZGlvICAgICAgICAgID0gMSwKKwkJLnZiaSAgICAgICAgICAgID0gMSwKKwkJLnR1bmVyICAgICAgICAgID0gMSwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19QQUwsCisJCS54X29mZnNldCAgICAgICA9IDAsCisJCS55X29mZnNldCAgICAgICA9IDMsCisJCS5kdmlfeXV2X292ZXJyaWRlID0gMSwKKwkJLmR2aV95dXYgICAgICAgID0gNywKKwkJLm1vZGVsX3N0cmluZyAgID0gIkhhdXBwYXVnZSBXaW5UViBVU0IgUHJvIChQQUwgRC9LIEZNKSIsCiAJfSwKIAlbSFBHX1dJTlRWX1BST19URU1JQ19QQUxfRk1dID0gewotCQkuSW50ZXJmYWNlICAgICA9IDAsCi0JCS5Db2RlYyAgICAgICAgID0gQ09ERUNfU0FBNzExMywKLQkJLlZpZGVvQ2hhbm5lbHMgPSAzLAotCQkuVmlkZW9Ob3JtICAgICA9IFY0TDJfU1REX1BBTCwKLQkJLkF1ZGlvQ2hhbm5lbHMgPSAxLAotCQkuUmFkaW8gICAgICAgICA9IDEsCi0JCS52YmkgICAgICAgICAgID0gMSwKLQkJLlR1bmVyICAgICAgICAgPSAxLAotCQkuVHVuZXJUeXBlICAgICA9IFRVTkVSX01JQ1JPVFVORV80MDQ5Rk01LAotCQkuWF9PZmZzZXQgICAgICA9IDAsCi0JCS5ZX09mZnNldCAgICAgID0gMywKLQkJLkR2aV95dXZfb3ZlcnJpZGUgPSAxLAotCQkuRHZpX3l1diAgICAgICA9IDcsCi0JCS5Nb2RlbFN0cmluZyAgID0gIkhhdXBwYXVnZSBXaW5UViBVU0IgUHJvIChUZW1pYyBQQUwvU0VDQU0gQi9HL0kvRC9LL0wgRk0pIiwKKwkJLmludGVyZmFjZSAgICAgID0gMCwKKwkJLmNvZGVjICAgICAgICAgID0gQ09ERUNfU0FBNzExMywKKwkJLnZpZGVvX2NoYW5uZWxzID0gMywKKwkJLnZpZGVvX25vcm0gICAgID0gVjRMMl9TVERfUEFMLAorCQkuYXVkaW9fY2hhbm5lbHMgPSAxLAorCQkucmFkaW8gICAgICAgICAgPSAxLAorCQkudmJpICAgICAgICAgICAgPSAxLAorCQkudHVuZXIgICAgICAgICAgPSAxLAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9NSUNST1RVTkVfNDA0OUZNNSwKKwkJLnhfb2Zmc2V0ICAgICAgID0gMCwKKwkJLnlfb2Zmc2V0ICAgICAgID0gMywKKwkJLmR2aV95dXZfb3ZlcnJpZGUgPSAxLAorCQkuZHZpX3l1diAgICAgICAgPSA3LAorCQkubW9kZWxfc3RyaW5nICAgPSAiSGF1cHBhdWdlIFdpblRWIFVTQiBQcm8gKFRlbWljIFBBTC9TRUNBTSBCL0cvSS9EL0svTCBGTSkiLAogCX0sCiAJW0hQR19XSU5UVl9QUk9fVEVNSUNfUEFMX0JHX0ZNXSA9IHsKLQkJLkludGVyZmFjZSAgICAgPSAwLAotCQkuQ29kZWMgICAgICAgICA9IENPREVDX1NBQTcxMTMsCi0JCS5WaWRlb0NoYW5uZWxzID0gMywKLQkJLlZpZGVvTm9ybSAgICAgPSBWNEwyX1NURF9QQUwsCi0JCS5BdWRpb0NoYW5uZWxzID0gMSwKLQkJLlJhZGlvICAgICAgICAgPSAxLAotCQkudmJpICAgICAgICAgICA9IDEsCi0JCS5UdW5lciAgICAgICAgID0gMSwKLQkJLlR1bmVyVHlwZSAgICAgPSBUVU5FUl9NSUNST1RVTkVfNDA0OUZNNSwKLQkJLlhfT2Zmc2V0ICAgICAgPSAwLAotCQkuWV9PZmZzZXQgICAgICA9IDMsCi0JCS5EdmlfeXV2X292ZXJyaWRlID0gMSwKLQkJLkR2aV95dXYgICAgICAgPSA3LAotCQkuTW9kZWxTdHJpbmcgICA9ICJIYXVwcGF1Z2UgV2luVFYgVVNCIFBybyAoVGVtaWMgUEFMIEIvRyBGTSkiLAorCQkuaW50ZXJmYWNlICAgICAgPSAwLAorCQkuY29kZWMgICAgICAgICAgPSBDT0RFQ19TQUE3MTEzLAorCQkudmlkZW9fY2hhbm5lbHMgPSAzLAorCQkudmlkZW9fbm9ybSAgICAgPSBWNEwyX1NURF9QQUwsCisJCS5hdWRpb19jaGFubmVscyA9IDEsCisJCS5yYWRpbyAgICAgICAgICA9IDEsCisJCS52YmkgICAgICAgICAgICA9IDEsCisJCS50dW5lciAgICAgICAgICA9IDEsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX01JQ1JPVFVORV80MDQ5Rk01LAorCQkueF9vZmZzZXQgICAgICAgPSAwLAorCQkueV9vZmZzZXQgICAgICAgPSAzLAorCQkuZHZpX3l1dl9vdmVycmlkZSA9IDEsCisJCS5kdmlfeXV2ICAgICAgICA9IDcsCisJCS5tb2RlbF9zdHJpbmcgICA9ICJIYXVwcGF1Z2UgV2luVFYgVVNCIFBybyAoVGVtaWMgUEFMIEIvRyBGTSkiLAogCX0sCiAJW0hQR19XSU5UVl9QUk9fUEFMX0ZNXSA9IHsKLQkJLkludGVyZmFjZSAgICAgPSAwLAotCQkuQ29kZWMgICAgICAgICA9IENPREVDX1NBQTcxMTMsCi0JCS5WaWRlb0NoYW5uZWxzID0gMywKLQkJLlZpZGVvTm9ybSAgICAgPSBWNEwyX1NURF9QQUwsCi0JCS5BdWRpb0NoYW5uZWxzID0gMSwKLQkJLlJhZGlvICAgICAgICAgPSAxLAotCQkudmJpICAgICAgICAgICA9IDEsCi0JCS5UdW5lciAgICAgICAgID0gMSwKLQkJLlR1bmVyVHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX0ZNMTIxNk1FX01LMywKLQkJLlhfT2Zmc2V0ICAgICAgPSAwLAotCQkuWV9PZmZzZXQgICAgICA9IDMsCi0JCS5EdmlfeXV2X292ZXJyaWRlID0gMSwKLQkJLkR2aV95dXYgICAgICAgPSA3LAotCQkuTW9kZWxTdHJpbmcgICA9ICJIYXVwcGF1Z2UgV2luVFYgVVNCIFBybyAoUEFML1NFQ0FNIEIvRy9JL0QvSy9MIEZNKSIsCisJCS5pbnRlcmZhY2UgICAgICA9IDAsCisJCS5jb2RlYyAgICAgICAgICA9IENPREVDX1NBQTcxMTMsCisJCS52aWRlb19jaGFubmVscyA9IDMsCisJCS52aWRlb19ub3JtICAgICA9IFY0TDJfU1REX1BBTCwKKwkJLmF1ZGlvX2NoYW5uZWxzID0gMSwKKwkJLnJhZGlvICAgICAgICAgID0gMSwKKwkJLnZiaSAgICAgICAgICAgID0gMSwKKwkJLnR1bmVyICAgICAgICAgID0gMSwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19GTTEyMTZNRV9NSzMsCisJCS54X29mZnNldCAgICAgICA9IDAsCisJCS55X29mZnNldCAgICAgICA9IDMsCisJCS5kdmlfeXV2X292ZXJyaWRlID0gMSwKKwkJLmR2aV95dXYgICAgICAgID0gNywKKwkJLm1vZGVsX3N0cmluZyAgID0gIkhhdXBwYXVnZSBXaW5UViBVU0IgUHJvIChQQUwvU0VDQU0gQi9HL0kvRC9LL0wgRk0pIiwKIAl9LAogCVtIUEdfV0lOVFZfUFJPX05UU0NfTU5fRk1fVjJdID0gewotCQkuSW50ZXJmYWNlICAgICA9IDAsCi0JCS5Db2RlYyAgICAgICAgID0gQ09ERUNfU0FBNzExMywKLQkJLlZpZGVvQ2hhbm5lbHMgPSAzLAotCQkuVmlkZW9Ob3JtICAgICA9IFY0TDJfU1REX05UU0MsCi0JCS5BdWRpb0NoYW5uZWxzID0gMSwKLQkJLlJhZGlvICAgICAgICAgPSAxLAotCQkudmJpICAgICAgICAgICA9IDEsCi0JCS5UdW5lciAgICAgICAgID0gMSwKLQkJLlR1bmVyVHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX05UU0NfTSwKLQkJLlhfT2Zmc2V0ICAgICAgPSAwLAotCQkuWV9PZmZzZXQgICAgICA9IDMsCi0JCS5EdmlfeXV2X292ZXJyaWRlID0gMSwKLQkJLkR2aV95dXYgICAgICAgPSA3LAotCQkuTW9kZWxTdHJpbmcgICA9ICJIYXVwcGF1Z2UgV2luVFYgVVNCIFBybyAoTlRTQyBNL04gRk0pIFYyIiwKKwkJLmludGVyZmFjZSAgICAgID0gMCwKKwkJLmNvZGVjICAgICAgICAgID0gQ09ERUNfU0FBNzExMywKKwkJLnZpZGVvX2NoYW5uZWxzID0gMywKKwkJLnZpZGVvX25vcm0gICAgID0gVjRMMl9TVERfTlRTQywKKwkJLmF1ZGlvX2NoYW5uZWxzID0gMSwKKwkJLnJhZGlvICAgICAgICAgID0gMSwKKwkJLnZiaSAgICAgICAgICAgID0gMSwKKwkJLnR1bmVyICAgICAgICAgID0gMSwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19OVFNDX00sCisJCS54X29mZnNldCAgICAgICA9IDAsCisJCS55X29mZnNldCAgICAgICA9IDMsCisJCS5kdmlfeXV2X292ZXJyaWRlID0gMSwKKwkJLmR2aV95dXYgICAgICAgID0gNywKKwkJLm1vZGVsX3N0cmluZyAgID0gIkhhdXBwYXVnZSBXaW5UViBVU0IgUHJvIChOVFNDIE0vTiBGTSkgVjIiLAogCX0sCiAJW0NBTVRFTF9UVkIzMzBdID0gewotCQkuSW50ZXJmYWNlICAgICA9IC0xLAotCQkuQ29kZWMgICAgICAgICA9IENPREVDX1NBQTcxMTMsCi0JCS5WaWRlb0NoYW5uZWxzID0gMywKLQkJLlZpZGVvTm9ybSAgICAgPSBWNEwyX1NURF9OVFNDLAotCQkuQXVkaW9DaGFubmVscyA9IDEsCi0JCS5SYWRpbyAgICAgICAgID0gMSwKLQkJLnZiaSAgICAgICAgICAgPSAxLAotCQkuVHVuZXIgICAgICAgICA9IDEsCi0JCS5UdW5lclR5cGUgICAgID0gVFVORVJfUEhJTElQU19OVFNDX00sCi0JCS5YX09mZnNldCAgICAgID0gNSwKLQkJLllfT2Zmc2V0ICAgICAgPSA1LAotCQkuTW9kZWxTdHJpbmcgICA9ICJDYW10ZWwgVGVjaG5vbG9neSBVU0IgVFYgR2VuaWUgUHJvIEZNIE1vZGVsIFRWQjMzMCIsCisJCS5pbnRlcmZhY2UgICAgICA9IC0xLAorCQkuY29kZWMgICAgICAgICAgPSBDT0RFQ19TQUE3MTEzLAorCQkudmlkZW9fY2hhbm5lbHMgPSAzLAorCQkudmlkZW9fbm9ybSAgICAgPSBWNEwyX1NURF9OVFNDLAorCQkuYXVkaW9fY2hhbm5lbHMgPSAxLAorCQkucmFkaW8gICAgICAgICAgPSAxLAorCQkudmJpICAgICAgICAgICAgPSAxLAorCQkudHVuZXIgICAgICAgICAgPSAxLAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX05UU0NfTSwKKwkJLnhfb2Zmc2V0ICAgICAgID0gNSwKKwkJLnlfb2Zmc2V0ICAgICAgID0gNSwKKwkJLm1vZGVsX3N0cmluZyAgID0gIkNhbXRlbCBUZWNobm9sb2d5IFVTQiBUViBHZW5pZSBQcm8gRk0gTW9kZWwgVFZCMzMwIiwKIAl9LAogCVtESUdJVEFMX1ZJREVPX0NSRUFUT1JfSV0gPSB7Ci0JCS5JbnRlcmZhY2UgICAgID0gLTEsCi0JCS5Db2RlYyAgICAgICAgID0gQ09ERUNfU0FBNzExMywKLQkJLlZpZGVvQ2hhbm5lbHMgPSAyLAotCQkuVmlkZW9Ob3JtICAgICA9IFY0TDJfU1REX1BBTCwKLQkJLkF1ZGlvQ2hhbm5lbHMgPSAwLAotCQkuUmFkaW8gICAgICAgICA9IDAsCi0JCS52YmkgICAgICAgICAgID0gMSwKLQkJLlR1bmVyICAgICAgICAgPSAwLAotCQkuVHVuZXJUeXBlICAgICA9IDAsCi0JCS5YX09mZnNldCAgICAgID0gMCwKLQkJLllfT2Zmc2V0ICAgICAgPSAzLAotCQkuRHZpX3l1dl9vdmVycmlkZSA9IDEsCi0JCS5EdmlfeXV2ICAgICAgID0gNywKLQkJLk1vZGVsU3RyaW5nICAgPSAiRGlnaXRhbCBWaWRlbyBDcmVhdG9yIEkiLAorCQkuaW50ZXJmYWNlICAgICAgPSAtMSwKKwkJLmNvZGVjICAgICAgICAgID0gQ09ERUNfU0FBNzExMywKKwkJLnZpZGVvX2NoYW5uZWxzID0gMiwKKwkJLnZpZGVvX25vcm0gICAgID0gVjRMMl9TVERfUEFMLAorCQkuYXVkaW9fY2hhbm5lbHMgPSAwLAorCQkucmFkaW8gICAgICAgICAgPSAwLAorCQkudmJpICAgICAgICAgICAgPSAxLAorCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkudHVuZXJfdHlwZSAgICAgPSAwLAorCQkueF9vZmZzZXQgICAgICAgPSAwLAorCQkueV9vZmZzZXQgICAgICAgPSAzLAorCQkuZHZpX3l1dl9vdmVycmlkZSA9IDEsCisJCS5kdmlfeXV2ICAgICAgICA9IDcsCisJCS5tb2RlbF9zdHJpbmcgICA9ICJEaWdpdGFsIFZpZGVvIENyZWF0b3IgSSIsCiAJfSwKIAlbR0xPQkFMX1ZJTExBR0VfR1ZfMDA3X05UU0NdID0gewotCQkuSW50ZXJmYWNlICAgICA9IC0xLAotCQkuQ29kZWMgICAgICAgICA9IENPREVDX1NBQTcxMTEsCi0JCS5WaWRlb0NoYW5uZWxzID0gMiwKLQkJLlZpZGVvTm9ybSAgICAgPSBWNEwyX1NURF9OVFNDLAotCQkuQXVkaW9DaGFubmVscyA9IDAsCi0JCS5SYWRpbyAgICAgICAgID0gMCwKLQkJLnZiaSAgICAgICAgICAgPSAxLAotCQkuVHVuZXIgICAgICAgICA9IDAsCi0JCS5UdW5lclR5cGUgICAgID0gMCwKLQkJLlhfT2Zmc2V0ICAgICAgPSA4MiwKLQkJLllfT2Zmc2V0ICAgICAgPSAyMCwKLQkJLkR2aV95dXZfb3ZlcnJpZGUgPSAxLAotCQkuRHZpX3l1diAgICAgICA9IDcsCi0JCS5Nb2RlbFN0cmluZyAgID0gIkdsb2JhbCBWaWxsYWdlIEdWLTAwNyAoTlRTQykiLAorCQkuaW50ZXJmYWNlICAgICAgPSAtMSwKKwkJLmNvZGVjICAgICAgICAgID0gQ09ERUNfU0FBNzExMSwKKwkJLnZpZGVvX2NoYW5uZWxzID0gMiwKKwkJLnZpZGVvX25vcm0gICAgID0gVjRMMl9TVERfTlRTQywKKwkJLmF1ZGlvX2NoYW5uZWxzID0gMCwKKwkJLnJhZGlvICAgICAgICAgID0gMCwKKwkJLnZiaSAgICAgICAgICAgID0gMSwKKwkJLnR1bmVyICAgICAgICAgID0gMCwKKwkJLnR1bmVyX3R5cGUgICAgID0gMCwKKwkJLnhfb2Zmc2V0ICAgICAgID0gODIsCisJCS55X29mZnNldCAgICAgICA9IDIwLAorCQkuZHZpX3l1dl9vdmVycmlkZSA9IDEsCisJCS5kdmlfeXV2ICAgICAgICA9IDcsCisJCS5tb2RlbF9zdHJpbmcgICA9ICJHbG9iYWwgVmlsbGFnZSBHVi0wMDcgKE5UU0MpIiwKIAl9LAogCVtEQVpaTEVfRFZDXzUwX1JFVl8xX05UU0NdID0gewotCQkuSW50ZXJmYWNlICAgICA9IDAsCi0JCS5Db2RlYyAgICAgICAgID0gQ09ERUNfU0FBNzExMywKLQkJLlZpZGVvQ2hhbm5lbHMgPSAyLAotCQkuVmlkZW9Ob3JtICAgICA9IFY0TDJfU1REX05UU0MsCi0JCS5BdWRpb0NoYW5uZWxzID0gMCwKLQkJLlJhZGlvICAgICAgICAgPSAwLAotCQkudmJpICAgICAgICAgICA9IDEsCi0JCS5UdW5lciAgICAgICAgID0gMCwKLQkJLlR1bmVyVHlwZSAgICAgPSAwLAotCQkuWF9PZmZzZXQgICAgICA9IDAsCi0JCS5ZX09mZnNldCAgICAgID0gMywKLQkJLkR2aV95dXZfb3ZlcnJpZGUgPSAxLAotCQkuRHZpX3l1diAgICAgICA9IDcsCi0JCS5Nb2RlbFN0cmluZyAgID0gIkRhenpsZSBGdXNpb24gTW9kZWwgRFZDLTUwIFJldiAxIChOVFNDKSIsCisJCS5pbnRlcmZhY2UgICAgICA9IDAsCisJCS5jb2RlYyAgICAgICAgICA9IENPREVDX1NBQTcxMTMsCisJCS52aWRlb19jaGFubmVscyA9IDIsCisJCS52aWRlb19ub3JtICAgICA9IFY0TDJfU1REX05UU0MsCisJCS5hdWRpb19jaGFubmVscyA9IDAsCisJCS5yYWRpbyAgICAgICAgICA9IDAsCisJCS52YmkgICAgICAgICAgICA9IDEsCisJCS50dW5lciAgICAgICAgICA9IDAsCisJCS50dW5lcl90eXBlICAgICA9IDAsCisJCS54X29mZnNldCAgICAgICA9IDAsCisJCS55X29mZnNldCAgICAgICA9IDMsCisJCS5kdmlfeXV2X292ZXJyaWRlID0gMSwKKwkJLmR2aV95dXYgICAgICAgID0gNywKKwkJLm1vZGVsX3N0cmluZyAgID0gIkRhenpsZSBGdXNpb24gTW9kZWwgRFZDLTUwIFJldiAxIChOVFNDKSIsCiAJfSwKIAlbREFaWkxFX0RWQ184MF9SRVZfMV9QQUxdID0gewotCQkuSW50ZXJmYWNlICAgICA9IDAsCi0JCS5Db2RlYyAgICAgICAgID0gQ09ERUNfU0FBNzExMywKLQkJLlZpZGVvQ2hhbm5lbHMgPSAyLAotCQkuVmlkZW9Ob3JtICAgICA9IFY0TDJfU1REX1BBTCwKLQkJLkF1ZGlvQ2hhbm5lbHMgPSAwLAotCQkuUmFkaW8gICAgICAgICA9IDAsCi0JCS52YmkgICAgICAgICAgID0gMSwKLQkJLlR1bmVyICAgICAgICAgPSAwLAotCQkuVHVuZXJUeXBlICAgICA9IDAsCi0JCS5YX09mZnNldCAgICAgID0gMCwKLQkJLllfT2Zmc2V0ICAgICAgPSAzLAotCQkuRHZpX3l1dl9vdmVycmlkZSA9IDEsCi0JCS5EdmlfeXV2ICAgICAgID0gNywKLQkJLk1vZGVsU3RyaW5nICAgPSAiRGF6emxlIEZ1c2lvbiBNb2RlbCBEVkMtODAgUmV2IDEgKFBBTCkiLAorCQkuaW50ZXJmYWNlICAgICAgPSAwLAorCQkuY29kZWMgICAgICAgICAgPSBDT0RFQ19TQUE3MTEzLAorCQkudmlkZW9fY2hhbm5lbHMgPSAyLAorCQkudmlkZW9fbm9ybSAgICAgPSBWNEwyX1NURF9QQUwsCisJCS5hdWRpb19jaGFubmVscyA9IDAsCisJCS5yYWRpbyAgICAgICAgICA9IDAsCisJCS52YmkgICAgICAgICAgICA9IDEsCisJCS50dW5lciAgICAgICAgICA9IDAsCisJCS50dW5lcl90eXBlICAgICA9IDAsCisJCS54X29mZnNldCAgICAgICA9IDAsCisJCS55X29mZnNldCAgICAgICA9IDMsCisJCS5kdmlfeXV2X292ZXJyaWRlID0gMSwKKwkJLmR2aV95dXYgICAgICAgID0gNywKKwkJLm1vZGVsX3N0cmluZyAgID0gIkRhenpsZSBGdXNpb24gTW9kZWwgRFZDLTgwIFJldiAxIChQQUwpIiwKIAl9LAogCVtEQVpaTEVfRFZDXzkwX1JFVl8xX1NFQ0FNXSA9IHsKLQkJLkludGVyZmFjZSAgICAgPSAwLAotCQkuQ29kZWMgICAgICAgICA9IENPREVDX1NBQTcxMTMsCi0JCS5WaWRlb0NoYW5uZWxzID0gMiwKLQkJLlZpZGVvTm9ybSAgICAgPSBWNEwyX1NURF9TRUNBTSwKLQkJLkF1ZGlvQ2hhbm5lbHMgPSAwLAotCQkuUmFkaW8gICAgICAgICA9IDAsCi0JCS52YmkgICAgICAgICAgID0gMSwKLQkJLlR1bmVyICAgICAgICAgPSAwLAotCQkuVHVuZXJUeXBlICAgICA9IDAsCi0JCS5YX09mZnNldCAgICAgID0gMCwKLQkJLllfT2Zmc2V0ICAgICAgPSAzLAotCQkuRHZpX3l1dl9vdmVycmlkZSA9IDEsCi0JCS5EdmlfeXV2ICAgICAgID0gNywKLQkJLk1vZGVsU3RyaW5nICAgPSAiRGF6emxlIEZ1c2lvbiBNb2RlbCBEVkMtOTAgUmV2IDEgKFNFQ0FNKSIsCisJCS5pbnRlcmZhY2UgICAgICA9IDAsCisJCS5jb2RlYyAgICAgICAgICA9IENPREVDX1NBQTcxMTMsCisJCS52aWRlb19jaGFubmVscyA9IDIsCisJCS52aWRlb19ub3JtICAgICA9IFY0TDJfU1REX1NFQ0FNLAorCQkuYXVkaW9fY2hhbm5lbHMgPSAwLAorCQkucmFkaW8gICAgICAgICAgPSAwLAorCQkudmJpICAgICAgICAgICAgPSAxLAorCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkudHVuZXJfdHlwZSAgICAgPSAwLAorCQkueF9vZmZzZXQgICAgICAgPSAwLAorCQkueV9vZmZzZXQgICAgICAgPSAzLAorCQkuZHZpX3l1dl9vdmVycmlkZSA9IDEsCisJCS5kdmlfeXV2ICAgICAgICA9IDcsCisJCS5tb2RlbF9zdHJpbmcgICA9ICJEYXp6bGUgRnVzaW9uIE1vZGVsIERWQy05MCBSZXYgMSAoU0VDQU0pIiwKIAl9LAogCVtFU0tBUEVfTEFCU19NWVRWMkdPXSA9IHsKLQkJLkludGVyZmFjZSAgICAgPSAwLAotCQkuQ29kZWMgICAgICAgICA9IENPREVDX1NBQTcxMTMsCi0JCS5WaWRlb0NoYW5uZWxzID0gMiwKLQkJLlZpZGVvTm9ybSAgICAgPSBWNEwyX1NURF9QQUwsCi0JCS5BdWRpb0NoYW5uZWxzID0gMSwKLQkJLlJhZGlvICAgICAgICAgPSAxLAotCQkudmJpICAgICAgICAgICA9IDEsCi0JCS5UdW5lciAgICAgICAgID0gMSwKLQkJLlR1bmVyVHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX0ZNMTIxNk1FX01LMywKLQkJLlhfT2Zmc2V0ICAgICAgPSAwLAotCQkuWV9PZmZzZXQgICAgICA9IDMsCi0JCS5EdmlfeXV2X292ZXJyaWRlID0gMSwKLQkJLkR2aV95dXYgICAgICAgPSA3LAotCQkuTW9kZWxTdHJpbmcgICA9ICJFc2thcGUgTGFicyBNeVRWMkdvIiwKKwkJLmludGVyZmFjZSAgICAgID0gMCwKKwkJLmNvZGVjICAgICAgICAgID0gQ09ERUNfU0FBNzExMywKKwkJLnZpZGVvX2NoYW5uZWxzID0gMiwKKwkJLnZpZGVvX25vcm0gICAgID0gVjRMMl9TVERfUEFMLAorCQkuYXVkaW9fY2hhbm5lbHMgPSAxLAorCQkucmFkaW8gICAgICAgICAgPSAxLAorCQkudmJpICAgICAgICAgICAgPSAxLAorCQkudHVuZXIgICAgICAgICAgPSAxLAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX0ZNMTIxNk1FX01LMywKKwkJLnhfb2Zmc2V0ICAgICAgID0gMCwKKwkJLnlfb2Zmc2V0ICAgICAgID0gMywKKwkJLmR2aV95dXZfb3ZlcnJpZGUgPSAxLAorCQkuZHZpX3l1diAgICAgICAgPSA3LAorCQkubW9kZWxfc3RyaW5nICAgPSAiRXNrYXBlIExhYnMgTXlUVjJHbyIsCiAJfSwKIAlbUElOTkFfUENUVl9VU0JfUEFMXSA9IHsKLQkJLkludGVyZmFjZSAgICAgPSAtMSwKLQkJLkNvZGVjICAgICAgICAgPSBDT0RFQ19TQUE3MTExLAotCQkuVmlkZW9DaGFubmVscyA9IDMsCi0JCS5WaWRlb05vcm0gICAgID0gVjRMMl9TVERfUEFMLAotCQkuQXVkaW9DaGFubmVscyA9IDEsCi0JCS5SYWRpbyAgICAgICAgID0gMCwKLQkJLnZiaSAgICAgICAgICAgPSAwLAotCQkuVHVuZXIgICAgICAgICA9IDEsCi0JCS5UdW5lclR5cGUgICAgID0gVFVORVJfVEVNSUNfNDA2NkZZNV9QQUxfSSwKLQkJLlhfT2Zmc2V0ICAgICAgPSAtMSwKLQkJLllfT2Zmc2V0ICAgICAgPSAtMSwKLQkJLk1vZGVsU3RyaW5nICAgPSAiUGlubmFjbGUgU3R1ZGlvIFBDVFYgVVNCIChQQUwpIiwKKwkJLmludGVyZmFjZSAgICAgID0gLTEsCisJCS5jb2RlYyAgICAgICAgICA9IENPREVDX1NBQTcxMTEsCisJCS52aWRlb19jaGFubmVscyA9IDMsCisJCS52aWRlb19ub3JtICAgICA9IFY0TDJfU1REX1BBTCwKKwkJLmF1ZGlvX2NoYW5uZWxzID0gMSwKKwkJLnJhZGlvICAgICAgICAgID0gMCwKKwkJLnZiaSAgICAgICAgICAgID0gMCwKKwkJLnR1bmVyICAgICAgICAgID0gMSwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfVEVNSUNfNDA2NkZZNV9QQUxfSSwKKwkJLnhfb2Zmc2V0ICAgICAgID0gLTEsCisJCS55X29mZnNldCAgICAgICA9IC0xLAorCQkubW9kZWxfc3RyaW5nICAgPSAiUGlubmFjbGUgU3R1ZGlvIFBDVFYgVVNCIChQQUwpIiwKIAl9LAogCVtQSU5OQV9QQ1RWX1VTQl9TRUNBTV0gPSB7Ci0JCS5JbnRlcmZhY2UgICAgID0gLTEsCi0JCS5Db2RlYyAgICAgICAgID0gQ09ERUNfU0FBNzExMSwKLQkJLlZpZGVvQ2hhbm5lbHMgPSAzLAotCQkuVmlkZW9Ob3JtICAgICA9IFY0TDJfU1REX1NFQ0FNLAotCQkuQXVkaW9DaGFubmVscyA9IDEsCi0JCS5SYWRpbyAgICAgICAgID0gMCwKLQkJLnZiaSAgICAgICAgICAgPSAxLAotCQkuVHVuZXIgICAgICAgICA9IDEsCi0JCS5UdW5lclR5cGUgICAgID0gVFVORVJfUEhJTElQU19TRUNBTSwKLQkJLlhfT2Zmc2V0ICAgICAgPSAtMSwKLQkJLllfT2Zmc2V0ICAgICAgPSAtMSwKLQkJLk1vZGVsU3RyaW5nICAgPSAiUGlubmFjbGUgU3R1ZGlvIFBDVFYgVVNCIChTRUNBTSkiLAorCQkuaW50ZXJmYWNlICAgICAgPSAtMSwKKwkJLmNvZGVjICAgICAgICAgID0gQ09ERUNfU0FBNzExMSwKKwkJLnZpZGVvX2NoYW5uZWxzID0gMywKKwkJLnZpZGVvX25vcm0gICAgID0gVjRMMl9TVERfU0VDQU0sCisJCS5hdWRpb19jaGFubmVscyA9IDEsCisJCS5yYWRpbyAgICAgICAgICA9IDAsCisJCS52YmkgICAgICAgICAgICA9IDEsCisJCS50dW5lciAgICAgICAgICA9IDEsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfU0VDQU0sCisJCS54X29mZnNldCAgICAgICA9IC0xLAorCQkueV9vZmZzZXQgICAgICAgPSAtMSwKKwkJLm1vZGVsX3N0cmluZyAgID0gIlBpbm5hY2xlIFN0dWRpbyBQQ1RWIFVTQiAoU0VDQU0pIiwKIAl9LAogCVtQSU5OQV9QQ1RWX1VTQl9QQUxfRk1dID0gewotCQkuSW50ZXJmYWNlICAgICA9IC0xLAotCQkuQ29kZWMgICAgICAgICA9IENPREVDX1NBQTcxMTEsCi0JCS5WaWRlb0NoYW5uZWxzID0gMywKLQkJLlZpZGVvTm9ybSAgICAgPSBWNEwyX1NURF9QQUwsCi0JCS5BdWRpb0NoYW5uZWxzID0gMSwKLQkJLlJhZGlvICAgICAgICAgPSAxLAotCQkudmJpICAgICAgICAgICA9IDEsCi0JCS5UdW5lciAgICAgICAgID0gMSwKLQkJLlR1bmVyVHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1BBTCwKLQkJLlhfT2Zmc2V0ICAgICAgPSAxMjgsCi0JCS5ZX09mZnNldCAgICAgID0gMjMsCi0JCS5Nb2RlbFN0cmluZyAgID0gIlBpbm5hY2xlIFN0dWRpbyBQQ1RWIFVTQiAoUEFMKSBGTSIsCisJCS5pbnRlcmZhY2UgICAgICA9IC0xLAorCQkuY29kZWMgICAgICAgICAgPSBDT0RFQ19TQUE3MTExLAorCQkudmlkZW9fY2hhbm5lbHMgPSAzLAorCQkudmlkZW9fbm9ybSAgICAgPSBWNEwyX1NURF9QQUwsCisJCS5hdWRpb19jaGFubmVscyA9IDEsCisJCS5yYWRpbyAgICAgICAgICA9IDEsCisJCS52YmkgICAgICAgICAgICA9IDEsCisJCS50dW5lciAgICAgICAgICA9IDEsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfUEFMLAorCQkueF9vZmZzZXQgICAgICAgPSAxMjgsCisJCS55X29mZnNldCAgICAgICA9IDIzLAorCQkubW9kZWxfc3RyaW5nICAgPSAiUGlubmFjbGUgU3R1ZGlvIFBDVFYgVVNCIChQQUwpIEZNIiwKIAl9LAogCVtNSVJPX1BDVFZfVVNCXSA9IHsKLQkJLkludGVyZmFjZSAgICAgPSAtMSwKLQkJLkNvZGVjICAgICAgICAgPSBDT0RFQ19TQUE3MTExLAotCQkuVmlkZW9DaGFubmVscyA9IDMsCi0JCS5WaWRlb05vcm0gICAgID0gVjRMMl9TVERfUEFMLAotCQkuQXVkaW9DaGFubmVscyA9IDEsCi0JCS5SYWRpbyAgICAgICAgID0gMCwKLQkJLnZiaSAgICAgICAgICAgPSAxLAotCQkuVHVuZXIgICAgICAgICA9IDEsCi0JCS5UdW5lclR5cGUgICAgID0gVFVORVJfUEhJTElQU19QQUwsCi0JCS5YX09mZnNldCAgICAgID0gLTEsCi0JCS5ZX09mZnNldCAgICAgID0gLTEsCi0JCS5Nb2RlbFN0cmluZyAgID0gIk1pcm8gUENUViBVU0IiLAorCQkuaW50ZXJmYWNlICAgICAgPSAtMSwKKwkJLmNvZGVjICAgICAgICAgID0gQ09ERUNfU0FBNzExMSwKKwkJLnZpZGVvX2NoYW5uZWxzID0gMywKKwkJLnZpZGVvX25vcm0gICAgID0gVjRMMl9TVERfUEFMLAorCQkuYXVkaW9fY2hhbm5lbHMgPSAxLAorCQkucmFkaW8gICAgICAgICAgPSAwLAorCQkudmJpICAgICAgICAgICAgPSAxLAorCQkudHVuZXIgICAgICAgICAgPSAxLAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1BBTCwKKwkJLnhfb2Zmc2V0ICAgICAgID0gLTEsCisJCS55X29mZnNldCAgICAgICA9IC0xLAorCQkubW9kZWxfc3RyaW5nICAgPSAiTWlybyBQQ1RWIFVTQiIsCiAJfSwKIAlbUElOTkFfUENUVl9VU0JfTlRTQ19GTV0gPSB7Ci0JCS5JbnRlcmZhY2UgICAgID0gLTEsCi0JCS5Db2RlYyAgICAgICAgID0gQ09ERUNfU0FBNzExMSwKLQkJLlZpZGVvQ2hhbm5lbHMgPSAzLAotCQkuVmlkZW9Ob3JtICAgICA9IFY0TDJfU1REX05UU0MsCi0JCS5BdWRpb0NoYW5uZWxzID0gMSwKLQkJLlJhZGlvICAgICAgICAgPSAxLAotCQkudmJpICAgICAgICAgICA9IDEsCi0JCS5UdW5lciAgICAgICAgID0gMSwKLQkJLlR1bmVyVHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX05UU0NfTSwKLQkJLlhfT2Zmc2V0ICAgICAgPSAtMSwKLQkJLllfT2Zmc2V0ICAgICAgPSAtMSwKLQkJLk1vZGVsU3RyaW5nICAgPSAiUGlubmFjbGUgU3R1ZGlvIFBDVFYgVVNCIChOVFNDKSBGTSIsCisJCS5pbnRlcmZhY2UgICAgICA9IC0xLAorCQkuY29kZWMgICAgICAgICAgPSBDT0RFQ19TQUE3MTExLAorCQkudmlkZW9fY2hhbm5lbHMgPSAzLAorCQkudmlkZW9fbm9ybSAgICAgPSBWNEwyX1NURF9OVFNDLAorCQkuYXVkaW9fY2hhbm5lbHMgPSAxLAorCQkucmFkaW8gICAgICAgICAgPSAxLAorCQkudmJpICAgICAgICAgICAgPSAxLAorCQkudHVuZXIgICAgICAgICAgPSAxLAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX05UU0NfTSwKKwkJLnhfb2Zmc2V0ICAgICAgID0gLTEsCisJCS55X29mZnNldCAgICAgICA9IC0xLAorCQkubW9kZWxfc3RyaW5nICAgPSAiUGlubmFjbGUgU3R1ZGlvIFBDVFYgVVNCIChOVFNDKSBGTSIsCiAJfSwKIAlbUElOTkFfUENUVl9VU0JfTlRTQ19GTV9WM10gPSB7Ci0JCS5JbnRlcmZhY2UgICAgID0gLTEsCi0JCS5Db2RlYyAgICAgICAgID0gQ09ERUNfU0FBNzExMSwKLQkJLlZpZGVvQ2hhbm5lbHMgPSAzLAotCQkuVmlkZW9Ob3JtICAgICA9IFY0TDJfU1REX05UU0MsCi0JCS5BdWRpb0NoYW5uZWxzID0gMSwKLQkJLlJhZGlvICAgICAgICAgPSAxLAotCQkudmJpICAgICAgICAgICA9IDEsCi0JCS5UdW5lciAgICAgICAgID0gMSwKLQkJLlR1bmVyVHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX05UU0NfTSwKLQkJLlhfT2Zmc2V0ICAgICAgPSAtMSwKLQkJLllfT2Zmc2V0ICAgICAgPSAtMSwKLQkJLk1vZGVsU3RyaW5nICAgPSAiUGlubmFjbGUgU3R1ZGlvIFBDVFYgVVNCIChOVFNDKSBGTSBWMyIsCisJCS5pbnRlcmZhY2UgICAgICA9IC0xLAorCQkuY29kZWMgICAgICAgICAgPSBDT0RFQ19TQUE3MTExLAorCQkudmlkZW9fY2hhbm5lbHMgPSAzLAorCQkudmlkZW9fbm9ybSAgICAgPSBWNEwyX1NURF9OVFNDLAorCQkuYXVkaW9fY2hhbm5lbHMgPSAxLAorCQkucmFkaW8gICAgICAgICAgPSAxLAorCQkudmJpICAgICAgICAgICAgPSAxLAorCQkudHVuZXIgICAgICAgICAgPSAxLAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX05UU0NfTSwKKwkJLnhfb2Zmc2V0ICAgICAgID0gLTEsCisJCS55X29mZnNldCAgICAgICA9IC0xLAorCQkubW9kZWxfc3RyaW5nICAgPSAiUGlubmFjbGUgU3R1ZGlvIFBDVFYgVVNCIChOVFNDKSBGTSBWMyIsCiAJfSwKIAlbUElOTkFfUENUVl9VU0JfUEFMX0ZNX1YyXSA9IHsKLQkJLkludGVyZmFjZSAgICAgPSAtMSwKLQkJLkNvZGVjICAgICAgICAgPSBDT0RFQ19TQUE3MTEzLAotCQkuVmlkZW9DaGFubmVscyA9IDMsCi0JCS5WaWRlb05vcm0gICAgID0gVjRMMl9TVERfUEFMLAotCQkuQXVkaW9DaGFubmVscyA9IDEsCi0JCS5SYWRpbyAgICAgICAgID0gMSwKLQkJLnZiaSAgICAgICAgICAgPSAxLAotCQkuVHVuZXIgICAgICAgICA9IDEsCi0JCS5UdW5lclR5cGUgICAgID0gVFVORVJfVEVNSUNfNDAwOUZSNV9QQUwsCi0JCS5YX09mZnNldCAgICAgID0gMCwKLQkJLllfT2Zmc2V0ICAgICAgPSAzLAotCQkuRHZpX3l1dl9vdmVycmlkZSA9IDEsCi0JCS5EdmlfeXV2ICAgICAgID0gNywKLQkJLk1vZGVsU3RyaW5nICAgPSAiUGlubmFjbGUgU3R1ZGlvIFBDVFYgVVNCIChQQUwpIEZNIFYyIiwKKwkJLmludGVyZmFjZSAgICAgID0gLTEsCisJCS5jb2RlYyAgICAgICAgICA9IENPREVDX1NBQTcxMTMsCisJCS52aWRlb19jaGFubmVscyA9IDMsCisJCS52aWRlb19ub3JtICAgICA9IFY0TDJfU1REX1BBTCwKKwkJLmF1ZGlvX2NoYW5uZWxzID0gMSwKKwkJLnJhZGlvICAgICAgICAgID0gMSwKKwkJLnZiaSAgICAgICAgICAgID0gMSwKKwkJLnR1bmVyICAgICAgICAgID0gMSwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfVEVNSUNfNDAwOUZSNV9QQUwsCisJCS54X29mZnNldCAgICAgICA9IDAsCisJCS55X29mZnNldCAgICAgICA9IDMsCisJCS5kdmlfeXV2X292ZXJyaWRlID0gMSwKKwkJLmR2aV95dXYgICAgICAgID0gNywKKwkJLm1vZGVsX3N0cmluZyAgID0gIlBpbm5hY2xlIFN0dWRpbyBQQ1RWIFVTQiAoUEFMKSBGTSBWMiIsCiAJfSwKIAlbUElOTkFfUENUVl9VU0JfTlRTQ19GTV9WMl0gPSB7Ci0JCS5JbnRlcmZhY2UgICAgID0gLTEsCi0JCS5Db2RlYyAgICAgICAgID0gQ09ERUNfU0FBNzExMSwKLQkJLlZpZGVvQ2hhbm5lbHMgPSAzLAotCQkuVmlkZW9Ob3JtICAgICA9IFY0TDJfU1REX05UU0MsCi0JCS5BdWRpb0NoYW5uZWxzID0gMSwKLQkJLlJhZGlvICAgICAgICAgPSAxLAotCQkudmJpICAgICAgICAgICA9IDEsCi0JCS5UdW5lciAgICAgICAgID0gMSwKLQkJLlR1bmVyVHlwZSAgICAgPSBUVU5FUl9URU1JQ180MDM5RlI1X05UU0MsCi0JCS5YX09mZnNldCAgICAgID0gMCwKLQkJLllfT2Zmc2V0ICAgICAgPSAzLAotCQkuRHZpX3l1dl9vdmVycmlkZSA9IDEsCi0JCS5EdmlfeXV2ICAgICAgID0gNywKLQkJLk1vZGVsU3RyaW5nICAgPSAiUGlubmFjbGUgU3R1ZGlvIFBDVFYgVVNCIChOVFNDKSBGTSBWMiIsCisJCS5pbnRlcmZhY2UgICAgICA9IC0xLAorCQkuY29kZWMgICAgICAgICAgPSBDT0RFQ19TQUE3MTExLAorCQkudmlkZW9fY2hhbm5lbHMgPSAzLAorCQkudmlkZW9fbm9ybSAgICAgPSBWNEwyX1NURF9OVFNDLAorCQkuYXVkaW9fY2hhbm5lbHMgPSAxLAorCQkucmFkaW8gICAgICAgICAgPSAxLAorCQkudmJpICAgICAgICAgICAgPSAxLAorCQkudHVuZXIgICAgICAgICAgPSAxLAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9URU1JQ180MDM5RlI1X05UU0MsCisJCS54X29mZnNldCAgICAgICA9IDAsCisJCS55X29mZnNldCAgICAgICA9IDMsCisJCS5kdmlfeXV2X292ZXJyaWRlID0gMSwKKwkJLmR2aV95dXYgICAgICAgID0gNywKKwkJLm1vZGVsX3N0cmluZyAgID0gIlBpbm5hY2xlIFN0dWRpbyBQQ1RWIFVTQiAoTlRTQykgRk0gVjIiLAogCX0sCiAJW1BJTk5BX1BDVFZfVVNCX1BBTF9GTV9WM10gPSB7Ci0JCS5JbnRlcmZhY2UgICAgID0gLTEsCi0JCS5Db2RlYyAgICAgICAgID0gQ09ERUNfU0FBNzExMywKLQkJLlZpZGVvQ2hhbm5lbHMgPSAzLAotCQkuVmlkZW9Ob3JtICAgICA9IFY0TDJfU1REX1BBTCwKLQkJLkF1ZGlvQ2hhbm5lbHMgPSAxLAotCQkuUmFkaW8gICAgICAgICA9IDEsCi0JCS52YmkgICAgICAgICAgID0gMSwKLQkJLlR1bmVyICAgICAgICAgPSAxLAotCQkuVHVuZXJUeXBlICAgICA9IFRVTkVSX1RFTUlDXzQwMDlGUjVfUEFMLAotCQkuWF9PZmZzZXQgICAgICA9IDAsCi0JCS5ZX09mZnNldCAgICAgID0gMywKLQkJLkR2aV95dXZfb3ZlcnJpZGUgPSAxLAotCQkuRHZpX3l1diAgICAgICA9IDcsCi0JCS5Nb2RlbFN0cmluZyAgID0gIlBpbm5hY2xlIFN0dWRpbyBQQ1RWIFVTQiAoUEFMKSBGTSBWMyIsCisJCS5pbnRlcmZhY2UgICAgICA9IC0xLAorCQkuY29kZWMgICAgICAgICAgPSBDT0RFQ19TQUE3MTEzLAorCQkudmlkZW9fY2hhbm5lbHMgPSAzLAorCQkudmlkZW9fbm9ybSAgICAgPSBWNEwyX1NURF9QQUwsCisJCS5hdWRpb19jaGFubmVscyA9IDEsCisJCS5yYWRpbyAgICAgICAgICA9IDEsCisJCS52YmkgICAgICAgICAgICA9IDEsCisJCS50dW5lciAgICAgICAgICA9IDEsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1RFTUlDXzQwMDlGUjVfUEFMLAorCQkueF9vZmZzZXQgICAgICAgPSAwLAorCQkueV9vZmZzZXQgICAgICAgPSAzLAorCQkuZHZpX3l1dl9vdmVycmlkZSA9IDEsCisJCS5kdmlfeXV2ICAgICAgICA9IDcsCisJCS5tb2RlbF9zdHJpbmcgICA9ICJQaW5uYWNsZSBTdHVkaW8gUENUViBVU0IgKFBBTCkgRk0gVjMiLAogCX0sCiAJW1BJTk5BX0xJTlhfVkRfSU5fQ0FCX05UU0NdID0gewotCQkuSW50ZXJmYWNlICAgICA9IC0xLAotCQkuQ29kZWMgICAgICAgICA9IENPREVDX1NBQTcxMTMsCi0JCS5WaWRlb0NoYW5uZWxzID0gMiwKLQkJLlZpZGVvTm9ybSAgICAgPSBWNEwyX1NURF9OVFNDLAotCQkuQXVkaW9DaGFubmVscyA9IDEsCi0JCS5SYWRpbyAgICAgICAgID0gMCwKLQkJLnZiaSAgICAgICAgICAgPSAxLAotCQkuVHVuZXIgICAgICAgICA9IDAsCi0JCS5UdW5lclR5cGUgICAgID0gMCwKLQkJLlhfT2Zmc2V0ICAgICAgPSAwLAotCQkuWV9PZmZzZXQgICAgICA9IDMsCi0JCS5EdmlfeXV2X292ZXJyaWRlID0gMSwKLQkJLkR2aV95dXYgICAgICAgPSA3LAotCQkuTW9kZWxTdHJpbmcgICA9ICJQaW5uYWNsZSBTdHVkaW8gTGlueCBWaWRlbyBpbnB1dCBjYWJsZSAoTlRTQykiLAorCQkuaW50ZXJmYWNlICAgICAgPSAtMSwKKwkJLmNvZGVjICAgICAgICAgID0gQ09ERUNfU0FBNzExMywKKwkJLnZpZGVvX2NoYW5uZWxzID0gMiwKKwkJLnZpZGVvX25vcm0gICAgID0gVjRMMl9TVERfTlRTQywKKwkJLmF1ZGlvX2NoYW5uZWxzID0gMSwKKwkJLnJhZGlvICAgICAgICAgID0gMCwKKwkJLnZiaSAgICAgICAgICAgID0gMSwKKwkJLnR1bmVyICAgICAgICAgID0gMCwKKwkJLnR1bmVyX3R5cGUgICAgID0gMCwKKwkJLnhfb2Zmc2V0ICAgICAgID0gMCwKKwkJLnlfb2Zmc2V0ICAgICAgID0gMywKKwkJLmR2aV95dXZfb3ZlcnJpZGUgPSAxLAorCQkuZHZpX3l1diAgICAgICAgPSA3LAorCQkubW9kZWxfc3RyaW5nICAgPSAiUGlubmFjbGUgU3R1ZGlvIExpbnggVmlkZW8gaW5wdXQgY2FibGUgKE5UU0MpIiwKIAl9LAogCVtQSU5OQV9MSU5YX1ZEX0lOX0NBQl9QQUxdID0gewotCQkuSW50ZXJmYWNlICAgICA9IC0xLAotCQkuQ29kZWMgICAgICAgICA9IENPREVDX1NBQTcxMTMsCi0JCS5WaWRlb0NoYW5uZWxzID0gMiwKLQkJLlZpZGVvTm9ybSAgICAgPSBWNEwyX1NURF9QQUwsCi0JCS5BdWRpb0NoYW5uZWxzID0gMSwKLQkJLlJhZGlvICAgICAgICAgPSAwLAotCQkudmJpICAgICAgICAgICA9IDEsCi0JCS5UdW5lciAgICAgICAgID0gMCwKLQkJLlR1bmVyVHlwZSAgICAgPSAwLAotCQkuWF9PZmZzZXQgICAgICA9IDAsCi0JCS5ZX09mZnNldCAgICAgID0gMywKLQkJLkR2aV95dXZfb3ZlcnJpZGUgPSAxLAotCQkuRHZpX3l1diAgICAgICA9IDcsCi0JCS5Nb2RlbFN0cmluZyAgID0gIlBpbm5hY2xlIFN0dWRpbyBMaW54IFZpZGVvIGlucHV0IGNhYmxlIChQQUwpIiwKKwkJLmludGVyZmFjZSAgICAgID0gLTEsCisJCS5jb2RlYyAgICAgICAgICA9IENPREVDX1NBQTcxMTMsCisJCS52aWRlb19jaGFubmVscyA9IDIsCisJCS52aWRlb19ub3JtICAgICA9IFY0TDJfU1REX1BBTCwKKwkJLmF1ZGlvX2NoYW5uZWxzID0gMSwKKwkJLnJhZGlvICAgICAgICAgID0gMCwKKwkJLnZiaSAgICAgICAgICAgID0gMSwKKwkJLnR1bmVyICAgICAgICAgID0gMCwKKwkJLnR1bmVyX3R5cGUgICAgID0gMCwKKwkJLnhfb2Zmc2V0ICAgICAgID0gMCwKKwkJLnlfb2Zmc2V0ICAgICAgID0gMywKKwkJLmR2aV95dXZfb3ZlcnJpZGUgPSAxLAorCQkuZHZpX3l1diAgICAgICAgPSA3LAorCQkubW9kZWxfc3RyaW5nICAgPSAiUGlubmFjbGUgU3R1ZGlvIExpbnggVmlkZW8gaW5wdXQgY2FibGUgKFBBTCkiLAogCX0sCiAJW1BJTk5BX1BDVFZfQlVOR0VFX1BBTF9GTV0gPSB7Ci0JCS5JbnRlcmZhY2UgICAgID0gLTEsCi0JCS5Db2RlYyAgICAgICAgID0gQ09ERUNfU0FBNzExMywKLQkJLlZpZGVvQ2hhbm5lbHMgPSAzLAotCQkuVmlkZW9Ob3JtICAgICA9IFY0TDJfU1REX1BBTCwKLQkJLkF1ZGlvQ2hhbm5lbHMgPSAxLAotCQkuUmFkaW8gICAgICAgICA9IDEsCi0JCS52YmkgICAgICAgICAgID0gMSwKLQkJLlR1bmVyICAgICAgICAgPSAxLAotCQkuVHVuZXJUeXBlICAgICA9IFRVTkVSX1RFTUlDXzQwMDlGUjVfUEFMLAotCQkuWF9PZmZzZXQgICAgICA9IDAsCi0JCS5ZX09mZnNldCAgICAgID0gMywKLQkJLkR2aV95dXZfb3ZlcnJpZGUgPSAxLAotCQkuRHZpX3l1diAgICAgICA9IDcsCi0JCS5Nb2RlbFN0cmluZyAgID0gIlBpbm5hY2xlIFBDVFYgQnVuZ2VlIFVTQiAoUEFMKSBGTSIsCisJCS5pbnRlcmZhY2UgICAgICA9IC0xLAorCQkuY29kZWMgICAgICAgICAgPSBDT0RFQ19TQUE3MTEzLAorCQkudmlkZW9fY2hhbm5lbHMgPSAzLAorCQkudmlkZW9fbm9ybSAgICAgPSBWNEwyX1NURF9QQUwsCisJCS5hdWRpb19jaGFubmVscyA9IDEsCisJCS5yYWRpbyAgICAgICAgICA9IDEsCisJCS52YmkgICAgICAgICAgICA9IDEsCisJCS50dW5lciAgICAgICAgICA9IDEsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1RFTUlDXzQwMDlGUjVfUEFMLAorCQkueF9vZmZzZXQgICAgICAgPSAwLAorCQkueV9vZmZzZXQgICAgICAgPSAzLAorCQkuZHZpX3l1dl9vdmVycmlkZSA9IDEsCisJCS5kdmlfeXV2ICAgICAgICA9IDcsCisJCS5tb2RlbF9zdHJpbmcgICA9ICJQaW5uYWNsZSBQQ1RWIEJ1bmdlZSBVU0IgKFBBTCkgRk0iLAogCX0sCiAJW0hQR19XSU5UVl0gPSB7Ci0JCS5JbnRlcmZhY2UgICAgID0gLTEsCi0JCS5Db2RlYyAgICAgICAgID0gQ09ERUNfU0FBNzExMSwKLQkJLlZpZGVvQ2hhbm5lbHMgPSAzLAotCQkuVmlkZW9Ob3JtICAgICA9IFY0TDJfU1REX05UU0MsCi0JCS5BdWRpb0NoYW5uZWxzID0gMSwKLQkJLlJhZGlvICAgICAgICAgPSAwLAotCQkudmJpICAgICAgICAgICA9IDEsCi0JCS5UdW5lciAgICAgICAgID0gMSwKLQkJLlR1bmVyVHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX05UU0NfTSwKLQkJLlhfT2Zmc2V0ICAgICAgPSAtMSwKLQkJLllfT2Zmc2V0ICAgICAgPSAtMSwKLQkJLk1vZGVsU3RyaW5nICAgPSAiSGF1cHBhdWdlIFdpblR2LVVTQiIsCisJCS5pbnRlcmZhY2UgICAgICA9IC0xLAorCQkuY29kZWMgICAgICAgICAgPSBDT0RFQ19TQUE3MTExLAorCQkudmlkZW9fY2hhbm5lbHMgPSAzLAorCQkudmlkZW9fbm9ybSAgICAgPSBWNEwyX1NURF9OVFNDLAorCQkuYXVkaW9fY2hhbm5lbHMgPSAxLAorCQkucmFkaW8gICAgICAgICAgPSAwLAorCQkudmJpICAgICAgICAgICAgPSAxLAorCQkudHVuZXIgICAgICAgICAgPSAxLAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX05UU0NfTSwKKwkJLnhfb2Zmc2V0ICAgICAgID0gLTEsCisJCS55X29mZnNldCAgICAgICA9IC0xLAorCQkubW9kZWxfc3RyaW5nICAgPSAiSGF1cHBhdWdlIFdpblR2LVVTQiIsCiAJfSwKIH07Ci1jb25zdCBpbnQgdXNidmlzaW9uX2RldmljZV9kYXRhX3NpemU9QVJSQVlfU0laRSh1c2J2aXNpb25fZGV2aWNlX2RhdGEpOworY29uc3QgaW50IHVzYnZpc2lvbl9kZXZpY2VfZGF0YV9zaXplID0gQVJSQVlfU0laRSh1c2J2aXNpb25fZGV2aWNlX2RhdGEpOwogCiAvKiBTdXBwb3J0ZWQgRGV2aWNlcyAqLwogCi1zdHJ1Y3QgdXNiX2RldmljZV9pZCB1c2J2aXNpb25fdGFibGUgW10gPSB7Ci0JeyBVU0JfREVWSUNFKDB4MGE2ZiwgMHgwNDAwKSwgLmRyaXZlcl9pbmZvPVhBTkJPTyB9LAotCXsgVVNCX0RFVklDRSgweDA1MGQsIDB4MDEwNiksIC5kcml2ZXJfaW5mbz1CRUxLSU5fVklERU9CVVNfSUkgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwNTBkLCAweDAyMDcpLCAuZHJpdmVyX2luZm89QkVMS0lOX1ZJREVPQlVTIH0sCi0JeyBVU0JfREVWSUNFKDB4MDUwZCwgMHgwMjA4KSwgLmRyaXZlcl9pbmZvPUJFTEtJTl9VU0JfVklERU9CVVNfSUkgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwNTcxLCAweDAwMDIpLCAuZHJpdmVyX2luZm89RUNIT0ZYX0lOVEVSVklFV19MSVRFIH0sCi0JeyBVU0JfREVWSUNFKDB4MDU3MywgMHgwMDAzKSwgLmRyaXZlcl9pbmZvPVVTQkdFQVJfVVNCR19WMSB9LAotCXsgVVNCX0RFVklDRSgweDA1NzMsIDB4MDQwMCksIC5kcml2ZXJfaW5mbz1EX0xJTktfVjEwMCB9LAotCXsgVVNCX0RFVklDRSgweDA1NzMsIDB4MjAwMCksIC5kcml2ZXJfaW5mbz1YMTBfVVNCX0NBTUVSQSB9LAotCXsgVVNCX0RFVklDRSgweDA1NzMsIDB4MmQwMCksIC5kcml2ZXJfaW5mbz1IUEdfV0lOVFZfTElWRV9QQUxfQkcgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwNTczLCAweDJkMDEpLCAuZHJpdmVyX2luZm89SFBHX1dJTlRWX0xJVkVfUFJPX05UU0NfTU4gfSwKLQl7IFVTQl9ERVZJQ0UoMHgwNTczLCAweDIxMDEpLCAuZHJpdmVyX2luZm89Wk9SQU5fUE1EX05PR0FURUNIIH0sCi0JeyBVU0JfREVWSUNFKDB4MDU3MywgMHg0MTAwKSwgLmRyaXZlcl9pbmZvPU5PR0FURUNIX1VTQl9UVl9OVFNDX0ZNIH0sCi0JeyBVU0JfREVWSUNFKDB4MDU3MywgMHg0MTEwKSwgLmRyaXZlcl9pbmZvPVBOWV9VU0JfVFZfTlRTQ19GTSB9LAotCXsgVVNCX0RFVklDRSgweDA1NzMsIDB4NDQ1MCksIC5kcml2ZXJfaW5mbz1QVl9QTEFZVFZfVVNCX1BST19QQUxfRk0gfSwKLQl7IFVTQl9ERVZJQ0UoMHgwNTczLCAweDQ1NTApLCAuZHJpdmVyX2luZm89WlRfNzIxIH0sCi0JeyBVU0JfREVWSUNFKDB4MDU3MywgMHg0ZDAwKSwgLmRyaXZlcl9pbmZvPUhQR19XSU5UVl9OVFNDX01OIH0sCi0JeyBVU0JfREVWSUNFKDB4MDU3MywgMHg0ZDAxKSwgLmRyaXZlcl9pbmZvPUhQR19XSU5UVl9QQUxfQkcgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwNTczLCAweDRkMDIpLCAuZHJpdmVyX2luZm89SFBHX1dJTlRWX1BBTF9JIH0sCi0JeyBVU0JfREVWSUNFKDB4MDU3MywgMHg0ZDAzKSwgLmRyaXZlcl9pbmZvPUhQR19XSU5UVl9QQUxfU0VDQU1fTCB9LAotCXsgVVNCX0RFVklDRSgweDA1NzMsIDB4NGQwNCksIC5kcml2ZXJfaW5mbz1IUEdfV0lOVFZfUEFMX0RfSyB9LAotCXsgVVNCX0RFVklDRSgweDA1NzMsIDB4NGQxMCksIC5kcml2ZXJfaW5mbz1IUEdfV0lOVFZfTlRTQ19GTSB9LAotCXsgVVNCX0RFVklDRSgweDA1NzMsIDB4NGQxMSksIC5kcml2ZXJfaW5mbz1IUEdfV0lOVFZfUEFMX0JHX0ZNIH0sCi0JeyBVU0JfREVWSUNFKDB4MDU3MywgMHg0ZDEyKSwgLmRyaXZlcl9pbmZvPUhQR19XSU5UVl9QQUxfSV9GTSB9LAotCXsgVVNCX0RFVklDRSgweDA1NzMsIDB4NGQxNCksIC5kcml2ZXJfaW5mbz1IUEdfV0lOVFZfUEFMX0RfS19GTSB9LAotCXsgVVNCX0RFVklDRSgweDA1NzMsIDB4NGQyYSksIC5kcml2ZXJfaW5mbz1IUEdfV0lOVFZfUFJPX05UU0NfTU4gfSwKLQl7IFVTQl9ERVZJQ0UoMHgwNTczLCAweDRkMmIpLCAuZHJpdmVyX2luZm89SFBHX1dJTlRWX1BST19OVFNDX01OX1YyIH0sCi0JeyBVU0JfREVWSUNFKDB4MDU3MywgMHg0ZDJjKSwgLmRyaXZlcl9pbmZvPUhQR19XSU5UVl9QUk9fUEFMIH0sCitzdHJ1Y3QgdXNiX2RldmljZV9pZCB1c2J2aXNpb25fdGFibGVbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoMHgwYTZmLCAweDA0MDApLCAuZHJpdmVyX2luZm8gPSBYQU5CT08gfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNTBkLCAweDAxMDYpLCAuZHJpdmVyX2luZm8gPSBCRUxLSU5fVklERU9CVVNfSUkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNTBkLCAweDAyMDcpLCAuZHJpdmVyX2luZm8gPSBCRUxLSU5fVklERU9CVVMgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNTBkLCAweDAyMDgpLCAuZHJpdmVyX2luZm8gPSBCRUxLSU5fVVNCX1ZJREVPQlVTX0lJIH0sCisJeyBVU0JfREVWSUNFKDB4MDU3MSwgMHgwMDAyKSwgLmRyaXZlcl9pbmZvID0gRUNIT0ZYX0lOVEVSVklFV19MSVRFIH0sCisJeyBVU0JfREVWSUNFKDB4MDU3MywgMHgwMDAzKSwgLmRyaXZlcl9pbmZvID0gVVNCR0VBUl9VU0JHX1YxIH0sCisJeyBVU0JfREVWSUNFKDB4MDU3MywgMHgwNDAwKSwgLmRyaXZlcl9pbmZvID0gRF9MSU5LX1YxMDAgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNTczLCAweDIwMDApLCAuZHJpdmVyX2luZm8gPSBYMTBfVVNCX0NBTUVSQSB9LAorCXsgVVNCX0RFVklDRSgweDA1NzMsIDB4MmQwMCksIC5kcml2ZXJfaW5mbyA9IEhQR19XSU5UVl9MSVZFX1BBTF9CRyB9LAorCXsgVVNCX0RFVklDRSgweDA1NzMsIDB4MmQwMSksIC5kcml2ZXJfaW5mbyA9IEhQR19XSU5UVl9MSVZFX1BST19OVFNDX01OIH0sCisJeyBVU0JfREVWSUNFKDB4MDU3MywgMHgyMTAxKSwgLmRyaXZlcl9pbmZvID0gWk9SQU5fUE1EX05PR0FURUNIIH0sCisJeyBVU0JfREVWSUNFKDB4MDU3MywgMHg0MTAwKSwgLmRyaXZlcl9pbmZvID0gTk9HQVRFQ0hfVVNCX1RWX05UU0NfRk0gfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNTczLCAweDQxMTApLCAuZHJpdmVyX2luZm8gPSBQTllfVVNCX1RWX05UU0NfRk0gfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNTczLCAweDQ0NTApLCAuZHJpdmVyX2luZm8gPSBQVl9QTEFZVFZfVVNCX1BST19QQUxfRk0gfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNTczLCAweDQ1NTApLCAuZHJpdmVyX2luZm8gPSBaVF83MjEgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNTczLCAweDRkMDApLCAuZHJpdmVyX2luZm8gPSBIUEdfV0lOVFZfTlRTQ19NTiB9LAorCXsgVVNCX0RFVklDRSgweDA1NzMsIDB4NGQwMSksIC5kcml2ZXJfaW5mbyA9IEhQR19XSU5UVl9QQUxfQkcgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNTczLCAweDRkMDIpLCAuZHJpdmVyX2luZm8gPSBIUEdfV0lOVFZfUEFMX0kgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNTczLCAweDRkMDMpLCAuZHJpdmVyX2luZm8gPSBIUEdfV0lOVFZfUEFMX1NFQ0FNX0wgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNTczLCAweDRkMDQpLCAuZHJpdmVyX2luZm8gPSBIUEdfV0lOVFZfUEFMX0RfSyB9LAorCXsgVVNCX0RFVklDRSgweDA1NzMsIDB4NGQxMCksIC5kcml2ZXJfaW5mbyA9IEhQR19XSU5UVl9OVFNDX0ZNIH0sCisJeyBVU0JfREVWSUNFKDB4MDU3MywgMHg0ZDExKSwgLmRyaXZlcl9pbmZvID0gSFBHX1dJTlRWX1BBTF9CR19GTSB9LAorCXsgVVNCX0RFVklDRSgweDA1NzMsIDB4NGQxMiksIC5kcml2ZXJfaW5mbyA9IEhQR19XSU5UVl9QQUxfSV9GTSB9LAorCXsgVVNCX0RFVklDRSgweDA1NzMsIDB4NGQxNCksIC5kcml2ZXJfaW5mbyA9IEhQR19XSU5UVl9QQUxfRF9LX0ZNIH0sCisJeyBVU0JfREVWSUNFKDB4MDU3MywgMHg0ZDJhKSwgLmRyaXZlcl9pbmZvID0gSFBHX1dJTlRWX1BST19OVFNDX01OIH0sCisJeyBVU0JfREVWSUNFKDB4MDU3MywgMHg0ZDJiKSwgLmRyaXZlcl9pbmZvID0gSFBHX1dJTlRWX1BST19OVFNDX01OX1YyIH0sCisJeyBVU0JfREVWSUNFKDB4MDU3MywgMHg0ZDJjKSwgLmRyaXZlcl9pbmZvID0gSFBHX1dJTlRWX1BST19QQUwgfSwKIAl7IFVTQl9ERVZJQ0UoMHgwNTczLCAweDRkMjApLCAuZHJpdmVyX2luZm8gPSBIUEdfV0lOVFZfUFJPX05UU0NfTU5fVjMgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwNTczLCAweDRkMjEpLCAuZHJpdmVyX2luZm89SFBHX1dJTlRWX1BST19QQUxfQkcgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwNTczLCAweDRkMjIpLCAuZHJpdmVyX2luZm89SFBHX1dJTlRWX1BST19QQUxfSSB9LAotCXsgVVNCX0RFVklDRSgweDA1NzMsIDB4NGQyMyksIC5kcml2ZXJfaW5mbz1IUEdfV0lOVFZfUFJPX1BBTF9TRUNBTV9MIH0sCi0JeyBVU0JfREVWSUNFKDB4MDU3MywgMHg0ZDI0KSwgLmRyaXZlcl9pbmZvPUhQR19XSU5UVl9QUk9fUEFMX0RfSyB9LAotCXsgVVNCX0RFVklDRSgweDA1NzMsIDB4NGQyNSksIC5kcml2ZXJfaW5mbz1IUEdfV0lOVFZfUFJPX1BBTF9TRUNBTSB9LAotCXsgVVNCX0RFVklDRSgweDA1NzMsIDB4NGQyNiksIC5kcml2ZXJfaW5mbz1IUEdfV0lOVFZfUFJPX1BBTF9TRUNBTV9WMiB9LAotCXsgVVNCX0RFVklDRSgweDA1NzMsIDB4NGQyNyksIC5kcml2ZXJfaW5mbz1IUEdfV0lOVFZfUFJPX1BBTF9CR19WMiB9LAotCXsgVVNCX0RFVklDRSgweDA1NzMsIDB4NGQyOCksIC5kcml2ZXJfaW5mbz1IUEdfV0lOVFZfUFJPX1BBTF9CR19EX0sgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwNTczLCAweDRkMjkpLCAuZHJpdmVyX2luZm89SFBHX1dJTlRWX1BST19QQUxfSV9EX0sgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwNTczLCAweDRkMzApLCAuZHJpdmVyX2luZm89SFBHX1dJTlRWX1BST19OVFNDX01OX0ZNIH0sCi0JeyBVU0JfREVWSUNFKDB4MDU3MywgMHg0ZDMxKSwgLmRyaXZlcl9pbmZvPUhQR19XSU5UVl9QUk9fUEFMX0JHX0ZNIH0sCi0JeyBVU0JfREVWSUNFKDB4MDU3MywgMHg0ZDMyKSwgLmRyaXZlcl9pbmZvPUhQR19XSU5UVl9QUk9fUEFMX0lfRk0gfSwKLQl7IFVTQl9ERVZJQ0UoMHgwNTczLCAweDRkMzQpLCAuZHJpdmVyX2luZm89SFBHX1dJTlRWX1BST19QQUxfRF9LX0ZNIH0sCi0JeyBVU0JfREVWSUNFKDB4MDU3MywgMHg0ZDM1KSwgLmRyaXZlcl9pbmZvPUhQR19XSU5UVl9QUk9fVEVNSUNfUEFMX0ZNIH0sCi0JeyBVU0JfREVWSUNFKDB4MDU3MywgMHg0ZDM2KSwgLmRyaXZlcl9pbmZvPUhQR19XSU5UVl9QUk9fVEVNSUNfUEFMX0JHX0ZNIH0sCi0JeyBVU0JfREVWSUNFKDB4MDU3MywgMHg0ZDM3KSwgLmRyaXZlcl9pbmZvPUhQR19XSU5UVl9QUk9fUEFMX0ZNIH0sCi0JeyBVU0JfREVWSUNFKDB4MDU3MywgMHg0ZDM4KSwgLmRyaXZlcl9pbmZvPUhQR19XSU5UVl9QUk9fTlRTQ19NTl9GTV9WMiB9LAotCXsgVVNCX0RFVklDRSgweDA3NjgsIDB4MDAwNiksIC5kcml2ZXJfaW5mbz1DQU1URUxfVFZCMzMwIH0sCi0JeyBVU0JfREVWSUNFKDB4MDdkMCwgMHgwMDAxKSwgLmRyaXZlcl9pbmZvPURJR0lUQUxfVklERU9fQ1JFQVRPUl9JIH0sCi0JeyBVU0JfREVWSUNFKDB4MDdkMCwgMHgwMDAyKSwgLmRyaXZlcl9pbmZvPUdMT0JBTF9WSUxMQUdFX0dWXzAwN19OVFNDIH0sCi0JeyBVU0JfREVWSUNFKDB4MDdkMCwgMHgwMDAzKSwgLmRyaXZlcl9pbmZvPURBWlpMRV9EVkNfNTBfUkVWXzFfTlRTQyB9LAotCXsgVVNCX0RFVklDRSgweDA3ZDAsIDB4MDAwNCksIC5kcml2ZXJfaW5mbz1EQVpaTEVfRFZDXzgwX1JFVl8xX1BBTCB9LAotCXsgVVNCX0RFVklDRSgweDA3ZDAsIDB4MDAwNSksIC5kcml2ZXJfaW5mbz1EQVpaTEVfRFZDXzkwX1JFVl8xX1NFQ0FNIH0sCi0JeyBVU0JfREVWSUNFKDB4MDdmOCwgMHg5MTA0KSwgLmRyaXZlcl9pbmZvPUVTS0FQRV9MQUJTX01ZVFYyR08gfSwKLQl7IFVTQl9ERVZJQ0UoMHgyMzA0LCAweDAxMGQpLCAuZHJpdmVyX2luZm89UElOTkFfUENUVl9VU0JfUEFMIH0sCi0JeyBVU0JfREVWSUNFKDB4MjMwNCwgMHgwMTA5KSwgLmRyaXZlcl9pbmZvPVBJTk5BX1BDVFZfVVNCX1NFQ0FNIH0sCi0JeyBVU0JfREVWSUNFKDB4MjMwNCwgMHgwMTEwKSwgLmRyaXZlcl9pbmZvPVBJTk5BX1BDVFZfVVNCX1BBTF9GTSB9LAotCXsgVVNCX0RFVklDRSgweDIzMDQsIDB4MDExMSksIC5kcml2ZXJfaW5mbz1NSVJPX1BDVFZfVVNCIH0sCi0JeyBVU0JfREVWSUNFKDB4MjMwNCwgMHgwMTEyKSwgLmRyaXZlcl9pbmZvPVBJTk5BX1BDVFZfVVNCX05UU0NfRk0gfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNTczLCAweDRkMjEpLCAuZHJpdmVyX2luZm8gPSBIUEdfV0lOVFZfUFJPX1BBTF9CRyB9LAorCXsgVVNCX0RFVklDRSgweDA1NzMsIDB4NGQyMiksIC5kcml2ZXJfaW5mbyA9IEhQR19XSU5UVl9QUk9fUEFMX0kgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNTczLCAweDRkMjMpLCAuZHJpdmVyX2luZm8gPSBIUEdfV0lOVFZfUFJPX1BBTF9TRUNBTV9MIH0sCisJeyBVU0JfREVWSUNFKDB4MDU3MywgMHg0ZDI0KSwgLmRyaXZlcl9pbmZvID0gSFBHX1dJTlRWX1BST19QQUxfRF9LIH0sCisJeyBVU0JfREVWSUNFKDB4MDU3MywgMHg0ZDI1KSwgLmRyaXZlcl9pbmZvID0gSFBHX1dJTlRWX1BST19QQUxfU0VDQU0gfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNTczLCAweDRkMjYpLCAuZHJpdmVyX2luZm8gPSBIUEdfV0lOVFZfUFJPX1BBTF9TRUNBTV9WMiB9LAorCXsgVVNCX0RFVklDRSgweDA1NzMsIDB4NGQyNyksIC5kcml2ZXJfaW5mbyA9IEhQR19XSU5UVl9QUk9fUEFMX0JHX1YyIH0sCisJeyBVU0JfREVWSUNFKDB4MDU3MywgMHg0ZDI4KSwgLmRyaXZlcl9pbmZvID0gSFBHX1dJTlRWX1BST19QQUxfQkdfRF9LIH0sCisJeyBVU0JfREVWSUNFKDB4MDU3MywgMHg0ZDI5KSwgLmRyaXZlcl9pbmZvID0gSFBHX1dJTlRWX1BST19QQUxfSV9EX0sgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNTczLCAweDRkMzApLCAuZHJpdmVyX2luZm8gPSBIUEdfV0lOVFZfUFJPX05UU0NfTU5fRk0gfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNTczLCAweDRkMzEpLCAuZHJpdmVyX2luZm8gPSBIUEdfV0lOVFZfUFJPX1BBTF9CR19GTSB9LAorCXsgVVNCX0RFVklDRSgweDA1NzMsIDB4NGQzMiksIC5kcml2ZXJfaW5mbyA9IEhQR19XSU5UVl9QUk9fUEFMX0lfRk0gfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNTczLCAweDRkMzQpLCAuZHJpdmVyX2luZm8gPSBIUEdfV0lOVFZfUFJPX1BBTF9EX0tfRk0gfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNTczLCAweDRkMzUpLCAuZHJpdmVyX2luZm8gPSBIUEdfV0lOVFZfUFJPX1RFTUlDX1BBTF9GTSB9LAorCXsgVVNCX0RFVklDRSgweDA1NzMsIDB4NGQzNiksIC5kcml2ZXJfaW5mbyA9IEhQR19XSU5UVl9QUk9fVEVNSUNfUEFMX0JHX0ZNIH0sCisJeyBVU0JfREVWSUNFKDB4MDU3MywgMHg0ZDM3KSwgLmRyaXZlcl9pbmZvID0gSFBHX1dJTlRWX1BST19QQUxfRk0gfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNTczLCAweDRkMzgpLCAuZHJpdmVyX2luZm8gPSBIUEdfV0lOVFZfUFJPX05UU0NfTU5fRk1fVjIgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNzY4LCAweDAwMDYpLCAuZHJpdmVyX2luZm8gPSBDQU1URUxfVFZCMzMwIH0sCisJeyBVU0JfREVWSUNFKDB4MDdkMCwgMHgwMDAxKSwgLmRyaXZlcl9pbmZvID0gRElHSVRBTF9WSURFT19DUkVBVE9SX0kgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwN2QwLCAweDAwMDIpLCAuZHJpdmVyX2luZm8gPSBHTE9CQUxfVklMTEFHRV9HVl8wMDdfTlRTQyB9LAorCXsgVVNCX0RFVklDRSgweDA3ZDAsIDB4MDAwMyksIC5kcml2ZXJfaW5mbyA9IERBWlpMRV9EVkNfNTBfUkVWXzFfTlRTQyB9LAorCXsgVVNCX0RFVklDRSgweDA3ZDAsIDB4MDAwNCksIC5kcml2ZXJfaW5mbyA9IERBWlpMRV9EVkNfODBfUkVWXzFfUEFMIH0sCisJeyBVU0JfREVWSUNFKDB4MDdkMCwgMHgwMDA1KSwgLmRyaXZlcl9pbmZvID0gREFaWkxFX0RWQ185MF9SRVZfMV9TRUNBTSB9LAorCXsgVVNCX0RFVklDRSgweDA3ZjgsIDB4OTEwNCksIC5kcml2ZXJfaW5mbyA9IEVTS0FQRV9MQUJTX01ZVFYyR08gfSwKKwl7IFVTQl9ERVZJQ0UoMHgyMzA0LCAweDAxMGQpLCAuZHJpdmVyX2luZm8gPSBQSU5OQV9QQ1RWX1VTQl9QQUwgfSwKKwl7IFVTQl9ERVZJQ0UoMHgyMzA0LCAweDAxMDkpLCAuZHJpdmVyX2luZm8gPSBQSU5OQV9QQ1RWX1VTQl9TRUNBTSB9LAorCXsgVVNCX0RFVklDRSgweDIzMDQsIDB4MDExMCksIC5kcml2ZXJfaW5mbyA9IFBJTk5BX1BDVFZfVVNCX1BBTF9GTSB9LAorCXsgVVNCX0RFVklDRSgweDIzMDQsIDB4MDExMSksIC5kcml2ZXJfaW5mbyA9IE1JUk9fUENUVl9VU0IgfSwKKwl7IFVTQl9ERVZJQ0UoMHgyMzA0LCAweDAxMTIpLCAuZHJpdmVyX2luZm8gPSBQSU5OQV9QQ1RWX1VTQl9OVFNDX0ZNIH0sCiAJeyBVU0JfREVWSUNFKDB4MjMwNCwgMHgwMTEzKSwKIAkgIC5kcml2ZXJfaW5mbyA9IFBJTk5BX1BDVFZfVVNCX05UU0NfRk1fVjMgfSwKLQl7IFVTQl9ERVZJQ0UoMHgyMzA0LCAweDAyMTApLCAuZHJpdmVyX2luZm89UElOTkFfUENUVl9VU0JfUEFMX0ZNX1YyIH0sCi0JeyBVU0JfREVWSUNFKDB4MjMwNCwgMHgwMjEyKSwgLmRyaXZlcl9pbmZvPVBJTk5BX1BDVFZfVVNCX05UU0NfRk1fVjIgfSwKLQl7IFVTQl9ERVZJQ0UoMHgyMzA0LCAweDAyMTQpLCAuZHJpdmVyX2luZm89UElOTkFfUENUVl9VU0JfUEFMX0ZNX1YzIH0sCi0JeyBVU0JfREVWSUNFKDB4MjMwNCwgMHgwMzAwKSwgLmRyaXZlcl9pbmZvPVBJTk5BX0xJTlhfVkRfSU5fQ0FCX05UU0MgfSwKLQl7IFVTQl9ERVZJQ0UoMHgyMzA0LCAweDAzMDEpLCAuZHJpdmVyX2luZm89UElOTkFfTElOWF9WRF9JTl9DQUJfUEFMIH0sCi0JeyBVU0JfREVWSUNFKDB4MjMwNCwgMHgwNDE5KSwgLmRyaXZlcl9pbmZvPVBJTk5BX1BDVFZfQlVOR0VFX1BBTF9GTSB9LAotCXsgVVNCX0RFVklDRSgweDI0MDAsIDB4NDIwMCksIC5kcml2ZXJfaW5mbz1IUEdfV0lOVFYgfSwKKwl7IFVTQl9ERVZJQ0UoMHgyMzA0LCAweDAyMTApLCAuZHJpdmVyX2luZm8gPSBQSU5OQV9QQ1RWX1VTQl9QQUxfRk1fVjIgfSwKKwl7IFVTQl9ERVZJQ0UoMHgyMzA0LCAweDAyMTIpLCAuZHJpdmVyX2luZm8gPSBQSU5OQV9QQ1RWX1VTQl9OVFNDX0ZNX1YyIH0sCisJeyBVU0JfREVWSUNFKDB4MjMwNCwgMHgwMjE0KSwgLmRyaXZlcl9pbmZvID0gUElOTkFfUENUVl9VU0JfUEFMX0ZNX1YzIH0sCisJeyBVU0JfREVWSUNFKDB4MjMwNCwgMHgwMzAwKSwgLmRyaXZlcl9pbmZvID0gUElOTkFfTElOWF9WRF9JTl9DQUJfTlRTQyB9LAorCXsgVVNCX0RFVklDRSgweDIzMDQsIDB4MDMwMSksIC5kcml2ZXJfaW5mbyA9IFBJTk5BX0xJTlhfVkRfSU5fQ0FCX1BBTCB9LAorCXsgVVNCX0RFVklDRSgweDIzMDQsIDB4MDQxOSksIC5kcml2ZXJfaW5mbyA9IFBJTk5BX1BDVFZfQlVOR0VFX1BBTF9GTSB9LAorCXsgVVNCX0RFVklDRSgweDI0MDAsIDB4NDIwMCksIC5kcml2ZXJfaW5mbyA9IEhQR19XSU5UViB9LAogCXsgfSwgICAgLyogdGVybWluYXRlIGxpc3QgKi8KIH07CiAKLU1PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgdXNidmlzaW9uX3RhYmxlKTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCB1c2J2aXNpb25fdGFibGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vdXNidmlzaW9uLWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi1jb3JlLmMKaW5kZXggYjlkZDc0Zi4uYzhmZWIwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vdXNidmlzaW9uLWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi91c2J2aXNpb24tY29yZS5jCkBAIC0zMyw3ICszMyw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KIApAQCAtNDYsMzAgKzQ2LDMwIEBACiAjaW5jbHVkZSAidXNidmlzaW9uLmgiCiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgY29yZV9kZWJ1ZzsKLW1vZHVsZV9wYXJhbShjb3JlX2RlYnVnLGludCwwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoY29yZV9kZWJ1ZywiZW5hYmxlIGRlYnVnIG1lc3NhZ2VzIFtjb3JlXSIpOworbW9kdWxlX3BhcmFtKGNvcmVfZGVidWcsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGNvcmVfZGVidWcsICJlbmFibGUgZGVidWcgbWVzc2FnZXMgW2NvcmVdIik7CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZm9yY2VfdGVzdHBhdHRlcm47Ci1tb2R1bGVfcGFyYW0oZm9yY2VfdGVzdHBhdHRlcm4saW50LDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhmb3JjZV90ZXN0cGF0dGVybiwiZW5hYmxlIHRlc3QgcGF0dGVybiBkaXNwbGF5IFtjb3JlXSIpOworbW9kdWxlX3BhcmFtKGZvcmNlX3Rlc3RwYXR0ZXJuLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhmb3JjZV90ZXN0cGF0dGVybiwgImVuYWJsZSB0ZXN0IHBhdHRlcm4gZGlzcGxheSBbY29yZV0iKTsKIAotc3RhdGljIGludCBhZGp1c3RDb21wcmVzc2lvbiA9IDE7CS8qIFNldCB0aGUgY29tcHJlc3Npb24gdG8gYmUgYWRhcHRpdmUgKi8KLW1vZHVsZV9wYXJhbShhZGp1c3RDb21wcmVzc2lvbiwgaW50LCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoYWRqdXN0Q29tcHJlc3Npb24sICIgU2V0IHRoZSBBRFBDTSBjb21wcmVzc2lvbiBmb3IgdGhlIGRldmljZS4gIERlZmF1bHQ6IDEgKE9uKSIpOworc3RhdGljIGludCBhZGp1c3RfY29tcHJlc3Npb24gPSAxOwkvKiBTZXQgdGhlIGNvbXByZXNzaW9uIHRvIGJlIGFkYXB0aXZlICovCittb2R1bGVfcGFyYW0oYWRqdXN0X2NvbXByZXNzaW9uLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhhZGp1c3RfY29tcHJlc3Npb24sICIgU2V0IHRoZSBBRFBDTSBjb21wcmVzc2lvbiBmb3IgdGhlIGRldmljZS4gIERlZmF1bHQ6IDEgKE9uKSIpOwogCiAvKiBUbyBoZWxwIHBlb3BsZSB3aXRoIEJsYWNrIGFuZCBXaGl0ZSBvdXRwdXQgd2l0aCB1c2luZyBzLXZpZGVvIGlucHV0LgogICogU29tZSBjYWJsZXMgYW5kIGlucHV0IGRldmljZSBhcmUgd2lyZWQgZGlmZmVyZW50bHkuICovCi1zdGF0aWMgaW50IFN3aXRjaFNWaWRlb0lucHV0OwotbW9kdWxlX3BhcmFtKFN3aXRjaFNWaWRlb0lucHV0LCBpbnQsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhTd2l0Y2hTVmlkZW9JbnB1dCwgIiBTZXQgdGhlIFMtVmlkZW8gaW5wdXQuICBTb21lIGNhYmxlcyBhbmQgaW5wdXQgZGV2aWNlIGFyZSB3aXJlZCBkaWZmZXJlbnRseS4gRGVmYXVsdDogMCAoT2ZmKSIpOworc3RhdGljIGludCBzd2l0Y2hfc3ZpZGVvX2lucHV0OworbW9kdWxlX3BhcmFtKHN3aXRjaF9zdmlkZW9faW5wdXQsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHN3aXRjaF9zdmlkZW9faW5wdXQsICIgU2V0IHRoZSBTLVZpZGVvIGlucHV0LiAgU29tZSBjYWJsZXMgYW5kIGlucHV0IGRldmljZSBhcmUgd2lyZWQgZGlmZmVyZW50bHkuIERlZmF1bHQ6IDAgKE9mZikiKTsKIAotc3RhdGljIHVuc2lnbmVkIGludCBhZGp1c3RfWF9PZmZzZXQgPSAtMTsKLW1vZHVsZV9wYXJhbShhZGp1c3RfWF9PZmZzZXQsIGludCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGFkanVzdF9YX09mZnNldCwgImFkanVzdCBYIG9mZnNldCBkaXNwbGF5IFtjb3JlXSIpOworc3RhdGljIHVuc2lnbmVkIGludCBhZGp1c3RfeF9vZmZzZXQgPSAtMTsKK21vZHVsZV9wYXJhbShhZGp1c3RfeF9vZmZzZXQsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGFkanVzdF94X29mZnNldCwgImFkanVzdCBYIG9mZnNldCBkaXNwbGF5IFtjb3JlXSIpOwogCi1zdGF0aWMgdW5zaWduZWQgaW50IGFkanVzdF9ZX09mZnNldCA9IC0xOwotbW9kdWxlX3BhcmFtKGFkanVzdF9ZX09mZnNldCwgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoYWRqdXN0X1lfT2Zmc2V0LCAiYWRqdXN0IFkgb2Zmc2V0IGRpc3BsYXkgW2NvcmVdIik7CitzdGF0aWMgdW5zaWduZWQgaW50IGFkanVzdF95X29mZnNldCA9IC0xOworbW9kdWxlX3BhcmFtKGFkanVzdF95X29mZnNldCwgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoYWRqdXN0X3lfb2Zmc2V0LCAiYWRqdXN0IFkgb2Zmc2V0IGRpc3BsYXkgW2NvcmVdIik7CiAKIAogI2RlZmluZQlFTkFCTEVfSEVYRFVNUAkwCS8qIEVuYWJsZSBpZiB5b3UgbmVlZCBpdCAqLwpAQCAtODIsMTUgKzgyLDE1IEBACiAJCQkJX19mdW5jX18sIF9fTElORV9fICwgIyMgYXJncyk7IFwKIAl9CiAjZWxzZQotCSNkZWZpbmUgUERFQlVHKGxldmVsLCBmbXQsIGFyZ3MuLi4pIGRvIHt9IHdoaWxlKDApCisJI2RlZmluZSBQREVCVUcobGV2ZWwsIGZtdCwgYXJncy4uLikgZG8ge30gd2hpbGUgKDApCiAjZW5kaWYKIAotI2RlZmluZSBEQkdfSEVBREVSCTE8PDAKLSNkZWZpbmUgREJHX0lSUQkJMTw8MQotI2RlZmluZSBEQkdfSVNPQwkxPDwyCi0jZGVmaW5lIERCR19QQVJTRQkxPDwzCi0jZGVmaW5lIERCR19TQ1JBVENICTE8PDQKLSNkZWZpbmUgREJHX0ZVTkMJMTw8NQorI2RlZmluZSBEQkdfSEVBREVSCSgxIDw8IDApCisjZGVmaW5lIERCR19JUlEJCSgxIDw8IDEpCisjZGVmaW5lIERCR19JU09DCSgxIDw8IDIpCisjZGVmaW5lIERCR19QQVJTRQkoMSA8PCAzKQorI2RlZmluZSBEQkdfU0NSQVRDSAkoMSA8PCA0KQorI2RlZmluZSBEQkdfRlVOQwkoMSA8PCA1KQogCiBzdGF0aWMgY29uc3QgaW50IG1heF9pbWd3aWR0aCA9IE1BWF9GUkFNRV9XSURUSDsKIHN0YXRpYyBjb25zdCBpbnQgbWF4X2ltZ2hlaWdodCA9IE1BWF9GUkFNRV9IRUlHSFQ7CkBAIC0xMDMsMTQgKzEwMywxNCBAQAogICogdG8gd29yayB3aXRoLiBUaGlzIHNldHRpbmcgY2FuIGJlIGFkanVzdGVkLCBidXQgdGhlIGRlZmF1bHQgdmFsdWUKICAqIHNob3VsZCBiZSBPSyBmb3IgbW9zdCBkZXNrdG9wIHVzZXJzLgogICovCi0jZGVmaW5lIERFRkFVTFRfU0NSQVRDSF9CVUZfU0laRQkoMHgyMDAwMCkJCS8vIDEyOGtCIG1lbW9yeSBzY3JhdGNoIGJ1ZmZlcgorI2RlZmluZSBERUZBVUxUX1NDUkFUQ0hfQlVGX1NJWkUJKDB4MjAwMDApCQkvKiAxMjhrQiBtZW1vcnkgc2NyYXRjaCBidWZmZXIgKi8KIHN0YXRpYyBjb25zdCBpbnQgc2NyYXRjaF9idWZfc2l6ZSA9IERFRkFVTFRfU0NSQVRDSF9CVUZfU0laRTsKIAotLy8gRnVuY3Rpb24gcHJvdG90eXBlcwotc3RhdGljIGludCB1c2J2aXNpb25fcmVxdWVzdF9pbnRyYSAoc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbik7Ci1zdGF0aWMgaW50IHVzYnZpc2lvbl91bnJlcXVlc3RfaW50cmEgKHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24pOwotc3RhdGljIGludCB1c2J2aXNpb25fYWRqdXN0X2NvbXByZXNzaW9uIChzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uKTsKLXN0YXRpYyBpbnQgdXNidmlzaW9uX21lYXN1cmVfYmFuZHdpZHRoIChzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uKTsKKy8qIEZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KK3N0YXRpYyBpbnQgdXNidmlzaW9uX3JlcXVlc3RfaW50cmEoc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbik7CitzdGF0aWMgaW50IHVzYnZpc2lvbl91bnJlcXVlc3RfaW50cmEoc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbik7CitzdGF0aWMgaW50IHVzYnZpc2lvbl9hZGp1c3RfY29tcHJlc3Npb24oc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbik7CitzdGF0aWMgaW50IHVzYnZpc2lvbl9tZWFzdXJlX2JhbmR3aWR0aChzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uKTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBNZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMgKi8KQEAgLTE3NiwxOSArMTc2LDE5IEBACiAJCWsgKz0gc3ByaW50ZigmdG1wW2tdLCAiJTAyeCAiLCBkYXRhW2ldKTsKIAl9CiAJaWYgKGsgPiAwKQotCQlwcmludGsoIiVzXG4iLCB0bXApOworCQlwcmludGsoS0VSTl9DT05UICIlc1xuIiwgdG1wKTsKIH0KICNlbmRpZgogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIHNjcmF0Y2ggcmluZyBidWZmZXIgaGFuZGxpbmcKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQgc2NyYXRjaF9sZW4oc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbikgICAgLypUaGlzIHJldHVybnMgdGhlIGFtb3VudCBvZiBkYXRhIGFjdHVhbGx5IGluIHRoZSBidWZmZXIgKi8KK3N0YXRpYyBpbnQgc2NyYXRjaF9sZW4oc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbikgICAgLyogVGhpcyByZXR1cm5zIHRoZSBhbW91bnQgb2YgZGF0YSBhY3R1YWxseSBpbiB0aGUgYnVmZmVyICovCiB7CiAJaW50IGxlbiA9IHVzYnZpc2lvbi0+c2NyYXRjaF93cml0ZV9wdHIgLSB1c2J2aXNpb24tPnNjcmF0Y2hfcmVhZF9wdHI7Ci0JaWYgKGxlbiA8IDApIHsKKworCWlmIChsZW4gPCAwKQogCQlsZW4gKz0gc2NyYXRjaF9idWZfc2l6ZTsKLQl9CiAJUERFQlVHKERCR19TQ1JBVENILCAic2NyYXRjaF9sZW4oKSA9ICVkXG4iLCBsZW4pOwogCiAJcmV0dXJuIGxlbjsKQEAgLTE5OSw5ICsxOTksOCBAQAogc3RhdGljIGludCBzY3JhdGNoX2ZyZWUoc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbikKIHsKIAlpbnQgZnJlZSA9IHVzYnZpc2lvbi0+c2NyYXRjaF9yZWFkX3B0ciAtIHVzYnZpc2lvbi0+c2NyYXRjaF93cml0ZV9wdHI7Ci0JaWYgKGZyZWUgPD0gMCkgeworCWlmIChmcmVlIDw9IDApCiAJCWZyZWUgKz0gc2NyYXRjaF9idWZfc2l6ZTsKLQl9CiAJaWYgKGZyZWUpIHsKIAkJZnJlZSAtPSAxOwkJCQkJCQkvKiBhdCBsZWFzdCBvbmUgYnl0ZSBpbiB0aGUgYnVmZmVyIG11c3QgKi8KIAkJCQkJCQkJCQkvKiBsZWZ0IGJsYW5rLCBvdGhlcndpc2UgdGhlcmUgaXMgbm8gY2hhbmNlIHRvIGRpZmZlciBiZXR3ZWVuIGZ1bGwgYW5kIGVtcHR5ICovCkBAIC0yMjEsMTQgKzIyMCwxMiBAQAogCWlmICh1c2J2aXNpb24tPnNjcmF0Y2hfd3JpdGVfcHRyICsgbGVuIDwgc2NyYXRjaF9idWZfc2l6ZSkgewogCQltZW1jcHkodXNidmlzaW9uLT5zY3JhdGNoICsgdXNidmlzaW9uLT5zY3JhdGNoX3dyaXRlX3B0ciwgZGF0YSwgbGVuKTsKIAkJdXNidmlzaW9uLT5zY3JhdGNoX3dyaXRlX3B0ciArPSBsZW47Ci0JfQotCWVsc2UgeworCX0gZWxzZSB7CiAJCWxlbl9wYXJ0ID0gc2NyYXRjaF9idWZfc2l6ZSAtIHVzYnZpc2lvbi0+c2NyYXRjaF93cml0ZV9wdHI7CiAJCW1lbWNweSh1c2J2aXNpb24tPnNjcmF0Y2ggKyB1c2J2aXNpb24tPnNjcmF0Y2hfd3JpdGVfcHRyLCBkYXRhLCBsZW5fcGFydCk7CiAJCWlmIChsZW4gPT0gbGVuX3BhcnQpIHsKIAkJCXVzYnZpc2lvbi0+c2NyYXRjaF93cml0ZV9wdHIgPSAwOwkJCS8qIGp1c3Qgc2V0IHdyaXRlX3B0ciB0byB6ZXJvICovCi0JCX0KLQkJZWxzZSB7CisJCX0gZWxzZSB7CiAJCQltZW1jcHkodXNidmlzaW9uLT5zY3JhdGNoLCBkYXRhICsgbGVuX3BhcnQsIGxlbiAtIGxlbl9wYXJ0KTsKIAkJCXVzYnZpc2lvbi0+c2NyYXRjaF93cml0ZV9wdHIgPSBsZW4gLSBsZW5fcGFydDsKIAkJfQpAQCAtMjU1LDE3ICsyNTIsMTYgQEAKIAkJCSAgICAgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50ICpwdHIsIGludCBsZW4pCiB7CiAJaW50IGxlbl9wYXJ0OworCiAJaWYgKCpwdHIgKyBsZW4gPCBzY3JhdGNoX2J1Zl9zaXplKSB7CiAJCW1lbWNweShkYXRhLCB1c2J2aXNpb24tPnNjcmF0Y2ggKyAqcHRyLCBsZW4pOwogCQkqcHRyICs9IGxlbjsKLQl9Ci0JZWxzZSB7CisJfSBlbHNlIHsKIAkJbGVuX3BhcnQgPSBzY3JhdGNoX2J1Zl9zaXplIC0gKnB0cjsKIAkJbWVtY3B5KGRhdGEsIHVzYnZpc2lvbi0+c2NyYXRjaCArICpwdHIsIGxlbl9wYXJ0KTsKIAkJaWYgKGxlbiA9PSBsZW5fcGFydCkgewogCQkJKnB0ciA9IDA7CQkJCQkJCS8qIGp1c3Qgc2V0IHRoZSB5X3B0ciB0byB6ZXJvICovCi0JCX0KLQkJZWxzZSB7CisJCX0gZWxzZSB7CiAJCQltZW1jcHkoZGF0YSArIGxlbl9wYXJ0LCB1c2J2aXNpb24tPnNjcmF0Y2gsIGxlbiAtIGxlbl9wYXJ0KTsKIAkJCSpwdHIgPSBsZW4gLSBsZW5fcGFydDsKIAkJfQpAQCAtMjgxLDEzICsyNzcsMTMgQEAKIHN0YXRpYyB2b2lkIHNjcmF0Y2hfc2V0X2V4dHJhX3B0cihzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uLCBpbnQgKnB0ciwKIAkJCQkgIGludCBsZW4pCiB7Ci0JKnB0ciA9ICh1c2J2aXNpb24tPnNjcmF0Y2hfcmVhZF9wdHIgKyBsZW4pJXNjcmF0Y2hfYnVmX3NpemU7CisJKnB0ciA9ICh1c2J2aXNpb24tPnNjcmF0Y2hfcmVhZF9wdHIgKyBsZW4pICUgc2NyYXRjaF9idWZfc2l6ZTsKIAogCVBERUJVRyhEQkdfU0NSQVRDSCwgInB0cj0lZFxuIiwgKnB0cik7CiB9CiAKIAotLypUaGlzIGluY3JlbWVudHMgdGhlIHNjcmF0Y2ggZXh0cmEgcmVhZCBwb2ludGVyICovCisvKiBUaGlzIGluY3JlbWVudHMgdGhlIHNjcmF0Y2ggZXh0cmEgcmVhZCBwb2ludGVyICovCiBzdGF0aWMgdm9pZCBzY3JhdGNoX2luY19leHRyYV9wdHIoaW50ICpwdHIsIGludCBsZW4pCiB7CiAJKnB0ciA9ICgqcHRyICsgbGVuKSAlIHNjcmF0Y2hfYnVmX3NpemU7CkBAIC0zMDEsMTcgKzI5NywxNiBAQAogCQkgICAgICAgaW50IGxlbikKIHsKIAlpbnQgbGVuX3BhcnQ7CisKIAlpZiAodXNidmlzaW9uLT5zY3JhdGNoX3JlYWRfcHRyICsgbGVuIDwgc2NyYXRjaF9idWZfc2l6ZSkgewogCQltZW1jcHkoZGF0YSwgdXNidmlzaW9uLT5zY3JhdGNoICsgdXNidmlzaW9uLT5zY3JhdGNoX3JlYWRfcHRyLCBsZW4pOwogCQl1c2J2aXNpb24tPnNjcmF0Y2hfcmVhZF9wdHIgKz0gbGVuOwotCX0KLQllbHNlIHsKKwl9IGVsc2UgewogCQlsZW5fcGFydCA9IHNjcmF0Y2hfYnVmX3NpemUgLSB1c2J2aXNpb24tPnNjcmF0Y2hfcmVhZF9wdHI7CiAJCW1lbWNweShkYXRhLCB1c2J2aXNpb24tPnNjcmF0Y2ggKyB1c2J2aXNpb24tPnNjcmF0Y2hfcmVhZF9wdHIsIGxlbl9wYXJ0KTsKIAkJaWYgKGxlbiA9PSBsZW5fcGFydCkgewogCQkJdXNidmlzaW9uLT5zY3JhdGNoX3JlYWRfcHRyID0gMDsJCQkJLyoganVzdCBzZXQgdGhlIHJlYWRfcHRyIHRvIHplcm8gKi8KLQkJfQotCQllbHNlIHsKKwkJfSBlbHNlIHsKIAkJCW1lbWNweShkYXRhICsgbGVuX3BhcnQsIHVzYnZpc2lvbi0+c2NyYXRjaCwgbGVuIC0gbGVuX3BhcnQpOwogCQkJdXNidmlzaW9uLT5zY3JhdGNoX3JlYWRfcHRyID0gbGVuIC0gbGVuX3BhcnQ7CiAJCX0KQEAgLTMyNyw3ICszMjIsNyBAQAogc3RhdGljIGludCBzY3JhdGNoX2dldF9oZWFkZXIoc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiwKIAkJCSAgICAgIHN0cnVjdCB1c2J2aXNpb25fZnJhbWVfaGVhZGVyICpoZWFkZXIpCiB7Ci0JaW50IGVyckNvZGUgPSAwOworCWludCBlcnJfY29kZSA9IDA7CiAKIAlQREVCVUcoREJHX1NDUkFUQ0gsICJmcm9tIHJlYWRfcHRyPSVkIiwgdXNidmlzaW9uLT5zY3JhdGNoX2hlYWRlcm1hcmtlcl9yZWFkX3B0cik7CiAKQEAgLTM0MCwyOSArMzM1LDI4IEBACiAJCXNjcmF0Y2hfZ2V0KHVzYnZpc2lvbiwgKHVuc2lnbmVkIGNoYXIgKiloZWFkZXIsIFVTQlZJU0lPTl9IRUFERVJfTEVOR1RIKTsKIAkJaWYgKChoZWFkZXItPm1hZ2ljXzEgPT0gVVNCVklTSU9OX01BR0lDXzEpCiAJCQkgJiYgKGhlYWRlci0+bWFnaWNfMiA9PSBVU0JWSVNJT05fTUFHSUNfMikKLQkJCSAmJiAoaGVhZGVyLT5oZWFkZXJMZW5ndGggPT0gVVNCVklTSU9OX0hFQURFUl9MRU5HVEgpKSB7Ci0JCQllcnJDb2RlID0gVVNCVklTSU9OX0hFQURFUl9MRU5HVEg7Ci0JCQloZWFkZXItPmZyYW1lV2lkdGggID0gaGVhZGVyLT5mcmFtZVdpZHRoTG8gICsgKGhlYWRlci0+ZnJhbWVXaWR0aEhpIDw8IDgpOwotCQkJaGVhZGVyLT5mcmFtZUhlaWdodCA9IGhlYWRlci0+ZnJhbWVIZWlnaHRMbyArIChoZWFkZXItPmZyYW1lSGVpZ2h0SGkgPDwgOCk7CisJCQkgJiYgKGhlYWRlci0+aGVhZGVyX2xlbmd0aCA9PSBVU0JWSVNJT05fSEVBREVSX0xFTkdUSCkpIHsKKwkJCWVycl9jb2RlID0gVVNCVklTSU9OX0hFQURFUl9MRU5HVEg7CisJCQloZWFkZXItPmZyYW1lX3dpZHRoICA9IGhlYWRlci0+ZnJhbWVfd2lkdGhfbG8gICsgKGhlYWRlci0+ZnJhbWVfd2lkdGhfaGkgPDwgOCk7CisJCQloZWFkZXItPmZyYW1lX2hlaWdodCA9IGhlYWRlci0+ZnJhbWVfaGVpZ2h0X2xvICsgKGhlYWRlci0+ZnJhbWVfaGVpZ2h0X2hpIDw8IDgpOwogCQkJYnJlYWs7CiAJCX0KIAl9CiAKLQlyZXR1cm4gZXJyQ29kZTsKKwlyZXR1cm4gZXJyX2NvZGU7CiB9CiAKIAotLypUaGlzIHJlbW92ZXMgbGVuIGJ5dGVzIG9mIG9sZCBkYXRhIGZyb20gdGhlIGJ1ZmZlciAqLworLyogVGhpcyByZW1vdmVzIGxlbiBieXRlcyBvZiBvbGQgZGF0YSBmcm9tIHRoZSBidWZmZXIgKi8KIHN0YXRpYyB2b2lkIHNjcmF0Y2hfcm1fb2xkKHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24sIGludCBsZW4pCiB7Ci0KIAl1c2J2aXNpb24tPnNjcmF0Y2hfcmVhZF9wdHIgKz0gbGVuOwogCXVzYnZpc2lvbi0+c2NyYXRjaF9yZWFkX3B0ciAlPSBzY3JhdGNoX2J1Zl9zaXplOwogCVBERUJVRyhEQkdfU0NSQVRDSCwgInJlYWRfcHRyIGlzIG5vdyAlZFxuIiwgdXNidmlzaW9uLT5zY3JhdGNoX3JlYWRfcHRyKTsKIH0KIAogCi0vKlRoaXMgcmVzZXRzIHRoZSBidWZmZXIgLSBraWxscyBhbGwgZGF0YSBpbiBpdCB0b28gKi8KKy8qIFRoaXMgcmVzZXRzIHRoZSBidWZmZXIgLSBraWxscyBhbGwgZGF0YSBpbiBpdCB0b28gKi8KIHN0YXRpYyB2b2lkIHNjcmF0Y2hfcmVzZXQoc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbikKIHsKIAlQREVCVUcoREJHX1NDUkFUQ0gsICJcbiIpOwpAQCAtMzcxLDE0ICszNjUsMTQgQEAKIAl1c2J2aXNpb24tPnNjcmF0Y2hfd3JpdGVfcHRyID0gMDsKIAl1c2J2aXNpb24tPnNjcmF0Y2hfaGVhZGVybWFya2VyX3JlYWRfcHRyID0gMDsKIAl1c2J2aXNpb24tPnNjcmF0Y2hfaGVhZGVybWFya2VyX3dyaXRlX3B0ciA9IDA7Ci0JdXNidmlzaW9uLT5pc29jc3RhdGUgPSBJc29jU3RhdGVfTm9GcmFtZTsKKwl1c2J2aXNpb24tPmlzb2NzdGF0ZSA9IGlzb2Nfc3RhdGVfbm9fZnJhbWU7CiB9CiAKIGludCB1c2J2aXNpb25fc2NyYXRjaF9hbGxvYyhzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uKQogewogCXVzYnZpc2lvbi0+c2NyYXRjaCA9IHZtYWxsb2NfMzIoc2NyYXRjaF9idWZfc2l6ZSk7CiAJc2NyYXRjaF9yZXNldCh1c2J2aXNpb24pOwotCWlmKHVzYnZpc2lvbi0+c2NyYXRjaCA9PSBOVUxMKSB7CisJaWYgKHVzYnZpc2lvbi0+c2NyYXRjaCA9PSBOVUxMKSB7CiAJCWRldl9lcnIoJnVzYnZpc2lvbi0+ZGV2LT5kZXYsCiAJCQkiJXM6IHVuYWJsZSB0byBhbGxvY2F0ZSAlZCBieXRlcyBmb3Igc2NyYXRjaFxuIiwKIAkJCQlfX2Z1bmNfXywgc2NyYXRjaF9idWZfc2l6ZSk7CkBAIC0zOTEsNyArMzg1LDYgQEAKIHsKIAl2ZnJlZSh1c2J2aXNpb24tPnNjcmF0Y2gpOwogCXVzYnZpc2lvbi0+c2NyYXRjaCA9IE5VTEw7Ci0KIH0KIAogLyoKQEAgLTQyMCwxMyArNDEzLDEzIEBACiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IHVzYnZpc2lvbiA9PSBOVUxMXG4iLCBwcm9jKTsKIAkJcmV0dXJuOwogCX0KLQlpZiAodXNidmlzaW9uLT5jdXJGcmFtZSA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IHVzYnZpc2lvbi0+Y3VyRnJhbWUgaXMgTlVMTC5cbiIsIHByb2MpOworCWlmICh1c2J2aXNpb24tPmN1cl9mcmFtZSA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHVzYnZpc2lvbi0+Y3VyX2ZyYW1lIGlzIE5VTEwuXG4iLCBwcm9jKTsKIAkJcmV0dXJuOwogCX0KIAogCS8qIEdyYWIgdGhlIGN1cnJlbnQgZnJhbWUgKi8KLQlmcmFtZSA9IHVzYnZpc2lvbi0+Y3VyRnJhbWU7CisJZnJhbWUgPSB1c2J2aXNpb24tPmN1cl9mcmFtZTsKIAogCS8qIE9wdGlvbmFsbHkgc3RhcnQgYXQgdGhlIGJlZ2lubmluZyAqLwogCWlmIChmdWxsZnJhbWUpIHsKQEAgLTQ3MywxMCArNDY2LDkgQEAKIAkJfQogCX0KIAotCWZyYW1lLT5ncmFic3RhdGUgPSBGcmFtZVN0YXRlX0RvbmU7CisJZnJhbWUtPmdyYWJzdGF0ZSA9IGZyYW1lX3N0YXRlX2RvbmU7CiAJZnJhbWUtPnNjYW5sZW5ndGggKz0gc2Nhbl9sZW5ndGg7CiAJKytudW1fcGFzczsKLQogfQogCiAvKgpAQCAtNDg3LDggKzQ3OSw5IEBACiBpbnQgdXNidmlzaW9uX2RlY29tcHJlc3NfYWxsb2Moc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbikKIHsKIAlpbnQgSUZCX3NpemUgPSBNQVhfRlJBTUVfV0lEVEggKiBNQVhfRlJBTUVfSEVJR0hUICogMyAvIDI7Ci0JdXNidmlzaW9uLT5JbnRyYUZyYW1lQnVmZmVyID0gdm1hbGxvY18zMihJRkJfc2l6ZSk7Ci0JaWYgKHVzYnZpc2lvbi0+SW50cmFGcmFtZUJ1ZmZlciA9PSBOVUxMKSB7CisKKwl1c2J2aXNpb24tPmludHJhX2ZyYW1lX2J1ZmZlciA9IHZtYWxsb2NfMzIoSUZCX3NpemUpOworCWlmICh1c2J2aXNpb24tPmludHJhX2ZyYW1lX2J1ZmZlciA9PSBOVUxMKSB7CiAJCWRldl9lcnIoJnVzYnZpc2lvbi0+ZGV2LT5kZXYsCiAJCQkiJXM6IHVuYWJsZSB0byBhbGxvY2F0ZSAlZCBmb3IgY29tcHIuIGZyYW1lIGJ1ZmZlclxuIiwKIAkJCQlfX2Z1bmNfXywgSUZCX3NpemUpOwpAQCAtNTA0LDggKzQ5Nyw4IEBACiAgKi8KIHZvaWQgdXNidmlzaW9uX2RlY29tcHJlc3NfZnJlZShzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uKQogewotCXZmcmVlKHVzYnZpc2lvbi0+SW50cmFGcmFtZUJ1ZmZlcik7Ci0JdXNidmlzaW9uLT5JbnRyYUZyYW1lQnVmZmVyID0gTlVMTDsKKwl2ZnJlZSh1c2J2aXNpb24tPmludHJhX2ZyYW1lX2J1ZmZlcik7CisJdXNidmlzaW9uLT5pbnRyYV9mcmFtZV9idWZmZXIgPSBOVUxMOwogCiB9CiAKQEAgLTUxNywxMTcgKzUxMCwxMTEgQEAKICAqCiAgKiBMb2NhdGUgb25lIG9mIHN1cHBvcnRlZCBoZWFkZXIgbWFya2VycyBpbiB0aGUgc2NyYXRjaCBidWZmZXIuCiAgKi8KLXN0YXRpYyBlbnVtIFBhcnNlU3RhdGUgdXNidmlzaW9uX2ZpbmRfaGVhZGVyKHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24pCitzdGF0aWMgZW51bSBwYXJzZV9zdGF0ZSB1c2J2aXNpb25fZmluZF9oZWFkZXIoc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbikKIHsKIAlzdHJ1Y3QgdXNidmlzaW9uX2ZyYW1lICpmcmFtZTsKLQlpbnQgZm91bmRIZWFkZXIgPSAwOworCWludCBmb3VuZF9oZWFkZXIgPSAwOwogCi0JZnJhbWUgPSB1c2J2aXNpb24tPmN1ckZyYW1lOworCWZyYW1lID0gdXNidmlzaW9uLT5jdXJfZnJhbWU7CiAKLQl3aGlsZSAoc2NyYXRjaF9nZXRfaGVhZGVyKHVzYnZpc2lvbiwgJmZyYW1lLT5pc29jSGVhZGVyKSA9PSBVU0JWSVNJT05fSEVBREVSX0xFTkdUSCkgewotCQkvLyBmb3VuZCBoZWFkZXIgaW4gc2NyYXRjaAorCXdoaWxlIChzY3JhdGNoX2dldF9oZWFkZXIodXNidmlzaW9uLCAmZnJhbWUtPmlzb2NfaGVhZGVyKSA9PSBVU0JWSVNJT05fSEVBREVSX0xFTkdUSCkgeworCQkvKiBmb3VuZCBoZWFkZXIgaW4gc2NyYXRjaCAqLwogCQlQREVCVUcoREJHX0hFQURFUiwgImZvdW5kIGhlYWRlcjogMHglMDJ4JTAyeCAlZCAlZCAlZCAlZCAlI3ggMHglMDJ4ICV1ICV1IiwKLQkJCQlmcmFtZS0+aXNvY0hlYWRlci5tYWdpY18yLAotCQkJCWZyYW1lLT5pc29jSGVhZGVyLm1hZ2ljXzEsCi0JCQkJZnJhbWUtPmlzb2NIZWFkZXIuaGVhZGVyTGVuZ3RoLAotCQkJCWZyYW1lLT5pc29jSGVhZGVyLmZyYW1lTnVtLAotCQkJCWZyYW1lLT5pc29jSGVhZGVyLmZyYW1lUGhhc2UsCi0JCQkJZnJhbWUtPmlzb2NIZWFkZXIuZnJhbWVMYXRlbmN5LAotCQkJCWZyYW1lLT5pc29jSGVhZGVyLmRhdGFGb3JtYXQsCi0JCQkJZnJhbWUtPmlzb2NIZWFkZXIuZm9ybWF0UGFyYW0sCi0JCQkJZnJhbWUtPmlzb2NIZWFkZXIuZnJhbWVXaWR0aCwKLQkJCQlmcmFtZS0+aXNvY0hlYWRlci5mcmFtZUhlaWdodCk7CisJCQkJZnJhbWUtPmlzb2NfaGVhZGVyLm1hZ2ljXzIsCisJCQkJZnJhbWUtPmlzb2NfaGVhZGVyLm1hZ2ljXzEsCisJCQkJZnJhbWUtPmlzb2NfaGVhZGVyLmhlYWRlcl9sZW5ndGgsCisJCQkJZnJhbWUtPmlzb2NfaGVhZGVyLmZyYW1lX251bSwKKwkJCQlmcmFtZS0+aXNvY19oZWFkZXIuZnJhbWVfcGhhc2UsCisJCQkJZnJhbWUtPmlzb2NfaGVhZGVyLmZyYW1lX2xhdGVuY3ksCisJCQkJZnJhbWUtPmlzb2NfaGVhZGVyLmRhdGFfZm9ybWF0LAorCQkJCWZyYW1lLT5pc29jX2hlYWRlci5mb3JtYXRfcGFyYW0sCisJCQkJZnJhbWUtPmlzb2NfaGVhZGVyLmZyYW1lX3dpZHRoLAorCQkJCWZyYW1lLT5pc29jX2hlYWRlci5mcmFtZV9oZWlnaHQpOwogCi0JCWlmICh1c2J2aXNpb24tPnJlcXVlc3RJbnRyYSkgewotCQkJaWYgKGZyYW1lLT5pc29jSGVhZGVyLmZvcm1hdFBhcmFtICYgMHg4MCkgewotCQkJCWZvdW5kSGVhZGVyID0gMTsKLQkJCQl1c2J2aXNpb24tPmxhc3RJc29jRnJhbWVOdW0gPSAtMTsgLy8gZG8gbm90IGNoZWNrIGZvciBsb3N0IGZyYW1lcyB0aGlzIHRpbWUKKwkJaWYgKHVzYnZpc2lvbi0+cmVxdWVzdF9pbnRyYSkgeworCQkJaWYgKGZyYW1lLT5pc29jX2hlYWRlci5mb3JtYXRfcGFyYW0gJiAweDgwKSB7CisJCQkJZm91bmRfaGVhZGVyID0gMTsKKwkJCQl1c2J2aXNpb24tPmxhc3RfaXNvY19mcmFtZV9udW0gPSAtMTsgLyogZG8gbm90IGNoZWNrIGZvciBsb3N0IGZyYW1lcyB0aGlzIHRpbWUgKi8KIAkJCQl1c2J2aXNpb25fdW5yZXF1ZXN0X2ludHJhKHVzYnZpc2lvbik7CiAJCQkJYnJlYWs7CiAJCQl9Ci0JCX0KLQkJZWxzZSB7Ci0JCQlmb3VuZEhlYWRlciA9IDE7CisJCX0gZWxzZSB7CisJCQlmb3VuZF9oZWFkZXIgPSAxOwogCQkJYnJlYWs7CiAJCX0KIAl9CiAKLQlpZiAoZm91bmRIZWFkZXIpIHsKLQkJZnJhbWUtPmZybXdpZHRoID0gZnJhbWUtPmlzb2NIZWFkZXIuZnJhbWVXaWR0aCAqIHVzYnZpc2lvbi0+c3RyZXRjaF93aWR0aDsKLQkJZnJhbWUtPmZybWhlaWdodCA9IGZyYW1lLT5pc29jSGVhZGVyLmZyYW1lSGVpZ2h0ICogdXNidmlzaW9uLT5zdHJldGNoX2hlaWdodDsKLQkJZnJhbWUtPnY0bDJfbGluZXNpemUgPSAoZnJhbWUtPmZybXdpZHRoICogZnJhbWUtPnY0bDJfZm9ybWF0LmRlcHRoKT4+IDM7Ci0JfQotCWVsc2UgeyAvLyBubyBoZWFkZXIgZm91bmQKKwlpZiAoZm91bmRfaGVhZGVyKSB7CisJCWZyYW1lLT5mcm13aWR0aCA9IGZyYW1lLT5pc29jX2hlYWRlci5mcmFtZV93aWR0aCAqIHVzYnZpc2lvbi0+c3RyZXRjaF93aWR0aDsKKwkJZnJhbWUtPmZybWhlaWdodCA9IGZyYW1lLT5pc29jX2hlYWRlci5mcmFtZV9oZWlnaHQgKiB1c2J2aXNpb24tPnN0cmV0Y2hfaGVpZ2h0OworCQlmcmFtZS0+djRsMl9saW5lc2l6ZSA9IChmcmFtZS0+ZnJtd2lkdGggKiBmcmFtZS0+djRsMl9mb3JtYXQuZGVwdGgpID4+IDM7CisJfSBlbHNlIHsgLyogbm8gaGVhZGVyIGZvdW5kICovCiAJCVBERUJVRyhEQkdfSEVBREVSLCAic2tpcHBpbmcgc2NyYXRjaCBkYXRhLCBubyBoZWFkZXIiKTsKIAkJc2NyYXRjaF9yZXNldCh1c2J2aXNpb24pOwotCQlyZXR1cm4gUGFyc2VTdGF0ZV9FbmRQYXJzZTsKKwkJcmV0dXJuIHBhcnNlX3N0YXRlX2VuZF9wYXJzZTsKIAl9CiAKLQkvLyBmb3VuZCBoZWFkZXIKLQlpZiAoZnJhbWUtPmlzb2NIZWFkZXIuZGF0YUZvcm1hdD09SVNPQ19NT0RFX0NPTVBSRVNTKSB7Ci0JCS8vY2hlY2sgaXNvY0hlYWRlci5mcmFtZU51bSBmb3IgbG9zdCBmcmFtZXMKLQkJaWYgKHVzYnZpc2lvbi0+bGFzdElzb2NGcmFtZU51bSA+PSAwKSB7Ci0JCQlpZiAoKCh1c2J2aXNpb24tPmxhc3RJc29jRnJhbWVOdW0gKyAxKSAlIDMyKSAhPSBmcmFtZS0+aXNvY0hlYWRlci5mcmFtZU51bSkgewotCQkJCS8vIHVuZXhwZWN0ZWQgZnJhbWUgZHJvcDogbmVlZCB0byByZXF1ZXN0IG5ldyBpbnRyYSBmcmFtZQotCQkJCVBERUJVRyhEQkdfSEVBREVSLCAiTG9zdCBmcmFtZSBiZWZvcmUgJWQgb24gVVNCIiwgZnJhbWUtPmlzb2NIZWFkZXIuZnJhbWVOdW0pOworCS8qIGZvdW5kIGhlYWRlciAqLworCWlmIChmcmFtZS0+aXNvY19oZWFkZXIuZGF0YV9mb3JtYXQgPT0gSVNPQ19NT0RFX0NPTVBSRVNTKSB7CisJCS8qIGNoZWNrIGlzb2NfaGVhZGVyLmZyYW1lX251bSBmb3IgbG9zdCBmcmFtZXMgKi8KKwkJaWYgKHVzYnZpc2lvbi0+bGFzdF9pc29jX2ZyYW1lX251bSA+PSAwKSB7CisJCQlpZiAoKCh1c2J2aXNpb24tPmxhc3RfaXNvY19mcmFtZV9udW0gKyAxKSAlIDMyKSAhPSBmcmFtZS0+aXNvY19oZWFkZXIuZnJhbWVfbnVtKSB7CisJCQkJLyogdW5leHBlY3RlZCBmcmFtZSBkcm9wOiBuZWVkIHRvIHJlcXVlc3QgbmV3IGludHJhIGZyYW1lICovCisJCQkJUERFQlVHKERCR19IRUFERVIsICJMb3N0IGZyYW1lIGJlZm9yZSAlZCBvbiBVU0IiLCBmcmFtZS0+aXNvY19oZWFkZXIuZnJhbWVfbnVtKTsKIAkJCQl1c2J2aXNpb25fcmVxdWVzdF9pbnRyYSh1c2J2aXNpb24pOwotCQkJCXJldHVybiBQYXJzZVN0YXRlX05leHRGcmFtZTsKKwkJCQlyZXR1cm4gcGFyc2Vfc3RhdGVfbmV4dF9mcmFtZTsKIAkJCX0KIAkJfQotCQl1c2J2aXNpb24tPmxhc3RJc29jRnJhbWVOdW0gPSBmcmFtZS0+aXNvY0hlYWRlci5mcmFtZU51bTsKKwkJdXNidmlzaW9uLT5sYXN0X2lzb2NfZnJhbWVfbnVtID0gZnJhbWUtPmlzb2NfaGVhZGVyLmZyYW1lX251bTsKIAl9CiAJdXNidmlzaW9uLT5oZWFkZXJfY291bnQrKzsKLQlmcmFtZS0+c2NhbnN0YXRlID0gU2NhblN0YXRlX0xpbmVzOworCWZyYW1lLT5zY2Fuc3RhdGUgPSBzY2FuX3N0YXRlX2xpbmVzOwogCWZyYW1lLT5jdXJsaW5lID0gMDsKIAogCWlmIChmb3JjZV90ZXN0cGF0dGVybikgewogCQl1c2J2aXNpb25fdGVzdHBhdHRlcm4odXNidmlzaW9uLCAxLCAxKTsKLQkJcmV0dXJuIFBhcnNlU3RhdGVfTmV4dEZyYW1lOworCQlyZXR1cm4gcGFyc2Vfc3RhdGVfbmV4dF9mcmFtZTsKIAl9Ci0JcmV0dXJuIFBhcnNlU3RhdGVfQ29udGludWU7CisJcmV0dXJuIHBhcnNlX3N0YXRlX2NvbnRpbnVlOwogfQogCi1zdGF0aWMgZW51bSBQYXJzZVN0YXRlIHVzYnZpc2lvbl9wYXJzZV9saW5lc180MjIoc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiwKK3N0YXRpYyBlbnVtIHBhcnNlX3N0YXRlIHVzYnZpc2lvbl9wYXJzZV9saW5lc180MjIoc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiwKIAkJCQkJICAgbG9uZyAqcGNvcHlsZW4pCiB7CiAJdm9sYXRpbGUgc3RydWN0IHVzYnZpc2lvbl9mcmFtZSAqZnJhbWU7CiAJdW5zaWduZWQgY2hhciAqZjsKIAlpbnQgbGVuOwogCWludCBpOwotCXVuc2lnbmVkIGNoYXIgeXV5dls0XT17MTgwLCAxMjgsIDEwLCAxMjh9OyAvLyBZVVYgY29tcG9uZW50cwotCXVuc2lnbmVkIGNoYXIgcnYsIGd2LCBidjsJLy8gUkdCIGNvbXBvbmVudHMKKwl1bnNpZ25lZCBjaGFyIHl1eXZbNF0gPSB7IDE4MCwgMTI4LCAxMCwgMTI4IH07IC8qIFlVViBjb21wb25lbnRzICovCisJdW5zaWduZWQgY2hhciBydiwgZ3YsIGJ2OwkvKiBSR0IgY29tcG9uZW50cyAqLwogCWludCBjbGlwbWFza19pbmRleCwgYnl0ZXNfcGVyX3BpeGVsOwogCWludCBzdHJldGNoX2J5dGVzLCBjbGlwbWFza19hZGQ7CiAKLQlmcmFtZSAgPSB1c2J2aXNpb24tPmN1ckZyYW1lOworCWZyYW1lICA9IHVzYnZpc2lvbi0+Y3VyX2ZyYW1lOwogCWYgPSBmcmFtZS0+ZGF0YSArIChmcmFtZS0+djRsMl9saW5lc2l6ZSAqIGZyYW1lLT5jdXJsaW5lKTsKIAogCS8qIE1ha2Ugc3VyZSB0aGVyZSdzIGVub3VnaCBkYXRhIGZvciB0aGUgZW50aXJlIGxpbmUgKi8KLQlsZW4gPSAoZnJhbWUtPmlzb2NIZWFkZXIuZnJhbWVXaWR0aCAqIDIpKzU7CisJbGVuID0gKGZyYW1lLT5pc29jX2hlYWRlci5mcmFtZV93aWR0aCAqIDIpICsgNTsKIAlpZiAoc2NyYXRjaF9sZW4odXNidmlzaW9uKSA8IGxlbikgewogCQlQREVCVUcoREJHX1BBUlNFLCAib3V0IG9mIGRhdGEgaW4gbGluZSAlZCwgbmVlZCAldS5cbiIsIGZyYW1lLT5jdXJsaW5lLCBsZW4pOwotCQlyZXR1cm4gUGFyc2VTdGF0ZV9PdXQ7CisJCXJldHVybiBwYXJzZV9zdGF0ZV9vdXQ7CiAJfQogCi0JaWYgKChmcmFtZS0+Y3VybGluZSArIDEpID49IGZyYW1lLT5mcm1oZWlnaHQpIHsKLQkJcmV0dXJuIFBhcnNlU3RhdGVfTmV4dEZyYW1lOwotCX0KKwlpZiAoKGZyYW1lLT5jdXJsaW5lICsgMSkgPj0gZnJhbWUtPmZybWhlaWdodCkKKwkJcmV0dXJuIHBhcnNlX3N0YXRlX25leHRfZnJhbWU7CiAKIAlieXRlc19wZXJfcGl4ZWwgPSBmcmFtZS0+djRsMl9mb3JtYXQuYnl0ZXNfcGVyX3BpeGVsOwogCXN0cmV0Y2hfYnl0ZXMgPSAodXNidmlzaW9uLT5zdHJldGNoX3dpZHRoIC0gMSkgKiBieXRlc19wZXJfcGl4ZWw7CiAJY2xpcG1hc2tfaW5kZXggPSBmcmFtZS0+Y3VybGluZSAqIE1BWF9GUkFNRV9XSURUSDsKIAljbGlwbWFza19hZGQgPSB1c2J2aXNpb24tPnN0cmV0Y2hfd2lkdGg7CiAKLQlmb3IgKGkgPSAwOyBpIDwgZnJhbWUtPmZybXdpZHRoOyBpKz0oMiAqIHVzYnZpc2lvbi0+c3RyZXRjaF93aWR0aCkpIHsKLQorCWZvciAoaSA9IDA7IGkgPCBmcmFtZS0+ZnJtd2lkdGg7IGkgKz0gKDIgKiB1c2J2aXNpb24tPnN0cmV0Y2hfd2lkdGgpKSB7CiAJCXNjcmF0Y2hfZ2V0KHVzYnZpc2lvbiwgJnl1eXZbMF0sIDQpOwogCiAJCWlmIChmcmFtZS0+djRsMl9mb3JtYXQuZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9ZVVlWKSB7Ci0JCQkqZisrID0geXV5dlswXTsgLy8gWQotCQkJKmYrKyA9IHl1eXZbM107IC8vIFUKLQkJfQotCQllbHNlIHsKLQorCQkJKmYrKyA9IHl1eXZbMF07IC8qIFkgKi8KKwkJCSpmKysgPSB5dXl2WzNdOyAvKiBVICovCisJCX0gZWxzZSB7CiAJCQlZVVZfVE9fUkdCX0JZX1RIRV9CT09LKHl1eXZbMF0sIHl1eXZbMV0sIHl1eXZbM10sIHJ2LCBndiwgYnYpOwogCQkJc3dpdGNoIChmcmFtZS0+djRsMl9mb3JtYXQuZm9ybWF0KSB7CiAJCQljYXNlIFY0TDJfUElYX0ZNVF9SR0I1NjU6CkBAIC02NTksMTEgKzY0Niw5IEBACiAJCWYgKz0gc3RyZXRjaF9ieXRlczsKIAogCQlpZiAoZnJhbWUtPnY0bDJfZm9ybWF0LmZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfWVVZVikgewotCQkJKmYrKyA9IHl1eXZbMl07IC8vIFkKLQkJCSpmKysgPSB5dXl2WzFdOyAvLyBWCi0JCX0KLQkJZWxzZSB7Ci0KKwkJCSpmKysgPSB5dXl2WzJdOyAvKiBZICovCisJCQkqZisrID0geXV5dlsxXTsgLyogViAqLworCQl9IGVsc2UgewogCQkJWVVWX1RPX1JHQl9CWV9USEVfQk9PSyh5dXl2WzJdLCB5dXl2WzFdLCB5dXl2WzNdLCBydiwgZ3YsIGJ2KTsKIAkJCXN3aXRjaCAoZnJhbWUtPnY0bDJfZm9ybWF0LmZvcm1hdCkgewogCQkJY2FzZSBWNEwyX1BJWF9GTVRfUkdCNTY1OgpAQCAtNjk4LDEwMCArNjgzLDk0IEBACiAJZnJhbWUtPmN1cmxpbmUgKz0gdXNidmlzaW9uLT5zdHJldGNoX2hlaWdodDsKIAkqcGNvcHlsZW4gKz0gZnJhbWUtPnY0bDJfbGluZXNpemUgKiB1c2J2aXNpb24tPnN0cmV0Y2hfaGVpZ2h0OwogCi0JaWYgKGZyYW1lLT5jdXJsaW5lID49IGZyYW1lLT5mcm1oZWlnaHQpIHsKLQkJcmV0dXJuIFBhcnNlU3RhdGVfTmV4dEZyYW1lOwotCX0KLQllbHNlIHsKLQkJcmV0dXJuIFBhcnNlU3RhdGVfQ29udGludWU7Ci0JfQorCWlmIChmcmFtZS0+Y3VybGluZSA+PSBmcmFtZS0+ZnJtaGVpZ2h0KQorCQlyZXR1cm4gcGFyc2Vfc3RhdGVfbmV4dF9mcmFtZTsKKwlyZXR1cm4gcGFyc2Vfc3RhdGVfY29udGludWU7CiB9CiAKIC8qIFRoZSBkZWNvbXByZXNzaW9uIHJvdXRpbmUgICovCi1zdGF0aWMgaW50IHVzYnZpc2lvbl9kZWNvbXByZXNzKHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24sdW5zaWduZWQgY2hhciAqQ29tcHJlc3NlZCwKLQkJCQkJCQkJdW5zaWduZWQgY2hhciAqRGVjb21wcmVzc2VkLCBpbnQgKlN0YXJ0UG9zLAotCQkJCQkJCQlpbnQgKkJsb2NrVHlwZVN0YXJ0UG9zLCBpbnQgTGVuKQorc3RhdGljIGludCB1c2J2aXNpb25fZGVjb21wcmVzcyhzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uLCB1bnNpZ25lZCBjaGFyICpjb21wcmVzc2VkLAorCQkJCQkJCQl1bnNpZ25lZCBjaGFyICpkZWNvbXByZXNzZWQsIGludCAqc3RhcnRfcG9zLAorCQkJCQkJCQlpbnQgKmJsb2NrX3R5cGVzdGFydF9wb3MsIGludCBsZW4pCiB7Ci0JaW50IFJlc3RQaXhlbCwgSWR4LCBNYXhQb3MsIFBvcywgRXh0cmFQb3MsIEJsb2NrTGVuLCBCbG9ja1R5cGVQb3MsIEJsb2NrVHlwZUxlbjsKLQl1bnNpZ25lZCBjaGFyIEJsb2NrQnl0ZSwgQmxvY2tDb2RlLCBCbG9ja1R5cGUsIEJsb2NrVHlwZUJ5dGUsIEludGVncmF0b3I7CisJaW50IHJlc3RfcGl4ZWwsIGlkeCwgbWF4X3BvcywgcG9zLCBleHRyYV9wb3MsIGJsb2NrX2xlbiwgYmxvY2tfdHlwZV9wb3MsIGJsb2NrX3R5cGVfbGVuOworCXVuc2lnbmVkIGNoYXIgYmxvY2tfYnl0ZSwgYmxvY2tfY29kZSwgYmxvY2tfdHlwZSwgYmxvY2tfdHlwZV9ieXRlLCBpbnRlZ3JhdG9yOwogCi0JSW50ZWdyYXRvciA9IDA7Ci0JUG9zID0gKlN0YXJ0UG9zOwotCUJsb2NrVHlwZVBvcyA9ICpCbG9ja1R5cGVTdGFydFBvczsKLQlNYXhQb3MgPSAzOTY7IC8vUG9zICsgTGVuOwotCUV4dHJhUG9zID0gUG9zOwotCUJsb2NrTGVuID0gMDsKLQlCbG9ja0J5dGUgPSAwOwotCUJsb2NrQ29kZSA9IDA7Ci0JQmxvY2tUeXBlID0gMDsKLQlCbG9ja1R5cGVCeXRlID0gMDsKLQlCbG9ja1R5cGVMZW4gPSAwOwotCVJlc3RQaXhlbCA9IExlbjsKKwlpbnRlZ3JhdG9yID0gMDsKKwlwb3MgPSAqc3RhcnRfcG9zOworCWJsb2NrX3R5cGVfcG9zID0gKmJsb2NrX3R5cGVzdGFydF9wb3M7CisJbWF4X3BvcyA9IDM5NjsgLyogcG9zICsgbGVuOyAqLworCWV4dHJhX3BvcyA9IHBvczsKKwlibG9ja19sZW4gPSAwOworCWJsb2NrX2J5dGUgPSAwOworCWJsb2NrX2NvZGUgPSAwOworCWJsb2NrX3R5cGUgPSAwOworCWJsb2NrX3R5cGVfYnl0ZSA9IDA7CisJYmxvY2tfdHlwZV9sZW4gPSAwOworCXJlc3RfcGl4ZWwgPSBsZW47CiAKLQlmb3IgKElkeCA9IDA7IElkeCA8IExlbjsgSWR4KyspIHsKLQotCQlpZiAoQmxvY2tMZW4gPT0gMCkgewotCQkJaWYgKEJsb2NrVHlwZUxlbj09MCkgewotCQkJCUJsb2NrVHlwZUJ5dGUgPSBDb21wcmVzc2VkW0Jsb2NrVHlwZVBvc107Ci0JCQkJQmxvY2tUeXBlUG9zKys7Ci0JCQkJQmxvY2tUeXBlTGVuID0gNDsKKwlmb3IgKGlkeCA9IDA7IGlkeCA8IGxlbjsgaWR4KyspIHsKKwkJaWYgKGJsb2NrX2xlbiA9PSAwKSB7CisJCQlpZiAoYmxvY2tfdHlwZV9sZW4gPT0gMCkgeworCQkJCWJsb2NrX3R5cGVfYnl0ZSA9IGNvbXByZXNzZWRbYmxvY2tfdHlwZV9wb3NdOworCQkJCWJsb2NrX3R5cGVfcG9zKys7CisJCQkJYmxvY2tfdHlwZV9sZW4gPSA0OwogCQkJfQotCQkJQmxvY2tUeXBlID0gKEJsb2NrVHlwZUJ5dGUgJiAweEMwKSA+PiA2OworCQkJYmxvY2tfdHlwZSA9IChibG9ja190eXBlX2J5dGUgJiAweEMwKSA+PiA2OwogCi0JCQkvL3N0YXRpc3RpYzoKLQkJCXVzYnZpc2lvbi0+Q29tcHJCbG9ja1R5cGVzW0Jsb2NrVHlwZV0rKzsKKwkJCS8qIHN0YXRpc3RpYzogKi8KKwkJCXVzYnZpc2lvbi0+Y29tcHJfYmxvY2tfdHlwZXNbYmxvY2tfdHlwZV0rKzsKIAotCQkJUG9zID0gRXh0cmFQb3M7Ci0JCQlpZiAoQmxvY2tUeXBlID09IDApIHsKLQkJCQlpZihSZXN0UGl4ZWwgPj0gMjQpIHsKLQkJCQkJSWR4ICs9IDIzOwotCQkJCQlSZXN0UGl4ZWwgLT0gMjQ7Ci0JCQkJCUludGVncmF0b3IgPSBEZWNvbXByZXNzZWRbSWR4XTsKKwkJCXBvcyA9IGV4dHJhX3BvczsKKwkJCWlmIChibG9ja190eXBlID09IDApIHsKKwkJCQlpZiAocmVzdF9waXhlbCA+PSAyNCkgeworCQkJCQlpZHggKz0gMjM7CisJCQkJCXJlc3RfcGl4ZWwgLT0gMjQ7CisJCQkJCWludGVncmF0b3IgPSBkZWNvbXByZXNzZWRbaWR4XTsKIAkJCQl9IGVsc2UgewotCQkJCQlJZHggKz0gUmVzdFBpeGVsIC0gMTsKLQkJCQkJUmVzdFBpeGVsID0gMDsKKwkJCQkJaWR4ICs9IHJlc3RfcGl4ZWwgLSAxOworCQkJCQlyZXN0X3BpeGVsID0gMDsKIAkJCQl9CiAJCQl9IGVsc2UgewotCQkJCUJsb2NrQ29kZSA9IENvbXByZXNzZWRbUG9zXTsKLQkJCQlQb3MrKzsKLQkJCQlpZiAoUmVzdFBpeGVsID49IDI0KSB7Ci0JCQkJCUJsb2NrTGVuICA9IDI0OwotCQkJCX0gZWxzZSB7Ci0JCQkJCUJsb2NrTGVuID0gUmVzdFBpeGVsOwotCQkJCX0KLQkJCQlSZXN0UGl4ZWwgLT0gQmxvY2tMZW47Ci0JCQkJRXh0cmFQb3MgPSBQb3MgKyAoQmxvY2tMZW4gLyA0KTsKKwkJCQlibG9ja19jb2RlID0gY29tcHJlc3NlZFtwb3NdOworCQkJCXBvcysrOworCQkJCWlmIChyZXN0X3BpeGVsID49IDI0KQorCQkJCQlibG9ja19sZW4gID0gMjQ7CisJCQkJZWxzZQorCQkJCQlibG9ja19sZW4gPSByZXN0X3BpeGVsOworCQkJCXJlc3RfcGl4ZWwgLT0gYmxvY2tfbGVuOworCQkJCWV4dHJhX3BvcyA9IHBvcyArIChibG9ja19sZW4gLyA0KTsKIAkJCX0KLQkJCUJsb2NrVHlwZUJ5dGUgPDw9IDI7Ci0JCQlCbG9ja1R5cGVMZW4gLT0gMTsKKwkJCWJsb2NrX3R5cGVfYnl0ZSA8PD0gMjsKKwkJCWJsb2NrX3R5cGVfbGVuIC09IDE7CiAJCX0KLQkJaWYgKEJsb2NrTGVuID4gMCkgewotCQkJaWYgKChCbG9ja0xlbiU0KSA9PSAwKSB7Ci0JCQkJQmxvY2tCeXRlID0gQ29tcHJlc3NlZFtQb3NdOwotCQkJCVBvcysrOworCQlpZiAoYmxvY2tfbGVuID4gMCkgeworCQkJaWYgKChibG9ja19sZW4gJSA0KSA9PSAwKSB7CisJCQkJYmxvY2tfYnl0ZSA9IGNvbXByZXNzZWRbcG9zXTsKKwkJCQlwb3MrKzsKIAkJCX0KLQkJCWlmIChCbG9ja1R5cGUgPT0gMSkgeyAvL2ludGVyIEJsb2NrCi0JCQkJSW50ZWdyYXRvciA9IERlY29tcHJlc3NlZFtJZHhdOworCQkJaWYgKGJsb2NrX3R5cGUgPT0gMSkgLyogaW50ZXIgQmxvY2sgKi8KKwkJCQlpbnRlZ3JhdG9yID0gZGVjb21wcmVzc2VkW2lkeF07CisJCQlzd2l0Y2ggKGJsb2NrX2J5dGUgJiAweEMwKSB7CisJCQljYXNlIDB4MDMgPDwgNjoKKwkJCQlpbnRlZ3JhdG9yICs9IGNvbXByZXNzZWRbZXh0cmFfcG9zXTsKKwkJCQlleHRyYV9wb3MrKzsKKwkJCQlicmVhazsKKwkJCWNhc2UgMHgwMiA8PCA2OgorCQkJCWludGVncmF0b3IgKz0gYmxvY2tfY29kZTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMHgwMDoKKwkJCQlpbnRlZ3JhdG9yIC09IGJsb2NrX2NvZGU7CisJCQkJYnJlYWs7CiAJCQl9Ci0JCQlzd2l0Y2ggKEJsb2NrQnl0ZSAmIDB4QzApIHsKLQkJCQljYXNlIDB4MDM8PDY6Ci0JCQkJCUludGVncmF0b3IgKz0gQ29tcHJlc3NlZFtFeHRyYVBvc107Ci0JCQkJCUV4dHJhUG9zKys7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgMHgwMjw8NjoKLQkJCQkJSW50ZWdyYXRvciArPSBCbG9ja0NvZGU7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgMHgwMDoKLQkJCQkJSW50ZWdyYXRvciAtPSBCbG9ja0NvZGU7Ci0JCQkJCWJyZWFrOwotCQkJfQotCQkJRGVjb21wcmVzc2VkW0lkeF0gPSBJbnRlZ3JhdG9yOwotCQkJQmxvY2tCeXRlIDw8PSAyOwotCQkJQmxvY2tMZW4gLT0gMTsKKwkJCWRlY29tcHJlc3NlZFtpZHhdID0gaW50ZWdyYXRvcjsKKwkJCWJsb2NrX2J5dGUgPDw9IDI7CisJCQlibG9ja19sZW4gLT0gMTsKIAkJfQogCX0KLQkqU3RhcnRQb3MgPSBFeHRyYVBvczsKLQkqQmxvY2tUeXBlU3RhcnRQb3MgPSBCbG9ja1R5cGVQb3M7Ci0JcmV0dXJuIElkeDsKKwkqc3RhcnRfcG9zID0gZXh0cmFfcG9zOworCSpibG9ja190eXBlc3RhcnRfcG9zID0gYmxvY2tfdHlwZV9wb3M7CisJcmV0dXJuIGlkeDsKIH0KIAogCkBAIC04MDMsNyArNzgyLDcgQEAKICAqIG51bWJlciBvZiBieXRlcyAoUkdCKSB0byB0aGUgKnBjb3B5bGVuLgogICoKICAqLwotc3RhdGljIGVudW0gUGFyc2VTdGF0ZSB1c2J2aXNpb25fcGFyc2VfY29tcHJlc3Moc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiwKK3N0YXRpYyBlbnVtIHBhcnNlX3N0YXRlIHVzYnZpc2lvbl9wYXJzZV9jb21wcmVzcyhzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uLAogCQkJCQkgICBsb25nICpwY29weWxlbikKIHsKICNkZWZpbmUgVVNCVklTSU9OX1NUUklQX01BR0lDCQkweDVBCkBAIC04MTEsMTkxICs3OTAsMTY1IEBACiAjZGVmaW5lIFVTQlZJU0lPTl9TVFJJUF9IRUFERVJfTEVOCTMKIAogCXN0cnVjdCB1c2J2aXNpb25fZnJhbWUgKmZyYW1lOwotCXVuc2lnbmVkIGNoYXIgKmYsKnUgPSBOVUxMICwqdiA9IE5VTEw7Ci0JdW5zaWduZWQgY2hhciBTdHJpcERhdGFbVVNCVklTSU9OX1NUUklQX0xFTl9NQVhdOwotCXVuc2lnbmVkIGNoYXIgU3RyaXBIZWFkZXJbVVNCVklTSU9OX1NUUklQX0hFQURFUl9MRU5dOwotCWludCBJZHgsIElkeEVuZCwgU3RyaXBMZW4sIFN0cmlwUHRyLCBTdGFydEJsb2NrUG9zLCBCbG9ja1BvcywgQmxvY2tUeXBlUG9zOworCXVuc2lnbmVkIGNoYXIgKmYsICp1ID0gTlVMTCwgKnYgPSBOVUxMOworCXVuc2lnbmVkIGNoYXIgc3RyaXBfZGF0YVtVU0JWSVNJT05fU1RSSVBfTEVOX01BWF07CisJdW5zaWduZWQgY2hhciBzdHJpcF9oZWFkZXJbVVNCVklTSU9OX1NUUklQX0hFQURFUl9MRU5dOworCWludCBpZHgsIGlkeF9lbmQsIHN0cmlwX2xlbiwgc3RyaXBfcHRyLCBzdGFydGJsb2NrX3BvcywgYmxvY2tfcG9zLCBibG9ja190eXBlX3BvczsKIAlpbnQgY2xpcG1hc2tfaW5kZXgsIGJ5dGVzX3Blcl9waXhlbCwgcmM7Ci0JaW50IGltYWdlU2l6ZTsKKwlpbnQgaW1hZ2Vfc2l6ZTsKIAl1bnNpZ25lZCBjaGFyIHJ2LCBndiwgYnY7CiAJc3RhdGljIHVuc2lnbmVkIGNoYXIgKlksICpVLCAqVjsKIAotCWZyYW1lICA9IHVzYnZpc2lvbi0+Y3VyRnJhbWU7Ci0JaW1hZ2VTaXplID0gZnJhbWUtPmZybXdpZHRoICogZnJhbWUtPmZybWhlaWdodDsKLQlpZiAoIChmcmFtZS0+djRsMl9mb3JtYXQuZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9ZVVY0MjJQKSB8fAotCSAgICAgKGZyYW1lLT52NGwyX2Zvcm1hdC5mb3JtYXQgPT0gVjRMMl9QSVhfRk1UX1lWVTQyMCkgKSB7ICAgICAgIC8vIHRoaXMgaXMgYSBwbGFuYXIgZm9ybWF0Ci0JCS8vLi4uIHY0bDJfbGluZXNpemUgbm90IHVzZWQgaGVyZS4KKwlmcmFtZSA9IHVzYnZpc2lvbi0+Y3VyX2ZyYW1lOworCWltYWdlX3NpemUgPSBmcmFtZS0+ZnJtd2lkdGggKiBmcmFtZS0+ZnJtaGVpZ2h0OworCWlmICgoZnJhbWUtPnY0bDJfZm9ybWF0LmZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfWVVWNDIyUCkgfHwKKwkgICAgKGZyYW1lLT52NGwyX2Zvcm1hdC5mb3JtYXQgPT0gVjRMMl9QSVhfRk1UX1lWVTQyMCkpIHsgICAgICAgLyogdGhpcyBpcyBhIHBsYW5hciBmb3JtYXQgKi8KKwkJLyogLi4uIHY0bDJfbGluZXNpemUgbm90IHVzZWQgaGVyZS4gKi8KIAkJZiA9IGZyYW1lLT5kYXRhICsgKGZyYW1lLT53aWR0aCAqIGZyYW1lLT5jdXJsaW5lKTsKIAl9IGVsc2UKIAkJZiA9IGZyYW1lLT5kYXRhICsgKGZyYW1lLT52NGwyX2xpbmVzaXplICogZnJhbWUtPmN1cmxpbmUpOwogCi0JaWYgKGZyYW1lLT52NGwyX2Zvcm1hdC5mb3JtYXQgPT0gVjRMMl9QSVhfRk1UX1lVWVYpeyAvL2luaXRpYWxpc2UgdSBhbmQgdiBwb2ludGVycwotCQkvLyBnZXQgYmFzZSBvZiB1IGFuZCBiIHBsYW5lcyBhZGQgaGFsZm9mZnNldAotCisJaWYgKGZyYW1lLT52NGwyX2Zvcm1hdC5mb3JtYXQgPT0gVjRMMl9QSVhfRk1UX1lVWVYpIHsgLyogaW5pdGlhbGlzZSB1IGFuZCB2IHBvaW50ZXJzICovCisJCS8qIGdldCBiYXNlIG9mIHUgYW5kIGIgcGxhbmVzIGFkZCBoYWxmb2Zmc2V0ICovCiAJCXUgPSBmcmFtZS0+ZGF0YQotCQkJKyBpbWFnZVNpemUKLQkJCSsgKGZyYW1lLT5mcm13aWR0aCA+PjEpICogZnJhbWUtPmN1cmxpbmUgOwotCQl2ID0gdSArIChpbWFnZVNpemUgPj4xICk7Ci0KLQl9IGVsc2UgaWYgKGZyYW1lLT52NGwyX2Zvcm1hdC5mb3JtYXQgPT0gVjRMMl9QSVhfRk1UX1lWVTQyMCl7Ci0KLQkJdiA9IGZyYW1lLT5kYXRhICsgaW1hZ2VTaXplICsgKChmcmFtZS0+Y3VybGluZSogKGZyYW1lLT53aWR0aCkpPj4yKSA7Ci0JCXUgPSB2ICsgKGltYWdlU2l6ZSA+PjIpIDsKKwkJCSsgaW1hZ2Vfc2l6ZQorCQkJKyAoZnJhbWUtPmZybXdpZHRoID4+IDEpICogZnJhbWUtPmN1cmxpbmU7CisJCXYgPSB1ICsgKGltYWdlX3NpemUgPj4gMSk7CisJfSBlbHNlIGlmIChmcmFtZS0+djRsMl9mb3JtYXQuZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9ZVlU0MjApIHsKKwkJdiA9IGZyYW1lLT5kYXRhICsgaW1hZ2Vfc2l6ZSArICgoZnJhbWUtPmN1cmxpbmUgKiAoZnJhbWUtPndpZHRoKSkgPj4gMik7CisJCXUgPSB2ICsgKGltYWdlX3NpemUgPj4gMik7CiAJfQogCi0JaWYgKGZyYW1lLT5jdXJsaW5lID09IDApIHsKKwlpZiAoZnJhbWUtPmN1cmxpbmUgPT0gMCkKIAkJdXNidmlzaW9uX2FkanVzdF9jb21wcmVzc2lvbih1c2J2aXNpb24pOwotCX0KIAotCWlmIChzY3JhdGNoX2xlbih1c2J2aXNpb24pIDwgVVNCVklTSU9OX1NUUklQX0hFQURFUl9MRU4pIHsKLQkJcmV0dXJuIFBhcnNlU3RhdGVfT3V0OwotCX0KKwlpZiAoc2NyYXRjaF9sZW4odXNidmlzaW9uKSA8IFVTQlZJU0lPTl9TVFJJUF9IRUFERVJfTEVOKQorCQlyZXR1cm4gcGFyc2Vfc3RhdGVfb3V0OwogCi0JLy9nZXQgc3RyaXAgaGVhZGVyIHdpdGhvdXQgY2hhbmdpbmcgdGhlIHNjcmF0Y2hfcmVhZF9wdHIKLQlzY3JhdGNoX3NldF9leHRyYV9wdHIodXNidmlzaW9uLCAmU3RyaXBQdHIsIDApOwotCXNjcmF0Y2hfZ2V0X2V4dHJhKHVzYnZpc2lvbiwgJlN0cmlwSGVhZGVyWzBdLCAmU3RyaXBQdHIsCisJLyogZ2V0IHN0cmlwIGhlYWRlciB3aXRob3V0IGNoYW5naW5nIHRoZSBzY3JhdGNoX3JlYWRfcHRyICovCisJc2NyYXRjaF9zZXRfZXh0cmFfcHRyKHVzYnZpc2lvbiwgJnN0cmlwX3B0ciwgMCk7CisJc2NyYXRjaF9nZXRfZXh0cmEodXNidmlzaW9uLCAmc3RyaXBfaGVhZGVyWzBdLCAmc3RyaXBfcHRyLAogCQkJCVVTQlZJU0lPTl9TVFJJUF9IRUFERVJfTEVOKTsKIAotCWlmIChTdHJpcEhlYWRlclswXSAhPSBVU0JWSVNJT05fU1RSSVBfTUFHSUMpIHsKLQkJLy8gd3Jvbmcgc3RyaXAgbWFnaWMKLQkJdXNidmlzaW9uLT5zdHJpcE1hZ2ljRXJyb3JzKys7Ci0JCXJldHVybiBQYXJzZVN0YXRlX05leHRGcmFtZTsKKwlpZiAoc3RyaXBfaGVhZGVyWzBdICE9IFVTQlZJU0lPTl9TVFJJUF9NQUdJQykgeworCQkvKiB3cm9uZyBzdHJpcCBtYWdpYyAqLworCQl1c2J2aXNpb24tPnN0cmlwX21hZ2ljX2Vycm9ycysrOworCQlyZXR1cm4gcGFyc2Vfc3RhdGVfbmV4dF9mcmFtZTsKIAl9CiAKLQlpZiAoZnJhbWUtPmN1cmxpbmUgIT0gKGludClTdHJpcEhlYWRlclsyXSkgewotCQkvL2xpbmUgbnVtYmVyIG1pc3NtYXRjaCBlcnJvcgotCQl1c2J2aXNpb24tPnN0cmlwTGluZU51bWJlckVycm9ycysrOworCWlmIChmcmFtZS0+Y3VybGluZSAhPSAoaW50KXN0cmlwX2hlYWRlclsyXSkgeworCQkvKiBsaW5lIG51bWJlciBtaXNtYXRjaCBlcnJvciAqLworCQl1c2J2aXNpb24tPnN0cmlwX2xpbmVfbnVtYmVyX2Vycm9ycysrOwogCX0KIAotCVN0cmlwTGVuID0gMiAqICh1bnNpZ25lZCBpbnQpU3RyaXBIZWFkZXJbMV07Ci0JaWYgKFN0cmlwTGVuID4gVVNCVklTSU9OX1NUUklQX0xFTl9NQVgpIHsKLQkJLy8gc3RyaXAgb3ZlcnJ1bgotCQkvLyBJIHRoaW5rIHRoaXMgbmV2ZXIgaGFwcGVucworCXN0cmlwX2xlbiA9IDIgKiAodW5zaWduZWQgaW50KXN0cmlwX2hlYWRlclsxXTsKKwlpZiAoc3RyaXBfbGVuID4gVVNCVklTSU9OX1NUUklQX0xFTl9NQVgpIHsKKwkJLyogc3RyaXAgb3ZlcnJ1biAqLworCQkvKiBJIHRoaW5rIHRoaXMgbmV2ZXIgaGFwcGVucyAqLwogCQl1c2J2aXNpb25fcmVxdWVzdF9pbnRyYSh1c2J2aXNpb24pOwogCX0KIAotCWlmIChzY3JhdGNoX2xlbih1c2J2aXNpb24pIDwgU3RyaXBMZW4pIHsKLQkJLy90aGVyZSBpcyBub3QgZW5vdWdoIGRhdGEgZm9yIHRoZSBzdHJpcAotCQlyZXR1cm4gUGFyc2VTdGF0ZV9PdXQ7CisJaWYgKHNjcmF0Y2hfbGVuKHVzYnZpc2lvbikgPCBzdHJpcF9sZW4pIHsKKwkJLyogdGhlcmUgaXMgbm90IGVub3VnaCBkYXRhIGZvciB0aGUgc3RyaXAgKi8KKwkJcmV0dXJuIHBhcnNlX3N0YXRlX291dDsKIAl9CiAKLQlpZiAodXNidmlzaW9uLT5JbnRyYUZyYW1lQnVmZmVyKSB7Ci0JCVkgPSB1c2J2aXNpb24tPkludHJhRnJhbWVCdWZmZXIgKyBmcmFtZS0+ZnJtd2lkdGggKiBmcmFtZS0+Y3VybGluZTsKLQkJVSA9IHVzYnZpc2lvbi0+SW50cmFGcmFtZUJ1ZmZlciArIGltYWdlU2l6ZSArIChmcmFtZS0+ZnJtd2lkdGggLyAyKSAqIChmcmFtZS0+Y3VybGluZSAvIDIpOwotCQlWID0gdXNidmlzaW9uLT5JbnRyYUZyYW1lQnVmZmVyICsgaW1hZ2VTaXplIC8gNCAqIDUgKyAoZnJhbWUtPmZybXdpZHRoIC8gMikgKiAoZnJhbWUtPmN1cmxpbmUgLyAyKTsKLQl9Ci0JZWxzZSB7Ci0JCXJldHVybiBQYXJzZVN0YXRlX05leHRGcmFtZTsKKwlpZiAodXNidmlzaW9uLT5pbnRyYV9mcmFtZV9idWZmZXIpIHsKKwkJWSA9IHVzYnZpc2lvbi0+aW50cmFfZnJhbWVfYnVmZmVyICsgZnJhbWUtPmZybXdpZHRoICogZnJhbWUtPmN1cmxpbmU7CisJCVUgPSB1c2J2aXNpb24tPmludHJhX2ZyYW1lX2J1ZmZlciArIGltYWdlX3NpemUgKyAoZnJhbWUtPmZybXdpZHRoIC8gMikgKiAoZnJhbWUtPmN1cmxpbmUgLyAyKTsKKwkJViA9IHVzYnZpc2lvbi0+aW50cmFfZnJhbWVfYnVmZmVyICsgaW1hZ2Vfc2l6ZSAvIDQgKiA1ICsgKGZyYW1lLT5mcm13aWR0aCAvIDIpICogKGZyYW1lLT5jdXJsaW5lIC8gMik7CisJfSBlbHNlIHsKKwkJcmV0dXJuIHBhcnNlX3N0YXRlX25leHRfZnJhbWU7CiAJfQogCiAJYnl0ZXNfcGVyX3BpeGVsID0gZnJhbWUtPnY0bDJfZm9ybWF0LmJ5dGVzX3Blcl9waXhlbDsKIAljbGlwbWFza19pbmRleCA9IGZyYW1lLT5jdXJsaW5lICogTUFYX0ZSQU1FX1dJRFRIOwogCi0Jc2NyYXRjaF9nZXQodXNidmlzaW9uLCBTdHJpcERhdGEsIFN0cmlwTGVuKTsKKwlzY3JhdGNoX2dldCh1c2J2aXNpb24sIHN0cmlwX2RhdGEsIHN0cmlwX2xlbik7CiAKLQlJZHhFbmQgPSBmcmFtZS0+ZnJtd2lkdGg7Ci0JQmxvY2tUeXBlUG9zID0gVVNCVklTSU9OX1NUUklQX0hFQURFUl9MRU47Ci0JU3RhcnRCbG9ja1BvcyA9IEJsb2NrVHlwZVBvcyArIChJZHhFbmQgLSAxKSAvIDk2ICsgKElkeEVuZCAvIDIgLSAxKSAvIDk2ICsgMjsKLQlCbG9ja1BvcyA9IFN0YXJ0QmxvY2tQb3M7CisJaWR4X2VuZCA9IGZyYW1lLT5mcm13aWR0aDsKKwlibG9ja190eXBlX3BvcyA9IFVTQlZJU0lPTl9TVFJJUF9IRUFERVJfTEVOOworCXN0YXJ0YmxvY2tfcG9zID0gYmxvY2tfdHlwZV9wb3MgKyAoaWR4X2VuZCAtIDEpIC8gOTYgKyAoaWR4X2VuZCAvIDIgLSAxKSAvIDk2ICsgMjsKKwlibG9ja19wb3MgPSBzdGFydGJsb2NrX3BvczsKIAotCXVzYnZpc2lvbi0+QmxvY2tQb3MgPSBCbG9ja1BvczsKKwl1c2J2aXNpb24tPmJsb2NrX3BvcyA9IGJsb2NrX3BvczsKIAotCWlmICgocmMgPSB1c2J2aXNpb25fZGVjb21wcmVzcyh1c2J2aXNpb24sIFN0cmlwRGF0YSwgWSwgJkJsb2NrUG9zLCAmQmxvY2tUeXBlUG9zLCBJZHhFbmQpKSAhPSBJZHhFbmQpIHsKLQkJLy9yZXR1cm4gUGFyc2VTdGF0ZV9Db250aW51ZTsKLQl9Ci0JaWYgKFN0cmlwTGVuID4gdXNidmlzaW9uLT5tYXhTdHJpcExlbikgewotCQl1c2J2aXNpb24tPm1heFN0cmlwTGVuID0gU3RyaXBMZW47Ci0JfQorCXJjID0gdXNidmlzaW9uX2RlY29tcHJlc3ModXNidmlzaW9uLCBzdHJpcF9kYXRhLCBZLCAmYmxvY2tfcG9zLCAmYmxvY2tfdHlwZV9wb3MsIGlkeF9lbmQpOworCWlmIChzdHJpcF9sZW4gPiB1c2J2aXNpb24tPm1heF9zdHJpcF9sZW4pCisJCXVzYnZpc2lvbi0+bWF4X3N0cmlwX2xlbiA9IHN0cmlwX2xlbjsKIAotCWlmIChmcmFtZS0+Y3VybGluZSUyKSB7Ci0JCWlmICgocmMgPSB1c2J2aXNpb25fZGVjb21wcmVzcyh1c2J2aXNpb24sIFN0cmlwRGF0YSwgViwgJkJsb2NrUG9zLCAmQmxvY2tUeXBlUG9zLCBJZHhFbmQvMikpICE9IElkeEVuZC8yKSB7Ci0JCS8vcmV0dXJuIFBhcnNlU3RhdGVfQ29udGludWU7Ci0JCX0KLQl9Ci0JZWxzZSB7Ci0JCWlmICgocmMgPSB1c2J2aXNpb25fZGVjb21wcmVzcyh1c2J2aXNpb24sIFN0cmlwRGF0YSwgVSwgJkJsb2NrUG9zLCAmQmxvY2tUeXBlUG9zLCBJZHhFbmQvMikpICE9IElkeEVuZC8yKSB7Ci0JCQkvL3JldHVybiBQYXJzZVN0YXRlX0NvbnRpbnVlOwotCQl9Ci0JfQorCWlmIChmcmFtZS0+Y3VybGluZSAlIDIpCisJCXJjID0gdXNidmlzaW9uX2RlY29tcHJlc3ModXNidmlzaW9uLCBzdHJpcF9kYXRhLCBWLCAmYmxvY2tfcG9zLCAmYmxvY2tfdHlwZV9wb3MsIGlkeF9lbmQgLyAyKTsKKwllbHNlCisJCXJjID0gdXNidmlzaW9uX2RlY29tcHJlc3ModXNidmlzaW9uLCBzdHJpcF9kYXRhLCBVLCAmYmxvY2tfcG9zLCAmYmxvY2tfdHlwZV9wb3MsIGlkeF9lbmQgLyAyKTsKIAotCWlmIChCbG9ja1BvcyA+IHVzYnZpc2lvbi0+Y29tcHJCbG9ja1BvcykgewotCQl1c2J2aXNpb24tPmNvbXByQmxvY2tQb3MgPSBCbG9ja1BvczsKLQl9Ci0JaWYgKEJsb2NrUG9zID4gU3RyaXBMZW4pIHsKLQkJdXNidmlzaW9uLT5zdHJpcExlbkVycm9ycysrOwotCX0KKwlpZiAoYmxvY2tfcG9zID4gdXNidmlzaW9uLT5jb21wcmJsb2NrX3BvcykKKwkJdXNidmlzaW9uLT5jb21wcmJsb2NrX3BvcyA9IGJsb2NrX3BvczsKKwlpZiAoYmxvY2tfcG9zID4gc3RyaXBfbGVuKQorCQl1c2J2aXNpb24tPnN0cmlwX2xlbl9lcnJvcnMrKzsKIAotCWZvciAoSWR4ID0gMDsgSWR4IDwgSWR4RW5kOyBJZHgrKykgewotCQlpZihmcmFtZS0+djRsMl9mb3JtYXQuZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9ZVVlWKSB7Ci0JCQkqZisrID0gWVtJZHhdOwotCQkJKmYrKyA9IElkeCAmIDB4MDEgPyBVW0lkeC8yXSA6IFZbSWR4LzJdOwotCQl9Ci0JCWVsc2UgaWYoZnJhbWUtPnY0bDJfZm9ybWF0LmZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfWVVWNDIyUCkgewotCQkJKmYrKyA9IFlbSWR4XTsKLQkJCWlmICggSWR4ICYgMHgwMSkKLQkJCQkqdSsrID0gVVtJZHg+PjFdIDsKKwlmb3IgKGlkeCA9IDA7IGlkeCA8IGlkeF9lbmQ7IGlkeCsrKSB7CisJCWlmIChmcmFtZS0+djRsMl9mb3JtYXQuZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9ZVVlWKSB7CisJCQkqZisrID0gWVtpZHhdOworCQkJKmYrKyA9IGlkeCAmIDB4MDEgPyBVW2lkeCAvIDJdIDogVltpZHggLyAyXTsKKwkJfSBlbHNlIGlmIChmcmFtZS0+djRsMl9mb3JtYXQuZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9ZVVY0MjJQKSB7CisJCQkqZisrID0gWVtpZHhdOworCQkJaWYgKGlkeCAmIDB4MDEpCisJCQkJKnUrKyA9IFVbaWR4ID4+IDFdOwogCQkJZWxzZQotCQkJCSp2KysgPSBWW0lkeD4+MV07Ci0JCX0KLQkJZWxzZSBpZiAoZnJhbWUtPnY0bDJfZm9ybWF0LmZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfWVZVNDIwKSB7Ci0JCQkqZisrID0gWSBbSWR4XTsKLQkJCWlmICggISgoICBJZHggJiAweDAxICApIHwgKCAgZnJhbWUtPmN1cmxpbmUgJiAweDAxICApKSApewotCi0vKiAJCQkJIG9ubHkgbmVlZCBkbyB0aGlzIGZvciAxIGluIDQgcGl4ZWxzICovCi0vKiAJCQkJIGludHJhZnJhbWUgYnVmZmVyIGlzIFlVVjQyMCBmb3JtYXQgKi8KLQotCQkJCSp1KysgPSBVW0lkeCA+PjFdOwotCQkJCSp2KysgPSBWW0lkeCA+PjFdOworCQkJCSp2KysgPSBWW2lkeCA+PiAxXTsKKwkJfSBlbHNlIGlmIChmcmFtZS0+djRsMl9mb3JtYXQuZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9ZVlU0MjApIHsKKwkJCSpmKysgPSBZW2lkeF07CisJCQlpZiAoISgoaWR4ICYgMHgwMSkgfCAoZnJhbWUtPmN1cmxpbmUgJiAweDAxKSkpIHsKKwkJCQkvKiBvbmx5IG5lZWQgZG8gdGhpcyBmb3IgMSBpbiA0IHBpeGVscyAqLworCQkJCS8qIGludHJhZnJhbWUgYnVmZmVyIGlzIFlVVjQyMCBmb3JtYXQgKi8KKwkJCQkqdSsrID0gVVtpZHggPj4gMV07CisJCQkJKnYrKyA9IFZbaWR4ID4+IDFdOwogCQkJfQotCi0JCX0KLQkJZWxzZSB7Ci0JCQlZVVZfVE9fUkdCX0JZX1RIRV9CT09LKFlbSWR4XSwgVVtJZHgvMl0sIFZbSWR4LzJdLCBydiwgZ3YsIGJ2KTsKKwkJfSBlbHNlIHsKKwkJCVlVVl9UT19SR0JfQllfVEhFX0JPT0soWVtpZHhdLCBVW2lkeCAvIDJdLCBWW2lkeCAvIDJdLCBydiwgZ3YsIGJ2KTsKIAkJCXN3aXRjaCAoZnJhbWUtPnY0bDJfZm9ybWF0LmZvcm1hdCkgewotCQkJCWNhc2UgVjRMMl9QSVhfRk1UX0dSRVk6Ci0JCQkJCSpmKysgPSBZW0lkeF07Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgVjRMMl9QSVhfRk1UX1JHQjU1NToKLQkJCQkJKmYrKyA9ICgweDFGICYgcnYpIHwKLQkJCQkJCSgweEUwICYgKGd2IDw8IDUpKTsKLQkJCQkJKmYrKyA9ICgweDAzICYgKGd2ID4+IDMpKSB8Ci0JCQkJCQkoMHg3QyAmIChidiA8PCAyKSk7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgVjRMMl9QSVhfRk1UX1JHQjU2NToKLQkJCQkJKmYrKyA9ICgweDFGICYgcnYpIHwKLQkJCQkJCSgweEUwICYgKGd2IDw8IDUpKTsKLQkJCQkJKmYrKyA9ICgweDA3ICYgKGd2ID4+IDMpKSB8Ci0JCQkJCQkoMHhGOCAmICBidik7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgVjRMMl9QSVhfRk1UX1JHQjI0OgotCQkJCQkqZisrID0gcnY7Ci0JCQkJCSpmKysgPSBndjsKLQkJCQkJKmYrKyA9IGJ2OwotCQkJCQlicmVhazsKLQkJCQljYXNlIFY0TDJfUElYX0ZNVF9SR0IzMjoKLQkJCQkJKmYrKyA9IHJ2OwotCQkJCQkqZisrID0gZ3Y7Ci0JCQkJCSpmKysgPSBidjsKLQkJCQkJZisrOwotCQkJCQlicmVhazsKKwkJCWNhc2UgVjRMMl9QSVhfRk1UX0dSRVk6CisJCQkJKmYrKyA9IFlbaWR4XTsKKwkJCQlicmVhazsKKwkJCWNhc2UgVjRMMl9QSVhfRk1UX1JHQjU1NToKKwkJCQkqZisrID0gKDB4MUYgJiBydikgfAorCQkJCQkoMHhFMCAmIChndiA8PCA1KSk7CisJCQkJKmYrKyA9ICgweDAzICYgKGd2ID4+IDMpKSB8CisJCQkJCSgweDdDICYgKGJ2IDw8IDIpKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgVjRMMl9QSVhfRk1UX1JHQjU2NToKKwkJCQkqZisrID0gKDB4MUYgJiBydikgfAorCQkJCQkoMHhFMCAmIChndiA8PCA1KSk7CisJCQkJKmYrKyA9ICgweDA3ICYgKGd2ID4+IDMpKSB8CisJCQkJCSgweEY4ICYgYnYpOworCQkJCWJyZWFrOworCQkJY2FzZSBWNEwyX1BJWF9GTVRfUkdCMjQ6CisJCQkJKmYrKyA9IHJ2OworCQkJCSpmKysgPSBndjsKKwkJCQkqZisrID0gYnY7CisJCQkJYnJlYWs7CisJCQljYXNlIFY0TDJfUElYX0ZNVF9SR0IzMjoKKwkJCQkqZisrID0gcnY7CisJCQkJKmYrKyA9IGd2OworCQkJCSpmKysgPSBidjsKKwkJCQlmKys7CisJCQkJYnJlYWs7CiAJCQl9CiAJCX0KIAkJY2xpcG1hc2tfaW5kZXgrKzsKIAl9CiAJLyogRGVhbCB3aXRoIG5vbi1pbnRlZ2VyIG5vLiBvZiBieXRlcyBmb3IgWVVWNDIwUCAqLwotCWlmIChmcmFtZS0+djRsMl9mb3JtYXQuZm9ybWF0ICE9IFY0TDJfUElYX0ZNVF9ZVlU0MjAgKQorCWlmIChmcmFtZS0+djRsMl9mb3JtYXQuZm9ybWF0ICE9IFY0TDJfUElYX0ZNVF9ZVlU0MjApCiAJCSpwY29weWxlbiArPSBmcmFtZS0+djRsMl9saW5lc2l6ZTsKIAllbHNlCiAJCSpwY29weWxlbiArPSBmcmFtZS0+Y3VybGluZSAmIDB4MDEgPyBmcmFtZS0+djRsMl9saW5lc2l6ZSA6IGZyYW1lLT52NGwyX2xpbmVzaXplIDw8IDE7CiAKIAlmcmFtZS0+Y3VybGluZSArPSAxOwogCi0JaWYgKGZyYW1lLT5jdXJsaW5lID49IGZyYW1lLT5mcm1oZWlnaHQpIHsKLQkJcmV0dXJuIFBhcnNlU3RhdGVfTmV4dEZyYW1lOwotCX0KLQllbHNlIHsKLQkJcmV0dXJuIFBhcnNlU3RhdGVfQ29udGludWU7Ci0JfQorCWlmIChmcmFtZS0+Y3VybGluZSA+PSBmcmFtZS0+ZnJtaGVpZ2h0KQorCQlyZXR1cm4gcGFyc2Vfc3RhdGVfbmV4dF9mcmFtZTsKKwlyZXR1cm4gcGFyc2Vfc3RhdGVfY29udGludWU7CiAKIH0KIApAQCAtMTAwOCw3ICs5NjEsNyBAQAogICogbnVtYmVyIG9mIGJ5dGVzIChSR0IpIHRvIHRoZSAqcGNvcHlsZW4uCiAgKgogICovCi1zdGF0aWMgZW51bSBQYXJzZVN0YXRlIHVzYnZpc2lvbl9wYXJzZV9saW5lc180MjAoc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiwKK3N0YXRpYyBlbnVtIHBhcnNlX3N0YXRlIHVzYnZpc2lvbl9wYXJzZV9saW5lc180MjAoc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiwKIAkJCQkJICAgbG9uZyAqcGNvcHlsZW4pCiB7CiAJc3RydWN0IHVzYnZpc2lvbl9mcmFtZSAqZnJhbWU7CkBAIC0xMDE2LDExICs5NjksMTEgQEAKIAl1bnNpZ25lZCBpbnQgcGl4ZWxfcGVyX2xpbmUsIGJsb2NrOwogCWludCBwaXhlbCwgYmxvY2tfc3BsaXQ7CiAJaW50IHlfcHRyLCB1X3B0ciwgdl9wdHIsIHlfb2RkX29mZnNldDsKLQljb25zdCBpbnQgICB5X2Jsb2NrX3NpemUgPSAxMjg7Ci0JY29uc3QgaW50ICB1dl9ibG9ja19zaXplID0gNjQ7CisJY29uc3QgaW50IHlfYmxvY2tfc2l6ZSA9IDEyODsKKwljb25zdCBpbnQgdXZfYmxvY2tfc2l6ZSA9IDY0OwogCWNvbnN0IGludCBzdWJfYmxvY2tfc2l6ZSA9IDMyOwotCWNvbnN0IGludCB5X3N0ZXBbXSA9IHsgMCwgMCwgMCwgMiB9LCAgeV9zdGVwX3NpemUgPSA0OwotCWNvbnN0IGludCB1dl9zdGVwW109IHsgMCwgMCwgMCwgNCB9LCB1dl9zdGVwX3NpemUgPSA0OworCWNvbnN0IGludCB5X3N0ZXBbXSA9IHsgMCwgMCwgMCwgMiB9LCB5X3N0ZXBfc2l6ZSA9IDQ7CisJY29uc3QgaW50IHV2X3N0ZXBbXSA9IHsgMCwgMCwgMCwgNCB9LCB1dl9zdGVwX3NpemUgPSA0OwogCXVuc2lnbmVkIGNoYXIgeVsyXSwgdSwgdjsJLyogWVVWIGNvbXBvbmVudHMgKi8KIAlpbnQgeV8sIHVfLCB2XywgdmIsIHV2ZywgdXI7CiAJaW50IHJfLCBnXywgYl87CQkJLyogUkdCIGNvbXBvbmVudHMgKi8KQEAgLTEwMjgsNyArOTgxLDcgQEAKIAlpbnQgY2xpcG1hc2tfZXZlbl9pbmRleCwgY2xpcG1hc2tfb2RkX2luZGV4LCBieXRlc19wZXJfcGl4ZWw7CiAJaW50IGNsaXBtYXNrX2FkZCwgc3RyZXRjaF9ieXRlczsKIAotCWZyYW1lICA9IHVzYnZpc2lvbi0+Y3VyRnJhbWU7CisJZnJhbWUgID0gdXNidmlzaW9uLT5jdXJfZnJhbWU7CiAJZl9ldmVuID0gZnJhbWUtPmRhdGEgKyAoZnJhbWUtPnY0bDJfbGluZXNpemUgKiBmcmFtZS0+Y3VybGluZSk7CiAJZl9vZGQgID0gZl9ldmVuICsgZnJhbWUtPnY0bDJfbGluZXNpemUgKiB1c2J2aXNpb24tPnN0cmV0Y2hfaGVpZ2h0OwogCkBAIC0xMDQwLDE4ICs5OTMsMTcgQEAKIAljbGlwbWFza19ldmVuX2luZGV4ID0gZnJhbWUtPmN1cmxpbmUgKiBNQVhfRlJBTUVfV0lEVEg7CiAJY2xpcG1hc2tfb2RkX2luZGV4ICA9IGNsaXBtYXNrX2V2ZW5faW5kZXggKyBNQVhfRlJBTUVfV0lEVEg7CiAJY2xpcG1hc2tfYWRkID0gdXNidmlzaW9uLT5zdHJldGNoX3dpZHRoOwotCXBpeGVsX3Blcl9saW5lID0gZnJhbWUtPmlzb2NIZWFkZXIuZnJhbWVXaWR0aDsKKwlwaXhlbF9wZXJfbGluZSA9IGZyYW1lLT5pc29jX2hlYWRlci5mcmFtZV93aWR0aDsKIAogCWlmIChzY3JhdGNoX2xlbih1c2J2aXNpb24pIDwgKGludClwaXhlbF9wZXJfbGluZSAqIDMpIHsKLQkJLy9wcmludGsoS0VSTl9ERUJVRyAib3V0IG9mIGRhdGEsIG5lZWQgJWRcbiIsIGxlbik7Ci0JCXJldHVybiBQYXJzZVN0YXRlX091dDsKKwkJLyogcHJpbnRrKEtFUk5fREVCVUcgIm91dCBvZiBkYXRhLCBuZWVkICVkXG4iLCBsZW4pOyAqLworCQlyZXR1cm4gcGFyc2Vfc3RhdGVfb3V0OwogCX0KIAotCWlmICgoZnJhbWUtPmN1cmxpbmUgKyAxKSA+PSBmcmFtZS0+ZnJtaGVpZ2h0KSB7Ci0JCXJldHVybiBQYXJzZVN0YXRlX05leHRGcmFtZTsKLQl9CisJaWYgKChmcmFtZS0+Y3VybGluZSArIDEpID49IGZyYW1lLT5mcm1oZWlnaHQpCisJCXJldHVybiBwYXJzZV9zdGF0ZV9uZXh0X2ZyYW1lOwogCi0JYmxvY2tfc3BsaXQgPSAocGl4ZWxfcGVyX2xpbmUleV9ibG9ja19zaXplKSA/IDEgOiAwOwkvL2FyZSBzb21lIGJsb2NrcyBzcGxpdHRlZCBpbnRvIGRpZmZlcmVudCBsaW5lcz8KKwlibG9ja19zcGxpdCA9IChwaXhlbF9wZXJfbGluZSV5X2Jsb2NrX3NpemUpID8gMSA6IDA7CS8qIGFyZSBzb21lIGJsb2NrcyBzcGxpdHRlZCBpbnRvIGRpZmZlcmVudCBsaW5lcz8gKi8KIAogCXlfb2RkX29mZnNldCA9IChwaXhlbF9wZXJfbGluZSAvIHlfYmxvY2tfc2l6ZSkgKiAoeV9ibG9ja19zaXplICsgdXZfYmxvY2tfc2l6ZSkKIAkJCSsgYmxvY2tfc3BsaXQgKiB1dl9ibG9ja19zaXplOwpAQCAtMTA2MSwzMSArMTAxMywyNyBAQAogCXNjcmF0Y2hfc2V0X2V4dHJhX3B0cih1c2J2aXNpb24sICZ2X3B0ciwgeV9vZGRfb2Zmc2V0CiAJCQkrICg0IC0gYmxvY2tfc3BsaXQpICogc3ViX2Jsb2NrX3NpemUpOwogCi0JZm9yIChibG9jayA9IDA7IGJsb2NrIDwgKHBpeGVsX3Blcl9saW5lIC8gc3ViX2Jsb2NrX3NpemUpOwotCSAgICAgYmxvY2srKykgewotCi0KLQkJZm9yIChwaXhlbCA9IDA7IHBpeGVsIDwgc3ViX2Jsb2NrX3NpemU7IHBpeGVsICs9MikgeworCWZvciAoYmxvY2sgPSAwOyBibG9jayA8IChwaXhlbF9wZXJfbGluZSAvIHN1Yl9ibG9ja19zaXplKTsgYmxvY2srKykgeworCQlmb3IgKHBpeGVsID0gMDsgcGl4ZWwgPCBzdWJfYmxvY2tfc2l6ZTsgcGl4ZWwgKz0gMikgewogCQkJc2NyYXRjaF9nZXQodXNidmlzaW9uLCAmeVswXSwgMik7CiAJCQlzY3JhdGNoX2dldF9leHRyYSh1c2J2aXNpb24sICZ1LCAmdV9wdHIsIDEpOwogCQkJc2NyYXRjaF9nZXRfZXh0cmEodXNidmlzaW9uLCAmdiwgJnZfcHRyLCAxKTsKIAotCQkJLy9JIGRvbid0IHVzZSB0aGUgWVVWX1RPX1JHQiBtYWNybyBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlCisJCQkvKiBJIGRvbid0IHVzZSB0aGUgWVVWX1RPX1JHQiBtYWNybyBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlICovCiAJCQl2XyA9IHYgLSAxMjg7CiAJCQl1XyA9IHUgLSAxMjg7Ci0JCQl2YiA9ICAgICAgICAgICAgICAxMzIyNTIgKiB2XzsKLQkJCXV2Zz0gLTUzMjgxICogdV8gLSAyNTYyNSAqIHZfOworCQkJdmIgPSAxMzIyNTIgKiB2XzsKKwkJCXV2ZyA9IC01MzI4MSAqIHVfIC0gMjU2MjUgKiB2XzsKIAkJCXVyID0gMTA0NTk1ICogdV87CiAKLQkJCWlmKGZyYW1lLT52NGwyX2Zvcm1hdC5mb3JtYXQgPT0gVjRMMl9QSVhfRk1UX1lVWVYpIHsKKwkJCWlmIChmcmFtZS0+djRsMl9mb3JtYXQuZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9ZVVlWKSB7CiAJCQkJKmZfZXZlbisrID0geVswXTsKIAkJCQkqZl9ldmVuKysgPSB2OwotCQkJfQotCQkJZWxzZSB7CisJCQl9IGVsc2UgewogCQkJCXlfID0gNzYyODQgKiAoeVswXSAtIDE2KTsKIAogCQkJCWJfID0gKHlfICsgdmIpID4+IDE2OwotCQkJCWdfID0gKHlfICsgdXZnKT4+IDE2OworCQkJCWdfID0gKHlfICsgdXZnKSA+PiAxNjsKIAkJCQlyXyA9ICh5XyArIHVyKSA+PiAxNjsKIAogCQkJCXN3aXRjaCAoZnJhbWUtPnY0bDJfZm9ybWF0LmZvcm1hdCkgewpAQCAtMTEyMSwxNSArMTA2OSwxNCBAQAogCQkJY2xpcG1hc2tfZXZlbl9pbmRleCArPSBjbGlwbWFza19hZGQ7CiAJCQlmX2V2ZW4gKz0gc3RyZXRjaF9ieXRlczsKIAotCQkJaWYoZnJhbWUtPnY0bDJfZm9ybWF0LmZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfWVVZVikgeworCQkJaWYgKGZyYW1lLT52NGwyX2Zvcm1hdC5mb3JtYXQgPT0gVjRMMl9QSVhfRk1UX1lVWVYpIHsKIAkJCQkqZl9ldmVuKysgPSB5WzFdOwogCQkJCSpmX2V2ZW4rKyA9IHU7Ci0JCQl9Ci0JCQllbHNlIHsKKwkJCX0gZWxzZSB7CiAJCQkJeV8gPSA3NjI4NCAqICh5WzFdIC0gMTYpOwogCiAJCQkJYl8gPSAoeV8gKyB2YikgPj4gMTY7Ci0JCQkJZ18gPSAoeV8gKyB1dmcpPj4gMTY7CisJCQkJZ18gPSAoeV8gKyB1dmcpID4+IDE2OwogCQkJCXJfID0gKHlfICsgdXIpID4+IDE2OwogCiAJCQkJc3dpdGNoIChmcmFtZS0+djRsMl9mb3JtYXQuZm9ybWF0KSB7CkBAIC0xMTY3LDE1ICsxMTE0LDE0IEBACiAKIAkJCXNjcmF0Y2hfZ2V0X2V4dHJhKHVzYnZpc2lvbiwgJnlbMF0sICZ5X3B0ciwgMik7CiAKLQkJCWlmKGZyYW1lLT52NGwyX2Zvcm1hdC5mb3JtYXQgPT0gVjRMMl9QSVhfRk1UX1lVWVYpIHsKKwkJCWlmIChmcmFtZS0+djRsMl9mb3JtYXQuZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9ZVVlWKSB7CiAJCQkJKmZfb2RkKysgPSB5WzBdOwogCQkJCSpmX29kZCsrID0gdjsKLQkJCX0KLQkJCWVsc2UgeworCQkJfSBlbHNlIHsKIAkJCQl5XyA9IDc2Mjg0ICogKHlbMF0gLSAxNik7CiAKIAkJCQliXyA9ICh5XyArIHZiKSA+PiAxNjsKLQkJCQlnXyA9ICh5XyArIHV2Zyk+PiAxNjsKKwkJCQlnXyA9ICh5XyArIHV2ZykgPj4gMTY7CiAJCQkJcl8gPSAoeV8gKyB1cikgPj4gMTY7CiAKIAkJCQlzd2l0Y2ggKGZyYW1lLT52NGwyX2Zvcm1hdC5mb3JtYXQpIHsKQEAgLTEyMTEsMTUgKzExNTcsMTQgQEAKIAkJCWNsaXBtYXNrX29kZF9pbmRleCArPSBjbGlwbWFza19hZGQ7CiAJCQlmX29kZCArPSBzdHJldGNoX2J5dGVzOwogCi0JCQlpZihmcmFtZS0+djRsMl9mb3JtYXQuZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9ZVVlWKSB7CisJCQlpZiAoZnJhbWUtPnY0bDJfZm9ybWF0LmZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfWVVZVikgewogCQkJCSpmX29kZCsrID0geVsxXTsKIAkJCQkqZl9vZGQrKyA9IHU7Ci0JCQl9Ci0JCQllbHNlIHsKKwkJCX0gZWxzZSB7CiAJCQkJeV8gPSA3NjI4NCAqICh5WzFdIC0gMTYpOwogCiAJCQkJYl8gPSAoeV8gKyB2YikgPj4gMTY7Ci0JCQkJZ18gPSAoeV8gKyB1dmcpPj4gMTY7CisJCQkJZ18gPSAoeV8gKyB1dmcpID4+IDE2OwogCQkJCXJfID0gKHlfICsgdXIpID4+IDE2OwogCiAJCQkJc3dpdGNoIChmcmFtZS0+djRsMl9mb3JtYXQuZm9ybWF0KSB7CkBAIC0xMjU2LDcgKzEyMDEsNyBAQAogCQkJZl9vZGQgKz0gc3RyZXRjaF9ieXRlczsKIAkJfQogCi0JCXNjcmF0Y2hfcm1fb2xkKHVzYnZpc2lvbix5X3N0ZXBbYmxvY2sgJSB5X3N0ZXBfc2l6ZV0gKiBzdWJfYmxvY2tfc2l6ZSk7CisJCXNjcmF0Y2hfcm1fb2xkKHVzYnZpc2lvbiwgeV9zdGVwW2Jsb2NrICUgeV9zdGVwX3NpemVdICogc3ViX2Jsb2NrX3NpemUpOwogCQlzY3JhdGNoX2luY19leHRyYV9wdHIoJnlfcHRyLCB5X3N0ZXBbKGJsb2NrICsgMiAqIGJsb2NrX3NwbGl0KSAlIHlfc3RlcF9zaXplXQogCQkJCSogc3ViX2Jsb2NrX3NpemUpOwogCQlzY3JhdGNoX2luY19leHRyYV9wdHIoJnVfcHRyLCB1dl9zdGVwW2Jsb2NrICUgdXZfc3RlcF9zaXplXQpAQCAtMTI3Miw5ICsxMjE3LDggQEAKIAkqcGNvcHlsZW4gKz0gZnJhbWUtPnY0bDJfbGluZXNpemUgKiAyICogdXNidmlzaW9uLT5zdHJldGNoX2hlaWdodDsKIAogCWlmIChmcmFtZS0+Y3VybGluZSA+PSBmcmFtZS0+ZnJtaGVpZ2h0KQotCQlyZXR1cm4gUGFyc2VTdGF0ZV9OZXh0RnJhbWU7Ci0JZWxzZQotCQlyZXR1cm4gUGFyc2VTdGF0ZV9Db250aW51ZTsKKwkJcmV0dXJuIHBhcnNlX3N0YXRlX25leHRfZnJhbWU7CisJcmV0dXJuIHBhcnNlX3N0YXRlX2NvbnRpbnVlOwogfQogCiAvKgpAQCAtMTI4OCw1MyArMTIzMiw0MyBAQAogc3RhdGljIHZvaWQgdXNidmlzaW9uX3BhcnNlX2RhdGEoc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbikKIHsKIAlzdHJ1Y3QgdXNidmlzaW9uX2ZyYW1lICpmcmFtZTsKLQllbnVtIFBhcnNlU3RhdGUgbmV3c3RhdGU7CisJZW51bSBwYXJzZV9zdGF0ZSBuZXdzdGF0ZTsKIAlsb25nIGNvcHlsZW4gPSAwOwogCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKIAotCWZyYW1lID0gdXNidmlzaW9uLT5jdXJGcmFtZTsKKwlmcmFtZSA9IHVzYnZpc2lvbi0+Y3VyX2ZyYW1lOwogCiAJUERFQlVHKERCR19QQVJTRSwgInBhcnNpbmcgbGVuPSVkXG4iLCBzY3JhdGNoX2xlbih1c2J2aXNpb24pKTsKIAogCXdoaWxlICgxKSB7Ci0KLQkJbmV3c3RhdGUgPSBQYXJzZVN0YXRlX091dDsKKwkJbmV3c3RhdGUgPSBwYXJzZV9zdGF0ZV9vdXQ7CiAJCWlmIChzY3JhdGNoX2xlbih1c2J2aXNpb24pKSB7Ci0JCQlpZiAoZnJhbWUtPnNjYW5zdGF0ZSA9PSBTY2FuU3RhdGVfU2Nhbm5pbmcpIHsKKwkJCWlmIChmcmFtZS0+c2NhbnN0YXRlID09IHNjYW5fc3RhdGVfc2Nhbm5pbmcpIHsKIAkJCQluZXdzdGF0ZSA9IHVzYnZpc2lvbl9maW5kX2hlYWRlcih1c2J2aXNpb24pOwotCQkJfQotCQkJZWxzZSBpZiAoZnJhbWUtPnNjYW5zdGF0ZSA9PSBTY2FuU3RhdGVfTGluZXMpIHsKLQkJCQlpZiAodXNidmlzaW9uLT5pc29jTW9kZSA9PSBJU09DX01PREVfWVVWNDIwKSB7CisJCQl9IGVsc2UgaWYgKGZyYW1lLT5zY2Fuc3RhdGUgPT0gc2Nhbl9zdGF0ZV9saW5lcykgeworCQkJCWlmICh1c2J2aXNpb24tPmlzb2NfbW9kZSA9PSBJU09DX01PREVfWVVWNDIwKQogCQkJCQluZXdzdGF0ZSA9IHVzYnZpc2lvbl9wYXJzZV9saW5lc180MjAodXNidmlzaW9uLCAmY29weWxlbik7Ci0JCQkJfQotCQkJCWVsc2UgaWYgKHVzYnZpc2lvbi0+aXNvY01vZGUgPT0gSVNPQ19NT0RFX1lVVjQyMikgeworCQkJCWVsc2UgaWYgKHVzYnZpc2lvbi0+aXNvY19tb2RlID09IElTT0NfTU9ERV9ZVVY0MjIpCiAJCQkJCW5ld3N0YXRlID0gdXNidmlzaW9uX3BhcnNlX2xpbmVzXzQyMih1c2J2aXNpb24sICZjb3B5bGVuKTsKLQkJCQl9Ci0JCQkJZWxzZSBpZiAodXNidmlzaW9uLT5pc29jTW9kZSA9PSBJU09DX01PREVfQ09NUFJFU1MpIHsKKwkJCQllbHNlIGlmICh1c2J2aXNpb24tPmlzb2NfbW9kZSA9PSBJU09DX01PREVfQ09NUFJFU1MpCiAJCQkJCW5ld3N0YXRlID0gdXNidmlzaW9uX3BhcnNlX2NvbXByZXNzKHVzYnZpc2lvbiwgJmNvcHlsZW4pOwotCQkJCX0KLQogCQkJfQogCQl9Ci0JCWlmIChuZXdzdGF0ZSA9PSBQYXJzZVN0YXRlX0NvbnRpbnVlKSB7CisJCWlmIChuZXdzdGF0ZSA9PSBwYXJzZV9zdGF0ZV9jb250aW51ZSkKIAkJCWNvbnRpbnVlOwotCQl9Ci0JCWVsc2UgaWYgKChuZXdzdGF0ZSA9PSBQYXJzZVN0YXRlX05leHRGcmFtZSkgfHwgKG5ld3N0YXRlID09IFBhcnNlU3RhdGVfT3V0KSkgeworCQlpZiAoKG5ld3N0YXRlID09IHBhcnNlX3N0YXRlX25leHRfZnJhbWUpIHx8IChuZXdzdGF0ZSA9PSBwYXJzZV9zdGF0ZV9vdXQpKQogCQkJYnJlYWs7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlyZXR1cm47CS8qIFBhcnNlU3RhdGVfRW5kUGFyc2UgKi8KLQkJfQorCQlyZXR1cm47CS8qIHBhcnNlX3N0YXRlX2VuZF9wYXJzZSAqLwogCX0KIAotCWlmIChuZXdzdGF0ZSA9PSBQYXJzZVN0YXRlX05leHRGcmFtZSkgewotCQlmcmFtZS0+Z3JhYnN0YXRlID0gRnJhbWVTdGF0ZV9Eb25lOworCWlmIChuZXdzdGF0ZSA9PSBwYXJzZV9zdGF0ZV9uZXh0X2ZyYW1lKSB7CisJCWZyYW1lLT5ncmFic3RhdGUgPSBmcmFtZV9zdGF0ZV9kb25lOwogCQlkb19nZXR0aW1lb2ZkYXkoJihmcmFtZS0+dGltZXN0YW1wKSk7CiAJCWZyYW1lLT5zZXF1ZW5jZSA9IHVzYnZpc2lvbi0+ZnJhbWVfbnVtOwogCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZ1c2J2aXNpb24tPnF1ZXVlX2xvY2ssIGxvY2tfZmxhZ3MpOwogCQlsaXN0X21vdmVfdGFpbCgmKGZyYW1lLT5mcmFtZSksICZ1c2J2aXNpb24tPm91dHF1ZXVlKTsKLQkJdXNidmlzaW9uLT5jdXJGcmFtZSA9IE5VTEw7CisJCXVzYnZpc2lvbi0+Y3VyX2ZyYW1lID0gTlVMTDsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXNidmlzaW9uLT5xdWV1ZV9sb2NrLCBsb2NrX2ZsYWdzKTsKIAogCQl1c2J2aXNpb24tPmZyYW1lX251bSsrOwpAQCAtMTM0NCwxMCArMTI3OCw5IEBACiAJCQlQREVCVUcoREJHX1BBUlNFLCAiV2FrZSB1cCAhIik7CiAJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnVzYnZpc2lvbi0+d2FpdF9mcmFtZSk7CiAJCX0KKwl9IGVsc2UgeworCQlmcmFtZS0+Z3JhYnN0YXRlID0gZnJhbWVfc3RhdGVfZ3JhYmJpbmc7CiAJfQotCWVsc2UKLQkJZnJhbWUtPmdyYWJzdGF0ZSA9IEZyYW1lU3RhdGVfR3JhYmJpbmc7Ci0KIAogCS8qIFVwZGF0ZSB0aGUgZnJhbWUncyB1bmNvbXByZXNzZWQgbGVuZ3RoLiAqLwogCWZyYW1lLT5zY2FubGVuZ3RoICs9IGNvcHlsZW47CkBAIC0xMzcwLDM0ICsxMzAzLDMyIEBACiAJCXBhY2tldF9kYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXIgKyB1cmItPmlzb19mcmFtZV9kZXNjW2ldLm9mZnNldDsKIAogCQkvKiBEZXRlY3QgYW5kIGlnbm9yZSBlcnJvcmVkIHBhY2tldHMgKi8KLQkJaWYgKHBhY2tldF9zdGF0KSB7CS8vIHBhY2tldF9zdGF0ICE9IDAgPz8/Pz8/Pz8/Pz8/PworCQlpZiAocGFja2V0X3N0YXQpIHsJLyogcGFja2V0X3N0YXQgIT0gMCA/Pz8/Pz8/Pz8/Pz8/ICovCiAJCQlQREVCVUcoREJHX0lTT0MsICJkYXRhIGVycm9yOiBbJWRdIGxlbj0lZCwgc3RhdHVzPSVYIiwgaSwgcGFja2V0X2xlbiwgcGFja2V0X3N0YXQpOwotCQkJdXNidmlzaW9uLT5pc29jRXJyQ291bnQrKzsKKwkJCXVzYnZpc2lvbi0+aXNvY19lcnJfY291bnQrKzsKIAkJCWNvbnRpbnVlOwogCQl9CiAKIAkJLyogRGV0ZWN0IGFuZCBpZ25vcmUgZW1wdHkgcGFja2V0cyAqLwogCQlpZiAocGFja2V0X2xlbiA8IDApIHsKIAkJCVBERUJVRyhEQkdfSVNPQywgImVycm9yIHBhY2tldCBbJWRdIiwgaSk7Ci0JCQl1c2J2aXNpb24tPmlzb2NTa2lwQ291bnQrKzsKKwkJCXVzYnZpc2lvbi0+aXNvY19za2lwX2NvdW50Kys7CiAJCQljb250aW51ZTsKLQkJfQotCQllbHNlIGlmIChwYWNrZXRfbGVuID09IDApIHsJLyogRnJhbWUgZW5kID8/Pz8/ICovCisJCX0gZWxzZSBpZiAocGFja2V0X2xlbiA9PSAwKSB7CS8qIEZyYW1lIGVuZCA/Pz8/PyAqLwogCQkJUERFQlVHKERCR19JU09DLCAibnVsbCBwYWNrZXQgWyVkXSIsIGkpOwotCQkJdXNidmlzaW9uLT5pc29jc3RhdGU9SXNvY1N0YXRlX05vRnJhbWU7Ci0JCQl1c2J2aXNpb24tPmlzb2NTa2lwQ291bnQrKzsKKwkJCXVzYnZpc2lvbi0+aXNvY3N0YXRlID0gaXNvY19zdGF0ZV9ub19mcmFtZTsKKwkJCXVzYnZpc2lvbi0+aXNvY19za2lwX2NvdW50Kys7CiAJCQljb250aW51ZTsKLQkJfQotCQllbHNlIGlmIChwYWNrZXRfbGVuID4gdXNidmlzaW9uLT5pc29jUGFja2V0U2l6ZSkgewotCQkJUERFQlVHKERCR19JU09DLCAicGFja2V0WyVkXSA+IGlzb2NQYWNrZXRTaXplIiwgaSk7Ci0JCQl1c2J2aXNpb24tPmlzb2NTa2lwQ291bnQrKzsKKwkJfSBlbHNlIGlmIChwYWNrZXRfbGVuID4gdXNidmlzaW9uLT5pc29jX3BhY2tldF9zaXplKSB7CisJCQlQREVCVUcoREJHX0lTT0MsICJwYWNrZXRbJWRdID4gaXNvY19wYWNrZXRfc2l6ZSIsIGkpOworCQkJdXNidmlzaW9uLT5pc29jX3NraXBfY291bnQrKzsKIAkJCWNvbnRpbnVlOwogCQl9CiAKIAkJUERFQlVHKERCR19JU09DLCAicGFja2V0IG9rIFslZF0gbGVuPSVkIiwgaSwgcGFja2V0X2xlbik7CiAKLQkJaWYgKHVzYnZpc2lvbi0+aXNvY3N0YXRlPT1Jc29jU3RhdGVfTm9GcmFtZSkgeyAvL25ldyBmcmFtZSBiZWdpbnMKLQkJCXVzYnZpc2lvbi0+aXNvY3N0YXRlPUlzb2NTdGF0ZV9JbkZyYW1lOworCQlpZiAodXNidmlzaW9uLT5pc29jc3RhdGUgPT0gaXNvY19zdGF0ZV9ub19mcmFtZSkgeyAvKiBuZXcgZnJhbWUgYmVnaW5zICovCisJCQl1c2J2aXNpb24tPmlzb2NzdGF0ZSA9IGlzb2Nfc3RhdGVfaW5fZnJhbWU7CiAJCQlzY3JhdGNoX21hcmtfaGVhZGVyKHVzYnZpc2lvbik7CiAJCQl1c2J2aXNpb25fbWVhc3VyZV9iYW5kd2lkdGgodXNidmlzaW9uKTsKIAkJCVBERUJVRyhEQkdfSVNPQywgInBhY2tldCB3aXRoIGhlYWRlciIpOwpAQCAtMTQxMiw3ICsxMzQzLDYgQEAKIAkJICogeW91ciBmYXZvcml0ZSBldmlsIGhlcmUuCiAJCSAqLwogCQlpZiAoc2NyYXRjaF9mcmVlKHVzYnZpc2lvbikgPCBwYWNrZXRfbGVuKSB7Ci0KIAkJCXVzYnZpc2lvbi0+c2NyYXRjaF9vdmZfY291bnQrKzsKIAkJCVBERUJVRyhEQkdfSVNPQywgInNjcmF0Y2ggYnVmIG92ZXJmbG93ISBzY3JfbGVuOiAlZCwgbjogJWQiLAogCQkJICAgICAgIHNjcmF0Y2hfbGVuKHVzYnZpc2lvbiksIHBhY2tldF9sZW4pOwpAQCAtMTQyMiwxMiArMTM1MiwxMyBAQAogCQkvKiBOb3cgd2Uga25vdyB0aGF0IHRoZXJlIGlzIGVub3VnaCByb29tIGluIHNjcmF0Y2ggYnVmZmVyICovCiAJCXNjcmF0Y2hfcHV0KHVzYnZpc2lvbiwgcGFja2V0X2RhdGEsIHBhY2tldF9sZW4pOwogCQl0b3RsZW4gKz0gcGFja2V0X2xlbjsKLQkJdXNidmlzaW9uLT5pc29jRGF0YUNvdW50ICs9IHBhY2tldF9sZW47Ci0JCXVzYnZpc2lvbi0+aXNvY1BhY2tldENvdW50Kys7CisJCXVzYnZpc2lvbi0+aXNvY19kYXRhX2NvdW50ICs9IHBhY2tldF9sZW47CisJCXVzYnZpc2lvbi0+aXNvY19wYWNrZXRfY291bnQrKzsKIAl9CiAjaWYgRU5BQkxFX0hFWERVTVAKIAlpZiAodG90bGVuID4gMCkgewogCQlzdGF0aWMgaW50IGZvbzsKKwogCQlpZiAoZm9vIDwgMSkgewogCQkJcHJpbnRrKEtFUk5fREVCVUcgIislZC5cbiIsIHVzYnZpc2lvbi0+c2NyYXRjaGxlbik7CiAJCQl1c2J2aXNpb25faGV4ZHVtcChkYXRhMCwgKHRvdGxlbiA+IDY0KSA/IDY0IDogdG90bGVuKTsKQEAgLTE0MzUsMTYgKzEzNjYsMTYgQEAKIAkJfQogCX0KICNlbmRpZgotIHJldHVybiB0b3RsZW47CisJcmV0dXJuIHRvdGxlbjsKIH0KIAotc3RhdGljIHZvaWQgdXNidmlzaW9uX2lzb2NJcnEoc3RydWN0IHVyYiAqdXJiKQorc3RhdGljIHZvaWQgdXNidmlzaW9uX2lzb2NfaXJxKHN0cnVjdCB1cmIgKnVyYikKIHsKLQlpbnQgZXJyQ29kZSA9IDA7CisJaW50IGVycl9jb2RlID0gMDsKIAlpbnQgbGVuOwogCXN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24gPSB1cmItPmNvbnRleHQ7CiAJaW50IGk7Ci0JdW5zaWduZWQgbG9uZyBzdGFydFRpbWUgPSBqaWZmaWVzOworCXVuc2lnbmVkIGxvbmcgc3RhcnRfdGltZSA9IGppZmZpZXM7CiAJc3RydWN0IHVzYnZpc2lvbl9mcmFtZSAqKmY7CiAKIAkvKiBXZSBkb24ndCB3YW50IHRvIGRvIGFueXRoaW5nIGlmIHdlIGFyZSBhYm91dCB0byBiZSByZW1vdmVkISAqLwpAQCAtMTQ1MiwxOCArMTM4MywxNyBAQAogCQlyZXR1cm47CiAKIAkvKiBhbnkgdXJiIHdpdGggd3Jvbmcgc3RhdHVzIGlzIGlnbm9yZWQgd2l0aG91dCBhY2tub3dsZWRnZW1lbnQgKi8KLQlpZiAodXJiLT5zdGF0dXMgPT0gLUVOT0VOVCkgeworCWlmICh1cmItPnN0YXR1cyA9PSAtRU5PRU5UKQogCQlyZXR1cm47Ci0JfQogCi0JZiA9ICZ1c2J2aXNpb24tPmN1ckZyYW1lOworCWYgPSAmdXNidmlzaW9uLT5jdXJfZnJhbWU7CiAKIAkvKiBNYW5hZ2Ugc3RyZWFtaW5nIGludGVycnVwdGlvbiAqLwotCWlmICh1c2J2aXNpb24tPnN0cmVhbWluZyA9PSBTdHJlYW1fSW50ZXJydXB0KSB7Ci0JCXVzYnZpc2lvbi0+c3RyZWFtaW5nID0gU3RyZWFtX0lkbGU7CisJaWYgKHVzYnZpc2lvbi0+c3RyZWFtaW5nID09IHN0cmVhbV9pbnRlcnJ1cHQpIHsKKwkJdXNidmlzaW9uLT5zdHJlYW1pbmcgPSBzdHJlYW1faWRsZTsKIAkJaWYgKCgqZikpIHsKLQkJCSgqZiktPmdyYWJzdGF0ZSA9IEZyYW1lU3RhdGVfUmVhZHk7Ci0JCQkoKmYpLT5zY2Fuc3RhdGUgPSBTY2FuU3RhdGVfU2Nhbm5pbmc7CisJCQkoKmYpLT5ncmFic3RhdGUgPSBmcmFtZV9zdGF0ZV9yZWFkeTsKKwkJCSgqZiktPnNjYW5zdGF0ZSA9IHNjYW5fc3RhdGVfc2Nhbm5pbmc7CiAJCX0KIAkJUERFQlVHKERCR19JUlEsICJzdHJlYW0gaW50ZXJydXB0ZWQiKTsKIAkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ1c2J2aXNpb24tPndhaXRfc3RyZWFtKTsKQEAgLTE0NzIsMzUgKzE0MDIsMzIgQEAKIAkvKiBDb3B5IHRoZSBkYXRhIHJlY2VpdmVkIGludG8gb3VyIHNjcmF0Y2ggYnVmZmVyICovCiAJbGVuID0gdXNidmlzaW9uX2NvbXByZXNzX2lzb2Nocm9ub3VzKHVzYnZpc2lvbiwgdXJiKTsKIAotCXVzYnZpc2lvbi0+aXNvY1VyYkNvdW50Kys7CisJdXNidmlzaW9uLT5pc29jX3VyYl9jb3VudCsrOwogCXVzYnZpc2lvbi0+dXJiX2xlbmd0aCA9IGxlbjsKIAotCWlmICh1c2J2aXNpb24tPnN0cmVhbWluZyA9PSBTdHJlYW1fT24pIHsKLQorCWlmICh1c2J2aXNpb24tPnN0cmVhbWluZyA9PSBzdHJlYW1fb24pIHsKIAkJLyogSWYgd2UgY29sbGVjdGVkIGVub3VnaCBkYXRhIGxldCdzIHBhcnNlISAqLwotCQlpZiAoKHNjcmF0Y2hfbGVuKHVzYnZpc2lvbikgPiBVU0JWSVNJT05fSEVBREVSX0xFTkdUSCkgJiYKLQkJICAgICghbGlzdF9lbXB0eSgmKHVzYnZpc2lvbi0+aW5xdWV1ZSkpKSApIHsKKwkJaWYgKHNjcmF0Y2hfbGVuKHVzYnZpc2lvbikgPiBVU0JWSVNJT05fSEVBREVSX0xFTkdUSCAmJgorCQkgICAgIWxpc3RfZW1wdHkoJih1c2J2aXNpb24tPmlucXVldWUpKSkgewogCQkJaWYgKCEoKmYpKSB7CiAJCQkJKCpmKSA9IGxpc3RfZW50cnkodXNidmlzaW9uLT5pbnF1ZXVlLm5leHQsCiAJCQkJCQkgIHN0cnVjdCB1c2J2aXNpb25fZnJhbWUsCiAJCQkJCQkgIGZyYW1lKTsKIAkJCX0KIAkJCXVzYnZpc2lvbl9wYXJzZV9kYXRhKHVzYnZpc2lvbik7Ci0JCX0KLQkJZWxzZSB7Ci0JCQkvKklmIHdlIGRvbid0IGhhdmUgYSBmcmFtZQorCQl9IGVsc2UgeworCQkJLyogSWYgd2UgZG9uJ3QgaGF2ZSBhIGZyYW1lCiAJCQkgIHdlJ3JlIGN1cnJlbnQgd29ya2luZyBvbiwgY29tcGxhaW4gKi8KIAkJCVBERUJVRyhEQkdfSVJRLAogCQkJICAgICAgICJyZWNlaXZlZCBkYXRhLCBidXQgbm8gb25lIG5lZWRzIGl0Iik7CiAJCQlzY3JhdGNoX3Jlc2V0KHVzYnZpc2lvbik7CiAJCX0KLQl9Ci0JZWxzZSB7CisJfSBlbHNlIHsKIAkJUERFQlVHKERCR19JUlEsICJyZWNlaXZlZCBkYXRhLCBidXQgbm8gb25lIG5lZWRzIGl0Iik7CiAJCXNjcmF0Y2hfcmVzZXQodXNidmlzaW9uKTsKIAl9CiAKLQl1c2J2aXNpb24tPnRpbWVJbklycSArPSBqaWZmaWVzIC0gc3RhcnRUaW1lOworCXVzYnZpc2lvbi0+dGltZV9pbl9pcnEgKz0gamlmZmllcyAtIHN0YXJ0X3RpbWU7CiAKIAlmb3IgKGkgPSAwOyBpIDwgVVNCVklTSU9OX1VSQl9GUkFNRVM7IGkrKykgewogCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1cyA9IDA7CkBAIC0xNTA5LDEyICsxNDM2LDEyIEBACiAKIAl1cmItPnN0YXR1cyA9IDA7CiAJdXJiLT5kZXYgPSB1c2J2aXNpb24tPmRldjsKLQllcnJDb2RlID0gdXNiX3N1Ym1pdF91cmIgKHVyYiwgR0ZQX0FUT01JQyk7CisJZXJyX2NvZGUgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwogCi0JaWYoZXJyQ29kZSkgeworCWlmIChlcnJfY29kZSkgewogCQlkZXZfZXJyKCZ1c2J2aXNpb24tPmRldi0+ZGV2LAogCQkJIiVzOiB1c2Jfc3VibWl0X3VyYiBmYWlsZWQ6IGVycm9yICVkXG4iLAotCQkJCV9fZnVuY19fLCBlcnJDb2RlKTsKKwkJCQlfX2Z1bmNfXywgZXJyX2NvZGUpOwogCX0KIAogCXJldHVybjsKQEAgLTE1MzMsMjEgKzE0NjAsMjEgQEAKIAogaW50IHVzYnZpc2lvbl9yZWFkX3JlZyhzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uLCB1bnNpZ25lZCBjaGFyIHJlZykKIHsKLQlpbnQgZXJyQ29kZSA9IDA7CisJaW50IGVycl9jb2RlID0gMDsKIAl1bnNpZ25lZCBjaGFyIGJ1ZmZlclsxXTsKIAogCWlmICghVVNCVklTSU9OX0lTX09QRVJBVElPTkFMKHVzYnZpc2lvbikpCiAJCXJldHVybiAtMTsKIAotCWVyckNvZGUgPSB1c2JfY29udHJvbF9tc2codXNidmlzaW9uLT5kZXYsIHVzYl9yY3ZjdHJscGlwZSh1c2J2aXNpb24tPmRldiwgMSksCisJZXJyX2NvZGUgPSB1c2JfY29udHJvbF9tc2codXNidmlzaW9uLT5kZXYsIHVzYl9yY3ZjdHJscGlwZSh1c2J2aXNpb24tPmRldiwgMSksCiAJCQkJVVNCVklTSU9OX09QX0NPREUsCiAJCQkJVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9FTkRQT0lOVCwKIAkJCQkwLCAoX191MTYpIHJlZywgYnVmZmVyLCAxLCBIWik7CiAKLQlpZiAoZXJyQ29kZSA8IDApIHsKKwlpZiAoZXJyX2NvZGUgPCAwKSB7CiAJCWRldl9lcnIoJnVzYnZpc2lvbi0+ZGV2LT5kZXYsCi0JCQkiJXM6IGZhaWxlZDogZXJyb3IgJWRcbiIsIF9fZnVuY19fLCBlcnJDb2RlKTsKLQkJcmV0dXJuIGVyckNvZGU7CisJCQkiJXM6IGZhaWxlZDogZXJyb3IgJWRcbiIsIF9fZnVuY19fLCBlcnJfY29kZSk7CisJCXJldHVybiBlcnJfY29kZTsKIAl9CiAJcmV0dXJuIGJ1ZmZlclswXTsKIH0KQEAgLTE1NjMsMTc5ICsxNDkwLDE3NiBAQAogaW50IHVzYnZpc2lvbl93cml0ZV9yZWcoc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiwgdW5zaWduZWQgY2hhciByZWcsCiAJCQkgICAgdW5zaWduZWQgY2hhciB2YWx1ZSkKIHsKLQlpbnQgZXJyQ29kZSA9IDA7CisJaW50IGVycl9jb2RlID0gMDsKIAogCWlmICghVVNCVklTSU9OX0lTX09QRVJBVElPTkFMKHVzYnZpc2lvbikpCiAJCXJldHVybiAwOwogCi0JZXJyQ29kZSA9IHVzYl9jb250cm9sX21zZyh1c2J2aXNpb24tPmRldiwgdXNiX3NuZGN0cmxwaXBlKHVzYnZpc2lvbi0+ZGV2LCAxKSwKKwllcnJfY29kZSA9IHVzYl9jb250cm9sX21zZyh1c2J2aXNpb24tPmRldiwgdXNiX3NuZGN0cmxwaXBlKHVzYnZpc2lvbi0+ZGV2LCAxKSwKIAkJCQlVU0JWSVNJT05fT1BfQ09ERSwKIAkJCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8CiAJCQkJVVNCX1JFQ0lQX0VORFBPSU5ULCAwLCAoX191MTYpIHJlZywgJnZhbHVlLCAxLCBIWik7CiAKLQlpZiAoZXJyQ29kZSA8IDApIHsKKwlpZiAoZXJyX2NvZGUgPCAwKSB7CiAJCWRldl9lcnIoJnVzYnZpc2lvbi0+ZGV2LT5kZXYsCi0JCQkiJXM6IGZhaWxlZDogZXJyb3IgJWRcbiIsIF9fZnVuY19fLCBlcnJDb2RlKTsKKwkJCSIlczogZmFpbGVkOiBlcnJvciAlZFxuIiwgX19mdW5jX18sIGVycl9jb2RlKTsKIAl9Ci0JcmV0dXJuIGVyckNvZGU7CisJcmV0dXJuIGVycl9jb2RlOwogfQogCiAKLXN0YXRpYyB2b2lkIHVzYnZpc2lvbl9jdHJsVXJiX2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYikKK3N0YXRpYyB2b2lkIHVzYnZpc2lvbl9jdHJsX3VyYl9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpCiB7CiAJc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9IChzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqKXVyYi0+Y29udGV4dDsKIAogCVBERUJVRyhEQkdfSVJRLCAiIik7Ci0JdXNidmlzaW9uLT5jdHJsVXJiQnVzeSA9IDA7Ci0JaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJnVzYnZpc2lvbi0+Y3RybFVyYl93cSkpIHsKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ1c2J2aXNpb24tPmN0cmxVcmJfd3EpOwotCX0KKwl1c2J2aXNpb24tPmN0cmxfdXJiX2J1c3kgPSAwOworCWlmICh3YWl0cXVldWVfYWN0aXZlKCZ1c2J2aXNpb24tPmN0cmxfdXJiX3dxKSkKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ1c2J2aXNpb24tPmN0cmxfdXJiX3dxKTsKIH0KIAogCi1zdGF0aWMgaW50IHVzYnZpc2lvbl93cml0ZV9yZWdfaXJxKHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24saW50IGFkZHJlc3MsCi0JCQkJCQkJCQl1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgbGVuKQorc3RhdGljIGludCB1c2J2aXNpb25fd3JpdGVfcmVnX2lycShzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uLCBpbnQgYWRkcmVzcywKKwkJCQl1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgbGVuKQogewotCWludCBlcnJDb2RlID0gMDsKKwlpbnQgZXJyX2NvZGUgPSAwOwogCiAJUERFQlVHKERCR19JUlEsICIiKTsKLQlpZiAobGVuID4gOCkgeworCWlmIChsZW4gPiA4KQogCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0JaWYgKHVzYnZpc2lvbi0+Y3RybFVyYkJ1c3kpIHsKKwlpZiAodXNidmlzaW9uLT5jdHJsX3VyYl9idXN5KQogCQlyZXR1cm4gLUVCVVNZOwotCX0KLQl1c2J2aXNpb24tPmN0cmxVcmJCdXN5ID0gMTsKKwl1c2J2aXNpb24tPmN0cmxfdXJiX2J1c3kgPSAxOwogCi0JdXNidmlzaW9uLT5jdHJsVXJiU2V0dXAuYlJlcXVlc3RUeXBlID0gVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfRU5EUE9JTlQ7Ci0JdXNidmlzaW9uLT5jdHJsVXJiU2V0dXAuYlJlcXVlc3QgICAgID0gVVNCVklTSU9OX09QX0NPREU7Ci0JdXNidmlzaW9uLT5jdHJsVXJiU2V0dXAud1ZhbHVlICAgICAgID0gMDsKLQl1c2J2aXNpb24tPmN0cmxVcmJTZXR1cC53SW5kZXggICAgICAgPSBjcHVfdG9fbGUxNihhZGRyZXNzKTsKLQl1c2J2aXNpb24tPmN0cmxVcmJTZXR1cC53TGVuZ3RoICAgICAgPSBjcHVfdG9fbGUxNihsZW4pOwotCXVzYl9maWxsX2NvbnRyb2xfdXJiICh1c2J2aXNpb24tPmN0cmxVcmIsIHVzYnZpc2lvbi0+ZGV2LAorCXVzYnZpc2lvbi0+Y3RybF91cmJfc2V0dXAuYlJlcXVlc3RUeXBlID0gVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfRU5EUE9JTlQ7CisJdXNidmlzaW9uLT5jdHJsX3VyYl9zZXR1cC5iUmVxdWVzdCAgICAgPSBVU0JWSVNJT05fT1BfQ09ERTsKKwl1c2J2aXNpb24tPmN0cmxfdXJiX3NldHVwLndWYWx1ZSAgICAgICA9IDA7CisJdXNidmlzaW9uLT5jdHJsX3VyYl9zZXR1cC53SW5kZXggICAgICAgPSBjcHVfdG9fbGUxNihhZGRyZXNzKTsKKwl1c2J2aXNpb24tPmN0cmxfdXJiX3NldHVwLndMZW5ndGggICAgICA9IGNwdV90b19sZTE2KGxlbik7CisJdXNiX2ZpbGxfY29udHJvbF91cmIodXNidmlzaW9uLT5jdHJsX3VyYiwgdXNidmlzaW9uLT5kZXYsCiAJCQkJCQkJdXNiX3NuZGN0cmxwaXBlKHVzYnZpc2lvbi0+ZGV2LCAxKSwKLQkJCQkJCQkodW5zaWduZWQgY2hhciAqKSZ1c2J2aXNpb24tPmN0cmxVcmJTZXR1cCwKLQkJCQkJCQkodm9pZCAqKXVzYnZpc2lvbi0+Y3RybFVyYkJ1ZmZlciwgbGVuLAotCQkJCQkJCXVzYnZpc2lvbl9jdHJsVXJiX2NvbXBsZXRlLAorCQkJCQkJCSh1bnNpZ25lZCBjaGFyICopJnVzYnZpc2lvbi0+Y3RybF91cmJfc2V0dXAsCisJCQkJCQkJKHZvaWQgKil1c2J2aXNpb24tPmN0cmxfdXJiX2J1ZmZlciwgbGVuLAorCQkJCQkJCXVzYnZpc2lvbl9jdHJsX3VyYl9jb21wbGV0ZSwKIAkJCQkJCQkodm9pZCAqKXVzYnZpc2lvbik7CiAKLQltZW1jcHkodXNidmlzaW9uLT5jdHJsVXJiQnVmZmVyLCBkYXRhLCBsZW4pOworCW1lbWNweSh1c2J2aXNpb24tPmN0cmxfdXJiX2J1ZmZlciwgZGF0YSwgbGVuKTsKIAotCWVyckNvZGUgPSB1c2Jfc3VibWl0X3VyYih1c2J2aXNpb24tPmN0cmxVcmIsIEdGUF9BVE9NSUMpOwotCWlmIChlcnJDb2RlIDwgMCkgewotCQkvLyBlcnJvciBpbiB1c2Jfc3VibWl0X3VyYigpCi0JCXVzYnZpc2lvbi0+Y3RybFVyYkJ1c3kgPSAwOworCWVycl9jb2RlID0gdXNiX3N1Ym1pdF91cmIodXNidmlzaW9uLT5jdHJsX3VyYiwgR0ZQX0FUT01JQyk7CisJaWYgKGVycl9jb2RlIDwgMCkgeworCQkvKiBlcnJvciBpbiB1c2Jfc3VibWl0X3VyYigpICovCisJCXVzYnZpc2lvbi0+Y3RybF91cmJfYnVzeSA9IDA7CiAJfQotCVBERUJVRyhEQkdfSVJRLCAic3VibWl0ICVkIGJ5dGU6IGVycm9yICVkIiwgbGVuLCBlcnJDb2RlKTsKLQlyZXR1cm4gZXJyQ29kZTsKKwlQREVCVUcoREJHX0lSUSwgInN1Ym1pdCAlZCBieXRlOiBlcnJvciAlZCIsIGxlbiwgZXJyX2NvZGUpOworCXJldHVybiBlcnJfY29kZTsKIH0KIAogCiBzdGF0aWMgaW50IHVzYnZpc2lvbl9pbml0X2NvbXByZXNzaW9uKHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24pCiB7Ci0JaW50IGVyckNvZGUgPSAwOworCWludCBlcnJfY29kZSA9IDA7CiAKLQl1c2J2aXNpb24tPmxhc3RJc29jRnJhbWVOdW0gPSAtMTsKLQl1c2J2aXNpb24tPmlzb2NEYXRhQ291bnQgPSAwOwotCXVzYnZpc2lvbi0+aXNvY1BhY2tldENvdW50ID0gMDsKLQl1c2J2aXNpb24tPmlzb2NTa2lwQ291bnQgPSAwOwotCXVzYnZpc2lvbi0+Y29tcHJMZXZlbCA9IDUwOwotCXVzYnZpc2lvbi0+bGFzdENvbXByTGV2ZWwgPSAtMTsKLQl1c2J2aXNpb24tPmlzb2NVcmJDb3VudCA9IDA7Ci0JdXNidmlzaW9uLT5yZXF1ZXN0SW50cmEgPSAxOwotCXVzYnZpc2lvbi0+aXNvY01lYXN1cmVCYW5kd2lkdGhDb3VudCA9IDA7CisJdXNidmlzaW9uLT5sYXN0X2lzb2NfZnJhbWVfbnVtID0gLTE7CisJdXNidmlzaW9uLT5pc29jX2RhdGFfY291bnQgPSAwOworCXVzYnZpc2lvbi0+aXNvY19wYWNrZXRfY291bnQgPSAwOworCXVzYnZpc2lvbi0+aXNvY19za2lwX2NvdW50ID0gMDsKKwl1c2J2aXNpb24tPmNvbXByX2xldmVsID0gNTA7CisJdXNidmlzaW9uLT5sYXN0X2NvbXByX2xldmVsID0gLTE7CisJdXNidmlzaW9uLT5pc29jX3VyYl9jb3VudCA9IDA7CisJdXNidmlzaW9uLT5yZXF1ZXN0X2ludHJhID0gMTsKKwl1c2J2aXNpb24tPmlzb2NfbWVhc3VyZV9iYW5kd2lkdGhfY291bnQgPSAwOwogCi0JcmV0dXJuIGVyckNvZGU7CisJcmV0dXJuIGVycl9jb2RlOwogfQogCiAvKiB0aGlzIGZ1bmN0aW9uIG1lYXN1cmVzIHRoZSB1c2VkIGJhbmR3aWR0aCBzaW5jZSBsYXN0IGNhbGwKICAqIHJldHVybjogICAgMCA6IG5vIGVycm9yCi0gKiBzZXRzIHVzZWRCYW5kd2lkdGggdG8gMS0xMDAgOiAxLTEwMCUgb2YgZnVsbCBiYW5kd2lkdGggcmVzcC4gdG8gaXNvY1BhY2tldFNpemUKKyAqIHNldHMgdXNlZF9iYW5kd2lkdGggdG8gMS0xMDAgOiAxLTEwMCUgb2YgZnVsbCBiYW5kd2lkdGggcmVzcC4gdG8gaXNvY19wYWNrZXRfc2l6ZQogICovCi1zdGF0aWMgaW50IHVzYnZpc2lvbl9tZWFzdXJlX2JhbmR3aWR0aCAoc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbikKK3N0YXRpYyBpbnQgdXNidmlzaW9uX21lYXN1cmVfYmFuZHdpZHRoKHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24pCiB7Ci0JaW50IGVyckNvZGUgPSAwOworCWludCBlcnJfY29kZSA9IDA7CiAKLQlpZiAodXNidmlzaW9uLT5pc29jTWVhc3VyZUJhbmR3aWR0aENvdW50IDwgMikgeyAvLyB0aGlzIGdpdmVzIGFuIGF2ZXJhZ2UgYmFuZHdpZHRoIG9mIDMgZnJhbWVzCi0JCXVzYnZpc2lvbi0+aXNvY01lYXN1cmVCYW5kd2lkdGhDb3VudCsrOwotCQlyZXR1cm4gZXJyQ29kZTsKKwlpZiAodXNidmlzaW9uLT5pc29jX21lYXN1cmVfYmFuZHdpZHRoX2NvdW50IDwgMikgeyAvKiB0aGlzIGdpdmVzIGFuIGF2ZXJhZ2UgYmFuZHdpZHRoIG9mIDMgZnJhbWVzICovCisJCXVzYnZpc2lvbi0+aXNvY19tZWFzdXJlX2JhbmR3aWR0aF9jb3VudCsrOworCQlyZXR1cm4gZXJyX2NvZGU7CiAJfQotCWlmICgodXNidmlzaW9uLT5pc29jUGFja2V0U2l6ZSA+IDApICYmICh1c2J2aXNpb24tPmlzb2NQYWNrZXRDb3VudCA+IDApKSB7Ci0JCXVzYnZpc2lvbi0+dXNlZEJhbmR3aWR0aCA9IHVzYnZpc2lvbi0+aXNvY0RhdGFDb3VudCAvCi0JCQkJCSh1c2J2aXNpb24tPmlzb2NQYWNrZXRDb3VudCArIHVzYnZpc2lvbi0+aXNvY1NraXBDb3VudCkgKgotCQkJCQkxMDAgLyB1c2J2aXNpb24tPmlzb2NQYWNrZXRTaXplOworCWlmICgodXNidmlzaW9uLT5pc29jX3BhY2tldF9zaXplID4gMCkgJiYgKHVzYnZpc2lvbi0+aXNvY19wYWNrZXRfY291bnQgPiAwKSkgeworCQl1c2J2aXNpb24tPnVzZWRfYmFuZHdpZHRoID0gdXNidmlzaW9uLT5pc29jX2RhdGFfY291bnQgLworCQkJCQkodXNidmlzaW9uLT5pc29jX3BhY2tldF9jb3VudCArIHVzYnZpc2lvbi0+aXNvY19za2lwX2NvdW50KSAqCisJCQkJCTEwMCAvIHVzYnZpc2lvbi0+aXNvY19wYWNrZXRfc2l6ZTsKIAl9Ci0JdXNidmlzaW9uLT5pc29jTWVhc3VyZUJhbmR3aWR0aENvdW50ID0gMDsKLQl1c2J2aXNpb24tPmlzb2NEYXRhQ291bnQgPSAwOwotCXVzYnZpc2lvbi0+aXNvY1BhY2tldENvdW50ID0gMDsKLQl1c2J2aXNpb24tPmlzb2NTa2lwQ291bnQgPSAwOwotCXJldHVybiBlcnJDb2RlOworCXVzYnZpc2lvbi0+aXNvY19tZWFzdXJlX2JhbmR3aWR0aF9jb3VudCA9IDA7CisJdXNidmlzaW9uLT5pc29jX2RhdGFfY291bnQgPSAwOworCXVzYnZpc2lvbi0+aXNvY19wYWNrZXRfY291bnQgPSAwOworCXVzYnZpc2lvbi0+aXNvY19za2lwX2NvdW50ID0gMDsKKwlyZXR1cm4gZXJyX2NvZGU7CiB9CiAKLXN0YXRpYyBpbnQgdXNidmlzaW9uX2FkanVzdF9jb21wcmVzc2lvbiAoc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbikKK3N0YXRpYyBpbnQgdXNidmlzaW9uX2FkanVzdF9jb21wcmVzc2lvbihzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uKQogewotCWludCBlcnJDb2RlID0gMDsKKwlpbnQgZXJyX2NvZGUgPSAwOwogCXVuc2lnbmVkIGNoYXIgYnVmZmVyWzZdOwogCiAJUERFQlVHKERCR19JUlEsICIiKTsKLQlpZiAoKGFkanVzdENvbXByZXNzaW9uKSAmJiAodXNidmlzaW9uLT51c2VkQmFuZHdpZHRoID4gMCkpIHsKLQkJdXNidmlzaW9uLT5jb21wckxldmVsICs9ICh1c2J2aXNpb24tPnVzZWRCYW5kd2lkdGggLSA5MCkgLyAyOwotCQlSRVNUUklDVF9UT19SQU5HRSh1c2J2aXNpb24tPmNvbXByTGV2ZWwsIDAsIDEwMCk7Ci0JCWlmICh1c2J2aXNpb24tPmNvbXByTGV2ZWwgIT0gdXNidmlzaW9uLT5sYXN0Q29tcHJMZXZlbCkgewotCQkJaW50IGRpc3RvcnNpb247Ci0JCQlpZiAodXNidmlzaW9uLT5icmlkZ2VUeXBlID09IEJSSURHRV9OVDEwMDQgfHwgdXNidmlzaW9uLT5icmlkZ2VUeXBlID09IEJSSURHRV9OVDEwMDUpIHsKLQkJCQlidWZmZXJbMF0gPSAodW5zaWduZWQgY2hhcikoNCArIDE2ICogdXNidmlzaW9uLT5jb21wckxldmVsIC8gMTAwKTsJLy8gUENNIFRocmVzaG9sZCAxCi0JCQkJYnVmZmVyWzFdID0gKHVuc2lnbmVkIGNoYXIpKDQgKyA4ICogdXNidmlzaW9uLT5jb21wckxldmVsIC8gMTAwKTsJLy8gUENNIFRocmVzaG9sZCAyCi0JCQkJZGlzdG9yc2lvbiA9IDcgKyAyNDggKiB1c2J2aXNpb24tPmNvbXByTGV2ZWwgLyAxMDA7Ci0JCQkJYnVmZmVyWzJdID0gKHVuc2lnbmVkIGNoYXIpKGRpc3RvcnNpb24gJiAweEZGKTsJCQkJLy8gQXZlcmFnZSBkaXN0b3JzaW9uIFRocmVzaG9sZCAoaW50ZXIpCi0JCQkJYnVmZmVyWzNdID0gKHVuc2lnbmVkIGNoYXIpKGRpc3RvcnNpb24gJiAweEZGKTsJCQkJLy8gQXZlcmFnZSBkaXN0b3JzaW9uIFRocmVzaG9sZCAoaW50cmEpCi0JCQkJZGlzdG9yc2lvbiA9IDEgKyA0MiAqIHVzYnZpc2lvbi0+Y29tcHJMZXZlbCAvIDEwMDsKLQkJCQlidWZmZXJbNF0gPSAodW5zaWduZWQgY2hhcikoZGlzdG9yc2lvbiAmIDB4RkYpOwkJCQkvLyBNYXhpbXVtIGRpc3RvcnNpb24gVGhyZXNob2xkIChpbnRlcikKLQkJCQlidWZmZXJbNV0gPSAodW5zaWduZWQgY2hhcikoZGlzdG9yc2lvbiAmIDB4RkYpOwkJCQkvLyBNYXhpbXVtIGRpc3RvcnNpb24gVGhyZXNob2xkIChpbnRyYSkKKwlpZiAoKGFkanVzdF9jb21wcmVzc2lvbikgJiYgKHVzYnZpc2lvbi0+dXNlZF9iYW5kd2lkdGggPiAwKSkgeworCQl1c2J2aXNpb24tPmNvbXByX2xldmVsICs9ICh1c2J2aXNpb24tPnVzZWRfYmFuZHdpZHRoIC0gOTApIC8gMjsKKwkJUkVTVFJJQ1RfVE9fUkFOR0UodXNidmlzaW9uLT5jb21wcl9sZXZlbCwgMCwgMTAwKTsKKwkJaWYgKHVzYnZpc2lvbi0+Y29tcHJfbGV2ZWwgIT0gdXNidmlzaW9uLT5sYXN0X2NvbXByX2xldmVsKSB7CisJCQlpbnQgZGlzdG9ydGlvbjsKKworCQkJaWYgKHVzYnZpc2lvbi0+YnJpZGdlX3R5cGUgPT0gQlJJREdFX05UMTAwNCB8fCB1c2J2aXNpb24tPmJyaWRnZV90eXBlID09IEJSSURHRV9OVDEwMDUpIHsKKwkJCQlidWZmZXJbMF0gPSAodW5zaWduZWQgY2hhcikoNCArIDE2ICogdXNidmlzaW9uLT5jb21wcl9sZXZlbCAvIDEwMCk7CS8qIFBDTSBUaHJlc2hvbGQgMSAqLworCQkJCWJ1ZmZlclsxXSA9ICh1bnNpZ25lZCBjaGFyKSg0ICsgOCAqIHVzYnZpc2lvbi0+Y29tcHJfbGV2ZWwgLyAxMDApOwkvKiBQQ00gVGhyZXNob2xkIDIgKi8KKwkJCQlkaXN0b3J0aW9uID0gNyArIDI0OCAqIHVzYnZpc2lvbi0+Y29tcHJfbGV2ZWwgLyAxMDA7CisJCQkJYnVmZmVyWzJdID0gKHVuc2lnbmVkIGNoYXIpKGRpc3RvcnRpb24gJiAweEZGKTsJCQkJLyogQXZlcmFnZSBkaXN0b3J0aW9uIFRocmVzaG9sZCAoaW50ZXIpICovCisJCQkJYnVmZmVyWzNdID0gKHVuc2lnbmVkIGNoYXIpKGRpc3RvcnRpb24gJiAweEZGKTsJCQkJLyogQXZlcmFnZSBkaXN0b3J0aW9uIFRocmVzaG9sZCAoaW50cmEpICovCisJCQkJZGlzdG9ydGlvbiA9IDEgKyA0MiAqIHVzYnZpc2lvbi0+Y29tcHJfbGV2ZWwgLyAxMDA7CisJCQkJYnVmZmVyWzRdID0gKHVuc2lnbmVkIGNoYXIpKGRpc3RvcnRpb24gJiAweEZGKTsJCQkJLyogTWF4aW11bSBkaXN0b3J0aW9uIFRocmVzaG9sZCAoaW50ZXIpICovCisJCQkJYnVmZmVyWzVdID0gKHVuc2lnbmVkIGNoYXIpKGRpc3RvcnRpb24gJiAweEZGKTsJCQkJLyogTWF4aW11bSBkaXN0b3J0aW9uIFRocmVzaG9sZCAoaW50cmEpICovCisJCQl9IGVsc2UgeyAvKiBCUklER0VfTlQxMDAzICovCisJCQkJYnVmZmVyWzBdID0gKHVuc2lnbmVkIGNoYXIpKDQgKyAxNiAqIHVzYnZpc2lvbi0+Y29tcHJfbGV2ZWwgLyAxMDApOwkvKiBQQ00gdGhyZXNob2xkIDEgKi8KKwkJCQlidWZmZXJbMV0gPSAodW5zaWduZWQgY2hhcikoNCArIDggKiB1c2J2aXNpb24tPmNvbXByX2xldmVsIC8gMTAwKTsJLyogUENNIHRocmVzaG9sZCAyICovCisJCQkJZGlzdG9ydGlvbiA9IDIgKyAyNTMgKiB1c2J2aXNpb24tPmNvbXByX2xldmVsIC8gMTAwOworCQkJCWJ1ZmZlclsyXSA9ICh1bnNpZ25lZCBjaGFyKShkaXN0b3J0aW9uICYgMHhGRik7CQkJCS8qIGRpc3RvcnRpb24gdGhyZXNob2xkIGJpdDAtNyAqLworCQkJCWJ1ZmZlclszXSA9IDA7CS8qICh1bnNpZ25lZCBjaGFyKSgoZGlzdG9ydGlvbiA+PiA4KSAmIDB4MEYpOwkJZGlzdG9ydGlvbiB0aHJlc2hvbGQgYml0IDgtMTEgKi8KKwkJCQlkaXN0b3J0aW9uID0gMCArIDQzICogdXNidmlzaW9uLT5jb21wcl9sZXZlbCAvIDEwMDsKKwkJCQlidWZmZXJbNF0gPSAodW5zaWduZWQgY2hhcikoZGlzdG9ydGlvbiAmIDB4RkYpOwkJCQkvKiBtYXhpbXVtIGRpc3RvcnRpb24gYml0MC03ICovCisJCQkJYnVmZmVyWzVdID0gMDsgLyogKHVuc2lnbmVkIGNoYXIpKChkaXN0b3J0aW9uID4+IDgpICYgMHgwMSk7CQltYXhpbXVtIGRpc3RvcnRpb24gYml0IDggKi8KIAkJCX0KLQkJCWVsc2UgeyAvL0JSSURHRV9OVDEwMDMKLQkJCQlidWZmZXJbMF0gPSAodW5zaWduZWQgY2hhcikoNCArIDE2ICogdXNidmlzaW9uLT5jb21wckxldmVsIC8gMTAwKTsJLy8gUENNIHRocmVzaG9sZCAxCi0JCQkJYnVmZmVyWzFdID0gKHVuc2lnbmVkIGNoYXIpKDQgKyA4ICogdXNidmlzaW9uLT5jb21wckxldmVsIC8gMTAwKTsJLy8gUENNIHRocmVzaG9sZCAyCi0JCQkJZGlzdG9yc2lvbiA9IDIgKyAyNTMgKiB1c2J2aXNpb24tPmNvbXByTGV2ZWwgLyAxMDA7Ci0JCQkJYnVmZmVyWzJdID0gKHVuc2lnbmVkIGNoYXIpKGRpc3RvcnNpb24gJiAweEZGKTsJCQkJLy8gZGlzdG9yc2lvbiB0aHJlc2hvbGQgYml0MC03Ci0JCQkJYnVmZmVyWzNdID0gMDsgCS8vKHVuc2lnbmVkIGNoYXIpKChkaXN0b3JzaW9uID4+IDgpICYgMHgwRik7CQkvLyBkaXN0b3JzaW9uIHRocmVzaG9sZCBiaXQgOC0xMQotCQkJCWRpc3RvcnNpb24gPSAwICsgNDMgKiB1c2J2aXNpb24tPmNvbXByTGV2ZWwgLyAxMDA7Ci0JCQkJYnVmZmVyWzRdID0gKHVuc2lnbmVkIGNoYXIpKGRpc3RvcnNpb24gJiAweEZGKTsJCQkJLy8gbWF4aW11bSBkaXN0b3JzaW9uIGJpdDAtNwotCQkJCWJ1ZmZlcls1XSA9IDA7IC8vKHVuc2lnbmVkIGNoYXIpKChkaXN0b3JzaW9uID4+IDgpICYgMHgwMSk7CQkvLyBtYXhpbXVtIGRpc3RvcnNpb24gYml0IDgKLQkJCX0KLQkJCWVyckNvZGUgPSB1c2J2aXNpb25fd3JpdGVfcmVnX2lycSh1c2J2aXNpb24sIFVTQlZJU0lPTl9QQ01fVEhSMSwgYnVmZmVyLCA2KTsKLQkJCWlmIChlcnJDb2RlID09IDApeworCQkJZXJyX2NvZGUgPSB1c2J2aXNpb25fd3JpdGVfcmVnX2lycSh1c2J2aXNpb24sIFVTQlZJU0lPTl9QQ01fVEhSMSwgYnVmZmVyLCA2KTsKKwkJCWlmIChlcnJfY29kZSA9PSAwKSB7CiAJCQkJUERFQlVHKERCR19JUlEsICJuZXcgY29tcHIgcGFyYW1zICUjMDJ4ICUjMDJ4ICUjMDJ4ICUjMDJ4ICUjMDJ4ICUjMDJ4IiwgYnVmZmVyWzBdLAogCQkJCQkJCQlidWZmZXJbMV0sIGJ1ZmZlclsyXSwgYnVmZmVyWzNdLCBidWZmZXJbNF0sIGJ1ZmZlcls1XSk7Ci0JCQkJdXNidmlzaW9uLT5sYXN0Q29tcHJMZXZlbCA9IHVzYnZpc2lvbi0+Y29tcHJMZXZlbDsKKwkJCQl1c2J2aXNpb24tPmxhc3RfY29tcHJfbGV2ZWwgPSB1c2J2aXNpb24tPmNvbXByX2xldmVsOwogCQkJfQogCQl9CiAJfQotCXJldHVybiBlcnJDb2RlOworCXJldHVybiBlcnJfY29kZTsKIH0KIAotc3RhdGljIGludCB1c2J2aXNpb25fcmVxdWVzdF9pbnRyYSAoc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbikKK3N0YXRpYyBpbnQgdXNidmlzaW9uX3JlcXVlc3RfaW50cmEoc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbikKIHsKLQlpbnQgZXJyQ29kZSA9IDA7CisJaW50IGVycl9jb2RlID0gMDsKIAl1bnNpZ25lZCBjaGFyIGJ1ZmZlclsxXTsKIAogCVBERUJVRyhEQkdfSVJRLCAiIik7Ci0JdXNidmlzaW9uLT5yZXF1ZXN0SW50cmEgPSAxOworCXVzYnZpc2lvbi0+cmVxdWVzdF9pbnRyYSA9IDE7CiAJYnVmZmVyWzBdID0gMTsKIAl1c2J2aXNpb25fd3JpdGVfcmVnX2lycSh1c2J2aXNpb24sIFVTQlZJU0lPTl9GT1JDRV9JTlRSQSwgYnVmZmVyLCAxKTsKLQlyZXR1cm4gZXJyQ29kZTsKKwlyZXR1cm4gZXJyX2NvZGU7CiB9CiAKLXN0YXRpYyBpbnQgdXNidmlzaW9uX3VucmVxdWVzdF9pbnRyYSAoc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbikKK3N0YXRpYyBpbnQgdXNidmlzaW9uX3VucmVxdWVzdF9pbnRyYShzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uKQogewotCWludCBlcnJDb2RlID0gMDsKKwlpbnQgZXJyX2NvZGUgPSAwOwogCXVuc2lnbmVkIGNoYXIgYnVmZmVyWzFdOwogCiAJUERFQlVHKERCR19JUlEsICIiKTsKLQl1c2J2aXNpb24tPnJlcXVlc3RJbnRyYSA9IDA7CisJdXNidmlzaW9uLT5yZXF1ZXN0X2ludHJhID0gMDsKIAlidWZmZXJbMF0gPSAwOwogCXVzYnZpc2lvbl93cml0ZV9yZWdfaXJxKHVzYnZpc2lvbiwgVVNCVklTSU9OX0ZPUkNFX0lOVFJBLCBidWZmZXIsIDEpOwotCXJldHVybiBlcnJDb2RlOworCXJldHVybiBlcnJfY29kZTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTE3NDQsMTYgKzE2NjgsMTUgQEAKIAogaW50IHVzYnZpc2lvbl9wb3dlcl9vZmYoc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbikKIHsKLQlpbnQgZXJyQ29kZSA9IDA7CisJaW50IGVycl9jb2RlID0gMDsKIAogCVBERUJVRyhEQkdfRlVOQywgIiIpOwogCi0JZXJyQ29kZSA9IHVzYnZpc2lvbl93cml0ZV9yZWcodXNidmlzaW9uLCBVU0JWSVNJT05fUFdSX1JFRywgVVNCVklTSU9OX1NTUE5EX0VOKTsKLQlpZiAoZXJyQ29kZSA9PSAxKSB7CisJZXJyX2NvZGUgPSB1c2J2aXNpb25fd3JpdGVfcmVnKHVzYnZpc2lvbiwgVVNCVklTSU9OX1BXUl9SRUcsIFVTQlZJU0lPTl9TU1BORF9FTik7CisJaWYgKGVycl9jb2RlID09IDEpCiAJCXVzYnZpc2lvbi0+cG93ZXIgPSAwOwotCX0KLQlQREVCVUcoREJHX0ZVTkMsICIlczogZXJyQ29kZSAlZCIsIChlcnJDb2RlIT0xKT8iRVJST1IiOiJwb3dlciBpcyBvZmYiLCBlcnJDb2RlKTsKLQlyZXR1cm4gZXJyQ29kZTsKKwlQREVCVUcoREJHX0ZVTkMsICIlczogZXJyX2NvZGUgJWQiLCAoZXJyX2NvZGUgIT0gMSkgPyAiRVJST1IiIDogInBvd2VyIGlzIG9mZiIsIGVycl9jb2RlKTsKKwlyZXR1cm4gZXJyX2NvZGU7CiB9CiAKIC8qCkBAIC0xNzY5LDcgKzE2OTIsNyBAQAogCWlmICghVVNCVklTSU9OX0lTX09QRVJBVElPTkFMKHVzYnZpc2lvbikpCiAJCXJldHVybiAwOwogCi0JUERFQlVHKERCR19GVU5DLCAiaXNvY01vZGUgJSMwMngiLCBmb3JtYXQpOworCVBERUJVRyhEQkdfRlVOQywgImlzb2NfbW9kZSAlIzAyeCIsIGZvcm1hdCk7CiAKIAlpZiAoKGZvcm1hdCAhPSBJU09DX01PREVfWVVWNDIyKQogCSAgICAmJiAoZm9ybWF0ICE9IElTT0NfTU9ERV9ZVVY0MjApCkBAIC0xNzc4LDggKzE3MDEsOCBAQAogCQkgICAgICAgZm9ybWF0KTsKIAkJZm9ybWF0ID0gSVNPQ19NT0RFX1lVVjQyMDsKIAl9Ci0JdmFsdWVbMF0gPSAweDBBOyAgLy9UT0RPOiBTZWUgdGhlIGVmZmVjdCBvZiB0aGUgZmlsdGVyCi0JdmFsdWVbMV0gPSBmb3JtYXQ7IC8vIFNldHMgdGhlIFZPX01PREUgcmVnaXN0ZXIgd2hpY2ggZm9sbG93cyBGSUxUX0NPTlQKKwl2YWx1ZVswXSA9IDB4MEE7ICAvKiBUT0RPOiBTZWUgdGhlIGVmZmVjdCBvZiB0aGUgZmlsdGVyICovCisJdmFsdWVbMV0gPSBmb3JtYXQ7IC8qIFNldHMgdGhlIFZPX01PREUgcmVnaXN0ZXIgd2hpY2ggZm9sbG93cyBGSUxUX0NPTlQgKi8KIAlyYyA9IHVzYl9jb250cm9sX21zZyh1c2J2aXNpb24tPmRldiwgdXNiX3NuZGN0cmxwaXBlKHVzYnZpc2lvbi0+ZGV2LCAxKSwKIAkJCSAgICAgVVNCVklTSU9OX09QX0NPREUsCiAJCQkgICAgIFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwKQEAgLTE3OTAsNyArMTcxMyw3IEBACiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVSUk9SPSVkLiBVU0JWSVNJT04gc3RvcHBlZCAtICIKIAkJICAgICAgICJyZWNvbm5lY3Qgb3IgcmVsb2FkIGRyaXZlci5cbiIsIHByb2MsIHJjKTsKIAl9Ci0JdXNidmlzaW9uLT5pc29jTW9kZSA9IGZvcm1hdDsKKwl1c2J2aXNpb24tPmlzb2NfbW9kZSA9IGZvcm1hdDsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTE4MDIsOTYgKzE3MjUsODggQEAKIGludCB1c2J2aXNpb25fc2V0X291dHB1dChzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uLCBpbnQgd2lkdGgsCiAJCQkgaW50IGhlaWdodCkKIHsKLQlpbnQgZXJyQ29kZSA9IDA7Ci0JaW50IFVzYldpZHRoLCBVc2JIZWlnaHQ7Ci0JdW5zaWduZWQgaW50IGZyYW1lUmF0ZT0wLCBmcmFtZURyb3A9MDsKKwlpbnQgZXJyX2NvZGUgPSAwOworCWludCB1c2Jfd2lkdGgsIHVzYl9oZWlnaHQ7CisJdW5zaWduZWQgaW50IGZyYW1lX3JhdGUgPSAwLCBmcmFtZV9kcm9wID0gMDsKIAl1bnNpZ25lZCBjaGFyIHZhbHVlWzRdOwogCi0JaWYgKCFVU0JWSVNJT05fSVNfT1BFUkFUSU9OQUwodXNidmlzaW9uKSkgeworCWlmICghVVNCVklTSU9OX0lTX09QRVJBVElPTkFMKHVzYnZpc2lvbikpCiAJCXJldHVybiAwOwotCX0KIAogCWlmICh3aWR0aCA+IE1BWF9VU0JfV0lEVEgpIHsKLQkJVXNiV2lkdGggPSB3aWR0aCAvIDI7CisJCXVzYl93aWR0aCA9IHdpZHRoIC8gMjsKIAkJdXNidmlzaW9uLT5zdHJldGNoX3dpZHRoID0gMjsKLQl9Ci0JZWxzZSB7Ci0JCVVzYldpZHRoID0gd2lkdGg7CisJfSBlbHNlIHsKKwkJdXNiX3dpZHRoID0gd2lkdGg7CiAJCXVzYnZpc2lvbi0+c3RyZXRjaF93aWR0aCA9IDE7CiAJfQogCiAJaWYgKGhlaWdodCA+IE1BWF9VU0JfSEVJR0hUKSB7Ci0JCVVzYkhlaWdodCA9IGhlaWdodCAvIDI7CisJCXVzYl9oZWlnaHQgPSBoZWlnaHQgLyAyOwogCQl1c2J2aXNpb24tPnN0cmV0Y2hfaGVpZ2h0ID0gMjsKLQl9Ci0JZWxzZSB7Ci0JCVVzYkhlaWdodCA9IGhlaWdodDsKKwl9IGVsc2UgeworCQl1c2JfaGVpZ2h0ID0gaGVpZ2h0OwogCQl1c2J2aXNpb24tPnN0cmV0Y2hfaGVpZ2h0ID0gMTsKIAl9CiAKLQlSRVNUUklDVF9UT19SQU5HRShVc2JXaWR0aCwgTUlOX0ZSQU1FX1dJRFRILCBNQVhfVVNCX1dJRFRIKTsKLQlVc2JXaWR0aCAmPSB+KE1JTl9GUkFNRV9XSURUSC0xKTsKLQlSRVNUUklDVF9UT19SQU5HRShVc2JIZWlnaHQsIE1JTl9GUkFNRV9IRUlHSFQsIE1BWF9VU0JfSEVJR0hUKTsKLQlVc2JIZWlnaHQgJj0gfigxKTsKKwlSRVNUUklDVF9UT19SQU5HRSh1c2Jfd2lkdGgsIE1JTl9GUkFNRV9XSURUSCwgTUFYX1VTQl9XSURUSCk7CisJdXNiX3dpZHRoICY9IH4oTUlOX0ZSQU1FX1dJRFRILTEpOworCVJFU1RSSUNUX1RPX1JBTkdFKHVzYl9oZWlnaHQsIE1JTl9GUkFNRV9IRUlHSFQsIE1BWF9VU0JfSEVJR0hUKTsKKwl1c2JfaGVpZ2h0ICY9IH4oMSk7CiAKIAlQREVCVUcoREJHX0ZVTkMsICJ1c2IgJWR4JWQ7IHNjcmVlbiAlZHglZDsgc3RyZXRjaCAlZHglZCIsCi0JCQkJCQlVc2JXaWR0aCwgVXNiSGVpZ2h0LCB3aWR0aCwgaGVpZ2h0LAorCQkJCQkJdXNiX3dpZHRoLCB1c2JfaGVpZ2h0LCB3aWR0aCwgaGVpZ2h0LAogCQkJCQkJdXNidmlzaW9uLT5zdHJldGNoX3dpZHRoLCB1c2J2aXNpb24tPnN0cmV0Y2hfaGVpZ2h0KTsKIAogCS8qIEknbGwgbm90IHJld3JpdGUgdGhlIHNhbWUgdmFsdWVzICovCi0JaWYgKChVc2JXaWR0aCAhPSB1c2J2aXNpb24tPmN1cndpZHRoKSB8fCAoVXNiSGVpZ2h0ICE9IHVzYnZpc2lvbi0+Y3VyaGVpZ2h0KSkgewotCQl2YWx1ZVswXSA9IFVzYldpZHRoICYgMHhmZjsJCS8vTFNCCi0JCXZhbHVlWzFdID0gKFVzYldpZHRoID4+IDgpICYgMHgwMzsJLy9NU0IKLQkJdmFsdWVbMl0gPSBVc2JIZWlnaHQgJiAweGZmOwkJLy9MU0IKLQkJdmFsdWVbM10gPSAoVXNiSGVpZ2h0ID4+IDgpICYgMHgwMzsJLy9NU0IKKwlpZiAoKHVzYl93aWR0aCAhPSB1c2J2aXNpb24tPmN1cndpZHRoKSB8fCAodXNiX2hlaWdodCAhPSB1c2J2aXNpb24tPmN1cmhlaWdodCkpIHsKKwkJdmFsdWVbMF0gPSB1c2Jfd2lkdGggJiAweGZmOwkJLyogTFNCICovCisJCXZhbHVlWzFdID0gKHVzYl93aWR0aCA+PiA4KSAmIDB4MDM7CS8qIE1TQiAqLworCQl2YWx1ZVsyXSA9IHVzYl9oZWlnaHQgJiAweGZmOwkJLyogTFNCICovCisJCXZhbHVlWzNdID0gKHVzYl9oZWlnaHQgPj4gOCkgJiAweDAzOwkvKiBNU0IgKi8KIAotCQllcnJDb2RlID0gdXNiX2NvbnRyb2xfbXNnKHVzYnZpc2lvbi0+ZGV2LCB1c2Jfc25kY3RybHBpcGUodXNidmlzaW9uLT5kZXYsIDEpLAorCQllcnJfY29kZSA9IHVzYl9jb250cm9sX21zZyh1c2J2aXNpb24tPmRldiwgdXNiX3NuZGN0cmxwaXBlKHVzYnZpc2lvbi0+ZGV2LCAxKSwKIAkJCSAgICAgVVNCVklTSU9OX09QX0NPREUsCiAJCQkgICAgIFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0VORFBPSU5ULAogCQkJCSAwLCAoX191MTYpIFVTQlZJU0lPTl9MWFNJWkVfTywgdmFsdWUsIDQsIEhaKTsKIAotCQlpZiAoZXJyQ29kZSA8IDApIHsKKwkJaWYgKGVycl9jb2RlIDwgMCkgewogCQkJZGV2X2VycigmdXNidmlzaW9uLT5kZXYtPmRldiwKLQkJCQkiJXMgZmFpbGVkOiBlcnJvciAlZFxuIiwgX19mdW5jX18sIGVyckNvZGUpOwotCQkJcmV0dXJuIGVyckNvZGU7CisJCQkJIiVzIGZhaWxlZDogZXJyb3IgJWRcbiIsIF9fZnVuY19fLCBlcnJfY29kZSk7CisJCQlyZXR1cm4gZXJyX2NvZGU7CiAJCX0KLQkJdXNidmlzaW9uLT5jdXJ3aWR0aCA9IHVzYnZpc2lvbi0+c3RyZXRjaF93aWR0aCAqIFVzYldpZHRoOwotCQl1c2J2aXNpb24tPmN1cmhlaWdodCA9IHVzYnZpc2lvbi0+c3RyZXRjaF9oZWlnaHQgKiBVc2JIZWlnaHQ7CisJCXVzYnZpc2lvbi0+Y3Vyd2lkdGggPSB1c2J2aXNpb24tPnN0cmV0Y2hfd2lkdGggKiB1c2Jfd2lkdGg7CisJCXVzYnZpc2lvbi0+Y3VyaGVpZ2h0ID0gdXNidmlzaW9uLT5zdHJldGNoX2hlaWdodCAqIHVzYl9oZWlnaHQ7CiAJfQogCi0JaWYgKHVzYnZpc2lvbi0+aXNvY01vZGUgPT0gSVNPQ19NT0RFX1lVVjQyMikgewotCQlmcmFtZVJhdGUgPSAodXNidmlzaW9uLT5pc29jUGFja2V0U2l6ZSAqIDEwMDApIC8gKFVzYldpZHRoICogVXNiSGVpZ2h0ICogMik7Ci0JfQotCWVsc2UgaWYgKHVzYnZpc2lvbi0+aXNvY01vZGUgPT0gSVNPQ19NT0RFX1lVVjQyMCkgewotCQlmcmFtZVJhdGUgPSAodXNidmlzaW9uLT5pc29jUGFja2V0U2l6ZSAqIDEwMDApIC8gKChVc2JXaWR0aCAqIFVzYkhlaWdodCAqIDEyKSAvIDgpOwotCX0KLQllbHNlIHsKLQkJZnJhbWVSYXRlID0gRlJBTUVSQVRFX01BWDsKLQl9CisJaWYgKHVzYnZpc2lvbi0+aXNvY19tb2RlID09IElTT0NfTU9ERV9ZVVY0MjIpCisJCWZyYW1lX3JhdGUgPSAodXNidmlzaW9uLT5pc29jX3BhY2tldF9zaXplICogMTAwMCkgLyAodXNiX3dpZHRoICogdXNiX2hlaWdodCAqIDIpOworCWVsc2UgaWYgKHVzYnZpc2lvbi0+aXNvY19tb2RlID09IElTT0NfTU9ERV9ZVVY0MjApCisJCWZyYW1lX3JhdGUgPSAodXNidmlzaW9uLT5pc29jX3BhY2tldF9zaXplICogMTAwMCkgLyAoKHVzYl93aWR0aCAqIHVzYl9oZWlnaHQgKiAxMikgLyA4KTsKKwllbHNlCisJCWZyYW1lX3JhdGUgPSBGUkFNRVJBVEVfTUFYOwogCi0JaWYgKHVzYnZpc2lvbi0+dHZub3JtSWQgJiBWNEwyX1NURF82MjVfNTApIHsKLQkJZnJhbWVEcm9wID0gZnJhbWVSYXRlICogMzIgLyAyNSAtIDE7Ci0JfQotCWVsc2UgaWYgKHVzYnZpc2lvbi0+dHZub3JtSWQgJiBWNEwyX1NURF81MjVfNjApIHsKLQkJZnJhbWVEcm9wID0gZnJhbWVSYXRlICogMzIgLyAzMCAtIDE7Ci0JfQorCWlmICh1c2J2aXNpb24tPnR2bm9ybV9pZCAmIFY0TDJfU1REXzYyNV81MCkKKwkJZnJhbWVfZHJvcCA9IGZyYW1lX3JhdGUgKiAzMiAvIDI1IC0gMTsKKwllbHNlIGlmICh1c2J2aXNpb24tPnR2bm9ybV9pZCAmIFY0TDJfU1REXzUyNV82MCkKKwkJZnJhbWVfZHJvcCA9IGZyYW1lX3JhdGUgKiAzMiAvIDMwIC0gMTsKIAotCVJFU1RSSUNUX1RPX1JBTkdFKGZyYW1lRHJvcCwgRlJBTUVSQVRFX01JTiwgRlJBTUVSQVRFX01BWCk7CisJUkVTVFJJQ1RfVE9fUkFOR0UoZnJhbWVfZHJvcCwgRlJBTUVSQVRFX01JTiwgRlJBTUVSQVRFX01BWCk7CiAKLQlQREVCVUcoREJHX0ZVTkMsICJmcmFtZVJhdGUgJWQgZnBzLCBmcmFtZURyb3AgJWQiLCBmcmFtZVJhdGUsIGZyYW1lRHJvcCk7CisJUERFQlVHKERCR19GVU5DLCAiZnJhbWVfcmF0ZSAlZCBmcHMsIGZyYW1lX2Ryb3AgJWQiLCBmcmFtZV9yYXRlLCBmcmFtZV9kcm9wKTsKIAotCWZyYW1lRHJvcCA9IEZSQU1FUkFURV9NQVg7IAkvLyBXZSBjYW4gYWxsb3cgdGhlIG1heGltdW0gaGVyZSwgYmVjYXVzZSBkcm9wcGluZyBpcyBjb250cm9sbGVkCisJZnJhbWVfZHJvcCA9IEZSQU1FUkFURV9NQVg7CS8qIFdlIGNhbiBhbGxvdyB0aGUgbWF4aW11bSBoZXJlLCBiZWNhdXNlIGRyb3BwaW5nIGlzIGNvbnRyb2xsZWQgKi8KIAotCS8qIGZyYW1lRHJvcCA9IDc7ID0+IGZyYW1lUGhhc2UgPSAxLCA1LCA5LCAxMywgMTcsIDIxLCAyNSwgMCwgNCwgOCwgLi4uCi0JCT0+IGZyYW1lU2tpcCA9IDQ7Ci0JCT0+IGZyYW1lUmF0ZSA9ICg3ICsgMSkgKiAyNSAvIDMyID0gMjAwIC8gMzIgPSA2LjI1OworCS8qIGZyYW1lX2Ryb3AgPSA3OyA9PiBmcmFtZV9waGFzZSA9IDEsIDUsIDksIDEzLCAxNywgMjEsIDI1LCAwLCA0LCA4LCAuLi4KKwkJPT4gZnJhbWVfc2tpcCA9IDQ7CisJCT0+IGZyYW1lX3JhdGUgPSAoNyArIDEpICogMjUgLyAzMiA9IDIwMCAvIDMyID0gNi4yNTsKIAotCSAgIGZyYW1lRHJvcCA9IDk7ID0+IGZyYW1lUGhhc2UgPSAxLCA1LCA4LCAxMSwgMTQsIDE3LCAyMSwgMjQsIDI3LCAxLCA0LCA4LCAuLi4KLQkgICAgPT4gZnJhbWVTa2lwID0gNCwgMywgMywgMywgMywgNCwgMywgMywgMywgMywgNCwgLi4uCi0JCT0+IGZyYW1lUmF0ZSA9ICg5ICsgMSkgKiAyNSAvIDMyID0gMjUwIC8gMzIgPSA3LjgxMjU7CisJICAgZnJhbWVfZHJvcCA9IDk7ID0+IGZyYW1lX3BoYXNlID0gMSwgNSwgOCwgMTEsIDE0LCAxNywgMjEsIDI0LCAyNywgMSwgNCwgOCwgLi4uCisJICAgID0+IGZyYW1lX3NraXAgPSA0LCAzLCAzLCAzLCAzLCA0LCAzLCAzLCAzLCAzLCA0LCAuLi4KKwkJPT4gZnJhbWVfcmF0ZSA9ICg5ICsgMSkgKiAyNSAvIDMyID0gMjUwIC8gMzIgPSA3LjgxMjU7CiAJKi8KLQllcnJDb2RlID0gdXNidmlzaW9uX3dyaXRlX3JlZyh1c2J2aXNpb24sIFVTQlZJU0lPTl9GUk1fUkFURSwgZnJhbWVEcm9wKTsKLQlyZXR1cm4gZXJyQ29kZTsKKwllcnJfY29kZSA9IHVzYnZpc2lvbl93cml0ZV9yZWcodXNidmlzaW9uLCBVU0JWSVNJT05fRlJNX1JBVEUsIGZyYW1lX2Ryb3ApOworCXJldHVybiBlcnJfY29kZTsKIH0KIAogCkBAIC0xOTAzLDggKzE4MTgsOCBAQAogewogCWludCBpOwogCi0JLypuZWVkcyB0byBiZSBwYWdlIGFsaWduZWQgY2F1c2UgdGhlIGJ1ZmZlcnMgY2FuIGJlIG1hcHBlZCBpbmRpdmlkdWFsbHkhICovCi0JdXNidmlzaW9uLT5tYXhfZnJhbWVfc2l6ZSA9ICBQQUdFX0FMSUdOKHVzYnZpc2lvbi0+Y3Vyd2lkdGggKgorCS8qIG5lZWRzIHRvIGJlIHBhZ2UgYWxpZ25lZCBjYXVzZSB0aGUgYnVmZmVycyBjYW4gYmUgbWFwcGVkIGluZGl2aWR1YWxseSEgKi8KKwl1c2J2aXNpb24tPm1heF9mcmFtZV9zaXplID0gUEFHRV9BTElHTih1c2J2aXNpb24tPmN1cndpZHRoICoKIAkJCQkJCXVzYnZpc2lvbi0+Y3VyaGVpZ2h0ICoKIAkJCQkJCXVzYnZpc2lvbi0+cGFsZXR0ZS5ieXRlc19wZXJfcGl4ZWwpOwogCkBAIC0xOTEyLDkgKzE4MjcsOSBAQAogCXVzYnZpc2lvbi0+bnVtX2ZyYW1lcyA9IG51bWJlcl9vZl9mcmFtZXM7CiAJd2hpbGUgKHVzYnZpc2lvbi0+bnVtX2ZyYW1lcyA+IDApIHsKIAkJdXNidmlzaW9uLT5mYnVmX3NpemUgPSB1c2J2aXNpb24tPm51bV9mcmFtZXMgKiB1c2J2aXNpb24tPm1heF9mcmFtZV9zaXplOwotCQlpZigodXNidmlzaW9uLT5mYnVmID0gdXNidmlzaW9uX3J2bWFsbG9jKHVzYnZpc2lvbi0+ZmJ1Zl9zaXplKSkpIHsKKwkJdXNidmlzaW9uLT5mYnVmID0gdXNidmlzaW9uX3J2bWFsbG9jKHVzYnZpc2lvbi0+ZmJ1Zl9zaXplKTsKKwkJaWYgKHVzYnZpc2lvbi0+ZmJ1ZikKIAkJCWJyZWFrOwotCQl9CiAJCXVzYnZpc2lvbi0+bnVtX2ZyYW1lcy0tOwogCX0KIApAQCAtMTkyNSw3ICsxODQwLDcgQEAKIAkvKiBBbGxvY2F0ZSBhbGwgYnVmZmVycyAqLwogCWZvciAoaSA9IDA7IGkgPCB1c2J2aXNpb24tPm51bV9mcmFtZXM7IGkrKykgewogCQl1c2J2aXNpb24tPmZyYW1lW2ldLmluZGV4ID0gaTsKLQkJdXNidmlzaW9uLT5mcmFtZVtpXS5ncmFic3RhdGUgPSBGcmFtZVN0YXRlX1VudXNlZDsKKwkJdXNidmlzaW9uLT5mcmFtZVtpXS5ncmFic3RhdGUgPSBmcmFtZV9zdGF0ZV91bnVzZWQ7CiAJCXVzYnZpc2lvbi0+ZnJhbWVbaV0uZGF0YSA9IHVzYnZpc2lvbi0+ZmJ1ZiArCiAJCQlpICogdXNidmlzaW9uLT5tYXhfZnJhbWVfc2l6ZTsKIAkJLyoKQEAgLTE5MzcsNyArMTg1Miw4IEBACiAJCXVzYnZpc2lvbi0+ZnJhbWVbaV0uaGVpZ2h0ID0gdXNidmlzaW9uLT5jdXJoZWlnaHQ7CiAJCXVzYnZpc2lvbi0+ZnJhbWVbaV0uYnl0ZXNfcmVhZCA9IDA7CiAJfQotCVBERUJVRyhEQkdfRlVOQywgImFsbG9jYXRlZCAlZCBmcmFtZXMgKCVkIGJ5dGVzIHBlciBmcmFtZSkiLHVzYnZpc2lvbi0+bnVtX2ZyYW1lcyx1c2J2aXNpb24tPm1heF9mcmFtZV9zaXplKTsKKwlQREVCVUcoREJHX0ZVTkMsICJhbGxvY2F0ZWQgJWQgZnJhbWVzICglZCBieXRlcyBwZXIgZnJhbWUpIiwKKwkJCXVzYnZpc2lvbi0+bnVtX2ZyYW1lcywgdXNidmlzaW9uLT5tYXhfZnJhbWVfc2l6ZSk7CiAJcmV0dXJuIHVzYnZpc2lvbi0+bnVtX2ZyYW1lczsKIH0KIApAQCAtMTk0OCw3ICsxODY0LDcgQEAKIHZvaWQgdXNidmlzaW9uX2ZyYW1lc19mcmVlKHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24pCiB7CiAJLyogSGF2ZSB0byBmcmVlIGFsbCB0aGF0IG1lbW9yeSAqLwotCVBERUJVRyhEQkdfRlVOQywgImZyZWUgJWQgZnJhbWVzIix1c2J2aXNpb24tPm51bV9mcmFtZXMpOworCVBERUJVRyhEQkdfRlVOQywgImZyZWUgJWQgZnJhbWVzIiwgdXNidmlzaW9uLT5udW1fZnJhbWVzKTsKIAogCWlmICh1c2J2aXNpb24tPmZidWYgIT0gTlVMTCkgewogCQl1c2J2aXNpb25fcnZmcmVlKHVzYnZpc2lvbi0+ZmJ1ZiwgdXNidmlzaW9uLT5mYnVmX3NpemUpOwpAQCAtMTk2OSw3ICsxODg1LDcgQEAKIAlJTklUX0xJU1RfSEVBRCgmKHVzYnZpc2lvbi0+b3V0cXVldWUpKTsKIAogCWZvciAoaSA9IDA7IGkgPCBVU0JWSVNJT05fTlVNRlJBTUVTOyBpKyspIHsKLQkJdXNidmlzaW9uLT5mcmFtZVtpXS5ncmFic3RhdGUgPSBGcmFtZVN0YXRlX1VudXNlZDsKKwkJdXNidmlzaW9uLT5mcmFtZVtpXS5ncmFic3RhdGUgPSBmcmFtZV9zdGF0ZV91bnVzZWQ7CiAJCXVzYnZpc2lvbi0+ZnJhbWVbaV0uYnl0ZXNfcmVhZCA9IDA7CiAJfQogfQpAQCAtMTk4NCw5ICsxOTAwLDkgQEAKIAogCS8qIHN0b3AgcmVhZGluZyBmcm9tIHRoZSBkZXZpY2UgKi8KIAotCXVzYnZpc2lvbi0+c3RyZWFtaW5nID0gU3RyZWFtX0ludGVycnVwdDsKKwl1c2J2aXNpb24tPnN0cmVhbWluZyA9IHN0cmVhbV9pbnRlcnJ1cHQ7CiAJcmV0ID0gd2FpdF9ldmVudF90aW1lb3V0KHVzYnZpc2lvbi0+d2FpdF9zdHJlYW0sCi0JCQkJICh1c2J2aXNpb24tPnN0cmVhbWluZyA9PSBTdHJlYW1fSWRsZSksCisJCQkJICh1c2J2aXNpb24tPnN0cmVhbWluZyA9PSBzdHJlYW1faWRsZSksCiAJCQkJIG1zZWNzX3RvX2ppZmZpZXMoVVNCVklTSU9OX05VTVNCVUYqVVNCVklTSU9OX1VSQl9GUkFNRVMpKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjAwMiwxOSArMTkxOCwxOSBAQAogCWludCByYzsKIAl1bnNpZ25lZCBjaGFyIHZhbHVlWzZdOwogCi0JdmFsdWVbMF0gPSAweDBGOyAgICAvLyBJbnRyYS1Db21wcmVzc2lvbiBjeWNsZQotCXZhbHVlWzFdID0gMHgwMTsgICAgLy8gUmVnLjQ1IG9uZSBsaW5lIHBlciBzdHJpcAotCXZhbHVlWzJdID0gMHgwMDsgICAgLy8gUmVnLjQ2IEZvcmNlIGludHJhIG1vZGUgb24gYWxsIG5ldyBmcmFtZXMKLQl2YWx1ZVszXSA9IDB4MDA7ICAgIC8vIFJlZy40NyBGT1JDRV9VUCA8LSAwIG5vcm1hbCBvcGVyYXRpb24gKG5vdCBmb3JjZSkKLQl2YWx1ZVs0XSA9IDB4QTI7ICAgIC8vIFJlZy40OCBCVUZfVEhSIEknbSBub3Qgc3VyZSBpZiB0aGlzIGRvZXMgc29tZXRoaW5nIGluIG5vdCBjb21wcmVzc2VkIG1vZGUuCi0JdmFsdWVbNV0gPSAweDAwOyAgICAvLyBSZWcuNDkgRFZJX1lVViBUaGlzIGhhcyBub3RoaW5nIHRvIGRvIHdpdGggY29tcHJlc3Npb24KKwl2YWx1ZVswXSA9IDB4MEY7ICAgIC8qIEludHJhLUNvbXByZXNzaW9uIGN5Y2xlICovCisJdmFsdWVbMV0gPSAweDAxOyAgICAvKiBSZWcuNDUgb25lIGxpbmUgcGVyIHN0cmlwICovCisJdmFsdWVbMl0gPSAweDAwOyAgICAvKiBSZWcuNDYgRm9yY2UgaW50cmEgbW9kZSBvbiBhbGwgbmV3IGZyYW1lcyAqLworCXZhbHVlWzNdID0gMHgwMDsgICAgLyogUmVnLjQ3IEZPUkNFX1VQIDwtIDAgbm9ybWFsIG9wZXJhdGlvbiAobm90IGZvcmNlKSAqLworCXZhbHVlWzRdID0gMHhBMjsgICAgLyogUmVnLjQ4IEJVRl9USFIgSSdtIG5vdCBzdXJlIGlmIHRoaXMgZG9lcyBzb21ldGhpbmcgaW4gbm90IGNvbXByZXNzZWQgbW9kZS4gKi8KKwl2YWx1ZVs1XSA9IDB4MDA7ICAgIC8qIFJlZy40OSBEVklfWVVWIFRoaXMgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCBjb21wcmVzc2lvbiAqLwogCi0JLy9jYXRjaGVkIHZhbHVlcyBmb3IgTlQxMDA0Ci0JLy8gdmFsdWVbMF0gPSAweEZGOyAvLyBOZXZlciBhcHBseSBpbnRyYSBtb2RlIGF1dG9tYXRpY2FsbHkKLQkvLyB2YWx1ZVsxXSA9IDB4RjE7IC8vIFVzZSBmdWxsIGZyYW1lIGhlaWdodCBmb3IgdmlydHVhbCBzdHJpcCB3aWR0aDsgT25lIGxpbmUgcGVyIHN0cmlwCi0JLy8gdmFsdWVbMl0gPSAweDAxOyAvLyBGb3JjZSBpbnRyYSBtb2RlIG9uIGFsbCBuZXcgZnJhbWVzCi0JLy8gdmFsdWVbM10gPSAweDAwOyAvLyBTdHJpcCBzaXplIDQwMCBCeXRlczsgZG8gbm90IGZvcmNlIHVwCi0JLy8gdmFsdWVbNF0gPSAweEEyOyAvLworCS8qIGNhdGNoZWQgdmFsdWVzIGZvciBOVDEwMDQgKi8KKwkvKiB2YWx1ZVswXSA9IDB4RkY7IE5ldmVyIGFwcGx5IGludHJhIG1vZGUgYXV0b21hdGljYWxseSAqLworCS8qIHZhbHVlWzFdID0gMHhGMTsgVXNlIGZ1bGwgZnJhbWUgaGVpZ2h0IGZvciB2aXJ0dWFsIHN0cmlwIHdpZHRoOyBPbmUgbGluZSBwZXIgc3RyaXAgKi8KKwkvKiB2YWx1ZVsyXSA9IDB4MDE7IEZvcmNlIGludHJhIG1vZGUgb24gYWxsIG5ldyBmcmFtZXMgKi8KKwkvKiB2YWx1ZVszXSA9IDB4MDA7IFN0cmlwIHNpemUgNDAwIEJ5dGVzOyBkbyBub3QgZm9yY2UgdXAgKi8KKwkvKiB2YWx1ZVs0XSA9IDB4QTI7ICovCiAJaWYgKCFVU0JWSVNJT05fSVNfT1BFUkFUSU9OQUwodXNidmlzaW9uKSkKIAkJcmV0dXJuIDA7CiAKQEAgLTIwMzAsMjEgKzE5NDYsMjAgQEAKIAkJcmV0dXJuIHJjOwogCX0KIAotCWlmICh1c2J2aXNpb24tPmJyaWRnZVR5cGUgPT0gQlJJREdFX05UMTAwNCkgewotCQl2YWx1ZVswXSA9ICAyMDsgLy8gUENNIFRocmVzaG9sZCAxCi0JCXZhbHVlWzFdID0gIDEyOyAvLyBQQ00gVGhyZXNob2xkIDIKLQkJdmFsdWVbMl0gPSAyNTU7IC8vIERpc3RvcnNpb24gVGhyZXNob2xkIGludGVyCi0JCXZhbHVlWzNdID0gMjU1OyAvLyBEaXN0b3JzaW9uIFRocmVzaG9sZCBpbnRyYQotCQl2YWx1ZVs0XSA9ICA0MzsgLy8gTWF4IERpc3RvcnNpb24gaW50ZXIKLQkJdmFsdWVbNV0gPSAgNDM7IC8vIE1heCBEaXN0b3JzaW9uIGludHJhCi0JfQotCWVsc2UgewotCQl2YWx1ZVswXSA9ICAyMDsgLy8gUENNIFRocmVzaG9sZCAxCi0JCXZhbHVlWzFdID0gIDEyOyAvLyBQQ00gVGhyZXNob2xkIDIKLQkJdmFsdWVbMl0gPSAyNTU7IC8vIERpc3RvcnNpb24gVGhyZXNob2xkIGQ3LWQwCi0JCXZhbHVlWzNdID0gICAwOyAvLyBEaXN0b3JzaW9uIFRocmVzaG9sZCBkMTEtZDgKLQkJdmFsdWVbNF0gPSAgNDM7IC8vIE1heCBEaXN0b3JzaW9uIGQ3LWQwCi0JCXZhbHVlWzVdID0gICAwOyAvLyBNYXggRGlzdG9yc2lvbiBkOAorCWlmICh1c2J2aXNpb24tPmJyaWRnZV90eXBlID09IEJSSURHRV9OVDEwMDQpIHsKKwkJdmFsdWVbMF0gPSAgMjA7IC8qIFBDTSBUaHJlc2hvbGQgMSAqLworCQl2YWx1ZVsxXSA9ICAxMjsgLyogUENNIFRocmVzaG9sZCAyICovCisJCXZhbHVlWzJdID0gMjU1OyAvKiBEaXN0b3J0aW9uIFRocmVzaG9sZCBpbnRlciAqLworCQl2YWx1ZVszXSA9IDI1NTsgLyogRGlzdG9ydGlvbiBUaHJlc2hvbGQgaW50cmEgKi8KKwkJdmFsdWVbNF0gPSAgNDM7IC8qIE1heCBEaXN0b3J0aW9uIGludGVyICovCisJCXZhbHVlWzVdID0gIDQzOyAvKiBNYXggRGlzdG9ydGlvbiBpbnRyYSAqLworCX0gZWxzZSB7CisJCXZhbHVlWzBdID0gIDIwOyAvKiBQQ00gVGhyZXNob2xkIDEgKi8KKwkJdmFsdWVbMV0gPSAgMTI7IC8qIFBDTSBUaHJlc2hvbGQgMiAqLworCQl2YWx1ZVsyXSA9IDI1NTsgLyogRGlzdG9ydGlvbiBUaHJlc2hvbGQgZDctZDAgKi8KKwkJdmFsdWVbM10gPSAgIDA7IC8qIERpc3RvcnRpb24gVGhyZXNob2xkIGQxMS1kOCAqLworCQl2YWx1ZVs0XSA9ICA0MzsgLyogTWF4IERpc3RvcnRpb24gZDctZDAgKi8KKwkJdmFsdWVbNV0gPSAgIDA7IC8qIE1heCBEaXN0b3J0aW9uIGQ4ICovCiAJfQogCiAJaWYgKCFVU0JWSVNJT05fSVNfT1BFUkFUSU9OQUwodXNidmlzaW9uKSkKQEAgLTIwNTksMTAgKzE5NzQsNyBAQAogCWlmIChyYyA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlc0VSUk9SPSVkLiBVU0JWSVNJT04gc3RvcHBlZCAtICIKIAkJICAgICAgICJyZWNvbm5lY3Qgb3IgcmVsb2FkIGRyaXZlci5cbiIsIHByb2MsIHJjKTsKLQkJcmV0dXJuIHJjOwogCX0KLQotCiAJcmV0dXJuIHJjOwogfQogCkBAIC0yMDg1LDkgKzE5OTcsOSBAQAogCQlyZXR1cm4gMDsKIAogCS8qIFNldCBpbnB1dCBmb3JtYXQgZXhwZWN0ZWQgZnJvbSBkZWNvZGVyKi8KLQlpZiAodXNidmlzaW9uX2RldmljZV9kYXRhW3VzYnZpc2lvbi0+RGV2TW9kZWxdLlZpbl9SZWcxX292ZXJyaWRlKSB7Ci0JCXZhbHVlWzBdID0gdXNidmlzaW9uX2RldmljZV9kYXRhW3VzYnZpc2lvbi0+RGV2TW9kZWxdLlZpbl9SZWcxOwotCX0gZWxzZSBpZih1c2J2aXNpb25fZGV2aWNlX2RhdGFbdXNidmlzaW9uLT5EZXZNb2RlbF0uQ29kZWMgPT0gQ09ERUNfU0FBNzExMykgeworCWlmICh1c2J2aXNpb25fZGV2aWNlX2RhdGFbdXNidmlzaW9uLT5kZXZfbW9kZWxdLnZpbl9yZWcxX292ZXJyaWRlKSB7CisJCXZhbHVlWzBdID0gdXNidmlzaW9uX2RldmljZV9kYXRhW3VzYnZpc2lvbi0+ZGV2X21vZGVsXS52aW5fcmVnMTsKKwl9IGVsc2UgaWYgKHVzYnZpc2lvbl9kZXZpY2VfZGF0YVt1c2J2aXNpb24tPmRldl9tb2RlbF0uY29kZWMgPT0gQ09ERUNfU0FBNzExMykgewogCQkvKiBTQUE3MTEzIHVzZXMgOCBiaXQgb3V0cHV0ICovCiAJCXZhbHVlWzBdID0gVVNCVklTSU9OXzhfNDIyX1NZTkM7CiAJfSBlbHNlIHsKQEAgLTIxMDUsNTMgKzIwMTcsNTMgQEAKIAl9CiAKIAotCWlmICh1c2J2aXNpb24tPnR2bm9ybUlkICYgVjRMMl9TVERfUEFMKSB7CisJaWYgKHVzYnZpc2lvbi0+dHZub3JtX2lkICYgVjRMMl9TVERfUEFMKSB7CiAJCXZhbHVlWzBdID0gMHhDMDsKLQkJdmFsdWVbMV0gPSAweDAyOwkvLzB4MDJDMCAtPiA3MDQgSW5wdXQgdmlkZW8gbGluZSBsZW5ndGgKKwkJdmFsdWVbMV0gPSAweDAyOwkvKiAweDAyQzAgLT4gNzA0IElucHV0IHZpZGVvIGxpbmUgbGVuZ3RoICovCiAJCXZhbHVlWzJdID0gMHgyMDsKLQkJdmFsdWVbM10gPSAweDAxOwkvLzB4MDEyMCAtPiAyODggSW5wdXQgdmlkZW8gbi4gb2YgbGluZXMKKwkJdmFsdWVbM10gPSAweDAxOwkvKiAweDAxMjAgLT4gMjg4IElucHV0IHZpZGVvIG4uIG9mIGxpbmVzICovCiAJCXZhbHVlWzRdID0gMHg2MDsKLQkJdmFsdWVbNV0gPSAweDAwOwkvLzB4MDA2MCAtPiA5NiBJbnB1dCB2aWRlbyBoIG9mZnNldAorCQl2YWx1ZVs1XSA9IDB4MDA7CS8qIDB4MDA2MCAtPiA5NiBJbnB1dCB2aWRlbyBoIG9mZnNldCAqLwogCQl2YWx1ZVs2XSA9IDB4MTY7Ci0JCXZhbHVlWzddID0gMHgwMDsJLy8weDAwMTYgLT4gMjIgSW5wdXQgdmlkZW8gdiBvZmZzZXQKLQl9IGVsc2UgaWYgKHVzYnZpc2lvbi0+dHZub3JtSWQgJiBWNEwyX1NURF9TRUNBTSkgeworCQl2YWx1ZVs3XSA9IDB4MDA7CS8qIDB4MDAxNiAtPiAyMiBJbnB1dCB2aWRlbyB2IG9mZnNldCAqLworCX0gZWxzZSBpZiAodXNidmlzaW9uLT50dm5vcm1faWQgJiBWNEwyX1NURF9TRUNBTSkgewogCQl2YWx1ZVswXSA9IDB4QzA7Ci0JCXZhbHVlWzFdID0gMHgwMjsJLy8weDAyQzAgLT4gNzA0IElucHV0IHZpZGVvIGxpbmUgbGVuZ3RoCisJCXZhbHVlWzFdID0gMHgwMjsJLyogMHgwMkMwIC0+IDcwNCBJbnB1dCB2aWRlbyBsaW5lIGxlbmd0aCAqLwogCQl2YWx1ZVsyXSA9IDB4MjA7Ci0JCXZhbHVlWzNdID0gMHgwMTsJLy8weDAxMjAgLT4gMjg4IElucHV0IHZpZGVvIG4uIG9mIGxpbmVzCisJCXZhbHVlWzNdID0gMHgwMTsJLyogMHgwMTIwIC0+IDI4OCBJbnB1dCB2aWRlbyBuLiBvZiBsaW5lcyAqLwogCQl2YWx1ZVs0XSA9IDB4MDE7Ci0JCXZhbHVlWzVdID0gMHgwMDsJLy8weDAwMDEgLT4gMDEgSW5wdXQgdmlkZW8gaCBvZmZzZXQKKwkJdmFsdWVbNV0gPSAweDAwOwkvKiAweDAwMDEgLT4gMDEgSW5wdXQgdmlkZW8gaCBvZmZzZXQgKi8KIAkJdmFsdWVbNl0gPSAweDAxOwotCQl2YWx1ZVs3XSA9IDB4MDA7CS8vMHgwMDAxIC0+IDAxIElucHV0IHZpZGVvIHYgb2Zmc2V0CisJCXZhbHVlWzddID0gMHgwMDsJLyogMHgwMDAxIC0+IDAxIElucHV0IHZpZGVvIHYgb2Zmc2V0ICovCiAJfSBlbHNlIHsJLyogVjRMMl9TVERfTlRTQyAqLwogCQl2YWx1ZVswXSA9IDB4RDA7Ci0JCXZhbHVlWzFdID0gMHgwMjsJLy8weDAyRDAgLT4gNzIwIElucHV0IHZpZGVvIGxpbmUgbGVuZ3RoCisJCXZhbHVlWzFdID0gMHgwMjsJLyogMHgwMkQwIC0+IDcyMCBJbnB1dCB2aWRlbyBsaW5lIGxlbmd0aCAqLwogCQl2YWx1ZVsyXSA9IDB4RjA7Ci0JCXZhbHVlWzNdID0gMHgwMDsJLy8weDAwRjAgLT4gMjQwIElucHV0IHZpZGVvIG51bWJlciBvZiBsaW5lcworCQl2YWx1ZVszXSA9IDB4MDA7CS8qIDB4MDBGMCAtPiAyNDAgSW5wdXQgdmlkZW8gbnVtYmVyIG9mIGxpbmVzICovCiAJCXZhbHVlWzRdID0gMHg1MDsKLQkJdmFsdWVbNV0gPSAweDAwOwkvLzB4MDA1MCAtPiA4MCBJbnB1dCB2aWRlbyBoIG9mZnNldAorCQl2YWx1ZVs1XSA9IDB4MDA7CS8qIDB4MDA1MCAtPiA4MCBJbnB1dCB2aWRlbyBoIG9mZnNldCAqLwogCQl2YWx1ZVs2XSA9IDB4MTA7Ci0JCXZhbHVlWzddID0gMHgwMDsJLy8weDAwMTAgLT4gMTYgSW5wdXQgdmlkZW8gdiBvZmZzZXQKKwkJdmFsdWVbN10gPSAweDAwOwkvKiAweDAwMTAgLT4gMTYgSW5wdXQgdmlkZW8gdiBvZmZzZXQgKi8KIAl9CiAKLQlpZiAodXNidmlzaW9uX2RldmljZV9kYXRhW3VzYnZpc2lvbi0+RGV2TW9kZWxdLlhfT2Zmc2V0ID49IDApIHsKLQkJdmFsdWVbNF09dXNidmlzaW9uX2RldmljZV9kYXRhW3VzYnZpc2lvbi0+RGV2TW9kZWxdLlhfT2Zmc2V0ICYgMHhmZjsKLQkJdmFsdWVbNV09KHVzYnZpc2lvbl9kZXZpY2VfZGF0YVt1c2J2aXNpb24tPkRldk1vZGVsXS5YX09mZnNldCAmIDB4MDMwMCkgPj4gODsKKwlpZiAodXNidmlzaW9uX2RldmljZV9kYXRhW3VzYnZpc2lvbi0+ZGV2X21vZGVsXS54X29mZnNldCA+PSAwKSB7CisJCXZhbHVlWzRdID0gdXNidmlzaW9uX2RldmljZV9kYXRhW3VzYnZpc2lvbi0+ZGV2X21vZGVsXS54X29mZnNldCAmIDB4ZmY7CisJCXZhbHVlWzVdID0gKHVzYnZpc2lvbl9kZXZpY2VfZGF0YVt1c2J2aXNpb24tPmRldl9tb2RlbF0ueF9vZmZzZXQgJiAweDAzMDApID4+IDg7CiAJfQogCi0JaWYgKGFkanVzdF9YX09mZnNldCAhPSAtMSkgewotCQl2YWx1ZVs0XSA9IGFkanVzdF9YX09mZnNldCAmIDB4ZmY7Ci0JCXZhbHVlWzVdID0gKGFkanVzdF9YX09mZnNldCAmIDB4MDMwMCkgPj4gODsKKwlpZiAoYWRqdXN0X3hfb2Zmc2V0ICE9IC0xKSB7CisJCXZhbHVlWzRdID0gYWRqdXN0X3hfb2Zmc2V0ICYgMHhmZjsKKwkJdmFsdWVbNV0gPSAoYWRqdXN0X3hfb2Zmc2V0ICYgMHgwMzAwKSA+PiA4OwogCX0KIAotCWlmICh1c2J2aXNpb25fZGV2aWNlX2RhdGFbdXNidmlzaW9uLT5EZXZNb2RlbF0uWV9PZmZzZXQgPj0gMCkgewotCQl2YWx1ZVs2XT11c2J2aXNpb25fZGV2aWNlX2RhdGFbdXNidmlzaW9uLT5EZXZNb2RlbF0uWV9PZmZzZXQgJiAweGZmOwotCQl2YWx1ZVs3XT0odXNidmlzaW9uX2RldmljZV9kYXRhW3VzYnZpc2lvbi0+RGV2TW9kZWxdLllfT2Zmc2V0ICYgMHgwMzAwKSA+PiA4OworCWlmICh1c2J2aXNpb25fZGV2aWNlX2RhdGFbdXNidmlzaW9uLT5kZXZfbW9kZWxdLnlfb2Zmc2V0ID49IDApIHsKKwkJdmFsdWVbNl0gPSB1c2J2aXNpb25fZGV2aWNlX2RhdGFbdXNidmlzaW9uLT5kZXZfbW9kZWxdLnlfb2Zmc2V0ICYgMHhmZjsKKwkJdmFsdWVbN10gPSAodXNidmlzaW9uX2RldmljZV9kYXRhW3VzYnZpc2lvbi0+ZGV2X21vZGVsXS55X29mZnNldCAmIDB4MDMwMCkgPj4gODsKIAl9CiAKLQlpZiAoYWRqdXN0X1lfT2Zmc2V0ICE9IC0xKSB7Ci0JCXZhbHVlWzZdID0gYWRqdXN0X1lfT2Zmc2V0ICYgMHhmZjsKLQkJdmFsdWVbN10gPSAoYWRqdXN0X1lfT2Zmc2V0ICYgMHgwMzAwKSA+PiA4OworCWlmIChhZGp1c3RfeV9vZmZzZXQgIT0gLTEpIHsKKwkJdmFsdWVbNl0gPSBhZGp1c3RfeV9vZmZzZXQgJiAweGZmOworCQl2YWx1ZVs3XSA9IChhZGp1c3RfeV9vZmZzZXQgJiAweDAzMDApID4+IDg7CiAJfQogCiAJcmMgPSB1c2JfY29udHJvbF9tc2codXNidmlzaW9uLT5kZXYsIHVzYl9zbmRjdHJscGlwZSh1c2J2aXNpb24tPmRldiwgMSksCkBAIC0yMTY3LDE1ICsyMDc5LDE0IEBACiAKIAlkdmlfeXV2X3ZhbHVlID0gMHgwMDsJLyogVSBjb21lcyBhZnRlciBWLCBZYSBjb21lcyBhZnRlciBVL1YsIFliIGNvbWVzIGFmdGVyIFliICovCiAKLQlpZih1c2J2aXNpb25fZGV2aWNlX2RhdGFbdXNidmlzaW9uLT5EZXZNb2RlbF0uRHZpX3l1dl9vdmVycmlkZSl7Ci0JCWR2aV95dXZfdmFsdWUgPSB1c2J2aXNpb25fZGV2aWNlX2RhdGFbdXNidmlzaW9uLT5EZXZNb2RlbF0uRHZpX3l1djsKLQl9Ci0JZWxzZSBpZih1c2J2aXNpb25fZGV2aWNlX2RhdGFbdXNidmlzaW9uLT5EZXZNb2RlbF0uQ29kZWMgPT0gQ09ERUNfU0FBNzExMykgewotCS8qIFRoaXMgY2hhbmdlcyBhcyB0aGUgZmluZSBzeW5jIGNvbnRyb2wgY2hhbmdlcy4gRnVydGhlciBpbnZlc3RpZ2F0aW9uIG5lY2Vzc2FyeSAqLworCWlmICh1c2J2aXNpb25fZGV2aWNlX2RhdGFbdXNidmlzaW9uLT5kZXZfbW9kZWxdLmR2aV95dXZfb3ZlcnJpZGUpIHsKKwkJZHZpX3l1dl92YWx1ZSA9IHVzYnZpc2lvbl9kZXZpY2VfZGF0YVt1c2J2aXNpb24tPmRldl9tb2RlbF0uZHZpX3l1djsKKwl9IGVsc2UgaWYgKHVzYnZpc2lvbl9kZXZpY2VfZGF0YVt1c2J2aXNpb24tPmRldl9tb2RlbF0uY29kZWMgPT0gQ09ERUNfU0FBNzExMykgeworCQkvKiBUaGlzIGNoYW5nZXMgYXMgdGhlIGZpbmUgc3luYyBjb250cm9sIGNoYW5nZXMuIEZ1cnRoZXIgaW52ZXN0aWdhdGlvbiBuZWNlc3NhcnkgKi8KIAkJZHZpX3l1dl92YWx1ZSA9IDB4MDY7CiAJfQogCi0JcmV0dXJuICh1c2J2aXNpb25fd3JpdGVfcmVnKHVzYnZpc2lvbiwgVVNCVklTSU9OX0RWSV9ZVVYsIGR2aV95dXZfdmFsdWUpKTsKKwlyZXR1cm4gdXNidmlzaW9uX3dyaXRlX3JlZyh1c2J2aXNpb24sIFVTQlZJU0lPTl9EVklfWVVWLCBkdmlfeXV2X3ZhbHVlKTsKIH0KIAogCkBAIC0yMTkyLDcgKzIxMDMsNyBAQAogCWludCByYzsKIAl1bnNpZ25lZCBjaGFyIHZhbHVlWzhdOwogCi0JaWYgKHVzYnZpc2lvbi0+aXNvY01vZGUgPT0gSVNPQ19NT0RFX0NPTVBSRVNTKSB7CisJaWYgKHVzYnZpc2lvbi0+aXNvY19tb2RlID09IElTT0NfTU9ERV9DT01QUkVTUykgewogCQl2YWx1ZVswXSA9IDB4NDI7CiAJCXZhbHVlWzFdID0gMHg3MTsKIAkJdmFsdWVbMl0gPSAweGZmOwpAQCAtMjIwMSwxMSArMjExMiwxMCBAQAogCQl2YWx1ZVs1XSA9IDB4ZTA7CiAJCXZhbHVlWzZdID0gMHg3MTsKIAkJdmFsdWVbN10gPSAweGZmOwotCQkvLyBVUjogIDB4MEUyMDAtMHgzRkZGRiA9IDIwNDI4OCBXb3JkcyAoMSBXb3JkID0gMiBCeXRlKQotCQkvLyBGREw6IDB4MDAwMDAtMHgwRTA5OSA9ICA1NzQ5OCBXb3JkcwotCQkvLyBWRFc6IDB4MEUzRkYtMHgzRkZGRgotCX0KLQllbHNlIHsKKwkJLyogVVI6ICAweDBFMjAwLTB4M0ZGRkYgPSAyMDQyODggV29yZHMgKDEgV29yZCA9IDIgQnl0ZSkgKi8KKwkJLyogRkRMOiAweDAwMDAwLTB4MEUwOTkgPSAgNTc0OTggV29yZHMgKi8KKwkJLyogVkRXOiAweDBFM0ZGLTB4M0ZGRkYgKi8KKwl9IGVsc2UgewogCQl2YWx1ZVswXSA9IDB4NDI7CiAJCXZhbHVlWzFdID0gMHgwMDsKIAkJdmFsdWVbMl0gPSAweGZmOwpAQCAtMjIxOCwxNCArMjEyOCwxNCBAQAogCS8qIFRoZXNlIGFyZSB0aGUgdmFsdWVzIG9mIHRoZSBhZGRyZXNzIG9mIHRoZSB2aWRlbyBidWZmZXIsCiAJICogdGhleSBoYXZlIHRvIGJlIGxvYWRlZCBpbnRvIHRoZSBVU0JWSVNJT05fRFJNX1BSTTEtOAogCSAqCi0JICogU3RhcnQgYWRkcmVzcyBvZiB2aWRlbyBvdXRwdXQgYnVmZmVyIGZvciByZWFkOiAJZHJtX3BybTEtMiAtPiAweDAwMDAwCi0JICogRW5kIGFkZHJlc3Mgb2YgdmlkZW8gb3V0cHV0IGJ1ZmZlciBmb3IgcmVhZDogCWRybV9wcm0xLTMgLT4gMHgxZmZmZgotCSAqIFN0YXJ0IGFkZHJlc3Mgb2YgdmlkZW8gZnJhbWUgZGVsYXkgYnVmZmVyOiAJCWRybV9wcm0xLTQgLT4gMHgyMDAwMAorCSAqIFN0YXJ0IGFkZHJlc3Mgb2YgdmlkZW8gb3V0cHV0IGJ1ZmZlciBmb3IgcmVhZDoJZHJtX3BybTEtMiAtPiAweDAwMDAwCisJICogRW5kIGFkZHJlc3Mgb2YgdmlkZW8gb3V0cHV0IGJ1ZmZlciBmb3IgcmVhZDoJCWRybV9wcm0xLTMgLT4gMHgxZmZmZgorCSAqIFN0YXJ0IGFkZHJlc3Mgb2YgdmlkZW8gZnJhbWUgZGVsYXkgYnVmZmVyOgkJZHJtX3BybTEtNCAtPiAweDIwMDAwCiAJICogICAgT25seSB1c2VkIGluIGNvbXByZXNzZWQgbW9kZQotCSAqIEVuZCBhZGRyZXNzIG9mIHZpZGVvIGZyYW1lIGRlbGF5IGJ1ZmZlcjogCQlkcm1fcHJtMS01LTYgLT4gMHgzZmZmZgorCSAqIEVuZCBhZGRyZXNzIG9mIHZpZGVvIGZyYW1lIGRlbGF5IGJ1ZmZlcjoJCWRybV9wcm0xLTUtNiAtPiAweDNmZmZmCiAJICogICAgT25seSB1c2VkIGluIGNvbXByZXNzZWQgbW9kZQotCSAqIFN0YXJ0IGFkZHJlc3Mgb2YgdmlkZW8gb3V0cHV0IGJ1ZmZlciBmb3Igd3JpdGU6IAlkcm1fcHJtMS03IC0+IDB4MDAwMDAKLQkgKiBFbmQgYWRkcmVzcyBvZiB2aWRlbyBvdXRwdXQgYnVmZmVyIGZvciB3cml0ZTogCWRybV9wcm0xLTggLT4gMHgxZmZmZgorCSAqIFN0YXJ0IGFkZHJlc3Mgb2YgdmlkZW8gb3V0cHV0IGJ1ZmZlciBmb3Igd3JpdGU6CWRybV9wcm0xLTcgLT4gMHgwMDAwMAorCSAqIEVuZCBhZGRyZXNzIG9mIHZpZGVvIG91dHB1dCBidWZmZXIgZm9yIHdyaXRlOglkcm1fcHJtMS04IC0+IDB4MWZmZmYKIAkgKi8KIAogCWlmICghVVNCVklTSU9OX0lTX09QRVJBVElPTkFMKHVzYnZpc2lvbikpCkBAIC0yMjQzLDggKzIxNTMsOSBAQAogCX0KIAogCS8qIFJlc3RhcnQgdGhlIHZpZGVvIGJ1ZmZlciBsb2dpYyAqLwotCWlmICgocmMgPSB1c2J2aXNpb25fd3JpdGVfcmVnKHVzYnZpc2lvbiwgVVNCVklTSU9OX0RSTV9DT05ULCBVU0JWSVNJT05fUkVTX1VSIHwKLQkJCQkgICBVU0JWSVNJT05fUkVTX0ZETCB8IFVTQlZJU0lPTl9SRVNfVkRXKSkgPCAwKQorCXJjID0gdXNidmlzaW9uX3dyaXRlX3JlZyh1c2J2aXNpb24sIFVTQlZJU0lPTl9EUk1fQ09OVCwgVVNCVklTSU9OX1JFU19VUiB8CisJCQkJICAgVVNCVklTSU9OX1JFU19GREwgfCBVU0JWSVNJT05fUkVTX1ZEVyk7CisJaWYgKHJjIDwgMCkKIAkJcmV0dXJuIHJjOwogCXJjID0gdXNidmlzaW9uX3dyaXRlX3JlZyh1c2J2aXNpb24sIFVTQlZJU0lPTl9EUk1fQ09OVCwgMHgwMCk7CiAKQEAgLTIyNjEsMjMgKzIxNzIsMjIgQEAKIAogaW50IHVzYnZpc2lvbl9wb3dlcl9vbihzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uKQogewotCWludCBlcnJDb2RlID0gMDsKKwlpbnQgZXJyX2NvZGUgPSAwOwogCiAJUERFQlVHKERCR19GVU5DLCAiIik7CiAKIAl1c2J2aXNpb25fd3JpdGVfcmVnKHVzYnZpc2lvbiwgVVNCVklTSU9OX1BXUl9SRUcsIFVTQlZJU0lPTl9TU1BORF9FTik7CiAJdXNidmlzaW9uX3dyaXRlX3JlZyh1c2J2aXNpb24sIFVTQlZJU0lPTl9QV1JfUkVHLAotCQkJIFVTQlZJU0lPTl9TU1BORF9FTiB8IFVTQlZJU0lPTl9SRVMyKTsKKwkJCVVTQlZJU0lPTl9TU1BORF9FTiB8IFVTQlZJU0lPTl9SRVMyKTsKIAogCXVzYnZpc2lvbl93cml0ZV9yZWcodXNidmlzaW9uLCBVU0JWSVNJT05fUFdSX1JFRywKLQkJCSBVU0JWSVNJT05fU1NQTkRfRU4gfCBVU0JWSVNJT05fUFdSX1ZJRCk7Ci0JZXJyQ29kZSA9IHVzYnZpc2lvbl93cml0ZV9yZWcodXNidmlzaW9uLCBVU0JWSVNJT05fUFdSX1JFRywKLQkJCQkJCVVTQlZJU0lPTl9TU1BORF9FTiB8IFVTQlZJU0lPTl9QV1JfVklEIHwgVVNCVklTSU9OX1JFUzIpOwotCWlmIChlcnJDb2RlID09IDEpIHsKKwkJCVVTQlZJU0lPTl9TU1BORF9FTiB8IFVTQlZJU0lPTl9QV1JfVklEKTsKKwllcnJfY29kZSA9IHVzYnZpc2lvbl93cml0ZV9yZWcodXNidmlzaW9uLCBVU0JWSVNJT05fUFdSX1JFRywKKwkJCVVTQlZJU0lPTl9TU1BORF9FTiB8IFVTQlZJU0lPTl9QV1JfVklEIHwgVVNCVklTSU9OX1JFUzIpOworCWlmIChlcnJfY29kZSA9PSAxKQogCQl1c2J2aXNpb24tPnBvd2VyID0gMTsKLQl9Ci0JUERFQlVHKERCR19GVU5DLCAiJXM6IGVyckNvZGUgJWQiLCAoZXJyQ29kZTwwKT8iRVJST1IiOiJwb3dlciBpcyBvbiIsIGVyckNvZGUpOwotCXJldHVybiBlcnJDb2RlOworCVBERUJVRyhEQkdfRlVOQywgIiVzOiBlcnJfY29kZSAlZCIsIChlcnJfY29kZSA8IDApID8gIkVSUk9SIiA6ICJwb3dlciBpcyBvbiIsIGVycl9jb2RlKTsKKwlyZXR1cm4gZXJyX2NvZGU7CiB9CiAKIApAQCAtMjI4NSw1MyArMjE5NSw1MCBAQAogICogdXNidmlzaW9uIHRpbWVyIHN0dWZmCiAgKi8KIAotLy8gdG8gY2FsbCB1c2J2aXNpb25fcG93ZXJfb2ZmIGZyb20gdGFzayBxdWV1ZQorLyogdG8gY2FsbCB1c2J2aXNpb25fcG93ZXJfb2ZmIGZyb20gdGFzayBxdWV1ZSAqLwogc3RhdGljIHZvaWQgY2FsbF91c2J2aXNpb25fcG93ZXJfb2ZmKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB1c2JfdXNidmlzaW9uLCBwb3dlck9mZldvcmspOworCXN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24gPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHVzYl91c2J2aXNpb24sIHBvd2VyX29mZl93b3JrKTsKIAogCVBERUJVRyhEQkdfRlVOQywgIiIpOwotCWlmKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmdXNidmlzaW9uLT5sb2NrKSkgeworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnVzYnZpc2lvbi0+djRsMl9sb2NrKSkKIAkJcmV0dXJuOwotCX0KIAotCi0JaWYodXNidmlzaW9uLT51c2VyID09IDApIHsKKwlpZiAodXNidmlzaW9uLT51c2VyID09IDApIHsKIAkJdXNidmlzaW9uX2kyY191bnJlZ2lzdGVyKHVzYnZpc2lvbik7CiAKIAkJdXNidmlzaW9uX3Bvd2VyX29mZih1c2J2aXNpb24pOwogCQl1c2J2aXNpb24tPmluaXRpYWxpemVkID0gMDsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZ1c2J2aXNpb24tPmxvY2spOworCW11dGV4X3VubG9jaygmdXNidmlzaW9uLT52NGwyX2xvY2spOwogfQogCi1zdGF0aWMgdm9pZCB1c2J2aXNpb25fcG93ZXJPZmZUaW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCitzdGF0aWMgdm9pZCB1c2J2aXNpb25fcG93ZXJfb2ZmX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKLQlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0gKHZvaWQgKikgZGF0YTsKKwlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0gKHZvaWQgKilkYXRhOwogCiAJUERFQlVHKERCR19GVU5DLCAiIik7Ci0JZGVsX3RpbWVyKCZ1c2J2aXNpb24tPnBvd2VyT2ZmVGltZXIpOwotCUlOSVRfV09SSygmdXNidmlzaW9uLT5wb3dlck9mZldvcmssIGNhbGxfdXNidmlzaW9uX3Bvd2VyX29mZik7Ci0JKHZvaWQpIHNjaGVkdWxlX3dvcmsoJnVzYnZpc2lvbi0+cG93ZXJPZmZXb3JrKTsKKwlkZWxfdGltZXIoJnVzYnZpc2lvbi0+cG93ZXJfb2ZmX3RpbWVyKTsKKwlJTklUX1dPUksoJnVzYnZpc2lvbi0+cG93ZXJfb2ZmX3dvcmssIGNhbGxfdXNidmlzaW9uX3Bvd2VyX29mZik7CisJKHZvaWQpIHNjaGVkdWxlX3dvcmsoJnVzYnZpc2lvbi0+cG93ZXJfb2ZmX3dvcmspOwogfQogCi12b2lkIHVzYnZpc2lvbl9pbml0X3Bvd2VyT2ZmVGltZXIoc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbikKK3ZvaWQgdXNidmlzaW9uX2luaXRfcG93ZXJfb2ZmX3RpbWVyKHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24pCiB7Ci0JaW5pdF90aW1lcigmdXNidmlzaW9uLT5wb3dlck9mZlRpbWVyKTsKLQl1c2J2aXNpb24tPnBvd2VyT2ZmVGltZXIuZGF0YSA9IChsb25nKSB1c2J2aXNpb247Ci0JdXNidmlzaW9uLT5wb3dlck9mZlRpbWVyLmZ1bmN0aW9uID0gdXNidmlzaW9uX3Bvd2VyT2ZmVGltZXI7CisJaW5pdF90aW1lcigmdXNidmlzaW9uLT5wb3dlcl9vZmZfdGltZXIpOworCXVzYnZpc2lvbi0+cG93ZXJfb2ZmX3RpbWVyLmRhdGEgPSAobG9uZyl1c2J2aXNpb247CisJdXNidmlzaW9uLT5wb3dlcl9vZmZfdGltZXIuZnVuY3Rpb24gPSB1c2J2aXNpb25fcG93ZXJfb2ZmX3RpbWVyOwogfQogCi12b2lkIHVzYnZpc2lvbl9zZXRfcG93ZXJPZmZUaW1lcihzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uKQordm9pZCB1c2J2aXNpb25fc2V0X3Bvd2VyX29mZl90aW1lcihzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uKQogewotCW1vZF90aW1lcigmdXNidmlzaW9uLT5wb3dlck9mZlRpbWVyLCBqaWZmaWVzICsgVVNCVklTSU9OX1BPV0VST0ZGX1RJTUUpOworCW1vZF90aW1lcigmdXNidmlzaW9uLT5wb3dlcl9vZmZfdGltZXIsIGppZmZpZXMgKyBVU0JWSVNJT05fUE9XRVJPRkZfVElNRSk7CiB9CiAKLXZvaWQgdXNidmlzaW9uX3Jlc2V0X3Bvd2VyT2ZmVGltZXIoc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbikKK3ZvaWQgdXNidmlzaW9uX3Jlc2V0X3Bvd2VyX29mZl90aW1lcihzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uKQogewotCWlmICh0aW1lcl9wZW5kaW5nKCZ1c2J2aXNpb24tPnBvd2VyT2ZmVGltZXIpKSB7Ci0JCWRlbF90aW1lcigmdXNidmlzaW9uLT5wb3dlck9mZlRpbWVyKTsKLQl9CisJaWYgKHRpbWVyX3BlbmRpbmcoJnVzYnZpc2lvbi0+cG93ZXJfb2ZmX3RpbWVyKSkKKwkJZGVsX3RpbWVyKCZ1c2J2aXNpb24tPnBvd2VyX29mZl90aW1lcik7CiB9CiAKIC8qCkBAIC0yMzQxLDE0ICsyMjQ4LDEwIEBACiAgKi8KIGludCB1c2J2aXNpb25fYmVnaW5fc3RyZWFtaW5nKHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24pCiB7Ci0JaW50IGVyckNvZGUgPSAwOwotCi0JaWYgKHVzYnZpc2lvbi0+aXNvY01vZGUgPT0gSVNPQ19NT0RFX0NPTVBSRVNTKSB7CisJaWYgKHVzYnZpc2lvbi0+aXNvY19tb2RlID09IElTT0NfTU9ERV9DT01QUkVTUykKIAkJdXNidmlzaW9uX2luaXRfY29tcHJlc3Npb24odXNidmlzaW9uKTsKLQl9Ci0JZXJyQ29kZSA9IHVzYnZpc2lvbl93cml0ZV9yZWcodXNidmlzaW9uLCBVU0JWSVNJT05fVklOX1JFRzIsIFVTQlZJU0lPTl9OT0hWQUxJRCB8Ci0JCQkJCQkJCQkJdXNidmlzaW9uLT5WaW5fUmVnMl9QcmVzZXQpOwotCXJldHVybiBlcnJDb2RlOworCXJldHVybiB1c2J2aXNpb25fd3JpdGVfcmVnKHVzYnZpc2lvbiwgVVNCVklTSU9OX1ZJTl9SRUcyLAorCQlVU0JWSVNJT05fTk9IVkFMSUQgfCB1c2J2aXNpb24tPnZpbl9yZWcyX3ByZXNldCk7CiB9CiAKIC8qCkBAIC0yMzYwLDI1ICsyMjYzLDI0IEBACiB7CiAJaW50IHJldDsKIAotCWlmICgKLQkgICAgKHJldCA9Ci0JICAgICB1c2J2aXNpb25fd3JpdGVfcmVnKHVzYnZpc2lvbiwgVVNCVklTSU9OX1BXUl9SRUcsCi0JCQkgICAgICBVU0JWSVNJT05fU1NQTkRfRU4gfCBVU0JWSVNJT05fUFdSX1ZJRCkpIDwgMCkKKwlyZXQgPSB1c2J2aXNpb25fd3JpdGVfcmVnKHVzYnZpc2lvbiwgVVNCVklTSU9OX1BXUl9SRUcsCisJCQkgICAgICBVU0JWSVNJT05fU1NQTkRfRU4gfCBVU0JWSVNJT05fUFdSX1ZJRCk7CisJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7Ci0JaWYgKAotCSAgICAocmV0ID0KLQkgICAgIHVzYnZpc2lvbl93cml0ZV9yZWcodXNidmlzaW9uLCBVU0JWSVNJT05fUFdSX1JFRywKKwlyZXQgPSB1c2J2aXNpb25fd3JpdGVfcmVnKHVzYnZpc2lvbiwgVVNCVklTSU9OX1BXUl9SRUcsCiAJCQkgICAgICBVU0JWSVNJT05fU1NQTkRfRU4gfCBVU0JWSVNJT05fUFdSX1ZJRCB8Ci0JCQkgICAgICBVU0JWSVNJT05fUkVTMikpIDwgMCkKKwkJCSAgICAgIFVTQlZJU0lPTl9SRVMyKTsKKwlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKLQlpZiAoCi0JICAgIChyZXQgPQotCSAgICAgdXNidmlzaW9uX3dyaXRlX3JlZyh1c2J2aXNpb24sIFVTQlZJU0lPTl9WSU5fUkVHMiwKKwlyZXQgPSB1c2J2aXNpb25fd3JpdGVfcmVnKHVzYnZpc2lvbiwgVVNCVklTSU9OX1ZJTl9SRUcyLAogCQkJICAgICAgVVNCVklTSU9OX0tFRVBfQkxBTksgfCBVU0JWSVNJT05fTk9IVkFMSUQgfAotCQkJCSAgdXNidmlzaW9uLT5WaW5fUmVnMl9QcmVzZXQpKSA8IDApIHJldHVybiByZXQ7CisJCQkJICB1c2J2aXNpb24tPnZpbl9yZWcyX3ByZXNldCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CiAKIAkvKiBUT0RPOiBzY2hlZHVsZSB0aW1lb3V0ICovCi0Jd2hpbGUgKCh1c2J2aXNpb25fcmVhZF9yZWcodXNidmlzaW9uLCBVU0JWSVNJT05fU1RBVFVTX1JFRykgJiAweDAxKSAhPSAxKTsKKwl3aGlsZSAoKHVzYnZpc2lvbl9yZWFkX3JlZyh1c2J2aXNpb24sIFVTQlZJU0lPTl9TVEFUVVNfUkVHKSAmIDB4MDEpICE9IDEpCisJCTsKIAogCXJldHVybiAwOwogfQpAQCAtMjM4NiwyNyArMjI4OCwyNyBAQAogaW50IHVzYnZpc2lvbl9hdWRpb19vZmYoc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbikKIHsKIAlpZiAodXNidmlzaW9uX3dyaXRlX3JlZyh1c2J2aXNpb24sIFVTQlZJU0lPTl9JT1BJTl9SRUcsIFVTQlZJU0lPTl9BVURJT19NVVRFKSA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJ1c2J2aXNpb25fYXVkaW9fb2ZmOiBjYW4ndCB3aXJ0ZSByZWdcbiIpOworCQlwcmludGsoS0VSTl9FUlIgInVzYnZpc2lvbl9hdWRpb19vZmY6IGNhbid0IHdyaXRlIHJlZ1xuIik7CiAJCXJldHVybiAtMTsKIAl9Ci0JdXNidmlzaW9uLT5BdWRpb011dGUgPSAwOwotCXVzYnZpc2lvbi0+QXVkaW9DaGFubmVsID0gVVNCVklTSU9OX0FVRElPX01VVEU7CisJdXNidmlzaW9uLT5hdWRpb19tdXRlID0gMDsKKwl1c2J2aXNpb24tPmF1ZGlvX2NoYW5uZWwgPSBVU0JWSVNJT05fQVVESU9fTVVURTsKIAlyZXR1cm4gMDsKIH0KIAotaW50IHVzYnZpc2lvbl9zZXRfYXVkaW8oc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiwgaW50IEF1ZGlvQ2hhbm5lbCkKK2ludCB1c2J2aXNpb25fc2V0X2F1ZGlvKHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24sIGludCBhdWRpb19jaGFubmVsKQogewotCWlmICghdXNidmlzaW9uLT5BdWRpb011dGUpIHsKLQkJaWYgKHVzYnZpc2lvbl93cml0ZV9yZWcodXNidmlzaW9uLCBVU0JWSVNJT05fSU9QSU5fUkVHLCBBdWRpb0NoYW5uZWwpIDwgMCkgeworCWlmICghdXNidmlzaW9uLT5hdWRpb19tdXRlKSB7CisJCWlmICh1c2J2aXNpb25fd3JpdGVfcmVnKHVzYnZpc2lvbiwgVVNCVklTSU9OX0lPUElOX1JFRywgYXVkaW9fY2hhbm5lbCkgPCAwKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgInVzYnZpc2lvbl9zZXRfYXVkaW86IGNhbid0IHdyaXRlIGlvcGluIHJlZ2lzdGVyIGZvciBhdWRpbyBzd2l0Y2hpbmdcbiIpOwogCQkJcmV0dXJuIC0xOwogCQl9CiAJfQotCXVzYnZpc2lvbi0+QXVkaW9DaGFubmVsID0gQXVkaW9DaGFubmVsOworCXVzYnZpc2lvbi0+YXVkaW9fY2hhbm5lbCA9IGF1ZGlvX2NoYW5uZWw7CiAJcmV0dXJuIDA7CiB9CiAKLWludCB1c2J2aXNpb25fc2V0dXAoc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbixpbnQgZm9ybWF0KQoraW50IHVzYnZpc2lvbl9zZXR1cChzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uLCBpbnQgZm9ybWF0KQogewogCXVzYnZpc2lvbl9zZXRfdmlkZW9fZm9ybWF0KHVzYnZpc2lvbiwgZm9ybWF0KTsKIAl1c2J2aXNpb25fc2V0X2RyYW1fc2V0dGluZ3ModXNidmlzaW9uKTsKQEAgLTI0MjEsMjcgKzIzMjMsMjggQEAKIAogaW50IHVzYnZpc2lvbl9zZXRfYWx0ZXJuYXRlKHN0cnVjdCB1c2JfdXNidmlzaW9uICpkZXYpCiB7Ci0JaW50IGVyckNvZGUsIHByZXZfYWx0ID0gZGV2LT5pZmFjZUFsdDsKKwlpbnQgZXJyX2NvZGUsIHByZXZfYWx0ID0gZGV2LT5pZmFjZV9hbHQ7CiAJaW50IGk7CiAKLQlkZXYtPmlmYWNlQWx0PTA7Ci0JZm9yKGk9MDtpPCBkZXYtPm51bV9hbHQ7IGkrKykKLQkJaWYoZGV2LT5hbHRfbWF4X3BrdF9zaXplW2ldPmRldi0+YWx0X21heF9wa3Rfc2l6ZVtkZXYtPmlmYWNlQWx0XSkKLQkJCWRldi0+aWZhY2VBbHQ9aTsKKwlkZXYtPmlmYWNlX2FsdCA9IDA7CisJZm9yIChpID0gMDsgaSA8IGRldi0+bnVtX2FsdDsgaSsrKQorCQlpZiAoZGV2LT5hbHRfbWF4X3BrdF9zaXplW2ldID4gZGV2LT5hbHRfbWF4X3BrdF9zaXplW2Rldi0+aWZhY2VfYWx0XSkKKwkJCWRldi0+aWZhY2VfYWx0ID0gaTsKIAotCWlmIChkZXYtPmlmYWNlQWx0ICE9IHByZXZfYWx0KSB7Ci0JCWRldi0+aXNvY1BhY2tldFNpemUgPSBkZXYtPmFsdF9tYXhfcGt0X3NpemVbZGV2LT5pZmFjZUFsdF07Ci0JCVBERUJVRyhEQkdfRlVOQywic2V0dGluZyBhbHRlcm5hdGUgJWQgd2l0aCB3TWF4UGFja2V0U2l6ZT0ldSIsIGRldi0+aWZhY2VBbHQsZGV2LT5pc29jUGFja2V0U2l6ZSk7Ci0JCWVyckNvZGUgPSB1c2Jfc2V0X2ludGVyZmFjZShkZXYtPmRldiwgZGV2LT5pZmFjZSwgZGV2LT5pZmFjZUFsdCk7Ci0JCWlmIChlcnJDb2RlIDwgMCkgeworCWlmIChkZXYtPmlmYWNlX2FsdCAhPSBwcmV2X2FsdCkgeworCQlkZXYtPmlzb2NfcGFja2V0X3NpemUgPSBkZXYtPmFsdF9tYXhfcGt0X3NpemVbZGV2LT5pZmFjZV9hbHRdOworCQlQREVCVUcoREJHX0ZVTkMsICJzZXR0aW5nIGFsdGVybmF0ZSAlZCB3aXRoIG1heF9wYWNrZXRfc2l6ZT0ldSIsCisJCQkJZGV2LT5pZmFjZV9hbHQsIGRldi0+aXNvY19wYWNrZXRfc2l6ZSk7CisJCWVycl9jb2RlID0gdXNiX3NldF9pbnRlcmZhY2UoZGV2LT5kZXYsIGRldi0+aWZhY2UsIGRldi0+aWZhY2VfYWx0KTsKKwkJaWYgKGVycl9jb2RlIDwgMCkgewogCQkJZGV2X2VycigmZGV2LT5kZXYtPmRldiwKIAkJCQkiY2Fubm90IGNoYW5nZSBhbHRlcm5hdGUgbnVtYmVyIHRvICVkIChlcnJvcj0laSlcbiIsCi0JCQkJCWRldi0+aWZhY2VBbHQsIGVyckNvZGUpOwotCQkJcmV0dXJuIGVyckNvZGU7CisJCQkJCWRldi0+aWZhY2VfYWx0LCBlcnJfY29kZSk7CisJCQlyZXR1cm4gZXJyX2NvZGU7CiAJCX0KIAl9CiAKLQlQREVCVUcoREJHX0lTT0MsICJJU08gUGFja2V0IExlbmd0aDolZCIsIGRldi0+aXNvY1BhY2tldFNpemUpOworCVBERUJVRyhEQkdfSVNPQywgIklTTyBQYWNrZXQgTGVuZ3RoOiVkIiwgZGV2LT5pc29jX3BhY2tldF9zaXplKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjQ1MywyNyArMjM1NiwyNyBAQAogaW50IHVzYnZpc2lvbl9pbml0X2lzb2Moc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbikKIHsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gdXNidmlzaW9uLT5kZXY7Ci0JaW50IGJ1ZklkeCwgZXJyQ29kZSwgcmVnVmFsdWU7CisJaW50IGJ1Zl9pZHgsIGVycl9jb2RlLCByZWdfdmFsdWU7CiAJaW50IHNiX3NpemU7CiAKIAlpZiAoIVVTQlZJU0lPTl9JU19PUEVSQVRJT05BTCh1c2J2aXNpb24pKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXVzYnZpc2lvbi0+Y3VyRnJhbWUgPSBOVUxMOworCXVzYnZpc2lvbi0+Y3VyX2ZyYW1lID0gTlVMTDsKIAlzY3JhdGNoX3Jlc2V0KHVzYnZpc2lvbik7CiAKIAkvKiBBbHRlcm5hdGUgaW50ZXJmYWNlIDEgaXMgaXMgdGhlIGJpZ2dlc3QgZnJhbWUgc2l6ZSAqLwotCWVyckNvZGUgPSB1c2J2aXNpb25fc2V0X2FsdGVybmF0ZSh1c2J2aXNpb24pOwotCWlmIChlcnJDb2RlIDwgMCkgewotCQl1c2J2aXNpb24tPmxhc3RfZXJyb3IgPSBlcnJDb2RlOworCWVycl9jb2RlID0gdXNidmlzaW9uX3NldF9hbHRlcm5hdGUodXNidmlzaW9uKTsKKwlpZiAoZXJyX2NvZGUgPCAwKSB7CisJCXVzYnZpc2lvbi0+bGFzdF9lcnJvciA9IGVycl9jb2RlOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KLQlzYl9zaXplID0gVVNCVklTSU9OX1VSQl9GUkFNRVMgKiB1c2J2aXNpb24tPmlzb2NQYWNrZXRTaXplOworCXNiX3NpemUgPSBVU0JWSVNJT05fVVJCX0ZSQU1FUyAqIHVzYnZpc2lvbi0+aXNvY19wYWNrZXRfc2l6ZTsKIAotCXJlZ1ZhbHVlID0gKDE2IC0gdXNidmlzaW9uX3JlYWRfcmVnKHVzYnZpc2lvbiwKKwlyZWdfdmFsdWUgPSAoMTYgLSB1c2J2aXNpb25fcmVhZF9yZWcodXNidmlzaW9uLAogCQkJCQkgICAgVVNCVklTSU9OX0FMVEVSX1JFRykpICYgMHgwRjsKIAotCXVzYnZpc2lvbi0+dXNiX2JhbmR3aWR0aCA9IHJlZ1ZhbHVlID4+IDE7CisJdXNidmlzaW9uLT51c2JfYmFuZHdpZHRoID0gcmVnX3ZhbHVlID4+IDE7CiAJUERFQlVHKERCR19JU09DLCAiVVNCIEJhbmR3aWR0aCBVc2FnZTogJWRNYml0L1NlYyIsCiAJICAgICAgIHVzYnZpc2lvbi0+dXNiX2JhbmR3aWR0aCk7CiAKQEAgLTI0ODEsNyArMjM4NCw3IEBACiAKIAkvKiBXZSBkb3VibGUgYnVmZmVyIHRoZSBJc28gbGlzdHMgKi8KIAotCWZvciAoYnVmSWR4ID0gMDsgYnVmSWR4IDwgVVNCVklTSU9OX05VTVNCVUY7IGJ1ZklkeCsrKSB7CisJZm9yIChidWZfaWR4ID0gMDsgYnVmX2lkeCA8IFVTQlZJU0lPTl9OVU1TQlVGOyBidWZfaWR4KyspIHsKIAkJaW50IGosIGs7CiAJCXN0cnVjdCB1cmIgKnVyYjsKIApAQCAtMjQ5MSw4ICsyMzk0LDggQEAKIAkJCQkiJXM6IHVzYl9hbGxvY191cmIoKSBmYWlsZWRcbiIsIF9fZnVuY19fKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9Ci0JCXVzYnZpc2lvbi0+c2J1ZltidWZJZHhdLnVyYiA9IHVyYjsKLQkJdXNidmlzaW9uLT5zYnVmW2J1ZklkeF0uZGF0YSA9CisJCXVzYnZpc2lvbi0+c2J1ZltidWZfaWR4XS51cmIgPSB1cmI7CisJCXVzYnZpc2lvbi0+c2J1ZltidWZfaWR4XS5kYXRhID0KIAkJCXVzYl9hbGxvY19jb2hlcmVudCh1c2J2aXNpb24tPmRldiwKIAkJCQkJICAgc2Jfc2l6ZSwKIAkJCQkJICAgR0ZQX0tFUk5FTCwKQEAgLTI1MDIsMzEgKzI0MDUsMzEgQEAKIAkJdXJiLT5waXBlID0gdXNiX3Jjdmlzb2NwaXBlKGRldiwgdXNidmlzaW9uLT52aWRlb19lbmRwKTsKIAkJdXJiLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9JU09fQVNBUCB8IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOwogCQl1cmItPmludGVydmFsID0gMTsKLQkJdXJiLT50cmFuc2Zlcl9idWZmZXIgPSB1c2J2aXNpb24tPnNidWZbYnVmSWR4XS5kYXRhOwotCQl1cmItPmNvbXBsZXRlID0gdXNidmlzaW9uX2lzb2NJcnE7CisJCXVyYi0+dHJhbnNmZXJfYnVmZmVyID0gdXNidmlzaW9uLT5zYnVmW2J1Zl9pZHhdLmRhdGE7CisJCXVyYi0+Y29tcGxldGUgPSB1c2J2aXNpb25faXNvY19pcnE7CiAJCXVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSBVU0JWSVNJT05fVVJCX0ZSQU1FUzsKIAkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0KLQkJICAgIHVzYnZpc2lvbi0+aXNvY1BhY2tldFNpemUgKiBVU0JWSVNJT05fVVJCX0ZSQU1FUzsKKwkJICAgIHVzYnZpc2lvbi0+aXNvY19wYWNrZXRfc2l6ZSAqIFVTQlZJU0lPTl9VUkJfRlJBTUVTOwogCQlmb3IgKGogPSBrID0gMDsgaiA8IFVTQlZJU0lPTl9VUkJfRlJBTUVTOyBqKyssCi0JCSAgICAgayArPSB1c2J2aXNpb24tPmlzb2NQYWNrZXRTaXplKSB7CisJCSAgICAgayArPSB1c2J2aXNpb24tPmlzb2NfcGFja2V0X3NpemUpIHsKIAkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2Nbal0ub2Zmc2V0ID0gazsKIAkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2Nbal0ubGVuZ3RoID0KLQkJCQl1c2J2aXNpb24tPmlzb2NQYWNrZXRTaXplOworCQkJCXVzYnZpc2lvbi0+aXNvY19wYWNrZXRfc2l6ZTsKIAkJfQogCX0KIAogCS8qIFN1Ym1pdCBhbGwgVVJCcyAqLwotCWZvciAoYnVmSWR4ID0gMDsgYnVmSWR4IDwgVVNCVklTSU9OX05VTVNCVUY7IGJ1ZklkeCsrKSB7Ci0JCQllcnJDb2RlID0gdXNiX3N1Ym1pdF91cmIodXNidmlzaW9uLT5zYnVmW2J1ZklkeF0udXJiLAorCWZvciAoYnVmX2lkeCA9IDA7IGJ1Zl9pZHggPCBVU0JWSVNJT05fTlVNU0JVRjsgYnVmX2lkeCsrKSB7CisJCQllcnJfY29kZSA9IHVzYl9zdWJtaXRfdXJiKHVzYnZpc2lvbi0+c2J1ZltidWZfaWR4XS51cmIsCiAJCQkJCQkgR0ZQX0tFUk5FTCk7Ci0JCWlmIChlcnJDb2RlKSB7CisJCWlmIChlcnJfY29kZSkgewogCQkJZGV2X2VycigmdXNidmlzaW9uLT5kZXYtPmRldiwKIAkJCQkiJXM6IHVzYl9zdWJtaXRfdXJiKCVkKSBmYWlsZWQ6IGVycm9yICVkXG4iLAotCQkJCQlfX2Z1bmNfXywgYnVmSWR4LCBlcnJDb2RlKTsKKwkJCQkJX19mdW5jX18sIGJ1Zl9pZHgsIGVycl9jb2RlKTsKIAkJfQogCX0KIAotCXVzYnZpc2lvbi0+c3RyZWFtaW5nID0gU3RyZWFtX0lkbGU7CisJdXNidmlzaW9uLT5zdHJlYW1pbmcgPSBzdHJlYW1faWRsZTsKIAlQREVCVUcoREJHX0lTT0MsICIlczogc3RyZWFtaW5nPTEgdXNidmlzaW9uLT52aWRlb19lbmRwPSQlMDJ4IiwKIAkgICAgICAgX19mdW5jX18sCiAJICAgICAgIHVzYnZpc2lvbi0+dmlkZW9fZW5kcCk7CkBAIC0yNTQyLDQ3ICsyNDQ1LDQ2IEBACiAgKi8KIHZvaWQgdXNidmlzaW9uX3N0b3BfaXNvYyhzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uKQogewotCWludCBidWZJZHgsIGVyckNvZGUsIHJlZ1ZhbHVlOwotCWludCBzYl9zaXplID0gVVNCVklTSU9OX1VSQl9GUkFNRVMgKiB1c2J2aXNpb24tPmlzb2NQYWNrZXRTaXplOworCWludCBidWZfaWR4LCBlcnJfY29kZSwgcmVnX3ZhbHVlOworCWludCBzYl9zaXplID0gVVNCVklTSU9OX1VSQl9GUkFNRVMgKiB1c2J2aXNpb24tPmlzb2NfcGFja2V0X3NpemU7CiAKLQlpZiAoKHVzYnZpc2lvbi0+c3RyZWFtaW5nID09IFN0cmVhbV9PZmYpIHx8ICh1c2J2aXNpb24tPmRldiA9PSBOVUxMKSkKKwlpZiAoKHVzYnZpc2lvbi0+c3RyZWFtaW5nID09IHN0cmVhbV9vZmYpIHx8ICh1c2J2aXNpb24tPmRldiA9PSBOVUxMKSkKIAkJcmV0dXJuOwogCiAJLyogVW5zY2hlZHVsZSBhbGwgb2YgdGhlIGlzbyB0ZCdzICovCi0JZm9yIChidWZJZHggPSAwOyBidWZJZHggPCBVU0JWSVNJT05fTlVNU0JVRjsgYnVmSWR4KyspIHsKLQkJdXNiX2tpbGxfdXJiKHVzYnZpc2lvbi0+c2J1ZltidWZJZHhdLnVyYik7Ci0JCWlmICh1c2J2aXNpb24tPnNidWZbYnVmSWR4XS5kYXRhKXsKKwlmb3IgKGJ1Zl9pZHggPSAwOyBidWZfaWR4IDwgVVNCVklTSU9OX05VTVNCVUY7IGJ1Zl9pZHgrKykgeworCQl1c2Jfa2lsbF91cmIodXNidmlzaW9uLT5zYnVmW2J1Zl9pZHhdLnVyYik7CisJCWlmICh1c2J2aXNpb24tPnNidWZbYnVmX2lkeF0uZGF0YSkgewogCQkJdXNiX2ZyZWVfY29oZXJlbnQodXNidmlzaW9uLT5kZXYsCiAJCQkJCSAgc2Jfc2l6ZSwKLQkJCQkJICB1c2J2aXNpb24tPnNidWZbYnVmSWR4XS5kYXRhLAotCQkJCQkgIHVzYnZpc2lvbi0+c2J1ZltidWZJZHhdLnVyYi0+dHJhbnNmZXJfZG1hKTsKKwkJCQkJICB1c2J2aXNpb24tPnNidWZbYnVmX2lkeF0uZGF0YSwKKwkJCQkJICB1c2J2aXNpb24tPnNidWZbYnVmX2lkeF0udXJiLT50cmFuc2Zlcl9kbWEpOwogCQl9Ci0JCXVzYl9mcmVlX3VyYih1c2J2aXNpb24tPnNidWZbYnVmSWR4XS51cmIpOwotCQl1c2J2aXNpb24tPnNidWZbYnVmSWR4XS51cmIgPSBOVUxMOworCQl1c2JfZnJlZV91cmIodXNidmlzaW9uLT5zYnVmW2J1Zl9pZHhdLnVyYik7CisJCXVzYnZpc2lvbi0+c2J1ZltidWZfaWR4XS51cmIgPSBOVUxMOwogCX0KIAotCVBERUJVRyhEQkdfSVNPQywgIiVzOiBzdHJlYW1pbmc9U3RyZWFtX09mZlxuIiwgX19mdW5jX18pOwotCXVzYnZpc2lvbi0+c3RyZWFtaW5nID0gU3RyZWFtX09mZjsKKwlQREVCVUcoREJHX0lTT0MsICIlczogc3RyZWFtaW5nPXN0cmVhbV9vZmZcbiIsIF9fZnVuY19fKTsKKwl1c2J2aXNpb24tPnN0cmVhbWluZyA9IHN0cmVhbV9vZmY7CiAKIAlpZiAoIXVzYnZpc2lvbi0+cmVtb3ZlX3BlbmRpbmcpIHsKLQogCQkvKiBTZXQgcGFja2V0IHNpemUgdG8gMCAqLwotCQl1c2J2aXNpb24tPmlmYWNlQWx0PTA7Ci0JCWVyckNvZGUgPSB1c2Jfc2V0X2ludGVyZmFjZSh1c2J2aXNpb24tPmRldiwgdXNidmlzaW9uLT5pZmFjZSwKLQkJCQkJICAgIHVzYnZpc2lvbi0+aWZhY2VBbHQpOwotCQlpZiAoZXJyQ29kZSA8IDApIHsKKwkJdXNidmlzaW9uLT5pZmFjZV9hbHQgPSAwOworCQllcnJfY29kZSA9IHVzYl9zZXRfaW50ZXJmYWNlKHVzYnZpc2lvbi0+ZGV2LCB1c2J2aXNpb24tPmlmYWNlLAorCQkJCQkgICAgdXNidmlzaW9uLT5pZmFjZV9hbHQpOworCQlpZiAoZXJyX2NvZGUgPCAwKSB7CiAJCQlkZXZfZXJyKCZ1c2J2aXNpb24tPmRldi0+ZGV2LAogCQkJCSIlczogdXNiX3NldF9pbnRlcmZhY2UoKSBmYWlsZWQ6IGVycm9yICVkXG4iLAotCQkJCQlfX2Z1bmNfXywgZXJyQ29kZSk7Ci0JCQl1c2J2aXNpb24tPmxhc3RfZXJyb3IgPSBlcnJDb2RlOworCQkJCQlfX2Z1bmNfXywgZXJyX2NvZGUpOworCQkJdXNidmlzaW9uLT5sYXN0X2Vycm9yID0gZXJyX2NvZGU7CiAJCX0KLQkJcmVnVmFsdWUgPSAoMTYtdXNidmlzaW9uX3JlYWRfcmVnKHVzYnZpc2lvbiwgVVNCVklTSU9OX0FMVEVSX1JFRykpICYgMHgwRjsKLQkJdXNidmlzaW9uLT5pc29jUGFja2V0U2l6ZSA9Ci0JCQkocmVnVmFsdWUgPT0gMCkgPyAwIDogKHJlZ1ZhbHVlICogNjQpIC0gMTsKKwkJcmVnX3ZhbHVlID0gKDE2LXVzYnZpc2lvbl9yZWFkX3JlZyh1c2J2aXNpb24sIFVTQlZJU0lPTl9BTFRFUl9SRUcpKSAmIDB4MEY7CisJCXVzYnZpc2lvbi0+aXNvY19wYWNrZXRfc2l6ZSA9CisJCQkocmVnX3ZhbHVlID09IDApID8gMCA6IChyZWdfdmFsdWUgKiA2NCkgLSAxOwogCQlQREVCVUcoREJHX0lTT0MsICJJU08gUGFja2V0IExlbmd0aDolZCIsCi0JCSAgICAgICB1c2J2aXNpb24tPmlzb2NQYWNrZXRTaXplKTsKKwkJICAgICAgIHVzYnZpc2lvbi0+aXNvY19wYWNrZXRfc2l6ZSk7CiAKLQkJdXNidmlzaW9uLT51c2JfYmFuZHdpZHRoID0gcmVnVmFsdWUgPj4gMTsKKwkJdXNidmlzaW9uLT51c2JfYmFuZHdpZHRoID0gcmVnX3ZhbHVlID4+IDE7CiAJCVBERUJVRyhEQkdfSVNPQywgIlVTQiBCYW5kd2lkdGggVXNhZ2U6ICVkTWJpdC9TZWMiLAogCQkgICAgICAgdXNidmlzaW9uLT51c2JfYmFuZHdpZHRoKTsKIAl9CkBAIC0yNTkyLDM5ICsyNDk0LDM4IEBACiB7CiAJLyogaW5wdXRzICMwIGFuZCAjMyBhcmUgY29uc3RhbnQgZm9yIGV2ZXJ5IFNBQTcxMXguICovCiAJLyogaW5wdXRzICMxIGFuZCAjMiBhcmUgdmFyaWFibGUgZm9yIFNBQTcxMTEgYW5kIFNBQTcxMTMgKi8KLQlpbnQgbW9kZVs0XT0ge1NBQTcxMTVfQ09NUE9TSVRFMCwgMCwgMCwgU0FBNzExNV9DT01QT1NJVEUzfTsKLQlpbnQgYXVkaW9bXT0gezEsIDAsIDAsIDB9OwotCS8vY2hhbm5lbCAwIGlzIFRWIHdpdGggYXVkaW9jaGFubmVsIDEgKHR1bmVyIG1vbm8pCi0JLy9jaGFubmVsIDEgaXMgQ29tcG9zaXRlIHdpdGggYXVkaW8gY2hhbm5lbCAwIChsaW5lIGluKQotCS8vY2hhbm5lbCAyIGlzIFMtVmlkZW8gd2l0aCBhdWRpbyBjaGFubmVsIDAgKGxpbmUgaW4pCi0JLy9jaGFubmVsIDMgaXMgYWRkaXRpb25hbCB2aWRlbyBpbnB1dHMgdG8gdGhlIGRldmljZSB3aXRoIGF1ZGlvIGNoYW5uZWwgMCAobGluZSBpbikKKwlpbnQgbW9kZVs0XSA9IHsgU0FBNzExNV9DT01QT1NJVEUwLCAwLCAwLCBTQUE3MTE1X0NPTVBPU0lURTMgfTsKKwlpbnQgYXVkaW9bXSA9IHsgMSwgMCwgMCwgMCB9OworCS8qIGNoYW5uZWwgMCBpcyBUViB3aXRoIGF1ZGlvY2hhbm5lbCAxICh0dW5lciBtb25vKSAqLworCS8qIGNoYW5uZWwgMSBpcyBDb21wb3NpdGUgd2l0aCBhdWRpbyBjaGFubmVsIDAgKGxpbmUgaW4pICovCisJLyogY2hhbm5lbCAyIGlzIFMtVmlkZW8gd2l0aCBhdWRpbyBjaGFubmVsIDAgKGxpbmUgaW4pICovCisJLyogY2hhbm5lbCAzIGlzIGFkZGl0aW9uYWwgdmlkZW8gaW5wdXRzIHRvIHRoZSBkZXZpY2Ugd2l0aCBhdWRpbyBjaGFubmVsIDAgKGxpbmUgaW4pICovCiAKIAlSRVNUUklDVF9UT19SQU5HRShjaGFubmVsLCAwLCB1c2J2aXNpb24tPnZpZGVvX2lucHV0cyk7CiAJdXNidmlzaW9uLT5jdGxfaW5wdXQgPSBjaGFubmVsOwogCi0JLy8gc2V0IHRoZSBuZXcgY2hhbm5lbAotCS8vIFJlZ3VsYXIgVVNCIFRWIFR1bmVycyAtPiBjaGFubmVsOiAwID0gVGVsZXZpc2lvbiwgMSA9IENvbXBvc2l0ZSwgMiA9IFMtVmlkZW8KLQkvLyBGb3VyIHZpZGVvIGlucHV0IGRldmljZXMgLT4gY2hhbm5lbDogMCA9IENoYW4gV2hpdGUsIDEgPSBDaGFuIEdyZWVuLCAyID0gQ2hhbiBZZWxsb3csIDMgPSBDaGFuIFJlZAorCS8qIHNldCB0aGUgbmV3IGNoYW5uZWwgKi8KKwkvKiBSZWd1bGFyIFVTQiBUViBUdW5lcnMgLT4gY2hhbm5lbDogMCA9IFRlbGV2aXNpb24sIDEgPSBDb21wb3NpdGUsIDIgPSBTLVZpZGVvICovCisJLyogRm91ciB2aWRlbyBpbnB1dCBkZXZpY2VzIC0+IGNoYW5uZWw6IDAgPSBDaGFuIFdoaXRlLCAxID0gQ2hhbiBHcmVlbiwgMiA9IENoYW4gWWVsbG93LCAzID0gQ2hhbiBSZWQgKi8KIAotCXN3aXRjaCAodXNidmlzaW9uX2RldmljZV9kYXRhW3VzYnZpc2lvbi0+RGV2TW9kZWxdLkNvZGVjKSB7Ci0JCWNhc2UgQ09ERUNfU0FBNzExMzoKLQkJCW1vZGVbMV0gPSBTQUE3MTE1X0NPTVBPU0lURTI7Ci0JCQlpZiAoU3dpdGNoU1ZpZGVvSW5wdXQpIHsKLQkJCQkvKiBUbyBoYW5kbGUgcHJvYmxlbXMgd2l0aCBTLVZpZGVvIElucHV0IGZvcgotCQkJCSAqIHNvbWUgZGV2aWNlcy4gIFVzZSBTd2l0Y2hTVmlkZW9JbnB1dAotCQkJCSAqIHBhcmFtZXRlciB3aGVuIGxvYWRpbmcgdGhlIG1vZHVsZS4qLwotCQkJCW1vZGVbMl0gPSBTQUE3MTE1X0NPTVBPU0lURTE7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQltb2RlWzJdID0gU0FBNzExNV9TVklERU8xOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgQ09ERUNfU0FBNzExMToKLQkJZGVmYXVsdDoKLQkJCS8qIG1vZGVzIGZvciBzYWE3MTExICovCi0JCQltb2RlWzFdID0gU0FBNzExNV9DT01QT1NJVEUxOworCXN3aXRjaCAodXNidmlzaW9uX2RldmljZV9kYXRhW3VzYnZpc2lvbi0+ZGV2X21vZGVsXS5jb2RlYykgeworCWNhc2UgQ09ERUNfU0FBNzExMzoKKwkJbW9kZVsxXSA9IFNBQTcxMTVfQ09NUE9TSVRFMjsKKwkJaWYgKHN3aXRjaF9zdmlkZW9faW5wdXQpIHsKKwkJCS8qIFRvIGhhbmRsZSBwcm9ibGVtcyB3aXRoIFMtVmlkZW8gSW5wdXQgZm9yCisJCQkgKiBzb21lIGRldmljZXMuICBVc2Ugc3dpdGNoX3N2aWRlb19pbnB1dAorCQkJICogcGFyYW1ldGVyIHdoZW4gbG9hZGluZyB0aGUgbW9kdWxlLiovCisJCQltb2RlWzJdID0gU0FBNzExNV9DT01QT1NJVEUxOworCQl9IGVsc2UgewogCQkJbW9kZVsyXSA9IFNBQTcxMTVfU1ZJREVPMTsKLQkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCWNhc2UgQ09ERUNfU0FBNzExMToKKwlkZWZhdWx0OgorCQkvKiBtb2RlcyBmb3Igc2FhNzExMSAqLworCQltb2RlWzFdID0gU0FBNzExNV9DT01QT1NJVEUxOworCQltb2RlWzJdID0gU0FBNzExNV9TVklERU8xOworCQlicmVhazsKIAl9CiAJY2FsbF9hbGwodXNidmlzaW9uLCB2aWRlbywgc19yb3V0aW5nLCBtb2RlW2NoYW5uZWxdLCAwLCAwKTsKIAl1c2J2aXNpb25fc2V0X2F1ZGlvKHVzYnZpc2lvbiwgYXVkaW9bY2hhbm5lbF0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vdXNidmlzaW9uLWkyYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vdXNidmlzaW9uLWkyYy5jCmluZGV4IDgxZGQ1M2IuLjA1YjEzNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi1pMmMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi91c2J2aXNpb24taTJjLmMKQEAgLTI4LDE4ICsyOCwxOCBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSAidXNidmlzaW9uLmgiCiAKLSNkZWZpbmUgREJHX0kyQwkJMTw8MAorI2RlZmluZSBEQkdfSTJDCQkoMSA8PCAwKQogCiBzdGF0aWMgaW50IGkyY19kZWJ1ZzsKIAotbW9kdWxlX3BhcmFtIChpMmNfZGVidWcsIGludCwgMDY0NCk7CQkJLy8gZGVidWdfaTJjX3VzYiBtb2RlIG9mIHRoZSBkZXZpY2UgZHJpdmVyCittb2R1bGVfcGFyYW0oaTJjX2RlYnVnLCBpbnQsIDA2NDQpOwkJCS8qIGRlYnVnX2kyY191c2IgbW9kZSBvZiB0aGUgZGV2aWNlIGRyaXZlciAqLwogTU9EVUxFX1BBUk1fREVTQyhpMmNfZGVidWcsICJlbmFibGUgZGVidWcgbWVzc2FnZXMgW2kyY10iKTsKIAogI2RlZmluZSBQREVCVUcobGV2ZWwsIGZtdCwgYXJncy4uLikgeyBcCkBAIC03Miw4ICs3Miw4IEBACiAJCXVkZWxheSgxMCk7CiAJfQogCWlmIChpKSB7Ci0JCVBERUJVRyhEQkdfSTJDLCJOZWVkZWQgJWQgcmV0cmllcyBmb3IgYWRkcmVzcyAlIzJ4IiwgaSwgYWRkcik7Ci0JCVBERUJVRyhEQkdfSTJDLCJNYXliZSB0aGVyZSdzIG5vIGRldmljZSBhdCB0aGlzIGFkZHJlc3MiKTsKKwkJUERFQlVHKERCR19JMkMsICJOZWVkZWQgJWQgcmV0cmllcyBmb3IgYWRkcmVzcyAlIzJ4IiwgaSwgYWRkcik7CisJCVBERUJVRyhEQkdfSTJDLCAiTWF5YmUgdGhlcmUncyBubyBkZXZpY2UgYXQgdGhpcyBhZGRyZXNzIik7CiAJfQogCXJldHVybiByZXQ7CiB9CkBAIC05Niw4ICs5Niw4IEBACiAJCXVkZWxheSgxMCk7CiAJfQogCWlmIChpKSB7Ci0JCVBERUJVRyhEQkdfSTJDLCJOZWVkZWQgJWQgcmV0cmllcyBmb3IgYWRkcmVzcyAlIzJ4IiwgaSwgYWRkcik7Ci0JCVBERUJVRyhEQkdfSTJDLCJNYXliZSB0aGVyZSdzIG5vIGRldmljZSBhdCB0aGlzIGFkZHJlc3MiKTsKKwkJUERFQlVHKERCR19JMkMsICJOZWVkZWQgJWQgcmV0cmllcyBmb3IgYWRkcmVzcyAlIzJ4IiwgaSwgYWRkcik7CisJCVBERUJVRyhEQkdfSTJDLCAiTWF5YmUgdGhlcmUncyBubyBkZXZpY2UgYXQgdGhpcyBhZGRyZXNzIik7CiAJfQogCXJldHVybiByZXQ7CiB9CkBAIC0xNDMsOSArMTQzLDggQEAKIAkJZWxzZQogCQkJcmV0ID0gdHJ5X3dyaXRlX2FkZHJlc3MoaTJjX2FkYXAsIGFkZHIsIHJldHJpZXMpOwogCi0JCWlmIChyZXQgIT0gMSkgeworCQlpZiAocmV0ICE9IDEpCiAJCQlyZXR1cm4gLUVSRU1PVEVJTzsKLQkJfQogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTE2NCwyMiArMTYzLDIwIEBACiAJCXBtc2cgPSAmbXNnc1tpXTsKIAkJcmV0ID0gdXNiX2ZpbmRfYWRkcmVzcyhpMmNfYWRhcCwgcG1zZywgaTJjX2FkYXAtPnJldHJpZXMsICZhZGRyKTsKIAkJaWYgKHJldCAhPSAwKSB7Ci0JCQlQREVCVUcoREJHX0kyQywiZ290IE5BSyBmcm9tIGRldmljZSwgbWVzc2FnZSAjJWQiLCBpKTsKKwkJCVBERUJVRyhEQkdfSTJDLCAiZ290IE5BSyBmcm9tIGRldmljZSwgbWVzc2FnZSAjJWQiLCBpKTsKIAkJCXJldHVybiAocmV0IDwgMCkgPyByZXQgOiAtRVJFTU9URUlPOwogCQl9CiAKIAkJaWYgKHBtc2ctPmZsYWdzICYgSTJDX01fUkQpIHsKIAkJCS8qIHJlYWQgYnl0ZXMgaW50byBidWZmZXIgKi8KIAkJCXJldCA9ICh1c2J2aXNpb25faTJjX3JlYWQodXNidmlzaW9uLCBhZGRyLCBwbXNnLT5idWYsIHBtc2ctPmxlbikpOwotCQkJaWYgKHJldCA8IHBtc2ctPmxlbikgeworCQkJaWYgKHJldCA8IHBtc2ctPmxlbikKIAkJCQlyZXR1cm4gKHJldCA8IDApID8gcmV0IDogLUVSRU1PVEVJTzsKLQkJCX0KIAkJfSBlbHNlIHsKIAkJCS8qIHdyaXRlIGJ5dGVzIGZyb20gYnVmZmVyICovCiAJCQlyZXQgPSAodXNidmlzaW9uX2kyY193cml0ZSh1c2J2aXNpb24sIGFkZHIsIHBtc2ctPmJ1ZiwgcG1zZy0+bGVuKSk7Ci0JCQlpZiAocmV0IDwgcG1zZy0+bGVuKSB7CisJCQlpZiAocmV0IDwgcG1zZy0+bGVuKQogCQkJCXJldHVybiAocmV0IDwgMCkgPyByZXQgOiAtRVJFTU9URUlPOwotCQkJfQogCQl9CiAJfQogCXJldHVybiBudW07CkBAIC0yMTksNyArMjE2LDcgQEAKIAogCXNwcmludGYodXNidmlzaW9uLT5pMmNfYWRhcC5uYW1lLCAiJXMtJWQtJXMiLCBpMmNfYWRhcF90ZW1wbGF0ZS5uYW1lLAogCQl1c2J2aXNpb24tPmRldi0+YnVzLT5idXNudW0sIHVzYnZpc2lvbi0+ZGV2LT5kZXZwYXRoKTsKLQlQREVCVUcoREJHX0kyQywiQWRhcHRlcm5hbWU6ICVzIiwgdXNidmlzaW9uLT5pMmNfYWRhcC5uYW1lKTsKKwlQREVCVUcoREJHX0kyQywgIkFkYXB0ZXJuYW1lOiAlcyIsIHVzYnZpc2lvbi0+aTJjX2FkYXAubmFtZSk7CiAJdXNidmlzaW9uLT5pMmNfYWRhcC5kZXYucGFyZW50ID0gJnVzYnZpc2lvbi0+ZGV2LT5kZXY7CiAKIAlpMmNfc2V0X2FkYXBkYXRhKCZ1c2J2aXNpb24tPmkyY19hZGFwLCAmdXNidmlzaW9uLT52NGwyX2Rldik7CkBAIC0yNDQsNyArMjQxLDcgQEAKIAlQREVCVUcoREJHX0kyQywgImkyYyBidXMgZm9yICVzIHJlZ2lzdGVyZWQiLCB1c2J2aXNpb24tPmkyY19hZGFwLm5hbWUpOwogCiAJLyogUmVxdWVzdCB0aGUgbG9hZCBvZiB0aGUgaTJjIG1vZHVsZXMgd2UgbmVlZCAqLwotCXN3aXRjaCAodXNidmlzaW9uX2RldmljZV9kYXRhW3VzYnZpc2lvbi0+RGV2TW9kZWxdLkNvZGVjKSB7CisJc3dpdGNoICh1c2J2aXNpb25fZGV2aWNlX2RhdGFbdXNidmlzaW9uLT5kZXZfbW9kZWxdLmNvZGVjKSB7CiAJY2FzZSBDT0RFQ19TQUE3MTEzOgogCWNhc2UgQ09ERUNfU0FBNzExMToKIAkJLyogV2l0aG91dCB0aGlzIGRlbGF5IHRoZSBkZXRlY3Rpb24gb2YgdGhlIHNhYTcxMXggaXMKQEAgLTI1NSw3ICsyNTIsNyBAQAogCQkJCSJzYWE3MTE1X2F1dG8iLCAwLCBzYWE3MTF4X2FkZHJzKTsKIAkJYnJlYWs7CiAJfQotCWlmICh1c2J2aXNpb25fZGV2aWNlX2RhdGFbdXNidmlzaW9uLT5EZXZNb2RlbF0uVHVuZXIgPT0gMSkgeworCWlmICh1c2J2aXNpb25fZGV2aWNlX2RhdGFbdXNidmlzaW9uLT5kZXZfbW9kZWxdLnR1bmVyID09IDEpIHsKIAkJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKIAkJZW51bSB2NGwyX2kyY190dW5lcl90eXBlIHR5cGU7CiAJCXN0cnVjdCB0dW5lcl9zZXR1cCB0dW5fc2V0dXA7CkBAIC0yOTMsNyArMjkwLDcgQEAKIAlpMmNfZGVsX2FkYXB0ZXIoJih1c2J2aXNpb24tPmkyY19hZGFwKSk7CiAJdXNidmlzaW9uLT5yZWdpc3RlcmVkX2kyYyA9IDA7CiAKLQlQREVCVUcoREJHX0kyQywiaTJjIGJ1cyBmb3IgJXMgdW5yZWdpc3RlcmVkIiwgdXNidmlzaW9uLT5pMmNfYWRhcC5uYW1lKTsKKwlQREVCVUcoREJHX0kyQywgImkyYyBidXMgZm9yICVzIHVucmVnaXN0ZXJlZCIsIHVzYnZpc2lvbi0+aTJjX2FkYXAubmFtZSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTM1NSw5ICszNTIsOSBAQAogCiAJaWYgKGkyY19kZWJ1ZyAmIERCR19JMkMpIHsKIAkJaW50IGlkeDsKLQkJZm9yIChpZHggPSAwOyBpZHggPCBsZW47IGlkeCsrKSB7Ci0JCQlQREVCVUcoREJHX0kyQywicmVhZCAleCBmcm9tIGFkZHJlc3MgJXgiLCAodW5zaWduZWQgY2hhcilidWZbaWR4XSwgYWRkcik7Ci0JCX0KKworCQlmb3IgKGlkeCA9IDA7IGlkeCA8IGxlbjsgaWR4KyspCisJCQlQREVCVUcoREJHX0kyQywgInJlYWQgJXggZnJvbSBhZGRyZXNzICV4IiwgKHVuc2lnbmVkIGNoYXIpYnVmW2lkeF0sIGFkZHIpOwogCX0KIAlyZXR1cm4gbGVuOwogfQpAQCAtNDE2LDkgKzQxMyw5IEBACiAKIAlpZiAoaTJjX2RlYnVnICYgREJHX0kyQykgewogCQlpbnQgaWR4OwotCQlmb3IgKGlkeCA9IDA7IGlkeCA8IGxlbjsgaWR4KyspIHsKLQkJCVBERUJVRyhEQkdfSTJDLCJ3cm90ZSAleCBhdCBhZGRyZXNzICV4IiwgKHVuc2lnbmVkIGNoYXIpYnVmW2lkeF0sIGFkZHIpOwotCQl9CisKKwkJZm9yIChpZHggPSAwOyBpZHggPCBsZW47IGlkeCsrKQorCQkJUERFQlVHKERCR19JMkMsICJ3cm90ZSAleCBhdCBhZGRyZXNzICV4IiwgKHVuc2lnbmVkIGNoYXIpYnVmW2lkeF0sIGFkZHIpOwogCX0KIAlyZXR1cm4gbGVuOwogfQpAQCAtNDI2LDE4ICs0MjMsMTggQEAKIHN0YXRpYyBpbnQgdXNidmlzaW9uX2kyY193cml0ZShzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uLCB1bnNpZ25lZCBjaGFyIGFkZHIsIGNoYXIgKmJ1ZiwKIAkJCSAgICBzaG9ydCBsZW4pCiB7Ci0JY2hhciAqYnVmUHRyID0gYnVmOworCWNoYXIgKmJ1Zl9wdHIgPSBidWY7CiAJaW50IHJldHZhbDsKIAlpbnQgd3Jjb3VudCA9IDA7CiAJaW50IGNvdW50OwotCWludCBtYXhMZW4gPSA0OworCWludCBtYXhfbGVuID0gNDsKIAogCXdoaWxlIChsZW4gPiAwKSB7Ci0JCWNvdW50ID0gKGxlbiA+IG1heExlbikgPyBtYXhMZW4gOiBsZW47Ci0JCXJldHZhbCA9IHVzYnZpc2lvbl9pMmNfd3JpdGVfbWF4NCh1c2J2aXNpb24sIGFkZHIsIGJ1ZlB0ciwgY291bnQpOworCQljb3VudCA9IChsZW4gPiBtYXhfbGVuKSA/IG1heF9sZW4gOiBsZW47CisJCXJldHZhbCA9IHVzYnZpc2lvbl9pMmNfd3JpdGVfbWF4NCh1c2J2aXNpb24sIGFkZHIsIGJ1Zl9wdHIsIGNvdW50KTsKIAkJaWYgKHJldHZhbCA+IDApIHsKIAkJCWxlbiAtPSBjb3VudDsKLQkJCWJ1ZlB0ciArPSBjb3VudDsKKwkJCWJ1Zl9wdHIgKz0gY291bnQ7CiAJCQl3cmNvdW50ICs9IGNvdW50OwogCQl9IGVsc2UKIAkJCXJldHVybiAocmV0dmFsIDwgMCkgPyByZXR2YWwgOiAtRUZBVUxUOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vdXNidmlzaW9uLXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi91c2J2aXNpb24tdmlkZW8uYwppbmRleCAwMTFjMGMzLi42MDgzMTM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi91c2J2aXNpb24tdmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi91c2J2aXNpb24tdmlkZW8uYwpAQCAtNTYsNyArNTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAKQEAgLTcwLDggKzcwLDggQEAKICNpbmNsdWRlICJ1c2J2aXNpb24uaCIKICNpbmNsdWRlICJ1c2J2aXNpb24tY2FyZHMuaCIKIAotI2RlZmluZSBEUklWRVJfQVVUSE9SICJKb2VyZyBIZWNrZW5iYWNoIDxqb2VyZ0BoZWNrZW5iYWNoLWF3LmRlPixcCi0gRHdhaW5lIEdhcmRlbiA8RHdhaW5lR2FyZGVuQHJvZ2Vycy5jb20+IgorI2RlZmluZSBEUklWRVJfQVVUSE9SICJKb2VyZyBIZWNrZW5iYWNoIDxqb2VyZ0BoZWNrZW5iYWNoLWF3LmRlPiwgXAorRHdhaW5lIEdhcmRlbiA8RHdhaW5lR2FyZGVuQHJvZ2Vycy5jb20+IgogI2RlZmluZSBEUklWRVJfTkFNRSAidXNidmlzaW9uIgogI2RlZmluZSBEUklWRVJfQUxJQVMgIlVTQlZpc2lvbiIKICNkZWZpbmUgRFJJVkVSX0RFU0MgIlVTQlZpc2lvbiBVU0IgVmlkZW8gRGV2aWNlIERyaXZlciBmb3IgTGludXgiCkBAIC04Miw5ICs4Miw5IEBACiAjZGVmaW5lIFVTQlZJU0lPTl9EUklWRVJfVkVSU0lPTiBLRVJORUxfVkVSU0lPTihVU0JWSVNJT05fRFJJVkVSX1ZFUlNJT05fTUFKT1IsXAogVVNCVklTSU9OX0RSSVZFUl9WRVJTSU9OX01JTk9SLFwKIFVTQlZJU0lPTl9EUklWRVJfVkVSU0lPTl9QQVRDSExFVkVMKQotI2RlZmluZSBVU0JWSVNJT05fVkVSU0lPTl9TVFJJTkcgX19zdHJpbmdpZnkoVVNCVklTSU9OX0RSSVZFUl9WRVJTSU9OX01BSk9SKVwKLSAiLiIgX19zdHJpbmdpZnkoVVNCVklTSU9OX0RSSVZFUl9WRVJTSU9OX01JTk9SKVwKLSAiLiIgX19zdHJpbmdpZnkoVVNCVklTSU9OX0RSSVZFUl9WRVJTSU9OX1BBVENITEVWRUwpCisjZGVmaW5lIFVTQlZJU0lPTl9WRVJTSU9OX1NUUklORyBfX3N0cmluZ2lmeShVU0JWSVNJT05fRFJJVkVSX1ZFUlNJT05fTUFKT1IpIFwKKyIuIiBfX3N0cmluZ2lmeShVU0JWSVNJT05fRFJJVkVSX1ZFUlNJT05fTUlOT1IpIFwKKyIuIiBfX3N0cmluZ2lmeShVU0JWSVNJT05fRFJJVkVSX1ZFUlNJT05fUEFUQ0hMRVZFTCkKIAogI2RlZmluZQlFTkFCTEVfSEVYRFVNUAkwCS8qIEVuYWJsZSBpZiB5b3UgbmVlZCBpdCAqLwogCkBAIC05NiwxNiArOTYsMTYgQEAKIAkJCQlfX2Z1bmNfXywgX19MSU5FX18gLCAjIyBhcmdzKTsgXAogCX0KICNlbHNlCi0JI2RlZmluZSBQREVCVUcobGV2ZWwsIGZtdCwgYXJncy4uLikgZG8ge30gd2hpbGUoMCkKKwkjZGVmaW5lIFBERUJVRyhsZXZlbCwgZm10LCBhcmdzLi4uKSBkbyB7fSB3aGlsZSAoMCkKICNlbmRpZgogCi0jZGVmaW5lIERCR19JTwkJMTw8MQotI2RlZmluZSBEQkdfUFJPQkUJMTw8MgotI2RlZmluZSBEQkdfTU1BUAkxPDwzCisjZGVmaW5lIERCR19JTwkJKDEgPDwgMSkKKyNkZWZpbmUgREJHX1BST0JFCSgxIDw8IDIpCisjZGVmaW5lIERCR19NTUFQCSgxIDw8IDMpCiAKLS8vU3RyaW5nIG9wZXJhdGlvbnMKLSNkZWZpbmUgcm1zcGFjZShzdHIpCXdoaWxlKCpzdHI9PScgJykgc3RyKys7Ci0jZGVmaW5lIGdvdG8ybmV4dChzdHIpCXdoaWxlKCpzdHIhPScgJykgc3RyKys7IHdoaWxlKCpzdHI9PScgJykgc3RyKys7CisvKiBTdHJpbmcgb3BlcmF0aW9ucyAqLworI2RlZmluZSBybXNwYWNlKHN0cikJd2hpbGUgKCpzdHIgPT0gJyAnKSBzdHIrKzsKKyNkZWZpbmUgZ290bzJuZXh0KHN0cikJd2hpbGUgKCpzdHIgIT0gJyAnKSBzdHIrKzsgd2hpbGUgKCpzdHIgPT0gJyAnKSBzdHIrKzsKIAogCiAvKiBzZXF1ZW50aWFsIG51bWJlciBvZiB1c2J2aXNpb24gZGV2aWNlICovCkBAIC0xMTgsNyArMTE4LDcgQEAKIAl7IDEsIDQsIDMyLCBWNEwyX1BJWF9GTVRfUkdCMzIgICAsICJSR0IzMiIgfSwKIAl7IDEsIDIsIDE2LCBWNEwyX1BJWF9GTVRfUkdCNTU1ICAsICJSR0I1NTUiIH0sCiAJeyAxLCAyLCAxNiwgVjRMMl9QSVhfRk1UX1lVWVYgICAgLCAiWVVWNDIyIiB9LAotCXsgMSwgMiwgMTIsIFY0TDJfUElYX0ZNVF9ZVlU0MjAgICwgIllVVjQyMFAiIH0sIC8vIDEuNSAhCisJeyAxLCAyLCAxMiwgVjRMMl9QSVhfRk1UX1lWVTQyMCAgLCAiWVVWNDIwUCIgfSwgLyogMS41ICEgKi8KIAl7IDEsIDIsIDE2LCBWNEwyX1BJWF9GTVRfWVVWNDIyUCAsICJZVVY0MjJQIiB9CiB9OwogCkBAIC0xMjcsMTEgKzEyNywxMSBAQAogCiAvKiBEZWZhdWx0IGluaXRpYWxpemF0aW9uIG9mIGRldmljZSBkcml2ZXIgcGFyYW1ldGVycyAqLwogLyogU2V0IHRoZSBkZWZhdWx0IGZvcm1hdCBmb3IgSVNPQyBlbmRwb2ludCAqLwotc3RhdGljIGludCBpc29jTW9kZSA9IElTT0NfTU9ERV9DT01QUkVTUzsKK3N0YXRpYyBpbnQgaXNvY19tb2RlID0gSVNPQ19NT0RFX0NPTVBSRVNTOwogLyogU2V0IHRoZSBkZWZhdWx0IERlYnVnIE1vZGUgb2YgdGhlIGRldmljZSBkcml2ZXIgKi8KIHN0YXRpYyBpbnQgdmlkZW9fZGVidWc7CiAvKiBTZXQgdGhlIGRlZmF1bHQgZGV2aWNlIHRvIHBvd2VyIG9uIGF0IHN0YXJ0dXAgKi8KLXN0YXRpYyBpbnQgUG93ZXJPbkF0T3BlbiA9IDE7CitzdGF0aWMgaW50IHBvd2VyX29uX2F0X29wZW4gPSAxOwogLyogU2VxdWVudGlhbCBOdW1iZXIgb2YgVmlkZW8gRGV2aWNlICovCiBzdGF0aWMgaW50IHZpZGVvX25yID0gLTE7CiAvKiBTZXF1ZW50aWFsIE51bWJlciBvZiBSYWRpbyBEZXZpY2UgKi8KQEAgLTE0MCwyMCArMTQwLDIwIEBACiAvKiBHcmFiIHBhcmFtZXRlcnMgZm9yIHRoZSBkZXZpY2UgZHJpdmVyICovCiAKIC8qIFNob3dpbmcgcGFyYW1ldGVycyB1bmRlciBTWVNGUyAqLwotbW9kdWxlX3BhcmFtKGlzb2NNb2RlLCBpbnQsIDA0NDQpOworbW9kdWxlX3BhcmFtKGlzb2NfbW9kZSwgaW50LCAwNDQ0KTsKIG1vZHVsZV9wYXJhbSh2aWRlb19kZWJ1ZywgaW50LCAwNDQ0KTsKLW1vZHVsZV9wYXJhbShQb3dlck9uQXRPcGVuLCBpbnQsIDA0NDQpOworbW9kdWxlX3BhcmFtKHBvd2VyX29uX2F0X29wZW4sIGludCwgMDQ0NCk7CiBtb2R1bGVfcGFyYW0odmlkZW9fbnIsIGludCwgMDQ0NCk7CiBtb2R1bGVfcGFyYW0ocmFkaW9fbnIsIGludCwgMDQ0NCk7CiAKLU1PRFVMRV9QQVJNX0RFU0MoaXNvY01vZGUsICIgU2V0IHRoZSBkZWZhdWx0IGZvcm1hdCBmb3IgSVNPQyBlbmRwb2ludC4gIERlZmF1bHQ6IDB4NjAgKENvbXByZXNzaW9uIE9uKSIpOworTU9EVUxFX1BBUk1fREVTQyhpc29jX21vZGUsICIgU2V0IHRoZSBkZWZhdWx0IGZvcm1hdCBmb3IgSVNPQyBlbmRwb2ludC4gIERlZmF1bHQ6IDB4NjAgKENvbXByZXNzaW9uIE9uKSIpOwogTU9EVUxFX1BBUk1fREVTQyh2aWRlb19kZWJ1ZywgIiBTZXQgdGhlIGRlZmF1bHQgRGVidWcgTW9kZSBvZiB0aGUgZGV2aWNlIGRyaXZlci4gIERlZmF1bHQ6IDAgKE9mZikiKTsKLU1PRFVMRV9QQVJNX0RFU0MoUG93ZXJPbkF0T3BlbiwgIiBTZXQgdGhlIGRlZmF1bHQgZGV2aWNlIHRvIHBvd2VyIG9uIHdoZW4gZGV2aWNlIGlzIG9wZW5lZC4gIERlZmF1bHQ6IDEgKE9uKSIpOworTU9EVUxFX1BBUk1fREVTQyhwb3dlcl9vbl9hdF9vcGVuLCAiIFNldCB0aGUgZGVmYXVsdCBkZXZpY2UgdG8gcG93ZXIgb24gd2hlbiBkZXZpY2UgaXMgb3BlbmVkLiAgRGVmYXVsdDogMSAoT24pIik7CiBNT0RVTEVfUEFSTV9ERVNDKHZpZGVvX25yLCAiU2V0IHZpZGVvIGRldmljZSBudW1iZXIgKC9kZXYvdmlkZW9YKS4gIERlZmF1bHQ6IC0xIChhdXRvZGV0ZWN0KSIpOwogTU9EVUxFX1BBUk1fREVTQyhyYWRpb19uciwgIlNldCByYWRpbyBkZXZpY2UgbnVtYmVyICgvZGV2L3JhZGlvWCkuICBEZWZhdWx0OiAtMSAoYXV0b2RldGVjdCkiKTsKIAogCi0vLyBNaXNjIHN0dWZmCisvKiBNaXNjIHN0dWZmICovCiBNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOwogTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKIE1PRFVMRV9MSUNFTlNFKERSSVZFUl9MSUNFTlNFKTsKQEAgLTE5Miw3ICsxOTIsNyBAQAogCQljb250YWluZXJfb2YoY2QsIHN0cnVjdCB2aWRlb19kZXZpY2UsIGRldik7CiAJc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9IHZpZGVvX2dldF9kcnZkYXRhKHZkZXYpOwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLAotCQkgICAgICAgdXNidmlzaW9uX2RldmljZV9kYXRhW3VzYnZpc2lvbi0+RGV2TW9kZWxdLk1vZGVsU3RyaW5nKTsKKwkJICAgICAgIHVzYnZpc2lvbl9kZXZpY2VfZGF0YVt1c2J2aXNpb24tPmRldl9tb2RlbF0ubW9kZWxfc3RyaW5nKTsKIH0KIHN0YXRpYyBERVZJQ0VfQVRUUihtb2RlbCwgU19JUlVHTywgc2hvd19tb2RlbCwgTlVMTCk7CiAKQEAgLTIwNSw3ICsyMDUsNyBAQAogCXN0cnVjdCB2NGwyX2NvbnRyb2wgY3RybDsKIAljdHJsLmlkID0gVjRMMl9DSURfSFVFOwogCWN0cmwudmFsdWUgPSAwOwotCWlmKHVzYnZpc2lvbi0+dXNlcikKKwlpZiAodXNidmlzaW9uLT51c2VyKQogCQljYWxsX2FsbCh1c2J2aXNpb24sIGNvcmUsIGdfY3RybCwgJmN0cmwpOwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBjdHJsLnZhbHVlKTsKIH0KQEAgLTIyMCw3ICsyMjAsNyBAQAogCXN0cnVjdCB2NGwyX2NvbnRyb2wgY3RybDsKIAljdHJsLmlkID0gVjRMMl9DSURfQ09OVFJBU1Q7CiAJY3RybC52YWx1ZSA9IDA7Ci0JaWYodXNidmlzaW9uLT51c2VyKQorCWlmICh1c2J2aXNpb24tPnVzZXIpCiAJCWNhbGxfYWxsKHVzYnZpc2lvbiwgY29yZSwgZ19jdHJsLCAmY3RybCk7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGN0cmwudmFsdWUpOwogfQpAQCAtMjM1LDcgKzIzNSw3IEBACiAJc3RydWN0IHY0bDJfY29udHJvbCBjdHJsOwogCWN0cmwuaWQgPSBWNEwyX0NJRF9CUklHSFRORVNTOwogCWN0cmwudmFsdWUgPSAwOwotCWlmKHVzYnZpc2lvbi0+dXNlcikKKwlpZiAodXNidmlzaW9uLT51c2VyKQogCQljYWxsX2FsbCh1c2J2aXNpb24sIGNvcmUsIGdfY3RybCwgJmN0cmwpOwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBjdHJsLnZhbHVlKTsKIH0KQEAgLTI1MCw3ICsyNTAsNyBAQAogCXN0cnVjdCB2NGwyX2NvbnRyb2wgY3RybDsKIAljdHJsLmlkID0gVjRMMl9DSURfU0FUVVJBVElPTjsKIAljdHJsLnZhbHVlID0gMDsKLQlpZih1c2J2aXNpb24tPnVzZXIpCisJaWYgKHVzYnZpc2lvbi0+dXNlcikKIAkJY2FsbF9hbGwodXNidmlzaW9uLCBjb3JlLCBnX2N0cmwsICZjdHJsKTsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgY3RybC52YWx1ZSk7CiB9CkBAIC0yNjMsNyArMjYzLDcgQEAKIAkJY29udGFpbmVyX29mKGNkLCBzdHJ1Y3QgdmlkZW9fZGV2aWNlLCBkZXYpOwogCXN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2ZGV2KTsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwKLQkJICAgICAgIFlFU19OTyh1c2J2aXNpb24tPnN0cmVhbWluZz09U3RyZWFtX09uPzE6MCkpOworCQkgICAgICAgWUVTX05PKHVzYnZpc2lvbi0+c3RyZWFtaW5nID09IHN0cmVhbV9vbiA/IDEgOiAwKSk7CiB9CiBzdGF0aWMgREVWSUNFX0FUVFIoc3RyZWFtaW5nLCBTX0lSVUdPLCBzaG93X3N0cmVhbWluZywgTlVMTCk7CiAKQEAgLTI3NCw3ICsyNzQsNyBAQAogCQljb250YWluZXJfb2YoY2QsIHN0cnVjdCB2aWRlb19kZXZpY2UsIGRldik7CiAJc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9IHZpZGVvX2dldF9kcnZkYXRhKHZkZXYpOwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLAotCQkgICAgICAgWUVTX05PKHVzYnZpc2lvbi0+aXNvY01vZGU9PUlTT0NfTU9ERV9DT01QUkVTUykpOworCQkgICAgICAgWUVTX05PKHVzYnZpc2lvbi0+aXNvY19tb2RlID09IElTT0NfTU9ERV9DT01QUkVTUykpOwogfQogc3RhdGljIERFVklDRV9BVFRSKGNvbXByZXNzaW9uLCBTX0lSVUdPLCBzaG93X2NvbXByZXNzaW9uLCBOVUxMKTsKIApAQCAtMjg0LDQyICsyODQsNDMgQEAKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0KIAkJY29udGFpbmVyX29mKGNkLCBzdHJ1Y3QgdmlkZW9fZGV2aWNlLCBkZXYpOwogCXN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2ZGV2KTsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgdXNidmlzaW9uLT5icmlkZ2VUeXBlKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgdXNidmlzaW9uLT5icmlkZ2VfdHlwZSk7CiB9CiBzdGF0aWMgREVWSUNFX0FUVFIoYnJpZGdlLCBTX0lSVUdPLCBzaG93X2RldmljZV9icmlkZ2UsIE5VTEwpOwogCiBzdGF0aWMgdm9pZCB1c2J2aXNpb25fY3JlYXRlX3N5c2ZzKHN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYpCiB7CiAJaW50IHJlczsKKwogCWlmICghdmRldikKIAkJcmV0dXJuOwogCWRvIHsKIAkJcmVzID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZ2ZGV2LT5kZXYsICZkZXZfYXR0cl92ZXJzaW9uKTsKLQkJaWYgKHJlczwwKQorCQlpZiAocmVzIDwgMCkKIAkJCWJyZWFrOwogCQlyZXMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnZkZXYtPmRldiwgJmRldl9hdHRyX21vZGVsKTsKLQkJaWYgKHJlczwwKQorCQlpZiAocmVzIDwgMCkKIAkJCWJyZWFrOwogCQlyZXMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnZkZXYtPmRldiwgJmRldl9hdHRyX2h1ZSk7Ci0JCWlmIChyZXM8MCkKKwkJaWYgKHJlcyA8IDApCiAJCQlicmVhazsKIAkJcmVzID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZ2ZGV2LT5kZXYsICZkZXZfYXR0cl9jb250cmFzdCk7Ci0JCWlmIChyZXM8MCkKKwkJaWYgKHJlcyA8IDApCiAJCQlicmVhazsKIAkJcmVzID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZ2ZGV2LT5kZXYsICZkZXZfYXR0cl9icmlnaHRuZXNzKTsKLQkJaWYgKHJlczwwKQorCQlpZiAocmVzIDwgMCkKIAkJCWJyZWFrOwogCQlyZXMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnZkZXYtPmRldiwgJmRldl9hdHRyX3NhdHVyYXRpb24pOwotCQlpZiAocmVzPDApCisJCWlmIChyZXMgPCAwKQogCQkJYnJlYWs7CiAJCXJlcyA9IGRldmljZV9jcmVhdGVfZmlsZSgmdmRldi0+ZGV2LCAmZGV2X2F0dHJfc3RyZWFtaW5nKTsKLQkJaWYgKHJlczwwKQorCQlpZiAocmVzIDwgMCkKIAkJCWJyZWFrOwogCQlyZXMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnZkZXYtPmRldiwgJmRldl9hdHRyX2NvbXByZXNzaW9uKTsKLQkJaWYgKHJlczwwKQorCQlpZiAocmVzIDwgMCkKIAkJCWJyZWFrOwogCQlyZXMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnZkZXYtPmRldiwgJmRldl9hdHRyX2JyaWRnZSk7Ci0JCWlmIChyZXM+PTApCisJCWlmIChyZXMgPj0gMCkKIAkJCXJldHVybjsKIAl9IHdoaWxlICgwKTsKIApAQCAtMzUyLDI0ICszNTMsMjMgQEAKIHN0YXRpYyBpbnQgdXNidmlzaW9uX3Y0bDJfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKLQlpbnQgZXJyQ29kZSA9IDA7CisJaW50IGVycl9jb2RlID0gMDsKIAogCVBERUJVRyhEQkdfSU8sICJvcGVuIik7CiAKLQltdXRleF9sb2NrKCZ1c2J2aXNpb24tPmxvY2spOwotCXVzYnZpc2lvbl9yZXNldF9wb3dlck9mZlRpbWVyKHVzYnZpc2lvbik7CisJdXNidmlzaW9uX3Jlc2V0X3Bvd2VyX29mZl90aW1lcih1c2J2aXNpb24pOwogCiAJaWYgKHVzYnZpc2lvbi0+dXNlcikKLQkJZXJyQ29kZSA9IC1FQlVTWTsKKwkJZXJyX2NvZGUgPSAtRUJVU1k7CiAJZWxzZSB7CiAJCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIHNjcmF0Y2ggcmluZyBidWZmZXIgKi8KLQkJZXJyQ29kZSA9IHVzYnZpc2lvbl9zY3JhdGNoX2FsbG9jKHVzYnZpc2lvbik7Ci0JCWlmIChpc29jTW9kZT09SVNPQ19NT0RFX0NPTVBSRVNTKSB7CisJCWVycl9jb2RlID0gdXNidmlzaW9uX3NjcmF0Y2hfYWxsb2ModXNidmlzaW9uKTsKKwkJaWYgKGlzb2NfbW9kZSA9PSBJU09DX01PREVfQ09NUFJFU1MpIHsKIAkJCS8qIEFsbG9jYXRlIGludGVybWVkaWF0ZSBkZWNvbXByZXNzaW9uIGJ1ZmZlcnMKIAkJCSAgIG9ubHkgaWYgbmVlZGVkICovCi0JCQllcnJDb2RlID0gdXNidmlzaW9uX2RlY29tcHJlc3NfYWxsb2ModXNidmlzaW9uKTsKKwkJCWVycl9jb2RlID0gdXNidmlzaW9uX2RlY29tcHJlc3NfYWxsb2ModXNidmlzaW9uKTsKIAkJfQotCQlpZiAoZXJyQ29kZSkgeworCQlpZiAoZXJyX2NvZGUpIHsKIAkJCS8qIERlYWxsb2NhdGUgYWxsIGJ1ZmZlcnMgaWYgdHJvdWJsZSAqLwogCQkJdXNidmlzaW9uX3NjcmF0Y2hfZnJlZSh1c2J2aXNpb24pOwogCQkJdXNidmlzaW9uX2RlY29tcHJlc3NfZnJlZSh1c2J2aXNpb24pOwpAQCAtMzc3LDcgKzM3Nyw3IEBACiAJfQogCiAJLyogSWYgc28gZmFyIG5vIGVycm9ycyB0aGVuIHdlIHNoYWxsIHN0YXJ0IHRoZSBjYW1lcmEgKi8KLQlpZiAoIWVyckNvZGUpIHsKKwlpZiAoIWVycl9jb2RlKSB7CiAJCWlmICh1c2J2aXNpb24tPnBvd2VyID09IDApIHsKIAkJCXVzYnZpc2lvbl9wb3dlcl9vbih1c2J2aXNpb24pOwogCQkJdXNidmlzaW9uX2kyY19yZWdpc3Rlcih1c2J2aXNpb24pOwpAQCAtMzg2LDIxICszODYsMjEgQEAKIAkJLyogU2VuZCBpbml0IHNlcXVlbmNlIG9ubHkgb25jZSwgaXQncyBsYXJnZSEgKi8KIAkJaWYgKCF1c2J2aXNpb24tPmluaXRpYWxpemVkKSB7CiAJCQlpbnQgc2V0dXBfb2sgPSAwOwotCQkJc2V0dXBfb2sgPSB1c2J2aXNpb25fc2V0dXAodXNidmlzaW9uLGlzb2NNb2RlKTsKKwkJCXNldHVwX29rID0gdXNidmlzaW9uX3NldHVwKHVzYnZpc2lvbiwgaXNvY19tb2RlKTsKIAkJCWlmIChzZXR1cF9vaykKIAkJCQl1c2J2aXNpb24tPmluaXRpYWxpemVkID0gMTsKIAkJCWVsc2UKLQkJCQllcnJDb2RlID0gLUVCVVNZOworCQkJCWVycl9jb2RlID0gLUVCVVNZOwogCQl9CiAKLQkJaWYgKCFlcnJDb2RlKSB7CisJCWlmICghZXJyX2NvZGUpIHsKIAkJCXVzYnZpc2lvbl9iZWdpbl9zdHJlYW1pbmcodXNidmlzaW9uKTsKLQkJCWVyckNvZGUgPSB1c2J2aXNpb25faW5pdF9pc29jKHVzYnZpc2lvbik7CisJCQllcnJfY29kZSA9IHVzYnZpc2lvbl9pbml0X2lzb2ModXNidmlzaW9uKTsKIAkJCS8qIGRldmljZSBtdXN0IGJlIGluaXRpYWxpemVkIGJlZm9yZSBpc29jIHRyYW5zZmVyICovCi0JCQl1c2J2aXNpb25fbXV4c2VsKHVzYnZpc2lvbiwwKTsKKwkJCXVzYnZpc2lvbl9tdXhzZWwodXNidmlzaW9uLCAwKTsKIAkJCXVzYnZpc2lvbi0+dXNlcisrOwogCQl9IGVsc2UgewotCQkJaWYgKFBvd2VyT25BdE9wZW4pIHsKKwkJCWlmIChwb3dlcl9vbl9hdF9vcGVuKSB7CiAJCQkJdXNidmlzaW9uX2kyY191bnJlZ2lzdGVyKHVzYnZpc2lvbik7CiAJCQkJdXNidmlzaW9uX3Bvd2VyX29mZih1c2J2aXNpb24pOwogCQkJCXVzYnZpc2lvbi0+aW5pdGlhbGl6ZWQgPSAwOwpAQCAtNDEyLDggKzQxMiw3IEBACiAJdXNidmlzaW9uX2VtcHR5X2ZyYW1lcXVldWVzKHVzYnZpc2lvbik7CiAKIAlQREVCVUcoREJHX0lPLCAic3VjY2VzcyIpOwotCW11dGV4X3VubG9jaygmdXNidmlzaW9uLT5sb2NrKTsKLQlyZXR1cm4gZXJyQ29kZTsKKwlyZXR1cm4gZXJyX2NvZGU7CiB9CiAKIC8qCkBAIC00MjksNyArNDI4LDYgQEAKIAlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCVBERUJVRyhEQkdfSU8sICJjbG9zZSIpOwotCW11dGV4X2xvY2soJnVzYnZpc2lvbi0+bG9jayk7CiAKIAl1c2J2aXNpb25fYXVkaW9fb2ZmKHVzYnZpc2lvbik7CiAJdXNidmlzaW9uX3Jlc3RhcnRfaXNvYyh1c2J2aXNpb24pOwpAQCAtNDQyLDE1ICs0NDAsMTMgQEAKIAogCXVzYnZpc2lvbi0+dXNlci0tOwogCi0JaWYgKFBvd2VyT25BdE9wZW4pIHsKKwlpZiAocG93ZXJfb25fYXRfb3BlbikgewogCQkvKiBwb3dlciBvZmYgaW4gYSBsaXR0bGUgd2hpbGUKIAkJICAgdG8gYXZvaWQgb2ZmL29uIGV2ZXJ5IGNsb3NlL29wZW4gc2hvcnQgc2VxdWVuY2VzICovCi0JCXVzYnZpc2lvbl9zZXRfcG93ZXJPZmZUaW1lcih1c2J2aXNpb24pOworCQl1c2J2aXNpb25fc2V0X3Bvd2VyX29mZl90aW1lcih1c2J2aXNpb24pOwogCQl1c2J2aXNpb24tPmluaXRpYWxpemVkID0gMDsKIAl9CiAKLQltdXRleF91bmxvY2soJnVzYnZpc2lvbi0+bG9jayk7Ci0KIAlpZiAodXNidmlzaW9uLT5yZW1vdmVfcGVuZGluZykgewogCQlwcmludGsoS0VSTl9JTkZPICIlczogRmluYWwgZGlzY29ubmVjdFxuIiwgX19mdW5jX18pOwogCQl1c2J2aXNpb25fcmVsZWFzZSh1c2J2aXNpb24pOwpAQCAtNDY4LDU1ICs0NjQsNTUgQEAKICAqCiAgKi8KICNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCi1zdGF0aWMgaW50IHZpZGlvY19nX3JlZ2lzdGVyIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKK3N0YXRpYyBpbnQgdmlkaW9jX2dfcmVnaXN0ZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyICpyZWcpCiB7CiAJc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7Ci0JaW50IGVyckNvZGU7CisJaW50IGVycl9jb2RlOwogCiAJaWYgKCF2NGwyX2NoaXBfbWF0Y2hfaG9zdCgmcmVnLT5tYXRjaCkpCiAJCXJldHVybiAtRUlOVkFMOwogCS8qIE5UMTAweCBoYXMgYSA4LWJpdCByZWdpc3RlciBzcGFjZSAqLwotCWVyckNvZGUgPSB1c2J2aXNpb25fcmVhZF9yZWcodXNidmlzaW9uLCByZWctPnJlZyYweGZmKTsKLQlpZiAoZXJyQ29kZSA8IDApIHsKKwllcnJfY29kZSA9IHVzYnZpc2lvbl9yZWFkX3JlZyh1c2J2aXNpb24sIHJlZy0+cmVnJjB4ZmYpOworCWlmIChlcnJfY29kZSA8IDApIHsKIAkJZGV2X2VycigmdXNidmlzaW9uLT52ZGV2LT5kZXYsCiAJCQkiJXM6IFZJRElPQ19EQkdfR19SRUdJU1RFUiBmYWlsZWQ6IGVycm9yICVkXG4iLAotCQkJCV9fZnVuY19fLCBlcnJDb2RlKTsKLQkJcmV0dXJuIGVyckNvZGU7CisJCQkJX19mdW5jX18sIGVycl9jb2RlKTsKKwkJcmV0dXJuIGVycl9jb2RlOwogCX0KLQlyZWctPnZhbCA9IGVyckNvZGU7CisJcmVnLT52YWwgPSBlcnJfY29kZTsKIAlyZWctPnNpemUgPSAxOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZpZGlvY19zX3JlZ2lzdGVyIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKK3N0YXRpYyBpbnQgdmlkaW9jX3NfcmVnaXN0ZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyICpyZWcpCiB7CiAJc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7Ci0JaW50IGVyckNvZGU7CisJaW50IGVycl9jb2RlOwogCiAJaWYgKCF2NGwyX2NoaXBfbWF0Y2hfaG9zdCgmcmVnLT5tYXRjaCkpCiAJCXJldHVybiAtRUlOVkFMOwogCS8qIE5UMTAweCBoYXMgYSA4LWJpdCByZWdpc3RlciBzcGFjZSAqLwotCWVyckNvZGUgPSB1c2J2aXNpb25fd3JpdGVfcmVnKHVzYnZpc2lvbiwgcmVnLT5yZWcmMHhmZiwgcmVnLT52YWwpOwotCWlmIChlcnJDb2RlIDwgMCkgeworCWVycl9jb2RlID0gdXNidmlzaW9uX3dyaXRlX3JlZyh1c2J2aXNpb24sIHJlZy0+cmVnICYgMHhmZiwgcmVnLT52YWwpOworCWlmIChlcnJfY29kZSA8IDApIHsKIAkJZGV2X2VycigmdXNidmlzaW9uLT52ZGV2LT5kZXYsCiAJCQkiJXM6IFZJRElPQ19EQkdfU19SRUdJU1RFUiBmYWlsZWQ6IGVycm9yICVkXG4iLAotCQkJCV9fZnVuY19fLCBlcnJDb2RlKTsKLQkJcmV0dXJuIGVyckNvZGU7CisJCQkJX19mdW5jX18sIGVycl9jb2RlKTsKKwkJcmV0dXJuIGVycl9jb2RlOwogCX0KIAlyZXR1cm4gMDsKIH0KICNlbmRpZgogCi1zdGF0aWMgaW50IHZpZGlvY19xdWVyeWNhcCAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgICpwcml2LAorc3RhdGljIGludCB2aWRpb2NfcXVlcnljYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICp2YykKIHsKIAlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCXN0cmxjcHkodmMtPmRyaXZlciwgIlVTQlZpc2lvbiIsIHNpemVvZih2Yy0+ZHJpdmVyKSk7CiAJc3RybGNweSh2Yy0+Y2FyZCwKLQkJdXNidmlzaW9uX2RldmljZV9kYXRhW3VzYnZpc2lvbi0+RGV2TW9kZWxdLk1vZGVsU3RyaW5nLAorCQl1c2J2aXNpb25fZGV2aWNlX2RhdGFbdXNidmlzaW9uLT5kZXZfbW9kZWxdLm1vZGVsX3N0cmluZywKIAkJc2l6ZW9mKHZjLT5jYXJkKSk7CiAJdXNiX21ha2VfcGF0aCh1c2J2aXNpb24tPmRldiwgdmMtPmJ1c19pbmZvLCBzaXplb2YodmMtPmJ1c19pbmZvKSk7CiAJdmMtPnZlcnNpb24gPSBVU0JWSVNJT05fRFJJVkVSX1ZFUlNJT047CkBAIC01MjgsNyArNTI0LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2aWRpb2NfZW51bV9pbnB1dCAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCitzdGF0aWMgaW50IHZpZGlvY19lbnVtX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX2lucHV0ICp2aSkKIHsKIAlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKQEAgLTUzNiwxNiArNTMyLDE2IEBACiAKIAlpZiAodmktPmluZGV4ID49IHVzYnZpc2lvbi0+dmlkZW9faW5wdXRzKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAodXNidmlzaW9uLT5oYXZlX3R1bmVyKSB7CisJaWYgKHVzYnZpc2lvbi0+aGF2ZV90dW5lcikKIAkJY2hhbiA9IHZpLT5pbmRleDsKLQl9IGVsc2UgewotCQljaGFuID0gdmktPmluZGV4ICsgMTsgLypza2lwIFRlbGV2aXNpb24gc3RyaW5nKi8KLQl9CisJZWxzZQorCQljaGFuID0gdmktPmluZGV4ICsgMTsgLyogc2tpcCBUZWxldmlzaW9uIHN0cmluZyovCisKIAkvKiBEZXRlcm1pbmUgdGhlIHJlcXVlc3RlZCBpbnB1dCBjaGFyYWN0ZXJpc3RpY3MKIAkgICBzcGVjaWZpYyBmb3IgZWFjaCB1c2J2aXNpb24gY2FyZCBtb2RlbCAqLwotCXN3aXRjaChjaGFuKSB7CisJc3dpdGNoIChjaGFuKSB7CiAJY2FzZSAwOgotCQlpZiAodXNidmlzaW9uX2RldmljZV9kYXRhW3VzYnZpc2lvbi0+RGV2TW9kZWxdLlZpZGVvQ2hhbm5lbHMgPT0gNCkgeworCQlpZiAodXNidmlzaW9uX2RldmljZV9kYXRhW3VzYnZpc2lvbi0+ZGV2X21vZGVsXS52aWRlb19jaGFubmVscyA9PSA0KSB7CiAJCQlzdHJjcHkodmktPm5hbWUsICJXaGl0ZSBWaWRlbyBJbnB1dCIpOwogCQl9IGVsc2UgewogCQkJc3RyY3B5KHZpLT5uYW1lLCAiVGVsZXZpc2lvbiIpOwpAQCAtNTU3LDIwICs1NTMsMTggQEAKIAkJYnJlYWs7CiAJY2FzZSAxOgogCQl2aS0+dHlwZSA9IFY0TDJfSU5QVVRfVFlQRV9DQU1FUkE7Ci0JCWlmICh1c2J2aXNpb25fZGV2aWNlX2RhdGFbdXNidmlzaW9uLT5EZXZNb2RlbF0uVmlkZW9DaGFubmVscyA9PSA0KSB7CisJCWlmICh1c2J2aXNpb25fZGV2aWNlX2RhdGFbdXNidmlzaW9uLT5kZXZfbW9kZWxdLnZpZGVvX2NoYW5uZWxzID09IDQpCiAJCQlzdHJjcHkodmktPm5hbWUsICJHcmVlbiBWaWRlbyBJbnB1dCIpOwotCQl9IGVsc2UgeworCQllbHNlCiAJCQlzdHJjcHkodmktPm5hbWUsICJDb21wb3NpdGUgVmlkZW8gSW5wdXQiKTsKLQkJfQogCQl2aS0+c3RkID0gVjRMMl9TVERfUEFMOwogCQlicmVhazsKIAljYXNlIDI6CiAJCXZpLT50eXBlID0gVjRMMl9JTlBVVF9UWVBFX0NBTUVSQTsKLQkJaWYgKHVzYnZpc2lvbl9kZXZpY2VfZGF0YVt1c2J2aXNpb24tPkRldk1vZGVsXS5WaWRlb0NoYW5uZWxzID09IDQpIHsKKwkJaWYgKHVzYnZpc2lvbl9kZXZpY2VfZGF0YVt1c2J2aXNpb24tPmRldl9tb2RlbF0udmlkZW9fY2hhbm5lbHMgPT0gNCkKIAkJCXN0cmNweSh2aS0+bmFtZSwgIlllbGxvdyBWaWRlbyBJbnB1dCIpOwotCQl9IGVsc2UgeworCQllbHNlCiAJCQlzdHJjcHkodmktPm5hbWUsICJTLVZpZGVvIElucHV0Iik7Ci0JCX0KIAkJdmktPnN0ZCA9IFY0TDJfU1REX1BBTDsKIAkJYnJlYWs7CiAJY2FzZSAzOgpAQCAtNTgyLDcgKzU3Niw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdmlkaW9jX2dfaW5wdXQgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgKmlucHV0KQorc3RhdGljIGludCB2aWRpb2NfZ19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50ICppbnB1dCkKIHsKIAlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIApAQCAtNTkwLDQ2ICs1ODQsNDIgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2aWRpb2Nfc19pbnB1dCAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCBpbnB1dCkKK3N0YXRpYyBpbnQgdmlkaW9jX3NfaW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCBpbnB1dCkKIHsKIAlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCWlmIChpbnB1dCA+PSB1c2J2aXNpb24tPnZpZGVvX2lucHV0cykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQltdXRleF9sb2NrKCZ1c2J2aXNpb24tPmxvY2spOwogCXVzYnZpc2lvbl9tdXhzZWwodXNidmlzaW9uLCBpbnB1dCk7CiAJdXNidmlzaW9uX3NldF9pbnB1dCh1c2J2aXNpb24pOwogCXVzYnZpc2lvbl9zZXRfb3V0cHV0KHVzYnZpc2lvbiwKIAkJCSAgICAgdXNidmlzaW9uLT5jdXJ3aWR0aCwKIAkJCSAgICAgdXNidmlzaW9uLT5jdXJoZWlnaHQpOwotCW11dGV4X3VubG9jaygmdXNidmlzaW9uLT5sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2aWRpb2Nfc19zdGQgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCB2NGwyX3N0ZF9pZCAqaWQpCitzdGF0aWMgaW50IHZpZGlvY19zX3N0ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdjRsMl9zdGRfaWQgKmlkKQogewogCXN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCi0JdXNidmlzaW9uLT50dm5vcm1JZD0qaWQ7CisJdXNidmlzaW9uLT50dm5vcm1faWQgPSAqaWQ7CiAKLQltdXRleF9sb2NrKCZ1c2J2aXNpb24tPmxvY2spOwotCWNhbGxfYWxsKHVzYnZpc2lvbiwgY29yZSwgc19zdGQsIHVzYnZpc2lvbi0+dHZub3JtSWQpOwotCW11dGV4X3VubG9jaygmdXNidmlzaW9uLT5sb2NrKTsKKwljYWxsX2FsbCh1c2J2aXNpb24sIGNvcmUsIHNfc3RkLCB1c2J2aXNpb24tPnR2bm9ybV9pZCk7CiAJLyogcHJvcGFnYXRlIHRoZSBjaGFuZ2UgdG8gdGhlIGRlY29kZXIgKi8KIAl1c2J2aXNpb25fbXV4c2VsKHVzYnZpc2lvbiwgdXNidmlzaW9uLT5jdGxfaW5wdXQpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdmlkaW9jX2dfdHVuZXIgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorc3RhdGljIGludCB2aWRpb2NfZ190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl90dW5lciAqdnQpCiB7CiAJc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKLQlpZiAoIXVzYnZpc2lvbi0+aGF2ZV90dW5lciB8fCB2dC0+aW5kZXgpCS8vIE9ubHkgdHVuZXIgMAorCWlmICghdXNidmlzaW9uLT5oYXZlX3R1bmVyIHx8IHZ0LT5pbmRleCkJLyogT25seSB0dW5lciAwICovCiAJCXJldHVybiAtRUlOVkFMOwotCWlmKHVzYnZpc2lvbi0+cmFkaW8pIHsKKwlpZiAodXNidmlzaW9uLT5yYWRpbykgewogCQlzdHJjcHkodnQtPm5hbWUsICJSYWRpbyIpOwogCQl2dC0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CiAJfSBlbHNlIHsKQEAgLTY0MSwxMiArNjMxLDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdmlkaW9jX3NfdHVuZXIgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorc3RhdGljIGludCB2aWRpb2Nfc190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl90dW5lciAqdnQpCiB7CiAJc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKLQkvLyBPbmx5IG5vIG9yIG9uZSB0dW5lciBmb3Igbm93CisJLyogT25seSBubyBvciBvbmUgdHVuZXIgZm9yIG5vdyAqLwogCWlmICghdXNidmlzaW9uLT5oYXZlX3R1bmVyIHx8IHZ0LT5pbmRleCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJLyogbGV0IGNsaWVudHMgaGFuZGxlIHRoaXMgKi8KQEAgLTY1NSwyOCArNjQ1LDI3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdmlkaW9jX2dfZnJlcXVlbmN5IChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKK3N0YXRpYyBpbnQgdmlkaW9jX2dfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZnJlcSkKIHsKIAlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAotCWZyZXEtPnR1bmVyID0gMDsgLy8gT25seSBvbmUgdHVuZXIKLQlpZih1c2J2aXNpb24tPnJhZGlvKSB7CisJZnJlcS0+dHVuZXIgPSAwOyAvKiBPbmx5IG9uZSB0dW5lciAqLworCWlmICh1c2J2aXNpb24tPnJhZGlvKQogCQlmcmVxLT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKLQl9IGVsc2UgeworCWVsc2UKIAkJZnJlcS0+dHlwZSA9IFY0TDJfVFVORVJfQU5BTE9HX1RWOwotCX0KIAlmcmVxLT5mcmVxdWVuY3kgPSB1c2J2aXNpb24tPmZyZXE7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2aWRpb2Nfc19mcmVxdWVuY3kgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorc3RhdGljIGludCB2aWRpb2Nfc19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmcmVxKQogewogCXN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCi0JLy8gT25seSBubyBvciBvbmUgdHVuZXIgZm9yIG5vdworCS8qIE9ubHkgbm8gb3Igb25lIHR1bmVyIGZvciBub3cgKi8KIAlpZiAoIXVzYnZpc2lvbi0+aGF2ZV90dW5lciB8fCBmcmVxLT50dW5lcikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTY4NiwzMCArNjc1LDI3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdmlkaW9jX2dfYXVkaW8gKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKK3N0YXRpYyBpbnQgdmlkaW9jX2dfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2F1ZGlvICphKQogewogCXN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCi0JaWYodXNidmlzaW9uLT5yYWRpbykgewotCQlzdHJjcHkoYS0+bmFtZSwiUmFkaW8iKTsKLQl9IGVsc2UgeworCWlmICh1c2J2aXNpb24tPnJhZGlvKQorCQlzdHJjcHkoYS0+bmFtZSwgIlJhZGlvIik7CisJZWxzZQogCQlzdHJjcHkoYS0+bmFtZSwgIlRWIik7Ci0JfQogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdmlkaW9jX3NfYXVkaW8gKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKK3N0YXRpYyBpbnQgdmlkaW9jX3NfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAogCQkJICBzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKIHsKLQlpZihhLT5pbmRleCkgeworCWlmIChhLT5pbmRleCkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y3RybCAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCitzdGF0aWMgaW50IHZpZGlvY19xdWVyeWN0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkgICAgc3RydWN0IHY0bDJfcXVlcnljdHJsICpjdHJsKQogewogCXN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwpAQCAtNzIyLDUyICs3MDgsNTMgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2aWRpb2NfZ19jdHJsIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKK3N0YXRpYyBpbnQgdmlkaW9jX2dfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewogCXN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24gPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCiAJY2FsbF9hbGwodXNidmlzaW9uLCBjb3JlLCBnX2N0cmwsIGN0cmwpOwotCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdmlkaW9jX3NfY3RybCAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCitzdGF0aWMgaW50IHZpZGlvY19zX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKIAlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKLQljYWxsX2FsbCh1c2J2aXNpb24sIGNvcmUsIHNfY3RybCwgY3RybCk7CiAKKwljYWxsX2FsbCh1c2J2aXNpb24sIGNvcmUsIHNfY3RybCwgY3RybCk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdmlkaW9jX3JlcWJ1ZnMgKHN0cnVjdCBmaWxlICpmaWxlLAorc3RhdGljIGludCB2aWRpb2NfcmVxYnVmcyhzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCSAgIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX3JlcXVlc3RidWZmZXJzICp2cikKIHsKIAlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAlpbnQgcmV0OwogCi0JUkVTVFJJQ1RfVE9fUkFOR0UodnItPmNvdW50LDEsVVNCVklTSU9OX05VTUZSQU1FUyk7CisJUkVTVFJJQ1RfVE9fUkFOR0UodnItPmNvdW50LCAxLCBVU0JWSVNJT05fTlVNRlJBTUVTKTsKIAogCS8qIENoZWNrIGlucHV0IHZhbGlkaXR5OgogCSAgIHRoZSB1c2VyIG11c3QgZG8gYSBWSURFTyBDQVBUVVJFIGFuZCBNTUFQIG1ldGhvZC4gKi8KIAlpZiAodnItPm1lbW9yeSAhPSBWNEwyX01FTU9SWV9NTUFQKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmKHVzYnZpc2lvbi0+c3RyZWFtaW5nID09IFN0cmVhbV9PbikgewotCQlpZiAoKHJldCA9IHVzYnZpc2lvbl9zdHJlYW1faW50ZXJydXB0KHVzYnZpc2lvbikpKQorCWlmICh1c2J2aXNpb24tPnN0cmVhbWluZyA9PSBzdHJlYW1fb24pIHsKKwkJcmV0ID0gdXNidmlzaW9uX3N0cmVhbV9pbnRlcnJ1cHQodXNidmlzaW9uKTsKKwkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAJfQogCiAJdXNidmlzaW9uX2ZyYW1lc19mcmVlKHVzYnZpc2lvbik7CiAJdXNidmlzaW9uX2VtcHR5X2ZyYW1lcXVldWVzKHVzYnZpc2lvbik7Ci0JdnItPmNvdW50ID0gdXNidmlzaW9uX2ZyYW1lc19hbGxvYyh1c2J2aXNpb24sdnItPmNvdW50KTsKKwl2ci0+Y291bnQgPSB1c2J2aXNpb25fZnJhbWVzX2FsbG9jKHVzYnZpc2lvbiwgdnItPmNvdW50KTsKIAotCXVzYnZpc2lvbi0+Y3VyRnJhbWUgPSBOVUxMOworCXVzYnZpc2lvbi0+Y3VyX2ZyYW1lID0gTlVMTDsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZpZGlvY19xdWVyeWJ1ZiAoc3RydWN0IGZpbGUgKmZpbGUsCitzdGF0aWMgaW50IHZpZGlvY19xdWVyeWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCSAgICB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9idWZmZXIgKnZiKQogewogCXN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwpAQCAtNzc1LDUyICs3NjIsNDkgQEAKIAogCS8qIEZJWE1FIDogbXVzdCBjb250cm9sCiAJICAgdGhhdCBidWZmZXJzIGFyZSBtYXBwZWQgKFZJRElPQ19SRVFCVUZTIGhhcyBiZWVuIGNhbGxlZCkgKi8KLQlpZih2Yi0+aW5kZXg+PXVzYnZpc2lvbi0+bnVtX2ZyYW1lcykgIHsKKwlpZiAodmItPmluZGV4ID49IHVzYnZpc2lvbi0+bnVtX2ZyYW1lcykKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JfQogCS8qIFVwZGF0aW5nIHRoZSBjb3JyZXNwb25kaW5nIGZyYW1lIHN0YXRlICovCiAJdmItPmZsYWdzID0gMDsKIAlmcmFtZSA9ICZ1c2J2aXNpb24tPmZyYW1lW3ZiLT5pbmRleF07Ci0JaWYoZnJhbWUtPmdyYWJzdGF0ZSA+PSBGcmFtZVN0YXRlX1JlYWR5KQorCWlmIChmcmFtZS0+Z3JhYnN0YXRlID49IGZyYW1lX3N0YXRlX3JlYWR5KQogCQl2Yi0+ZmxhZ3MgfD0gVjRMMl9CVUZfRkxBR19RVUVVRUQ7Ci0JaWYoZnJhbWUtPmdyYWJzdGF0ZSA+PSBGcmFtZVN0YXRlX0RvbmUpCisJaWYgKGZyYW1lLT5ncmFic3RhdGUgPj0gZnJhbWVfc3RhdGVfZG9uZSkKIAkJdmItPmZsYWdzIHw9IFY0TDJfQlVGX0ZMQUdfRE9ORTsKLQlpZihmcmFtZS0+Z3JhYnN0YXRlID09IEZyYW1lU3RhdGVfVW51c2VkKQorCWlmIChmcmFtZS0+Z3JhYnN0YXRlID09IGZyYW1lX3N0YXRlX3VudXNlZCkKIAkJdmItPmZsYWdzIHw9IFY0TDJfQlVGX0ZMQUdfTUFQUEVEOwogCXZiLT5tZW1vcnkgPSBWNEwyX01FTU9SWV9NTUFQOwogCi0JdmItPm0ub2Zmc2V0ID0gdmItPmluZGV4KlBBR0VfQUxJR04odXNidmlzaW9uLT5tYXhfZnJhbWVfc2l6ZSk7CisJdmItPm0ub2Zmc2V0ID0gdmItPmluZGV4ICogUEFHRV9BTElHTih1c2J2aXNpb24tPm1heF9mcmFtZV9zaXplKTsKIAogCXZiLT5tZW1vcnkgPSBWNEwyX01FTU9SWV9NTUFQOwogCXZiLT5maWVsZCA9IFY0TDJfRklFTERfTk9ORTsKLQl2Yi0+bGVuZ3RoID0gdXNidmlzaW9uLT5jdXJ3aWR0aCoKLQkJdXNidmlzaW9uLT5jdXJoZWlnaHQqCisJdmItPmxlbmd0aCA9IHVzYnZpc2lvbi0+Y3Vyd2lkdGggKgorCQl1c2J2aXNpb24tPmN1cmhlaWdodCAqCiAJCXVzYnZpc2lvbi0+cGFsZXR0ZS5ieXRlc19wZXJfcGl4ZWw7CiAJdmItPnRpbWVzdGFtcCA9IHVzYnZpc2lvbi0+ZnJhbWVbdmItPmluZGV4XS50aW1lc3RhbXA7CiAJdmItPnNlcXVlbmNlID0gdXNidmlzaW9uLT5mcmFtZVt2Yi0+aW5kZXhdLnNlcXVlbmNlOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZpZGlvY19xYnVmIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfYnVmZmVyICp2YikKK3N0YXRpYyBpbnQgdmlkaW9jX3FidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2J1ZmZlciAqdmIpCiB7CiAJc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAJc3RydWN0IHVzYnZpc2lvbl9mcmFtZSAqZnJhbWU7CiAJdW5zaWduZWQgbG9uZyBsb2NrX2ZsYWdzOwogCiAJLyogRklYTUUgOiB3b3JrcyBvbmx5IG9uIFZJREVPX0NBUFRVUkUgTU9ERSwgTU1BUC4gKi8KLQlpZih2Yi0+aW5kZXg+PXVzYnZpc2lvbi0+bnVtX2ZyYW1lcykgIHsKKwlpZiAodmItPmluZGV4ID49IHVzYnZpc2lvbi0+bnVtX2ZyYW1lcykKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JfQogCiAJZnJhbWUgPSAmdXNidmlzaW9uLT5mcmFtZVt2Yi0+aW5kZXhdOwogCi0JaWYgKGZyYW1lLT5ncmFic3RhdGUgIT0gRnJhbWVTdGF0ZV9VbnVzZWQpIHsKKwlpZiAoZnJhbWUtPmdyYWJzdGF0ZSAhPSBmcmFtZV9zdGF0ZV91bnVzZWQpCiAJCXJldHVybiAtRUFHQUlOOwotCX0KIAogCS8qIE1hcmsgaXQgYXMgcmVhZHkgYW5kIGVucXVldWUgZnJhbWUgKi8KLQlmcmFtZS0+Z3JhYnN0YXRlID0gRnJhbWVTdGF0ZV9SZWFkeTsKLQlmcmFtZS0+c2NhbnN0YXRlID0gU2NhblN0YXRlX1NjYW5uaW5nOworCWZyYW1lLT5ncmFic3RhdGUgPSBmcmFtZV9zdGF0ZV9yZWFkeTsKKwlmcmFtZS0+c2NhbnN0YXRlID0gc2Nhbl9zdGF0ZV9zY2FubmluZzsKIAlmcmFtZS0+c2Nhbmxlbmd0aCA9IDA7CS8qIEFjY3VtdWxhdGVkIGluIHVzYnZpc2lvbl9wYXJzZV9kYXRhKCkgKi8KIAogCXZiLT5mbGFncyAmPSB+VjRMMl9CVUZfRkxBR19ET05FOwpAQCAtODM1LDcgKzgxOSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdmlkaW9jX2RxYnVmIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfYnVmZmVyICp2YikKK3N0YXRpYyBpbnQgdmlkaW9jX2RxYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9idWZmZXIgKnZiKQogewogCXN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCWludCByZXQ7CkBAIC04NDMsNyArODI3LDcgQEAKIAl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7CiAKIAlpZiAobGlzdF9lbXB0eSgmKHVzYnZpc2lvbi0+b3V0cXVldWUpKSkgewotCQlpZiAodXNidmlzaW9uLT5zdHJlYW1pbmcgPT0gU3RyZWFtX0lkbGUpCisJCWlmICh1c2J2aXNpb24tPnN0cmVhbWluZyA9PSBzdHJlYW1faWRsZSkKIAkJCXJldHVybiAtRUlOVkFMOwogCQlyZXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUKIAkJCSh1c2J2aXNpb24tPndhaXRfZnJhbWUsCkBAIC04NTgsNyArODQyLDcgQEAKIAlsaXN0X2RlbCh1c2J2aXNpb24tPm91dHF1ZXVlLm5leHQpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVzYnZpc2lvbi0+cXVldWVfbG9jaywgbG9ja19mbGFncyk7CiAKLQlmLT5ncmFic3RhdGUgPSBGcmFtZVN0YXRlX1VudXNlZDsKKwlmLT5ncmFic3RhdGUgPSBmcmFtZV9zdGF0ZV91bnVzZWQ7CiAKIAl2Yi0+bWVtb3J5ID0gVjRMMl9NRU1PUllfTU1BUDsKIAl2Yi0+ZmxhZ3MgPSBWNEwyX0JVRl9GTEFHX01BUFBFRCB8CkBAIC04NzcsNyArODYxLDcgQEAKIHsKIAlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAotCXVzYnZpc2lvbi0+c3RyZWFtaW5nID0gU3RyZWFtX09uOworCXVzYnZpc2lvbi0+c3RyZWFtaW5nID0gc3RyZWFtX29uOwogCWNhbGxfYWxsKHVzYnZpc2lvbiwgdmlkZW8sIHNfc3RyZWFtLCAxKTsKIAogCXJldHVybiAwOwpAQCAtODkxLDcgKzg3NSw3IEBACiAJaWYgKHR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmKHVzYnZpc2lvbi0+c3RyZWFtaW5nID09IFN0cmVhbV9PbikgeworCWlmICh1c2J2aXNpb24tPnN0cmVhbWluZyA9PSBzdHJlYW1fb24pIHsKIAkJdXNidmlzaW9uX3N0cmVhbV9pbnRlcnJ1cHQodXNidmlzaW9uKTsKIAkJLyogU3RvcCBhbGwgdmlkZW8gc3RyZWFtaW5ncyAqLwogCQljYWxsX2FsbCh1c2J2aXNpb24sIHZpZGVvLCBzX3N0cmVhbSwgMCk7CkBAIC05MDEsMTggKzg4NSwxNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZpZGlvY19lbnVtX2ZtdF92aWRfY2FwIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAgKnByaXYsCitzdGF0aWMgaW50IHZpZGlvY19lbnVtX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfZm10ZGVzYyAqdmZkKQogewotCWlmKHZmZC0+aW5kZXg+PVVTQlZJU0lPTl9TVVBQT1JURURfUEFMRVRURVMtMSkgeworCWlmICh2ZmQtPmluZGV4ID49IFVTQlZJU0lPTl9TVVBQT1JURURfUEFMRVRURVMgLSAxKQogCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0Jc3RyY3B5KHZmZC0+ZGVzY3JpcHRpb24sdXNidmlzaW9uX3Y0bDJfZm9ybWF0W3ZmZC0+aW5kZXhdLmRlc2MpOworCXN0cmNweSh2ZmQtPmRlc2NyaXB0aW9uLCB1c2J2aXNpb25fdjRsMl9mb3JtYXRbdmZkLT5pbmRleF0uZGVzYyk7CiAJdmZkLT5waXhlbGZvcm1hdCA9IHVzYnZpc2lvbl92NGwyX2Zvcm1hdFt2ZmQtPmluZGV4XS5mb3JtYXQ7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdmlkaW9jX2dfZm10X3ZpZF9jYXAgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorc3RhdGljIGludCB2aWRpb2NfZ19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICp2ZikKIHsKIAlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKQEAgLTkyMCwzMiArOTAzLDMxIEBACiAJdmYtPmZtdC5waXguaGVpZ2h0ID0gdXNidmlzaW9uLT5jdXJoZWlnaHQ7CiAJdmYtPmZtdC5waXgucGl4ZWxmb3JtYXQgPSB1c2J2aXNpb24tPnBhbGV0dGUuZm9ybWF0OwogCXZmLT5mbXQucGl4LmJ5dGVzcGVybGluZSA9Ci0JCXVzYnZpc2lvbi0+Y3Vyd2lkdGgqdXNidmlzaW9uLT5wYWxldHRlLmJ5dGVzX3Blcl9waXhlbDsKLQl2Zi0+Zm10LnBpeC5zaXplaW1hZ2UgPSB2Zi0+Zm10LnBpeC5ieXRlc3BlcmxpbmUqdXNidmlzaW9uLT5jdXJoZWlnaHQ7CisJCXVzYnZpc2lvbi0+Y3Vyd2lkdGggKiB1c2J2aXNpb24tPnBhbGV0dGUuYnl0ZXNfcGVyX3BpeGVsOworCXZmLT5mbXQucGl4LnNpemVpbWFnZSA9IHZmLT5mbXQucGl4LmJ5dGVzcGVybGluZSAqIHVzYnZpc2lvbi0+Y3VyaGVpZ2h0OwogCXZmLT5mbXQucGl4LmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU01QVEUxNzBNOwogCXZmLT5mbXQucGl4LmZpZWxkID0gVjRMMl9GSUVMRF9OT05FOyAvKiBBbHdheXMgcHJvZ3Jlc3NpdmUgaW1hZ2UgKi8KIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZpZGlvY190cnlfZm10X3ZpZF9jYXAgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorc3RhdGljIGludCB2aWRpb2NfdHJ5X2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJICAgICAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqdmYpCiB7CiAJc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7Ci0JaW50IGZvcm1hdElkeDsKKwlpbnQgZm9ybWF0X2lkeDsKIAogCS8qIEZpbmQgcmVxdWVzdGVkIGZvcm1hdCBpbiBhdmFpbGFibGUgb25lcyAqLwotCWZvcihmb3JtYXRJZHg9MDtmb3JtYXRJZHg8VVNCVklTSU9OX1NVUFBPUlRFRF9QQUxFVFRFUztmb3JtYXRJZHgrKykgewotCQlpZih2Zi0+Zm10LnBpeC5waXhlbGZvcm1hdCA9PQotCQkgICB1c2J2aXNpb25fdjRsMl9mb3JtYXRbZm9ybWF0SWR4XS5mb3JtYXQpIHsKLQkJCXVzYnZpc2lvbi0+cGFsZXR0ZSA9IHVzYnZpc2lvbl92NGwyX2Zvcm1hdFtmb3JtYXRJZHhdOworCWZvciAoZm9ybWF0X2lkeCA9IDA7IGZvcm1hdF9pZHggPCBVU0JWSVNJT05fU1VQUE9SVEVEX1BBTEVUVEVTOyBmb3JtYXRfaWR4KyspIHsKKwkJaWYgKHZmLT5mbXQucGl4LnBpeGVsZm9ybWF0ID09CisJCSAgIHVzYnZpc2lvbl92NGwyX2Zvcm1hdFtmb3JtYXRfaWR4XS5mb3JtYXQpIHsKKwkJCXVzYnZpc2lvbi0+cGFsZXR0ZSA9IHVzYnZpc2lvbl92NGwyX2Zvcm1hdFtmb3JtYXRfaWR4XTsKIAkJCWJyZWFrOwogCQl9CiAJfQogCS8qIHJvYnVzdG5lc3MgKi8KLQlpZihmb3JtYXRJZHggPT0gVVNCVklTSU9OX1NVUFBPUlRFRF9QQUxFVFRFUykgeworCWlmIChmb3JtYXRfaWR4ID09IFVTQlZJU0lPTl9TVVBQT1JURURfUEFMRVRURVMpCiAJCXJldHVybiAtRUlOVkFMOwotCX0KIAlSRVNUUklDVF9UT19SQU5HRSh2Zi0+Zm10LnBpeC53aWR0aCwgTUlOX0ZSQU1FX1dJRFRILCBNQVhfRlJBTUVfV0lEVEgpOwogCVJFU1RSSUNUX1RPX1JBTkdFKHZmLT5mbXQucGl4LmhlaWdodCwgTUlOX0ZSQU1FX0hFSUdIVCwgTUFYX0ZSQU1FX0hFSUdIVCk7CiAKQEAgLTk2MiwyNCArOTQ0LDIzIEBACiAJc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAJaW50IHJldDsKIAotCWlmKCAwICE9IChyZXQ9dmlkaW9jX3RyeV9mbXRfdmlkX2NhcCAoZmlsZSwgcHJpdiwgdmYpKSApIHsKKwlyZXQgPSB2aWRpb2NfdHJ5X2ZtdF92aWRfY2FwKGZpbGUsIHByaXYsIHZmKTsKKwlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwotCX0KIAogCS8qIHN0b3AgaW8gaW4gY2FzZSBpdCBpcyBhbHJlYWR5IGluIHByb2dyZXNzICovCi0JaWYodXNidmlzaW9uLT5zdHJlYW1pbmcgPT0gU3RyZWFtX09uKSB7Ci0JCWlmICgocmV0ID0gdXNidmlzaW9uX3N0cmVhbV9pbnRlcnJ1cHQodXNidmlzaW9uKSkpCisJaWYgKHVzYnZpc2lvbi0+c3RyZWFtaW5nID09IHN0cmVhbV9vbikgeworCQlyZXQgPSB1c2J2aXNpb25fc3RyZWFtX2ludGVycnVwdCh1c2J2aXNpb24pOworCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKIAl9CiAJdXNidmlzaW9uX2ZyYW1lc19mcmVlKHVzYnZpc2lvbik7CiAJdXNidmlzaW9uX2VtcHR5X2ZyYW1lcXVldWVzKHVzYnZpc2lvbik7CiAKLQl1c2J2aXNpb24tPmN1ckZyYW1lID0gTlVMTDsKKwl1c2J2aXNpb24tPmN1cl9mcmFtZSA9IE5VTEw7CiAKIAkvKiBieSBub3cgd2UgYXJlIGNvbW1pdHRlZCB0byB0aGUgbmV3IGRhdGEuLi4gKi8KLQltdXRleF9sb2NrKCZ1c2J2aXNpb24tPmxvY2spOwogCXVzYnZpc2lvbl9zZXRfb3V0cHV0KHVzYnZpc2lvbiwgdmYtPmZtdC5waXgud2lkdGgsIHZmLT5mbXQucGl4LmhlaWdodCk7Ci0JbXV0ZXhfdW5sb2NrKCZ1c2J2aXNpb24tPmxvY2spOwogCiAJcmV0dXJuIDA7CiB9CkBAIC05OTAsOCArOTcxLDcgQEAKIAlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAlpbnQgbm9ibG9jayA9IGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLOwogCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKLQotCWludCByZXQsaTsKKwlpbnQgcmV0LCBpOwogCXN0cnVjdCB1c2J2aXNpb25fZnJhbWUgKmZyYW1lOwogCiAJUERFQlVHKERCR19JTywgIiVzOiAlbGQgYnl0ZXMsIG5vYmxvY2s9JWQiLCBfX2Z1bmNfXywKQEAgLTEwMDMsMjggKzk4MywyOCBAQAogCS8qIFRoaXMgZW50cnkgcG9pbnQgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBtbWFwIHJvdXRpbmVzCiAJICAgc28gdGhhdCBhIHVzZXIgY2FuIGRvIGVpdGhlciBWSURJT0NfUUJVRi9WSURJT0NfRFFCVUYKIAkgICB0byBnZXQgZnJhbWVzIG9yIGNhbGwgcmVhZCBvbiB0aGUgZGV2aWNlLiAqLwotCWlmKCF1c2J2aXNpb24tPm51bV9mcmFtZXMpIHsKKwlpZiAoIXVzYnZpc2lvbi0+bnVtX2ZyYW1lcykgewogCQkvKiBGaXJzdCwgYWxsb2NhdGUgc29tZSBmcmFtZXMgdG8gd29yayB3aXRoCiAJCSAgIGlmIHRoaXMgaGFzIG5vdCBiZWVuIGRvbmUgd2l0aCBWSURJT0NfUkVRQlVGICovCiAJCXVzYnZpc2lvbl9mcmFtZXNfZnJlZSh1c2J2aXNpb24pOwogCQl1c2J2aXNpb25fZW1wdHlfZnJhbWVxdWV1ZXModXNidmlzaW9uKTsKLQkJdXNidmlzaW9uX2ZyYW1lc19hbGxvYyh1c2J2aXNpb24sVVNCVklTSU9OX05VTUZSQU1FUyk7CisJCXVzYnZpc2lvbl9mcmFtZXNfYWxsb2ModXNidmlzaW9uLCBVU0JWSVNJT05fTlVNRlJBTUVTKTsKIAl9CiAKLQlpZih1c2J2aXNpb24tPnN0cmVhbWluZyAhPSBTdHJlYW1fT24pIHsKKwlpZiAodXNidmlzaW9uLT5zdHJlYW1pbmcgIT0gc3RyZWFtX29uKSB7CiAJCS8qIG5vIHN0cmVhbSBpcyBydW5uaW5nLCBtYWtlIGl0IHJ1bm5pbmcgISAqLwotCQl1c2J2aXNpb24tPnN0cmVhbWluZyA9IFN0cmVhbV9PbjsKKwkJdXNidmlzaW9uLT5zdHJlYW1pbmcgPSBzdHJlYW1fb247CiAJCWNhbGxfYWxsKHVzYnZpc2lvbiwgdmlkZW8sIHNfc3RyZWFtLCAxKTsKIAl9CiAKIAkvKiBUaGVuLCBlbnF1ZXVlIGFzIG1hbnkgZnJhbWVzIGFzIHBvc3NpYmxlCiAJICAgKGxpa2UgYSB1c2VyIG9mIFZJRElPQ19RQlVGIHdvdWxkIGRvKSAqLwotCWZvcihpPTA7aTx1c2J2aXNpb24tPm51bV9mcmFtZXM7aSsrKSB7CisJZm9yIChpID0gMDsgaSA8IHVzYnZpc2lvbi0+bnVtX2ZyYW1lczsgaSsrKSB7CiAJCWZyYW1lID0gJnVzYnZpc2lvbi0+ZnJhbWVbaV07Ci0JCWlmKGZyYW1lLT5ncmFic3RhdGUgPT0gRnJhbWVTdGF0ZV9VbnVzZWQpIHsKKwkJaWYgKGZyYW1lLT5ncmFic3RhdGUgPT0gZnJhbWVfc3RhdGVfdW51c2VkKSB7CiAJCQkvKiBNYXJrIGl0IGFzIHJlYWR5IGFuZCBlbnF1ZXVlIGZyYW1lICovCi0JCQlmcmFtZS0+Z3JhYnN0YXRlID0gRnJhbWVTdGF0ZV9SZWFkeTsKLQkJCWZyYW1lLT5zY2Fuc3RhdGUgPSBTY2FuU3RhdGVfU2Nhbm5pbmc7CisJCQlmcmFtZS0+Z3JhYnN0YXRlID0gZnJhbWVfc3RhdGVfcmVhZHk7CisJCQlmcmFtZS0+c2NhbnN0YXRlID0gc2Nhbl9zdGF0ZV9zY2FubmluZzsKIAkJCS8qIEFjY3VtdWxhdGVkIGluIHVzYnZpc2lvbl9wYXJzZV9kYXRhKCkgKi8KIAkJCWZyYW1lLT5zY2FubGVuZ3RoID0gMDsKIApAQCAtMTA0MCw3ICsxMDIwLDcgQEAKIAogCS8qIFRoZW4gdHJ5IHRvIHN0ZWFsIGEgZnJhbWUgKGxpa2UgYSBWSURJT0NfRFFCVUYgd291bGQgZG8pICovCiAJaWYgKGxpc3RfZW1wdHkoJih1c2J2aXNpb24tPm91dHF1ZXVlKSkpIHsKLQkJaWYobm9ibG9jaykKKwkJaWYgKG5vYmxvY2spCiAJCQlyZXR1cm4gLUVBR0FJTjsKIAogCQlyZXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUKQEAgLTEwNTcsNyArMTAzNyw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXNidmlzaW9uLT5xdWV1ZV9sb2NrLCBsb2NrX2ZsYWdzKTsKIAogCS8qIEFuIGVycm9yIHJldHVybnMgYW4gZW1wdHkgZnJhbWUgKi8KLQlpZiAoZnJhbWUtPmdyYWJzdGF0ZSA9PSBGcmFtZVN0YXRlX0Vycm9yKSB7CisJaWYgKGZyYW1lLT5ncmFic3RhdGUgPT0gZnJhbWVfc3RhdGVfZXJyb3IpIHsKIAkJZnJhbWUtPmJ5dGVzX3JlYWQgPSAwOwogCQlyZXR1cm4gMDsKIAl9CkBAIC0xMDcwLDkgKzEwNTAsOCBAQAogCWlmICgoY291bnQgKyBmcmFtZS0+Ynl0ZXNfcmVhZCkgPiAodW5zaWduZWQgbG9uZylmcmFtZS0+c2Nhbmxlbmd0aCkKIAkJY291bnQgPSBmcmFtZS0+c2Nhbmxlbmd0aCAtIGZyYW1lLT5ieXRlc19yZWFkOwogCi0JaWYgKGNvcHlfdG9fdXNlcihidWYsIGZyYW1lLT5kYXRhICsgZnJhbWUtPmJ5dGVzX3JlYWQsIGNvdW50KSkgeworCWlmIChjb3B5X3RvX3VzZXIoYnVmLCBmcmFtZS0+ZGF0YSArIGZyYW1lLT5ieXRlc19yZWFkLCBjb3VudCkpCiAJCXJldHVybiAtRUZBVUxUOwotCX0KIAogCWZyYW1lLT5ieXRlc19yZWFkICs9IGNvdW50OwogCVBERUJVRyhEQkdfSU8sICIlczoge2NvcHl9IGNvdW50IHVzZWQ9JWxkLCBuZXcgYnl0ZXNfcmVhZD0lbGQiLApAQCAtMTA4MCwxMiArMTA1OSwxMiBAQAogCSAgICAgICAodW5zaWduZWQgbG9uZyljb3VudCwgZnJhbWUtPmJ5dGVzX3JlYWQpOwogCiAJLyogRm9yIG5vdywgZm9yZ2V0IHRoZSBmcmFtZSBpZiBpdCBoYXMgbm90IGJlZW4gcmVhZCBpbiBvbmUgc2hvdC4gKi8KLS8qIAlpZiAoZnJhbWUtPmJ5dGVzX3JlYWQgPj0gZnJhbWUtPnNjYW5sZW5ndGgpIHsvLyBBbGwgZGF0YSBoYXMgYmVlbiByZWFkICovCisvKglpZiAoZnJhbWUtPmJ5dGVzX3JlYWQgPj0gZnJhbWUtPnNjYW5sZW5ndGgpIHsqLyAvKiBBbGwgZGF0YSBoYXMgYmVlbiByZWFkICovCiAJCWZyYW1lLT5ieXRlc19yZWFkID0gMDsKIAogCQkvKiBNYXJrIGl0IGFzIGF2YWlsYWJsZSB0byBiZSB1c2VkIGFnYWluLiAqLwotCQlmcmFtZS0+Z3JhYnN0YXRlID0gRnJhbWVTdGF0ZV9VbnVzZWQ7Ci0vKiAJfSAqLworCQlmcmFtZS0+Z3JhYnN0YXRlID0gZnJhbWVfc3RhdGVfdW51c2VkOworLyoJfSAqLwogCiAJcmV0dXJuIGNvdW50OwogfQpAQCAtMTEwMCwxNiArMTA3OSwxMSBAQAogCiAJUERFQlVHKERCR19NTUFQLCAibW1hcCIpOwogCi0JbXV0ZXhfbG9jaygmdXNidmlzaW9uLT5sb2NrKTsKLQotCWlmICghVVNCVklTSU9OX0lTX09QRVJBVElPTkFMKHVzYnZpc2lvbikpIHsKLQkJbXV0ZXhfdW5sb2NrKCZ1c2J2aXNpb24tPmxvY2spOworCWlmICghVVNCVklTSU9OX0lTX09QRVJBVElPTkFMKHVzYnZpc2lvbikpCiAJCXJldHVybiAtRUZBVUxUOwotCX0KIAogCWlmICghKHZtYS0+dm1fZmxhZ3MgJiBWTV9XUklURSkgfHwKIAkgICAgc2l6ZSAhPSBQQUdFX0FMSUdOKHVzYnZpc2lvbi0+bWF4X2ZyYW1lX3NpemUpKSB7Ci0JCW11dGV4X3VubG9jaygmdXNidmlzaW9uLT5sb2NrKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0xMTIxLDcgKzEwOTUsNiBAQAogCWlmIChpID09IHVzYnZpc2lvbi0+bnVtX2ZyYW1lcykgewogCQlQREVCVUcoREJHX01NQVAsCiAJCSAgICAgICAibW1hcDogdXNlciBzdXBwbGllZCBtYXBwaW5nIGFkZHJlc3MgaXMgb3V0IG9mIHJhbmdlIik7Ci0JCW11dGV4X3VubG9jaygmdXNidmlzaW9uLT5sb2NrKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0xMTMxLDEwICsxMTA0LDggQEAKIAogCXBvcyA9IHVzYnZpc2lvbi0+ZnJhbWVbaV0uZGF0YTsKIAl3aGlsZSAoc2l6ZSA+IDApIHsKLQogCQlpZiAodm1faW5zZXJ0X3BhZ2Uodm1hLCBzdGFydCwgdm1hbGxvY190b19wYWdlKHBvcykpKSB7CiAJCQlQREVCVUcoREJHX01NQVAsICJtbWFwOiB2bV9pbnNlcnRfcGFnZSBmYWlsZWQiKTsKLQkJCW11dGV4X3VubG9jaygmdXNidmlzaW9uLT5sb2NrKTsKIAkJCXJldHVybiAtRUFHQUlOOwogCQl9CiAJCXN0YXJ0ICs9IFBBR0VfU0laRTsKQEAgLTExNDIsNyArMTExMyw2IEBACiAJCXNpemUgLT0gUEFHRV9TSVpFOwogCX0KIAotCW11dGV4X3VubG9jaygmdXNidmlzaW9uLT5sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTE1NCwyMSArMTEyNCwxOCBAQAogc3RhdGljIGludCB1c2J2aXNpb25fcmFkaW9fb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKLQlpbnQgZXJyQ29kZSA9IDA7CisJaW50IGVycl9jb2RlID0gMDsKIAogCVBERUJVRyhEQkdfSU8sICIlczoiLCBfX2Z1bmNfXyk7CiAKLQltdXRleF9sb2NrKCZ1c2J2aXNpb24tPmxvY2spOwotCiAJaWYgKHVzYnZpc2lvbi0+dXNlcikgewogCQlkZXZfZXJyKCZ1c2J2aXNpb24tPnJkZXYtPmRldiwKIAkJCSIlczogU29tZW9uZSB0cmllZCB0byBvcGVuIGFuIGFscmVhZHkgb3BlbmVkIFVTQlZpc2lvbiBSYWRpbyFcbiIsCiAJCQkJX19mdW5jX18pOwotCQllcnJDb2RlID0gLUVCVVNZOwotCX0KLQllbHNlIHsKLQkJaWYoUG93ZXJPbkF0T3BlbikgewotCQkJdXNidmlzaW9uX3Jlc2V0X3Bvd2VyT2ZmVGltZXIodXNidmlzaW9uKTsKKwkJZXJyX2NvZGUgPSAtRUJVU1k7CisJfSBlbHNlIHsKKwkJaWYgKHBvd2VyX29uX2F0X29wZW4pIHsKKwkJCXVzYnZpc2lvbl9yZXNldF9wb3dlcl9vZmZfdGltZXIodXNidmlzaW9uKTsKIAkJCWlmICh1c2J2aXNpb24tPnBvd2VyID09IDApIHsKIAkJCQl1c2J2aXNpb25fcG93ZXJfb24odXNidmlzaW9uKTsKIAkJCQl1c2J2aXNpb25faTJjX3JlZ2lzdGVyKHVzYnZpc2lvbik7CkBAIC0xMTc2LDgwICsxMTQzLDczIEBACiAJCX0KIAogCQkvKiBBbHRlcm5hdGUgaW50ZXJmYWNlIDEgaXMgaXMgdGhlIGJpZ2dlc3QgZnJhbWUgc2l6ZSAqLwotCQllcnJDb2RlID0gdXNidmlzaW9uX3NldF9hbHRlcm5hdGUodXNidmlzaW9uKTsKLQkJaWYgKGVyckNvZGUgPCAwKSB7Ci0JCQl1c2J2aXNpb24tPmxhc3RfZXJyb3IgPSBlcnJDb2RlOwotCQkJZXJyQ29kZSA9IC1FQlVTWTsKKwkJZXJyX2NvZGUgPSB1c2J2aXNpb25fc2V0X2FsdGVybmF0ZSh1c2J2aXNpb24pOworCQlpZiAoZXJyX2NvZGUgPCAwKSB7CisJCQl1c2J2aXNpb24tPmxhc3RfZXJyb3IgPSBlcnJfY29kZTsKKwkJCWVycl9jb2RlID0gLUVCVVNZOwogCQkJZ290byBvdXQ7CiAJCX0KIAotCQkvLyBJZiBzbyBmYXIgbm8gZXJyb3JzIHRoZW4gd2Ugc2hhbGwgc3RhcnQgdGhlIHJhZGlvCisJCS8qIElmIHNvIGZhciBubyBlcnJvcnMgdGhlbiB3ZSBzaGFsbCBzdGFydCB0aGUgcmFkaW8gKi8KIAkJdXNidmlzaW9uLT5yYWRpbyA9IDE7CiAJCWNhbGxfYWxsKHVzYnZpc2lvbiwgdHVuZXIsIHNfcmFkaW8pOwogCQl1c2J2aXNpb25fc2V0X2F1ZGlvKHVzYnZpc2lvbiwgVVNCVklTSU9OX0FVRElPX1JBRElPKTsKIAkJdXNidmlzaW9uLT51c2VyKys7CiAJfQogCi0JaWYgKGVyckNvZGUpIHsKLQkJaWYgKFBvd2VyT25BdE9wZW4pIHsKKwlpZiAoZXJyX2NvZGUpIHsKKwkJaWYgKHBvd2VyX29uX2F0X29wZW4pIHsKIAkJCXVzYnZpc2lvbl9pMmNfdW5yZWdpc3Rlcih1c2J2aXNpb24pOwogCQkJdXNidmlzaW9uX3Bvd2VyX29mZih1c2J2aXNpb24pOwogCQkJdXNidmlzaW9uLT5pbml0aWFsaXplZCA9IDA7CiAJCX0KIAl9CiBvdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZ1c2J2aXNpb24tPmxvY2spOwotCXJldHVybiBlcnJDb2RlOworCXJldHVybiBlcnJfY29kZTsKIH0KIAogCiBzdGF0aWMgaW50IHVzYnZpc2lvbl9yYWRpb19jbG9zZShzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKLQlpbnQgZXJyQ29kZSA9IDA7CisJaW50IGVycl9jb2RlID0gMDsKIAogCVBERUJVRyhEQkdfSU8sICIiKTsKIAotCW11dGV4X2xvY2soJnVzYnZpc2lvbi0+bG9jayk7Ci0KIAkvKiBTZXQgcGFja2V0IHNpemUgdG8gMCAqLwotCXVzYnZpc2lvbi0+aWZhY2VBbHQ9MDsKLQllcnJDb2RlID0gdXNiX3NldF9pbnRlcmZhY2UodXNidmlzaW9uLT5kZXYsIHVzYnZpc2lvbi0+aWZhY2UsCi0JCQkJICAgIHVzYnZpc2lvbi0+aWZhY2VBbHQpOworCXVzYnZpc2lvbi0+aWZhY2VfYWx0ID0gMDsKKwllcnJfY29kZSA9IHVzYl9zZXRfaW50ZXJmYWNlKHVzYnZpc2lvbi0+ZGV2LCB1c2J2aXNpb24tPmlmYWNlLAorCQkJCSAgICB1c2J2aXNpb24tPmlmYWNlX2FsdCk7CiAKIAl1c2J2aXNpb25fYXVkaW9fb2ZmKHVzYnZpc2lvbik7Ci0JdXNidmlzaW9uLT5yYWRpbz0wOworCXVzYnZpc2lvbi0+cmFkaW8gPSAwOwogCXVzYnZpc2lvbi0+dXNlci0tOwogCi0JaWYgKFBvd2VyT25BdE9wZW4pIHsKLQkJdXNidmlzaW9uX3NldF9wb3dlck9mZlRpbWVyKHVzYnZpc2lvbik7CisJaWYgKHBvd2VyX29uX2F0X29wZW4pIHsKKwkJdXNidmlzaW9uX3NldF9wb3dlcl9vZmZfdGltZXIodXNidmlzaW9uKTsKIAkJdXNidmlzaW9uLT5pbml0aWFsaXplZCA9IDA7CiAJfQogCi0JbXV0ZXhfdW5sb2NrKCZ1c2J2aXNpb24tPmxvY2spOwotCiAJaWYgKHVzYnZpc2lvbi0+cmVtb3ZlX3BlbmRpbmcpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEZpbmFsIGRpc2Nvbm5lY3RcbiIsIF9fZnVuY19fKTsKIAkJdXNidmlzaW9uX3JlbGVhc2UodXNidmlzaW9uKTsKIAl9CiAKIAlQREVCVUcoREJHX0lPLCAic3VjY2VzcyIpOwotCXJldHVybiBlcnJDb2RlOworCXJldHVybiBlcnJfY29kZTsKIH0KIAotLy8KLS8vIFZpZGVvIHJlZ2lzdHJhdGlvbiBzdHVmZgotLy8KKy8qIFZpZGVvIHJlZ2lzdHJhdGlvbiBzdHVmZiAqLwogCi0vLyBWaWRlbyB0ZW1wbGF0ZQorLyogVmlkZW8gdGVtcGxhdGUgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgdXNidmlzaW9uX2ZvcHMgPSB7CiAJLm93bmVyICAgICAgICAgICAgID0gVEhJU19NT0RVTEUsCiAJLm9wZW4JCT0gdXNidmlzaW9uX3Y0bDJfb3BlbiwKIAkucmVsZWFzZQk9IHVzYnZpc2lvbl92NGwyX2Nsb3NlLAogCS5yZWFkCQk9IHVzYnZpc2lvbl92NGwyX3JlYWQsCiAJLm1tYXAJCT0gdXNidmlzaW9uX3Y0bDJfbW1hcCwKLQkuaW9jdGwJCT0gdmlkZW9faW9jdGwyLAotLyogCS5wb2xsICAgICAgICAgID0gdmlkZW9fcG9sbCwgKi8KKwkudW5sb2NrZWRfaW9jdGwJPSB2aWRlb19pb2N0bDIsCisvKgkucG9sbAkJPSB2aWRlb19wb2xsLCAqLwogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyB1c2J2aXNpb25faW9jdGxfb3BzID0gewpAQCAtMTI3Myw5ICsxMjMzLDYgQEAKIAkudmlkaW9jX3NfY3RybCAgICAgICAgPSB2aWRpb2Nfc19jdHJsLAogCS52aWRpb2Nfc3RyZWFtb24gICAgICA9IHZpZGlvY19zdHJlYW1vbiwKIAkudmlkaW9jX3N0cmVhbW9mZiAgICAgPSB2aWRpb2Nfc3RyZWFtb2ZmLAotI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAotLyogIAkudmlkaW9jZ21idWYgICAgICAgICAgPSB2aWRpb2NnbWJ1ZiwgKi8KLSNlbmRpZgogCS52aWRpb2NfZ190dW5lciAgICAgICA9IHZpZGlvY19nX3R1bmVyLAogCS52aWRpb2Nfc190dW5lciAgICAgICA9IHZpZGlvY19zX3R1bmVyLAogCS52aWRpb2NfZ19mcmVxdWVuY3kgICA9IHZpZGlvY19nX2ZyZXF1ZW5jeSwKQEAgLTEyODgsMjAgKzEyNDUsMjAgQEAKIAogc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgdXNidmlzaW9uX3ZpZGVvX3RlbXBsYXRlID0gewogCS5mb3BzCQk9ICZ1c2J2aXNpb25fZm9wcywKLQkuaW9jdGxfb3BzIAk9ICZ1c2J2aXNpb25faW9jdGxfb3BzLAorCS5pb2N0bF9vcHMJPSAmdXNidmlzaW9uX2lvY3RsX29wcywKIAkubmFtZSAgICAgICAgICAgPSAidXNidmlzaW9uLXZpZGVvIiwKIAkucmVsZWFzZQk9IHZpZGVvX2RldmljZV9yZWxlYXNlLAotCS50dm5vcm1zICAgICAgICAgICAgICA9IFVTQlZJU0lPTl9OT1JNUywKLQkuY3VycmVudF9ub3JtICAgICAgICAgPSBWNEwyX1NURF9QQUwKKwkudHZub3JtcyAgICAgICAgPSBVU0JWSVNJT05fTk9STVMsCisJLmN1cnJlbnRfbm9ybSAgID0gVjRMMl9TVERfUEFMCiB9OwogCiAKLS8vIFJhZGlvIHRlbXBsYXRlCisvKiBSYWRpbyB0ZW1wbGF0ZSAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyB1c2J2aXNpb25fcmFkaW9fZm9wcyA9IHsKIAkub3duZXIgICAgICAgICAgICAgPSBUSElTX01PRFVMRSwKIAkub3BlbgkJPSB1c2J2aXNpb25fcmFkaW9fb3BlbiwKIAkucmVsZWFzZQk9IHVzYnZpc2lvbl9yYWRpb19jbG9zZSwKLQkuaW9jdGwJCT0gdmlkZW9faW9jdGwyLAorCS51bmxvY2tlZF9pb2N0bAk9IHZpZGVvX2lvY3RsMiwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9pb2N0bF9vcHMgdXNidmlzaW9uX3JhZGlvX2lvY3RsX29wcyA9IHsKQEAgLTEzMjIsOSArMTI3OSw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIHVzYnZpc2lvbl9yYWRpb190ZW1wbGF0ZSA9IHsKIAkuZm9wcwkJPSAmdXNidmlzaW9uX3JhZGlvX2ZvcHMsCi0JLm5hbWUgICAgICAgICAgID0gInVzYnZpc2lvbi1yYWRpbyIsCisJLm5hbWUJCT0gInVzYnZpc2lvbi1yYWRpbyIsCiAJLnJlbGVhc2UJPSB2aWRlb19kZXZpY2VfcmVsZWFzZSwKLQkuaW9jdGxfb3BzIAk9ICZ1c2J2aXNpb25fcmFkaW9faW9jdGxfb3BzLAorCS5pb2N0bF9vcHMJPSAmdXNidmlzaW9uX3JhZGlvX2lvY3RsX29wcywKIAogCS50dm5vcm1zICAgICAgICAgICAgICA9IFVTQlZJU0lPTl9OT1JNUywKIAkuY3VycmVudF9ub3JtICAgICAgICAgPSBWNEwyX1NURF9QQUwKQEAgLTEzNDUsODAgKzEzMDIsNzAgQEAKIAl9CiAKIAl2ZGV2ID0gdmlkZW9fZGV2aWNlX2FsbG9jKCk7Ci0JaWYgKE5VTEwgPT0gdmRldikgeworCWlmIChOVUxMID09IHZkZXYpCiAJCXJldHVybiBOVUxMOwotCX0KIAkqdmRldiA9ICp2ZGV2X3RlbXBsYXRlOworCXZkZXYtPmxvY2sgPSAmdXNidmlzaW9uLT52NGwyX2xvY2s7CiAJdmRldi0+djRsMl9kZXYgPSAmdXNidmlzaW9uLT52NGwyX2RldjsKIAlzbnByaW50Zih2ZGV2LT5uYW1lLCBzaXplb2YodmRldi0+bmFtZSksICIlcyIsIG5hbWUpOwogCXZpZGVvX3NldF9kcnZkYXRhKHZkZXYsIHVzYnZpc2lvbik7CiAJcmV0dXJuIHZkZXY7CiB9CiAKLS8vIHVucmVnaXN0ZXIgdmlkZW80bGludXggZGV2aWNlcworLyogdW5yZWdpc3RlciB2aWRlbzRsaW51eCBkZXZpY2VzICovCiBzdGF0aWMgdm9pZCB1c2J2aXNpb25fdW5yZWdpc3Rlcl92aWRlbyhzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uKQogewotCS8vIFJhZGlvIERldmljZToKKwkvKiBSYWRpbyBEZXZpY2U6ICovCiAJaWYgKHVzYnZpc2lvbi0+cmRldikgewogCQlQREVCVUcoREJHX1BST0JFLCAidW5yZWdpc3RlciAlcyBbdjRsMl0iLAogCQkgICAgICAgdmlkZW9fZGV2aWNlX25vZGVfbmFtZSh1c2J2aXNpb24tPnJkZXYpKTsKLQkJaWYgKHZpZGVvX2lzX3JlZ2lzdGVyZWQodXNidmlzaW9uLT5yZGV2KSkgeworCQlpZiAodmlkZW9faXNfcmVnaXN0ZXJlZCh1c2J2aXNpb24tPnJkZXYpKQogCQkJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UodXNidmlzaW9uLT5yZGV2KTsKLQkJfSBlbHNlIHsKKwkJZWxzZQogCQkJdmlkZW9fZGV2aWNlX3JlbGVhc2UodXNidmlzaW9uLT5yZGV2KTsKLQkJfQogCQl1c2J2aXNpb24tPnJkZXYgPSBOVUxMOwogCX0KIAotCS8vIFZpZGVvIERldmljZToKKwkvKiBWaWRlbyBEZXZpY2U6ICovCiAJaWYgKHVzYnZpc2lvbi0+dmRldikgewogCQlQREVCVUcoREJHX1BST0JFLCAidW5yZWdpc3RlciAlcyBbdjRsMl0iLAogCQkgICAgICAgdmlkZW9fZGV2aWNlX25vZGVfbmFtZSh1c2J2aXNpb24tPnZkZXYpKTsKLQkJaWYgKHZpZGVvX2lzX3JlZ2lzdGVyZWQodXNidmlzaW9uLT52ZGV2KSkgeworCQlpZiAodmlkZW9faXNfcmVnaXN0ZXJlZCh1c2J2aXNpb24tPnZkZXYpKQogCQkJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UodXNidmlzaW9uLT52ZGV2KTsKLQkJfSBlbHNlIHsKKwkJZWxzZQogCQkJdmlkZW9fZGV2aWNlX3JlbGVhc2UodXNidmlzaW9uLT52ZGV2KTsKLQkJfQogCQl1c2J2aXNpb24tPnZkZXYgPSBOVUxMOwogCX0KIH0KIAotLy8gcmVnaXN0ZXIgdmlkZW80bGludXggZGV2aWNlcworLyogcmVnaXN0ZXIgdmlkZW80bGludXggZGV2aWNlcyAqLwogc3RhdGljIGludCBfX2RldmluaXQgdXNidmlzaW9uX3JlZ2lzdGVyX3ZpZGVvKHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24pCiB7Ci0JLy8gVmlkZW8gRGV2aWNlOgorCS8qIFZpZGVvIERldmljZTogKi8KIAl1c2J2aXNpb24tPnZkZXYgPSB1c2J2aXNpb25fdmRldl9pbml0KHVzYnZpc2lvbiwKIAkJCQkJICAgICAgJnVzYnZpc2lvbl92aWRlb190ZW1wbGF0ZSwKIAkJCQkJICAgICAgIlVTQlZpc2lvbiBWaWRlbyIpOwotCWlmICh1c2J2aXNpb24tPnZkZXYgPT0gTlVMTCkgeworCWlmICh1c2J2aXNpb24tPnZkZXYgPT0gTlVMTCkKIAkJZ290byBlcnJfZXhpdDsKLQl9Ci0JaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZSh1c2J2aXNpb24tPnZkZXYsCi0JCQkJICBWRkxfVFlQRV9HUkFCQkVSLAotCQkJCSAgdmlkZW9fbnIpPDApIHsKKwlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHVzYnZpc2lvbi0+dmRldiwgVkZMX1RZUEVfR1JBQkJFUiwgdmlkZW9fbnIpIDwgMCkKIAkJZ290byBlcnJfZXhpdDsKLQl9CiAJcHJpbnRrKEtFUk5fSU5GTyAiVVNCVmlzaW9uWyVkXTogcmVnaXN0ZXJlZCBVU0JWaXNpb24gVmlkZW8gZGV2aWNlICVzIFt2NGwyXVxuIiwKIAkgICAgICAgdXNidmlzaW9uLT5uciwgdmlkZW9fZGV2aWNlX25vZGVfbmFtZSh1c2J2aXNpb24tPnZkZXYpKTsKIAotCS8vIFJhZGlvIERldmljZToKLQlpZiAodXNidmlzaW9uX2RldmljZV9kYXRhW3VzYnZpc2lvbi0+RGV2TW9kZWxdLlJhZGlvKSB7Ci0JCS8vIHVzYnZpc2lvbiBoYXMgcmFkaW8KKwkvKiBSYWRpbyBEZXZpY2U6ICovCisJaWYgKHVzYnZpc2lvbl9kZXZpY2VfZGF0YVt1c2J2aXNpb24tPmRldl9tb2RlbF0ucmFkaW8pIHsKKwkJLyogdXNidmlzaW9uIGhhcyByYWRpbyAqLwogCQl1c2J2aXNpb24tPnJkZXYgPSB1c2J2aXNpb25fdmRldl9pbml0KHVzYnZpc2lvbiwKIAkJCQkJCSAgICAgICZ1c2J2aXNpb25fcmFkaW9fdGVtcGxhdGUsCiAJCQkJCQkgICAgICAiVVNCVmlzaW9uIFJhZGlvIik7Ci0JCWlmICh1c2J2aXNpb24tPnJkZXYgPT0gTlVMTCkgeworCQlpZiAodXNidmlzaW9uLT5yZGV2ID09IE5VTEwpCiAJCQlnb3RvIGVycl9leGl0OwotCQl9Ci0JCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UodXNidmlzaW9uLT5yZGV2LAotCQkJCQkgIFZGTF9UWVBFX1JBRElPLAotCQkJCQkgIHJhZGlvX25yKTwwKSB7CisJCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UodXNidmlzaW9uLT5yZGV2LCBWRkxfVFlQRV9SQURJTywgcmFkaW9fbnIpIDwgMCkKIAkJCWdvdG8gZXJyX2V4aXQ7Ci0JCX0KIAkJcHJpbnRrKEtFUk5fSU5GTyAiVVNCVmlzaW9uWyVkXTogcmVnaXN0ZXJlZCBVU0JWaXNpb24gUmFkaW8gZGV2aWNlICVzIFt2NGwyXVxuIiwKIAkJICAgICAgIHVzYnZpc2lvbi0+bnIsIHZpZGVvX2RldmljZV9ub2RlX25hbWUodXNidmlzaW9uLT5yZGV2KSk7CiAJfQotCS8vIGFsbCBkb25lCisJLyogYWxsIGRvbmUgKi8KIAlyZXR1cm4gMDsKIAogIGVycl9leGl0OgpAQCAtMTQ1MSwxNSArMTM5OCwxNSBAQAogCWlmICh2NGwyX2RldmljZV9yZWdpc3RlcigmaW50Zi0+ZGV2LCAmdXNidmlzaW9uLT52NGwyX2RldikpCiAJCWdvdG8gZXJyX2ZyZWU7CiAKLQltdXRleF9pbml0KCZ1c2J2aXNpb24tPmxvY2spOwkvKiBhdmFpbGFibGUgKi8KKwltdXRleF9pbml0KCZ1c2J2aXNpb24tPnY0bDJfbG9jayk7CiAKLQkvLyBwcmVwYXJlIGNvbnRyb2wgdXJiIGZvciBjb250cm9sIG1lc3NhZ2VzIGR1cmluZyBpbnRlcnJ1cHRzCi0JdXNidmlzaW9uLT5jdHJsVXJiID0gdXNiX2FsbG9jX3VyYihVU0JWSVNJT05fVVJCX0ZSQU1FUywgR0ZQX0tFUk5FTCk7Ci0JaWYgKHVzYnZpc2lvbi0+Y3RybFVyYiA9PSBOVUxMKQorCS8qIHByZXBhcmUgY29udHJvbCB1cmIgZm9yIGNvbnRyb2wgbWVzc2FnZXMgZHVyaW5nIGludGVycnVwdHMgKi8KKwl1c2J2aXNpb24tPmN0cmxfdXJiID0gdXNiX2FsbG9jX3VyYihVU0JWSVNJT05fVVJCX0ZSQU1FUywgR0ZQX0tFUk5FTCk7CisJaWYgKHVzYnZpc2lvbi0+Y3RybF91cmIgPT0gTlVMTCkKIAkJZ290byBlcnJfdW5yZWc7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmdXNidmlzaW9uLT5jdHJsVXJiX3dxKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ1c2J2aXNpb24tPmN0cmxfdXJiX3dxKTsKIAotCXVzYnZpc2lvbl9pbml0X3Bvd2VyT2ZmVGltZXIodXNidmlzaW9uKTsKKwl1c2J2aXNpb25faW5pdF9wb3dlcl9vZmZfdGltZXIodXNidmlzaW9uKTsKIAogCXJldHVybiB1c2J2aXNpb247CiAKQEAgLTE0ODEsMjAgKzE0MjgsMTQgQEAKIHsKIAlQREVCVUcoREJHX1BST0JFLCAiIik7CiAKLQltdXRleF9sb2NrKCZ1c2J2aXNpb24tPmxvY2spOwotCi0JdXNidmlzaW9uX3Jlc2V0X3Bvd2VyT2ZmVGltZXIodXNidmlzaW9uKTsKKwl1c2J2aXNpb25fcmVzZXRfcG93ZXJfb2ZmX3RpbWVyKHVzYnZpc2lvbik7CiAKIAl1c2J2aXNpb24tPmluaXRpYWxpemVkID0gMDsKIAotCW11dGV4X3VubG9jaygmdXNidmlzaW9uLT5sb2NrKTsKLQogCXVzYnZpc2lvbl9yZW1vdmVfc3lzZnModXNidmlzaW9uLT52ZGV2KTsKIAl1c2J2aXNpb25fdW5yZWdpc3Rlcl92aWRlbyh1c2J2aXNpb24pOwogCi0JaWYgKHVzYnZpc2lvbi0+Y3RybFVyYikgewotCQl1c2JfZnJlZV91cmIodXNidmlzaW9uLT5jdHJsVXJiKTsKLQl9CisJdXNiX2ZyZWVfdXJiKHVzYnZpc2lvbi0+Y3RybF91cmIpOwogCiAJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmdXNidmlzaW9uLT52NGwyX2Rldik7CiAJa2ZyZWUodXNidmlzaW9uKTsKQEAgLTE1MTIsMjUgKzE0NTMsMjUgQEAKIAlpZiAodXNidmlzaW9uID09IE5VTEwpCiAJCXJldHVybjsKIAotCW1vZGVsID0gdXNidmlzaW9uLT5EZXZNb2RlbDsKLQl1c2J2aXNpb24tPnBhbGV0dGUgPSB1c2J2aXNpb25fdjRsMl9mb3JtYXRbMl07IC8vIFY0TDJfUElYX0ZNVF9SR0IyNDsKKwltb2RlbCA9IHVzYnZpc2lvbi0+ZGV2X21vZGVsOworCXVzYnZpc2lvbi0+cGFsZXR0ZSA9IHVzYnZpc2lvbl92NGwyX2Zvcm1hdFsyXTsgLyogVjRMMl9QSVhfRk1UX1JHQjI0OyAqLwogCi0JaWYgKHVzYnZpc2lvbl9kZXZpY2VfZGF0YVt1c2J2aXNpb24tPkRldk1vZGVsXS5WaW5fUmVnMl9vdmVycmlkZSkgewotCQl1c2J2aXNpb24tPlZpbl9SZWcyX1ByZXNldCA9Ci0JCQl1c2J2aXNpb25fZGV2aWNlX2RhdGFbdXNidmlzaW9uLT5EZXZNb2RlbF0uVmluX1JlZzI7CisJaWYgKHVzYnZpc2lvbl9kZXZpY2VfZGF0YVt1c2J2aXNpb24tPmRldl9tb2RlbF0udmluX3JlZzJfb3ZlcnJpZGUpIHsKKwkJdXNidmlzaW9uLT52aW5fcmVnMl9wcmVzZXQgPQorCQkJdXNidmlzaW9uX2RldmljZV9kYXRhW3VzYnZpc2lvbi0+ZGV2X21vZGVsXS52aW5fcmVnMjsKIAl9IGVsc2UgewotCQl1c2J2aXNpb24tPlZpbl9SZWcyX1ByZXNldCA9IDA7CisJCXVzYnZpc2lvbi0+dmluX3JlZzJfcHJlc2V0ID0gMDsKIAl9CiAKLQl1c2J2aXNpb24tPnR2bm9ybUlkID0gdXNidmlzaW9uX2RldmljZV9kYXRhW21vZGVsXS5WaWRlb05vcm07CisJdXNidmlzaW9uLT50dm5vcm1faWQgPSB1c2J2aXNpb25fZGV2aWNlX2RhdGFbbW9kZWxdLnZpZGVvX25vcm07CiAKLQl1c2J2aXNpb24tPnZpZGVvX2lucHV0cyA9IHVzYnZpc2lvbl9kZXZpY2VfZGF0YVttb2RlbF0uVmlkZW9DaGFubmVsczsKKwl1c2J2aXNpb24tPnZpZGVvX2lucHV0cyA9IHVzYnZpc2lvbl9kZXZpY2VfZGF0YVttb2RlbF0udmlkZW9fY2hhbm5lbHM7CiAJdXNidmlzaW9uLT5jdGxfaW5wdXQgPSAwOwogCiAJLyogVGhpcyBzaG91bGQgYmUgaGVyZSB0byBtYWtlIGkyYyBjbGllbnRzIHRvIGJlIGFibGUgdG8gcmVnaXN0ZXIgKi8KIAkvKiBmaXJzdCBzd2l0Y2ggb2ZmIGF1ZGlvICovCiAJdXNidmlzaW9uX2F1ZGlvX29mZih1c2J2aXNpb24pOwotCWlmICghUG93ZXJPbkF0T3BlbikgeworCWlmICghcG93ZXJfb25fYXRfb3BlbikgewogCQkvKiBhbmQgdGhlbiBwb3dlciB1cCB0aGUgbm9pc3kgdHVuZXIgKi8KIAkJdXNidmlzaW9uX3Bvd2VyX29uKHVzYnZpc2lvbik7CiAJCXVzYnZpc2lvbl9pMmNfcmVnaXN0ZXIodXNidmlzaW9uKTsKQEAgLTE1NTMsMjUgKzE0OTQsMjQgQEAKIAljb25zdCBzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppbnRlcmZhY2U7CiAJc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9IE5VTEw7CiAJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplbmRwb2ludDsKLQlpbnQgbW9kZWwsaTsKKwlpbnQgbW9kZWwsIGk7CiAKIAlQREVCVUcoREJHX1BST0JFLCAiVklEPSUjMDR4LCBQSUQ9JSMwNHgsIGlmbnVtPSV1IiwKIAkJCQlkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IsCiAJCQkJZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCwgaWZudW0pOwogCiAJbW9kZWwgPSBkZXZpZC0+ZHJpdmVyX2luZm87Ci0JaWYgKCAobW9kZWw8MCkgfHwgKG1vZGVsPj11c2J2aXNpb25fZGV2aWNlX2RhdGFfc2l6ZSkgKSB7Ci0JCVBERUJVRyhEQkdfUFJPQkUsICJtb2RlbCBvdXQgb2YgYm91bmRzICVkIixtb2RlbCk7CisJaWYgKG1vZGVsIDwgMCB8fCBtb2RlbCA+PSB1c2J2aXNpb25fZGV2aWNlX2RhdGFfc2l6ZSkgeworCQlQREVCVUcoREJHX1BST0JFLCAibW9kZWwgb3V0IG9mIGJvdW5kcyAlZCIsIG1vZGVsKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCXByaW50ayhLRVJOX0lORk8gIiVzOiAlcyBmb3VuZFxuIiwgX19mdW5jX18sCi0JCQkJdXNidmlzaW9uX2RldmljZV9kYXRhW21vZGVsXS5Nb2RlbFN0cmluZyk7CisJCQkJdXNidmlzaW9uX2RldmljZV9kYXRhW21vZGVsXS5tb2RlbF9zdHJpbmcpOwogCi0JaWYgKHVzYnZpc2lvbl9kZXZpY2VfZGF0YVttb2RlbF0uSW50ZXJmYWNlID49IDApIHsKLQkJaW50ZXJmYWNlID0gJmRldi0+YWN0Y29uZmlnLT5pbnRlcmZhY2VbdXNidmlzaW9uX2RldmljZV9kYXRhW21vZGVsXS5JbnRlcmZhY2VdLT5hbHRzZXR0aW5nWzBdOwotCX0gZWxzZSB7CisJaWYgKHVzYnZpc2lvbl9kZXZpY2VfZGF0YVttb2RlbF0uaW50ZXJmYWNlID49IDApCisJCWludGVyZmFjZSA9ICZkZXYtPmFjdGNvbmZpZy0+aW50ZXJmYWNlW3VzYnZpc2lvbl9kZXZpY2VfZGF0YVttb2RlbF0uaW50ZXJmYWNlXS0+YWx0c2V0dGluZ1swXTsKKwllbHNlCiAJCWludGVyZmFjZSA9ICZkZXYtPmFjdGNvbmZpZy0+aW50ZXJmYWNlW2lmbnVtXS0+YWx0c2V0dGluZ1swXTsKLQl9CiAJZW5kcG9pbnQgPSAmaW50ZXJmYWNlLT5lbmRwb2ludFsxXS5kZXNjOwogCWlmICghdXNiX2VuZHBvaW50X3hmZXJfaXNvYyhlbmRwb2ludCkpIHsKIAkJZGV2X2VycigmaW50Zi0+ZGV2LCAiJXM6IGludGVyZmFjZSAlZC4gaGFzIG5vbi1JU08gZW5kcG9pbnQhXG4iLApAQCAtMTU5Miw1OSArMTUzMiw1MiBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlpZiAoZGV2LT5kZXNjcmlwdG9yLmJOdW1Db25maWd1cmF0aW9ucyA+IDEpIHsKLQkJdXNidmlzaW9uLT5icmlkZ2VUeXBlID0gQlJJREdFX05UMTAwNDsKLQl9IGVsc2UgaWYgKG1vZGVsID09IERBWlpMRV9EVkNfOTBfUkVWXzFfU0VDQU0pIHsKLQkJdXNidmlzaW9uLT5icmlkZ2VUeXBlID0gQlJJREdFX05UMTAwNTsKLQl9IGVsc2UgewotCQl1c2J2aXNpb24tPmJyaWRnZVR5cGUgPSBCUklER0VfTlQxMDAzOwotCX0KLQlQREVCVUcoREJHX1BST0JFLCAiYnJpZGdlVHlwZSAlZCIsIHVzYnZpc2lvbi0+YnJpZGdlVHlwZSk7Ci0KLQltdXRleF9sb2NrKCZ1c2J2aXNpb24tPmxvY2spOworCWlmIChkZXYtPmRlc2NyaXB0b3IuYk51bUNvbmZpZ3VyYXRpb25zID4gMSkKKwkJdXNidmlzaW9uLT5icmlkZ2VfdHlwZSA9IEJSSURHRV9OVDEwMDQ7CisJZWxzZSBpZiAobW9kZWwgPT0gREFaWkxFX0RWQ185MF9SRVZfMV9TRUNBTSkKKwkJdXNidmlzaW9uLT5icmlkZ2VfdHlwZSA9IEJSSURHRV9OVDEwMDU7CisJZWxzZQorCQl1c2J2aXNpb24tPmJyaWRnZV90eXBlID0gQlJJREdFX05UMTAwMzsKKwlQREVCVUcoREJHX1BST0JFLCAiYnJpZGdlX3R5cGUgJWQiLCB1c2J2aXNpb24tPmJyaWRnZV90eXBlKTsKIAogCS8qIGNvbXB1dGUgYWx0ZXJuYXRlIG1heCBwYWNrZXQgc2l6ZXMgKi8KIAl1aWYgPSBkZXYtPmFjdGNvbmZpZy0+aW50ZXJmYWNlWzBdOwogCi0JdXNidmlzaW9uLT5udW1fYWx0PXVpZi0+bnVtX2FsdHNldHRpbmc7Ci0JUERFQlVHKERCR19QUk9CRSwgIkFsdGVybmF0ZSBzZXR0aW5nczogJWkiLHVzYnZpc2lvbi0+bnVtX2FsdCk7Ci0JdXNidmlzaW9uLT5hbHRfbWF4X3BrdF9zaXplID0ga21hbGxvYygzMioKLQkJCQkJICAgICAgdXNidmlzaW9uLT5udW1fYWx0LEdGUF9LRVJORUwpOworCXVzYnZpc2lvbi0+bnVtX2FsdCA9IHVpZi0+bnVtX2FsdHNldHRpbmc7CisJUERFQlVHKERCR19QUk9CRSwgIkFsdGVybmF0ZSBzZXR0aW5nczogJWkiLCB1c2J2aXNpb24tPm51bV9hbHQpOworCXVzYnZpc2lvbi0+YWx0X21heF9wa3Rfc2l6ZSA9IGttYWxsb2MoMzIgKiB1c2J2aXNpb24tPm51bV9hbHQsIEdGUF9LRVJORUwpOwogCWlmICh1c2J2aXNpb24tPmFsdF9tYXhfcGt0X3NpemUgPT0gTlVMTCkgewogCQlkZXZfZXJyKCZpbnRmLT5kZXYsICJ1c2J2aXNpb246IG91dCBvZiBtZW1vcnkhXG4iKTsKLQkJbXV0ZXhfdW5sb2NrKCZ1c2J2aXNpb24tPmxvY2spOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgdXNidmlzaW9uLT5udW1fYWx0IDsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IHVzYnZpc2lvbi0+bnVtX2FsdDsgaSsrKSB7CiAJCXUxNiB0bXAgPSBsZTE2X3RvX2NwdSh1aWYtPmFsdHNldHRpbmdbaV0uZW5kcG9pbnRbMV0uZGVzYy4KIAkJCQkgICAgICB3TWF4UGFja2V0U2l6ZSk7CiAJCXVzYnZpc2lvbi0+YWx0X21heF9wa3Rfc2l6ZVtpXSA9CiAJCQkodG1wICYgMHgwN2ZmKSAqICgoKHRtcCAmIDB4MTgwMCkgPj4gMTEpICsgMSk7Ci0JCVBERUJVRyhEQkdfUFJPQkUsICJBbHRlcm5hdGUgc2V0dGluZyAlaSwgbWF4IHNpemU9ICVpIixpLAorCQlQREVCVUcoREJHX1BST0JFLCAiQWx0ZXJuYXRlIHNldHRpbmcgJWksIG1heCBzaXplPSAlaSIsIGksCiAJCSAgICAgICB1c2J2aXNpb24tPmFsdF9tYXhfcGt0X3NpemVbaV0pOwogCX0KIAogCiAJdXNidmlzaW9uLT5uciA9IHVzYnZpc2lvbl9ucisrOwogCi0JdXNidmlzaW9uLT5oYXZlX3R1bmVyID0gdXNidmlzaW9uX2RldmljZV9kYXRhW21vZGVsXS5UdW5lcjsKLQlpZiAodXNidmlzaW9uLT5oYXZlX3R1bmVyKSB7Ci0JCXVzYnZpc2lvbi0+dHVuZXJfdHlwZSA9IHVzYnZpc2lvbl9kZXZpY2VfZGF0YVttb2RlbF0uVHVuZXJUeXBlOwotCX0KKwl1c2J2aXNpb24tPmhhdmVfdHVuZXIgPSB1c2J2aXNpb25fZGV2aWNlX2RhdGFbbW9kZWxdLnR1bmVyOworCWlmICh1c2J2aXNpb24tPmhhdmVfdHVuZXIpCisJCXVzYnZpc2lvbi0+dHVuZXJfdHlwZSA9IHVzYnZpc2lvbl9kZXZpY2VfZGF0YVttb2RlbF0udHVuZXJfdHlwZTsKIAotCXVzYnZpc2lvbi0+RGV2TW9kZWwgPSBtb2RlbDsKKwl1c2J2aXNpb24tPmRldl9tb2RlbCA9IG1vZGVsOwogCXVzYnZpc2lvbi0+cmVtb3ZlX3BlbmRpbmcgPSAwOwogCXVzYnZpc2lvbi0+aWZhY2UgPSBpZm51bTsKLQl1c2J2aXNpb24tPmlmYWNlQWx0ID0gMDsKKwl1c2J2aXNpb24tPmlmYWNlX2FsdCA9IDA7CiAJdXNidmlzaW9uLT52aWRlb19lbmRwID0gZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3M7Ci0JdXNidmlzaW9uLT5pc29jUGFja2V0U2l6ZSA9IDA7CisJdXNidmlzaW9uLT5pc29jX3BhY2tldF9zaXplID0gMDsKIAl1c2J2aXNpb24tPnVzYl9iYW5kd2lkdGggPSAwOwogCXVzYnZpc2lvbi0+dXNlciA9IDA7Ci0JdXNidmlzaW9uLT5zdHJlYW1pbmcgPSBTdHJlYW1fT2ZmOworCXVzYnZpc2lvbi0+c3RyZWFtaW5nID0gc3RyZWFtX29mZjsKIAl1c2J2aXNpb25fY29uZmlndXJlX3ZpZGVvKHVzYnZpc2lvbik7CiAJdXNidmlzaW9uX3JlZ2lzdGVyX3ZpZGVvKHVzYnZpc2lvbik7Ci0JbXV0ZXhfdW5sb2NrKCZ1c2J2aXNpb24tPmxvY2spOwogCiAJdXNidmlzaW9uX2NyZWF0ZV9zeXNmcyh1c2J2aXNpb24tPnZkZXYpOwogCkBAIC0xNjcyLDkgKzE2MDUsOSBAQAogCQlyZXR1cm47CiAJfQogCi0JbXV0ZXhfbG9jaygmdXNidmlzaW9uLT5sb2NrKTsKKwltdXRleF9sb2NrKCZ1c2J2aXNpb24tPnY0bDJfbG9jayk7CiAKLQkvLyBBdCB0aGlzIHRpbWUgd2UgYXNrIHRvIGNhbmNlbCBvdXRzdGFuZGluZyBVUkJzCisJLyogQXQgdGhpcyB0aW1lIHdlIGFzayB0byBjYW5jZWwgb3V0c3RhbmRpbmcgVVJCcyAqLwogCXVzYnZpc2lvbl9zdG9wX2lzb2ModXNidmlzaW9uKTsKIAogCXY0bDJfZGV2aWNlX2Rpc2Nvbm5lY3QoJnVzYnZpc2lvbi0+djRsMl9kZXYpOwpAQCAtMTY4MywxMiArMTYxNiwxMiBAQAogCQl1c2J2aXNpb25faTJjX3VucmVnaXN0ZXIodXNidmlzaW9uKTsKIAkJdXNidmlzaW9uX3Bvd2VyX29mZih1c2J2aXNpb24pOwogCX0KLQl1c2J2aXNpb24tPnJlbW92ZV9wZW5kaW5nID0gMTsJLy8gTm93IGFsbCBJU08gZGF0YSB3aWxsIGJlIGlnbm9yZWQKKwl1c2J2aXNpb24tPnJlbW92ZV9wZW5kaW5nID0gMTsJLyogTm93IGFsbCBJU08gZGF0YSB3aWxsIGJlIGlnbm9yZWQgKi8KIAogCXVzYl9wdXRfZGV2KHVzYnZpc2lvbi0+ZGV2KTsKLQl1c2J2aXNpb24tPmRldiA9IE5VTEw7CS8vIFVTQiBkZXZpY2UgaXMgbm8gbW9yZQorCXVzYnZpc2lvbi0+ZGV2ID0gTlVMTDsJLyogVVNCIGRldmljZSBpcyBubyBtb3JlICovCiAKLQltdXRleF91bmxvY2soJnVzYnZpc2lvbi0+bG9jayk7CisJbXV0ZXhfdW5sb2NrKCZ1c2J2aXNpb24tPnY0bDJfbG9jayk7CiAKIAlpZiAodXNidmlzaW9uLT51c2VyKSB7CiAJCXByaW50ayhLRVJOX0lORk8gIiVzOiBJbiB1c2UsIGRpc2Nvbm5lY3QgcGVuZGluZ1xuIiwKQEAgLTE3MTcsNyArMTY1MCw3IEBACiAgKi8KIHN0YXRpYyBpbnQgX19pbml0IHVzYnZpc2lvbl9pbml0KHZvaWQpCiB7Ci0JaW50IGVyckNvZGU7CisJaW50IGVycl9jb2RlOwogCiAJUERFQlVHKERCR19QUk9CRSwgIiIpOwogCkBAIC0xNzI2LDI3ICsxNjU5LDI3IEBACiAJUERFQlVHKERCR19NTUFQLCAiTU1BUCAgICBkZWJ1Z2dpbmcgaXMgZW5hYmxlZCBbdmlkZW9dIik7CiAKIAkvKiBkaXNhYmxlIHBsYW5hciBtb2RlIHN1cHBvcnQgdW5sZXNzIGNvbXByZXNzaW9uIGVuYWJsZWQgKi8KLQlpZiAoaXNvY01vZGUgIT0gSVNPQ19NT0RFX0NPTVBSRVNTICkgewotCQkvLyBGSVhNRSA6IG5vdCB0aGUgcmlnaHQgd2F5IHRvIHNldCBzdXBwb3J0ZWQgZmxhZwotCQl1c2J2aXNpb25fdjRsMl9mb3JtYXRbNl0uc3VwcG9ydGVkID0gMDsgLy8gVjRMMl9QSVhfRk1UX1lWVTQyMAotCQl1c2J2aXNpb25fdjRsMl9mb3JtYXRbN10uc3VwcG9ydGVkID0gMDsgLy8gVjRMMl9QSVhfRk1UX1lVVjQyMlAKKwlpZiAoaXNvY19tb2RlICE9IElTT0NfTU9ERV9DT01QUkVTUykgeworCQkvKiBGSVhNRSA6IG5vdCB0aGUgcmlnaHQgd2F5IHRvIHNldCBzdXBwb3J0ZWQgZmxhZyAqLworCQl1c2J2aXNpb25fdjRsMl9mb3JtYXRbNl0uc3VwcG9ydGVkID0gMDsgLyogVjRMMl9QSVhfRk1UX1lWVTQyMCAqLworCQl1c2J2aXNpb25fdjRsMl9mb3JtYXRbN10uc3VwcG9ydGVkID0gMDsgLyogVjRMMl9QSVhfRk1UX1lVVjQyMlAgKi8KIAl9CiAKLQllcnJDb2RlID0gdXNiX3JlZ2lzdGVyKCZ1c2J2aXNpb25fZHJpdmVyKTsKKwllcnJfY29kZSA9IHVzYl9yZWdpc3RlcigmdXNidmlzaW9uX2RyaXZlcik7CiAKLQlpZiAoZXJyQ29kZSA9PSAwKSB7CisJaWYgKGVycl9jb2RlID09IDApIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyBEUklWRVJfREVTQyAiIDogIiBVU0JWSVNJT05fVkVSU0lPTl9TVFJJTkcgIlxuIik7CiAJCVBERUJVRyhEQkdfUFJPQkUsICJzdWNjZXNzIik7CiAJfQotCXJldHVybiBlcnJDb2RlOworCXJldHVybiBlcnJfY29kZTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHVzYnZpc2lvbl9leGl0KHZvaWQpCiB7Ci0gUERFQlVHKERCR19QUk9CRSwgIiIpOworCVBERUJVRyhEQkdfUFJPQkUsICIiKTsKIAotIHVzYl9kZXJlZ2lzdGVyKCZ1c2J2aXNpb25fZHJpdmVyKTsKLSBQREVCVUcoREJHX1BST0JFLCAic3VjY2VzcyIpOworCXVzYl9kZXJlZ2lzdGVyKCZ1c2J2aXNpb25fZHJpdmVyKTsKKwlQREVCVUcoREJHX1BST0JFLCAic3VjY2VzcyIpOwogfQogCiBtb2R1bGVfaW5pdCh1c2J2aXNpb25faW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi91c2J2aXNpb24uaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi5oCmluZGV4IGNjNGU5NmMuLjgwNzQ3ODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi5oCkBAIC0xMzIsMTUgKzEzMiwxNSBAQAogI2RlZmluZSBNQVhfQllURVNfUEVSX1BJWEVMCQk0CiAKICNkZWZpbmUgTUlOX0ZSQU1FX1dJRFRICQkJNjQKLSNkZWZpbmUgTUFYX1VTQl9XSURUSAkJCTMyMCAgLy8zODQKLSNkZWZpbmUgTUFYX0ZSQU1FX1dJRFRICQkJMzIwICAvLzM4NAkJCS8qc3RyZWNoaW5nIHNvbWV0aW1lcyBjYXVzZXMgY3Jhc2hlcyovCisjZGVmaW5lIE1BWF9VU0JfV0lEVEgJCQkzMjAgIC8qIDM4NCAqLworI2RlZmluZSBNQVhfRlJBTUVfV0lEVEgJCQkzMjAgIC8qIDM4NCAqLwkJCS8qIHN0cmVjaGluZyBzb21ldGltZXMgY2F1c2VzIGNyYXNoZXMqLwogCiAjZGVmaW5lIE1JTl9GUkFNRV9IRUlHSFQJCTQ4Ci0jZGVmaW5lIE1BWF9VU0JfSEVJR0hUCQkJMjQwICAvLzI4OAotI2RlZmluZSBNQVhfRlJBTUVfSEVJR0hUCQkyNDAgIC8vMjg4CQkJLypTdHJlY2hpbmcgc29tZXRpbWVzIGNhdXNlcyBjcmFzaGVzKi8KKyNkZWZpbmUgTUFYX1VTQl9IRUlHSFQJCQkyNDAgIC8qIDI4OCAqLworI2RlZmluZSBNQVhfRlJBTUVfSEVJR0hUCQkyNDAgIC8qIDI4OCAqLwkJCS8qIFN0cmVjaGluZyBzb21ldGltZXMgY2F1c2VzIGNyYXNoZXMqLwogCi0jZGVmaW5lIE1BWF9GUkFNRV9TSVpFICAgICAJCShNQVhfRlJBTUVfV0lEVEggKiBNQVhfRlJBTUVfSEVJR0hUICogTUFYX0JZVEVTX1BFUl9QSVhFTCkKLSNkZWZpbmUgVVNCVklTSU9OX0NMSVBNQVNLX1NJWkUJCShNQVhfRlJBTUVfV0lEVEggKiBNQVhfRlJBTUVfSEVJR0hUIC8gOCkgLy9ieXRlc2l6ZSBvZiBjbGlwbWFzaworI2RlZmluZSBNQVhfRlJBTUVfU0laRQkJCShNQVhfRlJBTUVfV0lEVEggKiBNQVhfRlJBTUVfSEVJR0hUICogTUFYX0JZVEVTX1BFUl9QSVhFTCkKKyNkZWZpbmUgVVNCVklTSU9OX0NMSVBNQVNLX1NJWkUJCShNQVhfRlJBTUVfV0lEVEggKiBNQVhfRlJBTUVfSEVJR0hUIC8gOCkgLyogYnl0ZXNpemUgb2YgY2xpcG1hc2sgKi8KIAogI2RlZmluZSBVU0JWSVNJT05fVVJCX0ZSQU1FUwkJMzIKIApAQCAtMTQ4LDcgKzE0OCw3IEBACiAjZGVmaW5lIFVTQlZJU0lPTl9OVU1GUkFNRVMJCTMgIC8qIE1heGltdW0gbnVtYmVyIG9mIGZyYW1lcyBhbiBhcHBsaWNhdGlvbiBjYW4gZ2V0ICovCiAjZGVmaW5lIFVTQlZJU0lPTl9OVU1TQlVGCQkyIC8qIERpbWVuc2lvbmluZyB0aGUgVVNCIFMgYnVmZmVyaW5nICovCiAKLSNkZWZpbmUgVVNCVklTSU9OX1BPV0VST0ZGX1RJTUUJCTMgKiAoSFopCQkvLyAzIHNlY29uZHMKKyNkZWZpbmUgVVNCVklTSU9OX1BPV0VST0ZGX1RJTUUJCSgzICogSFopCQkvKiAzIHNlY29uZHMgKi8KIAogCiAjZGVmaW5lIEZSQU1FUkFURV9NSU4JMApAQCAtMTYxLDcgKzE2MSw4IEBACiB9OwogCiAvKiBUaGlzIG1hY3JvIHJlc3RyaWN0cyBhbiBpbnQgdmFyaWFibGUgdG8gYW4gaW5jbHVzaXZlIHJhbmdlICovCi0jZGVmaW5lIFJFU1RSSUNUX1RPX1JBTkdFKHYsbWksbWEpIHsgaWYgKCh2KSA8IChtaSkpICh2KSA9IChtaSk7IGVsc2UgaWYgKCh2KSA+IChtYSkpICh2KSA9IChtYSk7IH0KKyNkZWZpbmUgUkVTVFJJQ1RfVE9fUkFOR0UodiwgbWksIG1hKSBcCisJeyBpZiAoKHYpIDwgKG1pKSkgKHYpID0gKG1pKTsgZWxzZSBpZiAoKHYpID4gKG1hKSkgKHYpID0gKG1hKTsgfQogCiAvKgogICogV2UgdXNlIG1hY3JvcyB0byBkbyBZVVYgLT4gUkdCIGNvbnZlcnNpb24gYmVjYXVzZSB0aGlzIGlzCkBAIC0xODMsMTggKzE4NCwxOCBAQAogICogTWFrZSBzdXJlIHRoZSBvdXRwdXQgdmFsdWVzIGFyZSB3aXRoaW4gWzAuLjI1NV0gcmFuZ2UuCiAgKi8KICNkZWZpbmUgTElNSVRfUkdCKHgpICgoKHgpIDwgMCkgPyAwIDogKCgoeCkgPiAyNTUpID8gMjU1IDogKHgpKSkKLSNkZWZpbmUgWVVWX1RPX1JHQl9CWV9USEVfQk9PSyhteSxtdSxtdixtcixtZyxtYikgeyBcCi0gICAgaW50IG1tX3ksIG1tX3ljLCBtbV91LCBtbV92LCBtbV9yLCBtbV9nLCBtbV9iOyBcCi0gICAgbW1feSA9IChteSkgLSAxNjsgIFwKLSAgICBtbV91ID0gKG11KSAtIDEyODsgXAotICAgIG1tX3YgPSAobXYpIC0gMTI4OyBcCi0gICAgbW1feWM9IG1tX3kgKiA3NjI4NDsgXAotICAgIG1tX2IgPSAobW1feWMJCSsgMTMyMjUyKm1tX3YJKSA+PiAxNjsgXAotICAgIG1tX2cgPSAobW1feWMgLSAgNTMyODEqbW1fdSAtICAyNTYyNSptbV92CSkgPj4gMTY7IFwKLSAgICBtbV9yID0gKG1tX3ljICsgMTA0NTk1Km1tX3UJCQkpID4+IDE2OyBcCi0gICAgbWIgPSBMSU1JVF9SR0IobW1fYik7IFwKLSAgICBtZyA9IExJTUlUX1JHQihtbV9nKTsgXAotICAgIG1yID0gTElNSVRfUkdCKG1tX3IpOyBcCisjZGVmaW5lIFlVVl9UT19SR0JfQllfVEhFX0JPT0sobXksIG11LCBtdiwgbXIsIG1nLCBtYikgeyBcCisJaW50IG1tX3ksIG1tX3ljLCBtbV91LCBtbV92LCBtbV9yLCBtbV9nLCBtbV9iOyBcCisJbW1feSA9IChteSkgLSAxNjsgXAorCW1tX3UgPSAobXUpIC0gMTI4OyBcCisJbW1fdiA9IChtdikgLSAxMjg7IFwKKwltbV95YyA9IG1tX3kgKiA3NjI4NDsgXAorCW1tX2IgPSAobW1feWMgKyAxMzIyNTIgKiBtbV92KSA+PiAxNjsgXAorCW1tX2cgPSAobW1feWMgLSA1MzI4MSAqIG1tX3UgLSAyNTYyNSAqIG1tX3YpID4+IDE2OyBcCisJbW1fciA9IChtbV95YyArIDEwNDU5NSAqIG1tX3UpID4+IDE2OyBcCisJbWIgPSBMSU1JVF9SR0IobW1fYik7IFwKKwltZyA9IExJTUlUX1JHQihtbV9nKTsgXAorCW1yID0gTElNSVRfUkdCKG1tX3IpOyBcCiB9CiAKIC8qIERlYnVnZ2luZyBhaWQgKi8KQEAgLTIwMiw3ICsyMDMsNyBAQAogCXdhaXRfcXVldWVfaGVhZF90IHdxOyBcCiAJaW5pdF93YWl0cXVldWVfaGVhZCgmd3EpOyBcCiAJcHJpbnRrKEtFUk5fSU5GTyAiU2F5OiAlc1xuIiwgd2hhdCk7IFwKLQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uX3RpbWVvdXQgKCZ3cSwgSFoqMyk7IFwKKwlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uX3RpbWVvdXQoJndxLCBIWiAqIDMpOyBcCiB9CiAKIC8qCkBAIC0yMjMsMzkgKzIyNCwzOSBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIHVzYnZpc2lvbiB2aWRlbyBzdHJ1Y3R1cmVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotZW51bSBTY2FuU3RhdGUgewotCVNjYW5TdGF0ZV9TY2FubmluZywJLyogU2Nhbm5pbmcgZm9yIGhlYWRlciAqLwotCVNjYW5TdGF0ZV9MaW5lcwkJLyogUGFyc2luZyBsaW5lcyAqLworZW51bSBzY2FuX3N0YXRlIHsKKwlzY2FuX3N0YXRlX3NjYW5uaW5nLAkvKiBTY2FubmluZyBmb3IgaGVhZGVyICovCisJc2Nhbl9zdGF0ZV9saW5lcwkvKiBQYXJzaW5nIGxpbmVzICovCiB9OwogCiAvKiBDb21wbGV0aW9uIHN0YXRlcyBvZiB0aGUgZGF0YSBwYXJzZXIgKi8KLWVudW0gUGFyc2VTdGF0ZSB7Ci0JUGFyc2VTdGF0ZV9Db250aW51ZSwJLyogSnVzdCBwYXJzZSBuZXh0IGl0ZW0gKi8KLQlQYXJzZVN0YXRlX05leHRGcmFtZSwJLyogRnJhbWUgZG9uZSwgc2VuZCBpdCB0byBWNEwgKi8KLQlQYXJzZVN0YXRlX091dCwJCS8qIE5vdCBlbm91Z2ggZGF0YSBmb3IgZnJhbWUgKi8KLQlQYXJzZVN0YXRlX0VuZFBhcnNlCS8qIEVuZCBwYXJzaW5nICovCitlbnVtIHBhcnNlX3N0YXRlIHsKKwlwYXJzZV9zdGF0ZV9jb250aW51ZSwJLyogSnVzdCBwYXJzZSBuZXh0IGl0ZW0gKi8KKwlwYXJzZV9zdGF0ZV9uZXh0X2ZyYW1lLAkvKiBGcmFtZSBkb25lLCBzZW5kIGl0IHRvIFY0TCAqLworCXBhcnNlX3N0YXRlX291dCwJLyogTm90IGVub3VnaCBkYXRhIGZvciBmcmFtZSAqLworCXBhcnNlX3N0YXRlX2VuZF9wYXJzZQkvKiBFbmQgcGFyc2luZyAqLwogfTsKIAotZW51bSBGcmFtZVN0YXRlIHsKLQlGcmFtZVN0YXRlX1VudXNlZCwJLyogVW51c2VkIChubyBNQ0FQVFVSRSkgKi8KLQlGcmFtZVN0YXRlX1JlYWR5LAkvKiBSZWFkeSB0byBzdGFydCBncmFiYmluZyAqLwotCUZyYW1lU3RhdGVfR3JhYmJpbmcsCS8qIEluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIGdyYWJiZWQgaW50byAqLwotCUZyYW1lU3RhdGVfRG9uZSwJLyogRmluaXNoZWQgZ3JhYmJpbmcsIGJ1dCBub3QgYmVlbiBzeW5jZWQgeWV0ICovCi0JRnJhbWVTdGF0ZV9Eb25lSG9sZCwJLyogQXJlIHN5bmNpbmcgb3IgcmVhZGluZyAqLwotCUZyYW1lU3RhdGVfRXJyb3IsCS8qIFNvbWV0aGluZyBiYWQgaGFwcGVuZWQgd2hpbGUgcHJvY2Vzc2luZyAqLworZW51bSBmcmFtZV9zdGF0ZSB7CisJZnJhbWVfc3RhdGVfdW51c2VkLAkvKiBVbnVzZWQgKG5vIE1DQVBUVVJFKSAqLworCWZyYW1lX3N0YXRlX3JlYWR5LAkvKiBSZWFkeSB0byBzdGFydCBncmFiYmluZyAqLworCWZyYW1lX3N0YXRlX2dyYWJiaW5nLAkvKiBJbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBncmFiYmVkIGludG8gKi8KKwlmcmFtZV9zdGF0ZV9kb25lLAkvKiBGaW5pc2hlZCBncmFiYmluZywgYnV0IG5vdCBiZWVuIHN5bmNlZCB5ZXQgKi8KKwlmcmFtZV9zdGF0ZV9kb25lX2hvbGQsCS8qIEFyZSBzeW5jaW5nIG9yIHJlYWRpbmcgKi8KKwlmcmFtZV9zdGF0ZV9lcnJvciwJLyogU29tZXRoaW5nIGJhZCBoYXBwZW5lZCB3aGlsZSBwcm9jZXNzaW5nICovCiB9OwogCiAvKiBzdHJlYW0gc3RhdGVzICovCi1lbnVtIFN0cmVhbVN0YXRlIHsKLQlTdHJlYW1fT2ZmLAkJLyogRHJpdmVyIHN0cmVhbWluZyBpcyBjb21wbGV0ZWx5IE9GRiAqLwotCVN0cmVhbV9JZGxlLAkJLyogRHJpdmVyIHN0cmVhbWluZyBpcyByZWFkeSB0byBiZSBwdXQgT04gYnkgdGhlIGFwcGxpY2F0aW9uICovCi0JU3RyZWFtX0ludGVycnVwdCwJLyogRHJpdmVyIHN0cmVhbWluZyBtdXN0IGJlIGludGVycnVwdGVkICovCi0JU3RyZWFtX09uLAkJLyogRHJpdmVyIHN0cmVhbWluZyBpcyBwdXQgT04gYnkgdGhlIGFwcGxpY2F0aW9uICovCitlbnVtIHN0cmVhbV9zdGF0ZSB7CisJc3RyZWFtX29mZiwJCS8qIERyaXZlciBzdHJlYW1pbmcgaXMgY29tcGxldGVseSBPRkYgKi8KKwlzdHJlYW1faWRsZSwJCS8qIERyaXZlciBzdHJlYW1pbmcgaXMgcmVhZHkgdG8gYmUgcHV0IE9OIGJ5IHRoZSBhcHBsaWNhdGlvbiAqLworCXN0cmVhbV9pbnRlcnJ1cHQsCS8qIERyaXZlciBzdHJlYW1pbmcgbXVzdCBiZSBpbnRlcnJ1cHRlZCAqLworCXN0cmVhbV9vbiwJCS8qIERyaXZlciBzdHJlYW1pbmcgaXMgcHV0IE9OIGJ5IHRoZSBhcHBsaWNhdGlvbiAqLwogfTsKIAotZW51bSBJc29jU3RhdGUgewotCUlzb2NTdGF0ZV9JbkZyYW1lLAkvKiBJc29jIHBhY2tldCBpcyBtZW1iZXIgb2YgZnJhbWUgKi8KLQlJc29jU3RhdGVfTm9GcmFtZSwJLyogSXNvYyBwYWNrZXQgaXMgbm90IG1lbWJlciBvZiBhbnkgZnJhbWUgKi8KK2VudW0gaXNvY19zdGF0ZSB7CisJaXNvY19zdGF0ZV9pbl9mcmFtZSwJLyogSXNvYyBwYWNrZXQgaXMgbWVtYmVyIG9mIGZyYW1lICovCisJaXNvY19zdGF0ZV9ub19mcmFtZSwJLyogSXNvYyBwYWNrZXQgaXMgbm90IG1lbWJlciBvZiBhbnkgZnJhbWUgKi8KIH07CiAKIHN0cnVjdCB1c2JfZGV2aWNlOwpAQCAtMjY1LDggKzI2Niw4IEBACiAJc3RydWN0IHVyYiAqdXJiOwogfTsKIAotI2RlZmluZSBVU0JWSVNJT05fTUFHSUNfMSAgICAgIAkJCTB4NTUKLSNkZWZpbmUgVVNCVklTSU9OX01BR0lDXzIgICAgICAJCQkweEFBCisjZGVmaW5lIFVTQlZJU0lPTl9NQUdJQ18xCQkJMHg1NQorI2RlZmluZSBVU0JWSVNJT05fTUFHSUNfMgkJCTB4QUEKICNkZWZpbmUgVVNCVklTSU9OX0hFQURFUl9MRU5HVEgJCQkweDBjCiAjZGVmaW5lIFVTQlZJU0lPTl9TQUE3MTExX0FERFIJCQkweDQ4CiAjZGVmaW5lIFVTQlZJU0lPTl9TQUE3MTEzX0FERFIJCQkweDRhCkBAIC0yODYsMjMgKzI4NywyMyBAQAogc3RydWN0IHVzYnZpc2lvbl9mcmFtZV9oZWFkZXIgewogCXVuc2lnbmVkIGNoYXIgbWFnaWNfMTsJCQkJLyogMCBtYWdpYyAqLwogCXVuc2lnbmVkIGNoYXIgbWFnaWNfMjsJCQkJLyogMSAgbWFnaWMgKi8KLQl1bnNpZ25lZCBjaGFyIGhlYWRlckxlbmd0aDsJCQkvKiAyICovCi0JdW5zaWduZWQgY2hhciBmcmFtZU51bTsJCQkJLyogMyAqLwotCXVuc2lnbmVkIGNoYXIgZnJhbWVQaGFzZTsJCQkvKiA0ICovCi0JdW5zaWduZWQgY2hhciBmcmFtZUxhdGVuY3k7CQkJLyogNSAqLwotCXVuc2lnbmVkIGNoYXIgZGF0YUZvcm1hdDsJCQkvKiA2ICovCi0JdW5zaWduZWQgY2hhciBmb3JtYXRQYXJhbTsJCQkvKiA3ICovCi0JdW5zaWduZWQgY2hhciBmcmFtZVdpZHRoTG87CQkJLyogOCAqLwotCXVuc2lnbmVkIGNoYXIgZnJhbWVXaWR0aEhpOwkJCS8qIDkgKi8KLQl1bnNpZ25lZCBjaGFyIGZyYW1lSGVpZ2h0TG87CQkJLyogMTAgKi8KLQl1bnNpZ25lZCBjaGFyIGZyYW1lSGVpZ2h0SGk7CQkJLyogMTEgKi8KLQlfX3UxNiBmcmFtZVdpZHRoOwkJCQkvKiA4IC0gOSBhZnRlciBlbmRpYW4gY29ycmVjdGlvbiovCi0JX191MTYgZnJhbWVIZWlnaHQ7CQkJCS8qIDEwIC0gMTEgYWZ0ZXIgZW5kaWFuIGNvcnJlY3Rpb24qLworCXVuc2lnbmVkIGNoYXIgaGVhZGVyX2xlbmd0aDsJCQkvKiAyICovCisJdW5zaWduZWQgY2hhciBmcmFtZV9udW07CQkJLyogMyAqLworCXVuc2lnbmVkIGNoYXIgZnJhbWVfcGhhc2U7CQkJLyogNCAqLworCXVuc2lnbmVkIGNoYXIgZnJhbWVfbGF0ZW5jeTsJCQkvKiA1ICovCisJdW5zaWduZWQgY2hhciBkYXRhX2Zvcm1hdDsJCQkvKiA2ICovCisJdW5zaWduZWQgY2hhciBmb3JtYXRfcGFyYW07CQkJLyogNyAqLworCXVuc2lnbmVkIGNoYXIgZnJhbWVfd2lkdGhfbG87CQkJLyogOCAqLworCXVuc2lnbmVkIGNoYXIgZnJhbWVfd2lkdGhfaGk7CQkJLyogOSAqLworCXVuc2lnbmVkIGNoYXIgZnJhbWVfaGVpZ2h0X2xvOwkJCS8qIDEwICovCisJdW5zaWduZWQgY2hhciBmcmFtZV9oZWlnaHRfaGk7CQkJLyogMTEgKi8KKwlfX3UxNiBmcmFtZV93aWR0aDsJCQkJLyogOCAtIDkgYWZ0ZXIgZW5kaWFuIGNvcnJlY3Rpb24qLworCV9fdTE2IGZyYW1lX2hlaWdodDsJCQkJLyogMTAgLSAxMSBhZnRlciBlbmRpYW4gY29ycmVjdGlvbiovCiB9OwogCiBzdHJ1Y3QgdXNidmlzaW9uX2ZyYW1lIHsKIAljaGFyICpkYXRhOwkJCQkJLyogRnJhbWUgYnVmZmVyICovCi0Jc3RydWN0IHVzYnZpc2lvbl9mcmFtZV9oZWFkZXIgaXNvY0hlYWRlcjsJLyogSGVhZGVyIGZyb20gc3RyZWFtICovCisJc3RydWN0IHVzYnZpc2lvbl9mcmFtZV9oZWFkZXIgaXNvY19oZWFkZXI7CS8qIEhlYWRlciBmcm9tIHN0cmVhbSAqLwogCiAJaW50IHdpZHRoOwkJCQkJLyogV2lkdGggYXBwbGljYXRpb24gaXMgZXhwZWN0aW5nICovCiAJaW50IGhlaWdodDsJCQkJCS8qIEhlaWdodCAqLwpAQCAtMzIyLDcgKzMyMyw3IEBACiAJc3RydWN0IHVzYnZpc2lvbl92NGwyX2Zvcm1hdF9zdCB2NGwyX2Zvcm1hdDsJLyogZm9ybWF0IHRoZSB1c2VyIG5lZWRzKi8KIAlpbnQgdjRsMl9saW5lc2l6ZTsJCQkJLyogYnl0ZXMgZm9yIG9uZSB2aWRlb2xpbmUqLwogCXN0cnVjdCB0aW1ldmFsIHRpbWVzdGFtcDsKLQlpbnQgc2VxdWVuY2U7CQkJCQkvLyBIb3cgbWFueSB2aWRlbyBmcmFtZXMgd2Ugc2VuZCB0byB1c2VyCisJaW50IHNlcXVlbmNlOwkJCQkJLyogSG93IG1hbnkgdmlkZW8gZnJhbWVzIHdlIHNlbmQgdG8gdXNlciAqLwogfTsKIAogI2RlZmluZSBDT0RFQ19TQUE3MTEzCTcxMTMKQEAgLTMzMiwyNCArMzMzLDI0IEBACiAjZGVmaW5lIEJSSURHRV9OVDEwMDUgICAxMDA1CiAKIHN0cnVjdCB1c2J2aXNpb25fZGV2aWNlX2RhdGFfc3QgewotCV9fdTY0IFZpZGVvTm9ybTsKLQljb25zdCBjaGFyICpNb2RlbFN0cmluZzsKLQlpbnQgSW50ZXJmYWNlOyAvKiB0byBoYW5kbGUgc3BlY2lhbCBpbnRlcmZhY2UgbnVtYmVyIGxpa2UgQkVMS0lOIGFuZCBIYXVwcGF1Z2UgV2luVFYtVVNCIElJICovCi0JX191MTYgQ29kZWM7Ci0JdW5zaWduZWQgVmlkZW9DaGFubmVsczozOwotCXVuc2lnbmVkIEF1ZGlvQ2hhbm5lbHM6MjsKLQl1bnNpZ25lZCBSYWRpbzoxOworCV9fdTY0IHZpZGVvX25vcm07CisJY29uc3QgY2hhciAqbW9kZWxfc3RyaW5nOworCWludCBpbnRlcmZhY2U7IC8qIHRvIGhhbmRsZSBzcGVjaWFsIGludGVyZmFjZSBudW1iZXIgbGlrZSBCRUxLSU4gYW5kIEhhdXBwYXVnZSBXaW5UVi1VU0IgSUkgKi8KKwlfX3UxNiBjb2RlYzsKKwl1bnNpZ25lZCB2aWRlb19jaGFubmVsczozOworCXVuc2lnbmVkIGF1ZGlvX2NoYW5uZWxzOjI7CisJdW5zaWduZWQgcmFkaW86MTsKIAl1bnNpZ25lZCB2Ymk6MTsKLQl1bnNpZ25lZCBUdW5lcjoxOwotCXVuc2lnbmVkIFZpbl9SZWcxX292ZXJyaWRlOjE7CS8qIE92ZXJyaWRlIGRlZmF1bHQgdmFsdWUgd2l0aCAqLwotCXVuc2lnbmVkIFZpbl9SZWcyX292ZXJyaWRlOjE7ICAgLyogVmluX1JlZzEsIFZpbl9SZWcyLCBldGMuICovCi0JdW5zaWduZWQgRHZpX3l1dl9vdmVycmlkZToxOwotCV9fdTggVmluX1JlZzE7Ci0JX191OCBWaW5fUmVnMjsKLQlfX3U4IER2aV95dXY7Ci0JX191OCBUdW5lclR5cGU7Ci0JX19zMTYgWF9PZmZzZXQ7Ci0JX19zMTYgWV9PZmZzZXQ7CisJdW5zaWduZWQgdHVuZXI6MTsKKwl1bnNpZ25lZCB2aW5fcmVnMV9vdmVycmlkZToxOwkvKiBPdmVycmlkZSBkZWZhdWx0IHZhbHVlIHdpdGggKi8KKwl1bnNpZ25lZCB2aW5fcmVnMl9vdmVycmlkZToxOyAgIC8qIHZpbl9yZWcxLCB2aW5fcmVnMiwgZXRjLiAqLworCXVuc2lnbmVkIGR2aV95dXZfb3ZlcnJpZGU6MTsKKwlfX3U4IHZpbl9yZWcxOworCV9fdTggdmluX3JlZzI7CisJX191OCBkdmlfeXV2OworCV9fdTggdHVuZXJfdHlwZTsKKwlfX3MxNiB4X29mZnNldDsKKwlfX3MxNiB5X29mZnNldDsKIH07CiAKIC8qIERlY2xhcmVkIG9uIHVzYnZpc2lvbi1jYXJkcy5jICovCkBAIC0zNTgsNTAgKzM1OSw1MCBAQAogCiBzdHJ1Y3QgdXNiX3VzYnZpc2lvbiB7CiAJc3RydWN0IHY0bDJfZGV2aWNlIHY0bDJfZGV2OwotCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXY7ICAgICAgICAgCQkJCS8qIFZpZGVvIERldmljZSAqLwotCXN0cnVjdCB2aWRlb19kZXZpY2UgKnJkZXY7ICAgICAgICAgICAgICAgCQkJLyogUmFkaW8gRGV2aWNlICovCisJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldjsJCQkJCS8qIFZpZGVvIERldmljZSAqLworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnJkZXY7CQkJCQkvKiBSYWRpbyBEZXZpY2UgKi8KIAogCS8qIGkyYyBEZWNsYXJhdGlvbiBTZWN0aW9uKi8KIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIgaTJjX2FkYXA7CiAJaW50IHJlZ2lzdGVyZWRfaTJjOwogCi0Jc3RydWN0IHVyYiAqY3RybFVyYjsKLQl1bnNpZ25lZCBjaGFyIGN0cmxVcmJCdWZmZXJbOF07Ci0JaW50IGN0cmxVcmJCdXN5OwotCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgY3RybFVyYlNldHVwOwotCXdhaXRfcXVldWVfaGVhZF90IGN0cmxVcmJfd3E7CQkJCQkvLyBQcm9jZXNzZXMgd2FpdGluZworCXN0cnVjdCB1cmIgKmN0cmxfdXJiOworCXVuc2lnbmVkIGNoYXIgY3RybF91cmJfYnVmZmVyWzhdOworCWludCBjdHJsX3VyYl9idXN5OworCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgY3RybF91cmJfc2V0dXA7CisJd2FpdF9xdWV1ZV9oZWFkX3QgY3RybF91cmJfd3E7CQkJCQkvKiBQcm9jZXNzZXMgd2FpdGluZyAqLwogCiAJLyogY29uZmlndXJhdGlvbiBwYXJ0ICovCiAJaW50IGhhdmVfdHVuZXI7CiAJaW50IHR1bmVyX3R5cGU7Ci0JaW50IGJyaWRnZVR5cGU7CQkJCQkJCS8vIE5UMTAwMywgTlQxMDA0LCBOVDEwMDUKKwlpbnQgYnJpZGdlX3R5cGU7CQkJCQkJLyogTlQxMDAzLCBOVDEwMDQsIE5UMTAwNSAqLwogCWludCByYWRpbzsKLQlpbnQgdmlkZW9faW5wdXRzOwkJCQkJCS8vICMgb2YgaW5wdXRzCisJaW50IHZpZGVvX2lucHV0czsJCQkJCQkvKiAjIG9mIGlucHV0cyAqLwogCXVuc2lnbmVkIGxvbmcgZnJlcTsKLQlpbnQgQXVkaW9NdXRlOwotCWludCBBdWRpb0NoYW5uZWw7Ci0JaW50IGlzb2NNb2RlOwkJCQkJCQkvLyBmb3JtYXQgb2YgdmlkZW8gZGF0YSBmb3IgdGhlIHVzYiBpc29jLXRyYW5zZmVyCi0JdW5zaWduZWQgaW50IG5yOwkJCQkJCS8vIE51bWJlciBvZiB0aGUgZGV2aWNlCisJaW50IGF1ZGlvX211dGU7CisJaW50IGF1ZGlvX2NoYW5uZWw7CisJaW50IGlzb2NfbW9kZTsJCQkJCQkJLyogZm9ybWF0IG9mIHZpZGVvIGRhdGEgZm9yIHRoZSB1c2IgaXNvYy10cmFuc2ZlciAqLworCXVuc2lnbmVkIGludCBucjsJCQkJCQkvKiBOdW1iZXIgb2YgdGhlIGRldmljZSAqLwogCiAJLyogRGV2aWNlIHN0cnVjdHVyZSAqLwogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXY7CiAJLyogdXNiIHRyYW5zZmVyICovCiAJaW50IG51bV9hbHQ7CQkvKiBOdW1iZXIgb2YgYWx0ZXJuYXRpdmUgc2V0dGluZ3MgKi8KLQl1bnNpZ25lZCBpbnQgKmFsdF9tYXhfcGt0X3NpemU7CS8qIGFycmF5IG9mIHdNYXhQYWNrZXRTaXplICovCisJdW5zaWduZWQgaW50ICphbHRfbWF4X3BrdF9zaXplOwkvKiBhcnJheSBvZiBtYXhfcGFja2V0X3NpemUgKi8KIAl1bnNpZ25lZCBjaGFyIGlmYWNlOwkJCQkJCS8qIFZpZGVvIGludGVyZmFjZSBudW1iZXIgKi8KLQl1bnNpZ25lZCBjaGFyIGlmYWNlQWx0OwkJCS8qIEFsdCBzZXR0aW5ncyAqLwotCXVuc2lnbmVkIGNoYXIgVmluX1JlZzJfUHJlc2V0OwotCXN0cnVjdCBtdXRleCAgICAgICAgICAgICAgIGxvY2s7Ci0Jc3RydWN0IHRpbWVyX2xpc3QgcG93ZXJPZmZUaW1lcjsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcG93ZXJPZmZXb3JrOworCXVuc2lnbmVkIGNoYXIgaWZhY2VfYWx0OwkJCQkJLyogQWx0IHNldHRpbmdzICovCisJdW5zaWduZWQgY2hhciB2aW5fcmVnMl9wcmVzZXQ7CisJc3RydWN0IG11dGV4IHY0bDJfbG9jazsKKwlzdHJ1Y3QgdGltZXJfbGlzdCBwb3dlcl9vZmZfdGltZXI7CisJc3RydWN0IHdvcmtfc3RydWN0IHBvd2VyX29mZl93b3JrOwogCWludCBwb3dlcjsJCQkJCQkJLyogaXMgdGhlIGRldmljZSBwb3dlcmVkIG9uPyAqLwogCWludCB1c2VyOwkJCQkJCQkvKiB1c2VyIGNvdW50IGZvciBleGNsdXNpdmUgdXNlICovCiAJaW50IGluaXRpYWxpemVkOwkJCQkJCS8qIEhhZCB3ZSBhbHJlYWR5IHNlbnQgaW5pdCBzZXF1ZW5jZT8gKi8KLQlpbnQgRGV2TW9kZWw7CQkJCQkJCS8qIFdoYXQgdHlwZSBvZiBVU0JWSVNJT04gZGV2aWNlIHdlIGdvdD8gKi8KLQllbnVtIFN0cmVhbVN0YXRlIHN0cmVhbWluZzsJCQkJCS8qIEFyZSB3ZSBzdHJlYW1pbmcgSXNvY2hyb25vdXM/ICovCisJaW50IGRldl9tb2RlbDsJCQkJCQkJLyogV2hhdCB0eXBlIG9mIFVTQlZJU0lPTiBkZXZpY2Ugd2UgZ290PyAqLworCWVudW0gc3RyZWFtX3N0YXRlIHN0cmVhbWluZzsJCQkJCS8qIEFyZSB3ZSBzdHJlYW1pbmcgSXNvY2hyb25vdXM/ICovCiAJaW50IGxhc3RfZXJyb3I7CQkJCQkJCS8qIFdoYXQgY2FsYW1pdHkgc3RydWNrIHVzPyAqLwogCWludCBjdXJ3aWR0aDsJCQkJCQkJLyogd2lkdGggb2YgdGhlIGZyYW1lIHRoZSBkZXZpY2UgaXMgY3VycmVudGx5IHNldCB0byovCi0JaW50IGN1cmhlaWdodDsgICAgICAJCQkJCQkvKiBoZWlnaHQgb2YgdGhlIGZyYW1lIHRoZSBkZXZpY2UgaXMgY3VycmVudGx5IHNldCB0byovCisJaW50IGN1cmhlaWdodDsJCQkJCQkJLyogaGVpZ2h0IG9mIHRoZSBmcmFtZSB0aGUgZGV2aWNlIGlzIGN1cnJlbnRseSBzZXQgdG8qLwogCWludCBzdHJldGNoX3dpZHRoOwkJCQkJCS8qIHN0cmV0Y2gtZmFjdG9yIGZvciBmcmFtZSB3aWR0aCAoZnJvbSB1c2IgdG8gc2NyZWVuKSovCiAJaW50IHN0cmV0Y2hfaGVpZ2h0OwkJCQkJCS8qIHN0cmV0Y2gtZmFjdG9yIGZvciBmcmFtZSBoZWlnaHQgKGZyb20gdXNiIHRvIHNjcmVlbikqLwogCWNoYXIgKmZidWY7CQkJCQkJCS8qIFZpZGVvZGV2IGJ1ZmZlciBhcmVhIGZvciBtbWFwKi8KQEAgLTQxMSwxMCArNDEyLDEwIEBACiAJc3RydWN0IGxpc3RfaGVhZCBpbnF1ZXVlLCBvdXRxdWV1ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHF1ZXVlZCBmcmFtZSBsaXN0IGFuZCByZWFkeSB0byBkZXF1ZXVlIGZyYW1lIGxpc3QgKi8KIAl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0X2ZyYW1lOwkJCQkJLyogUHJvY2Vzc2VzIHdhaXRpbmcgKi8KIAl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0X3N0cmVhbTsJCQkJCS8qIFByb2Nlc3NlcyB3YWl0aW5nICovCi0Jc3RydWN0IHVzYnZpc2lvbl9mcmFtZSAqY3VyRnJhbWU7CQkJCS8vIHBvaW50ZXIgdG8gY3VycmVudCBmcmFtZSwgc2V0IGJ5IHVzYnZpc2lvbl9maW5kX2hlYWRlcgotCXN0cnVjdCB1c2J2aXNpb25fZnJhbWUgZnJhbWVbVVNCVklTSU9OX05VTUZSQU1FU107CQkvLyBmcmFtZSBidWZmZXIKLQlpbnQgbnVtX2ZyYW1lczsJCQkJCQkJLy8gbnVtYmVyIG9mIGZyYW1lcyBhbGxvY2F0ZWQKLQlzdHJ1Y3QgdXNidmlzaW9uX3NidWYgc2J1ZltVU0JWSVNJT05fTlVNU0JVRl07CQkJLy8gUyBidWZmZXJpbmcKKwlzdHJ1Y3QgdXNidmlzaW9uX2ZyYW1lICpjdXJfZnJhbWU7CQkJCS8qIHBvaW50ZXIgdG8gY3VycmVudCBmcmFtZSwgc2V0IGJ5IHVzYnZpc2lvbl9maW5kX2hlYWRlciAqLworCXN0cnVjdCB1c2J2aXNpb25fZnJhbWUgZnJhbWVbVVNCVklTSU9OX05VTUZSQU1FU107CQkvKiBmcmFtZSBidWZmZXIgKi8KKwlpbnQgbnVtX2ZyYW1lczsJCQkJCQkJLyogbnVtYmVyIG9mIGZyYW1lcyBhbGxvY2F0ZWQgKi8KKwlzdHJ1Y3QgdXNidmlzaW9uX3NidWYgc2J1ZltVU0JWSVNJT05fTlVNU0JVRl07CQkJLyogUyBidWZmZXJpbmcgKi8KIAl2b2xhdGlsZSBpbnQgcmVtb3ZlX3BlbmRpbmc7CQkJCQkvKiBJZiBzZXQgdGhlbiBhYm91dCB0byBleGl0ICovCiAKIAkvKiBTY3JhdGNoIHNwYWNlIGZyb20gdGhlIElzb2Nocm9ub3VzIFBpcGUuKi8KQEAgLTQyNCw0MyArNDI1LDQzIEBACiAJaW50IHNjcmF0Y2hfaGVhZGVybWFya2VyW1VTQlZJU0lPTl9OVU1fSEVBREVSTUFSS0VSXTsKIAlpbnQgc2NyYXRjaF9oZWFkZXJtYXJrZXJfcmVhZF9wdHI7CiAJaW50IHNjcmF0Y2hfaGVhZGVybWFya2VyX3dyaXRlX3B0cjsKLQllbnVtIElzb2NTdGF0ZSBpc29jc3RhdGU7CisJZW51bSBpc29jX3N0YXRlIGlzb2NzdGF0ZTsKIAlzdHJ1Y3QgdXNidmlzaW9uX3Y0bDJfZm9ybWF0X3N0IHBhbGV0dGU7CiAKIAlzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5IHZjYXA7CQkJCQkvKiBWaWRlbyBjYXBhYmlsaXRpZXMgKi8KIAl1bnNpZ25lZCBpbnQgY3RsX2lucHV0OwkJCQkJCS8qIHNlbGVjdGVkIGlucHV0ICovCi0JdjRsMl9zdGRfaWQgdHZub3JtSWQ7CQkJCQkJLyogc2VsZWN0ZWQgdHYgbm9ybSAqLworCXY0bDJfc3RkX2lkIHR2bm9ybV9pZDsJCQkJCQkvKiBzZWxlY3RlZCB0diBub3JtICovCiAJdW5zaWduZWQgY2hhciB2aWRlb19lbmRwOwkJCQkJLyogMHg4MiBmb3IgVVNCVklTSU9OIGRldmljZXMgYmFzZWQgKi8KIAotCS8vIERlY29tcHJlc3Npb24gc3R1ZmY6Ci0JdW5zaWduZWQgY2hhciAqSW50cmFGcmFtZUJ1ZmZlcjsJCQkJLyogQnVmZmVyIGZvciByZWZlcmVuY2UgZnJhbWUgKi8KLQlpbnQgQmxvY2tQb3M7IAkJCQkJCQkvL2ZvciB0ZXN0IG9ubHkKLQlpbnQgcmVxdWVzdEludHJhOwkJCQkJCS8vIDAgPSBub3JtYWw7IDEgPSBpbnRyYSBmcmFtZSBpcyByZXF1ZXN0ZWQ7Ci0JaW50IGxhc3RJc29jRnJhbWVOdW07CQkJCQkJLy8gY2hlY2sgZm9yIGxvc3QgaXNvYyBmcmFtZXMKLQlpbnQgaXNvY1BhY2tldFNpemU7CQkJCQkJLy8gbmVlZCB0byBjYWxjdWxhdGUgdXNlZEJhbmR3aWR0aAotCWludCB1c2VkQmFuZHdpZHRoOwkJCQkJCS8vIHVzZWQgYmFuZHdpZHRoIDAtMTAwJSwgbmVlZCB0byBzZXQgY29tcHJMZXZlbAotCWludCBjb21wckxldmVsOwkJCQkJCQkvLyBIb3cgc3Ryb25nICgxMDApIG9yIHdlYWsgKDApIGlzIGNvbXByZXNzaW9uCi0JaW50IGxhc3RDb21wckxldmVsOwkJCQkJCS8vIEhvdyBzdHJvbmcgKDEwMCkgb3Igd2VhayAoMCkgd2FzIGNvbXByZXNzaW9uCisJLyogRGVjb21wcmVzc2lvbiBzdHVmZjogKi8KKwl1bnNpZ25lZCBjaGFyICppbnRyYV9mcmFtZV9idWZmZXI7CQkJCS8qIEJ1ZmZlciBmb3IgcmVmZXJlbmNlIGZyYW1lICovCisJaW50IGJsb2NrX3BvczsJCQkJCQkJLyogZm9yIHRlc3Qgb25seSAqLworCWludCByZXF1ZXN0X2ludHJhOwkJCQkJCS8qIDAgPSBub3JtYWw7IDEgPSBpbnRyYSBmcmFtZSBpcyByZXF1ZXN0ZWQ7ICovCisJaW50IGxhc3RfaXNvY19mcmFtZV9udW07CQkJCQkvKiBjaGVjayBmb3IgbG9zdCBpc29jIGZyYW1lcyAqLworCWludCBpc29jX3BhY2tldF9zaXplOwkJCQkJCS8qIG5lZWQgdG8gY2FsY3VsYXRlIHVzZWRfYmFuZHdpZHRoICovCisJaW50IHVzZWRfYmFuZHdpZHRoOwkJCQkJCS8qIHVzZWQgYmFuZHdpZHRoIDAtMTAwJSwgbmVlZCB0byBzZXQgY29tcHJfbGV2ZWwgKi8KKwlpbnQgY29tcHJfbGV2ZWw7CQkJCQkJLyogSG93IHN0cm9uZyAoMTAwKSBvciB3ZWFrICgwKSBpcyBjb21wcmVzc2lvbiAqLworCWludCBsYXN0X2NvbXByX2xldmVsOwkJCQkJCS8qIEhvdyBzdHJvbmcgKDEwMCkgb3Igd2VhayAoMCkgd2FzIGNvbXByZXNzaW9uICovCiAJaW50IHVzYl9iYW5kd2lkdGg7CQkJCQkJLyogTWJpdC9zICovCiAKIAkvKiBTdGF0aXN0aWNzIHRoYXQgY2FuIGJlIG92ZXJsYXllZCBvbiB0aGUgc2NyZWVuICovCi0JdW5zaWduZWQgbG9uZyBpc29jVXJiQ291bnQ7CQkJLy8gSG93IG1hbnkgVVJCcyB3ZSByZWNlaXZlZCBzbyBmYXIKKwl1bnNpZ25lZCBsb25nIGlzb2NfdXJiX2NvdW50OwkJCS8qIEhvdyBtYW55IFVSQnMgd2UgcmVjZWl2ZWQgc28gZmFyICovCiAJdW5zaWduZWQgbG9uZyB1cmJfbGVuZ3RoOwkJCS8qIExlbmd0aCBvZiBsYXN0IFVSQiAqLwotCXVuc2lnbmVkIGxvbmcgaXNvY0RhdGFDb3VudDsJCQkvKiBIb3cgbWFueSBieXRlcyB3ZSByZWNlaXZlZCAqLworCXVuc2lnbmVkIGxvbmcgaXNvY19kYXRhX2NvdW50OwkJCS8qIEhvdyBtYW55IGJ5dGVzIHdlIHJlY2VpdmVkICovCiAJdW5zaWduZWQgbG9uZyBoZWFkZXJfY291bnQ7CQkJLyogSG93IG1hbnkgZnJhbWUgaGVhZGVycyB3ZSBmb3VuZCAqLwogCXVuc2lnbmVkIGxvbmcgc2NyYXRjaF9vdmZfY291bnQ7CQkvKiBIb3cgbWFueSB0aW1lcyB3ZSBvdmVyZmxvd2VkIHNjcmF0Y2ggKi8KLQl1bnNpZ25lZCBsb25nIGlzb2NTa2lwQ291bnQ7CQkJLyogSG93IG1hbnkgZW1wdHkgSVNPIHBhY2tldHMgcmVjZWl2ZWQgKi8KLQl1bnNpZ25lZCBsb25nIGlzb2NFcnJDb3VudDsJCQkvKiBIb3cgbWFueSBiYWQgSVNPIHBhY2tldHMgcmVjZWl2ZWQgKi8KLQl1bnNpZ25lZCBsb25nIGlzb2NQYWNrZXRDb3VudDsJCQkvLyBIb3cgbWFueSBwYWNrZXRzIHdlIHRvdGFsbHkgZ290Ci0JdW5zaWduZWQgbG9uZyB0aW1lSW5JcnE7CQkJLy8gSG93IGxvbmcgZG8gd2UgbmVlZCBmb3IgaW50ZXJydXB0Ci0JaW50IGlzb2NNZWFzdXJlQmFuZHdpZHRoQ291bnQ7Ci0JaW50IGZyYW1lX251bTsJCQkJCS8vIEhvdyBtYW55IHZpZGVvIGZyYW1lcyB3ZSBzZW5kIHRvIHVzZXIKLQlpbnQgbWF4U3RyaXBMZW47CQkJCS8vIEhvdyBiaWcgaXMgdGhlIGJpZ2dlc3Qgc3RyaXAKLQlpbnQgY29tcHJCbG9ja1BvczsKLQlpbnQgc3RyaXBMZW5FcnJvcnM7CQkJCS8vIEhvdyBtYW55IHRpbWVzIHdhcyBCbG9ja1BvcyBncmVhdGVyIHRoYW4gU3RyaXBMZW4KLQlpbnQgc3RyaXBNYWdpY0Vycm9yczsKLQlpbnQgc3RyaXBMaW5lTnVtYmVyRXJyb3JzOwotCWludCBDb21wckJsb2NrVHlwZXNbNF07CisJdW5zaWduZWQgbG9uZyBpc29jX3NraXBfY291bnQ7CQkJLyogSG93IG1hbnkgZW1wdHkgSVNPIHBhY2tldHMgcmVjZWl2ZWQgKi8KKwl1bnNpZ25lZCBsb25nIGlzb2NfZXJyX2NvdW50OwkJCS8qIEhvdyBtYW55IGJhZCBJU08gcGFja2V0cyByZWNlaXZlZCAqLworCXVuc2lnbmVkIGxvbmcgaXNvY19wYWNrZXRfY291bnQ7CQkvKiBIb3cgbWFueSBwYWNrZXRzIHdlIHRvdGFsbHkgZ290ICovCisJdW5zaWduZWQgbG9uZyB0aW1lX2luX2lycTsJCQkvKiBIb3cgbG9uZyBkbyB3ZSBuZWVkIGZvciBpbnRlcnJ1cHQgKi8KKwlpbnQgaXNvY19tZWFzdXJlX2JhbmR3aWR0aF9jb3VudDsKKwlpbnQgZnJhbWVfbnVtOwkJCQkJLyogSG93IG1hbnkgdmlkZW8gZnJhbWVzIHdlIHNlbmQgdG8gdXNlciAqLworCWludCBtYXhfc3RyaXBfbGVuOwkJCQkvKiBIb3cgYmlnIGlzIHRoZSBiaWdnZXN0IHN0cmlwICovCisJaW50IGNvbXByYmxvY2tfcG9zOworCWludCBzdHJpcF9sZW5fZXJyb3JzOwkJCQkvKiBIb3cgbWFueSB0aW1lcyB3YXMgYmxvY2tfcG9zIGdyZWF0ZXIgdGhhbiBzdHJpcF9sZW4gKi8KKwlpbnQgc3RyaXBfbWFnaWNfZXJyb3JzOworCWludCBzdHJpcF9saW5lX251bWJlcl9lcnJvcnM7CisJaW50IGNvbXByX2Jsb2NrX3R5cGVzWzRdOwogfTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdG9fdXNidmlzaW9uKHN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYpCkBAIC00OTQsMTMgKzQ5NSwxMyBAQAogaW50IHVzYnZpc2lvbl9kZWNvbXByZXNzX2FsbG9jKHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24pOwogdm9pZCB1c2J2aXNpb25fZGVjb21wcmVzc19mcmVlKHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24pOwogCi1pbnQgdXNidmlzaW9uX3NldHVwKHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24saW50IGZvcm1hdCk7CitpbnQgdXNidmlzaW9uX3NldHVwKHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24sIGludCBmb3JtYXQpOwogaW50IHVzYnZpc2lvbl9pbml0X2lzb2Moc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbik7CiBpbnQgdXNidmlzaW9uX3Jlc3RhcnRfaXNvYyhzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uKTsKIHZvaWQgdXNidmlzaW9uX3N0b3BfaXNvYyhzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uKTsKIGludCB1c2J2aXNpb25fc2V0X2FsdGVybmF0ZShzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqZGV2KTsKIAotaW50IHVzYnZpc2lvbl9zZXRfYXVkaW8oc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiwgaW50IEF1ZGlvQ2hhbm5lbCk7CitpbnQgdXNidmlzaW9uX3NldF9hdWRpbyhzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uLCBpbnQgYXVkaW9fY2hhbm5lbCk7CiBpbnQgdXNidmlzaW9uX2F1ZGlvX29mZihzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uKTsKIAogaW50IHVzYnZpc2lvbl9iZWdpbl9zdHJlYW1pbmcoc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbik7CkBAIC01MTEsOSArNTEyLDkgQEAKIGludCB1c2J2aXNpb25fc2V0X2lucHV0KHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24pOwogaW50IHVzYnZpc2lvbl9zZXRfb3V0cHV0KHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24sIGludCB3aWR0aCwgaW50IGhlaWdodCk7CiAKLXZvaWQgdXNidmlzaW9uX2luaXRfcG93ZXJPZmZUaW1lcihzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uKTsKLXZvaWQgdXNidmlzaW9uX3NldF9wb3dlck9mZlRpbWVyKHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24pOwotdm9pZCB1c2J2aXNpb25fcmVzZXRfcG93ZXJPZmZUaW1lcihzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uKTsKK3ZvaWQgdXNidmlzaW9uX2luaXRfcG93ZXJfb2ZmX3RpbWVyKHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24pOwordm9pZCB1c2J2aXNpb25fc2V0X3Bvd2VyX29mZl90aW1lcihzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uKTsKK3ZvaWQgdXNidmlzaW9uX3Jlc2V0X3Bvd2VyX29mZl90aW1lcihzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uKTsKIGludCB1c2J2aXNpb25fcG93ZXJfb2ZmKHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24pOwogaW50IHVzYnZpc2lvbl9wb3dlcl9vbihzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3Y0bDIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y192NGwyLmMKaW5kZXggOGNmNjFlOC4uOTAwNWE4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3Y0bDIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfdjRsMi5jCkBAIC0xMDM1LDExICsxMDM1LDggQEAKIAkJcmV0dXJuIHV2Y194dV9jdHJsX3F1ZXJ5KGNoYWluLCBhcmcsIDEpOwogCiAJZGVmYXVsdDoKLQkJaWYgKChyZXQgPSB2NGxfY29tcGF0X3RyYW5zbGF0ZV9pb2N0bChmaWxlLCBjbWQsIGFyZywKLQkJCXV2Y192NGwyX2RvX2lvY3RsKSkgPT0gLUVOT0lPQ1RMQ01EKQotCQkJdXZjX3RyYWNlKFVWQ19UUkFDRV9JT0NUTCwgIlVua25vd24gaW9jdGwgMHglMDh4XG4iLAotCQkJCSAgY21kKTsKLQkJcmV0dXJuIHJldDsKKwkJdXZjX3RyYWNlKFVWQ19UUkFDRV9JT0NUTCwgIlVua25vd24gaW9jdGwgMHglMDh4XG4iLCBjbWQpOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwxLWNvbXBhdC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwxLWNvbXBhdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNGFjNzUxLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMS1jb21wYXQuYworKysgL2Rldi9udWxsCkBAIC0xLDEyNzcgKzAsMCBAQAotLyoKLSAqCi0gKglWaWRlbyBmb3IgTGludXggVHdvCi0gKglCYWNrd2FyZCBDb21wYXRpYmlsaXR5IExheWVyCi0gKgotICoJU3VwcG9ydCBzdWJyb3V0aW5lcyBmb3IgcHJvdmlkaW5nIFY0TDIgZHJpdmVycyB3aXRoIGJhY2t3YXJkCi0gKgljb21wYXRpYmlsaXR5IHdpdGggYXBwbGljYXRpb25zIHVzaW5nIHRoZSBvbGQgQVBJLgotICoKLSAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKglhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KLSAqCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogQXV0aG9yOglCaWxsIERpcmtzIDxiaWxsQHRoZWRpcmtzLm9yZz4KLSAqCQlldCBhbC4KLSAqCi0gKi8KLQotCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+Ci0KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLSNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgotCi1zdGF0aWMgdW5zaWduZWQgaW50IGRlYnVnOwotbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgImVuYWJsZSBkZWJ1ZyBtZXNzYWdlcyIpOwotTU9EVUxFX0FVVEhPUigiQmlsbCBEaXJrcyIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJ2NGwoMSkgY29tcGF0aWJpbGl0eSBsYXllciBmb3IgdjRsMiBkcml2ZXJzLiIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi0jZGVmaW5lIGRwcmludGsoZm10LCBhcmcuLi4pIFwKLQlkbyB7IFwKLQkJaWYgKGRlYnVnKSBcCi0JCQlwcmludGsoS0VSTl9ERUJVRyAidjRsMS1jb21wYXQ6ICIgZm10ICwgIyMgYXJnKTtcCi0JfSB3aGlsZSAoMCkKLQotLyoKLSAqCUkgTyBDIFQgTCAgIFQgUiBBIE4gUyBMIEEgVCBJIE8gTgotICoKLSAqCUZyb20gaGVyZSBvbiBkb3duIGlzIHRoZSBjb2RlIGZvciB0cmFuc2xhdGluZyB0aGUgbnVtZXJvdXMKLSAqCWlvY3RsIGNvbW1hbmRzIGZyb20gdGhlIG9sZCBBUEkgdG8gdGhlIG5ldyBBUEkuCi0gKi8KLQotc3RhdGljIGludAotZ2V0X3Y0bF9jb250cm9sKHN0cnVjdCBmaWxlICAgICAgICAgICAgICpmaWxlLAotCQlpbnQJCQljaWQsCi0JCXY0bDJfa2lvY3RsICAgICAgICAgICAgIGRydikKLXsKLQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwJcWN0cmwyOwotCXN0cnVjdCB2NGwyX2NvbnRyb2wJY3RybDI7Ci0JaW50CQkJZXJyOwotCi0JcWN0cmwyLmlkID0gY2lkOwotCWVyciA9IGRydihmaWxlLCBWSURJT0NfUVVFUllDVFJMLCAmcWN0cmwyKTsKLQlpZiAoZXJyIDwgMCkKLQkJZHByaW50aygiVklESU9DX1FVRVJZQ1RSTDogJWRcbiIsIGVycik7Ci0JaWYgKGVyciA9PSAwICYmICEocWN0cmwyLmZsYWdzICYgVjRMMl9DVFJMX0ZMQUdfRElTQUJMRUQpKSB7Ci0JCWN0cmwyLmlkID0gcWN0cmwyLmlkOwotCQllcnIgPSBkcnYoZmlsZSwgVklESU9DX0dfQ1RSTCwgJmN0cmwyKTsKLQkJaWYgKGVyciA8IDApIHsKLQkJCWRwcmludGsoIlZJRElPQ19HX0NUUkw6ICVkXG4iLCBlcnIpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJcmV0dXJuIERJVl9ST1VORF9DTE9TRVNUKChjdHJsMi52YWx1ZS1xY3RybDIubWluaW11bSkgKiA2NTUzNSwKLQkJCQkJIHFjdHJsMi5tYXhpbXVtIC0gcWN0cmwyLm1pbmltdW0pOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotc2V0X3Y0bF9jb250cm9sKHN0cnVjdCBmaWxlICAgICAgICAgICAgICpmaWxlLAotCQlpbnQJCQljaWQsCi0JCWludAkJCXZhbHVlLAotCQl2NGwyX2tpb2N0bCAgICAgICAgICAgICBkcnYpCi17Ci0Jc3RydWN0IHY0bDJfcXVlcnljdHJsCXFjdHJsMjsKLQlzdHJ1Y3QgdjRsMl9jb250cm9sCWN0cmwyOwotCWludAkJCWVycjsKLQotCXFjdHJsMi5pZCA9IGNpZDsKLQllcnIgPSBkcnYoZmlsZSwgVklESU9DX1FVRVJZQ1RSTCwgJnFjdHJsMik7Ci0JaWYgKGVyciA8IDApCi0JCWRwcmludGsoIlZJRElPQ19RVUVSWUNUUkw6ICVkXG4iLCBlcnIpOwotCWlmIChlcnIgPT0gMCAmJgotCSAgICAhKHFjdHJsMi5mbGFncyAmIFY0TDJfQ1RSTF9GTEFHX0RJU0FCTEVEKSAmJgotCSAgICAhKHFjdHJsMi5mbGFncyAmIFY0TDJfQ1RSTF9GTEFHX0dSQUJCRUQpKSB7Ci0JCWlmICh2YWx1ZSA8IDApCi0JCQl2YWx1ZSA9IDA7Ci0JCWlmICh2YWx1ZSA+IDY1NTM1KQotCQkJdmFsdWUgPSA2NTUzNTsKLQkJaWYgKHZhbHVlICYmIHFjdHJsMi50eXBlID09IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4pCi0JCQl2YWx1ZSA9IDY1NTM1OwotCQljdHJsMi5pZCA9IHFjdHJsMi5pZDsKLQkJY3RybDIudmFsdWUgPQotCQkJKHZhbHVlICogKHFjdHJsMi5tYXhpbXVtIC0gcWN0cmwyLm1pbmltdW0pCi0JCQkgKyAzMjc2NykKLQkJCS8gNjU1MzU7Ci0JCWN0cmwyLnZhbHVlICs9IHFjdHJsMi5taW5pbXVtOwotCQllcnIgPSBkcnYoZmlsZSwgVklESU9DX1NfQ1RSTCwgJmN0cmwyKTsKLQkJaWYgKGVyciA8IDApCi0JCQlkcHJpbnRrKCJWSURJT0NfU19DVFJMOiAlZFxuIiwgZXJyKTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgcGFsZXR0ZTJwaXhlbGZvcm1hdFtdID0gewotCVtWSURFT19QQUxFVFRFX0dSRVldICAgID0gVjRMMl9QSVhfRk1UX0dSRVksCi0JW1ZJREVPX1BBTEVUVEVfUkdCNTU1XSAgPSBWNEwyX1BJWF9GTVRfUkdCNTU1LAotCVtWSURFT19QQUxFVFRFX1JHQjU2NV0gID0gVjRMMl9QSVhfRk1UX1JHQjU2NSwKLQlbVklERU9fUEFMRVRURV9SR0IyNF0gICA9IFY0TDJfUElYX0ZNVF9CR1IyNCwKLQlbVklERU9fUEFMRVRURV9SR0IzMl0gICA9IFY0TDJfUElYX0ZNVF9CR1IzMiwKLQkvKiB5dXYgcGFja2VkIHBpeGVsICovCi0JW1ZJREVPX1BBTEVUVEVfWVVZVl0gICAgPSBWNEwyX1BJWF9GTVRfWVVZViwKLQlbVklERU9fUEFMRVRURV9ZVVY0MjJdICA9IFY0TDJfUElYX0ZNVF9ZVVlWLAotCVtWSURFT19QQUxFVFRFX1VZVlldICAgID0gVjRMMl9QSVhfRk1UX1VZVlksCi0JLyogeXV2IHBsYW5hciAqLwotCVtWSURFT19QQUxFVFRFX1lVVjQxMFBdID0gVjRMMl9QSVhfRk1UX1lVVjQxMCwKLQlbVklERU9fUEFMRVRURV9ZVVY0MjBdICA9IFY0TDJfUElYX0ZNVF9ZVVY0MjAsCi0JW1ZJREVPX1BBTEVUVEVfWVVWNDIwUF0gPSBWNEwyX1BJWF9GTVRfWVVWNDIwLAotCVtWSURFT19QQUxFVFRFX1lVVjQxMVBdID0gVjRMMl9QSVhfRk1UX1lVVjQxMVAsCi0JW1ZJREVPX1BBTEVUVEVfWVVWNDIyUF0gPSBWNEwyX1BJWF9GTVRfWVVWNDIyUCwKLX07Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgX19wdXJlCi1wYWxldHRlX3RvX3BpeGVsZm9ybWF0KHVuc2lnbmVkIGludCBwYWxldHRlKQotewotCWlmIChwYWxldHRlIDwgQVJSQVlfU0laRShwYWxldHRlMnBpeGVsZm9ybWF0KSkKLQkJcmV0dXJuIHBhbGV0dGUycGl4ZWxmb3JtYXRbcGFsZXR0ZV07Ci0JZWxzZQotCQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBfX2F0dHJpYnV0ZV9jb25zdF9fCi1waXhlbGZvcm1hdF90b19wYWxldHRlKHVuc2lnbmVkIGludCBwaXhlbGZvcm1hdCkKLXsKLQlpbnQJcGFsZXR0ZSA9IDA7Ci0Jc3dpdGNoIChwaXhlbGZvcm1hdCkgewotCWNhc2UgVjRMMl9QSVhfRk1UX0dSRVk6Ci0JCXBhbGV0dGUgPSBWSURFT19QQUxFVFRFX0dSRVk7Ci0JCWJyZWFrOwotCWNhc2UgVjRMMl9QSVhfRk1UX1JHQjU1NToKLQkJcGFsZXR0ZSA9IFZJREVPX1BBTEVUVEVfUkdCNTU1OwotCQlicmVhazsKLQljYXNlIFY0TDJfUElYX0ZNVF9SR0I1NjU6Ci0JCXBhbGV0dGUgPSBWSURFT19QQUxFVFRFX1JHQjU2NTsKLQkJYnJlYWs7Ci0JY2FzZSBWNEwyX1BJWF9GTVRfQkdSMjQ6Ci0JCXBhbGV0dGUgPSBWSURFT19QQUxFVFRFX1JHQjI0OwotCQlicmVhazsKLQljYXNlIFY0TDJfUElYX0ZNVF9CR1IzMjoKLQkJcGFsZXR0ZSA9IFZJREVPX1BBTEVUVEVfUkdCMzI7Ci0JCWJyZWFrOwotCS8qIHl1diBwYWNrZWQgcGl4ZWwgKi8KLQljYXNlIFY0TDJfUElYX0ZNVF9ZVVlWOgotCQlwYWxldHRlID0gVklERU9fUEFMRVRURV9ZVVlWOwotCQlicmVhazsKLQljYXNlIFY0TDJfUElYX0ZNVF9VWVZZOgotCQlwYWxldHRlID0gVklERU9fUEFMRVRURV9VWVZZOwotCQlicmVhazsKLQkvKiB5dXYgcGxhbmFyICovCi0JY2FzZSBWNEwyX1BJWF9GTVRfWVVWNDEwOgotCQlwYWxldHRlID0gVklERU9fUEFMRVRURV9ZVVY0MjA7Ci0JCWJyZWFrOwotCWNhc2UgVjRMMl9QSVhfRk1UX1lVVjQyMDoKLQkJcGFsZXR0ZSA9IFZJREVPX1BBTEVUVEVfWVVWNDIwOwotCQlicmVhazsKLQljYXNlIFY0TDJfUElYX0ZNVF9ZVVY0MTFQOgotCQlwYWxldHRlID0gVklERU9fUEFMRVRURV9ZVVY0MTFQOwotCQlicmVhazsKLQljYXNlIFY0TDJfUElYX0ZNVF9ZVVY0MjJQOgotCQlwYWxldHRlID0gVklERU9fUEFMRVRURV9ZVVY0MjJQOwotCQlicmVhazsKLQl9Ci0JcmV0dXJuIHBhbGV0dGU7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBpbnQgcG9sbF9vbmUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBwb2xsX3dxdWV1ZXMgKnB3cSkKLXsKLQlpbnQgcmV0dmFsID0gMTsKLQlwb2xsX3RhYmxlICp0YWJsZTsKLQotCXBvbGxfaW5pdHdhaXQocHdxKTsKLQl0YWJsZSA9ICZwd3EtPnB0OwotCWZvciAoOzspIHsKLQkJaW50IG1hc2s7Ci0JCW1hc2sgPSBmaWxlLT5mX29wLT5wb2xsKGZpbGUsIHRhYmxlKTsKLQkJaWYgKG1hc2sgJiBQT0xMSU4pCi0JCQlicmVhazsKLQkJdGFibGUgPSBOVUxMOwotCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKLQkJCXJldHZhbCA9IC1FUkVTVEFSVFNZUzsKLQkJCWJyZWFrOwotCQl9Ci0JCXBvbGxfc2NoZWR1bGUocHdxLCBUQVNLX0lOVEVSUlVQVElCTEUpOwotCX0KLQlwb2xsX2ZyZWV3YWl0KHB3cSk7Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQotc3RhdGljIGludCBjb3VudF9pbnB1dHMoCi0JCQlzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCXY0bDJfa2lvY3RsIGRydikKLXsKLQlzdHJ1Y3QgdjRsMl9pbnB1dCBpbnB1dDI7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOzsgaSsrKSB7Ci0JCW1lbXNldCgmaW5wdXQyLCAwLCBzaXplb2YoaW5wdXQyKSk7Ci0JCWlucHV0Mi5pbmRleCA9IGk7Ci0JCWlmICgwICE9IGRydihmaWxlLCBWSURJT0NfRU5VTUlOUFVULCAmaW5wdXQyKSkKLQkJCWJyZWFrOwotCX0KLQlyZXR1cm4gaTsKLX0KLQotc3RhdGljIGludCBjaGVja19zaXplKAotCQlzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJdjRsMl9raW9jdGwgZHJ2LAotCQlpbnQgKm1heHcsCi0JCWludCAqbWF4aCkKLXsKLQlzdHJ1Y3QgdjRsMl9mbXRkZXNjIGRlc2MyOwotCXN0cnVjdCB2NGwyX2Zvcm1hdCAgZm10MjsKLQotCW1lbXNldCgmZGVzYzIsIDAsIHNpemVvZihkZXNjMikpOwotCW1lbXNldCgmZm10MiwgMCwgc2l6ZW9mKGZtdDIpKTsKLQotCWRlc2MyLnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7Ci0JaWYgKDAgIT0gZHJ2KGZpbGUsIFZJRElPQ19FTlVNX0ZNVCwgJmRlc2MyKSkKLQkJZ290byBkb25lOwotCi0JZm10Mi50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwotCWZtdDIuZm10LnBpeC53aWR0aCAgICAgICA9IDEwMDAwOwotCWZtdDIuZm10LnBpeC5oZWlnaHQgICAgICA9IDEwMDAwOwotCWZtdDIuZm10LnBpeC5waXhlbGZvcm1hdCA9IGRlc2MyLnBpeGVsZm9ybWF0OwotCWlmICgwICE9IGRydihmaWxlLCBWSURJT0NfVFJZX0ZNVCwgJmZtdDIpKQotCQlnb3RvIGRvbmU7Ci0KLQkqbWF4dyA9IGZtdDIuZm10LnBpeC53aWR0aDsKLQkqbWF4aCA9IGZtdDIuZm10LnBpeC5oZWlnaHQ7Ci0KLWRvbmU6Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBub2lubGluZSBsb25nIHY0bDFfY29tcGF0X2dldF9jYXBhYmlsaXRpZXMoCi0JCQkJCXN0cnVjdCB2aWRlb19jYXBhYmlsaXR5ICpjYXAsCi0JCQkJCXN0cnVjdCBmaWxlICpmaWxlLAotCQkJCQl2NGwyX2tpb2N0bCBkcnYpCi17Ci0JbG9uZyBlcnI7Ci0Jc3RydWN0IHY0bDJfZnJhbWVidWZmZXIgZmJ1ZjsKLQlzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICpjYXAyOwotCi0JY2FwMiA9IGt6YWxsb2Moc2l6ZW9mKCpjYXAyKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjYXAyKSB7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCXJldHVybiBlcnI7Ci0JfQotCW1lbXNldChjYXAsIDAsIHNpemVvZigqY2FwKSk7Ci0JbWVtc2V0KCZmYnVmLCAwLCBzaXplb2YoZmJ1ZikpOwotCi0JZXJyID0gZHJ2KGZpbGUsIFZJRElPQ19RVUVSWUNBUCwgY2FwMik7Ci0JaWYgKGVyciA8IDApIHsKLQkJZHByaW50aygiVklESU9DR0NBUCAvIFZJRElPQ19RVUVSWUNBUDogJWxkXG4iLCBlcnIpOwotCQlnb3RvIGRvbmU7Ci0JfQotCWlmIChjYXAyLT5jYXBhYmlsaXRpZXMgJiBWNEwyX0NBUF9WSURFT19PVkVSTEFZKSB7Ci0JCWVyciA9IGRydihmaWxlLCBWSURJT0NfR19GQlVGLCAmZmJ1Zik7Ci0JCWlmIChlcnIgPCAwKSB7Ci0JCQlkcHJpbnRrKCJWSURJT0NHQ0FQIC8gVklESU9DX0dfRkJVRjogJWxkXG4iLCBlcnIpOwotCQkJbWVtc2V0KCZmYnVmLCAwLCBzaXplb2YoZmJ1ZikpOwotCQl9Ci0JCWVyciA9IDA7Ci0JfQotCi0JbWVtY3B5KGNhcC0+bmFtZSwgY2FwMi0+Y2FyZCwKLQkgICAgICAgbWluKHNpemVvZihjYXAtPm5hbWUpLCBzaXplb2YoY2FwMi0+Y2FyZCkpKTsKLQljYXAtPm5hbWVbc2l6ZW9mKGNhcC0+bmFtZSkgLSAxXSA9IDA7Ci0JaWYgKGNhcDItPmNhcGFiaWxpdGllcyAmIFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUpCi0JCWNhcC0+dHlwZSB8PSBWSURfVFlQRV9DQVBUVVJFOwotCWlmIChjYXAyLT5jYXBhYmlsaXRpZXMgJiBWNEwyX0NBUF9UVU5FUikKLQkJY2FwLT50eXBlIHw9IFZJRF9UWVBFX1RVTkVSOwotCWlmIChjYXAyLT5jYXBhYmlsaXRpZXMgJiBWNEwyX0NBUF9WQklfQ0FQVFVSRSkKLQkJY2FwLT50eXBlIHw9IFZJRF9UWVBFX1RFTEVURVhUOwotCWlmIChjYXAyLT5jYXBhYmlsaXRpZXMgJiBWNEwyX0NBUF9WSURFT19PVkVSTEFZKQotCQljYXAtPnR5cGUgfD0gVklEX1RZUEVfT1ZFUkxBWTsKLQlpZiAoZmJ1Zi5jYXBhYmlsaXR5ICYgVjRMMl9GQlVGX0NBUF9MSVNUX0NMSVBQSU5HKQotCQljYXAtPnR5cGUgfD0gVklEX1RZUEVfQ0xJUFBJTkc7Ci0KLQljYXAtPmNoYW5uZWxzICA9IGNvdW50X2lucHV0cyhmaWxlLCBkcnYpOwotCWNoZWNrX3NpemUoZmlsZSwgZHJ2LAotCQkgICAmY2FwLT5tYXh3aWR0aCwgJmNhcC0+bWF4aGVpZ2h0KTsKLQljYXAtPmF1ZGlvcyAgICA9ICAwOyAvKiBGSVhNRSAqLwotCWNhcC0+bWlud2lkdGggID0gNDg7IC8qIEZJWE1FICovCi0JY2FwLT5taW5oZWlnaHQgPSAzMjsgLyogRklYTUUgKi8KLQotZG9uZToKLQlrZnJlZShjYXAyKTsKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgbm9pbmxpbmUgbG9uZyB2NGwxX2NvbXBhdF9nZXRfZnJhbWVfYnVmZmVyKAotCQkJCQlzdHJ1Y3QgdmlkZW9fYnVmZmVyICpidWZmZXIsCi0JCQkJCXN0cnVjdCBmaWxlICpmaWxlLAotCQkJCQl2NGwyX2tpb2N0bCBkcnYpCi17Ci0JbG9uZyBlcnI7Ci0Jc3RydWN0IHY0bDJfZnJhbWVidWZmZXIgZmJ1ZjsKLQotCW1lbXNldChidWZmZXIsIDAsIHNpemVvZigqYnVmZmVyKSk7Ci0JbWVtc2V0KCZmYnVmLCAwLCBzaXplb2YoZmJ1ZikpOwotCi0JZXJyID0gZHJ2KGZpbGUsIFZJRElPQ19HX0ZCVUYsICZmYnVmKTsKLQlpZiAoZXJyIDwgMCkgewotCQlkcHJpbnRrKCJWSURJT0NHRkJVRiAvIFZJRElPQ19HX0ZCVUY6ICVsZFxuIiwgZXJyKTsKLQkJZ290byBkb25lOwotCX0KLQlidWZmZXItPmJhc2UgICA9IGZidWYuYmFzZTsKLQlidWZmZXItPmhlaWdodCA9IGZidWYuZm10LmhlaWdodDsKLQlidWZmZXItPndpZHRoICA9IGZidWYuZm10LndpZHRoOwotCi0Jc3dpdGNoIChmYnVmLmZtdC5waXhlbGZvcm1hdCkgewotCWNhc2UgVjRMMl9QSVhfRk1UX1JHQjMzMjoKLQkJYnVmZmVyLT5kZXB0aCA9IDg7Ci0JCWJyZWFrOwotCWNhc2UgVjRMMl9QSVhfRk1UX1JHQjU1NToKLQkJYnVmZmVyLT5kZXB0aCA9IDE1OwotCQlicmVhazsKLQljYXNlIFY0TDJfUElYX0ZNVF9SR0I1NjU6Ci0JCWJ1ZmZlci0+ZGVwdGggPSAxNjsKLQkJYnJlYWs7Ci0JY2FzZSBWNEwyX1BJWF9GTVRfQkdSMjQ6Ci0JCWJ1ZmZlci0+ZGVwdGggPSAyNDsKLQkJYnJlYWs7Ci0JY2FzZSBWNEwyX1BJWF9GTVRfQkdSMzI6Ci0JCWJ1ZmZlci0+ZGVwdGggPSAzMjsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnVmZmVyLT5kZXB0aCA9IDA7Ci0JfQotCWlmIChmYnVmLmZtdC5ieXRlc3BlcmxpbmUpIHsKLQkJYnVmZmVyLT5ieXRlc3BlcmxpbmUgPSBmYnVmLmZtdC5ieXRlc3BlcmxpbmU7Ci0JCWlmICghYnVmZmVyLT5kZXB0aCAmJiBidWZmZXItPndpZHRoKQotCQkJYnVmZmVyLT5kZXB0aCAgID0gKChmYnVmLmZtdC5ieXRlc3BlcmxpbmU8PDMpCi0JCQkJCSAgKyAoYnVmZmVyLT53aWR0aC0xKSkKLQkJCQkJICAvIGJ1ZmZlci0+d2lkdGg7Ci0JfSBlbHNlIHsKLQkJYnVmZmVyLT5ieXRlc3BlcmxpbmUgPQotCQkJKGJ1ZmZlci0+d2lkdGggKiBidWZmZXItPmRlcHRoICsgNykgJiA3OwotCQlidWZmZXItPmJ5dGVzcGVybGluZSA+Pj0gMzsKLQl9Ci1kb25lOgotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBub2lubGluZSBsb25nIHY0bDFfY29tcGF0X3NldF9mcmFtZV9idWZmZXIoCi0JCQkJCXN0cnVjdCB2aWRlb19idWZmZXIgKmJ1ZmZlciwKLQkJCQkJc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkJCXY0bDJfa2lvY3RsIGRydikKLXsKLQlsb25nIGVycjsKLQlzdHJ1Y3QgdjRsMl9mcmFtZWJ1ZmZlciBmYnVmOwotCi0JbWVtc2V0KCZmYnVmLCAwLCBzaXplb2YoZmJ1ZikpOwotCWZidWYuYmFzZSAgICAgICA9IGJ1ZmZlci0+YmFzZTsKLQlmYnVmLmZtdC5oZWlnaHQgPSBidWZmZXItPmhlaWdodDsKLQlmYnVmLmZtdC53aWR0aCAgPSBidWZmZXItPndpZHRoOwotCXN3aXRjaCAoYnVmZmVyLT5kZXB0aCkgewotCWNhc2UgODoKLQkJZmJ1Zi5mbXQucGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfUkdCMzMyOwotCQlicmVhazsKLQljYXNlIDE1OgotCQlmYnVmLmZtdC5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9SR0I1NTU7Ci0JCWJyZWFrOwotCWNhc2UgMTY6Ci0JCWZidWYuZm10LnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX1JHQjU2NTsKLQkJYnJlYWs7Ci0JY2FzZSAyNDoKLQkJZmJ1Zi5mbXQucGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfQkdSMjQ7Ci0JCWJyZWFrOwotCWNhc2UgMzI6Ci0JCWZidWYuZm10LnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX0JHUjMyOwotCQlicmVhazsKLQl9Ci0JZmJ1Zi5mbXQuYnl0ZXNwZXJsaW5lID0gYnVmZmVyLT5ieXRlc3BlcmxpbmU7Ci0JZXJyID0gZHJ2KGZpbGUsIFZJRElPQ19TX0ZCVUYsICZmYnVmKTsKLQlpZiAoZXJyIDwgMCkKLQkJZHByaW50aygiVklESU9DU0ZCVUYgLyBWSURJT0NfU19GQlVGOiAlbGRcbiIsIGVycik7Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIG5vaW5saW5lIGxvbmcgdjRsMV9jb21wYXRfZ2V0X3dpbl9jYXBfZGltZW5zaW9ucygKLQkJCQkJc3RydWN0IHZpZGVvX3dpbmRvdyAqd2luLAotCQkJCQlzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCQkJdjRsMl9raW9jdGwgZHJ2KQotewotCWxvbmcgZXJyOwotCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10OwotCi0JZm10ID0ga3phbGxvYyhzaXplb2YoKmZtdCksIEdGUF9LRVJORUwpOwotCWlmICghZm10KSB7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCXJldHVybiBlcnI7Ci0JfQotCW1lbXNldCh3aW4sIDAsIHNpemVvZigqd2luKSk7Ci0KLQlmbXQtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX09WRVJMQVk7Ci0JZXJyID0gZHJ2KGZpbGUsIFZJRElPQ19HX0ZNVCwgZm10KTsKLQlpZiAoZXJyIDwgMCkKLQkJZHByaW50aygiVklESU9DR1dJTiAvIFZJRElPQ19HX1dJTjogJWxkXG4iLCBlcnIpOwotCWlmIChlcnIgPT0gMCkgewotCQl3aW4tPnggICAgICAgICA9IGZtdC0+Zm10Lndpbi53LmxlZnQ7Ci0JCXdpbi0+eSAgICAgICAgID0gZm10LT5mbXQud2luLncudG9wOwotCQl3aW4tPndpZHRoICAgICA9IGZtdC0+Zm10Lndpbi53LndpZHRoOwotCQl3aW4tPmhlaWdodCAgICA9IGZtdC0+Zm10Lndpbi53LmhlaWdodDsKLQkJd2luLT5jaHJvbWFrZXkgPSBmbXQtPmZtdC53aW4uY2hyb21ha2V5OwotCQl3aW4tPmNsaXBzICAgICA9IE5VTEw7Ci0JCXdpbi0+Y2xpcGNvdW50ID0gMDsKLQkJZ290byBkb25lOwotCX0KLQotCWZtdC0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKLQllcnIgPSBkcnYoZmlsZSwgVklESU9DX0dfRk1ULCBmbXQpOwotCWlmIChlcnIgPCAwKSB7Ci0JCWRwcmludGsoIlZJRElPQ0dXSU4gLyBWSURJT0NfR19GTVQ6ICVsZFxuIiwgZXJyKTsKLQkJZ290byBkb25lOwotCX0KLQl3aW4tPnggICAgICAgICA9IDA7Ci0Jd2luLT55ICAgICAgICAgPSAwOwotCXdpbi0+d2lkdGggICAgID0gZm10LT5mbXQucGl4LndpZHRoOwotCXdpbi0+aGVpZ2h0ICAgID0gZm10LT5mbXQucGl4LmhlaWdodDsKLQl3aW4tPmNocm9tYWtleSA9IDA7Ci0Jd2luLT5jbGlwcyAgICAgPSBOVUxMOwotCXdpbi0+Y2xpcGNvdW50ID0gMDsKLWRvbmU6Ci0Ja2ZyZWUoZm10KTsKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgbm9pbmxpbmUgbG9uZyB2NGwxX2NvbXBhdF9zZXRfd2luX2NhcF9kaW1lbnNpb25zKAotCQkJCQlzdHJ1Y3QgdmlkZW9fd2luZG93ICp3aW4sCi0JCQkJCXN0cnVjdCBmaWxlICpmaWxlLAotCQkJCQl2NGwyX2tpb2N0bCBkcnYpCi17Ci0JbG9uZyBlcnIsIGVycjEsIGVycjI7Ci0Jc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQ7Ci0KLQlmbXQgPSBremFsbG9jKHNpemVvZigqZm10KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFmbXQpIHsKLQkJZXJyID0gLUVOT01FTTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0JZm10LT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwotCWRydihmaWxlLCBWSURJT0NfU1RSRUFNT0ZGLCAmZm10LT50eXBlKTsKLQllcnIxID0gZHJ2KGZpbGUsIFZJRElPQ19HX0ZNVCwgZm10KTsKLQlpZiAoZXJyMSA8IDApCi0JCWRwcmludGsoIlZJRElPQ1NXSU4gLyBWSURJT0NfR19GTVQ6ICVsZFxuIiwgZXJyMSk7Ci0JaWYgKGVycjEgPT0gMCkgewotCQlmbXQtPmZtdC5waXgud2lkdGggID0gd2luLT53aWR0aDsKLQkJZm10LT5mbXQucGl4LmhlaWdodCA9IHdpbi0+aGVpZ2h0OwotCQlmbXQtPmZtdC5waXguZmllbGQgID0gVjRMMl9GSUVMRF9BTlk7Ci0JCWZtdC0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPSAwOwotCQllcnIgPSBkcnYoZmlsZSwgVklESU9DX1NfRk1ULCBmbXQpOwotCQlpZiAoZXJyIDwgMCkKLQkJCWRwcmludGsoIlZJRElPQ1NXSU4gLyBWSURJT0NfU19GTVQgIzE6ICVsZFxuIiwKLQkJCQllcnIpOwotCQl3aW4tPndpZHRoICA9IGZtdC0+Zm10LnBpeC53aWR0aDsKLQkJd2luLT5oZWlnaHQgPSBmbXQtPmZtdC5waXguaGVpZ2h0OwotCX0KLQotCW1lbXNldChmbXQsIDAsIHNpemVvZigqZm10KSk7Ci0JZm10LT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19PVkVSTEFZOwotCWZtdC0+Zm10Lndpbi53LmxlZnQgICAgPSB3aW4tPng7Ci0JZm10LT5mbXQud2luLncudG9wICAgICA9IHdpbi0+eTsKLQlmbXQtPmZtdC53aW4udy53aWR0aCAgID0gd2luLT53aWR0aDsKLQlmbXQtPmZtdC53aW4udy5oZWlnaHQgID0gd2luLT5oZWlnaHQ7Ci0JZm10LT5mbXQud2luLmNocm9tYWtleSA9IHdpbi0+Y2hyb21ha2V5OwotCWZtdC0+Zm10Lndpbi5jbGlwcyAgICAgPSAodm9pZCBfX3VzZXIgKil3aW4tPmNsaXBzOwotCWZtdC0+Zm10Lndpbi5jbGlwY291bnQgPSB3aW4tPmNsaXBjb3VudDsKLQllcnIyID0gZHJ2KGZpbGUsIFZJRElPQ19TX0ZNVCwgZm10KTsKLQlpZiAoZXJyMiA8IDApCi0JCWRwcmludGsoIlZJRElPQ1NXSU4gLyBWSURJT0NfU19GTVQgIzI6ICVsZFxuIiwgZXJyMik7Ci0KLQlpZiAoZXJyMSAhPSAwICYmIGVycjIgIT0gMCkKLQkJZXJyID0gZXJyMTsKLQllbHNlCi0JCWVyciA9IDA7Ci0Ja2ZyZWUoZm10KTsKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgbm9pbmxpbmUgbG9uZyB2NGwxX2NvbXBhdF90dXJuX3ByZXZpZXdfb25fb2ZmKAotCQkJCQlpbnQgKm9uLAotCQkJCQlzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCQkJdjRsMl9raW9jdGwgZHJ2KQotewotCWxvbmcgZXJyOwotCWVudW0gdjRsMl9idWZfdHlwZSBjYXB0eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwotCi0JaWYgKDAgPT0gKm9uKSB7Ci0JCS8qIGRpcnR5IGhhY2sgdGltZS4gIEJ1dCB2NGwxIGhhcyBubyBTVFJFQU1PRkYKLQkJICogZXF1aXZhbGVudCBpbiB0aGUgQVBJLCBhbmQgdGhpcyBvbmUgYXQKLQkJICogbGVhc3QgY29tZXMgY2xvc2UgLi4uICovCi0JCWRydihmaWxlLCBWSURJT0NfU1RSRUFNT0ZGLCAmY2FwdHlwZSk7Ci0JfQotCWVyciA9IGRydihmaWxlLCBWSURJT0NfT1ZFUkxBWSwgb24pOwotCWlmIChlcnIgPCAwKQotCQlkcHJpbnRrKCJWSURJT0NDQVBUVVJFIC8gVklESU9DX1BSRVZJRVc6ICVsZFxuIiwgZXJyKTsKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgbm9pbmxpbmUgbG9uZyB2NGwxX2NvbXBhdF9nZXRfaW5wdXRfaW5mbygKLQkJCQkJc3RydWN0IHZpZGVvX2NoYW5uZWwgKmNoYW4sCi0JCQkJCXN0cnVjdCBmaWxlICpmaWxlLAotCQkJCQl2NGwyX2tpb2N0bCBkcnYpCi17Ci0JbG9uZyBlcnI7Ci0Jc3RydWN0IHY0bDJfaW5wdXQJaW5wdXQyOwotCXY0bDJfc3RkX2lkICAgIAkJc2lkOwotCi0JbWVtc2V0KCZpbnB1dDIsIDAsIHNpemVvZihpbnB1dDIpKTsKLQlpbnB1dDIuaW5kZXggPSBjaGFuLT5jaGFubmVsOwotCWVyciA9IGRydihmaWxlLCBWSURJT0NfRU5VTUlOUFVULCAmaW5wdXQyKTsKLQlpZiAoZXJyIDwgMCkgewotCQlkcHJpbnRrKCJWSURJT0NHQ0hBTiAvIFZJRElPQ19FTlVNSU5QVVQ6ICIKLQkJCSJjaGFubmVsPSVkIGVycj0lbGRcbiIsIGNoYW4tPmNoYW5uZWwsIGVycik7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0JY2hhbi0+Y2hhbm5lbCA9IGlucHV0Mi5pbmRleDsKLQltZW1jcHkoY2hhbi0+bmFtZSwgaW5wdXQyLm5hbWUsCi0JICAgICAgIG1pbihzaXplb2YoY2hhbi0+bmFtZSksIHNpemVvZihpbnB1dDIubmFtZSkpKTsKLQljaGFuLT5uYW1lW3NpemVvZihjaGFuLT5uYW1lKSAtIDFdID0gMDsKLQljaGFuLT50dW5lcnMgPSAoaW5wdXQyLnR5cGUgPT0gVjRMMl9JTlBVVF9UWVBFX1RVTkVSKSA/IDEgOiAwOwotCWNoYW4tPmZsYWdzID0gKGNoYW4tPnR1bmVycykgPyBWSURFT19WQ19UVU5FUiA6IDA7Ci0Jc3dpdGNoIChpbnB1dDIudHlwZSkgewotCWNhc2UgVjRMMl9JTlBVVF9UWVBFX1RVTkVSOgotCQljaGFuLT50eXBlID0gVklERU9fVFlQRV9UVjsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQljYXNlIFY0TDJfSU5QVVRfVFlQRV9DQU1FUkE6Ci0JCWNoYW4tPnR5cGUgPSBWSURFT19UWVBFX0NBTUVSQTsKLQkJYnJlYWs7Ci0JfQotCWNoYW4tPm5vcm0gPSAwOwotCS8qIE5vdGU6IEdfU1REIG1pZ2h0IG5vdCBiZSBwcmVzZW50IGZvciByYWRpbyByZWNlaXZlcnMsCi0JICogc28gd2Ugc2hvdWxkIGlnbm9yZSBhbnkgZXJyb3JzLiAqLwotCWlmIChkcnYoZmlsZSwgVklESU9DX0dfU1RELCAmc2lkKSA9PSAwKSB7Ci0JCWlmIChzaWQgJiBWNEwyX1NURF9QQUwpCi0JCQljaGFuLT5ub3JtID0gVklERU9fTU9ERV9QQUw7Ci0JCWlmIChzaWQgJiBWNEwyX1NURF9OVFNDKQotCQkJY2hhbi0+bm9ybSA9IFZJREVPX01PREVfTlRTQzsKLQkJaWYgKHNpZCAmIFY0TDJfU1REX1NFQ0FNKQotCQkJY2hhbi0+bm9ybSA9IFZJREVPX01PREVfU0VDQU07Ci0JCWlmIChzaWQgPT0gVjRMMl9TVERfQUxMKQotCQkJY2hhbi0+bm9ybSA9IFZJREVPX01PREVfQVVUTzsKLQl9Ci1kb25lOgotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBub2lubGluZSBsb25nIHY0bDFfY29tcGF0X3NldF9pbnB1dCgKLQkJCQkJc3RydWN0IHZpZGVvX2NoYW5uZWwgKmNoYW4sCi0JCQkJCXN0cnVjdCBmaWxlICpmaWxlLAotCQkJCQl2NGwyX2tpb2N0bCBkcnYpCi17Ci0JbG9uZyBlcnI7Ci0JdjRsMl9zdGRfaWQgc2lkID0gMDsKLQotCWVyciA9IGRydihmaWxlLCBWSURJT0NfU19JTlBVVCwgJmNoYW4tPmNoYW5uZWwpOwotCWlmIChlcnIgPCAwKQotCQlkcHJpbnRrKCJWSURJT0NTQ0hBTiAvIFZJRElPQ19TX0lOUFVUOiAlbGRcbiIsIGVycik7Ci0Jc3dpdGNoIChjaGFuLT5ub3JtKSB7Ci0JY2FzZSBWSURFT19NT0RFX1BBTDoKLQkJc2lkID0gVjRMMl9TVERfUEFMOwotCQlicmVhazsKLQljYXNlIFZJREVPX01PREVfTlRTQzoKLQkJc2lkID0gVjRMMl9TVERfTlRTQzsKLQkJYnJlYWs7Ci0JY2FzZSBWSURFT19NT0RFX1NFQ0FNOgotCQlzaWQgPSBWNEwyX1NURF9TRUNBTTsKLQkJYnJlYWs7Ci0JY2FzZSBWSURFT19NT0RFX0FVVE86Ci0JCXNpZCA9IFY0TDJfU1REX0FMTDsKLQkJYnJlYWs7Ci0JfQotCWlmICgwICE9IHNpZCkgewotCQllcnIgPSBkcnYoZmlsZSwgVklESU9DX1NfU1RELCAmc2lkKTsKLQkJaWYgKGVyciA8IDApCi0JCQlkcHJpbnRrKCJWSURJT0NTQ0hBTiAvIFZJRElPQ19TX1NURDogJWxkXG4iLCBlcnIpOwotCX0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgbm9pbmxpbmUgbG9uZyB2NGwxX2NvbXBhdF9nZXRfcGljdHVyZSgKLQkJCQkJc3RydWN0IHZpZGVvX3BpY3R1cmUgKnBpY3QsCi0JCQkJCXN0cnVjdCBmaWxlICpmaWxlLAotCQkJCQl2NGwyX2tpb2N0bCBkcnYpCi17Ci0JbG9uZyBlcnI7Ci0Jc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQ7Ci0KLQlmbXQgPSBremFsbG9jKHNpemVvZigqZm10KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFmbXQpIHsKLQkJZXJyID0gLUVOT01FTTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlwaWN0LT5icmlnaHRuZXNzID0gZ2V0X3Y0bF9jb250cm9sKGZpbGUsCi0JCQkJCSAgIFY0TDJfQ0lEX0JSSUdIVE5FU1MsIGRydik7Ci0JcGljdC0+aHVlID0gZ2V0X3Y0bF9jb250cm9sKGZpbGUsCi0JCQkJICAgIFY0TDJfQ0lEX0hVRSwgZHJ2KTsKLQlwaWN0LT5jb250cmFzdCA9IGdldF92NGxfY29udHJvbChmaWxlLAotCQkJCQkgVjRMMl9DSURfQ09OVFJBU1QsIGRydik7Ci0JcGljdC0+Y29sb3VyID0gZ2V0X3Y0bF9jb250cm9sKGZpbGUsCi0JCQkJICAgICAgIFY0TDJfQ0lEX1NBVFVSQVRJT04sIGRydik7Ci0JcGljdC0+d2hpdGVuZXNzID0gZ2V0X3Y0bF9jb250cm9sKGZpbGUsCi0JCQkJCSAgVjRMMl9DSURfV0hJVEVORVNTLCBkcnYpOwotCi0JZm10LT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwotCWVyciA9IGRydihmaWxlLCBWSURJT0NfR19GTVQsIGZtdCk7Ci0JaWYgKGVyciA8IDApIHsKLQkJZHByaW50aygiVklESU9DR1BJQ1QgLyBWSURJT0NfR19GTVQ6ICVsZFxuIiwgZXJyKTsKLQkJZ290byBkb25lOwotCX0KLQotCWlmIChmbXQtPmZtdC5waXgud2lkdGgpCi0JewotCQlwaWN0LT5kZXB0aCAgID0gKChmbXQtPmZtdC5waXguYnl0ZXNwZXJsaW5lIDw8IDMpCi0JCQkJICsgKGZtdC0+Zm10LnBpeC53aWR0aCAtIDEpKQotCQkJCSAvIGZtdC0+Zm10LnBpeC53aWR0aDsKLQl9IGVsc2UgewotCQllcnIgPSAtRUlOVkFMOwotCQlnb3RvIGRvbmU7Ci0JfQotCi0JcGljdC0+cGFsZXR0ZSA9IHBpeGVsZm9ybWF0X3RvX3BhbGV0dGUoCi0JCWZtdC0+Zm10LnBpeC5waXhlbGZvcm1hdCk7Ci1kb25lOgotCWtmcmVlKGZtdCk7Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIG5vaW5saW5lIGxvbmcgdjRsMV9jb21wYXRfc2V0X3BpY3R1cmUoCi0JCQkJCXN0cnVjdCB2aWRlb19waWN0dXJlICpwaWN0LAotCQkJCQlzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCQkJdjRsMl9raW9jdGwgZHJ2KQotewotCWxvbmcgZXJyOwotCXN0cnVjdCB2NGwyX2ZyYW1lYnVmZmVyIGZidWY7Ci0JaW50IG1lbV9lcnIgPSAwLCBvdmxfZXJyID0gMDsKLQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdDsKLQotCWZtdCA9IGt6YWxsb2Moc2l6ZW9mKCpmbXQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWZtdCkgewotCQllcnIgPSAtRU5PTUVNOwotCQlyZXR1cm4gZXJyOwotCX0KLQltZW1zZXQoJmZidWYsIDAsIHNpemVvZihmYnVmKSk7Ci0KLQlzZXRfdjRsX2NvbnRyb2woZmlsZSwKLQkJCVY0TDJfQ0lEX0JSSUdIVE5FU1MsIHBpY3QtPmJyaWdodG5lc3MsIGRydik7Ci0Jc2V0X3Y0bF9jb250cm9sKGZpbGUsCi0JCQlWNEwyX0NJRF9IVUUsIHBpY3QtPmh1ZSwgZHJ2KTsKLQlzZXRfdjRsX2NvbnRyb2woZmlsZSwKLQkJCVY0TDJfQ0lEX0NPTlRSQVNULCBwaWN0LT5jb250cmFzdCwgZHJ2KTsKLQlzZXRfdjRsX2NvbnRyb2woZmlsZSwKLQkJCVY0TDJfQ0lEX1NBVFVSQVRJT04sIHBpY3QtPmNvbG91ciwgZHJ2KTsKLQlzZXRfdjRsX2NvbnRyb2woZmlsZSwKLQkJCVY0TDJfQ0lEX1dISVRFTkVTUywgcGljdC0+d2hpdGVuZXNzLCBkcnYpOwotCS8qCi0JICogVjRMMSB1c2VzIHRoaXMgaW9jdGwgdG8gc2V0IGJvdGggbWVtb3J5IGNhcHR1cmUgYW5kIG92ZXJsYXkKLQkgKiBwaXhlbCBmb3JtYXQsIHdoaWxlIFY0TDIgaGFzIHR3byBkaWZmZXJlbnQgaW9jdGxzIGZvciB0aGlzLgotCSAqIFNvbWUgY2FyZHMgbWF5IG5vdCBzdXBwb3J0IG9uZSBvciB0aGUgb3RoZXIsIGFuZCBtYXkgc3VwcG9ydAotCSAqIGRpZmZlcmVudCBwaXhlbCBmb3JtYXRzIGZvciBtZW1vcnkgdnMgb3ZlcmxheS4KLQkgKi8KLQotCWZtdC0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKLQllcnIgPSBkcnYoZmlsZSwgVklESU9DX0dfRk1ULCBmbXQpOwotCS8qIElmIFZJRElPQ19HX0ZNVCBmYWlsZWQsIHRoZW4gdGhlIGRyaXZlciBsaWtlbHkgZG9lc24ndAotCSAgIHN1cHBvcnQgbWVtb3J5IGNhcHR1cmUuICBUcnlpbmcgdG8gc2V0IHRoZSBtZW1vcnkgY2FwdHVyZQotCSAgIHBhcmFtZXRlcnMgd291bGQgYmUgcG9pbnRsZXNzLiAgKi8KLQlpZiAoZXJyIDwgMCkgewotCQlkcHJpbnRrKCJWSURJT0NTUElDVCAvIFZJRElPQ19HX0ZNVDogJWxkXG4iLCBlcnIpOwotCQltZW1fZXJyID0gLTEwMDA7ICAvKiBkaWRuJ3QgZXZlbiB0cnkgKi8KLQl9IGVsc2UgaWYgKGZtdC0+Zm10LnBpeC5waXhlbGZvcm1hdCAhPQotCQkgcGFsZXR0ZV90b19waXhlbGZvcm1hdChwaWN0LT5wYWxldHRlKSkgewotCQlmbXQtPmZtdC5waXgucGl4ZWxmb3JtYXQgPSBwYWxldHRlX3RvX3BpeGVsZm9ybWF0KAotCQkJcGljdC0+cGFsZXR0ZSk7Ci0JCW1lbV9lcnIgPSBkcnYoZmlsZSwgVklESU9DX1NfRk1ULCBmbXQpOwotCQlpZiAobWVtX2VyciA8IDApCi0JCQlkcHJpbnRrKCJWSURJT0NTUElDVCAvIFZJRElPQ19TX0ZNVDogJWRcbiIsCi0JCQkJbWVtX2Vycik7Ci0JfQotCi0JZXJyID0gZHJ2KGZpbGUsIFZJRElPQ19HX0ZCVUYsICZmYnVmKTsKLQkvKiBJZiBWSURJT0NfR19GQlVGIGZhaWxlZCwgdGhlbiB0aGUgZHJpdmVyIGxpa2VseSBkb2Vzbid0Ci0JICAgc3VwcG9ydCBvdmVybGF5LiAgVHJ5aW5nIHRvIHNldCB0aGUgb3ZlcmxheSBwYXJhbWV0ZXJzCi0JICAgd291bGQgYmUgcXVpdGUgcG9pbnRsZXNzLiAgKi8KLQlpZiAoZXJyIDwgMCkgewotCQlkcHJpbnRrKCJWSURJT0NTUElDVCAvIFZJRElPQ19HX0ZCVUY6ICVsZFxuIiwgZXJyKTsKLQkJb3ZsX2VyciA9IC0xMDAwOyAgLyogZGlkbid0IGV2ZW4gdHJ5ICovCi0JfSBlbHNlIGlmIChmYnVmLmZtdC5waXhlbGZvcm1hdCAhPQotCQkgcGFsZXR0ZV90b19waXhlbGZvcm1hdChwaWN0LT5wYWxldHRlKSkgewotCQlmYnVmLmZtdC5waXhlbGZvcm1hdCA9IHBhbGV0dGVfdG9fcGl4ZWxmb3JtYXQoCi0JCQlwaWN0LT5wYWxldHRlKTsKLQkJb3ZsX2VyciA9IGRydihmaWxlLCBWSURJT0NfU19GQlVGLCAmZmJ1Zik7Ci0JCWlmIChvdmxfZXJyIDwgMCkKLQkJCWRwcmludGsoIlZJRElPQ1NQSUNUIC8gVklESU9DX1NfRkJVRjogJWRcbiIsCi0JCQkJb3ZsX2Vycik7Ci0JfQotCWlmIChvdmxfZXJyIDwgMCAmJiBtZW1fZXJyIDwgMCkgewotCQkvKiBpb2N0bCBmYWlsZWQsIGNvdWxkbid0IHNldCBlaXRoZXIgcGFyYW1ldGVyICovCi0JCWlmIChtZW1fZXJyICE9IC0xMDAwKQotCQkJZXJyID0gbWVtX2VycjsKLQkJZWxzZSBpZiAob3ZsX2VyciA9PSAtRVBFUk0pCi0JCQllcnIgPSAwOwotCQllbHNlCi0JCQllcnIgPSBvdmxfZXJyOwotCX0gZWxzZQotCQllcnIgPSAwOwotCWtmcmVlKGZtdCk7Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIG5vaW5saW5lIGxvbmcgdjRsMV9jb21wYXRfZ2V0X3R1bmVyKAotCQkJCQlzdHJ1Y3QgdmlkZW9fdHVuZXIgKnR1biwKLQkJCQkJc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkJCXY0bDJfa2lvY3RsIGRydikKLXsKLQlsb25nIGVycjsKLQlpbnQgaTsKLQlzdHJ1Y3QgdjRsMl90dW5lcgl0dW4yOwotCXN0cnVjdCB2NGwyX3N0YW5kYXJkCXN0ZDI7Ci0JdjRsMl9zdGRfaWQgICAgCQlzaWQ7Ci0KLQltZW1zZXQoJnR1bjIsIDAsIHNpemVvZih0dW4yKSk7Ci0JZXJyID0gZHJ2KGZpbGUsIFZJRElPQ19HX1RVTkVSLCAmdHVuMik7Ci0JaWYgKGVyciA8IDApIHsKLQkJZHByaW50aygiVklESU9DR1RVTkVSIC8gVklESU9DX0dfVFVORVI6ICVsZFxuIiwgZXJyKTsKLQkJZ290byBkb25lOwotCX0KLQltZW1jcHkodHVuLT5uYW1lLCB0dW4yLm5hbWUsCi0JICAgICAgIG1pbihzaXplb2YodHVuLT5uYW1lKSwgc2l6ZW9mKHR1bjIubmFtZSkpKTsKLQl0dW4tPm5hbWVbc2l6ZW9mKHR1bi0+bmFtZSkgLSAxXSA9IDA7Ci0JdHVuLT5yYW5nZWxvdyA9IHR1bjIucmFuZ2Vsb3c7Ci0JdHVuLT5yYW5nZWhpZ2ggPSB0dW4yLnJhbmdlaGlnaDsKLQl0dW4tPmZsYWdzID0gMDsKLQl0dW4tPm1vZGUgPSBWSURFT19NT0RFX0FVVE87Ci0KLQlmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykgewotCQltZW1zZXQoJnN0ZDIsIDAsIHNpemVvZihzdGQyKSk7Ci0JCXN0ZDIuaW5kZXggPSBpOwotCQlpZiAoMCAhPSBkcnYoZmlsZSwgVklESU9DX0VOVU1TVEQsICZzdGQyKSkKLQkJCWJyZWFrOwotCQlpZiAoc3RkMi5pZCAmIFY0TDJfU1REX1BBTCkKLQkJCXR1bi0+ZmxhZ3MgfD0gVklERU9fVFVORVJfUEFMOwotCQlpZiAoc3RkMi5pZCAmIFY0TDJfU1REX05UU0MpCi0JCQl0dW4tPmZsYWdzIHw9IFZJREVPX1RVTkVSX05UU0M7Ci0JCWlmIChzdGQyLmlkICYgVjRMMl9TVERfU0VDQU0pCi0JCQl0dW4tPmZsYWdzIHw9IFZJREVPX1RVTkVSX1NFQ0FNOwotCX0KLQotCS8qIE5vdGU6IEdfU1REIG1pZ2h0IG5vdCBiZSBwcmVzZW50IGZvciByYWRpbyByZWNlaXZlcnMsCi0JICogc28gd2Ugc2hvdWxkIGlnbm9yZSBhbnkgZXJyb3JzLiAqLwotCWlmIChkcnYoZmlsZSwgVklESU9DX0dfU1RELCAmc2lkKSA9PSAwKSB7Ci0JCWlmIChzaWQgJiBWNEwyX1NURF9QQUwpCi0JCQl0dW4tPm1vZGUgPSBWSURFT19NT0RFX1BBTDsKLQkJaWYgKHNpZCAmIFY0TDJfU1REX05UU0MpCi0JCQl0dW4tPm1vZGUgPSBWSURFT19NT0RFX05UU0M7Ci0JCWlmIChzaWQgJiBWNEwyX1NURF9TRUNBTSkKLQkJCXR1bi0+bW9kZSA9IFZJREVPX01PREVfU0VDQU07Ci0JfQotCi0JaWYgKHR1bjIuY2FwYWJpbGl0eSAmIFY0TDJfVFVORVJfQ0FQX0xPVykKLQkJdHVuLT5mbGFncyB8PSBWSURFT19UVU5FUl9MT1c7Ci0JaWYgKHR1bjIucnhzdWJjaGFucyAmIFY0TDJfVFVORVJfU1VCX1NURVJFTykKLQkJdHVuLT5mbGFncyB8PSBWSURFT19UVU5FUl9TVEVSRU9fT047Ci0JdHVuLT5zaWduYWwgPSB0dW4yLnNpZ25hbDsKLWRvbmU6Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIG5vaW5saW5lIGxvbmcgdjRsMV9jb21wYXRfc2VsZWN0X3R1bmVyKAotCQkJCQlzdHJ1Y3QgdmlkZW9fdHVuZXIgKnR1biwKLQkJCQkJc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkJCXY0bDJfa2lvY3RsIGRydikKLXsKLQlsb25nIGVycjsKLQlzdHJ1Y3QgdjRsMl90dW5lcgl0Oy8qODQgYnl0ZXMgb24geDg2XzY0Ki8KLQltZW1zZXQoJnQsIDAsIHNpemVvZih0KSk7Ci0KLQl0LmluZGV4ID0gdHVuLT50dW5lcjsKLQotCWVyciA9IGRydihmaWxlLCBWSURJT0NfU19UVU5FUiwgJnQpOwotCWlmIChlcnIgPCAwKQotCQlkcHJpbnRrKCJWSURJT0NTVFVORVIgLyBWSURJT0NfU19UVU5FUjogJWxkXG4iLCBlcnIpOwotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBub2lubGluZSBsb25nIHY0bDFfY29tcGF0X2dldF9mcmVxdWVuY3koCi0JCQkJCXVuc2lnbmVkIGxvbmcgKmZyZXEsCi0JCQkJCXN0cnVjdCBmaWxlICpmaWxlLAotCQkJCQl2NGwyX2tpb2N0bCBkcnYpCi17Ci0JbG9uZyBlcnI7Ci0Jc3RydWN0IHY0bDJfZnJlcXVlbmN5ICAgZnJlcTI7Ci0JbWVtc2V0KCZmcmVxMiwgMCwgc2l6ZW9mKGZyZXEyKSk7Ci0KLQlmcmVxMi50dW5lciA9IDA7Ci0JZXJyID0gZHJ2KGZpbGUsIFZJRElPQ19HX0ZSRVFVRU5DWSwgJmZyZXEyKTsKLQlpZiAoZXJyIDwgMCkKLQkJZHByaW50aygiVklESU9DR0ZSRVEgLyBWSURJT0NfR19GUkVRVUVOQ1k6ICVsZFxuIiwgZXJyKTsKLQlpZiAoMCA9PSBlcnIpCi0JCSpmcmVxID0gZnJlcTIuZnJlcXVlbmN5OwotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBub2lubGluZSBsb25nIHY0bDFfY29tcGF0X3NldF9mcmVxdWVuY3koCi0JCQkJCXVuc2lnbmVkIGxvbmcgKmZyZXEsCi0JCQkJCXN0cnVjdCBmaWxlICpmaWxlLAotCQkJCQl2NGwyX2tpb2N0bCBkcnYpCi17Ci0JbG9uZyBlcnI7Ci0Jc3RydWN0IHY0bDJfZnJlcXVlbmN5ICAgZnJlcTI7Ci0JbWVtc2V0KCZmcmVxMiwgMCwgc2l6ZW9mKGZyZXEyKSk7Ci0KLQlkcnYoZmlsZSwgVklESU9DX0dfRlJFUVVFTkNZLCAmZnJlcTIpOwotCWZyZXEyLmZyZXF1ZW5jeSA9ICpmcmVxOwotCWVyciA9IGRydihmaWxlLCBWSURJT0NfU19GUkVRVUVOQ1ksICZmcmVxMik7Ci0JaWYgKGVyciA8IDApCi0JCWRwcmludGsoIlZJRElPQ1NGUkVRIC8gVklESU9DX1NfRlJFUVVFTkNZOiAlbGRcbiIsIGVycik7Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIG5vaW5saW5lIGxvbmcgdjRsMV9jb21wYXRfZ2V0X2F1ZGlvKAotCQkJCQlzdHJ1Y3QgdmlkZW9fYXVkaW8gKmF1ZCwKLQkJCQkJc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkJCXY0bDJfa2lvY3RsIGRydikKLXsKLQlsb25nIGVycjsKLQlpbnQgaTsKLQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwJcWN0cmwyOwotCXN0cnVjdCB2NGwyX2F1ZGlvCWF1ZDI7Ci0Jc3RydWN0IHY0bDJfdHVuZXIJdHVuMjsKLQltZW1zZXQoJmF1ZDIsIDAsIHNpemVvZihhdWQyKSk7Ci0KLQllcnIgPSBkcnYoZmlsZSwgVklESU9DX0dfQVVESU8sICZhdWQyKTsKLQlpZiAoZXJyIDwgMCkgewotCQlkcHJpbnRrKCJWSURJT0NHQVVESU8gLyBWSURJT0NfR19BVURJTzogJWxkXG4iLCBlcnIpOwotCQlnb3RvIGRvbmU7Ci0JfQotCW1lbWNweShhdWQtPm5hbWUsIGF1ZDIubmFtZSwKLQkgICAgICAgbWluKHNpemVvZihhdWQtPm5hbWUpLCBzaXplb2YoYXVkMi5uYW1lKSkpOwotCWF1ZC0+bmFtZVtzaXplb2YoYXVkLT5uYW1lKSAtIDFdID0gMDsKLQlhdWQtPmF1ZGlvID0gYXVkMi5pbmRleDsKLQlhdWQtPmZsYWdzID0gMDsKLQlpID0gZ2V0X3Y0bF9jb250cm9sKGZpbGUsIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRSwgZHJ2KTsKLQlpZiAoaSA+PSAwKSB7Ci0JCWF1ZC0+dm9sdW1lID0gaTsKLQkJYXVkLT5mbGFncyB8PSBWSURFT19BVURJT19WT0xVTUU7Ci0JfQotCWkgPSBnZXRfdjRsX2NvbnRyb2woZmlsZSwgVjRMMl9DSURfQVVESU9fQkFTUywgZHJ2KTsKLQlpZiAoaSA+PSAwKSB7Ci0JCWF1ZC0+YmFzcyA9IGk7Ci0JCWF1ZC0+ZmxhZ3MgfD0gVklERU9fQVVESU9fQkFTUzsKLQl9Ci0JaSA9IGdldF92NGxfY29udHJvbChmaWxlLCBWNEwyX0NJRF9BVURJT19UUkVCTEUsIGRydik7Ci0JaWYgKGkgPj0gMCkgewotCQlhdWQtPnRyZWJsZSA9IGk7Ci0JCWF1ZC0+ZmxhZ3MgfD0gVklERU9fQVVESU9fVFJFQkxFOwotCX0KLQlpID0gZ2V0X3Y0bF9jb250cm9sKGZpbGUsIFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0UsIGRydik7Ci0JaWYgKGkgPj0gMCkgewotCQlhdWQtPmJhbGFuY2UgPSBpOwotCQlhdWQtPmZsYWdzIHw9IFZJREVPX0FVRElPX0JBTEFOQ0U7Ci0JfQotCWkgPSBnZXRfdjRsX2NvbnRyb2woZmlsZSwgVjRMMl9DSURfQVVESU9fTVVURSwgZHJ2KTsKLQlpZiAoaSA+PSAwKSB7Ci0JCWlmIChpKQotCQkJYXVkLT5mbGFncyB8PSBWSURFT19BVURJT19NVVRFOwotCQlhdWQtPmZsYWdzIHw9IFZJREVPX0FVRElPX01VVEFCTEU7Ci0JfQotCWF1ZC0+c3RlcCA9IDE7Ci0JcWN0cmwyLmlkID0gVjRMMl9DSURfQVVESU9fVk9MVU1FOwotCWlmIChkcnYoZmlsZSwgVklESU9DX1FVRVJZQ1RSTCwgJnFjdHJsMikgPT0gMCAmJgotCSAgICAhKHFjdHJsMi5mbGFncyAmIFY0TDJfQ1RSTF9GTEFHX0RJU0FCTEVEKSkKLQkJYXVkLT5zdGVwID0gcWN0cmwyLnN0ZXA7Ci0JYXVkLT5tb2RlID0gMDsKLQotCW1lbXNldCgmdHVuMiwgMCwgc2l6ZW9mKHR1bjIpKTsKLQllcnIgPSBkcnYoZmlsZSwgVklESU9DX0dfVFVORVIsICZ0dW4yKTsKLQlpZiAoZXJyIDwgMCkgewotCQlkcHJpbnRrKCJWSURJT0NHQVVESU8gLyBWSURJT0NfR19UVU5FUjogJWxkXG4iLCBlcnIpOwotCQllcnIgPSAwOwotCQlnb3RvIGRvbmU7Ci0JfQotCi0JaWYgKHR1bjIucnhzdWJjaGFucyAmIFY0TDJfVFVORVJfU1VCX0xBTkcyKQotCQlhdWQtPm1vZGUgPSBWSURFT19TT1VORF9MQU5HMSB8IFZJREVPX1NPVU5EX0xBTkcyOwotCWVsc2UgaWYgKHR1bjIucnhzdWJjaGFucyAmIFY0TDJfVFVORVJfU1VCX1NURVJFTykKLQkJYXVkLT5tb2RlID0gVklERU9fU09VTkRfU1RFUkVPOwotCWVsc2UgaWYgKHR1bjIucnhzdWJjaGFucyAmIFY0TDJfVFVORVJfU1VCX01PTk8pCi0JCWF1ZC0+bW9kZSA9IFZJREVPX1NPVU5EX01PTk87Ci1kb25lOgotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBub2lubGluZSBsb25nIHY0bDFfY29tcGF0X3NldF9hdWRpbygKLQkJCQkJc3RydWN0IHZpZGVvX2F1ZGlvICphdWQsCi0JCQkJCXN0cnVjdCBmaWxlICpmaWxlLAotCQkJCQl2NGwyX2tpb2N0bCBkcnYpCi17Ci0JbG9uZyBlcnI7Ci0Jc3RydWN0IHY0bDJfYXVkaW8JYXVkMjsKLQlzdHJ1Y3QgdjRsMl90dW5lcgl0dW4yOwotCi0JbWVtc2V0KCZhdWQyLCAwLCBzaXplb2YoYXVkMikpOwotCW1lbXNldCgmdHVuMiwgMCwgc2l6ZW9mKHR1bjIpKTsKLQotCWF1ZDIuaW5kZXggPSBhdWQtPmF1ZGlvOwotCWVyciA9IGRydihmaWxlLCBWSURJT0NfU19BVURJTywgJmF1ZDIpOwotCWlmIChlcnIgPCAwKSB7Ci0JCWRwcmludGsoIlZJRElPQ1NBVURJTyAvIFZJRElPQ19TX0FVRElPOiAlbGRcbiIsIGVycik7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0KLQlzZXRfdjRsX2NvbnRyb2woZmlsZSwgVjRMMl9DSURfQVVESU9fVk9MVU1FLAotCQkJYXVkLT52b2x1bWUsIGRydik7Ci0Jc2V0X3Y0bF9jb250cm9sKGZpbGUsIFY0TDJfQ0lEX0FVRElPX0JBU1MsCi0JCQlhdWQtPmJhc3MsIGRydik7Ci0Jc2V0X3Y0bF9jb250cm9sKGZpbGUsIFY0TDJfQ0lEX0FVRElPX1RSRUJMRSwKLQkJCWF1ZC0+dHJlYmxlLCBkcnYpOwotCXNldF92NGxfY29udHJvbChmaWxlLCBWNEwyX0NJRF9BVURJT19CQUxBTkNFLAotCQkJYXVkLT5iYWxhbmNlLCBkcnYpOwotCXNldF92NGxfY29udHJvbChmaWxlLCBWNEwyX0NJRF9BVURJT19NVVRFLAotCQkJISEoYXVkLT5mbGFncyAmIFZJREVPX0FVRElPX01VVEUpLCBkcnYpOwotCi0JZXJyID0gZHJ2KGZpbGUsIFZJRElPQ19HX1RVTkVSLCAmdHVuMik7Ci0JaWYgKGVyciA8IDApCi0JCWRwcmludGsoIlZJRElPQ1NBVURJTyAvIFZJRElPQ19HX1RVTkVSOiAlbGRcbiIsIGVycik7Ci0JaWYgKGVyciA9PSAwKSB7Ci0JCXN3aXRjaCAoYXVkLT5tb2RlKSB7Ci0JCWRlZmF1bHQ6Ci0JCWNhc2UgVklERU9fU09VTkRfTU9OTzoKLQkJY2FzZSBWSURFT19TT1VORF9MQU5HMToKLQkJCXR1bjIuYXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9NT05POwotCQkJYnJlYWs7Ci0JCWNhc2UgVklERU9fU09VTkRfU1RFUkVPOgotCQkJdHVuMi5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX1NURVJFTzsKLQkJCWJyZWFrOwotCQljYXNlIFZJREVPX1NPVU5EX0xBTkcyOgotCQkJdHVuMi5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX0xBTkcyOwotCQkJYnJlYWs7Ci0JCX0KLQkJZXJyID0gZHJ2KGZpbGUsIFZJRElPQ19TX1RVTkVSLCAmdHVuMik7Ci0JCWlmIChlcnIgPCAwKQotCQkJZHByaW50aygiVklESU9DU0FVRElPIC8gVklESU9DX1NfVFVORVI6ICVsZFxuIiwgZXJyKTsKLQl9Ci0JZXJyID0gMDsKLWRvbmU6Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIG5vaW5saW5lIGxvbmcgdjRsMV9jb21wYXRfY2FwdHVyZV9mcmFtZSgKLQkJCQkJc3RydWN0IHZpZGVvX21tYXAgKm1tLAotCQkJCQlzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCQkJdjRsMl9raW9jdGwgZHJ2KQotewotCWxvbmcgZXJyOwotCWVudW0gdjRsMl9idWZfdHlwZSAgICAgIGNhcHR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7Ci0Jc3RydWN0IHY0bDJfYnVmZmVyCWJ1ZjsKLQlzdHJ1Y3QgdjRsMl9mb3JtYXQJKmZtdDsKLQotCWZtdCA9IGt6YWxsb2Moc2l6ZW9mKCpmbXQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWZtdCkgewotCQllcnIgPSAtRU5PTUVNOwotCQlyZXR1cm4gZXJyOwotCX0KLQltZW1zZXQoJmJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpOwotCi0JZm10LT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwotCWVyciA9IGRydihmaWxlLCBWSURJT0NfR19GTVQsIGZtdCk7Ci0JaWYgKGVyciA8IDApIHsKLQkJZHByaW50aygiVklESU9DTUNBUFRVUkUgLyBWSURJT0NfR19GTVQ6ICVsZFxuIiwgZXJyKTsKLQkJZ290byBkb25lOwotCX0KLQlpZiAobW0tPndpZHRoICAgIT0gZm10LT5mbXQucGl4LndpZHRoICB8fAotCSAgICBtbS0+aGVpZ2h0ICAhPSBmbXQtPmZtdC5waXguaGVpZ2h0IHx8Ci0JICAgIHBhbGV0dGVfdG9fcGl4ZWxmb3JtYXQobW0tPmZvcm1hdCkgIT0KLQkgICAgZm10LT5mbXQucGl4LnBpeGVsZm9ybWF0KSB7Ci0JCS8qIE5ldyBjYXB0dXJlIGZvcm1hdC4uLiAgKi8KLQkJZm10LT5mbXQucGl4LndpZHRoID0gbW0tPndpZHRoOwotCQlmbXQtPmZtdC5waXguaGVpZ2h0ID0gbW0tPmhlaWdodDsKLQkJZm10LT5mbXQucGl4LnBpeGVsZm9ybWF0ID0KLQkJCXBhbGV0dGVfdG9fcGl4ZWxmb3JtYXQobW0tPmZvcm1hdCk7Ci0JCWZtdC0+Zm10LnBpeC5maWVsZCA9IFY0TDJfRklFTERfQU5ZOwotCQlmbXQtPmZtdC5waXguYnl0ZXNwZXJsaW5lID0gMDsKLQkJZXJyID0gZHJ2KGZpbGUsIFZJRElPQ19TX0ZNVCwgZm10KTsKLQkJaWYgKGVyciA8IDApIHsKLQkJCWRwcmludGsoIlZJRElPQ01DQVBUVVJFIC8gVklESU9DX1NfRk1UOiAlbGRcbiIsIGVycik7Ci0JCQlnb3RvIGRvbmU7Ci0JCX0KLQl9Ci0JYnVmLmluZGV4ID0gbW0tPmZyYW1lOwotCWJ1Zi50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwotCWVyciA9IGRydihmaWxlLCBWSURJT0NfUVVFUllCVUYsICZidWYpOwotCWlmIChlcnIgPCAwKSB7Ci0JCWRwcmludGsoIlZJRElPQ01DQVBUVVJFIC8gVklESU9DX1FVRVJZQlVGOiAlbGRcbiIsIGVycik7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0JZXJyID0gZHJ2KGZpbGUsIFZJRElPQ19RQlVGLCAmYnVmKTsKLQlpZiAoZXJyIDwgMCkgewotCQlkcHJpbnRrKCJWSURJT0NNQ0FQVFVSRSAvIFZJRElPQ19RQlVGOiAlbGRcbiIsIGVycik7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0JZXJyID0gZHJ2KGZpbGUsIFZJRElPQ19TVFJFQU1PTiwgJmNhcHR5cGUpOwotCWlmIChlcnIgPCAwKQotCQlkcHJpbnRrKCJWSURJT0NNQ0FQVFVSRSAvIFZJRElPQ19TVFJFQU1PTjogJWxkXG4iLCBlcnIpOwotZG9uZToKLQlrZnJlZShmbXQpOwotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBub2lubGluZSBsb25nIHY0bDFfY29tcGF0X3N5bmMoCi0JCQkJaW50ICppLAotCQkJCXN0cnVjdCBmaWxlICpmaWxlLAotCQkJCXY0bDJfa2lvY3RsIGRydikKLXsKLQlsb25nIGVycjsKLQllbnVtIHY0bDJfYnVmX3R5cGUgY2FwdHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKLQlzdHJ1Y3QgdjRsMl9idWZmZXIgYnVmOwotCXN0cnVjdCBwb2xsX3dxdWV1ZXMgKnB3cTsKLQotCW1lbXNldCgmYnVmLCAwLCBzaXplb2YoYnVmKSk7Ci0JYnVmLmluZGV4ID0gKmk7Ci0JYnVmLnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7Ci0JZXJyID0gZHJ2KGZpbGUsIFZJRElPQ19RVUVSWUJVRiwgJmJ1Zik7Ci0JaWYgKGVyciA8IDApIHsKLQkJLyogIE5vIHN1Y2ggYnVmZmVyICovCi0JCWRwcmludGsoIlZJRElPQ1NZTkMgLyBWSURJT0NfUVVFUllCVUY6ICVsZFxuIiwgZXJyKTsKLQkJZ290byBkb25lOwotCX0KLQlpZiAoIShidWYuZmxhZ3MgJiBWNEwyX0JVRl9GTEFHX01BUFBFRCkpIHsKLQkJLyogQnVmZmVyIGlzIG5vdCBtYXBwZWQgICovCi0JCWVyciA9IC1FSU5WQUw7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0KLQkvKiBtYWtlIHN1cmUgY2FwdHVyZSBhY3R1YWxseSBydW5zIHNvIHdlIGRvbid0IGJsb2NrIGZvcmV2ZXIgKi8KLQllcnIgPSBkcnYoZmlsZSwgVklESU9DX1NUUkVBTU9OLCAmY2FwdHlwZSk7Ci0JaWYgKGVyciA8IDApIHsKLQkJZHByaW50aygiVklESU9DU1lOQyAvIFZJRElPQ19TVFJFQU1PTjogJWxkXG4iLCBlcnIpOwotCQlnb3RvIGRvbmU7Ci0JfQotCi0JcHdxID0ga21hbGxvYyhzaXplb2YoKnB3cSksIEdGUF9LRVJORUwpOwotCS8qICBMb29wIGFzIGxvbmcgYXMgdGhlIGJ1ZmZlciBpcyBxdWV1ZWQsIGJ1dCBub3QgZG9uZSAgKi8KLQl3aGlsZSAoKGJ1Zi5mbGFncyAmIChWNEwyX0JVRl9GTEFHX1FVRVVFRCB8IFY0TDJfQlVGX0ZMQUdfRE9ORSkpCi0JCQkJCQk9PSBWNEwyX0JVRl9GTEFHX1FVRVVFRCkgewotCQllcnIgPSBwb2xsX29uZShmaWxlLCBwd3EpOwotCQlpZiAoZXJyIDwgMCB8fAkvKiBlcnJvciBvciBzbGVlcCB3YXMgaW50ZXJydXB0ZWQgICovCi0JCSAgICBlcnIgPT0gMCkJLyogdGltZW91dD8gU2hvdWxkbid0IG9jY3VyLiAgKi8KLQkJCWJyZWFrOwotCQllcnIgPSBkcnYoZmlsZSwgVklESU9DX1FVRVJZQlVGLCAmYnVmKTsKLQkJaWYgKGVyciA8IDApCi0JCQlkcHJpbnRrKCJWSURJT0NTWU5DIC8gVklESU9DX1FVRVJZQlVGOiAlbGRcbiIsIGVycik7Ci0JfQotCWtmcmVlKHB3cSk7Ci0JaWYgKCEoYnVmLmZsYWdzICYgVjRMMl9CVUZfRkxBR19ET05FKSkgLyogbm90IGRvbmUgKi8KLQkJZ290byBkb25lOwotCWRvIHsKLQkJZXJyID0gZHJ2KGZpbGUsIFZJRElPQ19EUUJVRiwgJmJ1Zik7Ci0JCWlmIChlcnIgPCAwKQotCQkJZHByaW50aygiVklESU9DU1lOQyAvIFZJRElPQ19EUUJVRjogJWxkXG4iLCBlcnIpOwotCX0gd2hpbGUgKGVyciA9PSAwICYmIGJ1Zi5pbmRleCAhPSAqaSk7Ci1kb25lOgotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBub2lubGluZSBsb25nIHY0bDFfY29tcGF0X2dldF92YmlfZm9ybWF0KAotCQkJCXN0cnVjdCB2YmlfZm9ybWF0ICpmbXQsCi0JCQkJc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkJdjRsMl9raW9jdGwgZHJ2KQotewotCWxvbmcgZXJyOwotCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10MjsKLQotCWZtdDIgPSBremFsbG9jKHNpemVvZigqZm10MiksIEdGUF9LRVJORUwpOwotCWlmICghZm10MikgewotCQllcnIgPSAtRU5PTUVNOwotCQlyZXR1cm4gZXJyOwotCX0KLQlmbXQyLT50eXBlID0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRTsKLQotCWVyciA9IGRydihmaWxlLCBWSURJT0NfR19GTVQsIGZtdDIpOwotCWlmIChlcnIgPCAwKSB7Ci0JCWRwcmludGsoIlZJRElPQ0dWQklGTVQgLyBWSURJT0NfR19GTVQ6ICVsZFxuIiwgZXJyKTsKLQkJZ290byBkb25lOwotCX0KLQlpZiAoZm10Mi0+Zm10LnZiaS5zYW1wbGVfZm9ybWF0ICE9IFY0TDJfUElYX0ZNVF9HUkVZKSB7Ci0JCWVyciA9IC1FSU5WQUw7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0JbWVtc2V0KGZtdCwgMCwgc2l6ZW9mKCpmbXQpKTsKLQlmbXQtPnNhbXBsZXNfcGVyX2xpbmUgPSBmbXQyLT5mbXQudmJpLnNhbXBsZXNfcGVyX2xpbmU7Ci0JZm10LT5zYW1wbGluZ19yYXRlICAgID0gZm10Mi0+Zm10LnZiaS5zYW1wbGluZ19yYXRlOwotCWZtdC0+c2FtcGxlX2Zvcm1hdCAgICA9IFZJREVPX1BBTEVUVEVfUkFXOwotCWZtdC0+c3RhcnRbMF0gICAgICAgICA9IGZtdDItPmZtdC52Ymkuc3RhcnRbMF07Ci0JZm10LT5jb3VudFswXSAgICAgICAgID0gZm10Mi0+Zm10LnZiaS5jb3VudFswXTsKLQlmbXQtPnN0YXJ0WzFdICAgICAgICAgPSBmbXQyLT5mbXQudmJpLnN0YXJ0WzFdOwotCWZtdC0+Y291bnRbMV0gICAgICAgICA9IGZtdDItPmZtdC52YmkuY291bnRbMV07Ci0JZm10LT5mbGFncyAgICAgICAgICAgID0gZm10Mi0+Zm10LnZiaS5mbGFncyAmIDB4MDM7Ci1kb25lOgotCWtmcmVlKGZtdDIpOwotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBub2lubGluZSBsb25nIHY0bDFfY29tcGF0X3NldF92YmlfZm9ybWF0KAotCQkJCXN0cnVjdCB2YmlfZm9ybWF0ICpmbXQsCi0JCQkJc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkJdjRsMl9raW9jdGwgZHJ2KQotewotCWxvbmcgZXJyOwotCXN0cnVjdCB2NGwyX2Zvcm1hdAkqZm10MiA9IE5VTEw7Ci0KLQlpZiAoVklERU9fUEFMRVRURV9SQVcgIT0gZm10LT5zYW1wbGVfZm9ybWF0KSB7Ci0JCWVyciA9IC1FSU5WQUw7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JZm10MiA9IGt6YWxsb2Moc2l6ZW9mKCpmbXQyKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFmbXQyKSB7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCXJldHVybiBlcnI7Ci0JfQotCWZtdDItPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFOwotCWZtdDItPmZtdC52Ymkuc2FtcGxlc19wZXJfbGluZSA9IGZtdC0+c2FtcGxlc19wZXJfbGluZTsKLQlmbXQyLT5mbXQudmJpLnNhbXBsaW5nX3JhdGUgICAgPSBmbXQtPnNhbXBsaW5nX3JhdGU7Ci0JZm10Mi0+Zm10LnZiaS5zYW1wbGVfZm9ybWF0ICAgID0gVjRMMl9QSVhfRk1UX0dSRVk7Ci0JZm10Mi0+Zm10LnZiaS5zdGFydFswXSAgICAgICAgID0gZm10LT5zdGFydFswXTsKLQlmbXQyLT5mbXQudmJpLmNvdW50WzBdICAgICAgICAgPSBmbXQtPmNvdW50WzBdOwotCWZtdDItPmZtdC52Ymkuc3RhcnRbMV0gICAgICAgICA9IGZtdC0+c3RhcnRbMV07Ci0JZm10Mi0+Zm10LnZiaS5jb3VudFsxXSAgICAgICAgID0gZm10LT5jb3VudFsxXTsKLQlmbXQyLT5mbXQudmJpLmZsYWdzICAgICAgICAgICAgPSBmbXQtPmZsYWdzOwotCWVyciA9IGRydihmaWxlLCBWSURJT0NfVFJZX0ZNVCwgZm10Mik7Ci0JaWYgKGVyciA8IDApIHsKLQkJZHByaW50aygiVklESU9DU1ZCSUZNVCAvIFZJRElPQ19UUllfRk1UOiAlbGRcbiIsIGVycik7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0KLQlpZiAoZm10Mi0+Zm10LnZiaS5zYW1wbGVzX3Blcl9saW5lICE9IGZtdC0+c2FtcGxlc19wZXJfbGluZSB8fAotCSAgICBmbXQyLT5mbXQudmJpLnNhbXBsaW5nX3JhdGUgICAgIT0gZm10LT5zYW1wbGluZ19yYXRlICAgIHx8Ci0JICAgIGZtdDItPmZtdC52Ymkuc2FtcGxlX2Zvcm1hdCAgICAhPSBWNEwyX1BJWF9GTVRfR1JFWSAgICAgfHwKLQkgICAgZm10Mi0+Zm10LnZiaS5zdGFydFswXSAgICAgICAgICE9IGZtdC0+c3RhcnRbMF0gICAgICAgICB8fAotCSAgICBmbXQyLT5mbXQudmJpLmNvdW50WzBdICAgICAgICAgIT0gZm10LT5jb3VudFswXSAgICAgICAgIHx8Ci0JICAgIGZtdDItPmZtdC52Ymkuc3RhcnRbMV0gICAgICAgICAhPSBmbXQtPnN0YXJ0WzFdICAgICAgICAgfHwKLQkgICAgZm10Mi0+Zm10LnZiaS5jb3VudFsxXSAgICAgICAgICE9IGZtdC0+Y291bnRbMV0gICAgICAgICB8fAotCSAgICBmbXQyLT5mbXQudmJpLmZsYWdzICAgICAgICAgICAgIT0gZm10LT5mbGFncykgewotCQllcnIgPSAtRUlOVkFMOwotCQlnb3RvIGRvbmU7Ci0JfQotCWVyciA9IGRydihmaWxlLCBWSURJT0NfU19GTVQsIGZtdDIpOwotCWlmIChlcnIgPCAwKQotCQlkcHJpbnRrKCJWSURJT0NTVkJJRk1UIC8gVklESU9DX1NfRk1UOiAlbGRcbiIsIGVycik7Ci1kb25lOgotCWtmcmVlKGZtdDIpOwotCXJldHVybiBlcnI7Ci19Ci0KLS8qCi0gKglUaGlzIGZ1bmN0aW9uIGlzIGV4cG9ydGVkLgotICovCi1sb25nCi12NGxfY29tcGF0X3RyYW5zbGF0ZV9pb2N0bChzdHJ1Y3QgZmlsZQkJKmZpbGUsCi0JCQkgICBpbnQJCQljbWQsCi0JCQkgICB2b2lkCQkJKmFyZywKLQkJCSAgIHY0bDJfa2lvY3RsICAgICAgICAgIGRydikKLXsKLQlsb25nIGVycjsKLQotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBWSURJT0NHQ0FQOgkvKiBjYXBhYmlsaXR5ICovCi0JCWVyciA9IHY0bDFfY29tcGF0X2dldF9jYXBhYmlsaXRpZXMoYXJnLCBmaWxlLCBkcnYpOwotCQlicmVhazsKLQljYXNlIFZJRElPQ0dGQlVGOiAvKiAgZ2V0IGZyYW1lIGJ1ZmZlciAgKi8KLQkJZXJyID0gdjRsMV9jb21wYXRfZ2V0X2ZyYW1lX2J1ZmZlcihhcmcsIGZpbGUsIGRydik7Ci0JCWJyZWFrOwotCWNhc2UgVklESU9DU0ZCVUY6IC8qICBzZXQgZnJhbWUgYnVmZmVyICAqLwotCQllcnIgPSB2NGwxX2NvbXBhdF9zZXRfZnJhbWVfYnVmZmVyKGFyZywgZmlsZSwgZHJ2KTsKLQkJYnJlYWs7Ci0JY2FzZSBWSURJT0NHV0lOOiAvKiAgZ2V0IHdpbmRvdyBvciBjYXB0dXJlIGRpbWVuc2lvbnMgICovCi0JCWVyciA9IHY0bDFfY29tcGF0X2dldF93aW5fY2FwX2RpbWVuc2lvbnMoYXJnLCBmaWxlLCBkcnYpOwotCQlicmVhazsKLQljYXNlIFZJRElPQ1NXSU46IC8qICBzZXQgd2luZG93IGFuZC9vciBjYXB0dXJlIGRpbWVuc2lvbnMgICovCi0JCWVyciA9IHY0bDFfY29tcGF0X3NldF93aW5fY2FwX2RpbWVuc2lvbnMoYXJnLCBmaWxlLCBkcnYpOwotCQlicmVhazsKLQljYXNlIFZJRElPQ0NBUFRVUkU6IC8qICB0dXJuIG9uL29mZiBwcmV2aWV3ICAqLwotCQllcnIgPSB2NGwxX2NvbXBhdF90dXJuX3ByZXZpZXdfb25fb2ZmKGFyZywgZmlsZSwgZHJ2KTsKLQkJYnJlYWs7Ci0JY2FzZSBWSURJT0NHQ0hBTjogLyogIGdldCBpbnB1dCBpbmZvcm1hdGlvbiAgKi8KLQkJZXJyID0gdjRsMV9jb21wYXRfZ2V0X2lucHV0X2luZm8oYXJnLCBmaWxlLCBkcnYpOwotCQlicmVhazsKLQljYXNlIFZJRElPQ1NDSEFOOiAvKiAgc2V0IGlucHV0ICAqLwotCQllcnIgPSB2NGwxX2NvbXBhdF9zZXRfaW5wdXQoYXJnLCBmaWxlLCBkcnYpOwotCQlicmVhazsKLQljYXNlIFZJRElPQ0dQSUNUOiAvKiAgZ2V0IHRvbmUgY29udHJvbHMgJiBwYXJ0aWFsIGNhcHR1cmUgZm9ybWF0ICAqLwotCQllcnIgPSB2NGwxX2NvbXBhdF9nZXRfcGljdHVyZShhcmcsIGZpbGUsIGRydik7Ci0JCWJyZWFrOwotCWNhc2UgVklESU9DU1BJQ1Q6IC8qICBzZXQgdG9uZSBjb250cm9scyAmIHBhcnRpYWwgY2FwdHVyZSBmb3JtYXQgICovCi0JCWVyciA9IHY0bDFfY29tcGF0X3NldF9waWN0dXJlKGFyZywgZmlsZSwgZHJ2KTsKLQkJYnJlYWs7Ci0JY2FzZSBWSURJT0NHVFVORVI6IC8qICBnZXQgdHVuZXIgaW5mb3JtYXRpb24gICovCi0JCWVyciA9IHY0bDFfY29tcGF0X2dldF90dW5lcihhcmcsIGZpbGUsIGRydik7Ci0JCWJyZWFrOwotCWNhc2UgVklESU9DU1RVTkVSOiAvKiAgc2VsZWN0IGEgdHVuZXIgaW5wdXQgICovCi0JCWVyciA9IHY0bDFfY29tcGF0X3NlbGVjdF90dW5lcihhcmcsIGZpbGUsIGRydik7Ci0JCWJyZWFrOwotCWNhc2UgVklESU9DR0ZSRVE6IC8qICBnZXQgZnJlcXVlbmN5ICAqLwotCQllcnIgPSB2NGwxX2NvbXBhdF9nZXRfZnJlcXVlbmN5KGFyZywgZmlsZSwgZHJ2KTsKLQkJYnJlYWs7Ci0JY2FzZSBWSURJT0NTRlJFUTogLyogIHNldCBmcmVxdWVuY3kgICovCi0JCWVyciA9IHY0bDFfY29tcGF0X3NldF9mcmVxdWVuY3koYXJnLCBmaWxlLCBkcnYpOwotCQlicmVhazsKLQljYXNlIFZJRElPQ0dBVURJTzogLyogIGdldCBhdWRpbyBwcm9wZXJ0aWVzL2NvbnRyb2xzICAqLwotCQllcnIgPSB2NGwxX2NvbXBhdF9nZXRfYXVkaW8oYXJnLCBmaWxlLCBkcnYpOwotCQlicmVhazsKLQljYXNlIFZJRElPQ1NBVURJTzogLyogIHNldCBhdWRpbyBjb250cm9scyAgKi8KLQkJZXJyID0gdjRsMV9jb21wYXRfc2V0X2F1ZGlvKGFyZywgZmlsZSwgZHJ2KTsKLQkJYnJlYWs7Ci0JY2FzZSBWSURJT0NNQ0FQVFVSRTogLyogIGNhcHR1cmUgYSBmcmFtZSAgKi8KLQkJZXJyID0gdjRsMV9jb21wYXRfY2FwdHVyZV9mcmFtZShhcmcsIGZpbGUsIGRydik7Ci0JCWJyZWFrOwotCWNhc2UgVklESU9DU1lOQzogLyogIHdhaXQgZm9yIGEgZnJhbWUgICovCi0JCWVyciA9IHY0bDFfY29tcGF0X3N5bmMoYXJnLCBmaWxlLCBkcnYpOwotCQlicmVhazsKLQljYXNlIFZJRElPQ0dWQklGTVQ6IC8qIHF1ZXJ5IFZCSSBkYXRhIGNhcHR1cmUgZm9ybWF0ICovCi0JCWVyciA9IHY0bDFfY29tcGF0X2dldF92YmlfZm9ybWF0KGFyZywgZmlsZSwgZHJ2KTsKLQkJYnJlYWs7Ci0JY2FzZSBWSURJT0NTVkJJRk1UOgotCQllcnIgPSB2NGwxX2NvbXBhdF9zZXRfdmJpX2Zvcm1hdChhcmcsIGZpbGUsIGRydik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWVyciA9IC1FTk9JT0NUTENNRDsKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIGVycjsKLX0KLUVYUE9SVF9TWU1CT0wodjRsX2NvbXBhdF90cmFuc2xhdGVfaW9jdGwpOwotCi0vKgotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1iYXNpYy1vZmZzZXQ6IDgKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWNvbW1vbi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWNvbW1vbi5jCmluZGV4IGI1ZWIxZjMuLjNmMDg3MWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1jb21tb24uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItY29tbW9uLmMKQEAgLTE1MCw3ICsxNTAsNyBAQAogICAgc3RydWN0IHY0bDJfcXVlcnljdHJsIGFuZCB0aGUgYXZhaWxhYmxlIG1lbnUgaXRlbXMuIE5vdGUgdGhhdAogICAgbWVudV9pdGVtcyBtYXkgYmUgTlVMTCwgaW4gdGhhdCBjYXNlIGl0IGlzIGlnbm9yZWQuICovCiBpbnQgdjRsMl9jdHJsX2NoZWNrKHN0cnVjdCB2NGwyX2V4dF9jb250cm9sICpjdHJsLCBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjdHJsLAotCQljb25zdCBjaGFyICoqbWVudV9pdGVtcykKKwkJY29uc3QgY2hhciAqIGNvbnN0ICptZW51X2l0ZW1zKQogewogCWlmIChxY3RybC0+ZmxhZ3MgJiBWNEwyX0NUUkxfRkxBR19ESVNBQkxFRCkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xOTksNyArMTk5LDcgQEAKICAgIElmIG1lbnVfaXRlbXMgaXMgTlVMTCwgdGhlbiB0aGUgbWVudSBpdGVtcyBhcmUgcmV0cmlldmVkIHVzaW5nCiAgICB2NGwyX2N0cmxfZ2V0X21lbnUuICovCiBpbnQgdjRsMl9jdHJsX3F1ZXJ5X21lbnUoc3RydWN0IHY0bDJfcXVlcnltZW51ICpxbWVudSwgc3RydWN0IHY0bDJfcXVlcnljdHJsICpxY3RybCwKLQkgICAgICAgY29uc3QgY2hhciAqKm1lbnVfaXRlbXMpCisJICAgICAgIGNvbnN0IGNoYXIgKiBjb25zdCAqbWVudV9pdGVtcykKIHsKIAlpbnQgaTsKIApAQCAtMjIyLDcgKzIyMiw3IEBACiAgICBVc2UgdGhpcyBpZiB0aGVyZSBhcmUgJ2hvbGVzJyBpbiB0aGUgbGlzdCBvZiB2YWxpZCBtZW51IGl0ZW1zLiAqLwogaW50IHY0bDJfY3RybF9xdWVyeV9tZW51X3ZhbGlkX2l0ZW1zKHN0cnVjdCB2NGwyX3F1ZXJ5bWVudSAqcW1lbnUsIGNvbnN0IHUzMiAqaWRzKQogewotCWNvbnN0IGNoYXIgKiptZW51X2l0ZW1zID0gdjRsMl9jdHJsX2dldF9tZW51KHFtZW51LT5pZCk7CisJY29uc3QgY2hhciAqIGNvbnN0ICptZW51X2l0ZW1zID0gdjRsMl9jdHJsX2dldF9tZW51KHFtZW51LT5pZCk7CiAKIAlxbWVudS0+cmVzZXJ2ZWQgPSAwOwogCWlmIChtZW51X2l0ZW1zID09IE5VTEwgfHwgaWRzID09IE5VTEwpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItY29tcGF0LWlvY3RsMzIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1jb21wYXQtaW9jdGwzMi5jCmluZGV4IGUzMGU4ZGYuLmRjODJlYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1jb21wYXQtaW9jdGwzMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1jb21wYXQtaW9jdGwzMi5jCkBAIC0xNSwyMTkgKzE1LDEyIEBACiAKICNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KICNkZWZpbmUgX19PTERfVklESU9DXyAvKiBUbyBhbGxvdyBmaXhpbmcgb2xkIGNhbGxzKi8KLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KIAogI2lmZGVmIENPTkZJR19DT01QQVQKIAotI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAotc3RydWN0IHZpZGVvX3R1bmVyMzIgewotCWNvbXBhdF9pbnRfdCB0dW5lcjsKLQljaGFyIG5hbWVbMzJdOwotCWNvbXBhdF91bG9uZ190IHJhbmdlbG93LCByYW5nZWhpZ2g7Ci0JdTMyIGZsYWdzOwkvKiBJdCBpcyByZWFsbHkgdTMyIGluIHZpZGVvZGV2LmggKi8KLQl1MTYgbW9kZSwgc2lnbmFsOwotfTsKLQotc3RhdGljIGludCBnZXRfdmlkZW9fdHVuZXIzMihzdHJ1Y3QgdmlkZW9fdHVuZXIgKmtwLCBzdHJ1Y3QgdmlkZW9fdHVuZXIzMiBfX3VzZXIgKnVwKQotewotCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCB1cCwgc2l6ZW9mKHN0cnVjdCB2aWRlb190dW5lcjMyKSkgfHwKLQkJZ2V0X3VzZXIoa3AtPnR1bmVyLCAmdXAtPnR1bmVyKSB8fAotCQljb3B5X2Zyb21fdXNlcihrcC0+bmFtZSwgdXAtPm5hbWUsIDMyKSB8fAotCQlnZXRfdXNlcihrcC0+cmFuZ2Vsb3csICZ1cC0+cmFuZ2Vsb3cpIHx8Ci0JCWdldF91c2VyKGtwLT5yYW5nZWhpZ2gsICZ1cC0+cmFuZ2VoaWdoKSB8fAotCQlnZXRfdXNlcihrcC0+ZmxhZ3MsICZ1cC0+ZmxhZ3MpIHx8Ci0JCWdldF91c2VyKGtwLT5tb2RlLCAmdXAtPm1vZGUpIHx8Ci0JCWdldF91c2VyKGtwLT5zaWduYWwsICZ1cC0+c2lnbmFsKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcHV0X3ZpZGVvX3R1bmVyMzIoc3RydWN0IHZpZGVvX3R1bmVyICprcCwgc3RydWN0IHZpZGVvX3R1bmVyMzIgX191c2VyICp1cCkKLXsKLQlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIHVwLCBzaXplb2Yoc3RydWN0IHZpZGVvX3R1bmVyMzIpKSB8fAotCQlwdXRfdXNlcihrcC0+dHVuZXIsICZ1cC0+dHVuZXIpIHx8Ci0JCWNvcHlfdG9fdXNlcih1cC0+bmFtZSwga3AtPm5hbWUsIDMyKSB8fAotCQlwdXRfdXNlcihrcC0+cmFuZ2Vsb3csICZ1cC0+cmFuZ2Vsb3cpIHx8Ci0JCXB1dF91c2VyKGtwLT5yYW5nZWhpZ2gsICZ1cC0+cmFuZ2VoaWdoKSB8fAotCQlwdXRfdXNlcihrcC0+ZmxhZ3MsICZ1cC0+ZmxhZ3MpIHx8Ci0JCXB1dF91c2VyKGtwLT5tb2RlLCAmdXAtPm1vZGUpIHx8Ci0JCXB1dF91c2VyKGtwLT5zaWduYWwsICZ1cC0+c2lnbmFsKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCXJldHVybiAwOwotfQotCi1zdHJ1Y3QgdmlkZW9fYnVmZmVyMzIgewotCWNvbXBhdF9jYWRkcl90IGJhc2U7Ci0JY29tcGF0X2ludF90IGhlaWdodCwgd2lkdGgsIGRlcHRoLCBieXRlc3BlcmxpbmU7Ci19OwotCi1zdGF0aWMgaW50IGdldF92aWRlb19idWZmZXIzMihzdHJ1Y3QgdmlkZW9fYnVmZmVyICprcCwgc3RydWN0IHZpZGVvX2J1ZmZlcjMyIF9fdXNlciAqdXApCi17Ci0JdTMyIHRtcDsKLQotCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCB1cCwgc2l6ZW9mKHN0cnVjdCB2aWRlb19idWZmZXIzMikpIHx8Ci0JCWdldF91c2VyKHRtcCwgJnVwLT5iYXNlKSB8fAotCQlnZXRfdXNlcihrcC0+aGVpZ2h0LCAmdXAtPmhlaWdodCkgfHwKLQkJZ2V0X3VzZXIoa3AtPndpZHRoLCAmdXAtPndpZHRoKSB8fAotCQlnZXRfdXNlcihrcC0+ZGVwdGgsICZ1cC0+ZGVwdGgpIHx8Ci0JCWdldF91c2VyKGtwLT5ieXRlc3BlcmxpbmUsICZ1cC0+Ynl0ZXNwZXJsaW5lKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCi0JLyogVGhpcyBpcyBhY3R1YWxseSBhIHBoeXNpY2FsIGFkZHJlc3Mgc3RvcmVkCi0JICogYXMgYSB2b2lkIHBvaW50ZXIuCi0JICovCi0Ja3AtPmJhc2UgPSAodm9pZCAqKSh1bnNpZ25lZCBsb25nKSB0bXA7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBwdXRfdmlkZW9fYnVmZmVyMzIoc3RydWN0IHZpZGVvX2J1ZmZlciAqa3AsIHN0cnVjdCB2aWRlb19idWZmZXIzMiBfX3VzZXIgKnVwKQotewotCXUzMiB0bXAgPSAodTMyKSgodW5zaWduZWQgbG9uZylrcC0+YmFzZSk7Ci0KLQlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIHVwLCBzaXplb2Yoc3RydWN0IHZpZGVvX2J1ZmZlcjMyKSkgfHwKLQkJcHV0X3VzZXIodG1wLCAmdXAtPmJhc2UpIHx8Ci0JCXB1dF91c2VyKGtwLT5oZWlnaHQsICZ1cC0+aGVpZ2h0KSB8fAotCQlwdXRfdXNlcihrcC0+d2lkdGgsICZ1cC0+d2lkdGgpIHx8Ci0JCXB1dF91c2VyKGtwLT5kZXB0aCwgJnVwLT5kZXB0aCkgfHwKLQkJcHV0X3VzZXIoa3AtPmJ5dGVzcGVybGluZSwgJnVwLT5ieXRlc3BlcmxpbmUpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0cnVjdCB2aWRlb19jbGlwMzIgewotCXMzMiB4LCB5LCB3aWR0aCwgaGVpZ2h0OwkvKiBJdCdzIHJlYWxseSBzMzIgaW4gdmlkZW9kZXYuaCAqLwotCWNvbXBhdF9jYWRkcl90IG5leHQ7Ci19OwotCi1zdHJ1Y3QgdmlkZW9fd2luZG93MzIgewotCXUzMiB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBjaHJvbWFrZXksIGZsYWdzOwotCWNvbXBhdF9jYWRkcl90IGNsaXBzOwotCWNvbXBhdF9pbnRfdCBjbGlwY291bnQ7Ci19OwotCi1zdGF0aWMgaW50IGdldF92aWRlb193aW5kb3czMihzdHJ1Y3QgdmlkZW9fd2luZG93ICprcCwgc3RydWN0IHZpZGVvX3dpbmRvdzMyIF9fdXNlciAqdXApCi17Ci0Jc3RydWN0IHZpZGVvX2NsaXAgX191c2VyICp1Y2xpcHM7Ci0Jc3RydWN0IHZpZGVvX2NsaXAgX191c2VyICprY2xpcHM7Ci0JY29tcGF0X2NhZGRyX3QgcDsKLQlpbnQgbmNsaXBzOwotCi0JaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIHVwLCBzaXplb2Yoc3RydWN0IHZpZGVvX3dpbmRvdzMyKSkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JaWYgKGdldF91c2VyKG5jbGlwcywgJnVwLT5jbGlwY291bnQpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCB1cCwgc2l6ZW9mKHN0cnVjdCB2aWRlb193aW5kb3czMikpIHx8Ci0JICAgIGdldF91c2VyKGtwLT54LCAmdXAtPngpIHx8Ci0JICAgIGdldF91c2VyKGtwLT55LCAmdXAtPnkpIHx8Ci0JICAgIGdldF91c2VyKGtwLT53aWR0aCwgJnVwLT53aWR0aCkgfHwKLQkgICAgZ2V0X3VzZXIoa3AtPmhlaWdodCwgJnVwLT5oZWlnaHQpIHx8Ci0JICAgIGdldF91c2VyKGtwLT5jaHJvbWFrZXksICZ1cC0+Y2hyb21ha2V5KSB8fAotCSAgICBnZXRfdXNlcihrcC0+ZmxhZ3MsICZ1cC0+ZmxhZ3MpIHx8Ci0JICAgIGdldF91c2VyKGtwLT5jbGlwY291bnQsICZ1cC0+Y2xpcGNvdW50KSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQluY2xpcHMgPSBrcC0+Y2xpcGNvdW50OwotCWtwLT5jbGlwcyA9IE5VTEw7Ci0KLQlpZiAobmNsaXBzID09IDApCi0JCXJldHVybiAwOwotCWlmIChnZXRfdXNlcihwLCAmdXAtPmNsaXBzKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JdWNsaXBzID0gY29tcGF0X3B0cihwKTsKLQotCS8qIElmIG5jbGlwcyA8IDAsIHRoZW4gaXQgaXMgYSBjbGlwcGluZyBiaXRtYXAgb2Ygc2l6ZQotCSAgIFZJREVPX0NMSVBNQVBfU0laRSAqLwotCWlmIChuY2xpcHMgPCAwKSB7Ci0JCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCB1Y2xpcHMsIFZJREVPX0NMSVBNQVBfU0laRSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJa3AtPmNsaXBzID0gY29tcGF0X2FsbG9jX3VzZXJfc3BhY2UoVklERU9fQ0xJUE1BUF9TSVpFKTsKLQkJaWYgKGNvcHlfaW5fdXNlcihrcC0+Y2xpcHMsIHVjbGlwcywgVklERU9fQ0xJUE1BUF9TSVpFKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQkvKiBPdGhlcndpc2UgaXQgaXMgYW4gYXJyYXkgb2YgdmlkZW9fY2xpcCBzdHJ1Y3RzLiAqLwotCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCB1Y2xpcHMsIG5jbGlwcyAqIHNpemVvZihzdHJ1Y3QgdmlkZW9fY2xpcCkpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCWtwLT5jbGlwcyA9IGNvbXBhdF9hbGxvY191c2VyX3NwYWNlKG5jbGlwcyAqIHNpemVvZihzdHJ1Y3QgdmlkZW9fY2xpcCkpOwotCWtjbGlwcyA9IGtwLT5jbGlwczsKLQl3aGlsZSAobmNsaXBzLS0pIHsKLQkJaW50IGVycjsKLQotCQllcnIgPSBjb3B5X2luX3VzZXIoJmtjbGlwcy0+eCwgJnVjbGlwcy0+eCwgc2l6ZW9mKGtjbGlwcy0+eCkpOwotCQllcnIgfD0gY29weV9pbl91c2VyKCZrY2xpcHMtPnksICZ1Y2xpcHMtPnksIHNpemVvZihrY2xpcHMtPnkpKTsKLQkJZXJyIHw9IGNvcHlfaW5fdXNlcigma2NsaXBzLT53aWR0aCwgJnVjbGlwcy0+d2lkdGgsIHNpemVvZihrY2xpcHMtPndpZHRoKSk7Ci0JCWVyciB8PSBjb3B5X2luX3VzZXIoJmtjbGlwcy0+aGVpZ2h0LCAmdWNsaXBzLT5oZWlnaHQsIHNpemVvZihrY2xpcHMtPmhlaWdodCkpOwotCQlrY2xpcHMtPm5leHQgPSBOVUxMOwotCQlpZiAoZXJyKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCWtjbGlwcysrOwotCQl1Y2xpcHMrKzsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIFlvdSBnZXQgYmFjayBldmVyeXRoaW5nIGV4Y2VwdCB0aGUgY2xpcHMuLi4gKi8KLXN0YXRpYyBpbnQgcHV0X3ZpZGVvX3dpbmRvdzMyKHN0cnVjdCB2aWRlb193aW5kb3cgKmtwLCBzdHJ1Y3QgdmlkZW9fd2luZG93MzIgX191c2VyICp1cCkKLXsKLQlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIHVwLCBzaXplb2Yoc3RydWN0IHZpZGVvX3dpbmRvdzMyKSkgfHwKLQkJcHV0X3VzZXIoa3AtPngsICZ1cC0+eCkgfHwKLQkJcHV0X3VzZXIoa3AtPnksICZ1cC0+eSkgfHwKLQkJcHV0X3VzZXIoa3AtPndpZHRoLCAmdXAtPndpZHRoKSB8fAotCQlwdXRfdXNlcihrcC0+aGVpZ2h0LCAmdXAtPmhlaWdodCkgfHwKLQkJcHV0X3VzZXIoa3AtPmNocm9tYWtleSwgJnVwLT5jaHJvbWFrZXkpIHx8Ci0JCXB1dF91c2VyKGtwLT5mbGFncywgJnVwLT5mbGFncykgfHwKLQkJcHV0X3VzZXIoa3AtPmNsaXBjb3VudCwgJnVwLT5jbGlwY291bnQpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0cnVjdCB2aWRlb19jb2RlMzIgewotCWNoYXIJCWxvYWR3aGF0WzE2XTsJLyogbmFtZSBvciB0YWcgb2YgZmlsZSBiZWluZyBwYXNzZWQgKi8KLQljb21wYXRfaW50X3QJZGF0YXNpemU7Ci0JY29tcGF0X3VwdHJfdAlkYXRhOwotfTsKLQotc3RhdGljIHN0cnVjdCB2aWRlb19jb2RlIF9fdXNlciAqZ2V0X21pY3JvY29kZTMyKHN0cnVjdCB2aWRlb19jb2RlMzIgKmtwKQotewotCXN0cnVjdCB2aWRlb19jb2RlIF9fdXNlciAqdXA7Ci0KLQl1cCA9IGNvbXBhdF9hbGxvY191c2VyX3NwYWNlKHNpemVvZigqdXApKTsKLQotCS8qCi0JICogTk9URSEgV2UgZG9uJ3QgYWN0dWFsbHkgY2FyZSBpZiB0aGVzZSBmYWlsLiBJZiB0aGUKLQkgKiB1c2VyIGFkZHJlc3MgaXMgaW52YWxpZCwgdGhlIG5hdGl2ZSBpb2N0bCB3aWxsIGRvCi0JICogdGhlIGVycm9yIGhhbmRsaW5nIGZvciB1cwotCSAqLwotCSh2b2lkKSBjb3B5X3RvX3VzZXIodXAtPmxvYWR3aGF0LCBrcC0+bG9hZHdoYXQsIHNpemVvZih1cC0+bG9hZHdoYXQpKTsKLQkodm9pZCkgcHV0X3VzZXIoa3AtPmRhdGFzaXplLCAmdXAtPmRhdGFzaXplKTsKLQkodm9pZCkgcHV0X3VzZXIoY29tcGF0X3B0cihrcC0+ZGF0YSksICZ1cC0+ZGF0YSk7Ci0JcmV0dXJuIHVwOwotfQotCi0jZGVmaW5lIFZJRElPQ0dUVU5FUjMyCQlfSU9XUigndicsIDQsIHN0cnVjdCB2aWRlb190dW5lcjMyKQotI2RlZmluZSBWSURJT0NTVFVORVIzMgkJX0lPVygndicsIDUsIHN0cnVjdCB2aWRlb190dW5lcjMyKQotI2RlZmluZSBWSURJT0NHV0lOMzIJCV9JT1IoJ3YnLCA5LCBzdHJ1Y3QgdmlkZW9fd2luZG93MzIpCi0jZGVmaW5lIFZJRElPQ1NXSU4zMgkJX0lPVygndicsIDEwLCBzdHJ1Y3QgdmlkZW9fd2luZG93MzIpCi0jZGVmaW5lIFZJRElPQ0dGQlVGMzIJCV9JT1IoJ3YnLCAxMSwgc3RydWN0IHZpZGVvX2J1ZmZlcjMyKQotI2RlZmluZSBWSURJT0NTRkJVRjMyCQlfSU9XKCd2JywgMTIsIHN0cnVjdCB2aWRlb19idWZmZXIzMikKLSNkZWZpbmUgVklESU9DR0ZSRVEzMgkJX0lPUigndicsIDE0LCB1MzIpCi0jZGVmaW5lIFZJRElPQ1NGUkVRMzIJCV9JT1coJ3YnLCAxNSwgdTMyKQotI2RlZmluZSBWSURJT0NTTUlDUk9DT0RFMzIJX0lPVygndicsIDI3LCBzdHJ1Y3QgdmlkZW9fY29kZTMyKQotCi0jZGVmaW5lIFZJRElPQ0NBUFRVUkUzMgkJX0lPVygndicsIDgsIHMzMikKLSNkZWZpbmUgVklESU9DU1lOQzMyCQlfSU9XKCd2JywgMTgsIHMzMikKLSNkZWZpbmUgVklESU9DU1dSSVRFTU9ERTMyCV9JT1coJ3YnLCAyNSwgczMyKQotCi0jZW5kaWYKLQogc3RhdGljIGxvbmcgbmF0aXZlX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlsb25nIHJldCA9IC1FTk9JT0NUTENNRDsKQEAgLTM3Miw4ICsxNjUsNiBAQAogCQlpZiAoY29weV9mcm9tX3VzZXIoa3AsIHVwLCBzaXplb2Yoa3AtPmZtdC5yYXdfZGF0YSkpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCXJldHVybiAwOwotCWNhc2UgMDoKLQkJcmV0dXJuIC1FSU5WQUw7CiAJZGVmYXVsdDoKIAkJcHJpbnRrKEtFUk5fSU5GTyAiY29tcGF0X2lvY3RsMzI6IHVuZXhwZWN0ZWQgVklESU9DX0ZNVCB0eXBlICVkXG4iLAogCQkJCQkJCQlrcC0+dHlwZSk7CkBAIC00MDMsOCArMTk0LDYgQEAKIAkJaWYgKGNvcHlfdG9fdXNlcih1cCwga3AsIHNpemVvZih1cC0+Zm10LnJhd19kYXRhKSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJcmV0dXJuIDA7Ci0JY2FzZSAwOgotCQlyZXR1cm4gLUVJTlZBTDsKIAlkZWZhdWx0OgogCQlwcmludGsoS0VSTl9JTkZPICJjb21wYXRfaW9jdGwzMjogdW5leHBlY3RlZCBWSURJT0NfRk1UIHR5cGUgJWRcbiIsCiAJCQkJCQkJCWtwLT50eXBlKTsKQEAgLTc0MSwxMyArNTMwLDYgQEAKIHN0YXRpYyBsb25nIGRvX3ZpZGVvX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAl1bmlvbiB7Ci0jaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCi0JCXN0cnVjdCB2aWRlb190dW5lciB2dDsKLQkJc3RydWN0IHZpZGVvX2J1ZmZlciB2YjsKLQkJc3RydWN0IHZpZGVvX3dpbmRvdyB2dzsKLQkJc3RydWN0IHZpZGVvX2NvZGUzMiB2YzsKLQkJc3RydWN0IHZpZGVvX2F1ZGlvIHZhOwotI2VuZGlmCiAJCXN0cnVjdCB2NGwyX2Zvcm1hdCB2MmY7CiAJCXN0cnVjdCB2NGwyX2J1ZmZlciB2MmI7CiAJCXN0cnVjdCB2NGwyX2ZyYW1lYnVmZmVyIHYyZmI7CkBAIC03NjMsMTcgKzU0NSw2IEBACiAKIAkvKiBGaXJzdCwgY29udmVydCB0aGUgY29tbWFuZC4gKi8KIAlzd2l0Y2ggKGNtZCkgewotI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAotCWNhc2UgVklESU9DR1RVTkVSMzI6IGNtZCA9IFZJRElPQ0dUVU5FUjsgYnJlYWs7Ci0JY2FzZSBWSURJT0NTVFVORVIzMjogY21kID0gVklESU9DU1RVTkVSOyBicmVhazsKLQljYXNlIFZJRElPQ0dXSU4zMjogY21kID0gVklESU9DR1dJTjsgYnJlYWs7Ci0JY2FzZSBWSURJT0NTV0lOMzI6IGNtZCA9IFZJRElPQ1NXSU47IGJyZWFrOwotCWNhc2UgVklESU9DR0ZCVUYzMjogY21kID0gVklESU9DR0ZCVUY7IGJyZWFrOwotCWNhc2UgVklESU9DU0ZCVUYzMjogY21kID0gVklESU9DU0ZCVUY7IGJyZWFrOwotCWNhc2UgVklESU9DR0ZSRVEzMjogY21kID0gVklESU9DR0ZSRVE7IGJyZWFrOwotCWNhc2UgVklESU9DU0ZSRVEzMjogY21kID0gVklESU9DU0ZSRVE7IGJyZWFrOwotCWNhc2UgVklESU9DU01JQ1JPQ09ERTMyOiBjbWQgPSBWSURJT0NTTUlDUk9DT0RFOyBicmVhazsKLSNlbmRpZgogCWNhc2UgVklESU9DX0dfRk1UMzI6IGNtZCA9IFZJRElPQ19HX0ZNVDsgYnJlYWs7CiAJY2FzZSBWSURJT0NfU19GTVQzMjogY21kID0gVklESU9DX1NfRk1UOyBicmVhazsKIAljYXNlIFZJRElPQ19RVUVSWUJVRjMyOiBjbWQgPSBWSURJT0NfUVVFUllCVUY7IGJyZWFrOwpAQCAtODAwLDQ2ICs1NzEsNiBAQAogCX0KIAogCXN3aXRjaCAoY21kKSB7Ci0jaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCi0JY2FzZSBWSURJT0NTVFVORVI6Ci0JY2FzZSBWSURJT0NHVFVORVI6Ci0JCWVyciA9IGdldF92aWRlb190dW5lcjMyKCZrYXJnLnZ0LCB1cCk7Ci0JCWNvbXBhdGlibGVfYXJnID0gMDsKLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ1NGQlVGOgotCQllcnIgPSBnZXRfdmlkZW9fYnVmZmVyMzIoJmthcmcudmIsIHVwKTsKLQkJY29tcGF0aWJsZV9hcmcgPSAwOwotCQlicmVhazsKLQotCWNhc2UgVklESU9DU1dJTjoKLQkJZXJyID0gZ2V0X3ZpZGVvX3dpbmRvdzMyKCZrYXJnLnZ3LCB1cCk7Ci0JCWNvbXBhdGlibGVfYXJnID0gMDsKLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ0dXSU46Ci0JY2FzZSBWSURJT0NHRkJVRjoKLQljYXNlIFZJRElPQ0dGUkVROgotCQljb21wYXRpYmxlX2FyZyA9IDA7Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NTTUlDUk9DT0RFOgotCQkvKiBDb3B5IHRoZSAzMi1iaXQgInZpZGVvX2NvZGUzMiIgdG8ga2VybmVsIHNwYWNlICovCi0JCWlmIChjb3B5X2Zyb21fdXNlcigma2FyZy52YywgdXAsIHNpemVvZihrYXJnLnZjKSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJLyogQ29udmVydCB0aGUgMzItYml0IHZlcnNpb24gdG8gYSA2NC1iaXQgdmVyc2lvbiBpbiB1c2VyIHNwYWNlICovCi0JCXVwID0gZ2V0X21pY3JvY29kZTMyKCZrYXJnLnZjKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ1NGUkVROgotCQllcnIgPSBnZXRfdXNlcihrYXJnLnZ4LCAodTMyIF9fdXNlciAqKXVwKTsKLQkJY29tcGF0aWJsZV9hcmcgPSAwOwotCQlicmVhazsKLQotCWNhc2UgVklESU9DQ0FQVFVSRToKLQljYXNlIFZJRElPQ1NZTkM6Ci0JY2FzZSBWSURJT0NTV1JJVEVNT0RFOgotI2VuZGlmCiAJY2FzZSBWSURJT0NfT1ZFUkxBWToKIAljYXNlIFZJRElPQ19TVFJFQU1PTjoKIAljYXNlIFZJRElPQ19TVFJFQU1PRkY6CkBAIC05MjIsMjMgKzY1Myw2IEBACiAJCXJldHVybiBlcnI7CiAKIAlzd2l0Y2ggKGNtZCkgewotI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAotCWNhc2UgVklESU9DR1RVTkVSOgotCQllcnIgPSBwdXRfdmlkZW9fdHVuZXIzMigma2FyZy52dCwgdXApOwotCQlicmVhazsKLQotCWNhc2UgVklESU9DR1dJTjoKLQkJZXJyID0gcHV0X3ZpZGVvX3dpbmRvdzMyKCZrYXJnLnZ3LCB1cCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NHRkJVRjoKLQkJZXJyID0gcHV0X3ZpZGVvX2J1ZmZlcjMyKCZrYXJnLnZiLCB1cCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NHRlJFUToKLQkJZXJyID0gcHV0X3VzZXIoKCh1MzIpa2FyZy52eCksICh1MzIgX191c2VyICopdXApOwotCQlicmVhazsKLSNlbmRpZgogCWNhc2UgVklESU9DX1NfSU5QVVQ6CiAJY2FzZSBWSURJT0NfU19PVVRQVVQ6CiAJY2FzZSBWSURJT0NfR19JTlBVVDoKQEAgLTk4MSwzNyArNjk1LDYgQEAKIAkJcmV0dXJuIHJldDsKIAogCXN3aXRjaCAoY21kKSB7Ci0jaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCi0JY2FzZSBWSURJT0NHQ0FQOgotCWNhc2UgVklESU9DR0NIQU46Ci0JY2FzZSBWSURJT0NTQ0hBTjoKLQljYXNlIFZJRElPQ0dUVU5FUjMyOgotCWNhc2UgVklESU9DU1RVTkVSMzI6Ci0JY2FzZSBWSURJT0NHUElDVDoKLQljYXNlIFZJRElPQ1NQSUNUOgotCWNhc2UgVklESU9DQ0FQVFVSRTMyOgotCWNhc2UgVklESU9DR1dJTjMyOgotCWNhc2UgVklESU9DU1dJTjMyOgotCWNhc2UgVklESU9DR0ZCVUYzMjoKLQljYXNlIFZJRElPQ1NGQlVGMzI6Ci0JY2FzZSBWSURJT0NLRVk6Ci0JY2FzZSBWSURJT0NHRlJFUTMyOgotCWNhc2UgVklESU9DU0ZSRVEzMjoKLQljYXNlIFZJRElPQ0dBVURJTzoKLQljYXNlIFZJRElPQ1NBVURJTzoKLQljYXNlIFZJRElPQ1NZTkMzMjoKLQljYXNlIFZJRElPQ01DQVBUVVJFOgotCWNhc2UgVklESU9DR01CVUY6Ci0JY2FzZSBWSURJT0NHVU5JVDoKLQljYXNlIFZJRElPQ0dDQVBUVVJFOgotCWNhc2UgVklESU9DU0NBUFRVUkU6Ci0JY2FzZSBWSURJT0NTUExBWU1PREU6Ci0JY2FzZSBWSURJT0NTV1JJVEVNT0RFMzI6Ci0JY2FzZSBWSURJT0NHUExBWUlORk86Ci0JY2FzZSBWSURJT0NTTUlDUk9DT0RFMzI6Ci0JY2FzZSBWSURJT0NHVkJJRk1UOgotCWNhc2UgVklESU9DU1ZCSUZNVDoKLSNlbmRpZgogI2lmZGVmIF9fT0xEX1ZJRElPQ18KIAljYXNlIFZJRElPQ19PVkVSTEFZMzJfT0xEOgogCWNhc2UgVklESU9DX1NfUEFSTV9PTEQ6CkBAIC0xMDk2LDE5ICs3NzksNiBAQAogCQlyZXQgPSBkb192aWRlb19pb2N0bChmaWxlLCBjbWQsIGFyZyk7CiAJCWJyZWFrOwogCi0jaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCi0JLyogQlRUViBzcGVjaWZpYy4uLiAqLwotCWNhc2UgX0lPVygndicsICBCQVNFX1ZJRElPQ1BSSVZBVEUrMCwgY2hhciBbMjU2XSk6Ci0JY2FzZSBfSU9SKCd2JywgIEJBU0VfVklESU9DUFJJVkFURSsxLCBjaGFyIFsyNTZdKToKLQljYXNlIF9JT1IoJ3YnICwgQkFTRV9WSURJT0NQUklWQVRFKzIsIHVuc2lnbmVkIGludCk6Ci0JY2FzZSBfSU9XKCd2JyAsIEJBU0VfVklESU9DUFJJVkFURSszLCBjaGFyIFsxNl0pOiAvKiBzdHJ1Y3QgYnR0dl9wbGxfaW5mbyAqLwotCWNhc2UgX0lPUigndicgLCBCQVNFX1ZJRElPQ1BSSVZBVEUrNCwgaW50KToKLQljYXNlIF9JT1IoJ3YnICwgQkFTRV9WSURJT0NQUklWQVRFKzUsIGludCk6Ci0JY2FzZSBfSU9SKCd2JyAsIEJBU0VfVklESU9DUFJJVkFURSs2LCBpbnQpOgotCWNhc2UgX0lPUigndicgLCBCQVNFX1ZJRElPQ1BSSVZBVEUrNywgaW50KToKLQkJcmV0ID0gbmF0aXZlX2lvY3RsKGZpbGUsIGNtZCwgKHVuc2lnbmVkIGxvbmcpY29tcGF0X3B0cihhcmcpKTsKLQkJYnJlYWs7Ci0jZW5kaWYKIAlkZWZhdWx0OgogCQlwcmludGsoS0VSTl9XQVJOSU5HICJjb21wYXRfaW9jdGwzMjogIgogCQkJInVua25vd24gaW9jdGwgJyVjJywgZGlyPSVkLCAjJWQgKDB4JTA4eClcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItY3RybHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1jdHJscy5jCmluZGV4IDlkMjUwMmMuLjhmODFlZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1jdHJscy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1jdHJscy5jCkBAIC0zOCwxNSArMzgsMTUgQEAKICAgIHRoZSBnaXZlbiBjb250cm9sIElELiBUaGUgcG9pbnRlciBhcnJheSBlbmRzIHdpdGggYSBOVUxMIHBvaW50ZXIuCiAgICBBbiBlbXB0eSBzdHJpbmcgc2lnbmlmaWVzIGEgbWVudSBlbnRyeSB0aGF0IGlzIGludmFsaWQuIFRoaXMgYWxsb3dzCiAgICBkcml2ZXJzIHRvIGRpc2FibGUgY2VydGFpbiBvcHRpb25zIGlmIGl0IGlzIG5vdCBzdXBwb3J0ZWQuICovCi1jb25zdCBjaGFyICoqdjRsMl9jdHJsX2dldF9tZW51KHUzMiBpZCkKK2NvbnN0IGNoYXIgKiBjb25zdCAqdjRsMl9jdHJsX2dldF9tZW51KHUzMiBpZCkKIHsKLQlzdGF0aWMgY29uc3QgY2hhciAqbXBlZ19hdWRpb19zYW1wbGluZ19mcmVxW10gPSB7CisJc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBtcGVnX2F1ZGlvX3NhbXBsaW5nX2ZyZXFbXSA9IHsKIAkJIjQ0LjEga0h6IiwKIAkJIjQ4IGtIeiIsCiAJCSIzMiBrSHoiLAogCQlOVUxMCiAJfTsKLQlzdGF0aWMgY29uc3QgY2hhciAqbXBlZ19hdWRpb19lbmNvZGluZ1tdID0geworCXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgbXBlZ19hdWRpb19lbmNvZGluZ1tdID0gewogCQkiTVBFRy0xLzIgTGF5ZXIgSSIsCiAJCSJNUEVHLTEvMiBMYXllciBJSSIsCiAJCSJNUEVHLTEvMiBMYXllciBJSUkiLApAQCAtNTQsNyArNTQsNyBAQAogCQkiQUMtMyIsCiAJCU5VTEwKIAl9OwotCXN0YXRpYyBjb25zdCBjaGFyICptcGVnX2F1ZGlvX2wxX2JpdHJhdGVbXSA9IHsKKwlzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG1wZWdfYXVkaW9fbDFfYml0cmF0ZVtdID0gewogCQkiMzIga2JwcyIsCiAJCSI2NCBrYnBzIiwKIAkJIjk2IGticHMiLApAQCAtNzEsNyArNzEsNyBAQAogCQkiNDQ4IGticHMiLAogCQlOVUxMCiAJfTsKLQlzdGF0aWMgY29uc3QgY2hhciAqbXBlZ19hdWRpb19sMl9iaXRyYXRlW10gPSB7CisJc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBtcGVnX2F1ZGlvX2wyX2JpdHJhdGVbXSA9IHsKIAkJIjMyIGticHMiLAogCQkiNDgga2JwcyIsCiAJCSI1NiBrYnBzIiwKQEAgLTg4LDcgKzg4LDcgQEAKIAkJIjM4NCBrYnBzIiwKIAkJTlVMTAogCX07Ci0Jc3RhdGljIGNvbnN0IGNoYXIgKm1wZWdfYXVkaW9fbDNfYml0cmF0ZVtdID0geworCXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgbXBlZ19hdWRpb19sM19iaXRyYXRlW10gPSB7CiAJCSIzMiBrYnBzIiwKIAkJIjQwIGticHMiLAogCQkiNDgga2JwcyIsCkBAIC0xMDUsNyArMTA1LDcgQEAKIAkJIjMyMCBrYnBzIiwKIAkJTlVMTAogCX07Ci0Jc3RhdGljIGNvbnN0IGNoYXIgKm1wZWdfYXVkaW9fYWMzX2JpdHJhdGVbXSA9IHsKKwlzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG1wZWdfYXVkaW9fYWMzX2JpdHJhdGVbXSA9IHsKIAkJIjMyIGticHMiLAogCQkiNDAga2JwcyIsCiAJCSI0OCBrYnBzIiwKQEAgLTEyNyw1MCArMTI3LDUwIEBACiAJCSI2NDAga2JwcyIsCiAJCU5VTEwKIAl9OwotCXN0YXRpYyBjb25zdCBjaGFyICptcGVnX2F1ZGlvX21vZGVbXSA9IHsKKwlzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG1wZWdfYXVkaW9fbW9kZVtdID0gewogCQkiU3RlcmVvIiwKIAkJIkpvaW50IFN0ZXJlbyIsCiAJCSJEdWFsIiwKIAkJIk1vbm8iLAogCQlOVUxMCiAJfTsKLQlzdGF0aWMgY29uc3QgY2hhciAqbXBlZ19hdWRpb19tb2RlX2V4dGVuc2lvbltdID0geworCXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgbXBlZ19hdWRpb19tb2RlX2V4dGVuc2lvbltdID0gewogCQkiQm91bmQgNCIsCiAJCSJCb3VuZCA4IiwKIAkJIkJvdW5kIDEyIiwKIAkJIkJvdW5kIDE2IiwKIAkJTlVMTAogCX07Ci0Jc3RhdGljIGNvbnN0IGNoYXIgKm1wZWdfYXVkaW9fZW1waGFzaXNbXSA9IHsKKwlzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG1wZWdfYXVkaW9fZW1waGFzaXNbXSA9IHsKIAkJIk5vIEVtcGhhc2lzIiwKIAkJIjUwLzE1IHVzIiwKIAkJIkNDSVRUIEoxNyIsCiAJCU5VTEwKIAl9OwotCXN0YXRpYyBjb25zdCBjaGFyICptcGVnX2F1ZGlvX2NyY1tdID0geworCXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgbXBlZ19hdWRpb19jcmNbXSA9IHsKIAkJIk5vIENSQyIsCiAJCSIxNi1iaXQgQ1JDIiwKIAkJTlVMTAogCX07Ci0Jc3RhdGljIGNvbnN0IGNoYXIgKm1wZWdfdmlkZW9fZW5jb2RpbmdbXSA9IHsKKwlzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG1wZWdfdmlkZW9fZW5jb2RpbmdbXSA9IHsKIAkJIk1QRUctMSIsCiAJCSJNUEVHLTIiLAogCQkiTVBFRy00IEFWQyIsCiAJCU5VTEwKIAl9OwotCXN0YXRpYyBjb25zdCBjaGFyICptcGVnX3ZpZGVvX2FzcGVjdFtdID0geworCXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgbXBlZ192aWRlb19hc3BlY3RbXSA9IHsKIAkJIjF4MSIsCiAJCSI0eDMiLAogCQkiMTZ4OSIsCiAJCSIyLjIxeDEiLAogCQlOVUxMCiAJfTsKLQlzdGF0aWMgY29uc3QgY2hhciAqbXBlZ192aWRlb19iaXRyYXRlX21vZGVbXSA9IHsKKwlzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG1wZWdfdmlkZW9fYml0cmF0ZV9tb2RlW10gPSB7CiAJCSJWYXJpYWJsZSBCaXRyYXRlIiwKIAkJIkNvbnN0YW50IEJpdHJhdGUiLAogCQlOVUxMCiAJfTsKLQlzdGF0aWMgY29uc3QgY2hhciAqbXBlZ19zdHJlYW1fdHlwZVtdID0geworCXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgbXBlZ19zdHJlYW1fdHlwZVtdID0gewogCQkiTVBFRy0yIFByb2dyYW0gU3RyZWFtIiwKIAkJIk1QRUctMiBUcmFuc3BvcnQgU3RyZWFtIiwKIAkJIk1QRUctMSBTeXN0ZW0gU3RyZWFtIiwKQEAgLTE3OSwyNSArMTc5LDI1IEBACiAJCSJNUEVHLTIgU1ZDRC1jb21wYXRpYmxlIFN0cmVhbSIsCiAJCU5VTEwKIAl9OwotCXN0YXRpYyBjb25zdCBjaGFyICptcGVnX3N0cmVhbV92YmlfZm10W10gPSB7CisJc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBtcGVnX3N0cmVhbV92YmlfZm10W10gPSB7CiAJCSJObyBWQkkiLAogCQkiUHJpdmF0ZSBwYWNrZXQsIElWVFYgZm9ybWF0IiwKIAkJTlVMTAogCX07Ci0Jc3RhdGljIGNvbnN0IGNoYXIgKmNhbWVyYV9wb3dlcl9saW5lX2ZyZXF1ZW5jeVtdID0geworCXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgY2FtZXJhX3Bvd2VyX2xpbmVfZnJlcXVlbmN5W10gPSB7CiAJCSJEaXNhYmxlZCIsCiAJCSI1MCBIeiIsCiAJCSI2MCBIeiIsCiAJCU5VTEwKIAl9OwotCXN0YXRpYyBjb25zdCBjaGFyICpjYW1lcmFfZXhwb3N1cmVfYXV0b1tdID0geworCXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgY2FtZXJhX2V4cG9zdXJlX2F1dG9bXSA9IHsKIAkJIkF1dG8gTW9kZSIsCiAJCSJNYW51YWwgTW9kZSIsCiAJCSJTaHV0dGVyIFByaW9yaXR5IE1vZGUiLAogCQkiQXBlcnR1cmUgUHJpb3JpdHkgTW9kZSIsCiAJCU5VTEwKIAl9OwotCXN0YXRpYyBjb25zdCBjaGFyICpjb2xvcmZ4W10gPSB7CisJc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBjb2xvcmZ4W10gPSB7CiAJCSJOb25lIiwKIAkJIkJsYWNrICYgV2hpdGUiLAogCQkiU2VwaWEiLApAQCAtMjEwLDcgKzIxMCw3IEBACiAJCSJWaXZpZCIsCiAJCU5VTEwKIAl9OwotCXN0YXRpYyBjb25zdCBjaGFyICp0dW5lX3ByZWVtcGhhc2lzW10gPSB7CisJc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB0dW5lX3ByZWVtcGhhc2lzW10gPSB7CiAJCSJObyBwcmVlbXBoYXNpcyIsCiAJCSI1MCB1c2Vjb25kcyIsCiAJCSI3NSB1c2Vjb25kcyIsCkBAIC05NTIsNyArOTUyLDcgQEAKIAkJCWNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfb3BzICpvcHMsCiAJCQl1MzIgaWQsIGNvbnN0IGNoYXIgKm5hbWUsIGVudW0gdjRsMl9jdHJsX3R5cGUgdHlwZSwKIAkJCXMzMiBtaW4sIHMzMiBtYXgsIHUzMiBzdGVwLCBzMzIgZGVmLAotCQkJdTMyIGZsYWdzLCBjb25zdCBjaGFyICoqcW1lbnUsIHZvaWQgKnByaXYpCisJCQl1MzIgZmxhZ3MsIGNvbnN0IGNoYXIgKiBjb25zdCAqcW1lbnUsIHZvaWQgKnByaXYpCiB7CiAJc3RydWN0IHY0bDJfY3RybCAqY3RybDsKIAl1bnNpZ25lZCBzel9leHRyYSA9IDA7CkBAIC05NjIsMTMgKzk2MiwyMCBAQAogCiAJLyogU2FuaXR5IGNoZWNrcyAqLwogCWlmIChpZCA9PSAwIHx8IG5hbWUgPT0gTlVMTCB8fCBpZCA+PSBWNEwyX0NJRF9QUklWQVRFX0JBU0UgfHwKLQkgICAgZGVmIDwgbWluIHx8IGRlZiA+IG1heCB8fCBtYXggPCBtaW4gfHwKKwkgICAgbWF4IDwgbWluIHx8CiAJICAgICh0eXBlID09IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIgJiYgc3RlcCA9PSAwKSB8fAogCSAgICAodHlwZSA9PSBWNEwyX0NUUkxfVFlQRV9NRU5VICYmIHFtZW51ID09IE5VTEwpIHx8CiAJICAgICh0eXBlID09IFY0TDJfQ1RSTF9UWVBFX1NUUklORyAmJiBtYXggPT0gMCkpIHsKIAkJaGFuZGxlcl9zZXRfZXJyKGhkbCwgLUVSQU5HRSk7CiAJCXJldHVybiBOVUxMOwogCX0KKwlpZiAoKHR5cGUgPT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiB8fAorCSAgICAgdHlwZSA9PSBWNEwyX0NUUkxfVFlQRV9NRU5VIHx8CisJICAgICB0eXBlID09IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4pICYmCisJICAgIChkZWYgPCBtaW4gfHwgZGVmID4gbWF4KSkgeworCQloYW5kbGVyX3NldF9lcnIoaGRsLCAtRVJBTkdFKTsKKwkJcmV0dXJuIE5VTEw7CisJfQogCiAJaWYgKHR5cGUgPT0gVjRMMl9DVFJMX1RZUEVfQlVUVE9OKQogCQlmbGFncyB8PSBWNEwyX0NUUkxfRkxBR19XUklURV9PTkxZOwpAQCAtMTAxOSw3ICsxMDI2LDcgQEAKIAlib29sIGlzX21lbnU7CiAJc3RydWN0IHY0bDJfY3RybCAqY3RybDsKIAljb25zdCBjaGFyICpuYW1lID0gY2ZnLT5uYW1lOwotCWNvbnN0IGNoYXIgKipxbWVudSA9IGNmZy0+cW1lbnU7CisJY29uc3QgY2hhciAqIGNvbnN0ICpxbWVudSA9IGNmZy0+cW1lbnU7CiAJZW51bSB2NGwyX2N0cmxfdHlwZSB0eXBlID0gY2ZnLT50eXBlOwogCXUzMiBmbGFncyA9IGNmZy0+ZmxhZ3M7CiAJczMyIG1pbiA9IGNmZy0+bWluOwpAQCAtMTA3NSw3ICsxMDgyLDcgQEAKIAkJCWNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfb3BzICpvcHMsCiAJCQl1MzIgaWQsIHMzMiBtYXgsIHMzMiBtYXNrLCBzMzIgZGVmKQogewotCWNvbnN0IGNoYXIgKipxbWVudSA9IHY0bDJfY3RybF9nZXRfbWVudShpZCk7CisJY29uc3QgY2hhciAqIGNvbnN0ICpxbWVudSA9IHY0bDJfY3RybF9nZXRfbWVudShpZCk7CiAJY29uc3QgY2hhciAqbmFtZTsKIAllbnVtIHY0bDJfY3RybF90eXBlIHR5cGU7CiAJczMyIG1pbjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1pb2N0bC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWlvY3RsLmMKaW5kZXggZGQ5MjgzZi4uN2U0N2YxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWlvY3RsLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWlvY3RsLmMKQEAgLTE4LDEyICsxOCw4IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAKICNkZWZpbmUgX19PTERfVklESU9DXyAvKiBUbyBhbGxvdyBmaXhpbmcgb2xkIGNhbGxzICovCi0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KIAotI2lmZGVmIENPTkZJR19WSURFT19WNEwxCi0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KLSNlbmRpZgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY3RybHMuaD4KQEAgLTE4Myw0MiArMTc5LDYgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBkZWJ1ZyBoZWxwIGZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQotI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAotc3RhdGljIGNvbnN0IGNoYXIgKnY0bDFfaW9jdGxzW10gPSB7Ci0JW19JT0NfTlIoVklESU9DR0NBUCldICAgICAgID0gIlZJRElPQ0dDQVAiLAotCVtfSU9DX05SKFZJRElPQ0dDSEFOKV0gICAgICA9ICJWSURJT0NHQ0hBTiIsCi0JW19JT0NfTlIoVklESU9DU0NIQU4pXSAgICAgID0gIlZJRElPQ1NDSEFOIiwKLQlbX0lPQ19OUihWSURJT0NHVFVORVIpXSAgICAgPSAiVklESU9DR1RVTkVSIiwKLQlbX0lPQ19OUihWSURJT0NTVFVORVIpXSAgICAgPSAiVklESU9DU1RVTkVSIiwKLQlbX0lPQ19OUihWSURJT0NHUElDVCldICAgICAgPSAiVklESU9DR1BJQ1QiLAotCVtfSU9DX05SKFZJRElPQ1NQSUNUKV0gICAgICA9ICJWSURJT0NTUElDVCIsCi0JW19JT0NfTlIoVklESU9DQ0FQVFVSRSldICAgID0gIlZJRElPQ0NBUFRVUkUiLAotCVtfSU9DX05SKFZJRElPQ0dXSU4pXSAgICAgICA9ICJWSURJT0NHV0lOIiwKLQlbX0lPQ19OUihWSURJT0NTV0lOKV0gICAgICAgPSAiVklESU9DU1dJTiIsCi0JW19JT0NfTlIoVklESU9DR0ZCVUYpXSAgICAgID0gIlZJRElPQ0dGQlVGIiwKLQlbX0lPQ19OUihWSURJT0NTRkJVRildICAgICAgPSAiVklESU9DU0ZCVUYiLAotCVtfSU9DX05SKFZJRElPQ0tFWSldICAgICAgICA9ICJWSURJT0NLRVkiLAotCVtfSU9DX05SKFZJRElPQ0dGUkVRKV0gICAgICA9ICJWSURJT0NHRlJFUSIsCi0JW19JT0NfTlIoVklESU9DU0ZSRVEpXSAgICAgID0gIlZJRElPQ1NGUkVRIiwKLQlbX0lPQ19OUihWSURJT0NHQVVESU8pXSAgICAgPSAiVklESU9DR0FVRElPIiwKLQlbX0lPQ19OUihWSURJT0NTQVVESU8pXSAgICAgPSAiVklESU9DU0FVRElPIiwKLQlbX0lPQ19OUihWSURJT0NTWU5DKV0gICAgICAgPSAiVklESU9DU1lOQyIsCi0JW19JT0NfTlIoVklESU9DTUNBUFRVUkUpXSAgID0gIlZJRElPQ01DQVBUVVJFIiwKLQlbX0lPQ19OUihWSURJT0NHTUJVRildICAgICAgPSAiVklESU9DR01CVUYiLAotCVtfSU9DX05SKFZJRElPQ0dVTklUKV0gICAgICA9ICJWSURJT0NHVU5JVCIsCi0JW19JT0NfTlIoVklESU9DR0NBUFRVUkUpXSAgID0gIlZJRElPQ0dDQVBUVVJFIiwKLQlbX0lPQ19OUihWSURJT0NTQ0FQVFVSRSldICAgPSAiVklESU9DU0NBUFRVUkUiLAotCVtfSU9DX05SKFZJRElPQ1NQTEFZTU9ERSldICA9ICJWSURJT0NTUExBWU1PREUiLAotCVtfSU9DX05SKFZJRElPQ1NXUklURU1PREUpXSA9ICJWSURJT0NTV1JJVEVNT0RFIiwKLQlbX0lPQ19OUihWSURJT0NHUExBWUlORk8pXSAgPSAiVklESU9DR1BMQVlJTkZPIiwKLQlbX0lPQ19OUihWSURJT0NTTUlDUk9DT0RFKV0gPSAiVklESU9DU01JQ1JPQ09ERSIsCi0JW19JT0NfTlIoVklESU9DR1ZCSUZNVCldICAgID0gIlZJRElPQ0dWQklGTVQiLAotCVtfSU9DX05SKFZJRElPQ1NWQklGTVQpXSAgICA9ICJWSURJT0NTVkJJRk1UIgotfTsKLSNkZWZpbmUgVjRMMV9JT0NUTFMgQVJSQVlfU0laRSh2NGwxX2lvY3RscykKLSNlbmRpZgotCiBzdGF0aWMgY29uc3QgY2hhciAqdjRsMl9pb2N0bHNbXSA9IHsKIAlbX0lPQ19OUihWSURJT0NfUVVFUllDQVApXSAgICAgICAgID0gIlZJRElPQ19RVUVSWUNBUCIsCiAJW19JT0NfTlIoVklESU9DX1JFU0VSVkVEKV0gICAgICAgICA9ICJWSURJT0NfUkVTRVJWRUQiLApAQCAtMzEwLDE1ICsyNzAsNiBAQAogCWNhc2UgJ2QnOgogCQl0eXBlID0gInY0bDJfaW50IjsKIAkJYnJlYWs7Ci0jaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCi0JY2FzZSAndic6Ci0JCWlmIChfSU9DX05SKGNtZCkgPj0gVjRMMV9JT0NUTFMpIHsKLQkJCXR5cGUgPSAidjRsMSI7Ci0JCQlicmVhazsKLQkJfQotCQlwcmludGsoIiVzIiwgdjRsMV9pb2N0bHNbX0lPQ19OUihjbWQpXSk7Ci0JCXJldHVybjsKLSNlbmRpZgogCWNhc2UgJ1YnOgogCQlpZiAoX0lPQ19OUihjbWQpID49IFY0TDJfSU9DVExTKSB7CiAJCQl0eXBlID0gInY0bDIiOwpAQCAtNjIyLDIwICs1NzMsNiBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLSNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKLQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLQkgQWxsIG90aGVyIFY0TDEgY2FsbHMgYXJlIGhhbmRsZWQgYnkgdjRsMV9jb21wYXQgbW9kdWxlLgotCSBUaG9zZSBjYWxscyB3aWxsIGJlIHRyYW5zbGF0ZWQgaW50byBWNEwyIGNhbGxzLCBhbmQKLQkgX192aWRlb19kb19pb2N0bCB3aWxsIGJlIGNhbGxlZCBhZ2Fpbiwgd2l0aCBvbmUgb3IgbW9yZQotCSBWNEwyIGlvY3Rscy4KLQkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0JaWYgKF9JT0NfVFlQRShjbWQpID09ICd2JyAmJiBjbWQgIT0gVklESU9DR01CVUYgJiYKLQkJCQlfSU9DX05SKGNtZCkgPCBCQVNFX1ZJRElPQ1BSSVZBVEUpIHsKLQkJcmV0dXJuIHY0bF9jb21wYXRfdHJhbnNsYXRlX2lvY3RsKGZpbGUsIGNtZCwgYXJnLAotCQkJCQkJX192aWRlb19kb19pb2N0bCk7Ci0JfQotI2VuZGlmCi0KIAlpZiAoKHZmZC0+ZGVidWcgJiBWNEwyX0RFQlVHX0lPQ1RMKSAmJgogCQkJCSEodmZkLT5kZWJ1ZyAmIFY0TDJfREVCVUdfSU9DVExfQVJHKSkgewogCQl2NGxfcHJpbnRfaW9jdGwodmZkLT5uYW1lLCBjbWQpOwpAQCAtNjQ0LDI5ICs1ODEsNiBAQAogCiAJc3dpdGNoIChjbWQpIHsKIAotI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAotCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCSBIYW5kbGVzIGNhbGxzIHRvIHRoZSBvYnNvbGV0ZWQgVjRMMSBBUEkKLQkgRHVlIHRvIHRoZSBuYXR1cmUgb2YgVklESU9DR01CVUYsIGVhY2ggZHJpdmVyIHRoYXQgc3VwcG9ydHMKLQkgVjRMMSBzaG91bGQgaW1wbGVtZW50IGl0cyBvd24gaGFuZGxlciBmb3IgdGhpcyBpb2N0bC4KLQkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLQkvKiAtLS0gc3RyZWFtaW5nIGNhcHR1cmUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCWNhc2UgVklESU9DR01CVUY6Ci0JewotCQlzdHJ1Y3QgdmlkZW9fbWJ1ZiAqcCA9IGFyZzsKLQotCQlpZiAoIW9wcy0+dmlkaW9jZ21idWYpCi0JCQlicmVhazsKLQkJcmV0ID0gb3BzLT52aWRpb2NnbWJ1ZihmaWxlLCBmaCwgcCk7Ci0JCWlmICghcmV0KQotCQkJZGJnYXJnKGNtZCwgInNpemU9JWQsIGZyYW1lcz0lZCwgb2Zmc2V0cz0weCUwOGx4XG4iLAotCQkJCQkJcC0+c2l6ZSwgcC0+ZnJhbWVzLAotCQkJCQkJKHVuc2lnbmVkIGxvbmcpcC0+b2Zmc2V0cyk7Ci0JCWJyZWFrOwotCX0KLSNlbmRpZgotCiAJLyogLS0tIGNhcGFiaWxpdGllcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAljYXNlIFZJRElPQ19RVUVSWUNBUDoKIAl7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpYS1jYW1lcmEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlhLWNhbWVyYS5jCmluZGV4IDllZGE3Y2MuLmUyNWFjYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlhLWNhbWVyYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlhLWNhbWVyYS5jCkBAIC0xMTYxLDE2ICsxMTYxLDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0jaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCi1zdGF0aWMgaW50IHZpYWNhbV92aWRpb2NnbWJ1ZihzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwKLQkJc3RydWN0IHZpZGVvX21idWYgKm1idWYpCi17Ci0Jc3RydWN0IHZpYV9jYW1lcmEgKmNhbSA9IHByaXY7Ci0KLQlyZXR1cm4gdmlkZW9idWZfY2dtYnVmKCZjYW0tPnZiX3F1ZXVlLCBtYnVmLCA2KTsKLX0KLSNlbmRpZgotCiAvKiBHL1NfUEFSTSAqLwogCiBzdGF0aWMgaW50IHZpYWNhbV9nX3Bhcm0oc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsCkBAIC0xMjUxLDkgKzEyNDEsNiBAQAogCS52aWRpb2Nfc19wYXJtCQk9IHZpYWNhbV9zX3Bhcm0sCiAJLnZpZGlvY19lbnVtX2ZyYW1lc2l6ZXMgPSB2aWFjYW1fZW51bV9mcmFtZXNpemVzLAogCS52aWRpb2NfZW51bV9mcmFtZWludGVydmFscyA9IHZpYWNhbV9lbnVtX2ZyYW1laW50ZXJ2YWxzLAotI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAotCS52aWRpb2NnbWJ1ZgkJPSB2aWFjYW1fdmlkaW9jZ21idWYsCi0jZW5kaWYKIH07CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtY29yZS5jCmluZGV4IDg5NzlmOTEuLmRlNGZhNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtY29yZS5jCkBAIC0xMjAyLDMzICsxMjAyLDMgQEAKIAlyZXR1cm4gcmM7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh2aWRlb2J1Zl9tbWFwX21hcHBlcik7Ci0KLSNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKLWludCB2aWRlb2J1Zl9jZ21idWYoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLAotCQkgICAgc3RydWN0IHZpZGVvX21idWYgKm1idWYsIGludCBjb3VudCkKLXsKLQlzdHJ1Y3QgdjRsMl9yZXF1ZXN0YnVmZmVycyByZXE7Ci0JaW50IHJjLCBpOwotCi0JTUFHSUNfQ0hFQ0socS0+aW50X29wcy0+bWFnaWMsIE1BR0lDX1FUWVBFX09QUyk7Ci0KLQltZW1zZXQoJnJlcSwgMCwgc2l6ZW9mKHJlcSkpOwotCXJlcS50eXBlICAgPSBxLT50eXBlOwotCXJlcS5jb3VudCAgPSBjb3VudDsKLQlyZXEubWVtb3J5ID0gVjRMMl9NRU1PUllfTU1BUDsKLQlyYyA9IHZpZGVvYnVmX3JlcWJ1ZnMocSwgJnJlcSk7Ci0JaWYgKHJjIDwgMCkKLQkJcmV0dXJuIHJjOwotCi0JbWJ1Zi0+ZnJhbWVzID0gcmVxLmNvdW50OwotCW1idWYtPnNpemUgICA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IG1idWYtPmZyYW1lczsgaSsrKSB7Ci0JCW1idWYtPm9mZnNldHNbaV0gID0gcS0+YnVmc1tpXS0+Ym9mZjsKLQkJbWJ1Zi0+c2l6ZSAgICAgICArPSBQQUdFX0FMSUdOKHEtPmJ1ZnNbaV0tPmJzaXplKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHZpZGVvYnVmX2NnbWJ1Zik7Ci0jZW5kaWYKLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi1kbWEtc2cuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtZG1hLXNnLmMKaW5kZXggMjBmMjI3ZS4uZGRiOGY0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi1kbWEtc2cuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLWRtYS1zZy5jCkBAIC02OSwxMCArNjksOSBAQAogCXN0cnVjdCBwYWdlICpwZzsKIAlpbnQgaTsKIAotCXNnbGlzdCA9IHZtYWxsb2MobnJfcGFnZXMgKiBzaXplb2YoKnNnbGlzdCkpOworCXNnbGlzdCA9IHZ6YWxsb2MobnJfcGFnZXMgKiBzaXplb2YoKnNnbGlzdCkpOwogCWlmIChOVUxMID09IHNnbGlzdCkKIAkJcmV0dXJuIE5VTEw7Ci0JbWVtc2V0KHNnbGlzdCwgMCwgbnJfcGFnZXMgKiBzaXplb2YoKnNnbGlzdCkpOwogCXNnX2luaXRfdGFibGUoc2dsaXN0LCBucl9wYWdlcyk7CiAJZm9yIChpID0gMDsgaSA8IG5yX3BhZ2VzOyBpKyssIHZpcnQgKz0gUEFHRV9TSVpFKSB7CiAJCXBnID0gdm1hbGxvY190b19wYWdlKHZpcnQpOwpAQCAtNTQ0LDE0ICs1NDMsNiBAQAogCiAJcmV0dmFsID0gLUVJTlZBTDsKIAotCS8qIFRoaXMgZnVuY3Rpb24gbWFpbnRhaW5zIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggVjRMMSBhbmQgd2lsbAotCSAqIG1hcCBtb3JlIHRoYW4gb25lIGJ1ZmZlciBpZiB0aGUgdm1hIGxlbmd0aCBpcyBlcXVhbCB0byB0aGUgY29tYmluZWQKLQkgKiBzaXplIG9mIG11bHRpcGxlIGJ1ZmZlcnMgdGhhbiBpdCB3aWxsIG1hcCB0aGVtIHRvZ2V0aGVyLiAgU2VlCi0JICogVklESU9DR01CVUYgaW4gdGhlIHY0bCBzcGVjCi0JICoKLQkgKiBUT0RPOiBBbGxvdyBkcml2ZXJzIHRvIHNwZWNpZnkgaWYgdGhleSBzdXBwb3J0IHRoaXMgbW9kZQotCSAqLwotCiAJQlVHX09OKCFtZW0pOwogCU1BR0lDX0NIRUNLKG1lbS0+bWFnaWMsIE1BR0lDX1NHX01FTSk7CiAKQEAgLTU3MSwyOSArNTYyLDYgQEAKIAl9CiAKIAlsYXN0ID0gZmlyc3Q7Ci0jaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCi0JaWYgKHNpemUgIT0gKHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCkpIHsKLQkJLyogbG9vayBmb3IgbGFzdCBidWZmZXIgdG8gbWFwICovCi0JCWZvciAobGFzdCA9IGZpcnN0ICsgMTsgbGFzdCA8IFZJREVPX01BWF9GUkFNRTsgbGFzdCsrKSB7Ci0JCQlpZiAoTlVMTCA9PSBxLT5idWZzW2xhc3RdKQotCQkJCWNvbnRpbnVlOwotCQkJaWYgKFY0TDJfTUVNT1JZX01NQVAgIT0gcS0+YnVmc1tsYXN0XS0+bWVtb3J5KQotCQkJCWNvbnRpbnVlOwotCQkJaWYgKHEtPmJ1ZnNbbGFzdF0tPm1hcCkgewotCQkJCXJldHZhbCA9IC1FQlVTWTsKLQkJCQlnb3RvIGRvbmU7Ci0JCQl9Ci0JCQlzaXplICs9IFBBR0VfQUxJR04ocS0+YnVmc1tsYXN0XS0+YnNpemUpOwotCQkJaWYgKHNpemUgPT0gKHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCkpCi0JCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKFZJREVPX01BWF9GUkFNRSA9PSBsYXN0KSB7Ci0JCQlkcHJpbnRrKDEsICJtbWFwIGFwcCBidWc6IHNpemUgaW52YWxpZCBbc2l6ZT0weCVseF1cbiIsCi0JCQkJCSh2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQpKTsKLQkJCWdvdG8gZG9uZTsKLQkJfQotCX0KLSNlbmRpZgogCiAJLyogY3JlYXRlIG1hcHBpbmcgKyB1cGRhdGUgYnVmZmVyIGxpc3QgKi8KIAlyZXR2YWwgPSAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92aW5vLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Zpbm8uYwppbmRleCA3ZTdlZWM0Li5kNjNlOWQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Zpbm8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Zpbm8uYwpAQCAtMjk1NCw5ICsyOTU0LDYgQEAKIAlpZiAoaW5wdXQgPT0gVklOT19JTlBVVF9OT05FKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCW1lbXNldChpLCAwLCBzaXplb2Yoc3RydWN0IHY0bDJfaW5wdXQpKTsKLQotCWktPmluZGV4ID0gaW5kZXg7CiAJaS0+dHlwZSA9IFY0TDJfSU5QVVRfVFlQRV9DQU1FUkE7CiAJaS0+c3RkID0gdmlub19pbnB1dHNbaW5wdXRdLnN0ZDsKIAlzdHJjcHkoaS0+bmFtZSwgdmlub19pbnB1dHNbaW5wdXRdLm5hbWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92aXZpLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpdmkuYwppbmRleCA5Nzk3ZTVhLi5jNDljMzkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpdmkuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpdmkuYwpAQCAtODcwLDE1ICs4NzAsNiBAQAogCQkJCWZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKIH0KIAotI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAotc3RhdGljIGludCB2aWRpb2NnbWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHZpZGVvX21idWYgKm1idWYpCi17Ci0Jc3RydWN0IHZpdmlfZGV2ICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwotCi0JcmV0dXJuIHZpZGVvYnVmX2NnbWJ1ZigmZGV2LT52Yl92aWRxLCBtYnVmLCA4KTsKLX0KLSNlbmRpZgotCiBzdGF0aWMgaW50IHZpZGlvY19zdHJlYW1vbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgZW51bSB2NGwyX2J1Zl90eXBlIGkpCiB7CiAJc3RydWN0IHZpdmlfZGV2ICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwpAQCAtMTEwNSw5ICsxMDk2LDYgQEAKIAkudmlkaW9jX3F1ZXJ5Y3RybCAgICAgPSB2aWRpb2NfcXVlcnljdHJsLAogCS52aWRpb2NfZ19jdHJsICAgICAgICA9IHZpZGlvY19nX2N0cmwsCiAJLnZpZGlvY19zX2N0cmwgICAgICAgID0gdmlkaW9jX3NfY3RybCwKLSNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKLQkudmlkaW9jZ21idWYgICAgICAgICAgPSB2aWRpb2NnbWJ1ZiwKLSNlbmRpZgogfTsKIAogc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2Ugdml2aV90ZW1wbGF0ZSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW4uaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW4uaAppbmRleCAyN2YwNTU1Li40YmIzNjhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbi5oCkBAIC0zMywxNSArMzMsNiBAQAogCiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KIAotI2RlZmluZSBaT1JBTl9WSURNT0RFX1BBTAkwCi0jZGVmaW5lIFpPUkFOX1ZJRE1PREVfTlRTQwkxCi0jZGVmaW5lIFpPUkFOX1ZJRE1PREVfU0VDQU0JMgotCi1zdHJ1Y3Qgem9yYW5fcmVxdWVzdGJ1ZmZlcnMgewotCXVuc2lnbmVkIGxvbmcgY291bnQ7CS8qIE51bWJlciBvZiBidWZmZXJzIGZvciBNSlBFRyBncmFiYmluZyAqLwotCXVuc2lnbmVkIGxvbmcgc2l6ZTsJLyogU2l6ZSBQRVIgQlVGRkVSIGluIGJ5dGVzICovCi19OwotCiBzdHJ1Y3Qgem9yYW5fc3luYyB7CiAJdW5zaWduZWQgbG9uZyBmcmFtZTsJLyogbnVtYmVyIG9mIGJ1ZmZlciB0aGF0IGhhcyBiZWVuIGZyZWUnZCAqLwogCXVuc2lnbmVkIGxvbmcgbGVuZ3RoOwkvKiBudW1iZXIgb2YgY29kZSBieXRlcyBpbiBidWZmZXIgKGNhcHR1cmUgb25seSkgKi8KQEAgLTQ5LDEwMiArNDAsNiBAQAogCXN0cnVjdCB0aW1ldmFsIHRpbWVzdGFtcDsJLyogdGltZXN0YW1wICovCiB9OwogCi1zdHJ1Y3Qgem9yYW5fc3RhdHVzIHsKLQlpbnQgaW5wdXQ7CQkvKiBJbnB1dCBjaGFubmVsLCBoYXMgdG8gYmUgc2V0IHByaW9yIHRvIEJVWklPQ19HX1NUQVRVUyAqLwotCWludCBzaWduYWw7CQkvKiBSZXR1cm5lZDogMSBpZiB2YWxpZCB2aWRlbyBzaWduYWwgZGV0ZWN0ZWQgKi8KLQlpbnQgbm9ybTsJCS8qIFJldHVybmVkOiBaT1JBTl9WSURNT0RFX1BBTCBvciBaT1JBTl9WSURNT0RFX05UU0MgKi8KLQlpbnQgY29sb3I7CQkvKiBSZXR1cm5lZDogMSBpZiBjb2xvciBzaWduYWwgZGV0ZWN0ZWQgKi8KLX07Ci0KLXN0cnVjdCB6b3Jhbl9wYXJhbXMgewotCi0JLyogVGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzIGNhbiBvbmx5IGJlIHF1ZXJpZWQgKi8KLQotCWludCBtYWpvcl92ZXJzaW9uOwkvKiBNYWpvciB2ZXJzaW9uIG51bWJlciBvZiBkcml2ZXIgKi8KLQlpbnQgbWlub3JfdmVyc2lvbjsJLyogTWlub3IgdmVyc2lvbiBudW1iZXIgb2YgZHJpdmVyICovCi0KLQkvKiBNYWluIGNvbnRyb2wgcGFyYW1ldGVycyAqLwotCi0JaW50IGlucHV0OwkJLyogSW5wdXQgY2hhbm5lbDogMCA9IENvbXBvc2l0ZSwgMSA9IFMtVkhTICovCi0JaW50IG5vcm07CQkvKiBOb3JtOiBaT1JBTl9WSURNT0RFX1BBTCBvciBaT1JBTl9WSURNT0RFX05UU0MgKi8KLQlpbnQgZGVjaW1hdGlvbjsJCS8qIGRlY2ltYXRpb24gb2YgY2FwdHVyZWQgdmlkZW8sCi0JCQkJICogZW5sYXJnZW1lbnQgb2YgdmlkZW8gcGxheWVkIGJhY2suCi0JCQkJICogVmFsaWQgdmFsdWVzIGFyZSAxLCAyLCA0IG9yIDAuCi0JCQkJICogMCBpcyBhIHNwZWNpYWwgdmFsdWUgd2hlcmUgdGhlIHVzZXIKLQkJCQkgKiBoYXMgZnVsbCBjb250cm9sIG92ZXIgdmlkZW8gc2NhbGluZyAqLwotCi0JLyogVGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzIG9ubHkgaGF2ZSB0byBiZSBzZXQgaWYgZGVjaW1hdGlvbj09MCwKLQkgKiBmb3Igb3RoZXIgdmFsdWVzIG9mIGRlY2ltYXRpb24gdGhleSBwcm92aWRlIHRoZSBkYXRhIGhvdyB0aGUgaW1hZ2UgaXMgY2FwdHVyZWQgKi8KLQotCWludCBIb3JEY207CQkvKiBIb3Jpem9udGFsIGRlY2ltYXRpb246IDEsIDIgb3IgNCAqLwotCWludCBWZXJEY207CQkvKiBWZXJ0aWNhbCBkZWNpbWF0aW9uOiAxIG9yIDIgKi8KLQlpbnQgVG1wRGNtOwkJLyogVGVtcG9yYWwgZGVjaW1hdGlvbjogMSBvciAyLAotCQkJCSAqIGlmIFRtcERjbT09MiBpbiBjYXB0dXJlIGV2ZXJ5IHNlY29uZCBmcmFtZSBpcyBkcm9wcGVkLAotCQkJCSAqIGluIHBsYXliYWNrIGV2ZXJ5IGZyYW1lIGlzIHBsYXllZCB0d2ljZSAqLwotCWludCBmaWVsZF9wZXJfYnVmZjsJLyogTnVtYmVyIG9mIGZpZWxkcyBwZXIgYnVmZmVyOiAxIG9yIDIgKi8KLQlpbnQgaW1nX3g7CQkvKiBzdGFydCBvZiBpbWFnZSBpbiB4IGRpcmVjdGlvbiAqLwotCWludCBpbWdfeTsJCS8qIHN0YXJ0IG9mIGltYWdlIGluIHkgZGlyZWN0aW9uICovCi0JaW50IGltZ193aWR0aDsJCS8qIGltYWdlIHdpZHRoIEJFRk9SRSBkZWNpbWF0aW9uLAotCQkJCSAqIG11c3QgYmUgYSBtdWx0aXBsZSBvZiBIb3JEY20qMTYgKi8KLQlpbnQgaW1nX2hlaWdodDsJCS8qIGltYWdlIGhlaWdodCBCRUZPUkUgZGVjaW1hdGlvbiwKLQkJCQkgKiBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgVmVyRGNtKjggKi8KLQotCS8qIC0tLSBFbmQgb2YgcGFyYW1ldGVycyBmb3IgZGVjaW1hdGlvbj09MCBvbmx5IC0tLSAqLwotCi0JLyogSlBFRyBjb250cm9sIHBhcmFtZXRlcnMgKi8KLQotCWludCBxdWFsaXR5OwkJLyogTWVhc3VyZSBmb3IgcXVhbGl0eSBvZiBjb21wcmVzc2VkIGltYWdlcy4KLQkJCQkgKiBTY2FsZXMgbGluZWFybHkgd2l0aCB0aGUgc2l6ZSBvZiB0aGUgY29tcHJlc3NlZCBpbWFnZXMuCi0JCQkJICogTXVzdCBiZSBiZWV0d2VlbiAwIGFuZCAxMDAsIDEwMCBpcyBhIGNvbXByZXNzaW9uCi0JCQkJICogcmF0aW8gb2YgMTo0ICovCi0KLQlpbnQgb2RkX2V2ZW47CQkvKiBXaGljaCBmaWVsZCBzaG91bGQgY29tZSBmaXJzdCA/Pz8gKi8KLQotCWludCBBUFBuOwkJLyogTnVtYmVyIG9mIEFQUCBzZWdtZW50IHRvIGJlIHdyaXR0ZW4sIG11c3QgYmUgMC4uMTUgKi8KLQlpbnQgQVBQX2xlbjsJCS8qIExlbmd0aCBvZiBkYXRhIGluIEpQRUcgQVBQbiBzZWdtZW50ICovCi0JY2hhciBBUFBfZGF0YVs2MF07CS8qIERhdGEgaW4gdGhlIEpQRUcgQVBQbiBzZWdtZW50LiAqLwotCi0JaW50IENPTV9sZW47CQkvKiBMZW5ndGggb2YgZGF0YSBpbiBKUEVHIENPTSBzZWdtZW50ICovCi0JY2hhciBDT01fZGF0YVs2MF07CS8qIERhdGEgaW4gSlBFRyBDT00gc2VnbWVudCAqLwotCi0JdW5zaWduZWQgbG9uZyBqcGVnX21hcmtlcnM7CS8qIFdoaWNoIG1hcmtlcnMgc2hvdWxkIGdvIGludG8gdGhlIEpQRUcgb3V0cHV0LgotCQkJCQkgKiBVbmxlc3MgeW91IGV4YWN0bHkga25vdyB3aGF0IHlvdSBkbywgbGVhdmUgdGhlbSB1bnRvdWNoZWQuCi0JCQkJCSAqIElubHVkaW5nIGxlc3MgbWFya2VycyB3aWxsIG1ha2UgdGhlIHJlc3VsdGluZyBjb2RlCi0JCQkJCSAqIHNtYWxsZXIsIGJ1dCB0aGVyZSB3aWxsIGJlIGZld2VyIGFwcGxpY2F0aW9ucwotCQkJCQkgKiB3aGljaCBjYW4gcmVhZCBpdC4KLQkJCQkJICogVGhlIHByZXNlbmNlIG9mIHRoZSBBUFAgYW5kIENPTSBtYXJrZXIgaXMKLQkJCQkJICogaW5mbHVlbmNlZCBieSBBUFAwX2xlbiBhbmQgQ09NX2xlbiBPTkxZISAqLwotI2RlZmluZSBKUEVHX01BUktFUl9ESFQgKDE8PDMpCS8qIERlZmluZSBIdWZmbWFuIFRhYmxlcyAqLwotI2RlZmluZSBKUEVHX01BUktFUl9EUVQgKDE8PDQpCS8qIERlZmluZSBRdWFudGl6YXRpb24gVGFibGVzICovCi0jZGVmaW5lIEpQRUdfTUFSS0VSX0RSSSAoMTw8NSkJLyogRGVmaW5lIFJlc3RhcnQgSW50ZXJ2YWwgKi8KLSNkZWZpbmUgSlBFR19NQVJLRVJfQ09NICgxPDw2KQkvKiBDb21tZW50IHNlZ21lbnQgKi8KLSNkZWZpbmUgSlBFR19NQVJLRVJfQVBQICgxPDw3KQkvKiBBcHAgc2VnbWVudCwgZHJpdmVyIHdpbGwgYWxsd2F5cyB1c2UgQVBQMCAqLwotCi0JaW50IFZGSUZPX0ZCOwkJLyogRmxhZyBmb3IgZW5hYmxpbmcgVmlkZW8gRmlmbyBGZWVkYmFjay4KLQkJCQkgKiBJZiB0aGlzIGZsYWcgaXMgdHVybmVkIG9uIGFuZCBKUEVHIGRlY29tcHJlc3NpbmcKLQkJCQkgKiBpcyBnb2luZyB0byB0aGUgc2NyZWVuLCB0aGUgZGVjb21wcmVzcyBwcm9jZXNzCi0JCQkJICogaXMgc3RvcHBlZCBldmVyeSB0aW1lIHRoZSBWaWRlbyBGaWZvIGlzIGZ1bGwuCi0JCQkJICogVGhpcyBlbmFibGVzIGEgc21vb3RoIGRlY29tcHJlc3MgdG8gdGhlIHNjcmVlbgotCQkJCSAqIGJ1dCB0aGUgdmlkZW8gb3V0cHV0IHNpZ25hbCB3aWxsIGdldCBzY3JhbWJsZWQgKi8KLQotCS8qIE1pc2MgKi8KLQotCWNoYXIgcmVzZXJ2ZWRbMzEyXTsJLyogTWFrZXMgNTEyIGJ5dGVzIGZvciB0aGlzIHN0cnVjdHVyZSAqLwotfTsKLQotLyoKLVByaXZhdGUgSU9DVEwgdG8gc2V0IHVwIGZvciBkaXNwbGF5aW5nIE1KUEVHCi0qLwotI2RlZmluZSBCVVpJT0NfR19QQVJBTVMgICAgICAgX0lPUiAoJ3YnLCBCQVNFX1ZJRElPQ19QUklWQVRFKzAsICBzdHJ1Y3Qgem9yYW5fcGFyYW1zKQotI2RlZmluZSBCVVpJT0NfU19QQVJBTVMgICAgICAgX0lPV1IoJ3YnLCBCQVNFX1ZJRElPQ19QUklWQVRFKzEsICBzdHJ1Y3Qgem9yYW5fcGFyYW1zKQotI2RlZmluZSBCVVpJT0NfUkVRQlVGUyAgICAgICAgX0lPV1IoJ3YnLCBCQVNFX1ZJRElPQ19QUklWQVRFKzIsICBzdHJ1Y3Qgem9yYW5fcmVxdWVzdGJ1ZmZlcnMpCi0jZGVmaW5lIEJVWklPQ19RQlVGX0NBUFQgICAgICBfSU9XICgndicsIEJBU0VfVklESU9DX1BSSVZBVEUrMywgIGludCkKLSNkZWZpbmUgQlVaSU9DX1FCVUZfUExBWSAgICAgIF9JT1cgKCd2JywgQkFTRV9WSURJT0NfUFJJVkFURSs0LCAgaW50KQotI2RlZmluZSBCVVpJT0NfU1lOQyAgICAgICAgICAgX0lPUiAoJ3YnLCBCQVNFX1ZJRElPQ19QUklWQVRFKzUsICBzdHJ1Y3Qgem9yYW5fc3luYykKLSNkZWZpbmUgQlVaSU9DX0dfU1RBVFVTICAgICAgIF9JT1dSKCd2JywgQkFTRV9WSURJT0NfUFJJVkFURSs2LCAgc3RydWN0IHpvcmFuX3N0YXR1cykKLQotCi0jaWZkZWYgX19LRVJORUxfXwogCiAjZGVmaW5lIE1BSk9SX1ZFUlNJT04gMAkJLyogZHJpdmVyIG1ham9yIHZlcnNpb24gKi8KICNkZWZpbmUgTUlOT1JfVkVSU0lPTiAxMAkvKiBkcml2ZXIgbWlub3IgdmVyc2lvbiAqLwpAQCAtNTA3LDYgKzQwMiw0IEBACiAjZGVmaW5lIGJ0b3IoZGF0LGFkcikgICAgICAgYnR3cml0ZSgoZGF0KSB8IGJ0cmVhZChhZHIpLCBhZHIpCiAjZGVmaW5lIGJ0YW9yKGRhdCxtYXNrLGFkcikgYnR3cml0ZSgoZGF0KSB8ICgobWFzaykgJiBidHJlYWQoYWRyKSksIGFkcikKIAotI2VuZGlmCQkJCS8qIF9fa2VybmVsX18gKi8KLQogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2NhcmQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fY2FyZC5jCmluZGV4IGU1MjBhYmYuLjljZGMzYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fY2FyZC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fY2FyZC5jCkBAIC05NDMsNyArOTQzLDcgQEAKIAltZW1zZXQoenItPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5DT01fZGF0YSwgMCwKIAkgICAgICAgc2l6ZW9mKHpyLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAuQ09NX2RhdGEpKTsKIAl6ci0+anBnX3NldHRpbmdzLmpwZ19jb21wLmpwZWdfbWFya2VycyA9Ci0JICAgIEpQRUdfTUFSS0VSX0RIVCB8IEpQRUdfTUFSS0VSX0RRVDsKKwkgICAgVjRMMl9KUEVHX01BUktFUl9ESFQgfCBWNEwyX0pQRUdfTUFSS0VSX0RRVDsKIAlpID0gem9yYW5fY2hlY2tfanBnX3NldHRpbmdzKHpyLCAmenItPmpwZ19zZXR0aW5ncywgMCk7CiAJaWYgKGkpCiAJCWRwcmludGsoMSwgS0VSTl9FUlIgIiVzOiAlcyBpbnRlcm5hbCBlcnJvclxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fZGV2aWNlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2RldmljZS5jCmluZGV4IGIwMjAwN2UuLmU4YTI3ODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fZGV2aWNlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9kZXZpY2UuYwpAQCAtMTUyMyw3ICsxNTIzLDcgQEAKIAkJICAgIHpyLT5KUEVHX21pc3NlZCA+IDI1IHx8CiAJCSAgICB6ci0+SlBFR19lcnJvciA9PSAxCXx8CiAJCSAgICAoKHpyLT5jb2RlY19tb2RlID09IEJVWl9NT0RFX01PVElPTl9ERUNPTVBSRVNTKSAmJgotCQkgICAgICh6ci0+ZnJhbWVfbnVtICYgKHpyLT5KUEVHX21pc3NlZCA+IHpyLT5qcGdfc2V0dGluZ3MuZmllbGRfcGVyX2J1ZmYpKSkpIHsKKwkJICAgICAoenItPmZyYW1lX251bSAmJiAoenItPkpQRUdfbWlzc2VkID4genItPmpwZ19zZXR0aW5ncy5maWVsZF9wZXJfYnVmZikpKSkgewogCQkJZXJyb3JfaGFuZGxlcih6ciwgYXN0YXQsIHN0YXQpOwogCQl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fZHJpdmVyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2RyaXZlci5jCmluZGV4IDY3YTUyZTguLjdjMzkyMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fZHJpdmVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9kcml2ZXIuYwpAQCAtMTUyOCwzMjMgKzE1MjgsNiBAQAogICogICBpb2N0bCByb3V0aW5lCiAgKi8KIAotI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAotc3RhdGljIGxvbmcgem9yYW5fZGVmYXVsdChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwgaW50IGNtZCwgdm9pZCAqYXJnKQotewotCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBfX2ZoOwotCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7Ci0Jc3RydWN0IHpvcmFuX2pwZ19zZXR0aW5ncyBzZXR0aW5nczsKLQotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBCVVpJT0NfR19QQVJBTVM6Ci0JewotCQlzdHJ1Y3Qgem9yYW5fcGFyYW1zICpicGFyYW1zID0gYXJnOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IEJVWklPQ19HX1BBUkFNU1xuIiwgWlJfREVWTkFNRSh6cikpOwotCi0JCW1lbXNldChicGFyYW1zLCAwLCBzaXplb2Yoc3RydWN0IHpvcmFuX3BhcmFtcykpOwotCQlicGFyYW1zLT5tYWpvcl92ZXJzaW9uID0gTUFKT1JfVkVSU0lPTjsKLQkJYnBhcmFtcy0+bWlub3JfdmVyc2lvbiA9IE1JTk9SX1ZFUlNJT047Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCWlmICh6ci0+bm9ybSAmIFY0TDJfU1REX05UU0MpCi0JCQlicGFyYW1zLT5ub3JtID0gWk9SQU5fVklETU9ERV9OVFNDOwotCQllbHNlIGlmICh6ci0+bm9ybSAmIFY0TDJfU1REX1NFQ0FNKQotCQkJYnBhcmFtcy0+bm9ybSA9IFpPUkFOX1ZJRE1PREVfU0VDQU07Ci0JCWVsc2UKLQkJCWJwYXJhbXMtPm5vcm0gPSBaT1JBTl9WSURNT0RFX1BBTDsKLQotCQlicGFyYW1zLT5pbnB1dCA9IHpyLT5pbnB1dDsKLQotCQlicGFyYW1zLT5kZWNpbWF0aW9uID0gZmgtPmpwZ19zZXR0aW5ncy5kZWNpbWF0aW9uOwotCQlicGFyYW1zLT5Ib3JEY20gPSBmaC0+anBnX3NldHRpbmdzLkhvckRjbTsKLQkJYnBhcmFtcy0+VmVyRGNtID0gZmgtPmpwZ19zZXR0aW5ncy5WZXJEY207Ci0JCWJwYXJhbXMtPlRtcERjbSA9IGZoLT5qcGdfc2V0dGluZ3MuVG1wRGNtOwotCQlicGFyYW1zLT5maWVsZF9wZXJfYnVmZiA9IGZoLT5qcGdfc2V0dGluZ3MuZmllbGRfcGVyX2J1ZmY7Ci0JCWJwYXJhbXMtPmltZ194ID0gZmgtPmpwZ19zZXR0aW5ncy5pbWdfeDsKLQkJYnBhcmFtcy0+aW1nX3kgPSBmaC0+anBnX3NldHRpbmdzLmltZ195OwotCQlicGFyYW1zLT5pbWdfd2lkdGggPSBmaC0+anBnX3NldHRpbmdzLmltZ193aWR0aDsKLQkJYnBhcmFtcy0+aW1nX2hlaWdodCA9IGZoLT5qcGdfc2V0dGluZ3MuaW1nX2hlaWdodDsKLQkJYnBhcmFtcy0+b2RkX2V2ZW4gPSBmaC0+anBnX3NldHRpbmdzLm9kZF9ldmVuOwotCi0JCWJwYXJhbXMtPnF1YWxpdHkgPSBmaC0+anBnX3NldHRpbmdzLmpwZ19jb21wLnF1YWxpdHk7Ci0JCWJwYXJhbXMtPkFQUG4gPSBmaC0+anBnX3NldHRpbmdzLmpwZ19jb21wLkFQUG47Ci0JCWJwYXJhbXMtPkFQUF9sZW4gPSBmaC0+anBnX3NldHRpbmdzLmpwZ19jb21wLkFQUF9sZW47Ci0JCW1lbWNweShicGFyYW1zLT5BUFBfZGF0YSwKLQkJICAgICAgIGZoLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAuQVBQX2RhdGEsCi0JCSAgICAgICBzaXplb2YoYnBhcmFtcy0+QVBQX2RhdGEpKTsKLQkJYnBhcmFtcy0+Q09NX2xlbiA9IHpyLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAuQ09NX2xlbjsKLQkJbWVtY3B5KGJwYXJhbXMtPkNPTV9kYXRhLAotCQkgICAgICAgZmgtPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5DT01fZGF0YSwKLQkJICAgICAgIHNpemVvZihicGFyYW1zLT5DT01fZGF0YSkpOwotCQlicGFyYW1zLT5qcGVnX21hcmtlcnMgPQotCQkgICAgZmgtPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5qcGVnX21hcmtlcnM7Ci0KLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJYnBhcmFtcy0+VkZJRk9fRkIgPSAwOwotCi0JCXJldHVybiAwOwotCX0KLQotCWNhc2UgQlVaSU9DX1NfUEFSQU1TOgotCXsKLQkJc3RydWN0IHpvcmFuX3BhcmFtcyAqYnBhcmFtcyA9IGFyZzsKLQkJaW50IHJlcyA9IDA7Ci0KLQkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogQlVaSU9DX1NfUEFSQU1TXG4iLCBaUl9ERVZOQU1FKHpyKSk7Ci0KLQkJc2V0dGluZ3MuZGVjaW1hdGlvbiA9IGJwYXJhbXMtPmRlY2ltYXRpb247Ci0JCXNldHRpbmdzLkhvckRjbSA9IGJwYXJhbXMtPkhvckRjbTsKLQkJc2V0dGluZ3MuVmVyRGNtID0gYnBhcmFtcy0+VmVyRGNtOwotCQlzZXR0aW5ncy5UbXBEY20gPSBicGFyYW1zLT5UbXBEY207Ci0JCXNldHRpbmdzLmZpZWxkX3Blcl9idWZmID0gYnBhcmFtcy0+ZmllbGRfcGVyX2J1ZmY7Ci0JCXNldHRpbmdzLmltZ194ID0gYnBhcmFtcy0+aW1nX3g7Ci0JCXNldHRpbmdzLmltZ195ID0gYnBhcmFtcy0+aW1nX3k7Ci0JCXNldHRpbmdzLmltZ193aWR0aCA9IGJwYXJhbXMtPmltZ193aWR0aDsKLQkJc2V0dGluZ3MuaW1nX2hlaWdodCA9IGJwYXJhbXMtPmltZ19oZWlnaHQ7Ci0JCXNldHRpbmdzLm9kZF9ldmVuID0gYnBhcmFtcy0+b2RkX2V2ZW47Ci0KLQkJc2V0dGluZ3MuanBnX2NvbXAucXVhbGl0eSA9IGJwYXJhbXMtPnF1YWxpdHk7Ci0JCXNldHRpbmdzLmpwZ19jb21wLkFQUG4gPSBicGFyYW1zLT5BUFBuOwotCQlzZXR0aW5ncy5qcGdfY29tcC5BUFBfbGVuID0gYnBhcmFtcy0+QVBQX2xlbjsKLQkJbWVtY3B5KHNldHRpbmdzLmpwZ19jb21wLkFQUF9kYXRhLCBicGFyYW1zLT5BUFBfZGF0YSwKLQkJICAgICAgIHNpemVvZihicGFyYW1zLT5BUFBfZGF0YSkpOwotCQlzZXR0aW5ncy5qcGdfY29tcC5DT01fbGVuID0gYnBhcmFtcy0+Q09NX2xlbjsKLQkJbWVtY3B5KHNldHRpbmdzLmpwZ19jb21wLkNPTV9kYXRhLCBicGFyYW1zLT5DT01fZGF0YSwKLQkJICAgICAgIHNpemVvZihicGFyYW1zLT5DT01fZGF0YSkpOwotCQlzZXR0aW5ncy5qcGdfY29tcC5qcGVnX21hcmtlcnMgPSBicGFyYW1zLT5qcGVnX21hcmtlcnM7Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCWlmICh6ci0+Y29kZWNfbW9kZSAhPSBCVVpfTU9ERV9JRExFKSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IEJVWklPQ19TX1BBUkFNUyBjYWxsZWQsIGJ1dCBCdXogaW4gY2FwdHVyZS9wbGF5YmFjayBtb2RlXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJCXJlcyA9IC1FSU5WQUw7Ci0JCQlnb3RvIHNwYXJhbXNfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCX0KLQotCQkvKiBDaGVjayB0aGUgcGFyYW1zIGZpcnN0IGJlZm9yZSBvdmVyd3JpdGluZyBvdXIKLQkJICogbnRlcm5hbCB2YWx1ZXMgKi8KLQkJaWYgKHpvcmFuX2NoZWNrX2pwZ19zZXR0aW5ncyh6ciwgJnNldHRpbmdzLCAwKSkgewotCQkJcmVzID0gLUVJTlZBTDsKLQkJCWdvdG8gc3BhcmFtc191bmxvY2tfYW5kX3JldHVybjsKLQkJfQotCi0JCWZoLT5qcGdfc2V0dGluZ3MgPSBzZXR0aW5nczsKLXNwYXJhbXNfdW5sb2NrX2FuZF9yZXR1cm46Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCXJldHVybiByZXM7Ci0JfQotCi0JY2FzZSBCVVpJT0NfUkVRQlVGUzoKLQl7Ci0JCXN0cnVjdCB6b3Jhbl9yZXF1ZXN0YnVmZmVycyAqYnJlcSA9IGFyZzsKLQkJaW50IHJlcyA9IDA7Ci0KLQkJZHByaW50aygzLAotCQkJS0VSTl9ERUJVRwotCQkJIiVzOiBCVVpJT0NfUkVRQlVGUyAtIGNvdW50PSVsdSwgc2l6ZT0lbHVcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgYnJlcS0+Y291bnQsIGJyZXEtPnNpemUpOwotCi0JCS8qIEVuZm9yY2UgcmVhc29uYWJsZSBsb3dlciBhbmQgdXBwZXIgbGltaXRzICovCi0JCWlmIChicmVxLT5jb3VudCA8IDQpCi0JCQlicmVxLT5jb3VudCA9IDQ7CS8qIENvdWxkIGJlIGNob29zZW4gc21hbGxlciAqLwotCQlpZiAoYnJlcS0+Y291bnQgPiBqcGdfbmJ1ZnMpCi0JCQlicmVxLT5jb3VudCA9IGpwZ19uYnVmczsKLQkJYnJlcS0+c2l6ZSA9IFBBR0VfQUxJR04oYnJlcS0+c2l6ZSk7Ci0JCWlmIChicmVxLT5zaXplIDwgODE5MikKLQkJCWJyZXEtPnNpemUgPSA4MTkyOwkvKiBBcmJpdHJhcnkgKi8KLQkJLyogYnJlcS0+c2l6ZSBpcyBsaW1pdGVkIGJ5IDEgcGFnZSBmb3IgdGhlIHN0YXRfY29tCi0JCSAqIHRhYmxlcyB0byBhIE1heGltdW0gb2YgMiBNQiAqLwotCQlpZiAoYnJlcS0+c2l6ZSA+IGpwZ19idWZzaXplKQotCQkJYnJlcS0+c2l6ZSA9IGpwZ19idWZzaXplOwotCi0JCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlpZiAoZmgtPmJ1ZmZlcnMuYWxsb2NhdGVkKSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IEJVWklPQ19SRVFCVUZTIC0gYnVmZmVycyBhbHJlYWR5IGFsbG9jYXRlZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCQlyZXMgPSAtRUJVU1k7Ci0JCQlnb3RvIGpwZ3JlcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKLQkJfQotCi0JCS8qIFRoZSBuZXh0IG1tYXAgd2lsbCBtYXAgdGhlIE1KUEVHIGJ1ZmZlcnMgLSBjb3VsZAotCQkgKiBhbHNvIGJlICpfUExBWSwgYnV0IGl0IGRvZXNuJ3QgbWF0dGVyIGhlcmUgKi8KLQkJbWFwX21vZGVfanBnKGZoLCAwKTsKLQkJZmgtPmJ1ZmZlcnMubnVtX2J1ZmZlcnMgPSBicmVxLT5jb3VudDsKLQkJZmgtPmJ1ZmZlcnMuYnVmZmVyX3NpemUgPSBicmVxLT5zaXplOwotCi0JCWlmIChqcGdfZmJ1ZmZlcl9hbGxvYyhmaCkpIHsKLQkJCXJlcyA9IC1FTk9NRU07Ci0JCQlnb3RvIGpwZ3JlcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKLQkJfQotCi1qcGdyZXFidWZfdW5sb2NrX2FuZF9yZXR1cm46Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCXJldHVybiByZXM7Ci0JfQotCi0JY2FzZSBCVVpJT0NfUUJVRl9DQVBUOgotCXsKLQkJaW50ICpmcmFtZSA9IGFyZywgcmVzOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IEJVWklPQ19RQlVGX0NBUFQgLSBmcmFtZT0lZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCAqZnJhbWUpOwotCi0JCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQkJcmVzID0ganBnX3FidWYoZmgsICpmcmFtZSwgQlVaX01PREVfTU9USU9OX0NPTVBSRVNTKTsKLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJcmV0dXJuIHJlczsKLQl9Ci0KLQljYXNlIEJVWklPQ19RQlVGX1BMQVk6Ci0JewotCQlpbnQgKmZyYW1lID0gYXJnLCByZXM7Ci0KLQkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogQlVaSU9DX1FCVUZfUExBWSAtIGZyYW1lPSVkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksICpmcmFtZSk7Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQlyZXMgPSBqcGdfcWJ1ZihmaCwgKmZyYW1lLCBCVVpfTU9ERV9NT1RJT05fREVDT01QUkVTUyk7Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCXJldHVybiByZXM7Ci0JfQotCi0JY2FzZSBCVVpJT0NfU1lOQzoKLQl7Ci0JCXN0cnVjdCB6b3Jhbl9zeW5jICpic3luYyA9IGFyZzsKLQkJaW50IHJlczsKLQotCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBCVVpJT0NfU1lOQ1xuIiwgWlJfREVWTkFNRSh6cikpOwotCi0JCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlpZiAoZmgtPm1hcF9tb2RlID09IFpPUkFOX01BUF9NT0RFX1JBVykgewotCQkJZHByaW50aygyLCBLRVJOX1dBUk5JTkcKLQkJCQkiJXM6ICVzIC0gbm90IGluIGpwZyBjYXB0dXJlIG1vZGVcbiIsCi0JCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fKTsKLQkJCXJlcyA9IC1FSU5WQUw7Ci0JCX0gZWxzZSB7Ci0JCQlyZXMgPSBqcGdfc3luYyhmaCwgYnN5bmMpOwotCQl9Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCXJldHVybiByZXM7Ci0JfQotCi0JY2FzZSBCVVpJT0NfR19TVEFUVVM6Ci0JewotCQlzdHJ1Y3Qgem9yYW5fc3RhdHVzICpic3RhdCA9IGFyZzsKLQkJaW50IHN0YXR1cyA9IDAsIHJlcyA9IDA7Ci0JCXY0bDJfc3RkX2lkIG5vcm07Ci0KLQkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogQlVaSU9DX0dfU1RBVFVTXG4iLCBaUl9ERVZOQU1FKHpyKSk7Ci0KLQkJaWYgKHpyLT5jb2RlY19tb2RlICE9IEJVWl9NT0RFX0lETEUpIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlczogQlVaSU9DX0dfU1RBVFVTIGNhbGxlZCBidXQgQnV6IGluIGNhcHR1cmUvcGxheWJhY2sgbW9kZVxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlpZiAoenItPmNvZGVjX21vZGUgIT0gQlVaX01PREVfSURMRSkgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBCVVpJT0NfR19TVEFUVVMgY2FsbGVkLCBidXQgQnV6IGluIGNhcHR1cmUvcGxheWJhY2sgbW9kZVxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCQlyZXMgPSAtRUlOVkFMOwotCQkJZ290byBnc3RhdF91bmxvY2tfYW5kX3JldHVybjsKLQkJfQotCi0JCWRlY29kZXJfY2FsbCh6ciwgdmlkZW8sIHNfcm91dGluZywKLQkJCQl6ci0+Y2FyZC5pbnB1dFtic3RhdC0+aW5wdXRdLm11eHNlbCwgMCwgMCk7Ci0KLQkJLyogc2xlZXAgMSBzZWNvbmQgKi8KLQkJc3NsZWVwKDEpOwotCi0JCS8qIEdldCBzdGF0dXMgb2YgdmlkZW8gZGVjb2RlciAqLwotCQlkZWNvZGVyX2NhbGwoenIsIHZpZGVvLCBxdWVyeXN0ZCwgJm5vcm0pOwotCQlkZWNvZGVyX2NhbGwoenIsIHZpZGVvLCBnX2lucHV0X3N0YXR1cywgJnN0YXR1cyk7Ci0KLQkJLyogcmVzdG9yZSBwcmV2aW91cyBpbnB1dCBhbmQgbm9ybSAqLwotCQlkZWNvZGVyX2NhbGwoenIsIHZpZGVvLCBzX3JvdXRpbmcsCi0JCQkJenItPmNhcmQuaW5wdXRbenItPmlucHV0XS5tdXhzZWwsIDAsIDApOwotZ3N0YXRfdW5sb2NrX2FuZF9yZXR1cm46Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCWlmICghcmVzKSB7Ci0JCQlic3RhdC0+c2lnbmFsID0KLQkJCSAgICAoc3RhdHVzICYgVjRMMl9JTl9TVF9OT19TSUdOQUwpID8gMCA6IDE7Ci0JCQlpZiAobm9ybSAmIFY0TDJfU1REX05UU0MpCi0JCQkJYnN0YXQtPm5vcm0gPSBaT1JBTl9WSURNT0RFX05UU0M7Ci0JCQllbHNlIGlmIChub3JtICYgVjRMMl9TVERfU0VDQU0pCi0JCQkJYnN0YXQtPm5vcm0gPSBaT1JBTl9WSURNT0RFX1NFQ0FNOwotCQkJZWxzZQotCQkJCWJzdGF0LT5ub3JtID0gWk9SQU5fVklETU9ERV9QQUw7Ci0KLQkJCWJzdGF0LT5jb2xvciA9Ci0JCQkgICAgKHN0YXR1cyAmIFY0TDJfSU5fU1RfTk9fQ09MT1IpID8gMCA6IDE7Ci0JCX0KLQotCQlyZXR1cm4gcmVzOwotCX0KLQotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLX0KLQotc3RhdGljIGludCB6b3Jhbl92aWRpb2NnbWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwgc3RydWN0IHZpZGVvX21idWYgKnZtYnVmKQotewotCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBfX2ZoOwotCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7Ci0JaW50IGksIHJlcyA9IDA7Ci0KLQotCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCWlmIChmaC0+YnVmZmVycy5hbGxvY2F0ZWQpIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9FUlIKLQkJCSIlczogVklESU9DR01CVUYgLSBidWZmZXJzIGFscmVhZHkgYWxsb2NhdGVkXG4iLAotCQkJWlJfREVWTkFNRSh6cikpOwotCQlyZXMgPSAtRUlOVkFMOwotCQlnb3RvIHY0bDFyZXFidWZfdW5sb2NrX2FuZF9yZXR1cm47Ci0JfQotCi0JLyogVGhlIG5leHQgbW1hcCB3aWxsIG1hcCB0aGUgVjRMIGJ1ZmZlcnMgKi8KLQltYXBfbW9kZV9yYXcoZmgpOwotCi0JaWYgKHY0bF9mYnVmZmVyX2FsbG9jKGZoKSkgewotCQlyZXMgPSAtRU5PTUVNOwotCQlnb3RvIHY0bDFyZXFidWZfdW5sb2NrX2FuZF9yZXR1cm47Ci0JfQotCi0Jdm1idWYtPnNpemUgPSBmaC0+YnVmZmVycy5udW1fYnVmZmVycyAqIGZoLT5idWZmZXJzLmJ1ZmZlcl9zaXplOwotCXZtYnVmLT5mcmFtZXMgPSBmaC0+YnVmZmVycy5udW1fYnVmZmVyczsKLQlmb3IgKGkgPSAwOyBpIDwgdm1idWYtPmZyYW1lczsgaSsrKQotCQl2bWJ1Zi0+b2Zmc2V0c1tpXSA9IGkgKiBmaC0+YnVmZmVycy5idWZmZXJfc2l6ZTsKLQotdjRsMXJlcWJ1Zl91bmxvY2tfYW5kX3JldHVybjoKLQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCXJldHVybiByZXM7Ci19Ci0jZW5kaWYKLQogc3RhdGljIGludCB6b3Jhbl9xdWVyeWNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwgc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqY2FwKQogewogCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBfX2ZoOwpAQCAtMjUzMyw2ICsyMjE2LDcgQEAKIAkJCXJlcyA9IC1FQUdBSU47CiAJCQlnb3RvIGRxYnVmX3VubG9ja19hbmRfcmV0dXJuOwogCQl9CisJCWJzLmZyYW1lID0gMDsgLyogc3VwcHJlc3MgY29tcGlsZXIgd2FybmluZyAqLwogCQlyZXMgPSBqcGdfc3luYyhmaCwgJmJzKTsKIAkJaWYgKHJlcykKIAkJCWdvdG8gZHFidWZfdW5sb2NrX2FuZF9yZXR1cm47CkBAIC0yNzY2LDExICsyNDUwLDYgQEAKIAogCWlmIChpbnAtPmluZGV4ID49IHpyLT5jYXJkLmlucHV0cykKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JZWxzZSB7Ci0JCWludCBpZCA9IGlucC0+aW5kZXg7Ci0JCW1lbXNldChpbnAsIDAsIHNpemVvZigqaW5wKSk7Ci0JCWlucC0+aW5kZXggPSBpZDsKLQl9CiAKIAlzdHJuY3B5KGlucC0+bmFtZSwgenItPmNhcmQuaW5wdXRbaW5wLT5pbmRleF0ubmFtZSwKIAkJc2l6ZW9mKGlucC0+bmFtZSkgLSAxKTsKQEAgLTI4MjAsNyArMjQ5OSw2IEBACiAJaWYgKG91dHAtPmluZGV4ICE9IDApCiAJCXJldHVybiAtRUlOVkFMOwogCi0JbWVtc2V0KG91dHAsIDAsIHNpemVvZigqb3V0cCkpOwogCW91dHAtPmluZGV4ID0gMDsKIAlvdXRwLT50eXBlID0gVjRMMl9PVVRQVVRfVFlQRV9BTkFMT0dWR0FPVkVSTEFZOwogCXN0cm5jcHkob3V0cC0+bmFtZSwgIkF1dG9kZXRlY3QiLCBzaXplb2Yob3V0cC0+bmFtZSktMSk7CkBAIC0zMzY0LDEwICszMDQyLDYgQEAKIAkudmlkaW9jX3F1ZXJ5Y3RybCAJCSAgICA9IHpvcmFuX3F1ZXJ5Y3RybCwKIAkudmlkaW9jX3NfY3RybCAgICAgICAJCSAgICA9IHpvcmFuX3NfY3RybCwKIAkudmlkaW9jX2dfY3RybCAgICAgICAJCSAgICA9IHpvcmFuX2dfY3RybCwKLSNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKLQkudmlkaW9jX2RlZmF1bHQgCQkgICAgPSB6b3Jhbl9kZWZhdWx0LAotCS52aWRpb2NnbWJ1ZiAJCQkgICAgPSB6b3Jhbl92aWRpb2NnbWJ1ZiwKLSNlbmRpZgogfTsKIAogLyogcGxlYXNlIHVzZSB6ci0+cmVzb3VyY2VfbG9jayBjb25zaXN0ZW50bHkgYW5kIGtpbGwgdGhpcyB3cmFwcGVyICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9LY29uZmlnIGIvZHJpdmVycy9tZmQvS2NvbmZpZwppbmRleCAzYTE0OTNiLi5kYTlkMjk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWZkL0tjb25maWcKQEAgLTIxOCwxMiArMjE4LDEyIEBACiAJCUtleXBhZDogc3RtcGUta2V5cGFkCiAJCVRvdWNoc2NyZWVuOiBzdG1wZS10cwogCi1jb25maWcgTUZEX1RDMzU4OTIKLQlib29sICJTdXBwb3J0IFRvc2hpYmEgVEMzNTg5MiIKK2NvbmZpZyBNRkRfVEMzNTg5WAorCWJvb2wgIlN1cHBvcnQgVG9zaGliYSBUQzM1ODkyIGFuZCB2YXJpYW50cyIKIAlkZXBlbmRzIG9uIEkyQz15ICYmIEdFTkVSSUNfSEFSRElSUVMKIAlzZWxlY3QgTUZEX0NPUkUKIAloZWxwCi0JICBTdXBwb3J0IGZvciB0aGUgVG9zaGliYSBUQzM1ODkyIEkvTyBFeHBhbmRlci4KKwkgIFN1cHBvcnQgZm9yIHRoZSBUb3NoaWJhIFRDMzU4OTIgYW5kIHZhcmlhbnRzIEkvTyBFeHBhbmRlci4KIAogCSAgVGhpcyBkcml2ZXIgcHJvdmlkZXMgY29tbW9uIHN1cHBvcnQgZm9yIGFjY2Vzc2luZyB0aGUgZGV2aWNlLAogCSAgYWRkaXRpb25hbCBkcml2ZXJzIG11c3QgYmUgZW5hYmxlZCBpbiBvcmRlciB0byB1c2UgdGhlCkBAIC02MDYsNiArNjA2LDE2IEBACiAJICBWSUEgVlg4NTUvVlg4NzUgc291dGggYnJpZGdlLiBZb3Ugd2lsbCBuZWVkIHRvIGVuYWJsZSB0aGUgdng4NTVfc3BpCiAJICBhbmQvb3Igdng4NTVfZ3BpbyBkcml2ZXJzIGZvciB0aGlzIHRvIGRvIGFueXRoaW5nIHVzZWZ1bC4KIAorY29uZmlnIE1GRF9XTDEyNzNfQ09SRQorCXRyaXN0YXRlCisJZGVwZW5kcyBvbiBJMkMKKwlzZWxlY3QgTUZEX0NPUkUKKwlkZWZhdWx0IG4KKwloZWxwCisJICBUaGlzIGlzIHRoZSBjb3JlIGRyaXZlciBmb3IgdGhlIFRJIFdMMTI3MyBGTSByYWRpby4gVGhpcyBNRkQKKwkgIGRyaXZlciBjb25uZWN0cyB0aGUgcmFkaW8td2wxMjczIFY0TDIgbW9kdWxlIGFuZCB0aGUgd2wxMjczCisJICBhdWRpbyBjb2RlYy4KKwogZW5kaWYgIyBNRkRfU1VQUE9SVAogCiBtZW51ICJNdWx0aW1lZGlhIENhcGFiaWxpdGllcyBQb3J0IGRyaXZlcnMiCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9NYWtlZmlsZSBiL2RyaXZlcnMvbWZkL01ha2VmaWxlCmluZGV4IGY1NGIzNjUuLjg0OGU3ZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWZkL01ha2VmaWxlCkBAIC0xNiw3ICsxNiw3IEBACiBvYmotJChDT05GSUdfTUZEX0RNMzU1RVZNX01TUCkJKz0gZG0zNTVldm1fbXNwLm8KIAogb2JqLSQoQ09ORklHX01GRF9TVE1QRSkJCSs9IHN0bXBlLm8KLW9iai0kKENPTkZJR19NRkRfVEMzNTg5MikJKz0gdGMzNTg5Mi5vCitvYmotJChDT05GSUdfTUZEX1RDMzU4OVgpCSs9IHRjMzU4OXgubwogb2JqLSQoQ09ORklHX01GRF9UN0w2NlhCKQkrPSB0N2w2NnhiLm8gdG1pb19jb3JlLm8KIG9iai0kKENPTkZJR19NRkRfVEM2Mzg3WEIpCSs9IHRjNjM4N3hiLm8gdG1pb19jb3JlLm8KIG9iai0kKENPTkZJR19NRkRfVEM2MzkzWEIpCSs9IHRjNjM5M3hiLm8gdG1pb19jb3JlLm8KQEAgLTgxLDMgKzgxLDQgQEAKIG9iai0kKENPTkZJR19NRkRfSlo0NzQwX0FEQykJKz0gano0NzQwLWFkYy5vCiBvYmotJChDT05GSUdfTUZEX1RQUzY1ODZYKQkrPSB0cHM2NTg2eC5vCiBvYmotJChDT05GSUdfTUZEX1ZYODU1KQkJKz0gdng4NTUubworb2JqLSQoQ09ORklHX01GRF9XTDEyNzNfQ09SRSkJKz0gd2wxMjczLWNvcmUubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvbWVuZWxhdXMuYyBiL2RyaXZlcnMvbWZkL21lbmVsYXVzLmMKaW5kZXggNGJhODViYi4uOWNlZThlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvbWVuZWxhdXMuYworKysgYi9kcml2ZXJzL21mZC9tZW5lbGF1cy5jCkBAIC0xMjU5LDcgKzEyNTksNyBAQAogCXJldHVybiAwOwogZmFpbDI6CiAJZnJlZV9pcnEoY2xpZW50LT5pcnEsIG1lbmVsYXVzKTsKLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCWZsdXNoX3dvcmtfc3luYygmbWVuZWxhdXMtPndvcmspOwogZmFpbDE6CiAJa2ZyZWUobWVuZWxhdXMpOwogCXJldHVybiBlcnI7CkBAIC0xMjcwLDYgKzEyNzAsNyBAQAogCXN0cnVjdCBtZW5lbGF1c19jaGlwCSptZW5lbGF1cyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCiAJZnJlZV9pcnEoY2xpZW50LT5pcnEsIG1lbmVsYXVzKTsKKwlmbHVzaF93b3JrX3N5bmMoJm1lbmVsYXVzLT53b3JrKTsKIAlrZnJlZShtZW5lbGF1cyk7CiAJdGhlX21lbmVsYXVzID0gTlVMTDsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3RjMzU4OTIuYyBiL2RyaXZlcnMvbWZkL3RjMzU4OTIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTYxOWUyYS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21mZC90YzM1ODkyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgU1QtRXJpY3Nzb24gU0EgMjAxMAotICoKLSAqIExpY2Vuc2UgVGVybXM6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIKLSAqIEF1dGhvcjogSGFudW1hdGggUHJhc2FkIDxoYW51bWF0aC5wcmFzYWRAc3Rlcmljc3Nvbi5jb20+IGZvciBTVC1Fcmljc3NvbgotICogQXV0aG9yOiBSYWJpbiBWaW5jZW50IDxyYWJpbi52aW5jZW50QHN0ZXJpY3Nzb24uY29tPiBmb3IgU1QtRXJpY3Nzb24KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotI2luY2x1ZGUgPGxpbnV4L21mZC9jb3JlLmg+Ci0jaW5jbHVkZSA8bGludXgvbWZkL3RjMzU4OTIuaD4KLQotLyoqCi0gKiB0YzM1ODkyX3JlZ19yZWFkKCkgLSByZWFkIGEgc2luZ2xlIFRDMzU4OTIgcmVnaXN0ZXIKLSAqIEB0YzM1ODkyOglEZXZpY2UgdG8gcmVhZCBmcm9tCi0gKiBAcmVnOglSZWdpc3RlciB0byByZWFkCi0gKi8KLWludCB0YzM1ODkyX3JlZ19yZWFkKHN0cnVjdCB0YzM1ODkyICp0YzM1ODkyLCB1OCByZWcpCi17Ci0JaW50IHJldDsKLQotCXJldCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YSh0YzM1ODkyLT5pMmMsIHJlZyk7Ci0JaWYgKHJldCA8IDApCi0JCWRldl9lcnIodGMzNTg5Mi0+ZGV2LCAiZmFpbGVkIHRvIHJlYWQgcmVnICUjeDogJWRcbiIsCi0JCQlyZWcsIHJldCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTF9HUEwodGMzNTg5Ml9yZWdfcmVhZCk7Ci0KLS8qKgotICogdGMzNTg5Ml9yZWdfcmVhZCgpIC0gd3JpdGUgYSBzaW5nbGUgVEMzNTg5MiByZWdpc3RlcgotICogQHRjMzU4OTI6CURldmljZSB0byB3cml0ZSB0bwotICogQHJlZzoJUmVnaXN0ZXIgdG8gcmVhZAotICogQGRhdGE6CVZhbHVlIHRvIHdyaXRlCi0gKi8KLWludCB0YzM1ODkyX3JlZ193cml0ZShzdHJ1Y3QgdGMzNTg5MiAqdGMzNTg5MiwgdTggcmVnLCB1OCBkYXRhKQotewotCWludCByZXQ7Ci0KLQlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKHRjMzU4OTItPmkyYywgcmVnLCBkYXRhKTsKLQlpZiAocmV0IDwgMCkKLQkJZGV2X2Vycih0YzM1ODkyLT5kZXYsICJmYWlsZWQgdG8gd3JpdGUgcmVnICUjeDogJWRcbiIsCi0JCQlyZWcsIHJldCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTF9HUEwodGMzNTg5Ml9yZWdfd3JpdGUpOwotCi0vKioKLSAqIHRjMzU4OTJfYmxvY2tfcmVhZCgpIC0gcmVhZCBtdWx0aXBsZSBUQzM1ODkyIHJlZ2lzdGVycwotICogQHRjMzU4OTI6CURldmljZSB0byByZWFkIGZyb20KLSAqIEByZWc6CUZpcnN0IHJlZ2lzdGVyCi0gKiBAbGVuZ3RoOglOdW1iZXIgb2YgcmVnaXN0ZXJzCi0gKiBAdmFsdWVzOglCdWZmZXIgdG8gd3JpdGUgdG8KLSAqLwotaW50IHRjMzU4OTJfYmxvY2tfcmVhZChzdHJ1Y3QgdGMzNTg5MiAqdGMzNTg5MiwgdTggcmVnLCB1OCBsZW5ndGgsIHU4ICp2YWx1ZXMpCi17Ci0JaW50IHJldDsKLQotCXJldCA9IGkyY19zbWJ1c19yZWFkX2kyY19ibG9ja19kYXRhKHRjMzU4OTItPmkyYywgcmVnLCBsZW5ndGgsIHZhbHVlcyk7Ci0JaWYgKHJldCA8IDApCi0JCWRldl9lcnIodGMzNTg5Mi0+ZGV2LCAiZmFpbGVkIHRvIHJlYWQgcmVncyAlI3g6ICVkXG4iLAotCQkJcmVnLCByZXQpOwotCi0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHRjMzU4OTJfYmxvY2tfcmVhZCk7Ci0KLS8qKgotICogdGMzNTg5Ml9ibG9ja193cml0ZSgpIC0gd3JpdGUgbXVsdGlwbGUgVEMzNTg5MiByZWdpc3RlcnMKLSAqIEB0YzM1ODkyOglEZXZpY2UgdG8gd3JpdGUgdG8KLSAqIEByZWc6CUZpcnN0IHJlZ2lzdGVyCi0gKiBAbGVuZ3RoOglOdW1iZXIgb2YgcmVnaXN0ZXJzCi0gKiBAdmFsdWVzOglWYWx1ZXMgdG8gd3JpdGUKLSAqLwotaW50IHRjMzU4OTJfYmxvY2tfd3JpdGUoc3RydWN0IHRjMzU4OTIgKnRjMzU4OTIsIHU4IHJlZywgdTggbGVuZ3RoLAotCQkJY29uc3QgdTggKnZhbHVlcykKLXsKLQlpbnQgcmV0OwotCi0JcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2kyY19ibG9ja19kYXRhKHRjMzU4OTItPmkyYywgcmVnLCBsZW5ndGgsCi0JCQkJCSAgICAgdmFsdWVzKTsKLQlpZiAocmV0IDwgMCkKLQkJZGV2X2Vycih0YzM1ODkyLT5kZXYsICJmYWlsZWQgdG8gd3JpdGUgcmVncyAlI3g6ICVkXG4iLAotCQkJcmVnLCByZXQpOwotCi0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHRjMzU4OTJfYmxvY2tfd3JpdGUpOwotCi0vKioKLSAqIHRjMzU4OTJfc2V0X2JpdHMoKSAtIHNldCB0aGUgdmFsdWUgb2YgYSBiaXRmaWVsZCBpbiBhIFRDMzU4OTIgcmVnaXN0ZXIKLSAqIEB0YzM1ODkyOglEZXZpY2UgdG8gd3JpdGUgdG8KLSAqIEByZWc6CVJlZ2lzdGVyIHRvIHdyaXRlCi0gKiBAbWFzazoJTWFzayBvZiBiaXRzIHRvIHNldAotICogQHZhbHVlczoJVmFsdWUgdG8gc2V0Ci0gKi8KLWludCB0YzM1ODkyX3NldF9iaXRzKHN0cnVjdCB0YzM1ODkyICp0YzM1ODkyLCB1OCByZWcsIHU4IG1hc2ssIHU4IHZhbCkKLXsKLQlpbnQgcmV0OwotCi0JbXV0ZXhfbG9jaygmdGMzNTg5Mi0+bG9jayk7Ci0KLQlyZXQgPSB0YzM1ODkyX3JlZ19yZWFkKHRjMzU4OTIsIHJlZyk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gb3V0OwotCi0JcmV0ICY9IH5tYXNrOwotCXJldCB8PSB2YWw7Ci0KLQlyZXQgPSB0YzM1ODkyX3JlZ193cml0ZSh0YzM1ODkyLCByZWcsIHJldCk7Ci0KLW91dDoKLQltdXRleF91bmxvY2soJnRjMzU4OTItPmxvY2spOwotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTCh0YzM1ODkyX3NldF9iaXRzKTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBncGlvX3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0CT0gVEMzNTg5Ml9JTlRfR1BJSVJRLAotCQkuZW5kCT0gVEMzNTg5Ml9JTlRfR1BJSVJRLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBtZmRfY2VsbCB0YzM1ODkyX2RldnNbXSA9IHsKLQl7Ci0JCS5uYW1lCQk9ICJ0YzM1ODkyLWdwaW8iLAotCQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoZ3Bpb19yZXNvdXJjZXMpLAotCQkucmVzb3VyY2VzCT0gJmdwaW9fcmVzb3VyY2VzWzBdLAotCX0sCi19OwotCi1zdGF0aWMgaXJxcmV0dXJuX3QgdGMzNTg5Ml9pcnEoaW50IGlycSwgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgdGMzNTg5MiAqdGMzNTg5MiA9IGRhdGE7Ci0JaW50IHN0YXR1czsKLQotCXN0YXR1cyA9IHRjMzU4OTJfcmVnX3JlYWQodGMzNTg5MiwgVEMzNTg5Ml9JUlFTVCk7Ci0JaWYgKHN0YXR1cyA8IDApCi0JCXJldHVybiBJUlFfTk9ORTsKLQotCXdoaWxlIChzdGF0dXMpIHsKLQkJaW50IGJpdCA9IF9fZmZzKHN0YXR1cyk7Ci0KLQkJaGFuZGxlX25lc3RlZF9pcnEodGMzNTg5Mi0+aXJxX2Jhc2UgKyBiaXQpOwotCQlzdGF0dXMgJj0gfigxIDw8IGJpdCk7Ci0JfQotCi0JLyoKLQkgKiBBIGR1bW15IHJlYWQgb3Igd3JpdGUgKHRvIGFueSByZWdpc3RlcikgYXBwZWFycyB0byBiZSBuZWNlc3NhcnkgdG8KLQkgKiBoYXZlIHRoZSBsYXN0IGludGVycnVwdCBjbGVhciAoZm9yIGV4YW1wbGUsIEdQSU8gSUMgd3JpdGUpIHRha2UKLQkgKiBlZmZlY3QuCi0JICovCi0JdGMzNTg5Ml9yZWdfcmVhZCh0YzM1ODkyLCBUQzM1ODkyX0lSUVNUKTsKLQotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotc3RhdGljIHZvaWQgdGMzNTg5Ml9pcnFfZHVtbXkodW5zaWduZWQgaW50IGlycSkKLXsKLQkvKiBObyBtYXNrL3VubWFzayBhdCB0aGlzIGxldmVsICovCi19Ci0KLXN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgdGMzNTg5Ml9pcnFfY2hpcCA9IHsKLQkubmFtZQk9ICJ0YzM1ODkyIiwKLQkubWFzawk9IHRjMzU4OTJfaXJxX2R1bW15LAotCS51bm1hc2sJPSB0YzM1ODkyX2lycV9kdW1teSwKLX07Ci0KLXN0YXRpYyBpbnQgdGMzNTg5Ml9pcnFfaW5pdChzdHJ1Y3QgdGMzNTg5MiAqdGMzNTg5MikKLXsKLQlpbnQgYmFzZSA9IHRjMzU4OTItPmlycV9iYXNlOwotCWludCBpcnE7Ci0KLQlmb3IgKGlycSA9IGJhc2U7IGlycSA8IGJhc2UgKyBUQzM1ODkyX05SX0lOVEVSTkFMX0lSUVM7IGlycSsrKSB7Ci0JCXNldF9pcnFfY2hpcF9kYXRhKGlycSwgdGMzNTg5Mik7Ci0JCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihpcnEsICZ0YzM1ODkyX2lycV9jaGlwLAotCQkJCQkgaGFuZGxlX2VkZ2VfaXJxKTsKLQkJc2V0X2lycV9uZXN0ZWRfdGhyZWFkKGlycSwgMSk7Ci0jaWZkZWYgQ09ORklHX0FSTQotCQlzZXRfaXJxX2ZsYWdzKGlycSwgSVJRRl9WQUxJRCk7Ci0jZWxzZQotCQlzZXRfaXJxX25vcHJvYmUoaXJxKTsKLSNlbmRpZgotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCB0YzM1ODkyX2lycV9yZW1vdmUoc3RydWN0IHRjMzU4OTIgKnRjMzU4OTIpCi17Ci0JaW50IGJhc2UgPSB0YzM1ODkyLT5pcnFfYmFzZTsKLQlpbnQgaXJxOwotCi0JZm9yIChpcnEgPSBiYXNlOyBpcnEgPCBiYXNlICsgVEMzNTg5Ml9OUl9JTlRFUk5BTF9JUlFTOyBpcnErKykgewotI2lmZGVmIENPTkZJR19BUk0KLQkJc2V0X2lycV9mbGFncyhpcnEsIDApOwotI2VuZGlmCi0JCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihpcnEsIE5VTEwsIE5VTEwpOwotCQlzZXRfaXJxX2NoaXBfZGF0YShpcnEsIE5VTEwpOwotCX0KLX0KLQotc3RhdGljIGludCB0YzM1ODkyX2NoaXBfaW5pdChzdHJ1Y3QgdGMzNTg5MiAqdGMzNTg5MikKLXsKLQlpbnQgbWFuZiwgdmVyLCByZXQ7Ci0KLQltYW5mID0gdGMzNTg5Ml9yZWdfcmVhZCh0YzM1ODkyLCBUQzM1ODkyX01BTkZDT0RFKTsKLQlpZiAobWFuZiA8IDApCi0JCXJldHVybiBtYW5mOwotCi0JdmVyID0gdGMzNTg5Ml9yZWdfcmVhZCh0YzM1ODkyLCBUQzM1ODkyX1ZFUlNJT04pOwotCWlmICh2ZXIgPCAwKQotCQlyZXR1cm4gdmVyOwotCi0JaWYgKG1hbmYgIT0gVEMzNTg5Ml9NQU5GQ09ERV9NQUdJQykgewotCQlkZXZfZXJyKHRjMzU4OTItPmRldiwgInVua25vd24gbWFudWZhY3R1cmVyOiAlI3hcbiIsIG1hbmYpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlkZXZfaW5mbyh0YzM1ODkyLT5kZXYsICJtYW51ZmFjdHVyZXI6ICUjeCwgdmVyc2lvbjogJSN4XG4iLCBtYW5mLCB2ZXIpOwotCi0JLyogUHV0IGV2ZXJ5dGhpbmcgZXhjZXB0IHRoZSBJUlEgbW9kdWxlIGludG8gcmVzZXQgKi8KLQlyZXQgPSB0YzM1ODkyX3JlZ193cml0ZSh0YzM1ODkyLCBUQzM1ODkyX1JTVENUUkwsCi0JCQkJVEMzNTg5Ml9SU1RDVFJMX1RJTVJTVAotCQkJCXwgVEMzNTg5Ml9SU1RDVFJMX1JPVFJTVAotCQkJCXwgVEMzNTg5Ml9SU1RDVFJMX0tCRFJTVAotCQkJCXwgVEMzNTg5Ml9SU1RDVFJMX0dQSVJTVCk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQkvKiBDbGVhciB0aGUgcmVzZXQgaW50ZXJydXB0LiAqLwotCXJldHVybiB0YzM1ODkyX3JlZ193cml0ZSh0YzM1ODkyLCBUQzM1ODkyX1JTVElOVENMUiwgMHgxKTsKLX0KLQotc3RhdGljIGludCBfX2RldmluaXQgdGMzNTg5Ml9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLAotCQkJCSAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKLXsKLQlzdHJ1Y3QgdGMzNTg5Ml9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGkyYy0+ZGV2LnBsYXRmb3JtX2RhdGE7Ci0Jc3RydWN0IHRjMzU4OTIgKnRjMzU4OTI7Ci0JaW50IHJldDsKLQotCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoaTJjLT5hZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEKLQkJCQkgICAgIHwgSTJDX0ZVTkNfU01CVVNfSTJDX0JMT0NLKSkKLQkJcmV0dXJuIC1FSU87Ci0KLQl0YzM1ODkyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHRjMzU4OTIpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXRjMzU4OTIpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JbXV0ZXhfaW5pdCgmdGMzNTg5Mi0+bG9jayk7Ci0KLQl0YzM1ODkyLT5kZXYgPSAmaTJjLT5kZXY7Ci0JdGMzNTg5Mi0+aTJjID0gaTJjOwotCXRjMzU4OTItPnBkYXRhID0gcGRhdGE7Ci0JdGMzNTg5Mi0+aXJxX2Jhc2UgPSBwZGF0YS0+aXJxX2Jhc2U7Ci0JdGMzNTg5Mi0+bnVtX2dwaW8gPSBpZC0+ZHJpdmVyX2RhdGE7Ci0KLQlpMmNfc2V0X2NsaWVudGRhdGEoaTJjLCB0YzM1ODkyKTsKLQotCXJldCA9IHRjMzU4OTJfY2hpcF9pbml0KHRjMzU4OTIpOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0X2ZyZWU7Ci0KLQlyZXQgPSB0YzM1ODkyX2lycV9pbml0KHRjMzU4OTIpOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0X2ZyZWU7Ci0KLQlyZXQgPSByZXF1ZXN0X3RocmVhZGVkX2lycSh0YzM1ODkyLT5pMmMtPmlycSwgTlVMTCwgdGMzNTg5Ml9pcnEsCi0JCQkJICAgSVJRRl9UUklHR0VSX0ZBTExJTkcgfCBJUlFGX09ORVNIT1QsCi0JCQkJICAgInRjMzU4OTIiLCB0YzM1ODkyKTsKLQlpZiAocmV0KSB7Ci0JCWRldl9lcnIodGMzNTg5Mi0+ZGV2LCAiZmFpbGVkIHRvIHJlcXVlc3QgSVJROiAlZFxuIiwgcmV0KTsKLQkJZ290byBvdXRfcmVtb3ZlaXJxOwotCX0KLQotCXJldCA9IG1mZF9hZGRfZGV2aWNlcyh0YzM1ODkyLT5kZXYsIC0xLCB0YzM1ODkyX2RldnMsCi0JCQkgICAgICBBUlJBWV9TSVpFKHRjMzU4OTJfZGV2cyksIE5VTEwsCi0JCQkgICAgICB0YzM1ODkyLT5pcnFfYmFzZSk7Ci0JaWYgKHJldCkgewotCQlkZXZfZXJyKHRjMzU4OTItPmRldiwgImZhaWxlZCB0byBhZGQgY2hpbGRyZW5cbiIpOwotCQlnb3RvIG91dF9mcmVlaXJxOwotCX0KLQotCXJldHVybiAwOwotCi1vdXRfZnJlZWlycToKLQlmcmVlX2lycSh0YzM1ODkyLT5pMmMtPmlycSwgdGMzNTg5Mik7Ci1vdXRfcmVtb3ZlaXJxOgotCXRjMzU4OTJfaXJxX3JlbW92ZSh0YzM1ODkyKTsKLW91dF9mcmVlOgotCWtmcmVlKHRjMzU4OTIpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgX19kZXZleGl0IHRjMzU4OTJfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0Jc3RydWN0IHRjMzU4OTIgKnRjMzU4OTIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQotCW1mZF9yZW1vdmVfZGV2aWNlcyh0YzM1ODkyLT5kZXYpOwotCi0JZnJlZV9pcnEodGMzNTg5Mi0+aTJjLT5pcnEsIHRjMzU4OTIpOwotCXRjMzU4OTJfaXJxX3JlbW92ZSh0YzM1ODkyKTsKLQotCWtmcmVlKHRjMzU4OTIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCB0YzM1ODkyX2lkW10gPSB7Ci0JeyAidGMzNTg5MiIsIDI0IH0sCi0JeyB9Ci19OwotTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHRjMzU4OTJfaWQpOwotCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgdGMzNTg5Ml9kcml2ZXIgPSB7Ci0JLmRyaXZlci5uYW1lCT0gInRjMzU4OTIiLAotCS5kcml2ZXIub3duZXIJPSBUSElTX01PRFVMRSwKLQkucHJvYmUJCT0gdGMzNTg5Ml9wcm9iZSwKLQkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHRjMzU4OTJfcmVtb3ZlKSwKLQkuaWRfdGFibGUJPSB0YzM1ODkyX2lkLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgdGMzNTg5Ml9pbml0KHZvaWQpCi17Ci0JcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZ0YzM1ODkyX2RyaXZlcik7Ci19Ci1zdWJzeXNfaW5pdGNhbGwodGMzNTg5Ml9pbml0KTsKLQotc3RhdGljIHZvaWQgX19leGl0IHRjMzU4OTJfZXhpdCh2b2lkKQotewotCWkyY19kZWxfZHJpdmVyKCZ0YzM1ODkyX2RyaXZlcik7Ci19Ci1tb2R1bGVfZXhpdCh0YzM1ODkyX2V4aXQpOwotCi1NT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIlRDMzU4OTIgTUZEIGNvcmUgZHJpdmVyIik7Ci1NT0RVTEVfQVVUSE9SKCJIYW51bWF0aCBQcmFzYWQsIFJhYmluIFZpbmNlbnQiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3RjMzU4OXguYyBiL2RyaXZlcnMvbWZkL3RjMzU4OXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjlkYmVlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZmQvdGMzNTg5eC5jCkBAIC0wLDAgKzEsNDIyIEBACisvKgorICogQ29weXJpZ2h0IChDKSBTVC1Fcmljc3NvbiBTQSAyMDEwCisgKgorICogTGljZW5zZSBUZXJtczogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMgorICogQXV0aG9yOiBIYW51bWF0aCBQcmFzYWQgPGhhbnVtYXRoLnByYXNhZEBzdGVyaWNzc29uLmNvbT4gZm9yIFNULUVyaWNzc29uCisgKiBBdXRob3I6IFJhYmluIFZpbmNlbnQgPHJhYmluLnZpbmNlbnRAc3Rlcmljc3Nvbi5jb20+IGZvciBTVC1Fcmljc3NvbgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL2NvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvdGMzNTg5eC5oPgorCisjZGVmaW5lIFRDMzU4OXhfQ0xLTU9ERV9NT0RDVExfU0xFRVAJCTB4MAorI2RlZmluZSBUQzM1ODl4X0NMS01PREVfTU9EQ1RMX09QRVJBVElPTgkoMSA8PCAwKQorCisvKioKKyAqIHRjMzU4OXhfcmVnX3JlYWQoKSAtIHJlYWQgYSBzaW5nbGUgVEMzNTg5eCByZWdpc3RlcgorICogQHRjMzU4OXg6CURldmljZSB0byByZWFkIGZyb20KKyAqIEByZWc6CVJlZ2lzdGVyIHRvIHJlYWQKKyAqLworaW50IHRjMzU4OXhfcmVnX3JlYWQoc3RydWN0IHRjMzU4OXggKnRjMzU4OXgsIHU4IHJlZykKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKHRjMzU4OXgtPmkyYywgcmVnKTsKKwlpZiAocmV0IDwgMCkKKwkJZGV2X2Vycih0YzM1ODl4LT5kZXYsICJmYWlsZWQgdG8gcmVhZCByZWcgJSN4OiAlZFxuIiwKKwkJCXJlZywgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh0YzM1ODl4X3JlZ19yZWFkKTsKKworLyoqCisgKiB0YzM1ODl4X3JlZ19yZWFkKCkgLSB3cml0ZSBhIHNpbmdsZSBUQzM1ODl4IHJlZ2lzdGVyCisgKiBAdGMzNTg5eDoJRGV2aWNlIHRvIHdyaXRlIHRvCisgKiBAcmVnOglSZWdpc3RlciB0byByZWFkCisgKiBAZGF0YToJVmFsdWUgdG8gd3JpdGUKKyAqLworaW50IHRjMzU4OXhfcmVnX3dyaXRlKHN0cnVjdCB0YzM1ODl4ICp0YzM1ODl4LCB1OCByZWcsIHU4IGRhdGEpCit7CisJaW50IHJldDsKKworCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEodGMzNTg5eC0+aTJjLCByZWcsIGRhdGEpOworCWlmIChyZXQgPCAwKQorCQlkZXZfZXJyKHRjMzU4OXgtPmRldiwgImZhaWxlZCB0byB3cml0ZSByZWcgJSN4OiAlZFxuIiwKKwkJCXJlZywgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh0YzM1ODl4X3JlZ193cml0ZSk7CisKKy8qKgorICogdGMzNTg5eF9ibG9ja19yZWFkKCkgLSByZWFkIG11bHRpcGxlIFRDMzU4OXggcmVnaXN0ZXJzCisgKiBAdGMzNTg5eDoJRGV2aWNlIHRvIHJlYWQgZnJvbQorICogQHJlZzoJRmlyc3QgcmVnaXN0ZXIKKyAqIEBsZW5ndGg6CU51bWJlciBvZiByZWdpc3RlcnMKKyAqIEB2YWx1ZXM6CUJ1ZmZlciB0byB3cml0ZSB0bworICovCitpbnQgdGMzNTg5eF9ibG9ja19yZWFkKHN0cnVjdCB0YzM1ODl4ICp0YzM1ODl4LCB1OCByZWcsIHU4IGxlbmd0aCwgdTggKnZhbHVlcykKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gaTJjX3NtYnVzX3JlYWRfaTJjX2Jsb2NrX2RhdGEodGMzNTg5eC0+aTJjLCByZWcsIGxlbmd0aCwgdmFsdWVzKTsKKwlpZiAocmV0IDwgMCkKKwkJZGV2X2Vycih0YzM1ODl4LT5kZXYsICJmYWlsZWQgdG8gcmVhZCByZWdzICUjeDogJWRcbiIsCisJCQlyZWcsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwodGMzNTg5eF9ibG9ja19yZWFkKTsKKworLyoqCisgKiB0YzM1ODl4X2Jsb2NrX3dyaXRlKCkgLSB3cml0ZSBtdWx0aXBsZSBUQzM1ODl4IHJlZ2lzdGVycworICogQHRjMzU4OXg6CURldmljZSB0byB3cml0ZSB0bworICogQHJlZzoJRmlyc3QgcmVnaXN0ZXIKKyAqIEBsZW5ndGg6CU51bWJlciBvZiByZWdpc3RlcnMKKyAqIEB2YWx1ZXM6CVZhbHVlcyB0byB3cml0ZQorICovCitpbnQgdGMzNTg5eF9ibG9ja193cml0ZShzdHJ1Y3QgdGMzNTg5eCAqdGMzNTg5eCwgdTggcmVnLCB1OCBsZW5ndGgsCisJCQljb25zdCB1OCAqdmFsdWVzKQoreworCWludCByZXQ7CisKKwlyZXQgPSBpMmNfc21idXNfd3JpdGVfaTJjX2Jsb2NrX2RhdGEodGMzNTg5eC0+aTJjLCByZWcsIGxlbmd0aCwKKwkJCQkJICAgICB2YWx1ZXMpOworCWlmIChyZXQgPCAwKQorCQlkZXZfZXJyKHRjMzU4OXgtPmRldiwgImZhaWxlZCB0byB3cml0ZSByZWdzICUjeDogJWRcbiIsCisJCQlyZWcsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwodGMzNTg5eF9ibG9ja193cml0ZSk7CisKKy8qKgorICogdGMzNTg5eF9zZXRfYml0cygpIC0gc2V0IHRoZSB2YWx1ZSBvZiBhIGJpdGZpZWxkIGluIGEgVEMzNTg5eCByZWdpc3RlcgorICogQHRjMzU4OXg6CURldmljZSB0byB3cml0ZSB0bworICogQHJlZzoJUmVnaXN0ZXIgdG8gd3JpdGUKKyAqIEBtYXNrOglNYXNrIG9mIGJpdHMgdG8gc2V0CisgKiBAdmFsdWVzOglWYWx1ZSB0byBzZXQKKyAqLworaW50IHRjMzU4OXhfc2V0X2JpdHMoc3RydWN0IHRjMzU4OXggKnRjMzU4OXgsIHU4IHJlZywgdTggbWFzaywgdTggdmFsKQoreworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZ0YzM1ODl4LT5sb2NrKTsKKworCXJldCA9IHRjMzU4OXhfcmVnX3JlYWQodGMzNTg5eCwgcmVnKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwlyZXQgJj0gfm1hc2s7CisJcmV0IHw9IHZhbDsKKworCXJldCA9IHRjMzU4OXhfcmVnX3dyaXRlKHRjMzU4OXgsIHJlZywgcmV0KTsKKworb3V0OgorCW11dGV4X3VubG9jaygmdGMzNTg5eC0+bG9jayk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHRjMzU4OXhfc2V0X2JpdHMpOworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGdwaW9fcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSBUQzM1ODl4X0lOVF9HUElJUlEsCisJCS5lbmQJPSBUQzM1ODl4X0lOVF9HUElJUlEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGtleXBhZF9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydCAgPSBUQzM1ODl4X0lOVF9LQkRJUlEsCisJCS5lbmQgICAgPSBUQzM1ODl4X0lOVF9LQkRJUlEsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBtZmRfY2VsbCB0YzM1ODl4X2Rldl9ncGlvW10gPSB7CisJeworCQkubmFtZQkJPSAidGMzNTg5eC1ncGlvIiwKKwkJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGdwaW9fcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlcwk9ICZncGlvX3Jlc291cmNlc1swXSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBtZmRfY2VsbCB0YzM1ODl4X2Rldl9rZXlwYWRbXSA9IHsKKwl7CisJCS5uYW1lICAgICAgICAgICA9ICJ0YzM1ODl4LWtleXBhZCIsCisJCS5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUoa2V5cGFkX3Jlc291cmNlcyksCisJCS5yZXNvdXJjZXMgICAgICA9ICZrZXlwYWRfcmVzb3VyY2VzWzBdLAorCX0sCit9OworCitzdGF0aWMgaXJxcmV0dXJuX3QgdGMzNTg5eF9pcnEoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgdGMzNTg5eCAqdGMzNTg5eCA9IGRhdGE7CisJaW50IHN0YXR1czsKKworYWdhaW46CisJc3RhdHVzID0gdGMzNTg5eF9yZWdfcmVhZCh0YzM1ODl4LCBUQzM1ODl4X0lSUVNUKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcmV0dXJuIElSUV9OT05FOworCisJd2hpbGUgKHN0YXR1cykgeworCQlpbnQgYml0ID0gX19mZnMoc3RhdHVzKTsKKworCQloYW5kbGVfbmVzdGVkX2lycSh0YzM1ODl4LT5pcnFfYmFzZSArIGJpdCk7CisJCXN0YXR1cyAmPSB+KDEgPDwgYml0KTsKKwl9CisKKwkvKgorCSAqIEEgZHVtbXkgcmVhZCBvciB3cml0ZSAodG8gYW55IHJlZ2lzdGVyKSBhcHBlYXJzIHRvIGJlIG5lY2Vzc2FyeSB0bworCSAqIGhhdmUgdGhlIGxhc3QgaW50ZXJydXB0IGNsZWFyIChmb3IgZXhhbXBsZSwgR1BJTyBJQyB3cml0ZSkgdGFrZQorCSAqIGVmZmVjdC4gSW4gc3VjaCBhIGNhc2UsIHJlY2hlY2sgZm9yIGFueSBpbnRlcnJ1cHQgd2hpY2ggaXMgc3RpbGwKKwkgKiBwZW5kaW5nLgorCSAqLworCXN0YXR1cyA9IHRjMzU4OXhfcmVnX3JlYWQodGMzNTg5eCwgVEMzNTg5eF9JUlFTVCk7CisJaWYgKHN0YXR1cykKKwkJZ290byBhZ2FpbjsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCB0YzM1ODl4X2lycV9pbml0KHN0cnVjdCB0YzM1ODl4ICp0YzM1ODl4KQoreworCWludCBiYXNlID0gdGMzNTg5eC0+aXJxX2Jhc2U7CisJaW50IGlycTsKKworCWZvciAoaXJxID0gYmFzZTsgaXJxIDwgYmFzZSArIFRDMzU4OXhfTlJfSU5URVJOQUxfSVJRUzsgaXJxKyspIHsKKwkJc2V0X2lycV9jaGlwX2RhdGEoaXJxLCB0YzM1ODl4KTsKKwkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGlycSwgJmR1bW15X2lycV9jaGlwLAorCQkJCQkgaGFuZGxlX2VkZ2VfaXJxKTsKKwkJc2V0X2lycV9uZXN0ZWRfdGhyZWFkKGlycSwgMSk7CisjaWZkZWYgQ09ORklHX0FSTQorCQlzZXRfaXJxX2ZsYWdzKGlycSwgSVJRRl9WQUxJRCk7CisjZWxzZQorCQlzZXRfaXJxX25vcHJvYmUoaXJxKTsKKyNlbmRpZgorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB0YzM1ODl4X2lycV9yZW1vdmUoc3RydWN0IHRjMzU4OXggKnRjMzU4OXgpCit7CisJaW50IGJhc2UgPSB0YzM1ODl4LT5pcnFfYmFzZTsKKwlpbnQgaXJxOworCisJZm9yIChpcnEgPSBiYXNlOyBpcnEgPCBiYXNlICsgVEMzNTg5eF9OUl9JTlRFUk5BTF9JUlFTOyBpcnErKykgeworI2lmZGVmIENPTkZJR19BUk0KKwkJc2V0X2lycV9mbGFncyhpcnEsIDApOworI2VuZGlmCisJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihpcnEsIE5VTEwsIE5VTEwpOworCQlzZXRfaXJxX2NoaXBfZGF0YShpcnEsIE5VTEwpOworCX0KK30KKworc3RhdGljIGludCB0YzM1ODl4X2NoaXBfaW5pdChzdHJ1Y3QgdGMzNTg5eCAqdGMzNTg5eCkKK3sKKwlpbnQgbWFuZiwgdmVyLCByZXQ7CisKKwltYW5mID0gdGMzNTg5eF9yZWdfcmVhZCh0YzM1ODl4LCBUQzM1ODl4X01BTkZDT0RFKTsKKwlpZiAobWFuZiA8IDApCisJCXJldHVybiBtYW5mOworCisJdmVyID0gdGMzNTg5eF9yZWdfcmVhZCh0YzM1ODl4LCBUQzM1ODl4X1ZFUlNJT04pOworCWlmICh2ZXIgPCAwKQorCQlyZXR1cm4gdmVyOworCisJaWYgKG1hbmYgIT0gVEMzNTg5eF9NQU5GQ09ERV9NQUdJQykgeworCQlkZXZfZXJyKHRjMzU4OXgtPmRldiwgInVua25vd24gbWFudWZhY3R1cmVyOiAlI3hcbiIsIG1hbmYpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlkZXZfaW5mbyh0YzM1ODl4LT5kZXYsICJtYW51ZmFjdHVyZXI6ICUjeCwgdmVyc2lvbjogJSN4XG4iLCBtYW5mLCB2ZXIpOworCisJLyoKKwkgKiBQdXQgZXZlcnl0aGluZyBleGNlcHQgdGhlIElSUSBtb2R1bGUgaW50byByZXNldDsKKwkgKiBhbHNvIHNwYXJlIHRoZSBHUElPIG1vZHVsZSBmb3IgYW55IHBpbiBpbml0aWFsaXphdGlvbgorCSAqIGRvbmUgZHVyaW5nIHByZS1rZXJuZWwgYm9vdAorCSAqLworCXJldCA9IHRjMzU4OXhfcmVnX3dyaXRlKHRjMzU4OXgsIFRDMzU4OXhfUlNUQ1RSTCwKKwkJCQlUQzM1ODl4X1JTVENUUkxfVElNUlNUCisJCQkJfCBUQzM1ODl4X1JTVENUUkxfUk9UUlNUCisJCQkJfCBUQzM1ODl4X1JTVENUUkxfS0JEUlNUKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIENsZWFyIHRoZSByZXNldCBpbnRlcnJ1cHQuICovCisJcmV0dXJuIHRjMzU4OXhfcmVnX3dyaXRlKHRjMzU4OXgsIFRDMzU4OXhfUlNUSU5UQ0xSLCAweDEpOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCB0YzM1ODl4X2RldmljZV9pbml0KHN0cnVjdCB0YzM1ODl4ICp0YzM1ODl4KQoreworCWludCByZXQgPSAwOworCXVuc2lnbmVkIGludCBibG9ja3MgPSB0YzM1ODl4LT5wZGF0YS0+YmxvY2s7CisKKwlpZiAoYmxvY2tzICYgVEMzNTg5eF9CTE9DS19HUElPKSB7CisJCXJldCA9IG1mZF9hZGRfZGV2aWNlcyh0YzM1ODl4LT5kZXYsIC0xLCB0YzM1ODl4X2Rldl9ncGlvLAorCQkJCUFSUkFZX1NJWkUodGMzNTg5eF9kZXZfZ3BpbyksIE5VTEwsCisJCQkJdGMzNTg5eC0+aXJxX2Jhc2UpOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKHRjMzU4OXgtPmRldiwgImZhaWxlZCB0byBhZGQgZ3BpbyBjaGlsZFxuIik7CisJCQlyZXR1cm4gcmV0OworCQl9CisJCWRldl9pbmZvKHRjMzU4OXgtPmRldiwgImFkZGVkIGdwaW8gYmxvY2tcbiIpOworCX0KKworCWlmIChibG9ja3MgJiBUQzM1ODl4X0JMT0NLX0tFWVBBRCkgeworCQlyZXQgPSBtZmRfYWRkX2RldmljZXModGMzNTg5eC0+ZGV2LCAtMSwgdGMzNTg5eF9kZXZfa2V5cGFkLAorCQkJCUFSUkFZX1NJWkUodGMzNTg5eF9kZXZfa2V5cGFkKSwgTlVMTCwKKwkJCQl0YzM1ODl4LT5pcnFfYmFzZSk7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIodGMzNTg5eC0+ZGV2LCAiZmFpbGVkIHRvIGtleXBhZCBjaGlsZFxuIik7CisJCQlyZXR1cm4gcmV0OworCQl9CisJCWRldl9pbmZvKHRjMzU4OXgtPmRldiwgImFkZGVkIGtleXBhZCBibG9ja1xuIik7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgdGMzNTg5eF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLAorCQkJCSAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdGMzNTg5eF9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGkyYy0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHRjMzU4OXggKnRjMzU4OXg7CisJaW50IHJldDsKKworCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoaTJjLT5hZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEKKwkJCQkgICAgIHwgSTJDX0ZVTkNfU01CVVNfSTJDX0JMT0NLKSkKKwkJcmV0dXJuIC1FSU87CisKKwl0YzM1ODl4ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHRjMzU4OXgpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRjMzU4OXgpCisJCXJldHVybiAtRU5PTUVNOworCisJbXV0ZXhfaW5pdCgmdGMzNTg5eC0+bG9jayk7CisKKwl0YzM1ODl4LT5kZXYgPSAmaTJjLT5kZXY7CisJdGMzNTg5eC0+aTJjID0gaTJjOworCXRjMzU4OXgtPnBkYXRhID0gcGRhdGE7CisJdGMzNTg5eC0+aXJxX2Jhc2UgPSBwZGF0YS0+aXJxX2Jhc2U7CisJdGMzNTg5eC0+bnVtX2dwaW8gPSBpZC0+ZHJpdmVyX2RhdGE7CisKKwlpMmNfc2V0X2NsaWVudGRhdGEoaTJjLCB0YzM1ODl4KTsKKworCXJldCA9IHRjMzU4OXhfY2hpcF9pbml0KHRjMzU4OXgpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2ZyZWU7CisKKwlyZXQgPSB0YzM1ODl4X2lycV9pbml0KHRjMzU4OXgpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2ZyZWU7CisKKwlyZXQgPSByZXF1ZXN0X3RocmVhZGVkX2lycSh0YzM1ODl4LT5pMmMtPmlycSwgTlVMTCwgdGMzNTg5eF9pcnEsCisJCQkJICAgSVJRRl9UUklHR0VSX0ZBTExJTkcgfCBJUlFGX09ORVNIT1QsCisJCQkJICAgInRjMzU4OXgiLCB0YzM1ODl4KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIodGMzNTg5eC0+ZGV2LCAiZmFpbGVkIHRvIHJlcXVlc3QgSVJROiAlZFxuIiwgcmV0KTsKKwkJZ290byBvdXRfcmVtb3ZlaXJxOworCX0KKworCXJldCA9IHRjMzU4OXhfZGV2aWNlX2luaXQodGMzNTg5eCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKHRjMzU4OXgtPmRldiwgImZhaWxlZCB0byBhZGQgY2hpbGQgZGV2aWNlc1xuIik7CisJCWdvdG8gb3V0X2ZyZWVpcnE7CisJfQorCisJcmV0dXJuIDA7CisKK291dF9mcmVlaXJxOgorCWZyZWVfaXJxKHRjMzU4OXgtPmkyYy0+aXJxLCB0YzM1ODl4KTsKK291dF9yZW1vdmVpcnE6CisJdGMzNTg5eF9pcnFfcmVtb3ZlKHRjMzU4OXgpOworb3V0X2ZyZWU6CisJa2ZyZWUodGMzNTg5eCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgdGMzNTg5eF9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgdGMzNTg5eCAqdGMzNTg5eCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJbWZkX3JlbW92ZV9kZXZpY2VzKHRjMzU4OXgtPmRldik7CisKKwlmcmVlX2lycSh0YzM1ODl4LT5pMmMtPmlycSwgdGMzNTg5eCk7CisJdGMzNTg5eF9pcnFfcmVtb3ZlKHRjMzU4OXgpOworCisJa2ZyZWUodGMzNTg5eCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0YzM1ODl4X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCB0YzM1ODl4ICp0YzM1ODl4ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRjMzU4OXgtPmkyYzsKKwlpbnQgcmV0ID0gMDsKKworCS8qIHB1dCB0aGUgc3lzdGVtIHRvIHNsZWVwIG1vZGUgKi8KKwlpZiAoIWRldmljZV9tYXlfd2FrZXVwKCZjbGllbnQtPmRldikpCisJCXJldCA9IHRjMzU4OXhfcmVnX3dyaXRlKHRjMzU4OXgsIFRDMzU4OXhfQ0xLTU9ERSwKKwkJCQlUQzM1ODl4X0NMS01PREVfTU9EQ1RMX1NMRUVQKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdGMzNTg5eF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCB0YzM1ODl4ICp0YzM1ODl4ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRjMzU4OXgtPmkyYzsKKwlpbnQgcmV0ID0gMDsKKworCS8qIGVuYWJsZSB0aGUgc3lzdGVtIGludG8gb3BlcmF0aW9uICovCisJaWYgKCFkZXZpY2VfbWF5X3dha2V1cCgmY2xpZW50LT5kZXYpKQorCQlyZXQgPSB0YzM1ODl4X3JlZ193cml0ZSh0YzM1ODl4LCBUQzM1ODl4X0NMS01PREUsCisJCQkJVEMzNTg5eF9DTEtNT0RFX01PRENUTF9PUEVSQVRJT04pOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IFNJTVBMRV9ERVZfUE1fT1BTKHRjMzU4OXhfZGV2X3BtX29wcywgdGMzNTg5eF9zdXNwZW5kLAorCQkJCQkJdGMzNTg5eF9yZXN1bWUpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgdGMzNTg5eF9pZFtdID0geworCXsgInRjMzU4OXgiLCAyNCB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCB0YzM1ODl4X2lkKTsKKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHRjMzU4OXhfZHJpdmVyID0geworCS5kcml2ZXIubmFtZQk9ICJ0YzM1ODl4IiwKKwkuZHJpdmVyLm93bmVyCT0gVEhJU19NT0RVTEUsCisjaWZkZWYgQ09ORklHX1BNCisJLmRyaXZlci5wbQk9ICZ0YzM1ODl4X2Rldl9wbV9vcHMsCisjZW5kaWYKKwkucHJvYmUJCT0gdGMzNTg5eF9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHRjMzU4OXhfcmVtb3ZlKSwKKwkuaWRfdGFibGUJPSB0YzM1ODl4X2lkLAorfTsKKworc3RhdGljIGludCBfX2luaXQgdGMzNTg5eF9pbml0KHZvaWQpCit7CisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZ0YzM1ODl4X2RyaXZlcik7Cit9CitzdWJzeXNfaW5pdGNhbGwodGMzNTg5eF9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHRjMzU4OXhfZXhpdCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZ0YzM1ODl4X2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdCh0YzM1ODl4X2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlRDMzU4OXggTUZEIGNvcmUgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJIYW51bWF0aCBQcmFzYWQsIFJhYmluIFZpbmNlbnQiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3RpbWJlcmRhbGUuYyBiL2RyaXZlcnMvbWZkL3RpbWJlcmRhbGUuYwppbmRleCA3MjdmNjJjLi42YWQ4YTdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC90aW1iZXJkYWxlLmMKKysrIGIvZHJpdmVycy9tZmQvdGltYmVyZGFsZS5jCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSA8bGludXgvc3BpL21jMzM4ODAuaD4KIAogI2luY2x1ZGUgPG1lZGlhL3RpbWJfcmFkaW8uaD4KKyNpbmNsdWRlIDxtZWRpYS90aW1iX3ZpZGVvLmg+CiAKICNpbmNsdWRlIDxsaW51eC90aW1iX2RtYS5oPgogCkBAIC0yNDYsNyArMjQ3LDIzIEBACiAJfSwKIH07CiAKLXN0YXRpYyBjb25zdCBfX2RldmluaXRjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgdGltYmVyZGFsZV9yYWRpb19yZXNvdXJjZXNbXSA9IHsKK3N0YXRpYyBfX2RldmluaXRkYXRhIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyB0aW1iZXJkYWxlX2FkdjcxODBfaTJjX2JvYXJkX2luZm8gPSB7CisJLyogUmVxdWlyZXMganVtcGVyIEpQOSB0byBiZSBvZmYgKi8KKwlJMkNfQk9BUkRfSU5GTygiYWR2NzE4MCIsIDB4NDIgPj4gMSksCisJLmlycSA9IElSUV9USU1CRVJEQUxFX0FEVjcxODAKK307CisKK3N0YXRpYyBfX2RldmluaXRkYXRhIHN0cnVjdCB0aW1iX3ZpZGVvX3BsYXRmb3JtX2RhdGEKKwl0aW1iZXJkYWxlX3ZpZGVvX3BsYXRmb3JtX2RhdGEgPSB7CisJLmRtYV9jaGFubmVsID0gRE1BX1ZJREVPX1JYLAorCS5pMmNfYWRhcHRlciA9IDAsCisJLmVuY29kZXIgPSB7CisJCS5pbmZvID0gJnRpbWJlcmRhbGVfYWR2NzE4MF9pMmNfYm9hcmRfaW5mbworCX0KK307CisKK3N0YXRpYyBjb25zdCBfX2RldmluaXRjb25zdCBzdHJ1Y3QgcmVzb3VyY2UKK3RpbWJlcmRhbGVfcmFkaW9fcmVzb3VyY2VzW10gPSB7CiAJewogCQkuc3RhcnQJPSBSRFNPRkZTRVQsCiAJCS5lbmQJPSBSRFNFTkQsCkBAIC0yNzEsMTUgKzI4OCwyNSBAQAogCXRpbWJlcmRhbGVfcmFkaW9fcGxhdGZvcm1fZGF0YSA9IHsKIAkuaTJjX2FkYXB0ZXIgPSAwLAogCS50dW5lciA9IHsKLQkJLm1vZHVsZV9uYW1lID0gInRlZjY4NjIiLAogCQkuaW5mbyA9ICZ0aW1iZXJkYWxlX3RlZjY4NjhfaTJjX2JvYXJkX2luZm8KIAl9LAogCS5kc3AgPSB7Ci0JCS5tb2R1bGVfbmFtZSA9ICJzYWE3NzA2aCIsCiAJCS5pbmZvID0gJnRpbWJlcmRhbGVfc2FhNzcwNl9pMmNfYm9hcmRfaW5mbwogCX0KIH07CiAKK3N0YXRpYyBjb25zdCBfX2RldmluaXRjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgdGltYmVyZGFsZV92aWRlb19yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAk9IExPR0lXT0ZGU0VULAorCQkuZW5kCT0gTE9HSVdFTkQsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLyoKKwlub3RlIHRoYXQgdGhlICJmcmFtZSBidWZmZXIiIGlzIGxvY2F0ZWQgaW4gRE1BIGFyZWEKKwlzdGFydGluZyBhdCAweDEyMDAwMDAKKwkqLworfTsKKwogc3RhdGljIF9fZGV2aW5pdGRhdGEgc3RydWN0IHRpbWJfZG1hX3BsYXRmb3JtX2RhdGEgdGltYl9kbWFfcGxhdGZvcm1fZGF0YSA9IHsKIAkubnJfY2hhbm5lbHMgPSAxMCwKIAkuY2hhbm5lbHMgPSB7CkBAIC0zODAsNiArNDA3LDEzIEBACiAJCS5kYXRhX3NpemUgPSBzaXplb2YodGltYmVyZGFsZV9ncGlvX3BsYXRmb3JtX2RhdGEpLAogCX0sCiAJeworCQkubmFtZSA9ICJ0aW1iLXZpZGVvIiwKKwkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHRpbWJlcmRhbGVfdmlkZW9fcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlcyA9IHRpbWJlcmRhbGVfdmlkZW9fcmVzb3VyY2VzLAorCQkucGxhdGZvcm1fZGF0YSA9ICZ0aW1iZXJkYWxlX3ZpZGVvX3BsYXRmb3JtX2RhdGEsCisJCS5kYXRhX3NpemUgPSBzaXplb2YodGltYmVyZGFsZV92aWRlb19wbGF0Zm9ybV9kYXRhKSwKKwl9LAorCXsKIAkJLm5hbWUgPSAidGltYi1yYWRpbyIsCiAJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh0aW1iZXJkYWxlX3JhZGlvX3Jlc291cmNlcyksCiAJCS5yZXNvdXJjZXMgPSB0aW1iZXJkYWxlX3JhZGlvX3Jlc291cmNlcywKQEAgLTQ0MCw2ICs0NzQsMTMgQEAKIAkJLnJlc291cmNlcyA9IHRpbWJlcmRhbGVfbWxvZ2ljb3JlX3Jlc291cmNlcywKIAl9LAogCXsKKwkJLm5hbWUgPSAidGltYi12aWRlbyIsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh0aW1iZXJkYWxlX3ZpZGVvX3Jlc291cmNlcyksCisJCS5yZXNvdXJjZXMgPSB0aW1iZXJkYWxlX3ZpZGVvX3Jlc291cmNlcywKKwkJLnBsYXRmb3JtX2RhdGEgPSAmdGltYmVyZGFsZV92aWRlb19wbGF0Zm9ybV9kYXRhLAorCQkuZGF0YV9zaXplID0gc2l6ZW9mKHRpbWJlcmRhbGVfdmlkZW9fcGxhdGZvcm1fZGF0YSksCisJfSwKKwl7CiAJCS5uYW1lID0gInRpbWItcmFkaW8iLAogCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodGltYmVyZGFsZV9yYWRpb19yZXNvdXJjZXMpLAogCQkucmVzb3VyY2VzID0gdGltYmVyZGFsZV9yYWRpb19yZXNvdXJjZXMsCkBAIC00OTAsNiArNTMxLDEzIEBACiAJCS5kYXRhX3NpemUgPSBzaXplb2YodGltYmVyZGFsZV9ncGlvX3BsYXRmb3JtX2RhdGEpLAogCX0sCiAJeworCQkubmFtZSA9ICJ0aW1iLXZpZGVvIiwKKwkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHRpbWJlcmRhbGVfdmlkZW9fcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlcyA9IHRpbWJlcmRhbGVfdmlkZW9fcmVzb3VyY2VzLAorCQkucGxhdGZvcm1fZGF0YSA9ICZ0aW1iZXJkYWxlX3ZpZGVvX3BsYXRmb3JtX2RhdGEsCisJCS5kYXRhX3NpemUgPSBzaXplb2YodGltYmVyZGFsZV92aWRlb19wbGF0Zm9ybV9kYXRhKSwKKwl9LAorCXsKIAkJLm5hbWUgPSAidGltYi1yYWRpbyIsCiAJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh0aW1iZXJkYWxlX3JhZGlvX3Jlc291cmNlcyksCiAJCS5yZXNvdXJjZXMgPSB0aW1iZXJkYWxlX3JhZGlvX3Jlc291cmNlcywKQEAgLTUzMyw2ICs1ODEsMTMgQEAKIAkJLmRhdGFfc2l6ZSA9IHNpemVvZih0aW1iZXJkYWxlX2dwaW9fcGxhdGZvcm1fZGF0YSksCiAJfSwKIAl7CisJCS5uYW1lID0gInRpbWItdmlkZW8iLAorCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodGltYmVyZGFsZV92aWRlb19yZXNvdXJjZXMpLAorCQkucmVzb3VyY2VzID0gdGltYmVyZGFsZV92aWRlb19yZXNvdXJjZXMsCisJCS5wbGF0Zm9ybV9kYXRhID0gJnRpbWJlcmRhbGVfdmlkZW9fcGxhdGZvcm1fZGF0YSwKKwkJLmRhdGFfc2l6ZSA9IHNpemVvZih0aW1iZXJkYWxlX3ZpZGVvX3BsYXRmb3JtX2RhdGEpLAorCX0sCisJewogCQkubmFtZSA9ICJ0aW1iLXJhZGlvIiwKIAkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHRpbWJlcmRhbGVfcmFkaW9fcmVzb3VyY2VzKSwKIAkJLnJlc291cmNlcyA9IHRpbWJlcmRhbGVfcmFkaW9fcmVzb3VyY2VzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvdGltYmVyZGFsZS5oIGIvZHJpdmVycy9tZmQvdGltYmVyZGFsZS5oCmluZGV4IGMxMWJmNmUuLjQ0MTJhY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3RpbWJlcmRhbGUuaAorKysgYi9kcml2ZXJzL21mZC90aW1iZXJkYWxlLmgKQEAgLTIzLDcgKzIzLDcgQEAKICNpZm5kZWYgTUZEX1RJTUJFUkRBTEVfSAogI2RlZmluZSBNRkRfVElNQkVSREFMRV9ICiAKLSNkZWZpbmUgRFJWX1ZFUlNJT04JCSIwLjIiCisjZGVmaW5lIERSVl9WRVJTSU9OCQkiMC4zIgogCiAvKiBUaGlzIGRyaXZlciBvbmx5IHN1cHBvcnQgdmVyc2lvbnMgPj0gMy44IGFuZCA8IDQuMCAgKi8KICNkZWZpbmUgVElNQl9TVVBQT1JURURfTUFKT1IJMwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvdHBzNjUwMTAuYyBiL2RyaXZlcnMvbWZkL3RwczY1MDEwLmMKaW5kZXggZDAwMTZiNi4uOTAxODdmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvdHBzNjUwMTAuYworKysgYi9kcml2ZXJzL21mZC90cHM2NTAxMC5jCkBAIC0yNDIsNyArMjQyLDcgQEAKIAlzZXFfcHJpbnRmKHMsICJtYXNrMiAgICAgJXNcbiIsIGJ1Zik7CiAJLyogaWdub3JlIGFja2ludDIgKi8KIAotCSh2b2lkKSBzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnRwcy0+d29yaywgUE9XRVJfUE9MTF9ERUxBWSk7CisJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZ0cHMtPndvcmssIFBPV0VSX1BPTExfREVMQVkpOwogCiAKIAkvKiBWTUFJTiB2b2x0YWdlLCBlbmFibGUgbG93cG93ZXIsIGV0YyAqLwpAQCAtNDAwLDcgKzQwMCw3IEBACiAJCQkmJiAodHBzLT5jaGdzdGF0dXMgJiAoVFBTX0NIR19VU0J8VFBTX0NIR19BQykpKQogCQlwb2xsID0gMTsKIAlpZiAocG9sbCkKLQkJKHZvaWQpIHNjaGVkdWxlX2RlbGF5ZWRfd29yaygmdHBzLT53b3JrLCBQT1dFUl9QT0xMX0RFTEFZKTsKKwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZ0cHMtPndvcmssIFBPV0VSX1BPTExfREVMQVkpOwogCiAJLyogYWxzbyBwb3RlbnRpYWxseSBncGlvLWluIHJpc2Ugb3IgZmFsbCAqLwogfQpAQCAtNDEwLDcgKzQxMCw3IEBACiB7CiAJc3RydWN0IHRwczY1MDEwCQkqdHBzOwogCi0JdHBzID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB0cHM2NTAxMCwgd29yay53b3JrKTsKKwl0cHMgPSBjb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmspLCBzdHJ1Y3QgdHBzNjUwMTAsIHdvcmspOwogCW11dGV4X2xvY2soJnRwcy0+bG9jayk7CiAKIAl0cHM2NTAxMF9pbnRlcnJ1cHQodHBzKTsKQEAgLTQ0OCw3ICs0NDgsNyBAQAogCiAJZGlzYWJsZV9pcnFfbm9zeW5jKGlycSk7CiAJc2V0X2JpdChGTEFHX0lSUV9FTkFCTEUsICZ0cHMtPmZsYWdzKTsKLQkodm9pZCkgc2NoZWR1bGVfd29yaygmdHBzLT53b3JrLndvcmspOworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmdHBzLT53b3JrLCAwKTsKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKQEAgLTUyNyw4ICs1MjcsNyBAQAogCX0KIAlpZiAoY2xpZW50LT5pcnEgPiAwKQogCQlmcmVlX2lycShjbGllbnQtPmlycSwgdHBzKTsKLQljYW5jZWxfZGVsYXllZF93b3JrKCZ0cHMtPndvcmspOwotCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZ0cHMtPndvcmspOwogCWRlYnVnZnNfcmVtb3ZlKHRwcy0+ZmlsZSk7CiAJa2ZyZWUodHBzKTsKIAl0aGVfdHBzID0gTlVMTDsKQEAgLTcyMCw3ICs3MTksNyBAQAogCQkJJiYgdGVzdF9hbmRfc2V0X2JpdCgKIAkJCQlGTEFHX1ZCVVNfQ0hBTkdFRCwgJnRoZV90cHMtPmZsYWdzKSkgewogCQkvKiBnYWRnZXQgZHJpdmVycyBjYWxsIHRoaXMgaW5faXJxKCkgKi8KLQkJKHZvaWQpIHNjaGVkdWxlX3dvcmsoJnRoZV90cHMtPndvcmsud29yayk7CisJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmdGhlX3Rwcy0+d29yaywgMCk7CiAJfQogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvdHdsLWNvcmUuYyBiL2RyaXZlcnMvbWZkL3R3bC1jb3JlLmMKaW5kZXggMzUyNzViYS4uMTJhYmQ1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvdHdsLWNvcmUuYworKysgYi9kcml2ZXJzL21mZC90d2wtY29yZS5jCkBAIC05NSw3ICs5NSw4IEBACiAjZGVmaW5lIHR3bF9oYXNfcnRjKCkJZmFsc2UKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfVFdMNDAzMF9VU0IpIHx8IGRlZmluZWQoQ09ORklHX1RXTDQwMzBfVVNCX01PRFVMRSkKKyNpZiBkZWZpbmVkKENPTkZJR19UV0w0MDMwX1VTQikgfHwgZGVmaW5lZChDT05GSUdfVFdMNDAzMF9VU0JfTU9EVUxFKSB8fFwKKwlkZWZpbmVkKENPTkZJR19UV0w2MDMwX1VTQikgfHwgZGVmaW5lZChDT05GSUdfVFdMNjAzMF9VU0JfTU9EVUxFKQogI2RlZmluZSB0d2xfaGFzX3VzYigpCXRydWUKICNlbHNlCiAjZGVmaW5lIHR3bF9oYXNfdXNiKCkJZmFsc2UKQEAgLTY4Miw2ICs2ODMsNDMgQEAKIAkJCXVzYjN2MS5kZXYgPSBjaGlsZDsKIAkJfQogCX0KKwlpZiAodHdsX2hhc191c2IoKSAmJiBwZGF0YS0+dXNiICYmIHR3bF9jbGFzc19pc182MDMwKCkpIHsKKworCQlzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgdXNiM3YzID0geworCQkJLnN1cHBseSA9CSJ2dXNiIiwKKwkJfTsKKworCQlpZiAodHdsX2hhc19yZWd1bGF0b3IoKSkgeworCQkJLyogdGhpcyBpcyBhIHRlbXBsYXRlIHRoYXQgZ2V0cyBjb3BpZWQgKi8KKwkJCXN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHVzYl9maXhlZCA9IHsKKwkJCQkuY29uc3RyYWludHMudmFsaWRfbW9kZXNfbWFzayA9CisJCQkJCVJFR1VMQVRPUl9NT0RFX05PUk1BTAorCQkJCQl8IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlksCisJCQkJLmNvbnN0cmFpbnRzLnZhbGlkX29wc19tYXNrID0KKwkJCQkJUkVHVUxBVE9SX0NIQU5HRV9NT0RFCisJCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisJCQl9OworCisJCQljaGlsZCA9IGFkZF9yZWd1bGF0b3JfbGlua2VkKFRXTDYwMzBfUkVHX1ZVU0IsCisJCQkJCQkgICAgICAmdXNiX2ZpeGVkLCAmdXNiM3YzLCAxKTsKKwkJCWlmIChJU19FUlIoY2hpbGQpKQorCQkJCXJldHVybiBQVFJfRVJSKGNoaWxkKTsKKwkJfQorCisJCWNoaWxkID0gYWRkX2NoaWxkKDAsICJ0d2w2MDMwX3VzYiIsCisJCQlwZGF0YS0+dXNiLCBzaXplb2YoKnBkYXRhLT51c2IpLAorCQkJdHJ1ZSwKKwkJCS8qIGlycTEgPSBWQlVTX1BSRVMsIGlycTAgPSBVU0IgSUQgKi8KKwkJCXBkYXRhLT5pcnFfYmFzZSArIFVTQk9UR19JTlRSX09GRlNFVCwKKwkJCXBkYXRhLT5pcnFfYmFzZSArIFVTQl9QUkVTX0lOVFJfT0ZGU0VUKTsKKworCQlpZiAoSVNfRVJSKGNoaWxkKSkKKwkJCXJldHVybiBQVFJfRVJSKGNoaWxkKTsKKwkJLyogd2UgbmVlZCB0byBjb25uZWN0IHJlZ3VsYXRvcnMgdG8gdGhpcyB0cmFuc2NlaXZlciAqLworCQlpZiAodHdsX2hhc19yZWd1bGF0b3IoKSAmJiBjaGlsZCkKKwkJCXVzYjN2My5kZXYgPSBjaGlsZDsKKworCX0KIAogCWlmICh0d2xfaGFzX3dhdGNoZG9nKCkpIHsKIAkJY2hpbGQgPSBhZGRfY2hpbGQoMCwgInR3bDQwMzBfd2R0IiwgTlVMTCwgMCwgZmFsc2UsIDAsIDApOwpAQCAtODE1LDEwICs4NTMsNiBAQAogCQlpZiAoSVNfRVJSKGNoaWxkKSkKIAkJCXJldHVybiBQVFJfRVJSKGNoaWxkKTsKIAotCQljaGlsZCA9IGFkZF9yZWd1bGF0b3IoVFdMNjAzMF9SRUdfVlVTQiwgcGRhdGEtPnZ1c2IpOwotCQlpZiAoSVNfRVJSKGNoaWxkKSkKLQkJCXJldHVybiBQVFJfRVJSKGNoaWxkKTsKLQogCQljaGlsZCA9IGFkZF9yZWd1bGF0b3IoVFdMNjAzMF9SRUdfVkFVWDFfNjAzMCwgcGRhdGEtPnZhdXgxKTsKIAkJaWYgKElTX0VSUihjaGlsZCkpCiAJCQlyZXR1cm4gUFRSX0VSUihjaGlsZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC90d2w2MDMwLWlycS5jIGIvZHJpdmVycy9tZmQvdHdsNjAzMC1pcnEuYwppbmRleCBhYWVkYjExLi4wNmM4OTU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC90d2w2MDMwLWlycS5jCisrKyBiL2RyaXZlcnMvbWZkL3R3bDYwMzAtaXJxLmMKQEAgLTc0LDcgKzc0LDcgQEAKIAlVU0JPVEdfSU5UUl9PRkZTRVQsCS8qIEJpdCAxNglJRF9XS1VQCQkJKi8KIAlVU0JPVEdfSU5UUl9PRkZTRVQsCS8qIEJpdCAxNwlWQlVTX1dLVVAJCSovCiAJVVNCT1RHX0lOVFJfT0ZGU0VULAkvKiBCaXQgMTgJSUQJCQkqLwotCVVTQk9UR19JTlRSX09GRlNFVCwJLyogQml0IDE5CVZCVVMJCQkqLworCVVTQl9QUkVTX0lOVFJfT0ZGU0VULAkvKiBCaXQgMTkJVkJVUwkJCSovCiAJQ0hBUkdFUl9JTlRSX09GRlNFVCwJLyogQml0IDIwCUNIUkdfQ1RSTAkJKi8KIAlDSEFSR0VSX0lOVFJfT0ZGU0VULAkvKiBCaXQgMjEJRVhUX0NIUkcJCSovCiAJQ0hBUkdFUl9JTlRSX09GRlNFVCwJLyogQml0IDIyCUlOVF9DSFJHCQkqLwpAQCAtMTI4LDYgKzEyOCwxMyBAQAogCiAJCXN0cy5ieXRlc1szXSA9IDA7IC8qIE9ubHkgMjQgYml0cyBhcmUgdmFsaWQqLwogCisJCS8qCisJCSAqIFNpbmNlIFZCVVMgc3RhdHVzIGJpdCBpcyBub3QgcmVsaWFibGUgZm9yIFZCVVMgZGlzY29ubmVjdAorCQkgKiB1c2UgQ0hBUkdFUiBWQlVTIGRldGVjdGlvbiBzdGF0dXMgYml0IGluc3RlYWQuCisJCSAqLworCQlpZiAoc3RzLmJ5dGVzWzJdICYgMHgxMCkKKwkJCXN0cy5ieXRlc1syXSB8PSAweDA4OworCiAJCWZvciAoaSA9IDA7IHN0cy5pbnRfc3RzOyBzdHMuaW50X3N0cyA+Pj0gMSwgaSsrKSB7CiAJCQlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCQkJaWYgKHN0cy5pbnRfc3RzICYgMHgxKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC93bDEyNzMtY29yZS5jIGIvZHJpdmVycy9tZmQvd2wxMjczLWNvcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMmVjYzI0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZmQvd2wxMjczLWNvcmUuYwpAQCAtMCwwICsxLDE0OCBAQAorLyoKKyAqIE1GRCBkcml2ZXIgZm9yIHdsMTI3MyBGTSByYWRpbyBhbmQgYXVkaW8gY29kZWMgc3VibW9kdWxlcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24KKyAqIEF1dGhvcjogTWF0dGkgQWFsdG9uZW4gPG1hdHRpLmouYWFsdG9uZW5Abm9raWEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21mZC93bDEyNzMtY29yZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworI2RlZmluZSBEUklWRVJfREVTQyAiV0wxMjczIEZNIFJhZGlvIENvcmUiCisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RldmljZV9pZCB3bDEyNzNfZHJpdmVyX2lkX3RhYmxlW10gPSB7CisJeyBXTDEyNzNfRk1fRFJJVkVSX05BTUUsIDAgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgd2wxMjczX2RyaXZlcl9pZF90YWJsZSk7CisKK3N0YXRpYyBpbnQgd2wxMjczX2NvcmVfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IHdsMTI3M19jb3JlICpjb3JlID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwlkZXZfZGJnKCZjbGllbnQtPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwltZmRfcmVtb3ZlX2RldmljZXMoJmNsaWVudC0+ZGV2KTsKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBOVUxMKTsKKwlrZnJlZShjb3JlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCB3bDEyNzNfY29yZV9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHdsMTI3M19mbV9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHdsMTI3M19jb3JlICpjb3JlOworCXN0cnVjdCBtZmRfY2VsbCAqY2VsbDsKKwlpbnQgY2hpbGRyZW4gPSAwOworCWludCByID0gMDsKKworCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKKworCWlmICghcGRhdGEpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJObyBwbGF0Zm9ybSBkYXRhLlxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICghKHBkYXRhLT5jaGlsZHJlbiAmIFdMMTI3M19SQURJT19DSElMRCkpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJDYW5ub3QgZnVuY3Rpb24gd2l0aG91dCByYWRpbyBjaGlsZC5cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwljb3JlID0ga3phbGxvYyhzaXplb2YoKmNvcmUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNvcmUpCisJCXJldHVybiAtRU5PTUVNOworCisJY29yZS0+cGRhdGEgPSBwZGF0YTsKKwljb3JlLT5jbGllbnQgPSBjbGllbnQ7CisJbXV0ZXhfaW5pdCgmY29yZS0+bG9jayk7CisKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBjb3JlKTsKKworCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiJXM6IEhhdmUgVjRMMi5cbiIsIF9fZnVuY19fKTsKKworCWNlbGwgPSAmY29yZS0+Y2VsbHNbY2hpbGRyZW5dOworCWNlbGwtPm5hbWUgPSAid2wxMjczX2ZtX3JhZGlvIjsKKwljZWxsLT5wbGF0Zm9ybV9kYXRhID0gJmNvcmU7CisJY2VsbC0+ZGF0YV9zaXplID0gc2l6ZW9mKGNvcmUpOworCWNoaWxkcmVuKys7CisKKwlpZiAocGRhdGEtPmNoaWxkcmVuICYgV0wxMjczX0NPREVDX0NISUxEKSB7CisJCWNlbGwgPSAmY29yZS0+Y2VsbHNbY2hpbGRyZW5dOworCisJCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiJXM6IEhhdmUgY29kZWMuXG4iLCBfX2Z1bmNfXyk7CisJCWNlbGwtPm5hbWUgPSAid2wxMjczLWNvZGVjIjsKKwkJY2VsbC0+cGxhdGZvcm1fZGF0YSA9ICZjb3JlOworCQljZWxsLT5kYXRhX3NpemUgPSBzaXplb2YoY29yZSk7CisJCWNoaWxkcmVuKys7CisJfQorCisJZGV2X2RiZygmY2xpZW50LT5kZXYsICIlczogbnVtYmVyIG9mIGNoaWxkcmVuOiAlZC5cbiIsCisJCV9fZnVuY19fLCBjaGlsZHJlbik7CisKKwlyID0gbWZkX2FkZF9kZXZpY2VzKCZjbGllbnQtPmRldiwgLTEsIGNvcmUtPmNlbGxzLAorCQkJICAgIGNoaWxkcmVuLCBOVUxMLCAwKTsKKwlpZiAocikKKwkJZ290byBlcnI7CisKKwlyZXR1cm4gMDsKKworZXJyOgorCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIE5VTEwpOworCXBkYXRhLT5mcmVlX3Jlc291cmNlcygpOworCWtmcmVlKGNvcmUpOworCisJZGV2X2RiZygmY2xpZW50LT5kZXYsICIlc1xuIiwgX19mdW5jX18pOworCisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB3bDEyNzNfY29yZV9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSBXTDEyNzNfRk1fRFJJVkVSX05BTUUsCisJfSwKKwkucHJvYmUgPSB3bDEyNzNfY29yZV9wcm9iZSwKKwkuaWRfdGFibGUgPSB3bDEyNzNfZHJpdmVyX2lkX3RhYmxlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcCh3bDEyNzNfY29yZV9yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgd2wxMjczX2NvcmVfaW5pdCh2b2lkKQoreworCWludCByOworCisJciA9IGkyY19hZGRfZHJpdmVyKCZ3bDEyNzNfY29yZV9kcml2ZXIpOworCWlmIChyKSB7CisJCXByX2VycihXTDEyNzNfRk1fRFJJVkVSX05BTUUKKwkJICAgICAgICI6IGRyaXZlciByZWdpc3RyYXRpb24gZmFpbGVkXG4iKTsKKwkJcmV0dXJuIHI7CisJfQorCisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB3bDEyNzNfY29yZV9leGl0KHZvaWQpCit7CisJaTJjX2RlbF9kcml2ZXIoJndsMTI3M19jb3JlX2RyaXZlcik7Cit9CitsYXRlX2luaXRjYWxsKHdsMTI3M19jb3JlX2luaXQpOworbW9kdWxlX2V4aXQod2wxMjczX2NvcmVfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIk1hdHRpIEFhbHRvbmVuIDxtYXR0aS5qLmFhbHRvbmVuQG5va2lhLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvaW9jNC5jIGIvZHJpdmVycy9taXNjL2lvYzQuYwppbmRleCAxOTMyMDY2Li42NjhkNDFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvaW9jNC5jCisrKyBiL2RyaXZlcnMvbWlzYy9pb2M0LmMKQEAgLTI3MywxMyArMjczLDExIEBACiBzdGF0aWMgdm9pZCBfX2RldmluaXQKIGlvYzRfbG9hZF9tb2R1bGVzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQkvKiBhcmcganVzdCBoYXMgdG8gYmUgZnJlZWQgKi8KLQogCXJlcXVlc3RfbW9kdWxlKCJzZ2lpb2M0Iik7Ci0KLQlrZnJlZSh3b3JrKTsKIH0KIAorc3RhdGljIERFQ0xBUkVfV09SSyhpb2M0X2xvYWRfbW9kdWxlc193b3JrLCBpb2M0X2xvYWRfbW9kdWxlcyk7CisKIC8qIEFkZHMgYSBuZXcgaW5zdGFuY2Ugb2YgYW4gSU9DNCBjYXJkICovCiBzdGF0aWMgaW50IF9fZGV2aW5pdAogaW9jNF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9pZCkKQEAgLTM5NiwyMSArMzk0LDEyIEBACiAJICogUENJIGRldmljZS4KIAkgKi8KIAlpZiAoaWRkLT5pZGRfdmFyaWFudCAhPSBJT0M0X1ZBUklBTlRfUENJX1JUKSB7Ci0JCXN0cnVjdCB3b3JrX3N0cnVjdCAqd29yazsKLQkJd29yayA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB3b3JrX3N0cnVjdCksIEdGUF9LRVJORUwpOwotCQlpZiAoIXdvcmspIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSAgICAgICAiJXM6IElPQzQgdW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgIgotCQkJICAgICAgICJsb2FkIG9mIHN1Yi1tb2R1bGVzLlxuIiwgX19mdW5jX18pOwotCQl9IGVsc2UgewotCQkJLyogUmVxdWVzdCB0aGUgbW9kdWxlIGZyb20gYSB3b3JrIHByb2NlZHVyZSBhcyB0aGUKLQkJCSAqIG1vZHByb2JlIGdvZXMgb3V0IHRvIGEgdXNlcmxhbmQgaGVscGVyIGFuZCB0aGF0Ci0JCQkgKiB3aWxsIGhhbmcgaWYgZG9uZSBkaXJlY3RseSBmcm9tIGlvYzRfcHJvYmUoKS4KLQkJCSAqLwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiSU9DNCBsb2FkaW5nIHNnaWlvYzQgc3VibW9kdWxlXG4iKTsKLQkJCUlOSVRfV09SSyh3b3JrLCBpb2M0X2xvYWRfbW9kdWxlcyk7Ci0JCQlzY2hlZHVsZV93b3JrKHdvcmspOwotCQl9CisJCS8qIFJlcXVlc3QgdGhlIG1vZHVsZSBmcm9tIGEgd29yayBwcm9jZWR1cmUgYXMgdGhlIG1vZHByb2JlCisJCSAqIGdvZXMgb3V0IHRvIGEgdXNlcmxhbmQgaGVscGVyIGFuZCB0aGF0IHdpbGwgaGFuZyBpZiBkb25lCisJCSAqIGRpcmVjdGx5IGZyb20gaW9jNF9wcm9iZSgpLgorCQkgKi8KKwkJcHJpbnRrKEtFUk5fSU5GTyAiSU9DNCBsb2FkaW5nIHNnaWlvYzQgc3VibW9kdWxlXG4iKTsKKwkJc2NoZWR1bGVfd29yaygmaW9jNF9sb2FkX21vZHVsZXNfd29yayk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC00OTgsNyArNDg3LDcgQEAKIGlvYzRfZXhpdCh2b2lkKQogewogCS8qIEVuc3VyZSBpb2M0X2xvYWRfbW9kdWxlcygpIGhhcyBjb21wbGV0ZWQgYmVmb3JlIGV4aXRpbmcgKi8KLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCWZsdXNoX3dvcmtfc3luYygmaW9jNF9sb2FkX21vZHVsZXNfd29yayk7CiAJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZpb2M0X2RyaXZlcik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvY29yZS5jIGIvZHJpdmVycy9tbWMvY29yZS9jb3JlLmMKaW5kZXggNTdkY2Y4Zi4uYTNhNzgwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY29yZS9jb3JlLmMKKysrIGIvZHJpdmVycy9tbWMvY29yZS9jb3JlLmMKQEAgLTE3OTAsNyArMTc5MCw3IEBACiB7CiAJaW50IHJldDsKIAotCXdvcmtxdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJrbW1jZCIpOworCXdvcmtxdWV1ZSA9IGFsbG9jX29yZGVyZWRfd29ya3F1ZXVlKCJrbW1jZCIsIDApOwogCWlmICghd29ya3F1ZXVlKQogCQlyZXR1cm4gLUVOT01FTTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMgYi9kcml2ZXJzL21tYy9ob3N0L21tY2kuYwppbmRleCA4N2I0ZmM2Li41NjMwMjI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L21tY2kuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L21tY2kuYwpAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KICNpbmNsdWRlIDxsaW51eC9sb2cyLmg+CiAjaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9tbWMvY2FyZC5oPgogI2luY2x1ZGUgPGxpbnV4L2FtYmEvYnVzLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KQEAgLTQ1LDYgKzQ2LDEyIEBACiAgKgkgICAgICBpcyBhc3NlcnRlZCAobGlrZXdpc2UgZm9yIFJYKQogICogQGZpZm9oYWxmc2l6ZTogbnVtYmVyIG9mIGJ5dGVzIHRoYXQgY2FuIGJlIHdyaXR0ZW4gd2hlbiBNQ0lfVFhGSUZPSEFMRkVNUFRZCiAgKgkJICBpcyBhc3NlcnRlZCAobGlrZXdpc2UgZm9yIFJYKQorICogQGJyb2tlbl9ibG9ja2VuZDogdGhlIE1DSV9EQVRBQkxPQ0tFTkQgaXMgYnJva2VuIG9uIHRoZSBoYXJkd2FyZQorICoJCWFuZCB3aWxsIG5vdCB3b3JrIGF0IGFsbC4KKyAqIEBicm9rZW5fYmxvY2tlbmRfZG1hOiB0aGUgTUNJX0RBVEFCTE9DS0VORCBpcyBicm9rZW4gb24gdGhlIGhhcmR3YXJlIHdoZW4KKyAqCQl1c2luZyBETUEuCisgKiBAc2RpbzogdmFyaWFudCBzdXBwb3J0cyBTRElPCisgKiBAc3RfY2xrZGl2OiB0cnVlIGlmIHVzaW5nIGEgU1Qtc3BlY2lmaWMgY2xvY2sgZGl2aWRlciBhbGdvcml0aG0KICAqLwogc3RydWN0IHZhcmlhbnRfZGF0YSB7CiAJdW5zaWduZWQgaW50CQljbGtyZWc7CkBAIC01Miw2ICs1OSwxMCBAQAogCXVuc2lnbmVkIGludAkJZGF0YWxlbmd0aF9iaXRzOwogCXVuc2lnbmVkIGludAkJZmlmb3NpemU7CiAJdW5zaWduZWQgaW50CQlmaWZvaGFsZnNpemU7CisJYm9vbAkJCWJyb2tlbl9ibG9ja2VuZDsKKwlib29sCQkJYnJva2VuX2Jsb2NrZW5kX2RtYTsKKwlib29sCQkJc2RpbzsKKwlib29sCQkJc3RfY2xrZGl2OwogfTsKIAogc3RhdGljIHN0cnVjdCB2YXJpYW50X2RhdGEgdmFyaWFudF9hcm0gPSB7CkBAIC02NSw2ICs3Niw4IEBACiAJLmZpZm9oYWxmc2l6ZQkJPSA4ICogNCwKIAkuY2xrcmVnX2VuYWJsZQkJPSAxIDw8IDEzLCAvKiBIV0ZDRU4gKi8KIAkuZGF0YWxlbmd0aF9iaXRzCT0gMTYsCisJLmJyb2tlbl9ibG9ja2VuZF9kbWEJPSB0cnVlLAorCS5zZGlvCQkJPSB0cnVlLAogfTsKIAogc3RhdGljIHN0cnVjdCB2YXJpYW50X2RhdGEgdmFyaWFudF91eDUwMCA9IHsKQEAgLTczLDcgKzg2LDExIEBACiAJLmNsa3JlZwkJCT0gTUNJX0NMS19FTkFCTEUsCiAJLmNsa3JlZ19lbmFibGUJCT0gMSA8PCAxNCwgLyogSFdGQ0VOICovCiAJLmRhdGFsZW5ndGhfYml0cwk9IDI0LAorCS5icm9rZW5fYmxvY2tlbmQJPSB0cnVlLAorCS5zZGlvCQkJPSB0cnVlLAorCS5zdF9jbGtkaXYJCT0gdHJ1ZSwKIH07CisKIC8qCiAgKiBUaGlzIG11c3QgYmUgY2FsbGVkIHdpdGggaG9zdC0+bG9jayBoZWxkCiAgKi8KQEAgLTg2LDcgKzEwMywyMiBAQAogCQlpZiAoZGVzaXJlZCA+PSBob3N0LT5tY2xrKSB7CiAJCQljbGsgPSBNQ0lfQ0xLX0JZUEFTUzsKIAkJCWhvc3QtPmNjbGsgPSBob3N0LT5tY2xrOworCQl9IGVsc2UgaWYgKHZhcmlhbnQtPnN0X2Nsa2RpdikgeworCQkJLyoKKwkJCSAqIERCODUwMCBUUk0gc2F5cyBmID0gbWNsayAvIChjbGtkaXYgKyAyKQorCQkJICogPT4gY2xrZGl2ID0gKG1jbGsgLyBmKSAtIDIKKwkJCSAqIFJvdW5kIHRoZSBkaXZpZGVyIHVwIHNvIHdlIGRvbid0IGV4Y2VlZCB0aGUgbWF4CisJCQkgKiBmcmVxdWVuY3kKKwkJCSAqLworCQkJY2xrID0gRElWX1JPVU5EX1VQKGhvc3QtPm1jbGssIGRlc2lyZWQpIC0gMjsKKwkJCWlmIChjbGsgPj0gMjU2KQorCQkJCWNsayA9IDI1NTsKKwkJCWhvc3QtPmNjbGsgPSBob3N0LT5tY2xrIC8gKGNsayArIDIpOwogCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIFBMMTgwIFRSTSBzYXlzIGYgPSBtY2xrIC8gKDIgKiAoY2xrZGl2ICsgMSkpCisJCQkgKiA9PiBjbGtkaXYgPSBtY2xrIC8gKDIgKiBmKSAtIDEKKwkJCSAqLwogCQkJY2xrID0gaG9zdC0+bWNsayAvICgyICogZGVzaXJlZCkgLSAxOwogCQkJaWYgKGNsayA+PSAyNTYpCiAJCQkJY2xrID0gMjU1OwpAQCAtMTI5LDEwICsxNjEsMjYgQEAKIAlzcGluX2xvY2soJmhvc3QtPmxvY2spOwogfQogCitzdGF0aWMgdm9pZCBtbWNpX3NldF9tYXNrMShzdHJ1Y3QgbW1jaV9ob3N0ICpob3N0LCB1bnNpZ25lZCBpbnQgbWFzaykKK3sKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBob3N0LT5iYXNlOworCisJaWYgKGhvc3QtPnNpbmdsZWlycSkgeworCQl1bnNpZ25lZCBpbnQgbWFzazAgPSByZWFkbChiYXNlICsgTU1DSU1BU0swKTsKKworCQltYXNrMCAmPSB+TUNJX0lSUTFNQVNLOworCQltYXNrMCB8PSBtYXNrOworCisJCXdyaXRlbChtYXNrMCwgYmFzZSArIE1NQ0lNQVNLMCk7CisJfQorCisJd3JpdGVsKG1hc2ssIGJhc2UgKyBNTUNJTUFTSzEpOworfQorCiBzdGF0aWMgdm9pZCBtbWNpX3N0b3BfZGF0YShzdHJ1Y3QgbW1jaV9ob3N0ICpob3N0KQogewogCXdyaXRlbCgwLCBob3N0LT5iYXNlICsgTU1DSURBVEFDVFJMKTsKLQl3cml0ZWwoMCwgaG9zdC0+YmFzZSArIE1NQ0lNQVNLMSk7CisJbW1jaV9zZXRfbWFzazEoaG9zdCwgMCk7CiAJaG9zdC0+ZGF0YSA9IE5VTEw7CiB9CiAKQEAgLTE2Miw2ICsyMTAsOCBAQAogCWhvc3QtPmRhdGEgPSBkYXRhOwogCWhvc3QtPnNpemUgPSBkYXRhLT5ibGtzeiAqIGRhdGEtPmJsb2NrczsKIAlob3N0LT5kYXRhX3hmZXJlZCA9IDA7CisJaG9zdC0+YmxvY2tlbmQgPSBmYWxzZTsKKwlob3N0LT5kYXRhZW5kID0gZmFsc2U7CiAKIAltbWNpX2luaXRfc2coaG9zdCwgZGF0YSk7CiAKQEAgLTE5Niw5ICsyNDYsMTQgQEAKIAkJaXJxbWFzayA9IE1DSV9UWEZJRk9IQUxGRU1QVFlNQVNLOwogCX0KIAorCS8qIFRoZSBTVCBNaWNybyB2YXJpYW50cyBoYXMgYSBzcGVjaWFsIGJpdCB0byBlbmFibGUgU0RJTyAqLworCWlmICh2YXJpYW50LT5zZGlvICYmIGhvc3QtPm1tYy0+Y2FyZCkKKwkJaWYgKG1tY19jYXJkX3NkaW8oaG9zdC0+bW1jLT5jYXJkKSkKKwkJCWRhdGFjdHJsIHw9IE1DSV9TVF9EUFNNX1NESU9FTjsKKwogCXdyaXRlbChkYXRhY3RybCwgYmFzZSArIE1NQ0lEQVRBQ1RSTCk7CiAJd3JpdGVsKHJlYWRsKGJhc2UgKyBNTUNJTUFTSzApICYgfk1DSV9EQVRBRU5ETUFTSywgYmFzZSArIE1NQ0lNQVNLMCk7Ci0Jd3JpdGVsKGlycW1hc2ssIGJhc2UgKyBNTUNJTUFTSzEpOworCW1tY2lfc2V0X21hc2sxKGhvc3QsIGlycW1hc2spOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMjMzLDIwICsyODgsOSBAQAogbW1jaV9kYXRhX2lycShzdHJ1Y3QgbW1jaV9ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEsCiAJICAgICAgdW5zaWduZWQgaW50IHN0YXR1cykKIHsKLQlpZiAoc3RhdHVzICYgTUNJX0RBVEFCTE9DS0VORCkgewotCQlob3N0LT5kYXRhX3hmZXJlZCArPSBkYXRhLT5ibGtzejsKLSNpZmRlZiBDT05GSUdfQVJDSF9VMzAwCi0JCS8qCi0JCSAqIE9uIHRoZSBVMzAwIHNvbWUgc2lnbmFsIG9yIG90aGVyIGlzCi0JCSAqIGJhZGx5IHJvdXRlZCBzbyB0aGF0IGEgZGF0YSB3cml0ZSBkb2VzCi0JCSAqIG5vdCBwcm9wZXJseSB0ZXJtaW5hdGUgd2l0aCBhIE1DSV9EQVRBRU5ECi0JCSAqIHN0YXR1cyBmbGFnLiBUaGlzIHF1aXJrIHdpbGwgbWFrZSB3cml0ZXMKLQkJICogd29yayBhZ2Fpbi4KLQkJICovCi0JCWlmIChkYXRhLT5mbGFncyAmIE1NQ19EQVRBX1dSSVRFKQotCQkJc3RhdHVzIHw9IE1DSV9EQVRBRU5EOwotI2VuZGlmCi0JfQorCXN0cnVjdCB2YXJpYW50X2RhdGEgKnZhcmlhbnQgPSBob3N0LT52YXJpYW50OworCisJLyogRmlyc3QgY2hlY2sgZm9yIGVycm9ycyAqLwogCWlmIChzdGF0dXMgJiAoTUNJX0RBVEFDUkNGQUlMfE1DSV9EQVRBVElNRU9VVHxNQ0lfVFhVTkRFUlJVTnxNQ0lfUlhPVkVSUlVOKSkgewogCQlkZXZfZGJnKG1tY19kZXYoaG9zdC0+bW1jKSwgIk1DSSBFUlJPUiBJUlEgKHN0YXR1cyAlMDh4KVxuIiwgc3RhdHVzKTsKIAkJaWYgKHN0YXR1cyAmIE1DSV9EQVRBQ1JDRkFJTCkKQEAgLTI1NSw3ICsyOTksMTAgQEAKIAkJCWRhdGEtPmVycm9yID0gLUVUSU1FRE9VVDsKIAkJZWxzZSBpZiAoc3RhdHVzICYgKE1DSV9UWFVOREVSUlVOfE1DSV9SWE9WRVJSVU4pKQogCQkJZGF0YS0+ZXJyb3IgPSAtRUlPOwotCQlzdGF0dXMgfD0gTUNJX0RBVEFFTkQ7CisKKwkJLyogRm9yY2UtY29tcGxldGUgdGhlIHRyYW5zYWN0aW9uICovCisJCWhvc3QtPmJsb2NrZW5kID0gdHJ1ZTsKKwkJaG9zdC0+ZGF0YWVuZCA9IHRydWU7CiAKIAkJLyoKIAkJICogV2UgaGl0IGFuIGVycm9yIGNvbmRpdGlvbi4gIEVuc3VyZSB0aGF0IGFueSBkYXRhCkBAIC0yNzMsOSArMzIwLDY0IEBACiAJCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJCX0KIAl9Ci0JaWYgKHN0YXR1cyAmIE1DSV9EQVRBRU5EKSB7CisKKwkvKgorCSAqIE9uIEFSTSB2YXJpYW50cyBpbiBQSU8gbW9kZSwgTUNJX0RBVEFCTE9DS0VORAorCSAqIGlzIGFsd2F5cyBzZW50IGZpcnN0LCBhbmQgd2UgaW5jcmVhc2UgdGhlCisJICogdHJhbnNmZXJlZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHRoYXQgSVJRLiBUaGVuCisJICogTUNJX0RBVEFFTkQgZm9sbG93cyBhbmQgd2UgY29uY2x1ZGUgdGhlIHRyYW5zYWN0aW9uLgorCSAqCisJICogT24gdGhlIFV4NTAwIHNpbmdsZS1JUlEgdmFyaWFudCBNQ0lfREFUQUJMT0NLRU5ECisJICogZG9lc24ndCBzZWVtIHRvIGltbWVkaWF0ZWx5IGNsZWFyIGZyb20gdGhlIHN0YXR1cywKKwkgKiBzbyB3ZSBjYW4ndCB1c2UgaXQga2VlcCBjb3VudCB3aGVuIG9ubHkgb25lIGlycSBpcworCSAqIHVzZWQgYmVjYXVzZSB0aGUgaXJxIHdpbGwgaGl0IGZvciBvdGhlciByZWFzb25zLCBhbmQKKwkgKiB0aGVuIHRoZSBmbGFnIGlzIHN0aWxsIHVwLiBTbyB3ZSB1c2UgdGhlIE1DSV9EQVRBRU5ECisJICogSVJRIGF0IHRoZSBlbmQgb2YgdGhlIGVudGlyZSB0cmFuc2ZlciBiZWNhdXNlCisJICogTUNJX0RBVEFCTE9DS0VORCBpcyBicm9rZW4uCisJICoKKwkgKiBJbiB0aGUgVTMwMCwgdGhlIElSUXMgY2FuIGFycml2ZSBvdXQtb2Ytb3JkZXIsCisJICogZS5nLiBNQ0lfREFUQUJMT0NLRU5EIHNvbWV0aW1lcyBhcnJpdmVzIGFmdGVyIE1DSV9EQVRBRU5ELAorCSAqIHNvIGZvciB0aGlzIGNhc2Ugd2UgdXNlIHRoZSBmbGFncyAiYmxvY2tlbmQiIGFuZAorCSAqICJkYXRhZW5kIiB0byBtYWtlIHN1cmUgYm90aCBJUlFzIGhhdmUgYXJyaXZlZCBiZWZvcmUKKwkgKiBjb25jbHVkaW5nIHRoZSB0cmFuc2FjdGlvbi4gKFRoaXMgZG9lcyBub3QgYXBwbHkKKwkgKiB0byB0aGUgVXg1MDAgd2hpY2ggZG9lc24ndCBmaXJlIE1DSV9EQVRBQkxPQ0tFTkQKKwkgKiBhdCBhbGwuKSBJbiBETUEgbW9kZSBpdCBzdWZmZXJzIGZyb20gdGhlIHNhbWUgcHJvYmxlbQorCSAqIGFzIHRoZSBVeDUwMC4KKwkgKi8KKwlpZiAoc3RhdHVzICYgTUNJX0RBVEFCTE9DS0VORCkgeworCQkvKgorCQkgKiBKdXN0IGJlaW5nIGEgbGl0dGxlIG92ZXItY2F1dGlvdXMsIHdlIGRvIG5vdAorCQkgKiB1c2UgdGhpcyBwcm9ncmVzc2l2ZSB1cGRhdGUgaWYgdGhlIGhhcmR3YXJlIGJsb2NrZW5kCisJCSAqIGZsYWcgaXMgdW5yZWxpYWJsZTogc2luY2UgaXQgY2FuIHN0YXkgaGlnaCBiZXR3ZWVuCisJCSAqIElSUXMgaXQgd2lsbCBjb3JydXB0IHRoZSB0cmFuc2ZlciBjb3VudGVyLgorCQkgKi8KKwkJaWYgKCF2YXJpYW50LT5icm9rZW5fYmxvY2tlbmQpCisJCQlob3N0LT5kYXRhX3hmZXJlZCArPSBkYXRhLT5ibGtzejsKKwkJaG9zdC0+YmxvY2tlbmQgPSB0cnVlOworCX0KKworCWlmIChzdGF0dXMgJiBNQ0lfREFUQUVORCkKKwkJaG9zdC0+ZGF0YWVuZCA9IHRydWU7CisKKwkvKgorCSAqIE9uIHZhcmlhbnRzIHdpdGggYnJva2VuIGJsb2NrZW5kIHdlIHNoYWxsIG9ubHkgd2FpdCBmb3IgZGF0YWVuZCwKKwkgKiBvbiBvdGhlcnMgd2UgbXVzdCBzeW5jIHdpdGggdGhlIGJsb2NrZW5kIHNpZ25hbCBzaW5jZSB0aGV5IGNhbgorCSAqIGFwcGVhciBvdXQtb2Ytb3JkZXIuCisJICovCisJaWYgKGhvc3QtPmRhdGFlbmQgJiYgKGhvc3QtPmJsb2NrZW5kIHx8IHZhcmlhbnQtPmJyb2tlbl9ibG9ja2VuZCkpIHsKIAkJbW1jaV9zdG9wX2RhdGEoaG9zdCk7CiAKKwkJLyogUmVzZXQgdGhlc2UgZmxhZ3MgKi8KKwkJaG9zdC0+YmxvY2tlbmQgPSBmYWxzZTsKKwkJaG9zdC0+ZGF0YWVuZCA9IGZhbHNlOworCisJCS8qCisJCSAqIFZhcmlhbnRzIHdpdGggYnJva2VuIGJsb2NrZW5kIGZsYWdzIG5lZWQgdG8gaGFuZGxlIHRoZQorCQkgKiBlbmQgb2YgdGhlIGVudGlyZSB0cmFuc2ZlciBoZXJlLgorCQkgKi8KKwkJaWYgKHZhcmlhbnQtPmJyb2tlbl9ibG9ja2VuZCAmJiAhZGF0YS0+ZXJyb3IpCisJCQlob3N0LT5kYXRhX3hmZXJlZCArPSBkYXRhLT5ibGtzeiAqIGRhdGEtPmJsb2NrczsKKwogCQlpZiAoIWRhdGEtPnN0b3ApIHsKIAkJCW1tY2lfcmVxdWVzdF9lbmQoaG9zdCwgZGF0YS0+bXJxKTsKIAkJfSBlbHNlIHsKQEAgLTM1Niw3ICs0NTgsMzIgQEAKIAkJCSB2YXJpYW50LT5maWZvc2l6ZSA6IHZhcmlhbnQtPmZpZm9oYWxmc2l6ZTsKIAkJY291bnQgPSBtaW4ocmVtYWluLCBtYXhjbnQpOwogCi0JCXdyaXRlc2woYmFzZSArIE1NQ0lGSUZPLCBwdHIsIGNvdW50ID4+IDIpOworCQkvKgorCQkgKiBUaGUgU1QgTWljcm8gdmFyaWFudCBmb3IgU0RJTyB0cmFuc2ZlciBzaXplcworCQkgKiBsZXNzIHRoZW4gOCBieXRlcyBzaG91bGQgaGF2ZSBjbG9jayBIL1cgZmxvdworCQkgKiBjb250cm9sIGRpc2FibGVkLgorCQkgKi8KKwkJaWYgKHZhcmlhbnQtPnNkaW8gJiYKKwkJICAgIG1tY19jYXJkX3NkaW8oaG9zdC0+bW1jLT5jYXJkKSkgeworCQkJaWYgKGNvdW50IDwgOCkKKwkJCQl3cml0ZWwocmVhZGwoaG9zdC0+YmFzZSArIE1NQ0lDTE9DSykgJgorCQkJCQl+dmFyaWFudC0+Y2xrcmVnX2VuYWJsZSwKKwkJCQkJaG9zdC0+YmFzZSArIE1NQ0lDTE9DSyk7CisJCQllbHNlCisJCQkJd3JpdGVsKHJlYWRsKGhvc3QtPmJhc2UgKyBNTUNJQ0xPQ0spIHwKKwkJCQkJdmFyaWFudC0+Y2xrcmVnX2VuYWJsZSwKKwkJCQkJaG9zdC0+YmFzZSArIE1NQ0lDTE9DSyk7CisJCX0KKworCQkvKgorCQkgKiBTRElPIGVzcGVjaWFsbHkgbWF5IHdhbnQgdG8gc2VuZCBzb21ldGhpbmcgdGhhdCBpcworCQkgKiBub3QgZGl2aXNpYmxlIGJ5IDQgKGFzIG9wcG9zZWQgdG8gY2FyZCBzZWN0b3JzCisJCSAqIGV0YyksIGFuZCB0aGUgRklGTyBvbmx5IGFjY2VwdCBmdWxsIDMyLWJpdCB3cml0ZXMuCisJCSAqIFNvIGNvbXBlbnNhdGUgYnkgYWRkaW5nICszIG9uIHRoZSBjb3VudCwgYSBzaW5nbGUKKwkJICogYnl0ZSBiZWNvbWUgYSAzMmJpdCB3cml0ZSwgNyBieXRlcyB3aWxsIGJlIHR3bworCQkgKiAzMmJpdCB3cml0ZXMgZXRjLgorCQkgKi8KKwkJd3JpdGVzbChiYXNlICsgTU1DSUZJRk8sIHB0ciwgKGNvdW50ICsgMykgPj4gMik7CiAKIAkJcHRyICs9IGNvdW50OwogCQlyZW1haW4gLT0gY291bnQ7CkBAIC00MzcsNyArNTY0LDcgQEAKIAkgKiAiYW55IGRhdGEgYXZhaWxhYmxlIiBtb2RlLgogCSAqLwogCWlmIChzdGF0dXMgJiBNQ0lfUlhBQ1RJVkUgJiYgaG9zdC0+c2l6ZSA8IHZhcmlhbnQtPmZpZm9zaXplKQotCQl3cml0ZWwoTUNJX1JYREFUQUFWTEJMTUFTSywgYmFzZSArIE1NQ0lNQVNLMSk7CisJCW1tY2lfc2V0X21hc2sxKGhvc3QsIE1DSV9SWERBVEFBVkxCTE1BU0spOwogCiAJLyoKIAkgKiBJZiB3ZSBydW4gb3V0IG9mIGRhdGEsIGRpc2FibGUgdGhlIGRhdGEgSVJRczsgdGhpcwpAQCAtNDQ2LDcgKzU3Myw3IEBACiAJICogc3RvcHMgdXMgcmFjaW5nIHdpdGggb3VyIGRhdGEgZW5kIElSUS4KIAkgKi8KIAlpZiAoaG9zdC0+c2l6ZSA9PSAwKSB7Ci0JCXdyaXRlbCgwLCBiYXNlICsgTU1DSU1BU0sxKTsKKwkJbW1jaV9zZXRfbWFzazEoaG9zdCwgMCk7CiAJCXdyaXRlbChyZWFkbChiYXNlICsgTU1DSU1BU0swKSB8IE1DSV9EQVRBRU5ETUFTSywgYmFzZSArIE1NQ0lNQVNLMCk7CiAJfQogCkBAIC00NjksNiArNTk2LDE0IEBACiAJCXN0cnVjdCBtbWNfZGF0YSAqZGF0YTsKIAogCQlzdGF0dXMgPSByZWFkbChob3N0LT5iYXNlICsgTU1DSVNUQVRVUyk7CisKKwkJaWYgKGhvc3QtPnNpbmdsZWlycSkgeworCQkJaWYgKHN0YXR1cyAmIHJlYWRsKGhvc3QtPmJhc2UgKyBNTUNJTUFTSzEpKQorCQkJCW1tY2lfcGlvX2lycShpcnEsIGRldl9pZCk7CisKKwkJCXN0YXR1cyAmPSB+TUNJX0lSUTFNQVNLOworCQl9CisKIAkJc3RhdHVzICY9IHJlYWRsKGhvc3QtPmJhc2UgKyBNTUNJTUFTSzApOwogCQl3cml0ZWwoc3RhdHVzLCBob3N0LT5iYXNlICsgTU1DSUNMRUFSKTsKIApAQCAtNjM1LDYgKzc3MCw3IEBACiAJc3RydWN0IHZhcmlhbnRfZGF0YSAqdmFyaWFudCA9IGlkLT5kYXRhOwogCXN0cnVjdCBtbWNpX2hvc3QgKmhvc3Q7CiAJc3RydWN0IG1tY19ob3N0ICptbWM7CisJdW5zaWduZWQgaW50IG1hc2s7CiAJaW50IHJldDsKIAogCS8qIG11c3QgaGF2ZSBwbGF0Zm9ybSBkYXRhICovCkBAIC04MDYsMjAgKzk0MiwzMCBAQAogCWlmIChyZXQpCiAJCWdvdG8gdW5tYXA7CiAKLQlyZXQgPSByZXF1ZXN0X2lycShkZXYtPmlycVsxXSwgbW1jaV9waW9faXJxLCBJUlFGX1NIQVJFRCwgRFJJVkVSX05BTUUgIiAocGlvKSIsIGhvc3QpOwotCWlmIChyZXQpCi0JCWdvdG8gaXJxMF9mcmVlOworCWlmIChkZXYtPmlycVsxXSA9PSBOT19JUlEpCisJCWhvc3QtPnNpbmdsZWlycSA9IHRydWU7CisJZWxzZSB7CisJCXJldCA9IHJlcXVlc3RfaXJxKGRldi0+aXJxWzFdLCBtbWNpX3Bpb19pcnEsIElSUUZfU0hBUkVELAorCQkJCSAgRFJJVkVSX05BTUUgIiAocGlvKSIsIGhvc3QpOworCQlpZiAocmV0KQorCQkJZ290byBpcnEwX2ZyZWU7CisJfQogCi0Jd3JpdGVsKE1DSV9JUlFFTkFCTEUsIGhvc3QtPmJhc2UgKyBNTUNJTUFTSzApOworCW1hc2sgPSBNQ0lfSVJRRU5BQkxFOworCS8qIERvbid0IHVzZSB0aGUgZGF0YWJsb2NrZW5kIGZsYWcgaWYgaXQncyBicm9rZW4gKi8KKwlpZiAodmFyaWFudC0+YnJva2VuX2Jsb2NrZW5kKQorCQltYXNrICY9IH5NQ0lfREFUQUJMT0NLRU5EOworCisJd3JpdGVsKG1hc2ssIGhvc3QtPmJhc2UgKyBNTUNJTUFTSzApOwogCiAJYW1iYV9zZXRfZHJ2ZGF0YShkZXYsIG1tYyk7CiAKLQltbWNfYWRkX2hvc3QobW1jKTsKLQotCWRldl9pbmZvKCZkZXYtPmRldiwgIiVzOiBNTUNJIHJldiAleCBjZmcgJTAyeCBhdCAweCUwMTZsbHggaXJxICVkLCVkXG4iLAotCQltbWNfaG9zdG5hbWUobW1jKSwgYW1iYV9yZXYoZGV2KSwgYW1iYV9jb25maWcoZGV2KSwKKwlkZXZfaW5mbygmZGV2LT5kZXYsICIlczogUEwlMDN4IHJldiV1IGF0IDB4JTA4bGx4IGlycSAlZCwlZFxuIiwKKwkJbW1jX2hvc3RuYW1lKG1tYyksIGFtYmFfcGFydChkZXYpLCBhbWJhX3JldihkZXYpLAogCQkodW5zaWduZWQgbG9uZyBsb25nKWRldi0+cmVzLnN0YXJ0LCBkZXYtPmlycVswXSwgZGV2LT5pcnFbMV0pOwogCisJbW1jX2FkZF9ob3N0KG1tYyk7CisKIAlyZXR1cm4gMDsKIAogIGlycTBfZnJlZToKQEAgLTg2NCw3ICsxMDEwLDggQEAKIAkJd3JpdGVsKDAsIGhvc3QtPmJhc2UgKyBNTUNJREFUQUNUUkwpOwogCiAJCWZyZWVfaXJxKGRldi0+aXJxWzBdLCBob3N0KTsKLQkJZnJlZV9pcnEoZGV2LT5pcnFbMV0sIGhvc3QpOworCQlpZiAoIWhvc3QtPnNpbmdsZWlycSkKKwkJCWZyZWVfaXJxKGRldi0+aXJxWzFdLCBob3N0KTsKIAogCQlpZiAoaG9zdC0+Z3Bpb193cCAhPSAtRU5PU1lTKQogCQkJZ3Bpb19mcmVlKGhvc3QtPmdwaW9fd3ApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9tbWNpLmggYi9kcml2ZXJzL21tYy9ob3N0L21tY2kuaAppbmRleCA0YWU4ODdmLi5kZjA2ZjAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L21tY2kuaAorKysgYi9kcml2ZXJzL21tYy9ob3N0L21tY2kuaApAQCAtMTM5LDYgKzEzOSwxMSBAQAogCU1DSV9EQVRBVElNRU9VVE1BU0t8TUNJX1RYVU5ERVJSVU5NQVNLfE1DSV9SWE9WRVJSVU5NQVNLfAlcCiAJTUNJX0NNRFJFU1BFTkRNQVNLfE1DSV9DTURTRU5UTUFTS3xNQ0lfREFUQUJMT0NLRU5ETUFTSykKIAorLyogVGhlc2UgaW50ZXJydXB0cyBhcmUgZGlyZWN0ZWQgdG8gSVJRMSB3aGVuIHR3byBJUlEgbGluZXMgYXJlIGF2YWlsYWJsZSAqLworI2RlZmluZSBNQ0lfSVJRMU1BU0sgXAorCShNQ0lfUlhGSUZPSEFMRkZVTExNQVNLIHwgTUNJX1JYREFUQUFWTEJMTUFTSyB8IFwKKwkgTUNJX1RYRklGT0hBTEZFTVBUWU1BU0spCisKICNkZWZpbmUgTlJfU0cJCTE2CiAKIHN0cnVjdCBjbGs7CkBAIC0xNTQsNiArMTU5LDcgQEAKIAlpbnQJCQlncGlvX2NkOwogCWludAkJCWdwaW9fd3A7CiAJaW50CQkJZ3Bpb19jZF9pcnE7CisJYm9vbAkJCXNpbmdsZWlycTsKIAogCXVuc2lnbmVkIGludAkJZGF0YV94ZmVyZWQ7CiAKQEAgLTE3MSw2ICsxNzcsOSBAQAogCXN0cnVjdCB0aW1lcl9saXN0CXRpbWVyOwogCXVuc2lnbmVkIGludAkJb2xkc3RhdDsKIAorCWJvb2wJCQlibG9ja2VuZDsKKwlib29sCQkJZGF0YWVuZDsKKwogCS8qIHBpbyBzdHVmZiAqLwogCXN0cnVjdCBzZ19tYXBwaW5nX2l0ZXIJc2dfbWl0ZXI7CiAJdW5zaWduZWQgaW50CQlzaXplOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9tc21fc2RjYy5jIGIvZHJpdmVycy9tbWMvaG9zdC9tc21fc2RjYy5jCmluZGV4IDEyOTBkMTQuLjVkZWNmZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvbXNtX3NkY2MuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L21zbV9zZGNjLmMKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlIDxtYWNoL21tYy5oPgogI2luY2x1ZGUgPG1hY2gvbXNtX2lvbWFwLmg+CiAjaW5jbHVkZSA8bWFjaC9kbWEuaD4KKyNpbmNsdWRlIDxtYWNoL2Nsay5oPgogCiAjaW5jbHVkZSAibXNtX3NkY2MuaCIKIApAQCAtMTI2LDYgKzEyNyw0MCBAQAogbXNtc2RjY19zdGFydF9jb21tYW5kKHN0cnVjdCBtc21zZGNjX2hvc3QgKmhvc3QsIHN0cnVjdCBtbWNfY29tbWFuZCAqY21kLAogCQkgICAgICB1MzIgYyk7CiAKK3N0YXRpYyB2b2lkIG1zbXNkY2NfcmVzZXRfYW5kX3Jlc3RvcmUoc3RydWN0IG1zbXNkY2NfaG9zdCAqaG9zdCkKK3sKKwl1MzIJbWNpX2NsayA9IDA7CisJdTMyCW1jaV9tYXNrMCA9IDA7CisJaW50CXJldCA9IDA7CisKKwkvKiBTYXZlIHRoZSBjb250cm9sbGVyIHN0YXRlICovCisJbWNpX2NsayA9IHJlYWRsKGhvc3QtPmJhc2UgKyBNTUNJQ0xPQ0spOworCW1jaV9tYXNrMCA9IHJlYWRsKGhvc3QtPmJhc2UgKyBNTUNJTUFTSzApOworCisJLyogUmVzZXQgdGhlIGNvbnRyb2xsZXIgKi8KKwlyZXQgPSBjbGtfcmVzZXQoaG9zdC0+Y2xrLCBDTEtfUkVTRVRfQVNTRVJUKTsKKwlpZiAocmV0KQorCQlwcl9lcnIoIiVzOiBDbG9jayBhc3NlcnQgZmFpbGVkIGF0ICV1IEh6IHdpdGggZXJyICVkXG4iLAorCQkJCW1tY19ob3N0bmFtZShob3N0LT5tbWMpLCBob3N0LT5jbGtfcmF0ZSwgcmV0KTsKKworCXJldCA9IGNsa19yZXNldChob3N0LT5jbGssIENMS19SRVNFVF9ERUFTU0VSVCk7CisJaWYgKHJldCkKKwkJcHJfZXJyKCIlczogQ2xvY2sgZGVhc3NlcnQgZmFpbGVkIGF0ICV1IEh6IHdpdGggZXJyICVkXG4iLAorCQkJCW1tY19ob3N0bmFtZShob3N0LT5tbWMpLCBob3N0LT5jbGtfcmF0ZSwgcmV0KTsKKworCXByX2luZm8oIiVzOiBDb250cm9sbGVyIGhhcyBiZWVuIHJlLWluaXRpYWxpYXplZFxuIiwKKwkJCW1tY19ob3N0bmFtZShob3N0LT5tbWMpKTsKKworCS8qIFJlc3RvcmUgdGhlIGNvbnRvbGxlciBzdGF0ZSAqLworCXdyaXRlbChob3N0LT5wd3IsIGhvc3QtPmJhc2UgKyBNTUNJUE9XRVIpOworCXdyaXRlbChtY2lfY2xrLCBob3N0LT5iYXNlICsgTU1DSUNMT0NLKTsKKwl3cml0ZWwobWNpX21hc2swLCBob3N0LT5iYXNlICsgTU1DSU1BU0swKTsKKwlyZXQgPSBjbGtfc2V0X3JhdGUoaG9zdC0+Y2xrLCBob3N0LT5jbGtfcmF0ZSk7CisJaWYgKHJldCkKKwkJcHJfZXJyKCIlczogRmFpbGVkIHRvIHNldCBjbGsgcmF0ZSAldSBIeiAoJWQpXG4iLAorCQkJCW1tY19ob3N0bmFtZShob3N0LT5tbWMpLCBob3N0LT5jbGtfcmF0ZSwgcmV0KTsKK30KKwogc3RhdGljIHZvaWQKIG1zbXNkY2NfcmVxdWVzdF9lbmQoc3RydWN0IG1zbXNkY2NfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19yZXF1ZXN0ICptcnEpCiB7CkBAIC0xNTUsNyArMTkwLDcgQEAKIG1zbXNkY2Nfc3RvcF9kYXRhKHN0cnVjdCBtc21zZGNjX2hvc3QgKmhvc3QpCiB7CiAJaG9zdC0+Y3Vyci5kYXRhID0gTlVMTDsKLQlob3N0LT5jdXJyLmdvdF9kYXRhZW5kID0gaG9zdC0+Y3Vyci5nb3RfZGF0YWJsa2VuZCA9IDA7CisJaG9zdC0+Y3Vyci5nb3RfZGF0YWVuZCA9IDA7CiB9CiAKIHVpbnQzMl90IG1zbXNkY2NfZmlmb19hZGRyKHN0cnVjdCBtc21zZGNjX2hvc3QgKmhvc3QpCkBAIC0xODksNDIgKzIyNCw0MiBAQAogfQogCiBzdGF0aWMgdm9pZAotbXNtc2RjY19kbWFfY29tcGxldGVfZnVuYyhzdHJ1Y3QgbXNtX2Rtb3ZfY21kICpjbWQsCi0JCQkgIHVuc2lnbmVkIGludCByZXN1bHQsCi0JCQkgIHN0cnVjdCBtc21fZG1vdl9lcnJkYXRhICplcnIpCittc21zZGNjX2RtYV9jb21wbGV0ZV90bGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKLQlzdHJ1Y3QgbXNtc2RjY19kbWFfZGF0YQkqZG1hX2RhdGEgPQotCQljb250YWluZXJfb2YoY21kLCBzdHJ1Y3QgbXNtc2RjY19kbWFfZGF0YSwgaGRyKTsKLQlzdHJ1Y3QgbXNtc2RjY19ob3N0CSpob3N0ID0gZG1hX2RhdGEtPmhvc3Q7CisJc3RydWN0IG1zbXNkY2NfaG9zdCAqaG9zdCA9IChzdHJ1Y3QgbXNtc2RjY19ob3N0ICopZGF0YTsKIAl1bnNpZ25lZCBsb25nCQlmbGFnczsKIAlzdHJ1Y3QgbW1jX3JlcXVlc3QJKm1ycTsKKwlzdHJ1Y3QgbXNtX2Rtb3ZfZXJyZGF0YSBlcnI7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaG9zdC0+bG9jaywgZmxhZ3MpOwogCWhvc3QtPmRtYS5hY3RpdmUgPSAwOwogCisJZXJyID0gaG9zdC0+ZG1hLmVycjsKIAltcnEgPSBob3N0LT5jdXJyLm1ycTsKIAlCVUdfT04oIW1ycSk7CiAJV0FSTl9PTighbXJxLT5kYXRhKTsKIAotCWlmICghKHJlc3VsdCAmIERNT1ZfUlNMVF9WQUxJRCkpIHsKKwlpZiAoIShob3N0LT5kbWEucmVzdWx0ICYgRE1PVl9SU0xUX1ZBTElEKSkgewogCQlwcl9lcnIoIm1zbXNkY2M6IEludmFsaWQgRGF0YU1vdmVyIHJlc3VsdFxuIik7CiAJCWdvdG8gb3V0OwogCX0KIAotCWlmIChyZXN1bHQgJiBETU9WX1JTTFRfRE9ORSkgeworCWlmIChob3N0LT5kbWEucmVzdWx0ICYgRE1PVl9SU0xUX0RPTkUpIHsKIAkJaG9zdC0+Y3Vyci5kYXRhX3hmZXJlZCA9IGhvc3QtPmN1cnIueGZlcl9zaXplOwogCX0gZWxzZSB7CiAJCS8qIEVycm9yIG9yIGZsdXNoICAqLwotCQlpZiAocmVzdWx0ICYgRE1PVl9SU0xUX0VSUk9SKQorCQlpZiAoaG9zdC0+ZG1hLnJlc3VsdCAmIERNT1ZfUlNMVF9FUlJPUikKIAkJCXByX2VycigiJXM6IERNQSBlcnJvciAoMHglLjh4KVxuIiwKLQkJCSAgICAgICBtbWNfaG9zdG5hbWUoaG9zdC0+bW1jKSwgcmVzdWx0KTsKLQkJaWYgKHJlc3VsdCAmIERNT1ZfUlNMVF9GTFVTSCkKKwkJCSAgICAgICBtbWNfaG9zdG5hbWUoaG9zdC0+bW1jKSwgaG9zdC0+ZG1hLnJlc3VsdCk7CisJCWlmIChob3N0LT5kbWEucmVzdWx0ICYgRE1PVl9SU0xUX0ZMVVNIKQogCQkJcHJfZXJyKCIlczogRE1BIGNoYW5uZWwgZmx1c2hlZCAoMHglLjh4KVxuIiwKLQkJCSAgICAgICBtbWNfaG9zdG5hbWUoaG9zdC0+bW1jKSwgcmVzdWx0KTsKLQkJaWYgKGVycikKLQkJCXByX2VycigiRmx1c2ggZGF0YTogJS44eCAlLjh4ICUuOHggJS44eCAlLjh4ICUuOHhcbiIsCi0JCQkgICAgICAgZXJyLT5mbHVzaFswXSwgZXJyLT5mbHVzaFsxXSwgZXJyLT5mbHVzaFsyXSwKLQkJCSAgICAgICBlcnItPmZsdXNoWzNdLCBlcnItPmZsdXNoWzRdLCBlcnItPmZsdXNoWzVdKTsKKwkJCSAgICAgICBtbWNfaG9zdG5hbWUoaG9zdC0+bW1jKSwgaG9zdC0+ZG1hLnJlc3VsdCk7CisKKwkJcHJfZXJyKCJGbHVzaCBkYXRhOiAlLjh4ICUuOHggJS44eCAlLjh4ICUuOHggJS44eFxuIiwKKwkJICAgICAgIGVyci5mbHVzaFswXSwgZXJyLmZsdXNoWzFdLCBlcnIuZmx1c2hbMl0sCisJCSAgICAgICBlcnIuZmx1c2hbM10sIGVyci5mbHVzaFs0XSwgZXJyLmZsdXNoWzVdKTsKKworCQltc21zZGNjX3Jlc2V0X2FuZF9yZXN0b3JlKGhvc3QpOwogCQlpZiAoIW1ycS0+ZGF0YS0+ZXJyb3IpCiAJCQltcnEtPmRhdGEtPmVycm9yID0gLUVJTzsKIAl9CkBAIC0yNDIsOCArMjc3LDcgQEAKIAlob3N0LT5kbWEuc2cgPSBOVUxMOwogCWhvc3QtPmRtYS5idXN5ID0gMDsKIAotCWlmICgoaG9zdC0+Y3Vyci5nb3RfZGF0YWVuZCAmJiBob3N0LT5jdXJyLmdvdF9kYXRhYmxrZW5kKQotCSAgICAgfHwgbXJxLT5kYXRhLT5lcnJvcikgeworCWlmIChob3N0LT5jdXJyLmdvdF9kYXRhZW5kIHx8IG1ycS0+ZGF0YS0+ZXJyb3IpIHsKIAogCQkvKgogCQkgKiBJZiB3ZSd2ZSBhbHJlYWR5IGdvdHRlbiBvdXIgREFUQUVORCAvIERBVEFCTEtFTkQKQEAgLTI3Myw2ICszMDcsMjIgQEAKIAlyZXR1cm47CiB9CiAKK3N0YXRpYyB2b2lkCittc21zZGNjX2RtYV9jb21wbGV0ZV9mdW5jKHN0cnVjdCBtc21fZG1vdl9jbWQgKmNtZCwKKwkJCSAgdW5zaWduZWQgaW50IHJlc3VsdCwKKwkJCSAgc3RydWN0IG1zbV9kbW92X2VycmRhdGEgKmVycikKK3sKKwlzdHJ1Y3QgbXNtc2RjY19kbWFfZGF0YQkqZG1hX2RhdGEgPQorCQljb250YWluZXJfb2YoY21kLCBzdHJ1Y3QgbXNtc2RjY19kbWFfZGF0YSwgaGRyKTsKKwlzdHJ1Y3QgbXNtc2RjY19ob3N0ICpob3N0ID0gZG1hX2RhdGEtPmhvc3Q7CisKKwlkbWFfZGF0YS0+cmVzdWx0ID0gcmVzdWx0OworCWlmIChlcnIpCisJCW1lbWNweSgmZG1hX2RhdGEtPmVyciwgZXJyLCBzaXplb2Yoc3RydWN0IG1zbV9kbW92X2VycmRhdGEpKTsKKworCXRhc2tsZXRfc2NoZWR1bGUoJmhvc3QtPmRtYV90bGV0KTsKK30KKwogc3RhdGljIGludCB2YWxpZGF0ZV9kbWEoc3RydWN0IG1zbXNkY2NfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19kYXRhICpkYXRhKQogewogCWlmIChob3N0LT5kbWEuY2hhbm5lbCA9PSAtMSkKQEAgLTQyNCw2ICs0NzQsMTEgQEAKIAkgICAgICAoY21kLT5vcGNvZGUgPT0gNTMpKQogCQkqYyB8PSBNQ0lfQ1NQTV9EQVRDTUQ7CiAKKwlpZiAoaG9zdC0+cHJvZ19zY2FuICYmIChjbWQtPm9wY29kZSA9PSAxMikpIHsKKwkJKmMgfD0gTUNJX0NQU01fUFJPR0VOQTsKKwkJaG9zdC0+cHJvZ19lbmFibGUgPSB0cnVlOworCX0KKwogCWlmIChjbWQgPT0gY21kLT5tcnEtPnN0b3ApCiAJCSpjIHw9IE1DSV9DU1BNX01DSUFCT1JUOwogCkBAIC00NTAsNyArNTA1LDYgQEAKIAlob3N0LT5jdXJyLnhmZXJfcmVtYWluID0gaG9zdC0+Y3Vyci54ZmVyX3NpemU7CiAJaG9zdC0+Y3Vyci5kYXRhX3hmZXJlZCA9IDA7CiAJaG9zdC0+Y3Vyci5nb3RfZGF0YWVuZCA9IDA7Ci0JaG9zdC0+Y3Vyci5nb3RfZGF0YWJsa2VuZCA9IDA7CiAKIAltZW1zZXQoJmhvc3QtPnBpbywgMCwgc2l6ZW9mKGhvc3QtPnBpbykpOwogCkBAIC00OTQsNiArNTQ4LDggQEAKIAkJCWhvc3QtPmNtZF9jID0gYzsKIAkJfQogCQltc21fZG1vdl9lbnF1ZXVlX2NtZChob3N0LT5kbWEuY2hhbm5lbCwgJmhvc3QtPmRtYS5oZHIpOworCQlpZiAoZGF0YS0+ZmxhZ3MgJiBNTUNfREFUQV9XUklURSkKKwkJCWhvc3QtPnByb2dfc2NhbiA9IHRydWU7CiAJfSBlbHNlIHsKIAkJbXNtc2RjY193cml0ZWwoaG9zdCwgdGltZW91dCwgTU1DSURBVEFUSU1FUik7CiAKQEAgLTU1NSw2ICs2MTEsOSBAQAogCXVpbnQzMl90CSpwdHIgPSAodWludDMyX3QgKikgYnVmZmVyOwogCWludAkJY291bnQgPSAwOwogCisJaWYgKHJlbWFpbiAlIDQpCisJCXJlbWFpbiA9ICgocmVtYWluID4+IDIpICsgMSkgPDwgMjsKKwogCXdoaWxlIChtc21zZGNjX3JlYWRsKGhvc3QsIE1NQ0lTVEFUVVMpICYgTUNJX1JYREFUQUFWTEJMKSB7CiAJCSpwdHIgPSBtc21zZGNjX3JlYWRsKGhvc3QsIE1NQ0lGSUZPICsgKGNvdW50ICUgTUNJX0ZJRk9TSVpFKSk7CiAJCXB0cisrOwpAQCAtNTc1LDEzICs2MzQsMTQgQEAKIAljaGFyICpwdHIgPSBidWZmZXI7CiAKIAlkbyB7Ci0JCXVuc2lnbmVkIGludCBjb3VudCwgbWF4Y250OworCQl1bnNpZ25lZCBpbnQgY291bnQsIG1heGNudCwgc3o7CiAKIAkJbWF4Y250ID0gc3RhdHVzICYgTUNJX1RYRklGT0VNUFRZID8gTUNJX0ZJRk9TSVpFIDoKIAkJCQkJCSAgICBNQ0lfRklGT0hBTEZTSVpFOwogCQljb3VudCA9IG1pbihyZW1haW4sIG1heGNudCk7CiAKLQkJd3JpdGVzbChiYXNlICsgTU1DSUZJRk8sIHB0ciwgY291bnQgPj4gMik7CisJCXN6ID0gY291bnQgJSA0ID8gKGNvdW50ID4+IDIpICsgMSA6IChjb3VudCA+PiAyKTsKKwkJd3JpdGVzbChiYXNlICsgTU1DSUZJRk8sIHB0ciwgc3opOwogCQlwdHIgKz0gY291bnQ7CiAJCXJlbWFpbiAtPSBjb3VudDsKIApAQCAtNzAyLDEwICs3NjIsMjYgQEAKIAkJCW1zbV9kbW92X3N0b3BfY21kKGhvc3QtPmRtYS5jaGFubmVsLAogCQkJCQkgICZob3N0LT5kbWEuaGRyLCAwKTsKIAkJZWxzZSBpZiAoaG9zdC0+Y3Vyci5kYXRhKSB7IC8qIE5vbiBETUEgKi8KKwkJCW1zbXNkY2NfcmVzZXRfYW5kX3Jlc3RvcmUoaG9zdCk7CiAJCQltc21zZGNjX3N0b3BfZGF0YShob3N0KTsKIAkJCW1zbXNkY2NfcmVxdWVzdF9lbmQoaG9zdCwgY21kLT5tcnEpOwotCQl9IGVsc2UgLyogaG9zdC0+ZGF0YSA9PSBOVUxMICovCi0JCQltc21zZGNjX3JlcXVlc3RfZW5kKGhvc3QsIGNtZC0+bXJxKTsKKwkJfSBlbHNlIHsgLyogaG9zdC0+ZGF0YSA9PSBOVUxMICovCisJCQlpZiAoIWNtZC0+ZXJyb3IgJiYgaG9zdC0+cHJvZ19lbmFibGUpIHsKKwkJCQlpZiAoc3RhdHVzICYgTUNJX1BST0dET05FKSB7CisJCQkJCWhvc3QtPnByb2dfc2NhbiA9IGZhbHNlOworCQkJCQlob3N0LT5wcm9nX2VuYWJsZSA9IGZhbHNlOworCQkJCQltc21zZGNjX3JlcXVlc3RfZW5kKGhvc3QsIGNtZC0+bXJxKTsKKwkJCQl9IGVsc2UgeworCQkJCQlob3N0LT5jdXJyLmNtZCA9IGNtZDsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWlmIChob3N0LT5wcm9nX2VuYWJsZSkgeworCQkJCQlob3N0LT5wcm9nX3NjYW4gPSBmYWxzZTsKKwkJCQkJaG9zdC0+cHJvZ19lbmFibGUgPSBmYWxzZTsKKwkJCQl9CisJCQkJbXNtc2RjY19yZXF1ZXN0X2VuZChob3N0LCBjbWQtPm1ycSk7CisJCQl9CisJCX0KIAl9IGVsc2UgaWYgKGNtZC0+ZGF0YSkKIAkJaWYgKCEoY21kLT5kYXRhLT5mbGFncyAmIE1NQ19EQVRBX1JFQUQpKQogCQkJbXNtc2RjY19zdGFydF9kYXRhKGhvc3QsIGNtZC0+ZGF0YSwKQEAgLTcxOSw3ICs3OTUsNyBAQAogCXN0cnVjdCBtbWNfZGF0YSAqZGF0YSA9IGhvc3QtPmN1cnIuZGF0YTsKIAogCWlmIChzdGF0dXMgJiAoTUNJX0NNRFNFTlQgfCBNQ0lfQ01EUkVTUEVORCB8IE1DSV9DTURDUkNGQUlMIHwKLQkgICAgICAgICAgICAgIE1DSV9DTURUSU1FT1VUKSAmJiBob3N0LT5jdXJyLmNtZCkgeworCQkJTUNJX0NNRFRJTUVPVVQgfCBNQ0lfUFJPR0RPTkUpICYmIGhvc3QtPmN1cnIuY21kKSB7CiAJCW1zbXNkY2NfZG9fY21kaXJxKGhvc3QsIHN0YXR1cyk7CiAJfQogCkBAIC03MzUsNiArODExLDcgQEAKIAkJCW1zbV9kbW92X3N0b3BfY21kKGhvc3QtPmRtYS5jaGFubmVsLAogCQkJCQkgICZob3N0LT5kbWEuaGRyLCAwKTsKIAkJZWxzZSB7CisJCQltc21zZGNjX3Jlc2V0X2FuZF9yZXN0b3JlKGhvc3QpOwogCQkJaWYgKGhvc3QtPmN1cnIuZGF0YSkKIAkJCQltc21zZGNjX3N0b3BfZGF0YShob3N0KTsKIAkJCWlmICghZGF0YS0+c3RvcCkKQEAgLTc0OCwxNCArODI1LDEwIEBACiAJaWYgKCFob3N0LT5jdXJyLmdvdF9kYXRhZW5kICYmIChzdGF0dXMgJiBNQ0lfREFUQUVORCkpCiAJCWhvc3QtPmN1cnIuZ290X2RhdGFlbmQgPSAxOwogCi0JaWYgKCFob3N0LT5jdXJyLmdvdF9kYXRhYmxrZW5kICYmIChzdGF0dXMgJiBNQ0lfREFUQUJMT0NLRU5EKSkKLQkJaG9zdC0+Y3Vyci5nb3RfZGF0YWJsa2VuZCA9IDE7Ci0KIAkvKgogCSAqIElmIERNQSBpcyBzdGlsbCBpbiBwcm9ncmVzcywgd2UgY29tcGxldGUgdmlhIHRoZSBjb21wbGV0aW9uIGhhbmRsZXIKIAkgKi8KLQlpZiAoaG9zdC0+Y3Vyci5nb3RfZGF0YWVuZCAmJiBob3N0LT5jdXJyLmdvdF9kYXRhYmxrZW5kICYmCi0JICAgICFob3N0LT5kbWEuYnVzeSkgeworCWlmIChob3N0LT5jdXJyLmdvdF9kYXRhZW5kICYmICFob3N0LT5kbWEuYnVzeSkgewogCQkvKgogCQkgKiBUaGVyZSBhcHBlYXJzIHRvIGJlIGFuIGlzc3VlIGluIHRoZSBjb250cm9sbGVyIHdoZXJlCiAJCSAqIGlmIHlvdSByZXF1ZXN0IGEgc21hbGwgYmxvY2sgdHJhbnNmZXIgKDwgZmlmbyBzaXplKSwKQEAgLTc5Miw4ICs4NjUsNyBAQAogCiAJZG8gewogCQlzdGF0dXMgPSBtc21zZGNjX3JlYWRsKGhvc3QsIE1NQ0lTVEFUVVMpOwotCQlzdGF0dXMgJj0gKG1zbXNkY2NfcmVhZGwoaG9zdCwgTU1DSU1BU0swKSB8Ci0JCQkJCSAgICAgIE1DSV9EQVRBQkxPQ0tFTkRNQVNLKTsKKwkJc3RhdHVzICY9IG1zbXNkY2NfcmVhZGwoaG9zdCwgTU1DSU1BU0swKTsKIAkJbXNtc2RjY193cml0ZWwoaG9zdCwgc3RhdHVzLCBNTUNJQ0xFQVIpOwogCiAJCWlmIChzdGF0dXMgJiBNQ0lfU0RJT0lOVFIpCkBAIC0xMTE4LDYgKzExOTAsOSBAQAogCWhvc3QtPmRtYXJlcyA9IGRtYXJlczsKIAlzcGluX2xvY2tfaW5pdCgmaG9zdC0+bG9jayk7CiAKKwl0YXNrbGV0X2luaXQoJmhvc3QtPmRtYV90bGV0LCBtc21zZGNjX2RtYV9jb21wbGV0ZV90bGV0LAorCQkJKHVuc2lnbmVkIGxvbmcpaG9zdCk7CisKIAkvKgogCSAqIFNldHVwIERNQQogCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9tc21fc2RjYy5oIGIvZHJpdmVycy9tbWMvaG9zdC9tc21fc2RjYy5oCmluZGV4IGZmMmIwZjcuLjkzOTU1N2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvbXNtX3NkY2MuaAorKysgYi9kcml2ZXJzL21tYy9ob3N0L21zbV9zZGNjLmgKQEAgLTEzOCw3ICsxMzgsNyBAQAogI2RlZmluZSBNQ0lfSVJRRU5BQkxFCVwKIAkoTUNJX0NNRENSQ0ZBSUxNQVNLfE1DSV9EQVRBQ1JDRkFJTE1BU0t8TUNJX0NNRFRJTUVPVVRNQVNLfAlcCiAJTUNJX0RBVEFUSU1FT1VUTUFTS3xNQ0lfVFhVTkRFUlJVTk1BU0t8TUNJX1JYT1ZFUlJVTk1BU0t8CVwKLQlNQ0lfQ01EUkVTUEVORE1BU0t8TUNJX0NNRFNFTlRNQVNLfE1DSV9EQVRBRU5ETUFTSykKKwlNQ0lfQ01EUkVTUEVORE1BU0t8TUNJX0NNRFNFTlRNQVNLfE1DSV9EQVRBRU5ETUFTS3xNQ0lfUFJPR0RPTkVNQVNLKQogCiAvKgogICogVGhlIHNpemUgb2YgdGhlIEZJRk8gaW4gYnl0ZXMuCkBAIC0xNzIsNiArMTcyLDggQEAKIAlzdHJ1Y3QgbXNtc2RjY19ob3N0CQkqaG9zdDsKIAlpbnQJCQkJYnVzeTsgLyogU2V0IGlmIERNIGlzIGJ1c3kgKi8KIAlpbnQJCQkJYWN0aXZlOworCXVuc2lnbmVkIGludAkJCXJlc3VsdDsKKwlzdHJ1Y3QgbXNtX2Rtb3ZfZXJyZGF0YQkJZXJyOwogfTsKIAogc3RydWN0IG1zbXNkY2NfcGlvX2RhdGEgewpAQCAtMTg4LDcgKzE5MCw2IEBACiAJdW5zaWduZWQgaW50CQl4ZmVyX3JlbWFpbjsJLyogQnl0ZXMgcmVtYWluaW5nIHRvIHNlbmQgKi8KIAl1bnNpZ25lZCBpbnQJCWRhdGFfeGZlcmVkOwkvKiBCeXRlcyBhY2tlZCBieSBCTEtFTkQgaXJxICovCiAJaW50CQkJZ290X2RhdGFlbmQ7Ci0JaW50CQkJZ290X2RhdGFibGtlbmQ7CiAJaW50CQkJdXNlcl9wYWdlczsKIH07CiAKQEAgLTIzNSw2ICsyMzYsNyBAQAogCWludAkJCWNtZHBvbGw7CiAJc3RydWN0IG1zbXNkY2Nfc3RhdHMJc3RhdHM7CiAKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QJZG1hX3RsZXQ7CiAJLyogQ29tbWFuZCBwYXJhbWV0ZXJzICovCiAJdW5zaWduZWQgaW50CQljbWRfdGltZW91dDsKIAl1bnNpZ25lZCBpbnQJCWNtZF9waW9faXJxbWFzazsKQEAgLTI0Miw2ICsyNDQsOCBAQAogCXN0cnVjdCBtbWNfY29tbWFuZAkqY21kX2NtZDsKIAl1MzIJCQljbWRfYzsKIAorCWJvb2wgcHJvZ19zY2FuOworCWJvb2wgcHJvZ19lbmFibGU7CiB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvb21hcC5jIGIvZHJpdmVycy9tbWMvaG9zdC9vbWFwLmMKaW5kZXggMGM3ZTM3Zi4uMzc5ZDJmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9vbWFwLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9vbWFwLmMKQEAgLTE3Myw2ICsxNzMsOCBAQAogCXN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhICpwZGF0YTsKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbW1jX29tYXBfd3E7CisKIHN0YXRpYyB2b2lkIG1tY19vbWFwX2ZjbGtfb2ZmZGVsYXkoc3RydWN0IG1tY19vbWFwX3Nsb3QgKnNsb3QpCiB7CiAJdW5zaWduZWQgbG9uZyB0aWNrX25zOwpAQCAtMjg5LDcgKzI5MSw3IEBACiAJCWhvc3QtPm5leHRfc2xvdCA9IG5ld19zbG90OwogCQlob3N0LT5tbWMgPSBuZXdfc2xvdC0+bW1jOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0LT5zbG90X2xvY2ssIGZsYWdzKTsKLQkJc2NoZWR1bGVfd29yaygmaG9zdC0+c2xvdF9yZWxlYXNlX3dvcmspOworCQlxdWV1ZV93b3JrKG1tY19vbWFwX3dxLCAmaG9zdC0+c2xvdF9yZWxlYXNlX3dvcmspOwogCQlyZXR1cm47CiAJfQogCkBAIC00NTcsNyArNDU5LDcgQEAKIAl9CiAKIAlob3N0LT5zdG9wX2RhdGEgPSBkYXRhOwotCXNjaGVkdWxlX3dvcmsoJmhvc3QtPnNlbmRfc3RvcF93b3JrKTsKKwlxdWV1ZV93b3JrKG1tY19vbWFwX3dxLCAmaG9zdC0+c2VuZF9zdG9wX3dvcmspOwogfQogCiBzdGF0aWMgdm9pZApAQCAtNjM3LDcgKzYzOSw3IEBACiAJCU9NQVBfTU1DX1dSSVRFKGhvc3QsIElFLCAwKTsKIAkJZGlzYWJsZV9pcnEoaG9zdC0+aXJxKTsKIAkJaG9zdC0+YWJvcnQgPSAxOwotCQlzY2hlZHVsZV93b3JrKCZob3N0LT5jbWRfYWJvcnRfd29yayk7CisJCXF1ZXVlX3dvcmsobW1jX29tYXBfd3EsICZob3N0LT5jbWRfYWJvcnRfd29yayk7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3QtPnNsb3RfbG9jaywgZmxhZ3MpOwogfQpAQCAtODI2LDcgKzgyOCw3IEBACiAJCWhvc3QtPmFib3J0ID0gMTsKIAkJT01BUF9NTUNfV1JJVEUoaG9zdCwgSUUsIDApOwogCQlkaXNhYmxlX2lycV9ub3N5bmMoaG9zdC0+aXJxKTsKLQkJc2NoZWR1bGVfd29yaygmaG9zdC0+Y21kX2Fib3J0X3dvcmspOworCQlxdWV1ZV93b3JrKG1tY19vbWFwX3dxLCAmaG9zdC0+Y21kX2Fib3J0X3dvcmspOwogCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAJfQogCkBAIC0xMzg3LDcgKzEzODksNyBAQAogCiAJdGFza2xldF9raWxsKCZzbG90LT5jb3Zlcl90YXNrbGV0KTsKIAlkZWxfdGltZXJfc3luYygmc2xvdC0+Y292ZXJfdGltZXIpOwotCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisJZmx1c2hfd29ya3F1ZXVlKG1tY19vbWFwX3dxKTsKIAogCW1tY19yZW1vdmVfaG9zdChtbWMpOwogCW1tY19mcmVlX2hvc3QobW1jKTsKQEAgLTE2MDgsMTIgKzE2MTAsMjIgQEAKIAogc3RhdGljIGludCBfX2luaXQgbW1jX29tYXBfaW5pdCh2b2lkKQogewotCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJm1tY19vbWFwX2RyaXZlciwgbW1jX29tYXBfcHJvYmUpOworCWludCByZXQ7CisKKwltbWNfb21hcF93cSA9IGFsbG9jX3dvcmtxdWV1ZSgibW1jX29tYXAiLCAwLCAwKTsKKwlpZiAoIW1tY19vbWFwX3dxKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9wcm9iZSgmbW1jX29tYXBfZHJpdmVyLCBtbWNfb21hcF9wcm9iZSk7CisJaWYgKHJldCkKKwkJZGVzdHJveV93b3JrcXVldWUobW1jX29tYXBfd3EpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBtbWNfb21hcF9leGl0KHZvaWQpCiB7CiAJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm1tY19vbWFwX2RyaXZlcik7CisJZGVzdHJveV93b3JrcXVldWUobW1jX29tYXBfd3EpOwogfQogCiBtb2R1bGVfaW5pdChtbWNfb21hcF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvb21hcF9oc21tYy5jIGIvZHJpdmVycy9tbWMvaG9zdC9vbWFwX2hzbW1jLmMKaW5kZXggNWQ0NjAyMS4uMDc4ZmRmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9vbWFwX2hzbW1jLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9vbWFwX2hzbW1jLmMKQEAgLTIyOTAsNyArMjI5MCw3IEBACiAJCWZyZWVfaXJxKGhvc3QtPmlycSwgaG9zdCk7CiAJCWlmIChtbWNfc2xvdChob3N0KS5jYXJkX2RldGVjdF9pcnEpCiAJCQlmcmVlX2lycShtbWNfc2xvdChob3N0KS5jYXJkX2RldGVjdF9pcnEsIGhvc3QpOwotCQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCQlmbHVzaF93b3JrX3N5bmMoJmhvc3QtPm1tY19jYXJkZGV0ZWN0X3dvcmspOwogCiAJCW1tY19ob3N0X2Rpc2FibGUoaG9zdC0+bW1jKTsKIAkJY2xrX2Rpc2FibGUoaG9zdC0+aWNsayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3NoX21tY2lmLmMgYi9kcml2ZXJzL21tYy9ob3N0L3NoX21tY2lmLmMKaW5kZXggZGRkMDk4NC4uMTI4ODRjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9zaF9tbWNpZi5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2hfbW1jaWYuYwpAQCAtMTYsMTYgKzE2LDE5IEBACiAgKgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgotI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+CisjaW5jbHVkZSA8bGludXgvZG1hZW5naW5lLmg+CiAjaW5jbHVkZSA8bGludXgvbW1jL2NhcmQuaD4KICNpbmNsdWRlIDxsaW51eC9tbWMvY29yZS5oPgorI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW1jL21tYy5oPgogI2luY2x1ZGUgPGxpbnV4L21tYy9zZGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9tbWMvc2hfbW1jaWYuaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAKICNkZWZpbmUgRFJJVkVSX05BTUUJInNoX21tY2lmIgogI2RlZmluZSBEUklWRVJfVkVSU0lPTgkiMjAxMC0wNC0yOCIKQEAgLTYyLDI1ICs2NSw2IEBACiAvKiBDRV9CTE9DS19TRVQgKi8KICNkZWZpbmUgQkxPQ0tfU0laRV9NQVNLCQkweDAwMDBmZmZmCiAKLS8qIENFX0NMS19DVFJMICovCi0jZGVmaW5lIENMS19FTkFCTEUJCSgxIDw8IDI0KSAvKiAxOiBvdXRwdXQgbW1jIGNsb2NrICovCi0jZGVmaW5lIENMS19DTEVBUgkJKCgxIDw8IDE5KSB8ICgxIDw8IDE4KSB8ICgxIDw8IDE3KSB8ICgxIDw8IDE2KSkKLSNkZWZpbmUgQ0xLX1NVUF9QQ0xLCQkoKDEgPDwgMTkpIHwgKDEgPDwgMTgpIHwgKDEgPDwgMTcpIHwgKDEgPDwgMTYpKQotI2RlZmluZSBTUlNQVE9fMjU2CQkoKDEgPDwgMTMpIHwgKDAgPDwgMTIpKSAvKiByZXNwIHRpbWVvdXQgKi8KLSNkZWZpbmUgU1JCU1lUT18yOQkJKCgxIDw8IDExKSB8ICgxIDw8IDEwKSB8CVwKLQkJCQkgKDEgPDwgOSkgfCAoMSA8PCA4KSkgLyogcmVzcCBidXN5IHRpbWVvdXQgKi8KLSNkZWZpbmUgU1JXRFRPXzI5CQkoKDEgPDwgNykgfCAoMSA8PCA2KSB8CQlcCi0JCQkJICgxIDw8IDUpIHwgKDEgPDwgNCkpIC8qIHJlYWQvd3JpdGUgdGltZW91dCAqLwotI2RlZmluZSBTQ0NTVE9fMjkJCSgoMSA8PCAzKSB8ICgxIDw8IDIpIHwJCVwKLQkJCQkgKDEgPDwgMSkgfCAoMSA8PCAwKSkgLyogY2NzIHRpbWVvdXQgKi8KLQotLyogQ0VfQlVGX0FDQyAqLwotI2RlZmluZSBCVUZfQUNDX0RNQVdFTgkJKDEgPDwgMjUpCi0jZGVmaW5lIEJVRl9BQ0NfRE1BUkVOCQkoMSA8PCAyNCkKLSNkZWZpbmUgQlVGX0FDQ19CVVNXXzMyCQkoMCA8PCAxNykKLSNkZWZpbmUgQlVGX0FDQ19CVVNXXzE2CQkoMSA8PCAxNykKLSNkZWZpbmUgQlVGX0FDQ19BVFlQCQkoMSA8PCAxNikKLQogLyogQ0VfSU5UICovCiAjZGVmaW5lIElOVF9DQ1NERQkJKDEgPDwgMjkpCiAjZGVmaW5lIElOVF9DTUQxMkRSRQkJKDEgPDwgMjYpCkBAIC0xNjUsMTAgKzE0OSw2IEBACiAJCQkJIFNUUzJfQUMxMkJTWVRPIHwgU1RTMl9SU1BCU1lUTyB8CVwKIAkJCQkgU1RTMl9BQzEyUlNQVE8gfCBTVFMyX1JTUFRPKQogCi0vKiBDRV9WRVJTSU9OICovCi0jZGVmaW5lIFNPRlRfUlNUX09OCQkoMSA8PCAzMSkKLSNkZWZpbmUgU09GVF9SU1RfT0ZGCQkoMCA8PCAzMSkKLQogI2RlZmluZSBDTEtERVZfRU1NQ19EQVRBCTUyMDAwMDAwIC8qIDUyTUh6ICovCiAjZGVmaW5lIENMS0RFVl9NTUNfREFUQQkJMjAwMDAwMDAgLyogMjBNSHogKi8KICNkZWZpbmUgQ0xLREVWX0lOSVQJCTQwMDAwMCAgIC8qIDQwMCBLSHogKi8KQEAgLTE3NiwxOCArMTU2LDIxIEBACiBzdHJ1Y3Qgc2hfbW1jaWZfaG9zdCB7CiAJc3RydWN0IG1tY19ob3N0ICptbWM7CiAJc3RydWN0IG1tY19kYXRhICpkYXRhOwotCXN0cnVjdCBtbWNfY29tbWFuZCAqY21kOwogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkOwogCXN0cnVjdCBjbGsgKmhjbGs7CiAJdW5zaWduZWQgaW50IGNsazsKIAlpbnQgYnVzX3dpZHRoOwotCXUxNiB3YWl0X2ludDsKLQl1MTYgc2RfZXJyb3I7CisJYm9vbCBzZF9lcnJvcjsKIAlsb25nIHRpbWVvdXQ7CiAJdm9pZCBfX2lvbWVtICphZGRyOwotCXdhaXRfcXVldWVfaGVhZF90IGludHJfd2FpdDsKLX07CisJc3RydWN0IGNvbXBsZXRpb24gaW50cl93YWl0OwogCisJLyogRE1BIHN1cHBvcnQgKi8KKwlzdHJ1Y3QgZG1hX2NoYW4JCSpjaGFuX3J4OworCXN0cnVjdCBkbWFfY2hhbgkJKmNoYW5fdHg7CisJc3RydWN0IGNvbXBsZXRpb24JZG1hX2NvbXBsZXRlOworCXVuc2lnbmVkIGludCAgICAgICAgICAgIGRtYV9zZ2xlbjsKK307CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzaF9tbWNpZl9iaXRzZXQoc3RydWN0IHNoX21tY2lmX2hvc3QgKmhvc3QsCiAJCQkJCXVuc2lnbmVkIGludCByZWcsIHUzMiB2YWwpCkBAIC0yMDEsNiArMTg0LDE4OCBAQAogCXdyaXRlbCh+dmFsICYgcmVhZGwoaG9zdC0+YWRkciArIHJlZyksIGhvc3QtPmFkZHIgKyByZWcpOwogfQogCitzdGF0aWMgdm9pZCBtbWNpZl9kbWFfY29tcGxldGUodm9pZCAqYXJnKQoreworCXN0cnVjdCBzaF9tbWNpZl9ob3N0ICpob3N0ID0gYXJnOworCWRldl9kYmcoJmhvc3QtPnBkLT5kZXYsICJDb21tYW5kIGNvbXBsZXRlZFxuIik7CisKKwlpZiAoV0FSTighaG9zdC0+ZGF0YSwgIiVzOiBOVUxMIGRhdGEgaW4gRE1BIGNvbXBsZXRpb24hXG4iLAorCQkgZGV2X25hbWUoJmhvc3QtPnBkLT5kZXYpKSkKKwkJcmV0dXJuOworCisJaWYgKGhvc3QtPmRhdGEtPmZsYWdzICYgTU1DX0RBVEFfUkVBRCkKKwkJZG1hX3VubWFwX3NnKCZob3N0LT5wZC0+ZGV2LCBob3N0LT5kYXRhLT5zZywgaG9zdC0+ZG1hX3NnbGVuLAorCQkJICAgICBETUFfRlJPTV9ERVZJQ0UpOworCWVsc2UKKwkJZG1hX3VubWFwX3NnKCZob3N0LT5wZC0+ZGV2LCBob3N0LT5kYXRhLT5zZywgaG9zdC0+ZG1hX3NnbGVuLAorCQkJICAgICBETUFfVE9fREVWSUNFKTsKKworCWNvbXBsZXRlKCZob3N0LT5kbWFfY29tcGxldGUpOworfQorCitzdGF0aWMgdm9pZCBzaF9tbWNpZl9zdGFydF9kbWFfcngoc3RydWN0IHNoX21tY2lmX2hvc3QgKmhvc3QpCit7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZyA9IGhvc3QtPmRhdGEtPnNnOworCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqZGVzYyA9IE5VTEw7CisJc3RydWN0IGRtYV9jaGFuICpjaGFuID0gaG9zdC0+Y2hhbl9yeDsKKwlkbWFfY29va2llX3QgY29va2llID0gLUVJTlZBTDsKKwlpbnQgcmV0OworCisJcmV0ID0gZG1hX21hcF9zZygmaG9zdC0+cGQtPmRldiwgc2csIGhvc3QtPmRhdGEtPnNnX2xlbiwgRE1BX0ZST01fREVWSUNFKTsKKwlpZiAocmV0ID4gMCkgeworCQlob3N0LT5kbWFfc2dsZW4gPSByZXQ7CisJCWRlc2MgPSBjaGFuLT5kZXZpY2UtPmRldmljZV9wcmVwX3NsYXZlX3NnKGNoYW4sIHNnLCByZXQsCisJCQlETUFfRlJPTV9ERVZJQ0UsIERNQV9QUkVQX0lOVEVSUlVQVCB8IERNQV9DVFJMX0FDSyk7CisJfQorCisJaWYgKGRlc2MpIHsKKwkJZGVzYy0+Y2FsbGJhY2sgPSBtbWNpZl9kbWFfY29tcGxldGU7CisJCWRlc2MtPmNhbGxiYWNrX3BhcmFtID0gaG9zdDsKKwkJY29va2llID0gZGVzYy0+dHhfc3VibWl0KGRlc2MpOworCQlpZiAoY29va2llIDwgMCkgeworCQkJZGVzYyA9IE5VTEw7CisJCQlyZXQgPSBjb29raWU7CisJCX0gZWxzZSB7CisJCQlzaF9tbWNpZl9iaXRzZXQoaG9zdCwgTU1DSUZfQ0VfQlVGX0FDQywgQlVGX0FDQ19ETUFSRU4pOworCQkJY2hhbi0+ZGV2aWNlLT5kZXZpY2VfaXNzdWVfcGVuZGluZyhjaGFuKTsKKwkJfQorCX0KKwlkZXZfZGJnKCZob3N0LT5wZC0+ZGV2LCAiJXMoKTogbWFwcGVkICVkIC0+ICVkLCBjb29raWUgJWRcbiIsCisJCV9fZnVuY19fLCBob3N0LT5kYXRhLT5zZ19sZW4sIHJldCwgY29va2llKTsKKworCWlmICghZGVzYykgeworCQkvKiBETUEgZmFpbGVkLCBmYWxsIGJhY2sgdG8gUElPICovCisJCWlmIChyZXQgPj0gMCkKKwkJCXJldCA9IC1FSU87CisJCWhvc3QtPmNoYW5fcnggPSBOVUxMOworCQlob3N0LT5kbWFfc2dsZW4gPSAwOworCQlkbWFfcmVsZWFzZV9jaGFubmVsKGNoYW4pOworCQkvKiBGcmVlIHRoZSBUeCBjaGFubmVsIHRvbyAqLworCQljaGFuID0gaG9zdC0+Y2hhbl90eDsKKwkJaWYgKGNoYW4pIHsKKwkJCWhvc3QtPmNoYW5fdHggPSBOVUxMOworCQkJZG1hX3JlbGVhc2VfY2hhbm5lbChjaGFuKTsKKwkJfQorCQlkZXZfd2FybigmaG9zdC0+cGQtPmRldiwKKwkJCSAiRE1BIGZhaWxlZDogJWQsIGZhbGxpbmcgYmFjayB0byBQSU9cbiIsIHJldCk7CisJCXNoX21tY2lmX2JpdGNscihob3N0LCBNTUNJRl9DRV9CVUZfQUNDLCBCVUZfQUNDX0RNQVJFTiB8IEJVRl9BQ0NfRE1BV0VOKTsKKwl9CisKKwlkZXZfZGJnKCZob3N0LT5wZC0+ZGV2LCAiJXMoKTogZGVzYyAlcCwgY29va2llICVkLCBzZ1slZF1cbiIsIF9fZnVuY19fLAorCQlkZXNjLCBjb29raWUsIGhvc3QtPmRhdGEtPnNnX2xlbik7Cit9CisKK3N0YXRpYyB2b2lkIHNoX21tY2lmX3N0YXJ0X2RtYV90eChzdHJ1Y3Qgc2hfbW1jaWZfaG9zdCAqaG9zdCkKK3sKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnID0gaG9zdC0+ZGF0YS0+c2c7CisJc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICpkZXNjID0gTlVMTDsKKwlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4gPSBob3N0LT5jaGFuX3R4OworCWRtYV9jb29raWVfdCBjb29raWUgPSAtRUlOVkFMOworCWludCByZXQ7CisKKwlyZXQgPSBkbWFfbWFwX3NnKCZob3N0LT5wZC0+ZGV2LCBzZywgaG9zdC0+ZGF0YS0+c2dfbGVuLCBETUFfVE9fREVWSUNFKTsKKwlpZiAocmV0ID4gMCkgeworCQlob3N0LT5kbWFfc2dsZW4gPSByZXQ7CisJCWRlc2MgPSBjaGFuLT5kZXZpY2UtPmRldmljZV9wcmVwX3NsYXZlX3NnKGNoYW4sIHNnLCByZXQsCisJCQlETUFfVE9fREVWSUNFLCBETUFfUFJFUF9JTlRFUlJVUFQgfCBETUFfQ1RSTF9BQ0spOworCX0KKworCWlmIChkZXNjKSB7CisJCWRlc2MtPmNhbGxiYWNrID0gbW1jaWZfZG1hX2NvbXBsZXRlOworCQlkZXNjLT5jYWxsYmFja19wYXJhbSA9IGhvc3Q7CisJCWNvb2tpZSA9IGRlc2MtPnR4X3N1Ym1pdChkZXNjKTsKKwkJaWYgKGNvb2tpZSA8IDApIHsKKwkJCWRlc2MgPSBOVUxMOworCQkJcmV0ID0gY29va2llOworCQl9IGVsc2UgeworCQkJc2hfbW1jaWZfYml0c2V0KGhvc3QsIE1NQ0lGX0NFX0JVRl9BQ0MsIEJVRl9BQ0NfRE1BV0VOKTsKKwkJCWNoYW4tPmRldmljZS0+ZGV2aWNlX2lzc3VlX3BlbmRpbmcoY2hhbik7CisJCX0KKwl9CisJZGV2X2RiZygmaG9zdC0+cGQtPmRldiwgIiVzKCk6IG1hcHBlZCAlZCAtPiAlZCwgY29va2llICVkXG4iLAorCQlfX2Z1bmNfXywgaG9zdC0+ZGF0YS0+c2dfbGVuLCByZXQsIGNvb2tpZSk7CisKKwlpZiAoIWRlc2MpIHsKKwkJLyogRE1BIGZhaWxlZCwgZmFsbCBiYWNrIHRvIFBJTyAqLworCQlpZiAocmV0ID49IDApCisJCQlyZXQgPSAtRUlPOworCQlob3N0LT5jaGFuX3R4ID0gTlVMTDsKKwkJaG9zdC0+ZG1hX3NnbGVuID0gMDsKKwkJZG1hX3JlbGVhc2VfY2hhbm5lbChjaGFuKTsKKwkJLyogRnJlZSB0aGUgUnggY2hhbm5lbCB0b28gKi8KKwkJY2hhbiA9IGhvc3QtPmNoYW5fcng7CisJCWlmIChjaGFuKSB7CisJCQlob3N0LT5jaGFuX3J4ID0gTlVMTDsKKwkJCWRtYV9yZWxlYXNlX2NoYW5uZWwoY2hhbik7CisJCX0KKwkJZGV2X3dhcm4oJmhvc3QtPnBkLT5kZXYsCisJCQkgIkRNQSBmYWlsZWQ6ICVkLCBmYWxsaW5nIGJhY2sgdG8gUElPXG4iLCByZXQpOworCQlzaF9tbWNpZl9iaXRjbHIoaG9zdCwgTU1DSUZfQ0VfQlVGX0FDQywgQlVGX0FDQ19ETUFSRU4gfCBCVUZfQUNDX0RNQVdFTik7CisJfQorCisJZGV2X2RiZygmaG9zdC0+cGQtPmRldiwgIiVzKCk6IGRlc2MgJXAsIGNvb2tpZSAlZFxuIiwgX19mdW5jX18sCisJCWRlc2MsIGNvb2tpZSk7Cit9CisKK3N0YXRpYyBib29sIHNoX21tY2lmX2ZpbHRlcihzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sIHZvaWQgKmFyZykKK3sKKwlkZXZfZGJnKGNoYW4tPmRldmljZS0+ZGV2LCAiJXM6IHNsYXZlIGRhdGEgJXBcbiIsIF9fZnVuY19fLCBhcmcpOworCWNoYW4tPnByaXZhdGUgPSBhcmc7CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIHNoX21tY2lmX3JlcXVlc3RfZG1hKHN0cnVjdCBzaF9tbWNpZl9ob3N0ICpob3N0LAorCQkJCSBzdHJ1Y3Qgc2hfbW1jaWZfcGxhdF9kYXRhICpwZGF0YSkKK3sKKwlob3N0LT5kbWFfc2dsZW4gPSAwOworCisJLyogV2UgY2FuIG9ubHkgZWl0aGVyIHVzZSBETUEgZm9yIGJvdGggVHggYW5kIFJ4IG9yIG5vdCB1c2UgaXQgYXQgYWxsICovCisJaWYgKHBkYXRhLT5kbWEpIHsKKwkJZG1hX2NhcF9tYXNrX3QgbWFzazsKKworCQlkbWFfY2FwX3plcm8obWFzayk7CisJCWRtYV9jYXBfc2V0KERNQV9TTEFWRSwgbWFzayk7CisKKwkJaG9zdC0+Y2hhbl90eCA9IGRtYV9yZXF1ZXN0X2NoYW5uZWwobWFzaywgc2hfbW1jaWZfZmlsdGVyLAorCQkJCQkJICAgICZwZGF0YS0+ZG1hLT5jaGFuX3ByaXZfdHgpOworCQlkZXZfZGJnKCZob3N0LT5wZC0+ZGV2LCAiJXM6IFRYOiBnb3QgY2hhbm5lbCAlcFxuIiwgX19mdW5jX18sCisJCQlob3N0LT5jaGFuX3R4KTsKKworCQlpZiAoIWhvc3QtPmNoYW5fdHgpCisJCQlyZXR1cm47CisKKwkJaG9zdC0+Y2hhbl9yeCA9IGRtYV9yZXF1ZXN0X2NoYW5uZWwobWFzaywgc2hfbW1jaWZfZmlsdGVyLAorCQkJCQkJICAgICZwZGF0YS0+ZG1hLT5jaGFuX3ByaXZfcngpOworCQlkZXZfZGJnKCZob3N0LT5wZC0+ZGV2LCAiJXM6IFJYOiBnb3QgY2hhbm5lbCAlcFxuIiwgX19mdW5jX18sCisJCQlob3N0LT5jaGFuX3J4KTsKKworCQlpZiAoIWhvc3QtPmNoYW5fcngpIHsKKwkJCWRtYV9yZWxlYXNlX2NoYW5uZWwoaG9zdC0+Y2hhbl90eCk7CisJCQlob3N0LT5jaGFuX3R4ID0gTlVMTDsKKwkJCXJldHVybjsKKwkJfQorCisJCWluaXRfY29tcGxldGlvbigmaG9zdC0+ZG1hX2NvbXBsZXRlKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNoX21tY2lmX3JlbGVhc2VfZG1hKHN0cnVjdCBzaF9tbWNpZl9ob3N0ICpob3N0KQoreworCXNoX21tY2lmX2JpdGNscihob3N0LCBNTUNJRl9DRV9CVUZfQUNDLCBCVUZfQUNDX0RNQVJFTiB8IEJVRl9BQ0NfRE1BV0VOKTsKKwkvKiBEZXNjcmlwdG9ycyBhcmUgZnJlZWQgYXV0b21hdGljYWxseSAqLworCWlmIChob3N0LT5jaGFuX3R4KSB7CisJCXN0cnVjdCBkbWFfY2hhbiAqY2hhbiA9IGhvc3QtPmNoYW5fdHg7CisJCWhvc3QtPmNoYW5fdHggPSBOVUxMOworCQlkbWFfcmVsZWFzZV9jaGFubmVsKGNoYW4pOworCX0KKwlpZiAoaG9zdC0+Y2hhbl9yeCkgeworCQlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4gPSBob3N0LT5jaGFuX3J4OworCQlob3N0LT5jaGFuX3J4ID0gTlVMTDsKKwkJZG1hX3JlbGVhc2VfY2hhbm5lbChjaGFuKTsKKwl9CisKKwlob3N0LT5kbWFfc2dsZW4gPSAwOworfQogCiBzdGF0aWMgdm9pZCBzaF9tbWNpZl9jbG9ja19jb250cm9sKHN0cnVjdCBzaF9tbWNpZl9ob3N0ICpob3N0LCB1bnNpZ25lZCBpbnQgY2xrKQogewpAQCAtMjM5LDEzICs0MDQsMTIgQEAKIAl1MzIgc3RhdGUxLCBzdGF0ZTI7CiAJaW50IHJldCwgdGltZW91dCA9IDEwMDAwMDAwOwogCi0JaG9zdC0+c2RfZXJyb3IgPSAwOwotCWhvc3QtPndhaXRfaW50ID0gMDsKKwlob3N0LT5zZF9lcnJvciA9IGZhbHNlOwogCiAJc3RhdGUxID0gc2hfbW1jaWZfcmVhZGwoaG9zdC0+YWRkciwgTU1DSUZfQ0VfSE9TVF9TVFMxKTsKIAlzdGF0ZTIgPSBzaF9tbWNpZl9yZWFkbChob3N0LT5hZGRyLCBNTUNJRl9DRV9IT1NUX1NUUzIpOwotCXByX2RlYnVnKCIlczogRVJSIEhPU1RfU1RTMSA9ICUwOHhcbiIsIERSSVZFUl9OQU1FLCBzdGF0ZTEpOwotCXByX2RlYnVnKCIlczogRVJSIEhPU1RfU1RTMiA9ICUwOHhcbiIsIERSSVZFUl9OQU1FLCBzdGF0ZTIpOworCWRldl9kYmcoJmhvc3QtPnBkLT5kZXYsICJFUlIgSE9TVF9TVFMxID0gJTA4eFxuIiwgc3RhdGUxKTsKKwlkZXZfZGJnKCZob3N0LT5wZC0+ZGV2LCAiRVJSIEhPU1RfU1RTMiA9ICUwOHhcbiIsIHN0YXRlMik7CiAKIAlpZiAoc3RhdGUxICYgU1RTMV9DTURTRVEpIHsKIAkJc2hfbW1jaWZfYml0c2V0KGhvc3QsIE1NQ0lGX0NFX0NNRF9DVFJMLCBDTURfQ1RSTF9CUkVBSyk7CkBAIC0yNTMsOCArNDE3LDggQEAKIAkJd2hpbGUgKDEpIHsKIAkJCXRpbWVvdXQtLTsKIAkJCWlmICh0aW1lb3V0IDwgMCkgewotCQkJCXByX2VycihEUklWRVJfTkFNRSI6IEZvcmNlZWQgZW5kIG9mICIgXAotCQkJCQkiY29tbWFuZCBzZXF1ZW5jZSB0aW1lb3V0IGVyclxuIik7CisJCQkJZGV2X2VycigmaG9zdC0+cGQtPmRldiwKKwkJCQkJIkZvcmNlZWQgZW5kIG9mIGNvbW1hbmQgc2VxdWVuY2UgdGltZW91dCBlcnJcbiIpOwogCQkJCXJldHVybiAtRUlPOwogCQkJfQogCQkJaWYgKCEoc2hfbW1jaWZfcmVhZGwoaG9zdC0+YWRkciwgTU1DSUZfQ0VfSE9TVF9TVFMxKQpAQCAtMjYzLDE4ICs0MjcsMTggQEAKIAkJCW1kZWxheSgxKTsKIAkJfQogCQlzaF9tbWNpZl9zeW5jX3Jlc2V0KGhvc3QpOwotCQlwcl9kZWJ1ZyhEUklWRVJfTkFNRSI6IEZvcmNlZCBlbmQgb2YgY29tbWFuZCBzZXF1ZW5jZVxuIik7CisJCWRldl9kYmcoJmhvc3QtPnBkLT5kZXYsICJGb3JjZWQgZW5kIG9mIGNvbW1hbmQgc2VxdWVuY2VcbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKIAlpZiAoc3RhdGUyICYgU1RTMl9DUkNfRVJSKSB7Ci0JCXByX2RlYnVnKERSSVZFUl9OQU1FIjogSGFwcGVuZWQgQ1JDIGVycm9yXG4iKTsKKwkJZGV2X2RiZygmaG9zdC0+cGQtPmRldiwgIjogSGFwcGVuZWQgQ1JDIGVycm9yXG4iKTsKIAkJcmV0ID0gLUVJTzsKIAl9IGVsc2UgaWYgKHN0YXRlMiAmIFNUUzJfVElNRU9VVF9FUlIpIHsKLQkJcHJfZGVidWcoRFJJVkVSX05BTUUiOiBIYXBwZW5lZCBUaW1lb3V0IGVycm9yXG4iKTsKKwkJZGV2X2RiZygmaG9zdC0+cGQtPmRldiwgIjogSGFwcGVuZWQgVGltZW91dCBlcnJvclxuIik7CiAJCXJldCA9IC1FVElNRURPVVQ7CiAJfSBlbHNlIHsKLQkJcHJfZGVidWcoRFJJVkVSX05BTUUiOiBIYXBwZW5lZCBFbmQvSW5kZXggZXJyb3JcbiIpOworCQlkZXZfZGJnKCZob3N0LT5wZC0+ZGV2LCAiOiBIYXBwZW5lZCBFbmQvSW5kZXggZXJyb3JcbiIpOwogCQlyZXQgPSAtRUlPOwogCX0KIAlyZXR1cm4gcmV0OwpAQCAtMjg3LDE3ICs0NTEsMTMgQEAKIAlsb25nIHRpbWU7CiAJdTMyIGJsb2Nrc2l6ZSwgaSwgKnAgPSBzZ192aXJ0KGRhdGEtPnNnKTsKIAotCWhvc3QtPndhaXRfaW50ID0gMDsKLQogCS8qIGJ1ZiByZWFkIGVuYWJsZSAqLwogCXNoX21tY2lmX2JpdHNldChob3N0LCBNTUNJRl9DRV9JTlRfTUFTSywgTUFTS19NQlVGUkVOKTsKLQl0aW1lID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoaG9zdC0+aW50cl93YWl0LAotCQkJaG9zdC0+d2FpdF9pbnQgPT0gMSB8fAotCQkJaG9zdC0+c2RfZXJyb3IgPT0gMSwgaG9zdC0+dGltZW91dCk7Ci0JaWYgKGhvc3QtPndhaXRfaW50ICE9IDEgJiYgKHRpbWUgPT0gMCB8fCBob3N0LT5zZF9lcnJvciAhPSAwKSkKKwl0aW1lID0gd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoJmhvc3QtPmludHJfd2FpdCwKKwkJCWhvc3QtPnRpbWVvdXQpOworCWlmICh0aW1lIDw9IDAgfHwgaG9zdC0+c2RfZXJyb3IpCiAJCXJldHVybiBzaF9tbWNpZl9lcnJvcl9tYW5hZ2UoaG9zdCk7CiAKLQlob3N0LT53YWl0X2ludCA9IDA7CiAJYmxvY2tzaXplID0gKEJMT0NLX1NJWkVfTUFTSyAmCiAJCQlzaF9tbWNpZl9yZWFkbChob3N0LT5hZGRyLCBNTUNJRl9DRV9CTE9DS19TRVQpKSArIDM7CiAJZm9yIChpID0gMDsgaSA8IGJsb2Nrc2l6ZSAvIDQ7IGkrKykKQEAgLTMwNSwxMyArNDY1LDExIEBACiAKIAkvKiBidWZmZXIgcmVhZCBlbmQgKi8KIAlzaF9tbWNpZl9iaXRzZXQoaG9zdCwgTU1DSUZfQ0VfSU5UX01BU0ssIE1BU0tfTUJVRlJFKTsKLQl0aW1lID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoaG9zdC0+aW50cl93YWl0LAotCQkJaG9zdC0+d2FpdF9pbnQgPT0gMSB8fAotCQkJaG9zdC0+c2RfZXJyb3IgPT0gMSwgaG9zdC0+dGltZW91dCk7Ci0JaWYgKGhvc3QtPndhaXRfaW50ICE9IDEgJiYgKHRpbWUgPT0gMCB8fCBob3N0LT5zZF9lcnJvciAhPSAwKSkKKwl0aW1lID0gd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoJmhvc3QtPmludHJfd2FpdCwKKwkJCWhvc3QtPnRpbWVvdXQpOworCWlmICh0aW1lIDw9IDAgfHwgaG9zdC0+c2RfZXJyb3IpCiAJCXJldHVybiBzaF9tbWNpZl9lcnJvcl9tYW5hZ2UoaG9zdCk7CiAKLQlob3N0LT53YWl0X2ludCA9IDA7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMyNiwxOSArNDg0LDE1IEBACiAJCQkJCQkgICAgIE1NQ0lGX0NFX0JMT0NLX1NFVCk7CiAJZm9yIChqID0gMDsgaiA8IGRhdGEtPnNnX2xlbjsgaisrKSB7CiAJCXAgPSBzZ192aXJ0KGRhdGEtPnNnKTsKLQkJaG9zdC0+d2FpdF9pbnQgPSAwOwogCQlmb3IgKHNlYyA9IDA7IHNlYyA8IGRhdGEtPnNnLT5sZW5ndGggLyBibG9ja3NpemU7IHNlYysrKSB7CiAJCQlzaF9tbWNpZl9iaXRzZXQoaG9zdCwgTU1DSUZfQ0VfSU5UX01BU0ssIE1BU0tfTUJVRlJFTik7CiAJCQkvKiBidWYgcmVhZCBlbmFibGUgKi8KLQkJCXRpbWUgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChob3N0LT5pbnRyX3dhaXQsCi0JCQkJaG9zdC0+d2FpdF9pbnQgPT0gMSB8fAotCQkJCWhvc3QtPnNkX2Vycm9yID09IDEsIGhvc3QtPnRpbWVvdXQpOworCQkJdGltZSA9IHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZV90aW1lb3V0KCZob3N0LT5pbnRyX3dhaXQsCisJCQkJaG9zdC0+dGltZW91dCk7CiAKLQkJCWlmIChob3N0LT53YWl0X2ludCAhPSAxICYmCi0JCQkgICAgKHRpbWUgPT0gMCB8fCBob3N0LT5zZF9lcnJvciAhPSAwKSkKKwkJCWlmICh0aW1lIDw9IDAgfHwgaG9zdC0+c2RfZXJyb3IpCiAJCQkJcmV0dXJuIHNoX21tY2lmX2Vycm9yX21hbmFnZShob3N0KTsKIAotCQkJaG9zdC0+d2FpdF9pbnQgPSAwOwogCQkJZm9yIChpID0gMDsgaSA8IGJsb2Nrc2l6ZSAvIDQ7IGkrKykKIAkJCQkqcCsrID0gc2hfbW1jaWZfcmVhZGwoaG9zdC0+YWRkciwKIAkJCQkJCSAgICAgIE1NQ0lGX0NFX0RBVEEpOwpAQCAtMzU2LDE3ICs1MTAsMTQgQEAKIAlsb25nIHRpbWU7CiAJdTMyIGJsb2Nrc2l6ZSwgaSwgKnAgPSBzZ192aXJ0KGRhdGEtPnNnKTsKIAotCWhvc3QtPndhaXRfaW50ID0gMDsKIAlzaF9tbWNpZl9iaXRzZXQoaG9zdCwgTU1DSUZfQ0VfSU5UX01BU0ssIE1BU0tfTUJVRldFTik7CiAKIAkvKiBidWYgd3JpdGUgZW5hYmxlICovCi0JdGltZSA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KGhvc3QtPmludHJfd2FpdCwKLQkJCWhvc3QtPndhaXRfaW50ID09IDEgfHwKLQkJCWhvc3QtPnNkX2Vycm9yID09IDEsIGhvc3QtPnRpbWVvdXQpOwotCWlmIChob3N0LT53YWl0X2ludCAhPSAxICYmICh0aW1lID09IDAgfHwgaG9zdC0+c2RfZXJyb3IgIT0gMCkpCisJdGltZSA9IHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZV90aW1lb3V0KCZob3N0LT5pbnRyX3dhaXQsCisJCQlob3N0LT50aW1lb3V0KTsKKwlpZiAodGltZSA8PSAwIHx8IGhvc3QtPnNkX2Vycm9yKQogCQlyZXR1cm4gc2hfbW1jaWZfZXJyb3JfbWFuYWdlKGhvc3QpOwogCi0JaG9zdC0+d2FpdF9pbnQgPSAwOwogCWJsb2Nrc2l6ZSA9IChCTE9DS19TSVpFX01BU0sgJgogCQkJc2hfbW1jaWZfcmVhZGwoaG9zdC0+YWRkciwgTU1DSUZfQ0VfQkxPQ0tfU0VUKSkgKyAzOwogCWZvciAoaSA9IDA7IGkgPCBibG9ja3NpemUgLyA0OyBpKyspCkBAIC0zNzUsMTMgKzUyNiwxMSBAQAogCS8qIGJ1ZmZlciB3cml0ZSBlbmQgKi8KIAlzaF9tbWNpZl9iaXRzZXQoaG9zdCwgTU1DSUZfQ0VfSU5UX01BU0ssIE1BU0tfTURUUkFORSk7CiAKLQl0aW1lID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoaG9zdC0+aW50cl93YWl0LAotCQkJaG9zdC0+d2FpdF9pbnQgPT0gMSB8fAotCQkJaG9zdC0+c2RfZXJyb3IgPT0gMSwgaG9zdC0+dGltZW91dCk7Ci0JaWYgKGhvc3QtPndhaXRfaW50ICE9IDEgJiYgKHRpbWUgPT0gMCB8fCBob3N0LT5zZF9lcnJvciAhPSAwKSkKKwl0aW1lID0gd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoJmhvc3QtPmludHJfd2FpdCwKKwkJCWhvc3QtPnRpbWVvdXQpOworCWlmICh0aW1lIDw9IDAgfHwgaG9zdC0+c2RfZXJyb3IpCiAJCXJldHVybiBzaF9tbWNpZl9lcnJvcl9tYW5hZ2UoaG9zdCk7CiAKLQlob3N0LT53YWl0X2ludCA9IDA7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM5NywxOSArNTQ2LDE1IEBACiAKIAlmb3IgKGogPSAwOyBqIDwgZGF0YS0+c2dfbGVuOyBqKyspIHsKIAkJcCA9IHNnX3ZpcnQoZGF0YS0+c2cpOwotCQlob3N0LT53YWl0X2ludCA9IDA7CiAJCWZvciAoc2VjID0gMDsgc2VjIDwgZGF0YS0+c2ctPmxlbmd0aCAvIGJsb2Nrc2l6ZTsgc2VjKyspIHsKIAkJCXNoX21tY2lmX2JpdHNldChob3N0LCBNTUNJRl9DRV9JTlRfTUFTSywgTUFTS19NQlVGV0VOKTsKIAkJCS8qIGJ1ZiB3cml0ZSBlbmFibGUqLwotCQkJdGltZSA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KGhvc3QtPmludHJfd2FpdCwKLQkJCQlob3N0LT53YWl0X2ludCA9PSAxIHx8Ci0JCQkJaG9zdC0+c2RfZXJyb3IgPT0gMSwgaG9zdC0+dGltZW91dCk7CisJCQl0aW1lID0gd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoJmhvc3QtPmludHJfd2FpdCwKKwkJCQlob3N0LT50aW1lb3V0KTsKIAotCQkJaWYgKGhvc3QtPndhaXRfaW50ICE9IDEgJiYKLQkJCSAgICAodGltZSA9PSAwIHx8IGhvc3QtPnNkX2Vycm9yICE9IDApKQorCQkJaWYgKHRpbWUgPD0gMCB8fCBob3N0LT5zZF9lcnJvcikKIAkJCQlyZXR1cm4gc2hfbW1jaWZfZXJyb3JfbWFuYWdlKGhvc3QpOwogCi0JCQlob3N0LT53YWl0X2ludCA9IDA7CiAJCQlmb3IgKGkgPSAwOyBpIDwgYmxvY2tzaXplIC8gNDsgaSsrKQogCQkJCXNoX21tY2lmX3dyaXRlbChob3N0LT5hZGRyLAogCQkJCQkJTU1DSUZfQ0VfREFUQSwgKnArKyk7CkBAIC00NTcsNyArNjAyLDcgQEAKIAkJdG1wIHw9IENNRF9TRVRfUlRZUF8xN0I7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXByX2VycihEUklWRVJfTkFNRSI6IE5vdCBzdXBwb3J0IHR5cGUgcmVzcG9uc2UuXG4iKTsKKwkJZGV2X2VycigmaG9zdC0+cGQtPmRldiwgIlVuc3VwcG9ydGVkIHJlc3BvbnNlIHR5cGUuXG4iKTsKIAkJYnJlYWs7CiAJfQogCXN3aXRjaCAob3BjKSB7CkBAIC00ODUsNyArNjMwLDcgQEAKIAkJCXRtcCB8PSBDTURfU0VUX0RBVFdfODsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJcHJfZXJyKERSSVZFUl9OQU1FIjogTm90IHN1cHBvcnQgYnVzIHdpZHRoLlxuIik7CisJCQlkZXZfZXJyKCZob3N0LT5wZC0+ZGV2LCAiVW5zdXBwb3J0ZWQgYnVzIHdpZHRoLlxuIik7CiAJCQlicmVhazsKIAkJfQogCX0KQEAgLTUxMywxMCArNjU4LDEwIEBACiAJcmV0dXJuIG9wYyA9ICgob3BjIDw8IDI0KSB8IHRtcCk7CiB9CiAKLXN0YXRpYyB1MzIgc2hfbW1jaWZfZGF0YV90cmFucyhzdHJ1Y3Qgc2hfbW1jaWZfaG9zdCAqaG9zdCwKK3N0YXRpYyBpbnQgc2hfbW1jaWZfZGF0YV90cmFucyhzdHJ1Y3Qgc2hfbW1jaWZfaG9zdCAqaG9zdCwKIAkJCQlzdHJ1Y3QgbW1jX3JlcXVlc3QgKm1ycSwgdTMyIG9wYykKIHsKLQl1MzIgcmV0OworCWludCByZXQ7CiAKIAlzd2l0Y2ggKG9wYykgewogCWNhc2UgTU1DX1JFQURfTVVMVElQTEVfQkxPQ0s6CkBAIC01MzMsNyArNjc4LDcgQEAKIAkJcmV0ID0gc2hfbW1jaWZfc2luZ2xlX3JlYWQoaG9zdCwgbXJxKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcHJfZXJyKERSSVZFUl9OQU1FIjogTk9UIFNVUFBPUlQgQ01EID0gZCclMDhkXG4iLCBvcGMpOworCQlkZXZfZXJyKCZob3N0LT5wZC0+ZGV2LCAiVU5TVVBQT1JURUQgQ01EID0gZCclMDhkXG4iLCBvcGMpOwogCQlyZXQgPSAtRUlOVkFMOwogCQlicmVhazsKIAl9CkBAIC01NDcsOCArNjkyLDYgQEAKIAlpbnQgcmV0ID0gMCwgbWFzayA9IDA7CiAJdTMyIG9wYyA9IGNtZC0+b3Bjb2RlOwogCi0JaG9zdC0+Y21kID0gY21kOwotCiAJc3dpdGNoIChvcGMpIHsKIAkvKiByZXNwb25zIGJ1c3kgY2hlY2sgKi8KIAljYXNlIE1NQ19TV0lUQ0g6CkBAIC01NzksMTMgKzcyMiwxMiBAQAogCXNoX21tY2lmX3dyaXRlbChob3N0LT5hZGRyLCBNTUNJRl9DRV9JTlRfTUFTSywgbWFzayk7CiAJLyogc2V0IGFyZyAqLwogCXNoX21tY2lmX3dyaXRlbChob3N0LT5hZGRyLCBNTUNJRl9DRV9BUkcsIGNtZC0+YXJnKTsKLQlob3N0LT53YWl0X2ludCA9IDA7CiAJLyogc2V0IGNtZCAqLwogCXNoX21tY2lmX3dyaXRlbChob3N0LT5hZGRyLCBNTUNJRl9DRV9DTURfU0VULCBvcGMpOwogCi0JdGltZSA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KGhvc3QtPmludHJfd2FpdCwKLQkJaG9zdC0+d2FpdF9pbnQgPT0gMSB8fCBob3N0LT5zZF9lcnJvciA9PSAxLCBob3N0LT50aW1lb3V0KTsKLQlpZiAoaG9zdC0+d2FpdF9pbnQgIT0gMSAmJiB0aW1lID09IDApIHsKKwl0aW1lID0gd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoJmhvc3QtPmludHJfd2FpdCwKKwkJaG9zdC0+dGltZW91dCk7CisJaWYgKHRpbWUgPD0gMCkgewogCQljbWQtPmVycm9yID0gc2hfbW1jaWZfZXJyb3JfbWFuYWdlKGhvc3QpOwogCQlyZXR1cm47CiAJfQpAQCAtNTk3LDI2ICs3MzksMzQgQEAKIAkJCWNtZC0+ZXJyb3IgPSAtRVRJTUVET1VUOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlwcl9kZWJ1ZygiJXM6IENtZChkJyVkKSBlcnJcbiIsCi0JCQkJCURSSVZFUl9OQU1FLCBjbWQtPm9wY29kZSk7CisJCQlkZXZfZGJnKCZob3N0LT5wZC0+ZGV2LCAiQ21kKGQnJWQpIGVyclxuIiwKKwkJCQkJY21kLT5vcGNvZGUpOwogCQkJY21kLT5lcnJvciA9IHNoX21tY2lmX2Vycm9yX21hbmFnZShob3N0KTsKIAkJCWJyZWFrOwogCQl9Ci0JCWhvc3QtPnNkX2Vycm9yID0gMDsKLQkJaG9zdC0+d2FpdF9pbnQgPSAwOworCQlob3N0LT5zZF9lcnJvciA9IGZhbHNlOwogCQlyZXR1cm47CiAJfQogCWlmICghKGNtZC0+ZmxhZ3MgJiBNTUNfUlNQX1BSRVNFTlQpKSB7Ci0JCWNtZC0+ZXJyb3IgPSByZXQ7Ci0JCWhvc3QtPndhaXRfaW50ID0gMDsKKwkJY21kLT5lcnJvciA9IDA7CiAJCXJldHVybjsKIAl9Ci0JaWYgKGhvc3QtPndhaXRfaW50ID09IDEpIHsKLQkJc2hfbW1jaWZfZ2V0X3Jlc3BvbnNlKGhvc3QsIGNtZCk7Ci0JCWhvc3QtPndhaXRfaW50ID0gMDsKLQl9CisJc2hfbW1jaWZfZ2V0X3Jlc3BvbnNlKGhvc3QsIGNtZCk7CiAJaWYgKGhvc3QtPmRhdGEpIHsKLQkJcmV0ID0gc2hfbW1jaWZfZGF0YV90cmFucyhob3N0LCBtcnEsIGNtZC0+b3Bjb2RlKTsKKwkJaWYgKCFob3N0LT5kbWFfc2dsZW4pIHsKKwkJCXJldCA9IHNoX21tY2lmX2RhdGFfdHJhbnMoaG9zdCwgbXJxLCBjbWQtPm9wY29kZSk7CisJCX0gZWxzZSB7CisJCQlsb25nIHRpbWUgPQorCQkJCXdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZV90aW1lb3V0KCZob3N0LT5kbWFfY29tcGxldGUsCisJCQkJCQkJCQkgIGhvc3QtPnRpbWVvdXQpOworCQkJaWYgKCF0aW1lKQorCQkJCXJldCA9IC1FVElNRURPVVQ7CisJCQllbHNlIGlmICh0aW1lIDwgMCkKKwkJCQlyZXQgPSB0aW1lOworCQkJc2hfbW1jaWZfYml0Y2xyKGhvc3QsIE1NQ0lGX0NFX0JVRl9BQ0MsCisJCQkJCUJVRl9BQ0NfRE1BUkVOIHwgQlVGX0FDQ19ETUFXRU4pOworCQkJaG9zdC0+ZG1hX3NnbGVuID0gMDsKKwkJfQogCQlpZiAocmV0IDwgMCkKIAkJCW1ycS0+ZGF0YS0+Ynl0ZXNfeGZlcmVkID0gMDsKIAkJZWxzZQpAQCAtNjM2LDIwICs3ODYsMTggQEAKIAllbHNlIGlmIChtcnEtPmNtZC0+b3Bjb2RlID09IE1NQ19XUklURV9NVUxUSVBMRV9CTE9DSykKIAkJc2hfbW1jaWZfYml0c2V0KGhvc3QsIE1NQ0lGX0NFX0lOVF9NQVNLLCBNQVNLX01DTUQxMlJCRSk7CiAJZWxzZSB7Ci0JCXByX2VycihEUklWRVJfTkFNRSI6IG5vdCBzdXBwb3J0IHN0b3AgY21kXG4iKTsKKwkJZGV2X2VycigmaG9zdC0+cGQtPmRldiwgInVuc3VwcG9ydGVkIHN0b3AgY21kXG4iKTsKIAkJY21kLT5lcnJvciA9IHNoX21tY2lmX2Vycm9yX21hbmFnZShob3N0KTsKIAkJcmV0dXJuOwogCX0KIAotCXRpbWUgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChob3N0LT5pbnRyX3dhaXQsCi0JCQlob3N0LT53YWl0X2ludCA9PSAxIHx8Ci0JCQlob3N0LT5zZF9lcnJvciA9PSAxLCBob3N0LT50aW1lb3V0KTsKLQlpZiAoaG9zdC0+d2FpdF9pbnQgIT0gMSAmJiAodGltZSA9PSAwIHx8IGhvc3QtPnNkX2Vycm9yICE9IDApKSB7CisJdGltZSA9IHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZV90aW1lb3V0KCZob3N0LT5pbnRyX3dhaXQsCisJCQlob3N0LT50aW1lb3V0KTsKKwlpZiAodGltZSA8PSAwIHx8IGhvc3QtPnNkX2Vycm9yKSB7CiAJCWNtZC0+ZXJyb3IgPSBzaF9tbWNpZl9lcnJvcl9tYW5hZ2UoaG9zdCk7CiAJCXJldHVybjsKIAl9CiAJc2hfbW1jaWZfZ2V0X2NtZDEycmVzcG9uc2UoaG9zdCwgY21kKTsKLQlob3N0LT53YWl0X2ludCA9IDA7CiAJY21kLT5lcnJvciA9IDA7CiB9CiAKQEAgLTY3Niw2ICs4MjQsMTUgQEAKIAkJYnJlYWs7CiAJfQogCWhvc3QtPmRhdGEgPSBtcnEtPmRhdGE7CisJaWYgKG1ycS0+ZGF0YSkgeworCQlpZiAobXJxLT5kYXRhLT5mbGFncyAmIE1NQ19EQVRBX1JFQUQpIHsKKwkJCWlmIChob3N0LT5jaGFuX3J4KQorCQkJCXNoX21tY2lmX3N0YXJ0X2RtYV9yeChob3N0KTsKKwkJfSBlbHNlIHsKKwkJCWlmIChob3N0LT5jaGFuX3R4KQorCQkJCXNoX21tY2lmX3N0YXJ0X2RtYV90eChob3N0KTsKKwkJfQorCX0KIAlzaF9tbWNpZl9zdGFydF9jbWQoaG9zdCwgbXJxLCBtcnEtPmNtZCk7CiAJaG9zdC0+ZGF0YSA9IE5VTEw7CiAKQEAgLTczNSw3ICs4OTIsNyBAQAogc3RhdGljIGlycXJldHVybl90IHNoX21tY2lmX2ludHIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewogCXN0cnVjdCBzaF9tbWNpZl9ob3N0ICpob3N0ID0gZGV2X2lkOwotCXUzMiBzdGF0ZSA9IDA7CisJdTMyIHN0YXRlOwogCWludCBlcnIgPSAwOwogCiAJc3RhdGUgPSBzaF9tbWNpZl9yZWFkbChob3N0LT5hZGRyLCBNTUNJRl9DRV9JTlQpOwpAQCAtNzc0LDE3ICs5MzEsMTkgQEAKIAkJc2hfbW1jaWZfYml0Y2xyKGhvc3QsIE1NQ0lGX0NFX0lOVF9NQVNLLCBzdGF0ZSk7CiAJCWVyciA9IDE7CiAJfSBlbHNlIHsKLQkJcHJfZGVidWcoIiVzOiBOb3Qgc3VwcG9ydCBpbnRcbiIsIERSSVZFUl9OQU1FKTsKKwkJZGV2X2RiZygmaG9zdC0+cGQtPmRldiwgIk5vdCBzdXBwb3J0IGludFxuIik7CiAJCXNoX21tY2lmX3dyaXRlbChob3N0LT5hZGRyLCBNTUNJRl9DRV9JTlQsIH5zdGF0ZSk7CiAJCXNoX21tY2lmX2JpdGNscihob3N0LCBNTUNJRl9DRV9JTlRfTUFTSywgc3RhdGUpOwogCQllcnIgPSAxOwogCX0KIAlpZiAoZXJyKSB7Ci0JCWhvc3QtPnNkX2Vycm9yID0gMTsKLQkJcHJfZGVidWcoIiVzOiBpbnQgZXJyIHN0YXRlID0gJTA4eFxuIiwgRFJJVkVSX05BTUUsIHN0YXRlKTsKKwkJaG9zdC0+c2RfZXJyb3IgPSB0cnVlOworCQlkZXZfZGJnKCZob3N0LT5wZC0+ZGV2LCAiaW50IGVyciBzdGF0ZSA9ICUwOHhcbiIsIHN0YXRlKTsKIAl9Ci0JaG9zdC0+d2FpdF9pbnQgPSAxOwotCXdha2VfdXAoJmhvc3QtPmludHJfd2FpdCk7CisJaWYgKHN0YXRlICYgfihJTlRfQ01EMTJSQkUgfCBJTlRfQ01EMTJDUkUpKQorCQljb21wbGV0ZSgmaG9zdC0+aW50cl93YWl0KTsKKwllbHNlCisJCWRldl9kYmcoJmhvc3QtPnBkLT5kZXYsICJVbmV4cGVjdGVkIElSUSAweCV4XG4iLCBzdGF0ZSk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CkBAIC03OTMsOCArOTUyLDggQEAKIHsKIAlpbnQgcmV0ID0gMCwgaXJxWzJdOwogCXN0cnVjdCBtbWNfaG9zdCAqbW1jOwotCXN0cnVjdCBzaF9tbWNpZl9ob3N0ICpob3N0ID0gTlVMTDsKLQlzdHJ1Y3Qgc2hfbW1jaWZfcGxhdF9kYXRhICpwZCA9IE5VTEw7CisJc3RydWN0IHNoX21tY2lmX2hvc3QgKmhvc3Q7CisJc3RydWN0IHNoX21tY2lmX3BsYXRfZGF0YSAqcGQ7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJdm9pZCBfX2lvbWVtICpyZWc7CiAJY2hhciBjbGtfbmFtZVs4XTsKQEAgLTgwMiw3ICs5NjEsNyBAQAogCWlycVswXSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CiAJaXJxWzFdID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAxKTsKIAlpZiAoaXJxWzBdIDwgMCB8fCBpcnFbMV0gPCAwKSB7Ci0JCXByX2VycihEUklWRVJfTkFNRSI6IEdldCBpcnEgZXJyb3JcbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJHZXQgaXJxIGVycm9yXG4iKTsKIAkJcmV0dXJuIC1FTlhJTzsKIAl9CiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKQEAgLTgxNSw3ICs5NzQsNyBAQAogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJpb3JlbWFwIGVycm9yLlxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQlwZCA9IChzdHJ1Y3Qgc2hfbW1jaWZfcGxhdF9kYXRhICopKHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhKTsKKwlwZCA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCWlmICghcGQpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAic2hfbW1jaWYgcGxhdCBkYXRhIGVycm9yLlxuIik7CiAJCXJldCA9IC1FTlhJTzsKQEAgLTg0Miw3ICsxMDAxLDcgQEAKIAlob3N0LT5jbGsgPSBjbGtfZ2V0X3JhdGUoaG9zdC0+aGNsayk7CiAJaG9zdC0+cGQgPSBwZGV2OwogCi0JaW5pdF93YWl0cXVldWVfaGVhZCgmaG9zdC0+aW50cl93YWl0KTsKKwlpbml0X2NvbXBsZXRpb24oJmhvc3QtPmludHJfd2FpdCk7CiAKIAltbWMtPm9wcyA9ICZzaF9tbWNpZl9vcHM7CiAJbW1jLT5mX21heCA9IGhvc3QtPmNsazsKQEAgLTg1OCwzMyArMTAxNywzNyBAQAogCW1tYy0+Y2FwcyA9IE1NQ19DQVBfTU1DX0hJR0hTUEVFRDsKIAlpZiAocGQtPmNhcHMpCiAJCW1tYy0+Y2FwcyB8PSBwZC0+Y2FwczsKLQltbWMtPm1heF9zZWdzID0gMTI4OworCW1tYy0+bWF4X3NlZ3MgPSAzMjsKIAltbWMtPm1heF9ibGtfc2l6ZSA9IDUxMjsKLQltbWMtPm1heF9ibGtfY291bnQgPSA2NTUzNTsKLQltbWMtPm1heF9yZXFfc2l6ZSA9IG1tYy0+bWF4X2Jsa19zaXplICogbW1jLT5tYXhfYmxrX2NvdW50OworCW1tYy0+bWF4X3JlcV9zaXplID0gUEFHRV9DQUNIRV9TSVpFICogbW1jLT5tYXhfc2VnczsKKwltbWMtPm1heF9ibGtfY291bnQgPSBtbWMtPm1heF9yZXFfc2l6ZSAvIG1tYy0+bWF4X2Jsa19zaXplOwogCW1tYy0+bWF4X3NlZ19zaXplID0gbW1jLT5tYXhfcmVxX3NpemU7CiAKIAlzaF9tbWNpZl9zeW5jX3Jlc2V0KGhvc3QpOwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGhvc3QpOworCisJLyogU2VlIGlmIHdlIGFsc28gZ2V0IERNQSAqLworCXNoX21tY2lmX3JlcXVlc3RfZG1hKGhvc3QsIHBkKTsKKwogCW1tY19hZGRfaG9zdChtbWMpOwogCiAJcmV0ID0gcmVxdWVzdF9pcnEoaXJxWzBdLCBzaF9tbWNpZl9pbnRyLCAwLCAic2hfbW1jOmVycm9yIiwgaG9zdCk7CiAJaWYgKHJldCkgewotCQlwcl9lcnIoRFJJVkVSX05BTUUiOiByZXF1ZXN0X2lycSBlcnJvciAoc2hfbW1jOmVycm9yKVxuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInJlcXVlc3RfaXJxIGVycm9yIChzaF9tbWM6ZXJyb3IpXG4iKTsKIAkJZ290byBjbGVhbl91cDI7CiAJfQogCXJldCA9IHJlcXVlc3RfaXJxKGlycVsxXSwgc2hfbW1jaWZfaW50ciwgMCwgInNoX21tYzppbnQiLCBob3N0KTsKIAlpZiAocmV0KSB7CiAJCWZyZWVfaXJxKGlycVswXSwgaG9zdCk7Ci0JCXByX2VycihEUklWRVJfTkFNRSI6IHJlcXVlc3RfaXJxIGVycm9yIChzaF9tbWM6aW50KVxuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInJlcXVlc3RfaXJxIGVycm9yIChzaF9tbWM6aW50KVxuIik7CiAJCWdvdG8gY2xlYW5fdXAyOwogCX0KIAogCXNoX21tY2lmX3dyaXRlbChob3N0LT5hZGRyLCBNTUNJRl9DRV9JTlRfTUFTSywgTUFTS19BTEwpOwogCXNoX21tY2lmX2RldGVjdChob3N0LT5tbWMpOwogCi0JcHJfaW5mbygiJXM6IGRyaXZlciB2ZXJzaW9uICVzXG4iLCBEUklWRVJfTkFNRSwgRFJJVkVSX1ZFUlNJT04pOwotCXByX2RlYnVnKCIlczogY2hpcCB2ZXIgSCclMDR4XG4iLCBEUklWRVJfTkFNRSwKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiZHJpdmVyIHZlcnNpb24gJXNcbiIsIERSSVZFUl9WRVJTSU9OKTsKKwlkZXZfZGJnKCZwZGV2LT5kZXYsICJjaGlwIHZlciBIJyUwNHhcbiIsCiAJCXNoX21tY2lmX3JlYWRsKGhvc3QtPmFkZHIsIE1NQ0lGX0NFX1ZFUlNJT04pICYgMHgwMDAwZmZmZik7CiAJcmV0dXJuIHJldDsKIApAQCAtOTAzLDIwICsxMDY2LDIyIEBACiAJc3RydWN0IHNoX21tY2lmX2hvc3QgKmhvc3QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlpbnQgaXJxWzJdOwogCisJbW1jX3JlbW92ZV9ob3N0KGhvc3QtPm1tYyk7CisJc2hfbW1jaWZfcmVsZWFzZV9kbWEoaG9zdCk7CisKKwlpZiAoaG9zdC0+YWRkcikKKwkJaW91bm1hcChob3N0LT5hZGRyKTsKKwogCXNoX21tY2lmX3dyaXRlbChob3N0LT5hZGRyLCBNTUNJRl9DRV9JTlRfTUFTSywgTUFTS19BTEwpOwogCiAJaXJxWzBdID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKIAlpcnFbMV0gPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDEpOwogCi0JaWYgKGhvc3QtPmFkZHIpCi0JCWlvdW5tYXAoaG9zdC0+YWRkcik7Ci0KLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKLQltbWNfcmVtb3ZlX2hvc3QoaG9zdC0+bW1jKTsKLQogCWZyZWVfaXJxKGlycVswXSwgaG9zdCk7CiAJZnJlZV9pcnEoaXJxWzFdLCBob3N0KTsKIAorCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCiAJY2xrX2Rpc2FibGUoaG9zdC0+aGNsayk7CiAJbW1jX2ZyZWVfaG9zdChob3N0LT5tbWMpOwogCkBAIC05NDcsNSArMTExMiw1IEBACiAKIE1PRFVMRV9ERVNDUklQVElPTigiU3VwZXJIIG9uLWNoaXAgTU1DL2VNTUMgaW50ZXJmYWNlIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FMSUFTKERSSVZFUl9OQU1FKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06IiBEUklWRVJfTkFNRSk7CiBNT0RVTEVfQVVUSE9SKCJZdXN1a2UgR29kYSA8eXVzdWtlLmdvZGEuc3hAcmVuZXNhcy5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tdGRjaGFyLmMgYi9kcml2ZXJzL210ZC9tdGRjaGFyLmMKaW5kZXggNDc1OWQ4Mi4uZjUxMWRkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbXRkY2hhci5jCisrKyBiL2RyaXZlcnMvbXRkL210ZGNoYXIuYwpAQCAtMTIwMSw3ICsxMjAxLDcgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCBjbGVhbnVwX210ZGNoYXIodm9pZCkKIHsKIAl1bnJlZ2lzdGVyX210ZF91c2VyKCZtdGRjaGFyX25vdGlmaWVyKTsKLQltbnRwdXQobXRkX2lub2RlX21udCk7CisJbW50cHV0X2xvbmcobXRkX2lub2RlX21udCk7CiAJdW5yZWdpc3Rlcl9maWxlc3lzdGVtKCZtdGRfaW5vZGVmc190eXBlKTsKIAlfX3VucmVnaXN0ZXJfY2hyZGV2KE1URF9DSEFSX01BSk9SLCAwLCAxIDw8IE1JTk9SQklUUywgIm10ZCIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvb25lbmFuZC9vbWFwMi5jIGIvZHJpdmVycy9tdGQvb25lbmFuZC9vbWFwMi5jCmluZGV4IDlmMzIyZjEuLmQwODk0Y2E3IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9vbmVuYW5kL29tYXAyLmMKKysrIGIvZHJpdmVycy9tdGQvb25lbmFuZC9vbWFwMi5jCkBAIC03MjEsNiArNzIxLDkgQEAKIAljYXNlIDM6CiAJCWMtPmZyZXEgPSA4MzsKIAkJYnJlYWs7CisJY2FzZSA0OgorCQljLT5mcmVxID0gMTA0OworCQlicmVhazsKIAl9CiAKICNpZmRlZiBDT05GSUdfTVREX1BBUlRJVElPTlMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzNjNTAxLmMgYi9kcml2ZXJzL25ldC8zYzUwMS5jCmluZGV4IDE3NzZhYjYuLjllMWMwM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzNjNTAxLmMKKysrIGIvZHJpdmVycy9uZXQvM2M1MDEuYwpAQCAtMTU4LDggKzE1OCw4IEBACiBzdHJ1Y3QgbmV0X2RldmljZSAqIF9faW5pdCBlbDFfcHJvYmUoaW50IHVuaXQpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3QgbmV0X2xvY2FsKSk7Ci0Jc3RhdGljIHVuc2lnbmVkIHBvcnRzW10gPSB7IDB4MjgwLCAweDMwMCwgMH07Ci0JdW5zaWduZWQgKnBvcnQ7CisJc3RhdGljIGNvbnN0IHVuc2lnbmVkIHBvcnRzW10gPSB7IDB4MjgwLCAweDMwMCwgMH07CisJY29uc3QgdW5zaWduZWQgKnBvcnQ7CiAJaW50IGVyciA9IDA7CiAKIAlpZiAoIWRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzNjNTAzLmMgYi9kcml2ZXJzL25ldC8zYzUwMy5jCmluZGV4IDQ3NzdhMWMuLmQ4NGY2ZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzNjNTAzLmMKKysrIGIvZHJpdmVycy9uZXQvM2M1MDMuYwpAQCAtMzkyLDggKzM5Miw4IEBACiAgICAgaW50IHJldHZhbDsKIAogICAgIGlmIChkZXYtPmlycSA8IDIpIHsKLQlpbnQgaXJxbGlzdFtdID0gezUsIDksIDMsIDQsIDB9OwotCWludCAqaXJxcCA9IGlycWxpc3Q7CisJc3RhdGljIGNvbnN0IGludCBpcnFsaXN0W10gPSB7NSwgOSwgMywgNCwgMH07CisJY29uc3QgaW50ICppcnFwID0gaXJxbGlzdDsKIAogCW91dGIoRUdBQ0ZSX05PUk0sIEUzM0dfR0FDRlIpOwkvKiBFbmFibGUgUkFNIGFuZCBpbnRlcnJ1cHRzLiAqLwogCWRvIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzNjNTA3LmMgYi9kcml2ZXJzL25ldC8zYzUwNy5jCmluZGV4IGVhOWI3YTAuLjFlOTQ1NTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzNjNTA3LmMKKysrIGIvZHJpdmVycy9uZXQvM2M1MDcuYwpAQCAtMjAxLDcgKzIwMSw3IEBACiAjZGVmaW5lIFJYX0JVRl9TSVpFIAkoMTUxOCsxNCsxOCkJLyogcGFja2V0K2hlYWRlcitSQkQgKi8KICNkZWZpbmUgUlhfQlVGX0VORAkJKGRldi0+bWVtX2VuZCAtIGRldi0+bWVtX3N0YXJ0KQogCi0jZGVmaW5lIFRYX1RJTUVPVVQgNQorI2RlZmluZSBUWF9USU1FT1VUIChIWi8yMCkKIAogLyoKICAgVGhhdCdzIGl0OiBvbmx5IDg2IGJ5dGVzIHRvIHNldCB1cCB0aGUgYmVhc3QsIGluY2x1ZGluZyBldmVyeSBleHRyYQpAQCAtMzExLDggKzMxMSw4IEBACiBzdHJ1Y3QgbmV0X2RldmljZSAqIF9faW5pdCBlbDE2X3Byb2JlKGludCB1bml0KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IG5ldF9sb2NhbCkpOwotCXN0YXRpYyB1bnNpZ25lZCBwb3J0c1tdID0geyAweDMwMCwgMHgzMjAsIDB4MzQwLCAweDI4MCwgMH07Ci0JdW5zaWduZWQgKnBvcnQ7CisJc3RhdGljIGNvbnN0IHVuc2lnbmVkIHBvcnRzW10gPSB7IDB4MzAwLCAweDMyMCwgMHgzNDAsIDB4MjgwLCAwfTsKKwljb25zdCB1bnNpZ25lZCAqcG9ydDsKIAlpbnQgZXJyID0gLUVOT0RFVjsKIAogCWlmICghZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1MTUuYyBiL2RyaXZlcnMvbmV0LzNjNTE1LmMKaW5kZXggY2RmNzIyNi4uZDJiYjRiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1MTUuYworKysgYi9kcml2ZXJzL25ldC8zYzUxNS5jCkBAIC05OCw3ICs5OCw3IEBACiAjZGVmaW5lIFdBSVRfVFhfQVZBSUwgMjAwCiAKIC8qIE9wZXJhdGlvbmFsIHBhcmFtZXRlciB0aGF0IHVzdWFsbHkgYXJlIG5vdCBjaGFuZ2VkLiAqLwotI2RlZmluZSBUWF9USU1FT1VUICA0MAkJLyogVGltZSBpbiBqaWZmaWVzIGJlZm9yZSBjb25jbHVkaW5nIFR4IGh1bmcgKi8KKyNkZWZpbmUgVFhfVElNRU9VVCAgKCg0KkhaKS8xMCkJLyogVGltZSBpbiBqaWZmaWVzIGJlZm9yZSBjb25jbHVkaW5nIFR4IGh1bmcgKi8KIAogLyogVGhlIHNpemUgaGVyZSBpcyBzb21ld2hhdCBtaXNsZWFkaW5nOiB0aGUgQ29ya3NjcmV3IGFsc28gdXNlcyB0aGUgSVNBCiAgICBhbGlhc2VkIHJlZ2lzdGVycyBhdCA8YmFzZT4rMHg0MDAuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC8zYzUyNy5jIGIvZHJpdmVycy9uZXQvM2M1MjcuYwppbmRleCAwMTNiN2MzLi44YzA5NGJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC8zYzUyNy5jCisrKyBiL2RyaXZlcnMvbmV0LzNjNTI3LmMKQEAgLTMxNywxMyArMzE3LDEzIEBACiAJdTggUE9TOwogCXUzMiBiYXNlOwogCXN0cnVjdCBtYzMyX2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RhdGljIHUxNiBtY2FfaW9fYmFzZXNbXT17CisJc3RhdGljIGNvbnN0IHUxNiBtY2FfaW9fYmFzZXNbXSA9IHsKIAkJMHg3MjgwLDB4NzI5MCwKIAkJMHg3NjgwLDB4NzY5MCwKIAkJMHg3QTgwLDB4N0E5MCwKIAkJMHg3RTgwLDB4N0U5MAogCX07Ci0Jc3RhdGljIHUzMiBtY2FfbWVtX2Jhc2VzW109eworCXN0YXRpYyBjb25zdCB1MzIgbWNhX21lbV9iYXNlc1tdID0gewogCQkweDAwQzAwMDAsCiAJCTB4MDBDNDAwMCwKIAkJMHgwMEM4MDAwLApAQCAtMzMzLDcgKzMzMyw3IEBACiAJCTB4MDBEODAwMCwKIAkJMHgwMERDMDAwCiAJfTsKLQlzdGF0aWMgY2hhciAqZmFpbHVyZXNbXT17CisJc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBmYWlsdXJlc1tdID0gewogCQkiUHJvY2Vzc29yIGluc3RydWN0aW9uIiwKIAkJIlByb2Nlc3NvciBkYXRhIGJ1cyIsCiAJCSJQcm9jZXNzb3IgZGF0YSBidXMiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvODEzOXRvby5jIGIvZHJpdmVycy9uZXQvODEzOXRvby5jCmluZGV4IGY1MTY2ZGMuLjk4NTE3YTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzgxMzl0b28uYworKysgYi9kcml2ZXJzL25ldC84MTM5dG9vLmMKQEAgLTEwOTIsMTAgKzEwOTIsMTEgQEAKIHN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBydGw4MTM5X3JlbW92ZV9vbmUgKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEgKHBkZXYpOworCXN0cnVjdCBydGw4MTM5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCWFzc2VydCAoZGV2ICE9IE5VTEwpOwogCi0JZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnRwLT50aHJlYWQpOwogCiAJdW5yZWdpc3Rlcl9uZXRkZXYgKGRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzgyNTk2LmMgYi9kcml2ZXJzL25ldC84MjU5Ni5jCmluZGV4IGUyYzljNWIuLmJlMWYxOTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzgyNTk2LmMKKysrIGIvZHJpdmVycy9uZXQvODI1OTYuYwpAQCAtMTkxLDcgKzE5MSw3IEBACiAjZGVmaW5lCSBSWF9TVVNQRU5ECTB4MDAzMAogI2RlZmluZQkgUlhfQUJPUlQJMHgwMDQwCiAKLSNkZWZpbmUgVFhfVElNRU9VVAk1CisjZGVmaW5lIFRYX1RJTUVPVVQJKEhaLzIwKQogCiAKIHN0cnVjdCBpNTk2X3JlZyB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9LY29uZmlnIGIvZHJpdmVycy9uZXQvS2NvbmZpZwppbmRleCA0ZjE3NTViLi4zZmRhMjRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L0tjb25maWcKQEAgLTE1MzMsNyArMTUzMyw3IEBACiAKIAkgIDxodHRwOi8vc3VwcG9ydC5pbnRlbC5jb20vc3VwcG9ydC9uZXR3b3JrL2FkYXB0ZXIvcHJvMTAwLzIxMzk3Lmh0bT4KIAotICAgICAgICAgIHRvIGlkZW50aWZ5IHRoZSBhZGFwdGVyLgorCSAgdG8gaWRlbnRpZnkgdGhlIGFkYXB0ZXIuCiAKIAkgIEZvciB0aGUgbGF0ZXN0IEludGVsIFBSTy8xMDAgbmV0d29yayBkcml2ZXIgZm9yIExpbnV4LCBzZWU6CiAKQEAgLTE3ODYsMTcgKzE3ODYsMTcgQEAKIAl0cmlzdGF0ZSAiTWljcmVsIEtTWjg4NDEvNDIgd2l0aCBnZW5lcmljIGJ1cyBpbnRlcmZhY2UiCiAJZGVwZW5kcyBvbiBIQVNfSU9NRU0gJiYgRE1BX0VOR0lORQogCWhlbHAKLQkgVGhpcyBwbGF0Zm9ybSBkcml2ZXIgaXMgZm9yIEtTWjg4NDEoMS1wb3J0KSAvIEtTODg0MigyLXBvcnQpCi0JIGV0aGVybmV0IHN3aXRjaCBjaGlwIChtYW5hZ2VkLCBWTEFOLCBRb1MpIGZyb20gTWljcmVsIG9yCi0JIFRpbWJlcmRhbGUoRlBHQSkuCisJICBUaGlzIHBsYXRmb3JtIGRyaXZlciBpcyBmb3IgS1NaODg0MSgxLXBvcnQpIC8gS1M4ODQyKDItcG9ydCkKKwkgIGV0aGVybmV0IHN3aXRjaCBjaGlwIChtYW5hZ2VkLCBWTEFOLCBRb1MpIGZyb20gTWljcmVsIG9yCisJICBUaW1iZXJkYWxlKEZQR0EpLgogCiBjb25maWcgS1M4ODUxCi0gICAgICAgdHJpc3RhdGUgIk1pY3JlbCBLUzg4NTEgU1BJIgotICAgICAgIGRlcGVuZHMgb24gU1BJCi0gICAgICAgc2VsZWN0IE1JSQorCXRyaXN0YXRlICJNaWNyZWwgS1M4ODUxIFNQSSIKKwlkZXBlbmRzIG9uIFNQSQorCXNlbGVjdCBNSUkKIAlzZWxlY3QgQ1JDMzIKLSAgICAgICBoZWxwCi0gICAgICAgICBTUEkgZHJpdmVyIGZvciBNaWNyZWwgS1M4ODUxIFNQSSBhdHRhY2hlZCBuZXR3b3JrIGNoaXAuCisJaGVscAorCSAgU1BJIGRyaXZlciBmb3IgTWljcmVsIEtTODg1MSBTUEkgYXR0YWNoZWQgbmV0d29yayBjaGlwLgogCiBjb25maWcgS1M4ODUxX01MTAogCXRyaXN0YXRlICJNaWNyZWwgS1M4ODUxIE1MTCIKQEAgLTIxMzMsMjUgKzIxMzMsMjUgQEAKIAkgIHdpbGwgYmUgY2FsbGVkIGlwZy4gIFRoaXMgaXMgcmVjb21tZW5kZWQuCiAKIGNvbmZpZyBJR0IKLSAgICAgICB0cmlzdGF0ZSAiSW50ZWwoUikgODI1NzUvODI1NzYgUENJLUV4cHJlc3MgR2lnYWJpdCBFdGhlcm5ldCBzdXBwb3J0IgotICAgICAgIGRlcGVuZHMgb24gUENJCi0gICAgICAgLS0taGVscC0tLQotICAgICAgICAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgSW50ZWwoUikgODI1NzUvODI1NzYgZ2lnYWJpdCBldGhlcm5ldCBmYW1pbHkgb2YKLSAgICAgICAgIGFkYXB0ZXJzLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRvIGlkZW50aWZ5IHlvdXIgYWRhcHRlciwgZ28KLSAgICAgICAgIHRvIHRoZSBBZGFwdGVyICYgRHJpdmVyIElEIEd1aWRlIGF0OgorCXRyaXN0YXRlICJJbnRlbChSKSA4MjU3NS84MjU3NiBQQ0ktRXhwcmVzcyBHaWdhYml0IEV0aGVybmV0IHN1cHBvcnQiCisJZGVwZW5kcyBvbiBQQ0kKKwktLS1oZWxwLS0tCisJICBUaGlzIGRyaXZlciBzdXBwb3J0cyBJbnRlbChSKSA4MjU3NS84MjU3NiBnaWdhYml0IGV0aGVybmV0IGZhbWlseSBvZgorCSAgYWRhcHRlcnMuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gaWRlbnRpZnkgeW91ciBhZGFwdGVyLCBnbworCSAgdG8gdGhlIEFkYXB0ZXIgJiBEcml2ZXIgSUQgR3VpZGUgYXQ6CiAKLSAgICAgICAgIDxodHRwOi8vc3VwcG9ydC5pbnRlbC5jb20vc3VwcG9ydC9uZXR3b3JrL2FkYXB0ZXIvcHJvMTAwLzIxMzk3Lmh0bT4KKwkgIDxodHRwOi8vc3VwcG9ydC5pbnRlbC5jb20vc3VwcG9ydC9uZXR3b3JrL2FkYXB0ZXIvcHJvMTAwLzIxMzk3Lmh0bT4KIAotICAgICAgICAgRm9yIGdlbmVyYWwgaW5mb3JtYXRpb24gYW5kIHN1cHBvcnQsIGdvIHRvIHRoZSBJbnRlbCBzdXBwb3J0Ci0gICAgICAgICB3ZWJzaXRlIGF0OgorCSAgRm9yIGdlbmVyYWwgaW5mb3JtYXRpb24gYW5kIHN1cHBvcnQsIGdvIHRvIHRoZSBJbnRlbCBzdXBwb3J0CisJICB3ZWJzaXRlIGF0OgogCi0gICAgICAgICA8aHR0cDovL3N1cHBvcnQuaW50ZWwuY29tPgorCSAgPGh0dHA6Ly9zdXBwb3J0LmludGVsLmNvbT4KIAotICAgICAgICAgTW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZyB0aGUgZHJpdmVyIGlzIGluCi0gICAgICAgICA8ZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZTEwMDAudHh0Pi4KKwkgIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhlIGRyaXZlciBpcyBpbgorCSAgPGZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2UxMDAwLnR4dD4uCiAKLSAgICAgICAgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGUKLSAgICAgICAgIHdpbGwgYmUgY2FsbGVkIGlnYi4KKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIGlnYi4KIAogY29uZmlnIElHQl9EQ0EKIAlib29sICJEaXJlY3QgQ2FjaGUgQWNjZXNzIChEQ0EpIFN1cHBvcnQiCkBAIC0yMTYzLDI1ICsyMTYzLDI1IEBACiAJICBpcyB1c2VkLCB3aXRoIHRoZSBpbnRlbnQgb2YgbGVzc2VuaW5nIHRoZSBpbXBhY3Qgb2YgY2FjaGUgbWlzc2VzLgogCiBjb25maWcgSUdCVkYKLSAgICAgICB0cmlzdGF0ZSAiSW50ZWwoUikgODI1NzYgVmlydHVhbCBGdW5jdGlvbiBFdGhlcm5ldCBzdXBwb3J0IgotICAgICAgIGRlcGVuZHMgb24gUENJCi0gICAgICAgLS0taGVscC0tLQotICAgICAgICAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgSW50ZWwoUikgODI1NzYgdmlydHVhbCBmdW5jdGlvbnMuICBGb3IgbW9yZQotICAgICAgICAgaW5mb3JtYXRpb24gb24gaG93IHRvIGlkZW50aWZ5IHlvdXIgYWRhcHRlciwgZ28gdG8gdGhlIEFkYXB0ZXIgJgotICAgICAgICAgRHJpdmVyIElEIEd1aWRlIGF0OgorCXRyaXN0YXRlICJJbnRlbChSKSA4MjU3NiBWaXJ0dWFsIEZ1bmN0aW9uIEV0aGVybmV0IHN1cHBvcnQiCisJZGVwZW5kcyBvbiBQQ0kKKwktLS1oZWxwLS0tCisJICBUaGlzIGRyaXZlciBzdXBwb3J0cyBJbnRlbChSKSA4MjU3NiB2aXJ0dWFsIGZ1bmN0aW9ucy4gIEZvciBtb3JlCisJICBpbmZvcm1hdGlvbiBvbiBob3cgdG8gaWRlbnRpZnkgeW91ciBhZGFwdGVyLCBnbyB0byB0aGUgQWRhcHRlciAmCisJICBEcml2ZXIgSUQgR3VpZGUgYXQ6CiAKLSAgICAgICAgIDxodHRwOi8vc3VwcG9ydC5pbnRlbC5jb20vc3VwcG9ydC9uZXR3b3JrL2FkYXB0ZXIvcHJvMTAwLzIxMzk3Lmh0bT4KKwkgIDxodHRwOi8vc3VwcG9ydC5pbnRlbC5jb20vc3VwcG9ydC9uZXR3b3JrL2FkYXB0ZXIvcHJvMTAwLzIxMzk3Lmh0bT4KIAotICAgICAgICAgRm9yIGdlbmVyYWwgaW5mb3JtYXRpb24gYW5kIHN1cHBvcnQsIGdvIHRvIHRoZSBJbnRlbCBzdXBwb3J0Ci0gICAgICAgICB3ZWJzaXRlIGF0OgorCSAgRm9yIGdlbmVyYWwgaW5mb3JtYXRpb24gYW5kIHN1cHBvcnQsIGdvIHRvIHRoZSBJbnRlbCBzdXBwb3J0CisJICB3ZWJzaXRlIGF0OgogCi0gICAgICAgICA8aHR0cDovL3N1cHBvcnQuaW50ZWwuY29tPgorCSAgPGh0dHA6Ly9zdXBwb3J0LmludGVsLmNvbT4KIAotICAgICAgICAgTW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZyB0aGUgZHJpdmVyIGlzIGluCi0gICAgICAgICA8ZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZTEwMDAudHh0Pi4KKwkgIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhlIGRyaXZlciBpcyBpbgorCSAgPGZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2UxMDAwLnR4dD4uCiAKLSAgICAgICAgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGUKLSAgICAgICAgIHdpbGwgYmUgY2FsbGVkIGlnYnZmLgorCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgaWdidmYuCiAKIHNvdXJjZSAiZHJpdmVycy9uZXQvaXhwMjAwMC9LY29uZmlnIgogCkBAIC0yMjMzLDYgKzIyMzMsNyBAQAogY29uZmlnIFI4MTY5CiAJdHJpc3RhdGUgIlJlYWx0ZWsgODE2OSBnaWdhYml0IGV0aGVybmV0IHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBQQ0kKKwlzZWxlY3QgRldfTE9BREVSCiAJc2VsZWN0IENSQzMyCiAJc2VsZWN0IE1JSQogCS0tLWhlbHAtLS0KQEAgLTIzMDAsMTQgKzIzMDEsMTQgQEAKIAkgIHdpbGwgYmUgY2FsbGVkIHNrZ2UuICBUaGlzIGlzIHJlY29tbWVuZGVkLgogCiBjb25maWcgU0tHRV9ERUJVRwotICAgICAgIGJvb2wgIkRlYnVnZ2luZyBpbnRlcmZhY2UiCi0gICAgICAgZGVwZW5kcyBvbiBTS0dFICYmIERFQlVHX0ZTCi0gICAgICAgaGVscAotCSBUaGlzIG9wdGlvbiBhZGRzIHRoZSBhYmlsaXR5IHRvIGR1bXAgZHJpdmVyIHN0YXRlIGZvciBkZWJ1Z2dpbmcuCi0JIFRoZSBmaWxlIC9zeXMva2VybmVsL2RlYnVnL3NrZ2UvZXRoWCBkaXNwbGF5cyB0aGUgc3RhdGUgb2YgdGhlIGludGVybmFsCi0JIHRyYW5zbWl0IGFuZCByZWNlaXZlIHJpbmdzLgorCWJvb2wgIkRlYnVnZ2luZyBpbnRlcmZhY2UiCisJZGVwZW5kcyBvbiBTS0dFICYmIERFQlVHX0ZTCisJaGVscAorCSAgVGhpcyBvcHRpb24gYWRkcyB0aGUgYWJpbGl0eSB0byBkdW1wIGRyaXZlciBzdGF0ZSBmb3IgZGVidWdnaW5nLgorCSAgVGhlIGZpbGUgL3N5cy9rZXJuZWwvZGVidWcvc2tnZS9ldGhYIGRpc3BsYXlzIHRoZSBzdGF0ZSBvZiB0aGUgaW50ZXJuYWwKKwkgIHRyYW5zbWl0IGFuZCByZWNlaXZlIHJpbmdzLgogCi0JIElmIHVuc3VyZSwgc2F5IE4uCisJICBJZiB1bnN1cmUsIHNheSBOLgogCiBjb25maWcgU0tZMgogCXRyaXN0YXRlICJTeXNLb25uZWN0IFl1a29uMiBzdXBwb3J0IgpAQCAtMjMyNiwxNCArMjMyNywxNCBAQAogCSAgd2lsbCBiZSBjYWxsZWQgc2t5Mi4gIFRoaXMgaXMgcmVjb21tZW5kZWQuCiAKIGNvbmZpZyBTS1kyX0RFQlVHCi0gICAgICAgYm9vbCAiRGVidWdnaW5nIGludGVyZmFjZSIKLSAgICAgICBkZXBlbmRzIG9uIFNLWTIgJiYgREVCVUdfRlMKLSAgICAgICBoZWxwCi0JIFRoaXMgb3B0aW9uIGFkZHMgdGhlIGFiaWxpdHkgdG8gZHVtcCBkcml2ZXIgc3RhdGUgZm9yIGRlYnVnZ2luZy4KLQkgVGhlIGZpbGUgL3N5cy9rZXJuZWwvZGVidWcvc2t5Mi9ldGhYIGRpc3BsYXlzIHRoZSBzdGF0ZSBvZiB0aGUgaW50ZXJuYWwKLQkgdHJhbnNtaXQgYW5kIHJlY2VpdmUgcmluZ3MuCisJYm9vbCAiRGVidWdnaW5nIGludGVyZmFjZSIKKwlkZXBlbmRzIG9uIFNLWTIgJiYgREVCVUdfRlMKKwloZWxwCisJICBUaGlzIG9wdGlvbiBhZGRzIHRoZSBhYmlsaXR5IHRvIGR1bXAgZHJpdmVyIHN0YXRlIGZvciBkZWJ1Z2dpbmcuCisJICBUaGUgZmlsZSAvc3lzL2tlcm5lbC9kZWJ1Zy9za3kyL2V0aFggZGlzcGxheXMgdGhlIHN0YXRlIG9mIHRoZSBpbnRlcm5hbAorCSAgdHJhbnNtaXQgYW5kIHJlY2VpdmUgcmluZ3MuCiAKLQkgSWYgdW5zdXJlLCBzYXkgTi4KKwkgIElmIHVuc3VyZSwgc2F5IE4uCiAKIGNvbmZpZyBWSUFfVkVMT0NJVFkKIAl0cmlzdGF0ZSAiVklBIFZlbG9jaXR5IHN1cHBvcnQiCkBAIC0yMzg5LDEyICsyMzkwLDEyIEBACiAJICBDZWxsIFByb2Nlc3Nvci1CYXNlZCBCbGFkZXMgZnJvbSBJQk0uCiAKIGNvbmZpZyBUU0kxMDhfRVRICi0JICAgdHJpc3RhdGUgIlR1bmRyYSBUU0kxMDggZ2lnYWJpdCBFdGhlcm5ldCBzdXBwb3J0IgotCSAgIGRlcGVuZHMgb24gVFNJMTA4X0JSSURHRQotCSAgIGhlbHAKLQkgICAgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIFR1bmRyYSBUU0kxMDggZ2lnYWJpdCBFdGhlcm5ldCBwb3J0cy4KLQkgICAgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKLQkgICAgIHdpbGwgYmUgY2FsbGVkIHRzaTEwOF9ldGguCisJdHJpc3RhdGUgIlR1bmRyYSBUU0kxMDggZ2lnYWJpdCBFdGhlcm5ldCBzdXBwb3J0IgorCWRlcGVuZHMgb24gVFNJMTA4X0JSSURHRQorCWhlbHAKKwkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIFR1bmRyYSBUU0kxMDggZ2lnYWJpdCBFdGhlcm5ldCBwb3J0cy4KKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIHRzaTEwOF9ldGguCiAKIGNvbmZpZyBHRUxJQ19ORVQKIAl0cmlzdGF0ZSAiUFMzIEdpZ2FiaXQgRXRoZXJuZXQgZHJpdmVyIgpAQCAtMjU3MywzMiArMjU3NCwzMiBAQAogCXRyaXN0YXRlCiAKIGNvbmZpZyBDSEVMU0lPX1QxCi0gICAgICAgIHRyaXN0YXRlICJDaGVsc2lvIDEwR2IgRXRoZXJuZXQgc3VwcG9ydCIKLSAgICAgICAgZGVwZW5kcyBvbiBQQ0kKKwl0cmlzdGF0ZSAiQ2hlbHNpbyAxMEdiIEV0aGVybmV0IHN1cHBvcnQiCisJZGVwZW5kcyBvbiBQQ0kKIAlzZWxlY3QgQ1JDMzIKIAlzZWxlY3QgTURJTwotICAgICAgICBoZWxwCi0gICAgICAgICAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgQ2hlbHNpbyBnaWdhYml0IGFuZCAxMC1naWdhYml0Ci0gICAgICAgICAgRXRoZXJuZXQgY2FyZHMuIE1vcmUgaW5mb3JtYXRpb24gYWJvdXQgYWRhcHRlciBmZWF0dXJlcyBhbmQKKwloZWxwCisJICBUaGlzIGRyaXZlciBzdXBwb3J0cyBDaGVsc2lvIGdpZ2FiaXQgYW5kIDEwLWdpZ2FiaXQKKwkgIEV0aGVybmV0IGNhcmRzLiBNb3JlIGluZm9ybWF0aW9uIGFib3V0IGFkYXB0ZXIgZmVhdHVyZXMgYW5kCiAJICBwZXJmb3JtYW5jZSB0dW5pbmcgaXMgaW4gPGZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2N4Z2IudHh0Pi4KIAotICAgICAgICAgIEZvciBnZW5lcmFsIGluZm9ybWF0aW9uIGFib3V0IENoZWxzaW8gYW5kIG91ciBwcm9kdWN0cywgdmlzaXQKLSAgICAgICAgICBvdXIgd2Vic2l0ZSBhdCA8aHR0cDovL3d3dy5jaGVsc2lvLmNvbT4uCisJICBGb3IgZ2VuZXJhbCBpbmZvcm1hdGlvbiBhYm91dCBDaGVsc2lvIGFuZCBvdXIgcHJvZHVjdHMsIHZpc2l0CisJICBvdXIgd2Vic2l0ZSBhdCA8aHR0cDovL3d3dy5jaGVsc2lvLmNvbT4uCiAKLSAgICAgICAgICBGb3IgY3VzdG9tZXIgc3VwcG9ydCwgcGxlYXNlIHZpc2l0IG91ciBjdXN0b21lciBzdXBwb3J0IHBhZ2UgYXQKLSAgICAgICAgICA8aHR0cDovL3d3dy5jaGVsc2lvLmNvbS9zdXBwb3J0Lmh0bWw+LgorCSAgRm9yIGN1c3RvbWVyIHN1cHBvcnQsIHBsZWFzZSB2aXNpdCBvdXIgY3VzdG9tZXIgc3VwcG9ydCBwYWdlIGF0CisJICA8aHR0cDovL3d3dy5jaGVsc2lvLmNvbS9zdXBwb3J0Lmh0bWw+LgogCi0gICAgICAgICAgUGxlYXNlIHNlbmQgZmVlZGJhY2sgdG8gPGxpbnV4LWJ1Z3NAY2hlbHNpby5jb20+LgorCSAgUGxlYXNlIHNlbmQgZmVlZGJhY2sgdG8gPGxpbnV4LWJ1Z3NAY2hlbHNpby5jb20+LgogCi0gICAgICAgICAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQotICAgICAgICAgIHdpbGwgYmUgY2FsbGVkIGN4Z2IuCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBjeGdiLgogCiBjb25maWcgQ0hFTFNJT19UMV8xRwotICAgICAgICBib29sICJDaGVsc2lvIGdpZ2FiaXQgRXRoZXJuZXQgc3VwcG9ydCIKLSAgICAgICAgZGVwZW5kcyBvbiBDSEVMU0lPX1QxCi0gICAgICAgIGhlbHAKLSAgICAgICAgICBFbmFibGVzIHN1cHBvcnQgZm9yIENoZWxzaW8ncyBnaWdhYml0IEV0aGVybmV0IFBDSSBjYXJkcy4gIElmIHlvdQotICAgICAgICAgIGFyZSB1c2luZyBvbmx5IDEwRyBjYXJkcyBzYXkgJ04nIGhlcmUuCisJYm9vbCAiQ2hlbHNpbyBnaWdhYml0IEV0aGVybmV0IHN1cHBvcnQiCisJZGVwZW5kcyBvbiBDSEVMU0lPX1QxCisJaGVscAorCSAgRW5hYmxlcyBzdXBwb3J0IGZvciBDaGVsc2lvJ3MgZ2lnYWJpdCBFdGhlcm5ldCBQQ0kgY2FyZHMuICBJZiB5b3UKKwkgIGFyZSB1c2luZyBvbmx5IDEwRyBjYXJkcyBzYXkgJ04nIGhlcmUuCiAKIGNvbmZpZyBDSEVMU0lPX1QzX0RFUEVORFMKIAl0cmlzdGF0ZQpAQCAtMjcyOCwyNiArMjcyOSwyNiBAQAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAogY29uZmlnIElYR0JFVkYKLSAgICAgICB0cmlzdGF0ZSAiSW50ZWwoUikgODI1OTkgVmlydHVhbCBGdW5jdGlvbiBFdGhlcm5ldCBzdXBwb3J0IgotICAgICAgIGRlcGVuZHMgb24gUENJX01TSQotICAgICAgIC0tLWhlbHAtLS0KLSAgICAgICAgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIEludGVsKFIpIDgyNTk5IHZpcnR1YWwgZnVuY3Rpb25zLiAgRm9yIG1vcmUKLSAgICAgICAgIGluZm9ybWF0aW9uIG9uIGhvdyB0byBpZGVudGlmeSB5b3VyIGFkYXB0ZXIsIGdvIHRvIHRoZSBBZGFwdGVyICYKLSAgICAgICAgIERyaXZlciBJRCBHdWlkZSBhdDoKKwl0cmlzdGF0ZSAiSW50ZWwoUikgODI1OTkgVmlydHVhbCBGdW5jdGlvbiBFdGhlcm5ldCBzdXBwb3J0IgorCWRlcGVuZHMgb24gUENJX01TSQorCS0tLWhlbHAtLS0KKwkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIEludGVsKFIpIDgyNTk5IHZpcnR1YWwgZnVuY3Rpb25zLiAgRm9yIG1vcmUKKwkgIGluZm9ybWF0aW9uIG9uIGhvdyB0byBpZGVudGlmeSB5b3VyIGFkYXB0ZXIsIGdvIHRvIHRoZSBBZGFwdGVyICYKKwkgIERyaXZlciBJRCBHdWlkZSBhdDoKIAotICAgICAgICAgPGh0dHA6Ly9zdXBwb3J0LmludGVsLmNvbS9zdXBwb3J0L25ldHdvcmsvc2IvQ1MtMDA4NDQxLmh0bT4KKwkgIDxodHRwOi8vc3VwcG9ydC5pbnRlbC5jb20vc3VwcG9ydC9uZXR3b3JrL3NiL0NTLTAwODQ0MS5odG0+CiAKLSAgICAgICAgIEZvciBnZW5lcmFsIGluZm9ybWF0aW9uIGFuZCBzdXBwb3J0LCBnbyB0byB0aGUgSW50ZWwgc3VwcG9ydAotICAgICAgICAgd2Vic2l0ZSBhdDoKKwkgIEZvciBnZW5lcmFsIGluZm9ybWF0aW9uIGFuZCBzdXBwb3J0LCBnbyB0byB0aGUgSW50ZWwgc3VwcG9ydAorCSAgd2Vic2l0ZSBhdDoKIAotICAgICAgICAgPGh0dHA6Ly9zdXBwb3J0LmludGVsLmNvbT4KKwkgIDxodHRwOi8vc3VwcG9ydC5pbnRlbC5jb20+CiAKLSAgICAgICAgIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhlIGRyaXZlciBpcyBpbgotICAgICAgICAgPGZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2l4Z2JldmYudHh0Pi4KKwkgIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhlIGRyaXZlciBpcyBpbgorCSAgPGZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2l4Z2JldmYudHh0Pi4KIAotICAgICAgICAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZQotICAgICAgICAgd2lsbCBiZSBjYWxsZWQgaXhnYmV2Zi4gIE1TSS1YIGludGVycnVwdCBzdXBwb3J0IGlzIHJlcXVpcmVkCi0gICAgICAgICBmb3IgdGhpcyBkcml2ZXIgdG8gd29yayBjb3JyZWN0bHkuCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBpeGdiZXZmLiAgTVNJLVggaW50ZXJydXB0IHN1cHBvcnQgaXMgcmVxdWlyZWQKKwkgIGZvciB0aGlzIGRyaXZlciB0byB3b3JrIGNvcnJlY3RseS4KIAogY29uZmlnIElYR0IKIAl0cmlzdGF0ZSAiSW50ZWwoUikgUFJPLzEwR2JFIHN1cHBvcnQiCkBAIC0yNzcyLDI5ICsyNzczLDM4IEBACiAJICB3aWxsIGJlIGNhbGxlZCBpeGdiLgogCiBjb25maWcgUzJJTwotCXRyaXN0YXRlICJTMklPIDEwR2JlIFhGcmFtZSBOSUMiCisJdHJpc3RhdGUgIkV4YXIgWGZyYW1lIDEwR2IgRXRoZXJuZXQgQWRhcHRlciIKIAlkZXBlbmRzIG9uIFBDSQogCS0tLWhlbHAtLS0KLQkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSAxMEdiZSBYRnJhbWUgTklDIG9mIFMySU8uIAorCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgRXhhciBDb3JwJ3MgWGZyYW1lIFNlcmllcyAxMEdiIEV0aGVybmV0IEFkYXB0ZXJzLgorCiAJICBNb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyaW5nIHRoZSBkcml2ZXIgaXMgaW4gCiAJICA8ZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvczJpby50eHQ+LgogCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBzMmlvLgorCiBjb25maWcgVlhHRQotCXRyaXN0YXRlICJOZXRlcmlvbiBYMzEwMCBTZXJpZXMgMTBHYkUgUENJZSBTZXJ2ZXIgQWRhcHRlciIKKwl0cmlzdGF0ZSAiRXhhciBYMzEwMCBTZXJpZXMgMTBHYkUgUENJZSBTZXJ2ZXIgQWRhcHRlciIKIAlkZXBlbmRzIG9uIFBDSSAmJiBJTkVUCiAJLS0taGVscC0tLQotCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgTmV0ZXJpb24gSW5jJ3MgWDMxMDAgU2VyaWVzIDEwIEdiRSBQQ0llCisJICBUaGlzIGRyaXZlciBzdXBwb3J0cyBFeGFyIENvcnAncyBYMzEwMCBTZXJpZXMgMTAgR2JFIFBDSWUKIAkgIEkvTyBWaXJ0dWFsaXplZCBTZXJ2ZXIgQWRhcHRlci4KKwogCSAgTW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZyB0aGUgZHJpdmVyIGlzIGluCiAJICA8ZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdnhnZS50eHQ+LgogCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCB2eGdlLgorCiBjb25maWcgVlhHRV9ERUJVR19UUkFDRV9BTEwKIAlib29sICJFbmFibGluZyBBbGwgRGVidWcgdHJhY2Ugc3RhdG1lbnRzIGluIGRyaXZlciIKIAlkZWZhdWx0IG4KIAlkZXBlbmRzIG9uIFZYR0UKIAktLS1oZWxwLS0tCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGVuYWJsaW5nIGFsbCB0aGUgZGVidWcgdHJhY2Ugc3RhdGVtZW50cyBpbgotCSAgZHJpdmVyLiBCeSAgZGVmYXVsdCBvbmx5IGZldyBkZWJ1ZyB0cmFjZSBzdGF0ZW1lbnRzIGFyZSBlbmFibGVkLgorCSAgdGhlIHZ4Z2UgZHJpdmVyLiBCeSBkZWZhdWx0IG9ubHkgZmV3IGRlYnVnIHRyYWNlIHN0YXRlbWVudHMgYXJlCisJICBlbmFibGVkLgogCiBjb25maWcgTVlSSTEwR0UKIAl0cmlzdGF0ZSAiTXlyaWNvbSBNeXJpLTEwRyBFdGhlcm5ldCBzdXBwb3J0IgpAQCAtMjkwNiwxOCArMjkxNiwxOCBAQAogCSAgd2lsbCBiZSBjYWxsZWQgcWxnZS4KIAogY29uZmlnIEJOQQotICAgICAgICB0cmlzdGF0ZSAiQnJvY2FkZSAxMDEwLzEwMjAgMTBHYiBFdGhlcm5ldCBEcml2ZXIgc3VwcG9ydCIKLSAgICAgICAgZGVwZW5kcyBvbiBQQ0kKLSAgICAgICAgLS0taGVscC0tLQotICAgICAgICAgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIEJyb2NhZGUgMTAxMC8xMDIwIDEwR2IgQ0VFIGNhcGFibGUgRXRoZXJuZXQKLSAgICAgICAgICBjYXJkcy4KLSAgICAgICAgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCi0gICAgICAgICAgd2lsbCBiZSBjYWxsZWQgYm5hLgorCXRyaXN0YXRlICJCcm9jYWRlIDEwMTAvMTAyMCAxMEdiIEV0aGVybmV0IERyaXZlciBzdXBwb3J0IgorCWRlcGVuZHMgb24gUENJCisJLS0taGVscC0tLQorCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgQnJvY2FkZSAxMDEwLzEwMjAgMTBHYiBDRUUgY2FwYWJsZSBFdGhlcm5ldAorCSAgY2FyZHMuCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBibmEuCiAKLSAgICAgICAgICBGb3IgZ2VuZXJhbCBpbmZvcm1hdGlvbiBhbmQgc3VwcG9ydCwgZ28gdG8gdGhlIEJyb2NhZGUgc3VwcG9ydAotICAgICAgICAgIHdlYnNpdGUgYXQ6CisJICBGb3IgZ2VuZXJhbCBpbmZvcm1hdGlvbiBhbmQgc3VwcG9ydCwgZ28gdG8gdGhlIEJyb2NhZGUgc3VwcG9ydAorCSAgd2Vic2l0ZSBhdDoKIAotICAgICAgICAgIDxodHRwOi8vc3VwcG9ydC5icm9jYWRlLmNvbT4KKwkgIDxodHRwOi8vc3VwcG9ydC5icm9jYWRlLmNvbT4KIAogc291cmNlICJkcml2ZXJzL25ldC9zZmMvS2NvbmZpZyIKIApAQCAtMzIzOSwxOCArMzI0OSwxOCBAQAogCSAgbW9kdWxlcyBvbmNlIHlvdSBoYXZlIHNhaWQgIm1ha2UgbW9kdWxlcyIuIElmIHVuc3VyZSwgc2F5IE4uCiAKIGNvbmZpZyBQUFBfTVBQRQotICAgICAgIHRyaXN0YXRlICJQUFAgTVBQRSBjb21wcmVzc2lvbiAoZW5jcnlwdGlvbikgKEVYUEVSSU1FTlRBTCkiCi0gICAgICAgZGVwZW5kcyBvbiBQUFAgJiYgRVhQRVJJTUVOVEFMCi0gICAgICAgc2VsZWN0IENSWVBUTwotICAgICAgIHNlbGVjdCBDUllQVE9fU0hBMQotICAgICAgIHNlbGVjdCBDUllQVE9fQVJDNAotICAgICAgIHNlbGVjdCBDUllQVE9fRUNCCi0gICAgICAgLS0taGVscC0tLQotICAgICAgICAgU3VwcG9ydCBmb3IgdGhlIE1QUEUgRW5jcnlwdGlvbiBwcm90b2NvbCwgYXMgZW1wbG95ZWQgYnkgdGhlCi0JIE1pY3Jvc29mdCBQb2ludC10by1Qb2ludCBUdW5uZWxpbmcgUHJvdG9jb2wuCisJdHJpc3RhdGUgIlBQUCBNUFBFIGNvbXByZXNzaW9uIChlbmNyeXB0aW9uKSAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIFBQUCAmJiBFWFBFUklNRU5UQUwKKwlzZWxlY3QgQ1JZUFRPCisJc2VsZWN0IENSWVBUT19TSEExCisJc2VsZWN0IENSWVBUT19BUkM0CisJc2VsZWN0IENSWVBUT19FQ0IKKwktLS1oZWxwLS0tCisJICBTdXBwb3J0IGZvciB0aGUgTVBQRSBFbmNyeXB0aW9uIHByb3RvY29sLCBhcyBlbXBsb3llZCBieSB0aGUKKwkgIE1pY3Jvc29mdCBQb2ludC10by1Qb2ludCBUdW5uZWxpbmcgUHJvdG9jb2wuCiAKLQkgU2VlIGh0dHA6Ly9wcHRwY2xpZW50LnNvdXJjZWZvcmdlLm5ldC8gZm9yIGluZm9ybWF0aW9uIG9uCi0JIGNvbmZpZ3VyaW5nIFBQVFAgY2xpZW50cyBhbmQgc2VydmVycyB0byB1dGlsaXplIHRoaXMgbWV0aG9kLgorCSAgU2VlIGh0dHA6Ly9wcHRwY2xpZW50LnNvdXJjZWZvcmdlLm5ldC8gZm9yIGluZm9ybWF0aW9uIG9uCisJICBjb25maWd1cmluZyBQUFRQIGNsaWVudHMgYW5kIHNlcnZlcnMgdG8gdXRpbGl6ZSB0aGlzIG1ldGhvZC4KIAogY29uZmlnIFBQUE9FCiAJdHJpc3RhdGUgIlBQUCBvdmVyIEV0aGVybmV0IChFWFBFUklNRU5UQUwpIgpAQCAtMzQwOSwxNCArMzQxOSwxNCBAQAogCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMICYmIFZJUlRJTwogCS0tLWhlbHAtLS0KIAkgIFRoaXMgaXMgdGhlIHZpcnR1YWwgbmV0d29yayBkcml2ZXIgZm9yIHZpcnRpby4gIEl0IGNhbiBiZSB1c2VkIHdpdGgKLSAgICAgICAgICBsZ3Vlc3Qgb3IgUUVNVSBiYXNlZCBWTU1zIChsaWtlIEtWTSBvciBYZW4pLiAgU2F5IFkgb3IgTS4KKwkgIGxndWVzdCBvciBRRU1VIGJhc2VkIFZNTXMgKGxpa2UgS1ZNIG9yIFhlbikuICBTYXkgWSBvciBNLgogCiBjb25maWcgVk1YTkVUMwotICAgICAgIHRyaXN0YXRlICJWTXdhcmUgVk1YTkVUMyBldGhlcm5ldCBkcml2ZXIiCi0gICAgICAgZGVwZW5kcyBvbiBQQ0kgJiYgSU5FVAotICAgICAgIGhlbHAKLSAgICAgICAgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIFZNd2FyZSdzIHZteG5ldDMgdmlydHVhbCBldGhlcm5ldCBOSUMuCi0gICAgICAgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLSAgICAgICAgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB2bXhuZXQzLgorCXRyaXN0YXRlICJWTXdhcmUgVk1YTkVUMyBldGhlcm5ldCBkcml2ZXIiCisJZGVwZW5kcyBvbiBQQ0kgJiYgSU5FVAorCWhlbHAKKwkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIFZNd2FyZSdzIHZteG5ldDMgdmlydHVhbCBldGhlcm5ldCBOSUMuCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB2bXhuZXQzLgogCiBlbmRpZiAjIE5FVERFVklDRVMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L1NwYWNlLmMgYi9kcml2ZXJzL25ldC9TcGFjZS5jCmluZGV4IDliYjQwNWIuLjA2OGMzNTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L1NwYWNlLmMKKysrIGIvZHJpdmVycy9uZXQvU3BhY2UuYwpAQCAtNTUsOCArNTUsNiBAQAogZXh0ZXJuIHN0cnVjdCBuZXRfZGV2aWNlICppODI1OTZfcHJvYmUoaW50IHVuaXQpOwogZXh0ZXJuIHN0cnVjdCBuZXRfZGV2aWNlICpld3JrM19wcm9iZShpbnQgdW5pdCk7CiBleHRlcm4gc3RydWN0IG5ldF9kZXZpY2UgKmVsMV9wcm9iZShpbnQgdW5pdCk7Ci1leHRlcm4gc3RydWN0IG5ldF9kZXZpY2UgKndhdmVsYW5fcHJvYmUoaW50IHVuaXQpOwotZXh0ZXJuIHN0cnVjdCBuZXRfZGV2aWNlICphcmxhbl9wcm9iZShpbnQgdW5pdCk7CiBleHRlcm4gc3RydWN0IG5ldF9kZXZpY2UgKmVsMTZfcHJvYmUoaW50IHVuaXQpOwogZXh0ZXJuIHN0cnVjdCBuZXRfZGV2aWNlICplbG1jX3Byb2JlKGludCB1bml0KTsKIGV4dGVybiBzdHJ1Y3QgbmV0X2RldmljZSAqZWxwbHVzX3Byb2JlKGludCB1bml0KTsKQEAgLTY4LDcgKzY2LDYgQEAKIGV4dGVybiBzdHJ1Y3QgbmV0X2RldmljZSAqbmk1Ml9wcm9iZShpbnQgdW5pdCk7CiBleHRlcm4gc3RydWN0IG5ldF9kZXZpY2UgKm5pNjVfcHJvYmUoaW50IHVuaXQpOwogZXh0ZXJuIHN0cnVjdCBuZXRfZGV2aWNlICpzb25pY19wcm9iZShpbnQgdW5pdCk7Ci1leHRlcm4gc3RydWN0IG5ldF9kZXZpY2UgKlNLX2luaXQoaW50IHVuaXQpOwogZXh0ZXJuIHN0cnVjdCBuZXRfZGV2aWNlICpzZWVxODAwNV9wcm9iZShpbnQgdW5pdCk7CiBleHRlcm4gc3RydWN0IG5ldF9kZXZpY2UgKnNtY19pbml0KGludCB1bml0KTsKIGV4dGVybiBzdHJ1Y3QgbmV0X2RldmljZSAqYXRhcmlsYW5jZV9wcm9iZShpbnQgdW5pdCk7CkBAIC03Niw4ICs3Myw2IEBACiBleHRlcm4gc3RydWN0IG5ldF9kZXZpY2UgKnN1bjNfODI1ODZfcHJvYmUoaW50IHVuaXQpOwogZXh0ZXJuIHN0cnVjdCBuZXRfZGV2aWNlICphcG5lX3Byb2JlKGludCB1bml0KTsKIGV4dGVybiBzdHJ1Y3QgbmV0X2RldmljZSAqY3M4OXgwX3Byb2JlKGludCB1bml0KTsKLWV4dGVybiBzdHJ1Y3QgbmV0X2RldmljZSAqaHBsYW5jZV9wcm9iZShpbnQgdW5pdCk7Ci1leHRlcm4gc3RydWN0IG5ldF9kZXZpY2UgKmJhZ2V0bGFuY2VfcHJvYmUoaW50IHVuaXQpOwogZXh0ZXJuIHN0cnVjdCBuZXRfZGV2aWNlICptdm1lMTQ3bGFuY2VfcHJvYmUoaW50IHVuaXQpOwogZXh0ZXJuIHN0cnVjdCBuZXRfZGV2aWNlICp0YzUxNV9wcm9iZShpbnQgdW5pdCk7CiBleHRlcm4gc3RydWN0IG5ldF9kZXZpY2UgKmxhbmNlX3Byb2JlKGludCB1bml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FybS9hbTc5Yzk2MWEuYyBiL2RyaXZlcnMvbmV0L2FybS9hbTc5Yzk2MWEuYwppbmRleCA2MmYyMTEwLi4wYzkyMTdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcm0vYW03OWM5NjFhLmMKKysrIGIvZHJpdmVycy9uZXQvYXJtL2FtNzljOTYxYS5jCkBAIC0zNDAsMTQgKzM0MCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBHZXQgdGhlIGN1cnJlbnQgc3RhdGlzdGljcy4KLSAqLwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICphbTc5Yzk2MV9nZXRzdGF0cyAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gJmRldi0+c3RhdHM7Ci19Ci0KIHN0YXRpYyB2b2lkIGFtNzljOTYxX21jX2hhc2goY2hhciAqYWRkciwgdW5zaWduZWQgc2hvcnQgKmhhc2gpCiB7CiAJaWYgKGFkZHJbMF0gJiAweDAxKSB7CkBAIC02NjUsNyArNjU3LDYgQEAKIAkubmRvX29wZW4JCT0gYW03OWM5NjFfb3BlbiwKIAkubmRvX3N0b3AJCT0gYW03OWM5NjFfY2xvc2UsCiAJLm5kb19zdGFydF94bWl0CQk9IGFtNzljOTYxX3NlbmRwYWNrZXQsCi0JLm5kb19nZXRfc3RhdHMJCT0gYW03OWM5NjFfZ2V0c3RhdHMsCiAJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJPSBhbTc5Yzk2MV9zZXRtdWx0aWNhc3RsaXN0LAogCS5uZG9fdHhfdGltZW91dAkJPSBhbTc5Yzk2MV90aW1lb3V0LAogCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJtL2l4cDR4eF9ldGguYyBiL2RyaXZlcnMvbmV0L2FybS9peHA0eHhfZXRoLmMKaW5kZXggNjAyODIyNi4uOWViOWI5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXJtL2l4cDR4eF9ldGguYworKysgYi9kcml2ZXJzL25ldC9hcm0vaXhwNHh4X2V0aC5jCkBAIC0xMjI5LDggKzEyMjksMTAgQEAKIAlzbnByaW50ZihwaHlfaWQsIE1JSV9CVVNfSURfU0laRSArIDMsIFBIWV9JRF9GTVQsICIwIiwgcGxhdC0+cGh5KTsKIAlwb3J0LT5waHlkZXYgPSBwaHlfY29ubmVjdChkZXYsIHBoeV9pZCwgJml4cDR4eF9hZGp1c3RfbGluaywgMCwKIAkJCQkgICBQSFlfSU5URVJGQUNFX01PREVfTUlJKTsKLQlpZiAoKGVyciA9IElTX0VSUihwb3J0LT5waHlkZXYpKSkKKwlpZiAoSVNfRVJSKHBvcnQtPnBoeWRldikpIHsKKwkJZXJyID0gUFRSX0VSUihwb3J0LT5waHlkZXYpOwogCQlnb3RvIGVycl9mcmVlX21lbTsKKwl9CiAKIAlwb3J0LT5waHlkZXYtPmlycSA9IFBIWV9QT0xMOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcm0vdzkwcDkxMF9ldGhlci5jIGIvZHJpdmVycy9uZXQvYXJtL3c5MHA5MTBfZXRoZXIuYwppbmRleCA0NTQ1ZDVhLi5iZmVhNDk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcm0vdzkwcDkxMF9ldGhlci5jCisrKyBiL2RyaXZlcnMvbmV0L2FybS93OTBwOTEwX2V0aGVyLmMKQEAgLTExNyw3ICsxMTcsNyBAQAogI2RlZmluZSBUWF9ERVNDX1NJWkUJCTEwCiAjZGVmaW5lIE1BWF9SQlVGRl9TWgkJMHg2MDAKICNkZWZpbmUgTUFYX1RCVUZGX1NaCQkweDYwMAotI2RlZmluZSBUWF9USU1FT1VUCQk1MAorI2RlZmluZSBUWF9USU1FT1VUCQkoSFovMikKICNkZWZpbmUgREVMQVkJCQkxMDAwCiAjZGVmaW5lIENBTTAJCQkweDAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXQxNzAwLmMgYi9kcml2ZXJzL25ldC9hdDE3MDAuYwppbmRleCA4OTg3Njg5Li5mNDc0NGZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdDE3MDAuYworKysgYi9kcml2ZXJzL25ldC9hdDE3MDAuYwpAQCAtMTUwLDcgKzE1MCw3IEBACiAjZGVmaW5lIFBPUlRfT0ZGU0VUKG8pIChvKQogCiAKLSNkZWZpbmUgVFhfVElNRU9VVAkJMTAKKyNkZWZpbmUgVFhfVElNRU9VVAkJKEhaLzEwKQogCiAKIC8qIEluZGV4IHRvIGZ1bmN0aW9ucywgYXMgZnVuY3Rpb24gcHJvdG90eXBlcy4gKi8KQEAgLTI3MCw5ICsyNzAsOSBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBhdDE3MDBfcHJvYmUxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpb2FkZHIpCiB7Ci0JY2hhciBmbXZfaXJxbWFwWzRdID0gezMsIDcsIDEwLCAxNX07Ci0JY2hhciBmbXZfaXJxbWFwX3BucFs4XSA9IHszLCA0LCA1LCA3LCA5LCAxMCwgMTEsIDE1fTsKLQljaGFyIGF0MTcwMF9pcnFtYXBbOF0gPSB7MywgNCwgNSwgOSwgMTAsIDExLCAxNCwgMTV9OworCXN0YXRpYyBjb25zdCBjaGFyIGZtdl9pcnFtYXBbNF0gPSB7MywgNywgMTAsIDE1fTsKKwlzdGF0aWMgY29uc3QgY2hhciBmbXZfaXJxbWFwX3BucFs4XSA9IHszLCA0LCA1LCA3LCA5LCAxMCwgMTEsIDE1fTsKKwlzdGF0aWMgY29uc3QgY2hhciBhdDE3MDBfaXJxbWFwWzhdID0gezMsIDQsIDUsIDksIDEwLCAxMSwgMTQsIDE1fTsKIAl1bnNpZ25lZCBpbnQgaSwgaXJxLCBpc19mbXYxOHggPSAwLCBpc19hdDE3MDAgPSAwOwogCWludCBzbG90LCByZXQgPSAtRU5PREVWOwogCXN0cnVjdCBuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F0YXJpbGFuY2UuYyBiL2RyaXZlcnMvbmV0L2F0YXJpbGFuY2UuYwppbmRleCA4Y2IyN2NiLi5jZTAwOTFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdGFyaWxhbmNlLmMKKysrIGIvZHJpdmVycy9uZXQvYXRhcmlsYW5jZS5jCkBAIC0xMTYsNyArMTE2LDcgQEAKICNkZWZpbmUgUlhfUklOR19MRU5fQklUUwkJKFJYX0xPR19SSU5HX1NJWkUgPDwgNSkKICNkZWZpbmUJUlhfUklOR19NT0RfTUFTSwkJKFJYX1JJTkdfU0laRSAtIDEpCiAKLSNkZWZpbmUgVFhfVElNRU9VVAkyMAorI2RlZmluZSBUWF9USU1FT1VUCShIWi81KQogCiAvKiBUaGUgTEFOQ0UgUnggYW5kIFR4IHJpbmcgZGVzY3JpcHRvcnMuICovCiBzdHJ1Y3QgbGFuY2VfcnhfaGVhZCB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdGwxYy9hdGwxY19tYWluLmMgYi9kcml2ZXJzL25ldC9hdGwxYy9hdGwxY19tYWluLmMKaW5kZXggYmRmMTFkOC4uYTY5OWJiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXRsMWMvYXRsMWNfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2F0bDFjL2F0bDFjX21haW4uYwpAQCAtMjA3OSw3ICsyMDc5LDcgQEAKIGNoZWNrX3N1bToKIAlpZiAobGlrZWx5KHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpKSB7CiAJCXU4IGNzcywgY3NvOwotCQljc28gPSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpOworCQljc28gPSBza2JfY2hlY2tzdW1fc3RhcnRfb2Zmc2V0KHNrYik7CiAKIAkJaWYgKHVubGlrZWx5KGNzbyAmIDB4MSkpIHsKIAkJCWlmIChuZXRpZl9tc2dfdHhfZXJyKGFkYXB0ZXIpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXRsMWUvYXRsMWVfbWFpbi5jIGIvZHJpdmVycy9uZXQvYXRsMWUvYXRsMWVfbWFpbi5jCmluZGV4IGVmNjM0OWIuLmUyOGY4YmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F0bDFlL2F0bDFlX21haW4uYworKysgYi9kcml2ZXJzL25ldC9hdGwxZS9hdGwxZV9tYWluLmMKQEAgLTE2NDksNyArMTY0OSw3IEBACiAJaWYgKGxpa2VseShza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSkgewogCQl1OCBjc3MsIGNzbzsKIAotCQljc28gPSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpOworCQljc28gPSBza2JfY2hlY2tzdW1fc3RhcnRfb2Zmc2V0KHNrYik7CiAJCWlmICh1bmxpa2VseShjc28gJiAweDEpKSB7CiAJCQluZXRkZXZfZXJyKGFkYXB0ZXItPm5ldGRldiwKIAkJCQkgICAicGF5bG9hZCBvZmZzZXQgc2hvdWxkIG5vdCBhbnQgZXZlbnQgbnVtYmVyXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F0bHgvYXRsMS5jIGIvZHJpdmVycy9uZXQvYXRseC9hdGwxLmMKaW5kZXggM2FjZjUxMi4uM2I1Mjc2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXRseC9hdGwxLmMKKysrIGIvZHJpdmVycy9uZXQvYXRseC9hdGwxLmMKQEAgLTIxNzQsNyArMjE3NCw3IEBACiAJdTggY3NzLCBjc287CiAKIAlpZiAobGlrZWx5KHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpKSB7Ci0JCWNzcyA9ICh1OCkgKHNrYi0+Y3N1bV9zdGFydCAtIHNrYl9oZWFkcm9vbShza2IpKTsKKwkJY3NzID0gc2tiX2NoZWNrc3VtX3N0YXJ0X29mZnNldChza2IpOwogCQljc28gPSBjc3MgKyAodTgpIHNrYi0+Y3N1bV9vZmZzZXQ7CiAJCWlmICh1bmxpa2VseShjc3MgJiAweDEpKSB7CiAJCQkvKiBMMSBoYXJkd2FyZSByZXF1aXJlcyBhbiBldmVuIG51bWJlciBoZXJlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdGx4L2F0bDIuYyBiL2RyaXZlcnMvbmV0L2F0bHgvYXRsMi5jCmluZGV4IDM1YjE0YmUuLjRlNmY0ZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F0bHgvYXRsMi5jCisrKyBiL2RyaXZlcnMvbmV0L2F0bHgvYXRsMi5jCkBAIC0xNTA0LDggKzE1MDQsOCBAQAogCiAJZGVsX3RpbWVyX3N5bmMoJmFkYXB0ZXItPndhdGNoZG9nX3RpbWVyKTsKIAlkZWxfdGltZXJfc3luYygmYWRhcHRlci0+cGh5X2NvbmZpZ190aW1lcik7Ci0KLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCWNhbmNlbF93b3JrX3N5bmMoJmFkYXB0ZXItPnJlc2V0X3Rhc2spOworCWNhbmNlbF93b3JrX3N5bmMoJmFkYXB0ZXItPmxpbmtfY2hnX3Rhc2spOwogCiAJdW5yZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXUxMDAwX2V0aC5jIGIvZHJpdmVycy9uZXQvYXUxMDAwX2V0aC5jCmluZGV4IDUzZWZmOWIuLmI5ZGViY2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F1MTAwMF9ldGguYworKysgYi9kcml2ZXJzL25ldC9hdTEwMDBfZXRoLmMKQEAgLTEwNiw4ICsxMDYsNiBAQAogICogY29tcGxldGUgaW1tZWRpYXRlbHkuCiAgKi8KIAotc3RydWN0IGF1MTAwMF9wcml2YXRlICphdV9tYWNzW05VTV9FVEhfSU5URVJGQUNFU107Ci0KIC8qCiAgKiBib2FyZC1zcGVjaWZpYyBjb25maWd1cmF0aW9ucwogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F4ODg3OTYuYyBiL2RyaXZlcnMvbmV0L2F4ODg3OTYuYwppbmRleCBiNmRhNGNmLi40YmViZmYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9heDg4Nzk2LmMKKysrIGIvZHJpdmVycy9uZXQvYXg4ODc5Ni5jCkBAIC0zMjUsNyArMzI1LDcgQEAKIHN0YXRpYyB2b2lkCiBheF9taWlfZWlfb3V0Yml0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgYml0cywgaW50IGxlbikKIHsKLQlzdHJ1Y3QgZWlfZGV2aWNlICplaV9sb2NhbCA9IChzdHJ1Y3QgZWlfZGV2aWNlICopIG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGVpX2RldmljZSAqZWlfbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwogCXZvaWQgX19pb21lbSAqbWVtcl9hZGRyID0gKHZvaWQgX19pb21lbSAqKWRldi0+YmFzZV9hZGRyICsgQVhfTUVNUjsKIAl1bnNpZ25lZCBpbnQgbWVtcjsKIApAQCAtMzY0LDcgKzM2NCw3IEBACiBzdGF0aWMgdW5zaWduZWQgaW50CiBheF9waHlfZWlfaW5iaXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBubykKIHsKLQlzdHJ1Y3QgZWlfZGV2aWNlICplaV9sb2NhbCA9IChzdHJ1Y3QgZWlfZGV2aWNlICopIG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGVpX2RldmljZSAqZWlfbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwogCXZvaWQgX19pb21lbSAqbWVtcl9hZGRyID0gKHZvaWQgX19pb21lbSAqKWRldi0+YmFzZV9hZGRyICsgQVhfTUVNUjsKIAl1bnNpZ25lZCBpbnQgbWVtcjsKIAl1bnNpZ25lZCBpbnQgcmVzdWx0ID0gMDsKQEAgLTQxMiw3ICs0MTIsNyBAQAogc3RhdGljIGludAogYXhfcGh5X3JlYWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9hZGRyLCBpbnQgcmVnKQogewotCXN0cnVjdCBlaV9kZXZpY2UgKmVpX2xvY2FsID0gKHN0cnVjdCBlaV9kZXZpY2UgKikgbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZWlfZGV2aWNlICplaV9sb2NhbCA9IG5ldGRldl9wcml2KGRldik7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKICAJdW5zaWduZWQgaW50IHJlc3VsdDsKIApAQCAtNDM1LDcgKzQzNSw3IEBACiBzdGF0aWMgdm9pZAogYXhfcGh5X3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfYWRkciwgaW50IHJlZywgaW50IHZhbHVlKQogewotCXN0cnVjdCBlaV9kZXZpY2UgKmVpID0gKHN0cnVjdCBlaV9kZXZpY2UgKikgbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZWlfZGV2aWNlICplaSA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IGF4X2RldmljZSAgKmF4ID0gdG9fYXhfZGV2KGRldik7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYmNtNjN4eF9lbmV0LmMgYi9kcml2ZXJzL25ldC9iY202M3h4X2VuZXQuYwppbmRleCBlY2ZlZjI0Li5lOTRhOTY2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYmNtNjN4eF9lbmV0LmMKKysrIGIvZHJpdmVycy9uZXQvYmNtNjN4eF9lbmV0LmMKQEAgLTEwOTcsNyArMTA5Nyw3IEBACiAJZW5ldF9kbWFfd3JpdGVsKHByaXYsIDAsIEVORVRETUFfSVJNQVNLX1JFRyhwcml2LT50eF9jaGFuKSk7CiAKIAkvKiBtYWtlIHN1cmUgbm8gbWliIHVwZGF0ZSBpcyBzY2hlZHVsZWQgKi8KLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCWNhbmNlbF93b3JrX3N5bmMoJnByaXYtPm1pYl91cGRhdGVfdGFzayk7CiAKIAkvKiBkaXNhYmxlIGRtYSAmIG1hYyAqLwogCWJjbV9lbmV0X2Rpc2FibGVfZG1hKHByaXYsIHByaXYtPnR4X2NoYW4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYmVuZXQvYmUuaCBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlLmgKaW5kZXggZDY0MzEzYi4uYWRkMGI5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYmVuZXQvYmUuaAorKysgYi9kcml2ZXJzL25ldC9iZW5ldC9iZS5oCkBAIC0zOCwxNCArMzgsMTcgQEAKICNkZWZpbmUgQkVfTkFNRQkJCSJTZXJ2ZXJFbmdpbmVzIEJsYWRlRW5naW5lMiAxMEdicHMgTklDIgogI2RlZmluZSBCRTNfTkFNRQkJIlNlcnZlckVuZ2luZXMgQmxhZGVFbmdpbmUzIDEwR2JwcyBOSUMiCiAjZGVmaW5lIE9DX05BTUUJCQkiRW11bGV4IE9uZUNvbm5lY3QgMTBHYnBzIE5JQyIKLSNkZWZpbmUgT0NfTkFNRTEJCSJFbXVsZXggT25lQ29ubmVjdCAxMEdicHMgTklDIChiZTMpIgorI2RlZmluZSBPQ19OQU1FX0JFCQlPQ19OQU1FCSIoYmUzKSIKKyNkZWZpbmUgT0NfTkFNRV9MQU5DRVIJCU9DX05BTUUgIihMYW5jZXIpIgogI2RlZmluZSBEUlZfREVTQwkJIlNlcnZlckVuZ2luZXMgQmxhZGVFbmdpbmUgMTBHYnBzIE5JQyBEcml2ZXIiCiAKICNkZWZpbmUgQkVfVkVORE9SX0lEIAkJMHgxOWEyCisjZGVmaW5lIEVNVUxFWF9WRU5ET1JfSUQJMHgxMGRmCiAjZGVmaW5lIEJFX0RFVklDRV9JRDEJCTB4MjExCiAjZGVmaW5lIEJFX0RFVklDRV9JRDIJCTB4MjIxCi0jZGVmaW5lIE9DX0RFVklDRV9JRDEJCTB4NzAwCi0jZGVmaW5lIE9DX0RFVklDRV9JRDIJCTB4NzEwCisjZGVmaW5lIE9DX0RFVklDRV9JRDEJCTB4NzAwCS8qIERldmljZSBJZCBmb3IgQkUyIGNhcmRzICovCisjZGVmaW5lIE9DX0RFVklDRV9JRDIJCTB4NzEwCS8qIERldmljZSBJZCBmb3IgQkUzIGNhcmRzICovCisjZGVmaW5lIE9DX0RFVklDRV9JRDMJCTB4ZTIyMAkvKiBEZXZpY2UgaWQgZm9yIExhbmNlciBjYXJkcyAqLwogCiBzdGF0aWMgaW5saW5lIGNoYXIgKm5pY19uYW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewpAQCAtNTMsNyArNTYsOSBAQAogCWNhc2UgT0NfREVWSUNFX0lEMToKIAkJcmV0dXJuIE9DX05BTUU7CiAJY2FzZSBPQ19ERVZJQ0VfSUQyOgotCQlyZXR1cm4gT0NfTkFNRTE7CisJCXJldHVybiBPQ19OQU1FX0JFOworCWNhc2UgT0NfREVWSUNFX0lEMzoKKwkJcmV0dXJuIE9DX05BTUVfTEFOQ0VSOwogCWNhc2UgQkVfREVWSUNFX0lEMjoKIAkJcmV0dXJuIEJFM19OQU1FOwogCWRlZmF1bHQ6CkBAIC0xNDksNiArMTU0LDcgQEAKIAl1MTYgbWluX2VxZDsJCS8qIGluIHVzZWNzICovCiAJdTE2IG1heF9lcWQ7CQkvKiBpbiB1c2VjcyAqLwogCXUxNiBjdXJfZXFkOwkJLyogaW4gdXNlY3MgKi8KKwl1OCAgbXNpeF92ZWNfaWR4OwogCiAJc3RydWN0IG5hcGlfc3RydWN0IG5hcGk7CiB9OwpAQCAtMjE0LDcgKzIyMCw5IEBACiAJc3RydWN0IGJlX3J4X3N0YXRzIHN0YXRzOwogCXU4IHJzc19pZDsKIAlib29sIHJ4X3Bvc3Rfc3RhcnZlZDsJLyogWmVybyByeCBmcmFncyBoYXZlIGJlZW4gcG9zdGVkIHRvIEJFICovCi0JdTMyIGNhY2hlX2xpbmVfYmFycmllclsxNl07CisJdTE2IGxhc3RfZnJhZ19pbmRleDsKKwl1MTYgcnN2ZDsKKwl1MzIgY2FjaGVfbGluZV9iYXJyaWVyWzE1XTsKIH07CiAKIHN0cnVjdCBiZV92Zl9jZmcgewpAQCAtMjYwLDYgKzI2OCw4IEBACiAJdTMyIG51bV9yeF9xczsKIAl1MzIgYmlnX3BhZ2Vfc2l6ZTsJLyogQ29tcG91bmRlZCBwYWdlIHNpemUgc2hhcmVkIGJ5IHJ4IHdyYnMgKi8KIAorCXU4IG1zaXhfdmVjX25leHRfaWR4OworCiAJc3RydWN0IHZsYW5fZ3JvdXAgKnZsYW5fZ3JwOwogCXUxNiB2bGFuc19hZGRlZDsKIAl1MTYgbWF4X3ZsYW5zOwkvKiBOdW1iZXIgb2YgdmxhbnMgc3VwcG9ydGVkICovCkBAIC0yOTksOCArMzA5LDggQEAKIAogCWJvb2wgc3Jpb3ZfZW5hYmxlZDsKIAlzdHJ1Y3QgYmVfdmZfY2ZnIHZmX2NmZ1tCRV9NQVhfVkZdOwotCXU4IGJhc2VfZXFfaWQ7CiAJdTggaXNfdmlydGZuOworCXUzMiBzbGlfZmFtaWx5OwogfTsKIAogI2RlZmluZSBiZV9waHlzZm4oYWRhcHRlcikgKCFhZGFwdGVyLT5pc192aXJ0Zm4pCkBAIC0zMDksNiArMzE5LDggQEAKICNkZWZpbmUgQkVfR0VOMiAyCiAjZGVmaW5lIEJFX0dFTjMgMwogCisjZGVmaW5lIGxhbmNlcl9jaGlwKGFkYXB0ZXIpCQkoYWRhcHRlci0+cGRldi0+ZGV2aWNlID09IE9DX0RFVklDRV9JRDMpCisKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgYmVfZXRodG9vbF9vcHM7CiAKICNkZWZpbmUgdHhfc3RhdHMoYWRhcHRlcikJCSgmYWRhcHRlci0+dHhfc3RhdHMpCkBAIC00MTYsMTAgKzQyOCwxNyBAQAogc3RhdGljIGlubGluZSB2b2lkIGJlX2NoZWNrX3NyaW92X2ZuX3R5cGUoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJdTggZGF0YTsKKwl1MzIgc2xpX2ludGY7CiAKLQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoYWRhcHRlci0+cGRldiwgMHhGRSwgMHhBQSk7Ci0JcGNpX3JlYWRfY29uZmlnX2J5dGUoYWRhcHRlci0+cGRldiwgMHhGRSwgJmRhdGEpOwotCWFkYXB0ZXItPmlzX3ZpcnRmbiA9IChkYXRhICE9IDB4QUEpOworCWlmIChsYW5jZXJfY2hpcChhZGFwdGVyKSkgeworCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoYWRhcHRlci0+cGRldiwgU0xJX0lOVEZfUkVHX09GRlNFVCwKKwkJCQkJCQkJJnNsaV9pbnRmKTsKKwkJYWRhcHRlci0+aXNfdmlydGZuID0gKHNsaV9pbnRmICYgU0xJX0lOVEZfRlRfTUFTSykgPyAxIDogMDsKKwl9IGVsc2UgeworCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoYWRhcHRlci0+cGRldiwgMHhGRSwgMHhBQSk7CisJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGFkYXB0ZXItPnBkZXYsIDB4RkUsICZkYXRhKTsKKwkJYWRhcHRlci0+aXNfdmlydGZuID0gKGRhdGEgIT0gMHhBQSk7CisJfQogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgYmVfdmZfZXRoX2FkZHJfZ2VuZXJhdGUoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHU4ICptYWMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9iZW5ldC9iZV9jbWRzLmMgYi9kcml2ZXJzL25ldC9iZW5ldC9iZV9jbWRzLmMKaW5kZXggMWM4Yzc5Yy4uMGM3ODExZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYmVuZXQvYmVfY21kcy5jCisrKyBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2NtZHMuYwpAQCAtMzIzLDcgKzMyMywxMiBAQAogCiBzdGF0aWMgaW50IGJlX1BPU1Rfc3RhZ2VfZ2V0KHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1MTYgKnN0YWdlKQogewotCXUzMiBzZW0gPSBpb3JlYWQzMihhZGFwdGVyLT5jc3IgKyBNUFVfRVBfU0VNQVBIT1JFX09GRlNFVCk7CisJdTMyIHNlbTsKKworCWlmIChsYW5jZXJfY2hpcChhZGFwdGVyKSkKKwkJc2VtICA9IGlvcmVhZDMyKGFkYXB0ZXItPmRiICsgTVBVX0VQX1NFTUFQSE9SRV9JRl9UWVBFMl9PRkZTRVQpOworCWVsc2UKKwkJc2VtICA9IGlvcmVhZDMyKGFkYXB0ZXItPmNzciArIE1QVV9FUF9TRU1BUEhPUkVfT0ZGU0VUKTsKIAogCSpzdGFnZSA9IHNlbSAmIEVQX1NFTUFQSE9SRV9QT1NUX1NUQUdFX01BU0s7CiAJaWYgKChzZW0gPj4gRVBfU0VNQVBIT1JFX1BPU1RfRVJSX1NISUZUKSAmIEVQX1NFTUFQSE9SRV9QT1NUX0VSUl9NQVNLKQpAQCAtNjg1LDE2ICs2OTAsMzYgQEAKIAkJT1BDT0RFX0NPTU1PTl9DUV9DUkVBVEUsIHNpemVvZigqcmVxKSk7CiAKIAlyZXEtPm51bV9wYWdlcyA9ICBjcHVfdG9fbGUxNihQQUdFU180S19TUEFOTkVEKHFfbWVtLT52YSwgcV9tZW0tPnNpemUpKTsKKwlpZiAobGFuY2VyX2NoaXAoYWRhcHRlcikpIHsKKwkJcmVxLT5oZHIudmVyc2lvbiA9IDE7CisJCXJlcS0+cGFnZV9zaXplID0gMTsgLyogMSBmb3IgNEsgKi8KKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9jcV9jb250ZXh0X2xhbmNlciwgY29hbGVzY3dtLCBjdHh0LAorCQkJCQkJCQljb2FsZXNjZV93bSk7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfY3FfY29udGV4dF9sYW5jZXIsIG5vZGVsYXksIGN0eHQsCisJCQkJCQkJCW5vX2RlbGF5KTsKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9jcV9jb250ZXh0X2xhbmNlciwgY291bnQsIGN0eHQsCisJCQkJCQlfX2lsb2cyX3UzMihjcS0+bGVuLzI1NikpOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2NxX2NvbnRleHRfbGFuY2VyLCB2YWxpZCwgY3R4dCwgMSk7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfY3FfY29udGV4dF9sYW5jZXIsIGV2ZW50YWJsZSwKKwkJCQkJCQkJY3R4dCwgMSk7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfY3FfY29udGV4dF9sYW5jZXIsIGVxaWQsCisJCQkJCQkJCWN0eHQsIGVxLT5pZCk7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfY3FfY29udGV4dF9sYW5jZXIsIGFybWVkLCBjdHh0LCAxKTsKKwl9IGVsc2UgeworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2NxX2NvbnRleHRfYmUsIGNvYWxlc2N3bSwgY3R4dCwKKwkJCQkJCQkJY29hbGVzY2Vfd20pOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2NxX2NvbnRleHRfYmUsIG5vZGVsYXksCisJCQkJCQkJCWN0eHQsIG5vX2RlbGF5KTsKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9jcV9jb250ZXh0X2JlLCBjb3VudCwgY3R4dCwKKwkJCQkJCV9faWxvZzJfdTMyKGNxLT5sZW4vMjU2KSk7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfY3FfY29udGV4dF9iZSwgdmFsaWQsIGN0eHQsIDEpOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2NxX2NvbnRleHRfYmUsIHNvbGV2ZW50LAorCQkJCQkJCQljdHh0LCBzb2xfZXZ0cyk7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfY3FfY29udGV4dF9iZSwgZXZlbnRhYmxlLCBjdHh0LCAxKTsKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9jcV9jb250ZXh0X2JlLCBlcWlkLCBjdHh0LCBlcS0+aWQpOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2NxX2NvbnRleHRfYmUsIGFybWVkLCBjdHh0LCAxKTsKKwl9CiAKLQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2NxX2NvbnRleHQsIGNvYWxlc2N3bSwgY3R4dCwgY29hbGVzY2Vfd20pOwotCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfY3FfY29udGV4dCwgbm9kZWxheSwgY3R4dCwgbm9fZGVsYXkpOwotCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfY3FfY29udGV4dCwgY291bnQsIGN0eHQsCi0JCQlfX2lsb2cyX3UzMihjcS0+bGVuLzI1NikpOwotCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfY3FfY29udGV4dCwgdmFsaWQsIGN0eHQsIDEpOwotCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfY3FfY29udGV4dCwgc29sZXZlbnQsIGN0eHQsIHNvbF9ldnRzKTsKLQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2NxX2NvbnRleHQsIGV2ZW50YWJsZSwgY3R4dCwgMSk7Ci0JQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9jcV9jb250ZXh0LCBlcWlkLCBjdHh0LCBlcS0+aWQpOwotCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfY3FfY29udGV4dCwgYXJtZWQsIGN0eHQsIDEpOwogCWJlX2R3c19jcHVfdG9fbGUoY3R4dCwgc2l6ZW9mKHJlcS0+Y29udGV4dCkpOwogCiAJYmVfY21kX3BhZ2VfYWRkcnNfcHJlcGFyZShyZXEtPnBhZ2VzLCBBUlJBWV9TSVpFKHJlcS0+cGFnZXMpLCBxX21lbSk7CkBAIC03NDMsMTMgKzc2OCwyNyBAQAogCQkJT1BDT0RFX0NPTU1PTl9NQ0NfQ1JFQVRFX0VYVCwgc2l6ZW9mKCpyZXEpKTsKIAogCXJlcS0+bnVtX3BhZ2VzID0gY3B1X3RvX2xlMTYoUEFHRVNfNEtfU1BBTk5FRChxX21lbS0+dmEsIHFfbWVtLT5zaXplKSk7CisJaWYgKGxhbmNlcl9jaGlwKGFkYXB0ZXIpKSB7CisJCXJlcS0+aGRyLnZlcnNpb24gPSAxOworCQlyZXEtPmNxX2lkID0gY3B1X3RvX2xlMTYoY3EtPmlkKTsKIAotCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfbWNjX2NvbnRleHQsIHZhbGlkLCBjdHh0LCAxKTsKLQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX21jY19jb250ZXh0LCByaW5nX3NpemUsIGN0eHQsCi0JCWJlX2VuY29kZWRfcV9sZW4obWNjcS0+bGVuKSk7Ci0JQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9tY2NfY29udGV4dCwgY3FfaWQsIGN0eHQsIGNxLT5pZCk7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfbWNjX2NvbnRleHRfbGFuY2VyLCByaW5nX3NpemUsIGN0eHQsCisJCQkJCQliZV9lbmNvZGVkX3FfbGVuKG1jY3EtPmxlbikpOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX21jY19jb250ZXh0X2xhbmNlciwgdmFsaWQsIGN0eHQsIDEpOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX21jY19jb250ZXh0X2xhbmNlciwgYXN5bmNfY3FfaWQsCisJCQkJCQkJCWN0eHQsIGNxLT5pZCk7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfbWNjX2NvbnRleHRfbGFuY2VyLCBhc3luY19jcV92YWxpZCwKKwkJCQkJCQkJIGN0eHQsIDEpOworCisJfSBlbHNlIHsKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9tY2NfY29udGV4dF9iZSwgdmFsaWQsIGN0eHQsIDEpOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX21jY19jb250ZXh0X2JlLCByaW5nX3NpemUsIGN0eHQsCisJCQkJCQliZV9lbmNvZGVkX3FfbGVuKG1jY3EtPmxlbikpOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX21jY19jb250ZXh0X2JlLCBjcV9pZCwgY3R4dCwgY3EtPmlkKTsKKwl9CisKIAkvKiBTdWJzY3JpYmUgdG8gTGluayBTdGF0ZSBhbmQgR3JvdXAgNSBFdmVudHMoYml0cyAxIGFuZCA1IHNldCkgKi8KLQlyZXEtPmFzeW5jX2V2ZW50X2JpdG1hcFswXSB8PSAweDAwMDAwMDIyOworCXJlcS0+YXN5bmNfZXZlbnRfYml0bWFwWzBdID0gY3B1X3RvX2xlMzIoMHgwMDAwMDAyMik7CiAJYmVfZHdzX2NwdV90b19sZShjdHh0LCBzaXplb2YocmVxLT5jb250ZXh0KSk7CiAKIAliZV9jbWRfcGFnZV9hZGRyc19wcmVwYXJlKHJlcS0+cGFnZXMsIEFSUkFZX1NJWkUocmVxLT5wYWdlcyksIHFfbWVtKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2NtZHMuaCBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2NtZHMuaAppbmRleCA4NDY5ZmYwLi44M2QxNWM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9iZW5ldC9iZV9jbWRzLmgKKysrIGIvZHJpdmVycy9uZXQvYmVuZXQvYmVfY21kcy5oCkBAIC0zMDksNyArMzA5LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKiBDcmVhdGUgQ1EgKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogUHNldWRvIGFtYXAgZGVmaW5pdGlvbiBpbiB3aGljaCBlYWNoIGJpdCBvZiB0aGUgYWN0dWFsIHN0cnVjdHVyZSBpcyBkZWZpbmVkCiAgKiBhcyBhIGJ5dGU6IHVzZWQgdG8gY2FsY3VsYXRlIG9mZnNldC9zaGlmdC9tYXNrIG9mIGVhY2ggZmllbGQgKi8KLXN0cnVjdCBhbWFwX2NxX2NvbnRleHQgeworc3RydWN0IGFtYXBfY3FfY29udGV4dF9iZSB7CiAJdTggY2lkeFsxMV07CQkvKiBkd29yZCAwKi8KIAl1OCByc3ZkMDsJCS8qIGR3b3JkIDAqLwogCXU4IGNvYWxlc2N3bVsyXTsJLyogZHdvcmQgMCovCkBAIC0zMzIsMTQgKzMzMiwzMiBAQAogCXU4IHJzdmQ1WzMyXTsJCS8qIGR3b3JkIDMqLwogfSBfX3BhY2tlZDsKIAorc3RydWN0IGFtYXBfY3FfY29udGV4dF9sYW5jZXIgeworCXU4IHJzdmQwWzEyXTsJCS8qIGR3b3JkIDAqLworCXU4IGNvYWxlc2N3bVsyXTsJLyogZHdvcmQgMCovCisJdTggbm9kZWxheTsJCS8qIGR3b3JkIDAqLworCXU4IHJzdmQxWzEyXTsJCS8qIGR3b3JkIDAqLworCXU4IGNvdW50WzJdOwkJLyogZHdvcmQgMCovCisJdTggdmFsaWQ7CQkvKiBkd29yZCAwKi8KKwl1OCByc3ZkMjsJCS8qIGR3b3JkIDAqLworCXU4IGV2ZW50YWJsZTsJCS8qIGR3b3JkIDAqLworCXU4IGVxaWRbMTZdOwkJLyogZHdvcmQgMSovCisJdTggcnN2ZDNbMTVdOwkJLyogZHdvcmQgMSovCisJdTggYXJtZWQ7CQkvKiBkd29yZCAxKi8KKwl1OCByc3ZkNFszMl07CQkvKiBkd29yZCAyKi8KKwl1OCByc3ZkNVszMl07CQkvKiBkd29yZCAzKi8KK30gX19wYWNrZWQ7CisKIHN0cnVjdCBiZV9jbWRfcmVxX2NxX2NyZWF0ZSB7CiAJc3RydWN0IGJlX2NtZF9yZXFfaGRyIGhkcjsKIAl1MTYgbnVtX3BhZ2VzOwotCXUxNiByc3ZkMDsKLQl1OCBjb250ZXh0W3NpemVvZihzdHJ1Y3QgYW1hcF9jcV9jb250ZXh0KSAvIDhdOworCXU4IHBhZ2Vfc2l6ZTsKKwl1OCByc3ZkMDsKKwl1OCBjb250ZXh0W3NpemVvZihzdHJ1Y3QgYW1hcF9jcV9jb250ZXh0X2JlKSAvIDhdOwogCXN0cnVjdCBwaHlzX2FkZHIgcGFnZXNbOF07CiB9IF9fcGFja2VkOwogCisKIHN0cnVjdCBiZV9jbWRfcmVzcF9jcV9jcmVhdGUgewogCXN0cnVjdCBiZV9jbWRfcmVzcF9oZHIgaGRyOwogCXUxNiBjcV9pZDsKQEAgLTM0OSw3ICszNjcsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqIENyZWF0ZSBNQ0NRICoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIFBzZXVkbyBhbWFwIGRlZmluaXRpb24gaW4gd2hpY2ggZWFjaCBiaXQgb2YgdGhlIGFjdHVhbCBzdHJ1Y3R1cmUgaXMgZGVmaW5lZAogICogYXMgYSBieXRlOiB1c2VkIHRvIGNhbGN1bGF0ZSBvZmZzZXQvc2hpZnQvbWFzayBvZiBlYWNoIGZpZWxkICovCi1zdHJ1Y3QgYW1hcF9tY2NfY29udGV4dCB7CitzdHJ1Y3QgYW1hcF9tY2NfY29udGV4dF9iZSB7CiAJdTggY29uX2luZGV4WzE0XTsKIAl1OCByc3ZkMFsyXTsKIAl1OCByaW5nX3NpemVbNF07CkBAIC0zNjQsMTIgKzM4MiwyMyBAQAogCXU4IHJzdmQyWzMyXTsKIH0gX19wYWNrZWQ7CiAKK3N0cnVjdCBhbWFwX21jY19jb250ZXh0X2xhbmNlciB7CisJdTggYXN5bmNfY3FfaWRbMTZdOworCXU4IHJpbmdfc2l6ZVs0XTsKKwl1OCByc3ZkMFsxMl07CisJdTggcnN2ZDFbMzFdOworCXU4IHZhbGlkOworCXU4IGFzeW5jX2NxX3ZhbGlkWzFdOworCXU4IHJzdmQyWzMxXTsKKwl1OCByc3ZkM1szMl07Cit9IF9fcGFja2VkOworCiBzdHJ1Y3QgYmVfY21kX3JlcV9tY2NfY3JlYXRlIHsKIAlzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgaGRyOwogCXUxNiBudW1fcGFnZXM7Ci0JdTE2IHJzdmQwOworCXUxNiBjcV9pZDsKIAl1MzIgYXN5bmNfZXZlbnRfYml0bWFwWzFdOwotCXU4IGNvbnRleHRbc2l6ZW9mKHN0cnVjdCBhbWFwX21jY19jb250ZXh0KSAvIDhdOworCXU4IGNvbnRleHRbc2l6ZW9mKHN0cnVjdCBhbWFwX21jY19jb250ZXh0X2JlKSAvIDhdOwogCXN0cnVjdCBwaHlzX2FkZHIgcGFnZXNbOF07CiB9IF9fcGFja2VkOwogCkBAIC02MDUsNiArNjM0LDcgQEAKIAlzdHJ1Y3QgYmVfcnhmX3N0YXRzIHJ4ZjsKIAl1MzIgcnN2ZFs0OF07CiAJc3RydWN0IGJlX2VyeF9zdGF0cyBlcng7CisJdTMyIHJzdmQxWzZdOwogfTsKIAogc3RydWN0IGJlX2NtZF9yZXFfZ2V0X3N0YXRzIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2V0aHRvb2wuYwppbmRleCAwZjQ2MzY2Li5iNGJlMDI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9iZW5ldC9iZV9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvYmVuZXQvYmVfZXRodG9vbC5jCkBAIC01NDksNyArNTQ5LDkgQEAKIHsKIAlpbnQgcmV0LCBpOwogCXN0cnVjdCBiZV9kbWFfbWVtIGRkcmRtYV9jbWQ7Ci0JdTY0IHBhdHRlcm5bMl0gPSB7MHg1YTVhNWE1YTVhNWE1YTVhVUxMLCAweGE1YTVhNWE1YTVhNWE1YTVVTEx9OworCXN0YXRpYyBjb25zdCB1NjQgcGF0dGVyblsyXSA9IHsKKwkJMHg1YTVhNWE1YTVhNWE1YTVhVUxMLCAweGE1YTVhNWE1YTVhNWE1YTVVTEwKKwl9OwogCiAJZGRyZG1hX2NtZC5zaXplID0gc2l6ZW9mKHN0cnVjdCBiZV9jbWRfcmVxX2RkcmRtYV90ZXN0KTsKIAlkZHJkbWFfY21kLnZhID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwgZGRyZG1hX2NtZC5zaXplLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYmVuZXQvYmVfaHcuaCBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2h3LmgKaW5kZXggYTJlYzVkZi4uNDA5NmQ5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYmVuZXQvYmVfaHcuaAorKysgYi9kcml2ZXJzL25ldC9iZW5ldC9iZV9ody5oCkBAIC0zMiwxMCArMzIsMTIgQEAKICNkZWZpbmUgTVBVX0VQX0NPTlRST0wgCQkwCiAKIC8qKioqKioqKioqIE1QVSBzZW1waG9yZSAqKioqKioqKioqKioqKioqKiovCi0jZGVmaW5lIE1QVV9FUF9TRU1BUEhPUkVfT0ZGU0VUIAkweGFjCi0jZGVmaW5lIEVQX1NFTUFQSE9SRV9QT1NUX1NUQUdFX01BU0sJMHgwMDAwRkZGRgotI2RlZmluZSBFUF9TRU1BUEhPUkVfUE9TVF9FUlJfTUFTSwkweDEKLSNkZWZpbmUgRVBfU0VNQVBIT1JFX1BPU1RfRVJSX1NISUZUCTMxCisjZGVmaW5lIE1QVV9FUF9TRU1BUEhPUkVfT0ZGU0VUCQkweGFjCisjZGVmaW5lIE1QVV9FUF9TRU1BUEhPUkVfSUZfVFlQRTJfT0ZGU0VUCTB4NDAwCisjZGVmaW5lIEVQX1NFTUFQSE9SRV9QT1NUX1NUQUdFX01BU0sJCTB4MDAwMEZGRkYKKyNkZWZpbmUgRVBfU0VNQVBIT1JFX1BPU1RfRVJSX01BU0sJCTB4MQorI2RlZmluZSBFUF9TRU1BUEhPUkVfUE9TVF9FUlJfU0hJRlQJCTMxCisKIC8qIE1QVSBzZW1waG9yZSBQT1NUIHN0YWdlIHZhbHVlcyAqLwogI2RlZmluZSBQT1NUX1NUQUdFX0FXQUlUSU5HX0hPU1RfUkRZIAkweDEgLyogRlcgYXdhaXRpbmcgZ29haGVhZCBmcm9tIGhvc3QgKi8KICNkZWZpbmUgUE9TVF9TVEFHRV9IT1NUX1JEWSAJCTB4MiAvKiBIb3N0IGhhcyBnaXZlbiBnby1haGVkIHRvIEZXICovCkBAIC02Niw2ICs2OCwyOCBAQAogI2RlZmluZSBQQ0lDRkdfVUVfU1RBVFVTX0xPV19NQVNLCQkweEE4CiAjZGVmaW5lIFBDSUNGR19VRV9TVEFUVVNfSElfTUFTSwkJMHhBQwogCisvKioqKioqKiogU0xJX0lOVEYgKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFNMSV9JTlRGX1JFR19PRkZTRVQJCQkweDU4CisjZGVmaW5lIFNMSV9JTlRGX1ZBTElEX01BU0sJCQkweEUwMDAwMDAwCisjZGVmaW5lIFNMSV9JTlRGX1ZBTElECQkJCTB4QzAwMDAwMDAKKyNkZWZpbmUgU0xJX0lOVEZfSElOVDJfTUFTSwkJCTB4MUYwMDAwMDAKKyNkZWZpbmUgU0xJX0lOVEZfSElOVDJfU0hJRlQJCQkyNAorI2RlZmluZSBTTElfSU5URl9ISU5UMV9NQVNLCQkJMHgwMEZGMDAwMAorI2RlZmluZSBTTElfSU5URl9ISU5UMV9TSElGVAkJCTE2CisjZGVmaW5lIFNMSV9JTlRGX0ZBTUlMWV9NQVNLCQkJMHgwMDAwMEYwMAorI2RlZmluZSBTTElfSU5URl9GQU1JTFlfU0hJRlQJCQk4CisjZGVmaW5lIFNMSV9JTlRGX0lGX1RZUEVfTUFTSwkJCTB4MDAwMEYwMDAKKyNkZWZpbmUgU0xJX0lOVEZfSUZfVFlQRV9TSElGVAkJCTEyCisjZGVmaW5lIFNMSV9JTlRGX1JFVl9NQVNLCQkJMHgwMDAwMDBGMAorI2RlZmluZSBTTElfSU5URl9SRVZfU0hJRlQJCQk0CisjZGVmaW5lIFNMSV9JTlRGX0ZUX01BU0sJCQkweDAwMDAwMDAxCisKKworLyogU0xJIGZhbWlseSAqLworI2RlZmluZSBCRV9TTElfRkFNSUxZCQkweDAKKyNkZWZpbmUgTEFOQ0VSX0EwX1NMSV9GQU1JTFkJMHhBCisKKwogLyoqKioqKioqKiBJU1IwIFJlZ2lzdGVyIG9mZnNldCAqKioqKioqKioqLwogI2RlZmluZSBDRVZfSVNSMF9PRkZTRVQgCQkJMHhDMTgKICNkZWZpbmUgQ0VWX0lTUl9TSVpFCQkJCTQKQEAgLTczLDYgKzk3LDkgQEAKIC8qKioqKioqKiogRXZlbnQgUSBkb29yIGJlbGwgKioqKioqKioqKioqKi8KICNkZWZpbmUgREJfRVFfT0ZGU0VUCQkJREJfQ1FfT0ZGU0VUCiAjZGVmaW5lIERCX0VRX1JJTkdfSURfTUFTSwkJMHgxRkYJLyogYml0cyAwIC0gOCAqLworI2RlZmluZSBEQl9FUV9SSU5HX0lEX0VYVF9NQVNLCQkweDNlMDAgIC8qIGJpdHMgOS0xMyAqLworI2RlZmluZSBEQl9FUV9SSU5HX0lEX0VYVF9NQVNLX1NISUZUCSgyKSAvKiBxaWQgYml0cyA5LTEzIHBsYWNpbmcgYXQgMTEtMTUgKi8KKwogLyogQ2xlYXIgdGhlIGludGVycnVwdCBmb3IgdGhpcyBlcSAqLwogI2RlZmluZSBEQl9FUV9DTFJfU0hJRlQJCQkoOSkJLyogYml0IDkgKi8KIC8qIE11c3QgYmUgMSAqLwpAQCAtODUsNiArMTEyLDEwIEBACiAvKioqKioqKioqIENvbXBsIFEgZG9vciBiZWxsICoqKioqKioqKioqKiovCiAjZGVmaW5lIERCX0NRX09GRlNFVCAJCQkweDEyMAogI2RlZmluZSBEQl9DUV9SSU5HX0lEX01BU0sJCTB4M0ZGCS8qIGJpdHMgMCAtIDkgKi8KKyNkZWZpbmUgREJfQ1FfUklOR19JRF9FWFRfTUFTSwkJMHg3QzAwCS8qIGJpdHMgMTAtMTQgKi8KKyNkZWZpbmUgREJfQ1FfUklOR19JRF9FWFRfTUFTS19TSElGVAkoMSkJLyogcWlkIGJpdHMgMTAtMTQKKwkJCQkJCSBwbGFjaW5nIGF0IDExLTE1ICovCisKIC8qIE51bWJlciBvZiBldmVudCBlbnRyaWVzIHByb2Nlc3NlZCAqLwogI2RlZmluZSBEQl9DUV9OVU1fUE9QUEVEX1NISUZUCQkoMTYpIAkvKiBiaXRzIDE2IC0gMjggKi8KIC8qIFJlYXJtIGJpdCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYmVuZXQvYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvYmVuZXQvYmVfbWFpbi5jCmluZGV4IGZkMjUxYjUuLmRlNDBkM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlX21haW4uYworKysgYi9kcml2ZXJzL25ldC9iZW5ldC9iZV9tYWluLmMKQEAgLTQxLDYgKzQxLDcgQEAKIAl7IFBDSV9ERVZJQ0UoQkVfVkVORE9SX0lELCBCRV9ERVZJQ0VfSUQyKSB9LAogCXsgUENJX0RFVklDRShCRV9WRU5ET1JfSUQsIE9DX0RFVklDRV9JRDEpIH0sCiAJeyBQQ0lfREVWSUNFKEJFX1ZFTkRPUl9JRCwgT0NfREVWSUNFX0lEMikgfSwKKwl7IFBDSV9ERVZJQ0UoRU1VTEVYX1ZFTkRPUl9JRCwgT0NfREVWSUNFX0lEMyl9LAogCXsgMCB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGJlX2Rldl9pZHMpOwpAQCAtMTg4LDYgKzE4OSw4IEBACiB7CiAJdTMyIHZhbCA9IDA7CiAJdmFsIHw9IHFpZCAmIERCX0VRX1JJTkdfSURfTUFTSzsKKwl2YWwgfD0gKChxaWQgJiBEQl9FUV9SSU5HX0lEX0VYVF9NQVNLKSA8PAorCQkJREJfRVFfUklOR19JRF9FWFRfTUFTS19TSElGVCk7CiAKIAlpZiAoYWRhcHRlci0+ZWVoX2VycikKIAkJcmV0dXJuOwpAQCAtMjA1LDYgKzIwOCw4IEBACiB7CiAJdTMyIHZhbCA9IDA7CiAJdmFsIHw9IHFpZCAmIERCX0NRX1JJTkdfSURfTUFTSzsKKwl2YWwgfD0gKChxaWQgJiBEQl9DUV9SSU5HX0lEX0VYVF9NQVNLKSA8PAorCQkJREJfQ1FfUklOR19JRF9FWFRfTUFTS19TSElGVCk7CiAKIAlpZiAoYWRhcHRlci0+ZWVoX2VycikKIAkJcmV0dXJuOwpAQCAtNDA0LDcgKzQwOSw4IEBACiB9CiAKIC8qIERldGVybWluZSBudW1iZXIgb2YgV1JCIGVudHJpZXMgbmVlZGVkIHRvIHhtaXQgZGF0YSBpbiBhbiBza2IgKi8KLXN0YXRpYyB1MzIgd3JiX2NudF9mb3Jfc2tiKHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgKmR1bW15KQorc3RhdGljIHUzMiB3cmJfY250X2Zvcl9za2Ioc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCQkJCWJvb2wgKmR1bW15KQogewogCWludCBjbnQgPSAoc2tiLT5sZW4gPiBza2ItPmRhdGFfbGVuKTsKIApAQCAtNDEyLDEyICs0MTgsMTMgQEAKIAogCS8qIHRvIGFjY291bnQgZm9yIGhkciB3cmIgKi8KIAljbnQrKzsKLQlpZiAoY250ICYgMSkgeworCWlmIChsYW5jZXJfY2hpcChhZGFwdGVyKSB8fCAhKGNudCAmIDEpKSB7CisJCSpkdW1teSA9IGZhbHNlOworCX0gZWxzZSB7CiAJCS8qIGFkZCBhIGR1bW15IHRvIG1ha2UgaXQgYW4gZXZlbiBudW0gKi8KIAkJY250Kys7CiAJCSpkdW1teSA9IHRydWU7Ci0JfSBlbHNlCi0JCSpkdW1teSA9IGZhbHNlOworCX0KIAlCVUdfT04oY250ID4gQkVfTUFYX1RYX0ZSQUdfQ09VTlQpOwogCXJldHVybiBjbnQ7CiB9CkBAIC00NDMsOCArNDUwLDE4IEBACiAJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfZXRoX2hkcl93cmIsIGxzbywgaGRyLCAxKTsKIAkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9ldGhfaGRyX3dyYiwgbHNvX21zcywKIAkJCWhkciwgc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZSk7Ci0JCWlmIChza2JfaXNfZ3NvX3Y2KHNrYikpCisJCWlmIChza2JfaXNfZ3NvX3Y2KHNrYikgJiYgIWxhbmNlcl9jaGlwKGFkYXB0ZXIpKQogCQkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9ldGhfaGRyX3dyYiwgbHNvNiwgaGRyLCAxKTsKKwkJaWYgKGxhbmNlcl9jaGlwKGFkYXB0ZXIpICYmIGFkYXB0ZXItPnNsaV9mYW1pbHkgID09CisJCQkJCQkJTEFOQ0VSX0EwX1NMSV9GQU1JTFkpIHsKKwkJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfZXRoX2hkcl93cmIsIGlwY3MsIGhkciwgMSk7CisJCQlpZiAoaXNfdGNwX3BrdChza2IpKQorCQkJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfZXRoX2hkcl93cmIsCisJCQkJCQkJCXRjcGNzLCBoZHIsIDEpOworCQkJZWxzZSBpZiAoaXNfdWRwX3BrdChza2IpKQorCQkJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfZXRoX2hkcl93cmIsCisJCQkJCQkJCXVkcGNzLCBoZHIsIDEpOworCQl9CiAJfSBlbHNlIGlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7CiAJCWlmIChpc190Y3BfcGt0KHNrYikpCiAJCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2V0aF9oZHJfd3JiLCB0Y3BjcywgaGRyLCAxKTsKQEAgLTU2Niw3ICs1ODMsNyBAQAogCXUzMiBzdGFydCA9IHR4cS0+aGVhZDsKIAlib29sIGR1bW15X3dyYiwgc3RvcHBlZCA9IGZhbHNlOwogCi0Jd3JiX2NudCA9IHdyYl9jbnRfZm9yX3NrYihza2IsICZkdW1teV93cmIpOworCXdyYl9jbnQgPSB3cmJfY250X2Zvcl9za2IoYWRhcHRlciwgc2tiLCAmZHVtbXlfd3JiKTsKIAogCWNvcGllZCA9IG1ha2VfdHhfd3JicyhhZGFwdGVyLCBza2IsIHdyYl9jbnQsIGR1bW15X3dyYik7CiAJaWYgKGNvcGllZCkgewpAQCAtODk0LDExICs5MTEsMTcgQEAKIAlyeHFfaWR4ID0gQU1BUF9HRVRfQklUUyhzdHJ1Y3QgYW1hcF9ldGhfcnhfY29tcGwsIGZyYWduZHgsIHJ4Y3ApOwogCW51bV9yY3ZkID0gQU1BUF9HRVRfQklUUyhzdHJ1Y3QgYW1hcF9ldGhfcnhfY29tcGwsIG51bWZyYWdzLCByeGNwKTsKIAotCWZvciAoaSA9IDA7IGkgPCBudW1fcmN2ZDsgaSsrKSB7Ci0JCXBhZ2VfaW5mbyA9IGdldF9yeF9wYWdlX2luZm8oYWRhcHRlciwgcnhvLCByeHFfaWR4KTsKLQkJcHV0X3BhZ2UocGFnZV9pbmZvLT5wYWdlKTsKLQkJbWVtc2V0KHBhZ2VfaW5mbywgMCwgc2l6ZW9mKCpwYWdlX2luZm8pKTsKLQkJaW5kZXhfaW5jKCZyeHFfaWR4LCByeHEtPmxlbik7CisJIC8qIFNraXAgb3V0LW9mLWJ1ZmZlciBjb21wbChsYW5jZXIpIG9yIGZsdXNoIGNvbXBsKEJFKSAqLworCWlmIChsaWtlbHkocnhxX2lkeCAhPSByeG8tPmxhc3RfZnJhZ19pbmRleCAmJiBudW1fcmN2ZCAhPSAwKSkgeworCisJCXJ4by0+bGFzdF9mcmFnX2luZGV4ID0gcnhxX2lkeDsKKworCQlmb3IgKGkgPSAwOyBpIDwgbnVtX3JjdmQ7IGkrKykgeworCQkJcGFnZV9pbmZvID0gZ2V0X3J4X3BhZ2VfaW5mbyhhZGFwdGVyLCByeG8sIHJ4cV9pZHgpOworCQkJcHV0X3BhZ2UocGFnZV9pbmZvLT5wYWdlKTsKKwkJCW1lbXNldChwYWdlX2luZm8sIDAsIHNpemVvZigqcGFnZV9pbmZvKSk7CisJCQlpbmRleF9pbmMoJnJ4cV9pZHgsIHJ4cS0+bGVuKTsKKwkJfQogCX0KIH0KIApAQCAtOTk5LDkgKzEwMjIsNiBAQAogCXU4IHZ0bTsKIAogCW51bV9yY3ZkID0gQU1BUF9HRVRfQklUUyhzdHJ1Y3QgYW1hcF9ldGhfcnhfY29tcGwsIG51bWZyYWdzLCByeGNwKTsKLQkvKiBJcyBpdCBhIGZsdXNoIGNvbXBsIHRoYXQgaGFzIG5vIGRhdGEgKi8KLQlpZiAodW5saWtlbHkobnVtX3JjdmQgPT0gMCkpCi0JCXJldHVybjsKIAogCXNrYiA9IG5ldGRldl9hbGxvY19za2JfaXBfYWxpZ24oYWRhcHRlci0+bmV0ZGV2LCBCRV9IRFJfTEVOKTsKIAlpZiAodW5saWtlbHkoIXNrYikpIHsKQEAgLTEwMzUsNyArMTA1NSw4IEBACiAJCQlyZXR1cm47CiAJCX0KIAkJdmlkID0gQU1BUF9HRVRfQklUUyhzdHJ1Y3QgYW1hcF9ldGhfcnhfY29tcGwsIHZsYW5fdGFnLCByeGNwKTsKLQkJdmlkID0gc3dhYjE2KHZpZCk7CisJCWlmICghbGFuY2VyX2NoaXAoYWRhcHRlcikpCisJCQl2aWQgPSBzd2FiMTYodmlkKTsKIAkJdmxhbl9od2FjY2VsX3JlY2VpdmVfc2tiKHNrYiwgYWRhcHRlci0+dmxhbl9ncnAsIHZpZCk7CiAJfSBlbHNlIHsKIAkJbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKQEAgLTEwNTcsMTAgKzEwNzgsNiBAQAogCXU4IHBrdF90eXBlOwogCiAJbnVtX3JjdmQgPSBBTUFQX0dFVF9CSVRTKHN0cnVjdCBhbWFwX2V0aF9yeF9jb21wbCwgbnVtZnJhZ3MsIHJ4Y3ApOwotCS8qIElzIGl0IGEgZmx1c2ggY29tcGwgdGhhdCBoYXMgbm8gZGF0YSAqLwotCWlmICh1bmxpa2VseShudW1fcmN2ZCA9PSAwKSkKLQkJcmV0dXJuOwotCiAJcGt0X3NpemUgPSBBTUFQX0dFVF9CSVRTKHN0cnVjdCBhbWFwX2V0aF9yeF9jb21wbCwgcGt0c2l6ZSwgcnhjcCk7CiAJdmxhbmYgPSBBTUFQX0dFVF9CSVRTKHN0cnVjdCBhbWFwX2V0aF9yeF9jb21wbCwgdnRwLCByeGNwKTsKIAlyeHFfaWR4ID0gQU1BUF9HRVRfQklUUyhzdHJ1Y3QgYW1hcF9ldGhfcnhfY29tcGwsIGZyYWduZHgsIHJ4Y3ApOwpAQCAtMTExMyw3ICsxMTMwLDggQEAKIAkJbmFwaV9ncm9fZnJhZ3MoJmVxX29iai0+bmFwaSk7CiAJfSBlbHNlIHsKIAkJdmlkID0gQU1BUF9HRVRfQklUUyhzdHJ1Y3QgYW1hcF9ldGhfcnhfY29tcGwsIHZsYW5fdGFnLCByeGNwKTsKLQkJdmlkID0gc3dhYjE2KHZpZCk7CisJCWlmICghbGFuY2VyX2NoaXAoYWRhcHRlcikpCisJCQl2aWQgPSBzd2FiMTYodmlkKTsKIAogCQlpZiAoIWFkYXB0ZXItPnZsYW5fZ3JwIHx8IGFkYXB0ZXItPnZsYW5zX2FkZGVkID09IDApCiAJCQlyZXR1cm47CkBAIC0xMzMwLDcgKzEzNDgsNyBAQAogCXdoaWxlICgocnhjcCA9IGJlX3J4X2NvbXBsX2dldChyeG8pKSAhPSBOVUxMKSB7CiAJCWJlX3J4X2NvbXBsX2Rpc2NhcmQoYWRhcHRlciwgcnhvLCByeGNwKTsKIAkJYmVfcnhfY29tcGxfcmVzZXQocnhjcCk7Ci0JCWJlX2NxX25vdGlmeShhZGFwdGVyLCByeF9jcS0+aWQsIHRydWUsIDEpOworCQliZV9jcV9ub3RpZnkoYWRhcHRlciwgcnhfY3EtPmlkLCBmYWxzZSwgMSk7CiAJfQogCiAJLyogVGhlbiBmcmVlIHBvc3RlZCByeCBidWZmZXIgdGhhdCB3ZXJlIG5vdCB1c2VkICovCkBAIC0xMzgxLDcgKzEzOTksOCBAQAogCQlzZW50X3NrYiA9IHNlbnRfc2tic1t0eHEtPnRhaWxdOwogCQllbmRfaWR4ID0gdHhxLT50YWlsOwogCQlpbmRleF9hZHYoJmVuZF9pZHgsCi0JCQl3cmJfY250X2Zvcl9za2Ioc2VudF9za2IsICZkdW1teV93cmIpIC0gMSwgdHhxLT5sZW4pOworCQkJd3JiX2NudF9mb3Jfc2tiKGFkYXB0ZXIsIHNlbnRfc2tiLCAmZHVtbXlfd3JiKSAtIDEsCisJCQl0eHEtPmxlbik7CiAJCWJlX3R4X2NvbXBsX3Byb2Nlc3MoYWRhcHRlciwgZW5kX2lkeCk7CiAJfQogfQpAQCAtMTQ3Niw3ICsxNDk1LDkgQEAKIAkvKiBBc2sgQkUgdG8gY3JlYXRlIFR4IEV2ZW50IHF1ZXVlICovCiAJaWYgKGJlX2NtZF9lcV9jcmVhdGUoYWRhcHRlciwgZXEsIGFkYXB0ZXItPnR4X2VxLmN1cl9lcWQpKQogCQlnb3RvIHR4X2VxX2ZyZWU7Ci0JYWRhcHRlci0+YmFzZV9lcV9pZCA9IGFkYXB0ZXItPnR4X2VxLnEuaWQ7CisKKwlhZGFwdGVyLT50eF9lcS5tc2l4X3ZlY19pZHggPSBhZGFwdGVyLT5tc2l4X3ZlY19uZXh0X2lkeCsrOworCiAKIAkvKiBBbGxvYyBUWCBldGggY29tcGwgcXVldWUgKi8KIAljcSA9ICZhZGFwdGVyLT50eF9vYmouY3E7CkBAIC0xNTU0LDYgKzE1NzUsOSBAQAogCWFkYXB0ZXItPmJpZ19wYWdlX3NpemUgPSAoMSA8PCBnZXRfb3JkZXIocnhfZnJhZ19zaXplKSkgKiBQQUdFX1NJWkU7CiAJZm9yX2FsbF9yeF9xdWV1ZXMoYWRhcHRlciwgcnhvLCBpKSB7CiAJCXJ4by0+YWRhcHRlciA9IGFkYXB0ZXI7CisJCS8qIEluaXQgbGFzdF9mcmFnX2luZGV4IHNvIHRoYXQgdGhlIGZyYWcgaW5kZXggaW4gdGhlIGZpcnN0CisJCSAqIGNvbXBsZXRpb24gd2lsbCBuZXZlciBtYXRjaCAqLworCQlyeG8tPmxhc3RfZnJhZ19pbmRleCA9IDB4ZmZmZjsKIAkJcnhvLT5yeF9lcS5tYXhfZXFkID0gQkVfTUFYX0VRRDsKIAkJcnhvLT5yeF9lcS5lbmFibGVfYWljID0gdHJ1ZTsKIApAQCAtMTU2OCw2ICsxNTkyLDggQEAKIAkJaWYgKHJjKQogCQkJZ290byBlcnI7CiAKKwkJcnhvLT5yeF9lcS5tc2l4X3ZlY19pZHggPSBhZGFwdGVyLT5tc2l4X3ZlY19uZXh0X2lkeCsrOworCiAJCS8qIENRICovCiAJCWNxID0gJnJ4by0+Y3E7CiAJCXJjID0gYmVfcXVldWVfYWxsb2MoYWRhcHRlciwgY3EsIFJYX0NRX0xFTiwKQEAgLTE1NzgsNyArMTYwNCw2IEBACiAJCXJjID0gYmVfY21kX2NxX2NyZWF0ZShhZGFwdGVyLCBjcSwgZXEsIGZhbHNlLCBmYWxzZSwgMyk7CiAJCWlmIChyYykKIAkJCWdvdG8gZXJyOwotCiAJCS8qIFJ4IFEgKi8KIAkJcSA9ICZyeG8tPnE7CiAJCXJjID0gYmVfcXVldWVfYWxsb2MoYWRhcHRlciwgcSwgUlhfUV9MRU4sCkBAIC0xNjExLDI5ICsxNjM2LDQ1IEBACiAJcmV0dXJuIC0xOwogfQogCi0vKiBUaGVyZSBhcmUgOCBldnQgaWRzIHBlciBmdW5jLiBSZXRydW5zIHRoZSBldnQgaWQncyBiaXQgbnVtYmVyICovCi1zdGF0aWMgaW5saW5lIGludCBiZV9ldnRfYml0X2dldChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgdTMyIGVxX2lkKQorc3RhdGljIGJvb2wgZXZlbnRfcGVlayhzdHJ1Y3QgYmVfZXFfb2JqICplcV9vYmopCiB7Ci0JcmV0dXJuIGVxX2lkIC0gYWRhcHRlci0+YmFzZV9lcV9pZDsKKwlzdHJ1Y3QgYmVfZXFfZW50cnkgKmVxZSA9IHF1ZXVlX3RhaWxfbm9kZSgmZXFfb2JqLT5xKTsKKwlpZiAoIWVxZS0+ZXZ0KQorCQlyZXR1cm4gZmFsc2U7CisJZWxzZQorCQlyZXR1cm4gdHJ1ZTsKIH0KIAogc3RhdGljIGlycXJldHVybl90IGJlX2ludHgoaW50IGlycSwgdm9pZCAqZGV2KQogewogCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0gZGV2OwogCXN0cnVjdCBiZV9yeF9vYmogKnJ4bzsKLQlpbnQgaXNyLCBpOworCWludCBpc3IsIGksIHR4ID0gMCAsIHJ4ID0gMDsKIAotCWlzciA9IGlvcmVhZDMyKGFkYXB0ZXItPmNzciArIENFVl9JU1IwX09GRlNFVCArCi0JCShhZGFwdGVyLT50eF9lcS5xLmlkLyA4KSAqIENFVl9JU1JfU0laRSk7Ci0JaWYgKCFpc3IpCi0JCXJldHVybiBJUlFfTk9ORTsKKwlpZiAobGFuY2VyX2NoaXAoYWRhcHRlcikpIHsKKwkJaWYgKGV2ZW50X3BlZWsoJmFkYXB0ZXItPnR4X2VxKSkKKwkJCXR4ID0gZXZlbnRfaGFuZGxlKGFkYXB0ZXIsICZhZGFwdGVyLT50eF9lcSk7CisJCWZvcl9hbGxfcnhfcXVldWVzKGFkYXB0ZXIsIHJ4bywgaSkgeworCQkJaWYgKGV2ZW50X3BlZWsoJnJ4by0+cnhfZXEpKQorCQkJCXJ4IHw9IGV2ZW50X2hhbmRsZShhZGFwdGVyLCAmcnhvLT5yeF9lcSk7CisJCX0KIAotCWlmICgoMSA8PCBiZV9ldnRfYml0X2dldChhZGFwdGVyLCBhZGFwdGVyLT50eF9lcS5xLmlkKSAmIGlzcikpCi0JCWV2ZW50X2hhbmRsZShhZGFwdGVyLCAmYWRhcHRlci0+dHhfZXEpOworCQlpZiAoISh0eCB8fCByeCkpCisJCQlyZXR1cm4gSVJRX05PTkU7CiAKLQlmb3JfYWxsX3J4X3F1ZXVlcyhhZGFwdGVyLCByeG8sIGkpIHsKLQkJaWYgKCgxIDw8IGJlX2V2dF9iaXRfZ2V0KGFkYXB0ZXIsIHJ4by0+cnhfZXEucS5pZCkgJiBpc3IpKQotCQkJZXZlbnRfaGFuZGxlKGFkYXB0ZXIsICZyeG8tPnJ4X2VxKTsKKwl9IGVsc2UgeworCQlpc3IgPSBpb3JlYWQzMihhZGFwdGVyLT5jc3IgKyBDRVZfSVNSMF9PRkZTRVQgKworCQkJKGFkYXB0ZXItPnR4X2VxLnEuaWQgLyA4KSAqIENFVl9JU1JfU0laRSk7CisJCWlmICghaXNyKQorCQkJcmV0dXJuIElSUV9OT05FOworCisJCWlmICgoMSA8PCBhZGFwdGVyLT50eF9lcS5tc2l4X3ZlY19pZHggJiBpc3IpKQorCQkJZXZlbnRfaGFuZGxlKGFkYXB0ZXIsICZhZGFwdGVyLT50eF9lcSk7CisKKwkJZm9yX2FsbF9yeF9xdWV1ZXMoYWRhcHRlciwgcnhvLCBpKSB7CisJCQlpZiAoKDEgPDwgcnhvLT5yeF9lcS5tc2l4X3ZlY19pZHggJiBpc3IpKQorCQkJCWV2ZW50X2hhbmRsZShhZGFwdGVyLCAmcnhvLT5yeF9lcSk7CisJCX0KIAl9CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CkBAIC0xNjU4LDEwICsxNjk5LDkgQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBkb19ncm8oc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBiZV9yeF9vYmogKnJ4bywKLQkJCXN0cnVjdCBiZV9ldGhfcnhfY29tcGwgKnJ4Y3ApCitzdGF0aWMgaW5saW5lIGJvb2wgZG9fZ3JvKHN0cnVjdCBiZV9yeF9vYmogKnJ4bywKKwkJCXN0cnVjdCBiZV9ldGhfcnhfY29tcGwgKnJ4Y3AsIHU4IGVycikKIHsKLQlpbnQgZXJyID0gQU1BUF9HRVRfQklUUyhzdHJ1Y3QgYW1hcF9ldGhfcnhfY29tcGwsIGVyciwgcnhjcCk7CiAJaW50IHRjcF9mcmFtZSA9IEFNQVBfR0VUX0JJVFMoc3RydWN0IGFtYXBfZXRoX3J4X2NvbXBsLCB0Y3BmLCByeGNwKTsKIAogCWlmIChlcnIpCkBAIC0xNjc4LDYgKzE3MTgsOCBAQAogCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICpyeF9jcSA9ICZyeG8tPmNxOwogCXN0cnVjdCBiZV9ldGhfcnhfY29tcGwgKnJ4Y3A7CiAJdTMyIHdvcmtfZG9uZTsKKwl1MTYgZnJhZ19pbmRleCwgbnVtX3JjdmQ7CisJdTggZXJyOwogCiAJcnhvLT5zdGF0cy5yeF9wb2xscysrOwogCWZvciAod29ya19kb25lID0gMDsgd29ya19kb25lIDwgYnVkZ2V0OyB3b3JrX2RvbmUrKykgewpAQCAtMTY4NSwxMCArMTcyNywyMiBAQAogCQlpZiAoIXJ4Y3ApCiAJCQlicmVhazsKIAotCQlpZiAoZG9fZ3JvKGFkYXB0ZXIsIHJ4bywgcnhjcCkpCi0JCQliZV9yeF9jb21wbF9wcm9jZXNzX2dybyhhZGFwdGVyLCByeG8sIHJ4Y3ApOwotCQllbHNlCi0JCQliZV9yeF9jb21wbF9wcm9jZXNzKGFkYXB0ZXIsIHJ4bywgcnhjcCk7CisJCWVyciA9IEFNQVBfR0VUX0JJVFMoc3RydWN0IGFtYXBfZXRoX3J4X2NvbXBsLCBlcnIsIHJ4Y3ApOworCQlmcmFnX2luZGV4ID0gQU1BUF9HRVRfQklUUyhzdHJ1Y3QgYW1hcF9ldGhfcnhfY29tcGwsIGZyYWduZHgsCisJCQkJCQkJCXJ4Y3ApOworCQludW1fcmN2ZCA9IEFNQVBfR0VUX0JJVFMoc3RydWN0IGFtYXBfZXRoX3J4X2NvbXBsLCBudW1mcmFncywKKwkJCQkJCQkJcnhjcCk7CisKKwkJLyogU2tpcCBvdXQtb2YtYnVmZmVyIGNvbXBsKGxhbmNlcikgb3IgZmx1c2ggY29tcGwoQkUpICovCisJCWlmIChsaWtlbHkoZnJhZ19pbmRleCAhPSByeG8tPmxhc3RfZnJhZ19pbmRleCAmJgorCQkJCW51bV9yY3ZkICE9IDApKSB7CisJCQlyeG8tPmxhc3RfZnJhZ19pbmRleCA9IGZyYWdfaW5kZXg7CisKKwkJCWlmIChkb19ncm8ocnhvLCByeGNwLCBlcnIpKQorCQkJCWJlX3J4X2NvbXBsX3Byb2Nlc3NfZ3JvKGFkYXB0ZXIsIHJ4bywgcnhjcCk7CisJCQllbHNlCisJCQkJYmVfcnhfY29tcGxfcHJvY2VzcyhhZGFwdGVyLCByeG8sIHJ4Y3ApOworCQl9CiAKIAkJYmVfcnhfY29tcGxfcmVzZXQocnhjcCk7CiAJfQpAQCAtMTgzMCw4ICsxODg0LDcgQEAKIAkJCWJlX3Bvc3RfcnhfZnJhZ3MocnhvKTsKIAkJfQogCX0KLQotCWlmICghYWRhcHRlci0+dWVfZGV0ZWN0ZWQpCisJaWYgKCFhZGFwdGVyLT51ZV9kZXRlY3RlZCAmJiAhbGFuY2VyX2NoaXAoYWRhcHRlcikpCiAJCWJlX2RldGVjdF9kdW1wX3VlKGFkYXB0ZXIpOwogCiByZXNjaGVkdWxlOgpAQCAtMTkxMCwxMCArMTk2MywxMCBAQAogI2VuZGlmCiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGJlX21zaXhfdmVjX2dldChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgdTMyIGVxX2lkKQorc3RhdGljIGlubGluZSBpbnQgYmVfbXNpeF92ZWNfZ2V0KHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLAorCQkJCQlzdHJ1Y3QgYmVfZXFfb2JqICplcV9vYmopCiB7Ci0JcmV0dXJuIGFkYXB0ZXItPm1zaXhfZW50cmllc1sKLQkJCWJlX2V2dF9iaXRfZ2V0KGFkYXB0ZXIsIGVxX2lkKV0udmVjdG9yOworCXJldHVybiBhZGFwdGVyLT5tc2l4X2VudHJpZXNbZXFfb2JqLT5tc2l4X3ZlY19pZHhdLnZlY3RvcjsKIH0KIAogc3RhdGljIGludCBiZV9yZXF1ZXN0X2lycShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwKQEAgLTE5MjQsMTQgKzE5NzcsMTQgQEAKIAlpbnQgdmVjOwogCiAJc3ByaW50ZihlcV9vYmotPmRlc2MsICIlcy0lcyIsIG5ldGRldi0+bmFtZSwgZGVzYyk7Ci0JdmVjID0gYmVfbXNpeF92ZWNfZ2V0KGFkYXB0ZXIsIGVxX29iai0+cS5pZCk7CisJdmVjID0gYmVfbXNpeF92ZWNfZ2V0KGFkYXB0ZXIsIGVxX29iaik7CiAJcmV0dXJuIHJlcXVlc3RfaXJxKHZlYywgaGFuZGxlciwgMCwgZXFfb2JqLT5kZXNjLCBjb250ZXh0KTsKIH0KIAogc3RhdGljIHZvaWQgYmVfZnJlZV9pcnEoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBiZV9lcV9vYmogKmVxX29iaiwKIAkJCXZvaWQgKmNvbnRleHQpCiB7Ci0JaW50IHZlYyA9IGJlX21zaXhfdmVjX2dldChhZGFwdGVyLCBlcV9vYmotPnEuaWQpOworCWludCB2ZWMgPSBiZV9tc2l4X3ZlY19nZXQoYWRhcHRlciwgZXFfb2JqKTsKIAlmcmVlX2lycSh2ZWMsIGNvbnRleHQpOwogfQogCkBAIC0yMDM2LDE0ICsyMDg5LDE1IEBACiAJbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKIAlhZGFwdGVyLT5saW5rX3VwID0gZmFsc2U7CiAKLQliZV9pbnRyX3NldChhZGFwdGVyLCBmYWxzZSk7CisJaWYgKCFsYW5jZXJfY2hpcChhZGFwdGVyKSkKKwkJYmVfaW50cl9zZXQoYWRhcHRlciwgZmFsc2UpOwogCiAJaWYgKGFkYXB0ZXItPm1zaXhfZW5hYmxlZCkgewotCQl2ZWMgPSBiZV9tc2l4X3ZlY19nZXQoYWRhcHRlciwgdHhfZXEtPnEuaWQpOworCQl2ZWMgPSBiZV9tc2l4X3ZlY19nZXQoYWRhcHRlciwgdHhfZXEpOwogCQlzeW5jaHJvbml6ZV9pcnEodmVjKTsKIAogCQlmb3JfYWxsX3J4X3F1ZXVlcyhhZGFwdGVyLCByeG8sIGkpIHsKLQkJCXZlYyA9IGJlX21zaXhfdmVjX2dldChhZGFwdGVyLCByeG8tPnJ4X2VxLnEuaWQpOworCQkJdmVjID0gYmVfbXNpeF92ZWNfZ2V0KGFkYXB0ZXIsICZyeG8tPnJ4X2VxKTsKIAkJCXN5bmNocm9uaXplX2lycSh2ZWMpOwogCQl9CiAJfSBlbHNlIHsKQEAgLTIwODIsNyArMjEzNiw4IEBACiAKIAliZV9pcnFfcmVnaXN0ZXIoYWRhcHRlcik7CiAKLQliZV9pbnRyX3NldChhZGFwdGVyLCB0cnVlKTsKKwlpZiAoIWxhbmNlcl9jaGlwKGFkYXB0ZXIpKQorCQliZV9pbnRyX3NldChhZGFwdGVyLCB0cnVlKTsKIAogCS8qIFRoZSBldnQgcXVldWVzIGFyZSBjcmVhdGVkIGluIHVuYXJtZWQgc3RhdGU7IGFybSB0aGVtICovCiAJZm9yX2FsbF9yeF9xdWV1ZXMoYWRhcHRlciwgcnhvLCBpKSB7CkBAIC0yMzQzLDEwICsyMzk4LDEwIEBACiAJaW50IG51bV9ieXRlczsKIAljb25zdCB1OCAqcCA9IGZ3LT5kYXRhOwogCXN0cnVjdCBiZV9jbWRfd3JpdGVfZmxhc2hyb20gKnJlcSA9IGZsYXNoX2NtZC0+dmE7Ci0Jc3RydWN0IGZsYXNoX2NvbXAgKnBmbGFzaGNvbXA7CisJY29uc3Qgc3RydWN0IGZsYXNoX2NvbXAgKnBmbGFzaGNvbXA7CiAJaW50IG51bV9jb21wOwogCi0Jc3RydWN0IGZsYXNoX2NvbXAgZ2VuM19mbGFzaF90eXBlc1s5XSA9IHsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGZsYXNoX2NvbXAgZ2VuM19mbGFzaF90eXBlc1s5XSA9IHsKIAkJeyBGTEFTSF9pU0NTSV9QUklNQVJZX0lNQUdFX1NUQVJUX2czLCBJTUdfVFlQRV9JU0NTSV9BQ1RJVkUsCiAJCQlGTEFTSF9JTUFHRV9NQVhfU0laRV9nM30sCiAJCXsgRkxBU0hfUkVEQk9PVF9TVEFSVF9nMywgSU1HX1RZUEVfUkVEQk9PVCwKQEAgLTIzNjYsNyArMjQyMSw3IEBACiAJCXsgRkxBU0hfTkNTSV9TVEFSVF9nMywgSU1HX1RZUEVfTkNTSV9GVywKIAkJCUZMQVNIX05DU0lfSU1BR0VfTUFYX1NJWkVfZzN9CiAJfTsKLQlzdHJ1Y3QgZmxhc2hfY29tcCBnZW4yX2ZsYXNoX3R5cGVzWzhdID0geworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmxhc2hfY29tcCBnZW4yX2ZsYXNoX3R5cGVzWzhdID0gewogCQl7IEZMQVNIX2lTQ1NJX1BSSU1BUllfSU1BR0VfU1RBUlRfZzIsIElNR19UWVBFX0lTQ1NJX0FDVElWRSwKIAkJCUZMQVNIX0lNQUdFX01BWF9TSVpFX2cyfSwKIAkJeyBGTEFTSF9SRURCT09UX1NUQVJUX2cyLCBJTUdfVFlQRV9SRURCT09ULApAQCAtMjM4OCwxMSArMjQ0MywxMSBAQAogCWlmIChhZGFwdGVyLT5nZW5lcmF0aW9uID09IEJFX0dFTjMpIHsKIAkJcGZsYXNoY29tcCA9IGdlbjNfZmxhc2hfdHlwZXM7CiAJCWZpbGVoZHJfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgZmxhc2hfZmlsZV9oZHJfZzMpOwotCQludW1fY29tcCA9IDk7CisJCW51bV9jb21wID0gQVJSQVlfU0laRShnZW4zX2ZsYXNoX3R5cGVzKTsKIAl9IGVsc2UgewogCQlwZmxhc2hjb21wID0gZ2VuMl9mbGFzaF90eXBlczsKIAkJZmlsZWhkcl9zaXplID0gc2l6ZW9mKHN0cnVjdCBmbGFzaF9maWxlX2hkcl9nMik7Ci0JCW51bV9jb21wID0gODsKKwkJbnVtX2NvbXAgPSBBUlJBWV9TSVpFKGdlbjJfZmxhc2hfdHlwZXMpOwogCX0KIAlmb3IgKGkgPSAwOyBpIDwgbnVtX2NvbXA7IGkrKykgewogCQlpZiAoKHBmbGFzaGNvbXBbaV0ub3B0eXBlID09IElNR19UWVBFX05DU0lfRlcpICYmCkBAIC0yNTQzLDEwICsyNTk4LDE1IEBACiAJaW50IGk7CiAKIAluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0hXX1ZMQU5fUlggfCBORVRJRl9GX1RTTyB8Ci0JCU5FVElGX0ZfSFdfVkxBTl9UWCB8IE5FVElGX0ZfSFdfVkxBTl9GSUxURVIgfCBORVRJRl9GX0hXX0NTVU0gfAorCQlORVRJRl9GX0hXX1ZMQU5fVFggfCBORVRJRl9GX0hXX1ZMQU5fRklMVEVSIHwKKwkJTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9JUFY2X0NTVU0gfAogCQlORVRJRl9GX0dSTyB8IE5FVElGX0ZfVFNPNjsKIAotCW5ldGRldi0+dmxhbl9mZWF0dXJlcyB8PSBORVRJRl9GX1NHIHwgTkVUSUZfRl9UU08gfCBORVRJRl9GX0hXX0NTVU07CisJbmV0ZGV2LT52bGFuX2ZlYXR1cmVzIHw9IE5FVElGX0ZfU0cgfCBORVRJRl9GX1RTTyB8CisJCU5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfSVBWNl9DU1VNOworCisJaWYgKGxhbmNlcl9jaGlwKGFkYXB0ZXIpKQorCQluZXRkZXYtPnZsYW5fZmVhdHVyZXMgfD0gTkVUSUZfRl9UU082OwogCiAJbmV0ZGV2LT5mbGFncyB8PSBJRkZfTVVMVElDQVNUOwogCkBAIC0yNTg3LDYgKzI2NDcsMTUgQEAKIAl1OCBfX2lvbWVtICphZGRyOwogCWludCBwY2ljZmdfcmVnLCBkYl9yZWc7CiAKKwlpZiAobGFuY2VyX2NoaXAoYWRhcHRlcikpIHsKKwkJYWRkciA9IGlvcmVtYXBfbm9jYWNoZShwY2lfcmVzb3VyY2Vfc3RhcnQoYWRhcHRlci0+cGRldiwgMCksCisJCQlwY2lfcmVzb3VyY2VfbGVuKGFkYXB0ZXItPnBkZXYsIDApKTsKKwkJaWYgKGFkZHIgPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PTUVNOworCQlhZGFwdGVyLT5kYiA9IGFkZHI7CisJCXJldHVybiAwOworCX0KKwogCWlmIChiZV9waHlzZm4oYWRhcHRlcikpIHsKIAkJYWRkciA9IGlvcmVtYXBfbm9jYWNoZShwY2lfcmVzb3VyY2Vfc3RhcnQoYWRhcHRlci0+cGRldiwgMiksCiAJCQkJcGNpX3Jlc291cmNlX2xlbihhZGFwdGVyLT5wZGV2LCAyKSk7CkBAIC0yNzgzLDYgKzI4NTIsNDQgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBiZV9kZXZfZmFtaWx5X2NoZWNrKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKKwl1MzIgc2xpX2ludGYgPSAwLCBpZl90eXBlOworCisJc3dpdGNoIChwZGV2LT5kZXZpY2UpIHsKKwljYXNlIEJFX0RFVklDRV9JRDE6CisJY2FzZSBPQ19ERVZJQ0VfSUQxOgorCQlhZGFwdGVyLT5nZW5lcmF0aW9uID0gQkVfR0VOMjsKKwkJYnJlYWs7CisJY2FzZSBCRV9ERVZJQ0VfSUQyOgorCWNhc2UgT0NfREVWSUNFX0lEMjoKKwkJYWRhcHRlci0+Z2VuZXJhdGlvbiA9IEJFX0dFTjM7CisJCWJyZWFrOworCWNhc2UgT0NfREVWSUNFX0lEMzoKKwkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIFNMSV9JTlRGX1JFR19PRkZTRVQsICZzbGlfaW50Zik7CisJCWlmX3R5cGUgPSAoc2xpX2ludGYgJiBTTElfSU5URl9JRl9UWVBFX01BU0spID4+CisJCQkJCQlTTElfSU5URl9JRl9UWVBFX1NISUZUOworCisJCWlmICgoKHNsaV9pbnRmICYgU0xJX0lOVEZfVkFMSURfTUFTSykgIT0gU0xJX0lOVEZfVkFMSUQpIHx8CisJCQlpZl90eXBlICE9IDB4MDIpIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgIlNMSV9JTlRGIHJlZyB2YWwgaXMgbm90IHZhbGlkXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWlmIChudW1fdmZzID4gMCkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiVkZzIG5vdCBzdXBwb3J0ZWRcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJYWRhcHRlci0+c2xpX2ZhbWlseSA9ICgoc2xpX2ludGYgJiBTTElfSU5URl9GQU1JTFlfTUFTSykgPj4KKwkJCQkJIFNMSV9JTlRGX0ZBTUlMWV9TSElGVCk7CisJCWFkYXB0ZXItPmdlbmVyYXRpb24gPSBCRV9HRU4zOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlhZGFwdGVyLT5nZW5lcmF0aW9uID0gMDsKKwl9CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgX19kZXZpbml0IGJlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQkJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBkZXZfaWQpCiB7CkBAIC0yODA1LDIyICsyOTEyLDEzIEBACiAJCWdvdG8gcmVsX3JlZzsKIAl9CiAJYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0KLQlzd2l0Y2ggKHBkZXYtPmRldmljZSkgewotCWNhc2UgQkVfREVWSUNFX0lEMToKLQljYXNlIE9DX0RFVklDRV9JRDE6Ci0JCWFkYXB0ZXItPmdlbmVyYXRpb24gPSBCRV9HRU4yOwotCQlicmVhazsKLQljYXNlIEJFX0RFVklDRV9JRDI6Ci0JY2FzZSBPQ19ERVZJQ0VfSUQyOgotCQlhZGFwdGVyLT5nZW5lcmF0aW9uID0gQkVfR0VOMzsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYWRhcHRlci0+Z2VuZXJhdGlvbiA9IDA7Ci0JfQotCiAJYWRhcHRlci0+cGRldiA9IHBkZXY7CiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGFkYXB0ZXIpOworCisJc3RhdHVzID0gYmVfZGV2X2ZhbWlseV9jaGVjayhhZGFwdGVyKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGZyZWVfbmV0ZGV2OworCiAJYWRhcHRlci0+bmV0ZGV2ID0gbmV0ZGV2OwogCVNFVF9ORVRERVZfREVWKG5ldGRldiwgJnBkZXYtPmRldik7CiAKQEAgLTI4OTUsNyArMjk5Myw3IEBACiAJYmVfY3RybF9jbGVhbnVwKGFkYXB0ZXIpOwogZnJlZV9uZXRkZXY6CiAJYmVfc3Jpb3ZfZGlzYWJsZShhZGFwdGVyKTsKLQlmcmVlX25ldGRldihhZGFwdGVyLT5uZXRkZXYpOworCWZyZWVfbmV0ZGV2KG5ldGRldik7CiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogcmVsX3JlZzoKIAlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm5hL2JmYV9kZWZzLmggYi9kcml2ZXJzL25ldC9ibmEvYmZhX2RlZnMuaAppbmRleCAyOWMxYjhkZS4uMmVhMGRmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm5hL2JmYV9kZWZzLmgKKysrIGIvZHJpdmVycy9uZXQvYm5hL2JmYV9kZWZzLmgKQEAgLTExMiwxNiArMTEyLDE4IEBACiAgKiBJT0Mgc3RhdGVzCiAgKi8KIGVudW0gYmZhX2lvY19zdGF0ZSB7Ci0JQkZBX0lPQ19SRVNFVAkJPSAxLAkvKiE8IElPQyBpcyBpbiByZXNldCBzdGF0ZSAqLwotCUJGQV9JT0NfU0VNV0FJVAkJPSAyLAkvKiE8IFdhaXRpbmcgZm9yIElPQyBoL3cgc2VtYXBob3JlICovCi0JQkZBX0lPQ19IV0lOSVQJCT0gMywJLyohPCBJT0MgaC93IGlzIGJlaW5nIGluaXRpYWxpemVkICovCi0JQkZBX0lPQ19HRVRBVFRSCQk9IDQsCS8qITwgSU9DIGlzIGJlaW5nIGNvbmZpZ3VyZWQgKi8KLQlCRkFfSU9DX09QRVJBVElPTkFMCT0gNSwJLyohPCBJT0MgaXMgb3BlcmF0aW9uYWwgKi8KLQlCRkFfSU9DX0lOSVRGQUlMCT0gNiwJLyohPCBJT0MgaGFyZHdhcmUgZmFpbHVyZSAqLwotCUJGQV9JT0NfSEJGQUlMCQk9IDcsCS8qITwgSU9DIGhlYXJ0LWJlYXQgZmFpbHVyZSAqLwotCUJGQV9JT0NfRElTQUJMSU5HCT0gOCwJLyohPCBJT0MgaXMgYmVpbmcgZGlzYWJsZWQgKi8KLQlCRkFfSU9DX0RJU0FCTEVECT0gOSwJLyohPCBJT0MgaXMgZGlzYWJsZWQgKi8KLQlCRkFfSU9DX0ZXTUlTTUFUQ0gJPSAxMCwJLyohPCBJT0MgZi93IGRpZmZlcmVudCBmcm9tIGRyaXZlcnMgKi8KKwlCRkFfSU9DX1VOSU5JVAkJPSAxLAkvKiE8IElPQyBpcyBpbiB1bmluaXQgc3RhdGUgKi8KKwlCRkFfSU9DX1JFU0VUCQk9IDIsCS8qITwgSU9DIGlzIGluIHJlc2V0IHN0YXRlICovCisJQkZBX0lPQ19TRU1XQUlUCQk9IDMsCS8qITwgV2FpdGluZyBmb3IgSU9DIGgvdyBzZW1hcGhvcmUgKi8KKwlCRkFfSU9DX0hXSU5JVAkJPSA0LAkvKiE8IElPQyBoL3cgaXMgYmVpbmcgaW5pdGlhbGl6ZWQgKi8KKwlCRkFfSU9DX0dFVEFUVFIJCT0gNSwJLyohPCBJT0MgaXMgYmVpbmcgY29uZmlndXJlZCAqLworCUJGQV9JT0NfT1BFUkFUSU9OQUwJPSA2LAkvKiE8IElPQyBpcyBvcGVyYXRpb25hbCAqLworCUJGQV9JT0NfSU5JVEZBSUwJPSA3LAkvKiE8IElPQyBoYXJkd2FyZSBmYWlsdXJlICovCisJQkZBX0lPQ19GQUlMCQk9IDgsCS8qITwgSU9DIGhlYXJ0LWJlYXQgZmFpbHVyZSAqLworCUJGQV9JT0NfRElTQUJMSU5HCT0gOSwJLyohPCBJT0MgaXMgYmVpbmcgZGlzYWJsZWQgKi8KKwlCRkFfSU9DX0RJU0FCTEVECT0gMTAsCS8qITwgSU9DIGlzIGRpc2FibGVkICovCisJQkZBX0lPQ19GV01JU01BVENICT0gMTEsCS8qITwgSU9DIGYvdyBkaWZmZXJlbnQgZnJvbSBkcml2ZXJzICovCisJQkZBX0lPQ19FTkFCTElORwk9IDEyLAkvKiE8IElPQyBpcyBiZWluZyBlbmFibGVkICovCiB9OwogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JuYS9iZmFfZGVmc19tZmdfY29tbS5oIGIvZHJpdmVycy9uZXQvYm5hL2JmYV9kZWZzX21mZ19jb21tLmgKaW5kZXggOTg3OTc4Zi4uZmRkNjc3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm5hL2JmYV9kZWZzX21mZ19jb21tLmgKKysrIGIvZHJpdmVycy9uZXQvYm5hL2JmYV9kZWZzX21mZ19jb21tLmgKQEAgLTk1LDI4ICs5NSw2IEBACiAJKHR5cGUpID09IEJGQV9NRkdfVFlQRV9DTkExMFAxIHx8IFwKIAliZmFfbWZnX2lzX21lenoodHlwZSkpKQogCi0vKioKLSAqIENoZWNrIGlmIHRoZSBjYXJkIGhhdmluZyBvbGQgd3duL21hYyBoYW5kbGluZwotICovCi0jZGVmaW5lIGJmYV9tZmdfaXNfb2xkX3d3bl9tYWNfbW9kZWwodHlwZSkgKCggXAotCSh0eXBlKSA9PSBCRkFfTUZHX1RZUEVfRkM4UDIgfHwgXAotCSh0eXBlKSA9PSBCRkFfTUZHX1RZUEVfRkM4UDEgfHwgXAotCSh0eXBlKSA9PSBCRkFfTUZHX1RZUEVfRkM0UDIgfHwgXAotCSh0eXBlKSA9PSBCRkFfTUZHX1RZUEVfRkM0UDEgfHwgXAotCSh0eXBlKSA9PSBCRkFfTUZHX1RZUEVfQ05BMTBQMiB8fCBcCi0JKHR5cGUpID09IEJGQV9NRkdfVFlQRV9DTkExMFAxIHx8IFwKLQkodHlwZSkgPT0gQkZBX01GR19UWVBFX0pBWUhBV0sgfHwgXAotCSh0eXBlKSA9PSBCRkFfTUZHX1RZUEVfV0FOQ0hFU0UpKQotCi0jZGVmaW5lIGJmYV9tZmdfaW5jcmVtZW50X3d3bl9tYWMobSwgaSkJCQkJXAotZG8gewkJCQkJCQkJXAotCXUzMiB0ID0gKChtKVswXSA8PCAxNikgfCAoKG0pWzFdIDw8IDgpIHwgKG0pWzJdOwlcCi0JdCArPSAoaSk7CQkJCQkJXAotCShtKVswXSA9ICh0ID4+IDE2KSAmIDB4RkY7CQkJCVwKLQkobSlbMV0gPSAodCA+PiA4KSAmIDB4RkY7CQkJCVwKLQkobSlbMl0gPSB0ICYgMHhGRjsJCQkJCVwKLX0gd2hpbGUgKDApCi0KICNkZWZpbmUgYmZhX21mZ19hZGFwdGVyX3Byb3BfaW5pdF9mbGFzaChjYXJkX3R5cGUsIHByb3ApCVwKIGRvIHsJCQkJCQkJCVwKIAlzd2l0Y2ggKChjYXJkX3R5cGUpKSB7CQkJCQlcCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibmEvYmZhX2lvYy5jIGIvZHJpdmVycy9uZXQvYm5hL2JmYV9pb2MuYwppbmRleCBlOTRlNWFhLi4zNDkzM2NiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibmEvYmZhX2lvYy5jCisrKyBiL2RyaXZlcnMvbmV0L2JuYS9iZmFfaW9jLmMKQEAgLTI2LDI1ICsyNiw2IEBACiAgKiBJT0MgbG9jYWwgZGVmaW5pdGlvbnMKICAqLwogCi0jZGVmaW5lIGJmYV9pb2NfdGltZXJfc3RhcnQoX19pb2MpCQkJCQlcCi0JbW9kX3RpbWVyKCYoX19pb2MpLT5pb2NfdGltZXIsIGppZmZpZXMgKwlcCi0JCQltc2Vjc190b19qaWZmaWVzKEJGQV9JT0NfVE9WKSkKLSNkZWZpbmUgYmZhX2lvY190aW1lcl9zdG9wKF9faW9jKSAgIGRlbF90aW1lcigmKF9faW9jKS0+aW9jX3RpbWVyKQotCi0jZGVmaW5lIGJmYV9pb2NfcmVjb3ZlcnlfdGltZXJfc3RhcnQoX19pb2MpCQkJCVwKLQltb2RfdGltZXIoJihfX2lvYyktPmlvY190aW1lciwgamlmZmllcyArCVwKLQkJCW1zZWNzX3RvX2ppZmZpZXMoQkZBX0lPQ19UT1ZfUkVDT1ZFUikpCi0KLSNkZWZpbmUgYmZhX3NlbV90aW1lcl9zdGFydChfX2lvYykJCQkJCVwKLQltb2RfdGltZXIoJihfX2lvYyktPnNlbV90aW1lciwgamlmZmllcyArCVwKLQkJCW1zZWNzX3RvX2ppZmZpZXMoQkZBX0lPQ19IV1NFTV9UT1YpKQotI2RlZmluZSBiZmFfc2VtX3RpbWVyX3N0b3AoX19pb2MpCWRlbF90aW1lcigmKF9faW9jKS0+c2VtX3RpbWVyKQotCi0jZGVmaW5lIGJmYV9oYl90aW1lcl9zdGFydChfX2lvYykJCQkJCVwKLQltb2RfdGltZXIoJihfX2lvYyktPmhiX3RpbWVyLCBqaWZmaWVzICsJCVwKLQkJCW1zZWNzX3RvX2ppZmZpZXMoQkZBX0lPQ19IQl9UT1YpKQotI2RlZmluZSBiZmFfaGJfdGltZXJfc3RvcChfX2lvYykJZGVsX3RpbWVyKCYoX19pb2MpLT5oYl90aW1lcikKLQogLyoqCiAgKiBBc2ljIHNwZWNpZmljIG1hY3JvcyA6IHNlZSBiZmFfaHdfY2IuYyBhbmQgYmZhX2h3X2N0LmMgZm9yIGRldGFpbHMuCiAgKi8KQEAgLTU1LDExICszNiwxNiBAQAogCQkJKChfX2lvYyktPmlvY19od2lmLT5pb2NfZmlybXdhcmVfdW5sb2NrKF9faW9jKSkKICNkZWZpbmUgYmZhX2lvY19yZWdfaW5pdChfX2lvYykgKChfX2lvYyktPmlvY19od2lmLT5pb2NfcmVnX2luaXQoX19pb2MpKQogI2RlZmluZSBiZmFfaW9jX21hcF9wb3J0KF9faW9jKSAoKF9faW9jKS0+aW9jX2h3aWYtPmlvY19tYXBfcG9ydChfX2lvYykpCi0jZGVmaW5lIGJmYV9pb2Nfbm90aWZ5X2hiZmFpbChfX2lvYykJCQlcCi0JCQkoKF9faW9jKS0+aW9jX2h3aWYtPmlvY19ub3RpZnlfaGJmYWlsKF9faW9jKSkKLQotI2RlZmluZSBiZmFfaW9jX2lzX29wdHJvbShfX2lvYykJXAotCShiZmFfY2JfaW1hZ2VfZ2V0X3NpemUoQkZBX0lPQ19GV0lNR19UWVBFKF9faW9jKSkgPCBCRkFfSU9DX0ZXSU1HX01JTlNaKQorI2RlZmluZSBiZmFfaW9jX25vdGlmeV9mYWlsKF9faW9jKQkJCVwKKwkJCSgoX19pb2MpLT5pb2NfaHdpZi0+aW9jX25vdGlmeV9mYWlsKF9faW9jKSkKKyNkZWZpbmUgYmZhX2lvY19zeW5jX2pvaW4oX19pb2MpCQkJXAorCQkJKChfX2lvYyktPmlvY19od2lmLT5pb2Nfc3luY19qb2luKF9faW9jKSkKKyNkZWZpbmUgYmZhX2lvY19zeW5jX2xlYXZlKF9faW9jKQkJCVwKKwkJCSgoX19pb2MpLT5pb2NfaHdpZi0+aW9jX3N5bmNfbGVhdmUoX19pb2MpKQorI2RlZmluZSBiZmFfaW9jX3N5bmNfYWNrKF9faW9jKQkJCQlcCisJCQkoKF9faW9jKS0+aW9jX2h3aWYtPmlvY19zeW5jX2FjayhfX2lvYykpCisjZGVmaW5lIGJmYV9pb2Nfc3luY19jb21wbGV0ZShfX2lvYykJCQlcCisJCQkoKF9faW9jKS0+aW9jX2h3aWYtPmlvY19zeW5jX2NvbXBsZXRlKF9faW9jKSkKIAogI2RlZmluZSBiZmFfaW9jX21ib3hfY21kX3BlbmRpbmcoX19pb2MpCQlcCiAJCQkoIWxpc3RfZW1wdHkoJigoX19pb2MpLT5tYm94X21vZC5jbWRfcSkpIHx8IFwKQEAgLTg1LDYgKzcxLDEyIEBACiBzdGF0aWMgdm9pZCBiZmFfaW9jX2NoZWNrX2F0dHJfd3ducyhzdHJ1Y3QgYmZhX2lvYyAqaW9jKTsKIHN0YXRpYyB2b2lkIGJmYV9pb2NfZGlzYWJsZV9jb21wKHN0cnVjdCBiZmFfaW9jICppb2MpOwogc3RhdGljIHZvaWQgYmZhX2lvY19scHVfc3RvcChzdHJ1Y3QgYmZhX2lvYyAqaW9jKTsKK3N0YXRpYyB2b2lkIGJmYV9pb2NfZmFpbF9ub3RpZnkoc3RydWN0IGJmYV9pb2MgKmlvYyk7CitzdGF0aWMgdm9pZCBiZmFfaW9jX3BmX2VuYWJsZWQoc3RydWN0IGJmYV9pb2MgKmlvYyk7CitzdGF0aWMgdm9pZCBiZmFfaW9jX3BmX2Rpc2FibGVkKHN0cnVjdCBiZmFfaW9jICppb2MpOworc3RhdGljIHZvaWQgYmZhX2lvY19wZl9pbml0ZmFpbGVkKHN0cnVjdCBiZmFfaW9jICppb2MpOworc3RhdGljIHZvaWQgYmZhX2lvY19wZl9mYWlsZWQoc3RydWN0IGJmYV9pb2MgKmlvYyk7CitzdGF0aWMgdm9pZCBiZmFfaW9jX3BmX2Z3bWlzbWF0Y2goc3RydWN0IGJmYV9pb2MgKmlvYyk7CiBzdGF0aWMgdm9pZCBiZmFfaW9jX2Jvb3Qoc3RydWN0IGJmYV9pb2MgKmlvYywgdTMyIGJvb3RfdHlwZSwKIAkJCSB1MzIgYm9vdF9wYXJhbSk7CiBzdGF0aWMgdTMyIGJmYV9pb2Nfc21lbV9wZ251bShzdHJ1Y3QgYmZhX2lvYyAqaW9jLCB1MzIgZm1hZGRyKTsKQEAgLTEwMSw3MiArOTMsMTczIEBACiAJCQkJCQljaGFyICptYW51ZmFjdHVyZXIpOwogc3RhdGljIHZvaWQgYmZhX2lvY19nZXRfYWRhcHRlcl9tb2RlbChzdHJ1Y3QgYmZhX2lvYyAqaW9jLCBjaGFyICptb2RlbCk7CiBzdGF0aWMgdTY0IGJmYV9pb2NfZ2V0X3B3d24oc3RydWN0IGJmYV9pb2MgKmlvYyk7Ci1zdGF0aWMgbWFjX3QgYmZhX2lvY19nZXRfbWZnX21hYyhzdHJ1Y3QgYmZhX2lvYyAqaW9jKTsKIAogLyoqCi0gKiBJT0Mgc3RhdGUgbWFjaGluZSBldmVudHMKKyAqIElPQyBzdGF0ZSBtYWNoaW5lIGRlZmluaXRpb25zL2RlY2xhcmF0aW9ucwogICovCiBlbnVtIGlvY19ldmVudCB7Ci0JSU9DX0VfRU5BQkxFCQk9IDEsCS8qITwgSU9DIGVuYWJsZSByZXF1ZXN0CQkqLwotCUlPQ19FX0RJU0FCTEUJCT0gMiwJLyohPCBJT0MgZGlzYWJsZSByZXF1ZXN0CSovCi0JSU9DX0VfVElNRU9VVAkJPSAzLAkvKiE8IGYvdyByZXNwb25zZSB0aW1lb3V0CSovCi0JSU9DX0VfRldSRUFEWQkJPSA0LAkvKiE8IGYvdyBpbml0aWFsaXphdGlvbiBkb25lCSovCi0JSU9DX0VfRldSU1BfR0VUQVRUUgk9IDUsCS8qITwgSU9DIGdldCBhdHRyaWJ1dGUgcmVzcG9uc2UJKi8KLQlJT0NfRV9GV1JTUF9FTkFCTEUJPSA2LAkvKiE8IGVuYWJsZSBmL3cgcmVzcG9uc2UJKi8KLQlJT0NfRV9GV1JTUF9ESVNBQkxFCT0gNywJLyohPCBkaXNhYmxlIGYvdyByZXNwb25zZQkqLwotCUlPQ19FX0hCRkFJTAkJPSA4LAkvKiE8IGhlYXJ0YmVhdCBmYWlsdXJlCQkqLwotCUlPQ19FX0hXRVJST1IJCT0gOSwJLyohPCBoYXJkd2FyZSBlcnJvciBpbnRlcnJ1cHQJKi8KLQlJT0NfRV9TRU1MT0NLRUQJCT0gMTAsCS8qITwgaC93IHNlbWFwaG9yZSBpcyBsb2NrZWQJKi8KLQlJT0NfRV9ERVRBQ0gJCT0gMTEsCS8qITwgZHJpdmVyIGRldGFjaCBjbGVhbnVwCSovCisJSU9DX0VfUkVTRVQJCT0gMSwJLyohPCBJT0MgcmVzZXQgcmVxdWVzdAkJKi8KKwlJT0NfRV9FTkFCTEUJCT0gMiwJLyohPCBJT0MgZW5hYmxlIHJlcXVlc3QJCSovCisJSU9DX0VfRElTQUJMRQkJPSAzLAkvKiE8IElPQyBkaXNhYmxlIHJlcXVlc3QJKi8KKwlJT0NfRV9ERVRBQ0gJCT0gNCwJLyohPCBkcml2ZXIgZGV0YWNoIGNsZWFudXAJKi8KKwlJT0NfRV9FTkFCTEVECQk9IDUsCS8qITwgZi93IGVuYWJsZWQJCSovCisJSU9DX0VfRldSU1BfR0VUQVRUUgk9IDYsCS8qITwgSU9DIGdldCBhdHRyaWJ1dGUgcmVzcG9uc2UJKi8KKwlJT0NfRV9ESVNBQkxFRAkJPSA3LAkvKiE8IGYvdyBkaXNhYmxlZAkJKi8KKwlJT0NfRV9JTklURkFJTEVECT0gOCwJLyohPCBmYWlsdXJlIG5vdGljZSBieSBpb2NwZiBzbQkqLworCUlPQ19FX1BGQUlMRUQJCT0gOSwJLyohPCBmYWlsdXJlIG5vdGljZSBieSBpb2NwZiBzbQkqLworCUlPQ19FX0hCRkFJTAkJPSAxMCwJLyohPCBoZWFydGJlYXQgZmFpbHVyZQkJKi8KKwlJT0NfRV9IV0VSUk9SCQk9IDExLAkvKiE8IGhhcmR3YXJlIGVycm9yIGludGVycnVwdAkqLworCUlPQ19FX1RJTUVPVVQJCT0gMTIsCS8qITwgdGltZW91dAkJCSovCiB9OwogCitiZmFfZnNtX3N0YXRlX2RlY2woYmZhX2lvYywgdW5pbml0LCBzdHJ1Y3QgYmZhX2lvYywgZW51bSBpb2NfZXZlbnQpOwogYmZhX2ZzbV9zdGF0ZV9kZWNsKGJmYV9pb2MsIHJlc2V0LCBzdHJ1Y3QgYmZhX2lvYywgZW51bSBpb2NfZXZlbnQpOwotYmZhX2ZzbV9zdGF0ZV9kZWNsKGJmYV9pb2MsIGZ3Y2hlY2ssIHN0cnVjdCBiZmFfaW9jLCBlbnVtIGlvY19ldmVudCk7Ci1iZmFfZnNtX3N0YXRlX2RlY2woYmZhX2lvYywgbWlzbWF0Y2gsIHN0cnVjdCBiZmFfaW9jLCBlbnVtIGlvY19ldmVudCk7Ci1iZmFfZnNtX3N0YXRlX2RlY2woYmZhX2lvYywgc2Vtd2FpdCwgc3RydWN0IGJmYV9pb2MsIGVudW0gaW9jX2V2ZW50KTsKLWJmYV9mc21fc3RhdGVfZGVjbChiZmFfaW9jLCBod2luaXQsIHN0cnVjdCBiZmFfaW9jLCBlbnVtIGlvY19ldmVudCk7CiBiZmFfZnNtX3N0YXRlX2RlY2woYmZhX2lvYywgZW5hYmxpbmcsIHN0cnVjdCBiZmFfaW9jLCBlbnVtIGlvY19ldmVudCk7CiBiZmFfZnNtX3N0YXRlX2RlY2woYmZhX2lvYywgZ2V0YXR0ciwgc3RydWN0IGJmYV9pb2MsIGVudW0gaW9jX2V2ZW50KTsKIGJmYV9mc21fc3RhdGVfZGVjbChiZmFfaW9jLCBvcCwgc3RydWN0IGJmYV9pb2MsIGVudW0gaW9jX2V2ZW50KTsKLWJmYV9mc21fc3RhdGVfZGVjbChiZmFfaW9jLCBpbml0ZmFpbCwgc3RydWN0IGJmYV9pb2MsIGVudW0gaW9jX2V2ZW50KTsKLWJmYV9mc21fc3RhdGVfZGVjbChiZmFfaW9jLCBoYmZhaWwsIHN0cnVjdCBiZmFfaW9jLCBlbnVtIGlvY19ldmVudCk7CitiZmFfZnNtX3N0YXRlX2RlY2woYmZhX2lvYywgZmFpbF9yZXRyeSwgc3RydWN0IGJmYV9pb2MsIGVudW0gaW9jX2V2ZW50KTsKK2JmYV9mc21fc3RhdGVfZGVjbChiZmFfaW9jLCBmYWlsLCBzdHJ1Y3QgYmZhX2lvYywgZW51bSBpb2NfZXZlbnQpOwogYmZhX2ZzbV9zdGF0ZV9kZWNsKGJmYV9pb2MsIGRpc2FibGluZywgc3RydWN0IGJmYV9pb2MsIGVudW0gaW9jX2V2ZW50KTsKIGJmYV9mc21fc3RhdGVfZGVjbChiZmFfaW9jLCBkaXNhYmxlZCwgc3RydWN0IGJmYV9pb2MsIGVudW0gaW9jX2V2ZW50KTsKIAogc3RhdGljIHN0cnVjdCBiZmFfc21fdGFibGUgaW9jX3NtX3RhYmxlW10gPSB7CisJe0JGQV9TTShiZmFfaW9jX3NtX3VuaW5pdCksIEJGQV9JT0NfVU5JTklUfSwKIAl7QkZBX1NNKGJmYV9pb2Nfc21fcmVzZXQpLCBCRkFfSU9DX1JFU0VUfSwKLQl7QkZBX1NNKGJmYV9pb2Nfc21fZndjaGVjayksIEJGQV9JT0NfRldNSVNNQVRDSH0sCi0Je0JGQV9TTShiZmFfaW9jX3NtX21pc21hdGNoKSwgQkZBX0lPQ19GV01JU01BVENIfSwKLQl7QkZBX1NNKGJmYV9pb2Nfc21fc2Vtd2FpdCksIEJGQV9JT0NfU0VNV0FJVH0sCi0Je0JGQV9TTShiZmFfaW9jX3NtX2h3aW5pdCksIEJGQV9JT0NfSFdJTklUfSwKLQl7QkZBX1NNKGJmYV9pb2Nfc21fZW5hYmxpbmcpLCBCRkFfSU9DX0hXSU5JVH0sCisJe0JGQV9TTShiZmFfaW9jX3NtX2VuYWJsaW5nKSwgQkZBX0lPQ19FTkFCTElOR30sCiAJe0JGQV9TTShiZmFfaW9jX3NtX2dldGF0dHIpLCBCRkFfSU9DX0dFVEFUVFJ9LAogCXtCRkFfU00oYmZhX2lvY19zbV9vcCksIEJGQV9JT0NfT1BFUkFUSU9OQUx9LAotCXtCRkFfU00oYmZhX2lvY19zbV9pbml0ZmFpbCksIEJGQV9JT0NfSU5JVEZBSUx9LAotCXtCRkFfU00oYmZhX2lvY19zbV9oYmZhaWwpLCBCRkFfSU9DX0hCRkFJTH0sCisJe0JGQV9TTShiZmFfaW9jX3NtX2ZhaWxfcmV0cnkpLCBCRkFfSU9DX0lOSVRGQUlMfSwKKwl7QkZBX1NNKGJmYV9pb2Nfc21fZmFpbCksIEJGQV9JT0NfRkFJTH0sCiAJe0JGQV9TTShiZmFfaW9jX3NtX2Rpc2FibGluZyksIEJGQV9JT0NfRElTQUJMSU5HfSwKIAl7QkZBX1NNKGJmYV9pb2Nfc21fZGlzYWJsZWQpLCBCRkFfSU9DX0RJU0FCTEVEfSwKIH07CiAKIC8qKgorICogSU9DUEYgc3RhdGUgbWFjaGluZSBkZWZpbml0aW9ucy9kZWNsYXJhdGlvbnMKKyAqLworCisvKgorICogRm9yd2FyZCBkZWNsYXJlYXRpb25zIGZvciBpb2NwZiBzdGF0ZSBtYWNoaW5lCisgKi8KK3N0YXRpYyB2b2lkIGJmYV9pb2NwZl9lbmFibGUoc3RydWN0IGJmYV9pb2MgKmlvYyk7CitzdGF0aWMgdm9pZCBiZmFfaW9jcGZfZGlzYWJsZShzdHJ1Y3QgYmZhX2lvYyAqaW9jKTsKK3N0YXRpYyB2b2lkIGJmYV9pb2NwZl9mYWlsKHN0cnVjdCBiZmFfaW9jICppb2MpOworc3RhdGljIHZvaWQgYmZhX2lvY3BmX2luaXRmYWlsKHN0cnVjdCBiZmFfaW9jICppb2MpOworc3RhdGljIHZvaWQgYmZhX2lvY3BmX2dldGF0dHJmYWlsKHN0cnVjdCBiZmFfaW9jICppb2MpOworc3RhdGljIHZvaWQgYmZhX2lvY3BmX3N0b3Aoc3RydWN0IGJmYV9pb2MgKmlvYyk7CisKKy8qKgorICogSU9DUEYgc3RhdGUgbWFjaGluZSBldmVudHMKKyAqLworZW51bSBpb2NwZl9ldmVudCB7CisJSU9DUEZfRV9FTkFCTEUJCT0gMSwJLyohPCBJT0NQRiBlbmFibGUgcmVxdWVzdAkqLworCUlPQ1BGX0VfRElTQUJMRQkJPSAyLAkvKiE8IElPQ1BGIGRpc2FibGUgcmVxdWVzdAkqLworCUlPQ1BGX0VfU1RPUAkJPSAzLAkvKiE8IHN0b3Agb24gZHJpdmVyIGRldGFjaAkqLworCUlPQ1BGX0VfRldSRUFEWQkgCT0gNCwJLyohPCBmL3cgaW5pdGlhbGl6YXRpb24gZG9uZQkqLworCUlPQ1BGX0VfRldSU1BfRU5BQkxFCT0gNSwJLyohPCBlbmFibGUgZi93IHJlc3BvbnNlCSovCisJSU9DUEZfRV9GV1JTUF9ESVNBQkxFCT0gNiwJLyohPCBkaXNhYmxlIGYvdyByZXNwb25zZQkqLworCUlPQ1BGX0VfRkFJTAkJPSA3LAkvKiE8IGZhaWx1cmUgbm90aWNlIGJ5IGlvYyBzbQkqLworCUlPQ1BGX0VfSU5JVEZBSUwJPSA4LAkvKiE8IGluaXQgZmFpbCBub3RpY2UgYnkgaW9jIHNtCSovCisJSU9DUEZfRV9HRVRBVFRSRkFJTAk9IDksCS8qITwgaW5pdCBmYWlsIG5vdGljZSBieSBpb2Mgc20JKi8KKwlJT0NQRl9FX1NFTUxPQ0tFRAk9IDEwLCAgIC8qITwgaC93IHNlbWFwaG9yZSBpcyBsb2NrZWQJKi8KKwlJT0NQRl9FX1RJTUVPVVQJCT0gMTEsICAgLyohPCBmL3cgcmVzcG9uc2UgdGltZW91dAkqLworfTsKKworLyoqCisgKiBJT0NQRiBzdGF0ZXMKKyAqLworZW51bSBiZmFfaW9jcGZfc3RhdGUgeworCUJGQV9JT0NQRl9SRVNFVAkJPSAxLAkvKiE8IElPQyBpcyBpbiByZXNldCBzdGF0ZSAqLworCUJGQV9JT0NQRl9TRU1XQUlUCT0gMiwJLyohPCBXYWl0aW5nIGZvciBJT0MgaC93IHNlbWFwaG9yZSAqLworCUJGQV9JT0NQRl9IV0lOSVQJPSAzLAkvKiE8IElPQyBoL3cgaXMgYmVpbmcgaW5pdGlhbGl6ZWQgKi8KKwlCRkFfSU9DUEZfUkVBRFkJCT0gNCwJLyohPCBJT0NQRiBpcyBpbml0aWFsaXplZCAqLworCUJGQV9JT0NQRl9JTklURkFJTAk9IDUsCS8qITwgSU9DUEYgZmFpbGVkICovCisJQkZBX0lPQ1BGX0ZBSUwJCT0gNiwJLyohPCBJT0NQRiBmYWlsZWQgKi8KKwlCRkFfSU9DUEZfRElTQUJMSU5HCT0gNywJLyohPCBJT0NQRiBpcyBiZWluZyBkaXNhYmxlZCAqLworCUJGQV9JT0NQRl9ESVNBQkxFRAk9IDgsCS8qITwgSU9DUEYgaXMgZGlzYWJsZWQgKi8KKwlCRkFfSU9DUEZfRldNSVNNQVRDSAk9IDksCS8qITwgSU9DIGYvdyBkaWZmZXJlbnQgZnJvbSBkcml2ZXJzICovCit9OworCitiZmFfZnNtX3N0YXRlX2RlY2woYmZhX2lvY3BmLCByZXNldCwgc3RydWN0IGJmYV9pb2NwZiwgZW51bSBpb2NwZl9ldmVudCk7CitiZmFfZnNtX3N0YXRlX2RlY2woYmZhX2lvY3BmLCBmd2NoZWNrLCBzdHJ1Y3QgYmZhX2lvY3BmLCBlbnVtIGlvY3BmX2V2ZW50KTsKK2JmYV9mc21fc3RhdGVfZGVjbChiZmFfaW9jcGYsIG1pc21hdGNoLCBzdHJ1Y3QgYmZhX2lvY3BmLCBlbnVtIGlvY3BmX2V2ZW50KTsKK2JmYV9mc21fc3RhdGVfZGVjbChiZmFfaW9jcGYsIHNlbXdhaXQsIHN0cnVjdCBiZmFfaW9jcGYsIGVudW0gaW9jcGZfZXZlbnQpOworYmZhX2ZzbV9zdGF0ZV9kZWNsKGJmYV9pb2NwZiwgaHdpbml0LCBzdHJ1Y3QgYmZhX2lvY3BmLCBlbnVtIGlvY3BmX2V2ZW50KTsKK2JmYV9mc21fc3RhdGVfZGVjbChiZmFfaW9jcGYsIGVuYWJsaW5nLCBzdHJ1Y3QgYmZhX2lvY3BmLCBlbnVtIGlvY3BmX2V2ZW50KTsKK2JmYV9mc21fc3RhdGVfZGVjbChiZmFfaW9jcGYsIHJlYWR5LCBzdHJ1Y3QgYmZhX2lvY3BmLCBlbnVtIGlvY3BmX2V2ZW50KTsKK2JmYV9mc21fc3RhdGVfZGVjbChiZmFfaW9jcGYsIGluaXRmYWlsX3N5bmMsIHN0cnVjdCBiZmFfaW9jcGYsCisJCQkJCQllbnVtIGlvY3BmX2V2ZW50KTsKK2JmYV9mc21fc3RhdGVfZGVjbChiZmFfaW9jcGYsIGluaXRmYWlsLCBzdHJ1Y3QgYmZhX2lvY3BmLCBlbnVtIGlvY3BmX2V2ZW50KTsKK2JmYV9mc21fc3RhdGVfZGVjbChiZmFfaW9jcGYsIGZhaWxfc3luYywgc3RydWN0IGJmYV9pb2NwZiwgZW51bSBpb2NwZl9ldmVudCk7CitiZmFfZnNtX3N0YXRlX2RlY2woYmZhX2lvY3BmLCBmYWlsLCBzdHJ1Y3QgYmZhX2lvY3BmLCBlbnVtIGlvY3BmX2V2ZW50KTsKK2JmYV9mc21fc3RhdGVfZGVjbChiZmFfaW9jcGYsIGRpc2FibGluZywgc3RydWN0IGJmYV9pb2NwZiwgZW51bSBpb2NwZl9ldmVudCk7CitiZmFfZnNtX3N0YXRlX2RlY2woYmZhX2lvY3BmLCBkaXNhYmxpbmdfc3luYywgc3RydWN0IGJmYV9pb2NwZiwKKwkJCQkJCWVudW0gaW9jcGZfZXZlbnQpOworYmZhX2ZzbV9zdGF0ZV9kZWNsKGJmYV9pb2NwZiwgZGlzYWJsZWQsIHN0cnVjdCBiZmFfaW9jcGYsIGVudW0gaW9jcGZfZXZlbnQpOworCitzdGF0aWMgc3RydWN0IGJmYV9zbV90YWJsZSBpb2NwZl9zbV90YWJsZVtdID0geworCXtCRkFfU00oYmZhX2lvY3BmX3NtX3Jlc2V0KSwgQkZBX0lPQ1BGX1JFU0VUfSwKKwl7QkZBX1NNKGJmYV9pb2NwZl9zbV9md2NoZWNrKSwgQkZBX0lPQ1BGX0ZXTUlTTUFUQ0h9LAorCXtCRkFfU00oYmZhX2lvY3BmX3NtX21pc21hdGNoKSwgQkZBX0lPQ1BGX0ZXTUlTTUFUQ0h9LAorCXtCRkFfU00oYmZhX2lvY3BmX3NtX3NlbXdhaXQpLCBCRkFfSU9DUEZfU0VNV0FJVH0sCisJe0JGQV9TTShiZmFfaW9jcGZfc21faHdpbml0KSwgQkZBX0lPQ1BGX0hXSU5JVH0sCisJe0JGQV9TTShiZmFfaW9jcGZfc21fZW5hYmxpbmcpLCBCRkFfSU9DUEZfSFdJTklUfSwKKwl7QkZBX1NNKGJmYV9pb2NwZl9zbV9yZWFkeSksIEJGQV9JT0NQRl9SRUFEWX0sCisJe0JGQV9TTShiZmFfaW9jcGZfc21faW5pdGZhaWxfc3luYyksIEJGQV9JT0NQRl9JTklURkFJTH0sCisJe0JGQV9TTShiZmFfaW9jcGZfc21faW5pdGZhaWwpLCBCRkFfSU9DUEZfSU5JVEZBSUx9LAorCXtCRkFfU00oYmZhX2lvY3BmX3NtX2ZhaWxfc3luYyksIEJGQV9JT0NQRl9GQUlMfSwKKwl7QkZBX1NNKGJmYV9pb2NwZl9zbV9mYWlsKSwgQkZBX0lPQ1BGX0ZBSUx9LAorCXtCRkFfU00oYmZhX2lvY3BmX3NtX2Rpc2FibGluZyksIEJGQV9JT0NQRl9ESVNBQkxJTkd9LAorCXtCRkFfU00oYmZhX2lvY3BmX3NtX2Rpc2FibGluZ19zeW5jKSwgQkZBX0lPQ1BGX0RJU0FCTElOR30sCisJe0JGQV9TTShiZmFfaW9jcGZfc21fZGlzYWJsZWQpLCBCRkFfSU9DUEZfRElTQUJMRUR9LAorfTsKKworLyoqCisgKiBJT0MgU3RhdGUgTWFjaGluZQorICovCisKKy8qKgorICogQmVnaW5uaW5nIHN0YXRlLiBJT0MgdW5pbml0IHN0YXRlLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvY19zbV91bmluaXRfZW50cnkoc3RydWN0IGJmYV9pb2MgKmlvYykKK3sKK30KKworLyoqCisgKiBJT0MgaXMgaW4gdW5pbml0IHN0YXRlLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvY19zbV91bmluaXQoc3RydWN0IGJmYV9pb2MgKmlvYywgZW51bSBpb2NfZXZlbnQgZXZlbnQpCit7CisJc3dpdGNoIChldmVudCkgeworCWNhc2UgSU9DX0VfUkVTRVQ6CisJCWJmYV9mc21fc2V0X3N0YXRlKGlvYywgYmZhX2lvY19zbV9yZXNldCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3NtX2ZhdWx0KGlvYywgZXZlbnQpOworCX0KK30KKworLyoqCiAgKiBSZXNldCBlbnRyeSBhY3Rpb25zIC0tIGluaXRpYWxpemUgc3RhdGUgbWFjaGluZQogICovCiBzdGF0aWMgdm9pZAogYmZhX2lvY19zbV9yZXNldF9lbnRyeShzdHJ1Y3QgYmZhX2lvYyAqaW9jKQogewotCWlvYy0+cmV0cnlfY291bnQgPSAwOwotCWlvYy0+YXV0b19yZWNvdmVyID0gYmZhX253X2F1dG9fcmVjb3ZlcjsKKwliZmFfZnNtX3NldF9zdGF0ZSgmaW9jLT5pb2NwZiwgYmZhX2lvY3BmX3NtX3Jlc2V0KTsKIH0KIAogLyoqCi0gKiBCZWdpbm5pbmcgc3RhdGUuIElPQyBpcyBpbiByZXNldCBzdGF0ZS4KKyAqIElPQyBpcyBpbiByZXNldCBzdGF0ZS4KICAqLwogc3RhdGljIHZvaWQKIGJmYV9pb2Nfc21fcmVzZXQoc3RydWN0IGJmYV9pb2MgKmlvYywgZW51bSBpb2NfZXZlbnQgZXZlbnQpCiB7CiAJc3dpdGNoIChldmVudCkgewogCWNhc2UgSU9DX0VfRU5BQkxFOgotCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fZndjaGVjayk7CisJCWJmYV9mc21fc2V0X3N0YXRlKGlvYywgYmZhX2lvY19zbV9lbmFibGluZyk7CiAJCWJyZWFrOwogCiAJY2FzZSBJT0NfRV9ESVNBQkxFOgpAQCAtMTc0LDYgKzI2Nyw1MSBAQAogCQlicmVhazsKIAogCWNhc2UgSU9DX0VfREVUQUNIOgorCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fdW5pbml0KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc21fZmF1bHQoaW9jLCBldmVudCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY19zbV9lbmFibGluZ19lbnRyeShzdHJ1Y3QgYmZhX2lvYyAqaW9jKQoreworCWJmYV9pb2NwZl9lbmFibGUoaW9jKTsKK30KKworLyoqCisgKiBIb3N0IElPQyBmdW5jdGlvbiBpcyBiZWluZyBlbmFibGVkLCBhd2FpdGluZyByZXNwb25zZSBmcm9tIGZpcm13YXJlLgorICogU2VtYXBob3JlIGlzIGFjcXVpcmVkLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvY19zbV9lbmFibGluZyhzdHJ1Y3QgYmZhX2lvYyAqaW9jLCBlbnVtIGlvY19ldmVudCBldmVudCkKK3sKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBJT0NfRV9FTkFCTEVEOgorCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fZ2V0YXR0cik7CisJCWJyZWFrOworCisJY2FzZSBJT0NfRV9QRkFJTEVEOgorCQkvKiAhISEgZmFsbCB0aHJvdWdoICEhISAqLworCWNhc2UgSU9DX0VfSFdFUlJPUjoKKwkJaW9jLT5jYmZuLT5lbmFibGVfY2Jmbihpb2MtPmJmYSwgQkZBX1NUQVRVU19JT0NfRkFJTFVSRSk7CisJCWJmYV9mc21fc2V0X3N0YXRlKGlvYywgYmZhX2lvY19zbV9mYWlsX3JldHJ5KTsKKwkJaWYgKGV2ZW50ICE9IElPQ19FX1BGQUlMRUQpCisJCQliZmFfaW9jcGZfaW5pdGZhaWwoaW9jKTsKKwkJYnJlYWs7CisKKwljYXNlIElPQ19FX0RJU0FCTEU6CisJCWJmYV9mc21fc2V0X3N0YXRlKGlvYywgYmZhX2lvY19zbV9kaXNhYmxpbmcpOworCQlicmVhazsKKworCWNhc2UgSU9DX0VfREVUQUNIOgorCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fdW5pbml0KTsKKwkJYmZhX2lvY3BmX3N0b3AoaW9jKTsKKwkJYnJlYWs7CisKKwljYXNlIElPQ19FX0VOQUJMRToKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpAQCAtMTg1LDIyOSArMzIzLDE0IEBACiAgKiBTZW1hcGhvcmUgc2hvdWxkIGJlIGFjcXVpcmVkIGZvciB2ZXJzaW9uIGNoZWNrLgogICovCiBzdGF0aWMgdm9pZAotYmZhX2lvY19zbV9md2NoZWNrX2VudHJ5KHN0cnVjdCBiZmFfaW9jICppb2MpCi17Ci0JYmZhX2lvY19od19zZW1fZ2V0KGlvYyk7Ci19Ci0KLS8qKgotICogQXdhaXRpbmcgaC93IHNlbWFwaG9yZSB0byBjb250aW51ZSB3aXRoIHZlcnNpb24gY2hlY2suCi0gKi8KLXN0YXRpYyB2b2lkCi1iZmFfaW9jX3NtX2Z3Y2hlY2soc3RydWN0IGJmYV9pb2MgKmlvYywgZW51bSBpb2NfZXZlbnQgZXZlbnQpCi17Ci0Jc3dpdGNoIChldmVudCkgewotCWNhc2UgSU9DX0VfU0VNTE9DS0VEOgotCQlpZiAoYmZhX2lvY19maXJtd2FyZV9sb2NrKGlvYykpIHsKLQkJCWlvYy0+cmV0cnlfY291bnQgPSAwOwotCQkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX2h3aW5pdCk7Ci0JCX0gZWxzZSB7Ci0JCQliZmFfbndfaW9jX2h3X3NlbV9yZWxlYXNlKGlvYyk7Ci0JCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fbWlzbWF0Y2gpOwotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBJT0NfRV9ESVNBQkxFOgotCQliZmFfaW9jX2Rpc2FibGVfY29tcChpb2MpOwotCQkvKiBmYWxsIHRocm91Z2ggKi8KLQotCWNhc2UgSU9DX0VfREVUQUNIOgotCQliZmFfaW9jX2h3X3NlbV9nZXRfY2FuY2VsKGlvYyk7Ci0JCWJmYV9mc21fc2V0X3N0YXRlKGlvYywgYmZhX2lvY19zbV9yZXNldCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBJT0NfRV9GV1JFQURZOgotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCWJmYV9zbV9mYXVsdChpb2MsIGV2ZW50KTsKLQl9Ci19Ci0KLS8qKgotICogTm90aWZ5IGVuYWJsZSBjb21wbGV0aW9uIGNhbGxiYWNrIGFuZCBnZW5lcmF0ZSBtaXNtYXRjaCBBRU4uCi0gKi8KLXN0YXRpYyB2b2lkCi1iZmFfaW9jX3NtX21pc21hdGNoX2VudHJ5KHN0cnVjdCBiZmFfaW9jICppb2MpCi17Ci0JLyoqCi0JICogUHJvdmlkZSBlbmFibGUgY29tcGxldGlvbiBjYWxsYmFjayBhbmQgQUVOIG5vdGlmaWNhdGlvbiBvbmx5IG9uY2UuCi0JICovCi0JaWYgKGlvYy0+cmV0cnlfY291bnQgPT0gMCkKLQkJaW9jLT5jYmZuLT5lbmFibGVfY2Jmbihpb2MtPmJmYSwgQkZBX1NUQVRVU19JT0NfRkFJTFVSRSk7Ci0JaW9jLT5yZXRyeV9jb3VudCsrOwotCWJmYV9pb2NfdGltZXJfc3RhcnQoaW9jKTsKLX0KLQotLyoqCi0gKiBBd2FpdGluZyBmaXJtd2FyZSB2ZXJzaW9uIG1hdGNoLgotICovCi1zdGF0aWMgdm9pZAotYmZhX2lvY19zbV9taXNtYXRjaChzdHJ1Y3QgYmZhX2lvYyAqaW9jLCBlbnVtIGlvY19ldmVudCBldmVudCkKLXsKLQlzd2l0Y2ggKGV2ZW50KSB7Ci0JY2FzZSBJT0NfRV9USU1FT1VUOgotCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fZndjaGVjayk7Ci0JCWJyZWFrOwotCi0JY2FzZSBJT0NfRV9ESVNBQkxFOgotCQliZmFfaW9jX2Rpc2FibGVfY29tcChpb2MpOwotCQkvKiBmYWxsIHRocm91Z2ggKi8KLQotCWNhc2UgSU9DX0VfREVUQUNIOgotCQliZmFfaW9jX3RpbWVyX3N0b3AoaW9jKTsKLQkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX3Jlc2V0KTsKLQkJYnJlYWs7Ci0KLQljYXNlIElPQ19FX0ZXUkVBRFk6Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJYmZhX3NtX2ZhdWx0KGlvYywgZXZlbnQpOwotCX0KLX0KLQotLyoqCi0gKiBSZXF1ZXN0IGZvciBzZW1hcGhvcmUuCi0gKi8KLXN0YXRpYyB2b2lkCi1iZmFfaW9jX3NtX3NlbXdhaXRfZW50cnkoc3RydWN0IGJmYV9pb2MgKmlvYykKLXsKLQliZmFfaW9jX2h3X3NlbV9nZXQoaW9jKTsKLX0KLQotLyoqCi0gKiBBd2FpdGluZyBzZW1hcGhvcmUgZm9yIGgvdyBpbml0aWFsemF0aW9uLgotICovCi1zdGF0aWMgdm9pZAotYmZhX2lvY19zbV9zZW13YWl0KHN0cnVjdCBiZmFfaW9jICppb2MsIGVudW0gaW9jX2V2ZW50IGV2ZW50KQotewotCXN3aXRjaCAoZXZlbnQpIHsKLQljYXNlIElPQ19FX1NFTUxPQ0tFRDoKLQkJaW9jLT5yZXRyeV9jb3VudCA9IDA7Ci0JCWJmYV9mc21fc2V0X3N0YXRlKGlvYywgYmZhX2lvY19zbV9od2luaXQpOwotCQlicmVhazsKLQotCWNhc2UgSU9DX0VfRElTQUJMRToKLQkJYmZhX2lvY19od19zZW1fZ2V0X2NhbmNlbChpb2MpOwotCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fZGlzYWJsZWQpOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCWJmYV9zbV9mYXVsdChpb2MsIGV2ZW50KTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi1iZmFfaW9jX3NtX2h3aW5pdF9lbnRyeShzdHJ1Y3QgYmZhX2lvYyAqaW9jKQotewotCWJmYV9pb2NfdGltZXJfc3RhcnQoaW9jKTsKLQliZmFfaW9jX3Jlc2V0KGlvYywgZmFsc2UpOwotfQotCi0vKioKLSAqIEBicmllZgotICogSGFyZHdhcmUgaXMgYmVpbmcgaW5pdGlhbGl6ZWQuIEludGVycnVwdHMgYXJlIGVuYWJsZWQuCi0gKiBIb2xkaW5nIGhhcmR3YXJlIHNlbWFwaG9yZSBsb2NrLgotICovCi1zdGF0aWMgdm9pZAotYmZhX2lvY19zbV9od2luaXQoc3RydWN0IGJmYV9pb2MgKmlvYywgZW51bSBpb2NfZXZlbnQgZXZlbnQpCi17Ci0Jc3dpdGNoIChldmVudCkgewotCWNhc2UgSU9DX0VfRldSRUFEWToKLQkJYmZhX2lvY190aW1lcl9zdG9wKGlvYyk7Ci0JCWJmYV9mc21fc2V0X3N0YXRlKGlvYywgYmZhX2lvY19zbV9lbmFibGluZyk7Ci0JCWJyZWFrOwotCi0JY2FzZSBJT0NfRV9IV0VSUk9SOgotCQliZmFfaW9jX3RpbWVyX3N0b3AoaW9jKTsKLQkJLyogZmFsbCB0aHJvdWdoICovCi0KLQljYXNlIElPQ19FX1RJTUVPVVQ6Ci0JCWlvYy0+cmV0cnlfY291bnQrKzsKLQkJaWYgKGlvYy0+cmV0cnlfY291bnQgPCBCRkFfSU9DX0hXSU5JVF9NQVgpIHsKLQkJCWJmYV9pb2NfdGltZXJfc3RhcnQoaW9jKTsKLQkJCWJmYV9pb2NfcmVzZXQoaW9jLCB0cnVlKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJYmZhX253X2lvY19od19zZW1fcmVsZWFzZShpb2MpOwotCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21faW5pdGZhaWwpOwotCQlicmVhazsKLQotCWNhc2UgSU9DX0VfRElTQUJMRToKLQkJYmZhX253X2lvY19od19zZW1fcmVsZWFzZShpb2MpOwotCQliZmFfaW9jX3RpbWVyX3N0b3AoaW9jKTsKLQkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX2Rpc2FibGVkKTsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQliZmFfc21fZmF1bHQoaW9jLCBldmVudCk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZAotYmZhX2lvY19zbV9lbmFibGluZ19lbnRyeShzdHJ1Y3QgYmZhX2lvYyAqaW9jKQotewotCWJmYV9pb2NfdGltZXJfc3RhcnQoaW9jKTsKLQliZmFfaW9jX3NlbmRfZW5hYmxlKGlvYyk7Ci19Ci0KLS8qKgotICogSG9zdCBJT0MgZnVuY3Rpb24gaXMgYmVpbmcgZW5hYmxlZCwgYXdhaXRpbmcgcmVzcG9uc2UgZnJvbSBmaXJtd2FyZS4KLSAqIFNlbWFwaG9yZSBpcyBhY3F1aXJlZC4KLSAqLwotc3RhdGljIHZvaWQKLWJmYV9pb2Nfc21fZW5hYmxpbmcoc3RydWN0IGJmYV9pb2MgKmlvYywgZW51bSBpb2NfZXZlbnQgZXZlbnQpCi17Ci0Jc3dpdGNoIChldmVudCkgewotCWNhc2UgSU9DX0VfRldSU1BfRU5BQkxFOgotCQliZmFfaW9jX3RpbWVyX3N0b3AoaW9jKTsKLQkJYmZhX253X2lvY19od19zZW1fcmVsZWFzZShpb2MpOwotCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fZ2V0YXR0cik7Ci0JCWJyZWFrOwotCi0JY2FzZSBJT0NfRV9IV0VSUk9SOgotCQliZmFfaW9jX3RpbWVyX3N0b3AoaW9jKTsKLQkJLyogZmFsbCB0aHJvdWdoICovCi0KLQljYXNlIElPQ19FX1RJTUVPVVQ6Ci0JCWlvYy0+cmV0cnlfY291bnQrKzsKLQkJaWYgKGlvYy0+cmV0cnlfY291bnQgPCBCRkFfSU9DX0hXSU5JVF9NQVgpIHsKLQkJCXdyaXRlbChCRklfSU9DX1VOSU5JVCwKLQkJCQkgICAgICBpb2MtPmlvY19yZWdzLmlvY19md3N0YXRlKTsKLQkJCWJmYV9mc21fc2V0X3N0YXRlKGlvYywgYmZhX2lvY19zbV9od2luaXQpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQliZmFfbndfaW9jX2h3X3NlbV9yZWxlYXNlKGlvYyk7Ci0JCWJmYV9mc21fc2V0X3N0YXRlKGlvYywgYmZhX2lvY19zbV9pbml0ZmFpbCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBJT0NfRV9ESVNBQkxFOgotCQliZmFfaW9jX3RpbWVyX3N0b3AoaW9jKTsKLQkJYmZhX253X2lvY19od19zZW1fcmVsZWFzZShpb2MpOwotCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fZGlzYWJsZWQpOwotCQlicmVhazsKLQotCWNhc2UgSU9DX0VfRldSRUFEWToKLQkJYmZhX2lvY19zZW5kX2VuYWJsZShpb2MpOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCWJmYV9zbV9mYXVsdChpb2MsIGV2ZW50KTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCiBiZmFfaW9jX3NtX2dldGF0dHJfZW50cnkoc3RydWN0IGJmYV9pb2MgKmlvYykKIHsKLQliZmFfaW9jX3RpbWVyX3N0YXJ0KGlvYyk7CisJbW9kX3RpbWVyKCZpb2MtPmlvY190aW1lciwgamlmZmllcyArCisJCW1zZWNzX3RvX2ppZmZpZXMoQkZBX0lPQ19UT1YpKTsKIAliZmFfaW9jX3NlbmRfZ2V0YXR0cihpb2MpOwogfQogCiAvKioKLSAqIEBicmllZgogICogSU9DIGNvbmZpZ3VyYXRpb24gaW4gcHJvZ3Jlc3MuIFRpbWVyIGlzIGFjdGl2ZS4KICAqLwogc3RhdGljIHZvaWQKQEAgLTQxNSwyMiArMzM4LDI4IEBACiB7CiAJc3dpdGNoIChldmVudCkgewogCWNhc2UgSU9DX0VfRldSU1BfR0VUQVRUUjoKLQkJYmZhX2lvY190aW1lcl9zdG9wKGlvYyk7CisJCWRlbF90aW1lcigmaW9jLT5pb2NfdGltZXIpOwogCQliZmFfaW9jX2NoZWNrX2F0dHJfd3ducyhpb2MpOwogCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fb3ApOwogCQlicmVhazsKIAorCWNhc2UgSU9DX0VfUEZBSUxFRDoKIAljYXNlIElPQ19FX0hXRVJST1I6Ci0JCWJmYV9pb2NfdGltZXJfc3RvcChpb2MpOworCQlkZWxfdGltZXIoJmlvYy0+aW9jX3RpbWVyKTsKIAkJLyogZmFsbCB0aHJvdWdoICovCi0KIAljYXNlIElPQ19FX1RJTUVPVVQ6Ci0JCWJmYV9mc21fc2V0X3N0YXRlKGlvYywgYmZhX2lvY19zbV9pbml0ZmFpbCk7CisJCWlvYy0+Y2Jmbi0+ZW5hYmxlX2NiZm4oaW9jLT5iZmEsIEJGQV9TVEFUVVNfSU9DX0ZBSUxVUkUpOworCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fZmFpbF9yZXRyeSk7CisJCWlmIChldmVudCAhPSBJT0NfRV9QRkFJTEVEKQorCQkJYmZhX2lvY3BmX2dldGF0dHJmYWlsKGlvYyk7CiAJCWJyZWFrOwogCiAJY2FzZSBJT0NfRV9ESVNBQkxFOgotCQliZmFfaW9jX3RpbWVyX3N0b3AoaW9jKTsKLQkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX2Rpc2FibGVkKTsKKwkJZGVsX3RpbWVyKCZpb2MtPmlvY190aW1lcik7CisJCWJmYV9mc21fc2V0X3N0YXRlKGlvYywgYmZhX2lvY19zbV9kaXNhYmxpbmcpOworCQlicmVhazsKKworCWNhc2UgSU9DX0VfRU5BQkxFOgogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC00NTcsMTcgKzM4NiwxOSBAQAogCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fZGlzYWJsaW5nKTsKIAkJYnJlYWs7CiAKKwljYXNlIElPQ19FX1BGQUlMRUQ6CiAJY2FzZSBJT0NfRV9IV0VSUk9SOgotCWNhc2UgSU9DX0VfRldSRUFEWToKLQkJLyoqCi0JCSAqIEhhcmQgZXJyb3Igb3IgSU9DIHJlY292ZXJ5IGJ5IG90aGVyIGZ1bmN0aW9uLgotCQkgKiBUcmVhdCBpdCBzYW1lIGFzIGhlYXJ0YmVhdCBmYWlsdXJlLgotCQkgKi8KIAkJYmZhX2lvY19oYl9zdG9wKGlvYyk7CiAJCS8qICEhISBmYWxsIHRocm91Z2ggISEhICovCi0KIAljYXNlIElPQ19FX0hCRkFJTDoKLQkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX2hiZmFpbCk7CisJCWJmYV9pb2NfZmFpbF9ub3RpZnkoaW9jKTsKKwkJaWYgKGlvYy0+aW9jcGYuYXV0b19yZWNvdmVyKQorCQkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX2ZhaWxfcmV0cnkpOworCQllbHNlCisJCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fZmFpbCk7CisKKwkJaWYgKGV2ZW50ICE9IElPQ19FX1BGQUlMRUQpCisJCQliZmFfaW9jcGZfZmFpbChpb2MpOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC00NzgsMzEgKzQwOSwyNyBAQAogc3RhdGljIHZvaWQKIGJmYV9pb2Nfc21fZGlzYWJsaW5nX2VudHJ5KHN0cnVjdCBiZmFfaW9jICppb2MpCiB7Ci0JYmZhX2lvY190aW1lcl9zdGFydChpb2MpOwotCWJmYV9pb2Nfc2VuZF9kaXNhYmxlKGlvYyk7CisJYmZhX2lvY3BmX2Rpc2FibGUoaW9jKTsKIH0KIAogLyoqCi0gKiBJT0MgaXMgYmVpbmcgZGlzYWJsZWQKKyAqIElPQyBpcyBiZWluZyBkZXNhYmxlZAogICovCiBzdGF0aWMgdm9pZAogYmZhX2lvY19zbV9kaXNhYmxpbmcoc3RydWN0IGJmYV9pb2MgKmlvYywgZW51bSBpb2NfZXZlbnQgZXZlbnQpCiB7CiAJc3dpdGNoIChldmVudCkgewotCWNhc2UgSU9DX0VfRldSU1BfRElTQUJMRToKLQkJYmZhX2lvY190aW1lcl9zdG9wKGlvYyk7CisJY2FzZSBJT0NfRV9ESVNBQkxFRDoKIAkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX2Rpc2FibGVkKTsKIAkJYnJlYWs7CiAKIAljYXNlIElPQ19FX0hXRVJST1I6Ci0JCWJmYV9pb2NfdGltZXJfc3RvcChpb2MpOwogCQkvKgotCQkgKiAhISEgZmFsbCB0aHJvdWdoICEhIQorCQkgKiBObyBzdGF0ZSBjaGFuZ2UuICBXaWxsIG1vdmUgdG8gZGlzYWJsZWQgc3RhdGUKKwkJICogYWZ0ZXIgaW9jcGYgc20gY29tcGxldGVzIGZhaWx1cmUgcHJvY2Vzc2luZyBhbmQKKwkJICogbW92ZXMgdG8gZGlzYWJsZWQgc3RhdGUuCiAJCSAqLwotCi0JY2FzZSBJT0NfRV9USU1FT1VUOgotCQl3cml0ZWwoQkZJX0lPQ19GQUlMLCBpb2MtPmlvY19yZWdzLmlvY19md3N0YXRlKTsKLQkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX2Rpc2FibGVkKTsKKwkJYmZhX2lvY3BmX2ZhaWwoaW9jKTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpAQCAtNTExLDcgKzQzOCw3IEBACiB9CiAKIC8qKgotICogSU9DIGRpc2FibGUgY29tcGxldGlvbiBlbnRyeS4KKyAqIElPQyBkZXNhYmxlIGNvbXBsZXRpb24gZW50cnkuCiAgKi8KIHN0YXRpYyB2b2lkCiBiZmFfaW9jX3NtX2Rpc2FibGVkX2VudHJ5KHN0cnVjdCBiZmFfaW9jICppb2MpCkBAIC01MjQsMTkgKzQ1MSwxNiBAQAogewogCXN3aXRjaCAoZXZlbnQpIHsKIAljYXNlIElPQ19FX0VOQUJMRToKLQkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX3NlbXdhaXQpOworCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fZW5hYmxpbmcpOwogCQlicmVhazsKIAogCWNhc2UgSU9DX0VfRElTQUJMRToKIAkJaW9jLT5jYmZuLT5kaXNhYmxlX2NiZm4oaW9jLT5iZmEpOwogCQlicmVhazsKIAotCWNhc2UgSU9DX0VfRldSRUFEWToKLQkJYnJlYWs7Ci0KIAljYXNlIElPQ19FX0RFVEFDSDoKLQkJYmZhX2lvY19maXJtd2FyZV91bmxvY2soaW9jKTsKLQkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX3Jlc2V0KTsKKwkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX3VuaW5pdCk7CisJCWJmYV9pb2NwZl9zdG9wKGlvYyk7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKQEAgLTU0NSwzMyArNDY5LDQ1IEBACiB9CiAKIHN0YXRpYyB2b2lkCi1iZmFfaW9jX3NtX2luaXRmYWlsX2VudHJ5KHN0cnVjdCBiZmFfaW9jICppb2MpCitiZmFfaW9jX3NtX2ZhaWxfcmV0cnlfZW50cnkoc3RydWN0IGJmYV9pb2MgKmlvYykKIHsKLQlpb2MtPmNiZm4tPmVuYWJsZV9jYmZuKGlvYy0+YmZhLCBCRkFfU1RBVFVTX0lPQ19GQUlMVVJFKTsKLQliZmFfaW9jX3RpbWVyX3N0YXJ0KGlvYyk7CiB9CiAKIC8qKgotICogQGJyaWVmCi0gKiBIYXJkd2FyZSBpbml0aWFsaXphdGlvbiBmYWlsZWQuCisgKiBIYXJkd2FyZSBpbml0aWFsaXphdGlvbiByZXRyeS4KICAqLwogc3RhdGljIHZvaWQKLWJmYV9pb2Nfc21faW5pdGZhaWwoc3RydWN0IGJmYV9pb2MgKmlvYywgZW51bSBpb2NfZXZlbnQgZXZlbnQpCitiZmFfaW9jX3NtX2ZhaWxfcmV0cnkoc3RydWN0IGJmYV9pb2MgKmlvYywgZW51bSBpb2NfZXZlbnQgZXZlbnQpCiB7CiAJc3dpdGNoIChldmVudCkgeworCWNhc2UgSU9DX0VfRU5BQkxFRDoKKwkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX2dldGF0dHIpOworCQlicmVhazsKKworCWNhc2UgSU9DX0VfUEZBSUxFRDoKKwljYXNlIElPQ19FX0hXRVJST1I6CisJCS8qKgorCQkgKiBJbml0aWFsaXphdGlvbiByZXRyeSBmYWlsZWQuCisJCSAqLworCQlpb2MtPmNiZm4tPmVuYWJsZV9jYmZuKGlvYy0+YmZhLCBCRkFfU1RBVFVTX0lPQ19GQUlMVVJFKTsKKwkJaWYgKGV2ZW50ICE9IElPQ19FX1BGQUlMRUQpCisJCQliZmFfaW9jcGZfaW5pdGZhaWwoaW9jKTsKKwkJYnJlYWs7CisKKwljYXNlIElPQ19FX0lOSVRGQUlMRUQ6CisJCWJmYV9mc21fc2V0X3N0YXRlKGlvYywgYmZhX2lvY19zbV9mYWlsKTsKKwkJYnJlYWs7CisKKwljYXNlIElPQ19FX0VOQUJMRToKKwkJYnJlYWs7CisKIAljYXNlIElPQ19FX0RJU0FCTEU6Ci0JCWJmYV9pb2NfdGltZXJfc3RvcChpb2MpOwotCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fZGlzYWJsZWQpOworCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fZGlzYWJsaW5nKTsKIAkJYnJlYWs7CiAKIAljYXNlIElPQ19FX0RFVEFDSDoKLQkJYmZhX2lvY190aW1lcl9zdG9wKGlvYyk7Ci0JCWJmYV9pb2NfZmlybXdhcmVfdW5sb2NrKGlvYyk7Ci0JCWJmYV9mc21fc2V0X3N0YXRlKGlvYywgYmZhX2lvY19zbV9yZXNldCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBJT0NfRV9USU1FT1VUOgotCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fc2Vtd2FpdCk7CisJCWJmYV9mc21fc2V0X3N0YXRlKGlvYywgYmZhX2lvY19zbV91bmluaXQpOworCQliZmFfaW9jcGZfc3RvcChpb2MpOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC01ODAsODQgKzUxNiw2MDkgQEAKIH0KIAogc3RhdGljIHZvaWQKLWJmYV9pb2Nfc21faGJmYWlsX2VudHJ5KHN0cnVjdCBiZmFfaW9jICppb2MpCitiZmFfaW9jX3NtX2ZhaWxfZW50cnkoc3RydWN0IGJmYV9pb2MgKmlvYykKIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkCQkJKnFlOwotCXN0cnVjdCBiZmFfaW9jX2hiZmFpbF9ub3RpZnkgKm5vdGlmeTsKLQotCS8qKgotCSAqIE1hcmsgSU9DIGFzIGZhaWxlZCBpbiBoYXJkd2FyZSBhbmQgc3RvcCBmaXJtd2FyZS4KLQkgKi8KLQliZmFfaW9jX2xwdV9zdG9wKGlvYyk7Ci0Jd3JpdGVsKEJGSV9JT0NfRkFJTCwgaW9jLT5pb2NfcmVncy5pb2NfZndzdGF0ZSk7Ci0KLQkvKioKLQkgKiBOb3RpZnkgb3RoZXIgZnVuY3Rpb25zIG9uIEhCIGZhaWx1cmUuCi0JICovCi0JYmZhX2lvY19ub3RpZnlfaGJmYWlsKGlvYyk7Ci0KLQkvKioKLQkgKiBOb3RpZnkgZHJpdmVyIGFuZCBjb21tb24gbW9kdWxlcyByZWdpc3RlcmVkIGZvciBub3RpZmljYXRpb24uCi0JICovCi0JaW9jLT5jYmZuLT5oYmZhaWxfY2Jmbihpb2MtPmJmYSk7Ci0JbGlzdF9mb3JfZWFjaChxZSwgJmlvYy0+aGJfbm90aWZ5X3EpIHsKLQkJbm90aWZ5ID0gKHN0cnVjdCBiZmFfaW9jX2hiZmFpbF9ub3RpZnkgKikgcWU7Ci0JCW5vdGlmeS0+Y2Jmbihub3RpZnktPmNiYXJnKTsKLQl9Ci0KLQkvKioKLQkgKiBGbHVzaCBhbnkgcXVldWVkIHVwIG1haWxib3ggcmVxdWVzdHMuCi0JICovCi0JYmZhX2lvY19tYm94X2hiZmFpbChpb2MpOwotCi0JLyoqCi0JICogVHJpZ2dlciBhdXRvLXJlY292ZXJ5IGFmdGVyIGEgZGVsYXkuCi0JICovCi0JaWYgKGlvYy0+YXV0b19yZWNvdmVyKQotCQltb2RfdGltZXIoJmlvYy0+aW9jX3RpbWVyLCBqaWZmaWVzICsKLQkJCW1zZWNzX3RvX2ppZmZpZXMoQkZBX0lPQ19UT1ZfUkVDT1ZFUikpOwogfQogCiAvKioKLSAqIEBicmllZgotICogSU9DIGhlYXJ0YmVhdCBmYWlsdXJlLgorICogSU9DIGZhaWx1cmUuCiAgKi8KIHN0YXRpYyB2b2lkCi1iZmFfaW9jX3NtX2hiZmFpbChzdHJ1Y3QgYmZhX2lvYyAqaW9jLCBlbnVtIGlvY19ldmVudCBldmVudCkKK2JmYV9pb2Nfc21fZmFpbChzdHJ1Y3QgYmZhX2lvYyAqaW9jLCBlbnVtIGlvY19ldmVudCBldmVudCkKIHsKIAlzd2l0Y2ggKGV2ZW50KSB7Ci0KIAljYXNlIElPQ19FX0VOQUJMRToKIAkJaW9jLT5jYmZuLT5lbmFibGVfY2Jmbihpb2MtPmJmYSwgQkZBX1NUQVRVU19JT0NfRkFJTFVSRSk7CiAJCWJyZWFrOwogCiAJY2FzZSBJT0NfRV9ESVNBQkxFOgotCQlpZiAoaW9jLT5hdXRvX3JlY292ZXIpCi0JCQliZmFfaW9jX3RpbWVyX3N0b3AoaW9jKTsKLQkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX2Rpc2FibGVkKTsKKwkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX2Rpc2FibGluZyk7CiAJCWJyZWFrOwogCi0JY2FzZSBJT0NfRV9USU1FT1VUOgotCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fc2Vtd2FpdCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBJT0NfRV9GV1JFQURZOgotCQkvKioKLQkJICogUmVjb3ZlcnkgaXMgYWxyZWFkeSBpbml0aWF0ZWQgYnkgb3RoZXIgZnVuY3Rpb24uCi0JCSAqLworCWNhc2UgSU9DX0VfREVUQUNIOgorCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fdW5pbml0KTsKKwkJYmZhX2lvY3BmX3N0b3AoaW9jKTsKIAkJYnJlYWs7CiAKIAljYXNlIElPQ19FX0hXRVJST1I6Ci0JCS8qCi0JCSAqIEhCIGZhaWx1cmUgbm90aWZpY2F0aW9uLCBpZ25vcmUuCi0JCSAqLworCQkvKiBIQiBmYWlsdXJlIG5vdGlmaWNhdGlvbiwgaWdub3JlLiAqLwogCQlicmVhazsKKwogCWRlZmF1bHQ6CiAJCWJmYV9zbV9mYXVsdChpb2MsIGV2ZW50KTsKIAl9CiB9CiAKIC8qKgorICogSU9DUEYgU3RhdGUgTWFjaGluZQorICovCisKKy8qKgorICogUmVzZXQgZW50cnkgYWN0aW9ucyAtLSBpbml0aWFsaXplIHN0YXRlIG1hY2hpbmUKKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2NwZl9zbV9yZXNldF9lbnRyeShzdHJ1Y3QgYmZhX2lvY3BmICppb2NwZikKK3sKKwlpb2NwZi0+cmV0cnlfY291bnQgPSAwOworCWlvY3BmLT5hdXRvX3JlY292ZXIgPSBiZmFfbndfYXV0b19yZWNvdmVyOworfQorCisvKioKKyAqIEJlZ2lubmluZyBzdGF0ZS4gSU9DIGlzIGluIHJlc2V0IHN0YXRlLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvY3BmX3NtX3Jlc2V0KHN0cnVjdCBiZmFfaW9jcGYgKmlvY3BmLCBlbnVtIGlvY3BmX2V2ZW50IGV2ZW50KQoreworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIElPQ1BGX0VfRU5BQkxFOgorCQliZmFfZnNtX3NldF9zdGF0ZShpb2NwZiwgYmZhX2lvY3BmX3NtX2Z3Y2hlY2spOworCQlicmVhazsKKworCWNhc2UgSU9DUEZfRV9TVE9QOgorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zbV9mYXVsdChpb2NwZi0+aW9jLCBldmVudCk7CisJfQorfQorCisvKioKKyAqIFNlbWFwaG9yZSBzaG91bGQgYmUgYWNxdWlyZWQgZm9yIHZlcnNpb24gY2hlY2suCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9jcGZfc21fZndjaGVja19lbnRyeShzdHJ1Y3QgYmZhX2lvY3BmICppb2NwZikKK3sKKwliZmFfaW9jX2h3X3NlbV9nZXQoaW9jcGYtPmlvYyk7Cit9CisKKy8qKgorICogQXdhaXRpbmcgaC93IHNlbWFwaG9yZSB0byBjb250aW51ZSB3aXRoIHZlcnNpb24gY2hlY2suCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9jcGZfc21fZndjaGVjayhzdHJ1Y3QgYmZhX2lvY3BmICppb2NwZiwgZW51bSBpb2NwZl9ldmVudCBldmVudCkKK3sKKwlzdHJ1Y3QgYmZhX2lvYyAqaW9jID0gaW9jcGYtPmlvYzsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIElPQ1BGX0VfU0VNTE9DS0VEOgorCQlpZiAoYmZhX2lvY19maXJtd2FyZV9sb2NrKGlvYykpIHsKKwkJCWlmIChiZmFfaW9jX3N5bmNfY29tcGxldGUoaW9jKSkgeworCQkJCWlvY3BmLT5yZXRyeV9jb3VudCA9IDA7CisJCQkJYmZhX2lvY19zeW5jX2pvaW4oaW9jKTsKKwkJCQliZmFfZnNtX3NldF9zdGF0ZShpb2NwZiwgYmZhX2lvY3BmX3NtX2h3aW5pdCk7CisJCQl9IGVsc2UgeworCQkJCWJmYV9pb2NfZmlybXdhcmVfdW5sb2NrKGlvYyk7CisJCQkJYmZhX253X2lvY19od19zZW1fcmVsZWFzZShpb2MpOworCQkJCW1vZF90aW1lcigmaW9jLT5zZW1fdGltZXIsIGppZmZpZXMgKworCQkJCQltc2Vjc190b19qaWZmaWVzKEJGQV9JT0NfSFdTRU1fVE9WKSk7CisJCQl9CisJCX0gZWxzZSB7CisJCQliZmFfbndfaW9jX2h3X3NlbV9yZWxlYXNlKGlvYyk7CisJCQliZmFfZnNtX3NldF9zdGF0ZShpb2NwZiwgYmZhX2lvY3BmX3NtX21pc21hdGNoKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgSU9DUEZfRV9ESVNBQkxFOgorCQliZmFfaW9jX2h3X3NlbV9nZXRfY2FuY2VsKGlvYyk7CisJCWJmYV9mc21fc2V0X3N0YXRlKGlvY3BmLCBiZmFfaW9jcGZfc21fcmVzZXQpOworCQliZmFfaW9jX3BmX2Rpc2FibGVkKGlvYyk7CisJCWJyZWFrOworCisJY2FzZSBJT0NQRl9FX1NUT1A6CisJCWJmYV9pb2NfaHdfc2VtX2dldF9jYW5jZWwoaW9jKTsKKwkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jcGYsIGJmYV9pb2NwZl9zbV9yZXNldCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3NtX2ZhdWx0KGlvYywgZXZlbnQpOworCX0KK30KKworLyoqCisgKiBOb3RpZnkgZW5hYmxlIGNvbXBsZXRpb24gY2FsbGJhY2sKKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2NwZl9zbV9taXNtYXRjaF9lbnRyeShzdHJ1Y3QgYmZhX2lvY3BmICppb2NwZikKK3sKKwkvKiBDYWxsIG9ubHkgdGhlIGZpcnN0IHRpbWUgc20gZW50ZXJzIGZ3bWlzbWF0Y2ggc3RhdGUuICovCisJaWYgKGlvY3BmLT5yZXRyeV9jb3VudCA9PSAwKQorCQliZmFfaW9jX3BmX2Z3bWlzbWF0Y2goaW9jcGYtPmlvYyk7CisKKwlpb2NwZi0+cmV0cnlfY291bnQrKzsKKwltb2RfdGltZXIoJihpb2NwZi0+aW9jKS0+aW9jcGZfdGltZXIsIGppZmZpZXMgKworCQltc2Vjc190b19qaWZmaWVzKEJGQV9JT0NfVE9WKSk7Cit9CisKKy8qKgorICogQXdhaXRpbmcgZmlybXdhcmUgdmVyc2lvbiBtYXRjaC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2NwZl9zbV9taXNtYXRjaChzdHJ1Y3QgYmZhX2lvY3BmICppb2NwZiwgZW51bSBpb2NwZl9ldmVudCBldmVudCkKK3sKKwlzdHJ1Y3QgYmZhX2lvYyAqaW9jID0gaW9jcGYtPmlvYzsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIElPQ1BGX0VfVElNRU9VVDoKKwkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jcGYsIGJmYV9pb2NwZl9zbV9md2NoZWNrKTsKKwkJYnJlYWs7CisKKwljYXNlIElPQ1BGX0VfRElTQUJMRToKKwkJZGVsX3RpbWVyKCZpb2MtPmlvY3BmX3RpbWVyKTsKKwkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jcGYsIGJmYV9pb2NwZl9zbV9yZXNldCk7CisJCWJmYV9pb2NfcGZfZGlzYWJsZWQoaW9jKTsKKwkJYnJlYWs7CisKKwljYXNlIElPQ1BGX0VfU1RPUDoKKwkJZGVsX3RpbWVyKCZpb2MtPmlvY3BmX3RpbWVyKTsKKwkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jcGYsIGJmYV9pb2NwZl9zbV9yZXNldCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3NtX2ZhdWx0KGlvYywgZXZlbnQpOworCX0KK30KKworLyoqCisgKiBSZXF1ZXN0IGZvciBzZW1hcGhvcmUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9jcGZfc21fc2Vtd2FpdF9lbnRyeShzdHJ1Y3QgYmZhX2lvY3BmICppb2NwZikKK3sKKwliZmFfaW9jX2h3X3NlbV9nZXQoaW9jcGYtPmlvYyk7Cit9CisKKy8qKgorICogQXdhaXRpbmcgc2VtYXBob3JlIGZvciBoL3cgaW5pdGlhbHphdGlvbi4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2NwZl9zbV9zZW13YWl0KHN0cnVjdCBiZmFfaW9jcGYgKmlvY3BmLCBlbnVtIGlvY3BmX2V2ZW50IGV2ZW50KQoreworCXN0cnVjdCBiZmFfaW9jICppb2MgPSBpb2NwZi0+aW9jOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgSU9DUEZfRV9TRU1MT0NLRUQ6CisJCWlmIChiZmFfaW9jX3N5bmNfY29tcGxldGUoaW9jKSkgeworCQkJYmZhX2lvY19zeW5jX2pvaW4oaW9jKTsKKwkJCWJmYV9mc21fc2V0X3N0YXRlKGlvY3BmLCBiZmFfaW9jcGZfc21faHdpbml0KTsKKwkJfSBlbHNlIHsKKwkJCWJmYV9ud19pb2NfaHdfc2VtX3JlbGVhc2UoaW9jKTsKKwkJCW1vZF90aW1lcigmaW9jLT5zZW1fdGltZXIsIGppZmZpZXMgKworCQkJCW1zZWNzX3RvX2ppZmZpZXMoQkZBX0lPQ19IV1NFTV9UT1YpKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgSU9DUEZfRV9ESVNBQkxFOgorCQliZmFfaW9jX2h3X3NlbV9nZXRfY2FuY2VsKGlvYyk7CisJCWJmYV9mc21fc2V0X3N0YXRlKGlvY3BmLCBiZmFfaW9jcGZfc21fZGlzYWJsaW5nX3N5bmMpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zbV9mYXVsdChpb2MsIGV2ZW50KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfaW9jcGZfc21faHdpbml0X2VudHJ5KHN0cnVjdCBiZmFfaW9jcGYgKmlvY3BmKQoreworCW1vZF90aW1lcigmKGlvY3BmLT5pb2MpLT5pb2NwZl90aW1lciwgamlmZmllcyArCisJCW1zZWNzX3RvX2ppZmZpZXMoQkZBX0lPQ19UT1YpKTsKKwliZmFfaW9jX3Jlc2V0KGlvY3BmLT5pb2MsIDApOworfQorCisvKioKKyAqIEhhcmR3YXJlIGlzIGJlaW5nIGluaXRpYWxpemVkLiBJbnRlcnJ1cHRzIGFyZSBlbmFibGVkLgorICogSG9sZGluZyBoYXJkd2FyZSBzZW1hcGhvcmUgbG9jay4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2NwZl9zbV9od2luaXQoc3RydWN0IGJmYV9pb2NwZiAqaW9jcGYsIGVudW0gaW9jcGZfZXZlbnQgZXZlbnQpCit7CisJc3RydWN0IGJmYV9pb2MgKmlvYyA9IGlvY3BmLT5pb2M7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBJT0NQRl9FX0ZXUkVBRFk6CisJCWRlbF90aW1lcigmaW9jLT5pb2NwZl90aW1lcik7CisJCWJmYV9mc21fc2V0X3N0YXRlKGlvY3BmLCBiZmFfaW9jcGZfc21fZW5hYmxpbmcpOworCQlicmVhazsKKworCWNhc2UgSU9DUEZfRV9JTklURkFJTDoKKwkJZGVsX3RpbWVyKCZpb2MtPmlvY3BmX3RpbWVyKTsKKwkJLyoKKwkJICogISEhIGZhbGwgdGhyb3VnaCAhISEKKwkJICovCisKKwljYXNlIElPQ1BGX0VfVElNRU9VVDoKKwkJYmZhX253X2lvY19od19zZW1fcmVsZWFzZShpb2MpOworCQlpZiAoZXZlbnQgPT0gSU9DUEZfRV9USU1FT1VUKQorCQkJYmZhX2lvY19wZl9mYWlsZWQoaW9jKTsKKwkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jcGYsIGJmYV9pb2NwZl9zbV9pbml0ZmFpbF9zeW5jKTsKKwkJYnJlYWs7CisKKwljYXNlIElPQ1BGX0VfRElTQUJMRToKKwkJZGVsX3RpbWVyKCZpb2MtPmlvY3BmX3RpbWVyKTsKKwkJYmZhX2lvY19zeW5jX2xlYXZlKGlvYyk7CisJCWJmYV9ud19pb2NfaHdfc2VtX3JlbGVhc2UoaW9jKTsKKwkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jcGYsIGJmYV9pb2NwZl9zbV9kaXNhYmxlZCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3NtX2ZhdWx0KGlvYywgZXZlbnQpOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9pb2NwZl9zbV9lbmFibGluZ19lbnRyeShzdHJ1Y3QgYmZhX2lvY3BmICppb2NwZikKK3sKKwltb2RfdGltZXIoJihpb2NwZi0+aW9jKS0+aW9jcGZfdGltZXIsIGppZmZpZXMgKworCQltc2Vjc190b19qaWZmaWVzKEJGQV9JT0NfVE9WKSk7CisJYmZhX2lvY19zZW5kX2VuYWJsZShpb2NwZi0+aW9jKTsKK30KKworLyoqCisgKiBIb3N0IElPQyBmdW5jdGlvbiBpcyBiZWluZyBlbmFibGVkLCBhd2FpdGluZyByZXNwb25zZSBmcm9tIGZpcm13YXJlLgorICogU2VtYXBob3JlIGlzIGFjcXVpcmVkLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvY3BmX3NtX2VuYWJsaW5nKHN0cnVjdCBiZmFfaW9jcGYgKmlvY3BmLCBlbnVtIGlvY3BmX2V2ZW50IGV2ZW50KQoreworCXN0cnVjdCBiZmFfaW9jICppb2MgPSBpb2NwZi0+aW9jOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgSU9DUEZfRV9GV1JTUF9FTkFCTEU6CisJCWRlbF90aW1lcigmaW9jLT5pb2NwZl90aW1lcik7CisJCWJmYV9ud19pb2NfaHdfc2VtX3JlbGVhc2UoaW9jKTsKKwkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jcGYsIGJmYV9pb2NwZl9zbV9yZWFkeSk7CisJCWJyZWFrOworCisJY2FzZSBJT0NQRl9FX0lOSVRGQUlMOgorCQlkZWxfdGltZXIoJmlvYy0+aW9jcGZfdGltZXIpOworCQkvKgorCQkgKiAhISEgZmFsbCB0aHJvdWdoICEhIQorCQkgKi8KKwljYXNlIElPQ1BGX0VfVElNRU9VVDoKKwkJYmZhX253X2lvY19od19zZW1fcmVsZWFzZShpb2MpOworCQlpZiAoZXZlbnQgPT0gSU9DUEZfRV9USU1FT1VUKQorCQkJYmZhX2lvY19wZl9mYWlsZWQoaW9jKTsKKwkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jcGYsIGJmYV9pb2NwZl9zbV9pbml0ZmFpbF9zeW5jKTsKKwkJYnJlYWs7CisKKwljYXNlIElPQ1BGX0VfRElTQUJMRToKKwkJZGVsX3RpbWVyKCZpb2MtPmlvY3BmX3RpbWVyKTsKKwkJYmZhX253X2lvY19od19zZW1fcmVsZWFzZShpb2MpOworCQliZmFfZnNtX3NldF9zdGF0ZShpb2NwZiwgYmZhX2lvY3BmX3NtX2Rpc2FibGluZyk7CisJCWJyZWFrOworCisJY2FzZSBJT0NQRl9FX0ZXUkVBRFk6CisJCWJmYV9pb2Nfc2VuZF9lbmFibGUoaW9jKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc21fZmF1bHQoaW9jLCBldmVudCk7CisJfQorfQorCitzdGF0aWMgYm9vbAorYmZhX253X2lvY19pc19vcGVyYXRpb25hbChzdHJ1Y3QgYmZhX2lvYyAqaW9jKQoreworCXJldHVybiBiZmFfZnNtX2NtcF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fb3ApOworfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY3BmX3NtX3JlYWR5X2VudHJ5KHN0cnVjdCBiZmFfaW9jcGYgKmlvY3BmKQoreworCWJmYV9pb2NfcGZfZW5hYmxlZChpb2NwZi0+aW9jKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9pb2NwZl9zbV9yZWFkeShzdHJ1Y3QgYmZhX2lvY3BmICppb2NwZiwgZW51bSBpb2NwZl9ldmVudCBldmVudCkKK3sKKwlzdHJ1Y3QgYmZhX2lvYyAqaW9jID0gaW9jcGYtPmlvYzsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIElPQ1BGX0VfRElTQUJMRToKKwkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jcGYsIGJmYV9pb2NwZl9zbV9kaXNhYmxpbmcpOworCQlicmVhazsKKworCWNhc2UgSU9DUEZfRV9HRVRBVFRSRkFJTDoKKwkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jcGYsIGJmYV9pb2NwZl9zbV9pbml0ZmFpbF9zeW5jKTsKKwkJYnJlYWs7CisKKwljYXNlIElPQ1BGX0VfRkFJTDoKKwkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jcGYsIGJmYV9pb2NwZl9zbV9mYWlsX3N5bmMpOworCQlicmVhazsKKworCWNhc2UgSU9DUEZfRV9GV1JFQURZOgorCQliZmFfaW9jX3BmX2ZhaWxlZChpb2MpOworCQlpZiAoYmZhX253X2lvY19pc19vcGVyYXRpb25hbChpb2MpKQorCQkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jcGYsIGJmYV9pb2NwZl9zbV9mYWlsX3N5bmMpOworCQllbHNlCisJCQliZmFfZnNtX3NldF9zdGF0ZShpb2NwZiwgYmZhX2lvY3BmX3NtX2luaXRmYWlsX3N5bmMpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zbV9mYXVsdChpb2MsIGV2ZW50KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfaW9jcGZfc21fZGlzYWJsaW5nX2VudHJ5KHN0cnVjdCBiZmFfaW9jcGYgKmlvY3BmKQoreworCW1vZF90aW1lcigmKGlvY3BmLT5pb2MpLT5pb2NwZl90aW1lciwgamlmZmllcyArCisJCW1zZWNzX3RvX2ppZmZpZXMoQkZBX0lPQ19UT1YpKTsKKwliZmFfaW9jX3NlbmRfZGlzYWJsZShpb2NwZi0+aW9jKTsKK30KKworLyoqCisgKiBJT0MgaXMgYmVpbmcgZGlzYWJsZWQKKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2NwZl9zbV9kaXNhYmxpbmcoc3RydWN0IGJmYV9pb2NwZiAqaW9jcGYsIGVudW0gaW9jcGZfZXZlbnQgZXZlbnQpCit7CisJc3RydWN0IGJmYV9pb2MgKmlvYyA9IGlvY3BmLT5pb2M7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBJT0NQRl9FX0ZXUlNQX0RJU0FCTEU6CisJY2FzZSBJT0NQRl9FX0ZXUkVBRFk6CisJCWRlbF90aW1lcigmaW9jLT5pb2NwZl90aW1lcik7CisJCWJmYV9mc21fc2V0X3N0YXRlKGlvY3BmLCBiZmFfaW9jcGZfc21fZGlzYWJsaW5nX3N5bmMpOworCQlicmVhazsKKworCWNhc2UgSU9DUEZfRV9GQUlMOgorCQlkZWxfdGltZXIoJmlvYy0+aW9jcGZfdGltZXIpOworCQkvKgorCQkgKiAhISEgZmFsbCB0aHJvdWdoICEhIQorCQkgKi8KKworCWNhc2UgSU9DUEZfRV9USU1FT1VUOgorCQl3cml0ZWwoQkZJX0lPQ19GQUlMLCBpb2MtPmlvY19yZWdzLmlvY19md3N0YXRlKTsKKwkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jcGYsIGJmYV9pb2NwZl9zbV9kaXNhYmxpbmdfc3luYyk7CisJCWJyZWFrOworCisJY2FzZSBJT0NQRl9FX0ZXUlNQX0VOQUJMRToKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc21fZmF1bHQoaW9jLCBldmVudCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY3BmX3NtX2Rpc2FibGluZ19zeW5jX2VudHJ5KHN0cnVjdCBiZmFfaW9jcGYgKmlvY3BmKQoreworCWJmYV9pb2NfaHdfc2VtX2dldChpb2NwZi0+aW9jKTsKK30KKworLyoqCisgKiBJT0MgaGIgYWNrIHJlcXVlc3QgaXMgYmVpbmcgcmVtb3ZlZC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2NwZl9zbV9kaXNhYmxpbmdfc3luYyhzdHJ1Y3QgYmZhX2lvY3BmICppb2NwZiwgZW51bSBpb2NwZl9ldmVudCBldmVudCkKK3sKKwlzdHJ1Y3QgYmZhX2lvYyAqaW9jID0gaW9jcGYtPmlvYzsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIElPQ1BGX0VfU0VNTE9DS0VEOgorCQliZmFfaW9jX3N5bmNfbGVhdmUoaW9jKTsKKwkJYmZhX253X2lvY19od19zZW1fcmVsZWFzZShpb2MpOworCQliZmFfZnNtX3NldF9zdGF0ZShpb2NwZiwgYmZhX2lvY3BmX3NtX2Rpc2FibGVkKTsKKwkJYnJlYWs7CisKKwljYXNlIElPQ1BGX0VfRkFJTDoKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc21fZmF1bHQoaW9jLCBldmVudCk7CisJfQorfQorCisvKioKKyAqIElPQyBkaXNhYmxlIGNvbXBsZXRpb24gZW50cnkuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9jcGZfc21fZGlzYWJsZWRfZW50cnkoc3RydWN0IGJmYV9pb2NwZiAqaW9jcGYpCit7CisJYmZhX2lvY19wZl9kaXNhYmxlZChpb2NwZi0+aW9jKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9pb2NwZl9zbV9kaXNhYmxlZChzdHJ1Y3QgYmZhX2lvY3BmICppb2NwZiwgZW51bSBpb2NwZl9ldmVudCBldmVudCkKK3sKKwlzdHJ1Y3QgYmZhX2lvYyAqaW9jID0gaW9jcGYtPmlvYzsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIElPQ1BGX0VfRU5BQkxFOgorCQlpb2NwZi0+cmV0cnlfY291bnQgPSAwOworCQliZmFfZnNtX3NldF9zdGF0ZShpb2NwZiwgYmZhX2lvY3BmX3NtX3NlbXdhaXQpOworCQlicmVhazsKKworCWNhc2UgSU9DUEZfRV9TVE9QOgorCQliZmFfaW9jX2Zpcm13YXJlX3VubG9jayhpb2MpOworCQliZmFfZnNtX3NldF9zdGF0ZShpb2NwZiwgYmZhX2lvY3BmX3NtX3Jlc2V0KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc21fZmF1bHQoaW9jLCBldmVudCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY3BmX3NtX2luaXRmYWlsX3N5bmNfZW50cnkoc3RydWN0IGJmYV9pb2NwZiAqaW9jcGYpCit7CisJYmZhX2lvY19od19zZW1fZ2V0KGlvY3BmLT5pb2MpOworfQorCisvKioKKyAqIEhhcmR3YXJlIGluaXRpYWxpemF0aW9uIGZhaWxlZC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2NwZl9zbV9pbml0ZmFpbF9zeW5jKHN0cnVjdCBiZmFfaW9jcGYgKmlvY3BmLCBlbnVtIGlvY3BmX2V2ZW50IGV2ZW50KQoreworCXN0cnVjdCBiZmFfaW9jICppb2MgPSBpb2NwZi0+aW9jOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgSU9DUEZfRV9TRU1MT0NLRUQ6CisJCWJmYV9pb2Nfbm90aWZ5X2ZhaWwoaW9jKTsKKwkJYmZhX2lvY19zeW5jX2Fjayhpb2MpOworCQlpb2NwZi0+cmV0cnlfY291bnQrKzsKKwkJaWYgKGlvY3BmLT5yZXRyeV9jb3VudCA+PSBCRkFfSU9DX0hXSU5JVF9NQVgpIHsKKwkJCWJmYV9pb2Nfc3luY19sZWF2ZShpb2MpOworCQkJYmZhX253X2lvY19od19zZW1fcmVsZWFzZShpb2MpOworCQkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jcGYsIGJmYV9pb2NwZl9zbV9pbml0ZmFpbCk7CisJCX0gZWxzZSB7CisJCQlpZiAoYmZhX2lvY19zeW5jX2NvbXBsZXRlKGlvYykpCisJCQkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jcGYsIGJmYV9pb2NwZl9zbV9od2luaXQpOworCQkJZWxzZSB7CisJCQkJYmZhX253X2lvY19od19zZW1fcmVsZWFzZShpb2MpOworCQkJCWJmYV9mc21fc2V0X3N0YXRlKGlvY3BmLCBiZmFfaW9jcGZfc21fc2Vtd2FpdCk7CisJCQl9CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIElPQ1BGX0VfRElTQUJMRToKKwkJYmZhX2lvY19od19zZW1fZ2V0X2NhbmNlbChpb2MpOworCQliZmFfZnNtX3NldF9zdGF0ZShpb2NwZiwgYmZhX2lvY3BmX3NtX2Rpc2FibGluZ19zeW5jKTsKKwkJYnJlYWs7CisKKwljYXNlIElPQ1BGX0VfU1RPUDoKKwkJYmZhX2lvY19od19zZW1fZ2V0X2NhbmNlbChpb2MpOworCQliZmFfaW9jX2Zpcm13YXJlX3VubG9jayhpb2MpOworCQliZmFfZnNtX3NldF9zdGF0ZShpb2NwZiwgYmZhX2lvY3BmX3NtX3Jlc2V0KTsKKwkJYnJlYWs7CisKKwljYXNlIElPQ1BGX0VfRkFJTDoKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc21fZmF1bHQoaW9jLCBldmVudCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY3BmX3NtX2luaXRmYWlsX2VudHJ5KHN0cnVjdCBiZmFfaW9jcGYgKmlvY3BmKQoreworCWJmYV9pb2NfcGZfaW5pdGZhaWxlZChpb2NwZi0+aW9jKTsKK30KKworLyoqCisgKiBIYXJkd2FyZSBpbml0aWFsaXphdGlvbiBmYWlsZWQuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9jcGZfc21faW5pdGZhaWwoc3RydWN0IGJmYV9pb2NwZiAqaW9jcGYsIGVudW0gaW9jcGZfZXZlbnQgZXZlbnQpCit7CisJc3RydWN0IGJmYV9pb2MgKmlvYyA9IGlvY3BmLT5pb2M7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBJT0NQRl9FX0RJU0FCTEU6CisJCWJmYV9mc21fc2V0X3N0YXRlKGlvY3BmLCBiZmFfaW9jcGZfc21fZGlzYWJsZWQpOworCQlicmVhazsKKworCWNhc2UgSU9DUEZfRV9TVE9QOgorCQliZmFfaW9jX2Zpcm13YXJlX3VubG9jayhpb2MpOworCQliZmFfZnNtX3NldF9zdGF0ZShpb2NwZiwgYmZhX2lvY3BmX3NtX3Jlc2V0KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc21fZmF1bHQoaW9jLCBldmVudCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY3BmX3NtX2ZhaWxfc3luY19lbnRyeShzdHJ1Y3QgYmZhX2lvY3BmICppb2NwZikKK3sKKwkvKioKKwkgKiBNYXJrIElPQyBhcyBmYWlsZWQgaW4gaGFyZHdhcmUgYW5kIHN0b3AgZmlybXdhcmUuCisJICovCisJYmZhX2lvY19scHVfc3RvcChpb2NwZi0+aW9jKTsKKworCS8qKgorCSAqIEZsdXNoIGFueSBxdWV1ZWQgdXAgbWFpbGJveCByZXF1ZXN0cy4KKwkgKi8KKwliZmFfaW9jX21ib3hfaGJmYWlsKGlvY3BmLT5pb2MpOworCWJmYV9pb2NfaHdfc2VtX2dldChpb2NwZi0+aW9jKTsKK30KKworLyoqCisgKiBJT0MgaXMgaW4gZmFpbGVkIHN0YXRlLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvY3BmX3NtX2ZhaWxfc3luYyhzdHJ1Y3QgYmZhX2lvY3BmICppb2NwZiwgZW51bSBpb2NwZl9ldmVudCBldmVudCkKK3sKKwlzdHJ1Y3QgYmZhX2lvYyAqaW9jID0gaW9jcGYtPmlvYzsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIElPQ1BGX0VfU0VNTE9DS0VEOgorCQlpb2NwZi0+cmV0cnlfY291bnQgPSAwOworCQliZmFfaW9jX3N5bmNfYWNrKGlvYyk7CisJCWJmYV9pb2Nfbm90aWZ5X2ZhaWwoaW9jKTsKKwkJaWYgKCFpb2NwZi0+YXV0b19yZWNvdmVyKSB7CisJCQliZmFfaW9jX3N5bmNfbGVhdmUoaW9jKTsKKwkJCWJmYV9ud19pb2NfaHdfc2VtX3JlbGVhc2UoaW9jKTsKKwkJCWJmYV9mc21fc2V0X3N0YXRlKGlvY3BmLCBiZmFfaW9jcGZfc21fZmFpbCk7CisJCX0gZWxzZSB7CisJCQlpZiAoYmZhX2lvY19zeW5jX2NvbXBsZXRlKGlvYykpCisJCQkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jcGYsIGJmYV9pb2NwZl9zbV9od2luaXQpOworCQkJZWxzZSB7CisJCQkJYmZhX253X2lvY19od19zZW1fcmVsZWFzZShpb2MpOworCQkJCWJmYV9mc21fc2V0X3N0YXRlKGlvY3BmLCBiZmFfaW9jcGZfc21fc2Vtd2FpdCk7CisJCQl9CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIElPQ1BGX0VfRElTQUJMRToKKwkJYmZhX2lvY19od19zZW1fZ2V0X2NhbmNlbChpb2MpOworCQliZmFfZnNtX3NldF9zdGF0ZShpb2NwZiwgYmZhX2lvY3BmX3NtX2Rpc2FibGluZ19zeW5jKTsKKwkJYnJlYWs7CisKKwljYXNlIElPQ1BGX0VfRkFJTDoKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc21fZmF1bHQoaW9jLCBldmVudCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY3BmX3NtX2ZhaWxfZW50cnkoc3RydWN0IGJmYV9pb2NwZiAqaW9jcGYpCit7Cit9CisKKy8qKgorICogQGJyaWVmCisgKiBJT0MgaXMgaW4gZmFpbGVkIHN0YXRlLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvY3BmX3NtX2ZhaWwoc3RydWN0IGJmYV9pb2NwZiAqaW9jcGYsIGVudW0gaW9jcGZfZXZlbnQgZXZlbnQpCit7CisJc3dpdGNoIChldmVudCkgeworCWNhc2UgSU9DUEZfRV9ESVNBQkxFOgorCQliZmFfZnNtX3NldF9zdGF0ZShpb2NwZiwgYmZhX2lvY3BmX3NtX2Rpc2FibGVkKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc21fZmF1bHQoaW9jcGYtPmlvYywgZXZlbnQpOworCX0KK30KKworLyoqCiAgKiBCRkEgSU9DIHByaXZhdGUgZnVuY3Rpb25zCiAgKi8KIApAQCAtNjc4LDE0ICsxMTM5LDYgQEAKIAl9CiB9CiAKLXZvaWQKLWJmYV9ud19pb2Nfc2VtX3RpbWVvdXQodm9pZCAqaW9jX2FyZykKLXsKLQlzdHJ1Y3QgYmZhX2lvYyAqaW9jID0gKHN0cnVjdCBiZmFfaW9jICopIGlvY19hcmc7Ci0KLQliZmFfaW9jX2h3X3NlbV9nZXQoaW9jKTsKLX0KLQogYm9vbAogYmZhX253X2lvY19zZW1fZ2V0KHZvaWQgX19pb21lbSAqc2VtX3JlZykKIHsKQEAgLTcyNSw3ICsxMTc4LDcgQEAKIAkgKi8KIAlyMzIgPSByZWFkbChpb2MtPmlvY19yZWdzLmlvY19zZW1fcmVnKTsKIAlpZiAocjMyID09IDApIHsKLQkJYmZhX2ZzbV9zZW5kX2V2ZW50KGlvYywgSU9DX0VfU0VNTE9DS0VEKTsKKwkJYmZhX2ZzbV9zZW5kX2V2ZW50KCZpb2MtPmlvY3BmLCBJT0NQRl9FX1NFTUxPQ0tFRCk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTg2NSwxMiArMTMxOCw2IEBACiB7CiAJc3RydWN0IGJmaV9pb2NfaW1hZ2VfaGRyIGZ3aGRyLCAqZHJ2X2Z3aGRyOwogCi0JLyoqCi0JICogSWYgYmlvcy9lZmkgYm9vdCAoZmxhc2ggYmFzZWQpIC0tIHJldHVybiB0cnVlCi0JICovCi0JaWYgKGJmYV9pb2NfaXNfb3B0cm9tKGlvYykpCi0JCXJldHVybiB0cnVlOwotCiAJYmZhX253X2lvY19md3Zlcl9nZXQoaW9jLCAmZndoZHIpOwogCWRydl9md2hkciA9IChzdHJ1Y3QgYmZpX2lvY19pbWFnZV9oZHIgKikKIAkJYmZhX2NiX2ltYWdlX2dldF9jaHVuayhCRkFfSU9DX0ZXSU1HX1RZUEUoaW9jKSwgMCk7CkBAIC05MzQsMjAgKzEzODEsMTUgQEAKIAkvKioKIAkgKiBJZiBJT0MgZnVuY3Rpb24gaXMgZGlzYWJsZWQgYW5kIGZpcm13YXJlIHZlcnNpb24gaXMgc2FtZSwKIAkgKiBqdXN0IHJlLWVuYWJsZSBJT0MuCi0JICoKLQkgKiBJZiBvcHRpb24gcm9tLCBJT0MgbXVzdCBub3QgYmUgaW4gb3BlcmF0aW9uYWwgc3RhdGUuIFdpdGgKLQkgKiBjb252ZXJnZW5jZSwgSU9DIHdpbGwgYmUgaW4gb3BlcmF0aW9uYWwgc3RhdGUgd2hlbiAybmQgZHJpdmVyCi0JICogaXMgbG9hZGVkLgogCSAqLwotCWlmIChpb2NfZndzdGF0ZSA9PSBCRklfSU9DX0RJU0FCTEVEIHx8Ci0JICAgICghYmZhX2lvY19pc19vcHRyb20oaW9jKSAmJiBpb2NfZndzdGF0ZSA9PSBCRklfSU9DX09QKSkgeworCWlmIChpb2NfZndzdGF0ZSA9PSBCRklfSU9DX0RJU0FCTEVEIHx8IGlvY19md3N0YXRlID09IEJGSV9JT0NfT1ApIHsKIAkJLyoqCiAJCSAqIFdoZW4gdXNpbmcgTVNJLVggYW55IHBlbmRpbmcgZmlybXdhcmUgcmVhZHkgZXZlbnQgc2hvdWxkCiAJCSAqIGJlIGZsdXNoZWQuIE90aGVyd2lzZSBNU0ktWCBpbnRlcnJ1cHRzIGFyZSBub3QgZGVsaXZlcmVkLgogCQkgKi8KIAkJYmZhX2lvY19tc2dmbHVzaChpb2MpOwogCQlpb2MtPmNiZm4tPnJlc2V0X2NiZm4oaW9jLT5iZmEpOwotCQliZmFfZnNtX3NlbmRfZXZlbnQoaW9jLCBJT0NfRV9GV1JFQURZKTsKKwkJYmZhX2ZzbV9zZW5kX2V2ZW50KCZpb2MtPmlvY3BmLCBJT0NQRl9FX0ZXUkVBRFkpOwogCQlyZXR1cm47CiAJfQogCkBAIC0xMDMzLDcgKzE0NzUsNiBAQAogCiAJaGJfY291bnQgPSByZWFkbChpb2MtPmlvY19yZWdzLmhlYXJ0YmVhdCk7CiAJaWYgKGlvYy0+aGJfY291bnQgPT0gaGJfY291bnQpIHsKLQkJcHJfY3JpdCgiRmlybXdhcmUgaGVhcnRiZWF0IGZhaWx1cmUgYXQgJWQiLCBoYl9jb3VudCk7CiAJCWJmYV9pb2NfcmVjb3Zlcihpb2MpOwogCQlyZXR1cm47CiAJfSBlbHNlIHsKQEAgLTEwNzgsMTEgKzE1MTksNiBAQAogCSAqLwogCWJmYV9pb2NfbG1lbV9pbml0KGlvYyk7CiAKLQkvKioKLQkgKiBGbGFzaCBiYXNlZCBmaXJtd2FyZSBib290Ci0JICovCi0JaWYgKGJmYV9pb2NfaXNfb3B0cm9tKGlvYykpCi0JCWJvb3RfdHlwZSA9IEJGSV9CT09UX1RZUEVfRkxBU0g7CiAJZndpbWcgPSBiZmFfY2JfaW1hZ2VfZ2V0X2NodW5rKEJGQV9JT0NfRldJTUdfVFlQRShpb2MpLCBjaHVua25vKTsKIAogCXBnbnVtID0gYmZhX2lvY19zbWVtX3BnbnVtKGlvYywgbG9mZik7CkBAIC0xMjA5LDYgKzE2NDUsNTUgQEAKIAkJYmZhX3FfZGVxKCZtb2QtPmNtZF9xLCAmY21kKTsKIH0KIAorc3RhdGljIHZvaWQKK2JmYV9pb2NfZmFpbF9ub3RpZnkoc3RydWN0IGJmYV9pb2MgKmlvYykKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkCQkqcWU7CisJc3RydWN0IGJmYV9pb2NfaGJmYWlsX25vdGlmeQkqbm90aWZ5OworCisJLyoqCisJICogTm90aWZ5IGRyaXZlciBhbmQgY29tbW9uIG1vZHVsZXMgcmVnaXN0ZXJlZCBmb3Igbm90aWZpY2F0aW9uLgorCSAqLworCWlvYy0+Y2Jmbi0+aGJmYWlsX2NiZm4oaW9jLT5iZmEpOworCWxpc3RfZm9yX2VhY2gocWUsICZpb2MtPmhiX25vdGlmeV9xKSB7CisJCW5vdGlmeSA9IChzdHJ1Y3QgYmZhX2lvY19oYmZhaWxfbm90aWZ5ICopIHFlOworCQlub3RpZnktPmNiZm4obm90aWZ5LT5jYmFyZyk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY19wZl9lbmFibGVkKHN0cnVjdCBiZmFfaW9jICppb2MpCit7CisJYmZhX2ZzbV9zZW5kX2V2ZW50KGlvYywgSU9DX0VfRU5BQkxFRCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfaW9jX3BmX2Rpc2FibGVkKHN0cnVjdCBiZmFfaW9jICppb2MpCit7CisJYmZhX2ZzbV9zZW5kX2V2ZW50KGlvYywgSU9DX0VfRElTQUJMRUQpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY19wZl9pbml0ZmFpbGVkKHN0cnVjdCBiZmFfaW9jICppb2MpCit7CisJYmZhX2ZzbV9zZW5kX2V2ZW50KGlvYywgSU9DX0VfSU5JVEZBSUxFRCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfaW9jX3BmX2ZhaWxlZChzdHJ1Y3QgYmZhX2lvYyAqaW9jKQoreworCWJmYV9mc21fc2VuZF9ldmVudChpb2MsIElPQ19FX1BGQUlMRUQpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY19wZl9md21pc21hdGNoKHN0cnVjdCBiZmFfaW9jICppb2MpCit7CisJLyoqCisJICogUHJvdmlkZSBlbmFibGUgY29tcGxldGlvbiBjYWxsYmFjayBhbmQgQUVOIG5vdGlmaWNhdGlvbi4KKwkgKi8KKwlpb2MtPmNiZm4tPmVuYWJsZV9jYmZuKGlvYy0+YmZhLCBCRkFfU1RBVFVTX0lPQ19GQUlMVVJFKTsKK30KKwogLyoqCiAgKiBJT0MgcHVibGljCiAgKi8KQEAgLTEzMDQsNiArMTc4OSw3IEBACiBiZmFfaW9jX2lzcihzdHJ1Y3QgYmZhX2lvYyAqaW9jLCBzdHJ1Y3QgYmZpX21ibXNnICptKQogewogCXVuaW9uIGJmaV9pb2NfaTJoX21zZ191CSptc2c7CisJc3RydWN0IGJmYV9pb2NwZiAqaW9jcGYgPSAmaW9jLT5pb2NwZjsKIAogCW1zZyA9ICh1bmlvbiBiZmlfaW9jX2kyaF9tc2dfdSAqKSBtOwogCkBAIC0xMzE0LDE1ICsxODAwLDE1IEBACiAJCWJyZWFrOwogCiAJY2FzZSBCRklfSU9DX0kySF9SRUFEWV9FVkVOVDoKLQkJYmZhX2ZzbV9zZW5kX2V2ZW50KGlvYywgSU9DX0VfRldSRUFEWSk7CisJCWJmYV9mc21fc2VuZF9ldmVudChpb2NwZiwgSU9DUEZfRV9GV1JFQURZKTsKIAkJYnJlYWs7CiAKIAljYXNlIEJGSV9JT0NfSTJIX0VOQUJMRV9SRVBMWToKLQkJYmZhX2ZzbV9zZW5kX2V2ZW50KGlvYywgSU9DX0VfRldSU1BfRU5BQkxFKTsKKwkJYmZhX2ZzbV9zZW5kX2V2ZW50KGlvY3BmLCBJT0NQRl9FX0ZXUlNQX0VOQUJMRSk7CiAJCWJyZWFrOwogCiAJY2FzZSBCRklfSU9DX0kySF9ESVNBQkxFX1JFUExZOgotCQliZmFfZnNtX3NlbmRfZXZlbnQoaW9jLCBJT0NfRV9GV1JTUF9ESVNBQkxFKTsKKwkJYmZhX2ZzbV9zZW5kX2V2ZW50KGlvY3BmLCBJT0NQRl9FX0ZXUlNQX0RJU0FCTEUpOwogCQlicmVhazsKIAogCWNhc2UgQkZJX0lPQ19JMkhfR0VUQVRUUl9SRVBMWToKQEAgLTEzNDgsMTEgKzE4MzQsMTMgQEAKIAlpb2MtPmZjbW9kZQk9IGZhbHNlOwogCWlvYy0+cGxsaW5pdAk9IGZhbHNlOwogCWlvYy0+ZGJnX2Z3c2F2ZV9vbmNlID0gdHJ1ZTsKKwlpb2MtPmlvY3BmLmlvYyAgPSBpb2M7CiAKIAliZmFfaW9jX21ib3hfYXR0YWNoKGlvYyk7CiAJSU5JVF9MSVNUX0hFQUQoJmlvYy0+aGJfbm90aWZ5X3EpOwogCi0JYmZhX2ZzbV9zZXRfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX3Jlc2V0KTsKKwliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fdW5pbml0KTsKKwliZmFfZnNtX3NlbmRfZXZlbnQoaW9jLCBJT0NfRV9SRVNFVCk7CiB9CiAKIC8qKgpAQCAtMTY1Nyw3ICsyMTQ1LDQwIEBACiBzdGF0aWMgZW51bSBiZmFfaW9jX3N0YXRlCiBiZmFfaW9jX2dldF9zdGF0ZShzdHJ1Y3QgYmZhX2lvYyAqaW9jKQogewotCXJldHVybiBiZmFfc21fdG9fc3RhdGUoaW9jX3NtX3RhYmxlLCBpb2MtPmZzbSk7CisJZW51bSBiZmFfaW9jcGZfc3RhdGUgaW9jcGZfc3Q7CisJZW51bSBiZmFfaW9jX3N0YXRlIGlvY19zdCA9IGJmYV9zbV90b19zdGF0ZShpb2Nfc21fdGFibGUsIGlvYy0+ZnNtKTsKKworCWlmIChpb2Nfc3QgPT0gQkZBX0lPQ19FTkFCTElORyB8fAorCQlpb2Nfc3QgPT0gQkZBX0lPQ19GQUlMIHx8IGlvY19zdCA9PSBCRkFfSU9DX0lOSVRGQUlMKSB7CisKKwkJaW9jcGZfc3QgPSBiZmFfc21fdG9fc3RhdGUoaW9jcGZfc21fdGFibGUsIGlvYy0+aW9jcGYuZnNtKTsKKworCQlzd2l0Y2ggKGlvY3BmX3N0KSB7CisJCWNhc2UgQkZBX0lPQ1BGX1NFTVdBSVQ6CisJCQlpb2Nfc3QgPSBCRkFfSU9DX1NFTVdBSVQ7CisJCQlicmVhazsKKworCQljYXNlIEJGQV9JT0NQRl9IV0lOSVQ6CisJCQlpb2Nfc3QgPSBCRkFfSU9DX0hXSU5JVDsKKwkJCWJyZWFrOworCisJCWNhc2UgQkZBX0lPQ1BGX0ZXTUlTTUFUQ0g6CisJCQlpb2Nfc3QgPSBCRkFfSU9DX0ZXTUlTTUFUQ0g7CisJCQlicmVhazsKKworCQljYXNlIEJGQV9JT0NQRl9GQUlMOgorCQkJaW9jX3N0ID0gQkZBX0lPQ19GQUlMOworCQkJYnJlYWs7CisKKwkJY2FzZSBCRkFfSU9DUEZfSU5JVEZBSUw6CisJCQlpb2Nfc3QgPSBCRkFfSU9DX0lOSVRGQUlMOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJfQorCXJldHVybiBpb2Nfc3Q7CiB9CiAKIHZvaWQKQEAgLTE2ODksMjggKzIyMTAsNyBAQAogbWFjX3QKIGJmYV9ud19pb2NfZ2V0X21hYyhzdHJ1Y3QgYmZhX2lvYyAqaW9jKQogewotCS8qCi0JICogQ3VycmVudGx5IG1mZyBtYWMgaXMgdXNlZCBhcyBGQ29FIGVub2RlIG1hYyAobm90IGNvbmZpZ3VyZWQgYnkgUEJDKQotCSAqLwotCWlmIChiZmFfaW9jX2dldF90eXBlKGlvYykgPT0gQkZBX0lPQ19UWVBFX0ZDb0UpCi0JCXJldHVybiBiZmFfaW9jX2dldF9tZmdfbWFjKGlvYyk7Ci0JZWxzZQotCQlyZXR1cm4gaW9jLT5hdHRyLT5tYWM7Ci19Ci0KLXN0YXRpYyBtYWNfdAotYmZhX2lvY19nZXRfbWZnX21hYyhzdHJ1Y3QgYmZhX2lvYyAqaW9jKQotewotCW1hY190CW07Ci0KLQltID0gaW9jLT5hdHRyLT5tZmdfbWFjOwotCWlmIChiZmFfbWZnX2lzX29sZF93d25fbWFjX21vZGVsKGlvYy0+YXR0ci0+Y2FyZF90eXBlKSkKLQkJbS5tYWNbTUFDX0FERFJMRU4gLSAxXSArPSBiZmFfaW9jX3BjaWZuKGlvYyk7Ci0JZWxzZQotCQliZmFfbWZnX2luY3JlbWVudF93d25fbWFjKCYobS5tYWNbTUFDX0FERFJMRU4tM10pLAotCQkJYmZhX2lvY19wY2lmbihpb2MpKTsKLQotCXJldHVybiBtOworCXJldHVybiBpb2MtPmF0dHItPm1hYzsKIH0KIAogLyoqCkBAIC0xNzE5LDggKzIyMTksMTMgQEAKIHN0YXRpYyB2b2lkCiBiZmFfaW9jX3JlY292ZXIoc3RydWN0IGJmYV9pb2MgKmlvYykKIHsKLQliZmFfaW9jX3N0YXRzKGlvYywgaW9jX2hiZmFpbHMpOwotCWJmYV9mc21fc2VuZF9ldmVudChpb2MsIElPQ19FX0hCRkFJTCk7CisJdTE2IGJkZjsKKworCWJkZiA9IChpb2MtPnBjaWRldi5wY2lfc2xvdCA8PCA4IHwgaW9jLT5wY2lkZXYucGNpX2Z1bmMgPDwgMyB8CisJCQkJCWlvYy0+cGNpZGV2LmRldmljZV9pZCk7CisKKwlwcl9jcml0KCJGaXJtd2FyZSBoZWFydGJlYXQgZmFpbHVyZSBhdCAlZCIsIGJkZik7CisJQlVHX09OKDEpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMTcyOCw1ICsyMjMzLDYxIEBACiB7CiAJaWYgKGJmYV9pb2NfZ2V0X3R5cGUoaW9jKSA9PSBCRkFfSU9DX1RZUEVfTEwpCiAJCXJldHVybjsKK30KIAorLyoqCisgKiBAZGcgaGFsX2lvY3BmX3B2dCBCRkEgSU9DIFBGIHByaXZhdGUgZnVuY3Rpb25zCisgKiBAeworICovCisKK3N0YXRpYyB2b2lkCitiZmFfaW9jcGZfZW5hYmxlKHN0cnVjdCBiZmFfaW9jICppb2MpCit7CisJYmZhX2ZzbV9zZW5kX2V2ZW50KCZpb2MtPmlvY3BmLCBJT0NQRl9FX0VOQUJMRSk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfaW9jcGZfZGlzYWJsZShzdHJ1Y3QgYmZhX2lvYyAqaW9jKQoreworCWJmYV9mc21fc2VuZF9ldmVudCgmaW9jLT5pb2NwZiwgSU9DUEZfRV9ESVNBQkxFKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9pb2NwZl9mYWlsKHN0cnVjdCBiZmFfaW9jICppb2MpCit7CisJYmZhX2ZzbV9zZW5kX2V2ZW50KCZpb2MtPmlvY3BmLCBJT0NQRl9FX0ZBSUwpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY3BmX2luaXRmYWlsKHN0cnVjdCBiZmFfaW9jICppb2MpCit7CisJYmZhX2ZzbV9zZW5kX2V2ZW50KCZpb2MtPmlvY3BmLCBJT0NQRl9FX0lOSVRGQUlMKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9pb2NwZl9nZXRhdHRyZmFpbChzdHJ1Y3QgYmZhX2lvYyAqaW9jKQoreworCWJmYV9mc21fc2VuZF9ldmVudCgmaW9jLT5pb2NwZiwgSU9DUEZfRV9HRVRBVFRSRkFJTCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfaW9jcGZfc3RvcChzdHJ1Y3QgYmZhX2lvYyAqaW9jKQoreworCWJmYV9mc21fc2VuZF9ldmVudCgmaW9jLT5pb2NwZiwgSU9DUEZfRV9TVE9QKTsKK30KKwordm9pZAorYmZhX253X2lvY3BmX3RpbWVvdXQodm9pZCAqaW9jX2FyZykKK3sKKwlzdHJ1Y3QgYmZhX2lvYyAgKmlvYyA9IChzdHJ1Y3QgYmZhX2lvYyAqKSBpb2NfYXJnOworCisJYmZhX2ZzbV9zZW5kX2V2ZW50KCZpb2MtPmlvY3BmLCBJT0NQRl9FX1RJTUVPVVQpOworfQorCit2b2lkCitiZmFfbndfaW9jcGZfc2VtX3RpbWVvdXQodm9pZCAqaW9jX2FyZykKK3sKKwlzdHJ1Y3QgYmZhX2lvYyAgKmlvYyA9IChzdHJ1Y3QgYmZhX2lvYyAqKSBpb2NfYXJnOworCisJYmZhX2lvY19od19zZW1fZ2V0KGlvYyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibmEvYmZhX2lvYy5oIGIvZHJpdmVycy9uZXQvYm5hL2JmYV9pb2MuaAppbmRleCBhNzNkODRlLi5lNDk3NGJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibmEvYmZhX2lvYy5oCisrKyBiL2RyaXZlcnMvbmV0L2JuYS9iZmFfaW9jLmgKQEAgLTI2LDE2ICsyNiw3IEBACiAjZGVmaW5lIEJGQV9JT0NfVE9WCQkzMDAwCS8qIG1zZWNzICovCiAjZGVmaW5lIEJGQV9JT0NfSFdTRU1fVE9WCTUwMAkvKiBtc2VjcyAqLwogI2RlZmluZSBCRkFfSU9DX0hCX1RPVgkJNTAwCS8qIG1zZWNzICovCi0jZGVmaW5lIEJGQV9JT0NfSFdJTklUX01BWAkyCi0jZGVmaW5lIEJGQV9JT0NfVE9WX1JFQ09WRVIJQkZBX0lPQ19IQl9UT1YKLQotLyoqCi0gKiBHZW5lcmljIFNjYXR0ZXIgR2F0aGVyIEVsZW1lbnQgdXNlZCBieSBkcml2ZXIKLSAqLwotc3RydWN0IGJmYV9zZ2UgewotCXUzMglzZ19sZW47Ci0Jdm9pZAkqc2dfYWRkcjsKLX07CisjZGVmaW5lIEJGQV9JT0NfSFdJTklUX01BWAk1CiAKIC8qKgogICogUENJIGRldmljZSBpbmZvcm1hdGlvbiByZXF1aXJlZCBieSBJT0MKQEAgLTY1LDE5ICs1Niw2IEBACiAjZGVmaW5lIEJGSV9TTUVNX0NUX1NJWkUJMHgyODAwMDBVCS8qICEgMi41TUIgZm9yIGNhdGFwdWx0CSovCiAKIC8qKgotICogQGJyaWVmIEJGQSBkbWEgYWRkcmVzcyBhc3NpZ25tZW50IG1hY3JvCi0gKi8KLSNkZWZpbmUgYmZhX2RtYV9hZGRyX3NldChkbWFfYWRkciwgcGEpCVwKLQkJX19iZmFfZG1hX2FkZHJfc2V0KCZkbWFfYWRkciwgKHU2NClwYSkKLQotc3RhdGljIGlubGluZSB2b2lkCi1fX2JmYV9kbWFfYWRkcl9zZXQodW5pb24gYmZpX2FkZHJfdSAqZG1hX2FkZHIsIHU2NCBwYSkKLXsKLQlkbWFfYWRkci0+YTMyLmFkZHJfbG8gPSAodTMyKSBwYTsKLQlkbWFfYWRkci0+YTMyLmFkZHJfaGkgPSAodTMyKSAodXBwZXJfMzJfYml0cyhwYSkpOwotfQotCi0vKioKICAqIEBicmllZiBCRkEgZG1hIGFkZHJlc3MgYXNzaWdubWVudCBtYWNyby4gKGJpZyBlbmRpYW4gZm9ybWF0KQogICovCiAjZGVmaW5lIGJmYV9kbWFfYmVfYWRkcl9zZXQoZG1hX2FkZHIsIHBhKQlcCkBAIC0xMDUsOCArODMsMTEgQEAKIAl2b2lkIF9faW9tZW0gKmhvc3RfcGFnZV9udW1fZm47CiAJdm9pZCBfX2lvbWVtICpoZWFydGJlYXQ7CiAJdm9pZCBfX2lvbWVtICppb2NfZndzdGF0ZTsKKwl2b2lkIF9faW9tZW0gKmFsdF9pb2NfZndzdGF0ZTsKIAl2b2lkIF9faW9tZW0gKmxsX2hhbHQ7CisJdm9pZCBfX2lvbWVtICphbHRfbGxfaGFsdDsKIAl2b2lkIF9faW9tZW0gKmVycl9zZXQ7CisJdm9pZCBfX2lvbWVtICppb2NfZmFpbF9zeW5jOwogCXZvaWQgX19pb21lbSAqc2hpcnFfaXNyX25leHQ7CiAJdm9pZCBfX2lvbWVtICpzaGlycV9tc2tfbmV4dDsKIAl2b2lkIF9faW9tZW0gKnNtZW1fcGFnZV9zdGFydDsKQEAgLTE2NSwxNiArMTQ2LDIyIEBACiAJKF9fbm90aWZ5KS0+Y2JhcmcgPSAoX19jYmFyZyk7CQkJCVwKIH0gd2hpbGUgKDApCiAKK3N0cnVjdCBiZmFfaW9jcGYgeworCWJmYV9mc21fdAkJZnNtOworCXN0cnVjdCBiZmFfaW9jCQkqaW9jOworCXUzMgkJCXJldHJ5X2NvdW50OworCWJvb2wJCQlhdXRvX3JlY292ZXI7Cit9OworCiBzdHJ1Y3QgYmZhX2lvYyB7CiAJYmZhX2ZzbV90CQlmc207CiAJc3RydWN0IGJmYSAJCSpiZmE7CiAJc3RydWN0IGJmYV9wY2lkZXYgCXBjaWRldjsKLQlzdHJ1Y3QgYmZhX3RpbWVyX21vZAkqdGltZXJfbW9kOwogCXN0cnVjdCB0aW1lcl9saXN0IAlpb2NfdGltZXI7CisJc3RydWN0IHRpbWVyX2xpc3QgCWlvY3BmX3RpbWVyOwogCXN0cnVjdCB0aW1lcl9saXN0IAlzZW1fdGltZXI7CiAJc3RydWN0IHRpbWVyX2xpc3QJaGJfdGltZXI7CiAJdTMyCQkJaGJfY291bnQ7Ci0JdTMyCQkJcmV0cnlfY291bnQ7CiAJc3RydWN0IGxpc3RfaGVhZAloYl9ub3RpZnlfcTsKIAl2b2lkCQkJKmRiZ19md3NhdmU7CiAJaW50CQkJZGJnX2Z3c2F2ZV9sZW47CkBAIC0xODIsNyArMTY5LDYgQEAKIAllbnVtIGJmaV9tY2xhc3MJCWlvY19tYzsKIAlzdHJ1Y3QgYmZhX2lvY19yZWdzIAlpb2NfcmVnczsKIAlzdHJ1Y3QgYmZhX2lvY19kcnZfc3RhdHMgc3RhdHM7Ci0JYm9vbAkJCWF1dG9fcmVjb3ZlcjsKIAlib29sCQkJZmNtb2RlOwogCWJvb2wJCQljdGRldjsKIAlib29sCQkJY25hOwpAQCAtMTk1LDYgKzE4MSw3IEBACiAJc3RydWN0IGJmYV9pb2NfY2JmbgkqY2JmbjsKIAlzdHJ1Y3QgYmZhX2lvY19tYm94X21vZAltYm94X21vZDsKIAlzdHJ1Y3QgYmZhX2lvY19od2lmCSppb2NfaHdpZjsKKwlzdHJ1Y3QgYmZhX2lvY3BmCWlvY3BmOwogfTsKIAogc3RydWN0IGJmYV9pb2NfaHdpZiB7CkBAIC0yMDUsOCArMTkyLDEyIEBACiAJdm9pZAkJKCppb2NfbWFwX3BvcnQpCShzdHJ1Y3QgYmZhX2lvYyAqaW9jKTsKIAl2b2lkCQkoKmlvY19pc3JfbW9kZV9zZXQpCShzdHJ1Y3QgYmZhX2lvYyAqaW9jLAogCQkJCQlib29sIG1zaXgpOwotCXZvaWQJCSgqaW9jX25vdGlmeV9oYmZhaWwpCShzdHJ1Y3QgYmZhX2lvYyAqaW9jKTsKKwl2b2lkCQkoKmlvY19ub3RpZnlfZmFpbCkJKHN0cnVjdCBiZmFfaW9jICppb2MpOwogCXZvaWQJCSgqaW9jX293bmVyc2hpcF9yZXNldCkJKHN0cnVjdCBiZmFfaW9jICppb2MpOworCXZvaWQJCSgqaW9jX3N5bmNfam9pbikJKHN0cnVjdCBiZmFfaW9jICppb2MpOworCXZvaWQJCSgqaW9jX3N5bmNfbGVhdmUpCShzdHJ1Y3QgYmZhX2lvYyAqaW9jKTsKKwl2b2lkCQkoKmlvY19zeW5jX2FjaykJCShzdHJ1Y3QgYmZhX2lvYyAqaW9jKTsKKwlib29sCQkoKmlvY19zeW5jX2NvbXBsZXRlKQkoc3RydWN0IGJmYV9pb2MgKmlvYyk7CiB9OwogCiAjZGVmaW5lIGJmYV9pb2NfcGNpZm4oX19pb2MpCQkoKF9faW9jKS0+cGNpZGV2LnBjaV9mdW5jKQpAQCAtMjcxLDcgKzI2Miw2IEBACiB2b2lkIGJmYV9ud19pb2NfZGlzYWJsZShzdHJ1Y3QgYmZhX2lvYyAqaW9jKTsKIAogdm9pZCBiZmFfbndfaW9jX2Vycm9yX2lzcihzdHJ1Y3QgYmZhX2lvYyAqaW9jKTsKLQogdm9pZCBiZmFfbndfaW9jX2dldF9hdHRyKHN0cnVjdCBiZmFfaW9jICppb2MsIHN0cnVjdCBiZmFfaW9jX2F0dHIgKmlvY19hdHRyKTsKIHZvaWQgYmZhX253X2lvY19oYmZhaWxfcmVnaXN0ZXIoc3RydWN0IGJmYV9pb2MgKmlvYywKIAlzdHJ1Y3QgYmZhX2lvY19oYmZhaWxfbm90aWZ5ICpub3RpZnkpOwpAQCAtMjg5LDcgKzI3OSw4IEBACiAgKi8KIHZvaWQgYmZhX253X2lvY190aW1lb3V0KHZvaWQgKmlvYyk7CiB2b2lkIGJmYV9ud19pb2NfaGJfY2hlY2sodm9pZCAqaW9jKTsKLXZvaWQgYmZhX253X2lvY19zZW1fdGltZW91dCh2b2lkICppb2MpOwordm9pZCBiZmFfbndfaW9jcGZfdGltZW91dCh2b2lkICppb2MpOwordm9pZCBiZmFfbndfaW9jcGZfc2VtX3RpbWVvdXQodm9pZCAqaW9jKTsKIAogLyoKICAqIEYvVyBJbWFnZSBTaXplICYgQ2h1bmsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JuYS9iZmFfaW9jX2N0LmMgYi9kcml2ZXJzL25ldC9ibmEvYmZhX2lvY19jdC5jCmluZGV4IDEyMWNmZDYuLjQ2OTk5N2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JuYS9iZmFfaW9jX2N0LmMKKysrIGIvZHJpdmVycy9uZXQvYm5hL2JmYV9pb2NfY3QuYwpAQCAtMjIsNiArMjIsMTUgQEAKICNpbmNsdWRlICJiZmlfY3RyZWcuaCIKICNpbmNsdWRlICJiZmFfZGVmcy5oIgogCisjZGVmaW5lIGJmYV9pb2NfY3Rfc3luY19wb3MoX19pb2MpCVwKKwkJKCh1MzIpICgxIDw8IGJmYV9pb2NfcGNpZm4oX19pb2MpKSkKKyNkZWZpbmUgQkZBX0lPQ19TWU5DX1JFUURfU0gJCTE2CisjZGVmaW5lIGJmYV9pb2NfY3RfZ2V0X3N5bmNfYWNrZChfX3ZhbCkgKF9fdmFsICYgMHgwMDAwZmZmZikKKyNkZWZpbmUgYmZhX2lvY19jdF9jbGVhcl9zeW5jX2Fja2QoX192YWwpIChfX3ZhbCAmIDB4ZmZmZjAwMDApCisjZGVmaW5lIGJmYV9pb2NfY3RfZ2V0X3N5bmNfcmVxZChfX3ZhbCkgKF9fdmFsID4+IEJGQV9JT0NfU1lOQ19SRVFEX1NIKQorI2RlZmluZSBiZmFfaW9jX2N0X3N5bmNfcmVxZF9wb3MoX19pb2MpIFwKKwkJKGJmYV9pb2NfY3Rfc3luY19wb3MoX19pb2MpIDw8IEJGQV9JT0NfU1lOQ19SRVFEX1NIKQorCiAvKgogICogZm9yd2FyZCBkZWNsYXJhdGlvbnMKICAqLwpAQCAtMzAsOCArMzksMTIgQEAKIHN0YXRpYyB2b2lkIGJmYV9pb2NfY3RfcmVnX2luaXQoc3RydWN0IGJmYV9pb2MgKmlvYyk7CiBzdGF0aWMgdm9pZCBiZmFfaW9jX2N0X21hcF9wb3J0KHN0cnVjdCBiZmFfaW9jICppb2MpOwogc3RhdGljIHZvaWQgYmZhX2lvY19jdF9pc3JfbW9kZV9zZXQoc3RydWN0IGJmYV9pb2MgKmlvYywgYm9vbCBtc2l4KTsKLXN0YXRpYyB2b2lkIGJmYV9pb2NfY3Rfbm90aWZ5X2hiZmFpbChzdHJ1Y3QgYmZhX2lvYyAqaW9jKTsKK3N0YXRpYyB2b2lkIGJmYV9pb2NfY3Rfbm90aWZ5X2ZhaWwoc3RydWN0IGJmYV9pb2MgKmlvYyk7CiBzdGF0aWMgdm9pZCBiZmFfaW9jX2N0X293bmVyc2hpcF9yZXNldChzdHJ1Y3QgYmZhX2lvYyAqaW9jKTsKK3N0YXRpYyB2b2lkIGJmYV9pb2NfY3Rfc3luY19qb2luKHN0cnVjdCBiZmFfaW9jICppb2MpOworc3RhdGljIHZvaWQgYmZhX2lvY19jdF9zeW5jX2xlYXZlKHN0cnVjdCBiZmFfaW9jICppb2MpOworc3RhdGljIHZvaWQgYmZhX2lvY19jdF9zeW5jX2FjayhzdHJ1Y3QgYmZhX2lvYyAqaW9jKTsKK3N0YXRpYyBib29sIGJmYV9pb2NfY3Rfc3luY19jb21wbGV0ZShzdHJ1Y3QgYmZhX2lvYyAqaW9jKTsKIHN0YXRpYyBlbnVtIGJmYV9zdGF0dXMgYmZhX2lvY19jdF9wbGxfaW5pdCh2b2lkIF9faW9tZW0gKnJiLCBib29sIGZjbW9kZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgYmZhX2lvY19od2lmIG53X2h3aWZfY3Q7CkBAIC00OCw4ICs2MSwxMiBAQAogCW53X2h3aWZfY3QuaW9jX3JlZ19pbml0ID0gYmZhX2lvY19jdF9yZWdfaW5pdDsKIAlud19od2lmX2N0LmlvY19tYXBfcG9ydCA9IGJmYV9pb2NfY3RfbWFwX3BvcnQ7CiAJbndfaHdpZl9jdC5pb2NfaXNyX21vZGVfc2V0ID0gYmZhX2lvY19jdF9pc3JfbW9kZV9zZXQ7Ci0JbndfaHdpZl9jdC5pb2Nfbm90aWZ5X2hiZmFpbCA9IGJmYV9pb2NfY3Rfbm90aWZ5X2hiZmFpbDsKKwlud19od2lmX2N0LmlvY19ub3RpZnlfZmFpbCA9IGJmYV9pb2NfY3Rfbm90aWZ5X2ZhaWw7CiAJbndfaHdpZl9jdC5pb2Nfb3duZXJzaGlwX3Jlc2V0ID0gYmZhX2lvY19jdF9vd25lcnNoaXBfcmVzZXQ7CisJbndfaHdpZl9jdC5pb2Nfc3luY19qb2luID0gYmZhX2lvY19jdF9zeW5jX2pvaW47CisJbndfaHdpZl9jdC5pb2Nfc3luY19sZWF2ZSA9IGJmYV9pb2NfY3Rfc3luY19sZWF2ZTsKKwlud19od2lmX2N0LmlvY19zeW5jX2FjayA9IGJmYV9pb2NfY3Rfc3luY19hY2s7CisJbndfaHdpZl9jdC5pb2Nfc3luY19jb21wbGV0ZSA9IGJmYV9pb2NfY3Rfc3luY19jb21wbGV0ZTsKIAogCWlvYy0+aW9jX2h3aWYgPSAmbndfaHdpZl9jdDsKIH0KQEAgLTg2LDYgKzEwMyw3IEBACiAJaWYgKHVzZWNudCA9PSAwKSB7CiAJCXdyaXRlbCgxLCBpb2MtPmlvY19yZWdzLmlvY191c2FnZV9yZWcpOwogCQliZmFfbndfaW9jX3NlbV9yZWxlYXNlKGlvYy0+aW9jX3JlZ3MuaW9jX3VzYWdlX3NlbV9yZWcpOworCQl3cml0ZWwoMCwgaW9jLT5pb2NfcmVncy5pb2NfZmFpbF9zeW5jKTsKIAkJcmV0dXJuIHRydWU7CiAJfQogCkBAIC0xNDksMTIgKzE2NywxNCBAQAogICogTm90aWZ5IG90aGVyIGZ1bmN0aW9ucyBvbiBIQiBmYWlsdXJlLgogICovCiBzdGF0aWMgdm9pZAotYmZhX2lvY19jdF9ub3RpZnlfaGJmYWlsKHN0cnVjdCBiZmFfaW9jICppb2MpCitiZmFfaW9jX2N0X25vdGlmeV9mYWlsKHN0cnVjdCBiZmFfaW9jICppb2MpCiB7CiAJaWYgKGlvYy0+Y25hKSB7CiAJCXdyaXRlbChfX0ZXX0lOSVRfSEFMVF9QLCBpb2MtPmlvY19yZWdzLmxsX2hhbHQpOworCQl3cml0ZWwoX19GV19JTklUX0hBTFRfUCwgaW9jLT5pb2NfcmVncy5hbHRfbGxfaGFsdCk7CiAJCS8qIFdhaXQgZm9yIGhhbHQgdG8gdGFrZSBlZmZlY3QgKi8KIAkJcmVhZGwoaW9jLT5pb2NfcmVncy5sbF9oYWx0KTsKKwkJcmVhZGwoaW9jLT5pb2NfcmVncy5hbHRfbGxfaGFsdCk7CiAJfSBlbHNlIHsKIAkJd3JpdGVsKF9fUFNTX0VSUl9TVEFUVVNfU0VULCBpb2MtPmlvY19yZWdzLmVycl9zZXQpOwogCQlyZWFkbChpb2MtPmlvY19yZWdzLmVycl9zZXQpOwpAQCAtMjA2LDE1ICsyMjYsMTkgQEAKIAlpZiAoaW9jLT5wb3J0X2lkID09IDApIHsKIAkJaW9jLT5pb2NfcmVncy5oZWFydGJlYXQgPSByYiArIEJGQV9JT0MwX0hCRUFUX1JFRzsKIAkJaW9jLT5pb2NfcmVncy5pb2NfZndzdGF0ZSA9IHJiICsgQkZBX0lPQzBfU1RBVEVfUkVHOworCQlpb2MtPmlvY19yZWdzLmFsdF9pb2NfZndzdGF0ZSA9IHJiICsgQkZBX0lPQzFfU1RBVEVfUkVHOwogCQlpb2MtPmlvY19yZWdzLmhmbl9tYm94X2NtZCA9IHJiICsgaW9jcmVnX21iY21kX3AwW3BjaWZuXS5oZm47CiAJCWlvYy0+aW9jX3JlZ3MubHB1X21ib3hfY21kID0gcmIgKyBpb2NyZWdfbWJjbWRfcDBbcGNpZm5dLmxwdTsKIAkJaW9jLT5pb2NfcmVncy5sbF9oYWx0ID0gcmIgKyBGV19JTklUX0hBTFRfUDA7CisJCWlvYy0+aW9jX3JlZ3MuYWx0X2xsX2hhbHQgPSByYiArIEZXX0lOSVRfSEFMVF9QMTsKIAl9IGVsc2UgewogCQlpb2MtPmlvY19yZWdzLmhlYXJ0YmVhdCA9IChyYiArIEJGQV9JT0MxX0hCRUFUX1JFRyk7CiAJCWlvYy0+aW9jX3JlZ3MuaW9jX2Z3c3RhdGUgPSAocmIgKyBCRkFfSU9DMV9TVEFURV9SRUcpOworCQlpb2MtPmlvY19yZWdzLmFsdF9pb2NfZndzdGF0ZSA9IHJiICsgQkZBX0lPQzBfU1RBVEVfUkVHOwogCQlpb2MtPmlvY19yZWdzLmhmbl9tYm94X2NtZCA9IHJiICsgaW9jcmVnX21iY21kX3AxW3BjaWZuXS5oZm47CiAJCWlvYy0+aW9jX3JlZ3MubHB1X21ib3hfY21kID0gcmIgKyBpb2NyZWdfbWJjbWRfcDFbcGNpZm5dLmxwdTsKIAkJaW9jLT5pb2NfcmVncy5sbF9oYWx0ID0gcmIgKyBGV19JTklUX0hBTFRfUDE7CisJCWlvYy0+aW9jX3JlZ3MuYWx0X2xsX2hhbHQgPSByYiArIEZXX0lOSVRfSEFMVF9QMDsKIAl9CiAKIAkvKgpAQCAtMjMyLDYgKzI1Niw3IEBACiAJaW9jLT5pb2NfcmVncy5pb2NfdXNhZ2Vfc2VtX3JlZyA9IChyYiArIEhPU1RfU0VNMV9SRUcpOwogCWlvYy0+aW9jX3JlZ3MuaW9jX2luaXRfc2VtX3JlZyA9IChyYiArIEhPU1RfU0VNMl9SRUcpOwogCWlvYy0+aW9jX3JlZ3MuaW9jX3VzYWdlX3JlZyA9IChyYiArIEJGQV9GV19VU0VfQ09VTlQpOworCWlvYy0+aW9jX3JlZ3MuaW9jX2ZhaWxfc3luYyA9IChyYiArIEJGQV9JT0NfRkFJTF9TWU5DKTsKIAogCS8qKgogCSAqIHNyYW0gbWVtb3J5IGFjY2VzcwpAQCAtMzE3LDYgKzM0Miw3NyBAQAogCWJmYV9ud19pb2NfaHdfc2VtX3JlbGVhc2UoaW9jKTsKIH0KIAorLyoqCisgKiBTeW5jaHJvbml6ZWQgSU9DIGZhaWx1cmUgcHJvY2Vzc2luZyByb3V0aW5lcworICovCitzdGF0aWMgdm9pZAorYmZhX2lvY19jdF9zeW5jX2pvaW4oc3RydWN0IGJmYV9pb2MgKmlvYykKK3sKKwl1MzIgcjMyID0gcmVhZGwoaW9jLT5pb2NfcmVncy5pb2NfZmFpbF9zeW5jKTsKKwl1MzIgc3luY19wb3MgPSBiZmFfaW9jX2N0X3N5bmNfcmVxZF9wb3MoaW9jKTsKKworCXdyaXRlbCgocjMyIHwgc3luY19wb3MpLCBpb2MtPmlvY19yZWdzLmlvY19mYWlsX3N5bmMpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY19jdF9zeW5jX2xlYXZlKHN0cnVjdCBiZmFfaW9jICppb2MpCit7CisJdTMyIHIzMiA9IHJlYWRsKGlvYy0+aW9jX3JlZ3MuaW9jX2ZhaWxfc3luYyk7CisJdTMyIHN5bmNfbXNrID0gYmZhX2lvY19jdF9zeW5jX3JlcWRfcG9zKGlvYykgfAorCQkJCQliZmFfaW9jX2N0X3N5bmNfcG9zKGlvYyk7CisKKwl3cml0ZWwoKHIzMiAmIH5zeW5jX21zayksIGlvYy0+aW9jX3JlZ3MuaW9jX2ZhaWxfc3luYyk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfaW9jX2N0X3N5bmNfYWNrKHN0cnVjdCBiZmFfaW9jICppb2MpCit7CisJdTMyIHIzMiA9IHJlYWRsKGlvYy0+aW9jX3JlZ3MuaW9jX2ZhaWxfc3luYyk7CisKKwl3cml0ZWwoKHIzMiB8IGJmYV9pb2NfY3Rfc3luY19wb3MoaW9jKSksIGlvYy0+aW9jX3JlZ3MuaW9jX2ZhaWxfc3luYyk7Cit9CisKK3N0YXRpYyBib29sCitiZmFfaW9jX2N0X3N5bmNfY29tcGxldGUoc3RydWN0IGJmYV9pb2MgKmlvYykKK3sKKwl1MzIgcjMyID0gcmVhZGwoaW9jLT5pb2NfcmVncy5pb2NfZmFpbF9zeW5jKTsKKwl1MzIgc3luY19yZXFkID0gYmZhX2lvY19jdF9nZXRfc3luY19yZXFkKHIzMik7CisJdTMyIHN5bmNfYWNrZCA9IGJmYV9pb2NfY3RfZ2V0X3N5bmNfYWNrZChyMzIpOworCXUzMiB0bXBfYWNrZDsKKworCWlmIChzeW5jX2Fja2QgPT0gMCkKKwkJcmV0dXJuIHRydWU7CisKKwkvKioKKwkgKiBUaGUgY2hlY2sgYmVsb3cgaXMgdG8gc2VlIHdoZXRoZXIgYW55IG90aGVyIFBDSSBmbgorCSAqIGhhcyByZWluaXRpYWxpemVkIHRoZSBBU0lDIChyZXNldCBzeW5jX2Fja2QgYml0cykKKwkgKiBhbmQgZmFpbGVkIGFnYWluIHdoaWxlIHRoaXMgSU9DIHdhcyB3YWl0aW5nIGZvciBodworCSAqIHNlbWFwaG9yZSAoaW4gYmZhX2lvY3BmX3NtX3NlbXdhaXQoKSkuCisJICovCisJdG1wX2Fja2QgPSBzeW5jX2Fja2Q7CisJaWYgKChzeW5jX3JlcWQgJiAgYmZhX2lvY19jdF9zeW5jX3Bvcyhpb2MpKSAmJgorCQkJIShzeW5jX2Fja2QgJiBiZmFfaW9jX2N0X3N5bmNfcG9zKGlvYykpKQorCQlzeW5jX2Fja2QgfD0gYmZhX2lvY19jdF9zeW5jX3Bvcyhpb2MpOworCisJaWYgKHN5bmNfcmVxZCA9PSBzeW5jX2Fja2QpIHsKKwkJd3JpdGVsKGJmYV9pb2NfY3RfY2xlYXJfc3luY19hY2tkKHIzMiksCisJCQkJaW9jLT5pb2NfcmVncy5pb2NfZmFpbF9zeW5jKTsKKwkJd3JpdGVsKEJGSV9JT0NfRkFJTCwgaW9jLT5pb2NfcmVncy5pb2NfZndzdGF0ZSk7CisJCXdyaXRlbChCRklfSU9DX0ZBSUwsIGlvYy0+aW9jX3JlZ3MuYWx0X2lvY19md3N0YXRlKTsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJLyoqCisJICogSWYgYW5vdGhlciBQQ0kgZm4gcmVpbml0aWFsaXplZCBhbmQgZmFpbGVkIGFnYWluIHdoaWxlCisJICogdGhpcyBJT0Mgd2FzIHdhaXRpbmcgZm9yIGh3IHNlbSwgdGhlIHN5bmNfYWNrZCBiaXQgZm9yCisJICogdGhpcyBJT0MgbmVlZCB0byBiZSBzZXQgYWdhaW4gdG8gYWxsb3cgcmVpbml0aWFsaXphdGlvbi4KKwkgKi8KKwlpZiAodG1wX2Fja2QgIT0gc3luY19hY2tkKQorCQl3cml0ZWwoKHIzMiB8IHN5bmNfYWNrZCksIGlvYy0+aW9jX3JlZ3MuaW9jX2ZhaWxfc3luYyk7CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKIHN0YXRpYyBlbnVtIGJmYV9zdGF0dXMKIGJmYV9pb2NfY3RfcGxsX2luaXQodm9pZCBfX2lvbWVtICpyYiwgYm9vbCBmY21vZGUpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibmEvYmZpX2N0cmVnLmggYi9kcml2ZXJzL25ldC9ibmEvYmZpX2N0cmVnLmgKaW5kZXggNDA0ZWEzNS4uNTEzMGQ3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm5hL2JmaV9jdHJlZy5oCisrKyBiL2RyaXZlcnMvbmV0L2JuYS9iZmlfY3RyZWcuaApAQCAtNTM1LDYgKzUzNSw3IEBACiAjZGVmaW5lIEJGQV9JT0MxX0hCRUFUX1JFRwkJSE9TVF9TRU0yX0lORk9fUkVHCiAjZGVmaW5lIEJGQV9JT0MxX1NUQVRFX1JFRwkJSE9TVF9TRU0zX0lORk9fUkVHCiAjZGVmaW5lIEJGQV9GV19VU0VfQ09VTlQJCSBIT1NUX1NFTTRfSU5GT19SRUcKKyNkZWZpbmUgQkZBX0lPQ19GQUlMX1NZTkMJCUhPU1RfU0VNNV9JTkZPX1JFRwogCiAjZGVmaW5lIENQRV9ERVBUSF9RKF9fbikgXAogCShDUEVfREVQVEhfUTAgKyAoX19uKSAqIChDUEVfREVQVEhfUTEgLSBDUEVfREVQVEhfUTApKQpAQCAtNTUyLDIyICs1NTMsMzAgQEAKIAkoUk1FX1BJX1BUUl9RMCArIChfX24pICogKFJNRV9QSV9QVFJfUTEgLSBSTUVfUElfUFRSX1EwKSkKICNkZWZpbmUgUk1FX0NJX1BUUl9RKF9fbikgXAogCShSTUVfQ0lfUFRSX1EwICsgKF9fbikgKiAoUk1FX0NJX1BUUl9RMSAtIFJNRV9DSV9QVFJfUTApKQotI2RlZmluZSBIUU1fUVNFVF9SWFFfRFJCTF9QMChfX24pIChIUU1fUVNFVDBfUlhRX0RSQkxfUDAgKyAoX19uKSBcCi0JKiAoSFFNX1FTRVQxX1JYUV9EUkJMX1AwIC0gSFFNX1FTRVQwX1JYUV9EUkJMX1AwKSkKLSNkZWZpbmUgSFFNX1FTRVRfVFhRX0RSQkxfUDAoX19uKSAoSFFNX1FTRVQwX1RYUV9EUkJMX1AwICsgKF9fbikgXAotCSogKEhRTV9RU0VUMV9UWFFfRFJCTF9QMCAtIEhRTV9RU0VUMF9UWFFfRFJCTF9QMCkpCi0jZGVmaW5lIEhRTV9RU0VUX0lCX0RSQkxfMV9QMChfX24pIChIUU1fUVNFVDBfSUJfRFJCTF8xX1AwICsgKF9fbikgXAotCSogKEhRTV9RU0VUMV9JQl9EUkJMXzFfUDAgLSBIUU1fUVNFVDBfSUJfRFJCTF8xX1AwKSkKLSNkZWZpbmUgSFFNX1FTRVRfSUJfRFJCTF8yX1AwKF9fbikgKEhRTV9RU0VUMF9JQl9EUkJMXzJfUDAgKyAoX19uKSBcCi0JKiAoSFFNX1FTRVQxX0lCX0RSQkxfMl9QMCAtIEhRTV9RU0VUMF9JQl9EUkJMXzJfUDApKQotI2RlZmluZSBIUU1fUVNFVF9SWFFfRFJCTF9QMShfX24pIChIUU1fUVNFVDBfUlhRX0RSQkxfUDEgKyAoX19uKSBcCi0JKiAoSFFNX1FTRVQxX1JYUV9EUkJMX1AxIC0gSFFNX1FTRVQwX1JYUV9EUkJMX1AxKSkKLSNkZWZpbmUgSFFNX1FTRVRfVFhRX0RSQkxfUDEoX19uKSAoSFFNX1FTRVQwX1RYUV9EUkJMX1AxICsgKF9fbikgXAotCSogKEhRTV9RU0VUMV9UWFFfRFJCTF9QMSAtIEhRTV9RU0VUMF9UWFFfRFJCTF9QMSkpCi0jZGVmaW5lIEhRTV9RU0VUX0lCX0RSQkxfMV9QMShfX24pIChIUU1fUVNFVDBfSUJfRFJCTF8xX1AxICsgKF9fbikgXAotCSogKEhRTV9RU0VUMV9JQl9EUkJMXzFfUDEgLSBIUU1fUVNFVDBfSUJfRFJCTF8xX1AxKSkKLSNkZWZpbmUgSFFNX1FTRVRfSUJfRFJCTF8yX1AxKF9fbikgKEhRTV9RU0VUMF9JQl9EUkJMXzJfUDEgKyAoX19uKSBcCi0JKiAoSFFNX1FTRVQxX0lCX0RSQkxfMl9QMSAtIEhRTV9RU0VUMF9JQl9EUkJMXzJfUDEpKQorI2RlZmluZSBIUU1fUVNFVF9SWFFfRFJCTF9QMChfX24pIFwKKwkoSFFNX1FTRVQwX1JYUV9EUkJMX1AwICsgKF9fbikgKiBcCisJCShIUU1fUVNFVDFfUlhRX0RSQkxfUDAgLSBIUU1fUVNFVDBfUlhRX0RSQkxfUDApKQorI2RlZmluZSBIUU1fUVNFVF9UWFFfRFJCTF9QMChfX24pIFwKKwkoSFFNX1FTRVQwX1RYUV9EUkJMX1AwICsgKF9fbikgKiBcCisJCShIUU1fUVNFVDFfVFhRX0RSQkxfUDAgLSBIUU1fUVNFVDBfVFhRX0RSQkxfUDApKQorI2RlZmluZSBIUU1fUVNFVF9JQl9EUkJMXzFfUDAoX19uKSBcCisJKEhRTV9RU0VUMF9JQl9EUkJMXzFfUDAgKyAoX19uKSAqIFwKKwkJKEhRTV9RU0VUMV9JQl9EUkJMXzFfUDAgLSBIUU1fUVNFVDBfSUJfRFJCTF8xX1AwKSkKKyNkZWZpbmUgSFFNX1FTRVRfSUJfRFJCTF8yX1AwKF9fbikgXAorCShIUU1fUVNFVDBfSUJfRFJCTF8yX1AwICsgKF9fbikgKiBcCisJCShIUU1fUVNFVDFfSUJfRFJCTF8yX1AwIC0gSFFNX1FTRVQwX0lCX0RSQkxfMl9QMCkpCisjZGVmaW5lIEhRTV9RU0VUX1JYUV9EUkJMX1AxKF9fbikgXAorCShIUU1fUVNFVDBfUlhRX0RSQkxfUDEgKyAoX19uKSAqIFwKKwkJKEhRTV9RU0VUMV9SWFFfRFJCTF9QMSAtIEhRTV9RU0VUMF9SWFFfRFJCTF9QMSkpCisjZGVmaW5lIEhRTV9RU0VUX1RYUV9EUkJMX1AxKF9fbikgXAorCShIUU1fUVNFVDBfVFhRX0RSQkxfUDEgKyAoX19uKSAqIFwKKwkJKEhRTV9RU0VUMV9UWFFfRFJCTF9QMSAtIEhRTV9RU0VUMF9UWFFfRFJCTF9QMSkpCisjZGVmaW5lIEhRTV9RU0VUX0lCX0RSQkxfMV9QMShfX24pIFwKKwkoSFFNX1FTRVQwX0lCX0RSQkxfMV9QMSArIChfX24pICogXAorCQkoSFFNX1FTRVQxX0lCX0RSQkxfMV9QMSAtIEhRTV9RU0VUMF9JQl9EUkJMXzFfUDEpKQorI2RlZmluZSBIUU1fUVNFVF9JQl9EUkJMXzJfUDEoX19uKSBcCisJKEhRTV9RU0VUMF9JQl9EUkJMXzJfUDEgKyAoX19uKSAqIFwKKwkJKEhRTV9RU0VUMV9JQl9EUkJMXzJfUDEgLSBIUU1fUVNFVDBfSUJfRFJCTF8yX1AxKSkKIAogI2RlZmluZSBDUEVfUV9OVU0oX19mbiwgX19xKSAoKChfX2ZuKSA8PCAyKSArIChfX3EpKQogI2RlZmluZSBSTUVfUV9OVU0oX19mbiwgX19xKSAoKChfX2ZuKSA8PCAyKSArIChfX3EpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm5hL2JuYS5oIGIvZHJpdmVycy9uZXQvYm5hL2JuYS5oCmluZGV4IGRmNjY3NmIuLmEyODdmODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JuYS9ibmEuaAorKysgYi9kcml2ZXJzL25ldC9ibmEvYm5hLmgKQEAgLTMyLDggKzMyLDYgQEAKIC8qIExvZyBzdHJpbmcgc2l6ZSAqLwogI2RlZmluZSBCTkFfTUVTU0FHRV9TSVpFCQkyNTYKIAotI2RlZmluZSBibmFfZGV2aWNlX3RpbWVyKF9kZXYpCQliZmFfdGltZXJfYmVhdCgmKChfZGV2KS0+dGltZXJfbW9kKSkKLQogLyogTUJPWCBBUEkgZm9yIFBPUlQsIFRYLCBSWCAqLwogI2RlZmluZSBibmFfbWJveF9xZV9maWxsKF9xZSwgX2NtZCwgX2NtZF9sZW4sIF9jYmZuLCBfY2JhcmcpCQlcCiBkbyB7CQkJCQkJCQkJXApAQCAtMzkwLDggKzM4OCw4IEBACiAKIC8qIEFQSSBmb3IgUlggKi8KIGludCBibmFfcG9ydF9tdHVfZ2V0KHN0cnVjdCBibmFfcG9ydCAqcG9ydCk7Ci12b2lkIGJuYV9sbHBvcnRfYWRtaW5fdXAoc3RydWN0IGJuYV9sbHBvcnQgKmxscG9ydCk7Ci12b2lkIGJuYV9sbHBvcnRfYWRtaW5fZG93bihzdHJ1Y3QgYm5hX2xscG9ydCAqbGxwb3J0KTsKK3ZvaWQgYm5hX2xscG9ydF9yeF9zdGFydGVkKHN0cnVjdCBibmFfbGxwb3J0ICpsbHBvcnQpOwordm9pZCBibmFfbGxwb3J0X3J4X3N0b3BwZWQoc3RydWN0IGJuYV9sbHBvcnQgKmxscG9ydCk7CiAKIC8qIEFQSSBmb3IgQk5BRCAqLwogdm9pZCBibmFfcG9ydF9lbmFibGUoc3RydWN0IGJuYV9wb3J0ICpwb3J0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JuYS9ibmFfY3RybC5jIGIvZHJpdmVycy9uZXQvYm5hL2JuYV9jdHJsLmMKaW5kZXggMDdiMjY1OS4uZTE1Mjc0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm5hL2JuYV9jdHJsLmMKKysrIGIvZHJpdmVycy9uZXQvYm5hL2JuYV9jdHJsLmMKQEAgLTU5LDE0ICs1OSw3MCBAQAogCXBvcnQtPmxpbmtfY2Jmbihwb3J0LT5ibmEtPmJuYWQsIEJOQV9MSU5LX0RPV04pOwogfQogCitzdGF0aWMgaW5saW5lIGludAorbGxwb3J0X2Nhbl9iZV91cChzdHJ1Y3QgYm5hX2xscG9ydCAqbGxwb3J0KQoreworCWludCByZWFkeSA9IDA7CisJaWYgKGxscG9ydC0+dHlwZSA9PSBCTkFfUE9SVF9UX1JFR1VMQVIpCisJCXJlYWR5ID0gKChsbHBvcnQtPmZsYWdzICYgQk5BX0xMUE9SVF9GX0FETUlOX1VQKSAmJgorCQkJIChsbHBvcnQtPmZsYWdzICYgQk5BX0xMUE9SVF9GX1JYX1NUQVJURUQpICYmCisJCQkgKGxscG9ydC0+ZmxhZ3MgJiBCTkFfTExQT1JUX0ZfUE9SVF9FTkFCTEVEKSk7CisJZWxzZQorCQlyZWFkeSA9ICgobGxwb3J0LT5mbGFncyAmIEJOQV9MTFBPUlRfRl9BRE1JTl9VUCkgJiYKKwkJCSAobGxwb3J0LT5mbGFncyAmIEJOQV9MTFBPUlRfRl9SWF9TVEFSVEVEKSAmJgorCQkJICEobGxwb3J0LT5mbGFncyAmIEJOQV9MTFBPUlRfRl9QT1JUX0VOQUJMRUQpKTsKKwlyZXR1cm4gcmVhZHk7Cit9CisKKyNkZWZpbmUgbGxwb3J0X2lzX3VwIGxscG9ydF9jYW5fYmVfdXAKKworZW51bSBibmFfbGxwb3J0X2V2ZW50IHsKKwlMTFBPUlRfRV9TVEFSVAkJCT0gMSwKKwlMTFBPUlRfRV9TVE9QCQkJPSAyLAorCUxMUE9SVF9FX0ZBSUwJCQk9IDMsCisJTExQT1JUX0VfVVAJCQk9IDQsCisJTExQT1JUX0VfRE9XTgkJCT0gNSwKKwlMTFBPUlRfRV9GV1JFU1BfVVBfT0sJCT0gNiwKKwlMTFBPUlRfRV9GV1JFU1BfVVBfRkFJTAkJPSA3LAorCUxMUE9SVF9FX0ZXUkVTUF9ET1dOCQk9IDgKK307CisKK3N0YXRpYyB2b2lkCitibmFfbGxwb3J0X2NiX3BvcnRfZW5hYmxlZChzdHJ1Y3QgYm5hX2xscG9ydCAqbGxwb3J0KQoreworCWxscG9ydC0+ZmxhZ3MgfD0gQk5BX0xMUE9SVF9GX1BPUlRfRU5BQkxFRDsKKworCWlmIChsbHBvcnRfY2FuX2JlX3VwKGxscG9ydCkpCisJCWJmYV9mc21fc2VuZF9ldmVudChsbHBvcnQsIExMUE9SVF9FX1VQKTsKK30KKworc3RhdGljIHZvaWQKK2JuYV9sbHBvcnRfY2JfcG9ydF9kaXNhYmxlZChzdHJ1Y3QgYm5hX2xscG9ydCAqbGxwb3J0KQoreworCWludCBsbHBvcnRfdXAgPSBsbHBvcnRfaXNfdXAobGxwb3J0KTsKKworCWxscG9ydC0+ZmxhZ3MgJj0gfkJOQV9MTFBPUlRfRl9QT1JUX0VOQUJMRUQ7CisKKwlpZiAobGxwb3J0X3VwKQorCQliZmFfZnNtX3NlbmRfZXZlbnQobGxwb3J0LCBMTFBPUlRfRV9ET1dOKTsKK30KKwogLyoqCiAgKiBNQk9YCiAgKi8KIHN0YXRpYyBpbnQKIGJuYV9pc19hZW4odTggbXNnX2lkKQogewotCXJldHVybiBtc2dfaWQgPT0gQkZJX0xMX0kySF9MSU5LX0RPV05fQUVOIHx8Ci0JICAgICAgIG1zZ19pZCA9PSBCRklfTExfSTJIX0xJTktfVVBfQUVOOworCXN3aXRjaCAobXNnX2lkKSB7CisJY2FzZSBCRklfTExfSTJIX0xJTktfRE9XTl9BRU46CisJY2FzZSBCRklfTExfSTJIX0xJTktfVVBfQUVOOgorCWNhc2UgQkZJX0xMX0kySF9QT1JUX0VOQUJMRV9BRU46CisJY2FzZSBCRklfTExfSTJIX1BPUlRfRElTQUJMRV9BRU46CisJCXJldHVybiAxOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQogfQogCiBzdGF0aWMgdm9pZApAQCAtODEsNiArMTM3LDEyIEBACiAJY2FzZSBCRklfTExfSTJIX0xJTktfRE9XTl9BRU46CiAJCWJuYV9wb3J0X2NiX2xpbmtfZG93bigmYm5hLT5wb3J0LCBhZW4tPnJlYXNvbik7CiAJCWJyZWFrOworCWNhc2UgQkZJX0xMX0kySF9QT1JUX0VOQUJMRV9BRU46CisJCWJuYV9sbHBvcnRfY2JfcG9ydF9lbmFibGVkKCZibmEtPnBvcnQubGxwb3J0KTsKKwkJYnJlYWs7CisJY2FzZSBCRklfTExfSTJIX1BPUlRfRElTQUJMRV9BRU46CisJCWJuYV9sbHBvcnRfY2JfcG9ydF9kaXNhYmxlZCgmYm5hLT5wb3J0LmxscG9ydCk7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KQEAgLTI1MSwxNiArMzEzLDYgQEAKIHN0YXRpYyB2b2lkIGJuYV9sbHBvcnRfc3RvcChzdHJ1Y3QgYm5hX2xscG9ydCAqbGxwb3J0KTsKIHN0YXRpYyB2b2lkIGJuYV9sbHBvcnRfZmFpbChzdHJ1Y3QgYm5hX2xscG9ydCAqbGxwb3J0KTsKIAotZW51bSBibmFfbGxwb3J0X2V2ZW50IHsKLQlMTFBPUlRfRV9TVEFSVAkJCT0gMSwKLQlMTFBPUlRfRV9TVE9QCQkJPSAyLAotCUxMUE9SVF9FX0ZBSUwJCQk9IDMsCi0JTExQT1JUX0VfVVAJCQk9IDQsCi0JTExQT1JUX0VfRE9XTgkJCT0gNSwKLQlMTFBPUlRfRV9GV1JFU1BfVVAJCT0gNiwKLQlMTFBPUlRfRV9GV1JFU1BfRE9XTgkJPSA3Ci19OwotCiBlbnVtIGJuYV9sbHBvcnRfc3RhdGUgewogCUJOQV9MTFBPUlRfU1RPUFBFRAkJPSAxLAogCUJOQV9MTFBPUlRfRE9XTgkJCT0gMiwKQEAgLTMyMCw3ICszNzIsNyBAQAogCQkvKiBOby1vcCAqLwogCQlicmVhazsKIAotCWNhc2UgTExQT1JUX0VfRldSRVNQX1VQOgorCWNhc2UgTExQT1JUX0VfRldSRVNQX1VQX09LOgogCWNhc2UgTExQT1JUX0VfRldSRVNQX0RPV046CiAJCS8qKgogCQkgKiBUaGVzZSBldmVudHMgYXJlIHJlY2VpdmVkIGR1ZSB0byBmbHVzaGluZyBvZiBtYm94IHdoZW4KQEAgLTM2Niw2ICs0MTgsNyBAQAogc3RhdGljIHZvaWQKIGJuYV9sbHBvcnRfc21fdXBfcmVzcF93YWl0X2VudHJ5KHN0cnVjdCBibmFfbGxwb3J0ICpsbHBvcnQpCiB7CisJQlVHX09OKCFsbHBvcnRfY2FuX2JlX3VwKGxscG9ydCkpOwogCS8qKgogCSAqIE5PVEU6IERvIG5vdCBjYWxsIGJuYV9md19sbHBvcnRfdXAoKSBoZXJlLiBUaGF0IHdpbGwgb3ZlciBzdGVwCiAJICogbWJveCBkdWUgdG8gZG93bl9yZXNwX3dhaXQgLT4gdXBfcmVzcF93YWl0IHRyYW5zaXRpb24gb24gZXZlbnQKQEAgLTM5MCwxMCArNDQzLDE0IEBACiAJCWJmYV9mc21fc2V0X3N0YXRlKGxscG9ydCwgYm5hX2xscG9ydF9zbV9kb3duX3Jlc3Bfd2FpdCk7CiAJCWJyZWFrOwogCi0JY2FzZSBMTFBPUlRfRV9GV1JFU1BfVVA6CisJY2FzZSBMTFBPUlRfRV9GV1JFU1BfVVBfT0s6CiAJCWJmYV9mc21fc2V0X3N0YXRlKGxscG9ydCwgYm5hX2xscG9ydF9zbV91cCk7CiAJCWJyZWFrOwogCisJY2FzZSBMTFBPUlRfRV9GV1JFU1BfVVBfRkFJTDoKKwkJYmZhX2ZzbV9zZXRfc3RhdGUobGxwb3J0LCBibmFfbGxwb3J0X3NtX2Rvd24pOworCQlicmVhazsKKwogCWNhc2UgTExQT1JUX0VfRldSRVNQX0RPV046CiAJCS8qIGRvd25fcmVzcF93YWl0IC0+IHVwX3Jlc3Bfd2FpdCB0cmFuc2l0aW9uIG9uIExMUE9SVF9FX1VQICovCiAJCWJuYV9md19sbHBvcnRfdXAobGxwb3J0KTsKQEAgLTQzMSwxMSArNDg4LDEyIEBACiAJCWJmYV9mc21fc2V0X3N0YXRlKGxscG9ydCwgYm5hX2xscG9ydF9zbV91cF9yZXNwX3dhaXQpOwogCQlicmVhazsKIAotCWNhc2UgTExQT1JUX0VfRldSRVNQX1VQOgorCWNhc2UgTExQT1JUX0VfRldSRVNQX1VQX09LOgogCQkvKiB1cF9yZXNwX3dhaXQtPmRvd25fcmVzcF93YWl0IHRyYW5zaXRpb24gb24gTExQT1JUX0VfRE9XTiAqLwogCQlibmFfZndfbGxwb3J0X2Rvd24obGxwb3J0KTsKIAkJYnJlYWs7CiAKKwljYXNlIExMUE9SVF9FX0ZXUkVTUF9VUF9GQUlMOgogCWNhc2UgTExQT1JUX0VfRldSRVNQX0RPV046CiAJCWJmYV9mc21fc2V0X3N0YXRlKGxscG9ydCwgYm5hX2xscG9ydF9zbV9kb3duKTsKIAkJYnJlYWs7CkBAIC00OTYsMTEgKzU1NCwxMiBAQAogCQkvKiBOby1vcCAqLwogCQlicmVhazsKIAotCWNhc2UgTExQT1JUX0VfRldSRVNQX1VQOgorCWNhc2UgTExQT1JUX0VfRldSRVNQX1VQX09LOgogCQkvKiB1cF9yZXNwX3dhaXQtPmxhc3RfcmVzcF93YWl0IHRyYW5zaXRpb24gb24gTExQT1JUX1RfU1RPUCAqLwogCQlibmFfZndfbGxwb3J0X2Rvd24obGxwb3J0KTsKIAkJYnJlYWs7CiAKKwljYXNlIExMUE9SVF9FX0ZXUkVTUF9VUF9GQUlMOgogCWNhc2UgTExQT1JUX0VfRldSRVNQX0RPV046CiAJCWJmYV9mc21fc2V0X3N0YXRlKGxscG9ydCwgYm5hX2xscG9ydF9zbV9zdG9wcGVkKTsKIAkJYnJlYWs7CkBAIC01NDEsNyArNjAwLDE0IEBACiAJc3RydWN0IGJuYV9sbHBvcnQgKmxscG9ydCA9IChzdHJ1Y3QgYm5hX2xscG9ydCAqKWFyZzsKIAogCWJmYV9xX3FlX2luaXQoJmxscG9ydC0+bWJveF9xZS5xZSk7Ci0JYmZhX2ZzbV9zZW5kX2V2ZW50KGxscG9ydCwgTExQT1JUX0VfRldSRVNQX1VQKTsKKwlpZiAoc3RhdHVzID09IEJGSV9MTF9DTURfRkFJTCkgeworCQlpZiAobGxwb3J0LT50eXBlID09IEJOQV9QT1JUX1RfUkVHVUxBUikKKwkJCWxscG9ydC0+ZmxhZ3MgJj0gfkJOQV9MTFBPUlRfRl9QT1JUX0VOQUJMRUQ7CisJCWVsc2UKKwkJCWxscG9ydC0+ZmxhZ3MgJj0gfkJOQV9MTFBPUlRfRl9BRE1JTl9VUDsKKwkJYmZhX2ZzbV9zZW5kX2V2ZW50KGxscG9ydCwgTExQT1JUX0VfRldSRVNQX1VQX0ZBSUwpOworCX0gZWxzZQorCQliZmFfZnNtX3NlbmRfZXZlbnQobGxwb3J0LCBMTFBPUlRfRV9GV1JFU1BfVVBfT0spOwogfQogCiBzdGF0aWMgdm9pZApAQCAtNTg4LDEzICs2NTQsMTQgQEAKIHN0YXRpYyB2b2lkCiBibmFfbGxwb3J0X2luaXQoc3RydWN0IGJuYV9sbHBvcnQgKmxscG9ydCwgc3RydWN0IGJuYSAqYm5hKQogewotCWxscG9ydC0+ZmxhZ3MgfD0gQk5BX0xMUE9SVF9GX0VOQUJMRUQ7CisJbGxwb3J0LT5mbGFncyB8PSBCTkFfTExQT1JUX0ZfQURNSU5fVVA7CisJbGxwb3J0LT5mbGFncyB8PSBCTkFfTExQT1JUX0ZfUE9SVF9FTkFCTEVEOwogCWxscG9ydC0+dHlwZSA9IEJOQV9QT1JUX1RfUkVHVUxBUjsKIAlsbHBvcnQtPmJuYSA9IGJuYTsKIAogCWxscG9ydC0+bGlua19zdGF0dXMgPSBCTkFfTElOS19ET1dOOwogCi0JbGxwb3J0LT5hZG1pbl91cF9jb3VudCA9IDA7CisJbGxwb3J0LT5yeF9zdGFydGVkX2NvdW50ID0gMDsKIAogCWxscG9ydC0+c3RvcF9jYmZuID0gTlVMTDsKIApAQCAtNjA2LDcgKzY3Myw4IEBACiBzdGF0aWMgdm9pZAogYm5hX2xscG9ydF91bmluaXQoc3RydWN0IGJuYV9sbHBvcnQgKmxscG9ydCkKIHsKLQlsbHBvcnQtPmZsYWdzICY9IH5CTkFfTExQT1JUX0ZfRU5BQkxFRDsKKwlsbHBvcnQtPmZsYWdzICY9IH5CTkFfTExQT1JUX0ZfQURNSU5fVVA7CisJbGxwb3J0LT5mbGFncyAmPSB+Qk5BX0xMUE9SVF9GX1BPUlRfRU5BQkxFRDsKIAogCWxscG9ydC0+Ym5hID0gTlVMTDsKIH0KQEAgLTYyOCw2ICs2OTYsOCBAQAogc3RhdGljIHZvaWQKIGJuYV9sbHBvcnRfZmFpbChzdHJ1Y3QgYm5hX2xscG9ydCAqbGxwb3J0KQogeworCS8qIFJlc2V0IHRoZSBwaHlzaWNhbCBwb3J0IHN0YXR1cyB0byBlbmFibGVkICovCisJbGxwb3J0LT5mbGFncyB8PSBCTkFfTExQT1JUX0ZfUE9SVF9FTkFCTEVEOwogCWJmYV9mc21fc2VuZF9ldmVudChsbHBvcnQsIExMUE9SVF9FX0ZBSUwpOwogfQogCkBAIC02MzgsMjUgKzcwOCwzMSBAQAogfQogCiB2b2lkCi1ibmFfbGxwb3J0X2FkbWluX3VwKHN0cnVjdCBibmFfbGxwb3J0ICpsbHBvcnQpCitibmFfbGxwb3J0X3J4X3N0YXJ0ZWQoc3RydWN0IGJuYV9sbHBvcnQgKmxscG9ydCkKIHsKLQlsbHBvcnQtPmFkbWluX3VwX2NvdW50Kys7CisJbGxwb3J0LT5yeF9zdGFydGVkX2NvdW50Kys7CiAKLQlpZiAobGxwb3J0LT5hZG1pbl91cF9jb3VudCA9PSAxKSB7Ci0JCWxscG9ydC0+ZmxhZ3MgfD0gQk5BX0xMUE9SVF9GX1JYX0VOQUJMRUQ7Ci0JCWlmIChsbHBvcnQtPmZsYWdzICYgQk5BX0xMUE9SVF9GX0VOQUJMRUQpCisJaWYgKGxscG9ydC0+cnhfc3RhcnRlZF9jb3VudCA9PSAxKSB7CisKKwkJbGxwb3J0LT5mbGFncyB8PSBCTkFfTExQT1JUX0ZfUlhfU1RBUlRFRDsKKworCQlpZiAobGxwb3J0X2Nhbl9iZV91cChsbHBvcnQpKQogCQkJYmZhX2ZzbV9zZW5kX2V2ZW50KGxscG9ydCwgTExQT1JUX0VfVVApOwogCX0KIH0KIAogdm9pZAotYm5hX2xscG9ydF9hZG1pbl9kb3duKHN0cnVjdCBibmFfbGxwb3J0ICpsbHBvcnQpCitibmFfbGxwb3J0X3J4X3N0b3BwZWQoc3RydWN0IGJuYV9sbHBvcnQgKmxscG9ydCkKIHsKLQlsbHBvcnQtPmFkbWluX3VwX2NvdW50LS07CisJaW50IGxscG9ydF91cCA9IGxscG9ydF9pc191cChsbHBvcnQpOwogCi0JaWYgKGxscG9ydC0+YWRtaW5fdXBfY291bnQgPT0gMCkgewotCQlsbHBvcnQtPmZsYWdzICY9IH5CTkFfTExQT1JUX0ZfUlhfRU5BQkxFRDsKLQkJaWYgKGxscG9ydC0+ZmxhZ3MgJiBCTkFfTExQT1JUX0ZfRU5BQkxFRCkKKwlsbHBvcnQtPnJ4X3N0YXJ0ZWRfY291bnQtLTsKKworCWlmIChsbHBvcnQtPnJ4X3N0YXJ0ZWRfY291bnQgPT0gMCkgeworCisJCWxscG9ydC0+ZmxhZ3MgJj0gfkJOQV9MTFBPUlRfRl9SWF9TVEFSVEVEOworCisJCWlmIChsbHBvcnRfdXApCiAJCQliZmFfZnNtX3NlbmRfZXZlbnQobGxwb3J0LCBMTFBPUlRfRV9ET1dOKTsKIAl9CiB9CkBAIC0yMDU2LDM3ICsyMTMyLDYgQEAKIAlibmFfbWJveF9zZW5kKHJ4Zi0+cngtPmJuYSwgJnJ4Zi0+bWJveF9xZSk7CiB9CiAKLXN0YXRpYyB2b2lkCi1fX3J4Zl9kZWZhdWx0X2Z1bmN0aW9uX2NvbmZpZyhzdHJ1Y3QgYm5hX3J4ZiAqcnhmLCBlbnVtIGJuYV9zdGF0dXMgc3RhdHVzKQotewotCXN0cnVjdCBibmFfcnhfZm5kYl9yYW0gKnJ4X2ZuZGJfcmFtOwotCXUzMiBjdHJsX2ZsYWdzOwotCWludCBpOwotCi0JcnhfZm5kYl9yYW0gPSAoc3RydWN0IGJuYV9yeF9mbmRiX3JhbSAqKQotCQkJQk5BX0dFVF9NRU1fQkFTRV9BRERSKHJ4Zi0+cngtPmJuYS0+cGNpZGV2LnBjaV9iYXJfa3ZhLAotCQkJUlhfRk5EQl9SQU1fQkFTRV9PRkZTRVQpOwotCi0JZm9yIChpID0gMDsgaSA8IEJGSV9NQVhfUlhGOyBpKyspIHsKLQkJaWYgKHN0YXR1cyA9PSBCTkFfU1RBVFVTX1RfRU5BQkxFRCkgewotCQkJaWYgKGkgPT0gcnhmLT5yeGZfaWQpCi0JCQkJY29udGludWU7Ci0KLQkJCWN0cmxfZmxhZ3MgPQotCQkJCXJlYWRsKCZyeF9mbmRiX3JhbVtpXS5jb250cm9sX2ZsYWdzKTsKLQkJCWN0cmxfZmxhZ3MgfD0gQk5BX1JYRl9DRl9ERUZBVUxUX0ZVTkNUSU9OX0VOQUJMRTsKLQkJCXdyaXRlbChjdHJsX2ZsYWdzLAotCQkJCQkJJnJ4X2ZuZGJfcmFtW2ldLmNvbnRyb2xfZmxhZ3MpOwotCQl9IGVsc2UgewotCQkJY3RybF9mbGFncyA9Ci0JCQkJcmVhZGwoJnJ4X2ZuZGJfcmFtW2ldLmNvbnRyb2xfZmxhZ3MpOwotCQkJY3RybF9mbGFncyAmPSB+Qk5BX1JYRl9DRl9ERUZBVUxUX0ZVTkNUSU9OX0VOQUJMRTsKLQkJCXdyaXRlbChjdHJsX2ZsYWdzLAotCQkJCQkJJnJ4X2ZuZGJfcmFtW2ldLmNvbnRyb2xfZmxhZ3MpOwotCQl9Ci0JfQotfQotCiBpbnQKIHJ4Zl9wcm9jZXNzX3BhY2tldF9maWx0ZXJfdWNhc3Qoc3RydWN0IGJuYV9yeGYgKnJ4ZikKIHsKQEAgLTIxNTMsNDYgKzIxOTgsNiBAQAogfQogCiBpbnQKLXJ4Zl9wcm9jZXNzX3BhY2tldF9maWx0ZXJfZGVmYXVsdChzdHJ1Y3QgYm5hX3J4ZiAqcnhmKQotewotCXN0cnVjdCBibmEgKmJuYSA9IHJ4Zi0+cngtPmJuYTsKLQotCS8qIEVuYWJsZS9kaXNhYmxlIGRlZmF1bHQgbW9kZSAqLwotCWlmIChpc19kZWZhdWx0X2VuYWJsZShyeGYtPnJ4bW9kZV9wZW5kaW5nLAotCQkJCXJ4Zi0+cnhtb2RlX3BlbmRpbmdfYml0bWFzaykpIHsKLQkJLyogbW92ZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZnJvbSBwZW5kaW5nIC0+IGFjdGl2ZSAqLwotCQlkZWZhdWx0X2luYWN0aXZlKHJ4Zi0+cnhtb2RlX3BlbmRpbmcsCi0JCQkJcnhmLT5yeG1vZGVfcGVuZGluZ19iaXRtYXNrKTsKLQkJcnhmLT5yeG1vZGVfYWN0aXZlIHw9IEJOQV9SWE1PREVfREVGQVVMVDsKLQotCQkvKiBEaXNhYmxlIFZMQU4gZmlsdGVyIHRvIGFsbG93IGFsbCBWTEFOcyAqLwotCQlfX3J4Zl92bGFuX2ZpbHRlcl9zZXQocnhmLCBCTkFfU1RBVFVTX1RfRElTQUJMRUQpOwotCQkvKiBSZWRpcmVjdCBhbGwgb3RoZXIgUnhGIHZsYW4gZmlsdGVyaW5nIHRvIHRoaXMgb25lICovCi0JCV9fcnhmX2RlZmF1bHRfZnVuY3Rpb25fY29uZmlnKHJ4ZiwgQk5BX1NUQVRVU19UX0VOQUJMRUQpOwotCQlyeGZfZmx0cl9tYm94X2NtZChyeGYsIEJGSV9MTF9IMklfUlhGX0RFRkFVTFRfU0VUX1JFUSwKLQkJCQlCTkFfU1RBVFVTX1RfRU5BQkxFRCk7Ci0JCXJldHVybiAxOwotCX0gZWxzZSBpZiAoaXNfZGVmYXVsdF9kaXNhYmxlKHJ4Zi0+cnhtb2RlX3BlbmRpbmcsCi0JCQkJcnhmLT5yeG1vZGVfcGVuZGluZ19iaXRtYXNrKSkgewotCQkvKiBtb3ZlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmcm9tIHBlbmRpbmcgLT4gYWN0aXZlICovCi0JCWRlZmF1bHRfaW5hY3RpdmUocnhmLT5yeG1vZGVfcGVuZGluZywKLQkJCQlyeGYtPnJ4bW9kZV9wZW5kaW5nX2JpdG1hc2spOwotCQlyeGYtPnJ4bW9kZV9hY3RpdmUgJj0gfkJOQV9SWE1PREVfREVGQVVMVDsKLQkJYm5hLT5yeGZfZGVmYXVsdF9pZCA9IEJGSV9NQVhfUlhGOwotCi0JCS8qIFJldmVydCBWTEFOIGZpbHRlciAqLwotCQlfX3J4Zl92bGFuX2ZpbHRlcl9zZXQocnhmLCByeGYtPnZsYW5fZmlsdGVyX3N0YXR1cyk7Ci0JCS8qIFN0b3AgUnhGIHZsYW4gZmlsdGVyIHRhYmxlIHJlZGlyZWN0aW9uICovCi0JCV9fcnhmX2RlZmF1bHRfZnVuY3Rpb25fY29uZmlnKHJ4ZiwgQk5BX1NUQVRVU19UX0RJU0FCTEVEKTsKLQkJcnhmX2ZsdHJfbWJveF9jbWQocnhmLCBCRklfTExfSDJJX1JYRl9ERUZBVUxUX1NFVF9SRVEsCi0JCQkJQk5BX1NUQVRVU19UX0RJU0FCTEVEKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLWludAogcnhmX3Byb2Nlc3NfcGFja2V0X2ZpbHRlcl9hbGxtdWx0aShzdHJ1Y3QgYm5hX3J4ZiAqcnhmKQogewogCS8qIEVuYWJsZS9kaXNhYmxlIGFsbG11bHRpIG1vZGUgKi8KQEAgLTIyODksNDggKzIyOTQsNiBAQAogfQogCiBpbnQKLXJ4Zl9jbGVhcl9wYWNrZXRfZmlsdGVyX2RlZmF1bHQoc3RydWN0IGJuYV9yeGYgKnJ4ZikKLXsKLQlzdHJ1Y3QgYm5hICpibmEgPSByeGYtPnJ4LT5ibmE7Ci0KLQkvKiA4LiBFeGVjdXRlIHBlbmRpbmcgZGVmYXVsdCBtb2RlIGRpc2FibGUgY29tbWFuZCAqLwotCWlmIChpc19kZWZhdWx0X2Rpc2FibGUocnhmLT5yeG1vZGVfcGVuZGluZywKLQkJCQlyeGYtPnJ4bW9kZV9wZW5kaW5nX2JpdG1hc2spKSB7Ci0JCS8qIG1vdmUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZyb20gcGVuZGluZyAtPiBhY3RpdmUgKi8KLQkJZGVmYXVsdF9pbmFjdGl2ZShyeGYtPnJ4bW9kZV9wZW5kaW5nLAotCQkJCXJ4Zi0+cnhtb2RlX3BlbmRpbmdfYml0bWFzayk7Ci0JCXJ4Zi0+cnhtb2RlX2FjdGl2ZSAmPSB+Qk5BX1JYTU9ERV9ERUZBVUxUOwotCQlibmEtPnJ4Zl9kZWZhdWx0X2lkID0gQkZJX01BWF9SWEY7Ci0KLQkJLyogUmV2ZXJ0IFZMQU4gZmlsdGVyICovCi0JCV9fcnhmX3ZsYW5fZmlsdGVyX3NldChyeGYsIHJ4Zi0+dmxhbl9maWx0ZXJfc3RhdHVzKTsKLQkJLyogU3RvcCBSeEYgdmxhbiBmaWx0ZXIgdGFibGUgcmVkaXJlY3Rpb24gKi8KLQkJX19yeGZfZGVmYXVsdF9mdW5jdGlvbl9jb25maWcocnhmLCBCTkFfU1RBVFVTX1RfRElTQUJMRUQpOwotCQlyeGZfZmx0cl9tYm94X2NtZChyeGYsIEJGSV9MTF9IMklfUlhGX0RFRkFVTFRfU0VUX1JFUSwKLQkJCQlCTkFfU1RBVFVTX1RfRElTQUJMRUQpOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQkvKiA5LiBDbGVhciBhY3RpdmUgZGVmYXVsdCBtb2RlOyBtb3ZlIGl0IHRvIHBlbmRpbmcgZW5hYmxlICovCi0JaWYgKHJ4Zi0+cnhtb2RlX2FjdGl2ZSAmIEJOQV9SWE1PREVfREVGQVVMVCkgewotCQkvKiBtb3ZlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmcm9tIGFjdGl2ZSAtPiBwZW5kaW5nICovCi0JCWRlZmF1bHRfZW5hYmxlKHJ4Zi0+cnhtb2RlX3BlbmRpbmcsCi0JCQkJcnhmLT5yeG1vZGVfcGVuZGluZ19iaXRtYXNrKTsKLQkJcnhmLT5yeG1vZGVfYWN0aXZlICY9IH5CTkFfUlhNT0RFX0RFRkFVTFQ7Ci0KLQkJLyogUmV2ZXJ0IFZMQU4gZmlsdGVyICovCi0JCV9fcnhmX3ZsYW5fZmlsdGVyX3NldChyeGYsIHJ4Zi0+dmxhbl9maWx0ZXJfc3RhdHVzKTsKLQkJLyogU3RvcCBSeEYgdmxhbiBmaWx0ZXIgdGFibGUgcmVkaXJlY3Rpb24gKi8KLQkJX19yeGZfZGVmYXVsdF9mdW5jdGlvbl9jb25maWcocnhmLCBCTkFfU1RBVFVTX1RfRElTQUJMRUQpOwotCQlyeGZfZmx0cl9tYm94X2NtZChyeGYsIEJGSV9MTF9IMklfUlhGX0RFRkFVTFRfU0VUX1JFUSwKLQkJCQlCTkFfU1RBVFVTX1RfRElTQUJMRUQpOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50CiByeGZfY2xlYXJfcGFja2V0X2ZpbHRlcl9hbGxtdWx0aShzdHJ1Y3QgYm5hX3J4ZiAqcnhmKQogewogCS8qIDEwLiBFeGVjdXRlIHBlbmRpbmcgYWxsbXVsdGkgbW9kZSBkaXNhYmxlIGNvbW1hbmQgKi8KQEAgLTI0MDUsMjggKzIzNjgsNiBAQAogfQogCiB2b2lkCi1yeGZfcmVzZXRfcGFja2V0X2ZpbHRlcl9kZWZhdWx0KHN0cnVjdCBibmFfcnhmICpyeGYpCi17Ci0Jc3RydWN0IGJuYSAqYm5hID0gcnhmLT5yeC0+Ym5hOwotCi0JLyogOC4gQ2xlYXIgcGVuZGluZyBkZWZhdWx0IG1vZGUgZGlzYWJsZSAqLwotCWlmIChpc19kZWZhdWx0X2Rpc2FibGUocnhmLT5yeG1vZGVfcGVuZGluZywKLQkJCQlyeGYtPnJ4bW9kZV9wZW5kaW5nX2JpdG1hc2spKSB7Ci0JCWRlZmF1bHRfaW5hY3RpdmUocnhmLT5yeG1vZGVfcGVuZGluZywKLQkJCQlyeGYtPnJ4bW9kZV9wZW5kaW5nX2JpdG1hc2spOwotCQlyeGYtPnJ4bW9kZV9hY3RpdmUgJj0gfkJOQV9SWE1PREVfREVGQVVMVDsKLQkJYm5hLT5yeGZfZGVmYXVsdF9pZCA9IEJGSV9NQVhfUlhGOwotCX0KLQotCS8qIDkuIE1vdmUgZGVmYXVsdCBtb2RlIGNvbmZpZyBmcm9tIGFjdGl2ZSAtPiBwZW5kaW5nICovCi0JaWYgKHJ4Zi0+cnhtb2RlX2FjdGl2ZSAmIEJOQV9SWE1PREVfREVGQVVMVCkgewotCQlkZWZhdWx0X2VuYWJsZShyeGYtPnJ4bW9kZV9wZW5kaW5nLAotCQkJCXJ4Zi0+cnhtb2RlX3BlbmRpbmdfYml0bWFzayk7Ci0JCXJ4Zi0+cnhtb2RlX2FjdGl2ZSAmPSB+Qk5BX1JYTU9ERV9ERUZBVUxUOwotCX0KLX0KLQotdm9pZAogcnhmX3Jlc2V0X3BhY2tldF9maWx0ZXJfYWxsbXVsdGkoc3RydWN0IGJuYV9yeGYgKnJ4ZikKIHsKIAkvKiAxMC4gQ2xlYXIgcGVuZGluZyBhbGxtdWx0aSBtb2RlIGRpc2FibGUgKi8KQEAgLTI1MjMsNzYgKzI0NjQsNiBAQAogICoJMSA9IG5lZWQgaC93IGNoYW5nZQogICovCiBzdGF0aWMgaW50Ci1yeGZfZGVmYXVsdF9lbmFibGUoc3RydWN0IGJuYV9yeGYgKnJ4ZikKLXsKLQlzdHJ1Y3QgYm5hICpibmEgPSByeGYtPnJ4LT5ibmE7Ci0JaW50IHJldCA9IDA7Ci0KLQkvKiBUaGVyZSBjYW4gbm90IGJlIGFueSBwZW5kaW5nIGRpc2FibGUgY29tbWFuZCAqLwotCi0JLyogRG8gbm90aGluZyBpZiBwZW5kaW5nIGVuYWJsZSBvciBhbHJlYWR5IGVuYWJsZWQgKi8KLQlpZiAoaXNfZGVmYXVsdF9lbmFibGUocnhmLT5yeG1vZGVfcGVuZGluZywKLQkJcnhmLT5yeG1vZGVfcGVuZGluZ19iaXRtYXNrKSB8fAotCQkocnhmLT5yeG1vZGVfYWN0aXZlICYgQk5BX1JYTU9ERV9ERUZBVUxUKSkgewotCQkvKiBTY2hlZHVsZSBlbmFibGUgKi8KLQl9IGVsc2UgewotCQkvKiBEZWZhdWx0IG1vZGUgc2hvdWxkIG5vdCBiZSBhY3RpdmUgaW4gdGhlIHN5c3RlbSAqLwotCQlkZWZhdWx0X2VuYWJsZShyeGYtPnJ4bW9kZV9wZW5kaW5nLAotCQkJCXJ4Zi0+cnhtb2RlX3BlbmRpbmdfYml0bWFzayk7Ci0JCWJuYS0+cnhmX2RlZmF1bHRfaWQgPSByeGYtPnJ4Zl9pZDsKLQkJcmV0ID0gMTsKLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0vKioKLSAqIFNob3VsZCBvbmx5IGJlIGNhbGxlZCBieSBibmFfcnhmX21vZGVfc2V0LgotICogSGVscHMgZGVjaWRpbmcgaWYgaC93IGNvbmZpZ3VyYXRpb24gaXMgbmVlZGVkIG9yIG5vdC4KLSAqICBSZXR1cm5zOgotICoJMCA9IG5vIGgvdyBjaGFuZ2UKLSAqCTEgPSBuZWVkIGgvdyBjaGFuZ2UKLSAqLwotc3RhdGljIGludAotcnhmX2RlZmF1bHRfZGlzYWJsZShzdHJ1Y3QgYm5hX3J4ZiAqcnhmKQotewotCXN0cnVjdCBibmEgKmJuYSA9IHJ4Zi0+cngtPmJuYTsKLQlpbnQgcmV0ID0gMDsKLQotCS8qIFRoZXJlIGNhbiBub3QgYmUgYW55IHBlbmRpbmcgZGlzYWJsZSAqLwotCi0JLyogVHVybiBvZmYgcGVuZGluZyBlbmFibGUgY29tbWFuZCAsIGlmIGFueSAqLwotCWlmIChpc19kZWZhdWx0X2VuYWJsZShyeGYtPnJ4bW9kZV9wZW5kaW5nLAotCQkJCXJ4Zi0+cnhtb2RlX3BlbmRpbmdfYml0bWFzaykpIHsKLQkJLyogUHJvbWlzYyBtb2RlIHNob3VsZCBub3QgYmUgYWN0aXZlICovCi0JCS8qIHN5c3RlbSBkZWZhdWx0IHN0YXRlIHNob3VsZCBiZSBwZW5kaW5nICovCi0JCWRlZmF1bHRfaW5hY3RpdmUocnhmLT5yeG1vZGVfcGVuZGluZywKLQkJCQlyeGYtPnJ4bW9kZV9wZW5kaW5nX2JpdG1hc2spOwotCQkvKiBSZW1vdmUgdGhlIGRlZmF1bHQgc3RhdGUgZnJvbSB0aGUgc3lzdGVtICovCi0JCWJuYS0+cnhmX2RlZmF1bHRfaWQgPSBCRklfTUFYX1JYRjsKLQotCS8qIFNjaGVkdWxlIGRpc2FibGUgKi8KLQl9IGVsc2UgaWYgKHJ4Zi0+cnhtb2RlX2FjdGl2ZSAmIEJOQV9SWE1PREVfREVGQVVMVCkgewotCQkvKiBEZWZhdWx0IG1vZGUgc2hvdWxkIGJlIGFjdGl2ZSBpbiB0aGUgc3lzdGVtICovCi0JCWRlZmF1bHRfZGlzYWJsZShyeGYtPnJ4bW9kZV9wZW5kaW5nLAotCQkJCXJ4Zi0+cnhtb2RlX3BlbmRpbmdfYml0bWFzayk7Ci0JCXJldCA9IDE7Ci0KLQkvKiBEbyBub3RoaW5nIGlmIGFscmVhZHkgZGlzYWJsZWQgKi8KLQl9IGVsc2UgewotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLS8qKgotICogU2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5IGJuYV9yeGZfbW9kZV9zZXQuCi0gKiBIZWxwcyBkZWNpZGluZyBpZiBoL3cgY29uZmlndXJhdGlvbiBpcyBuZWVkZWQgb3Igbm90LgotICogIFJldHVybnM6Ci0gKgkwID0gbm8gaC93IGNoYW5nZQotICoJMSA9IG5lZWQgaC93IGNoYW5nZQotICovCi1zdGF0aWMgaW50CiByeGZfYWxsbXVsdGlfZW5hYmxlKHN0cnVjdCBibmFfcnhmICpyeGYpCiB7CiAJaW50IHJldCA9IDA7CkBAIC0yNjU0LDM4ICsyNTI1LDEzIEBACiAJc3RydWN0IGJuYV9yeGYgKnJ4ZiA9ICZyeC0+cnhmOwogCWludCBuZWVkX2h3X2NvbmZpZyA9IDA7CiAKLQkvKiBFcnJvciBjaGVja3MgKi8KKwkvKiBQcm9jZXNzIHRoZSBjb21tYW5kcyAqLwogCiAJaWYgKGlzX3Byb21pc2NfZW5hYmxlKG5ld19tb2RlLCBiaXRtYXNrKSkgewogCQkvKiBJZiBwcm9taXNjIG1vZGUgaXMgYWxyZWFkeSBlbmFibGVkIGVsc2V3aGVyZSBpbiB0aGUgc3lzdGVtICovCiAJCWlmICgocngtPmJuYS0+cnhmX3Byb21pc2NfaWQgIT0gQkZJX01BWF9SWEYpICYmCiAJCQkocngtPmJuYS0+cnhmX3Byb21pc2NfaWQgIT0gcnhmLT5yeGZfaWQpKQogCQkJZ290byBlcnJfcmV0dXJuOwotCi0JCS8qIElmIGRlZmF1bHQgbW9kZSBpcyBhbHJlYWR5IGVuYWJsZWQgaW4gdGhlIHN5c3RlbSAqLwotCQlpZiAocngtPmJuYS0+cnhmX2RlZmF1bHRfaWQgIT0gQkZJX01BWF9SWEYpCi0JCQlnb3RvIGVycl9yZXR1cm47Ci0KLQkJLyogVHJ5aW5nIHRvIGVuYWJsZSBwcm9taXNjdW91cyBhbmQgZGVmYXVsdCBtb2RlIHRvZ2V0aGVyICovCi0JCWlmIChpc19kZWZhdWx0X2VuYWJsZShuZXdfbW9kZSwgYml0bWFzaykpCi0JCQlnb3RvIGVycl9yZXR1cm47Ci0JfQotCi0JaWYgKGlzX2RlZmF1bHRfZW5hYmxlKG5ld19tb2RlLCBiaXRtYXNrKSkgewotCQkvKiBJZiBkZWZhdWx0IG1vZGUgaXMgYWxyZWFkeSBlbmFibGVkIGVsc2V3aGVyZSBpbiB0aGUgc3lzdGVtICovCi0JCWlmICgocngtPmJuYS0+cnhmX2RlZmF1bHRfaWQgIT0gQkZJX01BWF9SWEYpICYmCi0JCQkocngtPmJuYS0+cnhmX2RlZmF1bHRfaWQgIT0gcnhmLT5yeGZfaWQpKSB7Ci0JCQkJZ290byBlcnJfcmV0dXJuOwotCQl9Ci0KLQkJLyogSWYgcHJvbWlzY3VvdXMgbW9kZSBpcyBhbHJlYWR5IGVuYWJsZWQgaW4gdGhlIHN5c3RlbSAqLwotCQlpZiAocngtPmJuYS0+cnhmX3Byb21pc2NfaWQgIT0gQkZJX01BWF9SWEYpCi0JCQlnb3RvIGVycl9yZXR1cm47Ci0JfQotCi0JLyogUHJvY2VzcyB0aGUgY29tbWFuZHMgKi8KLQotCWlmIChpc19wcm9taXNjX2VuYWJsZShuZXdfbW9kZSwgYml0bWFzaykpIHsKIAkJaWYgKHJ4Zl9wcm9taXNjX2VuYWJsZShyeGYpKQogCQkJbmVlZF9od19jb25maWcgPSAxOwogCX0gZWxzZSBpZiAoaXNfcHJvbWlzY19kaXNhYmxlKG5ld19tb2RlLCBiaXRtYXNrKSkgewpAQCAtMjY5MywxNCArMjUzOSw2IEBACiAJCQluZWVkX2h3X2NvbmZpZyA9IDE7CiAJfQogCi0JaWYgKGlzX2RlZmF1bHRfZW5hYmxlKG5ld19tb2RlLCBiaXRtYXNrKSkgewotCQlpZiAocnhmX2RlZmF1bHRfZW5hYmxlKHJ4ZikpCi0JCQluZWVkX2h3X2NvbmZpZyA9IDE7Ci0JfSBlbHNlIGlmIChpc19kZWZhdWx0X2Rpc2FibGUobmV3X21vZGUsIGJpdG1hc2spKSB7Ci0JCWlmIChyeGZfZGVmYXVsdF9kaXNhYmxlKHJ4ZikpCi0JCQluZWVkX2h3X2NvbmZpZyA9IDE7Ci0JfQotCiAJaWYgKGlzX2FsbG11bHRpX2VuYWJsZShuZXdfbW9kZSwgYml0bWFzaykpIHsKIAkJaWYgKHJ4Zl9hbGxtdWx0aV9lbmFibGUocnhmKSkKIAkJCW5lZWRfaHdfY29uZmlnID0gMTsKQEAgLTMxMjYsNyArMjk2NCw2IEBACiAKIAlibmFfbWNhbV9tb2RfaW5pdCgmYm5hLT5tY2FtX21vZCwgYm5hLCByZXNfaW5mbyk7CiAKLQlibmEtPnJ4Zl9kZWZhdWx0X2lkID0gQkZJX01BWF9SWEY7CiAJYm5hLT5yeGZfcHJvbWlzY19pZCA9IEJGSV9NQVhfUlhGOwogCiAJLyogTWJveCBxIGVsZW1lbnQgZm9yIHBvc3Rpbmcgc3RhdCByZXF1ZXN0IHRvIGYvdyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm5hL2JuYV90eHJ4LmMgYi9kcml2ZXJzL25ldC9ibmEvYm5hX3R4cnguYwppbmRleCBhZDkzZmRiLi41OGM3NjY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibmEvYm5hX3R4cnguYworKysgYi9kcml2ZXJzL25ldC9ibmEvYm5hX3R4cnguYwpAQCAtMTIyNiw4ICsxMjI2LDcgQEAKIAkvKiBBcHBseSB0aGUgVkxBTiBmaWx0ZXIgKi8KIAlpZiAocnhmLT5yeGZfZmxhZ3MgJiBCTkFfUlhGX0ZMX1ZMQU5fQ09ORklHX1BFTkRJTkcpIHsKIAkJcnhmLT5yeGZfZmxhZ3MgJj0gfkJOQV9SWEZfRkxfVkxBTl9DT05GSUdfUEVORElORzsKLQkJaWYgKCEocnhmLT5yeG1vZGVfYWN0aXZlICYgQk5BX1JYTU9ERV9QUk9NSVNDKSAmJgotCQkJIShyeGYtPnJ4bW9kZV9hY3RpdmUgJiBCTkFfUlhNT0RFX0RFRkFVTFQpKQorCQlpZiAoIShyeGYtPnJ4bW9kZV9hY3RpdmUgJiBCTkFfUlhNT0RFX1BST01JU0MpKQogCQkJX19yeGZfdmxhbl9maWx0ZXJfc2V0KHJ4ZiwgcnhmLT52bGFuX2ZpbHRlcl9zdGF0dXMpOwogCX0KIApAQCAtMTI3Niw5ICsxMjc1LDYgQEAKIAlpZiAocnhmX3Byb2Nlc3NfcGFja2V0X2ZpbHRlcl9wcm9taXNjKHJ4ZikpCiAJCXJldHVybiAxOwogCi0JaWYgKHJ4Zl9wcm9jZXNzX3BhY2tldF9maWx0ZXJfZGVmYXVsdChyeGYpKQotCQlyZXR1cm4gMTsKLQogCWlmIChyeGZfcHJvY2Vzc19wYWNrZXRfZmlsdGVyX2FsbG11bHRpKHJ4ZikpCiAJCXJldHVybiAxOwogCkBAIC0xMzQwLDkgKzEzMzYsNiBAQAogCWlmIChyeGZfY2xlYXJfcGFja2V0X2ZpbHRlcl9wcm9taXNjKHJ4ZikpCiAJCXJldHVybiAxOwogCi0JaWYgKHJ4Zl9jbGVhcl9wYWNrZXRfZmlsdGVyX2RlZmF1bHQocnhmKSkKLQkJcmV0dXJuIDE7Ci0KIAlpZiAocnhmX2NsZWFyX3BhY2tldF9maWx0ZXJfYWxsbXVsdGkocnhmKSkKIAkJcmV0dXJuIDE7CiAKQEAgLTEzODksOCArMTM4Miw2IEBACiAKIAlyeGZfcmVzZXRfcGFja2V0X2ZpbHRlcl9wcm9taXNjKHJ4Zik7CiAKLQlyeGZfcmVzZXRfcGFja2V0X2ZpbHRlcl9kZWZhdWx0KHJ4Zik7Ci0KIAlyeGZfcmVzZXRfcGFja2V0X2ZpbHRlcl9hbGxtdWx0aShyeGYpOwogfQogCkBAIC0xNDQxLDEyICsxNDMyLDE2IEBACiAJbWVtc2V0KHJ4Zi0+dmxhbl9maWx0ZXJfdGFibGUsIDAsCiAJCQkoc2l6ZW9mKHUzMikgKiAoKEJGSV9NQVhfVkxBTiArIDEpIC8gMzIpKSk7CiAKKwkvKiBTZXQgdXAgVkxBTiAwIGZvciBwdXJlIHByaW9yaXR5IHRhZ2dlZCBwYWNrZXRzICovCisJcnhmLT52bGFuX2ZpbHRlcl90YWJsZVswXSB8PSAxOworCiAJYmZhX2ZzbV9zZXRfc3RhdGUocnhmLCBibmFfcnhmX3NtX3N0b3BwZWQpOwogfQogCiBzdGF0aWMgdm9pZAogYm5hX3J4Zl91bmluaXQoc3RydWN0IGJuYV9yeGYgKnJ4ZikKIHsKKwlzdHJ1Y3QgYm5hICpibmEgPSByeGYtPnJ4LT5ibmE7CiAJc3RydWN0IGJuYV9tYWMgKm1hYzsKIAogCWJuYV9yaXRfbW9kX3NlZ19wdXQoJnJ4Zi0+cngtPmJuYS0+cml0X21vZCwgcnhmLT5yaXRfc2VnbWVudCk7CkBAIC0xNDczLDYgKzE0NjgsMjcgQEAKIAkJYm5hX21jYW1fbW9kX21hY19wdXQoJnJ4Zi0+cngtPmJuYS0+bWNhbV9tb2QsIG1hYyk7CiAJfQogCisJLyogVHVybiBvZmYgcGVuZGluZyBwcm9taXNjIG1vZGUgKi8KKwlpZiAoaXNfcHJvbWlzY19lbmFibGUocnhmLT5yeG1vZGVfcGVuZGluZywKKwkJCQlyeGYtPnJ4bW9kZV9wZW5kaW5nX2JpdG1hc2spKSB7CisJCS8qIHN5c3RlbSBwcm9taXNjIHN0YXRlIHNob3VsZCBiZSBwZW5kaW5nICovCisJCUJVR19PTighKGJuYS0+cnhmX3Byb21pc2NfaWQgPT0gcnhmLT5yeGZfaWQpKTsKKwkJcHJvbWlzY19pbmFjdGl2ZShyeGYtPnJ4bW9kZV9wZW5kaW5nLAorCQkJCXJ4Zi0+cnhtb2RlX3BlbmRpbmdfYml0bWFzayk7CisJCSBibmEtPnJ4Zl9wcm9taXNjX2lkID0gQkZJX01BWF9SWEY7CisJfQorCS8qIFByb21pc2MgbW9kZSBzaG91bGQgbm90IGJlIGFjdGl2ZSAqLworCUJVR19PTihyeGYtPnJ4bW9kZV9hY3RpdmUgJiBCTkFfUlhNT0RFX1BST01JU0MpOworCisJLyogVHVybiBvZmYgcGVuZGluZyBhbGwtbXVsdGkgbW9kZSAqLworCWlmIChpc19hbGxtdWx0aV9lbmFibGUocnhmLT5yeG1vZGVfcGVuZGluZywKKwkJCQlyeGYtPnJ4bW9kZV9wZW5kaW5nX2JpdG1hc2spKSB7CisJCWFsbG11bHRpX2luYWN0aXZlKHJ4Zi0+cnhtb2RlX3BlbmRpbmcsCisJCQkJcnhmLT5yeG1vZGVfcGVuZGluZ19iaXRtYXNrKTsKKwl9CisJLyogQWxsbXVsdGkgbW9kZSBzaG91bGQgbm90IGJlIGFjdGl2ZSAqLworCUJVR19PTihyeGYtPnJ4bW9kZV9hY3RpdmUgJiBCTkFfUlhNT0RFX0FMTE1VTFRJKTsKKwogCXJ4Zi0+cnggPSBOVUxMOwogfQogCkBAIC0xOTQ3LDcgKzE5NjMsNyBAQAogCQlibmFfaWJfYWNrKCZyeHAtPmNxLmliLT5kb29yX2JlbGwsIDApOwogCX0KIAotCWJuYV9sbHBvcnRfYWRtaW5fdXAoJnJ4LT5ibmEtPnBvcnQubGxwb3J0KTsKKwlibmFfbGxwb3J0X3J4X3N0YXJ0ZWQoJnJ4LT5ibmEtPnBvcnQubGxwb3J0KTsKIH0KIAogdm9pZApAQCAtMTk1NSwxMyArMTk3MSwxMyBAQAogewogCXN3aXRjaCAoZXZlbnQpIHsKIAljYXNlIFJYX0VfRkFJTDoKLQkJYm5hX2xscG9ydF9hZG1pbl9kb3duKCZyeC0+Ym5hLT5wb3J0LmxscG9ydCk7CisJCWJuYV9sbHBvcnRfcnhfc3RvcHBlZCgmcngtPmJuYS0+cG9ydC5sbHBvcnQpOwogCQliZmFfZnNtX3NldF9zdGF0ZShyeCwgYm5hX3J4X3NtX3N0b3BwZWQpOwogCQlyeF9pYl9mYWlsKHJ4KTsKIAkJYm5hX3J4Zl9mYWlsKCZyeC0+cnhmKTsKIAkJYnJlYWs7CiAJY2FzZSBSWF9FX1NUT1A6Ci0JCWJuYV9sbHBvcnRfYWRtaW5fZG93bigmcngtPmJuYS0+cG9ydC5sbHBvcnQpOworCQlibmFfbGxwb3J0X3J4X3N0b3BwZWQoJnJ4LT5ibmEtPnBvcnQubGxwb3J0KTsKIAkJYmZhX2ZzbV9zZXRfc3RhdGUocngsIGJuYV9yeF9zbV9yeGZfc3RvcF93YWl0KTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTMzNzMsNyArMzM4OSw3IEBACiAKIAl0eHFfY2ZnLmNuc19wdHIyX25fcV9zdGF0ZSA9IEJOQV9RX0lETEVfU1RBVEU7CiAJdHhxX2NmZy5ueHRfcWlkX25fZmlkX25fcHJpID0gKCgodHgtPnR4Zi50eGZfaWQgJiAweDNmKSA8PCAzKSB8Ci0JCQkodHhxLT5wcmlvcml0eSAmIDB4MykpOworCQkJKHR4cS0+cHJpb3JpdHkgJiAweDcpKTsKIAl0eHFfY2ZnLnd2Y19uX2NxdW90YV9uX3JxdW90YSA9CiAJCQkoKCgodTMyKUJGSV9UWF9NQVhfV1JSX1FVT1RBICYgMHhmZmYpIDw8IDEyKSB8CiAJCQkoQkZJX1RYX01BWF9XUlJfUVVPVEEgJiAweGZmZikpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm5hL2JuYV90eXBlcy5oIGIvZHJpdmVycy9uZXQvYm5hL2JuYV90eXBlcy5oCmluZGV4IDY4NzczMTAuLmI5YzEzNGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JuYS9ibmFfdHlwZXMuaAorKysgYi9kcml2ZXJzL25ldC9ibmEvYm5hX3R5cGVzLmgKQEAgLTE2NSw4ICsxNjUsNyBAQAogCiBlbnVtIGJuYV9yeG1vZGUgewogCUJOQV9SWE1PREVfUFJPTUlTQyAJPSAxLAotCUJOQV9SWE1PREVfREVGQVVMVCAJPSAyLAotCUJOQV9SWE1PREVfQUxMTVVMVEkgCT0gNAorCUJOQV9SWE1PREVfQUxMTVVMVEkgCT0gMgogfTsKIAogZW51bSBibmFfcnhfZXZlbnQgewpAQCAtMjQ5LDggKzI0OCw5IEBACiB9OwogCiBlbnVtIGJuYV9sbHBvcnRfZmxhZ3MgewotCUJOQV9MTFBPUlRfRl9FTkFCTEVEIAk9IDEsCi0JQk5BX0xMUE9SVF9GX1JYX0VOQUJMRUQJPSAyCisJQk5BX0xMUE9SVF9GX0FETUlOX1VQCSAJPSAxLAorCUJOQV9MTFBPUlRfRl9QT1JUX0VOQUJMRUQJPSAyLAorCUJOQV9MTFBPUlRfRl9SWF9TVEFSVEVECQk9IDQKIH07CiAKIGVudW0gYm5hX3BvcnRfZmxhZ3MgewpAQCAtNDA1LDcgKzQwNSw3IEBACiAKIAllbnVtIGJuYV9saW5rX3N0YXR1cyBsaW5rX3N0YXR1czsKIAotCWludAkJCWFkbWluX3VwX2NvdW50OworCWludAkJCXJ4X3N0YXJ0ZWRfY291bnQ7CiAKIAl2b2lkICgqc3RvcF9jYmZuKShzdHJ1Y3QgYm5hX3BvcnQgKiwgZW51bSBibmFfY2Jfc3RhdHVzKTsKIApAQCAtMTExNyw3ICsxMTE3LDYgQEAKIAogCXN0cnVjdCBibmFfcml0X21vZCByaXRfbW9kOwogCi0JaW50CQkJcnhmX2RlZmF1bHRfaWQ7CiAJaW50CQkJcnhmX3Byb21pc2NfaWQ7CiAKIAlzdHJ1Y3QgYm5hX21ib3hfcWUgbWJveF9xZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JuYS9ibmFkLmMgYi9kcml2ZXJzL25ldC9ibmEvYm5hZC5jCmluZGV4IDdlODM5YjkuLmZhZDkxMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JuYS9ibmFkLmMKKysrIGIvZHJpdmVycy9uZXQvYm5hL2JuYWQuYwpAQCAtNzAsNiArNzAsOCBAQAogCShzaXplb2Yoc3RydWN0IGJuYWRfc2tiX3VubWFwKSAqICgoX2RlcHRoKSAtIDEpKTsJXAogfSB3aGlsZSAoMCkKIAorI2RlZmluZSBCTkFEX1RYUlhfU1lOQ19NREVMQVkJMjUwCS8qIDI1MCBtc2VjcyAqLworCiAvKgogICogUmVpbml0aWFsaXplIGNvbXBsZXRpb25zIGluIENRLCBvbmNlIFJ4IGlzIHRha2VuIGRvd24KICAqLwpAQCAtMTA3LDcgKzEwOSw3IEBACiBibmFkX2ZyZWVfYWxsX3R4YnVmcyhzdHJ1Y3QgYm5hZCAqYm5hZCwKIAkJIHN0cnVjdCBibmFfdGNiICp0Y2IpCiB7Ci0JdTE2IAkJdW5tYXBfY29uczsKKwl1MzIgCQl1bm1hcF9jb25zOwogCXN0cnVjdCBibmFkX3VubWFwX3EgKnVubWFwX3EgPSB0Y2ItPnVubWFwX3E7CiAJc3RydWN0IGJuYWRfc2tiX3VubWFwICp1bm1hcF9hcnJheTsKIAlzdHJ1Y3Qgc2tfYnVmZiAJCSpza2IgPSBOVUxMOwpAQCAtMTMwLDcgKzEzMiw5IEBACiAJCQkJCQlQQ0lfRE1BX1RPREVWSUNFKTsKIAogCQlwY2lfdW5tYXBfYWRkcl9zZXQoJnVubWFwX2FycmF5W3VubWFwX2NvbnNdLCBkbWFfYWRkciwgMCk7Ci0JCXVubWFwX2NvbnMrKzsKKwkJaWYgKCsrdW5tYXBfY29ucyA+PSB1bm1hcF9xLT5xX2RlcHRoKQorCQkJYnJlYWs7CisKIAkJZm9yIChpID0gMDsgaSA8IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7IGkrKykgewogCQkJcGNpX3VubWFwX3BhZ2UoYm5hZC0+cGNpZGV2LAogCQkJCSAgICAgICBwY2lfdW5tYXBfYWRkcigmdW5tYXBfYXJyYXlbdW5tYXBfY29uc10sCkBAIC0xMzksNyArMTQzLDggQEAKIAkJCQkgICAgICAgUENJX0RNQV9UT0RFVklDRSk7CiAJCQlwY2lfdW5tYXBfYWRkcl9zZXQoJnVubWFwX2FycmF5W3VubWFwX2NvbnNdLCBkbWFfYWRkciwKIAkJCQkJICAgMCk7Ci0JCQl1bm1hcF9jb25zKys7CisJCQlpZiAoKyt1bm1hcF9jb25zID49IHVubWFwX3EtPnFfZGVwdGgpCisJCQkJYnJlYWs7CiAJCX0KIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAl9CkBAIC0xNjcsMTEgKzE3MiwxMSBAQAogCS8qCiAJICogSnVzdCByZXR1cm4gaWYgVFggaXMgc3RvcHBlZC4gVGhpcyBjaGVjayBpcyB1c2VmdWwKIAkgKiB3aGVuIGJuYWRfZnJlZV90eGJ1ZnMoKSBydW5zIG91dCBvZiBhIHRhc2tsZXQgc2NoZWR1bGVkCi0JICogYmVmb3JlIGJuYWRfY2JfdHhfY2xlYW51cCgpIGNsZWFyZWQgQk5BRF9SRl9UWF9TVEFSVEVEIGJpdAorCSAqIGJlZm9yZSBibmFkX2NiX3R4X2NsZWFudXAoKSBjbGVhcmVkIEJOQURfVFhRX1RYX1NUQVJURUQgYml0CiAJICogYnV0IHRoaXMgcm91dGluZSBydW5zIGFjdHVhbGx5IGFmdGVyIHRoZSBjbGVhbnVwIGhhcyBiZWVuCiAJICogZXhlY3V0ZWQuCiAJICovCi0JaWYgKCF0ZXN0X2JpdChCTkFEX1JGX1RYX1NUQVJURUQsICZibmFkLT5ydW5fZmxhZ3MpKQorCWlmICghdGVzdF9iaXQoQk5BRF9UWFFfVFhfU1RBUlRFRCwgJnRjYi0+ZmxhZ3MpKQogCQlyZXR1cm4gMDsKIAogCXVwZGF0ZWRfaHdfY29ucyA9ICoodGNiLT5od19jb25zdW1lcl9pbmRleCk7CkBAIC0yMzksNyArMjQ0LDcgQEAKIHsKIAlzdHJ1Y3QgYm5hZCAqYm5hZCA9IChzdHJ1Y3QgYm5hZCAqKWJuYWRfcHRyOwogCXN0cnVjdCBibmFfdGNiICp0Y2I7Ci0JdTMyIAkJYWNrZWQ7CisJdTMyIAkJYWNrZWQgPSAwOwogCWludAkJCWksIGo7CiAKIAlmb3IgKGkgPSAwOyBpIDwgYm5hZC0+bnVtX3R4OyBpKyspIHsKQEAgLTI1MiwxMCArMjU3LDI2IEBACiAJCQkJKCF0ZXN0X2FuZF9zZXRfYml0KEJOQURfVFhRX0ZSRUVfU0VOVCwKIAkJCQkJCSAgJnRjYi0+ZmxhZ3MpKSkgewogCQkJCWFja2VkID0gYm5hZF9mcmVlX3R4YnVmcyhibmFkLCB0Y2IpOwotCQkJCWJuYV9pYl9hY2sodGNiLT5pX2RiZWxsLCBhY2tlZCk7CisJCQkJaWYgKGxpa2VseSh0ZXN0X2JpdChCTkFEX1RYUV9UWF9TVEFSVEVELAorCQkJCQkmdGNiLT5mbGFncykpKQorCQkJCQlibmFfaWJfYWNrKHRjYi0+aV9kYmVsbCwgYWNrZWQpOwogCQkJCXNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpOwogCQkJCWNsZWFyX2JpdChCTkFEX1RYUV9GUkVFX1NFTlQsICZ0Y2ItPmZsYWdzKTsKIAkJCX0KKwkJCWlmICh1bmxpa2VseSghdGVzdF9iaXQoQk5BRF9UWFFfVFhfU1RBUlRFRCwKKwkJCQkJCSZ0Y2ItPmZsYWdzKSkpCisJCQkJY29udGludWU7CisJCQlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChibmFkLT5uZXRkZXYpKSB7CisJCQkJaWYgKGFja2VkICYmIG5ldGlmX2NhcnJpZXJfb2soYm5hZC0+bmV0ZGV2KSAmJgorCQkJCQlCTkFfUUVfRlJFRV9DTlQodGNiLCB0Y2ItPnFfZGVwdGgpID49CisJCQkJCQlCTkFEX05FVElGX1dBS0VfVEhSRVNIT0xEKSB7CisJCQkJCW5ldGlmX3dha2VfcXVldWUoYm5hZC0+bmV0ZGV2KTsKKwkJCQkJLyogVE9ETyAqLworCQkJCQkvKiBDb3VudGVycyBmb3IgaW5kaXZpZHVhbCBUeFFzPyAqLworCQkJCQlCTkFEX1VQREFURV9DVFIoYm5hZCwKKwkJCQkJCW5ldGlmX3F1ZXVlX3dha2V1cCk7CisJCQkJfQorCQkJfQogCQl9CiAJfQogfQpAQCAtMjY0LDcgKzI4NSw3IEBACiBibmFkX3R4KHN0cnVjdCBibmFkICpibmFkLCBzdHJ1Y3QgYm5hX3RjYiAqdGNiKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBibmFkLT5uZXRkZXY7Ci0JdTMyIHNlbnQ7CisJdTMyIHNlbnQgPSAwOwogCiAJaWYgKHRlc3RfYW5kX3NldF9iaXQoQk5BRF9UWFFfRlJFRV9TRU5ULCAmdGNiLT5mbGFncykpCiAJCXJldHVybiAwOwpAQCAtMjc1LDEyICsyOTYsMTUgQEAKIAkJICAgIG5ldGlmX2NhcnJpZXJfb2sobmV0ZGV2KSAmJgogCQkgICAgQk5BX1FFX0ZSRUVfQ05UKHRjYiwgdGNiLT5xX2RlcHRoKSA+PQogCQkJCSAgICBCTkFEX05FVElGX1dBS0VfVEhSRVNIT0xEKSB7Ci0JCQluZXRpZl93YWtlX3F1ZXVlKG5ldGRldik7Ci0JCQlCTkFEX1VQREFURV9DVFIoYm5hZCwgbmV0aWZfcXVldWVfd2FrZXVwKTsKKwkJCWlmICh0ZXN0X2JpdChCTkFEX1RYUV9UWF9TVEFSVEVELCAmdGNiLT5mbGFncykpIHsKKwkJCQluZXRpZl93YWtlX3F1ZXVlKG5ldGRldik7CisJCQkJQk5BRF9VUERBVEVfQ1RSKGJuYWQsIG5ldGlmX3F1ZXVlX3dha2V1cCk7CisJCQl9CiAJCX0KKwl9CisKKwlpZiAobGlrZWx5KHRlc3RfYml0KEJOQURfVFhRX1RYX1NUQVJURUQsICZ0Y2ItPmZsYWdzKSkpCiAJCWJuYV9pYl9hY2sodGNiLT5pX2RiZWxsLCBzZW50KTsKLQl9IGVsc2UKLQkJYm5hX2liX2Fjayh0Y2ItPmlfZGJlbGwsIDApOwogCiAJc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCk7CiAJY2xlYXJfYml0KEJOQURfVFhRX0ZSRUVfU0VOVCwgJnRjYi0+ZmxhZ3MpOwpAQCAtMzEzLDI1ICszMzcsMjQgQEAKIH0KIAogc3RhdGljIHZvaWQKLWJuYWRfZnJlZV9yeGJ1ZnMoc3RydWN0IGJuYWQgKmJuYWQsIHN0cnVjdCBibmFfcmNiICpyY2IpCitibmFkX2ZyZWVfYWxsX3J4YnVmcyhzdHJ1Y3QgYm5hZCAqYm5hZCwgc3RydWN0IGJuYV9yY2IgKnJjYikKIHsKIAlzdHJ1Y3QgYm5hZF91bm1hcF9xICp1bm1hcF9xOwogCXN0cnVjdCBza19idWZmICpza2I7CisJaW50IHVubWFwX2NvbnM7CiAKIAl1bm1hcF9xID0gcmNiLT51bm1hcF9xOwotCXdoaWxlIChCTkFfUUVfSU5fVVNFX0NOVCh1bm1hcF9xLCB1bm1hcF9xLT5xX2RlcHRoKSkgewotCQlza2IgPSB1bm1hcF9xLT51bm1hcF9hcnJheVt1bm1hcF9xLT5jb25zdW1lcl9pbmRleF0uc2tiOwotCQlCVUdfT04oIShza2IpKTsKLQkJdW5tYXBfcS0+dW5tYXBfYXJyYXlbdW5tYXBfcS0+Y29uc3VtZXJfaW5kZXhdLnNrYiA9IE5VTEw7CisJZm9yICh1bm1hcF9jb25zID0gMDsgdW5tYXBfY29ucyA8IHVubWFwX3EtPnFfZGVwdGg7IHVubWFwX2NvbnMrKykgeworCQlza2IgPSB1bm1hcF9xLT51bm1hcF9hcnJheVt1bm1hcF9jb25zXS5za2I7CisJCWlmICghc2tiKQorCQkJY29udGludWU7CisJCXVubWFwX3EtPnVubWFwX2FycmF5W3VubWFwX2NvbnNdLnNrYiA9IE5VTEw7CiAJCXBjaV91bm1hcF9zaW5nbGUoYm5hZC0+cGNpZGV2LCBwY2lfdW5tYXBfYWRkcigmdW5tYXBfcS0+Ci0JCQkJCXVubWFwX2FycmF5W3VubWFwX3EtPmNvbnN1bWVyX2luZGV4XSwKLQkJCQkJZG1hX2FkZHIpLCByY2ItPnJ4cS0+YnVmZmVyX3NpemUgKwotCQkJCQlORVRfSVBfQUxJR04sIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQkJCXVubWFwX2FycmF5W3VubWFwX2NvbnNdLAorCQkJCQlkbWFfYWRkciksIHJjYi0+cnhxLT5idWZmZXJfc2l6ZSwKKwkJCQkJUENJX0RNQV9GUk9NREVWSUNFKTsKIAkJZGV2X2tmcmVlX3NrYihza2IpOwotCQlCTkFfUUVfSU5EWF9BREQodW5tYXBfcS0+Y29uc3VtZXJfaW5kZXgsIDEsIHVubWFwX3EtPnFfZGVwdGgpOwotCQlCTkFfUUVfSU5EWF9BREQocmNiLT5jb25zdW1lcl9pbmRleCwgMSwgcmNiLT5xX2RlcHRoKTsKIAl9Ci0KIAlibmFkX3Jlc2V0X3JjYihibmFkLCByY2IpOwogfQogCkBAIC0zODUsNDMgKzQwOCwxMSBAQAogCQl1bm1hcF9xLT5wcm9kdWNlcl9pbmRleCA9IHVubWFwX3Byb2Q7CiAJCXJjYi0+cHJvZHVjZXJfaW5kZXggPSB1bm1hcF9wcm9kOwogCQlzbXBfbWIoKTsKLQkJYm5hX3J4cV9wcm9kX2luZHhfZG9vcmJlbGwocmNiKTsKKwkJaWYgKGxpa2VseSh0ZXN0X2JpdChCTkFEX1JYUV9TVEFSVEVELCAmcmNiLT5mbGFncykpKQorCQkJYm5hX3J4cV9wcm9kX2luZHhfZG9vcmJlbGwocmNiKTsKIAl9CiB9CiAKLS8qCi0gKiBMb2NraW5nIGlzIHJlcXVpcmVkIGluIHRoZSBlbmFibGUgcGF0aAotICogYmVjYXVzZSBpdCBpcyBjYWxsZWQgZnJvbSBhIG5hcGkgcG9sbAotICogY29udGV4dCwgd2hlcmUgdGhlIGJuYV9sb2NrIGlzIG5vdCBoZWxkCi0gKiB1bmxpa2UgdGhlIElSUSBjb250ZXh0LgotICovCi1zdGF0aWMgdm9pZAotYm5hZF9lbmFibGVfdHhyeF9pcnFzKHN0cnVjdCBibmFkICpibmFkKQotewotCXN0cnVjdCBibmFfdGNiICp0Y2I7Ci0Jc3RydWN0IGJuYV9jY2IgKmNjYjsKLQlpbnQgaSwgajsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmJuYWQtPmJuYV9sb2NrLCBmbGFncyk7Ci0JZm9yIChpID0gMDsgaSA8IGJuYWQtPm51bV90eDsgaSsrKSB7Ci0JCWZvciAoaiA9IDA7IGogPCBibmFkLT5udW1fdHhxX3Blcl90eDsgaisrKSB7Ci0JCQl0Y2IgPSBibmFkLT50eF9pbmZvW2ldLnRjYltqXTsKLQkJCWJuYV9pYl9jb2FsZXNjaW5nX3RpbWVyX3NldCh0Y2ItPmlfZGJlbGwsCi0JCQkJdGNiLT50eHEtPmliLT5pYl9jb25maWcuY29hbGVzY2luZ190aW1lbyk7Ci0JCQlibmFfaWJfYWNrKHRjYi0+aV9kYmVsbCwgMCk7Ci0JCX0KLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgYm5hZC0+bnVtX3J4OyBpKyspIHsKLQkJZm9yIChqID0gMDsgaiA8IGJuYWQtPm51bV9yeHBfcGVyX3J4OyBqKyspIHsKLQkJCWNjYiA9IGJuYWQtPnJ4X2luZm9baV0ucnhfY3RybFtqXS5jY2I7Ci0JCQlibmFkX2VuYWJsZV9yeF9pcnFfdW5zYWZlKGNjYik7Ci0JCX0KLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYm5hZC0+Ym5hX2xvY2ssIGZsYWdzKTsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkCiBibmFkX3JlZmlsbF9yeHEoc3RydWN0IGJuYWQgKmJuYWQsIHN0cnVjdCBibmFfcmNiICpyY2IpCiB7CkBAIC00NDgsNiArNDM5LDkgQEAKIAl1MzIgcWlkMCA9IGNjYi0+cmNiWzBdLT5yeHEtPnJ4cV9pZDsKIAlzdHJ1Y3QgYm5hX3BrdF9yYXRlICpwa3RfcnQgPSAmY2NiLT5wa3RfcmF0ZTsKIAorCWlmICghdGVzdF9iaXQoQk5BRF9SWFFfU1RBUlRFRCwgJmNjYi0+cmNiWzBdLT5mbGFncykpCisJCXJldHVybiAwOworCiAJcHJlZmV0Y2goYm5hZC0+bmV0ZGV2KTsKIAlCTkFfQ1FfUVBHRV9QVFJfR0VUKGNjYi0+cHJvZHVjZXJfaW5kZXgsIGNjYi0+c3dfcXB0LCBjbXBsLAogCQkJICAgIHdpX3JhbmdlKTsKQEAgLTU0NCwxMiArNTM4LDE1IEBACiAJQk5BX1FFX0lORFhfQUREKGNjYi0+cHJvZHVjZXJfaW5kZXgsIHdpcywgY2NiLT5xX2RlcHRoKTsKIAogCWlmIChsaWtlbHkoY2NiKSkgewotCQlibmFfaWJfYWNrKGNjYi0+aV9kYmVsbCwgcGFja2V0cyk7CisJCWlmIChsaWtlbHkodGVzdF9iaXQoQk5BRF9SWFFfU1RBUlRFRCwgJmNjYi0+cmNiWzBdLT5mbGFncykpKQorCQkJYm5hX2liX2FjayhjY2ItPmlfZGJlbGwsIHBhY2tldHMpOwogCQlibmFkX3JlZmlsbF9yeHEoYm5hZCwgY2NiLT5yY2JbMF0pOwogCQlpZiAoY2NiLT5yY2JbMV0pCiAJCQlibmFkX3JlZmlsbF9yeHEoYm5hZCwgY2NiLT5yY2JbMV0pOwotCX0gZWxzZQotCQlibmFfaWJfYWNrKGNjYi0+aV9kYmVsbCwgMCk7CisJfSBlbHNlIHsKKwkJaWYgKGxpa2VseSh0ZXN0X2JpdChCTkFEX1JYUV9TVEFSVEVELCAmY2NiLT5yY2JbMF0tPmZsYWdzKSkpCisJCQlibmFfaWJfYWNrKGNjYi0+aV9kYmVsbCwgMCk7CisJfQogCiAJcmV0dXJuIHBhY2tldHM7CiB9CkBAIC01NTcsNiArNTU0LDkgQEAKIHN0YXRpYyB2b2lkCiBibmFkX2Rpc2FibGVfcnhfaXJxKHN0cnVjdCBibmFkICpibmFkLCBzdHJ1Y3QgYm5hX2NjYiAqY2NiKQogeworCWlmICh1bmxpa2VseSghdGVzdF9iaXQoQk5BRF9SWFFfU1RBUlRFRCwgJmNjYi0+cmNiWzBdLT5mbGFncykpKQorCQlyZXR1cm47CisKIAlibmFfaWJfY29hbGVzY2luZ190aW1lcl9zZXQoY2NiLT5pX2RiZWxsLCAwKTsKIAlibmFfaWJfYWNrKGNjYi0+aV9kYmVsbCwgMCk7CiB9CkBAIC01NjYsNyArNTY2LDggQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmJuYWQtPmJuYV9sb2NrLCBmbGFncyk7IC8qIEJlY2F1c2Ugb2YgcG9sbGluZyBjb250ZXh0ICovCisJLyogQmVjYXVzZSBvZiBwb2xsaW5nIGNvbnRleHQgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmYm5hZC0+Ym5hX2xvY2ssIGZsYWdzKTsKIAlibmFkX2VuYWJsZV9yeF9pcnFfdW5zYWZlKGNjYik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYm5hZC0+Ym5hX2xvY2ssIGZsYWdzKTsKIH0KQEAgLTU3NSw5ICs1NzYsMTEgQEAKIGJuYWRfbmV0aWZfcnhfc2NoZWR1bGVfcG9sbChzdHJ1Y3QgYm5hZCAqYm5hZCwgc3RydWN0IGJuYV9jY2IgKmNjYikKIHsKIAlzdHJ1Y3QgYm5hZF9yeF9jdHJsICpyeF9jdHJsID0gKHN0cnVjdCBibmFkX3J4X2N0cmwgKikoY2NiLT5jdHJsKTsKLQlpZiAobGlrZWx5KG5hcGlfc2NoZWR1bGVfcHJlcCgoJnJ4X2N0cmwtPm5hcGkpKSkpIHsKKwlzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkgPSAmcnhfY3RybC0+bmFwaTsKKworCWlmIChsaWtlbHkobmFwaV9zY2hlZHVsZV9wcmVwKG5hcGkpKSkgewogCQlibmFkX2Rpc2FibGVfcnhfaXJxKGJuYWQsIGNjYik7Ci0JCV9fbmFwaV9zY2hlZHVsZSgoJnJ4X2N0cmwtPm5hcGkpKTsKKwkJX19uYXBpX3NjaGVkdWxlKG5hcGkpOwogCX0KIAlCTkFEX1VQREFURV9DVFIoYm5hZCwgbmV0aWZfcnhfc2NoZWR1bGUpOwogfQpAQCAtNjAyLDEyICs2MDUsMTEgQEAKIHsKIAl1MzIgaW50cl9zdGF0dXM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gZGF0YTsKLQlzdHJ1Y3QgYm5hZCAqYm5hZDsKKwlzdHJ1Y3QgYm5hZCAqYm5hZCA9IChzdHJ1Y3QgYm5hZCAqKWRhdGE7CiAKLQlibmFkID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlpZiAodW5saWtlbHkodGVzdF9iaXQoQk5BRF9SRl9NQk9YX0lSUV9ESVNBQkxFRCwgJmJuYWQtPnJ1bl9mbGFncykpKQorCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAKLQkvKiBCTkFfSVNSX0dFVChibmFkKTsgSW5jIFJlZiBjb3VudCAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZibmFkLT5ibmFfbG9jaywgZmxhZ3MpOwogCiAJYm5hX2ludHJfc3RhdHVzX2dldCgmYm5hZC0+Ym5hLCBpbnRyX3N0YXR1cyk7CkBAIC02MTcsNyArNjE5LDYgQEAKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJuYWQtPmJuYV9sb2NrLCBmbGFncyk7CiAKLQkvKiBCTkFEX0lTUl9QVVQoYm5hZCk7IERlYyBSZWYgY291bnQgKi8KIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKQEAgLTYyNyw4ICs2MjgsNyBAQAogCWludCBpLCBqOwogCXUzMiBpbnRyX3N0YXR1czsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBkYXRhOwotCXN0cnVjdCBibmFkICpibmFkID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgYm5hZCAqYm5hZCA9IChzdHJ1Y3QgYm5hZCAqKWRhdGE7CiAJc3RydWN0IGJuYWRfcnhfaW5mbyAqcnhfaW5mbzsKIAlzdHJ1Y3QgYm5hZF9yeF9jdHJsICpyeF9jdHJsOwogCkBAIC02NDIsMTYgKzY0MiwyMSBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmJuYWQtPmJuYV9sb2NrLCBmbGFncyk7CiAKLQlpZiAoQk5BX0lTX01CT1hfRVJSX0lOVFIoaW50cl9zdGF0dXMpKSB7CisJaWYgKEJOQV9JU19NQk9YX0VSUl9JTlRSKGludHJfc3RhdHVzKSkKIAkJYm5hX21ib3hfaGFuZGxlcigmYm5hZC0+Ym5hLCBpbnRyX3N0YXR1cyk7Ci0JCWlmICghQk5BX0lTX0lOVFhfREFUQV9JTlRSKGludHJfc3RhdHVzKSkgewotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYm5hZC0+Ym5hX2xvY2ssIGZsYWdzKTsKLQkJCWdvdG8gZG9uZTsKLQkJfQotCX0KKwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJuYWQtPmJuYV9sb2NrLCBmbGFncyk7CiAKKwlpZiAoIUJOQV9JU19JTlRYX0RBVEFfSU5UUihpbnRyX3N0YXR1cykpCisJCXJldHVybiBJUlFfSEFORExFRDsKKwogCS8qIFByb2Nlc3MgZGF0YSBpbnRlcnJ1cHRzICovCisJLyogVHggcHJvY2Vzc2luZyAqLworCWZvciAoaSA9IDA7IGkgPCBibmFkLT5udW1fdHg7IGkrKykgeworCQlmb3IgKGogPSAwOyBqIDwgYm5hZC0+bnVtX3R4cV9wZXJfdHg7IGorKykKKwkJCWJuYWRfdHgoYm5hZCwgYm5hZC0+dHhfaW5mb1tpXS50Y2Jbal0pOworCX0KKwkvKiBSeCBwcm9jZXNzaW5nICovCiAJZm9yIChpID0gMDsgaSA8IGJuYWQtPm51bV9yeDsgaSsrKSB7CiAJCXJ4X2luZm8gPSAmYm5hZC0+cnhfaW5mb1tpXTsKIAkJaWYgKCFyeF9pbmZvLT5yeCkKQEAgLTY2Myw3ICs2NjgsNiBAQAogCQkJCQkJCSAgICByeF9jdHJsLT5jY2IpOwogCQl9CiAJfQotZG9uZToKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKQEAgLTY3NCwxMSArNjc4LDcgQEAKIHN0YXRpYyB2b2lkCiBibmFkX2VuYWJsZV9tYm94X2lycShzdHJ1Y3QgYm5hZCAqYm5hZCkKIHsKLQlpbnQgaXJxID0gQk5BRF9HRVRfTUJPWF9JUlEoYm5hZCk7Ci0KLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEJOQURfUkZfTUJPWF9JUlFfRElTQUJMRUQsICZibmFkLT5ydW5fZmxhZ3MpKQotCQlpZiAoYm5hZC0+Y2ZnX2ZsYWdzICYgQk5BRF9DRl9NU0lYKQotCQkJZW5hYmxlX2lycShpcnEpOworCWNsZWFyX2JpdChCTkFEX1JGX01CT1hfSVJRX0RJU0FCTEVELCAmYm5hZC0+cnVuX2ZsYWdzKTsKIAogCUJOQURfVVBEQVRFX0NUUihibmFkLCBtYm94X2ludHJfZW5hYmxlZCk7CiB9CkBAIC02OTAsMTYgKzY5MCwyMSBAQAogc3RhdGljIHZvaWQKIGJuYWRfZGlzYWJsZV9tYm94X2lycShzdHJ1Y3QgYm5hZCAqYm5hZCkKIHsKLQlpbnQgaXJxID0gQk5BRF9HRVRfTUJPWF9JUlEoYm5hZCk7Ci0KLQotCWlmICghdGVzdF9hbmRfc2V0X2JpdChCTkFEX1JGX01CT1hfSVJRX0RJU0FCTEVELCAmYm5hZC0+cnVuX2ZsYWdzKSkKLQkJaWYgKGJuYWQtPmNmZ19mbGFncyAmIEJOQURfQ0ZfTVNJWCkKLQkJCWRpc2FibGVfaXJxX25vc3luYyhpcnEpOworCXNldF9iaXQoQk5BRF9SRl9NQk9YX0lSUV9ESVNBQkxFRCwgJmJuYWQtPnJ1bl9mbGFncyk7CiAKIAlCTkFEX1VQREFURV9DVFIoYm5hZCwgbWJveF9pbnRyX2Rpc2FibGVkKTsKIH0KIAorc3RhdGljIHZvaWQKK2JuYWRfc2V0X25ldGRldl9wZXJtX2FkZHIoc3RydWN0IGJuYWQgKmJuYWQpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGJuYWQtPm5ldGRldjsKKworCW1lbWNweShuZXRkZXYtPnBlcm1fYWRkciwgJmJuYWQtPnBlcm1fYWRkciwgbmV0ZGV2LT5hZGRyX2xlbik7CisJaWYgKGlzX3plcm9fZXRoZXJfYWRkcihuZXRkZXYtPmRldl9hZGRyKSkKKwkJbWVtY3B5KG5ldGRldi0+ZGV2X2FkZHIsICZibmFkLT5wZXJtX2FkZHIsIG5ldGRldi0+YWRkcl9sZW4pOworfQorCiAvKiBDb250cm9sIFBhdGggSGFuZGxlcnMgKi8KIAogLyogQ2FsbGJhY2tzICovCkBAIC03NTUsMTEgKzc2MCwxNCBAQAogCiAJaWYgKGxpbmtfdXApIHsKIAkJaWYgKCFuZXRpZl9jYXJyaWVyX29rKGJuYWQtPm5ldGRldikpIHsKKwkJCXN0cnVjdCBibmFfdGNiICp0Y2IgPSBibmFkLT50eF9pbmZvWzBdLnRjYlswXTsKKwkJCWlmICghdGNiKQorCQkJCXJldHVybjsKIAkJCXByX3dhcm4oImJuYTogJXMgbGluayB1cFxuIiwKIAkJCQlibmFkLT5uZXRkZXYtPm5hbWUpOwogCQkJbmV0aWZfY2Fycmllcl9vbihibmFkLT5uZXRkZXYpOwogCQkJQk5BRF9VUERBVEVfQ1RSKGJuYWQsIGxpbmtfdG9nZ2xlKTsKLQkJCWlmICh0ZXN0X2JpdChCTkFEX1JGX1RYX1NUQVJURUQsICZibmFkLT5ydW5fZmxhZ3MpKSB7CisJCQlpZiAodGVzdF9iaXQoQk5BRF9UWFFfVFhfU1RBUlRFRCwgJnRjYi0+ZmxhZ3MpKSB7CiAJCQkJLyogRm9yY2UgYW4gaW1tZWRpYXRlIFRyYW5zbWl0IFNjaGVkdWxlICovCiAJCQkJcHJfaW5mbygiYm5hOiAlcyBUWF9TVEFSVEVEXG4iLAogCQkJCQlibmFkLT5uZXRkZXYtPm5hbWUpOwpAQCAtODA3LDYgKzgxNSwxOCBAQAogewogCXN0cnVjdCBibmFkX3R4X2luZm8gKnR4X2luZm8gPQogCQkJKHN0cnVjdCBibmFkX3R4X2luZm8gKil0Y2ItPnR4cS0+dHgtPnByaXY7CisJc3RydWN0IGJuYWRfdW5tYXBfcSAqdW5tYXBfcSA9IHRjYi0+dW5tYXBfcTsKKworCXdoaWxlICh0ZXN0X2FuZF9zZXRfYml0KEJOQURfVFhRX0ZSRUVfU0VOVCwgJnRjYi0+ZmxhZ3MpKQorCQljcHVfcmVsYXgoKTsKKworCWJuYWRfZnJlZV9hbGxfdHhidWZzKGJuYWQsIHRjYik7CisKKwl1bm1hcF9xLT5wcm9kdWNlcl9pbmRleCA9IDA7CisJdW5tYXBfcS0+Y29uc3VtZXJfaW5kZXggPSAwOworCisJc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCk7CisJY2xlYXJfYml0KEJOQURfVFhRX0ZSRUVfU0VOVCwgJnRjYi0+ZmxhZ3MpOwogCiAJdHhfaW5mby0+dGNiW3RjYi0+aWRdID0gTlVMTDsKIH0KQEAgLTgyMiw2ICs4NDIsMTIgQEAKIH0KIAogc3RhdGljIHZvaWQKK2JuYWRfY2JfcmNiX2Rlc3Ryb3koc3RydWN0IGJuYWQgKmJuYWQsIHN0cnVjdCBibmFfcmNiICpyY2IpCit7CisJYm5hZF9mcmVlX2FsbF9yeGJ1ZnMoYm5hZCwgcmNiKTsKK30KKworc3RhdGljIHZvaWQKIGJuYWRfY2JfY2NiX3NldHVwKHN0cnVjdCBibmFkICpibmFkLCBzdHJ1Y3QgYm5hX2NjYiAqY2NiKQogewogCXN0cnVjdCBibmFkX3J4X2luZm8gKnJ4X2luZm8gPQpAQCAtODQ5LDcgKzg3NSw3IEBACiAJaWYgKHR4X2luZm8gIT0gJmJuYWQtPnR4X2luZm9bMF0pCiAJCXJldHVybjsKIAotCWNsZWFyX2JpdChCTkFEX1JGX1RYX1NUQVJURUQsICZibmFkLT5ydW5fZmxhZ3MpOworCWNsZWFyX2JpdChCTkFEX1RYUV9UWF9TVEFSVEVELCAmdGNiLT5mbGFncyk7CiAJbmV0aWZfc3RvcF9xdWV1ZShibmFkLT5uZXRkZXYpOwogCXByX2luZm8oImJuYTogJXMgVFhfU1RPUFBFRFxuIiwgYm5hZC0+bmV0ZGV2LT5uYW1lKTsKIH0KQEAgLTg1Nyw5ICs4ODMsMzYgQEAKIHN0YXRpYyB2b2lkCiBibmFkX2NiX3R4X3Jlc3VtZShzdHJ1Y3QgYm5hZCAqYm5hZCwgc3RydWN0IGJuYV90Y2IgKnRjYikKIHsKLQlpZiAodGVzdF9hbmRfc2V0X2JpdChCTkFEX1JGX1RYX1NUQVJURUQsICZibmFkLT5ydW5fZmxhZ3MpKQorCXN0cnVjdCBibmFkX3VubWFwX3EgKnVubWFwX3EgPSB0Y2ItPnVubWFwX3E7CisKKwlpZiAodGVzdF9iaXQoQk5BRF9UWFFfVFhfU1RBUlRFRCwgJnRjYi0+ZmxhZ3MpKQogCQlyZXR1cm47CiAKKwljbGVhcl9iaXQoQk5BRF9SRl9UWF9TSFVURE9XTl9ERUxBWUVELCAmYm5hZC0+cnVuX2ZsYWdzKTsKKworCXdoaWxlICh0ZXN0X2FuZF9zZXRfYml0KEJOQURfVFhRX0ZSRUVfU0VOVCwgJnRjYi0+ZmxhZ3MpKQorCQljcHVfcmVsYXgoKTsKKworCWJuYWRfZnJlZV9hbGxfdHhidWZzKGJuYWQsIHRjYik7CisKKwl1bm1hcF9xLT5wcm9kdWNlcl9pbmRleCA9IDA7CisJdW5tYXBfcS0+Y29uc3VtZXJfaW5kZXggPSAwOworCisJc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCk7CisJY2xlYXJfYml0KEJOQURfVFhRX0ZSRUVfU0VOVCwgJnRjYi0+ZmxhZ3MpOworCisJLyoKKwkgKiBXb3JrYXJvdW5kIGZvciBmaXJzdCBkZXZpY2UgZW5hYmxlIGZhaWx1cmUgJiB3ZQorCSAqIGdldCBhIDAgTUFDIGFkZHJlc3MuIFdlIHRyeSB0byBnZXQgdGhlIE1BQyBhZGRyZXNzCisJICogYWdhaW4gaGVyZS4KKwkgKi8KKwlpZiAoaXNfemVyb19ldGhlcl9hZGRyKCZibmFkLT5wZXJtX2FkZHIubWFjWzBdKSkgeworCQlibmFfcG9ydF9tYWNfZ2V0KCZibmFkLT5ibmEucG9ydCwgJmJuYWQtPnBlcm1fYWRkcik7CisJCWJuYWRfc2V0X25ldGRldl9wZXJtX2FkZHIoYm5hZCk7CisJfQorCisJc2V0X2JpdChCTkFEX1RYUV9UWF9TVEFSVEVELCAmdGNiLT5mbGFncyk7CisKIAlpZiAobmV0aWZfY2Fycmllcl9vayhibmFkLT5uZXRkZXYpKSB7CiAJCXByX2luZm8oImJuYTogJXMgVFhfU1RBUlRFRFxuIiwgYm5hZC0+bmV0ZGV2LT5uYW1lKTsKIAkJbmV0aWZfd2FrZV9xdWV1ZShibmFkLT5uZXRkZXYpOwpAQCAtODcwLDQwICs5MjMsMjIgQEAKIHN0YXRpYyB2b2lkCiBibmFkX2NiX3R4X2NsZWFudXAoc3RydWN0IGJuYWQgKmJuYWQsIHN0cnVjdCBibmFfdGNiICp0Y2IpCiB7Ci0Jc3RydWN0IGJuYWRfdW5tYXBfcSAqdW5tYXBfcTsKLQotCWlmICghdGNiIHx8ICghdGNiLT51bm1hcF9xKSkKLQkJcmV0dXJuOwotCi0JdW5tYXBfcSA9IHRjYi0+dW5tYXBfcTsKLQlpZiAoIXVubWFwX3EtPnVubWFwX2FycmF5KQotCQlyZXR1cm47Ci0KLQlpZiAodGVzdF9hbmRfc2V0X2JpdChCTkFEX1RYUV9GUkVFX1NFTlQsICZ0Y2ItPmZsYWdzKSkKLQkJcmV0dXJuOwotCi0JYm5hZF9mcmVlX2FsbF90eGJ1ZnMoYm5hZCwgdGNiKTsKLQotCXVubWFwX3EtPnByb2R1Y2VyX2luZGV4ID0gMDsKLQl1bm1hcF9xLT5jb25zdW1lcl9pbmRleCA9IDA7Ci0KLQlzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKTsKLQljbGVhcl9iaXQoQk5BRF9UWFFfRlJFRV9TRU5ULCAmdGNiLT5mbGFncyk7CisJLyogRGVsYXkgb25seSBvbmNlIGZvciB0aGUgd2hvbGUgVHggUGF0aCBTaHV0ZG93biAqLworCWlmICghdGVzdF9hbmRfc2V0X2JpdChCTkFEX1JGX1RYX1NIVVRET1dOX0RFTEFZRUQsICZibmFkLT5ydW5fZmxhZ3MpKQorCQltZGVsYXkoQk5BRF9UWFJYX1NZTkNfTURFTEFZKTsKIH0KIAogc3RhdGljIHZvaWQKIGJuYWRfY2JfcnhfY2xlYW51cChzdHJ1Y3QgYm5hZCAqYm5hZCwKIAkJCXN0cnVjdCBibmFfY2NiICpjY2IpCiB7Ci0JYm5hZF9jcV9jbXBsX2luaXQoYm5hZCwgY2NiKTsKLQotCWJuYWRfZnJlZV9yeGJ1ZnMoYm5hZCwgY2NiLT5yY2JbMF0pOwogCWNsZWFyX2JpdChCTkFEX1JYUV9TVEFSVEVELCAmY2NiLT5yY2JbMF0tPmZsYWdzKTsKIAotCWlmIChjY2ItPnJjYlsxXSkgewotCQlibmFkX2ZyZWVfcnhidWZzKGJuYWQsIGNjYi0+cmNiWzFdKTsKKwlpZiAoY2NiLT5yY2JbMV0pCiAJCWNsZWFyX2JpdChCTkFEX1JYUV9TVEFSVEVELCAmY2NiLT5yY2JbMV0tPmZsYWdzKTsKLQl9CisKKwlpZiAoIXRlc3RfYW5kX3NldF9iaXQoQk5BRF9SRl9SWF9TSFVURE9XTl9ERUxBWUVELCAmYm5hZC0+cnVuX2ZsYWdzKSkKKwkJbWRlbGF5KEJOQURfVFhSWF9TWU5DX01ERUxBWSk7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC05MTEsNiArOTQ2LDEzIEBACiB7CiAJc3RydWN0IGJuYWRfdW5tYXBfcSAqdW5tYXBfcSA9IHJjYi0+dW5tYXBfcTsKIAorCWNsZWFyX2JpdChCTkFEX1JGX1JYX1NIVVRET1dOX0RFTEFZRUQsICZibmFkLT5ydW5fZmxhZ3MpOworCisJaWYgKHJjYiA9PSByY2ItPmNxLT5jY2ItPnJjYlswXSkKKwkJYm5hZF9jcV9jbXBsX2luaXQoYm5hZCwgcmNiLT5jcS0+Y2NiKTsKKworCWJuYWRfZnJlZV9hbGxfcnhidWZzKGJuYWQsIHJjYik7CisKIAlzZXRfYml0KEJOQURfUlhRX1NUQVJURUQsICZyY2ItPmZsYWdzKTsKIAogCS8qIE5vdyBhbGxvY2F0ZSAmIHBvc3QgYnVmZmVycyBmb3IgdGhpcyBSQ0IgKi8KQEAgLTEwNDcsNyArMTA4OSw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYm5hZC0+Ym5hX2xvY2ssIGZsYWdzKTsKIAogCWlycSA9IEJOQURfR0VUX01CT1hfSVJRKGJuYWQpOwotCWZyZWVfaXJxKGlycSwgYm5hZC0+bmV0ZGV2KTsKKwlmcmVlX2lycShpcnEsIGJuYWQpOwogCiAJa2ZyZWUoaW50cl9pbmZvLT5pZGwpOwogfQpAQCAtMTA2MSw3ICsxMTAzLDcgQEAKIGJuYWRfbWJveF9pcnFfYWxsb2Moc3RydWN0IGJuYWQgKmJuYWQsCiAJCSAgICBzdHJ1Y3QgYm5hX2ludHJfaW5mbyAqaW50cl9pbmZvKQogewotCWludCAJCWVycjsKKwlpbnQgCQllcnIgPSAwOwogCXVuc2lnbmVkIGxvbmcgCWZsYWdzOwogCXUzMglpcnE7CiAJaXJxX2hhbmRsZXJfdCAJaXJxX2hhbmRsZXI7CkBAIC0xMDk2LDIyICsxMTM4LDE3IEBACiAJICovCiAJc2V0X2JpdChCTkFEX1JGX01CT1hfSVJRX0RJU0FCTEVELCAmYm5hZC0+cnVuX2ZsYWdzKTsKIAorCUJOQURfVVBEQVRFX0NUUihibmFkLCBtYm94X2ludHJfZGlzYWJsZWQpOworCiAJZXJyID0gcmVxdWVzdF9pcnEoaXJxLCBpcnFfaGFuZGxlciwgZmxhZ3MsCi0JCQkgIGJuYWQtPm1ib3hfaXJxX25hbWUsIGJuYWQtPm5ldGRldik7CisJCQkgIGJuYWQtPm1ib3hfaXJxX25hbWUsIGJuYWQpOwogCiAJaWYgKGVycikgewogCQlrZnJlZShpbnRyX2luZm8tPmlkbCk7CiAJCWludHJfaW5mby0+aWRsID0gTlVMTDsKLQkJcmV0dXJuIGVycjsKIAl9CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmYm5hZC0+Ym5hX2xvY2ssIGZsYWdzKTsKLQotCWlmIChibmFkLT5jZmdfZmxhZ3MgJiBCTkFEX0NGX01TSVgpCi0JCWRpc2FibGVfaXJxX25vc3luYyhpcnEpOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYm5hZC0+Ym5hX2xvY2ssIGZsYWdzKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMTM4OCwxMyArMTQyNSwyNCBAQAogfQogCiBzdGF0aWMgdm9pZAotYm5hZF9pb2Nfc2VtX3RpbWVvdXQodW5zaWduZWQgbG9uZyBkYXRhKQorYm5hZF9pb2NwZl90aW1lb3V0KHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKIAlzdHJ1Y3QgYm5hZCAqYm5hZCA9IChzdHJ1Y3QgYm5hZCAqKWRhdGE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZibmFkLT5ibmFfbG9jaywgZmxhZ3MpOwotCWJmYV9ud19pb2Nfc2VtX3RpbWVvdXQoKHZvaWQgKikgJmJuYWQtPmJuYS5kZXZpY2UuaW9jKTsKKwliZmFfbndfaW9jcGZfdGltZW91dCgodm9pZCAqKSAmYm5hZC0+Ym5hLmRldmljZS5pb2MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJuYWQtPmJuYV9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkCitibmFkX2lvY3BmX3NlbV90aW1lb3V0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgYm5hZCAqYm5hZCA9IChzdHJ1Y3QgYm5hZCAqKWRhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZibmFkLT5ibmFfbG9jaywgZmxhZ3MpOworCWJmYV9ud19pb2NwZl9zZW1fdGltZW91dCgodm9pZCAqKSAmYm5hZC0+Ym5hLmRldmljZS5pb2MpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJuYWQtPmJuYV9sb2NrLCBmbGFncyk7CiB9CiAKQEAgLTE1NTUsNjIgKzE2MDMsMTkgQEAKIAlyZXR1cm4gcmN2ZDsKIH0KIAotc3RhdGljIGludAotYm5hZF9uYXBpX3BvbGxfdHhyeChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCi17Ci0Jc3RydWN0IGJuYWRfcnhfY3RybCAqcnhfY3RybCA9Ci0JCWNvbnRhaW5lcl9vZihuYXBpLCBzdHJ1Y3QgYm5hZF9yeF9jdHJsLCBuYXBpKTsKLQlzdHJ1Y3QgYm5hX2NjYiAqY2NiOwotCXN0cnVjdCBibmFkICpibmFkOwotCWludCAJCQlyY3ZkID0gMDsKLQlpbnQJCQlpLCBqOwotCi0JY2NiID0gcnhfY3RybC0+Y2NiOwotCi0JYm5hZCA9IGNjYi0+Ym5hZDsKLQotCWlmICghbmV0aWZfY2Fycmllcl9vayhibmFkLT5uZXRkZXYpKQotCQlnb3RvIHBvbGxfZXhpdDsKLQotCS8qIEhhbmRsZSBUeCBDb21wbGV0aW9ucywgaWYgYW55ICovCi0JZm9yIChpID0gMDsgaSA8IGJuYWQtPm51bV90eDsgaSsrKSB7Ci0JCWZvciAoaiA9IDA7IGogPCBibmFkLT5udW1fdHhxX3Blcl90eDsgaisrKQotCQkJYm5hZF90eChibmFkLCBibmFkLT50eF9pbmZvW2ldLnRjYltqXSk7Ci0JfQotCi0JLyogSGFuZGxlIFJ4IENvbXBsZXRpb25zICovCi0JcmN2ZCA9IGJuYWRfcG9sbF9jcShibmFkLCBjY2IsIGJ1ZGdldCk7Ci0JaWYgKHJjdmQgPT0gYnVkZ2V0KQotCQlyZXR1cm4gcmN2ZDsKLXBvbGxfZXhpdDoKLQluYXBpX2NvbXBsZXRlKChuYXBpKSk7Ci0KLQlCTkFEX1VQREFURV9DVFIoYm5hZCwgbmV0aWZfcnhfY29tcGxldGUpOwotCi0JYm5hZF9lbmFibGVfdHhyeF9pcnFzKGJuYWQpOwotCXJldHVybiByY3ZkOwotfQotCiBzdGF0aWMgdm9pZAogYm5hZF9uYXBpX2VuYWJsZShzdHJ1Y3QgYm5hZCAqYm5hZCwgdTMyIHJ4X2lkKQogewotCWludCAoKm5hcGlfcG9sbCkgKHN0cnVjdCBuYXBpX3N0cnVjdCAqLCBpbnQpOwogCXN0cnVjdCBibmFkX3J4X2N0cmwgKnJ4X2N0cmw7CiAJaW50IGk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZibmFkLT5ibmFfbG9jaywgZmxhZ3MpOwotCWlmIChibmFkLT5jZmdfZmxhZ3MgJiBCTkFEX0NGX01TSVgpCi0JCW5hcGlfcG9sbCA9IGJuYWRfbmFwaV9wb2xsX3J4OwotCWVsc2UKLQkJbmFwaV9wb2xsID0gYm5hZF9uYXBpX3BvbGxfdHhyeDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZibmFkLT5ibmFfbG9jaywgZmxhZ3MpOwogCiAJLyogSW5pdGlhbGl6ZSAmIGVuYWJsZSBOQVBJICovCiAJZm9yIChpID0gMDsgaSA8CWJuYWQtPm51bV9yeHBfcGVyX3J4OyBpKyspIHsKIAkJcnhfY3RybCA9ICZibmFkLT5yeF9pbmZvW3J4X2lkXS5yeF9jdHJsW2ldOworCiAJCW5ldGlmX25hcGlfYWRkKGJuYWQtPm5ldGRldiwgJnJ4X2N0cmwtPm5hcGksCi0JCQkgICAgICAgbmFwaV9wb2xsLCA2NCk7CisJCQkgICAgICAgYm5hZF9uYXBpX3BvbGxfcngsIDY0KTsKKwogCQluYXBpX2VuYWJsZSgmcnhfY3RybC0+bmFwaSk7CiAJfQogfQpAQCAtMTgyNSw2ICsxODMwLDcgQEAKIAogCS8qIEluaXRpYWxpemUgdGhlIFJ4IGV2ZW50IGhhbmRsZXJzICovCiAJcnhfY2Jmbi5yY2Jfc2V0dXBfY2JmbiA9IGJuYWRfY2JfcmNiX3NldHVwOworCXJ4X2NiZm4ucmNiX2Rlc3Ryb3lfY2JmbiA9IGJuYWRfY2JfcmNiX2Rlc3Ryb3k7CiAJcnhfY2Jmbi5yY2JfZGVzdHJveV9jYmZuID0gTlVMTDsKIAlyeF9jYmZuLmNjYl9zZXR1cF9jYmZuID0gYm5hZF9jYl9jY2Jfc2V0dXA7CiAJcnhfY2Jmbi5jY2JfZGVzdHJveV9jYmZuID0gYm5hZF9jYl9jY2JfZGVzdHJveTsKQEAgLTE5NjgsNiArMTk3NCwyNyBAQAogCXJldHVybiAwOwogfQogCisvKiBDYWxsZWQgd2l0aCBibmFkX2NvbmZfbG9jaygpIGhlbGQgKi8KK3N0YXRpYyB2b2lkCitibmFkX3Jlc3RvcmVfdmxhbnMoc3RydWN0IGJuYWQgKmJuYWQsIHUzMiByeF9pZCkKK3sKKwl1MTYgdmxhbl9pZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCFibmFkLT52bGFuX2dycCkKKwkJcmV0dXJuOworCisJQlVHX09OKCEoVkxBTl9OX1ZJRCA9PSAoQkZJX01BWF9WTEFOICsgMSkpKTsKKworCWZvciAodmxhbl9pZCA9IDA7IHZsYW5faWQgPCBWTEFOX05fVklEOyB2bGFuX2lkKyspIHsKKwkJaWYgKCF2bGFuX2dyb3VwX2dldF9kZXZpY2UoYm5hZC0+dmxhbl9ncnAsIHZsYW5faWQpKQorCQkJY29udGludWU7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZibmFkLT5ibmFfbG9jaywgZmxhZ3MpOworCQlibmFfcnhfdmxhbl9hZGQoYm5hZC0+cnhfaW5mb1tyeF9pZF0ucngsIHZsYW5faWQpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZibmFkLT5ibmFfbG9jaywgZmxhZ3MpOworCX0KK30KKwogLyogU3RhdGlzdGljcyB1dGlsaXRpZXMgKi8KIHZvaWQKIGJuYWRfbmV0ZGV2X3FzdGF0c19maWxsKHN0cnVjdCBibmFkICpibmFkLCBzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKnN0YXRzKQpAQCAtMjE1MiwxNiArMjE3OSw2IEBACiAJCWJuYWQtPm51bV9yeHBfcGVyX3J4ID0gMTsKIH0KIAotc3RhdGljIHZvaWQKLWJuYWRfc2V0X25ldGRldl9wZXJtX2FkZHIoc3RydWN0IGJuYWQgKmJuYWQpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGJuYWQtPm5ldGRldjsKLQotCW1lbWNweShuZXRkZXYtPnBlcm1fYWRkciwgJmJuYWQtPnBlcm1fYWRkciwgbmV0ZGV2LT5hZGRyX2xlbik7Ci0JaWYgKGlzX3plcm9fZXRoZXJfYWRkcihuZXRkZXYtPmRldl9hZGRyKSkKLQkJbWVtY3B5KG5ldGRldi0+ZGV2X2FkZHIsICZibmFkLT5wZXJtX2FkZHIsIG5ldGRldi0+YWRkcl9sZW4pOwotfQotCiAvKiBFbmFibGUgLyBkaXNhYmxlIGRldmljZSAqLwogc3RhdGljIHZvaWQKIGJuYWRfZGV2aWNlX2Rpc2FibGUoc3RydWN0IGJuYWQgKmJuYWQpCkBAIC0yMzUzLDYgKzIzNzAsOSBAQAogCS8qIEVuYWJsZSBicm9hZGNhc3QgKi8KIAlibmFkX2VuYWJsZV9kZWZhdWx0X2JjYXN0KGJuYWQpOwogCisJLyogUmVzdG9yZSBWTEFOcywgaWYgYW55ICovCisJYm5hZF9yZXN0b3JlX3ZsYW5zKGJuYWQsIDApOworCiAJLyogU2V0IHRoZSBVQ0FTVCBhZGRyZXNzICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmJuYWQtPmJuYV9sb2NrLCBmbGFncyk7CiAJYm5hZF9tYWNfYWRkcl9zZXRfbG9ja2VkKGJuYWQsIG5ldGRldi0+ZGV2X2FkZHIpOwpAQCAtMjQzMywyMSArMjQ1MywyMSBAQAogCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KIAotCS8qCi0JICogVGFrZXMgY2FyZSBvZiB0aGUgVHggdGhhdCBpcyBzY2hlZHVsZWQgYmV0d2VlbiBjbGVhcmluZyB0aGUgZmxhZwotCSAqIGFuZCB0aGUgbmV0aWZfc3RvcF9xdWV1ZSgpIGNhbGwuCi0JICovCi0JaWYgKHVubGlrZWx5KCF0ZXN0X2JpdChCTkFEX1JGX1RYX1NUQVJURUQsICZibmFkLT5ydW5fZmxhZ3MpKSkgewotCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCXJldHVybiBORVRERVZfVFhfT0s7Ci0JfQotCiAJdHhfaWQgPSAwOwogCiAJdHhfaW5mbyA9ICZibmFkLT50eF9pbmZvW3R4X2lkXTsKIAl0Y2IgPSB0eF9pbmZvLT50Y2JbdHhfaWRdOwogCXVubWFwX3EgPSB0Y2ItPnVubWFwX3E7CiAKKwkvKgorCSAqIFRha2VzIGNhcmUgb2YgdGhlIFR4IHRoYXQgaXMgc2NoZWR1bGVkIGJldHdlZW4gY2xlYXJpbmcgdGhlIGZsYWcKKwkgKiBhbmQgdGhlIG5ldGlmX3N0b3BfcXVldWUoKSBjYWxsLgorCSAqLworCWlmICh1bmxpa2VseSghdGVzdF9iaXQoQk5BRF9UWFFfVFhfU1RBUlRFRCwgJnRjYi0+ZmxhZ3MpKSkgeworCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCXJldHVybiBORVRERVZfVFhfT0s7CisJfQorCiAJdmVjdG9ycyA9IDEgKyBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOwogCWlmICh2ZWN0b3JzID4gQkZJX1RYX01BWF9WRUNUT1JTX1BFUl9QS1QpIHsKIAkJZGV2X2tmcmVlX3NrYihza2IpOwpAQCAtMjQ2Miw3ICsyNDgyLDggQEAKIAkJICAgIHRjYi0+Y29uc3VtZXJfaW5kZXggJiYKIAkJICAgICF0ZXN0X2FuZF9zZXRfYml0KEJOQURfVFhRX0ZSRUVfU0VOVCwgJnRjYi0+ZmxhZ3MpKSB7CiAJCQlhY2tlZCA9IGJuYWRfZnJlZV90eGJ1ZnMoYm5hZCwgdGNiKTsKLQkJCWJuYV9pYl9hY2sodGNiLT5pX2RiZWxsLCBhY2tlZCk7CisJCQlpZiAobGlrZWx5KHRlc3RfYml0KEJOQURfVFhRX1RYX1NUQVJURUQsICZ0Y2ItPmZsYWdzKSkpCisJCQkJYm5hX2liX2Fjayh0Y2ItPmlfZGJlbGwsIGFja2VkKTsKIAkJCXNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpOwogCQkJY2xlYXJfYml0KEJOQURfVFhRX0ZSRUVfU0VOVCwgJnRjYi0+ZmxhZ3MpOwogCQl9IGVsc2UgewpAQCAtMjYyNCw2ICsyNjQ1LDEwIEBACiAJdGNiLT5wcm9kdWNlcl9pbmRleCA9IHR4cV9wcm9kOwogCiAJc21wX21iKCk7CisKKwlpZiAodW5saWtlbHkoIXRlc3RfYml0KEJOQURfVFhRX1RYX1NUQVJURUQsICZ0Y2ItPmZsYWdzKSkpCisJCXJldHVybiBORVRERVZfVFhfT0s7CisKIAlibmFfdHhxX3Byb2RfaW5keF9kb29yYmVsbCh0Y2IpOwogCiAJaWYgKCh1MTYpICgqdGNiLT5od19jb25zdW1lcl9pbmRleCkgIT0gdGNiLT5jb25zdW1lcl9pbmRleCkKQEAgLTMwMzIsNyArMzA1Nyw3IEBACiBibmFkX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaWRldl9pZCkKIHsKLQlib29sIAl1c2luZ19kYWM7CisJYm9vbCAJdXNpbmdfZGFjID0gZmFsc2U7CiAJaW50IAllcnI7CiAJc3RydWN0IGJuYWQgKmJuYWQ7CiAJc3RydWN0IGJuYSAqYm5hOwpAQCAtMzA2Niw3ICszMDkxLDcgQEAKIAkvKgogCSAqIFBDSSBpbml0aWFsaXphdGlvbgogCSAqIAlPdXRwdXQgOiB1c2luZ19kYWMgPSAxIGZvciA2NCBiaXQgRE1BCi0JICoJCSAgICAgICAgICAgPSAwIGZvciAzMiBiaXQgRE1BCisJICoJCQkgICA9IDAgZm9yIDMyIGJpdCBETUEKIAkgKi8KIAllcnIgPSBibmFkX3BjaV9pbml0KGJuYWQsIHBkZXYsICZ1c2luZ19kYWMpOwogCWlmIChlcnIpCkBAIC0zMDg0LDYgKzMxMDksOSBAQAogCS8qIEluaXRpYWxpemUgbmV0ZGV2IHN0cnVjdHVyZSwgc2V0IHVwIGV0aHRvb2wgb3BzICovCiAJYm5hZF9uZXRkZXZfaW5pdChibmFkLCB1c2luZ19kYWMpOwogCisJLyogU2V0IGxpbmsgdG8gZG93biBzdGF0ZSAqLworCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7CisKIAlibmFkX2VuYWJsZV9tc2l4KGJuYWQpOwogCiAJLyogR2V0IHJlc291cmNlIHJlcXVpcmVtZW50IGZvcm0gYm5hICovCkBAIC0zMTE1LDExICszMTQzLDEzIEBACiAJCQkJKCh1bnNpZ25lZCBsb25nKWJuYWQpKTsKIAlzZXR1cF90aW1lcigmYm5hZC0+Ym5hLmRldmljZS5pb2MuaGJfdGltZXIsIGJuYWRfaW9jX2hiX2NoZWNrLAogCQkJCSgodW5zaWduZWQgbG9uZylibmFkKSk7Ci0Jc2V0dXBfdGltZXIoJmJuYWQtPmJuYS5kZXZpY2UuaW9jLnNlbV90aW1lciwgYm5hZF9pb2Nfc2VtX3RpbWVvdXQsCisJc2V0dXBfdGltZXIoJmJuYWQtPmJuYS5kZXZpY2UuaW9jLmlvY3BmX3RpbWVyLCBibmFkX2lvY3BmX3RpbWVvdXQsCisJCQkJKCh1bnNpZ25lZCBsb25nKWJuYWQpKTsKKwlzZXR1cF90aW1lcigmYm5hZC0+Ym5hLmRldmljZS5pb2Muc2VtX3RpbWVyLCBibmFkX2lvY3BmX3NlbV90aW1lb3V0LAogCQkJCSgodW5zaWduZWQgbG9uZylibmFkKSk7CiAKIAkvKiBOb3cgc3RhcnQgdGhlIHRpbWVyIGJlZm9yZSBjYWxsaW5nIElPQyAqLwotCW1vZF90aW1lcigmYm5hZC0+Ym5hLmRldmljZS5pb2MuaW9jX3RpbWVyLAorCW1vZF90aW1lcigmYm5hZC0+Ym5hLmRldmljZS5pb2MuaW9jcGZfdGltZXIsCiAJCSAgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoQk5BX0lPQ19USU1FUl9GUkVRKSk7CiAKIAkvKgpAQCAtMzEzNywxMSArMzE2Nyw2IEBACiAKIAltdXRleF91bmxvY2soJmJuYWQtPmNvbmZfbXV0ZXgpOwogCi0JLyoKLQkgKiBNYWtlIHN1cmUgdGhlIGxpbmsgYXBwZWFycyBkb3duIHRvIHRoZSBzdGFjawotCSAqLwotCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7Ci0KIAkvKiBGaW5hbGx5LCByZWd1aXN0ZXIgd2l0aCBuZXRfZGV2aWNlIGxheWVyICovCiAJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KG5ldGRldik7CiAJaWYgKGVycikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm5hL2JuYWQuaCBiL2RyaXZlcnMvbmV0L2JuYS9ibmFkLmgKaW5kZXggZWJjM2E5MDcuLjhiMWQ1MTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JuYS9ibmFkLmgKKysrIGIvZHJpdmVycy9uZXQvYm5hL2JuYWQuaApAQCAtNTEsNiArNTEsNyBAQAogICovCiBzdHJ1Y3QgYm5hZF9yeF9jdHJsIHsKIAlzdHJ1Y3QgYm5hX2NjYiAqY2NiOworCXVuc2lnbmVkIGxvbmcgIGZsYWdzOwogCXN0cnVjdCBuYXBpX3N0cnVjdAluYXBpOwogfTsKIApAQCAtNjQsNyArNjUsNyBAQAogI2RlZmluZSBCTkFEX05BTUUJCQkiYm5hIgogI2RlZmluZSBCTkFEX05BTUVfTEVOCQkJNjQKIAotI2RlZmluZSBCTkFEX1ZFUlNJT04JCQkiMi4zLjIuMCIKKyNkZWZpbmUgQk5BRF9WRVJTSU9OCQkJIjIuMy4yLjMiCiAKICNkZWZpbmUgQk5BRF9NQUlMQk9YX01TSVhfVkVDVE9SUwkxCiAKQEAgLTgyLDYgKzgzLDcgQEAKIAogLyogQml0IHBvc2l0aW9ucyBmb3IgdGNiLT5mbGFncyAqLwogI2RlZmluZSBCTkFEX1RYUV9GUkVFX1NFTlQJCTAKKyNkZWZpbmUgQk5BRF9UWFFfVFhfU1RBUlRFRAkJMQogCiAvKiBCaXQgcG9zaXRpb25zIGZvciByY2ItPmZsYWdzICovCiAjZGVmaW5lIEJOQURfUlhRX1JFRklMTAkJCTAKQEAgLTEyNCw2ICsxMjYsNyBAQAogc3RydWN0IGJuYWRfZHJ2X3N0YXRzIHsKIAl1NjQgCQluZXRpZl9xdWV1ZV9zdG9wOwogCXU2NAkJbmV0aWZfcXVldWVfd2FrZXVwOworCXU2NAkJbmV0aWZfcXVldWVfc3RvcHBlZDsKIAl1NjQJCXRzbzQ7CiAJdTY0CQl0c282OwogCXU2NAkJdHNvX2VycjsKQEAgLTE5OSwxMiArMjAyLDEyIEBACiAvKiBTZXQsIHRlc3RlZCAmIGNsZWFyZWQgdXNpbmcgeHh4X2JpdCgpIGZ1bmN0aW9ucyAqLwogLyogVmFsdWVzIGluZGljYXRlZCBiaXQgcG9zaXRpb25zICovCiAjZGVmaW5lCUJOQURfUkZfQ0VFX1JVTk5JTkcJCTEKLSNkZWZpbmUgQk5BRF9SRl9IV19FUlJPUiAJCTIKLSNkZWZpbmUgQk5BRF9SRl9NQk9YX0lSUV9ESVNBQkxFRAkzCi0jZGVmaW5lIEJOQURfUkZfVFhfU1RBUlRFRAkJNAotI2RlZmluZSBCTkFEX1JGX1JYX1NUQVJURUQJCTUKLSNkZWZpbmUgQk5BRF9SRl9ESU1fVElNRVJfUlVOTklORwk2Ci0jZGVmaW5lIEJOQURfUkZfU1RBVFNfVElNRVJfUlVOTklORwk3CisjZGVmaW5lIEJOQURfUkZfTUJPWF9JUlFfRElTQUJMRUQJMgorI2RlZmluZSBCTkFEX1JGX1JYX1NUQVJURUQJCTMKKyNkZWZpbmUgQk5BRF9SRl9ESU1fVElNRVJfUlVOTklORwk0CisjZGVmaW5lIEJOQURfUkZfU1RBVFNfVElNRVJfUlVOTklORwk1CisjZGVmaW5lIEJOQURfUkZfVFhfU0hVVERPV05fREVMQVlFRAk2CisjZGVmaW5lIEJOQURfUkZfUlhfU0hVVERPV05fREVMQVlFRAk3CiAKIHN0cnVjdCBibmFkIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAJKm5ldGRldjsKQEAgLTMwNiw4ICszMDksMTAgQEAKIGV4dGVybiB2b2lkIGJuYWRfZGltX3RpbWVyX3N0YXJ0KHN0cnVjdCBibmFkICpibmFkKTsKIAogLyogU3RhdGlzdGljcyAqLwotZXh0ZXJuIHZvaWQgYm5hZF9uZXRkZXZfcXN0YXRzX2ZpbGwoc3RydWN0IGJuYWQgKmJuYWQsIHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqc3RhdHMpOwotZXh0ZXJuIHZvaWQgYm5hZF9uZXRkZXZfaHdzdGF0c19maWxsKHN0cnVjdCBibmFkICpibmFkLCBzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKnN0YXRzKTsKK2V4dGVybiB2b2lkIGJuYWRfbmV0ZGV2X3FzdGF0c19maWxsKHN0cnVjdCBibmFkICpibmFkLAorCQlzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKnN0YXRzKTsKK2V4dGVybiB2b2lkIGJuYWRfbmV0ZGV2X2h3c3RhdHNfZmlsbChzdHJ1Y3QgYm5hZCAqYm5hZCwKKwkJc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpzdGF0cyk7CiAKIC8qKgogICogTUFDUk9TCkBAIC0zMjAsOSArMzI1LDExIEBACiAKICNkZWZpbmUgYm5hZF9lbmFibGVfcnhfaXJxX3Vuc2FmZShfY2NiKQkJCVwKIHsJCQkJCQkJXAotCWJuYV9pYl9jb2FsZXNjaW5nX3RpbWVyX3NldCgoX2NjYiktPmlfZGJlbGwsCVwKLQkJKF9jY2IpLT5yeF9jb2FsZXNjaW5nX3RpbWVvKTsJCVwKLQlibmFfaWJfYWNrKChfY2NiKS0+aV9kYmVsbCwgMCk7CQkJXAorCWlmIChsaWtlbHkodGVzdF9iaXQoQk5BRF9SWFFfU1RBUlRFRCwgJmNjYi0+cmNiWzBdLT5mbGFncykpKSB7XAorCQlibmFfaWJfY29hbGVzY2luZ190aW1lcl9zZXQoKF9jY2IpLT5pX2RiZWxsLAlcCisJCQkoX2NjYiktPnJ4X2NvYWxlc2NpbmdfdGltZW8pOwkJXAorCQlibmFfaWJfYWNrKChfY2NiKS0+aV9kYmVsbCwgMCk7CQkJXAorCX0JCQkJCQkJXAogfQogCiAjZGVmaW5lIGJuYWRfZGltX3RpbWVyX3J1bm5pbmcoX2JuYWQpCQkJCVwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JuYS9ibmFkX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2JuYS9ibmFkX2V0aHRvb2wuYwppbmRleCAxMWZhMmVhLi45OWJlNWFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibmEvYm5hZF9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvYm5hL2JuYWRfZXRodG9vbC5jCkBAIC02OCw2ICs2OCw3IEBACiAKIAkibmV0aWZfcXVldWVfc3RvcCIsCiAJIm5ldGlmX3F1ZXVlX3dha2V1cCIsCisJIm5ldGlmX3F1ZXVlX3N0b3BwZWQiLAogCSJ0c280IiwKIAkidHNvNiIsCiAJInRzb19lcnIiLApAQCAtMzMwLDEwICszMzEsNiBAQAogCiAJQk5BRF9HRVRfUkVHKFBDSUVfTUlTQ19SRUcpOwogCi0JQk5BRF9HRVRfUkVHKEhPU1RfU0VNMF9SRUcpOwotCUJOQURfR0VUX1JFRyhIT1NUX1NFTTFfUkVHKTsKLQlCTkFEX0dFVF9SRUcoSE9TVF9TRU0yX1JFRyk7Ci0JQk5BRF9HRVRfUkVHKEhPU1RfU0VNM19SRUcpOwogCUJOQURfR0VUX1JFRyhIT1NUX1NFTTBfSU5GT19SRUcpOwogCUJOQURfR0VUX1JFRyhIT1NUX1NFTTFfSU5GT19SRUcpOwogCUJOQURfR0VUX1JFRyhIT1NUX1NFTTJfSU5GT19SRUcpOwpAQCAtMTE4NCw2ICsxMTgxLDkgQEAKIAogCWJpID0gc2l6ZW9mKCpuZXRfc3RhdHM2NCkgLyBzaXplb2YodTY0KTsKIAorCS8qIEdldCBuZXRpZl9xdWV1ZV9zdG9wcGVkIGZyb20gc3RhY2sgKi8KKwlibmFkLT5zdGF0cy5kcnZfc3RhdHMubmV0aWZfcXVldWVfc3RvcHBlZCA9IG5ldGlmX3F1ZXVlX3N0b3BwZWQobmV0ZGV2KTsKKwogCS8qIEZpbGwgZHJpdmVyIHN0YXRzIGludG8gZXRodG9vbCBidWZmZXJzICovCiAJc3RhdHM2NCA9ICh1NjQgKikmYm5hZC0+c3RhdHMuZHJ2X3N0YXRzOwogCWZvciAoaSA9IDA7IGkgPCBzaXplb2Yoc3RydWN0IGJuYWRfZHJ2X3N0YXRzKSAvIHNpemVvZih1NjQpOyBpKyspCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyLmMgYi9kcml2ZXJzL25ldC9ibngyLmMKaW5kZXggMDYyNjAwYi4uZGY5OWVkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54Mi5jCisrKyBiL2RyaXZlcnMvbmV0L2JueDIuYwpAQCAtNTYsMTEgKzU2LDExIEBACiAjaW5jbHVkZSAiYm54Ml9mdy5oIgogCiAjZGVmaW5lIERSVl9NT0RVTEVfTkFNRQkJImJueDIiCi0jZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTgkiMi4wLjE4IgotI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUJIk9jdCA3LCAyMDEwIgotI2RlZmluZSBGV19NSVBTX0ZJTEVfMDYJCSJibngyL2JueDItbWlwcy0wNi02LjAuMTUuZnciCisjZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTgkiMi4wLjIxIgorI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUJIkRlYyAyMywgMjAxMCIKKyNkZWZpbmUgRldfTUlQU19GSUxFXzA2CQkiYm54Mi9ibngyLW1pcHMtMDYtNi4yLjEuZnciCiAjZGVmaW5lIEZXX1JWMlBfRklMRV8wNgkJImJueDIvYm54Mi1ydjJwLTA2LTYuMC4xNS5mdyIKLSNkZWZpbmUgRldfTUlQU19GSUxFXzA5CQkiYm54Mi9ibngyLW1pcHMtMDktNi4wLjE3LmZ3IgorI2RlZmluZSBGV19NSVBTX0ZJTEVfMDkJCSJibngyL2JueDItbWlwcy0wOS02LjIuMS5mdyIKICNkZWZpbmUgRldfUlYyUF9GSUxFXzA5X0F4CSJibngyL2JueDItcnYycC0wOWF4LTYuMC4xNy5mdyIKICNkZWZpbmUgRldfUlYyUF9GSUxFXzA5CQkiYm54Mi9ibngyLXJ2MnAtMDktNi4wLjE3LmZ3IgogCkBAIC03NjYsMTMgKzc2NiwxMCBAQAogCQlpbnQgajsKIAogCQlyeHItPnJ4X2J1Zl9yaW5nID0KLQkJCXZtYWxsb2MoU1dfUlhCRF9SSU5HX1NJWkUgKiBicC0+cnhfbWF4X3JpbmcpOworCQkJdnphbGxvYyhTV19SWEJEX1JJTkdfU0laRSAqIGJwLT5yeF9tYXhfcmluZyk7CiAJCWlmIChyeHItPnJ4X2J1Zl9yaW5nID09IE5VTEwpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAotCQltZW1zZXQocnhyLT5yeF9idWZfcmluZywgMCwKLQkJICAgICAgIFNXX1JYQkRfUklOR19TSVpFICogYnAtPnJ4X21heF9yaW5nKTsKLQogCQlmb3IgKGogPSAwOyBqIDwgYnAtPnJ4X21heF9yaW5nOyBqKyspIHsKIAkJCXJ4ci0+cnhfZGVzY19yaW5nW2pdID0KIAkJCQlkbWFfYWxsb2NfY29oZXJlbnQoJmJwLT5wZGV2LT5kZXYsCkBAIC03ODUsMTMgKzc4MiwxMSBAQAogCQl9CiAKIAkJaWYgKGJwLT5yeF9wZ19yaW5nX3NpemUpIHsKLQkJCXJ4ci0+cnhfcGdfcmluZyA9IHZtYWxsb2MoU1dfUlhQR19SSU5HX1NJWkUgKgorCQkJcnhyLT5yeF9wZ19yaW5nID0gdnphbGxvYyhTV19SWFBHX1JJTkdfU0laRSAqCiAJCQkJCQkgIGJwLT5yeF9tYXhfcGdfcmluZyk7CiAJCQlpZiAocnhyLT5yeF9wZ19yaW5nID09IE5VTEwpCiAJCQkJcmV0dXJuIC1FTk9NRU07CiAKLQkJCW1lbXNldChyeHItPnJ4X3BnX3JpbmcsIDAsIFNXX1JYUEdfUklOR19TSVpFICoKLQkJCSAgICAgICBicC0+cnhfbWF4X3BnX3JpbmcpOwogCQl9CiAKIAkJZm9yIChqID0gMDsgaiA8IGJwLT5yeF9tYXhfcGdfcmluZzsgaisrKSB7CkBAIC00NjQ1LDEzICs0NjQwLDI4IEBACiAKIAkvKiBXYWl0IGZvciB0aGUgY3VycmVudCBQQ0kgdHJhbnNhY3Rpb24gdG8gY29tcGxldGUgYmVmb3JlCiAJICogaXNzdWluZyBhIHJlc2V0LiAqLwotCVJFR19XUihicCwgQk5YMl9NSVNDX0VOQUJMRV9DTFJfQklUUywKLQkgICAgICAgQk5YMl9NSVNDX0VOQUJMRV9DTFJfQklUU19UWF9ETUFfRU5BQkxFIHwKLQkgICAgICAgQk5YMl9NSVNDX0VOQUJMRV9DTFJfQklUU19ETUFfRU5HSU5FX0VOQUJMRSB8Ci0JICAgICAgIEJOWDJfTUlTQ19FTkFCTEVfQ0xSX0JJVFNfUlhfRE1BX0VOQUJMRSB8Ci0JICAgICAgIEJOWDJfTUlTQ19FTkFCTEVfQ0xSX0JJVFNfSE9TVF9DT0FMRVNDRV9FTkFCTEUpOwotCXZhbCA9IFJFR19SRChicCwgQk5YMl9NSVNDX0VOQUJMRV9DTFJfQklUUyk7Ci0JdWRlbGF5KDUpOworCWlmICgoQ0hJUF9OVU0oYnApID09IENISVBfTlVNXzU3MDYpIHx8CisJICAgIChDSElQX05VTShicCkgPT0gQ0hJUF9OVU1fNTcwOCkpIHsKKwkJUkVHX1dSKGJwLCBCTlgyX01JU0NfRU5BQkxFX0NMUl9CSVRTLAorCQkgICAgICAgQk5YMl9NSVNDX0VOQUJMRV9DTFJfQklUU19UWF9ETUFfRU5BQkxFIHwKKwkJICAgICAgIEJOWDJfTUlTQ19FTkFCTEVfQ0xSX0JJVFNfRE1BX0VOR0lORV9FTkFCTEUgfAorCQkgICAgICAgQk5YMl9NSVNDX0VOQUJMRV9DTFJfQklUU19SWF9ETUFfRU5BQkxFIHwKKwkJICAgICAgIEJOWDJfTUlTQ19FTkFCTEVfQ0xSX0JJVFNfSE9TVF9DT0FMRVNDRV9FTkFCTEUpOworCQl2YWwgPSBSRUdfUkQoYnAsIEJOWDJfTUlTQ19FTkFCTEVfQ0xSX0JJVFMpOworCQl1ZGVsYXkoNSk7CisJfSBlbHNlIHsgIC8qIDU3MDkgKi8KKwkJdmFsID0gUkVHX1JEKGJwLCBCTlgyX01JU0NfTkVXX0NPUkVfQ1RMKTsKKwkJdmFsICY9IH5CTlgyX01JU0NfTkVXX0NPUkVfQ1RMX0RNQV9FTkFCTEU7CisJCVJFR19XUihicCwgQk5YMl9NSVNDX05FV19DT1JFX0NUTCwgdmFsKTsKKwkJdmFsID0gUkVHX1JEKGJwLCBCTlgyX01JU0NfTkVXX0NPUkVfQ1RMKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKKwkJCW1zbGVlcCgxKTsKKwkJCXZhbCA9IFJFR19SRChicCwgQk5YMl9QQ0lDRkdfREVWSUNFX0NPTlRST0wpOworCQkJaWYgKCEodmFsICYgQk5YMl9QQ0lDRkdfREVWSUNFX1NUQVRVU19OT19QRU5EKSkKKwkJCQlicmVhazsKKwkJfQorCX0KIAogCS8qIFdhaXQgZm9yIHRoZSBmaXJtd2FyZSB0byB0ZWxsIHVzIGl0IGlzIG9rIHRvIGlzc3VlIGEgcmVzZXQuICovCiAJYm54Ml9md19zeW5jKGJwLCBCTlgyX0RSVl9NU0dfREFUQV9XQUlUMCB8IHJlc2V0X2NvZGUsIDEsIDEpOwpAQCAtNDY3Myw3ICs0NjgzLDcgQEAKIAkJdmFsID0gQk5YMl9QQ0lDRkdfTUlTQ19DT05GSUdfUkVHX1dJTkRPV19FTkEgfAogCQkgICAgICBCTlgyX1BDSUNGR19NSVNDX0NPTkZJR19UQVJHRVRfTUJfV09SRF9TV0FQOwogCi0JCXBjaV93cml0ZV9jb25maWdfZHdvcmQoYnAtPnBkZXYsIEJOWDJfUENJQ0ZHX01JU0NfQ09ORklHLCB2YWwpOworCQlSRUdfV1IoYnAsIEJOWDJfUENJQ0ZHX01JU0NfQ09ORklHLCB2YWwpOwogCiAJfSBlbHNlIHsKIAkJdmFsID0gQk5YMl9QQ0lDRkdfTUlTQ19DT05GSUdfQ09SRV9SU1RfUkVRIHwKQEAgLTYwODYsNyArNjA5Niw3IEBACiB9CiAKIHN0YXRpYyB2b2lkCi1ibngyX2ZyZWVfaXJxKHN0cnVjdCBibngyICpicCkKK19fYm54Ml9mcmVlX2lycShzdHJ1Y3QgYm54MiAqYnApCiB7CiAJc3RydWN0IGJueDJfaXJxICppcnE7CiAJaW50IGk7CkBAIC02MDk3LDYgKzYxMDcsMTMgQEAKIAkJCWZyZWVfaXJxKGlycS0+dmVjdG9yLCAmYnAtPmJueDJfbmFwaVtpXSk7CiAJCWlycS0+cmVxdWVzdGVkID0gMDsKIAl9Cit9CisKK3N0YXRpYyB2b2lkCitibngyX2ZyZWVfaXJxKHN0cnVjdCBibngyICpicCkKK3sKKworCV9fYm54Ml9mcmVlX2lycShicCk7CiAJaWYgKGJwLT5mbGFncyAmIEJOWDJfRkxBR19VU0lOR19NU0kpCiAJCXBjaV9kaXNhYmxlX21zaShicC0+cGRldik7CiAJZWxzZSBpZiAoYnAtPmZsYWdzICYgQk5YMl9GTEFHX1VTSU5HX01TSVgpCkBAIC02ODAxLDI4ICs2ODE4LDMwIEBACiAJdTMyICpwID0gX3AsIGksIG9mZnNldDsKIAl1OCAqb3JpZ19wID0gX3A7CiAJc3RydWN0IGJueDIgKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1MzIgcmVnX2JvdW5kYXJpZXNbXSA9IHsgMHgwMDAwLCAweDAwOTgsIDB4MDQwMCwgMHgwNDVjLAotCQkJCSAweDA4MDAsIDB4MDg4MCwgMHgwYzAwLCAweDBjMTAsCi0JCQkJIDB4MGMzMCwgMHgwZDA4LCAweDEwMDAsIDB4MTAxYywKLQkJCQkgMHgxMDQwLCAweDEwNDgsIDB4MTA4MCwgMHgxMGE0LAotCQkJCSAweDE0MDAsIDB4MTQ5MCwgMHgxNDk4LCAweDE0ZjAsCi0JCQkJIDB4MTUwMCwgMHgxNTVjLCAweDE1ODAsIDB4MTVkYywKLQkJCQkgMHgxNjAwLCAweDE2NTgsIDB4MTY4MCwgMHgxNmQ4LAotCQkJCSAweDE4MDAsIDB4MTgyMCwgMHgxODQwLCAweDE4NTQsCi0JCQkJIDB4MTg4MCwgMHgxODk0LCAweDE5MDAsIDB4MTk4NCwKLQkJCQkgMHgxYzAwLCAweDFjMGMsIDB4MWM0MCwgMHgxYzU0LAotCQkJCSAweDFjODAsIDB4MWM5NCwgMHgxZDAwLCAweDFkODQsCi0JCQkJIDB4MjAwMCwgMHgyMDMwLCAweDIzYzAsIDB4MjQwMCwKLQkJCQkgMHgyODAwLCAweDI4MjAsIDB4MjgzMCwgMHgyODUwLAotCQkJCSAweDJiNDAsIDB4MmMxMCwgMHgyZmMwLCAweDMwNTgsCi0JCQkJIDB4M2MwMCwgMHgzYzk0LCAweDQwMDAsIDB4NDAxMCwKLQkJCQkgMHg0MDgwLCAweDQwOTAsIDB4NDNjMCwgMHg0NDU4LAotCQkJCSAweDRjMDAsIDB4NGMxOCwgMHg0YzQwLCAweDRjNTQsCi0JCQkJIDB4NGZjMCwgMHg1MDEwLCAweDUzYzAsIDB4NTQ0NCwKLQkJCQkgMHg1YzAwLCAweDVjMTgsIDB4NWM4MCwgMHg1YzkwLAotCQkJCSAweDVmYzAsIDB4NjAwMCwgMHg2NDAwLCAweDY0MjgsCi0JCQkJIDB4NjgwMCwgMHg2ODQ4LCAweDY4NGMsIDB4Njg2MCwKLQkJCQkgMHg2ODg4LCAweDY5MTAsIDB4ODAwMCB9OworCXN0YXRpYyBjb25zdCB1MzIgcmVnX2JvdW5kYXJpZXNbXSA9IHsKKwkJMHgwMDAwLCAweDAwOTgsIDB4MDQwMCwgMHgwNDVjLAorCQkweDA4MDAsIDB4MDg4MCwgMHgwYzAwLCAweDBjMTAsCisJCTB4MGMzMCwgMHgwZDA4LCAweDEwMDAsIDB4MTAxYywKKwkJMHgxMDQwLCAweDEwNDgsIDB4MTA4MCwgMHgxMGE0LAorCQkweDE0MDAsIDB4MTQ5MCwgMHgxNDk4LCAweDE0ZjAsCisJCTB4MTUwMCwgMHgxNTVjLCAweDE1ODAsIDB4MTVkYywKKwkJMHgxNjAwLCAweDE2NTgsIDB4MTY4MCwgMHgxNmQ4LAorCQkweDE4MDAsIDB4MTgyMCwgMHgxODQwLCAweDE4NTQsCisJCTB4MTg4MCwgMHgxODk0LCAweDE5MDAsIDB4MTk4NCwKKwkJMHgxYzAwLCAweDFjMGMsIDB4MWM0MCwgMHgxYzU0LAorCQkweDFjODAsIDB4MWM5NCwgMHgxZDAwLCAweDFkODQsCisJCTB4MjAwMCwgMHgyMDMwLCAweDIzYzAsIDB4MjQwMCwKKwkJMHgyODAwLCAweDI4MjAsIDB4MjgzMCwgMHgyODUwLAorCQkweDJiNDAsIDB4MmMxMCwgMHgyZmMwLCAweDMwNTgsCisJCTB4M2MwMCwgMHgzYzk0LCAweDQwMDAsIDB4NDAxMCwKKwkJMHg0MDgwLCAweDQwOTAsIDB4NDNjMCwgMHg0NDU4LAorCQkweDRjMDAsIDB4NGMxOCwgMHg0YzQwLCAweDRjNTQsCisJCTB4NGZjMCwgMHg1MDEwLCAweDUzYzAsIDB4NTQ0NCwKKwkJMHg1YzAwLCAweDVjMTgsIDB4NWM4MCwgMHg1YzkwLAorCQkweDVmYzAsIDB4NjAwMCwgMHg2NDAwLCAweDY0MjgsCisJCTB4NjgwMCwgMHg2ODQ4LCAweDY4NGMsIDB4Njg2MCwKKwkJMHg2ODg4LCAweDY5MTAsIDB4ODAwMAorCX07CiAKIAlyZWdzLT52ZXJzaW9uID0gMDsKIApAQCAtNzA4MCw2ICs3MDk5LDcgQEAKIAogCQlibngyX25ldGlmX3N0b3AoYnAsIHRydWUpOwogCQlibngyX3Jlc2V0X2NoaXAoYnAsIEJOWDJfRFJWX01TR19DT0RFX1JFU0VUKTsKKwkJX19ibngyX2ZyZWVfaXJxKGJwKTsKIAkJYm54Ml9mcmVlX3NrYnMoYnApOwogCQlibngyX2ZyZWVfbWVtKGJwKTsKIAl9CkBAIC03MDkyLDYgKzcxMTIsOSBAQAogCiAJCXJjID0gYm54Ml9hbGxvY19tZW0oYnApOwogCQlpZiAoIXJjKQorCQkJcmMgPSBibngyX3JlcXVlc3RfaXJxKGJwKTsKKworCQlpZiAoIXJjKQogCQkJcmMgPSBibngyX2luaXRfbmljKGJwLCAwKTsKIAogCQlpZiAocmMpIHsKQEAgLTc5MTQsMTUgKzc5MzcsMTUgQEAKIAkJZ290byBlcnJfb3V0X3JlbGVhc2U7CiAJfQogCisJYm54Ml9zZXRfcG93ZXJfc3RhdGUoYnAsIFBDSV9EMCk7CisKIAkvKiBDb25maWd1cmUgYnl0ZSBzd2FwIGFuZCBlbmFibGUgd3JpdGUgdG8gdGhlIHJlZ193aW5kb3cgcmVnaXN0ZXJzLgogCSAqIFJlbHkgb24gQ1BVIHRvIGRvIHRhcmdldCBieXRlIHN3YXBwaW5nIG9uIGJpZyBlbmRpYW4gc3lzdGVtcwogCSAqIFRoZSBjaGlwJ3MgdGFyZ2V0IGFjY2VzcyBzd2FwcGluZyB3aWxsIG5vdCBzd2FwIGFsbCBhY2Nlc3NlcwogCSAqLwotCXBjaV93cml0ZV9jb25maWdfZHdvcmQoYnAtPnBkZXYsIEJOWDJfUENJQ0ZHX01JU0NfQ09ORklHLAotCQkJICAgICAgIEJOWDJfUENJQ0ZHX01JU0NfQ09ORklHX1JFR19XSU5ET1dfRU5BIHwKLQkJCSAgICAgICBCTlgyX1BDSUNGR19NSVNDX0NPTkZJR19UQVJHRVRfTUJfV09SRF9TV0FQKTsKLQotCWJueDJfc2V0X3Bvd2VyX3N0YXRlKGJwLCBQQ0lfRDApOworCVJFR19XUihicCwgQk5YMl9QQ0lDRkdfTUlTQ19DT05GSUcsCisJCSAgIEJOWDJfUENJQ0ZHX01JU0NfQ09ORklHX1JFR19XSU5ET1dfRU5BIHwKKwkJICAgQk5YMl9QQ0lDRkdfTUlTQ19DT05GSUdfVEFSR0VUX01CX1dPUkRfU1dBUCk7CiAKIAlicC0+Y2hpcF9pZCA9IFJFR19SRChicCwgQk5YMl9NSVNDX0lEKTsKIApAQCAtODM4Myw4ICs4NDA2LDYgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBibngyICpicCA9IG5ldGRldl9wcml2KGRldik7CiAKLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwotCiAJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAogCWlmIChicC0+bWlwc19maXJtd2FyZSkKQEAgLTg0MjEsNyArODQ0Miw3IEBACiAJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCiAJCXJldHVybiAwOwogCi0JZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwljYW5jZWxfd29ya19zeW5jKCZicC0+cmVzZXRfdGFzayk7CiAJYm54Ml9uZXRpZl9zdG9wKGJwLCB0cnVlKTsKIAluZXRpZl9kZXZpY2VfZGV0YWNoKGRldik7CiAJZGVsX3RpbWVyX3N5bmMoJmJwLT50aW1lcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyLmggYi9kcml2ZXJzL25ldC9ibngyLmgKaW5kZXggYmY0YzM0Mi4uNTQ4OGEyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54Mi5oCisrKyBiL2RyaXZlcnMvbmV0L2JueDIuaApAQCAtNDYxLDYgKzQ2MSw4IEBACiAjZGVmaW5lIEJOWDJfUENJQ0ZHX01BSUxCT1hfUVVFVUVfQUREUgkJCTB4MDAwMDAwOTAKICNkZWZpbmUgQk5YMl9QQ0lDRkdfTUFJTEJPWF9RVUVVRV9EQVRBCQkJMHgwMDAwMDA5NAogCisjZGVmaW5lIEJOWDJfUENJQ0ZHX0RFVklDRV9DT05UUk9MCQkJMHgwMDAwMDBiNAorI2RlZmluZSBCTlgyX1BDSUNGR19ERVZJQ0VfU1RBVFVTX05PX1BFTkQJCSAoKDFMPDw1KTw8MTYpCiAKIC8qCiAgKiAgcGNpX3JlZyBkZWZpbml0aW9uCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2JueDJ4L01ha2VmaWxlCmluZGV4IDA4NGFmY2UuLmJiODNhMjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDJ4L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L2JueDJ4L01ha2VmaWxlCkBAIC00LDQgKzQsNCBAQAogCiBvYmotJChDT05GSUdfQk5YMlgpICs9IGJueDJ4Lm8KIAotYm54Mngtb2JqcyA6PSBibngyeF9tYWluLm8gYm54MnhfbGluay5vIGJueDJ4X2Ntbi5vIGJueDJ4X2V0aHRvb2wubyBibngyeF9zdGF0cy5vCitibngyeC1vYmpzIDo9IGJueDJ4X21haW4ubyBibngyeF9saW5rLm8gYm54MnhfY21uLm8gYm54MnhfZXRodG9vbC5vIGJueDJ4X3N0YXRzLm8gYm54MnhfZGNiLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4LmggYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeC5oCmluZGV4IGQyNTU0MjguLjc3ZDZjOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4LmgKKysrIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnguaApAQCAtMTMsNiArMTMsOCBAQAogCiAjaWZuZGVmIEJOWDJYX0gKICNkZWZpbmUgQk5YMlhfSAorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKIC8qIGNvbXBpbGF0aW9uIHRpbWUgZmxhZ3MgKi8KIApAQCAtMjAsMTUgKzIyLDE3IEBACiAgKiAoeW91IHdpbGwgbmVlZCB0byByZWJvb3QgYWZ0ZXJ3YXJkcykgKi8KIC8qICNkZWZpbmUgQk5YMlhfU1RPUF9PTl9FUlJPUiAqLwogCi0jZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTiAgICAgICIxLjYwLjAxLTAiCi0jZGVmaW5lIERSVl9NT0RVTEVfUkVMREFURSAgICAgICIyMDEwLzExLzEyIgorI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04gICAgICAiMS42Mi4wMC0zIgorI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUgICAgICAiMjAxMC8xMi8yMSIKICNkZWZpbmUgQk5YMlhfQkNfVkVSICAgICAgICAgICAgMHgwNDAyMDAKIAogI2RlZmluZSBCTlgyWF9NVUxUSV9RVUVVRQogCiAjZGVmaW5lIEJOWDJYX05FV19OQVBJCiAKLQorI2lmIGRlZmluZWQoQ09ORklHX0RDQikKKyNkZWZpbmUgQkNNX0RDQgorI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfQ05JQykgfHwgZGVmaW5lZChDT05GSUdfQ05JQ19NT0RVTEUpCiAjZGVmaW5lIEJDTV9DTklDIDEKICNpbmNsdWRlICIuLi9jbmljX2lmLmgiCkBAIC00OCw2ICs1Miw3IEBACiAjaW5jbHVkZSAiYm54MnhfZndfZGVmcy5oIgogI2luY2x1ZGUgImJueDJ4X2hzaS5oIgogI2luY2x1ZGUgImJueDJ4X2xpbmsuaCIKKyNpbmNsdWRlICJibngyeF9kY2IuaCIKICNpbmNsdWRlICJibngyeF9zdGF0cy5oIgogCiAvKiBlcnJvci9kZWJ1ZyBwcmludHMgKi8KQEAgLTE5OSwxMCArMjA0LDI1IEBACiAvKiBFUSBjb21wbGV0aW9ucyAqLwogI2RlZmluZSBIQ19TUF9JTkRFWF9FUV9DT05TCQkJNwogCisvKiBGQ29FIEwyIGNvbm5lY3Rpb24gY29tcGxldGlvbnMgKi8KKyNkZWZpbmUgSENfU1BfSU5ERVhfRVRIX0ZDT0VfVFhfQ1FfQ09OUwkJNgorI2RlZmluZSBIQ19TUF9JTkRFWF9FVEhfRkNPRV9SWF9DUV9DT05TCQk0CiAvKiBpU0NTSSBMMiAqLwogI2RlZmluZSBIQ19TUF9JTkRFWF9FVEhfSVNDU0lfQ1FfQ09OUwkJNQogI2RlZmluZSBIQ19TUF9JTkRFWF9FVEhfSVNDU0lfUlhfQ1FfQ09OUwkxCiAKKy8qIFNwZWNpYWwgY2xpZW50cyBwYXJhbWV0ZXJzICovCisKKy8qIFNCIGluZGljZXMgKi8KKy8qIEZDb0UgTDIgKi8KKyNkZWZpbmUgQk5YMlhfRkNPRV9MMl9SWF9JTkRFWCBcCisJKCZicC0+ZGVmX3N0YXR1c19ibGstPnNwX3NiLlwKKwlpbmRleF92YWx1ZXNbSENfU1BfSU5ERVhfRVRIX0ZDT0VfUlhfQ1FfQ09OU10pCisKKyNkZWZpbmUgQk5YMlhfRkNPRV9MMl9UWF9JTkRFWCBcCisJKCZicC0+ZGVmX3N0YXR1c19ibGstPnNwX3NiLlwKKwlpbmRleF92YWx1ZXNbSENfU1BfSU5ERVhfRVRIX0ZDT0VfVFhfQ1FfQ09OU10pCisKIC8qKgogICogIENJRHMgYW5kIENMSURzOgogICogIENMSURzIGJlbG93IGlzIGEgQ0xJRCBmb3IgZnVuYyAwLCB0aGVuIHRoZSBDTElEIGZvciBvdGhlcgpAQCAtMjE1LDEyICsyMzUsMTkgQEAKICNkZWZpbmUgQk5YMlhfSVNDU0lfRVRIX0NMX0lECQkxNwogI2RlZmluZSBCTlgyWF9JU0NTSV9FVEhfQ0lECQkxNwogCisvKiBGQ29FIEwyICovCisjZGVmaW5lIEJOWDJYX0ZDT0VfRVRIX0NMX0lECQkxOAorI2RlZmluZSBCTlgyWF9GQ09FX0VUSF9DSUQJCTE4CisKIC8qKiBBZGRpdGlvbmFsIHJpbmdzIGJ1ZGdldGluZyAqLwogI2lmZGVmIEJDTV9DTklDCiAjZGVmaW5lIENOSUNfQ09OVEVYVF9VU0UJCTEKKyNkZWZpbmUgRkNPRV9DT05URVhUX1VTRQkJMQogI2Vsc2UKICNkZWZpbmUgQ05JQ19DT05URVhUX1VTRQkJMAorI2RlZmluZSBGQ09FX0NPTlRFWFRfVVNFCQkwCiAjZW5kaWYgLyogQkNNX0NOSUMgKi8KKyNkZWZpbmUgTk9ORV9FVEhfQ09OVEVYVF9VU0UJKEZDT0VfQ09OVEVYVF9VU0UpCiAKICNkZWZpbmUgQUVVX0lOX0FUVE5fQklUU19QWFBQQ0lDTE9DS0NMSUVOVF9QQVJJVFlfRVJST1IgXAogCUFFVV9JTlBVVFNfQVRUTl9CSVRTX1BYUFBDSUNMT0NLQ0xJRU5UX1BBUklUWV9FUlJPUgpAQCAtNDAxLDYgKzQyOCwxNyBAQAogfTsKIAogI2RlZmluZSBibngyeF9mcChicCwgbnIsIHZhcikJCShicC0+ZnBbbnJdLnZhcikKKyNpZmRlZiBCQ01fQ05JQworLyogRkNvRSBMMiBgZmFzdHBhdGgnIGlzIHJpZ2h0IGFmdGVyIHRoZSBldGggZW50cmllcyAqLworI2RlZmluZSBGQ09FX0lEWAkJCUJOWDJYX05VTV9FVEhfUVVFVUVTKGJwKQorI2RlZmluZSBibngyeF9mY29lX2ZwKGJwKQkJKCZicC0+ZnBbRkNPRV9JRFhdKQorI2RlZmluZSBibngyeF9mY29lKGJwLCB2YXIpCQkoYm54MnhfZmNvZV9mcChicCktPnZhcikKKyNkZWZpbmUgSVNfRkNPRV9GUChmcCkJCQkoZnAtPmluZGV4ID09IEZDT0VfSURYKQorI2RlZmluZSBJU19GQ09FX0lEWChpZHgpCQkoKGlkeCkgPT0gRkNPRV9JRFgpCisjZWxzZQorI2RlZmluZSBJU19GQ09FX0ZQKGZwKQkJZmFsc2UKKyNkZWZpbmUgSVNfRkNPRV9JRFgoaWR4KQlmYWxzZQorI2VuZGlmCiAKIAogLyogTUMgaHNpICovCkBAIC02NjksOCArNzA3LDE0IEBACiBlbnVtIHsKIAlDQU1fRVRIX0xJTkUgPSAwLAogCUNBTV9JU0NTSV9FVEhfTElORSwKLQlDQU1fTUFYX1BGX0xJTkUgPSBDQU1fSVNDU0lfRVRIX0xJTkUKKwlDQU1fRklQX0VUSF9MSU5FLAorCUNBTV9GSVBfTUNBU1RfTElORSwKKwlDQU1fTUFYX1BGX0xJTkUgPSBDQU1fRklQX01DQVNUX0xJTkUKIH07CisvKiBudW1iZXIgb2YgTUFDcyBwZXIgZnVuY3Rpb24gaW4gTklHIG1lbW9yeSAtIHVzZWQgZm9yIFNJIG1vZGUgKi8KKyNkZWZpbmUgTklHX0xMSF9GVU5DX01FTV9TSVpFCQkxNgorLyogbnVtYmVyIG9mIGVudHJpZXMgaW4gTklHX1JFR19MTEhYX0ZVTkNfTUVNICovCisjZGVmaW5lIE5JR19MTEhfRlVOQ19NRU1fTUFYX09GRlNFVAk4CiAKICNkZWZpbmUgQk5YMlhfVkZfSURfSU5WQUxJRAkweEZGCiAKQEAgLTcxMCw2ICs3NTQsMTQgQEAKICAqLwogI2RlZmluZSBMMl9GUF9DT1VOVChjaWRfY250KQkoKGNpZF9jbnQpIC0gQ05JQ19DT05URVhUX1VTRSkKIAorLyoKKyAqIFRoZSBudW1iZXIgb2YgRlAtU0IgYWxsb2NhdGVkIGJ5IHRoZSBkcml2ZXIgPT0gbWF4IG51bWJlciBvZiByZWd1bGFyIEwyCisgKiBxdWV1ZXMgKyAxIGZvciB0aGUgQ05JQyB3aGljaCBhbHNvIGNvbnN1bWVzIGFuIEZQLVNCCisgKi8KKyNkZWZpbmUgRlBfU0JfQ09VTlQoY2lkX2NudCkJKChjaWRfY250KSAtIEZDT0VfQ09OVEVYVF9VU0UpCisjZGVmaW5lIE5VTV9JR1VfU0JfUkVRVUlSRUQoY2lkX2NudCkgXAorCQkJCShGUF9TQl9DT1VOVChjaWRfY250KSAtIE5PTkVfRVRIX0NPTlRFWFRfVVNFKQorCiB1bmlvbiBjZHVfY29udGV4dCB7CiAJc3RydWN0IGV0aF9jb250ZXh0IGV0aDsKIAljaGFyIHBhZFsxMDI0XTsKQEAgLTcyMiw3ICs3NzQsOCBAQAogCiAjaWZkZWYgQkNNX0NOSUMKICNkZWZpbmUgQ05JQ19JU0NTSV9DSURfTUFYCTI1NgotI2RlZmluZSBDTklDX0NJRF9NQVgJCShDTklDX0lTQ1NJX0NJRF9NQVgpCisjZGVmaW5lIENOSUNfRkNPRV9DSURfTUFYCTIwNDgKKyNkZWZpbmUgQ05JQ19DSURfTUFYCQkoQ05JQ19JU0NTSV9DSURfTUFYICsgQ05JQ19GQ09FX0NJRF9NQVgpCiAjZGVmaW5lIENOSUNfSUxUX0xJTkVTCQlESVZfUk9VTkRfVVAoQ05JQ19DSURfTUFYLCBJTFRfUEFHRV9DSURTKQogI2VuZGlmCiAKQEAgLTc3MCw2ICs4MjMsOCBAQAogCiAJdTMyCQkJCXdiX2NvbXA7CiAJdTMyCQkJCXdiX2RhdGFbNF07CisJLyogcGZjIGNvbmZpZ3VyYXRpb24gZm9yIERDQlggcmFtcm9kICovCisJc3RydWN0IGZsb3dfY29udHJvbF9jb25maWd1cmF0aW9uIHBmY19jb25maWc7CiB9OwogCiAjZGVmaW5lIGJueDJ4X3NwKGJwLCB2YXIpCQkoJmJwLT5zbG93cGF0aC0+dmFyKQpAQCAtOTE4LDYgKzk3MywxMCBAQAogI2RlZmluZSBESVNBQkxFX01TSV9GTEFHCQkweDIwMAogI2RlZmluZSBCUF9OT01DUChicCkJCQkoYnAtPmZsYWdzICYgTk9fTUNQX0ZMQUcpCiAjZGVmaW5lIE1GX0ZVTkNfRElTCQkJMHgxMDAwCisjZGVmaW5lIEZDT0VfTUFDU19TRVQJCQkweDIwMDAKKyNkZWZpbmUgTk9fRkNPRV9GTEFHCQkJMHg0MDAwCisKKyNkZWZpbmUgTk9fRkNPRShicCkJCSgoYnApLT5mbGFncyAmIE5PX0ZDT0VfRkxBRykKIAogCWludAkJCXBmX251bTsJLyogYWJzb2x1dGUgUEYgbnVtYmVyICovCiAJaW50CQkJcGZpZDsJLyogcGVyLXBhdGggUEYgbnVtYmVyICovCkBAIC05NjcsNiArMTAyNiw4IEBACiAJdTE2CQkJbWZfb3Y7CiAJdTgJCQltZl9tb2RlOwogI2RlZmluZSBJU19NRihicCkJCShicC0+bWZfbW9kZSAhPSAwKQorI2RlZmluZSBJU19NRl9TSShicCkJCShicC0+bWZfbW9kZSA9PSBNVUxUSV9GVU5DVElPTl9TSSkKKyNkZWZpbmUgSVNfTUZfU0QoYnApCQkoYnAtPm1mX21vZGUgPT0gTVVMVElfRlVOQ1RJT05fU0QpCiAKIAl1OAkJCXdvbDsKIApAQCAtMTAxMCw2ICsxMDcxLDcgQEAKICNkZWZpbmUgQk5YMlhfQUNDRVBUX0FMTF9VTklDQVNUCTB4MDAwNAogI2RlZmluZSBCTlgyWF9BQ0NFUFRfQUxMX01VTFRJQ0FTVAkweDAwMDgKICNkZWZpbmUgQk5YMlhfQUNDRVBUX0JST0FEQ0FTVAkJMHgwMDEwCisjZGVmaW5lIEJOWDJYX0FDQ0VQVF9VTk1BVENIRURfVUNBU1QJMHgwMDIwCiAjZGVmaW5lIEJOWDJYX1BST01JU0NVT1VTX01PREUJCTB4MTAwMDAKIAogCXUzMgkJCXJ4X21vZGU7CkBAIC0xMDYyLDcgKzExMjQsOCBAQAogCXUxNgkJCWNuaWNfa3dxX3BlbmRpbmc7CiAJdTE2CQkJY25pY19zcHFfcGVuZGluZzsKIAlzdHJ1Y3QgbXV0ZXgJCWNuaWNfbXV0ZXg7Ci0JdTgJCQlpc2NzaV9tYWNbNl07CisJdTgJCQlpc2NzaV9tYWNbRVRIX0FMRU5dOworCXU4CQkJZmlwX21hY1tFVEhfQUxFTl07CiAjZW5kaWYKIAogCWludAkJCWRtYWVfcmVhZHk7CkBAIC0xMTIyLDYgKzExODUsMzEgQEAKIAogCWNoYXIJCQlmd192ZXJbMzJdOwogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZQkqZmlybXdhcmU7CisJLyogTExEUCBwYXJhbXMgKi8KKwlzdHJ1Y3QgYm54MnhfY29uZmlnX2xsZHBfcGFyYW1zCQlsbGRwX2NvbmZpZ19wYXJhbXM7CisKKwkvKiBEQ0Igc3VwcG9ydCBvbi9vZmYgKi8KKwl1MTYgZGNiX3N0YXRlOworI2RlZmluZSBCTlgyWF9EQ0JfU1RBVEVfT0ZGCQkJMAorI2RlZmluZSBCTlgyWF9EQ0JfU1RBVEVfT04JCQkxCisKKwkvKiBEQ0JYIGVuZ2luZSBtb2RlICovCisJaW50IGRjYnhfZW5hYmxlZDsKKyNkZWZpbmUgQk5YMlhfRENCWF9FTkFCTEVEX09GRgkJCTAKKyNkZWZpbmUgQk5YMlhfRENCWF9FTkFCTEVEX09OX05FR19PRkYJCTEKKyNkZWZpbmUgQk5YMlhfRENCWF9FTkFCTEVEX09OX05FR19PTgkJMgorI2RlZmluZSBCTlgyWF9EQ0JYX0VOQUJMRURfSU5WQUxJRAkJKC0xKQorCisJYm9vbCBkY2J4X21vZGVfdXNldDsKKworCXN0cnVjdCBibngyeF9jb25maWdfZGNieF9wYXJhbXMJCWRjYnhfY29uZmlnX3BhcmFtczsKKworCXN0cnVjdCBibngyeF9kY2J4X3BvcnRfcGFyYW1zCQlkY2J4X3BvcnRfcGFyYW1zOworCWludAkJCQkJZGNiX3ZlcnNpb247CisKKwkvKiBEQ0JYIE5lZ290YXRpb24gcmVzdWx0cyAqLworCXN0cnVjdCBkY2J4X2ZlYXR1cmVzCQkJZGNieF9sb2NhbF9mZWF0OworCXUzMgkJCQkJZGNieF9lcnJvcjsKIH07CiAKIC8qKgpAQCAtMTE1MiwxMCArMTI0MCwxNyBAQAogI2RlZmluZSBSU1NfSVBWNl9UQ1BfQ0FQCTB4MDAwOAogCiAjZGVmaW5lIEJOWDJYX05VTV9RVUVVRVMoYnApCShicC0+bnVtX3F1ZXVlcykKKyNkZWZpbmUgQk5YMlhfTlVNX0VUSF9RVUVVRVMoYnApIChCTlgyWF9OVU1fUVVFVUVTKGJwKSAtIE5PTkVfRVRIX0NPTlRFWFRfVVNFKQorCisvKiBldGh0b29sIHN0YXRpc3RpY3MgYXJlIGRpc3BsYXllZCBmb3IgYWxsIHJlZ3VsYXIgZXRoZXJuZXQgcXVldWVzIGFuZCB0aGUKKyAqIGZjb2UgTDIgcXVldWUgaWYgbm90IGRpc2FibGVkCisgKi8KKyNkZWZpbmUgQk5YMlhfTlVNX1NUQVRfUVVFVUVTKGJwKSAoTk9fRkNPRShicCkgPyBCTlgyWF9OVU1fRVRIX1FVRVVFUyhicCkgOiBcCisJCQkgICAoQk5YMlhfTlVNX0VUSF9RVUVVRVMoYnApICsgRkNPRV9DT05URVhUX1VTRSkpCisKICNkZWZpbmUgaXNfbXVsdGkoYnApCQkoQk5YMlhfTlVNX1FVRVVFUyhicCkgPiAxKQogCiAjZGVmaW5lIEJOWDJYX01BWF9RVUVVRVMoYnApCShicC0+aWd1X3NiX2NudCAtIENOSUNfQ09OVEVYVF9VU0UpCi0jZGVmaW5lIGlzX2V0aF9tdWx0aShicCkJKEJOWDJYX05VTV9FVEhfUVVFVUVTKGJwKSA+IDEpCiAKICNkZWZpbmUgUlNTX0lQVjRfQ0FQX01BU0sJCQkJCQlcCiAJVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JTU19JUFY0X0NBUEFCSUxJVFkKQEAgLTEyNDgsNiArMTM0Myw3IEBACiAJdTE2IGNsX2lkOwogCXUzMiBjaWQ7CiAJdTggcG9sbDsKKyNkZWZpbmUgQ0xJRU5UX0lTX0ZDT0UJCQkweDAxCiAjZGVmaW5lIENMSUVOVF9JU19MRUFESU5HX1JTUwkJMHgwMgogCXU4IGZsYWdzOwogfTsKQEAgLTEyODAsMTEgKzEzNzYsNTQgQEAKIAl1MTYJCXNwcV9wcm9kOwkvKiB2YWxpZCBpZmYgRlVOQ19GTEdfU1BRICovCiB9OwogCi0jZGVmaW5lIGZvcl9lYWNoX3F1ZXVlKGJwLCB2YXIpIFwKLQkJCWZvciAodmFyID0gMDsgdmFyIDwgQk5YMlhfTlVNX1FVRVVFUyhicCk7IHZhcisrKQotI2RlZmluZSBmb3JfZWFjaF9ub25kZWZhdWx0X3F1ZXVlKGJwLCB2YXIpIFwKLQkJCWZvciAodmFyID0gMTsgdmFyIDwgQk5YMlhfTlVNX1FVRVVFUyhicCk7IHZhcisrKQorI2RlZmluZSBmb3JfZWFjaF9ldGhfcXVldWUoYnAsIHZhcikgXAorCQkJZm9yICh2YXIgPSAwOyB2YXIgPCBCTlgyWF9OVU1fRVRIX1FVRVVFUyhicCk7IHZhcisrKQogCisjZGVmaW5lIGZvcl9lYWNoX25vbmRlZmF1bHRfZXRoX3F1ZXVlKGJwLCB2YXIpIFwKKwkJCWZvciAodmFyID0gMTsgdmFyIDwgQk5YMlhfTlVNX0VUSF9RVUVVRVMoYnApOyB2YXIrKykKKworI2RlZmluZSBmb3JfZWFjaF9uYXBpX3F1ZXVlKGJwLCB2YXIpIFwKKwlmb3IgKHZhciA9IDA7IFwKKwkJdmFyIDwgQk5YMlhfTlVNX0VUSF9RVUVVRVMoYnApICsgRkNPRV9DT05URVhUX1VTRTsgdmFyKyspIFwKKwkJaWYgKHNraXBfcXVldWUoYnAsIHZhcikpCVwKKwkJCWNvbnRpbnVlOwkJXAorCQllbHNlCisKKyNkZWZpbmUgZm9yX2VhY2hfcXVldWUoYnAsIHZhcikgXAorCWZvciAodmFyID0gMDsgdmFyIDwgQk5YMlhfTlVNX1FVRVVFUyhicCk7IHZhcisrKSBcCisJCWlmIChza2lwX3F1ZXVlKGJwLCB2YXIpKQlcCisJCQljb250aW51ZTsJCVwKKwkJZWxzZQorCisjZGVmaW5lIGZvcl9lYWNoX3J4X3F1ZXVlKGJwLCB2YXIpIFwKKwlmb3IgKHZhciA9IDA7IHZhciA8IEJOWDJYX05VTV9RVUVVRVMoYnApOyB2YXIrKykgXAorCQlpZiAoc2tpcF9yeF9xdWV1ZShicCwgdmFyKSkJXAorCQkJY29udGludWU7CQlcCisJCWVsc2UKKworI2RlZmluZSBmb3JfZWFjaF90eF9xdWV1ZShicCwgdmFyKSBcCisJZm9yICh2YXIgPSAwOyB2YXIgPCBCTlgyWF9OVU1fUVVFVUVTKGJwKTsgdmFyKyspIFwKKwkJaWYgKHNraXBfdHhfcXVldWUoYnAsIHZhcikpCVwKKwkJCWNvbnRpbnVlOwkJXAorCQllbHNlCisKKyNkZWZpbmUgZm9yX2VhY2hfbm9uZGVmYXVsdF9xdWV1ZShicCwgdmFyKSBcCisJZm9yICh2YXIgPSAxOyB2YXIgPCBCTlgyWF9OVU1fUVVFVUVTKGJwKTsgdmFyKyspIFwKKwkJaWYgKHNraXBfcXVldWUoYnAsIHZhcikpCVwKKwkJCWNvbnRpbnVlOwkJXAorCQllbHNlCisKKy8qIHNraXAgcnggcXVldWUKKyAqIGlmIEZDT0UgbDIgc3VwcG9ydCBpcyBkaWFibGVkIGFuZCB0aGlzIGlzIHRoZSBmY29lIEwyIHF1ZXVlCisgKi8KKyNkZWZpbmUgc2tpcF9yeF9xdWV1ZShicCwgaWR4KQkoTk9fRkNPRShicCkgJiYgSVNfRkNPRV9JRFgoaWR4KSkKKworLyogc2tpcCB0eCBxdWV1ZQorICogaWYgRkNPRSBsMiBzdXBwb3J0IGlzIGRpYWJsZWQgYW5kIHRoaXMgaXMgdGhlIGZjb2UgTDIgcXVldWUKKyAqLworI2RlZmluZSBza2lwX3R4X3F1ZXVlKGJwLCBpZHgpCShOT19GQ09FKGJwKSAmJiBJU19GQ09FX0lEWChpZHgpKQorCisjZGVmaW5lIHNraXBfcXVldWUoYnAsIGlkeCkJKE5PX0ZDT0UoYnApICYmIElTX0ZDT0VfSURYKGlkeCkpCiAKICNkZWZpbmUgV0FJVF9SQU1ST0RfUE9MTAkweDAxCiAjZGVmaW5lIFdBSVRfUkFNUk9EX0NPTU1PTgkweDAyCkBAIC0xMzI5LDcgKzE0NjgsNyBAQAogCiAjZGVmaW5lIEJOWDJYX0lMVF9aQUxMT0MoeCwgeSwgc2l6ZSkgXAogCWRvIHsgXAotCQl4ID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYnAtPnBkZXYsIHNpemUsIHkpOyBcCisJCXggPSBkbWFfYWxsb2NfY29oZXJlbnQoJmJwLT5wZGV2LT5kZXYsIHNpemUsIHksIEdGUF9LRVJORUwpOyBcCiAJCWlmICh4KSBcCiAJCQltZW1zZXQoeCwgMCwgc2l6ZSk7IFwKIAl9IHdoaWxlICgwKQpAQCAtMTMzNyw3ICsxNDc2LDcgQEAKICNkZWZpbmUgQk5YMlhfSUxUX0ZSRUUoeCwgeSwgc2l6ZSkgXAogCWRvIHsgXAogCQlpZiAoeCkgeyBcCi0JCQlwY2lfZnJlZV9jb25zaXN0ZW50KGJwLT5wZGV2LCBzaXplLCB4LCB5KTsgXAorCQkJZG1hX2ZyZWVfY29oZXJlbnQoJmJwLT5wZGV2LT5kZXYsIHNpemUsIHgsIHkpOyBcCiAJCQl4ID0gTlVMTDsgXAogCQkJeSA9IDA7IFwKIAkJfSBcCkBAIC0xNjA4LDEwICsxNzQ3LDYgQEAKIAlNQUNfQ09ORklHVVJBVElPTl9FTlRSWV9BQ1RJT05fVFlQRSkgPT0gXAogCShUX0VUSF9NQUNfQ09NTUFORF9JTlZBTElEQVRFKSkKIAotI2RlZmluZSBDQU1fSU5WQUxJREFURSh4KSBcCi0JKHgudGFyZ2V0X3RhYmxlX2VudHJ5LmZsYWdzID0gVFNUT1JNX0NBTV9UQVJHRVRfVEFCTEVfRU5UUllfQUNUSU9OX1RZUEUpCi0KLQogLyogTnVtYmVyIG9mIHUzMiBlbGVtZW50cyBpbiBNQyBoYXNoIGFycmF5ICovCiAjZGVmaW5lIE1DX0hBU0hfU0laRQkJCTgKICNkZWZpbmUgTUNfSEFTSF9PRkZTRVQoYnAsIGkpCQkoQkFSX1RTVFJPUk1fSU5UTUVNICsgXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54MngvYm54MnhfY21uLmMgYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9jbW4uYwppbmRleCAwYWYzNjFlLi43MTBjZTVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9jbW4uYworKysgYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9jbW4uYwpAQCAtNjk4LDYgKzY5OCwyOSBAQAogCW11dGV4X3VubG9jaygmYnAtPnBvcnQucGh5X211dGV4KTsKIH0KIAorLyogY2FsY3VsYXRlcyBNRiBzcGVlZCBhY2NvcmRpbmcgdG8gY3VycmVudCBsaW5lc3BlZWQgYW5kIE1GIGNvbmZpZ3VyYXRpb24gKi8KK3UxNiBibngyeF9nZXRfbWZfc3BlZWQoc3RydWN0IGJueDJ4ICpicCkKK3sKKwl1MTYgbGluZV9zcGVlZCA9IGJwLT5saW5rX3ZhcnMubGluZV9zcGVlZDsKKwlpZiAoSVNfTUYoYnApKSB7CisJCXUxNiBtYXhDZmcgPSAoYnAtPm1mX2NvbmZpZ1tCUF9WTihicCldICYKKwkJCQkJCUZVTkNfTUZfQ0ZHX01BWF9CV19NQVNLKSA+PgorCQkJCQkJRlVOQ19NRl9DRkdfTUFYX0JXX1NISUZUOworCQkvKiBDYWxjdWxhdGUgdGhlIGN1cnJlbnQgTUFYIGxpbmUgc3BlZWQgbGltaXQgZm9yIHRoZSBEQ0MKKwkJICogY2FwYWJsZSBkZXZpY2VzCisJCSAqLworCQlpZiAoSVNfTUZfU0QoYnApKSB7CisJCQl1MTYgdm5fbWF4X3JhdGUgPSBtYXhDZmcgKiAxMDA7CisKKwkJCWlmICh2bl9tYXhfcmF0ZSA8IGxpbmVfc3BlZWQpCisJCQkJbGluZV9zcGVlZCA9IHZuX21heF9yYXRlOworCQl9IGVsc2UgLyogSVNfTUZfU0koYnApKSAqLworCQkJbGluZV9zcGVlZCA9IChsaW5lX3NwZWVkICogbWF4Q2ZnKSAvIDEwMDsKKwl9CisKKwlyZXR1cm4gbGluZV9zcGVlZDsKK30KKwogdm9pZCBibngyeF9saW5rX3JlcG9ydChzdHJ1Y3QgYm54MnggKmJwKQogewogCWlmIChicC0+ZmxhZ3MgJiBNRl9GVU5DX0RJUykgewpAQCAtNzEzLDE3ICs3MzYsOCBAQAogCQkJbmV0aWZfY2Fycmllcl9vbihicC0+ZGV2KTsKIAkJbmV0ZGV2X2luZm8oYnAtPmRldiwgIk5JQyBMaW5rIGlzIFVwLCAiKTsKIAotCQlsaW5lX3NwZWVkID0gYnAtPmxpbmtfdmFycy5saW5lX3NwZWVkOwotCQlpZiAoSVNfTUYoYnApKSB7Ci0JCQl1MTYgdm5fbWF4X3JhdGU7CisJCWxpbmVfc3BlZWQgPSBibngyeF9nZXRfbWZfc3BlZWQoYnApOwogCi0JCQl2bl9tYXhfcmF0ZSA9Ci0JCQkJKChicC0+bWZfY29uZmlnW0JQX1ZOKGJwKV0gJgotCQkJCSAgRlVOQ19NRl9DRkdfTUFYX0JXX01BU0spID4+Ci0JCQkJCQlGVU5DX01GX0NGR19NQVhfQldfU0hJRlQpICogMTAwOwotCQkJaWYgKHZuX21heF9yYXRlIDwgbGluZV9zcGVlZCkKLQkJCQlsaW5lX3NwZWVkID0gdm5fbWF4X3JhdGU7Ci0JCX0KIAkJcHJfY29udCgiJWQgTWJwcyAiLCBsaW5lX3NwZWVkKTsKIAogCQlpZiAoYnAtPmxpbmtfdmFycy5kdXBsZXggPT0gRFVQTEVYX0ZVTEwpCkBAIC04MTMsNyArODI3LDcgQEAKIAlEUChORVRJRl9NU0dfSUZVUCwKIAkgICAibXR1ICVkICByeF9idWZfc2l6ZSAlZFxuIiwgYnAtPmRldi0+bXR1LCBicC0+cnhfYnVmX3NpemUpOwogCi0JZm9yX2VhY2hfcXVldWUoYnAsIGopIHsKKwlmb3JfZWFjaF9yeF9xdWV1ZShicCwgaikgewogCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtqXTsKIAogCQlpZiAoIWZwLT5kaXNhYmxlX3RwYSkgewpAQCAtODY2LDcgKzg4MCw3IEBACiAJCX0KIAl9CiAKLQlmb3JfZWFjaF9xdWV1ZShicCwgaikgeworCWZvcl9lYWNoX3J4X3F1ZXVlKGJwLCBqKSB7CiAJCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2pdOwogCiAJCWZwLT5yeF9iZF9jb25zID0gMDsKQEAgLTg5Nyw3ICs5MTEsNyBAQAogewogCWludCBpOwogCi0JZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKKwlmb3JfZWFjaF90eF9xdWV1ZShicCwgaSkgewogCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtpXTsKIAogCQl1MTYgYmRfY29ucyA9IGZwLT50eF9iZF9jb25zOwpAQCAtOTE1LDcgKzkyOSw3IEBACiB7CiAJaW50IGksIGo7CiAKLQlmb3JfZWFjaF9xdWV1ZShicCwgaikgeworCWZvcl9lYWNoX3J4X3F1ZXVlKGJwLCBqKSB7CiAJCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2pdOwogCiAJCWZvciAoaSA9IDA7IGkgPCBOVU1fUlhfQkQ7IGkrKykgewpAQCAtOTU2LDcgKzk3MCw3IEBACiAjaWZkZWYgQkNNX0NOSUMKIAlvZmZzZXQrKzsKICNlbmRpZgotCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7CisJZm9yX2VhY2hfZXRoX3F1ZXVlKGJwLCBpKSB7CiAJCURQKE5FVElGX01TR19JRkRPV04sICJhYm91dCB0byByZWxlYXNlIGZwICMlZC0+JWQgaXJxICAiCiAJCSAgICJzdGF0ZSAleFxuIiwgaSwgYnAtPm1zaXhfdGFibGVbaSArIG9mZnNldF0udmVjdG9yLAogCQkgICBibngyeF9mcChicCwgaSwgc3RhdGUpKTsKQEAgLTk5MCwxNCArMTAwNCwxNCBAQAogCSAgIGJwLT5tc2l4X3RhYmxlW21zaXhfdmVjXS5lbnRyeSwgYnAtPm1zaXhfdGFibGVbbXNpeF92ZWNdLmVudHJ5KTsKIAltc2l4X3ZlYysrOwogI2VuZGlmCi0JZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKKwlmb3JfZWFjaF9ldGhfcXVldWUoYnAsIGkpIHsKIAkJYnAtPm1zaXhfdGFibGVbbXNpeF92ZWNdLmVudHJ5ID0gbXNpeF92ZWM7CiAJCURQKE5FVElGX01TR19JRlVQLCAibXNpeF90YWJsZVslZF0uZW50cnkgPSAlZCAiCiAJCSAgICIoZmFzdHBhdGggIyV1KVxuIiwgbXNpeF92ZWMsIG1zaXhfdmVjLCBpKTsKIAkJbXNpeF92ZWMrKzsKIAl9CiAKLQlyZXFfY250ID0gQk5YMlhfTlVNX1FVRVVFUyhicCkgKyBDTklDX0NPTlRFWFRfVVNFICsgMTsKKwlyZXFfY250ID0gQk5YMlhfTlVNX0VUSF9RVUVVRVMoYnApICsgQ05JQ19DT05URVhUX1VTRSArIDE7CiAKIAlyYyA9IHBjaV9lbmFibGVfbXNpeChicC0+cGRldiwgJmJwLT5tc2l4X3RhYmxlWzBdLCByZXFfY250KTsKIApAQCAtMTA1Myw3ICsxMDY3LDcgQEAKICNpZmRlZiBCQ01fQ05JQwogCW9mZnNldCsrOwogI2VuZGlmCi0JZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKKwlmb3JfZWFjaF9ldGhfcXVldWUoYnAsIGkpIHsKIAkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbaV07CiAJCXNucHJpbnRmKGZwLT5uYW1lLCBzaXplb2YoZnAtPm5hbWUpLCAiJXMtZnAtJWQiLAogCQkJIGJwLT5kZXYtPm5hbWUsIGkpOwpAQCAtMTA3MCw3ICsxMDg0LDcgQEAKIAkJZnAtPnN0YXRlID0gQk5YMlhfRlBfU1RBVEVfSVJROwogCX0KIAotCWkgPSBCTlgyWF9OVU1fUVVFVUVTKGJwKTsKKwlpID0gQk5YMlhfTlVNX0VUSF9RVUVVRVMoYnApOwogCW9mZnNldCA9IDEgKyBDTklDX0NPTlRFWFRfVVNFOwogCW5ldGRldl9pbmZvKGJwLT5kZXYsICJ1c2luZyBNU0ktWCAgSVJRczogc3AgJWQgIGZwWyVkXSAlZCIKIAkgICAgICAgIiAuLi4gZnBbJWRdICVkXG4iLApAQCAtMTExNyw3ICsxMTMxLDcgQEAKIHsKIAlpbnQgaTsKIAotCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKQorCWZvcl9lYWNoX25hcGlfcXVldWUoYnAsIGkpCiAJCW5hcGlfZW5hYmxlKCZibngyeF9mcChicCwgaSwgbmFwaSkpOwogfQogCkBAIC0xMTI1LDcgKzExMzksNyBAQAogewogCWludCBpOwogCi0JZm9yX2VhY2hfcXVldWUoYnAsIGkpCisJZm9yX2VhY2hfbmFwaV9xdWV1ZShicCwgaSkKIAkJbmFwaV9kaXNhYmxlKCZibngyeF9mcChicCwgaSwgbmFwaSkpOwogfQogCkBAIC0xMTUzLDYgKzExNjcsMzUgQEAKIAluZXRpZl90eF9kaXNhYmxlKGJwLT5kZXYpOwogfQogCit1MTYgYm54Mnhfc2VsZWN0X3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCit7CisjaWZkZWYgQkNNX0NOSUMKKwlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpZiAoTk9fRkNPRShicCkpCisJCXJldHVybiBza2JfdHhfaGFzaChkZXYsIHNrYik7CisJZWxzZSB7CisJCXN0cnVjdCBldGhoZHIgKmhkciA9IChzdHJ1Y3QgZXRoaGRyICopc2tiLT5kYXRhOworCQl1MTYgZXRoZXJfdHlwZSA9IG50b2hzKGhkci0+aF9wcm90byk7CisKKwkJLyogU2tpcCBWTEFOIHRhZyBpZiBwcmVzZW50ICovCisJCWlmIChldGhlcl90eXBlID09IEVUSF9QXzgwMjFRKSB7CisJCQlzdHJ1Y3Qgdmxhbl9ldGhoZHIgKnZoZHIgPQorCQkJCShzdHJ1Y3Qgdmxhbl9ldGhoZHIgKilza2ItPmRhdGE7CisKKwkJCWV0aGVyX3R5cGUgPSBudG9ocyh2aGRyLT5oX3ZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvKTsKKwkJfQorCisJCS8qIElmIGV0aGVydHlwZSBpcyBGQ29FIG9yIEZJUCAtIHVzZSBGQ29FIHJpbmcgKi8KKwkJaWYgKChldGhlcl90eXBlID09IEVUSF9QX0ZDT0UpIHx8IChldGhlcl90eXBlID09IEVUSF9QX0ZJUCkpCisJCQlyZXR1cm4gYm54MnhfZmNvZShicCwgaW5kZXgpOworCX0KKyNlbmRpZgorCS8qIFNlbGVjdCBhIG5vbmUtRkNvRSBxdWV1ZTogIGlmIEZDb0UgaXMgZW5hYmxlZCwgZXhjbHVkZSBGQ29FIEwyIHJpbmcKKwkgKi8KKwlyZXR1cm4gX19za2JfdHhfaGFzaChkZXYsIHNrYiwKKwkJCWRldi0+cmVhbF9udW1fdHhfcXVldWVzIC0gRkNPRV9DT05URVhUX1VTRSk7Cit9CisKIHZvaWQgYm54Mnhfc2V0X251bV9xdWV1ZXMoc3RydWN0IGJueDJ4ICpicCkKIHsKIAlzd2l0Y2ggKGJwLT5tdWx0aV9tb2RlKSB7CkBAIC0xMTY3LDggKzEyMTAsMjMgQEAKIAkJYnAtPm51bV9xdWV1ZXMgPSAxOwogCQlicmVhazsKIAl9CisKKwkvKiBBZGQgc3BlY2lhbCBxdWV1ZXMgKi8KKwlicC0+bnVtX3F1ZXVlcyArPSBOT05FX0VUSF9DT05URVhUX1VTRTsKIH0KIAorI2lmZGVmIEJDTV9DTklDCitzdGF0aWMgaW5saW5lIHZvaWQgYm54Mnhfc2V0X2Zjb2VfZXRoX21hY3Moc3RydWN0IGJueDJ4ICpicCkKK3sKKwlpZiAoIU5PX0ZDT0UoYnApKSB7CisJCWlmICghSVNfTUZfU0QoYnApKQorCQkJYm54Mnhfc2V0X2ZpcF9ldGhfbWFjX2FkZHIoYnAsIDEpOworCQlibngyeF9zZXRfYWxsX2Vub2RlX21hY3MoYnAsIDEpOworCQlicC0+ZmxhZ3MgfD0gRkNPRV9NQUNTX1NFVDsKKwl9Cit9CisjZW5kaWYKKwogc3RhdGljIHZvaWQgYm54MnhfcmVsZWFzZV9maXJtd2FyZShzdHJ1Y3QgYm54MnggKmJwKQogewogCWtmcmVlKGJwLT5pbml0X29wc19vZmZzZXRzKTsKQEAgLTExNzcsNiArMTIzNSwyMCBAQAogCXJlbGVhc2VfZmlybXdhcmUoYnAtPmZpcm13YXJlKTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgYm54Mnhfc2V0X3JlYWxfbnVtX3F1ZXVlcyhzdHJ1Y3QgYm54MnggKmJwKQoreworCWludCByYywgbnVtID0gYnAtPm51bV9xdWV1ZXM7CisKKyNpZmRlZiBCQ01fQ05JQworCWlmIChOT19GQ09FKGJwKSkKKwkJbnVtIC09IEZDT0VfQ09OVEVYVF9VU0U7CisKKyNlbmRpZgorCW5ldGlmX3NldF9yZWFsX251bV90eF9xdWV1ZXMoYnAtPmRldiwgbnVtKTsKKwlyYyA9IG5ldGlmX3NldF9yZWFsX251bV9yeF9xdWV1ZXMoYnAtPmRldiwgbnVtKTsKKwlyZXR1cm4gcmM7Cit9CisKIC8qIG11c3QgYmUgY2FsbGVkIHdpdGggcnRubF9sb2NrICovCiBpbnQgYm54MnhfbmljX2xvYWQoc3RydWN0IGJueDJ4ICpicCwgaW50IGxvYWRfbW9kZSkKIHsKQEAgLTEyMDMsMTAgKzEyNzUsOSBAQAogCWlmIChibngyeF9hbGxvY19tZW0oYnApKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCW5ldGlmX3NldF9yZWFsX251bV90eF9xdWV1ZXMoYnAtPmRldiwgYnAtPm51bV9xdWV1ZXMpOwotCXJjID0gbmV0aWZfc2V0X3JlYWxfbnVtX3J4X3F1ZXVlcyhicC0+ZGV2LCBicC0+bnVtX3F1ZXVlcyk7CisJcmMgPSBibngyeF9zZXRfcmVhbF9udW1fcXVldWVzKGJwKTsKIAlpZiAocmMpIHsKLQkJQk5YMlhfRVJSKCJVbmFibGUgdG8gdXBkYXRlIHJlYWxfbnVtX3J4X3F1ZXVlc1xuIik7CisJCUJOWDJYX0VSUigiVW5hYmxlIHRvIHNldCByZWFsX251bV9xdWV1ZXNcbiIpOwogCQlnb3RvIGxvYWRfZXJyb3IwOwogCX0KIApAQCAtMTIxNCw2ICsxMjg1LDEwIEBACiAJCWJueDJ4X2ZwKGJwLCBpLCBkaXNhYmxlX3RwYSkgPQogCQkJCQkoKGJwLT5mbGFncyAmIFRQQV9FTkFCTEVfRkxBRykgPT0gMCk7CiAKKyNpZmRlZiBCQ01fQ05JQworCS8qIFdlIGRvbid0IHdhbnQgVFBBIG9uIEZDb0UgTDIgcmluZyAqLworCWJueDJ4X2Zjb2UoYnAsIGRpc2FibGVfdHBhKSA9IDE7CisjZW5kaWYKIAlibngyeF9uYXBpX2VuYWJsZShicCk7CiAKIAkvKiBTZW5kIExPQURfUkVRVUVTVCBjb21tYW5kIHRvIE1DUApAQCAtMTI5Niw2ICsxMzcxLDggQEAKIAkJfQogCX0KIAorCWJueDJ4X2RjYnhfaW5pdChicCk7CisKIAlicC0+c3RhdGUgPSBCTlgyWF9TVEFURV9PUEVOSU5HX1dBSVQ0X1BPUlQ7CiAKIAlyYyA9IGJueDJ4X2Z1bmNfc3RhcnQoYnApOwpAQCAtMTM0NCw2ICsxNDIxLDEwIEBACiAJLyogTm93IHdoZW4gQ2xpZW50cyBhcmUgY29uZmlndXJlZCB3ZSBhcmUgcmVhZHkgdG8gd29yayAqLwogCWJwLT5zdGF0ZSA9IEJOWDJYX1NUQVRFX09QRU47CiAKKyNpZmRlZiBCQ01fQ05JQworCWJueDJ4X3NldF9mY29lX2V0aF9tYWNzKGJwKTsKKyNlbmRpZgorCiAJYm54Mnhfc2V0X2V0aF9tYWMoYnAsIDEpOwogCiAJaWYgKGJwLT5wb3J0LnBtZikKQEAgLTE0MDIsNyArMTQ4Myw3IEBACiAKIAkvKiBGcmVlIFNLQnMsIFNHRXMsIFRQQSBwb29sIGFuZCBkcml2ZXIgaW50ZXJuYWxzICovCiAJYm54MnhfZnJlZV9za2JzKGJwKTsKLQlmb3JfZWFjaF9xdWV1ZShicCwgaSkKKwlmb3JfZWFjaF9yeF9xdWV1ZShicCwgaSkKIAkJYm54MnhfZnJlZV9yeF9zZ2VfcmFuZ2UoYnAsIGJwLT5mcCArIGksIE5VTV9SWF9TR0UpOwogCiAJLyogUmVsZWFzZSBJUlFzICovCkBAIC0xNDczLDcgKzE1NTQsNyBAQAogCiAJLyogRnJlZSBTS0JzLCBTR0VzLCBUUEEgcG9vbCBhbmQgZHJpdmVyIGludGVybmFscyAqLwogCWJueDJ4X2ZyZWVfc2ticyhicCk7Ci0JZm9yX2VhY2hfcXVldWUoYnAsIGkpCisJZm9yX2VhY2hfcnhfcXVldWUoYnAsIGkpCiAJCWJueDJ4X2ZyZWVfcnhfc2dlX3JhbmdlKGJwLCBicC0+ZnAgKyBpLCBOVU1fUlhfU0dFKTsKIAogCWJueDJ4X2ZyZWVfbWVtKGJwKTsKQEAgLTE1NzcsNiArMTY1OCwxNyBAQAogCiAJCS8qIEZhbGwgb3V0IGZyb20gdGhlIE5BUEkgbG9vcCBpZiBuZWVkZWQgKi8KIAkJaWYgKCEoYm54MnhfaGFzX3J4X3dvcmsoZnApIHx8IGJueDJ4X2hhc190eF93b3JrKGZwKSkpIHsKKyNpZmRlZiBCQ01fQ05JQworCQkJLyogTm8gbmVlZCB0byB1cGRhdGUgU0IgZm9yIEZDb0UgTDIgcmluZyBhcyBsb25nIGFzCisJCQkgKiBpdCdzIGNvbm5lY3RlZCB0byB0aGUgZGVmYXVsdCBTQiBhbmQgdGhlIFNCCisJCQkgKiBoYXMgYmVlbiB1cGRhdGVkIHdoZW4gTkFQSSB3YXMgc2NoZWR1bGVkLgorCQkJICovCisJCQlpZiAoSVNfRkNPRV9GUChmcCkpIHsKKwkJCQluYXBpX2NvbXBsZXRlKG5hcGkpOworCQkJCWJyZWFrOworCQkJfQorI2VuZGlmCisKIAkJCWJueDJ4X3VwZGF0ZV9mcHNiX2lkeChmcCk7CiAJCQkvKiBibngyeF9oYXNfcnhfd29yaygpIHJlYWRzIHRoZSBzdGF0dXMgYmxvY2ssCiAJCQkgKiB0aHVzIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgc3RhdHVzIGJsb2NrIGluZGljZXMKQEAgLTE2OTIsMTEgKzE3ODQsMTAgQEAKIAkJfQogCX0KIAotCWlmIChza2Jfc2hpbmZvKHNrYiktPmdzb190eXBlICYgU0tCX0dTT19UQ1BWNCkKLQkJcmMgfD0gKFhNSVRfR1NPX1Y0IHwgWE1JVF9DU1VNX1Y0IHwgWE1JVF9DU1VNX1RDUCk7Ci0KLQllbHNlIGlmIChza2Jfc2hpbmZvKHNrYiktPmdzb190eXBlICYgU0tCX0dTT19UQ1BWNikKLQkJcmMgfD0gKFhNSVRfR1NPX1Y2IHwgWE1JVF9DU1VNX1RDUCB8IFhNSVRfQ1NVTV9WNik7CisJaWYgKHNrYl9pc19nc29fdjYoc2tiKSkKKwkJcmMgfD0gWE1JVF9HU09fVjYgfCBYTUlUX0NTVU1fVENQIHwgWE1JVF9DU1VNX1Y2OworCWVsc2UgaWYgKHNrYl9pc19nc28oc2tiKSkKKwkJcmMgfD0gWE1JVF9HU09fVjQgfCBYTUlUX0NTVU1fVjQgfCBYTUlUX0NTVU1fVENQOwogCiAJcmV0dXJuIHJjOwogfQpAQCAtMjI0Miw3ICsyMzMzLDcgQEAKIAlicC0+ZnAgPSBmcDsKIAogCS8qIG1zaXggdGFibGUgKi8KLQl0YmwgPSBremFsbG9jKChicC0+bDJfY2lkX2NvdW50ICsgMSkgKiBzaXplb2YoKnRibCksCisJdGJsID0ga3phbGxvYygoRlBfU0JfQ09VTlQoYnAtPmwyX2NpZF9jb3VudCkgKyAxKSAqIHNpemVvZigqdGJsKSwKIAkJCQkgIEdGUF9LRVJORUwpOwogCWlmICghdGJsKQogCQlnb3RvIGFsbG9jX2VycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2Ntbi5oIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfY21uLmgKaW5kZXggNmIyODczOS4uMDNlYjRkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MngvYm54MnhfY21uLmgKKysrIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfY21uLmgKQEAgLTczLDYgKzczLDE2IEBACiB2b2lkIGJueDJ4X2xpbmtfcmVwb3J0KHN0cnVjdCBibngyeCAqYnApOwogCiAvKioKKyAqIGNhbGN1bGF0ZXMgTUYgc3BlZWQgYWNjb3JkaW5nIHRvIGN1cnJlbnQgbGluZXNwZWVkIGFuZCBNRgorICogY29uZmlndXJhdGlvbgorICoKKyAqIEBwYXJhbSBicAorICoKKyAqIEByZXR1cm4gdTE2CisgKi8KK3UxNiBibngyeF9nZXRfbWZfc3BlZWQoc3RydWN0IGJueDJ4ICpicCk7CisKKy8qKgogICogTVNJLVggc2xvd3BhdGggaW50ZXJydXB0IGhhbmRsZXIKICAqCiAgKiBAcGFyYW0gaXJxCkBAIC0yMzIsNiArMjQyLDMwIEBACiAgKi8KIHZvaWQgYm54Mnhfc2V0X2V0aF9tYWMoc3RydWN0IGJueDJ4ICpicCwgaW50IHNldCk7CiAKKyNpZmRlZiBCQ01fQ05JQworLyoqCisgKiBTZXQvQ2xlYXIgRklQIE1BQyhzKSBhdCB0aGUgbmV4dCBlbnRpZXMgaW4gdGhlIENBTSBhZnRlciB0aGUgRVRICisgKiBNQUMocykuIFRoaXMgZnVuY3Rpb24gd2lsbCB3YWl0IHVudGlsIHRoZSByYW1kb3JkIGNvbXBsZXRpb24KKyAqIHJldHVybnMuCisgKgorICogQHBhcmFtIGJwIGRyaXZlciBoYW5kbGUKKyAqIEBwYXJhbSBzZXQgc2V0IG9yIGNsZWFyIHRoZSBDQU0gZW50cnkKKyAqCisgKiBAcmV0dXJuIDAgaWYgY3Vzc2VzcywgLUVOT0RFViBpZiByYW1yb2QgZG9lc24ndCByZXR1cm4uCisgKi8KK2ludCBibngyeF9zZXRfZmlwX2V0aF9tYWNfYWRkcihzdHJ1Y3QgYm54MnggKmJwLCBpbnQgc2V0KTsKKworLyoqCisgKiBTZXQvQ2xlYXIgQUxMX0VOT0RFIG1jYXN0IE1BQy4KKyAqCisgKiBAcGFyYW0gYnAKKyAqIEBwYXJhbSBzZXQKKyAqCisgKiBAcmV0dXJuIGludAorICovCitpbnQgYm54Mnhfc2V0X2FsbF9lbm9kZV9tYWNzKHN0cnVjdCBibngyeCAqYnAsIGludCBzZXQpOworI2VuZGlmCisKIC8qKgogICogU2V0IE1BQyBmaWx0ZXJpbmcgY29uZmlndXJhdGlvbnMuCiAgKgpAQCAtMjkwLDYgKzMyNCwxMyBAQAogdm9pZCBibngyeF9pbHRfc2V0X2luZm8oc3RydWN0IGJueDJ4ICpicCk7CiAKIC8qKgorICogSW5pbnRpYWxpemUgZGNieCBwcm90b2NvbAorICoKKyAqIEBwYXJhbSBicAorICovCit2b2lkIGJueDJ4X2RjYnhfaW5pdChzdHJ1Y3QgYm54MnggKmJwKTsKKworLyoqCiAgKiBTZXQgcG93ZXIgc3RhdGUgdG8gdGhlIHJlcXVlc3RlZCB2YWx1ZS4gQ3VycmVudGx5IG9ubHkgRDAgYW5kCiAgKiBEM2hvdCBhcmUgc3VwcG9ydGVkLgogICoKQEAgLTMwOSw2ICszNTAsOSBAQAogLyogaGFyZF94bWl0IGNhbGxiYWNrICovCiBuZXRkZXZfdHhfdCBibngyeF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCisvKiBzZWxlY3RfcXVldWUgY2FsbGJhY2sgKi8KK3UxNiBibngyeF9zZWxlY3RfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKIGludCBibngyeF9jaGFuZ2VfbWFjX2FkZHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcCk7CiAKIC8qIE5BUEkgcG9sbCBSeCBwYXJ0ICovCkBAIC02ODUsNyArNzI5LDcgQEAKIAlpbnQgaTsKIAogCS8qIEFkZCBOQVBJIG9iamVjdHMgKi8KLQlmb3JfZWFjaF9xdWV1ZShicCwgaSkKKwlmb3JfZWFjaF9uYXBpX3F1ZXVlKGJwLCBpKQogCQluZXRpZl9uYXBpX2FkZChicC0+ZGV2LCAmYm54MnhfZnAoYnAsIGksIG5hcGkpLAogCQkJICAgICAgIGJueDJ4X3BvbGwsIEJOWDJYX05BUElfV0VJR0hUKTsKIH0KQEAgLTY5NCw3ICs3MzgsNyBAQAogewogCWludCBpOwogCi0JZm9yX2VhY2hfcXVldWUoYnAsIGkpCisJZm9yX2VhY2hfbmFwaV9xdWV1ZShicCwgaSkKIAkJbmV0aWZfbmFwaV9kZWwoJmJueDJ4X2ZwKGJwLCBpLCBuYXBpKSk7CiB9CiAKQEAgLTg2MCw3ICs5MDQsNyBAQAogewogCWludCBpLCBqOwogCi0JZm9yX2VhY2hfcXVldWUoYnAsIGopIHsKKwlmb3JfZWFjaF90eF9xdWV1ZShicCwgaikgewogCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtqXTsKIAogCQlmb3IgKGkgPSAxOyBpIDw9IE5VTV9UWF9SSU5HUzsgaSsrKSB7CkBAIC05MzksNyArOTgzLDMwIEBACiAJfQogfQogCisjaWZkZWYgQkNNX0NOSUMKK3N0YXRpYyBpbmxpbmUgdm9pZCBibngyeF9pbml0X2Zjb2VfZnAoc3RydWN0IGJueDJ4ICpicCkKK3sKKwlibngyeF9mY29lKGJwLCBjbF9pZCkgPSBCTlgyWF9GQ09FX0VUSF9DTF9JRCArCisJCUJQX0UxSFZOKGJwKSAqIE5PTkVfRVRIX0NPTlRFWFRfVVNFOworCWJueDJ4X2Zjb2UoYnAsIGNpZCkgPSBCTlgyWF9GQ09FX0VUSF9DSUQ7CisJYm54MnhfZmNvZShicCwgZndfc2JfaWQpID0gREVGX1NCX0lEOworCWJueDJ4X2Zjb2UoYnAsIGlndV9zYl9pZCkgPSBicC0+aWd1X2RzYl9pZDsKKwlibngyeF9mY29lKGJwLCBicCkgPSBicDsKKwlibngyeF9mY29lKGJwLCBzdGF0ZSkgPSBCTlgyWF9GUF9TVEFURV9DTE9TRUQ7CisJYm54MnhfZmNvZShicCwgaW5kZXgpID0gRkNPRV9JRFg7CisJYm54MnhfZmNvZShicCwgcnhfY29uc19zYikgPSBCTlgyWF9GQ09FX0wyX1JYX0lOREVYOworCWJueDJ4X2Zjb2UoYnAsIHR4X2NvbnNfc2IpID0gQk5YMlhfRkNPRV9MMl9UWF9JTkRFWDsKKwkvKiBxWm9uZSBpZCBlcXVhbHMgdG8gRlcgKHBlciBwYXRoKSBjbGllbnQgaWQgKi8KKwlibngyeF9mY29lKGJwLCBjbF9xem9uZV9pZCkgPSBibngyeF9mY29lKGJwLCBjbF9pZCkgKworCQlCUF9QT1JUKGJwKSooQ0hJUF9JU19FMihicCkgPyBFVEhfTUFYX1JYX0NMSUVOVFNfRTIgOgorCQkJCUVUSF9NQVhfUlhfQ0xJRU5UU19FMUgpOworCS8qIGluaXQgc2hvcnRjdXQgKi8KKwlibngyeF9mY29lKGJwLCB1c3Rvcm1fcnhfcHJvZHNfb2Zmc2V0KSA9IENISVBfSVNfRTIoYnApID8KKwkgICAgVVNUT1JNX1JYX1BST0RTX0UyX09GRlNFVChibngyeF9mY29lKGJwLCBjbF9xem9uZV9pZCkpIDoKKwkgICAgVVNUT1JNX1JYX1BST0RTX0UxWF9PRkZTRVQoQlBfUE9SVChicCksIGJueDJ4X2Zjb2VfZnAoYnApLT5jbF9pZCk7CiAKK30KKyNlbmRpZgogCiBzdGF0aWMgaW5saW5lIHZvaWQgX19zdG9ybV9tZW1zZXRfc3RydWN0KHN0cnVjdCBibngyeCAqYnAsCiAJCQkJCSB1MzIgYWRkciwgc2l6ZV90IHNpemUsIHUzMiAqZGF0YSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2RjYi5jIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfZGNiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI2MDAyMWY4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfZGNiLmMKQEAgLTAsMCArMSwyMTE4IEBACisvKiBibngyeF9kY2IuYzogQnJvYWRjb20gRXZlcmVzdCBuZXR3b3JrIGRyaXZlci4KKyAqCisgKiBDb3B5cmlnaHQgMjAwOS0yMDEwIEJyb2FkY29tIENvcnBvcmF0aW9uCisgKgorICogVW5sZXNzIHlvdSBhbmQgQnJvYWRjb20gZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorICogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB0byB5b3UKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLCBhdmFpbGFibGUKKyAqIGF0IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvZ3BsLTIuMC5odG1sICh0aGUgIkdQTCIpLgorICoKKyAqIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIHVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgbWF5IHlvdSBjb21iaW5lIHRoaXMKKyAqIHNvZnR3YXJlIGluIGFueSB3YXkgd2l0aCBhbnkgb3RoZXIgQnJvYWRjb20gc29mdHdhcmUgcHJvdmlkZWQgdW5kZXIgYQorICogbGljZW5zZSBvdGhlciB0aGFuIHRoZSBHUEwsIHdpdGhvdXQgQnJvYWRjb20ncyBleHByZXNzIHByaW9yIHdyaXR0ZW4KKyAqIGNvbnNlbnQuCisgKgorICogTWFpbnRhaW5lZCBieTogRWlsb24gR3JlZW5zdGVpbiA8ZWlsb25nQGJyb2FkY29tLmNvbT4KKyAqIFdyaXR0ZW4gYnk6IERtaXRyeSBLcmF2a292CisgKgorICovCisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorCisjaW5jbHVkZSAiYm54MnguaCIKKyNpbmNsdWRlICJibngyeF9jbW4uaCIKKyNpbmNsdWRlICJibngyeF9kY2IuaCIKKworCisvKiBmb3J3YXJkIGRlY2xhcmF0aW9ucyBvZiBkY2J4IHJlbGF0ZWQgZnVuY3Rpb25zICovCitzdGF0aWMgdm9pZCBibngyeF9kY2J4X3N0b3BfaHdfdHgoc3RydWN0IGJueDJ4ICpicCk7CitzdGF0aWMgdm9pZCBibngyeF9wZmNfc2V0X3BmYyhzdHJ1Y3QgYm54MnggKmJwKTsKK3N0YXRpYyB2b2lkIGJueDJ4X2RjYnhfdXBkYXRlX2V0c19wYXJhbXMoc3RydWN0IGJueDJ4ICpicCk7CitzdGF0aWMgdm9pZCBibngyeF9kY2J4X3Jlc3VtZV9od190eChzdHJ1Y3QgYm54MnggKmJwKTsKK3N0YXRpYyB2b2lkIGJueDJ4X2RjYnhfZ2V0X2V0c19wcmlfcGdfdGJsKHN0cnVjdCBibngyeCAqYnAsCisJCQkJCSAgdTMyICpzZXRfY29uZmlndXJhdGlvbl9ldHNfcGcsCisJCQkJCSAgdTMyICpwcmlfcGdfdGJsKTsKK3N0YXRpYyB2b2lkIGJueDJ4X2RjYnhfZ2V0X251bV9wZ190cmFmX3R5cGUoc3RydWN0IGJueDJ4ICpicCwKKwkJCQkJICAgIHUzMiAqcGdfcHJpX29yZ2luYWxfc3ByZWFkLAorCQkJCQkgICAgc3RydWN0IHBnX2hlbHBfZGF0YSAqaGVscF9kYXRhKTsKK3N0YXRpYyB2b2lkIGJueDJ4X2RjYnhfZmlsbF9jb3NfcGFyYW1zKHN0cnVjdCBibngyeCAqYnAsCisJCQkJICAgICAgIHN0cnVjdCBwZ19oZWxwX2RhdGEgKmhlbHBfZGF0YSwKKwkJCQkgICAgICAgc3RydWN0IGRjYnhfZXRzX2ZlYXR1cmUgKmV0cywKKwkJCQkgICAgICAgdTMyICpwZ19wcmlfb3JnaW5hbF9zcHJlYWQpOworc3RhdGljIHZvaWQgYm54MnhfZGNieF9zZXBhcmF0ZV9wYXVzZWFibGVfZnJvbV9ub24oc3RydWN0IGJueDJ4ICpicCwKKwkJCQlzdHJ1Y3QgY29zX2hlbHBfZGF0YSAqY29zX2RhdGEsCisJCQkJdTMyICpwZ19wcmlfb3JnaW5hbF9zcHJlYWQsCisJCQkJc3RydWN0IGRjYnhfZXRzX2ZlYXR1cmUgKmV0cyk7CitzdGF0aWMgdm9pZCBibngyeF9wZmNfZndfc3RydWN0X2UyKHN0cnVjdCBibngyeCAqYnApOworCisKK3N0YXRpYyB2b2lkIGJueDJ4X3BmY19zZXQoc3RydWN0IGJueDJ4ICpicCkKK3sKKwlzdHJ1Y3QgYm54MnhfbmlnX2JyYl9wZmNfcG9ydF9wYXJhbXMgcGZjX3BhcmFtcyA9IHswfTsKKwl1MzIgcHJpX2JpdCwgdmFsID0gMDsKKwl1OCBwcmk7CisKKwkvKiBUeCBDT1MgY29uZmlndXJhdGlvbiAqLworCWlmIChicC0+ZGNieF9wb3J0X3BhcmFtcy5ldHMuY29zX3BhcmFtc1swXS5wYXVzZWFibGUpCisJCXBmY19wYXJhbXMucnhfY29zMF9wcmlvcml0eV9tYXNrID0KKwkJCWJwLT5kY2J4X3BvcnRfcGFyYW1zLmV0cy5jb3NfcGFyYW1zWzBdLnByaV9iaXRtYXNrOworCWlmIChicC0+ZGNieF9wb3J0X3BhcmFtcy5ldHMuY29zX3BhcmFtc1sxXS5wYXVzZWFibGUpCisJCXBmY19wYXJhbXMucnhfY29zMV9wcmlvcml0eV9tYXNrID0KKwkJCWJwLT5kY2J4X3BvcnRfcGFyYW1zLmV0cy5jb3NfcGFyYW1zWzFdLnByaV9iaXRtYXNrOworCisKKwkvKioKKwkgKiBSeCBDT1MgY29uZmlndXJhdGlvbgorCSAqIENoYW5naW5nIFBGQyBSWCBjb25maWd1cmF0aW9uIC4KKwkgKiBJbiBSWCBDT1MwIHdpbGwgYWx3YXlzIGJlIGNvbmZpZ3VyZWQgdG8gbG9zc3kgYW5kIENPUzEgdG8gbG9zc2xlc3MKKwkgKi8KKwlmb3IgKHByaSA9IDAgOyBwcmkgPCBNQVhfUEZDX1BSSU9SSVRJRVMgOyBwcmkrKykgeworCQlwcmlfYml0ID0gMSA8PCBwcmk7CisKKwkJaWYgKHByaV9iaXQgJiBEQ0JYX1BGQ19QUklfUEFVU0VfTUFTSyhicCkpCisJCQl2YWwgfD0gMSA8PCAocHJpICogNCk7CisJfQorCisJcGZjX3BhcmFtcy5wa3RfcHJpb3JpdHlfdG9fY29zID0gdmFsOworCisJLyogUlggQ09TMCAqLworCXBmY19wYXJhbXMubGxmY19sb3dfcHJpb3JpdHlfY2xhc3NlcyA9IDA7CisJLyogUlggQ09TMSAqLworCXBmY19wYXJhbXMubGxmY19oaWdoX3ByaW9yaXR5X2NsYXNzZXMgPSBEQ0JYX1BGQ19QUklfUEFVU0VfTUFTSyhicCk7CisKKwkvKiBCUkIgY29uZmlndXJhdGlvbiAqLworCXBmY19wYXJhbXMuY29zMF9wYXVzZWFibGUgPSBmYWxzZTsKKwlwZmNfcGFyYW1zLmNvczFfcGF1c2VhYmxlID0gdHJ1ZTsKKworCWJueDJ4X2FjcXVpcmVfcGh5X2xvY2soYnApOworCWJwLT5saW5rX3BhcmFtcy5mZWF0dXJlX2NvbmZpZ19mbGFncyB8PSBGRUFUVVJFX0NPTkZJR19QRkNfRU5BQkxFRDsKKwlibngyeF91cGRhdGVfcGZjKCZicC0+bGlua19wYXJhbXMsICZicC0+bGlua192YXJzLCAmcGZjX3BhcmFtcyk7CisJYm54MnhfcmVsZWFzZV9waHlfbG9jayhicCk7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X3BmY19jbGVhcihzdHJ1Y3QgYm54MnggKmJwKQoreworCXN0cnVjdCBibngyeF9uaWdfYnJiX3BmY19wb3J0X3BhcmFtcyBuaWdfcGFyYW1zID0gezB9OworCW5pZ19wYXJhbXMucGF1c2VfZW5hYmxlID0gMTsKKyNpZmRlZiBCTlgyWF9TQUZDCisJaWYgKGJwLT5mbGFncyAmIFNBRkNfVFhfRkxBRykgeworCQl1MzIgaGlnaCA9IDAsIGxvdyA9IDA7CisJCWludCBpOworCisJCWZvciAoaSA9IDA7IGkgPCBCTlgyWF9NQVhfUFJJT1JJVFk7IGkrKykgeworCQkJaWYgKGJwLT5wcmlfbWFwW2ldID09IDEpCisJCQkJaGlnaCB8PSAoMSA8PCBpKTsKKwkJCWlmIChicC0+cHJpX21hcFtpXSA9PSAwKQorCQkJCWxvdyB8PSAoMSA8PCBpKTsKKwkJfQorCisJCW5pZ19wYXJhbXMubGxmY19sb3dfcHJpb3JpdHlfY2xhc3NlcyA9IGhpZ2g7CisJCW5pZ19wYXJhbXMubGxmY19sb3dfcHJpb3JpdHlfY2xhc3NlcyA9IGxvdzsKKworCQluaWdfcGFyYW1zLnBhdXNlX2VuYWJsZSA9IDA7CisJCW5pZ19wYXJhbXMubGxmY19lbmFibGUgPSAxOworCQluaWdfcGFyYW1zLmxsZmNfb3V0X2VuID0gMTsKKwl9CisjZW5kaWYgLyogQk5YMlhfU0FGQyAqLworCWJueDJ4X2FjcXVpcmVfcGh5X2xvY2soYnApOworCWJwLT5saW5rX3BhcmFtcy5mZWF0dXJlX2NvbmZpZ19mbGFncyAmPSB+RkVBVFVSRV9DT05GSUdfUEZDX0VOQUJMRUQ7CisJYm54MnhfdXBkYXRlX3BmYygmYnAtPmxpbmtfcGFyYW1zLCAmYnAtPmxpbmtfdmFycywgJm5pZ19wYXJhbXMpOworCWJueDJ4X3JlbGVhc2VfcGh5X2xvY2soYnApOworfQorCitzdGF0aWMgdm9pZCAgYm54MnhfZHVtcF9kY2J4X2Rydl9wYXJhbShzdHJ1Y3QgYm54MnggKmJwLAorCQkJCSAgICAgICBzdHJ1Y3QgZGNieF9mZWF0dXJlcyAqZmVhdHVyZXMsCisJCQkJICAgICAgIHUzMiBlcnJvcikKK3sKKwl1OCBpID0gMDsKKwlEUChORVRJRl9NU0dfTElOSywgImxvY2FsX21pYi5lcnJvciAleFxuIiwgZXJyb3IpOworCisJLyogUEcgKi8KKwlEUChORVRJRl9NU0dfTElOSywKKwkgICAibG9jYWxfbWliLmZlYXR1cmVzLmV0cy5lbmFibGVkICV4XG4iLCBmZWF0dXJlcy0+ZXRzLmVuYWJsZWQpOworCWZvciAoaSA9IDA7IGkgPCBEQ0JYX01BWF9OVU1fUEdfQldfRU5UUklFUzsgaSsrKQorCQlEUChORVRJRl9NU0dfTElOSywKKwkJICAgImxvY2FsX21pYi5mZWF0dXJlcy5ldHMucGdfYndfdGJsWyVkXSAlZFxuIiwgaSwKKwkJICAgRENCWF9QR19CV19HRVQoZmVhdHVyZXMtPmV0cy5wZ19id190YmwsIGkpKTsKKwlmb3IgKGkgPSAwOyBpIDwgRENCWF9NQVhfTlVNX1BSSV9QR19FTlRSSUVTOyBpKyspCisJCURQKE5FVElGX01TR19MSU5LLAorCQkgICAibG9jYWxfbWliLmZlYXR1cmVzLmV0cy5wcmlfcGdfdGJsWyVkXSAlZFxuIiwgaSwKKwkJICAgRENCWF9QUklfUEdfR0VUKGZlYXR1cmVzLT5ldHMucHJpX3BnX3RibCwgaSkpOworCisJLyogcGZjICovCisJRFAoTkVUSUZfTVNHX0xJTkssICJkY2J4X2ZlYXR1cmVzLnBmYy5wcmlfZW5fYml0bWFwICV4XG4iLAorCQkJCQlmZWF0dXJlcy0+cGZjLnByaV9lbl9iaXRtYXApOworCURQKE5FVElGX01TR19MSU5LLCAiZGNieF9mZWF0dXJlcy5wZmMucGZjX2NhcHMgJXhcbiIsCisJCQkJCWZlYXR1cmVzLT5wZmMucGZjX2NhcHMpOworCURQKE5FVElGX01TR19MSU5LLCAiZGNieF9mZWF0dXJlcy5wZmMuZW5hYmxlZCAleFxuIiwKKwkJCQkJZmVhdHVyZXMtPnBmYy5lbmFibGVkKTsKKworCURQKE5FVElGX01TR19MSU5LLCAiZGNieF9mZWF0dXJlcy5hcHAuZGVmYXVsdF9wcmkgJXhcbiIsCisJCQkJCWZlYXR1cmVzLT5hcHAuZGVmYXVsdF9wcmkpOworCURQKE5FVElGX01TR19MSU5LLCAiZGNieF9mZWF0dXJlcy5hcHAudGNfc3VwcG9ydGVkICV4XG4iLAorCQkJCQlmZWF0dXJlcy0+YXBwLnRjX3N1cHBvcnRlZCk7CisJRFAoTkVUSUZfTVNHX0xJTkssICJkY2J4X2ZlYXR1cmVzLmFwcC5lbmFibGVkICV4XG4iLAorCQkJCQlmZWF0dXJlcy0+YXBwLmVuYWJsZWQpOworCWZvciAoaSA9IDA7IGkgPCBEQ0JYX01BWF9BUFBfUFJPVE9DT0w7IGkrKykgeworCQlEUChORVRJRl9NU0dfTElOSywKKwkJICAgImRjYnhfZmVhdHVyZXMuYXBwLmFwcF9wcmlfdGJsWyV4XS5hcHBfaWQgJXhcbiIsCisJCSAgIGksIGZlYXR1cmVzLT5hcHAuYXBwX3ByaV90YmxbaV0uYXBwX2lkKTsKKwkJRFAoTkVUSUZfTVNHX0xJTkssCisJCSAgICJkY2J4X2ZlYXR1cmVzLmFwcC5hcHBfcHJpX3RibFsleF0ucHJpX2JpdG1hcCAleFxuIiwKKwkJICAgaSwgZmVhdHVyZXMtPmFwcC5hcHBfcHJpX3RibFtpXS5wcmlfYml0bWFwKTsKKwkJRFAoTkVUSUZfTVNHX0xJTkssCisJCSAgICJkY2J4X2ZlYXR1cmVzLmFwcC5hcHBfcHJpX3RibFsleF0uYXBwQml0ZmllbGQgJXhcbiIsCisJCSAgIGksIGZlYXR1cmVzLT5hcHAuYXBwX3ByaV90YmxbaV0uYXBwQml0ZmllbGQpOworCX0KK30KKworc3RhdGljIHZvaWQgYm54MnhfZGNieF9nZXRfYXBfcHJpb3JpdHkoc3RydWN0IGJueDJ4ICpicCwKKwkJCQkgICAgICAgdTggcHJpX2JpdG1hcCwKKwkJCQkgICAgICAgdTggbGxmY190cmFmX3R5cGUpCit7CisJdTMyIHByaSA9IE1BWF9QRkNfUFJJT1JJVElFUzsKKwl1MzIgaW5kZXggPSBNQVhfUEZDX1BSSU9SSVRJRVMgLSAxOworCXUzMiBwcmlfbWFzazsKKwl1MzIgKnR0cCA9IGJwLT5kY2J4X3BvcnRfcGFyYW1zLmFwcC50cmFmZmljX3R5cGVfcHJpb3JpdHk7CisKKwkvKiBDaG9vc2UgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgKi8KKwl3aGlsZSAoKE1BWF9QRkNfUFJJT1JJVElFUyA9PSBwcmkpICYmICgwICE9IGluZGV4KSkgeworCQlwcmlfbWFzayA9IDEgPDwgaW5kZXg7CisJCWlmIChHRVRfRkxBR1MocHJpX2JpdG1hcCwgcHJpX21hc2spKQorCQkJcHJpID0gaW5kZXggOworCQlpbmRleC0tOworCX0KKworCWlmIChwcmkgPCBNQVhfUEZDX1BSSU9SSVRJRVMpCisJCXR0cFtsbGZjX3RyYWZfdHlwZV0gPSBtYXhfdCh1MzIsIHR0cFtsbGZjX3RyYWZfdHlwZV0sIHByaSk7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X2RjYnhfZ2V0X2FwX2ZlYXR1cmUoc3RydWN0IGJueDJ4ICpicCwKKwkJCQkgICBzdHJ1Y3QgZGNieF9hcHBfcHJpb3JpdHlfZmVhdHVyZSAqYXBwLAorCQkJCSAgIHUzMiBlcnJvcikgeworCXU4IGluZGV4OworCXUzMiAqdHRwID0gYnAtPmRjYnhfcG9ydF9wYXJhbXMuYXBwLnRyYWZmaWNfdHlwZV9wcmlvcml0eTsKKworCWlmIChHRVRfRkxBR1MoZXJyb3IsIERDQlhfTE9DQUxfQVBQX0VSUk9SKSkKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJEQ0JYX0xPQ0FMX0FQUF9FUlJPUlxuIik7CisKKwlpZiAoYXBwLT5lbmFibGVkICYmICFHRVRfRkxBR1MoZXJyb3IsIERDQlhfTE9DQUxfQVBQX0VSUk9SKSkgeworCisJCWJwLT5kY2J4X3BvcnRfcGFyYW1zLmFwcC5lbmFibGVkID0gdHJ1ZTsKKworCQlmb3IgKGluZGV4ID0gMCA7IGluZGV4IDwgTExGQ19EUklWRVJfVFJBRkZJQ19UWVBFX01BWDsgaW5kZXgrKykKKwkJCXR0cFtpbmRleF0gPSAwOworCisJCWlmIChhcHAtPmRlZmF1bHRfcHJpIDwgTUFYX1BGQ19QUklPUklUSUVTKQorCQkJdHRwW0xMRkNfVFJBRkZJQ19UWVBFX05XXSA9IGFwcC0+ZGVmYXVsdF9wcmk7CisKKwkJZm9yIChpbmRleCA9IDAgOyBpbmRleCA8IERDQlhfTUFYX0FQUF9QUk9UT0NPTDsgaW5kZXgrKykgeworCQkJc3RydWN0IGRjYnhfYXBwX3ByaW9yaXR5X2VudHJ5ICplbnRyeSA9CisJCQkJCQkJYXBwLT5hcHBfcHJpX3RibDsKKworCQkJaWYgKEdFVF9GTEFHUyhlbnRyeVtpbmRleF0uYXBwQml0ZmllbGQsCisJCQkJICAgICBEQ0JYX0FQUF9TRl9FVEhfVFlQRSkgJiYKKwkJCSAgIEVUSF9UWVBFX0ZDT0UgPT0gZW50cnlbaW5kZXhdLmFwcF9pZCkKKwkJCQlibngyeF9kY2J4X2dldF9hcF9wcmlvcml0eShicCwKKwkJCQkJCWVudHJ5W2luZGV4XS5wcmlfYml0bWFwLAorCQkJCQkJTExGQ19UUkFGRklDX1RZUEVfRkNPRSk7CisKKwkJCWlmIChHRVRfRkxBR1MoZW50cnlbaW5kZXhdLmFwcEJpdGZpZWxkLAorCQkJCSAgICAgRENCWF9BUFBfU0ZfUE9SVCkgJiYKKwkJCSAgIFRDUF9QT1JUX0lTQ1NJID09IGVudHJ5W2luZGV4XS5hcHBfaWQpCisJCQkJYm54MnhfZGNieF9nZXRfYXBfcHJpb3JpdHkoYnAsCisJCQkJCQllbnRyeVtpbmRleF0ucHJpX2JpdG1hcCwKKwkJCQkJCUxMRkNfVFJBRkZJQ19UWVBFX0lTQ1NJKTsKKwkJfQorCX0gZWxzZSB7CisJCURQKE5FVElGX01TR19MSU5LLCAiRENCWF9MT0NBTF9BUFBfRElTQUJMRURcbiIpOworCQlicC0+ZGNieF9wb3J0X3BhcmFtcy5hcHAuZW5hYmxlZCA9IGZhbHNlOworCQlmb3IgKGluZGV4ID0gMCA7IGluZGV4IDwgTExGQ19EUklWRVJfVFJBRkZJQ19UWVBFX01BWDsgaW5kZXgrKykKKwkJCXR0cFtpbmRleF0gPSBJTlZBTElEX1RSQUZGSUNfVFlQRV9QUklPUklUWTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X2RjYnhfZ2V0X2V0c19mZWF0dXJlKHN0cnVjdCBibngyeCAqYnAsCisJCQkJICAgICAgIHN0cnVjdCBkY2J4X2V0c19mZWF0dXJlICpldHMsCisJCQkJICAgICAgIHUzMiBlcnJvcikgeworCWludCBpID0gMDsKKwl1MzIgcGdfcHJpX29yZ2luYWxfc3ByZWFkW0RDQlhfTUFYX05VTV9QR19CV19FTlRSSUVTXSA9IHswfTsKKwlzdHJ1Y3QgcGdfaGVscF9kYXRhIHBnX2hlbHBfZGF0YTsKKwlzdHJ1Y3QgYm54MnhfZGNieF9jb3NfcGFyYW1zICpjb3NfcGFyYW1zID0KKwkJCWJwLT5kY2J4X3BvcnRfcGFyYW1zLmV0cy5jb3NfcGFyYW1zOworCisJbWVtc2V0KCZwZ19oZWxwX2RhdGEsIDAsIHNpemVvZihzdHJ1Y3QgcGdfaGVscF9kYXRhKSk7CisKKworCWlmIChHRVRfRkxBR1MoZXJyb3IsIERDQlhfTE9DQUxfRVRTX0VSUk9SKSkKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJEQ0JYX0xPQ0FMX0VUU19FUlJPUlxuIik7CisKKworCS8qIENsZWFuIHVwIG9sZCBzZXR0aW5ncyBvZiBldHMgb24gQ09TICovCisJZm9yIChpID0gMDsgaSA8IEUyX05VTV9PRl9DT1MgOyBpKyspIHsKKworCQljb3NfcGFyYW1zW2ldLnBhdXNlYWJsZSA9IGZhbHNlOworCQljb3NfcGFyYW1zW2ldLnN0cmljdCA9IEJOWDJYX0RDQlhfQ09TX05PVF9TVFJJQ1Q7CisJCWNvc19wYXJhbXNbaV0uYndfdGJsID0gRENCWF9JTlZBTElEX0NPU19CVzsKKwkJY29zX3BhcmFtc1tpXS5wcmlfYml0bWFzayA9IERDQlhfUEZDX1BSSV9HRVRfTk9OX1BBVVNFKGJwLCAwKTsKKwl9CisKKwlpZiAoYnAtPmRjYnhfcG9ydF9wYXJhbXMuYXBwLmVuYWJsZWQgJiYKKwkgICAhR0VUX0ZMQUdTKGVycm9yLCBEQ0JYX0xPQ0FMX0VUU19FUlJPUikgJiYKKwkgICBldHMtPmVuYWJsZWQpIHsKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJEQ0JYX0xPQ0FMX0VUU19FTkFCTEVcbiIpOworCQlicC0+ZGNieF9wb3J0X3BhcmFtcy5ldHMuZW5hYmxlZCA9IHRydWU7CisKKwkJYm54MnhfZGNieF9nZXRfZXRzX3ByaV9wZ190YmwoYnAsCisJCQkJCSAgICAgIHBnX3ByaV9vcmdpbmFsX3NwcmVhZCwKKwkJCQkJICAgICAgZXRzLT5wcmlfcGdfdGJsKTsKKworCQlibngyeF9kY2J4X2dldF9udW1fcGdfdHJhZl90eXBlKGJwLAorCQkJCQkJcGdfcHJpX29yZ2luYWxfc3ByZWFkLAorCQkJCQkJJnBnX2hlbHBfZGF0YSk7CisKKwkJYm54MnhfZGNieF9maWxsX2Nvc19wYXJhbXMoYnAsICZwZ19oZWxwX2RhdGEsCisJCQkJCSAgIGV0cywgcGdfcHJpX29yZ2luYWxfc3ByZWFkKTsKKworCX0gZWxzZSB7CisJCURQKE5FVElGX01TR19MSU5LLCAiRENCWF9MT0NBTF9FVFNfRElTQUJMRURcbiIpOworCQlicC0+ZGNieF9wb3J0X3BhcmFtcy5ldHMuZW5hYmxlZCA9IGZhbHNlOworCQlldHMtPnByaV9wZ190YmxbMF0gPSAwOworCisJCWZvciAoaSA9IDA7IGkgPCBEQ0JYX01BWF9OVU1fUFJJX1BHX0VOVFJJRVMgOyBpKyspCisJCQlEQ0JYX1BHX0JXX1NFVChldHMtPnBnX2J3X3RibCwgaSwgMSk7CisJfQorfQorCitzdGF0aWMgdm9pZCAgYm54MnhfZGNieF9nZXRfcGZjX2ZlYXR1cmUoc3RydWN0IGJueDJ4ICpicCwKKwkJCQkJc3RydWN0IGRjYnhfcGZjX2ZlYXR1cmUgKnBmYywgdTMyIGVycm9yKQoreworCisJaWYgKEdFVF9GTEFHUyhlcnJvciwgRENCWF9MT0NBTF9QRkNfRVJST1IpKQorCQlEUChORVRJRl9NU0dfTElOSywgIkRDQlhfTE9DQUxfUEZDX0VSUk9SXG4iKTsKKworCWlmIChicC0+ZGNieF9wb3J0X3BhcmFtcy5hcHAuZW5hYmxlZCAmJgorCSAgICFHRVRfRkxBR1MoZXJyb3IsIERDQlhfTE9DQUxfUEZDX0VSUk9SKSAmJgorCSAgIHBmYy0+ZW5hYmxlZCkgeworCQlicC0+ZGNieF9wb3J0X3BhcmFtcy5wZmMuZW5hYmxlZCA9IHRydWU7CisJCWJwLT5kY2J4X3BvcnRfcGFyYW1zLnBmYy5wcmlvcml0eV9ub25fcGF1c2VhYmxlX21hc2sgPQorCQkJfihwZmMtPnByaV9lbl9iaXRtYXApOworCX0gZWxzZSB7CisJCURQKE5FVElGX01TR19MSU5LLCAiRENCWF9MT0NBTF9QRkNfRElTQUJMRURcbiIpOworCQlicC0+ZGNieF9wb3J0X3BhcmFtcy5wZmMuZW5hYmxlZCA9IGZhbHNlOworCQlicC0+ZGNieF9wb3J0X3BhcmFtcy5wZmMucHJpb3JpdHlfbm9uX3BhdXNlYWJsZV9tYXNrID0gMDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X2dldF9kY2J4X2Rydl9wYXJhbShzdHJ1Y3QgYm54MnggKmJwLAorCQkJCSAgICAgc3RydWN0IGRjYnhfZmVhdHVyZXMgKmZlYXR1cmVzLAorCQkJCSAgICAgdTMyIGVycm9yKQoreworCWJueDJ4X2RjYnhfZ2V0X2FwX2ZlYXR1cmUoYnAsICZmZWF0dXJlcy0+YXBwLCBlcnJvcik7CisKKwlibngyeF9kY2J4X2dldF9wZmNfZmVhdHVyZShicCwgJmZlYXR1cmVzLT5wZmMsIGVycm9yKTsKKworCWJueDJ4X2RjYnhfZ2V0X2V0c19mZWF0dXJlKGJwLCAmZmVhdHVyZXMtPmV0cywgZXJyb3IpOworfQorCisjZGVmaW5lIERDQlhfTE9DQUxfTUlCX01BWF9UUllfUkVBRAkJKDEwMCkKK3N0YXRpYyBpbnQgYm54MnhfZGNieF9yZWFkX21pYihzdHJ1Y3QgYm54MnggKmJwLAorCQkJICAgICAgIHUzMiAqYmFzZV9taWJfYWRkciwKKwkJCSAgICAgICB1MzIgb2Zmc2V0LAorCQkJICAgICAgIGludCByZWFkX21pYl90eXBlKQoreworCWludCBtYXhfdHJ5X3JlYWQgPSAwLCBpOworCXUzMiAqYnVmZiwgbWliX3NpemUsIHByZWZpeF9zZXFfbnVtLCBzdWZmaXhfc2VxX251bTsKKwlzdHJ1Y3QgbGxkcF9yZW1vdGVfbWliICpyZW1vdGVfbWliIDsKKwlzdHJ1Y3QgbGxkcF9sb2NhbF9taWIgICpsb2NhbF9taWI7CisKKworCXN3aXRjaCAocmVhZF9taWJfdHlwZSkgeworCWNhc2UgRENCWF9SRUFEX0xPQ0FMX01JQjoKKwkJbWliX3NpemUgPSBzaXplb2Yoc3RydWN0IGxsZHBfbG9jYWxfbWliKTsKKwkJYnJlYWs7CisJY2FzZSBEQ0JYX1JFQURfUkVNT1RFX01JQjoKKwkJbWliX3NpemUgPSBzaXplb2Yoc3RydWN0IGxsZHBfcmVtb3RlX21pYik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAxOyAvKmVycm9yKi8KKwl9CisKKwlvZmZzZXQgKz0gQlBfUE9SVChicCkgKiBtaWJfc2l6ZTsKKworCWRvIHsKKwkJYnVmZiA9IGJhc2VfbWliX2FkZHI7CisJCWZvciAoaSA9IDA7IGkgPCBtaWJfc2l6ZTsgaSArPSA0LCBidWZmKyspCisJCQkqYnVmZiA9IFJFR19SRChicCwgb2Zmc2V0ICsgaSk7CisKKwkJbWF4X3RyeV9yZWFkKys7CisKKwkJc3dpdGNoIChyZWFkX21pYl90eXBlKSB7CisJCWNhc2UgRENCWF9SRUFEX0xPQ0FMX01JQjoKKwkJCWxvY2FsX21pYiA9IChzdHJ1Y3QgbGxkcF9sb2NhbF9taWIgKikgYmFzZV9taWJfYWRkcjsKKwkJCXByZWZpeF9zZXFfbnVtID0gbG9jYWxfbWliLT5wcmVmaXhfc2VxX251bTsKKwkJCXN1ZmZpeF9zZXFfbnVtID0gbG9jYWxfbWliLT5zdWZmaXhfc2VxX251bTsKKwkJCWJyZWFrOworCQljYXNlIERDQlhfUkVBRF9SRU1PVEVfTUlCOgorCQkJcmVtb3RlX21pYiA9IChzdHJ1Y3QgbGxkcF9yZW1vdGVfbWliICopIGJhc2VfbWliX2FkZHI7CisJCQlwcmVmaXhfc2VxX251bSA9IHJlbW90ZV9taWItPnByZWZpeF9zZXFfbnVtOworCQkJc3VmZml4X3NlcV9udW0gPSByZW1vdGVfbWliLT5zdWZmaXhfc2VxX251bTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIDE7IC8qZXJyb3IqLworCQl9CisJfSB3aGlsZSAoKHByZWZpeF9zZXFfbnVtICE9IHN1ZmZpeF9zZXFfbnVtKSAmJgorCSAgICAgICAobWF4X3RyeV9yZWFkIDwgRENCWF9MT0NBTF9NSUJfTUFYX1RSWV9SRUFEKSk7CisKKwlpZiAobWF4X3RyeV9yZWFkID49IERDQlhfTE9DQUxfTUlCX01BWF9UUllfUkVBRCkgeworCQlCTlgyWF9FUlIoIk1JQiBjb3VsZCBub3QgYmUgcmVhZFxuIik7CisJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBibngyeF9wZmNfc2V0X3BmYyhzdHJ1Y3QgYm54MnggKmJwKQoreworCWlmIChDSElQX0lTX0UyKGJwKSkgeworCQlpZiAoQlBfUE9SVChicCkpIHsKKwkJCUJOWDJYX0VSUigiNCBwb3J0IG1vZGUgaXMgbm90IHN1cHBvcnRlZCIpOworCQkJcmV0dXJuOworCQl9CisKKwkJaWYgKGJwLT5kY2J4X3BvcnRfcGFyYW1zLnBmYy5lbmFibGVkKQorCisJCQkvKiAxLiBGaWxscyB1cCBjb21tb24gUEZDIHN0cnVjdHVyZXMgaWYgcmVxdWlyZWQuKi8KKwkJCS8qIDIuIENvbmZpZ3VyZSBOSUcsIE1BQyBhbmQgQlJCIHZpYSB0aGUgZWxpbms6CisJCQkgKiAgICBlbGluayBtdXN0IGZpcnN0IGNoZWNrIGlmIEJNQUMgaXMgbm90IGluIHJlc2V0CisJCQkgKiAgICBhbmQgb25seSB0aGVuIGNvbmZpZ3VyZXMgdGhlIEJNQUMKKwkJCSAqICAgIE9yLCBjb25maWd1cmUgRU1BQy4KKwkJCSAqLworCQkJYm54MnhfcGZjX3NldChicCk7CisKKwkJZWxzZQorCQkJYm54MnhfcGZjX2NsZWFyKGJwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X2RjYnhfc3RvcF9od190eChzdHJ1Y3QgYm54MnggKmJwKQoreworCURQKE5FVElGX01TR19MSU5LLCAic2VuZGluZyBTVE9QIFRSQUZGSUNcbiIpOworCWJueDJ4X3NwX3Bvc3QoYnAsIFJBTVJPRF9DTURfSURfQ09NTU9OX1NUT1BfVFJBRkZJQywKKwkJICAgICAgMCAvKiBjb25uZWN0aW9ubGVzcyAqLywKKwkJICAgICAgMCAvKiBkYXRhSGkgaXMgemVybyAqLywKKwkJICAgICAgMCAvKiBkYXRhTG8gaXMgemVybyAqLywKKwkJICAgICAgMSAvKiBjb21tb24gKi8pOworfQorCitzdGF0aWMgdm9pZCBibngyeF9kY2J4X3Jlc3VtZV9od190eChzdHJ1Y3QgYm54MnggKmJwKQoreworCWJueDJ4X3BmY19md19zdHJ1Y3RfZTIoYnApOworCURQKE5FVElGX01TR19MSU5LLCAic2VuZGluZyBTVEFSVCBUUkFGRklDXG4iKTsKKwlibngyeF9zcF9wb3N0KGJwLCBSQU1ST0RfQ01EX0lEX0NPTU1PTl9TVEFSVF9UUkFGRklDLAorCQkgICAgICAwLCAvKiBjb25uZWN0aW9ubGVzcyAqLworCQkgICAgICBVNjRfSEkoYm54Mnhfc3BfbWFwcGluZyhicCwgcGZjX2NvbmZpZykpLAorCQkgICAgICBVNjRfTE8oYm54Mnhfc3BfbWFwcGluZyhicCwgcGZjX2NvbmZpZykpLAorCQkgICAgICAxICAvKiBjb21tbW9uICovKTsKK30KKworc3RhdGljIHZvaWQgYm54MnhfZGNieF91cGRhdGVfZXRzX3BhcmFtcyhzdHJ1Y3QgYm54MnggKmJwKQoreworCXN0cnVjdCBibngyeF9kY2J4X3BnX3BhcmFtcyAqZXRzID0gJihicC0+ZGNieF9wb3J0X3BhcmFtcy5ldHMpOworCXU4CXN0YXR1cyA9IDA7CisKKwlibngyeF9ldHNfZGlzYWJsZWQoJmJwLT5saW5rX3BhcmFtcyk7CisKKwlpZiAoIWV0cy0+ZW5hYmxlZCkKKwkJcmV0dXJuOworCisJaWYgKChldHMtPm51bV9vZl9jb3MgPT0gMCkgfHwgKGV0cy0+bnVtX29mX2NvcyA+IEUyX05VTV9PRl9DT1MpKSB7CisJCUJOWDJYX0VSUigiaWxsZWdhbCBudW0gb2YgY29zPSAleCIsIGV0cy0+bnVtX29mX2Nvcyk7CisJCXJldHVybjsKKwl9CisKKwkvKiB2YWxpZCBDT1MgZW50cmllcyAqLworCWlmIChldHMtPm51bV9vZl9jb3MgPT0gMSkgICAvKiBubyBFVFMgKi8KKwkJcmV0dXJuOworCisJLyogc2FuaXR5ICovCisJaWYgKCgoQk5YMlhfRENCWF9DT1NfTk9UX1NUUklDVCA9PSBldHMtPmNvc19wYXJhbXNbMF0uc3RyaWN0KSAmJgorCSAgICAgKERDQlhfSU5WQUxJRF9DT1NfQlcgPT0gZXRzLT5jb3NfcGFyYW1zWzBdLmJ3X3RibCkpIHx8CisJICAgICgoQk5YMlhfRENCWF9DT1NfTk9UX1NUUklDVCA9PSBldHMtPmNvc19wYXJhbXNbMV0uc3RyaWN0KSAmJgorCSAgICAgKERDQlhfSU5WQUxJRF9DT1NfQlcgPT0gZXRzLT5jb3NfcGFyYW1zWzFdLmJ3X3RibCkpKSB7CisJCUJOWDJYX0VSUigiYWxsIENPUyBzaG91bGQgaGF2ZSBhdCBsZWFzdCBid19saW1pdCBvciBzdHJpY3QiCisJCQkgICAgImV0cy0+Y29zX3BhcmFtc1swXS5zdHJpY3Q9ICV4IgorCQkJICAgICJldHMtPmNvc19wYXJhbXNbMF0uYndfdGJsPSAleCIKKwkJCSAgICAiZXRzLT5jb3NfcGFyYW1zWzFdLnN0cmljdD0gJXgiCisJCQkgICAgImV0cy0+Y29zX3BhcmFtc1sxXS5id190Ymw9ICV4IiwKKwkJCSAgZXRzLT5jb3NfcGFyYW1zWzBdLnN0cmljdCwKKwkJCSAgZXRzLT5jb3NfcGFyYW1zWzBdLmJ3X3RibCwKKwkJCSAgZXRzLT5jb3NfcGFyYW1zWzFdLnN0cmljdCwKKwkJCSAgZXRzLT5jb3NfcGFyYW1zWzFdLmJ3X3RibCk7CisJCXJldHVybjsKKwl9CisJLyogSWYgd2Ugam9pbiBhIGdyb3VwIGFuZCB0aGVyZSBpcyBid190YmwgYW5kIHN0cmljdCB0aGVuIGJ3IHJ1bGVzICovCisJaWYgKChEQ0JYX0lOVkFMSURfQ09TX0JXICE9IGV0cy0+Y29zX3BhcmFtc1swXS5id190YmwpICYmCisJICAgIChEQ0JYX0lOVkFMSURfQ09TX0JXICE9IGV0cy0+Y29zX3BhcmFtc1sxXS5id190YmwpKSB7CisJCXUzMiBid190YmxfMCA9IGV0cy0+Y29zX3BhcmFtc1swXS5id190Ymw7CisJCXUzMiBid190YmxfMSA9IGV0cy0+Y29zX3BhcmFtc1sxXS5id190Ymw7CisJCS8qIERvIG5vdCBhbGxvdyAwLTEwMCBjb25maWd1cmF0aW9uCisJCSAqIHNpbmNlIFBCRiBkb2VzIG5vdCBzdXBwb3J0IGl0CisJCSAqIGZvcmNlIDEtOTkgaW5zdGVhZAorCQkgKi8KKwkJaWYgKGJ3X3RibF8wID09IDApIHsKKwkJCWJ3X3RibF8wID0gMTsKKwkJCWJ3X3RibF8xID0gOTk7CisJCX0gZWxzZSBpZiAoYndfdGJsXzEgPT0gMCkgeworCQkJYndfdGJsXzEgPSAxOworCQkJYndfdGJsXzAgPSA5OTsKKwkJfQorCisJCWJueDJ4X2V0c19id19saW1pdCgmYnAtPmxpbmtfcGFyYW1zLCBid190YmxfMCwgYndfdGJsXzEpOworCX0gZWxzZSB7CisJCWlmIChldHMtPmNvc19wYXJhbXNbMF0uc3RyaWN0ID09IEJOWDJYX0RDQlhfQ09TX0hJR0hfU1RSSUNUKQorCQkJc3RhdHVzID0gYm54MnhfZXRzX3N0cmljdCgmYnAtPmxpbmtfcGFyYW1zLCAwKTsKKwkJZWxzZSBpZiAoZXRzLT5jb3NfcGFyYW1zWzFdLnN0cmljdAorCQkJCQkJPT0gQk5YMlhfRENCWF9DT1NfSElHSF9TVFJJQ1QpCisJCQlzdGF0dXMgPSBibngyeF9ldHNfc3RyaWN0KCZicC0+bGlua19wYXJhbXMsIDEpOworCisJCWlmIChzdGF0dXMpCisJCQlCTlgyWF9FUlIoInVwZGF0ZV9ldHNfcGFyYW1zIGZhaWxlZFxuIik7CisJfQorfQorCitzdGF0aWMgaW50IGJueDJ4X2RjYnhfcmVhZF9zaG1lbV9uZWdfcmVzdWx0cyhzdHJ1Y3QgYm54MnggKmJwKQoreworCXN0cnVjdCBsbGRwX2xvY2FsX21pYiBsb2NhbF9taWIgPSB7MH07CisJdTMyIGRjYnhfbmVnX3Jlc19vZmZzZXQgPSBTSE1FTTJfUkQoYnAsIGRjYnhfbmVnX3Jlc19vZmZzZXQpOworCWludCByYzsKKworCURQKE5FVElGX01TR19MSU5LLCAiZGNieF9uZWdfcmVzX29mZnNldCAweCV4XG4iLCBkY2J4X25lZ19yZXNfb2Zmc2V0KTsKKworCWlmIChTSE1FTV9EQ0JYX05FR19SRVNfTk9ORSA9PSBkY2J4X25lZ19yZXNfb2Zmc2V0KSB7CisJCUJOWDJYX0VSUigiRlcgZG9lc24ndCBzdXBwb3J0IGRjYnhfbmVnX3Jlc19vZmZzZXRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmMgPSBibngyeF9kY2J4X3JlYWRfbWliKGJwLCAodTMyICopJmxvY2FsX21pYiwgZGNieF9uZWdfcmVzX29mZnNldCwKKwkJCQkgRENCWF9SRUFEX0xPQ0FMX01JQik7CisKKwlpZiAocmMpIHsKKwkJQk5YMlhfRVJSKCJGYWlsZCB0byByZWFkIGxvY2FsIG1pYiBmcm9tIEZXXG4iKTsKKwkJcmV0dXJuIHJjOworCX0KKworCS8qIHNhdmUgZmVhdHVyZXMgYW5kIGVycm9yICovCisJYnAtPmRjYnhfbG9jYWxfZmVhdCA9IGxvY2FsX21pYi5mZWF0dXJlczsKKwlicC0+ZGNieF9lcnJvciA9IGxvY2FsX21pYi5lcnJvcjsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBibngyeF9kY2J4X3NldF9wYXJhbXMoc3RydWN0IGJueDJ4ICpicCwgdTMyIHN0YXRlKQoreworCXN3aXRjaCAoc3RhdGUpIHsKKwljYXNlIEJOWDJYX0RDQlhfU1RBVEVfTkVHX1JFQ0VJVkVEOgorCQl7CisJCQlEUChORVRJRl9NU0dfTElOSywgIkJOWDJYX0RDQlhfU1RBVEVfTkVHX1JFQ0VJVkVEXG4iKTsKKworCQkJLyogUmVhZCBuZWcgcmVzdWx0cyBpZiBkY2J4IGlzIGluIHRoZSBGVyAqLworCQkJaWYgKGJueDJ4X2RjYnhfcmVhZF9zaG1lbV9uZWdfcmVzdWx0cyhicCkpCisJCQkJcmV0dXJuOworCisJCQlibngyeF9kdW1wX2RjYnhfZHJ2X3BhcmFtKGJwLCAmYnAtPmRjYnhfbG9jYWxfZmVhdCwKKwkJCQkJCSAgYnAtPmRjYnhfZXJyb3IpOworCisJCQlibngyeF9nZXRfZGNieF9kcnZfcGFyYW0oYnAsICZicC0+ZGNieF9sb2NhbF9mZWF0LAorCQkJCQkJIGJwLT5kY2J4X2Vycm9yKTsKKworCQkJaWYgKGJwLT5zdGF0ZSAhPSBCTlgyWF9TVEFURV9PUEVOSU5HX1dBSVQ0X0xPQUQpIHsKKwkJCQlibngyeF9kY2J4X3N0b3BfaHdfdHgoYnApOworCQkJCXJldHVybjsKKwkJCX0KKwkJCS8qIGZhbGwgdGhyb3VnaCAqLworCQl9CisJY2FzZSBCTlgyWF9EQ0JYX1NUQVRFX1RYX1BBVVNFRDoKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJCTlgyWF9EQ0JYX1NUQVRFX1RYX1BBVVNFRFxuIik7CisJCWJueDJ4X3BmY19zZXRfcGZjKGJwKTsKKworCQlibngyeF9kY2J4X3VwZGF0ZV9ldHNfcGFyYW1zKGJwKTsKKwkJaWYgKGJwLT5zdGF0ZSAhPSBCTlgyWF9TVEFURV9PUEVOSU5HX1dBSVQ0X0xPQUQpIHsKKwkJCWJueDJ4X2RjYnhfcmVzdW1lX2h3X3R4KGJwKTsKKwkJCXJldHVybjsKKwkJfQorCQkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIEJOWDJYX0RDQlhfU1RBVEVfVFhfUkVMRUFTRUQ6CisJCURQKE5FVElGX01TR19MSU5LLCAiQk5YMlhfRENCWF9TVEFURV9UWF9SRUxFQVNFRFxuIik7CisJCWlmIChicC0+c3RhdGUgIT0gQk5YMlhfU1RBVEVfT1BFTklOR19XQUlUNF9MT0FEKQorCQkJYm54MnhfZndfY29tbWFuZChicCwgRFJWX01TR19DT0RFX0RDQlhfUE1GX0RSVl9PSywgMCk7CisKKwkJcmV0dXJuOworCWRlZmF1bHQ6CisJCUJOWDJYX0VSUigiVW5rbm93biBEQ0JYX1NUQVRFXG4iKTsKKwl9Cit9CisKKworI2RlZmluZSBMTERQX1NUQVRTX09GRlNFVChicCkJCShCUF9QT1JUKGJwKSpcCisJCQkJCXNpemVvZihzdHJ1Y3QgbGxkcF9kY2J4X3N0YXQpKQorCisvKiBjYWxjdWxhdGUgc3RydWN0IG9mZnNldCBpbiBhcnJheSBhY2NvcmRpbmcgdG8gY2hpcCBpbmZvcm1hdGlvbiAqLworI2RlZmluZSBMTERQX1BBUkFNU19PRkZTRVQoYnApCQkoQlBfUE9SVChicCkqc2l6ZW9mKHN0cnVjdCBsbGRwX3BhcmFtcykpCisKKyNkZWZpbmUgTExEUF9BRE1JTl9NSUJfT0ZGU0VUKGJwKQkoUE9SVF9NQVgqc2l6ZW9mKHN0cnVjdCBsbGRwX3BhcmFtcykgKyBcCisJCQkJICAgICAgQlBfUE9SVChicCkqc2l6ZW9mKHN0cnVjdCBsbGRwX2FkbWluX21pYikpCisKK3N0YXRpYyB2b2lkIGJueDJ4X2RjYnhfbGxkcF91cGRhdGVkX3BhcmFtcyhzdHJ1Y3QgYm54MnggKmJwLAorCQkJCQkgICB1MzIgZGNieF9sbGRwX3BhcmFtc19vZmZzZXQpCit7CisJc3RydWN0IGxsZHBfcGFyYW1zIGxsZHBfcGFyYW1zID0gezB9OworCXUzMiBpID0gMCwgKmJ1ZmYgPSBOVUxMOworCXUzMiBvZmZzZXQgPSBkY2J4X2xsZHBfcGFyYW1zX29mZnNldCArIExMRFBfUEFSQU1TX09GRlNFVChicCk7CisKKwlEUChORVRJRl9NU0dfTElOSywgImxsZHBfb2Zmc2V0IDB4JXhcbiIsIG9mZnNldCk7CisKKwlpZiAoKGJwLT5sbGRwX2NvbmZpZ19wYXJhbXMub3ZlcndyaXRlX3NldHRpbmdzID09CisJCQkJQk5YMlhfRENCWF9PVkVSV1JJVEVfU0VUVElOR1NfRU5BQkxFKSkgeworCQkvKiBSZWFkIHRoZSBkYXRhIGZpcnN0ICovCisJCWJ1ZmYgPSAodTMyICopJmxsZHBfcGFyYW1zOworCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHN0cnVjdCBsbGRwX3BhcmFtcyk7IGkgKz0gNCwgIGJ1ZmYrKykKKwkJCSpidWZmID0gUkVHX1JEKGJwLCAob2Zmc2V0ICsgaSkpOworCisJCWxsZHBfcGFyYW1zLm1zZ190eF9ob2xkID0KKwkJCSh1OClicC0+bGxkcF9jb25maWdfcGFyYW1zLm1zZ190eF9ob2xkOworCQlsbGRwX3BhcmFtcy5tc2dfZmFzdF90eF9pbnRlcnZhbCA9CisJCQkodTgpYnAtPmxsZHBfY29uZmlnX3BhcmFtcy5tc2dfZmFzdF90eDsKKwkJbGxkcF9wYXJhbXMudHhfY3JkX21heCA9CisJCQkodTgpYnAtPmxsZHBfY29uZmlnX3BhcmFtcy50eF9jcmVkaXRfbWF4OworCQlsbGRwX3BhcmFtcy5tc2dfdHhfaW50ZXJ2YWwgPQorCQkJKHU4KWJwLT5sbGRwX2NvbmZpZ19wYXJhbXMubXNnX3R4X2ludGVydmFsOworCQlsbGRwX3BhcmFtcy50eF9mYXN0ID0KKwkJCSh1OClicC0+bGxkcF9jb25maWdfcGFyYW1zLnR4X2Zhc3Q7CisKKwkJLyogV3JpdGUgdGhlIGRhdGEuKi8KKwkJYnVmZiA9ICh1MzIgKikmbGxkcF9wYXJhbXM7CisJCWZvciAoaSA9IDA7IGkgPCBzaXplb2Yoc3RydWN0IGxsZHBfcGFyYW1zKTsgaSArPSA0LCBidWZmKyspCisJCQlSRUdfV1IoYnAsIChvZmZzZXQgKyBpKSAsICpidWZmKTsKKworCisJfSBlbHNlIGlmIChCTlgyWF9EQ0JYX09WRVJXUklURV9TRVRUSU5HU19FTkFCTEUgPT0KKwkJCQlicC0+bGxkcF9jb25maWdfcGFyYW1zLm92ZXJ3cml0ZV9zZXR0aW5ncykKKwkJYnAtPmxsZHBfY29uZmlnX3BhcmFtcy5vdmVyd3JpdGVfc2V0dGluZ3MgPQorCQkJCUJOWDJYX0RDQlhfT1ZFUldSSVRFX1NFVFRJTkdTX0lOVkFMSUQ7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X2RjYnhfYWRtaW5fbWliX3VwZGF0ZWRfcGFyYW1zKHN0cnVjdCBibngyeCAqYnAsCisJCQkJdTMyIGRjYnhfbGxkcF9wYXJhbXNfb2Zmc2V0KQoreworCXN0cnVjdCBsbGRwX2FkbWluX21pYiBhZG1pbl9taWI7CisJdTMyIGksIG90aGVyX3RyYWZfdHlwZSA9IFBSRURFRklORURfQVBQX0lEWF9NQVgsIHRyYWZfdHlwZSA9IDA7CisJdTMyICpidWZmOworCXUzMiBvZmZzZXQgPSBkY2J4X2xsZHBfcGFyYW1zX29mZnNldCArIExMRFBfQURNSU5fTUlCX09GRlNFVChicCk7CisKKwkvKnNob3J0Y3V0cyovCisJc3RydWN0IGRjYnhfZmVhdHVyZXMgKmFmID0gJmFkbWluX21pYi5mZWF0dXJlczsKKwlzdHJ1Y3QgYm54MnhfY29uZmlnX2RjYnhfcGFyYW1zICpkcCA9ICZicC0+ZGNieF9jb25maWdfcGFyYW1zOworCisJbWVtc2V0KCZhZG1pbl9taWIsIDAsIHNpemVvZihzdHJ1Y3QgbGxkcF9hZG1pbl9taWIpKTsKKwlidWZmID0gKHUzMiAqKSZhZG1pbl9taWI7CisJLyogUmVhZCB0aGUgZGF0YSBmaXJzdCAqLworCWZvciAoaSA9IDA7IGkgPCBzaXplb2Yoc3RydWN0IGxsZHBfYWRtaW5fbWliKTsgaSArPSA0LCBidWZmKyspCisJCSpidWZmID0gUkVHX1JEKGJwLCAob2Zmc2V0ICsgaSkpOworCisJaWYgKGJwLT5kY2J4X2VuYWJsZWQgPT0gQk5YMlhfRENCWF9FTkFCTEVEX09OX05FR19PTikKKwkJU0VUX0ZMQUdTKGFkbWluX21pYi52ZXJfY2ZnX2ZsYWdzLCBEQ0JYX0RDQlhfRU5BQkxFRCk7CisJZWxzZQorCQlSRVNFVF9GTEFHUyhhZG1pbl9taWIudmVyX2NmZ19mbGFncywgRENCWF9EQ0JYX0VOQUJMRUQpOworCisJaWYgKChCTlgyWF9EQ0JYX09WRVJXUklURV9TRVRUSU5HU19FTkFCTEUgPT0KKwkJCQlkcC0+b3ZlcndyaXRlX3NldHRpbmdzKSkgeworCQlSRVNFVF9GTEFHUyhhZG1pbl9taWIudmVyX2NmZ19mbGFncywgRENCWF9DRUVfVkVSU0lPTl9NQVNLKTsKKwkJYWRtaW5fbWliLnZlcl9jZmdfZmxhZ3MgfD0KKwkJCShkcC0+YWRtaW5fZGNieF92ZXJzaW9uIDw8IERDQlhfQ0VFX1ZFUlNJT05fU0hJRlQpICYKKwkJCSBEQ0JYX0NFRV9WRVJTSU9OX01BU0s7CisKKwkJYWYtPmV0cy5lbmFibGVkID0gKHU4KWRwLT5hZG1pbl9ldHNfZW5hYmxlOworCisJCWFmLT5wZmMuZW5hYmxlZCA9ICh1OClkcC0+YWRtaW5fcGZjX2VuYWJsZTsKKworCQkvKiBGT1IgSUVFRSBkcC0+YWRtaW5fdGNfc3VwcG9ydGVkX3R4X2VuYWJsZSAqLworCQlpZiAoZHAtPmFkbWluX2V0c19jb25maWd1cmF0aW9uX3R4X2VuYWJsZSkKKwkJCVNFVF9GTEFHUyhhZG1pbl9taWIudmVyX2NmZ19mbGFncywKKwkJCQkgIERDQlhfRVRTX0NPTkZJR19UWF9FTkFCTEVEKTsKKwkJZWxzZQorCQkJUkVTRVRfRkxBR1MoYWRtaW5fbWliLnZlcl9jZmdfZmxhZ3MsCisJCQkJICAgIERDQlhfRVRTX0NPTkZJR19UWF9FTkFCTEVEKTsKKwkJLyogRm9yIElFRUUgYWRtaW5fZXRzX3JlY29tbWVuZGF0aW9uX3R4X2VuYWJsZSAqLworCQlpZiAoZHAtPmFkbWluX3BmY190eF9lbmFibGUpCisJCQlTRVRfRkxBR1MoYWRtaW5fbWliLnZlcl9jZmdfZmxhZ3MsCisJCQkJICBEQ0JYX1BGQ19DT05GSUdfVFhfRU5BQkxFRCk7CisJCWVsc2UKKwkJCVJFU0VUX0ZMQUdTKGFkbWluX21pYi52ZXJfY2ZnX2ZsYWdzLAorCQkJCSAgRENCWF9QRkNfQ09ORklHX1RYX0VOQUJMRUQpOworCisJCWlmIChkcC0+YWRtaW5fYXBwbGljYXRpb25fcHJpb3JpdHlfdHhfZW5hYmxlKQorCQkJU0VUX0ZMQUdTKGFkbWluX21pYi52ZXJfY2ZnX2ZsYWdzLAorCQkJCSAgRENCWF9BUFBfQ09ORklHX1RYX0VOQUJMRUQpOworCQllbHNlCisJCQlSRVNFVF9GTEFHUyhhZG1pbl9taWIudmVyX2NmZ19mbGFncywKKwkJCQkgIERDQlhfQVBQX0NPTkZJR19UWF9FTkFCTEVEKTsKKworCQlpZiAoZHAtPmFkbWluX2V0c193aWxsaW5nKQorCQkJU0VUX0ZMQUdTKGFkbWluX21pYi52ZXJfY2ZnX2ZsYWdzLCBEQ0JYX0VUU19XSUxMSU5HKTsKKwkJZWxzZQorCQkJUkVTRVRfRkxBR1MoYWRtaW5fbWliLnZlcl9jZmdfZmxhZ3MsIERDQlhfRVRTX1dJTExJTkcpOworCQkvKiBGb3IgSUVFRSBhZG1pbl9ldHNfcmVjb192YWxpZCAqLworCQlpZiAoZHAtPmFkbWluX3BmY193aWxsaW5nKQorCQkJU0VUX0ZMQUdTKGFkbWluX21pYi52ZXJfY2ZnX2ZsYWdzLCBEQ0JYX1BGQ19XSUxMSU5HKTsKKwkJZWxzZQorCQkJUkVTRVRfRkxBR1MoYWRtaW5fbWliLnZlcl9jZmdfZmxhZ3MsIERDQlhfUEZDX1dJTExJTkcpOworCisJCWlmIChkcC0+YWRtaW5fYXBwX3ByaW9yaXR5X3dpbGxpbmcpCisJCQlTRVRfRkxBR1MoYWRtaW5fbWliLnZlcl9jZmdfZmxhZ3MsIERDQlhfQVBQX1dJTExJTkcpOworCQllbHNlCisJCQlSRVNFVF9GTEFHUyhhZG1pbl9taWIudmVyX2NmZ19mbGFncywgRENCWF9BUFBfV0lMTElORyk7CisKKwkJZm9yIChpID0gMCA7IGkgPCBEQ0JYX01BWF9OVU1fUEdfQldfRU5UUklFUzsgaSsrKSB7CisJCQlEQ0JYX1BHX0JXX1NFVChhZi0+ZXRzLnBnX2J3X3RibCwgaSwKKwkJCQkodTgpZHAtPmFkbWluX2NvbmZpZ3VyYXRpb25fYndfcHJlY2VudGFnZVtpXSk7CisKKwkJCURQKE5FVElGX01TR19MSU5LLCAicGdfYndfdGJsWyVkXSA9ICUwMnhcbiIsCisJCQkgICBpLCBEQ0JYX1BHX0JXX0dFVChhZi0+ZXRzLnBnX2J3X3RibCwgaSkpOworCQl9CisKKwkJZm9yIChpID0gMDsgaSA8IERDQlhfTUFYX05VTV9QUklfUEdfRU5UUklFUzsgaSsrKSB7CisJCQlEQ0JYX1BSSV9QR19TRVQoYWYtPmV0cy5wcmlfcGdfdGJsLCBpLAorCQkJCQkodTgpZHAtPmFkbWluX2NvbmZpZ3VyYXRpb25fZXRzX3BnW2ldKTsKKworCQkJRFAoTkVUSUZfTVNHX0xJTkssICJwcmlfcGdfdGJsWyVkXSA9ICUwMnhcbiIsCisJCQkgICBpLCBEQ0JYX1BSSV9QR19HRVQoYWYtPmV0cy5wcmlfcGdfdGJsLCBpKSk7CisJCX0KKworCQkvKkZvciBJRUVFIGFkbWluX3JlY29tbWVuZGF0aW9uX2J3X3ByZWNlbnRhZ2UKKwkJICpGb3IgSUVFRSBhZG1pbl9yZWNvbW1lbmRhdGlvbl9ldHNfcGcgKi8KKwkJYWYtPnBmYy5wcmlfZW5fYml0bWFwID0gKHU4KWRwLT5hZG1pbl9wZmNfYml0bWFwOworCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCQlpZiAoZHAtPmFkbWluX3ByaW9yaXR5X2FwcF90YWJsZVtpXS52YWxpZCkgeworCQkJCXN0cnVjdCBibngyeF9hZG1pbl9wcmlvcml0eV9hcHBfdGFibGUgKnRhYmxlID0KKwkJCQkJZHAtPmFkbWluX3ByaW9yaXR5X2FwcF90YWJsZTsKKwkJCQlpZiAoKEVUSF9UWVBFX0ZDT0UgPT0gdGFibGVbaV0uYXBwX2lkKSAmJgorCQkJCSAgIChUUkFGRklDX1RZUEVfRVRIID09IHRhYmxlW2ldLnRyYWZmaWNfdHlwZSkpCisJCQkJCXRyYWZfdHlwZSA9IEZDT0VfQVBQX0lEWDsKKwkJCQllbHNlIGlmICgoVENQX1BPUlRfSVNDU0kgPT0gdGFibGVbaV0uYXBwX2lkKSAmJgorCQkJCSAgIChUUkFGRklDX1RZUEVfUE9SVCA9PSB0YWJsZVtpXS50cmFmZmljX3R5cGUpKQorCQkJCQl0cmFmX3R5cGUgPSBJU0NTSV9BUFBfSURYOworCQkJCWVsc2UKKwkJCQkJdHJhZl90eXBlID0gb3RoZXJfdHJhZl90eXBlKys7CisKKwkJCQlhZi0+YXBwLmFwcF9wcmlfdGJsW3RyYWZfdHlwZV0uYXBwX2lkID0KKwkJCQkJdGFibGVbaV0uYXBwX2lkOworCisJCQkJYWYtPmFwcC5hcHBfcHJpX3RibFt0cmFmX3R5cGVdLnByaV9iaXRtYXAgPQorCQkJCQkodTgpKDEgPDwgdGFibGVbaV0ucHJpb3JpdHkpOworCisJCQkJYWYtPmFwcC5hcHBfcHJpX3RibFt0cmFmX3R5cGVdLmFwcEJpdGZpZWxkID0KKwkJCQkgICAgKERDQlhfQVBQX0VOVFJZX1ZBTElEKTsKKworCQkJCWFmLT5hcHAuYXBwX3ByaV90YmxbdHJhZl90eXBlXS5hcHBCaXRmaWVsZCB8PQorCQkJCSAgIChUUkFGRklDX1RZUEVfRVRIID09IHRhYmxlW2ldLnRyYWZmaWNfdHlwZSkgPworCQkJCQlEQ0JYX0FQUF9TRl9FVEhfVFlQRSA6IERDQlhfQVBQX1NGX1BPUlQ7CisJCQl9CisJCX0KKworCQlhZi0+YXBwLmRlZmF1bHRfcHJpID0gKHU4KWRwLT5hZG1pbl9kZWZhdWx0X3ByaW9yaXR5OworCisJfSBlbHNlIGlmIChCTlgyWF9EQ0JYX09WRVJXUklURV9TRVRUSU5HU19FTkFCTEUgPT0KKwkJCQkJCWRwLT5vdmVyd3JpdGVfc2V0dGluZ3MpCisJCWRwLT5vdmVyd3JpdGVfc2V0dGluZ3MgPSBCTlgyWF9EQ0JYX09WRVJXUklURV9TRVRUSU5HU19JTlZBTElEOworCisJLyogV3JpdGUgdGhlIGRhdGEuICovCisJYnVmZiA9ICh1MzIgKikmYWRtaW5fbWliOworCWZvciAoaSA9IDA7IGkgPCBzaXplb2Yoc3RydWN0IGxsZHBfYWRtaW5fbWliKTsgaSArPSA0LCBidWZmKyspCisJCVJFR19XUihicCwgKG9mZnNldCArIGkpLCAqYnVmZik7Cit9CisKK3ZvaWQgYm54MnhfZGNieF9zZXRfc3RhdGUoc3RydWN0IGJueDJ4ICpicCwgYm9vbCBkY2Jfb24sIHUzMiBkY2J4X2VuYWJsZWQpCit7CisJaWYgKENISVBfSVNfRTIoYnApICYmICFDSElQX01PREVfSVNfNF9QT1JUKGJwKSkgeworCQlicC0+ZGNiX3N0YXRlID0gZGNiX29uOworCQlicC0+ZGNieF9lbmFibGVkID0gZGNieF9lbmFibGVkOworCX0gZWxzZSB7CisJCWJwLT5kY2Jfc3RhdGUgPSBmYWxzZTsKKwkJYnAtPmRjYnhfZW5hYmxlZCA9IEJOWDJYX0RDQlhfRU5BQkxFRF9JTlZBTElEOworCX0KKwlEUChORVRJRl9NU0dfTElOSywgIkRDQiBzdGF0ZSBbJXM6JXNdXG4iLAorCSAgIGRjYl9vbiA/ICJPTiIgOiAiT0ZGIiwKKwkgICBkY2J4X2VuYWJsZWQgPT0gQk5YMlhfRENCWF9FTkFCTEVEX09GRiA/ICJ1c2VyLW1vZGUiIDoKKwkgICBkY2J4X2VuYWJsZWQgPT0gQk5YMlhfRENCWF9FTkFCTEVEX09OX05FR19PRkYgPyAib24tY2hpcCBzdGF0aWMiIDoKKwkgICBkY2J4X2VuYWJsZWQgPT0gQk5YMlhfRENCWF9FTkFCTEVEX09OX05FR19PTiA/CisJICAgIm9uLWNoaXAgd2l0aCBuZWdvdGlhdGlvbiIgOiAiaW52YWxpZCIpOworfQorCit2b2lkIGJueDJ4X2RjYnhfaW5pdF9wYXJhbXMoc3RydWN0IGJueDJ4ICpicCkKK3sKKwlicC0+ZGNieF9jb25maWdfcGFyYW1zLmFkbWluX2RjYnhfdmVyc2lvbiA9IDB4MDsgLyogMCAtIENFRTsgMSAtIElFRUUgKi8KKwlicC0+ZGNieF9jb25maWdfcGFyYW1zLmFkbWluX2V0c193aWxsaW5nID0gMTsKKwlicC0+ZGNieF9jb25maWdfcGFyYW1zLmFkbWluX3BmY193aWxsaW5nID0gMTsKKwlicC0+ZGNieF9jb25maWdfcGFyYW1zLm92ZXJ3cml0ZV9zZXR0aW5ncyA9IDE7CisJYnAtPmRjYnhfY29uZmlnX3BhcmFtcy5hZG1pbl9ldHNfZW5hYmxlID0gMTsKKwlicC0+ZGNieF9jb25maWdfcGFyYW1zLmFkbWluX3BmY19lbmFibGUgPSAxOworCWJwLT5kY2J4X2NvbmZpZ19wYXJhbXMuYWRtaW5fdGNfc3VwcG9ydGVkX3R4X2VuYWJsZSA9IDE7CisJYnAtPmRjYnhfY29uZmlnX3BhcmFtcy5hZG1pbl9ldHNfY29uZmlndXJhdGlvbl90eF9lbmFibGUgPSAxOworCWJwLT5kY2J4X2NvbmZpZ19wYXJhbXMuYWRtaW5fcGZjX3R4X2VuYWJsZSA9IDE7CisJYnAtPmRjYnhfY29uZmlnX3BhcmFtcy5hZG1pbl9hcHBsaWNhdGlvbl9wcmlvcml0eV90eF9lbmFibGUgPSAxOworCWJwLT5kY2J4X2NvbmZpZ19wYXJhbXMuYWRtaW5fZXRzX3JlY29fdmFsaWQgPSAxOworCWJwLT5kY2J4X2NvbmZpZ19wYXJhbXMuYWRtaW5fYXBwX3ByaW9yaXR5X3dpbGxpbmcgPSAxOworCWJwLT5kY2J4X2NvbmZpZ19wYXJhbXMuYWRtaW5fY29uZmlndXJhdGlvbl9id19wcmVjZW50YWdlWzBdID0gMDA7CisJYnAtPmRjYnhfY29uZmlnX3BhcmFtcy5hZG1pbl9jb25maWd1cmF0aW9uX2J3X3ByZWNlbnRhZ2VbMV0gPSA1MDsKKwlicC0+ZGNieF9jb25maWdfcGFyYW1zLmFkbWluX2NvbmZpZ3VyYXRpb25fYndfcHJlY2VudGFnZVsyXSA9IDUwOworCWJwLT5kY2J4X2NvbmZpZ19wYXJhbXMuYWRtaW5fY29uZmlndXJhdGlvbl9id19wcmVjZW50YWdlWzNdID0gMDsKKwlicC0+ZGNieF9jb25maWdfcGFyYW1zLmFkbWluX2NvbmZpZ3VyYXRpb25fYndfcHJlY2VudGFnZVs0XSA9IDA7CisJYnAtPmRjYnhfY29uZmlnX3BhcmFtcy5hZG1pbl9jb25maWd1cmF0aW9uX2J3X3ByZWNlbnRhZ2VbNV0gPSAwOworCWJwLT5kY2J4X2NvbmZpZ19wYXJhbXMuYWRtaW5fY29uZmlndXJhdGlvbl9id19wcmVjZW50YWdlWzZdID0gMDsKKwlicC0+ZGNieF9jb25maWdfcGFyYW1zLmFkbWluX2NvbmZpZ3VyYXRpb25fYndfcHJlY2VudGFnZVs3XSA9IDA7CisJYnAtPmRjYnhfY29uZmlnX3BhcmFtcy5hZG1pbl9jb25maWd1cmF0aW9uX2V0c19wZ1swXSA9IDE7CisJYnAtPmRjYnhfY29uZmlnX3BhcmFtcy5hZG1pbl9jb25maWd1cmF0aW9uX2V0c19wZ1sxXSA9IDA7CisJYnAtPmRjYnhfY29uZmlnX3BhcmFtcy5hZG1pbl9jb25maWd1cmF0aW9uX2V0c19wZ1syXSA9IDA7CisJYnAtPmRjYnhfY29uZmlnX3BhcmFtcy5hZG1pbl9jb25maWd1cmF0aW9uX2V0c19wZ1szXSA9IDI7CisJYnAtPmRjYnhfY29uZmlnX3BhcmFtcy5hZG1pbl9jb25maWd1cmF0aW9uX2V0c19wZ1s0XSA9IDA7CisJYnAtPmRjYnhfY29uZmlnX3BhcmFtcy5hZG1pbl9jb25maWd1cmF0aW9uX2V0c19wZ1s1XSA9IDA7CisJYnAtPmRjYnhfY29uZmlnX3BhcmFtcy5hZG1pbl9jb25maWd1cmF0aW9uX2V0c19wZ1s2XSA9IDA7CisJYnAtPmRjYnhfY29uZmlnX3BhcmFtcy5hZG1pbl9jb25maWd1cmF0aW9uX2V0c19wZ1s3XSA9IDA7CisJYnAtPmRjYnhfY29uZmlnX3BhcmFtcy5hZG1pbl9yZWNvbW1lbmRhdGlvbl9id19wcmVjZW50YWdlWzBdID0gMDsKKwlicC0+ZGNieF9jb25maWdfcGFyYW1zLmFkbWluX3JlY29tbWVuZGF0aW9uX2J3X3ByZWNlbnRhZ2VbMV0gPSAxOworCWJwLT5kY2J4X2NvbmZpZ19wYXJhbXMuYWRtaW5fcmVjb21tZW5kYXRpb25fYndfcHJlY2VudGFnZVsyXSA9IDI7CisJYnAtPmRjYnhfY29uZmlnX3BhcmFtcy5hZG1pbl9yZWNvbW1lbmRhdGlvbl9id19wcmVjZW50YWdlWzNdID0gMDsKKwlicC0+ZGNieF9jb25maWdfcGFyYW1zLmFkbWluX3JlY29tbWVuZGF0aW9uX2J3X3ByZWNlbnRhZ2VbNF0gPSA3OworCWJwLT5kY2J4X2NvbmZpZ19wYXJhbXMuYWRtaW5fcmVjb21tZW5kYXRpb25fYndfcHJlY2VudGFnZVs1XSA9IDU7CisJYnAtPmRjYnhfY29uZmlnX3BhcmFtcy5hZG1pbl9yZWNvbW1lbmRhdGlvbl9id19wcmVjZW50YWdlWzZdID0gNjsKKwlicC0+ZGNieF9jb25maWdfcGFyYW1zLmFkbWluX3JlY29tbWVuZGF0aW9uX2J3X3ByZWNlbnRhZ2VbN10gPSA3OworCWJwLT5kY2J4X2NvbmZpZ19wYXJhbXMuYWRtaW5fcmVjb21tZW5kYXRpb25fZXRzX3BnWzBdID0gMDsKKwlicC0+ZGNieF9jb25maWdfcGFyYW1zLmFkbWluX3JlY29tbWVuZGF0aW9uX2V0c19wZ1sxXSA9IDE7CisJYnAtPmRjYnhfY29uZmlnX3BhcmFtcy5hZG1pbl9yZWNvbW1lbmRhdGlvbl9ldHNfcGdbMl0gPSAyOworCWJwLT5kY2J4X2NvbmZpZ19wYXJhbXMuYWRtaW5fcmVjb21tZW5kYXRpb25fZXRzX3BnWzNdID0gMzsKKwlicC0+ZGNieF9jb25maWdfcGFyYW1zLmFkbWluX3JlY29tbWVuZGF0aW9uX2V0c19wZ1s0XSA9IDQ7CisJYnAtPmRjYnhfY29uZmlnX3BhcmFtcy5hZG1pbl9yZWNvbW1lbmRhdGlvbl9ldHNfcGdbNV0gPSA1OworCWJwLT5kY2J4X2NvbmZpZ19wYXJhbXMuYWRtaW5fcmVjb21tZW5kYXRpb25fZXRzX3BnWzZdID0gNjsKKwlicC0+ZGNieF9jb25maWdfcGFyYW1zLmFkbWluX3JlY29tbWVuZGF0aW9uX2V0c19wZ1s3XSA9IDc7CisJYnAtPmRjYnhfY29uZmlnX3BhcmFtcy5hZG1pbl9wZmNfYml0bWFwID0gMHg4OyAvKiBGQ29FKDMpIGVuYWJsZSAqLworCWJwLT5kY2J4X2NvbmZpZ19wYXJhbXMuYWRtaW5fcHJpb3JpdHlfYXBwX3RhYmxlWzBdLnZhbGlkID0gMTsKKwlicC0+ZGNieF9jb25maWdfcGFyYW1zLmFkbWluX3ByaW9yaXR5X2FwcF90YWJsZVsxXS52YWxpZCA9IDE7CisJYnAtPmRjYnhfY29uZmlnX3BhcmFtcy5hZG1pbl9wcmlvcml0eV9hcHBfdGFibGVbMl0udmFsaWQgPSAwOworCWJwLT5kY2J4X2NvbmZpZ19wYXJhbXMuYWRtaW5fcHJpb3JpdHlfYXBwX3RhYmxlWzNdLnZhbGlkID0gMDsKKwlicC0+ZGNieF9jb25maWdfcGFyYW1zLmFkbWluX3ByaW9yaXR5X2FwcF90YWJsZVswXS5wcmlvcml0eSA9IDM7CisJYnAtPmRjYnhfY29uZmlnX3BhcmFtcy5hZG1pbl9wcmlvcml0eV9hcHBfdGFibGVbMV0ucHJpb3JpdHkgPSAwOworCWJwLT5kY2J4X2NvbmZpZ19wYXJhbXMuYWRtaW5fcHJpb3JpdHlfYXBwX3RhYmxlWzJdLnByaW9yaXR5ID0gMDsKKwlicC0+ZGNieF9jb25maWdfcGFyYW1zLmFkbWluX3ByaW9yaXR5X2FwcF90YWJsZVszXS5wcmlvcml0eSA9IDA7CisJYnAtPmRjYnhfY29uZmlnX3BhcmFtcy5hZG1pbl9wcmlvcml0eV9hcHBfdGFibGVbMF0udHJhZmZpY190eXBlID0gMDsKKwlicC0+ZGNieF9jb25maWdfcGFyYW1zLmFkbWluX3ByaW9yaXR5X2FwcF90YWJsZVsxXS50cmFmZmljX3R5cGUgPSAxOworCWJwLT5kY2J4X2NvbmZpZ19wYXJhbXMuYWRtaW5fcHJpb3JpdHlfYXBwX3RhYmxlWzJdLnRyYWZmaWNfdHlwZSA9IDA7CisJYnAtPmRjYnhfY29uZmlnX3BhcmFtcy5hZG1pbl9wcmlvcml0eV9hcHBfdGFibGVbM10udHJhZmZpY190eXBlID0gMDsKKwlicC0+ZGNieF9jb25maWdfcGFyYW1zLmFkbWluX3ByaW9yaXR5X2FwcF90YWJsZVswXS5hcHBfaWQgPSAweDg5MDY7CisJYnAtPmRjYnhfY29uZmlnX3BhcmFtcy5hZG1pbl9wcmlvcml0eV9hcHBfdGFibGVbMV0uYXBwX2lkID0gMzI2MDsKKwlicC0+ZGNieF9jb25maWdfcGFyYW1zLmFkbWluX3ByaW9yaXR5X2FwcF90YWJsZVsyXS5hcHBfaWQgPSAwOworCWJwLT5kY2J4X2NvbmZpZ19wYXJhbXMuYWRtaW5fcHJpb3JpdHlfYXBwX3RhYmxlWzNdLmFwcF9pZCA9IDA7CisJYnAtPmRjYnhfY29uZmlnX3BhcmFtcy5hZG1pbl9kZWZhdWx0X3ByaW9yaXR5ID0KKwkJYnAtPmRjYnhfY29uZmlnX3BhcmFtcy5hZG1pbl9wcmlvcml0eV9hcHBfdGFibGVbMV0ucHJpb3JpdHk7Cit9CisKK3ZvaWQgYm54MnhfZGNieF9pbml0KHN0cnVjdCBibngyeCAqYnApCit7CisJdTMyIGRjYnhfbGxkcF9wYXJhbXNfb2Zmc2V0ID0gU0hNRU1fTExEUF9EQ0JYX1BBUkFNU19OT05FOworCisJaWYgKGJwLT5kY2J4X2VuYWJsZWQgPD0gMCkKKwkJcmV0dXJuOworCisJLyogdmFsaWRhdGU6CisJICogY2hpcCBvZiBnb29kIGZvciBkY2J4IHZlcnNpb24sCisJICogZGNiIGlzIHdhbnRlZAorCSAqIHRoZSBmdW5jdGlvbiBpcyBwbWYKKwkgKiBzaG1lbTIgY29udGFpbnMgRENCWCBzdXBwb3J0IGZpZWxkcworCSAqLworCURQKE5FVElGX01TR19MSU5LLCAiZGNiX3N0YXRlICVkIGJwLT5wb3J0LnBtZiAlZFxuIiwKKwkgICBicC0+ZGNiX3N0YXRlLCBicC0+cG9ydC5wbWYpOworCisJaWYgKGJwLT5kY2Jfc3RhdGUgPT0gIEJOWDJYX0RDQl9TVEFURV9PTiAmJiBicC0+cG9ydC5wbWYgJiYKKwkgICAgU0hNRU0yX0hBUyhicCwgZGNieF9sbGRwX3BhcmFtc19vZmZzZXQpKSB7CisJCWRjYnhfbGxkcF9wYXJhbXNfb2Zmc2V0ID0KKwkJCVNITUVNMl9SRChicCwgZGNieF9sbGRwX3BhcmFtc19vZmZzZXQpOworCisJCURQKE5FVElGX01TR19MSU5LLCAiZGNieF9sbGRwX3BhcmFtc19vZmZzZXQgMHgleFxuIiwKKwkJICAgZGNieF9sbGRwX3BhcmFtc19vZmZzZXQpOworCisJCWlmIChTSE1FTV9MTERQX0RDQlhfUEFSQU1TX05PTkUgIT0gZGNieF9sbGRwX3BhcmFtc19vZmZzZXQpIHsKKwkJCWJueDJ4X2RjYnhfbGxkcF91cGRhdGVkX3BhcmFtcyhicCwKKwkJCQkJCSAgICAgICBkY2J4X2xsZHBfcGFyYW1zX29mZnNldCk7CisKKwkJCWJueDJ4X2RjYnhfYWRtaW5fbWliX3VwZGF0ZWRfcGFyYW1zKGJwLAorCQkJCWRjYnhfbGxkcF9wYXJhbXNfb2Zmc2V0KTsKKworCQkJLyogc2V0IGRlZmF1bHQgY29uZmlndXJhdGlvbiBCQyBoYXMgKi8KKwkJCWJueDJ4X2RjYnhfc2V0X3BhcmFtcyhicCwKKwkJCQkJICAgICAgQk5YMlhfRENCWF9TVEFURV9ORUdfUkVDRUlWRUQpOworCisJCQlibngyeF9md19jb21tYW5kKGJwLAorCQkJCQkgRFJWX01TR19DT0RFX0RDQlhfQURNSU5fUE1GX01TRywgMCk7CisJCX0KKwl9Cit9CisKK3ZvaWQgYm54MnhfZGNiX2luaXRfaW50bWVtX3BmYyhzdHJ1Y3QgYm54MnggKmJwKQoreworCXN0cnVjdCBwcmlvcml0eV9jb3MgcHJpY29zW01BWF9QRkNfVFJBRkZJQ19UWVBFU107CisJdTMyIGkgPSAwLCBhZGRyOworCW1lbXNldChwcmljb3MsIDAsIHNpemVvZihwcmljb3MpKTsKKwkvKiBEZWZhdWx0IGluaXRpYWxpemF0aW9uICovCisJZm9yIChpID0gMDsgaSA8IE1BWF9QRkNfVFJBRkZJQ19UWVBFUzsgaSsrKQorCQlwcmljb3NbaV0ucHJpb3JpdHkgPSBMTEZDX1RSQUZGSUNfVFlQRV9UT19QUklPUklUWV9VTk1BUFBFRDsKKworCS8qIFN0b3JlIHBlciBwb3J0IHN0cnVjdCB0byBpbnRlcm5hbCBtZW1vcnkgKi8KKwlhZGRyID0gQkFSX1hTVFJPUk1fSU5UTUVNICsKKwkJCVhTVE9STV9DTU5HX1BFUl9QT1JUX1ZBUlNfT0ZGU0VUKEJQX1BPUlQoYnApKSArCisJCQlvZmZzZXRvZihzdHJ1Y3QgY21uZ19zdHJ1Y3RfcGVyX3BvcnQsCisJCQkJIHRyYWZmaWNfdHlwZV90b19wcmlvcml0eV9jb3MpOworCV9fc3Rvcm1fbWVtc2V0X3N0cnVjdChicCwgYWRkciwgc2l6ZW9mKHByaWNvcyksICh1MzIgKilwcmljb3MpOworCisKKwkvKiBMTEZDIGRpc2FibGVkLiovCisJUkVHX1dSOChicCAsIEJBUl9YU1RST1JNX0lOVE1FTSArCisJCSAgICBYU1RPUk1fQ01OR19QRVJfUE9SVF9WQVJTX09GRlNFVChCUF9QT1JUKGJwKSkgKworCQkgICAgb2Zmc2V0b2Yoc3RydWN0IGNtbmdfc3RydWN0X3Blcl9wb3J0LCBsbGZjX21vZGUpLAorCQkJTExGQ19NT0RFX05PTkUpOworCisJLyogRENCWCBkaXNhYmxlZC4qLworCVJFR19XUjgoYnAgLCBCQVJfWFNUUk9STV9JTlRNRU0gKworCQkgICAgWFNUT1JNX0NNTkdfUEVSX1BPUlRfVkFSU19PRkZTRVQoQlBfUE9SVChicCkpICsKKwkJICAgIG9mZnNldG9mKHN0cnVjdCBjbW5nX3N0cnVjdF9wZXJfcG9ydCwgZGNiX2VuYWJsZWQpLAorCQkJRENCX0RJU0FCTEVEKTsKK30KKworc3RhdGljIHZvaWQKK2JueDJ4X2RjYnhfcHJpbnRfY29zX3BhcmFtcyhzdHJ1Y3QgYm54MnggKmJwLAorCQkJICAgIHN0cnVjdCBmbG93X2NvbnRyb2xfY29uZmlndXJhdGlvbiAqcGZjX2Z3X2NmZykKK3sKKwl1OCBwcmkgPSAwOworCXU4IGNvcyA9IDA7CisKKwlEUChORVRJRl9NU0dfTElOSywKKwkgICAicGZjX2Z3X2NmZy0+ZGNiX3ZlcnNpb24gJXhcbiIsIHBmY19md19jZmctPmRjYl92ZXJzaW9uKTsKKwlEUChORVRJRl9NU0dfTElOSywKKwkgICAicGRldi0+cGFyYW1zLmRjYnhfcG9ydF9wYXJhbXMucGZjLiIKKwkgICAicHJpb3JpdHlfbm9uX3BhdXNlYWJsZV9tYXNrICV4XG4iLAorCSAgIGJwLT5kY2J4X3BvcnRfcGFyYW1zLnBmYy5wcmlvcml0eV9ub25fcGF1c2VhYmxlX21hc2spOworCisJZm9yIChjb3MgPSAwIDsgY29zIDwgYnAtPmRjYnhfcG9ydF9wYXJhbXMuZXRzLm51bV9vZl9jb3MgOyBjb3MrKykgeworCQlEUChORVRJRl9NU0dfTElOSywgInBkZXYtPnBhcmFtcy5kY2J4X3BvcnRfcGFyYW1zLmV0cy4iCisJCSAgICJjb3NfcGFyYW1zWyVkXS5wcmlfYml0bWFzayAleFxuIiwgY29zLAorCQkgICBicC0+ZGNieF9wb3J0X3BhcmFtcy5ldHMuY29zX3BhcmFtc1tjb3NdLnByaV9iaXRtYXNrKTsKKworCQlEUChORVRJRl9NU0dfTElOSywgInBkZXYtPnBhcmFtcy5kY2J4X3BvcnRfcGFyYW1zLmV0cy4iCisJCSAgICJjb3NfcGFyYW1zWyVkXS5id190YmwgJXhcbiIsIGNvcywKKwkJICAgYnAtPmRjYnhfcG9ydF9wYXJhbXMuZXRzLmNvc19wYXJhbXNbY29zXS5id190YmwpOworCisJCURQKE5FVElGX01TR19MSU5LLCAicGRldi0+cGFyYW1zLmRjYnhfcG9ydF9wYXJhbXMuZXRzLiIKKwkJICAgImNvc19wYXJhbXNbJWRdLnN0cmljdCAleFxuIiwgY29zLAorCQkgICBicC0+ZGNieF9wb3J0X3BhcmFtcy5ldHMuY29zX3BhcmFtc1tjb3NdLnN0cmljdCk7CisKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJwZGV2LT5wYXJhbXMuZGNieF9wb3J0X3BhcmFtcy5ldHMuIgorCQkgICAiY29zX3BhcmFtc1slZF0ucGF1c2VhYmxlICV4XG4iLCBjb3MsCisJCSAgIGJwLT5kY2J4X3BvcnRfcGFyYW1zLmV0cy5jb3NfcGFyYW1zW2Nvc10ucGF1c2VhYmxlKTsKKwl9CisKKwlmb3IgKHByaSA9IDA7IHByaSA8IExMRkNfRFJJVkVSX1RSQUZGSUNfVFlQRV9NQVg7IHByaSsrKSB7CisJCURQKE5FVElGX01TR19MSU5LLAorCQkgICAicGZjX2Z3X2NmZy0+dHJhZmZpY190eXBlX3RvX3ByaW9yaXR5X2Nvc1slZF0uIgorCQkgICAicHJpb3JpdHkgJXhcbiIsIHByaSwKKwkJICAgcGZjX2Z3X2NmZy0+dHJhZmZpY190eXBlX3RvX3ByaW9yaXR5X2Nvc1twcmldLnByaW9yaXR5KTsKKworCQlEUChORVRJRl9NU0dfTElOSywKKwkJICAgInBmY19md19jZmctPnRyYWZmaWNfdHlwZV90b19wcmlvcml0eV9jb3NbJWRdLmNvcyAleFxuIiwKKwkJICAgcHJpLCBwZmNfZndfY2ZnLT50cmFmZmljX3R5cGVfdG9fcHJpb3JpdHlfY29zW3ByaV0uY29zKTsKKwl9Cit9CisKKy8qIGZpbGxzIGhlbHBfZGF0YSBhY2NvcmRpbmcgdG8gcGdfaW5mbyAqLworc3RhdGljIHZvaWQgYm54MnhfZGNieF9nZXRfbnVtX3BnX3RyYWZfdHlwZShzdHJ1Y3QgYm54MnggKmJwLAorCQkJCQkgICAgdTMyICpwZ19wcmlfb3JnaW5hbF9zcHJlYWQsCisJCQkJCSAgICBzdHJ1Y3QgcGdfaGVscF9kYXRhICpoZWxwX2RhdGEpCit7CisJYm9vbCBwZ19mb3VuZCAgPSBmYWxzZTsKKwl1MzIgaSwgdHJhZl90eXBlLCBhZGRfdHJhZl90eXBlLCBhZGRfcGc7CisJdTMyICp0dHAgPSBicC0+ZGNieF9wb3J0X3BhcmFtcy5hcHAudHJhZmZpY190eXBlX3ByaW9yaXR5OworCXN0cnVjdCBwZ19lbnRyeV9oZWxwX2RhdGEgKmRhdGEgPSBoZWxwX2RhdGEtPmRhdGE7IC8qc2hvdGN1dCovCisKKwkvKiBTZXQgdG8gaW52YWxpZCAqLworCWZvciAoaSA9IDA7IGkgPCBMTEZDX0RSSVZFUl9UUkFGRklDX1RZUEVfTUFYOyBpKyspCisJCWRhdGFbaV0ucGcgPSBEQ0JYX0lMTEVHQUxfUEc7CisKKwlmb3IgKGFkZF90cmFmX3R5cGUgPSAwOworCSAgICAgYWRkX3RyYWZfdHlwZSA8IExMRkNfRFJJVkVSX1RSQUZGSUNfVFlQRV9NQVg7IGFkZF90cmFmX3R5cGUrKykgeworCQlwZ19mb3VuZCA9IGZhbHNlOworCQlpZiAodHRwW2FkZF90cmFmX3R5cGVdIDwgTUFYX1BGQ19QUklPUklUSUVTKSB7CisJCQlhZGRfcGcgPSAodTgpcGdfcHJpX29yZ2luYWxfc3ByZWFkW3R0cFthZGRfdHJhZl90eXBlXV07CisJCQlmb3IgKHRyYWZfdHlwZSA9IDA7CisJCQkgICAgIHRyYWZfdHlwZSA8IExMRkNfRFJJVkVSX1RSQUZGSUNfVFlQRV9NQVg7CisJCQkgICAgIHRyYWZfdHlwZSsrKSB7CisJCQkJaWYgKGRhdGFbdHJhZl90eXBlXS5wZyA9PSBhZGRfcGcpIHsKKwkJCQkJaWYgKCEoZGF0YVt0cmFmX3R5cGVdLnBnX3ByaW9yaXR5ICYKKwkJCQkJICAgICAoMSA8PCB0dHBbYWRkX3RyYWZfdHlwZV0pKSkKKwkJCQkJCWRhdGFbdHJhZl90eXBlXS4KKwkJCQkJCQludW1fb2ZfZGlmX3ByaSsrOworCQkJCQlkYXRhW3RyYWZfdHlwZV0ucGdfcHJpb3JpdHkgfD0KKwkJCQkJCSgxIDw8IHR0cFthZGRfdHJhZl90eXBlXSk7CisJCQkJCXBnX2ZvdW5kID0gdHJ1ZTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJaWYgKGZhbHNlID09IHBnX2ZvdW5kKSB7CisJCQkJZGF0YVtoZWxwX2RhdGEtPm51bV9vZl9wZ10ucGcgPSBhZGRfcGc7CisJCQkJZGF0YVtoZWxwX2RhdGEtPm51bV9vZl9wZ10ucGdfcHJpb3JpdHkgPQorCQkJCQkJKDEgPDwgdHRwW2FkZF90cmFmX3R5cGVdKTsKKwkJCQlkYXRhW2hlbHBfZGF0YS0+bnVtX29mX3BnXS5udW1fb2ZfZGlmX3ByaSA9IDE7CisJCQkJaGVscF9kYXRhLT5udW1fb2ZfcGcrKzsKKwkJCX0KKwkJfQorCQlEUChORVRJRl9NU0dfTElOSywKKwkJICAgImFkZF90cmFmX3R5cGUgJWQgcGdfZm91bmQgJXMgbnVtX29mX3BnICVkXG4iLAorCQkgICBhZGRfdHJhZl90eXBlLCAoZmFsc2UgPT0gcGdfZm91bmQpID8gIk5PIiA6ICJZRVMiLAorCQkgICBoZWxwX2RhdGEtPm51bV9vZl9wZyk7CisJfQorfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZXNjcmlwdGlvbjogc2luZ2xlIHByaW9yaXR5IGdyb3VwCisgKgorICogUmV0dXJuOgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIGJueDJ4X2RjYnhfZXRzX2Rpc2FibGVkX2VudHJ5X2RhdGEoc3RydWN0IGJueDJ4ICpicCwKKwkJCQkJICAgICAgIHN0cnVjdCBjb3NfaGVscF9kYXRhICpjb3NfZGF0YSwKKwkJCQkJICAgICAgIHUzMiBwcmlfam9pbl9tYXNrKQoreworCS8qIE9ubHkgb25lIHByaW9yaXR5IHRoYW4gb25seSBvbmUgQ09TICovCisJY29zX2RhdGEtPmRhdGFbMF0ucGF1c2FibGUgPQorCQlJU19EQ0JYX1BGQ19QUklfT05MWV9QQVVTRShicCwgcHJpX2pvaW5fbWFzayk7CisJY29zX2RhdGEtPmRhdGFbMF0ucHJpX2pvaW5fbWFzayA9IHByaV9qb2luX21hc2s7CisJY29zX2RhdGEtPmRhdGFbMF0uY29zX2J3ID0gMTAwOworCWNvc19kYXRhLT5udW1fb2ZfY29zID0gMTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERlc2NyaXB0aW9uOiB1cGRhdGluZyB0aGUgY29zIGJ3CisgKgorICogUmV0dXJuOgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBibngyeF9kY2J4X2FkZF90b19jb3NfYncoc3RydWN0IGJueDJ4ICpicCwKKwkJCQkJICAgIHN0cnVjdCBjb3NfZW50cnlfaGVscF9kYXRhICpkYXRhLAorCQkJCQkgICAgdTggcGdfYncpCit7CisJaWYgKGRhdGEtPmNvc19idyA9PSBEQ0JYX0lOVkFMSURfQ09TX0JXKQorCQlkYXRhLT5jb3NfYncgPSBwZ19idzsKKwllbHNlCisJCWRhdGEtPmNvc19idyArPSBwZ19idzsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERlc2NyaXB0aW9uOiBzaW5nbGUgcHJpb3JpdHkgZ3JvdXAKKyAqCisgKiBSZXR1cm46CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgYm54MnhfZGNieF9zZXBhcmF0ZV9wYXVzZWFibGVfZnJvbV9ub24oc3RydWN0IGJueDJ4ICpicCwKKwkJCXN0cnVjdCBjb3NfaGVscF9kYXRhICpjb3NfZGF0YSwKKwkJCXUzMiAqcGdfcHJpX29yZ2luYWxfc3ByZWFkLAorCQkJc3RydWN0IGRjYnhfZXRzX2ZlYXR1cmUgKmV0cykKK3sKKwl1MzIJcHJpX3Rlc3RlZAk9IDA7CisJdTgJaQkJPSAwOworCXU4CWVudHJ5CQk9IDA7CisJdTgJcGdfZW50cnkJPSAwOworCXU4CW51bV9vZl9wcmkJPSBMTEZDX0RSSVZFUl9UUkFGRklDX1RZUEVfTUFYOworCisJY29zX2RhdGEtPmRhdGFbMF0ucGF1c2FibGUgPSB0cnVlOworCWNvc19kYXRhLT5kYXRhWzFdLnBhdXNhYmxlID0gZmFsc2U7CisJY29zX2RhdGEtPmRhdGFbMF0ucHJpX2pvaW5fbWFzayA9IGNvc19kYXRhLT5kYXRhWzFdLnByaV9qb2luX21hc2sgPSAwOworCisJZm9yIChpID0gMCA7IGkgPCBudW1fb2ZfcHJpIDsgaSsrKSB7CisJCXByaV90ZXN0ZWQgPSAxIDw8IGJwLT5kY2J4X3BvcnRfcGFyYW1zLgorCQkJCQlhcHAudHJhZmZpY190eXBlX3ByaW9yaXR5W2ldOworCisJCWlmIChwcmlfdGVzdGVkICYgRENCWF9QRkNfUFJJX05PTl9QQVVTRV9NQVNLKGJwKSkgeworCQkJY29zX2RhdGEtPmRhdGFbMV0ucHJpX2pvaW5fbWFzayB8PSBwcmlfdGVzdGVkOworCQkJZW50cnkgPSAxOworCQl9IGVsc2UgeworCQkJY29zX2RhdGEtPmRhdGFbMF0ucHJpX2pvaW5fbWFzayB8PSBwcmlfdGVzdGVkOworCQkJZW50cnkgPSAwOworCQl9CisJCXBnX2VudHJ5ID0gKHU4KXBnX3ByaV9vcmdpbmFsX3NwcmVhZFticC0+ZGNieF9wb3J0X3BhcmFtcy4KKwkJCQkJCWFwcC50cmFmZmljX3R5cGVfcHJpb3JpdHlbaV1dOworCQkvKiBUaGVyZSBjYW4gYmUgb25seSBvbmUgc3RyaWN0IHBnICovCisJCWlmIChwZ19lbnRyeSA8IERDQlhfTUFYX05VTV9QR19CV19FTlRSSUVTKQorCQkJYm54MnhfZGNieF9hZGRfdG9fY29zX2J3KGJwLCAmY29zX2RhdGEtPmRhdGFbZW50cnldLAorCQkJCURDQlhfUEdfQldfR0VUKGV0cy0+cGdfYndfdGJsLCBwZ19lbnRyeSkpOworCQllbHNlCisJCQkvKiBJZiB3ZSBqb2luIGEgZ3JvdXAgYW5kIG9uZSBpcyBzdHJpY3QKKwkJCSAqIHRoYW4gdGhlIGJ3IHJ1bGxzICovCisJCQljb3NfZGF0YS0+ZGF0YVtlbnRyeV0uc3RyaWN0ID0KKwkJCQkJCUJOWDJYX0RDQlhfQ09TX0hJR0hfU1RSSUNUOworCX0KKwlpZiAoKDAgPT0gY29zX2RhdGEtPmRhdGFbMF0ucHJpX2pvaW5fbWFzaykgJiYKKwkgICAgKDAgPT0gY29zX2RhdGEtPmRhdGFbMV0ucHJpX2pvaW5fbWFzaykpCisJCUJOWDJYX0VSUigiZGNieCBlcnJvcjogQm90aCBncm91cHMgbXVzdCBoYXZlIHByaW9yaXRpZXNcbiIpOworfQorCisKKyNpZm5kZWYgUE9XRVJfT0ZfMgorI2RlZmluZSBQT1dFUl9PRl8yKHgpCSgoMCAhPSB4KSAmJiAoMCA9PSAoeCAmICh4LTEpKSkpCisjZW5kaWYKKworc3RhdGljIHZvaWQgYnhuMnhfZGNieF9zaW5nbGVfcGdfdG9fY29zX3BhcmFtcyhzdHJ1Y3QgYm54MnggKmJwLAorCQkJCQkgICAgICBzdHJ1Y3QgcGdfaGVscF9kYXRhICpwZ19oZWxwX2RhdGEsCisJCQkJCSAgICAgIHN0cnVjdCBjb3NfaGVscF9kYXRhICpjb3NfZGF0YSwKKwkJCQkJICAgICAgdTMyIHByaV9qb2luX21hc2ssCisJCQkJCSAgICAgIHU4IG51bV9vZl9kaWZfcHJpKQoreworCXU4IGkgPSAwOworCXUzMiBwcmlfdGVzdGVkID0gMDsKKwl1MzIgcHJpX21hc2tfd2l0aG91dF9wcmkgPSAwOworCXUzMiAqdHRwID0gYnAtPmRjYnhfcG9ydF9wYXJhbXMuYXBwLnRyYWZmaWNfdHlwZV9wcmlvcml0eTsKKwkvKmRlYnVnKi8KKwlpZiAobnVtX29mX2RpZl9wcmkgPT0gMSkgeworCQlibngyeF9kY2J4X2V0c19kaXNhYmxlZF9lbnRyeV9kYXRhKGJwLCBjb3NfZGF0YSwgcHJpX2pvaW5fbWFzayk7CisJCXJldHVybjsKKwl9CisJLyogc2luZ2xlIHByaW9yaXR5IGdyb3VwICovCisJaWYgKHBnX2hlbHBfZGF0YS0+ZGF0YVswXS5wZyA8IERDQlhfTUFYX05VTV9QR19CV19FTlRSSUVTKSB7CisJCS8qIElmIHRoZXJlIGFyZSBib3RoIHBhdXNlYWJsZSBhbmQgbm9uLXBhdXNlYWJsZSBwcmlvcml0aWVzLAorCQkgKiB0aGUgcGF1c2VhYmxlIHByaW9yaXRpZXMgZ28gdG8gdGhlIGZpcnN0IHF1ZXVlIGFuZAorCQkgKiB0aGUgbm9uLXBhdXNlYWJsZSBwcmlvcml0aWVzIGdvIHRvIHRoZSBzZWNvbmQgcXVldWUuCisJCSAqLworCQlpZiAoSVNfRENCWF9QRkNfUFJJX01JWF9QQVVTRShicCwgcHJpX2pvaW5fbWFzaykpIHsKKwkJCS8qIFBhdXNlYWJsZSAqLworCQkJY29zX2RhdGEtPmRhdGFbMF0ucGF1c2FibGUgPSB0cnVlOworCQkJLyogTm9uIHBhdXNlYWJsZS4qLworCQkJY29zX2RhdGEtPmRhdGFbMV0ucGF1c2FibGUgPSBmYWxzZTsKKworCQkJaWYgKDIgPT0gbnVtX29mX2RpZl9wcmkpIHsKKwkJCQljb3NfZGF0YS0+ZGF0YVswXS5jb3NfYncgPSA1MDsKKwkJCQljb3NfZGF0YS0+ZGF0YVsxXS5jb3NfYncgPSA1MDsKKwkJCX0KKworCQkJaWYgKDMgPT0gbnVtX29mX2RpZl9wcmkpIHsKKwkJCQlpZiAoUE9XRVJfT0ZfMihEQ0JYX1BGQ19QUklfR0VUX1BBVVNFKGJwLAorCQkJCQkJCXByaV9qb2luX21hc2spKSkgeworCQkJCQljb3NfZGF0YS0+ZGF0YVswXS5jb3NfYncgPSAzMzsKKwkJCQkJY29zX2RhdGEtPmRhdGFbMV0uY29zX2J3ID0gNjc7CisJCQkJfSBlbHNlIHsKKwkJCQkJY29zX2RhdGEtPmRhdGFbMF0uY29zX2J3ID0gNjc7CisJCQkJCWNvc19kYXRhLT5kYXRhWzFdLmNvc19idyA9IDMzOworCQkJCX0KKwkJCX0KKworCQl9IGVsc2UgaWYgKElTX0RDQlhfUEZDX1BSSV9PTkxZX1BBVVNFKGJwLCBwcmlfam9pbl9tYXNrKSkgeworCQkJLyogSWYgdGhlcmUgYXJlIG9ubHkgcGF1c2VhYmxlIHByaW9yaXRpZXMsCisJCQkgKiB0aGVuIG9uZS90d28gcHJpb3JpdGllcyBnbyB0byB0aGUgZmlyc3QgcXVldWUKKwkJCSAqIGFuZCBvbmUgcHJpb3JpdHkgZ29lcyB0byB0aGUgc2Vjb25kIHF1ZXVlLgorCQkJICovCisJCQlpZiAoMiA9PSBudW1fb2ZfZGlmX3ByaSkgeworCQkJCWNvc19kYXRhLT5kYXRhWzBdLmNvc19idyA9IDUwOworCQkJCWNvc19kYXRhLT5kYXRhWzFdLmNvc19idyA9IDUwOworCQkJfSBlbHNlIHsKKwkJCQljb3NfZGF0YS0+ZGF0YVswXS5jb3NfYncgPSA2NzsKKwkJCQljb3NfZGF0YS0+ZGF0YVsxXS5jb3NfYncgPSAzMzsKKwkJCX0KKwkJCWNvc19kYXRhLT5kYXRhWzFdLnBhdXNhYmxlID0gdHJ1ZTsKKwkJCWNvc19kYXRhLT5kYXRhWzBdLnBhdXNhYmxlID0gdHJ1ZTsKKwkJCS8qIEFsbCBwcmlvcml0aWVzIGV4Y2VwdCBGQ09FICovCisJCQljb3NfZGF0YS0+ZGF0YVswXS5wcmlfam9pbl9tYXNrID0gKHByaV9qb2luX21hc2sgJgorCQkJCSgodTgpfigxIDw8IHR0cFtMTEZDX1RSQUZGSUNfVFlQRV9GQ09FXSkpKTsKKwkJCS8qIE9ubHkgRkNPRSBwcmlvcml0eS4qLworCQkJY29zX2RhdGEtPmRhdGFbMV0ucHJpX2pvaW5fbWFzayA9CisJCQkJKDEgPDwgdHRwW0xMRkNfVFJBRkZJQ19UWVBFX0ZDT0VdKTsKKwkJfSBlbHNlCisJCQkvKiBJZiB0aGVyZSBhcmUgb25seSBub24tcGF1c2VhYmxlIHByaW9yaXRpZXMsCisJCQkgKiB0aGV5IHdpbGwgYWxsIGdvIHRvIHRoZSBzYW1lIHF1ZXVlLgorCQkJICovCisJCQlibngyeF9kY2J4X2V0c19kaXNhYmxlZF9lbnRyeV9kYXRhKGJwLAorCQkJCQkJY29zX2RhdGEsIHByaV9qb2luX21hc2spOworCX0gZWxzZSB7CisJCS8qIHByaW9yaXR5IGdyb3VwIHdoaWNoIGlzIG5vdCBCVyBsaW1pdGVkIChQRyMxNSk6Ki8KKwkJaWYgKElTX0RDQlhfUEZDX1BSSV9NSVhfUEFVU0UoYnAsIHByaV9qb2luX21hc2spKSB7CisJCQkvKiBJZiB0aGVyZSBhcmUgYm90aCBwYXVzZWFibGUgYW5kIG5vbi1wYXVzZWFibGUKKwkJCSAqIHByaW9yaXRpZXMsIHRoZSBwYXVzZWFibGUgcHJpb3JpdGllcyBnbyB0byB0aGUgZmlyc3QKKwkJCSAqIHF1ZXVlIGFuZCB0aGUgbm9uLXBhdXNlYWJsZSBwcmlvcml0aWVzCisJCQkgKiBnbyB0byB0aGUgc2Vjb25kIHF1ZXVlLgorCQkJICovCisJCQlpZiAoRENCWF9QRkNfUFJJX0dFVF9QQVVTRShicCwgcHJpX2pvaW5fbWFzaykgPgorCQkJICAgIERDQlhfUEZDX1BSSV9HRVRfTk9OX1BBVVNFKGJwLCBwcmlfam9pbl9tYXNrKSkgeworCQkJCWNvc19kYXRhLT5kYXRhWzBdLnN0cmljdCA9CisJCQkJCUJOWDJYX0RDQlhfQ09TX0hJR0hfU1RSSUNUOworCQkJCWNvc19kYXRhLT5kYXRhWzFdLnN0cmljdCA9CisJCQkJCUJOWDJYX0RDQlhfQ09TX0xPV19TVFJJQ1Q7CisJCQl9IGVsc2UgeworCQkJCWNvc19kYXRhLT5kYXRhWzBdLnN0cmljdCA9CisJCQkJCUJOWDJYX0RDQlhfQ09TX0xPV19TVFJJQ1Q7CisJCQkJY29zX2RhdGEtPmRhdGFbMV0uc3RyaWN0ID0KKwkJCQkJQk5YMlhfRENCWF9DT1NfSElHSF9TVFJJQ1Q7CisJCQl9CisJCQkvKiBQYXVzZWFibGUgKi8KKwkJCWNvc19kYXRhLT5kYXRhWzBdLnBhdXNhYmxlID0gdHJ1ZTsKKwkJCS8qIE5vbiBwYXVzZS1hYmxlLiovCisJCQljb3NfZGF0YS0+ZGF0YVsxXS5wYXVzYWJsZSA9IGZhbHNlOworCQl9IGVsc2UgeworCQkJLyogSWYgdGhlcmUgYXJlIG9ubHkgcGF1c2VhYmxlIHByaW9yaXRpZXMgb3IKKwkJCSAqIG9ubHkgbm9uLXBhdXNlYWJsZSwqIHRoZSBsb3dlciBwcmlvcml0aWVzIGdvCisJCQkgKiB0byB0aGUgZmlyc3QgcXVldWUgYW5kIHRoZSBoaWdoZXJwcmlvcml0aWVzIGdvCisJCQkgKiB0byB0aGUgc2Vjb25kIHF1ZXVlLgorCQkJICovCisJCQljb3NfZGF0YS0+ZGF0YVswXS5wYXVzYWJsZSA9CisJCQkJY29zX2RhdGEtPmRhdGFbMV0ucGF1c2FibGUgPQorCQkJCUlTX0RDQlhfUEZDX1BSSV9PTkxZX1BBVVNFKGJwLCBwcmlfam9pbl9tYXNrKTsKKworCQkJZm9yIChpID0gMCA7IGkgPCBMTEZDX0RSSVZFUl9UUkFGRklDX1RZUEVfTUFYOyBpKyspIHsKKwkJCQlwcmlfdGVzdGVkID0gMSA8PCBicC0+ZGNieF9wb3J0X3BhcmFtcy4KKwkJCQkJYXBwLnRyYWZmaWNfdHlwZV9wcmlvcml0eVtpXTsKKwkJCQkvKiBSZW1vdmUgcHJpb3JpdHkgdGVzdGVkICovCisJCQkJcHJpX21hc2tfd2l0aG91dF9wcmkgPQorCQkJCQkocHJpX2pvaW5fbWFzayAmICgodTgpKH5wcmlfdGVzdGVkKSkpOworCQkJCWlmIChwcmlfbWFza193aXRob3V0X3ByaSA8IHByaV90ZXN0ZWQpCisJCQkJCWJyZWFrOworCQkJfQorCisJCQlpZiAoaSA9PSBMTEZDX0RSSVZFUl9UUkFGRklDX1RZUEVfTUFYKQorCQkJCUJOWDJYX0VSUigiSW52YWxpZCB2YWx1ZSBmb3IgcHJpX2pvaW5fbWFzayAtIgorCQkJCQkgICIgY291bGQgbm90IGZpbmQgYSBwcmlvcml0eVxuIik7CisKKwkJCWNvc19kYXRhLT5kYXRhWzBdLnByaV9qb2luX21hc2sgPSBwcmlfbWFza193aXRob3V0X3ByaTsKKwkJCWNvc19kYXRhLT5kYXRhWzFdLnByaV9qb2luX21hc2sgPSBwcmlfdGVzdGVkOworCQkJLyogQm90aCBxdWV1ZXMgYXJlIHN0cmljdCBwcmlvcml0eSwKKwkJCSAqIGFuZCB0aGF0IHdpdGggdGhlIGhpZ2hlc3QgcHJpb3JpdHkKKwkJCSAqIGdldHMgdGhlIGhpZ2hlc3Qgc3RyaWN0IHByaW9yaXR5IGluIHRoZSBhcmJpdGVyLgorCQkJICovCisJCQljb3NfZGF0YS0+ZGF0YVswXS5zdHJpY3QgPSBCTlgyWF9EQ0JYX0NPU19MT1dfU1RSSUNUOworCQkJY29zX2RhdGEtPmRhdGFbMV0uc3RyaWN0ID0gQk5YMlhfRENCWF9DT1NfSElHSF9TVFJJQ1Q7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X2RjYnhfdHdvX3BnX3RvX2Nvc19wYXJhbXMoCisJCQkgICAgc3RydWN0IGJueDJ4CQkqYnAsCisJCQkgICAgc3RydWN0ICBwZ19oZWxwX2RhdGEJKnBnX2hlbHBfZGF0YSwKKwkJCSAgICBzdHJ1Y3QgZGNieF9ldHNfZmVhdHVyZQkqZXRzLAorCQkJICAgIHN0cnVjdCBjb3NfaGVscF9kYXRhCSpjb3NfZGF0YSwKKwkJCSAgICB1MzIJCQkqcGdfcHJpX29yZ2luYWxfc3ByZWFkLAorCQkJICAgIHUzMgkJCQlwcmlfam9pbl9tYXNrLAorCQkJICAgIHU4CQkJCW51bV9vZl9kaWZfcHJpKQoreworCXU4IGkgPSAwOworCXU4IHBnW0UyX05VTV9PRl9DT1NdID0gezB9OworCisJLyogSWYgdGhlcmUgYXJlIGJvdGggcGF1c2VhYmxlIGFuZCBub24tcGF1c2VhYmxlIHByaW9yaXRpZXMsCisJICogdGhlIHBhdXNlYWJsZSBwcmlvcml0aWVzIGdvIHRvIHRoZSBmaXJzdCBxdWV1ZSBhbmQKKwkgKiB0aGUgbm9uLXBhdXNlYWJsZSBwcmlvcml0aWVzIGdvIHRvIHRoZSBzZWNvbmQgcXVldWUuCisJICovCisJaWYgKElTX0RDQlhfUEZDX1BSSV9NSVhfUEFVU0UoYnAsIHByaV9qb2luX21hc2spKSB7CisJCWlmIChJU19EQ0JYX1BGQ19QUklfTUlYX1BBVVNFKGJwLAorCQkJCQkgcGdfaGVscF9kYXRhLT5kYXRhWzBdLnBnX3ByaW9yaXR5KSB8fAorCQkgICAgSVNfRENCWF9QRkNfUFJJX01JWF9QQVVTRShicCwKKwkJCQkJIHBnX2hlbHBfZGF0YS0+ZGF0YVsxXS5wZ19wcmlvcml0eSkpIHsKKwkJCS8qIElmIG9uZSBQRyBjb250YWlucyBib3RoIHBhdXNlYWJsZSBhbmQKKwkJCSAqIG5vbi1wYXVzZWFibGUgcHJpb3JpdGllcyB0aGVuIEVUUyBpcyBkaXNhYmxlZC4KKwkJCSAqLworCQkJYm54MnhfZGNieF9zZXBhcmF0ZV9wYXVzZWFibGVfZnJvbV9ub24oYnAsIGNvc19kYXRhLAorCQkJCQlwZ19wcmlfb3JnaW5hbF9zcHJlYWQsIGV0cyk7CisJCQlicC0+ZGNieF9wb3J0X3BhcmFtcy5ldHMuZW5hYmxlZCA9IGZhbHNlOworCQkJcmV0dXJuOworCQl9CisKKwkJLyogUGF1c2VhYmxlICovCisJCWNvc19kYXRhLT5kYXRhWzBdLnBhdXNhYmxlID0gdHJ1ZTsKKwkJLyogTm9uIHBhdXNlYWJsZS4gKi8KKwkJY29zX2RhdGEtPmRhdGFbMV0ucGF1c2FibGUgPSBmYWxzZTsKKwkJaWYgKElTX0RDQlhfUEZDX1BSSV9PTkxZX1BBVVNFKGJwLAorCQkJCXBnX2hlbHBfZGF0YS0+ZGF0YVswXS5wZ19wcmlvcml0eSkpIHsKKwkJCS8qIDAgaXMgcGF1c2VhYmxlICovCisJCQljb3NfZGF0YS0+ZGF0YVswXS5wcmlfam9pbl9tYXNrID0KKwkJCQlwZ19oZWxwX2RhdGEtPmRhdGFbMF0ucGdfcHJpb3JpdHk7CisJCQlwZ1swXSA9IHBnX2hlbHBfZGF0YS0+ZGF0YVswXS5wZzsKKwkJCWNvc19kYXRhLT5kYXRhWzFdLnByaV9qb2luX21hc2sgPQorCQkJCXBnX2hlbHBfZGF0YS0+ZGF0YVsxXS5wZ19wcmlvcml0eTsKKwkJCXBnWzFdID0gcGdfaGVscF9kYXRhLT5kYXRhWzFdLnBnOworCQl9IGVsc2Ugey8qIDEgaXMgcGF1c2VhYmxlICovCisJCQljb3NfZGF0YS0+ZGF0YVswXS5wcmlfam9pbl9tYXNrID0KKwkJCQlwZ19oZWxwX2RhdGEtPmRhdGFbMV0ucGdfcHJpb3JpdHk7CisJCQlwZ1swXSA9IHBnX2hlbHBfZGF0YS0+ZGF0YVsxXS5wZzsKKwkJCWNvc19kYXRhLT5kYXRhWzFdLnByaV9qb2luX21hc2sgPQorCQkJCXBnX2hlbHBfZGF0YS0+ZGF0YVswXS5wZ19wcmlvcml0eTsKKwkJCXBnWzFdID0gcGdfaGVscF9kYXRhLT5kYXRhWzBdLnBnOworCQl9CisJfSBlbHNlIHsKKwkJLyogSWYgdGhlcmUgYXJlIG9ubHkgcGF1c2VhYmxlIHByaW9yaXRpZXMgb3IKKwkJICogb25seSBub24tcGF1c2VhYmxlLCBlYWNoIFBHIGdvZXMgdG8gYSBxdWV1ZS4KKwkJICovCisJCWNvc19kYXRhLT5kYXRhWzBdLnBhdXNhYmxlID0gY29zX2RhdGEtPmRhdGFbMV0ucGF1c2FibGUgPQorCQkJSVNfRENCWF9QRkNfUFJJX09OTFlfUEFVU0UoYnAsIHByaV9qb2luX21hc2spOworCQljb3NfZGF0YS0+ZGF0YVswXS5wcmlfam9pbl9tYXNrID0KKwkJCXBnX2hlbHBfZGF0YS0+ZGF0YVswXS5wZ19wcmlvcml0eTsKKwkJcGdbMF0gPSBwZ19oZWxwX2RhdGEtPmRhdGFbMF0ucGc7CisJCWNvc19kYXRhLT5kYXRhWzFdLnByaV9qb2luX21hc2sgPQorCQkJcGdfaGVscF9kYXRhLT5kYXRhWzFdLnBnX3ByaW9yaXR5OworCQlwZ1sxXSA9IHBnX2hlbHBfZGF0YS0+ZGF0YVsxXS5wZzsKKwl9CisKKwkvKiBUaGVyZSBjYW4gYmUgb25seSBvbmUgc3RyaWN0IHBnICovCisJZm9yIChpID0gMCA7IGkgPCBFMl9OVU1fT0ZfQ09TOyBpKyspIHsKKwkJaWYgKHBnW2ldIDwgRENCWF9NQVhfTlVNX1BHX0JXX0VOVFJJRVMpCisJCQljb3NfZGF0YS0+ZGF0YVtpXS5jb3NfYncgPQorCQkJCURDQlhfUEdfQldfR0VUKGV0cy0+cGdfYndfdGJsLCBwZ1tpXSk7CisJCWVsc2UKKwkJCWNvc19kYXRhLT5kYXRhW2ldLnN0cmljdCA9IEJOWDJYX0RDQlhfQ09TX0hJR0hfU1RSSUNUOworCX0KK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERlc2NyaXB0aW9uOiBTdGlsbAorICoKKyAqIFJldHVybjoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCBibngyeF9kY2J4X3RocmVlX3BnX3RvX2Nvc19wYXJhbXMoCisJCQkgICAgICBzdHJ1Y3QgYm54MngJCSpicCwKKwkJCSAgICAgIHN0cnVjdCBwZ19oZWxwX2RhdGEJKnBnX2hlbHBfZGF0YSwKKwkJCSAgICAgIHN0cnVjdCBkY2J4X2V0c19mZWF0dXJlCSpldHMsCisJCQkgICAgICBzdHJ1Y3QgY29zX2hlbHBfZGF0YQkqY29zX2RhdGEsCisJCQkgICAgICB1MzIJCQkqcGdfcHJpX29yZ2luYWxfc3ByZWFkLAorCQkJICAgICAgdTMyCQkJcHJpX2pvaW5fbWFzaywKKwkJCSAgICAgIHU4CQkJbnVtX29mX2RpZl9wcmkpCit7CisJdTggaSA9IDA7CisJdTMyIHByaV90ZXN0ZWQgPSAwOworCXU4IGVudHJ5ID0gMDsKKwl1OCBwZ19lbnRyeSA9IDA7CisJYm9vbCBiX2ZvdW5kX3N0cmljdCA9IGZhbHNlOworCXU4IG51bV9vZl9wcmkgPSBMTEZDX0RSSVZFUl9UUkFGRklDX1RZUEVfTUFYOworCisJY29zX2RhdGEtPmRhdGFbMF0ucHJpX2pvaW5fbWFzayA9IGNvc19kYXRhLT5kYXRhWzFdLnByaV9qb2luX21hc2sgPSAwOworCS8qIElmIHRoZXJlIGFyZSBib3RoIHBhdXNlYWJsZSBhbmQgbm9uLXBhdXNlYWJsZSBwcmlvcml0aWVzLAorCSAqIHRoZSBwYXVzZWFibGUgcHJpb3JpdGllcyBnbyB0byB0aGUgZmlyc3QgcXVldWUgYW5kIHRoZQorCSAqIG5vbi1wYXVzZWFibGUgcHJpb3JpdGllcyBnbyB0byB0aGUgc2Vjb25kIHF1ZXVlLgorCSAqLworCWlmIChJU19EQ0JYX1BGQ19QUklfTUlYX1BBVVNFKGJwLCBwcmlfam9pbl9tYXNrKSkKKwkJYm54MnhfZGNieF9zZXBhcmF0ZV9wYXVzZWFibGVfZnJvbV9ub24oYnAsCisJCQkJY29zX2RhdGEsIHBnX3ByaV9vcmdpbmFsX3NwcmVhZCwgZXRzKTsKKwllbHNlIHsKKwkJLyogSWYgdHdvIEJXLWxpbWl0ZWQgUEctcyB3ZXJlIGNvbWJpbmVkIHRvIG9uZSBxdWV1ZSwKKwkJICogdGhlIEJXIGlzIHRoZWlyIHN1bS4KKwkJICoKKwkJICogSWYgdGhlcmUgYXJlIG9ubHkgcGF1c2VhYmxlIHByaW9yaXRpZXMgb3Igb25seSBub24tcGF1c2VhYmxlLAorCQkgKiBhbmQgdGhlcmUgYXJlIGJvdGggQlctbGltaXRlZCBhbmQgbm9uLUJXLWxpbWl0ZWQgUEctcywKKwkJICogdGhlIEJXLWxpbWl0ZWQgUEcvcyBnbyB0byBvbmUgcXVldWUgYW5kIHRoZSBub24tQlctbGltaXRlZAorCQkgKiBQRy9zIGdvIHRvIHRoZSBzZWNvbmQgcXVldWUuCisJCSAqCisJCSAqIElmIHRoZXJlIGFyZSBvbmx5IHBhdXNlYWJsZSBwcmlvcml0aWVzIG9yIG9ubHkgbm9uLXBhdXNlYWJsZQorCQkgKiBhbmQgYWxsIGFyZSBCVyBsaW1pdGVkLCB0aGVuCXR3byBwcmlvcml0aWVzIGdvIHRvIHRoZSBmaXJzdAorCQkgKiBxdWV1ZSBhbmQgb25lIHByaW9yaXR5IGdvZXMgdG8gdGhlIHNlY29uZCBxdWV1ZS4KKwkJICoKKwkJICogV2Ugd2lsbCBqb2luIHRoaXMgdHdvIGNhc2VzOgorCQkgKiBpZiBvbmUgaXMgQlcgbGltaXRlZCBpdCB3aWxsIGdvIHRvIHRoZSBzZWNvZW5kIHF1ZXVlCisJCSAqIG90aGVyd2lzZSB0aGUgbGFzdCBwcmlvcml0eSB3aWxsIGdldCBpdAorCQkgKi8KKworCQljb3NfZGF0YS0+ZGF0YVswXS5wYXVzYWJsZSA9IGNvc19kYXRhLT5kYXRhWzFdLnBhdXNhYmxlID0KKwkJCUlTX0RDQlhfUEZDX1BSSV9PTkxZX1BBVVNFKGJwLCBwcmlfam9pbl9tYXNrKTsKKworCQlmb3IgKGkgPSAwIDsgaSA8IG51bV9vZl9wcmk7IGkrKykgeworCQkJcHJpX3Rlc3RlZCA9IDEgPDwgYnAtPmRjYnhfcG9ydF9wYXJhbXMuCisJCQkJYXBwLnRyYWZmaWNfdHlwZV9wcmlvcml0eVtpXTsKKwkJCXBnX2VudHJ5ID0gKHU4KXBnX3ByaV9vcmdpbmFsX3NwcmVhZFticC0+CisJCQkJZGNieF9wb3J0X3BhcmFtcy5hcHAudHJhZmZpY190eXBlX3ByaW9yaXR5W2ldXTsKKworCQkJaWYgKHBnX2VudHJ5IDwgRENCWF9NQVhfTlVNX1BHX0JXX0VOVFJJRVMpIHsKKwkJCQllbnRyeSA9IDA7CisKKwkJCQlpZiAoaSA9PSAobnVtX29mX3ByaS0xKSAmJgorCQkJCSAgICBmYWxzZSA9PSBiX2ZvdW5kX3N0cmljdCkKKwkJCQkJLyogbGFzdCBlbnRyeSB3aWxsIGJlIGhhbmRsZWQgc2VwYXJhdGVseQorCQkJCQkgKiBJZiBubyBwcmlvcml0eSBpcyBzdHJpY3QgdGhhbiBsYXN0CisJCQkJCSAqIGVudHkgZ29lcyB0byBsYXN0IHF1ZXVlLiovCisJCQkJCWVudHJ5ID0gMTsKKwkJCQljb3NfZGF0YS0+ZGF0YVtlbnRyeV0ucHJpX2pvaW5fbWFzayB8PQorCQkJCQkJCQlwcmlfdGVzdGVkOworCQkJCWJueDJ4X2RjYnhfYWRkX3RvX2Nvc19idyhicCwKKwkJCQkJJmNvc19kYXRhLT5kYXRhW2VudHJ5XSwKKwkJCQkJRENCWF9QR19CV19HRVQoZXRzLT5wZ19id190YmwsCisJCQkJCQkgICAgICAgcGdfZW50cnkpKTsKKwkJCX0gZWxzZSB7CisJCQkJYl9mb3VuZF9zdHJpY3QgPSB0cnVlOworCQkJCWNvc19kYXRhLT5kYXRhWzFdLnByaV9qb2luX21hc2sgfD0gcHJpX3Rlc3RlZDsKKwkJCQkvKiBJZiB3ZSBqb2luIGEgZ3JvdXAgYW5kIG9uZSBpcyBzdHJpY3QKKwkJCQkgKiB0aGFuIHRoZSBidyBydWxscyAqLworCQkJCWNvc19kYXRhLT5kYXRhWzFdLnN0cmljdCA9CisJCQkJCUJOWDJYX0RDQlhfQ09TX0hJR0hfU1RSSUNUOworCQkJfQorCQl9CisJfQorfQorCisKK3N0YXRpYyB2b2lkIGJueDJ4X2RjYnhfZmlsbF9jb3NfcGFyYW1zKHN0cnVjdCBibngyeCAqYnAsCisJCQkJICAgICAgIHN0cnVjdCBwZ19oZWxwX2RhdGEgKmhlbHBfZGF0YSwKKwkJCQkgICAgICAgc3RydWN0IGRjYnhfZXRzX2ZlYXR1cmUgKmV0cywKKwkJCQkgICAgICAgdTMyICpwZ19wcmlfb3JnaW5hbF9zcHJlYWQpCit7CisJc3RydWN0IGNvc19oZWxwX2RhdGEgICAgICAgICBjb3NfZGF0YSA7CisJdTggICAgICAgICAgICAgICAgICAgIGkgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDA7CisJdTMyICAgICAgICAgICAgICAgICAgIHByaV9qb2luX21hc2sgICAgICAgICAgICAgICA9IDA7CisJdTggICAgICAgICAgICAgICAgICAgIG51bV9vZl9kaWZfcHJpICAgICAgICAgICAgICA9IDA7CisKKwltZW1zZXQoJmNvc19kYXRhLCAwLCBzaXplb2YoY29zX2RhdGEpKTsKKwkvKiBWYWxpZGF0ZSB0aGUgcGcgdmFsdWUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgaGVscF9kYXRhLT5udW1fb2ZfcGcgOyBpKyspIHsKKwkJaWYgKERDQlhfU1RSSUNUX1BSSU9SSVRZICE9IGhlbHBfZGF0YS0+ZGF0YVtpXS5wZyAmJgorCQkgICAgRENCWF9NQVhfTlVNX1BHX0JXX0VOVFJJRVMgPD0gaGVscF9kYXRhLT5kYXRhW2ldLnBnKQorCQkJQk5YMlhfRVJSKCJJbnZhbGlkIHBnWyVkXSBkYXRhICV4XG4iLCBpLAorCQkJCSAgaGVscF9kYXRhLT5kYXRhW2ldLnBnKTsKKwkJcHJpX2pvaW5fbWFzayAgIHw9ICBoZWxwX2RhdGEtPmRhdGFbaV0ucGdfcHJpb3JpdHk7CisJCW51bV9vZl9kaWZfcHJpICArPSBoZWxwX2RhdGEtPmRhdGFbaV0ubnVtX29mX2RpZl9wcmk7CisJfQorCisJLyogZGVmYXVsdCBzZXR0aW5ncyAqLworCWNvc19kYXRhLm51bV9vZl9jb3MgPSAyOworCWZvciAoaSA9IDA7IGkgPCBFMl9OVU1fT0ZfQ09TIDsgaSsrKSB7CisJCWNvc19kYXRhLmRhdGFbaV0ucHJpX2pvaW5fbWFzayAgICA9IHByaV9qb2luX21hc2s7CisJCWNvc19kYXRhLmRhdGFbaV0ucGF1c2FibGUgICAgICAgICA9IGZhbHNlOworCQljb3NfZGF0YS5kYXRhW2ldLnN0cmljdCAgICAgICAgICAgPSBCTlgyWF9EQ0JYX0NPU19OT1RfU1RSSUNUOworCQljb3NfZGF0YS5kYXRhW2ldLmNvc19idyAgICAgICAgICAgPSBEQ0JYX0lOVkFMSURfQ09TX0JXOworCX0KKworCXN3aXRjaCAoaGVscF9kYXRhLT5udW1fb2ZfcGcpIHsKKwljYXNlIDE6CisKKwkJYnhuMnhfZGNieF9zaW5nbGVfcGdfdG9fY29zX3BhcmFtcygKKwkJCQkJICAgICAgIGJwLAorCQkJCQkgICAgICAgaGVscF9kYXRhLAorCQkJCQkgICAgICAgJmNvc19kYXRhLAorCQkJCQkgICAgICAgcHJpX2pvaW5fbWFzaywKKwkJCQkJICAgICAgIG51bV9vZl9kaWZfcHJpKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlibngyeF9kY2J4X3R3b19wZ190b19jb3NfcGFyYW1zKAorCQkJCQkgICAgYnAsCisJCQkJCSAgICBoZWxwX2RhdGEsCisJCQkJCSAgICBldHMsCisJCQkJCSAgICAmY29zX2RhdGEsCisJCQkJCSAgICBwZ19wcmlfb3JnaW5hbF9zcHJlYWQsCisJCQkJCSAgICBwcmlfam9pbl9tYXNrLAorCQkJCQkgICAgbnVtX29mX2RpZl9wcmkpOworCQlicmVhazsKKworCWNhc2UgMzoKKwkJYm54MnhfZGNieF90aHJlZV9wZ190b19jb3NfcGFyYW1zKAorCQkJCQkgICAgICBicCwKKwkJCQkJICAgICAgaGVscF9kYXRhLAorCQkJCQkgICAgICBldHMsCisJCQkJCSAgICAgICZjb3NfZGF0YSwKKwkJCQkJICAgICAgcGdfcHJpX29yZ2luYWxfc3ByZWFkLAorCQkJCQkgICAgICBwcmlfam9pbl9tYXNrLAorCQkJCQkgICAgICBudW1fb2ZfZGlmX3ByaSk7CisKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQk5YMlhfRVJSKCJXcm9uZyBwZ19oZWxwX2RhdGEubnVtX29mX3BnXG4iKTsKKwkJYm54MnhfZGNieF9ldHNfZGlzYWJsZWRfZW50cnlfZGF0YShicCwKKwkJCQkJCSAgICZjb3NfZGF0YSwgcHJpX2pvaW5fbWFzayk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGNvc19kYXRhLm51bV9vZl9jb3MgOyBpKyspIHsKKwkJc3RydWN0IGJueDJ4X2RjYnhfY29zX3BhcmFtcyAqcGFyYW1zID0KKwkJCSZicC0+ZGNieF9wb3J0X3BhcmFtcy5ldHMuY29zX3BhcmFtc1tpXTsKKworCQlwYXJhbXMtPnBhdXNlYWJsZSA9IGNvc19kYXRhLmRhdGFbaV0ucGF1c2FibGU7CisJCXBhcmFtcy0+c3RyaWN0ID0gY29zX2RhdGEuZGF0YVtpXS5zdHJpY3Q7CisJCXBhcmFtcy0+YndfdGJsID0gY29zX2RhdGEuZGF0YVtpXS5jb3NfYnc7CisJCWlmIChwYXJhbXMtPnBhdXNlYWJsZSkgeworCQkJcGFyYW1zLT5wcmlfYml0bWFzayA9CisJCQlEQ0JYX1BGQ19QUklfR0VUX1BBVVNFKGJwLAorCQkJCQljb3NfZGF0YS5kYXRhW2ldLnByaV9qb2luX21hc2spOworCQkJRFAoTkVUSUZfTVNHX0xJTkssICJDT1MgJWQgUEFVU0FCTEUgcHJpam9pbm1hc2sgMHgleFxuIiwKKwkJCQkgIGksIGNvc19kYXRhLmRhdGFbaV0ucHJpX2pvaW5fbWFzayk7CisJCX0gZWxzZSB7CisJCQlwYXJhbXMtPnByaV9iaXRtYXNrID0KKwkJCURDQlhfUEZDX1BSSV9HRVRfTk9OX1BBVVNFKGJwLAorCQkJCQljb3NfZGF0YS5kYXRhW2ldLnByaV9qb2luX21hc2spOworCQkJRFAoTkVUSUZfTVNHX0xJTkssICJDT1MgJWQgTk9OUEFVU0FCTEUgcHJpam9pbm1hc2sgIgorCQkJCQkgICIweCV4XG4iLAorCQkJCSAgaSwgY29zX2RhdGEuZGF0YVtpXS5wcmlfam9pbl9tYXNrKTsKKwkJfQorCX0KKworCWJwLT5kY2J4X3BvcnRfcGFyYW1zLmV0cy5udW1fb2ZfY29zID0gY29zX2RhdGEubnVtX29mX2NvcyA7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X2RjYnhfZ2V0X2V0c19wcmlfcGdfdGJsKHN0cnVjdCBibngyeCAqYnAsCisJCQkJdTMyICpzZXRfY29uZmlndXJhdGlvbl9ldHNfcGcsCisJCQkJdTMyICpwcmlfcGdfdGJsKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IERDQlhfTUFYX05VTV9QUklfUEdfRU5UUklFUzsgaSsrKSB7CisJCXNldF9jb25maWd1cmF0aW9uX2V0c19wZ1tpXSA9IERDQlhfUFJJX1BHX0dFVChwcmlfcGdfdGJsLCBpKTsKKworCQlEUChORVRJRl9NU0dfTElOSywgInNldF9jb25maWd1cmF0aW9uX2V0c19wZ1slZF0gPSAweCV4XG4iLAorCQkgICBpLCBzZXRfY29uZmlndXJhdGlvbl9ldHNfcGdbaV0pOworCX0KK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERlc2NyaXB0aW9uOiBGaWxsIHBmY19jb25maWcgc3RydWN0IHRoYXQgd2lsbCBiZSBzZW50IGluIERDQlggc3RhcnQgcmFtcm9kCisgKgorICogUmV0dXJuOgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIGJueDJ4X3BmY19md19zdHJ1Y3RfZTIoc3RydWN0IGJueDJ4ICpicCkKK3sKKwlzdHJ1Y3QgZmxvd19jb250cm9sX2NvbmZpZ3VyYXRpb24gICAqcGZjX2Z3X2NmZyA9IE5VTEw7CisJdTE2IHByaV9iaXQgPSAwOworCXU4IGNvcyA9IDAsIHByaSA9IDA7CisJc3RydWN0IHByaW9yaXR5X2NvcyAqdHQyY29zOworCXUzMiAqdHRwID0gYnAtPmRjYnhfcG9ydF9wYXJhbXMuYXBwLnRyYWZmaWNfdHlwZV9wcmlvcml0eTsKKworCXBmY19md19jZmcgPSAoc3RydWN0IGZsb3dfY29udHJvbF9jb25maWd1cmF0aW9uICopCisJCQkJCWJueDJ4X3NwKGJwLCBwZmNfY29uZmlnKTsKKwltZW1zZXQocGZjX2Z3X2NmZywgMCwgc2l6ZW9mKHN0cnVjdCBmbG93X2NvbnRyb2xfY29uZmlndXJhdGlvbikpOworCisJLypzaG9ydGN1dCovCisJdHQyY29zID0gcGZjX2Z3X2NmZy0+dHJhZmZpY190eXBlX3RvX3ByaW9yaXR5X2NvczsKKworCS8qIEZ3IHZlcnNpb24gc2hvdWxkIGJlIGluY3JlbWVudGVkIGVhY2ggdXBkYXRlICovCisJcGZjX2Z3X2NmZy0+ZGNiX3ZlcnNpb24gPSArK2JwLT5kY2JfdmVyc2lvbjsKKwlwZmNfZndfY2ZnLT5kY2JfZW5hYmxlZCA9IERDQl9FTkFCTEVEOworCisJLyogRGVmYXVsdCBpbml0aWFsaXphdGlvbiAqLworCWZvciAocHJpID0gMDsgcHJpIDwgTUFYX1BGQ19UUkFGRklDX1RZUEVTIDsgcHJpKyspIHsKKwkJdHQyY29zW3ByaV0ucHJpb3JpdHkgPSBMTEZDX1RSQUZGSUNfVFlQRV9UT19QUklPUklUWV9VTk1BUFBFRDsKKwkJdHQyY29zW3ByaV0uY29zID0gMDsKKwl9CisKKwkvKiBGaWxsIHByaW9yaXR5IHBhcmFtZXRlcnMgKi8KKwlmb3IgKHByaSA9IDA7IHByaSA8IExMRkNfRFJJVkVSX1RSQUZGSUNfVFlQRV9NQVg7IHByaSsrKSB7CisJCXR0MmNvc1twcmldLnByaW9yaXR5ID0gdHRwW3ByaV07CisJCXByaV9iaXQgPSAxIDw8IHR0MmNvc1twcmldLnByaW9yaXR5OworCisJCS8qIEZpbGwgQ09TIHBhcmFtZXRlcnMgYmFzZWQgb24gQ09TIGNhbGN1bGF0ZWQgdG8KKwkJICogbWFrZSBpdCBtb3JlIGdlbmVyYWxseSBmb3IgZnV0dXJlIHVzZSAqLworCQlmb3IgKGNvcyA9IDA7IGNvcyA8IGJwLT5kY2J4X3BvcnRfcGFyYW1zLmV0cy5udW1fb2ZfY29zOyBjb3MrKykKKwkJCWlmIChicC0+ZGNieF9wb3J0X3BhcmFtcy5ldHMuY29zX3BhcmFtc1tjb3NdLgorCQkJCQkJcHJpX2JpdG1hc2sgJiBwcmlfYml0KQorCQkJCQl0dDJjb3NbcHJpXS5jb3MgPSBjb3M7CisJfQorCWJueDJ4X2RjYnhfcHJpbnRfY29zX3BhcmFtcyhicCwJcGZjX2Z3X2NmZyk7Cit9CisvKiBEQ0IgbmV0bGluayAqLworI2lmZGVmIEJDTV9EQ0IKKyNpbmNsdWRlIDxsaW51eC9kY2JubC5oPgorCisjZGVmaW5lIEJOWDJYX0RDQlhfQ0FQUwkJKERDQl9DQVBfRENCWF9MTERfTUFOQUdFRCB8IFwKKwkJCQlEQ0JfQ0FQX0RDQlhfVkVSX0NFRSB8IERDQl9DQVBfRENCWF9TVEFUSUMpCisKK3N0YXRpYyBpbmxpbmUgYm9vbCBibngyeF9kY2JubF9zZXRfdmFsaWQoc3RydWN0IGJueDJ4ICpicCkKK3sKKwkvKiB2YWxpZGF0ZSBkY2JubCBjYWxsIHRoYXQgbWF5IGNoYW5nZSBIVyBzdGF0ZToKKwkgKiBEQ0IgaXMgb24gYW5kIERDQlggbW9kZSB3YXMgU1VDQ0VTU0ZVTExZIHNldCBieSB0aGUgdXNlci4KKwkgKi8KKwlyZXR1cm4gYnAtPmRjYl9zdGF0ZSAmJiBicC0+ZGNieF9tb2RlX3VzZXQ7Cit9CisKK3N0YXRpYyB1OCBibngyeF9kY2JubF9nZXRfc3RhdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlEUChORVRJRl9NU0dfTElOSywgInN0YXRlID0gJWRcbiIsIGJwLT5kY2Jfc3RhdGUpOworCXJldHVybiBicC0+ZGNiX3N0YXRlOworfQorCitzdGF0aWMgdTggYm54MnhfZGNibmxfc2V0X3N0YXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHU4IHN0YXRlKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCURQKE5FVElGX01TR19MSU5LLCAic3RhdGUgPSAlc1xuIiwgc3RhdGUgPyAib24iIDogIm9mZiIpOworCisJYm54MnhfZGNieF9zZXRfc3RhdGUoYnAsIChzdGF0ZSA/IHRydWUgOiBmYWxzZSksIGJwLT5kY2J4X2VuYWJsZWQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBibngyeF9kY2JubF9nZXRfcGVybV9od19hZGRyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJCSB1OCAqcGVybV9hZGRyKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCURQKE5FVElGX01TR19MSU5LLCAiR0VULVBFUk0tQUREUlxuIik7CisKKwkvKiBmaXJzdCB0aGUgSFcgbWFjIGFkZHJlc3MgKi8KKwltZW1jcHkocGVybV9hZGRyLCBuZXRkZXYtPmRldl9hZGRyLCBuZXRkZXYtPmFkZHJfbGVuKTsKKworI2lmZGVmIEJDTV9DTklDCisJLyogc2Vjb25kIFNBTiBhZGRyZXNzICovCisJbWVtY3B5KHBlcm1fYWRkcituZXRkZXYtPmFkZHJfbGVuLCBicC0+ZmlwX21hYywgbmV0ZGV2LT5hZGRyX2xlbik7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgYm54MnhfZGNibmxfc2V0X3BnX3RjY2ZnX3R4KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBwcmlvLAorCQkJCQl1OCBwcmlvX3R5cGUsIHU4IHBnaWQsIHU4IGJ3X3BjdCwKKwkJCQkJdTggdXBfbWFwKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJRFAoTkVUSUZfTVNHX0xJTkssICJwcmlvWyVkXSA9ICVkXG4iLCBwcmlvLCBwZ2lkKTsKKwlpZiAoIWJueDJ4X2RjYm5sX3NldF92YWxpZChicCkgfHwgcHJpbyA+PSBEQ0JYX01BWF9OVU1fUFJJX1BHX0VOVFJJRVMpCisJCXJldHVybjsKKworCS8qKgorCSAqIGJ3X3BjdCBpbmdub3JlZCAtCWJhbmQtd2lkdGggcGVyY2VudGFnZSBkZXZpc2lvbiBiZXR3ZWVuIHVzZXIKKwkgKgkJCXByaW9yaXRpZXMgd2l0aGluIHRoZSBzYW1lIGdyb3VwIGlzIG5vdAorCSAqCQkJc3RhbmRhcmQgYW5kIGhlbmNlIG5vdCBzdXBwb3J0ZWQKKwkgKgorCSAqIHByaW9fdHlwZSBpZ29ucmVkIC0JcHJpb3JpdHkgbGV2ZWxzIHdpdGhpbiB0aGUgc2FtZSBncm91cCBhcmUgbm90CisJICoJCQlzdGFuZGFyZCBhbmQgaGVuY2UgYXJlIG5vdCBzdXBwb3J0ZWQuIEFjY29yZGluZworCSAqCQkJdG8gdGhlIHN0YW5kYXJkIHBnaWQgMTUgaXMgZGVkaWNhdGVkIHRvIHN0cmljdAorCSAqCQkJcHJpb2lydHkgdHJhZmZpYyAob24gdGhlIHBvcnQgbGV2ZWwpLgorCSAqCisJICogdXBfbWFwIGlnbm9yZWQKKwkgKi8KKworCWJwLT5kY2J4X2NvbmZpZ19wYXJhbXMuYWRtaW5fY29uZmlndXJhdGlvbl9ldHNfcGdbcHJpb10gPSBwZ2lkOworCWJwLT5kY2J4X2NvbmZpZ19wYXJhbXMuYWRtaW5fZXRzX2NvbmZpZ3VyYXRpb25fdHhfZW5hYmxlID0gMTsKK30KKworc3RhdGljIHZvaWQgYm54MnhfZGNibmxfc2V0X3BnX2J3Z2NmZ190eChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCQkgaW50IHBnaWQsIHU4IGJ3X3BjdCkKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlEUChORVRJRl9NU0dfTElOSywgInBnaWRbJWRdID0gJWRcbiIsIHBnaWQsIGJ3X3BjdCk7CisKKwlpZiAoIWJueDJ4X2RjYm5sX3NldF92YWxpZChicCkgfHwgcGdpZCA+PSBEQ0JYX01BWF9OVU1fUEdfQldfRU5UUklFUykKKwkJcmV0dXJuOworCisJYnAtPmRjYnhfY29uZmlnX3BhcmFtcy5hZG1pbl9jb25maWd1cmF0aW9uX2J3X3ByZWNlbnRhZ2VbcGdpZF0gPSBid19wY3Q7CisJYnAtPmRjYnhfY29uZmlnX3BhcmFtcy5hZG1pbl9ldHNfY29uZmlndXJhdGlvbl90eF9lbmFibGUgPSAxOworfQorCitzdGF0aWMgdm9pZCBibngyeF9kY2JubF9zZXRfcGdfdGNjZmdfcngoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHByaW8sCisJCQkJCXU4IHByaW9fdHlwZSwgdTggcGdpZCwgdTggYndfcGN0LAorCQkJCQl1OCB1cF9tYXApCit7CisJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KG5ldGRldik7CisJRFAoTkVUSUZfTVNHX0xJTkssICJOb3RoaW5nIHRvIHNldDsgTm8gUlggc3VwcG9ydFxuIik7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X2RjYm5sX3NldF9wZ19id2djZmdfcngoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkJIGludCBwZ2lkLCB1OCBid19wY3QpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KG5ldGRldik7CisJRFAoTkVUSUZfTVNHX0xJTkssICJOb3RoaW5nIHRvIHNldDsgTm8gUlggc3VwcG9ydFxuIik7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X2RjYm5sX2dldF9wZ190Y2NmZ190eChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgcHJpbywKKwkJCQkJdTggKnByaW9fdHlwZSwgdTggKnBnaWQsIHU4ICpid19wY3QsCisJCQkJCXU4ICp1cF9tYXApCit7CisJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KG5ldGRldik7CisJRFAoTkVUSUZfTVNHX0xJTkssICJwcmlvID0gJWRcbiIsIHByaW8pOworCisJLyoqCisJICogYndfcGN0IGluZ25vcmVkIC0JYmFuZC13aWR0aCBwZXJjZW50YWdlIGRldmlzaW9uIGJldHdlZW4gdXNlcgorCSAqCQkJcHJpb3JpdGllcyB3aXRoaW4gdGhlIHNhbWUgZ3JvdXAgaXMgbm90CisJICoJCQlzdGFuZGFyZCBhbmQgaGVuY2Ugbm90IHN1cHBvcnRlZAorCSAqCisJICogcHJpb190eXBlIGlnb25yZWQgLQlwcmlvcml0eSBsZXZlbHMgd2l0aGluIHRoZSBzYW1lIGdyb3VwIGFyZSBub3QKKwkgKgkJCXN0YW5kYXJkIGFuZCBoZW5jZSBhcmUgbm90IHN1cHBvcnRlZC4gQWNjb3JkaW5nCisJICoJCQl0byB0aGUgc3RhbmRhcmQgcGdpZCAxNSBpcyBkZWRpY2F0ZWQgdG8gc3RyaWN0CisJICoJCQlwcmlvaXJ0eSB0cmFmZmljIChvbiB0aGUgcG9ydCBsZXZlbCkuCisJICoKKwkgKiB1cF9tYXAgaWdub3JlZAorCSAqLworCSp1cF9tYXAgPSAqYndfcGN0ID0gKnByaW9fdHlwZSA9ICpwZ2lkID0gMDsKKworCWlmICghYnAtPmRjYl9zdGF0ZSB8fCBwcmlvID49IERDQlhfTUFYX05VTV9QUklfUEdfRU5UUklFUykKKwkJcmV0dXJuOworCisJKnBnaWQgPSBEQ0JYX1BSSV9QR19HRVQoYnAtPmRjYnhfbG9jYWxfZmVhdC5ldHMucHJpX3BnX3RibCwgcHJpbyk7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X2RjYm5sX2dldF9wZ19id2djZmdfdHgoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkJIGludCBwZ2lkLCB1OCAqYndfcGN0KQoreworCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCURQKE5FVElGX01TR19MSU5LLCAicGdpZCA9ICVkXG4iLCBwZ2lkKTsKKworCSpid19wY3QgPSAwOworCisJaWYgKCFicC0+ZGNiX3N0YXRlIHx8IHBnaWQgPj0gRENCWF9NQVhfTlVNX1BHX0JXX0VOVFJJRVMpCisJCXJldHVybjsKKworCSpid19wY3QgPSBEQ0JYX1BHX0JXX0dFVChicC0+ZGNieF9sb2NhbF9mZWF0LmV0cy5wZ19id190YmwsIHBnaWQpOworfQorCitzdGF0aWMgdm9pZCBibngyeF9kY2JubF9nZXRfcGdfdGNjZmdfcngoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHByaW8sCisJCQkJCXU4ICpwcmlvX3R5cGUsIHU4ICpwZ2lkLCB1OCAqYndfcGN0LAorCQkJCQl1OCAqdXBfbWFwKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCURQKE5FVElGX01TR19MSU5LLCAiTm90aGluZyB0byBnZXQ7IE5vIFJYIHN1cHBvcnRcbiIpOworCisJKnByaW9fdHlwZSA9ICpwZ2lkID0gKmJ3X3BjdCA9ICp1cF9tYXAgPSAwOworfQorCitzdGF0aWMgdm9pZCBibngyeF9kY2JubF9nZXRfcGdfYndnY2ZnX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJCSBpbnQgcGdpZCwgdTggKmJ3X3BjdCkKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlEUChORVRJRl9NU0dfTElOSywgIk5vdGhpbmcgdG8gZ2V0OyBObyBSWCBzdXBwb3J0XG4iKTsKKworCSpid19wY3QgPSAwOworfQorCitzdGF0aWMgdm9pZCBibngyeF9kY2JubF9zZXRfcGZjX2NmZyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgcHJpbywKKwkJCQkgICAgdTggc2V0dGluZykKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlEUChORVRJRl9NU0dfTElOSywgInByaW9bJWRdID0gJWRcbiIsIHByaW8sIHNldHRpbmcpOworCisJaWYgKCFibngyeF9kY2JubF9zZXRfdmFsaWQoYnApIHx8IHByaW8gPj0gTUFYX1BGQ19QUklPUklUSUVTKQorCQlyZXR1cm47CisKKwlicC0+ZGNieF9jb25maWdfcGFyYW1zLmFkbWluX3BmY19iaXRtYXAgfD0gKChzZXR0aW5nID8gMSA6IDApIDw8IHByaW8pOworCisJaWYgKHNldHRpbmcpCisJCWJwLT5kY2J4X2NvbmZpZ19wYXJhbXMuYWRtaW5fcGZjX3R4X2VuYWJsZSA9IDE7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X2RjYm5sX2dldF9wZmNfY2ZnKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBwcmlvLAorCQkJCSAgICB1OCAqc2V0dGluZykKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlEUChORVRJRl9NU0dfTElOSywgInByaW8gPSAlZFxuIiwgcHJpbyk7CisKKwkqc2V0dGluZyA9IDA7CisKKwlpZiAoIWJwLT5kY2Jfc3RhdGUgfHwgcHJpbyA+PSBNQVhfUEZDX1BSSU9SSVRJRVMpCisJCXJldHVybjsKKworCSpzZXR0aW5nID0gKGJwLT5kY2J4X2xvY2FsX2ZlYXQucGZjLnByaV9lbl9iaXRtYXAgPj4gcHJpbykgJiAweDE7Cit9CisKK3N0YXRpYyB1OCBibngyeF9kY2JubF9zZXRfYWxsKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KG5ldGRldik7CisJaW50IHJjID0gMDsKKworCURQKE5FVElGX01TR19MSU5LLCAiU0VULUFMTFxuIik7CisKKwlpZiAoIWJueDJ4X2RjYm5sX3NldF92YWxpZChicCkpCisJCXJldHVybiAxOworCisJaWYgKGJwLT5yZWNvdmVyeV9zdGF0ZSAhPSBCTlgyWF9SRUNPVkVSWV9ET05FKSB7CisJCW5ldGRldl9lcnIoYnAtPmRldiwgIkhhbmRsaW5nIHBhcml0eSBlcnJvciByZWNvdmVyeS4gIgorCQkJCSJUcnkgYWdhaW4gbGF0ZXJcbiIpOworCQlyZXR1cm4gMTsKKwl9CisJaWYgKG5ldGlmX3J1bm5pbmcoYnAtPmRldikpIHsKKwkJYm54MnhfbmljX3VubG9hZChicCwgVU5MT0FEX05PUk1BTCk7CisJCXJjID0gYm54MnhfbmljX2xvYWQoYnAsIExPQURfTk9STUFMKTsKKwl9CisJRFAoTkVUSUZfTVNHX0xJTkssICJzZXRfZGNieF9wYXJhbXMgZG9uZSAoJWQpXG4iLCByYyk7CisJaWYgKHJjKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdTggYm54MnhfZGNibmxfZ2V0X2NhcChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgY2FwaWQsIHU4ICpjYXApCit7CisJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KG5ldGRldik7CisJdTggcnZhbCA9IDA7CisKKwlpZiAoYnAtPmRjYl9zdGF0ZSkgeworCQlzd2l0Y2ggKGNhcGlkKSB7CisJCWNhc2UgRENCX0NBUF9BVFRSX1BHOgorCQkJKmNhcCA9IHRydWU7CisJCQlicmVhazsKKwkJY2FzZSBEQ0JfQ0FQX0FUVFJfUEZDOgorCQkJKmNhcCA9IHRydWU7CisJCQlicmVhazsKKwkJY2FzZSBEQ0JfQ0FQX0FUVFJfVVAyVEM6CisJCQkqY2FwID0gZmFsc2U7CisJCQlicmVhazsKKwkJY2FzZSBEQ0JfQ0FQX0FUVFJfUEdfVENTOgorCQkJKmNhcCA9IDB4ODA7CS8qIDggcHJpb3JpdGllcyBmb3IgUEdzICovCisJCQlicmVhazsKKwkJY2FzZSBEQ0JfQ0FQX0FUVFJfUEZDX1RDUzoKKwkJCSpjYXAgPSAweDgwOwkvKiA4IHByaW9yaXRpZXMgZm9yIFBGQyAqLworCQkJYnJlYWs7CisJCWNhc2UgRENCX0NBUF9BVFRSX0dTUDoKKwkJCSpjYXAgPSB0cnVlOworCQkJYnJlYWs7CisJCWNhc2UgRENCX0NBUF9BVFRSX0JDTjoKKwkJCSpjYXAgPSBmYWxzZTsKKwkJCWJyZWFrOworCQljYXNlIERDQl9DQVBfQVRUUl9EQ0JYOgorCQkJKmNhcCA9IEJOWDJYX0RDQlhfQ0FQUzsKKwkJZGVmYXVsdDoKKwkJCXJ2YWwgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UKKwkJcnZhbCA9IC1FSU5WQUw7CisKKwlEUChORVRJRl9NU0dfTElOSywgImNhcGlkICVkOiV4XG4iLCBjYXBpZCwgKmNhcCk7CisJcmV0dXJuIHJ2YWw7Cit9CisKK3N0YXRpYyB1OCBibngyeF9kY2JubF9nZXRfbnVtdGNzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCB0Y2lkLCB1OCAqbnVtKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXU4IHJ2YWwgPSAwOworCisJRFAoTkVUSUZfTVNHX0xJTkssICJ0Y2lkICVkXG4iLCB0Y2lkKTsKKworCWlmIChicC0+ZGNiX3N0YXRlKSB7CisJCXN3aXRjaCAodGNpZCkgeworCQljYXNlIERDQl9OVU1UQ1NfQVRUUl9QRzoKKwkJCSpudW0gPSBFMl9OVU1fT0ZfQ09TOworCQkJYnJlYWs7CisJCWNhc2UgRENCX05VTVRDU19BVFRSX1BGQzoKKwkJCSpudW0gPSBFMl9OVU1fT0ZfQ09TOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlydmFsID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJfSBlbHNlCisJCXJ2YWwgPSAtRUlOVkFMOworCisJcmV0dXJuIHJ2YWw7Cit9CisKK3N0YXRpYyB1OCBibngyeF9kY2JubF9zZXRfbnVtdGNzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCB0Y2lkLCB1OCBudW0pCit7CisJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KG5ldGRldik7CisJRFAoTkVUSUZfTVNHX0xJTkssICJudW0gdGNzID0gJWQ7IE5vdCBzdXBwb3J0ZWRcbiIsIG51bSk7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyB1OCAgYm54MnhfZGNibmxfZ2V0X3BmY19zdGF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCURQKE5FVElGX01TR19MSU5LLCAic3RhdGUgPSAlZFxuIiwgYnAtPmRjYnhfbG9jYWxfZmVhdC5wZmMuZW5hYmxlZCk7CisKKwlpZiAoIWJwLT5kY2Jfc3RhdGUpCisJCXJldHVybiAwOworCisJcmV0dXJuIGJwLT5kY2J4X2xvY2FsX2ZlYXQucGZjLmVuYWJsZWQ7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X2RjYm5sX3NldF9wZmNfc3RhdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTggc3RhdGUpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KG5ldGRldik7CisJRFAoTkVUSUZfTVNHX0xJTkssICJzdGF0ZSA9ICVzXG4iLCBzdGF0ZSA/ICJvbiIgOiAib2ZmIik7CisKKwlpZiAoIWJueDJ4X2RjYm5sX3NldF92YWxpZChicCkpCisJCXJldHVybjsKKworCWJwLT5kY2J4X2NvbmZpZ19wYXJhbXMuYWRtaW5fcGZjX3R4X2VuYWJsZSA9CisJYnAtPmRjYnhfY29uZmlnX3BhcmFtcy5hZG1pbl9wZmNfZW5hYmxlID0gKHN0YXRlID8gMSA6IDApOworfQorCitzdGF0aWMgYm9vbCBibngyeF9hcHBfaXNfZXF1YWwoc3RydWN0IGRjYnhfYXBwX3ByaW9yaXR5X2VudHJ5ICphcHBfZW50LAorCQkJICAgICAgIHU4IGlkdHlwZSwgdTE2IGlkdmFsKQoreworCWlmICghKGFwcF9lbnQtPmFwcEJpdGZpZWxkICYgRENCWF9BUFBfRU5UUllfVkFMSUQpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlzd2l0Y2ggKGlkdHlwZSkgeworCWNhc2UgRENCX0FQUF9JRFRZUEVfRVRIVFlQRToKKwkJaWYgKChhcHBfZW50LT5hcHBCaXRmaWVsZCAmIERDQlhfQVBQX0VOVFJZX1NGX01BU0spICE9CisJCQlEQ0JYX0FQUF9TRl9FVEhfVFlQRSkKKwkJCXJldHVybiBmYWxzZTsKKwkJYnJlYWs7CisJY2FzZSBEQ0JfQVBQX0lEVFlQRV9QT1JUTlVNOgorCQlpZiAoKGFwcF9lbnQtPmFwcEJpdGZpZWxkICYgRENCWF9BUFBfRU5UUllfU0ZfTUFTSykgIT0KKwkJCURDQlhfQVBQX1NGX1BPUlQpCisJCQlyZXR1cm4gZmFsc2U7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiBmYWxzZTsKKwl9CisJaWYgKGFwcF9lbnQtPmFwcF9pZCAhPSBpZHZhbCkKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X2FkbWluX2FwcF9zZXRfZW50KAorCXN0cnVjdCBibngyeF9hZG1pbl9wcmlvcml0eV9hcHBfdGFibGUgKmFwcF9lbnQsCisJdTggaWR0eXBlLCB1MTYgaWR2YWwsIHU4IHVwKQoreworCWFwcF9lbnQtPnZhbGlkID0gMTsKKworCXN3aXRjaCAoaWR0eXBlKSB7CisJY2FzZSBEQ0JfQVBQX0lEVFlQRV9FVEhUWVBFOgorCQlhcHBfZW50LT50cmFmZmljX3R5cGUgPSBUUkFGRklDX1RZUEVfRVRIOworCQlicmVhazsKKwljYXNlIERDQl9BUFBfSURUWVBFX1BPUlROVU06CisJCWFwcF9lbnQtPnRyYWZmaWNfdHlwZSA9IFRSQUZGSUNfVFlQRV9QT1JUOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsgLyogbmV2ZXIgZ2V0cyBoZXJlICovCisJfQorCWFwcF9lbnQtPmFwcF9pZCA9IGlkdmFsOworCWFwcF9lbnQtPnByaW9yaXR5ID0gdXA7Cit9CisKK3N0YXRpYyBib29sIGJueDJ4X2FkbWluX2FwcF9pc19lcXVhbCgKKwlzdHJ1Y3QgYm54MnhfYWRtaW5fcHJpb3JpdHlfYXBwX3RhYmxlICphcHBfZW50LAorCXU4IGlkdHlwZSwgdTE2IGlkdmFsKQoreworCWlmICghYXBwX2VudC0+dmFsaWQpCisJCXJldHVybiBmYWxzZTsKKworCXN3aXRjaCAoaWR0eXBlKSB7CisJY2FzZSBEQ0JfQVBQX0lEVFlQRV9FVEhUWVBFOgorCQlpZiAoYXBwX2VudC0+dHJhZmZpY190eXBlICE9IFRSQUZGSUNfVFlQRV9FVEgpCisJCQlyZXR1cm4gZmFsc2U7CisJCWJyZWFrOworCWNhc2UgRENCX0FQUF9JRFRZUEVfUE9SVE5VTToKKwkJaWYgKGFwcF9lbnQtPnRyYWZmaWNfdHlwZSAhPSBUUkFGRklDX1RZUEVfUE9SVCkKKwkJCXJldHVybiBmYWxzZTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIGZhbHNlOworCX0KKwlpZiAoYXBwX2VudC0+YXBwX2lkICE9IGlkdmFsKQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGludCBibngyeF9zZXRfYWRtaW5fYXBwX3VwKHN0cnVjdCBibngyeCAqYnAsIHU4IGlkdHlwZSwgdTE2IGlkdmFsLCB1OCB1cCkKK3sKKwlpbnQgaSwgZmY7CisKKwkvKiBpdGVyYXRlIG92ZXIgdGhlIGFwcCBlbnRyaWVzIGxvb2tpbmcgZm9yIGlkdHlwZSBhbmQgaWR2YWwgKi8KKwlmb3IgKGkgPSAwLCBmZiA9IC0xOyBpIDwgNDsgaSsrKSB7CisJCXN0cnVjdCBibngyeF9hZG1pbl9wcmlvcml0eV9hcHBfdGFibGUgKmFwcF9lbnQgPQorCQkJJmJwLT5kY2J4X2NvbmZpZ19wYXJhbXMuYWRtaW5fcHJpb3JpdHlfYXBwX3RhYmxlW2ldOworCQlpZiAoYm54MnhfYWRtaW5fYXBwX2lzX2VxdWFsKGFwcF9lbnQsIGlkdHlwZSwgaWR2YWwpKQorCQkJYnJlYWs7CisKKwkJaWYgKGZmIDwgMCAmJiAhYXBwX2VudC0+dmFsaWQpCisJCQlmZiA9IGk7CisJfQorCWlmIChpIDwgNCkKKwkJLyogaWYgZm91bmQgb3ZlcndyaXRlIHVwICovCisJCWJwLT5kY2J4X2NvbmZpZ19wYXJhbXMuCisJCQlhZG1pbl9wcmlvcml0eV9hcHBfdGFibGVbaV0ucHJpb3JpdHkgPSB1cDsKKwllbHNlIGlmIChmZiA+PSAwKQorCQkvKiBub3QgZm91bmQgdXNlIGZpcnN0LWZyZWUgKi8KKwkJYm54MnhfYWRtaW5fYXBwX3NldF9lbnQoCisJCQkmYnAtPmRjYnhfY29uZmlnX3BhcmFtcy5hZG1pbl9wcmlvcml0eV9hcHBfdGFibGVbZmZdLAorCQkJaWR0eXBlLCBpZHZhbCwgdXApOworCWVsc2UKKwkJLyogYXBwIHRhYmxlIGlzIGZ1bGwgKi8KKwkJcmV0dXJuIC1FQlVTWTsKKworCS8qIHVwIGNvbmZpZ3VyZWQsIGlmIG5vdCAwIG1ha2Ugc3VyZSBmZWF0dXJlIGlzIGVuYWJsZWQgKi8KKwlpZiAodXApCisJCWJwLT5kY2J4X2NvbmZpZ19wYXJhbXMuYWRtaW5fYXBwbGljYXRpb25fcHJpb3JpdHlfdHhfZW5hYmxlID0gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdTggYm54MnhfZGNibmxfc2V0X2FwcF91cChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1OCBpZHR5cGUsCisJCQkJIHUxNiBpZHZhbCwgdTggdXApCit7CisJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlEUChORVRJRl9NU0dfTElOSywgImFwcF90eXBlICVkLCBhcHBfaWQgJXgsIHByaW8gYml0bWFwICVkXG4iLAorCSAgIGlkdHlwZSwgaWR2YWwsIHVwKTsKKworCWlmICghYm54MnhfZGNibmxfc2V0X3ZhbGlkKGJwKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiB2ZXJpZnkgaWR0eXBlICovCisJc3dpdGNoIChpZHR5cGUpIHsKKwljYXNlIERDQl9BUFBfSURUWVBFX0VUSFRZUEU6CisJY2FzZSBEQ0JfQVBQX0lEVFlQRV9QT1JUTlVNOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIGJueDJ4X3NldF9hZG1pbl9hcHBfdXAoYnAsIGlkdHlwZSwgaWR2YWwsIHVwKTsKK30KKworc3RhdGljIHU4IGJueDJ4X2RjYm5sX2dldF9hcHBfdXAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTggaWR0eXBlLAorCQkJCSB1MTYgaWR2YWwpCit7CisJaW50IGk7CisJdTggdXAgPSAwOworCisJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KG5ldGRldik7CisJRFAoTkVUSUZfTVNHX0xJTkssICJhcHBfdHlwZSAlZCwgYXBwX2lkIDB4JXhcbiIsIGlkdHlwZSwgaWR2YWwpOworCisJLyogaXRlcmF0ZSBvdmVyIHRoZSBhcHAgZW50cmllcyBsb29raW5nIGZvciBpZHR5cGUgYW5kIGlkdmFsICovCisJZm9yIChpID0gMDsgaSA8IERDQlhfTUFYX0FQUF9QUk9UT0NPTDsgaSsrKQorCQlpZiAoYm54MnhfYXBwX2lzX2VxdWFsKCZicC0+ZGNieF9sb2NhbF9mZWF0LmFwcC5hcHBfcHJpX3RibFtpXSwKKwkJCQkgICAgICAgaWR0eXBlLCBpZHZhbCkpCisJCQlicmVhazsKKworCWlmIChpIDwgRENCWF9NQVhfQVBQX1BST1RPQ09MKQorCQkvKiBpZiBmb3VuZCByZXR1cm4gdXAgKi8KKwkJdXAgPSBicC0+ZGNieF9sb2NhbF9mZWF0LmFwcC5hcHBfcHJpX3RibFtpXS5wcmlfYml0bWFwOworCWVsc2UKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJhcHAgbm90IGZvdW5kXG4iKTsKKworCXJldHVybiB1cDsKK30KKworc3RhdGljIHU4IGJueDJ4X2RjYm5sX2dldF9kY2J4KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KG5ldGRldik7CisJdTggc3RhdGU7CisKKwlzdGF0ZSA9IERDQl9DQVBfRENCWF9MTERfTUFOQUdFRCB8IERDQl9DQVBfRENCWF9WRVJfQ0VFOworCisJaWYgKGJwLT5kY2J4X2VuYWJsZWQgPT0gQk5YMlhfRENCWF9FTkFCTEVEX09OX05FR19PRkYpCisJCXN0YXRlIHw9IERDQl9DQVBfRENCWF9TVEFUSUM7CisKKwlyZXR1cm4gc3RhdGU7Cit9CisKK3N0YXRpYyB1OCBibngyeF9kY2JubF9zZXRfZGNieChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1OCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlEUChORVRJRl9NU0dfTElOSywgInN0YXRlID0gJTAyeFxuIiwgc3RhdGUpOworCisJLyogc2V0IGRjYnggbW9kZSAqLworCisJaWYgKChzdGF0ZSAmIEJOWDJYX0RDQlhfQ0FQUykgIT0gc3RhdGUpIHsKKwkJQk5YMlhfRVJSKCJSZXF1ZXN0ZWQgRENCWCBtb2RlICV4IGlzIGJleW9uZCBhZHZlcnRpc2VkICIKKwkJCSAgImNhcGFiaWxpdGllc1xuIiwgc3RhdGUpOworCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAoYnAtPmRjYl9zdGF0ZSAhPSBCTlgyWF9EQ0JfU1RBVEVfT04pIHsKKwkJQk5YMlhfRVJSKCJEQ0IgdHVybmVkIG9mZiwgRENCWCBjb25maWd1cmF0aW9uIGlzIGludmFsaWRcbiIpOworCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAoc3RhdGUgJiBEQ0JfQ0FQX0RDQlhfU1RBVElDKQorCQlicC0+ZGNieF9lbmFibGVkID0gQk5YMlhfRENCWF9FTkFCTEVEX09OX05FR19PRkY7CisJZWxzZQorCQlicC0+ZGNieF9lbmFibGVkID0gQk5YMlhfRENCWF9FTkFCTEVEX09OX05FR19PTjsKKworCWJwLT5kY2J4X21vZGVfdXNldCA9IHRydWU7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHU4IGJueDJ4X2RjYm5sX2dldF9mZWF0Y2ZnKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBmZWF0aWQsCisJCQkJICB1OCAqZmxhZ3MpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KG5ldGRldik7CisJdTggcnZhbCA9IDA7CisKKwlEUChORVRJRl9NU0dfTElOSywgImZlYXRpZCAlZFxuIiwgZmVhdGlkKTsKKworCWlmIChicC0+ZGNiX3N0YXRlKSB7CisJCSpmbGFncyA9IDA7CisJCXN3aXRjaCAoZmVhdGlkKSB7CisJCWNhc2UgRENCX0ZFQVRDRkdfQVRUUl9QRzoKKwkJCWlmIChicC0+ZGNieF9sb2NhbF9mZWF0LmV0cy5lbmFibGVkKQorCQkJCSpmbGFncyB8PSBEQ0JfRkVBVENGR19FTkFCTEU7CisJCQlpZiAoYnAtPmRjYnhfZXJyb3IgJiBEQ0JYX0xPQ0FMX0VUU19FUlJPUikKKwkJCQkqZmxhZ3MgfD0gRENCX0ZFQVRDRkdfRVJST1I7CisJCQlicmVhazsKKwkJY2FzZSBEQ0JfRkVBVENGR19BVFRSX1BGQzoKKwkJCWlmIChicC0+ZGNieF9sb2NhbF9mZWF0LnBmYy5lbmFibGVkKQorCQkJCSpmbGFncyB8PSBEQ0JfRkVBVENGR19FTkFCTEU7CisJCQlpZiAoYnAtPmRjYnhfZXJyb3IgJiAoRENCWF9MT0NBTF9QRkNfRVJST1IgfAorCQkJICAgIERDQlhfTE9DQUxfUEZDX01JU01BVENIKSkKKwkJCQkqZmxhZ3MgfD0gRENCX0ZFQVRDRkdfRVJST1I7CisJCQlicmVhazsKKwkJY2FzZSBEQ0JfRkVBVENGR19BVFRSX0FQUDoKKwkJCWlmIChicC0+ZGNieF9sb2NhbF9mZWF0LmFwcC5lbmFibGVkKQorCQkJCSpmbGFncyB8PSBEQ0JfRkVBVENGR19FTkFCTEU7CisJCQlpZiAoYnAtPmRjYnhfZXJyb3IgJiAoRENCWF9MT0NBTF9BUFBfRVJST1IgfAorCQkJICAgIERDQlhfTE9DQUxfQVBQX01JU01BVENIKSkKKwkJCQkqZmxhZ3MgfD0gRENCX0ZFQVRDRkdfRVJST1I7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJ2YWwgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UKKwkJcnZhbCA9IC1FSU5WQUw7CisKKwlyZXR1cm4gcnZhbDsKK30KKworc3RhdGljIHU4IGJueDJ4X2RjYm5sX3NldF9mZWF0Y2ZnKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBmZWF0aWQsCisJCQkJICB1OCBmbGFncykKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwl1OCBydmFsID0gMDsKKworCURQKE5FVElGX01TR19MSU5LLCAiZmVhdGlkID0gJWQgZmxhZ3MgPSAlMDJ4XG4iLCBmZWF0aWQsIGZsYWdzKTsKKworCS8qIGlnbm9yZSB0aGUgJ2FkdmVydGlzZScgZmxhZyAqLworCWlmIChibngyeF9kY2JubF9zZXRfdmFsaWQoYnApKSB7CisJCXN3aXRjaCAoZmVhdGlkKSB7CisJCWNhc2UgRENCX0ZFQVRDRkdfQVRUUl9QRzoKKwkJCWJwLT5kY2J4X2NvbmZpZ19wYXJhbXMuYWRtaW5fZXRzX2VuYWJsZSA9CisJCQkJZmxhZ3MgJiBEQ0JfRkVBVENGR19FTkFCTEUgPyAxIDogMDsKKwkJCWJwLT5kY2J4X2NvbmZpZ19wYXJhbXMuYWRtaW5fZXRzX3dpbGxpbmcgPQorCQkJCWZsYWdzICYgRENCX0ZFQVRDRkdfV0lMTElORyA/IDEgOiAwOworCQkJYnJlYWs7CisJCWNhc2UgRENCX0ZFQVRDRkdfQVRUUl9QRkM6CisJCQlicC0+ZGNieF9jb25maWdfcGFyYW1zLmFkbWluX3BmY19lbmFibGUgPQorCQkJCWZsYWdzICYgRENCX0ZFQVRDRkdfRU5BQkxFID8gMSA6IDA7CisJCQlicC0+ZGNieF9jb25maWdfcGFyYW1zLmFkbWluX3BmY193aWxsaW5nID0KKwkJCQlmbGFncyAmIERDQl9GRUFUQ0ZHX1dJTExJTkcgPyAxIDogMDsKKwkJCWJyZWFrOworCQljYXNlIERDQl9GRUFUQ0ZHX0FUVFJfQVBQOgorCQkJLyogaWdub3JlIGVuYWJsZSwgYWx3YXlzIGVuYWJsZWQgKi8KKwkJCWJwLT5kY2J4X2NvbmZpZ19wYXJhbXMuYWRtaW5fYXBwX3ByaW9yaXR5X3dpbGxpbmcgPQorCQkJCWZsYWdzICYgRENCX0ZFQVRDRkdfV0lMTElORyA/IDEgOiAwOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlydmFsID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJfSBlbHNlCisJCXJ2YWwgPSAtRUlOVkFMOworCisJcmV0dXJuIHJ2YWw7Cit9CisKK2NvbnN0IHN0cnVjdCBkY2JubF9ydG5sX29wcyBibngyeF9kY2JubF9vcHMgPSB7CisJLmdldHN0YXRlICAgICAgID0gYm54MnhfZGNibmxfZ2V0X3N0YXRlLAorCS5zZXRzdGF0ZSAgICAgICA9IGJueDJ4X2RjYm5sX3NldF9zdGF0ZSwKKwkuZ2V0cGVybWh3YWRkciAgPSBibngyeF9kY2JubF9nZXRfcGVybV9od19hZGRyLAorCS5zZXRwZ3RjY2ZndHggICA9IGJueDJ4X2RjYm5sX3NldF9wZ190Y2NmZ190eCwKKwkuc2V0cGdid2djZmd0eCAgPSBibngyeF9kY2JubF9zZXRfcGdfYndnY2ZnX3R4LAorCS5zZXRwZ3RjY2ZncnggICA9IGJueDJ4X2RjYm5sX3NldF9wZ190Y2NmZ19yeCwKKwkuc2V0cGdid2djZmdyeCAgPSBibngyeF9kY2JubF9zZXRfcGdfYndnY2ZnX3J4LAorCS5nZXRwZ3RjY2ZndHggICA9IGJueDJ4X2RjYm5sX2dldF9wZ190Y2NmZ190eCwKKwkuZ2V0cGdid2djZmd0eCAgPSBibngyeF9kY2JubF9nZXRfcGdfYndnY2ZnX3R4LAorCS5nZXRwZ3RjY2ZncnggICA9IGJueDJ4X2RjYm5sX2dldF9wZ190Y2NmZ19yeCwKKwkuZ2V0cGdid2djZmdyeCAgPSBibngyeF9kY2JubF9nZXRfcGdfYndnY2ZnX3J4LAorCS5zZXRwZmNjZmcgICAgICA9IGJueDJ4X2RjYm5sX3NldF9wZmNfY2ZnLAorCS5nZXRwZmNjZmcgICAgICA9IGJueDJ4X2RjYm5sX2dldF9wZmNfY2ZnLAorCS5zZXRhbGwgICAgICAgICA9IGJueDJ4X2RjYm5sX3NldF9hbGwsCisJLmdldGNhcCAgICAgICAgID0gYm54MnhfZGNibmxfZ2V0X2NhcCwKKwkuZ2V0bnVtdGNzICAgICAgPSBibngyeF9kY2JubF9nZXRfbnVtdGNzLAorCS5zZXRudW10Y3MgICAgICA9IGJueDJ4X2RjYm5sX3NldF9udW10Y3MsCisJLmdldHBmY3N0YXRlICAgID0gYm54MnhfZGNibmxfZ2V0X3BmY19zdGF0ZSwKKwkuc2V0cGZjc3RhdGUgICAgPSBibngyeF9kY2JubF9zZXRfcGZjX3N0YXRlLAorCS5nZXRhcHAgICAgICAgICA9IGJueDJ4X2RjYm5sX2dldF9hcHBfdXAsCisJLnNldGFwcCAgICAgICAgID0gYm54MnhfZGNibmxfc2V0X2FwcF91cCwKKwkuZ2V0ZGNieCAgICAgICAgPSBibngyeF9kY2JubF9nZXRfZGNieCwKKwkuc2V0ZGNieCAgICAgICAgPSBibngyeF9kY2JubF9zZXRfZGNieCwKKwkuZ2V0ZmVhdGNmZyAgICAgPSBibngyeF9kY2JubF9nZXRfZmVhdGNmZywKKwkuc2V0ZmVhdGNmZyAgICAgPSBibngyeF9kY2JubF9zZXRfZmVhdGNmZywKK307CisKKyNlbmRpZiAvKiBCQ01fRENCICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9kY2IuaCBiL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2RjYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2NTBmOTgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9kY2IuaApAQCAtMCwwICsxLDE5NiBAQAorLyogYm54MnhfZGNiLmg6IEJyb2FkY29tIEV2ZXJlc3QgbmV0d29yayBkcml2ZXIuCisgKgorICogQ29weXJpZ2h0IDIwMDktMjAxMCBCcm9hZGNvbSBDb3Jwb3JhdGlvbgorICoKKyAqIFVubGVzcyB5b3UgYW5kIEJyb2FkY29tIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyAqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdG8geW91CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwgYXZhaWxhYmxlCisgKiBhdCBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAuaHRtbCAodGhlICJHUEwiKS4KKyAqCisgKiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCB1bmRlciBubyBjaXJjdW1zdGFuY2VzIG1heSB5b3UgY29tYmluZSB0aGlzCisgKiBzb2Z0d2FyZSBpbiBhbnkgd2F5IHdpdGggYW55IG90aGVyIEJyb2FkY29tIHNvZnR3YXJlIHByb3ZpZGVkIHVuZGVyIGEKKyAqIGxpY2Vuc2Ugb3RoZXIgdGhhbiB0aGUgR1BMLCB3aXRob3V0IEJyb2FkY29tJ3MgZXhwcmVzcyBwcmlvciB3cml0dGVuCisgKiBjb25zZW50LgorICoKKyAqIE1haW50YWluZWQgYnk6IEVpbG9uIEdyZWVuc3RlaW4gPGVpbG9uZ0Bicm9hZGNvbS5jb20+CisgKiBXcml0dGVuIGJ5OiBEbWl0cnkgS3JhdmtvdgorICoKKyAqLworI2lmbmRlZiBCTlgyWF9EQ0JfSAorI2RlZmluZSBCTlgyWF9EQ0JfSAorCisjaW5jbHVkZSAiYm54MnhfaHNpLmgiCisKKyNkZWZpbmUgTExGQ19EUklWRVJfVFJBRkZJQ19UWVBFX01BWCAzIC8qIE5XLCBpU0NTSSwgRkNvRSAqLworc3RydWN0IGJueDJ4X2RjYnhfYXBwX3BhcmFtcyB7CisJdTMyIGVuYWJsZWQ7CisJdTMyIHRyYWZmaWNfdHlwZV9wcmlvcml0eVtMTEZDX0RSSVZFUl9UUkFGRklDX1RZUEVfTUFYXTsKK307CisKKyNkZWZpbmUgRTJfTlVNX09GX0NPUwkJCTIKKyNkZWZpbmUgQk5YMlhfRENCWF9DT1NfTk9UX1NUUklDVAkwCisjZGVmaW5lIEJOWDJYX0RDQlhfQ09TX0xPV19TVFJJQ1QJMQorI2RlZmluZSBCTlgyWF9EQ0JYX0NPU19ISUdIX1NUUklDVAkyCisKK3N0cnVjdCBibngyeF9kY2J4X2Nvc19wYXJhbXMgeworCXUzMglid190Ymw7CisJdTMyCXByaV9iaXRtYXNrOworCXU4CXN0cmljdDsKKwl1OAlwYXVzZWFibGU7Cit9OworCitzdHJ1Y3QgYm54MnhfZGNieF9wZ19wYXJhbXMgeworCXUzMiBlbmFibGVkOworCXU4IG51bV9vZl9jb3M7IC8qIHZhbGlkIENPUyBlbnRyaWVzICovCisJc3RydWN0IGJueDJ4X2RjYnhfY29zX3BhcmFtcwljb3NfcGFyYW1zW0UyX05VTV9PRl9DT1NdOworfTsKKworc3RydWN0IGJueDJ4X2RjYnhfcGZjX3BhcmFtcyB7CisJdTMyIGVuYWJsZWQ7CisJdTMyIHByaW9yaXR5X25vbl9wYXVzZWFibGVfbWFzazsKK307CisKK3N0cnVjdCBibngyeF9kY2J4X3BvcnRfcGFyYW1zIHsKKwlzdHJ1Y3QgYm54MnhfZGNieF9wZmNfcGFyYW1zIHBmYzsKKwlzdHJ1Y3QgYm54MnhfZGNieF9wZ19wYXJhbXMgIGV0czsKKwlzdHJ1Y3QgYm54MnhfZGNieF9hcHBfcGFyYW1zIGFwcDsKK307CisKKyNkZWZpbmUgQk5YMlhfRENCWF9DT05GSUdfSU5WX1ZBTFVFCQkJKDB4RkZGRkZGRkYpCisjZGVmaW5lIEJOWDJYX0RDQlhfT1ZFUldSSVRFX1NFVFRJTkdTX0RJU0FCTEUJCTAKKyNkZWZpbmUgQk5YMlhfRENCWF9PVkVSV1JJVEVfU0VUVElOR1NfRU5BQkxFCQkxCisjZGVmaW5lIEJOWDJYX0RDQlhfT1ZFUldSSVRFX1NFVFRJTkdTX0lOVkFMSUQJKEJOWDJYX0RDQlhfQ09ORklHX0lOVl9WQUxVRSkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIExMRFAgcHJvdG9jb2wgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0cnVjdCBibngyeF9jb25maWdfbGxkcF9wYXJhbXMgeworCXUzMiBvdmVyd3JpdGVfc2V0dGluZ3M7CisJdTMyIG1zZ190eF9ob2xkOworCXUzMiBtc2dfZmFzdF90eDsKKwl1MzIgdHhfY3JlZGl0X21heDsKKwl1MzIgbXNnX3R4X2ludGVydmFsOworCXUzMiB0eF9mYXN0OworfTsKKworc3RydWN0IGJueDJ4X2FkbWluX3ByaW9yaXR5X2FwcF90YWJsZSB7CisJCXUzMiB2YWxpZDsKKwkJdTMyIHByaW9yaXR5OworI2RlZmluZSBJTlZBTElEX1RSQUZGSUNfVFlQRV9QUklPUklUWQkoMHhGRkZGRkZGRikKKwkJdTMyIHRyYWZmaWNfdHlwZTsKKyNkZWZpbmUgVFJBRkZJQ19UWVBFX0VUSAkJMAorI2RlZmluZSBUUkFGRklDX1RZUEVfUE9SVAkJMQorCQl1MzIgYXBwX2lkOworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERDQlggcHJvdG9jb2wgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0cnVjdCBibngyeF9jb25maWdfZGNieF9wYXJhbXMgeworCXUzMiBvdmVyd3JpdGVfc2V0dGluZ3M7CisJdTMyIGFkbWluX2RjYnhfdmVyc2lvbjsKKwl1MzIgYWRtaW5fZXRzX2VuYWJsZTsKKwl1MzIgYWRtaW5fcGZjX2VuYWJsZTsKKwl1MzIgYWRtaW5fdGNfc3VwcG9ydGVkX3R4X2VuYWJsZTsKKwl1MzIgYWRtaW5fZXRzX2NvbmZpZ3VyYXRpb25fdHhfZW5hYmxlOworCXUzMiBhZG1pbl9ldHNfcmVjb21tZW5kYXRpb25fdHhfZW5hYmxlOworCXUzMiBhZG1pbl9wZmNfdHhfZW5hYmxlOworCXUzMiBhZG1pbl9hcHBsaWNhdGlvbl9wcmlvcml0eV90eF9lbmFibGU7CisJdTMyIGFkbWluX2V0c193aWxsaW5nOworCXUzMiBhZG1pbl9ldHNfcmVjb192YWxpZDsKKwl1MzIgYWRtaW5fcGZjX3dpbGxpbmc7CisJdTMyIGFkbWluX2FwcF9wcmlvcml0eV93aWxsaW5nOworCXUzMiBhZG1pbl9jb25maWd1cmF0aW9uX2J3X3ByZWNlbnRhZ2VbOF07CisJdTMyIGFkbWluX2NvbmZpZ3VyYXRpb25fZXRzX3BnWzhdOworCXUzMiBhZG1pbl9yZWNvbW1lbmRhdGlvbl9id19wcmVjZW50YWdlWzhdOworCXUzMiBhZG1pbl9yZWNvbW1lbmRhdGlvbl9ldHNfcGdbOF07CisJdTMyIGFkbWluX3BmY19iaXRtYXA7CisJc3RydWN0IGJueDJ4X2FkbWluX3ByaW9yaXR5X2FwcF90YWJsZSBhZG1pbl9wcmlvcml0eV9hcHBfdGFibGVbNF07CisJdTMyIGFkbWluX2RlZmF1bHRfcHJpb3JpdHk7Cit9OworCisjZGVmaW5lIEdFVF9GTEFHUyhmbGFncywgYml0cykJCSgoZmxhZ3MpICYgKGJpdHMpKQorI2RlZmluZSBTRVRfRkxBR1MoZmxhZ3MsIGJpdHMpCQkoKGZsYWdzKSB8PSAoYml0cykpCisjZGVmaW5lIFJFU0VUX0ZMQUdTKGZsYWdzLCBiaXRzKQkoKGZsYWdzKSAmPSB+KGJpdHMpKQorCitlbnVtIHsKKwlEQ0JYX1JFQURfTE9DQUxfTUlCLAorCURDQlhfUkVBRF9SRU1PVEVfTUlCCit9OworCisjZGVmaW5lIEVUSF9UWVBFX0ZDT0UJCSgweDg5MDYpCisjZGVmaW5lIFRDUF9QT1JUX0lTQ1NJCQkoMHhDQkMpCisKKyNkZWZpbmUgUEZDX1ZBTFVFX0ZSQU1FX1NJWkUJCQkJKDUxMikKKyNkZWZpbmUgUEZDX1FVQU5UQV9JTl9OQU5PU0VDX0ZST01fU1BFRURfTUVHQShtZWdhX3NwZWVkKSAgXAorCQkJCSgoMTAwMCAqIFBGQ19WQUxVRV9GUkFNRV9TSVpFKS8obWVnYV9zcGVlZCkpCisKKyNkZWZpbmUgUEZDX0JSQjFfUkVHX0hJR0hfTExGQ19MT1dfVEhSRVNIT0xECQkJMTMwCisjZGVmaW5lIFBGQ19CUkIxX1JFR19ISUdIX0xMRkNfSElHSF9USFJFU0hPTEQJCQkxNzAKKworCisKK3N0cnVjdCBjb3NfZW50cnlfaGVscF9kYXRhIHsKKwl1MzIJCQlwcmlfam9pbl9tYXNrOworCXUzMgkJCWNvc19idzsKKwl1OAkJCXN0cmljdDsKKwlib29sCQkJcGF1c2FibGU7Cit9OworCitzdHJ1Y3QgY29zX2hlbHBfZGF0YSB7CisJc3RydWN0IGNvc19lbnRyeV9oZWxwX2RhdGEJZGF0YVtFMl9OVU1fT0ZfQ09TXTsKKwl1OAkJCQludW1fb2ZfY29zOworfTsKKworI2RlZmluZSBEQ0JYX0lMTEVHQUxfUEcJCQkJKDB4RkYpCisjZGVmaW5lIERDQlhfUEZDX1BSSV9NQVNLCQkJKDB4RkYpCisjZGVmaW5lIERDQlhfU1RSSUNUX1BSSU9SSVRZCQkJKDE1KQorI2RlZmluZSBEQ0JYX0lOVkFMSURfQ09TX0JXCQkJKDB4RkZGRkZGRkYpCisjZGVmaW5lIERDQlhfUEZDX1BSSV9OT05fUEFVU0VfTUFTSyhicCkJCVwKKwkJCSgoYnApLT5kY2J4X3BvcnRfcGFyYW1zLnBmYy5wcmlvcml0eV9ub25fcGF1c2VhYmxlX21hc2spCisjZGVmaW5lIERDQlhfUEZDX1BSSV9QQVVTRV9NQVNLKGJwKQkJXAorCQkJCQkoKHU4KX5EQ0JYX1BGQ19QUklfTk9OX1BBVVNFX01BU0soYnApKQorI2RlZmluZSBEQ0JYX1BGQ19QUklfR0VUX1BBVVNFKGJwLCBwZ19wcmkpCVwKKwkJCQkoKHBnX3ByaSkgJiAoRENCWF9QRkNfUFJJX1BBVVNFX01BU0soYnApKSkKKyNkZWZpbmUgRENCWF9QRkNfUFJJX0dFVF9OT05fUEFVU0UoYnAsIHBnX3ByaSkJXAorCQkJKERDQlhfUEZDX1BSSV9OT05fUEFVU0VfTUFTSyhicCkgJiAocGdfcHJpKSkKKyNkZWZpbmUgSVNfRENCWF9QRkNfUFJJX09OTFlfUEFVU0UoYnAsIHBnX3ByaSkJXAorCQkJKHBnX3ByaSA9PSBEQ0JYX1BGQ19QUklfR0VUX1BBVVNFKChicCksIChwZ19wcmkpKSkKKyNkZWZpbmUgSVNfRENCWF9QRkNfUFJJX09OTFlfTk9OX1BBVVNFKGJwLCBwZ19wcmkpXAorCQkJKChwZ19wcmkpID09IERDQlhfUEZDX1BSSV9HRVRfTk9OX1BBVVNFKChicCksIChwZ19wcmkpKSkKKyNkZWZpbmUgSVNfRENCWF9QRkNfUFJJX01JWF9QQVVTRShicCwgcGdfcHJpKQlcCisJCQkoIShJU19EQ0JYX1BGQ19QUklfT05MWV9OT05fUEFVU0UoKGJwKSwgKHBnX3ByaSkpIHx8IFwKKwkJCSBJU19EQ0JYX1BGQ19QUklfT05MWV9QQVVTRSgoYnApLCAocGdfcHJpKSkpKQorCisKK3N0cnVjdCBwZ19lbnRyeV9oZWxwX2RhdGEgeworCXU4CW51bV9vZl9kaWZfcHJpOworCXU4CXBnOworCXUzMglwZ19wcmlvcml0eTsKK307CisKK3N0cnVjdCBwZ19oZWxwX2RhdGEgeworCXN0cnVjdCBwZ19lbnRyeV9oZWxwX2RhdGEJZGF0YVtMTEZDX0RSSVZFUl9UUkFGRklDX1RZUEVfTUFYXTsKKwl1OAkJCQludW1fb2ZfcGc7Cit9OworCisvKiBmb3J3YXJkIERDQi9QRkMgcmVsYXRlZCBkZWNsYXJhdGlvbnMgKi8KK3N0cnVjdCBibngyeDsKK3ZvaWQgYm54MnhfZGNiX2luaXRfaW50bWVtX3BmYyhzdHJ1Y3QgYm54MnggKmJwKTsKK3ZvaWQgYm54MnhfZGNieF91cGRhdGUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKK3ZvaWQgYm54MnhfZGNieF9pbml0X3BhcmFtcyhzdHJ1Y3QgYm54MnggKmJwKTsKK3ZvaWQgYm54MnhfZGNieF9zZXRfc3RhdGUoc3RydWN0IGJueDJ4ICpicCwgYm9vbCBkY2Jfb24sIHUzMiBkY2J4X2VuYWJsZWQpOworCitlbnVtIHsKKwlCTlgyWF9EQ0JYX1NUQVRFX05FR19SRUNFSVZFRCA9IDB4MSwKKwlCTlgyWF9EQ0JYX1NUQVRFX1RYX1BBVVNFRCA9IDB4MiwKKwlCTlgyWF9EQ0JYX1NUQVRFX1RYX1JFTEVBU0VEID0gMHg0Cit9Owordm9pZCBibngyeF9kY2J4X3NldF9wYXJhbXMoc3RydWN0IGJueDJ4ICpicCwgdTMyIHN0YXRlKTsKKworLyogRENCIG5ldGxpbmsgKi8KKyNpZmRlZiBCQ01fRENCCitleHRlcm4gY29uc3Qgc3RydWN0IGRjYm5sX3J0bmxfb3BzIGJueDJ4X2RjYm5sX29wczsKKyNlbmRpZiAvKiBCQ01fRENCICovCisKKyNlbmRpZiAvKiBCTlgyWF9EQ0JfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54MngvYm54MnhfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfZXRodG9vbC5jCmluZGV4IGQwMmZmYmQuLjk5YzY3MmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9ldGh0b29sLmMKQEAgLTI1LDYgKzI1LDE0MyBAQAogI2luY2x1ZGUgImJueDJ4X2Ntbi5oIgogI2luY2x1ZGUgImJueDJ4X2R1bXAuaCIKIAorLyogTm90ZTogaW4gdGhlIGZvcm1hdCBzdHJpbmdzIGJlbG93ICVzIGlzIHJlcGxhY2VkIGJ5IHRoZSBxdWV1ZS1uYW1lIHdoaWNoIGlzCisgKiBlaXRoZXIgaXRzIGluZGV4IG9yICdmY29lJyBmb3IgdGhlIGZjb2UgcXVldWUuIE1ha2Ugc3VyZSB0aGUgZm9ybWF0IHN0cmluZworICogbGVuZ3RoIGRvZXMgbm90IGV4Y2VlZCBFVEhfR1NUUklOR19MRU4gLSBNQVhfUVVFVUVfTkFNRV9MRU4gKyAyCisgKi8KKyNkZWZpbmUgTUFYX1FVRVVFX05BTUVfTEVOCTQKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeworCWxvbmcgb2Zmc2V0OworCWludCBzaXplOworCWNoYXIgc3RyaW5nW0VUSF9HU1RSSU5HX0xFTl07Cit9IGJueDJ4X3Ffc3RhdHNfYXJyW10gPSB7CisvKiAxICovCXsgUV9TVEFUU19PRkZTRVQzMih0b3RhbF9ieXRlc19yZWNlaXZlZF9oaSksIDgsICJbJXNdOiByeF9ieXRlcyIgfSwKKwl7IFFfU1RBVFNfT0ZGU0VUMzIoZXJyb3JfYnl0ZXNfcmVjZWl2ZWRfaGkpLAorCQkJCQkJOCwgIlslc106IHJ4X2Vycm9yX2J5dGVzIiB9LAorCXsgUV9TVEFUU19PRkZTRVQzMih0b3RhbF91bmljYXN0X3BhY2tldHNfcmVjZWl2ZWRfaGkpLAorCQkJCQkJOCwgIlslc106IHJ4X3VjYXN0X3BhY2tldHMiIH0sCisJeyBRX1NUQVRTX09GRlNFVDMyKHRvdGFsX211bHRpY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2hpKSwKKwkJCQkJCTgsICJbJXNdOiByeF9tY2FzdF9wYWNrZXRzIiB9LAorCXsgUV9TVEFUU19PRkZTRVQzMih0b3RhbF9icm9hZGNhc3RfcGFja2V0c19yZWNlaXZlZF9oaSksCisJCQkJCQk4LCAiWyVzXTogcnhfYmNhc3RfcGFja2V0cyIgfSwKKwl7IFFfU1RBVFNfT0ZGU0VUMzIobm9fYnVmZl9kaXNjYXJkX2hpKSwJOCwgIlslc106IHJ4X2Rpc2NhcmRzIiB9LAorCXsgUV9TVEFUU19PRkZTRVQzMihyeF9lcnJfZGlzY2FyZF9wa3QpLAorCQkJCQkgNCwgIlslc106IHJ4X3BoeV9pcF9lcnJfZGlzY2FyZHMifSwKKwl7IFFfU1RBVFNfT0ZGU0VUMzIocnhfc2tiX2FsbG9jX2ZhaWxlZCksCisJCQkJCSA0LCAiWyVzXTogcnhfc2tiX2FsbG9jX2Rpc2NhcmQiIH0sCisJeyBRX1NUQVRTX09GRlNFVDMyKGh3X2NzdW1fZXJyKSwgNCwgIlslc106IHJ4X2NzdW1fb2ZmbG9hZF9lcnJvcnMiIH0sCisKKy8qIDEwICoveyBRX1NUQVRTX09GRlNFVDMyKHRvdGFsX2J5dGVzX3RyYW5zbWl0dGVkX2hpKSwJOCwgIlslc106IHR4X2J5dGVzIiB9LAorCXsgUV9TVEFUU19PRkZTRVQzMih0b3RhbF91bmljYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfaGkpLAorCQkJCQkJOCwgIlslc106IHR4X3VjYXN0X3BhY2tldHMiIH0sCisJeyBRX1NUQVRTX09GRlNFVDMyKHRvdGFsX211bHRpY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2hpKSwKKwkJCQkJCTgsICJbJXNdOiB0eF9tY2FzdF9wYWNrZXRzIiB9LAorCXsgUV9TVEFUU19PRkZTRVQzMih0b3RhbF9icm9hZGNhc3RfcGFja2V0c190cmFuc21pdHRlZF9oaSksCisJCQkJCQk4LCAiWyVzXTogdHhfYmNhc3RfcGFja2V0cyIgfQorfTsKKworI2RlZmluZSBCTlgyWF9OVU1fUV9TVEFUUyBBUlJBWV9TSVpFKGJueDJ4X3Ffc3RhdHNfYXJyKQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHsKKwlsb25nIG9mZnNldDsKKwlpbnQgc2l6ZTsKKwl1MzIgZmxhZ3M7CisjZGVmaW5lIFNUQVRTX0ZMQUdTX1BPUlQJCTEKKyNkZWZpbmUgU1RBVFNfRkxBR1NfRlVOQwkJMgorI2RlZmluZSBTVEFUU19GTEFHU19CT1RICQkoU1RBVFNfRkxBR1NfRlVOQyB8IFNUQVRTX0ZMQUdTX1BPUlQpCisJY2hhciBzdHJpbmdbRVRIX0dTVFJJTkdfTEVOXTsKK30gYm54Mnhfc3RhdHNfYXJyW10gPSB7CisvKiAxICovCXsgU1RBVFNfT0ZGU0VUMzIodG90YWxfYnl0ZXNfcmVjZWl2ZWRfaGkpLAorCQkJCTgsIFNUQVRTX0ZMQUdTX0JPVEgsICJyeF9ieXRlcyIgfSwKKwl7IFNUQVRTX09GRlNFVDMyKGVycm9yX2J5dGVzX3JlY2VpdmVkX2hpKSwKKwkJCQk4LCBTVEFUU19GTEFHU19CT1RILCAicnhfZXJyb3JfYnl0ZXMiIH0sCisJeyBTVEFUU19PRkZTRVQzMih0b3RhbF91bmljYXN0X3BhY2tldHNfcmVjZWl2ZWRfaGkpLAorCQkJCTgsIFNUQVRTX0ZMQUdTX0JPVEgsICJyeF91Y2FzdF9wYWNrZXRzIiB9LAorCXsgU1RBVFNfT0ZGU0VUMzIodG90YWxfbXVsdGljYXN0X3BhY2tldHNfcmVjZWl2ZWRfaGkpLAorCQkJCTgsIFNUQVRTX0ZMQUdTX0JPVEgsICJyeF9tY2FzdF9wYWNrZXRzIiB9LAorCXsgU1RBVFNfT0ZGU0VUMzIodG90YWxfYnJvYWRjYXN0X3BhY2tldHNfcmVjZWl2ZWRfaGkpLAorCQkJCTgsIFNUQVRTX0ZMQUdTX0JPVEgsICJyeF9iY2FzdF9wYWNrZXRzIiB9LAorCXsgU1RBVFNfT0ZGU0VUMzIocnhfc3RhdF9kb3Qzc3RhdHNmY3NlcnJvcnNfaGkpLAorCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJyeF9jcmNfZXJyb3JzIiB9LAorCXsgU1RBVFNfT0ZGU0VUMzIocnhfc3RhdF9kb3Qzc3RhdHNhbGlnbm1lbnRlcnJvcnNfaGkpLAorCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJyeF9hbGlnbl9lcnJvcnMiIH0sCisJeyBTVEFUU19PRkZTRVQzMihyeF9zdGF0X2V0aGVyc3RhdHN1bmRlcnNpemVwa3RzX2hpKSwKKwkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAicnhfdW5kZXJzaXplX3BhY2tldHMiIH0sCisJeyBTVEFUU19PRkZTRVQzMihldGhlcnN0YXRzb3ZlcnJzaXplcGt0c19oaSksCisJCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInJ4X292ZXJzaXplX3BhY2tldHMiIH0sCisvKiAxMCAqL3sgU1RBVFNfT0ZGU0VUMzIocnhfc3RhdF9ldGhlcnN0YXRzZnJhZ21lbnRzX2hpKSwKKwkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAicnhfZnJhZ21lbnRzIiB9LAorCXsgU1RBVFNfT0ZGU0VUMzIocnhfc3RhdF9ldGhlcnN0YXRzamFiYmVyc19oaSksCisJCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInJ4X2phYmJlcnMiIH0sCisJeyBTVEFUU19PRkZTRVQzMihub19idWZmX2Rpc2NhcmRfaGkpLAorCQkJCTgsIFNUQVRTX0ZMQUdTX0JPVEgsICJyeF9kaXNjYXJkcyIgfSwKKwl7IFNUQVRTX09GRlNFVDMyKG1hY19maWx0ZXJfZGlzY2FyZCksCisJCQkJNCwgU1RBVFNfRkxBR1NfUE9SVCwgInJ4X2ZpbHRlcmVkX3BhY2tldHMiIH0sCisJeyBTVEFUU19PRkZTRVQzMih4eG92ZXJmbG93X2Rpc2NhcmQpLAorCQkJCTQsIFNUQVRTX0ZMQUdTX1BPUlQsICJyeF9md19kaXNjYXJkcyIgfSwKKwl7IFNUQVRTX09GRlNFVDMyKGJyYl9kcm9wX2hpKSwKKwkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAicnhfYnJiX2Rpc2NhcmQiIH0sCisJeyBTVEFUU19PRkZTRVQzMihicmJfdHJ1bmNhdGVfaGkpLAorCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJyeF9icmJfdHJ1bmNhdGUiIH0sCisJeyBTVEFUU19PRkZTRVQzMihwYXVzZV9mcmFtZXNfcmVjZWl2ZWRfaGkpLAorCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJyeF9wYXVzZV9mcmFtZXMiIH0sCisJeyBTVEFUU19PRkZTRVQzMihyeF9zdGF0X21hY2NvbnRyb2xmcmFtZXNyZWNlaXZlZF9oaSksCisJCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInJ4X21hY19jdHJsX2ZyYW1lcyIgfSwKKwl7IFNUQVRTX09GRlNFVDMyKG5pZ190aW1lcl9tYXgpLAorCQkJNCwgU1RBVFNfRkxBR1NfUE9SVCwgInJ4X2NvbnN0YW50X3BhdXNlX2V2ZW50cyIgfSwKKy8qIDIwICoveyBTVEFUU19PRkZTRVQzMihyeF9lcnJfZGlzY2FyZF9wa3QpLAorCQkJCTQsIFNUQVRTX0ZMQUdTX0JPVEgsICJyeF9waHlfaXBfZXJyX2Rpc2NhcmRzIn0sCisJeyBTVEFUU19PRkZTRVQzMihyeF9za2JfYWxsb2NfZmFpbGVkKSwKKwkJCQk0LCBTVEFUU19GTEFHU19CT1RILCAicnhfc2tiX2FsbG9jX2Rpc2NhcmQiIH0sCisJeyBTVEFUU19PRkZTRVQzMihod19jc3VtX2VyciksCisJCQkJNCwgU1RBVFNfRkxBR1NfQk9USCwgInJ4X2NzdW1fb2ZmbG9hZF9lcnJvcnMiIH0sCisKKwl7IFNUQVRTX09GRlNFVDMyKHRvdGFsX2J5dGVzX3RyYW5zbWl0dGVkX2hpKSwKKwkJCQk4LCBTVEFUU19GTEFHU19CT1RILCAidHhfYnl0ZXMiIH0sCisJeyBTVEFUU19PRkZTRVQzMih0eF9zdGF0X2lmaGNvdXRiYWRvY3RldHNfaGkpLAorCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJ0eF9lcnJvcl9ieXRlcyIgfSwKKwl7IFNUQVRTX09GRlNFVDMyKHRvdGFsX3VuaWNhc3RfcGFja2V0c190cmFuc21pdHRlZF9oaSksCisJCQkJOCwgU1RBVFNfRkxBR1NfQk9USCwgInR4X3VjYXN0X3BhY2tldHMiIH0sCisJeyBTVEFUU19PRkZTRVQzMih0b3RhbF9tdWx0aWNhc3RfcGFja2V0c190cmFuc21pdHRlZF9oaSksCisJCQkJOCwgU1RBVFNfRkxBR1NfQk9USCwgInR4X21jYXN0X3BhY2tldHMiIH0sCisJeyBTVEFUU19PRkZTRVQzMih0b3RhbF9icm9hZGNhc3RfcGFja2V0c190cmFuc21pdHRlZF9oaSksCisJCQkJOCwgU1RBVFNfRkxBR1NfQk9USCwgInR4X2JjYXN0X3BhY2tldHMiIH0sCisJeyBTVEFUU19PRkZTRVQzMih0eF9zdGF0X2RvdDNzdGF0c2ludGVybmFsbWFjdHJhbnNtaXRlcnJvcnNfaGkpLAorCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJ0eF9tYWNfZXJyb3JzIiB9LAorCXsgU1RBVFNfT0ZGU0VUMzIocnhfc3RhdF9kb3Qzc3RhdHNjYXJyaWVyc2Vuc2VlcnJvcnNfaGkpLAorCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJ0eF9jYXJyaWVyX2Vycm9ycyIgfSwKKy8qIDMwICoveyBTVEFUU19PRkZTRVQzMih0eF9zdGF0X2RvdDNzdGF0c3NpbmdsZWNvbGxpc2lvbmZyYW1lc19oaSksCisJCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInR4X3NpbmdsZV9jb2xsaXNpb25zIiB9LAorCXsgU1RBVFNfT0ZGU0VUMzIodHhfc3RhdF9kb3Qzc3RhdHNtdWx0aXBsZWNvbGxpc2lvbmZyYW1lc19oaSksCisJCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInR4X211bHRpX2NvbGxpc2lvbnMiIH0sCisJeyBTVEFUU19PRkZTRVQzMih0eF9zdGF0X2RvdDNzdGF0c2RlZmVycmVkdHJhbnNtaXNzaW9uc19oaSksCisJCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInR4X2RlZmVycmVkIiB9LAorCXsgU1RBVFNfT0ZGU0VUMzIodHhfc3RhdF9kb3Qzc3RhdHNleGNlc3NpdmVjb2xsaXNpb25zX2hpKSwKKwkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAidHhfZXhjZXNzX2NvbGxpc2lvbnMiIH0sCisJeyBTVEFUU19PRkZTRVQzMih0eF9zdGF0X2RvdDNzdGF0c2xhdGVjb2xsaXNpb25zX2hpKSwKKwkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAidHhfbGF0ZV9jb2xsaXNpb25zIiB9LAorCXsgU1RBVFNfT0ZGU0VUMzIodHhfc3RhdF9ldGhlcnN0YXRzY29sbGlzaW9uc19oaSksCisJCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInR4X3RvdGFsX2NvbGxpc2lvbnMiIH0sCisJeyBTVEFUU19PRkZTRVQzMih0eF9zdGF0X2V0aGVyc3RhdHNwa3RzNjRvY3RldHNfaGkpLAorCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJ0eF82NF9ieXRlX3BhY2tldHMiIH0sCisJeyBTVEFUU19PRkZTRVQzMih0eF9zdGF0X2V0aGVyc3RhdHNwa3RzNjVvY3RldHN0bzEyN29jdGV0c19oaSksCisJCQk4LCBTVEFUU19GTEFHU19QT1JULCAidHhfNjVfdG9fMTI3X2J5dGVfcGFja2V0cyIgfSwKKwl7IFNUQVRTX09GRlNFVDMyKHR4X3N0YXRfZXRoZXJzdGF0c3BrdHMxMjhvY3RldHN0bzI1NW9jdGV0c19oaSksCisJCQk4LCBTVEFUU19GTEFHU19QT1JULCAidHhfMTI4X3RvXzI1NV9ieXRlX3BhY2tldHMiIH0sCisJeyBTVEFUU19PRkZTRVQzMih0eF9zdGF0X2V0aGVyc3RhdHNwa3RzMjU2b2N0ZXRzdG81MTFvY3RldHNfaGkpLAorCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInR4XzI1Nl90b181MTFfYnl0ZV9wYWNrZXRzIiB9LAorLyogNDAgKi97IFNUQVRTX09GRlNFVDMyKHR4X3N0YXRfZXRoZXJzdGF0c3BrdHM1MTJvY3RldHN0bzEwMjNvY3RldHNfaGkpLAorCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInR4XzUxMl90b18xMDIzX2J5dGVfcGFja2V0cyIgfSwKKwl7IFNUQVRTX09GRlNFVDMyKGV0aGVyc3RhdHNwa3RzMTAyNG9jdGV0c3RvMTUyMm9jdGV0c19oaSksCisJCQk4LCBTVEFUU19GTEFHU19QT1JULCAidHhfMTAyNF90b18xNTIyX2J5dGVfcGFja2V0cyIgfSwKKwl7IFNUQVRTX09GRlNFVDMyKGV0aGVyc3RhdHNwa3Rzb3ZlcjE1MjJvY3RldHNfaGkpLAorCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInR4XzE1MjNfdG9fOTAyMl9ieXRlX3BhY2tldHMiIH0sCisJeyBTVEFUU19PRkZTRVQzMihwYXVzZV9mcmFtZXNfc2VudF9oaSksCisJCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInR4X3BhdXNlX2ZyYW1lcyIgfQorfTsKKworI2RlZmluZSBCTlgyWF9OVU1fU1RBVFMJCUFSUkFZX1NJWkUoYm54Mnhfc3RhdHNfYXJyKQorCiBzdGF0aWMgaW50IGJueDJ4X2dldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKIHsKIAlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTQ1LDE0ICsxODIsOSBAQAogCQljbWQtPnNwZWVkID0gYnAtPmxpbmtfcGFyYW1zLnJlcV9saW5lX3NwZWVkW2NmZ19pZHhdOwogCQljbWQtPmR1cGxleCA9IGJwLT5saW5rX3BhcmFtcy5yZXFfZHVwbGV4W2NmZ19pZHhdOwogCX0KLQlpZiAoSVNfTUYoYnApKSB7Ci0JCXUxNiB2bl9tYXhfcmF0ZSA9ICgoYnAtPm1mX2NvbmZpZ1tCUF9WTihicCldICYKLQkJCUZVTkNfTUZfQ0ZHX01BWF9CV19NQVNLKSA+PiBGVU5DX01GX0NGR19NQVhfQldfU0hJRlQpICoKLQkJCTEwMDsKIAotCQlpZiAodm5fbWF4X3JhdGUgPCBjbWQtPnNwZWVkKQotCQkJY21kLT5zcGVlZCA9IHZuX21heF9yYXRlOwotCX0KKwlpZiAoSVNfTUYoYnApKQorCQljbWQtPnNwZWVkID0gYm54MnhfZ2V0X21mX3NwZWVkKGJwKTsKIAogCWlmIChicC0+cG9ydC5zdXBwb3J0ZWRbY2ZnX2lkeF0gJiBTVVBQT1JURURfVFApCiAJCWNtZC0+cG9ydCA9IFBPUlRfVFA7CkBAIC04NywxOCArMjE5LDU3IEBACiB7CiAJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7CiAJdTMyIGFkdmVydGlzaW5nLCBjZmdfaWR4LCBvbGRfbXVsdGlfcGh5X2NvbmZpZywgbmV3X211bHRpX3BoeV9jb25maWc7CisJdTMyIHNwZWVkOwogCi0JaWYgKElTX01GKGJwKSkKKwlpZiAoSVNfTUZfU0QoYnApKQogCQlyZXR1cm4gMDsKIAogCURQKE5FVElGX01TR19MSU5LLCAiZXRodG9vbF9jbWQ6IGNtZCAlZFxuIgotCSAgIERQX0xFVkVMICIgIHN1cHBvcnRlZCAweCV4ICBhZHZlcnRpc2luZyAweCV4ICBzcGVlZCAlZFxuIgotCSAgIERQX0xFVkVMICIgIGR1cGxleCAlZCAgcG9ydCAlZCAgcGh5X2FkZHJlc3MgJWQgIHRyYW5zY2VpdmVyICVkXG4iCi0JICAgRFBfTEVWRUwgIiAgYXV0b25lZyAlZCAgbWF4dHhwa3QgJWQgIG1heHJ4cGt0ICVkXG4iLAorCSAgICIgIHN1cHBvcnRlZCAweCV4ICBhZHZlcnRpc2luZyAweCV4ICBzcGVlZCAlZCBzcGVlZF9oaSAlZFxuIgorCSAgICIgIGR1cGxleCAlZCAgcG9ydCAlZCAgcGh5X2FkZHJlc3MgJWQgIHRyYW5zY2VpdmVyICVkXG4iCisJICAgIiAgYXV0b25lZyAlZCAgbWF4dHhwa3QgJWQgIG1heHJ4cGt0ICVkXG4iLAogCSAgIGNtZC0+Y21kLCBjbWQtPnN1cHBvcnRlZCwgY21kLT5hZHZlcnRpc2luZywgY21kLT5zcGVlZCwKKwkgICBjbWQtPnNwZWVkX2hpLAogCSAgIGNtZC0+ZHVwbGV4LCBjbWQtPnBvcnQsIGNtZC0+cGh5X2FkZHJlc3MsIGNtZC0+dHJhbnNjZWl2ZXIsCiAJICAgY21kLT5hdXRvbmVnLCBjbWQtPm1heHR4cGt0LCBjbWQtPm1heHJ4cGt0KTsKIAorCXNwZWVkID0gY21kLT5zcGVlZDsKKwlzcGVlZCB8PSAoY21kLT5zcGVlZF9oaSA8PCAxNik7CisKKwlpZiAoSVNfTUZfU0koYnApKSB7CisJCXUzMiBwYXJhbSA9IDA7CisJCXUzMiBsaW5lX3NwZWVkID0gYnAtPmxpbmtfdmFycy5saW5lX3NwZWVkOworCisJCS8qIHVzZSAxMEcgaWYgbm8gbGluayBkZXRlY3RlZCAqLworCQlpZiAoIWxpbmVfc3BlZWQpCisJCQlsaW5lX3NwZWVkID0gMTAwMDA7CisKKwkJaWYgKGJwLT5jb21tb24uYmNfdmVyIDwgUkVRX0JDX1ZFUl80X1NFVF9NRl9CVykgeworCQkJQk5YMlhfREVWX0lORk8oIlRvIHNldCBzcGVlZCBCQyAlWCBvciBoaWdoZXIgIgorCQkJCSAgICAgICAiaXMgcmVxdWlyZWQsIHBsZWFzZSB1cGdyYWRlIEJDXG4iLAorCQkJCSAgICAgICBSRVFfQkNfVkVSXzRfU0VUX01GX0JXKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWlmIChsaW5lX3NwZWVkIDwgc3BlZWQpIHsKKwkJCUJOWDJYX0RFVl9JTkZPKCJOZXcgc3BlZWQgc2hvdWxkIGJlIGxlc3Mgb3IgZXF1YWwgIgorCQkJCSAgICAgICAidG8gYWN0dWFsIGxpbmUgc3BlZWRcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJLyogbG9hZCBvbGQgdmFsdWVzICovCisJCXBhcmFtID0gYnAtPm1mX2NvbmZpZ1tCUF9WTihicCldOworCisJCS8qIGxlYXZlIG9ubHkgTUlOIHZhbHVlICovCisJCXBhcmFtICY9IEZVTkNfTUZfQ0ZHX01JTl9CV19NQVNLOworCisJCS8qIHNldCBuZXcgTUFYIHZhbHVlICovCisJCXBhcmFtIHw9ICgoKHNwZWVkICogMTAwKSAvIGxpbmVfc3BlZWQpCisJCQkJIDw8IEZVTkNfTUZfQ0ZHX01BWF9CV19TSElGVCkKKwkJCQkgICYgRlVOQ19NRl9DRkdfTUFYX0JXX01BU0s7CisKKwkJYm54MnhfZndfY29tbWFuZChicCwgRFJWX01TR19DT0RFX1NFVF9NRl9CVywgcGFyYW0pOworCQlyZXR1cm4gMDsKKwl9CisKIAljZmdfaWR4ID0gYm54MnhfZ2V0X2xpbmtfY2ZnX2lkeChicCk7CiAJb2xkX211bHRpX3BoeV9jb25maWcgPSBicC0+bGlua19wYXJhbXMubXVsdGlfcGh5X2NvbmZpZzsKIAlzd2l0Y2ggKGNtZC0+cG9ydCkgewpAQCAtMTY4LDggKzMzOSw2IEBACiAKIAl9IGVsc2UgeyAvKiBmb3JjZWQgc3BlZWQgKi8KIAkJLyogYWR2ZXJ0aXNlIHRoZSByZXF1ZXN0ZWQgc3BlZWQgYW5kIGR1cGxleCBpZiBzdXBwb3J0ZWQgKi8KLQkJdTMyIHNwZWVkID0gY21kLT5zcGVlZDsKLQkJc3BlZWQgfD0gKGNtZC0+c3BlZWRfaGkgPDwgMTYpOwogCQlzd2l0Y2ggKHNwZWVkKSB7CiAJCWNhc2UgU1BFRURfMTA6CiAJCQlpZiAoY21kLT5kdXBsZXggPT0gRFVQTEVYX0ZVTEwpIHsKQEAgLTEyODYsNyArMTQ1NSw3IEBACiAKIAkJCXNhdmVfdmFsID0gUkVHX1JEKGJwLCBvZmZzZXQpOwogCi0JCQlSRUdfV1IoYnAsIG9mZnNldCwgKHdyX3ZhbCAmIG1hc2spKTsKKwkJCVJFR19XUihicCwgb2Zmc2V0LCB3cl92YWwgJiBtYXNrKTsKIAogCQkJdmFsID0gUkVHX1JEKGJwLCBvZmZzZXQpOwogCkBAIC0xNDk5LDggKzE2NjgsMTUgQEAKIAkgKiB1cGRhdGVzIHRoYXQgaGF2ZSBiZWVuIHBlcmZvcm1lZCB3aGlsZSBpbnRlcnJ1cHRzIHdlcmUKIAkgKiBkaXNhYmxlZC4KIAkgKi8KLQlpZiAoYnAtPmNvbW1vbi5pbnRfYmxvY2sgPT0gSU5UX0JMT0NLX0lHVSkKKwlpZiAoYnAtPmNvbW1vbi5pbnRfYmxvY2sgPT0gSU5UX0JMT0NLX0lHVSkgeworCQkvKiBEaXNhYmxlIGxvY2FsIEJIZXMgdG8gcHJldmVudCBhIGRlYWQtbG9jayBzaXR1YXRpb24gYmV0d2VlbgorCQkgKiBzY2hfZGlyZWN0X3htaXQoKSBhbmQgYm54MnhfcnVuX2xvb3BiYWNrKCkgKGNhbGxpbmcKKwkJICogYm54MnhfdHhfaW50KCkpLCBhcyBib3RoIGFyZSB0YWtpbmcgbmV0aWZfdHhfbG9jaygpLgorCQkgKi8KKwkJbG9jYWxfYmhfZGlzYWJsZSgpOwogCQlibngyeF90eF9pbnQoZnBfdHgpOworCQlsb2NhbF9iaF9lbmFibGUoKTsKKwl9CiAKIAlyeF9pZHggPSBsZTE2X3RvX2NwdSgqZnBfcngtPnJ4X2NvbnNfc2IpOwogCWlmIChyeF9pZHggIT0gcnhfc3RhcnRfaWR4ICsgbnVtX3BrdHMpCkBAIC0xNjUwLDcgKzE4MjYsNyBAQAogCWNvbmZpZy0+aGRyLmNsaWVudF9pZCA9IGJwLT5mcC0+Y2xfaWQ7CiAJY29uZmlnLT5oZHIucmVzZXJ2ZWQxID0gMDsKIAotCWJwLT5zZXRfbWFjX3BlbmRpbmcrKzsKKwlicC0+c2V0X21hY19wZW5kaW5nID0gMTsKIAlzbXBfd21iKCk7CiAJcmMgPSBibngyeF9zcF9wb3N0KGJwLCBSQU1ST0RfQ01EX0lEX0NPTU1PTl9TRVRfTUFDLCAwLAogCQkJICAgVTY0X0hJKGJueDJ4X3NwX21hcHBpbmcoYnAsIG1hY19jb25maWcpKSwKQEAgLTE3NDgsMTM0ICsxOTI0LDYgQEAKICNlbmRpZgogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHsKLQlsb25nIG9mZnNldDsKLQlpbnQgc2l6ZTsKLQl1OCBzdHJpbmdbRVRIX0dTVFJJTkdfTEVOXTsKLX0gYm54MnhfcV9zdGF0c19hcnJbQk5YMlhfTlVNX1FfU1RBVFNdID0gewotLyogMSAqLwl7IFFfU1RBVFNfT0ZGU0VUMzIodG90YWxfYnl0ZXNfcmVjZWl2ZWRfaGkpLCA4LCAiWyVkXTogcnhfYnl0ZXMiIH0sCi0JeyBRX1NUQVRTX09GRlNFVDMyKGVycm9yX2J5dGVzX3JlY2VpdmVkX2hpKSwKLQkJCQkJCTgsICJbJWRdOiByeF9lcnJvcl9ieXRlcyIgfSwKLQl7IFFfU1RBVFNfT0ZGU0VUMzIodG90YWxfdW5pY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2hpKSwKLQkJCQkJCTgsICJbJWRdOiByeF91Y2FzdF9wYWNrZXRzIiB9LAotCXsgUV9TVEFUU19PRkZTRVQzMih0b3RhbF9tdWx0aWNhc3RfcGFja2V0c19yZWNlaXZlZF9oaSksCi0JCQkJCQk4LCAiWyVkXTogcnhfbWNhc3RfcGFja2V0cyIgfSwKLQl7IFFfU1RBVFNfT0ZGU0VUMzIodG90YWxfYnJvYWRjYXN0X3BhY2tldHNfcmVjZWl2ZWRfaGkpLAotCQkJCQkJOCwgIlslZF06IHJ4X2JjYXN0X3BhY2tldHMiIH0sCi0JeyBRX1NUQVRTX09GRlNFVDMyKG5vX2J1ZmZfZGlzY2FyZF9oaSksCTgsICJbJWRdOiByeF9kaXNjYXJkcyIgfSwKLQl7IFFfU1RBVFNfT0ZGU0VUMzIocnhfZXJyX2Rpc2NhcmRfcGt0KSwKLQkJCQkJIDQsICJbJWRdOiByeF9waHlfaXBfZXJyX2Rpc2NhcmRzIn0sCi0JeyBRX1NUQVRTX09GRlNFVDMyKHJ4X3NrYl9hbGxvY19mYWlsZWQpLAotCQkJCQkgNCwgIlslZF06IHJ4X3NrYl9hbGxvY19kaXNjYXJkIiB9LAotCXsgUV9TVEFUU19PRkZTRVQzMihod19jc3VtX2VyciksIDQsICJbJWRdOiByeF9jc3VtX29mZmxvYWRfZXJyb3JzIiB9LAotCi0vKiAxMCAqL3sgUV9TVEFUU19PRkZTRVQzMih0b3RhbF9ieXRlc190cmFuc21pdHRlZF9oaSksCTgsICJbJWRdOiB0eF9ieXRlcyIgfSwKLQl7IFFfU1RBVFNfT0ZGU0VUMzIodG90YWxfdW5pY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2hpKSwKLQkJCQkJCTgsICJbJWRdOiB0eF91Y2FzdF9wYWNrZXRzIiB9LAotCXsgUV9TVEFUU19PRkZTRVQzMih0b3RhbF9tdWx0aWNhc3RfcGFja2V0c190cmFuc21pdHRlZF9oaSksCi0JCQkJCQk4LCAiWyVkXTogdHhfbWNhc3RfcGFja2V0cyIgfSwKLQl7IFFfU1RBVFNfT0ZGU0VUMzIodG90YWxfYnJvYWRjYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfaGkpLAotCQkJCQkJOCwgIlslZF06IHR4X2JjYXN0X3BhY2tldHMiIH0KLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgewotCWxvbmcgb2Zmc2V0OwotCWludCBzaXplOwotCXUzMiBmbGFnczsKLSNkZWZpbmUgU1RBVFNfRkxBR1NfUE9SVAkJMQotI2RlZmluZSBTVEFUU19GTEFHU19GVU5DCQkyCi0jZGVmaW5lIFNUQVRTX0ZMQUdTX0JPVEgJCShTVEFUU19GTEFHU19GVU5DIHwgU1RBVFNfRkxBR1NfUE9SVCkKLQl1OCBzdHJpbmdbRVRIX0dTVFJJTkdfTEVOXTsKLX0gYm54Mnhfc3RhdHNfYXJyW0JOWDJYX05VTV9TVEFUU10gPSB7Ci0vKiAxICovCXsgU1RBVFNfT0ZGU0VUMzIodG90YWxfYnl0ZXNfcmVjZWl2ZWRfaGkpLAotCQkJCTgsIFNUQVRTX0ZMQUdTX0JPVEgsICJyeF9ieXRlcyIgfSwKLQl7IFNUQVRTX09GRlNFVDMyKGVycm9yX2J5dGVzX3JlY2VpdmVkX2hpKSwKLQkJCQk4LCBTVEFUU19GTEFHU19CT1RILCAicnhfZXJyb3JfYnl0ZXMiIH0sCi0JeyBTVEFUU19PRkZTRVQzMih0b3RhbF91bmljYXN0X3BhY2tldHNfcmVjZWl2ZWRfaGkpLAotCQkJCTgsIFNUQVRTX0ZMQUdTX0JPVEgsICJyeF91Y2FzdF9wYWNrZXRzIiB9LAotCXsgU1RBVFNfT0ZGU0VUMzIodG90YWxfbXVsdGljYXN0X3BhY2tldHNfcmVjZWl2ZWRfaGkpLAotCQkJCTgsIFNUQVRTX0ZMQUdTX0JPVEgsICJyeF9tY2FzdF9wYWNrZXRzIiB9LAotCXsgU1RBVFNfT0ZGU0VUMzIodG90YWxfYnJvYWRjYXN0X3BhY2tldHNfcmVjZWl2ZWRfaGkpLAotCQkJCTgsIFNUQVRTX0ZMQUdTX0JPVEgsICJyeF9iY2FzdF9wYWNrZXRzIiB9LAotCXsgU1RBVFNfT0ZGU0VUMzIocnhfc3RhdF9kb3Qzc3RhdHNmY3NlcnJvcnNfaGkpLAotCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJyeF9jcmNfZXJyb3JzIiB9LAotCXsgU1RBVFNfT0ZGU0VUMzIocnhfc3RhdF9kb3Qzc3RhdHNhbGlnbm1lbnRlcnJvcnNfaGkpLAotCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJyeF9hbGlnbl9lcnJvcnMiIH0sCi0JeyBTVEFUU19PRkZTRVQzMihyeF9zdGF0X2V0aGVyc3RhdHN1bmRlcnNpemVwa3RzX2hpKSwKLQkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAicnhfdW5kZXJzaXplX3BhY2tldHMiIH0sCi0JeyBTVEFUU19PRkZTRVQzMihldGhlcnN0YXRzb3ZlcnJzaXplcGt0c19oaSksCi0JCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInJ4X292ZXJzaXplX3BhY2tldHMiIH0sCi0vKiAxMCAqL3sgU1RBVFNfT0ZGU0VUMzIocnhfc3RhdF9ldGhlcnN0YXRzZnJhZ21lbnRzX2hpKSwKLQkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAicnhfZnJhZ21lbnRzIiB9LAotCXsgU1RBVFNfT0ZGU0VUMzIocnhfc3RhdF9ldGhlcnN0YXRzamFiYmVyc19oaSksCi0JCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInJ4X2phYmJlcnMiIH0sCi0JeyBTVEFUU19PRkZTRVQzMihub19idWZmX2Rpc2NhcmRfaGkpLAotCQkJCTgsIFNUQVRTX0ZMQUdTX0JPVEgsICJyeF9kaXNjYXJkcyIgfSwKLQl7IFNUQVRTX09GRlNFVDMyKG1hY19maWx0ZXJfZGlzY2FyZCksCi0JCQkJNCwgU1RBVFNfRkxBR1NfUE9SVCwgInJ4X2ZpbHRlcmVkX3BhY2tldHMiIH0sCi0JeyBTVEFUU19PRkZTRVQzMih4eG92ZXJmbG93X2Rpc2NhcmQpLAotCQkJCTQsIFNUQVRTX0ZMQUdTX1BPUlQsICJyeF9md19kaXNjYXJkcyIgfSwKLQl7IFNUQVRTX09GRlNFVDMyKGJyYl9kcm9wX2hpKSwKLQkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAicnhfYnJiX2Rpc2NhcmQiIH0sCi0JeyBTVEFUU19PRkZTRVQzMihicmJfdHJ1bmNhdGVfaGkpLAotCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJyeF9icmJfdHJ1bmNhdGUiIH0sCi0JeyBTVEFUU19PRkZTRVQzMihwYXVzZV9mcmFtZXNfcmVjZWl2ZWRfaGkpLAotCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJyeF9wYXVzZV9mcmFtZXMiIH0sCi0JeyBTVEFUU19PRkZTRVQzMihyeF9zdGF0X21hY2NvbnRyb2xmcmFtZXNyZWNlaXZlZF9oaSksCi0JCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInJ4X21hY19jdHJsX2ZyYW1lcyIgfSwKLQl7IFNUQVRTX09GRlNFVDMyKG5pZ190aW1lcl9tYXgpLAotCQkJNCwgU1RBVFNfRkxBR1NfUE9SVCwgInJ4X2NvbnN0YW50X3BhdXNlX2V2ZW50cyIgfSwKLS8qIDIwICoveyBTVEFUU19PRkZTRVQzMihyeF9lcnJfZGlzY2FyZF9wa3QpLAotCQkJCTQsIFNUQVRTX0ZMQUdTX0JPVEgsICJyeF9waHlfaXBfZXJyX2Rpc2NhcmRzIn0sCi0JeyBTVEFUU19PRkZTRVQzMihyeF9za2JfYWxsb2NfZmFpbGVkKSwKLQkJCQk0LCBTVEFUU19GTEFHU19CT1RILCAicnhfc2tiX2FsbG9jX2Rpc2NhcmQiIH0sCi0JeyBTVEFUU19PRkZTRVQzMihod19jc3VtX2VyciksCi0JCQkJNCwgU1RBVFNfRkxBR1NfQk9USCwgInJ4X2NzdW1fb2ZmbG9hZF9lcnJvcnMiIH0sCi0KLQl7IFNUQVRTX09GRlNFVDMyKHRvdGFsX2J5dGVzX3RyYW5zbWl0dGVkX2hpKSwKLQkJCQk4LCBTVEFUU19GTEFHU19CT1RILCAidHhfYnl0ZXMiIH0sCi0JeyBTVEFUU19PRkZTRVQzMih0eF9zdGF0X2lmaGNvdXRiYWRvY3RldHNfaGkpLAotCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJ0eF9lcnJvcl9ieXRlcyIgfSwKLQl7IFNUQVRTX09GRlNFVDMyKHRvdGFsX3VuaWNhc3RfcGFja2V0c190cmFuc21pdHRlZF9oaSksCi0JCQkJOCwgU1RBVFNfRkxBR1NfQk9USCwgInR4X3VjYXN0X3BhY2tldHMiIH0sCi0JeyBTVEFUU19PRkZTRVQzMih0b3RhbF9tdWx0aWNhc3RfcGFja2V0c190cmFuc21pdHRlZF9oaSksCi0JCQkJOCwgU1RBVFNfRkxBR1NfQk9USCwgInR4X21jYXN0X3BhY2tldHMiIH0sCi0JeyBTVEFUU19PRkZTRVQzMih0b3RhbF9icm9hZGNhc3RfcGFja2V0c190cmFuc21pdHRlZF9oaSksCi0JCQkJOCwgU1RBVFNfRkxBR1NfQk9USCwgInR4X2JjYXN0X3BhY2tldHMiIH0sCi0JeyBTVEFUU19PRkZTRVQzMih0eF9zdGF0X2RvdDNzdGF0c2ludGVybmFsbWFjdHJhbnNtaXRlcnJvcnNfaGkpLAotCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJ0eF9tYWNfZXJyb3JzIiB9LAotCXsgU1RBVFNfT0ZGU0VUMzIocnhfc3RhdF9kb3Qzc3RhdHNjYXJyaWVyc2Vuc2VlcnJvcnNfaGkpLAotCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJ0eF9jYXJyaWVyX2Vycm9ycyIgfSwKLS8qIDMwICoveyBTVEFUU19PRkZTRVQzMih0eF9zdGF0X2RvdDNzdGF0c3NpbmdsZWNvbGxpc2lvbmZyYW1lc19oaSksCi0JCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInR4X3NpbmdsZV9jb2xsaXNpb25zIiB9LAotCXsgU1RBVFNfT0ZGU0VUMzIodHhfc3RhdF9kb3Qzc3RhdHNtdWx0aXBsZWNvbGxpc2lvbmZyYW1lc19oaSksCi0JCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInR4X211bHRpX2NvbGxpc2lvbnMiIH0sCi0JeyBTVEFUU19PRkZTRVQzMih0eF9zdGF0X2RvdDNzdGF0c2RlZmVycmVkdHJhbnNtaXNzaW9uc19oaSksCi0JCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInR4X2RlZmVycmVkIiB9LAotCXsgU1RBVFNfT0ZGU0VUMzIodHhfc3RhdF9kb3Qzc3RhdHNleGNlc3NpdmVjb2xsaXNpb25zX2hpKSwKLQkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAidHhfZXhjZXNzX2NvbGxpc2lvbnMiIH0sCi0JeyBTVEFUU19PRkZTRVQzMih0eF9zdGF0X2RvdDNzdGF0c2xhdGVjb2xsaXNpb25zX2hpKSwKLQkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAidHhfbGF0ZV9jb2xsaXNpb25zIiB9LAotCXsgU1RBVFNfT0ZGU0VUMzIodHhfc3RhdF9ldGhlcnN0YXRzY29sbGlzaW9uc19oaSksCi0JCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInR4X3RvdGFsX2NvbGxpc2lvbnMiIH0sCi0JeyBTVEFUU19PRkZTRVQzMih0eF9zdGF0X2V0aGVyc3RhdHNwa3RzNjRvY3RldHNfaGkpLAotCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJ0eF82NF9ieXRlX3BhY2tldHMiIH0sCi0JeyBTVEFUU19PRkZTRVQzMih0eF9zdGF0X2V0aGVyc3RhdHNwa3RzNjVvY3RldHN0bzEyN29jdGV0c19oaSksCi0JCQk4LCBTVEFUU19GTEFHU19QT1JULCAidHhfNjVfdG9fMTI3X2J5dGVfcGFja2V0cyIgfSwKLQl7IFNUQVRTX09GRlNFVDMyKHR4X3N0YXRfZXRoZXJzdGF0c3BrdHMxMjhvY3RldHN0bzI1NW9jdGV0c19oaSksCi0JCQk4LCBTVEFUU19GTEFHU19QT1JULCAidHhfMTI4X3RvXzI1NV9ieXRlX3BhY2tldHMiIH0sCi0JeyBTVEFUU19PRkZTRVQzMih0eF9zdGF0X2V0aGVyc3RhdHNwa3RzMjU2b2N0ZXRzdG81MTFvY3RldHNfaGkpLAotCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInR4XzI1Nl90b181MTFfYnl0ZV9wYWNrZXRzIiB9LAotLyogNDAgKi97IFNUQVRTX09GRlNFVDMyKHR4X3N0YXRfZXRoZXJzdGF0c3BrdHM1MTJvY3RldHN0bzEwMjNvY3RldHNfaGkpLAotCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInR4XzUxMl90b18xMDIzX2J5dGVfcGFja2V0cyIgfSwKLQl7IFNUQVRTX09GRlNFVDMyKGV0aGVyc3RhdHNwa3RzMTAyNG9jdGV0c3RvMTUyMm9jdGV0c19oaSksCi0JCQk4LCBTVEFUU19GTEFHU19QT1JULCAidHhfMTAyNF90b18xNTIyX2J5dGVfcGFja2V0cyIgfSwKLQl7IFNUQVRTX09GRlNFVDMyKGV0aGVyc3RhdHNwa3Rzb3ZlcjE1MjJvY3RldHNfaGkpLAotCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInR4XzE1MjNfdG9fOTAyMl9ieXRlX3BhY2tldHMiIH0sCi0JeyBTVEFUU19PRkZTRVQzMihwYXVzZV9mcmFtZXNfc2VudF9oaSksCi0JCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInR4X3BhdXNlX2ZyYW1lcyIgfQotfTsKLQogI2RlZmluZSBJU19QT1JUX1NUQVQoaSkgXAogCSgoYm54Mnhfc3RhdHNfYXJyW2ldLmZsYWdzICYgU1RBVFNfRkxBR1NfQk9USCkgPT0gU1RBVFNfRkxBR1NfUE9SVCkKICNkZWZpbmUgSVNfRlVOQ19TVEFUKGkpCQkoYm54Mnhfc3RhdHNfYXJyW2ldLmZsYWdzICYgU1RBVFNfRkxBR1NfRlVOQykKQEAgLTE4OTAsNyArMTkzOCw4IEBACiAJc3dpdGNoIChzdHJpbmdzZXQpIHsKIAljYXNlIEVUSF9TU19TVEFUUzoKIAkJaWYgKGlzX211bHRpKGJwKSkgewotCQkJbnVtX3N0YXRzID0gQk5YMlhfTlVNX1FfU1RBVFMgKiBicC0+bnVtX3F1ZXVlczsKKwkJCW51bV9zdGF0cyA9IEJOWDJYX05VTV9TVEFUX1FVRVVFUyhicCkgKgorCQkJCUJOWDJYX05VTV9RX1NUQVRTOwogCQkJaWYgKCFJU19NRl9NT0RFX1NUQVQoYnApKQogCQkJCW51bV9zdGF0cyArPSBCTlgyWF9OVU1fU1RBVFM7CiAJCX0gZWxzZSB7CkBAIC0xOTE2LDE1ICsxOTY1LDI1IEBACiB7CiAJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7CiAJaW50IGksIGosIGs7CisJY2hhciBxdWV1ZV9uYW1lW01BWF9RVUVVRV9OQU1FX0xFTisxXTsKIAogCXN3aXRjaCAoc3RyaW5nc2V0KSB7CiAJY2FzZSBFVEhfU1NfU1RBVFM6CiAJCWlmIChpc19tdWx0aShicCkpIHsKIAkJCWsgPSAwOwotCQkJZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKKwkJCWZvcl9lYWNoX25hcGlfcXVldWUoYnAsIGkpIHsKKwkJCQltZW1zZXQocXVldWVfbmFtZSwgMCwgc2l6ZW9mKHF1ZXVlX25hbWUpKTsKKworCQkJCWlmIChJU19GQ09FX0lEWChpKSkKKwkJCQkJc3ByaW50ZihxdWV1ZV9uYW1lLCAiZmNvZSIpOworCQkJCWVsc2UKKwkJCQkJc3ByaW50ZihxdWV1ZV9uYW1lLCAiJWQiLCBpKTsKKwogCQkJCWZvciAoaiA9IDA7IGogPCBCTlgyWF9OVU1fUV9TVEFUUzsgaisrKQotCQkJCQlzcHJpbnRmKGJ1ZiArIChrICsgaikqRVRIX0dTVFJJTkdfTEVOLAotCQkJCQkJYm54MnhfcV9zdGF0c19hcnJbal0uc3RyaW5nLCBpKTsKKwkJCQkJc25wcmludGYoYnVmICsgKGsgKyBqKSpFVEhfR1NUUklOR19MRU4sCisJCQkJCQlFVEhfR1NUUklOR19MRU4sCisJCQkJCQlibngyeF9xX3N0YXRzX2FycltqXS5zdHJpbmcsCisJCQkJCQlxdWV1ZV9uYW1lKTsKIAkJCQlrICs9IEJOWDJYX05VTV9RX1NUQVRTOwogCQkJfQogCQkJaWYgKElTX01GX01PREVfU1RBVChicCkpCkBAIC0xOTU4LDcgKzIwMTcsNyBAQAogCiAJaWYgKGlzX211bHRpKGJwKSkgewogCQlrID0gMDsKLQkJZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKKwkJZm9yX2VhY2hfbmFwaV9xdWV1ZShicCwgaSkgewogCQkJaHdfc3RhdHMgPSAodTMyICopJmJwLT5mcFtpXS5ldGhfcV9zdGF0czsKIAkJCWZvciAoaiA9IDA7IGogPCBCTlgyWF9OVU1fUV9TVEFUUzsgaisrKSB7CiAJCQkJaWYgKGJueDJ4X3Ffc3RhdHNfYXJyW2pdLnNpemUgPT0gMCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54MngvYm54MnhfaHNpLmggYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9oc2kuaAppbmRleCA0Y2ZkNGU5Li42MjM4ZDRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9oc2kuaAorKysgYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9oc2kuaApAQCAtNDM0LDcgKzQzNCwxMiBAQAogI2RlZmluZSBTSEFSRURfRkVBVF9DRkdfT1ZFUlJJREVfUFJFRU1QSEFTSVNfQ0ZHX0RJU0FCTEVEICAgICAweDAwMDAwMDAwCiAjZGVmaW5lIFNIQVJFRF9GRUFUX0NGR19PVkVSUklERV9QUkVFTVBIQVNJU19DRkdfRU5BQkxFRCAgICAgIDB4MDAwMDAwMDIKIAotI2RlZmluZSBTSEFSRURfRkVBVFVSRV9NRl9NT0RFX0RJU0FCTEVEIAkgICAgMHgwMDAwMDEwMAorI2RlZmluZSBTSEFSRURfRkVBVF9DRkdfRk9SQ0VfU0ZfTU9ERV9NQVNLCQkgICAgICAweDAwMDAwNzAwCisjZGVmaW5lIFNIQVJFRF9GRUFUX0NGR19GT1JDRV9TRl9NT0RFX1NISUZUCQkgICAgICA4CisjZGVmaW5lIFNIQVJFRF9GRUFUX0NGR19GT1JDRV9TRl9NT0RFX01GX0FMTE9XRUQJICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBTSEFSRURfRkVBVF9DRkdfRk9SQ0VfU0ZfTU9ERV9GT1JDRURfU0YJCSAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgU0hBUkVEX0ZFQVRfQ0ZHX0ZPUkNFX1NGX01PREVfU1BJTzQJCSAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgU0hBUkVEX0ZFQVRfQ0ZHX0ZPUkNFX1NGX01PREVfU1dJVENIX0lOREVQVAkgICAgICAweDAwMDAwMzAwCiAKIH07CiAKQEAgLTY3OSw3ICs2ODQsNyBAQAogI2RlZmluZSBFMVZOX01BWAkJCTEKICNkZWZpbmUgRTFIVk5fTUFYCQkJNAogCi0KKyNkZWZpbmUgRTJfVkZfTUFYCQkJNjQKIC8qIFRoaXMgdmFsdWUgKGluIG1pbGxpc2Vjb25kcykgZGV0ZXJtaW5lcyB0aGUgZnJlcXVlbmN5IG9mIHRoZSBkcml2ZXIKICAqIGlzc3VpbmcgdGhlIFBVTFNFIG1lc3NhZ2UgY29kZS4gIFRoZSBmaXJtd2FyZSBtb25pdG9ycyB0aGlzIHBlcmlvZGljCiAgKiBwdWxzZSB0byBkZXRlcm1pbmUgd2hlbiB0byBzd2l0Y2ggdG8gYW4gT1MtYWJzZW50IG1vZGUuICovCkBAIC04MTUsNiArODIwLDExIEBACiAjZGVmaW5lIERSVl9NU0dfQ09ERV9WUkZZX1NQRUNJRklDX1BIWV9PUFRfTURMCSAgICAweGExMDAwMDAwCiAjZGVmaW5lIFJFUV9CQ19WRVJfNF9WUkZZX1NQRUNJRklDX1BIWV9PUFRfTURMCSAgICAweDAwMDUwMjM0CiAKKyNkZWZpbmUgRFJWX01TR19DT0RFX0RDQlhfQURNSU5fUE1GX01TRwkJCTB4YjAwMDAwMDAKKyNkZWZpbmUgRFJWX01TR19DT0RFX0RDQlhfUE1GX0RSVl9PSwkJCTB4YjIwMDAwMDAKKyNkZWZpbmUgRFJWX01TR19DT0RFX1NFVF9NRl9CVwkJCQkweGUwMDAwMDAwCisjZGVmaW5lIFJFUV9CQ19WRVJfNF9TRVRfTUZfQlcJCQkJMHgwMDA2MDIwMgorI2RlZmluZSBEUlZfTVNHX0NPREVfU0VUX01GX0JXX0FDSwkJCTB4ZTEwMDAwMDAKICNkZWZpbmUgQklPU19NU0dfQ09ERV9MSUNfQ0hBTExFTkdFCQkJMHhmZjAxMDAwMAogI2RlZmluZSBCSU9TX01TR19DT0RFX0xJQ19SRVNQT05TRQkJCTB4ZmYwMjAwMDAKICNkZWZpbmUgQklPU19NU0dfQ09ERV9WSVJUX01BQ19QUklNCQkJMHhmZjAzMDAwMApAQCAtODg4LDYgKzg5OCw3IEBACiAKIAl1MzIgZHJ2X3N0YXR1czsKICNkZWZpbmUgRFJWX1NUQVRVU19QTUYJCQkJCTB4MDAwMDAwMDEKKyNkZWZpbmUgRFJWX1NUQVRVU19TRVRfTUZfQlcJCQkJMHgwMDAwMDAwNAogCiAjZGVmaW5lIERSVl9TVEFUVVNfRENDX0VWRU5UX01BU0sJCQkweDAwMDBmZjAwCiAjZGVmaW5lIERSVl9TVEFUVVNfRENDX0RJU0FCTEVfRU5BQkxFX1BGCQkweDAwMDAwMTAwCkBAIC04OTYsNiArOTA3LDggQEAKICNkZWZpbmUgRFJWX1NUQVRVU19EQ0NfUkVTRVJWRUQxCQkJMHgwMDAwMDgwMAogI2RlZmluZSBEUlZfU1RBVFVTX0RDQ19TRVRfUFJPVE9DT0wJCQkweDAwMDAxMDAwCiAjZGVmaW5lIERSVl9TVEFUVVNfRENDX1NFVF9QUklPUklUWQkJCTB4MDAwMDIwMDAKKyNkZWZpbmUgRFJWX1NUQVRVU19EQ0JYX0VWRU5UX01BU0sJCQkweDAwMGYwMDAwCisjZGVmaW5lIERSVl9TVEFUVVNfRENCWF9ORUdPVElBVElPTl9SRVNVTFRTCQkweDAwMDEwMDAwCiAKIAl1MzIgdmlydF9tYWNfdXBwZXI7CiAjZGVmaW5lIFZJUlRfTUFDX1NJR05fTUFTSwkJCQkweGZmZmYwMDAwCkBAIC05ODgsMTIgKzEwMDEsNDMgQEAKIAogfTsKIAorLyogVGhpcyBzdHJ1Y3R1cmUgaXMgbm90IGFwcGxpY2FibGUgYW5kIHNob3VsZCBub3QgYmUgYWNjZXNzZWQgb24gNTc3MTEgKi8KK3N0cnVjdCBmdW5jX2V4dF9jZmcgeworCXUzMiBmdW5jX2NmZzsKKyNkZWZpbmUgTUFDUF9GVU5DX0NGR19GTEFHU19NQVNLCQkJICAgICAgMHgwMDAwMDBGRgorI2RlZmluZSBNQUNQX0ZVTkNfQ0ZHX0ZMQUdTX1NISUZUCQkJICAgICAgMAorI2RlZmluZSBNQUNQX0ZVTkNfQ0ZHX0ZMQUdTX0VOQUJMRUQJCQkgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIE1BQ1BfRlVOQ19DRkdfRkxBR1NfRVRIRVJORVQJCQkgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIE1BQ1BfRlVOQ19DRkdfRkxBR1NfSVNDU0lfT0ZGTE9BRAkJICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBNQUNQX0ZVTkNfQ0ZHX0ZMQUdTX0ZDT0VfT0ZGTE9BRAkJICAgICAgMHgwMDAwMDAwOAorCisJdTMyIGlzY3NpX21hY19hZGRyX3VwcGVyOworCXUzMiBpc2NzaV9tYWNfYWRkcl9sb3dlcjsKKworCXUzMiBmY29lX21hY19hZGRyX3VwcGVyOworCXUzMiBmY29lX21hY19hZGRyX2xvd2VyOworCisJdTMyIGZjb2Vfd3duX3BvcnRfbmFtZV91cHBlcjsKKwl1MzIgZmNvZV93d25fcG9ydF9uYW1lX2xvd2VyOworCisJdTMyIGZjb2Vfd3duX25vZGVfbmFtZV91cHBlcjsKKwl1MzIgZmNvZV93d25fbm9kZV9uYW1lX2xvd2VyOworCisJdTMyIHByZXNlcnZlX2RhdGE7CisjZGVmaW5lIE1GX0ZVTkNfQ0ZHX1BSRVNFUlZFX0wyX01BQwkJCSAgICAgKDE8PDApCisjZGVmaW5lIE1GX0ZVTkNfQ0ZHX1BSRVNFUlZFX0lTQ1NJX01BQwkJCSAgICAgKDE8PDEpCisjZGVmaW5lIE1GX0ZVTkNfQ0ZHX1BSRVNFUlZFX0ZDT0VfTUFDCQkJICAgICAoMTw8MikKKyNkZWZpbmUgTUZfRlVOQ19DRkdfUFJFU0VSVkVfRkNPRV9XV05fUAkJCSAgICAgKDE8PDMpCisjZGVmaW5lIE1GX0ZVTkNfQ0ZHX1BSRVNFUlZFX0ZDT0VfV1dOX04JCQkgICAgICgxPDw0KQorfTsKKwogc3RydWN0IG1mX2NmZyB7CiAKIAlzdHJ1Y3Qgc2hhcmVkX21mX2NmZwlzaGFyZWRfbWZfY29uZmlnOwogCXN0cnVjdCBwb3J0X21mX2NmZwlwb3J0X21mX2NvbmZpZ1tQT1JUX01BWF07CiAJc3RydWN0IGZ1bmNfbWZfY2ZnCWZ1bmNfbWZfY29uZmlnW0UxSF9GVU5DX01BWF07CiAKKwlzdHJ1Y3QgZnVuY19leHRfY2ZnIGZ1bmNfZXh0X2NvbmZpZ1tFMUhfRlVOQ19NQVhdOwogfTsKIAogCkBAIC0xMDQ5LDYgKzEwOTMsMjUxIEBACiAJc3RydWN0CWZ3X2Zscl9hY2sgYWNrOwogfTsKIAorLyoqKiogU1VQUE9SVCBGT1IgU0hNRU0gQVJSUkFZUyAqKioKKyAqIFRoZSBTSE1FTSBIU0kgaXMgYWxpZ25lZCBvbiAzMiBiaXQgYm91bmRhcmllcyB3aGljaCBtYWtlcyBpdCBkaWZmaWN1bHQgdG8KKyAqIGRlZmluZSBhcnJheXMgd2l0aCBzdG9yYWdlIHR5cGVzIHNtYWxsZXIgdGhlbiB1bnNpZ25lZCBkd29yZHMuCisgKiBUaGUgbWFjcm9zIGJlbG93IGFkZCBnZW5lcmljIHN1cHBvcnQgZm9yIFNITUVNIGFycmF5cyB3aXRoIG51bWVyaWMgZWxlbWVudHMKKyAqIHRoYXQgY2FuIHNwYW4gMiw0LDggb3IgMTYgYml0cy4gVGhlIGFycmF5IHVuZGVybHlpbmcgdHlwZSBpcyBhIDMyIGJpdCBkd29yZAorICogYXJyYXkgd2l0aCBpbmRpdmlkdWFsIGJpdC1maWxlZCBlbGVtZW50cyBhY2Nlc3NlZCB1c2luZyBzaGlmdHMgYW5kIG1hc2tzLgorICoKKyAqLworCisvKiBlYiBpcyB0aGUgYml0d2lkdGggb2YgYSBzaW5nbGUgZWxlbWVudCAqLworI2RlZmluZSBTSE1FTV9BUlJBWV9NQVNLKGViKQkJKCgxPDwoZWIpKS0xKQorI2RlZmluZSBTSE1FTV9BUlJBWV9FTlRSWShpLCBlYikJKChpKS8oMzIvKGViKSkpCisKKy8qIHRoZSBiaXQtcG9zaXRpb24gbWFjcm8gYWxsb3dzIHRoZSB1c2VkIHRvIGZsaXAgdGhlIG9yZGVyIG9mIHRoZSBhcnJheXMKKyAqIGVsZW1lbnRzIG9uIGEgcGVyIGJ5dGUgb3Igd29yZCBib3VuZGFyeS4KKyAqCisgKiBleGFtcGxlOiBhbiBhcnJheSB3aXRoIDggZW50cmllcyBlYWNoIDQgYml0IHdpZGUuIFRoaXMgYXJyYXkgd2lsbCBmaXQgaW50bworICogYSBzaW5nbGUgZHdvcmQuIFRoZSBkaWFncm1hcyBiZWxvdyBzaG93IHRoZSBhcnJheSBvcmRlciBvZiB0aGUgbmliYmxlcy4KKyAqCisgKiBTSE1FTV9BUlJBWV9CSVRQT1MoaSwgNCwgNCkgZGVmaW5lcyB0aGUgc3RhZGFyZCBvcmRlcmluZzoKKyAqCisgKgkJfAkJfAkJfAkJfAorICogICAwCXwgICAxCXwgICAyCXwgICAzCXwgICA0CXwgICA1CXwgICA2CXwgICA3CXwKKyAqCQl8CQl8CQl8CQl8CisgKgorICogU0hNRU1fQVJSQVlfQklUUE9TKGksIDQsIDgpIGRlZmluZXMgYSBmbGlwIG9yZGVyaW5nIHBlciBieXRlOgorICoKKyAqCQl8CQl8CQl8CQl8CisgKiAgIDEJfCAgIDAJfCAgIDMJfCAgIDIJfCAgIDUJfCAgIDQJfCAgIDcJfCAgIDYJfAorICoJCXwJCXwJCXwJCXwKKyAqCisgKiBTSE1FTV9BUlJBWV9CSVRQT1MoaSwgNCwgMTYpIGRlZmluZXMgYSBmbGlwIG9yZGVyaW5nIHBlciB3b3JkOgorICoKKyAqCQl8CQl8CQl8CQl8CisgKiAgIDMJfCAgIDIJfCAgIDEJfCAgIDAJfCAgIDcJfCAgIDYJfCAgIDUJfCAgIDQJfAorICoJCXwJCXwJCXwJCXwKKyAqLworI2RlZmluZSBTSE1FTV9BUlJBWV9CSVRQT1MoaSwgZWIsIGZiKQlcCisJKCgoKDMyLyhmYikpIC0gMSAtICgoaSkvKChmYikvKGViKSkpICUgKDMyLyhmYikpKSAqIChmYikpICsgXAorCSgoKGkpJSgoZmIpLyhlYikpKSAqIChlYikpKQorCisjZGVmaW5lIFNITUVNX0FSUkFZX0dFVChhLCBpLCBlYiwgZmIpCQkJCQkgICBcCisJKChhW1NITUVNX0FSUkFZX0VOVFJZKGksIGViKV0gPj4gU0hNRU1fQVJSQVlfQklUUE9TKGksIGViLCBmYikpICYgIFwKKwlTSE1FTV9BUlJBWV9NQVNLKGViKSkKKworI2RlZmluZSBTSE1FTV9BUlJBWV9TRVQoYSwgaSwgZWIsIGZiLCB2YWwpCQkJCSAgIFwKK2RvIHsJCQkJCQkJCQkgICBcCisJYVtTSE1FTV9BUlJBWV9FTlRSWShpLCBlYildICY9IH4oU0hNRU1fQVJSQVlfTUFTSyhlYikgPDwJICAgXAorCVNITUVNX0FSUkFZX0JJVFBPUyhpLCBlYiwgZmIpKTsJCQkJICAgXAorCWFbU0hNRU1fQVJSQVlfRU5UUlkoaSwgZWIpXSB8PSAoKCh2YWwpICYgU0hNRU1fQVJSQVlfTUFTSyhlYikpIDw8ICBcCisJU0hNRU1fQVJSQVlfQklUUE9TKGksIGViLCBmYikpOwkJCQkgICBcCit9IHdoaWxlICgwKQorCisKKy8qKioqU1RBUlQgT0YgRENCWCBTVFJVQ1RVUkVTIERFQ0xBUkFUSU9OUyoqKiovCisjZGVmaW5lIERDQlhfTUFYX05VTV9QUklfUEdfRU5UUklFUwk4CisjZGVmaW5lIERDQlhfUFJJX1BHX0JJVFdJRFRICQk0CisjZGVmaW5lIERDQlhfUFJJX1BHX0ZCSVRTCQk4CisjZGVmaW5lIERDQlhfUFJJX1BHX0dFVChhLCBpKQkJXAorCVNITUVNX0FSUkFZX0dFVChhLCBpLCBEQ0JYX1BSSV9QR19CSVRXSURUSCwgRENCWF9QUklfUEdfRkJJVFMpCisjZGVmaW5lIERDQlhfUFJJX1BHX1NFVChhLCBpLCB2YWwpCVwKKwlTSE1FTV9BUlJBWV9TRVQoYSwgaSwgRENCWF9QUklfUEdfQklUV0lEVEgsIERDQlhfUFJJX1BHX0ZCSVRTLCB2YWwpCisjZGVmaW5lIERDQlhfTUFYX05VTV9QR19CV19FTlRSSUVTCTgKKyNkZWZpbmUgRENCWF9CV19QR19CSVRXSURUSAkJOAorI2RlZmluZSBEQ0JYX1BHX0JXX0dFVChhLCBpKQkJXAorCVNITUVNX0FSUkFZX0dFVChhLCBpLCBEQ0JYX0JXX1BHX0JJVFdJRFRILCBEQ0JYX0JXX1BHX0JJVFdJRFRIKQorI2RlZmluZSBEQ0JYX1BHX0JXX1NFVChhLCBpLCB2YWwpCVwKKwlTSE1FTV9BUlJBWV9TRVQoYSwgaSwgRENCWF9CV19QR19CSVRXSURUSCwgRENCWF9CV19QR19CSVRXSURUSCwgdmFsKQorI2RlZmluZSBEQ0JYX1NUUklDVF9QUklfUEcJCTE1CisjZGVmaW5lIERDQlhfTUFYX0FQUF9QUk9UT0NPTAkJMTYKKyNkZWZpbmUgRkNPRV9BUFBfSURYCQkJMAorI2RlZmluZSBJU0NTSV9BUFBfSURYCQkJMQorI2RlZmluZSBQUkVERUZJTkVEX0FQUF9JRFhfTUFYCQkyCisKK3N0cnVjdCBkY2J4X2V0c19mZWF0dXJlIHsKKwl1MzIgZW5hYmxlZDsKKwl1MzIgIHBnX2J3X3RibFsyXTsKKwl1MzIgIHByaV9wZ190YmxbMV07Cit9OworCitzdHJ1Y3QgZGNieF9wZmNfZmVhdHVyZSB7CisjaWZkZWYgX19CSUdfRU5ESUFOCisJdTggcHJpX2VuX2JpdG1hcDsKKyNkZWZpbmUgRENCWF9QRkNfUFJJXzAgMHgwMQorI2RlZmluZSBEQ0JYX1BGQ19QUklfMSAweDAyCisjZGVmaW5lIERDQlhfUEZDX1BSSV8yIDB4MDQKKyNkZWZpbmUgRENCWF9QRkNfUFJJXzMgMHgwOAorI2RlZmluZSBEQ0JYX1BGQ19QUklfNCAweDEwCisjZGVmaW5lIERDQlhfUEZDX1BSSV81IDB4MjAKKyNkZWZpbmUgRENCWF9QRkNfUFJJXzYgMHg0MAorI2RlZmluZSBEQ0JYX1BGQ19QUklfNyAweDgwCisJdTggcGZjX2NhcHM7CisJdTggcmVzZXJ2ZWQ7CisJdTggZW5hYmxlZDsKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorCXU4IGVuYWJsZWQ7CisJdTggcmVzZXJ2ZWQ7CisJdTggcGZjX2NhcHM7CisJdTggcHJpX2VuX2JpdG1hcDsKKyNkZWZpbmUgRENCWF9QRkNfUFJJXzAgMHgwMQorI2RlZmluZSBEQ0JYX1BGQ19QUklfMSAweDAyCisjZGVmaW5lIERDQlhfUEZDX1BSSV8yIDB4MDQKKyNkZWZpbmUgRENCWF9QRkNfUFJJXzMgMHgwOAorI2RlZmluZSBEQ0JYX1BGQ19QUklfNCAweDEwCisjZGVmaW5lIERDQlhfUEZDX1BSSV81IDB4MjAKKyNkZWZpbmUgRENCWF9QRkNfUFJJXzYgMHg0MAorI2RlZmluZSBEQ0JYX1BGQ19QUklfNyAweDgwCisjZW5kaWYKK307CisKK3N0cnVjdCBkY2J4X2FwcF9wcmlvcml0eV9lbnRyeSB7CisjaWZkZWYgX19CSUdfRU5ESUFOCisJdTE2CWFwcF9pZDsKKwl1OAlwcmlfYml0bWFwOworCXU4CWFwcEJpdGZpZWxkOworI2RlZmluZSBEQ0JYX0FQUF9FTlRSWV9WQUxJRAkgICAgIDB4MDEKKyNkZWZpbmUgRENCWF9BUFBfRU5UUllfU0ZfTUFTSwkgICAgIDB4MzAKKyNkZWZpbmUgRENCWF9BUFBfRU5UUllfU0ZfU0hJRlQJICAgICA0CisjZGVmaW5lIERDQlhfQVBQX1NGX0VUSF9UWVBFCSAgICAgMHgxMAorI2RlZmluZSBEQ0JYX0FQUF9TRl9QT1JUCSAgICAgMHgyMAorI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCisJdTggYXBwQml0ZmllbGQ7CisjZGVmaW5lIERDQlhfQVBQX0VOVFJZX1ZBTElECSAgICAgMHgwMQorI2RlZmluZSBEQ0JYX0FQUF9FTlRSWV9TRl9NQVNLCSAgICAgMHgzMAorI2RlZmluZSBEQ0JYX0FQUF9FTlRSWV9TRl9TSElGVAkgICAgIDQKKyNkZWZpbmUgRENCWF9BUFBfU0ZfRVRIX1RZUEUJICAgICAweDEwCisjZGVmaW5lIERDQlhfQVBQX1NGX1BPUlQJICAgICAweDIwCisJdTgJcHJpX2JpdG1hcDsKKwl1MTYJYXBwX2lkOworI2VuZGlmCit9OworCitzdHJ1Y3QgZGNieF9hcHBfcHJpb3JpdHlfZmVhdHVyZSB7CisjaWZkZWYgX19CSUdfRU5ESUFOCisJdTggcmVzZXJ2ZWQ7CisJdTggZGVmYXVsdF9wcmk7CisJdTggdGNfc3VwcG9ydGVkOworCXU4IGVuYWJsZWQ7CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKKwl1OCBlbmFibGVkOworCXU4IHRjX3N1cHBvcnRlZDsKKwl1OCBkZWZhdWx0X3ByaTsKKwl1OCByZXNlcnZlZDsKKyNlbmRpZgorCXN0cnVjdCBkY2J4X2FwcF9wcmlvcml0eV9lbnRyeSAgYXBwX3ByaV90YmxbRENCWF9NQVhfQVBQX1BST1RPQ09MXTsKK307CisKK3N0cnVjdCBkY2J4X2ZlYXR1cmVzIHsKKwlzdHJ1Y3QgZGNieF9ldHNfZmVhdHVyZSBldHM7CisJc3RydWN0IGRjYnhfcGZjX2ZlYXR1cmUgcGZjOworCXN0cnVjdCBkY2J4X2FwcF9wcmlvcml0eV9mZWF0dXJlIGFwcDsKK307CisKK3N0cnVjdCBsbGRwX3BhcmFtcyB7CisjaWZkZWYgX19CSUdfRU5ESUFOCisJdTgJbXNnX2Zhc3RfdHhfaW50ZXJ2YWw7CisJdTgJbXNnX3R4X2hvbGQ7CisJdTgJbXNnX3R4X2ludGVydmFsOworCXU4CWFkbWluX3N0YXR1czsKKyNkZWZpbmUgTExEUF9UWF9PTkxZICAweDAxCisjZGVmaW5lIExMRFBfUlhfT05MWSAgMHgwMgorI2RlZmluZSBMTERQX1RYX1JYICAgIDB4MDMKKyNkZWZpbmUgTExEUF9ESVNBQkxFRCAweDA0CisJdTgJcmVzZXJ2ZWQxOworCXU4CXR4X2Zhc3Q7CisJdTgJdHhfY3JkX21heDsKKwl1OAl0eF9jcmQ7CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKKwl1OAlhZG1pbl9zdGF0dXM7CisjZGVmaW5lIExMRFBfVFhfT05MWSAgMHgwMQorI2RlZmluZSBMTERQX1JYX09OTFkgIDB4MDIKKyNkZWZpbmUgTExEUF9UWF9SWCAgICAweDAzCisjZGVmaW5lIExMRFBfRElTQUJMRUQgMHgwNAorCXU4CW1zZ190eF9pbnRlcnZhbDsKKwl1OAltc2dfdHhfaG9sZDsKKwl1OAltc2dfZmFzdF90eF9pbnRlcnZhbDsKKwl1OAl0eF9jcmQ7CisJdTgJdHhfY3JkX21heDsKKwl1OAl0eF9mYXN0OworCXU4CXJlc2VydmVkMTsKKyNlbmRpZgorI2RlZmluZSBSRU1fQ0hBU1NJU19JRF9TVEFUX0xFTgk0CisjZGVmaW5lIFJFTV9QT1JUX0lEX1NUQVRfTEVOIDQKKwl1MzIgcGVlcl9jaGFzc2lzX2lkW1JFTV9DSEFTU0lTX0lEX1NUQVRfTEVOXTsKKwl1MzIgcGVlcl9wb3J0X2lkW1JFTV9QT1JUX0lEX1NUQVRfTEVOXTsKK307CisKK3N0cnVjdCBsbGRwX2RjYnhfc3RhdCB7CisjZGVmaW5lIExPQ0FMX0NIQVNTSVNfSURfU1RBVF9MRU4gMgorI2RlZmluZSBMT0NBTF9QT1JUX0lEX1NUQVRfTEVOIDIKKwl1MzIgbG9jYWxfY2hhc3Npc19pZFtMT0NBTF9DSEFTU0lTX0lEX1NUQVRfTEVOXTsKKwl1MzIgbG9jYWxfcG9ydF9pZFtMT0NBTF9QT1JUX0lEX1NUQVRfTEVOXTsKKwl1MzIgbnVtX3R4X2RjYnhfcGt0czsKKwl1MzIgbnVtX3J4X2RjYnhfcGt0czsKK307CisKK3N0cnVjdCBsbGRwX2FkbWluX21pYiB7CisJdTMyCXZlcl9jZmdfZmxhZ3M7CisjZGVmaW5lIERDQlhfRVRTX0NPTkZJR19UWF9FTkFCTEVECTB4MDAwMDAwMDEKKyNkZWZpbmUgRENCWF9QRkNfQ09ORklHX1RYX0VOQUJMRUQJMHgwMDAwMDAwMgorI2RlZmluZSBEQ0JYX0FQUF9DT05GSUdfVFhfRU5BQkxFRAkweDAwMDAwMDA0CisjZGVmaW5lIERDQlhfRVRTX1JFQ09fVFhfRU5BQkxFRAkweDAwMDAwMDA4CisjZGVmaW5lIERDQlhfRVRTX1JFQ09fVkFMSUQJCTB4MDAwMDAwMTAKKyNkZWZpbmUgRENCWF9FVFNfV0lMTElORwkJMHgwMDAwMDAyMAorI2RlZmluZSBEQ0JYX1BGQ19XSUxMSU5HCQkweDAwMDAwMDQwCisjZGVmaW5lIERDQlhfQVBQX1dJTExJTkcJCTB4MDAwMDAwODAKKyNkZWZpbmUgRENCWF9WRVJTSU9OX0NFRQkJMHgwMDAwMDEwMAorI2RlZmluZSBEQ0JYX1ZFUlNJT05fSUVFRQkJMHgwMDAwMDIwMAorI2RlZmluZSBEQ0JYX0RDQlhfRU5BQkxFRAkJMHgwMDAwMDQwMAorI2RlZmluZSBEQ0JYX0NFRV9WRVJTSU9OX01BU0sJCTB4MDAwMGYwMDAKKyNkZWZpbmUgRENCWF9DRUVfVkVSU0lPTl9TSElGVAkJMTIKKyNkZWZpbmUgRENCWF9DRUVfTUFYX1ZFUlNJT05fTUFTSwkweDAwMGYwMDAwCisjZGVmaW5lIERDQlhfQ0VFX01BWF9WRVJTSU9OX1NISUZUCTE2CisJc3RydWN0IGRjYnhfZmVhdHVyZXMJZmVhdHVyZXM7Cit9OworCitzdHJ1Y3QgbGxkcF9yZW1vdGVfbWliIHsKKwl1MzIgcHJlZml4X3NlcV9udW07CisJdTMyIGZsYWdzOworI2RlZmluZSBEQ0JYX0VUU19UTFZfUlgJICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgRENCWF9QRkNfVExWX1JYCSAgICAweDAwMDAwMDAyCisjZGVmaW5lIERDQlhfQVBQX1RMVl9SWAkgICAgMHgwMDAwMDAwNAorI2RlZmluZSBEQ0JYX0VUU19SWF9FUlJPUiAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgRENCWF9QRkNfUlhfRVJST1IgICAweDAwMDAwMDIwCisjZGVmaW5lIERDQlhfQVBQX1JYX0VSUk9SICAgMHgwMDAwMDA0MAorI2RlZmluZSBEQ0JYX0VUU19SRU1fV0lMTElORwkweDAwMDAwMTAwCisjZGVmaW5lIERDQlhfUEZDX1JFTV9XSUxMSU5HCTB4MDAwMDAyMDAKKyNkZWZpbmUgRENCWF9BUFBfUkVNX1dJTExJTkcJMHgwMDAwMDQwMAorI2RlZmluZSBEQ0JYX1JFTU9URV9FVFNfUkVDT19WQUxJRCAgMHgwMDAwMTAwMAorCXN0cnVjdCBkY2J4X2ZlYXR1cmVzIGZlYXR1cmVzOworCXUzMiBzdWZmaXhfc2VxX251bTsKK307CisKK3N0cnVjdCBsbGRwX2xvY2FsX21pYiB7CisJdTMyIHByZWZpeF9zZXFfbnVtOworCXUzMiBlcnJvcjsKKyNkZWZpbmUgRENCWF9MT0NBTF9FVFNfRVJST1IJIDB4MDAwMDAwMDEKKyNkZWZpbmUgRENCWF9MT0NBTF9QRkNfRVJST1IJIDB4MDAwMDAwMDIKKyNkZWZpbmUgRENCWF9MT0NBTF9BUFBfRVJST1IJIDB4MDAwMDAwMDQKKyNkZWZpbmUgRENCWF9MT0NBTF9QRkNfTUlTTUFUQ0gJIDB4MDAwMDAwMTAKKyNkZWZpbmUgRENCWF9MT0NBTF9BUFBfTUlTTUFUQ0gJIDB4MDAwMDAwMjAKKwlzdHJ1Y3QgZGNieF9mZWF0dXJlcyAgIGZlYXR1cmVzOworCXUzMiBzdWZmaXhfc2VxX251bTsKK307CisvKioqRU5EIE9GIERDQlggU1RSVUNUVVJFUyBERUNMQVJBVElPTlMqKiovCiAKIHN0cnVjdCBzaG1lbTJfcmVnaW9uIHsKIApAQCAtMTA3Miw3ICsxMzYxLDEyIEBACiAjZGVmaW5lIFNITUVNX01GX0NGR19BRERSX05PTkUJCQkgICAgMHgwMDAwMDAwMAogCiAJc3RydWN0IGZ3X2Zscl9tYiBmbHJfbWI7Ci0JdTMyCXJlc2VydmVkWzNdOworCXUzMglkY2J4X2xsZHBfcGFyYW1zX29mZnNldDsKKyNkZWZpbmUgU0hNRU1fTExEUF9EQ0JYX1BBUkFNU19OT05FCQkgICAgMHgwMDAwMDAwMAorCXUzMglkY2J4X25lZ19yZXNfb2Zmc2V0OworI2RlZmluZSBTSE1FTV9EQ0JYX05FR19SRVNfTk9ORQkJCSAgICAweDAwMDAwMDAwCisJdTMyCWRjYnhfcmVtb3RlX21pYl9vZmZzZXQ7CisjZGVmaW5lIFNITUVNX0RDQlhfUkVNT1RFX01JQl9OT05FCQkgICAgMHgwMDAwMDAwMAogCS8qCiAJICogVGhlIG90aGVyIHNobWVtWF9iYXNlX2FkZHIgaG9sZHMgdGhlIG90aGVyIHBhdGgncyBzaG1lbSBhZGRyZXNzCiAJICogcmVxdWlyZWQgZm9yIGV4YW1wbGUgaW4gY2FzZSBvZiBjb21tb24gcGh5IGluaXQsIG9yIGZvciBwYXRoMSB0byBrbm93CkBAIC0xMDgxLDYgKzEzNzUsMTAgQEAKIAkgKi8KIAl1MzIgb3RoZXJfc2htZW1fYmFzZV9hZGRyOwogCXUzMiBvdGhlcl9zaG1lbTJfYmFzZV9hZGRyOworCXUzMglyZXNlcnZlZDFbRTJfVkZfTUFYIC8gMzJdOworCXUzMglyZXNlcnZlZDJbRTJfRlVOQ19NQVhdW0UyX1ZGX01BWCAvIDMyXTsKKwl1MzIJZGNieF9sbGRwX2RjYnhfc3RhdF9vZmZzZXQ7CisjZGVmaW5lIFNITUVNX0xMRFBfRENCWF9TVEFUX05PTkUJCSAgIDB4MDAwMDAwMDAKIH07CiAKIApAQCAtMTUzNCw4ICsxODMyLDggQEAKIAogCiAjZGVmaW5lIEJDTV81NzEwX0ZXX01BSk9SX1ZFUlNJT04JCQk2Ci0jZGVmaW5lIEJDTV81NzEwX0ZXX01JTk9SX1ZFUlNJT04JCQkwCi0jZGVmaW5lIEJDTV81NzEwX0ZXX1JFVklTSU9OX1ZFUlNJT04JCQkzNAorI2RlZmluZSBCQ01fNTcxMF9GV19NSU5PUl9WRVJTSU9OCQkJMgorI2RlZmluZSBCQ01fNTcxMF9GV19SRVZJU0lPTl9WRVJTSU9OCQkJNQogI2RlZmluZSBCQ01fNTcxMF9GV19FTkdJTkVFUklOR19WRVJTSU9OCQkJMAogI2RlZmluZSBCQ01fNTcxMF9GV19DT01QSUxFX0ZMQUdTCQkJMQogCkBAIC0yOTgzLDYgKzMyODEsMjUgQEAKIAogCiAvKgorICogVGhlIGRhdGEgZm9yIGZsb3cgY29udHJvbCBjb25maWd1cmF0aW9uCisgKi8KK3N0cnVjdCBmbG93X2NvbnRyb2xfY29uZmlndXJhdGlvbiB7CisJc3RydWN0IHByaW9yaXR5X2NvcworCQl0cmFmZmljX3R5cGVfdG9fcHJpb3JpdHlfY29zW01BWF9QRkNfVFJBRkZJQ19UWVBFU107CisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisJdTE2IHJlc2VydmVkMTsKKwl1OCBkY2JfdmVyc2lvbjsKKwl1OCBkY2JfZW5hYmxlZDsKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorCXU4IGRjYl9lbmFibGVkOworCXU4IGRjYl92ZXJzaW9uOworCXUxNiByZXNlcnZlZDE7CisjZW5kaWYKKwl1MzIgcmVzZXJ2ZWQyOworfTsKKworCisvKgogICogRlcgdmVyc2lvbiBzdG9yZWQgaW4gdGhlIFhzdG9ybSBSQU0KICAqLwogc3RydWN0IGZ3X3ZlcnNpb24gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54MngvYm54MnhfbGluay5jIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfbGluay5jCmluZGV4IDU4MDkxOTYuLjQzYjBkZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2xpbmsuYworKysgYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9saW5rLmMKQEAgLTE2NCw3ICsxNjQsOCBAQAogI2RlZmluZSBFRENfTU9ERV9QQVNTSVZFX0RBQyAJCQkweDAwNTUKIAogCi0KKyNkZWZpbmUgRVRTX0JXX0xJTUlUX0NSRURJVF9VUFBFUl9CT1VORAkJKDB4NTAwMCkKKyNkZWZpbmUgRVRTX0JXX0xJTUlUX0NSRURJVF9XRUlHSFQJCSgweDUwMDApCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qICAgICAgICAgICAgICAgICAgICAgSU5URVJGQUNFICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0yMDUsNiArMjA2LDI3MCBAQAogCXJldHVybiB2YWw7CiB9CiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgkJCQlFVFMgc2VjdGlvbgkJCSAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGJueDJ4X2V0c19kaXNhYmxlZChzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcykKK3sKKwkvKiBFVFMgZGlzYWJsZWQgY29uZmlndXJhdGlvbiovCisJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CisKKwlEUChORVRJRl9NU0dfTElOSywgIkVUUyBkaXNhYmxlZCBjb25maWd1cmF0aW9uXG4iKTsKKworCS8qKgorCSAqIG1hcHBpbmcgYmV0d2VlbiBlbnRyeSAgcHJpb3JpdHkgdG8gY2xpZW50IG51bWJlciAoMCwxLDIgLWRlYnVnIGFuZAorCSAqIG1hbmFnZW1lbnQgY2xpZW50cywgMyAtIENPUzAgY2xpZW50LCA0IC0gQ09TIGNsaWVudCkoSElHSEVTVCkKKwkgKiAzYml0cyBjbGllbnQgbnVtLgorCSAqICAgUFJJNCAgICB8ICAgIFBSSTMgICAgfCAgICBQUkkyICAgIHwgICAgUFJJMSAgICB8ICAgIFBSSTAKKwkgKiBjb3MxLTEwMCAgICAgY29zMC0wMTEgICAgIGRiZzEtMDEwICAgICBkYmcwLTAwMSAgICAgTUNQLTAwMAorCSAqLworCisJUkVHX1dSKGJwLCBOSUdfUkVHX1AwX1RYX0FSQl9QUklPUklUWV9DTElFTlQsIDB4NDY4OCk7CisJLyoqCisJICogQml0bWFwIG9mIDViaXRzIGxlbmd0aC4gRWFjaCBiaXQgc3BlY2lmaWVzIHdoZXRoZXIgdGhlIGVudHJ5IGJlaGF2ZXMKKwkgKiBhcyBzdHJpY3QuICBCaXRzIDAsMSwyIC0gZGVidWcgYW5kIG1hbmFnZW1lbnQgZW50cmllcywgMyAtCisJICogQ09TMCBlbnRyeSwgNCAtIENPUzEgZW50cnkuCisJICogQ09TMSB8IENPUzAgfCBERUJVRzEgfCBERUJVRzAgfCBNR01UCisJICogYml0NCAgIGJpdDMJICBiaXQyICAgYml0MQkgIGJpdDAKKwkgKiBNQ1AgYW5kIGRlYnVnIGFyZSBzdHJpY3QKKwkgKi8KKworCVJFR19XUihicCwgTklHX1JFR19QMF9UWF9BUkJfQ0xJRU5UX0lTX1NUUklDVCwgMHg3KTsKKwkvKiBkZWZpbmVzIHdoaWNoIGVudHJpZXMgKGNsaWVudHMpIGFyZSBzdWJqZWN0ZWQgdG8gV0ZRIGFyYml0cmF0aW9uICovCisJUkVHX1dSKGJwLCBOSUdfUkVHX1AwX1RYX0FSQl9DTElFTlRfSVNfU1VCSkVDVDJXRlEsIDApOworCS8qKgorCSogRm9yIHN0cmljdCBwcmlvcml0eSBlbnRyaWVzIGRlZmluZXMgdGhlIG51bWJlciBvZiBjb25zZWN1dGl2ZQorCSogc2xvdHMgZm9yIHRoZSBoaWdoZXN0IHByaW9yaXR5LgorCSovCisJUkVHX1dSKGJwLCBOSUdfUkVHX1AwX1RYX0FSQl9OVU1fU1RSSUNUX0FSQl9TTE9UUywgMHgxMDApOworCS8qKgorCSAqIG1hcHBpbmcgYmV0d2VlbiB0aGUgQ1JFRElUX1dFSUdIVCByZWdpc3RlcnMgYW5kIGFjdHVhbCBjbGllbnQKKwkgKiBudW1iZXJzCisJICovCisJUkVHX1dSKGJwLCBOSUdfUkVHX1AwX1RYX0FSQl9DTElFTlRfQ1JFRElUX01BUCwgMCk7CisJUkVHX1dSKGJwLCBOSUdfUkVHX1AwX1RYX0FSQl9DUkVESVRfV0VJR0hUXzAsIDApOworCVJFR19XUihicCwgTklHX1JFR19QMF9UWF9BUkJfQ1JFRElUX1dFSUdIVF8xLCAwKTsKKworCVJFR19XUihicCwgTklHX1JFR19QMF9UWF9BUkJfQ1JFRElUX1VQUEVSX0JPVU5EXzAsIDApOworCVJFR19XUihicCwgTklHX1JFR19QMF9UWF9BUkJfQ1JFRElUX1VQUEVSX0JPVU5EXzEsIDApOworCVJFR19XUihicCwgUEJGX1JFR19ISUdIX1BSSU9SSVRZX0NPU19OVU0sIDApOworCS8qIEVUUyBtb2RlIGRpc2FibGUgKi8KKwlSRUdfV1IoYnAsIFBCRl9SRUdfRVRTX0VOQUJMRUQsIDApOworCS8qKgorCSAqIElmIEVUUyBtb2RlIGlzIGVuYWJsZWQgKHRoZXJlIGlzIG5vIHN0cmljdCBwcmlvcml0eSkgZGVmaW5lcyBhIFdGUQorCSAqIHdlaWdodCBmb3IgQ09TMC9DT1MxLgorCSAqLworCVJFR19XUihicCwgUEJGX1JFR19DT1MwX1dFSUdIVCwgMHgyNzEwKTsKKwlSRUdfV1IoYnAsIFBCRl9SRUdfQ09TMV9XRUlHSFQsIDB4MjcxMCk7CisJLyogVXBwZXIgYm91bmQgdGhhdCBDT1MwX1dFSUdIVCBjYW4gcmVhY2ggaW4gdGhlIFdGUSBhcmJpdGVyICovCisJUkVHX1dSKGJwLCBQQkZfUkVHX0NPUzBfVVBQRVJfQk9VTkQsIDB4OTg5NjgwKTsKKwlSRUdfV1IoYnAsIFBCRl9SRUdfQ09TMV9VUFBFUl9CT1VORCwgMHg5ODk2ODApOworCS8qIERlZmluZXMgdGhlIG51bWJlciBvZiBjb25zZWN1dGl2ZSBzbG90cyBmb3IgdGhlIHN0cmljdCBwcmlvcml0eSAqLworCVJFR19XUihicCwgUEJGX1JFR19OVU1fU1RSSUNUX0FSQl9TTE9UUywgMCk7Cit9CisKK3ZvaWQgYm54MnhfZXRzX2J3X2xpbWl0X2NvbW1vbihjb25zdCBzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcykKK3sKKwkvKiBFVFMgZGlzYWJsZWQgY29uZmlndXJhdGlvbiAqLworCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOworCURQKE5FVElGX01TR19MSU5LLCAiRVRTIGVuYWJsZWQgQlcgbGltaXQgY29uZmlndXJhdGlvblxuIik7CisJLyoqCisJKiBkZWZpbmVzIHdoaWNoIGVudHJpZXMgKGNsaWVudHMpIGFyZSBzdWJqZWN0ZWQgdG8gV0ZRIGFyYml0cmF0aW9uCisJKiBDT1MwIDB4OAorCSogQ09TMSAweDEwCisJKi8KKwlSRUdfV1IoYnAsIE5JR19SRUdfUDBfVFhfQVJCX0NMSUVOVF9JU19TVUJKRUNUMldGUSwgMHgxOCk7CisJLyoqCisJKiBtYXBwaW5nIGJldHdlZW4gdGhlIEFSQl9DUkVESVRfV0VJR0hUIHJlZ2lzdGVycyBhbmQgYWN0dWFsCisJKiBjbGllbnQgbnVtYmVycyAoV0VJR0hUXzAgZG9lcyBub3QgYWN0dWFsbHkgaGF2ZSB0byByZXByZXNlbnQKKwkqIGNsaWVudCAwKQorCSogICAgUFJJNCAgICB8ICAgIFBSSTMgICAgfCAgICBQUkkyICAgIHwgICAgUFJJMSAgICB8ICAgIFBSSTAKKwkqICBjb3MxLTAwMSAgICAgY29zMC0wMDAgICAgIGRiZzEtMTAwICAgICBkYmcwLTAxMSAgICAgTUNQLTAxMAorCSovCisJUkVHX1dSKGJwLCBOSUdfUkVHX1AwX1RYX0FSQl9DTElFTlRfQ1JFRElUX01BUCwgMHgxMTFBKTsKKworCVJFR19XUihicCwgTklHX1JFR19QMF9UWF9BUkJfQ1JFRElUX1VQUEVSX0JPVU5EXzAsCisJICAgICAgIEVUU19CV19MSU1JVF9DUkVESVRfVVBQRVJfQk9VTkQpOworCVJFR19XUihicCwgTklHX1JFR19QMF9UWF9BUkJfQ1JFRElUX1VQUEVSX0JPVU5EXzEsCisJICAgICAgIEVUU19CV19MSU1JVF9DUkVESVRfVVBQRVJfQk9VTkQpOworCisJLyogRVRTIG1vZGUgZW5hYmxlZCovCisJUkVHX1dSKGJwLCBQQkZfUkVHX0VUU19FTkFCTEVELCAxKTsKKworCS8qIERlZmluZXMgdGhlIG51bWJlciBvZiBjb25zZWN1dGl2ZSBzbG90cyBmb3IgdGhlIHN0cmljdCBwcmlvcml0eSAqLworCVJFR19XUihicCwgUEJGX1JFR19OVU1fU1RSSUNUX0FSQl9TTE9UUywgMCk7CisJLyoqCisJKiBCaXRtYXAgb2YgNWJpdHMgbGVuZ3RoLiBFYWNoIGJpdCBzcGVjaWZpZXMgd2hldGhlciB0aGUgZW50cnkgYmVoYXZlcworCSogYXMgc3RyaWN0LiAgQml0cyAwLDEsMiAtIGRlYnVnIGFuZCBtYW5hZ2VtZW50IGVudHJpZXMsIDMgLSBDT1MwCisJKiBlbnRyeSwgNCAtIENPUzEgZW50cnkuCisJKiBDT1MxIHwgQ09TMCB8IERFQlVHMjEgfCBERUJVRzAgfCBNR01UCisJKiBiaXQ0ICAgYml0MwkgIGJpdDIgICAgIGJpdDEJICAgYml0MAorCSogTUNQIGFuZCBkZWJ1ZyBhcmUgc3RyaWN0CisJKi8KKwlSRUdfV1IoYnAsIE5JR19SRUdfUDBfVFhfQVJCX0NMSUVOVF9JU19TVFJJQ1QsIDB4Nyk7CisKKwkvKiBVcHBlciBib3VuZCB0aGF0IENPUzBfV0VJR0hUIGNhbiByZWFjaCBpbiB0aGUgV0ZRIGFyYml0ZXIuKi8KKwlSRUdfV1IoYnAsIFBCRl9SRUdfQ09TMF9VUFBFUl9CT1VORCwKKwkgICAgICAgRVRTX0JXX0xJTUlUX0NSRURJVF9VUFBFUl9CT1VORCk7CisJUkVHX1dSKGJwLCBQQkZfUkVHX0NPUzFfVVBQRVJfQk9VTkQsCisJICAgICAgIEVUU19CV19MSU1JVF9DUkVESVRfVVBQRVJfQk9VTkQpOworfQorCit2b2lkIGJueDJ4X2V0c19id19saW1pdChjb25zdCBzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywgY29uc3QgdTMyIGNvczBfYncsCisJCQljb25zdCB1MzIgY29zMV9idykKK3sKKwkvKiBFVFMgZGlzYWJsZWQgY29uZmlndXJhdGlvbiovCisJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CisJY29uc3QgdTMyIHRvdGFsX2J3ID0gY29zMF9idyArIGNvczFfYnc7CisJdTMyIGNvczBfY3JlZGl0X3dlaWdodCA9IDA7CisJdTMyIGNvczFfY3JlZGl0X3dlaWdodCA9IDA7CisKKwlEUChORVRJRl9NU0dfTElOSywgIkVUUyBlbmFibGVkIEJXIGxpbWl0IGNvbmZpZ3VyYXRpb25cbiIpOworCisJaWYgKCgwID09IHRvdGFsX2J3KSB8fAorCSAgICAoMCA9PSBjb3MwX2J3KSB8fAorCSAgICAoMCA9PSBjb3MxX2J3KSkgeworCQlEUChORVRJRl9NU0dfTElOSywKKwkJICAgImJueDJ4X2V0c19id19saW1pdDogVG90YWwgQlcgY2FuJ3QgYmUgemVyb1xuIik7CisJCXJldHVybjsKKwl9CisKKwljb3MwX2NyZWRpdF93ZWlnaHQgPSAoY29zMF9idyAqIEVUU19CV19MSU1JVF9DUkVESVRfV0VJR0hUKS8KKwkJdG90YWxfYnc7CisJY29zMV9jcmVkaXRfd2VpZ2h0ID0gKGNvczFfYncgKiBFVFNfQldfTElNSVRfQ1JFRElUX1dFSUdIVCkvCisJCXRvdGFsX2J3OworCisJYm54MnhfZXRzX2J3X2xpbWl0X2NvbW1vbihwYXJhbXMpOworCisJUkVHX1dSKGJwLCBOSUdfUkVHX1AwX1RYX0FSQl9DUkVESVRfV0VJR0hUXzAsIGNvczBfY3JlZGl0X3dlaWdodCk7CisJUkVHX1dSKGJwLCBOSUdfUkVHX1AwX1RYX0FSQl9DUkVESVRfV0VJR0hUXzEsIGNvczFfY3JlZGl0X3dlaWdodCk7CisKKwlSRUdfV1IoYnAsIFBCRl9SRUdfQ09TMF9XRUlHSFQsIGNvczBfY3JlZGl0X3dlaWdodCk7CisJUkVHX1dSKGJwLCBQQkZfUkVHX0NPUzFfV0VJR0hULCBjb3MxX2NyZWRpdF93ZWlnaHQpOworfQorCit1OCBibngyeF9ldHNfc3RyaWN0KGNvbnN0IHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLCBjb25zdCB1OCBzdHJpY3RfY29zKQoreworCS8qIEVUUyBkaXNhYmxlZCBjb25maWd1cmF0aW9uKi8KKwlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKKwl1MzIgdmFsCT0gMDsKKworCURQKE5FVElGX01TR19MSU5LLCAiRVRTIGVuYWJsZWQgc3RyaWN0IGNvbmZpZ3VyYXRpb25cbiIpOworCS8qKgorCSAqIEJpdG1hcCBvZiA1Yml0cyBsZW5ndGguIEVhY2ggYml0IHNwZWNpZmllcyB3aGV0aGVyIHRoZSBlbnRyeSBiZWhhdmVzCisJICogYXMgc3RyaWN0LiAgQml0cyAwLDEsMiAtIGRlYnVnIGFuZCBtYW5hZ2VtZW50IGVudHJpZXMsCisJICogMyAtIENPUzAgZW50cnksIDQgLSBDT1MxIGVudHJ5LgorCSAqICBDT1MxIHwgQ09TMCB8IERFQlVHMjEgfCBERUJVRzAgfCBNR01UCisJICogIGJpdDQgICBiaXQzCSAgYml0MiAgICAgIGJpdDEgICAgIGJpdDAKKwkgKiBNQ1AgYW5kIGRlYnVnIGFyZSBzdHJpY3QKKwkgKi8KKwlSRUdfV1IoYnAsIE5JR19SRUdfUDBfVFhfQVJCX0NMSUVOVF9JU19TVFJJQ1QsIDB4MUYpOworCS8qKgorCSAqIEZvciBzdHJpY3QgcHJpb3JpdHkgZW50cmllcyBkZWZpbmVzIHRoZSBudW1iZXIgb2YgY29uc2VjdXRpdmUgc2xvdHMKKwkgKiBmb3IgdGhlIGhpZ2hlc3QgcHJpb3JpdHkuCisJICovCisJUkVHX1dSKGJwLCBOSUdfUkVHX1AwX1RYX0FSQl9OVU1fU1RSSUNUX0FSQl9TTE9UUywgMHgxMDApOworCS8qIEVUUyBtb2RlIGRpc2FibGUgKi8KKwlSRUdfV1IoYnAsIFBCRl9SRUdfRVRTX0VOQUJMRUQsIDApOworCS8qIERlZmluZXMgdGhlIG51bWJlciBvZiBjb25zZWN1dGl2ZSBzbG90cyBmb3IgdGhlIHN0cmljdCBwcmlvcml0eSAqLworCVJFR19XUihicCwgUEJGX1JFR19OVU1fU1RSSUNUX0FSQl9TTE9UUywgMHgxMDApOworCisJLyogRGVmaW5lcyB0aGUgbnVtYmVyIG9mIGNvbnNlY3V0aXZlIHNsb3RzIGZvciB0aGUgc3RyaWN0IHByaW9yaXR5ICovCisJUkVHX1dSKGJwLCBQQkZfUkVHX0hJR0hfUFJJT1JJVFlfQ09TX05VTSwgc3RyaWN0X2Nvcyk7CisKKwkvKioKKwkqIG1hcHBpbmcgYmV0d2VlbiBlbnRyeSAgcHJpb3JpdHkgdG8gY2xpZW50IG51bWJlciAoMCwxLDIgLWRlYnVnIGFuZAorCSogbWFuYWdlbWVudCBjbGllbnRzLCAzIC0gQ09TMCBjbGllbnQsIDQgLSBDT1MgY2xpZW50KShISUdIRVNUKQorCSogM2JpdHMgY2xpZW50IG51bS4KKwkqICAgUFJJNCAgICB8ICAgIFBSSTMgICAgfCAgICBQUkkyICAgIHwgICAgUFJJMSAgICB8ICAgIFBSSTAKKwkqIGRiZzAtMDEwICAgICBkYmcxLTAwMSAgICAgY29zMS0xMDAgICAgIGNvczAtMDExICAgICBNQ1AtMDAwCisJKiBkYmcwLTAxMCAgICAgZGJnMS0wMDEgICAgIGNvczAtMDExICAgICBjb3MxLTEwMCAgICAgTUNQLTAwMAorCSovCisJdmFsID0gKDAgPT0gc3RyaWN0X2NvcykgPyAweDIzMTggOiAweDIyRTA7CisJUkVHX1dSKGJwLCBOSUdfUkVHX1AwX1RYX0FSQl9QUklPUklUWV9DTElFTlQsIHZhbCk7CisKKwlyZXR1cm4gMDsKK30KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgkJCUVUUyBzZWN0aW9uCQkJCSAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkIGJueDJ4X2JtYWMyX2dldF9wZmNfc3RhdChzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywKKwkJCQkgICAgIHUzMiBwZmNfZnJhbWVzX3NlbnRbMl0sCisJCQkJICAgICB1MzIgcGZjX2ZyYW1lc19yZWNlaXZlZFsyXSkKK3sKKwkvKiBSZWFkIHBmYyBzdGF0aXN0aWMgKi8KKwlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKKwl1MzIgYm1hY19hZGRyID0gcGFyYW1zLT5wb3J0ID8gTklHX1JFR19JTkdSRVNTX0JNQUMxX01FTSA6CisJCU5JR19SRUdfSU5HUkVTU19CTUFDMF9NRU07CisKKwlEUChORVRJRl9NU0dfTElOSywgInBmYyBzdGF0aXN0aWMgcmVhZCBmcm9tIEJNQUNcbiIpOworCisJUkVHX1JEX0RNQUUoYnAsIGJtYWNfYWRkciArIEJJR01BQzJfUkVHSVNURVJfVFhfU1RBVF9HVFBQLAorCQkJCQlwZmNfZnJhbWVzX3NlbnQsIDIpOworCisJUkVHX1JEX0RNQUUoYnAsIGJtYWNfYWRkciArIEJJR01BQzJfUkVHSVNURVJfUlhfU1RBVF9HUlBQLAorCQkJCQlwZmNfZnJhbWVzX3JlY2VpdmVkLCAyKTsKKworfQorc3RhdGljIHZvaWQgYm54MnhfZW1hY19nZXRfcGZjX3N0YXQoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsCisJCQkJICAgIHUzMiBwZmNfZnJhbWVzX3NlbnRbMl0sCisJCQkJICAgIHUzMiBwZmNfZnJhbWVzX3JlY2VpdmVkWzJdKQoreworCS8qIFJlYWQgcGZjIHN0YXRpc3RpYyAqLworCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOworCXUzMiBlbWFjX2Jhc2UgPSBwYXJhbXMtPnBvcnQgPyBHUkNCQVNFX0VNQUMxIDogR1JDQkFTRV9FTUFDMDsKKwl1MzIgdmFsX3hvbiA9IDA7CisJdTMyIHZhbF94b2ZmID0gMDsKKworCURQKE5FVElGX01TR19MSU5LLCAicGZjIHN0YXRpc3RpYyByZWFkIGZyb20gRU1BQ1xuIik7CisKKwkvKiBQRkMgcmVjZWl2ZWQgZnJhbWVzICovCisJdmFsX3hvZmYgPSBSRUdfUkQoYnAsIGVtYWNfYmFzZSArCisJCQkJRU1BQ19SRUdfUlhfUEZDX1NUQVRTX1hPRkZfUkNWRCk7CisJdmFsX3hvZmYgJj0gRU1BQ19SRUdfUlhfUEZDX1NUQVRTX1hPRkZfUkNWRF9DT1VOVDsKKwl2YWxfeG9uID0gUkVHX1JEKGJwLCBlbWFjX2Jhc2UgKyBFTUFDX1JFR19SWF9QRkNfU1RBVFNfWE9OX1JDVkQpOworCXZhbF94b24gJj0gRU1BQ19SRUdfUlhfUEZDX1NUQVRTX1hPTl9SQ1ZEX0NPVU5UOworCisJcGZjX2ZyYW1lc19yZWNlaXZlZFswXSA9IHZhbF94b24gKyB2YWxfeG9mZjsKKworCS8qIFBGQyByZWNlaXZlZCBzZW50ICovCisJdmFsX3hvZmYgPSBSRUdfUkQoYnAsIGVtYWNfYmFzZSArCisJCQkJRU1BQ19SRUdfUlhfUEZDX1NUQVRTX1hPRkZfU0VOVCk7CisJdmFsX3hvZmYgJj0gRU1BQ19SRUdfUlhfUEZDX1NUQVRTX1hPRkZfU0VOVF9DT1VOVDsKKwl2YWxfeG9uID0gUkVHX1JEKGJwLCBlbWFjX2Jhc2UgKyBFTUFDX1JFR19SWF9QRkNfU1RBVFNfWE9OX1NFTlQpOworCXZhbF94b24gJj0gRU1BQ19SRUdfUlhfUEZDX1NUQVRTX1hPTl9TRU5UX0NPVU5UOworCisJcGZjX2ZyYW1lc19zZW50WzBdID0gdmFsX3hvbiArIHZhbF94b2ZmOworfQorCit2b2lkIGJueDJ4X3BmY19zdGF0aXN0aWMoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsIHN0cnVjdCBsaW5rX3ZhcnMgKnZhcnMsCisJCQkgdTMyIHBmY19mcmFtZXNfc2VudFsyXSwKKwkJCSB1MzIgcGZjX2ZyYW1lc19yZWNlaXZlZFsyXSkKK3sKKwkvKiBSZWFkIHBmYyBzdGF0aXN0aWMgKi8KKwlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKKwl1MzIgdmFsCT0gMDsKKwlEUChORVRJRl9NU0dfTElOSywgInBmYyBzdGF0aXN0aWNcbiIpOworCisJaWYgKCF2YXJzLT5saW5rX3VwKQorCQlyZXR1cm47CisKKwl2YWwgPSBSRUdfUkQoYnAsIE1JU0NfUkVHX1JFU0VUX1JFR18yKTsKKwlpZiAoKHZhbCAmIChNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfMl9SU1RfQk1BQzAgPDwgcGFyYW1zLT5wb3J0KSkKKwkgICAgPT0gMCkgeworCQlEUChORVRJRl9NU0dfTElOSywgIkFib3V0IHRvIHJlYWQgc3RhdHMgZnJvbSBFTUFDXG4iKTsKKwkJYm54MnhfZW1hY19nZXRfcGZjX3N0YXQocGFyYW1zLCBwZmNfZnJhbWVzX3NlbnQsCisJCQkJCXBmY19mcmFtZXNfcmVjZWl2ZWQpOworCX0gZWxzZSB7CisJCURQKE5FVElGX01TR19MSU5LLCAiQWJvdXQgdG8gcmVhZCBzdGF0cyBmcm9tIEJNQUNcbiIpOworCQlibngyeF9ibWFjMl9nZXRfcGZjX3N0YXQocGFyYW1zLCBwZmNfZnJhbWVzX3NlbnQsCisJCQkJCSBwZmNfZnJhbWVzX3JlY2VpdmVkKTsKKwl9Cit9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoJCQlNQUMvUEJGIHNlY3Rpb24JCQkJICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyB2b2lkIGJueDJ4X2VtYWNfaW5pdChzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywKIAkJCSAgIHN0cnVjdCBsaW5rX3ZhcnMgKnZhcnMpCiB7CkBAIC0zMTUsMjQgKzU4MCw1NSBAQAogCQkvKiBwYXVzZSBlbmFibGUvZGlzYWJsZSAqLwogCQlibngyeF9iaXRzX2RpcyhicCwgZW1hY19iYXNlICsgRU1BQ19SRUdfRU1BQ19SWF9NT0RFLAogCQkJICAgICAgIEVNQUNfUlhfTU9ERV9GTE9XX0VOKTsKLQkJaWYgKHZhcnMtPmZsb3dfY3RybCAmIEJOWDJYX0ZMT1dfQ1RSTF9SWCkKLQkJCWJueDJ4X2JpdHNfZW4oYnAsIGVtYWNfYmFzZSArCi0JCQkJICAgIEVNQUNfUkVHX0VNQUNfUlhfTU9ERSwKLQkJCQkgICAgRU1BQ19SWF9NT0RFX0ZMT1dfRU4pOwogCiAJCWJueDJ4X2JpdHNfZGlzKGJwLCAgZW1hY19iYXNlICsgRU1BQ19SRUdfRU1BQ19UWF9NT0RFLAotCQkJICAgICAoRU1BQ19UWF9NT0RFX0VYVF9QQVVTRV9FTiB8Ci0JCQkgICAgICBFTUFDX1RYX01PREVfRkxPV19FTikpOwotCQlpZiAodmFycy0+Zmxvd19jdHJsICYgQk5YMlhfRkxPV19DVFJMX1RYKQotCQkJYm54MnhfYml0c19lbihicCwgZW1hY19iYXNlICsKLQkJCQkgICAgRU1BQ19SRUdfRU1BQ19UWF9NT0RFLAotCQkJCSAgIChFTUFDX1RYX01PREVfRVhUX1BBVVNFX0VOIHwKLQkJCQkgICAgRU1BQ19UWF9NT0RFX0ZMT1dfRU4pKTsKKwkJCSAgICAgICAoRU1BQ19UWF9NT0RFX0VYVF9QQVVTRV9FTiB8CisJCQkJRU1BQ19UWF9NT0RFX0ZMT1dfRU4pKTsKKwkJaWYgKCEocGFyYW1zLT5mZWF0dXJlX2NvbmZpZ19mbGFncyAmCisJCSAgICAgIEZFQVRVUkVfQ09ORklHX1BGQ19FTkFCTEVEKSkgeworCQkJaWYgKHZhcnMtPmZsb3dfY3RybCAmIEJOWDJYX0ZMT1dfQ1RSTF9SWCkKKwkJCQlibngyeF9iaXRzX2VuKGJwLCBlbWFjX2Jhc2UgKworCQkJCQkgICAgICBFTUFDX1JFR19FTUFDX1JYX01PREUsCisJCQkJCSAgICAgIEVNQUNfUlhfTU9ERV9GTE9XX0VOKTsKKworCQkJaWYgKHZhcnMtPmZsb3dfY3RybCAmIEJOWDJYX0ZMT1dfQ1RSTF9UWCkKKwkJCQlibngyeF9iaXRzX2VuKGJwLCBlbWFjX2Jhc2UgKworCQkJCQkgICAgICBFTUFDX1JFR19FTUFDX1RYX01PREUsCisJCQkJCSAgICAgIChFTUFDX1RYX01PREVfRVhUX1BBVVNFX0VOIHwKKwkJCQkJICAgICAgIEVNQUNfVFhfTU9ERV9GTE9XX0VOKSk7CisJCX0gZWxzZQorCQkJYm54MnhfYml0c19lbihicCwgZW1hY19iYXNlICsgRU1BQ19SRUdfRU1BQ19UWF9NT0RFLAorCQkJCSAgICAgIEVNQUNfVFhfTU9ERV9GTE9XX0VOKTsKIAl9CiAKIAkvKiBLRUVQX1ZMQU5fVEFHLCBwcm9taXNjdW91cyAqLwogCXZhbCA9IFJFR19SRChicCwgZW1hY19iYXNlICsgRU1BQ19SRUdfRU1BQ19SWF9NT0RFKTsKIAl2YWwgfD0gRU1BQ19SWF9NT0RFX0tFRVBfVkxBTl9UQUcgfCBFTUFDX1JYX01PREVfUFJPTUlTQ1VPVVM7CisKKwkvKioKKwkqIFNldHRpbmcgdGhpcyBiaXQgY2F1c2VzIE1BQyBjb250cm9sIGZyYW1lcyAoZXhjZXB0IGZvciBwYXVzZQorCSogZnJhbWVzKSB0byBiZSBwYXNzZWQgb24gZm9yIHByb2Nlc3NpbmcuIFRoaXMgc2V0dGluZyBoYXMgbm8KKwkqIGFmZmVjdCBvbiB0aGUgb3BlcmF0aW9uIG9mIHRoZSBwYXVzZSBmcmFtZXMuIFRoaXMgYml0IGVmZmVjdHMKKwkqIGFsbCBwYWNrZXRzIHJlZ2FyZGxlc3Mgb2YgUlggUGFyc2VyIHBhY2tldCBzb3J0aW5nIGxvZ2ljLgorCSogVHVybiB0aGUgUEZDIG9mZiB0byBtYWtlIHN1cmUgd2UgYXJlIGluIFhvbiBzdGF0ZSBiZWZvcmUKKwkqIGVuYWJsaW5nIGl0LgorCSovCisJRU1BQ19XUihicCwgRU1BQ19SRUdfUlhfUEZDX01PREUsIDApOworCWlmIChwYXJhbXMtPmZlYXR1cmVfY29uZmlnX2ZsYWdzICYgRkVBVFVSRV9DT05GSUdfUEZDX0VOQUJMRUQpIHsKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJQRkMgaXMgZW5hYmxlZFxuIik7CisJCS8qIEVuYWJsZSBQRkMgYWdhaW4gKi8KKwkJRU1BQ19XUihicCwgRU1BQ19SRUdfUlhfUEZDX01PREUsCisJCQlFTUFDX1JFR19SWF9QRkNfTU9ERV9SWF9FTiB8CisJCQlFTUFDX1JFR19SWF9QRkNfTU9ERV9UWF9FTiB8CisJCQlFTUFDX1JFR19SWF9QRkNfTU9ERV9QUklPUklUSUVTKTsKKworCQlFTUFDX1dSKGJwLCBFTUFDX1JFR19SWF9QRkNfUEFSQU0sCisJCQkoKDB4MDEwMSA8PAorCQkJICBFTUFDX1JFR19SWF9QRkNfUEFSQU1fT1BDT0RFX0JJVFNISUZUKSB8CisJCQkgKDB4MDBmZiA8PAorCQkJICBFTUFDX1JFR19SWF9QRkNfUEFSQU1fUFJJT1JJVFlfRU5fQklUU0hJRlQpKSk7CisJCXZhbCB8PSBFTUFDX1JYX01PREVfS0VFUF9NQUNfQ09OVFJPTDsKKwl9CiAJRU1BQ19XUihicCwgRU1BQ19SRUdfRU1BQ19SWF9NT0RFLCB2YWwpOwogCiAJLyogU2V0IExvb3BiYWNrICovCkBAIC0zNjIsNyArNjU4LDkgQEAKIAkvKiBlbmFibGUgdGhlIE5JRyBpbi9vdXQgdG8gdGhlIGVtYWMgKi8KIAlSRUdfV1IoYnAsIE5JR19SRUdfRU1BQzBfSU5fRU4gKyBwb3J0KjQsIDB4MSk7CiAJdmFsID0gMDsKLQlpZiAodmFycy0+Zmxvd19jdHJsICYgQk5YMlhfRkxPV19DVFJMX1RYKQorCWlmICgocGFyYW1zLT5mZWF0dXJlX2NvbmZpZ19mbGFncyAmCisJICAgICAgRkVBVFVSRV9DT05GSUdfUEZDX0VOQUJMRUQpIHx8CisJICAgICh2YXJzLT5mbG93X2N0cmwgJiBCTlgyWF9GTE9XX0NUUkxfVFgpKQogCQl2YWwgPSAxOwogCiAJUkVHX1dSKGJwLCBOSUdfUkVHX0VNQUMwX1BBVVNFX09VVF9FTiArIHBvcnQqNCwgdmFsKTsKQEAgLTM4Myw5ICs2ODEsMzggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgYm54MnhfdXBkYXRlX2JtYWMyKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLAotCQkJICAgICAgIHN0cnVjdCBsaW5rX3ZhcnMgKnZhcnMsCi0JCQkgICAgICAgdTggaXNfbGIpCitzdGF0aWMgdm9pZCBibngyeF91cGRhdGVfcGZjX2JtYWMxKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLAorCQkJCSAgIHN0cnVjdCBsaW5rX3ZhcnMgKnZhcnMpCit7CisJdTMyIHdiX2RhdGFbMl07CisJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CisJdTMyIGJtYWNfYWRkciA9ICBwYXJhbXMtPnBvcnQgPyBOSUdfUkVHX0lOR1JFU1NfQk1BQzFfTUVNIDoKKwkJTklHX1JFR19JTkdSRVNTX0JNQUMwX01FTTsKKworCXUzMiB2YWwgPSAweDE0OworCWlmICgoIShwYXJhbXMtPmZlYXR1cmVfY29uZmlnX2ZsYWdzICYKKwkgICAgICBGRUFUVVJFX0NPTkZJR19QRkNfRU5BQkxFRCkpICYmCisJCSh2YXJzLT5mbG93X2N0cmwgJiBCTlgyWF9GTE9XX0NUUkxfUlgpKQorCQkvKiBFbmFibGUgQmlnTUFDIHRvIHJlYWN0IG9uIHJlY2VpdmVkIFBhdXNlIHBhY2tldHMgKi8KKwkJdmFsIHw9ICgxPDw1KTsKKwl3Yl9kYXRhWzBdID0gdmFsOworCXdiX2RhdGFbMV0gPSAwOworCVJFR19XUl9ETUFFKGJwLCBibWFjX2FkZHIgKyBCSUdNQUNfUkVHSVNURVJfUlhfQ09OVFJPTCwgd2JfZGF0YSwgMik7CisKKwkvKiB0eCBjb250cm9sICovCisJdmFsID0gMHhjMDsKKwlpZiAoIShwYXJhbXMtPmZlYXR1cmVfY29uZmlnX2ZsYWdzICYKKwkgICAgICBGRUFUVVJFX0NPTkZJR19QRkNfRU5BQkxFRCkgJiYKKwkJKHZhcnMtPmZsb3dfY3RybCAmIEJOWDJYX0ZMT1dfQ1RSTF9UWCkpCisJCXZhbCB8PSAweDgwMDAwMDsKKwl3Yl9kYXRhWzBdID0gdmFsOworCXdiX2RhdGFbMV0gPSAwOworCVJFR19XUl9ETUFFKGJwLCBibWFjX2FkZHIgKyBCSUdNQUNfUkVHSVNURVJfVFhfQ09OVFJPTCwgd2JfZGF0YSwgMik7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X3VwZGF0ZV9wZmNfYm1hYzIoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsCisJCQkJICAgc3RydWN0IGxpbmtfdmFycyAqdmFycywKKwkJCQkgICB1OCBpc19sYikKIHsKIAkvKgogCSAqIFNldCByeCBjb250cm9sOiBTdHJpcCBDUkMgYW5kIGVuYWJsZSBCaWdNQUMgdG8gcmVsYXkKQEAgLTM5Nyw3ICs3MjQsOSBAQAogCQlOSUdfUkVHX0lOR1JFU1NfQk1BQzBfTUVNOwogCXUzMiB2YWwgPSAweDE0OwogCi0JaWYgKHZhcnMtPmZsb3dfY3RybCAmIEJOWDJYX0ZMT1dfQ1RSTF9SWCkKKwlpZiAoKCEocGFyYW1zLT5mZWF0dXJlX2NvbmZpZ19mbGFncyAmCisJICAgICAgRkVBVFVSRV9DT05GSUdfUEZDX0VOQUJMRUQpKSAmJgorCQkodmFycy0+Zmxvd19jdHJsICYgQk5YMlhfRkxPV19DVFJMX1JYKSkKIAkJLyogRW5hYmxlIEJpZ01BQyB0byByZWFjdCBvbiByZWNlaXZlZCBQYXVzZSBwYWNrZXRzICovCiAJCXZhbCB8PSAoMTw8NSk7CiAJd2JfZGF0YVswXSA9IHZhbDsKQEAgLTQwOCwxNCArNzM3LDQ3IEBACiAKIAkvKiBUeCBjb250cm9sICovCiAJdmFsID0gMHhjMDsKLQlpZiAodmFycy0+Zmxvd19jdHJsICYgQk5YMlhfRkxPV19DVFJMX1RYKQorCWlmICghKHBhcmFtcy0+ZmVhdHVyZV9jb25maWdfZmxhZ3MgJgorCQkJCUZFQVRVUkVfQ09ORklHX1BGQ19FTkFCTEVEKSAmJgorCSAgICAodmFycy0+Zmxvd19jdHJsICYgQk5YMlhfRkxPV19DVFJMX1RYKSkKIAkJdmFsIHw9IDB4ODAwMDAwOwogCXdiX2RhdGFbMF0gPSB2YWw7CiAJd2JfZGF0YVsxXSA9IDA7Ci0JUkVHX1dSX0RNQUUoYnAsIGJtYWNfYWRkciArIEJJR01BQzJfUkVHSVNURVJfVFhfQ09OVFJPTCwKLQkJCXdiX2RhdGEsIDIpOworCVJFR19XUl9ETUFFKGJwLCBibWFjX2FkZHIgKyBCSUdNQUMyX1JFR0lTVEVSX1RYX0NPTlRST0wsIHdiX2RhdGEsIDIpOwogCisJaWYgKHBhcmFtcy0+ZmVhdHVyZV9jb25maWdfZmxhZ3MgJiBGRUFUVVJFX0NPTkZJR19QRkNfRU5BQkxFRCkgeworCQlEUChORVRJRl9NU0dfTElOSywgIlBGQyBpcyBlbmFibGVkXG4iKTsKKwkJLyogRW5hYmxlIFBGQyBSWCAmIFRYICYgU1RBVFMgYW5kIHNldCA4IENPUyAgKi8KKwkJd2JfZGF0YVswXSA9IDB4MDsKKwkJd2JfZGF0YVswXSB8PSAoMTw8MCk7ICAvKiBSWCAqLworCQl3Yl9kYXRhWzBdIHw9ICgxPDwxKTsgIC8qIFRYICovCisJCXdiX2RhdGFbMF0gfD0gKDE8PDIpOyAgLyogRm9yY2UgaW5pdGlhbCBYb24gKi8KKwkJd2JfZGF0YVswXSB8PSAoMTw8Myk7ICAvKiA4IGNvcyAqLworCQl3Yl9kYXRhWzBdIHw9ICgxPDw1KTsgIC8qIFNUQVRTICovCisJCXdiX2RhdGFbMV0gPSAwOworCQlSRUdfV1JfRE1BRShicCwgYm1hY19hZGRyICsgQklHTUFDMl9SRUdJU1RFUl9QRkNfQ09OVFJPTCwKKwkJCSAgICB3Yl9kYXRhLCAyKTsKKwkJLyogQ2xlYXIgdGhlIGZvcmNlIFhvbiAqLworCQl3Yl9kYXRhWzBdICY9IH4oMTw8Mik7CisJfSBlbHNlIHsKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJQRkMgaXMgZGlzYWJsZWRcbiIpOworCQkvKiBkaXNhYmxlIFBGQyBSWCAmIFRYICYgU1RBVFMgYW5kIHNldCA4IENPUyAqLworCQl3Yl9kYXRhWzBdID0gMHg4OworCQl3Yl9kYXRhWzFdID0gMDsKKwl9CisKKwlSRUdfV1JfRE1BRShicCwgYm1hY19hZGRyICsgQklHTUFDMl9SRUdJU1RFUl9QRkNfQ09OVFJPTCwgd2JfZGF0YSwgMik7CisKKwkvKioKKwkqIFNldCBUaW1lIChiYXNlZCB1bml0IGlzIDUxMiBiaXQgdGltZSkgYmV0d2VlbiBhdXRvbWF0aWMKKwkqIHJlLXNlbmRpbmcgb2YgUFAgcGFja2V0cyBhbWQgZW5hYmxlIGF1dG9tYXRpYyByZS1zZW5kIG9mCisJKiBQZXItUHJpcm9pdHkgUGFja2V0IGFzIGxvbmcgYXMgcHBfZ2VuIGlzIGFzc2VydGVkIGFuZAorCSogcHBfZGlzYWJsZSBpcyBsb3cuCisJKi8KIAl2YWwgPSAweDgwMDA7CisJaWYgKHBhcmFtcy0+ZmVhdHVyZV9jb25maWdfZmxhZ3MgJiBGRUFUVVJFX0NPTkZJR19QRkNfRU5BQkxFRCkKKwkJdmFsIHw9ICgxPDwxNik7IC8qIGVuYWJsZSBhdXRvbWF0aWMgcmUtc2VuZCAqLworCiAJd2JfZGF0YVswXSA9IHZhbDsKIAl3Yl9kYXRhWzFdID0gMDsKIAlSRUdfV1JfRE1BRShicCwgYm1hY19hZGRyICsgQklHTUFDMl9SRUdJU1RFUl9UWF9QQVVTRV9DT05UUk9MLApAQCAtNDI3LDYgKzc4OSw5IEBACiAJCXZhbCB8PSAweDQ7IC8qIExvY2FsIGxvb3BiYWNrICovCiAJCURQKE5FVElGX01TR19MSU5LLCAiZW5hYmxlIGJtYWMgbG9vcGJhY2tcbiIpOwogCX0KKwkvKiBXaGVuIFBGQyBlbmFibGVkLCBQYXNzIHBhdXNlIGZyYW1lcyB0b3dhcmRzIHRoZSBOSUcuICovCisJaWYgKHBhcmFtcy0+ZmVhdHVyZV9jb25maWdfZmxhZ3MgJiBGRUFUVVJFX0NPTkZJR19QRkNfRU5BQkxFRCkKKwkJdmFsIHw9ICgoMTw8Nil8KDE8PDUpKTsKIAogCXdiX2RhdGFbMF0gPSB2YWw7CiAJd2JfZGF0YVsxXSA9IDA7CkBAIC00MzQsNiArNzk5LDIzOSBAQAogCQkJd2JfZGF0YSwgMik7CiB9CiAKK3N0YXRpYyB2b2lkIGJueDJ4X3VwZGF0ZV9wZmNfYnJiKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLAorCQlzdHJ1Y3QgbGlua192YXJzICp2YXJzLAorCQlzdHJ1Y3QgYm54MnhfbmlnX2JyYl9wZmNfcG9ydF9wYXJhbXMgKnBmY19wYXJhbXMpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CisJaW50IHNldF9wZmMgPSBwYXJhbXMtPmZlYXR1cmVfY29uZmlnX2ZsYWdzICYKKwkJRkVBVFVSRV9DT05GSUdfUEZDX0VOQUJMRUQ7CisKKwkvKiBkZWZhdWx0IC0gcGF1c2UgY29uZmlndXJhdGlvbiAqLworCXUzMiBwYXVzZV94b2ZmX3RoID0gUEZDX0JSQl9NQUNfUEFVU0VfWE9GRl9USFJFU0hPTERfUEFVU0VBQkxFOworCXUzMiBwYXVzZV94b25fdGggPSBQRkNfQlJCX01BQ19QQVVTRV9YT05fVEhSRVNIT0xEX1BBVVNFQUJMRTsKKwl1MzIgZnVsbF94b2ZmX3RoID0gUEZDX0JSQl9NQUNfRlVMTF9YT0ZGX1RIUkVTSE9MRF9QQVVTRUFCTEU7CisJdTMyIGZ1bGxfeG9uX3RoID0gUEZDX0JSQl9NQUNfRlVMTF9YT05fVEhSRVNIT0xEX1BBVVNFQUJMRTsKKworCWlmIChzZXRfcGZjICYmIHBmY19wYXJhbXMpCisJCS8qIEZpcnN0IENPUyAqLworCQlpZiAoIXBmY19wYXJhbXMtPmNvczBfcGF1c2VhYmxlKSB7CisJCQlwYXVzZV94b2ZmX3RoID0KKwkJCSAgUEZDX0JSQl9NQUNfUEFVU0VfWE9GRl9USFJFU0hPTERfTk9OX1BBVVNFQUJMRTsKKwkJCXBhdXNlX3hvbl90aCA9CisJCQkgIFBGQ19CUkJfTUFDX1BBVVNFX1hPTl9USFJFU0hPTERfTk9OX1BBVVNFQUJMRTsKKwkJCWZ1bGxfeG9mZl90aCA9CisJCQkgIFBGQ19CUkJfTUFDX0ZVTExfWE9GRl9USFJFU0hPTERfTk9OX1BBVVNFQUJMRTsKKwkJCWZ1bGxfeG9uX3RoID0KKwkJCSAgUEZDX0JSQl9NQUNfRlVMTF9YT05fVEhSRVNIT0xEX05PTl9QQVVTRUFCTEU7CisJCX0KKwkvKiBUaGUgbnVtYmVyIG9mIGZyZWUgYmxvY2tzIGJlbG93IHdoaWNoIHRoZSBwYXVzZSBzaWduYWwgdG8gY2xhc3MgMAorCSAgIG9mIE1BQyAjbiBpcyBhc3NlcnRlZC4gbj0wLDEgKi8KKwlSRUdfV1IoYnAsIEJSQjFfUkVHX1BBVVNFXzBfWE9GRl9USFJFU0hPTERfMCAsIHBhdXNlX3hvZmZfdGgpOworCS8qIFRoZSBudW1iZXIgb2YgZnJlZSBibG9ja3MgYWJvdmUgd2hpY2ggdGhlIHBhdXNlIHNpZ25hbCB0byBjbGFzcyAwCisJICAgb2YgTUFDICNuIGlzIGRlLWFzc2VydGVkLiBuPTAsMSAqLworCVJFR19XUihicCwgQlJCMV9SRUdfUEFVU0VfMF9YT05fVEhSRVNIT0xEXzAgLCBwYXVzZV94b25fdGgpOworCS8qIFRoZSBudW1iZXIgb2YgZnJlZSBibG9ja3MgYmVsb3cgd2hpY2ggdGhlIGZ1bGwgc2lnbmFsIHRvIGNsYXNzIDAKKwkgICBvZiBNQUMgI24gaXMgYXNzZXJ0ZWQuIG49MCwxICovCisJUkVHX1dSKGJwLCBCUkIxX1JFR19GVUxMXzBfWE9GRl9USFJFU0hPTERfMCAsIGZ1bGxfeG9mZl90aCk7CisJLyogVGhlIG51bWJlciBvZiBmcmVlIGJsb2NrcyBhYm92ZSB3aGljaCB0aGUgZnVsbCBzaWduYWwgdG8gY2xhc3MgMAorCSAgIG9mIE1BQyAjbiBpcyBkZS1hc3NlcnRlZC4gbj0wLDEgKi8KKwlSRUdfV1IoYnAsIEJSQjFfUkVHX0ZVTExfMF9YT05fVEhSRVNIT0xEXzAgLCBmdWxsX3hvbl90aCk7CisKKwlpZiAoc2V0X3BmYyAmJiBwZmNfcGFyYW1zKSB7CisJCS8qIFNlY29uZCBDT1MgKi8KKwkJaWYgKHBmY19wYXJhbXMtPmNvczFfcGF1c2VhYmxlKSB7CisJCQlwYXVzZV94b2ZmX3RoID0KKwkJCSAgUEZDX0JSQl9NQUNfUEFVU0VfWE9GRl9USFJFU0hPTERfUEFVU0VBQkxFOworCQkJcGF1c2VfeG9uX3RoID0KKwkJCSAgUEZDX0JSQl9NQUNfUEFVU0VfWE9OX1RIUkVTSE9MRF9QQVVTRUFCTEU7CisJCQlmdWxsX3hvZmZfdGggPQorCQkJICBQRkNfQlJCX01BQ19GVUxMX1hPRkZfVEhSRVNIT0xEX1BBVVNFQUJMRTsKKwkJCWZ1bGxfeG9uX3RoID0KKwkJCSAgUEZDX0JSQl9NQUNfRlVMTF9YT05fVEhSRVNIT0xEX1BBVVNFQUJMRTsKKwkJfSBlbHNlIHsKKwkJCXBhdXNlX3hvZmZfdGggPQorCQkJICBQRkNfQlJCX01BQ19QQVVTRV9YT0ZGX1RIUkVTSE9MRF9OT05fUEFVU0VBQkxFOworCQkJcGF1c2VfeG9uX3RoID0KKwkJCSAgUEZDX0JSQl9NQUNfUEFVU0VfWE9OX1RIUkVTSE9MRF9OT05fUEFVU0VBQkxFOworCQkJZnVsbF94b2ZmX3RoID0KKwkJCSAgUEZDX0JSQl9NQUNfRlVMTF9YT0ZGX1RIUkVTSE9MRF9OT05fUEFVU0VBQkxFOworCQkJZnVsbF94b25fdGggPQorCQkJICBQRkNfQlJCX01BQ19GVUxMX1hPTl9USFJFU0hPTERfTk9OX1BBVVNFQUJMRTsKKwkJfQorCQkvKioKKwkJICogVGhlIG51bWJlciBvZiBmcmVlIGJsb2NrcyBiZWxvdyB3aGljaCB0aGUgcGF1c2Ugc2lnbmFsIHRvCisJCSAqIGNsYXNzIDEgb2YgTUFDICNuIGlzIGFzc2VydGVkLiBuPTAsMQorCQkgKiovCisJCVJFR19XUihicCwgQlJCMV9SRUdfUEFVU0VfMV9YT0ZGX1RIUkVTSE9MRF8wLCBwYXVzZV94b2ZmX3RoKTsKKwkJLyoqCisJCSAqIFRoZSBudW1iZXIgb2YgZnJlZSBibG9ja3MgYWJvdmUgd2hpY2ggdGhlIHBhdXNlIHNpZ25hbCB0bworCQkgKiBjbGFzcyAxIG9mIE1BQyAjbiBpcyBkZS1hc3NlcnRlZC4gbj0wLDEKKwkJICoqLworCQlSRUdfV1IoYnAsIEJSQjFfUkVHX1BBVVNFXzFfWE9OX1RIUkVTSE9MRF8wLCBwYXVzZV94b25fdGgpOworCQkvKioKKwkJICogVGhlIG51bWJlciBvZiBmcmVlIGJsb2NrcyBiZWxvdyB3aGljaCB0aGUgZnVsbCBzaWduYWwgdG8KKwkJICogY2xhc3MgMSBvZiBNQUMgI24gaXMgYXNzZXJ0ZWQuIG49MCwxCisJCSAqKi8KKwkJUkVHX1dSKGJwLCBCUkIxX1JFR19GVUxMXzFfWE9GRl9USFJFU0hPTERfMCwgZnVsbF94b2ZmX3RoKTsKKwkJLyoqCisJCSAqIFRoZSBudW1iZXIgb2YgZnJlZSBibG9ja3MgYWJvdmUgd2hpY2ggdGhlIGZ1bGwgc2lnbmFsIHRvCisJCSAqIGNsYXNzIDEgb2YgTUFDICNuIGlzIGRlLWFzc2VydGVkLiBuPTAsMQorCQkgKiovCisJCVJFR19XUihicCwgQlJCMV9SRUdfRlVMTF8xX1hPTl9USFJFU0hPTERfMCwgZnVsbF94b25fdGgpOworCX0KK30KKworc3RhdGljIHZvaWQgYm54MnhfdXBkYXRlX3BmY19uaWcoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsCisJCXN0cnVjdCBsaW5rX3ZhcnMgKnZhcnMsCisJCXN0cnVjdCBibngyeF9uaWdfYnJiX3BmY19wb3J0X3BhcmFtcyAqbmlnX3BhcmFtcykKK3sKKwl1MzIgeGNtX21hc2sgPSAwLCBwcHBfZW5hYmxlID0gMCwgcGF1c2VfZW5hYmxlID0gMCwgbGxmY19vdXRfZW4gPSAwOworCXUzMiBsbGZjX2VuYWJsZSA9IDAsIHhjbTBfb3V0X2VuID0gMCwgcDBfaHdwZmNfZW5hYmxlID0gMDsKKwl1MzIgcGt0X3ByaW9yaXR5X3RvX2NvcyA9IDA7CisJdTMyIHZhbDsKKwlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKKwlpbnQgcG9ydCA9IHBhcmFtcy0+cG9ydDsKKwlpbnQgc2V0X3BmYyA9IHBhcmFtcy0+ZmVhdHVyZV9jb25maWdfZmxhZ3MgJgorCQlGRUFUVVJFX0NPTkZJR19QRkNfRU5BQkxFRDsKKwlEUChORVRJRl9NU0dfTElOSywgInVwZGF0aW5nIHBmYyBuaWcgcGFyYW1ldGVyc1xuIik7CisKKwkvKioKKwkgKiBXaGVuIE5JR19MTEgwX1hDTV9NQVNLX1JFR19MTEhYX1hDTV9NQVNLX0JDTiBiaXQgaXMgc2V0CisJICogTUFDIGNvbnRyb2wgZnJhbWVzICh0aGF0IGFyZSBub3QgcGF1c2UgcGFja2V0cykKKwkgKiB3aWxsIGJlIGZvcndhcmRlZCB0byB0aGUgWENNLgorCSAqLworCXhjbV9tYXNrID0gUkVHX1JEKGJwLAorCQkJCXBvcnQgPyBOSUdfUkVHX0xMSDFfWENNX01BU0sgOgorCQkJCU5JR19SRUdfTExIMF9YQ01fTUFTSyk7CisJLyoqCisJICogbmlnIHBhcmFtcyB3aWxsIG92ZXJyaWRlIG5vbiBQRkMgcGFyYW1zLCBzaW5jZSBpdCdzIHBvc3NpYmxlIHRvCisJICogZG8gdHJhbnNpdGlvbiBmcm9tIFBGQyB0byBTQUZDCisJICovCisJaWYgKHNldF9wZmMpIHsKKwkJcGF1c2VfZW5hYmxlID0gMDsKKwkJbGxmY19vdXRfZW4gPSAwOworCQlsbGZjX2VuYWJsZSA9IDA7CisJCXBwcF9lbmFibGUgPSAxOworCQl4Y21fbWFzayAmPSB+KHBvcnQgPyBOSUdfTExIMV9YQ01fTUFTS19SRUdfTExIMV9YQ01fTUFTS19CQ04gOgorCQkJCSAgICAgTklHX0xMSDBfWENNX01BU0tfUkVHX0xMSDBfWENNX01BU0tfQkNOKTsKKwkJeGNtMF9vdXRfZW4gPSAwOworCQlwMF9od3BmY19lbmFibGUgPSAxOworCX0gZWxzZSAgeworCQlpZiAobmlnX3BhcmFtcykgeworCQkJbGxmY19vdXRfZW4gPSBuaWdfcGFyYW1zLT5sbGZjX291dF9lbjsKKwkJCWxsZmNfZW5hYmxlID0gbmlnX3BhcmFtcy0+bGxmY19lbmFibGU7CisJCQlwYXVzZV9lbmFibGUgPSBuaWdfcGFyYW1zLT5wYXVzZV9lbmFibGU7CisJCX0gZWxzZSAgLypkZWZhdWwgbm9uIFBGQyBtb2RlIC0gUEFVU0UgKi8KKwkJCXBhdXNlX2VuYWJsZSA9IDE7CisKKwkJeGNtX21hc2sgfD0gKHBvcnQgPyBOSUdfTExIMV9YQ01fTUFTS19SRUdfTExIMV9YQ01fTUFTS19CQ04gOgorCQkJTklHX0xMSDBfWENNX01BU0tfUkVHX0xMSDBfWENNX01BU0tfQkNOKTsKKwkJeGNtMF9vdXRfZW4gPSAxOworCX0KKworCVJFR19XUihicCwgcG9ydCA/IE5JR19SRUdfTExGQ19PVVRfRU5fMSA6CisJICAgICAgIE5JR19SRUdfTExGQ19PVVRfRU5fMCwgbGxmY19vdXRfZW4pOworCVJFR19XUihicCwgcG9ydCA/IE5JR19SRUdfTExGQ19FTkFCTEVfMSA6CisJICAgICAgIE5JR19SRUdfTExGQ19FTkFCTEVfMCwgbGxmY19lbmFibGUpOworCVJFR19XUihicCwgcG9ydCA/IE5JR19SRUdfUEFVU0VfRU5BQkxFXzEgOgorCSAgICAgICBOSUdfUkVHX1BBVVNFX0VOQUJMRV8wLCBwYXVzZV9lbmFibGUpOworCisJUkVHX1dSKGJwLCBwb3J0ID8gTklHX1JFR19QUFBfRU5BQkxFXzEgOgorCSAgICAgICBOSUdfUkVHX1BQUF9FTkFCTEVfMCwgcHBwX2VuYWJsZSk7CisKKwlSRUdfV1IoYnAsIHBvcnQgPyBOSUdfUkVHX0xMSDFfWENNX01BU0sgOgorCSAgICAgICBOSUdfUkVHX0xMSDBfWENNX01BU0ssIHhjbV9tYXNrKTsKKworCVJFR19XUihicCwgIE5JR19SRUdfTExGQ19FR1JFU1NfU1JDX0VOQUJMRV8wLCAweDcpOworCisJLyogb3V0cHV0IGVuYWJsZSBmb3IgUlhfWENNICMgSUYgKi8KKwlSRUdfV1IoYnAsIE5JR19SRUdfWENNMF9PVVRfRU4sIHhjbTBfb3V0X2VuKTsKKworCS8qIEhXIFBGQyBUWCBlbmFibGUgKi8KKwlSRUdfV1IoYnAsIE5JR19SRUdfUDBfSFdQRkNfRU5BQkxFLCBwMF9od3BmY19lbmFibGUpOworCisJLyogMHgyID0gQk1BQywgMHgxPSBFTUFDICovCisJc3dpdGNoICh2YXJzLT5tYWNfdHlwZSkgeworCWNhc2UgTUFDX1RZUEVfRU1BQzoKKwkJdmFsID0gMTsKKwkJYnJlYWs7CisJY2FzZSBNQUNfVFlQRV9CTUFDOgorCQl2YWwgPSAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl2YWwgPSAwOworCQlicmVhazsKKwl9CisJUkVHX1dSKGJwLCBOSUdfUkVHX0VHUkVTU19FTUFDMF9QT1JULCB2YWwpOworCisJaWYgKG5pZ19wYXJhbXMpIHsKKwkJcGt0X3ByaW9yaXR5X3RvX2NvcyA9IG5pZ19wYXJhbXMtPnBrdF9wcmlvcml0eV90b19jb3M7CisKKwkJUkVHX1dSKGJwLCBwb3J0ID8gTklHX1JFR19QMV9SWF9DT1MwX1BSSU9SSVRZX01BU0sgOgorCQkgICAgICAgTklHX1JFR19QMF9SWF9DT1MwX1BSSU9SSVRZX01BU0ssCisJCSAgICAgICBuaWdfcGFyYW1zLT5yeF9jb3MwX3ByaW9yaXR5X21hc2spOworCisJCVJFR19XUihicCwgcG9ydCA/IE5JR19SRUdfUDFfUlhfQ09TMV9QUklPUklUWV9NQVNLIDoKKwkJICAgICAgIE5JR19SRUdfUDBfUlhfQ09TMV9QUklPUklUWV9NQVNLLAorCQkgICAgICAgbmlnX3BhcmFtcy0+cnhfY29zMV9wcmlvcml0eV9tYXNrKTsKKworCQlSRUdfV1IoYnAsIHBvcnQgPyBOSUdfUkVHX0xMRkNfSElHSF9QUklPUklUWV9DTEFTU0VTXzEgOgorCQkgICAgICAgTklHX1JFR19MTEZDX0hJR0hfUFJJT1JJVFlfQ0xBU1NFU18wLAorCQkgICAgICAgbmlnX3BhcmFtcy0+bGxmY19oaWdoX3ByaW9yaXR5X2NsYXNzZXMpOworCisJCVJFR19XUihicCwgcG9ydCA/IE5JR19SRUdfTExGQ19MT1dfUFJJT1JJVFlfQ0xBU1NFU18xIDoKKwkJICAgICAgIE5JR19SRUdfTExGQ19MT1dfUFJJT1JJVFlfQ0xBU1NFU18wLAorCQkgICAgICAgbmlnX3BhcmFtcy0+bGxmY19sb3dfcHJpb3JpdHlfY2xhc3Nlcyk7CisJfQorCVJFR19XUihicCwgcG9ydCA/IE5JR19SRUdfUDFfUEtUX1BSSU9SSVRZX1RPX0NPUyA6CisJICAgICAgIE5JR19SRUdfUDBfUEtUX1BSSU9SSVRZX1RPX0NPUywKKwkgICAgICAgcGt0X3ByaW9yaXR5X3RvX2Nvcyk7Cit9CisKKwordm9pZCBibngyeF91cGRhdGVfcGZjKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLAorCQkgICAgICBzdHJ1Y3QgbGlua192YXJzICp2YXJzLAorCQkgICAgICBzdHJ1Y3QgYm54MnhfbmlnX2JyYl9wZmNfcG9ydF9wYXJhbXMgKnBmY19wYXJhbXMpCit7CisJLyoqCisJICogVGhlIFBGQyBhbmQgcGF1c2UgYXJlIG9ydGhvZ29uYWwgdG8gb25lIGFub3RoZXIsIG1lYW5pbmcgd2hlbgorCSAqIFBGQyBpcyBlbmFibGVkLCB0aGUgcGF1c2UgYXJlIGRpc2FibGVkLCBhbmQgd2hlbiBQRkMgaXMKKwkgKiBkaXNhYmxlZCwgcGF1c2UgYXJlIHNldCBhY2NvcmRpbmcgdG8gdGhlIHBhdXNlIHJlc3VsdC4KKwkgKi8KKwl1MzIgdmFsOworCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOworCisJLyogdXBkYXRlIE5JRyBwYXJhbXMgKi8KKwlibngyeF91cGRhdGVfcGZjX25pZyhwYXJhbXMsIHZhcnMsIHBmY19wYXJhbXMpOworCisJLyogdXBkYXRlIEJSQiBwYXJhbXMgKi8KKwlibngyeF91cGRhdGVfcGZjX2JyYihwYXJhbXMsIHZhcnMsIHBmY19wYXJhbXMpOworCisJaWYgKCF2YXJzLT5saW5rX3VwKQorCQlyZXR1cm47CisKKwl2YWwgPSBSRUdfUkQoYnAsIE1JU0NfUkVHX1JFU0VUX1JFR18yKTsKKwlpZiAoKHZhbCAmIChNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfMl9SU1RfQk1BQzAgPDwgcGFyYW1zLT5wb3J0KSkKKwkgICAgPT0gMCkgeworCQlEUChORVRJRl9NU0dfTElOSywgIkFib3V0IHRvIHVwZGF0ZSBQRkMgaW4gRU1BQ1xuIik7CisJCWJueDJ4X2VtYWNfZW5hYmxlKHBhcmFtcywgdmFycywgMCk7CisJCXJldHVybjsKKwl9CisKKwlEUChORVRJRl9NU0dfTElOSywgIkFib3V0IHRvIHVwZGF0ZSBQRkMgaW4gQk1BQ1xuIik7CisJaWYgKENISVBfSVNfRTIoYnApKQorCQlibngyeF91cGRhdGVfcGZjX2JtYWMyKHBhcmFtcywgdmFycywgMCk7CisJZWxzZQorCQlibngyeF91cGRhdGVfcGZjX2JtYWMxKHBhcmFtcywgdmFycyk7CisKKwl2YWwgPSAwOworCWlmICgocGFyYW1zLT5mZWF0dXJlX2NvbmZpZ19mbGFncyAmCisJICAgICAgRkVBVFVSRV9DT05GSUdfUEZDX0VOQUJMRUQpIHx8CisJICAgICh2YXJzLT5mbG93X2N0cmwgJiBCTlgyWF9GTE9XX0NUUkxfVFgpKQorCQl2YWwgPSAxOworCVJFR19XUihicCwgTklHX1JFR19CTUFDMF9QQVVTRV9PVVRfRU4gKyBwYXJhbXMtPnBvcnQqNCwgdmFsKTsKK30KIAogc3RhdGljIHU4IGJueDJ4X2JtYWMxX2VuYWJsZShzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywKIAkJCSAgICAgc3RydWN0IGxpbmtfdmFycyAqdmFycywKQEAgLTQ2NSwxNSArMTA2Myw2IEBACiAJUkVHX1dSX0RNQUUoYnAsIGJtYWNfYWRkciArIEJJR01BQ19SRUdJU1RFUl9UWF9TT1VSQ0VfQUREUiwKIAkJICAgIHdiX2RhdGEsIDIpOwogCi0JLyogdHggY29udHJvbCAqLwotCXZhbCA9IDB4YzA7Ci0JaWYgKHZhcnMtPmZsb3dfY3RybCAmIEJOWDJYX0ZMT1dfQ1RSTF9UWCkKLQkJdmFsIHw9IDB4ODAwMDAwOwotCXdiX2RhdGFbMF0gPSB2YWw7Ci0Jd2JfZGF0YVsxXSA9IDA7Ci0JUkVHX1dSX0RNQUUoYnAsIGJtYWNfYWRkciArIEJJR01BQ19SRUdJU1RFUl9UWF9DT05UUk9MLAotCQkJd2JfZGF0YSwgMik7Ci0KIAkvKiBtYWMgY29udHJvbCAqLwogCXZhbCA9IDB4MzsKIAlpZiAoaXNfbGIpIHsKQEAgLTQ5MSwxNCArMTA4MCw3IEBACiAJUkVHX1dSX0RNQUUoYnAsIGJtYWNfYWRkciArIEJJR01BQ19SRUdJU1RFUl9SWF9NQVhfU0laRSwKIAkJCXdiX2RhdGEsIDIpOwogCi0JLyogcnggY29udHJvbCBzZXQgdG8gZG9uJ3Qgc3RyaXAgY3JjICovCi0JdmFsID0gMHgxNDsKLQlpZiAodmFycy0+Zmxvd19jdHJsICYgQk5YMlhfRkxPV19DVFJMX1JYKQotCQl2YWwgfD0gMHgyMDsKLQl3Yl9kYXRhWzBdID0gdmFsOwotCXdiX2RhdGFbMV0gPSAwOwotCVJFR19XUl9ETUFFKGJwLCBibWFjX2FkZHIgKyBCSUdNQUNfUkVHSVNURVJfUlhfQ09OVFJPTCwKLQkJCXdiX2RhdGEsIDIpOworCWJueDJ4X3VwZGF0ZV9wZmNfYm1hYzEocGFyYW1zLCB2YXJzKTsKIAogCS8qIHNldCB0eCBtdHUgKi8KIAl3Yl9kYXRhWzBdID0gRVRIX01BWF9KVU1CT19QQUNLRVRfU0laRSArIEVUSF9PVlJFSEVBRDsKQEAgLTU5NSw3ICsxMTc3LDcgQEAKIAlSRUdfV1JfRE1BRShicCwgYm1hY19hZGRyICsgQklHTUFDMl9SRUdJU1RFUl9DTlRfTUFYX1NJWkUsCiAJCQl3Yl9kYXRhLCAyKTsKIAl1ZGVsYXkoMzApOwotCWJueDJ4X3VwZGF0ZV9ibWFjMihwYXJhbXMsIHZhcnMsIGlzX2xiKTsKKwlibngyeF91cGRhdGVfcGZjX2JtYWMyKHBhcmFtcywgdmFycywgaXNfbGIpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC02MjcsNyArMTIwOSw5IEBACiAJUkVHX1dSKGJwLCBOSUdfUkVHX1hHWFNfTEFORV9TRUxfUDAgKyBwb3J0KjQsIDB4MCk7CiAJUkVHX1dSKGJwLCBOSUdfUkVHX0VHUkVTU19FTUFDMF9QT1JUICsgcG9ydCo0LCAweDApOwogCXZhbCA9IDA7Ci0JaWYgKHZhcnMtPmZsb3dfY3RybCAmIEJOWDJYX0ZMT1dfQ1RSTF9UWCkKKwlpZiAoKHBhcmFtcy0+ZmVhdHVyZV9jb25maWdfZmxhZ3MgJgorCSAgICAgIEZFQVRVUkVfQ09ORklHX1BGQ19FTkFCTEVEKSB8fAorCSAgICAodmFycy0+Zmxvd19jdHJsICYgQk5YMlhfRkxPV19DVFJMX1RYKSkKIAkJdmFsID0gMTsKIAlSRUdfV1IoYnAsIE5JR19SRUdfQk1BQzBfUEFVU0VfT1VUX0VOICsgcG9ydCo0LCB2YWwpOwogCVJFR19XUihicCwgTklHX1JFR19FR1JFU1NfRU1BQzBfT1VUX0VOICsgcG9ydCo0LCAweDApOwpAQCAtMzkwNCw3ICs0NDg4LDcgQEAKIAkJCSAgICAgIE1ESU9fUE1BX1JFR19TRlBfVFdPX1dJUkVfQ1RSTCwgJnZhbCk7CiAJCWlmICgodmFsICYgTURJT19QTUFfUkVHX1NGUF9UV09fV0lSRV9DVFJMX1NUQVRVU19NQVNLKSA9PQogCQkgICAgTURJT19QTUFfUkVHX1NGUF9UV09fV0lSRV9TVEFUVVNfSURMRSkKLQkJCXJldHVybiAwOzsKKwkJCXJldHVybiAwOwogCQltc2xlZXAoMSk7CiAJfQogCXJldHVybiAtRUlOVkFMOwpAQCAtMzk4OCw3ICs0NTcyLDcgQEAKIAkJCSAgICAgIE1ESU9fUE1BX1JFR19TRlBfVFdPX1dJUkVfQ1RSTCwgJnZhbCk7CiAJCWlmICgodmFsICYgTURJT19QTUFfUkVHX1NGUF9UV09fV0lSRV9DVFJMX1NUQVRVU19NQVNLKSA9PQogCQkgICAgTURJT19QTUFfUkVHX1NGUF9UV09fV0lSRV9TVEFUVVNfSURMRSkKLQkJCXJldHVybiAwOzsKKwkJCXJldHVybiAwOwogCQltc2xlZXAoMSk7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9saW5rLmggYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9saW5rLmgKaW5kZXggMTcxYWJmOC4uYmVkYWIxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MngvYm54MnhfbGluay5oCisrKyBiL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2xpbmsuaApAQCAtNjUsNiArNjUsMjIgQEAKICNkZWZpbmUgRldfUEFSQU1fTURJT19DVFJMX09GRlNFVCAxNgogI2RlZmluZSBGV19QQVJBTV9TRVQocGh5X2FkZHIsIHBoeV90eXBlLCBtZGlvX2FjY2VzcykgXAogCShwaHlfYWRkciB8IHBoeV90eXBlIHwgbWRpb19hY2Nlc3MgPDwgRldfUEFSQU1fTURJT19DVFJMX09GRlNFVCkKKworI2RlZmluZSBQRkNfQlJCX01BQ19QQVVTRV9YT0ZGX1RIUkVTSE9MRF9QQVVTRUFCTEUJCTE3MAorI2RlZmluZSBQRkNfQlJCX01BQ19QQVVTRV9YT0ZGX1RIUkVTSE9MRF9OT05fUEFVU0VBQkxFCQkwCisKKyNkZWZpbmUgUEZDX0JSQl9NQUNfUEFVU0VfWE9OX1RIUkVTSE9MRF9QQVVTRUFCTEUJCQkyNTAKKyNkZWZpbmUgUEZDX0JSQl9NQUNfUEFVU0VfWE9OX1RIUkVTSE9MRF9OT05fUEFVU0VBQkxFCQkwCisKKyNkZWZpbmUgUEZDX0JSQl9NQUNfRlVMTF9YT0ZGX1RIUkVTSE9MRF9QQVVTRUFCTEUJCQkxMAorI2RlZmluZSBQRkNfQlJCX01BQ19GVUxMX1hPRkZfVEhSRVNIT0xEX05PTl9QQVVTRUFCTEUJCTkwCisKKyNkZWZpbmUgUEZDX0JSQl9NQUNfRlVMTF9YT05fVEhSRVNIT0xEX1BBVVNFQUJMRQkJCTUwCisjZGVmaW5lIFBGQ19CUkJfTUFDX0ZVTExfWE9OX1RIUkVTSE9MRF9OT05fUEFVU0VBQkxFCQkyNTAKKworI2RlZmluZSBQRkNfQlJCX0ZVTExfTEJfWE9GRl9USFJFU0hPTEQJCQkJMTcwCisjZGVmaW5lIFBGQ19CUkJfRlVMTF9MQl9YT05fVEhSRVNIT0xECQkJCTI1MAorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICBTdHJ1Y3RzICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0yMTYsNiArMjMyLDcgQEAKIAogCXUzMiBmZWF0dXJlX2NvbmZpZ19mbGFnczsKICNkZWZpbmUgRkVBVFVSRV9DT05GSUdfT1ZFUlJJREVfUFJFRU1QSEFTSVNfRU5BQkxFRCAoMTw8MCkKKyNkZWZpbmUgRkVBVFVSRV9DT05GSUdfUEZDX0VOQUJMRUQJCSgxPDwxKQogI2RlZmluZSBGRUFUVVJFX0NPTkZJR19CQ19TVVBQT1JUU19PUFRfTURMX1ZSRlkJKDE8PDIpCiAjZGVmaW5lIEZFQVRVUkVfQ09ORklHX0JDX1NVUFBPUlRTX0RVQUxfUEhZX09QVF9NRExfVlJGWQkoMTw8MykKIAkvKiBXaWxsIGJlIHBvcHVsYXRlZCBkdXJpbmcgY29tbW9uIGluaXQgKi8KQEAgLTMzMiw0ICszNDksNDMgQEAKIHU4IGJueDJ4X2Zhbl9mYWlsdXJlX2RldF9yZXEoc3RydWN0IGJueDJ4ICpicCwgdTMyIHNobWVtX2Jhc2UsCiAJCQkgICAgIHUzMiBzaG1lbTJfYmFzZSwgdTggcG9ydCk7CiAKKy8qIFBGQyBwb3J0IGNvbmZpZ3VyYXRpb24gcGFyYW1zICovCitzdHJ1Y3QgYm54MnhfbmlnX2JyYl9wZmNfcG9ydF9wYXJhbXMgeworCS8qIE5JRyAqLworCXUzMiBwYXVzZV9lbmFibGU7CisJdTMyIGxsZmNfb3V0X2VuOworCXUzMiBsbGZjX2VuYWJsZTsKKwl1MzIgcGt0X3ByaW9yaXR5X3RvX2NvczsKKwl1MzIgcnhfY29zMF9wcmlvcml0eV9tYXNrOworCXUzMiByeF9jb3MxX3ByaW9yaXR5X21hc2s7CisJdTMyIGxsZmNfaGlnaF9wcmlvcml0eV9jbGFzc2VzOworCXUzMiBsbGZjX2xvd19wcmlvcml0eV9jbGFzc2VzOworCS8qIEJSQiAqLworCXUzMiBjb3MwX3BhdXNlYWJsZTsKKwl1MzIgY29zMV9wYXVzZWFibGU7Cit9OworCisvKioKKyAqIFVzZWQgdG8gdXBkYXRlIHRoZSBQRkMgYXR0cmlidXRlcyBpbiBFTUFDLCBCTUFDLCBOSUcgYW5kIEJSQgorICogd2hlbiBsaW5rIGlzIGFscmVhZHkgdXAKKyAqLwordm9pZCBibngyeF91cGRhdGVfcGZjKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLAorCQkgICAgICBzdHJ1Y3QgbGlua192YXJzICp2YXJzLAorCQkgICAgICBzdHJ1Y3QgYm54MnhfbmlnX2JyYl9wZmNfcG9ydF9wYXJhbXMgKnBmY19wYXJhbXMpOworCisKKy8qIFVzZWQgdG8gY29uZmlndXJlIHRoZSBFVFMgdG8gZGlzYWJsZSAqLwordm9pZCBibngyeF9ldHNfZGlzYWJsZWQoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMpOworCisvKiBVc2VkIHRvIGNvbmZpZ3VyZSB0aGUgRVRTIHRvIEJXIGxpbWl0ZWQgKi8KK3ZvaWQgYm54MnhfZXRzX2J3X2xpbWl0KGNvbnN0IHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLCBjb25zdCB1MzIgY29zMF9idywKKwkJCQkJCWNvbnN0IHUzMiBjb3MxX2J3KTsKKworLyogVXNlZCB0byBjb25maWd1cmUgdGhlIEVUUyB0byBzdHJpY3QgKi8KK3U4IGJueDJ4X2V0c19zdHJpY3QoY29uc3Qgc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsIGNvbnN0IHU4IHN0cmljdF9jb3MpOworCisvKiBSZWFkIHBmYyBzdGF0aXN0aWMqLwordm9pZCBibngyeF9wZmNfc3RhdGlzdGljKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLCBzdHJ1Y3QgbGlua192YXJzICp2YXJzLAorCQkJCQkJIHUzMiBwZmNfZnJhbWVzX3NlbnRbMl0sCisJCQkJCQkgdTMyIHBmY19mcmFtZXNfcmVjZWl2ZWRbMl0pOwogI2VuZGlmIC8qIEJOWDJYX0xJTktfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54MngvYm54MnhfbWFpbi5jIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfbWFpbi5jCmluZGV4IDk3MDliODUuLjQ4OWE1NTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X21haW4uYworKysgYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9tYWluLmMKQEAgLTU1LDYgKzU1LDcgQEAKICNpbmNsdWRlICJibngyeF9pbml0LmgiCiAjaW5jbHVkZSAiYm54MnhfaW5pdF9vcHMuaCIKICNpbmNsdWRlICJibngyeF9jbW4uaCIKKyNpbmNsdWRlICJibngyeF9kY2IuaCIKIAogI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAjaW5jbHVkZSAiYm54MnhfZndfZmlsZV9oZHIuaCIKQEAgLTEyMSw2ICsxMjIsMTAgQEAKIAogc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpibngyeF93cTsKIAorI2lmZGVmIEJDTV9DTklDCitzdGF0aWMgdTggQUxMX0VOT0RFX01BQ1NbXSA9IHsweDAxLCAweDEwLCAweDE4LCAweDAxLCAweDAwLCAweDAxfTsKKyNlbmRpZgorCiBlbnVtIGJueDJ4X2JvYXJkX3R5cGUgewogCUJDTTU3NzEwID0gMCwKIAlCQ001NzcxMSA9IDEsCkBAIC05MjEsNyArOTI2LDcgQEAKIAkgICAgICAgc3Bfc2JfZGF0YS5wX2Z1bmMudmZfdmFsaWQpOwogCiAKLQlmb3JfZWFjaF9xdWV1ZShicCwgaSkgeworCWZvcl9lYWNoX2V0aF9xdWV1ZShicCwgaSkgewogCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtpXTsKIAkJaW50IGxvb3A7CiAJCXN0cnVjdCBoY19zdGF0dXNfYmxvY2tfZGF0YV9lMiBzYl9kYXRhX2UyOwpAQCAtOTYxLDYgKzk2NiwxMCBAQAogCiAJCS8qIGhvc3Qgc2IgZGF0YSAqLwogCisjaWZkZWYgQkNNX0NOSUMKKwkJaWYgKElTX0ZDT0VfRlAoZnApKQorCQkJY29udGludWU7CisjZW5kaWYKIAkJQk5YMlhfRVJSKCIgICAgIHJ1biBpbmRleGVzICgiKTsKIAkJZm9yIChqID0gMDsgaiA8IEhDX1NCX01BWF9TTTsgaisrKQogCQkJcHJfY29udCgiMHgleCVzIiwKQEAgLTEwMjksNyArMTAzOCw3IEBACiAjaWZkZWYgQk5YMlhfU1RPUF9PTl9FUlJPUgogCS8qIFJpbmdzICovCiAJLyogUnggKi8KLQlmb3JfZWFjaF9xdWV1ZShicCwgaSkgeworCWZvcl9lYWNoX3J4X3F1ZXVlKGJwLCBpKSB7CiAJCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2ldOwogCiAJCXN0YXJ0ID0gUlhfQkQobGUxNl90b19jcHUoKmZwLT5yeF9jb25zX3NiKSAtIDEwKTsKQEAgLTEwNjMsNyArMTA3Miw3IEBACiAJfQogCiAJLyogVHggKi8KLQlmb3JfZWFjaF9xdWV1ZShicCwgaSkgeworCWZvcl9lYWNoX3R4X3F1ZXVlKGJwLCBpKSB7CiAJCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2ldOwogCiAJCXN0YXJ0ID0gVFhfQkQobGUxNl90b19jcHUoKmZwLT50eF9jb25zX3NiKSAtIDEwKTsKQEAgLTEyOTgsNyArMTMwNyw3IEBACiAjaWZkZWYgQkNNX0NOSUMKIAkJb2Zmc2V0Kys7CiAjZW5kaWYKLQkJZm9yX2VhY2hfcXVldWUoYnAsIGkpCisJCWZvcl9lYWNoX2V0aF9xdWV1ZShicCwgaSkKIAkJCXN5bmNocm9uaXplX2lycShicC0+bXNpeF90YWJsZVtpICsgb2Zmc2V0XS52ZWN0b3IpOwogCX0gZWxzZQogCQlzeW5jaHJvbml6ZV9pcnEoYnAtPnBkZXYtPmlycSk7CkBAIC0xNDIwLDcgKzE0MjksNyBAQAogCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAjZW5kaWYKIAotCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7CisJZm9yX2VhY2hfZXRoX3F1ZXVlKGJwLCBpKSB7CiAJCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2ldOwogCiAJCW1hc2sgPSAweDIgPDwgKGZwLT5pbmRleCArIENOSUNfQ09OVEVYVF9VU0UpOwpAQCAtMjAyNiwxMyArMjAzNSwyOCBAQAogCiBzdGF0aWMgdm9pZCBibngyeF9yZWFkX21mX2NmZyhzdHJ1Y3QgYm54MnggKmJwKQogewotCWludCB2bjsKKwlpbnQgdm4sIG4gPSAoQ0hJUF9NT0RFX0lTXzRfUE9SVChicCkgPyAyIDogMSk7CiAKIAlpZiAoQlBfTk9NQ1AoYnApKQogCQlyZXR1cm47IC8qIHdoYXQgc2hvdWxkIGJlIHRoZSBkZWZhdWx0IGJ2YWx1ZSBpbiB0aGlzIGNhc2UgKi8KIAorCS8qIEZvciAyIHBvcnQgY29uZmlndXJhdGlvbiB0aGUgYWJzb2x1dGUgZnVuY3Rpb24gbnVtYmVyIGZvcm11bGEKKwkgKiBpczoKKwkgKiAgICAgIGFic19mdW5jID0gMiAqIHZuICsgQlBfUE9SVCArIEJQX1BBVEgKKwkgKgorCSAqICAgICAgYW5kIHRoZXJlIGFyZSA0IGZ1bmN0aW9ucyBwZXIgcG9ydAorCSAqCisJICogRm9yIDQgcG9ydCBjb25maWd1cmF0aW9uIGl0IGlzCisJICogICAgICBhYnNfZnVuYyA9IDQgKiB2biArIDIgKiBCUF9QT1JUICsgQlBfUEFUSAorCSAqCisJICogICAgICBhbmQgdGhlcmUgYXJlIDIgZnVuY3Rpb25zIHBlciBwb3J0CisJICovCiAJZm9yICh2biA9IFZOXzA7IHZuIDwgRTFIVk5fTUFYOyB2bisrKSB7Ci0JCWludCAvKmFicyovZnVuYyA9IDIqdm4gKyBCUF9QT1JUKGJwKTsKKwkJaW50IC8qYWJzKi9mdW5jID0gbiAqICgyICogdm4gKyBCUF9QT1JUKGJwKSkgKyBCUF9QQVRIKGJwKTsKKworCQlpZiAoZnVuYyA+PSBFMUhfRlVOQ19NQVgpCisJCQlicmVhazsKKwogCQlicC0+bWZfY29uZmlnW3ZuXSA9CiAJCQlNRl9DRkdfUkQoYnAsIGZ1bmNfbWZfY29uZmlnW2Z1bmNdLmNvbmZpZyk7CiAJfQpAQCAtMjIzOCw2ICsyMjYyLDE1IEBACiAJcmV0dXJuIHJjOwogfQogCitzdGF0aWMgdTggc3RhdF9jb3VudGVyX3ZhbGlkKHN0cnVjdCBibngyeCAqYnAsIHN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnApCit7CisjaWZkZWYgQkNNX0NOSUMKKwlpZiAoSVNfRkNPRV9GUChmcCkgJiYgSVNfTUYoYnApKQorCQlyZXR1cm4gZmFsc2U7CisjZW5kaWYKKwlyZXR1cm4gdHJ1ZTsKK30KKwogLyogbXVzdCBiZSBjYWxsZWQgdW5kZXIgcnRubF9sb2NrICovCiBzdGF0aWMgdm9pZCBibngyeF9yeHFfc2V0X21hY19maWx0ZXJzKHN0cnVjdCBibngyeCAqYnAsIHUxNiBjbF9pZCwgdTMyIGZpbHRlcnMpCiB7CkBAIC0yMjQ4LDEwICsyMjgxLDIxIEBACiAJdTggYWNjcF9hbGxfdWNhc3QgPSAwLCBhY2NwX2FsbF9iY2FzdCA9IDAsIGFjY3BfYWxsX21jYXN0ID0gMDsKIAl1OCB1bm1hdGNoZWRfdW5pY2FzdCA9IDA7CiAKKwlpZiAoZmlsdGVycyAmIEJOWDJYX0FDQ0VQVF9VTk1BVENIRURfVUNBU1QpCisJCXVubWF0Y2hlZF91bmljYXN0ID0gMTsKKwogCWlmIChmaWx0ZXJzICYgQk5YMlhfUFJPTUlTQ1VPVVNfTU9ERSkgewogCQkvKiBwcm9taXNjaW91cyAtIGFjY2VwdCBhbGwsIGRyb3Agbm9uZSAqLwogCQlkcm9wX2FsbF91Y2FzdCA9IGRyb3BfYWxsX2JjYXN0ID0gZHJvcF9hbGxfbWNhc3QgPSAwOwogCQlhY2NwX2FsbF91Y2FzdCA9IGFjY3BfYWxsX2JjYXN0ID0gYWNjcF9hbGxfbWNhc3QgPSAxOworCQlpZiAoSVNfTUZfU0koYnApKSB7CisJCQkvKgorCQkJICogU0kgbW9kZSBkZWZpbmVzIHRvIGFjY2VwdCBpbiBwcm9taXNjdW9zIG1vZGUKKwkJCSAqIG9ubHkgdW5tYXRjaGVkIHBhY2tldHMKKwkJCSAqLworCQkJdW5tYXRjaGVkX3VuaWNhc3QgPSAxOworCQkJYWNjcF9hbGxfdWNhc3QgPSAwOworCQl9CiAJfQogCWlmIChmaWx0ZXJzICYgQk5YMlhfQUNDRVBUX1VOSUNBU1QpIHsKIAkJLyogYWNjZXB0IG1hdGNoZWQgdWNhc3QgKi8KQEAgLTIyNjAsNiArMjMwNCwxMSBAQAogCWlmIChmaWx0ZXJzICYgQk5YMlhfQUNDRVBUX01VTFRJQ0FTVCkgewogCQkvKiBhY2NlcHQgbWF0Y2hlZCBtY2FzdCAqLwogCQlkcm9wX2FsbF9tY2FzdCA9IDA7CisJCWlmIChJU19NRl9TSShicCkpCisJCQkvKiBzaW5jZSBtY2FzdCBhZGRyZXNzZXMgd29uJ3QgYXJyaXZlIHdpdGggb3ZsYW4sCisJCQkgKiBmdyBuZWVkcyB0byBhY2NlcHQgYWxsIG9mIHRoZW0gaW4KKwkJCSAqIHN3aXRjaC1pbmRlcGVuZGVudCBtb2RlICovCisJCQlhY2NwX2FsbF9tY2FzdCA9IDE7CiAJfQogCWlmIChmaWx0ZXJzICYgQk5YMlhfQUNDRVBUX0FMTF9VTklDQVNUKSB7CiAJCS8qIGFjY2VwdCBhbGwgbWNhc3QgKi8KQEAgLTIzNzIsNyArMjQyMSw3IEBACiAJLyogY2FsY3VsYXRlIHF1ZXVlIGZsYWdzICovCiAJZmxhZ3MgfD0gUVVFVUVfRkxHX0NBQ0hFX0FMSUdOOwogCWZsYWdzIHw9IFFVRVVFX0ZMR19IQzsKLQlmbGFncyB8PSBJU19NRihicCkgPyBRVUVVRV9GTEdfT1YgOiAwOworCWZsYWdzIHw9IElTX01GX1NEKGJwKSA/IFFVRVVFX0ZMR19PViA6IDA7CiAKIAlmbGFncyB8PSBRVUVVRV9GTEdfVkxBTjsKIAlEUChORVRJRl9NU0dfSUZVUCwgInZsYW4gcmVtb3ZhbCBlbmFibGVkXG4iKTsKQEAgLTIzODAsNyArMjQyOSw4IEBACiAJaWYgKCFmcC0+ZGlzYWJsZV90cGEpCiAJCWZsYWdzIHw9IFFVRVVFX0ZMR19UUEE7CiAKLQlmbGFncyB8PSBRVUVVRV9GTEdfU1RBVFM7CisJZmxhZ3MgPSBzdGF0X2NvdW50ZXJfdmFsaWQoYnAsIGZwKSA/CisJCQkoZmxhZ3MgfCBRVUVVRV9GTEdfU1RBVFMpIDogKGZsYWdzICYgflFVRVVFX0ZMR19TVEFUUyk7CiAKIAlyZXR1cm4gZmxhZ3M7CiB9CkBAIC0yNDQwLDcgKzI0OTAsMTAgQEAKIAlyeHFfaW5pdC0+Y2FjaGVfbGluZV9sb2cgPSBCTlgyWF9SWF9BTElHTl9TSElGVDsKIAlyeHFfaW5pdC0+Zndfc2JfaWQgPSBmcC0+Zndfc2JfaWQ7CiAKLQlyeHFfaW5pdC0+c2JfY3FfaW5kZXggPSBVX1NCX0VUSF9SWF9DUV9JTkRFWDsKKwlpZiAoSVNfRkNPRV9GUChmcCkpCisJCXJ4cV9pbml0LT5zYl9jcV9pbmRleCA9IEhDX1NQX0lOREVYX0VUSF9GQ09FX1JYX0NRX0NPTlM7CisJZWxzZQorCQlyeHFfaW5pdC0+c2JfY3FfaW5kZXggPSBVX1NCX0VUSF9SWF9DUV9JTkRFWDsKIAogCXJ4cV9pbml0LT5jaWQgPSBIV19DSUQoYnAsIGZwLT5jaWQpOwogCkBAIC0yNDYwLDYgKzI1MTMsMTIgQEAKIAl0eHFfaW5pdC0+c2JfY3FfaW5kZXggPSBDX1NCX0VUSF9UWF9DUV9JTkRFWDsKIAl0eHFfaW5pdC0+dHJhZmZpY190eXBlID0gTExGQ19UUkFGRklDX1RZUEVfTlc7CiAJdHhxX2luaXQtPmZ3X3NiX2lkID0gZnAtPmZ3X3NiX2lkOworCisJaWYgKElTX0ZDT0VfRlAoZnApKSB7CisJCXR4cV9pbml0LT5zYl9jcV9pbmRleCA9IEhDX1NQX0lOREVYX0VUSF9GQ09FX1RYX0NRX0NPTlM7CisJCXR4cV9pbml0LT50cmFmZmljX3R5cGUgPSBMTEZDX1RSQUZGSUNfVFlQRV9GQ09FOworCX0KKwogCXR4cV9pbml0LT5oY19yYXRlID0gYnAtPnR4X3RpY2tzID8gKDEwMDAwMDAgLyBicC0+dHhfdGlja3MpIDogMDsKIH0KIApAQCAtMjU3Myw2ICsyNjMyLDI2IEBACiAJICovCiB9CiAKKy8qIGNhbGxlZCBkdWUgdG8gTUNQIGV2ZW50IChvbiBwbWYpOgorICoJcmVyZWFkIG5ldyBiYW5kd2lkdGggY29uZmlndXJhdGlvbgorICoJY29uZmlndXJlIEZXCisgKglub3RpZnkgb3RoZXJzIGZ1bmN0aW9uIGFib3V0IHRoZSBjaGFuZ2UKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGJueDJ4X2NvbmZpZ19tZl9idyhzdHJ1Y3QgYm54MnggKmJwKQoreworCWlmIChicC0+bGlua192YXJzLmxpbmtfdXApIHsKKwkJYm54MnhfY21uZ19mbnNfaW5pdChicCwgdHJ1ZSwgQ01OR19GTlNfTUlOTUFYKTsKKwkJYm54MnhfbGlua19zeW5jX25vdGlmeShicCk7CisJfQorCXN0b3JtX21lbXNldF9jbW5nKGJwLCAmYnAtPmNtbmcsIEJQX1BPUlQoYnApKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGJueDJ4X3NldF9tZl9idyhzdHJ1Y3QgYm54MnggKmJwKQoreworCWJueDJ4X2NvbmZpZ19tZl9idyhicCk7CisJYm54MnhfZndfY29tbWFuZChicCwgRFJWX01TR19DT0RFX1NFVF9NRl9CV19BQ0ssIDApOworfQorCiBzdGF0aWMgdm9pZCBibngyeF9kY2NfZXZlbnQoc3RydWN0IGJueDJ4ICpicCwgdTMyIGRjY19ldmVudCkKIHsKIAlEUChCTlgyWF9NU0dfTUNQLCAiZGNjX2V2ZW50IDB4JXhcbiIsIGRjY19ldmVudCk7CkBAIC0yNTk4LDEwICsyNjc3LDcgQEAKIAkJZGNjX2V2ZW50ICY9IH5EUlZfU1RBVFVTX0RDQ19ESVNBQkxFX0VOQUJMRV9QRjsKIAl9CiAJaWYgKGRjY19ldmVudCAmIERSVl9TVEFUVVNfRENDX0JBTkRXSURUSF9BTExPQ0FUSU9OKSB7Ci0KLQkJYm54MnhfY21uZ19mbnNfaW5pdChicCwgdHJ1ZSwgQ01OR19GTlNfTUlOTUFYKTsKLQkJYm54MnhfbGlua19zeW5jX25vdGlmeShicCk7Ci0JCXN0b3JtX21lbXNldF9jbW5nKGJwLCAmYnAtPmNtbmcsIEJQX1BPUlQoYnApKTsKKwkJYm54MnhfY29uZmlnX21mX2J3KGJwKTsKIAkJZGNjX2V2ZW50ICY9IH5EUlZfU1RBVFVTX0RDQ19CQU5EV0lEVEhfQUxMT0NBVElPTjsKIAl9CiAKQEAgLTMwMjIsMTAgKzMwOTgsMjAgQEAKIAkJCWlmICh2YWwgJiBEUlZfU1RBVFVTX0RDQ19FVkVOVF9NQVNLKQogCQkJCWJueDJ4X2RjY19ldmVudChicCwKIAkJCQkJICAgICh2YWwgJiBEUlZfU1RBVFVTX0RDQ19FVkVOVF9NQVNLKSk7CisKKwkJCWlmICh2YWwgJiBEUlZfU1RBVFVTX1NFVF9NRl9CVykKKwkJCQlibngyeF9zZXRfbWZfYncoYnApOworCiAJCQlibngyeF9fbGlua19zdGF0dXNfdXBkYXRlKGJwKTsKIAkJCWlmICgoYnAtPnBvcnQucG1mID09IDApICYmICh2YWwgJiBEUlZfU1RBVFVTX1BNRikpCiAJCQkJYm54MnhfcG1mX3VwZGF0ZShicCk7CiAKKwkJCWlmIChicC0+cG9ydC5wbWYgJiYKKwkJCSAgICAodmFsICYgRFJWX1NUQVRVU19EQ0JYX05FR09USUFUSU9OX1JFU1VMVFMpICYmCisJCQkJYnAtPmRjYnhfZW5hYmxlZCA+IDApCisJCQkJLyogc3RhcnQgZGNieCBzdGF0ZSBtYWNoaW5lICovCisJCQkJYm54MnhfZGNieF9zZXRfcGFyYW1zKGJwLAorCQkJCQlCTlgyWF9EQ0JYX1NUQVRFX05FR19SRUNFSVZFRCk7CiAJCX0gZWxzZSBpZiAoYXR0biAmIEJOWDJYX01DX0FTU0VSVF9CSVRTKSB7CiAKIAkJCUJOWDJYX0VSUigiTUMgYXNzZXJ0IVxuIik7CkBAIC0zNjM3LDExICszNzIzLDIzIEBACiAjaWZkZWYgQkNNX0NOSUMKIAkJCWlmICghYm54MnhfY25pY19oYW5kbGVfY2ZjX2RlbChicCwgY2lkLCBlbGVtKSkKIAkJCQlnb3RvIG5leHRfc3BxZTsKKwkJCWlmIChjaWQgPT0gQk5YMlhfRkNPRV9FVEhfQ0lEKQorCQkJCWJueDJ4X2Zjb2UoYnAsIHN0YXRlKSA9IEJOWDJYX0ZQX1NUQVRFX0NMT1NFRDsKKwkJCWVsc2UKICNlbmRpZgotCQkJYm54MnhfZnAoYnAsIGNpZCwgc3RhdGUpID0KKwkJCQlibngyeF9mcChicCwgY2lkLCBzdGF0ZSkgPQogCQkJCQkJQk5YMlhfRlBfU1RBVEVfQ0xPU0VEOwogCiAJCQlnb3RvIG5leHRfc3BxZTsKKworCQljYXNlIEVWRU5UX1JJTkdfT1BDT0RFX1NUT1BfVFJBRkZJQzoKKwkJCURQKE5FVElGX01TR19JRlVQLCAiZ290IFNUT1AgVFJBRkZJQ1xuIik7CisJCQlibngyeF9kY2J4X3NldF9wYXJhbXMoYnAsIEJOWDJYX0RDQlhfU1RBVEVfVFhfUEFVU0VEKTsKKwkJCWdvdG8gbmV4dF9zcHFlOworCQljYXNlIEVWRU5UX1JJTkdfT1BDT0RFX1NUQVJUX1RSQUZGSUM6CisJCQlEUChORVRJRl9NU0dfSUZVUCwgImdvdCBTVEFSVCBUUkFGRklDXG4iKTsKKwkJCWJueDJ4X2RjYnhfc2V0X3BhcmFtcyhicCwgQk5YMlhfRENCWF9TVEFURV9UWF9SRUxFQVNFRCk7CisJCQlnb3RvIG5leHRfc3BxZTsKIAkJfQogCiAJCXN3aXRjaCAob3Bjb2RlIHwgYnAtPnN0YXRlKSB7CkBAIC0zNzE0LDcgKzM4MTIsMTMgQEAKIAogCS8qIFNQIGV2ZW50czogU1RBVF9RVUVSWSBhbmQgb3RoZXJzICovCiAJaWYgKHN0YXR1cyAmIEJOWDJYX0RFRl9TQl9JRFgpIHsKKyNpZmRlZiBCQ01fQ05JQworCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gYm54MnhfZmNvZV9mcChicCk7CiAKKwkJaWYgKCghTk9fRkNPRShicCkpICYmCisJCQkoYm54MnhfaGFzX3J4X3dvcmsoZnApIHx8IGJueDJ4X2hhc190eF93b3JrKGZwKSkpCisJCQluYXBpX3NjaGVkdWxlKCZibngyeF9mY29lKGJwLCBuYXBpKSk7CisjZW5kaWYKIAkJLyogSGFuZGxlIEVRIGNvbXBsZXRpb25zICovCiAJCWJueDJ4X2VxX2ludChicCk7CiAKQEAgLTQwOTcsNyArNDIwMSw3IEBACiB7CiAJaW50IGk7CiAKLQlmb3JfZWFjaF9xdWV1ZShicCwgaSkKKwlmb3JfZWFjaF9ldGhfcXVldWUoYnAsIGkpCiAJCWJueDJ4X3VwZGF0ZV9jb2FsZXNjZV9zYihicCwgYnAtPmZwW2ldLmZ3X3NiX2lkLAogCQkJCQkgYnAtPnJ4X3RpY2tzLCBicC0+dHhfdGlja3MpOwogfQpAQCAtNDE0NSwxMyArNDI0OSwxNiBAQAogCWZvciAoaSA9IDA7IGkgPCBUU1RPUk1fSU5ESVJFQ1RJT05fVEFCTEVfU0laRTsgaSsrKQogCQlSRUdfV1I4KGJwLCBCQVJfVFNUUk9STV9JTlRNRU0gKwogCQkJVFNUT1JNX0lORElSRUNUSU9OX1RBQkxFX09GRlNFVChmdW5jKSArIGksCi0JCQlicC0+ZnAtPmNsX2lkICsgKGkgJSBicC0+bnVtX3F1ZXVlcykpOworCQkJYnAtPmZwLT5jbF9pZCArIChpICUgKGJwLT5udW1fcXVldWVzIC0KKwkJCQlOT05FX0VUSF9DT05URVhUX1VTRSkpKTsKIH0KIAogdm9pZCBibngyeF9zZXRfc3Rvcm1fcnhfbW9kZShzdHJ1Y3QgYm54MnggKmJwKQogewogCWludCBtb2RlID0gYnAtPnJ4X21vZGU7CisJaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKIAl1MTYgY2xfaWQ7CisJdTMyIGRlZl9xX2ZpbHRlcnMgPSAwOwogCiAJLyogQWxsIGJ1dCBtYW5hZ2VtZW50IHVuaWNhc3QgcGFja2V0cyBzaG91bGQgcGFzcyB0byB0aGUgaG9zdCBhcyB3ZWxsICovCiAJdTMyIGxsaF9tYXNrID0KQEAgLTQxNjIsMzAgKzQyNjksNDIgQEAKIAogCXN3aXRjaCAobW9kZSkgewogCWNhc2UgQk5YMlhfUlhfTU9ERV9OT05FOiAvKiBubyBSeCAqLwotCQljbF9pZCA9IEJQX0xfSUQoYnApOwotCQlibngyeF9yeHFfc2V0X21hY19maWx0ZXJzKGJwLCBjbF9pZCwgQk5YMlhfQUNDRVBUX05PTkUpOworCQlkZWZfcV9maWx0ZXJzID0gQk5YMlhfQUNDRVBUX05PTkU7CisjaWZkZWYgQkNNX0NOSUMKKwkJaWYgKCFOT19GQ09FKGJwKSkgeworCQkJY2xfaWQgPSBibngyeF9mY29lKGJwLCBjbF9pZCk7CisJCQlibngyeF9yeHFfc2V0X21hY19maWx0ZXJzKGJwLCBjbF9pZCwgQk5YMlhfQUNDRVBUX05PTkUpOworCQl9CisjZW5kaWYKIAkJYnJlYWs7CiAKIAljYXNlIEJOWDJYX1JYX01PREVfTk9STUFMOgotCQljbF9pZCA9IEJQX0xfSUQoYnApOwotCQlibngyeF9yeHFfc2V0X21hY19maWx0ZXJzKGJwLCBjbF9pZCwKLQkJCUJOWDJYX0FDQ0VQVF9VTklDQVNUIHwKLQkJCUJOWDJYX0FDQ0VQVF9CUk9BRENBU1QgfAotCQkJQk5YMlhfQUNDRVBUX01VTFRJQ0FTVCk7CisJCWRlZl9xX2ZpbHRlcnMgfD0gQk5YMlhfQUNDRVBUX1VOSUNBU1QgfCBCTlgyWF9BQ0NFUFRfQlJPQURDQVNUIHwKKwkJCQlCTlgyWF9BQ0NFUFRfTVVMVElDQVNUOworI2lmZGVmIEJDTV9DTklDCisJCWNsX2lkID0gYm54MnhfZmNvZShicCwgY2xfaWQpOworCQlibngyeF9yeHFfc2V0X21hY19maWx0ZXJzKGJwLCBjbF9pZCwgQk5YMlhfQUNDRVBUX1VOSUNBU1QgfAorCQkJCQkgIEJOWDJYX0FDQ0VQVF9NVUxUSUNBU1QpOworI2VuZGlmCiAJCWJyZWFrOwogCiAJY2FzZSBCTlgyWF9SWF9NT0RFX0FMTE1VTFRJOgotCQljbF9pZCA9IEJQX0xfSUQoYnApOwotCQlibngyeF9yeHFfc2V0X21hY19maWx0ZXJzKGJwLCBjbF9pZCwKLQkJCUJOWDJYX0FDQ0VQVF9VTklDQVNUIHwKLQkJCUJOWDJYX0FDQ0VQVF9CUk9BRENBU1QgfAotCQkJQk5YMlhfQUNDRVBUX0FMTF9NVUxUSUNBU1QpOworCQlkZWZfcV9maWx0ZXJzIHw9IEJOWDJYX0FDQ0VQVF9VTklDQVNUIHwgQk5YMlhfQUNDRVBUX0JST0FEQ0FTVCB8CisJCQkJQk5YMlhfQUNDRVBUX0FMTF9NVUxUSUNBU1Q7CisjaWZkZWYgQkNNX0NOSUMKKwkJY2xfaWQgPSBibngyeF9mY29lKGJwLCBjbF9pZCk7CisJCWJueDJ4X3J4cV9zZXRfbWFjX2ZpbHRlcnMoYnAsIGNsX2lkLCBCTlgyWF9BQ0NFUFRfVU5JQ0FTVCB8CisJCQkJCSAgQk5YMlhfQUNDRVBUX01VTFRJQ0FTVCk7CisjZW5kaWYKIAkJYnJlYWs7CiAKIAljYXNlIEJOWDJYX1JYX01PREVfUFJPTUlTQzoKLQkJY2xfaWQgPSBCUF9MX0lEKGJwKTsKLQkJYm54MnhfcnhxX3NldF9tYWNfZmlsdGVycyhicCwgY2xfaWQsIEJOWDJYX1BST01JU0NVT1VTX01PREUpOwotCisJCWRlZl9xX2ZpbHRlcnMgfD0gQk5YMlhfUFJPTUlTQ1VPVVNfTU9ERTsKKyNpZmRlZiBCQ01fQ05JQworCQljbF9pZCA9IGJueDJ4X2Zjb2UoYnAsIGNsX2lkKTsKKwkJYm54MnhfcnhxX3NldF9tYWNfZmlsdGVycyhicCwgY2xfaWQsIEJOWDJYX0FDQ0VQVF9VTklDQVNUIHwKKwkJCQkJICBCTlgyWF9BQ0NFUFRfTVVMVElDQVNUKTsKKyNlbmRpZgogCQkvKiBwYXNzIG1hbmFnZW1lbnQgdW5pY2FzdCBwYWNrZXRzIGFzIHdlbGwgKi8KIAkJbGxoX21hc2sgfD0gTklHX0xMSDBfQlJCMV9EUlZfTUFTS19SRUdfTExIMF9CUkIxX0RSVl9NQVNLX1VOQ1NUOwogCQlicmVhazsKQEAgLTQxOTUsMjAgKzQzMTQsMjQgQEAKIAkJYnJlYWs7CiAJfQogCisJY2xfaWQgPSBCUF9MX0lEKGJwKTsKKwlibngyeF9yeHFfc2V0X21hY19maWx0ZXJzKGJwLCBjbF9pZCwgZGVmX3FfZmlsdGVycyk7CisKIAlSRUdfV1IoYnAsCi0JICAgICAgIEJQX1BPUlQoYnApID8gTklHX1JFR19MTEgxX0JSQjFfRFJWX01BU0sgOgotCQkJICAgICBOSUdfUkVHX0xMSDBfQlJCMV9EUlZfTUFTSywKLQkgICAgICAgbGxoX21hc2spOworCSAgICAgICAocG9ydCA/IE5JR19SRUdfTExIMV9CUkIxX0RSVl9NQVNLIDoKKwkJICAgICAgIE5JR19SRUdfTExIMF9CUkIxX0RSVl9NQVNLKSwgbGxoX21hc2spOwogCiAJRFAoTkVUSUZfTVNHX0lGVVAsICJyeCBtb2RlICVkXG4iCiAJCSJkcm9wX3VjYXN0IDB4JXhcbmRyb3BfbWNhc3QgMHgleFxuZHJvcF9iY2FzdCAweCV4XG4iCi0JCSJhY2NwX3VjYXN0IDB4JXhcbmFjY3BfbWNhc3QgMHgleFxuYWNjcF9iY2FzdCAweCV4XG4iLCBtb2RlLAorCQkiYWNjcF91Y2FzdCAweCV4XG5hY2NwX21jYXN0IDB4JXhcbmFjY3BfYmNhc3QgMHgleFxuIgorCQkidW5tYXRjaGVkX3VjYXN0IDB4JXhcbiIsIG1vZGUsCiAJCWJwLT5tYWNfZmlsdGVycy51Y2FzdF9kcm9wX2FsbCwKIAkJYnAtPm1hY19maWx0ZXJzLm1jYXN0X2Ryb3BfYWxsLAogCQlicC0+bWFjX2ZpbHRlcnMuYmNhc3RfZHJvcF9hbGwsCiAJCWJwLT5tYWNfZmlsdGVycy51Y2FzdF9hY2NlcHRfYWxsLAogCQlicC0+bWFjX2ZpbHRlcnMubWNhc3RfYWNjZXB0X2FsbCwKLQkJYnAtPm1hY19maWx0ZXJzLmJjYXN0X2FjY2VwdF9hbGwKKwkJYnAtPm1hY19maWx0ZXJzLmJjYXN0X2FjY2VwdF9hbGwsCisJCWJwLT5tYWNfZmlsdGVycy51bm1hdGNoZWRfdW5pY2FzdAogCSk7CiAKIAlzdG9ybV9tZW1zZXRfbWFjX2ZpbHRlcnMoYnAsICZicC0+bWFjX2ZpbHRlcnMsIEJQX0ZVTkMoYnApKTsKQEAgLTQyMzIsNiArNDM1NSwxNSBAQAogCQkJYnAtPm1mX21vZGUpOwogCX0KIAorCWlmIChJU19NRl9TSShicCkpCisJCS8qCisJCSAqIEluIHN3aXRjaCBpbmRlcGVuZGVudCBtb2RlLCB0aGUgVFNUT1JNIG5lZWRzIHRvIGFjY2VwdAorCQkgKiBwYWNrZXRzIHRoYXQgZmFpbGVkIGNsYXNzaWZpY2F0aW9uLCBzaW5jZSBhcHByb3hpbWF0ZSBtYXRjaAorCQkgKiBtYWMgYWRkcmVzc2VzIGFyZW4ndCB3cml0dGVuIHRvIE5JRyBMTEgKKwkJICovCisJCVJFR19XUjgoYnAsIEJBUl9UU1RST1JNX0lOVE1FTSArCisJCQkgICAgVFNUT1JNX0FDQ0VQVF9DTEFTU0lGWV9GQUlMRURfT0ZGU0VULCAyKTsKKwogCS8qIFplcm8gdGhpcyBtYW51YWxseSBhcyBpdHMgaW5pdGlhbGl6YXRpb24gaXMKIAkgICBjdXJyZW50bHkgbWlzc2luZyBpbiB0aGUgaW5pdFRvb2wgKi8KIAlmb3IgKGkgPSAwOyBpIDwgKFVTVE9STV9BR0dfREFUQV9TSVpFID4+IDIpOyBpKyspCkBAIC00MjQ3LDYgKzQzNzksNyBAQAogc3RhdGljIHZvaWQgYm54MnhfaW5pdF9pbnRlcm5hbF9wb3J0KHN0cnVjdCBibngyeCAqYnApCiB7CiAJLyogcG9ydCAqLworCWJueDJ4X2RjYl9pbml0X2ludG1lbV9wZmMoYnApOwogfQogCiBzdGF0aWMgdm9pZCBibngyeF9pbml0X2ludGVybmFsKHN0cnVjdCBibngyeCAqYnAsIHUzMiBsb2FkX2NvZGUpCkBAIC00MzA4LDkgKzQ0NDEsMTEgQEAKIHsKIAlpbnQgaTsKIAotCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKQorCWZvcl9lYWNoX2V0aF9xdWV1ZShicCwgaSkKIAkJYm54MnhfaW5pdF9mcF9zYihicCwgaSk7CiAjaWZkZWYgQkNNX0NOSUMKKwlpZiAoIU5PX0ZDT0UoYnApKQorCQlibngyeF9pbml0X2Zjb2VfZnAoYnApOwogCiAJYm54MnhfaW5pdF9zYihicCwgYnAtPmNuaWNfc2JfbWFwcGluZywKIAkJICAgICAgQk5YMlhfVkZfSURfSU5WQUxJRCwgZmFsc2UsCkBAIC01MDQ4LDEyICs1MTgzLDEyIEBACiAJUkVHX1dSKGJwLCBQUlNfUkVHX05JQ19NT0RFLCAxKTsKICNlbmRpZgogCWlmICghQ0hJUF9JU19FMShicCkpCi0JCVJFR19XUihicCwgUFJTX1JFR19FMUhPVl9NT0RFLCBJU19NRihicCkpOworCQlSRUdfV1IoYnAsIFBSU19SRUdfRTFIT1ZfTU9ERSwgSVNfTUZfU0QoYnApKTsKIAogCWlmIChDSElQX0lTX0UyKGJwKSkgewogCQkvKiBCaXQtbWFwIGluZGljYXRpbmcgd2hpY2ggTDIgaGRycyBtYXkgYXBwZWFyIGFmdGVyIHRoZQogCQkgICBiYXNpYyBFdGhlcm5ldCBoZWFkZXIgKi8KLQkJaW50IGhhc19vdmxhbiA9IElTX01GKGJwKTsKKwkJaW50IGhhc19vdmxhbiA9IElTX01GX1NEKGJwKTsKIAkJUkVHX1dSKGJwLCBQUlNfUkVHX0hEUlNfQUZURVJfQkFTSUMsIChoYXNfb3ZsYW4gPyA3IDogNikpOwogCQlSRUdfV1IoYnAsIFBSU19SRUdfTVVTVF9IQVZFX0hEUlMsIChoYXNfb3ZsYW4gPyAxIDogMCkpOwogCX0KQEAgLTUwODcsNyArNTIyMiw3IEBACiAJYm54MnhfaW5pdF9ibG9jayhicCwgUEJGX0JMT0NLLCBDT01NT05fU1RBR0UpOwogCiAJaWYgKENISVBfSVNfRTIoYnApKSB7Ci0JCWludCBoYXNfb3ZsYW4gPSBJU19NRihicCk7CisJCWludCBoYXNfb3ZsYW4gPSBJU19NRl9TRChicCk7CiAJCVJFR19XUihicCwgUEJGX1JFR19IRFJTX0FGVEVSX0JBU0lDLCAoaGFzX292bGFuID8gNyA6IDYpKTsKIAkJUkVHX1dSKGJwLCBQQkZfUkVHX01VU1RfSEFWRV9IRFJTLCAoaGFzX292bGFuID8gMSA6IDApKTsKIAl9CkBAIC01MTY0LDEyICs1Mjk5LDEyIEBACiAJYm54MnhfaW5pdF9ibG9jayhicCwgTklHX0JMT0NLLCBDT01NT05fU1RBR0UpOwogCWlmICghQ0hJUF9JU19FMShicCkpIHsKIAkJUkVHX1dSKGJwLCBOSUdfUkVHX0xMSF9NRl9NT0RFLCBJU19NRihicCkpOwotCQlSRUdfV1IoYnAsIE5JR19SRUdfTExIX0UxSE9WX01PREUsIElTX01GKGJwKSk7CisJCVJFR19XUihicCwgTklHX1JFR19MTEhfRTFIT1ZfTU9ERSwgSVNfTUZfU0QoYnApKTsKIAl9CiAJaWYgKENISVBfSVNfRTIoYnApKSB7CiAJCS8qIEJpdC1tYXAgaW5kaWNhdGluZyB3aGljaCBMMiBoZHJzIG1heSBhcHBlYXIgYWZ0ZXIgdGhlCiAJCSAgIGJhc2ljIEV0aGVybmV0IGhlYWRlciAqLwotCQlSRUdfV1IoYnAsIE5JR19SRUdfUDBfSERSU19BRlRFUl9CQVNJQywgKElTX01GKGJwKSA/IDcgOiA2KSk7CisJCVJFR19XUihicCwgTklHX1JFR19QMF9IRFJTX0FGVEVSX0JBU0lDLCAoSVNfTUZfU0QoYnApID8gNyA6IDYpKTsKIAl9CiAKIAlpZiAoQ0hJUF9SRVZfSVNfU0xPVyhicCkpCkBAIC01MzcwLDggKzU1MDUsMTAgQEAKIAkgKiAgLSBTRiBtb2RlOiBiaXRzIDMtNyBhcmUgbWFza2VkLiBvbmx5IGJpdHMgMC0yIGFyZSBpbiB1c2UKIAkgKiAgLSBNRiBtb2RlOiBiaXQgMyBpcyBtYXNrZWQuIGJpdHMgMC0yIGFyZSBpbiB1c2UgYXMgaW4gU0YKIAkgKiAgICAgICAgICAgICBiaXRzIDQtNyBhcmUgdXNlZCBmb3IgInBlciB2biBncm91cCBhdHRlbnRpb24iICovCi0JUkVHX1dSKGJwLCBNSVNDX1JFR19BRVVfTUFTS19BVFROX0ZVTkNfMCArIHBvcnQqNCwKLQkgICAgICAgKElTX01GKGJwKSA/IDB4RjcgOiAweDcpKTsKKwl2YWwgPSBJU19NRihicCkgPyAweEY3IDogMHg3OworCS8qIEVuYWJsZSBEQ0JYIGF0dGVudGlvbiBmb3IgYWxsIGJ1dCBFMSAqLworCXZhbCB8PSBDSElQX0lTX0UxKGJwKSA/IDAgOiAweDEwOworCVJFR19XUihicCwgTUlTQ19SRUdfQUVVX01BU0tfQVRUTl9GVU5DXzAgKyBwb3J0KjQsIHZhbCk7CiAKIAlibngyeF9pbml0X2Jsb2NrKGJwLCBQWFBDU19CTE9DSywgaW5pdF9zdGFnZSk7CiAJYm54MnhfaW5pdF9ibG9jayhicCwgRU1BQzBfQkxPQ0ssIGluaXRfc3RhZ2UpOwpAQCAtNTM4Niw3ICs1NTIzLDcgQEAKIAlpZiAoIUNISVBfSVNfRTEoYnApKSB7CiAJCS8qIDB4MiBkaXNhYmxlIG1mX292LCAweDEgZW5hYmxlICovCiAJCVJFR19XUihicCwgTklHX1JFR19MTEgwX0JSQjFfRFJWX01BU0tfTUYgKyBwb3J0KjQsCi0JCSAgICAgICAoSVNfTUYoYnApID8gMHgxIDogMHgyKSk7CisJCSAgICAgICAoSVNfTUZfU0QoYnApID8gMHgxIDogMHgyKSk7CiAKIAkJaWYgKENISVBfSVNfRTIoYnApKSB7CiAJCQl2YWwgPSAwOwpAQCAtNTgxNiw2ICs1OTUzLDE1IEBACiAJLyogZmFzdHBhdGggKi8KIAkvKiBDb21tb24gKi8KIAlmb3JfZWFjaF9xdWV1ZShicCwgaSkgeworI2lmZGVmIEJDTV9DTklDCisJCS8qIEZDb0UgY2xpZW50IHVzZXMgZGVmYXVsdCBzdGF0dXMgYmxvY2sgKi8KKwkJaWYgKElTX0ZDT0VfSURYKGkpKSB7CisJCQl1bmlvbiBob3N0X2hjX3N0YXR1c19ibG9jayAqc2IgPQorCQkJCSZibngyeF9mcChicCwgaSwgc3RhdHVzX2Jsayk7CisJCQltZW1zZXQoc2IsIDAsIHNpemVvZih1bmlvbiBob3N0X2hjX3N0YXR1c19ibG9jaykpOworCQkJYm54MnhfZnAoYnAsIGksIHN0YXR1c19ibGtfbWFwcGluZykgPSAwOworCQl9IGVsc2UgeworI2VuZGlmCiAJCS8qIHN0YXR1cyBibG9ja3MgKi8KIAkJaWYgKENISVBfSVNfRTIoYnApKQogCQkJQk5YMlhfUENJX0ZSRUUoYm54MnhfZnAoYnAsIGksIHN0YXR1c19ibGsuZTJfc2IpLApAQCAtNTgyNSw5ICs1OTcxLDEyIEBACiAJCQlCTlgyWF9QQ0lfRlJFRShibngyeF9mcChicCwgaSwgc3RhdHVzX2Jsay5lMXhfc2IpLAogCQkJCSAgICAgICBibngyeF9mcChicCwgaSwgc3RhdHVzX2Jsa19tYXBwaW5nKSwKIAkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBob3N0X2hjX3N0YXR1c19ibG9ja19lMXgpKTsKKyNpZmRlZiBCQ01fQ05JQworCQl9CisjZW5kaWYKIAl9CiAJLyogUnggKi8KLQlmb3JfZWFjaF9xdWV1ZShicCwgaSkgeworCWZvcl9lYWNoX3J4X3F1ZXVlKGJwLCBpKSB7CiAKIAkJLyogZmFzdHBhdGggcnggcmluZ3M6IHJ4X2J1ZiByeF9kZXNjIHJ4X2NvbXAgKi8KIAkJQk5YMlhfRlJFRShibngyeF9mcChicCwgaSwgcnhfYnVmX3JpbmcpKTsKQEAgLTU4NDcsNyArNTk5Niw3IEBACiAJCQkgICAgICAgQkNNX1BBR0VfU0laRSAqIE5VTV9SWF9TR0VfUEFHRVMpOwogCX0KIAkvKiBUeCAqLwotCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7CisJZm9yX2VhY2hfdHhfcXVldWUoYnAsIGkpIHsKIAogCQkvKiBmYXN0cGF0aCB0eCByaW5nczogdHhfYnVmIHR4X2Rlc2MgKi8KIAkJQk5YMlhfRlJFRShibngyeF9mcChicCwgaSwgdHhfYnVmX3JpbmcpKTsKQEAgLTU5MzEsMTUgKzYwODAsMjAgQEAKIAkJdW5pb24gaG9zdF9oY19zdGF0dXNfYmxvY2sgKnNiID0gJmJueDJ4X2ZwKGJwLCBpLCBzdGF0dXNfYmxrKTsKIAkJYm54MnhfZnAoYnAsIGksIGJwKSA9IGJwOwogCQkvKiBzdGF0dXMgYmxvY2tzICovCi0JCWlmIChDSElQX0lTX0UyKGJwKSkKLQkJCUJOWDJYX1BDSV9BTExPQyhzYi0+ZTJfc2IsCi0JCQkJJmJueDJ4X2ZwKGJwLCBpLCBzdGF0dXNfYmxrX21hcHBpbmcpLAotCQkJCXNpemVvZihzdHJ1Y3QgaG9zdF9oY19zdGF0dXNfYmxvY2tfZTIpKTsKLQkJZWxzZQotCQkJQk5YMlhfUENJX0FMTE9DKHNiLT5lMXhfc2IsCi0JCQkJJmJueDJ4X2ZwKGJwLCBpLCBzdGF0dXNfYmxrX21hcHBpbmcpLAotCQkJCXNpemVvZihzdHJ1Y3QgaG9zdF9oY19zdGF0dXNfYmxvY2tfZTF4KSk7Ci0KKyNpZmRlZiBCQ01fQ05JQworCQlpZiAoIUlTX0ZDT0VfSURYKGkpKSB7CisjZW5kaWYKKwkJCWlmIChDSElQX0lTX0UyKGJwKSkKKwkJCQlCTlgyWF9QQ0lfQUxMT0Moc2ItPmUyX3NiLAorCQkJCSAgICAmYm54MnhfZnAoYnAsIGksIHN0YXR1c19ibGtfbWFwcGluZyksCisJCQkJICAgIHNpemVvZihzdHJ1Y3QgaG9zdF9oY19zdGF0dXNfYmxvY2tfZTIpKTsKKwkJCWVsc2UKKwkJCQlCTlgyWF9QQ0lfQUxMT0Moc2ItPmUxeF9zYiwKKwkJCQkgICAgJmJueDJ4X2ZwKGJwLCBpLCBzdGF0dXNfYmxrX21hcHBpbmcpLAorCQkJCSAgICBzaXplb2Yoc3RydWN0IGhvc3RfaGNfc3RhdHVzX2Jsb2NrX2UxeCkpOworI2lmZGVmIEJDTV9DTklDCisJCX0KKyNlbmRpZgogCQlzZXRfc2Jfc2hvcnRjdXRzKGJwLCBpKTsKIAl9CiAJLyogUnggKi8KQEAgLTYwNTUsNyArNjIwOSw3IEBACiAgKiBAcGFyYW0gY2FtX29mZnNldCBvZmZzZXQgaW4gYSBDQU0gdG8gdXNlCiAgKiBAcGFyYW0gaXNfYmNhc3QgaXMgdGhlIHNldCBNQUMgYSBicm9hZGNhc3QgYWRkcmVzcyAoZm9yIEUxIG9ubHkpCiAgKi8KLXN0YXRpYyB2b2lkIGJueDJ4X3NldF9tYWNfYWRkcl9nZW4oc3RydWN0IGJueDJ4ICpicCwgaW50IHNldCwgdTggKm1hYywKK3N0YXRpYyB2b2lkIGJueDJ4X3NldF9tYWNfYWRkcl9nZW4oc3RydWN0IGJueDJ4ICpicCwgaW50IHNldCwgY29uc3QgdTggKm1hYywKIAkJCQkgICB1MzIgY2xfYml0X3ZlYywgdTggY2FtX29mZnNldCwKIAkJCQkgICB1OCBpc19iY2FzdCkKIHsKQEAgLTYxNzAsNiArNjMyNCw3MCBAQAogCQlyZXR1cm4gQlBfVk4oYnApICogMzIgICsgcmVsX29mZnNldDsKIH0KIAorLyoqCisgKiAgTExIIENBTSBsaW5lIGFsbG9jYXRpb25zOiBjdXJyZW50bHkgb25seSBpU0NTSSBhbmQgRVRIIG1hY3MgYXJlCisgKiAgcmVsZXZhbnQuIEluIGFkZGl0aW9uLCBjdXJyZW50IGltcGxlbWVudGF0aW9uIGlzIHR1bmVkIGZvciBhCisgKiAgc2luZ2xlIEVUSCBNQUMuCisgKgorICogIFdoZW4gbXVsdGlwbGUgdW5pY2FzdCBFVEggTUFDcyBQRiBjb25maWd1cmF0aW9uIGluIHN3aXRjaAorICogIGluZGVwZW5kZW50IG1vZGUgaXMgcmVxdWlyZWQgKE5ldFEsIG11bHRpcGxlIG5ldGRldiBNQUNzLAorICogIGV0Yy4pLCBjb25zaWRlciBiZXR0ZXIgdXRpbGlzYXRpb24gb2YgMTYgcGVyIGZ1bmN0aW9uIE1BQworICogIGVudHJpZXMgaW4gdGhlIExMSCBtZW1vcnkuCisgKi8KK2VudW0geworCUxMSF9DQU1fSVNDU0lfRVRIX0xJTkUgPSAwLAorCUxMSF9DQU1fRVRIX0xJTkUsCisJTExIX0NBTV9NQVhfUEZfTElORSA9IE5JR19SRUdfTExIMV9GVU5DX01FTV9TSVpFCit9OworCitzdGF0aWMgdm9pZCBibngyeF9zZXRfbWFjX2luX25pZyhzdHJ1Y3QgYm54MnggKmJwLAorCQkJICBpbnQgc2V0LAorCQkJICB1bnNpZ25lZCBjaGFyICpkZXZfYWRkciwKKwkJCSAgaW50IGluZGV4KQoreworCXUzMiB3Yl9kYXRhWzJdOworCXUzMiBtZW1fb2Zmc2V0LCBlbmFfb2Zmc2V0LCBtZW1faW5kZXg7CisJLyoqCisJICogaW5kZXhlcyBtYXBwaW5nOgorCSAqIDAuLjcgLSBnb2VzIHRvIE1FTQorCSAqIDguLjE1IC0gZ29lcyB0byBNRU0yCisJICovCisKKwlpZiAoIUlTX01GX1NJKGJwKSB8fCBpbmRleCA+IExMSF9DQU1fTUFYX1BGX0xJTkUpCisJCXJldHVybjsKKworCS8qIGNhbGN1bGF0ZSBtZW1vcnkgc3RhcnQgb2Zmc2V0IGFjY29yZGluZyB0byB0aGUgbWFwcGluZworCSAqIGFuZCBpbmRleCBpbiB0aGUgbWVtb3J5ICovCisJaWYgKGluZGV4IDwgTklHX0xMSF9GVU5DX01FTV9NQVhfT0ZGU0VUKSB7CisJCW1lbV9vZmZzZXQgPSBCUF9QT1JUKGJwKSA/IE5JR19SRUdfTExIMV9GVU5DX01FTSA6CisJCQkJCSAgIE5JR19SRUdfTExIMF9GVU5DX01FTTsKKwkJZW5hX29mZnNldCA9IEJQX1BPUlQoYnApID8gTklHX1JFR19MTEgxX0ZVTkNfTUVNX0VOQUJMRSA6CisJCQkJCSAgIE5JR19SRUdfTExIMF9GVU5DX01FTV9FTkFCTEU7CisJCW1lbV9pbmRleCA9IGluZGV4OworCX0gZWxzZSB7CisJCW1lbV9vZmZzZXQgPSBCUF9QT1JUKGJwKSA/IE5JR19SRUdfUDFfTExIX0ZVTkNfTUVNMiA6CisJCQkJCSAgIE5JR19SRUdfUDBfTExIX0ZVTkNfTUVNMjsKKwkJZW5hX29mZnNldCA9IEJQX1BPUlQoYnApID8gTklHX1JFR19QMV9MTEhfRlVOQ19NRU0yX0VOQUJMRSA6CisJCQkJCSAgIE5JR19SRUdfUDBfTExIX0ZVTkNfTUVNMl9FTkFCTEU7CisJCW1lbV9pbmRleCA9IGluZGV4IC0gTklHX0xMSF9GVU5DX01FTV9NQVhfT0ZGU0VUOworCX0KKworCWlmIChzZXQpIHsKKwkJLyogTExIX0ZVTkNfTUVNIGlzIGEgdTY0IFdCIHJlZ2lzdGVyICovCisJCW1lbV9vZmZzZXQgKz0gOCptZW1faW5kZXg7CisKKwkJd2JfZGF0YVswXSA9ICgoZGV2X2FkZHJbMl0gPDwgMjQpIHwgKGRldl9hZGRyWzNdIDw8IDE2KSB8CisJCQkgICAgICAoZGV2X2FkZHJbNF0gPDwgIDgpIHwgIGRldl9hZGRyWzVdKTsKKwkJd2JfZGF0YVsxXSA9ICgoZGV2X2FkZHJbMF0gPDwgIDgpIHwgIGRldl9hZGRyWzFdKTsKKworCQlSRUdfV1JfRE1BRShicCwgbWVtX29mZnNldCwgd2JfZGF0YSwgMik7CisJfQorCisJLyogZW5hYmxlL2Rpc2FibGUgdGhlIGVudHJ5ICovCisJUkVHX1dSKGJwLCBlbmFfb2Zmc2V0ICsgNCptZW1faW5kZXgsIHNldCk7CisKK30KKwogdm9pZCBibngyeF9zZXRfZXRoX21hYyhzdHJ1Y3QgYm54MnggKmJwLCBpbnQgc2V0KQogewogCXU4IGNhbV9vZmZzZXQgPSAoQ0hJUF9JU19FMShicCkgPyAoQlBfUE9SVChicCkgPyAzMiA6IDApIDoKQEAgLTYxNzksOSArNjM5NywxMyBAQAogCWJueDJ4X3NldF9tYWNfYWRkcl9nZW4oYnAsIHNldCwgYnAtPmRldi0+ZGV2X2FkZHIsCiAJCQkgICAgICAgKDEgPDwgYnAtPmZwLT5jbF9pZCksIGNhbV9vZmZzZXQgLCAwKTsKIAorCWJueDJ4X3NldF9tYWNfaW5fbmlnKGJwLCBzZXQsIGJwLT5kZXYtPmRldl9hZGRyLCBMTEhfQ0FNX0VUSF9MSU5FKTsKKwogCWlmIChDSElQX0lTX0UxKGJwKSkgewogCQkvKiBicm9hZGNhc3QgTUFDICovCi0JCXU4IGJjYXN0W0VUSF9BTEVOXSA9IHsgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiB9OworCQlzdGF0aWMgY29uc3QgdTggYmNhc3RbRVRIX0FMRU5dID0geworCQkJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZgorCQl9OwogCQlibngyeF9zZXRfbWFjX2FkZHJfZ2VuKGJwLCBzZXQsIGJjYXN0LCAwLCBjYW1fb2Zmc2V0ICsgMSwgMSk7CiAJfQogfQpAQCAtNjI4MywxMiArNjUwNSw1OSBAQAogewogCXU4IGNhbV9vZmZzZXQgPSAoQ0hJUF9JU19FMShicCkgPyAoKEJQX1BPUlQoYnApID8gMzIgOiAwKSArIDIpIDoKIAkJCSBibngyeF9lMWhfY2FtX29mZnNldChicCwgQ0FNX0lTQ1NJX0VUSF9MSU5FKSk7Ci0JdTMyIGlzY3NpX2wyX2NsX2lkID0gQk5YMlhfSVNDU0lfRVRIX0NMX0lEOworCXUzMiBpc2NzaV9sMl9jbF9pZCA9IEJOWDJYX0lTQ1NJX0VUSF9DTF9JRCArCisJCUJQX0UxSFZOKGJwKSAqIE5PTkVfRVRIX0NPTlRFWFRfVVNFOwogCXUzMiBjbF9iaXRfdmVjID0gKDEgPDwgaXNjc2lfbDJfY2xfaWQpOwogCiAJLyogU2VuZCBhIFNFVF9NQUMgcmFtcm9kICovCiAJYm54Mnhfc2V0X21hY19hZGRyX2dlbihicCwgc2V0LCBicC0+aXNjc2lfbWFjLCBjbF9iaXRfdmVjLAogCQkJICAgICAgIGNhbV9vZmZzZXQsIDApOworCisJYm54Mnhfc2V0X21hY19pbl9uaWcoYnAsIHNldCwgYnAtPmlzY3NpX21hYywgTExIX0NBTV9JU0NTSV9FVEhfTElORSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBTZXQgRkNvRSBMMiBNQUMocykgYXQgdGhlIG5leHQgZW50aWVzIGluIHRoZSBDQU0gYWZ0ZXIgdGhlCisgKiBFVEggTUFDKHMpLiBUaGlzIGZ1bmN0aW9uIHdpbGwgd2FpdCB1bnRpbCB0aGUgcmFtZG9yZAorICogY29tcGxldGlvbiByZXR1cm5zLgorICoKKyAqIEBwYXJhbSBicCBkcml2ZXIgaGFuZGxlCisgKiBAcGFyYW0gc2V0IHNldCBvciBjbGVhciB0aGUgQ0FNIGVudHJ5CisgKgorICogQHJldHVybiAwIGlmIGN1c3Nlc3MsIC1FTk9ERVYgaWYgcmFtcm9kIGRvZXNuJ3QgcmV0dXJuLgorICovCitpbnQgYm54Mnhfc2V0X2ZpcF9ldGhfbWFjX2FkZHIoc3RydWN0IGJueDJ4ICpicCwgaW50IHNldCkKK3sKKwl1MzIgY2xfYml0X3ZlYyA9ICgxIDw8IGJueDJ4X2Zjb2UoYnAsIGNsX2lkKSk7CisJLyoqCisJICogQ0FNIGFsbG9jYXRpb24gZm9yIEUxSAorCSAqIGV0aCB1bmljYXN0czogYnkgZnVuYyBudW1iZXIKKwkgKiBpc2NzaTogYnkgZnVuYyBudW1iZXIKKwkgKiBmaXAgdW5pY2FzdDogYnkgZnVuYyBudW1iZXIKKwkgKiBmaXAgbXVsdGljYXN0OiBieSBmdW5jIG51bWJlcgorCSAqLworCWJueDJ4X3NldF9tYWNfYWRkcl9nZW4oYnAsIHNldCwgYnAtPmZpcF9tYWMsCisJCWNsX2JpdF92ZWMsIGJueDJ4X2UxaF9jYW1fb2Zmc2V0KGJwLCBDQU1fRklQX0VUSF9MSU5FKSwgMCk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGJueDJ4X3NldF9hbGxfZW5vZGVfbWFjcyhzdHJ1Y3QgYm54MnggKmJwLCBpbnQgc2V0KQoreworCXUzMiBjbF9iaXRfdmVjID0gKDEgPDwgYm54MnhfZmNvZShicCwgY2xfaWQpKTsKKworCS8qKgorCSAqIENBTSBhbGxvY2F0aW9uIGZvciBFMUgKKwkgKiBldGggdW5pY2FzdHM6IGJ5IGZ1bmMgbnVtYmVyCisJICogaXNjc2k6IGJ5IGZ1bmMgbnVtYmVyCisJICogZmlwIHVuaWNhc3Q6IGJ5IGZ1bmMgbnVtYmVyCisJICogZmlwIG11bHRpY2FzdDogYnkgZnVuYyBudW1iZXIKKwkgKi8KKwlibngyeF9zZXRfbWFjX2FkZHJfZ2VuKGJwLCBzZXQsIEFMTF9FTk9ERV9NQUNTLAljbF9iaXRfdmVjLAorCQlibngyeF9lMWhfY2FtX29mZnNldChicCwgQ0FNX0ZJUF9NQ0FTVF9MSU5FKSwgMCk7CisKIAlyZXR1cm4gMDsKIH0KICNlbmRpZgpAQCAtNjMwNiw2ICs2NTc1LDggQEAKIAlkYXRhLT5nZW5lcmFsLnN0YXRpc3RpY3NfY291bnRlcl9pZCA9IHBhcmFtcy0+cnhxX3BhcmFtcy5zdGF0X2lkOwogCWRhdGEtPmdlbmVyYWwuc3RhdGlzdGljc19lbl9mbGcgPQogCQkocGFyYW1zLT5yeHFfcGFyYW1zLmZsYWdzICYgUVVFVUVfRkxHX1NUQVRTKSA/IDEgOiAwOworCWRhdGEtPmdlbmVyYWwuaXNfZmNvZV9mbGcgPQorCQkocGFyYW1zLT5yYW1yb2RfcGFyYW1zLmZsYWdzICYgQ0xJRU5UX0lTX0ZDT0UpID8gMSA6IDA7CiAJZGF0YS0+Z2VuZXJhbC5hY3RpdmF0ZV9mbGcgPSBhY3RpdmF0ZTsKIAlkYXRhLT5nZW5lcmFsLnNwX2NsaWVudF9pZCA9IHBhcmFtcy0+cnhxX3BhcmFtcy5zcGNsX2lkOwogCkBAIC02Mzc0LDcgKzY2NDUsOSBAQAogCWRhdGEtPmZjLnNhZmNfZ3JvdXBfbnVtID0gcGFyYW1zLT50eHFfcGFyYW1zLmNvczsKIAlkYXRhLT5mYy5zYWZjX2dyb3VwX2VuX2ZsZyA9CiAJCShwYXJhbXMtPnR4cV9wYXJhbXMuZmxhZ3MgJiBRVUVVRV9GTEdfQ09TKSA/IDEgOiAwOwotCWRhdGEtPmZjLnRyYWZmaWNfdHlwZSA9IExMRkNfVFJBRkZJQ19UWVBFX05XOworCWRhdGEtPmZjLnRyYWZmaWNfdHlwZSA9CisJCShwYXJhbXMtPnJhbXJvZF9wYXJhbXMuZmxhZ3MgJiBDTElFTlRfSVNfRkNPRSkgPworCQlMTEZDX1RSQUZGSUNfVFlQRV9GQ09FIDogTExGQ19UUkFGRklDX1RZUEVfTlc7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBibngyeF9zZXRfY3R4X3ZhbGlkYXRpb24oc3RydWN0IGV0aF9jb250ZXh0ICpjeHQsIHUzMiBjaWQpCkBAIC02NDczLDcgKzY3NDYsNyBAQAogCQlibngyeF9lbmFibGVfbXNpKGJwKTsKIAkJLyogZmFsbGluZyB0aHJvdWdoLi4uICovCiAJY2FzZSBJTlRfTU9ERV9JTlR4OgotCQlicC0+bnVtX3F1ZXVlcyA9IDE7CisJCWJwLT5udW1fcXVldWVzID0gMSArIE5PTkVfRVRIX0NPTlRFWFRfVVNFOwogCQlEUChORVRJRl9NU0dfSUZVUCwgInNldCBudW1iZXIgb2YgcXVldWVzIHRvIDFcbiIpOwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtNjQ5Niw4ICs2NzY5LDggQEAKIAkJCQkJICAiZW5hYmxlIE1TSS1YICglZCksICIKIAkJCQkJICAic2V0IG51bWJlciBvZiBxdWV1ZXMgdG8gJWRcbiIsCiAJCQkJICAgYnAtPm51bV9xdWV1ZXMsCi0JCQkJICAgMSk7Ci0JCQlicC0+bnVtX3F1ZXVlcyA9IDE7CisJCQkJICAgMSArIE5PTkVfRVRIX0NPTlRFWFRfVVNFKTsKKwkJCWJwLT5udW1fcXVldWVzID0gMSArIE5PTkVfRVRIX0NPTlRFWFRfVVNFOwogCiAJCQlpZiAoIShicC0+ZmxhZ3MgJiBESVNBQkxFX01TSV9GTEFHKSkKIAkJCQlibngyeF9lbmFibGVfbXNpKGJwKTsKQEAgLTY2MTgsNyArNjg5MSw5IEBACiAJc3RydWN0IGJueDJ4X2NsaWVudF9pbml0X3BhcmFtcyBwYXJhbXMgPSB7IHswfSB9OwogCWludCByYzsKIAotCWJueDJ4X2Fja19zYihicCwgZnAtPmlndV9zYl9pZCwgVVNUT1JNX0lELCAwLAorCS8qIHJlc2V0IElHVSBzdGF0ZSBza2lwIEZDb0UgTDIgcXVldWUgKi8KKwlpZiAoIUlTX0ZDT0VfRlAoZnApKQorCQlibngyeF9hY2tfc2IoYnAsIGZwLT5pZ3Vfc2JfaWQsIFVTVE9STV9JRCwgMCwKIAkJCSAgICAgSUdVX0lOVF9FTkFCTEUsIDApOwogCiAJcGFyYW1zLnJhbXJvZF9wYXJhbXMucHN0YXRlID0gJmZwLT5zdGF0ZTsKQEAgLTY2MjYsNiArNjkwMSwxMiBAQAogCXBhcmFtcy5yYW1yb2RfcGFyYW1zLmluZGV4ID0gZnAtPmluZGV4OwogCXBhcmFtcy5yYW1yb2RfcGFyYW1zLmNpZCA9IGZwLT5jaWQ7CiAKKyNpZmRlZiBCQ01fQ05JQworCWlmIChJU19GQ09FX0ZQKGZwKSkKKwkJcGFyYW1zLnJhbXJvZF9wYXJhbXMuZmxhZ3MgfD0gQ0xJRU5UX0lTX0ZDT0U7CisKKyNlbmRpZgorCiAJaWYgKGlzX2xlYWRpbmcpCiAJCXBhcmFtcy5yYW1yb2RfcGFyYW1zLmZsYWdzIHw9IENMSUVOVF9JU19MRUFESU5HX1JTUzsKIApAQCAtNjcxMCw3ICs2OTkxLDcgQEAKIAlSRUdfV1I4KGJwLCBCQVJfVVNUUk9STV9JTlRNRU0gKyBVU1RPUk1fRlVOQ19FTl9PRkZTRVQoZnVuYyksIDApOwogCiAJLyogRlAgU0JzICovCi0JZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKKwlmb3JfZWFjaF9ldGhfcXVldWUoYnAsIGkpIHsKIAkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbaV07CiAJCVJFR19XUjgoYnAsCiAJCQlCQVJfQ1NUUk9STV9JTlRNRU0gKwpAQCAtNjgzMCw2ICs3MTExLDIwIEBACiAJfQogfQogCisjaWZkZWYgQkNNX0NOSUMKK3N0YXRpYyBpbmxpbmUgdm9pZCBibngyeF9kZWxfZmNvZV9ldGhfbWFjcyhzdHJ1Y3QgYm54MnggKmJwKQoreworCWlmIChicC0+ZmxhZ3MgJiBGQ09FX01BQ1NfU0VUKSB7CisJCWlmICghSVNfTUZfU0QoYnApKQorCQkJYm54Mnhfc2V0X2ZpcF9ldGhfbWFjX2FkZHIoYnAsIDApOworCisJCWJueDJ4X3NldF9hbGxfZW5vZGVfbWFjcyhicCwgMCk7CisKKwkJYnAtPmZsYWdzICY9IH5GQ09FX01BQ1NfU0VUOworCX0KK30KKyNlbmRpZgorCiB2b2lkIGJueDJ4X2NoaXBfY2xlYW51cChzdHJ1Y3QgYm54MnggKmJwLCBpbnQgdW5sb2FkX21vZGUpCiB7CiAJaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKQEAgLTY4MzcsNyArNzEzMiw3IEBACiAJaW50IGksIGNudCwgcmM7CiAKIAkvKiBXYWl0IHVudGlsIHR4IGZhc3RwYXRoIHRhc2tzIGNvbXBsZXRlICovCi0JZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKKwlmb3JfZWFjaF90eF9xdWV1ZShicCwgaSkgewogCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtpXTsKIAogCQljbnQgPSAxMDAwOwpAQCAtNjg3NywxMyArNzE3Miw3IEBACiAJfQogCiAjaWZkZWYgQkNNX0NOSUMKLQkvKiBDbGVhciBpU0NTSSBMMiBNQUMgKi8KLQltdXRleF9sb2NrKCZicC0+Y25pY19tdXRleCk7Ci0JaWYgKGJwLT5jbmljX2ZsYWdzICYgQk5YMlhfQ05JQ19GTEFHX01BQ19TRVQpIHsKLQkJYm54Mnhfc2V0X2lzY3NpX2V0aF9tYWNfYWRkcihicCwgMCk7Ci0JCWJwLT5jbmljX2ZsYWdzICY9IH5CTlgyWF9DTklDX0ZMQUdfTUFDX1NFVDsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZicC0+Y25pY19tdXRleCk7CisJYm54MnhfZGVsX2Zjb2VfZXRoX21hY3MoYnApOwogI2VuZGlmCiAKIAlpZiAodW5sb2FkX21vZGUgPT0gVU5MT0FEX05PUk1BTCkKQEAgLTc3MzYsNyArODAyNSw3IEBACiAJYnAtPmlndV9zYl9jbnQgPSAwOwogCWlmIChDSElQX0lOVF9NT0RFX0lTX0JDKGJwKSkgewogCQlicC0+aWd1X3NiX2NudCA9IG1pbl90KHU4LCBGUF9TQl9NQVhfRTF4LAotCQkJCSAgICAgICBicC0+bDJfY2lkX2NvdW50KTsKKwkJCQkgICAgICAgTlVNX0lHVV9TQl9SRVFVSVJFRChicC0+bDJfY2lkX2NvdW50KSk7CiAKIAkJYnAtPmlndV9iYXNlX3NiID0gKENISVBfTU9ERV9JU180X1BPUlQoYnApID8gcGZpZCA6IHZuKSAqCiAJCQlGUF9TQl9NQVhfRTF4OwpAQCAtNzc2Nyw3ICs4MDU2LDggQEAKIAkJCX0KIAkJfQogCX0KLQlicC0+aWd1X3NiX2NudCA9IG1pbl90KHU4LCBicC0+aWd1X3NiX2NudCwgYnAtPmwyX2NpZF9jb3VudCk7CisJYnAtPmlndV9zYl9jbnQgPSBtaW5fdCh1OCwgYnAtPmlndV9zYl9jbnQsCisJCQkJICAgTlVNX0lHVV9TQl9SRVFVSVJFRChicC0+bDJfY2lkX2NvdW50KSk7CiAJaWYgKGJwLT5pZ3Vfc2JfY250ID09IDApCiAJCUJOWDJYX0VSUigiQ0FNIGNvbmZpZ3VyYXRpb24gZXJyb3JcbiIpOwogfQpAQCAtODA3Niw5ICs4MzY2LDggQEAKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBibngyeF9nZXRfcG9ydF9od2luZm8oc3RydWN0IGJueDJ4ICpicCkKIHsKIAlpbnQgcG9ydCA9IEJQX1BPUlQoYnApOwotCXUzMiB2YWwsIHZhbDI7CiAJdTMyIGNvbmZpZzsKLQl1MzIgZXh0X3BoeV90eXBlLCBleHRfcGh5X2NvbmZpZzs7CisJdTMyIGV4dF9waHlfdHlwZSwgZXh0X3BoeV9jb25maWc7CiAKIAlicC0+bGlua19wYXJhbXMuYnAgPSBicDsKIAlicC0+bGlua19wYXJhbXMucG9ydCA9IHBvcnQ7CkBAIC04MTM1LDI1ICs4NDI0LDczIEBACiAJCSAoZXh0X3BoeV90eXBlICE9IFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX05PVF9DT05OKSkKIAkJYnAtPm1kaW8ucHJ0YWQgPQogCQkJWEdYU19FWFRfUEhZX0FERFIoZXh0X3BoeV9jb25maWcpOworfQogCi0JdmFsMiA9IFNITUVNX1JEKGJwLCBkZXZfaW5mby5wb3J0X2h3X2NvbmZpZ1twb3J0XS5tYWNfdXBwZXIpOwotCXZhbCA9IFNITUVNX1JEKGJwLCBkZXZfaW5mby5wb3J0X2h3X2NvbmZpZ1twb3J0XS5tYWNfbG93ZXIpOwotCWJueDJ4X3NldF9tYWNfYnVmKGJwLT5kZXYtPmRldl9hZGRyLCB2YWwsIHZhbDIpOworc3RhdGljIHZvaWQgX19kZXZpbml0IGJueDJ4X2dldF9tYWNfaHdpbmZvKHN0cnVjdCBibngyeCAqYnApCit7CisJdTMyIHZhbCwgdmFsMjsKKwlpbnQgZnVuYyA9IEJQX0FCU19GVU5DKGJwKTsKKwlpbnQgcG9ydCA9IEJQX1BPUlQoYnApOworCisJaWYgKEJQX05PTUNQKGJwKSkgeworCQlCTlgyWF9FUlJPUigid2FybmluZzogcmFuZG9tIE1BQyB3b3JrYXJvdW5kIGFjdGl2ZVxuIik7CisJCXJhbmRvbV9ldGhlcl9hZGRyKGJwLT5kZXYtPmRldl9hZGRyKTsKKwl9IGVsc2UgaWYgKElTX01GKGJwKSkgeworCQl2YWwyID0gTUZfQ0ZHX1JEKGJwLCBmdW5jX21mX2NvbmZpZ1tmdW5jXS5tYWNfdXBwZXIpOworCQl2YWwgPSBNRl9DRkdfUkQoYnAsIGZ1bmNfbWZfY29uZmlnW2Z1bmNdLm1hY19sb3dlcik7CisJCWlmICgodmFsMiAhPSBGVU5DX01GX0NGR19VUFBFUk1BQ19ERUZBVUxUKSAmJgorCQkgICAgKHZhbCAhPSBGVU5DX01GX0NGR19MT1dFUk1BQ19ERUZBVUxUKSkKKwkJCWJueDJ4X3NldF9tYWNfYnVmKGJwLT5kZXYtPmRldl9hZGRyLCB2YWwsIHZhbDIpOworCisjaWZkZWYgQkNNX0NOSUMKKwkJLyogaVNDU0kgTlBBUiBNQUMgKi8KKwkJaWYgKElTX01GX1NJKGJwKSkgeworCQkJdTMyIGNmZyA9IE1GX0NGR19SRChicCwgZnVuY19leHRfY29uZmlnW2Z1bmNdLmZ1bmNfY2ZnKTsKKwkJCWlmIChjZmcgJiBNQUNQX0ZVTkNfQ0ZHX0ZMQUdTX0lTQ1NJX09GRkxPQUQpIHsKKwkJCQl2YWwyID0gTUZfQ0ZHX1JEKGJwLCBmdW5jX2V4dF9jb25maWdbZnVuY10uCisJCQkJCQkgICAgIGlzY3NpX21hY19hZGRyX3VwcGVyKTsKKwkJCQl2YWwgPSBNRl9DRkdfUkQoYnAsIGZ1bmNfZXh0X2NvbmZpZ1tmdW5jXS4KKwkJCQkJCSAgICBpc2NzaV9tYWNfYWRkcl9sb3dlcik7CisJCQkJYm54Mnhfc2V0X21hY19idWYoYnAtPmlzY3NpX21hYywgdmFsLCB2YWwyKTsKKwkJCX0KKwkJfQorI2VuZGlmCisJfSBlbHNlIHsKKwkJLyogaW4gU0YgcmVhZCBNQUNzIGZyb20gcG9ydCBjb25maWd1cmF0aW9uICovCisJCXZhbDIgPSBTSE1FTV9SRChicCwgZGV2X2luZm8ucG9ydF9od19jb25maWdbcG9ydF0ubWFjX3VwcGVyKTsKKwkJdmFsID0gU0hNRU1fUkQoYnAsIGRldl9pbmZvLnBvcnRfaHdfY29uZmlnW3BvcnRdLm1hY19sb3dlcik7CisJCWJueDJ4X3NldF9tYWNfYnVmKGJwLT5kZXYtPmRldl9hZGRyLCB2YWwsIHZhbDIpOworCisjaWZkZWYgQkNNX0NOSUMKKwkJdmFsMiA9IFNITUVNX1JEKGJwLCBkZXZfaW5mby5wb3J0X2h3X2NvbmZpZ1twb3J0XS4KKwkJCQkgICAgaXNjc2lfbWFjX3VwcGVyKTsKKwkJdmFsID0gU0hNRU1fUkQoYnAsIGRldl9pbmZvLnBvcnRfaHdfY29uZmlnW3BvcnRdLgorCQkJCSAgIGlzY3NpX21hY19sb3dlcik7CisJCWJueDJ4X3NldF9tYWNfYnVmKGJwLT5pc2NzaV9tYWMsIHZhbCwgdmFsMik7CisjZW5kaWYKKwl9CisKIAltZW1jcHkoYnAtPmxpbmtfcGFyYW1zLm1hY19hZGRyLCBicC0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwogCW1lbWNweShicC0+ZGV2LT5wZXJtX2FkZHIsIGJwLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CiAKICNpZmRlZiBCQ01fQ05JQwotCXZhbDIgPSBTSE1FTV9SRChicCwgZGV2X2luZm8ucG9ydF9od19jb25maWdbcG9ydF0uaXNjc2lfbWFjX3VwcGVyKTsKLQl2YWwgPSBTSE1FTV9SRChicCwgZGV2X2luZm8ucG9ydF9od19jb25maWdbcG9ydF0uaXNjc2lfbWFjX2xvd2VyKTsKLQlibngyeF9zZXRfbWFjX2J1ZihicC0+aXNjc2lfbWFjLCB2YWwsIHZhbDIpOworCS8qIEluZm9ybSB0aGUgdXBwZXIgbGF5ZXJzIGFib3V0IEZDb0UgTUFDICovCisJaWYgKCFDSElQX0lTX0UxeChicCkpIHsKKwkJaWYgKElTX01GX1NEKGJwKSkKKwkJCW1lbWNweShicC0+ZmlwX21hYywgYnAtPmRldi0+ZGV2X2FkZHIsCisJCQkgICAgICAgc2l6ZW9mKGJwLT5maXBfbWFjKSk7CisJCWVsc2UKKwkJCW1lbWNweShicC0+ZmlwX21hYywgYnAtPmlzY3NpX21hYywKKwkJCSAgICAgICBzaXplb2YoYnAtPmZpcF9tYWMpKTsKKwl9CiAjZW5kaWYKIH0KIAogc3RhdGljIGludCBfX2RldmluaXQgYm54MnhfZ2V0X2h3aW5mbyhzdHJ1Y3QgYm54MnggKmJwKQogewotCWludCBmdW5jID0gQlBfQUJTX0ZVTkMoYnApOwotCWludCB2bjsKLQl1MzIgdmFsLCB2YWwyOworCWludCAvKmFicyovZnVuYyA9IEJQX0FCU19GVU5DKGJwKTsKKwlpbnQgdm4sIHBvcnQ7CisJdTMyIHZhbCA9IDA7CiAJaW50IHJjID0gMDsKIAogCWJueDJ4X2dldF9jb21tb25faHdpbmZvKGJwKTsKQEAgLTgxNjMsNyArODUwMCw4IEBACiAKIAkJYnAtPmlndV9kc2JfaWQgPSBERUZfU0JfSUdVX0lEOwogCQlicC0+aWd1X2Jhc2Vfc2IgPSAwOwotCQlicC0+aWd1X3NiX2NudCA9IG1pbl90KHU4LCBGUF9TQl9NQVhfRTF4LCBicC0+bDJfY2lkX2NvdW50KTsKKwkJYnAtPmlndV9zYl9jbnQgPSBtaW5fdCh1OCwgRlBfU0JfTUFYX0UxeCwKKwkJCQkgICAgICAgTlVNX0lHVV9TQl9SRVFVSVJFRChicC0+bDJfY2lkX2NvdW50KSk7CiAJfSBlbHNlIHsKIAkJYnAtPmNvbW1vbi5pbnRfYmxvY2sgPSBJTlRfQkxPQ0tfSUdVOwogCQl2YWwgPSBSRUdfUkQoYnAsIElHVV9SRUdfQkxPQ0tfQ09ORklHVVJBVElPTik7CkBAIC04MTg2LDQ0ICs4NTI0LDk5IEBACiAJYnAtPm1mX292ID0gMDsKIAlicC0+bWZfbW9kZSA9IDA7CiAJdm4gPSBCUF9FMUhWTihicCk7CisJcG9ydCA9IEJQX1BPUlQoYnApOworCiAJaWYgKCFDSElQX0lTX0UxKGJwKSAmJiAhQlBfTk9NQ1AoYnApKSB7CisJCURQKE5FVElGX01TR19QUk9CRSwKKwkJCSAgICAic2htZW0yYmFzZSAweCV4LCBzaXplICVkLCBtZmNmZyBvZmZzZXQgJWRcbiIsCisJCQkgICAgYnAtPmNvbW1vbi5zaG1lbTJfYmFzZSwgU0hNRU0yX1JEKGJwLCBzaXplKSwKKwkJCSAgICAodTMyKW9mZnNldG9mKHN0cnVjdCBzaG1lbTJfcmVnaW9uLCBtZl9jZmdfYWRkcikpOwogCQlpZiAoU0hNRU0yX0hBUyhicCwgbWZfY2ZnX2FkZHIpKQogCQkJYnAtPmNvbW1vbi5tZl9jZmdfYmFzZSA9IFNITUVNMl9SRChicCwgbWZfY2ZnX2FkZHIpOwogCQllbHNlCiAJCQlicC0+Y29tbW9uLm1mX2NmZ19iYXNlID0gYnAtPmNvbW1vbi5zaG1lbV9iYXNlICsKIAkJCQlvZmZzZXRvZihzdHJ1Y3Qgc2htZW1fcmVnaW9uLCBmdW5jX21iKSArCiAJCQkJRTFIX0ZVTkNfTUFYICogc2l6ZW9mKHN0cnVjdCBkcnZfZnVuY19tYik7Ci0JCWJwLT5tZl9jb25maWdbdm5dID0KLQkJCU1GX0NGR19SRChicCwgZnVuY19tZl9jb25maWdbZnVuY10uY29uZmlnKTsKKwkJLyoKKwkJICogZ2V0IG1mIGNvbmZpZ3VyYXRpb246CisJCSAqIDEuIGV4aXN0YW5jZSBvZiBNRiBjb25maWd1cmF0aW9uCisJCSAqIDIuIE1BQyBhZGRyZXNzIG11c3QgYmUgbGVnYWwgKGNoZWNrIG9ubHkgdXBwZXIgYnl0ZXMpCisJCSAqICAgIGZvciAgU3dpdGNoLUluZGVwZW5kZW50IG1vZGU7CisJCSAqICAgIE9WTEFOIG11c3QgYmUgbGVnYWwgZm9yIFN3aXRjaC1EZXBlbmRlbnQgbW9kZQorCQkgKiAzLiBTRl9NT0RFIGNvbmZpZ3VyZXMgc3BlY2lmaWMgTUYgbW9kZQorCQkgKi8KKwkJaWYgKGJwLT5jb21tb24ubWZfY2ZnX2Jhc2UgIT0gU0hNRU1fTUZfQ0ZHX0FERFJfTk9ORSkgeworCQkJLyogZ2V0IG1mIGNvbmZpZ3VyYXRpb24gKi8KKwkJCXZhbCA9IFNITUVNX1JEKGJwLAorCQkJCSAgICAgICBkZXZfaW5mby5zaGFyZWRfZmVhdHVyZV9jb25maWcuY29uZmlnKTsKKwkJCXZhbCAmPSBTSEFSRURfRkVBVF9DRkdfRk9SQ0VfU0ZfTU9ERV9NQVNLOwogCi0JCXZhbCA9IChNRl9DRkdfUkQoYnAsIGZ1bmNfbWZfY29uZmlnW0ZVTkNfMF0uZTFob3ZfdGFnKSAmCi0JCSAgICAgICBGVU5DX01GX0NGR19FMUhPVl9UQUdfTUFTSyk7Ci0JCWlmICh2YWwgIT0gRlVOQ19NRl9DRkdfRTFIT1ZfVEFHX0RFRkFVTFQpCi0JCQlicC0+bWZfbW9kZSA9IDE7CisJCQlzd2l0Y2ggKHZhbCkgeworCQkJY2FzZSBTSEFSRURfRkVBVF9DRkdfRk9SQ0VfU0ZfTU9ERV9TV0lUQ0hfSU5ERVBUOgorCQkJCXZhbCA9IE1GX0NGR19SRChicCwgZnVuY19tZl9jb25maWdbZnVuY10uCisJCQkJCQltYWNfdXBwZXIpOworCQkJCS8qIGNoZWNrIGZvciBsZWdhbCBtYWMgKHVwcGVyIGJ5dGVzKSovCisJCQkJaWYgKHZhbCAhPSAweGZmZmYpIHsKKwkJCQkJYnAtPm1mX21vZGUgPSBNVUxUSV9GVU5DVElPTl9TSTsKKwkJCQkJYnAtPm1mX2NvbmZpZ1t2bl0gPSBNRl9DRkdfUkQoYnAsCisJCQkJCQkgICBmdW5jX21mX2NvbmZpZ1tmdW5jXS5jb25maWcpOworCQkJCX0gZWxzZQorCQkJCQlEUChORVRJRl9NU0dfUFJPQkUsICJpbGxlZ2FsIE1BQyAiCisJCQkJCQkJICAgICJhZGRyZXNzIGZvciBTSVxuIik7CisJCQkJYnJlYWs7CisJCQljYXNlIFNIQVJFRF9GRUFUX0NGR19GT1JDRV9TRl9NT0RFX01GX0FMTE9XRUQ6CisJCQkJLyogZ2V0IE9WIGNvbmZpZ3VyYXRpb24gKi8KKwkJCQl2YWwgPSBNRl9DRkdfUkQoYnAsCisJCQkJCWZ1bmNfbWZfY29uZmlnW0ZVTkNfMF0uZTFob3ZfdGFnKTsKKwkJCQl2YWwgJj0gRlVOQ19NRl9DRkdfRTFIT1ZfVEFHX01BU0s7CisKKwkJCQlpZiAodmFsICE9IEZVTkNfTUZfQ0ZHX0UxSE9WX1RBR19ERUZBVUxUKSB7CisJCQkJCWJwLT5tZl9tb2RlID0gTVVMVElfRlVOQ1RJT05fU0Q7CisJCQkJCWJwLT5tZl9jb25maWdbdm5dID0gTUZfQ0ZHX1JEKGJwLAorCQkJCQkJZnVuY19tZl9jb25maWdbZnVuY10uY29uZmlnKTsKKwkJCQl9IGVsc2UKKwkJCQkJRFAoTkVUSUZfTVNHX1BST0JFLCAiaWxsZWdhbCBPViBmb3IgIgorCQkJCQkJCSAgICAiU0RcbiIpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQkvKiBVbmtub3duIGNvbmZpZ3VyYXRpb246IHJlc2V0IG1mX2NvbmZpZyAqLworCQkJCWJwLT5tZl9jb25maWdbdm5dID0gMDsKKwkJCQlEUChORVRJRl9NU0dfUFJPQkUsICJVbmtvd24gTUYgbW9kZSAweCV4XG4iLAorCQkJCSAgIHZhbCk7CisJCQl9CisJCX0KKwogCQlCTlgyWF9ERVZfSU5GTygiJXMgZnVuY3Rpb24gbW9kZVxuIiwKIAkJCSAgICAgICBJU19NRihicCkgPyAibXVsdGkiIDogInNpbmdsZSIpOwogCi0JCWlmIChJU19NRihicCkpIHsKLQkJCXZhbCA9IChNRl9DRkdfUkQoYnAsIGZ1bmNfbWZfY29uZmlnW2Z1bmNdLgotCQkJCQkJCQllMWhvdl90YWcpICYKLQkJCSAgICAgICBGVU5DX01GX0NGR19FMUhPVl9UQUdfTUFTSyk7CisJCXN3aXRjaCAoYnAtPm1mX21vZGUpIHsKKwkJY2FzZSBNVUxUSV9GVU5DVElPTl9TRDoKKwkJCXZhbCA9IE1GX0NGR19SRChicCwgZnVuY19tZl9jb25maWdbZnVuY10uZTFob3ZfdGFnKSAmCisJCQkgICAgICBGVU5DX01GX0NGR19FMUhPVl9UQUdfTUFTSzsKIAkJCWlmICh2YWwgIT0gRlVOQ19NRl9DRkdfRTFIT1ZfVEFHX0RFRkFVTFQpIHsKIAkJCQlicC0+bWZfb3YgPSB2YWw7Ci0JCQkJQk5YMlhfREVWX0lORk8oIk1GIE9WIGZvciBmdW5jICVkIGlzICVkICIKLQkJCQkJICAgICAgICIoMHglMDR4KVxuIiwKLQkJCQkJICAgICAgIGZ1bmMsIGJwLT5tZl9vdiwgYnAtPm1mX292KTsKKwkJCQlCTlgyWF9ERVZfSU5GTygiTUYgT1YgZm9yIGZ1bmMgJWQgaXMgJWQiCisJCQkJCSAgICAgICAiICgweCUwNHgpXG4iLCBmdW5jLAorCQkJCQkgICAgICAgYnAtPm1mX292LCBicC0+bWZfb3YpOwogCQkJfSBlbHNlIHsKLQkJCQlCTlgyWF9FUlJPUigiTm8gdmFsaWQgTUYgT1YgZm9yIGZ1bmMgJWQsIgotCQkJCQkgICAgIiAgYWJvcnRpbmdcbiIsIGZ1bmMpOworCQkJCUJOWDJYX0VSUigiTm8gdmFsaWQgTUYgT1YgZm9yIGZ1bmMgJWQsIgorCQkJCQkgICIgIGFib3J0aW5nXG4iLCBmdW5jKTsKIAkJCQlyYyA9IC1FUEVSTTsKIAkJCX0KLQkJfSBlbHNlIHsKLQkJCWlmIChCUF9WTihicCkpIHsKLQkJCQlCTlgyWF9FUlJPUigiVk4gJWQgaW4gc2luZ2xlIGZ1bmN0aW9uIG1vZGUsIgotCQkJCQkgICAgIiAgYWJvcnRpbmdcbiIsIEJQX0UxSFZOKGJwKSk7CisJCQlicmVhazsKKwkJY2FzZSBNVUxUSV9GVU5DVElPTl9TSToKKwkJCUJOWDJYX0RFVl9JTkZPKCJmdW5jICVkIGlzIGluIE1GICIKKwkJCQkgICAgICAgInN3aXRjaC1pbmRlcGVuZGVudCBtb2RlXG4iLCBmdW5jKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJaWYgKHZuKSB7CisJCQkJQk5YMlhfRVJSKCJWTiAlZCBpbiBzaW5nbGUgZnVuY3Rpb24gbW9kZSwiCisJCQkJCSAgIiAgYWJvcnRpbmdcbiIsIHZuKTsKIAkJCQlyYyA9IC1FUEVSTTsKIAkJCX0KKwkJCWJyZWFrOwogCQl9CisKIAl9CiAKIAkvKiBhZGp1c3QgaWd1X3NiX2NudCB0byBNRiBmb3IgRTF4ICovCkBAIC04MjQ4LDMyICs4NjQxLDggQEAKIAkJQk5YMlhfREVWX0lORk8oImZ3X3NlcSAweCUwOHhcbiIsIGJwLT5md19zZXEpOwogCX0KIAotCWlmIChJU19NRihicCkpIHsKLQkJdmFsMiA9IE1GX0NGR19SRChicCwgZnVuY19tZl9jb25maWdbZnVuY10ubWFjX3VwcGVyKTsKLQkJdmFsID0gTUZfQ0ZHX1JEKGJwLCAgZnVuY19tZl9jb25maWdbZnVuY10ubWFjX2xvd2VyKTsKLQkJaWYgKCh2YWwyICE9IEZVTkNfTUZfQ0ZHX1VQUEVSTUFDX0RFRkFVTFQpICYmCi0JCSAgICAodmFsICE9IEZVTkNfTUZfQ0ZHX0xPV0VSTUFDX0RFRkFVTFQpKSB7Ci0JCQlicC0+ZGV2LT5kZXZfYWRkclswXSA9ICh1OCkodmFsMiA+PiA4ICYgMHhmZik7Ci0JCQlicC0+ZGV2LT5kZXZfYWRkclsxXSA9ICh1OCkodmFsMiAmIDB4ZmYpOwotCQkJYnAtPmRldi0+ZGV2X2FkZHJbMl0gPSAodTgpKHZhbCA+PiAyNCAmIDB4ZmYpOwotCQkJYnAtPmRldi0+ZGV2X2FkZHJbM10gPSAodTgpKHZhbCA+PiAxNiAmIDB4ZmYpOwotCQkJYnAtPmRldi0+ZGV2X2FkZHJbNF0gPSAodTgpKHZhbCA+PiA4ICAmIDB4ZmYpOwotCQkJYnAtPmRldi0+ZGV2X2FkZHJbNV0gPSAodTgpKHZhbCAmIDB4ZmYpOwotCQkJbWVtY3B5KGJwLT5saW5rX3BhcmFtcy5tYWNfYWRkciwgYnAtPmRldi0+ZGV2X2FkZHIsCi0JCQkgICAgICAgRVRIX0FMRU4pOwotCQkJbWVtY3B5KGJwLT5kZXYtPnBlcm1fYWRkciwgYnAtPmRldi0+ZGV2X2FkZHIsCi0JCQkgICAgICAgRVRIX0FMRU4pOwotCQl9Ci0KLQkJcmV0dXJuIHJjOwotCX0KLQotCWlmIChCUF9OT01DUChicCkpIHsKLQkJLyogb25seSBzdXBwb3NlZCB0byBoYXBwZW4gb24gZW11bGF0aW9uL0ZQR0EgKi8KLQkJQk5YMlhfRVJST1IoIndhcm5pbmc6IHJhbmRvbSBNQUMgd29ya2Fyb3VuZCBhY3RpdmVcbiIpOwotCQlyYW5kb21fZXRoZXJfYWRkcihicC0+ZGV2LT5kZXZfYWRkcik7Ci0JCW1lbWNweShicC0+ZGV2LT5wZXJtX2FkZHIsIGJwLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7Ci0JfQorCS8qIEdldCBNQUMgYWRkcmVzc2VzICovCisJYm54MnhfZ2V0X21hY19od2luZm8oYnApOwogCiAJcmV0dXJuIHJjOwogfQpAQCAtODQyNyw2ICs4Nzk2LDkgQEAKIAlicC0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBicDsKIAlicC0+dGltZXIuZnVuY3Rpb24gPSBibngyeF90aW1lcjsKIAorCWJueDJ4X2RjYnhfc2V0X3N0YXRlKGJwLCB0cnVlLCBCTlgyWF9EQ0JYX0VOQUJMRURfT05fTkVHX09OKTsKKwlibngyeF9kY2J4X2luaXRfcGFyYW1zKGJwKTsKKwogCXJldHVybiByYzsKIH0KIApAQCAtODYyOSw2ICs5MDAxLDcgQEAKIAkubmRvX29wZW4JCT0gYm54Mnhfb3BlbiwKIAkubmRvX3N0b3AJCT0gYm54MnhfY2xvc2UsCiAJLm5kb19zdGFydF94bWl0CQk9IGJueDJ4X3N0YXJ0X3htaXQsCisJLm5kb19zZWxlY3RfcXVldWUJPSBibngyeF9zZWxlY3RfcXVldWUsCiAJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJPSBibngyeF9zZXRfcnhfbW9kZSwKIAkubmRvX3NldF9tYWNfYWRkcmVzcwk9IGJueDJ4X2NoYW5nZV9tYWNfYWRkciwKIAkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKQEAgLTg3NjEsNyArOTEzNCw3IEBACiAJZGV2LT5uZXRkZXZfb3BzID0gJmJueDJ4X25ldGRldl9vcHM7CiAJYm54Mnhfc2V0X2V0aHRvb2xfb3BzKGRldik7CiAJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1NHOwotCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19DU1VNOworCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9JUFY2X0NTVU07CiAJaWYgKGJwLT5mbGFncyAmIFVTSU5HX0RBQ19GTEFHKQogCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSElHSERNQTsKIAlkZXYtPmZlYXR1cmVzIHw9IChORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPX0VDTik7CkBAIC04NzY5LDEyICs5MTQyLDE2IEBACiAJZGV2LT5mZWF0dXJlcyB8PSAoTkVUSUZfRl9IV19WTEFOX1RYIHwgTkVUSUZfRl9IV19WTEFOX1JYKTsKIAogCWRldi0+dmxhbl9mZWF0dXJlcyB8PSBORVRJRl9GX1NHOwotCWRldi0+dmxhbl9mZWF0dXJlcyB8PSBORVRJRl9GX0hXX0NTVU07CisJZGV2LT52bGFuX2ZlYXR1cmVzIHw9IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfSVBWNl9DU1VNOwogCWlmIChicC0+ZmxhZ3MgJiBVU0lOR19EQUNfRkxBRykKIAkJZGV2LT52bGFuX2ZlYXR1cmVzIHw9IE5FVElGX0ZfSElHSERNQTsKIAlkZXYtPnZsYW5fZmVhdHVyZXMgfD0gKE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU09fRUNOKTsKIAlkZXYtPnZsYW5fZmVhdHVyZXMgfD0gTkVUSUZfRl9UU082OwogCisjaWZkZWYgQkNNX0RDQgorCWRldi0+ZGNibmxfb3BzID0gJmJueDJ4X2RjYm5sX29wczsKKyNlbmRpZgorCiAJLyogZ2V0X3BvcnRfaHdpbmZvKCkgd2lsbCBzZXQgcHJ0YWQgYW5kIG1tZHMgcHJvcGVybHkgKi8KIAlicC0+bWRpby5wcnRhZCA9IE1ESU9fUFJUQURfTk9ORTsKIAlicC0+bWRpby5tbWRzID0gMDsKQEAgLTkwNjcsNyArOTQ0NCw3IEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWNpZF9jb3VudCArPSBDTklDX0NPTlRFWFRfVVNFOworCWNpZF9jb3VudCArPSBOT05FX0VUSF9DT05URVhUX1VTRSArIENOSUNfQ09OVEVYVF9VU0U7CiAKIAkvKiBkZXYgemVyb2VkIGluIGluaXRfZXRoZXJkZXYgKi8KIAlkZXYgPSBhbGxvY19ldGhlcmRldl9tcShzaXplb2YoKmJwKSwgY2lkX2NvdW50KTsKQEAgLTkwOTYsMTEgKzk0NzMsMTIgQEAKIAkvKiBjYWxjIHFtX2NpZF9jb3VudCAqLwogCWJwLT5xbV9jaWRfY291bnQgPSBibngyeF9zZXRfcW1fY2lkX2NvdW50KGJwLCBjaWRfY291bnQpOwogCi0JcmMgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKLQlpZiAocmMpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2Fubm90IHJlZ2lzdGVyIG5ldCBkZXZpY2VcbiIpOwotCQlnb3RvIGluaXRfb25lX2V4aXQ7Ci0JfQorI2lmZGVmIEJDTV9DTklDCisJLyogZGlzYWJsZSBGQ09FIEwyIHF1ZXVlIGZvciBFMXgqLworCWlmIChDSElQX0lTX0UxeChicCkpCisJCWJwLT5mbGFncyB8PSBOT19GQ09FX0ZMQUc7CisKKyNlbmRpZgogCiAJLyogQ29uZmlndXJlIGludGVydXB0IG1vZGU6IHRyeSB0byBlbmFibGUgTVNJLVgvTVNJIGlmCiAJICogbmVlZGVkLCBzZXQgYnAtPm51bV9xdWV1ZXMgYXBwcm9wcmlhdGVseS4KQEAgLTkxMTAsNiArOTQ4OCwyMSBAQAogCS8qIEFkZCBhbGwgTkFQSSBvYmplY3RzICovCiAJYm54MnhfYWRkX2FsbF9uYXBpKGJwKTsKIAorCXJjID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CisJaWYgKHJjKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbm5vdCByZWdpc3RlciBuZXQgZGV2aWNlXG4iKTsKKwkJZ290byBpbml0X29uZV9leGl0OworCX0KKworI2lmZGVmIEJDTV9DTklDCisJaWYgKCFOT19GQ09FKGJwKSkgeworCQkvKiBBZGQgc3RvcmFnZSBNQUMgYWRkcmVzcyAqLworCQlydG5sX2xvY2soKTsKKwkJZGV2X2FkZHJfYWRkKGJwLT5kZXYsIGJwLT5maXBfbWFjLCBORVRERVZfSFdfQUREUl9UX1NBTik7CisJCXJ0bmxfdW5sb2NrKCk7CisJfQorI2VuZGlmCisKIAlibngyeF9nZXRfcGNpZV93aWR0aF9zcGVlZChicCwgJnBjaWVfd2lkdGgsICZwY2llX3NwZWVkKTsKIAogCW5ldGRldl9pbmZvKGRldiwgIiVzICglYyVkKSBQQ0ktRSB4JWQgJXMgZm91bmQgYXQgbWVtICVseCwiCkBAIC05MTUzLDYgKzk1NDYsMTUgQEAKIAl9CiAJYnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCisjaWZkZWYgQkNNX0NOSUMKKwkvKiBEZWxldGUgc3RvcmFnZSBNQUMgYWRkcmVzcyAqLworCWlmICghTk9fRkNPRShicCkpIHsKKwkJcnRubF9sb2NrKCk7CisJCWRldl9hZGRyX2RlbChicC0+ZGV2LCBicC0+ZmlwX21hYywgTkVUREVWX0hXX0FERFJfVF9TQU4pOworCQlydG5sX3VubG9jaygpOworCX0KKyNlbmRpZgorCiAJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAogCS8qIERlbGV0ZSBhbGwgTkFQSSBvYmplY3RzICovCkBAIC05MjAyLDcgKzk2MDQsNyBAQAogCS8qIEZyZWUgU0tCcywgU0dFcywgVFBBIHBvb2wgYW5kIGRyaXZlciBpbnRlcm5hbHMgKi8KIAlibngyeF9mcmVlX3NrYnMoYnApOwogCi0JZm9yX2VhY2hfcXVldWUoYnAsIGkpCisJZm9yX2VhY2hfcnhfcXVldWUoYnAsIGkpCiAJCWJueDJ4X2ZyZWVfcnhfc2dlX3JhbmdlKGJwLCBicC0+ZnAgKyBpLCBOVU1fUlhfU0dFKTsKIAogCWJueDJ4X2ZyZWVfbWVtKGJwKTsKQEAgLTk0MjksNyArOTgzMSw4IEBACiAJCQkJYnJlYWs7CiAJCQllbHNlCiAJCQkJYXRvbWljX2RlYygmYnAtPnNwcV9sZWZ0KTsKLQkJfSBlbHNlIGlmICh0eXBlID09IElTQ1NJX0NPTk5FQ1RJT05fVFlQRSkgeworCQl9IGVsc2UgaWYgKCh0eXBlID09IElTQ1NJX0NPTk5FQ1RJT05fVFlQRSkgfHwKKwkJCSAgICh0eXBlID09IEZDT0VfQ09OTkVDVElPTl9UWVBFKSkgewogCQkJaWYgKGJwLT5jbmljX3NwcV9wZW5kaW5nID49CiAJCQkgICAgYnAtPmNuaWNfZXRoX2Rldi5tYXhfa3dxZV9wZW5kaW5nKQogCQkJCWJyZWFrOwpAQCAtOTU3Niw2ICs5OTc5LDkgQEAKIAljYXNlIERSVl9DVExfU1RBUlRfTDJfQ01EOiB7CiAJCXUzMiBjbGkgPSBjdGwtPmRhdGEucmluZy5jbGllbnRfaWQ7CiAKKwkJLyogQ2xlYXIgRkNvRSBGSVAgYW5kIEFMTCBFTk9ERSBNQUNzIGFkZHJlc3NlcyBmaXJzdCAqLworCQlibngyeF9kZWxfZmNvZV9ldGhfbWFjcyhicCk7CisKIAkJLyogU2V0IGlTQ1NJIE1BQyBhZGRyZXNzICovCiAJCWJueDJ4X3NldF9pc2NzaV9ldGhfbWFjX2FkZHIoYnAsIDEpOwogCkBAIC05Njk3LDEwICsxMDEwMyw2IEBACiAJc3RydWN0IGNuaWNfZXRoX2RldiAqY3AgPSAmYnAtPmNuaWNfZXRoX2RldjsKIAogCW11dGV4X2xvY2soJmJwLT5jbmljX211dGV4KTsKLQlpZiAoYnAtPmNuaWNfZmxhZ3MgJiBCTlgyWF9DTklDX0ZMQUdfTUFDX1NFVCkgewotCQlicC0+Y25pY19mbGFncyAmPSB+Qk5YMlhfQ05JQ19GTEFHX01BQ19TRVQ7Ci0JCWJueDJ4X3NldF9pc2NzaV9ldGhfbWFjX2FkZHIoYnAsIDApOwotCX0KIAljcC0+ZHJ2X3N0YXRlID0gMDsKIAlyY3VfYXNzaWduX3BvaW50ZXIoYnAtPmNuaWNfb3BzLCBOVUxMKTsKIAltdXRleF91bmxvY2soJmJwLT5jbmljX211dGV4KTsKQEAgLTk3MzEsNyArMTAxMzMsOSBAQAogCWNwLT5kcnZfY3RsID0gYm54MnhfZHJ2X2N0bDsKIAljcC0+ZHJ2X3JlZ2lzdGVyX2NuaWMgPSBibngyeF9yZWdpc3Rlcl9jbmljOwogCWNwLT5kcnZfdW5yZWdpc3Rlcl9jbmljID0gYm54MnhfdW5yZWdpc3Rlcl9jbmljOwotCWNwLT5pc2NzaV9sMl9jbGllbnRfaWQgPSBCTlgyWF9JU0NTSV9FVEhfQ0xfSUQ7CisJY3AtPmZjb2VfaW5pdF9jaWQgPSBCTlgyWF9GQ09FX0VUSF9DSUQ7CisJY3AtPmlzY3NpX2wyX2NsaWVudF9pZCA9IEJOWDJYX0lTQ1NJX0VUSF9DTF9JRCArCisJCUJQX0UxSFZOKGJwKSAqIE5PTkVfRVRIX0NPTlRFWFRfVVNFOwogCWNwLT5pc2NzaV9sMl9jaWQgPSBCTlgyWF9JU0NTSV9FVEhfQ0lEOwogCiAJRFAoQk5YMlhfTVNHX1NQLCAicGFnZV9zaXplICVkLCB0Ymxfb2Zmc2V0ICVkLCB0YmxfbGluZXMgJWQsICIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X3JlZy5oIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfcmVnLmgKaW5kZXggMWNlZmU0OC4uYmZkODc1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MngvYm54MnhfcmVnLmgKKysrIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfcmVnLmgKQEAgLTE2MTUsNiArMTYxNSw4IEBACiAjZGVmaW5lIE5JR19MTEgwX0JSQjFfRFJWX01BU0tfUkVHX0xMSDBfQlJCMV9EUlZfTUFTS19OT19WTEFOCSAoMHgxPDw0KQogI2RlZmluZSBOSUdfTExIMF9CUkIxX0RSVl9NQVNLX1JFR19MTEgwX0JSQjFfRFJWX01BU0tfVU5DU1QJICgweDE8PDIpCiAjZGVmaW5lIE5JR19MTEgwX0JSQjFfRFJWX01BU0tfUkVHX0xMSDBfQlJCMV9EUlZfTUFTS19WTEFOCSAoMHgxPDwzKQorI2RlZmluZSBOSUdfTExIMF9YQ01fTUFTS19SRUdfTExIMF9YQ01fTUFTS19CQ04JCQkgKDB4MTw8MCkKKyNkZWZpbmUgTklHX0xMSDFfWENNX01BU0tfUkVHX0xMSDFfWENNX01BU0tfQkNOCQkJICgweDE8PDApCiAjZGVmaW5lIE5JR19NQVNLX0lOVEVSUlVQVF9QT1JUMF9SRUdfTUFTS19FTUFDMF9NSVNDX01JX0lOVAkgKDB4MTw8MCkKICNkZWZpbmUgTklHX01BU0tfSU5URVJSVVBUX1BPUlQwX1JFR19NQVNLX1NFUkRFUzBfTElOS19TVEFUVVMJICgweDE8PDkpCiAjZGVmaW5lIE5JR19NQVNLX0lOVEVSUlVQVF9QT1JUMF9SRUdfTUFTS19YR1hTMF9MSU5LMTBHIAkgKDB4MTw8MTUpCkBAIC0xNzQ0LDEyICsxNzQ2LDE2IEBACiAgICB+cHBwX2VuYWJsZS5wcHBfZW5hYmxlID0gMCBhbmQgcGF1c2VfZW5hYmxlLnBhdXNlX2VuYWJsZSA9MCBmb3IgdGhlIHNhbWUKICAgIHBvcnQgKi8KICNkZWZpbmUgTklHX1JFR19MTEZDX0VOQUJMRV8wCQkJCQkgMHgxNjIwOAorI2RlZmluZSBOSUdfUkVHX0xMRkNfRU5BQkxFXzEJCQkJCSAweDE2MjBjCiAvKiBbUlcgMTZdIGNsYXNzZXMgYXJlIGhpZ2gtcHJpb3JpdHkgZm9yIHBvcnQwICovCiAjZGVmaW5lIE5JR19SRUdfTExGQ19ISUdIX1BSSU9SSVRZX0NMQVNTRVNfMAkJCSAweDE2MDU4CisjZGVmaW5lIE5JR19SRUdfTExGQ19ISUdIX1BSSU9SSVRZX0NMQVNTRVNfMQkJCSAweDE2MDVjCiAvKiBbUlcgMTZdIGNsYXNzZXMgYXJlIGxvdy1wcmlvcml0eSBmb3IgcG9ydDAgKi8KICNkZWZpbmUgTklHX1JFR19MTEZDX0xPV19QUklPUklUWV9DTEFTU0VTXzAJCQkgMHgxNjA2MAorI2RlZmluZSBOSUdfUkVHX0xMRkNfTE9XX1BSSU9SSVRZX0NMQVNTRVNfMQkJCSAweDE2MDY0CiAvKiBbUlcgMV0gT3V0cHV0IGVuYWJsZSBvZiBtZXNzYWdlIHRvIExMRkMgQk1BQyBJRiBmb3IgcG9ydDAgKi8KICNkZWZpbmUgTklHX1JFR19MTEZDX09VVF9FTl8wCQkJCQkgMHgxNjBjOAorI2RlZmluZSBOSUdfUkVHX0xMRkNfT1VUX0VOXzEJCQkJCSAweDE2MGNjCiAjZGVmaW5lIE5JR19SRUdfTExIMF9BQ1BJX1BBVF8wX0NSQwkJCQkgMHgxMDE1YwogI2RlZmluZSBOSUdfUkVHX0xMSDBfQUNQSV9QQVRfNl9MRU4JCQkJIDB4MTAxNTQKICNkZWZpbmUgTklHX1JFR19MTEgwX0JSQjFfRFJWX01BU0sJCQkJIDB4MTAyNDQKQEAgLTE3NzQsNiArMTc4MCw4IEBACiAvKiBbUlcgOF0gZXZlbnQgaWQgZm9yIGxsaDAgKi8KICNkZWZpbmUgTklHX1JFR19MTEgwX0VWRU5UX0lECQkJCQkgMHgxMDA4NAogI2RlZmluZSBOSUdfUkVHX0xMSDBfRlVOQ19FTgkJCQkJIDB4MTYwZmMKKyNkZWZpbmUgTklHX1JFR19MTEgwX0ZVTkNfTUVNCQkJCQkgMHgxNjE4MAorI2RlZmluZSBOSUdfUkVHX0xMSDBfRlVOQ19NRU1fRU5BQkxFCQkJCSAweDE2MTQwCiAjZGVmaW5lIE5JR19SRUdfTExIMF9GVU5DX1ZMQU5fSUQJCQkJIDB4MTYxMDAKIC8qIFtSVyAxXSBEZXRlcm1pbmUgdGhlIElQIHZlcnNpb24gdG8gbG9vayBmb3IgaW4KICAgIH5uaWdfcmVnaXN0ZXJzX2xsaDBfZGVzdF9pcF8wLmxsaDBfZGVzdF9pcF8wLiAwIC0gSVB2NjsgMS1JUHY0ICovCkBAIC0xNzk3LDYgKzE4MDUsOSBAQAogI2RlZmluZSBOSUdfUkVHX0xMSDFfRVJST1JfTUFTSyAJCQkJIDB4MTAwOTAKIC8qIFtSVyA4XSBldmVudCBpZCBmb3IgbGxoMSAqLwogI2RlZmluZSBOSUdfUkVHX0xMSDFfRVZFTlRfSUQJCQkJCSAweDEwMDg4CisjZGVmaW5lIE5JR19SRUdfTExIMV9GVU5DX01FTQkJCQkJIDB4MTYxYzAKKyNkZWZpbmUgTklHX1JFR19MTEgxX0ZVTkNfTUVNX0VOQUJMRQkJCQkgMHgxNjE2MAorI2RlZmluZSBOSUdfUkVHX0xMSDFfRlVOQ19NRU1fU0laRQkJCQkgMTYKIC8qIFtSVyA4XSBpbml0IGNyZWRpdCBjb3VudGVyIGZvciBwb3J0MSBpbiBMTEggKi8KICNkZWZpbmUgTklHX1JFR19MTEgxX1hDTV9JTklUX0NSRURJVAkJCQkgMHgxMDU2NAogI2RlZmluZSBOSUdfUkVHX0xMSDFfWENNX01BU0sJCQkJCSAweDEwMTM0CkBAIC0xOTA3LDExICsxOTE4LDE3IEBACiAgICB+c2FmY19lbmFibGUuc2FmY19lbmFibGUgPSAwIGFuZCBwcHBfZW5hYmxlLnBwcF9lbmFibGUgPTAgZm9yIHRoZSBzYW1lCiAgICBwb3J0ICovCiAjZGVmaW5lIE5JR19SRUdfUEFVU0VfRU5BQkxFXzAJCQkJCSAweDE2MGMwCisjZGVmaW5lIE5JR19SRUdfUEFVU0VfRU5BQkxFXzEJCQkJCSAweDE2MGM0CiAvKiBbUlcgMV0gSW5wdXQgZW5hYmxlIGZvciBSWCBQQkYgTFAgSUYgKi8KICNkZWZpbmUgTklHX1JFR19QQkZfTEJfSU5fRU4JCQkJCSAweDEwMGI0CiAvKiBbUlcgMV0gVmFsdWUgb2YgdGhpcyByZWdpc3RlciB3aWxsIGJlIHRyYW5zbWl0dGVkIHRvIHBvcnQgc3dhcCB3aGVuCiAgICB+bmlnX3JlZ2lzdGVyc19zdHJhcF9vdmVycmlkZS5zdHJhcF9vdmVycmlkZSA9MSAqLwogI2RlZmluZSBOSUdfUkVHX1BPUlRfU1dBUAkJCQkJIDB4MTAzOTQKKy8qIFtSVyAxXSBQUFAgZW5hYmxlIGZvciBwb3J0MC4gVGhpcyByZWdpc3RlciBtYXkgZ2V0IDEgb25seSB3aGVuCisgKiB+c2FmY19lbmFibGUuc2FmY19lbmFibGUgPSAwIGFuZCBwYXVzZV9lbmFibGUucGF1c2VfZW5hYmxlID0wIGZvciB0aGUKKyAqIHNhbWUgcG9ydCAqLworI2RlZmluZSBOSUdfUkVHX1BQUF9FTkFCTEVfMAkJCQkJIDB4MTYwYjAKKyNkZWZpbmUgTklHX1JFR19QUFBfRU5BQkxFXzEJCQkJCSAweDE2MGI0CiAvKiBbUlcgMV0gb3V0cHV0IGVuYWJsZSBmb3IgUlggcGFyc2VyIGRlc2NyaXB0b3IgSUYgKi8KICNkZWZpbmUgTklHX1JFR19QUlNfRU9QX09VVF9FTgkJCQkJIDB4MTAxMDQKIC8qIFtSVyAxXSBJbnB1dCBlbmFibGUgZm9yIFJYIHBhcnNlciByZXF1ZXN0IElGICovCkBAIC0xOTc4LDYgKzE5OTUsMTQgQEAKICNkZWZpbmUgTklHX1NUQVRVU19JTlRFUlJVUFRfUE9SVDBfUkVHX1NUQVRVU19YR1hTMF9MSU5LMTBHCSAoMHgxPDwxNSkKICNkZWZpbmUgTklHX1NUQVRVU19JTlRFUlJVUFRfUE9SVDBfUkVHX1NUQVRVU19YR1hTMF9MSU5LX1NUQVRVUyAgKDB4Zjw8MTgpCiAjZGVmaW5lIE5JR19TVEFUVVNfSU5URVJSVVBUX1BPUlQwX1JFR19TVEFUVVNfWEdYUzBfTElOS19TVEFUVVNfU0laRSAxOAorLyogW1JXIDMxXSBUaGUgdXBwZXIgYm91bmQgb2YgdGhlIHdlaWdodCBvZiBDT1MwIGluIHRoZSBFVFMgY29tbWFuZCBhcmJpdGVyLiAqLworI2RlZmluZSBQQkZfUkVHX0NPUzBfVVBQRVJfQk9VTkQJCQkJIDB4MTVjMDVjCisvKiBbUlcgMzFdIFRoZSB3ZWlnaHQgb2YgQ09TMCBpbiB0aGUgRVRTIGNvbW1hbmQgYXJiaXRlci4gKi8KKyNkZWZpbmUgUEJGX1JFR19DT1MwX1dFSUdIVAkJCQkJIDB4MTVjMDU0CisvKiBbUlcgMzFdIFRoZSB1cHBlciBib3VuZCBvZiB0aGUgd2VpZ2h0IG9mIENPUzEgaW4gdGhlIEVUUyBjb21tYW5kIGFyYml0ZXIuICovCisjZGVmaW5lIFBCRl9SRUdfQ09TMV9VUFBFUl9CT1VORAkJCQkgMHgxNWMwNjAKKy8qIFtSVyAzMV0gVGhlIHdlaWdodCBvZiBDT1MxIGluIHRoZSBFVFMgY29tbWFuZCBhcmJpdGVyLiAqLworI2RlZmluZSBQQkZfUkVHX0NPUzFfV0VJR0hUCQkJCQkgMHgxNWMwNTgKIC8qIFtSVyAxXSBEaXNhYmxlIHByb2Nlc3NpbmcgZnVydGhlciB0YXNrcyBmcm9tIHBvcnQgMCAoYWZ0ZXIgZW5kaW5nIHRoZQogICAgY3VycmVudCB0YXNrIGluIHByb2Nlc3MpLiAqLwogI2RlZmluZSBQQkZfUkVHX0RJU0FCTEVfTkVXX1RBU0tfUFJPQ19QMAkJCSAweDE0MDA1YwpAQCAtMTk4OCw5ICsyMDEzLDE2IEBACiAgICBjdXJyZW50IHRhc2sgaW4gcHJvY2VzcykuICovCiAjZGVmaW5lIFBCRl9SRUdfRElTQUJMRV9ORVdfVEFTS19QUk9DX1A0CQkJIDB4MTQwMDZjCiAjZGVmaW5lIFBCRl9SRUdfRElTQUJMRV9QRgkJCQkJIDB4MTQwMmU4CisvKiBbUlcgMV0gSW5kaWNhdGVzIHRoYXQgRVRTIGlzIHBlcmZvcm1lZCBiZXR3ZWVuIHRoZSBDT1NlcyBpbiB0aGUgY29tbWFuZAorICogYXJiaXRlci4gSWYgcmVzZXQgc3RyaWN0IHByaW9yaXR5IHcvIGFudGktc3RhcnZhdGlvbiB3aWxsIGJlIHBlcmZvcm1lZAorICogdy9vIFdGUS4gKi8KKyNkZWZpbmUgUEJGX1JFR19FVFNfRU5BQkxFRAkJCQkJIDB4MTVjMDUwCiAvKiBbUlcgNl0gQml0LW1hcCBpbmRpY2F0aW5nIHdoaWNoIEwyIGhkcnMgbWF5IGFwcGVhciBhZnRlciB0aGUgYmFzaWMKICAqIEV0aGVybmV0IGhlYWRlci4gKi8KICNkZWZpbmUgUEJGX1JFR19IRFJTX0FGVEVSX0JBU0lDCQkJCSAweDE1YzBhOAorLyogW1JXIDFdIEluZGljYXRlcyB3aGljaCBDT1MgaXMgY29ubmN0ZWQgdG8gdGhlIGhpZ2hlc3QgcHJpb3JpdHkgaW4gdGhlCisgKiBjb21tYW5kIGFyYml0ZXIuICovCisjZGVmaW5lIFBCRl9SRUdfSElHSF9QUklPUklUWV9DT1NfTlVNCQkJCSAweDE1YzA0YwogI2RlZmluZSBQQkZfUkVHX0lGX0VOQUJMRV9SRUcJCQkJCSAweDE0MDA0NAogLyogW1JXIDFdIEluaXQgYml0LiBXaGVuIHNldCB0aGUgaW5pdGlhbCBjcmVkaXRzIGFyZSBjb3BpZWQgdG8gdGhlIGNyZWRpdAogICAgcmVnaXN0ZXJzIChleGNlcHQgdGhlIHBvcnQgY3JlZGl0cykuIFNob3VsZCBiZSBzZXQgYW5kIHRoZW4gcmVzZXQgYWZ0ZXIKQEAgLTIwMTYsNiArMjA0OCwxMCBAQAogI2RlZmluZSBQQkZfUkVHX01BQ19MQl9FTkFCTEUJCQkJCSAweDE0MDA0MAogLyogW1JXIDZdIEJpdC1tYXAgaW5kaWNhdGluZyB3aGljaCBoZWFkZXJzIG11c3QgYXBwZWFyIGluIHRoZSBwYWNrZXQgKi8KICNkZWZpbmUgUEJGX1JFR19NVVNUX0hBVkVfSERSUwkJCQkJIDB4MTVjMGM0CisvKiBbUlcgMTZdIFRoZSBudW1iZXIgb2Ygc3RyaWN0IHByaW9yaXR5IGFyYml0cmF0aW9uIHNsb3RzIGJldHdlZW4gMiBSUgorICogYXJiaXRyYXRpb24gc2xvdHMuIEEgdmFsdWUgb2YgMCBtZWFucyBubyBzdHJpY3QgcHJpb3JpdHkgY3ljbGVzOyBpLmUuIHRoZQorICogc3RyaWN0LXByaW9yaXR5IHcvIGFudGktc3RhcnZhdGlvbiBhcmJpdGVyIGlzIGEgUlIgYXJiaXRlci4gKi8KKyNkZWZpbmUgUEJGX1JFR19OVU1fU1RSSUNUX0FSQl9TTE9UUwkJCQkgMHgxNWMwNjQKIC8qIFtSVyAxMF0gUG9ydCAwIHRocmVzaG9sZCB1c2VkIGJ5IGFyYml0ZXIgaW4gMTYgYnl0ZSBsaW5lcyB1c2VkIHdoZW4gcGF1c2UKICAgIG5vdCBzdXBwb3RlcmQuICovCiAjZGVmaW5lIFBCRl9SRUdfUDBfQVJCX1RIUlNICQkJCQkgMHgxNDAwZTQKQEAgLTQ5NzAsNyArNTAwNiwyMyBAQAogI2RlZmluZSBFTUFDX1JFR19FTUFDX1RYX01PREUJCQkJCSAweGJjCiAjZGVmaW5lIEVNQUNfUkVHX0VNQUNfVFhfU1RBVF9BQwkJCQkgMHgyODAKICNkZWZpbmUgRU1BQ19SRUdfRU1BQ19UWF9TVEFUX0FDX0NPVU5UCQkJCSAyMgorI2RlZmluZSBFTUFDX1JFR19SWF9QRkNfTU9ERQkJCQkJIDB4MzIwCisjZGVmaW5lIEVNQUNfUkVHX1JYX1BGQ19NT0RFX1BSSU9SSVRJRVMJCQkJICgxTDw8MikKKyNkZWZpbmUgRU1BQ19SRUdfUlhfUEZDX01PREVfUlhfRU4JCQkJICgxTDw8MSkKKyNkZWZpbmUgRU1BQ19SRUdfUlhfUEZDX01PREVfVFhfRU4JCQkJICgxTDw8MCkKKyNkZWZpbmUgRU1BQ19SRUdfUlhfUEZDX1BBUkFNCQkJCQkgMHgzMjQKKyNkZWZpbmUgRU1BQ19SRUdfUlhfUEZDX1BBUkFNX09QQ09ERV9CSVRTSElGVAkJCSAwCisjZGVmaW5lIEVNQUNfUkVHX1JYX1BGQ19QQVJBTV9QUklPUklUWV9FTl9CSVRTSElGVAkJIDE2CisjZGVmaW5lIEVNQUNfUkVHX1JYX1BGQ19TVEFUU19YT0ZGX1JDVkQJCQkJIDB4MzI4CisjZGVmaW5lIEVNQUNfUkVHX1JYX1BGQ19TVEFUU19YT0ZGX1JDVkRfQ09VTlQJCQkgKDB4ZmZmZjw8MCkKKyNkZWZpbmUgRU1BQ19SRUdfUlhfUEZDX1NUQVRTX1hPRkZfU0VOVAkJCQkgMHgzMzAKKyNkZWZpbmUgRU1BQ19SRUdfUlhfUEZDX1NUQVRTX1hPRkZfU0VOVF9DT1VOVAkJCSAoMHhmZmZmPDwwKQorI2RlZmluZSBFTUFDX1JFR19SWF9QRkNfU1RBVFNfWE9OX1JDVkQJCQkJIDB4MzJjCisjZGVmaW5lIEVNQUNfUkVHX1JYX1BGQ19TVEFUU19YT05fUkNWRF9DT1VOVAkJCSAoMHhmZmZmPDwwKQorI2RlZmluZSBFTUFDX1JFR19SWF9QRkNfU1RBVFNfWE9OX1NFTlQJCQkJIDB4MzM0CisjZGVmaW5lIEVNQUNfUkVHX1JYX1BGQ19TVEFUU19YT05fU0VOVF9DT1VOVAkJCSAoMHhmZmZmPDwwKQogI2RlZmluZSBFTUFDX1JYX01PREVfRkxPV19FTgkJCQkJICgxTDw8MikKKyNkZWZpbmUgRU1BQ19SWF9NT0RFX0tFRVBfTUFDX0NPTlRST0wJCQkJICgxTDw8MykKICNkZWZpbmUgRU1BQ19SWF9NT0RFX0tFRVBfVkxBTl9UQUcJCQkJICgxTDw8MTApCiAjZGVmaW5lIEVNQUNfUlhfTU9ERV9QUk9NSVNDVU9VUwkJCQkgKDFMPDw4KQogI2RlZmluZSBFTUFDX1JYX01PREVfUkVTRVQJCQkJCSAoMUw8PDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9zdGF0cy5jIGIvZHJpdmVycy9uZXQvYm54MngvYm54Mnhfc3RhdHMuYwppbmRleCA0NzMzYzgzLi42ZTRkOWIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9zdGF0cy5jCisrKyBiL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X3N0YXRzLmMKQEAgLTE2MCw3ICsxNjAsNyBAQAogCiAJCXJhbXJvZF9kYXRhLmRydl9jb3VudGVyID0gYnAtPnN0YXRzX2NvdW50ZXIrKzsKIAkJcmFtcm9kX2RhdGEuY29sbGVjdF9wb3J0ID0gYnAtPnBvcnQucG1mID8gMSA6IDA7Ci0JCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKQorCQlmb3JfZWFjaF9ldGhfcXVldWUoYnAsIGkpCiAJCQlyYW1yb2RfZGF0YS5jdHJfaWRfdmVjdG9yIHw9ICgxIDw8IGJwLT5mcFtpXS5jbF9pZCk7CiAKIAkJcmMgPSBibngyeF9zcF9wb3N0KGJwLCBSQU1ST0RfQ01EX0lEX0NPTU1PTl9TVEFUX1FVRVJZLCAwLApAQCAtNzY2LDcgKzc2Niw3IEBACiAJZXN0YXRzLT5ub19idWZmX2Rpc2NhcmRfaGkgPSAwOwogCWVzdGF0cy0+bm9fYnVmZl9kaXNjYXJkX2xvID0gMDsKIAotCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7CisJZm9yX2VhY2hfZXRoX3F1ZXVlKGJwLCBpKSB7CiAJCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2ldOwogCQlpbnQgY2xfaWQgPSBmcC0+Y2xfaWQ7CiAJCXN0cnVjdCB0c3Rvcm1fcGVyX2NsaWVudF9zdGF0cyAqdGNsaWVudCA9CkBAIC05OTYsNyArOTk2LDcgQEAKIAluc3RhdHMtPnR4X2J5dGVzID0gYm54MnhfaGlsbygmZXN0YXRzLT50b3RhbF9ieXRlc190cmFuc21pdHRlZF9oaSk7CiAKIAl0bXAgPSBlc3RhdHMtPm1hY19kaXNjYXJkOwotCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKQorCWZvcl9lYWNoX3J4X3F1ZXVlKGJwLCBpKQogCQl0bXAgKz0gbGUzMl90b19jcHUoYnAtPmZwW2ldLm9sZF90Y2xpZW50LmNoZWNrc3VtX2Rpc2NhcmQpOwogCW5zdGF0cy0+cnhfZHJvcHBlZCA9IHRtcDsKIApAQCAtMTA4Nyw3ICsxMDg3LDcgQEAKIAkJICAgICAgIGJwLT5kZXYtPm5hbWUsCiAJCSAgICAgICBlc3RhdHMtPmJyYl9kcm9wX2xvLCBlc3RhdHMtPmJyYl90cnVuY2F0ZV9sbyk7CiAKLQkJZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKKwkJZm9yX2VhY2hfZXRoX3F1ZXVlKGJwLCBpKSB7CiAJCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtpXTsKIAkJCXN0cnVjdCBibngyeF9ldGhfcV9zdGF0cyAqcXN0YXRzID0gJmZwLT5ldGhfcV9zdGF0czsKIApAQCAtMTEwMSw3ICsxMTAxLDcgQEAKIAkJCSAgICAgICBmcC0+cnhfY2FsbHMsIGZwLT5yeF9wa3QpOwogCQl9CiAKLQkJZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKKwkJZm9yX2VhY2hfZXRoX3F1ZXVlKGJwLCBpKSB7CiAJCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtpXTsKIAkJCXN0cnVjdCBibngyeF9ldGhfcV9zdGF0cyAqcXN0YXRzID0gJmZwLT5ldGhfcV9zdGF0czsKIAkJCXN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cSA9CkBAIC0xMzgxLDcgKzEzODEsOCBAQAogCQltZW1zZXQoJmZwLT5ldGhfcV9zdGF0cywgMCwgc2l6ZW9mKHN0cnVjdCBibngyeF9ldGhfcV9zdGF0cykpOwogCX0KIAotCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7CisJLyogRlcgc3RhdHMgYXJlIGN1cnJlbnRseSBjb2xsZWN0ZWQgZm9yIEVUSCBjbGllbnRzIG9ubHkgKi8KKwlmb3JfZWFjaF9ldGhfcXVldWUoYnAsIGkpIHsKIAkJLyogU2V0IGluaXRpYWwgc3RhdHMgY291bnRlciBpbiB0aGUgc3RhdHMgcmFtcm9kIGRhdGEgdG8gLTEgKi8KIAkJaW50IGNsX2lkID0gYnAtPmZwW2ldLmNsX2lkOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9zdGF0cy5oIGIvZHJpdmVycy9uZXQvYm54MngvYm54Mnhfc3RhdHMuaAppbmRleCBhZmQxNWVmLi41OTY3OThjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9zdGF0cy5oCisrKyBiL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X3N0YXRzLmgKQEAgLTUzLDcgKzUzLDYgQEAKIAl1MzIgaHdfY3N1bV9lcnI7CiB9OwogCi0jZGVmaW5lIEJOWDJYX05VTV9RX1NUQVRTCQkxMwogI2RlZmluZSBRX1NUQVRTX09GRlNFVDMyKHN0YXRfbmFtZSkgXAogCQkJKG9mZnNldG9mKHN0cnVjdCBibngyeF9ldGhfcV9zdGF0cywgc3RhdF9uYW1lKSAvIDQpCiAKQEAgLTIyNSw3ICsyMjQsNiBAQAogCXUzMiBuaWdfdGltZXJfbWF4OwogfTsKIAotI2RlZmluZSBCTlgyWF9OVU1fU1RBVFMJCQk0MwogI2RlZmluZSBTVEFUU19PRkZTRVQzMihzdGF0X25hbWUpIFwKIAkJCShvZmZzZXRvZihzdHJ1Y3QgYm54MnhfZXRoX3N0YXRzLCBzdGF0X25hbWUpIC8gNCkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvTWFrZWZpbGUKaW5kZXggNmY5YzZmYS4uMGUyNzM3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL01ha2VmaWxlCkBAIC00LDcgKzQsNyBAQAogCiBvYmotJChDT05GSUdfQk9ORElORykgKz0gYm9uZGluZy5vCiAKLWJvbmRpbmctb2JqcyA6PSBib25kX21haW4ubyBib25kXzNhZC5vIGJvbmRfYWxiLm8gYm9uZF9zeXNmcy5vCitib25kaW5nLW9ianMgOj0gYm9uZF9tYWluLm8gYm9uZF8zYWQubyBib25kX2FsYi5vIGJvbmRfc3lzZnMubyBib25kX2RlYnVnZnMubwogCiBpcHY2LSQoc3Vic3QgbSx5LCQoQ09ORklHX0lQVjYpKSArPSBib25kX2lwdjYubwogYm9uZGluZy1vYmpzICs9ICQoaXB2Ni15KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jCmluZGV4IDg4MTkxNGJjLi40OGNmMjRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMKKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jCkBAIC0yNDc0LDggKzI0NzQsNyBAQAogCQlnb3RvIG91dDsKIAogCXJlYWRfbG9jaygmYm9uZC0+bG9jayk7Ci0Jc2xhdmUgPSBib25kX2dldF9zbGF2ZV9ieV9kZXYoKHN0cnVjdCBib25kaW5nICopbmV0ZGV2X3ByaXYoZGV2KSwKLQkJCQkJb3JpZ19kZXYpOworCXNsYXZlID0gYm9uZF9nZXRfc2xhdmVfYnlfZGV2KG5ldGRldl9wcml2KGRldiksIG9yaWdfZGV2KTsKIAlpZiAoIXNsYXZlKQogCQlnb3RvIG91dF91bmxvY2s7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYwppbmRleCAyNmJiMTE4Li5mNGU2MzhjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMKKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jCkBAIC00NCw0MiArNDQsNiBAQAogI2luY2x1ZGUgImJvbmRfYWxiLmgiCiAKIAotI2RlZmluZSBBTEJfVElNRVJfVElDS1NfUEVSX1NFQwkgICAgMTAJLyogc2hvdWxkIGJlIGEgZGl2aXNvciBvZiBIWiAqLwotI2RlZmluZSBCT05EX1RMQl9SRUJBTEFOQ0VfSU5URVJWQUwgMTAJLyogSW4gc2Vjb25kcywgcGVyaW9kaWMgcmUtYmFsYW5jaW5nLgotCQkJCQkgKiBVc2VkIGZvciBkaXZpc2lvbiAtIG5ldmVyIHNldAotCQkJCQkgKiB0byB6ZXJvICEhIQotCQkJCQkgKi8KLSNkZWZpbmUgQk9ORF9BTEJfTFBfSU5URVJWQUwJICAgIDEJLyogSW4gc2Vjb25kcywgcGVyaW9kaWMgc2VuZCBvZgotCQkJCQkgKiBsZWFybmluZyBwYWNrZXRzIHRvIHRoZSBzd2l0Y2gKLQkJCQkJICovCi0KLSNkZWZpbmUgQk9ORF9UTEJfUkVCQUxBTkNFX1RJQ0tTIChCT05EX1RMQl9SRUJBTEFOQ0VfSU5URVJWQUwgXAotCQkJCSAgKiBBTEJfVElNRVJfVElDS1NfUEVSX1NFQykKLQotI2RlZmluZSBCT05EX0FMQl9MUF9USUNLUyAoQk9ORF9BTEJfTFBfSU5URVJWQUwgXAotCQkJICAgKiBBTEJfVElNRVJfVElDS1NfUEVSX1NFQykKLQotI2RlZmluZSBUTEJfSEFTSF9UQUJMRV9TSVpFIDI1NgkvKiBUaGUgc2l6ZSBvZiB0aGUgY2xpZW50cyBoYXNoIHRhYmxlLgotCQkJCSAqIE5vdGUgdGhhdCB0aGlzIHZhbHVlIE1VU1QgTk9UIGJlIHNtYWxsZXIKLQkJCQkgKiBiZWNhdXNlIHRoZSBrZXkgaGFzaCB0YWJsZSBpcyBCWVRFIHdpZGUgIQotCQkJCSAqLwotCi0KLSNkZWZpbmUgVExCX05VTExfSU5ERVgJCTB4ZmZmZmZmZmYKLSNkZWZpbmUgTUFYX0xQX0JVUlNUCQkzCi0KLS8qIHJsYiBkZWZzICovCi0jZGVmaW5lIFJMQl9IQVNIX1RBQkxFX1NJWkUJMjU2Ci0jZGVmaW5lIFJMQl9OVUxMX0lOREVYCQkweGZmZmZmZmZmCi0jZGVmaW5lIFJMQl9VUERBVEVfREVMQVkJMipBTEJfVElNRVJfVElDS1NfUEVSX1NFQyAvKiAyIHNlY29uZHMgKi8KLSNkZWZpbmUgUkxCX0FSUF9CVVJTVF9TSVpFCTIKLSNkZWZpbmUgUkxCX1VQREFURV9SRVRSWQkzCS8qIDMtdGlja3MgLSBtdXN0IGJlIHNtYWxsZXIgdGhhbiB0aGUgcmxiCi0JCQkJCSAqIHJlYmFsYW5jZSBpbnRlcnZhbCAoNSBtaW4pLgotCQkJCQkgKi8KLS8qIFJMQl9QUk9NSVNDX1RJTUVPVVQgPSAxMCBzZWMgZXF1YWxzIHRoZSB0aW1lIHRoYXQgdGhlIGN1cnJlbnQgc2xhdmUgaXMKLSAqIHByb21pc2N1b3VzIGFmdGVyIGZhaWxvdmVyCi0gKi8KLSNkZWZpbmUgUkxCX1BST01JU0NfVElNRU9VVAkxMCpBTEJfVElNRVJfVElDS1NfUEVSX1NFQwogCiAjaWZuZGVmIF9fbG9uZ19hbGlnbmVkCiAjZGVmaW5lIF9fbG9uZ19hbGlnbmVkIF9fYXR0cmlidXRlX18oKGFsaWduZWQoKHNpemVvZihsb25nKSkpKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuaCBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuaAppbmRleCA1MDk2OGY4Li4xMThjMjhhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmgKKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5oCkBAIC0zMSw2ICszMSw0NCBAQAogI2RlZmluZSBCT05EX0FMQl9JTkZPKGJvbmQpICAgKChib25kKS0+YWxiX2luZm8pCiAjZGVmaW5lIFNMQVZFX1RMQl9JTkZPKHNsYXZlKSAoKHNsYXZlKS0+dGxiX2luZm8pCiAKKyNkZWZpbmUgQUxCX1RJTUVSX1RJQ0tTX1BFUl9TRUMJICAgIDEwCS8qIHNob3VsZCBiZSBhIGRpdmlzb3Igb2YgSFogKi8KKyNkZWZpbmUgQk9ORF9UTEJfUkVCQUxBTkNFX0lOVEVSVkFMIDEwCS8qIEluIHNlY29uZHMsIHBlcmlvZGljIHJlLWJhbGFuY2luZy4KKwkJCQkJICogVXNlZCBmb3IgZGl2aXNpb24gLSBuZXZlciBzZXQKKwkJCQkJICogdG8gemVybyAhISEKKwkJCQkJICovCisjZGVmaW5lIEJPTkRfQUxCX0xQX0lOVEVSVkFMCSAgICAxCS8qIEluIHNlY29uZHMsIHBlcmlvZGljIHNlbmQgb2YKKwkJCQkJICogbGVhcm5pbmcgcGFja2V0cyB0byB0aGUgc3dpdGNoCisJCQkJCSAqLworCisjZGVmaW5lIEJPTkRfVExCX1JFQkFMQU5DRV9USUNLUyAoQk9ORF9UTEJfUkVCQUxBTkNFX0lOVEVSVkFMIFwKKwkJCQkgICogQUxCX1RJTUVSX1RJQ0tTX1BFUl9TRUMpCisKKyNkZWZpbmUgQk9ORF9BTEJfTFBfVElDS1MgKEJPTkRfQUxCX0xQX0lOVEVSVkFMIFwKKwkJCSAgICogQUxCX1RJTUVSX1RJQ0tTX1BFUl9TRUMpCisKKyNkZWZpbmUgVExCX0hBU0hfVEFCTEVfU0laRSAyNTYJLyogVGhlIHNpemUgb2YgdGhlIGNsaWVudHMgaGFzaCB0YWJsZS4KKwkJCQkgKiBOb3RlIHRoYXQgdGhpcyB2YWx1ZSBNVVNUIE5PVCBiZSBzbWFsbGVyCisJCQkJICogYmVjYXVzZSB0aGUga2V5IGhhc2ggdGFibGUgaXMgQllURSB3aWRlICEKKwkJCQkgKi8KKworCisjZGVmaW5lIFRMQl9OVUxMX0lOREVYCQkweGZmZmZmZmZmCisjZGVmaW5lIE1BWF9MUF9CVVJTVAkJMworCisvKiBybGIgZGVmcyAqLworI2RlZmluZSBSTEJfSEFTSF9UQUJMRV9TSVpFCTI1NgorI2RlZmluZSBSTEJfTlVMTF9JTkRFWAkJMHhmZmZmZmZmZgorI2RlZmluZSBSTEJfVVBEQVRFX0RFTEFZCSgyKkFMQl9USU1FUl9USUNLU19QRVJfU0VDKSAvKiAyIHNlY29uZHMgKi8KKyNkZWZpbmUgUkxCX0FSUF9CVVJTVF9TSVpFCTIKKyNkZWZpbmUgUkxCX1VQREFURV9SRVRSWQkzIC8qIDMtdGlja3MgLSBtdXN0IGJlIHNtYWxsZXIgdGhhbiB0aGUgcmxiCisJCQkJICAgKiByZWJhbGFuY2UgaW50ZXJ2YWwgKDUgbWluKS4KKwkJCQkgICAqLworLyogUkxCX1BST01JU0NfVElNRU9VVCA9IDEwIHNlYyBlcXVhbHMgdGhlIHRpbWUgdGhhdCB0aGUgY3VycmVudCBzbGF2ZSBpcworICogcHJvbWlzY3VvdXMgYWZ0ZXIgZmFpbG92ZXIKKyAqLworI2RlZmluZSBSTEJfUFJPTUlTQ19USU1FT1VUCSgxMCpBTEJfVElNRVJfVElDS1NfUEVSX1NFQykKKworCiBzdHJ1Y3QgdGxiX2NsaWVudF9pbmZvIHsKIAlzdHJ1Y3Qgc2xhdmUgKnR4X3NsYXZlOwkvKiBBIHBvaW50ZXIgdG8gc2xhdmUgdXNlZCBmb3IgdHJhbnNtaXRpbmcKIAkJCQkgKiBwYWNrZXRzIHRvIGEgQ2xpZW50IHRoYXQgdGhlIEhhc2ggZnVuY3Rpb24KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfZGVidWdmcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2ODBhYTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfZGVidWdmcy5jCkBAIC0wLDAgKzEsMTQ2IEBACisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisKKyNpbmNsdWRlICJib25kaW5nLmgiCisjaW5jbHVkZSAiYm9uZF9hbGIuaCIKKworI2lmZGVmIENPTkZJR19ERUJVR19GUworCisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpib25kaW5nX2RlYnVnX3Jvb3Q7CisKKy8qCisgKiAgU2hvdyBSTEIgaGFzaCB0YWJsZQorICovCitzdGF0aWMgaW50IGJvbmRfZGVidWdfcmxiX2hhc2hfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCit7CisJc3RydWN0IGJvbmRpbmcgKmJvbmQgPSBtLT5wcml2YXRlOworCXN0cnVjdCBhbGJfYm9uZF9pbmZvICpib25kX2luZm8gPSAmKEJPTkRfQUxCX0lORk8oYm9uZCkpOworCXN0cnVjdCBybGJfY2xpZW50X2luZm8gKmNsaWVudF9pbmZvOworCXUzMiBoYXNoX2luZGV4OworCisJaWYgKGJvbmQtPnBhcmFtcy5tb2RlICE9IEJPTkRfTU9ERV9BTEIpCisJCXJldHVybiAwOworCisJc2VxX3ByaW50ZihtLCAiU291cmNlSVAgICAgICAgIERlc3RpbmF0aW9uSVAgICAiCisJCQkiRGVzdGluYXRpb24gTUFDICAgREVWXG4iKTsKKworCXNwaW5fbG9ja19iaCgmKEJPTkRfQUxCX0lORk8oYm9uZCkucnhfaGFzaHRibF9sb2NrKSk7CisKKwloYXNoX2luZGV4ID0gYm9uZF9pbmZvLT5yeF9oYXNodGJsX2hlYWQ7CisJZm9yICg7IGhhc2hfaW5kZXggIT0gUkxCX05VTExfSU5ERVg7IGhhc2hfaW5kZXggPSBjbGllbnRfaW5mby0+bmV4dCkgeworCQljbGllbnRfaW5mbyA9ICYoYm9uZF9pbmZvLT5yeF9oYXNodGJsW2hhc2hfaW5kZXhdKTsKKwkJc2VxX3ByaW50ZihtLCAiJS0xNXBJNCAlLTE1cEk0ICUtMTdwTSAlc1xuIiwKKwkJCSZjbGllbnRfaW5mby0+aXBfc3JjLAorCQkJJmNsaWVudF9pbmZvLT5pcF9kc3QsCisJCQkmY2xpZW50X2luZm8tPm1hY19kc3QsCisJCQljbGllbnRfaW5mby0+c2xhdmUtPmRldi0+bmFtZSk7CisJfQorCisJc3Bpbl91bmxvY2tfYmgoJihCT05EX0FMQl9JTkZPKGJvbmQpLnJ4X2hhc2h0YmxfbG9jaykpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYm9uZF9kZWJ1Z19ybGJfaGFzaF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBib25kX2RlYnVnX3JsYl9oYXNoX3Nob3csIGlub2RlLT5pX3ByaXZhdGUpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBib25kX2RlYnVnX3JsYl9oYXNoX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IGJvbmRfZGVidWdfcmxiX2hhc2hfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKKwordm9pZCBib25kX2RlYnVnX3JlZ2lzdGVyKHN0cnVjdCBib25kaW5nICpib25kKQoreworCWlmICghYm9uZGluZ19kZWJ1Z19yb290KQorCQlyZXR1cm47CisKKwlib25kLT5kZWJ1Z19kaXIgPQorCQlkZWJ1Z2ZzX2NyZWF0ZV9kaXIoYm9uZC0+ZGV2LT5uYW1lLCBib25kaW5nX2RlYnVnX3Jvb3QpOworCisJaWYgKCFib25kLT5kZWJ1Z19kaXIpIHsKKwkJcHJfd2FybmluZygiJXM6IFdhcm5pbmc6IGZhaWxlZCB0byByZWdpc3RlciB0byBkZWJ1Z2ZzXG4iLAorCQkJYm9uZC0+ZGV2LT5uYW1lKTsKKwkJcmV0dXJuOworCX0KKworCWRlYnVnZnNfY3JlYXRlX2ZpbGUoInJsYl9oYXNoX3RhYmxlIiwgMDQwMCwgYm9uZC0+ZGVidWdfZGlyLAorCQkJCWJvbmQsICZib25kX2RlYnVnX3JsYl9oYXNoX2ZvcHMpOworfQorCit2b2lkIGJvbmRfZGVidWdfdW5yZWdpc3RlcihzdHJ1Y3QgYm9uZGluZyAqYm9uZCkKK3sKKwlpZiAoIWJvbmRpbmdfZGVidWdfcm9vdCkKKwkJcmV0dXJuOworCisJZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGJvbmQtPmRlYnVnX2Rpcik7Cit9CisKK3ZvaWQgYm9uZF9kZWJ1Z19yZXJlZ2lzdGVyKHN0cnVjdCBib25kaW5nICpib25kKQoreworCXN0cnVjdCBkZW50cnkgKmQ7CisKKwlpZiAoIWJvbmRpbmdfZGVidWdfcm9vdCkKKwkJcmV0dXJuOworCisJZCA9IGRlYnVnZnNfcmVuYW1lKGJvbmRpbmdfZGVidWdfcm9vdCwgYm9uZC0+ZGVidWdfZGlyLAorCQkJICAgYm9uZGluZ19kZWJ1Z19yb290LCBib25kLT5kZXYtPm5hbWUpOworCWlmIChkKSB7CisJCWJvbmQtPmRlYnVnX2RpciA9IGQ7CisJfSBlbHNlIHsKKwkJcHJfd2FybmluZygiJXM6IFdhcm5pbmc6IGZhaWxlZCB0byByZXJlZ2lzdGVyLCAiCisJCQkJInNvIGp1c3QgdW5yZWdpc3RlciBvbGQgb25lXG4iLAorCQkJCWJvbmQtPmRldi0+bmFtZSk7CisJCWJvbmRfZGVidWdfdW5yZWdpc3Rlcihib25kKTsKKwl9Cit9CisKK3ZvaWQgYm9uZF9jcmVhdGVfZGVidWdmcyh2b2lkKQoreworCWJvbmRpbmdfZGVidWdfcm9vdCA9IGRlYnVnZnNfY3JlYXRlX2RpcigiYm9uZGluZyIsIE5VTEwpOworCisJaWYgKCFib25kaW5nX2RlYnVnX3Jvb3QpIHsKKwkJcHJfd2FybmluZygiV2FybmluZzogQ2Fubm90IGNyZWF0ZSBib25kaW5nIGRpcmVjdG9yeSIKKwkJCQkiIGluIGRlYnVnZnNcbiIpOworCX0KK30KKwordm9pZCBib25kX2Rlc3Ryb3lfZGVidWdmcyh2b2lkKQoreworCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShib25kaW5nX2RlYnVnX3Jvb3QpOworCWJvbmRpbmdfZGVidWdfcm9vdCA9IE5VTEw7Cit9CisKKworI2Vsc2UgLyogIUNPTkZJR19ERUJVR19GUyAqLworCit2b2lkIGJvbmRfZGVidWdfcmVnaXN0ZXIoc3RydWN0IGJvbmRpbmcgKmJvbmQpCit7Cit9CisKK3ZvaWQgYm9uZF9kZWJ1Z191bnJlZ2lzdGVyKHN0cnVjdCBib25kaW5nICpib25kKQoreworfQorCit2b2lkIGJvbmRfZGVidWdfcmVyZWdpc3RlcihzdHJ1Y3QgYm9uZGluZyAqYm9uZCkKK3sKK30KKwordm9pZCBib25kX2NyZWF0ZV9kZWJ1Z2ZzKHZvaWQpCit7Cit9CisKK3ZvaWQgYm9uZF9kZXN0cm95X2RlYnVnZnModm9pZCkKK3sKK30KKworI2VuZGlmIC8qIENPTkZJR19ERUJVR19GUyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMKaW5kZXggM2IxNmMzNC4uYjEwMjViOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYworKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jCkBAIC04NDgsMTcgKzg0OCwxMSBAQAogc3RhdGljIHZvaWQgX19ib25kX3Jlc2VuZF9pZ21wX2pvaW5fcmVxdWVzdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXY7Ci0Jc3RydWN0IGlwX21jX2xpc3QgKmltOwogCiAJcmN1X3JlYWRfbG9jaygpOwogCWluX2RldiA9IF9faW5fZGV2X2dldF9yY3UoZGV2KTsKLQlpZiAoaW5fZGV2KSB7Ci0JCXJlYWRfbG9jaygmaW5fZGV2LT5tY19saXN0X2xvY2spOwotCQlmb3IgKGltID0gaW5fZGV2LT5tY19saXN0OyBpbTsgaW0gPSBpbS0+bmV4dCkKLQkJCWlwX21jX3Jlam9pbl9ncm91cChpbSk7Ci0JCXJlYWRfdW5sb2NrKCZpbl9kZXYtPm1jX2xpc3RfbG9jayk7Ci0JfQotCisJaWYgKGluX2RldikKKwkJaXBfbWNfcmVqb2luX2dyb3Vwcyhpbl9kZXYpOwogCXJjdV9yZWFkX3VubG9jaygpOwogfQogCkBAIC0zMTg5LDcgKzMxODMsNyBAQAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAKIHN0YXRpYyB2b2lkICpib25kX2luZm9fc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKLQlfX2FjcXVpcmVzKCZkZXZfYmFzZV9sb2NrKQorCV9fYWNxdWlyZXMoUkNVKQogCV9fYWNxdWlyZXMoJmJvbmQtPmxvY2spCiB7CiAJc3RydWN0IGJvbmRpbmcgKmJvbmQgPSBzZXEtPnByaXZhdGU7CkBAIC0zMTk4LDcgKzMxOTIsNyBAQAogCWludCBpOwogCiAJLyogbWFrZSBzdXJlIHRoZSBib25kIHdvbid0IGJlIHRha2VuIGF3YXkgKi8KLQlyZWFkX2xvY2soJmRldl9iYXNlX2xvY2spOworCXJjdV9yZWFkX2xvY2soKTsKIAlyZWFkX2xvY2soJmJvbmQtPmxvY2spOwogCiAJaWYgKCpwb3MgPT0gMCkKQEAgLTMyMjgsMTIgKzMyMjIsMTIgQEAKIAogc3RhdGljIHZvaWQgYm9uZF9pbmZvX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQogCV9fcmVsZWFzZXMoJmJvbmQtPmxvY2spCi0JX19yZWxlYXNlcygmZGV2X2Jhc2VfbG9jaykKKwlfX3JlbGVhc2VzKFJDVSkKIHsKIAlzdHJ1Y3QgYm9uZGluZyAqYm9uZCA9IHNlcS0+cHJpdmF0ZTsKIAogCXJlYWRfdW5sb2NrKCZib25kLT5sb2NrKTsKLQlyZWFkX3VubG9jaygmZGV2X2Jhc2VfbG9jayk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKIHN0YXRpYyB2b2lkIGJvbmRfaW5mb19zaG93X21hc3RlcihzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSkKQEAgLTM0ODcsNiArMzQ4MSw4IEBACiAJYm9uZF9yZW1vdmVfcHJvY19lbnRyeShib25kKTsKIAlib25kX2NyZWF0ZV9wcm9jX2VudHJ5KGJvbmQpOwogCisJYm9uZF9kZWJ1Z19yZXJlZ2lzdGVyKGJvbmQpOworCiAJcmV0dXJuIE5PVElGWV9ET05FOwogfQogCkBAIC00NzY5LDYgKzQ3NjUsOCBAQAogCiAJYm9uZF9yZW1vdmVfcHJvY19lbnRyeShib25kKTsKIAorCWJvbmRfZGVidWdfdW5yZWdpc3Rlcihib25kKTsKKwogCV9faHdfYWRkcl9mbHVzaCgmYm9uZC0+bWNfbGlzdCk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodmxhbiwgdG1wLCAmYm9uZC0+dmxhbl9saXN0LCB2bGFuX2xpc3QpIHsKQEAgLTUxNzEsNiArNTE2OSw4IEBACiAKIAlib25kX3ByZXBhcmVfc3lzZnNfZ3JvdXAoYm9uZCk7CiAKKwlib25kX2RlYnVnX3JlZ2lzdGVyKGJvbmQpOworCiAJX19od19hZGRyX2luaXQoJmJvbmQtPm1jX2xpc3QpOwogCXJldHVybiAwOwogfQpAQCAtNTI4NSw2ICs1Mjg1LDggQEAKIAlpZiAocmVzKQogCQlnb3RvIGVycl9saW5rOwogCisJYm9uZF9jcmVhdGVfZGVidWdmcygpOworCiAJZm9yIChpID0gMDsgaSA8IG1heF9ib25kczsgaSsrKSB7CiAJCXJlcyA9IGJvbmRfY3JlYXRlKCZpbml0X25ldCwgTlVMTCk7CiAJCWlmIChyZXMpCkBAIC01Mjk1LDcgKzUyOTcsNiBAQAogCWlmIChyZXMpCiAJCWdvdG8gZXJyOwogCi0KIAlyZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJmJvbmRfbmV0ZGV2X25vdGlmaWVyKTsKIAlyZWdpc3Rlcl9pbmV0YWRkcl9ub3RpZmllcigmYm9uZF9pbmV0YWRkcl9ub3RpZmllcik7CiAJYm9uZF9yZWdpc3Rlcl9pcHY2X25vdGlmaWVyKCk7CkBAIC01MzE2LDYgKzUzMTcsNyBAQAogCWJvbmRfdW5yZWdpc3Rlcl9pcHY2X25vdGlmaWVyKCk7CiAKIAlib25kX2Rlc3Ryb3lfc3lzZnMoKTsKKwlib25kX2Rlc3Ryb3lfZGVidWdmcygpOwogCiAJcnRubF9saW5rX3VucmVnaXN0ZXIoJmJvbmRfbGlua19vcHMpOwogCXVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmYm9uZF9uZXRfb3BzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZGluZy5oIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kaW5nLmgKaW5kZXggNGZlZWIyZC4uNGRhMzg0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kaW5nLmgKKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kaW5nLmgKQEAgLTI1NSw2ICsyNTUsMTAgQEAKICNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKIAlzdHJ1Y3QgICBpbjZfYWRkciBtYXN0ZXJfaXB2NjsKICNlbmRpZgorI2lmZGVmIENPTkZJR19ERUJVR19GUworCS8qIGRlYnVnZ2luZyBzdXBvcnQgdmlhIGRlYnVnZnMgKi8KKwlzdHJ1Y3QJIGRlbnRyeSAqZGVidWdfZGlyOworI2VuZGlmIC8qIENPTkZJR19ERUJVR19GUyAqLwogfTsKIAogLyoqCkBAIC0yODIsNyArMjg2LDcgQEAKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0JcmV0dXJuIChzdHJ1Y3QgYm9uZGluZyAqKW5ldGRldl9wcml2KHNsYXZlLT5kZXYtPm1hc3Rlcik7CisJcmV0dXJuIG5ldGRldl9wcml2KHNsYXZlLT5kZXYtPm1hc3Rlcik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBib25kX2lzX2xiKGNvbnN0IHN0cnVjdCBib25kaW5nICpib25kKQpAQCAtMzc2LDYgKzM4MCwxMSBAQAogdm9pZCBib25kX2NoYW5nZV9hY3RpdmVfc2xhdmUoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHN0cnVjdCBzbGF2ZSAqbmV3X2FjdGl2ZSk7CiB2b2lkIGJvbmRfcmVnaXN0ZXJfYXJwKHN0cnVjdCBib25kaW5nICopOwogdm9pZCBib25kX3VucmVnaXN0ZXJfYXJwKHN0cnVjdCBib25kaW5nICopOwordm9pZCBib25kX2NyZWF0ZV9kZWJ1Z2ZzKHZvaWQpOwordm9pZCBib25kX2Rlc3Ryb3lfZGVidWdmcyh2b2lkKTsKK3ZvaWQgYm9uZF9kZWJ1Z19yZWdpc3RlcihzdHJ1Y3QgYm9uZGluZyAqYm9uZCk7Cit2b2lkIGJvbmRfZGVidWdfdW5yZWdpc3RlcihzdHJ1Y3QgYm9uZGluZyAqYm9uZCk7Cit2b2lkIGJvbmRfZGVidWdfcmVyZWdpc3RlcihzdHJ1Y3QgYm9uZGluZyAqYm9uZCk7CiAKIHN0cnVjdCBib25kX25ldCB7CiAJc3RydWN0IG5ldCAqCQluZXQ7CS8qIEFzc29jaWF0ZWQgbmV0d29yayBuYW1lc3BhY2UgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NhaWYvY2FpZl9zaG1fdTU1MDAuYyBiL2RyaXZlcnMvbmV0L2NhaWYvY2FpZl9zaG1fdTU1MDAuYwppbmRleCAzMmIxYzZmLi41Zjc3MWFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYWlmL2NhaWZfc2htX3U1NTAwLmMKKysrIGIvZHJpdmVycy9uZXQvY2FpZi9jYWlmX3NobV91NTUwMC5jCkBAIC0xMSw3ICsxMSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgotI2luY2x1ZGUgPG1hY2gvbWJveC5oPgorI2luY2x1ZGUgPG1hY2gvbWJveC1kYjU1MDAuaD4KICNpbmNsdWRlIDxuZXQvY2FpZi9jYWlmX3NobS5oPgogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2Nhbi9LY29uZmlnCmluZGV4IDA4MDU3NGIuLmQ1YTlkYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9LY29uZmlnCkBAIC0xMiw2ICsxMiwyNyBAQAogCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgdmNhbi4KIAorY29uZmlnIENBTl9TTENBTgorCXRyaXN0YXRlICJTZXJpYWwgLyBVU0Igc2VyaWFsIENBTiBBZGFwdG9ycyAoc2xjYW4pIgorCWRlcGVuZHMgb24gQ0FOCisJZGVmYXVsdCBOCisJLS0taGVscC0tLQorCSAgQ0FOIGRyaXZlciBmb3Igc2V2ZXJhbCAnbG93IGNvc3QnIENBTiBpbnRlcmZhY2VzIHRoYXQgYXJlIGF0dGFjaGVkCisJICB2aWEgc2VyaWFsIGxpbmVzIG9yIHZpYSBVU0ItdG8tc2VyaWFsIGFkYXB0ZXJzIHVzaW5nIHRoZSBMQVdJQ0VMCisJICBBU0NJSSBwcm90b2NvbC4gVGhlIGRyaXZlciBpbXBsZW1lbnRzIHRoZSB0dHkgbGluZWRpc2NpcGxpbmUgTl9TTENBTi4KKworCSAgQXMgb25seSB0aGUgc2VuZGluZyBhbmQgcmVjZWl2aW5nIG9mIENBTiBmcmFtZXMgaXMgaW1wbGVtZW50ZWQsIHRoaXMKKwkgIGRyaXZlciBzaG91bGQgd29yayB3aXRoIHRoZSAoc2VyaWFsL1VTQikgQ0FOIGhhcmR3YXJlIGZyb206CisJICB3d3cuY2FudXNiLmNvbSAvIHd3dy5jYW4yMzIuY29tIC8gd3d3Lm1pY3Ryb25pYy5jb20gLyB3d3cuY2FuaGFjay5kZQorCisJICBVc2Vyc3BhY2UgdG9vbHMgdG8gYXR0YWNoIHRoZSBTTENBTiBsaW5lIGRpc2NpcGxpbmUgKHNsY2FuX2F0dGFjaCwKKwkgIHNsY2FuZCkgY2FuIGJlIGZvdW5kIGluIHRoZSBjYW4tdXRpbHMgYXQgdGhlIFNvY2tldENBTiBTVk4sIHNlZQorCSAgaHR0cDovL2RldmVsb3Blci5iZXJsaW9zLmRlL3Byb2plY3RzL3NvY2tldGNhbiBmb3IgZGV0YWlscy4KKworCSAgVGhlIHNsY2FuIGRyaXZlciBzdXBwb3J0cyB1cCB0byAxMCBDQU4gbmV0ZGV2aWNlcyBieSBkZWZhdWx0IHdoaWNoCisJICBjYW4gYmUgY2hhbmdlZCBieSB0aGUgJ21heGRldj14eCcgbW9kdWxlIG9wdGlvbi4gVGhpcyBkcml2ZXIgY2FuCisJICBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBJZiBzbywgdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzbGNhbi4KKwogY29uZmlnIENBTl9ERVYKIAl0cmlzdGF0ZSAiUGxhdGZvcm0gQ0FOIGRyaXZlcnMgd2l0aCBOZXRsaW5rIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBDQU4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2Nhbi9NYWtlZmlsZQppbmRleCA5MGFmMTVhLi4wN2NhMTU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYW4vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvY2FuL01ha2VmaWxlCkBAIC0zLDYgKzMsNyBAQAogIwogCiBvYmotJChDT05GSUdfQ0FOX1ZDQU4pCQkrPSB2Y2FuLm8KK29iai0kKENPTkZJR19DQU5fU0xDQU4pCQkrPSBzbGNhbi5vCiAKIG9iai0kKENPTkZJR19DQU5fREVWKQkJKz0gY2FuLWRldi5vCiBjYW4tZGV2LXkJCQk6PSBkZXYubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL2phbnotaWNhbjMuYyBiL2RyaXZlcnMvbmV0L2Nhbi9qYW56LWljYW4zLmMKaW5kZXggNmU1MzNkYy4uYjlhNmQ3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL2phbnotaWNhbjMuYworKysgYi9kcml2ZXJzL25ldC9jYW4vamFuei1pY2FuMy5jCkBAIC0xMTE0LDExICsxMTE0LDYgQEAKIC8qCiAgKiBSZWNpZXZlIG9uZSBDQU4gZnJhbWUgZnJvbSB0aGUgaGFyZHdhcmUKICAqCi0gKiBUaGlzIHdvcmtzIGxpa2UgdGhlIGNvcmUgb2YgYSBOQVBJIGZ1bmN0aW9uLCBidXQgaXMgaW50ZW5kZWQgdG8gYmUgY2FsbGVkCi0gKiBmcm9tIHdvcmtxdWV1ZSBjb250ZXh0IGluc3RlYWQuIFRoaXMgZHJpdmVyIGFscmVhZHkgbmVlZHMgYSB3b3JrcXVldWUgdG8KLSAqIHByb2Nlc3MgY29udHJvbCBtZXNzYWdlcywgc28gd2UgdXNlIHRoZSB3b3JrcXVldWUgaW5zdGVhZCBvZiB1c2luZyBOQVBJLgotICogVGhpcyB3YXMgZG9uZSB0byBzaW1wbGlmeSBsb2NraW5nLgotICoKICAqIENPTlRFWFQ6IG11c3QgYmUgY2FsbGVkIGZyb20gdXNlciBjb250ZXh0CiAgKi8KIHN0YXRpYyBpbnQgaWNhbjNfcmVjdl9za2Ioc3RydWN0IGljYW4zX2RldiAqbW9kKQpAQCAtMTI1MSw3ICsxMjQ2LDYgQEAKICAqIFJlc2V0IGFuIElDQU4gbW9kdWxlIHRvIGl0cyBwb3dlci1vbiBzdGF0ZQogICoKICAqIENPTlRFWFQ6IG5vIG5ldHdvcmsgZGV2aWNlIHJlZ2lzdGVyZWQKLSAqIExPQ0tJTkc6IHdvcmsgZnVuY3Rpb24gZGlzYWJsZWQKICAqLwogc3RhdGljIGludCBpY2FuM19yZXNldF9tb2R1bGUoc3RydWN0IGljYW4zX2RldiAqbW9kKQogewpAQCAtMTI2Miw5ICsxMjU2LDYgQEAKIAkvKiBkaXNhYmxlIGludGVycnVwdHMgc28gbm8gbW9yZSB3b3JrIGlzIHNjaGVkdWxlZCAqLwogCWlvd3JpdGU4KDEgPDwgbW9kLT5udW0sICZtb2QtPmN0cmwtPmludF9kaXNhYmxlKTsKIAotCS8qIGZsdXNoIGFueSBwZW5kaW5nIHdvcmsgKi8KLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwotCiAJLyogdGhlIGZpcnN0IHVuYWxsb2NhdGVkIHBhZ2UgaW4gdGhlIERQTSBpcyAjOSAqLwogCW1vZC0+ZnJlZV9wYWdlID0gRFBNX0ZSRUVfU1RBUlQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9tc2Nhbi9tc2Nhbi5jIGIvZHJpdmVycy9uZXQvY2FuL21zY2FuL21zY2FuLmMKaW5kZXggNjRjMzc4Yy4uNzRjZDg4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL21zY2FuL21zY2FuLmMKKysrIGIvZHJpdmVycy9uZXQvY2FuL21zY2FuL21zY2FuLmMKQEAgLTE4Miw3ICsxODIsNyBAQAogCiAJCXByaXYtPmNhbi5zdGF0ZSA9IENBTl9TVEFURV9FUlJPUl9BQ1RJVkU7CiAJCVdBUk4oIShpbl84KCZyZWdzLT5jYW5taXNjKSAmIE1TQ0FOX0JPSE9MRCksCi0JCSAgICAgImJ1cy1vZmYgc3RhdGUgZXhwZWN0ZWQiKTsKKwkJICAgICAiYnVzLW9mZiBzdGF0ZSBleHBlY3RlZFxuIik7CiAJCW91dF84KCZyZWdzLT5jYW5taXNjLCBNU0NBTl9CT0hPTEQpOwogCQkvKiBSZS1lbmFibGUgcmVjZWl2ZSBpbnRlcnJ1cHRzLiAqLwogCQlvdXRfOCgmcmVncy0+Y2FucmllciwgTVNDQU5fUlhfSU5UU19FTkFCTEUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3BjaF9jYW4uYyBiL2RyaXZlcnMvbmV0L2Nhbi9wY2hfY2FuLmMKaW5kZXggNjcyNzE4Mi4uYzQyZTk3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL3BjaF9jYW4uYworKysgYi9kcml2ZXJzL25ldC9jYW4vcGNoX2Nhbi5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMTk5OSAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgT0tJIFNFTUlDT05EVUNUT1IgQ28uLCBMVEQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgT0tJIFNFTUlDT05EVUNUT1IgQ08uLCBMVEQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0zMiwxMDYgKzMyLDExNSBAQAogI2luY2x1ZGUgPGxpbnV4L2Nhbi9kZXYuaD4KICNpbmNsdWRlIDxsaW51eC9jYW4vZXJyb3IuaD4KIAotI2RlZmluZSBNQVhfTVNHX09CSgkJMzIKLSNkZWZpbmUgTVNHX09CSl9SWAkJMCAvKiBUaGUgcmVjZWl2ZSBtZXNzYWdlIG9iamVjdCBmbGFnLiAqLwotI2RlZmluZSBNU0dfT0JKX1RYCQkxIC8qIFRoZSB0cmFuc21pdCBtZXNzYWdlIG9iamVjdCBmbGFnLiAqLworI2RlZmluZSBQQ0hfQ1RSTF9JTklUCQlCSVQoMCkgLyogVGhlIElOSVQgYml0IG9mIENBTkNPTlQgcmVnaXN0ZXIuICovCisjZGVmaW5lIFBDSF9DVFJMX0lFCQlCSVQoMSkgLyogVGhlIElFIGJpdCBvZiBDQU4gY29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBQQ0hfQ1RSTF9JRV9TSUVfRUlFCShCSVQoMykgfCBCSVQoMikgfCBCSVQoMSkpCisjZGVmaW5lIFBDSF9DVFJMX0NDRQkJQklUKDYpCisjZGVmaW5lIFBDSF9DVFJMX09QVAkJQklUKDcpIC8qIFRoZSBPUFQgYml0IG9mIENBTkNPTlQgcmVnaXN0ZXIuICovCisjZGVmaW5lIFBDSF9PUFRfU0lMRU5UCQlCSVQoMykgLyogVGhlIFNpbGVudCBiaXQgb2YgQ0FOT1BUIHJlZy4gKi8KKyNkZWZpbmUgUENIX09QVF9MQkFDSwkJQklUKDQpIC8qIFRoZSBMb29wQmFjayBiaXQgb2YgQ0FOT1BUIHJlZy4gKi8KIAotI2RlZmluZSBFTkFCTEUJCQkxIC8qIFRoZSBlbmFibGUgZmxhZyAqLwotI2RlZmluZSBESVNBQkxFCQkJMCAvKiBUaGUgZGlzYWJsZSBmbGFnICovCi0jZGVmaW5lIENBTl9DVFJMX0lOSVQJCTB4MDAwMSAvKiBUaGUgSU5JVCBiaXQgb2YgQ0FOQ09OVCByZWdpc3Rlci4gKi8KLSNkZWZpbmUgQ0FOX0NUUkxfSUUJCTB4MDAwMiAvKiBUaGUgSUUgYml0IG9mIENBTiBjb250cm9sIHJlZ2lzdGVyICovCi0jZGVmaW5lIENBTl9DVFJMX0lFX1NJRV9FSUUJMHgwMDBlCi0jZGVmaW5lIENBTl9DVFJMX0NDRQkJMHgwMDQwCi0jZGVmaW5lIENBTl9DVFJMX09QVAkJMHgwMDgwIC8qIFRoZSBPUFQgYml0IG9mIENBTkNPTlQgcmVnaXN0ZXIuICovCi0jZGVmaW5lIENBTl9PUFRfU0lMRU5UCQkweDAwMDggLyogVGhlIFNpbGVudCBiaXQgb2YgQ0FOT1BUIHJlZy4gKi8KLSNkZWZpbmUgQ0FOX09QVF9MQkFDSwkJMHgwMDEwIC8qIFRoZSBMb29wQmFjayBiaXQgb2YgQ0FOT1BUIHJlZy4gKi8KLSNkZWZpbmUgQ0FOX0NNQVNLX1JYX1RYX1NFVAkweDAwZjMKLSNkZWZpbmUgQ0FOX0NNQVNLX1JYX1RYX0dFVAkweDAwNzMKLSNkZWZpbmUgQ0FOX0NNQVNLX0FMTAkJMHhmZgotI2RlZmluZSBDQU5fQ01BU0tfUkRXUgkJMHg4MAotI2RlZmluZSBDQU5fQ01BU0tfQVJCCQkweDIwCi0jZGVmaW5lIENBTl9DTUFTS19DVFJMCQkweDEwCi0jZGVmaW5lIENBTl9DTUFTS19NQVNLCQkweDQwCi0jZGVmaW5lIENBTl9DTUFTS19ORVdEQVQJMHgwNAotI2RlZmluZSBDQU5fQ01BU0tfQ0xSSU5UUE5ECTB4MDgKKyNkZWZpbmUgUENIX0NNQVNLX1JYX1RYX1NFVAkweDAwZjMKKyNkZWZpbmUgUENIX0NNQVNLX1JYX1RYX0dFVAkweDAwNzMKKyNkZWZpbmUgUENIX0NNQVNLX0FMTAkJMHhmZgorI2RlZmluZSBQQ0hfQ01BU0tfTkVXREFUCUJJVCgyKQorI2RlZmluZSBQQ0hfQ01BU0tfQ0xSSU5UUE5ECUJJVCgzKQorI2RlZmluZSBQQ0hfQ01BU0tfQ1RSTAkJQklUKDQpCisjZGVmaW5lIFBDSF9DTUFTS19BUkIJCUJJVCg1KQorI2RlZmluZSBQQ0hfQ01BU0tfTUFTSwkJQklUKDYpCisjZGVmaW5lIFBDSF9DTUFTS19SRFdSCQlCSVQoNykKKyNkZWZpbmUgUENIX0lGX01DT05UX05FV0RBVAlCSVQoMTUpCisjZGVmaW5lIFBDSF9JRl9NQ09OVF9NU0dMT1NUCUJJVCgxNCkKKyNkZWZpbmUgUENIX0lGX01DT05UX0lOVFBORAlCSVQoMTMpCisjZGVmaW5lIFBDSF9JRl9NQ09OVF9VTUFTSwlCSVQoMTIpCisjZGVmaW5lIFBDSF9JRl9NQ09OVF9UWElFCUJJVCgxMSkKKyNkZWZpbmUgUENIX0lGX01DT05UX1JYSUUJQklUKDEwKQorI2RlZmluZSBQQ0hfSUZfTUNPTlRfUk1URU4JQklUKDkpCisjZGVmaW5lIFBDSF9JRl9NQ09OVF9UWFJRWFQJQklUKDgpCisjZGVmaW5lIFBDSF9JRl9NQ09OVF9FT0IJQklUKDcpCisjZGVmaW5lIFBDSF9JRl9NQ09OVF9ETEMJKEJJVCgwKSB8IEJJVCgxKSB8IEJJVCgyKSB8IEJJVCgzKSkKKyNkZWZpbmUgUENIX01BU0syX01ESVJfTVhURAkoQklUKDE0KSB8IEJJVCgxNSkpCisjZGVmaW5lIFBDSF9JRDJfRElSCQlCSVQoMTMpCisjZGVmaW5lIFBDSF9JRDJfWFRECQlCSVQoMTQpCisjZGVmaW5lIFBDSF9JRF9NU0dWQUwJCUJJVCgxNSkKKyNkZWZpbmUgUENIX0lGX0NSRVFfQlVTWQlCSVQoMTUpCiAKLSNkZWZpbmUgQ0FOX0lGX01DT05UX05FV0RBVAkweDgwMDAKLSNkZWZpbmUgQ0FOX0lGX01DT05UX0lOVFBORAkweDIwMDAKLSNkZWZpbmUgQ0FOX0lGX01DT05UX1VNQVNLCTB4MTAwMAotI2RlZmluZSBDQU5fSUZfTUNPTlRfVFhJRQkweDA4MDAKLSNkZWZpbmUgQ0FOX0lGX01DT05UX1JYSUUJMHgwNDAwCi0jZGVmaW5lIENBTl9JRl9NQ09OVF9STVRFTgkweDAyMDAKLSNkZWZpbmUgQ0FOX0lGX01DT05UX1RYUlFYVAkweDAxMDAKLSNkZWZpbmUgQ0FOX0lGX01DT05UX0VPQgkweDAwODAKLSNkZWZpbmUgQ0FOX0lGX01DT05UX0RMQwkweDAwMGYKLSNkZWZpbmUgQ0FOX0lGX01DT05UX01TR0xPU1QJMHg0MDAwCi0jZGVmaW5lIENBTl9NQVNLMl9NRElSX01YVEQJMHhjMDAwCi0jZGVmaW5lIENBTl9JRDJfRElSCQkweDIwMDAKLSNkZWZpbmUgQ0FOX0lEX01TR1ZBTAkJMHg4MDAwCisjZGVmaW5lIFBDSF9TVEFUVVNfSU5UCQkweDgwMDAKKyNkZWZpbmUgUENIX1JFQwkJCTB4MDAwMDdmMDAKKyNkZWZpbmUgUENIX1RFQwkJCTB4MDAwMDAwZmYKIAotI2RlZmluZSBDQU5fU1RBVFVTX0lOVAkJMHg4MDAwCi0jZGVmaW5lIENBTl9JRl9DUkVRX0JVU1kJMHg4MDAwCi0jZGVmaW5lIENBTl9JRDJfWFRECQkweDQwMDAKLQotI2RlZmluZSBDQU5fUkVDCQkJMHgwMDAwN2YwMAotI2RlZmluZSBDQU5fVEVDCQkJMHgwMDAwMDBmZgotCi0jZGVmaW5lIFBDSF9SWF9PSwkJMHgwMDAwMDAxMAotI2RlZmluZSBQQ0hfVFhfT0sJCTB4MDAwMDAwMDgKLSNkZWZpbmUgUENIX0JVU19PRkYJCTB4MDAwMDAwODAKLSNkZWZpbmUgUENIX0VXQVJOCQkweDAwMDAwMDQwCi0jZGVmaW5lIFBDSF9FUEFTU0lWCQkweDAwMDAwMDIwCi0jZGVmaW5lIFBDSF9MRUMwCQkweDAwMDAwMDAxCi0jZGVmaW5lIFBDSF9MRUMxCQkweDAwMDAwMDAyCi0jZGVmaW5lIFBDSF9MRUMyCQkweDAwMDAwMDA0Ci0jZGVmaW5lIFBDSF9MRUNfQUxMCQkoUENIX0xFQzAgfCBQQ0hfTEVDMSB8IFBDSF9MRUMyKQotI2RlZmluZSBQQ0hfU1RVRl9FUlIJCVBDSF9MRUMwCi0jZGVmaW5lIFBDSF9GT1JNX0VSUgkJUENIX0xFQzEKLSNkZWZpbmUgUENIX0FDS19FUlIJCShQQ0hfTEVDMCB8IFBDSF9MRUMxKQotI2RlZmluZSBQQ0hfQklUMV9FUlIJCVBDSF9MRUMyCi0jZGVmaW5lIFBDSF9CSVQwX0VSUgkJKFBDSF9MRUMwIHwgUENIX0xFQzIpCi0jZGVmaW5lIFBDSF9DUkNfRVJSCQkoUENIX0xFQzEgfCBQQ0hfTEVDMikKKyNkZWZpbmUgUENIX1RYX09LCQlCSVQoMykKKyNkZWZpbmUgUENIX1JYX09LCQlCSVQoNCkKKyNkZWZpbmUgUENIX0VQQVNTSVYJCUJJVCg1KQorI2RlZmluZSBQQ0hfRVdBUk4JCUJJVCg2KQorI2RlZmluZSBQQ0hfQlVTX09GRgkJQklUKDcpCiAKIC8qIGJpdCBwb3NpdGlvbiBvZiBjZXJ0YWluIGNvbnRyb2xsZXIgYml0cy4gKi8KLSNkZWZpbmUgQklUX0JJVFRfQlJQCQkwCi0jZGVmaW5lIEJJVF9CSVRUX1NKVwkJNgotI2RlZmluZSBCSVRfQklUVF9UU0VHMQkJOAotI2RlZmluZSBCSVRfQklUVF9UU0VHMgkJMTIKLSNkZWZpbmUgQklUX0lGMV9NQ09OVF9SWElFCTEwCi0jZGVmaW5lIEJJVF9JRjJfTUNPTlRfVFhJRQkxMQotI2RlZmluZSBCSVRfQlJQRV9CUlBFCQk2Ci0jZGVmaW5lIEJJVF9FU19UWEVSUkNOVAkJMAotI2RlZmluZSBCSVRfRVNfUlhFUlJDTlQJCTgKLSNkZWZpbmUgTVNLX0JJVFRfQlJQCQkweDNmCi0jZGVmaW5lIE1TS19CSVRUX1NKVwkJMHhjMAotI2RlZmluZSBNU0tfQklUVF9UU0VHMQkJMHhmMDAKLSNkZWZpbmUgTVNLX0JJVFRfVFNFRzIJCTB4NzAwMAotI2RlZmluZSBNU0tfQlJQRV9CUlBFCQkweDNjMAotI2RlZmluZSBNU0tfQlJQRV9HRVQJCTB4MGYKLSNkZWZpbmUgTVNLX0NUUkxfSUVfU0lFX0VJRQkweDA3Ci0jZGVmaW5lIE1TS19NQ09OVF9UWElFCQkweDA4Ci0jZGVmaW5lIE1TS19NQ09OVF9SWElFCQkweDEwCi0jZGVmaW5lIFBDSF9DQU5fTk9fVFhfQlVGRgkxCi0jZGVmaW5lIENPVU5URVJfTElNSVQJCTEwCisjZGVmaW5lIFBDSF9CSVRfQlJQX1NISUZUCTAKKyNkZWZpbmUgUENIX0JJVF9TSldfU0hJRlQJNgorI2RlZmluZSBQQ0hfQklUX1RTRUcxX1NISUZUCTgKKyNkZWZpbmUgUENIX0JJVF9UU0VHMl9TSElGVAkxMgorI2RlZmluZSBQQ0hfQklUX0JSUEVfQlJQRV9TSElGVAk2CisKKyNkZWZpbmUgUENIX01TS19CSVRUX0JSUAkweDNmCisjZGVmaW5lIFBDSF9NU0tfQlJQRV9CUlBFCTB4M2MwCisjZGVmaW5lIFBDSF9NU0tfQ1RSTF9JRV9TSUVfRUlFCTB4MDcKKyNkZWZpbmUgUENIX0NPVU5URVJfTElNSVQJMTAKIAogI2RlZmluZSBQQ0hfQ0FOX0NMSwkJNTAwMDAwMDAJLyogNTBNSHogKi8KIAotLyogRGVmaW5lIHRoZSBudW1iZXIgb2YgbWVzc2FnZSBvYmplY3QuCisvKgorICogRGVmaW5lIHRoZSBudW1iZXIgb2YgbWVzc2FnZSBvYmplY3QuCiAgKiBQQ0ggQ0FOIGNvbW11bmljYXRpb25zIGFyZSBkb25lIHZpYSBNZXNzYWdlIFJBTS4KLSAqIFRoZSBNZXNzYWdlIFJBTSBjb25zaXN0cyBvZiAzMiBtZXNzYWdlIG9iamVjdHMuICovCi0jZGVmaW5lIFBDSF9SWF9PQkpfTlVNCQkyNiAgLyogMX4gUENIX1JYX09CSl9OVU0gaXMgUngqLwotI2RlZmluZSBQQ0hfVFhfT0JKX05VTQkJNiAgLyogUENIX1JYX09CSl9OVU0gaXMgUlggfiBUeCovCi0jZGVmaW5lIFBDSF9PQkpfTlVNCQkoUENIX1RYX09CSl9OVU0gKyBQQ0hfUlhfT0JKX05VTSkKKyAqIFRoZSBNZXNzYWdlIFJBTSBjb25zaXN0cyBvZiAzMiBtZXNzYWdlIG9iamVjdHMuCisgKi8KKyNkZWZpbmUgUENIX1JYX09CSl9OVU0JCTI2CisjZGVmaW5lIFBDSF9UWF9PQkpfTlVNCQk2CisjZGVmaW5lIFBDSF9SWF9PQkpfU1RBUlQJMQorI2RlZmluZSBQQ0hfUlhfT0JKX0VORAkJUENIX1JYX09CSl9OVU0KKyNkZWZpbmUgUENIX1RYX09CSl9TVEFSVAkoUENIX1JYX09CSl9FTkQgKyAxKQorI2RlZmluZSBQQ0hfVFhfT0JKX0VORAkJKFBDSF9SWF9PQkpfTlVNICsgUENIX1RYX09CSl9OVU0pCiAKICNkZWZpbmUgUENIX0ZJRk9fVEhSRVNICQkxNgogCisvKiBUeFJxc3QyIHNob3cgc3RhdHVzIG9mIE1zZ09iak5vLjE3fjMyICovCisjZGVmaW5lIFBDSF9UUkVRMl9UWF9NQVNLCSgoKDEgPDwgUENIX1RYX09CSl9OVU0pIC0gMSkgPDxcCisJCQkJCQkJKFBDSF9SWF9PQkpfRU5EIC0gMTYpKQorCitlbnVtIHBjaF9pZnJlZyB7CisJUENIX1JYX0lGUkVHLAorCVBDSF9UWF9JRlJFRywKK307CisKK2VudW0gcGNoX2Nhbl9lcnIgeworCVBDSF9TVFVGX0VSUiA9IDEsCisJUENIX0ZPUk1fRVJSLAorCVBDSF9BQ0tfRVJSLAorCVBDSF9CSVQxX0VSUiwKKwlQQ0hfQklUMF9FUlIsCisJUENIX0NSQ19FUlIsCisJUENIX0xFQ19BTEwsCit9OworCiBlbnVtIHBjaF9jYW5fbW9kZSB7CiAJUENIX0NBTl9FTkFCTEUsCiAJUENIX0NBTl9ESVNBQkxFLAogCVBDSF9DQU5fQUxMLAogCVBDSF9DQU5fTk9ORSwKIAlQQ0hfQ0FOX1NUT1AsCi0JUENIX0NBTl9SVU4KKwlQQ0hfQ0FOX1JVTiwKK307CisKK3N0cnVjdCBwY2hfY2FuX2lmX3JlZ3MgeworCXUzMiBjcmVxOworCXUzMiBjbWFzazsKKwl1MzIgbWFzazE7CisJdTMyIG1hc2syOworCXUzMiBpZDE7CisJdTMyIGlkMjsKKwl1MzIgbWNvbnQ7CisJdTMyIGRhdGFbNF07CisJdTMyIHJzdlsxM107CiB9OwogCiBzdHJ1Y3QgcGNoX2Nhbl9yZWdzIHsKQEAgLTE0Miw1NyArMTUxLDM2IEBACiAJdTMyIGludHI7CiAJdTMyIG9wdDsKIAl1MzIgYnJwZTsKLQl1MzIgcmVzZXJ2ZTE7Ci0JdTMyIGlmMV9jcmVxOwotCXUzMiBpZjFfY21hc2s7Ci0JdTMyIGlmMV9tYXNrMTsKLQl1MzIgaWYxX21hc2syOwotCXUzMiBpZjFfaWQxOwotCXUzMiBpZjFfaWQyOwotCXUzMiBpZjFfbWNvbnQ7Ci0JdTMyIGlmMV9kYXRhYTE7Ci0JdTMyIGlmMV9kYXRhYTI7Ci0JdTMyIGlmMV9kYXRhYjE7Ci0JdTMyIGlmMV9kYXRhYjI7Ci0JdTMyIHJlc2VydmUyOwotCXUzMiByZXNlcnZlM1sxMl07Ci0JdTMyIGlmMl9jcmVxOwotCXUzMiBpZjJfY21hc2s7Ci0JdTMyIGlmMl9tYXNrMTsKLQl1MzIgaWYyX21hc2syOwotCXUzMiBpZjJfaWQxOwotCXUzMiBpZjJfaWQyOwotCXUzMiBpZjJfbWNvbnQ7Ci0JdTMyIGlmMl9kYXRhYTE7Ci0JdTMyIGlmMl9kYXRhYTI7Ci0JdTMyIGlmMl9kYXRhYjE7Ci0JdTMyIGlmMl9kYXRhYjI7Ci0JdTMyIHJlc2VydmU0OwotCXUzMiByZXNlcnZlNVsyMF07CisJdTMyIHJlc2VydmU7CisJc3RydWN0IHBjaF9jYW5faWZfcmVncyBpZnJlZ3NbMl07IC8qIFswXT1pZjEgIFsxXT1pZjIgKi8KKwl1MzIgcmVzZXJ2ZTFbOF07CiAJdTMyIHRyZXExOwogCXUzMiB0cmVxMjsKLQl1MzIgcmVzZXJ2ZTZbMl07Ci0JdTMyIHJlc2VydmU3WzU2XTsKLQl1MzIgcmVzZXJ2ZThbM107CisJdTMyIHJlc2VydmUyWzZdOworCXUzMiBkYXRhMTsKKwl1MzIgZGF0YTI7CisJdTMyIHJlc2VydmUzWzZdOworCXUzMiBjYW5pcGVuZDE7CisJdTMyIGNhbmlwZW5kMjsKKwl1MzIgcmVzZXJ2ZTRbNl07CisJdTMyIGNhbm12YWwxOworCXUzMiBjYW5tdmFsMjsKKwl1MzIgcmVzZXJ2ZTVbMzddOwogCXUzMiBzcnN0OwogfTsKIAogc3RydWN0IHBjaF9jYW5fcHJpdiB7CiAJc3RydWN0IGNhbl9wcml2IGNhbjsKLQl1bnNpZ25lZCBpbnQgY2FuX251bTsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2OwotCXVuc2lnbmVkIGludCB0eF9lbmFibGVbTUFYX01TR19PQkpdOwotCXVuc2lnbmVkIGludCByeF9lbmFibGVbTUFYX01TR19PQkpdOwotCXVuc2lnbmVkIGludCByeF9saW5rW01BWF9NU0dfT0JKXTsKLQl1bnNpZ25lZCBpbnQgaW50X2VuYWJsZXM7Ci0JdW5zaWduZWQgaW50IGludF9zdGF0OworCXUzMiB0eF9lbmFibGVbUENIX1RYX09CSl9FTkRdOworCXUzMiByeF9lbmFibGVbUENIX1RYX09CSl9FTkRdOworCXUzMiByeF9saW5rW1BDSF9UWF9PQkpfRU5EXTsKKwl1MzIgaW50X2VuYWJsZXM7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7Ci0Jc3BpbmxvY2tfdCBtc2dpZl9yZWdfbG9jazsgLyogTWVzc2FnZSBJbnRlcmZhY2UgUmVnaXN0ZXJzIEFjY2VzcyBMb2NrKi8KLQl1bnNpZ25lZCBpbnQgbXNnX29ialtNQVhfTVNHX09CSl07CiAJc3RydWN0IHBjaF9jYW5fcmVncyBfX2lvbWVtICpyZWdzOwogCXN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpOwotCXVuc2lnbmVkIGludCB0eF9vYmo7CS8qIFBvaW50IG5leHQgVHggT2JqIGluZGV4ICovCi0JdW5zaWduZWQgaW50IHVzZV9tc2k7CisJaW50IHR4X29iajsJLyogUG9pbnQgbmV4dCBUeCBPYmogaW5kZXggKi8KKwlpbnQgdXNlX21zaTsKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2FuX2JpdHRpbWluZ19jb25zdCBwY2hfY2FuX2JpdHRpbWluZ19jb25zdCA9IHsKQEAgLTIyOCwxNSArMjE2LDE1IEBACiB7CiAJc3dpdGNoIChtb2RlKSB7CiAJY2FzZSBQQ0hfQ0FOX1JVTjoKLQkJcGNoX2Nhbl9iaXRfY2xlYXIoJnByaXYtPnJlZ3MtPmNvbnQsIENBTl9DVFJMX0lOSVQpOworCQlwY2hfY2FuX2JpdF9jbGVhcigmcHJpdi0+cmVncy0+Y29udCwgUENIX0NUUkxfSU5JVCk7CiAJCWJyZWFrOwogCiAJY2FzZSBQQ0hfQ0FOX1NUT1A6Ci0JCXBjaF9jYW5fYml0X3NldCgmcHJpdi0+cmVncy0+Y29udCwgQ0FOX0NUUkxfSU5JVCk7CisJCXBjaF9jYW5fYml0X3NldCgmcHJpdi0+cmVncy0+Y29udCwgUENIX0NUUkxfSU5JVCk7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJZGV2X2VycigmcHJpdi0+bmRldi0+ZGV2LCAiJXMgLT4gSW52YWxpZCBNb2RlLlxuIiwgX19mdW5jX18pOworCQluZXRkZXZfZXJyKHByaXYtPm5kZXYsICIlcyAtPiBJbnZhbGlkIE1vZGUuXG4iLCBfX2Z1bmNfXyk7CiAJCWJyZWFrOwogCX0KIH0KQEAgLTI0Niw2NiArMjM0LDIzIEBACiAJdTMyIHJlZ192YWwgPSBpb3JlYWQzMigmcHJpdi0+cmVncy0+b3B0KTsKIAogCWlmIChwcml2LT5jYW4uY3RybG1vZGUgJiBDQU5fQ1RSTE1PREVfTElTVEVOT05MWSkKLQkJcmVnX3ZhbCB8PSBDQU5fT1BUX1NJTEVOVDsKKwkJcmVnX3ZhbCB8PSBQQ0hfT1BUX1NJTEVOVDsKIAogCWlmIChwcml2LT5jYW4uY3RybG1vZGUgJiBDQU5fQ1RSTE1PREVfTE9PUEJBQ0spCi0JCXJlZ192YWwgfD0gQ0FOX09QVF9MQkFDSzsKKwkJcmVnX3ZhbCB8PSBQQ0hfT1BUX0xCQUNLOwogCi0JcGNoX2Nhbl9iaXRfc2V0KCZwcml2LT5yZWdzLT5jb250LCBDQU5fQ1RSTF9PUFQpOworCXBjaF9jYW5fYml0X3NldCgmcHJpdi0+cmVncy0+Y29udCwgUENIX0NUUkxfT1BUKTsKIAlpb3dyaXRlMzIocmVnX3ZhbCwgJnByaXYtPnJlZ3MtPm9wdCk7CiB9CiAKLXN0YXRpYyB2b2lkIHBjaF9jYW5fc2V0X2ludF9jdXN0b20oc3RydWN0IHBjaF9jYW5fcHJpdiAqcHJpdikKK3N0YXRpYyB2b2lkIHBjaF9jYW5fcndfbXNnX29iaih2b2lkIF9faW9tZW0gKmNyZXFfYWRkciwgdTMyIG51bSkKIHsKLQkvKiBDbGVhcmluZyB0aGUgSUUsIFNJRSBhbmQgRUlFIGJpdHMgb2YgQ2FuIGNvbnRyb2wgcmVnaXN0ZXIuICovCi0JcGNoX2Nhbl9iaXRfY2xlYXIoJnByaXYtPnJlZ3MtPmNvbnQsIENBTl9DVFJMX0lFX1NJRV9FSUUpOwotCi0JLyogQXBwcm9wcmlhdGVseSBzZXR0aW5nIHRoZW0uICovCi0JcGNoX2Nhbl9iaXRfc2V0KCZwcml2LT5yZWdzLT5jb250LAotCQkJKChwcml2LT5pbnRfZW5hYmxlcyAmIE1TS19DVFJMX0lFX1NJRV9FSUUpIDw8IDEpKTsKLX0KLQotLyogVGhpcyBmdW5jdGlvbiByZXRyaWV2ZXMgaW50ZXJydXB0IGVuYWJsZWQgZm9yIHRoZSBDQU4gZGV2aWNlLiAqLwotc3RhdGljIHZvaWQgcGNoX2Nhbl9nZXRfaW50X2VuYWJsZXMoc3RydWN0IHBjaF9jYW5fcHJpdiAqcHJpdiwgdTMyICplbmFibGVzKQotewotCS8qIE9idGFpbmluZyB0aGUgc3RhdHVzIG9mIElFLCBTSUUgYW5kIEVJRSBpbnRlcnJ1cHQgYml0cy4gKi8KLQkqZW5hYmxlcyA9ICgoaW9yZWFkMzIoJnByaXYtPnJlZ3MtPmNvbnQpICYgQ0FOX0NUUkxfSUVfU0lFX0VJRSkgPj4gMSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBjaF9jYW5fc2V0X2ludF9lbmFibGVzKHN0cnVjdCBwY2hfY2FuX3ByaXYgKnByaXYsCi0JCQkJICAgIGVudW0gcGNoX2Nhbl9tb2RlIGludGVycnVwdF9ubykKLXsKLQlzd2l0Y2ggKGludGVycnVwdF9ubykgewotCWNhc2UgUENIX0NBTl9FTkFCTEU6Ci0JCXBjaF9jYW5fYml0X3NldCgmcHJpdi0+cmVncy0+Y29udCwgQ0FOX0NUUkxfSUUpOwotCQlicmVhazsKLQotCWNhc2UgUENIX0NBTl9ESVNBQkxFOgotCQlwY2hfY2FuX2JpdF9jbGVhcigmcHJpdi0+cmVncy0+Y29udCwgQ0FOX0NUUkxfSUUpOwotCQlicmVhazsKLQotCWNhc2UgUENIX0NBTl9BTEw6Ci0JCXBjaF9jYW5fYml0X3NldCgmcHJpdi0+cmVncy0+Y29udCwgQ0FOX0NUUkxfSUVfU0lFX0VJRSk7Ci0JCWJyZWFrOwotCi0JY2FzZSBQQ0hfQ0FOX05PTkU6Ci0JCXBjaF9jYW5fYml0X2NsZWFyKCZwcml2LT5yZWdzLT5jb250LCBDQU5fQ1RSTF9JRV9TSUVfRUlFKTsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlkZXZfZXJyKCZwcml2LT5uZGV2LT5kZXYsICJJbnZhbGlkIGludGVycnVwdCBudW1iZXIuXG4iKTsKLQkJYnJlYWs7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBwY2hfY2FuX2NoZWNrX2lmX2J1c3kodTMyIF9faW9tZW0gKmNyZXFfYWRkciwgdTMyIG51bSkKLXsKLQl1MzIgY291bnRlciA9IENPVU5URVJfTElNSVQ7CisJaW50IGNvdW50ZXIgPSBQQ0hfQ09VTlRFUl9MSU1JVDsKIAl1MzIgaWZ4X2NyZXE7CiAKIAlpb3dyaXRlMzIobnVtLCBjcmVxX2FkZHIpOwogCXdoaWxlIChjb3VudGVyKSB7Ci0JCWlmeF9jcmVxID0gaW9yZWFkMzIoY3JlcV9hZGRyKSAmIENBTl9JRl9DUkVRX0JVU1k7CisJCWlmeF9jcmVxID0gaW9yZWFkMzIoY3JlcV9hZGRyKSAmIFBDSF9JRl9DUkVRX0JVU1k7CiAJCWlmICghaWZ4X2NyZXEpCiAJCQlicmVhazsKIAkJY291bnRlci0tOwpAQCAtMzE1LDI4OCArMjYwLDE1OCBAQAogCQlwcl9lcnIoIiVzOklGMSBCVVNZIEZsYWcgaXMgc2V0IGZvcmV2ZXIuXG4iLCBfX2Z1bmNfXyk7CiB9CiAKLXN0YXRpYyB2b2lkIHBjaF9jYW5fc2V0X3J4X2VuYWJsZShzdHJ1Y3QgcGNoX2Nhbl9wcml2ICpwcml2LCB1MzIgYnVmZl9udW0sCi0JCQkJICB1MzIgc2V0KQorc3RhdGljIHZvaWQgcGNoX2Nhbl9zZXRfaW50X2VuYWJsZXMoc3RydWN0IHBjaF9jYW5fcHJpdiAqcHJpdiwKKwkJCQkgICAgZW51bSBwY2hfY2FuX21vZGUgaW50ZXJydXB0X25vKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3dpdGNoIChpbnRlcnJ1cHRfbm8pIHsKKwljYXNlIFBDSF9DQU5fRElTQUJMRToKKwkJcGNoX2Nhbl9iaXRfY2xlYXIoJnByaXYtPnJlZ3MtPmNvbnQsIFBDSF9DVFJMX0lFKTsKKwkJYnJlYWs7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bXNnaWZfcmVnX2xvY2ssIGZsYWdzKTsKLQkvKiBSZWFkaW5nIHRoZSByZWNlaXZlIGJ1ZmZlciBkYXRhIGZyb20gUkFNIHRvIEludGVyZmFjZTEgcmVnaXN0ZXJzICovCi0JaW93cml0ZTMyKENBTl9DTUFTS19SWF9UWF9HRVQsICZwcml2LT5yZWdzLT5pZjFfY21hc2spOwotCXBjaF9jYW5fY2hlY2tfaWZfYnVzeSgmcHJpdi0+cmVncy0+aWYxX2NyZXEsIGJ1ZmZfbnVtKTsKKwljYXNlIFBDSF9DQU5fQUxMOgorCQlwY2hfY2FuX2JpdF9zZXQoJnByaXYtPnJlZ3MtPmNvbnQsIFBDSF9DVFJMX0lFX1NJRV9FSUUpOworCQlicmVhazsKIAotCS8qIFNldHRpbmcgdGhlIElGMU1BU0sxIHJlZ2lzdGVyIHRvIGFjY2VzcyBNc2dWYWwgYW5kIFJ4SUUgYml0cyAqLwotCWlvd3JpdGUzMihDQU5fQ01BU0tfUkRXUiB8IENBTl9DTUFTS19BUkIgfCBDQU5fQ01BU0tfQ1RSTCwKLQkJICAmcHJpdi0+cmVncy0+aWYxX2NtYXNrKTsKKwljYXNlIFBDSF9DQU5fTk9ORToKKwkJcGNoX2Nhbl9iaXRfY2xlYXIoJnByaXYtPnJlZ3MtPmNvbnQsIFBDSF9DVFJMX0lFX1NJRV9FSUUpOworCQlicmVhazsKIAotCWlmIChzZXQgPT0gRU5BQkxFKSB7Ci0JCS8qIFNldHRpbmcgdGhlIE1zZ1ZhbCBhbmQgUnhJRSBiaXRzICovCi0JCXBjaF9jYW5fYml0X3NldCgmcHJpdi0+cmVncy0+aWYxX21jb250LCBDQU5fSUZfTUNPTlRfUlhJRSk7Ci0JCXBjaF9jYW5fYml0X3NldCgmcHJpdi0+cmVncy0+aWYxX2lkMiwgQ0FOX0lEX01TR1ZBTCk7Ci0KLQl9IGVsc2UgaWYgKHNldCA9PSBESVNBQkxFKSB7Ci0JCS8qIFJlc2V0dGluZyB0aGUgTXNnVmFsIGFuZCBSeElFIGJpdHMgKi8KLQkJcGNoX2Nhbl9iaXRfY2xlYXIoJnByaXYtPnJlZ3MtPmlmMV9tY29udCwgQ0FOX0lGX01DT05UX1JYSUUpOwotCQlwY2hfY2FuX2JpdF9jbGVhcigmcHJpdi0+cmVncy0+aWYxX2lkMiwgQ0FOX0lEX01TR1ZBTCk7Ci0JfQotCi0JcGNoX2Nhbl9jaGVja19pZl9idXN5KCZwcml2LT5yZWdzLT5pZjFfY3JlcSwgYnVmZl9udW0pOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPm1zZ2lmX3JlZ19sb2NrLCBmbGFncyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBjaF9jYW5fcnhfZW5hYmxlX2FsbChzdHJ1Y3QgcGNoX2Nhbl9wcml2ICpwcml2KQotewotCWludCBpOwotCi0JLyogVHJhdmVyc2luZyB0byBvYnRhaW4gdGhlIG9iamVjdCBjb25maWd1cmVkIGFzIHJlY2VpdmVycy4gKi8KLQlmb3IgKGkgPSAwOyBpIDwgUENIX09CSl9OVU07IGkrKykgewotCQlpZiAocHJpdi0+bXNnX29ialtpXSA9PSBNU0dfT0JKX1JYKQotCQkJcGNoX2Nhbl9zZXRfcnhfZW5hYmxlKHByaXYsIGkgKyAxLCBFTkFCTEUpOworCWRlZmF1bHQ6CisJCW5ldGRldl9lcnIocHJpdi0+bmRldiwgIkludmFsaWQgaW50ZXJydXB0IG51bWJlci5cbiIpOworCQlicmVhazsKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIHBjaF9jYW5fcnhfZGlzYWJsZV9hbGwoc3RydWN0IHBjaF9jYW5fcHJpdiAqcHJpdikKK3N0YXRpYyB2b2lkIHBjaF9jYW5fc2V0X3J4dHgoc3RydWN0IHBjaF9jYW5fcHJpdiAqcHJpdiwgdTMyIGJ1ZmZfbnVtLAorCQkJICAgICBpbnQgc2V0LCBlbnVtIHBjaF9pZnJlZyBkaXIpCiB7Ci0JaW50IGk7CisJdTMyIGllOwogCi0JLyogVHJhdmVyc2luZyB0byBvYnRhaW4gdGhlIG9iamVjdCBjb25maWd1cmVkIGFzIHJlY2VpdmVycy4gKi8KLQlmb3IgKGkgPSAwOyBpIDwgUENIX09CSl9OVU07IGkrKykgewotCQlpZiAocHJpdi0+bXNnX29ialtpXSA9PSBNU0dfT0JKX1JYKQotCQkJcGNoX2Nhbl9zZXRfcnhfZW5hYmxlKHByaXYsIGkgKyAxLCBESVNBQkxFKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIHBjaF9jYW5fc2V0X3R4X2VuYWJsZShzdHJ1Y3QgcGNoX2Nhbl9wcml2ICpwcml2LCB1MzIgYnVmZl9udW0sCi0JCQkJIHUzMiBzZXQpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5tc2dpZl9yZWdfbG9jaywgZmxhZ3MpOwotCS8qIFJlYWRpbmcgdGhlIE1zZyBidWZmZXIgZnJvbSBNZXNzYWdlIFJBTSB0byBJbnRlcmZhY2UyIHJlZ2lzdGVycy4gKi8KLQlpb3dyaXRlMzIoQ0FOX0NNQVNLX1JYX1RYX0dFVCwgJnByaXYtPnJlZ3MtPmlmMl9jbWFzayk7Ci0JcGNoX2Nhbl9jaGVja19pZl9idXN5KCZwcml2LT5yZWdzLT5pZjJfY3JlcSwgYnVmZl9udW0pOwotCi0JLyogU2V0dGluZyB0aGUgSUYyQ01BU0sgcmVnaXN0ZXIgZm9yIGFjY2Vzc2luZyB0aGUKLQkJTXNnVmFsIGFuZCBUeElFIGJpdHMgKi8KLQlpb3dyaXRlMzIoQ0FOX0NNQVNLX1JEV1IgfCBDQU5fQ01BU0tfQVJCIHwgQ0FOX0NNQVNLX0NUUkwsCi0JCSAmcHJpdi0+cmVncy0+aWYyX2NtYXNrKTsKLQotCWlmIChzZXQgPT0gRU5BQkxFKSB7Ci0JCS8qIFNldHRpbmcgdGhlIE1zZ1ZhbCBhbmQgVHhJRSBiaXRzICovCi0JCXBjaF9jYW5fYml0X3NldCgmcHJpdi0+cmVncy0+aWYyX21jb250LCBDQU5fSUZfTUNPTlRfVFhJRSk7Ci0JCXBjaF9jYW5fYml0X3NldCgmcHJpdi0+cmVncy0+aWYyX2lkMiwgQ0FOX0lEX01TR1ZBTCk7Ci0JfSBlbHNlIGlmIChzZXQgPT0gRElTQUJMRSkgewotCQkvKiBSZXNldHRpbmcgdGhlIE1zZ1ZhbCBhbmQgVHhJRSBiaXRzLiAqLwotCQlwY2hfY2FuX2JpdF9jbGVhcigmcHJpdi0+cmVncy0+aWYyX21jb250LCBDQU5fSUZfTUNPTlRfVFhJRSk7Ci0JCXBjaF9jYW5fYml0X2NsZWFyKCZwcml2LT5yZWdzLT5pZjJfaWQyLCBDQU5fSURfTVNHVkFMKTsKLQl9Ci0KLQlwY2hfY2FuX2NoZWNrX2lmX2J1c3koJnByaXYtPnJlZ3MtPmlmMl9jcmVxLCBidWZmX251bSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bXNnaWZfcmVnX2xvY2ssIGZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQgcGNoX2Nhbl90eF9lbmFibGVfYWxsKHN0cnVjdCBwY2hfY2FuX3ByaXYgKnByaXYpCi17Ci0JaW50IGk7Ci0KLQkvKiBUcmF2ZXJzaW5nIHRvIG9idGFpbiB0aGUgb2JqZWN0IGNvbmZpZ3VyZWQgYXMgdHJhbnNtaXQgb2JqZWN0LiAqLwotCWZvciAoaSA9IDA7IGkgPCBQQ0hfT0JKX05VTTsgaSsrKSB7Ci0JCWlmIChwcml2LT5tc2dfb2JqW2ldID09IE1TR19PQkpfVFgpCi0JCQlwY2hfY2FuX3NldF90eF9lbmFibGUocHJpdiwgaSArIDEsIEVOQUJMRSk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBwY2hfY2FuX3R4X2Rpc2FibGVfYWxsKHN0cnVjdCBwY2hfY2FuX3ByaXYgKnByaXYpCi17Ci0JaW50IGk7Ci0KLQkvKiBUcmF2ZXJzaW5nIHRvIG9idGFpbiB0aGUgb2JqZWN0IGNvbmZpZ3VyZWQgYXMgdHJhbnNtaXQgb2JqZWN0LiAqLwotCWZvciAoaSA9IDA7IGkgPCBQQ0hfT0JKX05VTTsgaSsrKSB7Ci0JCWlmIChwcml2LT5tc2dfb2JqW2ldID09IE1TR19PQkpfVFgpCi0JCQlwY2hfY2FuX3NldF90eF9lbmFibGUocHJpdiwgaSArIDEsIERJU0FCTEUpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgcGNoX2Nhbl9nZXRfcnhfZW5hYmxlKHN0cnVjdCBwY2hfY2FuX3ByaXYgKnByaXYsIHUzMiBidWZmX251bSwKLQkJCQkgdTMyICplbmFibGUpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5tc2dpZl9yZWdfbG9jaywgZmxhZ3MpOwotCWlvd3JpdGUzMihDQU5fQ01BU0tfUlhfVFhfR0VULCAmcHJpdi0+cmVncy0+aWYxX2NtYXNrKTsKLQlwY2hfY2FuX2NoZWNrX2lmX2J1c3koJnByaXYtPnJlZ3MtPmlmMV9jcmVxLCBidWZmX251bSk7Ci0KLQlpZiAoKChpb3JlYWQzMigmcHJpdi0+cmVncy0+aWYxX2lkMikpICYgQ0FOX0lEX01TR1ZBTCkgJiYKLQkJCSgoaW9yZWFkMzIoJnByaXYtPnJlZ3MtPmlmMV9tY29udCkpICYKLQkJCUNBTl9JRl9NQ09OVF9SWElFKSkKLQkJKmVuYWJsZSA9IEVOQUJMRTsKKwlpZiAoZGlyKQorCQlpZSA9IFBDSF9JRl9NQ09OVF9UWElFOwogCWVsc2UKLQkJKmVuYWJsZSA9IERJU0FCTEU7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bXNnaWZfcmVnX2xvY2ssIGZsYWdzKTsKLX0KKwkJaWUgPSBQQ0hfSUZfTUNPTlRfUlhJRTsKIAotc3RhdGljIHZvaWQgcGNoX2Nhbl9nZXRfdHhfZW5hYmxlKHN0cnVjdCBwY2hfY2FuX3ByaXYgKnByaXYsIHUzMiBidWZmX251bSwKLQkJCQkgdTMyICplbmFibGUpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKKwkvKiBSZWFkaW5nIHRoZSBNc2cgYnVmZmVyIGZyb20gTWVzc2FnZSBSQU0gdG8gSUYxLzIgcmVnaXN0ZXJzLiAqLworCWlvd3JpdGUzMihQQ0hfQ01BU0tfUlhfVFhfR0VULCAmcHJpdi0+cmVncy0+aWZyZWdzW2Rpcl0uY21hc2spOworCXBjaF9jYW5fcndfbXNnX29iaigmcHJpdi0+cmVncy0+aWZyZWdzW2Rpcl0uY3JlcSwgYnVmZl9udW0pOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPm1zZ2lmX3JlZ19sb2NrLCBmbGFncyk7Ci0JaW93cml0ZTMyKENBTl9DTUFTS19SWF9UWF9HRVQsICZwcml2LT5yZWdzLT5pZjJfY21hc2spOwotCXBjaF9jYW5fY2hlY2tfaWZfYnVzeSgmcHJpdi0+cmVncy0+aWYyX2NyZXEsIGJ1ZmZfbnVtKTsKKwkvKiBTZXR0aW5nIHRoZSBJRjEvMk1BU0sxIHJlZ2lzdGVyIHRvIGFjY2VzcyBNc2dWYWwgYW5kIFJ4SUUgYml0cyAqLworCWlvd3JpdGUzMihQQ0hfQ01BU0tfUkRXUiB8IFBDSF9DTUFTS19BUkIgfCBQQ0hfQ01BU0tfQ1RSTCwKKwkJICAmcHJpdi0+cmVncy0+aWZyZWdzW2Rpcl0uY21hc2spOwogCi0JaWYgKCgoaW9yZWFkMzIoJnByaXYtPnJlZ3MtPmlmMl9pZDIpKSAmIENBTl9JRF9NU0dWQUwpICYmCi0JCQkoKGlvcmVhZDMyKCZwcml2LT5yZWdzLT5pZjJfbWNvbnQpKSAmCi0JCQlDQU5fSUZfTUNPTlRfVFhJRSkpIHsKLQkJKmVuYWJsZSA9IEVOQUJMRTsKKwlpZiAoc2V0KSB7CisJCS8qIFNldHRpbmcgdGhlIE1zZ1ZhbCBhbmQgUnhJRS9UeElFIGJpdHMgKi8KKwkJcGNoX2Nhbl9iaXRfc2V0KCZwcml2LT5yZWdzLT5pZnJlZ3NbZGlyXS5tY29udCwgaWUpOworCQlwY2hfY2FuX2JpdF9zZXQoJnByaXYtPnJlZ3MtPmlmcmVnc1tkaXJdLmlkMiwgUENIX0lEX01TR1ZBTCk7CiAJfSBlbHNlIHsKLQkJKmVuYWJsZSA9IERJU0FCTEU7CisJCS8qIENsZWFyaW5nIHRoZSBNc2dWYWwgYW5kIFJ4SUUvVHhJRSBiaXRzICovCisJCXBjaF9jYW5fYml0X2NsZWFyKCZwcml2LT5yZWdzLT5pZnJlZ3NbZGlyXS5tY29udCwgaWUpOworCQlwY2hfY2FuX2JpdF9jbGVhcigmcHJpdi0+cmVncy0+aWZyZWdzW2Rpcl0uaWQyLCBQQ0hfSURfTVNHVkFMKTsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bXNnaWZfcmVnX2xvY2ssIGZsYWdzKTsKKworCXBjaF9jYW5fcndfbXNnX29iaigmcHJpdi0+cmVncy0+aWZyZWdzW2Rpcl0uY3JlcSwgYnVmZl9udW0pOwogfQogCi1zdGF0aWMgaW50IHBjaF9jYW5faW50X3BlbmRpbmcoc3RydWN0IHBjaF9jYW5fcHJpdiAqcHJpdikKK3N0YXRpYyB2b2lkIHBjaF9jYW5fc2V0X3J4X2FsbChzdHJ1Y3QgcGNoX2Nhbl9wcml2ICpwcml2LCBpbnQgc2V0KQoreworCWludCBpOworCisJLyogVHJhdmVyc2luZyB0byBvYnRhaW4gdGhlIG9iamVjdCBjb25maWd1cmVkIGFzIHJlY2VpdmVycy4gKi8KKwlmb3IgKGkgPSBQQ0hfUlhfT0JKX1NUQVJUOyBpIDw9IFBDSF9SWF9PQkpfRU5EOyBpKyspCisJCXBjaF9jYW5fc2V0X3J4dHgocHJpdiwgaSwgc2V0LCBQQ0hfUlhfSUZSRUcpOworfQorCitzdGF0aWMgdm9pZCBwY2hfY2FuX3NldF90eF9hbGwoc3RydWN0IHBjaF9jYW5fcHJpdiAqcHJpdiwgaW50IHNldCkKK3sKKwlpbnQgaTsKKworCS8qIFRyYXZlcnNpbmcgdG8gb2J0YWluIHRoZSBvYmplY3QgY29uZmlndXJlZCBhcyB0cmFuc21pdCBvYmplY3QuICovCisJZm9yIChpID0gUENIX1RYX09CSl9TVEFSVDsgaSA8PSBQQ0hfVFhfT0JKX0VORDsgaSsrKQorCQlwY2hfY2FuX3NldF9yeHR4KHByaXYsIGksIHNldCwgUENIX1RYX0lGUkVHKTsKK30KKworc3RhdGljIHUzMiBwY2hfY2FuX2ludF9wZW5kaW5nKHN0cnVjdCBwY2hfY2FuX3ByaXYgKnByaXYpCiB7CiAJcmV0dXJuIGlvcmVhZDMyKCZwcml2LT5yZWdzLT5pbnRyKSAmIDB4ZmZmZjsKIH0KIAotc3RhdGljIHZvaWQgcGNoX2Nhbl9zZXRfcnhfYnVmZmVyX2xpbmsoc3RydWN0IHBjaF9jYW5fcHJpdiAqcHJpdiwKLQkJCQkgICAgICAgdTMyIGJ1ZmZlcl9udW0sIHUzMiBzZXQpCitzdGF0aWMgdm9pZCBwY2hfY2FuX2NsZWFyX2lmX2J1ZmZlcnMoc3RydWN0IHBjaF9jYW5fcHJpdiAqcHJpdikKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBpOyAvKiBNc2cgT2JqIElEICgxfjMyKSAqLwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPm1zZ2lmX3JlZ19sb2NrLCBmbGFncyk7Ci0JaW93cml0ZTMyKENBTl9DTUFTS19SWF9UWF9HRVQsICZwcml2LT5yZWdzLT5pZjFfY21hc2spOwotCXBjaF9jYW5fY2hlY2tfaWZfYnVzeSgmcHJpdi0+cmVncy0+aWYxX2NyZXEsIGJ1ZmZlcl9udW0pOwotCWlvd3JpdGUzMihDQU5fQ01BU0tfUkRXUiB8IENBTl9DTUFTS19DVFJMLCAmcHJpdi0+cmVncy0+aWYxX2NtYXNrKTsKLQlpZiAoc2V0ID09IEVOQUJMRSkKLQkJcGNoX2Nhbl9iaXRfY2xlYXIoJnByaXYtPnJlZ3MtPmlmMV9tY29udCwgQ0FOX0lGX01DT05UX0VPQik7Ci0JZWxzZQotCQlwY2hfY2FuX2JpdF9zZXQoJnByaXYtPnJlZ3MtPmlmMV9tY29udCwgQ0FOX0lGX01DT05UX0VPQik7Ci0KLQlwY2hfY2FuX2NoZWNrX2lmX2J1c3koJnByaXYtPnJlZ3MtPmlmMV9jcmVxLCBidWZmZXJfbnVtKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5tc2dpZl9yZWdfbG9jaywgZmxhZ3MpOwotfQotCi1zdGF0aWMgdm9pZCBwY2hfY2FuX2dldF9yeF9idWZmZXJfbGluayhzdHJ1Y3QgcGNoX2Nhbl9wcml2ICpwcml2LAotCQkJCSAgICAgICB1MzIgYnVmZmVyX251bSwgdTMyICpsaW5rKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bXNnaWZfcmVnX2xvY2ssIGZsYWdzKTsKLQlpb3dyaXRlMzIoQ0FOX0NNQVNLX1JYX1RYX0dFVCwgJnByaXYtPnJlZ3MtPmlmMV9jbWFzayk7Ci0JcGNoX2Nhbl9jaGVja19pZl9idXN5KCZwcml2LT5yZWdzLT5pZjFfY3JlcSwgYnVmZmVyX251bSk7Ci0KLQlpZiAoaW9yZWFkMzIoJnByaXYtPnJlZ3MtPmlmMV9tY29udCkgJiBDQU5fSUZfTUNPTlRfRU9CKQotCQkqbGluayA9IERJU0FCTEU7Ci0JZWxzZQotCQkqbGluayA9IEVOQUJMRTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5tc2dpZl9yZWdfbG9jaywgZmxhZ3MpOwotfQotCi1zdGF0aWMgdm9pZCBwY2hfY2FuX2NsZWFyX2J1ZmZlcnMoc3RydWN0IHBjaF9jYW5fcHJpdiAqcHJpdikKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBQQ0hfUlhfT0JKX05VTTsgaSsrKSB7Ci0JCWlvd3JpdGUzMihDQU5fQ01BU0tfUlhfVFhfU0VULCAmcHJpdi0+cmVncy0+aWYxX2NtYXNrKTsKLQkJaW93cml0ZTMyKDB4ZmZmZiwgJnByaXYtPnJlZ3MtPmlmMV9tYXNrMSk7Ci0JCWlvd3JpdGUzMigweGZmZmYsICZwcml2LT5yZWdzLT5pZjFfbWFzazIpOwotCQlpb3dyaXRlMzIoMHgwLCAmcHJpdi0+cmVncy0+aWYxX2lkMSk7Ci0JCWlvd3JpdGUzMigweDAsICZwcml2LT5yZWdzLT5pZjFfaWQyKTsKLQkJaW93cml0ZTMyKDB4MCwgJnByaXYtPnJlZ3MtPmlmMV9tY29udCk7Ci0JCWlvd3JpdGUzMigweDAsICZwcml2LT5yZWdzLT5pZjFfZGF0YWExKTsKLQkJaW93cml0ZTMyKDB4MCwgJnByaXYtPnJlZ3MtPmlmMV9kYXRhYTIpOwotCQlpb3dyaXRlMzIoMHgwLCAmcHJpdi0+cmVncy0+aWYxX2RhdGFiMSk7Ci0JCWlvd3JpdGUzMigweDAsICZwcml2LT5yZWdzLT5pZjFfZGF0YWIyKTsKLQkJaW93cml0ZTMyKENBTl9DTUFTS19SRFdSIHwgQ0FOX0NNQVNLX01BU0sgfAotCQkJICBDQU5fQ01BU0tfQVJCIHwgQ0FOX0NNQVNLX0NUUkwsCi0JCQkgICZwcml2LT5yZWdzLT5pZjFfY21hc2spOwotCQlwY2hfY2FuX2NoZWNrX2lmX2J1c3koJnByaXYtPnJlZ3MtPmlmMV9jcmVxLCBpKzEpOwotCX0KLQotCWZvciAoaSA9IGk7ICBpIDwgUENIX09CSl9OVU07IGkrKykgewotCQlpb3dyaXRlMzIoQ0FOX0NNQVNLX1JYX1RYX1NFVCwgJnByaXYtPnJlZ3MtPmlmMl9jbWFzayk7Ci0JCWlvd3JpdGUzMigweGZmZmYsICZwcml2LT5yZWdzLT5pZjJfbWFzazEpOwotCQlpb3dyaXRlMzIoMHhmZmZmLCAmcHJpdi0+cmVncy0+aWYyX21hc2syKTsKLQkJaW93cml0ZTMyKDB4MCwgJnByaXYtPnJlZ3MtPmlmMl9pZDEpOwotCQlpb3dyaXRlMzIoMHgwLCAmcHJpdi0+cmVncy0+aWYyX2lkMik7Ci0JCWlvd3JpdGUzMigweDAsICZwcml2LT5yZWdzLT5pZjJfbWNvbnQpOwotCQlpb3dyaXRlMzIoMHgwLCAmcHJpdi0+cmVncy0+aWYyX2RhdGFhMSk7Ci0JCWlvd3JpdGUzMigweDAsICZwcml2LT5yZWdzLT5pZjJfZGF0YWEyKTsKLQkJaW93cml0ZTMyKDB4MCwgJnByaXYtPnJlZ3MtPmlmMl9kYXRhYjEpOwotCQlpb3dyaXRlMzIoMHgwLCAmcHJpdi0+cmVncy0+aWYyX2RhdGFiMik7Ci0JCWlvd3JpdGUzMihDQU5fQ01BU0tfUkRXUiB8IENBTl9DTUFTS19NQVNLIHwKLQkJCSAgQ0FOX0NNQVNLX0FSQiB8IENBTl9DTUFTS19DVFJMLAotCQkJICAmcHJpdi0+cmVncy0+aWYyX2NtYXNrKTsKLQkJcGNoX2Nhbl9jaGVja19pZl9idXN5KCZwcml2LT5yZWdzLT5pZjJfY3JlcSwgaSsxKTsKKwlmb3IgKGkgPSBQQ0hfUlhfT0JKX1NUQVJUOyBpIDw9IFBDSF9UWF9PQkpfRU5EOyBpKyspIHsKKwkJaW93cml0ZTMyKFBDSF9DTUFTS19SWF9UWF9TRVQsICZwcml2LT5yZWdzLT5pZnJlZ3NbMF0uY21hc2spOworCQlpb3dyaXRlMzIoMHhmZmZmLCAmcHJpdi0+cmVncy0+aWZyZWdzWzBdLm1hc2sxKTsKKwkJaW93cml0ZTMyKDB4ZmZmZiwgJnByaXYtPnJlZ3MtPmlmcmVnc1swXS5tYXNrMik7CisJCWlvd3JpdGUzMigweDAsICZwcml2LT5yZWdzLT5pZnJlZ3NbMF0uaWQxKTsKKwkJaW93cml0ZTMyKDB4MCwgJnByaXYtPnJlZ3MtPmlmcmVnc1swXS5pZDIpOworCQlpb3dyaXRlMzIoMHgwLCAmcHJpdi0+cmVncy0+aWZyZWdzWzBdLm1jb250KTsKKwkJaW93cml0ZTMyKDB4MCwgJnByaXYtPnJlZ3MtPmlmcmVnc1swXS5kYXRhWzBdKTsKKwkJaW93cml0ZTMyKDB4MCwgJnByaXYtPnJlZ3MtPmlmcmVnc1swXS5kYXRhWzFdKTsKKwkJaW93cml0ZTMyKDB4MCwgJnByaXYtPnJlZ3MtPmlmcmVnc1swXS5kYXRhWzJdKTsKKwkJaW93cml0ZTMyKDB4MCwgJnByaXYtPnJlZ3MtPmlmcmVnc1swXS5kYXRhWzNdKTsKKwkJaW93cml0ZTMyKFBDSF9DTUFTS19SRFdSIHwgUENIX0NNQVNLX01BU0sgfAorCQkJICBQQ0hfQ01BU0tfQVJCIHwgUENIX0NNQVNLX0NUUkwsCisJCQkgICZwcml2LT5yZWdzLT5pZnJlZ3NbMF0uY21hc2spOworCQlwY2hfY2FuX3J3X21zZ19vYmooJnByaXYtPnJlZ3MtPmlmcmVnc1swXS5jcmVxLCBpKTsKIAl9CiB9CiAKIHN0YXRpYyB2b2lkIHBjaF9jYW5fY29uZmlnX3J4X3R4X2J1ZmZlcnMoc3RydWN0IHBjaF9jYW5fcHJpdiAqcHJpdikKIHsKIAlpbnQgaTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPm1zZ2lmX3JlZ19sb2NrLCBmbGFncyk7CisJZm9yIChpID0gUENIX1JYX09CSl9TVEFSVDsgaSA8PSBQQ0hfUlhfT0JKX0VORDsgaSsrKSB7CisJCWlvd3JpdGUzMihQQ0hfQ01BU0tfUlhfVFhfR0VULCAmcHJpdi0+cmVncy0+aWZyZWdzWzBdLmNtYXNrKTsKKwkJcGNoX2Nhbl9yd19tc2dfb2JqKCZwcml2LT5yZWdzLT5pZnJlZ3NbMF0uY3JlcSwgaSk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgUENIX09CSl9OVU07IGkrKykgewotCQlpZiAocHJpdi0+bXNnX29ialtpXSA9PSBNU0dfT0JKX1JYKSB7Ci0JCQlpb3dyaXRlMzIoQ0FOX0NNQVNLX1JYX1RYX0dFVCwKLQkJCQkmcHJpdi0+cmVncy0+aWYxX2NtYXNrKTsKLQkJCXBjaF9jYW5fY2hlY2tfaWZfYnVzeSgmcHJpdi0+cmVncy0+aWYxX2NyZXEsIGkrMSk7CisJCWlvd3JpdGUzMigweDAsICZwcml2LT5yZWdzLT5pZnJlZ3NbMF0uaWQxKTsKKwkJaW93cml0ZTMyKDB4MCwgJnByaXYtPnJlZ3MtPmlmcmVnc1swXS5pZDIpOwogCi0JCQlpb3dyaXRlMzIoMHgwLCAmcHJpdi0+cmVncy0+aWYxX2lkMSk7Ci0JCQlpb3dyaXRlMzIoMHgwLCAmcHJpdi0+cmVncy0+aWYxX2lkMik7CisJCXBjaF9jYW5fYml0X3NldCgmcHJpdi0+cmVncy0+aWZyZWdzWzBdLm1jb250LAorCQkJCVBDSF9JRl9NQ09OVF9VTUFTSyk7CiAKLQkJCXBjaF9jYW5fYml0X3NldCgmcHJpdi0+cmVncy0+aWYxX21jb250LAotCQkJCQlDQU5fSUZfTUNPTlRfVU1BU0spOworCQkvKiBJbiBjYXNlIEZJRk8gbW9kZSwgTGFzdCBFb0Igb2YgUnggT2JqIG11c3QgYmUgMSAqLworCQlpZiAoaSA9PSBQQ0hfUlhfT0JKX0VORCkKKwkJCXBjaF9jYW5fYml0X3NldCgmcHJpdi0+cmVncy0+aWZyZWdzWzBdLm1jb250LAorCQkJCQlQQ0hfSUZfTUNPTlRfRU9CKTsKKwkJZWxzZQorCQkJcGNoX2Nhbl9iaXRfY2xlYXIoJnByaXYtPnJlZ3MtPmlmcmVnc1swXS5tY29udCwKKwkJCQkJICBQQ0hfSUZfTUNPTlRfRU9CKTsKIAotCQkJLyogU2V0IEZJRk8gbW9kZSBzZXQgdG8gMCBleGNlcHQgbGFzdCBSeCBPYmoqLwotCQkJcGNoX2Nhbl9iaXRfY2xlYXIoJnByaXYtPnJlZ3MtPmlmMV9tY29udCwKLQkJCQkJICBDQU5fSUZfTUNPTlRfRU9CKTsKLQkJCS8qIEluIGNhc2UgRklGTyBtb2RlLCBMYXN0IEVvQiBvZiBSeCBPYmogbXVzdCBiZSAxICovCi0JCQlpZiAoaSA9PSAoUENIX1JYX09CSl9OVU0gLSAxKSkKLQkJCQlwY2hfY2FuX2JpdF9zZXQoJnByaXYtPnJlZ3MtPmlmMV9tY29udCwKLQkJCQkJCSAgQ0FOX0lGX01DT05UX0VPQik7CisJCWlvd3JpdGUzMigwLCAmcHJpdi0+cmVncy0+aWZyZWdzWzBdLm1hc2sxKTsKKwkJcGNoX2Nhbl9iaXRfY2xlYXIoJnByaXYtPnJlZ3MtPmlmcmVnc1swXS5tYXNrMiwKKwkJCQkgIDB4MWZmZiB8IFBDSF9NQVNLMl9NRElSX01YVEQpOwogCi0JCQlpb3dyaXRlMzIoMCwgJnByaXYtPnJlZ3MtPmlmMV9tYXNrMSk7Ci0JCQlwY2hfY2FuX2JpdF9jbGVhcigmcHJpdi0+cmVncy0+aWYxX21hc2syLAotCQkJCQkgIDB4MWZmZiB8IENBTl9NQVNLMl9NRElSX01YVEQpOworCQkvKiBTZXR0aW5nIENNQVNLIGZvciB3cml0aW5nICovCisJCWlvd3JpdGUzMihQQ0hfQ01BU0tfUkRXUiB8IFBDSF9DTUFTS19NQVNLIHwgUENIX0NNQVNLX0FSQiB8CisJCQkgIFBDSF9DTUFTS19DVFJMLCAmcHJpdi0+cmVncy0+aWZyZWdzWzBdLmNtYXNrKTsKIAotCQkJLyogU2V0dGluZyBDTUFTSyBmb3Igd3JpdGluZyAqLwotCQkJaW93cml0ZTMyKENBTl9DTUFTS19SRFdSIHwgQ0FOX0NNQVNLX01BU0sgfAotCQkJCSAgQ0FOX0NNQVNLX0FSQiB8IENBTl9DTUFTS19DVFJMLAotCQkJCSAgJnByaXYtPnJlZ3MtPmlmMV9jbWFzayk7Ci0KLQkJCXBjaF9jYW5fY2hlY2tfaWZfYnVzeSgmcHJpdi0+cmVncy0+aWYxX2NyZXEsIGkrMSk7Ci0JCX0gZWxzZSBpZiAocHJpdi0+bXNnX29ialtpXSA9PSBNU0dfT0JKX1RYKSB7Ci0JCQlpb3dyaXRlMzIoQ0FOX0NNQVNLX1JYX1RYX0dFVCwKLQkJCQkmcHJpdi0+cmVncy0+aWYyX2NtYXNrKTsKLQkJCXBjaF9jYW5fY2hlY2tfaWZfYnVzeSgmcHJpdi0+cmVncy0+aWYyX2NyZXEsIGkrMSk7Ci0KLQkJCS8qIFJlc2V0dGluZyBESVIgYml0IGZvciByZWNlcHRpb24gKi8KLQkJCWlvd3JpdGUzMigweDAsICZwcml2LT5yZWdzLT5pZjJfaWQxKTsKLQkJCWlvd3JpdGUzMigweDAsICZwcml2LT5yZWdzLT5pZjJfaWQyKTsKLQkJCXBjaF9jYW5fYml0X3NldCgmcHJpdi0+cmVncy0+aWYyX2lkMiwgQ0FOX0lEMl9ESVIpOwotCi0JCQkvKiBTZXR0aW5nIEVPQiBiaXQgZm9yIHRyYW5zbWl0dGVyICovCi0JCQlpb3dyaXRlMzIoQ0FOX0lGX01DT05UX0VPQiwgJnByaXYtPnJlZ3MtPmlmMl9tY29udCk7Ci0KLQkJCXBjaF9jYW5fYml0X3NldCgmcHJpdi0+cmVncy0+aWYyX21jb250LAotCQkJCQlDQU5fSUZfTUNPTlRfVU1BU0spOwotCi0JCQlpb3dyaXRlMzIoMCwgJnByaXYtPnJlZ3MtPmlmMl9tYXNrMSk7Ci0JCQlwY2hfY2FuX2JpdF9jbGVhcigmcHJpdi0+cmVncy0+aWYyX21hc2syLCAweDFmZmYpOwotCi0JCQkvKiBTZXR0aW5nIENNQVNLIGZvciB3cml0aW5nICovCi0JCQlpb3dyaXRlMzIoQ0FOX0NNQVNLX1JEV1IgfCBDQU5fQ01BU0tfTUFTSyB8Ci0JCQkJICBDQU5fQ01BU0tfQVJCIHwgQ0FOX0NNQVNLX0NUUkwsCi0JCQkJICAmcHJpdi0+cmVncy0+aWYyX2NtYXNrKTsKLQotCQkJcGNoX2Nhbl9jaGVja19pZl9idXN5KCZwcml2LT5yZWdzLT5pZjJfY3JlcSwgaSsxKTsKLQkJfQorCQlwY2hfY2FuX3J3X21zZ19vYmooJnByaXYtPnJlZ3MtPmlmcmVnc1swXS5jcmVxLCBpKTsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bXNnaWZfcmVnX2xvY2ssIGZsYWdzKTsKKworCWZvciAoaSA9IFBDSF9UWF9PQkpfU1RBUlQ7IGkgPD0gUENIX1RYX09CSl9FTkQ7IGkrKykgeworCQlpb3dyaXRlMzIoUENIX0NNQVNLX1JYX1RYX0dFVCwgJnByaXYtPnJlZ3MtPmlmcmVnc1sxXS5jbWFzayk7CisJCXBjaF9jYW5fcndfbXNnX29iaigmcHJpdi0+cmVncy0+aWZyZWdzWzFdLmNyZXEsIGkpOworCisJCS8qIFJlc2V0dGluZyBESVIgYml0IGZvciByZWNlcHRpb24gKi8KKwkJaW93cml0ZTMyKDB4MCwgJnByaXYtPnJlZ3MtPmlmcmVnc1sxXS5pZDEpOworCQlpb3dyaXRlMzIoUENIX0lEMl9ESVIsICZwcml2LT5yZWdzLT5pZnJlZ3NbMV0uaWQyKTsKKworCQkvKiBTZXR0aW5nIEVPQiBiaXQgZm9yIHRyYW5zbWl0dGVyICovCisJCWlvd3JpdGUzMihQQ0hfSUZfTUNPTlRfRU9CIHwgUENIX0lGX01DT05UX1VNQVNLLAorCQkJICAmcHJpdi0+cmVncy0+aWZyZWdzWzFdLm1jb250KTsKKworCQlpb3dyaXRlMzIoMCwgJnByaXYtPnJlZ3MtPmlmcmVnc1sxXS5tYXNrMSk7CisJCXBjaF9jYW5fYml0X2NsZWFyKCZwcml2LT5yZWdzLT5pZnJlZ3NbMV0ubWFzazIsIDB4MWZmZik7CisKKwkJLyogU2V0dGluZyBDTUFTSyBmb3Igd3JpdGluZyAqLworCQlpb3dyaXRlMzIoUENIX0NNQVNLX1JEV1IgfCBQQ0hfQ01BU0tfTUFTSyB8IFBDSF9DTUFTS19BUkIgfAorCQkJICBQQ0hfQ01BU0tfQ1RSTCwgJnByaXYtPnJlZ3MtPmlmcmVnc1sxXS5jbWFzayk7CisKKwkJcGNoX2Nhbl9yd19tc2dfb2JqKCZwcml2LT5yZWdzLT5pZnJlZ3NbMV0uY3JlcSwgaSk7CisJfQogfQogCiBzdGF0aWMgdm9pZCBwY2hfY2FuX2luaXQoc3RydWN0IHBjaF9jYW5fcHJpdiAqcHJpdikKQEAgLTYwNSw3ICs0MjAsNyBAQAogCXBjaF9jYW5fc2V0X3J1bl9tb2RlKHByaXYsIFBDSF9DQU5fU1RPUCk7CiAKIAkvKiBDbGVhcmluZyBhbGwgdGhlIG1lc3NhZ2Ugb2JqZWN0IGJ1ZmZlcnMuICovCi0JcGNoX2Nhbl9jbGVhcl9idWZmZXJzKHByaXYpOworCXBjaF9jYW5fY2xlYXJfaWZfYnVmZmVycyhwcml2KTsKIAogCS8qIENvbmZpZ3VyaW5nIHRoZSByZXNwZWN0aXZlIG1lc3NhZ2Ugb2JqZWN0IGFzIGVpdGhlciByeC90eCBvYmplY3QuICovCiAJcGNoX2Nhbl9jb25maWdfcnhfdHhfYnVmZmVycyhwcml2KTsKQEAgLTYyMyw1OSArNDM4LDQ5IEBACiAJcGNoX2Nhbl9zZXRfaW50X2VuYWJsZXMocHJpdiwgUENIX0NBTl9OT05FKTsKIAogCS8qIERpc2FibGluZyBhbGwgdGhlIHJlY2VpdmUgb2JqZWN0LiAqLwotCXBjaF9jYW5fcnhfZGlzYWJsZV9hbGwocHJpdik7CisJcGNoX2Nhbl9zZXRfcnhfYWxsKHByaXYsIDApOwogCiAJLyogRGlzYWJsaW5nIGFsbCB0aGUgdHJhbnNtaXQgb2JqZWN0LiAqLwotCXBjaF9jYW5fdHhfZGlzYWJsZV9hbGwocHJpdik7CisJcGNoX2Nhbl9zZXRfdHhfYWxsKHByaXYsIDApOwogfQogCiAvKiBUaGlzIGZ1bmN0aW9uIGNsZWFycyBpbnRlcnJ1cHQocykgZnJvbSB0aGUgQ0FOIGRldmljZS4gKi8KIHN0YXRpYyB2b2lkIHBjaF9jYW5faW50X2NscihzdHJ1Y3QgcGNoX2Nhbl9wcml2ICpwcml2LCB1MzIgbWFzaykKIHsKLQlpZiAobWFzayA9PSBDQU5fU1RBVFVTX0lOVCkgewotCQlpb3JlYWQzMigmcHJpdi0+cmVncy0+c3RhdCk7Ci0JCXJldHVybjsKLQl9Ci0KIAkvKiBDbGVhciBpbnRlcnJ1cHQgZm9yIHRyYW5zbWl0IG9iamVjdCAqLwotCWlmIChwcml2LT5tc2dfb2JqW21hc2sgLSAxXSA9PSBNU0dfT0JKX1RYKSB7Ci0JCS8qIFNldHRpbmcgQ01BU0sgZm9yIGNsZWFyaW5nIGludGVycnVwdHMgZm9yCi0JCQkJCSBmcmFtZSB0cmFuc21pc3Npb24uICovCi0JCWlvd3JpdGUzMihDQU5fQ01BU0tfUkRXUiB8IENBTl9DTUFTS19DVFJMIHwgQ0FOX0NNQVNLX0FSQiwKLQkJCSAgJnByaXYtPnJlZ3MtPmlmMl9jbWFzayk7Ci0KLQkJLyogUmVzZXR0aW5nIHRoZSBJRCByZWdpc3RlcnMuICovCi0JCXBjaF9jYW5fYml0X3NldCgmcHJpdi0+cmVncy0+aWYyX2lkMiwKLQkJCSAgICAgICBDQU5fSUQyX0RJUiB8ICgweDdmZiA8PCAyKSk7Ci0JCWlvd3JpdGUzMigweDAsICZwcml2LT5yZWdzLT5pZjJfaWQxKTsKLQotCQkvKiBDbGFyaW5nIE5ld0RhdCwgVHhScXN0ICYgSW50UG5kICovCi0JCXBjaF9jYW5fYml0X2NsZWFyKCZwcml2LT5yZWdzLT5pZjJfbWNvbnQsCi0JCQkJICBDQU5fSUZfTUNPTlRfTkVXREFUIHwgQ0FOX0lGX01DT05UX0lOVFBORCB8Ci0JCQkJICBDQU5fSUZfTUNPTlRfVFhSUVhUKTsKLQkJcGNoX2Nhbl9jaGVja19pZl9idXN5KCZwcml2LT5yZWdzLT5pZjJfY3JlcSwgbWFzayk7Ci0JfSBlbHNlIGlmIChwcml2LT5tc2dfb2JqW21hc2sgLSAxXSA9PSBNU0dfT0JKX1JYKSB7CisJaWYgKChtYXNrID49IFBDSF9SWF9PQkpfU1RBUlQpICYmIChtYXNrIDw9IFBDSF9SWF9PQkpfRU5EKSkgewogCQkvKiBTZXR0aW5nIENNQVNLIGZvciBjbGVhcmluZyB0aGUgcmVjZXB0aW9uIGludGVycnVwdHMuICovCi0JCWlvd3JpdGUzMihDQU5fQ01BU0tfUkRXUiB8IENBTl9DTUFTS19DVFJMIHwgQ0FOX0NNQVNLX0FSQiwKLQkJCSAgJnByaXYtPnJlZ3MtPmlmMV9jbWFzayk7CisJCWlvd3JpdGUzMihQQ0hfQ01BU0tfUkRXUiB8IFBDSF9DTUFTS19DVFJMIHwgUENIX0NNQVNLX0FSQiwKKwkJCSAgJnByaXYtPnJlZ3MtPmlmcmVnc1swXS5jbWFzayk7CiAKIAkJLyogQ2xlYXJpbmcgdGhlIERpciBiaXQuICovCi0JCXBjaF9jYW5fYml0X2NsZWFyKCZwcml2LT5yZWdzLT5pZjFfaWQyLCBDQU5fSUQyX0RJUik7CisJCXBjaF9jYW5fYml0X2NsZWFyKCZwcml2LT5yZWdzLT5pZnJlZ3NbMF0uaWQyLCBQQ0hfSUQyX0RJUik7CiAKIAkJLyogQ2xlYXJpbmcgTmV3RGF0ICYgSW50UG5kICovCi0JCXBjaF9jYW5fYml0X2NsZWFyKCZwcml2LT5yZWdzLT5pZjFfbWNvbnQsCi0JCQkJICBDQU5fSUZfTUNPTlRfTkVXREFUIHwgQ0FOX0lGX01DT05UX0lOVFBORCk7CisJCXBjaF9jYW5fYml0X2NsZWFyKCZwcml2LT5yZWdzLT5pZnJlZ3NbMF0ubWNvbnQsCisJCQkJICBQQ0hfSUZfTUNPTlRfTkVXREFUIHwgUENIX0lGX01DT05UX0lOVFBORCk7CiAKLQkJcGNoX2Nhbl9jaGVja19pZl9idXN5KCZwcml2LT5yZWdzLT5pZjFfY3JlcSwgbWFzayk7CisJCXBjaF9jYW5fcndfbXNnX29iaigmcHJpdi0+cmVncy0+aWZyZWdzWzBdLmNyZXEsIG1hc2spOworCX0gZWxzZSBpZiAoKG1hc2sgPj0gUENIX1RYX09CSl9TVEFSVCkgJiYgKG1hc2sgPD0gUENIX1RYX09CSl9FTkQpKSB7CisJCS8qCisJCSAqIFNldHRpbmcgQ01BU0sgZm9yIGNsZWFyaW5nIGludGVycnVwdHMgZm9yIGZyYW1lIHRyYW5zbWlzc2lvbi4KKwkJICovCisJCWlvd3JpdGUzMihQQ0hfQ01BU0tfUkRXUiB8IFBDSF9DTUFTS19DVFJMIHwgUENIX0NNQVNLX0FSQiwKKwkJCSAgJnByaXYtPnJlZ3MtPmlmcmVnc1sxXS5jbWFzayk7CisKKwkJLyogUmVzZXR0aW5nIHRoZSBJRCByZWdpc3RlcnMuICovCisJCXBjaF9jYW5fYml0X3NldCgmcHJpdi0+cmVncy0+aWZyZWdzWzFdLmlkMiwKKwkJCSAgICAgICBQQ0hfSUQyX0RJUiB8ICgweDdmZiA8PCAyKSk7CisJCWlvd3JpdGUzMigweDAsICZwcml2LT5yZWdzLT5pZnJlZ3NbMV0uaWQxKTsKKworCQkvKiBDbGFyaW5nIE5ld0RhdCwgVHhScXN0ICYgSW50UG5kICovCisJCXBjaF9jYW5fYml0X2NsZWFyKCZwcml2LT5yZWdzLT5pZnJlZ3NbMV0ubWNvbnQsCisJCQkJICBQQ0hfSUZfTUNPTlRfTkVXREFUIHwgUENIX0lGX01DT05UX0lOVFBORCB8CisJCQkJICBQQ0hfSUZfTUNPTlRfVFhSUVhUKTsKKwkJcGNoX2Nhbl9yd19tc2dfb2JqKCZwcml2LT5yZWdzLT5pZnJlZ3NbMV0uY3JlcSwgbWFzayk7CiAJfQogfQogCi1zdGF0aWMgaW50IHBjaF9jYW5fZ2V0X2J1ZmZlcl9zdGF0dXMoc3RydWN0IHBjaF9jYW5fcHJpdiAqcHJpdikKLXsKLQlyZXR1cm4gKGlvcmVhZDMyKCZwcml2LT5yZWdzLT50cmVxMSkgJiAweGZmZmYpIHwKLQkgICAgICAgKChpb3JlYWQzMigmcHJpdi0+cmVncy0+dHJlcTIpICYgMHhmZmZmKSA8PCAxNik7Ci19Ci0KIHN0YXRpYyB2b2lkIHBjaF9jYW5fcmVzZXQoc3RydWN0IHBjaF9jYW5fcHJpdiAqcHJpdikKIHsKIAkvKiB3cml0ZSB0byBzdyByZXNldCByZWdpc3RlciAqLwpAQCAtNjg4LDcgKzQ5Myw3IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgcGNoX2Nhbl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7CiAJc3RydWN0IGNhbl9mcmFtZSAqY2Y7Ci0JdTMyIGVycmM7CisJdTMyIGVycmMsIGxlYzsKIAlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmKHByaXYtPm5kZXYtPnN0YXRzKTsKIAllbnVtIGNhbl9zdGF0ZSBzdGF0ZSA9IHByaXYtPmNhbi5zdGF0ZTsKIApAQCAtNjk3LDI2ICs1MDIsMjQgQEAKIAkJcmV0dXJuOwogCiAJaWYgKHN0YXR1cyAmIFBDSF9CVVNfT0ZGKSB7Ci0JCXBjaF9jYW5fdHhfZGlzYWJsZV9hbGwocHJpdik7Ci0JCXBjaF9jYW5fcnhfZGlzYWJsZV9hbGwocHJpdik7CisJCXBjaF9jYW5fc2V0X3R4X2FsbChwcml2LCAwKTsKKwkJcGNoX2Nhbl9zZXRfcnhfYWxsKHByaXYsIDApOwogCQlzdGF0ZSA9IENBTl9TVEFURV9CVVNfT0ZGOwogCQljZi0+Y2FuX2lkIHw9IENBTl9FUlJfQlVTT0ZGOwogCQljYW5fYnVzX29mZihuZGV2KTsKLQkJcGNoX2Nhbl9zZXRfcnVuX21vZGUocHJpdiwgUENIX0NBTl9SVU4pOwotCQlkZXZfZXJyKCZuZGV2LT5kZXYsICIlcyAtPiBCdXMgT2ZmIG9jY3VycmVzLlxuIiwgX19mdW5jX18pOwogCX0KIAorCWVycmMgPSBpb3JlYWQzMigmcHJpdi0+cmVncy0+ZXJyYyk7CiAJLyogV2FybmluZyBpbnRlcnJ1cHQuICovCiAJaWYgKHN0YXR1cyAmIFBDSF9FV0FSTikgewogCQlzdGF0ZSA9IENBTl9TVEFURV9FUlJPUl9XQVJOSU5HOwogCQlwcml2LT5jYW4uY2FuX3N0YXRzLmVycm9yX3dhcm5pbmcrKzsKIAkJY2YtPmNhbl9pZCB8PSBDQU5fRVJSX0NSVEw7Ci0JCWVycmMgPSBpb3JlYWQzMigmcHJpdi0+cmVncy0+ZXJyYyk7Ci0JCWlmICgoKGVycmMgJiBDQU5fUkVDKSA+PiA4KSA+IDk2KQorCQlpZiAoKChlcnJjICYgUENIX1JFQykgPj4gOCkgPiA5NikKIAkJCWNmLT5kYXRhWzFdIHw9IENBTl9FUlJfQ1JUTF9SWF9XQVJOSU5HOwotCQlpZiAoKGVycmMgJiBDQU5fVEVDKSA+IDk2KQorCQlpZiAoKGVycmMgJiBQQ0hfVEVDKSA+IDk2KQogCQkJY2YtPmRhdGFbMV0gfD0gQ0FOX0VSUl9DUlRMX1RYX1dBUk5JTkc7Ci0JCWRldl93YXJuKCZuZGV2LT5kZXYsCisJCW5ldGRldl9kYmcobmRldiwKIAkJCSIlcyAtPiBFcnJvciBDb3VudGVyIGlzIG1vcmUgdGhhbiA5Ni5cbiIsIF9fZnVuY19fKTsKIAl9CiAJLyogRXJyb3IgcGFzc2l2ZSBpbnRlcnJ1cHQuICovCkBAIC03MjQsNDYgKzUyNyw1MiBAQAogCQlwcml2LT5jYW4uY2FuX3N0YXRzLmVycm9yX3Bhc3NpdmUrKzsKIAkJc3RhdGUgPSBDQU5fU1RBVEVfRVJST1JfUEFTU0lWRTsKIAkJY2YtPmNhbl9pZCB8PSBDQU5fRVJSX0NSVEw7Ci0JCWVycmMgPSBpb3JlYWQzMigmcHJpdi0+cmVncy0+ZXJyYyk7Ci0JCWlmICgoKGVycmMgJiBDQU5fUkVDKSA+PiA4KSA+IDEyNykKKwkJaWYgKCgoZXJyYyAmIFBDSF9SRUMpID4+IDgpID4gMTI3KQogCQkJY2YtPmRhdGFbMV0gfD0gQ0FOX0VSUl9DUlRMX1JYX1BBU1NJVkU7Ci0JCWlmICgoZXJyYyAmIENBTl9URUMpID4gMTI3KQorCQlpZiAoKGVycmMgJiBQQ0hfVEVDKSA+IDEyNykKIAkJCWNmLT5kYXRhWzFdIHw9IENBTl9FUlJfQ1JUTF9UWF9QQVNTSVZFOwotCQlkZXZfZXJyKCZuZGV2LT5kZXYsCisJCW5ldGRldl9kYmcobmRldiwKIAkJCSIlcyAtPiBDQU4gY29udHJvbGxlciBpcyBFUlJPUiBQQVNTSVZFIC5cbiIsIF9fZnVuY19fKTsKIAl9CiAKLQlpZiAoc3RhdHVzICYgUENIX0xFQ19BTEwpIHsKKwlsZWMgPSBzdGF0dXMgJiBQQ0hfTEVDX0FMTDsKKwlzd2l0Y2ggKGxlYykgeworCWNhc2UgUENIX1NUVUZfRVJSOgorCQljZi0+ZGF0YVsyXSB8PSBDQU5fRVJSX1BST1RfU1RVRkY7CiAJCXByaXYtPmNhbi5jYW5fc3RhdHMuYnVzX2Vycm9yKys7CiAJCXN0YXRzLT5yeF9lcnJvcnMrKzsKLQkJc3dpdGNoIChzdGF0dXMgJiBQQ0hfTEVDX0FMTCkgewotCQljYXNlIFBDSF9TVFVGX0VSUjoKLQkJCWNmLT5kYXRhWzJdIHw9IENBTl9FUlJfUFJPVF9TVFVGRjsKLQkJCWJyZWFrOwotCQljYXNlIFBDSF9GT1JNX0VSUjoKLQkJCWNmLT5kYXRhWzJdIHw9IENBTl9FUlJfUFJPVF9GT1JNOwotCQkJYnJlYWs7Ci0JCWNhc2UgUENIX0FDS19FUlI6Ci0JCQljZi0+ZGF0YVsyXSB8PSBDQU5fRVJSX1BST1RfTE9DX0FDSyB8Ci0JCQkJICAgICAgIENBTl9FUlJfUFJPVF9MT0NfQUNLX0RFTDsKLQkJCWJyZWFrOwotCQljYXNlIFBDSF9CSVQxX0VSUjoKLQkJY2FzZSBQQ0hfQklUMF9FUlI6Ci0JCQljZi0+ZGF0YVsyXSB8PSBDQU5fRVJSX1BST1RfQklUOwotCQkJYnJlYWs7Ci0JCWNhc2UgUENIX0NSQ19FUlI6Ci0JCQljZi0+ZGF0YVsyXSB8PSBDQU5fRVJSX1BST1RfTE9DX0NSQ19TRVEgfAotCQkJCSAgICAgICBDQU5fRVJSX1BST1RfTE9DX0NSQ19ERUw7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWlvd3JpdGUzMihzdGF0dXMgfCBQQ0hfTEVDX0FMTCwgJnByaXYtPnJlZ3MtPnN0YXQpOwotCQkJYnJlYWs7Ci0JCX0KLQorCQlicmVhazsKKwljYXNlIFBDSF9GT1JNX0VSUjoKKwkJY2YtPmRhdGFbMl0gfD0gQ0FOX0VSUl9QUk9UX0ZPUk07CisJCXByaXYtPmNhbi5jYW5fc3RhdHMuYnVzX2Vycm9yKys7CisJCXN0YXRzLT5yeF9lcnJvcnMrKzsKKwkJYnJlYWs7CisJY2FzZSBQQ0hfQUNLX0VSUjoKKwkJY2YtPmNhbl9pZCB8PSBDQU5fRVJSX0FDSzsKKwkJcHJpdi0+Y2FuLmNhbl9zdGF0cy5idXNfZXJyb3IrKzsKKwkJc3RhdHMtPnJ4X2Vycm9ycysrOworCQlicmVhazsKKwljYXNlIFBDSF9CSVQxX0VSUjoKKwljYXNlIFBDSF9CSVQwX0VSUjoKKwkJY2YtPmRhdGFbMl0gfD0gQ0FOX0VSUl9QUk9UX0JJVDsKKwkJcHJpdi0+Y2FuLmNhbl9zdGF0cy5idXNfZXJyb3IrKzsKKwkJc3RhdHMtPnJ4X2Vycm9ycysrOworCQlicmVhazsKKwljYXNlIFBDSF9DUkNfRVJSOgorCQljZi0+ZGF0YVsyXSB8PSBDQU5fRVJSX1BST1RfTE9DX0NSQ19TRVEgfAorCQkJICAgICAgIENBTl9FUlJfUFJPVF9MT0NfQ1JDX0RFTDsKKwkJcHJpdi0+Y2FuLmNhbl9zdGF0cy5idXNfZXJyb3IrKzsKKwkJc3RhdHMtPnJ4X2Vycm9ycysrOworCQlicmVhazsKKwljYXNlIFBDSF9MRUNfQUxMOiAvKiBXcml0dGVuIGJ5IENQVS4gTm8gZXJyb3Igc3RhdHVzICovCisJCWJyZWFrOwogCX0KIAorCWNmLT5kYXRhWzZdID0gZXJyYyAmIFBDSF9URUM7CisJY2YtPmRhdGFbN10gPSAoZXJyYyAmIFBDSF9SRUMpID4+IDg7CisKIAlwcml2LT5jYW4uc3RhdGUgPSBzdGF0ZTsKLQluZXRpZl9yeChza2IpOworCW5ldGlmX3JlY2VpdmVfc2tiKHNrYik7CiAKIAlzdGF0cy0+cnhfcGFja2V0cysrOwogCXN0YXRzLT5yeF9ieXRlcyArPSBjZi0+Y2FuX2RsYzsKQEAgLTc3NCwyMDQgKzU4MywyMDIgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWRldl9pZDsKIAlzdHJ1Y3QgcGNoX2Nhbl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7CiAKKwlpZiAoIXBjaF9jYW5faW50X3BlbmRpbmcocHJpdikpCisJCXJldHVybiBJUlFfTk9ORTsKKwogCXBjaF9jYW5fc2V0X2ludF9lbmFibGVzKHByaXYsIFBDSF9DQU5fTk9ORSk7Ci0KIAluYXBpX3NjaGVkdWxlKCZwcml2LT5uYXBpKTsKLQogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotc3RhdGljIGludCBwY2hfY2FuX3J4X25vcm1hbChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgdTMyIGludF9zdGF0KQorc3RhdGljIHZvaWQgcGNoX2ZpZm9fdGhyZXNoKHN0cnVjdCBwY2hfY2FuX3ByaXYgKnByaXYsIGludCBvYmpfaWQpCit7CisJaWYgKG9ial9pZCA8IFBDSF9GSUZPX1RIUkVTSCkgeworCQlpb3dyaXRlMzIoUENIX0NNQVNLX1JEV1IgfCBQQ0hfQ01BU0tfQ1RSTCB8CisJCQkgIFBDSF9DTUFTS19BUkIsICZwcml2LT5yZWdzLT5pZnJlZ3NbMF0uY21hc2spOworCisJCS8qIENsZWFyaW5nIHRoZSBEaXIgYml0LiAqLworCQlwY2hfY2FuX2JpdF9jbGVhcigmcHJpdi0+cmVncy0+aWZyZWdzWzBdLmlkMiwgUENIX0lEMl9ESVIpOworCisJCS8qIENsZWFyaW5nIE5ld0RhdCAmIEludFBuZCAqLworCQlwY2hfY2FuX2JpdF9jbGVhcigmcHJpdi0+cmVncy0+aWZyZWdzWzBdLm1jb250LAorCQkJCSAgUENIX0lGX01DT05UX0lOVFBORCk7CisJCXBjaF9jYW5fcndfbXNnX29iaigmcHJpdi0+cmVncy0+aWZyZWdzWzBdLmNyZXEsIG9ial9pZCk7CisJfSBlbHNlIGlmIChvYmpfaWQgPiBQQ0hfRklGT19USFJFU0gpIHsKKwkJcGNoX2Nhbl9pbnRfY2xyKHByaXYsIG9ial9pZCk7CisJfSBlbHNlIGlmIChvYmpfaWQgPT0gUENIX0ZJRk9fVEhSRVNIKSB7CisJCWludCBjbnQ7CisJCWZvciAoY250ID0gMDsgY250IDwgUENIX0ZJRk9fVEhSRVNIOyBjbnQrKykKKwkJCXBjaF9jYW5faW50X2Nscihwcml2LCBjbnQgKyAxKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHBjaF9jYW5fcnhfbXNnX2xvc3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGludCBvYmpfaWQpCit7CisJc3RydWN0IHBjaF9jYW5fcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICYocHJpdi0+bmRldi0+c3RhdHMpOworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGNhbl9mcmFtZSAqY2Y7CisKKwluZXRkZXZfZGJnKHByaXYtPm5kZXYsICJNc2cgT2JqIGlzIG92ZXJ3cml0dGVuLlxuIik7CisJcGNoX2Nhbl9iaXRfY2xlYXIoJnByaXYtPnJlZ3MtPmlmcmVnc1swXS5tY29udCwKKwkJCSAgUENIX0lGX01DT05UX01TR0xPU1QpOworCWlvd3JpdGUzMihQQ0hfQ01BU0tfUkRXUiB8IFBDSF9DTUFTS19DVFJMLAorCQkgICZwcml2LT5yZWdzLT5pZnJlZ3NbMF0uY21hc2spOworCXBjaF9jYW5fcndfbXNnX29iaigmcHJpdi0+cmVncy0+aWZyZWdzWzBdLmNyZXEsIG9ial9pZCk7CisKKwlza2IgPSBhbGxvY19jYW5fZXJyX3NrYihuZGV2LCAmY2YpOworCWlmICghc2tiKQorCQlyZXR1cm47CisKKwljZi0+Y2FuX2lkIHw9IENBTl9FUlJfQ1JUTDsKKwljZi0+ZGF0YVsxXSA9IENBTl9FUlJfQ1JUTF9SWF9PVkVSRkxPVzsKKwlzdGF0cy0+cnhfb3Zlcl9lcnJvcnMrKzsKKwlzdGF0cy0+cnhfZXJyb3JzKys7CisKKwluZXRpZl9yZWNlaXZlX3NrYihza2IpOworfQorCitzdGF0aWMgaW50IHBjaF9jYW5fcnhfbm9ybWFsKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCB1MzIgb2JqX251bSwgaW50IHF1b3RhKQogewogCXUzMiByZWc7CiAJY2FuaWRfdCBpZDsKLQl1MzIgaWRlOwotCXUzMiBydHI7Ci0JaW50IGksIGosIGs7CiAJaW50IHJjdl9wa3RzID0gMDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBjYW5fZnJhbWUgKmNmOwogCXN0cnVjdCBwY2hfY2FuX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmKHByaXYtPm5kZXYtPnN0YXRzKTsKKwlpbnQgaTsKKwl1MzIgaWQyOworCXUxNiBkYXRhX3JlZzsKIAotCS8qIFJlYWRpbmcgdGhlIG1lc3NzYWdlIG9iamVjdCBmcm9tIHRoZSBNZXNzYWdlIFJBTSAqLwotCWlvd3JpdGUzMihDQU5fQ01BU0tfUlhfVFhfR0VULCAmcHJpdi0+cmVncy0+aWYxX2NtYXNrKTsKLQlwY2hfY2FuX2NoZWNrX2lmX2J1c3koJnByaXYtPnJlZ3MtPmlmMV9jcmVxLCBpbnRfc3RhdCk7CisJZG8geworCQkvKiBSZWFkaW5nIHRoZSBtZXNzc2FnZSBvYmplY3QgZnJvbSB0aGUgTWVzc2FnZSBSQU0gKi8KKwkJaW93cml0ZTMyKFBDSF9DTUFTS19SWF9UWF9HRVQsICZwcml2LT5yZWdzLT5pZnJlZ3NbMF0uY21hc2spOworCQlwY2hfY2FuX3J3X21zZ19vYmooJnByaXYtPnJlZ3MtPmlmcmVnc1swXS5jcmVxLCBvYmpfbnVtKTsKIAotCS8qIFJlYWRpbmcgdGhlIE1DT05UIHJlZ2lzdGVyLiAqLwotCXJlZyA9IGlvcmVhZDMyKCZwcml2LT5yZWdzLT5pZjFfbWNvbnQpOwotCXJlZyAmPSAweGZmZmY7CisJCS8qIFJlYWRpbmcgdGhlIE1DT05UIHJlZ2lzdGVyLiAqLworCQlyZWcgPSBpb3JlYWQzMigmcHJpdi0+cmVncy0+aWZyZWdzWzBdLm1jb250KTsKIAotCWZvciAoayA9IGludF9zdGF0OyAhKHJlZyAmIENBTl9JRl9NQ09OVF9FT0IpOyBrKyspIHsKKwkJaWYgKHJlZyAmIFBDSF9JRl9NQ09OVF9FT0IpCisJCQlicmVhazsKKwogCQkvKiBJZiBNc2dMb3N0IGJpdCBzZXQuICovCi0JCWlmIChyZWcgJiBDQU5fSUZfTUNPTlRfTVNHTE9TVCkgewotCQkJZGV2X2VycigmcHJpdi0+bmRldi0+ZGV2LCAiTXNnIE9iaiBpcyBvdmVyd3JpdHRlbi5cbiIpOwotCQkJcGNoX2Nhbl9iaXRfY2xlYXIoJnByaXYtPnJlZ3MtPmlmMV9tY29udCwKLQkJCQkJICBDQU5fSUZfTUNPTlRfTVNHTE9TVCk7Ci0JCQlpb3dyaXRlMzIoQ0FOX0NNQVNLX1JEV1IgfCBDQU5fQ01BU0tfQ1RSTCwKLQkJCQkgICZwcml2LT5yZWdzLT5pZjFfY21hc2spOwotCQkJcGNoX2Nhbl9jaGVja19pZl9idXN5KCZwcml2LT5yZWdzLT5pZjFfY3JlcSwgayk7Ci0KLQkJCXNrYiA9IGFsbG9jX2Nhbl9lcnJfc2tiKG5kZXYsICZjZik7Ci0JCQlpZiAoIXNrYikKLQkJCQlyZXR1cm4gLUVOT01FTTsKLQotCQkJcHJpdi0+Y2FuLmNhbl9zdGF0cy5lcnJvcl9wYXNzaXZlKys7Ci0JCQlwcml2LT5jYW4uc3RhdGUgPSBDQU5fU1RBVEVfRVJST1JfUEFTU0lWRTsKLQkJCWNmLT5jYW5faWQgfD0gQ0FOX0VSUl9DUlRMOwotCQkJY2YtPmRhdGFbMV0gfD0gQ0FOX0VSUl9DUlRMX1JYX09WRVJGTE9XOwotCQkJY2YtPmRhdGFbMl0gfD0gQ0FOX0VSUl9QUk9UX09WRVJMT0FEOwotCQkJc3RhdHMtPnJ4X3BhY2tldHMrKzsKLQkJCXN0YXRzLT5yeF9ieXRlcyArPSBjZi0+Y2FuX2RsYzsKLQotCQkJbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKKwkJaWYgKHJlZyAmIFBDSF9JRl9NQ09OVF9NU0dMT1NUKSB7CisJCQlwY2hfY2FuX3J4X21zZ19sb3N0KG5kZXYsIG9ial9udW0pOwogCQkJcmN2X3BrdHMrKzsKLQkJCWdvdG8gUlhfTkVYVDsKKwkJCXF1b3RhLS07CisJCQlvYmpfbnVtKys7CisJCQljb250aW51ZTsKKwkJfSBlbHNlIGlmICghKHJlZyAmIFBDSF9JRl9NQ09OVF9ORVdEQVQpKSB7CisJCQlvYmpfbnVtKys7CisJCQljb250aW51ZTsKIAkJfQotCQlpZiAoIShyZWcgJiBDQU5fSUZfTUNPTlRfTkVXREFUKSkKLQkJCWdvdG8gUlhfTkVYVDsKIAogCQlza2IgPSBhbGxvY19jYW5fc2tiKHByaXYtPm5kZXYsICZjZik7Ci0JCWlmICghc2tiKQotCQkJcmV0dXJuIC1FTk9NRU07CisJCWlmICghc2tiKSB7CisJCQluZXRkZXZfZXJyKG5kZXYsICJhbGxvY19jYW5fc2tiIEZhaWxlZFxuIik7CisJCQlyZXR1cm4gcmN2X3BrdHM7CisJCX0KIAogCQkvKiBHZXQgUmVjZWl2ZWQgZGF0YSAqLwotCQlpZGUgPSAoKGlvcmVhZDMyKCZwcml2LT5yZWdzLT5pZjFfaWQyKSkgJiBDQU5fSUQyX1hURCkgPj4gMTQ7Ci0JCWlmIChpZGUpIHsKLQkJCWlkID0gKGlvcmVhZDMyKCZwcml2LT5yZWdzLT5pZjFfaWQxKSAmIDB4ZmZmZik7Ci0JCQlpZCB8PSAoKChpb3JlYWQzMigmcHJpdi0+cmVncy0+aWYxX2lkMikpICYKLQkJCQkJICAgIDB4MWZmZikgPDwgMTYpOwotCQkJY2YtPmNhbl9pZCA9IChpZCAmIENBTl9FRkZfTUFTSykgfCBDQU5fRUZGX0ZMQUc7CisJCWlkMiA9IGlvcmVhZDMyKCZwcml2LT5yZWdzLT5pZnJlZ3NbMF0uaWQyKTsKKwkJaWYgKGlkMiAmIFBDSF9JRDJfWFREKSB7CisJCQlpZCA9IChpb3JlYWQzMigmcHJpdi0+cmVncy0+aWZyZWdzWzBdLmlkMSkgJiAweGZmZmYpOworCQkJaWQgfD0gKCgoaWQyKSAmIDB4MWZmZikgPDwgMTYpOworCQkJY2YtPmNhbl9pZCA9IGlkIHwgQ0FOX0VGRl9GTEFHOwogCQl9IGVsc2UgewotCQkJaWQgPSAoKChpb3JlYWQzMigmcHJpdi0+cmVncy0+aWYxX2lkMikpICYKLQkJCQkJICAoQ0FOX1NGRl9NQVNLIDw8IDIpKSA+PiAyKTsKLQkJCWNmLT5jYW5faWQgPSAoaWQgJiBDQU5fU0ZGX01BU0spOworCQkJaWQgPSAoaWQyID4+IDIpICYgQ0FOX1NGRl9NQVNLOworCQkJY2YtPmNhbl9pZCA9IGlkOwogCQl9CiAKLQkJcnRyID0gKGlvcmVhZDMyKCZwcml2LT5yZWdzLT5pZjFfaWQyKSAmICBDQU5fSUQyX0RJUik7Ci0JCWlmIChydHIpIHsKLQkJCWNmLT5jYW5fZGxjID0gMDsKKwkJaWYgKGlkMiAmIFBDSF9JRDJfRElSKQogCQkJY2YtPmNhbl9pZCB8PSBDQU5fUlRSX0ZMQUc7Ci0JCX0gZWxzZSB7Ci0JCQljZi0+Y2FuX2RsYyA9ICgoaW9yZWFkMzIoJnByaXYtPnJlZ3MtPmlmMV9tY29udCkpICYKLQkJCQkJCSAgIDB4MGYpOwotCQl9CiAKLQkJZm9yIChpID0gMCwgaiA9IDA7IGkgPCBjZi0+Y2FuX2RsYzsgaisrKSB7Ci0JCQlyZWcgPSBpb3JlYWQzMigmcHJpdi0+cmVncy0+aWYxX2RhdGFhMSArIGoqNCk7Ci0JCQljZi0+ZGF0YVtpKytdID0gY3B1X3RvX2xlMzIocmVnICYgMHhmZik7Ci0JCQlpZiAoaSA9PSBjZi0+Y2FuX2RsYykKLQkJCQlicmVhazsKLQkJCWNmLT5kYXRhW2krK10gPSBjcHVfdG9fbGUzMigocmVnID4+IDgpICYgMHhmZik7CisJCWNmLT5jYW5fZGxjID0gZ2V0X2Nhbl9kbGMoKGlvcmVhZDMyKCZwcml2LT5yZWdzLT4KKwkJCQkJCSAgICBpZnJlZ3NbMF0ubWNvbnQpKSAmIDB4Rik7CisKKwkJZm9yIChpID0gMDsgaSA8IGNmLT5jYW5fZGxjOyBpICs9IDIpIHsKKwkJCWRhdGFfcmVnID0gaW9yZWFkMTYoJnByaXYtPnJlZ3MtPmlmcmVnc1swXS5kYXRhW2kgLyAyXSk7CisJCQljZi0+ZGF0YVtpXSA9IGRhdGFfcmVnOworCQkJY2YtPmRhdGFbaSArIDFdID0gZGF0YV9yZWcgPj4gODsKIAkJfQogCiAJCW5ldGlmX3JlY2VpdmVfc2tiKHNrYik7CiAJCXJjdl9wa3RzKys7CiAJCXN0YXRzLT5yeF9wYWNrZXRzKys7CisJCXF1b3RhLS07CiAJCXN0YXRzLT5yeF9ieXRlcyArPSBjZi0+Y2FuX2RsYzsKIAotCQlpZiAoayA8IFBDSF9GSUZPX1RIUkVTSCkgewotCQkJaW93cml0ZTMyKENBTl9DTUFTS19SRFdSIHwgQ0FOX0NNQVNLX0NUUkwgfAotCQkJCSAgQ0FOX0NNQVNLX0FSQiwgJnByaXYtPnJlZ3MtPmlmMV9jbWFzayk7Ci0KLQkJCS8qIENsZWFyaW5nIHRoZSBEaXIgYml0LiAqLwotCQkJcGNoX2Nhbl9iaXRfY2xlYXIoJnByaXYtPnJlZ3MtPmlmMV9pZDIsIENBTl9JRDJfRElSKTsKLQotCQkJLyogQ2xlYXJpbmcgTmV3RGF0ICYgSW50UG5kICovCi0JCQlwY2hfY2FuX2JpdF9jbGVhcigmcHJpdi0+cmVncy0+aWYxX21jb250LAotCQkJCQkgIENBTl9JRl9NQ09OVF9JTlRQTkQpOwotCQkJcGNoX2Nhbl9jaGVja19pZl9idXN5KCZwcml2LT5yZWdzLT5pZjFfY3JlcSwgayk7Ci0JCX0gZWxzZSBpZiAoayA+IFBDSF9GSUZPX1RIUkVTSCkgewotCQkJcGNoX2Nhbl9pbnRfY2xyKHByaXYsIGspOwotCQl9IGVsc2UgaWYgKGsgPT0gUENIX0ZJRk9fVEhSRVNIKSB7Ci0JCQlpbnQgY250OwotCQkJZm9yIChjbnQgPSAwOyBjbnQgPCBQQ0hfRklGT19USFJFU0g7IGNudCsrKQotCQkJCXBjaF9jYW5faW50X2Nscihwcml2LCBjbnQrMSk7Ci0JCX0KLVJYX05FWFQ6Ci0JCS8qIFJlYWRpbmcgdGhlIG1lc3NzYWdlIG9iamVjdCBmcm9tIHRoZSBNZXNzYWdlIFJBTSAqLwotCQlpb3dyaXRlMzIoQ0FOX0NNQVNLX1JYX1RYX0dFVCwgJnByaXYtPnJlZ3MtPmlmMV9jbWFzayk7Ci0JCXBjaF9jYW5fY2hlY2tfaWZfYnVzeSgmcHJpdi0+cmVncy0+aWYxX2NyZXEsIGsgKyAxKTsKLQkJcmVnID0gaW9yZWFkMzIoJnByaXYtPnJlZ3MtPmlmMV9tY29udCk7Ci0JfQorCQlwY2hfZmlmb190aHJlc2gocHJpdiwgb2JqX251bSk7CisJCW9ial9udW0rKzsKKwl9IHdoaWxlIChxdW90YSA+IDApOwogCiAJcmV0dXJuIHJjdl9wa3RzOwogfQotc3RhdGljIGludCBwY2hfY2FuX3J4X3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgcXVvdGEpCisKK3N0YXRpYyB2b2lkIHBjaF9jYW5fdHhfY29tcGxldGUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHUzMiBpbnRfc3RhdCkKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IG5hcGktPmRldjsKIAlzdHJ1Y3QgcGNoX2Nhbl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7CiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJihwcml2LT5uZGV2LT5zdGF0cyk7CiAJdTMyIGRsYzsKKworCWNhbl9nZXRfZWNob19za2IobmRldiwgaW50X3N0YXQgLSBQQ0hfUlhfT0JKX0VORCAtIDEpOworCWlvd3JpdGUzMihQQ0hfQ01BU0tfUlhfVFhfR0VUIHwgUENIX0NNQVNLX0NMUklOVFBORCwKKwkJICAmcHJpdi0+cmVncy0+aWZyZWdzWzFdLmNtYXNrKTsKKwlwY2hfY2FuX3J3X21zZ19vYmooJnByaXYtPnJlZ3MtPmlmcmVnc1sxXS5jcmVxLCBpbnRfc3RhdCk7CisJZGxjID0gZ2V0X2Nhbl9kbGMoaW9yZWFkMzIoJnByaXYtPnJlZ3MtPmlmcmVnc1sxXS5tY29udCkgJgorCQkJICBQQ0hfSUZfTUNPTlRfRExDKTsKKwlzdGF0cy0+dHhfYnl0ZXMgKz0gZGxjOworCXN0YXRzLT50eF9wYWNrZXRzKys7CisJaWYgKGludF9zdGF0ID09IFBDSF9UWF9PQkpfRU5EKQorCQluZXRpZl93YWtlX3F1ZXVlKG5kZXYpOworfQorCitzdGF0aWMgaW50IHBjaF9jYW5fcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBxdW90YSkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IG5hcGktPmRldjsKKwlzdHJ1Y3QgcGNoX2Nhbl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7CiAJdTMyIGludF9zdGF0OwotCWludCByY3ZfcGt0cyA9IDA7CiAJdTMyIHJlZ19zdGF0OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHF1b3RhX3NhdmUgPSBxdW90YTsKIAogCWludF9zdGF0ID0gcGNoX2Nhbl9pbnRfcGVuZGluZyhwcml2KTsKIAlpZiAoIWludF9zdGF0KQotCQlyZXR1cm4gMDsKKwkJZ290byBlbmQ7CiAKLUlOVF9TVEFUOgotCWlmIChpbnRfc3RhdCA9PSBDQU5fU1RBVFVTX0lOVCkgeworCWlmIChpbnRfc3RhdCA9PSBQQ0hfU1RBVFVTX0lOVCkgewogCQlyZWdfc3RhdCA9IGlvcmVhZDMyKCZwcml2LT5yZWdzLT5zdGF0KTsKLQkJaWYgKHJlZ19zdGF0ICYgKFBDSF9CVVNfT0ZGIHwgUENIX0xFQ19BTEwpKSB7Ci0JCQlpZiAoKHJlZ19zdGF0ICYgUENIX0xFQ19BTEwpICE9IFBDSF9MRUNfQUxMKQotCQkJCXBjaF9jYW5fZXJyb3IobmRldiwgcmVnX3N0YXQpOworCisJCWlmICgocmVnX3N0YXQgJiAoUENIX0JVU19PRkYgfCBQQ0hfTEVDX0FMTCkpICYmCisJCSAgICgocmVnX3N0YXQgJiBQQ0hfTEVDX0FMTCkgIT0gUENIX0xFQ19BTEwpKSB7CisJCQlwY2hfY2FuX2Vycm9yKG5kZXYsIHJlZ19zdGF0KTsKKwkJCXF1b3RhLS07CiAJCX0KIAotCQlpZiAocmVnX3N0YXQgJiBQQ0hfVFhfT0spIHsKLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5tc2dpZl9yZWdfbG9jaywgZmxhZ3MpOwotCQkJaW93cml0ZTMyKENBTl9DTUFTS19SWF9UWF9HRVQsICZwcml2LT5yZWdzLT5pZjJfY21hc2spOwotCQkJcGNoX2Nhbl9jaGVja19pZl9idXN5KCZwcml2LT5yZWdzLT5pZjJfY3JlcSwKLQkJCQkJICAgICAgIGlvcmVhZDMyKCZwcml2LT5yZWdzLT5pbnRyKSk7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5tc2dpZl9yZWdfbG9jaywgZmxhZ3MpOwotCQkJcGNoX2Nhbl9iaXRfY2xlYXIoJnByaXYtPnJlZ3MtPnN0YXQsIFBDSF9UWF9PSyk7Ci0JCX0KLQotCQlpZiAocmVnX3N0YXQgJiBQQ0hfUlhfT0spCi0JCQlwY2hfY2FuX2JpdF9jbGVhcigmcHJpdi0+cmVncy0+c3RhdCwgUENIX1JYX09LKTsKKwkJaWYgKHJlZ19zdGF0ICYgKFBDSF9UWF9PSyB8IFBDSF9SWF9PSykpCisJCQlwY2hfY2FuX2JpdF9jbGVhcigmcHJpdi0+cmVncy0+c3RhdCwKKwkJCQkJICByZWdfc3RhdCAmIChQQ0hfVFhfT0sgfCBQQ0hfUlhfT0spKTsKIAogCQlpbnRfc3RhdCA9IHBjaF9jYW5faW50X3BlbmRpbmcocHJpdik7Ci0JCWlmIChpbnRfc3RhdCA9PSBDQU5fU1RBVFVTX0lOVCkKLQkJCWdvdG8gSU5UX1NUQVQ7CiAJfQogCi1NU0dfT0JKOgotCWlmICgoaW50X3N0YXQgPj0gMSkgJiYgKGludF9zdGF0IDw9IFBDSF9SWF9PQkpfTlVNKSkgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bXNnaWZfcmVnX2xvY2ssIGZsYWdzKTsKLQkJcmN2X3BrdHMgPSBwY2hfY2FuX3J4X25vcm1hbChuZGV2LCBpbnRfc3RhdCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPm1zZ2lmX3JlZ19sb2NrLCBmbGFncyk7Ci0JCWlmIChyY3ZfcGt0cyA8IDApCi0JCQlyZXR1cm4gMDsKLQl9IGVsc2UgaWYgKChpbnRfc3RhdCA+IFBDSF9SWF9PQkpfTlVNKSAmJiAoaW50X3N0YXQgPD0gUENIX09CSl9OVU0pKSB7Ci0JCWlmIChwcml2LT5tc2dfb2JqW2ludF9zdGF0IC0gMV0gPT0gTVNHX09CSl9UWCkgewotCQkJLyogSGFuZGxlIHRyYW5zbWlzc2lvbiBpbnRlcnJ1cHQgKi8KLQkJCWNhbl9nZXRfZWNob19za2IobmRldiwgaW50X3N0YXQgLSBQQ0hfUlhfT0JKX05VTSAtIDEpOwotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPm1zZ2lmX3JlZ19sb2NrLCBmbGFncyk7Ci0JCQlpb3dyaXRlMzIoQ0FOX0NNQVNLX1JYX1RYX0dFVCB8IENBTl9DTUFTS19DTFJJTlRQTkQsCi0JCQkJICAmcHJpdi0+cmVncy0+aWYyX2NtYXNrKTsKLQkJCWRsYyA9IGlvcmVhZDMyKCZwcml2LT5yZWdzLT5pZjJfbWNvbnQpICYKLQkJCQkgICAgICAgQ0FOX0lGX01DT05UX0RMQzsKLQkJCXBjaF9jYW5fY2hlY2tfaWZfYnVzeSgmcHJpdi0+cmVncy0+aWYyX2NyZXEsIGludF9zdGF0KTsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPm1zZ2lmX3JlZ19sb2NrLCBmbGFncyk7Ci0JCQlpZiAoZGxjID4gOCkKLQkJCQlkbGMgPSA4OwotCQkJc3RhdHMtPnR4X2J5dGVzICs9IGRsYzsKLQkJCXN0YXRzLT50eF9wYWNrZXRzKys7Ci0JCX0KKwlpZiAocXVvdGEgPT0gMCkKKwkJZ290byBlbmQ7CisKKwlpZiAoKGludF9zdGF0ID49IFBDSF9SWF9PQkpfU1RBUlQpICYmIChpbnRfc3RhdCA8PSBQQ0hfUlhfT0JKX0VORCkpIHsKKwkJcXVvdGEgLT0gcGNoX2Nhbl9yeF9ub3JtYWwobmRldiwgaW50X3N0YXQsIHF1b3RhKTsKKwl9IGVsc2UgaWYgKChpbnRfc3RhdCA+PSBQQ0hfVFhfT0JKX1NUQVJUKSAmJgorCQkgICAoaW50X3N0YXQgPD0gUENIX1RYX09CSl9FTkQpKSB7CisJCS8qIEhhbmRsZSB0cmFuc21pc3Npb24gaW50ZXJydXB0ICovCisJCXBjaF9jYW5fdHhfY29tcGxldGUobmRldiwgaW50X3N0YXQpOwogCX0KIAotCWludF9zdGF0ID0gcGNoX2Nhbl9pbnRfcGVuZGluZyhwcml2KTsKLQlpZiAoaW50X3N0YXQgPT0gQ0FOX1NUQVRVU19JTlQpCi0JCWdvdG8gSU5UX1NUQVQ7Ci0JZWxzZSBpZiAoaW50X3N0YXQgPj0gMSAmJiBpbnRfc3RhdCA8PSAzMikKLQkJZ290byBNU0dfT0JKOwotCitlbmQ6CiAJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAlwY2hfY2FuX3NldF9pbnRfZW5hYmxlcyhwcml2LCBQQ0hfQ0FOX0FMTCk7CiAKLQlyZXR1cm4gcmN2X3BrdHM7CisJcmV0dXJuIHF1b3RhX3NhdmUgLSBxdW90YTsKIH0KIAogc3RhdGljIGludCBwY2hfc2V0X2JpdHRpbWluZyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKQEAgLTk4MCwyMCArNzg3LDE4IEBACiAJY29uc3Qgc3RydWN0IGNhbl9iaXR0aW1pbmcgKmJ0ID0gJnByaXYtPmNhbi5iaXR0aW1pbmc7CiAJdTMyIGNhbmJpdDsKIAl1MzIgYmVwZTsKLQl1MzIgYnJwOwogCiAJLyogU2V0dGluZyB0aGUgQ0NFIGJpdCBmb3IgYWNjZXNzaW5nIHRoZSBDYW4gVGltaW5nIHJlZ2lzdGVyLiAqLwotCXBjaF9jYW5fYml0X3NldCgmcHJpdi0+cmVncy0+Y29udCwgQ0FOX0NUUkxfQ0NFKTsKKwlwY2hfY2FuX2JpdF9zZXQoJnByaXYtPnJlZ3MtPmNvbnQsIFBDSF9DVFJMX0NDRSk7CiAKLQlicnAgPSAoYnQtPnRxKSAvICgxMDAwMDAwMDAwL1BDSF9DQU5fQ0xLKSAtIDE7Ci0JY2FuYml0ID0gYnJwICYgTVNLX0JJVFRfQlJQOwotCWNhbmJpdCB8PSAoYnQtPnNqdyAtIDEpIDw8IEJJVF9CSVRUX1NKVzsKLQljYW5iaXQgfD0gKGJ0LT5waGFzZV9zZWcxICsgYnQtPnByb3Bfc2VnIC0gMSkgPDwgQklUX0JJVFRfVFNFRzE7Ci0JY2FuYml0IHw9IChidC0+cGhhc2Vfc2VnMiAtIDEpIDw8IEJJVF9CSVRUX1RTRUcyOwotCWJlcGUgPSAoYnJwICYgTVNLX0JSUEVfQlJQRSkgPj4gQklUX0JSUEVfQlJQRTsKKwljYW5iaXQgPSAoYnQtPmJycCAtIDEpICYgUENIX01TS19CSVRUX0JSUDsKKwljYW5iaXQgfD0gKGJ0LT5zancgLSAxKSA8PCBQQ0hfQklUX1NKV19TSElGVDsKKwljYW5iaXQgfD0gKGJ0LT5waGFzZV9zZWcxICsgYnQtPnByb3Bfc2VnIC0gMSkgPDwgUENIX0JJVF9UU0VHMV9TSElGVDsKKwljYW5iaXQgfD0gKGJ0LT5waGFzZV9zZWcyIC0gMSkgPDwgUENIX0JJVF9UU0VHMl9TSElGVDsKKwliZXBlID0gKChidC0+YnJwIC0gMSkgJiBQQ0hfTVNLX0JSUEVfQlJQRSkgPj4gUENIX0JJVF9CUlBFX0JSUEVfU0hJRlQ7CiAJaW93cml0ZTMyKGNhbmJpdCwgJnByaXYtPnJlZ3MtPmJpdHQpOwogCWlvd3JpdGUzMihiZXBlLCAmcHJpdi0+cmVncy0+YnJwZSk7Ci0JcGNoX2Nhbl9iaXRfY2xlYXIoJnByaXYtPnJlZ3MtPmNvbnQsIENBTl9DVFJMX0NDRSk7CisJcGNoX2Nhbl9iaXRfY2xlYXIoJnByaXYtPnJlZ3MtPmNvbnQsIFBDSF9DVFJMX0NDRSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEwMDgsOCArODEzLDggQEAKIAlwY2hfc2V0X2JpdHRpbWluZyhuZGV2KTsKIAlwY2hfY2FuX3NldF9vcHRtb2RlKHByaXYpOwogCi0JcGNoX2Nhbl90eF9lbmFibGVfYWxsKHByaXYpOwotCXBjaF9jYW5fcnhfZW5hYmxlX2FsbChwcml2KTsKKwlwY2hfY2FuX3NldF90eF9hbGwocHJpdiwgMSk7CisJcGNoX2Nhbl9zZXRfcnhfYWxsKHByaXYsIDEpOwogCiAJLyogU2V0dGluZyB0aGUgQ0FOIHRvIHJ1biBtb2RlLiAqLwogCXBjaF9jYW5fc2V0X3J1bl9tb2RlKHByaXYsIFBDSF9DQU5fUlVOKTsKQEAgLTEwNDEsMjcgKzg0NiwxOCBAQAogCXN0cnVjdCBwY2hfY2FuX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAlpbnQgcmV0dmFsOwogCi0JcmV0dmFsID0gcGNpX2VuYWJsZV9tc2kocHJpdi0+ZGV2KTsKLQlpZiAocmV0dmFsKSB7Ci0JCWRldl9pbmZvKCZuZGV2LT5kZXYsICJQQ0ggQ0FOIG9wZW5lZCB3aXRob3V0IE1TSVxuIik7Ci0JCXByaXYtPnVzZV9tc2kgPSAwOwotCX0gZWxzZSB7Ci0JCWRldl9pbmZvKCZuZGV2LT5kZXYsICJQQ0ggQ0FOIG9wZW5lZCB3aXRoIE1TSVxuIik7Ci0JCXByaXYtPnVzZV9tc2kgPSAxOwotCX0KLQotCS8qIFJlZ3NpdGVyaW5nIHRoZSBpbnRlcnJ1cHQuICovCisJLyogUmVnc3RlcmluZyB0aGUgaW50ZXJydXB0LiAqLwogCXJldHZhbCA9IHJlcXVlc3RfaXJxKHByaXYtPmRldi0+aXJxLCBwY2hfY2FuX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCiAJCQkgICAgIG5kZXYtPm5hbWUsIG5kZXYpOwogCWlmIChyZXR2YWwpIHsKLQkJZGV2X2VycigmbmRldi0+ZGV2LCAicmVxdWVzdF9pcnEgZmFpbGVkLlxuIik7CisJCW5ldGRldl9lcnIobmRldiwgInJlcXVlc3RfaXJxIGZhaWxlZC5cbiIpOwogCQlnb3RvIHJlcV9pcnFfZXJyOwogCX0KIAogCS8qIE9wZW4gY29tbW9uIGNhbiBkZXZpY2UgKi8KIAlyZXR2YWwgPSBvcGVuX2NhbmRldihuZGV2KTsKIAlpZiAocmV0dmFsKSB7Ci0JCWRldl9lcnIobmRldi0+ZGV2LnBhcmVudCwgIm9wZW5fY2FuZGV2KCkgZmFpbGVkICVkXG4iLCByZXR2YWwpOworCQluZXRkZXZfZXJyKG5kZXYsICJvcGVuX2NhbmRldigpIGZhaWxlZCAlZFxuIiwgcmV0dmFsKTsKIAkJZ290byBlcnJfb3Blbl9jYW5kZXY7CiAJfQogCkBAIC0xMDc1LDkgKzg3MSw2IEBACiBlcnJfb3Blbl9jYW5kZXY6CiAJZnJlZV9pcnEocHJpdi0+ZGV2LT5pcnEsIG5kZXYpOwogcmVxX2lycV9lcnI6Ci0JaWYgKHByaXYtPnVzZV9tc2kpCi0JCXBjaV9kaXNhYmxlX21zaShwcml2LT5kZXYpOwotCiAJcGNoX2Nhbl9yZWxlYXNlKHByaXYpOwogCiAJcmV0dXJuIHJldHZhbDsKQEAgLTEwOTEsMTAyICs4ODQsNjUgQEAKIAluYXBpX2Rpc2FibGUoJnByaXYtPm5hcGkpOwogCXBjaF9jYW5fcmVsZWFzZShwcml2KTsKIAlmcmVlX2lycShwcml2LT5kZXYtPmlycSwgbmRldik7Ci0JaWYgKHByaXYtPnVzZV9tc2kpCi0JCXBjaV9kaXNhYmxlX21zaShwcml2LT5kZXYpOwogCWNsb3NlX2NhbmRldihuZGV2KTsKIAlwcml2LT5jYW4uc3RhdGUgPSBDQU5fU1RBVEVfU1RPUFBFRDsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBwY2hfZ2V0X21zZ19vYmpfc3RzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCB1MzIgb2JqX2lkKQotewotCXUzMiBidWZmZXJfc3RhdHVzID0gMDsKLQlzdHJ1Y3QgcGNoX2Nhbl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7Ci0KLQkvKiBHZXR0aW5nIHRoZSBtZXNzYWdlIG9iamVjdCBzdGF0dXMuICovCi0JYnVmZmVyX3N0YXR1cyA9ICh1MzIpIHBjaF9jYW5fZ2V0X2J1ZmZlcl9zdGF0dXMocHJpdik7Ci0KLQlyZXR1cm4gYnVmZmVyX3N0YXR1cyAmIG9ial9pZDsKLX0KLQotCiBzdGF0aWMgbmV0ZGV2X3R4X3QgcGNoX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiB7Ci0JaW50IGksIGo7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgcGNoX2Nhbl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7CiAJc3RydWN0IGNhbl9mcmFtZSAqY2YgPSAoc3RydWN0IGNhbl9mcmFtZSAqKXNrYi0+ZGF0YTsKLQlpbnQgdHhfYnVmZmVyX2F2YWlsID0gMDsKKwlpbnQgdHhfb2JqX25vOworCWludCBpOworCXUzMiBpZDI7CiAKIAlpZiAoY2FuX2Ryb3BwZWRfaW52YWxpZF9za2IobmRldiwgc2tiKSkKIAkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAotCWlmIChwcml2LT50eF9vYmogPT0gKFBDSF9PQkpfTlVNICsgMSkpIHsgLyogUG9pbnQgdGFpbCBPYmogKi8KLQkJd2hpbGUgKHBjaF9nZXRfbXNnX29ial9zdHMobmRldiwgKCgoMSA8PCBQQ0hfVFhfT0JKX05VTSktMSkgPDwKLQkJCQkJICAgUENIX1JYX09CSl9OVU0pKSkKLQkJCXVkZWxheSg1MDApOworCXR4X29ial9ubyA9IHByaXYtPnR4X29iajsKKwlpZiAocHJpdi0+dHhfb2JqID09IFBDSF9UWF9PQkpfRU5EKSB7CisJCWlmIChpb3JlYWQzMigmcHJpdi0+cmVncy0+dHJlcTIpICYgUENIX1RSRVEyX1RYX01BU0spCisJCQluZXRpZl9zdG9wX3F1ZXVlKG5kZXYpOwogCi0JCXByaXYtPnR4X29iaiA9IFBDSF9SWF9PQkpfTlVNICsgMTsgLyogUG9pbnQgaGVhZCBvZiBUeCBPYmogSUQgKi8KLQkJdHhfYnVmZmVyX2F2YWlsID0gcHJpdi0+dHhfb2JqOyAvKiBQb2ludCBUYWlsIG9mIFR4IE9iaiAqLworCQlwcml2LT50eF9vYmogPSBQQ0hfVFhfT0JKX1NUQVJUOwogCX0gZWxzZSB7Ci0JCXR4X2J1ZmZlcl9hdmFpbCA9IHByaXYtPnR4X29iajsKKwkJcHJpdi0+dHhfb2JqKys7CiAJfQotCXByaXYtPnR4X29iaisrOwotCi0JLyogQXR0YWluaW5nIHRoZSBsb2NrLiAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5tc2dpZl9yZWdfbG9jaywgZmxhZ3MpOwotCi0JLyogUmVhZGluZyB0aGUgTXNnIE9iaiBmcm9tIHRoZSBNc2cgUkFNIHRvIHRoZSBJbnRlcmZhY2UgcmVnaXN0ZXIuICovCi0JaW93cml0ZTMyKENBTl9DTUFTS19SWF9UWF9HRVQsICZwcml2LT5yZWdzLT5pZjJfY21hc2spOwotCXBjaF9jYW5fY2hlY2tfaWZfYnVzeSgmcHJpdi0+cmVncy0+aWYyX2NyZXEsIHR4X2J1ZmZlcl9hdmFpbCk7CiAKIAkvKiBTZXR0aW5nIHRoZSBDTUFTSyByZWdpc3Rlci4gKi8KLQlwY2hfY2FuX2JpdF9zZXQoJnByaXYtPnJlZ3MtPmlmMl9jbWFzaywgQ0FOX0NNQVNLX0FMTCk7CisJcGNoX2Nhbl9iaXRfc2V0KCZwcml2LT5yZWdzLT5pZnJlZ3NbMV0uY21hc2ssIFBDSF9DTUFTS19BTEwpOwogCiAJLyogSWYgSUQgZXh0ZW5kZWQgaXMgc2V0LiAqLwotCXBjaF9jYW5fYml0X2NsZWFyKCZwcml2LT5yZWdzLT5pZjJfaWQxLCAweGZmZmYpOwotCXBjaF9jYW5fYml0X2NsZWFyKCZwcml2LT5yZWdzLT5pZjJfaWQyLCAweDFmZmYgfCBDQU5fSUQyX1hURCk7CiAJaWYgKGNmLT5jYW5faWQgJiBDQU5fRUZGX0ZMQUcpIHsKLQkJcGNoX2Nhbl9iaXRfc2V0KCZwcml2LT5yZWdzLT5pZjJfaWQxLCBjZi0+Y2FuX2lkICYgMHhmZmZmKTsKLQkJcGNoX2Nhbl9iaXRfc2V0KCZwcml2LT5yZWdzLT5pZjJfaWQyLAotCQkJCSgoY2YtPmNhbl9pZCA+PiAxNikgJiAweDFmZmYpIHwgQ0FOX0lEMl9YVEQpOworCQlpb3dyaXRlMzIoY2YtPmNhbl9pZCAmIDB4ZmZmZiwgJnByaXYtPnJlZ3MtPmlmcmVnc1sxXS5pZDEpOworCQlpZDIgPSAoKGNmLT5jYW5faWQgPj4gMTYpICYgMHgxZmZmKSB8IFBDSF9JRDJfWFREOwogCX0gZWxzZSB7Ci0JCXBjaF9jYW5fYml0X3NldCgmcHJpdi0+cmVncy0+aWYyX2lkMSwgMCk7Ci0JCXBjaF9jYW5fYml0X3NldCgmcHJpdi0+cmVncy0+aWYyX2lkMiwKLQkJCQkoY2YtPmNhbl9pZCAmIENBTl9TRkZfTUFTSykgPDwgMik7CisJCWlvd3JpdGUzMigwLCAmcHJpdi0+cmVncy0+aWZyZWdzWzFdLmlkMSk7CisJCWlkMiA9IChjZi0+Y2FuX2lkICYgQ0FOX1NGRl9NQVNLKSA8PCAyOwogCX0KIAorCWlkMiB8PSBQQ0hfSURfTVNHVkFMOworCiAJLyogSWYgcmVtb3RlIGZyYW1lIGhhcyB0byBiZSB0cmFuc21pdHRlZC4uICovCi0JaWYgKGNmLT5jYW5faWQgJiBDQU5fUlRSX0ZMQUcpCi0JCXBjaF9jYW5fYml0X2NsZWFyKCZwcml2LT5yZWdzLT5pZjJfaWQyLCBDQU5fSUQyX0RJUik7CisJaWYgKCEoY2YtPmNhbl9pZCAmIENBTl9SVFJfRkxBRykpCisJCWlkMiB8PSBQQ0hfSUQyX0RJUjsKIAotCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgY2YtPmNhbl9kbGM7IGorKykgewotCQlpb3dyaXRlMzIobGUzMl90b19jcHUoY2YtPmRhdGFbaSsrXSksCi0JCQkgKCZwcml2LT5yZWdzLT5pZjJfZGF0YWExKSArIGoqNCk7Ci0JCWlmIChpID09IGNmLT5jYW5fZGxjKQotCQkJYnJlYWs7Ci0JCWlvd3JpdGUzMihsZTMyX3RvX2NwdShjZi0+ZGF0YVtpKytdIDw8IDgpLAotCQkJICgmcHJpdi0+cmVncy0+aWYyX2RhdGFhMSkgKyBqKjQpOworCWlvd3JpdGUzMihpZDIsICZwcml2LT5yZWdzLT5pZnJlZ3NbMV0uaWQyKTsKKworCS8qIENvcHkgZGF0YSB0byByZWdpc3RlciAqLworCWZvciAoaSA9IDA7IGkgPCBjZi0+Y2FuX2RsYzsgaSArPSAyKSB7CisJCWlvd3JpdGUxNihjZi0+ZGF0YVtpXSB8IChjZi0+ZGF0YVtpICsgMV0gPDwgOCksCisJCQkgICZwcml2LT5yZWdzLT5pZnJlZ3NbMV0uZGF0YVtpIC8gMl0pOwogCX0KIAotCWNhbl9wdXRfZWNob19za2Ioc2tiLCBuZGV2LCB0eF9idWZmZXJfYXZhaWwgLSBQQ0hfUlhfT0JKX05VTSAtIDEpOworCWNhbl9wdXRfZWNob19za2Ioc2tiLCBuZGV2LCB0eF9vYmpfbm8gLSBQQ0hfUlhfT0JKX0VORCAtIDEpOwogCi0JLyogVXBkYXRpbmcgdGhlIHNpemUgb2YgdGhlIGRhdGEuICovCi0JcGNoX2Nhbl9iaXRfY2xlYXIoJnByaXYtPnJlZ3MtPmlmMl9tY29udCwgMHgwZik7Ci0JcGNoX2Nhbl9iaXRfc2V0KCZwcml2LT5yZWdzLT5pZjJfbWNvbnQsIGNmLT5jYW5fZGxjKTsKKwkvKiBTZXQgdGhlIHNpemUgb2YgdGhlIGRhdGEuIFVwZGF0ZSBpZjJfbWNvbnQgKi8KKwlpb3dyaXRlMzIoY2YtPmNhbl9kbGMgfCBQQ0hfSUZfTUNPTlRfTkVXREFUIHwgUENIX0lGX01DT05UX1RYUlFYVCB8CisJCSAgUENIX0lGX01DT05UX1RYSUUsICZwcml2LT5yZWdzLT5pZnJlZ3NbMV0ubWNvbnQpOwogCi0JLyogQ2xlYXJpbmcgSW50UGVuZCwgTmV3RGF0ICYgVHhScXN0ICovCi0JcGNoX2Nhbl9iaXRfY2xlYXIoJnByaXYtPnJlZ3MtPmlmMl9tY29udCwKLQkJCSAgQ0FOX0lGX01DT05UX05FV0RBVCB8IENBTl9JRl9NQ09OVF9JTlRQTkQgfAotCQkJICBDQU5fSUZfTUNPTlRfVFhSUVhUKTsKLQotCS8qIFNldHRpbmcgTmV3RGF0LCBUeFJxc3QgYml0cyAqLwotCXBjaF9jYW5fYml0X3NldCgmcHJpdi0+cmVncy0+aWYyX21jb250LAotCQkJQ0FOX0lGX01DT05UX05FV0RBVCB8IENBTl9JRl9NQ09OVF9UWFJRWFQpOwotCi0JcGNoX2Nhbl9jaGVja19pZl9idXN5KCZwcml2LT5yZWdzLT5pZjJfY3JlcSwgdHhfYnVmZmVyX2F2YWlsKTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPm1zZ2lmX3JlZ19sb2NrLCBmbGFncyk7CisJcGNoX2Nhbl9yd19tc2dfb2JqKCZwcml2LT5yZWdzLT5pZnJlZ3NbMV0uY3JlcSwgdHhfb2JqX25vKTsKIAogCXJldHVybiBORVRERVZfVFhfT0s7CiB9CkBAIC0xMjAzLDIxICs5NTksOTggQEAKIAlzdHJ1Y3QgcGNoX2Nhbl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7CiAKIAl1bnJlZ2lzdGVyX2NhbmRldihwcml2LT5uZGV2KTsKLQlmcmVlX2NhbmRldihwcml2LT5uZGV2KTsKIAlwY2lfaW91bm1hcChwZGV2LCBwcml2LT5yZWdzKTsKKwlpZiAocHJpdi0+dXNlX21zaSkKKwkJcGNpX2Rpc2FibGVfbXNpKHByaXYtPmRldik7CiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCXBjaF9jYW5fcmVzZXQocHJpdik7CisJZnJlZV9jYW5kZXYocHJpdi0+bmRldik7CiB9CiAKICNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyB2b2lkIHBjaF9jYW5fc2V0X2ludF9jdXN0b20oc3RydWN0IHBjaF9jYW5fcHJpdiAqcHJpdikKK3sKKwkvKiBDbGVhcmluZyB0aGUgSUUsIFNJRSBhbmQgRUlFIGJpdHMgb2YgQ2FuIGNvbnRyb2wgcmVnaXN0ZXIuICovCisJcGNoX2Nhbl9iaXRfY2xlYXIoJnByaXYtPnJlZ3MtPmNvbnQsIFBDSF9DVFJMX0lFX1NJRV9FSUUpOworCisJLyogQXBwcm9wcmlhdGVseSBzZXR0aW5nIHRoZW0uICovCisJcGNoX2Nhbl9iaXRfc2V0KCZwcml2LT5yZWdzLT5jb250LAorCQkJKChwcml2LT5pbnRfZW5hYmxlcyAmIFBDSF9NU0tfQ1RSTF9JRV9TSUVfRUlFKSA8PCAxKSk7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gcmV0cmlldmVzIGludGVycnVwdCBlbmFibGVkIGZvciB0aGUgQ0FOIGRldmljZS4gKi8KK3N0YXRpYyB1MzIgcGNoX2Nhbl9nZXRfaW50X2VuYWJsZXMoc3RydWN0IHBjaF9jYW5fcHJpdiAqcHJpdikKK3sKKwkvKiBPYnRhaW5pbmcgdGhlIHN0YXR1cyBvZiBJRSwgU0lFIGFuZCBFSUUgaW50ZXJydXB0IGJpdHMuICovCisJcmV0dXJuIChpb3JlYWQzMigmcHJpdi0+cmVncy0+Y29udCkgJiBQQ0hfQ1RSTF9JRV9TSUVfRUlFKSA+PiAxOworfQorCitzdGF0aWMgdTMyIHBjaF9jYW5fZ2V0X3J4dHhfaXIoc3RydWN0IHBjaF9jYW5fcHJpdiAqcHJpdiwgdTMyIGJ1ZmZfbnVtLAorCQkJICAgICAgIGVudW0gcGNoX2lmcmVnIGRpcikKK3sKKwl1MzIgaWUsIGVuYWJsZTsKKworCWlmIChkaXIpCisJCWllID0gUENIX0lGX01DT05UX1JYSUU7CisJZWxzZQorCQlpZSA9IFBDSF9JRl9NQ09OVF9UWElFOworCisJaW93cml0ZTMyKFBDSF9DTUFTS19SWF9UWF9HRVQsICZwcml2LT5yZWdzLT5pZnJlZ3NbZGlyXS5jbWFzayk7CisJcGNoX2Nhbl9yd19tc2dfb2JqKCZwcml2LT5yZWdzLT5pZnJlZ3NbZGlyXS5jcmVxLCBidWZmX251bSk7CisKKwlpZiAoKChpb3JlYWQzMigmcHJpdi0+cmVncy0+aWZyZWdzW2Rpcl0uaWQyKSkgJiBQQ0hfSURfTVNHVkFMKSAmJgorCQkJKChpb3JlYWQzMigmcHJpdi0+cmVncy0+aWZyZWdzW2Rpcl0ubWNvbnQpKSAmIGllKSkKKwkJZW5hYmxlID0gMTsKKwllbHNlCisJCWVuYWJsZSA9IDA7CisKKwlyZXR1cm4gZW5hYmxlOworfQorCitzdGF0aWMgdm9pZCBwY2hfY2FuX3NldF9yeF9idWZmZXJfbGluayhzdHJ1Y3QgcGNoX2Nhbl9wcml2ICpwcml2LAorCQkJCSAgICAgICB1MzIgYnVmZmVyX251bSwgaW50IHNldCkKK3sKKwlpb3dyaXRlMzIoUENIX0NNQVNLX1JYX1RYX0dFVCwgJnByaXYtPnJlZ3MtPmlmcmVnc1swXS5jbWFzayk7CisJcGNoX2Nhbl9yd19tc2dfb2JqKCZwcml2LT5yZWdzLT5pZnJlZ3NbMF0uY3JlcSwgYnVmZmVyX251bSk7CisJaW93cml0ZTMyKFBDSF9DTUFTS19SRFdSIHwgUENIX0NNQVNLX0NUUkwsCisJCSAgJnByaXYtPnJlZ3MtPmlmcmVnc1swXS5jbWFzayk7CisJaWYgKHNldCkKKwkJcGNoX2Nhbl9iaXRfY2xlYXIoJnByaXYtPnJlZ3MtPmlmcmVnc1swXS5tY29udCwKKwkJCQkgIFBDSF9JRl9NQ09OVF9FT0IpOworCWVsc2UKKwkJcGNoX2Nhbl9iaXRfc2V0KCZwcml2LT5yZWdzLT5pZnJlZ3NbMF0ubWNvbnQsIFBDSF9JRl9NQ09OVF9FT0IpOworCisJcGNoX2Nhbl9yd19tc2dfb2JqKCZwcml2LT5yZWdzLT5pZnJlZ3NbMF0uY3JlcSwgYnVmZmVyX251bSk7Cit9CisKK3N0YXRpYyB1MzIgcGNoX2Nhbl9nZXRfcnhfYnVmZmVyX2xpbmsoc3RydWN0IHBjaF9jYW5fcHJpdiAqcHJpdiwgdTMyIGJ1ZmZlcl9udW0pCit7CisJdTMyIGxpbms7CisKKwlpb3dyaXRlMzIoUENIX0NNQVNLX1JYX1RYX0dFVCwgJnByaXYtPnJlZ3MtPmlmcmVnc1swXS5jbWFzayk7CisJcGNoX2Nhbl9yd19tc2dfb2JqKCZwcml2LT5yZWdzLT5pZnJlZ3NbMF0uY3JlcSwgYnVmZmVyX251bSk7CisKKwlpZiAoaW9yZWFkMzIoJnByaXYtPnJlZ3MtPmlmcmVnc1swXS5tY29udCkgJiBQQ0hfSUZfTUNPTlRfRU9CKQorCQlsaW5rID0gMDsKKwllbHNlCisJCWxpbmsgPSAxOworCXJldHVybiBsaW5rOworfQorCitzdGF0aWMgaW50IHBjaF9jYW5fZ2V0X2J1ZmZlcl9zdGF0dXMoc3RydWN0IHBjaF9jYW5fcHJpdiAqcHJpdikKK3sKKwlyZXR1cm4gKGlvcmVhZDMyKCZwcml2LT5yZWdzLT50cmVxMSkgJiAweGZmZmYpIHwKKwkgICAgICAgKGlvcmVhZDMyKCZwcml2LT5yZWdzLT50cmVxMikgPDwgMTYpOworfQorCiBzdGF0aWMgaW50IHBjaF9jYW5fc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCWludCBpOwkJCS8qIENvdW50ZXIgdmFyaWFibGUuICovCi0JaW50IHJldHZhbDsJCS8qIFJldHVybiB2YWx1ZS4gKi8KKwlpbnQgaTsKKwlpbnQgcmV0dmFsOwogCXUzMiBidWZfc3RhdDsJLyogVmFyaWFibGUgZm9yIHJlYWRpbmcgdGhlIHRyYW5zbWl0IGJ1ZmZlciBzdGF0dXMuICovCi0JdTMyIGNvdW50ZXIgPSAweEZGRkZGRjsKKwlpbnQgY291bnRlciA9IFBDSF9DT1VOVEVSX0xJTUlUOwogCiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgcGNoX2Nhbl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTEyMjYsNyArMTA1OSw3IEBACiAJcGNoX2Nhbl9zZXRfcnVuX21vZGUocHJpdiwgUENIX0NBTl9TVE9QKTsKIAogCS8qIEluZGljYXRlIHRoYXQgd2UgYXJlIGFib3V0dG8vaW4gc3VzcGVuZCAqLwotCXByaXYtPmNhbi5zdGF0ZSA9IENBTl9TVEFURV9TTEVFUElORzsKKwlwcml2LT5jYW4uc3RhdGUgPSBDQU5fU1RBVEVfU1RPUFBFRDsKIAogCS8qIFdhaXRpbmcgZm9yIGFsbCB0cmFuc21pc3Npb24gdG8gY29tcGxldGUuICovCiAJd2hpbGUgKGNvdW50ZXIpIHsKQEAgLTEyNDAsMzEgKzEwNzMsMjYgQEAKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiJXMgLT4gVHJhbnNtaXNzaW9uIHRpbWUgb3V0LlxuIiwgX19mdW5jX18pOwogCiAJLyogU2F2ZSBpbnRlcnJ1cHQgY29uZmlndXJhdGlvbiBhbmQgdGhlbiBkaXNhYmxlIHRoZW0gKi8KLQlwY2hfY2FuX2dldF9pbnRfZW5hYmxlcyhwcml2LCAmKHByaXYtPmludF9lbmFibGVzKSk7CisJcHJpdi0+aW50X2VuYWJsZXMgPSBwY2hfY2FuX2dldF9pbnRfZW5hYmxlcyhwcml2KTsKIAlwY2hfY2FuX3NldF9pbnRfZW5hYmxlcyhwcml2LCBQQ0hfQ0FOX0RJU0FCTEUpOwogCiAJLyogU2F2ZSBUeCBidWZmZXIgZW5hYmxlIHN0YXRlICovCi0JZm9yIChpID0gMDsgaSA8IFBDSF9PQkpfTlVNOyBpKyspIHsKLQkJaWYgKHByaXYtPm1zZ19vYmpbaV0gPT0gTVNHX09CSl9UWCkKLQkJCXBjaF9jYW5fZ2V0X3R4X2VuYWJsZShwcml2LCBpICsgMSwKLQkJCQkJICAgICAgJihwcml2LT50eF9lbmFibGVbaV0pKTsKLQl9CisJZm9yIChpID0gUENIX1RYX09CSl9TVEFSVDsgaSA8PSBQQ0hfVFhfT0JKX0VORDsgaSsrKQorCQlwcml2LT50eF9lbmFibGVbaSAtIDFdID0gcGNoX2Nhbl9nZXRfcnh0eF9pcihwcml2LCBpLAorCQkJCQkJCSAgICAgUENIX1RYX0lGUkVHKTsKIAogCS8qIERpc2FibGUgYWxsIFRyYW5zbWl0IGJ1ZmZlcnMgKi8KLQlwY2hfY2FuX3R4X2Rpc2FibGVfYWxsKHByaXYpOworCXBjaF9jYW5fc2V0X3R4X2FsbChwcml2LCAwKTsKIAogCS8qIFNhdmUgUnggYnVmZmVyIGVuYWJsZSBzdGF0ZSAqLwotCWZvciAoaSA9IDA7IGkgPCBQQ0hfT0JKX05VTTsgaSsrKSB7Ci0JCWlmIChwcml2LT5tc2dfb2JqW2ldID09IE1TR19PQkpfUlgpIHsKLQkJCXBjaF9jYW5fZ2V0X3J4X2VuYWJsZShwcml2LCBpICsgMSwKLQkJCQkJCSYocHJpdi0+cnhfZW5hYmxlW2ldKSk7Ci0JCQlwY2hfY2FuX2dldF9yeF9idWZmZXJfbGluayhwcml2LCBpICsgMSwKLQkJCQkJCSYocHJpdi0+cnhfbGlua1tpXSkpOwotCQl9CisJZm9yIChpID0gUENIX1JYX09CSl9TVEFSVDsgaSA8PSBQQ0hfUlhfT0JKX0VORDsgaSsrKSB7CisJCXByaXYtPnJ4X2VuYWJsZVtpIC0gMV0gPSBwY2hfY2FuX2dldF9yeHR4X2lyKHByaXYsIGksCisJCQkJCQkJICAgICBQQ0hfUlhfSUZSRUcpOworCQlwcml2LT5yeF9saW5rW2kgLSAxXSA9IHBjaF9jYW5fZ2V0X3J4X2J1ZmZlcl9saW5rKHByaXYsIGkpOwogCX0KIAogCS8qIERpc2FibGUgYWxsIFJlY2VpdmUgYnVmZmVycyAqLwotCXBjaF9jYW5fcnhfZGlzYWJsZV9hbGwocHJpdik7CisJcGNoX2Nhbl9zZXRfcnhfYWxsKHByaXYsIDApOwogCXJldHZhbCA9IHBjaV9zYXZlX3N0YXRlKHBkZXYpOwogCWlmIChyZXR2YWwpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAicGNpX3NhdmVfc3RhdGUgZmFpbGVkLlxuIik7CkBAIC0xMjc5LDggKzExMDcsOCBAQAogCiBzdGF0aWMgaW50IHBjaF9jYW5fcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewotCWludCBpOwkJCS8qIENvdW50ZXIgdmFyaWFibGUuICovCi0JaW50IHJldHZhbDsJCS8qIFJldHVybiB2YXJpYWJsZS4gKi8KKwlpbnQgaTsKKwlpbnQgcmV0dmFsOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IHBjaF9jYW5fcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAKQEAgLTEzMTIsMjMgKzExNDAsMTYgQEAKIAlwY2hfY2FuX3NldF9vcHRtb2RlKHByaXYpOwogCiAJLyogRW5hYmxpbmcgdGhlIHRyYW5zbWl0IGJ1ZmZlci4gKi8KLQlmb3IgKGkgPSAwOyBpIDwgUENIX09CSl9OVU07IGkrKykgewotCQlpZiAocHJpdi0+bXNnX29ialtpXSA9PSBNU0dfT0JKX1RYKSB7Ci0JCQlwY2hfY2FuX3NldF90eF9lbmFibGUocHJpdiwgaSArIDEsCi0JCQkJCSAgICAgIHByaXYtPnR4X2VuYWJsZVtpXSk7Ci0JCX0KLQl9CisJZm9yIChpID0gUENIX1RYX09CSl9TVEFSVDsgaSA8PSBQQ0hfVFhfT0JKX0VORDsgaSsrKQorCQlwY2hfY2FuX3NldF9yeHR4KHByaXYsIGksIHByaXYtPnR4X2VuYWJsZVtpIC0gMV0sIFBDSF9UWF9JRlJFRyk7CiAKIAkvKiBDb25maWd1cmluZyB0aGUgcmVjZWl2ZSBidWZmZXIgYW5kIGVuYWJsaW5nIHRoZW0uICovCi0JZm9yIChpID0gMDsgaSA8IFBDSF9PQkpfTlVNOyBpKyspIHsKLQkJaWYgKHByaXYtPm1zZ19vYmpbaV0gPT0gTVNHX09CSl9SWCkgewotCQkJLyogUmVzdG9yZSBidWZmZXIgbGluayAqLwotCQkJcGNoX2Nhbl9zZXRfcnhfYnVmZmVyX2xpbmsocHJpdiwgaSArIDEsCi0JCQkJCQkgICBwcml2LT5yeF9saW5rW2ldKTsKKwlmb3IgKGkgPSBQQ0hfUlhfT0JKX1NUQVJUOyBpIDw9IFBDSF9SWF9PQkpfRU5EOyBpKyspIHsKKwkJLyogUmVzdG9yZSBidWZmZXIgbGluayAqLworCQlwY2hfY2FuX3NldF9yeF9idWZmZXJfbGluayhwcml2LCBpLCBwcml2LT5yeF9saW5rW2kgLSAxXSk7CiAKLQkJCS8qIFJlc3RvcmUgYnVmZmVyIGVuYWJsZXMgKi8KLQkJCXBjaF9jYW5fc2V0X3J4X2VuYWJsZShwcml2LCBpICsgMSwgcHJpdi0+cnhfZW5hYmxlW2ldKTsKLQkJfQorCQkvKiBSZXN0b3JlIGJ1ZmZlciBlbmFibGVzICovCisJCXBjaF9jYW5fc2V0X3J4dHgocHJpdiwgaSwgcHJpdi0+cnhfZW5hYmxlW2kgLSAxXSwgUENIX1JYX0lGUkVHKTsKIAl9CiAKIAkvKiBFbmFibGUgQ0FOIEludGVycnVwdHMgKi8KQEAgLTEzNDgsOSArMTE2OSwxMCBAQAogCQkJCSAgICBzdHJ1Y3QgY2FuX2JlcnJfY291bnRlciAqYmVjKQogewogCXN0cnVjdCBwY2hfY2FuX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXUzMiBlcnJjID0gaW9yZWFkMzIoJnByaXYtPnJlZ3MtPmVycmMpOwogCi0JYmVjLT50eGVyciA9IGlvcmVhZDMyKCZwcml2LT5yZWdzLT5lcnJjKSAmIENBTl9URUM7Ci0JYmVjLT5yeGVyciA9IChpb3JlYWQzMigmcHJpdi0+cmVncy0+ZXJyYykgJiBDQU5fUkVDKSA+PiA4OworCWJlYy0+dHhlcnIgPSBlcnJjICYgUENIX1RFQzsKKwliZWMtPnJ4ZXJyID0gKGVycmMgJiBQQ0hfUkVDKSA+PiA4OwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMzYxLDcgKzExODMsNiBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2OwogCXN0cnVjdCBwY2hfY2FuX3ByaXYgKnByaXY7CiAJaW50IHJjOwotCWludCBpbmRleDsKIAl2b2lkIF9faW9tZW0gKmFkZHI7CiAKIAlyYyA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwpAQCAtMTM4Myw3ICsxMjA0LDcgQEAKIAkJZ290byBwcm9iZV9leGl0X2lwbWFwOwogCX0KIAotCW5kZXYgPSBhbGxvY19jYW5kZXYoc2l6ZW9mKHN0cnVjdCBwY2hfY2FuX3ByaXYpLCBQQ0hfVFhfT0JKX05VTSk7CisJbmRldiA9IGFsbG9jX2NhbmRldihzaXplb2Yoc3RydWN0IHBjaF9jYW5fcHJpdiksIFBDSF9UWF9PQkpfRU5EKTsKIAlpZiAoIW5kZXYpIHsKIAkJcmMgPSAtRU5PTUVNOwogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgYWxsb2NfY2FuZGV2XG4iKTsKQEAgLTEzOTksNyArMTIyMCw3IEBACiAJcHJpdi0+Y2FuLmRvX2dldF9iZXJyX2NvdW50ZXIgPSBwY2hfY2FuX2dldF9iZXJyX2NvdW50ZXI7CiAJcHJpdi0+Y2FuLmN0cmxtb2RlX3N1cHBvcnRlZCA9IENBTl9DVFJMTU9ERV9MSVNURU5PTkxZIHwKIAkJCQkgICAgICAgQ0FOX0NUUkxNT0RFX0xPT1BCQUNLOwotCXByaXYtPnR4X29iaiA9IFBDSF9SWF9PQkpfTlVNICsgMTsgLyogUG9pbnQgaGVhZCBvZiBUeCBPYmogKi8KKwlwcml2LT50eF9vYmogPSBQQ0hfVFhfT0JKX1NUQVJUOyAvKiBQb2ludCBoZWFkIG9mIFR4IE9iaiAqLwogCiAJbmRldi0+aXJxID0gcGRldi0+aXJxOwogCW5kZXYtPmZsYWdzIHw9IElGRl9FQ0hPOwpAQCAtMTQwNywxNSArMTIyOCwxOCBAQAogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBuZGV2KTsKIAlTRVRfTkVUREVWX0RFVihuZGV2LCAmcGRldi0+ZGV2KTsKIAluZGV2LT5uZXRkZXZfb3BzID0gJnBjaF9jYW5fbmV0ZGV2X29wczsKLQogCXByaXYtPmNhbi5jbG9jay5mcmVxID0gUENIX0NBTl9DTEs7IC8qIEh6ICovCi0JZm9yIChpbmRleCA9IDA7IGluZGV4IDwgUENIX1JYX09CSl9OVU07KQotCQlwcml2LT5tc2dfb2JqW2luZGV4KytdID0gTVNHX09CSl9SWDsKIAotCWZvciAoaW5kZXggPSBpbmRleDsgIGluZGV4IDwgUENIX09CSl9OVU07KQotCQlwcml2LT5tc2dfb2JqW2luZGV4KytdID0gTVNHX09CSl9UWDsKKwluZXRpZl9uYXBpX2FkZChuZGV2LCAmcHJpdi0+bmFwaSwgcGNoX2Nhbl9wb2xsLCBQQ0hfUlhfT0JKX0VORCk7CiAKLQluZXRpZl9uYXBpX2FkZChuZGV2LCAmcHJpdi0+bmFwaSwgcGNoX2Nhbl9yeF9wb2xsLCBQQ0hfUlhfT0JKX05VTSk7CisJcmMgPSBwY2lfZW5hYmxlX21zaShwcml2LT5kZXYpOworCWlmIChyYykgeworCQluZXRkZXZfZXJyKG5kZXYsICJQQ0ggQ0FOIG9wZW5lZCB3aXRob3V0IE1TSVxuIik7CisJCXByaXYtPnVzZV9tc2kgPSAwOworCX0gZWxzZSB7CisJCW5ldGRldl9lcnIobmRldiwgIlBDSCBDQU4gb3BlbmVkIHdpdGggTVNJXG4iKTsKKwkJcHJpdi0+dXNlX21zaSA9IDE7CisJfQogCiAJcmMgPSByZWdpc3Rlcl9jYW5kZXYobmRldik7CiAJaWYgKHJjKSB7CkBAIC0xNDI2LDYgKzEyNTAsOCBAQAogCXJldHVybiAwOwogCiBwcm9iZV9leGl0X3JlZ19jYW5kZXY6CisJaWYgKHByaXYtPnVzZV9tc2kpCisJCXBjaV9kaXNhYmxlX21zaShwcml2LT5kZXYpOwogCWZyZWVfY2FuZGV2KG5kZXYpOwogcHJvYmVfZXhpdF9hbGxvY19jYW5kZXY6CiAJcGNpX2lvdW5tYXAocGRldiwgYWRkcik7CkBAIC0xNDU4LDYgKzEyODQsNiBAQAogfQogbW9kdWxlX2V4aXQocGNoX2Nhbl9wY2lfZXhpdCk7CiAKLU1PRFVMRV9ERVNDUklQVElPTigiQ29udHJvbGxlciBBcmVhIE5ldHdvcmsgRHJpdmVyIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkludGVsIEVHMjBUIFBDSCBDQU4oQ29udHJvbGxlciBBcmVhIE5ldHdvcmspIERyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwogTU9EVUxFX1ZFUlNJT04oIjAuOTQiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9zamExMDAwL3BseF9wY2kuYyBiL2RyaXZlcnMvbmV0L2Nhbi9zamExMDAwL3BseF9wY2kuYwppbmRleCA0MzdiNWM3Li4yMzEzODViIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYW4vc2phMTAwMC9wbHhfcGNpLmMKKysrIGIvZHJpdmVycy9uZXQvY2FuL3NqYTEwMDAvcGx4X3BjaS5jCkBAIC0zODMsNyArMzgzLDcgQEAKIHsKIAl2b2lkIF9faW9tZW0gKnJlc2V0X2FkZHI7CiAJaW50IGk7Ci0JaW50IHJlc2V0X2JhclsyXSA9IHszLCA1fTsKKwlzdGF0aWMgY29uc3QgaW50IHJlc2V0X2JhclsyXSA9IHszLCA1fTsKIAogCXBseF9wY2lfcmVzZXRfY29tbW9uKHBkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vc2phMTAwMC9zamExMDAwX29mX3BsYXRmb3JtLmMgYi9kcml2ZXJzL25ldC9jYW4vc2phMTAwMC9zamExMDAwX29mX3BsYXRmb3JtLmMKaW5kZXggNWJmY2NmZC4uMDljM2U5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL3NqYTEwMDAvc2phMTAwMF9vZl9wbGF0Zm9ybS5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9zamExMDAwL3NqYTEwMDBfb2ZfcGxhdGZvcm0uYwpAQCAtMTA3LDE3ICsxMDcsMTMgQEAKIAlyZXNfc2l6ZSA9IHJlc291cmNlX3NpemUoJnJlcyk7CiAKIAlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyZXMuc3RhcnQsIHJlc19zaXplLCBEUlZfTkFNRSkpIHsKLQkJZGV2X2Vycigmb2ZkZXYtPmRldiwgImNvdWxkbid0IHJlcXVlc3QgJSNsbHguLiUjbGx4XG4iLAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylyZXMuc3RhcnQsCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKXJlcy5lbmQpOworCQlkZXZfZXJyKCZvZmRldi0+ZGV2LCAiY291bGRuJ3QgcmVxdWVzdCAlcFJcbiIsICZyZXMpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAogCWJhc2UgPSBpb3JlbWFwX25vY2FjaGUocmVzLnN0YXJ0LCByZXNfc2l6ZSk7CiAJaWYgKCFiYXNlKSB7Ci0JCWRldl9lcnIoJm9mZGV2LT5kZXYsICJjb3VsZG4ndCBpb3JlbWFwICUjbGx4Li4lI2xseFxuIiwKLQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcmVzLnN0YXJ0LAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylyZXMuZW5kKTsKKwkJZGV2X2Vycigmb2ZkZXYtPmRldiwgImNvdWxkbid0IGlvcmVtYXAgJXBSXG4iLCAmcmVzKTsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBleGl0X3JlbGVhc2VfbWVtOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9zbGNhbi5jIGIvZHJpdmVycy9uZXQvY2FuL3NsY2FuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQyMzk2NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9zbGNhbi5jCkBAIC0wLDAgKzEsNzU2IEBACisvKgorICogc2xjYW4uYyAtIHNlcmlhbCBsaW5lIENBTiBpbnRlcmZhY2UgZHJpdmVyICh1c2luZyB0dHkgbGluZSBkaXNjaXBsaW5lKQorICoKKyAqIFRoaXMgZmlsZSBpcyBkZXJpdmVkIGZyb20gbGludXgvZHJpdmVycy9uZXQvc2xpcC5jCisgKgorICogc2xpcC5jIEF1dGhvcnMgIDogTGF1cmVuY2UgQ3VsaGFuZSA8bG96QGhvbG1lcy5kZW1vbi5jby51az4KKyAqICAgICAgICAgICAgICAgICAgIEZyZWQgTi4gdmFuIEtlbXBlbiA8d2FsdGplQHV3YWx0Lm5sLm11Z25ldC5vcmc+CisgKiBzbGNhbi5jIEF1dGhvciAgOiBPbGl2ZXIgSGFydGtvcHAgPHNvY2tldGNhbkBoYXJ0a29wcC5uZXQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LiBZb3UgY2FuIGFsc28gZ2V0IGl0CisgKiBhdCBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLmh0bWwKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKyAqIERBTUFHRS4KKyAqCisgKiBTZW5kIGZlZWRiYWNrIHRvIDxzb2NrZXRjYW4tdXNlcnNAbGlzdHMuYmVybGlvcy5kZT4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisKKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CisjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nhbi5oPgorCitzdGF0aWMgX19pbml0ZGF0YSBjb25zdCBjaGFyIGJhbm5lcltdID0KKwlLRVJOX0lORk8gInNsY2FuOiBzZXJpYWwgbGluZSBDQU4gaW50ZXJmYWNlIGRyaXZlclxuIjsKKworTU9EVUxFX0FMSUFTX0xESVNDKE5fU0xDQU4pOworTU9EVUxFX0RFU0NSSVBUSU9OKCJzZXJpYWwgbGluZSBDQU4gaW50ZXJmYWNlIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJPbGl2ZXIgSGFydGtvcHAgPHNvY2tldGNhbkBoYXJ0a29wcC5uZXQ+Iik7CisKKyNkZWZpbmUgU0xDQU5fTUFHSUMgMHg1M0NBCisKK3N0YXRpYyBpbnQgbWF4ZGV2ID0gMTA7CQkvKiBNQVggbnVtYmVyIG9mIFNMQ0FOIGNoYW5uZWxzOworCQkJCSAgIFRoaXMgY2FuIGJlIG92ZXJyaWRkZW4gd2l0aAorCQkJCSAgIGluc21vZCBzbGNhbi5rbyBtYXhkZXY9bm5uCSovCittb2R1bGVfcGFyYW0obWF4ZGV2LCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhtYXhkZXYsICJNYXhpbXVtIG51bWJlciBvZiBzbGNhbiBpbnRlcmZhY2VzIik7CisKKy8qIG1heGltdW0gcnggYnVmZmVyIGxlbjogZXh0ZW5kZWQgQ0FOIGZyYW1lIHdpdGggdGltZXN0YW1wICovCisjZGVmaW5lIFNMQ19NVFUgKHNpemVvZigiVDExMTEyMjIyODExMjIzMzQ0NTU2Njc3ODhFQTVGXHIiKSsxKQorCitzdHJ1Y3Qgc2xjYW4geworCWludAkJCW1hZ2ljOworCisJLyogVmFyaW91cyBmaWVsZHMuICovCisJc3RydWN0IHR0eV9zdHJ1Y3QJKnR0eTsJCS8qIHB0ciB0byBUVFkgc3RydWN0dXJlCSAgICAgKi8KKwlzdHJ1Y3QgbmV0X2RldmljZQkqZGV2OwkJLyogZWFzeSBmb3IgaW50ciBoYW5kbGluZyAgICAqLworCXNwaW5sb2NrX3QJCWxvY2s7CisKKwkvKiBUaGVzZSBhcmUgcG9pbnRlcnMgdG8gdGhlIG1hbGxvYygpZWQgZnJhbWUgYnVmZmVycy4gKi8KKwl1bnNpZ25lZCBjaGFyCQlyYnVmZltTTENfTVRVXTsJLyogcmVjZWl2ZXIgYnVmZmVyCSAgICAgKi8KKwlpbnQJCQlyY291bnQ7ICAgICAgICAgLyogcmVjZWl2ZWQgY2hhcnMgY291bnRlciAgICAqLworCXVuc2lnbmVkIGNoYXIJCXhidWZmW1NMQ19NVFVdOwkvKiB0cmFuc21pdHRlciBidWZmZXIJICAgICAqLworCXVuc2lnbmVkIGNoYXIJCSp4aGVhZDsgICAgICAgICAvKiBwb2ludGVyIHRvIG5leHQgWE1JVCBieXRlICovCisJaW50CQkJeGxlZnQ7ICAgICAgICAgIC8qIGJ5dGVzIGxlZnQgaW4gWE1JVCBxdWV1ZSAgKi8KKworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwkJLyogRmxhZyB2YWx1ZXMvIG1vZGUgZXRjICAgICAqLworI2RlZmluZSBTTEZfSU5VU0UJCTAJCS8qIENoYW5uZWwgaW4gdXNlICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0xGX0VSUk9SCQkxICAgICAgICAgICAgICAgLyogUGFyaXR5LCBldGMuIGVycm9yICAgICAgICAqLworCisJdW5zaWduZWQgY2hhcgkJbGVhc2VkOworCWRldl90CQkJbGluZTsKKwlwaWRfdAkJCXBpZDsKK307CisKK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqKnNsY2FuX2RldnM7CisKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICoJCQlTTENBTiBFTkNBUFNVTEFUSU9OIEZPUk1BVAkJCSAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIEEgQ0FOIGZyYW1lIGhhcyBhIGNhbl9pZCAoMTEgYml0IHN0YW5kYXJkIGZyYW1lIGZvcm1hdCBPUiAyOSBiaXQgZXh0ZW5kZWQKKyAqIGZyYW1lIGZvcm1hdCkgYSBkYXRhIGxlbmd0aCBjb2RlIChjYW5fZGxjKSB3aGljaCBjYW4gYmUgZnJvbSAwIHRvIDgKKyAqIGFuZCB1cCB0byA8Y2FuX2RsYz4gZGF0YSBieXRlcyBhcyBwYXlsb2FkLgorICogQWRkaXRpb25hbGx5IGEgQ0FOIGZyYW1lIG1heSBiZWNvbWUgYSByZW1vdGUgdHJhbnNtaXNzaW9uIGZyYW1lIGlmIHRoZQorICogUlRSLWJpdCBpcyBzZXQuIFRoaXMgY2F1c2VzIGFub3RoZXIgRUNVIHRvIHNlbmQgYSBDQU4gZnJhbWUgd2l0aCB0aGUKKyAqIGdpdmVuIGNhbl9pZC4KKyAqCisgKiBUaGUgU0xDQU4gQVNDSUkgcmVwcmVzZW50YXRpb24gb2YgdGhlc2UgZGlmZmVyZW50IGZyYW1lIHR5cGVzIGlzOgorICogPHR5cGU+IDxpZD4gPGRsYz4gPGRhdGE+KgorICoKKyAqIEV4dGVuZGVkIGZyYW1lcyAoMjkgYml0KSBhcmUgZGVmaW5lZCBieSBjYXBpdGFsIGNoYXJhY3RlcnMgaW4gdGhlIHR5cGUuCisgKiBSVFIgZnJhbWVzIGFyZSBkZWZpbmVkIGFzICdyJyB0eXBlcyAtIG5vcm1hbCBmcmFtZXMgaGF2ZSAndCcgdHlwZToKKyAqIHQgPT4gMTEgYml0IGRhdGEgZnJhbWUKKyAqIHIgPT4gMTEgYml0IFJUUiBmcmFtZQorICogVCA9PiAyOSBiaXQgZGF0YSBmcmFtZQorICogUiA9PiAyOSBiaXQgUlRSIGZyYW1lCisgKgorICogVGhlIDxpZD4gaXMgMyAoc3RhbmRhcmQpIG9yIDggKGV4dGVuZGVkKSBieXRlcyBpbiBBU0NJSSBIZXggKGJhc2U2NCkuCisgKiBUaGUgPGRsYz4gaXMgYSBvbmUgYnl0ZSBBU0NJSSBudW1iZXIgKCcwJyAtICc4JykKKyAqIFRoZSA8ZGF0YT4gc2VjdGlvbiBoYXMgYXQgbXVjaCBBU0NJSSBIZXggYnl0ZXMgYXMgZGVmaW5lZCBieSB0aGUgPGRsYz4KKyAqCisgKiBFeGFtcGxlczoKKyAqCisgKiB0MTIzMCA6IGNhbl9pZCAweDEyMywgY2FuX2RsYyAwLCBubyBkYXRhCisgKiB0NDU2MzExMjIzMyA6IGNhbl9pZCAweDQ1NiwgY2FuX2RsYyAzLCBkYXRhIDB4MTEgMHgyMiAweDMzCisgKiBUMTJBQkNERUYyQUE1NSA6IGV4dGVuZGVkIGNhbl9pZCAweDEyQUJDREVGLCBjYW5fZGxjIDIsIGRhdGEgMHhBQSAweDU1CisgKiByMTIzMCA6IGNhbl9pZCAweDEyMywgY2FuX2RsYyAwLCBubyBkYXRhLCByZW1vdGUgdHJhbnNtaXNzaW9uIHJlcXVlc3QKKyAqCisgKi8KKworIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKgkJCVNUQU5EQVJEIFNMQ0FOIERFQ0FQU1VMQVRJT04JCQkgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgYXNjMm5pYmJsZShjaGFyIGMpCit7CisKKwlpZiAoKGMgPj0gJzAnKSAmJiAoYyA8PSAnOScpKQorCQlyZXR1cm4gYyAtICcwJzsKKworCWlmICgoYyA+PSAnQScpICYmIChjIDw9ICdGJykpCisJCXJldHVybiBjIC0gJ0EnICsgMTA7CisKKwlpZiAoKGMgPj0gJ2EnKSAmJiAoYyA8PSAnZicpKQorCQlyZXR1cm4gYyAtICdhJyArIDEwOworCisJcmV0dXJuIDE2OyAvKiBlcnJvciAqLworfQorCisvKiBTZW5kIG9uZSBjb21wbGV0ZWx5IGRlY2Fwc3VsYXRlZCBjYW5fZnJhbWUgdG8gdGhlIG5ldHdvcmsgbGF5ZXIgKi8KK3N0YXRpYyB2b2lkIHNsY19idW1wKHN0cnVjdCBzbGNhbiAqc2wpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgY2FuX2ZyYW1lIGNmOworCWludCBpLCBkbGNfcG9zLCB0bXA7CisJdW5zaWduZWQgbG9uZyB1bHRtcDsKKwljaGFyIGNtZCA9IHNsLT5yYnVmZlswXTsKKworCWlmICgoY21kICE9ICd0JykgJiYgKGNtZCAhPSAnVCcpICYmIChjbWQgIT0gJ3InKSAmJiAoY21kICE9ICdSJykpCisJCXJldHVybjsKKworCWlmIChjbWQgJiAweDIwKSAvKiB0aW55IGNoYXJzICdyJyAndCcgPT4gc3RhbmRhcmQgZnJhbWUgZm9ybWF0ICovCisJCWRsY19wb3MgPSA0OyAvKiBkbGMgcG9zaXRpb24gdGlpaWQgKi8KKwllbHNlCisJCWRsY19wb3MgPSA5OyAvKiBkbGMgcG9zaXRpb24gVGlpaWlpaWlpZCAqLworCisJaWYgKCEoKHNsLT5yYnVmZltkbGNfcG9zXSA+PSAnMCcpICYmIChzbC0+cmJ1ZmZbZGxjX3Bvc10gPCAnOScpKSkKKwkJcmV0dXJuOworCisJY2YuY2FuX2RsYyA9IHNsLT5yYnVmZltkbGNfcG9zXSAtICcwJzsgLyogZ2V0IGNhbl9kbGMgZnJvbSBBU0NJSSB2YWwgKi8KKworCXNsLT5yYnVmZltkbGNfcG9zXSA9IDA7IC8qIHRlcm1pbmF0ZSBjYW5faWQgc3RyaW5nICovCisKKwlpZiAoc3RyaWN0X3N0cnRvdWwoc2wtPnJidWZmKzEsIDE2LCAmdWx0bXApKQorCQlyZXR1cm47CisKKwljZi5jYW5faWQgPSB1bHRtcDsKKworCWlmICghKGNtZCAmIDB4MjApKSAvKiBOTyB0aW55IGNoYXJzID0+IGV4dGVuZGVkIGZyYW1lIGZvcm1hdCAqLworCQljZi5jYW5faWQgfD0gQ0FOX0VGRl9GTEFHOworCisJaWYgKChjbWQgfCAweDIwKSA9PSAncicpIC8qIFJUUiBmcmFtZSAqLworCQljZi5jYW5faWQgfD0gQ0FOX1JUUl9GTEFHOworCisJKih1NjQgKikgKCZjZi5kYXRhKSA9IDA7IC8qIGNsZWFyIHBheWxvYWQgKi8KKworCWZvciAoaSA9IDAsIGRsY19wb3MrKzsgaSA8IGNmLmNhbl9kbGM7IGkrKykgeworCisJCXRtcCA9IGFzYzJuaWJibGUoc2wtPnJidWZmW2RsY19wb3MrK10pOworCQlpZiAodG1wID4gMHgwRikKKwkJCXJldHVybjsKKwkJY2YuZGF0YVtpXSA9ICh0bXAgPDwgNCk7CisJCXRtcCA9IGFzYzJuaWJibGUoc2wtPnJidWZmW2RsY19wb3MrK10pOworCQlpZiAodG1wID4gMHgwRikKKwkJCXJldHVybjsKKwkJY2YuZGF0YVtpXSB8PSB0bXA7CisJfQorCisKKwlza2IgPSBkZXZfYWxsb2Nfc2tiKHNpemVvZihzdHJ1Y3QgY2FuX2ZyYW1lKSk7CisJaWYgKCFza2IpCisJCXJldHVybjsKKworCXNrYi0+ZGV2ID0gc2wtPmRldjsKKwlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfQ0FOKTsKKwlza2ItPnBrdF90eXBlID0gUEFDS0VUX0JST0FEQ0FTVDsKKwlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOworCW1lbWNweShza2JfcHV0KHNrYiwgc2l6ZW9mKHN0cnVjdCBjYW5fZnJhbWUpKSwKKwkgICAgICAgJmNmLCBzaXplb2Yoc3RydWN0IGNhbl9mcmFtZSkpOworCW5ldGlmX3J4KHNrYik7CisKKwlzbC0+ZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJc2wtPmRldi0+c3RhdHMucnhfYnl0ZXMgKz0gY2YuY2FuX2RsYzsKK30KKworLyogcGFyc2UgdHR5IGlucHV0IHN0cmVhbSAqLworc3RhdGljIHZvaWQgc2xjYW5fdW5lc2Moc3RydWN0IHNsY2FuICpzbCwgdW5zaWduZWQgY2hhciBzKQoreworCisJaWYgKChzID09ICdccicpIHx8IChzID09ICdcYScpKSB7IC8qIENSIG9yIEJFTCBlbmRzIHRoZSBwZHUgKi8KKwkJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoU0xGX0VSUk9SLCAmc2wtPmZsYWdzKSAmJgorCQkgICAgKHNsLT5yY291bnQgPiA0KSkgIHsKKwkJCXNsY19idW1wKHNsKTsKKwkJfQorCQlzbC0+cmNvdW50ID0gMDsKKwl9IGVsc2UgeworCQlpZiAoIXRlc3RfYml0KFNMRl9FUlJPUiwgJnNsLT5mbGFncykpICB7CisJCQlpZiAoc2wtPnJjb3VudCA8IFNMQ19NVFUpICB7CisJCQkJc2wtPnJidWZmW3NsLT5yY291bnQrK10gPSBzOworCQkJCXJldHVybjsKKwkJCX0gZWxzZSB7CisJCQkJc2wtPmRldi0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKKwkJCQlzZXRfYml0KFNMRl9FUlJPUiwgJnNsLT5mbGFncyk7CisJCQl9CisJCX0KKwl9Cit9CisKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICoJCQlTVEFOREFSRCBTTENBTiBFTkNBUFNVTEFUSU9OCQkJICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBFbmNhcHN1bGF0ZSBvbmUgY2FuX2ZyYW1lIGFuZCBzdHVmZiBpbnRvIGEgVFRZIHF1ZXVlLiAqLworc3RhdGljIHZvaWQgc2xjX2VuY2FwcyhzdHJ1Y3Qgc2xjYW4gKnNsLCBzdHJ1Y3QgY2FuX2ZyYW1lICpjZikKK3sKKwlpbnQgYWN0dWFsLCBpZHgsIGk7CisJY2hhciBjbWQ7CisKKwlpZiAoY2YtPmNhbl9pZCAmIENBTl9SVFJfRkxBRykKKwkJY21kID0gJ1InOyAvKiBiZWNvbWVzICdyJyBpbiBzdGFuZGFyZCBmcmFtZSBmb3JtYXQgKi8KKwllbHNlCisJCWNtZCA9ICdUJzsgLyogYmVjb21lcyAndCcgaW4gc3RhbmRhcmQgZnJhbWUgZm9ybWF0ICovCisKKwlpZiAoY2YtPmNhbl9pZCAmIENBTl9FRkZfRkxBRykKKwkJc3ByaW50ZihzbC0+eGJ1ZmYsICIlYyUwOFglZCIsIGNtZCwKKwkJCWNmLT5jYW5faWQgJiBDQU5fRUZGX01BU0ssIGNmLT5jYW5fZGxjKTsKKwllbHNlCisJCXNwcmludGYoc2wtPnhidWZmLCAiJWMlMDNYJWQiLCBjbWQgfCAweDIwLAorCQkJY2YtPmNhbl9pZCAmIENBTl9TRkZfTUFTSywgY2YtPmNhbl9kbGMpOworCisJaWR4ID0gc3RybGVuKHNsLT54YnVmZik7CisKKwlmb3IgKGkgPSAwOyBpIDwgY2YtPmNhbl9kbGM7IGkrKykKKwkJc3ByaW50Zigmc2wtPnhidWZmW2lkeCArIDIqaV0sICIlMDJYIiwgY2YtPmRhdGFbaV0pOworCisJc3RyY2F0KHNsLT54YnVmZiwgIlxyIik7IC8qIGFkZCB0ZXJtaW5hdGluZyBjaGFyYWN0ZXIgKi8KKworCS8qIE9yZGVyIG9mIG5leHQgdHdvIGxpbmVzIGlzICp2ZXJ5KiBpbXBvcnRhbnQuCisJICogV2hlbiB3ZSBhcmUgc2VuZGluZyBhIGxpdHRsZSBhbW91bnQgb2YgZGF0YSwKKwkgKiB0aGUgdHJhbnNmZXIgbWF5IGJlIGNvbXBsZXRlZCBpbnNpZGUgdGhlIG9wcy0+d3JpdGUoKQorCSAqIHJvdXRpbmUsIGJlY2F1c2UgaXQncyBydW5uaW5nIHdpdGggaW50ZXJydXB0cyBlbmFibGVkLgorCSAqIEluIHRoaXMgY2FzZSB3ZSAqbmV2ZXIqIGdvdCBXUklURV9XQUtFVVAgZXZlbnQsCisJICogaWYgd2UgZGlkIG5vdCByZXF1ZXN0IGl0IGJlZm9yZSB3cml0ZSBvcGVyYXRpb24uCisJICogICAgICAgMTQgT2N0IDE5OTQgIERtaXRyeSBHb3JvZGNoYW5pbi4KKwkgKi8KKwlzZXRfYml0KFRUWV9ET19XUklURV9XQUtFVVAsICZzbC0+dHR5LT5mbGFncyk7CisJYWN0dWFsID0gc2wtPnR0eS0+b3BzLT53cml0ZShzbC0+dHR5LCBzbC0+eGJ1ZmYsIHN0cmxlbihzbC0+eGJ1ZmYpKTsKKwlzbC0+eGxlZnQgPSBzdHJsZW4oc2wtPnhidWZmKSAtIGFjdHVhbDsKKwlzbC0+eGhlYWQgPSBzbC0+eGJ1ZmYgKyBhY3R1YWw7CisJc2wtPmRldi0+c3RhdHMudHhfYnl0ZXMgKz0gY2YtPmNhbl9kbGM7Cit9CisKKy8qCisgKiBDYWxsZWQgYnkgdGhlIGRyaXZlciB3aGVuIHRoZXJlJ3Mgcm9vbSBmb3IgbW9yZSBkYXRhLiAgSWYgd2UgaGF2ZQorICogbW9yZSBwYWNrZXRzIHRvIHNlbmQsIHdlIHNlbmQgdGhlbSBoZXJlLgorICovCitzdGF0aWMgdm9pZCBzbGNhbl93cml0ZV93YWtldXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKKwlpbnQgYWN0dWFsOworCXN0cnVjdCBzbGNhbiAqc2wgPSAoc3RydWN0IHNsY2FuICopIHR0eS0+ZGlzY19kYXRhOworCisJLyogRmlyc3QgbWFrZSBzdXJlIHdlJ3JlIGNvbm5lY3RlZC4gKi8KKwlpZiAoIXNsIHx8IHNsLT5tYWdpYyAhPSBTTENBTl9NQUdJQyB8fCAhbmV0aWZfcnVubmluZyhzbC0+ZGV2KSkKKwkJcmV0dXJuOworCisJaWYgKHNsLT54bGVmdCA8PSAwKSAgeworCQkvKiBOb3cgc2VyaWFsIGJ1ZmZlciBpcyBhbG1vc3QgZnJlZSAmIHdlIGNhbiBzdGFydAorCQkgKiB0cmFuc21pc3Npb24gb2YgYW5vdGhlciBwYWNrZXQgKi8KKwkJc2wtPmRldi0+c3RhdHMudHhfcGFja2V0cysrOworCQljbGVhcl9iaXQoVFRZX0RPX1dSSVRFX1dBS0VVUCwgJnR0eS0+ZmxhZ3MpOworCQluZXRpZl93YWtlX3F1ZXVlKHNsLT5kZXYpOworCQlyZXR1cm47CisJfQorCisJYWN0dWFsID0gdHR5LT5vcHMtPndyaXRlKHR0eSwgc2wtPnhoZWFkLCBzbC0+eGxlZnQpOworCXNsLT54bGVmdCAtPSBhY3R1YWw7CisJc2wtPnhoZWFkICs9IGFjdHVhbDsKK30KKworLyogU2VuZCBhIGNhbl9mcmFtZSB0byBhIFRUWSBxdWV1ZS4gKi8KK3N0YXRpYyBuZXRkZXZfdHhfdCBzbGNfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBzbGNhbiAqc2wgPSBuZXRkZXZfcHJpdihkZXYpOworCisJaWYgKHNrYi0+bGVuICE9IHNpemVvZihzdHJ1Y3QgY2FuX2ZyYW1lKSkKKwkJZ290byBvdXQ7CisKKwlzcGluX2xvY2soJnNsLT5sb2NrKTsKKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkgIHsKKwkJc3Bpbl91bmxvY2soJnNsLT5sb2NrKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHhtaXQ6IGlmYWNlIGlzIGRvd25cbiIsIGRldi0+bmFtZSk7CisJCWdvdG8gb3V0OworCX0KKwlpZiAoc2wtPnR0eSA9PSBOVUxMKSB7CisJCXNwaW5fdW5sb2NrKCZzbC0+bG9jayk7CisJCWdvdG8gb3V0OworCX0KKworCW5ldGlmX3N0b3BfcXVldWUoc2wtPmRldik7CisJc2xjX2VuY2FwcyhzbCwgKHN0cnVjdCBjYW5fZnJhbWUgKikgc2tiLT5kYXRhKTsgLyogZW5jYXBzICYgc2VuZCAqLworCXNwaW5fdW5sb2NrKCZzbC0+bG9jayk7CisKK291dDoKKwlrZnJlZV9za2Ioc2tiKTsKKwlyZXR1cm4gTkVUREVWX1RYX09LOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgUm91dGluZXMgbG9va2luZyBhdCBuZXRkZXZpY2Ugc2lkZS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIE5ldGRldmljZSBVUCAtPiBET1dOIHJvdXRpbmUgKi8KK3N0YXRpYyBpbnQgc2xjX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHNsY2FuICpzbCA9IG5ldGRldl9wcml2KGRldik7CisKKwlzcGluX2xvY2tfYmgoJnNsLT5sb2NrKTsKKwlpZiAoc2wtPnR0eSkgeworCQkvKiBUVFkgZGlzY2lwbGluZSBpcyBydW5uaW5nLiAqLworCQljbGVhcl9iaXQoVFRZX0RPX1dSSVRFX1dBS0VVUCwgJnNsLT50dHktPmZsYWdzKTsKKwl9CisJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCXNsLT5yY291bnQgICA9IDA7CisJc2wtPnhsZWZ0ICAgID0gMDsKKwlzcGluX3VubG9ja19iaCgmc2wtPmxvY2spOworCisJcmV0dXJuIDA7Cit9CisKKy8qIE5ldGRldmljZSBET1dOIC0+IFVQIHJvdXRpbmUgKi8KK3N0YXRpYyBpbnQgc2xjX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc2xjYW4gKnNsID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmIChzbC0+dHR5ID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCisJc2wtPmZsYWdzICY9ICgxIDw8IFNMRl9JTlVTRSk7CisJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKKwlyZXR1cm4gMDsKK30KKworLyogSG9vayB0aGUgZGVzdHJ1Y3RvciBzbyB3ZSBjYW4gZnJlZSBzbGNhbiBkZXZzIGF0IHRoZSByaWdodCBwb2ludCBpbiB0aW1lICovCitzdGF0aWMgdm9pZCBzbGNfZnJlZV9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlpbnQgaSA9IGRldi0+YmFzZV9hZGRyOworCWZyZWVfbmV0ZGV2KGRldik7CisJc2xjYW5fZGV2c1tpXSA9IE5VTEw7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgc2xjX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuICAgICAgICAgICAgICAgPSBzbGNfb3BlbiwKKwkubmRvX3N0b3AgICAgICAgICAgICAgICA9IHNsY19jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQgICAgICAgICA9IHNsY194bWl0LAorfTsKKworc3RhdGljIHZvaWQgc2xjX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJZGV2LT5uZXRkZXZfb3BzCQk9ICZzbGNfbmV0ZGV2X29wczsKKwlkZXYtPmRlc3RydWN0b3IJCT0gc2xjX2ZyZWVfbmV0ZGV2OworCisJZGV2LT5oYXJkX2hlYWRlcl9sZW4JPSAwOworCWRldi0+YWRkcl9sZW4JCT0gMDsKKwlkZXYtPnR4X3F1ZXVlX2xlbgk9IDEwOworCisJZGV2LT5tdHUJCT0gc2l6ZW9mKHN0cnVjdCBjYW5fZnJhbWUpOworCWRldi0+dHlwZQkJPSBBUlBIUkRfQ0FOOworCisJLyogTmV3LXN0eWxlIGZsYWdzLiAqLworCWRldi0+ZmxhZ3MJCT0gSUZGX05PQVJQOworCWRldi0+ZmVhdHVyZXMgICAgICAgICAgID0gTkVUSUZfRl9OT19DU1VNOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgIFJvdXRpbmVzIGxvb2tpbmcgYXQgVFRZIHNpZGUuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogSGFuZGxlIHRoZSAncmVjZWl2ZXIgZGF0YSByZWFkeScgaW50ZXJydXB0LgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlICd0dHlfaW8nIG1vZHVsZSBpbiB0aGUga2VybmVsIHdoZW4KKyAqIGEgYmxvY2sgb2YgU0xDQU4gZGF0YSBoYXMgYmVlbiByZWNlaXZlZCwgd2hpY2ggY2FuIG5vdyBiZSBkZWNhcHN1bGF0ZWQKKyAqIGFuZCBzZW50IG9uIHRvIHNvbWUgSVAgbGF5ZXIgZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZy4gVGhpcyB3aWxsIG5vdAorICogYmUgcmUtZW50ZXJlZCB3aGlsZSBydW5uaW5nIGJ1dCBvdGhlciBsZGlzYyBmdW5jdGlvbnMgbWF5IGJlIGNhbGxlZAorICogaW4gcGFyYWxsZWwKKyAqLworCitzdGF0aWMgdm9pZCBzbGNhbl9yZWNlaXZlX2J1ZihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQkJICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqY3AsIGNoYXIgKmZwLCBpbnQgY291bnQpCit7CisJc3RydWN0IHNsY2FuICpzbCA9IChzdHJ1Y3Qgc2xjYW4gKikgdHR5LT5kaXNjX2RhdGE7CisKKwlpZiAoIXNsIHx8IHNsLT5tYWdpYyAhPSBTTENBTl9NQUdJQyB8fCAhbmV0aWZfcnVubmluZyhzbC0+ZGV2KSkKKwkJcmV0dXJuOworCisJLyogUmVhZCB0aGUgY2hhcmFjdGVycyBvdXQgb2YgdGhlIGJ1ZmZlciAqLworCXdoaWxlIChjb3VudC0tKSB7CisJCWlmIChmcCAmJiAqZnArKykgeworCQkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFNMRl9FUlJPUiwgJnNsLT5mbGFncykpCisJCQkJc2wtPmRldi0+c3RhdHMucnhfZXJyb3JzKys7CisJCQljcCsrOworCQkJY29udGludWU7CisJCX0KKwkJc2xjYW5fdW5lc2Moc2wsICpjcCsrKTsKKwl9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBzbGNhbl9vcGVuIGhlbHBlciByb3V0aW5lcy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIENvbGxlY3QgaGFuZ2VkIHVwIGNoYW5uZWxzICovCitzdGF0aWMgdm9pZCBzbGNfc3luYyh2b2lkKQoreworCWludCBpOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJc3RydWN0IHNsY2FuCSAgKnNsOworCisJZm9yIChpID0gMDsgaSA8IG1heGRldjsgaSsrKSB7CisJCWRldiA9IHNsY2FuX2RldnNbaV07CisJCWlmIChkZXYgPT0gTlVMTCkKKwkJCWJyZWFrOworCisJCXNsID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwkJaWYgKHNsLT50dHkgfHwgc2wtPmxlYXNlZCkKKwkJCWNvbnRpbnVlOworCQlpZiAoZGV2LT5mbGFncyAmIElGRl9VUCkKKwkJCWRldl9jbG9zZShkZXYpOworCX0KK30KKworLyogRmluZCBhIGZyZWUgU0xDQU4gY2hhbm5lbCwgYW5kIGxpbmsgaW4gdGhpcyBgdHR5JyBsaW5lLiAqLworc3RhdGljIHN0cnVjdCBzbGNhbiAqc2xjX2FsbG9jKGRldl90IGxpbmUpCit7CisJaW50IGk7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IE5VTEw7CisJc3RydWN0IHNsY2FuICAgICAgICpzbDsKKworCWlmIChzbGNhbl9kZXZzID09IE5VTEwpCisJCXJldHVybiBOVUxMOwkvKiBNYXN0ZXIgYXJyYXkgbWlzc2luZyAhICovCisKKwlmb3IgKGkgPSAwOyBpIDwgbWF4ZGV2OyBpKyspIHsKKwkJZGV2ID0gc2xjYW5fZGV2c1tpXTsKKwkJaWYgKGRldiA9PSBOVUxMKQorCQkJYnJlYWs7CisKKwl9CisKKwkvKiBTb3JyeSwgdG9vIG1hbnksIGFsbCBzbG90cyBpbiB1c2UgKi8KKwlpZiAoaSA+PSBtYXhkZXYpCisJCXJldHVybiBOVUxMOworCisJaWYgKGRldikgeworCQlzbCA9IG5ldGRldl9wcml2KGRldik7CisJCWlmICh0ZXN0X2JpdChTTEZfSU5VU0UsICZzbC0+ZmxhZ3MpKSB7CisJCQl1bnJlZ2lzdGVyX25ldGRldmljZShkZXYpOworCQkJZGV2ID0gTlVMTDsKKwkJCXNsY2FuX2RldnNbaV0gPSBOVUxMOworCQl9CisJfQorCisJaWYgKCFkZXYpIHsKKwkJY2hhciBuYW1lW0lGTkFNU0laXTsKKwkJc3ByaW50ZihuYW1lLCAic2xjYW4lZCIsIGkpOworCisJCWRldiA9IGFsbG9jX25ldGRldihzaXplb2YoKnNsKSwgbmFtZSwgc2xjX3NldHVwKTsKKwkJaWYgKCFkZXYpCisJCQlyZXR1cm4gTlVMTDsKKwkJZGV2LT5iYXNlX2FkZHIgID0gaTsKKwl9CisKKwlzbCA9IG5ldGRldl9wcml2KGRldik7CisKKwkvKiBJbml0aWFsaXplIGNoYW5uZWwgY29udHJvbCBkYXRhICovCisJc2wtPm1hZ2ljID0gU0xDQU5fTUFHSUM7CisJc2wtPmRldgk9IGRldjsKKwlzcGluX2xvY2tfaW5pdCgmc2wtPmxvY2spOworCXNsY2FuX2RldnNbaV0gPSBkZXY7CisKKwlyZXR1cm4gc2w7Cit9CisKKy8qCisgKiBPcGVuIHRoZSBoaWdoLWxldmVsIHBhcnQgb2YgdGhlIFNMQ0FOIGNoYW5uZWwuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgVFRZIG1vZHVsZSB3aGVuIHRoZQorICogU0xDQU4gbGluZSBkaXNjaXBsaW5lIGlzIGNhbGxlZCBmb3IuICBCZWNhdXNlIHdlIGFyZQorICogc3VyZSB0aGUgdHR5IGxpbmUgZXhpc3RzLCB3ZSBvbmx5IGhhdmUgdG8gbGluayBpdCB0bworICogYSBmcmVlIFNMQ0FOIGNoYW5uZWwuLi4KKyAqCisgKiBDYWxsZWQgaW4gcHJvY2VzcyBjb250ZXh0IHNlcmlhbGl6ZWQgZnJvbSBvdGhlciBsZGlzYyBjYWxscy4KKyAqLworCitzdGF0aWMgaW50IHNsY2FuX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKKwlzdHJ1Y3Qgc2xjYW4gKnNsOworCWludCBlcnI7CisKKwlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCisJCXJldHVybiAtRVBFUk07CisKKwlpZiAodHR5LT5vcHMtPndyaXRlID09IE5VTEwpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCS8qIFJUbmV0bGluayBsb2NrIGlzIG1pc3VzZWQgaGVyZSB0byBzZXJpYWxpemUgY29uY3VycmVudAorCSAgIG9wZW5zIG9mIHNsY2FuIGNoYW5uZWxzLiBUaGVyZSBhcmUgYmV0dGVyIHdheXMsIGJ1dCBpdCBpcworCSAgIHRoZSBzaW1wbGVzdCBvbmUuCisJICovCisJcnRubF9sb2NrKCk7CisKKwkvKiBDb2xsZWN0IGhhbmdlZCB1cCBjaGFubmVscy4gKi8KKwlzbGNfc3luYygpOworCisJc2wgPSB0dHktPmRpc2NfZGF0YTsKKworCWVyciA9IC1FRVhJU1Q7CisJLyogRmlyc3QgbWFrZSBzdXJlIHdlJ3JlIG5vdCBhbHJlYWR5IGNvbm5lY3RlZC4gKi8KKwlpZiAoc2wgJiYgc2wtPm1hZ2ljID09IFNMQ0FOX01BR0lDKQorCQlnb3RvIGVycl9leGl0OworCisJLyogT0suICBGaW5kIGEgZnJlZSBTTENBTiBjaGFubmVsIHRvIHVzZS4gKi8KKwllcnIgPSAtRU5GSUxFOworCXNsID0gc2xjX2FsbG9jKHR0eV9kZXZudW0odHR5KSk7CisJaWYgKHNsID09IE5VTEwpCisJCWdvdG8gZXJyX2V4aXQ7CisKKwlzbC0+dHR5ID0gdHR5OworCXR0eS0+ZGlzY19kYXRhID0gc2w7CisJc2wtPmxpbmUgPSB0dHlfZGV2bnVtKHR0eSk7CisJc2wtPnBpZCA9IGN1cnJlbnQtPnBpZDsKKworCWlmICghdGVzdF9iaXQoU0xGX0lOVVNFLCAmc2wtPmZsYWdzKSkgeworCQkvKiBQZXJmb3JtIHRoZSBsb3ctbGV2ZWwgU0xDQU4gaW5pdGlhbGl6YXRpb24uICovCisJCXNsLT5yY291bnQgICA9IDA7CisJCXNsLT54bGVmdCAgICA9IDA7CisKKwkJc2V0X2JpdChTTEZfSU5VU0UsICZzbC0+ZmxhZ3MpOworCisJCWVyciA9IHJlZ2lzdGVyX25ldGRldmljZShzbC0+ZGV2KTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyX2ZyZWVfY2hhbjsKKwl9CisKKwkvKiBEb25lLiAgV2UgaGF2ZSBsaW5rZWQgdGhlIFRUWSBsaW5lIHRvIGEgY2hhbm5lbC4gKi8KKwlydG5sX3VubG9jaygpOworCXR0eS0+cmVjZWl2ZV9yb29tID0gNjU1MzY7CS8qIFdlIGRvbid0IGZsb3cgY29udHJvbCAqLworCXJldHVybiBzbC0+ZGV2LT5iYXNlX2FkZHI7CisKK2Vycl9mcmVlX2NoYW46CisJc2wtPnR0eSA9IE5VTEw7CisJdHR5LT5kaXNjX2RhdGEgPSBOVUxMOworCWNsZWFyX2JpdChTTEZfSU5VU0UsICZzbC0+ZmxhZ3MpOworCitlcnJfZXhpdDoKKwlydG5sX3VubG9jaygpOworCisJLyogQ291bnQgcmVmZXJlbmNlcyBmcm9tIFRUWSBtb2R1bGUgKi8KKwlyZXR1cm4gZXJyOworfQorCisvKgorICogQ2xvc2UgZG93biBhIFNMQ0FOIGNoYW5uZWwuCisgKiBUaGlzIG1lYW5zIGZsdXNoaW5nIG91dCBhbnkgcGVuZGluZyBxdWV1ZXMsIGFuZCB0aGVuIHJldHVybmluZy4gVGhpcworICogY2FsbCBpcyBzZXJpYWxpemVkIGFnYWluc3Qgb3RoZXIgbGRpc2MgZnVuY3Rpb25zLgorICoKKyAqIFdlIGFsc28gdXNlIHRoaXMgbWV0aG9kIGZvciBhIGhhbmd1cCBldmVudC4KKyAqLworCitzdGF0aWMgdm9pZCBzbGNhbl9jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCXN0cnVjdCBzbGNhbiAqc2wgPSAoc3RydWN0IHNsY2FuICopIHR0eS0+ZGlzY19kYXRhOworCisJLyogRmlyc3QgbWFrZSBzdXJlIHdlJ3JlIGNvbm5lY3RlZC4gKi8KKwlpZiAoIXNsIHx8IHNsLT5tYWdpYyAhPSBTTENBTl9NQUdJQyB8fCBzbC0+dHR5ICE9IHR0eSkKKwkJcmV0dXJuOworCisJdHR5LT5kaXNjX2RhdGEgPSBOVUxMOworCXNsLT50dHkgPSBOVUxMOworCWlmICghc2wtPmxlYXNlZCkKKwkJc2wtPmxpbmUgPSAwOworCisJLyogRmx1c2ggbmV0d29yayBzaWRlICovCisJdW5yZWdpc3Rlcl9uZXRkZXYoc2wtPmRldik7CisJLyogVGhpcyB3aWxsIGNvbXBsZXRlIHZpYSBzbF9mcmVlX25ldGRldiAqLworfQorCitzdGF0aWMgaW50IHNsY2FuX2hhbmd1cChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCXNsY2FuX2Nsb3NlKHR0eSk7CisJcmV0dXJuIDA7Cit9CisKKy8qIFBlcmZvcm0gSS9PIGNvbnRyb2wgb24gYW4gYWN0aXZlIFNMQ0FOIGNoYW5uZWwuICovCitzdGF0aWMgaW50IHNsY2FuX2lvY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAorCQkgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IHNsY2FuICpzbCA9IChzdHJ1Y3Qgc2xjYW4gKikgdHR5LT5kaXNjX2RhdGE7CisJdW5zaWduZWQgaW50IHRtcDsKKworCS8qIEZpcnN0IG1ha2Ugc3VyZSB3ZSdyZSBjb25uZWN0ZWQuICovCisJaWYgKCFzbCB8fCBzbC0+bWFnaWMgIT0gU0xDQU5fTUFHSUMpCisJCXJldHVybiAtRUlOVkFMOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNJT0NHSUZOQU1FOgorCQl0bXAgPSBzdHJsZW4oc2wtPmRldi0+bmFtZSkgKyAxOworCQlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywgc2wtPmRldi0+bmFtZSwgdG1wKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlyZXR1cm4gMDsKKworCWNhc2UgU0lPQ1NJRkhXQUREUjoKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gdHR5X21vZGVfaW9jdGwodHR5LCBmaWxlLCBjbWQsIGFyZyk7CisJfQorfQorCitzdGF0aWMgc3RydWN0IHR0eV9sZGlzY19vcHMgc2xjX2xkaXNjID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkubWFnaWMJCT0gVFRZX0xESVNDX01BR0lDLAorCS5uYW1lCQk9ICJzbGNhbiIsCisJLm9wZW4JCT0gc2xjYW5fb3BlbiwKKwkuY2xvc2UJCT0gc2xjYW5fY2xvc2UsCisJLmhhbmd1cAkJPSBzbGNhbl9oYW5ndXAsCisJLmlvY3RsCQk9IHNsY2FuX2lvY3RsLAorCS5yZWNlaXZlX2J1Zgk9IHNsY2FuX3JlY2VpdmVfYnVmLAorCS53cml0ZV93YWtldXAJPSBzbGNhbl93cml0ZV93YWtldXAsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzbGNhbl9pbml0KHZvaWQpCit7CisJaW50IHN0YXR1czsKKworCWlmIChtYXhkZXYgPCA0KQorCQltYXhkZXYgPSA0OyAvKiBTYW5pdHkgKi8KKworCXByaW50ayhiYW5uZXIpOworCXByaW50ayhLRVJOX0lORk8gInNsY2FuOiAlZCBkeW5hbWljIGludGVyZmFjZSBjaGFubmVscy5cbiIsIG1heGRldik7CisKKwlzbGNhbl9kZXZzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG5ldF9kZXZpY2UgKikqbWF4ZGV2LCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNsY2FuX2RldnMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJzbGNhbjogY2FuJ3QgYWxsb2NhdGUgc2xjYW4gZGV2aWNlIGFycmF5IVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIEZpbGwgaW4gb3VyIGxpbmUgcHJvdG9jb2wgZGlzY2lwbGluZSwgYW5kIHJlZ2lzdGVyIGl0ICovCisJc3RhdHVzID0gdHR5X3JlZ2lzdGVyX2xkaXNjKE5fU0xDQU4sICZzbGNfbGRpc2MpOworCWlmIChzdGF0dXMpICB7CisJCXByaW50ayhLRVJOX0VSUiAic2xjYW46IGNhbid0IHJlZ2lzdGVyIGxpbmUgZGlzY2lwbGluZVxuIik7CisJCWtmcmVlKHNsY2FuX2RldnMpOworCX0KKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc2xjYW5fZXhpdCh2b2lkKQoreworCWludCBpOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJc3RydWN0IHNsY2FuICpzbDsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBqaWZmaWVzICsgSFo7CisJaW50IGJ1c3kgPSAwOworCisJaWYgKHNsY2FuX2RldnMgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJLyogRmlyc3Qgb2YgYWxsOiBjaGVjayBmb3IgYWN0aXZlIGRpc2NpcGxpbmVzIGFuZCBoYW5ndXAgdGhlbS4KKwkgKi8KKwlkbyB7CisJCWlmIChidXN5KQorCQkJbXNsZWVwX2ludGVycnVwdGlibGUoMTAwKTsKKworCQlidXN5ID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IG1heGRldjsgaSsrKSB7CisJCQlkZXYgPSBzbGNhbl9kZXZzW2ldOworCQkJaWYgKCFkZXYpCisJCQkJY29udGludWU7CisJCQlzbCA9IG5ldGRldl9wcml2KGRldik7CisJCQlzcGluX2xvY2tfYmgoJnNsLT5sb2NrKTsKKwkJCWlmIChzbC0+dHR5KSB7CisJCQkJYnVzeSsrOworCQkJCXR0eV9oYW5ndXAoc2wtPnR0eSk7CisJCQl9CisJCQlzcGluX3VubG9ja19iaCgmc2wtPmxvY2spOworCQl9CisJfSB3aGlsZSAoYnVzeSAmJiB0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSk7CisKKwkvKiBGSVhNRTogaGFuZ3VwIGlzIGFzeW5jIHNvIHdlIHNob3VsZCB3YWl0IHdoZW4gZG9pbmcgdGhpcyBzZWNvbmQKKwkgICBwaGFzZSAqLworCisJZm9yIChpID0gMDsgaSA8IG1heGRldjsgaSsrKSB7CisJCWRldiA9IHNsY2FuX2RldnNbaV07CisJCWlmICghZGV2KQorCQkJY29udGludWU7CisJCXNsY2FuX2RldnNbaV0gPSBOVUxMOworCisJCXNsID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwkJaWYgKHNsLT50dHkpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IHR0eSBkaXNjaXBsaW5lIHN0aWxsIHJ1bm5pbmdcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJCS8qIEludGVudGlvbmFsbHkgbGVhayB0aGUgY29udHJvbCBibG9jay4gKi8KKwkJCWRldi0+ZGVzdHJ1Y3RvciA9IE5VTEw7CisJCX0KKworCQl1bnJlZ2lzdGVyX25ldGRldihkZXYpOworCX0KKworCWtmcmVlKHNsY2FuX2RldnMpOworCXNsY2FuX2RldnMgPSBOVUxMOworCisJaSA9IHR0eV91bnJlZ2lzdGVyX2xkaXNjKE5fU0xDQU4pOworCWlmIChpKQorCQlwcmludGsoS0VSTl9FUlIgInNsY2FuOiBjYW4ndCB1bnJlZ2lzdGVyIGxkaXNjIChlcnIgJWQpXG4iLCBpKTsKK30KKworbW9kdWxlX2luaXQoc2xjYW5faW5pdCk7Cittb2R1bGVfZXhpdChzbGNhbl9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhc3NpbmkuYyBiL2RyaXZlcnMvbmV0L2Nhc3NpbmkuYwppbmRleCBkNmI2ZDZhLi43MjA2YWIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYXNzaW5pLmMKKysrIGIvZHJpdmVycy9uZXQvY2Fzc2luaS5jCkBAIC0yNzg4LDcgKzI3ODgsNyBAQAogCiAJY3RybCA9IDA7CiAJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpIHsKLQkJY29uc3QgdTY0IGNzdW1fc3RhcnRfb2ZmID0gc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKTsKKwkJY29uc3QgdTY0IGNzdW1fc3RhcnRfb2ZmID0gc2tiX2NoZWNrc3VtX3N0YXJ0X29mZnNldChza2IpOwogCQljb25zdCB1NjQgY3N1bV9zdHVmZl9vZmYgPSBjc3VtX3N0YXJ0X29mZiArIHNrYi0+Y3N1bV9vZmZzZXQ7CiAKIAkJY3RybCA9ICBUWF9ERVNDX0NTVU1fRU4gfApAQCAtMzIwMyw2ICszMjAzLDEwIEBACiAJaW50IHBoeV90eXBlID0gQ0FTX1BIWV9NSUlfTURJTzA7IC8qIGRlZmF1bHQgcGh5IHR5cGUgKi8KIAlpbnQgbWFjX29mZiAgPSAwOwogCisjaWYgZGVmaW5lZChDT05GSUdfT0YpCisJY29uc3QgdW5zaWduZWQgY2hhciAqYWRkcjsKKyNlbmRpZgorCiAJLyogZ2l2ZSB1cyBhY2Nlc3MgdG8gdGhlIFBST00gKi8KIAl3cml0ZWwoQklNX0xPQ0FMX0RFVl9QUk9NIHwgQklNX0xPQ0FMX0RFVl9QQUQsCiAJICAgICAgIGNwLT5yZWdzICsgUkVHX0JJTV9MT0NBTF9ERVZfRU4pOwpAQCAtMzM1MCw2ICszMzU0LDE0IEBACiAJaWYgKGZvdW5kICYgVlBEX0ZPVU5EX01BQykKIAkJZ290byBkb25lOwogCisjaWYgZGVmaW5lZChDT05GSUdfT0YpCisJYWRkciA9IG9mX2dldF9wcm9wZXJ0eShjcC0+b2Zfbm9kZSwgImxvY2FsLW1hYy1hZGRyZXNzIiwgTlVMTCk7CisJaWYgKGFkZHIgIT0gTlVMTCkgeworCQltZW1jcHkoZGV2X2FkZHIsIGFkZHIsIDYpOworCQlnb3RvIGRvbmU7CisJfQorI2VuZGlmCisKIAkvKiBTdW4gTUFDIHByZWZpeCB0aGVuIDMgcmFuZG9tIGJ5dGVzLiAqLwogCXByX2luZm8oIk1BQyBhZGRyZXNzIG5vdCBmb3VuZCBpbiBST00gVlBEXG4iKTsKIAlkZXZfYWRkclswXSA9IDB4MDg7CkBAIC0zODgwLDcgKzM4OTIsNyBAQAogCXNjaGVkdWxlX3dvcmsoJmNwLT5yZXNldF90YXNrKTsKICNlbmRpZgogCi0JZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwlmbHVzaF93b3JrX3N5bmMoJmNwLT5yZXNldF90YXNrKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTAxOSw2ICs1MDMxLDEwIEBACiAJY3AtPm1zZ19lbmFibGUgPSAoY2Fzc2luaV9kZWJ1ZyA8IDApID8gQ0FTX0RFRl9NU0dfRU5BQkxFIDoKIAkgIGNhc3NpbmlfZGVidWc7CiAKKyNpZiBkZWZpbmVkKENPTkZJR19PRikKKwljcC0+b2Zfbm9kZSA9IHBjaV9kZXZpY2VfdG9fT0Zfbm9kZShwZGV2KTsKKyNlbmRpZgorCiAJY3AtPmxpbmtfdHJhbnNpdGlvbiA9IExJTktfVFJBTlNJVElPTl9VTktOT1dOOwogCWNwLT5saW5rX3RyYW5zaXRpb25famlmZmllc192YWxpZCA9IDA7CiAKQEAgLTUxNzcsNyArNTE5Myw3IEBACiAJCXZmcmVlKGNwLT5md19kYXRhKTsKIAogCW11dGV4X2xvY2soJmNwLT5wbV9tdXRleCk7Ci0JZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwljYW5jZWxfd29ya19zeW5jKCZjcC0+cmVzZXRfdGFzayk7CiAJaWYgKGNwLT5od19ydW5uaW5nKQogCQljYXNfc2h1dGRvd24oY3ApOwogCW11dGV4X3VubG9jaygmY3AtPnBtX211dGV4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhc3NpbmkuaCBiL2RyaXZlcnMvbmV0L2Nhc3NpbmkuaAppbmRleCBkYmM0Nzg3Li5mYWY0NzQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYXNzaW5pLmgKKysrIGIvZHJpdmVycy9uZXQvY2Fzc2luaS5oCkBAIC0yODY4LDYgKzI4NjgsOSBAQAogCWRtYV9hZGRyX3QgYmxvY2tfZHZtYSwgdHhfdGlueV9kdm1hW05fVFhfUklOR1NdOwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisjaWYgZGVmaW5lZChDT05GSUdfT0YpCisJc3RydWN0IGRldmljZV9ub2RlCSpvZl9ub2RlOworI2VuZGlmCiAKIAkvKiBGaXJtd2FyZSBJbmZvICovCiAJdTE2CQkJZndfbG9hZF9hZGRyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2hlbHNpby9teTMxMjYuYyBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vbXkzMTI2LmMKaW5kZXggNGM2MDI4NS4uYTY4M2ZkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2hlbHNpby9teTMxMjYuYworKysgYi9kcml2ZXJzL25ldC9jaGVsc2lvL215MzEyNi5jCkBAIC0yMiw3ICsyMiw3IEBACiAKIHN0YXRpYyBpbnQgbXkzMTI2X2ludGVycnVwdF9kaXNhYmxlKHN0cnVjdCBjcGh5ICpjcGh5KQogewotCWNhbmNlbF9yZWFybWluZ19kZWxheWVkX3dvcmsoJmNwaHktPnBoeV91cGRhdGUpOworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmY3BoeS0+cGh5X3VwZGF0ZSk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NoZWxzaW8vc2dlLmMgYi9kcml2ZXJzL25ldC9jaGVsc2lvL3NnZS5jCmluZGV4IDcwMjIxY2EuLmY3NzhiMTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NoZWxzaW8vc2dlLmMKKysrIGIvZHJpdmVycy9uZXQvY2hlbHNpby9zZ2UuYwpAQCAtMjczLDYgKzI3MywxMCBAQAogCXN0cnVjdCBjbWRRIGNtZFFbU0dFX0NNRFFfTl0gX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKIH07CiAKK3N0YXRpYyBjb25zdCB1OCBjaF9tYWNfYWRkcltFVEhfQUxFTl0gPSB7CisJMHgwLCAweDcsIDB4NDMsIDB4MCwgMHgwLCAweDAKK307CisKIC8qCiAgKiBzdG9wIHRhc2tsZXQgYW5kIGZyZWUgYWxsIHBlbmRpbmcgc2tiJ3MKICAqLwpAQCAtMjAxMiwxMCArMjAxNiw2IEBACiAJCQkJY29udGludWU7CiAKIAkJCWlmICghc2tiLT5jYlswXSkgewotCQkJCXU4IGNoX21hY19hZGRyW0VUSF9BTEVOXSA9IHsKLQkJCQkJMHgwLCAweDcsIDB4NDMsIDB4MCwgMHgwLCAweDAKLQkJCQl9OwotCiAJCQkJc2tiX2NvcHlfdG9fbGluZWFyX2RhdGFfb2Zmc2V0KHNrYiwKIAkJCQkJCSAgICBzaXplb2Yoc3RydWN0IGNwbF90eF9wa3QpLAogCQkJCQkJCSAgICAgICBjaF9tYWNfYWRkciwKQEAgLTIwNDgsOCArMjA0OCw2IEBACiAKIAkgICAgICAgIGlmICgoc2VvcCAmIDB4ZmZmMGZmZikgPT0gMHhmZmYgJiYgc2tiKSB7CiAJICAgICAgICAgICAgICAgIGlmICghc2tiLT5jYlswXSkgewotCSAgICAgICAgICAgICAgICAgICAgICAgIHU4IGNoX21hY19hZGRyW0VUSF9BTEVOXSA9Ci0JICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsweDAsIDB4NywgMHg0MywgMHgwLCAweDAsIDB4MH07CiAJICAgICAgICAgICAgICAgICAgICAgICAgc2tiX2NvcHlfdG9fbGluZWFyX2RhdGFfb2Zmc2V0KHNrYiwKIAkJCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBjcGxfdHhfcGt0KSwKIAkJCQkJCQkgICAgICAgY2hfbWFjX2FkZHIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jbmljLmMgYi9kcml2ZXJzL25ldC9jbmljLmMKaW5kZXggNmRmZjMyMS4uMjYzYTI5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY25pYy5jCisrKyBiL2RyaXZlcnMvbmV0L2NuaWMuYwpAQCAtNTksNiArNTksNyBAQAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX1ZFUlNJT04oQ05JQ19NT0RVTEVfVkVSU0lPTik7CiAKKy8qIGNuaWNfZGV2X2xpc3QgbW9kaWZpY2F0aW9ucyBhcmUgcHJvdGVjdGVkIGJ5IGJvdGggcnRubCBhbmQgY25pY19kZXZfbG9jayAqLwogc3RhdGljIExJU1RfSEVBRChjbmljX2Rldl9saXN0KTsKIHN0YXRpYyBMSVNUX0hFQUQoY25pY191ZGV2X2xpc3QpOwogc3RhdGljIERFRklORV9SV0xPQ0soY25pY19kZXZfbG9jayk7CkBAIC0yNzgsNiArMjc5LDcgQEAKIAl1MzIgbXNnX3R5cGUgPSBJU0NTSV9LRVZFTlRfSUZfRE9XTjsKIAlzdHJ1Y3QgY25pY191bHBfb3BzICp1bHBfb3BzOwogCXN0cnVjdCBjbmljX3Vpb19kZXYgKnVkZXYgPSBjcC0+dWRldjsKKwlpbnQgcmMgPSAwLCByZXRyeSA9IDA7CiAKIAlpZiAoIXVkZXYgfHwgdWRldi0+dWlvX2RldiA9PSAtMSkKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC0zMDIsMTQgKzMwNCwyNiBAQAogCQlwYXRoX3JlcS5wbXR1ID0gY3NrLT5tdHU7CiAJfQogCi0JcmN1X3JlYWRfbG9jaygpOwotCXVscF9vcHMgPSByY3VfZGVyZWZlcmVuY2UoY25pY191bHBfdGJsW0NOSUNfVUxQX0lTQ1NJXSk7Ci0JaWYgKHVscF9vcHMpCi0JCXVscF9vcHMtPmlzY3NpX25sX3NlbmRfbXNnKGNwLT5kZXYsIG1zZ190eXBlLCBidWYsIGxlbik7Ci0JcmN1X3JlYWRfdW5sb2NrKCk7CisJd2hpbGUgKHJldHJ5IDwgMykgeworCQlyYyA9IDA7CisJCXJjdV9yZWFkX2xvY2soKTsKKwkJdWxwX29wcyA9IHJjdV9kZXJlZmVyZW5jZShjbmljX3VscF90YmxbQ05JQ19VTFBfSVNDU0ldKTsKKwkJaWYgKHVscF9vcHMpCisJCQlyYyA9IHVscF9vcHMtPmlzY3NpX25sX3NlbmRfbXNnKAorCQkJCWNwLT51bHBfaGFuZGxlW0NOSUNfVUxQX0lTQ1NJXSwKKwkJCQltc2dfdHlwZSwgYnVmLCBsZW4pOworCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJaWYgKHJjID09IDAgfHwgbXNnX3R5cGUgIT0gSVNDU0lfS0VWRU5UX1BBVEhfUkVRKQorCQkJYnJlYWs7CisKKwkJbXNsZWVwKDEwMCk7CisJCXJldHJ5Kys7CisJfQogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBjbmljX2NtX3VwY2FsbChzdHJ1Y3QgY25pY19sb2NhbCAqLCBzdHJ1Y3QgY25pY19zb2NrICosIHU4KTsKKwogc3RhdGljIGludCBjbmljX2lzY3NpX25sX21zZ19yZWN2KHN0cnVjdCBjbmljX2RldiAqZGV2LCB1MzIgbXNnX3R5cGUsCiAJCQkJICBjaGFyICpidWYsIHUxNiBsZW4pCiB7CkBAIC0zMzksNyArMzUzLDkgQEAKIAkJfQogCQljc2sgPSAmY3AtPmNza190YmxbbDVfY2lkXTsKIAkJY3NrX2hvbGQoY3NrKTsKLQkJaWYgKGNuaWNfaW5fdXNlKGNzaykpIHsKKwkJaWYgKGNuaWNfaW5fdXNlKGNzaykgJiYKKwkJICAgIHRlc3RfYml0KFNLX0ZfQ09OTkVDVF9TVEFSVCwgJmNzay0+ZmxhZ3MpKSB7CisKIAkJCW1lbWNweShjc2stPmhhLCBwYXRoX3Jlc3AtPm1hY19hZGRyLCA2KTsKIAkJCWlmICh0ZXN0X2JpdChTS19GX0lQVjYsICZjc2stPmZsYWdzKSkKIAkJCQltZW1jcHkoJmNzay0+c3JjX2lwWzBdLCAmcGF0aF9yZXNwLT5zcmMudjZfYWRkciwKQEAgLTM0Nyw4ICszNjMsMTYgQEAKIAkJCWVsc2UKIAkJCQltZW1jcHkoJmNzay0+c3JjX2lwWzBdLCAmcGF0aF9yZXNwLT5zcmMudjRfYWRkciwKIAkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSk7Ci0JCQlpZiAoaXNfdmFsaWRfZXRoZXJfYWRkcihjc2stPmhhKSkKKworCQkJaWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIoY3NrLT5oYSkpIHsKIAkJCQljbmljX2NtX3NldF9wZyhjc2spOworCQkJfSBlbHNlIGlmICghdGVzdF9iaXQoU0tfRl9PRkZMRF9TQ0hFRCwgJmNzay0+ZmxhZ3MpICYmCisJCQkJIXRlc3RfYml0KFNLX0ZfT0ZGTERfQ09NUExFVEUsICZjc2stPmZsYWdzKSkgeworCisJCQkJY25pY19jbV91cGNhbGwoY3AsIGNzaywKKwkJCQkJTDRfS0NRRV9PUENPREVfVkFMVUVfQ09OTkVDVF9DT01QTEVURSk7CisJCQkJY2xlYXJfYml0KFNLX0ZfQ09OTkVDVF9TVEFSVCwgJmNzay0+ZmxhZ3MpOworCQkJfQogCQl9CiAJCWNza19wdXQoY3NrKTsKIAkJcmN1X3JlYWRfdW5sb2NrKCk7CkBAIC00MDIsMTkgKzQyNiw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGNuaWNfdWlvX3N0b3Aodm9pZCkKLXsKLQlzdHJ1Y3QgY25pY19kZXYgKmRldjsKLQotCXJlYWRfbG9jaygmY25pY19kZXZfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZjbmljX2Rldl9saXN0LCBsaXN0KSB7Ci0JCXN0cnVjdCBjbmljX2xvY2FsICpjcCA9IGRldi0+Y25pY19wcml2OwotCi0JCWNuaWNfc2VuZF9ubG1zZyhjcCwgSVNDU0lfS0VWRU5UX0lGX0RPV04sIE5VTEwpOwotCX0KLQlyZWFkX3VubG9jaygmY25pY19kZXZfbG9jayk7Ci19Ci0KIGludCBjbmljX3JlZ2lzdGVyX2RyaXZlcihpbnQgdWxwX3R5cGUsIHN0cnVjdCBjbmljX3VscF9vcHMgKnVscF9vcHMpCiB7CiAJc3RydWN0IGNuaWNfZGV2ICpkZXY7CkBAIC00NDUsMTQgKzQ1NiwxMiBAQAogCiAJLyogUHJldmVudCByYWNlIGNvbmRpdGlvbnMgd2l0aCBuZXRkZXZfZXZlbnQgKi8KIAlydG5sX2xvY2soKTsKLQlyZWFkX2xvY2soJmNuaWNfZGV2X2xvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmY25pY19kZXZfbGlzdCwgbGlzdCkgewogCQlzdHJ1Y3QgY25pY19sb2NhbCAqY3AgPSBkZXYtPmNuaWNfcHJpdjsKIAogCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoVUxQX0ZfSU5JVCwgJmNwLT51bHBfZmxhZ3NbdWxwX3R5cGVdKSkKIAkJCXVscF9vcHMtPmNuaWNfaW5pdChkZXYpOwogCX0KLQlyZWFkX3VubG9jaygmY25pY19kZXZfbG9jayk7CiAJcnRubF91bmxvY2soKTsKIAogCXJldHVybiAwOwpAQCAtNDg4LDkgKzQ5Nyw2IEBACiAJfQogCXJlYWRfdW5sb2NrKCZjbmljX2Rldl9sb2NrKTsKIAotCWlmICh1bHBfdHlwZSA9PSBDTklDX1VMUF9JU0NTSSkKLQkJY25pY191aW9fc3RvcCgpOwotCiAJcmN1X2Fzc2lnbl9wb2ludGVyKGNuaWNfdWxwX3RibFt1bHBfdHlwZV0sIE5VTEwpOwogCiAJbXV0ZXhfdW5sb2NrKCZjbmljX2xvY2spOwpAQCAtNTc0LDYgKzU4MCw5IEBACiAJfQogCW11dGV4X3VubG9jaygmY25pY19sb2NrKTsKIAorCWlmICh1bHBfdHlwZSA9PSBDTklDX1VMUF9JU0NTSSkKKwkJY25pY19zZW5kX25sbXNnKGNwLCBJU0NTSV9LRVZFTlRfSUZfRE9XTiwgTlVMTCk7CisKIAlzeW5jaHJvbml6ZV9yY3UoKTsKIAogCXdoaWxlICh0ZXN0X2JpdChVTFBfRl9DQUxMX1BFTkRJTkcsICZjcC0+dWxwX2ZsYWdzW3VscF90eXBlXSkgJiYKQEAgLTgyMSwxMiArODMwLDE0IEBACiAJY25pY19mcmVlX2RtYShkZXYsICZjcC0+Y29ubl9idWZfaW5mbyk7CiAJY25pY19mcmVlX2RtYShkZXYsICZjcC0+a3dxX2luZm8pOwogCWNuaWNfZnJlZV9kbWEoZGV2LCAmY3AtPmt3cV8xNl9kYXRhX2luZm8pOworCWNuaWNfZnJlZV9kbWEoZGV2LCAmY3AtPmtjcTIuZG1hKTsKIAljbmljX2ZyZWVfZG1hKGRldiwgJmNwLT5rY3ExLmRtYSk7CiAJa2ZyZWUoY3AtPmlzY3NpX3RibCk7CiAJY3AtPmlzY3NpX3RibCA9IE5VTEw7CiAJa2ZyZWUoY3AtPmN0eF90YmwpOwogCWNwLT5jdHhfdGJsID0gTlVMTDsKIAorCWNuaWNfZnJlZV9pZF90YmwoJmNwLT5mY29lX2NpZF90YmwpOwogCWNuaWNfZnJlZV9pZF90YmwoJmNwLT5jaWRfdGJsKTsKIH0KIApAQCAtMTEyMCwxMiArMTEzMSwyMiBAQAogCiAJY3AtPmlyb19hcnIgPSBldGhkZXYtPmlyb19hcnI7CiAKLQljcC0+bWF4X2NpZF9zcGFjZSA9IE1BWF9JU0NTSV9UQkxfU1o7CisJY3AtPm1heF9jaWRfc3BhY2UgPSBNQVhfSVNDU0lfVEJMX1NaICsgQk5YMlhfRkNPRV9OVU1fQ09OTkVDVElPTlM7CiAJY3AtPmlzY3NpX3N0YXJ0X2NpZCA9IHN0YXJ0X2NpZDsKKwljcC0+ZmNvZV9zdGFydF9jaWQgPSBzdGFydF9jaWQgKyBNQVhfSVNDU0lfVEJMX1NaOworCisJaWYgKEJOWDJYX0NISVBfSVNfRTIoY3AtPmNoaXBfaWQpKSB7CisJCWNwLT5tYXhfY2lkX3NwYWNlICs9IEJOWDJYX0ZDT0VfTlVNX0NPTk5FQ1RJT05TOworCQljcC0+ZmNvZV9pbml0X2NpZCA9IGV0aGRldi0+ZmNvZV9pbml0X2NpZDsKKwkJaWYgKCFjcC0+ZmNvZV9pbml0X2NpZCkKKwkJCWNwLT5mY29lX2luaXRfY2lkID0gMHgxMDsKKwl9CisKIAlpZiAoc3RhcnRfY2lkIDwgQk5YMlhfSVNDU0lfU1RBUlRfQ0lEKSB7CiAJCXUzMiBkZWx0YSA9IEJOWDJYX0lTQ1NJX1NUQVJUX0NJRCAtIHN0YXJ0X2NpZDsKIAogCQljcC0+aXNjc2lfc3RhcnRfY2lkID0gQk5YMlhfSVNDU0lfU1RBUlRfQ0lEOworCQljcC0+ZmNvZV9zdGFydF9jaWQgKz0gZGVsdGE7CiAJCWNwLT5tYXhfY2lkX3NwYWNlICs9IGRlbHRhOwogCX0KIApAQCAtMTE0NCw2ICsxMTY1LDkgQEAKIAkJY3AtPmN0eF90YmxbaV0udWxwX3Byb3RvX2lkID0gQ05JQ19VTFBfSVNDU0k7CiAJfQogCisJZm9yIChpID0gTUFYX0lTQ1NJX1RCTF9TWjsgaSA8IGNwLT5tYXhfY2lkX3NwYWNlOyBpKyspCisJCWNwLT5jdHhfdGJsW2ldLnVscF9wcm90b19pZCA9IENOSUNfVUxQX0ZDT0U7CisKIAlwYWdlcyA9IFBBR0VfQUxJR04oY3AtPm1heF9jaWRfc3BhY2UgKiBDTklDX0tXUTE2X0RBVEFfU0laRSkgLwogCQlQQUdFX1NJWkU7CiAKQEAgLTExNjcsNiArMTE5MSwxMiBAQAogCWlmIChyZXQpCiAJCWdvdG8gZXJyb3I7CiAKKwlpZiAoQk5YMlhfQ0hJUF9JU19FMihjcC0+Y2hpcF9pZCkpIHsKKwkJcmV0ID0gY25pY19hbGxvY19rY3EoZGV2LCAmY3AtPmtjcTIpOworCQlpZiAocmV0KQorCQkJZ290byBlcnJvcjsKKwl9CisKIAlwYWdlcyA9IFBBR0VfQUxJR04oQk5YMlhfSVNDU0lfTlVNX0NPTk5FQ1RJT05TICoKIAkJCSAgIEJOWDJYX0lTQ1NJX0NPTk5fQlVGX1NJWkUpIC8gUEFHRV9TSVpFOwogCXJldCA9IGNuaWNfYWxsb2NfZG1hKGRldiwgJmNwLT5jb25uX2J1Zl9pbmZvLCBwYWdlcywgMSk7CkBAIC0xMjYwLDEyICsxMjkwLDE4IEBACiAJc3RydWN0IGNuaWNfbG9jYWwgKmNwID0gZGV2LT5jbmljX3ByaXY7CiAJc3RydWN0IGw1Y21fc3BlIGt3cWU7CiAJc3RydWN0IGt3cWVfMTYgKmt3cVsxXTsKKwl1MTYgdHlwZV8xNjsKIAlpbnQgcmV0OwogCiAJa3dxZS5oZHIuY29ubl9hbmRfY21kX2RhdGEgPQogCQljcHVfdG9fbGUzMigoKGNtZCA8PCBTUEVfSERSX0NNRF9JRF9TSElGVCkgfAogCQkJICAgICBCTlgyWF9IV19DSUQoY3AsIGNpZCkpKTsKLQlrd3FlLmhkci50eXBlID0gY3B1X3RvX2xlMTYodHlwZSk7CisKKwl0eXBlXzE2ID0gKHR5cGUgPDwgU1BFX0hEUl9DT05OX1RZUEVfU0hJRlQpICYgU1BFX0hEUl9DT05OX1RZUEU7CisJdHlwZV8xNiB8PSAoY3AtPnBmaWQgPDwgU1BFX0hEUl9GVU5DVElPTl9JRF9TSElGVCkgJgorCQkgICBTUEVfSERSX0ZVTkNUSU9OX0lEOworCisJa3dxZS5oZHIudHlwZSA9IGNwdV90b19sZTE2KHR5cGVfMTYpOwogCWt3cWUuaGRyLnJlc2VydmVkMSA9IDA7CiAJa3dxZS5kYXRhLnBoeV9hZGRyZXNzLmxvID0gY3B1X3RvX2xlMzIobDVfZGF0YS0+cGh5X2FkZHJlc3MubG8pOwogCWt3cWUuZGF0YS5waHlfYWRkcmVzcy5oaSA9IGNwdV90b19sZTMyKGw1X2RhdGEtPnBoeV9hZGRyZXNzLmhpKTsKQEAgLTE0MzEsOCArMTQ2NywxMSBAQAogCQljbmljX2ZyZWVfZG1hKGRldiwgJmlzY3NpLT5ocV9pbmZvKTsKIAkJY25pY19mcmVlX2RtYShkZXYsICZpc2NzaS0+cjJ0cV9pbmZvKTsKIAkJY25pY19mcmVlX2RtYShkZXYsICZpc2NzaS0+dGFza19hcnJheV9pbmZvKTsKKwkJY25pY19mcmVlX2lkKCZjcC0+Y2lkX3RibCwgY3R4LT5jaWQpOworCX0gZWxzZSB7CisJCWNuaWNfZnJlZV9pZCgmY3AtPmZjb2VfY2lkX3RibCwgY3R4LT5jaWQpOwogCX0KLQljbmljX2ZyZWVfaWQoJmNwLT5jaWRfdGJsLCBjdHgtPmNpZCk7CisKIAljdHgtPmNpZCA9IDA7CiB9CiAKQEAgLTE0NDQsNiArMTQ4MywxNiBAQAogCXN0cnVjdCBjbmljX2NvbnRleHQgKmN0eCA9ICZjcC0+Y3R4X3RibFtsNV9jaWRdOwogCXN0cnVjdCBjbmljX2lzY3NpICppc2NzaSA9IGN0eC0+cHJvdG8uaXNjc2k7CiAKKwlpZiAoY3R4LT51bHBfcHJvdG9faWQgPT0gQ05JQ19VTFBfRkNPRSkgeworCQljaWQgPSBjbmljX2FsbG9jX25ld19pZCgmY3AtPmZjb2VfY2lkX3RibCk7CisJCWlmIChjaWQgPT0gLTEpIHsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIGVycm9yOworCQl9CisJCWN0eC0+Y2lkID0gY2lkOworCQlyZXR1cm4gMDsKKwl9CisKIAljaWQgPSBjbmljX2FsbG9jX25ld19pZCgmY3AtPmNpZF90YmwpOwogCWlmIChjaWQgPT0gLTEpIHsKIAkJcmV0ID0gLUVOT01FTTsKQEAgLTE3MDEsNyArMTc1MCw3IEBACiAJCSp3b3JrID0gbnVtOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JKndvcmsgPSAyICsgcmVxMi0+bnVtX2FkZGl0aW9uYWxfd3Flczs7CisJKndvcmsgPSAyICsgcmVxMi0+bnVtX2FkZGl0aW9uYWxfd3FlczsKIAogCWw1X2NpZCA9IHJlcTEtPmlzY3NpX2Nvbm5faWQ7CiAJaWYgKGw1X2NpZCA+PSBNQVhfSVNDU0lfVEJMX1NaKQpAQCAtMTc3NiwxOSArMTgyNSwxNSBAQAogCXN0cnVjdCBjbmljX2NvbnRleHQgKmN0eCA9ICZjcC0+Y3R4X3RibFtsNV9jaWRdOwogCXVuaW9uIGw1Y21fc3BlY2lmaWNfZGF0YSBsNV9kYXRhOwogCWludCByZXQ7Ci0JdTMyIGh3X2NpZCwgdHlwZTsKKwl1MzIgaHdfY2lkOwogCiAJaW5pdF93YWl0cXVldWVfaGVhZCgmY3R4LT53YWl0cSk7CiAJY3R4LT53YWl0X2NvbmQgPSAwOwogCW1lbXNldCgmbDVfZGF0YSwgMCwgc2l6ZW9mKGw1X2RhdGEpKTsKIAlod19jaWQgPSBCTlgyWF9IV19DSUQoY3AsIGN0eC0+Y2lkKTsKLQl0eXBlID0gKE5PTkVfQ09OTkVDVElPTl9UWVBFIDw8IFNQRV9IRFJfQ09OTl9UWVBFX1NISUZUKQotCQkmIFNQRV9IRFJfQ09OTl9UWVBFOwotCXR5cGUgfD0gKChjcC0+cGZpZCA8PCBTUEVfSERSX0ZVTkNUSU9OX0lEX1NISUZUKSAmCi0JCSBTUEVfSERSX0ZVTkNUSU9OX0lEKTsKIAogCXJldCA9IGNuaWNfc3VibWl0X2t3cWVfMTYoZGV2LCBSQU1ST0RfQ01EX0lEX0NPTU1PTl9DRkNfREVMLAotCQkJCSAgaHdfY2lkLCB0eXBlLCAmbDVfZGF0YSk7CisJCQkJICBod19jaWQsIE5PTkVfQ09OTkVDVElPTl9UWVBFLCAmbDVfZGF0YSk7CiAKIAlpZiAocmV0ID09IDApCiAJCXdhaXRfZXZlbnQoY3R4LT53YWl0cSwgY3R4LT53YWl0X2NvbmQpOwpAQCAtMjA4NCw4ICsyMTI5LDMwNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGNuaWNfc3VibWl0X2JueDJ4X2t3cWVzKHN0cnVjdCBjbmljX2RldiAqZGV2LCBzdHJ1Y3Qga3dxZSAqd3Flc1tdLAotCQkJCSAgIHUzMiBudW1fd3FlcykKK3N0YXRpYyBpbnQgY25pY19ibngyeF9mY29lX3N0YXQoc3RydWN0IGNuaWNfZGV2ICpkZXYsIHN0cnVjdCBrd3FlICprd3FlKQoreworCXN0cnVjdCBmY29lX2t3cWVfc3RhdCAqcmVxOworCXN0cnVjdCBmY29lX3N0YXRfcmFtcm9kX3BhcmFtcyAqZmNvZV9zdGF0OworCXVuaW9uIGw1Y21fc3BlY2lmaWNfZGF0YSBsNV9kYXRhOworCXN0cnVjdCBjbmljX2xvY2FsICpjcCA9IGRldi0+Y25pY19wcml2OworCWludCByZXQ7CisJdTMyIGNpZDsKKworCXJlcSA9IChzdHJ1Y3QgZmNvZV9rd3FlX3N0YXQgKikga3dxZTsKKwljaWQgPSBCTlgyWF9IV19DSUQoY3AsIGNwLT5mY29lX2luaXRfY2lkKTsKKworCWZjb2Vfc3RhdCA9IGNuaWNfZ2V0X2t3cWVfMTZfZGF0YShjcCwgQk5YMlhfRkNPRV9MNV9DSURfQkFTRSwgJmw1X2RhdGEpOworCWlmICghZmNvZV9zdGF0KQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1lbXNldChmY29lX3N0YXQsIDAsIHNpemVvZigqZmNvZV9zdGF0KSk7CisJbWVtY3B5KCZmY29lX3N0YXQtPnN0YXRfa3dxZSwgcmVxLCBzaXplb2YoKnJlcSkpOworCisJcmV0ID0gY25pY19zdWJtaXRfa3dxZV8xNihkZXYsIEZDT0VfUkFNUk9EX0NNRF9JRF9TVEFULCBjaWQsCisJCQkJICBGQ09FX0NPTk5FQ1RJT05fVFlQRSwgJmw1X2RhdGEpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgY25pY19ibngyeF9mY29lX2luaXQxKHN0cnVjdCBjbmljX2RldiAqZGV2LCBzdHJ1Y3Qga3dxZSAqd3Flc1tdLAorCQkJCSB1MzIgbnVtLCBpbnQgKndvcmspCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgY25pY19sb2NhbCAqY3AgPSBkZXYtPmNuaWNfcHJpdjsKKwl1MzIgY2lkOworCXN0cnVjdCBmY29lX2luaXRfcmFtcm9kX3BhcmFtcyAqZmNvZV9pbml0OworCXN0cnVjdCBmY29lX2t3cWVfaW5pdDEgKnJlcTE7CisJc3RydWN0IGZjb2Vfa3dxZV9pbml0MiAqcmVxMjsKKwlzdHJ1Y3QgZmNvZV9rd3FlX2luaXQzICpyZXEzOworCXVuaW9uIGw1Y21fc3BlY2lmaWNfZGF0YSBsNV9kYXRhOworCisJaWYgKG51bSA8IDMpIHsKKwkJKndvcmsgPSBudW07CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXExID0gKHN0cnVjdCBmY29lX2t3cWVfaW5pdDEgKikgd3Flc1swXTsKKwlyZXEyID0gKHN0cnVjdCBmY29lX2t3cWVfaW5pdDIgKikgd3Flc1sxXTsKKwlyZXEzID0gKHN0cnVjdCBmY29lX2t3cWVfaW5pdDMgKikgd3Flc1syXTsKKwlpZiAocmVxMi0+aGRyLm9wX2NvZGUgIT0gRkNPRV9LV1FFX09QQ09ERV9JTklUMikgeworCQkqd29yayA9IDE7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAocmVxMy0+aGRyLm9wX2NvZGUgIT0gRkNPRV9LV1FFX09QQ09ERV9JTklUMykgeworCQkqd29yayA9IDI7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChzaXplb2YoKmZjb2VfaW5pdCkgPiBDTklDX0tXUTE2X0RBVEFfU0laRSkgeworCQluZXRkZXZfZXJyKGRldi0+bmV0ZGV2LCAiZmNvZV9pbml0IHNpemUgdG9vIGJpZ1xuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlmY29lX2luaXQgPSBjbmljX2dldF9rd3FlXzE2X2RhdGEoY3AsIEJOWDJYX0ZDT0VfTDVfQ0lEX0JBU0UsICZsNV9kYXRhKTsKKwlpZiAoIWZjb2VfaW5pdCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltZW1zZXQoZmNvZV9pbml0LCAwLCBzaXplb2YoKmZjb2VfaW5pdCkpOworCW1lbWNweSgmZmNvZV9pbml0LT5pbml0X2t3cWUxLCByZXExLCBzaXplb2YoKnJlcTEpKTsKKwltZW1jcHkoJmZjb2VfaW5pdC0+aW5pdF9rd3FlMiwgcmVxMiwgc2l6ZW9mKCpyZXEyKSk7CisJbWVtY3B5KCZmY29lX2luaXQtPmluaXRfa3dxZTMsIHJlcTMsIHNpemVvZigqcmVxMykpOworCWZjb2VfaW5pdC0+ZXFfYWRkci5sbyA9IGNwLT5rY3EyLmRtYS5wZ19tYXBfYXJyWzBdICYgMHhmZmZmZmZmZjsKKwlmY29lX2luaXQtPmVxX2FkZHIuaGkgPSAodTY0KSBjcC0+a2NxMi5kbWEucGdfbWFwX2FyclswXSA+PiAzMjsKKwlmY29lX2luaXQtPmVxX25leHRfcGFnZV9hZGRyLmxvID0KKwkJY3AtPmtjcTIuZG1hLnBnX21hcF9hcnJbMV0gJiAweGZmZmZmZmZmOworCWZjb2VfaW5pdC0+ZXFfbmV4dF9wYWdlX2FkZHIuaGkgPQorCQkodTY0KSBjcC0+a2NxMi5kbWEucGdfbWFwX2FyclsxXSA+PiAzMjsKKworCWZjb2VfaW5pdC0+c2JfbnVtID0gY3AtPnN0YXR1c19ibGtfbnVtOworCWZjb2VfaW5pdC0+ZXFfcHJvZCA9IE1BWF9LQ1FfSURYOworCWZjb2VfaW5pdC0+c2JfaWQgPSBIQ19JTkRFWF9GQ09FX0VRX0NPTlM7CisJY3AtPmtjcTIuc3dfcHJvZF9pZHggPSAwOworCisJY2lkID0gQk5YMlhfSFdfQ0lEKGNwLCBjcC0+ZmNvZV9pbml0X2NpZCk7CisJcmV0ID0gY25pY19zdWJtaXRfa3dxZV8xNihkZXYsIEZDT0VfUkFNUk9EX0NNRF9JRF9JTklULCBjaWQsCisJCQkJICBGQ09FX0NPTk5FQ1RJT05fVFlQRSwgJmw1X2RhdGEpOworCSp3b3JrID0gMzsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGNuaWNfYm54MnhfZmNvZV9vZmxkMShzdHJ1Y3QgY25pY19kZXYgKmRldiwgc3RydWN0IGt3cWUgKndxZXNbXSwKKwkJCQkgdTMyIG51bSwgaW50ICp3b3JrKQoreworCWludCByZXQgPSAwOworCXUzMiBjaWQgPSAtMSwgbDVfY2lkOworCXN0cnVjdCBjbmljX2xvY2FsICpjcCA9IGRldi0+Y25pY19wcml2OworCXN0cnVjdCBmY29lX2t3cWVfY29ubl9vZmZsb2FkMSAqcmVxMTsKKwlzdHJ1Y3QgZmNvZV9rd3FlX2Nvbm5fb2ZmbG9hZDIgKnJlcTI7CisJc3RydWN0IGZjb2Vfa3dxZV9jb25uX29mZmxvYWQzICpyZXEzOworCXN0cnVjdCBmY29lX2t3cWVfY29ubl9vZmZsb2FkNCAqcmVxNDsKKwlzdHJ1Y3QgZmNvZV9jb25uX29mZmxvYWRfcmFtcm9kX3BhcmFtcyAqZmNvZV9vZmZsb2FkOworCXN0cnVjdCBjbmljX2NvbnRleHQgKmN0eDsKKwlzdHJ1Y3QgZmNvZV9jb250ZXh0ICpmY3R4OworCXN0cnVjdCByZWdwYWlyIGN0eF9hZGRyOworCXVuaW9uIGw1Y21fc3BlY2lmaWNfZGF0YSBsNV9kYXRhOworCXN0cnVjdCBmY29lX2tjcWUga2NxZTsKKwlzdHJ1Y3Qga2NxZSAqY3Flc1sxXTsKKworCWlmIChudW0gPCA0KSB7CisJCSp3b3JrID0gbnVtOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmVxMSA9IChzdHJ1Y3QgZmNvZV9rd3FlX2Nvbm5fb2ZmbG9hZDEgKikgd3Flc1swXTsKKwlyZXEyID0gKHN0cnVjdCBmY29lX2t3cWVfY29ubl9vZmZsb2FkMiAqKSB3cWVzWzFdOworCXJlcTMgPSAoc3RydWN0IGZjb2Vfa3dxZV9jb25uX29mZmxvYWQzICopIHdxZXNbMl07CisJcmVxNCA9IChzdHJ1Y3QgZmNvZV9rd3FlX2Nvbm5fb2ZmbG9hZDQgKikgd3Flc1szXTsKKworCSp3b3JrID0gNDsKKworCWw1X2NpZCA9IHJlcTEtPmZjb2VfY29ubl9pZDsKKwlpZiAobDVfY2lkID49IEJOWDJYX0ZDT0VfTlVNX0NPTk5FQ1RJT05TKQorCQlnb3RvIGVycl9yZXBseTsKKworCWw1X2NpZCArPSBCTlgyWF9GQ09FX0w1X0NJRF9CQVNFOworCisJY3R4ID0gJmNwLT5jdHhfdGJsW2w1X2NpZF07CisJaWYgKHRlc3RfYml0KENUWF9GTF9PRkZMRF9TVEFSVCwgJmN0eC0+Y3R4X2ZsYWdzKSkKKwkJZ290byBlcnJfcmVwbHk7CisKKwlyZXQgPSBjbmljX2FsbG9jX2JueDJ4X2Nvbm5fcmVzYyhkZXYsIGw1X2NpZCk7CisJaWYgKHJldCkgeworCQlyZXQgPSAwOworCQlnb3RvIGVycl9yZXBseTsKKwl9CisJY2lkID0gY3R4LT5jaWQ7CisKKwlmY3R4ID0gY25pY19nZXRfYm54MnhfY3R4KGRldiwgY2lkLCAxLCAmY3R4X2FkZHIpOworCWlmIChmY3R4KSB7CisJCXUzMiBod19jaWQgPSBCTlgyWF9IV19DSUQoY3AsIGNpZCk7CisJCXUzMiB2YWw7CisKKwkJdmFsID0gQ0RVX1JTUlZEX1ZBTFVFX1RZUEVfQShod19jaWQsIENEVV9SRUdJT05fTlVNQkVSX1hDTV9BRywKKwkJCQkJICAgICBGQ09FX0NPTk5FQ1RJT05fVFlQRSk7CisJCWZjdHgtPnhzdG9ybV9hZ19jb250ZXh0LmNkdV9yZXNlcnZlZCA9IHZhbDsKKwkJdmFsID0gQ0RVX1JTUlZEX1ZBTFVFX1RZUEVfQShod19jaWQsIENEVV9SRUdJT05fTlVNQkVSX1VDTV9BRywKKwkJCQkJICAgICBGQ09FX0NPTk5FQ1RJT05fVFlQRSk7CisJCWZjdHgtPnVzdG9ybV9hZ19jb250ZXh0LmNkdV91c2FnZSA9IHZhbDsKKwl9CisJaWYgKHNpemVvZigqZmNvZV9vZmZsb2FkKSA+IENOSUNfS1dRMTZfREFUQV9TSVpFKSB7CisJCW5ldGRldl9lcnIoZGV2LT5uZXRkZXYsICJmY29lX29mZmxvYWQgc2l6ZSB0b28gYmlnXG4iKTsKKwkJZ290byBlcnJfcmVwbHk7CisJfQorCWZjb2Vfb2ZmbG9hZCA9IGNuaWNfZ2V0X2t3cWVfMTZfZGF0YShjcCwgbDVfY2lkLCAmbDVfZGF0YSk7CisJaWYgKCFmY29lX29mZmxvYWQpCisJCWdvdG8gZXJyX3JlcGx5OworCisJbWVtc2V0KGZjb2Vfb2ZmbG9hZCwgMCwgc2l6ZW9mKCpmY29lX29mZmxvYWQpKTsKKwltZW1jcHkoJmZjb2Vfb2ZmbG9hZC0+b2ZmbG9hZF9rd3FlMSwgcmVxMSwgc2l6ZW9mKCpyZXExKSk7CisJbWVtY3B5KCZmY29lX29mZmxvYWQtPm9mZmxvYWRfa3dxZTIsIHJlcTIsIHNpemVvZigqcmVxMikpOworCW1lbWNweSgmZmNvZV9vZmZsb2FkLT5vZmZsb2FkX2t3cWUzLCByZXEzLCBzaXplb2YoKnJlcTMpKTsKKwltZW1jcHkoJmZjb2Vfb2ZmbG9hZC0+b2ZmbG9hZF9rd3FlNCwgcmVxNCwgc2l6ZW9mKCpyZXE0KSk7CisKKwljaWQgPSBCTlgyWF9IV19DSUQoY3AsIGNpZCk7CisJcmV0ID0gY25pY19zdWJtaXRfa3dxZV8xNihkZXYsIEZDT0VfUkFNUk9EX0NNRF9JRF9PRkZMT0FEX0NPTk4sIGNpZCwKKwkJCQkgIEZDT0VfQ09OTkVDVElPTl9UWVBFLCAmbDVfZGF0YSk7CisJaWYgKCFyZXQpCisJCXNldF9iaXQoQ1RYX0ZMX09GRkxEX1NUQVJULCAmY3R4LT5jdHhfZmxhZ3MpOworCisJcmV0dXJuIHJldDsKKworZXJyX3JlcGx5OgorCWlmIChjaWQgIT0gLTEpCisJCWNuaWNfZnJlZV9ibngyeF9jb25uX3Jlc2MoZGV2LCBsNV9jaWQpOworCisJbWVtc2V0KCZrY3FlLCAwLCBzaXplb2Yoa2NxZSkpOworCWtjcWUub3BfY29kZSA9IEZDT0VfS0NRRV9PUENPREVfT0ZGTE9BRF9DT05OOworCWtjcWUuZmNvZV9jb25uX2lkID0gcmVxMS0+ZmNvZV9jb25uX2lkOworCWtjcWUuY29tcGxldGlvbl9zdGF0dXMgPSBGQ09FX0tDUUVfQ09NUExFVElPTl9TVEFUVVNfQ1RYX0FMTE9DX0ZBSUxVUkU7CisKKwljcWVzWzBdID0gKHN0cnVjdCBrY3FlICopICZrY3FlOworCWNuaWNfcmVwbHlfYm54Mnhfa2NxZXMoZGV2LCBDTklDX1VMUF9GQ09FLCBjcWVzLCAxKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGNuaWNfYm54MnhfZmNvZV9lbmFibGUoc3RydWN0IGNuaWNfZGV2ICpkZXYsIHN0cnVjdCBrd3FlICprd3FlKQoreworCXN0cnVjdCBmY29lX2t3cWVfY29ubl9lbmFibGVfZGlzYWJsZSAqcmVxOworCXN0cnVjdCBmY29lX2Nvbm5fZW5hYmxlX2Rpc2FibGVfcmFtcm9kX3BhcmFtcyAqZmNvZV9lbmFibGU7CisJdW5pb24gbDVjbV9zcGVjaWZpY19kYXRhIGw1X2RhdGE7CisJaW50IHJldDsKKwl1MzIgY2lkLCBsNV9jaWQ7CisJc3RydWN0IGNuaWNfbG9jYWwgKmNwID0gZGV2LT5jbmljX3ByaXY7CisKKwlyZXEgPSAoc3RydWN0IGZjb2Vfa3dxZV9jb25uX2VuYWJsZV9kaXNhYmxlICopIGt3cWU7CisJY2lkID0gcmVxLT5jb250ZXh0X2lkOworCWw1X2NpZCA9IHJlcS0+Y29ubl9pZCArIEJOWDJYX0ZDT0VfTDVfQ0lEX0JBU0U7CisKKwlpZiAoc2l6ZW9mKCpmY29lX2VuYWJsZSkgPiBDTklDX0tXUTE2X0RBVEFfU0laRSkgeworCQluZXRkZXZfZXJyKGRldi0+bmV0ZGV2LCAiZmNvZV9lbmFibGUgc2l6ZSB0b28gYmlnXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWZjb2VfZW5hYmxlID0gY25pY19nZXRfa3dxZV8xNl9kYXRhKGNwLCBsNV9jaWQsICZsNV9kYXRhKTsKKwlpZiAoIWZjb2VfZW5hYmxlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1lbXNldChmY29lX2VuYWJsZSwgMCwgc2l6ZW9mKCpmY29lX2VuYWJsZSkpOworCW1lbWNweSgmZmNvZV9lbmFibGUtPmVuYWJsZV9kaXNhYmxlX2t3cWUsIHJlcSwgc2l6ZW9mKCpyZXEpKTsKKwlyZXQgPSBjbmljX3N1Ym1pdF9rd3FlXzE2KGRldiwgRkNPRV9SQU1ST0RfQ01EX0lEX0VOQUJMRV9DT05OLCBjaWQsCisJCQkJICBGQ09FX0NPTk5FQ1RJT05fVFlQRSwgJmw1X2RhdGEpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgY25pY19ibngyeF9mY29lX2Rpc2FibGUoc3RydWN0IGNuaWNfZGV2ICpkZXYsIHN0cnVjdCBrd3FlICprd3FlKQoreworCXN0cnVjdCBmY29lX2t3cWVfY29ubl9lbmFibGVfZGlzYWJsZSAqcmVxOworCXN0cnVjdCBmY29lX2Nvbm5fZW5hYmxlX2Rpc2FibGVfcmFtcm9kX3BhcmFtcyAqZmNvZV9kaXNhYmxlOworCXVuaW9uIGw1Y21fc3BlY2lmaWNfZGF0YSBsNV9kYXRhOworCWludCByZXQ7CisJdTMyIGNpZCwgbDVfY2lkOworCXN0cnVjdCBjbmljX2xvY2FsICpjcCA9IGRldi0+Y25pY19wcml2OworCisJcmVxID0gKHN0cnVjdCBmY29lX2t3cWVfY29ubl9lbmFibGVfZGlzYWJsZSAqKSBrd3FlOworCWNpZCA9IHJlcS0+Y29udGV4dF9pZDsKKwlsNV9jaWQgPSByZXEtPmNvbm5faWQ7CisJaWYgKGw1X2NpZCA+PSBCTlgyWF9GQ09FX05VTV9DT05ORUNUSU9OUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlsNV9jaWQgKz0gQk5YMlhfRkNPRV9MNV9DSURfQkFTRTsKKworCWlmIChzaXplb2YoKmZjb2VfZGlzYWJsZSkgPiBDTklDX0tXUTE2X0RBVEFfU0laRSkgeworCQluZXRkZXZfZXJyKGRldi0+bmV0ZGV2LCAiZmNvZV9kaXNhYmxlIHNpemUgdG9vIGJpZ1xuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlmY29lX2Rpc2FibGUgPSBjbmljX2dldF9rd3FlXzE2X2RhdGEoY3AsIGw1X2NpZCwgJmw1X2RhdGEpOworCWlmICghZmNvZV9kaXNhYmxlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1lbXNldChmY29lX2Rpc2FibGUsIDAsIHNpemVvZigqZmNvZV9kaXNhYmxlKSk7CisJbWVtY3B5KCZmY29lX2Rpc2FibGUtPmVuYWJsZV9kaXNhYmxlX2t3cWUsIHJlcSwgc2l6ZW9mKCpyZXEpKTsKKwlyZXQgPSBjbmljX3N1Ym1pdF9rd3FlXzE2KGRldiwgRkNPRV9SQU1ST0RfQ01EX0lEX0RJU0FCTEVfQ09OTiwgY2lkLAorCQkJCSAgRkNPRV9DT05ORUNUSU9OX1RZUEUsICZsNV9kYXRhKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGNuaWNfYm54MnhfZmNvZV9kZXN0cm95KHN0cnVjdCBjbmljX2RldiAqZGV2LCBzdHJ1Y3Qga3dxZSAqa3dxZSkKK3sKKwlzdHJ1Y3QgZmNvZV9rd3FlX2Nvbm5fZGVzdHJveSAqcmVxOworCXVuaW9uIGw1Y21fc3BlY2lmaWNfZGF0YSBsNV9kYXRhOworCWludCByZXQ7CisJdTMyIGNpZCwgbDVfY2lkOworCXN0cnVjdCBjbmljX2xvY2FsICpjcCA9IGRldi0+Y25pY19wcml2OworCXN0cnVjdCBjbmljX2NvbnRleHQgKmN0eDsKKwlzdHJ1Y3QgZmNvZV9rY3FlIGtjcWU7CisJc3RydWN0IGtjcWUgKmNxZXNbMV07CisKKwlyZXEgPSAoc3RydWN0IGZjb2Vfa3dxZV9jb25uX2Rlc3Ryb3kgKikga3dxZTsKKwljaWQgPSByZXEtPmNvbnRleHRfaWQ7CisJbDVfY2lkID0gcmVxLT5jb25uX2lkOworCWlmIChsNV9jaWQgPj0gQk5YMlhfRkNPRV9OVU1fQ09OTkVDVElPTlMpCisJCXJldHVybiAtRUlOVkFMOworCisJbDVfY2lkICs9IEJOWDJYX0ZDT0VfTDVfQ0lEX0JBU0U7CisKKwljdHggPSAmY3AtPmN0eF90YmxbbDVfY2lkXTsKKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmN0eC0+d2FpdHEpOworCWN0eC0+d2FpdF9jb25kID0gMDsKKworCW1lbXNldCgmbDVfZGF0YSwgMCwgc2l6ZW9mKGw1X2RhdGEpKTsKKwlyZXQgPSBjbmljX3N1Ym1pdF9rd3FlXzE2KGRldiwgRkNPRV9SQU1ST0RfQ01EX0lEX1RFUk1JTkFURV9DT05OLCBjaWQsCisJCQkJICBGQ09FX0NPTk5FQ1RJT05fVFlQRSwgJmw1X2RhdGEpOworCWlmIChyZXQgPT0gMCkgeworCQl3YWl0X2V2ZW50KGN0eC0+d2FpdHEsIGN0eC0+d2FpdF9jb25kKTsKKwkJc2V0X2JpdChDVFhfRkxfREVMRVRFX1dBSVQsICZjdHgtPmN0eF9mbGFncyk7CisJCXF1ZXVlX2RlbGF5ZWRfd29yayhjbmljX3dxLCAmY3AtPmRlbGV0ZV90YXNrLAorCQkJCSAgIG1zZWNzX3RvX2ppZmZpZXMoMjAwMCkpOworCX0KKworCW1lbXNldCgma2NxZSwgMCwgc2l6ZW9mKGtjcWUpKTsKKwlrY3FlLm9wX2NvZGUgPSBGQ09FX0tDUUVfT1BDT0RFX0RFU1RST1lfQ09OTjsKKwlrY3FlLmZjb2VfY29ubl9pZCA9IHJlcS0+Y29ubl9pZDsKKwlrY3FlLmZjb2VfY29ubl9jb250ZXh0X2lkID0gY2lkOworCisJY3Flc1swXSA9IChzdHJ1Y3Qga2NxZSAqKSAma2NxZTsKKwljbmljX3JlcGx5X2JueDJ4X2tjcWVzKGRldiwgQ05JQ19VTFBfRkNPRSwgY3FlcywgMSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBjbmljX2JueDJ4X2Zjb2VfZndfZGVzdHJveShzdHJ1Y3QgY25pY19kZXYgKmRldiwgc3RydWN0IGt3cWUgKmt3cWUpCit7CisJc3RydWN0IGZjb2Vfa3dxZV9kZXN0cm95ICpyZXE7CisJdW5pb24gbDVjbV9zcGVjaWZpY19kYXRhIGw1X2RhdGE7CisJc3RydWN0IGNuaWNfbG9jYWwgKmNwID0gZGV2LT5jbmljX3ByaXY7CisJaW50IHJldDsKKwl1MzIgY2lkOworCisJcmVxID0gKHN0cnVjdCBmY29lX2t3cWVfZGVzdHJveSAqKSBrd3FlOworCWNpZCA9IEJOWDJYX0hXX0NJRChjcCwgY3AtPmZjb2VfaW5pdF9jaWQpOworCisJbWVtc2V0KCZsNV9kYXRhLCAwLCBzaXplb2YobDVfZGF0YSkpOworCXJldCA9IGNuaWNfc3VibWl0X2t3cWVfMTYoZGV2LCBGQ09FX1JBTVJPRF9DTURfSURfREVTVFJPWSwgY2lkLAorCQkJCSAgRkNPRV9DT05ORUNUSU9OX1RZUEUsICZsNV9kYXRhKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGNuaWNfc3VibWl0X2JueDJ4X2lzY3NpX2t3cWVzKHN0cnVjdCBjbmljX2RldiAqZGV2LAorCQkJCQkgc3RydWN0IGt3cWUgKndxZXNbXSwgdTMyIG51bV93cWVzKQogewogCWludCBpLCB3b3JrLCByZXQ7CiAJdTMyIG9wY29kZTsKQEAgLTIxNDksNiArMjQ5Miw5OCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGNuaWNfc3VibWl0X2JueDJ4X2Zjb2Vfa3dxZXMoc3RydWN0IGNuaWNfZGV2ICpkZXYsCisJCQkJCXN0cnVjdCBrd3FlICp3cWVzW10sIHUzMiBudW1fd3FlcykKK3sKKwlzdHJ1Y3QgY25pY19sb2NhbCAqY3AgPSBkZXYtPmNuaWNfcHJpdjsKKwlpbnQgaSwgd29yaywgcmV0OworCXUzMiBvcGNvZGU7CisJc3RydWN0IGt3cWUgKmt3cWU7CisKKwlpZiAoIXRlc3RfYml0KENOSUNfRl9DTklDX1VQLCAmZGV2LT5mbGFncykpCisJCXJldHVybiAtRUFHQUlOOwkJLyogYm54MiBpcyBkb3duICovCisKKwlpZiAoQk5YMlhfQ0hJUF9OVU0oY3AtPmNoaXBfaWQpID09IEJOWDJYX0NISVBfTlVNXzU3NzEwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fd3FlczsgKSB7CisJCWt3cWUgPSB3cWVzW2ldOworCQlvcGNvZGUgPSBLV1FFX09QQ09ERShrd3FlLT5rd3FlX29wX2ZsYWcpOworCQl3b3JrID0gMTsKKworCQlzd2l0Y2ggKG9wY29kZSkgeworCQljYXNlIEZDT0VfS1dRRV9PUENPREVfSU5JVDE6CisJCQlyZXQgPSBjbmljX2JueDJ4X2Zjb2VfaW5pdDEoZGV2LCAmd3Flc1tpXSwKKwkJCQkJCSAgICBudW1fd3FlcyAtIGksICZ3b3JrKTsKKwkJCWJyZWFrOworCQljYXNlIEZDT0VfS1dRRV9PUENPREVfT0ZGTE9BRF9DT05OMToKKwkJCXJldCA9IGNuaWNfYm54MnhfZmNvZV9vZmxkMShkZXYsICZ3cWVzW2ldLAorCQkJCQkJICAgIG51bV93cWVzIC0gaSwgJndvcmspOworCQkJYnJlYWs7CisJCWNhc2UgRkNPRV9LV1FFX09QQ09ERV9FTkFCTEVfQ09OTjoKKwkJCXJldCA9IGNuaWNfYm54MnhfZmNvZV9lbmFibGUoZGV2LCBrd3FlKTsKKwkJCWJyZWFrOworCQljYXNlIEZDT0VfS1dRRV9PUENPREVfRElTQUJMRV9DT05OOgorCQkJcmV0ID0gY25pY19ibngyeF9mY29lX2Rpc2FibGUoZGV2LCBrd3FlKTsKKwkJCWJyZWFrOworCQljYXNlIEZDT0VfS1dRRV9PUENPREVfREVTVFJPWV9DT05OOgorCQkJcmV0ID0gY25pY19ibngyeF9mY29lX2Rlc3Ryb3koZGV2LCBrd3FlKTsKKwkJCWJyZWFrOworCQljYXNlIEZDT0VfS1dRRV9PUENPREVfREVTVFJPWToKKwkJCXJldCA9IGNuaWNfYm54MnhfZmNvZV9md19kZXN0cm95KGRldiwga3dxZSk7CisJCQlicmVhazsKKwkJY2FzZSBGQ09FX0tXUUVfT1BDT0RFX1NUQVQ6CisJCQlyZXQgPSBjbmljX2JueDJ4X2Zjb2Vfc3RhdChkZXYsIGt3cWUpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXQgPSAwOworCQkJbmV0ZGV2X2VycihkZXYtPm5ldGRldiwgIlVua25vd24gdHlwZSBvZiBLV1FFKDB4JXgpXG4iLAorCQkJCSAgIG9wY29kZSk7CisJCQlicmVhazsKKwkJfQorCQlpZiAocmV0IDwgMCkKKwkJCW5ldGRldl9lcnIoZGV2LT5uZXRkZXYsICJLV1FFKDB4JXgpIGZhaWxlZFxuIiwKKwkJCQkgICBvcGNvZGUpOworCQlpICs9IHdvcms7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNuaWNfc3VibWl0X2JueDJ4X2t3cWVzKHN0cnVjdCBjbmljX2RldiAqZGV2LCBzdHJ1Y3Qga3dxZSAqd3Flc1tdLAorCQkJCSAgIHUzMiBudW1fd3FlcykKK3sKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKwl1MzIgbGF5ZXJfY29kZTsKKworCWlmICghdGVzdF9iaXQoQ05JQ19GX0NOSUNfVVAsICZkZXYtPmZsYWdzKSkKKwkJcmV0dXJuIC1FQUdBSU47CQkvKiBibngyeCBpcyBkb3duICovCisKKwlpZiAoIW51bV93cWVzKQorCQlyZXR1cm4gMDsKKworCWxheWVyX2NvZGUgPSB3cWVzWzBdLT5rd3FlX29wX2ZsYWcgJiBLV1FFX0xBWUVSX01BU0s7CisJc3dpdGNoIChsYXllcl9jb2RlKSB7CisJY2FzZSBLV1FFX0ZMQUdTX0xBWUVSX01BU0tfTDVfSVNDU0k6CisJY2FzZSBLV1FFX0ZMQUdTX0xBWUVSX01BU0tfTDQ6CisJY2FzZSBLV1FFX0ZMQUdTX0xBWUVSX01BU0tfTDI6CisJCXJldCA9IGNuaWNfc3VibWl0X2JueDJ4X2lzY3NpX2t3cWVzKGRldiwgd3FlcywgbnVtX3dxZXMpOworCQlicmVhazsKKworCWNhc2UgS1dRRV9GTEFHU19MQVlFUl9NQVNLX0w1X0ZDT0U6CisJCXJldCA9IGNuaWNfc3VibWl0X2JueDJ4X2Zjb2Vfa3dxZXMoZGV2LCB3cWVzLCBudW1fd3Flcyk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIHUzMiBjbmljX2dldF9rY3FlX2xheWVyX21hc2sodTMyIG9wZmxhZykKK3sKKwlpZiAodW5saWtlbHkoS0NRRV9PUENPREUob3BmbGFnKSA9PSBGQ09FX1JBTVJPRF9DTURfSURfVEVSTUlOQVRFX0NPTk4pKQorCQlyZXR1cm4gS0NRRV9GTEFHU19MQVlFUl9NQVNLX0w0OworCisJcmV0dXJuIG9wZmxhZyAmIEtDUUVfRkxBR1NfTEFZRVJfTUFTSzsKK30KKwogc3RhdGljIHZvaWQgc2VydmljZV9rY3FlcyhzdHJ1Y3QgY25pY19kZXYgKmRldiwgaW50IG51bV9jcWVzKQogewogCXN0cnVjdCBjbmljX2xvY2FsICpjcCA9IGRldi0+Y25pY19wcml2OwpAQCAtMjE2MCw3ICsyNTk1LDcgQEAKIAkJc3RydWN0IGNuaWNfdWxwX29wcyAqdWxwX29wczsKIAkJaW50IHVscF90eXBlOwogCQl1MzIga2NxZV9vcF9mbGFnID0gY3AtPmNvbXBsZXRlZF9rY3FbaV0tPmtjcWVfb3BfZmxhZzsKLQkJdTMyIGtjcWVfbGF5ZXIgPSBrY3FlX29wX2ZsYWcgJiBLQ1FFX0ZMQUdTX0xBWUVSX01BU0s7CisJCXUzMiBrY3FlX2xheWVyID0gY25pY19nZXRfa2NxZV9sYXllcl9tYXNrKGtjcWVfb3BfZmxhZyk7CiAKIAkJaWYgKHVubGlrZWx5KGtjcWVfb3BfZmxhZyAmIEtDUUVfUkFNUk9EX0NPTVBMRVRJT04pKQogCQkJY29tcCsrOwpAQCAtMjE2OCw3ICsyNjAzLDcgQEAKIAkJd2hpbGUgKGogPCBudW1fY3FlcykgewogCQkJdTMyIG5leHRfb3AgPSBjcC0+Y29tcGxldGVkX2tjcVtpICsgal0tPmtjcWVfb3BfZmxhZzsKIAotCQkJaWYgKChuZXh0X29wICYgS0NRRV9GTEFHU19MQVlFUl9NQVNLKSAhPSBrY3FlX2xheWVyKQorCQkJaWYgKGNuaWNfZ2V0X2tjcWVfbGF5ZXJfbWFzayhuZXh0X29wKSAhPSBrY3FlX2xheWVyKQogCQkJCWJyZWFrOwogCiAJCQlpZiAodW5saWtlbHkobmV4dF9vcCAmIEtDUUVfUkFNUk9EX0NPTVBMRVRJT04pKQpAQCAtMjE4MCw2ICsyNjE1LDggQEAKIAkJCXVscF90eXBlID0gQ05JQ19VTFBfUkRNQTsKIAkJZWxzZSBpZiAoa2NxZV9sYXllciA9PSBLQ1FFX0ZMQUdTX0xBWUVSX01BU0tfTDVfSVNDU0kpCiAJCQl1bHBfdHlwZSA9IENOSUNfVUxQX0lTQ1NJOworCQllbHNlIGlmIChrY3FlX2xheWVyID09IEtDUUVfRkxBR1NfTEFZRVJfTUFTS19MNV9GQ09FKQorCQkJdWxwX3R5cGUgPSBDTklDX1VMUF9GQ09FOwogCQllbHNlIGlmIChrY3FlX2xheWVyID09IEtDUUVfRkxBR1NfTEFZRVJfTUFTS19MNCkKIAkJCXVscF90eXBlID0gQ05JQ19VTFBfTDQ7CiAJCWVsc2UgaWYgKGtjcWVfbGF5ZXIgPT0gS0NRRV9GTEFHU19MQVlFUl9NQVNLX0wyKQpAQCAtMjM0OCwxMSArMjc4NSwxMiBAQAogc3RhdGljIGludCBjbmljX3NlcnZpY2VfYm54Mih2b2lkICpkYXRhLCB2b2lkICpzdGF0dXNfYmxrKQogewogCXN0cnVjdCBjbmljX2RldiAqZGV2ID0gZGF0YTsKLQlzdHJ1Y3QgY25pY19sb2NhbCAqY3AgPSBkZXYtPmNuaWNfcHJpdjsKLQl1MzIgc3RhdHVzX2lkeCA9ICpjcC0+a2NxMS5zdGF0dXNfaWR4X3B0cjsKIAotCWlmICh1bmxpa2VseSghdGVzdF9iaXQoQ05JQ19GX0NOSUNfVVAsICZkZXYtPmZsYWdzKSkpCi0JCXJldHVybiBzdGF0dXNfaWR4OworCWlmICh1bmxpa2VseSghdGVzdF9iaXQoQ05JQ19GX0NOSUNfVVAsICZkZXYtPmZsYWdzKSkpIHsKKwkJc3RydWN0IHN0YXR1c19ibG9jayAqc2JsayA9IHN0YXR1c19ibGs7CisKKwkJcmV0dXJuIHNibGstPnN0YXR1c19pZHg7CisJfQogCiAJcmV0dXJuIGNuaWNfc2VydmljZV9ibngyX3F1ZXVlcyhkZXYpOwogfQpAQCAtMjM3MSw5ICsyODA5LDEwIEBACiBzdGF0aWMgdm9pZCBjbmljX2RvaXJxKHN0cnVjdCBjbmljX2RldiAqZGV2KQogewogCXN0cnVjdCBjbmljX2xvY2FsICpjcCA9IGRldi0+Y25pY19wcml2OwotCXUxNiBwcm9kID0gY3AtPmtjcTEuc3dfcHJvZF9pZHggJiBNQVhfS0NRX0lEWDsKIAogCWlmIChsaWtlbHkodGVzdF9iaXQoQ05JQ19GX0NOSUNfVVAsICZkZXYtPmZsYWdzKSkpIHsKKwkJdTE2IHByb2QgPSBjcC0+a2NxMS5zd19wcm9kX2lkeCAmIE1BWF9LQ1FfSURYOworCiAJCXByZWZldGNoKGNwLT5zdGF0dXNfYmxrLmdlbik7CiAJCXByZWZldGNoKCZjcC0+a2NxMS5rY3FbS0NRX1BHKHByb2QpXVtLQ1FfSURYKHByb2QpXSk7CiAKQEAgLTI0NzUsMTIgKzI5MTQsMTkgQEAKIAlzdGF0dXNfaWR4ID0gY25pY19zZXJ2aWNlX2JueDJ4X2tjcShkZXYsICZjcC0+a2NxMSk7CiAKIAlDTklDX1dSMTYoZGV2LCBjcC0+a2NxMS5pb19hZGRyLCBjcC0+a2NxMS5zd19wcm9kX2lkeCArIE1BWF9LQ1FfSURYKTsKLQlpZiAoQk5YMlhfQ0hJUF9JU19FMihjcC0+Y2hpcF9pZCkpCisKKwlpZiAoQk5YMlhfQ0hJUF9JU19FMihjcC0+Y2hpcF9pZCkpIHsKKwkJc3RhdHVzX2lkeCA9IGNuaWNfc2VydmljZV9ibngyeF9rY3EoZGV2LCAmY3AtPmtjcTIpOworCisJCUNOSUNfV1IxNihkZXYsIGNwLT5rY3EyLmlvX2FkZHIsIGNwLT5rY3EyLnN3X3Byb2RfaWR4ICsKKwkJCSAgTUFYX0tDUV9JRFgpOworCiAJCWNuaWNfYWNrX2lndV9zYihkZXYsIGNwLT5ibngyeF9pZ3Vfc2JfaWQsIElHVV9TRUdfQUNDRVNTX0RFRiwKIAkJCQlzdGF0dXNfaWR4LCBJR1VfSU5UX0VOQUJMRSwgMSk7Ci0JZWxzZQorCX0gZWxzZSB7CiAJCWNuaWNfYWNrX2JueDJ4X2ludChkZXYsIGNwLT5ibngyeF9pZ3Vfc2JfaWQsIFVTVE9STV9JRCwKIAkJCQkgICBzdGF0dXNfaWR4LCBJR1VfSU5UX0VOQUJMRSwgMSk7CisJfQogfQogCiBzdGF0aWMgaW50IGNuaWNfc2VydmljZV9ibngyeCh2b2lkICpkYXRhLCB2b2lkICpzdGF0dXNfYmxrKQpAQCAtMjg4OSw3ICszMzM1LDcgQEAKIAkJc3RydWN0IGNuaWNfZGV2ICpkZXYgPSBjc2stPmRldjsKIAkJc3RydWN0IGNuaWNfbG9jYWwgKmNwID0gZGV2LT5jbmljX3ByaXY7CiAKLQkJY25pY19mcmVlX2lkKCZjcC0+Y3NrX3BvcnRfdGJsLCBjc2stPnNyY19wb3J0KTsKKwkJY25pY19mcmVlX2lkKCZjcC0+Y3NrX3BvcnRfdGJsLCBiZTE2X3RvX2NwdShjc2stPnNyY19wb3J0KSk7CiAJCWNzay0+c3JjX3BvcnQgPSAwOwogCX0KIH0KQEAgLTMwMjAsNyArMzQ2Niw4IEBACiAJaW50IGlzX3Y2LCByYyA9IDA7CiAJc3RydWN0IGRzdF9lbnRyeSAqZHN0ID0gTlVMTDsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqcmVhbGRldjsKLQl1MzIgbG9jYWxfcG9ydDsKKwlfX2JlMTYgbG9jYWxfcG9ydDsKKwl1MzIgcG9ydF9pZDsKIAogCWlmIChzYWRkci0+bG9jYWwudjYuc2luNl9mYW1pbHkgPT0gQUZfSU5FVDYgJiYKIAkgICAgc2FkZHItPnJlbW90ZS52Ni5zaW42X2ZhbWlseSA9PSBBRl9JTkVUNikKQEAgLTMwNjAsMTkgKzM1MDcsMjEgQEAKIAkJfQogCX0KIAotCWlmIChsb2NhbF9wb3J0ID49IENOSUNfTE9DQUxfUE9SVF9NSU4gJiYKLQkgICAgbG9jYWxfcG9ydCA8IENOSUNfTE9DQUxfUE9SVF9NQVgpIHsKLQkJaWYgKGNuaWNfYWxsb2NfaWQoJmNwLT5jc2tfcG9ydF90YmwsIGxvY2FsX3BvcnQpKQotCQkJbG9jYWxfcG9ydCA9IDA7CisJcG9ydF9pZCA9IGJlMTZfdG9fY3B1KGxvY2FsX3BvcnQpOworCWlmIChwb3J0X2lkID49IENOSUNfTE9DQUxfUE9SVF9NSU4gJiYKKwkgICAgcG9ydF9pZCA8IENOSUNfTE9DQUxfUE9SVF9NQVgpIHsKKwkJaWYgKGNuaWNfYWxsb2NfaWQoJmNwLT5jc2tfcG9ydF90YmwsIHBvcnRfaWQpKQorCQkJcG9ydF9pZCA9IDA7CiAJfSBlbHNlCi0JCWxvY2FsX3BvcnQgPSAwOworCQlwb3J0X2lkID0gMDsKIAotCWlmICghbG9jYWxfcG9ydCkgewotCQlsb2NhbF9wb3J0ID0gY25pY19hbGxvY19uZXdfaWQoJmNwLT5jc2tfcG9ydF90YmwpOwotCQlpZiAobG9jYWxfcG9ydCA9PSAtMSkgeworCWlmICghcG9ydF9pZCkgeworCQlwb3J0X2lkID0gY25pY19hbGxvY19uZXdfaWQoJmNwLT5jc2tfcG9ydF90YmwpOworCQlpZiAocG9ydF9pZCA9PSAtMSkgewogCQkJcmMgPSAtRU5PTUVNOwogCQkJZ290byBlcnJfb3V0OwogCQl9CisJCWxvY2FsX3BvcnQgPSBjcHVfdG9fYmUxNihwb3J0X2lkKTsKIAl9CiAJY3NrLT5zcmNfcG9ydCA9IGxvY2FsX3BvcnQ7CiAKQEAgLTMyMTQsNiArMzY2MywxOCBAQAogCWNza19wdXQoY3NrKTsKIH0KIAorc3RhdGljIHZvaWQgY25pY19wcm9jZXNzX2Zjb2VfdGVybV9jb25uKHN0cnVjdCBjbmljX2RldiAqZGV2LCBzdHJ1Y3Qga2NxZSAqa2NxZSkKK3sKKwlzdHJ1Y3QgY25pY19sb2NhbCAqY3AgPSBkZXYtPmNuaWNfcHJpdjsKKwlzdHJ1Y3QgZmNvZV9rY3FlICpmY19rY3FlID0gKHN0cnVjdCBmY29lX2tjcWUgKikga2NxZTsKKwl1MzIgbDVfY2lkID0gZmNfa2NxZS0+ZmNvZV9jb25uX2lkICsgQk5YMlhfRkNPRV9MNV9DSURfQkFTRTsKKwlzdHJ1Y3QgY25pY19jb250ZXh0ICpjdHggPSAmY3AtPmN0eF90YmxbbDVfY2lkXTsKKworCWN0eC0+dGltZXN0YW1wID0gamlmZmllczsKKwljdHgtPndhaXRfY29uZCA9IDE7CisJd2FrZV91cCgmY3R4LT53YWl0cSk7Cit9CisKIHN0YXRpYyB2b2lkIGNuaWNfY21fcHJvY2Vzc19rY3FlKHN0cnVjdCBjbmljX2RldiAqZGV2LCBzdHJ1Y3Qga2NxZSAqa2NxZSkKIHsKIAlzdHJ1Y3QgY25pY19sb2NhbCAqY3AgPSBkZXYtPmNuaWNfcHJpdjsKQEAgLTMyMjIsNiArMzY4MywxMCBAQAogCXUzMiBsNV9jaWQ7CiAJc3RydWN0IGNuaWNfc29jayAqY3NrOwogCisJaWYgKG9wY29kZSA9PSBGQ09FX1JBTVJPRF9DTURfSURfVEVSTUlOQVRFX0NPTk4pIHsKKwkJY25pY19wcm9jZXNzX2Zjb2VfdGVybV9jb25uKGRldiwga2NxZSk7CisJCXJldHVybjsKKwl9CiAJaWYgKG9wY29kZSA9PSBMNF9LQ1FFX09QQ09ERV9WQUxVRV9PRkZMT0FEX1BHIHx8CiAJICAgIG9wY29kZSA9PSBMNF9LQ1FFX09QQ09ERV9WQUxVRV9VUERBVEVfUEcpIHsKIAkJY25pY19jbV9wcm9jZXNzX29mZmxkX3BnKGRldiwgbDRrY3FlKTsKQEAgLTM4NTgsNyArNDMyMyw3IEBACiAKIAltZW1zZXQoJmwya3dxZSwgMCwgc2l6ZW9mKGwya3dxZSkpOwogCXdxZXNbMF0gPSAmbDJrd3FlOwotCWwya3dxZS5rd3FlX29wX2ZsYWcgPSAoTDJfTEFZRVJfQ09ERSA8PCBLV1FFX0ZMQUdTX0xBWUVSX1NISUZUKSB8CisJbDJrd3FlLmt3cWVfb3BfZmxhZyA9IChMMl9MQVlFUl9DT0RFIDw8IEtXUUVfTEFZRVJfU0hJRlQpIHwKIAkJCSAgICAgIChMMl9LV1FFX09QQ09ERV9WQUxVRV9GTFVTSCA8PAogCQkJICAgICAgIEtXUUVfT1BDT0RFX1NISUZUKSB8IDI7CiAJZGV2LT5zdWJtaXRfa3dxZXMoZGV2LCB3cWVzLCAxKTsKQEAgLTQxMTIsNyArNDU3Nyw3IEBACiAJc3RydWN0IGhvc3Rfc3Bfc3RhdHVzX2Jsb2NrICpzYiA9IGNwLT5ibngyeF9kZWZfc3RhdHVzX2JsazsKIAlpbnQgcG9ydCA9IENOSUNfUE9SVChjcCk7CiAJaW50IGk7Ci0JaW50IGNsaSA9IEJOWDJYX0lTQ1NJX0NMX0lEKENOSUNfRTFIVk4oY3ApKTsKKwl1MzIgY2xpID0gY3AtPmV0aGRldi0+aXNjc2lfbDJfY2xpZW50X2lkOwogCXUzMiB2YWw7CiAKIAltZW1zZXQodHhiZCwgMCwgQkNNX1BBR0VfU0laRSk7CkBAIC00MTczLDcgKzQ2MzgsNyBAQAogCXN0cnVjdCBob3N0X3NwX3N0YXR1c19ibG9jayAqc2IgPSBjcC0+Ym54MnhfZGVmX3N0YXR1c19ibGs7CiAJaW50IGk7CiAJaW50IHBvcnQgPSBDTklDX1BPUlQoY3ApOwotCWludCBjbGkgPSBCTlgyWF9JU0NTSV9DTF9JRChDTklDX0UxSFZOKGNwKSk7CisJdTMyIGNsaSA9IGNwLT5ldGhkZXYtPmlzY3NpX2wyX2NsaWVudF9pZDsKIAlpbnQgY2xfcXpvbmVfaWQgPSBCTlgyWF9DTF9RWk9ORV9JRChjcCwgY2xpKTsKIAl1MzIgdmFsOwogCWRtYV9hZGRyX3QgcmluZ19tYXAgPSB1ZGV2LT5sMl9yaW5nX21hcDsKQEAgLTQyMzcsMTIgKzQ3MDIsMzkgQEAKIAogCWNwLT5yeF9jb25zX3B0ciA9CiAJCSZzYi0+c3Bfc2IuaW5kZXhfdmFsdWVzW0hDX1NQX0lOREVYX0VUSF9JU0NTSV9SWF9DUV9DT05TXTsKKwljcC0+cnhfY29ucyA9ICpjcC0+cnhfY29uc19wdHI7Cit9CisKK3N0YXRpYyBpbnQgY25pY19yZWFkX2JueDJ4X2lzY3NpX21hYyhzdHJ1Y3QgY25pY19kZXYgKmRldiwgdTMyIHVwcGVyX2FkZHIsCisJCQkJICAgICB1MzIgbG93ZXJfYWRkcikKK3sKKwl1MzIgdmFsOworCXU4IG1hY1s2XTsKKworCXZhbCA9IENOSUNfUkQoZGV2LCB1cHBlcl9hZGRyKTsKKworCW1hY1swXSA9ICh1OCkgKHZhbCA+PiA4KTsKKwltYWNbMV0gPSAodTgpIHZhbDsKKworCXZhbCA9IENOSUNfUkQoZGV2LCBsb3dlcl9hZGRyKTsKKworCW1hY1syXSA9ICh1OCkgKHZhbCA+PiAyNCk7CisJbWFjWzNdID0gKHU4KSAodmFsID4+IDE2KTsKKwltYWNbNF0gPSAodTgpICh2YWwgPj4gOCk7CisJbWFjWzVdID0gKHU4KSB2YWw7CisKKwlpZiAoaXNfdmFsaWRfZXRoZXJfYWRkcihtYWMpKSB7CisJCW1lbWNweShkZXYtPm1hY19hZGRyLCBtYWMsIDYpOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIGNuaWNfZ2V0X2JueDJ4X2lzY3NpX2luZm8oc3RydWN0IGNuaWNfZGV2ICpkZXYpCiB7CiAJc3RydWN0IGNuaWNfbG9jYWwgKmNwID0gZGV2LT5jbmljX3ByaXY7Ci0JdTMyIGJhc2UsIGJhc2UyLCBhZGRyLCB2YWw7CisJdTMyIGJhc2UsIGJhc2UyLCBhZGRyLCBhZGRyMSwgdmFsOwogCWludCBwb3J0ID0gQ05JQ19QT1JUKGNwKTsKIAogCWRldi0+bWF4X2lzY3NpX2Nvbm4gPSAwOwpAQCAtNDI1NSwyMCArNDc0NywxMCBAQAogCWFkZHIgPSBCTlgyWF9TSE1FTV9BRERSKGJhc2UsCiAJCWRldl9pbmZvLnBvcnRfaHdfY29uZmlnW3BvcnRdLmlzY3NpX21hY191cHBlcik7CiAKLQl2YWwgPSBDTklDX1JEKGRldiwgYWRkcik7Ci0KLQlkZXYtPm1hY19hZGRyWzBdID0gKHU4KSAodmFsID4+IDgpOwotCWRldi0+bWFjX2FkZHJbMV0gPSAodTgpIHZhbDsKLQotCWFkZHIgPSBCTlgyWF9TSE1FTV9BRERSKGJhc2UsCisJYWRkcjEgPSBCTlgyWF9TSE1FTV9BRERSKGJhc2UsCiAJCWRldl9pbmZvLnBvcnRfaHdfY29uZmlnW3BvcnRdLmlzY3NpX21hY19sb3dlcik7CiAKLQl2YWwgPSBDTklDX1JEKGRldiwgYWRkcik7Ci0KLQlkZXYtPm1hY19hZGRyWzJdID0gKHU4KSAodmFsID4+IDI0KTsKLQlkZXYtPm1hY19hZGRyWzNdID0gKHU4KSAodmFsID4+IDE2KTsKLQlkZXYtPm1hY19hZGRyWzRdID0gKHU4KSAodmFsID4+IDgpOwotCWRldi0+bWFjX2FkZHJbNV0gPSAodTgpIHZhbDsKKwljbmljX3JlYWRfYm54MnhfaXNjc2lfbWFjKGRldiwgYWRkciwgYWRkcjEpOwogCiAJYWRkciA9IEJOWDJYX1NITUVNX0FERFIoYmFzZSwgdmFsaWRpdHlfbWFwW3BvcnRdKTsKIAl2YWwgPSBDTklDX1JEKGRldiwgYWRkcik7CkBAIC00Mjg0LDYgKzQ3NjYsMTAgQEAKIAkJCXZhbDE2IF49IDB4MWUxZTsKIAkJZGV2LT5tYXhfaXNjc2lfY29ubiA9IHZhbDE2OwogCX0KKworCWlmIChCTlgyWF9DSElQX0lTX0UyKGNwLT5jaGlwX2lkKSkKKwkJZGV2LT5tYXhfZmNvZV9jb25uID0gQk5YMlhfRkNPRV9OVU1fQ09OTkVDVElPTlM7CisKIAlpZiAoQk5YMlhfQ0hJUF9JU19FMUgoY3AtPmNoaXBfaWQpIHx8IEJOWDJYX0NISVBfSVNfRTIoY3AtPmNoaXBfaWQpKSB7CiAJCWludCBmdW5jID0gQ05JQ19GVU5DKGNwKTsKIAkJdTMyIG1mX2NmZ19hZGRyOwpAQCAtNDI5NCwyMSArNDc4MCw5MCBAQAogCQllbHNlCiAJCQltZl9jZmdfYWRkciA9IGJhc2UgKyBCTlgyWF9TSE1FTV9NRl9CTEtfT0ZGU0VUOwogCi0JCWFkZHIgPSBtZl9jZmdfYWRkciArCi0JCQlvZmZzZXRvZihzdHJ1Y3QgbWZfY2ZnLCBmdW5jX21mX2NvbmZpZ1tmdW5jXS5lMWhvdl90YWcpOworCQlpZiAoQk5YMlhfQ0hJUF9JU19FMihjcC0+Y2hpcF9pZCkpIHsKKwkJCS8qIE11c3QgZGV0ZXJtaW5lIGlmIHRoZSBNRiBpcyBTRCB2cyBTSSBtb2RlICovCisJCQlhZGRyID0gQk5YMlhfU0hNRU1fQUREUihiYXNlLAorCQkJCQlkZXZfaW5mby5zaGFyZWRfZmVhdHVyZV9jb25maWcuY29uZmlnKTsKKwkJCXZhbCA9IENOSUNfUkQoZGV2LCBhZGRyKTsKKwkJCWlmICgodmFsICYgU0hBUkVEX0ZFQVRfQ0ZHX0ZPUkNFX1NGX01PREVfTUFTSykgPT0KKwkJCSAgICBTSEFSRURfRkVBVF9DRkdfRk9SQ0VfU0ZfTU9ERV9TV0lUQ0hfSU5ERVBUKSB7CisJCQkJaW50IHJjOworCisJCQkJLyogTVVMVElfRlVOQ1RJT05fU0kgbW9kZSAqLworCQkJCWFkZHIgPSBCTlgyWF9NRl9DRkdfQUREUihtZl9jZmdfYWRkciwKKwkJCQkJZnVuY19leHRfY29uZmlnW2Z1bmNdLmZ1bmNfY2ZnKTsKKwkJCQl2YWwgPSBDTklDX1JEKGRldiwgYWRkcik7CisJCQkJaWYgKCEodmFsICYgTUFDUF9GVU5DX0NGR19GTEFHU19JU0NTSV9PRkZMT0FEKSkKKwkJCQkJZGV2LT5tYXhfaXNjc2lfY29ubiA9IDA7CisKKwkJCQlpZiAoISh2YWwgJiBNQUNQX0ZVTkNfQ0ZHX0ZMQUdTX0ZDT0VfT0ZGTE9BRCkpCisJCQkJCWRldi0+bWF4X2Zjb2VfY29ubiA9IDA7CisKKwkJCQlhZGRyID0gQk5YMlhfTUZfQ0ZHX0FERFIobWZfY2ZnX2FkZHIsCisJCQkJCWZ1bmNfZXh0X2NvbmZpZ1tmdW5jXS4KKwkJCQkJaXNjc2lfbWFjX2FkZHJfdXBwZXIpOworCQkJCWFkZHIxID0gQk5YMlhfTUZfQ0ZHX0FERFIobWZfY2ZnX2FkZHIsCisJCQkJCWZ1bmNfZXh0X2NvbmZpZ1tmdW5jXS4KKwkJCQkJaXNjc2lfbWFjX2FkZHJfbG93ZXIpOworCQkJCXJjID0gY25pY19yZWFkX2JueDJ4X2lzY3NpX21hYyhkZXYsIGFkZHIsCisJCQkJCQkJCWFkZHIxKTsKKwkJCQlpZiAocmMgJiYgZnVuYyA+IDEpCisJCQkJCWRldi0+bWF4X2lzY3NpX2Nvbm4gPSAwOworCisJCQkJcmV0dXJuOworCQkJfQorCQl9CisKKwkJYWRkciA9IEJOWDJYX01GX0NGR19BRERSKG1mX2NmZ19hZGRyLAorCQkJZnVuY19tZl9jb25maWdbZnVuY10uZTFob3ZfdGFnKTsKIAogCQl2YWwgPSBDTklDX1JEKGRldiwgYWRkcik7CiAJCXZhbCAmPSBGVU5DX01GX0NGR19FMUhPVl9UQUdfTUFTSzsKIAkJaWYgKHZhbCAhPSBGVU5DX01GX0NGR19FMUhPVl9UQUdfREVGQVVMVCkgewotCQkJYWRkciA9IG1mX2NmZ19hZGRyICsKLQkJCQlvZmZzZXRvZihzdHJ1Y3QgbWZfY2ZnLAotCQkJCQkgZnVuY19tZl9jb25maWdbZnVuY10uY29uZmlnKTsKLQkJCXZhbCA9IENOSUNfUkQoZGV2LCBhZGRyKTsKLQkJCXZhbCAmPSBGVU5DX01GX0NGR19QUk9UT0NPTF9NQVNLOwotCQkJaWYgKHZhbCAhPSBGVU5DX01GX0NGR19QUk9UT0NPTF9JU0NTSSkKLQkJCQlkZXYtPm1heF9pc2NzaV9jb25uID0gMDsKKwkJCWRldi0+bWF4X2Zjb2VfY29ubiA9IDA7CisJCQlkZXYtPm1heF9pc2NzaV9jb25uID0gMDsKIAkJfQogCX0KKwlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoZGV2LT5tYWNfYWRkcikpCisJCWRldi0+bWF4X2lzY3NpX2Nvbm4gPSAwOworfQorCitzdGF0aWMgdm9pZCBjbmljX2luaXRfYm54Mnhfa2NxKHN0cnVjdCBjbmljX2RldiAqZGV2KQoreworCXN0cnVjdCBjbmljX2xvY2FsICpjcCA9IGRldi0+Y25pY19wcml2OworCXUzMiBwZmlkID0gY3AtPnBmaWQ7CisKKwljcC0+a2NxMS5pb19hZGRyID0gQkFSX0NTVFJPUk1fSU5UTUVNICsKKwkJCSAgIENTVE9STV9JU0NTSV9FUV9QUk9EX09GRlNFVChwZmlkLCAwKTsKKwljcC0+a2NxMS5zd19wcm9kX2lkeCA9IDA7CisKKwlpZiAoQk5YMlhfQ0hJUF9JU19FMihjcC0+Y2hpcF9pZCkpIHsKKwkJc3RydWN0IGhvc3RfaGNfc3RhdHVzX2Jsb2NrX2UyICpzYiA9IGNwLT5zdGF0dXNfYmxrLmdlbjsKKworCQljcC0+a2NxMS5od19wcm9kX2lkeF9wdHIgPQorCQkJJnNiLT5zYi5pbmRleF92YWx1ZXNbSENfSU5ERVhfSVNDU0lfRVFfQ09OU107CisJCWNwLT5rY3ExLnN0YXR1c19pZHhfcHRyID0KKwkJCSZzYi0+c2IucnVubmluZ19pbmRleFtTTV9SWF9JRF07CisJfSBlbHNlIHsKKwkJc3RydWN0IGhvc3RfaGNfc3RhdHVzX2Jsb2NrX2UxeCAqc2IgPSBjcC0+c3RhdHVzX2Jsay5nZW47CisKKwkJY3AtPmtjcTEuaHdfcHJvZF9pZHhfcHRyID0KKwkJCSZzYi0+c2IuaW5kZXhfdmFsdWVzW0hDX0lOREVYX0lTQ1NJX0VRX0NPTlNdOworCQljcC0+a2NxMS5zdGF0dXNfaWR4X3B0ciA9CisJCQkmc2ItPnNiLnJ1bm5pbmdfaW5kZXhbU01fUlhfSURdOworCX0KKworCWlmIChCTlgyWF9DSElQX0lTX0UyKGNwLT5jaGlwX2lkKSkgeworCQlzdHJ1Y3QgaG9zdF9oY19zdGF0dXNfYmxvY2tfZTIgKnNiID0gY3AtPnN0YXR1c19ibGsuZ2VuOworCisJCWNwLT5rY3EyLmlvX2FkZHIgPSBCQVJfVVNUUk9STV9JTlRNRU0gKworCQkJCQlVU1RPUk1fRkNPRV9FUV9QUk9EX09GRlNFVChwZmlkKTsKKwkJY3AtPmtjcTIuc3dfcHJvZF9pZHggPSAwOworCQljcC0+a2NxMi5od19wcm9kX2lkeF9wdHIgPQorCQkJJnNiLT5zYi5pbmRleF92YWx1ZXNbSENfSU5ERVhfRkNPRV9FUV9DT05TXTsKKwkJY3AtPmtjcTIuc3RhdHVzX2lkeF9wdHIgPQorCQkJJnNiLT5zYi5ydW5uaW5nX2luZGV4W1NNX1JYX0lEXTsKKwl9CiB9CiAKIHN0YXRpYyBpbnQgY25pY19zdGFydF9ibngyeF9odyhzdHJ1Y3QgY25pY19kZXYgKmRldikKQEAgLTQzNDEsMjcgKzQ4OTYsMTggQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gLUVOT01FTTsKIAorCWlmIChCTlgyWF9DSElQX0lTX0UyKGNwLT5jaGlwX2lkKSkgeworCQlyZXQgPSBjbmljX2luaXRfaWRfdGJsKCZjcC0+ZmNvZV9jaWRfdGJsLAorCQkJCQlCTlgyWF9GQ09FX05VTV9DT05ORUNUSU9OUywKKwkJCQkJY3AtPmZjb2Vfc3RhcnRfY2lkKTsKKworCQlpZiAocmV0KQorCQkJcmV0dXJuIC1FTk9NRU07CisJfQorCiAJY3AtPmJueDJ4X2lndV9zYl9pZCA9IGV0aGRldi0+aXJxX2FyclswXS5zdGF0dXNfYmxrX251bTI7CiAKLQljcC0+a2NxMS5pb19hZGRyID0gQkFSX0NTVFJPUk1fSU5UTUVNICsKLQkJCSAgQ1NUT1JNX0lTQ1NJX0VRX1BST0RfT0ZGU0VUKHBmaWQsIDApOwotCWNwLT5rY3ExLnN3X3Byb2RfaWR4ID0gMDsKLQotCWlmIChCTlgyWF9DSElQX0lTX0UyKGNwLT5jaGlwX2lkKSkgewotCQlzdHJ1Y3QgaG9zdF9oY19zdGF0dXNfYmxvY2tfZTIgKnNiID0gY3AtPnN0YXR1c19ibGsuZ2VuOwotCi0JCWNwLT5rY3ExLmh3X3Byb2RfaWR4X3B0ciA9Ci0JCQkmc2ItPnNiLmluZGV4X3ZhbHVlc1tIQ19JTkRFWF9JU0NTSV9FUV9DT05TXTsKLQkJY3AtPmtjcTEuc3RhdHVzX2lkeF9wdHIgPQotCQkJJnNiLT5zYi5ydW5uaW5nX2luZGV4W1NNX1JYX0lEXTsKLQl9IGVsc2UgewotCQlzdHJ1Y3QgaG9zdF9oY19zdGF0dXNfYmxvY2tfZTF4ICpzYiA9IGNwLT5zdGF0dXNfYmxrLmdlbjsKLQotCQljcC0+a2NxMS5od19wcm9kX2lkeF9wdHIgPQotCQkJJnNiLT5zYi5pbmRleF92YWx1ZXNbSENfSU5ERVhfSVNDU0lfRVFfQ09OU107Ci0JCWNwLT5rY3ExLnN0YXR1c19pZHhfcHRyID0KLQkJCSZzYi0+c2IucnVubmluZ19pbmRleFtTTV9SWF9JRF07Ci0JfQorCWNuaWNfaW5pdF9ibngyeF9rY3EoZGV2KTsKIAogCWNuaWNfZ2V0X2JueDJ4X2lzY3NpX2luZm8oZGV2KTsKIApAQCAtNDQzMCw4ICs0OTc2LDkgQEAKIAkJY25pY19pbml0X2JueDJfcnhfcmluZyhkZXYpOwogCQlzZXRfYml0KENOSUNfTENMX0ZMX1JJTkdTX0lOSVRFRCwgJmNwLT5jbmljX2xvY2FsX2ZsYWdzKTsKIAl9IGVsc2UgaWYgKHRlc3RfYml0KENOSUNfRl9CTlgyWF9DTEFTUywgJmRldi0+ZmxhZ3MpKSB7Ci0JCXUzMiBjbGkgPSBCTlgyWF9JU0NTSV9DTF9JRChDTklDX0UxSFZOKGNwKSk7Ci0JCXUzMiBjbF9xem9uZV9pZCwgdHlwZTsKKwkJdTMyIGNsaSA9IGNwLT5ldGhkZXYtPmlzY3NpX2wyX2NsaWVudF9pZDsKKwkJdTMyIGNpZCA9IGNwLT5ldGhkZXYtPmlzY3NpX2wyX2NpZDsKKwkJdTMyIGNsX3F6b25lX2lkOwogCQlzdHJ1Y3QgY2xpZW50X2luaXRfcmFtcm9kX2RhdGEgKmRhdGE7CiAJCXVuaW9uIGw1Y21fc3BlY2lmaWNfZGF0YSBsNV9kYXRhOwogCQlzdHJ1Y3QgdXN0b3JtX2V0aF9yeF9wcm9kdWNlcnMgcnhfcHJvZHMgPSB7MH07CkBAIC00NDYzLDE1ICs1MDEwLDEwIEBACiAJCWw1X2RhdGEucGh5X2FkZHJlc3MubG8gPSB1ZGV2LT5sMl9idWZfbWFwICYgMHhmZmZmZmZmZjsKIAkJbDVfZGF0YS5waHlfYWRkcmVzcy5oaSA9ICh1NjQpIHVkZXYtPmwyX2J1Zl9tYXAgPj4gMzI7CiAKLQkJdHlwZSA9IChFVEhfQ09OTkVDVElPTl9UWVBFIDw8IFNQRV9IRFJfQ09OTl9UWVBFX1NISUZUKQotCQkJJiBTUEVfSERSX0NPTk5fVFlQRTsKLQkJdHlwZSB8PSAoKGNwLT5wZmlkIDw8IFNQRV9IRFJfRlVOQ1RJT05fSURfU0hJRlQpICYKLQkJCVNQRV9IRFJfRlVOQ1RJT05fSUQpOwotCiAJCXNldF9iaXQoQ05JQ19MQ0xfRkxfUklOR1NfSU5JVEVELCAmY3AtPmNuaWNfbG9jYWxfZmxhZ3MpOwogCiAJCWNuaWNfc3VibWl0X2t3cWVfMTYoZGV2LCBSQU1ST0RfQ01EX0lEX0VUSF9DTElFTlRfU0VUVVAsCi0JCQlCTlgyWF9JU0NTSV9MMl9DSUQsIHR5cGUsICZsNV9kYXRhKTsKKwkJCWNpZCwgRVRIX0NPTk5FQ1RJT05fVFlQRSwgJmw1X2RhdGEpOwogCiAJCWkgPSAwOwogCQl3aGlsZSAodGVzdF9iaXQoQ05JQ19MQ0xfRkxfTDJfV0FJVCwgJmNwLT5jbmljX2xvY2FsX2ZsYWdzKSAmJgpAQCAtNDQ4Miw3ICs1MDI0LDcgQEAKIAkJCW5ldGRldl9lcnIoZGV2LT5uZXRkZXYsCiAJCQkJImlTQ1NJIENMSUVOVF9TRVRVUCBkaWQgbm90IGNvbXBsZXRlXG4iKTsKIAkJY25pY19zcHFfY29tcGxldGlvbihkZXYsIERSVl9DVExfUkVUX0wyX1NQUV9DUkVESVRfQ01ELCAxKTsKLQkJY25pY19yaW5nX2N0bChkZXYsIEJOWDJYX0lTQ1NJX0wyX0NJRCwgY2xpLCAxKTsKKwkJY25pY19yaW5nX2N0bChkZXYsIGNpZCwgY2xpLCAxKTsKIAl9CiB9CiAKQEAgLTQ0OTcsMTkgKzUwMzksMTkgQEAKIAkJY25pY19zaHV0ZG93bl9ibngyX3J4X3JpbmcoZGV2KTsKIAl9IGVsc2UgaWYgKHRlc3RfYml0KENOSUNfRl9CTlgyWF9DTEFTUywgJmRldi0+ZmxhZ3MpKSB7CiAJCXN0cnVjdCBjbmljX2xvY2FsICpjcCA9IGRldi0+Y25pY19wcml2OwotCQl1MzIgY2xpID0gQk5YMlhfSVNDU0lfQ0xfSUQoQ05JQ19FMUhWTihjcCkpOworCQl1MzIgY2xpID0gY3AtPmV0aGRldi0+aXNjc2lfbDJfY2xpZW50X2lkOworCQl1MzIgY2lkID0gY3AtPmV0aGRldi0+aXNjc2lfbDJfY2lkOwogCQl1bmlvbiBsNWNtX3NwZWNpZmljX2RhdGEgbDVfZGF0YTsKIAkJaW50IGk7Ci0JCXUzMiB0eXBlOwogCi0JCWNuaWNfcmluZ19jdGwoZGV2LCBCTlgyWF9JU0NTSV9MMl9DSUQsIGNsaSwgMCk7CisJCWNuaWNfcmluZ19jdGwoZGV2LCBjaWQsIGNsaSwgMCk7CiAKIAkJc2V0X2JpdChDTklDX0xDTF9GTF9MMl9XQUlULCAmY3AtPmNuaWNfbG9jYWxfZmxhZ3MpOwogCiAJCWw1X2RhdGEucGh5X2FkZHJlc3MubG8gPSBjbGk7CiAJCWw1X2RhdGEucGh5X2FkZHJlc3MuaGkgPSAwOwogCQljbmljX3N1Ym1pdF9rd3FlXzE2KGRldiwgUkFNUk9EX0NNRF9JRF9FVEhfSEFMVCwKLQkJCUJOWDJYX0lTQ1NJX0wyX0NJRCwgRVRIX0NPTk5FQ1RJT05fVFlQRSwgJmw1X2RhdGEpOworCQkJY2lkLCBFVEhfQ09OTkVDVElPTl9UWVBFLCAmbDVfZGF0YSk7CiAJCWkgPSAwOwogCQl3aGlsZSAodGVzdF9iaXQoQ05JQ19MQ0xfRkxfTDJfV0FJVCwgJmNwLT5jbmljX2xvY2FsX2ZsYWdzKSAmJgogCQkgICAgICAgKytpIDwgMTApCkBAIC00NTIxLDEyICs1MDYzLDggQEAKIAkJY25pY19zcHFfY29tcGxldGlvbihkZXYsIERSVl9DVExfUkVUX0wyX1NQUV9DUkVESVRfQ01ELCAxKTsKIAogCQltZW1zZXQoJmw1X2RhdGEsIDAsIHNpemVvZihsNV9kYXRhKSk7Ci0JCXR5cGUgPSAoTk9ORV9DT05ORUNUSU9OX1RZUEUgPDwgU1BFX0hEUl9DT05OX1RZUEVfU0hJRlQpCi0JCQkmIFNQRV9IRFJfQ09OTl9UWVBFOwotCQl0eXBlIHw9ICgoY3AtPnBmaWQgPDwgU1BFX0hEUl9GVU5DVElPTl9JRF9TSElGVCkgJgotCQkJIFNQRV9IRFJfRlVOQ1RJT05fSUQpOwogCQljbmljX3N1Ym1pdF9rd3FlXzE2KGRldiwgUkFNUk9EX0NNRF9JRF9DT01NT05fQ0ZDX0RFTCwKLQkJCUJOWDJYX0lTQ1NJX0wyX0NJRCwgdHlwZSwgJmw1X2RhdGEpOworCQkJY2lkLCBOT05FX0NPTk5FQ1RJT05fVFlQRSwgJmw1X2RhdGEpOwogCQltc2xlZXAoMTApOwogCX0KIAljbGVhcl9iaXQoQ05JQ19MQ0xfRkxfUklOR1NfSU5JVEVELCAmY3AtPmNuaWNfbG9jYWxfZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY25pYy5oIGIvZHJpdmVycy9uZXQvY25pYy5oCmluZGV4IDZhNGEwYWUuLmIzMjhmNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NuaWMuaAorKysgYi9kcml2ZXJzL25ldC9jbmljLmgKQEAgLTgyLDcgKzgyLDcgQEAKICNkZWZpbmUgTUFYX0lTQ1NJX1RCTF9TWgkyNTYKIAogI2RlZmluZSBDTklDX0xPQ0FMX1BPUlRfTUlOCTYwMDAwCi0jZGVmaW5lIENOSUNfTE9DQUxfUE9SVF9NQVgJNjEwMDAKKyNkZWZpbmUgQ05JQ19MT0NBTF9QT1JUX01BWAk2MTAyNAogI2RlZmluZSBDTklDX0xPQ0FMX1BPUlRfUkFOR0UJKENOSUNfTE9DQUxfUE9SVF9NQVggLSBDTklDX0xPQ0FMX1BPUlRfTUlOKQogCiAjZGVmaW5lIEtXUUVfQ05UIChCQ01fUEFHRV9TSVpFIC8gc2l6ZW9mKHN0cnVjdCBrd3FlKSkKQEAgLTI1OCw2ICsyNTgsNyBAQAogCXUxNgkJa3dxX2Nvbl9pZHg7CiAKIAlzdHJ1Y3Qga2NxX2luZm8Ja2NxMTsKKwlzdHJ1Y3Qga2NxX2luZm8Ja2NxMjsKIAogCXVuaW9uIHsKIAkJdm9pZAkJCQkqZ2VuOwpAQCAtMjkwLDYgKzI5MSwxMCBAQAogCWF0b21pY190CQlpc2NzaV9jb25uOwogCXUzMgkJCWlzY3NpX3N0YXJ0X2NpZDsKIAorCXUzMgkJCWZjb2VfaW5pdF9jaWQ7CisJdTMyCQkJZmNvZV9zdGFydF9jaWQ7CisJc3RydWN0IGNuaWNfaWRfdGJsCWZjb2VfY2lkX3RibDsKKwogCXUzMgkJCW1heF9jaWRfc3BhY2U7CiAKIAkvKiBwZXIgY29ubmVjdGlvbiBwYXJhbWV0ZXJzICovCkBAIC0zNTYsMTEgKzM2MSw2IEBACiAjZGVmaW5lIEJOWDJYX0NPTlRFWFRfTUVNX1NJWkUJCTEwMjQKICNkZWZpbmUgQk5YMlhfRkNPRV9DSUQJCQkxNgogCi0vKiBpU0NTSSBjbGllbnQgSURzIGFyZSAxNywgMTksIDIxLCAyMyAqLwotI2RlZmluZSBCTlgyWF9JU0NTSV9CQVNFX0NMX0lECQkxNwotI2RlZmluZSBCTlgyWF9JU0NTSV9DTF9JRCh2bikJCShCTlgyWF9JU0NTSV9CQVNFX0NMX0lEICsgKCh2bikgPDwgMSkpCi0KLSNkZWZpbmUgQk5YMlhfSVNDU0lfTDJfQ0lECQkxNwogI2RlZmluZSBCTlgyWF9JU0NTSV9TVEFSVF9DSUQJCTE4CiAjZGVmaW5lIEJOWDJYX0lTQ1NJX05VTV9DT05ORUNUSU9OUwkxMjgKICNkZWZpbmUgQk5YMlhfSVNDU0lfVEFTS19DT05URVhUX1NJWkUJMTI4CkBAIC0zNzIsNiArMzcyLDEwIEBACiAjZGVmaW5lIEJOWDJYX0lTQ1NJX1BCTF9OT1RfQ0FDSEVECTB4ZmYKICNkZWZpbmUgQk5YMlhfSVNDU0lfUERVX0hFQURFUl9OT1RfQ0FDSEVECTB4ZmYKIAorI2RlZmluZSBCTlgyWF9GQ09FX05VTV9DT05ORUNUSU9OUwkxMjgKKworI2RlZmluZSBCTlgyWF9GQ09FX0w1X0NJRF9CQVNFCQlNQVhfSVNDU0lfVEJMX1NaCisKICNkZWZpbmUgQk5YMlhfQ0hJUF9OVU1fNTc3MTAJCTB4MTY0ZQogI2RlZmluZSBCTlgyWF9DSElQX05VTV81NzcxMQkJMHgxNjRmCiAjZGVmaW5lIEJOWDJYX0NISVBfTlVNXzU3NzExRQkJMHgxNjUwCkBAIC00MjcsNiArNDMxLDEzIEBACiAJCSAoQ05JQ19SRChkZXYsIEJOWDJYX1NITUVNMl9BRERSKGJhc2UsIHNpemUpKSA+CVwKIAkJICBvZmZzZXRvZihzdHJ1Y3Qgc2htZW0yX3JlZ2lvbiwgZmllbGQpKSkKIAorI2RlZmluZSBCTlgyWF9NRl9DRkdfQUREUihiYXNlLCBmaWVsZCkJCQkJXAorCQkJKChiYXNlKSArIG9mZnNldG9mKHN0cnVjdCBtZl9jZmcsIGZpZWxkKSkKKworI2lmbmRlZiBFVEhfTUFYX1JYX0NMSUVOVFNfRTIKKyNkZWZpbmUgRVRIX01BWF9SWF9DTElFTlRTX0UyIAkJRVRIX01BWF9SWF9DTElFTlRTX0UxSAorI2VuZGlmCisKICNkZWZpbmUgQ05JQ19QT1JUKGNwKQkJCSgoY3ApLT5wZmlkICYgMSkKICNkZWZpbmUgQ05JQ19GVU5DKGNwKQkJCSgoY3ApLT5mdW5jKQogI2RlZmluZSBDTklDX1BBVEgoY3ApCQkJKCFCTlgyWF9DSElQX0lTX0UyKGNwLT5jaGlwX2lkKSA/IDAgOlwKQEAgLTQzOSw3ICs0NTAsOSBAQAogI2RlZmluZSBCTlgyWF9TV19DSUQoeCkJCQkoeCAmIDB4MWZmZmYpCiAKICNkZWZpbmUgQk5YMlhfQ0xfUVpPTkVfSUQoY3AsIGNsaSkJCQkJCVwKLQkJKGNsaSArIChDTklDX1BPUlQoY3ApICogRVRIX01BWF9SWF9DTElFTlRTX0UxSCkpCisJCShjbGkgKyAoQ05JQ19QT1JUKGNwKSAqIChCTlgyWF9DSElQX0lTX0UyKGNwLT5jaGlwX2lkKSA/XAorCQkJCQlFVEhfTUFYX1JYX0NMSUVOVFNfRTIgOgkJXAorCQkJCQlFVEhfTUFYX1JYX0NMSUVOVFNfRTFIKSkpCiAKICNkZWZpbmUgVENQX1RTVE9STV9PT09fRFJPUF9BTkRfUFJPQ19BQ0sJKDA8PDQpCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NuaWNfZGVmcy5oIGIvZHJpdmVycy9uZXQvY25pY19kZWZzLmgKaW5kZXggMzI4ZThiMi4uZmRiYzAwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY25pY19kZWZzLmgKKysrIGIvZHJpdmVycy9uZXQvY25pY19kZWZzLmgKQEAgLTM1LDYgKzM1LDQwIEBACiAjZGVmaW5lIEw1Q01fUkFNUk9EX0NNRF9JRF9TRUFSQ0hFUl9ERUxFVEUJKEw1Q01fUkFNUk9EX0NNRF9JRF9CQVNFICsgMTQpCiAjZGVmaW5lIEw1Q01fUkFNUk9EX0NNRF9JRF9URVJNSU5BVEVfT0ZGTE9BRAkoTDVDTV9SQU1ST0RfQ01EX0lEX0JBU0UgKyAxNSkKIAorI2RlZmluZSBGQ09FX0tDUUVfT1BDT0RFX0lOSVRfRlVOQwkJCSgweDEwKQorI2RlZmluZSBGQ09FX0tDUUVfT1BDT0RFX0RFU1RST1lfRlVOQwkJCSgweDExKQorI2RlZmluZSBGQ09FX0tDUUVfT1BDT0RFX1NUQVRfRlVOQwkJCSgweDEyKQorI2RlZmluZSBGQ09FX0tDUUVfT1BDT0RFX09GRkxPQURfQ09OTgkJCSgweDE1KQorI2RlZmluZSBGQ09FX0tDUUVfT1BDT0RFX0VOQUJMRV9DT05OCQkJKDB4MTYpCisjZGVmaW5lIEZDT0VfS0NRRV9PUENPREVfRElTQUJMRV9DT05OCQkJKDB4MTcpCisjZGVmaW5lIEZDT0VfS0NRRV9PUENPREVfREVTVFJPWV9DT05OCQkJKDB4MTgpCisjZGVmaW5lIEZDT0VfS0NRRV9PUENPREVfQ1FfRVZFTlRfTk9USUZJQ0FUSU9OICAoMHgyMCkKKyNkZWZpbmUgRkNPRV9LQ1FFX09QQ09ERV9GQ09FX0VSUk9SCQkJCSgweDIxKQorCisjZGVmaW5lIEZDT0VfUkFNUk9EX0NNRF9JRF9JTklUCQkJKEZDT0VfS0NRRV9PUENPREVfSU5JVF9GVU5DKQorI2RlZmluZSBGQ09FX1JBTVJPRF9DTURfSURfREVTVFJPWQkJKEZDT0VfS0NRRV9PUENPREVfREVTVFJPWV9GVU5DKQorI2RlZmluZSBGQ09FX1JBTVJPRF9DTURfSURfT0ZGTE9BRF9DT05OCQkoRkNPRV9LQ1FFX09QQ09ERV9PRkZMT0FEX0NPTk4pCisjZGVmaW5lIEZDT0VfUkFNUk9EX0NNRF9JRF9FTkFCTEVfQ09OTgkJKEZDT0VfS0NRRV9PUENPREVfRU5BQkxFX0NPTk4pCisjZGVmaW5lIEZDT0VfUkFNUk9EX0NNRF9JRF9ESVNBQkxFX0NPTk4JCShGQ09FX0tDUUVfT1BDT0RFX0RJU0FCTEVfQ09OTikKKyNkZWZpbmUgRkNPRV9SQU1ST0RfQ01EX0lEX0RFU1RST1lfQ09OTgkJKEZDT0VfS0NRRV9PUENPREVfREVTVFJPWV9DT05OKQorI2RlZmluZSBGQ09FX1JBTVJPRF9DTURfSURfU1RBVAkJCShGQ09FX0tDUUVfT1BDT0RFX1NUQVRfRlVOQykKKyNkZWZpbmUgRkNPRV9SQU1ST0RfQ01EX0lEX1RFUk1JTkFURV9DT05OCSgweDgxKQorCisjZGVmaW5lIEZDT0VfS1dRRV9PUENPREVfSU5JVDEgICAgICAgICAgICAgICAgICAoMCkKKyNkZWZpbmUgRkNPRV9LV1FFX09QQ09ERV9JTklUMiAgICAgICAgICAgICAgICAgICgxKQorI2RlZmluZSBGQ09FX0tXUUVfT1BDT0RFX0lOSVQzICAgICAgICAgICAgICAgICAgKDIpCisjZGVmaW5lIEZDT0VfS1dRRV9PUENPREVfT0ZGTE9BRF9DT05OMSAgKDMpCisjZGVmaW5lIEZDT0VfS1dRRV9PUENPREVfT0ZGTE9BRF9DT05OMiAgKDQpCisjZGVmaW5lIEZDT0VfS1dRRV9PUENPREVfT0ZGTE9BRF9DT05OMyAgKDUpCisjZGVmaW5lIEZDT0VfS1dRRV9PUENPREVfT0ZGTE9BRF9DT05ONCAgKDYpCisjZGVmaW5lIEZDT0VfS1dRRV9PUENPREVfRU5BQkxFX0NPTk4JKDcpCisjZGVmaW5lIEZDT0VfS1dRRV9PUENPREVfRElTQUJMRV9DT05OCSg4KQorI2RlZmluZSBGQ09FX0tXUUVfT1BDT0RFX0RFU1RST1lfQ09OTgkoOSkKKyNkZWZpbmUgRkNPRV9LV1FFX09QQ09ERV9ERVNUUk9ZCQkoMTApCisjZGVmaW5lIEZDT0VfS1dRRV9PUENPREVfU1RBVAkJCSgxMSkKKworI2RlZmluZSBGQ09FX0tDUUVfQ09NUExFVElPTl9TVEFUVVNfQ1RYX0FMTE9DX0ZBSUxVUkUJKDB4MykKKwogLyogS0NRIChrZXJuZWwgY29tcGxldGlvbiBxdWV1ZSkgcmVzcG9uc2Ugb3AgY29kZXMgKi8KICNkZWZpbmUgTDRfS0NRRV9PUENPREVfVkFMVUVfQ0xPU0VfQ09NUCAgICAgICAgICAgICAoNTMpCiAjZGVmaW5lIEw0X0tDUUVfT1BDT0RFX1ZBTFVFX1JFU0VUX0NPTVAgICAgICAgICAgICAgKDU0KQpAQCAtNjgzLDYgKzcxNywxNDk2IEBACiB9OwogCiAvKgorICogUGFyYW1ldGVycyBpbml0aWFsaXplZCBkdXJpbmcgb2ZmbG9hZGVkIGFjY29yZGluZyB0byBGTE9HSS9QTE9HSS9QUkxJIGFuZCB1c2VkIGluIEZDb0UgY29udGV4dCBzZWN0aW9uCisgKi8KK3N0cnVjdCB1c3Rvcm1fZmNvZV9wYXJhbXMgeworI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQorCXUxNiBmY29lX2Nvbm5faWQ7CisJdTE2IGZsYWdzOworI2RlZmluZSBVU1RPUk1fRkNPRV9QQVJBTVNfQl9NVUxfTl9QT1JUX0lEUyAoMHgxPDwwKQorI2RlZmluZSBVU1RPUk1fRkNPRV9QQVJBTVNfQl9NVUxfTl9QT1JUX0lEU19TSElGVCAwCisjZGVmaW5lIFVTVE9STV9GQ09FX1BBUkFNU19CX0VfRF9UT1ZfUkVTICgweDE8PDEpCisjZGVmaW5lIFVTVE9STV9GQ09FX1BBUkFNU19CX0VfRF9UT1ZfUkVTX1NISUZUIDEKKyNkZWZpbmUgVVNUT1JNX0ZDT0VfUEFSQU1TX0JfQ09OVF9JTkNSX1NFUV9DTlQgKDB4MTw8MikKKyNkZWZpbmUgVVNUT1JNX0ZDT0VfUEFSQU1TX0JfQ09OVF9JTkNSX1NFUV9DTlRfU0hJRlQgMgorI2RlZmluZSBVU1RPUk1fRkNPRV9QQVJBTVNfQl9DT05GX1JFUSAoMHgxPDwzKQorI2RlZmluZSBVU1RPUk1fRkNPRV9QQVJBTVNfQl9DT05GX1JFUV9TSElGVCAzCisjZGVmaW5lIFVTVE9STV9GQ09FX1BBUkFNU19CX1JFQ19WQUxJRCAoMHgxPDw0KQorI2RlZmluZSBVU1RPUk1fRkNPRV9QQVJBTVNfQl9SRUNfVkFMSURfU0hJRlQgNAorI2RlZmluZSBVU1RPUk1fRkNPRV9QQVJBTVNfQl9DUV9UT0dHTEVfQklUICgweDE8PDUpCisjZGVmaW5lIFVTVE9STV9GQ09FX1BBUkFNU19CX0NRX1RPR0dMRV9CSVRfU0hJRlQgNQorI2RlZmluZSBVU1RPUk1fRkNPRV9QQVJBTVNfQl9YRlJRX1RPR0dMRV9CSVQgKDB4MTw8NikKKyNkZWZpbmUgVVNUT1JNX0ZDT0VfUEFSQU1TX0JfWEZSUV9UT0dHTEVfQklUX1NISUZUIDYKKyNkZWZpbmUgVVNUT1JNX0ZDT0VfUEFSQU1TX0JfQzJfVkFMSUQgKDB4MTw8NykKKyNkZWZpbmUgVVNUT1JNX0ZDT0VfUEFSQU1TX0JfQzJfVkFMSURfU0hJRlQgNworI2RlZmluZSBVU1RPUk1fRkNPRV9QQVJBTVNfQl9BQ0tfMCAoMHgxPDw4KQorI2RlZmluZSBVU1RPUk1fRkNPRV9QQVJBTVNfQl9BQ0tfMF9TSElGVCA4CisjZGVmaW5lIFVTVE9STV9GQ09FX1BBUkFNU19SU1JWMCAoMHg3Rjw8OSkKKyNkZWZpbmUgVVNUT1JNX0ZDT0VfUEFSQU1TX1JTUlYwX1NISUZUIDkKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorCXUxNiBmbGFnczsKKyNkZWZpbmUgVVNUT1JNX0ZDT0VfUEFSQU1TX0JfTVVMX05fUE9SVF9JRFMgKDB4MTw8MCkKKyNkZWZpbmUgVVNUT1JNX0ZDT0VfUEFSQU1TX0JfTVVMX05fUE9SVF9JRFNfU0hJRlQgMAorI2RlZmluZSBVU1RPUk1fRkNPRV9QQVJBTVNfQl9FX0RfVE9WX1JFUyAoMHgxPDwxKQorI2RlZmluZSBVU1RPUk1fRkNPRV9QQVJBTVNfQl9FX0RfVE9WX1JFU19TSElGVCAxCisjZGVmaW5lIFVTVE9STV9GQ09FX1BBUkFNU19CX0NPTlRfSU5DUl9TRVFfQ05UICgweDE8PDIpCisjZGVmaW5lIFVTVE9STV9GQ09FX1BBUkFNU19CX0NPTlRfSU5DUl9TRVFfQ05UX1NISUZUIDIKKyNkZWZpbmUgVVNUT1JNX0ZDT0VfUEFSQU1TX0JfQ09ORl9SRVEgKDB4MTw8MykKKyNkZWZpbmUgVVNUT1JNX0ZDT0VfUEFSQU1TX0JfQ09ORl9SRVFfU0hJRlQgMworI2RlZmluZSBVU1RPUk1fRkNPRV9QQVJBTVNfQl9SRUNfVkFMSUQgKDB4MTw8NCkKKyNkZWZpbmUgVVNUT1JNX0ZDT0VfUEFSQU1TX0JfUkVDX1ZBTElEX1NISUZUIDQKKyNkZWZpbmUgVVNUT1JNX0ZDT0VfUEFSQU1TX0JfQ1FfVE9HR0xFX0JJVCAoMHgxPDw1KQorI2RlZmluZSBVU1RPUk1fRkNPRV9QQVJBTVNfQl9DUV9UT0dHTEVfQklUX1NISUZUIDUKKyNkZWZpbmUgVVNUT1JNX0ZDT0VfUEFSQU1TX0JfWEZSUV9UT0dHTEVfQklUICgweDE8PDYpCisjZGVmaW5lIFVTVE9STV9GQ09FX1BBUkFNU19CX1hGUlFfVE9HR0xFX0JJVF9TSElGVCA2CisjZGVmaW5lIFVTVE9STV9GQ09FX1BBUkFNU19CX0MyX1ZBTElEICgweDE8PDcpCisjZGVmaW5lIFVTVE9STV9GQ09FX1BBUkFNU19CX0MyX1ZBTElEX1NISUZUIDcKKyNkZWZpbmUgVVNUT1JNX0ZDT0VfUEFSQU1TX0JfQUNLXzAgKDB4MTw8OCkKKyNkZWZpbmUgVVNUT1JNX0ZDT0VfUEFSQU1TX0JfQUNLXzBfU0hJRlQgOAorI2RlZmluZSBVU1RPUk1fRkNPRV9QQVJBTVNfUlNSVjAgKDB4N0Y8PDkpCisjZGVmaW5lIFVTVE9STV9GQ09FX1BBUkFNU19SU1JWMF9TSElGVCA5CisJdTE2IGZjb2VfY29ubl9pZDsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQorCXU4IGhjX2NzZG1fYnl0ZV9lbjsKKwl1OCBmdW5jX2lkOworCXU4IHBvcnRfaWQ7CisJdTggdm5pY19pZDsKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorCXU4IHZuaWNfaWQ7CisJdTggcG9ydF9pZDsKKwl1OCBmdW5jX2lkOworCXU4IGhjX2NzZG1fYnl0ZV9lbjsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQorCXUxNiByeF90b3RhbF9jb25jX3NlcXM7CisJdTE2IHJ4X21heF9mY19wYXlfbGVuOworI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCisJdTE2IHJ4X21heF9mY19wYXlfbGVuOworCXUxNiByeF90b3RhbF9jb25jX3NlcXM7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKKwl1MTYgb3hfaWQ7CisJdTE2IHJ4X21heF9jb25jX3NlcXM7CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKKwl1MTYgcnhfbWF4X2NvbmNfc2VxczsKKwl1MTYgb3hfaWQ7CisjZW5kaWYKK307CisKKy8qCisgKiBGQ29FIDE2LWJpdHMgaW5kZXggc3RydWN0dXJlCisgKi8KK3N0cnVjdCBmY29lX2lkeDE2X2ZpZWxkcyB7CisJdTE2IGZpZWxkczsKKyNkZWZpbmUgRkNPRV9JRFgxNl9GSUVMRFNfSURYICgweDdGRkY8PDApCisjZGVmaW5lIEZDT0VfSURYMTZfRklFTERTX0lEWF9TSElGVCAwCisjZGVmaW5lIEZDT0VfSURYMTZfRklFTERTX01TQiAoMHgxPDwxNSkKKyNkZWZpbmUgRkNPRV9JRFgxNl9GSUVMRFNfTVNCX1NISUZUIDE1Cit9OworCisvKgorICogRkNvRSAxNi1iaXRzIGluZGV4IHVuaW9uCisgKi8KK3VuaW9uIGZjb2VfaWR4MTZfZmllbGRfdW5pb24geworCXN0cnVjdCBmY29lX2lkeDE2X2ZpZWxkcyBmaWVsZHM7CisJdTE2IHZhbDsKK307CisKKy8qCisgKiA0IHJlZ3Mgc2l6ZQorICovCitzdHJ1Y3QgZmNvZV9iZF9jdHggeworCXUzMiBidWZfYWRkcl9oaTsKKwl1MzIgYnVmX2FkZHJfbG87CisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisJdTE2IHJzcnYwOworCXUxNiBidWZfbGVuOworI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCisJdTE2IGJ1Zl9sZW47CisJdTE2IHJzcnYwOworI2VuZGlmCisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisJdTE2IHJzcnYxOworCXUxNiBmbGFnczsKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorCXUxNiBmbGFnczsKKwl1MTYgcnNydjE7CisjZW5kaWYKK307CisKKy8qCisgKiBQYXJhbWV0ZXJzIHJlcXVpcmVkIGZvciBwbGFjZW1lbnQgYWNjb3JkaW5nIHRvIFNHTAorICovCitzdHJ1Y3QgdXN0b3JtX2Zjb2VfZGF0YV9wbGFjZSB7CisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisJdTE2IGNhY2hlZF9zZ2Vfb2ZmOworCXU4IGNhY2hlZF9udW1fc2dlczsKKwl1OCBjYWNoZWRfc2dlX2lkeDsKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorCXU4IGNhY2hlZF9zZ2VfaWR4OworCXU4IGNhY2hlZF9udW1fc2dlczsKKwl1MTYgY2FjaGVkX3NnZV9vZmY7CisjZW5kaWYKKwlzdHJ1Y3QgZmNvZV9iZF9jdHggY2FjaGVkX3NnZVszXTsKK307CisKK3N0cnVjdCBmY29lX3Rhc2tfY3R4X2VudHJ5X3R4d3JfcnhyZCB7CisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisJdTE2IHZlcmlmeV90eF9zZXE7CisJdTggaW5pdF9mbGFnczsKKyNkZWZpbmUgRkNPRV9UQVNLX0NUWF9FTlRSWV9UWFdSX1JYUkRfVEFTS19UWVBFICgweDc8PDApCisjZGVmaW5lIEZDT0VfVEFTS19DVFhfRU5UUllfVFhXUl9SWFJEX1RBU0tfVFlQRV9TSElGVCAwCisjZGVmaW5lIEZDT0VfVEFTS19DVFhfRU5UUllfVFhXUl9SWFJEX0RFVl9UWVBFICgweDE8PDMpCisjZGVmaW5lIEZDT0VfVEFTS19DVFhfRU5UUllfVFhXUl9SWFJEX0RFVl9UWVBFX1NISUZUIDMKKyNkZWZpbmUgRkNPRV9UQVNLX0NUWF9FTlRSWV9UWFdSX1JYUkRfQ0xBU1NfVFlQRSAoMHgxPDw0KQorI2RlZmluZSBGQ09FX1RBU0tfQ1RYX0VOVFJZX1RYV1JfUlhSRF9DTEFTU19UWVBFX1NISUZUIDQKKyNkZWZpbmUgRkNPRV9UQVNLX0NUWF9FTlRSWV9UWFdSX1JYUkRfU0lOR0xFX1NHRSAoMHgxPDw1KQorI2RlZmluZSBGQ09FX1RBU0tfQ1RYX0VOVFJZX1RYV1JfUlhSRF9TSU5HTEVfU0dFX1NISUZUIDUKKyNkZWZpbmUgRkNPRV9UQVNLX0NUWF9FTlRSWV9UWFdSX1JYUkRfUlNSVjUgKDB4Mzw8NikKKyNkZWZpbmUgRkNPRV9UQVNLX0NUWF9FTlRSWV9UWFdSX1JYUkRfUlNSVjVfU0hJRlQgNgorCXU4IHR4X2ZsYWdzOworI2RlZmluZSBGQ09FX1RBU0tfQ1RYX0VOVFJZX1RYV1JfUlhSRF9UWF9TVEFURSAoMHhGPDwwKQorI2RlZmluZSBGQ09FX1RBU0tfQ1RYX0VOVFJZX1RYV1JfUlhSRF9UWF9TVEFURV9TSElGVCAwCisjZGVmaW5lIEZDT0VfVEFTS19DVFhfRU5UUllfVFhXUl9SWFJEX1JTUlY0ICgweEY8PDQpCisjZGVmaW5lIEZDT0VfVEFTS19DVFhfRU5UUllfVFhXUl9SWFJEX1JTUlY0X1NISUZUIDQKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorCXU4IHR4X2ZsYWdzOworI2RlZmluZSBGQ09FX1RBU0tfQ1RYX0VOVFJZX1RYV1JfUlhSRF9UWF9TVEFURSAoMHhGPDwwKQorI2RlZmluZSBGQ09FX1RBU0tfQ1RYX0VOVFJZX1RYV1JfUlhSRF9UWF9TVEFURV9TSElGVCAwCisjZGVmaW5lIEZDT0VfVEFTS19DVFhfRU5UUllfVFhXUl9SWFJEX1JTUlY0ICgweEY8PDQpCisjZGVmaW5lIEZDT0VfVEFTS19DVFhfRU5UUllfVFhXUl9SWFJEX1JTUlY0X1NISUZUIDQKKwl1OCBpbml0X2ZsYWdzOworI2RlZmluZSBGQ09FX1RBU0tfQ1RYX0VOVFJZX1RYV1JfUlhSRF9UQVNLX1RZUEUgKDB4Nzw8MCkKKyNkZWZpbmUgRkNPRV9UQVNLX0NUWF9FTlRSWV9UWFdSX1JYUkRfVEFTS19UWVBFX1NISUZUIDAKKyNkZWZpbmUgRkNPRV9UQVNLX0NUWF9FTlRSWV9UWFdSX1JYUkRfREVWX1RZUEUgKDB4MTw8MykKKyNkZWZpbmUgRkNPRV9UQVNLX0NUWF9FTlRSWV9UWFdSX1JYUkRfREVWX1RZUEVfU0hJRlQgMworI2RlZmluZSBGQ09FX1RBU0tfQ1RYX0VOVFJZX1RYV1JfUlhSRF9DTEFTU19UWVBFICgweDE8PDQpCisjZGVmaW5lIEZDT0VfVEFTS19DVFhfRU5UUllfVFhXUl9SWFJEX0NMQVNTX1RZUEVfU0hJRlQgNAorI2RlZmluZSBGQ09FX1RBU0tfQ1RYX0VOVFJZX1RYV1JfUlhSRF9TSU5HTEVfU0dFICgweDE8PDUpCisjZGVmaW5lIEZDT0VfVEFTS19DVFhfRU5UUllfVFhXUl9SWFJEX1NJTkdMRV9TR0VfU0hJRlQgNQorI2RlZmluZSBGQ09FX1RBU0tfQ1RYX0VOVFJZX1RYV1JfUlhSRF9SU1JWNSAoMHgzPDw2KQorI2RlZmluZSBGQ09FX1RBU0tfQ1RYX0VOVFJZX1RYV1JfUlhSRF9SU1JWNV9TSElGVCA2CisJdTE2IHZlcmlmeV90eF9zZXE7CisjZW5kaWYKK307CisKK3N0cnVjdCBmY29lX2ZjcF9jbWRfcGF5bG9hZCB7CisJdTMyIG9wYXF1ZVs4XTsKK307CisKK3N0cnVjdCBmY29lX2ZjX2hkciB7CisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisJdTggY3NfY3RsOworCXU4IHNfaWRbM107CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKKwl1OCBzX2lkWzNdOworCXU4IGNzX2N0bDsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQorCXU4IHJfY3RsOworCXU4IGRfaWRbM107CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKKwl1OCBkX2lkWzNdOworCXU4IHJfY3RsOworI2VuZGlmCisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisJdTggc2VxX2lkOworCXU4IGRmX2N0bDsKKwl1MTYgc2VxX2NudDsKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorCXUxNiBzZXFfY250OworCXU4IGRmX2N0bDsKKwl1OCBzZXFfaWQ7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKKwl1OCB0eXBlOworCXU4IGZfY3RsWzNdOworI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCisJdTggZl9jdGxbM107CisJdTggdHlwZTsKKyNlbmRpZgorCXUzMiBwYXJhbWV0ZXJzOworI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQorCXUxNiBveF9pZDsKKwl1MTYgcnhfaWQ7CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKKwl1MTYgcnhfaWQ7CisJdTE2IG94X2lkOworI2VuZGlmCit9OworCitzdHJ1Y3QgZmNvZV9mY19mcmFtZSB7CisJc3RydWN0IGZjb2VfZmNfaGRyIGZjX2hkcjsKKwl1MzIgcmVzZXJ2ZWQwWzJdOworfTsKKwordW5pb24gZmNvZV9jbWRfZmxvd19pbmZvIHsKKwlzdHJ1Y3QgZmNvZV9mY3BfY21kX3BheWxvYWQgZmNwX2NtZF9wYXlsb2FkOworCXN0cnVjdCBmY29lX2ZjX2ZyYW1lIG1wX2ZjX2ZyYW1lOworfTsKKworc3RydWN0IGZjb2VfcmVhZF9mbG93X2luZm8geworCXN0cnVjdCBmY29lX2ZjX2hkciBmY19kYXRhX2luX2hkcjsKKwl1MzIgcmVzZXJ2ZWRbMl07Cit9OworCitzdHJ1Y3QgZmNvZV9mY3BfeGZyX3JkeV9wYXlsb2FkIHsKKwl1MzIgYnVyc3RfbGVuOworCXUzMiBkYXRhX3JvOworfTsKKworc3RydWN0IGZjb2Vfd3JpdGVfZmxvd19pbmZvIHsKKwlzdHJ1Y3QgZmNvZV9mY19oZHIgZmNfZGF0YV9vdXRfaGRyOworCXN0cnVjdCBmY29lX2ZjcF94ZnJfcmR5X3BheWxvYWQgZmNwX3hmcl9wYXlsb2FkOworfTsKKworc3RydWN0IGZjb2VfZmNwX3JzcF9mbGFncyB7CisJdTggZmxhZ3M7CisjZGVmaW5lIEZDT0VfRkNQX1JTUF9GTEFHU19GQ1BfUlNQX0xFTl9WQUxJRCAoMHgxPDwwKQorI2RlZmluZSBGQ09FX0ZDUF9SU1BfRkxBR1NfRkNQX1JTUF9MRU5fVkFMSURfU0hJRlQgMAorI2RlZmluZSBGQ09FX0ZDUF9SU1BfRkxBR1NfRkNQX1NOU19MRU5fVkFMSUQgKDB4MTw8MSkKKyNkZWZpbmUgRkNPRV9GQ1BfUlNQX0ZMQUdTX0ZDUF9TTlNfTEVOX1ZBTElEX1NISUZUIDEKKyNkZWZpbmUgRkNPRV9GQ1BfUlNQX0ZMQUdTX0ZDUF9SRVNJRF9PVkVSICgweDE8PDIpCisjZGVmaW5lIEZDT0VfRkNQX1JTUF9GTEFHU19GQ1BfUkVTSURfT1ZFUl9TSElGVCAyCisjZGVmaW5lIEZDT0VfRkNQX1JTUF9GTEFHU19GQ1BfUkVTSURfVU5ERVIgKDB4MTw8MykKKyNkZWZpbmUgRkNPRV9GQ1BfUlNQX0ZMQUdTX0ZDUF9SRVNJRF9VTkRFUl9TSElGVCAzCisjZGVmaW5lIEZDT0VfRkNQX1JTUF9GTEFHU19GQ1BfQ09ORl9SRVEgKDB4MTw8NCkKKyNkZWZpbmUgRkNPRV9GQ1BfUlNQX0ZMQUdTX0ZDUF9DT05GX1JFUV9TSElGVCA0CisjZGVmaW5lIEZDT0VfRkNQX1JTUF9GTEFHU19GQ1BfQklESV9GTEFHUyAoMHg3PDw1KQorI2RlZmluZSBGQ09FX0ZDUF9SU1BfRkxBR1NfRkNQX0JJRElfRkxBR1NfU0hJRlQgNQorfTsKKworc3RydWN0IGZjb2VfZmNwX3JzcF9wYXlsb2FkIHsKKwlzdHJ1Y3QgcmVncGFpciByZXNlcnZlZDA7CisJdTMyIGZjcF9yZXNpZDsKKyNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKKwl1MTYgcmV0cnlfZGVsYXlfdGltZXI7CisJc3RydWN0IGZjb2VfZmNwX3JzcF9mbGFncyBmY3BfZmxhZ3M7CisJdTggc2NzaV9zdGF0dXNfY29kZTsKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorCXU4IHNjc2lfc3RhdHVzX2NvZGU7CisJc3RydWN0IGZjb2VfZmNwX3JzcF9mbGFncyBmY3BfZmxhZ3M7CisJdTE2IHJldHJ5X2RlbGF5X3RpbWVyOworI2VuZGlmCisJdTMyIGZjcF9yc3BfbGVuOworCXUzMiBmY3Bfc25zX2xlbjsKK307CisKKy8qCisgKiBGaXhlZCBzaXplIHN0cnVjdHVyZSBpbiBvcmRlciB0byBwbGFudCBpdCBpbiBVbmlvbiBzdHJ1Y3R1cmUKKyAqLworc3RydWN0IGZjb2VfZmNwX3JzcF91bmlvbiB7CisJc3RydWN0IGZjb2VfZmNwX3JzcF9wYXlsb2FkIHBheWxvYWQ7CisJc3RydWN0IHJlZ3BhaXIgcmVzZXJ2ZWQwOworfTsKKworLyoKKyAqIEZpeGVkIHNpemUgc3RydWN0dXJlIGluIG9yZGVyIHRvIHBsYW50IGl0IGluIFVuaW9uIHN0cnVjdHVyZQorICovCitzdHJ1Y3QgZmNvZV9hYnRzX3JzcF91bmlvbiB7CisJdTMyIHJfY3RsOworCXUzMiBhYnRzX3JzcF9wYXlsb2FkWzddOworfTsKKwordW5pb24gZmNvZV9yc3BfZmxvd19pbmZvIHsKKwlzdHJ1Y3QgZmNvZV9mY3BfcnNwX3VuaW9uIGZjcF9yc3A7CisJc3RydWN0IGZjb2VfYWJ0c19yc3BfdW5pb24gYWJ0c19yc3A7Cit9OworCitzdHJ1Y3QgZmNvZV9jbGVhbnVwX2Zsb3dfaW5mbyB7CisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisJdTE2IHJlc2VydmVkMTsKKwl1MTYgdGFza19pZDsKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorCXUxNiB0YXNrX2lkOworCXUxNiByZXNlcnZlZDE7CisjZW5kaWYKKwl1MzIgcmVzZXJ2ZWQyWzddOworfTsKKworLyoKKyAqIDMyIGJ5dGVzIHVzZWQgZm9yIGdlbmVyYWwgcHVycG9zZXMKKyAqLwordW5pb24gZmNvZV9nZW5lcmFsX3Rhc2tfY3R4IHsKKwl1bmlvbiBmY29lX2NtZF9mbG93X2luZm8gY21kX2luZm87CisJc3RydWN0IGZjb2VfcmVhZF9mbG93X2luZm8gcmVhZF9pbmZvOworCXN0cnVjdCBmY29lX3dyaXRlX2Zsb3dfaW5mbyB3cml0ZV9pbmZvOworCXVuaW9uIGZjb2VfcnNwX2Zsb3dfaW5mbyByc3BfaW5mbzsKKwlzdHJ1Y3QgZmNvZV9jbGVhbnVwX2Zsb3dfaW5mbyBjbGVhbnVwX2luZm87CisJdTMyIGNvbXBfaW5mb1s4XTsKK307CisKK3N0cnVjdCBmY29lX3Nfc3RhdF9jdHggeworCXU4IGZsYWdzOworI2RlZmluZSBGQ09FX1NfU1RBVF9DVFhfQUNUSVZFICgweDE8PDApCisjZGVmaW5lIEZDT0VfU19TVEFUX0NUWF9BQ1RJVkVfU0hJRlQgMAorI2RlZmluZSBGQ09FX1NfU1RBVF9DVFhfQUNLX0FCT1JUX1NFUV9DT05EICgweDE8PDEpCisjZGVmaW5lIEZDT0VfU19TVEFUX0NUWF9BQ0tfQUJPUlRfU0VRX0NPTkRfU0hJRlQgMQorI2RlZmluZSBGQ09FX1NfU1RBVF9DVFhfQUJUU19QRVJGT1JNRUQgKDB4MTw8MikKKyNkZWZpbmUgRkNPRV9TX1NUQVRfQ1RYX0FCVFNfUEVSRk9STUVEX1NISUZUIDIKKyNkZWZpbmUgRkNPRV9TX1NUQVRfQ1RYX1NFUV9USU1FT1VUICgweDE8PDMpCisjZGVmaW5lIEZDT0VfU19TVEFUX0NUWF9TRVFfVElNRU9VVF9TSElGVCAzCisjZGVmaW5lIEZDT0VfU19TVEFUX0NUWF9QX1JKVCAoMHgxPDw0KQorI2RlZmluZSBGQ09FX1NfU1RBVF9DVFhfUF9SSlRfU0hJRlQgNAorI2RlZmluZSBGQ09FX1NfU1RBVF9DVFhfQUNLX0VPRlQgKDB4MTw8NSkKKyNkZWZpbmUgRkNPRV9TX1NUQVRfQ1RYX0FDS19FT0ZUX1NISUZUIDUKKyNkZWZpbmUgRkNPRV9TX1NUQVRfQ1RYX1JTUlYxICgweDM8PDYpCisjZGVmaW5lIEZDT0VfU19TVEFUX0NUWF9SU1JWMV9TSElGVCA2Cit9OworCisvKgorICogQ29tbW9uIHNlY3Rpb24uIEJvdGggVFggYW5kIFJYIHByb2Nlc3NpbmcgbWlnaHQgd3JpdGUgYW5kIHJlYWQgZnJvbSBpdCBpbiBkaWZmZXJlbnQgZmxvd3MKKyAqLworc3RydWN0IGZjb2VfdGFza19jdHhfZW50cnlfdHhfcnhfY21uIHsKKwl1MzIgZGF0YV8yX3RybnM7CisJdW5pb24gZmNvZV9nZW5lcmFsX3Rhc2tfY3R4IGdlbmVyYWw7CisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisJdTE2IHR4X2xvd19zZXFfY250OworCXN0cnVjdCBmY29lX3Nfc3RhdF9jdHggdHhfc19zdGF0OworCXU4IHR4X3NlcV9pZDsKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorCXU4IHR4X3NlcV9pZDsKKwlzdHJ1Y3QgZmNvZV9zX3N0YXRfY3R4IHR4X3Nfc3RhdDsKKwl1MTYgdHhfbG93X3NlcV9jbnQ7CisjZW5kaWYKKwl1MzIgY29tbW9uX2ZsYWdzOworI2RlZmluZSBGQ09FX1RBU0tfQ1RYX0VOVFJZX1RYX1JYX0NNTl9DSUQgKDB4RkZGRkZGPDwwKQorI2RlZmluZSBGQ09FX1RBU0tfQ1RYX0VOVFJZX1RYX1JYX0NNTl9DSURfU0hJRlQgMAorI2RlZmluZSBGQ09FX1RBU0tfQ1RYX0VOVFJZX1RYX1JYX0NNTl9WQUxJRCAoMHgxPDwyNCkKKyNkZWZpbmUgRkNPRV9UQVNLX0NUWF9FTlRSWV9UWF9SWF9DTU5fVkFMSURfU0hJRlQgMjQKKyNkZWZpbmUgRkNPRV9UQVNLX0NUWF9FTlRSWV9UWF9SWF9DTU5fU0VRX0lOSVQgKDB4MTw8MjUpCisjZGVmaW5lIEZDT0VfVEFTS19DVFhfRU5UUllfVFhfUlhfQ01OX1NFUV9JTklUX1NISUZUIDI1CisjZGVmaW5lIEZDT0VfVEFTS19DVFhfRU5UUllfVFhfUlhfQ01OX1BFTkRfWEZFUiAoMHgxPDwyNikKKyNkZWZpbmUgRkNPRV9UQVNLX0NUWF9FTlRSWV9UWF9SWF9DTU5fUEVORF9YRkVSX1NISUZUIDI2CisjZGVmaW5lIEZDT0VfVEFTS19DVFhfRU5UUllfVFhfUlhfQ01OX1BFTkRfQ09ORiAoMHgxPDwyNykKKyNkZWZpbmUgRkNPRV9UQVNLX0NUWF9FTlRSWV9UWF9SWF9DTU5fUEVORF9DT05GX1NISUZUIDI3CisjZGVmaW5lIEZDT0VfVEFTS19DVFhfRU5UUllfVFhfUlhfQ01OX0VYUF9GSVJTVF9GUkFNRSAoMHgxPDwyOCkKKyNkZWZpbmUgRkNPRV9UQVNLX0NUWF9FTlRSWV9UWF9SWF9DTU5fRVhQX0ZJUlNUX0ZSQU1FX1NISUZUIDI4CisjZGVmaW5lIEZDT0VfVEFTS19DVFhfRU5UUllfVFhfUlhfQ01OX1JTUlYgKDB4Nzw8MjkpCisjZGVmaW5lIEZDT0VfVEFTS19DVFhfRU5UUllfVFhfUlhfQ01OX1JTUlZfU0hJRlQgMjkKK307CisKK3N0cnVjdCBmY29lX3Rhc2tfY3R4X2VudHJ5X3J4d3JfdHhyZCB7CisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisJdTE2IHJ4X2lkOworCXUxNiByeF9mbGFnczsKKyNkZWZpbmUgRkNPRV9UQVNLX0NUWF9FTlRSWV9SWFdSX1RYUkRfUlhfU1RBVEUgKDB4Rjw8MCkKKyNkZWZpbmUgRkNPRV9UQVNLX0NUWF9FTlRSWV9SWFdSX1RYUkRfUlhfU1RBVEVfU0hJRlQgMAorI2RlZmluZSBGQ09FX1RBU0tfQ1RYX0VOVFJZX1JYV1JfVFhSRF9OVU1fUlFfV1FFICgweDc8PDQpCisjZGVmaW5lIEZDT0VfVEFTS19DVFhfRU5UUllfUlhXUl9UWFJEX05VTV9SUV9XUUVfU0hJRlQgNAorI2RlZmluZSBGQ09FX1RBU0tfQ1RYX0VOVFJZX1JYV1JfVFhSRF9DT05GX1JFUSAoMHgxPDw3KQorI2RlZmluZSBGQ09FX1RBU0tfQ1RYX0VOVFJZX1JYV1JfVFhSRF9DT05GX1JFUV9TSElGVCA3CisjZGVmaW5lIEZDT0VfVEFTS19DVFhfRU5UUllfUlhXUl9UWFJEX01JU1NfRlJBTUUgKDB4MTw8OCkKKyNkZWZpbmUgRkNPRV9UQVNLX0NUWF9FTlRSWV9SWFdSX1RYUkRfTUlTU19GUkFNRV9TSElGVCA4CisjZGVmaW5lIEZDT0VfVEFTS19DVFhfRU5UUllfUlhXUl9UWFJEX1JFU0VSVkVEMCAoMHg3Rjw8OSkKKyNkZWZpbmUgRkNPRV9UQVNLX0NUWF9FTlRSWV9SWFdSX1RYUkRfUkVTRVJWRUQwX1NISUZUIDkKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorCXUxNiByeF9mbGFnczsKKyNkZWZpbmUgRkNPRV9UQVNLX0NUWF9FTlRSWV9SWFdSX1RYUkRfUlhfU1RBVEUgKDB4Rjw8MCkKKyNkZWZpbmUgRkNPRV9UQVNLX0NUWF9FTlRSWV9SWFdSX1RYUkRfUlhfU1RBVEVfU0hJRlQgMAorI2RlZmluZSBGQ09FX1RBU0tfQ1RYX0VOVFJZX1JYV1JfVFhSRF9OVU1fUlFfV1FFICgweDc8PDQpCisjZGVmaW5lIEZDT0VfVEFTS19DVFhfRU5UUllfUlhXUl9UWFJEX05VTV9SUV9XUUVfU0hJRlQgNAorI2RlZmluZSBGQ09FX1RBU0tfQ1RYX0VOVFJZX1JYV1JfVFhSRF9DT05GX1JFUSAoMHgxPDw3KQorI2RlZmluZSBGQ09FX1RBU0tfQ1RYX0VOVFJZX1JYV1JfVFhSRF9DT05GX1JFUV9TSElGVCA3CisjZGVmaW5lIEZDT0VfVEFTS19DVFhfRU5UUllfUlhXUl9UWFJEX01JU1NfRlJBTUUgKDB4MTw8OCkKKyNkZWZpbmUgRkNPRV9UQVNLX0NUWF9FTlRSWV9SWFdSX1RYUkRfTUlTU19GUkFNRV9TSElGVCA4CisjZGVmaW5lIEZDT0VfVEFTS19DVFhfRU5UUllfUlhXUl9UWFJEX1JFU0VSVkVEMCAoMHg3Rjw8OSkKKyNkZWZpbmUgRkNPRV9UQVNLX0NUWF9FTlRSWV9SWFdSX1RYUkRfUkVTRVJWRUQwX1NISUZUIDkKKwl1MTYgcnhfaWQ7CisjZW5kaWYKK307CisKK3N0cnVjdCBmY29lX3NlcV9jdHggeworI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQorCXUxNiBsb3dfc2VxX2NudDsKKwlzdHJ1Y3QgZmNvZV9zX3N0YXRfY3R4IHNfc3RhdDsKKwl1OCBzZXFfaWQ7CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKKwl1OCBzZXFfaWQ7CisJc3RydWN0IGZjb2Vfc19zdGF0X2N0eCBzX3N0YXQ7CisJdTE2IGxvd19zZXFfY250OworI2VuZGlmCisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisJdTE2IGVycl9zZXFfY250OworCXUxNiBoaWdoX3NlcV9jbnQ7CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKKwl1MTYgaGlnaF9zZXFfY250OworCXUxNiBlcnJfc2VxX2NudDsKKyNlbmRpZgorCXUzMiBsb3dfZXhwX3JvOworCXUzMiBoaWdoX2V4cF9ybzsKK307CisKK3N0cnVjdCBmY29lX3NpbmdsZV9zZ2VfY3R4IHsKKwlzdHJ1Y3QgcmVncGFpciBjdXJfYnVmX2FkZHI7CisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisJdTE2IHJlc2VydmVkMDsKKwl1MTYgY3VyX2J1Zl9yZW07CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKKwl1MTYgY3VyX2J1Zl9yZW07CisJdTE2IHJlc2VydmVkMDsKKyNlbmRpZgorfTsKKworc3RydWN0IGZjb2VfbXVsX3NnZXNfY3R4IHsKKwlzdHJ1Y3QgcmVncGFpciBjdXJfc2dlX2FkZHI7CisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisJdTggc2dsX3NpemU7CisJdTggY3VyX3NnZV9pZHg7CisJdTE2IGN1cl9zZ2Vfb2ZmOworI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCisJdTE2IGN1cl9zZ2Vfb2ZmOworCXU4IGN1cl9zZ2VfaWR4OworCXU4IHNnbF9zaXplOworI2VuZGlmCit9OworCit1bmlvbiBmY29lX3NnbF9jdHggeworCXN0cnVjdCBmY29lX3NpbmdsZV9zZ2VfY3R4IHNpbmdsZV9zZ2U7CisJc3RydWN0IGZjb2VfbXVsX3NnZXNfY3R4IG11bF9zZ2VzOworfTsKKworc3RydWN0IGZjb2VfdGFza19jdHhfZW50cnlfcnhfb25seSB7CisJc3RydWN0IGZjb2Vfc2VxX2N0eCBzZXFfY3R4OworCXN0cnVjdCBmY29lX3NlcV9jdHggb29vX3NlcV9jdHg7CisJdTMyIHJzcnYzOworCXVuaW9uIGZjb2Vfc2dsX2N0eCBzZ2xfY3R4OworfTsKKworc3RydWN0IHVzdG9ybV9mY29lX3Rhc2tfY3R4X2VudHJ5X3JkIHsKKwlzdHJ1Y3QgZmNvZV90YXNrX2N0eF9lbnRyeV90eHdyX3J4cmQgdHhfd3JfcnhfcmQ7CisJc3RydWN0IGZjb2VfdGFza19jdHhfZW50cnlfdHhfcnhfY21uIGNtbjsKKwlzdHJ1Y3QgZmNvZV90YXNrX2N0eF9lbnRyeV9yeHdyX3R4cmQgcnhfd3JfdHhfcmQ7CisJc3RydWN0IGZjb2VfdGFza19jdHhfZW50cnlfcnhfb25seSByeF93cjsKKwl1MzIgcmVzZXJ2ZWQ7Cit9OworCisvKgorICogVXN0b3JtIEZDb0UgU3Rvcm0gQ29udGV4dAorICovCitzdHJ1Y3QgdXN0b3JtX2Zjb2Vfc3RfY29udGV4dCB7CisJc3RydWN0IHVzdG9ybV9mY29lX3BhcmFtcyBmY29lX3BhcmFtczsKKwlzdHJ1Y3QgcmVncGFpciB0YXNrX2FkZHI7CisJc3RydWN0IHJlZ3BhaXIgY3FfYmFzZV9hZGRyOworCXN0cnVjdCByZWdwYWlyIHJxX3BibF9iYXNlOworCXN0cnVjdCByZWdwYWlyIHJxX2N1cl9wYWdlX2FkZHI7CisJc3RydWN0IHJlZ3BhaXIgY29uZnFfcGJsX2Jhc2VfYWRkcjsKKwlzdHJ1Y3QgcmVncGFpciBjb25uX2RiX2Jhc2U7CisJc3RydWN0IHJlZ3BhaXIgeGZycV9iYXNlX2FkZHI7CisJc3RydWN0IHJlZ3BhaXIgbGNxX2Jhc2VfYWRkcjsKKyNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKKwl1bmlvbiBmY29lX2lkeDE2X2ZpZWxkX3VuaW9uIHJxX2NvbnM7CisJdW5pb24gZmNvZV9pZHgxNl9maWVsZF91bmlvbiBycV9wcm9kOworI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCisJdW5pb24gZmNvZV9pZHgxNl9maWVsZF91bmlvbiBycV9wcm9kOworCXVuaW9uIGZjb2VfaWR4MTZfZmllbGRfdW5pb24gcnFfY29uczsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQorCXUxNiB4ZnJxX3Byb2Q7CisJdTE2IGNxX2NvbnM7CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKKwl1MTYgY3FfY29uczsKKwl1MTYgeGZycV9wcm9kOworI2VuZGlmCisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisJdTE2IGxjcV9jb25zOworCXUxNiBoY19jcmFtX2FkZHJlc3M7CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKKwl1MTYgaGNfY3JhbV9hZGRyZXNzOworCXUxNiBsY3FfY29uczsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQorCXUxNiBzcV94ZnJxX2xjcV9jb25mcV9zaXplOworCXUxNiBjb25mcV9wcm9kOworI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCisJdTE2IGNvbmZxX3Byb2Q7CisJdTE2IHNxX3hmcnFfbGNxX2NvbmZxX3NpemU7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKKwl1OCBoY19jc2RtX2FnZ19pbnQ7CisJdTggZmxhZ3M7CisjZGVmaW5lIFVTVE9STV9GQ09FX1NUX0NPTlRFWFRfTUlEX1NFUV9QUk9DX0ZMQUcgKDB4MTw8MCkKKyNkZWZpbmUgVVNUT1JNX0ZDT0VfU1RfQ09OVEVYVF9NSURfU0VRX1BST0NfRkxBR19TSElGVCAwCisjZGVmaW5lIFVTVE9STV9GQ09FX1NUX0NPTlRFWFRfQ0FDSEVEX0NPTk5fRkxBRyAoMHgxPDwxKQorI2RlZmluZSBVU1RPUk1fRkNPRV9TVF9DT05URVhUX0NBQ0hFRF9DT05OX0ZMQUdfU0hJRlQgMQorI2RlZmluZSBVU1RPUk1fRkNPRV9TVF9DT05URVhUX0NBQ0hFRF9UQ0VfRkxBRyAoMHgxPDwyKQorI2RlZmluZSBVU1RPUk1fRkNPRV9TVF9DT05URVhUX0NBQ0hFRF9UQ0VfRkxBR19TSElGVCAyCisjZGVmaW5lIFVTVE9STV9GQ09FX1NUX0NPTlRFWFRfUlNSVjEgKDB4MUY8PDMpCisjZGVmaW5lIFVTVE9STV9GQ09FX1NUX0NPTlRFWFRfUlNSVjFfU0hJRlQgMworCXU4IGF2YWlsYWJsZV9ycWVzOworCXU4IHNwX3FfZmx1c2hfY250OworI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCisJdTggc3BfcV9mbHVzaF9jbnQ7CisJdTggYXZhaWxhYmxlX3JxZXM7CisJdTggZmxhZ3M7CisjZGVmaW5lIFVTVE9STV9GQ09FX1NUX0NPTlRFWFRfTUlEX1NFUV9QUk9DX0ZMQUcgKDB4MTw8MCkKKyNkZWZpbmUgVVNUT1JNX0ZDT0VfU1RfQ09OVEVYVF9NSURfU0VRX1BST0NfRkxBR19TSElGVCAwCisjZGVmaW5lIFVTVE9STV9GQ09FX1NUX0NPTlRFWFRfQ0FDSEVEX0NPTk5fRkxBRyAoMHgxPDwxKQorI2RlZmluZSBVU1RPUk1fRkNPRV9TVF9DT05URVhUX0NBQ0hFRF9DT05OX0ZMQUdfU0hJRlQgMQorI2RlZmluZSBVU1RPUk1fRkNPRV9TVF9DT05URVhUX0NBQ0hFRF9UQ0VfRkxBRyAoMHgxPDwyKQorI2RlZmluZSBVU1RPUk1fRkNPRV9TVF9DT05URVhUX0NBQ0hFRF9UQ0VfRkxBR19TSElGVCAyCisjZGVmaW5lIFVTVE9STV9GQ09FX1NUX0NPTlRFWFRfUlNSVjEgKDB4MUY8PDMpCisjZGVmaW5lIFVTVE9STV9GQ09FX1NUX0NPTlRFWFRfUlNSVjFfU0hJRlQgMworCXU4IGhjX2NzZG1fYWdnX2ludDsKKyNlbmRpZgorCXN0cnVjdCB1c3Rvcm1fZmNvZV9kYXRhX3BsYWNlIGRhdGFfcGxhY2U7CisJc3RydWN0IHVzdG9ybV9mY29lX3Rhc2tfY3R4X2VudHJ5X3JkIHRjZTsKK307CisKKy8qCisgKiBUaGUgRkNvRSBub24tYWdncmVnYXRpdmUgY29udGV4dCBvZiBUc3Rvcm0KKyAqLworc3RydWN0IHRzdG9ybV9mY29lX3N0X2NvbnRleHQgeworCXN0cnVjdCByZWdwYWlyIHJlc2VydmVkMDsKKwlzdHJ1Y3QgcmVncGFpciByZXNlcnZlZDE7Cit9OworCisvKgorICogVGhlIGZjb2UgYWdncmVnYXRpdmUgY29udGV4dCBzZWN0aW9uIG9mIFhzdG9ybQorICovCitzdHJ1Y3QgeHN0b3JtX2Zjb2VfZXh0cmFfYWdfY29udGV4dF9zZWN0aW9uIHsKKyNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKKwl1OCB0Y3BfYWdnX3ZhcnMxOworI2RlZmluZSBfX1hTVE9STV9GQ09FX0VYVFJBX0FHX0NPTlRFWFRfU0VDVElPTl9SRVNFUlZFRDUxICgweDM8PDApCisjZGVmaW5lIF9fWFNUT1JNX0ZDT0VfRVhUUkFfQUdfQ09OVEVYVF9TRUNUSU9OX1JFU0VSVkVENTFfU0hJRlQgMAorI2RlZmluZSBfX1hTVE9STV9GQ09FX0VYVFJBX0FHX0NPTlRFWFRfU0VDVElPTl9BQ0tfVE9fRkVfVVBEQVRFRCAoMHgzPDwyKQorI2RlZmluZSBfX1hTVE9STV9GQ09FX0VYVFJBX0FHX0NPTlRFWFRfU0VDVElPTl9BQ0tfVE9fRkVfVVBEQVRFRF9TSElGVCAyCisjZGVmaW5lIFhTVE9STV9GQ09FX0VYVFJBX0FHX0NPTlRFWFRfU0VDVElPTl9QQkZfVFhfU0VRX0FDS19DRiAoMHgzPDw0KQorI2RlZmluZSBYU1RPUk1fRkNPRV9FWFRSQV9BR19DT05URVhUX1NFQ1RJT05fUEJGX1RYX1NFUV9BQ0tfQ0ZfU0hJRlQgNAorI2RlZmluZSBfX1hTVE9STV9GQ09FX0VYVFJBX0FHX0NPTlRFWFRfU0VDVElPTl9SRVNFUlZFRF9DTEVBUl9EQV9USU1FUl9FTiAoMHgxPDw2KQorI2RlZmluZSBfX1hTVE9STV9GQ09FX0VYVFJBX0FHX0NPTlRFWFRfU0VDVElPTl9SRVNFUlZFRF9DTEVBUl9EQV9USU1FUl9FTl9TSElGVCA2CisjZGVmaW5lIF9fWFNUT1JNX0ZDT0VfRVhUUkFfQUdfQ09OVEVYVF9TRUNUSU9OX1JFU0VSVkVEX0RBX0VYUElSQVRJT05fRkxBRyAoMHgxPDw3KQorI2RlZmluZSBfX1hTVE9STV9GQ09FX0VYVFJBX0FHX0NPTlRFWFRfU0VDVElPTl9SRVNFUlZFRF9EQV9FWFBJUkFUSU9OX0ZMQUdfU0hJRlQgNworCXU4IF9fcmVzZXJ2ZWRfZGFfY250OworCXUxNiBfX210dTsKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorCXUxNiBfX210dTsKKwl1OCBfX3Jlc2VydmVkX2RhX2NudDsKKwl1OCB0Y3BfYWdnX3ZhcnMxOworI2RlZmluZSBfX1hTVE9STV9GQ09FX0VYVFJBX0FHX0NPTlRFWFRfU0VDVElPTl9SRVNFUlZFRDUxICgweDM8PDApCisjZGVmaW5lIF9fWFNUT1JNX0ZDT0VfRVhUUkFfQUdfQ09OVEVYVF9TRUNUSU9OX1JFU0VSVkVENTFfU0hJRlQgMAorI2RlZmluZSBfX1hTVE9STV9GQ09FX0VYVFJBX0FHX0NPTlRFWFRfU0VDVElPTl9BQ0tfVE9fRkVfVVBEQVRFRCAoMHgzPDwyKQorI2RlZmluZSBfX1hTVE9STV9GQ09FX0VYVFJBX0FHX0NPTlRFWFRfU0VDVElPTl9BQ0tfVE9fRkVfVVBEQVRFRF9TSElGVCAyCisjZGVmaW5lIFhTVE9STV9GQ09FX0VYVFJBX0FHX0NPTlRFWFRfU0VDVElPTl9QQkZfVFhfU0VRX0FDS19DRiAoMHgzPDw0KQorI2RlZmluZSBYU1RPUk1fRkNPRV9FWFRSQV9BR19DT05URVhUX1NFQ1RJT05fUEJGX1RYX1NFUV9BQ0tfQ0ZfU0hJRlQgNAorI2RlZmluZSBfX1hTVE9STV9GQ09FX0VYVFJBX0FHX0NPTlRFWFRfU0VDVElPTl9SRVNFUlZFRF9DTEVBUl9EQV9USU1FUl9FTiAoMHgxPDw2KQorI2RlZmluZSBfX1hTVE9STV9GQ09FX0VYVFJBX0FHX0NPTlRFWFRfU0VDVElPTl9SRVNFUlZFRF9DTEVBUl9EQV9USU1FUl9FTl9TSElGVCA2CisjZGVmaW5lIF9fWFNUT1JNX0ZDT0VfRVhUUkFfQUdfQ09OVEVYVF9TRUNUSU9OX1JFU0VSVkVEX0RBX0VYUElSQVRJT05fRkxBRyAoMHgxPDw3KQorI2RlZmluZSBfX1hTVE9STV9GQ09FX0VYVFJBX0FHX0NPTlRFWFRfU0VDVElPTl9SRVNFUlZFRF9EQV9FWFBJUkFUSU9OX0ZMQUdfU0hJRlQgNworI2VuZGlmCisJdTMyIF9fdGFza19hZGRyX2xvOworCXUzMiBfX3Rhc2tfYWRkcl9oaTsKKwl1MzIgX19yZXNlcnZlZDU1OworCXUzMiBfX3R4X3Byb2RzOworI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQorCXU4IF9fYWdnX3ZhbDhfdGg7CisJdTggX19hZ2dfdmFsODsKKwl1MTYgdGNwX2FnZ192YXJzMjsKKyNkZWZpbmUgX19YU1RPUk1fRkNPRV9FWFRSQV9BR19DT05URVhUX1NFQ1RJT05fUkVTRVJWRUQ1NyAoMHgxPDwwKQorI2RlZmluZSBfX1hTVE9STV9GQ09FX0VYVFJBX0FHX0NPTlRFWFRfU0VDVElPTl9SRVNFUlZFRDU3X1NISUZUIDAKKyNkZWZpbmUgX19YU1RPUk1fRkNPRV9FWFRSQV9BR19DT05URVhUX1NFQ1RJT05fUkVTRVJWRUQ1OCAoMHgxPDwxKQorI2RlZmluZSBfX1hTVE9STV9GQ09FX0VYVFJBX0FHX0NPTlRFWFRfU0VDVElPTl9SRVNFUlZFRDU4X1NISUZUIDEKKyNkZWZpbmUgX19YU1RPUk1fRkNPRV9FWFRSQV9BR19DT05URVhUX1NFQ1RJT05fUkVTRVJWRUQ1OSAoMHgxPDwyKQorI2RlZmluZSBfX1hTVE9STV9GQ09FX0VYVFJBX0FHX0NPTlRFWFRfU0VDVElPTl9SRVNFUlZFRDU5X1NISUZUIDIKKyNkZWZpbmUgX19YU1RPUk1fRkNPRV9FWFRSQV9BR19DT05URVhUX1NFQ1RJT05fQVVYM19GTEFHICgweDE8PDMpCisjZGVmaW5lIF9fWFNUT1JNX0ZDT0VfRVhUUkFfQUdfQ09OVEVYVF9TRUNUSU9OX0FVWDNfRkxBR19TSElGVCAzCisjZGVmaW5lIF9fWFNUT1JNX0ZDT0VfRVhUUkFfQUdfQ09OVEVYVF9TRUNUSU9OX0FVWDRfRkxBRyAoMHgxPDw0KQorI2RlZmluZSBfX1hTVE9STV9GQ09FX0VYVFJBX0FHX0NPTlRFWFRfU0VDVElPTl9BVVg0X0ZMQUdfU0hJRlQgNAorI2RlZmluZSBfX1hTVE9STV9GQ09FX0VYVFJBX0FHX0NPTlRFWFRfU0VDVElPTl9SRVNFUlZFRDYwICgweDE8PDUpCisjZGVmaW5lIF9fWFNUT1JNX0ZDT0VfRVhUUkFfQUdfQ09OVEVYVF9TRUNUSU9OX1JFU0VSVkVENjBfU0hJRlQgNQorI2RlZmluZSBfX1hTVE9STV9GQ09FX0VYVFJBX0FHX0NPTlRFWFRfU0VDVElPTl9SRVNFUlZFRF9BQ0tfVE9fRkVfVVBEQVRFRF9FTiAoMHgxPDw2KQorI2RlZmluZSBfX1hTVE9STV9GQ09FX0VYVFJBX0FHX0NPTlRFWFRfU0VDVElPTl9SRVNFUlZFRF9BQ0tfVE9fRkVfVVBEQVRFRF9FTl9TSElGVCA2CisjZGVmaW5lIFhTVE9STV9GQ09FX0VYVFJBX0FHX0NPTlRFWFRfU0VDVElPTl9QQkZfVFhfU0VRX0FDS19DRl9FTiAoMHgxPDw3KQorI2RlZmluZSBYU1RPUk1fRkNPRV9FWFRSQV9BR19DT05URVhUX1NFQ1RJT05fUEJGX1RYX1NFUV9BQ0tfQ0ZfRU5fU0hJRlQgNworI2RlZmluZSBfX1hTVE9STV9GQ09FX0VYVFJBX0FHX0NPTlRFWFRfU0VDVElPTl9SRVNFUlZFRF9UWF9GSU5fRkxBR19FTiAoMHgxPDw4KQorI2RlZmluZSBfX1hTVE9STV9GQ09FX0VYVFJBX0FHX0NPTlRFWFRfU0VDVElPTl9SRVNFUlZFRF9UWF9GSU5fRkxBR19FTl9TSElGVCA4CisjZGVmaW5lIF9fWFNUT1JNX0ZDT0VfRVhUUkFfQUdfQ09OVEVYVF9TRUNUSU9OX0FVWDFfRkxBRyAoMHgxPDw5KQorI2RlZmluZSBfX1hTVE9STV9GQ09FX0VYVFJBX0FHX0NPTlRFWFRfU0VDVElPTl9BVVgxX0ZMQUdfU0hJRlQgOQorI2RlZmluZSBfX1hTVE9STV9GQ09FX0VYVFJBX0FHX0NPTlRFWFRfU0VDVElPTl9TRVRfUlRPX0NGICgweDM8PDEwKQorI2RlZmluZSBfX1hTVE9STV9GQ09FX0VYVFJBX0FHX0NPTlRFWFRfU0VDVElPTl9TRVRfUlRPX0NGX1NISUZUIDEwCisjZGVmaW5lIF9fWFNUT1JNX0ZDT0VfRVhUUkFfQUdfQ09OVEVYVF9TRUNUSU9OX1RTX1RPX0VDSE9fVVBEQVRFRF9DRiAoMHgzPDwxMikKKyNkZWZpbmUgX19YU1RPUk1fRkNPRV9FWFRSQV9BR19DT05URVhUX1NFQ1RJT05fVFNfVE9fRUNIT19VUERBVEVEX0NGX1NISUZUIDEyCisjZGVmaW5lIF9fWFNUT1JNX0ZDT0VfRVhUUkFfQUdfQ09OVEVYVF9TRUNUSU9OX0FVWDhfQ0YgKDB4Mzw8MTQpCisjZGVmaW5lIF9fWFNUT1JNX0ZDT0VfRVhUUkFfQUdfQ09OVEVYVF9TRUNUSU9OX0FVWDhfQ0ZfU0hJRlQgMTQKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorCXUxNiB0Y3BfYWdnX3ZhcnMyOworI2RlZmluZSBfX1hTVE9STV9GQ09FX0VYVFJBX0FHX0NPTlRFWFRfU0VDVElPTl9SRVNFUlZFRDU3ICgweDE8PDApCisjZGVmaW5lIF9fWFNUT1JNX0ZDT0VfRVhUUkFfQUdfQ09OVEVYVF9TRUNUSU9OX1JFU0VSVkVENTdfU0hJRlQgMAorI2RlZmluZSBfX1hTVE9STV9GQ09FX0VYVFJBX0FHX0NPTlRFWFRfU0VDVElPTl9SRVNFUlZFRDU4ICgweDE8PDEpCisjZGVmaW5lIF9fWFNUT1JNX0ZDT0VfRVhUUkFfQUdfQ09OVEVYVF9TRUNUSU9OX1JFU0VSVkVENThfU0hJRlQgMQorI2RlZmluZSBfX1hTVE9STV9GQ09FX0VYVFJBX0FHX0NPTlRFWFRfU0VDVElPTl9SRVNFUlZFRDU5ICgweDE8PDIpCisjZGVmaW5lIF9fWFNUT1JNX0ZDT0VfRVhUUkFfQUdfQ09OVEVYVF9TRUNUSU9OX1JFU0VSVkVENTlfU0hJRlQgMgorI2RlZmluZSBfX1hTVE9STV9GQ09FX0VYVFJBX0FHX0NPTlRFWFRfU0VDVElPTl9BVVgzX0ZMQUcgKDB4MTw8MykKKyNkZWZpbmUgX19YU1RPUk1fRkNPRV9FWFRSQV9BR19DT05URVhUX1NFQ1RJT05fQVVYM19GTEFHX1NISUZUIDMKKyNkZWZpbmUgX19YU1RPUk1fRkNPRV9FWFRSQV9BR19DT05URVhUX1NFQ1RJT05fQVVYNF9GTEFHICgweDE8PDQpCisjZGVmaW5lIF9fWFNUT1JNX0ZDT0VfRVhUUkFfQUdfQ09OVEVYVF9TRUNUSU9OX0FVWDRfRkxBR19TSElGVCA0CisjZGVmaW5lIF9fWFNUT1JNX0ZDT0VfRVhUUkFfQUdfQ09OVEVYVF9TRUNUSU9OX1JFU0VSVkVENjAgKDB4MTw8NSkKKyNkZWZpbmUgX19YU1RPUk1fRkNPRV9FWFRSQV9BR19DT05URVhUX1NFQ1RJT05fUkVTRVJWRUQ2MF9TSElGVCA1CisjZGVmaW5lIF9fWFNUT1JNX0ZDT0VfRVhUUkFfQUdfQ09OVEVYVF9TRUNUSU9OX1JFU0VSVkVEX0FDS19UT19GRV9VUERBVEVEX0VOICgweDE8PDYpCisjZGVmaW5lIF9fWFNUT1JNX0ZDT0VfRVhUUkFfQUdfQ09OVEVYVF9TRUNUSU9OX1JFU0VSVkVEX0FDS19UT19GRV9VUERBVEVEX0VOX1NISUZUIDYKKyNkZWZpbmUgWFNUT1JNX0ZDT0VfRVhUUkFfQUdfQ09OVEVYVF9TRUNUSU9OX1BCRl9UWF9TRVFfQUNLX0NGX0VOICgweDE8PDcpCisjZGVmaW5lIFhTVE9STV9GQ09FX0VYVFJBX0FHX0NPTlRFWFRfU0VDVElPTl9QQkZfVFhfU0VRX0FDS19DRl9FTl9TSElGVCA3CisjZGVmaW5lIF9fWFNUT1JNX0ZDT0VfRVhUUkFfQUdfQ09OVEVYVF9TRUNUSU9OX1JFU0VSVkVEX1RYX0ZJTl9GTEFHX0VOICgweDE8PDgpCisjZGVmaW5lIF9fWFNUT1JNX0ZDT0VfRVhUUkFfQUdfQ09OVEVYVF9TRUNUSU9OX1JFU0VSVkVEX1RYX0ZJTl9GTEFHX0VOX1NISUZUIDgKKyNkZWZpbmUgX19YU1RPUk1fRkNPRV9FWFRSQV9BR19DT05URVhUX1NFQ1RJT05fQVVYMV9GTEFHICgweDE8PDkpCisjZGVmaW5lIF9fWFNUT1JNX0ZDT0VfRVhUUkFfQUdfQ09OVEVYVF9TRUNUSU9OX0FVWDFfRkxBR19TSElGVCA5CisjZGVmaW5lIF9fWFNUT1JNX0ZDT0VfRVhUUkFfQUdfQ09OVEVYVF9TRUNUSU9OX1NFVF9SVE9fQ0YgKDB4Mzw8MTApCisjZGVmaW5lIF9fWFNUT1JNX0ZDT0VfRVhUUkFfQUdfQ09OVEVYVF9TRUNUSU9OX1NFVF9SVE9fQ0ZfU0hJRlQgMTAKKyNkZWZpbmUgX19YU1RPUk1fRkNPRV9FWFRSQV9BR19DT05URVhUX1NFQ1RJT05fVFNfVE9fRUNIT19VUERBVEVEX0NGICgweDM8PDEyKQorI2RlZmluZSBfX1hTVE9STV9GQ09FX0VYVFJBX0FHX0NPTlRFWFRfU0VDVElPTl9UU19UT19FQ0hPX1VQREFURURfQ0ZfU0hJRlQgMTIKKyNkZWZpbmUgX19YU1RPUk1fRkNPRV9FWFRSQV9BR19DT05URVhUX1NFQ1RJT05fQVVYOF9DRiAoMHgzPDwxNCkKKyNkZWZpbmUgX19YU1RPUk1fRkNPRV9FWFRSQV9BR19DT05URVhUX1NFQ1RJT05fQVVYOF9DRl9TSElGVCAxNAorCXU4IF9fYWdnX3ZhbDg7CisJdTggX19hZ2dfdmFsOF90aDsKKyNlbmRpZgorCXUzMiBfX3NxX2Jhc2VfYWRkcl9sbzsKKwl1MzIgX19zcV9iYXNlX2FkZHJfaGk7CisJdTMyIF9feGZycV9iYXNlX2FkZHJfbG87CisJdTMyIF9feGZycV9iYXNlX2FkZHJfaGk7CisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisJdTE2IF9feGZycV9jb25zOworCXUxNiBfX3hmcnFfcHJvZDsKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorCXUxNiBfX3hmcnFfcHJvZDsKKwl1MTYgX194ZnJxX2NvbnM7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKKwl1OCBfX3RjcF9hZ2dfdmFyczU7CisJdTggX190Y3BfYWdnX3ZhcnM0OworCXU4IF9fdGNwX2FnZ192YXJzMzsKKwl1OCBfX3Jlc2VydmVkX2ZvcmNlX3B1cmVfYWNrX2NudDsKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorCXU4IF9fcmVzZXJ2ZWRfZm9yY2VfcHVyZV9hY2tfY250OworCXU4IF9fdGNwX2FnZ192YXJzMzsKKwl1OCBfX3RjcF9hZ2dfdmFyczQ7CisJdTggX190Y3BfYWdnX3ZhcnM1OworI2VuZGlmCisJdTMyIF9fdGNwX2FnZ192YXJzNjsKKyNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKKwl1MTYgX19hZ2dfbWlzYzY7CisJdTE2IF9fdGNwX2FnZ192YXJzNzsKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorCXUxNiBfX3RjcF9hZ2dfdmFyczc7CisJdTE2IF9fYWdnX21pc2M2OworI2VuZGlmCisJdTMyIF9fYWdnX3ZhbDEwOworCXUzMiBfX2FnZ192YWwxMF90aDsKKyNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKKwl1MTYgX19yZXNlcnZlZDM7CisJdTggX19yZXNlcnZlZDI7CisJdTggX19kYV9vbmx5X2NudDsKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorCXU4IF9fZGFfb25seV9jbnQ7CisJdTggX19yZXNlcnZlZDI7CisJdTE2IF9fcmVzZXJ2ZWQzOworI2VuZGlmCit9OworCisvKgorICogVGhlIGZjb2UgYWdncmVnYXRpdmUgY29udGV4dCBvZiBYc3Rvcm0KKyAqLworc3RydWN0IHhzdG9ybV9mY29lX2FnX2NvbnRleHQgeworI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQorCXUxNiBhZ2dfdmFsMTsKKwl1OCBhZ2dfdmFyczE7CisjZGVmaW5lIF9fWFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9FWElTVFNfSU5fUU0wICgweDE8PDApCisjZGVmaW5lIF9fWFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9FWElTVFNfSU5fUU0wX1NISUZUIDAKKyNkZWZpbmUgX19YU1RPUk1fRkNPRV9BR19DT05URVhUX0VYSVNUU19JTl9RTTEgKDB4MTw8MSkKKyNkZWZpbmUgX19YU1RPUk1fRkNPRV9BR19DT05URVhUX0VYSVNUU19JTl9RTTFfU0hJRlQgMQorI2RlZmluZSBfX1hTVE9STV9GQ09FX0FHX0NPTlRFWFRfUkVTRVJWRUQ1MSAoMHgxPDwyKQorI2RlZmluZSBfX1hTVE9STV9GQ09FX0FHX0NPTlRFWFRfUkVTRVJWRUQ1MV9TSElGVCAyCisjZGVmaW5lIF9fWFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9SRVNFUlZFRDUyICgweDE8PDMpCisjZGVmaW5lIF9fWFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9SRVNFUlZFRDUyX1NISUZUIDMKKyNkZWZpbmUgX19YU1RPUk1fRkNPRV9BR19DT05URVhUX01PUkVfVE9fU0VORF9FTiAoMHgxPDw0KQorI2RlZmluZSBfX1hTVE9STV9GQ09FX0FHX0NPTlRFWFRfTU9SRV9UT19TRU5EX0VOX1NISUZUIDQKKyNkZWZpbmUgWFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9OQUdMRV9FTiAoMHgxPDw1KQorI2RlZmluZSBYU1RPUk1fRkNPRV9BR19DT05URVhUX05BR0xFX0VOX1NISUZUIDUKKyNkZWZpbmUgX19YU1RPUk1fRkNPRV9BR19DT05URVhUX0RRX1NQQVJFX0ZMQUcgKDB4MTw8NikKKyNkZWZpbmUgX19YU1RPUk1fRkNPRV9BR19DT05URVhUX0RRX1NQQVJFX0ZMQUdfU0hJRlQgNgorI2RlZmluZSBfX1hTVE9STV9GQ09FX0FHX0NPTlRFWFRfUkVTRVJWRURfVU5BX0dUX05YVF9FTiAoMHgxPDw3KQorI2RlZmluZSBfX1hTVE9STV9GQ09FX0FHX0NPTlRFWFRfUkVTRVJWRURfVU5BX0dUX05YVF9FTl9TSElGVCA3CisJdTggX19zdGF0ZTsKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorCXU4IF9fc3RhdGU7CisJdTggYWdnX3ZhcnMxOworI2RlZmluZSBfX1hTVE9STV9GQ09FX0FHX0NPTlRFWFRfRVhJU1RTX0lOX1FNMCAoMHgxPDwwKQorI2RlZmluZSBfX1hTVE9STV9GQ09FX0FHX0NPTlRFWFRfRVhJU1RTX0lOX1FNMF9TSElGVCAwCisjZGVmaW5lIF9fWFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9FWElTVFNfSU5fUU0xICgweDE8PDEpCisjZGVmaW5lIF9fWFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9FWElTVFNfSU5fUU0xX1NISUZUIDEKKyNkZWZpbmUgX19YU1RPUk1fRkNPRV9BR19DT05URVhUX1JFU0VSVkVENTEgKDB4MTw8MikKKyNkZWZpbmUgX19YU1RPUk1fRkNPRV9BR19DT05URVhUX1JFU0VSVkVENTFfU0hJRlQgMgorI2RlZmluZSBfX1hTVE9STV9GQ09FX0FHX0NPTlRFWFRfUkVTRVJWRUQ1MiAoMHgxPDwzKQorI2RlZmluZSBfX1hTVE9STV9GQ09FX0FHX0NPTlRFWFRfUkVTRVJWRUQ1Ml9TSElGVCAzCisjZGVmaW5lIF9fWFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9NT1JFX1RPX1NFTkRfRU4gKDB4MTw8NCkKKyNkZWZpbmUgX19YU1RPUk1fRkNPRV9BR19DT05URVhUX01PUkVfVE9fU0VORF9FTl9TSElGVCA0CisjZGVmaW5lIFhTVE9STV9GQ09FX0FHX0NPTlRFWFRfTkFHTEVfRU4gKDB4MTw8NSkKKyNkZWZpbmUgWFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9OQUdMRV9FTl9TSElGVCA1CisjZGVmaW5lIF9fWFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9EUV9TUEFSRV9GTEFHICgweDE8PDYpCisjZGVmaW5lIF9fWFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9EUV9TUEFSRV9GTEFHX1NISUZUIDYKKyNkZWZpbmUgX19YU1RPUk1fRkNPRV9BR19DT05URVhUX1JFU0VSVkVEX1VOQV9HVF9OWFRfRU4gKDB4MTw8NykKKyNkZWZpbmUgX19YU1RPUk1fRkNPRV9BR19DT05URVhUX1JFU0VSVkVEX1VOQV9HVF9OWFRfRU5fU0hJRlQgNworCXUxNiBhZ2dfdmFsMTsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQorCXU4IGNkdV9yZXNlcnZlZDsKKwl1OCBfX2FnZ192YXJzNDsKKwl1OCBhZ2dfdmFyczM7CisjZGVmaW5lIFhTVE9STV9GQ09FX0FHX0NPTlRFWFRfUEhZU0lDQUxfUVVFVUVfTlVNMiAoMHgzRjw8MCkKKyNkZWZpbmUgWFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9QSFlTSUNBTF9RVUVVRV9OVU0yX1NISUZUIDAKKyNkZWZpbmUgX19YU1RPUk1fRkNPRV9BR19DT05URVhUX0FVWDE5X0NGICgweDM8PDYpCisjZGVmaW5lIF9fWFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9BVVgxOV9DRl9TSElGVCA2CisJdTggYWdnX3ZhcnMyOworI2RlZmluZSBfX1hTVE9STV9GQ09FX0FHX0NPTlRFWFRfRFFfQ0YgKDB4Mzw8MCkKKyNkZWZpbmUgX19YU1RPUk1fRkNPRV9BR19DT05URVhUX0RRX0NGX1NISUZUIDAKKyNkZWZpbmUgX19YU1RPUk1fRkNPRV9BR19DT05URVhUX0RRX1NQQVJFX0ZMQUdfRU4gKDB4MTw8MikKKyNkZWZpbmUgX19YU1RPUk1fRkNPRV9BR19DT05URVhUX0RRX1NQQVJFX0ZMQUdfRU5fU0hJRlQgMgorI2RlZmluZSBfX1hTVE9STV9GQ09FX0FHX0NPTlRFWFRfQVVYOF9GTEFHICgweDE8PDMpCisjZGVmaW5lIF9fWFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9BVVg4X0ZMQUdfU0hJRlQgMworI2RlZmluZSBfX1hTVE9STV9GQ09FX0FHX0NPTlRFWFRfQVVYOV9GTEFHICgweDE8PDQpCisjZGVmaW5lIF9fWFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9BVVg5X0ZMQUdfU0hJRlQgNAorI2RlZmluZSBYU1RPUk1fRkNPRV9BR19DT05URVhUX0RFQ0lTSU9OX1JVTEUxICgweDM8PDUpCisjZGVmaW5lIFhTVE9STV9GQ09FX0FHX0NPTlRFWFRfREVDSVNJT05fUlVMRTFfU0hJRlQgNQorI2RlZmluZSBfX1hTVE9STV9GQ09FX0FHX0NPTlRFWFRfRFFfQ0ZfRU4gKDB4MTw8NykKKyNkZWZpbmUgX19YU1RPUk1fRkNPRV9BR19DT05URVhUX0RRX0NGX0VOX1NISUZUIDcKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorCXU4IGFnZ192YXJzMjsKKyNkZWZpbmUgX19YU1RPUk1fRkNPRV9BR19DT05URVhUX0RRX0NGICgweDM8PDApCisjZGVmaW5lIF9fWFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9EUV9DRl9TSElGVCAwCisjZGVmaW5lIF9fWFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9EUV9TUEFSRV9GTEFHX0VOICgweDE8PDIpCisjZGVmaW5lIF9fWFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9EUV9TUEFSRV9GTEFHX0VOX1NISUZUIDIKKyNkZWZpbmUgX19YU1RPUk1fRkNPRV9BR19DT05URVhUX0FVWDhfRkxBRyAoMHgxPDwzKQorI2RlZmluZSBfX1hTVE9STV9GQ09FX0FHX0NPTlRFWFRfQVVYOF9GTEFHX1NISUZUIDMKKyNkZWZpbmUgX19YU1RPUk1fRkNPRV9BR19DT05URVhUX0FVWDlfRkxBRyAoMHgxPDw0KQorI2RlZmluZSBfX1hTVE9STV9GQ09FX0FHX0NPTlRFWFRfQVVYOV9GTEFHX1NISUZUIDQKKyNkZWZpbmUgWFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9ERUNJU0lPTl9SVUxFMSAoMHgzPDw1KQorI2RlZmluZSBYU1RPUk1fRkNPRV9BR19DT05URVhUX0RFQ0lTSU9OX1JVTEUxX1NISUZUIDUKKyNkZWZpbmUgX19YU1RPUk1fRkNPRV9BR19DT05URVhUX0RRX0NGX0VOICgweDE8PDcpCisjZGVmaW5lIF9fWFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9EUV9DRl9FTl9TSElGVCA3CisJdTggYWdnX3ZhcnMzOworI2RlZmluZSBYU1RPUk1fRkNPRV9BR19DT05URVhUX1BIWVNJQ0FMX1FVRVVFX05VTTIgKDB4M0Y8PDApCisjZGVmaW5lIFhTVE9STV9GQ09FX0FHX0NPTlRFWFRfUEhZU0lDQUxfUVVFVUVfTlVNMl9TSElGVCAwCisjZGVmaW5lIF9fWFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9BVVgxOV9DRiAoMHgzPDw2KQorI2RlZmluZSBfX1hTVE9STV9GQ09FX0FHX0NPTlRFWFRfQVVYMTlfQ0ZfU0hJRlQgNgorCXU4IF9fYWdnX3ZhcnM0OworCXU4IGNkdV9yZXNlcnZlZDsKKyNlbmRpZgorCXUzMiBtb3JlX3RvX3NlbmQ7CisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisJdTE2IGFnZ192YXJzNTsKKyNkZWZpbmUgWFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9ERUNJU0lPTl9SVUxFNSAoMHgzPDwwKQorI2RlZmluZSBYU1RPUk1fRkNPRV9BR19DT05URVhUX0RFQ0lTSU9OX1JVTEU1X1NISUZUIDAKKyNkZWZpbmUgWFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9QSFlTSUNBTF9RVUVVRV9OVU0wICgweDNGPDwyKQorI2RlZmluZSBYU1RPUk1fRkNPRV9BR19DT05URVhUX1BIWVNJQ0FMX1FVRVVFX05VTTBfU0hJRlQgMgorI2RlZmluZSBYU1RPUk1fRkNPRV9BR19DT05URVhUX1BIWVNJQ0FMX1FVRVVFX05VTTEgKDB4M0Y8PDgpCisjZGVmaW5lIFhTVE9STV9GQ09FX0FHX0NPTlRFWFRfUEhZU0lDQUxfUVVFVUVfTlVNMV9TSElGVCA4CisjZGVmaW5lIF9fWFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9DT05GUV9ERUNfUlVMRSAoMHgzPDwxNCkKKyNkZWZpbmUgX19YU1RPUk1fRkNPRV9BR19DT05URVhUX0NPTkZRX0RFQ19SVUxFX1NISUZUIDE0CisJdTE2IHNxX2NvbnM7CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKKwl1MTYgc3FfY29uczsKKwl1MTYgYWdnX3ZhcnM1OworI2RlZmluZSBYU1RPUk1fRkNPRV9BR19DT05URVhUX0RFQ0lTSU9OX1JVTEU1ICgweDM8PDApCisjZGVmaW5lIFhTVE9STV9GQ09FX0FHX0NPTlRFWFRfREVDSVNJT05fUlVMRTVfU0hJRlQgMAorI2RlZmluZSBYU1RPUk1fRkNPRV9BR19DT05URVhUX1BIWVNJQ0FMX1FVRVVFX05VTTAgKDB4M0Y8PDIpCisjZGVmaW5lIFhTVE9STV9GQ09FX0FHX0NPTlRFWFRfUEhZU0lDQUxfUVVFVUVfTlVNMF9TSElGVCAyCisjZGVmaW5lIFhTVE9STV9GQ09FX0FHX0NPTlRFWFRfUEhZU0lDQUxfUVVFVUVfTlVNMSAoMHgzRjw8OCkKKyNkZWZpbmUgWFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9QSFlTSUNBTF9RVUVVRV9OVU0xX1NISUZUIDgKKyNkZWZpbmUgX19YU1RPUk1fRkNPRV9BR19DT05URVhUX0NPTkZRX0RFQ19SVUxFICgweDM8PDE0KQorI2RlZmluZSBfX1hTVE9STV9GQ09FX0FHX0NPTlRFWFRfQ09ORlFfREVDX1JVTEVfU0hJRlQgMTQKKyNlbmRpZgorCXN0cnVjdCB4c3Rvcm1fZmNvZV9leHRyYV9hZ19jb250ZXh0X3NlY3Rpb24gX19leHRyYV9zZWN0aW9uOworI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQorCXUxNiBhZ2dfdmFyczc7CisjZGVmaW5lIF9fWFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9BR0dfVkFMMTFfREVDSVNJT05fUlVMRSAoMHg3PDwwKQorI2RlZmluZSBfX1hTVE9STV9GQ09FX0FHX0NPTlRFWFRfQUdHX1ZBTDExX0RFQ0lTSU9OX1JVTEVfU0hJRlQgMAorI2RlZmluZSBfX1hTVE9STV9GQ09FX0FHX0NPTlRFWFRfQVVYMTNfRkxBRyAoMHgxPDwzKQorI2RlZmluZSBfX1hTVE9STV9GQ09FX0FHX0NPTlRFWFRfQVVYMTNfRkxBR19TSElGVCAzCisjZGVmaW5lIF9fWFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9RVUVVRTBfQ0YgKDB4Mzw8NCkKKyNkZWZpbmUgX19YU1RPUk1fRkNPRV9BR19DT05URVhUX1FVRVVFMF9DRl9TSElGVCA0CisjZGVmaW5lIFhTVE9STV9GQ09FX0FHX0NPTlRFWFRfREVDSVNJT05fUlVMRTMgKDB4Mzw8NikKKyNkZWZpbmUgWFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9ERUNJU0lPTl9SVUxFM19TSElGVCA2CisjZGVmaW5lIFhTVE9STV9GQ09FX0FHX0NPTlRFWFRfQVVYMV9DRiAoMHgzPDw4KQorI2RlZmluZSBYU1RPUk1fRkNPRV9BR19DT05URVhUX0FVWDFfQ0ZfU0hJRlQgOAorI2RlZmluZSBfX1hTVE9STV9GQ09FX0FHX0NPTlRFWFRfUkVTRVJWRUQ2MiAoMHgxPDwxMCkKKyNkZWZpbmUgX19YU1RPUk1fRkNPRV9BR19DT05URVhUX1JFU0VSVkVENjJfU0hJRlQgMTAKKyNkZWZpbmUgX19YU1RPUk1fRkNPRV9BR19DT05URVhUX0FVWDFfQ0ZfRU4gKDB4MTw8MTEpCisjZGVmaW5lIF9fWFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9BVVgxX0NGX0VOX1NISUZUIDExCisjZGVmaW5lIF9fWFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9BVVgxMF9GTEFHICgweDE8PDEyKQorI2RlZmluZSBfX1hTVE9STV9GQ09FX0FHX0NPTlRFWFRfQVVYMTBfRkxBR19TSElGVCAxMgorI2RlZmluZSBfX1hTVE9STV9GQ09FX0FHX0NPTlRFWFRfQVVYMTFfRkxBRyAoMHgxPDwxMykKKyNkZWZpbmUgX19YU1RPUk1fRkNPRV9BR19DT05URVhUX0FVWDExX0ZMQUdfU0hJRlQgMTMKKyNkZWZpbmUgX19YU1RPUk1fRkNPRV9BR19DT05URVhUX0FVWDEyX0ZMQUcgKDB4MTw8MTQpCisjZGVmaW5lIF9fWFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9BVVgxMl9GTEFHX1NISUZUIDE0CisjZGVmaW5lIF9fWFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9BVVgyX0ZMQUcgKDB4MTw8MTUpCisjZGVmaW5lIF9fWFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9BVVgyX0ZMQUdfU0hJRlQgMTUKKwl1OCBhZ2dfdmFsM190aDsKKwl1OCBhZ2dfdmFyczY7CisjZGVmaW5lIFhTVE9STV9GQ09FX0FHX0NPTlRFWFRfREVDSVNJT05fUlVMRTYgKDB4Nzw8MCkKKyNkZWZpbmUgWFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9ERUNJU0lPTl9SVUxFNl9TSElGVCAwCisjZGVmaW5lIF9fWFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9YRlJRX0RFQ19SVUxFICgweDc8PDMpCisjZGVmaW5lIF9fWFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9YRlJRX0RFQ19SVUxFX1NISUZUIDMKKyNkZWZpbmUgX19YU1RPUk1fRkNPRV9BR19DT05URVhUX1NRX0RFQ19SVUxFICgweDM8PDYpCisjZGVmaW5lIF9fWFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9TUV9ERUNfUlVMRV9TSElGVCA2CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKKwl1OCBhZ2dfdmFyczY7CisjZGVmaW5lIFhTVE9STV9GQ09FX0FHX0NPTlRFWFRfREVDSVNJT05fUlVMRTYgKDB4Nzw8MCkKKyNkZWZpbmUgWFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9ERUNJU0lPTl9SVUxFNl9TSElGVCAwCisjZGVmaW5lIF9fWFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9YRlJRX0RFQ19SVUxFICgweDc8PDMpCisjZGVmaW5lIF9fWFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9YRlJRX0RFQ19SVUxFX1NISUZUIDMKKyNkZWZpbmUgX19YU1RPUk1fRkNPRV9BR19DT05URVhUX1NRX0RFQ19SVUxFICgweDM8PDYpCisjZGVmaW5lIF9fWFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9TUV9ERUNfUlVMRV9TSElGVCA2CisJdTggYWdnX3ZhbDNfdGg7CisJdTE2IGFnZ192YXJzNzsKKyNkZWZpbmUgX19YU1RPUk1fRkNPRV9BR19DT05URVhUX0FHR19WQUwxMV9ERUNJU0lPTl9SVUxFICgweDc8PDApCisjZGVmaW5lIF9fWFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9BR0dfVkFMMTFfREVDSVNJT05fUlVMRV9TSElGVCAwCisjZGVmaW5lIF9fWFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9BVVgxM19GTEFHICgweDE8PDMpCisjZGVmaW5lIF9fWFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9BVVgxM19GTEFHX1NISUZUIDMKKyNkZWZpbmUgX19YU1RPUk1fRkNPRV9BR19DT05URVhUX1FVRVVFMF9DRiAoMHgzPDw0KQorI2RlZmluZSBfX1hTVE9STV9GQ09FX0FHX0NPTlRFWFRfUVVFVUUwX0NGX1NISUZUIDQKKyNkZWZpbmUgWFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9ERUNJU0lPTl9SVUxFMyAoMHgzPDw2KQorI2RlZmluZSBYU1RPUk1fRkNPRV9BR19DT05URVhUX0RFQ0lTSU9OX1JVTEUzX1NISUZUIDYKKyNkZWZpbmUgWFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9BVVgxX0NGICgweDM8PDgpCisjZGVmaW5lIFhTVE9STV9GQ09FX0FHX0NPTlRFWFRfQVVYMV9DRl9TSElGVCA4CisjZGVmaW5lIF9fWFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9SRVNFUlZFRDYyICgweDE8PDEwKQorI2RlZmluZSBfX1hTVE9STV9GQ09FX0FHX0NPTlRFWFRfUkVTRVJWRUQ2Ml9TSElGVCAxMAorI2RlZmluZSBfX1hTVE9STV9GQ09FX0FHX0NPTlRFWFRfQVVYMV9DRl9FTiAoMHgxPDwxMSkKKyNkZWZpbmUgX19YU1RPUk1fRkNPRV9BR19DT05URVhUX0FVWDFfQ0ZfRU5fU0hJRlQgMTEKKyNkZWZpbmUgX19YU1RPUk1fRkNPRV9BR19DT05URVhUX0FVWDEwX0ZMQUcgKDB4MTw8MTIpCisjZGVmaW5lIF9fWFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9BVVgxMF9GTEFHX1NISUZUIDEyCisjZGVmaW5lIF9fWFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9BVVgxMV9GTEFHICgweDE8PDEzKQorI2RlZmluZSBfX1hTVE9STV9GQ09FX0FHX0NPTlRFWFRfQVVYMTFfRkxBR19TSElGVCAxMworI2RlZmluZSBfX1hTVE9STV9GQ09FX0FHX0NPTlRFWFRfQVVYMTJfRkxBRyAoMHgxPDwxNCkKKyNkZWZpbmUgX19YU1RPUk1fRkNPRV9BR19DT05URVhUX0FVWDEyX0ZMQUdfU0hJRlQgMTQKKyNkZWZpbmUgX19YU1RPUk1fRkNPRV9BR19DT05URVhUX0FVWDJfRkxBRyAoMHgxPDwxNSkKKyNkZWZpbmUgX19YU1RPUk1fRkNPRV9BR19DT05URVhUX0FVWDJfRkxBR19TSElGVCAxNQorI2VuZGlmCisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisJdTE2IF9fYWdnX3ZhbDExX3RoOworCXUxNiBfX2FnZ192YWwxMTsKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorCXUxNiBfX2FnZ192YWwxMTsKKwl1MTYgX19hZ2dfdmFsMTFfdGg7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKKwl1OCBfX3Jlc2VydmVkMTsKKwl1OCBfX2FnZ192YWw2X3RoOworCXUxNiBfX2NvbmZxX3R4X3Byb2Q7CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKKwl1MTYgX19jb25mcV90eF9wcm9kOworCXU4IF9fYWdnX3ZhbDZfdGg7CisJdTggX19yZXNlcnZlZDE7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKKwl1MTYgY29uZnFfY29uczsKKwl1MTYgY29uZnFfcHJvZDsKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorCXUxNiBjb25mcV9wcm9kOworCXUxNiBjb25mcV9jb25zOworI2VuZGlmCisJdTMyIGFnZ192YXJzODsKKyNkZWZpbmUgX19YU1RPUk1fRkNPRV9BR19DT05URVhUX0NBQ0hFX1dRRV9JRFggKDB4RkZGRkZGPDwwKQorI2RlZmluZSBfX1hTVE9STV9GQ09FX0FHX0NPTlRFWFRfQ0FDSEVfV1FFX0lEWF9TSElGVCAwCisjZGVmaW5lIFhTVE9STV9GQ09FX0FHX0NPTlRFWFRfQUdHX01JU0MzICgweEZGPDwyNCkKKyNkZWZpbmUgWFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9BR0dfTUlTQzNfU0hJRlQgMjQKKyNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKKwl1MTYgb3hfaWQ7CisJdTE2IHNxX3Byb2Q7CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKKwl1MTYgc3FfcHJvZDsKKwl1MTYgb3hfaWQ7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKKwl1OCBhZ2dfdmFsMzsKKwl1OCBhZ2dfdmFsNjsKKwl1OCBhZ2dfdmFsNV90aDsKKwl1OCBhZ2dfdmFsNTsKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorCXU4IGFnZ192YWw1OworCXU4IGFnZ192YWw1X3RoOworCXU4IGFnZ192YWw2OworCXU4IGFnZ192YWwzOworI2VuZGlmCisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisJdTE2IF9fcGJmX3R4X3NlcV9hY2s7CisJdTE2IGFnZ19saW1pdDE7CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKKwl1MTYgYWdnX2xpbWl0MTsKKwl1MTYgX19wYmZfdHhfc2VxX2FjazsKKyNlbmRpZgorCXUzMiBjb21wbGV0aW9uX3NlcTsKKwl1MzIgY29uZnFfcGJsX2Jhc2VfbG87CisJdTMyIGNvbmZxX3BibF9iYXNlX2hpOworfTsKKworLyoKKyAqIFRoZSBmY29lIGV4dHJhIGFnZ3JlZ2F0aXZlIGNvbnRleHQgc2VjdGlvbiBvZiBUc3Rvcm0KKyAqLworc3RydWN0IHRzdG9ybV9mY29lX2V4dHJhX2FnX2NvbnRleHRfc2VjdGlvbiB7CisJdTMyIF9fYWdnX3ZhbDE7CisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisJdTggX190Y3BfYWdnX3ZhcnMyOworCXU4IF9fYWdnX3ZhbDM7CisJdTE2IF9fYWdnX3ZhbDI7CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKKwl1MTYgX19hZ2dfdmFsMjsKKwl1OCBfX2FnZ192YWwzOworCXU4IF9fdGNwX2FnZ192YXJzMjsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQorCXUxNiBfX2FnZ192YWw1OworCXU4IF9fYWdnX3ZhbDY7CisJdTggX190Y3BfYWdnX3ZhcnMzOworI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCisJdTggX190Y3BfYWdnX3ZhcnMzOworCXU4IF9fYWdnX3ZhbDY7CisJdTE2IF9fYWdnX3ZhbDU7CisjZW5kaWYKKwl1MzIgX19sY3FfcHJvZDsKKwl1MzIgcnR0X3NlcTsKKwl1MzIgcnR0X3RpbWU7CisJdTMyIF9fcmVzZXJ2ZWQ2NjsKKwl1MzIgd25kX3JpZ2h0X2VkZ2U7CisJdTMyIHRjcF9hZ2dfdmFyczE7CisjZGVmaW5lIFRTVE9STV9GQ09FX0VYVFJBX0FHX0NPTlRFWFRfU0VDVElPTl9GSU5fU0VOVF9GTEFHICgweDE8PDApCisjZGVmaW5lIFRTVE9STV9GQ09FX0VYVFJBX0FHX0NPTlRFWFRfU0VDVElPTl9GSU5fU0VOVF9GTEFHX1NISUZUIDAKKyNkZWZpbmUgVFNUT1JNX0ZDT0VfRVhUUkFfQUdfQ09OVEVYVF9TRUNUSU9OX0xBU1RfUEFDS0VUX0ZJTl9GTEFHICgweDE8PDEpCisjZGVmaW5lIFRTVE9STV9GQ09FX0VYVFJBX0FHX0NPTlRFWFRfU0VDVElPTl9MQVNUX1BBQ0tFVF9GSU5fRkxBR19TSElGVCAxCisjZGVmaW5lIFRTVE9STV9GQ09FX0VYVFJBX0FHX0NPTlRFWFRfU0VDVElPTl9XTkRfVVBEX0NGICgweDM8PDIpCisjZGVmaW5lIFRTVE9STV9GQ09FX0VYVFJBX0FHX0NPTlRFWFRfU0VDVElPTl9XTkRfVVBEX0NGX1NISUZUIDIKKyNkZWZpbmUgVFNUT1JNX0ZDT0VfRVhUUkFfQUdfQ09OVEVYVF9TRUNUSU9OX1RJTUVPVVRfQ0YgKDB4Mzw8NCkKKyNkZWZpbmUgVFNUT1JNX0ZDT0VfRVhUUkFfQUdfQ09OVEVYVF9TRUNUSU9OX1RJTUVPVVRfQ0ZfU0hJRlQgNAorI2RlZmluZSBUU1RPUk1fRkNPRV9FWFRSQV9BR19DT05URVhUX1NFQ1RJT05fV05EX1VQRF9DRl9FTiAoMHgxPDw2KQorI2RlZmluZSBUU1RPUk1fRkNPRV9FWFRSQV9BR19DT05URVhUX1NFQ1RJT05fV05EX1VQRF9DRl9FTl9TSElGVCA2CisjZGVmaW5lIFRTVE9STV9GQ09FX0VYVFJBX0FHX0NPTlRFWFRfU0VDVElPTl9USU1FT1VUX0NGX0VOICgweDE8PDcpCisjZGVmaW5lIFRTVE9STV9GQ09FX0VYVFJBX0FHX0NPTlRFWFRfU0VDVElPTl9USU1FT1VUX0NGX0VOX1NISUZUIDcKKyNkZWZpbmUgVFNUT1JNX0ZDT0VfRVhUUkFfQUdfQ09OVEVYVF9TRUNUSU9OX1JFVFJBTlNNSVRfU0VRX0VOICgweDE8PDgpCisjZGVmaW5lIFRTVE9STV9GQ09FX0VYVFJBX0FHX0NPTlRFWFRfU0VDVElPTl9SRVRSQU5TTUlUX1NFUV9FTl9TSElGVCA4CisjZGVmaW5lIF9fVFNUT1JNX0ZDT0VfRVhUUkFfQUdfQ09OVEVYVF9TRUNUSU9OX0xDUV9TTkRfRU4gKDB4MTw8OSkKKyNkZWZpbmUgX19UU1RPUk1fRkNPRV9FWFRSQV9BR19DT05URVhUX1NFQ1RJT05fTENRX1NORF9FTl9TSElGVCA5CisjZGVmaW5lIFRTVE9STV9GQ09FX0VYVFJBX0FHX0NPTlRFWFRfU0VDVElPTl9BVVgxX0ZMQUcgKDB4MTw8MTApCisjZGVmaW5lIFRTVE9STV9GQ09FX0VYVFJBX0FHX0NPTlRFWFRfU0VDVElPTl9BVVgxX0ZMQUdfU0hJRlQgMTAKKyNkZWZpbmUgVFNUT1JNX0ZDT0VfRVhUUkFfQUdfQ09OVEVYVF9TRUNUSU9OX0FVWDJfRkxBRyAoMHgxPDwxMSkKKyNkZWZpbmUgVFNUT1JNX0ZDT0VfRVhUUkFfQUdfQ09OVEVYVF9TRUNUSU9OX0FVWDJfRkxBR19TSElGVCAxMQorI2RlZmluZSBUU1RPUk1fRkNPRV9FWFRSQV9BR19DT05URVhUX1NFQ1RJT05fQVVYMV9DRl9FTiAoMHgxPDwxMikKKyNkZWZpbmUgVFNUT1JNX0ZDT0VfRVhUUkFfQUdfQ09OVEVYVF9TRUNUSU9OX0FVWDFfQ0ZfRU5fU0hJRlQgMTIKKyNkZWZpbmUgVFNUT1JNX0ZDT0VfRVhUUkFfQUdfQ09OVEVYVF9TRUNUSU9OX0FVWDJfQ0ZfRU4gKDB4MTw8MTMpCisjZGVmaW5lIFRTVE9STV9GQ09FX0VYVFJBX0FHX0NPTlRFWFRfU0VDVElPTl9BVVgyX0NGX0VOX1NISUZUIDEzCisjZGVmaW5lIFRTVE9STV9GQ09FX0VYVFJBX0FHX0NPTlRFWFRfU0VDVElPTl9BVVgxX0NGICgweDM8PDE0KQorI2RlZmluZSBUU1RPUk1fRkNPRV9FWFRSQV9BR19DT05URVhUX1NFQ1RJT05fQVVYMV9DRl9TSElGVCAxNAorI2RlZmluZSBUU1RPUk1fRkNPRV9FWFRSQV9BR19DT05URVhUX1NFQ1RJT05fQVVYMl9DRiAoMHgzPDwxNikKKyNkZWZpbmUgVFNUT1JNX0ZDT0VfRVhUUkFfQUdfQ09OVEVYVF9TRUNUSU9OX0FVWDJfQ0ZfU0hJRlQgMTYKKyNkZWZpbmUgVFNUT1JNX0ZDT0VfRVhUUkFfQUdfQ09OVEVYVF9TRUNUSU9OX1RYX0JMT0NLRUQgKDB4MTw8MTgpCisjZGVmaW5lIFRTVE9STV9GQ09FX0VYVFJBX0FHX0NPTlRFWFRfU0VDVElPTl9UWF9CTE9DS0VEX1NISUZUIDE4CisjZGVmaW5lIF9fVFNUT1JNX0ZDT0VfRVhUUkFfQUdfQ09OVEVYVF9TRUNUSU9OX0FVWDEwX0NGX0VOICgweDE8PDE5KQorI2RlZmluZSBfX1RTVE9STV9GQ09FX0VYVFJBX0FHX0NPTlRFWFRfU0VDVElPTl9BVVgxMF9DRl9FTl9TSElGVCAxOQorI2RlZmluZSBfX1RTVE9STV9GQ09FX0VYVFJBX0FHX0NPTlRFWFRfU0VDVElPTl9BVVgxMV9DRl9FTiAoMHgxPDwyMCkKKyNkZWZpbmUgX19UU1RPUk1fRkNPRV9FWFRSQV9BR19DT05URVhUX1NFQ1RJT05fQVVYMTFfQ0ZfRU5fU0hJRlQgMjAKKyNkZWZpbmUgX19UU1RPUk1fRkNPRV9FWFRSQV9BR19DT05URVhUX1NFQ1RJT05fQVVYMTJfQ0ZfRU4gKDB4MTw8MjEpCisjZGVmaW5lIF9fVFNUT1JNX0ZDT0VfRVhUUkFfQUdfQ09OVEVYVF9TRUNUSU9OX0FVWDEyX0NGX0VOX1NISUZUIDIxCisjZGVmaW5lIF9fVFNUT1JNX0ZDT0VfRVhUUkFfQUdfQ09OVEVYVF9TRUNUSU9OX1JFU0VSVkVEMSAoMHgzPDwyMikKKyNkZWZpbmUgX19UU1RPUk1fRkNPRV9FWFRSQV9BR19DT05URVhUX1NFQ1RJT05fUkVTRVJWRUQxX1NISUZUIDIyCisjZGVmaW5lIFRTVE9STV9GQ09FX0VYVFJBX0FHX0NPTlRFWFRfU0VDVElPTl9SRVRSQU5TTUlUX1BFTkRfU0VRICgweEY8PDI0KQorI2RlZmluZSBUU1RPUk1fRkNPRV9FWFRSQV9BR19DT05URVhUX1NFQ1RJT05fUkVUUkFOU01JVF9QRU5EX1NFUV9TSElGVCAyNAorI2RlZmluZSBUU1RPUk1fRkNPRV9FWFRSQV9BR19DT05URVhUX1NFQ1RJT05fUkVUUkFOU01JVF9ET05FX1NFUSAoMHhGPDwyOCkKKyNkZWZpbmUgVFNUT1JNX0ZDT0VfRVhUUkFfQUdfQ09OVEVYVF9TRUNUSU9OX1JFVFJBTlNNSVRfRE9ORV9TRVFfU0hJRlQgMjgKKwl1MzIgc25kX21heDsKKwl1MzIgX19sY3FfY29uczsKKwl1MzIgX19yZXNlcnZlZDI7Cit9OworCisvKgorICogVGhlIGZjb2UgYWdncmVnYXRpdmUgY29udGV4dCBvZiBUc3Rvcm0KKyAqLworc3RydWN0IHRzdG9ybV9mY29lX2FnX2NvbnRleHQgeworI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQorCXUxNiB1bHBfY3JlZGl0OworCXU4IGFnZ192YXJzMTsKKyNkZWZpbmUgVFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9FWElTVFNfSU5fUU0wICgweDE8PDApCisjZGVmaW5lIFRTVE9STV9GQ09FX0FHX0NPTlRFWFRfRVhJU1RTX0lOX1FNMF9TSElGVCAwCisjZGVmaW5lIFRTVE9STV9GQ09FX0FHX0NPTlRFWFRfRVhJU1RTX0lOX1FNMSAoMHgxPDwxKQorI2RlZmluZSBUU1RPUk1fRkNPRV9BR19DT05URVhUX0VYSVNUU19JTl9RTTFfU0hJRlQgMQorI2RlZmluZSBUU1RPUk1fRkNPRV9BR19DT05URVhUX0VYSVNUU19JTl9RTTIgKDB4MTw8MikKKyNkZWZpbmUgVFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9FWElTVFNfSU5fUU0yX1NISUZUIDIKKyNkZWZpbmUgVFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9FWElTVFNfSU5fUU0zICgweDE8PDMpCisjZGVmaW5lIFRTVE9STV9GQ09FX0FHX0NPTlRFWFRfRVhJU1RTX0lOX1FNM19TSElGVCAzCisjZGVmaW5lIF9fVFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9RVUVVRTBfRkxVU0hfQ0YgKDB4Mzw8NCkKKyNkZWZpbmUgX19UU1RPUk1fRkNPRV9BR19DT05URVhUX1FVRVVFMF9GTFVTSF9DRl9TSElGVCA0CisjZGVmaW5lIF9fVFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9BVVgzX0ZMQUcgKDB4MTw8NikKKyNkZWZpbmUgX19UU1RPUk1fRkNPRV9BR19DT05URVhUX0FVWDNfRkxBR19TSElGVCA2CisjZGVmaW5lIF9fVFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9BVVg0X0ZMQUcgKDB4MTw8NykKKyNkZWZpbmUgX19UU1RPUk1fRkNPRV9BR19DT05URVhUX0FVWDRfRkxBR19TSElGVCA3CisJdTggc3RhdGU7CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKKwl1OCBzdGF0ZTsKKwl1OCBhZ2dfdmFyczE7CisjZGVmaW5lIFRTVE9STV9GQ09FX0FHX0NPTlRFWFRfRVhJU1RTX0lOX1FNMCAoMHgxPDwwKQorI2RlZmluZSBUU1RPUk1fRkNPRV9BR19DT05URVhUX0VYSVNUU19JTl9RTTBfU0hJRlQgMAorI2RlZmluZSBUU1RPUk1fRkNPRV9BR19DT05URVhUX0VYSVNUU19JTl9RTTEgKDB4MTw8MSkKKyNkZWZpbmUgVFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9FWElTVFNfSU5fUU0xX1NISUZUIDEKKyNkZWZpbmUgVFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9FWElTVFNfSU5fUU0yICgweDE8PDIpCisjZGVmaW5lIFRTVE9STV9GQ09FX0FHX0NPTlRFWFRfRVhJU1RTX0lOX1FNMl9TSElGVCAyCisjZGVmaW5lIFRTVE9STV9GQ09FX0FHX0NPTlRFWFRfRVhJU1RTX0lOX1FNMyAoMHgxPDwzKQorI2RlZmluZSBUU1RPUk1fRkNPRV9BR19DT05URVhUX0VYSVNUU19JTl9RTTNfU0hJRlQgMworI2RlZmluZSBfX1RTVE9STV9GQ09FX0FHX0NPTlRFWFRfUVVFVUUwX0ZMVVNIX0NGICgweDM8PDQpCisjZGVmaW5lIF9fVFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9RVUVVRTBfRkxVU0hfQ0ZfU0hJRlQgNAorI2RlZmluZSBfX1RTVE9STV9GQ09FX0FHX0NPTlRFWFRfQVVYM19GTEFHICgweDE8PDYpCisjZGVmaW5lIF9fVFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9BVVgzX0ZMQUdfU0hJRlQgNgorI2RlZmluZSBfX1RTVE9STV9GQ09FX0FHX0NPTlRFWFRfQVVYNF9GTEFHICgweDE8PDcpCisjZGVmaW5lIF9fVFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9BVVg0X0ZMQUdfU0hJRlQgNworCXUxNiB1bHBfY3JlZGl0OworI2VuZGlmCisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisJdTE2IF9fYWdnX3ZhbDQ7CisJdTE2IGFnZ192YXJzMjsKKyNkZWZpbmUgX19UU1RPUk1fRkNPRV9BR19DT05URVhUX0FVWDVfRkxBRyAoMHgxPDwwKQorI2RlZmluZSBfX1RTVE9STV9GQ09FX0FHX0NPTlRFWFRfQVVYNV9GTEFHX1NISUZUIDAKKyNkZWZpbmUgX19UU1RPUk1fRkNPRV9BR19DT05URVhUX0FVWDZfRkxBRyAoMHgxPDwxKQorI2RlZmluZSBfX1RTVE9STV9GQ09FX0FHX0NPTlRFWFRfQVVYNl9GTEFHX1NISUZUIDEKKyNkZWZpbmUgX19UU1RPUk1fRkNPRV9BR19DT05URVhUX0FVWDRfQ0YgKDB4Mzw8MikKKyNkZWZpbmUgX19UU1RPUk1fRkNPRV9BR19DT05URVhUX0FVWDRfQ0ZfU0hJRlQgMgorI2RlZmluZSBfX1RTVE9STV9GQ09FX0FHX0NPTlRFWFRfQVVYNV9DRiAoMHgzPDw0KQorI2RlZmluZSBfX1RTVE9STV9GQ09FX0FHX0NPTlRFWFRfQVVYNV9DRl9TSElGVCA0CisjZGVmaW5lIF9fVFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9BVVg2X0NGICgweDM8PDYpCisjZGVmaW5lIF9fVFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9BVVg2X0NGX1NISUZUIDYKKyNkZWZpbmUgX19UU1RPUk1fRkNPRV9BR19DT05URVhUX0FVWDdfQ0YgKDB4Mzw8OCkKKyNkZWZpbmUgX19UU1RPUk1fRkNPRV9BR19DT05URVhUX0FVWDdfQ0ZfU0hJRlQgOAorI2RlZmluZSBfX1RTVE9STV9GQ09FX0FHX0NPTlRFWFRfQVVYN19GTEFHICgweDE8PDEwKQorI2RlZmluZSBfX1RTVE9STV9GQ09FX0FHX0NPTlRFWFRfQVVYN19GTEFHX1NISUZUIDEwCisjZGVmaW5lIF9fVFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9RVUVVRTBfRkxVU0hfQ0ZfRU4gKDB4MTw8MTEpCisjZGVmaW5lIF9fVFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9RVUVVRTBfRkxVU0hfQ0ZfRU5fU0hJRlQgMTEKKyNkZWZpbmUgVFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9BVVg0X0NGX0VOICgweDE8PDEyKQorI2RlZmluZSBUU1RPUk1fRkNPRV9BR19DT05URVhUX0FVWDRfQ0ZfRU5fU0hJRlQgMTIKKyNkZWZpbmUgVFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9BVVg1X0NGX0VOICgweDE8PDEzKQorI2RlZmluZSBUU1RPUk1fRkNPRV9BR19DT05URVhUX0FVWDVfQ0ZfRU5fU0hJRlQgMTMKKyNkZWZpbmUgVFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9BVVg2X0NGX0VOICgweDE8PDE0KQorI2RlZmluZSBUU1RPUk1fRkNPRV9BR19DT05URVhUX0FVWDZfQ0ZfRU5fU0hJRlQgMTQKKyNkZWZpbmUgVFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9BVVg3X0NGX0VOICgweDE8PDE1KQorI2RlZmluZSBUU1RPUk1fRkNPRV9BR19DT05URVhUX0FVWDdfQ0ZfRU5fU0hJRlQgMTUKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorCXUxNiBhZ2dfdmFyczI7CisjZGVmaW5lIF9fVFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9BVVg1X0ZMQUcgKDB4MTw8MCkKKyNkZWZpbmUgX19UU1RPUk1fRkNPRV9BR19DT05URVhUX0FVWDVfRkxBR19TSElGVCAwCisjZGVmaW5lIF9fVFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9BVVg2X0ZMQUcgKDB4MTw8MSkKKyNkZWZpbmUgX19UU1RPUk1fRkNPRV9BR19DT05URVhUX0FVWDZfRkxBR19TSElGVCAxCisjZGVmaW5lIF9fVFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9BVVg0X0NGICgweDM8PDIpCisjZGVmaW5lIF9fVFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9BVVg0X0NGX1NISUZUIDIKKyNkZWZpbmUgX19UU1RPUk1fRkNPRV9BR19DT05URVhUX0FVWDVfQ0YgKDB4Mzw8NCkKKyNkZWZpbmUgX19UU1RPUk1fRkNPRV9BR19DT05URVhUX0FVWDVfQ0ZfU0hJRlQgNAorI2RlZmluZSBfX1RTVE9STV9GQ09FX0FHX0NPTlRFWFRfQVVYNl9DRiAoMHgzPDw2KQorI2RlZmluZSBfX1RTVE9STV9GQ09FX0FHX0NPTlRFWFRfQVVYNl9DRl9TSElGVCA2CisjZGVmaW5lIF9fVFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9BVVg3X0NGICgweDM8PDgpCisjZGVmaW5lIF9fVFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9BVVg3X0NGX1NISUZUIDgKKyNkZWZpbmUgX19UU1RPUk1fRkNPRV9BR19DT05URVhUX0FVWDdfRkxBRyAoMHgxPDwxMCkKKyNkZWZpbmUgX19UU1RPUk1fRkNPRV9BR19DT05URVhUX0FVWDdfRkxBR19TSElGVCAxMAorI2RlZmluZSBfX1RTVE9STV9GQ09FX0FHX0NPTlRFWFRfUVVFVUUwX0ZMVVNIX0NGX0VOICgweDE8PDExKQorI2RlZmluZSBfX1RTVE9STV9GQ09FX0FHX0NPTlRFWFRfUVVFVUUwX0ZMVVNIX0NGX0VOX1NISUZUIDExCisjZGVmaW5lIFRTVE9STV9GQ09FX0FHX0NPTlRFWFRfQVVYNF9DRl9FTiAoMHgxPDwxMikKKyNkZWZpbmUgVFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9BVVg0X0NGX0VOX1NISUZUIDEyCisjZGVmaW5lIFRTVE9STV9GQ09FX0FHX0NPTlRFWFRfQVVYNV9DRl9FTiAoMHgxPDwxMykKKyNkZWZpbmUgVFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9BVVg1X0NGX0VOX1NISUZUIDEzCisjZGVmaW5lIFRTVE9STV9GQ09FX0FHX0NPTlRFWFRfQVVYNl9DRl9FTiAoMHgxPDwxNCkKKyNkZWZpbmUgVFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9BVVg2X0NGX0VOX1NISUZUIDE0CisjZGVmaW5lIFRTVE9STV9GQ09FX0FHX0NPTlRFWFRfQVVYN19DRl9FTiAoMHgxPDwxNSkKKyNkZWZpbmUgVFNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9BVVg3X0NGX0VOX1NISUZUIDE1CisJdTE2IF9fYWdnX3ZhbDQ7CisjZW5kaWYKKwlzdHJ1Y3QgdHN0b3JtX2Zjb2VfZXh0cmFfYWdfY29udGV4dF9zZWN0aW9uIF9fZXh0cmFfc2VjdGlvbjsKK307CisKKy8qCisgKiBUaGUgZmNvZSBhZ2dyZWdhdGl2ZSBjb250ZXh0IG9mIFVzdG9ybQorICovCitzdHJ1Y3QgdXN0b3JtX2Zjb2VfYWdfY29udGV4dCB7CisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisJdTggX19hdXhfY291bnRlcl9mbGFnczsKKwl1OCBhZ2dfdmFyczI7CisjZGVmaW5lIFVTVE9STV9GQ09FX0FHX0NPTlRFWFRfVFhfQ0YgKDB4Mzw8MCkKKyNkZWZpbmUgVVNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9UWF9DRl9TSElGVCAwCisjZGVmaW5lIF9fVVNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9USU1FUl9DRiAoMHgzPDwyKQorI2RlZmluZSBfX1VTVE9STV9GQ09FX0FHX0NPTlRFWFRfVElNRVJfQ0ZfU0hJRlQgMgorI2RlZmluZSBVU1RPUk1fRkNPRV9BR19DT05URVhUX0FHR19NSVNDNF9SVUxFICgweDc8PDQpCisjZGVmaW5lIFVTVE9STV9GQ09FX0FHX0NPTlRFWFRfQUdHX01JU0M0X1JVTEVfU0hJRlQgNAorI2RlZmluZSBfX1VTVE9STV9GQ09FX0FHX0NPTlRFWFRfQUdHX1ZBTDJfTUFTSyAoMHgxPDw3KQorI2RlZmluZSBfX1VTVE9STV9GQ09FX0FHX0NPTlRFWFRfQUdHX1ZBTDJfTUFTS19TSElGVCA3CisJdTggYWdnX3ZhcnMxOworI2RlZmluZSBfX1VTVE9STV9GQ09FX0FHX0NPTlRFWFRfRVhJU1RTX0lOX1FNMCAoMHgxPDwwKQorI2RlZmluZSBfX1VTVE9STV9GQ09FX0FHX0NPTlRFWFRfRVhJU1RTX0lOX1FNMF9TSElGVCAwCisjZGVmaW5lIFVTVE9STV9GQ09FX0FHX0NPTlRFWFRfRVhJU1RTX0lOX1FNMSAoMHgxPDwxKQorI2RlZmluZSBVU1RPUk1fRkNPRV9BR19DT05URVhUX0VYSVNUU19JTl9RTTFfU0hJRlQgMQorI2RlZmluZSBVU1RPUk1fRkNPRV9BR19DT05URVhUX0VYSVNUU19JTl9RTTIgKDB4MTw8MikKKyNkZWZpbmUgVVNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9FWElTVFNfSU5fUU0yX1NISUZUIDIKKyNkZWZpbmUgVVNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9FWElTVFNfSU5fUU0zICgweDE8PDMpCisjZGVmaW5lIFVTVE9STV9GQ09FX0FHX0NPTlRFWFRfRVhJU1RTX0lOX1FNM19TSElGVCAzCisjZGVmaW5lIFVTVE9STV9GQ09FX0FHX0NPTlRFWFRfSU5WX0NGICgweDM8PDQpCisjZGVmaW5lIFVTVE9STV9GQ09FX0FHX0NPTlRFWFRfSU5WX0NGX1NISUZUIDQKKyNkZWZpbmUgVVNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9DT01QTEVUSU9OX0NGICgweDM8PDYpCisjZGVmaW5lIFVTVE9STV9GQ09FX0FHX0NPTlRFWFRfQ09NUExFVElPTl9DRl9TSElGVCA2CisJdTggc3RhdGU7CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKKwl1OCBzdGF0ZTsKKwl1OCBhZ2dfdmFyczE7CisjZGVmaW5lIF9fVVNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9FWElTVFNfSU5fUU0wICgweDE8PDApCisjZGVmaW5lIF9fVVNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9FWElTVFNfSU5fUU0wX1NISUZUIDAKKyNkZWZpbmUgVVNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9FWElTVFNfSU5fUU0xICgweDE8PDEpCisjZGVmaW5lIFVTVE9STV9GQ09FX0FHX0NPTlRFWFRfRVhJU1RTX0lOX1FNMV9TSElGVCAxCisjZGVmaW5lIFVTVE9STV9GQ09FX0FHX0NPTlRFWFRfRVhJU1RTX0lOX1FNMiAoMHgxPDwyKQorI2RlZmluZSBVU1RPUk1fRkNPRV9BR19DT05URVhUX0VYSVNUU19JTl9RTTJfU0hJRlQgMgorI2RlZmluZSBVU1RPUk1fRkNPRV9BR19DT05URVhUX0VYSVNUU19JTl9RTTMgKDB4MTw8MykKKyNkZWZpbmUgVVNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9FWElTVFNfSU5fUU0zX1NISUZUIDMKKyNkZWZpbmUgVVNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9JTlZfQ0YgKDB4Mzw8NCkKKyNkZWZpbmUgVVNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9JTlZfQ0ZfU0hJRlQgNAorI2RlZmluZSBVU1RPUk1fRkNPRV9BR19DT05URVhUX0NPTVBMRVRJT05fQ0YgKDB4Mzw8NikKKyNkZWZpbmUgVVNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9DT01QTEVUSU9OX0NGX1NISUZUIDYKKwl1OCBhZ2dfdmFyczI7CisjZGVmaW5lIFVTVE9STV9GQ09FX0FHX0NPTlRFWFRfVFhfQ0YgKDB4Mzw8MCkKKyNkZWZpbmUgVVNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9UWF9DRl9TSElGVCAwCisjZGVmaW5lIF9fVVNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9USU1FUl9DRiAoMHgzPDwyKQorI2RlZmluZSBfX1VTVE9STV9GQ09FX0FHX0NPTlRFWFRfVElNRVJfQ0ZfU0hJRlQgMgorI2RlZmluZSBVU1RPUk1fRkNPRV9BR19DT05URVhUX0FHR19NSVNDNF9SVUxFICgweDc8PDQpCisjZGVmaW5lIFVTVE9STV9GQ09FX0FHX0NPTlRFWFRfQUdHX01JU0M0X1JVTEVfU0hJRlQgNAorI2RlZmluZSBfX1VTVE9STV9GQ09FX0FHX0NPTlRFWFRfQUdHX1ZBTDJfTUFTSyAoMHgxPDw3KQorI2RlZmluZSBfX1VTVE9STV9GQ09FX0FHX0NPTlRFWFRfQUdHX1ZBTDJfTUFTS19TSElGVCA3CisJdTggX19hdXhfY291bnRlcl9mbGFnczsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQorCXU4IGNkdV91c2FnZTsKKwl1OCBhZ2dfbWlzYzI7CisJdTE2IHBiZl90eF9zZXFfYWNrOworI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCisJdTE2IHBiZl90eF9zZXFfYWNrOworCXU4IGFnZ19taXNjMjsKKwl1OCBjZHVfdXNhZ2U7CisjZW5kaWYKKwl1MzIgYWdnX21pc2M0OworI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQorCXU4IGFnZ192YWwzX3RoOworCXU4IGFnZ192YWwzOworCXUxNiBhZ2dfbWlzYzM7CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKKwl1MTYgYWdnX21pc2MzOworCXU4IGFnZ192YWwzOworCXU4IGFnZ192YWwzX3RoOworI2VuZGlmCisJdTMyIGV4cGlyZWRfdGFza19pZDsKKwl1MzIgYWdnX21pc2M0X3RoOworI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQorCXUxNiBjcV9wcm9kOworCXUxNiBjcV9jb25zOworI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCisJdTE2IGNxX2NvbnM7CisJdTE2IGNxX3Byb2Q7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKKwl1MTYgX19yZXNlcnZlZDI7CisJdTggZGVjaXNpb25fcnVsZXM7CisjZGVmaW5lIFVTVE9STV9GQ09FX0FHX0NPTlRFWFRfQ1FfREVDX1JVTEUgKDB4Nzw8MCkKKyNkZWZpbmUgVVNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9DUV9ERUNfUlVMRV9TSElGVCAwCisjZGVmaW5lIF9fVVNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9BR0dfVkFMM19SVUxFICgweDc8PDMpCisjZGVmaW5lIF9fVVNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9BR0dfVkFMM19SVUxFX1NISUZUIDMKKyNkZWZpbmUgVVNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9DUV9BUk1fTl9GTEFHICgweDE8PDYpCisjZGVmaW5lIFVTVE9STV9GQ09FX0FHX0NPTlRFWFRfQ1FfQVJNX05fRkxBR19TSElGVCA2CisjZGVmaW5lIF9fVVNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9SRVNFUlZFRDEgKDB4MTw8NykKKyNkZWZpbmUgX19VU1RPUk1fRkNPRV9BR19DT05URVhUX1JFU0VSVkVEMV9TSElGVCA3CisJdTggZGVjaXNpb25fcnVsZV9lbmFibGVfYml0czsKKyNkZWZpbmUgX19VU1RPUk1fRkNPRV9BR19DT05URVhUX1JFU0VSVkVEX0lOVl9DRl9FTiAoMHgxPDwwKQorI2RlZmluZSBfX1VTVE9STV9GQ09FX0FHX0NPTlRFWFRfUkVTRVJWRURfSU5WX0NGX0VOX1NISUZUIDAKKyNkZWZpbmUgVVNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9DT01QTEVUSU9OX0NGX0VOICgweDE8PDEpCisjZGVmaW5lIFVTVE9STV9GQ09FX0FHX0NPTlRFWFRfQ09NUExFVElPTl9DRl9FTl9TSElGVCAxCisjZGVmaW5lIFVTVE9STV9GQ09FX0FHX0NPTlRFWFRfVFhfQ0ZfRU4gKDB4MTw8MikKKyNkZWZpbmUgVVNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9UWF9DRl9FTl9TSElGVCAyCisjZGVmaW5lIF9fVVNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9USU1FUl9DRl9FTiAoMHgxPDwzKQorI2RlZmluZSBfX1VTVE9STV9GQ09FX0FHX0NPTlRFWFRfVElNRVJfQ0ZfRU5fU0hJRlQgMworI2RlZmluZSBfX1VTVE9STV9GQ09FX0FHX0NPTlRFWFRfQVVYMV9DRl9FTiAoMHgxPDw0KQorI2RlZmluZSBfX1VTVE9STV9GQ09FX0FHX0NPTlRFWFRfQVVYMV9DRl9FTl9TSElGVCA0CisjZGVmaW5lIF9fVVNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9RVUVVRTBfQ0ZfRU4gKDB4MTw8NSkKKyNkZWZpbmUgX19VU1RPUk1fRkNPRV9BR19DT05URVhUX1FVRVVFMF9DRl9FTl9TSElGVCA1CisjZGVmaW5lIF9fVVNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9BVVgzX0NGX0VOICgweDE8PDYpCisjZGVmaW5lIF9fVVNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9BVVgzX0NGX0VOX1NISUZUIDYKKyNkZWZpbmUgX19VU1RPUk1fRkNPRV9BR19DT05URVhUX0RRX0NGX0VOICgweDE8PDcpCisjZGVmaW5lIF9fVVNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9EUV9DRl9FTl9TSElGVCA3CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKKwl1OCBkZWNpc2lvbl9ydWxlX2VuYWJsZV9iaXRzOworI2RlZmluZSBfX1VTVE9STV9GQ09FX0FHX0NPTlRFWFRfUkVTRVJWRURfSU5WX0NGX0VOICgweDE8PDApCisjZGVmaW5lIF9fVVNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9SRVNFUlZFRF9JTlZfQ0ZfRU5fU0hJRlQgMAorI2RlZmluZSBVU1RPUk1fRkNPRV9BR19DT05URVhUX0NPTVBMRVRJT05fQ0ZfRU4gKDB4MTw8MSkKKyNkZWZpbmUgVVNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9DT01QTEVUSU9OX0NGX0VOX1NISUZUIDEKKyNkZWZpbmUgVVNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9UWF9DRl9FTiAoMHgxPDwyKQorI2RlZmluZSBVU1RPUk1fRkNPRV9BR19DT05URVhUX1RYX0NGX0VOX1NISUZUIDIKKyNkZWZpbmUgX19VU1RPUk1fRkNPRV9BR19DT05URVhUX1RJTUVSX0NGX0VOICgweDE8PDMpCisjZGVmaW5lIF9fVVNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9USU1FUl9DRl9FTl9TSElGVCAzCisjZGVmaW5lIF9fVVNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9BVVgxX0NGX0VOICgweDE8PDQpCisjZGVmaW5lIF9fVVNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9BVVgxX0NGX0VOX1NISUZUIDQKKyNkZWZpbmUgX19VU1RPUk1fRkNPRV9BR19DT05URVhUX1FVRVVFMF9DRl9FTiAoMHgxPDw1KQorI2RlZmluZSBfX1VTVE9STV9GQ09FX0FHX0NPTlRFWFRfUVVFVUUwX0NGX0VOX1NISUZUIDUKKyNkZWZpbmUgX19VU1RPUk1fRkNPRV9BR19DT05URVhUX0FVWDNfQ0ZfRU4gKDB4MTw8NikKKyNkZWZpbmUgX19VU1RPUk1fRkNPRV9BR19DT05URVhUX0FVWDNfQ0ZfRU5fU0hJRlQgNgorI2RlZmluZSBfX1VTVE9STV9GQ09FX0FHX0NPTlRFWFRfRFFfQ0ZfRU4gKDB4MTw8NykKKyNkZWZpbmUgX19VU1RPUk1fRkNPRV9BR19DT05URVhUX0RRX0NGX0VOX1NISUZUIDcKKwl1OCBkZWNpc2lvbl9ydWxlczsKKyNkZWZpbmUgVVNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9DUV9ERUNfUlVMRSAoMHg3PDwwKQorI2RlZmluZSBVU1RPUk1fRkNPRV9BR19DT05URVhUX0NRX0RFQ19SVUxFX1NISUZUIDAKKyNkZWZpbmUgX19VU1RPUk1fRkNPRV9BR19DT05URVhUX0FHR19WQUwzX1JVTEUgKDB4Nzw8MykKKyNkZWZpbmUgX19VU1RPUk1fRkNPRV9BR19DT05URVhUX0FHR19WQUwzX1JVTEVfU0hJRlQgMworI2RlZmluZSBVU1RPUk1fRkNPRV9BR19DT05URVhUX0NRX0FSTV9OX0ZMQUcgKDB4MTw8NikKKyNkZWZpbmUgVVNUT1JNX0ZDT0VfQUdfQ09OVEVYVF9DUV9BUk1fTl9GTEFHX1NISUZUIDYKKyNkZWZpbmUgX19VU1RPUk1fRkNPRV9BR19DT05URVhUX1JFU0VSVkVEMSAoMHgxPDw3KQorI2RlZmluZSBfX1VTVE9STV9GQ09FX0FHX0NPTlRFWFRfUkVTRVJWRUQxX1NISUZUIDcKKwl1MTYgX19yZXNlcnZlZDI7CisjZW5kaWYKK307CisKKy8qCisgKiBFdGhlcm5ldCBjb250ZXh0IHNlY3Rpb24KKyAqLworc3RydWN0IHhzdG9ybV9mY29lX2V0aF9jb250ZXh0X3NlY3Rpb24geworI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQorCXU4IHJlbW90ZV9hZGRyXzQ7CisJdTggcmVtb3RlX2FkZHJfNTsKKwl1OCBsb2NhbF9hZGRyXzA7CisJdTggbG9jYWxfYWRkcl8xOworI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCisJdTggbG9jYWxfYWRkcl8xOworCXU4IGxvY2FsX2FkZHJfMDsKKwl1OCByZW1vdGVfYWRkcl81OworCXU4IHJlbW90ZV9hZGRyXzQ7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKKwl1OCByZW1vdGVfYWRkcl8wOworCXU4IHJlbW90ZV9hZGRyXzE7CisJdTggcmVtb3RlX2FkZHJfMjsKKwl1OCByZW1vdGVfYWRkcl8zOworI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCisJdTggcmVtb3RlX2FkZHJfMzsKKwl1OCByZW1vdGVfYWRkcl8yOworCXU4IHJlbW90ZV9hZGRyXzE7CisJdTggcmVtb3RlX2FkZHJfMDsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQorCXUxNiByZXNlcnZlZF92bGFuX3R5cGU7CisJdTE2IHBhcmFtczsKKyNkZWZpbmUgWFNUT1JNX0ZDT0VfRVRIX0NPTlRFWFRfU0VDVElPTl9WTEFOX0lEICgweEZGRjw8MCkKKyNkZWZpbmUgWFNUT1JNX0ZDT0VfRVRIX0NPTlRFWFRfU0VDVElPTl9WTEFOX0lEX1NISUZUIDAKKyNkZWZpbmUgWFNUT1JNX0ZDT0VfRVRIX0NPTlRFWFRfU0VDVElPTl9DRkkgKDB4MTw8MTIpCisjZGVmaW5lIFhTVE9STV9GQ09FX0VUSF9DT05URVhUX1NFQ1RJT05fQ0ZJX1NISUZUIDEyCisjZGVmaW5lIFhTVE9STV9GQ09FX0VUSF9DT05URVhUX1NFQ1RJT05fUFJJT1JJVFkgKDB4Nzw8MTMpCisjZGVmaW5lIFhTVE9STV9GQ09FX0VUSF9DT05URVhUX1NFQ1RJT05fUFJJT1JJVFlfU0hJRlQgMTMKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorCXUxNiBwYXJhbXM7CisjZGVmaW5lIFhTVE9STV9GQ09FX0VUSF9DT05URVhUX1NFQ1RJT05fVkxBTl9JRCAoMHhGRkY8PDApCisjZGVmaW5lIFhTVE9STV9GQ09FX0VUSF9DT05URVhUX1NFQ1RJT05fVkxBTl9JRF9TSElGVCAwCisjZGVmaW5lIFhTVE9STV9GQ09FX0VUSF9DT05URVhUX1NFQ1RJT05fQ0ZJICgweDE8PDEyKQorI2RlZmluZSBYU1RPUk1fRkNPRV9FVEhfQ09OVEVYVF9TRUNUSU9OX0NGSV9TSElGVCAxMgorI2RlZmluZSBYU1RPUk1fRkNPRV9FVEhfQ09OVEVYVF9TRUNUSU9OX1BSSU9SSVRZICgweDc8PDEzKQorI2RlZmluZSBYU1RPUk1fRkNPRV9FVEhfQ09OVEVYVF9TRUNUSU9OX1BSSU9SSVRZX1NISUZUIDEzCisJdTE2IHJlc2VydmVkX3ZsYW5fdHlwZTsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQorCXU4IGxvY2FsX2FkZHJfMjsKKwl1OCBsb2NhbF9hZGRyXzM7CisJdTggbG9jYWxfYWRkcl80OworCXU4IGxvY2FsX2FkZHJfNTsKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorCXU4IGxvY2FsX2FkZHJfNTsKKwl1OCBsb2NhbF9hZGRyXzQ7CisJdTggbG9jYWxfYWRkcl8zOworCXU4IGxvY2FsX2FkZHJfMjsKKyNlbmRpZgorfTsKKworLyoKKyAqIEZsYWdzIHVzZWQgaW4gRkNvRSBjb250ZXh0IHNlY3Rpb24gLSAxIGJ5dGUKKyAqLworc3RydWN0IHhzdG9ybV9mY29lX2NvbnRleHRfZmxhZ3MgeworCXU4IGZsYWdzOworI2RlZmluZSBYU1RPUk1fRkNPRV9DT05URVhUX0ZMQUdTX0JfUFJPQ19RICgweDM8PDApCisjZGVmaW5lIFhTVE9STV9GQ09FX0NPTlRFWFRfRkxBR1NfQl9QUk9DX1FfU0hJRlQgMAorI2RlZmluZSBYU1RPUk1fRkNPRV9DT05URVhUX0ZMQUdTX0JfTUlEX1NFUSAoMHgxPDwyKQorI2RlZmluZSBYU1RPUk1fRkNPRV9DT05URVhUX0ZMQUdTX0JfTUlEX1NFUV9TSElGVCAyCisjZGVmaW5lIFhTVE9STV9GQ09FX0NPTlRFWFRfRkxBR1NfQl9FWENIQU5HRV9DTEVBTlVQX0RFRkZFUkVEICgweDE8PDMpCisjZGVmaW5lIFhTVE9STV9GQ09FX0NPTlRFWFRfRkxBR1NfQl9FWENIQU5HRV9DTEVBTlVQX0RFRkZFUkVEX1NISUZUIDMKKyNkZWZpbmUgWFNUT1JNX0ZDT0VfQ09OVEVYVF9GTEFHU19CX1JFQ19TVVBQT1JUICgweDE8PDQpCisjZGVmaW5lIFhTVE9STV9GQ09FX0NPTlRFWFRfRkxBR1NfQl9SRUNfU1VQUE9SVF9TSElGVCA0CisjZGVmaW5lIFhTVE9STV9GQ09FX0NPTlRFWFRfRkxBR1NfQl9TUV9UT0dHTEUgKDB4MTw8NSkKKyNkZWZpbmUgWFNUT1JNX0ZDT0VfQ09OVEVYVF9GTEFHU19CX1NRX1RPR0dMRV9TSElGVCA1CisjZGVmaW5lIFhTVE9STV9GQ09FX0NPTlRFWFRfRkxBR1NfQl9YRlJRX1RPR0dMRSAoMHgxPDw2KQorI2RlZmluZSBYU1RPUk1fRkNPRV9DT05URVhUX0ZMQUdTX0JfWEZSUV9UT0dHTEVfU0hJRlQgNgorI2RlZmluZSBYU1RPUk1fRkNPRV9DT05URVhUX0ZMQUdTX0JfQUJUU19ERUZGRVJFRCAoMHgxPDw3KQorI2RlZmluZSBYU1RPUk1fRkNPRV9DT05URVhUX0ZMQUdTX0JfQUJUU19ERUZGRVJFRF9TSElGVCA3Cit9OworCisvKgorICogRkNvRSBTUSBlbGVtZW50CisgKi8KK3N0cnVjdCBmY29lX3NxZSB7CisJdTE2IHdxZTsKKyNkZWZpbmUgRkNPRV9TUUVfVEFTS19JRCAoMHg3RkZGPDwwKQorI2RlZmluZSBGQ09FX1NRRV9UQVNLX0lEX1NISUZUIDAKKyNkZWZpbmUgRkNPRV9TUUVfVE9HR0xFX0JJVCAoMHgxPDwxNSkKKyNkZWZpbmUgRkNPRV9TUUVfVE9HR0xFX0JJVF9TSElGVCAxNQorfTsKKworLyoKKyAqIEZDb0UgWEZSUSBlbGVtZW50CisgKi8KK3N0cnVjdCBmY29lX3hmcnFlIHsKKwl1MTYgd3FlOworI2RlZmluZSBGQ09FX1hGUlFFX1RBU0tfSUQgKDB4N0ZGRjw8MCkKKyNkZWZpbmUgRkNPRV9YRlJRRV9UQVNLX0lEX1NISUZUIDAKKyNkZWZpbmUgRkNPRV9YRlJRRV9UT0dHTEVfQklUICgweDE8PDE1KQorI2RlZmluZSBGQ09FX1hGUlFFX1RPR0dMRV9CSVRfU0hJRlQgMTUKK307CisKKy8qCisgKiBGQ29FIFNRXFhGUlEgZWxlbWVudAorICovCitzdHJ1Y3QgZmNvZV9jYWNoZWRfd3FlIHsKKyNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKKwlzdHJ1Y3QgZmNvZV94ZnJxZSB4ZnJxZTsKKwlzdHJ1Y3QgZmNvZV9zcWUgc3FlOworI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCisJc3RydWN0IGZjb2Vfc3FlIHNxZTsKKwlzdHJ1Y3QgZmNvZV94ZnJxZSB4ZnJxZTsKKyNlbmRpZgorfTsKKworc3RydWN0IGZjb2VfdGFza19jdHhfZW50cnlfdHhfb25seSB7CisJdW5pb24gZmNvZV9zZ2xfY3R4IHNnbF9jdHg7Cit9OworCitzdHJ1Y3QgeHN0b3JtX2Zjb2VfdGFza19jdHhfZW50cnlfcmQgeworCXN0cnVjdCBmY29lX3Rhc2tfY3R4X2VudHJ5X3R4X29ubHkgdHhfd3I7CisJc3RydWN0IGZjb2VfdGFza19jdHhfZW50cnlfdHh3cl9yeHJkIHR4X3dyX3J4X3JkOworCXN0cnVjdCBmY29lX3Rhc2tfY3R4X2VudHJ5X3R4X3J4X2NtbiBjbW47CisJc3RydWN0IGZjb2VfdGFza19jdHhfZW50cnlfcnh3cl90eHJkIHJ4X3dyX3R4X3JkOworfTsKKworLyoKKyAqIENhY2hlZCBTR0VzCisgKi8KK3N0cnVjdCBjb21tb25fZmNvZV9zZ2wgeworCXN0cnVjdCBmY29lX2JkX2N0eCBzZ2VbMl07Cit9OworCisvKgorICogRkNQX0RBVEEgcGFyYW1ldGVycyByZXF1aXJlZCBmb3IgdHJhbnNtaXNzaW9uCisgKi8KK3N0cnVjdCB4c3Rvcm1fZmNvZV9mY3BfZGF0YSB7CisJdTMyIGlvX3JlbTsKKyNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKKwl1MTYgY2FjaGVkX3NnZV9vZmY7CisJdTggY2FjaGVkX251bV9zZ2VzOworCXU4IGNhY2hlZF9zZ2VfaWR4OworI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCisJdTggY2FjaGVkX3NnZV9pZHg7CisJdTggY2FjaGVkX251bV9zZ2VzOworCXUxNiBjYWNoZWRfc2dlX29mZjsKKyNlbmRpZgorCXN0cnVjdCBjb21tb25fZmNvZV9zZ2wgY2FjaGVkX3NnbDsKK307CisKKy8qCisgKiBGQ29FIGNvbnRleHQgc2VjdGlvbgorICovCitzdHJ1Y3QgeHN0b3JtX2Zjb2VfY29udGV4dF9zZWN0aW9uIHsKKyNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKKwl1OCB2bGFuX2ZsYWc7CisJdTggc19pZFszXTsKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorCXU4IHNfaWRbM107CisJdTggdmxhbl9mbGFnOworI2VuZGlmCisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisJdTggZnVuY19pZDsKKwl1OCBkX2lkWzNdOworI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCisJdTggZF9pZFszXTsKKwl1OCBmdW5jX2lkOworI2VuZGlmCisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisJdTE2IHNxX3hmcnFfbGNxX2NvbmZxX3NpemU7CisJdTE2IHR4X21heF9mY19wYXlfbGVuOworI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCisJdTE2IHR4X21heF9mY19wYXlfbGVuOworCXUxNiBzcV94ZnJxX2xjcV9jb25mcV9zaXplOworI2VuZGlmCisJdTMyIGxjcV9wcm9kOworI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQorCXU4IHBvcnRfaWQ7CisJdTggdHhfbWF4X2NvbmNfc2Vxc19jMzsKKwl1OCBzZXFfaWQ7CisJc3RydWN0IHhzdG9ybV9mY29lX2NvbnRleHRfZmxhZ3MgdHhfZmxhZ3M7CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKKwlzdHJ1Y3QgeHN0b3JtX2Zjb2VfY29udGV4dF9mbGFncyB0eF9mbGFnczsKKwl1OCBzZXFfaWQ7CisJdTggdHhfbWF4X2NvbmNfc2Vxc19jMzsKKwl1OCBwb3J0X2lkOworI2VuZGlmCisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisJdTE2IHZlcmlmeV90eF9zZXE7CisJdTggZnVuY19tb2RlOworCXU4IHZuaWNfaWQ7CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKKwl1OCB2bmljX2lkOworCXU4IGZ1bmNfbW9kZTsKKwl1MTYgdmVyaWZ5X3R4X3NlcTsKKyNlbmRpZgorCXN0cnVjdCByZWdwYWlyIGNvbmZxX2N1cnJfcGFnZV9hZGRyOworCXN0cnVjdCBmY29lX2NhY2hlZF93cWUgY2FjaGVkX3dxZVs4XTsKKwlzdHJ1Y3QgcmVncGFpciBsY3FfYmFzZV9hZGRyOworCXN0cnVjdCB4c3Rvcm1fZmNvZV90YXNrX2N0eF9lbnRyeV9yZCB0Y2U7CisJc3RydWN0IHhzdG9ybV9mY29lX2ZjcF9kYXRhIGZjcF9kYXRhOworI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQorCXUxNiBmY29lX3R4X3N0YXRfcGFyYW1zX3JhbV9hZGRyOworCXUxNiBjbW5nX3BvcnRfcmFtX2FkZHI7CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKKwl1MTYgY21uZ19wb3J0X3JhbV9hZGRyOworCXUxNiBmY29lX3R4X3N0YXRfcGFyYW1zX3JhbV9hZGRyOworI2VuZGlmCisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisJdTggZmNwX2NtZF9wYl9jbWRfc2l6ZTsKKwl1OCBldGhfaGRyX3NpemU7CisJdTE2IHBiZl9hZGRyOworI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCisJdTE2IHBiZl9hZGRyOworCXU4IGV0aF9oZHJfc2l6ZTsKKwl1OCBmY3BfY21kX3BiX2NtZF9zaXplOworI2VuZGlmCisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisJdTggcmVzZXJ2ZWQyWzJdOworCXU4IGNvczsKKwl1OCBkY2JfdmVyc2lvbjsKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorCXU4IGRjYl92ZXJzaW9uOworCXU4IGNvczsKKwl1OCByZXNlcnZlZDJbMl07CisjZW5kaWYKKwl1MzIgcmVzZXJ2ZWQzOworCXN0cnVjdCByZWdwYWlyIHJlc2VydmVkNFsyXTsKK307CisKKy8qCisgKiBYc3Rvcm0gRkNvRSBTdG9ybSBDb250ZXh0CisgKi8KK3N0cnVjdCB4c3Rvcm1fZmNvZV9zdF9jb250ZXh0IHsKKwlzdHJ1Y3QgeHN0b3JtX2Zjb2VfZXRoX2NvbnRleHRfc2VjdGlvbiBldGg7CisJc3RydWN0IHhzdG9ybV9mY29lX2NvbnRleHRfc2VjdGlvbiBmY29lOworfTsKKworLyoKKyAqIEZjb2UgY29ubmVjdGlvbiBjb250ZXh0CisgKi8KK3N0cnVjdCBmY29lX2NvbnRleHQgeworCXN0cnVjdCB1c3Rvcm1fZmNvZV9zdF9jb250ZXh0IHVzdG9ybV9zdF9jb250ZXh0OworCXN0cnVjdCB0c3Rvcm1fZmNvZV9zdF9jb250ZXh0IHRzdG9ybV9zdF9jb250ZXh0OworCXN0cnVjdCB4c3Rvcm1fZmNvZV9hZ19jb250ZXh0IHhzdG9ybV9hZ19jb250ZXh0OworCXN0cnVjdCB0c3Rvcm1fZmNvZV9hZ19jb250ZXh0IHRzdG9ybV9hZ19jb250ZXh0OworCXN0cnVjdCB1c3Rvcm1fZmNvZV9hZ19jb250ZXh0IHVzdG9ybV9hZ19jb250ZXh0OworCXN0cnVjdCB0aW1lcnNfYmxvY2tfY29udGV4dCB0aW1lcnNfY29udGV4dDsKKwlzdHJ1Y3QgeHN0b3JtX2Zjb2Vfc3RfY29udGV4dCB4c3Rvcm1fc3RfY29udGV4dDsKK307CisKKy8qCiAgKiBpU0NTSSBjb250ZXh0IHJlZ2lvbiwgdXNlZCBvbmx5IGluIGlTQ1NJCiAgKi8KIHN0cnVjdCB1c3Rvcm1faXNjc2lfcnFfZGIgewpAQCAtMjI2OCw2ICszNzkyLDU3NyBAQAogfTsKIAogLyoKKyAqIEZDb0UgS0NRIENRRSBwYXJhbWV0ZXJzCisgKi8KK3VuaW9uIGZjb2Vfa2NxZV9wYXJhbXMgeworCXUzMiByZXNlcnZlZDBbNF07Cit9OworCisvKgorICogRkNvRSBLQ1EgQ1FFCisgKi8KK3N0cnVjdCBmY29lX2tjcWUgeworCXUzMiBmY29lX2Nvbm5faWQ7CisJdTMyIGNvbXBsZXRpb25fc3RhdHVzOworCXUzMiBmY29lX2Nvbm5fY29udGV4dF9pZDsKKwl1bmlvbiBmY29lX2tjcWVfcGFyYW1zIHBhcmFtczsKKyNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKKwl1OCBmbGFnczsKKyNkZWZpbmUgRkNPRV9LQ1FFX1JFU0VSVkVEMCAoMHg3PDwwKQorI2RlZmluZSBGQ09FX0tDUUVfUkVTRVJWRUQwX1NISUZUIDAKKyNkZWZpbmUgRkNPRV9LQ1FFX1JBTVJPRF9DT01QTEVUSU9OICgweDE8PDMpCisjZGVmaW5lIEZDT0VfS0NRRV9SQU1ST0RfQ09NUExFVElPTl9TSElGVCAzCisjZGVmaW5lIEZDT0VfS0NRRV9MQVlFUl9DT0RFICgweDc8PDQpCisjZGVmaW5lIEZDT0VfS0NRRV9MQVlFUl9DT0RFX1NISUZUIDQKKyNkZWZpbmUgRkNPRV9LQ1FFX0xJTktFRF9XSVRIX05FWFQgKDB4MTw8NykKKyNkZWZpbmUgRkNPRV9LQ1FFX0xJTktFRF9XSVRIX05FWFRfU0hJRlQgNworCXU4IG9wX2NvZGU7CisJdTE2IHFlX3NlbGZfc2VxOworI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCisJdTE2IHFlX3NlbGZfc2VxOworCXU4IG9wX2NvZGU7CisJdTggZmxhZ3M7CisjZGVmaW5lIEZDT0VfS0NRRV9SRVNFUlZFRDAgKDB4Nzw8MCkKKyNkZWZpbmUgRkNPRV9LQ1FFX1JFU0VSVkVEMF9TSElGVCAwCisjZGVmaW5lIEZDT0VfS0NRRV9SQU1ST0RfQ09NUExFVElPTiAoMHgxPDwzKQorI2RlZmluZSBGQ09FX0tDUUVfUkFNUk9EX0NPTVBMRVRJT05fU0hJRlQgMworI2RlZmluZSBGQ09FX0tDUUVfTEFZRVJfQ09ERSAoMHg3PDw0KQorI2RlZmluZSBGQ09FX0tDUUVfTEFZRVJfQ09ERV9TSElGVCA0CisjZGVmaW5lIEZDT0VfS0NRRV9MSU5LRURfV0lUSF9ORVhUICgweDE8PDcpCisjZGVmaW5lIEZDT0VfS0NRRV9MSU5LRURfV0lUSF9ORVhUX1NISUZUIDcKKyNlbmRpZgorfTsKKworLyoKKyAqIEZDb0UgS1dRRSBoZWFkZXIKKyAqLworc3RydWN0IGZjb2Vfa3dxZV9oZWFkZXIgeworI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQorCXU4IGZsYWdzOworI2RlZmluZSBGQ09FX0tXUUVfSEVBREVSX1JFU0VSVkVEMCAoMHhGPDwwKQorI2RlZmluZSBGQ09FX0tXUUVfSEVBREVSX1JFU0VSVkVEMF9TSElGVCAwCisjZGVmaW5lIEZDT0VfS1dRRV9IRUFERVJfTEFZRVJfQ09ERSAoMHg3PDw0KQorI2RlZmluZSBGQ09FX0tXUUVfSEVBREVSX0xBWUVSX0NPREVfU0hJRlQgNAorI2RlZmluZSBGQ09FX0tXUUVfSEVBREVSX1JFU0VSVkVEMSAoMHgxPDw3KQorI2RlZmluZSBGQ09FX0tXUUVfSEVBREVSX1JFU0VSVkVEMV9TSElGVCA3CisJdTggb3BfY29kZTsKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorCXU4IG9wX2NvZGU7CisJdTggZmxhZ3M7CisjZGVmaW5lIEZDT0VfS1dRRV9IRUFERVJfUkVTRVJWRUQwICgweEY8PDApCisjZGVmaW5lIEZDT0VfS1dRRV9IRUFERVJfUkVTRVJWRUQwX1NISUZUIDAKKyNkZWZpbmUgRkNPRV9LV1FFX0hFQURFUl9MQVlFUl9DT0RFICgweDc8PDQpCisjZGVmaW5lIEZDT0VfS1dRRV9IRUFERVJfTEFZRVJfQ09ERV9TSElGVCA0CisjZGVmaW5lIEZDT0VfS1dRRV9IRUFERVJfUkVTRVJWRUQxICgweDE8PDcpCisjZGVmaW5lIEZDT0VfS1dRRV9IRUFERVJfUkVTRVJWRUQxX1NISUZUIDcKKyNlbmRpZgorfTsKKworLyoKKyAqIEZDb0UgZmlybXdhcmUgaW5pdCByZXF1ZXN0IDEKKyAqLworc3RydWN0IGZjb2Vfa3dxZV9pbml0MSB7CisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisJc3RydWN0IGZjb2Vfa3dxZV9oZWFkZXIgaGRyOworCXUxNiBudW1fdGFza3M7CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKKwl1MTYgbnVtX3Rhc2tzOworCXN0cnVjdCBmY29lX2t3cWVfaGVhZGVyIGhkcjsKKyNlbmRpZgorCXUzMiB0YXNrX2xpc3RfcGJsX2FkZHJfbG87CisJdTMyIHRhc2tfbGlzdF9wYmxfYWRkcl9oaTsKKwl1MzIgZHVtbXlfYnVmZmVyX2FkZHJfbG87CisJdTMyIGR1bW15X2J1ZmZlcl9hZGRyX2hpOworI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQorCXUxNiBycV9udW1fd3FlczsKKwl1MTYgc3FfbnVtX3dxZXM7CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKKwl1MTYgc3FfbnVtX3dxZXM7CisJdTE2IHJxX251bV93cWVzOworI2VuZGlmCisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisJdTE2IGNxX251bV93cWVzOworCXUxNiBycV9idWZmZXJfbG9nX3NpemU7CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKKwl1MTYgcnFfYnVmZmVyX2xvZ19zaXplOworCXUxNiBjcV9udW1fd3FlczsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQorCXU4IGZsYWdzOworI2RlZmluZSBGQ09FX0tXUUVfSU5JVDFfTE9HX1BBR0VfU0laRSAoMHhGPDwwKQorI2RlZmluZSBGQ09FX0tXUUVfSU5JVDFfTE9HX1BBR0VfU0laRV9TSElGVCAwCisjZGVmaW5lIEZDT0VfS1dRRV9JTklUMV9MT0dfQ0FDSEVEX1BCRVNfUEVSX0ZVTkMgKDB4Nzw8NCkKKyNkZWZpbmUgRkNPRV9LV1FFX0lOSVQxX0xPR19DQUNIRURfUEJFU19QRVJfRlVOQ19TSElGVCA0CisjZGVmaW5lIEZDT0VfS1dRRV9JTklUMV9SRVNFUlZFRDEgKDB4MTw8NykKKyNkZWZpbmUgRkNPRV9LV1FFX0lOSVQxX1JFU0VSVkVEMV9TSElGVCA3CisJdTggbnVtX3Nlc3Npb25zX2xvZzsKKwl1MTYgbXR1OworI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCisJdTE2IG10dTsKKwl1OCBudW1fc2Vzc2lvbnNfbG9nOworCXU4IGZsYWdzOworI2RlZmluZSBGQ09FX0tXUUVfSU5JVDFfTE9HX1BBR0VfU0laRSAoMHhGPDwwKQorI2RlZmluZSBGQ09FX0tXUUVfSU5JVDFfTE9HX1BBR0VfU0laRV9TSElGVCAwCisjZGVmaW5lIEZDT0VfS1dRRV9JTklUMV9MT0dfQ0FDSEVEX1BCRVNfUEVSX0ZVTkMgKDB4Nzw8NCkKKyNkZWZpbmUgRkNPRV9LV1FFX0lOSVQxX0xPR19DQUNIRURfUEJFU19QRVJfRlVOQ19TSElGVCA0CisjZGVmaW5lIEZDT0VfS1dRRV9JTklUMV9SRVNFUlZFRDEgKDB4MTw8NykKKyNkZWZpbmUgRkNPRV9LV1FFX0lOSVQxX1JFU0VSVkVEMV9TSElGVCA3CisjZW5kaWYKK307CisKKy8qCisgKiBGQ29FIGZpcm13YXJlIGluaXQgcmVxdWVzdCAyCisgKi8KK3N0cnVjdCBmY29lX2t3cWVfaW5pdDIgeworI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQorCXN0cnVjdCBmY29lX2t3cWVfaGVhZGVyIGhkcjsKKwl1MTYgcmVzZXJ2ZWQwOworI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCisJdTE2IHJlc2VydmVkMDsKKwlzdHJ1Y3QgZmNvZV9rd3FlX2hlYWRlciBoZHI7CisjZW5kaWYKKwl1MzIgaGFzaF90YmxfcGJsX2FkZHJfbG87CisJdTMyIGhhc2hfdGJsX3BibF9hZGRyX2hpOworCXUzMiB0Ml9oYXNoX3RibF9hZGRyX2xvOworCXUzMiB0Ml9oYXNoX3RibF9hZGRyX2hpOworCXUzMiB0Ml9wdHJfaGFzaF90YmxfYWRkcl9sbzsKKwl1MzIgdDJfcHRyX2hhc2hfdGJsX2FkZHJfaGk7CisJdTMyIGZyZWVfbGlzdF9jb3VudDsKK307CisKKy8qCisgKiBGQ29FIGZpcm13YXJlIGluaXQgcmVxdWVzdCAzCisgKi8KK3N0cnVjdCBmY29lX2t3cWVfaW5pdDMgeworI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQorCXN0cnVjdCBmY29lX2t3cWVfaGVhZGVyIGhkcjsKKwl1MTYgcmVzZXJ2ZWQwOworI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCisJdTE2IHJlc2VydmVkMDsKKwlzdHJ1Y3QgZmNvZV9rd3FlX2hlYWRlciBoZHI7CisjZW5kaWYKKwl1MzIgZXJyb3JfYml0X21hcF9sbzsKKwl1MzIgZXJyb3JfYml0X21hcF9oaTsKKyNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKKwl1OCByZXNlcnZlZDIxWzNdOworCXU4IGNhY2hlZF9zZXNzaW9uX2VuYWJsZTsKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorCXU4IGNhY2hlZF9zZXNzaW9uX2VuYWJsZTsKKwl1OCByZXNlcnZlZDIxWzNdOworI2VuZGlmCisJdTMyIHJlc2VydmVkMls0XTsKK307CisKKy8qCisgKiBGQ29FIGNvbm5lY3Rpb24gb2ZmbG9hZCByZXF1ZXN0IDEKKyAqLworc3RydWN0IGZjb2Vfa3dxZV9jb25uX29mZmxvYWQxIHsKKyNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKKwlzdHJ1Y3QgZmNvZV9rd3FlX2hlYWRlciBoZHI7CisJdTE2IGZjb2VfY29ubl9pZDsKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorCXUxNiBmY29lX2Nvbm5faWQ7CisJc3RydWN0IGZjb2Vfa3dxZV9oZWFkZXIgaGRyOworI2VuZGlmCisJdTMyIHNxX2FkZHJfbG87CisJdTMyIHNxX2FkZHJfaGk7CisJdTMyIHJxX3BibF9hZGRyX2xvOworCXUzMiBycV9wYmxfYWRkcl9oaTsKKwl1MzIgcnFfZmlyc3RfcGJlX2FkZHJfbG87CisJdTMyIHJxX2ZpcnN0X3BiZV9hZGRyX2hpOworI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQorCXUxNiByZXNlcnZlZDA7CisJdTE2IHJxX3Byb2Q7CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKKwl1MTYgcnFfcHJvZDsKKwl1MTYgcmVzZXJ2ZWQwOworI2VuZGlmCit9OworCisvKgorICogRkNvRSBjb25uZWN0aW9uIG9mZmxvYWQgcmVxdWVzdCAyCisgKi8KK3N0cnVjdCBmY29lX2t3cWVfY29ubl9vZmZsb2FkMiB7CisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisJc3RydWN0IGZjb2Vfa3dxZV9oZWFkZXIgaGRyOworCXUxNiB0eF9tYXhfZmNfcGF5X2xlbjsKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorCXUxNiB0eF9tYXhfZmNfcGF5X2xlbjsKKwlzdHJ1Y3QgZmNvZV9rd3FlX2hlYWRlciBoZHI7CisjZW5kaWYKKwl1MzIgY3FfYWRkcl9sbzsKKwl1MzIgY3FfYWRkcl9oaTsKKwl1MzIgeGZlcnFfYWRkcl9sbzsKKwl1MzIgeGZlcnFfYWRkcl9oaTsKKwl1MzIgY29ubl9kYl9hZGRyX2xvOworCXUzMiBjb25uX2RiX2FkZHJfaGk7CisJdTMyIHJlc2VydmVkMTsKK307CisKKy8qCisgKiBGQ29FIGNvbm5lY3Rpb24gb2ZmbG9hZCByZXF1ZXN0IDMKKyAqLworc3RydWN0IGZjb2Vfa3dxZV9jb25uX29mZmxvYWQzIHsKKyNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKKwlzdHJ1Y3QgZmNvZV9rd3FlX2hlYWRlciBoZHI7CisJdTE2IHZsYW5fdGFnOworI2RlZmluZSBGQ09FX0tXUUVfQ09OTl9PRkZMT0FEM19WTEFOX0lEICgweEZGRjw8MCkKKyNkZWZpbmUgRkNPRV9LV1FFX0NPTk5fT0ZGTE9BRDNfVkxBTl9JRF9TSElGVCAwCisjZGVmaW5lIEZDT0VfS1dRRV9DT05OX09GRkxPQUQzX0NGSSAoMHgxPDwxMikKKyNkZWZpbmUgRkNPRV9LV1FFX0NPTk5fT0ZGTE9BRDNfQ0ZJX1NISUZUIDEyCisjZGVmaW5lIEZDT0VfS1dRRV9DT05OX09GRkxPQUQzX1BSSU9SSVRZICgweDc8PDEzKQorI2RlZmluZSBGQ09FX0tXUUVfQ09OTl9PRkZMT0FEM19QUklPUklUWV9TSElGVCAxMworI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCisJdTE2IHZsYW5fdGFnOworI2RlZmluZSBGQ09FX0tXUUVfQ09OTl9PRkZMT0FEM19WTEFOX0lEICgweEZGRjw8MCkKKyNkZWZpbmUgRkNPRV9LV1FFX0NPTk5fT0ZGTE9BRDNfVkxBTl9JRF9TSElGVCAwCisjZGVmaW5lIEZDT0VfS1dRRV9DT05OX09GRkxPQUQzX0NGSSAoMHgxPDwxMikKKyNkZWZpbmUgRkNPRV9LV1FFX0NPTk5fT0ZGTE9BRDNfQ0ZJX1NISUZUIDEyCisjZGVmaW5lIEZDT0VfS1dRRV9DT05OX09GRkxPQUQzX1BSSU9SSVRZICgweDc8PDEzKQorI2RlZmluZSBGQ09FX0tXUUVfQ09OTl9PRkZMT0FEM19QUklPUklUWV9TSElGVCAxMworCXN0cnVjdCBmY29lX2t3cWVfaGVhZGVyIGhkcjsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQorCXU4IHR4X21heF9jb25jX3NlcXNfYzM7CisJdTggc19pZFszXTsKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorCXU4IHNfaWRbM107CisJdTggdHhfbWF4X2NvbmNfc2Vxc19jMzsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQorCXU4IGZsYWdzOworI2RlZmluZSBGQ09FX0tXUUVfQ09OTl9PRkZMT0FEM19CX01VTF9OX1BPUlRfSURTICgweDE8PDApCisjZGVmaW5lIEZDT0VfS1dRRV9DT05OX09GRkxPQUQzX0JfTVVMX05fUE9SVF9JRFNfU0hJRlQgMAorI2RlZmluZSBGQ09FX0tXUUVfQ09OTl9PRkZMT0FEM19CX0VfRF9UT1ZfUkVTICgweDE8PDEpCisjZGVmaW5lIEZDT0VfS1dRRV9DT05OX09GRkxPQUQzX0JfRV9EX1RPVl9SRVNfU0hJRlQgMQorI2RlZmluZSBGQ09FX0tXUUVfQ09OTl9PRkZMT0FEM19CX0NPTlRfSU5DUl9TRVFfQ05UICgweDE8PDIpCisjZGVmaW5lIEZDT0VfS1dRRV9DT05OX09GRkxPQUQzX0JfQ09OVF9JTkNSX1NFUV9DTlRfU0hJRlQgMgorI2RlZmluZSBGQ09FX0tXUUVfQ09OTl9PRkZMT0FEM19CX0NPTkZfUkVRICgweDE8PDMpCisjZGVmaW5lIEZDT0VfS1dRRV9DT05OX09GRkxPQUQzX0JfQ09ORl9SRVFfU0hJRlQgMworI2RlZmluZSBGQ09FX0tXUUVfQ09OTl9PRkZMT0FEM19CX1JFQ19WQUxJRCAoMHgxPDw0KQorI2RlZmluZSBGQ09FX0tXUUVfQ09OTl9PRkZMT0FEM19CX1JFQ19WQUxJRF9TSElGVCA0CisjZGVmaW5lIEZDT0VfS1dRRV9DT05OX09GRkxPQUQzX0JfQzJfVkFMSUQgKDB4MTw8NSkKKyNkZWZpbmUgRkNPRV9LV1FFX0NPTk5fT0ZGTE9BRDNfQl9DMl9WQUxJRF9TSElGVCA1CisjZGVmaW5lIEZDT0VfS1dRRV9DT05OX09GRkxPQUQzX0JfQUNLXzAgKDB4MTw8NikKKyNkZWZpbmUgRkNPRV9LV1FFX0NPTk5fT0ZGTE9BRDNfQl9BQ0tfMF9TSElGVCA2CisjZGVmaW5lIEZDT0VfS1dRRV9DT05OX09GRkxPQUQzX0JfVkxBTl9GTEFHICgweDE8PDcpCisjZGVmaW5lIEZDT0VfS1dRRV9DT05OX09GRkxPQUQzX0JfVkxBTl9GTEFHX1NISUZUIDcKKwl1OCBkX2lkWzNdOworI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCisJdTggZF9pZFszXTsKKwl1OCBmbGFnczsKKyNkZWZpbmUgRkNPRV9LV1FFX0NPTk5fT0ZGTE9BRDNfQl9NVUxfTl9QT1JUX0lEUyAoMHgxPDwwKQorI2RlZmluZSBGQ09FX0tXUUVfQ09OTl9PRkZMT0FEM19CX01VTF9OX1BPUlRfSURTX1NISUZUIDAKKyNkZWZpbmUgRkNPRV9LV1FFX0NPTk5fT0ZGTE9BRDNfQl9FX0RfVE9WX1JFUyAoMHgxPDwxKQorI2RlZmluZSBGQ09FX0tXUUVfQ09OTl9PRkZMT0FEM19CX0VfRF9UT1ZfUkVTX1NISUZUIDEKKyNkZWZpbmUgRkNPRV9LV1FFX0NPTk5fT0ZGTE9BRDNfQl9DT05UX0lOQ1JfU0VRX0NOVCAoMHgxPDwyKQorI2RlZmluZSBGQ09FX0tXUUVfQ09OTl9PRkZMT0FEM19CX0NPTlRfSU5DUl9TRVFfQ05UX1NISUZUIDIKKyNkZWZpbmUgRkNPRV9LV1FFX0NPTk5fT0ZGTE9BRDNfQl9DT05GX1JFUSAoMHgxPDwzKQorI2RlZmluZSBGQ09FX0tXUUVfQ09OTl9PRkZMT0FEM19CX0NPTkZfUkVRX1NISUZUIDMKKyNkZWZpbmUgRkNPRV9LV1FFX0NPTk5fT0ZGTE9BRDNfQl9SRUNfVkFMSUQgKDB4MTw8NCkKKyNkZWZpbmUgRkNPRV9LV1FFX0NPTk5fT0ZGTE9BRDNfQl9SRUNfVkFMSURfU0hJRlQgNAorI2RlZmluZSBGQ09FX0tXUUVfQ09OTl9PRkZMT0FEM19CX0MyX1ZBTElEICgweDE8PDUpCisjZGVmaW5lIEZDT0VfS1dRRV9DT05OX09GRkxPQUQzX0JfQzJfVkFMSURfU0hJRlQgNQorI2RlZmluZSBGQ09FX0tXUUVfQ09OTl9PRkZMT0FEM19CX0FDS18wICgweDE8PDYpCisjZGVmaW5lIEZDT0VfS1dRRV9DT05OX09GRkxPQUQzX0JfQUNLXzBfU0hJRlQgNgorI2RlZmluZSBGQ09FX0tXUUVfQ09OTl9PRkZMT0FEM19CX1ZMQU5fRkxBRyAoMHgxPDw3KQorI2RlZmluZSBGQ09FX0tXUUVfQ09OTl9PRkZMT0FEM19CX1ZMQU5fRkxBR19TSElGVCA3CisjZW5kaWYKKwl1MzIgcmVzZXJ2ZWQ7CisJdTMyIGNvbmZxX2ZpcnN0X3BiZV9hZGRyX2xvOworCXUzMiBjb25mcV9maXJzdF9wYmVfYWRkcl9oaTsKKyNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKKwl1MTYgcnhfbWF4X2ZjX3BheV9sZW47CisJdTE2IHR4X3RvdGFsX2NvbmNfc2VxczsKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorCXUxNiB0eF90b3RhbF9jb25jX3NlcXM7CisJdTE2IHJ4X21heF9mY19wYXlfbGVuOworI2VuZGlmCisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisJdTggcnhfb3Blbl9zZXFzX2V4Y2hfYzM7CisJdTggcnhfbWF4X2NvbmNfc2Vxc19jMzsKKwl1MTYgcnhfdG90YWxfY29uY19zZXFzOworI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCisJdTE2IHJ4X3RvdGFsX2NvbmNfc2VxczsKKwl1OCByeF9tYXhfY29uY19zZXFzX2MzOworCXU4IHJ4X29wZW5fc2Vxc19leGNoX2MzOworI2VuZGlmCit9OworCisvKgorICogRkNvRSBjb25uZWN0aW9uIG9mZmxvYWQgcmVxdWVzdCA0CisgKi8KK3N0cnVjdCBmY29lX2t3cWVfY29ubl9vZmZsb2FkNCB7CisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisJc3RydWN0IGZjb2Vfa3dxZV9oZWFkZXIgaGRyOworCXU4IHJlc2VydmVkMjsKKwl1OCBlX2RfdG92X3RpbWVyX3ZhbDsKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorCXU4IGVfZF90b3ZfdGltZXJfdmFsOworCXU4IHJlc2VydmVkMjsKKwlzdHJ1Y3QgZmNvZV9rd3FlX2hlYWRlciBoZHI7CisjZW5kaWYKKwl1OCBzcmNfbWFjX2FkZHJfbG8zMls0XTsKKyNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKKwl1OCBkc3RfbWFjX2FkZHJfaGkxNlsyXTsKKwl1OCBzcmNfbWFjX2FkZHJfaGkxNlsyXTsKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorCXU4IHNyY19tYWNfYWRkcl9oaTE2WzJdOworCXU4IGRzdF9tYWNfYWRkcl9oaTE2WzJdOworI2VuZGlmCisJdTggZHN0X21hY19hZGRyX2xvMzJbNF07CisJdTMyIGxjcV9hZGRyX2xvOworCXUzMiBsY3FfYWRkcl9oaTsKKwl1MzIgY29uZnFfcGJsX2Jhc2VfYWRkcl9sbzsKKwl1MzIgY29uZnFfcGJsX2Jhc2VfYWRkcl9oaTsKK307CisKKy8qCisgKiBGQ29FIGNvbm5lY3Rpb24gZW5hYmxlIHJlcXVlc3QKKyAqLworc3RydWN0IGZjb2Vfa3dxZV9jb25uX2VuYWJsZV9kaXNhYmxlIHsKKyNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKKwlzdHJ1Y3QgZmNvZV9rd3FlX2hlYWRlciBoZHI7CisJdTE2IHJlc2VydmVkMDsKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorCXUxNiByZXNlcnZlZDA7CisJc3RydWN0IGZjb2Vfa3dxZV9oZWFkZXIgaGRyOworI2VuZGlmCisJdTggc3JjX21hY19hZGRyX2xvMzJbNF07CisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisJdTE2IHZsYW5fdGFnOworI2RlZmluZSBGQ09FX0tXUUVfQ09OTl9FTkFCTEVfRElTQUJMRV9WTEFOX0lEICgweEZGRjw8MCkKKyNkZWZpbmUgRkNPRV9LV1FFX0NPTk5fRU5BQkxFX0RJU0FCTEVfVkxBTl9JRF9TSElGVCAwCisjZGVmaW5lIEZDT0VfS1dRRV9DT05OX0VOQUJMRV9ESVNBQkxFX0NGSSAoMHgxPDwxMikKKyNkZWZpbmUgRkNPRV9LV1FFX0NPTk5fRU5BQkxFX0RJU0FCTEVfQ0ZJX1NISUZUIDEyCisjZGVmaW5lIEZDT0VfS1dRRV9DT05OX0VOQUJMRV9ESVNBQkxFX1BSSU9SSVRZICgweDc8PDEzKQorI2RlZmluZSBGQ09FX0tXUUVfQ09OTl9FTkFCTEVfRElTQUJMRV9QUklPUklUWV9TSElGVCAxMworCXU4IHNyY19tYWNfYWRkcl9oaTE2WzJdOworI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCisJdTggc3JjX21hY19hZGRyX2hpMTZbMl07CisJdTE2IHZsYW5fdGFnOworI2RlZmluZSBGQ09FX0tXUUVfQ09OTl9FTkFCTEVfRElTQUJMRV9WTEFOX0lEICgweEZGRjw8MCkKKyNkZWZpbmUgRkNPRV9LV1FFX0NPTk5fRU5BQkxFX0RJU0FCTEVfVkxBTl9JRF9TSElGVCAwCisjZGVmaW5lIEZDT0VfS1dRRV9DT05OX0VOQUJMRV9ESVNBQkxFX0NGSSAoMHgxPDwxMikKKyNkZWZpbmUgRkNPRV9LV1FFX0NPTk5fRU5BQkxFX0RJU0FCTEVfQ0ZJX1NISUZUIDEyCisjZGVmaW5lIEZDT0VfS1dRRV9DT05OX0VOQUJMRV9ESVNBQkxFX1BSSU9SSVRZICgweDc8PDEzKQorI2RlZmluZSBGQ09FX0tXUUVfQ09OTl9FTkFCTEVfRElTQUJMRV9QUklPUklUWV9TSElGVCAxMworI2VuZGlmCisJdTggZHN0X21hY19hZGRyX2xvMzJbNF07CisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisJdTE2IHJlc2VydmVkMTsKKwl1OCBkc3RfbWFjX2FkZHJfaGkxNlsyXTsKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorCXU4IGRzdF9tYWNfYWRkcl9oaTE2WzJdOworCXUxNiByZXNlcnZlZDE7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKKwl1OCB2bGFuX2ZsYWc7CisJdTggc19pZFszXTsKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorCXU4IHNfaWRbM107CisJdTggdmxhbl9mbGFnOworI2VuZGlmCisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisJdTggcmVzZXJ2ZWQzOworCXU4IGRfaWRbM107CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKKwl1OCBkX2lkWzNdOworCXU4IHJlc2VydmVkMzsKKyNlbmRpZgorCXUzMiBjb250ZXh0X2lkOworCXUzMiBjb25uX2lkOworCXUzMiByZXNlcnZlZDQ7Cit9OworCisvKgorICogRkNvRSBjb25uZWN0aW9uIGRlc3Ryb3kgcmVxdWVzdAorICovCitzdHJ1Y3QgZmNvZV9rd3FlX2Nvbm5fZGVzdHJveSB7CisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisJc3RydWN0IGZjb2Vfa3dxZV9oZWFkZXIgaGRyOworCXUxNiByZXNlcnZlZDA7CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKKwl1MTYgcmVzZXJ2ZWQwOworCXN0cnVjdCBmY29lX2t3cWVfaGVhZGVyIGhkcjsKKyNlbmRpZgorCXUzMiBjb250ZXh0X2lkOworCXUzMiBjb25uX2lkOworCXUzMiByZXNlcnZlZDFbNV07Cit9OworCisvKgorICogRkNvZSBkZXN0cm95IHJlcXVlc3QKKyAqLworc3RydWN0IGZjb2Vfa3dxZV9kZXN0cm95IHsKKyNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKKwlzdHJ1Y3QgZmNvZV9rd3FlX2hlYWRlciBoZHI7CisJdTE2IHJlc2VydmVkMDsKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorCXUxNiByZXNlcnZlZDA7CisJc3RydWN0IGZjb2Vfa3dxZV9oZWFkZXIgaGRyOworI2VuZGlmCisJdTMyIHJlc2VydmVkMVs3XTsKK307CisKKy8qCisgKiBGQ29lIHN0YXRpc3RpY3MgcmVxdWVzdAorICovCitzdHJ1Y3QgZmNvZV9rd3FlX3N0YXQgeworI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQorCXN0cnVjdCBmY29lX2t3cWVfaGVhZGVyIGhkcjsKKwl1MTYgcmVzZXJ2ZWQwOworI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCisJdTE2IHJlc2VydmVkMDsKKwlzdHJ1Y3QgZmNvZV9rd3FlX2hlYWRlciBoZHI7CisjZW5kaWYKKwl1MzIgc3RhdF9wYXJhbXNfYWRkcl9sbzsKKwl1MzIgc3RhdF9wYXJhbXNfYWRkcl9oaTsKKwl1MzIgcmVzZXJ2ZWQxWzVdOworfTsKKworLyoKKyAqIEZDb0UgS1dRIFdRRQorICovCit1bmlvbiBmY29lX2t3cWUgeworCXN0cnVjdCBmY29lX2t3cWVfaW5pdDEgaW5pdDE7CisJc3RydWN0IGZjb2Vfa3dxZV9pbml0MiBpbml0MjsKKwlzdHJ1Y3QgZmNvZV9rd3FlX2luaXQzIGluaXQzOworCXN0cnVjdCBmY29lX2t3cWVfY29ubl9vZmZsb2FkMSBjb25uX29mZmxvYWQxOworCXN0cnVjdCBmY29lX2t3cWVfY29ubl9vZmZsb2FkMiBjb25uX29mZmxvYWQyOworCXN0cnVjdCBmY29lX2t3cWVfY29ubl9vZmZsb2FkMyBjb25uX29mZmxvYWQzOworCXN0cnVjdCBmY29lX2t3cWVfY29ubl9vZmZsb2FkNCBjb25uX29mZmxvYWQ0OworCXN0cnVjdCBmY29lX2t3cWVfY29ubl9lbmFibGVfZGlzYWJsZSBjb25uX2VuYWJsZV9kaXNhYmxlOworCXN0cnVjdCBmY29lX2t3cWVfY29ubl9kZXN0cm95IGNvbm5fZGVzdHJveTsKKwlzdHJ1Y3QgZmNvZV9rd3FlX2Rlc3Ryb3kgZGVzdHJveTsKKwlzdHJ1Y3QgZmNvZV9rd3FlX3N0YXQgc3RhdGlzdGljczsKK307CisKK3N0cnVjdCBmY29lX3Rhc2tfY3R4X2VudHJ5IHsKKwlzdHJ1Y3QgZmNvZV90YXNrX2N0eF9lbnRyeV90eF9vbmx5IHR4X3dyX29ubHk7CisJc3RydWN0IGZjb2VfdGFza19jdHhfZW50cnlfdHh3cl9yeHJkIHR4X3dyX3J4X3JkOworCXN0cnVjdCBmY29lX3Rhc2tfY3R4X2VudHJ5X3R4X3J4X2NtbiBjbW47CisJc3RydWN0IGZjb2VfdGFza19jdHhfZW50cnlfcnh3cl90eHJkIHJ4X3dyX3R4X3JkOworCXN0cnVjdCBmY29lX3Rhc2tfY3R4X2VudHJ5X3J4X29ubHkgcnhfd3Jfb25seTsKKwl1MzIgcmVzZXJ2ZWRbNF07Cit9OworCisvKgorICogRkNvRSBjb25uZWN0aW9uIGVuYWJsZVxkaXNhYmxlIHBhcmFtcyBwYXNzZWQgYnkgZHJpdmVyIHRvIEZXIGluIEZDb0UgZW5hYmxlIHJhbXJvZAorICovCitzdHJ1Y3QgZmNvZV9jb25uX2VuYWJsZV9kaXNhYmxlX3JhbXJvZF9wYXJhbXMgeworCXN0cnVjdCBmY29lX2t3cWVfY29ubl9lbmFibGVfZGlzYWJsZSBlbmFibGVfZGlzYWJsZV9rd3FlOworfTsKKworCisvKgorICogRkNvRSBjb25uZWN0aW9uIG9mZmxvYWQgcGFyYW1zIHBhc3NlZCBieSBkcml2ZXIgdG8gRlcgaW4gRkNvRSBvZmZsb2FkIHJhbXJvZAorICovCitzdHJ1Y3QgZmNvZV9jb25uX29mZmxvYWRfcmFtcm9kX3BhcmFtcyB7CisJc3RydWN0IGZjb2Vfa3dxZV9jb25uX29mZmxvYWQxIG9mZmxvYWRfa3dxZTE7CisJc3RydWN0IGZjb2Vfa3dxZV9jb25uX29mZmxvYWQyIG9mZmxvYWRfa3dxZTI7CisJc3RydWN0IGZjb2Vfa3dxZV9jb25uX29mZmxvYWQzIG9mZmxvYWRfa3dxZTM7CisJc3RydWN0IGZjb2Vfa3dxZV9jb25uX29mZmxvYWQ0IG9mZmxvYWRfa3dxZTQ7Cit9OworCisvKgorICogRkNvRSBpbml0IHBhcmFtcyBwYXNzZWQgYnkgZHJpdmVyIHRvIEZXIGluIEZDb0UgaW5pdCByYW1yb2QKKyAqLworc3RydWN0IGZjb2VfaW5pdF9yYW1yb2RfcGFyYW1zIHsKKwlzdHJ1Y3QgZmNvZV9rd3FlX2luaXQxIGluaXRfa3dxZTE7CisJc3RydWN0IGZjb2Vfa3dxZV9pbml0MiBpbml0X2t3cWUyOworCXN0cnVjdCBmY29lX2t3cWVfaW5pdDMgaW5pdF9rd3FlMzsKKwlzdHJ1Y3QgcmVncGFpciBlcV9hZGRyOworCXN0cnVjdCByZWdwYWlyIGVxX25leHRfcGFnZV9hZGRyOworI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQorCXUxNiBzYl9udW07CisJdTE2IGVxX3Byb2Q7CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKKwl1MTYgZXFfcHJvZDsKKwl1MTYgc2JfbnVtOworI2VuZGlmCisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisJdTE2IHJlc2VydmVkMTsKKwl1OCByZXNlcnZlZDA7CisJdTggc2JfaWQ7CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKKwl1OCBzYl9pZDsKKwl1OCByZXNlcnZlZDA7CisJdTE2IHJlc2VydmVkMTsKKyNlbmRpZgorfTsKKworCisvKgorICogRkNvRSBzdGF0aXN0aWNzIHBhcmFtcyBidWZmZXIgcGFzc2VkIGJ5IGRyaXZlciB0byBGVyBpbiBGQ29FIHN0YXRpc3RpY3MgcmFtcm9kCisgKi8KK3N0cnVjdCBmY29lX3N0YXRfcmFtcm9kX3BhcmFtcyB7CisJc3RydWN0IGZjb2Vfa3dxZV9zdGF0IHN0YXRfa3dxZTsKK307CisKKworLyoKKyAqIEZDb0UgMTYtYml0cyB2bGFuIHN0cnVjdHVyZQorICovCitzdHJ1Y3QgZmNvZV92bGFuX2ZpZWxkcyB7CisJdTE2IGZpZWxkczsKKyNkZWZpbmUgRkNPRV9WTEFOX0ZJRUxEU19WSUQgKDB4RkZGPDwwKQorI2RlZmluZSBGQ09FX1ZMQU5fRklFTERTX1ZJRF9TSElGVCAwCisjZGVmaW5lIEZDT0VfVkxBTl9GSUVMRFNfQ0xJICgweDE8PDEyKQorI2RlZmluZSBGQ09FX1ZMQU5fRklFTERTX0NMSV9TSElGVCAxMgorI2RlZmluZSBGQ09FX1ZMQU5fRklFTERTX1BSSSAoMHg3PDwxMykKKyNkZWZpbmUgRkNPRV9WTEFOX0ZJRUxEU19QUklfU0hJRlQgMTMKK307CisKKworLyoKKyAqIEZDb0UgMTYtYml0cyB2bGFuIHVuaW9uCisgKi8KK3VuaW9uIGZjb2Vfdmxhbl9maWVsZF91bmlvbiB7CisJc3RydWN0IGZjb2Vfdmxhbl9maWVsZHMgZmllbGRzOworCXUxNiB2YWw7Cit9OworCisvKgorICogUGFyYW1ldGVycyB1c2VkIGZvciBDbGFzcyAyIHZlcmlmaWNhdGlvbnMKKyAqLworc3RydWN0IHVzdG9ybV9mY29lX2MyX3BhcmFtcyB7CisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisJdTE2IGUyZV9jcmVkaXQ7CisJdTE2IGNvbl9zZXE7CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKKwl1MTYgY29uX3NlcTsKKwl1MTYgZTJlX2NyZWRpdDsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQorCXUxNiBhY2txX3Byb2Q7CisJdTE2IG9wZW5fc2VxX3Blcl9leGNoOworI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCisJdTE2IG9wZW5fc2VxX3Blcl9leGNoOworCXUxNiBhY2txX3Byb2Q7CisjZW5kaWYKKwlzdHJ1Y3QgcmVncGFpciBhY2txX3BibF9iYXNlOworCXN0cnVjdCByZWdwYWlyIGFja3FfY3VyX3NlZzsKK307CisKKy8qCisgKiBQYXJhbWV0ZXJzIHVzZWQgZm9yIENsYXNzIDIgdmVyaWZpY2F0aW9ucworICovCitzdHJ1Y3QgeHN0b3JtX2Zjb2VfYzJfcGFyYW1zIHsKKyNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKKwl1MTYgcmVzZXJ2ZWQwOworCXU4IGFja3FfeF9wcm9kOworCXU4IG1heF9jb25jX3NlcXNfYzI7CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKKwl1OCBtYXhfY29uY19zZXFzX2MyOworCXU4IGFja3FfeF9wcm9kOworCXUxNiByZXNlcnZlZDA7CisjZW5kaWYKKwlzdHJ1Y3QgcmVncGFpciBhY2txX3BibF9iYXNlOworCXN0cnVjdCByZWdwYWlyIGFja3FfY3VyX3NlZzsKK307CisKKy8qCiAgKiBCdWZmZXIgcGVyIGNvbm5lY3Rpb24sIHVzZWQgaW4gVHN0b3JtCiAgKi8KIHN0cnVjdCBpc2NzaV9jb25uX2J1ZiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jbmljX2lmLmggYi9kcml2ZXJzL25ldC9jbmljX2lmLmgKaW5kZXggMGRiZWFlYzQuLjlmNDRlMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NuaWNfaWYuaAorKysgYi9kcml2ZXJzL25ldC9jbmljX2lmLmgKQEAgLTEsNiArMSw2IEBACiAvKiBjbmljX2lmLmg6IEJyb2FkY29tIENOSUMgY29yZSBuZXR3b3JrIGRyaXZlci4KICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAxMCBCcm9hZGNvbSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAyMDA2LTIwMTEgQnJvYWRjb20gQ29ycG9yYXRpb24KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTEyLDIyICsxMiwzMSBAQAogI2lmbmRlZiBDTklDX0lGX0gKICNkZWZpbmUgQ05JQ19JRl9ICiAKLSNkZWZpbmUgQ05JQ19NT0RVTEVfVkVSU0lPTgkiMi4yLjYiCi0jZGVmaW5lIENOSUNfTU9EVUxFX1JFTERBVEUJIk9jdCAxMiwgMjAxMCIKKyNkZWZpbmUgQ05JQ19NT0RVTEVfVkVSU0lPTgkiMi4yLjEyIgorI2RlZmluZSBDTklDX01PRFVMRV9SRUxEQVRFCSJKYW4gMDMsIDIwMTEiCiAKICNkZWZpbmUgQ05JQ19VTFBfUkRNQQkJMAogI2RlZmluZSBDTklDX1VMUF9JU0NTSQkJMQotI2RlZmluZSBDTklDX1VMUF9MNAkJMgotI2RlZmluZSBNQVhfQ05JQ19VTFBfVFlQRV9FWFQJMgotI2RlZmluZSBNQVhfQ05JQ19VTFBfVFlQRQkzCisjZGVmaW5lIENOSUNfVUxQX0ZDT0UJCTIKKyNkZWZpbmUgQ05JQ19VTFBfTDQJCTMKKyNkZWZpbmUgTUFYX0NOSUNfVUxQX1RZUEVfRVhUCTMKKyNkZWZpbmUgTUFYX0NOSUNfVUxQX1RZUEUJNAogCiBzdHJ1Y3Qga3dxZSB7CiAJdTMyIGt3cWVfb3BfZmxhZzsKIAorI2RlZmluZSBLV1FFX1FJRF9TSElGVAkJOAogI2RlZmluZSBLV1FFX09QQ09ERV9NQVNLCTB4MDBmZjAwMDAKICNkZWZpbmUgS1dRRV9PUENPREVfU0hJRlQJMTYKLSNkZWZpbmUgS1dRRV9GTEFHU19MQVlFUl9TSElGVAkyOAogI2RlZmluZSBLV1FFX09QQ09ERSh4KQkJKCh4ICYgS1dRRV9PUENPREVfTUFTSykgPj4gS1dRRV9PUENPREVfU0hJRlQpCisjZGVmaW5lIEtXUUVfTEFZRVJfTUFTSwkJCTB4NzAwMDAwMDAKKyNkZWZpbmUgS1dRRV9MQVlFUl9TSElGVAkJMjgKKyNkZWZpbmUgS1dRRV9GTEFHU19MQVlFUl9NQVNLX0wyCSgyPDwyOCkKKyNkZWZpbmUgS1dRRV9GTEFHU19MQVlFUl9NQVNLX0wzCSgzPDwyOCkKKyNkZWZpbmUgS1dRRV9GTEFHU19MQVlFUl9NQVNLX0w0CSg0PDwyOCkKKyNkZWZpbmUgS1dRRV9GTEFHU19MQVlFUl9NQVNLX0w1X1JETUEJKDU8PDI4KQorI2RlZmluZSBLV1FFX0ZMQUdTX0xBWUVSX01BU0tfTDVfSVNDU0kJKDY8PDI4KQorI2RlZmluZSBLV1FFX0ZMQUdTX0xBWUVSX01BU0tfTDVfRkNPRQkoNzw8MjgpCiAKIAl1MzIga3dxZV9pbmZvMDsKIAl1MzIga3dxZV9pbmZvMTsKQEAgLTYyLDYgKzcxLDcgQEAKIAkJI2RlZmluZSBLQ1FFX0ZMQUdTX0xBWUVSX01BU0tfTDQJKDQ8PDI4KQogCQkjZGVmaW5lIEtDUUVfRkxBR1NfTEFZRVJfTUFTS19MNV9SRE1BCSg1PDwyOCkKIAkJI2RlZmluZSBLQ1FFX0ZMQUdTX0xBWUVSX01BU0tfTDVfSVNDU0kJKDY8PDI4KQorCQkjZGVmaW5lIEtDUUVfRkxBR1NfTEFZRVJfTUFTS19MNV9GQ09FCSg3PDwyOCkKIAkJI2RlZmluZSBLQ1FFX0ZMQUdTX05FWFQgCQkoMTw8MzEpCiAJCSNkZWZpbmUgS0NRRV9GTEFHU19PUENPREVfTUFTSwkJKDB4ZmY8PDE2KQogCQkjZGVmaW5lIEtDUUVfRkxBR1NfT1BDT0RFX1NISUZUCQkoMTYpCkBAIC0zMDEsNyArMzExLDcgQEAKIAl2b2lkICgqY21fYWJvcnRfY29tcGxldGUpKHN0cnVjdCBjbmljX3NvY2sgKik7CiAJdm9pZCAoKmNtX3JlbW90ZV9jbG9zZSkoc3RydWN0IGNuaWNfc29jayAqKTsKIAl2b2lkICgqY21fcmVtb3RlX2Fib3J0KShzdHJ1Y3QgY25pY19zb2NrICopOwotCXZvaWQgKCppc2NzaV9ubF9zZW5kX21zZykoc3RydWN0IGNuaWNfZGV2ICpkZXYsIHUzMiBtc2dfdHlwZSwKKwlpbnQgKCppc2NzaV9ubF9zZW5kX21zZykodm9pZCAqdWxwX2N0eCwgdTMyIG1zZ190eXBlLAogCQkJCSAgY2hhciAqZGF0YSwgdTE2IGRhdGFfc2l6ZSk7CiAJc3RydWN0IG1vZHVsZSAqb3duZXI7CiAJYXRvbWljX3QgcmVmX2NvdW50OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3Jpcy9ldGhfdjEwLmMgYi9kcml2ZXJzL25ldC9jcmlzL2V0aF92MTAuYwppbmRleCA4MTQ3NWNjLi44MGMyZmVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jcmlzL2V0aF92MTAuYworKysgYi9kcml2ZXJzL25ldC9jcmlzL2V0aF92MTAuYwpAQCAtNTksNyArNTksNiBAQAogCiAvKiBJbmZvcm1hdGlvbiB0aGF0IG5lZWQgdG8gYmUga2VwdCBmb3IgZWFjaCBib2FyZC4gKi8KIHN0cnVjdCBuZXRfbG9jYWwgewotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwogCXN0cnVjdCBtaWlfaWZfaW5mbyBtaWlfaWY7CiAKIAkvKiBUeCBjb250cm9sIGxvY2suICBUaGlzIHByb3RlY3RzIHRoZSB0cmFuc21pdCBidWZmZXIgcmluZwpAQCAtMTA1OSw3ICsxMDU4LDcgQEAKIAogCS8qIHJlbWVtYmVyIHdlIGdvdCBhbiBlcnJvciAqLwogCi0JbnAtPnN0YXRzLnR4X2Vycm9ycysrOworCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAKIAkvKiByZXNldCB0aGUgVFggRE1BIGluIGNhc2UgaXQgaGFzIGh1bmcgb24gc29tZXRoaW5nICovCiAKQEAgLTExNTcsNyArMTE1Niw3IEBACiAJCQkgKiBhbGxvY2F0ZSBhIG5ldyBidWZmZXIgdG8gcHV0IGEgcGFja2V0IGluLgogCQkJICovCiAJCQllMTAwX3J4KGRldik7Ci0JCQlucC0+c3RhdHMucnhfcGFja2V0cysrOworCQkJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CiAJCQkvKiByZXN0YXJ0L2NvbnRpbnVlIG9uIHRoZSBjaGFubmVsLCBmb3Igc2FmZXR5ICovCiAJCQkqUl9ETUFfQ0gxX0NNRCA9IElPX1NUQVRFKFJfRE1BX0NIMV9DTUQsIGNtZCwgcmVzdGFydCk7CiAJCQkvKiBjbGVhciBkbWEgY2hhbm5lbCAxIGVvcC9kZXNjciBpcnEgYml0cyAqLwpAQCAtMTE3Myw4ICsxMTcyLDggQEAKIAkvKiBSZXBvcnQgYW55IHBhY2tldHMgdGhhdCBoYXZlIGJlZW4gc2VudCAqLwogCXdoaWxlICh2aXJ0X3RvX3BoeXMobXlGaXJzdFR4RGVzYykgIT0gKlJfRE1BX0NIMF9GSVJTVCAmJgogCSAgICAgICAobmV0aWZfcXVldWVfc3RvcHBlZChkZXYpIHx8IG15Rmlyc3RUeERlc2MgIT0gbXlOZXh0VHhEZXNjKSkgewotCQlucC0+c3RhdHMudHhfYnl0ZXMgKz0gbXlGaXJzdFR4RGVzYy0+c2tiLT5sZW47Ci0JCW5wLT5zdGF0cy50eF9wYWNrZXRzKys7CisJCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gbXlGaXJzdFR4RGVzYy0+c2tiLT5sZW47CisJCWRldi0+c3RhdHMudHhfcGFja2V0cysrOwogCiAJCS8qIGRtYSBpcyByZWFkeSB3aXRoIHRoZSB0cmFuc21pc3Npb24gb2YgdGhlIGRhdGEgaW4gdHhfc2tiLCBzbyBub3cKIAkJICAgd2UgY2FuIHJlbGVhc2UgdGhlIHNrYiBtZW1vcnkgKi8KQEAgLTExOTcsNyArMTE5Niw2IEBACiBlMTAwbndfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopZGV2X2lkOwotCXN0cnVjdCBuZXRfbG9jYWwgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1bnNpZ25lZCBsb25nIGlycWJpdHMgPSAqUl9JUlFfTUFTSzBfUkQ7CiAKIAkvKiBjaGVjayBmb3IgdW5kZXJydW4gaXJxICovCkBAIC0xMjA1LDEzICsxMjAzLDEzIEBACiAJCVNFVFMobmV0d29ya190cl9jdHJsX3NoYWRvdywgUl9ORVRXT1JLX1RSX0NUUkwsIGNscl9lcnJvciwgY2xyKTsKIAkJKlJfTkVUV09SS19UUl9DVFJMID0gbmV0d29ya190cl9jdHJsX3NoYWRvdzsKIAkJU0VUUyhuZXR3b3JrX3RyX2N0cmxfc2hhZG93LCBSX05FVFdPUktfVFJfQ1RSTCwgY2xyX2Vycm9yLCBub3ApOwotCQlucC0+c3RhdHMudHhfZXJyb3JzKys7CisJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAJCUQocHJpbnRrKCJldGhlcm5ldCByZWNlaXZlciB1bmRlcnJ1biFcbiIpKTsKIAl9CiAKIAkvKiBjaGVjayBmb3Igb3ZlcnJ1biBpcnEgKi8KIAlpZiAoaXJxYml0cyAmIElPX1NUQVRFKFJfSVJRX01BU0swX1JELCBvdmVycnVuLCBhY3RpdmUpKSB7Ci0JCXVwZGF0ZV9yeF9zdGF0cygmbnAtPnN0YXRzKTsgLyogdGhpcyB3aWxsIGFjayB0aGUgaXJxICovCisJCXVwZGF0ZV9yeF9zdGF0cygmZGV2LT5zdGF0cyk7IC8qIHRoaXMgd2lsbCBhY2sgdGhlIGlycSAqLwogCQlEKHByaW50aygiZXRoZXJuZXQgcmVjZWl2ZXIgb3ZlcnJ1biFcbiIpKTsKIAl9CiAJLyogY2hlY2sgZm9yIGV4Y2Vzc2l2ZSBjb2xsaXNpb24gaXJxICovCkBAIC0xMjE5LDcgKzEyMTcsNyBAQAogCQlTRVRTKG5ldHdvcmtfdHJfY3RybF9zaGFkb3csIFJfTkVUV09SS19UUl9DVFJMLCBjbHJfZXJyb3IsIGNscik7CiAJCSpSX05FVFdPUktfVFJfQ1RSTCA9IG5ldHdvcmtfdHJfY3RybF9zaGFkb3c7CiAJCVNFVFMobmV0d29ya190cl9jdHJsX3NoYWRvdywgUl9ORVRXT1JLX1RSX0NUUkwsIGNscl9lcnJvciwgbm9wKTsKLQkJbnAtPnN0YXRzLnR4X2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOwogCQlEKHByaW50aygiZXRoZXJuZXQgZXhjZXNzaXZlIGNvbGxpc2lvbnMhXG4iKSk7CiAJfQogCXJldHVybiBJUlFfSEFORExFRDsKQEAgLTEyNTAsNyArMTI0OCw3IEBACiAJc3Bpbl91bmxvY2soJm5wLT5sZWRfbG9jayk7CiAKIAlsZW5ndGggPSBteU5leHRSeERlc2MtPmRlc2NyLmh3X2xlbiAtIDQ7Ci0JbnAtPnN0YXRzLnJ4X2J5dGVzICs9IGxlbmd0aDsKKwlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IGxlbmd0aDsKIAogI2lmZGVmIEVUSERFQlVHCiAJcHJpbnRrKCJHb3QgYSBwYWNrZXQgb2YgbGVuZ3RoICVkOlxuIiwgbGVuZ3RoKTsKQEAgLTEyNjgsNyArMTI2Niw3IEBACiAJCS8qIFNtYWxsIHBhY2tldCwgY29weSBkYXRhICovCiAJCXNrYiA9IGRldl9hbGxvY19za2IobGVuZ3RoIC0gRVRIRVJfSEVBRF9MRU4pOwogCQlpZiAoIXNrYikgewotCQkJbnAtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJCXByaW50ayhLRVJOX05PVElDRSAiJXM6IE1lbW9yeSBzcXVlZXplLCBkcm9wcGluZyBwYWNrZXQuXG4iLCBkZXYtPm5hbWUpOwogCQkJZ290byB1cGRhdGVfbmV4dHJ4ZGVzYzsKIAkJfQpAQCAtMTI5NCw3ICsxMjkyLDcgQEAKIAkJaW50IGFsaWduOwogCQlzdHJ1Y3Qgc2tfYnVmZiAqbmV3X3NrYiA9IGRldl9hbGxvY19za2IoTUFYX01FRElBX0RBVEFfU0laRSArIDIgKiBMMV9DQUNIRV9CWVRFUyk7CiAJCWlmICghbmV3X3NrYikgewotCQkJbnAtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJCXByaW50ayhLRVJOX05PVElDRSAiJXM6IE1lbW9yeSBzcXVlZXplLCBkcm9wcGluZyBwYWNrZXQuXG4iLCBkZXYtPm5hbWUpOwogCQkJZ290byB1cGRhdGVfbmV4dHJ4ZGVzYzsKIAkJfQpAQCAtMTMzMyw4ICsxMzMxLDYgQEAKIHN0YXRpYyBpbnQKIGUxMDBfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgbmV0X2xvY2FsICpucCA9IG5ldGRldl9wcml2KGRldik7Ci0KIAlwcmludGsoS0VSTl9JTkZPICJDbG9zaW5nICVzLlxuIiwgZGV2LT5uYW1lKTsKIAogCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKQEAgLTEzNjYsOCArMTM2Miw4IEBACiAKIAkvKiBVcGRhdGUgdGhlIHN0YXRpc3RpY3MgaGVyZS4gKi8KIAotCXVwZGF0ZV9yeF9zdGF0cygmbnAtPnN0YXRzKTsKLQl1cGRhdGVfdHhfc3RhdHMoJm5wLT5zdGF0cyk7CisJdXBkYXRlX3J4X3N0YXRzKCZkZXYtPnN0YXRzKTsKKwl1cGRhdGVfdHhfc3RhdHMoJmRldi0+c3RhdHMpOwogCiAJLyogU3RvcCBzcGVlZC9kdXBsZXggdGltZXJzICovCiAJZGVsX3RpbWVyKCZzcGVlZF90aW1lcik7CkBAIC0xNTQ1LDExICsxNTQxLDExIEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPmxvY2ssIGZsYWdzKTsKIAotCXVwZGF0ZV9yeF9zdGF0cygmbHAtPnN0YXRzKTsKLQl1cGRhdGVfdHhfc3RhdHMoJmxwLT5zdGF0cyk7CisJdXBkYXRlX3J4X3N0YXRzKCZkZXYtPnN0YXRzKTsKKwl1cGRhdGVfdHhfc3RhdHMoJmRldi0+c3RhdHMpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKLQlyZXR1cm4gJmxwLT5zdGF0czsKKwlyZXR1cm4gJmRldi0+c3RhdHM7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiMy9hZWwxMDAyLmMgYi9kcml2ZXJzL25ldC9jeGdiMy9hZWwxMDAyLmMKaW5kZXggMzVjZDM2Ny4uMjAyOGRhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvYWVsMTAwMi5jCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL2FlbDEwMDIuYwpAQCAtMjkyLDcgKzI5Miw3IEBACiAgKi8KIHN0YXRpYyBpbnQgYWVsMjAwNV9zZXR1cF9zcl9lZGMoc3RydWN0IGNwaHkgKnBoeSkKIHsKLQlzdGF0aWMgc3RydWN0IHJlZ192YWwgcmVnc1tdID0geworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnX3ZhbCByZWdzW10gPSB7CiAJCXsgTURJT19NTURfUE1BUE1ELCAweGMwMDMsIDB4ZmZmZiwgMHgxODEgfSwKIAkJeyBNRElPX01NRF9QTUFQTUQsIDB4YzAxMCwgMHhmZmZmLCAweDQ0OGEgfSwKIAkJeyBNRElPX01NRF9QTUFQTUQsIDB4YzA0YSwgMHhmZmZmLCAweDUyMDAgfSwKQEAgLTMyNCwxMSArMzI0LDExIEBACiAKIHN0YXRpYyBpbnQgYWVsMjAwNV9zZXR1cF90d2luYXhfZWRjKHN0cnVjdCBjcGh5ICpwaHksIGludCBtb2R0eXBlKQogewotCXN0YXRpYyBzdHJ1Y3QgcmVnX3ZhbCByZWdzW10gPSB7CisJc3RhdGljIGNvbnN0IHN0cnVjdCByZWdfdmFsIHJlZ3NbXSA9IHsKIAkJeyBNRElPX01NRF9QTUFQTUQsIDB4YzA0YSwgMHhmZmZmLCAweDVhMDAgfSwKIAkJeyAwLCAwLCAwLCAwIH0KIAl9OwotCXN0YXRpYyBzdHJ1Y3QgcmVnX3ZhbCBwcmVlbXBoYXNpc1tdID0geworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnX3ZhbCBwcmVlbXBoYXNpc1tdID0gewogCQl7IE1ESU9fTU1EX1BNQVBNRCwgMHhjMDE0LCAweGZmZmYsIDB4ZmUxNiB9LAogCQl7IE1ESU9fTU1EX1BNQVBNRCwgMHhjMDE1LCAweGZmZmYsIDB4YTAwMCB9LAogCQl7IDAsIDAsIDAsIDAgfQpAQCAtMzkzLDcgKzM5Myw3IEBACiAKIHN0YXRpYyBpbnQgYWVsMjAwNV9yZXNldChzdHJ1Y3QgY3BoeSAqcGh5LCBpbnQgd2FpdCkKIHsKLQlzdGF0aWMgc3RydWN0IHJlZ192YWwgcmVnczBbXSA9IHsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ192YWwgcmVnczBbXSA9IHsKIAkJeyBNRElPX01NRF9QTUFQTUQsIDB4YzAwMSwgMCwgMSA8PCA1IH0sCiAJCXsgTURJT19NTURfUE1BUE1ELCAweGMwMTcsIDAsIDEgPDwgNSB9LAogCQl7IE1ESU9fTU1EX1BNQVBNRCwgMHhjMDEzLCAweGZmZmYsIDB4ZjM0MSB9LApAQCAtNDAzLDcgKzQwMyw3IEBACiAJCXsgTURJT19NTURfUE1BUE1ELCAweGMyMTAsIDB4ZmZmZiwgMCB9LAogCQl7IDAsIDAsIDAsIDAgfQogCX07Ci0Jc3RhdGljIHN0cnVjdCByZWdfdmFsIHJlZ3MxW10gPSB7CisJc3RhdGljIGNvbnN0IHN0cnVjdCByZWdfdmFsIHJlZ3MxW10gPSB7CiAJCXsgTURJT19NTURfUE1BUE1ELCAweGNhMDAsIDB4ZmZmZiwgMHgwMDgwIH0sCiAJCXsgTURJT19NTURfUE1BUE1ELCAweGNhMTIsIDB4ZmZmZiwgMCB9LAogCQl7IDAsIDAsIDAsIDAgfQpAQCAtNTIyLDcgKzUyMiw3IEBACiAgKi8KIHN0YXRpYyBpbnQgYWVsMjAyMF9zZXR1cF9zcl9lZGMoc3RydWN0IGNwaHkgKnBoeSkKIHsKLQlzdGF0aWMgc3RydWN0IHJlZ192YWwgcmVnc1tdID0geworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnX3ZhbCByZWdzW10gPSB7CiAJCS8qIHNldCBDRFIgb2Zmc2V0IHRvIDEwICovCiAJCXsgTURJT19NTURfUE1BUE1ELCAweGNjMDEsIDB4ZmZmZiwgMHg0ODhhIH0sCiAKQEAgLTU1MSwyMCArNTUxLDIwIEBACiBzdGF0aWMgaW50IGFlbDIwMjBfc2V0dXBfdHdpbmF4X2VkYyhzdHJ1Y3QgY3BoeSAqcGh5LCBpbnQgbW9kdHlwZSkKIHsKIAkvKiBzZXQgdUMgdG8gNDBNSHogKi8KLQlzdGF0aWMgc3RydWN0IHJlZ192YWwgdUNjbG9jazQwTUh6W10gPSB7CisJc3RhdGljIGNvbnN0IHN0cnVjdCByZWdfdmFsIHVDY2xvY2s0ME1IeltdID0gewogCQl7IE1ESU9fTU1EX1BNQVBNRCwgMHhmZjI4LCAweGZmZmYsIDB4NDAwMSB9LAogCQl7IE1ESU9fTU1EX1BNQVBNRCwgMHhmZjJhLCAweGZmZmYsIDB4MDAwMiB9LAogCQl7IDAsIDAsIDAsIDAgfQogCX07CiAKIAkvKiBhY3RpdmF0ZSB1QyBjbG9jayAqLwotCXN0YXRpYyBzdHJ1Y3QgcmVnX3ZhbCB1Q2Nsb2NrQWN0aXZhdGVbXSA9IHsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ192YWwgdUNjbG9ja0FjdGl2YXRlW10gPSB7CiAJCXsgTURJT19NTURfUE1BUE1ELCAweGQwMDAsIDB4ZmZmZiwgMHg1MjAwIH0sCiAJCXsgMCwgMCwgMCwgMCB9CiAJfTsKIAogCS8qIHNldCBQQyB0byBzdGFydCBvZiBTUkFNIGFuZCBhY3RpdmF0ZSB1QyAqLwotCXN0YXRpYyBzdHJ1Y3QgcmVnX3ZhbCB1Q2FjdGl2YXRlW10gPSB7CisJc3RhdGljIGNvbnN0IHN0cnVjdCByZWdfdmFsIHVDYWN0aXZhdGVbXSA9IHsKIAkJeyBNRElPX01NRF9QTUFQTUQsIDB4ZDA4MCwgMHhmZmZmLCAweDAxMDAgfSwKIAkJeyBNRElPX01NRF9QTUFQTUQsIDB4ZDA5MiwgMHhmZmZmLCAweDAwMDAgfSwKIAkJeyAwLCAwLCAwLCAwIH0KQEAgLTYyNCw3ICs2MjQsNyBAQAogICovCiBzdGF0aWMgaW50IGFlbDIwMjBfaW50cl9lbmFibGUoc3RydWN0IGNwaHkgKnBoeSkKIHsKLQlzdHJ1Y3QgcmVnX3ZhbCByZWdzW10gPSB7CisJc3RhdGljIGNvbnN0IHN0cnVjdCByZWdfdmFsIHJlZ3NbXSA9IHsKIAkJLyogb3V0cHV0IE1vZHVsZSdzIExvc3MgT2YgU2lnbmFsIChMT1MpIHRvIExFRCAqLwogCQl7IE1ESU9fTU1EX1BNQVBNRCwgQUVMMjAyMF9HUElPX0NGRytBRUwyMDIwX0dQSU9fTFNUQVQsCiAJCQkweGZmZmYsIDB4NCB9LApAQCAtNjY0LDcgKzY2NCw3IEBACiAgKi8KIHN0YXRpYyBpbnQgYWVsMjAyMF9pbnRyX2Rpc2FibGUoc3RydWN0IGNwaHkgKnBoeSkKIHsKLQlzdHJ1Y3QgcmVnX3ZhbCByZWdzW10gPSB7CisJc3RhdGljIGNvbnN0IHN0cnVjdCByZWdfdmFsIHJlZ3NbXSA9IHsKIAkJLyogcmVzZXQgImxpbmsgc3RhdHVzIiBMRUQgdG8gIm9mZiIgKi8KIAkJeyBNRElPX01NRF9QTUFQTUQsIEFFTDIwMjBfR1BJT19DVFJMLAogCQkJMHhmZmZmLCAweGIgPDwgKEFFTDIwMjBfR1BJT19MU1RBVCo0KSB9LApAQCAtNzAxLDcgKzcwMSw3IEBACiAJcmV0dXJuIGVyciA/IGVyciA6IHQzX3BoeV9sYXNpX2ludHJfY2xlYXIocGh5KTsKIH0KIAotc3RhdGljIHN0cnVjdCByZWdfdmFsIGFlbDIwMjBfcmVzZXRfcmVnc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCByZWdfdmFsIGFlbDIwMjBfcmVzZXRfcmVnc1tdID0gewogCS8qIEVycmF0dW0gIzI6IENEUkxPTCBhc3NlcnRlZCwgY2F1c2luZyBQTUEgbGluayBkb3duIHN0YXR1cyAqLwogCXsgTURJT19NTURfUE1BUE1ELCAweGMwMDMsIDB4ZmZmZiwgMHgzMTAxIH0sCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX21haW4uYyBiL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX21haW4uYwppbmRleCAwNDZkODQ2Li40ZDUzOGE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfbWFpbi5jCkBAIC0xMzU5LDYgKzEzNTksNyBAQAogc3RhdGljIGludCBvZmZsb2FkX2Nsb3NlKHN0cnVjdCB0M2NkZXYgKnRkZXYpCiB7CiAJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSB0ZGV2MmFkYXAodGRldik7CisJc3RydWN0IHQzY19kYXRhICp0ZCA9IFQzQ19EQVRBKHRkZXYpOwogCiAJaWYgKCF0ZXN0X2JpdChPRkZMT0FEX0RFVk1BUF9CSVQsICZhZGFwdGVyLT5vcGVuX2RldmljZV9tYXApKQogCQlyZXR1cm4gMDsKQEAgLTEzNjksNyArMTM3MCw3IEBACiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZ0ZGV2LT5sbGRldi0+ZGV2LmtvYmosICZvZmZsb2FkX2F0dHJfZ3JvdXApOwogCiAJLyogRmx1c2ggd29yayBzY2hlZHVsZWQgd2hpbGUgcmVsZWFzaW5nIFRJRHMgKi8KLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCWZsdXNoX3dvcmtfc3luYygmdGQtPnRpZF9yZWxlYXNlX3Rhc2spOwogCiAJdGRldi0+bGxkZXYgPSBOVUxMOwogCWN4Z2IzX3NldF9kdW1teV9vcHModGRldik7CkBAIC0zMDA2LDEyICszMDA3LDExIEBACiAJCQkJCSAgICAgcGNpX2NoYW5uZWxfc3RhdGVfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlpbnQgcmV0OwogCiAJaWYgKHN0YXRlID09IHBjaV9jaGFubmVsX2lvX3Blcm1fZmFpbHVyZSkKIAkJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7CiAKLQlyZXQgPSB0M19hZGFwdGVyX2Vycm9yKGFkYXB0ZXIsIDAsIDApOworCXQzX2FkYXB0ZXJfZXJyb3IoYWRhcHRlciwgMCwgMCk7CiAKIAkvKiBSZXF1ZXN0IGEgc2xvdCByZXNldC4gKi8KIAlyZXR1cm4gUENJX0VSU19SRVNVTFRfTkVFRF9SRVNFVDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX29mZmxvYWQuYyBiL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX29mZmxvYWQuYwppbmRleCBiY2YwNzUzLi5lZjAyYWE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19vZmZsb2FkLmMKKysrIGIvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfb2ZmbG9hZC5jCkBAIC0xMTY0LDEyICsxMTY0LDEwIEBACiAgKi8KIHZvaWQgKmN4Z2JfYWxsb2NfbWVtKHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKLQl2b2lkICpwID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwl2b2lkICpwID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKIAogCWlmICghcCkKLQkJcCA9IHZtYWxsb2Moc2l6ZSk7Ci0JaWYgKHApCi0JCW1lbXNldChwLCAwLCBzaXplKTsKKwkJcCA9IHZ6YWxsb2Moc2l6ZSk7CiAJcmV0dXJuIHA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL3QzX2h3LmMgYi9kcml2ZXJzL25ldC9jeGdiMy90M19ody5jCmluZGV4IDNhNmFkZjAuLmVjODU3OWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2IzL3QzX2h3LmMKKysrIGIvZHJpdmVycy9uZXQvY3hnYjMvdDNfaHcuYwpAQCAtMTU2Miw3ICsxNTYyLDcgQEAKIAkJezB9CiAJfTsKIAotCXN0YXRpYyBzdHJ1Y3QgaW50cl9pbmZvIHRwX2ludHJfaW5mb190M2NbXSA9IHsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGludHJfaW5mbyB0cF9pbnRyX2luZm9fdDNjW10gPSB7CiAJCXsweDFmZmZmZmZmLCAiVFAgcGFyaXR5IGVycm9yIiwgLTEsIDF9LAogCQl7Rl9GTE1SWEZMU1RFTVBUWSwgIlRQIG91dCBvZiBSeCBwYWdlcyIsIC0xLCAxfSwKIAkJe0ZfRkxNVFhGTFNURU1QVFksICJUUCBvdXQgb2YgVHggcGFnZXMiLCAtMSwgMX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiNC9jeGdiNC5oIGIvZHJpdmVycy9uZXQvY3hnYjQvY3hnYjQuaAppbmRleCAzZDQyNTNkMy4uMDFkNDllYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjQvY3hnYjQuaAorKysgYi9kcml2ZXJzL25ldC9jeGdiNC9jeGdiNC5oCkBAIC00ODIsMTEgKzQ4Miw5IEBACiAJdm9pZCBfX2lvbWVtICpyZWdzOwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwogCXN0cnVjdCBkZXZpY2UgKnBkZXZfZGV2OwotCXVuc2lnbmVkIGxvbmcgcmVnaXN0ZXJlZF9kZXZpY2VfbWFwOwogCXVuc2lnbmVkIGludCBmbjsKIAl1bnNpZ25lZCBpbnQgZmxhZ3M7CiAKLQljb25zdCBjaGFyICpuYW1lOwogCWludCBtc2dfZW5hYmxlOwogCiAJc3RydWN0IGFkYXB0ZXJfcGFyYW1zIHBhcmFtczsKQEAgLTQ5Nyw3ICs0OTUsNyBAQAogCiAJc3RydWN0IHsKIAkJdW5zaWduZWQgc2hvcnQgdmVjOwotCQljaGFyIGRlc2NbMTRdOworCQljaGFyIGRlc2NbSUZOQU1TSVogKyAxMF07CiAJfSBtc2l4X2luZm9bTUFYX0lOR1EgKyAxXTsKIAogCXN0cnVjdCBzZ2Ugc2dlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3hnYjQvY3hnYjRfbWFpbi5jIGIvZHJpdmVycy9uZXQvY3hnYjQvY3hnYjRfbWFpbi5jCmluZGV4IGY1MGJjOTguLjA1OWMxZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2I0L2N4Z2I0X21haW4uYworKysgYi9kcml2ZXJzL25ldC9jeGdiNC9jeGdiNF9tYWluLmMKQEAgLTUyMiwzOSArNTIyLDMzIEBACiAgKi8KIHN0YXRpYyB2b2lkIG5hbWVfbXNpeF92ZWNzKHN0cnVjdCBhZGFwdGVyICphZGFwKQogewotCWludCBpLCBqLCBtc2lfaWR4ID0gMiwgbiA9IHNpemVvZihhZGFwLT5tc2l4X2luZm9bMF0uZGVzYykgLSAxOworCWludCBpLCBqLCBtc2lfaWR4ID0gMiwgbiA9IHNpemVvZihhZGFwLT5tc2l4X2luZm9bMF0uZGVzYyk7CiAKIAkvKiBub24tZGF0YSBpbnRlcnJ1cHRzICovCi0Jc25wcmludGYoYWRhcC0+bXNpeF9pbmZvWzBdLmRlc2MsIG4sICIlcyIsIGFkYXAtPm5hbWUpOwotCWFkYXAtPm1zaXhfaW5mb1swXS5kZXNjW25dID0gMDsKKwlzbnByaW50ZihhZGFwLT5tc2l4X2luZm9bMF0uZGVzYywgbiwgIiVzIiwgYWRhcC0+cG9ydFswXS0+bmFtZSk7CiAKIAkvKiBGVyBldmVudHMgKi8KLQlzbnByaW50ZihhZGFwLT5tc2l4X2luZm9bMV0uZGVzYywgbiwgIiVzLUZXZXZlbnRxIiwgYWRhcC0+bmFtZSk7Ci0JYWRhcC0+bXNpeF9pbmZvWzFdLmRlc2Nbbl0gPSAwOworCXNucHJpbnRmKGFkYXAtPm1zaXhfaW5mb1sxXS5kZXNjLCBuLCAiJXMtRldldmVudHEiLAorCQkgYWRhcC0+cG9ydFswXS0+bmFtZSk7CiAKIAkvKiBFdGhlcm5ldCBxdWV1ZXMgKi8KIAlmb3JfZWFjaF9wb3J0KGFkYXAsIGopIHsKIAkJc3RydWN0IG5ldF9kZXZpY2UgKmQgPSBhZGFwLT5wb3J0W2pdOwogCQljb25zdCBzdHJ1Y3QgcG9ydF9pbmZvICpwaSA9IG5ldGRldl9wcml2KGQpOwogCi0JCWZvciAoaSA9IDA7IGkgPCBwaS0+bnFzZXRzOyBpKyssIG1zaV9pZHgrKykgeworCQlmb3IgKGkgPSAwOyBpIDwgcGktPm5xc2V0czsgaSsrLCBtc2lfaWR4KyspCiAJCQlzbnByaW50ZihhZGFwLT5tc2l4X2luZm9bbXNpX2lkeF0uZGVzYywgbiwgIiVzLVJ4JWQiLAogCQkJCSBkLT5uYW1lLCBpKTsKLQkJCWFkYXAtPm1zaXhfaW5mb1ttc2lfaWR4XS5kZXNjW25dID0gMDsKLQkJfQogCX0KIAogCS8qIG9mZmxvYWQgcXVldWVzICovCi0JZm9yX2VhY2hfb2ZsZHJ4cSgmYWRhcC0+c2dlLCBpKSB7Ci0JCXNucHJpbnRmKGFkYXAtPm1zaXhfaW5mb1ttc2lfaWR4XS5kZXNjLCBuLCAiJXMtb2ZsZCVkIiwKLQkJCSBhZGFwLT5uYW1lLCBpKTsKLQkJYWRhcC0+bXNpeF9pbmZvW21zaV9pZHgrK10uZGVzY1tuXSA9IDA7Ci0JfQotCWZvcl9lYWNoX3JkbWFyeHEoJmFkYXAtPnNnZSwgaSkgewotCQlzbnByaW50ZihhZGFwLT5tc2l4X2luZm9bbXNpX2lkeF0uZGVzYywgbiwgIiVzLXJkbWElZCIsCi0JCQkgYWRhcC0+bmFtZSwgaSk7Ci0JCWFkYXAtPm1zaXhfaW5mb1ttc2lfaWR4KytdLmRlc2Nbbl0gPSAwOwotCX0KKwlmb3JfZWFjaF9vZmxkcnhxKCZhZGFwLT5zZ2UsIGkpCisJCXNucHJpbnRmKGFkYXAtPm1zaXhfaW5mb1ttc2lfaWR4KytdLmRlc2MsIG4sICIlcy1vZmxkJWQiLAorCQkJIGFkYXAtPnBvcnRbMF0tPm5hbWUsIGkpOworCisJZm9yX2VhY2hfcmRtYXJ4cSgmYWRhcC0+c2dlLCBpKQorCQlzbnByaW50ZihhZGFwLT5tc2l4X2luZm9bbXNpX2lkeCsrXS5kZXNjLCBuLCAiJXMtcmRtYSVkIiwKKwkJCSBhZGFwLT5wb3J0WzBdLT5uYW1lLCBpKTsKIH0KIAogc3RhdGljIGludCByZXF1ZXN0X21zaXhfcXVldWVfaXJxcyhzdHJ1Y3QgYWRhcHRlciAqYWRhcCkKQEAgLTg2OCwxMiArODYyLDEwIEBACiAgKi8KIHZvaWQgKnQ0X2FsbG9jX21lbShzaXplX3Qgc2l6ZSkKIHsKLQl2b2lkICpwID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwl2b2lkICpwID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKIAogCWlmICghcCkKLQkJcCA9IHZtYWxsb2Moc2l6ZSk7Ci0JaWYgKHApCi0JCW1lbXNldChwLCAwLCBzaXplKTsKKwkJcCA9IHZ6YWxsb2Moc2l6ZSk7CiAJcmV0dXJuIHA7CiB9CiAKQEAgLTEzNzcsNyArMTM2OSwxMiBAQAogCX0gZWxzZSBpZiAodHlwZSA9PSBGV19QT1JUX1RZUEVfS1IpCiAJCXYgfD0gU1VQUE9SVEVEX0JhY2twbGFuZSB8IFNVUFBPUlRFRF8xMDAwMGJhc2VLUl9GdWxsOwogCWVsc2UgaWYgKHR5cGUgPT0gRldfUE9SVF9UWVBFX0JQX0FQKQotCQl2IHw9IFNVUFBPUlRFRF9CYWNrcGxhbmUgfCBTVVBQT1JURURfMTAwMDBiYXNlUl9GRUM7CisJCXYgfD0gU1VQUE9SVEVEX0JhY2twbGFuZSB8IFNVUFBPUlRFRF8xMDAwMGJhc2VSX0ZFQyB8CisJCSAgICAgU1VQUE9SVEVEXzEwMDAwYmFzZUtSX0Z1bGwgfCBTVVBQT1JURURfMTAwMGJhc2VLWF9GdWxsOworCWVsc2UgaWYgKHR5cGUgPT0gRldfUE9SVF9UWVBFX0JQNF9BUCkKKwkJdiB8PSBTVVBQT1JURURfQmFja3BsYW5lIHwgU1VQUE9SVEVEXzEwMDAwYmFzZVJfRkVDIHwKKwkJICAgICBTVVBQT1JURURfMTAwMDBiYXNlS1JfRnVsbCB8IFNVUFBPUlRFRF8xMDAwYmFzZUtYX0Z1bGwgfAorCQkgICAgIFNVUFBPUlRFRF8xMDAwMGJhc2VLWDRfRnVsbDsKIAllbHNlIGlmICh0eXBlID09IEZXX1BPUlRfVFlQRV9GSUJFUl9YRkkgfHwKIAkJIHR5cGUgPT0gRldfUE9SVF9UWVBFX0ZJQkVSX1hBVUkgfHwgdHlwZSA9PSBGV19QT1JUX1RZUEVfU0ZQKQogCQl2IHw9IFNVUFBPUlRFRF9GSUJSRTsKQEAgLTI2NjgsNyArMjY2NSw3IEBACiAJfSBlbHNlIHsKIAkJZXJyID0gcmVxdWVzdF9pcnEoYWRhcC0+cGRldi0+aXJxLCB0NF9pbnRyX2hhbmRsZXIoYWRhcCksCiAJCQkJICAoYWRhcC0+ZmxhZ3MgJiBVU0lOR19NU0kpID8gMCA6IElSUUZfU0hBUkVELAotCQkJCSAgYWRhcC0+bmFtZSwgYWRhcCk7CisJCQkJICBhZGFwLT5wb3J0WzBdLT5uYW1lLCBhZGFwKTsKIAkJaWYgKGVycikKIAkJCWdvdG8gaXJxX2VycjsKIAl9CkBAIC0yNzE5LDEwICsyNzE2LDYgQEAKIAkJCXJldHVybiBlcnI7CiAJfQogCi0JbmV0aWZfc2V0X3JlYWxfbnVtX3R4X3F1ZXVlcyhkZXYsIHBpLT5ucXNldHMpOwotCWVyciA9IG5ldGlmX3NldF9yZWFsX251bV9yeF9xdWV1ZXMoZGV2LCBwaS0+bnFzZXRzKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwogCWVyciA9IGxpbmtfc3RhcnQoZGV2KTsKIAlpZiAoIWVycikKIAkJbmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhkZXYpOwpAQCAtMzQ5MSw0OSArMzQ4NCw1MyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBfX2RldmluaXQgcHJpbnRfcG9ydF9pbmZvKHN0cnVjdCBhZGFwdGVyICphZGFwKQorc3RhdGljIHZvaWQgX19kZXZpbml0IHByaW50X3BvcnRfaW5mbyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0YXRpYyBjb25zdCBjaGFyICpiYXNlW10gPSB7CiAJCSJSIFhGSSIsICJSIFhBVUkiLCAiVCBTR01JSSIsICJUIFhGSSIsICJUIFhBVUkiLCAiS1g0IiwgIkNYNCIsCi0JCSJLWCIsICJLUiIsICJLUiBTRlArIiwgIktSIEZFQyIKKwkJIktYIiwgIktSIiwgIlIgU0ZQKyIsICJLUi9LWCIsICJLUi9LWC9LWDQiCiAJfTsKIAotCWludCBpOwogCWNoYXIgYnVmWzgwXTsKKwljaGFyICpidWZwID0gYnVmOwogCWNvbnN0IGNoYXIgKnNwZCA9ICIiOworCWNvbnN0IHN0cnVjdCBwb3J0X2luZm8gKnBpID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwljb25zdCBzdHJ1Y3QgYWRhcHRlciAqYWRhcCA9IHBpLT5hZGFwdGVyOwogCiAJaWYgKGFkYXAtPnBhcmFtcy5wY2kuc3BlZWQgPT0gUENJX0VYUF9MTktTVEFfQ0xTXzJfNUdCKQogCQlzcGQgPSAiIDIuNSBHVC9zIjsKIAllbHNlIGlmIChhZGFwLT5wYXJhbXMucGNpLnNwZWVkID09IFBDSV9FWFBfTE5LU1RBX0NMU181XzBHQikKIAkJc3BkID0gIiA1IEdUL3MiOwogCi0JZm9yX2VhY2hfcG9ydChhZGFwLCBpKSB7Ci0JCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBhZGFwLT5wb3J0W2ldOwotCQljb25zdCBzdHJ1Y3QgcG9ydF9pbmZvICpwaSA9IG5ldGRldl9wcml2KGRldik7Ci0JCWNoYXIgKmJ1ZnAgPSBidWY7CisJaWYgKHBpLT5saW5rX2NmZy5zdXBwb3J0ZWQgJiBGV19QT1JUX0NBUF9TUEVFRF8xMDBNKQorCQlidWZwICs9IHNwcmludGYoYnVmcCwgIjEwMC8iKTsKKwlpZiAocGktPmxpbmtfY2ZnLnN1cHBvcnRlZCAmIEZXX1BPUlRfQ0FQX1NQRUVEXzFHKQorCQlidWZwICs9IHNwcmludGYoYnVmcCwgIjEwMDAvIik7CisJaWYgKHBpLT5saW5rX2NmZy5zdXBwb3J0ZWQgJiBGV19QT1JUX0NBUF9TUEVFRF8xMEcpCisJCWJ1ZnAgKz0gc3ByaW50ZihidWZwLCAiMTBHLyIpOworCWlmIChidWZwICE9IGJ1ZikKKwkJLS1idWZwOworCXNwcmludGYoYnVmcCwgIkJBU0UtJXMiLCBiYXNlW3BpLT5wb3J0X3R5cGVdKTsKIAotCQlpZiAoIXRlc3RfYml0KGksICZhZGFwLT5yZWdpc3RlcmVkX2RldmljZV9tYXApKQotCQkJY29udGludWU7CisJbmV0ZGV2X2luZm8oZGV2LCAiQ2hlbHNpbyAlcyByZXYgJWQgJXMgJXNOSUMgUENJZSB4JWQlcyVzXG4iLAorCQkgICAgYWRhcC0+cGFyYW1zLnZwZC5pZCwgYWRhcC0+cGFyYW1zLnJldiwgYnVmLAorCQkgICAgaXNfb2ZmbG9hZChhZGFwKSA/ICJSIiA6ICIiLCBhZGFwLT5wYXJhbXMucGNpLndpZHRoLCBzcGQsCisJCSAgICAoYWRhcC0+ZmxhZ3MgJiBVU0lOR19NU0lYKSA/ICIgTVNJLVgiIDoKKwkJICAgIChhZGFwLT5mbGFncyAmIFVTSU5HX01TSSkgPyAiIE1TSSIgOiAiIik7CisJbmV0ZGV2X2luZm8oZGV2LCAiUy9OOiAlcywgRS9DOiAlc1xuIiwKKwkJICAgIGFkYXAtPnBhcmFtcy52cGQuc24sIGFkYXAtPnBhcmFtcy52cGQuZWMpOworfQogCi0JCWlmIChwaS0+bGlua19jZmcuc3VwcG9ydGVkICYgRldfUE9SVF9DQVBfU1BFRURfMTAwTSkKLQkJCWJ1ZnAgKz0gc3ByaW50ZihidWZwLCAiMTAwLyIpOwotCQlpZiAocGktPmxpbmtfY2ZnLnN1cHBvcnRlZCAmIEZXX1BPUlRfQ0FQX1NQRUVEXzFHKQotCQkJYnVmcCArPSBzcHJpbnRmKGJ1ZnAsICIxMDAwLyIpOwotCQlpZiAocGktPmxpbmtfY2ZnLnN1cHBvcnRlZCAmIEZXX1BPUlRfQ0FQX1NQRUVEXzEwRykKLQkJCWJ1ZnAgKz0gc3ByaW50ZihidWZwLCAiMTBHLyIpOwotCQlpZiAoYnVmcCAhPSBidWYpCi0JCQktLWJ1ZnA7Ci0JCXNwcmludGYoYnVmcCwgIkJBU0UtJXMiLCBiYXNlW3BpLT5wb3J0X3R5cGVdKTsKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBlbmFibGVfcGNpZV9yZWxheGVkX29yZGVyaW5nKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJdTE2IHY7CisJaW50IHBvczsKIAotCQluZXRkZXZfaW5mbyhkZXYsICJDaGVsc2lvICVzIHJldiAlZCAlcyAlc05JQyBQQ0llIHglZCVzJXNcbiIsCi0JCQkgICAgYWRhcC0+cGFyYW1zLnZwZC5pZCwgYWRhcC0+cGFyYW1zLnJldiwKLQkJCSAgICBidWYsIGlzX29mZmxvYWQoYWRhcCkgPyAiUiIgOiAiIiwKLQkJCSAgICBhZGFwLT5wYXJhbXMucGNpLndpZHRoLCBzcGQsCi0JCQkgICAgKGFkYXAtPmZsYWdzICYgVVNJTkdfTVNJWCkgPyAiIE1TSS1YIiA6Ci0JCQkgICAgKGFkYXAtPmZsYWdzICYgVVNJTkdfTVNJKSA/ICIgTVNJIiA6ICIiKTsKLQkJaWYgKGFkYXAtPm5hbWUgPT0gZGV2LT5uYW1lKQotCQkJbmV0ZGV2X2luZm8oZGV2LCAiUy9OOiAlcywgRS9DOiAlc1xuIiwKLQkJCQkgICAgYWRhcC0+cGFyYW1zLnZwZC5zbiwgYWRhcC0+cGFyYW1zLnZwZC5lYyk7CisJcG9zID0gcGNpX3BjaWVfY2FwKGRldik7CisJaWYgKHBvcyA+IDApIHsKKwkJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBwb3MgKyBQQ0lfRVhQX0RFVkNUTCwgJnYpOworCQl2IHw9IFBDSV9FWFBfREVWQ1RMX1JFTEFYX0VOOworCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBwb3MgKyBQQ0lfRVhQX0RFVkNUTCwgdik7CiAJfQogfQogCkBAIC0zNjExLDYgKzM2MDgsNyBAQAogCX0KIAogCXBjaV9lbmFibGVfcGNpZV9lcnJvcl9yZXBvcnRpbmcocGRldik7CisJZW5hYmxlX3BjaWVfcmVsYXhlZF9vcmRlcmluZyhwZGV2KTsKIAlwY2lfc2V0X21hc3RlcihwZGV2KTsKIAlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKIApAQCAtMzYzMCw3ICszNjI4LDYgQEAKIAlhZGFwdGVyLT5wZGV2ID0gcGRldjsKIAlhZGFwdGVyLT5wZGV2X2RldiA9ICZwZGV2LT5kZXY7CiAJYWRhcHRlci0+Zm4gPSBmdW5jOwotCWFkYXB0ZXItPm5hbWUgPSBwY2lfbmFtZShwZGV2KTsKIAlhZGFwdGVyLT5tc2dfZW5hYmxlID0gZGZsdF9tc2dfZW5hYmxlOwogCW1lbXNldChhZGFwdGVyLT5jaGFuX21hcCwgMHhmZiwgc2l6ZW9mKGFkYXB0ZXItPmNoYW5fbWFwKSk7CiAKQEAgLTM3MjEsMjcgKzM3MTgsMjQgQEAKIAkgKiByZWdpc3RlciBhdCBsZWFzdCBvbmUgbmV0IGRldmljZS4KIAkgKi8KIAlmb3JfZWFjaF9wb3J0KGFkYXB0ZXIsIGkpIHsKKwkJcGkgPSBhZGFwMnBpbmZvKGFkYXB0ZXIsIGkpOworCQluZXRpZl9zZXRfcmVhbF9udW1fdHhfcXVldWVzKGFkYXB0ZXItPnBvcnRbaV0sIHBpLT5ucXNldHMpOworCQluZXRpZl9zZXRfcmVhbF9udW1fcnhfcXVldWVzKGFkYXB0ZXItPnBvcnRbaV0sIHBpLT5ucXNldHMpOworCiAJCWVyciA9IHJlZ2lzdGVyX25ldGRldihhZGFwdGVyLT5wb3J0W2ldKTsKIAkJaWYgKGVycikKLQkJCWRldl93YXJuKCZwZGV2LT5kZXYsCi0JCQkJICJjYW5ub3QgcmVnaXN0ZXIgbmV0IGRldmljZSAlcywgc2tpcHBpbmdcbiIsCi0JCQkJIGFkYXB0ZXItPnBvcnRbaV0tPm5hbWUpOwotCQllbHNlIHsKLQkJCS8qCi0JCQkgKiBDaGFuZ2UgdGhlIG5hbWUgd2UgdXNlIGZvciBtZXNzYWdlcyB0byB0aGUgbmFtZSBvZgotCQkJICogdGhlIGZpcnN0IHN1Y2Nlc3NmdWxseSByZWdpc3RlcmVkIGludGVyZmFjZS4KLQkJCSAqLwotCQkJaWYgKCFhZGFwdGVyLT5yZWdpc3RlcmVkX2RldmljZV9tYXApCi0JCQkJYWRhcHRlci0+bmFtZSA9IGFkYXB0ZXItPnBvcnRbaV0tPm5hbWU7Ci0KLQkJCV9fc2V0X2JpdChpLCAmYWRhcHRlci0+cmVnaXN0ZXJlZF9kZXZpY2VfbWFwKTsKLQkJCWFkYXB0ZXItPmNoYW5fbWFwW2FkYXAycGluZm8oYWRhcHRlciwgaSktPnR4X2NoYW5dID0gaTsKLQkJfQorCQkJYnJlYWs7CisJCWFkYXB0ZXItPmNoYW5fbWFwW3BpLT50eF9jaGFuXSA9IGk7CisJCXByaW50X3BvcnRfaW5mbyhhZGFwdGVyLT5wb3J0W2ldKTsKIAl9Ci0JaWYgKCFhZGFwdGVyLT5yZWdpc3RlcmVkX2RldmljZV9tYXApIHsKKwlpZiAoaSA9PSAwKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImNvdWxkIG5vdCByZWdpc3RlciBhbnkgbmV0IGRldmljZXNcbiIpOwogCQlnb3RvIG91dF9mcmVlX2RldjsKIAl9CisJaWYgKGVycikgeworCQlkZXZfd2FybigmcGRldi0+ZGV2LCAib25seSAlZCBuZXQgZGV2aWNlcyByZWdpc3RlcmVkXG4iLCBpKTsKKwkJZXJyID0gMDsKKwl9OwogCiAJaWYgKGN4Z2I0X2RlYnVnZnNfcm9vdCkgewogCQlhZGFwdGVyLT5kZWJ1Z2ZzX3Jvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIocGNpX25hbWUocGRldiksCkBAIC0zNzUyLDggKzM3NDYsNiBAQAogCWlmIChpc19vZmZsb2FkKGFkYXB0ZXIpKQogCQlhdHRhY2hfdWxkcyhhZGFwdGVyKTsKIAotCXByaW50X3BvcnRfaW5mbyhhZGFwdGVyKTsKLQogc3Jpb3Y6CiAjaWZkZWYgQ09ORklHX1BDSV9JT1YKIAlpZiAoZnVuYyA8IEFSUkFZX1NJWkUobnVtX3ZmKSAmJiBudW1fdmZbZnVuY10gPiAwKQpAQCAtMzc5Miw3ICszNzg0LDcgQEAKIAkJCWRldGFjaF91bGRzKGFkYXB0ZXIpOwogCiAJCWZvcl9lYWNoX3BvcnQoYWRhcHRlciwgaSkKLQkJCWlmICh0ZXN0X2JpdChpLCAmYWRhcHRlci0+cmVnaXN0ZXJlZF9kZXZpY2VfbWFwKSkKKwkJCWlmIChhZGFwdGVyLT5wb3J0W2ldLT5yZWdfc3RhdGUgPT0gTkVUUkVHX1JFR0lTVEVSRUQpCiAJCQkJdW5yZWdpc3Rlcl9uZXRkZXYoYWRhcHRlci0+cG9ydFtpXSk7CiAKIAkJaWYgKGFkYXB0ZXItPmRlYnVnZnNfcm9vdCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2I0L3NnZS5jIGIvZHJpdmVycy9uZXQvY3hnYjQvc2dlLmMKaW5kZXggMTcwMjIyNTguLjMxMTQ3MWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2I0L3NnZS5jCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2I0L3NnZS5jCkBAIC01NzksNiArNTc5LDcgQEAKICAqCUBwaHlzOiB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgYWxsb2NhdGVkIHJpbmcKICAqCUBtZXRhZGF0YTogYWRkcmVzcyBvZiB0aGUgYXJyYXkgaG9sZGluZyB0aGUgU1cgc3RhdGUgZm9yIHRoZSByaW5nCiAgKglAc3RhdF9zaXplOiBleHRyYSBzcGFjZSBpbiBIVyByaW5nIGZvciBzdGF0dXMgaW5mb3JtYXRpb24KKyAqCUBub2RlOiBwcmVmZXJyZWQgbm9kZSBmb3IgbWVtb3J5IGFsbG9jYXRpb25zCiAgKgogICoJQWxsb2NhdGVzIHJlc291cmNlcyBmb3IgYW4gU0dFIGRlc2NyaXB0b3IgcmluZywgc3VjaCBhcyBUeCBxdWV1ZXMsCiAgKglmcmVlIGJ1ZmZlciBsaXN0cywgb3IgcmVzcG9uc2UgcXVldWVzLiAgRWFjaCBTR0UgcmluZyByZXF1aXJlcwpAQCAtNTkwLDcgKzU5MSw3IEBACiAgKi8KIHN0YXRpYyB2b2lkICphbGxvY19yaW5nKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IG5lbGVtLCBzaXplX3QgZWxlbV9zaXplLAogCQkJc2l6ZV90IHN3X3NpemUsIGRtYV9hZGRyX3QgKnBoeXMsIHZvaWQgKm1ldGFkYXRhLAotCQkJc2l6ZV90IHN0YXRfc2l6ZSkKKwkJCXNpemVfdCBzdGF0X3NpemUsIGludCBub2RlKQogewogCXNpemVfdCBsZW4gPSBuZWxlbSAqIGVsZW1fc2l6ZSArIHN0YXRfc2l6ZTsKIAl2b2lkICpzID0gTlVMTDsKQEAgLTU5OSw3ICs2MDAsNyBAQAogCWlmICghcCkKIAkJcmV0dXJuIE5VTEw7CiAJaWYgKHN3X3NpemUpIHsKLQkJcyA9IGtjYWxsb2MobmVsZW0sIHN3X3NpemUsIEdGUF9LRVJORUwpOworCQlzID0ga3phbGxvY19ub2RlKG5lbGVtICogc3dfc2l6ZSwgR0ZQX0tFUk5FTCwgbm9kZSk7CiAKIAkJaWYgKCFzKSB7CiAJCQlkbWFfZnJlZV9jb2hlcmVudChkZXYsIGxlbiwgcCwgKnBoeXMpOwpAQCAtMTk4Miw3ICsxOTgzLDcgQEAKIAlpcS0+c2l6ZSA9IHJvdW5kdXAoaXEtPnNpemUsIDE2KTsKIAogCWlxLT5kZXNjID0gYWxsb2NfcmluZyhhZGFwLT5wZGV2X2RldiwgaXEtPnNpemUsIGlxLT5pcWVfbGVuLCAwLAotCQkJICAgICAgJmlxLT5waHlzX2FkZHIsIE5VTEwsIDApOworCQkJICAgICAgJmlxLT5waHlzX2FkZHIsIE5VTEwsIDAsIE5VTUFfTk9fTk9ERSk7CiAJaWYgKCFpcS0+ZGVzYykKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTIwMDgsMTIgKzIwMDksMTQgQEAKIAkJZmwtPnNpemUgPSByb3VuZHVwKGZsLT5zaXplLCA4KTsKIAkJZmwtPmRlc2MgPSBhbGxvY19yaW5nKGFkYXAtPnBkZXZfZGV2LCBmbC0+c2l6ZSwgc2l6ZW9mKF9fYmU2NCksCiAJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCByeF9zd19kZXNjKSwgJmZsLT5hZGRyLAotCQkJCSAgICAgICZmbC0+c2Rlc2MsIFNUQVRfTEVOKTsKKwkJCQkgICAgICAmZmwtPnNkZXNjLCBTVEFUX0xFTiwgTlVNQV9OT19OT0RFKTsKIAkJaWYgKCFmbC0+ZGVzYykKIAkJCWdvdG8gZmxfbm9tZW07CiAKIAkJZmxzeiA9IGZsLT5zaXplIC8gOCArIFNUQVRfTEVOIC8gc2l6ZW9mKHN0cnVjdCB0eF9kZXNjKTsKIAkJYy5pcW5zX3RvX2ZsMGNvbmdlbiA9IGh0b25sKEZXX0lRX0NNRF9GTDBQQUNLRU4gfAorCQkJCQkgICAgRldfSVFfQ01EX0ZMMEZFVENIUk8oMSkgfAorCQkJCQkgICAgRldfSVFfQ01EX0ZMMERBVEFSTygxKSB8CiAJCQkJCSAgICBGV19JUV9DTURfRkwwUEFERU4pOwogCQljLmZsMGRjYWVuX3RvX2ZsMGNpZHhmdGhyZXNoID0gaHRvbnMoRldfSVFfQ01EX0ZMMEZCTUlOKDIpIHwKIAkJCQlGV19JUV9DTURfRkwwRkJNQVgoMykpOwpAQCAtMjA5Myw3ICsyMDk2LDggQEAKIAogCXR4cS0+cS5kZXNjID0gYWxsb2NfcmluZyhhZGFwLT5wZGV2X2RldiwgdHhxLT5xLnNpemUsCiAJCQlzaXplb2Yoc3RydWN0IHR4X2Rlc2MpLCBzaXplb2Yoc3RydWN0IHR4X3N3X2Rlc2MpLAotCQkJJnR4cS0+cS5waHlzX2FkZHIsICZ0eHEtPnEuc2Rlc2MsIFNUQVRfTEVOKTsKKwkJCSZ0eHEtPnEucGh5c19hZGRyLCAmdHhxLT5xLnNkZXNjLCBTVEFUX0xFTiwKKwkJCW5ldGRldl9xdWV1ZV9udW1hX25vZGVfcmVhZChuZXRkZXZxKSk7CiAJaWYgKCF0eHEtPnEuZGVzYykKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTIxMDYsNiArMjExMCw3IEBACiAJYy52aWlkX3BrZCA9IGh0b25sKEZXX0VRX0VUSF9DTURfVklJRChwaS0+dmlpZCkpOwogCWMuZmV0Y2hzem1fdG9faXFpZCA9IGh0b25sKEZXX0VRX0VUSF9DTURfSE9TVEZDTU9ERSgyKSB8CiAJCQkJICAgRldfRVFfRVRIX0NNRF9QQ0lFQ0hOKHBpLT50eF9jaGFuKSB8CisJCQkJICAgRldfRVFfRVRIX0NNRF9GRVRDSFJPKDEpIHwKIAkJCQkgICBGV19FUV9FVEhfQ01EX0lRSUQoaXFpZCkpOwogCWMuZGNhZW5fdG9fZXFzaXplID0gaHRvbmwoRldfRVFfRVRIX0NNRF9GQk1JTigyKSB8CiAJCQkJICBGV19FUV9FVEhfQ01EX0ZCTUFYKDMpIHwKQEAgLTIxNDQsNyArMjE0OSw3IEBACiAKIAl0eHEtPnEuZGVzYyA9IGFsbG9jX3JpbmcoYWRhcC0+cGRldl9kZXYsIG5lbnRyaWVzLAogCQkJCSBzaXplb2Yoc3RydWN0IHR4X2Rlc2MpLCAwLCAmdHhxLT5xLnBoeXNfYWRkciwKLQkJCQkgTlVMTCwgMCk7CisJCQkJIE5VTEwsIDAsIE5VTUFfTk9fTk9ERSk7CiAJaWYgKCF0eHEtPnEuZGVzYykKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTIxNTgsNiArMjE2Myw3IEBACiAJYy5waHlzZXFpZF9wa2QgPSBodG9ubCgwKTsKIAljLmZldGNoc3ptX3RvX2lxaWQgPSBodG9ubChGV19FUV9DVFJMX0NNRF9IT1NURkNNT0RFKDIpIHwKIAkJCQkgICBGV19FUV9DVFJMX0NNRF9QQ0lFQ0hOKHBpLT50eF9jaGFuKSB8CisJCQkJICAgRldfRVFfQ1RSTF9DTURfRkVUQ0hSTyB8CiAJCQkJICAgRldfRVFfQ1RSTF9DTURfSVFJRChpcWlkKSk7CiAJYy5kY2Flbl90b19lcXNpemUgPSBodG9ubChGV19FUV9DVFJMX0NNRF9GQk1JTigyKSB8CiAJCQkJICBGV19FUV9DVFJMX0NNRF9GQk1BWCgzKSB8CkBAIC0yMTk0LDcgKzIyMDAsOCBAQAogCiAJdHhxLT5xLmRlc2MgPSBhbGxvY19yaW5nKGFkYXAtPnBkZXZfZGV2LCB0eHEtPnEuc2l6ZSwKIAkJCXNpemVvZihzdHJ1Y3QgdHhfZGVzYyksIHNpemVvZihzdHJ1Y3QgdHhfc3dfZGVzYyksCi0JCQkmdHhxLT5xLnBoeXNfYWRkciwgJnR4cS0+cS5zZGVzYywgU1RBVF9MRU4pOworCQkJJnR4cS0+cS5waHlzX2FkZHIsICZ0eHEtPnEuc2Rlc2MsIFNUQVRfTEVOLAorCQkJTlVNQV9OT19OT0RFKTsKIAlpZiAoIXR4cS0+cS5kZXNjKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMjIwNyw2ICsyMjE0LDcgQEAKIAkJCQkgRldfRVFfT0ZMRF9DTURfRVFTVEFSVCB8IEZXX0xFTjE2KGMpKTsKIAljLmZldGNoc3ptX3RvX2lxaWQgPSBodG9ubChGV19FUV9PRkxEX0NNRF9IT1NURkNNT0RFKDIpIHwKIAkJCQkgICBGV19FUV9PRkxEX0NNRF9QQ0lFQ0hOKHBpLT50eF9jaGFuKSB8CisJCQkJICAgRldfRVFfT0ZMRF9DTURfRkVUQ0hSTygxKSB8CiAJCQkJICAgRldfRVFfT0ZMRF9DTURfSVFJRChpcWlkKSk7CiAJYy5kY2Flbl90b19lcXNpemUgPSBodG9ubChGV19FUV9PRkxEX0NNRF9GQk1JTigyKSB8CiAJCQkJICBGV19FUV9PRkxEX0NNRF9GQk1BWCgzKSB8CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiNC90NF9ody5jIGIvZHJpdmVycy9uZXQvY3hnYjQvdDRfaHcuYwppbmRleCBlOTc1MjFjLi5iOWZkOGE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiNC90NF9ody5jCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2I0L3Q0X2h3LmMKQEAgLTE4Myw3ICsxODMsNyBAQAogaW50IHQ0X3dyX21ib3hfbWVhdChzdHJ1Y3QgYWRhcHRlciAqYWRhcCwgaW50IG1ib3gsIGNvbnN0IHZvaWQgKmNtZCwgaW50IHNpemUsCiAJCSAgICB2b2lkICpycGwsIGJvb2wgc2xlZXBfb2spCiB7Ci0Jc3RhdGljIGludCBkZWxheVtdID0geworCXN0YXRpYyBjb25zdCBpbnQgZGVsYXlbXSA9IHsKIAkJMSwgMSwgMywgNSwgMTAsIDEwLCAyMCwgNTAsIDEwMCwgMjAwCiAJfTsKIApAQCAtMzMwLDE4ICszMzAsNiBAQAogCXJldHVybiAwOwogfQogCi0vKgotICogUGFydGlhbCBFRVBST00gVml0YWwgUHJvZHVjdCBEYXRhIHN0cnVjdHVyZS4gIEluY2x1ZGVzIG9ubHkgdGhlIElEIGFuZAotICogVlBELVIgaGVhZGVyLgotICovCi1zdHJ1Y3QgdDRfdnBkX2hkciB7Ci0JdTggIGlkX3RhZzsKLQl1OCAgaWRfbGVuWzJdOwotCXU4ICBpZF9kYXRhW0lEX0xFTl07Ci0JdTggIHZwZHJfdGFnOwotCXU4ICB2cGRyX2xlblsyXTsKLX07Ci0KICNkZWZpbmUgRUVQUk9NX1NUQVRfQUREUiAgIDB4N2JmYwogI2RlZmluZSBWUERfQkFTRSAgICAgICAgICAgMAogI2RlZmluZSBWUERfTEVOICAgICAgICAgICAgNTEyCkBAIC0zNzAsMjUgKzM1OCwzOCBAQAogc3RhdGljIGludCBnZXRfdnBkX3BhcmFtcyhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IHZwZF9wYXJhbXMgKnApCiB7CiAJaW50IGksIHJldDsKLQlpbnQgZWMsIHNuLCB2MjsKKwlpbnQgZWMsIHNuOwogCXU4IHZwZFtWUERfTEVOXSwgY3N1bTsKLQl1bnNpZ25lZCBpbnQgdnBkcl9sZW47Ci0JY29uc3Qgc3RydWN0IHQ0X3ZwZF9oZHIgKnY7CisJdW5zaWduZWQgaW50IHZwZHJfbGVuLCBrd19vZmZzZXQsIGlkX2xlbjsKIAogCXJldCA9IHBjaV9yZWFkX3ZwZChhZGFwdGVyLT5wZGV2LCBWUERfQkFTRSwgc2l6ZW9mKHZwZCksIHZwZCk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKLQl2ID0gKGNvbnN0IHN0cnVjdCB0NF92cGRfaGRyICopdnBkOwotCXZwZHJfbGVuID0gcGNpX3ZwZF9scmR0X3NpemUoJnYtPnZwZHJfdGFnKTsKLQlpZiAodnBkcl9sZW4gKyBzaXplb2Yoc3RydWN0IHQ0X3ZwZF9oZHIpID4gVlBEX0xFTikgeworCWlmICh2cGRbMF0gIT0gUENJX1ZQRF9MUkRUX0lEX1NUUklORykgeworCQlkZXZfZXJyKGFkYXB0ZXItPnBkZXZfZGV2LCAibWlzc2luZyBWUEQgSUQgc3RyaW5nXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWRfbGVuID0gcGNpX3ZwZF9scmR0X3NpemUodnBkKTsKKwlpZiAoaWRfbGVuID4gSURfTEVOKQorCQlpZF9sZW4gPSBJRF9MRU47CisKKwlpID0gcGNpX3ZwZF9maW5kX3RhZyh2cGQsIDAsIFZQRF9MRU4sIFBDSV9WUERfTFJEVF9ST19EQVRBKTsKKwlpZiAoaSA8IDApIHsKKwkJZGV2X2VycihhZGFwdGVyLT5wZGV2X2RldiwgIm1pc3NpbmcgVlBELVIgc2VjdGlvblxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXZwZHJfbGVuID0gcGNpX3ZwZF9scmR0X3NpemUoJnZwZFtpXSk7CisJa3dfb2Zmc2V0ID0gaSArIFBDSV9WUERfTFJEVF9UQUdfU0laRTsKKwlpZiAodnBkcl9sZW4gKyBrd19vZmZzZXQgPiBWUERfTEVOKSB7CiAJCWRldl9lcnIoYWRhcHRlci0+cGRldl9kZXYsICJiYWQgVlBELVIgbGVuZ3RoICV1XG4iLCB2cGRyX2xlbik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogI2RlZmluZSBGSU5EX1ZQRF9LVyh2YXIsIG5hbWUpIGRvIHsgXAotCXZhciA9IHBjaV92cGRfZmluZF9pbmZvX2tleXdvcmQoJnYtPmlkX3RhZywgc2l6ZW9mKHN0cnVjdCB0NF92cGRfaGRyKSwgXAotCQkJCQl2cGRyX2xlbiwgbmFtZSk7IFwKKwl2YXIgPSBwY2lfdnBkX2ZpbmRfaW5mb19rZXl3b3JkKHZwZCwga3dfb2Zmc2V0LCB2cGRyX2xlbiwgbmFtZSk7IFwKIAlpZiAodmFyIDwgMCkgeyBcCiAJCWRldl9lcnIoYWRhcHRlci0+cGRldl9kZXYsICJtaXNzaW5nIFZQRCBrZXl3b3JkICIgbmFtZSAiXG4iKTsgXAogCQlyZXR1cm4gLUVJTlZBTDsgXApAQCAtNDA4LDExICs0MDksOSBAQAogCiAJRklORF9WUERfS1coZWMsICJFQyIpOwogCUZJTkRfVlBEX0tXKHNuLCAiU04iKTsKLQlGSU5EX1ZQRF9LVyh2MiwgIlYyIik7CiAjdW5kZWYgRklORF9WUERfS1cKIAotCXAtPmNjbGsgPSBzaW1wbGVfc3RydG91bCh2cGQgKyB2MiwgTlVMTCwgMTApOwotCW1lbWNweShwLT5pZCwgdi0+aWRfZGF0YSwgSURfTEVOKTsKKwltZW1jcHkocC0+aWQsIHZwZCArIFBDSV9WUERfTFJEVF9UQUdfU0laRSwgaWRfbGVuKTsKIAlzdHJpbShwLT5pZCk7CiAJbWVtY3B5KHAtPmVjLCB2cGQgKyBlYywgRUNfTEVOKTsKIAlzdHJpbShwLT5lYyk7CkBAIC05MTksNyArOTE4LDcgQEAKICAqLwogc3RhdGljIHZvaWQgcGNpZV9pbnRyX2hhbmRsZXIoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0Jc3RhdGljIHN0cnVjdCBpbnRyX2luZm8gc3lzYnVzX2ludHJfaW5mb1tdID0geworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50cl9pbmZvIHN5c2J1c19pbnRyX2luZm9bXSA9IHsKIAkJeyBSTlBQLCAiUlhOUCBhcnJheSBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAogCQl7IFJQQ1AsICJSWFBDIGFycmF5IHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCiAJCXsgUkNJUCwgIlJYQ0lGIGFycmF5IHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCkBAIC05MjcsNyArOTI2LDcgQEAKIAkJeyBSRlRQLCAiUlhGVCBhcnJheSBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAogCQl7IDAgfQogCX07Ci0Jc3RhdGljIHN0cnVjdCBpbnRyX2luZm8gcGNpZV9wb3J0X2ludHJfaW5mb1tdID0geworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50cl9pbmZvIHBjaWVfcG9ydF9pbnRyX2luZm9bXSA9IHsKIAkJeyBUUENQLCAiVFhQQyBhcnJheSBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAogCQl7IFROUFAsICJUWE5QIGFycmF5IHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCiAJCXsgVEZUUCwgIlRYRlQgYXJyYXkgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKQEAgLTkzOSw3ICs5MzgsNyBAQAogCQl7IFREVUUsICJUeCB1bmNvcnJlY3RhYmxlIGRhdGEgZXJyb3IiLCAtMSwgMSB9LAogCQl7IDAgfQogCX07Ci0Jc3RhdGljIHN0cnVjdCBpbnRyX2luZm8gcGNpZV9pbnRyX2luZm9bXSA9IHsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGludHJfaW5mbyBwY2llX2ludHJfaW5mb1tdID0gewogCQl7IE1TSUFERFJMUEVSUiwgIk1TSSBBZGRyTCBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAogCQl7IE1TSUFERFJIUEVSUiwgIk1TSSBBZGRySCBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAogCQl7IE1TSURBVEFQRVJSLCAiTVNJIGRhdGEgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKQEAgLTk5MSw3ICs5OTAsNyBAQAogICovCiBzdGF0aWMgdm9pZCB0cF9pbnRyX2hhbmRsZXIoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0Jc3RhdGljIHN0cnVjdCBpbnRyX2luZm8gdHBfaW50cl9pbmZvW10gPSB7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRyX2luZm8gdHBfaW50cl9pbmZvW10gPSB7CiAJCXsgMHgzZmZmZmZmZiwgIlRQIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCiAJCXsgRkxNVFhGTFNURU1QVFksICJUUCBvdXQgb2YgVHggcGFnZXMiLCAtMSwgMSB9LAogCQl7IDAgfQpAQCAtMTAwOCw3ICsxMDA3LDcgQEAKIHsKIAl1NjQgdjsKIAotCXN0YXRpYyBzdHJ1Y3QgaW50cl9pbmZvIHNnZV9pbnRyX2luZm9bXSA9IHsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGludHJfaW5mbyBzZ2VfaW50cl9pbmZvW10gPSB7CiAJCXsgRVJSX0NQTF9FWENFRURfSVFFX1NJWkUsCiAJCSAgIlNHRSByZWNlaXZlZCBDUEwgZXhjZWVkaW5nIElRRSBzaXplIiwgLTEsIDEgfSwKIAkJeyBFUlJfSU5WQUxJRF9DSURYX0lOQywKQEAgLTEwNTMsNyArMTA1Miw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIGNpbV9pbnRyX2hhbmRsZXIoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0Jc3RhdGljIHN0cnVjdCBpbnRyX2luZm8gY2ltX2ludHJfaW5mb1tdID0geworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50cl9pbmZvIGNpbV9pbnRyX2luZm9bXSA9IHsKIAkJeyBQUkVGRFJPUElOVCwgIkNJTSBjb250cm9sIHJlZ2lzdGVyIHByZWZldGNoIGRyb3AiLCAtMSwgMSB9LAogCQl7IE9CUVBBUkVSUiwgIkNJTSBPQlEgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKIAkJeyBJQlFQQVJFUlIsICJDSU0gSUJRIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCkBAIC0xMDYzLDcgKzEwNjIsNyBAQAogCQl7IFRJRVFPVVRQQVJFUlJJTlQsICJDSU0gVElFUSBpbmNvbWluZyBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAogCQl7IDAgfQogCX07Ci0Jc3RhdGljIHN0cnVjdCBpbnRyX2luZm8gY2ltX3VwaW50cl9pbmZvW10gPSB7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRyX2luZm8gY2ltX3VwaW50cl9pbmZvW10gPSB7CiAJCXsgUlNWRFNQQUNFSU5ULCAiQ0lNIHJlc2VydmVkIHNwYWNlIGFjY2VzcyIsIC0xLCAxIH0sCiAJCXsgSUxMVFJBTlNJTlQsICJDSU0gaWxsZWdhbCB0cmFuc2FjdGlvbiIsIC0xLCAxIH0sCiAJCXsgSUxMV1JJTlQsICJDSU0gaWxsZWdhbCB3cml0ZSIsIC0xLCAxIH0sCkBAIC0xMTEwLDcgKzExMDksNyBAQAogICovCiBzdGF0aWMgdm9pZCB1bHByeF9pbnRyX2hhbmRsZXIoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0Jc3RhdGljIHN0cnVjdCBpbnRyX2luZm8gdWxwcnhfaW50cl9pbmZvW10gPSB7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRyX2luZm8gdWxwcnhfaW50cl9pbmZvW10gPSB7CiAJCXsgMHgxODAwMDAwLCAiVUxQUlggY29udGV4dCBlcnJvciIsIC0xLCAxIH0sCiAJCXsgMHg3ZmZmZmYsICJVTFBSWCBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAogCQl7IDAgfQpAQCAtMTEyNSw3ICsxMTI0LDcgQEAKICAqLwogc3RhdGljIHZvaWQgdWxwdHhfaW50cl9oYW5kbGVyKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQogewotCXN0YXRpYyBzdHJ1Y3QgaW50cl9pbmZvIHVscHR4X2ludHJfaW5mb1tdID0geworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50cl9pbmZvIHVscHR4X2ludHJfaW5mb1tdID0gewogCQl7IFBCTF9CT1VORF9FUlJfQ0gzLCAiVUxQVFggY2hhbm5lbCAzIFBCTCBvdXQgb2YgYm91bmRzIiwgLTEsCiAJCSAgMCB9LAogCQl7IFBCTF9CT1VORF9FUlJfQ0gyLCAiVUxQVFggY2hhbm5lbCAyIFBCTCBvdXQgb2YgYm91bmRzIiwgLTEsCkBAIC0xMTQ3LDcgKzExNDYsNyBAQAogICovCiBzdGF0aWMgdm9pZCBwbXR4X2ludHJfaGFuZGxlcihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKIHsKLQlzdGF0aWMgc3RydWN0IGludHJfaW5mbyBwbXR4X2ludHJfaW5mb1tdID0geworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50cl9pbmZvIHBtdHhfaW50cl9pbmZvW10gPSB7CiAJCXsgUENNRF9MRU5fT1ZGTDAsICJQTVRYIGNoYW5uZWwgMCBwY21kIHRvbyBsYXJnZSIsIC0xLCAxIH0sCiAJCXsgUENNRF9MRU5fT1ZGTDEsICJQTVRYIGNoYW5uZWwgMSBwY21kIHRvbyBsYXJnZSIsIC0xLCAxIH0sCiAJCXsgUENNRF9MRU5fT1ZGTDIsICJQTVRYIGNoYW5uZWwgMiBwY21kIHRvbyBsYXJnZSIsIC0xLCAxIH0sCkBAIC0xMTY5LDcgKzExNjgsNyBAQAogICovCiBzdGF0aWMgdm9pZCBwbXJ4X2ludHJfaGFuZGxlcihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKIHsKLQlzdGF0aWMgc3RydWN0IGludHJfaW5mbyBwbXJ4X2ludHJfaW5mb1tdID0geworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50cl9pbmZvIHBtcnhfaW50cl9pbmZvW10gPSB7CiAJCXsgWkVST19FX0NNRF9FUlJPUiwgIlBNUlggMC1sZW5ndGggcGNtZCIsIC0xLCAxIH0sCiAJCXsgUE1SWF9GUkFNSU5HX0VSUk9SLCAiUE1SWCBmcmFtaW5nIGVycm9yIiwgLTEsIDEgfSwKIAkJeyBPQ1NQSV9QQVJfRVJST1IsICJQTVJYIG9jc3BpIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCkBAIC0xMTg4LDcgKzExODcsNyBAQAogICovCiBzdGF0aWMgdm9pZCBjcGxzd19pbnRyX2hhbmRsZXIoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0Jc3RhdGljIHN0cnVjdCBpbnRyX2luZm8gY3Bsc3dfaW50cl9pbmZvW10gPSB7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRyX2luZm8gY3Bsc3dfaW50cl9pbmZvW10gPSB7CiAJCXsgQ0lNX09QX01BUF9QRVJSLCAiQ1BMU1cgQ0lNIG9wX21hcCBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAogCQl7IENJTV9PVkZMX0VSUk9SLCAiQ1BMU1cgQ0lNIG92ZXJmbG93IiwgLTEsIDEgfSwKIAkJeyBUUF9GUkFNSU5HX0VSUk9SLCAiQ1BMU1cgVFAgZnJhbWluZyBlcnJvciIsIC0xLCAxIH0sCkBAIC0xMjA3LDcgKzEyMDYsNyBAQAogICovCiBzdGF0aWMgdm9pZCBsZV9pbnRyX2hhbmRsZXIoc3RydWN0IGFkYXB0ZXIgKmFkYXApCiB7Ci0Jc3RhdGljIHN0cnVjdCBpbnRyX2luZm8gbGVfaW50cl9pbmZvW10gPSB7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRyX2luZm8gbGVfaW50cl9pbmZvW10gPSB7CiAJCXsgTElQTUlTUywgIkxFIExJUCBtaXNzIiwgLTEsIDAgfSwKIAkJeyBMSVAwLCAiTEUgMCBMSVAgZXJyb3IiLCAtMSwgMCB9LAogCQl7IFBBUklUWUVSUiwgIkxFIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCkBAIC0xMjI1LDExICsxMjI0LDExIEBACiAgKi8KIHN0YXRpYyB2b2lkIG1wc19pbnRyX2hhbmRsZXIoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0Jc3RhdGljIHN0cnVjdCBpbnRyX2luZm8gbXBzX3J4X2ludHJfaW5mb1tdID0geworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50cl9pbmZvIG1wc19yeF9pbnRyX2luZm9bXSA9IHsKIAkJeyAweGZmZmZmZiwgIk1QUyBSeCBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAogCQl7IDAgfQogCX07Ci0Jc3RhdGljIHN0cnVjdCBpbnRyX2luZm8gbXBzX3R4X2ludHJfaW5mb1tdID0geworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50cl9pbmZvIG1wc190eF9pbnRyX2luZm9bXSA9IHsKIAkJeyBUUEZJRk8sICJNUFMgVHggVFAgRklGTyBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAogCQl7IE5DU0lGSUZPLCAiTVBTIFR4IE5DLVNJIEZJRk8gcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKIAkJeyBUWERBVEFGSUZPLCAiTVBTIFR4IGRhdGEgRklGTyBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LApAQCAtMTIzOSwyNSArMTIzOCwyNSBAQAogCQl7IEZSTUVSUiwgIk1QUyBUeCBmcmFtaW5nIGVycm9yIiwgLTEsIDEgfSwKIAkJeyAwIH0KIAl9OwotCXN0YXRpYyBzdHJ1Y3QgaW50cl9pbmZvIG1wc190cmNfaW50cl9pbmZvW10gPSB7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRyX2luZm8gbXBzX3RyY19pbnRyX2luZm9bXSA9IHsKIAkJeyBGSUxUTUVNLCAiTVBTIFRSQyBmaWx0ZXIgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKIAkJeyBQS1RGSUZPLCAiTVBTIFRSQyBwYWNrZXQgRklGTyBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAogCQl7IE1JU0NQRVJSLCAiTVBTIFRSQyBtaXNjIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCiAJCXsgMCB9CiAJfTsKLQlzdGF0aWMgc3RydWN0IGludHJfaW5mbyBtcHNfc3RhdF9zcmFtX2ludHJfaW5mb1tdID0geworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50cl9pbmZvIG1wc19zdGF0X3NyYW1faW50cl9pbmZvW10gPSB7CiAJCXsgMHgxZmZmZmYsICJNUFMgc3RhdGlzdGljcyBTUkFNIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCiAJCXsgMCB9CiAJfTsKLQlzdGF0aWMgc3RydWN0IGludHJfaW5mbyBtcHNfc3RhdF90eF9pbnRyX2luZm9bXSA9IHsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGludHJfaW5mbyBtcHNfc3RhdF90eF9pbnRyX2luZm9bXSA9IHsKIAkJeyAweGZmZmZmLCAiTVBTIHN0YXRpc3RpY3MgVHggRklGTyBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAogCQl7IDAgfQogCX07Ci0Jc3RhdGljIHN0cnVjdCBpbnRyX2luZm8gbXBzX3N0YXRfcnhfaW50cl9pbmZvW10gPSB7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRyX2luZm8gbXBzX3N0YXRfcnhfaW50cl9pbmZvW10gPSB7CiAJCXsgMHhmZmZmZmYsICJNUFMgc3RhdGlzdGljcyBSeCBGSUZPIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCiAJCXsgMCB9CiAJfTsKLQlzdGF0aWMgc3RydWN0IGludHJfaW5mbyBtcHNfY2xzX2ludHJfaW5mb1tdID0geworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50cl9pbmZvIG1wc19jbHNfaW50cl9pbmZvW10gPSB7CiAJCXsgTUFUQ0hTUkFNLCAiTVBTIG1hdGNoIFNSQU0gcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKIAkJeyBNQVRDSFRDQU0sICJNUFMgbWF0Y2ggVENBTSBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAogCQl7IEhBU0hTUkFNLCAiTVBTIGhhc2ggU1JBTSBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LApAQCAtMTM1Niw3ICsxMzU1LDcgQEAKICAqLwogc3RhdGljIHZvaWQgc21iX2ludHJfaGFuZGxlcihzdHJ1Y3QgYWRhcHRlciAqYWRhcCkKIHsKLQlzdGF0aWMgc3RydWN0IGludHJfaW5mbyBzbWJfaW50cl9pbmZvW10gPSB7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRyX2luZm8gc21iX2ludHJfaW5mb1tdID0gewogCQl7IE1TVFRYRklGT1BBUklOVCwgIlNNQiBtYXN0ZXIgVHggRklGTyBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAogCQl7IE1TVFJYRklGT1BBUklOVCwgIlNNQiBtYXN0ZXIgUnggRklGTyBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAogCQl7IFNMVkZJRk9QQVJJTlQsICJTTUIgc2xhdmUgRklGTyBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LApAQCAtMTM3Miw3ICsxMzcxLDcgQEAKICAqLwogc3RhdGljIHZvaWQgbmNzaV9pbnRyX2hhbmRsZXIoc3RydWN0IGFkYXB0ZXIgKmFkYXApCiB7Ci0Jc3RhdGljIHN0cnVjdCBpbnRyX2luZm8gbmNzaV9pbnRyX2luZm9bXSA9IHsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGludHJfaW5mbyBuY3NpX2ludHJfaW5mb1tdID0gewogCQl7IENJTV9ETV9QUlRZX0VSUiwgIk5DLVNJIENJTSBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAogCQl7IE1QU19ETV9QUlRZX0VSUiwgIk5DLVNJIE1QUyBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAogCQl7IFRYRklGT19QUlRZX0VSUiwgIk5DLVNJIFR4IEZJRk8gcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKQEAgLTE0MTAsNyArMTQwOSw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIHBsX2ludHJfaGFuZGxlcihzdHJ1Y3QgYWRhcHRlciAqYWRhcCkKIHsKLQlzdGF0aWMgc3RydWN0IGludHJfaW5mbyBwbF9pbnRyX2luZm9bXSA9IHsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGludHJfaW5mbyBwbF9pbnRyX2luZm9bXSA9IHsKIAkJeyBGQVRBTFBFUlIsICJUNCBmYXRhbCBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAogCQl7IFBFUlJWRklELCAiUEwgVkZJRF9NQVAgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKIAkJeyAwIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2I0L3Q0ZndfYXBpLmggYi9kcml2ZXJzL25ldC9jeGdiNC90NGZ3X2FwaS5oCmluZGV4IDk0MDU4NGEuLmVkY2ZkN2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2I0L3Q0ZndfYXBpLmgKKysrIGIvZHJpdmVycy9uZXQvY3hnYjQvdDRmd19hcGkuaApAQCAtMTIzOSw2ICsxMjM5LDcgQEAKIAlGV19QT1JUX1RZUEVfS1IsCiAJRldfUE9SVF9UWVBFX1NGUCwKIAlGV19QT1JUX1RZUEVfQlBfQVAsCisJRldfUE9SVF9UWVBFX0JQNF9BUCwKIAogCUZXX1BPUlRfVFlQRV9OT05FID0gRldfUE9SVF9DTURfUFRZUEVfTUFTSwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2I0dmYvYWRhcHRlci5oIGIvZHJpdmVycy9uZXQvY3hnYjR2Zi9hZGFwdGVyLmgKaW5kZXggOGVhMDE5Ni4uNDc2NmI0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjR2Zi9hZGFwdGVyLmgKKysrIGIvZHJpdmVycy9uZXQvY3hnYjR2Zi9hZGFwdGVyLmgKQEAgLTYwLDcgKzYwLDcgQEAKIAkgKiBNU0ktWCBpbnRlcnJ1cHQgaW5kZXggdXNhZ2UuCiAJICovCiAJTVNJWF9GVwkJPSAwLAkJLyogTVNJLVggaW5kZXggZm9yIGZpcm13YXJlIFEgKi8KLQlNU0lYX05JUUZMSU5UCT0gMSwJCS8qIE1TSS1YIGluZGV4IGJhc2UgZm9yIEluZ3Jlc3MgUXMgKi8KKwlNU0lYX0lRRkxJTlQJPSAxLAkJLyogTVNJLVggaW5kZXggYmFzZSBmb3IgSW5ncmVzcyBRcyAqLwogCU1TSVhfRVhUUkFTCT0gMSwKIAlNU0lYX0VOVFJJRVMJPSBNQVhfRVRIX1FTRVRTICsgTVNJWF9FWFRSQVMsCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2I0dmYvY3hnYjR2Zl9tYWluLmMgYi9kcml2ZXJzL25ldC9jeGdiNHZmL2N4Z2I0dmZfbWFpbi5jCmluZGV4IDZiZjQ2NGEuLjNjNDAzZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2I0dmYvY3hnYjR2Zl9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvY3hnYjR2Zi9jeGdiNHZmX21haW4uYwpAQCAtMjgwLDkgKzI4MCw3IEBACiAJCWNvbnN0IHN0cnVjdCBwb3J0X2luZm8gKnBpID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAkJaW50IHFzLCBtc2k7CiAKLQkJZm9yIChxcyA9IDAsIG1zaSA9IE1TSVhfTklRRkxJTlQ7Ci0JCSAgICAgcXMgPCBwaS0+bnFzZXRzOwotCQkgICAgIHFzKyssIG1zaSsrKSB7CisJCWZvciAocXMgPSAwLCBtc2kgPSBNU0lYX0lRRkxJTlQ7IHFzIDwgcGktPm5xc2V0czsgcXMrKywgbXNpKyspIHsKIAkJCXNucHJpbnRmKGFkYXB0ZXItPm1zaXhfaW5mb1ttc2ldLmRlc2MsIG5hbWVsZW4sCiAJCQkJICIlcy0lZCIsIGRldi0+bmFtZSwgcXMpOwogCQkJYWRhcHRlci0+bXNpeF9pbmZvW21zaV0uZGVzY1tuYW1lbGVuXSA9IDA7CkBAIC0zMDksNyArMzA3LDcgQEAKIAkvKgogCSAqIEV0aGVybmV0IHF1ZXVlcy4KIAkgKi8KLQltc2kgPSBNU0lYX05JUUZMSU5UOworCW1zaSA9IE1TSVhfSVFGTElOVDsKIAlmb3JfZWFjaF9ldGhyeHEocywgcnhxKSB7CiAJCWVyciA9IHJlcXVlc3RfaXJxKGFkYXB0ZXItPm1zaXhfaW5mb1ttc2ldLnZlYywKIAkJCQkgIHQ0dmZfc2dlX2ludHJfbXNpeCwgMCwKQEAgLTMzNyw3ICszMzUsNyBAQAogCWludCByeHEsIG1zaTsKIAogCWZyZWVfaXJxKGFkYXB0ZXItPm1zaXhfaW5mb1tNU0lYX0ZXXS52ZWMsICZzLT5md19ldnRxKTsKLQltc2kgPSBNU0lYX05JUUZMSU5UOworCW1zaSA9IE1TSVhfSVFGTElOVDsKIAlmb3JfZWFjaF9ldGhyeHEocywgcnhxKQogCQlmcmVlX2lycShhZGFwdGVyLT5tc2l4X2luZm9bbXNpKytdLnZlYywKIAkJCSAmcy0+ZXRocnhxW3J4cV0ucnNwcSk7CkBAIC01MjcsNyArNTI1LDcgQEAKIAkgKiBicm91Z2h0IHVwIGF0IHdoaWNoIHBvaW50IGxvdHMgb2YgdGhpbmdzIGdldCBuYWlsZWQgZG93bgogCSAqIHBlcm1hbmVudGx5IC4uLgogCSAqLwotCW1zaXggPSBNU0lYX05JUUZMSU5UOworCW1zaXggPSBNU0lYX0lRRkxJTlQ7CiAJZm9yX2VhY2hfcG9ydChhZGFwdGVyLCBwaWR4KSB7CiAJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBhZGFwdGVyLT5wb3J0W3BpZHhdOwogCQlzdHJ1Y3QgcG9ydF9pbmZvICpwaSA9IG5ldGRldl9wcml2KGRldik7CkBAIC0xMzY1LDYgKzEzNjMsOCBAQAogCXU2NCByeF9jc3VtOwogCXU2NCB2bGFuX2V4OwogCXU2NCB2bGFuX2luczsKKwl1NjQgbHJvX3BrdHM7CisJdTY0IGxyb19tZXJnZWQ7CiB9OwogCiAvKgpAQCAtMTQwMiw2ICsxNDAyLDggQEAKIAkiUnhDc3VtR29vZCAgICAgICAgIiwKIAkiVkxBTmV4dHJhY3Rpb25zICAgIiwKIAkiVkxBTmluc2VydGlvbnMgICAgIiwKKwkiR1JPUGFja2V0cyAgICAgICAgIiwKKwkiR1JPTWVyZ2VkICAgICAgICAgIiwKIH07CiAKIC8qCkBAIC0xNDUxLDYgKzE0NTMsOCBAQAogCQlzdGF0cy0+cnhfY3N1bSArPSByeHEtPnN0YXRzLnJ4X2NzbzsKIAkJc3RhdHMtPnZsYW5fZXggKz0gcnhxLT5zdGF0cy52bGFuX2V4OwogCQlzdGF0cy0+dmxhbl9pbnMgKz0gdHhxLT52bGFuX2luczsKKwkJc3RhdHMtPmxyb19wa3RzICs9IHJ4cS0+c3RhdHMubHJvX3BrdHM7CisJCXN0YXRzLT5scm9fbWVyZ2VkICs9IHJ4cS0+c3RhdHMubHJvX21lcmdlZDsKIAl9CiB9CiAKQEAgLTE1NDcsMTQgKzE1NTEsMTkgQEAKIH0KIAogLyoKKyAqIFRDUCBTZWdtZW50YXRpb24gT2ZmbG9hZCBmbGFncyB3aGljaCB3ZSBzdXBwb3J0LgorICovCisjZGVmaW5lIFRTT19GTEFHUyAoTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzYgfCBORVRJRl9GX1RTT19FQ04pCisKKy8qCiAgKiBTZXQgVENQIFNlZ21lbnRhdGlvbiBPZmZsb2FkaW5nIGZlYXR1cmUgY2FwYWJpbGl0aWVzLgogICovCiBzdGF0aWMgaW50IGN4Z2I0dmZfc2V0X3RzbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgdHNvKQogewogCWlmICh0c28pCi0JCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzY7CisJCWRldi0+ZmVhdHVyZXMgfD0gVFNPX0ZMQUdTOwogCWVsc2UKLQkJZGV2LT5mZWF0dXJlcyAmPSB+KE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU082KTsKKwkJZGV2LT5mZWF0dXJlcyAmPSB+VFNPX0ZMQUdTOwogCXJldHVybiAwOwogfQogCkBAIC0yMDQ1LDcgKzIwNTQsNyBAQAogICogVGVhciBkb3duIHRoZSAvc3lzL2tlcm5lbC9kZWJ1Zy9jeGdiNHZmIHN1Yi1ub2RlcyBjcmVhdGVkIGFib3ZlLiAgV2UgbGVhdmUKICAqIGl0IHRvIG91ciBjYWxsZXIgdG8gdGVhciBkb3duIHRoZSBkaXJlY3RvcnkgKGRlYnVnZnNfcm9vdCkuCiAgKi8KLXN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBjbGVhbnVwX2RlYnVnZnMoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCitzdGF0aWMgdm9pZCBjbGVhbnVwX2RlYnVnZnMoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJQlVHX09OKGFkYXB0ZXItPmRlYnVnZnNfcm9vdCA9PSBOVUxMKTsKIApAQCAtMjA2Myw3ICsyMDcyLDcgQEAKICAqIGFkYXB0ZXIgcGFyYW1ldGVycyB3ZSdyZSBnb2luZyB0byBiZSB1c2luZyBhbmQgaW5pdGlhbGl6ZSBiYXNpYyBhZGFwdGVyCiAgKiBoYXJkd2FyZSBzdXBwb3J0LgogICovCi1zdGF0aWMgaW50IGFkYXBfaW5pdDAoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBhZGFwX2luaXQwKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQogewogCXN0cnVjdCB2Zl9yZXNvdXJjZXMgKnZmcmVzID0gJmFkYXB0ZXItPnBhcmFtcy52ZnJlczsKIAlzdHJ1Y3Qgc2dlX3BhcmFtcyAqc2dlX3BhcmFtcyA9ICZhZGFwdGVyLT5wYXJhbXMuc2dlOwpAQCAtMjQ5NCw3ICsyNTAzLDYgQEAKIAkJdmVyc2lvbl9wcmludGVkID0gMTsKIAl9CiAKLQogCS8qCiAJICogSW5pdGlhbGl6ZSBnZW5lcmljIFBDSSBkZXZpY2Ugc3RhdGUuCiAJICovCkBAIC0yNjMxLDcgKzI2MzksNyBAQAogCQluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOwogCQluZXRkZXYtPmlycSA9IHBkZXYtPmlycTsKIAotCQluZXRkZXYtPmZlYXR1cmVzID0gKE5FVElGX0ZfU0cgfCBORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPNiB8CisJCW5ldGRldi0+ZmVhdHVyZXMgPSAoTkVUSUZfRl9TRyB8IFRTT19GTEFHUyB8CiAJCQkJICAgIE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfSVBWNl9DU1VNIHwKIAkJCQkgICAgTkVUSUZfRl9IV19WTEFOX1RYIHwgTkVUSUZfRl9IV19WTEFOX1JYIHwKIAkJCQkgICAgTkVUSUZfRl9HUk8pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3hnYjR2Zi9zZ2UuYyBiL2RyaXZlcnMvbmV0L2N4Z2I0dmYvc2dlLmMKaW5kZXggZWNmMDc3MC4uZTBiM2QxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjR2Zi9zZ2UuYworKysgYi9kcml2ZXJzL25ldC9jeGdiNHZmL3NnZS5jCkBAIC0xNTY4LDYgKzE1NjgsOSBAQAogCX0gZWxzZQogCQlza2JfY2hlY2tzdW1fbm9uZV9hc3NlcnQoc2tiKTsKIAorCS8qCisJICogRGVsaXZlciB0aGUgcGFja2V0IHRvIHRoZSBzdGFjay4KKwkgKi8KIAlpZiAodW5saWtlbHkocGt0LT52bGFuX2V4KSkgewogCQlzdHJ1Y3Qgdmxhbl9ncm91cCAqZ3JwID0gcGktPnZsYW5fZ3JwOwogCkBAIC0yMTQzLDcgKzIxNDYsNyBAQAogCiAJCS8qCiAJCSAqIENhbGN1bGF0ZSB0aGUgc2l6ZSBvZiB0aGUgaGFyZHdhcmUgZnJlZSBsaXN0IHJpbmcgcGx1cwotCQkgKiBzdGF0dXMgcGFnZSAod2hpY2ggdGhlIFNHRSB3aWxsIHBsYWNlIGF0IHRoZSBlbmQgb2YgdGhlCisJCSAqIFN0YXR1cyBQYWdlICh3aGljaCB0aGUgU0dFIHdpbGwgcGxhY2UgYWZ0ZXIgdGhlIGVuZCBvZiB0aGUKIAkJICogZnJlZSBsaXN0IHJpbmcpIGluIEVncmVzcyBRdWV1ZSBVbml0cy4KIAkJICovCiAJCWZsc3ogPSAoZmwtPnNpemUgLyBGTF9QRVJfRVFfVU5JVCArCkBAIC0yMjQwLDggKzIyNDMsOCBAQAogCXN0cnVjdCBwb3J0X2luZm8gKnBpID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCS8qCi0JICogQ2FsY3VsYXRlIHRoZSBzaXplIG9mIHRoZSBoYXJkd2FyZSBUWCBRdWV1ZSAoaW5jbHVkaW5nIHRoZQotCSAqIHN0YXR1cyBhZ2Ugb24gdGhlIGVuZCkgaW4gdW5pdHMgb2YgVFggRGVzY3JpcHRvcnMuCisJICogQ2FsY3VsYXRlIHRoZSBzaXplIG9mIHRoZSBoYXJkd2FyZSBUWCBRdWV1ZSAoaW5jbHVkaW5nIHRoZSBTdGF0dXMKKwkgKiBQYWdlIG9uIHRoZSBlbmQgb2YgdGhlIFRYIFF1ZXVlKSBpbiB1bml0cyBvZiBUWCBEZXNjcmlwdG9ycy4KIAkgKi8KIAluZW50cmllcyA9IHR4cS0+cS5zaXplICsgU1RBVF9MRU4gLyBzaXplb2Yoc3RydWN0IHR4X2Rlc2MpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiNHZmL3Q0dmZfaHcuYyBiL2RyaXZlcnMvbmV0L2N4Z2I0dmYvdDR2Zl9ody5jCmluZGV4IDE5NTIwYWYuLmU0YmVjNzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2I0dmYvdDR2Zl9ody5jCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2I0dmYvdDR2Zl9ody5jCkBAIC0xMTYsNyArMTE2LDcgQEAKIGludCB0NHZmX3dyX21ib3hfY29yZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgY29uc3Qgdm9pZCAqY21kLCBpbnQgc2l6ZSwKIAkJICAgICAgdm9pZCAqcnBsLCBib29sIHNsZWVwX29rKQogewotCXN0YXRpYyBpbnQgZGVsYXlbXSA9IHsKKwlzdGF0aWMgY29uc3QgaW50IGRlbGF5W10gPSB7CiAJCTEsIDEsIDMsIDUsIDEwLCAxMCwgMjAsIDUwLCAxMDAKIAl9OwogCkBAIC0xMzAwLDcgKzEzMDAsNyBAQAogICovCiBpbnQgdDR2Zl9oYW5kbGVfZndfcnBsKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCBjb25zdCBfX2JlNjQgKnJwbCkKIHsKLQlzdHJ1Y3QgZndfY21kX2hkciAqY21kX2hkciA9IChzdHJ1Y3QgZndfY21kX2hkciAqKXJwbDsKKwljb25zdCBzdHJ1Y3QgZndfY21kX2hkciAqY21kX2hkciA9IChjb25zdCBzdHJ1Y3QgZndfY21kX2hkciAqKXJwbDsKIAl1OCBvcGNvZGUgPSBGV19DTURfT1BfR0VUKGJlMzJfdG9fY3B1KGNtZF9oZHItPmhpKSk7CiAKIAlzd2l0Y2ggKG9wY29kZSkgewpAQCAtMTMwOCw3ICsxMzA4LDggQEAKIAkJLyoKIAkJICogTGluay9tb2R1bGUgc3RhdGUgY2hhbmdlIG1lc3NhZ2UuCiAJCSAqLwotCQljb25zdCBzdHJ1Y3QgZndfcG9ydF9jbWQgKnBvcnRfY21kID0gKHZvaWQgKilycGw7CisJCWNvbnN0IHN0cnVjdCBmd19wb3J0X2NtZCAqcG9ydF9jbWQgPQorCQkJKGNvbnN0IHN0cnVjdCBmd19wb3J0X2NtZCAqKXJwbDsKIAkJdTMyIHdvcmQ7CiAJCWludCBhY3Rpb24sIHBvcnRfaWQsIGxpbmtfb2ssIHNwZWVkLCBmYywgcGlkeDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZGVwY2EuYyBiL2RyaXZlcnMvbmV0L2RlcGNhLmMKaW5kZXggOTFiMzg0Ni4uMWI0OGI2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZGVwY2EuYworKysgYi9kcml2ZXJzL25ldC9kZXBjYS5jCkBAIC0xNTEzLDcgKzE1MTMsNyBAQAogCXJldHVybiBhZGFwdGVyOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBkZXBjYV9pc2FfcHJvYmUgKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZSkKK3N0YXRpYyBpbnQgX19kZXZpbml0IGRlcGNhX2lzYV9wcm9iZSAoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IGRlcGNhX3ByaXZhdGUgKmxwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZG05MDAwLmMgYi9kcml2ZXJzL25ldC9kbTkwMDAuYwppbmRleCA5ZjZhZWVmLi4yZDRjNGZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kbTkwMDAuYworKysgYi9kcml2ZXJzL25ldC9kbTkwMDAuYwpAQCAtMTY3NSw3ICsxNjc1LDcgQEAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAogCXVucmVnaXN0ZXJfbmV0ZGV2KG5kZXYpOwotCWRtOTAwMF9yZWxlYXNlX2JvYXJkKHBkZXYsIChib2FyZF9pbmZvX3QgKikgbmV0ZGV2X3ByaXYobmRldikpOworCWRtOTAwMF9yZWxlYXNlX2JvYXJkKHBkZXYsIG5ldGRldl9wcml2KG5kZXYpKTsKIAlmcmVlX25ldGRldihuZGV2KTsJCS8qIGZyZWUgZGV2aWNlIHN0cnVjdHVyZSAqLwogCiAJZGV2X2RiZygmcGRldi0+ZGV2LCAicmVsZWFzZWQgYW5kIGZyZWVkIGRldmljZVxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ody5jIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfaHcuYwppbmRleCBjN2UyNDJiNi4uNzdkMDhlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfaHcuYworKysgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ody5jCkBAIC00ODkyLDExICs0ODkyLDExIEBACiAJfSBlbHNlIGlmIChody0+cGh5X3R5cGUgPT0gZTEwMDBfcGh5X2lncCkgewkvKiBGb3IgSUdQIFBIWSAqLwogCQl1MTYgY3VyX2FnY192YWx1ZTsKIAkJdTE2IG1pbl9hZ2NfdmFsdWUgPSBJR1AwMUUxMDAwX0FHQ19MRU5HVEhfVEFCTEVfU0laRTsKLQkJdTE2IGFnY19yZWdfYXJyYXlbSUdQMDFFMTAwMF9QSFlfQ0hBTk5FTF9OVU1dID0KLQkJICAgIHsgSUdQMDFFMTAwMF9QSFlfQUdDX0EsCi0JCQlJR1AwMUUxMDAwX1BIWV9BR0NfQiwKLQkJCUlHUDAxRTEwMDBfUEhZX0FHQ19DLAotCQkJSUdQMDFFMTAwMF9QSFlfQUdDX0QKKwkJc3RhdGljIGNvbnN0IHUxNiBhZ2NfcmVnX2FycmF5W0lHUDAxRTEwMDBfUEhZX0NIQU5ORUxfTlVNXSA9IHsKKwkJICAgICAgIElHUDAxRTEwMDBfUEhZX0FHQ19BLAorCQkgICAgICAgSUdQMDFFMTAwMF9QSFlfQUdDX0IsCisJCSAgICAgICBJR1AwMUUxMDAwX1BIWV9BR0NfQywKKwkJICAgICAgIElHUDAxRTEwMDBfUEhZX0FHQ19ECiAJCX07CiAJCS8qIFJlYWQgdGhlIEFHQyByZWdpc3RlcnMgZm9yIGFsbCBjaGFubmVscyAqLwogCQlmb3IgKGkgPSAwOyBpIDwgSUdQMDFFMTAwMF9QSFlfQ0hBTk5FTF9OVU07IGkrKykgewpAQCAtNTA3MSwxMSArNTA3MSwxMSBAQAogewogCXMzMiByZXRfdmFsOwogCXUxNiBwaHlfZGF0YSwgcGh5X3NhdmVkX2RhdGEsIHNwZWVkLCBkdXBsZXgsIGk7Ci0JdTE2IGRzcF9yZWdfYXJyYXlbSUdQMDFFMTAwMF9QSFlfQ0hBTk5FTF9OVU1dID0KLQkgICAgeyBJR1AwMUUxMDAwX1BIWV9BR0NfUEFSQU1fQSwKLQkJSUdQMDFFMTAwMF9QSFlfQUdDX1BBUkFNX0IsCi0JCUlHUDAxRTEwMDBfUEhZX0FHQ19QQVJBTV9DLAotCQlJR1AwMUUxMDAwX1BIWV9BR0NfUEFSQU1fRAorCXN0YXRpYyBjb25zdCB1MTYgZHNwX3JlZ19hcnJheVtJR1AwMUUxMDAwX1BIWV9DSEFOTkVMX05VTV0gPSB7CisJICAgICAgIElHUDAxRTEwMDBfUEhZX0FHQ19QQVJBTV9BLAorCSAgICAgICBJR1AwMUUxMDAwX1BIWV9BR0NfUEFSQU1fQiwKKwkgICAgICAgSUdQMDFFMTAwMF9QSFlfQUdDX1BBUkFNX0MsCisJICAgICAgIElHUDAxRTEwMDBfUEhZX0FHQ19QQVJBTV9ECiAJfTsKIAl1MTYgbWluX2xlbmd0aCwgbWF4X2xlbmd0aDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfbWFpbi5jIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfbWFpbi5jCmluZGV4IDRkNjJmN2IuLjM0MGUxMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX21haW4uYworKysgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9tYWluLmMKQEAgLTk3MSwxMSArOTcxLDEzIEBACiAJCSAqLwogCQlkbWFfc2V0X2NvaGVyZW50X21hc2soJnBkZXYtPmRldiwgRE1BX0JJVF9NQVNLKDY0KSk7CiAJCXBjaV91c2luZ19kYWMgPSAxOwotCX0gZWxzZSBpZiAoIWRtYV9zZXRfbWFzaygmcGRldi0+ZGV2LCBETUFfQklUX01BU0soMzIpKSkgewotCQlkbWFfc2V0X2NvaGVyZW50X21hc2soJnBkZXYtPmRldiwgRE1BX0JJVF9NQVNLKDMyKSk7CiAJfSBlbHNlIHsKLQkJcHJfZXJyKCJObyB1c2FibGUgRE1BIGNvbmZpZywgYWJvcnRpbmdcbiIpOwotCQlnb3RvIGVycl9kbWE7CisJCWVyciA9IGRtYV9zZXRfbWFzaygmcGRldi0+ZGV2LCBETUFfQklUX01BU0soMzIpKTsKKwkJaWYgKGVycikgeworCQkJcHJfZXJyKCJObyB1c2FibGUgRE1BIGNvbmZpZywgYWJvcnRpbmdcbiIpOworCQkJZ290byBlcnJfZG1hOworCQl9CisJCWRtYV9zZXRfY29oZXJlbnRfbWFzaygmcGRldi0+ZGV2LCBETUFfQklUX01BU0soMzIpKTsKIAl9CiAKIAluZXRkZXYtPm5ldGRldl9vcHMgPSAmZTEwMDBfbmV0ZGV2X29wczsKQEAgLTE0MjksMTMgKzE0MzEsMTIgQEAKIAlpbnQgc2l6ZTsKIAogCXNpemUgPSBzaXplb2Yoc3RydWN0IGUxMDAwX2J1ZmZlcikgKiB0eGRyLT5jb3VudDsKLQl0eGRyLT5idWZmZXJfaW5mbyA9IHZtYWxsb2Moc2l6ZSk7CisJdHhkci0+YnVmZmVyX2luZm8gPSB2emFsbG9jKHNpemUpOwogCWlmICghdHhkci0+YnVmZmVyX2luZm8pIHsKIAkJZV9lcnIocHJvYmUsICJVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgVHggZGVzY3JpcHRvciAiCiAJCSAgICAgICJyaW5nXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCW1lbXNldCh0eGRyLT5idWZmZXJfaW5mbywgMCwgc2l6ZSk7CiAKIAkvKiByb3VuZCB1cCB0byBuZWFyZXN0IDRLICovCiAKQEAgLTE2MjUsMTMgKzE2MjYsMTIgQEAKIAlpbnQgc2l6ZSwgZGVzY19sZW47CiAKIAlzaXplID0gc2l6ZW9mKHN0cnVjdCBlMTAwMF9idWZmZXIpICogcnhkci0+Y291bnQ7Ci0Jcnhkci0+YnVmZmVyX2luZm8gPSB2bWFsbG9jKHNpemUpOworCXJ4ZHItPmJ1ZmZlcl9pbmZvID0gdnphbGxvYyhzaXplKTsKIAlpZiAoIXJ4ZHItPmJ1ZmZlcl9pbmZvKSB7CiAJCWVfZXJyKHByb2JlLCAiVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIFJ4IGRlc2NyaXB0b3IgIgogCQkgICAgICAicmluZ1xuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQltZW1zZXQocnhkci0+YnVmZmVyX2luZm8sIDAsIHNpemUpOwogCiAJZGVzY19sZW4gPSBzaXplb2Yoc3RydWN0IGUxMDAwX3J4X2Rlc2MpOwogCkBAIC0yNzI2LDcgKzI3MjYsNyBAQAogCQlicmVhazsKIAl9CiAKLQljc3MgPSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpOworCWNzcyA9IHNrYl9jaGVja3N1bV9zdGFydF9vZmZzZXQoc2tiKTsKIAogCWkgPSB0eF9yaW5nLT5uZXh0X3RvX3VzZTsKIAlidWZmZXJfaW5mbyA9ICZ0eF9yaW5nLT5idWZmZXJfaW5mb1tpXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX3BhcmFtLmMgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9wYXJhbS5jCmluZGV4IDEwZDhkOTguLjEzMDFlYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX3BhcmFtLmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfcGFyYW0uYwpAQCAtMzUyLDEyICszNTIsMTMgQEAKIAl9CiAJeyAvKiBGbG93IENvbnRyb2wgKi8KIAotCQlzdHJ1Y3QgZTEwMDBfb3B0X2xpc3QgZmNfbGlzdFtdID0KLQkJCXt7IEUxMDAwX0ZDX05PTkUsICAgICJGbG93IENvbnRyb2wgRGlzYWJsZWQiIH0sCi0JCQkgeyBFMTAwMF9GQ19SWF9QQVVTRSwiRmxvdyBDb250cm9sIFJlY2VpdmUgT25seSIgfSwKLQkJCSB7IEUxMDAwX0ZDX1RYX1BBVVNFLCJGbG93IENvbnRyb2wgVHJhbnNtaXQgT25seSIgfSwKLQkJCSB7IEUxMDAwX0ZDX0ZVTEwsICAgICJGbG93IENvbnRyb2wgRW5hYmxlZCIgfSwKLQkJCSB7IEUxMDAwX0ZDX0RFRkFVTFQsICJGbG93IENvbnRyb2wgSGFyZHdhcmUgRGVmYXVsdCIgfX07CisJCXN0YXRpYyBjb25zdCBzdHJ1Y3QgZTEwMDBfb3B0X2xpc3QgZmNfbGlzdFtdID0geworCQkgICAgICAgeyBFMTAwMF9GQ19OT05FLCAiRmxvdyBDb250cm9sIERpc2FibGVkIiB9LAorCQkgICAgICAgeyBFMTAwMF9GQ19SWF9QQVVTRSwgIkZsb3cgQ29udHJvbCBSZWNlaXZlIE9ubHkiIH0sCisJCSAgICAgICB7IEUxMDAwX0ZDX1RYX1BBVVNFLCAiRmxvdyBDb250cm9sIFRyYW5zbWl0IE9ubHkiIH0sCisJCSAgICAgICB7IEUxMDAwX0ZDX0ZVTEwsICJGbG93IENvbnRyb2wgRW5hYmxlZCIgfSwKKwkJICAgICAgIHsgRTEwMDBfRkNfREVGQVVMVCwgIkZsb3cgQ29udHJvbCBIYXJkd2FyZSBEZWZhdWx0IiB9CisJCX07CiAKIAkJb3B0ID0gKHN0cnVjdCBlMTAwMF9vcHRpb24pIHsKIAkJCS50eXBlID0gbGlzdF9vcHRpb24sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMGUvODI1NzEuYyBiL2RyaXZlcnMvbmV0L2UxMDAwZS84MjU3MS5jCmluZGV4IDcyMzZmMWEuLmU1N2U0MDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS84MjU3MS5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwZS84MjU3MS5jCkBAIC01Miw2ICs1Miw3IEBACiAJCQkgICAgICAoSURfTEVEX0RFRjFfREVGMikpCiAKICNkZWZpbmUgRTEwMDBfR0NSX0wxX0FDVF9XSVRIT1VUX0wwU19SWCAweDA4MDAwMDAwCisjZGVmaW5lIEFOX1JFVFJZX0NPVU5UICAgICAgICAgIDUgLyogQXV0b25lZyBSZXRyeSBDb3VudCB2YWx1ZSAqLwogI2RlZmluZSBFMTAwMF9CQVNFMTAwMFRfU1RBVFVTICAgICAgICAgIDEwCiAjZGVmaW5lIEUxMDAwX0lETEVfRVJST1JfQ09VTlRfTUFTSyAgICAgMHhGRgogI2RlZmluZSBFMTAwMF9SRUNFSVZFX0VSUk9SX0NPVU5URVIgICAgIDIxCkBAIC03NCw2ICs3NSw5IEBACiBzdGF0aWMgczMyIGUxMDAwX2xlZF9vbl84MjU3NChzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIHN0YXRpYyB2b2lkIGUxMDAwX3B1dF9od19zZW1hcGhvcmVfODI1NzEoc3RydWN0IGUxMDAwX2h3ICpodyk7CiBzdGF0aWMgdm9pZCBlMTAwMF9wb3dlcl9kb3duX3BoeV9jb3BwZXJfODI1NzEoc3RydWN0IGUxMDAwX2h3ICpodyk7CitzdGF0aWMgdm9pZCBlMTAwMF9wdXRfaHdfc2VtYXBob3JlXzgyNTczKHN0cnVjdCBlMTAwMF9odyAqaHcpOworc3RhdGljIHMzMiBlMTAwMF9nZXRfaHdfc2VtYXBob3JlXzgyNTc0KHN0cnVjdCBlMTAwMF9odyAqaHcpOworc3RhdGljIHZvaWQgZTEwMDBfcHV0X2h3X3NlbWFwaG9yZV84MjU3NChzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIAogLyoqCiAgKiAgZTEwMDBfaW5pdF9waHlfcGFyYW1zXzgyNTcxIC0gSW5pdCBQSFkgZnVuYyBwdHJzLgpAQCAtMTA3LDYgKzExMSw4IEBACiAJY2FzZSBlMTAwMF84MjU3NDoKIAljYXNlIGUxMDAwXzgyNTgzOgogCQlwaHktPnR5cGUJCSA9IGUxMDAwX3BoeV9ibTsKKwkJcGh5LT5vcHMuYWNxdWlyZSA9IGUxMDAwX2dldF9od19zZW1hcGhvcmVfODI1NzQ7CisJCXBoeS0+b3BzLnJlbGVhc2UgPSBlMTAwMF9wdXRfaHdfc2VtYXBob3JlXzgyNTc0OwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUUxMDAwX0VSUl9QSFk7CkBAIC0yMDAsNiArMjA2LDE3IEBACiAJCWJyZWFrOwogCX0KIAorCS8qIEZ1bmN0aW9uIFBvaW50ZXJzICovCisJc3dpdGNoIChody0+bWFjLnR5cGUpIHsKKwljYXNlIGUxMDAwXzgyNTc0OgorCWNhc2UgZTEwMDBfODI1ODM6CisJCW52bS0+b3BzLmFjcXVpcmUgPSBlMTAwMF9nZXRfaHdfc2VtYXBob3JlXzgyNTc0OworCQludm0tPm9wcy5yZWxlYXNlID0gZTEwMDBfcHV0X2h3X3NlbWFwaG9yZV84MjU3NDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTU0Miw2ICs1NTksOTQgQEAKIAlzd3NtICY9IH4oRTEwMDBfU1dTTV9TTUJJIHwgRTEwMDBfU1dTTV9TV0VTTUJJKTsKIAlldzMyKFNXU00sIHN3c20pOwogfQorLyoqCisgKiAgZTEwMDBfZ2V0X2h3X3NlbWFwaG9yZV84MjU3MyAtIEFjcXVpcmUgaGFyZHdhcmUgc2VtYXBob3JlCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqCisgKiAgQWNxdWlyZSB0aGUgSFcgc2VtYXBob3JlIGR1cmluZyByZXNldC4KKyAqCisgKiovCitzdGF0aWMgczMyIGUxMDAwX2dldF9od19zZW1hcGhvcmVfODI1NzMoc3RydWN0IGUxMDAwX2h3ICpodykKK3sKKwl1MzIgZXh0Y25mX2N0cmw7CisJczMyIHJldF92YWwgPSAwOworCXMzMiBpID0gMDsKKworCWV4dGNuZl9jdHJsID0gZXIzMihFWFRDTkZfQ1RSTCk7CisJZXh0Y25mX2N0cmwgfD0gRTEwMDBfRVhUQ05GX0NUUkxfTURJT19TV19PV05FUlNISVA7CisJZG8geworCQlldzMyKEVYVENORl9DVFJMLCBleHRjbmZfY3RybCk7CisJCWV4dGNuZl9jdHJsID0gZXIzMihFWFRDTkZfQ1RSTCk7CisKKwkJaWYgKGV4dGNuZl9jdHJsICYgRTEwMDBfRVhUQ05GX0NUUkxfTURJT19TV19PV05FUlNISVApCisJCQlicmVhazsKKworCQlleHRjbmZfY3RybCB8PSBFMTAwMF9FWFRDTkZfQ1RSTF9NRElPX1NXX09XTkVSU0hJUDsKKworCQltc2xlZXAoMik7CisJCWkrKzsKKwl9IHdoaWxlIChpIDwgTURJT19PV05FUlNISVBfVElNRU9VVCk7CisKKwlpZiAoaSA9PSBNRElPX09XTkVSU0hJUF9USU1FT1VUKSB7CisJCS8qIFJlbGVhc2Ugc2VtYXBob3JlcyAqLworCQllMTAwMF9wdXRfaHdfc2VtYXBob3JlXzgyNTczKGh3KTsKKwkJZV9kYmcoIkRyaXZlciBjYW4ndCBhY2Nlc3MgdGhlIFBIWVxuIik7CisJCXJldF92YWwgPSAtRTEwMDBfRVJSX1BIWTsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGUxMDAwX3B1dF9od19zZW1hcGhvcmVfODI1NzMgLSBSZWxlYXNlIGhhcmR3YXJlIHNlbWFwaG9yZQorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKgorICogIFJlbGVhc2UgaGFyZHdhcmUgc2VtYXBob3JlIHVzZWQgZHVyaW5nIHJlc2V0LgorICoKKyAqKi8KK3N0YXRpYyB2b2lkIGUxMDAwX3B1dF9od19zZW1hcGhvcmVfODI1NzMoc3RydWN0IGUxMDAwX2h3ICpodykKK3sKKwl1MzIgZXh0Y25mX2N0cmw7CisKKwlleHRjbmZfY3RybCA9IGVyMzIoRVhUQ05GX0NUUkwpOworCWV4dGNuZl9jdHJsICY9IH5FMTAwMF9FWFRDTkZfQ1RSTF9NRElPX1NXX09XTkVSU0hJUDsKKwlldzMyKEVYVENORl9DVFJMLCBleHRjbmZfY3RybCk7Cit9CisKK3N0YXRpYyBERUZJTkVfTVVURVgoc3dmbGFnX211dGV4KTsKKworLyoqCisgKiAgZTEwMDBfZ2V0X2h3X3NlbWFwaG9yZV84MjU3NCAtIEFjcXVpcmUgaGFyZHdhcmUgc2VtYXBob3JlCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqCisgKiAgQWNxdWlyZSB0aGUgSFcgc2VtYXBob3JlIHRvIGFjY2VzcyB0aGUgUEhZIG9yIE5WTS4KKyAqCisgKiovCitzdGF0aWMgczMyIGUxMDAwX2dldF9od19zZW1hcGhvcmVfODI1NzQoc3RydWN0IGUxMDAwX2h3ICpodykKK3sKKwlzMzIgcmV0X3ZhbDsKKworCW11dGV4X2xvY2soJnN3ZmxhZ19tdXRleCk7CisJcmV0X3ZhbCA9IGUxMDAwX2dldF9od19zZW1hcGhvcmVfODI1NzMoaHcpOworCWlmIChyZXRfdmFsKQorCQltdXRleF91bmxvY2soJnN3ZmxhZ19tdXRleCk7CisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGUxMDAwX3B1dF9od19zZW1hcGhvcmVfODI1NzQgLSBSZWxlYXNlIGhhcmR3YXJlIHNlbWFwaG9yZQorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKgorICogIFJlbGVhc2UgaGFyZHdhcmUgc2VtYXBob3JlIHVzZWQgdG8gYWNjZXNzIHRoZSBQSFkgb3IgTlZNCisgKgorICoqLworc3RhdGljIHZvaWQgZTEwMDBfcHV0X2h3X3NlbWFwaG9yZV84MjU3NChzdHJ1Y3QgZTEwMDBfaHcgKmh3KQoreworCWUxMDAwX3B1dF9od19zZW1hcGhvcmVfODI1NzMoaHcpOworCW11dGV4X3VubG9jaygmc3dmbGFnX211dGV4KTsKK30KIAogLyoqCiAgKiAgZTEwMDBfYWNxdWlyZV9udm1fODI1NzEgLSBSZXF1ZXN0IGZvciBhY2Nlc3MgdG8gdGhlIEVFUFJPTQpAQCAtNTYyLDggKzY2Nyw2IEBACiAKIAlzd2l0Y2ggKGh3LT5tYWMudHlwZSkgewogCWNhc2UgZTEwMDBfODI1NzM6Ci0JY2FzZSBlMTAwMF84MjU3NDoKLQljYXNlIGUxMDAwXzgyNTgzOgogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXRfdmFsID0gZTEwMDBlX2FjcXVpcmVfbnZtKGh3KTsKQEAgLTg1Myw5ICs5NTYsOCBAQAogICoqLwogc3RhdGljIHMzMiBlMTAwMF9yZXNldF9od184MjU3MShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewotCXUzMiBjdHJsLCBleHRjbmZfY3RybCwgY3RybF9leHQsIGljcjsKKwl1MzIgY3RybCwgY3RybF9leHQsIGljcjsKIAlzMzIgcmV0X3ZhbDsKLQl1MTYgaSA9IDA7CiAKIAkvKgogCSAqIFByZXZlbnQgdGhlIFBDSS1FIGJ1cyBmcm9tIHN0aWNraW5nIGlmIHRoZXJlIGlzIG5vIFRMUCBjb25uZWN0aW9uCkBAIC04ODAsMzMgKzk4MiwzMyBAQAogCSAqLwogCXN3aXRjaCAoaHctPm1hYy50eXBlKSB7CiAJY2FzZSBlMTAwMF84MjU3MzoKKwkJcmV0X3ZhbCA9IGUxMDAwX2dldF9od19zZW1hcGhvcmVfODI1NzMoaHcpOworCQlicmVhazsKIAljYXNlIGUxMDAwXzgyNTc0OgogCWNhc2UgZTEwMDBfODI1ODM6Ci0JCWV4dGNuZl9jdHJsID0gZXIzMihFWFRDTkZfQ1RSTCk7Ci0JCWV4dGNuZl9jdHJsIHw9IEUxMDAwX0VYVENORl9DVFJMX01ESU9fU1dfT1dORVJTSElQOwotCi0JCWRvIHsKLQkJCWV3MzIoRVhUQ05GX0NUUkwsIGV4dGNuZl9jdHJsKTsKLQkJCWV4dGNuZl9jdHJsID0gZXIzMihFWFRDTkZfQ1RSTCk7Ci0KLQkJCWlmIChleHRjbmZfY3RybCAmIEUxMDAwX0VYVENORl9DVFJMX01ESU9fU1dfT1dORVJTSElQKQotCQkJCWJyZWFrOwotCi0JCQlleHRjbmZfY3RybCB8PSBFMTAwMF9FWFRDTkZfQ1RSTF9NRElPX1NXX09XTkVSU0hJUDsKLQotCQkJbXNsZWVwKDIpOwotCQkJaSsrOwotCQl9IHdoaWxlIChpIDwgTURJT19PV05FUlNISVBfVElNRU9VVCk7CisJCXJldF92YWwgPSBlMTAwMF9nZXRfaHdfc2VtYXBob3JlXzgyNTc0KGh3KTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQorCWlmIChyZXRfdmFsKQorCQllX2RiZygiQ2Fubm90IGFjcXVpcmUgTURJTyBvd25lcnNoaXBcbiIpOwogCiAJY3RybCA9IGVyMzIoQ1RSTCk7CiAKIAllX2RiZygiSXNzdWluZyBhIGdsb2JhbCByZXNldCB0byBNQUNcbiIpOwogCWV3MzIoQ1RSTCwgY3RybCB8IEUxMDAwX0NUUkxfUlNUKTsKIAorCS8qIE11c3QgcmVsZWFzZSBNRElPIG93bmVyc2hpcCBhbmQgbXV0ZXggYWZ0ZXIgTUFDIHJlc2V0LiAqLworCXN3aXRjaCAoaHctPm1hYy50eXBlKSB7CisJY2FzZSBlMTAwMF84MjU3NDoKKwljYXNlIGUxMDAwXzgyNTgzOgorCQllMTAwMF9wdXRfaHdfc2VtYXBob3JlXzgyNTc0KGh3KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCiAJaWYgKGh3LT5udm0udHlwZSA9PSBlMTAwMF9udm1fZmxhc2hfaHcpIHsKIAkJdWRlbGF5KDEwKTsKIAkJY3RybF9leHQgPSBlcjMyKENUUkxfRVhUKTsKQEAgLTE0MDIsNiArMTUwNCw4IEBACiAJdTMyIHJ4Y3c7CiAJdTMyIGN0cmw7CiAJdTMyIHN0YXR1czsKKwl1MzIgdHhjdzsKKwl1MzIgaTsKIAlzMzIgcmV0X3ZhbCA9IDA7CiAKIAljdHJsID0gZXIzMihDVFJMKTsKQEAgLTE0MjIsOCArMTUyNiwxMCBAQAogCQkJCSAgICBlMTAwMF9zZXJkZXNfbGlua19hdXRvbmVnX3Byb2dyZXNzOwogCQkJCW1hYy0+c2VyZGVzX2hhc19saW5rID0gZmFsc2U7CiAJCQkJZV9kYmcoIkFOX1VQICAgICAtPiBBTl9QUk9HXG4iKTsKKwkJCX0gZWxzZSB7CisJCQkJbWFjLT5zZXJkZXNfaGFzX2xpbmsgPSB0cnVlOwogCQkJfQotCQlicmVhazsKKwkJCWJyZWFrOwogCiAJCWNhc2UgZTEwMDBfc2VyZGVzX2xpbmtfZm9yY2VkX3VwOgogCQkJLyoKQEAgLTE0MzEsOCArMTUzNywxMCBAQAogCQkJICogYXV0by1uZWdvdGlhdGlvbiBpbiB0aGUgVFhDVyByZWdpc3RlciBhbmQgZGlzYWJsZQogCQkJICogZm9yY2VkIGxpbmsgaW4gdGhlIERldmljZSBDb250cm9sIHJlZ2lzdGVyIGluIGFuCiAJCQkgKiBhdHRlbXB0IHRvIGF1dG8tbmVnb3RpYXRlIHdpdGggb3VyIGxpbmsgcGFydG5lci4KKwkJCSAqIElmIHRoZSBwYXJ0bmVyIGNvZGUgd29yZCBpcyBudWxsLCBzdG9wIGZvcmNpbmcKKwkJCSAqIGFuZCByZXN0YXJ0IGF1dG8gbmVnb3RpYXRpb24uCiAJCQkgKi8KLQkJCWlmIChyeGN3ICYgRTEwMDBfUlhDV19DKSB7CisJCQlpZiAoKHJ4Y3cgJiBFMTAwMF9SWENXX0MpIHx8ICEocnhjdyAmIEUxMDAwX1JYQ1dfQ1cpKSAgewogCQkJCS8qIEVuYWJsZSBhdXRvbmVnLCBhbmQgdW5mb3JjZSBsaW5rIHVwICovCiAJCQkJZXczMihUWENXLCBtYWMtPnR4Y3cpOwogCQkJCWV3MzIoQ1RSTCwgKGN0cmwgJiB+RTEwMDBfQ1RSTF9TTFUpKTsKQEAgLTE0NDAsNiArMTU0OCw4IEBACiAJCQkJICAgIGUxMDAwX3NlcmRlc19saW5rX2F1dG9uZWdfcHJvZ3Jlc3M7CiAJCQkJbWFjLT5zZXJkZXNfaGFzX2xpbmsgPSBmYWxzZTsKIAkJCQllX2RiZygiRk9SQ0VEX1VQIC0+IEFOX1BST0dcbiIpOworCQkJfSBlbHNlIHsKKwkJCQltYWMtPnNlcmRlc19oYXNfbGluayA9IHRydWU7CiAJCQl9CiAJCQlicmVhazsKIApAQCAtMTQ5NSw2ICsxNjA1LDcgQEAKIAkJCWV3MzIoQ1RSTCwgKGN0cmwgJiB+RTEwMDBfQ1RSTF9TTFUpKTsKIAkJCW1hYy0+c2VyZGVzX2xpbmtfc3RhdGUgPQogCQkJICAgIGUxMDAwX3NlcmRlc19saW5rX2F1dG9uZWdfcHJvZ3Jlc3M7CisJCQltYWMtPnNlcmRlc19oYXNfbGluayA9IGZhbHNlOwogCQkJZV9kYmcoIkRPV04gICAgICAtPiBBTl9QUk9HXG4iKTsKIAkJCWJyZWFrOwogCQl9CkBAIC0xNTA1LDE2ICsxNjE2LDMyIEBACiAJCQllX2RiZygiQU5ZU1RBVEUgIC0+IERPV05cbiIpOwogCQl9IGVsc2UgewogCQkJLyoKLQkJCSAqIFdlIGhhdmUgc3luYywgYW5kIGNhbiB0b2xlcmF0ZSBvbmUgaW52YWxpZCAoSVYpCi0JCQkgKiBjb2Rld29yZCBiZWZvcmUgZGVjbGFyaW5nIGxpbmsgZG93biwgc28gcmVyZWFkCi0JCQkgKiB0byBsb29rIGFnYWluLgorCQkJICogQ2hlY2sgc2V2ZXJhbCB0aW1lcywgaWYgU3luYyBhbmQgQ29uZmlnCisJCQkgKiBib3RoIGFyZSBjb25zaXN0ZW50bHkgMSB0aGVuIHNpbXBseSBpZ25vcmUKKwkJCSAqIHRoZSBJbnZhbGlkIGJpdCBhbmQgcmVzdGFydCBBdXRvbmVnCiAJCQkgKi8KLQkJCXVkZWxheSgxMCk7Ci0JCQlyeGN3ID0gZXIzMihSWENXKTsKLQkJCWlmIChyeGN3ICYgRTEwMDBfUlhDV19JVikgewotCQkJCW1hYy0+c2VyZGVzX2xpbmtfc3RhdGUgPSBlMTAwMF9zZXJkZXNfbGlua19kb3duOworCQkJZm9yIChpID0gMDsgaSA8IEFOX1JFVFJZX0NPVU5UOyBpKyspIHsKKwkJCQl1ZGVsYXkoMTApOworCQkJCXJ4Y3cgPSBlcjMyKFJYQ1cpOworCQkJCWlmICgocnhjdyAmIEUxMDAwX1JYQ1dfSVYpICYmCisJCQkJICAgICEoKHJ4Y3cgJiBFMTAwMF9SWENXX1NZTkNIKSAmJgorCQkJCSAgICAgIChyeGN3ICYgRTEwMDBfUlhDV19DKSkpIHsKKwkJCQkJbWFjLT5zZXJkZXNfaGFzX2xpbmsgPSBmYWxzZTsKKwkJCQkJbWFjLT5zZXJkZXNfbGlua19zdGF0ZSA9CisJCQkJCSAgICBlMTAwMF9zZXJkZXNfbGlua19kb3duOworCQkJCQllX2RiZygiQU5ZU1RBVEUgIC0+IERPV05cbiIpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChpID09IEFOX1JFVFJZX0NPVU5UKSB7CisJCQkJdHhjdyA9IGVyMzIoVFhDVyk7CisJCQkJdHhjdyB8PSBFMTAwMF9UWENXX0FORTsKKwkJCQlldzMyKFRYQ1csIHR4Y3cpOworCQkJCW1hYy0+c2VyZGVzX2xpbmtfc3RhdGUgPQorCQkJCSAgICBlMTAwMF9zZXJkZXNfbGlua19hdXRvbmVnX3Byb2dyZXNzOwogCQkJCW1hYy0+c2VyZGVzX2hhc19saW5rID0gZmFsc2U7Ci0JCQkJZV9kYmcoIkFOWVNUQVRFICAtPiBET1dOXG4iKTsKKwkJCQllX2RiZygiQU5ZU1RBVEUgIC0+IEFOX1BST0dcbiIpOwogCQkJfQogCQl9CiAJfQpAQCAtMTg5Nyw3ICsyMDI0LDcgQEAKIAkJCQkgIHwgRkxBR19IQVNfQU1UCiAJCQkJICB8IEZMQUdfSEFTX0NUUkxFWFRfT05fTE9BRCwKIAkuZmxhZ3MyCQkJICA9IEZMQUcyX0NIRUNLX1BIWV9IQU5HLAotCS5wYmEJCQk9IDM2LAorCS5wYmEJCQk9IDMyLAogCS5tYXhfaHdfZnJhbWVfc2l6ZQk9IERFRkFVTFRfSlVNQk8sCiAJLmdldF92YXJpYW50cwkJPSBlMTAwMF9nZXRfdmFyaWFudHNfODI1NzEsCiAJLm1hY19vcHMJCT0gJmU4MjU3MV9tYWNfb3BzLApAQCAtMTkxNCw3ICsyMDQxLDcgQEAKIAkJCQkgIHwgRkxBR19IQVNfU01BUlRfUE9XRVJfRE9XTgogCQkJCSAgfCBGTEFHX0hBU19BTVQKIAkJCQkgIHwgRkxBR19IQVNfQ1RSTEVYVF9PTl9MT0FELAotCS5wYmEJCQk9IDM2LAorCS5wYmEJCQk9IDMyLAogCS5tYXhfaHdfZnJhbWVfc2l6ZQk9IEVUSF9GUkFNRV9MRU4gKyBFVEhfRkNTX0xFTiwKIAkuZ2V0X3ZhcmlhbnRzCQk9IGUxMDAwX2dldF92YXJpYW50c184MjU3MSwKIAkubWFjX29wcwkJPSAmZTgyNTcxX21hY19vcHMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMGUvZGVmaW5lcy5oIGIvZHJpdmVycy9uZXQvZTEwMDBlL2RlZmluZXMuaAppbmRleCBkM2Y3YTljLi43MjQ1ZGMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMGUvZGVmaW5lcy5oCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9kZWZpbmVzLmgKQEAgLTQ4OCw2ICs0ODgsOSBAQAogI2RlZmluZSBFMTAwMF9CTEtfUEhZX1JFU0VUICAgMTIKICNkZWZpbmUgRTEwMDBfRVJSX1NXRldfU1lOQyAxMwogI2RlZmluZSBFMTAwMF9OT1RfSU1QTEVNRU5URUQgMTQKKyNkZWZpbmUgRTEwMDBfRVJSX0lOVkFMSURfQVJHVU1FTlQgIDE2CisjZGVmaW5lIEUxMDAwX0VSUl9OT19TUEFDRSAgICAgICAgICAxNworI2RlZmluZSBFMTAwMF9FUlJfTlZNX1BCQV9TRUNUSU9OICAgMTgKIAogLyogTG9vcCBsaW1pdCBvbiBob3cgbG9uZyB3ZSB3YWl0IGZvciBhdXRvLW5lZ290aWF0aW9uIHRvIGNvbXBsZXRlICovCiAjZGVmaW5lIEZJQkVSX0xJTktfVVBfTElNSVQgICAgICAgICAgICAgICA1MApAQCAtNTE2LDYgKzUxOSw3IEBACiAjZGVmaW5lIEUxMDAwX1RYQ1dfQU5FICAgICAgICAweDgwMDAwMDAwICAgICAgICAvKiBBdXRvLW5lZyBlbmFibGUgKi8KIAogLyogUmVjZWl2ZSBDb25maWd1cmF0aW9uIFdvcmQgKi8KKyNkZWZpbmUgRTEwMDBfUlhDV19DVyAgICAgICAgIDB4MDAwMGZmZmYgICAgICAgIC8qIFJ4Q29uZmlnV29yZCBtYXNrICovCiAjZGVmaW5lIEUxMDAwX1JYQ1dfSVYgICAgICAgICAweDA4MDAwMDAwICAgICAgICAvKiBSZWNlaXZlIGNvbmZpZyBpbnZhbGlkICovCiAjZGVmaW5lIEUxMDAwX1JYQ1dfQyAgICAgICAgICAweDIwMDAwMDAwICAgICAgICAvKiBSZWNlaXZlIGNvbmZpZyAqLwogI2RlZmluZSBFMTAwMF9SWENXX1NZTkNIICAgICAgMHg0MDAwMDAwMCAgICAgICAgLyogUmVjZWl2ZSBjb25maWcgc3luY2ggKi8KQEAgLTY0OSwxMyArNjUzLDE2IEBACiAvKiBNYXNrIGJpdHMgZm9yIGZpZWxkcyBpbiBXb3JkIDB4MDMgb2YgdGhlIEVFUFJPTSAqLwogI2RlZmluZSBOVk1fQ09NUEFUX0xPTSAgICAweDA4MDAKIAorLyogbGVuZ3RoIG9mIHN0cmluZyBuZWVkZWQgdG8gc3RvcmUgUEJBIG51bWJlciAqLworI2RlZmluZSBFMTAwMF9QQkFOVU1fTEVOR1RIICAgICAgICAgICAgIDExCisKIC8qIEZvciBjaGVja3N1bW1pbmcsIHRoZSBzdW0gb2YgYWxsIHdvcmRzIGluIHRoZSBOVk0gc2hvdWxkIGVxdWFsIDB4QkFCQS4gKi8KICNkZWZpbmUgTlZNX1NVTSAgICAgICAgICAgICAgICAgICAgMHhCQUJBCiAKIC8qIFBCQSAocHJpbnRlZCBib2FyZCBhc3NlbWJseSkgbnVtYmVyIHdvcmRzICovCiAjZGVmaW5lIE5WTV9QQkFfT0ZGU0VUXzAgICAgICAgICAgIDgKICNkZWZpbmUgTlZNX1BCQV9PRkZTRVRfMSAgICAgICAgICAgOQotCisjZGVmaW5lIE5WTV9QQkFfUFRSX0dVQVJEICAgICAgICAgIDB4RkFGQQogI2RlZmluZSBOVk1fV09SRF9TSVpFX0JBU0VfU0hJRlQgICA2CiAKIC8qIE5WTSBDb21tYW5kcyAtIFNQSSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDBlL2UxMDAwLmggYi9kcml2ZXJzL25ldC9lMTAwMGUvZTEwMDAuaAppbmRleCBmZGM2N2ZlLi4yYzkxM2I4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMGUvZTEwMDAuaAorKysgYi9kcml2ZXJzL25ldC9lMTAwMGUvZTEwMDAuaApAQCAtNDgyLDYgKzQ4Miw3IEBACiAKIGV4dGVybiB2b2lkIGUxMDAwZV9jaGVja19vcHRpb25zKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKTsKIGV4dGVybiB2b2lkIGUxMDAwZV9zZXRfZXRodG9vbF9vcHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CitleHRlcm4gdm9pZCBlMTAwMGVfbGVkX2JsaW5rX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIAogZXh0ZXJuIGludCBlMTAwMGVfdXAoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpOwogZXh0ZXJuIHZvaWQgZTEwMDBlX2Rvd24oc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpOwpAQCAtNTEzLDcgKzUxNCw4IEBACiBleHRlcm4gc3RydWN0IGUxMDAwX2luZm8gZTEwMDBfcGNoMl9pbmZvOwogZXh0ZXJuIHN0cnVjdCBlMTAwMF9pbmZvIGUxMDAwX2VzMl9pbmZvOwogCi1leHRlcm4gczMyIGUxMDAwZV9yZWFkX3BiYV9udW0oc3RydWN0IGUxMDAwX2h3ICpodywgdTMyICpwYmFfbnVtKTsKK2V4dGVybiBzMzIgZTEwMDBfcmVhZF9wYmFfc3RyaW5nX2dlbmVyaWMoc3RydWN0IGUxMDAwX2h3ICpodywgdTggKnBiYV9udW0sCisJCQkJCSB1MzIgcGJhX251bV9zaXplKTsKIAogZXh0ZXJuIHMzMiAgZTEwMDBlX2NvbW1pdF9waHkoc3RydWN0IGUxMDAwX2h3ICpodyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwZS9lczJsYW4uYyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9lczJsYW4uYwppbmRleCAyNGY4YWM5Li5iMThjNjQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMGUvZXMybGFuLmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMDBlL2VzMmxhbi5jCkBAIC0xMDAsOCArMTAwLDggQEAKICAqIHdpdGggYSBsb3dlciBib3VuZCBhdCAiaW5kZXgiIGFuZCB0aGUgdXBwZXIgYm91bmQgYXQKICAqICJpbmRleCArIDUiLgogICovCi1zdGF0aWMgY29uc3QgdTE2IGUxMDAwX2dnODI1NjNfY2FibGVfbGVuZ3RoX3RhYmxlW10gPQotCSB7IDAsIDYwLCAxMTUsIDE1MCwgMTUwLCA2MCwgMTE1LCAxNTAsIDE4MCwgMTgwLCAweEZGIH07CitzdGF0aWMgY29uc3QgdTE2IGUxMDAwX2dnODI1NjNfY2FibGVfbGVuZ3RoX3RhYmxlW10gPSB7CisJIDAsIDYwLCAxMTUsIDE1MCwgMTUwLCA2MCwgMTE1LCAxNTAsIDE4MCwgMTgwLCAweEZGIH07CiAjZGVmaW5lIEdHODI1NjNfQ0FCTEVfTEVOR1RIX1RBQkxFX1NJWkUgXAogCQlBUlJBWV9TSVpFKGUxMDAwX2dnODI1NjNfY2FibGVfbGVuZ3RoX3RhYmxlKQogCkBAIC00MjYsOCArNDI2LDggQEAKIHsKIAl1MzIgc3dmd19zeW5jOwogCi0Jd2hpbGUgKGUxMDAwZV9nZXRfaHdfc2VtYXBob3JlKGh3KSAhPSAwKTsKLQkvKiBFbXB0eSAqLworCXdoaWxlIChlMTAwMGVfZ2V0X2h3X3NlbWFwaG9yZShodykgIT0gMCkKKwkJOyAvKiBFbXB0eSAqLwogCiAJc3dmd19zeW5jID0gZXIzMihTV19GV19TWU5DKTsKIAlzd2Z3X3N5bmMgJj0gfm1hc2s7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMGUvZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZTEwMDBlL2V0aHRvb2wuYwppbmRleCA4OTg0ZDE2Li5hZmZjYWNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMGUvZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9ldGh0b29sLmMKQEAgLTQ1LDYzICs0NSw2NyBAQAogCWludCBzdGF0X29mZnNldDsKIH07CiAKLSNkZWZpbmUgRTEwMDBfU1RBVChtKQkJRTEwMDBfU1RBVFMsIFwKLQkJCQlzaXplb2YoKChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqKTApLT5tKSwgXAotCQkgICAgICAJCW9mZnNldG9mKHN0cnVjdCBlMTAwMF9hZGFwdGVyLCBtKQotI2RlZmluZSBFMTAwMF9ORVRERVZfU1RBVChtKQlORVRERVZfU1RBVFMsIFwKLQkJCQlzaXplb2YoKChzdHJ1Y3QgbmV0X2RldmljZSAqKTApLT5tKSwgXAotCQkJCW9mZnNldG9mKHN0cnVjdCBuZXRfZGV2aWNlLCBtKQorI2RlZmluZSBFMTAwMF9TVEFUKHN0ciwgbSkgeyBcCisJCQkuc3RhdF9zdHJpbmcgPSBzdHIsIFwKKwkJCS50eXBlID0gRTEwMDBfU1RBVFMsIFwKKwkJCS5zaXplb2Zfc3RhdCA9IHNpemVvZigoKHN0cnVjdCBlMTAwMF9hZGFwdGVyICopMCktPm0pLCBcCisJCQkuc3RhdF9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgZTEwMDBfYWRhcHRlciwgbSkgfQorI2RlZmluZSBFMTAwMF9ORVRERVZfU1RBVChzdHIsIG0pIHsgXAorCQkJLnN0YXRfc3RyaW5nID0gc3RyLCBcCisJCQkudHlwZSA9IE5FVERFVl9TVEFUUywgXAorCQkJLnNpemVvZl9zdGF0ID0gc2l6ZW9mKCgoc3RydWN0IG5ldF9kZXZpY2UgKikwKS0+bSksIFwKKwkJCS5zdGF0X29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBuZXRfZGV2aWNlLCBtKSB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZTEwMDBfc3RhdHMgZTEwMDBfZ3N0cmluZ3Nfc3RhdHNbXSA9IHsKLQl7ICJyeF9wYWNrZXRzIiwgRTEwMDBfU1RBVChzdGF0cy5ncHJjKSB9LAotCXsgInR4X3BhY2tldHMiLCBFMTAwMF9TVEFUKHN0YXRzLmdwdGMpIH0sCi0JeyAicnhfYnl0ZXMiLCBFMTAwMF9TVEFUKHN0YXRzLmdvcmMpIH0sCi0JeyAidHhfYnl0ZXMiLCBFMTAwMF9TVEFUKHN0YXRzLmdvdGMpIH0sCi0JeyAicnhfYnJvYWRjYXN0IiwgRTEwMDBfU1RBVChzdGF0cy5icHJjKSB9LAotCXsgInR4X2Jyb2FkY2FzdCIsIEUxMDAwX1NUQVQoc3RhdHMuYnB0YykgfSwKLQl7ICJyeF9tdWx0aWNhc3QiLCBFMTAwMF9TVEFUKHN0YXRzLm1wcmMpIH0sCi0JeyAidHhfbXVsdGljYXN0IiwgRTEwMDBfU1RBVChzdGF0cy5tcHRjKSB9LAotCXsgInJ4X2Vycm9ycyIsIEUxMDAwX05FVERFVl9TVEFUKHN0YXRzLnJ4X2Vycm9ycykgfSwKLQl7ICJ0eF9lcnJvcnMiLCBFMTAwMF9ORVRERVZfU1RBVChzdGF0cy50eF9lcnJvcnMpIH0sCi0JeyAidHhfZHJvcHBlZCIsIEUxMDAwX05FVERFVl9TVEFUKHN0YXRzLnR4X2Ryb3BwZWQpIH0sCi0JeyAibXVsdGljYXN0IiwgRTEwMDBfU1RBVChzdGF0cy5tcHJjKSB9LAotCXsgImNvbGxpc2lvbnMiLCBFMTAwMF9TVEFUKHN0YXRzLmNvbGMpIH0sCi0JeyAicnhfbGVuZ3RoX2Vycm9ycyIsIEUxMDAwX05FVERFVl9TVEFUKHN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMpIH0sCi0JeyAicnhfb3Zlcl9lcnJvcnMiLCBFMTAwMF9ORVRERVZfU1RBVChzdGF0cy5yeF9vdmVyX2Vycm9ycykgfSwKLQl7ICJyeF9jcmNfZXJyb3JzIiwgRTEwMDBfU1RBVChzdGF0cy5jcmNlcnJzKSB9LAotCXsgInJ4X2ZyYW1lX2Vycm9ycyIsIEUxMDAwX05FVERFVl9TVEFUKHN0YXRzLnJ4X2ZyYW1lX2Vycm9ycykgfSwKLQl7ICJyeF9ub19idWZmZXJfY291bnQiLCBFMTAwMF9TVEFUKHN0YXRzLnJuYmMpIH0sCi0JeyAicnhfbWlzc2VkX2Vycm9ycyIsIEUxMDAwX1NUQVQoc3RhdHMubXBjKSB9LAotCXsgInR4X2Fib3J0ZWRfZXJyb3JzIiwgRTEwMDBfU1RBVChzdGF0cy5lY29sKSB9LAotCXsgInR4X2NhcnJpZXJfZXJyb3JzIiwgRTEwMDBfU1RBVChzdGF0cy50bmNycykgfSwKLQl7ICJ0eF9maWZvX2Vycm9ycyIsIEUxMDAwX05FVERFVl9TVEFUKHN0YXRzLnR4X2ZpZm9fZXJyb3JzKSB9LAotCXsgInR4X2hlYXJ0YmVhdF9lcnJvcnMiLCBFMTAwMF9ORVRERVZfU1RBVChzdGF0cy50eF9oZWFydGJlYXRfZXJyb3JzKSB9LAotCXsgInR4X3dpbmRvd19lcnJvcnMiLCBFMTAwMF9TVEFUKHN0YXRzLmxhdGVjb2wpIH0sCi0JeyAidHhfYWJvcnRfbGF0ZV9jb2xsIiwgRTEwMDBfU1RBVChzdGF0cy5sYXRlY29sKSB9LAotCXsgInR4X2RlZmVycmVkX29rIiwgRTEwMDBfU1RBVChzdGF0cy5kYykgfSwKLQl7ICJ0eF9zaW5nbGVfY29sbF9vayIsIEUxMDAwX1NUQVQoc3RhdHMuc2NjKSB9LAotCXsgInR4X211bHRpX2NvbGxfb2siLCBFMTAwMF9TVEFUKHN0YXRzLm1jYykgfSwKLQl7ICJ0eF90aW1lb3V0X2NvdW50IiwgRTEwMDBfU1RBVCh0eF90aW1lb3V0X2NvdW50KSB9LAotCXsgInR4X3Jlc3RhcnRfcXVldWUiLCBFMTAwMF9TVEFUKHJlc3RhcnRfcXVldWUpIH0sCi0JeyAicnhfbG9uZ19sZW5ndGhfZXJyb3JzIiwgRTEwMDBfU1RBVChzdGF0cy5yb2MpIH0sCi0JeyAicnhfc2hvcnRfbGVuZ3RoX2Vycm9ycyIsIEUxMDAwX1NUQVQoc3RhdHMucnVjKSB9LAotCXsgInJ4X2FsaWduX2Vycm9ycyIsIEUxMDAwX1NUQVQoc3RhdHMuYWxnbmVycmMpIH0sCi0JeyAidHhfdGNwX3NlZ19nb29kIiwgRTEwMDBfU1RBVChzdGF0cy50c2N0YykgfSwKLQl7ICJ0eF90Y3Bfc2VnX2ZhaWxlZCIsIEUxMDAwX1NUQVQoc3RhdHMudHNjdGZjKSB9LAotCXsgInJ4X2Zsb3dfY29udHJvbF94b24iLCBFMTAwMF9TVEFUKHN0YXRzLnhvbnJ4YykgfSwKLQl7ICJyeF9mbG93X2NvbnRyb2xfeG9mZiIsIEUxMDAwX1NUQVQoc3RhdHMueG9mZnJ4YykgfSwKLQl7ICJ0eF9mbG93X2NvbnRyb2xfeG9uIiwgRTEwMDBfU1RBVChzdGF0cy54b250eGMpIH0sCi0JeyAidHhfZmxvd19jb250cm9sX3hvZmYiLCBFMTAwMF9TVEFUKHN0YXRzLnhvZmZ0eGMpIH0sCi0JeyAicnhfbG9uZ19ieXRlX2NvdW50IiwgRTEwMDBfU1RBVChzdGF0cy5nb3JjKSB9LAotCXsgInJ4X2NzdW1fb2ZmbG9hZF9nb29kIiwgRTEwMDBfU1RBVChod19jc3VtX2dvb2QpIH0sCi0JeyAicnhfY3N1bV9vZmZsb2FkX2Vycm9ycyIsIEUxMDAwX1NUQVQoaHdfY3N1bV9lcnIpIH0sCi0JeyAicnhfaGVhZGVyX3NwbGl0IiwgRTEwMDBfU1RBVChyeF9oZHJfc3BsaXQpIH0sCi0JeyAiYWxsb2NfcnhfYnVmZl9mYWlsZWQiLCBFMTAwMF9TVEFUKGFsbG9jX3J4X2J1ZmZfZmFpbGVkKSB9LAotCXsgInR4X3NtYnVzIiwgRTEwMDBfU1RBVChzdGF0cy5tZ3B0YykgfSwKLQl7ICJyeF9zbWJ1cyIsIEUxMDAwX1NUQVQoc3RhdHMubWdwcmMpIH0sCi0JeyAiZHJvcHBlZF9zbWJ1cyIsIEUxMDAwX1NUQVQoc3RhdHMubWdwZGMpIH0sCi0JeyAicnhfZG1hX2ZhaWxlZCIsIEUxMDAwX1NUQVQocnhfZG1hX2ZhaWxlZCkgfSwKLQl7ICJ0eF9kbWFfZmFpbGVkIiwgRTEwMDBfU1RBVCh0eF9kbWFfZmFpbGVkKSB9LAorCUUxMDAwX1NUQVQoInJ4X3BhY2tldHMiLCBzdGF0cy5ncHJjKSwKKwlFMTAwMF9TVEFUKCJ0eF9wYWNrZXRzIiwgc3RhdHMuZ3B0YyksCisJRTEwMDBfU1RBVCgicnhfYnl0ZXMiLCBzdGF0cy5nb3JjKSwKKwlFMTAwMF9TVEFUKCJ0eF9ieXRlcyIsIHN0YXRzLmdvdGMpLAorCUUxMDAwX1NUQVQoInJ4X2Jyb2FkY2FzdCIsIHN0YXRzLmJwcmMpLAorCUUxMDAwX1NUQVQoInR4X2Jyb2FkY2FzdCIsIHN0YXRzLmJwdGMpLAorCUUxMDAwX1NUQVQoInJ4X211bHRpY2FzdCIsIHN0YXRzLm1wcmMpLAorCUUxMDAwX1NUQVQoInR4X211bHRpY2FzdCIsIHN0YXRzLm1wdGMpLAorCUUxMDAwX05FVERFVl9TVEFUKCJyeF9lcnJvcnMiLCBzdGF0cy5yeF9lcnJvcnMpLAorCUUxMDAwX05FVERFVl9TVEFUKCJ0eF9lcnJvcnMiLCBzdGF0cy50eF9lcnJvcnMpLAorCUUxMDAwX05FVERFVl9TVEFUKCJ0eF9kcm9wcGVkIiwgc3RhdHMudHhfZHJvcHBlZCksCisJRTEwMDBfU1RBVCgibXVsdGljYXN0Iiwgc3RhdHMubXByYyksCisJRTEwMDBfU1RBVCgiY29sbGlzaW9ucyIsIHN0YXRzLmNvbGMpLAorCUUxMDAwX05FVERFVl9TVEFUKCJyeF9sZW5ndGhfZXJyb3JzIiwgc3RhdHMucnhfbGVuZ3RoX2Vycm9ycyksCisJRTEwMDBfTkVUREVWX1NUQVQoInJ4X292ZXJfZXJyb3JzIiwgc3RhdHMucnhfb3Zlcl9lcnJvcnMpLAorCUUxMDAwX1NUQVQoInJ4X2NyY19lcnJvcnMiLCBzdGF0cy5jcmNlcnJzKSwKKwlFMTAwMF9ORVRERVZfU1RBVCgicnhfZnJhbWVfZXJyb3JzIiwgc3RhdHMucnhfZnJhbWVfZXJyb3JzKSwKKwlFMTAwMF9TVEFUKCJyeF9ub19idWZmZXJfY291bnQiLCBzdGF0cy5ybmJjKSwKKwlFMTAwMF9TVEFUKCJyeF9taXNzZWRfZXJyb3JzIiwgc3RhdHMubXBjKSwKKwlFMTAwMF9TVEFUKCJ0eF9hYm9ydGVkX2Vycm9ycyIsIHN0YXRzLmVjb2wpLAorCUUxMDAwX1NUQVQoInR4X2NhcnJpZXJfZXJyb3JzIiwgc3RhdHMudG5jcnMpLAorCUUxMDAwX05FVERFVl9TVEFUKCJ0eF9maWZvX2Vycm9ycyIsIHN0YXRzLnR4X2ZpZm9fZXJyb3JzKSwKKwlFMTAwMF9ORVRERVZfU1RBVCgidHhfaGVhcnRiZWF0X2Vycm9ycyIsIHN0YXRzLnR4X2hlYXJ0YmVhdF9lcnJvcnMpLAorCUUxMDAwX1NUQVQoInR4X3dpbmRvd19lcnJvcnMiLCBzdGF0cy5sYXRlY29sKSwKKwlFMTAwMF9TVEFUKCJ0eF9hYm9ydF9sYXRlX2NvbGwiLCBzdGF0cy5sYXRlY29sKSwKKwlFMTAwMF9TVEFUKCJ0eF9kZWZlcnJlZF9vayIsIHN0YXRzLmRjKSwKKwlFMTAwMF9TVEFUKCJ0eF9zaW5nbGVfY29sbF9vayIsIHN0YXRzLnNjYyksCisJRTEwMDBfU1RBVCgidHhfbXVsdGlfY29sbF9vayIsIHN0YXRzLm1jYyksCisJRTEwMDBfU1RBVCgidHhfdGltZW91dF9jb3VudCIsIHR4X3RpbWVvdXRfY291bnQpLAorCUUxMDAwX1NUQVQoInR4X3Jlc3RhcnRfcXVldWUiLCByZXN0YXJ0X3F1ZXVlKSwKKwlFMTAwMF9TVEFUKCJyeF9sb25nX2xlbmd0aF9lcnJvcnMiLCBzdGF0cy5yb2MpLAorCUUxMDAwX1NUQVQoInJ4X3Nob3J0X2xlbmd0aF9lcnJvcnMiLCBzdGF0cy5ydWMpLAorCUUxMDAwX1NUQVQoInJ4X2FsaWduX2Vycm9ycyIsIHN0YXRzLmFsZ25lcnJjKSwKKwlFMTAwMF9TVEFUKCJ0eF90Y3Bfc2VnX2dvb2QiLCBzdGF0cy50c2N0YyksCisJRTEwMDBfU1RBVCgidHhfdGNwX3NlZ19mYWlsZWQiLCBzdGF0cy50c2N0ZmMpLAorCUUxMDAwX1NUQVQoInJ4X2Zsb3dfY29udHJvbF94b24iLCBzdGF0cy54b25yeGMpLAorCUUxMDAwX1NUQVQoInJ4X2Zsb3dfY29udHJvbF94b2ZmIiwgc3RhdHMueG9mZnJ4YyksCisJRTEwMDBfU1RBVCgidHhfZmxvd19jb250cm9sX3hvbiIsIHN0YXRzLnhvbnR4YyksCisJRTEwMDBfU1RBVCgidHhfZmxvd19jb250cm9sX3hvZmYiLCBzdGF0cy54b2ZmdHhjKSwKKwlFMTAwMF9TVEFUKCJyeF9sb25nX2J5dGVfY291bnQiLCBzdGF0cy5nb3JjKSwKKwlFMTAwMF9TVEFUKCJyeF9jc3VtX29mZmxvYWRfZ29vZCIsIGh3X2NzdW1fZ29vZCksCisJRTEwMDBfU1RBVCgicnhfY3N1bV9vZmZsb2FkX2Vycm9ycyIsIGh3X2NzdW1fZXJyKSwKKwlFMTAwMF9TVEFUKCJyeF9oZWFkZXJfc3BsaXQiLCByeF9oZHJfc3BsaXQpLAorCUUxMDAwX1NUQVQoImFsbG9jX3J4X2J1ZmZfZmFpbGVkIiwgYWxsb2NfcnhfYnVmZl9mYWlsZWQpLAorCUUxMDAwX1NUQVQoInR4X3NtYnVzIiwgc3RhdHMubWdwdGMpLAorCUUxMDAwX1NUQVQoInJ4X3NtYnVzIiwgc3RhdHMubWdwcmMpLAorCUUxMDAwX1NUQVQoImRyb3BwZWRfc21idXMiLCBzdGF0cy5tZ3BkYyksCisJRTEwMDBfU1RBVCgicnhfZG1hX2ZhaWxlZCIsIHJ4X2RtYV9mYWlsZWQpLAorCUUxMDAwX1NUQVQoInR4X2RtYV9mYWlsZWQiLCB0eF9kbWFfZmFpbGVkKSwKIH07CiAKICNkZWZpbmUgRTEwMDBfR0xPQkFMX1NUQVRTX0xFTglBUlJBWV9TSVpFKGUxMDAwX2dzdHJpbmdzX3N0YXRzKQpAQCAtMTk0LDIwICsxOTgsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdTMyIGUxMDAwX2dldF9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCi17Ci0Jc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7Ci0KLQkvKgotCSAqIEF2b2lkIHRvdWNoaW5nIGhhcmR3YXJlIHJlZ2lzdGVycyB3aGVuIHBvc3NpYmxlLCBvdGhlcndpc2UKLQkgKiBsaW5rIG5lZ290aWF0aW9uIGNhbiBnZXQgbWVzc2VkIHVwIHdoZW4gdXNlci1sZXZlbCBzY3JpcHRzCi0JICogYXJlIHJhcGlkbHkgcG9sbGluZyB0aGUgZHJpdmVyIHRvIHNlZSBpZiBsaW5rIGlzIHVwLgotCSAqLwotCXJldHVybiBuZXRpZl9ydW5uaW5nKG5ldGRldikgPyBuZXRpZl9jYXJyaWVyX29rKG5ldGRldikgOgotCSAgICAhIShlcjMyKFNUQVRVUykgJiBFMTAwMF9TVEFUVVNfTFUpOwotfQotCiBzdGF0aWMgaW50IGUxMDAwX3NldF9zcGRfZHBseChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwgdTE2IHNwZGRwbHgpCiB7CiAJc3RydWN0IGUxMDAwX21hY19pbmZvICptYWMgPSAmYWRhcHRlci0+aHcubWFjOwpAQCAtNzYzLDggKzc1Myw4IEBACiAJCQkgICAgIGludCByZWcsIGludCBvZmZzZXQsIHUzMiBtYXNrLCB1MzIgd3JpdGUpCiB7CiAJdTMyIHBhdCwgdmFsOwotCXN0YXRpYyBjb25zdCB1MzIgdGVzdFtdID0KLQkJezB4NUE1QTVBNUEsIDB4QTVBNUE1QTUsIDB4MDAwMDAwMDAsIDB4RkZGRkZGRkZ9OworCXN0YXRpYyBjb25zdCB1MzIgdGVzdFtdID0geworCQkweDVBNUE1QTVBLCAweEE1QTVBNUE1LCAweDAwMDAwMDAwLCAweEZGRkZGRkZGfTsKIAlmb3IgKHBhdCA9IDA7IHBhdCA8IEFSUkFZX1NJWkUodGVzdCk7IHBhdCsrKSB7CiAJCUUxMDAwX1dSSVRFX1JFR19BUlJBWSgmYWRhcHRlci0+aHcsIHJlZywgb2Zmc2V0LAogCQkJCSAgICAgICh0ZXN0W3BhdF0gJiB3cml0ZSkpOwpAQCAtMTI2Myw2ICsxMjUzLDcgQEAKIAl1MzIgY3RybF9yZWcgPSAwOwogCXUzMiBzdGF0X3JlZyA9IDA7CiAJdTE2IHBoeV9yZWcgPSAwOworCXMzMiByZXRfdmFsID0gMDsKIAogCWh3LT5tYWMuYXV0b25lZyA9IDA7CiAKQEAgLTEzMjIsNyArMTMxMywxMyBAQAogCWNhc2UgZTEwMDBfcGh5XzgyNTc3OgogCWNhc2UgZTEwMDBfcGh5XzgyNTc4OgogCQkvKiBXb3JrYXJvdW5kOiBLMSBtdXN0IGJlIGRpc2FibGVkIGZvciBzdGFibGUgMUdicHMgb3BlcmF0aW9uICovCisJCXJldF92YWwgPSBody0+cGh5Lm9wcy5hY3F1aXJlKGh3KTsKKwkJaWYgKHJldF92YWwpIHsKKwkJCWVfZXJyKCJDYW5ub3Qgc2V0dXAgMUdicHMgbG9vcGJhY2suXG4iKTsKKwkJCXJldHVybiByZXRfdmFsOworCQl9CiAJCWUxMDAwX2NvbmZpZ3VyZV9rMV9pY2g4bGFuKGh3LCBmYWxzZSk7CisJCWh3LT5waHkub3BzLnJlbGVhc2UoaHcpOwogCQlicmVhazsKIAljYXNlIGUxMDAwX3BoeV84MjU3OToKIAkJLyogRGlzYWJsZSBQSFkgZW5lcmd5IGRldGVjdCBwb3dlciBkb3duICovCkBAIC0xODYwLDcgKzE4NTcsNyBAQAogLyogYml0IGRlZmluZXMgZm9yIGFkYXB0ZXItPmxlZF9zdGF0dXMgKi8KICNkZWZpbmUgRTEwMDBfTEVEX09OCQkwCiAKLXN0YXRpYyB2b2lkIGUxMDAwZV9sZWRfYmxpbmtfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit2b2lkIGUxMDAwZV9sZWRfYmxpbmtfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBjb250YWluZXJfb2Yod29yaywKIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBlMTAwMF9hZGFwdGVyLCBsZWRfYmxpbmtfdGFzayk7CkBAIC0xODkyLDcgKzE4ODksNiBAQAogCSAgICAoaHctPm1hYy50eXBlID09IGUxMDAwX3BjaDJsYW4pIHx8CiAJICAgIChody0+bWFjLnR5cGUgPT0gZTEwMDBfODI1ODMpIHx8CiAJICAgIChody0+bWFjLnR5cGUgPT0gZTEwMDBfODI1NzQpKSB7Ci0JCUlOSVRfV09SSygmYWRhcHRlci0+bGVkX2JsaW5rX3Rhc2ssIGUxMDAwZV9sZWRfYmxpbmtfdGFzayk7CiAJCWlmICghYWRhcHRlci0+YmxpbmtfdGltZXIuZnVuY3Rpb24pIHsKIAkJCWluaXRfdGltZXIoJmFkYXB0ZXItPmJsaW5rX3RpbWVyKTsKIAkJCWFkYXB0ZXItPmJsaW5rX3RpbWVyLmZ1bmN0aW9uID0KQEAgLTE5ODYsNiArMTk4Miw5IEBACiAJCQlwID0gKGNoYXIgKikgYWRhcHRlciArCiAJCQkJCWUxMDAwX2dzdHJpbmdzX3N0YXRzW2ldLnN0YXRfb2Zmc2V0OwogCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlkYXRhW2ldID0gMDsKKwkJCWNvbnRpbnVlOwogCQl9CiAKIAkJZGF0YVtpXSA9IChlMTAwMF9nc3RyaW5nc19zdGF0c1tpXS5zaXplb2Zfc3RhdCA9PQpAQCAtMjAyNCw3ICsyMDIzLDcgQEAKIAkuZ2V0X21zZ2xldmVsCQk9IGUxMDAwX2dldF9tc2dsZXZlbCwKIAkuc2V0X21zZ2xldmVsCQk9IGUxMDAwX3NldF9tc2dsZXZlbCwKIAkubndheV9yZXNldAkJPSBlMTAwMF9ud2F5X3Jlc2V0LAotCS5nZXRfbGluawkJPSBlMTAwMF9nZXRfbGluaywKKwkuZ2V0X2xpbmsJCT0gZXRodG9vbF9vcF9nZXRfbGluaywKIAkuZ2V0X2VlcHJvbV9sZW4JCT0gZTEwMDBfZ2V0X2VlcHJvbV9sZW4sCiAJLmdldF9lZXByb20JCT0gZTEwMDBfZ2V0X2VlcHJvbSwKIAkuc2V0X2VlcHJvbQkJPSBlMTAwMF9zZXRfZWVwcm9tLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDBlL2ljaDhsYW4uYyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9pY2g4bGFuLmMKaW5kZXggZTMzNzRkOS4uZDg2Y2MwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDBlL2ljaDhsYW4uYworKysgYi9kcml2ZXJzL25ldC9lMTAwMGUvaWNoOGxhbi5jCkBAIC0zMzgsMTIgKzMzOCwxNyBAQAogCX0KIAogCXBoeS0+aWQgPSBlMTAwMF9waHlfdW5rbm93bjsKLQlyZXRfdmFsID0gZTEwMDBlX2dldF9waHlfaWQoaHcpOwotCWlmIChyZXRfdmFsKQotCQlnb3RvIG91dDsKLQlpZiAoKHBoeS0+aWQgPT0gMCkgfHwgKHBoeS0+aWQgPT0gUEhZX1JFVklTSU9OX01BU0spKSB7CisJc3dpdGNoIChody0+bWFjLnR5cGUpIHsKKwlkZWZhdWx0OgorCQlyZXRfdmFsID0gZTEwMDBlX2dldF9waHlfaWQoaHcpOworCQlpZiAocmV0X3ZhbCkKKwkJCWdvdG8gb3V0OworCQlpZiAoKHBoeS0+aWQgIT0gMCkgJiYgKHBoeS0+aWQgIT0gUEhZX1JFVklTSU9OX01BU0spKQorCQkJYnJlYWs7CisJCS8qIGZhbGwtdGhyb3VnaCAqLworCWNhc2UgZTEwMDBfcGNoMmxhbjoKIAkJLyoKLQkJICogSW4gY2FzZSB0aGUgUEhZIG5lZWRzIHRvIGJlIGluIG1kaW8gc2xvdyBtb2RlIChlZy4gODI1NzcpLAorCQkgKiBJbiBjYXNlIHRoZSBQSFkgbmVlZHMgdG8gYmUgaW4gbWRpbyBzbG93IG1vZGUsCiAJCSAqIHNldCBzbG93IG1vZGUgYW5kIHRyeSB0byBnZXQgdGhlIFBIWSBpZCBhZ2Fpbi4KIAkJICovCiAJCXJldF92YWwgPSBlMTAwMF9zZXRfbWRpb19zbG93X21vZGVfaHYoaHcpOwpAQCAtMzUyLDYgKzM1Nyw3IEBACiAJCXJldF92YWwgPSBlMTAwMGVfZ2V0X3BoeV9pZChodyk7CiAJCWlmIChyZXRfdmFsKQogCQkJZ290byBvdXQ7CisJCWJyZWFrOwogCX0KIAlwaHktPnR5cGUgPSBlMTAwMGVfZ2V0X3BoeV90eXBlX2Zyb21faWQocGh5LT5pZCk7CiAKQEAgLTIzMDMsMTEgKzIzMDksMTAgQEAKIAkJICovCiAJCWlmIChyZXRfdmFsID09IDApIHsKIAkJCWZsYXNoX2RhdGEgPSBlcjMyZmxhc2goSUNIX0ZMQVNIX0ZEQVRBMCk7Ci0JCQlpZiAoc2l6ZSA9PSAxKSB7CisJCQlpZiAoc2l6ZSA9PSAxKQogCQkJCSpkYXRhID0gKHU4KShmbGFzaF9kYXRhICYgMHgwMDAwMDBGRik7Ci0JCQl9IGVsc2UgaWYgKHNpemUgPT0gMikgeworCQkJZWxzZSBpZiAoc2l6ZSA9PSAyKQogCQkJCSpkYXRhID0gKHUxNikoZmxhc2hfZGF0YSAmIDB4MDAwMEZGRkYpOwotCQkJfQogCQkJYnJlYWs7CiAJCX0gZWxzZSB7CiAJCQkvKgpAQCAtMzU5MSw3ICszNTk2LDcgQEAKIAlldzMyKFBIWV9DVFJMLCBwaHlfY3RybCk7CiAKIAlpZiAoaHctPm1hYy50eXBlID49IGUxMDAwX3BjaGxhbikgewotCQllMTAwMF9vZW1fYml0c19jb25maWdfaWNoOGxhbihodywgdHJ1ZSk7CisJCWUxMDAwX29lbV9iaXRzX2NvbmZpZ19pY2g4bGFuKGh3LCBmYWxzZSk7CiAJCXJldF92YWwgPSBody0+cGh5Lm9wcy5hY3F1aXJlKGh3KTsKIAkJaWYgKHJldF92YWwpCiAJCQlyZXR1cm47CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMGUvbGliLmMgYi9kcml2ZXJzL25ldC9lMTAwMGUvbGliLmMKaW5kZXggMGZkNGViNS4uN2U1NTE3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDBlL2xpYi5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9saWIuYwpAQCAtNDkzLDkgKzQ5Myw4IEBACiAJICogZGlmZmVyZW50IGxpbmsgcGFydG5lci4KIAkgKi8KIAlyZXRfdmFsID0gZTEwMDBlX2NvbmZpZ19mY19hZnRlcl9saW5rX3VwKGh3KTsKLQlpZiAocmV0X3ZhbCkgeworCWlmIChyZXRfdmFsKQogCQllX2RiZygiRXJyb3IgY29uZmlndXJpbmcgZmxvdyBjb250cm9sXG4iKTsKLQl9CiAKIAlyZXR1cm4gcmV0X3ZhbDsKIH0KQEAgLTE0OTYsOSArMTQ5NSw4IEBACiB7CiAJdTMyIGxlZGN0bDsKIAotCWlmIChody0+bWFjLm9wcy5zZXR1cF9sZWQgIT0gZTEwMDBlX3NldHVwX2xlZF9nZW5lcmljKSB7CisJaWYgKGh3LT5tYWMub3BzLnNldHVwX2xlZCAhPSBlMTAwMGVfc2V0dXBfbGVkX2dlbmVyaWMpCiAJCXJldHVybiAtRTEwMDBfRVJSX0NPTkZJRzsKLQl9CiAKIAlpZiAoaHctPnBoeS5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfZmliZXIpIHsKIAkJbGVkY3RsID0gZXIzMihMRURDVEwpOwpAQCAtMjEzOSw2ICsyMTM3LDExOSBAQAogfQogCiAvKioKKyAqICBlMTAwMF9yZWFkX3BiYV9zdHJpbmdfZ2VuZXJpYyAtIFJlYWQgZGV2aWNlIHBhcnQgbnVtYmVyCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAcGJhX251bTogcG9pbnRlciB0byBkZXZpY2UgcGFydCBudW1iZXIKKyAqICBAcGJhX251bV9zaXplOiBzaXplIG9mIHBhcnQgbnVtYmVyIGJ1ZmZlcgorICoKKyAqICBSZWFkcyB0aGUgcHJvZHVjdCBib2FyZCBhc3NlbWJseSAoUEJBKSBudW1iZXIgZnJvbSB0aGUgRUVQUk9NIGFuZCBzdG9yZXMKKyAqICB0aGUgdmFsdWUgaW4gcGJhX251bS4KKyAqKi8KK3MzMiBlMTAwMF9yZWFkX3BiYV9zdHJpbmdfZ2VuZXJpYyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1OCAqcGJhX251bSwKKwkJCQkgIHUzMiBwYmFfbnVtX3NpemUpCit7CisJczMyIHJldF92YWw7CisJdTE2IG52bV9kYXRhOworCXUxNiBwYmFfcHRyOworCXUxNiBvZmZzZXQ7CisJdTE2IGxlbmd0aDsKKworCWlmIChwYmFfbnVtID09IE5VTEwpIHsKKwkJZV9kYmcoIlBCQSBzdHJpbmcgYnVmZmVyIHdhcyBudWxsXG4iKTsKKwkJcmV0X3ZhbCA9IEUxMDAwX0VSUl9JTlZBTElEX0FSR1VNRU5UOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXRfdmFsID0gZTEwMDBfcmVhZF9udm0oaHcsIE5WTV9QQkFfT0ZGU0VUXzAsIDEsICZudm1fZGF0YSk7CisJaWYgKHJldF92YWwpIHsKKwkJZV9kYmcoIk5WTSBSZWFkIEVycm9yXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0X3ZhbCA9IGUxMDAwX3JlYWRfbnZtKGh3LCBOVk1fUEJBX09GRlNFVF8xLCAxLCAmcGJhX3B0cik7CisJaWYgKHJldF92YWwpIHsKKwkJZV9kYmcoIk5WTSBSZWFkIEVycm9yXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJLyoKKwkgKiBpZiBudm1fZGF0YSBpcyBub3QgcHRyIGd1YXJkIHRoZSBQQkEgbXVzdCBiZSBpbiBsZWdhY3kgZm9ybWF0IHdoaWNoCisJICogbWVhbnMgcGJhX3B0ciBpcyBhY3R1YWxseSBvdXIgc2Vjb25kIGRhdGEgd29yZCBmb3IgdGhlIFBCQSBudW1iZXIKKwkgKiBhbmQgd2UgY2FuIGRlY29kZSBpdCBpbnRvIGFuIGFzY2lpIHN0cmluZworCSAqLworCWlmIChudm1fZGF0YSAhPSBOVk1fUEJBX1BUUl9HVUFSRCkgeworCQllX2RiZygiTlZNIFBCQSBudW1iZXIgaXMgbm90IHN0b3JlZCBhcyBzdHJpbmdcbiIpOworCisJCS8qIHdlIHdpbGwgbmVlZCAxMSBjaGFyYWN0ZXJzIHRvIHN0b3JlIHRoZSBQQkEgKi8KKwkJaWYgKHBiYV9udW1fc2l6ZSA8IDExKSB7CisJCQllX2RiZygiUEJBIHN0cmluZyBidWZmZXIgdG9vIHNtYWxsXG4iKTsKKwkJCXJldHVybiBFMTAwMF9FUlJfTk9fU1BBQ0U7CisJCX0KKworCQkvKiBleHRyYWN0IGhleCBzdHJpbmcgZnJvbSBkYXRhIGFuZCBwYmFfcHRyICovCisJCXBiYV9udW1bMF0gPSAobnZtX2RhdGEgPj4gMTIpICYgMHhGOworCQlwYmFfbnVtWzFdID0gKG52bV9kYXRhID4+IDgpICYgMHhGOworCQlwYmFfbnVtWzJdID0gKG52bV9kYXRhID4+IDQpICYgMHhGOworCQlwYmFfbnVtWzNdID0gbnZtX2RhdGEgJiAweEY7CisJCXBiYV9udW1bNF0gPSAocGJhX3B0ciA+PiAxMikgJiAweEY7CisJCXBiYV9udW1bNV0gPSAocGJhX3B0ciA+PiA4KSAmIDB4RjsKKwkJcGJhX251bVs2XSA9ICctJzsKKwkJcGJhX251bVs3XSA9IDA7CisJCXBiYV9udW1bOF0gPSAocGJhX3B0ciA+PiA0KSAmIDB4RjsKKwkJcGJhX251bVs5XSA9IHBiYV9wdHIgJiAweEY7CisKKwkJLyogcHV0IGEgbnVsbCBjaGFyYWN0ZXIgb24gdGhlIGVuZCBvZiBvdXIgc3RyaW5nICovCisJCXBiYV9udW1bMTBdID0gJ1wwJzsKKworCQkvKiBzd2l0Y2ggYWxsIHRoZSBkYXRhIGJ1dCB0aGUgJy0nIHRvIGhleCBjaGFyICovCisJCWZvciAob2Zmc2V0ID0gMDsgb2Zmc2V0IDwgMTA7IG9mZnNldCsrKSB7CisJCQlpZiAocGJhX251bVtvZmZzZXRdIDwgMHhBKQorCQkJCXBiYV9udW1bb2Zmc2V0XSArPSAnMCc7CisJCQllbHNlIGlmIChwYmFfbnVtW29mZnNldF0gPCAweDEwKQorCQkJCXBiYV9udW1bb2Zmc2V0XSArPSAnQScgLSAweEE7CisJCX0KKworCQlnb3RvIG91dDsKKwl9CisKKwlyZXRfdmFsID0gZTEwMDBfcmVhZF9udm0oaHcsIHBiYV9wdHIsIDEsICZsZW5ndGgpOworCWlmIChyZXRfdmFsKSB7CisJCWVfZGJnKCJOVk0gUmVhZCBFcnJvclxuIik7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChsZW5ndGggPT0gMHhGRkZGIHx8IGxlbmd0aCA9PSAwKSB7CisJCWVfZGJnKCJOVk0gUEJBIG51bWJlciBzZWN0aW9uIGludmFsaWQgbGVuZ3RoXG4iKTsKKwkJcmV0X3ZhbCA9IEUxMDAwX0VSUl9OVk1fUEJBX1NFQ1RJT047CisJCWdvdG8gb3V0OworCX0KKwkvKiBjaGVjayBpZiBwYmFfbnVtIGJ1ZmZlciBpcyBiaWcgZW5vdWdoICovCisJaWYgKHBiYV9udW1fc2l6ZSA8ICgoKHUzMilsZW5ndGggKiAyKSAtIDEpKSB7CisJCWVfZGJnKCJQQkEgc3RyaW5nIGJ1ZmZlciB0b28gc21hbGxcbiIpOworCQlyZXRfdmFsID0gRTEwMDBfRVJSX05PX1NQQUNFOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiB0cmltIHBiYSBsZW5ndGggZnJvbSBzdGFydCBvZiBzdHJpbmcgKi8KKwlwYmFfcHRyKys7CisJbGVuZ3RoLS07CisKKwlmb3IgKG9mZnNldCA9IDA7IG9mZnNldCA8IGxlbmd0aDsgb2Zmc2V0KyspIHsKKwkJcmV0X3ZhbCA9IGUxMDAwX3JlYWRfbnZtKGh3LCBwYmFfcHRyICsgb2Zmc2V0LCAxLCAmbnZtX2RhdGEpOworCQlpZiAocmV0X3ZhbCkgeworCQkJZV9kYmcoIk5WTSBSZWFkIEVycm9yXG4iKTsKKwkJCWdvdG8gb3V0OworCQl9CisJCXBiYV9udW1bb2Zmc2V0ICogMl0gPSAodTgpKG52bV9kYXRhID4+IDgpOworCQlwYmFfbnVtWyhvZmZzZXQgKiAyKSArIDFdID0gKHU4KShudm1fZGF0YSAmIDB4RkYpOworCX0KKwlwYmFfbnVtW29mZnNldCAqIDJdID0gJ1wwJzsKKworb3V0OgorCXJldHVybiByZXRfdmFsOworfQorCisvKioKICAqICBlMTAwMF9yZWFkX21hY19hZGRyX2dlbmVyaWMgLSBSZWFkIGRldmljZSBNQUMgYWRkcmVzcwogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKgpAQCAtMjU3OSwyNSArMjY5MCwzIEBACiBvdXQ6CiAJcmV0dXJuIHJldF92YWw7CiB9Ci0KLXMzMiBlMTAwMGVfcmVhZF9wYmFfbnVtKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiAqcGJhX251bSkKLXsKLQlzMzIgcmV0X3ZhbDsKLQl1MTYgbnZtX2RhdGE7Ci0KLQlyZXRfdmFsID0gZTEwMDBfcmVhZF9udm0oaHcsIE5WTV9QQkFfT0ZGU0VUXzAsIDEsICZudm1fZGF0YSk7Ci0JaWYgKHJldF92YWwpIHsKLQkJZV9kYmcoIk5WTSBSZWFkIEVycm9yXG4iKTsKLQkJcmV0dXJuIHJldF92YWw7Ci0JfQotCSpwYmFfbnVtID0gKHUzMikobnZtX2RhdGEgPDwgMTYpOwotCi0JcmV0X3ZhbCA9IGUxMDAwX3JlYWRfbnZtKGh3LCBOVk1fUEJBX09GRlNFVF8xLCAxLCAmbnZtX2RhdGEpOwotCWlmIChyZXRfdmFsKSB7Ci0JCWVfZGJnKCJOVk0gUmVhZCBFcnJvclxuIik7Ci0JCXJldHVybiByZXRfdmFsOwotCX0KLQkqcGJhX251bSB8PSBudm1fZGF0YTsKLQotCXJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDBlL25ldGRldi5jIGIvZHJpdmVycy9uZXQvZTEwMDBlL25ldGRldi5jCmluZGV4IGM0Y2ExNjIuLmZlNTAyNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS9uZXRkZXYuYworKysgYi9kcml2ZXJzL25ldC9lMTAwMGUvbmV0ZGV2LmMKQEAgLTU0LDcgKzU0LDcgQEAKIAogI2RlZmluZSBEUlZfRVhUUkFWRVJTSU9OICItazIiCiAKLSNkZWZpbmUgRFJWX1ZFUlNJT04gIjEuMi43IiBEUlZfRVhUUkFWRVJTSU9OCisjZGVmaW5lIERSVl9WRVJTSU9OICIxLjIuMjAiIERSVl9FWFRSQVZFUlNJT04KIGNoYXIgZTEwMDBlX2RyaXZlcl9uYW1lW10gPSAiZTEwMDBlIjsKIGNvbnN0IGNoYXIgZTEwMDBlX2RyaXZlcl92ZXJzaW9uW10gPSBEUlZfVkVSU0lPTjsKIApAQCAtMTMyNSw3ICsxMzI1LDcgQEAKIAkJCQlnb3RvIG5leHRfZGVzYzsKIAkJfQogCi0jZGVmaW5lIHJ4dG9wIHJ4X3JpbmctPnJ4X3NrYl90b3AKKyNkZWZpbmUgcnh0b3AgKHJ4X3JpbmctPnJ4X3NrYl90b3ApCiAJCWlmICghKHN0YXR1cyAmIEUxMDAwX1JYRF9TVEFUX0VPUCkpIHsKIAkJCS8qIHRoaXMgZGVzY3JpcHRvciBpcyBvbmx5IHRoZSBiZWdpbm5pbmcgKG9yIG1pZGRsZSkgKi8KIAkJCWlmICghcnh0b3ApIHsKQEAgLTE4MDYsOSArMTgwNiw4IEBACiAJCQkJZXJyID0gcGNpX2VuYWJsZV9tc2l4KGFkYXB0ZXItPnBkZXYsCiAJCQkJCQkgICAgICBhZGFwdGVyLT5tc2l4X2VudHJpZXMsCiAJCQkJCQkgICAgICBhZGFwdGVyLT5udW1fdmVjdG9ycyk7Ci0JCQkJaWYgKGVyciA9PSAwKSB7CisJCQkJaWYgKGVyciA9PSAwKQogCQkJCQlyZXR1cm47Ci0JCQkJfQogCQkJfQogCQkJLyogTVNJLVggZmFpbGVkLCBzbyBmYWxsIHRocm91Z2ggYW5kIHRyeSBNU0kgKi8KIAkJCWVfZXJyKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBNU0ktWCBpbnRlcnJ1cHRzLiAgIgpAQCAtMjA1OSwxMCArMjA1OCw5IEBACiAJaW50IGVyciA9IC1FTk9NRU0sIHNpemU7CiAKIAlzaXplID0gc2l6ZW9mKHN0cnVjdCBlMTAwMF9idWZmZXIpICogdHhfcmluZy0+Y291bnQ7Ci0JdHhfcmluZy0+YnVmZmVyX2luZm8gPSB2bWFsbG9jKHNpemUpOworCXR4X3JpbmctPmJ1ZmZlcl9pbmZvID0gdnphbGxvYyhzaXplKTsKIAlpZiAoIXR4X3JpbmctPmJ1ZmZlcl9pbmZvKQogCQlnb3RvIGVycjsKLQltZW1zZXQodHhfcmluZy0+YnVmZmVyX2luZm8sIDAsIHNpemUpOwogCiAJLyogcm91bmQgdXAgdG8gbmVhcmVzdCA0SyAqLwogCXR4X3JpbmctPnNpemUgPSB0eF9yaW5nLT5jb3VudCAqIHNpemVvZihzdHJ1Y3QgZTEwMDBfdHhfZGVzYyk7CkBAIC0yMDk1LDEwICsyMDkzLDkgQEAKIAlpbnQgaSwgc2l6ZSwgZGVzY19sZW4sIGVyciA9IC1FTk9NRU07CiAKIAlzaXplID0gc2l6ZW9mKHN0cnVjdCBlMTAwMF9idWZmZXIpICogcnhfcmluZy0+Y291bnQ7Ci0JcnhfcmluZy0+YnVmZmVyX2luZm8gPSB2bWFsbG9jKHNpemUpOworCXJ4X3JpbmctPmJ1ZmZlcl9pbmZvID0gdnphbGxvYyhzaXplKTsKIAlpZiAoIXJ4X3JpbmctPmJ1ZmZlcl9pbmZvKQogCQlnb3RvIGVycjsKLQltZW1zZXQocnhfcmluZy0+YnVmZmVyX2luZm8sIDAsIHNpemUpOwogCiAJZm9yIChpID0gMDsgaSA8IHJ4X3JpbmctPmNvdW50OyBpKyspIHsKIAkJYnVmZmVyX2luZm8gPSAmcnhfcmluZy0+YnVmZmVyX2luZm9baV07CkBAIC0yMTMyLDcgKzIxMjksNyBAQAogCX0KIGVycjoKIAl2ZnJlZShyeF9yaW5nLT5idWZmZXJfaW5mbyk7Ci0JZV9lcnIoIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSB0cmFuc21pdCBkZXNjcmlwdG9yIHJpbmdcbiIpOworCWVfZXJyKCJVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgcmVjZWl2ZSBkZXNjcmlwdG9yIHJpbmdcbiIpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTIyMDAsOSArMjE5Nyw4IEBACiAKIAllMTAwMF9jbGVhbl9yeF9yaW5nKGFkYXB0ZXIpOwogCi0JZm9yIChpID0gMDsgaSA8IHJ4X3JpbmctPmNvdW50OyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgcnhfcmluZy0+Y291bnQ7IGkrKykKIAkJa2ZyZWUocnhfcmluZy0+YnVmZmVyX2luZm9baV0ucHNfcGFnZXMpOwotCX0KIAogCXZmcmVlKHJ4X3JpbmctPmJ1ZmZlcl9pbmZvKTsKIAlyeF9yaW5nLT5idWZmZXJfaW5mbyA9IE5VTEw7CkBAIC0yMjQyLDIwICsyMjM4LDE4IEBACiAJCS8qIGhhbmRsZSBUU08gYW5kIGp1bWJvIGZyYW1lcyAqLwogCQlpZiAoYnl0ZXMvcGFja2V0cyA+IDgwMDApCiAJCQlyZXR2YWwgPSBidWxrX2xhdGVuY3k7Ci0JCWVsc2UgaWYgKChwYWNrZXRzIDwgNSkgJiYgKGJ5dGVzID4gNTEyKSkgeworCQllbHNlIGlmICgocGFja2V0cyA8IDUpICYmIChieXRlcyA+IDUxMikpCiAJCQlyZXR2YWwgPSBsb3dfbGF0ZW5jeTsKLQkJfQogCQlicmVhazsKIAljYXNlIGxvd19sYXRlbmN5OiAgLyogNTAgdXNlYyBha2EgMjAwMDAgaW50cy9zICovCiAJCWlmIChieXRlcyA+IDEwMDAwKSB7CiAJCQkvKiB0aGlzIGlmIGhhbmRsZXMgdGhlIFRTTyBhY2NvdW50aW5nICovCi0JCQlpZiAoYnl0ZXMvcGFja2V0cyA+IDgwMDApIHsKKwkJCWlmIChieXRlcy9wYWNrZXRzID4gODAwMCkKIAkJCQlyZXR2YWwgPSBidWxrX2xhdGVuY3k7Ci0JCQl9IGVsc2UgaWYgKChwYWNrZXRzIDwgMTApIHx8ICgoYnl0ZXMvcGFja2V0cykgPiAxMjAwKSkgeworCQkJZWxzZSBpZiAoKHBhY2tldHMgPCAxMCkgfHwgKChieXRlcy9wYWNrZXRzKSA+IDEyMDApKQogCQkJCXJldHZhbCA9IGJ1bGtfbGF0ZW5jeTsKLQkJCX0gZWxzZSBpZiAoKHBhY2tldHMgPiAzNSkpIHsKKwkJCWVsc2UgaWYgKChwYWNrZXRzID4gMzUpKQogCQkJCXJldHZhbCA9IGxvd2VzdF9sYXRlbmN5OwotCQkJfQogCQl9IGVsc2UgaWYgKGJ5dGVzL3BhY2tldHMgPiAyMDAwKSB7CiAJCQlyZXR2YWwgPSBidWxrX2xhdGVuY3k7CiAJCX0gZWxzZSBpZiAocGFja2V0cyA8PSAyICYmIGJ5dGVzIDwgNTEyKSB7CkBAIC0yMjY0LDkgKzIyNTgsOCBAQAogCQlicmVhazsKIAljYXNlIGJ1bGtfbGF0ZW5jeTogLyogMjUwIHVzZWMgYWthIDQwMDAgaW50cy9zICovCiAJCWlmIChieXRlcyA+IDI1MDAwKSB7Ci0JCQlpZiAocGFja2V0cyA+IDM1KSB7CisJCQlpZiAocGFja2V0cyA+IDM1KQogCQkJCXJldHZhbCA9IGxvd19sYXRlbmN5OwotCQkJfQogCQl9IGVsc2UgaWYgKGJ5dGVzIDwgNjAwMCkgewogCQkJcmV0dmFsID0gbG93X2xhdGVuY3k7CiAJCX0KQEAgLTQ0NzUsNyArNDQ2OCw3IEBACiAJCWJyZWFrOwogCX0KIAotCWNzcyA9IHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYik7CisJY3NzID0gc2tiX2NoZWNrc3VtX3N0YXJ0X29mZnNldChza2IpOwogCiAJaSA9IHR4X3JpbmctPm5leHRfdG9fdXNlOwogCWJ1ZmZlcl9pbmZvID0gJnR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldOwpAQCAtNDU5NSw3ICs0NTg4LDcgQEAKIAkJCWkgKz0gdHhfcmluZy0+Y291bnQ7CiAJCWktLTsKIAkJYnVmZmVyX2luZm8gPSAmdHhfcmluZy0+YnVmZmVyX2luZm9baV07Ci0JCWUxMDAwX3B1dF90eGJ1ZihhZGFwdGVyLCBidWZmZXJfaW5mbyk7OworCQllMTAwMF9wdXRfdHhidWYoYWRhcHRlciwgYnVmZmVyX2luZm8pOwogCX0KIAogCXJldHVybiAwOwpAQCAtNDYzMSw3ICs0NjI0LDcgQEAKIAogCWkgPSB0eF9yaW5nLT5uZXh0X3RvX3VzZTsKIAotCXdoaWxlIChjb3VudC0tKSB7CisJZG8gewogCQlidWZmZXJfaW5mbyA9ICZ0eF9yaW5nLT5idWZmZXJfaW5mb1tpXTsKIAkJdHhfZGVzYyA9IEUxMDAwX1RYX0RFU0MoKnR4X3JpbmcsIGkpOwogCQl0eF9kZXNjLT5idWZmZXJfYWRkciA9IGNwdV90b19sZTY0KGJ1ZmZlcl9pbmZvLT5kbWEpOwpAQCAtNDY0Miw3ICs0NjM1LDcgQEAKIAkJaSsrOwogCQlpZiAoaSA9PSB0eF9yaW5nLT5jb3VudCkKIAkJCWkgPSAwOwotCX0KKwl9IHdoaWxlICgtLWNvdW50ID4gMCk7CiAKIAl0eF9kZXNjLT5sb3dlci5kYXRhIHw9IGNwdV90b19sZTMyKGFkYXB0ZXItPnR4ZF9jbWQpOwogCkBAIC01NDY1LDYgKzU0NTgsMzYgQEAKIH0KIAogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCisKK3N0YXRpYyBpcnFyZXR1cm5fdCBlMTAwMF9pbnRyX21zaXgoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gZGF0YTsKKwlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJaW50IHZlY3RvciwgbXNpeF9pcnE7CisKKwlpZiAoYWRhcHRlci0+bXNpeF9lbnRyaWVzKSB7CisJCXZlY3RvciA9IDA7CisJCW1zaXhfaXJxID0gYWRhcHRlci0+bXNpeF9lbnRyaWVzW3ZlY3Rvcl0udmVjdG9yOworCQlkaXNhYmxlX2lycShtc2l4X2lycSk7CisJCWUxMDAwX2ludHJfbXNpeF9yeChtc2l4X2lycSwgbmV0ZGV2KTsKKwkJZW5hYmxlX2lycShtc2l4X2lycSk7CisKKwkJdmVjdG9yKys7CisJCW1zaXhfaXJxID0gYWRhcHRlci0+bXNpeF9lbnRyaWVzW3ZlY3Rvcl0udmVjdG9yOworCQlkaXNhYmxlX2lycShtc2l4X2lycSk7CisJCWUxMDAwX2ludHJfbXNpeF90eChtc2l4X2lycSwgbmV0ZGV2KTsKKwkJZW5hYmxlX2lycShtc2l4X2lycSk7CisKKwkJdmVjdG9yKys7CisJCW1zaXhfaXJxID0gYWRhcHRlci0+bXNpeF9lbnRyaWVzW3ZlY3Rvcl0udmVjdG9yOworCQlkaXNhYmxlX2lycShtc2l4X2lycSk7CisJCWUxMDAwX21zaXhfb3RoZXIobXNpeF9pcnEsIG5ldGRldik7CisJCWVuYWJsZV9pcnEobXNpeF9pcnEpOworCX0KKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKwogLyoKICAqIFBvbGxpbmcgJ2ludGVycnVwdCcgLSB1c2VkIGJ5IHRoaW5ncyBsaWtlIG5ldGNvbnNvbGUgdG8gc2VuZCBza2JzCiAgKiB3aXRob3V0IGhhdmluZyB0byByZS1lbmFibGUgaW50ZXJydXB0cy4gSXQncyBub3QgY2FsbGVkIHdoaWxlCkBAIC01NDc0LDEwICs1NDk3LDIxIEBACiB7CiAJc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCi0JZGlzYWJsZV9pcnEoYWRhcHRlci0+cGRldi0+aXJxKTsKLQllMTAwMF9pbnRyKGFkYXB0ZXItPnBkZXYtPmlycSwgbmV0ZGV2KTsKLQotCWVuYWJsZV9pcnEoYWRhcHRlci0+cGRldi0+aXJxKTsKKwlzd2l0Y2ggKGFkYXB0ZXItPmludF9tb2RlKSB7CisJY2FzZSBFMTAwMEVfSU5UX01PREVfTVNJWDoKKwkJZTEwMDBfaW50cl9tc2l4KGFkYXB0ZXItPnBkZXYtPmlycSwgbmV0ZGV2KTsKKwkJYnJlYWs7CisJY2FzZSBFMTAwMEVfSU5UX01PREVfTVNJOgorCQlkaXNhYmxlX2lycShhZGFwdGVyLT5wZGV2LT5pcnEpOworCQllMTAwMF9pbnRyX21zaShhZGFwdGVyLT5wZGV2LT5pcnEsIG5ldGRldik7CisJCWVuYWJsZV9pcnEoYWRhcHRlci0+cGRldi0+aXJxKTsKKwkJYnJlYWs7CisJZGVmYXVsdDogLyogRTEwMDBFX0lOVF9NT0RFX0xFR0FDWSAqLworCQlkaXNhYmxlX2lycShhZGFwdGVyLT5wZGV2LT5pcnEpOworCQllMTAwMF9pbnRyKGFkYXB0ZXItPnBkZXYtPmlycSwgbmV0ZGV2KTsKKwkJZW5hYmxlX2lycShhZGFwdGVyLT5wZGV2LT5pcnEpOworCQlicmVhazsKKwl9CiB9CiAjZW5kaWYKIApAQCAtNTU4Nyw3ICs1NjIxLDggQEAKIHsKIAlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7Ci0JdTMyIHBiYV9udW07CisJdTMyIHJldF92YWw7CisJdTggcGJhX3N0cltFMTAwMF9QQkFOVU1fTEVOR1RIXTsKIAogCS8qIHByaW50IGJ1cyB0eXBlL3NwZWVkL3dpZHRoIGluZm8gKi8KIAllX2luZm8oIihQQ0kgRXhwcmVzczoyLjVHQi9zOiVzKSAlcE1cbiIsCkBAIC01NTk4LDkgKzU2MzMsMTIgQEAKIAkgICAgICAgbmV0ZGV2LT5kZXZfYWRkcik7CiAJZV9pbmZvKCJJbnRlbChSKSBQUk8vJXMgTmV0d29yayBDb25uZWN0aW9uXG4iLAogCSAgICAgICAoaHctPnBoeS50eXBlID09IGUxMDAwX3BoeV9pZmUpID8gIjEwLzEwMCIgOiAiMTAwMCIpOwotCWUxMDAwZV9yZWFkX3BiYV9udW0oaHcsICZwYmFfbnVtKTsKLQllX2luZm8oIk1BQzogJWQsIFBIWTogJWQsIFBCQSBObzogJTA2eC0lMDN4XG4iLAotCSAgICAgICBody0+bWFjLnR5cGUsIGh3LT5waHkudHlwZSwgKHBiYV9udW0gPj4gOCksIChwYmFfbnVtICYgMHhmZikpOworCXJldF92YWwgPSBlMTAwMF9yZWFkX3BiYV9zdHJpbmdfZ2VuZXJpYyhodywgcGJhX3N0ciwKKwkJCQkJCUUxMDAwX1BCQU5VTV9MRU5HVEgpOworCWlmIChyZXRfdmFsKQorCQlzdHJjcHkocGJhX3N0ciwgIlVua25vd24iKTsKKwllX2luZm8oIk1BQzogJWQsIFBIWTogJWQsIFBCQSBObzogJXNcbiIsCisJICAgICAgIGh3LT5tYWMudHlwZSwgaHctPnBoeS50eXBlLCBwYmFfc3RyKTsKIH0KIAogc3RhdGljIHZvaWQgZTEwMDBfZWVwcm9tX2NoZWNrcyhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcikKQEAgLTU4NjQsNiArNTkwMiw3IEBACiAJSU5JVF9XT1JLKCZhZGFwdGVyLT5kb3duc2hpZnRfdGFzaywgZTEwMDBlX2Rvd25zaGlmdF93b3JrYXJvdW5kKTsKIAlJTklUX1dPUksoJmFkYXB0ZXItPnVwZGF0ZV9waHlfdGFzaywgZTEwMDBlX3VwZGF0ZV9waHlfdGFzayk7CiAJSU5JVF9XT1JLKCZhZGFwdGVyLT5wcmludF9oYW5nX3Rhc2ssIGUxMDAwX3ByaW50X2h3X2hhbmcpOworCUlOSVRfV09SSygmYWRhcHRlci0+bGVkX2JsaW5rX3Rhc2ssIGUxMDAwZV9sZWRfYmxpbmtfdGFzayk7CiAKIAkvKiBJbml0aWFsaXplIGxpbmsgcGFyYW1ldGVycy4gVXNlciBjYW4gY2hhbmdlIHRoZW0gd2l0aCBldGh0b29sICovCiAJYWRhcHRlci0+aHcubWFjLmF1dG9uZWcgPSAxOwpAQCAtNTk4NCw4ICs2MDIzLDggQEAKIAlib29sIGRvd24gPSB0ZXN0X2JpdChfX0UxMDAwX0RPV04sICZhZGFwdGVyLT5zdGF0ZSk7CiAKIAkvKgotCSAqIGZsdXNoX3NjaGVkdWxlZCB3b3JrIG1heSByZXNjaGVkdWxlIG91ciB3YXRjaGRvZyB0YXNrLCBzbwotCSAqIGV4cGxpY2l0bHkgZGlzYWJsZSB3YXRjaGRvZyB0YXNrcyBmcm9tIGJlaW5nIHJlc2NoZWR1bGVkCisJICogVGhlIHRpbWVycyBtYXkgYmUgcmVzY2hlZHVsZWQsIHNvIGV4cGxpY2l0bHkgZGlzYWJsZSB0aGVtCisJICogZnJvbSBiZWluZyByZXNjaGVkdWxlZC4KIAkgKi8KIAlpZiAoIWRvd24pCiAJCXNldF9iaXQoX19FMTAwMF9ET1dOLCAmYWRhcHRlci0+c3RhdGUpOwpAQCAtNTk5Niw4ICs2MDM1LDggQEAKIAljYW5jZWxfd29ya19zeW5jKCZhZGFwdGVyLT53YXRjaGRvZ190YXNrKTsKIAljYW5jZWxfd29ya19zeW5jKCZhZGFwdGVyLT5kb3duc2hpZnRfdGFzayk7CiAJY2FuY2VsX3dvcmtfc3luYygmYWRhcHRlci0+dXBkYXRlX3BoeV90YXNrKTsKKwljYW5jZWxfd29ya19zeW5jKCZhZGFwdGVyLT5sZWRfYmxpbmtfdGFzayk7CiAJY2FuY2VsX3dvcmtfc3luYygmYWRhcHRlci0+cHJpbnRfaGFuZ190YXNrKTsKLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwogCiAJaWYgKCEobmV0ZGV2LT5mbGFncyAmIElGRl9VUCkpCiAJCWUxMDAwX3Bvd2VyX2Rvd25fcGh5KGFkYXB0ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDBlL3BhcmFtLmMgYi9kcml2ZXJzL25ldC9lMTAwMGUvcGFyYW0uYwppbmRleCAzZDM2OTExLi5hOTYxMmIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMGUvcGFyYW0uYworKysgYi9kcml2ZXJzL25ldC9lMTAwMGUvcGFyYW0uYwpAQCAtNDIxLDcgKzQyMSw3IEBACiAJCXN0YXRpYyBjb25zdCBzdHJ1Y3QgZTEwMDBfb3B0aW9uIG9wdCA9IHsKIAkJCS50eXBlID0gZW5hYmxlX29wdGlvbiwKIAkJCS5uYW1lID0gIkNSQyBTdHJpcHBpbmciLAotCQkJLmVyciAgPSAiZGVmYXVsdGluZyB0byBlbmFibGVkIiwKKwkJCS5lcnIgID0gImRlZmF1bHRpbmcgdG8gRW5hYmxlZCIsCiAJCQkuZGVmICA9IE9QVElPTl9FTkFCTEVECiAJCX07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwZS9waHkuYyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9waHkuYwppbmRleCAzZDNkYzBjLi4xNzgxZWZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMGUvcGh5LmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMDBlL3BoeS5jCkBAIC00MiwyMCArNDIsMjAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiAqZGF0YSwgYm9vbCByZWFkKTsKIAogLyogQ2FibGUgbGVuZ3RoIHRhYmxlcyAqLwotc3RhdGljIGNvbnN0IHUxNiBlMTAwMF9tODhfY2FibGVfbGVuZ3RoX3RhYmxlW10gPQotCXsgMCwgNTAsIDgwLCAxMTAsIDE0MCwgMTQwLCBFMTAwMF9DQUJMRV9MRU5HVEhfVU5ERUZJTkVEIH07CitzdGF0aWMgY29uc3QgdTE2IGUxMDAwX204OF9jYWJsZV9sZW5ndGhfdGFibGVbXSA9IHsKKwkwLCA1MCwgODAsIDExMCwgMTQwLCAxNDAsIEUxMDAwX0NBQkxFX0xFTkdUSF9VTkRFRklORUQgfTsKICNkZWZpbmUgTTg4RTEwMDBfQ0FCTEVfTEVOR1RIX1RBQkxFX1NJWkUgXAogCQlBUlJBWV9TSVpFKGUxMDAwX204OF9jYWJsZV9sZW5ndGhfdGFibGUpCiAKLXN0YXRpYyBjb25zdCB1MTYgZTEwMDBfaWdwXzJfY2FibGVfbGVuZ3RoX3RhYmxlW10gPQotCXsgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMywgNSwgOCwgMTEsIDEzLCAxNiwgMTgsIDIxLCAwLCAwLCAwLCAzLAotCSAgNiwgMTAsIDEzLCAxNiwgMTksIDIzLCAyNiwgMjksIDMyLCAzNSwgMzgsIDQxLCA2LCAxMCwgMTQsIDE4LCAyMiwKLQkgIDI2LCAzMCwgMzMsIDM3LCA0MSwgNDQsIDQ4LCA1MSwgNTQsIDU4LCA2MSwgMjEsIDI2LCAzMSwgMzUsIDQwLAotCSAgNDQsIDQ5LCA1MywgNTcsIDYxLCA2NSwgNjgsIDcyLCA3NSwgNzksIDgyLCA0MCwgNDUsIDUxLCA1NiwgNjEsCi0JICA2NiwgNzAsIDc1LCA3OSwgODMsIDg3LCA5MSwgOTQsIDk4LCAxMDEsIDEwNCwgNjAsIDY2LCA3MiwgNzcsIDgyLAotCSAgODcsIDkyLCA5NiwgMTAwLCAxMDQsIDEwOCwgMTExLCAxMTQsIDExNywgMTE5LCAxMjEsIDgzLCA4OSwgOTUsCi0JICAxMDAsIDEwNSwgMTA5LCAxMTMsIDExNiwgMTE5LCAxMjIsIDEyNCwgMTA0LCAxMDksIDExNCwgMTE4LCAxMjEsCi0JICAxMjR9Oworc3RhdGljIGNvbnN0IHUxNiBlMTAwMF9pZ3BfMl9jYWJsZV9sZW5ndGhfdGFibGVbXSA9IHsKKwkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzLCA1LCA4LCAxMSwgMTMsIDE2LCAxOCwgMjEsIDAsIDAsIDAsIDMsCisJNiwgMTAsIDEzLCAxNiwgMTksIDIzLCAyNiwgMjksIDMyLCAzNSwgMzgsIDQxLCA2LCAxMCwgMTQsIDE4LCAyMiwKKwkyNiwgMzAsIDMzLCAzNywgNDEsIDQ0LCA0OCwgNTEsIDU0LCA1OCwgNjEsIDIxLCAyNiwgMzEsIDM1LCA0MCwKKwk0NCwgNDksIDUzLCA1NywgNjEsIDY1LCA2OCwgNzIsIDc1LCA3OSwgODIsIDQwLCA0NSwgNTEsIDU2LCA2MSwKKwk2NiwgNzAsIDc1LCA3OSwgODMsIDg3LCA5MSwgOTQsIDk4LCAxMDEsIDEwNCwgNjAsIDY2LCA3MiwgNzcsIDgyLAorCTg3LCA5MiwgOTYsIDEwMCwgMTA0LCAxMDgsIDExMSwgMTE0LCAxMTcsIDExOSwgMTIxLCA4MywgODksIDk1LAorCTEwMCwgMTA1LCAxMDksIDExMywgMTE2LCAxMTksIDEyMiwgMTI0LCAxMDQsIDEwOSwgMTE0LCAxMTgsIDEyMSwKKwkxMjR9OwogI2RlZmluZSBJR1AwMkUxMDAwX0NBQkxFX0xFTkdUSF9UQUJMRV9TSVpFIFwKIAkJQVJSQVlfU0laRShlMTAwMF9pZ3BfMl9jYWJsZV9sZW5ndGhfdGFibGUpCiAKQEAgLTIyNiw2ICsyMjYsMTMgQEAKIAl9CiAJKmRhdGEgPSAodTE2KSBtZGljOwogCisJLyoKKwkgKiBBbGxvdyBzb21lIHRpbWUgYWZ0ZXIgZWFjaCBNRElDIHRyYW5zYWN0aW9uIHRvIGF2b2lkCisJICogcmVhZGluZyBkdXBsaWNhdGUgZGF0YSBpbiB0aGUgbmV4dCBNRElDIHRyYW5zYWN0aW9uLgorCSAqLworCWlmIChody0+bWFjLnR5cGUgPT0gZTEwMDBfcGNoMmxhbikKKwkJdWRlbGF5KDEwMCk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjc5LDYgKzI4NiwxMyBAQAogCQlyZXR1cm4gLUUxMDAwX0VSUl9QSFk7CiAJfQogCisJLyoKKwkgKiBBbGxvdyBzb21lIHRpbWUgYWZ0ZXIgZWFjaCBNRElDIHRyYW5zYWN0aW9uIHRvIGF2b2lkCisJICogcmVhZGluZyBkdXBsaWNhdGUgZGF0YSBpbiB0aGUgbmV4dCBNRElDIHRyYW5zYWN0aW9uLgorCSAqLworCWlmIChody0+bWFjLnR5cGUgPT0gZTEwMDBfcGNoMmxhbikKKwkJdWRlbGF5KDEwMCk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTA0Myw5ICsxMDU3LDggQEAKIAogCWVfZGJnKCJBdXRvLU5lZyBBZHZlcnRpc2luZyAleFxuIiwgbWlpX2F1dG9uZWdfYWR2X3JlZyk7CiAKLQlpZiAocGh5LT5hdXRvbmVnX21hc2sgJiBBRFZFUlRJU0VfMTAwMF9GVUxMKSB7CisJaWYgKHBoeS0+YXV0b25lZ19tYXNrICYgQURWRVJUSVNFXzEwMDBfRlVMTCkKIAkJcmV0X3ZhbCA9IGUxZV93cGh5KGh3LCBQSFlfMTAwMFRfQ1RSTCwgbWlpXzEwMDB0X2N0cmxfcmVnKTsKLQl9CiAKIAlyZXR1cm4gcmV0X3ZhbDsKIH0KQEAgLTE4NDAsMTEgKzE4NTMsMTIgQEAKIAl1MTYgcGh5X2RhdGEsIGksIGFnY192YWx1ZSA9IDA7CiAJdTE2IGN1cl9hZ2NfaW5kZXgsIG1heF9hZ2NfaW5kZXggPSAwOwogCXUxNiBtaW5fYWdjX2luZGV4ID0gSUdQMDJFMTAwMF9DQUJMRV9MRU5HVEhfVEFCTEVfU0laRSAtIDE7Ci0JdTE2IGFnY19yZWdfYXJyYXlbSUdQMDJFMTAwMF9QSFlfQ0hBTk5FTF9OVU1dID0KLQkJCQkJCQkge0lHUDAyRTEwMDBfUEhZX0FHQ19BLAotCQkJCQkJCSAgSUdQMDJFMTAwMF9QSFlfQUdDX0IsCi0JCQkJCQkJICBJR1AwMkUxMDAwX1BIWV9BR0NfQywKLQkJCQkJCQkgIElHUDAyRTEwMDBfUEhZX0FHQ19EfTsKKwlzdGF0aWMgY29uc3QgdTE2IGFnY19yZWdfYXJyYXlbSUdQMDJFMTAwMF9QSFlfQ0hBTk5FTF9OVU1dID0geworCSAgICAgICBJR1AwMkUxMDAwX1BIWV9BR0NfQSwKKwkgICAgICAgSUdQMDJFMTAwMF9QSFlfQUdDX0IsCisJICAgICAgIElHUDAyRTEwMDBfUEhZX0FHQ19DLAorCSAgICAgICBJR1AwMkUxMDAwX1BIWV9BR0NfRAorCX07CiAKIAkvKiBSZWFkIHRoZSBBR0MgcmVnaXN0ZXJzIGZvciBhbGwgY2hhbm5lbHMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgSUdQMDJFMTAwMF9QSFlfQ0hBTk5FTF9OVU07IGkrKykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTIxMDAuYyBiL2RyaXZlcnMvbmV0L2UyMTAwLmMKaW5kZXggMDZlNzJmYi4uOTRlYzk3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTIxMDAuYworKysgYi9kcml2ZXJzL25ldC9lMjEwMC5jCkBAIC0yMTYsNyArMjE2LDcgQEAKIAkJcHJpbnRrKCIgJTAyWCIsIHN0YXRpb25fYWRkcltpXSk7CiAKIAlpZiAoZGV2LT5pcnEgPCAyKSB7Ci0JCWludCBpcnFsaXN0W10gPSB7MTUsIDExLCAxMCwgMTIsIDUsIDksIDMsIDR9OworCQlzdGF0aWMgY29uc3QgaW50IGlycWxpc3RbXSA9IHsxNSwgMTEsIDEwLCAxMiwgNSwgOSwgMywgNH07CiAJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGlycWxpc3QpOyBpKyspCiAJCQlpZiAocmVxdWVzdF9pcnEgKGlycWxpc3RbaV0sIE5VTEwsIDAsICJib2d1cyIsIE5VTEwpICE9IC1FQlVTWSkgewogCQkJCWRldi0+aXJxID0gaXJxbGlzdFtpXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VlcHJvLmMgYi9kcml2ZXJzL25ldC9lZXByby5jCmluZGV4IDdjODI2MzEuLjRmYThkMmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VlcHJvLmMKKysrIGIvZHJpdmVycy9uZXQvZWVwcm8uYwpAQCAtMzAyLDcgKzMwMiw3IEBACiAjZGVmaW5lIGVlX2lkX2VlcHJvMTBwMCAweDEwICAgLyogSUQgZm9yIGVlcHJvLzEwKyAqLwogI2RlZmluZSBlZV9pZF9lZXBybzEwcDEgMHgzMQogCi0jZGVmaW5lIFRYX1RJTUVPVVQgNDAKKyNkZWZpbmUgVFhfVElNRU9VVCAoKDQqSFopLzEwKQogCiAvKiBJbmRleCB0byBmdW5jdGlvbnMsIGFzIGZ1bmN0aW9uIHByb3RvdHlwZXMuICovCiAKQEAgLTg5MSwxMiArODkxLDEzIEBACiAgICB0aGVyZSBpcyBub24tcmVib290IHdheSB0byByZWNvdmVyIGlmIHNvbWV0aGluZyBnb2VzIHdyb25nLgogICAgKi8KIAotc3RhdGljIGNoYXIgaXJxcm1hcFtdID0gey0xLC0xLDAsMSwtMSwyLC0xLC0xLC0xLDAsMyw0LC0xLC0xLC0xLC0xfTsKLXN0YXRpYyBjaGFyIGlycXJtYXAyW10gPSB7LTEsLTEsNCwwLDEsMiwtMSwzLC0xLDQsNSw2LDcsLTEsLTEsLTF9Oworc3RhdGljIGNvbnN0IGNoYXIgaXJxcm1hcFtdID0gey0xLC0xLDAsMSwtMSwyLC0xLC0xLC0xLDAsMyw0LC0xLC0xLC0xLC0xfTsKK3N0YXRpYyBjb25zdCBjaGFyIGlycXJtYXAyW10gPSB7LTEsLTEsNCwwLDEsMiwtMSwzLC0xLDQsNSw2LDcsLTEsLTEsLTF9Owogc3RhdGljIGludAllZXByb19ncmFiX2lycShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCWludCBpcnFsaXN0W10gPSB7IDMsIDQsIDUsIDcsIDksIDEwLCAxMSwgMTIsIDAgfTsKLQlpbnQgKmlycXAgPSBpcnFsaXN0LCB0ZW1wX3JlZywgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CisJc3RhdGljIGNvbnN0IGludCBpcnFsaXN0W10gPSB7IDMsIDQsIDUsIDcsIDksIDEwLCAxMSwgMTIsIDAgfTsKKwljb25zdCBpbnQgKmlycXAgPSBpcnFsaXN0OworCWludCB0ZW1wX3JlZywgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CiAKIAllZXByb19zdzJiYW5rMShpb2FkZHIpOyAvKiBiZSBDQVJFRlVMLCBCQU5LIDEgbm93ICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VleHByZXNzLmMgYi9kcml2ZXJzL25ldC9lZXhwcmVzcy5jCmluZGV4IDEyYzM3ZDIuLjQ4ZWU1MWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VleHByZXNzLmMKKysrIGIvZHJpdmVycy9uZXQvZWV4cHJlc3MuYwpAQCAtMTEwMyw3ICsxMTAzLDcgQEAKIAkJZGV2LT5kZXZfYWRkcltpXSA9ICgodW5zaWduZWQgY2hhciAqKWh3X2FkZHIpWzUtaV07CiAKIAl7Ci0JCXN0YXRpYyBjaGFyIGlycW1hcFtdPXswLCA5LCAzLCA0LCA1LCAxMCwgMTEsIDB9OworCQlzdGF0aWMgY29uc3QgY2hhciBpcnFtYXBbXSA9IHsgMCwgOSwgMywgNCwgNSwgMTAsIDExLCAwIH07CiAJCXVuc2lnbmVkIHNob3J0IHNldHVwdmFsID0gZWV4cF9od19yZWFkZWVwcm9tKGlvYWRkciwwKTsKIAogCQkvKiBVc2UgdGhlIElSUSBmcm9tIEVFUFJPTSBpZiBub25lIHdhcyBnaXZlbiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZWhlYS9laGVhLmggYi9kcml2ZXJzL25ldC9laGVhL2VoZWEuaAppbmRleCA4ZTc0NWU3Li5hNzI0YTJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9laGVhL2VoZWEuaAorKysgYi9kcml2ZXJzL25ldC9laGVhL2VoZWEuaApAQCAtMTMwLDE5ICsxMzAsNiBAQAogCiAvKiB1dGlsaXR5IGZ1bmN0aW9ucyAqLwogCi0jZGVmaW5lIGVoZWFfaW5mbyhmbXQsIGFyZ3MuLi4pIFwKLQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FICI6ICIgZm10ICJcbiIsICMjIGFyZ3MpCi0KLSNkZWZpbmUgZWhlYV9lcnJvcihmbXQsIGFyZ3MuLi4pIFwKLQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogRXJyb3IgaW4gJXM6ICIgZm10ICJcbiIsIF9fZnVuY19fLCAjIyBhcmdzKQotCi0jaWZkZWYgREVCVUcKLSNkZWZpbmUgZWhlYV9kZWJ1ZyhmbXQsIGFyZ3MuLi4pIFwKLQlwcmludGsoS0VSTl9ERUJVRyBEUlZfTkFNRSAiOiAiIGZtdCwgIyMgYXJncykKLSNlbHNlCi0jZGVmaW5lIGVoZWFfZGVidWcoZm10LCBhcmdzLi4uKSBkbyB7fSB3aGlsZSAoMCkKLSNlbmRpZgotCiB2b2lkIGVoZWFfZHVtcCh2b2lkICphZHIsIGludCBsZW4sIGNoYXIgKm1zZyk7CiAKICNkZWZpbmUgRUhFQV9CTUFTSyhwb3MsIGxlbmd0aCkgKCgocG9zKSA8PCAxNikgKyAobGVuZ3RoKSkKQEAgLTUxNSw2ICs1MDIsNCBAQAogaW50IGVoZWFfc2Vuc2VfcG9ydF9hdHRyKHN0cnVjdCBlaGVhX3BvcnQgKnBvcnQpOwogaW50IGVoZWFfc2V0X3BvcnRzcGVlZChzdHJ1Y3QgZWhlYV9wb3J0ICpwb3J0LCB1MzIgcG9ydF9zcGVlZCk7CiAKLWV4dGVybiBzdHJ1Y3Qgd29ya19zdHJ1Y3QgZWhlYV9yZXJlZ19tcl90YXNrOwotCiAjZW5kaWYJLyogX19FSEVBX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZWhlYS9laGVhX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9ldGh0b29sLmMKaW5kZXggZDZjZjUwMi4uM2UyZTczNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZWhlYS9laGVhX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9laGVhL2VoZWFfZXRodG9vbC5jCkBAIC0yNiw2ICsyNiw4IEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwogCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKICNpbmNsdWRlICJlaGVhLmgiCiAjaW5jbHVkZSAiZWhlYV9waHlwLmgiCiAKQEAgLTExOCwxMCArMTIwLDEwIEBACiAJcmV0ID0gZWhlYV9zZXRfcG9ydHNwZWVkKHBvcnQsIHNwKTsKIAogCWlmICghcmV0KQotCQllaGVhX2luZm8oIiVzOiBQb3J0IHNwZWVkIHN1Y2Nlc3NmdWxseSBzZXQ6ICVkTWJwcyAiCi0JCQkgICIlcyBEdXBsZXgiLAotCQkJICBwb3J0LT5uZXRkZXYtPm5hbWUsIHBvcnQtPnBvcnRfc3BlZWQsCi0JCQkgIHBvcnQtPmZ1bGxfZHVwbGV4ID09IDEgPyAiRnVsbCIgOiAiSGFsZiIpOworCQluZXRkZXZfaW5mbyhkZXYsCisJCQkgICAgIlBvcnQgc3BlZWQgc3VjY2Vzc2Z1bGx5IHNldDogJWRNYnBzICVzIER1cGxleFxuIiwKKwkJCSAgICBwb3J0LT5wb3J0X3NwZWVkLAorCQkJICAgIHBvcnQtPmZ1bGxfZHVwbGV4ID09IDEgPyAiRnVsbCIgOiAiSGFsZiIpOwogb3V0OgogCXJldHVybiByZXQ7CiB9CkBAIC0xMzQsMTAgKzEzNiwxMCBAQAogCXJldCA9IGVoZWFfc2V0X3BvcnRzcGVlZChwb3J0LCBFSEVBX1NQRUVEX0FVVE9ORUcpOwogCiAJaWYgKCFyZXQpCi0JCWVoZWFfaW5mbygiJXM6IFBvcnQgc3BlZWQgc3VjY2Vzc2Z1bGx5IHNldDogJWRNYnBzICIKLQkJCSAgIiVzIER1cGxleCIsCi0JCQkgIHBvcnQtPm5ldGRldi0+bmFtZSwgcG9ydC0+cG9ydF9zcGVlZCwKLQkJCSAgcG9ydC0+ZnVsbF9kdXBsZXggPT0gMSA/ICJGdWxsIiA6ICJIYWxmIik7CisJCW5ldGRldl9pbmZvKHBvcnQtPm5ldGRldiwKKwkJCSAgICAiUG9ydCBzcGVlZCBzdWNjZXNzZnVsbHkgc2V0OiAlZE1icHMgJXMgRHVwbGV4XG4iLAorCQkJICAgIHBvcnQtPnBvcnRfc3BlZWQsCisJCQkgICAgcG9ydC0+ZnVsbF9kdXBsZXggPT0gMSA/ICJGdWxsIiA6ICJIYWxmIik7CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZWhlYS9laGVhX21haW4uYyBiL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9tYWluLmMKaW5kZXggYjk1ZjA4Ny4uMTAzMmI1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZWhlYS9laGVhX21haW4uYworKysgYi9kcml2ZXJzL25ldC9laGVhL2VoZWFfbWFpbi5jCkBAIC0yNiw2ICsyNiw4IEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwogCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9pbi5oPgogI2luY2x1ZGUgPGxpbnV4L2lwLmg+CiAjaW5jbHVkZSA8bGludXgvdGNwLmg+CkBAIC0xMDEsNyArMTAzLDYgQEAKIHN0YXRpYyBpbnQgcG9ydF9uYW1lX2NudDsKIHN0YXRpYyBMSVNUX0hFQUQoYWRhcHRlcl9saXN0KTsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGVoZWFfZHJpdmVyX2ZsYWdzOwotc3RydWN0IHdvcmtfc3RydWN0IGVoZWFfcmVyZWdfbXJfdGFzazsKIHN0YXRpYyBERUZJTkVfTVVURVgoZGxwYXJfbWVtX2xvY2spOwogc3RydWN0IGVoZWFfZndfaGFuZGxlX2FycmF5IGVoZWFfZndfaGFuZGxlczsKIHN0cnVjdCBlaGVhX2JjbWNfcmVnX2FycmF5IGVoZWFfYmNtY19yZWdzOwpAQCAtMTM2LDggKzEzNyw4IEBACiAJaW50IHg7CiAJdW5zaWduZWQgY2hhciAqZGViID0gYWRyOwogCWZvciAoeCA9IDA7IHggPCBsZW47IHggKz0gMTYpIHsKLQkJcHJpbnRrKERSVl9OQU1FICIgJXMgYWRyPSVwIG9mcz0lMDR4ICUwMTZsbHggJTAxNmxseFxuIiwgbXNnLAotCQkJICBkZWIsIHgsICooKHU2NCAqKSZkZWJbMF0pLCAqKCh1NjQgKikmZGViWzhdKSk7CisJCXByX2luZm8oIiVzIGFkcj0lcCBvZnM9JTA0eCAlMDE2bGx4ICUwMTZsbHhcbiIsCisJCQltc2csIGRlYiwgeCwgKigodTY0ICopJmRlYlswXSksICooKHU2NCAqKSZkZWJbOF0pKTsKIAkJZGViICs9IDE2OwogCX0KIH0KQEAgLTMzNyw3ICszMzgsNyBAQAogCiAJY2IyID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJaWYgKCFjYjIpIHsKLQkJZWhlYV9lcnJvcigibm8gbWVtIGZvciBjYjIiKTsKKwkJbmV0ZGV2X2VycihkZXYsICJubyBtZW0gZm9yIGNiMlxuIik7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtMzQ1LDcgKzM0Niw3IEBACiAJCQkJICAgICAgcG9ydC0+bG9naWNhbF9wb3J0X2lkLAogCQkJCSAgICAgIEhfUE9SVF9DQjIsIEhfUE9SVF9DQjJfQUxMLCBjYjIpOwogCWlmIChocmV0ICE9IEhfU1VDQ0VTUykgewotCQllaGVhX2Vycm9yKCJxdWVyeV9laGVhX3BvcnQgZmFpbGVkIik7CisJCW5ldGRldl9lcnIoZGV2LCAicXVlcnlfZWhlYV9wb3J0IGZhaWxlZFxuIik7CiAJCWdvdG8gb3V0X2hlcnI7CiAJfQogCkBAIC00MDAsNyArNDAxLDcgQEAKIAkJCXNrYl9hcnJfcnExW2luZGV4XSA9IG5ldGRldl9hbGxvY19za2IoZGV2LAogCQkJCQkJCSAgICAgIEVIRUFfTF9QS1RfU0laRSk7CiAJCQlpZiAoIXNrYl9hcnJfcnExW2luZGV4XSkgewotCQkJCWVoZWFfaW5mbygiVW5hYmxlIHRvIGFsbG9jYXRlIGVub3VnaCBza2IgaW4gdGhlIGFycmF5XG4iKTsKKwkJCQluZXRkZXZfaW5mbyhkZXYsICJVbmFibGUgdG8gYWxsb2NhdGUgZW5vdWdoIHNrYiBpbiB0aGUgYXJyYXlcbiIpOwogCQkJCXByLT5ycTFfc2tiYS5vc19za2JzID0gZmlsbF93cWVzIC0gaTsKIAkJCQlicmVhazsKIAkJCX0KQEAgLTQyNCwxNCArNDI1LDE0IEBACiAJaW50IGk7CiAKIAlpZiAobnJfcnExYSA+IHByLT5ycTFfc2tiYS5sZW4pIHsKLQkJZWhlYV9lcnJvcigiTlJfUlExQSBiaWdnZXIgdGhhbiBza2IgYXJyYXkgbGVuXG4iKTsKKwkJbmV0ZGV2X2VycihkZXYsICJOUl9SUTFBIGJpZ2dlciB0aGFuIHNrYiBhcnJheSBsZW5cbiIpOwogCQlyZXR1cm47CiAJfQogCiAJZm9yIChpID0gMDsgaSA8IG5yX3JxMWE7IGkrKykgewogCQlza2JfYXJyX3JxMVtpXSA9IG5ldGRldl9hbGxvY19za2IoZGV2LCBFSEVBX0xfUEtUX1NJWkUpOwogCQlpZiAoIXNrYl9hcnJfcnExW2ldKSB7Ci0JCQllaGVhX2luZm8oIk5vIGVub3VnaCBtZW1vcnkgdG8gYWxsb2NhdGUgc2tiIGFycmF5XG4iKTsKKwkJCW5ldGRldl9pbmZvKGRldiwgIk5vdCBlbm91Z2ggbWVtb3J5IHRvIGFsbG9jYXRlIHNrYiBhcnJheVxuIik7CiAJCQlicmVhazsKIAkJfQogCX0KQEAgLTQ2OSw4ICs0NzAsOSBAQAogCQlpZiAoIXNrYikgewogCQkJcV9za2JhLT5vc19za2JzID0gZmlsbF93cWVzIC0gaTsKIAkJCWlmIChxX3NrYmEtPm9zX3NrYnMgPT0gcV9za2JhLT5sZW4gLSAyKSB7Ci0JCQkJZWhlYV9pbmZvKCIlczogcnElaSByYW4gZHJ5IC0gbm8gbWVtIGZvciBza2IiLAotCQkJCQkgIHByLT5wb3J0LT5uZXRkZXYtPm5hbWUsIHJxX25yKTsKKwkJCQluZXRkZXZfaW5mbyhwci0+cG9ydC0+bmV0ZGV2LAorCQkJCQkgICAgInJxJWkgcmFuIGRyeSAtIG5vIG1lbSBmb3Igc2tiXG4iLAorCQkJCQkgICAgcnFfbnIpOwogCQkJCXJldCA9IC1FTk9NRU07CiAJCQl9CiAJCQlicmVhazsKQEAgLTYzNSw4ICs2MzcsOCBAQAogCiAJaWYgKGNxZS0+c3RhdHVzICYgRUhFQV9DUUVfU1RBVF9GQVRfRVJSX01BU0spIHsKIAkJaWYgKG5ldGlmX21zZ19yeF9lcnIocHItPnBvcnQpKSB7Ci0JCQllaGVhX2Vycm9yKCJDcml0aWNhbCByZWNlaXZlIGVycm9yIGZvciBRUCAlZC4gIgotCQkJCSAgICJSZXNldHRpbmcgcG9ydC4iLCBwci0+cXAtPmluaXRfYXR0ci5xcF9ucik7CisJCQlwcl9lcnIoIkNyaXRpY2FsIHJlY2VpdmUgZXJyb3IgZm9yIFFQICVkLiBSZXNldHRpbmcgcG9ydC5cbiIsCisJCQkgICAgICAgcHItPnFwLT5pbml0X2F0dHIucXBfbnIpOwogCQkJZWhlYV9kdW1wKGNxZSwgc2l6ZW9mKCpjcWUpLCAiQ1FFIik7CiAJCX0KIAkJZWhlYV9zY2hlZHVsZV9wb3J0X3Jlc2V0KHByLT5wb3J0KTsKQEAgLTczOCwxMyArNzQwLDEzIEBACiAJCQkJCQkJICBza2JfYXJyX3JxMV9sZW4sCiAJCQkJCQkJICB3cWVfaW5kZXgpOwogCQkJCWlmICh1bmxpa2VseSghc2tiKSkgewotCQkJCQlpZiAobmV0aWZfbXNnX3J4X2Vycihwb3J0KSkKLQkJCQkJCWVoZWFfZXJyb3IoIkxMIHJxMTogc2tiPU5VTEwiKTsKKwkJCQkJbmV0aWZfaW5mbyhwb3J0LCByeF9lcnIsIGRldiwKKwkJCQkJCSAgIkxMIHJxMTogc2tiPU5VTExcbiIpOwogCiAJCQkJCXNrYiA9IG5ldGRldl9hbGxvY19za2IoZGV2LAogCQkJCQkJCSAgICAgICBFSEVBX0xfUEtUX1NJWkUpOwogCQkJCQlpZiAoIXNrYikgewotCQkJCQkJZWhlYV9pbmZvKCJOb3QgZW5vdWdoIG1lbW9yeSB0byBhbGxvY2F0ZSBza2JcbiIpOworCQkJCQkJbmV0ZGV2X2VycihkZXYsICJOb3QgZW5vdWdoIG1lbW9yeSB0byBhbGxvY2F0ZSBza2JcbiIpOwogCQkJCQkJYnJlYWs7CiAJCQkJCX0KIAkJCQl9CkBAIC03NTYsOCArNzU4LDggQEAKIAkJCQlza2IgPSBnZXRfc2tiX2J5X2luZGV4KHNrYl9hcnJfcnEyLAogCQkJCQkJICAgICAgIHNrYl9hcnJfcnEyX2xlbiwgY3FlKTsKIAkJCQlpZiAodW5saWtlbHkoIXNrYikpIHsKLQkJCQkJaWYgKG5ldGlmX21zZ19yeF9lcnIocG9ydCkpCi0JCQkJCQllaGVhX2Vycm9yKCJycTI6IHNrYj1OVUxMIik7CisJCQkJCW5ldGlmX2Vycihwb3J0LCByeF9lcnIsIGRldiwKKwkJCQkJCSAgInJxMjogc2tiPU5VTExcbiIpOwogCQkJCQlicmVhazsKIAkJCQl9CiAJCQkJZWhlYV9maWxsX3NrYihkZXYsIHNrYiwgY3FlKTsKQEAgLTc2Nyw4ICs3NjksOCBAQAogCQkJCXNrYiA9IGdldF9za2JfYnlfaW5kZXgoc2tiX2Fycl9ycTMsCiAJCQkJCQkgICAgICAgc2tiX2Fycl9ycTNfbGVuLCBjcWUpOwogCQkJCWlmICh1bmxpa2VseSghc2tiKSkgewotCQkJCQlpZiAobmV0aWZfbXNnX3J4X2Vycihwb3J0KSkKLQkJCQkJCWVoZWFfZXJyb3IoInJxMzogc2tiPU5VTEwiKTsKKwkJCQkJbmV0aWZfZXJyKHBvcnQsIHJ4X2VyciwgZGV2LAorCQkJCQkJICAicnEzOiBza2I9TlVMTFxuIik7CiAJCQkJCWJyZWFrOwogCQkJCX0KIAkJCQllaGVhX2ZpbGxfc2tiKGRldiwgc2tiLCBjcWUpOwpAQCAtODQwLDcgKzg0Miw3IEBACiAJCQkJCSBtc2Vjc190b19qaWZmaWVzKDEwMCkpOwogCiAJCWlmICghcmV0KSB7Ci0JCQllaGVhX2Vycm9yKCJIVy9TVyBxdWV1ZXMgb3V0IG9mIHN5bmMiKTsKKwkJCXByX2VycigiSFcvU1cgcXVldWVzIG91dCBvZiBzeW5jXG4iKTsKIAkJCWVoZWFfc2NoZWR1bGVfcG9ydF9yZXNldChwci0+cG9ydCk7CiAJCQlyZXR1cm47CiAJCX0KQEAgLTg3MywxNCArODc1LDE0IEBACiAJCX0KIAogCQlpZiAoY3FlLT5zdGF0dXMgJiBFSEVBX0NRRV9TVEFUX0VSUl9NQVNLKSB7Ci0JCQllaGVhX2Vycm9yKCJCYWQgc2VuZCBjb21wbGV0aW9uIHN0YXR1cz0weCUwNFgiLAotCQkJCSAgIGNxZS0+c3RhdHVzKTsKKwkJCXByX2VycigiQmFkIHNlbmQgY29tcGxldGlvbiBzdGF0dXM9MHglMDRYXG4iLAorCQkJICAgICAgIGNxZS0+c3RhdHVzKTsKIAogCQkJaWYgKG5ldGlmX21zZ190eF9lcnIocHItPnBvcnQpKQogCQkJCWVoZWFfZHVtcChjcWUsIHNpemVvZigqY3FlKSwgIlNlbmQgQ1FFIik7CiAKIAkJCWlmIChjcWUtPnN0YXR1cyAmIEVIRUFfQ1FFX1NUQVRfUkVTRVRfTUFTSykgewotCQkJCWVoZWFfZXJyb3IoIlJlc2V0dGluZyBwb3J0Iik7CisJCQkJcHJfZXJyKCJSZXNldHRpbmcgcG9ydFxuIik7CiAJCQkJZWhlYV9zY2hlZHVsZV9wb3J0X3Jlc2V0KHByLT5wb3J0KTsKIAkJCQlicmVhazsKIAkJCX0KQEAgLTk5OCw4ICsxMDAwLDggQEAKIAogCXdoaWxlIChlcWUpIHsKIAkJcXBfdG9rZW4gPSBFSEVBX0JNQVNLX0dFVChFSEVBX0VRRV9RUF9UT0tFTiwgZXFlLT5lbnRyeSk7Ci0JCWVoZWFfZXJyb3IoIlFQIGFmZl9lcnI6IGVudHJ5PTB4JWxseCwgdG9rZW49MHgleCIsCi0JCQkgICBlcWUtPmVudHJ5LCBxcF90b2tlbik7CisJCXByX2VycigiUVAgYWZmX2VycjogZW50cnk9MHglbGx4LCB0b2tlbj0weCV4XG4iLAorCQkgICAgICAgZXFlLT5lbnRyeSwgcXBfdG9rZW4pOwogCiAJCXFwID0gcG9ydC0+cG9ydF9yZXNbcXBfdG9rZW5dLnFwOwogCkBAIC0xMDE3LDcgKzEwMTksNyBAQAogCX0KIAogCWlmIChyZXNldF9wb3J0KSB7Ci0JCWVoZWFfZXJyb3IoIlJlc2V0dGluZyBwb3J0Iik7CisJCXByX2VycigiUmVzZXR0aW5nIHBvcnRcbiIpOwogCQllaGVhX3NjaGVkdWxlX3BvcnRfcmVzZXQocG9ydCk7CiAJfQogCkBAIC0xMDQ1LDcgKzEwNDcsNyBAQAogCS8qIG1heSBiZSBjYWxsZWQgdmlhIGVoZWFfbmVxX3Rhc2tsZXQoKSAqLwogCWNiMCA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9BVE9NSUMpOwogCWlmICghY2IwKSB7Ci0JCWVoZWFfZXJyb3IoIm5vIG1lbSBmb3IgY2IwIik7CisJCXByX2Vycigibm8gbWVtIGZvciBjYjBcbiIpOwogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKIAl9CkBAIC0xMTM3LDcgKzExMzksNyBAQAogCiAJY2I0ID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJaWYgKCFjYjQpIHsKLQkJZWhlYV9lcnJvcigibm8gbWVtIGZvciBjYjQiKTsKKwkJcHJfZXJyKCJubyBtZW0gZm9yIGNiNFxuIik7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwogCX0KQEAgLTExODgsMTYgKzExOTAsMTYgQEAKIAkJCQlicmVhazsKIAkJCX0KIAkJfSBlbHNlIHsKLQkJCWVoZWFfZXJyb3IoIkZhaWxlZCBzZW5zaW5nIHBvcnQgc3BlZWQiKTsKKwkJCXByX2VycigiRmFpbGVkIHNlbnNpbmcgcG9ydCBzcGVlZFxuIik7CiAJCQlyZXQgPSAtRUlPOwogCQl9CiAJfSBlbHNlIHsKIAkJaWYgKGhyZXQgPT0gSF9BVVRIT1JJVFkpIHsKLQkJCWVoZWFfaW5mbygiSHlwZXJ2aXNvciBkZW5pZWQgc2V0dGluZyBwb3J0IHNwZWVkIik7CisJCQlwcl9pbmZvKCJIeXBlcnZpc29yIGRlbmllZCBzZXR0aW5nIHBvcnQgc3BlZWRcbiIpOwogCQkJcmV0ID0gLUVQRVJNOwogCQl9IGVsc2UgewogCQkJcmV0ID0gLUVJTzsKLQkJCWVoZWFfZXJyb3IoIkZhaWxlZCBzZXR0aW5nIHBvcnQgc3BlZWQiKTsKKwkJCXByX2VycigiRmFpbGVkIHNldHRpbmcgcG9ydCBzcGVlZFxuIik7CiAJCX0KIAl9CiAJaWYgKCFwcm9wX2NhcnJpZXJfc3RhdGUgfHwgKHBvcnQtPnBoeV9saW5rID09IEVIRUFfUEhZX0xJTktfVVApKQpAQCAtMTIxNCw4MCArMTIxNiw3OCBAQAogCXU4IGVjOwogCXU4IHBvcnRudW07CiAJc3RydWN0IGVoZWFfcG9ydCAqcG9ydDsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCiAJZWMgPSBFSEVBX0JNQVNLX0dFVChORVFFX0VWRU5UX0NPREUsIGVxZSk7CiAJcG9ydG51bSA9IEVIRUFfQk1BU0tfR0VUKE5FUUVfUE9SVE5VTSwgZXFlKTsKIAlwb3J0ID0gZWhlYV9nZXRfcG9ydChhZGFwdGVyLCBwb3J0bnVtKTsKKwlkZXYgPSBwb3J0LT5uZXRkZXY7CiAKIAlzd2l0Y2ggKGVjKSB7CiAJY2FzZSBFSEVBX0VDX1BPUlRTVEFURV9DSEc6CS8qIHBvcnQgc3RhdGUgY2hhbmdlICovCiAKIAkJaWYgKCFwb3J0KSB7Ci0JCQllaGVhX2Vycm9yKCJ1bmtub3duIHBvcnRudW0gJXgiLCBwb3J0bnVtKTsKKwkJCW5ldGRldl9lcnIoZGV2LCAidW5rbm93biBwb3J0bnVtICV4XG4iLCBwb3J0bnVtKTsKIAkJCWJyZWFrOwogCQl9CiAKIAkJaWYgKEVIRUFfQk1BU0tfR0VUKE5FUUVfUE9SVF9VUCwgZXFlKSkgewotCQkJaWYgKCFuZXRpZl9jYXJyaWVyX29rKHBvcnQtPm5ldGRldikpIHsKKwkJCWlmICghbmV0aWZfY2Fycmllcl9vayhkZXYpKSB7CiAJCQkJcmV0ID0gZWhlYV9zZW5zZV9wb3J0X2F0dHIocG9ydCk7CiAJCQkJaWYgKHJldCkgewotCQkJCQllaGVhX2Vycm9yKCJmYWlsZWQgcmVzZW5zaW5nIHBvcnQgIgotCQkJCQkJICAgImF0dHJpYnV0ZXMiKTsKKwkJCQkJbmV0ZGV2X2VycihkZXYsICJmYWlsZWQgcmVzZW5zaW5nIHBvcnQgYXR0cmlidXRlc1xuIik7CiAJCQkJCWJyZWFrOwogCQkJCX0KIAotCQkJCWlmIChuZXRpZl9tc2dfbGluayhwb3J0KSkKLQkJCQkJZWhlYV9pbmZvKCIlczogTG9naWNhbCBwb3J0IHVwOiAlZE1icHMgIgotCQkJCQkJICAiJXMgRHVwbGV4IiwKLQkJCQkJCSAgcG9ydC0+bmV0ZGV2LT5uYW1lLAotCQkJCQkJICBwb3J0LT5wb3J0X3NwZWVkLAotCQkJCQkJICBwb3J0LT5mdWxsX2R1cGxleCA9PQotCQkJCQkJICAxID8gIkZ1bGwiIDogIkhhbGYiKTsKKwkJCQluZXRpZl9pbmZvKHBvcnQsIGxpbmssIGRldiwKKwkJCQkJICAgIkxvZ2ljYWwgcG9ydCB1cDogJWRNYnBzICVzIER1cGxleFxuIiwKKwkJCQkJICAgcG9ydC0+cG9ydF9zcGVlZCwKKwkJCQkJICAgcG9ydC0+ZnVsbF9kdXBsZXggPT0gMSA/CisJCQkJCSAgICJGdWxsIiA6ICJIYWxmIik7CiAKLQkJCQluZXRpZl9jYXJyaWVyX29uKHBvcnQtPm5ldGRldik7Ci0JCQkJbmV0aWZfd2FrZV9xdWV1ZShwb3J0LT5uZXRkZXYpOworCQkJCW5ldGlmX2NhcnJpZXJfb24oZGV2KTsKKwkJCQluZXRpZl93YWtlX3F1ZXVlKGRldik7CiAJCQl9CiAJCX0gZWxzZQotCQkJaWYgKG5ldGlmX2NhcnJpZXJfb2socG9ydC0+bmV0ZGV2KSkgewotCQkJCWlmIChuZXRpZl9tc2dfbGluayhwb3J0KSkKLQkJCQkJZWhlYV9pbmZvKCIlczogTG9naWNhbCBwb3J0IGRvd24iLAotCQkJCQkJICBwb3J0LT5uZXRkZXYtPm5hbWUpOwotCQkJCW5ldGlmX2NhcnJpZXJfb2ZmKHBvcnQtPm5ldGRldik7Ci0JCQkJbmV0aWZfc3RvcF9xdWV1ZShwb3J0LT5uZXRkZXYpOworCQkJaWYgKG5ldGlmX2NhcnJpZXJfb2soZGV2KSkgeworCQkJCW5ldGlmX2luZm8ocG9ydCwgbGluaywgZGV2LAorCQkJCQkgICAiTG9naWNhbCBwb3J0IGRvd25cbiIpOworCQkJCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CisJCQkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCQkJfQogCiAJCWlmIChFSEVBX0JNQVNLX0dFVChORVFFX0VYVFNXSVRDSF9QT1JUX1VQLCBlcWUpKSB7CiAJCQlwb3J0LT5waHlfbGluayA9IEVIRUFfUEhZX0xJTktfVVA7Ci0JCQlpZiAobmV0aWZfbXNnX2xpbmsocG9ydCkpCi0JCQkJZWhlYV9pbmZvKCIlczogUGh5c2ljYWwgcG9ydCB1cCIsCi0JCQkJCSAgcG9ydC0+bmV0ZGV2LT5uYW1lKTsKKwkJCW5ldGlmX2luZm8ocG9ydCwgbGluaywgZGV2LAorCQkJCSAgICJQaHlzaWNhbCBwb3J0IHVwXG4iKTsKIAkJCWlmIChwcm9wX2NhcnJpZXJfc3RhdGUpCi0JCQkJbmV0aWZfY2Fycmllcl9vbihwb3J0LT5uZXRkZXYpOworCQkJCW5ldGlmX2NhcnJpZXJfb24oZGV2KTsKIAkJfSBlbHNlIHsKIAkJCXBvcnQtPnBoeV9saW5rID0gRUhFQV9QSFlfTElOS19ET1dOOwotCQkJaWYgKG5ldGlmX21zZ19saW5rKHBvcnQpKQotCQkJCWVoZWFfaW5mbygiJXM6IFBoeXNpY2FsIHBvcnQgZG93biIsCi0JCQkJCSAgcG9ydC0+bmV0ZGV2LT5uYW1lKTsKKwkJCW5ldGlmX2luZm8ocG9ydCwgbGluaywgZGV2LAorCQkJCSAgICJQaHlzaWNhbCBwb3J0IGRvd25cbiIpOwogCQkJaWYgKHByb3BfY2Fycmllcl9zdGF0ZSkKLQkJCQluZXRpZl9jYXJyaWVyX29mZihwb3J0LT5uZXRkZXYpOworCQkJCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CiAJCX0KIAogCQlpZiAoRUhFQV9CTUFTS19HRVQoTkVRRV9FWFRTV0lUQ0hfUFJJTUFSWSwgZXFlKSkKLQkJCWVoZWFfaW5mbygiRXh0ZXJuYWwgc3dpdGNoIHBvcnQgaXMgcHJpbWFyeSBwb3J0Iik7CisJCQluZXRkZXZfaW5mbyhkZXYsCisJCQkJICAgICJFeHRlcm5hbCBzd2l0Y2ggcG9ydCBpcyBwcmltYXJ5IHBvcnRcbiIpOwogCQllbHNlCi0JCQllaGVhX2luZm8oIkV4dGVybmFsIHN3aXRjaCBwb3J0IGlzIGJhY2t1cCBwb3J0Iik7CisJCQluZXRkZXZfaW5mbyhkZXYsCisJCQkJICAgICJFeHRlcm5hbCBzd2l0Y2ggcG9ydCBpcyBiYWNrdXAgcG9ydFxuIik7CiAKIAkJYnJlYWs7CiAJY2FzZSBFSEVBX0VDX0FEQVBURVJfTUFMRlVOQzoKLQkJZWhlYV9lcnJvcigiQWRhcHRlciBtYWxmdW5jdGlvbiIpOworCQluZXRkZXZfZXJyKGRldiwgIkFkYXB0ZXIgbWFsZnVuY3Rpb25cbiIpOwogCQlicmVhazsKIAljYXNlIEVIRUFfRUNfUE9SVF9NQUxGVU5DOgotCQllaGVhX2luZm8oIlBvcnQgbWFsZnVuY3Rpb246IERldmljZTogJXMiLCBwb3J0LT5uZXRkZXYtPm5hbWUpOwotCQluZXRpZl9jYXJyaWVyX29mZihwb3J0LT5uZXRkZXYpOwotCQluZXRpZl9zdG9wX3F1ZXVlKHBvcnQtPm5ldGRldik7CisJCW5ldGRldl9pbmZvKGRldiwgIlBvcnQgbWFsZnVuY3Rpb25cbiIpOworCQluZXRpZl9jYXJyaWVyX29mZihkZXYpOworCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWVoZWFfZXJyb3IoInVua25vd24gZXZlbnQgY29kZSAleCwgZXFlPTB4JWxsWCIsIGVjLCBlcWUpOworCQluZXRkZXZfZXJyKGRldiwgInVua25vd24gZXZlbnQgY29kZSAleCwgZXFlPTB4JWxsWFxuIiwgZWMsIGVxZSk7CiAJCWJyZWFrOwogCX0KIH0KQEAgLTEyOTksMTMgKzEyOTksMTMgQEAKIAl1NjQgZXZlbnRfbWFzazsKIAogCWVxZSA9IGVoZWFfcG9sbF9lcShhZGFwdGVyLT5uZXEpOwotCWVoZWFfZGVidWcoImVxZT0lcCIsIGVxZSk7CisJcHJfZGVidWcoImVxZT0lcFxuIiwgZXFlKTsKIAogCXdoaWxlIChlcWUpIHsKLQkJZWhlYV9kZWJ1ZygiKmVxZT0lbHgiLCBlcWUtPmVudHJ5KTsKKwkJcHJfZGVidWcoIiplcWU9JWx4XG4iLCAodW5zaWduZWQgbG9uZykgZXFlLT5lbnRyeSk7CiAJCWVoZWFfcGFyc2VfZXFlKGFkYXB0ZXIsIGVxZS0+ZW50cnkpOwogCQllcWUgPSBlaGVhX3BvbGxfZXEoYWRhcHRlci0+bmVxKTsKLQkJZWhlYV9kZWJ1ZygibmV4dCBlcWU9JXAiLCBlcWUpOworCQlwcl9kZWJ1ZygibmV4dCBlcWU9JXBcbiIsIGVxZSk7CiAJfQogCiAJZXZlbnRfbWFzayA9IEVIRUFfQk1BU0tfU0VUKE5FTFJfUE9SVFNUQVRFX0NIRywgMSkKQEAgLTEzNTQsMTQgKzEzNTQsMTQgQEAKIAkJCQkgIGVoZWFfcXBfYWZmX2lycV9oYW5kbGVyLAogCQkJCSAgSVJRRl9ESVNBQkxFRCwgcG9ydC0+aW50X2FmZl9uYW1lLCBwb3J0KTsKIAlpZiAocmV0KSB7Ci0JCWVoZWFfZXJyb3IoImZhaWxlZCByZWdpc3RlcmluZyBpcnEgZm9yIHFwX2FmZl9pcnFfaGFuZGxlcjoiCi0JCQkgICAiaXN0PSVYIiwgcG9ydC0+cXBfZXEtPmF0dHIuaXN0MSk7CisJCW5ldGRldl9lcnIoZGV2LCAiZmFpbGVkIHJlZ2lzdGVyaW5nIGlycSBmb3IgcXBfYWZmX2lycV9oYW5kbGVyOmlzdD0lWFxuIiwKKwkJCSAgIHBvcnQtPnFwX2VxLT5hdHRyLmlzdDEpOwogCQlnb3RvIG91dF9mcmVlX3FwZXE7CiAJfQogCi0JaWYgKG5ldGlmX21zZ19pZnVwKHBvcnQpKQotCQllaGVhX2luZm8oImlycV9oYW5kbGUgMHglWCBmb3IgZnVuY3Rpb24gcXBfYWZmX2lycV9oYW5kbGVyICIKLQkJCSAgInJlZ2lzdGVyZWQiLCBwb3J0LT5xcF9lcS0+YXR0ci5pc3QxKTsKKwluZXRpZl9pbmZvKHBvcnQsIGlmdXAsIGRldiwKKwkJICAgImlycV9oYW5kbGUgMHglWCBmb3IgZnVuY3Rpb24gcXBfYWZmX2lycV9oYW5kbGVyIHJlZ2lzdGVyZWRcbiIsCisJCSAgIHBvcnQtPnFwX2VxLT5hdHRyLmlzdDEpOwogCiAKIAlmb3IgKGkgPSAwOyBpIDwgcG9ydC0+bnVtX2RlZl9xcHMgKyBwb3J0LT5udW1fYWRkX3R4X3FwczsgaSsrKSB7CkBAIC0xMzczLDE0ICsxMzczLDEzIEBACiAJCQkJCSAgSVJRRl9ESVNBQkxFRCwgcHItPmludF9zZW5kX25hbWUsCiAJCQkJCSAgcHIpOwogCQlpZiAocmV0KSB7Ci0JCQllaGVhX2Vycm9yKCJmYWlsZWQgcmVnaXN0ZXJpbmcgaXJxIGZvciBlaGVhX3F1ZXVlICIKLQkJCQkgICAicG9ydF9yZXNfbnI6JWQsIGlzdD0lWCIsIGksCi0JCQkJICAgcHItPmVxLT5hdHRyLmlzdDEpOworCQkJbmV0ZGV2X2VycihkZXYsICJmYWlsZWQgcmVnaXN0ZXJpbmcgaXJxIGZvciBlaGVhX3F1ZXVlIHBvcnRfcmVzX25yOiVkLCBpc3Q9JVhcbiIsCisJCQkJICAgaSwgcHItPmVxLT5hdHRyLmlzdDEpOwogCQkJZ290byBvdXRfZnJlZV9yZXE7CiAJCX0KLQkJaWYgKG5ldGlmX21zZ19pZnVwKHBvcnQpKQotCQkJZWhlYV9pbmZvKCJpcnFfaGFuZGxlIDB4JVggZm9yIGZ1bmN0aW9uIGVoZWFfcXVldWVfaW50ICIKLQkJCQkgICIlZCByZWdpc3RlcmVkIiwgcHItPmVxLT5hdHRyLmlzdDEsIGkpOworCQluZXRpZl9pbmZvKHBvcnQsIGlmdXAsIGRldiwKKwkJCSAgICJpcnFfaGFuZGxlIDB4JVggZm9yIGZ1bmN0aW9uIGVoZWFfcXVldWVfaW50ICVkIHJlZ2lzdGVyZWRcbiIsCisJCQkgICBwci0+ZXEtPmF0dHIuaXN0MSwgaSk7CiAJfQogb3V0OgogCXJldHVybiByZXQ7CkBAIC0xNDExLDE2ICsxNDEwLDE2IEBACiAJZm9yIChpID0gMDsgaSA8IHBvcnQtPm51bV9kZWZfcXBzICsgcG9ydC0+bnVtX2FkZF90eF9xcHM7IGkrKykgewogCQlwciA9ICZwb3J0LT5wb3J0X3Jlc1tpXTsKIAkJaWJtZWJ1c19mcmVlX2lycShwci0+ZXEtPmF0dHIuaXN0MSwgcHIpOwotCQlpZiAobmV0aWZfbXNnX2ludHIocG9ydCkpCi0JCQllaGVhX2luZm8oImZyZWUgc2VuZCBpcnEgZm9yIHJlcyAlZCB3aXRoIGhhbmRsZSAweCVYIiwKLQkJCQkgIGksIHByLT5lcS0+YXR0ci5pc3QxKTsKKwkJbmV0aWZfaW5mbyhwb3J0LCBpbnRyLCBkZXYsCisJCQkgICAiZnJlZSBzZW5kIGlycSBmb3IgcmVzICVkIHdpdGggaGFuZGxlIDB4JVhcbiIsCisJCQkgICBpLCBwci0+ZXEtPmF0dHIuaXN0MSk7CiAJfQogCiAJLyogYXNzb2NpYXRlZCBldmVudHMgKi8KIAlpYm1lYnVzX2ZyZWVfaXJxKHBvcnQtPnFwX2VxLT5hdHRyLmlzdDEsIHBvcnQpOwotCWlmIChuZXRpZl9tc2dfaW50cihwb3J0KSkKLQkJZWhlYV9pbmZvKCJhc3NvY2lhdGVkIGV2ZW50IGludGVycnVwdCBmb3IgaGFuZGxlIDB4JVggZnJlZWQiLAotCQkJICBwb3J0LT5xcF9lcS0+YXR0ci5pc3QxKTsKKwluZXRpZl9pbmZvKHBvcnQsIGludHIsIGRldiwKKwkJICAgImFzc29jaWF0ZWQgZXZlbnQgaW50ZXJydXB0IGZvciBoYW5kbGUgMHglWCBmcmVlZFxuIiwKKwkJICAgcG9ydC0+cXBfZXEtPmF0dHIuaXN0MSk7CiB9CiAKIHN0YXRpYyBpbnQgZWhlYV9jb25maWd1cmVfcG9ydChzdHJ1Y3QgZWhlYV9wb3J0ICpwb3J0KQpAQCAtMTQ4OSw3ICsxNDg4LDcgQEAKIG91dF9mcmVlOgogCWVoZWFfcmVtX21yKCZwci0+c2VuZF9tcik7CiBvdXQ6Ci0JZWhlYV9lcnJvcigiR2VuZXJhdGluZyBTTVJTIGZhaWxlZFxuIik7CisJcHJfZXJyKCJHZW5lcmF0aW5nIFNNUlMgZmFpbGVkXG4iKTsKIAlyZXR1cm4gLUVJTzsKIH0KIApAQCAtMTUwNiwxMiArMTUwNSwxMCBAQAogewogCWludCBhcnJfc2l6ZSA9IHNpemVvZih2b2lkICopICogbWF4X3FfZW50cmllczsKIAotCXFfc2tiYS0+YXJyID0gdm1hbGxvYyhhcnJfc2l6ZSk7CisJcV9za2JhLT5hcnIgPSB2emFsbG9jKGFycl9zaXplKTsKIAlpZiAoIXFfc2tiYS0+YXJyKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCW1lbXNldChxX3NrYmEtPmFyciwgMCwgYXJyX3NpemUpOwotCiAJcV9za2JhLT5sZW4gPSBtYXhfcV9lbnRyaWVzOwogCXFfc2tiYS0+aW5kZXggPSAwOwogCXFfc2tiYS0+b3Nfc2ticyA9IDA7CkBAIC0xNTQ2LDcgKzE1NDMsNyBAQAogCiAJcHItPmVxID0gZWhlYV9jcmVhdGVfZXEoYWRhcHRlciwgZXFfdHlwZSwgRUhFQV9NQVhfRU5UUklFU19FUSwgMCk7CiAJaWYgKCFwci0+ZXEpIHsKLQkJZWhlYV9lcnJvcigiY3JlYXRlX2VxIGZhaWxlZCAoZXEpIik7CisJCXByX2VycigiY3JlYXRlX2VxIGZhaWxlZCAoZXEpXG4iKTsKIAkJZ290byBvdXRfZnJlZTsKIAl9CiAKQEAgLTE1NTQsNyArMTU1MSw3IEBACiAJCQkJICAgICBwci0+ZXEtPmZ3X2hhbmRsZSwKIAkJCQkgICAgIHBvcnQtPmxvZ2ljYWxfcG9ydF9pZCk7CiAJaWYgKCFwci0+cmVjdl9jcSkgewotCQllaGVhX2Vycm9yKCJjcmVhdGVfY3EgZmFpbGVkIChjcV9yZWN2KSIpOworCQlwcl9lcnIoImNyZWF0ZV9jcSBmYWlsZWQgKGNxX3JlY3YpXG4iKTsKIAkJZ290byBvdXRfZnJlZTsKIAl9CiAKQEAgLTE1NjIsMTkgKzE1NTksMTkgQEAKIAkJCQkgICAgIHByLT5lcS0+ZndfaGFuZGxlLAogCQkJCSAgICAgcG9ydC0+bG9naWNhbF9wb3J0X2lkKTsKIAlpZiAoIXByLT5zZW5kX2NxKSB7Ci0JCWVoZWFfZXJyb3IoImNyZWF0ZV9jcSBmYWlsZWQgKGNxX3NlbmQpIik7CisJCXByX2VycigiY3JlYXRlX2NxIGZhaWxlZCAoY3Ffc2VuZClcbiIpOwogCQlnb3RvIG91dF9mcmVlOwogCX0KIAogCWlmIChuZXRpZl9tc2dfaWZ1cChwb3J0KSkKLQkJZWhlYV9pbmZvKCJTZW5kIENROiBhY3RfbnJfY3Flcz0lZCwgUmVjdiBDUTogYWN0X25yX2NxZXM9JWQiLAotCQkJICBwci0+c2VuZF9jcS0+YXR0ci5hY3RfbnJfb2ZfY3FlcywKLQkJCSAgcHItPnJlY3ZfY3EtPmF0dHIuYWN0X25yX29mX2NxZXMpOworCQlwcl9pbmZvKCJTZW5kIENROiBhY3RfbnJfY3Flcz0lZCwgUmVjdiBDUTogYWN0X25yX2NxZXM9JWRcbiIsCisJCQlwci0+c2VuZF9jcS0+YXR0ci5hY3RfbnJfb2ZfY3FlcywKKwkJCXByLT5yZWN2X2NxLT5hdHRyLmFjdF9ucl9vZl9jcWVzKTsKIAogCWluaXRfYXR0ciA9IGt6YWxsb2Moc2l6ZW9mKCppbml0X2F0dHIpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWluaXRfYXR0cikgewogCQlyZXQgPSAtRU5PTUVNOwotCQllaGVhX2Vycm9yKCJubyBtZW0gZm9yIGVoZWFfcXBfaW5pdF9hdHRyIik7CisJCXByX2Vycigibm8gbWVtIGZvciBlaGVhX3FwX2luaXRfYXR0clxuIik7CiAJCWdvdG8gb3V0X2ZyZWU7CiAJfQogCkBAIC0xNTk5LDE4ICsxNTk2LDE4IEBACiAKIAlwci0+cXAgPSBlaGVhX2NyZWF0ZV9xcChhZGFwdGVyLCBhZGFwdGVyLT5wZCwgaW5pdF9hdHRyKTsKIAlpZiAoIXByLT5xcCkgewotCQllaGVhX2Vycm9yKCJjcmVhdGVfcXAgZmFpbGVkIik7CisJCXByX2VycigiY3JlYXRlX3FwIGZhaWxlZFxuIik7CiAJCXJldCA9IC1FSU87CiAJCWdvdG8gb3V0X2ZyZWU7CiAJfQogCiAJaWYgKG5ldGlmX21zZ19pZnVwKHBvcnQpKQotCQllaGVhX2luZm8oIlFQOiBxcF9ucj0lZFxuIGFjdF9ucl9zbmRfd3FlPSVkXG4gbnJfcndxZV9ycTE9JWRcbiAiCi0JCQkgICJucl9yd3FlX3JxMj0lZFxuIG5yX3J3cWVfcnEzPSVkIiwgaW5pdF9hdHRyLT5xcF9uciwKLQkJCSAgaW5pdF9hdHRyLT5hY3RfbnJfc2VuZF93cWVzLAotCQkJICBpbml0X2F0dHItPmFjdF9ucl9yd3Flc19ycTEsCi0JCQkgIGluaXRfYXR0ci0+YWN0X25yX3J3cWVzX3JxMiwKLQkJCSAgaW5pdF9hdHRyLT5hY3RfbnJfcndxZXNfcnEzKTsKKwkJcHJfaW5mbygiUVA6IHFwX25yPSVkXG4gYWN0X25yX3NuZF93cWU9JWRcbiBucl9yd3FlX3JxMT0lZFxuIG5yX3J3cWVfcnEyPSVkXG4gbnJfcndxZV9ycTM9JWRcbiIsCisJCQlpbml0X2F0dHItPnFwX25yLAorCQkJaW5pdF9hdHRyLT5hY3RfbnJfc2VuZF93cWVzLAorCQkJaW5pdF9hdHRyLT5hY3RfbnJfcndxZXNfcnExLAorCQkJaW5pdF9hdHRyLT5hY3RfbnJfcndxZXNfcnEyLAorCQkJaW5pdF9hdHRyLT5hY3RfbnJfcndxZXNfcnEzKTsKIAogCXByLT5zcV9za2JhX3NpemUgPSBpbml0X2F0dHItPmFjdF9ucl9zZW5kX3dxZXMgKyAxOwogCkBAIC0xNzYxLDcgKzE3NTgsNyBAQAogCQkJc3dxZS0+ZGVzY3JpcHRvcnMrKzsKIAkJfQogCX0gZWxzZQotCQllaGVhX2Vycm9yKCJjYW5ub3QgaGFuZGxlIGZyYWdtZW50ZWQgaGVhZGVycyIpOworCQlwcl9lcnIoImNhbm5vdCBoYW5kbGUgZnJhZ21lbnRlZCBoZWFkZXJzXG4iKTsKIH0KIAogc3RhdGljIHZvaWQgd3JpdGVfc3dxZTJfbm9uVFNPKHN0cnVjdCBza19idWZmICpza2IsCkBAIC0xODU3LDggKzE4NTQsOCBAQAogCQkJCSAgICAgcG9ydC0+bG9naWNhbF9wb3J0X2lkLAogCQkJCSAgICAgcmVnX3R5cGUsIHBvcnQtPm1hY19hZGRyLCAwLCBoY2FsbGlkKTsKIAlpZiAoaHJldCAhPSBIX1NVQ0NFU1MpIHsKLQkJZWhlYV9lcnJvcigiJXNyZWdpc3RlcmluZyBiYyBhZGRyZXNzIGZhaWxlZCAodGFnZ2VkKSIsCi0JCQkgICBoY2FsbGlkID09IEhfUkVHX0JDTUMgPyAiIiA6ICJkZSIpOworCQlwcl9lcnIoIiVzcmVnaXN0ZXJpbmcgYmMgYWRkcmVzcyBmYWlsZWQgKHRhZ2dlZClcbiIsCisJCSAgICAgICBoY2FsbGlkID09IEhfUkVHX0JDTUMgPyAiIiA6ICJkZSIpOwogCQlyZXQgPSAtRUlPOwogCQlnb3RvIG91dF9oZXJyOwogCX0KQEAgLTE4NjksOCArMTg2Niw4IEBACiAJCQkJICAgICBwb3J0LT5sb2dpY2FsX3BvcnRfaWQsCiAJCQkJICAgICByZWdfdHlwZSwgcG9ydC0+bWFjX2FkZHIsIDAsIGhjYWxsaWQpOwogCWlmIChocmV0ICE9IEhfU1VDQ0VTUykgewotCQllaGVhX2Vycm9yKCIlc3JlZ2lzdGVyaW5nIGJjIGFkZHJlc3MgZmFpbGVkICh2bGFuKSIsCi0JCQkgICBoY2FsbGlkID09IEhfUkVHX0JDTUMgPyAiIiA6ICJkZSIpOworCQlwcl9lcnIoIiVzcmVnaXN0ZXJpbmcgYmMgYWRkcmVzcyBmYWlsZWQgKHZsYW4pXG4iLAorCQkgICAgICAgaGNhbGxpZCA9PSBIX1JFR19CQ01DID8gIiIgOiAiZGUiKTsKIAkJcmV0ID0gLUVJTzsKIAl9CiBvdXRfaGVycjoKQEAgLTE4OTIsNyArMTg4OSw3IEBACiAKIAljYjAgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKIAlpZiAoIWNiMCkgewotCQllaGVhX2Vycm9yKCJubyBtZW0gZm9yIGNiMCIpOworCQlwcl9lcnIoIm5vIG1lbSBmb3IgY2IwXG4iKTsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CiAJfQpAQCAtMTk0MCwxMSArMTkzNywxMSBAQAogc3RhdGljIHZvaWQgZWhlYV9wcm9taXNjdW91c19lcnJvcih1NjQgaHJldCwgaW50IGVuYWJsZSkKIHsKIAlpZiAoaHJldCA9PSBIX0FVVEhPUklUWSkKLQkJZWhlYV9pbmZvKCJIeXBlcnZpc29yIGRlbmllZCAlc2FibGluZyBwcm9taXNjdW91cyBtb2RlIiwKLQkJCSAgZW5hYmxlID09IDEgPyAiZW4iIDogImRpcyIpOworCQlwcl9pbmZvKCJIeXBlcnZpc29yIGRlbmllZCAlc2FibGluZyBwcm9taXNjdW91cyBtb2RlXG4iLAorCQkJZW5hYmxlID09IDEgPyAiZW4iIDogImRpcyIpOwogCWVsc2UKLQkJZWhlYV9lcnJvcigiZmFpbGVkICVzYWJsaW5nIHByb21pc2N1b3VzIG1vZGUiLAotCQkJICAgZW5hYmxlID09IDEgPyAiZW4iIDogImRpcyIpOworCQlwcl9lcnIoImZhaWxlZCAlc2FibGluZyBwcm9taXNjdW91cyBtb2RlXG4iLAorCQkgICAgICAgZW5hYmxlID09IDEgPyAiZW4iIDogImRpcyIpOwogfQogCiBzdGF0aWMgdm9pZCBlaGVhX3Byb21pc2N1b3VzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBlbmFibGUpCkBAIC0xOTU4LDcgKzE5NTUsNyBAQAogCiAJY2I3ID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0FUT01JQyk7CiAJaWYgKCFjYjcpIHsKLQkJZWhlYV9lcnJvcigibm8gbWVtIGZvciBjYjciKTsKKwkJcHJfZXJyKCJubyBtZW0gZm9yIGNiN1xuIik7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtMjAxOCw3ICsyMDE1LDcgQEAKIAkJaHJldCA9IGVoZWFfbXVsdGljYXN0X3JlZ19oZWxwZXIocG9ydCwgbWNfZW50cnktPm1hY2FkZHIsCiAJCQkJCQkgSF9ERVJFR19CQ01DKTsKIAkJaWYgKGhyZXQpIHsKLQkJCWVoZWFfZXJyb3IoImZhaWxlZCBkZXJlZ2lzdGVyaW5nIG1jYXN0IE1BQyIpOworCQkJcHJfZXJyKCJmYWlsZWQgZGVyZWdpc3RlcmluZyBtY2FzdCBNQUNcbiIpOwogCQkJcmV0ID0gLUVJTzsKIAkJfQogCkBAIC0yMDQxLDcgKzIwMzgsOCBAQAogCQkJaWYgKCFocmV0KQogCQkJCXBvcnQtPmFsbG11bHRpID0gMTsKIAkJCWVsc2UKLQkJCQllaGVhX2Vycm9yKCJmYWlsZWQgZW5hYmxpbmcgSUZGX0FMTE1VTFRJIik7CisJCQkJbmV0ZGV2X2VycihkZXYsCisJCQkJCSAgICJmYWlsZWQgZW5hYmxpbmcgSUZGX0FMTE1VTFRJXG4iKTsKIAkJfQogCX0gZWxzZQogCQlpZiAoIWVuYWJsZSkgewpAQCAtMjA1MCw3ICsyMDQ4LDggQEAKIAkJCWlmICghaHJldCkKIAkJCQlwb3J0LT5hbGxtdWx0aSA9IDA7CiAJCQllbHNlCi0JCQkJZWhlYV9lcnJvcigiZmFpbGVkIGRpc2FibGluZyBJRkZfQUxMTVVMVEkiKTsKKwkJCQluZXRkZXZfZXJyKGRldiwKKwkJCQkJICAgImZhaWxlZCBkaXNhYmxpbmcgSUZGX0FMTE1VTFRJXG4iKTsKIAkJfQogfQogCkBAIC0yMDYxLDcgKzIwNjAsNyBAQAogCiAJZWhlYV9tY2xfZW50cnkgPSBremFsbG9jKHNpemVvZigqZWhlYV9tY2xfZW50cnkpLCBHRlBfQVRPTUlDKTsKIAlpZiAoIWVoZWFfbWNsX2VudHJ5KSB7Ci0JCWVoZWFfZXJyb3IoIm5vIG1lbSBmb3IgbWNsX2VudHJ5Iik7CisJCXByX2Vycigibm8gbWVtIGZvciBtY2xfZW50cnlcbiIpOwogCQlyZXR1cm47CiAJfQogCkBAIC0yMDc0LDcgKzIwNzMsNyBAQAogCWlmICghaHJldCkKIAkJbGlzdF9hZGQoJmVoZWFfbWNsX2VudHJ5LT5saXN0LCAmcG9ydC0+bWNfbGlzdC0+bGlzdCk7CiAJZWxzZSB7Ci0JCWVoZWFfZXJyb3IoImZhaWxlZCByZWdpc3RlcmluZyBtY2FzdCBNQUMiKTsKKwkJcHJfZXJyKCJmYWlsZWQgcmVnaXN0ZXJpbmcgbWNhc3QgTUFDXG4iKTsKIAkJa2ZyZWUoZWhlYV9tY2xfZW50cnkpOwogCX0KIH0KQEAgLTIxMDcsOSArMjEwNiw4IEBACiAJCX0KIAogCQlpZiAobmV0ZGV2X21jX2NvdW50KGRldikgPiBwb3J0LT5hZGFwdGVyLT5tYXhfbWNfbWFjKSB7Ci0JCQllaGVhX2luZm8oIk1jYXN0IHJlZ2lzdHJhdGlvbiBsaW1pdCByZWFjaGVkICgweCVsbHgpLiAiCi0JCQkJICAiVXNlIEFMTE1VTFRJISIsCi0JCQkJICBwb3J0LT5hZGFwdGVyLT5tYXhfbWNfbWFjKTsKKwkJCXByX2luZm8oIk1jYXN0IHJlZ2lzdHJhdGlvbiBsaW1pdCByZWFjaGVkICgweCVsbHgpLiBVc2UgQUxMTVVMVEkhXG4iLAorCQkJCXBvcnQtPmFkYXB0ZXItPm1heF9tY19tYWMpOwogCQkJZ290byBvdXQ7CiAJCX0KIApAQCAtMjMxNSwxMCArMjMxMywxMCBAQAogCX0KIAlwci0+c3dxZV9pZF9jb3VudGVyICs9IDE7CiAKLQlpZiAobmV0aWZfbXNnX3R4X3F1ZXVlZChwb3J0KSkgewotCQllaGVhX2luZm8oInBvc3Qgc3dxZSBvbiBRUCAlZCIsIHByLT5xcC0+aW5pdF9hdHRyLnFwX25yKTsKKwluZXRpZl9pbmZvKHBvcnQsIHR4X3F1ZXVlZCwgZGV2LAorCQkgICAicG9zdCBzd3FlIG9uIFFQICVkXG4iLCBwci0+cXAtPmluaXRfYXR0ci5xcF9ucik7CisJaWYgKG5ldGlmX21zZ190eF9xdWV1ZWQocG9ydCkpCiAJCWVoZWFfZHVtcChzd3FlLCA1MTIsICJzd3FlIik7Ci0JfQogCiAJaWYgKHVubGlrZWx5KHRlc3RfYml0KF9fRUhFQV9TVE9QX1hGRVIsICZlaGVhX2RyaXZlcl9mbGFncykpKSB7CiAJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKQEAgLTIzNTQsMTQgKzIzNTIsMTQgQEAKIAogCWNiMSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwogCWlmICghY2IxKSB7Ci0JCWVoZWFfZXJyb3IoIm5vIG1lbSBmb3IgY2IxIik7CisJCXByX2Vycigibm8gbWVtIGZvciBjYjFcbiIpOwogCQlnb3RvIG91dDsKIAl9CiAKIAlocmV0ID0gZWhlYV9oX21vZGlmeV9laGVhX3BvcnQoYWRhcHRlci0+aGFuZGxlLCBwb3J0LT5sb2dpY2FsX3BvcnRfaWQsCiAJCQkJICAgICAgIEhfUE9SVF9DQjEsIEhfUE9SVF9DQjFfQUxMLCBjYjEpOwogCWlmIChocmV0ICE9IEhfU1VDQ0VTUykKLQkJZWhlYV9lcnJvcigibW9kaWZ5X2VoZWFfcG9ydCBmYWlsZWQiKTsKKwkJcHJfZXJyKCJtb2RpZnlfZWhlYV9wb3J0IGZhaWxlZFxuIik7CiAKIAlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpY2IxKTsKIG91dDoKQEAgLTIzNzgsMTQgKzIzNzYsMTQgQEAKIAogCWNiMSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwogCWlmICghY2IxKSB7Ci0JCWVoZWFfZXJyb3IoIm5vIG1lbSBmb3IgY2IxIik7CisJCXByX2Vycigibm8gbWVtIGZvciBjYjFcbiIpOwogCQlnb3RvIG91dDsKIAl9CiAKIAlocmV0ID0gZWhlYV9oX3F1ZXJ5X2VoZWFfcG9ydChhZGFwdGVyLT5oYW5kbGUsIHBvcnQtPmxvZ2ljYWxfcG9ydF9pZCwKIAkJCQkgICAgICBIX1BPUlRfQ0IxLCBIX1BPUlRfQ0IxX0FMTCwgY2IxKTsKIAlpZiAoaHJldCAhPSBIX1NVQ0NFU1MpIHsKLQkJZWhlYV9lcnJvcigicXVlcnlfZWhlYV9wb3J0IGZhaWxlZCIpOworCQlwcl9lcnIoInF1ZXJ5X2VoZWFfcG9ydCBmYWlsZWRcbiIpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTIzOTUsNyArMjM5Myw3IEBACiAJaHJldCA9IGVoZWFfaF9tb2RpZnlfZWhlYV9wb3J0KGFkYXB0ZXItPmhhbmRsZSwgcG9ydC0+bG9naWNhbF9wb3J0X2lkLAogCQkJCSAgICAgICBIX1BPUlRfQ0IxLCBIX1BPUlRfQ0IxX0FMTCwgY2IxKTsKIAlpZiAoaHJldCAhPSBIX1NVQ0NFU1MpCi0JCWVoZWFfZXJyb3IoIm1vZGlmeV9laGVhX3BvcnQgZmFpbGVkIik7CisJCXByX2VycigibW9kaWZ5X2VoZWFfcG9ydCBmYWlsZWRcbiIpOwogb3V0OgogCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyljYjEpOwogCXJldHVybjsKQEAgLTI0MTMsMTQgKzI0MTEsMTQgQEAKIAogCWNiMSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwogCWlmICghY2IxKSB7Ci0JCWVoZWFfZXJyb3IoIm5vIG1lbSBmb3IgY2IxIik7CisJCXByX2Vycigibm8gbWVtIGZvciBjYjFcbiIpOwogCQlnb3RvIG91dDsKIAl9CiAKIAlocmV0ID0gZWhlYV9oX3F1ZXJ5X2VoZWFfcG9ydChhZGFwdGVyLT5oYW5kbGUsIHBvcnQtPmxvZ2ljYWxfcG9ydF9pZCwKIAkJCQkgICAgICBIX1BPUlRfQ0IxLCBIX1BPUlRfQ0IxX0FMTCwgY2IxKTsKIAlpZiAoaHJldCAhPSBIX1NVQ0NFU1MpIHsKLQkJZWhlYV9lcnJvcigicXVlcnlfZWhlYV9wb3J0IGZhaWxlZCIpOworCQlwcl9lcnIoInF1ZXJ5X2VoZWFfcG9ydCBmYWlsZWRcbiIpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTI0MzAsNyArMjQyOCw3IEBACiAJaHJldCA9IGVoZWFfaF9tb2RpZnlfZWhlYV9wb3J0KGFkYXB0ZXItPmhhbmRsZSwgcG9ydC0+bG9naWNhbF9wb3J0X2lkLAogCQkJCSAgICAgICBIX1BPUlRfQ0IxLCBIX1BPUlRfQ0IxX0FMTCwgY2IxKTsKIAlpZiAoaHJldCAhPSBIX1NVQ0NFU1MpCi0JCWVoZWFfZXJyb3IoIm1vZGlmeV9laGVhX3BvcnQgZmFpbGVkIik7CisJCXByX2VycigibW9kaWZ5X2VoZWFfcG9ydCBmYWlsZWRcbiIpOwogb3V0OgogCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyljYjEpOwogfQpAQCAtMjQ1Miw3ICsyNDUwLDcgQEAKIAlocmV0ID0gZWhlYV9oX3F1ZXJ5X2VoZWFfcXAoYWRhcHRlci0+aGFuZGxlLCAwLCBxcC0+ZndfaGFuZGxlLAogCQkJCSAgICBFSEVBX0JNQVNLX1NFVChIX1FQQ0IwX0FMTCwgMHhGRkZGKSwgY2IwKTsKIAlpZiAoaHJldCAhPSBIX1NVQ0NFU1MpIHsKLQkJZWhlYV9lcnJvcigicXVlcnlfZWhlYV9xcCBmYWlsZWQgKDEpIik7CisJCXByX2VycigicXVlcnlfZWhlYV9xcCBmYWlsZWQgKDEpXG4iKTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC0yNDYxLDE0ICsyNDU5LDE0IEBACiAJCQkJICAgICBFSEVBX0JNQVNLX1NFVChIX1FQQ0IwX1FQX0NUTF9SRUcsIDEpLCBjYjAsCiAJCQkJICAgICAmZHVtbXk2NCwgJmR1bW15NjQsICZkdW1teTE2LCAmZHVtbXkxNik7CiAJaWYgKGhyZXQgIT0gSF9TVUNDRVNTKSB7Ci0JCWVoZWFfZXJyb3IoIm1vZGlmeV9laGVhX3FwIGZhaWxlZCAoMSkiKTsKKwkJcHJfZXJyKCJtb2RpZnlfZWhlYV9xcCBmYWlsZWQgKDEpXG4iKTsKIAkJZ290byBvdXQ7CiAJfQogCiAJaHJldCA9IGVoZWFfaF9xdWVyeV9laGVhX3FwKGFkYXB0ZXItPmhhbmRsZSwgMCwgcXAtPmZ3X2hhbmRsZSwKIAkJCQkgICAgRUhFQV9CTUFTS19TRVQoSF9RUENCMF9BTEwsIDB4RkZGRiksIGNiMCk7CiAJaWYgKGhyZXQgIT0gSF9TVUNDRVNTKSB7Ci0JCWVoZWFfZXJyb3IoInF1ZXJ5X2VoZWFfcXAgZmFpbGVkICgyKSIpOworCQlwcl9lcnIoInF1ZXJ5X2VoZWFfcXAgZmFpbGVkICgyKVxuIik7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtMjQ3NywxNCArMjQ3NSwxNCBAQAogCQkJCSAgICAgRUhFQV9CTUFTS19TRVQoSF9RUENCMF9RUF9DVExfUkVHLCAxKSwgY2IwLAogCQkJCSAgICAgJmR1bW15NjQsICZkdW1teTY0LCAmZHVtbXkxNiwgJmR1bW15MTYpOwogCWlmIChocmV0ICE9IEhfU1VDQ0VTUykgewotCQllaGVhX2Vycm9yKCJtb2RpZnlfZWhlYV9xcCBmYWlsZWQgKDIpIik7CisJCXByX2VycigibW9kaWZ5X2VoZWFfcXAgZmFpbGVkICgyKVxuIik7CiAJCWdvdG8gb3V0OwogCX0KIAogCWhyZXQgPSBlaGVhX2hfcXVlcnlfZWhlYV9xcChhZGFwdGVyLT5oYW5kbGUsIDAsIHFwLT5md19oYW5kbGUsCiAJCQkJICAgIEVIRUFfQk1BU0tfU0VUKEhfUVBDQjBfQUxMLCAweEZGRkYpLCBjYjApOwogCWlmIChocmV0ICE9IEhfU1VDQ0VTUykgewotCQllaGVhX2Vycm9yKCJxdWVyeV9laGVhX3FwIGZhaWxlZCAoMykiKTsKKwkJcHJfZXJyKCJxdWVyeV9laGVhX3FwIGZhaWxlZCAoMylcbiIpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTI0OTMsMTQgKzI0OTEsMTQgQEAKIAkJCQkgICAgIEVIRUFfQk1BU0tfU0VUKEhfUVBDQjBfUVBfQ1RMX1JFRywgMSksIGNiMCwKIAkJCQkgICAgICZkdW1teTY0LCAmZHVtbXk2NCwgJmR1bW15MTYsICZkdW1teTE2KTsKIAlpZiAoaHJldCAhPSBIX1NVQ0NFU1MpIHsKLQkJZWhlYV9lcnJvcigibW9kaWZ5X2VoZWFfcXAgZmFpbGVkICgzKSIpOworCQlwcl9lcnIoIm1vZGlmeV9laGVhX3FwIGZhaWxlZCAoMylcbiIpOwogCQlnb3RvIG91dDsKIAl9CiAKIAlocmV0ID0gZWhlYV9oX3F1ZXJ5X2VoZWFfcXAoYWRhcHRlci0+aGFuZGxlLCAwLCBxcC0+ZndfaGFuZGxlLAogCQkJCSAgICBFSEVBX0JNQVNLX1NFVChIX1FQQ0IwX0FMTCwgMHhGRkZGKSwgY2IwKTsKIAlpZiAoaHJldCAhPSBIX1NVQ0NFU1MpIHsKLQkJZWhlYV9lcnJvcigicXVlcnlfZWhlYV9xcCBmYWlsZWQgKDQpIik7CisJCXByX2VycigicXVlcnlfZWhlYV9xcCBmYWlsZWQgKDQpXG4iKTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC0yNTIxLDcgKzI1MTksNyBAQAogCQkJCSAgIEVIRUFfTUFYX0VOVFJJRVNfRVEsIDEpOwogCWlmICghcG9ydC0+cXBfZXEpIHsKIAkJcmV0ID0gLUVJTlZBTDsKLQkJZWhlYV9lcnJvcigiZWhlYV9jcmVhdGVfZXEgZmFpbGVkIChxcF9lcSkiKTsKKwkJcHJfZXJyKCJlaGVhX2NyZWF0ZV9lcSBmYWlsZWQgKHFwX2VxKVxuIik7CiAJCWdvdG8gb3V0X2tpbGxfZXE7CiAJfQogCkBAIC0yNjAyLDI3ICsyNjAwLDI3IEBACiAJcmV0ID0gZWhlYV9wb3J0X3Jlc19zZXR1cChwb3J0LCBwb3J0LT5udW1fZGVmX3FwcywKIAkJCQkgIHBvcnQtPm51bV9hZGRfdHhfcXBzKTsKIAlpZiAocmV0KSB7Ci0JCWVoZWFfZXJyb3IoInBvcnRfcmVzX2ZhaWxlZCIpOworCQluZXRkZXZfZXJyKGRldiwgInBvcnRfcmVzX2ZhaWxlZFxuIik7CiAJCWdvdG8gb3V0OwogCX0KIAogCS8qIFNldCBkZWZhdWx0IFFQIGZvciB0aGlzIHBvcnQgKi8KIAlyZXQgPSBlaGVhX2NvbmZpZ3VyZV9wb3J0KHBvcnQpOwogCWlmIChyZXQpIHsKLQkJZWhlYV9lcnJvcigiZWhlYV9jb25maWd1cmVfcG9ydCBmYWlsZWQuIHJldDolZCIsIHJldCk7CisJCW5ldGRldl9lcnIoZGV2LCAiZWhlYV9jb25maWd1cmVfcG9ydCBmYWlsZWQuIHJldDolZFxuIiwgcmV0KTsKIAkJZ290byBvdXRfY2xlYW5fcHI7CiAJfQogCiAJcmV0ID0gZWhlYV9yZWdfaW50ZXJydXB0cyhkZXYpOwogCWlmIChyZXQpIHsKLQkJZWhlYV9lcnJvcigicmVnX2ludGVycnVwdHMgZmFpbGVkLiByZXQ6JWQiLCByZXQpOworCQluZXRkZXZfZXJyKGRldiwgInJlZ19pbnRlcnJ1cHRzIGZhaWxlZC4gcmV0OiVkXG4iLCByZXQpOwogCQlnb3RvIG91dF9jbGVhbl9wcjsKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgcG9ydC0+bnVtX2RlZl9xcHMgKyBwb3J0LT5udW1fYWRkX3R4X3FwczsgaSsrKSB7CiAJCXJldCA9IGVoZWFfYWN0aXZhdGVfcXAocG9ydC0+YWRhcHRlciwgcG9ydC0+cG9ydF9yZXNbaV0ucXApOwogCQlpZiAocmV0KSB7Ci0JCQllaGVhX2Vycm9yKCJhY3RpdmF0ZV9xcCBmYWlsZWQiKTsKKwkJCW5ldGRldl9lcnIoZGV2LCAiYWN0aXZhdGVfcXAgZmFpbGVkXG4iKTsKIAkJCWdvdG8gb3V0X2ZyZWVfaXJxczsKIAkJfQogCX0KQEAgLTI2MzAsNyArMjYyOCw3IEBACiAJZm9yIChpID0gMDsgaSA8IHBvcnQtPm51bV9kZWZfcXBzOyBpKyspIHsKIAkJcmV0ID0gZWhlYV9maWxsX3BvcnRfcmVzKCZwb3J0LT5wb3J0X3Jlc1tpXSk7CiAJCWlmIChyZXQpIHsKLQkJCWVoZWFfZXJyb3IoIm91dF9mcmVlX2lycXMiKTsKKwkJCW5ldGRldl9lcnIoZGV2LCAib3V0X2ZyZWVfaXJxc1xuIik7CiAJCQlnb3RvIG91dF9mcmVlX2lycXM7CiAJCX0KIAl9CkBAIC0yNjUzLDcgKzI2NTEsNyBAQAogCWVoZWFfY2xlYW5fYWxsX3BvcnRyZXMocG9ydCk7CiBvdXQ6CiAJaWYgKHJldCkKLQkJZWhlYV9pbmZvKCJGYWlsZWQgc3RhcnRpbmcgJXMuIHJldD0laSIsIGRldi0+bmFtZSwgcmV0KTsKKwkJbmV0ZGV2X2luZm8oZGV2LCAiRmFpbGVkIHN0YXJ0aW5nLiByZXQ9JWlcbiIsIHJldCk7CiAKIAllaGVhX3VwZGF0ZV9iY21jX3JlZ2lzdHJhdGlvbnMoKTsKIAllaGVhX3VwZGF0ZV9maXJtd2FyZV9oYW5kbGVzKCk7CkBAIC0yNjg0LDggKzI2ODIsNyBAQAogCiAJbXV0ZXhfbG9jaygmcG9ydC0+cG9ydF9sb2NrKTsKIAotCWlmIChuZXRpZl9tc2dfaWZ1cChwb3J0KSkKLQkJZWhlYV9pbmZvKCJlbmFibGluZyBwb3J0ICVzIiwgZGV2LT5uYW1lKTsKKwluZXRpZl9pbmZvKHBvcnQsIGlmdXAsIGRldiwgImVuYWJsaW5nIHBvcnRcbiIpOwogCiAJcmV0ID0gZWhlYV91cChkZXYpOwogCWlmICghcmV0KSB7CkBAIC0yNzIwLDggKzI3MTcsNyBAQAogCiAJcmV0ID0gZWhlYV9jbGVhbl9hbGxfcG9ydHJlcyhwb3J0KTsKIAlpZiAocmV0KQotCQllaGVhX2luZm8oIkZhaWxlZCBmcmVlaW5nIHJlc291cmNlcyBmb3IgJXMuIHJldD0laSIsCi0JCQkgIGRldi0+bmFtZSwgcmV0KTsKKwkJbmV0ZGV2X2luZm8oZGV2LCAiRmFpbGVkIGZyZWVpbmcgcmVzb3VyY2VzLiByZXQ9JWlcbiIsIHJldCk7CiAKIAllaGVhX3VwZGF0ZV9maXJtd2FyZV9oYW5kbGVzKCk7CiAKQEAgLTI3MzMsOCArMjcyOSw3IEBACiAJaW50IHJldDsKIAlzdHJ1Y3QgZWhlYV9wb3J0ICpwb3J0ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCWlmIChuZXRpZl9tc2dfaWZkb3duKHBvcnQpKQotCQllaGVhX2luZm8oImRpc2FibGluZyBwb3J0ICVzIiwgZGV2LT5uYW1lKTsKKwluZXRpZl9pbmZvKHBvcnQsIGlmZG93biwgZGV2LCAiZGlzYWJsaW5nIHBvcnRcbiIpOwogCiAJc2V0X2JpdChfX0VIRUFfRElTQUJMRV9QT1JUX1JFU0VULCAmcG9ydC0+ZmxhZ3MpOwogCWNhbmNlbF93b3JrX3N5bmMoJnBvcnQtPnJlc2V0X3Rhc2spOwpAQCAtMjc3NSw3ICsyNzcwLDcgQEAKIAkJCSBtc2Vjc190b19qaWZmaWVzKDEwMCkpOwogCiAJCWlmICghcmV0KSB7Ci0JCQllaGVhX2Vycm9yKCJXQVJOSU5HOiBzcSBub3QgZmx1c2hlZCBjb21wbGV0ZWx5Iik7CisJCQlwcl9lcnIoIldBUk5JTkc6IHNxIG5vdCBmbHVzaGVkIGNvbXBsZXRlbHlcbiIpOwogCQkJYnJlYWs7CiAJCX0KIAl9CkBAIC0yODExLDcgKzI4MDYsNyBAQAogCQkJCQkgICAgRUhFQV9CTUFTS19TRVQoSF9RUENCMF9BTEwsIDB4RkZGRiksCiAJCQkJCSAgICBjYjApOwogCQlpZiAoaHJldCAhPSBIX1NVQ0NFU1MpIHsKLQkJCWVoZWFfZXJyb3IoInF1ZXJ5X2VoZWFfcXAgZmFpbGVkICgxKSIpOworCQkJcHJfZXJyKCJxdWVyeV9laGVhX3FwIGZhaWxlZCAoMSlcbiIpOwogCQkJZ290byBvdXQ7CiAJCX0KIApAQCAtMjgyMyw3ICsyODE4LDcgQEAKIAkJCQkJCQkgICAgMSksIGNiMCwgJmR1bW15NjQsCiAJCQkJCSAgICAgJmR1bW15NjQsICZkdW1teTE2LCAmZHVtbXkxNik7CiAJCWlmIChocmV0ICE9IEhfU1VDQ0VTUykgewotCQkJZWhlYV9lcnJvcigibW9kaWZ5X2VoZWFfcXAgZmFpbGVkICgxKSIpOworCQkJcHJfZXJyKCJtb2RpZnlfZWhlYV9xcCBmYWlsZWQgKDEpXG4iKTsKIAkJCWdvdG8gb3V0OwogCQl9CiAKQEAgLTI4MzEsMTQgKzI4MjYsMTQgQEAKIAkJCQkJICAgIEVIRUFfQk1BU0tfU0VUKEhfUVBDQjBfQUxMLCAweEZGRkYpLAogCQkJCQkgICAgY2IwKTsKIAkJaWYgKGhyZXQgIT0gSF9TVUNDRVNTKSB7Ci0JCQllaGVhX2Vycm9yKCJxdWVyeV9laGVhX3FwIGZhaWxlZCAoMikiKTsKKwkJCXByX2VycigicXVlcnlfZWhlYV9xcCBmYWlsZWQgKDIpXG4iKTsKIAkJCWdvdG8gb3V0OwogCQl9CiAKIAkJLyogZGVyZWdpc3RlciBzaGFyZWQgbWVtb3J5IHJlZ2lvbnMgKi8KIAkJZHJldCA9IGVoZWFfcmVtX3NtcnMocHIpOwogCQlpZiAoZHJldCkgewotCQkJZWhlYV9lcnJvcigidW5yZWcgc2hhcmVkIG1lbW9yeSByZWdpb24gZmFpbGVkIik7CisJCQlwcl9lcnIoInVucmVnIHNoYXJlZCBtZW1vcnkgcmVnaW9uIGZhaWxlZFxuIik7CiAJCQlnb3RvIG91dDsKIAkJfQogCX0KQEAgLTI5MDcsNyArMjkwMiw3IEBACiAKIAkJcmV0ID0gZWhlYV9nZW5fc21ycyhwcik7CiAJCWlmIChyZXQpIHsKLQkJCWVoZWFfZXJyb3IoImNyZWF0aW9uIG9mIHNoYXJlZCBtZW1vcnkgcmVnaW9ucyBmYWlsZWQiKTsKKwkJCW5ldGRldl9lcnIoZGV2LCAiY3JlYXRpb24gb2Ygc2hhcmVkIG1lbW9yeSByZWdpb25zIGZhaWxlZFxuIik7CiAJCQlnb3RvIG91dDsKIAkJfQogCkBAIC0yOTE4LDcgKzI5MTMsNyBAQAogCQkJCQkgICAgRUhFQV9CTUFTS19TRVQoSF9RUENCMF9BTEwsIDB4RkZGRiksCiAJCQkJCSAgICBjYjApOwogCQlpZiAoaHJldCAhPSBIX1NVQ0NFU1MpIHsKLQkJCWVoZWFfZXJyb3IoInF1ZXJ5X2VoZWFfcXAgZmFpbGVkICgxKSIpOworCQkJbmV0ZGV2X2VycihkZXYsICJxdWVyeV9laGVhX3FwIGZhaWxlZCAoMSlcbiIpOwogCQkJZ290byBvdXQ7CiAJCX0KIApAQCAtMjkzMCw3ICsyOTI1LDcgQEAKIAkJCQkJCQkgICAgMSksIGNiMCwgJmR1bW15NjQsCiAJCQkJCSAgICAgJmR1bW15NjQsICZkdW1teTE2LCAmZHVtbXkxNik7CiAJCWlmIChocmV0ICE9IEhfU1VDQ0VTUykgewotCQkJZWhlYV9lcnJvcigibW9kaWZ5X2VoZWFfcXAgZmFpbGVkICgxKSIpOworCQkJbmV0ZGV2X2VycihkZXYsICJtb2RpZnlfZWhlYV9xcCBmYWlsZWQgKDEpXG4iKTsKIAkJCWdvdG8gb3V0OwogCQl9CiAKQEAgLTI5MzgsNyArMjkzMyw3IEBACiAJCQkJCSAgICBFSEVBX0JNQVNLX1NFVChIX1FQQ0IwX0FMTCwgMHhGRkZGKSwKIAkJCQkJICAgIGNiMCk7CiAJCWlmIChocmV0ICE9IEhfU1VDQ0VTUykgewotCQkJZWhlYV9lcnJvcigicXVlcnlfZWhlYV9xcCBmYWlsZWQgKDIpIik7CisJCQluZXRkZXZfZXJyKGRldiwgInF1ZXJ5X2VoZWFfcXAgZmFpbGVkICgyKVxuIik7CiAJCQlnb3RvIG91dDsKIAkJfQogCkBAIC0yOTc1LDggKzI5NzAsNyBAQAogCiAJZWhlYV9zZXRfbXVsdGljYXN0X2xpc3QoZGV2KTsKIAotCWlmIChuZXRpZl9tc2dfdGltZXIocG9ydCkpCi0JCWVoZWFfaW5mbygiRGV2aWNlICVzIHJlc2V0dGVkIHN1Y2Nlc3NmdWxseSIsIGRldi0+bmFtZSk7CisJbmV0aWZfaW5mbyhwb3J0LCB0aW1lciwgZGV2LCAicmVzZXQgc3VjY2Vzc2Z1bFxuIik7CiAKIAlwb3J0X25hcGlfZW5hYmxlKHBvcnQpOwogCkBAIC0yOTg2LDEyICsyOTgwLDEyIEBACiAJbXV0ZXhfdW5sb2NrKCZkbHBhcl9tZW1fbG9jayk7CiB9CiAKLXN0YXRpYyB2b2lkIGVoZWFfcmVyZWdfbXJzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3N0YXRpYyB2b2lkIGVoZWFfcmVyZWdfbXJzKHZvaWQpCiB7CiAJaW50IHJldCwgaTsKIAlzdHJ1Y3QgZWhlYV9hZGFwdGVyICphZGFwdGVyOwogCi0JZWhlYV9pbmZvKCJMUEFSIG1lbW9yeSBjaGFuZ2VkIC0gcmUtaW5pdGlhbGl6aW5nIGRyaXZlciIpOworCXByX2luZm8oIkxQQVIgbWVtb3J5IGNoYW5nZWQgLSByZS1pbml0aWFsaXppbmcgZHJpdmVyXG4iKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoYWRhcHRlciwgJmFkYXB0ZXJfbGlzdCwgbGlzdCkKIAkJaWYgKGFkYXB0ZXItPmFjdGl2ZV9wb3J0cykgewpAQCAtMzAyMyw4ICszMDE3LDcgQEAKIAkJCS8qIFVucmVnaXN0ZXIgb2xkIG1lbW9yeSByZWdpb24gKi8KIAkJCXJldCA9IGVoZWFfcmVtX21yKCZhZGFwdGVyLT5tcik7CiAJCQlpZiAocmV0KSB7Ci0JCQkJZWhlYV9lcnJvcigidW5yZWdpc3RlciBNUiBmYWlsZWQgLSBkcml2ZXIiCi0JCQkJCSAgICIgaW5vcGVyYWJsZSEiKTsKKwkJCQlwcl9lcnIoInVucmVnaXN0ZXIgTVIgZmFpbGVkIC0gZHJpdmVyIGlub3BlcmFibGUhXG4iKTsKIAkJCQlnb3RvIG91dDsKIAkJCX0KIAkJfQpAQCAtMzAzNiw4ICszMDI5LDcgQEAKIAkJCS8qIFJlZ2lzdGVyIG5ldyBtZW1vcnkgcmVnaW9uICovCiAJCQlyZXQgPSBlaGVhX3JlZ19rZXJuZWxfbXIoYWRhcHRlciwgJmFkYXB0ZXItPm1yKTsKIAkJCWlmIChyZXQpIHsKLQkJCQllaGVhX2Vycm9yKCJyZWdpc3RlciBNUiBmYWlsZWQgLSBkcml2ZXIiCi0JCQkJCSAgICIgaW5vcGVyYWJsZSEiKTsKKwkJCQlwcl9lcnIoInJlZ2lzdGVyIE1SIGZhaWxlZCAtIGRyaXZlciBpbm9wZXJhYmxlIVxuIik7CiAJCQkJZ290byBvdXQ7CiAJCQl9CiAKQEAgLTMwNjAsNyArMzA1Miw3IEBACiAJCQkJfQogCQkJfQogCQl9Ci0JZWhlYV9pbmZvKCJyZS1pbml0aWFsaXppbmcgZHJpdmVyIGNvbXBsZXRlIik7CisJcHJfaW5mbygicmUtaW5pdGlhbGl6aW5nIGRyaXZlciBjb21wbGV0ZVxuIik7CiBvdXQ6CiAJcmV0dXJuOwogfQpAQCAtMzExMyw3ICszMTA1LDcgQEAKIAkvKiAoVHJ5IHRvKSBlbmFibGUgKmp1bWJvIGZyYW1lcyAqLwogCWNiNCA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwogCWlmICghY2I0KSB7Ci0JCWVoZWFfZXJyb3IoIm5vIG1lbSBmb3IgY2I0Iik7CisJCXByX2Vycigibm8gbWVtIGZvciBjYjRcbiIpOwogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKIAl9IGVsc2UgewpAQCAtMzE3NSwxMyArMzE2NywxMyBAQAogCiAJcmV0ID0gb2ZfZGV2aWNlX3JlZ2lzdGVyKCZwb3J0LT5vZmRldik7CiAJaWYgKHJldCkgewotCQllaGVhX2Vycm9yKCJmYWlsZWQgdG8gcmVnaXN0ZXIgZGV2aWNlLiByZXQ9JWQiLCByZXQpOworCQlwcl9lcnIoImZhaWxlZCB0byByZWdpc3RlciBkZXZpY2UuIHJldD0lZFxuIiwgcmV0KTsKIAkJZ290byBvdXQ7CiAJfQogCiAJcmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZwb3J0LT5vZmRldi5kZXYsICZkZXZfYXR0cl9sb2dfcG9ydF9pZCk7CiAJaWYgKHJldCkgewotCQllaGVhX2Vycm9yKCJmYWlsZWQgdG8gcmVnaXN0ZXIgYXR0cmlidXRlcywgcmV0PSVkIiwgcmV0KTsKKwkJcHJfZXJyKCJmYWlsZWQgdG8gcmVnaXN0ZXIgYXR0cmlidXRlcywgcmV0PSVkXG4iLCByZXQpOwogCQlnb3RvIG91dF91bnJlZ19vZl9kZXY7CiAJfQogCkBAIC0zMjMxLDcgKzMyMjMsNyBAQAogCWRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3QgZWhlYV9wb3J0KSk7CiAKIAlpZiAoIWRldikgewotCQllaGVhX2Vycm9yKCJubyBtZW0gZm9yIG5ldF9kZXZpY2UiKTsKKwkJcHJfZXJyKCJubyBtZW0gZm9yIG5ldF9kZXZpY2VcbiIpOwogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIG91dF9lcnI7CiAJfQpAQCAtMzI4NSw3ICszMjc3LDcgQEAKIAogCXJldCA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwogCWlmIChyZXQpIHsKLQkJZWhlYV9lcnJvcigicmVnaXN0ZXJfbmV0ZGV2IGZhaWxlZC4gcmV0PSVkIiwgcmV0KTsKKwkJcHJfZXJyKCJyZWdpc3Rlcl9uZXRkZXYgZmFpbGVkLiByZXQ9JWRcbiIsIHJldCk7CiAJCWdvdG8gb3V0X3VucmVnX3BvcnQ7CiAJfQogCkBAIC0zMjkzLDExICszMjg1LDEwIEBACiAKIAlyZXQgPSBlaGVhX2dldF9qdW1ib2ZyYW1lX3N0YXR1cyhwb3J0LCAmanVtYm8pOwogCWlmIChyZXQpCi0JCWVoZWFfZXJyb3IoImZhaWxlZCBkZXRlcm1pbmluZyBqdW1ibyBmcmFtZSBzdGF0dXMgZm9yICVzIiwKLQkJCSAgIHBvcnQtPm5ldGRldi0+bmFtZSk7CisJCW5ldGRldl9lcnIoZGV2LCAiZmFpbGVkIGRldGVybWluaW5nIGp1bWJvIGZyYW1lIHN0YXR1c1xuIik7CiAKLQllaGVhX2luZm8oIiVzOiBKdW1ibyBmcmFtZXMgYXJlICVzYWJsZWQiLCBkZXYtPm5hbWUsCi0JCSAganVtYm8gPT0gMSA/ICJlbiIgOiAiZGlzIik7CisJbmV0ZGV2X2luZm8oZGV2LCAiSnVtYm8gZnJhbWVzIGFyZSAlc2FibGVkXG4iLAorCQkgICAganVtYm8gPT0gMSA/ICJlbiIgOiAiZGlzIik7CiAKIAlhZGFwdGVyLT5hY3RpdmVfcG9ydHMrKzsKIApAQCAtMzMxMywxNCArMzMwNCwxNiBAQAogCWZyZWVfbmV0ZGV2KGRldik7CiAKIG91dF9lcnI6Ci0JZWhlYV9lcnJvcigic2V0dGluZyB1cCBsb2dpY2FsIHBvcnQgd2l0aCBpZD0lZCBmYWlsZWQsIHJldD0lZCIsCi0JCSAgIGxvZ2ljYWxfcG9ydF9pZCwgcmV0KTsKKwlwcl9lcnIoInNldHRpbmcgdXAgbG9naWNhbCBwb3J0IHdpdGggaWQ9JWQgZmFpbGVkLCByZXQ9JWRcbiIsCisJICAgICAgIGxvZ2ljYWxfcG9ydF9pZCwgcmV0KTsKIAlyZXR1cm4gTlVMTDsKIH0KIAogc3RhdGljIHZvaWQgZWhlYV9zaHV0ZG93bl9zaW5nbGVfcG9ydChzdHJ1Y3QgZWhlYV9wb3J0ICpwb3J0KQogewogCXN0cnVjdCBlaGVhX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwb3J0LT5hZGFwdGVyOworCisJY2FuY2VsX3dvcmtfc3luYygmcG9ydC0+cmVzZXRfdGFzayk7CiAJdW5yZWdpc3Rlcl9uZXRkZXYocG9ydC0+bmV0ZGV2KTsKIAllaGVhX3VucmVnaXN0ZXJfcG9ydChwb3J0KTsKIAlrZnJlZShwb3J0LT5tY19saXN0KTsKQEAgLTMzNDIsMTMgKzMzMzUsMTMgQEAKIAkJZG5fbG9nX3BvcnRfaWQgPSBvZl9nZXRfcHJvcGVydHkoZXRoX2RuLCAiaWJtLGhlYS1wb3J0LW5vIiwKIAkJCQkJCSBOVUxMKTsKIAkJaWYgKCFkbl9sb2dfcG9ydF9pZCkgewotCQkJZWhlYV9lcnJvcigiYmFkIGRldmljZSBub2RlOiBldGhfZG4gbmFtZT0lcyIsCi0JCQkJICAgZXRoX2RuLT5mdWxsX25hbWUpOworCQkJcHJfZXJyKCJiYWQgZGV2aWNlIG5vZGU6IGV0aF9kbiBuYW1lPSVzXG4iLAorCQkJICAgICAgIGV0aF9kbi0+ZnVsbF9uYW1lKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKIAkJaWYgKGVoZWFfYWRkX2FkYXB0ZXJfbXIoYWRhcHRlcikpIHsKLQkJCWVoZWFfZXJyb3IoImNyZWF0aW5nIE1SIGZhaWxlZCIpOworCQkJcHJfZXJyKCJjcmVhdGluZyBNUiBmYWlsZWRcbiIpOwogCQkJb2Zfbm9kZV9wdXQoZXRoX2RuKTsKIAkJCXJldHVybiAtRUlPOwogCQl9CkBAIC0zMzU3LDkgKzMzNTAsOCBAQAogCQkJCQkJCSAgKmRuX2xvZ19wb3J0X2lkLAogCQkJCQkJCSAgZXRoX2RuKTsKIAkJaWYgKGFkYXB0ZXItPnBvcnRbaV0pCi0JCQllaGVhX2luZm8oIiVzIC0+IGxvZ2ljYWwgcG9ydCBpZCAjJWQiLAotCQkJCSAgYWRhcHRlci0+cG9ydFtpXS0+bmV0ZGV2LT5uYW1lLAotCQkJCSAgKmRuX2xvZ19wb3J0X2lkKTsKKwkJCW5ldGRldl9pbmZvKGFkYXB0ZXItPnBvcnRbaV0tPm5ldGRldiwKKwkJCQkgICAgImxvZ2ljYWwgcG9ydCBpZCAjJWRcbiIsICpkbl9sb2dfcG9ydF9pZCk7CiAJCWVsc2UKIAkJCWVoZWFfcmVtb3ZlX2FkYXB0ZXJfbXIoYWRhcHRlcik7CiAKQEAgLTM0MDQsMjEgKzMzOTYsMjAgQEAKIAlwb3J0ID0gZWhlYV9nZXRfcG9ydChhZGFwdGVyLCBsb2dpY2FsX3BvcnRfaWQpOwogCiAJaWYgKHBvcnQpIHsKLQkJZWhlYV9pbmZvKCJhZGRpbmcgcG9ydCB3aXRoIGxvZ2ljYWwgcG9ydCBpZD0lZCBmYWlsZWQuIHBvcnQgIgotCQkJICAiYWxyZWFkeSBjb25maWd1cmVkIGFzICVzLiIsIGxvZ2ljYWxfcG9ydF9pZCwKLQkJCSAgcG9ydC0+bmV0ZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X2luZm8ocG9ydC0+bmV0ZGV2LCAiYWRkaW5nIHBvcnQgd2l0aCBsb2dpY2FsIHBvcnQgaWQ9JWQgZmFpbGVkOiBwb3J0IGFscmVhZHkgY29uZmlndXJlZFxuIiwKKwkJCSAgICBsb2dpY2FsX3BvcnRfaWQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlldGhfZG4gPSBlaGVhX2dldF9ldGhfZG4oYWRhcHRlciwgbG9naWNhbF9wb3J0X2lkKTsKIAogCWlmICghZXRoX2RuKSB7Ci0JCWVoZWFfaW5mbygibm8gbG9naWNhbCBwb3J0IHdpdGggaWQgJWQgZm91bmQiLCBsb2dpY2FsX3BvcnRfaWQpOworCQlwcl9pbmZvKCJubyBsb2dpY2FsIHBvcnQgd2l0aCBpZCAlZCBmb3VuZFxuIiwgbG9naWNhbF9wb3J0X2lkKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaWYgKGVoZWFfYWRkX2FkYXB0ZXJfbXIoYWRhcHRlcikpIHsKLQkJZWhlYV9lcnJvcigiY3JlYXRpbmcgTVIgZmFpbGVkIik7CisJCXByX2VycigiY3JlYXRpbmcgTVIgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC0zNDMzLDggKzM0MjQsOCBAQAogCQkJCWJyZWFrOwogCQkJfQogCi0JCWVoZWFfaW5mbygiYWRkZWQgJXMgKGxvZ2ljYWwgcG9ydCBpZD0lZCkiLCBwb3J0LT5uZXRkZXYtPm5hbWUsCi0JCQkgIGxvZ2ljYWxfcG9ydF9pZCk7CisJCW5ldGRldl9pbmZvKHBvcnQtPm5ldGRldiwgImFkZGVkOiAobG9naWNhbCBwb3J0IGlkPSVkKVxuIiwKKwkJCSAgICBsb2dpY2FsX3BvcnRfaWQpOwogCX0gZWxzZSB7CiAJCWVoZWFfcmVtb3ZlX2FkYXB0ZXJfbXIoYWRhcHRlcik7CiAJCXJldHVybiAtRUlPOwpAQCAtMzQ1Nyw4ICszNDQ4LDggQEAKIAlwb3J0ID0gZWhlYV9nZXRfcG9ydChhZGFwdGVyLCBsb2dpY2FsX3BvcnRfaWQpOwogCiAJaWYgKHBvcnQpIHsKLQkJZWhlYV9pbmZvKCJyZW1vdmVkICVzIChsb2dpY2FsIHBvcnQgaWQ9JWQpIiwgcG9ydC0+bmV0ZGV2LT5uYW1lLAotCQkJICBsb2dpY2FsX3BvcnRfaWQpOworCQluZXRkZXZfaW5mbyhwb3J0LT5uZXRkZXYsICJyZW1vdmVkOiAobG9naWNhbCBwb3J0IGlkPSVkKVxuIiwKKwkJCSAgICBsb2dpY2FsX3BvcnRfaWQpOwogCiAJCWVoZWFfc2h1dGRvd25fc2luZ2xlX3BvcnQocG9ydCk7CiAKQEAgLTM0NjgsOCArMzQ1OSw4IEBACiAJCQkJYnJlYWs7CiAJCQl9CiAJfSBlbHNlIHsKLQkJZWhlYV9lcnJvcigicmVtb3ZpbmcgcG9ydCB3aXRoIGxvZ2ljYWwgcG9ydCBpZD0lZCBmYWlsZWQuIHBvcnQgIgotCQkJICAgIm5vdCBjb25maWd1cmVkLiIsIGxvZ2ljYWxfcG9ydF9pZCk7CisJCXByX2VycigicmVtb3ZpbmcgcG9ydCB3aXRoIGxvZ2ljYWwgcG9ydCBpZD0lZCBmYWlsZWQuIHBvcnQgbm90IGNvbmZpZ3VyZWQuXG4iLAorCQkgICAgICAgbG9naWNhbF9wb3J0X2lkKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0zNTA2LDcgKzM0OTcsNyBAQAogCWludCByZXQ7CiAKIAlpZiAoIWRldiB8fCAhZGV2LT5kZXYub2Zfbm9kZSkgewotCQllaGVhX2Vycm9yKCJJbnZhbGlkIGlibWVidXMgZGV2aWNlIHByb2JlZCIpOworCQlwcl9lcnIoIkludmFsaWQgaWJtZWJ1cyBkZXZpY2UgcHJvYmVkXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0zNjEwLDggKzM2MDEsNiBAQAogCiAJZWhlYV9yZW1vdmVfZGV2aWNlX3N5c2ZzKGRldik7CiAKLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwotCiAJaWJtZWJ1c19mcmVlX2lycShhZGFwdGVyLT5uZXEtPmF0dHIuaXN0MSwgYWRhcHRlcik7CiAJdGFza2xldF9raWxsKCZhZGFwdGVyLT5uZXFfdGFza2xldCk7CiAKQEAgLTM2NTQsMjEgKzM2NDMsMjEgQEAKIAogCXN3aXRjaCAoYWN0aW9uKSB7CiAJY2FzZSBNRU1fQ0FOQ0VMX09GRkxJTkU6Ci0JCWVoZWFfaW5mbygibWVtb3J5IG9mZmxpbmluZyBjYW5jZWxlZCIpOworCQlwcl9pbmZvKCJtZW1vcnkgb2ZmbGluaW5nIGNhbmNlbGVkIik7CiAJCS8qIFJlYWRkIGNhbmNlbGVkIG1lbW9yeSBibG9jayAqLwogCWNhc2UgTUVNX09OTElORToKLQkJZWhlYV9pbmZvKCJtZW1vcnkgaXMgZ29pbmcgb25saW5lIik7CisJCXByX2luZm8oIm1lbW9yeSBpcyBnb2luZyBvbmxpbmUiKTsKIAkJc2V0X2JpdChfX0VIRUFfU1RPUF9YRkVSLCAmZWhlYV9kcml2ZXJfZmxhZ3MpOwogCQlpZiAoZWhlYV9hZGRfc2VjdF9ibWFwKGFyZy0+c3RhcnRfcGZuLCBhcmctPm5yX3BhZ2VzKSkKIAkJCWdvdG8gb3V0X3VubG9jazsKLQkJZWhlYV9yZXJlZ19tcnMoTlVMTCk7CisJCWVoZWFfcmVyZWdfbXJzKCk7CiAJCWJyZWFrOwogCWNhc2UgTUVNX0dPSU5HX09GRkxJTkU6Ci0JCWVoZWFfaW5mbygibWVtb3J5IGlzIGdvaW5nIG9mZmxpbmUiKTsKKwkJcHJfaW5mbygibWVtb3J5IGlzIGdvaW5nIG9mZmxpbmUiKTsKIAkJc2V0X2JpdChfX0VIRUFfU1RPUF9YRkVSLCAmZWhlYV9kcml2ZXJfZmxhZ3MpOwogCQlpZiAoZWhlYV9yZW1fc2VjdF9ibWFwKGFyZy0+c3RhcnRfcGZuLCBhcmctPm5yX3BhZ2VzKSkKIAkJCWdvdG8gb3V0X3VubG9jazsKLQkJZWhlYV9yZXJlZ19tcnMoTlVMTCk7CisJCWVoZWFfcmVyZWdfbXJzKCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwpAQCAtMzY5MCw3ICszNjc5LDcgQEAKIAkJCQl1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqdW51c2VkKQogewogCWlmIChhY3Rpb24gPT0gU1lTX1JFU1RBUlQpIHsKLQkJZWhlYV9pbmZvKCJSZWJvb3Q6IGZyZWVpbmcgYWxsIGVIRUEgcmVzb3VyY2VzIik7CisJCXByX2luZm8oIlJlYm9vdDogZnJlZWluZyBhbGwgZUhFQSByZXNvdXJjZXNcbiIpOwogCQlpYm1lYnVzX3VucmVnaXN0ZXJfZHJpdmVyKCZlaGVhX2RyaXZlcik7CiAJfQogCXJldHVybiBOT1RJRllfRE9ORTsKQEAgLTM3MDYsMjIgKzM2OTUsMjIgQEAKIAogCWlmICgocnExX2VudHJpZXMgPCBFSEVBX01JTl9FTlRSSUVTX1FQKSB8fAogCSAgICAocnExX2VudHJpZXMgPiBFSEVBX01BWF9FTlRSSUVTX1JRMSkpIHsKLQkJZWhlYV9pbmZvKCJCYWQgcGFyYW1ldGVyOiBycTFfZW50cmllcyIpOworCQlwcl9pbmZvKCJCYWQgcGFyYW1ldGVyOiBycTFfZW50cmllc1xuIik7CiAJCXJldCA9IC1FSU5WQUw7CiAJfQogCWlmICgocnEyX2VudHJpZXMgPCBFSEVBX01JTl9FTlRSSUVTX1FQKSB8fAogCSAgICAocnEyX2VudHJpZXMgPiBFSEVBX01BWF9FTlRSSUVTX1JRMikpIHsKLQkJZWhlYV9pbmZvKCJCYWQgcGFyYW1ldGVyOiBycTJfZW50cmllcyIpOworCQlwcl9pbmZvKCJCYWQgcGFyYW1ldGVyOiBycTJfZW50cmllc1xuIik7CiAJCXJldCA9IC1FSU5WQUw7CiAJfQogCWlmICgocnEzX2VudHJpZXMgPCBFSEVBX01JTl9FTlRSSUVTX1FQKSB8fAogCSAgICAocnEzX2VudHJpZXMgPiBFSEVBX01BWF9FTlRSSUVTX1JRMykpIHsKLQkJZWhlYV9pbmZvKCJCYWQgcGFyYW1ldGVyOiBycTNfZW50cmllcyIpOworCQlwcl9pbmZvKCJCYWQgcGFyYW1ldGVyOiBycTNfZW50cmllc1xuIik7CiAJCXJldCA9IC1FSU5WQUw7CiAJfQogCWlmICgoc3FfZW50cmllcyA8IEVIRUFfTUlOX0VOVFJJRVNfUVApIHx8CiAJICAgIChzcV9lbnRyaWVzID4gRUhFQV9NQVhfRU5UUklFU19TUSkpIHsKLQkJZWhlYV9pbmZvKCJCYWQgcGFyYW1ldGVyOiBzcV9lbnRyaWVzIik7CisJCXByX2luZm8oIkJhZCBwYXJhbWV0ZXI6IHNxX2VudHJpZXNcbiIpOwogCQlyZXQgPSAtRUlOVkFMOwogCX0KIApAQCAtMzc0MSwxMSArMzczMCw4IEBACiB7CiAJaW50IHJldDsKIAotCXByaW50ayhLRVJOX0lORk8gIklCTSBlSEVBIGV0aGVybmV0IGRldmljZSBkcml2ZXIgKFJlbGVhc2UgJXMpXG4iLAotCSAgICAgICBEUlZfVkVSU0lPTik7CisJcHJfaW5mbygiSUJNIGVIRUEgZXRoZXJuZXQgZGV2aWNlIGRyaXZlciAoUmVsZWFzZSAlcylcbiIsIERSVl9WRVJTSU9OKTsKIAotCi0JSU5JVF9XT1JLKCZlaGVhX3JlcmVnX21yX3Rhc2ssIGVoZWFfcmVyZWdfbXJzKTsKIAltZW1zZXQoJmVoZWFfZndfaGFuZGxlcywgMCwgc2l6ZW9mKGVoZWFfZndfaGFuZGxlcykpOwogCW1lbXNldCgmZWhlYV9iY21jX3JlZ3MsIDAsIHNpemVvZihlaGVhX2JjbWNfcmVncykpOwogCkBAIC0zNzYyLDI3ICszNzQ4LDI3IEBACiAKIAlyZXQgPSByZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJmVoZWFfcmVib290X25iKTsKIAlpZiAocmV0KQotCQllaGVhX2luZm8oImZhaWxlZCByZWdpc3RlcmluZyByZWJvb3Qgbm90aWZpZXIiKTsKKwkJcHJfaW5mbygiZmFpbGVkIHJlZ2lzdGVyaW5nIHJlYm9vdCBub3RpZmllclxuIik7CiAKIAlyZXQgPSByZWdpc3Rlcl9tZW1vcnlfbm90aWZpZXIoJmVoZWFfbWVtX25iKTsKIAlpZiAocmV0KQotCQllaGVhX2luZm8oImZhaWxlZCByZWdpc3RlcmluZyBtZW1vcnkgcmVtb3ZlIG5vdGlmaWVyIik7CisJCXByX2luZm8oImZhaWxlZCByZWdpc3RlcmluZyBtZW1vcnkgcmVtb3ZlIG5vdGlmaWVyXG4iKTsKIAogCXJldCA9IGNyYXNoX3NodXRkb3duX3JlZ2lzdGVyKGVoZWFfY3Jhc2hfaGFuZGxlcik7CiAJaWYgKHJldCkKLQkJZWhlYV9pbmZvKCJmYWlsZWQgcmVnaXN0ZXJpbmcgY3Jhc2ggaGFuZGxlciIpOworCQlwcl9pbmZvKCJmYWlsZWQgcmVnaXN0ZXJpbmcgY3Jhc2ggaGFuZGxlclxuIik7CiAKIAlyZXQgPSBpYm1lYnVzX3JlZ2lzdGVyX2RyaXZlcigmZWhlYV9kcml2ZXIpOwogCWlmIChyZXQpIHsKLQkJZWhlYV9lcnJvcigiZmFpbGVkIHJlZ2lzdGVyaW5nIGVIRUEgZGV2aWNlIGRyaXZlciBvbiBlYnVzIik7CisJCXByX2VycigiZmFpbGVkIHJlZ2lzdGVyaW5nIGVIRUEgZGV2aWNlIGRyaXZlciBvbiBlYnVzXG4iKTsKIAkJZ290byBvdXQyOwogCX0KIAogCXJldCA9IGRyaXZlcl9jcmVhdGVfZmlsZSgmZWhlYV9kcml2ZXIuZHJpdmVyLAogCQkJCSAmZHJpdmVyX2F0dHJfY2FwYWJpbGl0aWVzKTsKIAlpZiAocmV0KSB7Ci0JCWVoZWFfZXJyb3IoImZhaWxlZCB0byByZWdpc3RlciBjYXBhYmlsaXRpZXMgYXR0cmlidXRlLCByZXQ9JWQiLAotCQkJICAgcmV0KTsKKwkJcHJfZXJyKCJmYWlsZWQgdG8gcmVnaXN0ZXIgY2FwYWJpbGl0aWVzIGF0dHJpYnV0ZSwgcmV0PSVkXG4iLAorCQkgICAgICAgcmV0KTsKIAkJZ290byBvdXQzOwogCX0KIApAQCAtMzgwMiwxMyArMzc4OCwxMiBAQAogewogCWludCByZXQ7CiAKLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwogCWRyaXZlcl9yZW1vdmVfZmlsZSgmZWhlYV9kcml2ZXIuZHJpdmVyLCAmZHJpdmVyX2F0dHJfY2FwYWJpbGl0aWVzKTsKIAlpYm1lYnVzX3VucmVnaXN0ZXJfZHJpdmVyKCZlaGVhX2RyaXZlcik7CiAJdW5yZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJmVoZWFfcmVib290X25iKTsKIAlyZXQgPSBjcmFzaF9zaHV0ZG93bl91bnJlZ2lzdGVyKGVoZWFfY3Jhc2hfaGFuZGxlcik7CiAJaWYgKHJldCkKLQkJZWhlYV9pbmZvKCJmYWlsZWQgdW5yZWdpc3RlcmluZyBjcmFzaCBoYW5kbGVyIik7CisJCXByX2luZm8oImZhaWxlZCB1bnJlZ2lzdGVyaW5nIGNyYXNoIGhhbmRsZXJcbiIpOwogCXVucmVnaXN0ZXJfbWVtb3J5X25vdGlmaWVyKCZlaGVhX21lbV9uYik7CiAJa2ZyZWUoZWhlYV9md19oYW5kbGVzLmFycik7CiAJa2ZyZWUoZWhlYV9iY21jX3JlZ3MuYXJyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9waHlwLmMgYi9kcml2ZXJzL25ldC9laGVhL2VoZWFfcGh5cC5jCmluZGV4IDhmZTlkY2EuLjA1MDY5NjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9waHlwLmMKKysrIGIvZHJpdmVycy9uZXQvZWhlYS9laGVhX3BoeXAuYwpAQCAtMjYsNiArMjYsOCBAQAogICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KIAorI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAorCiAjaW5jbHVkZSAiZWhlYV9waHlwLmgiCiAKIApAQCAtNjcsMTIgKzY5LDExIEBACiAJCX0KIAogCQlpZiAocmV0IDwgSF9TVUNDRVNTKQotCQkJZWhlYV9lcnJvcigib3Bjb2RlPSVseCByZXQ9JWx4IgotCQkJCSAgICIgYXJnMT0lbHggYXJnMj0lbHggYXJnMz0lbHggYXJnND0lbHgiCi0JCQkJICAgIiBhcmc1PSVseCBhcmc2PSVseCBhcmc3PSVseCAiLAotCQkJCSAgIG9wY29kZSwgcmV0LAotCQkJCSAgIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUsCi0JCQkJICAgYXJnNiwgYXJnNyk7CisJCQlwcl9lcnIoIm9wY29kZT0lbHggcmV0PSVseCIKKwkJCSAgICAgICAiIGFyZzE9JWx4IGFyZzI9JWx4IGFyZzM9JWx4IGFyZzQ9JWx4IgorCQkJICAgICAgICIgYXJnNT0lbHggYXJnNj0lbHggYXJnNz0lbHhcbiIsCisJCQkgICAgICAgb3Bjb2RlLCByZXQsCisJCQkgICAgICAgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSwgYXJnNiwgYXJnNyk7CiAKIAkJcmV0dXJuIHJldDsKIAl9CkBAIC0xMTQsMTkgKzExNSwxOCBAQAogCQkgICAgJiYgKCgoY2JfY2F0ID09IEhfUE9SVF9DQjQpICYmICgoYXJnMyA9PSBIX1BPUlRfQ0I0X0pVTUJPKQogCQkgICAgfHwgKGFyZzMgPT0gSF9QT1JUX0NCNF9TUEVFRCkpKSB8fCAoKGNiX2NhdCA9PSBIX1BPUlRfQ0I3KQogCQkgICAgJiYgKGFyZzMgPT0gSF9QT1JUX0NCN19EVUNRUE4pKSkpKQotCQkJZWhlYV9lcnJvcigib3Bjb2RlPSVseCByZXQ9JWx4IgotCQkJCSAgICIgYXJnMT0lbHggYXJnMj0lbHggYXJnMz0lbHggYXJnND0lbHgiCi0JCQkJICAgIiBhcmc1PSVseCBhcmc2PSVseCBhcmc3PSVseCBhcmc4PSVseCIKLQkJCQkgICAiIGFyZzk9JWx4IgotCQkJCSAgICIgb3V0MT0lbHggb3V0Mj0lbHggb3V0Mz0lbHggb3V0ND0lbHgiCi0JCQkJICAgIiBvdXQ1PSVseCBvdXQ2PSVseCBvdXQ3PSVseCBvdXQ4PSVseCIKLQkJCQkgICAiIG91dDk9JWx4IiwKLQkJCQkgICBvcGNvZGUsIHJldCwKLQkJCQkgICBhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1LAotCQkJCSAgIGFyZzYsIGFyZzcsIGFyZzgsIGFyZzksCi0JCQkJICAgb3V0c1swXSwgb3V0c1sxXSwgb3V0c1syXSwgb3V0c1szXSwKLQkJCQkgICBvdXRzWzRdLCBvdXRzWzVdLCBvdXRzWzZdLCBvdXRzWzddLAotCQkJCSAgIG91dHNbOF0pOworCQkJcHJfZXJyKCJvcGNvZGU9JWx4IHJldD0lbHgiCisJCQkgICAgICAgIiBhcmcxPSVseCBhcmcyPSVseCBhcmczPSVseCBhcmc0PSVseCIKKwkJCSAgICAgICAiIGFyZzU9JWx4IGFyZzY9JWx4IGFyZzc9JWx4IGFyZzg9JWx4IgorCQkJICAgICAgICIgYXJnOT0lbHgiCisJCQkgICAgICAgIiBvdXQxPSVseCBvdXQyPSVseCBvdXQzPSVseCBvdXQ0PSVseCIKKwkJCSAgICAgICAiIG91dDU9JWx4IG91dDY9JWx4IG91dDc9JWx4IG91dDg9JWx4IgorCQkJICAgICAgICIgb3V0OT0lbHhcbiIsCisJCQkgICAgICAgb3Bjb2RlLCByZXQsCisJCQkgICAgICAgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSwKKwkJCSAgICAgICBhcmc2LCBhcmc3LCBhcmc4LCBhcmc5LAorCQkJICAgICAgIG91dHNbMF0sIG91dHNbMV0sIG91dHNbMl0sIG91dHNbM10sIG91dHNbNF0sCisJCQkgICAgICAgb3V0c1s1XSwgb3V0c1s2XSwgb3V0c1s3XSwgb3V0c1s4XSk7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC01MTUsNyArNTE1LDcgQEAKIAkJCSAgICAgY29uc3QgdTY0IGxvZ19wYWdlYWRkciwgY29uc3QgdTY0IGNvdW50KQogewogCWlmICgoY291bnQgPiAxKSAmJiAobG9nX3BhZ2VhZGRyICYgflBBR0VfTUFTSykpIHsKLQkJZWhlYV9lcnJvcigibm90IG9uIHBhZ2Vib3VuZGFyeSIpOworCQlwcl9lcnIoIm5vdCBvbiBwYWdlYm91bmRhcnlcbiIpOwogCQlyZXR1cm4gSF9QQVJBTUVURVI7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9laGVhL2VoZWFfcW1yLmMgYi9kcml2ZXJzL25ldC9laGVhL2VoZWFfcW1yLmMKaW5kZXggODkxMjhiNjMuLmNkNDRiYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9xbXIuYworKysgYi9kcml2ZXJzL25ldC9laGVhL2VoZWFfcW1yLmMKQEAgLTI2LDYgKzI2LDggQEAKICAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgImVoZWEuaCIKQEAgLTQ1LDcgKzQ3LDcgQEAKIAkJcXVldWUtPmN1cnJlbnRfcV9vZmZzZXQgLT0gcXVldWUtPnBhZ2VzaXplOwogCQlyZXR2YWx1ZSA9IE5VTEw7CiAJfSBlbHNlIGlmICgoKHU2NCkgcmV0dmFsdWUpICYgKEVIRUFfUEFHRVNJWkUtMSkpIHsKLQkJZWhlYV9lcnJvcigibm90IG9uIHBhZ2Vib3VuZGFyeSIpOworCQlwcl9lcnIoIm5vdCBvbiBwYWdlYm91bmRhcnlcbiIpOwogCQlyZXR2YWx1ZSA9IE5VTEw7CiAJfQogCXJldHVybiByZXR2YWx1ZTsKQEAgLTU4LDE1ICs2MCwxNSBAQAogCWludCBpLCBrOwogCiAJaWYgKChwYWdlc2l6ZSA+IFBBR0VfU0laRSkgfHwgKCFwYWdlc19wZXJfa3BhZ2UpKSB7Ci0JCWVoZWFfZXJyb3IoInBhZ2VzaXplIGNvbmZsaWN0ISBrZXJuZWwgcGFnZXNpemU9JWQsICIKLQkJCSAgICJlaGVhIHBhZ2VzaXplPSVkIiwgKGludClQQUdFX1NJWkUsIChpbnQpcGFnZXNpemUpOworCQlwcl9lcnIoInBhZ2VzaXplIGNvbmZsaWN0ISBrZXJuZWwgcGFnZXNpemU9JWQsIGVoZWEgcGFnZXNpemU9JWRcbiIsCisJCSAgICAgICAoaW50KVBBR0VfU0laRSwgKGludClwYWdlc2l6ZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCXF1ZXVlLT5xdWV1ZV9sZW5ndGggPSBucl9vZl9wYWdlcyAqIHBhZ2VzaXplOwogCXF1ZXVlLT5xdWV1ZV9wYWdlcyA9IGttYWxsb2MobnJfb2ZfcGFnZXMgKiBzaXplb2Yodm9pZCAqKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFxdWV1ZS0+cXVldWVfcGFnZXMpIHsKLQkJZWhlYV9lcnJvcigibm8gbWVtIGZvciBxdWV1ZV9wYWdlcyIpOworCQlwcl9lcnIoIm5vIG1lbSBmb3IgcXVldWVfcGFnZXNcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTEzMCw3ICsxMzIsNyBAQAogCiAJY3EgPSBremFsbG9jKHNpemVvZigqY3EpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNxKSB7Ci0JCWVoZWFfZXJyb3IoIm5vIG1lbSBmb3IgY3EiKTsKKwkJcHJfZXJyKCJubyBtZW0gZm9yIGNxXG4iKTsKIAkJZ290byBvdXRfbm9tZW07CiAJfQogCkBAIC0xNDcsNyArMTQ5LDcgQEAKIAlocmV0ID0gZWhlYV9oX2FsbG9jX3Jlc291cmNlX2NxKGFkYXB0ZXItPmhhbmRsZSwgJmNxLT5hdHRyLAogCQkJCQkmY3EtPmZ3X2hhbmRsZSwgJmNxLT5lcGFzKTsKIAlpZiAoaHJldCAhPSBIX1NVQ0NFU1MpIHsKLQkJZWhlYV9lcnJvcigiYWxsb2NfcmVzb3VyY2VfY3EgZmFpbGVkIik7CisJCXByX2VycigiYWxsb2NfcmVzb3VyY2VfY3EgZmFpbGVkXG4iKTsKIAkJZ290byBvdXRfZnJlZW1lbTsKIAl9CiAKQEAgLTE1OSw3ICsxNjEsNyBAQAogCWZvciAoY291bnRlciA9IDA7IGNvdW50ZXIgPCBjcS0+YXR0ci5ucl9wYWdlczsgY291bnRlcisrKSB7CiAJCXZwYWdlID0gaHdfcXBhZ2VpdF9nZXRfaW5jKCZjcS0+aHdfcXVldWUpOwogCQlpZiAoIXZwYWdlKSB7Ci0JCQllaGVhX2Vycm9yKCJod19xcGFnZWl0X2dldF9pbmMgZmFpbGVkIik7CisJCQlwcl9lcnIoImh3X3FwYWdlaXRfZ2V0X2luYyBmYWlsZWRcbiIpOwogCQkJZ290byBvdXRfa2lsbF9od3E7CiAJCX0KIApAQCAtMTY4LDkgKzE3MCw4IEBACiAJCQkJCSAgICAgMCwgRUhFQV9DUV9SRUdJU1RFUl9PUklHLAogCQkJCQkgICAgIGNxLT5md19oYW5kbGUsIHJwYWdlLCAxKTsKIAkJaWYgKGhyZXQgPCBIX1NVQ0NFU1MpIHsKLQkJCWVoZWFfZXJyb3IoInJlZ2lzdGVyX3JwYWdlX2NxIGZhaWxlZCBlaGVhX2NxPSVwICIKLQkJCQkgICAiaHJldD0lbGx4IGNvdW50ZXI9JWkgYWN0X3BhZ2VzPSVpIiwKLQkJCQkgICBjcSwgaHJldCwgY291bnRlciwgY3EtPmF0dHIubnJfcGFnZXMpOworCQkJcHJfZXJyKCJyZWdpc3Rlcl9ycGFnZV9jcSBmYWlsZWQgZWhlYV9jcT0lcCBocmV0PSVsbHggY291bnRlcj0laSBhY3RfcGFnZXM9JWlcbiIsCisJCQkgICAgICAgY3EsIGhyZXQsIGNvdW50ZXIsIGNxLT5hdHRyLm5yX3BhZ2VzKTsKIAkJCWdvdG8gb3V0X2tpbGxfaHdxOwogCQl9CiAKQEAgLTE3OCwxNCArMTc5LDE0IEBACiAJCQl2cGFnZSA9IGh3X3FwYWdlaXRfZ2V0X2luYygmY3EtPmh3X3F1ZXVlKTsKIAogCQkJaWYgKChocmV0ICE9IEhfU1VDQ0VTUykgfHwgKHZwYWdlKSkgewotCQkJCWVoZWFfZXJyb3IoInJlZ2lzdHJhdGlvbiBvZiBwYWdlcyBub3QgIgotCQkJCQkgICAiY29tcGxldGUgaHJldD0lbGx4XG4iLCBocmV0KTsKKwkJCQlwcl9lcnIoInJlZ2lzdHJhdGlvbiBvZiBwYWdlcyBub3QgY29tcGxldGUgaHJldD0lbGx4XG4iLAorCQkJCSAgICAgICBocmV0KTsKIAkJCQlnb3RvIG91dF9raWxsX2h3cTsKIAkJCX0KIAkJfSBlbHNlIHsKIAkJCWlmIChocmV0ICE9IEhfUEFHRV9SRUdJU1RFUkVEKSB7Ci0JCQkJZWhlYV9lcnJvcigiQ1E6IHJlZ2lzdHJhdGlvbiBvZiBwYWdlIGZhaWxlZCAiCi0JCQkJCSAgICJocmV0PSVsbHhcbiIsIGhyZXQpOworCQkJCXByX2VycigiQ1E6IHJlZ2lzdHJhdGlvbiBvZiBwYWdlIGZhaWxlZCBocmV0PSVsbHhcbiIsCisJCQkJICAgICAgIGhyZXQpOwogCQkJCWdvdG8gb3V0X2tpbGxfaHdxOwogCQkJfQogCQl9CkBAIC0yNDEsNyArMjQyLDcgQEAKIAl9CiAKIAlpZiAoaHJldCAhPSBIX1NVQ0NFU1MpIHsKLQkJZWhlYV9lcnJvcigiZGVzdHJveSBDUSBmYWlsZWQiKTsKKwkJcHJfZXJyKCJkZXN0cm95IENRIGZhaWxlZFxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtMjU5LDcgKzI2MCw3IEBACiAKIAllcSA9IGt6YWxsb2Moc2l6ZW9mKCplcSksIEdGUF9LRVJORUwpOwogCWlmICghZXEpIHsKLQkJZWhlYV9lcnJvcigibm8gbWVtIGZvciBlcSIpOworCQlwcl9lcnIoIm5vIG1lbSBmb3IgZXFcbiIpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKQEAgLTI3MiwyMSArMjczLDIxIEBACiAJaHJldCA9IGVoZWFfaF9hbGxvY19yZXNvdXJjZV9lcShhZGFwdGVyLT5oYW5kbGUsCiAJCQkJCSZlcS0+YXR0ciwgJmVxLT5md19oYW5kbGUpOwogCWlmIChocmV0ICE9IEhfU1VDQ0VTUykgewotCQllaGVhX2Vycm9yKCJhbGxvY19yZXNvdXJjZV9lcSBmYWlsZWQiKTsKKwkJcHJfZXJyKCJhbGxvY19yZXNvdXJjZV9lcSBmYWlsZWRcbiIpOwogCQlnb3RvIG91dF9mcmVlbWVtOwogCX0KIAogCXJldCA9IGh3X3F1ZXVlX2N0b3IoJmVxLT5od19xdWV1ZSwgZXEtPmF0dHIubnJfcGFnZXMsCiAJCQkgICAgRUhFQV9QQUdFU0laRSwgc2l6ZW9mKHN0cnVjdCBlaGVhX2VxZSkpOwogCWlmIChyZXQpIHsKLQkJZWhlYV9lcnJvcigiY2FuJ3QgYWxsb2NhdGUgZXEgcGFnZXMiKTsKKwkJcHJfZXJyKCJjYW4ndCBhbGxvY2F0ZSBlcSBwYWdlc1xuIik7CiAJCWdvdG8gb3V0X2ZyZWVyZXM7CiAJfQogCiAJZm9yIChpID0gMDsgaSA8IGVxLT5hdHRyLm5yX3BhZ2VzOyBpKyspIHsKIAkJdnBhZ2UgPSBod19xcGFnZWl0X2dldF9pbmMoJmVxLT5od19xdWV1ZSk7CiAJCWlmICghdnBhZ2UpIHsKLQkJCWVoZWFfZXJyb3IoImh3X3FwYWdlaXRfZ2V0X2luYyBmYWlsZWQiKTsKKwkJCXByX2VycigiaHdfcXBhZ2VpdF9nZXRfaW5jIGZhaWxlZFxuIik7CiAJCQlocmV0ID0gSF9SRVNPVVJDRTsKIAkJCWdvdG8gb3V0X2tpbGxfaHdxOwogCQl9CkBAIC0zNzAsNyArMzcxLDcgQEAKIAl9CiAKIAlpZiAoaHJldCAhPSBIX1NVQ0NFU1MpIHsKLQkJZWhlYV9lcnJvcigiZGVzdHJveSBFUSBmYWlsZWQiKTsKKwkJcHJfZXJyKCJkZXN0cm95IEVRIGZhaWxlZFxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtMzk1LDcgKzM5Niw3IEBACiAJZm9yIChjbnQgPSAwOyBjbnQgPCBucl9wYWdlczsgY250KyspIHsKIAkJdnBhZ2UgPSBod19xcGFnZWl0X2dldF9pbmMoaHdfcXVldWUpOwogCQlpZiAoIXZwYWdlKSB7Ci0JCQllaGVhX2Vycm9yKCJod19xcGFnZWl0X2dldF9pbmMgZmFpbGVkIik7CisJCQlwcl9lcnIoImh3X3FwYWdlaXRfZ2V0X2luYyBmYWlsZWRcbiIpOwogCQkJZ290byBvdXRfa2lsbF9od3E7CiAJCX0KIAkJcnBhZ2UgPSB2aXJ0X3RvX2Ficyh2cGFnZSk7CkBAIC00MDMsNyArNDA0LDcgQEAKIAkJCQkJICAgICAwLCBoX2NhbGxfcV9zZWxlY3RvciwKIAkJCQkJICAgICBxcC0+ZndfaGFuZGxlLCBycGFnZSwgMSk7CiAJCWlmIChocmV0IDwgSF9TVUNDRVNTKSB7Ci0JCQllaGVhX2Vycm9yKCJyZWdpc3Rlcl9ycGFnZV9xcCBmYWlsZWQiKTsKKwkJCXByX2VycigicmVnaXN0ZXJfcnBhZ2VfcXAgZmFpbGVkXG4iKTsKIAkJCWdvdG8gb3V0X2tpbGxfaHdxOwogCQl9CiAJfQpAQCAtNDMyLDcgKzQzMyw3IEBACiAKIAlxcCA9IGt6YWxsb2Moc2l6ZW9mKCpxcCksIEdGUF9LRVJORUwpOwogCWlmICghcXApIHsKLQkJZWhlYV9lcnJvcigibm8gbWVtIGZvciBxcCIpOworCQlwcl9lcnIoIm5vIG1lbSBmb3IgcXBcbiIpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKQEAgLTQ0MSw3ICs0NDIsNyBAQAogCWhyZXQgPSBlaGVhX2hfYWxsb2NfcmVzb3VyY2VfcXAoYWRhcHRlci0+aGFuZGxlLCBpbml0X2F0dHIsIHBkLAogCQkJCQkmcXAtPmZ3X2hhbmRsZSwgJnFwLT5lcGFzKTsKIAlpZiAoaHJldCAhPSBIX1NVQ0NFU1MpIHsKLQkJZWhlYV9lcnJvcigiZWhlYV9oX2FsbG9jX3Jlc291cmNlX3FwIGZhaWxlZCIpOworCQlwcl9lcnIoImVoZWFfaF9hbGxvY19yZXNvdXJjZV9xcCBmYWlsZWRcbiIpOwogCQlnb3RvIG91dF9mcmVlbWVtOwogCX0KIApAQCAtNDU1LDcgKzQ1Niw3IEBACiAJCQkJICAgICBpbml0X2F0dHItPmFjdF93cWVfc2l6ZV9lbmNfc3EsIGFkYXB0ZXIsCiAJCQkJICAgICAwKTsKIAlpZiAocmV0KSB7Ci0JCWVoZWFfZXJyb3IoImNhbid0IHJlZ2lzdGVyIGZvciBzcSByZXQ9JXgiLCByZXQpOworCQlwcl9lcnIoImNhbid0IHJlZ2lzdGVyIGZvciBzcSByZXQ9JXhcbiIsIHJldCk7CiAJCWdvdG8gb3V0X2ZyZWVyZXM7CiAJfQogCkBAIC00NjUsNyArNDY2LDcgQEAKIAkJCQkgICAgIGluaXRfYXR0ci0+YWN0X3dxZV9zaXplX2VuY19ycTEsCiAJCQkJICAgICBhZGFwdGVyLCAxKTsKIAlpZiAocmV0KSB7Ci0JCWVoZWFfZXJyb3IoImNhbid0IHJlZ2lzdGVyIGZvciBycTEgcmV0PSV4IiwgcmV0KTsKKwkJcHJfZXJyKCJjYW4ndCByZWdpc3RlciBmb3IgcnExIHJldD0leFxuIiwgcmV0KTsKIAkJZ290byBvdXRfa2lsbF9od3NxOwogCX0KIApAQCAtNDc2LDcgKzQ3Nyw3IEBACiAJCQkJCSAgICAgaW5pdF9hdHRyLT5hY3Rfd3FlX3NpemVfZW5jX3JxMiwKIAkJCQkJICAgICBhZGFwdGVyLCAyKTsKIAkJaWYgKHJldCkgewotCQkJZWhlYV9lcnJvcigiY2FuJ3QgcmVnaXN0ZXIgZm9yIHJxMiByZXQ9JXgiLCByZXQpOworCQkJcHJfZXJyKCJjYW4ndCByZWdpc3RlciBmb3IgcnEyIHJldD0leFxuIiwgcmV0KTsKIAkJCWdvdG8gb3V0X2tpbGxfaHdyMXE7CiAJCX0KIAl9CkBAIC00ODgsNyArNDg5LDcgQEAKIAkJCQkJICAgICBpbml0X2F0dHItPmFjdF93cWVfc2l6ZV9lbmNfcnEzLAogCQkJCQkgICAgIGFkYXB0ZXIsIDMpOwogCQlpZiAocmV0KSB7Ci0JCQllaGVhX2Vycm9yKCJjYW4ndCByZWdpc3RlciBmb3IgcnEzIHJldD0leCIsIHJldCk7CisJCQlwcl9lcnIoImNhbid0IHJlZ2lzdGVyIGZvciBycTMgcmV0PSV4XG4iLCByZXQpOwogCQkJZ290byBvdXRfa2lsbF9od3IycTsKIAkJfQogCX0KQEAgLTU1Myw3ICs1NTQsNyBAQAogCX0KIAogCWlmIChocmV0ICE9IEhfU1VDQ0VTUykgewotCQllaGVhX2Vycm9yKCJkZXN0cm95IFFQIGZhaWxlZCIpOworCQlwcl9lcnIoImRlc3Ryb3kgUVAgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC04NDIsNyArODQzLDcgQEAKIAkJICAgIChocmV0ICE9IEhfUEFHRV9SRUdJU1RFUkVEKSkgewogCQkJZWhlYV9oX2ZyZWVfcmVzb3VyY2UoYWRhcHRlci0+aGFuZGxlLCBtci0+aGFuZGxlLAogCQkJCQkgICAgIEZPUkNFX0ZSRUUpOwotCQkJZWhlYV9lcnJvcigicmVnaXN0ZXJfcnBhZ2VfbXIgZmFpbGVkIik7CisJCQlwcl9lcnIoInJlZ2lzdGVyX3JwYWdlX21yIGZhaWxlZFxuIik7CiAJCQlyZXR1cm4gaHJldDsKIAkJfQogCX0KQEAgLTg5Niw3ICs4OTcsNyBAQAogCiAJcHQgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKIAlpZiAoIXB0KSB7Ci0JCWVoZWFfZXJyb3IoIm5vIG1lbSIpOworCQlwcl9lcnIoIm5vIG1lbVxuIik7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwogCX0KQEAgLTkwNiwxNCArOTA3LDE0IEBACiAJCQkJCSZtci0+aGFuZGxlLCAmbXItPmxrZXkpOwogCiAJaWYgKGhyZXQgIT0gSF9TVUNDRVNTKSB7Ci0JCWVoZWFfZXJyb3IoImFsbG9jX3Jlc291cmNlX21yIGZhaWxlZCIpOworCQlwcl9lcnIoImFsbG9jX3Jlc291cmNlX21yIGZhaWxlZFxuIik7CiAJCXJldCA9IC1FSU87CiAJCWdvdG8gb3V0OwogCX0KIAogCWlmICghZWhlYV9ibWFwKSB7CiAJCWVoZWFfaF9mcmVlX3Jlc291cmNlKGFkYXB0ZXItPmhhbmRsZSwgbXItPmhhbmRsZSwgRk9SQ0VfRlJFRSk7Ci0JCWVoZWFfZXJyb3IoIm5vIGJ1c21hcCBhdmFpbGFibGUiKTsKKwkJcHJfZXJyKCJubyBidXNtYXAgYXZhaWxhYmxlXG4iKTsKIAkJcmV0ID0gLUVJTzsKIAkJZ290byBvdXQ7CiAJfQpAQCAtOTI5LDcgKzkzMCw3IEBACiAKIAlpZiAoaHJldCAhPSBIX1NVQ0NFU1MpIHsKIAkJZWhlYV9oX2ZyZWVfcmVzb3VyY2UoYWRhcHRlci0+aGFuZGxlLCBtci0+aGFuZGxlLCBGT1JDRV9GUkVFKTsKLQkJZWhlYV9lcnJvcigicmVnaXN0ZXJpbmcgbXIgZmFpbGVkIik7CisJCXByX2VycigicmVnaXN0ZXJpbmcgbXIgZmFpbGVkXG4iKTsKIAkJcmV0ID0gLUVJTzsKIAkJZ290byBvdXQ7CiAJfQpAQCAtOTUyLDcgKzk1Myw3IEBACiAJaHJldCA9IGVoZWFfaF9mcmVlX3Jlc291cmNlKG1yLT5hZGFwdGVyLT5oYW5kbGUsIG1yLT5oYW5kbGUsCiAJCQkJICAgIEZPUkNFX0ZSRUUpOwogCWlmIChocmV0ICE9IEhfU1VDQ0VTUykgewotCQllaGVhX2Vycm9yKCJkZXN0cm95IE1SIGZhaWxlZCIpOworCQlwcl9lcnIoImRlc3Ryb3kgTVIgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC05ODcsMTQgKzk4OCwxNCBAQAogCQlsZW5ndGggPSBFSEVBX1BBR0VTSVpFOwogCiAJaWYgKHR5cGUgPT0gRUhFQV9BRVJfUkVTVFlQRV9RUCkKLQkJZWhlYV9lcnJvcigiUVAgKHJlc291cmNlPSVsbFgpIHN0YXRlOiBBRVI9MHglbGxYLCBBRVJSPTB4JWxsWCwgIgotCQkJICAgInBvcnQ9JWxsWCIsIHJlc291cmNlLCBkYXRhWzZdLCBkYXRhWzEyXSwgZGF0YVsyMl0pOworCQlwcl9lcnIoIlFQIChyZXNvdXJjZT0lbGxYKSBzdGF0ZTogQUVSPTB4JWxsWCwgQUVSUj0weCVsbFgsIHBvcnQ9JWxsWFxuIiwKKwkJICAgICAgIHJlc291cmNlLCBkYXRhWzZdLCBkYXRhWzEyXSwgZGF0YVsyMl0pOwogCWVsc2UgaWYgKHR5cGUgPT0gRUhFQV9BRVJfUkVTVFlQRV9DUSkKLQkJZWhlYV9lcnJvcigiQ1EgKHJlc291cmNlPSVsbFgpIHN0YXRlOiBBRVI9MHglbGxYIiwgcmVzb3VyY2UsCi0JCQkgICBkYXRhWzZdKTsKKwkJcHJfZXJyKCJDUSAocmVzb3VyY2U9JWxsWCkgc3RhdGU6IEFFUj0weCVsbFhcbiIsCisJCSAgICAgICByZXNvdXJjZSwgZGF0YVs2XSk7CiAJZWxzZSBpZiAodHlwZSA9PSBFSEVBX0FFUl9SRVNUWVBFX0VRKQotCQllaGVhX2Vycm9yKCJFUSAocmVzb3VyY2U9JWxsWCkgc3RhdGU6IEFFUj0weCVsbFgiLCByZXNvdXJjZSwKLQkJCSAgIGRhdGFbNl0pOworCQlwcl9lcnIoIkVRIChyZXNvdXJjZT0lbGxYKSBzdGF0ZTogQUVSPTB4JWxsWFxuIiwKKwkJICAgICAgIHJlc291cmNlLCBkYXRhWzZdKTsKIAogCWVoZWFfZHVtcChkYXRhLCBsZW5ndGgsICJlcnJvciBkYXRhIik7CiB9CkBAIC0xMDA4LDcgKzEwMDksNyBAQAogCiAJcmJsb2NrID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJaWYgKCFyYmxvY2spIHsKLQkJZWhlYV9lcnJvcigiQ2Fubm90IGFsbG9jYXRlIHJibG9jayBtZW1vcnkuIik7CisJCXByX2VycigiQ2Fubm90IGFsbG9jYXRlIHJibG9jayBtZW1vcnlcbiIpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTEwMjAsOSArMTAyMSw5IEBACiAJCSphZXJyID0gcmJsb2NrWzEyXTsKIAkJcHJpbnRfZXJyb3JfZGF0YShyYmxvY2spOwogCX0gZWxzZSBpZiAocmV0ID09IEhfUl9TVEFURSkgewotCQllaGVhX2Vycm9yKCJObyBlcnJvciBkYXRhIGF2YWlsYWJsZTogJWxsWC4iLCByZXNfaGFuZGxlKTsKKwkJcHJfZXJyKCJObyBlcnJvciBkYXRhIGF2YWlsYWJsZTogJWxsWFxuIiwgcmVzX2hhbmRsZSk7CiAJfSBlbHNlCi0JCWVoZWFfZXJyb3IoIkVycm9yIGRhdGEgY291bGQgbm90IGJlIGZldGNoZWQ6ICVsbFgiLCByZXNfaGFuZGxlKTsKKwkJcHJfZXJyKCJFcnJvciBkYXRhIGNvdWxkIG5vdCBiZSBmZXRjaGVkOiAlbGxYXG4iLCByZXNfaGFuZGxlKTsKIAogCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylyYmxvY2spOwogb3V0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZW5pYy9lbmljLmggYi9kcml2ZXJzL25ldC9lbmljL2VuaWMuaAppbmRleCBjOTFkMzY0Li5hOTM3ZjQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lbmljL2VuaWMuaAorKysgYi9kcml2ZXJzL25ldC9lbmljL2VuaWMuaApAQCAtMzIsNyArMzIsNyBAQAogCiAjZGVmaW5lIERSVl9OQU1FCQkiZW5pYyIKICNkZWZpbmUgRFJWX0RFU0NSSVBUSU9OCQkiQ2lzY28gVklDIEV0aGVybmV0IE5JQyBEcml2ZXIiCi0jZGVmaW5lIERSVl9WRVJTSU9OCQkiMS40LjEuNiIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JCSIxLjQuMS4xMCIKICNkZWZpbmUgRFJWX0NPUFlSSUdIVAkJIkNvcHlyaWdodCAyMDA4LTIwMTAgQ2lzY28gU3lzdGVtcywgSW5jIgogCiAjZGVmaW5lIEVOSUNfQkFSU19NQVgJCTYKQEAgLTYxLDYgKzYxLDggQEAKIAljaGFyIG5hbWVbUE9SVF9QUk9GSUxFX01BWF07CiAJdTggaW5zdGFuY2VfdXVpZFtQT1JUX1VVSURfTUFYXTsKIAl1OCBob3N0X3V1aWRbUE9SVF9VVUlEX01BWF07CisJdTggdmZfbWFjW0VUSF9BTEVOXTsKKwl1OCBtYWNfYWRkcltFVEhfQUxFTl07CiB9OwogCiAvKiBQZXItaW5zdGFuY2UgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZSAqLwpAQCAtNzgsOCArODAsMTAgQEAKIAlzcGlubG9ja190IGRldmNtZF9sb2NrOwogCXU4IG1hY19hZGRyW0VUSF9BTEVOXTsKIAl1OCBtY19hZGRyW0VOSUNfTVVMVElDQVNUX1BFUkZFQ1RfRklMVEVSU11bRVRIX0FMRU5dOworCXU4IHVjX2FkZHJbRU5JQ19VTklDQVNUX1BFUkZFQ1RfRklMVEVSU11bRVRIX0FMRU5dOwogCXVuc2lnbmVkIGludCBmbGFnczsKIAl1bnNpZ25lZCBpbnQgbWNfY291bnQ7CisJdW5zaWduZWQgaW50IHVjX2NvdW50OwogCWludCBjc3VtX3J4X2VuYWJsZWQ7CiAJdTMyIHBvcnRfbXR1OwogCXUzMiByeF9jb2FsZXNjZV91c2VjczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VuaWMvZW5pY19tYWluLmMgYi9kcml2ZXJzL25ldC9lbmljL2VuaWNfbWFpbi5jCmluZGV4IGFhMjhiMjcuLmEwYWY0OGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VuaWMvZW5pY19tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvZW5pYy9lbmljX21haW4uYwpAQCAtNzAyLDcgKzcwMiw3IEBACiB7CiAJdW5zaWduZWQgaW50IGhlYWRfbGVuID0gc2tiX2hlYWRsZW4oc2tiKTsKIAl1bnNpZ25lZCBpbnQgbGVuX2xlZnQgPSBza2ItPmxlbiAtIGhlYWRfbGVuOwotCXVuc2lnbmVkIGludCBoZHJfbGVuID0gc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKTsKKwl1bnNpZ25lZCBpbnQgaGRyX2xlbiA9IHNrYl9jaGVja3N1bV9zdGFydF9vZmZzZXQoc2tiKTsKIAl1bnNpZ25lZCBpbnQgY3N1bV9vZmZzZXQgPSBoZHJfbGVuICsgc2tiLT5jc3VtX29mZnNldDsKIAlpbnQgZW9wID0gKGxlbl9sZWZ0ID09IDApOwogCkBAIC0xMDAyLDcgKzEwMDIsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgZW5pY19kZXZfYWRkX211bHRpY2FzdF9hZGRyKHN0cnVjdCBlbmljICplbmljLCB1OCAqYWRkcikKK3N0YXRpYyBpbnQgZW5pY19kZXZfYWRkX2FkZHIoc3RydWN0IGVuaWMgKmVuaWMsIHU4ICphZGRyKQogewogCWludCBlcnI7CiAKQEAgLTEwMTMsNyArMTAxMyw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBlbmljX2Rldl9kZWxfbXVsdGljYXN0X2FkZHIoc3RydWN0IGVuaWMgKmVuaWMsIHU4ICphZGRyKQorc3RhdGljIGludCBlbmljX2Rldl9kZWxfYWRkcihzdHJ1Y3QgZW5pYyAqZW5pYywgdTggKmFkZHIpCiB7CiAJaW50IGVycjsKIApAQCAtMTAyNCwyOSArMTAyNCwxOSBAQAogCXJldHVybiBlcnI7CiB9CiAKLS8qIG5ldGlmX3R4X2xvY2sgaGVsZCwgQkhzIGRpc2FibGVkICovCi1zdGF0aWMgdm9pZCBlbmljX3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQorc3RhdGljIHZvaWQgZW5pY19hZGRfbXVsdGljYXN0X2FkZHJfbGlzdChzdHJ1Y3QgZW5pYyAqZW5pYykKIHsKLQlzdHJ1Y3QgZW5pYyAqZW5pYyA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGVuaWMtPm5ldGRldjsKIAlzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhOwotCWludCBkaXJlY3RlZCA9IDE7Ci0JaW50IG11bHRpY2FzdCA9IChuZXRkZXYtPmZsYWdzICYgSUZGX01VTFRJQ0FTVCkgPyAxIDogMDsKLQlpbnQgYnJvYWRjYXN0ID0gKG5ldGRldi0+ZmxhZ3MgJiBJRkZfQlJPQURDQVNUKSA/IDEgOiAwOwotCWludCBwcm9taXNjID0gKG5ldGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgPyAxIDogMDsKIAl1bnNpZ25lZCBpbnQgbWNfY291bnQgPSBuZXRkZXZfbWNfY291bnQobmV0ZGV2KTsKLQlpbnQgYWxsbXVsdGkgPSAobmV0ZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgfHwKLQkJbWNfY291bnQgPiBFTklDX01VTFRJQ0FTVF9QRVJGRUNUX0ZJTFRFUlM7Ci0JdW5zaWduZWQgaW50IGZsYWdzID0gbmV0ZGV2LT5mbGFncyB8IChhbGxtdWx0aSA/IElGRl9BTExNVUxUSSA6IDApOwogCXU4IG1jX2FkZHJbRU5JQ19NVUxUSUNBU1RfUEVSRkVDVF9GSUxURVJTXVtFVEhfQUxFTl07CiAJdW5zaWduZWQgaW50IGksIGo7CiAKLQlpZiAobWNfY291bnQgPiBFTklDX01VTFRJQ0FTVF9QRVJGRUNUX0ZJTFRFUlMpCisJaWYgKG1jX2NvdW50ID4gRU5JQ19NVUxUSUNBU1RfUEVSRkVDVF9GSUxURVJTKSB7CisJCW5ldGRldl93YXJuKG5ldGRldiwgIlJlZ2lzdGVyaW5nIG9ubHkgJWQgb3V0IG9mICVkICIKKwkJCSJtdWx0aWNhc3QgYWRkcmVzc2VzXG4iLAorCQkJRU5JQ19NVUxUSUNBU1RfUEVSRkVDVF9GSUxURVJTLCBtY19jb3VudCk7CiAJCW1jX2NvdW50ID0gRU5JQ19NVUxUSUNBU1RfUEVSRkVDVF9GSUxURVJTOwotCi0JaWYgKGVuaWMtPmZsYWdzICE9IGZsYWdzKSB7Ci0JCWVuaWMtPmZsYWdzID0gZmxhZ3M7Ci0JCWVuaWNfZGV2X3BhY2tldF9maWx0ZXIoZW5pYywgZGlyZWN0ZWQsCi0JCQltdWx0aWNhc3QsIGJyb2FkY2FzdCwgcHJvbWlzYywgYWxsbXVsdGkpOwogCX0KIAogCS8qIElzIHRoZXJlIGFuIGVhc2llciB3YXk/ICBUcnlpbmcgdG8gbWluaW1pemUgdG8KQEAgLTEwNjgsNyArMTA1OCw3IEBACiAJCQkJbWNfYWRkcltqXSkgPT0gMCkKIAkJCQlicmVhazsKIAkJaWYgKGogPT0gbWNfY291bnQpCi0JCQllbmljX2Rldl9kZWxfbXVsdGljYXN0X2FkZHIoZW5pYywgZW5pYy0+bWNfYWRkcltpXSk7CisJCQllbmljX2Rldl9kZWxfYWRkcihlbmljLCBlbmljLT5tY19hZGRyW2ldKTsKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgbWNfY291bnQ7IGkrKykgewpAQCAtMTA3Nyw3ICsxMDY3LDcgQEAKIAkJCQllbmljLT5tY19hZGRyW2pdKSA9PSAwKQogCQkJCWJyZWFrOwogCQlpZiAoaiA9PSBlbmljLT5tY19jb3VudCkKLQkJCWVuaWNfZGV2X2FkZF9tdWx0aWNhc3RfYWRkcihlbmljLCBtY19hZGRyW2ldKTsKKwkJCWVuaWNfZGV2X2FkZF9hZGRyKGVuaWMsIG1jX2FkZHJbaV0pOwogCX0KIAogCS8qIFNhdmUgdGhlIGxpc3QgdG8gY29tcGFyZSBhZ2FpbnN0IG5leHQgdGltZQpAQCAtMTA4OSw2ICsxMDc5LDg5IEBACiAJZW5pYy0+bWNfY291bnQgPSBtY19jb3VudDsKIH0KIAorc3RhdGljIHZvaWQgZW5pY19hZGRfdW5pY2FzdF9hZGRyX2xpc3Qoc3RydWN0IGVuaWMgKmVuaWMpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGVuaWMtPm5ldGRldjsKKwlzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhOworCXVuc2lnbmVkIGludCB1Y19jb3VudCA9IG5ldGRldl91Y19jb3VudChuZXRkZXYpOworCXU4IHVjX2FkZHJbRU5JQ19VTklDQVNUX1BFUkZFQ1RfRklMVEVSU11bRVRIX0FMRU5dOworCXVuc2lnbmVkIGludCBpLCBqOworCisJaWYgKHVjX2NvdW50ID4gRU5JQ19VTklDQVNUX1BFUkZFQ1RfRklMVEVSUykgeworCQluZXRkZXZfd2FybihuZXRkZXYsICJSZWdpc3RlcmluZyBvbmx5ICVkIG91dCBvZiAlZCAiCisJCQkidW5pY2FzdCBhZGRyZXNzZXNcbiIsCisJCQlFTklDX1VOSUNBU1RfUEVSRkVDVF9GSUxURVJTLCB1Y19jb3VudCk7CisJCXVjX2NvdW50ID0gRU5JQ19VTklDQVNUX1BFUkZFQ1RfRklMVEVSUzsKKwl9CisKKwkvKiBJcyB0aGVyZSBhbiBlYXNpZXIgd2F5PyAgVHJ5aW5nIHRvIG1pbmltaXplIHRvCisJICogY2FsbHMgdG8gYWRkL2RlbCB1bmljYXN0IGFkZHJzLiAgV2Uga2VlcCB0aGUKKwkgKiBhZGRycyBmcm9tIHRoZSBsYXN0IGNhbGwgaW4gZW5pYy0+dWNfYWRkciBhbmQKKwkgKiBsb29rIGZvciBjaGFuZ2VzIHRvIGFkZC9kZWwuCisJICovCisKKwlpID0gMDsKKwluZXRkZXZfZm9yX2VhY2hfdWNfYWRkcihoYSwgbmV0ZGV2KSB7CisJCWlmIChpID09IHVjX2NvdW50KQorCQkJYnJlYWs7CisJCW1lbWNweSh1Y19hZGRyW2krK10sIGhhLT5hZGRyLCBFVEhfQUxFTik7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGVuaWMtPnVjX2NvdW50OyBpKyspIHsKKwkJZm9yIChqID0gMDsgaiA8IHVjX2NvdW50OyBqKyspCisJCQlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKGVuaWMtPnVjX2FkZHJbaV0sCisJCQkJdWNfYWRkcltqXSkgPT0gMCkKKwkJCQlicmVhazsKKwkJaWYgKGogPT0gdWNfY291bnQpCisJCQllbmljX2Rldl9kZWxfYWRkcihlbmljLCBlbmljLT51Y19hZGRyW2ldKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgdWNfY291bnQ7IGkrKykgeworCQlmb3IgKGogPSAwOyBqIDwgZW5pYy0+dWNfY291bnQ7IGorKykKKwkJCWlmIChjb21wYXJlX2V0aGVyX2FkZHIodWNfYWRkcltpXSwKKwkJCQllbmljLT51Y19hZGRyW2pdKSA9PSAwKQorCQkJCWJyZWFrOworCQlpZiAoaiA9PSBlbmljLT51Y19jb3VudCkKKwkJCWVuaWNfZGV2X2FkZF9hZGRyKGVuaWMsIHVjX2FkZHJbaV0pOworCX0KKworCS8qIFNhdmUgdGhlIGxpc3QgdG8gY29tcGFyZSBhZ2FpbnN0IG5leHQgdGltZQorCSAqLworCisJZm9yIChpID0gMDsgaSA8IHVjX2NvdW50OyBpKyspCisJCW1lbWNweShlbmljLT51Y19hZGRyW2ldLCB1Y19hZGRyW2ldLCBFVEhfQUxFTik7CisKKwllbmljLT51Y19jb3VudCA9IHVjX2NvdW50OworfQorCisvKiBuZXRpZl90eF9sb2NrIGhlbGQsIEJIcyBkaXNhYmxlZCAqLworc3RhdGljIHZvaWQgZW5pY19zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBlbmljICplbmljID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlpbnQgZGlyZWN0ZWQgPSAxOworCWludCBtdWx0aWNhc3QgPSAobmV0ZGV2LT5mbGFncyAmIElGRl9NVUxUSUNBU1QpID8gMSA6IDA7CisJaW50IGJyb2FkY2FzdCA9IChuZXRkZXYtPmZsYWdzICYgSUZGX0JST0FEQ0FTVCkgPyAxIDogMDsKKwlpbnQgcHJvbWlzYyA9IChuZXRkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHx8CisJCW5ldGRldl91Y19jb3VudChuZXRkZXYpID4gRU5JQ19VTklDQVNUX1BFUkZFQ1RfRklMVEVSUzsKKwlpbnQgYWxsbXVsdGkgPSAobmV0ZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgfHwKKwkJbmV0ZGV2X21jX2NvdW50KG5ldGRldikgPiBFTklDX01VTFRJQ0FTVF9QRVJGRUNUX0ZJTFRFUlM7CisJdW5zaWduZWQgaW50IGZsYWdzID0gbmV0ZGV2LT5mbGFncyB8CisJCShhbGxtdWx0aSA/IElGRl9BTExNVUxUSSA6IDApIHwKKwkJKHByb21pc2MgPyBJRkZfUFJPTUlTQyA6IDApOworCisJaWYgKGVuaWMtPmZsYWdzICE9IGZsYWdzKSB7CisJCWVuaWMtPmZsYWdzID0gZmxhZ3M7CisJCWVuaWNfZGV2X3BhY2tldF9maWx0ZXIoZW5pYywgZGlyZWN0ZWQsCisJCQltdWx0aWNhc3QsIGJyb2FkY2FzdCwgcHJvbWlzYywgYWxsbXVsdGkpOworCX0KKworCWlmICghcHJvbWlzYykgeworCQllbmljX2FkZF91bmljYXN0X2FkZHJfbGlzdChlbmljKTsKKwkJaWYgKCFhbGxtdWx0aSkKKwkJCWVuaWNfYWRkX211bHRpY2FzdF9hZGRyX2xpc3QoZW5pYyk7CisJfQorfQorCiAvKiBydG5sIGxvY2sgaXMgaGVsZCAqLwogc3RhdGljIHZvaWQgZW5pY192bGFuX3J4X3JlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJc3RydWN0IHZsYW5fZ3JvdXAgKnZsYW5fZ3JvdXApCkBAIC0xMTU4LDExICsxMjMxLDMxIEBACiAJcmV0dXJuIGVycjsKIH0KIAorc3RhdGljIGludCBlbmljX3NldF92Zl9tYWMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHZmLCB1OCAqbWFjKQoreworCXN0cnVjdCBlbmljICplbmljID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCWlmICh2ZiAhPSBQT1JUX1NFTEZfVkYpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCS8qIElnbm9yZSB0aGUgdmYgYXJndW1lbnQgZm9yIG5vdy4gV2UgY2FuIGFzc3VtZSB0aGUgcmVxdWVzdAorCSAqIGlzIGNvbWluZyBvbiBhIHZmLgorCSAqLworCWlmIChpc192YWxpZF9ldGhlcl9hZGRyKG1hYykpIHsKKwkJbWVtY3B5KGVuaWMtPnBwLnZmX21hYywgbWFjLCBFVEhfQUxFTik7CisJCXJldHVybiAwOworCX0gZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKK30KKwogc3RhdGljIGludCBlbmljX3NldF9wb3J0X3Byb2ZpbGUoc3RydWN0IGVuaWMgKmVuaWMsIHU4ICptYWMpCiB7CiAJc3RydWN0IHZpY19wcm92aW5mbyAqdnA7CiAJdTggb3VpWzNdID0gVklDX1BST1ZJTkZPX0NJU0NPX09VSTsKKwl1MTYgb3NfdHlwZSA9IFZJQ19HRU5FUklDX1BST1ZfT1NfVFlQRV9MSU5VWDsKIAljaGFyIHV1aWRfc3RyWzM4XTsKKwljaGFyIGNsaWVudF9tYWNfc3RyWzE4XTsKKwl1OCAqY2xpZW50X21hYzsKIAlpbnQgZXJyOwogCiAJZXJyID0gZW5pY192bmljX2Rldl9kZWluaXQoZW5pYyk7CkBAIC0xMTgwLDQ2ICsxMjczLDYzIEBACiAJCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CiAKIAkJdnAgPSB2aWNfcHJvdmluZm9fYWxsb2MoR0ZQX0tFUk5FTCwgb3VpLAotCQkJVklDX1BST1ZJTkZPX0xJTlVYX1RZUEUpOworCQkJVklDX1BST1ZJTkZPX0dFTkVSSUNfVFlQRSk7CiAJCWlmICghdnApCiAJCQlyZXR1cm4gLUVOT01FTTsKIAogCQl2aWNfcHJvdmluZm9fYWRkX3Rsdih2cCwKLQkJCVZJQ19MSU5VWF9QUk9WX1RMVl9QT1JUX1BST0ZJTEVfTkFNRV9TVFIsCisJCQlWSUNfR0VORVJJQ19QUk9WX1RMVl9QT1JUX1BST0ZJTEVfTkFNRV9TVFIsCiAJCQlzdHJsZW4oZW5pYy0+cHAubmFtZSkgKyAxLCBlbmljLT5wcC5uYW1lKTsKIAorCQlpZiAoIWlzX3plcm9fZXRoZXJfYWRkcihlbmljLT5wcC5tYWNfYWRkcikpCisJCQljbGllbnRfbWFjID0gZW5pYy0+cHAubWFjX2FkZHI7CisJCWVsc2UKKwkJCWNsaWVudF9tYWMgPSBtYWM7CisKIAkJdmljX3Byb3ZpbmZvX2FkZF90bHYodnAsCi0JCQlWSUNfTElOVVhfUFJPVl9UTFZfQ0xJRU5UX01BQ19BRERSLAotCQkJRVRIX0FMRU4sIG1hYyk7CisJCQlWSUNfR0VORVJJQ19QUk9WX1RMVl9DTElFTlRfTUFDX0FERFIsCisJCQlFVEhfQUxFTiwgY2xpZW50X21hYyk7CisKKwkJc3ByaW50ZihjbGllbnRfbWFjX3N0ciwgIiVwTSIsIGNsaWVudF9tYWMpOworCQl2aWNfcHJvdmluZm9fYWRkX3Rsdih2cCwKKwkJCVZJQ19HRU5FUklDX1BST1ZfVExWX0NMVVNURVJfUE9SVF9VVUlEX1NUUiwKKwkJCXNpemVvZihjbGllbnRfbWFjX3N0ciksIGNsaWVudF9tYWNfc3RyKTsKIAogCQlpZiAoZW5pYy0+cHAuc2V0ICYgRU5JQ19TRVRfSU5TVEFOQ0UpIHsKIAkJCXNwcmludGYodXVpZF9zdHIsICIlcFVCIiwgZW5pYy0+cHAuaW5zdGFuY2VfdXVpZCk7CiAJCQl2aWNfcHJvdmluZm9fYWRkX3Rsdih2cCwKLQkJCQlWSUNfTElOVVhfUFJPVl9UTFZfQ0xJRU5UX1VVSURfU1RSLAorCQkJCVZJQ19HRU5FUklDX1BST1ZfVExWX0NMSUVOVF9VVUlEX1NUUiwKIAkJCQlzaXplb2YodXVpZF9zdHIpLCB1dWlkX3N0cik7CiAJCX0KIAogCQlpZiAoZW5pYy0+cHAuc2V0ICYgRU5JQ19TRVRfSE9TVCkgewogCQkJc3ByaW50Zih1dWlkX3N0ciwgIiVwVUIiLCBlbmljLT5wcC5ob3N0X3V1aWQpOwogCQkJdmljX3Byb3ZpbmZvX2FkZF90bHYodnAsCi0JCQkJVklDX0xJTlVYX1BST1ZfVExWX0hPU1RfVVVJRF9TVFIsCisJCQkJVklDX0dFTkVSSUNfUFJPVl9UTFZfSE9TVF9VVUlEX1NUUiwKIAkJCQlzaXplb2YodXVpZF9zdHIpLCB1dWlkX3N0cik7CiAJCX0KIAorCQlvc190eXBlID0gaHRvbnMob3NfdHlwZSk7CisJCXZpY19wcm92aW5mb19hZGRfdGx2KHZwLAorCQkJVklDX0dFTkVSSUNfUFJPVl9UTFZfT1NfVFlQRSwKKwkJCXNpemVvZihvc190eXBlKSwgJm9zX3R5cGUpOworCiAJCWVyciA9IGVuaWNfZGV2X2luaXRfcHJvdihlbmljLCB2cCk7CiAJCXZpY19wcm92aW5mb19mcmVlKHZwKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CisKKwkJZW5pYy0+cHAuc2V0IHw9IEVOSUNfU0VUX0FQUExJRUQ7CiAJCWJyZWFrOwogCiAJY2FzZSBQT1JUX1JFUVVFU1RfRElTQVNTT0NJQVRFOgorCQllbmljLT5wcC5zZXQgJj0gfkVOSUNfU0VUX0FQUExJRUQ7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JZW5pYy0+cHAuc2V0IHw9IEVOSUNfU0VUX0FQUExJRUQ7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEyMjcsMjkgKzEzMzcsMzEgQEAKIAlzdHJ1Y3QgbmxhdHRyICpwb3J0W10pCiB7CiAJc3RydWN0IGVuaWMgKmVuaWMgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBlbmljX3BvcnRfcHJvZmlsZSBuZXdfcHA7CisJaW50IGVyciA9IDA7CiAKLQltZW1zZXQoJmVuaWMtPnBwLCAwLCBzaXplb2YoZW5pYy0+cHApKTsKKwltZW1zZXQoJm5ld19wcCwgMCwgc2l6ZW9mKG5ld19wcCkpOwogCiAJaWYgKHBvcnRbSUZMQV9QT1JUX1JFUVVFU1RdKSB7Ci0JCWVuaWMtPnBwLnNldCB8PSBFTklDX1NFVF9SRVFVRVNUOwotCQllbmljLT5wcC5yZXF1ZXN0ID0gbmxhX2dldF91OChwb3J0W0lGTEFfUE9SVF9SRVFVRVNUXSk7CisJCW5ld19wcC5zZXQgfD0gRU5JQ19TRVRfUkVRVUVTVDsKKwkJbmV3X3BwLnJlcXVlc3QgPSBubGFfZ2V0X3U4KHBvcnRbSUZMQV9QT1JUX1JFUVVFU1RdKTsKIAl9CiAKIAlpZiAocG9ydFtJRkxBX1BPUlRfUFJPRklMRV0pIHsKLQkJZW5pYy0+cHAuc2V0IHw9IEVOSUNfU0VUX05BTUU7Ci0JCW1lbWNweShlbmljLT5wcC5uYW1lLCBubGFfZGF0YShwb3J0W0lGTEFfUE9SVF9QUk9GSUxFXSksCisJCW5ld19wcC5zZXQgfD0gRU5JQ19TRVRfTkFNRTsKKwkJbWVtY3B5KG5ld19wcC5uYW1lLCBubGFfZGF0YShwb3J0W0lGTEFfUE9SVF9QUk9GSUxFXSksCiAJCQlQT1JUX1BST0ZJTEVfTUFYKTsKIAl9CiAKIAlpZiAocG9ydFtJRkxBX1BPUlRfSU5TVEFOQ0VfVVVJRF0pIHsKLQkJZW5pYy0+cHAuc2V0IHw9IEVOSUNfU0VUX0lOU1RBTkNFOwotCQltZW1jcHkoZW5pYy0+cHAuaW5zdGFuY2VfdXVpZCwKKwkJbmV3X3BwLnNldCB8PSBFTklDX1NFVF9JTlNUQU5DRTsKKwkJbWVtY3B5KG5ld19wcC5pbnN0YW5jZV91dWlkLAogCQkJbmxhX2RhdGEocG9ydFtJRkxBX1BPUlRfSU5TVEFOQ0VfVVVJRF0pLCBQT1JUX1VVSURfTUFYKTsKIAl9CiAKIAlpZiAocG9ydFtJRkxBX1BPUlRfSE9TVF9VVUlEXSkgewotCQllbmljLT5wcC5zZXQgfD0gRU5JQ19TRVRfSE9TVDsKLQkJbWVtY3B5KGVuaWMtPnBwLmhvc3RfdXVpZCwKKwkJbmV3X3BwLnNldCB8PSBFTklDX1NFVF9IT1NUOworCQltZW1jcHkobmV3X3BwLmhvc3RfdXVpZCwKIAkJCW5sYV9kYXRhKHBvcnRbSUZMQV9QT1JUX0hPU1RfVVVJRF0pLCBQT1JUX1VVSURfTUFYKTsKIAl9CiAKQEAgLTEyNTcsMjEgKzEzNjksMzkgQEAKIAlpZiAodmYgIT0gUE9SVF9TRUxGX1ZGKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKLQlpZiAoIShlbmljLT5wcC5zZXQgJiBFTklDX1NFVF9SRVFVRVNUKSkKKwlpZiAoIShuZXdfcHAuc2V0ICYgRU5JQ19TRVRfUkVRVUVTVCkpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCWlmIChlbmljLT5wcC5yZXF1ZXN0ID09IFBPUlRfUkVRVUVTVF9BU1NPQ0lBVEUpIHsKLQotCQkvKiBJZiB0aGUgaW50ZXJmYWNlIG1hYyBhZGRyIGhhc24ndCBiZWVuIGFzc2lnbmVkLAotCQkgKiBhc3NpZ24gYSByYW5kb20gbWFjIGFkZHIgYmVmb3JlIHNldHRpbmcgcG9ydC0KLQkJICogcHJvZmlsZS4KLQkJICovCisJaWYgKG5ld19wcC5yZXF1ZXN0ID09IFBPUlRfUkVRVUVTVF9BU1NPQ0lBVEUpIHsKKwkJLyogU3BlY2lhbCBjYXNlIGhhbmRsaW5nICovCisJCWlmICghaXNfemVyb19ldGhlcl9hZGRyKGVuaWMtPnBwLnZmX21hYykpCisJCQltZW1jcHkobmV3X3BwLm1hY19hZGRyLCBlbmljLT5wcC52Zl9tYWMsIEVUSF9BTEVOKTsKIAogCQlpZiAoaXNfemVyb19ldGhlcl9hZGRyKG5ldGRldi0+ZGV2X2FkZHIpKQogCQkJcmFuZG9tX2V0aGVyX2FkZHIobmV0ZGV2LT5kZXZfYWRkcik7CisJfSBlbHNlIGlmIChuZXdfcHAucmVxdWVzdCA9PSBQT1JUX1JFUVVFU1RfRElTQVNTT0NJQVRFKSB7CisJCWlmICghaXNfemVyb19ldGhlcl9hZGRyKGVuaWMtPnBwLm1hY19hZGRyKSkKKwkJCWVuaWNfZGV2X2RlbF9hZGRyKGVuaWMsIGVuaWMtPnBwLm1hY19hZGRyKTsKIAl9CiAKLQlyZXR1cm4gZW5pY19zZXRfcG9ydF9wcm9maWxlKGVuaWMsIG5ldGRldi0+ZGV2X2FkZHIpOworCW1lbWNweSgmZW5pYy0+cHAsICZuZXdfcHAsIHNpemVvZihzdHJ1Y3QgZW5pY19wb3J0X3Byb2ZpbGUpKTsKKworCWVyciA9IGVuaWNfc2V0X3BvcnRfcHJvZmlsZShlbmljLCBuZXRkZXYtPmRldl9hZGRyKTsKKwlpZiAoZXJyKQorCQlnb3RvIHNldF9wb3J0X3Byb2ZpbGVfY2xlYW51cDsKKworCWlmICghaXNfemVyb19ldGhlcl9hZGRyKGVuaWMtPnBwLm1hY19hZGRyKSkKKwkJZW5pY19kZXZfYWRkX2FkZHIoZW5pYywgZW5pYy0+cHAubWFjX2FkZHIpOworCitzZXRfcG9ydF9wcm9maWxlX2NsZWFudXA6CisJbWVtc2V0KGVuaWMtPnBwLnZmX21hYywgMCwgRVRIX0FMRU4pOworCisJaWYgKGVyciB8fCBlbmljLT5wcC5yZXF1ZXN0ID09IFBPUlRfUkVRVUVTVF9ESVNBU1NPQ0lBVEUpIHsKKwkJbWVtc2V0KG5ldGRldi0+ZGV2X2FkZHIsIDAsIEVUSF9BTEVOKTsKKwkJbWVtc2V0KGVuaWMtPnBwLm1hY19hZGRyLCAwLCBFVEhfQUxFTik7CisJfQorCisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGludCBlbmljX2dldF92Zl9wb3J0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCB2ZiwKQEAgLTE4NTEsOCArMTk4MSwxMSBAQAogCWZvciAoaSA9IDA7IGkgPCBlbmljLT5ycV9jb3VudDsgaSsrKQogCQl2bmljX3JxX2VuYWJsZSgmZW5pYy0+cnFbaV0pOwogCi0JZW5pY19kZXZfYWRkX3N0YXRpb25fYWRkcihlbmljKTsKLQllbmljX3NldF9tdWx0aWNhc3RfbGlzdChuZXRkZXYpOworCWlmIChlbmljX2lzX2R5bmFtaWMoZW5pYykgJiYgIWlzX3plcm9fZXRoZXJfYWRkcihlbmljLT5wcC5tYWNfYWRkcikpCisJCWVuaWNfZGV2X2FkZF9hZGRyKGVuaWMsIGVuaWMtPnBwLm1hY19hZGRyKTsKKwllbHNlCisJCWVuaWNfZGV2X2FkZF9zdGF0aW9uX2FkZHIoZW5pYyk7CisJZW5pY19zZXRfcnhfbW9kZShuZXRkZXYpOwogCiAJbmV0aWZfd2FrZV9xdWV1ZShuZXRkZXYpOwogCkBAIC0xODk5LDcgKzIwMzIsMTAgQEAKIAogCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7CiAJbmV0aWZfdHhfZGlzYWJsZShuZXRkZXYpOwotCWVuaWNfZGV2X2RlbF9zdGF0aW9uX2FkZHIoZW5pYyk7CisJaWYgKGVuaWNfaXNfZHluYW1pYyhlbmljKSAmJiAhaXNfemVyb19ldGhlcl9hZGRyKGVuaWMtPnBwLm1hY19hZGRyKSkKKwkJZW5pY19kZXZfZGVsX2FkZHIoZW5pYywgZW5pYy0+cHAubWFjX2FkZHIpOworCWVsc2UKKwkJZW5pY19kZXZfZGVsX3N0YXRpb25fYWRkcihlbmljKTsKIAogCWZvciAoaSA9IDA7IGkgPCBlbmljLT53cV9jb3VudDsgaSsrKSB7CiAJCWVyciA9IHZuaWNfd3FfZGlzYWJsZSgmZW5pYy0+d3FbaV0pOwpAQCAtMjA0Myw3ICsyMTc5LDcgQEAKIAogc3RhdGljIGludCBlbmljX3NldF9yc3NrZXkoc3RydWN0IGVuaWMgKmVuaWMpCiB7Ci0JdTY0IHJzc19rZXlfYnVmX3BhOworCWRtYV9hZGRyX3QgcnNzX2tleV9idWZfcGE7CiAJdW5pb24gdm5pY19yc3Nfa2V5ICpyc3Nfa2V5X2J1Zl92YSA9IE5VTEw7CiAJdW5pb24gdm5pY19yc3Nfa2V5IHJzc19rZXkgPSB7CiAJCS5rZXlbMF0uYiA9IHs4NSwgNjcsIDgzLCA5NywgMTE5LCAxMDEsIDExNSwgMTExLCAxMDksIDEwMX0sCkBAIC0yMDc0LDcgKzIyMTAsNyBAQAogCiBzdGF0aWMgaW50IGVuaWNfc2V0X3Jzc2NwdShzdHJ1Y3QgZW5pYyAqZW5pYywgdTggcnNzX2hhc2hfYml0cykKIHsKLQl1NjQgcnNzX2NwdV9idWZfcGE7CisJZG1hX2FkZHJfdCByc3NfY3B1X2J1Zl9wYTsKIAl1bmlvbiB2bmljX3Jzc19jcHUgKnJzc19jcHVfYnVmX3ZhID0gTlVMTDsKIAl1bnNpZ25lZCBpbnQgaTsKIAlpbnQgZXJyOwpAQCAtMjMyOSw3ICsyNDY1LDggQEAKIAkubmRvX3N0YXJ0X3htaXQJCT0gZW5pY19oYXJkX3N0YXJ0X3htaXQsCiAJLm5kb19nZXRfc3RhdHMJCT0gZW5pY19nZXRfc3RhdHMsCiAJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCi0JLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJPSBlbmljX3NldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX3NldF9yeF9tb2RlCT0gZW5pY19zZXRfcnhfbW9kZSwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdAk9IGVuaWNfc2V0X3J4X21vZGUsCiAJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSBlbmljX3NldF9tYWNfYWRkcmVzc19keW5hbWljLAogCS5uZG9fY2hhbmdlX210dQkJPSBlbmljX2NoYW5nZV9tdHUsCiAJLm5kb192bGFuX3J4X3JlZ2lzdGVyCT0gZW5pY192bGFuX3J4X3JlZ2lzdGVyLApAQCAtMjMzOCw2ICsyNDc1LDkgQEAKIAkubmRvX3R4X3RpbWVvdXQJCT0gZW5pY190eF90aW1lb3V0LAogCS5uZG9fc2V0X3ZmX3BvcnQJPSBlbmljX3NldF92Zl9wb3J0LAogCS5uZG9fZ2V0X3ZmX3BvcnQJPSBlbmljX2dldF92Zl9wb3J0LAorI2lmZGVmIElGTEFfVkZfTUFYCisJLm5kb19zZXRfdmZfbWFjCQk9IGVuaWNfc2V0X3ZmX21hYywKKyNlbmRpZgogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCiAJLm5kb19wb2xsX2NvbnRyb2xsZXIJPSBlbmljX3BvbGxfY29udHJvbGxlciwKICNlbmRpZgpAQCAtMjM1MCw3ICsyNDkwLDggQEAKIAkubmRvX2dldF9zdGF0cwkJPSBlbmljX2dldF9zdGF0cywKIAkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKIAkubmRvX3NldF9tYWNfYWRkcmVzcwk9IGVuaWNfc2V0X21hY19hZGRyZXNzLAotCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gZW5pY19zZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb19zZXRfcnhfbW9kZQk9IGVuaWNfc2V0X3J4X21vZGUsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJPSBlbmljX3NldF9yeF9tb2RlLAogCS5uZG9fY2hhbmdlX210dQkJPSBlbmljX2NoYW5nZV9tdHUsCiAJLm5kb192bGFuX3J4X3JlZ2lzdGVyCT0gZW5pY192bGFuX3J4X3JlZ2lzdGVyLAogCS5uZG9fdmxhbl9yeF9hZGRfdmlkCT0gZW5pY192bGFuX3J4X2FkZF92aWQsCkBAIC0yNjk0LDcgKzI4MzUsNyBAQAogCWlmIChuZXRkZXYpIHsKIAkJc3RydWN0IGVuaWMgKmVuaWMgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCi0JCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisJCWNhbmNlbF93b3JrX3N5bmMoJmVuaWMtPnJlc2V0KTsKIAkJdW5yZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KTsKIAkJZW5pY19kZXZfZGVpbml0KGVuaWMpOwogCQl2bmljX2Rldl9jbG9zZShlbmljLT52ZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VuaWMvZW5pY19yZXMuaCBiL2RyaXZlcnMvbmV0L2VuaWMvZW5pY19yZXMuaAppbmRleCA5YTEwM2Q5Li4yNWJlMjczIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lbmljL2VuaWNfcmVzLmgKKysrIGIvZHJpdmVycy9uZXQvZW5pYy9lbmljX3Jlcy5oCkBAIC0zNCw2ICszNCw3IEBACiAjZGVmaW5lIEVOSUNfTUFYX01UVQkJCTkwMDAKIAogI2RlZmluZSBFTklDX01VTFRJQ0FTVF9QRVJGRUNUX0ZJTFRFUlMJMzIKKyNkZWZpbmUgRU5JQ19VTklDQVNUX1BFUkZFQ1RfRklMVEVSUwkzMgogCiAjZGVmaW5lIEVOSUNfTk9OX1RTT19NQVhfREVTQwkJMTYKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZW5pYy92bmljX3ZpYy5oIGIvZHJpdmVycy9uZXQvZW5pYy92bmljX3ZpYy5oCmluZGV4IDdlNDZlNWUuLmY3MDBmNWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VuaWMvdm5pY192aWMuaAorKysgYi9kcml2ZXJzL25ldC9lbmljL3ZuaWNfdmljLmgKQEAgLTI0LDE0ICsyNCwyOSBAQAogLyogTm90ZTogU3RyaW5nIGZpZWxkIGxlbmd0aHMgaW5jbHVkZSBudWxsIGNoYXIgKi8KIAogI2RlZmluZSBWSUNfUFJPVklORk9fQ0lTQ09fT1VJCQl7IDB4MDAsIDB4MDAsIDB4MGMgfQotI2RlZmluZSBWSUNfUFJPVklORk9fTElOVVhfVFlQRQkJMHgyCisjZGVmaW5lIFZJQ19QUk9WSU5GT19HRU5FUklDX1RZUEUJCTB4NAogCi1lbnVtIHZpY19saW51eF9wcm92X3Rsdl90eXBlIHsKLQlWSUNfTElOVVhfUFJPVl9UTFZfUE9SVF9QUk9GSUxFX05BTUVfU1RSID0gMCwKLQlWSUNfTElOVVhfUFJPVl9UTFZfQ0xJRU5UX01BQ19BRERSID0gMSwJCQkvKiB1OFs2XSAqLwotCVZJQ19MSU5VWF9QUk9WX1RMVl9DTElFTlRfTkFNRV9TVFIgPSAyLAotCVZJQ19MSU5VWF9QUk9WX1RMVl9IT1NUX1VVSURfU1RSID0gOCwKLQlWSUNfTElOVVhfUFJPVl9UTFZfQ0xJRU5UX1VVSURfU1RSID0gOSwKK2VudW0gdmljX2dlbmVyaWNfcHJvdl90bHZfdHlwZSB7CisJVklDX0dFTkVSSUNfUFJPVl9UTFZfUE9SVF9QUk9GSUxFX05BTUVfU1RSID0gMCwKKwlWSUNfR0VORVJJQ19QUk9WX1RMVl9DTElFTlRfTUFDX0FERFIgPSAxLAorCVZJQ19HRU5FUklDX1BST1ZfVExWX0NMSUVOVF9OQU1FX1NUUiA9IDIsCisJVklDX0dFTkVSSUNfUFJPVl9UTFZfQ0xVU1RFUl9QT1JUX05BTUVfU1RSID0gMywKKwlWSUNfR0VORVJJQ19QUk9WX1RMVl9DTFVTVEVSX1BPUlRfVVVJRF9TVFIgPSA0LAorCVZJQ19HRU5FUklDX1BST1ZfVExWX0NMVVNURVJfVVVJRF9TVFIgPSA1LAorCVZJQ19HRU5FUklDX1BST1ZfVExWX0NMVVNURVJfTkFNRV9TVFIgPSA3LAorCVZJQ19HRU5FUklDX1BST1ZfVExWX0hPU1RfVVVJRF9TVFIgPSA4LAorCVZJQ19HRU5FUklDX1BST1ZfVExWX0NMSUVOVF9VVUlEX1NUUiA9IDksCisJVklDX0dFTkVSSUNfUFJPVl9UTFZfSU5DQVJOQVRJT05fTlVNQkVSID0gMTAsCisJVklDX0dFTkVSSUNfUFJPVl9UTFZfT1NfVFlQRSA9IDExLAorCVZJQ19HRU5FUklDX1BST1ZfVExWX09TX1ZFTkRPUiA9IDEyLAorCVZJQ19HRU5FUklDX1BST1ZfVExWX0NMSUVOVF9UWVBFID0gMTUsCit9OworCitlbnVtIHZpY19nZW5lcmljX3Byb3Zfb3NfdHlwZSB7CisJVklDX0dFTkVSSUNfUFJPVl9PU19UWVBFX1VOS05PV04gPSAwLAorCVZJQ19HRU5FUklDX1BST1ZfT1NfVFlQRV9FU1ggPSAxLAorCVZJQ19HRU5FUklDX1BST1ZfT1NfVFlQRV9MSU5VWCA9IDIsCisJVklDX0dFTkVSSUNfUFJPVl9PU19UWVBFX1dJTkRPV1MgPSAzLAogfTsKIAogc3RydWN0IHZpY19wcm92aW5mbyB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhvYy5jIGIvZHJpdmVycy9uZXQvZXRob2MuYwppbmRleCBjNWEyZmUwLi5iNzlkN2UxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhvYy5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aG9jLmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgogI2luY2x1ZGUgPG5ldC9ldGhvYy5oPgogCiBzdGF0aWMgaW50IGJ1ZmZlcl9zaXplID0gMHg4MDAwOyAvKiAzMiBLQnl0ZXMgKi8KQEAgLTE4NCw3ICsxODUsNiBAQAogICogQG5ldGRldjoJcG9pbnRlciB0byBuZXR3b3JrIGRldmljZSBzdHJ1Y3R1cmUKICAqIEBuYXBpOglOQVBJIHN0cnVjdHVyZQogICogQG1zZ19lbmFibGU6CWRldmljZSBzdGF0ZSBmbGFncwotICogQHJ4X2xvY2s6CXJlY2VpdmUgbG9jawogICogQGxvY2s6CWRldmljZSBsb2NrCiAgKiBAcGh5OglhdHRhY2hlZCBQSFkKICAqIEBtZGlvOglNRElPIGJ1cyBmb3IgUEhZIGFjY2VzcwpAQCAtMjA5LDcgKzIwOSw2IEBACiAJc3RydWN0IG5hcGlfc3RydWN0IG5hcGk7CiAJdTMyIG1zZ19lbmFibGU7CiAKLQlzcGlubG9ja190IHJ4X2xvY2s7CiAJc3BpbmxvY2tfdCBsb2NrOwogCiAJc3RydWN0IHBoeV9kZXZpY2UgKnBoeTsKQEAgLTQxMywxMCArNDEyLDIxIEBACiAJCXVuc2lnbmVkIGludCBlbnRyeTsKIAkJc3RydWN0IGV0aG9jX2JkIGJkOwogCi0JCWVudHJ5ID0gcHJpdi0+bnVtX3R4ICsgKHByaXYtPmN1cl9yeCAlIHByaXYtPm51bV9yeCk7CisJCWVudHJ5ID0gcHJpdi0+bnVtX3R4ICsgcHJpdi0+Y3VyX3J4OwogCQlldGhvY19yZWFkX2JkKHByaXYsIGVudHJ5LCAmYmQpOwotCQlpZiAoYmQuc3RhdCAmIFJYX0JEX0VNUFRZKQotCQkJYnJlYWs7CisJCWlmIChiZC5zdGF0ICYgUlhfQkRfRU1QVFkpIHsKKwkJCWV0aG9jX2Fja19pcnEocHJpdiwgSU5UX01BU0tfUlgpOworCQkJLyogSWYgcGFja2V0IChpbnRlcnJ1cHQpIGNhbWUgaW4gYmV0d2VlbiBjaGVja2luZworCQkJICogQkRfRU1UUFkgYW5kIGNsZWFyaW5nIHRoZSBpbnRlcnJ1cHQgc291cmNlLCB0aGVuIHdlCisJCQkgKiByaXNrIG1pc3NpbmcgdGhlIHBhY2tldCBhcyB0aGUgUlggaW50ZXJydXB0IHdvbid0CisJCQkgKiB0cmlnZ2VyIHJpZ2h0IGF3YXkgd2hlbiB3ZSByZWVuYWJsZSBpdDsgaGVuY2UsIGNoZWNrCisJCQkgKiBCRF9FTVRQWSBoZXJlIGFnYWluIHRvIG1ha2Ugc3VyZSB0aGVyZSBpc24ndCBzdWNoIGEKKwkJCSAqIHBhY2tldCB3YWl0aW5nIGZvciB1cy4uLgorCQkJICovCisJCQlldGhvY19yZWFkX2JkKHByaXYsIGVudHJ5LCAmYmQpOworCQkJaWYgKGJkLnN0YXQgJiBSWF9CRF9FTVBUWSkKKwkJCQlicmVhazsKKwkJfQogCiAJCWlmIChldGhvY191cGRhdGVfcnhfc3RhdHMocHJpdiwgJmJkKSA9PSAwKSB7CiAJCQlpbnQgc2l6ZSA9IGJkLnN0YXQgPj4gMTY7CkBAIC00NDYsMTMgKzQ1NiwxNCBAQAogCQliZC5zdGF0ICY9IH5SWF9CRF9TVEFUUzsKIAkJYmQuc3RhdCB8PSAgUlhfQkRfRU1QVFk7CiAJCWV0aG9jX3dyaXRlX2JkKHByaXYsIGVudHJ5LCAmYmQpOwotCQlwcml2LT5jdXJfcngrKzsKKwkJaWYgKCsrcHJpdi0+Y3VyX3J4ID09IHByaXYtPm51bV9yeCkKKwkJCXByaXYtPmN1cl9yeCA9IDA7CiAJfQogCiAJcmV0dXJuIGNvdW50OwogfQogCi1zdGF0aWMgaW50IGV0aG9jX3VwZGF0ZV90eF9zdGF0cyhzdHJ1Y3QgZXRob2MgKmRldiwgc3RydWN0IGV0aG9jX2JkICpiZCkKK3N0YXRpYyB2b2lkIGV0aG9jX3VwZGF0ZV90eF9zdGF0cyhzdHJ1Y3QgZXRob2MgKmRldiwgc3RydWN0IGV0aG9jX2JkICpiZCkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gZGV2LT5uZXRkZXY7CiAKQEAgLTQ4MiwzMiArNDkzLDQ0IEBACiAJbmV0ZGV2LT5zdGF0cy5jb2xsaXNpb25zICs9IChiZC0+c3RhdCA+PiA0KSAmIDB4ZjsKIAluZXRkZXYtPnN0YXRzLnR4X2J5dGVzICs9IGJkLT5zdGF0ID4+IDE2OwogCW5ldGRldi0+c3RhdHMudHhfcGFja2V0cysrOwotCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBldGhvY190eChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIGludCBldGhvY190eChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbGltaXQpCiB7CiAJc3RydWN0IGV0aG9jICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgY291bnQ7CisJc3RydWN0IGV0aG9jX2JkIGJkOwogCi0Jc3Bpbl9sb2NrKCZwcml2LT5sb2NrKTsKKwlmb3IgKGNvdW50ID0gMDsgY291bnQgPCBsaW1pdDsgKytjb3VudCkgeworCQl1bnNpZ25lZCBpbnQgZW50cnk7CiAKLQl3aGlsZSAocHJpdi0+ZHR5X3R4ICE9IHByaXYtPmN1cl90eCkgewotCQl1bnNpZ25lZCBpbnQgZW50cnkgPSBwcml2LT5kdHlfdHggJSBwcml2LT5udW1fdHg7Ci0JCXN0cnVjdCBldGhvY19iZCBiZDsKKwkJZW50cnkgPSBwcml2LT5kdHlfdHggJiAocHJpdi0+bnVtX3R4LTEpOwogCiAJCWV0aG9jX3JlYWRfYmQocHJpdiwgZW50cnksICZiZCk7Ci0JCWlmIChiZC5zdGF0ICYgVFhfQkRfUkVBRFkpCi0JCQlicmVhazsKIAotCQllbnRyeSA9ICgrK3ByaXYtPmR0eV90eCkgJSBwcml2LT5udW1fdHg7Ci0JCSh2b2lkKWV0aG9jX3VwZGF0ZV90eF9zdGF0cyhwcml2LCAmYmQpOworCQlpZiAoYmQuc3RhdCAmIFRYX0JEX1JFQURZIHx8IChwcml2LT5kdHlfdHggPT0gcHJpdi0+Y3VyX3R4KSkgeworCQkJZXRob2NfYWNrX2lycShwcml2LCBJTlRfTUFTS19UWCk7CisJCQkvKiBJZiBpbnRlcnJ1cHQgY2FtZSBpbiBiZXR3ZWVuIHJlYWRpbmcgaW4gdGhlIEJECisJCQkgKiBhbmQgY2xlYXJpbmcgdGhlIGludGVycnVwdCBzb3VyY2UsIHRoZW4gd2UgcmlzaworCQkJICogbWlzc2luZyB0aGUgZXZlbnQgYXMgdGhlIFRYIGludGVycnVwdCB3b24ndCB0cmlnZ2VyCisJCQkgKiByaWdodCBhd2F5IHdoZW4gd2UgcmVlbmFibGUgaXQ7IGhlbmNlLCBjaGVjaworCQkJICogQkRfRU1QVFkgaGVyZSBhZ2FpbiB0byBtYWtlIHN1cmUgdGhlcmUgaXNuJ3Qgc3VjaCBhbgorCQkJICogZXZlbnQgcGVuZGluZy4uLgorCQkJICovCisJCQlldGhvY19yZWFkX2JkKHByaXYsIGVudHJ5LCAmYmQpOworCQkJaWYgKGJkLnN0YXQgJiBUWF9CRF9SRUFEWSB8fAorCQkJICAgIChwcml2LT5kdHlfdHggPT0gcHJpdi0+Y3VyX3R4KSkKKwkJCQlicmVhazsKKwkJfQorCisJCWV0aG9jX3VwZGF0ZV90eF9zdGF0cyhwcml2LCAmYmQpOworCQlwcml2LT5kdHlfdHgrKzsKIAl9CiAKIAlpZiAoKHByaXYtPmN1cl90eCAtIHByaXYtPmR0eV90eCkgPD0gKHByaXYtPm51bV90eCAvIDIpKQogCQluZXRpZl93YWtlX3F1ZXVlKGRldik7CiAKLQlldGhvY19hY2tfaXJxKHByaXYsIElOVF9NQVNLX1RYKTsKLQlzcGluX3VubG9jaygmcHJpdi0+bG9jayk7CisJcmV0dXJuIGNvdW50OwogfQogCiBzdGF0aWMgaXJxcmV0dXJuX3QgZXRob2NfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKQEAgLTUxNSwzMiArNTM4LDM4IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGRldl9pZDsKIAlzdHJ1Y3QgZXRob2MgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXUzMiBwZW5kaW5nOworCXUzMiBtYXNrOwogCi0JZXRob2NfZGlzYWJsZV9pcnEocHJpdiwgSU5UX01BU0tfQUxMKTsKKwkvKiBGaWd1cmUgb3V0IHdoYXQgdHJpZ2dlcmVkIHRoZSBpbnRlcnJ1cHQuLi4KKwkgKiBUaGUgdHJpY2t5IGJpdCBoZXJlIGlzIHRoYXQgdGhlIGludGVycnVwdCBzb3VyY2UgYml0cyBnZXQKKwkgKiBzZXQgaW4gSU5UX1NPVVJDRSBmb3IgYW4gZXZlbnQgaXJyZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhhdAorCSAqIGV2ZW50IGlzIG1hc2tlZCBvciBub3QuICBUaHVzLCBpbiBvcmRlciB0byBmaWd1cmUgb3V0IHdoYXQKKwkgKiB0cmlnZ2VyZWQgdGhlIGludGVycnVwdCwgd2UgbmVlZCB0byByZW1vdmUgdGhlIHNvdXJjZXMKKwkgKiBmb3IgYWxsIGV2ZW50cyB0aGF0IGFyZSBjdXJyZW50bHkgbWFza2VkLiAgVGhpcyBiZWhhdmlvdXIKKwkgKiBpcyBub3QgcGFydGljdWxhcmx5IHdlbGwgZG9jdW1lbnRlZCBidXQgcmVhc29uYWJsZS4uLgorCSAqLworCW1hc2sgPSBldGhvY19yZWFkKHByaXYsIElOVF9NQVNLKTsKIAlwZW5kaW5nID0gZXRob2NfcmVhZChwcml2LCBJTlRfU09VUkNFKTsKKwlwZW5kaW5nICY9IG1hc2s7CisKIAlpZiAodW5saWtlbHkocGVuZGluZyA9PSAwKSkgewotCQlldGhvY19lbmFibGVfaXJxKHByaXYsIElOVF9NQVNLX0FMTCk7CiAJCXJldHVybiBJUlFfTk9ORTsKIAl9CiAKIAlldGhvY19hY2tfaXJxKHByaXYsIHBlbmRpbmcpOwogCisJLyogV2UgYWx3YXlzIGhhbmRsZSB0aGUgZHJvcHBlZCBwYWNrZXQgaW50ZXJydXB0ICovCiAJaWYgKHBlbmRpbmcgJiBJTlRfTUFTS19CVVNZKSB7CiAJCWRldl9lcnIoJmRldi0+ZGV2LCAicGFja2V0IGRyb3BwZWRcbiIpOwogCQlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAl9CiAKLQlpZiAocGVuZGluZyAmIElOVF9NQVNLX1JYKSB7Ci0JCWlmIChuYXBpX3NjaGVkdWxlX3ByZXAoJnByaXYtPm5hcGkpKQotCQkJX19uYXBpX3NjaGVkdWxlKCZwcml2LT5uYXBpKTsKLQl9IGVsc2UgewotCQlldGhvY19lbmFibGVfaXJxKHByaXYsIElOVF9NQVNLX1JYKTsKKwkvKiBIYW5kbGUgcmVjZWl2ZS90cmFuc21pdCBldmVudCBieSBzd2l0Y2hpbmcgdG8gcG9sbGluZyAqLworCWlmIChwZW5kaW5nICYgKElOVF9NQVNLX1RYIHwgSU5UX01BU0tfUlgpKSB7CisJCWV0aG9jX2Rpc2FibGVfaXJxKHByaXYsIElOVF9NQVNLX1RYIHwgSU5UX01BU0tfUlgpOworCQluYXBpX3NjaGVkdWxlKCZwcml2LT5uYXBpKTsKIAl9CiAKLQlpZiAocGVuZGluZyAmIElOVF9NQVNLX1RYKQotCQlldGhvY190eChkZXYpOwotCi0JZXRob2NfZW5hYmxlX2lycShwcml2LCBJTlRfTUFTS19BTEwgJiB+SU5UX01BU0tfUlgpOwogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIApAQCAtNTY2LDI2ICs1OTUsMjkgQEAKIHN0YXRpYyBpbnQgZXRob2NfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCiB7CiAJc3RydWN0IGV0aG9jICpwcml2ID0gY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCBldGhvYywgbmFwaSk7Ci0JaW50IHdvcmtfZG9uZSA9IDA7CisJaW50IHJ4X3dvcmtfZG9uZSA9IDA7CisJaW50IHR4X3dvcmtfZG9uZSA9IDA7CiAKLQl3b3JrX2RvbmUgPSBldGhvY19yeChwcml2LT5uZXRkZXYsIGJ1ZGdldCk7Ci0JaWYgKHdvcmtfZG9uZSA8IGJ1ZGdldCkgewotCQlldGhvY19lbmFibGVfaXJxKHByaXYsIElOVF9NQVNLX1JYKTsKKwlyeF93b3JrX2RvbmUgPSBldGhvY19yeChwcml2LT5uZXRkZXYsIGJ1ZGdldCk7CisJdHhfd29ya19kb25lID0gZXRob2NfdHgocHJpdi0+bmV0ZGV2LCBidWRnZXQpOworCisJaWYgKHJ4X3dvcmtfZG9uZSA8IGJ1ZGdldCAmJiB0eF93b3JrX2RvbmUgPCBidWRnZXQpIHsKIAkJbmFwaV9jb21wbGV0ZShuYXBpKTsKKwkJZXRob2NfZW5hYmxlX2lycShwcml2LCBJTlRfTUFTS19UWCB8IElOVF9NQVNLX1JYKTsKIAl9CiAKLQlyZXR1cm4gd29ya19kb25lOworCXJldHVybiByeF93b3JrX2RvbmU7CiB9CiAKIHN0YXRpYyBpbnQgZXRob2NfbWRpb19yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHksIGludCByZWcpCiB7Ci0JdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gamlmZmllcyArIEVUSE9DX01JSV9USU1FT1VUOwogCXN0cnVjdCBldGhvYyAqcHJpdiA9IGJ1cy0+cHJpdjsKKwlpbnQgaTsKIAogCWV0aG9jX3dyaXRlKHByaXYsIE1JSUFERFJFU1MsIE1JSUFERFJFU1NfQUREUihwaHksIHJlZykpOwogCWV0aG9jX3dyaXRlKHByaXYsIE1JSUNPTU1BTkQsIE1JSUNPTU1BTkRfUkVBRCk7CiAKLQl3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpIHsKKwlmb3IgKGk9MDsgaSA8IDU7IGkrKykgewogCQl1MzIgc3RhdHVzID0gZXRob2NfcmVhZChwcml2LCBNSUlTVEFUVVMpOwogCQlpZiAoIShzdGF0dXMgJiBNSUlTVEFUVVNfQlVTWSkpIHsKIAkJCXUzMiBkYXRhID0gZXRob2NfcmVhZChwcml2LCBNSUlSWF9EQVRBKTsKQEAgLTU5Myw4ICs2MjUsNyBAQAogCQkJZXRob2Nfd3JpdGUocHJpdiwgTUlJQ09NTUFORCwgMCk7CiAJCQlyZXR1cm4gZGF0YTsKIAkJfQotCi0JCXNjaGVkdWxlKCk7CisJCXVzbGVlcF9yYW5nZSgxMDAsMjAwKTsKIAl9CiAKIAlyZXR1cm4gLUVCVVNZOwpAQCAtNjAyLDIyICs2MzMsMjEgQEAKIAogc3RhdGljIGludCBldGhvY19tZGlvX3dyaXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHksIGludCByZWcsIHUxNiB2YWwpCiB7Ci0JdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gamlmZmllcyArIEVUSE9DX01JSV9USU1FT1VUOwogCXN0cnVjdCBldGhvYyAqcHJpdiA9IGJ1cy0+cHJpdjsKKwlpbnQgaTsKIAogCWV0aG9jX3dyaXRlKHByaXYsIE1JSUFERFJFU1MsIE1JSUFERFJFU1NfQUREUihwaHksIHJlZykpOwogCWV0aG9jX3dyaXRlKHByaXYsIE1JSVRYX0RBVEEsIHZhbCk7CiAJZXRob2Nfd3JpdGUocHJpdiwgTUlJQ09NTUFORCwgTUlJQ09NTUFORF9XUklURSk7CiAKLQl3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpIHsKKwlmb3IgKGk9MDsgaSA8IDU7IGkrKykgewogCQl1MzIgc3RhdCA9IGV0aG9jX3JlYWQocHJpdiwgTUlJU1RBVFVTKTsKIAkJaWYgKCEoc3RhdCAmIE1JSVNUQVRVU19CVVNZKSkgewogCQkJLyogcmVzZXQgTUlJIGNvbW1hbmQgcmVnaXN0ZXIgKi8KIAkJCWV0aG9jX3dyaXRlKHByaXYsIE1JSUNPTU1BTkQsIDApOwogCQkJcmV0dXJuIDA7CiAJCX0KLQotCQlzY2hlZHVsZSgpOworCQl1c2xlZXBfcmFuZ2UoMTAwLDIwMCk7CiAJfQogCiAJcmV0dXJuIC1FQlVTWTsKQEAgLTk3MSw5ICsxMDAxLDE3IEBACiAJLyogY2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgVFgvUlggYnVmZmVycywgbWF4aW11bSAxMjggc3VwcG9ydGVkICovCiAJbnVtX2JkID0gbWluX3QodW5zaWduZWQgaW50LAogCQkxMjgsIChuZXRkZXYtPm1lbV9lbmQgLSBuZXRkZXYtPm1lbV9zdGFydCArIDEpIC8gRVRIT0NfQlVGU0laKTsKLQlwcml2LT5udW1fdHggPSBtYXgoMiwgbnVtX2JkIC8gNCk7CisJaWYgKG51bV9iZCA8IDQpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBlcnJvcjsKKwl9CisJLyogbnVtX3R4IG11c3QgYmUgYSBwb3dlciBvZiB0d28gKi8KKwlwcml2LT5udW1fdHggPSByb3VuZGRvd25fcG93X29mX3R3byhudW1fYmQgPj4gMSk7CiAJcHJpdi0+bnVtX3J4ID0gbnVtX2JkIC0gcHJpdi0+bnVtX3R4OwogCisJZGV2X2RiZygmcGRldi0+ZGV2LCAiZXRob2M6IG51bV90eDogJWQgbnVtX3J4OiAlZFxuIiwKKwkJcHJpdi0+bnVtX3R4LCBwcml2LT5udW1fcngpOworCiAJcHJpdi0+dm1hID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIG51bV9iZCpzaXplb2Yodm9pZCopLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXByaXYtPnZtYSkgewogCQlyZXQgPSAtRU5PTUVNOwpAQCAtOTgyLDEwICsxMDIwLDIzIEBACiAKIAkvKiBBbGxvdyB0aGUgcGxhdGZvcm0gc2V0dXAgY29kZSB0byBwYXNzIGluIGEgTUFDIGFkZHJlc3MuICovCiAJaWYgKHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhKSB7Ci0JCXN0cnVjdCBldGhvY19wbGF0Zm9ybV9kYXRhICpwZGF0YSA9Ci0JCQkoc3RydWN0IGV0aG9jX3BsYXRmb3JtX2RhdGEgKilwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwkJc3RydWN0IGV0aG9jX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJCW1lbWNweShuZXRkZXYtPmRldl9hZGRyLCBwZGF0YS0+aHdhZGRyLCBJRkhXQUREUkxFTik7CiAJCXByaXYtPnBoeV9pZCA9IHBkYXRhLT5waHlfaWQ7CisJfSBlbHNlIHsKKwkJcHJpdi0+cGh5X2lkID0gLTE7CisKKyNpZmRlZiBDT05GSUdfT0YKKwkJeworCQljb25zdCB1aW50OF90KiBtYWM7CisKKwkJbWFjID0gb2ZfZ2V0X3Byb3BlcnR5KHBkZXYtPmRldi5vZl9ub2RlLAorCQkJCSAgICAgICJsb2NhbC1tYWMtYWRkcmVzcyIsCisJCQkJICAgICAgTlVMTCk7CisJCWlmIChtYWMpCisJCQltZW1jcHkobmV0ZGV2LT5kZXZfYWRkciwgbWFjLCBJRkhXQUREUkxFTik7CisJCX0KKyNlbmRpZgogCX0KIAogCS8qIENoZWNrIHRoYXQgdGhlIGdpdmVuIE1BQyBhZGRyZXNzIGlzIHZhbGlkLiBJZiBpdCBpc24ndCwgcmVhZCB0aGUKQEAgLTEwNDYsNyArMTA5Nyw2IEBACiAJLyogc2V0dXAgTkFQSSAqLwogCW5ldGlmX25hcGlfYWRkKG5ldGRldiwgJnByaXYtPm5hcGksIGV0aG9jX3BvbGwsIDY0KTsKIAotCXNwaW5fbG9ja19pbml0KCZwcml2LT5yeF9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmcHJpdi0+bG9jayk7CiAKIAlyZXQgPSByZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KTsKQEAgLTExMTMsNiArMTE2MywxNiBAQAogIyBkZWZpbmUgZXRob2NfcmVzdW1lICBOVUxMCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19PRgorc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgZXRob2NfbWF0Y2hbXSA9IHsKKwl7CisJCS5jb21wYXRpYmxlID0gIm9wZW5jb3JlcyxldGhvYyIsCisJfSwKKwl7fSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBldGhvY19tYXRjaCk7CisjZW5kaWYKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZXRob2NfZHJpdmVyID0gewogCS5wcm9iZSAgID0gZXRob2NfcHJvYmUsCiAJLnJlbW92ZSAgPSBfX2RldmV4aXRfcChldGhvY19yZW1vdmUpLApAQCAtMTEyMCw2ICsxMTgwLDEwIEBACiAJLnJlc3VtZSAgPSBldGhvY19yZXN1bWUsCiAJLmRyaXZlciAgPSB7CiAJCS5uYW1lID0gImV0aG9jIiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisjaWZkZWYgQ09ORklHX09GCisJCS5vZl9tYXRjaF90YWJsZSA9IGV0aG9jX21hdGNoLAorI2VuZGlmCiAJfSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZlY19tcGM1Mnh4LmMgYi9kcml2ZXJzL25ldC9mZWNfbXBjNTJ4eC5jCmluZGV4IGU5ZjVkMDMuLjUwYzEyMTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZlY19tcGM1Mnh4LmMKKysrIGIvZHJpdmVycy9uZXQvZmVjX21wYzUyeHguYwpAQCAtMzY2LDkgKzM2Niw4IEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGRldl9pZDsKIAlzdHJ1Y3QgbXBjNTJ4eF9mZWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrKCZwcml2LT5sb2NrKTsKIAl3aGlsZSAoYmNvbV9idWZmZXJfZG9uZShwcml2LT50eF9kbWF0c2spKSB7CiAJCXN0cnVjdCBza19idWZmICpza2I7CiAJCXN0cnVjdCBiY29tX2ZlY19iZCAqYmQ7CkBAIC0zNzksNyArMzc4LDcgQEAKIAogCQlkZXZfa2ZyZWVfc2tiX2lycShza2IpOwogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2soJnByaXYtPmxvY2spOwogCiAJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwogCkBAIC0zOTUsOSArMzk0LDggQEAKIAlzdHJ1Y3QgYmNvbV9mZWNfYmQgKmJkOwogCXUzMiBzdGF0dXMsIHBoeXNhZGRyOwogCWludCBsZW5ndGg7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrKCZwcml2LT5sb2NrKTsKIAogCXdoaWxlIChiY29tX2J1ZmZlcl9kb25lKHByaXYtPnJ4X2RtYXRzaykpIHsKIApAQCAtNDI5LDcgKzQyNyw3IEBACiAKIAkJLyogUHJvY2VzcyB0aGUgcmVjZWl2ZWQgc2tiIC0gRHJvcCB0aGUgc3BpbiBsb2NrIHdoaWxlCiAJCSAqIGNhbGxpbmcgaW50byB0aGUgbmV0d29yayBzdGFjayAqLwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCXNwaW5fdW5sb2NrKCZwcml2LT5sb2NrKTsKIAogCQlkbWFfdW5tYXBfc2luZ2xlKGRldi0+ZGV2LnBhcmVudCwgcGh5c2FkZHIsIHJza2ItPmxlbiwKIAkJCQkgRE1BX0ZST01fREVWSUNFKTsKQEAgLTQzOCwxMCArNDM2LDEwIEBACiAJCXJza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMocnNrYiwgZGV2KTsKIAkJbmV0aWZfcngocnNrYik7CiAKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJc3Bpbl9sb2NrKCZwcml2LT5sb2NrKTsKIAl9CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2soJnByaXYtPmxvY2spOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtNDUyLDcgKzQ1MCw2IEBACiAJc3RydWN0IG1wYzUyeHhfZmVjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBtcGM1Mnh4X2ZlYyBfX2lvbWVtICpmZWMgPSBwcml2LT5mZWM7CiAJdTMyIGlldmVudDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWV2ZW50ID0gaW5fYmUzMigmZmVjLT5pZXZlbnQpOwogCkBAIC00NzAsOSArNDY3LDkgQEAKIAkJaWYgKG5ldF9yYXRlbGltaXQoKSAmJiAoaWV2ZW50ICYgRkVDX0lFVkVOVF9YRklGT19FUlJPUikpCiAJCQlkZXZfd2FybigmZGV2LT5kZXYsICJGRUNfSUVWRU5UX1hGSUZPX0VSUk9SXG4iKTsKIAotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQlzcGluX2xvY2soJnByaXYtPmxvY2spOwogCQltcGM1Mnh4X2ZlY19yZXNldChkZXYpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCXNwaW5fdW5sb2NrKCZwcml2LT5sb2NrKTsKIAogCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZm9yY2VkZXRoLmMgYi9kcml2ZXJzL25ldC9mb3JjZWRldGguYwppbmRleCAwZmExNzc2Li5jZDJkNzJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mb3JjZWRldGguYworKysgYi9kcml2ZXJzL25ldC9mb3JjZWRldGguYwpAQCAtMzksNiArMzksOSBAQAogICogREVWX05FRURfVElNRVJJUlEgd2lsbCBub3QgaGFybSB5b3Ugb24gc2FuZSBoYXJkd2FyZSwgb25seSBnZW5lcmF0aW5nIGEgZmV3CiAgKiBzdXBlcmZsdW91cyB0aW1lciBpbnRlcnJ1cHRzIGZyb20gdGhlIG5pYy4KICAqLworCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKICNkZWZpbmUgRk9SQ0VERVRIX1ZFUlNJT04JCSIwLjY0IgogI2RlZmluZSBEUlZfTkFNRQkJCSJmb3JjZWRldGgiCiAKQEAgLTYwLDE4ICs2MywxMiBAQAogI2luY2x1ZGUgPGxpbnV4L2lmX3ZsYW4uaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSAgPGxpbnV4L2lvLmg+CiAKICNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKLSNpZiAwCi0jZGVmaW5lIGRwcmludGsJCQlwcmludGsKLSNlbHNlCi0jZGVmaW5lIGRwcmludGsoeC4uLikJCWRvIHsgfSB3aGlsZSAoMCkKLSNlbmRpZgotCiAjZGVmaW5lIFRYX1dPUktfUEVSX0xPT1AgIDY0CiAjZGVmaW5lIFJYX1dPUktfUEVSX0xPT1AgIDY0CiAKQEAgLTE4Niw5ICsxODMsOSBAQAogCU52UmVnU2xvdFRpbWUgPSAweDljLAogI2RlZmluZSBOVlJFR19TTE9UVElNRV9MRUdCRl9FTkFCTEVECTB4ODAwMDAwMDAKICNkZWZpbmUgTlZSRUdfU0xPVFRJTUVfMTBfMTAwX0ZVTEwJMHgwMDAwN2YwMAotI2RlZmluZSBOVlJFR19TTE9UVElNRV8xMDAwX0ZVTEwgCTB4MDAwM2ZmMDAKKyNkZWZpbmUgTlZSRUdfU0xPVFRJTUVfMTAwMF9GVUxMCTB4MDAwM2ZmMDAKICNkZWZpbmUgTlZSRUdfU0xPVFRJTUVfSEFMRgkJMHgwMDAwZmYwMAotI2RlZmluZSBOVlJFR19TTE9UVElNRV9ERUZBVUxUCSAJMHgwMDAwN2YwMAorI2RlZmluZSBOVlJFR19TTE9UVElNRV9ERUZBVUxUCQkweDAwMDA3ZjAwCiAjZGVmaW5lIE5WUkVHX1NMT1RUSU1FX01BU0sJCTB4MDAwMDAwZmYKIAogCU52UmVnVHhEZWZlcnJhbCA9IDB4QTAsCkBAIC0yOTcsNyArMjk0LDcgQEAKICNkZWZpbmUgTlZSRUdfV0FLRVVQRkxBR1NfRU5BQkxFCTB4MTExMQogCiAJTnZSZWdNZ210VW5pdEdldFZlcnNpb24gPSAweDIwNCwKLSNkZWZpbmUgTlZSRUdfTUdNVFVOSVRHRVRWRVJTSU9OICAgICAJMHgwMQorI2RlZmluZSBOVlJFR19NR01UVU5JVEdFVFZFUlNJT04JMHgwMQogCU52UmVnTWdtdFVuaXRWZXJzaW9uID0gMHgyMDgsCiAjZGVmaW5lIE5WUkVHX01HTVRVTklUVkVSU0lPTgkJMHgwOAogCU52UmVnUG93ZXJDYXAgPSAweDI2OCwKQEAgLTM2OCw4ICszNjUsOCBAQAogfTsKIAogdW5pb24gcmluZ190eXBlIHsKLQlzdHJ1Y3QgcmluZ19kZXNjKiBvcmlnOwotCXN0cnVjdCByaW5nX2Rlc2NfZXgqIGV4OworCXN0cnVjdCByaW5nX2Rlc2MgKm9yaWc7CisJc3RydWN0IHJpbmdfZGVzY19leCAqZXg7CiB9OwogCiAjZGVmaW5lIEZMQUdfTUFTS19WMSAweGZmZmYwMDAwCkBAIC00NDQsMTAgKzQ0MSwxMCBAQAogI2RlZmluZSBOVl9SWDNfVkxBTl9UQUdfTUFTSwkoMHgwMDAwRkZGRikKIAogLyogTWlzY2VsYW5lb3VzIGhhcmR3YXJlIHJlbGF0ZWQgZGVmaW5lczogKi8KLSNkZWZpbmUgTlZfUENJX1JFR1NaX1ZFUjEgICAgICAJMHgyNzAKLSNkZWZpbmUgTlZfUENJX1JFR1NaX1ZFUjIgICAgICAJMHgyZDQKLSNkZWZpbmUgTlZfUENJX1JFR1NaX1ZFUjMgICAgICAJMHg2MDQKLSNkZWZpbmUgTlZfUENJX1JFR1NaX01BWCAgICAgICAJMHg2MDQKKyNkZWZpbmUgTlZfUENJX1JFR1NaX1ZFUjEJMHgyNzAKKyNkZWZpbmUgTlZfUENJX1JFR1NaX1ZFUjIJMHgyZDQKKyNkZWZpbmUgTlZfUENJX1JFR1NaX1ZFUjMJMHg2MDQKKyNkZWZpbmUgTlZfUENJX1JFR1NaX01BWAkweDYwNAogCiAvKiB2YXJpb3VzIHRpbWVvdXQgZGVsYXlzOiBhbGwgaW4gdXNlYyAqLwogI2RlZmluZSBOVl9UWFJYX1JFU0VUX0RFTEFZCTQKQEAgLTcxNyw3ICs3MTQsNyBAQAogCXsgTnZSZWdNdWx0aWNhc3RBZGRyQSwgMHhmZmZmZmZmZiB9LAogCXsgTnZSZWdUeFdhdGVybWFyaywgMHgwZmYgfSwKIAl7IE52UmVnV2FrZVVwRmxhZ3MsIDB4MDc3NzcgfSwKLQl7IDAsMCB9CisJeyAwLCAwIH0KIH07CiAKIHN0cnVjdCBudl9za2JfbWFwIHsKQEAgLTkxMSw3ICs5MDgsNyBAQAogICogUG93ZXIgZG93biBwaHkgd2hlbiBpbnRlcmZhY2UgaXMgZG93biAocGVyc2lzdHMgdGhyb3VnaCByZWJvb3Q7CiAgKiBvbGRlciBMaW51eCBhbmQgb3RoZXIgT1NlcyBtYXkgbm90IHBvd2VyIGl0IHVwIGFnYWluKQogICovCi1zdGF0aWMgaW50IHBoeV9wb3dlcl9kb3duID0gMDsKK3N0YXRpYyBpbnQgcGh5X3Bvd2VyX2Rvd247CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGZlX3ByaXYgKmdldF9udnByaXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKQEAgLTk0OCw3ICs5NDUsNyBAQAogfQogCiBzdGF0aWMgaW50IHJlZ19kZWxheShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgb2Zmc2V0LCB1MzIgbWFzaywgdTMyIHRhcmdldCwKLQkJCQlpbnQgZGVsYXksIGludCBkZWxheW1heCwgY29uc3QgY2hhciAqbXNnKQorCQkgICAgIGludCBkZWxheSwgaW50IGRlbGF5bWF4KQogewogCXU4IF9faW9tZW0gKmJhc2UgPSBnZXRfaHdiYXNlKGRldik7CiAKQEAgLTk1NiwxMSArOTUzLDggQEAKIAlkbyB7CiAJCXVkZWxheShkZWxheSk7CiAJCWRlbGF5bWF4IC09IGRlbGF5OwotCQlpZiAoZGVsYXltYXggPCAwKSB7Ci0JCQlpZiAobXNnKQotCQkJCXByaW50aygiJXMiLCBtc2cpOworCQlpZiAoZGVsYXltYXggPCAwKQogCQkJcmV0dXJuIDE7Ci0JCX0KIAl9IHdoaWxlICgocmVhZGwoYmFzZSArIG9mZnNldCkgJiBtYXNrKSAhPSB0YXJnZXQpOwogCXJldHVybiAwOwogfQpAQCAtOTg0LDEyICs5NzgsMTAgQEAKIAl1OCBfX2lvbWVtICpiYXNlID0gZ2V0X2h3YmFzZShkZXYpOwogCiAJaWYgKCFudl9vcHRpbWl6ZWQobnApKSB7Ci0JCWlmIChyeHR4X2ZsYWdzICYgTlZfU0VUVVBfUlhfUklORykgeworCQlpZiAocnh0eF9mbGFncyAmIE5WX1NFVFVQX1JYX1JJTkcpCiAJCQl3cml0ZWwoZG1hX2xvdyhucC0+cmluZ19hZGRyKSwgYmFzZSArIE52UmVnUnhSaW5nUGh5c0FkZHIpOwotCQl9Ci0JCWlmIChyeHR4X2ZsYWdzICYgTlZfU0VUVVBfVFhfUklORykgeworCQlpZiAocnh0eF9mbGFncyAmIE5WX1NFVFVQX1RYX1JJTkcpCiAJCQl3cml0ZWwoZG1hX2xvdyhucC0+cmluZ19hZGRyICsgbnAtPnJ4X3Jpbmdfc2l6ZSpzaXplb2Yoc3RydWN0IHJpbmdfZGVzYykpLCBiYXNlICsgTnZSZWdUeFJpbmdQaHlzQWRkcik7Ci0JCX0KIAl9IGVsc2UgewogCQlpZiAocnh0eF9mbGFncyAmIE5WX1NFVFVQX1JYX1JJTkcpIHsKIAkJCXdyaXRlbChkbWFfbG93KG5wLT5yaW5nX2FkZHIpLCBiYXNlICsgTnZSZWdSeFJpbmdQaHlzQWRkcik7CkBAIC0xMDE1LDEwICsxMDA3LDggQEAKIAkJCXBjaV9mcmVlX2NvbnNpc3RlbnQobnAtPnBjaV9kZXYsIHNpemVvZihzdHJ1Y3QgcmluZ19kZXNjX2V4KSAqIChucC0+cnhfcmluZ19zaXplICsgbnAtPnR4X3Jpbmdfc2l6ZSksCiAJCQkJCSAgICBucC0+cnhfcmluZy5leCwgbnAtPnJpbmdfYWRkcik7CiAJfQotCWlmIChucC0+cnhfc2tiKQotCQlrZnJlZShucC0+cnhfc2tiKTsKLQlpZiAobnAtPnR4X3NrYikKLQkJa2ZyZWUobnAtPnR4X3NrYik7CisJa2ZyZWUobnAtPnJ4X3NrYik7CisJa2ZyZWUobnAtPnR4X3NrYik7CiB9CiAKIHN0YXRpYyBpbnQgdXNpbmdfbXVsdGlfaXJxcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtMTE0NSwyMyArMTEzNSwxNSBAQAogCXdyaXRlbChyZWcsIGJhc2UgKyBOdlJlZ01JSUNvbnRyb2wpOwogCiAJaWYgKHJlZ19kZWxheShkZXYsIE52UmVnTUlJQ29udHJvbCwgTlZSRUdfTUlJQ1RMX0lOVVNFLCAwLAotCQkJTlZfTUlJUEhZX0RFTEFZLCBOVl9NSUlQSFlfREVMQVlNQVgsIE5VTEwpKSB7Ci0JCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IG1paV9ydyBvZiByZWcgJWQgYXQgUEhZICVkIHRpbWVkIG91dC5cbiIsCi0JCQkJZGV2LT5uYW1lLCBtaWlyZWcsIGFkZHIpOworCQkJTlZfTUlJUEhZX0RFTEFZLCBOVl9NSUlQSFlfREVMQVlNQVgpKSB7CiAJCXJldHZhbCA9IC0xOwogCX0gZWxzZSBpZiAodmFsdWUgIT0gTUlJX1JFQUQpIHsKIAkJLyogaXQgd2FzIGEgd3JpdGUgb3BlcmF0aW9uIC0gZmV3ZXIgZmFpbHVyZXMgYXJlIGRldGVjdGFibGUgKi8KLQkJZHByaW50ayhLRVJOX0RFQlVHICIlczogbWlpX3J3IHdyb3RlIDB4JXggdG8gcmVnICVkIGF0IFBIWSAlZFxuIiwKLQkJCQlkZXYtPm5hbWUsIHZhbHVlLCBtaWlyZWcsIGFkZHIpOwogCQlyZXR2YWwgPSAwOwogCX0gZWxzZSBpZiAocmVhZGwoYmFzZSArIE52UmVnTUlJU3RhdHVzKSAmIE5WUkVHX01JSVNUQVRfRVJST1IpIHsKLQkJZHByaW50ayhLRVJOX0RFQlVHICIlczogbWlpX3J3IG9mIHJlZyAlZCBhdCBQSFkgJWQgZmFpbGVkLlxuIiwKLQkJCQlkZXYtPm5hbWUsIG1paXJlZywgYWRkcik7CiAJCXJldHZhbCA9IC0xOwogCX0gZWxzZSB7CiAJCXJldHZhbCA9IHJlYWRsKGJhc2UgKyBOdlJlZ01JSURhdGEpOwotCQlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBtaWlfcncgcmVhZCBmcm9tIHJlZyAlZCBhdCBQSFkgJWQ6IDB4JXguXG4iLAotCQkJCWRldi0+bmFtZSwgbWlpcmVnLCBhZGRyLCByZXR2YWwpOwogCX0KIAogCXJldHVybiByZXR2YWw7CkBAIC0xMTc0LDE2ICsxMTU2LDE1IEBACiAJdW5zaWduZWQgaW50IHRyaWVzID0gMDsKIAogCW1paWNvbnRyb2wgPSBCTUNSX1JFU0VUIHwgYm1jcl9zZXR1cDsKLQlpZiAobWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIE1JSV9CTUNSLCBtaWljb250cm9sKSkgeworCWlmIChtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgTUlJX0JNQ1IsIG1paWNvbnRyb2wpKQogCQlyZXR1cm4gLTE7Ci0JfQogCiAJLyogd2FpdCBmb3IgNTAwbXMgKi8KIAltc2xlZXAoNTAwKTsKIAogCS8qIG11c3Qgd2FpdCB0aWxsIHJlc2V0IGlzIGRlYXNzZXJ0ZWQgKi8KIAl3aGlsZSAobWlpY29udHJvbCAmIEJNQ1JfUkVTRVQpIHsKLQkJbXNsZWVwKDEwKTsKKwkJdXNsZWVwX3JhbmdlKDEwMDAwLCAyMDAwMCk7CiAJCW1paWNvbnRyb2wgPSBtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgTUlJX0JNQ1IsIE1JSV9SRUFEKTsKIAkJLyogRklYTUU6IDEwMCB0cmllcyBzZWVtIGV4Y2Vzc2l2ZSAqLwogCQlpZiAodHJpZXMrKyA+IDEwMCkKQEAgLTExOTIsMTA2ICsxMTczLDIzOSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGluaXRfcmVhbHRla184MjExYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZmVfcHJpdiAqbnApCit7CisJc3RhdGljIGNvbnN0IHN0cnVjdCB7CisJCWludCByZWc7CisJCWludCBpbml0OworCX0gcmlbXSA9IHsKKwkJeyBQSFlfUkVBTFRFS19JTklUX1JFRzEsIFBIWV9SRUFMVEVLX0lOSVQxIH0sCisJCXsgUEhZX1JFQUxURUtfSU5JVF9SRUcyLCBQSFlfUkVBTFRFS19JTklUMiB9LAorCQl7IFBIWV9SRUFMVEVLX0lOSVRfUkVHMSwgUEhZX1JFQUxURUtfSU5JVDMgfSwKKwkJeyBQSFlfUkVBTFRFS19JTklUX1JFRzMsIFBIWV9SRUFMVEVLX0lOSVQ0IH0sCisJCXsgUEhZX1JFQUxURUtfSU5JVF9SRUc0LCBQSFlfUkVBTFRFS19JTklUNSB9LAorCQl7IFBIWV9SRUFMVEVLX0lOSVRfUkVHNSwgUEhZX1JFQUxURUtfSU5JVDYgfSwKKwkJeyBQSFlfUkVBTFRFS19JTklUX1JFRzEsIFBIWV9SRUFMVEVLX0lOSVQxIH0sCisJfTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJpKTsgaSsrKSB7CisJCWlmIChtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgcmlbaV0ucmVnLCByaVtpXS5pbml0KSkKKwkJCXJldHVybiBQSFlfRVJST1I7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaW5pdF9yZWFsdGVrXzgyMTFjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBmZV9wcml2ICpucCkKK3sKKwl1MzIgcmVnOworCXU4IF9faW9tZW0gKmJhc2UgPSBnZXRfaHdiYXNlKGRldik7CisJdTMyIHBvd2Vyc3RhdGUgPSByZWFkbChiYXNlICsgTnZSZWdQb3dlclN0YXRlMik7CisKKwkvKiBuZWVkIHRvIHBlcmZvcm0gaHcgcGh5IHJlc2V0ICovCisJcG93ZXJzdGF0ZSB8PSBOVlJFR19QT1dFUlNUQVRFMl9QSFlfUkVTRVQ7CisJd3JpdGVsKHBvd2Vyc3RhdGUsIGJhc2UgKyBOdlJlZ1Bvd2VyU3RhdGUyKTsKKwltc2xlZXAoMjUpOworCisJcG93ZXJzdGF0ZSAmPSB+TlZSRUdfUE9XRVJTVEFURTJfUEhZX1JFU0VUOworCXdyaXRlbChwb3dlcnN0YXRlLCBiYXNlICsgTnZSZWdQb3dlclN0YXRlMik7CisJbXNsZWVwKDI1KTsKKworCXJlZyA9IG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBQSFlfUkVBTFRFS19JTklUX1JFRzYsIE1JSV9SRUFEKTsKKwlyZWcgfD0gUEhZX1JFQUxURUtfSU5JVDk7CisJaWYgKG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBQSFlfUkVBTFRFS19JTklUX1JFRzYsIHJlZykpCisJCXJldHVybiBQSFlfRVJST1I7CisJaWYgKG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLAorCQkgICBQSFlfUkVBTFRFS19JTklUX1JFRzEsIFBIWV9SRUFMVEVLX0lOSVQxMCkpCisJCXJldHVybiBQSFlfRVJST1I7CisJcmVnID0gbWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIFBIWV9SRUFMVEVLX0lOSVRfUkVHNywgTUlJX1JFQUQpOworCWlmICghKHJlZyAmIFBIWV9SRUFMVEVLX0lOSVQxMSkpIHsKKwkJcmVnIHw9IFBIWV9SRUFMVEVLX0lOSVQxMTsKKwkJaWYgKG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBQSFlfUkVBTFRFS19JTklUX1JFRzcsIHJlZykpCisJCQlyZXR1cm4gUEhZX0VSUk9SOworCX0KKwlpZiAobWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsCisJCSAgIFBIWV9SRUFMVEVLX0lOSVRfUkVHMSwgUEhZX1JFQUxURUtfSU5JVDEpKQorCQlyZXR1cm4gUEhZX0VSUk9SOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaW5pdF9yZWFsdGVrXzgyMDEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGZlX3ByaXYgKm5wKQoreworCXUzMiBwaHlfcmVzZXJ2ZWQ7CisKKwlpZiAobnAtPmRyaXZlcl9kYXRhICYgREVWX05FRURfUEhZX0lOSVRfRklYKSB7CisJCXBoeV9yZXNlcnZlZCA9IG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLAorCQkJCSAgICAgIFBIWV9SRUFMVEVLX0lOSVRfUkVHNiwgTUlJX1JFQUQpOworCQlwaHlfcmVzZXJ2ZWQgfD0gUEhZX1JFQUxURUtfSU5JVDc7CisJCWlmIChtaWlfcncoZGV2LCBucC0+cGh5YWRkciwKKwkJCSAgIFBIWV9SRUFMVEVLX0lOSVRfUkVHNiwgcGh5X3Jlc2VydmVkKSkKKwkJCXJldHVybiBQSFlfRVJST1I7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaW5pdF9yZWFsdGVrXzgyMDFfY3Jvc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGZlX3ByaXYgKm5wKQoreworCXUzMiBwaHlfcmVzZXJ2ZWQ7CisKKwlpZiAocGh5X2Nyb3NzID09IE5WX0NST1NTT1ZFUl9ERVRFQ1RJT05fRElTQUJMRUQpIHsKKwkJaWYgKG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLAorCQkJICAgUEhZX1JFQUxURUtfSU5JVF9SRUcxLCBQSFlfUkVBTFRFS19JTklUMykpCisJCQlyZXR1cm4gUEhZX0VSUk9SOworCQlwaHlfcmVzZXJ2ZWQgPSBtaWlfcncoZGV2LCBucC0+cGh5YWRkciwKKwkJCQkgICAgICBQSFlfUkVBTFRFS19JTklUX1JFRzIsIE1JSV9SRUFEKTsKKwkJcGh5X3Jlc2VydmVkICY9IH5QSFlfUkVBTFRFS19JTklUX01TSzE7CisJCXBoeV9yZXNlcnZlZCB8PSBQSFlfUkVBTFRFS19JTklUMzsKKwkJaWYgKG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLAorCQkJICAgUEhZX1JFQUxURUtfSU5JVF9SRUcyLCBwaHlfcmVzZXJ2ZWQpKQorCQkJcmV0dXJuIFBIWV9FUlJPUjsKKwkJaWYgKG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLAorCQkJICAgUEhZX1JFQUxURUtfSU5JVF9SRUcxLCBQSFlfUkVBTFRFS19JTklUMSkpCisJCQlyZXR1cm4gUEhZX0VSUk9SOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGluaXRfY2ljYWRhKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBmZV9wcml2ICpucCwKKwkJICAgICAgIHUzMiBwaHlpbnRlcmZhY2UpCit7CisJdTMyIHBoeV9yZXNlcnZlZDsKKworCWlmIChwaHlpbnRlcmZhY2UgJiBQSFlfUkdNSUkpIHsKKwkJcGh5X3Jlc2VydmVkID0gbWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIE1JSV9SRVNWMSwgTUlJX1JFQUQpOworCQlwaHlfcmVzZXJ2ZWQgJj0gfihQSFlfQ0lDQURBX0lOSVQxIHwgUEhZX0NJQ0FEQV9JTklUMik7CisJCXBoeV9yZXNlcnZlZCB8PSAoUEhZX0NJQ0FEQV9JTklUMyB8IFBIWV9DSUNBREFfSU5JVDQpOworCQlpZiAobWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIE1JSV9SRVNWMSwgcGh5X3Jlc2VydmVkKSkKKwkJCXJldHVybiBQSFlfRVJST1I7CisJCXBoeV9yZXNlcnZlZCA9IG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBNSUlfTkNPTkZJRywgTUlJX1JFQUQpOworCQlwaHlfcmVzZXJ2ZWQgfD0gUEhZX0NJQ0FEQV9JTklUNTsKKwkJaWYgKG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBNSUlfTkNPTkZJRywgcGh5X3Jlc2VydmVkKSkKKwkJCXJldHVybiBQSFlfRVJST1I7CisJfQorCXBoeV9yZXNlcnZlZCA9IG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBNSUlfU1JFVklTSU9OLCBNSUlfUkVBRCk7CisJcGh5X3Jlc2VydmVkIHw9IFBIWV9DSUNBREFfSU5JVDY7CisJaWYgKG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBNSUlfU1JFVklTSU9OLCBwaHlfcmVzZXJ2ZWQpKQorCQlyZXR1cm4gUEhZX0VSUk9SOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaW5pdF92aXRlc3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBmZV9wcml2ICpucCkKK3sKKwl1MzIgcGh5X3Jlc2VydmVkOworCisJaWYgKG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLAorCQkgICBQSFlfVklURVNTRV9JTklUX1JFRzEsIFBIWV9WSVRFU1NFX0lOSVQxKSkKKwkJcmV0dXJuIFBIWV9FUlJPUjsKKwlpZiAobWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsCisJCSAgIFBIWV9WSVRFU1NFX0lOSVRfUkVHMiwgUEhZX1ZJVEVTU0VfSU5JVDIpKQorCQlyZXR1cm4gUEhZX0VSUk9SOworCXBoeV9yZXNlcnZlZCA9IG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLAorCQkJICAgICAgUEhZX1ZJVEVTU0VfSU5JVF9SRUc0LCBNSUlfUkVBRCk7CisJaWYgKG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBQSFlfVklURVNTRV9JTklUX1JFRzQsIHBoeV9yZXNlcnZlZCkpCisJCXJldHVybiBQSFlfRVJST1I7CisJcGh5X3Jlc2VydmVkID0gbWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsCisJCQkgICAgICBQSFlfVklURVNTRV9JTklUX1JFRzMsIE1JSV9SRUFEKTsKKwlwaHlfcmVzZXJ2ZWQgJj0gflBIWV9WSVRFU1NFX0lOSVRfTVNLMTsKKwlwaHlfcmVzZXJ2ZWQgfD0gUEhZX1ZJVEVTU0VfSU5JVDM7CisJaWYgKG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBQSFlfVklURVNTRV9JTklUX1JFRzMsIHBoeV9yZXNlcnZlZCkpCisJCXJldHVybiBQSFlfRVJST1I7CisJaWYgKG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLAorCQkgICBQSFlfVklURVNTRV9JTklUX1JFRzIsIFBIWV9WSVRFU1NFX0lOSVQ0KSkKKwkJcmV0dXJuIFBIWV9FUlJPUjsKKwlpZiAobWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsCisJCSAgIFBIWV9WSVRFU1NFX0lOSVRfUkVHMiwgUEhZX1ZJVEVTU0VfSU5JVDUpKQorCQlyZXR1cm4gUEhZX0VSUk9SOworCXBoeV9yZXNlcnZlZCA9IG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLAorCQkJICAgICAgUEhZX1ZJVEVTU0VfSU5JVF9SRUc0LCBNSUlfUkVBRCk7CisJcGh5X3Jlc2VydmVkICY9IH5QSFlfVklURVNTRV9JTklUX01TSzE7CisJcGh5X3Jlc2VydmVkIHw9IFBIWV9WSVRFU1NFX0lOSVQzOworCWlmIChtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgUEhZX1ZJVEVTU0VfSU5JVF9SRUc0LCBwaHlfcmVzZXJ2ZWQpKQorCQlyZXR1cm4gUEhZX0VSUk9SOworCXBoeV9yZXNlcnZlZCA9IG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLAorCQkJICAgICAgUEhZX1ZJVEVTU0VfSU5JVF9SRUczLCBNSUlfUkVBRCk7CisJaWYgKG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBQSFlfVklURVNTRV9JTklUX1JFRzMsIHBoeV9yZXNlcnZlZCkpCisJCXJldHVybiBQSFlfRVJST1I7CisJaWYgKG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLAorCQkgICBQSFlfVklURVNTRV9JTklUX1JFRzIsIFBIWV9WSVRFU1NFX0lOSVQ2KSkKKwkJcmV0dXJuIFBIWV9FUlJPUjsKKwlpZiAobWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsCisJCSAgIFBIWV9WSVRFU1NFX0lOSVRfUkVHMiwgUEhZX1ZJVEVTU0VfSU5JVDcpKQorCQlyZXR1cm4gUEhZX0VSUk9SOworCXBoeV9yZXNlcnZlZCA9IG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLAorCQkJICAgICAgUEhZX1ZJVEVTU0VfSU5JVF9SRUc0LCBNSUlfUkVBRCk7CisJaWYgKG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBQSFlfVklURVNTRV9JTklUX1JFRzQsIHBoeV9yZXNlcnZlZCkpCisJCXJldHVybiBQSFlfRVJST1I7CisJcGh5X3Jlc2VydmVkID0gbWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsCisJCQkgICAgICBQSFlfVklURVNTRV9JTklUX1JFRzMsIE1JSV9SRUFEKTsKKwlwaHlfcmVzZXJ2ZWQgJj0gflBIWV9WSVRFU1NFX0lOSVRfTVNLMjsKKwlwaHlfcmVzZXJ2ZWQgfD0gUEhZX1ZJVEVTU0VfSU5JVDg7CisJaWYgKG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBQSFlfVklURVNTRV9JTklUX1JFRzMsIHBoeV9yZXNlcnZlZCkpCisJCXJldHVybiBQSFlfRVJST1I7CisJaWYgKG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLAorCQkgICBQSFlfVklURVNTRV9JTklUX1JFRzIsIFBIWV9WSVRFU1NFX0lOSVQ5KSkKKwkJcmV0dXJuIFBIWV9FUlJPUjsKKwlpZiAobWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsCisJCSAgIFBIWV9WSVRFU1NFX0lOSVRfUkVHMSwgUEhZX1ZJVEVTU0VfSU5JVDEwKSkKKwkJcmV0dXJuIFBIWV9FUlJPUjsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHBoeV9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGZlX3ByaXYgKm5wID0gZ2V0X252cHJpdihkZXYpOwogCXU4IF9faW9tZW0gKmJhc2UgPSBnZXRfaHdiYXNlKGRldik7Ci0JdTMyIHBoeWludGVyZmFjZSwgcGh5X3Jlc2VydmVkLCBtaWlfc3RhdHVzLCBtaWlfY29udHJvbCwgbWlpX2NvbnRyb2xfMTAwMCxyZWc7CisJdTMyIHBoeWludGVyZmFjZTsKKwl1MzIgbWlpX3N0YXR1cywgbWlpX2NvbnRyb2wsIG1paV9jb250cm9sXzEwMDAsIHJlZzsKIAogCS8qIHBoeSBlcnJhdGEgZm9yIEUzMDE2IHBoeSAqLwogCWlmIChucC0+cGh5X21vZGVsID09IFBIWV9NT0RFTF9NQVJWRUxMX0UzMDE2KSB7CiAJCXJlZyA9IG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBNSUlfTkNPTkZJRywgTUlJX1JFQUQpOwogCQlyZWcgJj0gflBIWV9NQVJWRUxMX0UzMDE2X0lOSVRNQVNLOwogCQlpZiAobWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIE1JSV9OQ09ORklHLCByZWcpKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogcGh5IHdyaXRlIHRvIGVycmF0YSByZWcgZmFpbGVkLlxuIiwgcGNpX25hbWUobnAtPnBjaV9kZXYpKTsKKwkJCW5ldGRldl9pbmZvKGRldiwgIiVzOiBwaHkgd3JpdGUgdG8gZXJyYXRhIHJlZyBmYWlsZWRcbiIsCisJCQkJICAgIHBjaV9uYW1lKG5wLT5wY2lfZGV2KSk7CiAJCQlyZXR1cm4gUEhZX0VSUk9SOwogCQl9CiAJfQogCWlmIChucC0+cGh5X291aSA9PSBQSFlfT1VJX1JFQUxURUspIHsKIAkJaWYgKG5wLT5waHlfbW9kZWwgPT0gUEhZX01PREVMX1JFQUxURUtfODIxMSAmJgogCQkgICAgbnAtPnBoeV9yZXYgPT0gUEhZX1JFVl9SRUFMVEVLXzgyMTFCKSB7Ci0JCQlpZiAobWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIFBIWV9SRUFMVEVLX0lOSVRfUkVHMSwgUEhZX1JFQUxURUtfSU5JVDEpKSB7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHBoeSBpbml0IGZhaWxlZC5cbiIsIHBjaV9uYW1lKG5wLT5wY2lfZGV2KSk7CisJCQlpZiAoaW5pdF9yZWFsdGVrXzgyMTFiKGRldiwgbnApKSB7CisJCQkJbmV0ZGV2X2luZm8oZGV2LCAiJXM6IHBoeSBpbml0IGZhaWxlZFxuIiwKKwkJCQkJICAgIHBjaV9uYW1lKG5wLT5wY2lfZGV2KSk7CiAJCQkJcmV0dXJuIFBIWV9FUlJPUjsKIAkJCX0KLQkJCWlmIChtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgUEhZX1JFQUxURUtfSU5JVF9SRUcyLCBQSFlfUkVBTFRFS19JTklUMikpIHsKLQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogcGh5IGluaXQgZmFpbGVkLlxuIiwgcGNpX25hbWUobnAtPnBjaV9kZXYpKTsKKwkJfSBlbHNlIGlmIChucC0+cGh5X21vZGVsID09IFBIWV9NT0RFTF9SRUFMVEVLXzgyMTEgJiYKKwkJCSAgIG5wLT5waHlfcmV2ID09IFBIWV9SRVZfUkVBTFRFS184MjExQykgeworCQkJaWYgKGluaXRfcmVhbHRla184MjExYyhkZXYsIG5wKSkgeworCQkJCW5ldGRldl9pbmZvKGRldiwgIiVzOiBwaHkgaW5pdCBmYWlsZWRcbiIsCisJCQkJCSAgICBwY2lfbmFtZShucC0+cGNpX2RldikpOwogCQkJCXJldHVybiBQSFlfRVJST1I7CiAJCQl9Ci0JCQlpZiAobWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIFBIWV9SRUFMVEVLX0lOSVRfUkVHMSwgUEhZX1JFQUxURUtfSU5JVDMpKSB7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHBoeSBpbml0IGZhaWxlZC5cbiIsIHBjaV9uYW1lKG5wLT5wY2lfZGV2KSk7CisJCX0gZWxzZSBpZiAobnAtPnBoeV9tb2RlbCA9PSBQSFlfTU9ERUxfUkVBTFRFS184MjAxKSB7CisJCQlpZiAoaW5pdF9yZWFsdGVrXzgyMDEoZGV2LCBucCkpIHsKKwkJCQluZXRkZXZfaW5mbyhkZXYsICIlczogcGh5IGluaXQgZmFpbGVkXG4iLAorCQkJCQkgICAgcGNpX25hbWUobnAtPnBjaV9kZXYpKTsKIAkJCQlyZXR1cm4gUEhZX0VSUk9SOwogCQkJfQotCQkJaWYgKG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBQSFlfUkVBTFRFS19JTklUX1JFRzMsIFBIWV9SRUFMVEVLX0lOSVQ0KSkgewotCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBwaHkgaW5pdCBmYWlsZWQuXG4iLCBwY2lfbmFtZShucC0+cGNpX2RldikpOwotCQkJCXJldHVybiBQSFlfRVJST1I7Ci0JCQl9Ci0JCQlpZiAobWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIFBIWV9SRUFMVEVLX0lOSVRfUkVHNCwgUEhZX1JFQUxURUtfSU5JVDUpKSB7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHBoeSBpbml0IGZhaWxlZC5cbiIsIHBjaV9uYW1lKG5wLT5wY2lfZGV2KSk7Ci0JCQkJcmV0dXJuIFBIWV9FUlJPUjsKLQkJCX0KLQkJCWlmIChtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgUEhZX1JFQUxURUtfSU5JVF9SRUc1LCBQSFlfUkVBTFRFS19JTklUNikpIHsKLQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogcGh5IGluaXQgZmFpbGVkLlxuIiwgcGNpX25hbWUobnAtPnBjaV9kZXYpKTsKLQkJCQlyZXR1cm4gUEhZX0VSUk9SOwotCQkJfQotCQkJaWYgKG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBQSFlfUkVBTFRFS19JTklUX1JFRzEsIFBIWV9SRUFMVEVLX0lOSVQxKSkgewotCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBwaHkgaW5pdCBmYWlsZWQuXG4iLCBwY2lfbmFtZShucC0+cGNpX2RldikpOwotCQkJCXJldHVybiBQSFlfRVJST1I7Ci0JCQl9Ci0JCX0KLQkJaWYgKG5wLT5waHlfbW9kZWwgPT0gUEhZX01PREVMX1JFQUxURUtfODIxMSAmJgotCQkgICAgbnAtPnBoeV9yZXYgPT0gUEhZX1JFVl9SRUFMVEVLXzgyMTFDKSB7Ci0JCQl1MzIgcG93ZXJzdGF0ZSA9IHJlYWRsKGJhc2UgKyBOdlJlZ1Bvd2VyU3RhdGUyKTsKLQotCQkJLyogbmVlZCB0byBwZXJmb3JtIGh3IHBoeSByZXNldCAqLwotCQkJcG93ZXJzdGF0ZSB8PSBOVlJFR19QT1dFUlNUQVRFMl9QSFlfUkVTRVQ7Ci0JCQl3cml0ZWwocG93ZXJzdGF0ZSwgYmFzZSArIE52UmVnUG93ZXJTdGF0ZTIpOwotCQkJbXNsZWVwKDI1KTsKLQotCQkJcG93ZXJzdGF0ZSAmPSB+TlZSRUdfUE9XRVJTVEFURTJfUEhZX1JFU0VUOwotCQkJd3JpdGVsKHBvd2Vyc3RhdGUsIGJhc2UgKyBOdlJlZ1Bvd2VyU3RhdGUyKTsKLQkJCW1zbGVlcCgyNSk7Ci0KLQkJCXJlZyA9IG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBQSFlfUkVBTFRFS19JTklUX1JFRzYsIE1JSV9SRUFEKTsKLQkJCXJlZyB8PSBQSFlfUkVBTFRFS19JTklUOTsKLQkJCWlmIChtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgUEhZX1JFQUxURUtfSU5JVF9SRUc2LCByZWcpKSB7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHBoeSBpbml0IGZhaWxlZC5cbiIsIHBjaV9uYW1lKG5wLT5wY2lfZGV2KSk7Ci0JCQkJcmV0dXJuIFBIWV9FUlJPUjsKLQkJCX0KLQkJCWlmIChtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgUEhZX1JFQUxURUtfSU5JVF9SRUcxLCBQSFlfUkVBTFRFS19JTklUMTApKSB7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHBoeSBpbml0IGZhaWxlZC5cbiIsIHBjaV9uYW1lKG5wLT5wY2lfZGV2KSk7Ci0JCQkJcmV0dXJuIFBIWV9FUlJPUjsKLQkJCX0KLQkJCXJlZyA9IG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBQSFlfUkVBTFRFS19JTklUX1JFRzcsIE1JSV9SRUFEKTsKLQkJCWlmICghKHJlZyAmIFBIWV9SRUFMVEVLX0lOSVQxMSkpIHsKLQkJCQlyZWcgfD0gUEhZX1JFQUxURUtfSU5JVDExOwotCQkJCWlmIChtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgUEhZX1JFQUxURUtfSU5JVF9SRUc3LCByZWcpKSB7Ci0JCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBwaHkgaW5pdCBmYWlsZWQuXG4iLCBwY2lfbmFtZShucC0+cGNpX2RldikpOwotCQkJCQlyZXR1cm4gUEhZX0VSUk9SOwotCQkJCX0KLQkJCX0KLQkJCWlmIChtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgUEhZX1JFQUxURUtfSU5JVF9SRUcxLCBQSFlfUkVBTFRFS19JTklUMSkpIHsKLQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogcGh5IGluaXQgZmFpbGVkLlxuIiwgcGNpX25hbWUobnAtPnBjaV9kZXYpKTsKLQkJCQlyZXR1cm4gUEhZX0VSUk9SOwotCQkJfQotCQl9Ci0JCWlmIChucC0+cGh5X21vZGVsID09IFBIWV9NT0RFTF9SRUFMVEVLXzgyMDEpIHsKLQkJCWlmIChucC0+ZHJpdmVyX2RhdGEgJiBERVZfTkVFRF9QSFlfSU5JVF9GSVgpIHsKLQkJCQlwaHlfcmVzZXJ2ZWQgPSBtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgUEhZX1JFQUxURUtfSU5JVF9SRUc2LCBNSUlfUkVBRCk7Ci0JCQkJcGh5X3Jlc2VydmVkIHw9IFBIWV9SRUFMVEVLX0lOSVQ3OwotCQkJCWlmIChtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgUEhZX1JFQUxURUtfSU5JVF9SRUc2LCBwaHlfcmVzZXJ2ZWQpKSB7Ci0JCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBwaHkgaW5pdCBmYWlsZWQuXG4iLCBwY2lfbmFtZShucC0+cGNpX2RldikpOwotCQkJCQlyZXR1cm4gUEhZX0VSUk9SOwotCQkJCX0KLQkJCX0KIAkJfQogCX0KIAogCS8qIHNldCBhZHZlcnRpc2UgcmVnaXN0ZXIgKi8KIAlyZWcgPSBtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgTUlJX0FEVkVSVElTRSwgTUlJX1JFQUQpOwotCXJlZyB8PSAoQURWRVJUSVNFXzEwSEFMRnxBRFZFUlRJU0VfMTBGVUxMfEFEVkVSVElTRV8xMDBIQUxGfEFEVkVSVElTRV8xMDBGVUxMfEFEVkVSVElTRV9QQVVTRV9BU1lNfEFEVkVSVElTRV9QQVVTRV9DQVApOworCXJlZyB8PSAoQURWRVJUSVNFXzEwSEFMRiB8IEFEVkVSVElTRV8xMEZVTEwgfAorCQlBRFZFUlRJU0VfMTAwSEFMRiB8IEFEVkVSVElTRV8xMDBGVUxMIHwKKwkJQURWRVJUSVNFX1BBVVNFX0FTWU0gfCBBRFZFUlRJU0VfUEFVU0VfQ0FQKTsKIAlpZiAobWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIE1JSV9BRFZFUlRJU0UsIHJlZykpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHBoeSB3cml0ZSB0byBhZHZlcnRpc2UgZmFpbGVkLlxuIiwgcGNpX25hbWUobnAtPnBjaV9kZXYpKTsKKwkJbmV0ZGV2X2luZm8oZGV2LCAiJXM6IHBoeSB3cml0ZSB0byBhZHZlcnRpc2UgZmFpbGVkXG4iLAorCQkJICAgIHBjaV9uYW1lKG5wLT5wY2lfZGV2KSk7CiAJCXJldHVybiBQSFlfRVJST1I7CiAJfQogCkBAIC0xMzAyLDcgKzE0MTYsOCBAQAogCW1paV9zdGF0dXMgPSBtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgTUlJX0JNU1IsIE1JSV9SRUFEKTsKIAlpZiAobWlpX3N0YXR1cyAmIFBIWV9HSUdBQklUKSB7CiAJCW5wLT5naWdhYml0ID0gUEhZX0dJR0FCSVQ7Ci0JCW1paV9jb250cm9sXzEwMDAgPSBtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgTUlJX0NUUkwxMDAwLCBNSUlfUkVBRCk7CisJCW1paV9jb250cm9sXzEwMDAgPSBtaWlfcncoZGV2LCBucC0+cGh5YWRkciwKKwkJCQkJICBNSUlfQ1RSTDEwMDAsIE1JSV9SRUFEKTsKIAkJbWlpX2NvbnRyb2xfMTAwMCAmPSB+QURWRVJUSVNFXzEwMDBIQUxGOwogCQlpZiAocGh5aW50ZXJmYWNlICYgUEhZX1JHTUlJKQogCQkJbWlpX2NvbnRyb2xfMTAwMCB8PSBBRFZFUlRJU0VfMTAwMEZVTEw7CkBAIC0xMzEwLDExICsxNDI1LDExIEBACiAJCQltaWlfY29udHJvbF8xMDAwICY9IH5BRFZFUlRJU0VfMTAwMEZVTEw7CiAKIAkJaWYgKG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBNSUlfQ1RSTDEwMDAsIG1paV9jb250cm9sXzEwMDApKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogcGh5IGluaXQgZmFpbGVkLlxuIiwgcGNpX25hbWUobnAtPnBjaV9kZXYpKTsKKwkJCW5ldGRldl9pbmZvKGRldiwgIiVzOiBwaHkgaW5pdCBmYWlsZWRcbiIsCisJCQkJICAgIHBjaV9uYW1lKG5wLT5wY2lfZGV2KSk7CiAJCQlyZXR1cm4gUEhZX0VSUk9SOwogCQl9Ci0JfQotCWVsc2UKKwl9IGVsc2UKIAkJbnAtPmdpZ2FiaXQgPSAwOwogCiAJbWlpX2NvbnRyb2wgPSBtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgTUlJX0JNQ1IsIE1JSV9SRUFEKTsKQEAgLTEzMjYsNyArMTQ0MSw4IEBACiAJCS8qIHN0YXJ0IGF1dG9uZWcgc2luY2Ugd2UgYWxyZWFkeSBwZXJmb3JtZWQgaHcgcmVzZXQgYWJvdmUgKi8KIAkJbWlpX2NvbnRyb2wgfD0gQk1DUl9BTlJFU1RBUlQ7CiAJCWlmIChtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgTUlJX0JNQ1IsIG1paV9jb250cm9sKSkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHBoeSBpbml0IGZhaWxlZFxuIiwgcGNpX25hbWUobnAtPnBjaV9kZXYpKTsKKwkJCW5ldGRldl9pbmZvKGRldiwgIiVzOiBwaHkgaW5pdCBmYWlsZWRcbiIsCisJCQkJICAgIHBjaV9uYW1lKG5wLT5wY2lfZGV2KSk7CiAJCQlyZXR1cm4gUEhZX0VSUk9SOwogCQl9CiAJfSBlbHNlIHsKQEAgLTEzMzQsMTY0ICsxNDUwLDQxIEBACiAJCSAqIChjZXJ0YWluIHBoeXMgbmVlZCBibWNyIHRvIGJlIHNldHVwIHdpdGggcmVzZXQpCiAJCSAqLwogCQlpZiAocGh5X3Jlc2V0KGRldiwgbWlpX2NvbnRyb2wpKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogcGh5IHJlc2V0IGZhaWxlZFxuIiwgcGNpX25hbWUobnAtPnBjaV9kZXYpKTsKKwkJCW5ldGRldl9pbmZvKGRldiwgIiVzOiBwaHkgcmVzZXQgZmFpbGVkXG4iLAorCQkJCSAgICBwY2lfbmFtZShucC0+cGNpX2RldikpOwogCQkJcmV0dXJuIFBIWV9FUlJPUjsKIAkJfQogCX0KIAogCS8qIHBoeSB2ZW5kb3Igc3BlY2lmaWMgY29uZmlndXJhdGlvbiAqLwotCWlmICgobnAtPnBoeV9vdWkgPT0gUEhZX09VSV9DSUNBREEpICYmIChwaHlpbnRlcmZhY2UgJiBQSFlfUkdNSUkpICkgewotCQlwaHlfcmVzZXJ2ZWQgPSBtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgTUlJX1JFU1YxLCBNSUlfUkVBRCk7Ci0JCXBoeV9yZXNlcnZlZCAmPSB+KFBIWV9DSUNBREFfSU5JVDEgfCBQSFlfQ0lDQURBX0lOSVQyKTsKLQkJcGh5X3Jlc2VydmVkIHw9IChQSFlfQ0lDQURBX0lOSVQzIHwgUEhZX0NJQ0FEQV9JTklUNCk7Ci0JCWlmIChtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgTUlJX1JFU1YxLCBwaHlfcmVzZXJ2ZWQpKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogcGh5IGluaXQgZmFpbGVkLlxuIiwgcGNpX25hbWUobnAtPnBjaV9kZXYpKTsKKwlpZiAoKG5wLT5waHlfb3VpID09IFBIWV9PVUlfQ0lDQURBKSkgeworCQlpZiAoaW5pdF9jaWNhZGEoZGV2LCBucCwgcGh5aW50ZXJmYWNlKSkgeworCQkJbmV0ZGV2X2luZm8oZGV2LCAiJXM6IHBoeSBpbml0IGZhaWxlZFxuIiwKKwkJCQkgICAgcGNpX25hbWUobnAtPnBjaV9kZXYpKTsKIAkJCXJldHVybiBQSFlfRVJST1I7CiAJCX0KLQkJcGh5X3Jlc2VydmVkID0gbWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIE1JSV9OQ09ORklHLCBNSUlfUkVBRCk7Ci0JCXBoeV9yZXNlcnZlZCB8PSBQSFlfQ0lDQURBX0lOSVQ1OwotCQlpZiAobWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIE1JSV9OQ09ORklHLCBwaHlfcmVzZXJ2ZWQpKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogcGh5IGluaXQgZmFpbGVkLlxuIiwgcGNpX25hbWUobnAtPnBjaV9kZXYpKTsKKwl9IGVsc2UgaWYgKG5wLT5waHlfb3VpID09IFBIWV9PVUlfVklURVNTRSkgeworCQlpZiAoaW5pdF92aXRlc3NlKGRldiwgbnApKSB7CisJCQluZXRkZXZfaW5mbyhkZXYsICIlczogcGh5IGluaXQgZmFpbGVkXG4iLAorCQkJCSAgICBwY2lfbmFtZShucC0+cGNpX2RldikpOwogCQkJcmV0dXJuIFBIWV9FUlJPUjsKIAkJfQotCX0KLQlpZiAobnAtPnBoeV9vdWkgPT0gUEhZX09VSV9DSUNBREEpIHsKLQkJcGh5X3Jlc2VydmVkID0gbWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIE1JSV9TUkVWSVNJT04sIE1JSV9SRUFEKTsKLQkJcGh5X3Jlc2VydmVkIHw9IFBIWV9DSUNBREFfSU5JVDY7Ci0JCWlmIChtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgTUlJX1NSRVZJU0lPTiwgcGh5X3Jlc2VydmVkKSkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHBoeSBpbml0IGZhaWxlZC5cbiIsIHBjaV9uYW1lKG5wLT5wY2lfZGV2KSk7Ci0JCQlyZXR1cm4gUEhZX0VSUk9SOwotCQl9Ci0JfQotCWlmIChucC0+cGh5X291aSA9PSBQSFlfT1VJX1ZJVEVTU0UpIHsKLQkJaWYgKG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBQSFlfVklURVNTRV9JTklUX1JFRzEsIFBIWV9WSVRFU1NFX0lOSVQxKSkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHBoeSBpbml0IGZhaWxlZC5cbiIsIHBjaV9uYW1lKG5wLT5wY2lfZGV2KSk7Ci0JCQlyZXR1cm4gUEhZX0VSUk9SOwotCQl9Ci0JCWlmIChtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgUEhZX1ZJVEVTU0VfSU5JVF9SRUcyLCBQSFlfVklURVNTRV9JTklUMikpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBwaHkgaW5pdCBmYWlsZWQuXG4iLCBwY2lfbmFtZShucC0+cGNpX2RldikpOwotCQkJcmV0dXJuIFBIWV9FUlJPUjsKLQkJfQotCQlwaHlfcmVzZXJ2ZWQgPSBtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgUEhZX1ZJVEVTU0VfSU5JVF9SRUc0LCBNSUlfUkVBRCk7Ci0JCWlmIChtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgUEhZX1ZJVEVTU0VfSU5JVF9SRUc0LCBwaHlfcmVzZXJ2ZWQpKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogcGh5IGluaXQgZmFpbGVkLlxuIiwgcGNpX25hbWUobnAtPnBjaV9kZXYpKTsKLQkJCXJldHVybiBQSFlfRVJST1I7Ci0JCX0KLQkJcGh5X3Jlc2VydmVkID0gbWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIFBIWV9WSVRFU1NFX0lOSVRfUkVHMywgTUlJX1JFQUQpOwotCQlwaHlfcmVzZXJ2ZWQgJj0gflBIWV9WSVRFU1NFX0lOSVRfTVNLMTsKLQkJcGh5X3Jlc2VydmVkIHw9IFBIWV9WSVRFU1NFX0lOSVQzOwotCQlpZiAobWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIFBIWV9WSVRFU1NFX0lOSVRfUkVHMywgcGh5X3Jlc2VydmVkKSkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHBoeSBpbml0IGZhaWxlZC5cbiIsIHBjaV9uYW1lKG5wLT5wY2lfZGV2KSk7Ci0JCQlyZXR1cm4gUEhZX0VSUk9SOwotCQl9Ci0JCWlmIChtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgUEhZX1ZJVEVTU0VfSU5JVF9SRUcyLCBQSFlfVklURVNTRV9JTklUNCkpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBwaHkgaW5pdCBmYWlsZWQuXG4iLCBwY2lfbmFtZShucC0+cGNpX2RldikpOwotCQkJcmV0dXJuIFBIWV9FUlJPUjsKLQkJfQotCQlpZiAobWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIFBIWV9WSVRFU1NFX0lOSVRfUkVHMiwgUEhZX1ZJVEVTU0VfSU5JVDUpKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogcGh5IGluaXQgZmFpbGVkLlxuIiwgcGNpX25hbWUobnAtPnBjaV9kZXYpKTsKLQkJCXJldHVybiBQSFlfRVJST1I7Ci0JCX0KLQkJcGh5X3Jlc2VydmVkID0gbWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIFBIWV9WSVRFU1NFX0lOSVRfUkVHNCwgTUlJX1JFQUQpOwotCQlwaHlfcmVzZXJ2ZWQgJj0gflBIWV9WSVRFU1NFX0lOSVRfTVNLMTsKLQkJcGh5X3Jlc2VydmVkIHw9IFBIWV9WSVRFU1NFX0lOSVQzOwotCQlpZiAobWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIFBIWV9WSVRFU1NFX0lOSVRfUkVHNCwgcGh5X3Jlc2VydmVkKSkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHBoeSBpbml0IGZhaWxlZC5cbiIsIHBjaV9uYW1lKG5wLT5wY2lfZGV2KSk7Ci0JCQlyZXR1cm4gUEhZX0VSUk9SOwotCQl9Ci0JCXBoeV9yZXNlcnZlZCA9IG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBQSFlfVklURVNTRV9JTklUX1JFRzMsIE1JSV9SRUFEKTsKLQkJaWYgKG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBQSFlfVklURVNTRV9JTklUX1JFRzMsIHBoeV9yZXNlcnZlZCkpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBwaHkgaW5pdCBmYWlsZWQuXG4iLCBwY2lfbmFtZShucC0+cGNpX2RldikpOwotCQkJcmV0dXJuIFBIWV9FUlJPUjsKLQkJfQotCQlpZiAobWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIFBIWV9WSVRFU1NFX0lOSVRfUkVHMiwgUEhZX1ZJVEVTU0VfSU5JVDYpKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogcGh5IGluaXQgZmFpbGVkLlxuIiwgcGNpX25hbWUobnAtPnBjaV9kZXYpKTsKLQkJCXJldHVybiBQSFlfRVJST1I7Ci0JCX0KLQkJaWYgKG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBQSFlfVklURVNTRV9JTklUX1JFRzIsIFBIWV9WSVRFU1NFX0lOSVQ3KSkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHBoeSBpbml0IGZhaWxlZC5cbiIsIHBjaV9uYW1lKG5wLT5wY2lfZGV2KSk7Ci0JCQlyZXR1cm4gUEhZX0VSUk9SOwotCQl9Ci0JCXBoeV9yZXNlcnZlZCA9IG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBQSFlfVklURVNTRV9JTklUX1JFRzQsIE1JSV9SRUFEKTsKLQkJaWYgKG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBQSFlfVklURVNTRV9JTklUX1JFRzQsIHBoeV9yZXNlcnZlZCkpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBwaHkgaW5pdCBmYWlsZWQuXG4iLCBwY2lfbmFtZShucC0+cGNpX2RldikpOwotCQkJcmV0dXJuIFBIWV9FUlJPUjsKLQkJfQotCQlwaHlfcmVzZXJ2ZWQgPSBtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgUEhZX1ZJVEVTU0VfSU5JVF9SRUczLCBNSUlfUkVBRCk7Ci0JCXBoeV9yZXNlcnZlZCAmPSB+UEhZX1ZJVEVTU0VfSU5JVF9NU0syOwotCQlwaHlfcmVzZXJ2ZWQgfD0gUEhZX1ZJVEVTU0VfSU5JVDg7Ci0JCWlmIChtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgUEhZX1ZJVEVTU0VfSU5JVF9SRUczLCBwaHlfcmVzZXJ2ZWQpKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogcGh5IGluaXQgZmFpbGVkLlxuIiwgcGNpX25hbWUobnAtPnBjaV9kZXYpKTsKLQkJCXJldHVybiBQSFlfRVJST1I7Ci0JCX0KLQkJaWYgKG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBQSFlfVklURVNTRV9JTklUX1JFRzIsIFBIWV9WSVRFU1NFX0lOSVQ5KSkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHBoeSBpbml0IGZhaWxlZC5cbiIsIHBjaV9uYW1lKG5wLT5wY2lfZGV2KSk7Ci0JCQlyZXR1cm4gUEhZX0VSUk9SOwotCQl9Ci0JCWlmIChtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgUEhZX1ZJVEVTU0VfSU5JVF9SRUcxLCBQSFlfVklURVNTRV9JTklUMTApKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogcGh5IGluaXQgZmFpbGVkLlxuIiwgcGNpX25hbWUobnAtPnBjaV9kZXYpKTsKLQkJCXJldHVybiBQSFlfRVJST1I7Ci0JCX0KLQl9Ci0JaWYgKG5wLT5waHlfb3VpID09IFBIWV9PVUlfUkVBTFRFSykgeworCX0gZWxzZSBpZiAobnAtPnBoeV9vdWkgPT0gUEhZX09VSV9SRUFMVEVLKSB7CiAJCWlmIChucC0+cGh5X21vZGVsID09IFBIWV9NT0RFTF9SRUFMVEVLXzgyMTEgJiYKIAkJICAgIG5wLT5waHlfcmV2ID09IFBIWV9SRVZfUkVBTFRFS184MjExQikgewogCQkJLyogcmVzZXQgY291bGQgaGF2ZSBjbGVhcmVkIHRoZXNlIG91dCwgc2V0IHRoZW0gYmFjayAqLwotCQkJaWYgKG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBQSFlfUkVBTFRFS19JTklUX1JFRzEsIFBIWV9SRUFMVEVLX0lOSVQxKSkgewotCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBwaHkgaW5pdCBmYWlsZWQuXG4iLCBwY2lfbmFtZShucC0+cGNpX2RldikpOworCQkJaWYgKGluaXRfcmVhbHRla184MjExYihkZXYsIG5wKSkgeworCQkJCW5ldGRldl9pbmZvKGRldiwgIiVzOiBwaHkgaW5pdCBmYWlsZWRcbiIsCisJCQkJCSAgICBwY2lfbmFtZShucC0+cGNpX2RldikpOwogCQkJCXJldHVybiBQSFlfRVJST1I7CiAJCQl9Ci0JCQlpZiAobWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIFBIWV9SRUFMVEVLX0lOSVRfUkVHMiwgUEhZX1JFQUxURUtfSU5JVDIpKSB7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHBoeSBpbml0IGZhaWxlZC5cbiIsIHBjaV9uYW1lKG5wLT5wY2lfZGV2KSk7CisJCX0gZWxzZSBpZiAobnAtPnBoeV9tb2RlbCA9PSBQSFlfTU9ERUxfUkVBTFRFS184MjAxKSB7CisJCQlpZiAoaW5pdF9yZWFsdGVrXzgyMDEoZGV2LCBucCkgfHwKKwkJCSAgICBpbml0X3JlYWx0ZWtfODIwMV9jcm9zcyhkZXYsIG5wKSkgeworCQkJCW5ldGRldl9pbmZvKGRldiwgIiVzOiBwaHkgaW5pdCBmYWlsZWRcbiIsCisJCQkJCSAgICBwY2lfbmFtZShucC0+cGNpX2RldikpOwogCQkJCXJldHVybiBQSFlfRVJST1I7CiAJCQl9Ci0JCQlpZiAobWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIFBIWV9SRUFMVEVLX0lOSVRfUkVHMSwgUEhZX1JFQUxURUtfSU5JVDMpKSB7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHBoeSBpbml0IGZhaWxlZC5cbiIsIHBjaV9uYW1lKG5wLT5wY2lfZGV2KSk7Ci0JCQkJcmV0dXJuIFBIWV9FUlJPUjsKLQkJCX0KLQkJCWlmIChtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgUEhZX1JFQUxURUtfSU5JVF9SRUczLCBQSFlfUkVBTFRFS19JTklUNCkpIHsKLQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogcGh5IGluaXQgZmFpbGVkLlxuIiwgcGNpX25hbWUobnAtPnBjaV9kZXYpKTsKLQkJCQlyZXR1cm4gUEhZX0VSUk9SOwotCQkJfQotCQkJaWYgKG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBQSFlfUkVBTFRFS19JTklUX1JFRzQsIFBIWV9SRUFMVEVLX0lOSVQ1KSkgewotCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBwaHkgaW5pdCBmYWlsZWQuXG4iLCBwY2lfbmFtZShucC0+cGNpX2RldikpOwotCQkJCXJldHVybiBQSFlfRVJST1I7Ci0JCQl9Ci0JCQlpZiAobWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIFBIWV9SRUFMVEVLX0lOSVRfUkVHNSwgUEhZX1JFQUxURUtfSU5JVDYpKSB7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHBoeSBpbml0IGZhaWxlZC5cbiIsIHBjaV9uYW1lKG5wLT5wY2lfZGV2KSk7Ci0JCQkJcmV0dXJuIFBIWV9FUlJPUjsKLQkJCX0KLQkJCWlmIChtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgUEhZX1JFQUxURUtfSU5JVF9SRUcxLCBQSFlfUkVBTFRFS19JTklUMSkpIHsKLQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogcGh5IGluaXQgZmFpbGVkLlxuIiwgcGNpX25hbWUobnAtPnBjaV9kZXYpKTsKLQkJCQlyZXR1cm4gUEhZX0VSUk9SOwotCQkJfQotCQl9Ci0JCWlmIChucC0+cGh5X21vZGVsID09IFBIWV9NT0RFTF9SRUFMVEVLXzgyMDEpIHsKLQkJCWlmIChucC0+ZHJpdmVyX2RhdGEgJiBERVZfTkVFRF9QSFlfSU5JVF9GSVgpIHsKLQkJCQlwaHlfcmVzZXJ2ZWQgPSBtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgUEhZX1JFQUxURUtfSU5JVF9SRUc2LCBNSUlfUkVBRCk7Ci0JCQkJcGh5X3Jlc2VydmVkIHw9IFBIWV9SRUFMVEVLX0lOSVQ3OwotCQkJCWlmIChtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgUEhZX1JFQUxURUtfSU5JVF9SRUc2LCBwaHlfcmVzZXJ2ZWQpKSB7Ci0JCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBwaHkgaW5pdCBmYWlsZWQuXG4iLCBwY2lfbmFtZShucC0+cGNpX2RldikpOwotCQkJCQlyZXR1cm4gUEhZX0VSUk9SOwotCQkJCX0KLQkJCX0KLQkJCWlmIChwaHlfY3Jvc3MgPT0gTlZfQ1JPU1NPVkVSX0RFVEVDVElPTl9ESVNBQkxFRCkgewotCQkJCWlmIChtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgUEhZX1JFQUxURUtfSU5JVF9SRUcxLCBQSFlfUkVBTFRFS19JTklUMykpIHsKLQkJCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHBoeSBpbml0IGZhaWxlZC5cbiIsIHBjaV9uYW1lKG5wLT5wY2lfZGV2KSk7Ci0JCQkJCXJldHVybiBQSFlfRVJST1I7Ci0JCQkJfQotCQkJCXBoeV9yZXNlcnZlZCA9IG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBQSFlfUkVBTFRFS19JTklUX1JFRzIsIE1JSV9SRUFEKTsKLQkJCQlwaHlfcmVzZXJ2ZWQgJj0gflBIWV9SRUFMVEVLX0lOSVRfTVNLMTsKLQkJCQlwaHlfcmVzZXJ2ZWQgfD0gUEhZX1JFQUxURUtfSU5JVDM7Ci0JCQkJaWYgKG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBQSFlfUkVBTFRFS19JTklUX1JFRzIsIHBoeV9yZXNlcnZlZCkpIHsKLQkJCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHBoeSBpbml0IGZhaWxlZC5cbiIsIHBjaV9uYW1lKG5wLT5wY2lfZGV2KSk7Ci0JCQkJCXJldHVybiBQSFlfRVJST1I7Ci0JCQkJfQotCQkJCWlmIChtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgUEhZX1JFQUxURUtfSU5JVF9SRUcxLCBQSFlfUkVBTFRFS19JTklUMSkpIHsKLQkJCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHBoeSBpbml0IGZhaWxlZC5cbiIsIHBjaV9uYW1lKG5wLT5wY2lfZGV2KSk7Ci0JCQkJCXJldHVybiBQSFlfRVJST1I7Ci0JCQkJfQotCQkJfQogCQl9CiAJfQogCkBAIC0xNTAxLDEyICsxNDk0LDEwIEBACiAJLyogcmVzdGFydCBhdXRvIG5lZ290aWF0aW9uLCBwb3dlciBkb3duIHBoeSAqLwogCW1paV9jb250cm9sID0gbWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIE1JSV9CTUNSLCBNSUlfUkVBRCk7CiAJbWlpX2NvbnRyb2wgfD0gKEJNQ1JfQU5SRVNUQVJUIHwgQk1DUl9BTkVOQUJMRSk7Ci0JaWYgKHBoeV9wb3dlcl9kb3duKSB7CisJaWYgKHBoeV9wb3dlcl9kb3duKQogCQltaWlfY29udHJvbCB8PSBCTUNSX1BET1dOOwotCX0KLQlpZiAobWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIE1JSV9CTUNSLCBtaWlfY29udHJvbCkpIHsKKwlpZiAobWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIE1JSV9CTUNSLCBtaWlfY29udHJvbCkpCiAJCXJldHVybiBQSFlfRVJST1I7Ci0JfQogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNTE3LDcgKzE1MDgsNiBAQAogCXU4IF9faW9tZW0gKmJhc2UgPSBnZXRfaHdiYXNlKGRldik7CiAJdTMyIHJ4X2N0cmwgPSByZWFkbChiYXNlICsgTnZSZWdSZWNlaXZlckNvbnRyb2wpOwogCi0JZHByaW50ayhLRVJOX0RFQlVHICIlczogbnZfc3RhcnRfcnhcbiIsIGRldi0+bmFtZSk7CiAJLyogQWxyZWFkeSBydW5uaW5nPyBTdG9wIGl0LiAqLwogCWlmICgocmVhZGwoYmFzZSArIE52UmVnUmVjZWl2ZXJDb250cm9sKSAmIE5WUkVHX1JDVkNUTF9TVEFSVCkgJiYgIW5wLT5tYWNfaW5fdXNlKSB7CiAJCXJ4X2N0cmwgJj0gfk5WUkVHX1JDVkNUTF9TVEFSVDsKQEAgLTE1MjYsMTIgKzE1MTYsMTAgQEAKIAl9CiAJd3JpdGVsKG5wLT5saW5rc3BlZWQsIGJhc2UgKyBOdlJlZ0xpbmtTcGVlZCk7CiAJcGNpX3B1c2goYmFzZSk7Ci0gICAgICAgIHJ4X2N0cmwgfD0gTlZSRUdfUkNWQ1RMX1NUQVJUOwotICAgICAgICBpZiAobnAtPm1hY19pbl91c2UpCisJcnhfY3RybCB8PSBOVlJFR19SQ1ZDVExfU1RBUlQ7CisJaWYgKG5wLT5tYWNfaW5fdXNlKQogCQlyeF9jdHJsICY9IH5OVlJFR19SQ1ZDVExfUlhfUEFUSF9FTjsKIAl3cml0ZWwocnhfY3RybCwgYmFzZSArIE52UmVnUmVjZWl2ZXJDb250cm9sKTsKLQlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBudl9zdGFydF9yeCB0byBkdXBsZXggJWQsIHNwZWVkIDB4JTA4eC5cbiIsCi0JCQkJZGV2LT5uYW1lLCBucC0+ZHVwbGV4LCBucC0+bGlua3NwZWVkKTsKIAlwY2lfcHVzaChiYXNlKTsKIH0KIApAQCAtMTU0MSwxNSArMTUyOSwxNSBAQAogCXU4IF9faW9tZW0gKmJhc2UgPSBnZXRfaHdiYXNlKGRldik7CiAJdTMyIHJ4X2N0cmwgPSByZWFkbChiYXNlICsgTnZSZWdSZWNlaXZlckNvbnRyb2wpOwogCi0JZHByaW50ayhLRVJOX0RFQlVHICIlczogbnZfc3RvcF9yeFxuIiwgZGV2LT5uYW1lKTsKIAlpZiAoIW5wLT5tYWNfaW5fdXNlKQogCQlyeF9jdHJsICY9IH5OVlJFR19SQ1ZDVExfU1RBUlQ7CiAJZWxzZQogCQlyeF9jdHJsIHw9IE5WUkVHX1JDVkNUTF9SWF9QQVRIX0VOOwogCXdyaXRlbChyeF9jdHJsLCBiYXNlICsgTnZSZWdSZWNlaXZlckNvbnRyb2wpOwotCXJlZ19kZWxheShkZXYsIE52UmVnUmVjZWl2ZXJTdGF0dXMsIE5WUkVHX1JDVlNUQVRfQlVTWSwgMCwKLQkJCU5WX1JYU1RPUF9ERUxBWTEsIE5WX1JYU1RPUF9ERUxBWTFNQVgsCi0JCQlLRVJOX0lORk8gIm52X3N0b3Bfcng6IFJlY2VpdmVyU3RhdHVzIHJlbWFpbmVkIGJ1c3kiKTsKKwlpZiAocmVnX2RlbGF5KGRldiwgTnZSZWdSZWNlaXZlclN0YXR1cywgTlZSRUdfUkNWU1RBVF9CVVNZLCAwLAorCQkgICAgICBOVl9SWFNUT1BfREVMQVkxLCBOVl9SWFNUT1BfREVMQVkxTUFYKSkKKwkJbmV0ZGV2X2luZm8oZGV2LCAiJXM6IFJlY2VpdmVyU3RhdHVzIHJlbWFpbmVkIGJ1c3lcbiIsCisJCQkgICAgX19mdW5jX18pOwogCiAJdWRlbGF5KE5WX1JYU1RPUF9ERUxBWTIpOwogCWlmICghbnAtPm1hY19pbl91c2UpCkBAIC0xNTYyLDcgKzE1NTAsNiBAQAogCXU4IF9faW9tZW0gKmJhc2UgPSBnZXRfaHdiYXNlKGRldik7CiAJdTMyIHR4X2N0cmwgPSByZWFkbChiYXNlICsgTnZSZWdUcmFuc21pdHRlckNvbnRyb2wpOwogCi0JZHByaW50ayhLRVJOX0RFQlVHICIlczogbnZfc3RhcnRfdHhcbiIsIGRldi0+bmFtZSk7CiAJdHhfY3RybCB8PSBOVlJFR19YTUlUQ1RMX1NUQVJUOwogCWlmIChucC0+bWFjX2luX3VzZSkKIAkJdHhfY3RybCAmPSB+TlZSRUdfWE1JVENUTF9UWF9QQVRIX0VOOwpAQCAtMTU3NiwxNSArMTU2MywxNSBAQAogCXU4IF9faW9tZW0gKmJhc2UgPSBnZXRfaHdiYXNlKGRldik7CiAJdTMyIHR4X2N0cmwgPSByZWFkbChiYXNlICsgTnZSZWdUcmFuc21pdHRlckNvbnRyb2wpOwogCi0JZHByaW50ayhLRVJOX0RFQlVHICIlczogbnZfc3RvcF90eFxuIiwgZGV2LT5uYW1lKTsKIAlpZiAoIW5wLT5tYWNfaW5fdXNlKQogCQl0eF9jdHJsICY9IH5OVlJFR19YTUlUQ1RMX1NUQVJUOwogCWVsc2UKIAkJdHhfY3RybCB8PSBOVlJFR19YTUlUQ1RMX1RYX1BBVEhfRU47CiAJd3JpdGVsKHR4X2N0cmwsIGJhc2UgKyBOdlJlZ1RyYW5zbWl0dGVyQ29udHJvbCk7Ci0JcmVnX2RlbGF5KGRldiwgTnZSZWdUcmFuc21pdHRlclN0YXR1cywgTlZSRUdfWE1JVFNUQVRfQlVTWSwgMCwKLQkJCU5WX1RYU1RPUF9ERUxBWTEsIE5WX1RYU1RPUF9ERUxBWTFNQVgsCi0JCQlLRVJOX0lORk8gIm52X3N0b3BfdHg6IFRyYW5zbWl0dGVyU3RhdHVzIHJlbWFpbmVkIGJ1c3kiKTsKKwlpZiAocmVnX2RlbGF5KGRldiwgTnZSZWdUcmFuc21pdHRlclN0YXR1cywgTlZSRUdfWE1JVFNUQVRfQlVTWSwgMCwKKwkJICAgICAgTlZfVFhTVE9QX0RFTEFZMSwgTlZfVFhTVE9QX0RFTEFZMU1BWCkpCisJCW5ldGRldl9pbmZvKGRldiwgIiVzOiBUcmFuc21pdHRlclN0YXR1cyByZW1haW5lZCBidXN5XG4iLAorCQkJICAgIF9fZnVuY19fKTsKIAogCXVkZWxheShOVl9UWFNUT1BfREVMQVkyKTsKIAlpZiAoIW5wLT5tYWNfaW5fdXNlKQpAQCAtMTYwOSw3ICsxNTk2LDYgQEAKIAlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXU4IF9faW9tZW0gKmJhc2UgPSBnZXRfaHdiYXNlKGRldik7CiAKLQlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBudl90eHJ4X3Jlc2V0XG4iLCBkZXYtPm5hbWUpOwogCXdyaXRlbChOVlJFR19UWFJYQ1RMX0JJVDIgfCBOVlJFR19UWFJYQ1RMX1JFU0VUIHwgbnAtPnR4cnhjdGxfYml0cywgYmFzZSArIE52UmVnVHhSeENvbnRyb2wpOwogCXBjaV9wdXNoKGJhc2UpOwogCXVkZWxheShOVl9UWFJYX1JFU0VUX0RFTEFZKTsKQEAgLTE2MjMsOCArMTYwOSw2IEBACiAJdTggX19pb21lbSAqYmFzZSA9IGdldF9od2Jhc2UoZGV2KTsKIAl1MzIgdGVtcDEsIHRlbXAyLCB0ZW1wMzsKIAotCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IG52X21hY19yZXNldFxuIiwgZGV2LT5uYW1lKTsKLQogCXdyaXRlbChOVlJFR19UWFJYQ1RMX0JJVDIgfCBOVlJFR19UWFJYQ1RMX1JFU0VUIHwgbnAtPnR4cnhjdGxfYml0cywgYmFzZSArIE52UmVnVHhSeENvbnRyb2wpOwogCXBjaV9wdXNoKGJhc2UpOwogCkBAIC0xNzQ1LDcgKzE3MjksNyBAQAogc3RhdGljIGludCBudl9hbGxvY19yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IHJpbmdfZGVzYyogbGVzc19yeDsKKwlzdHJ1Y3QgcmluZ19kZXNjICpsZXNzX3J4OwogCiAJbGVzc19yeCA9IG5wLT5nZXRfcngub3JpZzsKIAlpZiAobGVzc19yeC0tID09IG5wLT5maXJzdF9yeC5vcmlnKQpAQCAtMTc2Nyw5ICsxNzUxLDggQEAKIAkJCQlucC0+cHV0X3J4Lm9yaWcgPSBucC0+Zmlyc3Rfcngub3JpZzsKIAkJCWlmICh1bmxpa2VseShucC0+cHV0X3J4X2N0eCsrID09IG5wLT5sYXN0X3J4X2N0eCkpCiAJCQkJbnAtPnB1dF9yeF9jdHggPSBucC0+Zmlyc3RfcnhfY3R4OwotCQl9IGVsc2UgeworCQl9IGVsc2UKIAkJCXJldHVybiAxOwotCQl9CiAJfQogCXJldHVybiAwOwogfQpAQCAtMTc3Nyw3ICsxNzYwLDcgQEAKIHN0YXRpYyBpbnQgbnZfYWxsb2Nfcnhfb3B0aW1pemVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgcmluZ19kZXNjX2V4KiBsZXNzX3J4OworCXN0cnVjdCByaW5nX2Rlc2NfZXggKmxlc3Nfcng7CiAKIAlsZXNzX3J4ID0gbnAtPmdldF9yeC5leDsKIAlpZiAobGVzc19yeC0tID09IG5wLT5maXJzdF9yeC5leCkKQEAgLTE4MDAsOSArMTc4Myw4IEBACiAJCQkJbnAtPnB1dF9yeC5leCA9IG5wLT5maXJzdF9yeC5leDsKIAkJCWlmICh1bmxpa2VseShucC0+cHV0X3J4X2N0eCsrID09IG5wLT5sYXN0X3J4X2N0eCkpCiAJCQkJbnAtPnB1dF9yeF9jdHggPSBucC0+Zmlyc3RfcnhfY3R4OwotCQl9IGVsc2UgeworCQl9IGVsc2UKIAkJCXJldHVybiAxOwotCQl9CiAJfQogCXJldHVybiAwOwogfQpAQCAtMjAxOCwyNCArMjAwMCwyNCBAQAogCiAvKiBLbm93biBHb29kIHNlZWQgc2V0cyAqLwogc3RhdGljIGNvbnN0IHUzMiBtYWluX3NlZWRzZXRbQkFDS09GRl9TRUVEU0VUX1JPV1NdW0JBQ0tPRkZfU0VFRFNFVF9MRlNSU10gPSB7Ci0gICAgezE0NSwgMTU1LCAxNjUsIDE3NSwgMTg1LCAxOTYsIDIzNSwgMjQ1LCAyNTUsIDI2NSwgMjc1LCAyODUsIDY2MCwgNjkwLCA4NzR9LAotICAgIHsyNDUsIDI1NSwgMjY1LCA1NzUsIDM4NSwgMjk4LCAzMzUsIDM0NSwgMzU1LCAzNjYsIDM3NSwgMzg1LCA3NjEsIDc5MCwgOTc0fSwKLSAgICB7MTQ1LCAxNTUsIDE2NSwgMTc1LCAxODUsIDE5NiwgMjM1LCAyNDUsIDI1NSwgMjY1LCAyNzUsIDI4NSwgNjYwLCA2OTAsIDg3NH0sCi0gICAgezI0NSwgMjU1LCAyNjUsIDU3NSwgMzg1LCAyOTgsIDMzNSwgMzQ1LCAzNTUsIDM2NiwgMzc1LCAzODYsIDc2MSwgNzkwLCA5NzR9LAotICAgIHsyNjYsIDI2NSwgMjc2LCA1ODUsIDM5NywgMjA4LCAzNDUsIDM1NSwgMzY1LCAzNzYsIDM4NSwgMzk2LCA3NzEsIDcwMCwgOTg0fSwKLSAgICB7MjY2LCAyNjUsIDI3NiwgNTg2LCAzOTcsIDIwOCwgMzQ2LCAzNTUsIDM2NSwgMzc2LCAyODUsIDM5NiwgNzcxLCA3MDAsIDk4NH0sCi0gICAgezM2NiwgMzY1LCAzNzYsIDY4NiwgNDk3LCAzMDgsIDQ0NywgNDU1LCA0NjYsIDQ3NiwgNDg1LCA0OTYsIDg3MSwgODAwLCAgODR9LAotICAgIHs0NjYsIDQ2NSwgNDc2LCA3ODYsIDU5NywgNDA4LCA1NDcsIDU1NSwgNTY2LCA1NzYsIDU4NSwgNTk3LCA5NzEsIDkwMCwgMTg0fX07CisJezE0NSwgMTU1LCAxNjUsIDE3NSwgMTg1LCAxOTYsIDIzNSwgMjQ1LCAyNTUsIDI2NSwgMjc1LCAyODUsIDY2MCwgNjkwLCA4NzR9LAorCXsyNDUsIDI1NSwgMjY1LCA1NzUsIDM4NSwgMjk4LCAzMzUsIDM0NSwgMzU1LCAzNjYsIDM3NSwgMzg1LCA3NjEsIDc5MCwgOTc0fSwKKwl7MTQ1LCAxNTUsIDE2NSwgMTc1LCAxODUsIDE5NiwgMjM1LCAyNDUsIDI1NSwgMjY1LCAyNzUsIDI4NSwgNjYwLCA2OTAsIDg3NH0sCisJezI0NSwgMjU1LCAyNjUsIDU3NSwgMzg1LCAyOTgsIDMzNSwgMzQ1LCAzNTUsIDM2NiwgMzc1LCAzODYsIDc2MSwgNzkwLCA5NzR9LAorCXsyNjYsIDI2NSwgMjc2LCA1ODUsIDM5NywgMjA4LCAzNDUsIDM1NSwgMzY1LCAzNzYsIDM4NSwgMzk2LCA3NzEsIDcwMCwgOTg0fSwKKwl7MjY2LCAyNjUsIDI3NiwgNTg2LCAzOTcsIDIwOCwgMzQ2LCAzNTUsIDM2NSwgMzc2LCAyODUsIDM5NiwgNzcxLCA3MDAsIDk4NH0sCisJezM2NiwgMzY1LCAzNzYsIDY4NiwgNDk3LCAzMDgsIDQ0NywgNDU1LCA0NjYsIDQ3NiwgNDg1LCA0OTYsIDg3MSwgODAwLCAgODR9LAorCXs0NjYsIDQ2NSwgNDc2LCA3ODYsIDU5NywgNDA4LCA1NDcsIDU1NSwgNTY2LCA1NzYsIDU4NSwgNTk3LCA5NzEsIDkwMCwgMTg0fSB9OwogCiBzdGF0aWMgY29uc3QgdTMyIGdlYXJfc2VlZHNldFtCQUNLT0ZGX1NFRURTRVRfUk9XU11bQkFDS09GRl9TRUVEU0VUX0xGU1JTXSA9IHsKLSAgICB7MjUxLCAyNjIsIDI3MywgMzI0LCAzMTksIDUwOCwgMzc1LCAzNjQsIDM0MSwgMzcxLCAzOTgsIDE5MywgMzc1LCAgMzAsIDI5NX0sCi0gICAgezM1MSwgMzc1LCAzNzMsIDQ2OSwgNTUxLCA2MzksIDQ3NywgNDY0LCA0NDEsIDQ3MiwgNDk4LCAyOTMsIDQ3NiwgMTMwLCAzOTV9LAotICAgIHszNTEsIDM3NSwgMzczLCA0NjksIDU1MSwgNjM5LCA0NzcsIDQ2NCwgNDQxLCA0NzIsIDQ5OCwgMjkzLCA0NzYsIDEzMCwgMzk3fSwKLSAgICB7MjUxLCAyNjIsIDI3MywgMzI0LCAzMTksIDUwOCwgMzc1LCAzNjQsIDM0MSwgMzcxLCAzOTgsIDE5MywgMzc1LCAgMzAsIDI5NX0sCi0gICAgezI1MSwgMjYyLCAyNzMsIDMyNCwgMzE5LCA1MDgsIDM3NSwgMzY0LCAzNDEsIDM3MSwgMzk4LCAxOTMsIDM3NSwgIDMwLCAyOTV9LAotICAgIHszNTEsIDM3NSwgMzczLCA0NjksIDU1MSwgNjM5LCA0NzcsIDQ2NCwgNDQxLCA0NzIsIDQ5OCwgMjkzLCA0NzYsIDEzMCwgMzk1fSwKLSAgICB7MzUxLCAzNzUsIDM3MywgNDY5LCA1NTEsIDYzOSwgNDc3LCA0NjQsIDQ0MSwgNDcyLCA0OTgsIDI5MywgNDc2LCAxMzAsIDM5NX0sCi0gICAgezM1MSwgMzc1LCAzNzMsIDQ2OSwgNTUxLCA2MzksIDQ3NywgNDY0LCA0NDEsIDQ3MiwgNDk4LCAyOTMsIDQ3NiwgMTMwLCAzOTV9fTsKKwl7MjUxLCAyNjIsIDI3MywgMzI0LCAzMTksIDUwOCwgMzc1LCAzNjQsIDM0MSwgMzcxLCAzOTgsIDE5MywgMzc1LCAgMzAsIDI5NX0sCisJezM1MSwgMzc1LCAzNzMsIDQ2OSwgNTUxLCA2MzksIDQ3NywgNDY0LCA0NDEsIDQ3MiwgNDk4LCAyOTMsIDQ3NiwgMTMwLCAzOTV9LAorCXszNTEsIDM3NSwgMzczLCA0NjksIDU1MSwgNjM5LCA0NzcsIDQ2NCwgNDQxLCA0NzIsIDQ5OCwgMjkzLCA0NzYsIDEzMCwgMzk3fSwKKwl7MjUxLCAyNjIsIDI3MywgMzI0LCAzMTksIDUwOCwgMzc1LCAzNjQsIDM0MSwgMzcxLCAzOTgsIDE5MywgMzc1LCAgMzAsIDI5NX0sCisJezI1MSwgMjYyLCAyNzMsIDMyNCwgMzE5LCA1MDgsIDM3NSwgMzY0LCAzNDEsIDM3MSwgMzk4LCAxOTMsIDM3NSwgIDMwLCAyOTV9LAorCXszNTEsIDM3NSwgMzczLCA0NjksIDU1MSwgNjM5LCA0NzcsIDQ2NCwgNDQxLCA0NzIsIDQ5OCwgMjkzLCA0NzYsIDEzMCwgMzk1fSwKKwl7MzUxLCAzNzUsIDM3MywgNDY5LCA1NTEsIDYzOSwgNDc3LCA0NjQsIDQ0MSwgNDcyLCA0OTgsIDI5MywgNDc2LCAxMzAsIDM5NX0sCisJezM1MSwgMzc1LCAzNzMsIDQ2OSwgNTUxLCA2MzksIDQ3NywgNDY0LCA0NDEsIDQ3MiwgNDk4LCAyOTMsIDQ3NiwgMTMwLCAzOTV9IH07CiAKIHN0YXRpYyB2b2lkIG52X2dlYXJfYmFja29mZl9yZXNlZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKQEAgLTIwODMsMTMgKzIwNjUsMTIgQEAKIAl0ZW1wID0gTlZSRUdfQktPRkZDVFJMX0RFRkFVTFQgfCAoMCA8PCBOVlJFR19CS09GRkNUUkxfU0VMRUNUKTsKIAl0ZW1wIHw9IGNvbWJpbmVkU2VlZCAmIE5WUkVHX0JLT0ZGQ1RSTF9TRUVEX01BU0s7CiAJdGVtcCB8PSBjb21iaW5lZFNlZWQgPj4gTlZSRUdfQktPRkZDVFJMX0dFQVI7Ci0Jd3JpdGVsKHRlbXAsYmFzZSArIE52UmVnQmFja09mZkNvbnRyb2wpOworCXdyaXRlbCh0ZW1wLCBiYXNlICsgTnZSZWdCYWNrT2ZmQ29udHJvbCk7CiAKLSAgICAJLyogU2V0dXAgc2VlZHMgZm9yIGFsbCBnZWFyIExGU1JzLiAqLworCS8qIFNldHVwIHNlZWRzIGZvciBhbGwgZ2VhciBMRlNScy4gKi8KIAlnZXRfcmFuZG9tX2J5dGVzKCZzZWVkc2V0LCBzaXplb2Yoc2VlZHNldCkpOwogCXNlZWRzZXQgPSBzZWVkc2V0ICUgQkFDS09GRl9TRUVEU0VUX1JPV1M7Ci0JZm9yIChpID0gMTsgaSA8PSBCQUNLT0ZGX1NFRURTRVRfTEZTUlM7IGkrKykKLQl7CisJZm9yIChpID0gMTsgaSA8PSBCQUNLT0ZGX1NFRURTRVRfTEZTUlM7IGkrKykgewogCQl0ZW1wID0gTlZSRUdfQktPRkZDVFJMX0RFRkFVTFQgfCAoaSA8PCBOVlJFR19CS09GRkNUUkxfU0VMRUNUKTsKIAkJdGVtcCB8PSBtYWluX3NlZWRzZXRbc2VlZHNldF1baS0xXSAmIDB4M2ZmOwogCQl0ZW1wIHw9ICgoZ2Vhcl9zZWVkc2V0W3NlZWRzZXRdW2ktMV0gJiAweDNmZikgPDwgTlZSRUdfQktPRkZDVFJMX0dFQVIpOwpAQCAtMjExMywxMCArMjA5NCwxMCBAQAogCXUzMiBzaXplID0gc2tiX2hlYWRsZW4oc2tiKTsKIAl1MzIgZW50cmllcyA9IChzaXplID4+IE5WX1RYMl9UU09fTUFYX1NISUZUKSArICgoc2l6ZSAmIChOVl9UWDJfVFNPX01BWF9TSVpFLTEpKSA/IDEgOiAwKTsKIAl1MzIgZW1wdHlfc2xvdHM7Ci0Jc3RydWN0IHJpbmdfZGVzYyogcHV0X3R4OwotCXN0cnVjdCByaW5nX2Rlc2MqIHN0YXJ0X3R4OwotCXN0cnVjdCByaW5nX2Rlc2MqIHByZXZfdHg7Ci0Jc3RydWN0IG52X3NrYl9tYXAqIHByZXZfdHhfY3R4OworCXN0cnVjdCByaW5nX2Rlc2MgKnB1dF90eDsKKwlzdHJ1Y3QgcmluZ19kZXNjICpzdGFydF90eDsKKwlzdHJ1Y3QgcmluZ19kZXNjICpwcmV2X3R4OworCXN0cnVjdCBudl9za2JfbWFwICpwcmV2X3R4X2N0eDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJLyogYWRkIGZyYWdtZW50cyB0byBlbnRyaWVzIGNvdW50ICovCkBAIC0yMjA0LDE4ICsyMTg1LDYgQEAKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5wLT5sb2NrLCBmbGFncyk7CiAKLQlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBudl9zdGFydF94bWl0OiBlbnRyaWVzICVkIHF1ZXVlZCBmb3IgdHJhbnNtaXNzaW9uLiB0eF9mbGFnc19leHRyYTogJXhcbiIsCi0JCWRldi0+bmFtZSwgZW50cmllcywgdHhfZmxhZ3NfZXh0cmEpOwotCXsKLQkJaW50IGo7Ci0JCWZvciAoaj0wOyBqPDY0OyBqKyspIHsKLQkJCWlmICgoaiUxNikgPT0gMCkKLQkJCQlkcHJpbnRrKCJcbiUwM3g6Iiwgaik7Ci0JCQlkcHJpbnRrKCIgJTAyeCIsICgodW5zaWduZWQgY2hhciopc2tiLT5kYXRhKVtqXSk7Ci0JCX0KLQkJZHByaW50aygiXG4iKTsKLQl9Ci0KIAl3cml0ZWwoTlZSRUdfVFhSWENUTF9LSUNLfG5wLT50eHJ4Y3RsX2JpdHMsIGdldF9od2Jhc2UoZGV2KSArIE52UmVnVHhSeENvbnRyb2wpOwogCXJldHVybiBORVRERVZfVFhfT0s7CiB9CkBAIC0yMjMzLDExICsyMjAyLDExIEBACiAJdTMyIHNpemUgPSBza2JfaGVhZGxlbihza2IpOwogCXUzMiBlbnRyaWVzID0gKHNpemUgPj4gTlZfVFgyX1RTT19NQVhfU0hJRlQpICsgKChzaXplICYgKE5WX1RYMl9UU09fTUFYX1NJWkUtMSkpID8gMSA6IDApOwogCXUzMiBlbXB0eV9zbG90czsKLQlzdHJ1Y3QgcmluZ19kZXNjX2V4KiBwdXRfdHg7Ci0Jc3RydWN0IHJpbmdfZGVzY19leCogc3RhcnRfdHg7Ci0Jc3RydWN0IHJpbmdfZGVzY19leCogcHJldl90eDsKLQlzdHJ1Y3QgbnZfc2tiX21hcCogcHJldl90eF9jdHg7Ci0Jc3RydWN0IG52X3NrYl9tYXAqIHN0YXJ0X3R4X2N0eDsKKwlzdHJ1Y3QgcmluZ19kZXNjX2V4ICpwdXRfdHg7CisJc3RydWN0IHJpbmdfZGVzY19leCAqc3RhcnRfdHg7CisJc3RydWN0IHJpbmdfZGVzY19leCAqcHJldl90eDsKKwlzdHJ1Y3QgbnZfc2tiX21hcCAqcHJldl90eF9jdHg7CisJc3RydWN0IG52X3NrYl9tYXAgKnN0YXJ0X3R4X2N0eDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJLyogYWRkIGZyYWdtZW50cyB0byBlbnRyaWVzIGNvdW50ICovCkBAIC0yMzU1LDE4ICsyMzI0LDYgQEAKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5wLT5sb2NrLCBmbGFncyk7CiAKLQlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBudl9zdGFydF94bWl0X29wdGltaXplZDogZW50cmllcyAlZCBxdWV1ZWQgZm9yIHRyYW5zbWlzc2lvbi4gdHhfZmxhZ3NfZXh0cmE6ICV4XG4iLAotCQlkZXYtPm5hbWUsIGVudHJpZXMsIHR4X2ZsYWdzX2V4dHJhKTsKLQl7Ci0JCWludCBqOwotCQlmb3IgKGo9MDsgajw2NDsgaisrKSB7Ci0JCQlpZiAoKGolMTYpID09IDApCi0JCQkJZHByaW50aygiXG4lMDN4OiIsIGopOwotCQkJZHByaW50aygiICUwMngiLCAoKHVuc2lnbmVkIGNoYXIqKXNrYi0+ZGF0YSlbal0pOwotCQl9Ci0JCWRwcmludGsoIlxuIik7Ci0JfQotCiAJd3JpdGVsKE5WUkVHX1RYUlhDVExfS0lDS3xucC0+dHhyeGN0bF9iaXRzLCBnZXRfaHdiYXNlKGRldikgKyBOdlJlZ1R4UnhDb250cm9sKTsKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogfQpAQCAtMjM5OSwxNSArMjM1NiwxMiBAQAogCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CiAJdTMyIGZsYWdzOwogCWludCB0eF93b3JrID0gMDsKLQlzdHJ1Y3QgcmluZ19kZXNjKiBvcmlnX2dldF90eCA9IG5wLT5nZXRfdHgub3JpZzsKKwlzdHJ1Y3QgcmluZ19kZXNjICpvcmlnX2dldF90eCA9IG5wLT5nZXRfdHgub3JpZzsKIAogCXdoaWxlICgobnAtPmdldF90eC5vcmlnICE9IG5wLT5wdXRfdHgub3JpZykgJiYKIAkgICAgICAgISgoZmxhZ3MgPSBsZTMyX3RvX2NwdShucC0+Z2V0X3R4Lm9yaWctPmZsYWdsZW4pKSAmIE5WX1RYX1ZBTElEKSAmJgogCSAgICAgICAodHhfd29yayA8IGxpbWl0KSkgewogCi0JCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IG52X3R4X2RvbmU6IGZsYWdzIDB4JXguXG4iLAotCQkJCQlkZXYtPm5hbWUsIGZsYWdzKTsKLQogCQludl91bm1hcF90eHNrYihucCwgbnAtPmdldF90eF9jdHgpOwogCiAJCWlmIChucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMSkgewpAQCAtMjQ2NCwxNSArMjQxOCwxMiBAQAogCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CiAJdTMyIGZsYWdzOwogCWludCB0eF93b3JrID0gMDsKLQlzdHJ1Y3QgcmluZ19kZXNjX2V4KiBvcmlnX2dldF90eCA9IG5wLT5nZXRfdHguZXg7CisJc3RydWN0IHJpbmdfZGVzY19leCAqb3JpZ19nZXRfdHggPSBucC0+Z2V0X3R4LmV4OwogCiAJd2hpbGUgKChucC0+Z2V0X3R4LmV4ICE9IG5wLT5wdXRfdHguZXgpICYmCiAJICAgICAgICEoKGZsYWdzID0gbGUzMl90b19jcHUobnAtPmdldF90eC5leC0+ZmxhZ2xlbikpICYgTlZfVFgyX1ZBTElEKSAmJgogCSAgICAgICAodHhfd29yayA8IGxpbWl0KSkgewogCi0JCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IG52X3R4X2RvbmVfb3B0aW1pemVkOiBmbGFncyAweCV4LlxuIiwKLQkJCQkJZGV2LT5uYW1lLCBmbGFncyk7Ci0KIAkJbnZfdW5tYXBfdHhza2IobnAsIG5wLT5nZXRfdHhfY3R4KTsKIAogCQlpZiAoZmxhZ3MgJiBOVl9UWDJfTEFTVFBBQ0tFVCkgewpAQCAtMjQ5MSw5ICsyNDQyLDggQEAKIAkJCW5wLT5nZXRfdHhfY3R4LT5za2IgPSBOVUxMOwogCQkJdHhfd29yaysrOwogCi0JCQlpZiAobnAtPnR4X2xpbWl0KSB7CisJCQlpZiAobnAtPnR4X2xpbWl0KQogCQkJCW52X3R4X2ZsaXBfb3duZXJzaGlwKGRldik7Ci0JCQl9CiAJCX0KIAkJaWYgKHVubGlrZWx5KG5wLT5nZXRfdHguZXgrKyA9PSBucC0+bGFzdF90eC5leCkpCiAJCQlucC0+Z2V0X3R4LmV4ID0gbnAtPmZpcnN0X3R4LmV4OwpAQCAtMjUxOCw1NyArMjQ2OCw1NiBAQAogCXUzMiBzdGF0dXM7CiAJdW5pb24gcmluZ190eXBlIHB1dF90eDsKIAlpbnQgc2F2ZWRfdHhfbGltaXQ7CisJaW50IGk7CiAKIAlpZiAobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0VOQUJMRUQpCiAJCXN0YXR1cyA9IHJlYWRsKGJhc2UgKyBOdlJlZ01TSVhJcnFTdGF0dXMpICYgTlZSRUdfSVJRU1RBVF9NQVNLOwogCWVsc2UKIAkJc3RhdHVzID0gcmVhZGwoYmFzZSArIE52UmVnSXJxU3RhdHVzKSAmIE5WUkVHX0lSUVNUQVRfTUFTSzsKIAotCXByaW50ayhLRVJOX0lORk8gIiVzOiBHb3QgdHhfdGltZW91dC4gaXJxOiAlMDh4XG4iLCBkZXYtPm5hbWUsIHN0YXR1cyk7CisJbmV0ZGV2X2luZm8oZGV2LCAiR290IHR4X3RpbWVvdXQuIGlycTogJTA4eFxuIiwgc3RhdHVzKTsKIAotCXsKLQkJaW50IGk7Ci0KLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFJpbmcgYXQgJWx4XG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCAodW5zaWduZWQgbG9uZylucC0+cmluZ19hZGRyKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IER1bXBpbmcgdHggcmVnaXN0ZXJzXG4iLCBkZXYtPm5hbWUpOwotCQlmb3IgKGk9MDtpPD1ucC0+cmVnaXN0ZXJfc2l6ZTtpKz0gMzIpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gIiUzeDogJTA4eCAlMDh4ICUwOHggJTA4eCAlMDh4ICUwOHggJTA4eCAlMDh4XG4iLAotCQkJCQlpLAotCQkJCQlyZWFkbChiYXNlICsgaSArIDApLCByZWFkbChiYXNlICsgaSArIDQpLAotCQkJCQlyZWFkbChiYXNlICsgaSArIDgpLCByZWFkbChiYXNlICsgaSArIDEyKSwKLQkJCQkJcmVhZGwoYmFzZSArIGkgKyAxNiksIHJlYWRsKGJhc2UgKyBpICsgMjApLAotCQkJCQlyZWFkbChiYXNlICsgaSArIDI0KSwgcmVhZGwoYmFzZSArIGkgKyAyOCkpOwotCQl9Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBEdW1waW5nIHR4IHJpbmdcbiIsIGRldi0+bmFtZSk7Ci0JCWZvciAoaT0wO2k8bnAtPnR4X3Jpbmdfc2l6ZTtpKz0gNCkgewotCQkJaWYgKCFudl9vcHRpbWl6ZWQobnApKSB7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJTAzeDogJTA4eCAlMDh4IC8vICUwOHggJTA4eCAvLyAlMDh4ICUwOHggLy8gJTA4eCAlMDh4XG4iLAotCQkJCSAgICAgICBpLAotCQkJCSAgICAgICBsZTMyX3RvX2NwdShucC0+dHhfcmluZy5vcmlnW2ldLmJ1ZiksCi0JCQkJICAgICAgIGxlMzJfdG9fY3B1KG5wLT50eF9yaW5nLm9yaWdbaV0uZmxhZ2xlbiksCi0JCQkJICAgICAgIGxlMzJfdG9fY3B1KG5wLT50eF9yaW5nLm9yaWdbaSsxXS5idWYpLAotCQkJCSAgICAgICBsZTMyX3RvX2NwdShucC0+dHhfcmluZy5vcmlnW2krMV0uZmxhZ2xlbiksCi0JCQkJICAgICAgIGxlMzJfdG9fY3B1KG5wLT50eF9yaW5nLm9yaWdbaSsyXS5idWYpLAotCQkJCSAgICAgICBsZTMyX3RvX2NwdShucC0+dHhfcmluZy5vcmlnW2krMl0uZmxhZ2xlbiksCi0JCQkJICAgICAgIGxlMzJfdG9fY3B1KG5wLT50eF9yaW5nLm9yaWdbaSszXS5idWYpLAotCQkJCSAgICAgICBsZTMyX3RvX2NwdShucC0+dHhfcmluZy5vcmlnW2krM10uZmxhZ2xlbikpOwotCQkJfSBlbHNlIHsKLQkJCQlwcmludGsoS0VSTl9JTkZPICIlMDN4OiAlMDh4ICUwOHggJTA4eCAvLyAlMDh4ICUwOHggJTA4eCAvLyAlMDh4ICUwOHggJTA4eCAvLyAlMDh4ICUwOHggJTA4eFxuIiwKLQkJCQkgICAgICAgaSwKLQkJCQkgICAgICAgbGUzMl90b19jcHUobnAtPnR4X3JpbmcuZXhbaV0uYnVmaGlnaCksCi0JCQkJICAgICAgIGxlMzJfdG9fY3B1KG5wLT50eF9yaW5nLmV4W2ldLmJ1ZmxvdyksCi0JCQkJICAgICAgIGxlMzJfdG9fY3B1KG5wLT50eF9yaW5nLmV4W2ldLmZsYWdsZW4pLAotCQkJCSAgICAgICBsZTMyX3RvX2NwdShucC0+dHhfcmluZy5leFtpKzFdLmJ1ZmhpZ2gpLAotCQkJCSAgICAgICBsZTMyX3RvX2NwdShucC0+dHhfcmluZy5leFtpKzFdLmJ1ZmxvdyksCi0JCQkJICAgICAgIGxlMzJfdG9fY3B1KG5wLT50eF9yaW5nLmV4W2krMV0uZmxhZ2xlbiksCi0JCQkJICAgICAgIGxlMzJfdG9fY3B1KG5wLT50eF9yaW5nLmV4W2krMl0uYnVmaGlnaCksCi0JCQkJICAgICAgIGxlMzJfdG9fY3B1KG5wLT50eF9yaW5nLmV4W2krMl0uYnVmbG93KSwKLQkJCQkgICAgICAgbGUzMl90b19jcHUobnAtPnR4X3JpbmcuZXhbaSsyXS5mbGFnbGVuKSwKLQkJCQkgICAgICAgbGUzMl90b19jcHUobnAtPnR4X3JpbmcuZXhbaSszXS5idWZoaWdoKSwKLQkJCQkgICAgICAgbGUzMl90b19jcHUobnAtPnR4X3JpbmcuZXhbaSszXS5idWZsb3cpLAotCQkJCSAgICAgICBsZTMyX3RvX2NwdShucC0+dHhfcmluZy5leFtpKzNdLmZsYWdsZW4pKTsKLQkJCX0KKwluZXRkZXZfaW5mbyhkZXYsICJSaW5nIGF0ICVseFxuIiwgKHVuc2lnbmVkIGxvbmcpbnAtPnJpbmdfYWRkcik7CisJbmV0ZGV2X2luZm8oZGV2LCAiRHVtcGluZyB0eCByZWdpc3RlcnNcbiIpOworCWZvciAoaSA9IDA7IGkgPD0gbnAtPnJlZ2lzdGVyX3NpemU7IGkgKz0gMzIpIHsKKwkJbmV0ZGV2X2luZm8oZGV2LAorCQkJICAgICIlM3g6ICUwOHggJTA4eCAlMDh4ICUwOHggJTA4eCAlMDh4ICUwOHggJTA4eFxuIiwKKwkJCSAgICBpLAorCQkJICAgIHJlYWRsKGJhc2UgKyBpICsgMCksIHJlYWRsKGJhc2UgKyBpICsgNCksCisJCQkgICAgcmVhZGwoYmFzZSArIGkgKyA4KSwgcmVhZGwoYmFzZSArIGkgKyAxMiksCisJCQkgICAgcmVhZGwoYmFzZSArIGkgKyAxNiksIHJlYWRsKGJhc2UgKyBpICsgMjApLAorCQkJICAgIHJlYWRsKGJhc2UgKyBpICsgMjQpLCByZWFkbChiYXNlICsgaSArIDI4KSk7CisJfQorCW5ldGRldl9pbmZvKGRldiwgIkR1bXBpbmcgdHggcmluZ1xuIik7CisJZm9yIChpID0gMDsgaSA8IG5wLT50eF9yaW5nX3NpemU7IGkgKz0gNCkgeworCQlpZiAoIW52X29wdGltaXplZChucCkpIHsKKwkJCW5ldGRldl9pbmZvKGRldiwKKwkJCQkgICAgIiUwM3g6ICUwOHggJTA4eCAvLyAlMDh4ICUwOHggLy8gJTA4eCAlMDh4IC8vICUwOHggJTA4eFxuIiwKKwkJCQkgICAgaSwKKwkJCQkgICAgbGUzMl90b19jcHUobnAtPnR4X3Jpbmcub3JpZ1tpXS5idWYpLAorCQkJCSAgICBsZTMyX3RvX2NwdShucC0+dHhfcmluZy5vcmlnW2ldLmZsYWdsZW4pLAorCQkJCSAgICBsZTMyX3RvX2NwdShucC0+dHhfcmluZy5vcmlnW2krMV0uYnVmKSwKKwkJCQkgICAgbGUzMl90b19jcHUobnAtPnR4X3Jpbmcub3JpZ1tpKzFdLmZsYWdsZW4pLAorCQkJCSAgICBsZTMyX3RvX2NwdShucC0+dHhfcmluZy5vcmlnW2krMl0uYnVmKSwKKwkJCQkgICAgbGUzMl90b19jcHUobnAtPnR4X3Jpbmcub3JpZ1tpKzJdLmZsYWdsZW4pLAorCQkJCSAgICBsZTMyX3RvX2NwdShucC0+dHhfcmluZy5vcmlnW2krM10uYnVmKSwKKwkJCQkgICAgbGUzMl90b19jcHUobnAtPnR4X3Jpbmcub3JpZ1tpKzNdLmZsYWdsZW4pKTsKKwkJfSBlbHNlIHsKKwkJCW5ldGRldl9pbmZvKGRldiwKKwkJCQkgICAgIiUwM3g6ICUwOHggJTA4eCAlMDh4IC8vICUwOHggJTA4eCAlMDh4IC8vICUwOHggJTA4eCAlMDh4IC8vICUwOHggJTA4eCAlMDh4XG4iLAorCQkJCSAgICBpLAorCQkJCSAgICBsZTMyX3RvX2NwdShucC0+dHhfcmluZy5leFtpXS5idWZoaWdoKSwKKwkJCQkgICAgbGUzMl90b19jcHUobnAtPnR4X3JpbmcuZXhbaV0uYnVmbG93KSwKKwkJCQkgICAgbGUzMl90b19jcHUobnAtPnR4X3JpbmcuZXhbaV0uZmxhZ2xlbiksCisJCQkJICAgIGxlMzJfdG9fY3B1KG5wLT50eF9yaW5nLmV4W2krMV0uYnVmaGlnaCksCisJCQkJICAgIGxlMzJfdG9fY3B1KG5wLT50eF9yaW5nLmV4W2krMV0uYnVmbG93KSwKKwkJCQkgICAgbGUzMl90b19jcHUobnAtPnR4X3JpbmcuZXhbaSsxXS5mbGFnbGVuKSwKKwkJCQkgICAgbGUzMl90b19jcHUobnAtPnR4X3JpbmcuZXhbaSsyXS5idWZoaWdoKSwKKwkJCQkgICAgbGUzMl90b19jcHUobnAtPnR4X3JpbmcuZXhbaSsyXS5idWZsb3cpLAorCQkJCSAgICBsZTMyX3RvX2NwdShucC0+dHhfcmluZy5leFtpKzJdLmZsYWdsZW4pLAorCQkJCSAgICBsZTMyX3RvX2NwdShucC0+dHhfcmluZy5leFtpKzNdLmJ1ZmhpZ2gpLAorCQkJCSAgICBsZTMyX3RvX2NwdShucC0+dHhfcmluZy5leFtpKzNdLmJ1ZmxvdyksCisJCQkJICAgIGxlMzJfdG9fY3B1KG5wLT50eF9yaW5nLmV4W2krM10uZmxhZ2xlbikpOwogCQl9CiAJfQogCkBAIC0yNjE2LDE1ICsyNTY1LDEzIEBACiAJaW50IHByb3RvbGVuOwkvKiBsZW5ndGggYXMgc3RvcmVkIGluIHRoZSBwcm90byBmaWVsZCAqLwogCiAJLyogMSkgY2FsY3VsYXRlIGxlbiBhY2NvcmRpbmcgdG8gaGVhZGVyICovCi0JaWYgKCAoKHN0cnVjdCB2bGFuX2V0aGhkciAqKXBhY2tldCktPmhfdmxhbl9wcm90byA9PSBodG9ucyhFVEhfUF84MDIxUSkpIHsKLQkJcHJvdG9sZW4gPSBudG9ocyggKChzdHJ1Y3Qgdmxhbl9ldGhoZHIgKilwYWNrZXQpLT5oX3ZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvICk7CisJaWYgKCgoc3RydWN0IHZsYW5fZXRoaGRyICopcGFja2V0KS0+aF92bGFuX3Byb3RvID09IGh0b25zKEVUSF9QXzgwMjFRKSkgeworCQlwcm90b2xlbiA9IG50b2hzKCgoc3RydWN0IHZsYW5fZXRoaGRyICopcGFja2V0KS0+aF92bGFuX2VuY2Fwc3VsYXRlZF9wcm90byk7CiAJCWhkcmxlbiA9IFZMQU5fSExFTjsKIAl9IGVsc2UgewotCQlwcm90b2xlbiA9IG50b2hzKCAoKHN0cnVjdCBldGhoZHIgKilwYWNrZXQpLT5oX3Byb3RvKTsKKwkJcHJvdG9sZW4gPSBudG9ocygoKHN0cnVjdCBldGhoZHIgKilwYWNrZXQpLT5oX3Byb3RvKTsKIAkJaGRybGVuID0gRVRIX0hMRU47CiAJfQotCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IG52X2dldGxlbjogZGF0YWxlbiAlZCwgcHJvdG9sZW4gJWQsIGhkcmxlbiAlZFxuIiwKLQkJCQlkZXYtPm5hbWUsIGRhdGFsZW4sIHByb3RvbGVuLCBoZHJsZW4pOwogCWlmIChwcm90b2xlbiA+IEVUSF9EQVRBX0xFTikKIAkJcmV0dXJuIGRhdGFsZW47IC8qIFZhbHVlIGluIHByb3RvIGZpZWxkIG5vdCBhIGxlbiwgbm8gY2hlY2tzIHBvc3NpYmxlICovCiAKQEAgLTI2MzUsMjYgKzI1ODIsMTggQEAKIAkJCS8qIG1vcmUgZGF0YSBvbiB3aXJlIHRoYW4gaW4gODAyIGhlYWRlciwgdHJpbSBvZgogCQkJICogYWRkaXRpb25hbCBkYXRhLgogCQkJICovCi0JCQlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBudl9nZXRsZW46IGFjY2VwdGluZyAlZCBieXRlcy5cbiIsCi0JCQkJCWRldi0+bmFtZSwgcHJvdG9sZW4pOwogCQkJcmV0dXJuIHByb3RvbGVuOwogCQl9IGVsc2UgewogCQkJLyogbGVzcyBkYXRhIG9uIHdpcmUgdGhhbiBtZW50aW9uZWQgaW4gaGVhZGVyLgogCQkJICogRGlzY2FyZCB0aGUgcGFja2V0LgogCQkJICovCi0JCQlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBudl9nZXRsZW46IGRpc2NhcmRpbmcgbG9uZyBwYWNrZXQuXG4iLAotCQkJCQlkZXYtPm5hbWUpOwogCQkJcmV0dXJuIC0xOwogCQl9CiAJfSBlbHNlIHsKIAkJLyogc2hvcnQgcGFja2V0LiBBY2NlcHQgb25seSBpZiA4MDIgdmFsdWVzIGFyZSBhbHNvIHNob3J0ICovCiAJCWlmIChwcm90b2xlbiA+IEVUSF9aTEVOKSB7Ci0JCQlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBudl9nZXRsZW46IGRpc2NhcmRpbmcgc2hvcnQgcGFja2V0LlxuIiwKLQkJCQkJZGV2LT5uYW1lKTsKIAkJCXJldHVybiAtMTsKIAkJfQotCQlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBudl9nZXRsZW46IGFjY2VwdGluZyAlZCBieXRlcy5cbiIsCi0JCQkJZGV2LT5uYW1lLCBkYXRhbGVuKTsKIAkJcmV0dXJuIGRhdGFsZW47CiAJfQogfQpAQCAtMjY2NywxMyArMjYwNiwxMCBAQAogCXN0cnVjdCBza19idWZmICpza2I7CiAJaW50IGxlbjsKIAotCXdoaWxlKChucC0+Z2V0X3J4Lm9yaWcgIT0gbnAtPnB1dF9yeC5vcmlnKSAmJgorCXdoaWxlICgobnAtPmdldF9yeC5vcmlnICE9IG5wLT5wdXRfcngub3JpZykgJiYKIAkgICAgICAhKChmbGFncyA9IGxlMzJfdG9fY3B1KG5wLT5nZXRfcngub3JpZy0+ZmxhZ2xlbikpICYgTlZfUlhfQVZBSUwpICYmCiAJCShyeF93b3JrIDwgbGltaXQpKSB7CiAKLQkJZHByaW50ayhLRVJOX0RFQlVHICIlczogbnZfcnhfcHJvY2VzczogZmxhZ3MgMHgleC5cbiIsCi0JCQkJCWRldi0+bmFtZSwgZmxhZ3MpOwotCiAJCS8qCiAJCSAqIHRoZSBwYWNrZXQgaXMgZm9yIHVzIC0gaW1tZWRpYXRlbHkgdGVhciBkb3duIHRoZSBwY2kgbWFwcGluZy4KIAkJICogVE9ETzogY2hlY2sgaWYgYSBwcmVmZXRjaCBvZiB0aGUgZmlyc3QgY2FjaGVsaW5lIGltcHJvdmVzCkBAIC0yNjg1LDE2ICsyNjIxLDYgQEAKIAkJc2tiID0gbnAtPmdldF9yeF9jdHgtPnNrYjsKIAkJbnAtPmdldF9yeF9jdHgtPnNrYiA9IE5VTEw7CiAKLQkJewotCQkJaW50IGo7Ci0JCQlkcHJpbnRrKEtFUk5fREVCVUcgIkR1bXBpbmcgcGFja2V0IChmbGFncyAweCV4KS4iLGZsYWdzKTsKLQkJCWZvciAoaj0wOyBqPDY0OyBqKyspIHsKLQkJCQlpZiAoKGolMTYpID09IDApCi0JCQkJCWRwcmludGsoIlxuJTAzeDoiLCBqKTsKLQkJCQlkcHJpbnRrKCIgJTAyeCIsICgodW5zaWduZWQgY2hhciopc2tiLT5kYXRhKVtqXSk7Ci0JCQl9Ci0JCQlkcHJpbnRrKCJcbiIpOwotCQl9CiAJCS8qIGxvb2sgYXQgd2hhdCB3ZSBhY3R1YWxseSBnb3Q6ICovCiAJCWlmIChucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMSkgewogCQkJaWYgKGxpa2VseShmbGFncyAmIE5WX1JYX0RFU0NSSVBUT1JWQUxJRCkpIHsKQEAgLTI3MTAsOSArMjYzNiw4IEBACiAJCQkJCX0KIAkJCQkJLyogZnJhbWluZyBlcnJvcnMgYXJlIHNvZnQgZXJyb3JzICovCiAJCQkJCWVsc2UgaWYgKChmbGFncyAmIE5WX1JYX0VSUk9SX01BU0spID09IE5WX1JYX0ZSQU1JTkdFUlIpIHsKLQkJCQkJCWlmIChmbGFncyAmIE5WX1JYX1NVQlNUUkFDVDEpIHsKKwkJCQkJCWlmIChmbGFncyAmIE5WX1JYX1NVQlNUUkFDVDEpCiAJCQkJCQkJbGVuLS07Ci0JCQkJCQl9CiAJCQkJCX0KIAkJCQkJLyogdGhlIHJlc3QgYXJlIGhhcmQgZXJyb3JzICovCiAJCQkJCWVsc2UgewpAQCAtMjc0NSw5ICsyNjcwLDggQEAKIAkJCQkJfQogCQkJCQkvKiBmcmFtaW5nIGVycm9ycyBhcmUgc29mdCBlcnJvcnMgKi8KIAkJCQkJZWxzZSBpZiAoKGZsYWdzICYgTlZfUlgyX0VSUk9SX01BU0spID09IE5WX1JYMl9GUkFNSU5HRVJSKSB7Ci0JCQkJCQlpZiAoZmxhZ3MgJiBOVl9SWDJfU1VCU1RSQUNUMSkgeworCQkJCQkJaWYgKGZsYWdzICYgTlZfUlgyX1NVQlNUUkFDVDEpCiAJCQkJCQkJbGVuLS07Ci0JCQkJCQl9CiAJCQkJCX0KIAkJCQkJLyogdGhlIHJlc3QgYXJlIGhhcmQgZXJyb3JzICovCiAJCQkJCWVsc2UgewpAQCAtMjc3MSw4ICsyNjk1LDYgQEAKIAkJLyogZ290IGEgdmFsaWQgcGFja2V0IC0gZm9yd2FyZCBpdCB0byB0aGUgbmV0d29yayBjb3JlICovCiAJCXNrYl9wdXQoc2tiLCBsZW4pOwogCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYpOwotCQlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBudl9yeF9wcm9jZXNzOiAlZCBieXRlcywgcHJvdG8gJWQgYWNjZXB0ZWQuXG4iLAotCQkJCQlkZXYtPm5hbWUsIGxlbiwgc2tiLT5wcm90b2NvbCk7CiAJCW5hcGlfZ3JvX3JlY2VpdmUoJm5wLT5uYXBpLCBza2IpOwogCQlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKIAkJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBsZW47CkBAIC0yNzk3LDEzICsyNzE5LDEwIEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlpbnQgbGVuOwogCi0Jd2hpbGUoKG5wLT5nZXRfcnguZXggIT0gbnAtPnB1dF9yeC5leCkgJiYKKwl3aGlsZSAoKG5wLT5nZXRfcnguZXggIT0gbnAtPnB1dF9yeC5leCkgJiYKIAkgICAgICAhKChmbGFncyA9IGxlMzJfdG9fY3B1KG5wLT5nZXRfcnguZXgtPmZsYWdsZW4pKSAmIE5WX1JYMl9BVkFJTCkgJiYKIAkgICAgICAocnhfd29yayA8IGxpbWl0KSkgewogCi0JCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IG52X3J4X3Byb2Nlc3Nfb3B0aW1pemVkOiBmbGFncyAweCV4LlxuIiwKLQkJCQkJZGV2LT5uYW1lLCBmbGFncyk7Ci0KIAkJLyoKIAkJICogdGhlIHBhY2tldCBpcyBmb3IgdXMgLSBpbW1lZGlhdGVseSB0ZWFyIGRvd24gdGhlIHBjaSBtYXBwaW5nLgogCQkgKiBUT0RPOiBjaGVjayBpZiBhIHByZWZldGNoIG9mIHRoZSBmaXJzdCBjYWNoZWxpbmUgaW1wcm92ZXMKQEAgLTI4MTUsMTYgKzI3MzQsNiBAQAogCQlza2IgPSBucC0+Z2V0X3J4X2N0eC0+c2tiOwogCQlucC0+Z2V0X3J4X2N0eC0+c2tiID0gTlVMTDsKIAotCQl7Ci0JCQlpbnQgajsKLQkJCWRwcmludGsoS0VSTl9ERUJVRyAiRHVtcGluZyBwYWNrZXQgKGZsYWdzIDB4JXgpLiIsZmxhZ3MpOwotCQkJZm9yIChqPTA7IGo8NjQ7IGorKykgewotCQkJCWlmICgoaiUxNikgPT0gMCkKLQkJCQkJZHByaW50aygiXG4lMDN4OiIsIGopOwotCQkJCWRwcmludGsoIiAlMDJ4IiwgKCh1bnNpZ25lZCBjaGFyKilza2ItPmRhdGEpW2pdKTsKLQkJCX0KLQkJCWRwcmludGsoIlxuIik7Ci0JCX0KIAkJLyogbG9vayBhdCB3aGF0IHdlIGFjdHVhbGx5IGdvdDogKi8KIAkJaWYgKGxpa2VseShmbGFncyAmIE5WX1JYMl9ERVNDUklQVE9SVkFMSUQpKSB7CiAJCQlsZW4gPSBmbGFncyAmIExFTl9NQVNLX1YyOwpAQCAtMjgzOCw5ICsyNzQ3LDggQEAKIAkJCQl9CiAJCQkJLyogZnJhbWluZyBlcnJvcnMgYXJlIHNvZnQgZXJyb3JzICovCiAJCQkJZWxzZSBpZiAoKGZsYWdzICYgTlZfUlgyX0VSUk9SX01BU0spID09IE5WX1JYMl9GUkFNSU5HRVJSKSB7Ci0JCQkJCWlmIChmbGFncyAmIE5WX1JYMl9TVUJTVFJBQ1QxKSB7CisJCQkJCWlmIChmbGFncyAmIE5WX1JYMl9TVUJTVFJBQ1QxKQogCQkJCQkJbGVuLS07Ci0JCQkJCX0KIAkJCQl9CiAJCQkJLyogdGhlIHJlc3QgYXJlIGhhcmQgZXJyb3JzICovCiAJCQkJZWxzZSB7CkBAIC0yODU4LDkgKzI3NjYsNiBAQAogCQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsKIAkJCXByZWZldGNoKHNrYi0+ZGF0YSk7CiAKLQkJCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IG52X3J4X3Byb2Nlc3Nfb3B0aW1pemVkOiAlZCBieXRlcywgcHJvdG8gJWQgYWNjZXB0ZWQuXG4iLAotCQkJCWRldi0+bmFtZSwgbGVuLCBza2ItPnByb3RvY29sKTsKLQogCQkJaWYgKGxpa2VseSghbnAtPnZsYW5ncnApKSB7CiAJCQkJbmFwaV9ncm9fcmVjZWl2ZSgmbnAtPm5hcGksIHNrYik7CiAJCQl9IGVsc2UgewpAQCAtMjk0OSw3ICsyODU0LDcgQEAKIAkJLyogcmVpbml0IG5pYyB2aWV3IG9mIHRoZSByeCBxdWV1ZSAqLwogCQl3cml0ZWwobnAtPnJ4X2J1Zl9zeiwgYmFzZSArIE52UmVnT2ZmbG9hZENvbmZpZyk7CiAJCXNldHVwX2h3X3JpbmdzKGRldiwgTlZfU0VUVVBfUlhfUklORyB8IE5WX1NFVFVQX1RYX1JJTkcpOwotCQl3cml0ZWwoICgobnAtPnJ4X3Jpbmdfc2l6ZS0xKSA8PCBOVlJFR19SSU5HU1pfUlhTSElGVCkgKyAoKG5wLT50eF9yaW5nX3NpemUtMSkgPDwgTlZSRUdfUklOR1NaX1RYU0hJRlQpLAorCQl3cml0ZWwoKChucC0+cnhfcmluZ19zaXplLTEpIDw8IE5WUkVHX1JJTkdTWl9SWFNISUZUKSArICgobnAtPnR4X3Jpbmdfc2l6ZS0xKSA8PCBOVlJFR19SSU5HU1pfVFhTSElGVCksCiAJCQliYXNlICsgTnZSZWdSaW5nU2l6ZXMpOwogCQlwY2lfcHVzaChiYXNlKTsKIAkJd3JpdGVsKE5WUkVHX1RYUlhDVExfS0lDS3xucC0+dHhyeGN0bF9iaXRzLCBnZXRfaHdiYXNlKGRldikgKyBOdlJlZ1R4UnhDb250cm9sKTsKQEAgLTI5ODYsNyArMjg5MSw3IEBACiBzdGF0aWMgaW50IG52X3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICphZGRyKQogewogCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IHNvY2thZGRyICptYWNhZGRyID0gKHN0cnVjdCBzb2NrYWRkciopYWRkcjsKKwlzdHJ1Y3Qgc29ja2FkZHIgKm1hY2FkZHIgPSAoc3RydWN0IHNvY2thZGRyICopYWRkcjsKIAogCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihtYWNhZGRyLT5zYV9kYXRhKSkKIAkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOwpAQCAtMzA3Niw4ICsyOTgxLDYgQEAKIAl3cml0ZWwobWFza1swXSwgYmFzZSArIE52UmVnTXVsdGljYXN0TWFza0EpOwogCXdyaXRlbChtYXNrWzFdLCBiYXNlICsgTnZSZWdNdWx0aWNhc3RNYXNrQik7CiAJd3JpdGVsKHBmZiwgYmFzZSArIE52UmVnUGFja2V0RmlsdGVyRmxhZ3MpOwotCWRwcmludGsoS0VSTl9JTkZPICIlczogcmVjb25maWd1cmF0aW9uIGZvciBtdWx0aWNhc3QgbGlzdHMuXG4iLAotCQlkZXYtPm5hbWUpOwogCW52X3N0YXJ0X3J4KGRldik7CiAJc3Bpbl91bmxvY2tfaXJxKCZucC0+bG9jayk7CiB9CkBAIC0zMTUyLDggKzMwNTUsNiBAQAogCW1paV9zdGF0dXMgPSBtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgTUlJX0JNU1IsIE1JSV9SRUFEKTsKIAogCWlmICghKG1paV9zdGF0dXMgJiBCTVNSX0xTVEFUVVMpKSB7Ci0JCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IG5vIGxpbmsgZGV0ZWN0ZWQgYnkgcGh5IC0gZmFsbGluZyBiYWNrIHRvIDEwSEQuXG4iLAotCQkJCWRldi0+bmFtZSk7CiAJCW5ld2xzID0gTlZSRUdfTElOS1NQRUVEX0ZPUkNFfE5WUkVHX0xJTktTUEVFRF8xMDsKIAkJbmV3ZHVwID0gMDsKIAkJcmV0dmFsID0gMDsKQEAgLTMxNjEsOCArMzA2Miw2IEBACiAJfQogCiAJaWYgKG5wLT5hdXRvbmVnID09IDApIHsKLQkJZHByaW50ayhLRVJOX0RFQlVHICIlczogbnZfdXBkYXRlX2xpbmtzcGVlZDogYXV0b25lZyBvZmYsIFBIWSBzZXQgdG8gMHglMDR4LlxuIiwKLQkJCQlkZXYtPm5hbWUsIG5wLT5maXhlZF9tb2RlKTsKIAkJaWYgKG5wLT5maXhlZF9tb2RlICYgTFBBXzEwMEZVTEwpIHsKIAkJCW5ld2xzID0gTlZSRUdfTElOS1NQRUVEX0ZPUkNFfE5WUkVHX0xJTktTUEVFRF8xMDA7CiAJCQluZXdkdXAgPSAxOwpAQCAtMzE4NSwxNCArMzA4NCwxMSBAQAogCQluZXdscyA9IE5WUkVHX0xJTktTUEVFRF9GT1JDRXxOVlJFR19MSU5LU1BFRURfMTA7CiAJCW5ld2R1cCA9IDA7CiAJCXJldHZhbCA9IDA7Ci0JCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IGF1dG9uZWcgbm90IGNvbXBsZXRlZCAtIGZhbGxpbmcgYmFjayB0byAxMEhELlxuIiwgZGV2LT5uYW1lKTsKIAkJZ290byBzZXRfc3BlZWQ7CiAJfQogCiAJYWR2ID0gbWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIE1JSV9BRFZFUlRJU0UsIE1JSV9SRUFEKTsKIAlscGEgPSBtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgTUlJX0xQQSwgTUlJX1JFQUQpOwotCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IG52X3VwZGF0ZV9saW5rc3BlZWQ6IFBIWSBhZHZlcnRpc2VzIDB4JTA0eCwgbHBhIDB4JTA0eC5cbiIsCi0JCQkJZGV2LT5uYW1lLCBhZHYsIGxwYSk7CiAKIAlyZXR2YWwgPSAxOwogCWlmIChucC0+Z2lnYWJpdCA9PSBQSFlfR0lHQUJJVCkgewpAQCAtMzIwMSw4ICszMDk3LDYgQEAKIAogCQlpZiAoKGNvbnRyb2xfMTAwMCAmIEFEVkVSVElTRV8xMDAwRlVMTCkgJiYKIAkJCShzdGF0dXNfMTAwMCAmIExQQV8xMDAwRlVMTCkpIHsKLQkJCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IG52X3VwZGF0ZV9saW5rc3BlZWQ6IEdCaXQgZXRoZXJuZXQgZGV0ZWN0ZWQuXG4iLAotCQkJCWRldi0+bmFtZSk7CiAJCQluZXdscyA9IE5WUkVHX0xJTktTUEVFRF9GT1JDRXxOVlJFR19MSU5LU1BFRURfMTAwMDsKIAkJCW5ld2R1cCA9IDE7CiAJCQlnb3RvIHNldF9zcGVlZDsKQEAgLTMyMjQsNyArMzExOCw2IEBACiAJCW5ld2xzID0gTlZSRUdfTElOS1NQRUVEX0ZPUkNFfE5WUkVHX0xJTktTUEVFRF8xMDsKIAkJbmV3ZHVwID0gMDsKIAl9IGVsc2UgewotCQlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBiYWQgYWJpbGl0eSAlMDR4IC0gZmFsbGluZyBiYWNrIHRvIDEwSEQuXG4iLCBkZXYtPm5hbWUsIGFkdl9scGEpOwogCQluZXdscyA9IE5WUkVHX0xJTktTUEVFRF9GT1JDRXxOVlJFR19MSU5LU1BFRURfMTA7CiAJCW5ld2R1cCA9IDA7CiAJfQpAQCAtMzIzMyw5ICszMTI2LDYgQEAKIAlpZiAobnAtPmR1cGxleCA9PSBuZXdkdXAgJiYgbnAtPmxpbmtzcGVlZCA9PSBuZXdscykKIAkJcmV0dXJuIHJldHZhbDsKIAotCWRwcmludGsoS0VSTl9JTkZPICIlczogY2hhbmdpbmcgbGluayBzZXR0aW5nIGZyb20gJWQvJWQgdG8gJWQvJWQuXG4iLAotCQkJZGV2LT5uYW1lLCBucC0+bGlua3NwZWVkLCBucC0+ZHVwbGV4LCBuZXdscywgbmV3ZHVwKTsKLQogCW5wLT5kdXBsZXggPSBuZXdkdXA7CiAJbnAtPmxpbmtzcGVlZCA9IG5ld2xzOwogCkBAIC0zMzAyLDcgKzMxOTIsNyBAQAogCX0KIAl3cml0ZWwodHhyZWcsIGJhc2UgKyBOdlJlZ1R4V2F0ZXJtYXJrKTsKIAotCXdyaXRlbChOVlJFR19NSVNDMV9GT1JDRSB8ICggbnAtPmR1cGxleCA/IDAgOiBOVlJFR19NSVNDMV9IRCksCisJd3JpdGVsKE5WUkVHX01JU0MxX0ZPUkNFIHwgKG5wLT5kdXBsZXggPyAwIDogTlZSRUdfTUlTQzFfSEQpLAogCQliYXNlICsgTnZSZWdNaXNjMSk7CiAJcGNpX3B1c2goYmFzZSk7CiAJd3JpdGVsKG5wLT5saW5rc3BlZWQsIGJhc2UgKyBOdlJlZ0xpbmtTcGVlZCk7CkBAIC0zMzEyLDggKzMyMDIsOCBAQAogCS8qIHNldHVwIHBhdXNlIGZyYW1lICovCiAJaWYgKG5wLT5kdXBsZXggIT0gMCkgewogCQlpZiAobnAtPmF1dG9uZWcgJiYgbnAtPnBhdXNlX2ZsYWdzICYgTlZfUEFVU0VGUkFNRV9BVVRPTkVHKSB7Ci0JCQlhZHZfcGF1c2UgPSBhZHYgJiAoQURWRVJUSVNFX1BBVVNFX0NBUHwgQURWRVJUSVNFX1BBVVNFX0FTWU0pOwotCQkJbHBhX3BhdXNlID0gbHBhICYgKExQQV9QQVVTRV9DQVB8IExQQV9QQVVTRV9BU1lNKTsKKwkJCWFkdl9wYXVzZSA9IGFkdiAmIChBRFZFUlRJU0VfUEFVU0VfQ0FQIHwgQURWRVJUSVNFX1BBVVNFX0FTWU0pOworCQkJbHBhX3BhdXNlID0gbHBhICYgKExQQV9QQVVTRV9DQVAgfCBMUEFfUEFVU0VfQVNZTSk7CiAKIAkJCXN3aXRjaCAoYWR2X3BhdXNlKSB7CiAJCQljYXNlIEFEVkVSVElTRV9QQVVTRV9DQVA6CkBAIC0zMzI0LDIyICszMjE0LDE3IEBACiAJCQkJfQogCQkJCWJyZWFrOwogCQkJY2FzZSBBRFZFUlRJU0VfUEFVU0VfQVNZTToKLQkJCQlpZiAobHBhX3BhdXNlID09IChMUEFfUEFVU0VfQ0FQfCBMUEFfUEFVU0VfQVNZTSkpCi0JCQkJeworCQkJCWlmIChscGFfcGF1c2UgPT0gKExQQV9QQVVTRV9DQVAgfCBMUEFfUEFVU0VfQVNZTSkpCiAJCQkJCXBhdXNlX2ZsYWdzIHw9IE5WX1BBVVNFRlJBTUVfVFhfRU5BQkxFOwotCQkJCX0KIAkJCQlicmVhazsKLQkJCWNhc2UgQURWRVJUSVNFX1BBVVNFX0NBUHwgQURWRVJUSVNFX1BBVVNFX0FTWU06Ci0JCQkJaWYgKGxwYV9wYXVzZSAmIExQQV9QQVVTRV9DQVApCi0JCQkJeworCQkJY2FzZSBBRFZFUlRJU0VfUEFVU0VfQ0FQIHwgQURWRVJUSVNFX1BBVVNFX0FTWU06CisJCQkJaWYgKGxwYV9wYXVzZSAmIExQQV9QQVVTRV9DQVApIHsKIAkJCQkJcGF1c2VfZmxhZ3MgfD0gIE5WX1BBVVNFRlJBTUVfUlhfRU5BQkxFOwogCQkJCQlpZiAobnAtPnBhdXNlX2ZsYWdzICYgTlZfUEFVU0VGUkFNRV9UWF9SRVEpCiAJCQkJCQlwYXVzZV9mbGFncyB8PSBOVl9QQVVTRUZSQU1FX1RYX0VOQUJMRTsKIAkJCQl9CiAJCQkJaWYgKGxwYV9wYXVzZSA9PSBMUEFfUEFVU0VfQVNZTSkKLQkJCQl7CiAJCQkJCXBhdXNlX2ZsYWdzIHw9IE5WX1BBVVNFRlJBTUVfUlhfRU5BQkxFOwotCQkJCX0KIAkJCQlicmVhazsKIAkJCX0KIAkJfSBlbHNlIHsKQEAgLTMzNjEsMTQgKzMyNDYsMTQgQEAKIAlpZiAobnZfdXBkYXRlX2xpbmtzcGVlZChkZXYpKSB7CiAJCWlmICghbmV0aWZfY2Fycmllcl9vayhkZXYpKSB7CiAJCQluZXRpZl9jYXJyaWVyX29uKGRldik7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogbGluayB1cC5cbiIsIGRldi0+bmFtZSk7CisJCQluZXRkZXZfaW5mbyhkZXYsICJsaW5rIHVwXG4iKTsKIAkJCW52X3R4cnhfZ2F0ZShkZXYsIGZhbHNlKTsKIAkJCW52X3N0YXJ0X3J4KGRldik7CiAJCX0KIAl9IGVsc2UgewogCQlpZiAobmV0aWZfY2Fycmllcl9vayhkZXYpKSB7CiAJCQluZXRpZl9jYXJyaWVyX29mZihkZXYpOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGxpbmsgZG93bi5cbiIsIGRldi0+bmFtZSk7CisJCQluZXRkZXZfaW5mbyhkZXYsICJsaW5rIGRvd25cbiIpOwogCQkJbnZfdHhyeF9nYXRlKGRldiwgdHJ1ZSk7CiAJCQludl9zdG9wX3J4KGRldik7CiAJCX0KQEAgLTMzODIsMTEgKzMyNjcsOSBAQAogCiAJbWlpc3RhdCA9IHJlYWRsKGJhc2UgKyBOdlJlZ01JSVN0YXR1cyk7CiAJd3JpdGVsKE5WUkVHX01JSVNUQVRfTElOS0NIQU5HRSwgYmFzZSArIE52UmVnTUlJU3RhdHVzKTsKLQlkcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGxpbmsgY2hhbmdlIGlycSwgc3RhdHVzIDB4JXguXG4iLCBkZXYtPm5hbWUsIG1paXN0YXQpOwogCiAJaWYgKG1paXN0YXQgJiAoTlZSRUdfTUlJU1RBVF9MSU5LQ0hBTkdFKSkKIAkJbnZfbGlua2NoYW5nZShkZXYpOwotCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IGxpbmsgY2hhbmdlIG5vdGlmaWNhdGlvbiBkb25lLlxuIiwgZGV2LT5uYW1lKTsKIH0KIAogc3RhdGljIHZvaWQgbnZfbXNpX3dvcmthcm91bmQoc3RydWN0IGZlX3ByaXYgKm5wKQpAQCAtMzQzNyw4ICszMzIwLDYgQEAKIAlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXU4IF9faW9tZW0gKmJhc2UgPSBnZXRfaHdiYXNlKGRldik7CiAKLQlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBudl9uaWNfaXJxXG4iLCBkZXYtPm5hbWUpOwotCiAJaWYgKCEobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0VOQUJMRUQpKSB7CiAJCW5wLT5ldmVudHMgPSByZWFkbChiYXNlICsgTnZSZWdJcnFTdGF0dXMpOwogCQl3cml0ZWwobnAtPmV2ZW50cywgYmFzZSArIE52UmVnSXJxU3RhdHVzKTsKQEAgLTM0NDYsNyArMzMyNyw2IEBACiAJCW5wLT5ldmVudHMgPSByZWFkbChiYXNlICsgTnZSZWdNU0lYSXJxU3RhdHVzKTsKIAkJd3JpdGVsKG5wLT5ldmVudHMsIGJhc2UgKyBOdlJlZ01TSVhJcnFTdGF0dXMpOwogCX0KLQlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBpcnE6ICUwOHhcbiIsIGRldi0+bmFtZSwgbnAtPmV2ZW50cyk7CiAJaWYgKCEobnAtPmV2ZW50cyAmIG5wLT5pcnFtYXNrKSkKIAkJcmV0dXJuIElSUV9OT05FOwogCkBAIC0zNDYwLDggKzMzNDAsNiBAQAogCQlfX25hcGlfc2NoZWR1bGUoJm5wLT5uYXBpKTsKIAl9CiAKLQlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBudl9uaWNfaXJxIGNvbXBsZXRlZFxuIiwgZGV2LT5uYW1lKTsKLQogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIApAQCAtMzQ3Niw4ICszMzU0LDYgQEAKIAlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXU4IF9faW9tZW0gKmJhc2UgPSBnZXRfaHdiYXNlKGRldik7CiAKLQlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBudl9uaWNfaXJxX29wdGltaXplZFxuIiwgZGV2LT5uYW1lKTsKLQogCWlmICghKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9FTkFCTEVEKSkgewogCQlucC0+ZXZlbnRzID0gcmVhZGwoYmFzZSArIE52UmVnSXJxU3RhdHVzKTsKIAkJd3JpdGVsKG5wLT5ldmVudHMsIGJhc2UgKyBOdlJlZ0lycVN0YXR1cyk7CkBAIC0zNDg1LDcgKzMzNjEsNiBAQAogCQlucC0+ZXZlbnRzID0gcmVhZGwoYmFzZSArIE52UmVnTVNJWElycVN0YXR1cyk7CiAJCXdyaXRlbChucC0+ZXZlbnRzLCBiYXNlICsgTnZSZWdNU0lYSXJxU3RhdHVzKTsKIAl9Ci0JZHByaW50ayhLRVJOX0RFQlVHICIlczogaXJxOiAlMDh4XG4iLCBkZXYtPm5hbWUsIG5wLT5ldmVudHMpOwogCWlmICghKG5wLT5ldmVudHMgJiBucC0+aXJxbWFzaykpCiAJCXJldHVybiBJUlFfTk9ORTsKIApAQCAtMzQ5OCw3ICszMzczLDYgQEAKIAkJd3JpdGVsKDAsIGJhc2UgKyBOdlJlZ0lycU1hc2spOwogCQlfX25hcGlfc2NoZWR1bGUoJm5wLT5uYXBpKTsKIAl9Ci0JZHByaW50ayhLRVJOX0RFQlVHICIlczogbnZfbmljX2lycV9vcHRpbWl6ZWQgY29tcGxldGVkXG4iLCBkZXYtPm5hbWUpOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtMzUxMiwxMiArMzM4Niw5IEBACiAJaW50IGk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IG52X25pY19pcnFfdHhcbiIsIGRldi0+bmFtZSk7Ci0KLQlmb3IgKGk9MDsgOyBpKyspIHsKKwlmb3IgKGkgPSAwOzsgaSsrKSB7CiAJCWV2ZW50cyA9IHJlYWRsKGJhc2UgKyBOdlJlZ01TSVhJcnFTdGF0dXMpICYgTlZSRUdfSVJRX1RYX0FMTDsKIAkJd3JpdGVsKE5WUkVHX0lSUV9UWF9BTEwsIGJhc2UgKyBOdlJlZ01TSVhJcnFTdGF0dXMpOwotCQlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB0eCBpcnE6ICUwOHhcbiIsIGRldi0+bmFtZSwgZXZlbnRzKTsKIAkJaWYgKCEoZXZlbnRzICYgbnAtPmlycW1hc2spKQogCQkJYnJlYWs7CiAKQEAgLTM1MzYsMTIgKzM0MDcsMTIgQEAKIAkJCQltb2RfdGltZXIoJm5wLT5uaWNfcG9sbCwgamlmZmllcyArIFBPTExfV0FJVCk7CiAJCQl9CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZucC0+bG9jaywgZmxhZ3MpOwotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB0b28gbWFueSBpdGVyYXRpb25zICglZCkgaW4gbnZfbmljX2lycV90eC5cbiIsIGRldi0+bmFtZSwgaSk7CisJCQluZXRkZXZfZGJnKGRldiwgIiVzOiB0b28gbWFueSBpdGVyYXRpb25zICglZClcbiIsCisJCQkJICAgX19mdW5jX18sIGkpOwogCQkJYnJlYWs7CiAJCX0KIAogCX0KLQlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBudl9uaWNfaXJxX3R4IGNvbXBsZXRlZFxuIiwgZGV2LT5uYW1lKTsKIAogCXJldHVybiBJUlFfUkVUVkFMKGkpOwogfQpAQCAtMzU1Myw3ICszNDI0LDcgQEAKIAl1OCBfX2lvbWVtICpiYXNlID0gZ2V0X2h3YmFzZShkZXYpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldGNvZGU7Ci0JaW50IHJ4X2NvdW50LCB0eF93b3JrPTAsIHJ4X3dvcms9MDsKKwlpbnQgcnhfY291bnQsIHR4X3dvcmsgPSAwLCByeF93b3JrID0gMDsKIAogCWRvIHsKIAkJaWYgKCFudl9vcHRpbWl6ZWQobnApKSB7CkBAIC0zNjI2LDEyICszNDk3LDkgQEAKIAlpbnQgaTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JZHByaW50ayhLRVJOX0RFQlVHICIlczogbnZfbmljX2lycV9yeFxuIiwgZGV2LT5uYW1lKTsKLQotCWZvciAoaT0wOyA7IGkrKykgeworCWZvciAoaSA9IDA7OyBpKyspIHsKIAkJZXZlbnRzID0gcmVhZGwoYmFzZSArIE52UmVnTVNJWElycVN0YXR1cykgJiBOVlJFR19JUlFfUlhfQUxMOwogCQl3cml0ZWwoTlZSRUdfSVJRX1JYX0FMTCwgYmFzZSArIE52UmVnTVNJWElycVN0YXR1cyk7Ci0JCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IHJ4IGlycTogJTA4eFxuIiwgZGV2LT5uYW1lLCBldmVudHMpOwogCQlpZiAoIShldmVudHMgJiBucC0+aXJxbWFzaykpCiAJCQlicmVhazsKIApAQCAtMzY1NSwxMSArMzUyMywxMSBAQAogCQkJCW1vZF90aW1lcigmbnAtPm5pY19wb2xsLCBqaWZmaWVzICsgUE9MTF9XQUlUKTsKIAkJCX0KIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5wLT5sb2NrLCBmbGFncyk7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHRvbyBtYW55IGl0ZXJhdGlvbnMgKCVkKSBpbiBudl9uaWNfaXJxX3J4LlxuIiwgZGV2LT5uYW1lLCBpKTsKKwkJCW5ldGRldl9kYmcoZGV2LCAiJXM6IHRvbyBtYW55IGl0ZXJhdGlvbnMgKCVkKVxuIiwKKwkJCQkgICBfX2Z1bmNfXywgaSk7CiAJCQlicmVhazsKIAkJfQogCX0KLQlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBudl9uaWNfaXJxX3J4IGNvbXBsZXRlZFxuIiwgZGV2LT5uYW1lKTsKIAogCXJldHVybiBJUlFfUkVUVkFMKGkpOwogfQpAQCAtMzY3MywxMiArMzU0MSw5IEBACiAJaW50IGk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IG52X25pY19pcnFfb3RoZXJcbiIsIGRldi0+bmFtZSk7Ci0KLQlmb3IgKGk9MDsgOyBpKyspIHsKKwlmb3IgKGkgPSAwOzsgaSsrKSB7CiAJCWV2ZW50cyA9IHJlYWRsKGJhc2UgKyBOdlJlZ01TSVhJcnFTdGF0dXMpICYgTlZSRUdfSVJRX09USEVSOwogCQl3cml0ZWwoTlZSRUdfSVJRX09USEVSLCBiYXNlICsgTnZSZWdNU0lYSXJxU3RhdHVzKTsKLQkJZHByaW50ayhLRVJOX0RFQlVHICIlczogaXJxOiAlMDh4XG4iLCBkZXYtPm5hbWUsIGV2ZW50cyk7CiAJCWlmICghKGV2ZW50cyAmIG5wLT5pcnFtYXNrKSkKIAkJCWJyZWFrOwogCkBAIC0zNzIzLDEyICszNTg4LDEyIEBACiAJCQkJbW9kX3RpbWVyKCZucC0+bmljX3BvbGwsIGppZmZpZXMgKyBQT0xMX1dBSVQpOwogCQkJfQogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbnAtPmxvY2ssIGZsYWdzKTsKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogdG9vIG1hbnkgaXRlcmF0aW9ucyAoJWQpIGluIG52X25pY19pcnFfb3RoZXIuXG4iLCBkZXYtPm5hbWUsIGkpOworCQkJbmV0ZGV2X2RiZyhkZXYsICIlczogdG9vIG1hbnkgaXRlcmF0aW9ucyAoJWQpXG4iLAorCQkJCSAgIF9fZnVuY19fLCBpKTsKIAkJCWJyZWFrOwogCQl9CiAKIAl9Ci0JZHByaW50ayhLRVJOX0RFQlVHICIlczogbnZfbmljX2lycV9vdGhlciBjb21wbGV0ZWRcbiIsIGRldi0+bmFtZSk7CiAKIAlyZXR1cm4gSVJRX1JFVFZBTChpKTsKIH0KQEAgLTM3NDAsOCArMzYwNSw2IEBACiAJdTggX19pb21lbSAqYmFzZSA9IGdldF9od2Jhc2UoZGV2KTsKIAl1MzIgZXZlbnRzOwogCi0JZHByaW50ayhLRVJOX0RFQlVHICIlczogbnZfbmljX2lycV90ZXN0XG4iLCBkZXYtPm5hbWUpOwotCiAJaWYgKCEobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0VOQUJMRUQpKSB7CiAJCWV2ZW50cyA9IHJlYWRsKGJhc2UgKyBOdlJlZ0lycVN0YXR1cykgJiBOVlJFR19JUlFTVEFUX01BU0s7CiAJCXdyaXRlbChOVlJFR19JUlFfVElNRVIsIGJhc2UgKyBOdlJlZ0lycVN0YXR1cyk7CkBAIC0zNzUwLDcgKzM2MTMsNiBAQAogCQl3cml0ZWwoTlZSRUdfSVJRX1RJTUVSLCBiYXNlICsgTnZSZWdNU0lYSXJxU3RhdHVzKTsKIAl9CiAJcGNpX3B1c2goYmFzZSk7Ci0JZHByaW50ayhLRVJOX0RFQlVHICIlczogaXJxOiAlMDh4XG4iLCBkZXYtPm5hbWUsIGV2ZW50cyk7CiAJaWYgKCEoZXZlbnRzICYgTlZSRUdfSVJRX1RJTUVSKSkKIAkJcmV0dXJuIElSUV9SRVRWQUwoMCk7CiAKQEAgLTM3NjAsOCArMzYyMiw2IEBACiAJbnAtPmludHJfdGVzdCA9IDE7CiAJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKIAotCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IG52X25pY19pcnFfdGVzdCBjb21wbGV0ZWRcbiIsIGRldi0+bmFtZSk7Ci0KIAlyZXR1cm4gSVJRX1JFVFZBTCgxKTsKIH0KIApAQCAtMzc3NiwxNyArMzYzNiwxNSBAQAogCSAqIHRoZSByZW1haW5pbmcgOCBpbnRlcnJ1cHRzLgogCSAqLwogCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKLQkJaWYgKChpcnFtYXNrID4+IGkpICYgMHgxKSB7CisJCWlmICgoaXJxbWFzayA+PiBpKSAmIDB4MSkKIAkJCW1zaXhtYXAgfD0gdmVjdG9yIDw8IChpIDw8IDIpOwotCQl9CiAJfQogCXdyaXRlbChyZWFkbChiYXNlICsgTnZSZWdNU0lYTWFwMCkgfCBtc2l4bWFwLCBiYXNlICsgTnZSZWdNU0lYTWFwMCk7CiAKIAltc2l4bWFwID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0JCWlmICgoaXJxbWFzayA+PiAoaSArIDgpKSAmIDB4MSkgeworCQlpZiAoKGlycW1hc2sgPj4gKGkgKyA4KSkgJiAweDEpCiAJCQltc2l4bWFwIHw9IHZlY3RvciA8PCAoaSA8PCAyKTsKLQkJfQogCX0KIAl3cml0ZWwocmVhZGwoYmFzZSArIE52UmVnTVNJWE1hcDEpIHwgbXNpeG1hcCwgYmFzZSArIE52UmVnTVNJWE1hcDEpOwogfQpAQCAtMzgwOSwxNyArMzY2NywxOSBAQAogCX0KIAogCWlmIChucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfQ0FQQUJMRSkgewotCQlmb3IgKGkgPSAwOyBpIDwgKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9WRUNUT1JTX01BU0spOyBpKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IChucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfVkVDVE9SU19NQVNLKTsgaSsrKQogCQkJbnAtPm1zaV94X2VudHJ5W2ldLmVudHJ5ID0gaTsKLQkJfQotCQlpZiAoKHJldCA9IHBjaV9lbmFibGVfbXNpeChucC0+cGNpX2RldiwgbnAtPm1zaV94X2VudHJ5LCAobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX1ZFQ1RPUlNfTUFTSykpKSA9PSAwKSB7CisJCXJldCA9IHBjaV9lbmFibGVfbXNpeChucC0+cGNpX2RldiwgbnAtPm1zaV94X2VudHJ5LCAobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX1ZFQ1RPUlNfTUFTSykpOworCQlpZiAocmV0ID09IDApIHsKIAkJCW5wLT5tc2lfZmxhZ3MgfD0gTlZfTVNJX1hfRU5BQkxFRDsKIAkJCWlmIChvcHRpbWl6YXRpb25fbW9kZSA9PSBOVl9PUFRJTUlaQVRJT05fTU9ERV9USFJPVUdIUFVUICYmICFpbnRyX3Rlc3QpIHsKIAkJCQkvKiBSZXF1ZXN0IGlycSBmb3IgcnggaGFuZGxpbmcgKi8KIAkJCQlzcHJpbnRmKG5wLT5uYW1lX3J4LCAiJXMtcngiLCBkZXYtPm5hbWUpOwogCQkJCWlmIChyZXF1ZXN0X2lycShucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX1JYXS52ZWN0b3IsCiAJCQkJCQludl9uaWNfaXJxX3J4LCBJUlFGX1NIQVJFRCwgbnAtPm5hbWVfcngsIGRldikgIT0gMCkgewotCQkJCQlwcmludGsoS0VSTl9JTkZPICJmb3JjZWRldGg6IHJlcXVlc3RfaXJxIGZhaWxlZCBmb3IgcnggJWRcbiIsIHJldCk7CisJCQkJCW5ldGRldl9pbmZvKGRldiwKKwkJCQkJCSAgICAicmVxdWVzdF9pcnEgZmFpbGVkIGZvciByeCAlZFxuIiwKKwkJCQkJCSAgICByZXQpOwogCQkJCQlwY2lfZGlzYWJsZV9tc2l4KG5wLT5wY2lfZGV2KTsKIAkJCQkJbnAtPm1zaV9mbGFncyAmPSB+TlZfTVNJX1hfRU5BQkxFRDsKIAkJCQkJZ290byBvdXRfZXJyOwpAQCAtMzgyOCw3ICszNjg4LDkgQEAKIAkJCQlzcHJpbnRmKG5wLT5uYW1lX3R4LCAiJXMtdHgiLCBkZXYtPm5hbWUpOwogCQkJCWlmIChyZXF1ZXN0X2lycShucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX1RYXS52ZWN0b3IsCiAJCQkJCQludl9uaWNfaXJxX3R4LCBJUlFGX1NIQVJFRCwgbnAtPm5hbWVfdHgsIGRldikgIT0gMCkgewotCQkJCQlwcmludGsoS0VSTl9JTkZPICJmb3JjZWRldGg6IHJlcXVlc3RfaXJxIGZhaWxlZCBmb3IgdHggJWRcbiIsIHJldCk7CisJCQkJCW5ldGRldl9pbmZvKGRldiwKKwkJCQkJCSAgICAicmVxdWVzdF9pcnEgZmFpbGVkIGZvciB0eCAlZFxuIiwKKwkJCQkJCSAgICByZXQpOwogCQkJCQlwY2lfZGlzYWJsZV9tc2l4KG5wLT5wY2lfZGV2KTsKIAkJCQkJbnAtPm1zaV9mbGFncyAmPSB+TlZfTVNJX1hfRU5BQkxFRDsKIAkJCQkJZ290byBvdXRfZnJlZV9yeDsKQEAgLTM4MzcsNyArMzY5OSw5IEBACiAJCQkJc3ByaW50ZihucC0+bmFtZV9vdGhlciwgIiVzLW90aGVyIiwgZGV2LT5uYW1lKTsKIAkJCQlpZiAocmVxdWVzdF9pcnEobnAtPm1zaV94X2VudHJ5W05WX01TSV9YX1ZFQ1RPUl9PVEhFUl0udmVjdG9yLAogCQkJCQkJbnZfbmljX2lycV9vdGhlciwgSVJRRl9TSEFSRUQsIG5wLT5uYW1lX290aGVyLCBkZXYpICE9IDApIHsKLQkJCQkJcHJpbnRrKEtFUk5fSU5GTyAiZm9yY2VkZXRoOiByZXF1ZXN0X2lycSBmYWlsZWQgZm9yIGxpbmsgJWRcbiIsIHJldCk7CisJCQkJCW5ldGRldl9pbmZvKGRldiwKKwkJCQkJCSAgICAicmVxdWVzdF9pcnEgZmFpbGVkIGZvciBsaW5rICVkXG4iLAorCQkJCQkJICAgIHJldCk7CiAJCQkJCXBjaV9kaXNhYmxlX21zaXgobnAtPnBjaV9kZXYpOwogCQkJCQlucC0+bXNpX2ZsYWdzICY9IH5OVl9NU0lfWF9FTkFCTEVEOwogCQkJCQlnb3RvIG91dF9mcmVlX3R4OwpAQCAtMzg1MSw3ICszNzE1LDkgQEAKIAkJCX0gZWxzZSB7CiAJCQkJLyogUmVxdWVzdCBpcnEgZm9yIGFsbCBpbnRlcnJ1cHRzICovCiAJCQkJaWYgKHJlcXVlc3RfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfQUxMXS52ZWN0b3IsIGhhbmRsZXIsIElSUUZfU0hBUkVELCBkZXYtPm5hbWUsIGRldikgIT0gMCkgewotCQkJCQlwcmludGsoS0VSTl9JTkZPICJmb3JjZWRldGg6IHJlcXVlc3RfaXJxIGZhaWxlZCAlZFxuIiwgcmV0KTsKKwkJCQkJbmV0ZGV2X2luZm8oZGV2LAorCQkJCQkJICAgICJyZXF1ZXN0X2lycSBmYWlsZWQgJWRcbiIsCisJCQkJCQkgICAgcmV0KTsKIAkJCQkJcGNpX2Rpc2FibGVfbXNpeChucC0+cGNpX2Rldik7CiAJCQkJCW5wLT5tc2lfZmxhZ3MgJj0gfk5WX01TSV9YX0VOQUJMRUQ7CiAJCQkJCWdvdG8gb3V0X2VycjsKQEAgLTM4NjQsMTEgKzM3MzAsMTMgQEAKIAkJfQogCX0KIAlpZiAocmV0ICE9IDAgJiYgbnAtPm1zaV9mbGFncyAmIE5WX01TSV9DQVBBQkxFKSB7Ci0JCWlmICgocmV0ID0gcGNpX2VuYWJsZV9tc2kobnAtPnBjaV9kZXYpKSA9PSAwKSB7CisJCXJldCA9IHBjaV9lbmFibGVfbXNpKG5wLT5wY2lfZGV2KTsKKwkJaWYgKHJldCA9PSAwKSB7CiAJCQlucC0+bXNpX2ZsYWdzIHw9IE5WX01TSV9FTkFCTEVEOwogCQkJZGV2LT5pcnEgPSBucC0+cGNpX2Rldi0+aXJxOwogCQkJaWYgKHJlcXVlc3RfaXJxKG5wLT5wY2lfZGV2LT5pcnEsIGhhbmRsZXIsIElSUUZfU0hBUkVELCBkZXYtPm5hbWUsIGRldikgIT0gMCkgewotCQkJCXByaW50ayhLRVJOX0lORk8gImZvcmNlZGV0aDogcmVxdWVzdF9pcnEgZmFpbGVkICVkXG4iLCByZXQpOworCQkJCW5ldGRldl9pbmZvKGRldiwgInJlcXVlc3RfaXJxIGZhaWxlZCAlZFxuIiwKKwkJCQkJICAgIHJldCk7CiAJCQkJcGNpX2Rpc2FibGVfbXNpKG5wLT5wY2lfZGV2KTsKIAkJCQlucC0+bXNpX2ZsYWdzICY9IH5OVl9NU0lfRU5BQkxFRDsKIAkJCQlkZXYtPmlycSA9IG5wLT5wY2lfZGV2LT5pcnE7CkBAIC0zOTAzLDkgKzM3NzEsOCBAQAogCWludCBpOwogCiAJaWYgKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9FTkFCTEVEKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCAobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX1ZFQ1RPUlNfTUFTSyk7IGkrKykgeworCQlmb3IgKGkgPSAwOyBpIDwgKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9WRUNUT1JTX01BU0spOyBpKyspCiAJCQlmcmVlX2lycShucC0+bXNpX3hfZW50cnlbaV0udmVjdG9yLCBkZXYpOwotCQl9CiAJCXBjaV9kaXNhYmxlX21zaXgobnAtPnBjaV9kZXYpOwogCQlucC0+bXNpX2ZsYWdzICY9IH5OVl9NU0lfWF9FTkFCTEVEOwogCX0gZWxzZSB7CkBAIC0zOTU0LDcgKzM4MjEsNyBAQAogCiAJaWYgKG5wLT5yZWNvdmVyX2Vycm9yKSB7CiAJCW5wLT5yZWNvdmVyX2Vycm9yID0gMDsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IE1BQyBpbiByZWNvdmVyYWJsZSBlcnJvciBzdGF0ZVxuIiwgZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X2luZm8oZGV2LCAiTUFDIGluIHJlY292ZXJhYmxlIGVycm9yIHN0YXRlXG4iKTsKIAkJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgewogCQkJbmV0aWZfdHhfbG9ja19iaChkZXYpOwogCQkJbmV0aWZfYWRkcl9sb2NrKGRldik7CkBAIC0zOTc1LDcgKzM4NDIsNyBAQAogCQkJLyogcmVpbml0IG5pYyB2aWV3IG9mIHRoZSByeCBxdWV1ZSAqLwogCQkJd3JpdGVsKG5wLT5yeF9idWZfc3osIGJhc2UgKyBOdlJlZ09mZmxvYWRDb25maWcpOwogCQkJc2V0dXBfaHdfcmluZ3MoZGV2LCBOVl9TRVRVUF9SWF9SSU5HIHwgTlZfU0VUVVBfVFhfUklORyk7Ci0JCQl3cml0ZWwoICgobnAtPnJ4X3Jpbmdfc2l6ZS0xKSA8PCBOVlJFR19SSU5HU1pfUlhTSElGVCkgKyAoKG5wLT50eF9yaW5nX3NpemUtMSkgPDwgTlZSRUdfUklOR1NaX1RYU0hJRlQpLAorCQkJd3JpdGVsKCgobnAtPnJ4X3Jpbmdfc2l6ZS0xKSA8PCBOVlJFR19SSU5HU1pfUlhTSElGVCkgKyAoKG5wLT50eF9yaW5nX3NpemUtMSkgPDwgTlZSRUdfUklOR1NaX1RYU0hJRlQpLAogCQkJCWJhc2UgKyBOdlJlZ1JpbmdTaXplcyk7CiAJCQlwY2lfcHVzaChiYXNlKTsKIAkJCXdyaXRlbChOVlJFR19UWFJYQ1RMX0tJQ0t8bnAtPnR4cnhjdGxfYml0cywgZ2V0X2h3YmFzZShkZXYpICsgTnZSZWdUeFJ4Q29udHJvbCk7CkBAIC00MTA1LDcgKzM5NzIsNyBAQAogCX0KIAogCWlmIChuZXRpZl9jYXJyaWVyX29rKGRldikpIHsKLQkJc3dpdGNoKG5wLT5saW5rc3BlZWQgJiAoTlZSRUdfTElOS1NQRUVEX01BU0spKSB7CisJCXN3aXRjaCAobnAtPmxpbmtzcGVlZCAmIChOVlJFR19MSU5LU1BFRURfTUFTSykpIHsKIAkJY2FzZSBOVlJFR19MSU5LU1BFRURfMTA6CiAJCQllY21kLT5zcGVlZCA9IFNQRUVEXzEwOwogCQkJYnJlYWs7CkBAIC00MjUwLDE0ICs0MTE3LDE0IEBACiAJCX0KIAogCQlpZiAobmV0aWZfcnVubmluZyhkZXYpKQotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGxpbmsgZG93bi5cbiIsIGRldi0+bmFtZSk7CisJCQluZXRkZXZfaW5mbyhkZXYsICJsaW5rIGRvd25cbiIpOwogCQlibWNyID0gbWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIE1JSV9CTUNSLCBNSUlfUkVBRCk7CiAJCWlmIChucC0+cGh5X21vZGVsID09IFBIWV9NT0RFTF9NQVJWRUxMX0UzMDE2KSB7CiAJCQlibWNyIHw9IEJNQ1JfQU5FTkFCTEU7CiAJCQkvKiByZXNldCB0aGUgcGh5IGluIG9yZGVyIGZvciBzZXR0aW5ncyB0byBzdGljaywKIAkJCSAqIGFuZCBjYXVzZSBhdXRvbmVnIHRvIHN0YXJ0ICovCiAJCQlpZiAocGh5X3Jlc2V0KGRldiwgYm1jcikpIHsKLQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogcGh5IHJlc2V0IGZhaWxlZFxuIiwgZGV2LT5uYW1lKTsKKwkJCQluZXRkZXZfaW5mbyhkZXYsICJwaHkgcmVzZXQgZmFpbGVkXG4iKTsKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KIAkJfSBlbHNlIHsKQEAgLTQzMDYsNyArNDE3Myw3IEBACiAJCWlmIChucC0+cGh5X291aSA9PSBQSFlfT1VJX01BUlZFTEwpIHsKIAkJCS8qIHJlc2V0IHRoZSBwaHkgaW4gb3JkZXIgZm9yIGZvcmNlZCBtb2RlIHNldHRpbmdzIHRvIHN0aWNrICovCiAJCQlpZiAocGh5X3Jlc2V0KGRldiwgYm1jcikpIHsKLQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogcGh5IHJlc2V0IGZhaWxlZFxuIiwgZGV2LT5uYW1lKTsKKwkJCQluZXRkZXZfaW5mbyhkZXYsICJwaHkgcmVzZXQgZmFpbGVkXG4iKTsKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KIAkJfSBlbHNlIHsKQEAgLTQzNDQsNyArNDIxMSw3IEBACiAKIAlyZWdzLT52ZXJzaW9uID0gRk9SQ0VERVRIX1JFR1NfVkVSOwogCXNwaW5fbG9ja19pcnEoJm5wLT5sb2NrKTsKLQlmb3IgKGkgPSAwO2kgPD0gbnAtPnJlZ2lzdGVyX3NpemUvc2l6ZW9mKHUzMik7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDw9IG5wLT5yZWdpc3Rlcl9zaXplL3NpemVvZih1MzIpOyBpKyspCiAJCXJidWZbaV0gPSByZWFkbChiYXNlICsgaSpzaXplb2YodTMyKSk7CiAJc3Bpbl91bmxvY2tfaXJxKCZucC0+bG9jayk7CiB9CkBAIC00MzY4LDcgKzQyMzUsNyBAQAogCQkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKIAkJCW5ldGlmX2FkZHJfdW5sb2NrKGRldik7CiAJCQluZXRpZl90eF91bmxvY2tfYmgoZGV2KTsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBsaW5rIGRvd24uXG4iLCBkZXYtPm5hbWUpOworCQkJbmV0ZGV2X2luZm8oZGV2LCAibGluayBkb3duXG4iKTsKIAkJfQogCiAJCWJtY3IgPSBtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgTUlJX0JNQ1IsIE1JSV9SRUFEKTsKQEAgLTQzNzYsNyArNDI0Myw3IEBACiAJCQlibWNyIHw9IEJNQ1JfQU5FTkFCTEU7CiAJCQkvKiByZXNldCB0aGUgcGh5IGluIG9yZGVyIGZvciBzZXR0aW5ncyB0byBzdGljayovCiAJCQlpZiAocGh5X3Jlc2V0KGRldiwgYm1jcikpIHsKLQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogcGh5IHJlc2V0IGZhaWxlZFxuIiwgZGV2LT5uYW1lKTsKKwkJCQluZXRkZXZfaW5mbyhkZXYsICJwaHkgcmVzZXQgZmFpbGVkXG4iKTsKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KIAkJfSBlbHNlIHsKQEAgLTQ0NjQsMTAgKzQzMzEsOSBAQAogCQkJCXBjaV9mcmVlX2NvbnNpc3RlbnQobnAtPnBjaV9kZXYsIHNpemVvZihzdHJ1Y3QgcmluZ19kZXNjX2V4KSAqIChyaW5nLT5yeF9wZW5kaW5nICsgcmluZy0+dHhfcGVuZGluZyksCiAJCQkJCQkgICAgcnh0eF9yaW5nLCByaW5nX2FkZHIpOwogCQl9Ci0JCWlmIChyeF9za2J1ZmYpCi0JCQlrZnJlZShyeF9za2J1ZmYpOwotCQlpZiAodHhfc2tidWZmKQotCQkJa2ZyZWUodHhfc2tidWZmKTsKKworCQlrZnJlZShyeF9za2J1ZmYpOworCQlrZnJlZSh0eF9za2J1ZmYpOwogCQlnb3RvIGV4aXQ7CiAJfQogCkBAIC00NDkxLDE0ICs0MzU3LDE0IEBACiAJbnAtPnR4X3Jpbmdfc2l6ZSA9IHJpbmctPnR4X3BlbmRpbmc7CiAKIAlpZiAoIW52X29wdGltaXplZChucCkpIHsKLQkJbnAtPnJ4X3Jpbmcub3JpZyA9IChzdHJ1Y3QgcmluZ19kZXNjKilyeHR4X3Jpbmc7CisJCW5wLT5yeF9yaW5nLm9yaWcgPSAoc3RydWN0IHJpbmdfZGVzYyAqKXJ4dHhfcmluZzsKIAkJbnAtPnR4X3Jpbmcub3JpZyA9ICZucC0+cnhfcmluZy5vcmlnW25wLT5yeF9yaW5nX3NpemVdOwogCX0gZWxzZSB7Ci0JCW5wLT5yeF9yaW5nLmV4ID0gKHN0cnVjdCByaW5nX2Rlc2NfZXgqKXJ4dHhfcmluZzsKKwkJbnAtPnJ4X3JpbmcuZXggPSAoc3RydWN0IHJpbmdfZGVzY19leCAqKXJ4dHhfcmluZzsKIAkJbnAtPnR4X3JpbmcuZXggPSAmbnAtPnJ4X3JpbmcuZXhbbnAtPnJ4X3Jpbmdfc2l6ZV07CiAJfQotCW5wLT5yeF9za2IgPSAoc3RydWN0IG52X3NrYl9tYXAqKXJ4X3NrYnVmZjsKLQlucC0+dHhfc2tiID0gKHN0cnVjdCBudl9za2JfbWFwKil0eF9za2J1ZmY7CisJbnAtPnJ4X3NrYiA9IChzdHJ1Y3QgbnZfc2tiX21hcCAqKXJ4X3NrYnVmZjsKKwlucC0+dHhfc2tiID0gKHN0cnVjdCBudl9za2JfbWFwICopdHhfc2tidWZmOwogCW5wLT5yaW5nX2FkZHIgPSByaW5nX2FkZHI7CiAKIAltZW1zZXQobnAtPnJ4X3NrYiwgMCwgc2l6ZW9mKHN0cnVjdCBudl9za2JfbWFwKSAqIG5wLT5yeF9yaW5nX3NpemUpOwpAQCAtNDUxNSw3ICs0MzgxLDcgQEAKIAkJLyogcmVpbml0IG5pYyB2aWV3IG9mIHRoZSBxdWV1ZXMgKi8KIAkJd3JpdGVsKG5wLT5yeF9idWZfc3osIGJhc2UgKyBOdlJlZ09mZmxvYWRDb25maWcpOwogCQlzZXR1cF9od19yaW5ncyhkZXYsIE5WX1NFVFVQX1JYX1JJTkcgfCBOVl9TRVRVUF9UWF9SSU5HKTsKLQkJd3JpdGVsKCAoKG5wLT5yeF9yaW5nX3NpemUtMSkgPDwgTlZSRUdfUklOR1NaX1JYU0hJRlQpICsgKChucC0+dHhfcmluZ19zaXplLTEpIDw8IE5WUkVHX1JJTkdTWl9UWFNISUZUKSwKKwkJd3JpdGVsKCgobnAtPnJ4X3Jpbmdfc2l6ZS0xKSA8PCBOVlJFR19SSU5HU1pfUlhTSElGVCkgKyAoKG5wLT50eF9yaW5nX3NpemUtMSkgPDwgTlZSRUdfUklOR1NaX1RYU0hJRlQpLAogCQkJYmFzZSArIE52UmVnUmluZ1NpemVzKTsKIAkJcGNpX3B1c2goYmFzZSk7CiAJCXdyaXRlbChOVlJFR19UWFJYQ1RMX0tJQ0t8bnAtPnR4cnhjdGxfYml0cywgZ2V0X2h3YmFzZShkZXYpICsgTnZSZWdUeFJ4Q29udHJvbCk7CkBAIC00NTUwLDEyICs0NDE2LDExIEBACiAKIAlpZiAoKCFucC0+YXV0b25lZyAmJiBucC0+ZHVwbGV4ID09IDApIHx8CiAJICAgIChucC0+YXV0b25lZyAmJiAhcGF1c2UtPmF1dG9uZWcgJiYgbnAtPmR1cGxleCA9PSAwKSkgewotCQlwcmludGsoS0VSTl9JTkZPICIlczogY2FuIG5vdCBzZXQgcGF1c2Ugc2V0dGluZ3Mgd2hlbiBmb3JjZWQgbGluayBpcyBpbiBoYWxmIGR1cGxleC5cbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOworCQluZXRkZXZfaW5mbyhkZXYsICJjYW4gbm90IHNldCBwYXVzZSBzZXR0aW5ncyB3aGVuIGZvcmNlZCBsaW5rIGlzIGluIGhhbGYgZHVwbGV4XG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlmIChwYXVzZS0+dHhfcGF1c2UgJiYgIShucC0+cGF1c2VfZmxhZ3MgJiBOVl9QQVVTRUZSQU1FX1RYX0NBUEFCTEUpKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBoYXJkd2FyZSBkb2VzIG5vdCBzdXBwb3J0IHR4IHBhdXNlIGZyYW1lcy5cbiIsIGRldi0+bmFtZSk7CisJCW5ldGRldl9pbmZvKGRldiwgImhhcmR3YXJlIGRvZXMgbm90IHN1cHBvcnQgdHggcGF1c2UgZnJhbWVzXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC00NTkwLDcgKzQ0NTUsNyBAQAogCQltaWlfcncoZGV2LCBucC0+cGh5YWRkciwgTUlJX0FEVkVSVElTRSwgYWR2KTsKIAogCQlpZiAobmV0aWZfcnVubmluZyhkZXYpKQotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGxpbmsgZG93bi5cbiIsIGRldi0+bmFtZSk7CisJCQluZXRkZXZfaW5mbyhkZXYsICJsaW5rIGRvd25cbiIpOwogCQlibWNyID0gbWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIE1JSV9CTUNSLCBNSUlfUkVBRCk7CiAJCWJtY3IgfD0gKEJNQ1JfQU5FTkFCTEUgfCBCTUNSX0FOUkVTVEFSVCk7CiAJCW1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBNSUlfQk1DUiwgYm1jcik7CkBAIC00ODQxLDcgKzQ3MDYsNyBAQAogCS8qIHJlaW5pdCBuaWMgdmlldyBvZiB0aGUgcnggcXVldWUgKi8KIAl3cml0ZWwobnAtPnJ4X2J1Zl9zeiwgYmFzZSArIE52UmVnT2ZmbG9hZENvbmZpZyk7CiAJc2V0dXBfaHdfcmluZ3MoZGV2LCBOVl9TRVRVUF9SWF9SSU5HIHwgTlZfU0VUVVBfVFhfUklORyk7Ci0Jd3JpdGVsKCAoKG5wLT5yeF9yaW5nX3NpemUtMSkgPDwgTlZSRUdfUklOR1NaX1JYU0hJRlQpICsgKChucC0+dHhfcmluZ19zaXplLTEpIDw8IE5WUkVHX1JJTkdTWl9UWFNISUZUKSwKKwl3cml0ZWwoKChucC0+cnhfcmluZ19zaXplLTEpIDw8IE5WUkVHX1JJTkdTWl9SWFNISUZUKSArICgobnAtPnR4X3Jpbmdfc2l6ZS0xKSA8PCBOVlJFR19SSU5HU1pfVFhTSElGVCksCiAJCWJhc2UgKyBOdlJlZ1JpbmdTaXplcyk7CiAJcGNpX3B1c2goYmFzZSk7CiAKQEAgLTQ4NTIsOCArNDcxNyw3IEBACiAJcGt0X2xlbiA9IEVUSF9EQVRBX0xFTjsKIAl0eF9za2IgPSBkZXZfYWxsb2Nfc2tiKHBrdF9sZW4pOwogCWlmICghdHhfc2tiKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiZGV2X2FsbG9jX3NrYigpIGZhaWxlZCBkdXJpbmcgbG9vcGJhY2sgdGVzdCIKLQkJCSAiIG9mICVzXG4iLCBkZXYtPm5hbWUpOworCQluZXRkZXZfZXJyKGRldiwgImRldl9hbGxvY19za2IoKSBmYWlsZWQgZHVyaW5nIGxvb3BiYWNrIHRlc3RcbiIpOwogCQlyZXQgPSAwOwogCQlnb3RvIG91dDsKIAl9CkBAIC00ODkzLDI5ICs0NzU3LDIyIEBACiAJCWlmIChmbGFncyAmIE5WX1JYX0VSUk9SKQogCQkJcmV0ID0gMDsKIAl9IGVsc2UgewotCQlpZiAoZmxhZ3MgJiBOVl9SWDJfRVJST1IpIHsKKwkJaWYgKGZsYWdzICYgTlZfUlgyX0VSUk9SKQogCQkJcmV0ID0gMDsKLQkJfQogCX0KIAogCWlmIChyZXQpIHsKIAkJaWYgKGxlbiAhPSBwa3RfbGVuKSB7CiAJCQlyZXQgPSAwOwotCQkJZHByaW50ayhLRVJOX0RFQlVHICIlczogbG9vcGJhY2sgbGVuIG1pc21hdGNoICVkIHZzICVkXG4iLAotCQkJCWRldi0+bmFtZSwgbGVuLCBwa3RfbGVuKTsKIAkJfSBlbHNlIHsKIAkJCXJ4X3NrYiA9IG5wLT5yeF9za2JbMF0uc2tiOwogCQkJZm9yIChpID0gMDsgaSA8IHBrdF9sZW47IGkrKykgewogCQkJCWlmIChyeF9za2ItPmRhdGFbaV0gIT0gKHU4KShpICYgMHhmZikpIHsKIAkJCQkJcmV0ID0gMDsKLQkJCQkJZHByaW50ayhLRVJOX0RFQlVHICIlczogbG9vcGJhY2sgcGF0dGVybiBjaGVjayBmYWlsZWQgb24gYnl0ZSAlZFxuIiwKLQkJCQkJCWRldi0+bmFtZSwgaSk7CiAJCQkJCWJyZWFrOwogCQkJCX0KIAkJCX0KIAkJfQotCX0gZWxzZSB7Ci0JCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IGxvb3BiYWNrIC0gZGlkIG5vdCByZWNlaXZlIHRlc3QgcGFja2V0XG4iLCBkZXYtPm5hbWUpOwogCX0KIAogCXBjaV91bm1hcF9zaW5nbGUobnAtPnBjaV9kZXYsIHRlc3RfZG1hX2FkZHIsCkBAIC00OTU4LDExICs0ODE1LDEwIEBACiAJCQluZXRpZl9hZGRyX2xvY2soZGV2KTsKIAkJCXNwaW5fbG9ja19pcnEoJm5wLT5sb2NrKTsKIAkJCW52X2Rpc2FibGVfaHdfaW50ZXJydXB0cyhkZXYsIG5wLT5pcnFtYXNrKTsKLQkJCWlmICghKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9FTkFCTEVEKSkgeworCQkJaWYgKCEobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0VOQUJMRUQpKQogCQkJCXdyaXRlbChOVlJFR19JUlFTVEFUX01BU0ssIGJhc2UgKyBOdlJlZ0lycVN0YXR1cyk7Ci0JCQl9IGVsc2UgeworCQkJZWxzZQogCQkJCXdyaXRlbChOVlJFR19JUlFTVEFUX01BU0ssIGJhc2UgKyBOdlJlZ01TSVhJcnFTdGF0dXMpOwotCQkJfQogCQkJLyogc3RvcCBlbmdpbmVzICovCiAJCQludl9zdG9wX3J4dHgoZGV2KTsKIAkJCW52X3R4cnhfcmVzZXQoZGV2KTsKQEAgLTUwMDMsNyArNDg1OSw3IEBACiAJCQkvKiByZWluaXQgbmljIHZpZXcgb2YgdGhlIHJ4IHF1ZXVlICovCiAJCQl3cml0ZWwobnAtPnJ4X2J1Zl9zeiwgYmFzZSArIE52UmVnT2ZmbG9hZENvbmZpZyk7CiAJCQlzZXR1cF9od19yaW5ncyhkZXYsIE5WX1NFVFVQX1JYX1JJTkcgfCBOVl9TRVRVUF9UWF9SSU5HKTsKLQkJCXdyaXRlbCggKChucC0+cnhfcmluZ19zaXplLTEpIDw8IE5WUkVHX1JJTkdTWl9SWFNISUZUKSArICgobnAtPnR4X3Jpbmdfc2l6ZS0xKSA8PCBOVlJFR19SSU5HU1pfVFhTSElGVCksCisJCQl3cml0ZWwoKChucC0+cnhfcmluZ19zaXplLTEpIDw8IE5WUkVHX1JJTkdTWl9SWFNISUZUKSArICgobnAtPnR4X3Jpbmdfc2l6ZS0xKSA8PCBOVlJFR19SSU5HU1pfVFhTSElGVCksCiAJCQkJYmFzZSArIE52UmVnUmluZ1NpemVzKTsKIAkJCXBjaV9wdXNoKGJhc2UpOwogCQkJd3JpdGVsKE5WUkVHX1RYUlhDVExfS0lDS3xucC0+dHhyeGN0bF9iaXRzLCBnZXRfaHdiYXNlKGRldikgKyBOdlJlZ1R4UnhDb250cm9sKTsKQEAgLTUxMDYsOCArNDk2Miw3IEBACiAJCSAgICAoKHR4X2N0cmwgJiBOVlJFR19YTUlUQ1RMX01HTVRfU0VNQV9NQVNLKSA9PSBOVlJFR19YTUlUQ1RMX01HTVRfU0VNQV9GUkVFKSkgewogCQkJbnAtPm1nbXRfc2VtYSA9IDE7CiAJCQlyZXR1cm4gMTsKLQkJfQotCQllbHNlCisJCX0gZWxzZQogCQkJdWRlbGF5KDUwKTsKIAl9CiAKQEAgLTUxNjcsOCArNTAyMiw2IEBACiAJaW50IG9vbSwgaTsKIAl1MzIgbG93OwogCi0JZHByaW50ayhLRVJOX0RFQlVHICJudl9vcGVuOiBiZWdpblxuIik7Ci0KIAkvKiBwb3dlciB1cCBwaHkgKi8KIAltaWlfcncoZGV2LCBucC0+cGh5YWRkciwgTUlJX0JNQ1IsCiAJICAgICAgIG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBNSUlfQk1DUiwgTUlJX1JFQUQpICYgfkJNQ1JfUERPV04pOwpAQCAtNTIwNCw3ICs1MDU3LDcgQEAKIAogCS8qIGdpdmUgaHcgcmluZ3MgKi8KIAlzZXR1cF9od19yaW5ncyhkZXYsIE5WX1NFVFVQX1JYX1JJTkcgfCBOVl9TRVRVUF9UWF9SSU5HKTsKLQl3cml0ZWwoICgobnAtPnJ4X3Jpbmdfc2l6ZS0xKSA8PCBOVlJFR19SSU5HU1pfUlhTSElGVCkgKyAoKG5wLT50eF9yaW5nX3NpemUtMSkgPDwgTlZSRUdfUklOR1NaX1RYU0hJRlQpLAorCXdyaXRlbCgoKG5wLT5yeF9yaW5nX3NpemUtMSkgPDwgTlZSRUdfUklOR1NaX1JYU0hJRlQpICsgKChucC0+dHhfcmluZ19zaXplLTEpIDw8IE5WUkVHX1JJTkdTWl9UWFNISUZUKSwKIAkJYmFzZSArIE52UmVnUmluZ1NpemVzKTsKIAogCXdyaXRlbChucC0+bGlua3NwZWVkLCBiYXNlICsgTnZSZWdMaW5rU3BlZWQpOwpAQCAtNTIxNiw5ICs1MDY5LDExIEBACiAJd3JpdGVsKG5wLT52bGFuY3RsX2JpdHMsIGJhc2UgKyBOdlJlZ1ZsYW5Db250cm9sKTsKIAlwY2lfcHVzaChiYXNlKTsKIAl3cml0ZWwoTlZSRUdfVFhSWENUTF9CSVQxfG5wLT50eHJ4Y3RsX2JpdHMsIGJhc2UgKyBOdlJlZ1R4UnhDb250cm9sKTsKLQlyZWdfZGVsYXkoZGV2LCBOdlJlZ1Vua25vd25TZXR1cFJlZzUsIE5WUkVHX1VOS1NFVFVQNV9CSVQzMSwgTlZSRUdfVU5LU0VUVVA1X0JJVDMxLAotCQkJTlZfU0VUVVA1X0RFTEFZLCBOVl9TRVRVUDVfREVMQVlNQVgsCi0JCQlLRVJOX0lORk8gIm9wZW46IFNldHVwUmVnNSwgQml0IDMxIHJlbWFpbmVkIG9mZlxuIik7CisJaWYgKHJlZ19kZWxheShkZXYsIE52UmVnVW5rbm93blNldHVwUmVnNSwKKwkJICAgICAgTlZSRUdfVU5LU0VUVVA1X0JJVDMxLCBOVlJFR19VTktTRVRVUDVfQklUMzEsCisJCSAgICAgIE5WX1NFVFVQNV9ERUxBWSwgTlZfU0VUVVA1X0RFTEFZTUFYKSkKKwkJbmV0ZGV2X2luZm8oZGV2LAorCQkJICAgICIlczogU2V0dXBSZWc1LCBCaXQgMzEgcmVtYWluZWQgb2ZmXG4iLCBfX2Z1bmNfXyk7CiAKIAl3cml0ZWwoMCwgYmFzZSArIE52UmVnTUlJTWFzayk7CiAJd3JpdGVsKE5WUkVHX0lSUVNUQVRfTUFTSywgYmFzZSArIE52UmVnSXJxU3RhdHVzKTsKQEAgLTUyNTEsOCArNTEwNiw3IEBACiAJCQl3cml0ZWwoTlZSRUdfUE9MTF9ERUZBVUxUX1RIUk9VR0hQVVQsIGJhc2UgKyBOdlJlZ1BvbGxpbmdJbnRlcnZhbCk7CiAJCWVsc2UKIAkJCXdyaXRlbChOVlJFR19QT0xMX0RFRkFVTFRfQ1BVLCBiYXNlICsgTnZSZWdQb2xsaW5nSW50ZXJ2YWwpOwotCX0KLQllbHNlCisJfSBlbHNlCiAJCXdyaXRlbChwb2xsX2ludGVydmFsICYgMHhGRkZGLCBiYXNlICsgTnZSZWdQb2xsaW5nSW50ZXJ2YWwpOwogCXdyaXRlbChOVlJFR19VTktTRVRVUDZfVkFMLCBiYXNlICsgTnZSZWdVbmtub3duU2V0dXBSZWc2KTsKIAl3cml0ZWwoKG5wLT5waHlhZGRyIDw8IE5WUkVHX0FEQVBUQ1RMX1BIWVNISUZUKXxOVlJFR19BREFQVENUTF9QSFlWQUxJRHxOVlJFR19BREFQVENUTF9SVU5OSU5HLApAQCAtNTI2Myw3ICs1MTE3LDcgQEAKIAkJd3JpdGVsKE5WUkVHX1dBS0VVUEZMQUdTX0VOQUJMRSAsIGJhc2UgKyBOdlJlZ1dha2VVcEZsYWdzKTsKIAogCWkgPSByZWFkbChiYXNlICsgTnZSZWdQb3dlclN0YXRlKTsKLQlpZiAoIChpICYgTlZSRUdfUE9XRVJTVEFURV9QT1dFUkVEVVApID09IDApCisJaWYgKChpICYgTlZSRUdfUE9XRVJTVEFURV9QT1dFUkVEVVApID09IDApCiAJCXdyaXRlbChOVlJFR19QT1dFUlNUQVRFX1BPV0VSRURVUHxpLCBiYXNlICsgTnZSZWdQb3dlclN0YXRlKTsKIAogCXBjaV9wdXNoKGJhc2UpOwpAQCAtNTI3Niw5ICs1MTMwLDggQEAKIAl3cml0ZWwoTlZSRUdfSVJRU1RBVF9NQVNLLCBiYXNlICsgTnZSZWdJcnFTdGF0dXMpOwogCXBjaV9wdXNoKGJhc2UpOwogCi0JaWYgKG52X3JlcXVlc3RfaXJxKGRldiwgMCkpIHsKKwlpZiAobnZfcmVxdWVzdF9pcnEoZGV2LCAwKSkKIAkJZ290byBvdXRfZHJhaW47Ci0JfQogCiAJLyogYXNrIGZvciBpbnRlcnJ1cHRzICovCiAJbnZfZW5hYmxlX2h3X2ludGVycnVwdHMoZGV2LCBucC0+aXJxbWFzayk7CkBAIC01Mjk2LDcgKzUxNDksNiBAQAogCQl1MzIgbWlpc3RhdDsKIAkJbWlpc3RhdCA9IHJlYWRsKGJhc2UgKyBOdlJlZ01JSVN0YXR1cyk7CiAJCXdyaXRlbChOVlJFR19NSUlTVEFUX01BU0tfQUxMLCBiYXNlICsgTnZSZWdNSUlTdGF0dXMpOwotCQlkcHJpbnRrKEtFUk5fSU5GTyAic3RhcnR1cDogZ290IDB4JTA4eC5cbiIsIG1paXN0YXQpOwogCX0KIAkvKiBzZXQgbGlua3NwZWVkIHRvIGludmFsaWQgdmFsdWUsIHRodXMgZm9yY2UgbnZfdXBkYXRlX2xpbmtzcGVlZAogCSAqIHRvIGluaXQgaHcgKi8KQEAgLTUzMDksNyArNTE2MSw3IEBACiAJaWYgKHJldCkgewogCQluZXRpZl9jYXJyaWVyX29uKGRldik7CiAJfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IG5vIGxpbmsgZHVyaW5nIGluaXRpYWxpemF0aW9uLlxuIiwgZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X2luZm8oZGV2LCAibm8gbGluayBkdXJpbmcgaW5pdGlhbGl6YXRpb25cbiIpOwogCQluZXRpZl9jYXJyaWVyX29mZihkZXYpOwogCX0KIAlpZiAob29tKQpAQCAtNTM1Miw3ICs1MjA0LDYgQEAKIAliYXNlID0gZ2V0X2h3YmFzZShkZXYpOwogCW52X2Rpc2FibGVfaHdfaW50ZXJydXB0cyhkZXYsIG5wLT5pcnFtYXNrKTsKIAlwY2lfcHVzaChiYXNlKTsKLQlkcHJpbnRrKEtFUk5fSU5GTyAiJXM6IElycW1hc2sgaXMgemVybyBhZ2FpblxuIiwgZGV2LT5uYW1lKTsKIAogCXNwaW5fdW5sb2NrX2lycSgmbnAtPmxvY2spOwogCkBAIC01NDIxLDggKzUyNzIsOCBAQAogCXN0YXRpYyBpbnQgcHJpbnRlZF92ZXJzaW9uOwogCiAJaWYgKCFwcmludGVkX3ZlcnNpb24rKykKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFJldmVyc2UgRW5naW5lZXJlZCBuRm9yY2UgZXRoZXJuZXQiCi0JCSAgICAgICAiIGRyaXZlci4gVmVyc2lvbiAlcy5cbiIsIERSVl9OQU1FLCBGT1JDRURFVEhfVkVSU0lPTik7CisJCXByX2luZm8oIlJldmVyc2UgRW5naW5lZXJlZCBuRm9yY2UgZXRoZXJuZXQgZHJpdmVyLiBWZXJzaW9uICVzLlxuIiwKKwkJCUZPUkNFREVUSF9WRVJTSU9OKTsKIAogCWRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3QgZmVfcHJpdikpOwogCWVyciA9IC1FTk9NRU07CkBAIC01NDY1LDEwICs1MzE2LDYgQEAKIAllcnIgPSAtRUlOVkFMOwogCWFkZHIgPSAwOwogCWZvciAoaSA9IDA7IGkgPCBERVZJQ0VfQ09VTlRfUkVTT1VSQ0U7IGkrKykgewotCQlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiByZXNvdXJjZSAlZCBzdGFydCAlcCBsZW4gJWxkIGZsYWdzIDB4JTA4bHguXG4iLAotCQkJCXBjaV9uYW1lKHBjaV9kZXYpLCBpLCAodm9pZCopcGNpX3Jlc291cmNlX3N0YXJ0KHBjaV9kZXYsIGkpLAotCQkJCXBjaV9yZXNvdXJjZV9sZW4ocGNpX2RldiwgaSksCi0JCQkJcGNpX3Jlc291cmNlX2ZsYWdzKHBjaV9kZXYsIGkpKTsKIAkJaWYgKHBjaV9yZXNvdXJjZV9mbGFncyhwY2lfZGV2LCBpKSAmIElPUkVTT1VSQ0VfTUVNICYmCiAJCQkJcGNpX3Jlc291cmNlX2xlbihwY2lfZGV2LCBpKSA+PSBucC0+cmVnaXN0ZXJfc2l6ZSkgewogCQkJYWRkciA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2lfZGV2LCBpKTsKQEAgLTU0NzYsOCArNTMyMyw3IEBACiAJCX0KIAl9CiAJaWYgKGkgPT0gREVWSUNFX0NPVU5UX1JFU09VUkNFKSB7Ci0JCWRldl9wcmludGsoS0VSTl9JTkZPLCAmcGNpX2Rldi0+ZGV2LAotCQkJICAgIkNvdWxkbid0IGZpbmQgcmVnaXN0ZXIgd2luZG93XG4iKTsKKwkJZGV2X2luZm8oJnBjaV9kZXYtPmRldiwgIkNvdWxkbid0IGZpbmQgcmVnaXN0ZXIgd2luZG93XG4iKTsKIAkJZ290byBvdXRfcmVscmVnOwogCX0KIApAQCAtNTQ5MywxMyArNTMzOSwxMyBAQAogCQlucC0+dHhyeGN0bF9iaXRzID0gTlZSRUdfVFhSWENUTF9ERVNDXzM7CiAJCWlmIChkbWFfNjRiaXQpIHsKIAkJCWlmIChwY2lfc2V0X2RtYV9tYXNrKHBjaV9kZXYsIERNQV9CSVRfTUFTSygzOSkpKQotCQkJCWRldl9wcmludGsoS0VSTl9JTkZPLCAmcGNpX2Rldi0+ZGV2LAotCQkJCQkiNjQtYml0IERNQSBmYWlsZWQsIHVzaW5nIDMyLWJpdCBhZGRyZXNzaW5nXG4iKTsKKwkJCQlkZXZfaW5mbygmcGNpX2Rldi0+ZGV2LAorCQkJCQkgIjY0LWJpdCBETUEgZmFpbGVkLCB1c2luZyAzMi1iaXQgYWRkcmVzc2luZ1xuIik7CiAJCQllbHNlCiAJCQkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hJR0hETUE7CiAJCQlpZiAocGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBjaV9kZXYsIERNQV9CSVRfTUFTSygzOSkpKSB7Ci0JCQkJZGV2X3ByaW50ayhLRVJOX0lORk8sICZwY2lfZGV2LT5kZXYsCi0JCQkJCSI2NC1iaXQgRE1BIChjb25zaXN0ZW50KSBmYWlsZWQsIHVzaW5nIDMyLWJpdCByaW5nIGJ1ZmZlcnNcbiIpOworCQkJCWRldl9pbmZvKCZwY2lfZGV2LT5kZXYsCisJCQkJCSAiNjQtYml0IERNQSAoY29uc2lzdGVudCkgZmFpbGVkLCB1c2luZyAzMi1iaXQgcmluZyBidWZmZXJzXG4iKTsKIAkJCX0KIAkJfQogCX0gZWxzZSBpZiAoaWQtPmRyaXZlcl9kYXRhICYgREVWX0hBU19MQVJHRURFU0MpIHsKQEAgLTU2MjAsNyArNTQ2Niw5IEBACiAJCWRldi0+ZGV2X2FkZHJbNF0gPSAobnAtPm9yaWdfbWFjWzBdID4+ICA4KSAmIDB4ZmY7CiAJCWRldi0+ZGV2X2FkZHJbNV0gPSAobnAtPm9yaWdfbWFjWzBdID4+ICAwKSAmIDB4ZmY7CiAJCXdyaXRlbCh0eHJlZ3xOVlJFR19UUkFOU01JVFBPTExfTUFDX0FERFJfUkVWLCBiYXNlICsgTnZSZWdUcmFuc21pdFBvbGwpOwotCQlwcmludGsoS0VSTl9ERUJVRyAibnZfcHJvYmU6IHNldCB3b3JrYXJvdW5kIGJpdCBmb3IgcmV2ZXJzZWQgbWFjIGFkZHJcbiIpOworCQlkZXZfZGJnKCZwY2lfZGV2LT5kZXYsCisJCQkiJXM6IHNldCB3b3JrYXJvdW5kIGJpdCBmb3IgcmV2ZXJzZWQgbWFjIGFkZHJcbiIsCisJCQlfX2Z1bmNfXyk7CiAJfQogCW1lbWNweShkZXYtPnBlcm1fYWRkciwgZGV2LT5kZXZfYWRkciwgZGV2LT5hZGRyX2xlbik7CiAKQEAgLTU2MjksMTcgKzU0NzcsMTQgQEAKIAkJICogQmFkIG1hYyBhZGRyZXNzLiBBdCBsZWFzdCBvbmUgYmlvcyBzZXRzIHRoZSBtYWMgYWRkcmVzcwogCQkgKiB0byAwMToyMzo0NTo2Nzo4OTphYgogCQkgKi8KLQkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJnBjaV9kZXYtPmRldiwKLQkJCSJJbnZhbGlkIE1hYyBhZGRyZXNzIGRldGVjdGVkOiAlcE1cbiIsCi0JCSAgICAgICAgZGV2LT5kZXZfYWRkcik7Ci0JCWRldl9wcmludGsoS0VSTl9FUlIsICZwY2lfZGV2LT5kZXYsCi0JCQkiUGxlYXNlIGNvbXBsYWluIHRvIHlvdXIgaGFyZHdhcmUgdmVuZG9yLiBTd2l0Y2hpbmcgdG8gYSByYW5kb20gTUFDLlxuIik7CisJCWRldl9lcnIoJnBjaV9kZXYtPmRldiwKKwkJCSJJbnZhbGlkIE1BQyBhZGRyZXNzIGRldGVjdGVkOiAlcE0gLSBQbGVhc2UgY29tcGxhaW4gdG8geW91ciBoYXJkd2FyZSB2ZW5kb3IuXG4iLAorCQkJZGV2LT5kZXZfYWRkcik7CiAJCXJhbmRvbV9ldGhlcl9hZGRyKGRldi0+ZGV2X2FkZHIpOworCQlkZXZfZXJyKCZwY2lfZGV2LT5kZXYsCisJCQkiVXNpbmcgcmFuZG9tIE1BQyBhZGRyZXNzOiAlcE1cbiIsIGRldi0+ZGV2X2FkZHIpOwogCX0KIAotCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IE1BQyBBZGRyZXNzICVwTVxuIiwKLQkJcGNpX25hbWUocGNpX2RldiksIGRldi0+ZGV2X2FkZHIpOwotCiAJLyogc2V0IG1hYyBhZGRyZXNzICovCiAJbnZfY29weV9tYWNfdG9faHcoZGV2KTsKIApAQCAtNTY2MywxNiArNTUwOCwxNSBAQAogCQl3cml0ZWwocG93ZXJzdGF0ZSwgYmFzZSArIE52UmVnUG93ZXJTdGF0ZTIpOwogCX0KIAotCWlmIChucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMSkgeworCWlmIChucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMSkKIAkJbnAtPnR4X2ZsYWdzID0gTlZfVFhfVkFMSUQ7Ci0JfSBlbHNlIHsKKwllbHNlCiAJCW5wLT50eF9mbGFncyA9IE5WX1RYMl9WQUxJRDsKLQl9CiAKIAlucC0+bXNpX2ZsYWdzID0gMDsKLQlpZiAoKGlkLT5kcml2ZXJfZGF0YSAmIERFVl9IQVNfTVNJKSAmJiBtc2kpIHsKKwlpZiAoKGlkLT5kcml2ZXJfZGF0YSAmIERFVl9IQVNfTVNJKSAmJiBtc2kpCiAJCW5wLT5tc2lfZmxhZ3MgfD0gTlZfTVNJX0NBUEFCTEU7Ci0JfQorCiAJaWYgKChpZC0+ZHJpdmVyX2RhdGEgJiBERVZfSEFTX01TSV9YKSAmJiBtc2l4KSB7CiAJCS8qIG1zaXggaGFzIGhhZCByZXBvcnRlZCBpc3N1ZXMgd2hlbiBtb2RpZnlpbmcgaXJxbWFzawogCQkgICBhcyBpbiB0aGUgY2FzZSBvZiBuYXBpLCB0aGVyZWZvcmUsIGRpc2FibGUgZm9yIG5vdwpAQCAtNTcwMiwxMSArNTU0Niw5IEBACiAJaWYgKGlkLT5kcml2ZXJfZGF0YSAmIERFVl9ORUVEX1RJTUVSSVJRKQogCQlucC0+aXJxbWFzayB8PSBOVlJFR19JUlFfVElNRVI7CiAJaWYgKGlkLT5kcml2ZXJfZGF0YSAmIERFVl9ORUVEX0xJTktUSU1FUikgewotCQlkcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGxpbmsgdGltZXIgb24uXG4iLCBwY2lfbmFtZShwY2lfZGV2KSk7CiAJCW5wLT5uZWVkX2xpbmt0aW1lciA9IDE7CiAJCW5wLT5saW5rX3RpbWVvdXQgPSBqaWZmaWVzICsgTElOS19USU1FT1VUOwogCX0gZWxzZSB7Ci0JCWRwcmludGsoS0VSTl9JTkZPICIlczogbGluayB0aW1lciBvZmYuXG4iLCBwY2lfbmFtZShwY2lfZGV2KSk7CiAJCW5wLT5uZWVkX2xpbmt0aW1lciA9IDA7CiAJfQogCkBAIC01NzM1LDE5ICs1NTc3LDE0IEBACiAJCSAgICBudl9tZ210X2FjcXVpcmVfc2VtYShkZXYpICYmCiAJCSAgICBudl9tZ210X2dldF92ZXJzaW9uKGRldikpIHsKIAkJCW5wLT5tYWNfaW5fdXNlID0gMTsKLQkJCWlmIChucC0+bWdtdF92ZXJzaW9uID4gMCkgeworCQkJaWYgKG5wLT5tZ210X3ZlcnNpb24gPiAwKQogCQkJCW5wLT5tYWNfaW5fdXNlID0gcmVhZGwoYmFzZSArIE52UmVnTWdtdFVuaXRDb250cm9sKSAmIE5WUkVHX01HTVRVTklUQ09OVFJPTF9JTlVTRTsKLQkJCX0KLQkJCWRwcmludGsoS0VSTl9JTkZPICIlczogbWdtdCB1bml0IGlzIHJ1bm5pbmcuIG1hYyBpbiB1c2UgJXguXG4iLAotCQkJCXBjaV9uYW1lKHBjaV9kZXYpLCBucC0+bWFjX2luX3VzZSk7CiAJCQkvKiBtYW5hZ2VtZW50IHVuaXQgc2V0dXAgdGhlIHBoeSBhbHJlYWR5PyAqLwogCQkJaWYgKG5wLT5tYWNfaW5fdXNlICYmCiAJCQkgICAgKChyZWFkbChiYXNlICsgTnZSZWdUcmFuc21pdHRlckNvbnRyb2wpICYgTlZSRUdfWE1JVENUTF9TWU5DX01BU0spID09CiAJCQkgICAgIE5WUkVHX1hNSVRDVExfU1lOQ19QSFlfSU5JVCkpIHsKIAkJCQkvKiBwaHkgaXMgaW5pdGVkIGJ5IG1nbXQgdW5pdCAqLwogCQkJCXBoeWluaXRpYWxpemVkID0gMTsKLQkJCQlkcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFBoeSBhbHJlYWR5IGluaXRpYWxpemVkIGJ5IG1nbXQgdW5pdC5cbiIsCi0JCQkJCXBjaV9uYW1lKHBjaV9kZXYpKTsKIAkJCX0gZWxzZSB7CiAJCQkJLyogd2UgbmVlZCB0byBpbml0IHRoZSBwaHkgKi8KIAkJCX0KQEAgLTU3NzMsOCArNTYxMCw2IEBACiAJCW5wLT5waHlfbW9kZWwgPSBpZDIgJiBQSFlJRDJfTU9ERUxfTUFTSzsKIAkJaWQxID0gKGlkMSAmIFBIWUlEMV9PVUlfTUFTSykgPDwgUEhZSUQxX09VSV9TSEZUOwogCQlpZDIgPSAoaWQyICYgUEhZSUQyX09VSV9NQVNLKSA+PiBQSFlJRDJfT1VJX1NIRlQ7Ci0JCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IG9wZW46IEZvdW5kIFBIWSAlMDR4OiUwNHggYXQgYWRkcmVzcyAlZC5cbiIsCi0JCQlwY2lfbmFtZShwY2lfZGV2KSwgaWQxLCBpZDIsIHBoeWFkZHIpOwogCQlucC0+cGh5YWRkciA9IHBoeWFkZHI7CiAJCW5wLT5waHlfb3VpID0gaWQxIHwgaWQyOwogCkBAIC01Nzg4LDggKzU2MjMsNyBAQAogCQlicmVhazsKIAl9CiAJaWYgKGkgPT0gMzMpIHsKLQkJZGV2X3ByaW50ayhLRVJOX0lORk8sICZwY2lfZGV2LT5kZXYsCi0JCQkib3BlbjogQ291bGQgbm90IGZpbmQgYSB2YWxpZCBQSFkuXG4iKTsKKwkJZGV2X2luZm8oJnBjaV9kZXYtPmRldiwgIm9wZW46IENvdWxkIG5vdCBmaW5kIGEgdmFsaWQgUEhZXG4iKTsKIAkJZ290byBvdXRfZXJyb3I7CiAJfQogCkBAIC01Nzk5LDkgKzU2MzMsOCBAQAogCX0gZWxzZSB7CiAJCS8qIHNlZSBpZiBpdCBpcyBhIGdpZ2FiaXQgcGh5ICovCiAJCXUzMiBtaWlfc3RhdHVzID0gbWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIE1JSV9CTVNSLCBNSUlfUkVBRCk7Ci0JCWlmIChtaWlfc3RhdHVzICYgUEhZX0dJR0FCSVQpIHsKKwkJaWYgKG1paV9zdGF0dXMgJiBQSFlfR0lHQUJJVCkKIAkJCW5wLT5naWdhYml0ID0gUEhZX0dJR0FCSVQ7Ci0JCX0KIAl9CiAKIAkvKiBzZXQgZGVmYXVsdCBsaW5rIHNwZWVkIHNldHRpbmdzICovCkBAIC01ODExLDM3ICs1NjQ0LDI3IEBACiAKIAllcnIgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAlpZiAoZXJyKSB7Ci0JCWRldl9wcmludGsoS0VSTl9JTkZPLCAmcGNpX2Rldi0+ZGV2LAotCQkJICAgInVuYWJsZSB0byByZWdpc3RlciBuZXRkZXY6ICVkXG4iLCBlcnIpOworCQlkZXZfaW5mbygmcGNpX2Rldi0+ZGV2LCAidW5hYmxlIHRvIHJlZ2lzdGVyIG5ldGRldjogJWRcbiIsIGVycik7CiAJCWdvdG8gb3V0X2Vycm9yOwogCX0KIAotCWRldl9wcmludGsoS0VSTl9JTkZPLCAmcGNpX2Rldi0+ZGV2LCAiaWZuYW1lICVzLCBQSFkgT1VJIDB4JXggQCAlZCwgIgotCQkgICAiYWRkciAlMi4yeDolMi4yeDolMi4yeDolMi4yeDolMi4yeDolMi4yeFxuIiwKLQkJICAgZGV2LT5uYW1lLAotCQkgICBucC0+cGh5X291aSwKLQkJICAgbnAtPnBoeWFkZHIsCi0JCSAgIGRldi0+ZGV2X2FkZHJbMF0sCi0JCSAgIGRldi0+ZGV2X2FkZHJbMV0sCi0JCSAgIGRldi0+ZGV2X2FkZHJbMl0sCi0JCSAgIGRldi0+ZGV2X2FkZHJbM10sCi0JCSAgIGRldi0+ZGV2X2FkZHJbNF0sCi0JCSAgIGRldi0+ZGV2X2FkZHJbNV0pOworCWRldl9pbmZvKCZwY2lfZGV2LT5kZXYsICJpZm5hbWUgJXMsIFBIWSBPVUkgMHgleCBAICVkLCBhZGRyICVwTVxuIiwKKwkJIGRldi0+bmFtZSwgbnAtPnBoeV9vdWksIG5wLT5waHlhZGRyLCBkZXYtPmRldl9hZGRyKTsKIAotCWRldl9wcmludGsoS0VSTl9JTkZPLCAmcGNpX2Rldi0+ZGV2LCAiJXMlcyVzJXMlcyVzJXMlcyVzJXNkZXNjLXYldVxuIiwKLQkJICAgZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfSElHSERNQSA/ICJoaWdoZG1hICIgOiAiIiwKLQkJICAgZGV2LT5mZWF0dXJlcyAmIChORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1NHKSA/Ci0JCSAgIAkiY3N1bSAiIDogIiIsCi0JCSAgIGRldi0+ZmVhdHVyZXMgJiAoTkVUSUZfRl9IV19WTEFOX1JYIHwgTkVUSUZfRl9IV19WTEFOX1RYKSA/Ci0JCSAgIAkidmxhbiAiIDogIiIsCi0JCSAgIGlkLT5kcml2ZXJfZGF0YSAmIERFVl9IQVNfUE9XRVJfQ05UUkwgPyAicHdyY3RsICIgOiAiIiwKLQkJICAgaWQtPmRyaXZlcl9kYXRhICYgREVWX0hBU19NR01UX1VOSVQgPyAibWdtdCAiIDogIiIsCi0JCSAgIGlkLT5kcml2ZXJfZGF0YSAmIERFVl9ORUVEX1RJTUVSSVJRID8gInRpbWlycSAiIDogIiIsCi0JCSAgIG5wLT5naWdhYml0ID09IFBIWV9HSUdBQklUID8gImdiaXQgIiA6ICIiLAotCQkgICBucC0+bmVlZF9saW5rdGltZXIgPyAibG5rdGltICIgOiAiIiwKLQkJICAgbnAtPm1zaV9mbGFncyAmIE5WX01TSV9DQVBBQkxFID8gIm1zaSAiIDogIiIsCi0JCSAgIG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9DQVBBQkxFID8gIm1zaS14ICIgOiAiIiwKLQkJICAgbnAtPmRlc2NfdmVyKTsKKwlkZXZfaW5mbygmcGNpX2Rldi0+ZGV2LCAiJXMlcyVzJXMlcyVzJXMlcyVzJXNkZXNjLXYldVxuIiwKKwkJIGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0hJR0hETUEgPyAiaGlnaGRtYSAiIDogIiIsCisJCSBkZXYtPmZlYXR1cmVzICYgKE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfU0cpID8KKwkJCSJjc3VtICIgOiAiIiwKKwkJIGRldi0+ZmVhdHVyZXMgJiAoTkVUSUZfRl9IV19WTEFOX1JYIHwgTkVUSUZfRl9IV19WTEFOX1RYKSA/CisJCQkidmxhbiAiIDogIiIsCisJCSBpZC0+ZHJpdmVyX2RhdGEgJiBERVZfSEFTX1BPV0VSX0NOVFJMID8gInB3cmN0bCAiIDogIiIsCisJCSBpZC0+ZHJpdmVyX2RhdGEgJiBERVZfSEFTX01HTVRfVU5JVCA/ICJtZ210ICIgOiAiIiwKKwkJIGlkLT5kcml2ZXJfZGF0YSAmIERFVl9ORUVEX1RJTUVSSVJRID8gInRpbWlycSAiIDogIiIsCisJCSBucC0+Z2lnYWJpdCA9PSBQSFlfR0lHQUJJVCA/ICJnYml0ICIgOiAiIiwKKwkJIG5wLT5uZWVkX2xpbmt0aW1lciA/ICJsbmt0aW0gIiA6ICIiLAorCQkgbnAtPm1zaV9mbGFncyAmIE5WX01TSV9DQVBBQkxFID8gIm1zaSAiIDogIiIsCisJCSBucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfQ0FQQUJMRSA/ICJtc2kteCAiIDogIiIsCisJCSBucC0+ZGVzY192ZXIpOwogCiAJcmV0dXJuIDA7CiAKQEAgLTU5MzEsMTMgKzU3NTQsMTMgQEAKIAlpbnQgaTsKIAogCWlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsKLQkJLy8gR3Jvc3MuCisJCS8qIEdyb3NzLiAqLwogCQludl9jbG9zZShkZXYpOwogCX0KIAluZXRpZl9kZXZpY2VfZGV0YWNoKGRldik7CiAKIAkvKiBzYXZlIG5vbi1wY2kgY29uZmlndXJhdGlvbiBzcGFjZSAqLwotCWZvciAoaSA9IDA7aSA8PSBucC0+cmVnaXN0ZXJfc2l6ZS9zaXplb2YodTMyKTsgaSsrKQorCWZvciAoaSA9IDA7IGkgPD0gbnAtPnJlZ2lzdGVyX3NpemUvc2l6ZW9mKHUzMik7IGkrKykKIAkJbnAtPnNhdmVkX2NvbmZpZ19zcGFjZVtpXSA9IHJlYWRsKGJhc2UgKyBpKnNpemVvZih1MzIpKTsKIAogCXBjaV9zYXZlX3N0YXRlKHBkZXYpOwpAQCAtNTk2MCw3ICs1NzgzLDcgQEAKIAlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QwLCAwKTsKIAogCS8qIHJlc3RvcmUgbm9uLXBjaSBjb25maWd1cmF0aW9uIHNwYWNlICovCi0JZm9yIChpID0gMDtpIDw9IG5wLT5yZWdpc3Rlcl9zaXplL3NpemVvZih1MzIpOyBpKyspCisJZm9yIChpID0gMDsgaSA8PSBucC0+cmVnaXN0ZXJfc2l6ZS9zaXplb2YodTMyKTsgaSsrKQogCQl3cml0ZWwobnAtPnNhdmVkX2NvbmZpZ19zcGFjZVtpXSwgYmFzZStpKnNpemVvZih1MzIpKTsKIAogCWlmIChucC0+ZHJpdmVyX2RhdGEgJiBERVZfTkVFRF9NU0lfRklYKQpAQCAtNTk5MCw5ICs1ODEzLDggQEAKIAkgKiBJZiB3ZSByZWFsbHkgZ28gZm9yIHBvd2Vyb2ZmLCB3ZSBtdXN0IG5vdCByZXN0b3JlIHRoZSBNQUMsCiAJICogb3RoZXJ3aXNlIHRoZSBNQUMgZm9yIFdPTCB3aWxsIGJlIHJldmVyc2VkIGF0IGxlYXN0IG9uIHNvbWUgYm9hcmRzLgogCSAqLwotCWlmIChzeXN0ZW1fc3RhdGUgIT0gU1lTVEVNX1BPV0VSX09GRikgeworCWlmIChzeXN0ZW1fc3RhdGUgIT0gU1lTVEVNX1BPV0VSX09GRikKIAkJbnZfcmVzdG9yZV9tYWNfYWRkcihwZGV2KTsKLQl9CiAKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiAJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2dpYW5mYXIuYyBiL2RyaXZlcnMvbmV0L2dpYW5mYXIuYwppbmRleCBkMWJlYzYyLi40NWM0YjdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9naWFuZmFyLmMKKysrIGIvZHJpdmVycy9uZXQvZ2lhbmZhci5jCkBAIC0xNDMsNyArMTQzLDggQEAKIHN0YXRpYyB2b2lkIGdmYXJfaGFsdF9ub2Rpc2FibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiB2b2lkIGdmYXJfc3RhcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBnZmFyX2NsZWFyX2V4YWN0X21hdGNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIHZvaWQgZ2Zhcl9zZXRfbWFjX2Zvcl9hZGRyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBudW0sIHU4ICphZGRyKTsKK3N0YXRpYyB2b2lkIGdmYXJfc2V0X21hY19mb3JfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbnVtLAorCQkJCSAgY29uc3QgdTggKmFkZHIpOwogc3RhdGljIGludCBnZmFyX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpOwogCiBNT0RVTEVfQVVUSE9SKCJGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jIik7CkBAIC0zMDk0LDEwICszMDk1LDEwIEBACiBzdGF0aWMgdm9pZCBnZmFyX2NsZWFyX2V4YWN0X21hdGNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJaW50IGlkeDsKLQl1OCB6ZXJvX2FycltNQUNfQUREUl9MRU5dID0gezAsMCwwLDAsMCwwfTsKKwlzdGF0aWMgY29uc3QgdTggemVyb19hcnJbTUFDX0FERFJfTEVOXSA9IHswLCAwLCAwLCAwLCAwLCAwfTsKIAogCWZvcihpZHggPSAxO2lkeCA8IEdGQVJfRU1fTlVNICsgMTtpZHgrKykKLQkJZ2Zhcl9zZXRfbWFjX2Zvcl9hZGRyKGRldiwgaWR4LCAodTggKil6ZXJvX2Fycik7CisJCWdmYXJfc2V0X21hY19mb3JfYWRkcihkZXYsIGlkeCwgemVyb19hcnIpOwogfQogCiAvKiBTZXQgdGhlIGFwcHJvcHJpYXRlIGhhc2ggYml0IGZvciB0aGUgZ2l2ZW4gYWRkciAqLwpAQCAtMzEzMiw3ICszMTMzLDggQEAKIC8qIFRoZXJlIGFyZSBtdWx0aXBsZSBNQUMgQWRkcmVzcyByZWdpc3RlciBwYWlycyBvbiBzb21lIGNvbnRyb2xsZXJzCiAgKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIG51bXRoIHBhaXIgdG8gYSBnaXZlbiBhZGRyZXNzCiAgKi8KLXN0YXRpYyB2b2lkIGdmYXJfc2V0X21hY19mb3JfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbnVtLCB1OCAqYWRkcikKK3N0YXRpYyB2b2lkIGdmYXJfc2V0X21hY19mb3JfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbnVtLAorCQkJCSAgY29uc3QgdTggKmFkZHIpCiB7CiAJc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IGdmYXIgX19pb21lbSAqcmVncyA9IHByaXYtPmdmYXJncnBbMF0ucmVnczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hwLmMgYi9kcml2ZXJzL25ldC9ocC5jCmluZGV4IGQxNWQyZjIuLmVmMjAxNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hwLmMKKysrIGIvZHJpdmVycy9uZXQvaHAuYwpAQCAtMTYyLDkgKzE2Miw5IEBACiAKIAkvKiBTbmFyZiB0aGUgaW50ZXJydXB0IG5vdy4gIFNvbWVkYXkgdGhpcyBjb3VsZCBiZSBtb3ZlZCB0byBvcGVuKCkuICovCiAJaWYgKGRldi0+aXJxIDwgMikgewotCQlpbnQgaXJxXzE2bGlzdFtdID0geyAxMSwgMTAsIDUsIDMsIDQsIDcsIDksIDB9OwotCQlpbnQgaXJxXzhsaXN0W10gPSB7IDcsIDUsIDMsIDQsIDksIDB9OwotCQlpbnQgKmlycXAgPSB3b3JkbW9kZSA/IGlycV8xNmxpc3QgOiBpcnFfOGxpc3Q7CisJCXN0YXRpYyBjb25zdCBpbnQgaXJxXzE2bGlzdFtdID0geyAxMSwgMTAsIDUsIDMsIDQsIDcsIDksIDB9OworCQlzdGF0aWMgY29uc3QgaW50IGlycV84bGlzdFtdID0geyA3LCA1LCAzLCA0LCA5LCAwfTsKKwkJY29uc3QgaW50ICppcnFwID0gd29yZG1vZGUgPyBpcnFfMTZsaXN0IDogaXJxXzhsaXN0OwogCQlkbyB7CiAJCQlpbnQgaXJxID0gKmlycXA7CiAJCQlpZiAocmVxdWVzdF9pcnEgKGlycSwgTlVMTCwgMCwgImJvZ3VzIiwgTlVMTCkgIT0gLUVCVVNZKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9jb3JlLmMgYi9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9jb3JlLmMKaW5kZXggMDZiYjliNy4uNmQ5Mjc1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvY29yZS5jCisrKyBiL2RyaXZlcnMvbmV0L2libV9uZXdlbWFjL2NvcmUuYwpAQCAtMTI3OSw3ICsxMjc5LDcgQEAKIAluZXRpZl9jYXJyaWVyX29mZihkZXYtPm5kZXYpOwogCXNtcF9ybWIoKTsKIAlpZiAoZGV2LT5saW5rX3BvbGxpbmcpIHsKLQkJY2FuY2VsX3JlYXJtaW5nX2RlbGF5ZWRfd29yaygmZGV2LT5saW5rX3dvcmspOworCQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmRldi0+bGlua193b3JrKTsKIAkJaWYgKGRldi0+bGlua19wb2xsaW5nKQogCQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZkZXYtPmxpbmtfd29yaywgIFBIWV9QT0xMX0xJTktfT0ZGKTsKIAl9CkBAIC0xMjk0LDcgKzEyOTQsNyBAQAogCiAJaWYgKGRldi0+cGh5LmFkZHJlc3MgPj0gMCkgewogCQlkZXYtPmxpbmtfcG9sbGluZyA9IDA7Ci0JCWNhbmNlbF9yZWFybWluZ19kZWxheWVkX3dvcmsoJmRldi0+bGlua193b3JrKTsKKwkJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZkZXYtPmxpbmtfd29yayk7CiAJfQogCW11dGV4X2xvY2soJmRldi0+bGlua19sb2NrKTsKIAllbWFjX25ldGlmX3N0b3AoZGV2KTsKQEAgLTI5NTAsNyArMjk1MCw3IEBACiAKIAl1bnJlZ2lzdGVyX25ldGRldihkZXYtPm5kZXYpOwogCi0JZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwljYW5jZWxfd29ya19zeW5jKCZkZXYtPnJlc2V0X3dvcmspOwogCiAJaWYgKGVtYWNfaGFzX2ZlYXR1cmUoZGV2LCBFTUFDX0ZUUl9IQVNfVEFIKSkKIAkJdGFoX2RldGFjaChkZXYtPnRhaF9kZXYsIGRldi0+dGFoX3BvcnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtdmV0aC5jIGIvZHJpdmVycy9uZXQvaWJtdmV0aC5jCmluZGV4IGM0NTRiNDUuLjU1MjJkNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2libXZldGguYworKysgYi9kcml2ZXJzL25ldC9pYm12ZXRoLmMKQEAgLTcyOSwxMSArNzI5LDYgQEAKIAkJc2l6ZW9mKGluZm8tPnZlcnNpb24pIC0gMSk7CiB9CiAKLXN0YXRpYyB1MzIgbmV0ZGV2X2dldF9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIDE7Ci19Ci0KIHN0YXRpYyB2b2lkIGlibXZldGhfc2V0X3J4X2NzdW1fZmxhZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCiB7CiAJc3RydWN0IGlibXZldGhfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KGRldik7CkBAIC05MTgsNyArOTEzLDcgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbmV0ZGV2X2V0aHRvb2xfb3BzID0gewogCS5nZXRfZHJ2aW5mbwkJPSBuZXRkZXZfZ2V0X2RydmluZm8sCiAJLmdldF9zZXR0aW5ncwkJPSBuZXRkZXZfZ2V0X3NldHRpbmdzLAotCS5nZXRfbGluawkJPSBuZXRkZXZfZ2V0X2xpbmssCisJLmdldF9saW5rCQk9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCiAJLnNldF90eF9jc3VtCQk9IGlibXZldGhfc2V0X3R4X2NzdW0sCiAJLmdldF9yeF9jc3VtCQk9IGlibXZldGhfZ2V0X3J4X2NzdW0sCiAJLnNldF9yeF9jc3VtCQk9IGlibXZldGhfc2V0X3J4X2NzdW0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZmIuYyBiL2RyaXZlcnMvbmV0L2lmYi5jCmluZGV4IGZlMzM3YmQuLmUwN2Q0ODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lmYi5jCisrKyBiL2RyaXZlcnMvbmV0L2lmYi5jCkBAIC0zNiwyMiArMzYsMTAgQEAKICNpbmNsdWRlIDxuZXQvcGt0X3NjaGVkLmg+CiAjaW5jbHVkZSA8bmV0L25ldF9uYW1lc3BhY2UuaD4KIAotI2RlZmluZSBUWF9USU1FT1VUICAoMipIWikKLQogI2RlZmluZSBUWF9RX0xJTUlUICAgIDMyCiBzdHJ1Y3QgaWZiX3ByaXZhdGUgewogCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCAgIGlmYl90YXNrbGV0OwogCWludCAgICAgdGFza2xldF9wZW5kaW5nOwotCS8qIG1vc3RseSBkZWJ1ZyBzdGF0cyBsZWF2ZSBpbiBmb3Igbm93ICovCi0JdW5zaWduZWQgbG9uZyAgIHN0X3Rhc2tfZW50ZXI7IC8qIHRhc2tsZXQgZW50ZXJlZCAqLwotCXVuc2lnbmVkIGxvbmcgICBzdF90eHFfcmVmbF90cnk7IC8qIHRyYW5zbWl0IHF1ZXVlIHJlZmlsbCBhdHRlbXB0ICovCi0JdW5zaWduZWQgbG9uZyAgIHN0X3J4cV9lbnRlcjsgLyogcmVjZWl2ZSBxdWV1ZSBlbnRlcmVkICovCi0JdW5zaWduZWQgbG9uZyAgIHN0X3J4MnR4X3RyYW47IC8qIHJlY2VpdmUgdG8gdHJhc21pdCB0cmFuc2ZlcnMgKi8KLQl1bnNpZ25lZCBsb25nICAgc3RfcnhxX25vdGVudGVyOyAvKnJlY2VpdmVRIG5vdCBlbnRlcmVkLCByZXNjaGVkICovCi0JdW5zaWduZWQgbG9uZyAgIHN0X3J4X2ZybV9lZ3I7IC8qIHJlY2VpdmVkIGZyb20gZWdyZXNzIHBhdGggKi8KLQl1bnNpZ25lZCBsb25nICAgc3RfcnhfZnJtX2luZzsgLyogcmVjZWl2ZWQgZnJvbSBpbmdyZXNzIHBhdGggKi8KLQl1bnNpZ25lZCBsb25nICAgc3RfcnhxX2NoZWNrOwotCXVuc2lnbmVkIGxvbmcgICBzdF9yeHFfcnNjaDsKIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkICAgICBycTsKIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkICAgICB0cTsKIH07CkBAIC03MywyNCArNjEsMTcgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCiAJdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShfZGV2LCAwKTsKLQlkcC0+c3RfdGFza19lbnRlcisrOwogCWlmICgoc2tiID0gc2tiX3BlZWsoJmRwLT50cSkpID09IE5VTEwpIHsKLQkJZHAtPnN0X3R4cV9yZWZsX3RyeSsrOwogCQlpZiAoX19uZXRpZl90eF90cnlsb2NrKHR4cSkpIHsKLQkJCWRwLT5zdF9yeHFfZW50ZXIrKzsKLQkJCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJmRwLT5ycSkpICE9IE5VTEwpIHsKLQkJCQlza2JfcXVldWVfdGFpbCgmZHAtPnRxLCBza2IpOwotCQkJCWRwLT5zdF9yeDJ0eF90cmFuKys7Ci0JCQl9CisJCQlza2JfcXVldWVfc3BsaWNlX3RhaWxfaW5pdCgmZHAtPnJxLCAmZHAtPnRxKTsKIAkJCV9fbmV0aWZfdHhfdW5sb2NrKHR4cSk7CiAJCX0gZWxzZSB7CiAJCQkvKiByZXNjaGVkdWxlICovCi0JCQlkcC0+c3RfcnhxX25vdGVudGVyKys7CiAJCQlnb3RvIHJlc2NoZWQ7CiAJCX0KIAl9CiAKLQl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZkcC0+dHEpKSAhPSBOVUxMKSB7CisJd2hpbGUgKChza2IgPSBfX3NrYl9kZXF1ZXVlKCZkcC0+dHEpKSAhPSBOVUxMKSB7CiAJCXUzMiBmcm9tID0gR19UQ19GUk9NKHNrYi0+dGNfdmVyZCk7CiAKIAkJc2tiLT50Y192ZXJkID0gMDsKQEAgLTExMiwyNCArOTMsMjAgQEAKIAkJc2tiLT5za2JfaWlmID0gX2Rldi0+aWZpbmRleDsKIAogCQlpZiAoZnJvbSAmIEFUX0VHUkVTUykgewotCQkJZHAtPnN0X3J4X2ZybV9lZ3IrKzsKIAkJCWRldl9xdWV1ZV94bWl0KHNrYik7CiAJCX0gZWxzZSBpZiAoZnJvbSAmIEFUX0lOR1JFU1MpIHsKLQkJCWRwLT5zdF9yeF9mcm1faW5nKys7CiAJCQlza2JfcHVsbChza2IsIHNrYi0+ZGV2LT5oYXJkX2hlYWRlcl9sZW4pOwotCQkJbmV0aWZfcngoc2tiKTsKKwkJCW5ldGlmX3JlY2VpdmVfc2tiKHNrYik7CiAJCX0gZWxzZQogCQkJQlVHKCk7CiAJfQogCiAJaWYgKF9fbmV0aWZfdHhfdHJ5bG9jayh0eHEpKSB7Ci0JCWRwLT5zdF9yeHFfY2hlY2srKzsKIAkJaWYgKChza2IgPSBza2JfcGVlaygmZHAtPnJxKSkgPT0gTlVMTCkgewogCQkJZHAtPnRhc2tsZXRfcGVuZGluZyA9IDA7CiAJCQlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChfZGV2KSkKIAkJCQluZXRpZl93YWtlX3F1ZXVlKF9kZXYpOwogCQl9IGVsc2UgewotCQkJZHAtPnN0X3J4cV9yc2NoKys7CiAJCQlfX25ldGlmX3R4X3VubG9jayh0eHEpOwogCQkJZ290byByZXNjaGVkOwogCQl9CkBAIC0xNDksNiArMTI2LDEwIEBACiAJLm5kb192YWxpZGF0ZV9hZGRyID0gZXRoX3ZhbGlkYXRlX2FkZHIsCiB9OwogCisjZGVmaW5lIElGQl9GRUFUVVJFUyAoTkVUSUZfRl9OT19DU1VNIHwgTkVUSUZfRl9TRyAgfCBORVRJRl9GX0ZSQUdMSVNUCXwgXAorCQkgICAgICBORVRJRl9GX1RTT19FQ04gfCBORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPNgl8IFwKKwkJICAgICAgTkVUSUZfRl9ISUdIRE1BIHwgTkVUSUZfRl9IV19WTEFOX1RYKQorCiBzdGF0aWMgdm9pZCBpZmJfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAkvKiBJbml0aWFsaXplIHRoZSBkZXZpY2Ugc3RydWN0dXJlLiAqLwpAQCAtMTU5LDYgKzE0MCw5IEBACiAJZXRoZXJfc2V0dXAoZGV2KTsKIAlkZXYtPnR4X3F1ZXVlX2xlbiA9IFRYX1FfTElNSVQ7CiAKKwlkZXYtPmZlYXR1cmVzIHw9IElGQl9GRUFUVVJFUzsKKwlkZXYtPnZsYW5fZmVhdHVyZXMgfD0gSUZCX0ZFQVRVUkVTOworCiAJZGV2LT5mbGFncyB8PSBJRkZfTk9BUlA7CiAJZGV2LT5mbGFncyAmPSB+SUZGX01VTFRJQ0FTVDsKIAlkZXYtPnByaXZfZmxhZ3MgJj0gfklGRl9YTUlUX0RTVF9SRUxFQVNFOwpAQCAtMTg0LDcgKzE2OCw3IEBACiAJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAl9CiAKLQlza2JfcXVldWVfdGFpbCgmZHAtPnJxLCBza2IpOworCV9fc2tiX3F1ZXVlX3RhaWwoJmRwLT5ycSwgc2tiKTsKIAlpZiAoIWRwLT50YXNrbGV0X3BlbmRpbmcpIHsKIAkJZHAtPnRhc2tsZXRfcGVuZGluZyA9IDE7CiAJCXRhc2tsZXRfc2NoZWR1bGUoJmRwLT5pZmJfdGFza2xldCk7CkBAIC0xOTksOCArMTgzLDggQEAKIAogCXRhc2tsZXRfa2lsbCgmZHAtPmlmYl90YXNrbGV0KTsKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0Jc2tiX3F1ZXVlX3B1cmdlKCZkcC0+cnEpOwotCXNrYl9xdWV1ZV9wdXJnZSgmZHAtPnRxKTsKKwlfX3NrYl9xdWV1ZV9wdXJnZSgmZHAtPnJxKTsKKwlfX3NrYl9xdWV1ZV9wdXJnZSgmZHAtPnRxKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjA5LDggKzE5Myw4IEBACiAJc3RydWN0IGlmYl9wcml2YXRlICpkcCA9IG5ldGRldl9wcml2KGRldik7CiAKIAl0YXNrbGV0X2luaXQoJmRwLT5pZmJfdGFza2xldCwgcmlfdGFza2xldCwgKHVuc2lnbmVkIGxvbmcpZGV2KTsKLQlza2JfcXVldWVfaGVhZF9pbml0KCZkcC0+cnEpOwotCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmRwLT50cSk7CisJX19za2JfcXVldWVfaGVhZF9pbml0KCZkcC0+cnEpOworCV9fc2tiX3F1ZXVlX2hlYWRfaW5pdCgmZHAtPnRxKTsKIAluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfODI1NzUuYyBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF84MjU3NS5jCmluZGV4IGJjMTgzZjUuLjBhMjM2OGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF84MjU3NS5jCisrKyBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF84MjU3NS5jCkBAIC0xMzQsNiArMTM0LDggQEAKIAljYXNlIEUxMDAwX0RFVl9JRF84MjU4MF9DT1BQRVJfRFVBTDoKIAljYXNlIEUxMDAwX0RFVl9JRF9ESDg5WFhDQ19TR01JSToKIAljYXNlIEUxMDAwX0RFVl9JRF9ESDg5WFhDQ19TRVJERVM6CisJY2FzZSBFMTAwMF9ERVZfSURfREg4OVhYQ0NfQkFDS1BMQU5FOgorCWNhc2UgRTEwMDBfREVWX0lEX0RIODlYWENDX1NGUDoKIAkJbWFjLT50eXBlID0gZTEwMDBfODI1ODA7CiAJCWJyZWFrOwogCWNhc2UgRTEwMDBfREVWX0lEX0kzNTBfQ09QUEVSOgpAQCAtMTQ3OCw2ICsxNDgwLDM5IEBACiB9CiAKIC8qKgorICogIGlnYl92bWRxX3NldF9hbnRpX3Nwb29maW5nX3BmIC0gZW5hYmxlIG9yIGRpc2FibGUgYW50aS1zcG9vZmluZworICogIEBodzogcG9pbnRlciB0byB0aGUgaGFyZHdhcmUgc3RydWN0CisgKiAgQGVuYWJsZTogc3RhdGUgdG8gZW50ZXIsIGVpdGhlciBlbmFibGVkIG9yIGRpc2FibGVkCisgKiAgQHBmOiBQaHlzaWNhbCBGdW5jdGlvbiBwb29sIC0gZG8gbm90IHNldCBhbnRpLXNwb29maW5nIGZvciB0aGUgUEYKKyAqCisgKiAgZW5hYmxlcy9kaXNhYmxlcyBMMiBzd2l0Y2ggYW50aS1zcG9vZmluZyBmdW5jdGlvbmFsaXR5LgorICoqLwordm9pZCBpZ2Jfdm1kcV9zZXRfYW50aV9zcG9vZmluZ19wZihzdHJ1Y3QgZTEwMDBfaHcgKmh3LCBib29sIGVuYWJsZSwgaW50IHBmKQoreworCXUzMiBkdHhzd2M7CisKKwlzd2l0Y2ggKGh3LT5tYWMudHlwZSkgeworCWNhc2UgZTEwMDBfODI1NzY6CisJY2FzZSBlMTAwMF9pMzUwOgorCQlkdHhzd2MgPSByZDMyKEUxMDAwX0RUWFNXQyk7CisJCWlmIChlbmFibGUpIHsKKwkJCWR0eHN3YyB8PSAoRTEwMDBfRFRYU1dDX01BQ19TUE9PRl9NQVNLIHwKKwkJCQkgICBFMTAwMF9EVFhTV0NfVkxBTl9TUE9PRl9NQVNLKTsKKwkJCS8qIFRoZSBQRiBjYW4gc3Bvb2YgLSBpdCBoYXMgdG8gaW4gb3JkZXIgdG8KKwkJCSAqIHN1cHBvcnQgZW11bGF0aW9uIG1vZGUgTklDcyAqLworCQkJZHR4c3djIF49ICgxIDw8IHBmIHwgMSA8PCAocGYgKyBNQVhfTlVNX1ZGUykpOworCQl9IGVsc2UgeworCQkJZHR4c3djICY9IH4oRTEwMDBfRFRYU1dDX01BQ19TUE9PRl9NQVNLIHwKKwkJCQkgICAgRTEwMDBfRFRYU1dDX1ZMQU5fU1BPT0ZfTUFTSyk7CisJCX0KKwkJd3IzMihFMTAwMF9EVFhTV0MsIGR0eHN3Yyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworLyoqCiAgKiAgaWdiX3ZtZHFfc2V0X2xvb3BiYWNrX3BmIC0gZW5hYmxlIG9yIGRpc2FibGUgdm1kcSBsb29wYmFjawogICogIEBodzogcG9pbnRlciB0byB0aGUgaGFyZHdhcmUgc3RydWN0CiAgKiAgQGVuYWJsZTogc3RhdGUgdG8gZW50ZXIsIGVpdGhlciBlbmFibGVkIG9yIGRpc2FibGVkCkBAIC0xNTc4LDcgKzE2MTMsNyBAQAogewogCXMzMiByZXRfdmFsID0gMDsKIAl1MzIgbWRpY25mZzsKLQl1MTYgbnZtX2RhdGE7CisJdTE2IG52bV9kYXRhID0gMDsKIAogCWlmIChody0+bWFjLnR5cGUgIT0gZTEwMDBfODI1ODApCiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwXzgyNTc1LmggYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfODI1NzUuaAppbmRleCBjYmQxZTEyLi4xZDAxYWYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfODI1NzUuaAorKysgYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfODI1NzUuaApAQCAtMTk0LDYgKzE5NCwxMCBAQAogI2RlZmluZSBFMTAwMF9OVk1fQVBNRV84MjU3NSAgICAgICAgICAweDA0MDAKICNkZWZpbmUgTUFYX05VTV9WRlMgICAgICAgICAgICAgICAgICAgOAogCisjZGVmaW5lIEUxMDAwX0RUWFNXQ19NQUNfU1BPT0ZfTUFTSyAgIDB4MDAwMDAwRkYgLyogUGVyIFZGIE1BQyBzcG9vZiBjb250cm9sICovCisjZGVmaW5lIEUxMDAwX0RUWFNXQ19WTEFOX1NQT09GX01BU0sgIDB4MDAwMEZGMDAgLyogUGVyIFZGIFZMQU4gc3Bvb2YgY29udHJvbCAqLworI2RlZmluZSBFMTAwMF9EVFhTV0NfTExFX01BU0sgICAgICAgICAweDAwRkYwMDAwIC8qIFBlciBWRiBMb2NhbCBMQiBlbmFibGVzICovCisjZGVmaW5lIEUxMDAwX0RUWFNXQ19WTEFOX1NQT09GX1NISUZUIDgKICNkZWZpbmUgRTEwMDBfRFRYU1dDX1ZNRFFfTE9PUEJBQ0tfRU4gKDEgPDwgMzEpICAvKiBnbG9iYWwgVkYgTEIgZW5hYmxlICovCiAKIC8qIEVhc3kgZGVmaW5lcyBmb3Igc2V0dGluZyBkZWZhdWx0IHBvb2wsIHdvdWxkIG5vcm1hbGx5IGJlIGxlZnQgYSB6ZXJvICovCkBAIC0yNDMsNiArMjQ3LDcgQEAKIAogLyogUlggcGFja2V0IGJ1ZmZlciBzaXplIGRlZmluZXMgKi8KICNkZWZpbmUgRTEwMDBfUlhQQlNfU0laRV9NQVNLXzgyNTc2ICAweDAwMDAwMDdGCit2b2lkIGlnYl92bWRxX3NldF9hbnRpX3Nwb29maW5nX3BmKHN0cnVjdCBlMTAwMF9odyAqLCBib29sLCBpbnQpOwogdm9pZCBpZ2Jfdm1kcV9zZXRfbG9vcGJhY2tfcGYoc3RydWN0IGUxMDAwX2h3ICosIGJvb2wpOwogdm9pZCBpZ2Jfdm1kcV9zZXRfcmVwbGljYXRpb25fcGYoc3RydWN0IGUxMDAwX2h3ICosIGJvb2wpOwogdTE2IGlnYl9yeHBic19hZGp1c3RfODI1ODAodTMyIGRhdGEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwX2RlZmluZXMuaCBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9kZWZpbmVzLmgKaW5kZXggNjIyMjI3OS4uNjMxOWVkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwX2RlZmluZXMuaAorKysgYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfZGVmaW5lcy5oCkBAIC00MTksNiArNDE5LDkgQEAKICNkZWZpbmUgRTEwMDBfRVJSX1NXRldfU1lOQyAxMwogI2RlZmluZSBFMTAwMF9OT1RfSU1QTEVNRU5URUQgMTQKICNkZWZpbmUgRTEwMDBfRVJSX01CWCAgICAgIDE1CisjZGVmaW5lIEUxMDAwX0VSUl9JTlZBTElEX0FSR1VNRU5UICAxNgorI2RlZmluZSBFMTAwMF9FUlJfTk9fU1BBQ0UgICAgICAgICAgMTcKKyNkZWZpbmUgRTEwMDBfRVJSX05WTV9QQkFfU0VDVElPTiAgIDE4CiAKIC8qIExvb3AgbGltaXQgb24gaG93IGxvbmcgd2Ugd2FpdCBmb3IgYXV0by1uZWdvdGlhdGlvbiB0byBjb21wbGV0ZSAqLwogI2RlZmluZSBDT1BQRVJfTElOS19VUF9MSU1JVCAgICAgICAgICAgICAgMTAKQEAgLTU4MCwxMSArNTgzLDE1IEBACiAKIC8qIE1hc2sgYml0cyBmb3IgZmllbGRzIGluIFdvcmQgMHgxYSBvZiB0aGUgTlZNICovCiAKKy8qIGxlbmd0aCBvZiBzdHJpbmcgbmVlZGVkIHRvIHN0b3JlIHBhcnQgbnVtICovCisjZGVmaW5lIEUxMDAwX1BCQU5VTV9MRU5HVEggICAgICAgICAxMQorCiAvKiBGb3IgY2hlY2tzdW1taW5nLCB0aGUgc3VtIG9mIGFsbCB3b3JkcyBpbiB0aGUgTlZNIHNob3VsZCBlcXVhbCAweEJBQkEuICovCiAjZGVmaW5lIE5WTV9TVU0gICAgICAgICAgICAgICAgICAgIDB4QkFCQQogCiAjZGVmaW5lIE5WTV9QQkFfT0ZGU0VUXzAgICAgICAgICAgIDgKICNkZWZpbmUgTlZNX1BCQV9PRkZTRVRfMSAgICAgICAgICAgOQorI2RlZmluZSBOVk1fUEJBX1BUUl9HVUFSRCAgICAgICAgICAweEZBRkEKICNkZWZpbmUgTlZNX1dPUkRfU0laRV9CQVNFX1NISUZUICAgNgogCiAvKiBOVk0gQ29tbWFuZHMgLSBNaWNyb3dpcmUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9ody5oIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX2h3LmgKaW5kZXggYzBiMDE3Zi4uZTI2MzhhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwX2h3LmgKKysrIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX2h3LmgKQEAgLTU0LDggKzU0LDEwIEBACiAjZGVmaW5lIEUxMDAwX0RFVl9JRF84MjU4MF9TRVJERVMgICAgICAgICAgICAgMHgxNTEwCiAjZGVmaW5lIEUxMDAwX0RFVl9JRF84MjU4MF9TR01JSSAgICAgICAgICAgICAgMHgxNTExCiAjZGVmaW5lIEUxMDAwX0RFVl9JRF84MjU4MF9DT1BQRVJfRFVBTCAgICAgICAgMHgxNTE2Ci0jZGVmaW5lIEUxMDAwX0RFVl9JRF9ESDg5WFhDQ19TR01JSSAgICAgICAgICAgMHgwNDM2Ci0jZGVmaW5lIEUxMDAwX0RFVl9JRF9ESDg5WFhDQ19TRVJERVMgICAgICAgICAgMHgwNDM4CisjZGVmaW5lIEUxMDAwX0RFVl9JRF9ESDg5WFhDQ19TR01JSSAgICAgICAgICAgMHgwNDM4CisjZGVmaW5lIEUxMDAwX0RFVl9JRF9ESDg5WFhDQ19TRVJERVMgICAgICAgICAgMHgwNDNBCisjZGVmaW5lIEUxMDAwX0RFVl9JRF9ESDg5WFhDQ19CQUNLUExBTkUgICAgICAgMHgwNDNDCisjZGVmaW5lIEUxMDAwX0RFVl9JRF9ESDg5WFhDQ19TRlAgICAgICAgICAgICAgMHgwNDQwCiAjZGVmaW5lIEUxMDAwX0RFVl9JRF9JMzUwX0NPUFBFUiAgICAgICAgICAgICAgMHgxNTIxCiAjZGVmaW5lIEUxMDAwX0RFVl9JRF9JMzUwX0ZJQkVSICAgICAgICAgICAgICAgMHgxNTIyCiAjZGVmaW5lIEUxMDAwX0RFVl9JRF9JMzUwX1NFUkRFUyAgICAgICAgICAgICAgMHgxNTIzCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfbnZtLmMgYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfbnZtLmMKaW5kZXggZDgzYjc3ZmEuLjZiNWNjMmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9udm0uYworKysgYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfbnZtLmMKQEAgLTQ0NSwzMSArNDQ1LDExMiBAQAogfQogCiAvKioKLSAqICBpZ2JfcmVhZF9wYXJ0X251bSAtIFJlYWQgZGV2aWNlIHBhcnQgbnVtYmVyCisgKiAgaWdiX3JlYWRfcGFydF9zdHJpbmcgLSBSZWFkIGRldmljZSBwYXJ0IG51bWJlcgogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKiAgQHBhcnRfbnVtOiBwb2ludGVyIHRvIGRldmljZSBwYXJ0IG51bWJlcgorICogIEBwYXJ0X251bV9zaXplOiBzaXplIG9mIHBhcnQgbnVtYmVyIGJ1ZmZlcgogICoKICAqICBSZWFkcyB0aGUgcHJvZHVjdCBib2FyZCBhc3NlbWJseSAoUEJBKSBudW1iZXIgZnJvbSB0aGUgRUVQUk9NIGFuZCBzdG9yZXMKICAqICB0aGUgdmFsdWUgaW4gcGFydF9udW0uCiAgKiovCi1zMzIgaWdiX3JlYWRfcGFydF9udW0oc3RydWN0IGUxMDAwX2h3ICpodywgdTMyICpwYXJ0X251bSkKK3MzMiBpZ2JfcmVhZF9wYXJ0X3N0cmluZyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1OCAqcGFydF9udW0sIHUzMiBwYXJ0X251bV9zaXplKQogewotCXMzMiAgcmV0X3ZhbDsKKwlzMzIgcmV0X3ZhbDsKIAl1MTYgbnZtX2RhdGE7CisJdTE2IHBvaW50ZXI7CisJdTE2IG9mZnNldDsKKwl1MTYgbGVuZ3RoOworCisJaWYgKHBhcnRfbnVtID09IE5VTEwpIHsKKwkJaHdfZGJnKCJQQkEgc3RyaW5nIGJ1ZmZlciB3YXMgbnVsbFxuIik7CisJCXJldF92YWwgPSBFMTAwMF9FUlJfSU5WQUxJRF9BUkdVTUVOVDsKKwkJZ290byBvdXQ7CisJfQogCiAJcmV0X3ZhbCA9IGh3LT5udm0ub3BzLnJlYWQoaHcsIE5WTV9QQkFfT0ZGU0VUXzAsIDEsICZudm1fZGF0YSk7CiAJaWYgKHJldF92YWwpIHsKIAkJaHdfZGJnKCJOVk0gUmVhZCBFcnJvclxuIik7CiAJCWdvdG8gb3V0OwogCX0KLQkqcGFydF9udW0gPSAodTMyKShudm1fZGF0YSA8PCAxNik7CiAKLQlyZXRfdmFsID0gaHctPm52bS5vcHMucmVhZChodywgTlZNX1BCQV9PRkZTRVRfMSwgMSwgJm52bV9kYXRhKTsKKwlyZXRfdmFsID0gaHctPm52bS5vcHMucmVhZChodywgTlZNX1BCQV9PRkZTRVRfMSwgMSwgJnBvaW50ZXIpOwogCWlmIChyZXRfdmFsKSB7CiAJCWh3X2RiZygiTlZNIFJlYWQgRXJyb3JcbiIpOwogCQlnb3RvIG91dDsKIAl9Ci0JKnBhcnRfbnVtIHw9IG52bV9kYXRhOworCisJLyoKKwkgKiBpZiBudm1fZGF0YSBpcyBub3QgcHRyIGd1YXJkIHRoZSBQQkEgbXVzdCBiZSBpbiBsZWdhY3kgZm9ybWF0IHdoaWNoCisJICogbWVhbnMgcG9pbnRlciBpcyBhY3R1YWxseSBvdXIgc2Vjb25kIGRhdGEgd29yZCBmb3IgdGhlIFBCQSBudW1iZXIKKwkgKiBhbmQgd2UgY2FuIGRlY29kZSBpdCBpbnRvIGFuIGFzY2lpIHN0cmluZworCSAqLworCWlmIChudm1fZGF0YSAhPSBOVk1fUEJBX1BUUl9HVUFSRCkgeworCQlod19kYmcoIk5WTSBQQkEgbnVtYmVyIGlzIG5vdCBzdG9yZWQgYXMgc3RyaW5nXG4iKTsKKworCQkvKiB3ZSB3aWxsIG5lZWQgMTEgY2hhcmFjdGVycyB0byBzdG9yZSB0aGUgUEJBICovCisJCWlmIChwYXJ0X251bV9zaXplIDwgMTEpIHsKKwkJCWh3X2RiZygiUEJBIHN0cmluZyBidWZmZXIgdG9vIHNtYWxsXG4iKTsKKwkJCXJldHVybiBFMTAwMF9FUlJfTk9fU1BBQ0U7CisJCX0KKworCQkvKiBleHRyYWN0IGhleCBzdHJpbmcgZnJvbSBkYXRhIGFuZCBwb2ludGVyICovCisJCXBhcnRfbnVtWzBdID0gKG52bV9kYXRhID4+IDEyKSAmIDB4RjsKKwkJcGFydF9udW1bMV0gPSAobnZtX2RhdGEgPj4gOCkgJiAweEY7CisJCXBhcnRfbnVtWzJdID0gKG52bV9kYXRhID4+IDQpICYgMHhGOworCQlwYXJ0X251bVszXSA9IG52bV9kYXRhICYgMHhGOworCQlwYXJ0X251bVs0XSA9IChwb2ludGVyID4+IDEyKSAmIDB4RjsKKwkJcGFydF9udW1bNV0gPSAocG9pbnRlciA+PiA4KSAmIDB4RjsKKwkJcGFydF9udW1bNl0gPSAnLSc7CisJCXBhcnRfbnVtWzddID0gMDsKKwkJcGFydF9udW1bOF0gPSAocG9pbnRlciA+PiA0KSAmIDB4RjsKKwkJcGFydF9udW1bOV0gPSBwb2ludGVyICYgMHhGOworCisJCS8qIHB1dCBhIG51bGwgY2hhcmFjdGVyIG9uIHRoZSBlbmQgb2Ygb3VyIHN0cmluZyAqLworCQlwYXJ0X251bVsxMF0gPSAnXDAnOworCisJCS8qIHN3aXRjaCBhbGwgdGhlIGRhdGEgYnV0IHRoZSAnLScgdG8gaGV4IGNoYXIgKi8KKwkJZm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgPCAxMDsgb2Zmc2V0KyspIHsKKwkJCWlmIChwYXJ0X251bVtvZmZzZXRdIDwgMHhBKQorCQkJCXBhcnRfbnVtW29mZnNldF0gKz0gJzAnOworCQkJZWxzZSBpZiAocGFydF9udW1bb2Zmc2V0XSA8IDB4MTApCisJCQkJcGFydF9udW1bb2Zmc2V0XSArPSAnQScgLSAweEE7CisJCX0KKworCQlnb3RvIG91dDsKKwl9CisKKwlyZXRfdmFsID0gaHctPm52bS5vcHMucmVhZChodywgcG9pbnRlciwgMSwgJmxlbmd0aCk7CisJaWYgKHJldF92YWwpIHsKKwkJaHdfZGJnKCJOVk0gUmVhZCBFcnJvclxuIik7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChsZW5ndGggPT0gMHhGRkZGIHx8IGxlbmd0aCA9PSAwKSB7CisJCWh3X2RiZygiTlZNIFBCQSBudW1iZXIgc2VjdGlvbiBpbnZhbGlkIGxlbmd0aFxuIik7CisJCXJldF92YWwgPSBFMTAwMF9FUlJfTlZNX1BCQV9TRUNUSU9OOworCQlnb3RvIG91dDsKKwl9CisJLyogY2hlY2sgaWYgcGFydF9udW0gYnVmZmVyIGlzIGJpZyBlbm91Z2ggKi8KKwlpZiAocGFydF9udW1fc2l6ZSA8ICgoKHUzMilsZW5ndGggKiAyKSAtIDEpKSB7CisJCWh3X2RiZygiUEJBIHN0cmluZyBidWZmZXIgdG9vIHNtYWxsXG4iKTsKKwkJcmV0X3ZhbCA9IEUxMDAwX0VSUl9OT19TUEFDRTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogdHJpbSBwYmEgbGVuZ3RoIGZyb20gc3RhcnQgb2Ygc3RyaW5nICovCisJcG9pbnRlcisrOworCWxlbmd0aC0tOworCisJZm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgPCBsZW5ndGg7IG9mZnNldCsrKSB7CisJCXJldF92YWwgPSBody0+bnZtLm9wcy5yZWFkKGh3LCBwb2ludGVyICsgb2Zmc2V0LCAxLCAmbnZtX2RhdGEpOworCQlpZiAocmV0X3ZhbCkgeworCQkJaHdfZGJnKCJOVk0gUmVhZCBFcnJvclxuIik7CisJCQlnb3RvIG91dDsKKwkJfQorCQlwYXJ0X251bVtvZmZzZXQgKiAyXSA9ICh1OCkobnZtX2RhdGEgPj4gOCk7CisJCXBhcnRfbnVtWyhvZmZzZXQgKiAyKSArIDFdID0gKHU4KShudm1fZGF0YSAmIDB4RkYpOworCX0KKwlwYXJ0X251bVtvZmZzZXQgKiAyXSA9ICdcMCc7CiAKIG91dDoKIAlyZXR1cm4gcmV0X3ZhbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9udm0uaCBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9udm0uaAppbmRleCAxMDQxYzM0Li4yOWM5NTZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfbnZtLmgKKysrIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX252bS5oCkBAIC0zMiw2ICszMiw4IEBACiB2b2lkIGlnYl9yZWxlYXNlX252bShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIHMzMiAgaWdiX3JlYWRfbWFjX2FkZHIoc3RydWN0IGUxMDAwX2h3ICpodyk7CiBzMzIgIGlnYl9yZWFkX3BhcnRfbnVtKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiAqcGFydF9udW0pOworczMyICBpZ2JfcmVhZF9wYXJ0X3N0cmluZyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1OCAqcGFydF9udW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiBwYXJ0X251bV9zaXplKTsKIHMzMiAgaWdiX3JlYWRfbnZtX2VlcmQoc3RydWN0IGUxMDAwX2h3ICpodywgdTE2IG9mZnNldCwgdTE2IHdvcmRzLCB1MTYgKmRhdGEpOwogczMyICBpZ2Jfd3JpdGVfbnZtX3NwaShzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MTYgb2Zmc2V0LCB1MTYgd29yZHMsIHUxNiAqZGF0YSk7CiBzMzIgIGlnYl92YWxpZGF0ZV9udm1fY2hlY2tzdW0oc3RydWN0IGUxMDAwX2h3ICpodyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfcGh5LmMgYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfcGh5LmMKaW5kZXggZGRkMDM2YS4uNjY5NGJmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwX3BoeS5jCisrKyBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9waHkuYwpAQCAtMTc1NywxMSArMTc1NywxMiBAQAogCXUxNiBwaHlfZGF0YSwgaSwgYWdjX3ZhbHVlID0gMDsKIAl1MTYgY3VyX2FnY19pbmRleCwgbWF4X2FnY19pbmRleCA9IDA7CiAJdTE2IG1pbl9hZ2NfaW5kZXggPSBJR1AwMkUxMDAwX0NBQkxFX0xFTkdUSF9UQUJMRV9TSVpFIC0gMTsKLQl1MTYgYWdjX3JlZ19hcnJheVtJR1AwMkUxMDAwX1BIWV9DSEFOTkVMX05VTV0gPQotCQkJCQkJCSB7SUdQMDJFMTAwMF9QSFlfQUdDX0EsCi0JCQkJCQkJICBJR1AwMkUxMDAwX1BIWV9BR0NfQiwKLQkJCQkJCQkgIElHUDAyRTEwMDBfUEhZX0FHQ19DLAotCQkJCQkJCSAgSUdQMDJFMTAwMF9QSFlfQUdDX0R9OworCXN0YXRpYyBjb25zdCB1MTYgYWdjX3JlZ19hcnJheVtJR1AwMkUxMDAwX1BIWV9DSEFOTkVMX05VTV0gPSB7CisJICAgICAgIElHUDAyRTEwMDBfUEhZX0FHQ19BLAorCSAgICAgICBJR1AwMkUxMDAwX1BIWV9BR0NfQiwKKwkgICAgICAgSUdQMDJFMTAwMF9QSFlfQUdDX0MsCisJICAgICAgIElHUDAyRTEwMDBfUEhZX0FHQ19ECisJfTsKIAogCS8qIFJlYWQgdGhlIEFHQyByZWdpc3RlcnMgZm9yIGFsbCBjaGFubmVscyAqLwogCWZvciAoaSA9IDA7IGkgPCBJR1AwMkUxMDAwX1BIWV9DSEFOTkVMX05VTTsgaSsrKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfcmVncy5oIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX3JlZ3MuaAppbmRleCBhYmI3MzMzLi44YWM4M2M1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfcmVncy5oCisrKyBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9yZWdzLmgKQEAgLTMwMSw2ICszMDEsNyBAQAogI2RlZmluZSBFMTAwMF9WRlRFICAgICAgMHgwMEM5MCAvKiBWRiBUcmFuc21pdCBFbmFibGVzICovCiAjZGVmaW5lIEUxMDAwX1FERSAgICAgICAweDAyNDA4IC8qIFF1ZXVlIERyb3AgRW5hYmxlIC0gUlcgKi8KICNkZWZpbmUgRTEwMDBfRFRYU1dDICAgIDB4MDM1MDAgLyogRE1BIFR4IFN3aXRjaCBDb250cm9sIC0gUlcgKi8KKyNkZWZpbmUgRTEwMDBfV1ZCUiAgICAgIDB4MDM1NTQgLyogVk0gV3JvbmcgQmVoYXZpb3IgLSBSV1MgKi8KICNkZWZpbmUgRTEwMDBfUlBMT0xSICAgIDB4MDVBRjAgLyogUmVwbGljYXRpb24gT2ZmbG9hZCAtIFJXICovCiAjZGVmaW5lIEUxMDAwX1VUQSAgICAgICAweDBBMDAwIC8qIFVuaWNhc3QgVGFibGUgQXJyYXkgLSBSVyAqLwogI2RlZmluZSBFMTAwMF9JT1ZUQ0wgICAgMHgwNUJCQyAvKiBJT1YgQ29udHJvbCBSZWdpc3RlciAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2lnYi5oIGIvZHJpdmVycy9uZXQvaWdiL2lnYi5oCmluZGV4IGVkYWI5YzQuLjkyYTRlZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYi9pZ2IuaAorKysgYi9kcml2ZXJzL25ldC9pZ2IvaWdiLmgKQEAgLTMyNCw2ICszMjQsNyBAQAogCXVuc2lnbmVkIGludCB2ZnNfYWxsb2NhdGVkX2NvdW50OwogCXN0cnVjdCB2Zl9kYXRhX3N0b3JhZ2UgKnZmX2RhdGE7CiAJdTMyIHJzc19xdWV1ZXM7CisJdTMyIHd2YnI7CiB9OwogCiAjZGVmaW5lIElHQl9GTEFHX0hBU19NU0kgICAgICAgICAgICgxIDw8IDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2IvaWdiX21haW4uYyBiL2RyaXZlcnMvbmV0L2lnYi9pZ2JfbWFpbi5jCmluZGV4IDg5MmQxOTYuLjU4YzY2NWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYi9pZ2JfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2lnYi9pZ2JfbWFpbi5jCkBAIC03Myw2ICs3Myw4IEBACiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgRTEwMDBfREVWX0lEXzgyNTgwX0NPUFBFUl9EVUFMKSwgYm9hcmRfODI1NzUgfSwKIAl7IFBDSV9WREVWSUNFKElOVEVMLCBFMTAwMF9ERVZfSURfREg4OVhYQ0NfU0dNSUkpLCBib2FyZF84MjU3NSB9LAogCXsgUENJX1ZERVZJQ0UoSU5URUwsIEUxMDAwX0RFVl9JRF9ESDg5WFhDQ19TRVJERVMpLCBib2FyZF84MjU3NSB9LAorCXsgUENJX1ZERVZJQ0UoSU5URUwsIEUxMDAwX0RFVl9JRF9ESDg5WFhDQ19CQUNLUExBTkUpLCBib2FyZF84MjU3NSB9LAorCXsgUENJX1ZERVZJQ0UoSU5URUwsIEUxMDAwX0RFVl9JRF9ESDg5WFhDQ19TRlApLCBib2FyZF84MjU3NSB9LAogCXsgUENJX1ZERVZJQ0UoSU5URUwsIEUxMDAwX0RFVl9JRF84MjU3NiksIGJvYXJkXzgyNTc1IH0sCiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgRTEwMDBfREVWX0lEXzgyNTc2X05TKSwgYm9hcmRfODI1NzUgfSwKIAl7IFBDSV9WREVWSUNFKElOVEVMLCBFMTAwMF9ERVZfSURfODI1NzZfTlNfU0VSREVTKSwgYm9hcmRfODI1NzUgfSwKQEAgLTE2NTQsNyArMTY1Niw3IEBACiAJaWYgKGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQpIHsKIAkJaW50IGk7CiAJCWZvciAoaSA9IDAgOyBpIDwgYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudDsgaSsrKQotCQkJYWRhcHRlci0+dmZfZGF0YVtpXS5mbGFncyA9IDA7CisJCQlhZGFwdGVyLT52Zl9kYXRhW2ldLmZsYWdzICY9IElHQl9WRl9GTEFHX1BGX1NFVF9NQUM7CiAKIAkJLyogcGluZyBhbGwgdGhlIGFjdGl2ZSB2ZnMgdG8gbGV0IHRoZW0ga25vdyB3ZSBhcmUgZ29pbmcgZG93biAqLwogCQlpZ2JfcGluZ19hbGxfdmZzKGFkYXB0ZXIpOwpAQCAtMTcyOSwxMiArMTczMSwxMyBAQAogCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlcjsKIAlzdHJ1Y3QgZTEwMDBfaHcgKmh3OwogCXUxNiBlZXByb21fZGF0YSA9IDA7CisJczMyIHJldF92YWw7CiAJc3RhdGljIGludCBnbG9iYWxfcXVhZF9wb3J0X2E7IC8qIGdsb2JhbCBxdWFkIHBvcnQgYSBpbmRpY2F0aW9uICovCiAJY29uc3Qgc3RydWN0IGUxMDAwX2luZm8gKmVpID0gaWdiX2luZm9fdGJsW2VudC0+ZHJpdmVyX2RhdGFdOwogCXVuc2lnbmVkIGxvbmcgbW1pb19zdGFydCwgbW1pb19sZW47CiAJaW50IGVyciwgcGNpX3VzaW5nX2RhYzsKIAl1MTYgZWVwcm9tX2FwbWVfbWFzayA9IElHQl9FRVBST01fQVBNRTsKLQl1MzIgcGFydF9udW07CisJdTggcGFydF9zdHJbRTEwMDBfUEJBTlVNX0xFTkdUSF07CiAKIAkvKiBDYXRjaCBicm9rZW4gaGFyZHdhcmUgdGhhdCBwdXQgdGhlIHdyb25nIFZGIGRldmljZSBJRCBpbgogCSAqIHRoZSBQQ0llIFNSLUlPViBjYXBhYmlsaXR5LgpAQCAtMjAwMCwxMCArMjAwMywxMCBAQAogCQkgICAidW5rbm93biIpLAogCQkgbmV0ZGV2LT5kZXZfYWRkcik7CiAKLQlpZ2JfcmVhZF9wYXJ0X251bShodywgJnBhcnRfbnVtKTsKLQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiJXM6IFBCQSBObzogJTA2eC0lMDN4XG4iLCBuZXRkZXYtPm5hbWUsCi0JCShwYXJ0X251bSA+PiA4KSwgKHBhcnRfbnVtICYgMHhmZikpOwotCisJcmV0X3ZhbCA9IGlnYl9yZWFkX3BhcnRfc3RyaW5nKGh3LCBwYXJ0X3N0ciwgRTEwMDBfUEJBTlVNX0xFTkdUSCk7CisJaWYgKHJldF92YWwpCisJCXN0cmNweShwYXJ0X3N0ciwgIlVua25vd24iKTsKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiJXM6IFBCQSBObzogJXNcbiIsIG5ldGRldi0+bmFtZSwgcGFydF9zdHIpOwogCWRldl9pbmZvKCZwZGV2LT5kZXYsCiAJCSJVc2luZyAlcyBpbnRlcnJ1cHRzLiAlZCByeCBxdWV1ZShzKSwgJWQgdHggcXVldWUocylcbiIsCiAJCWFkYXB0ZXItPm1zaXhfZW50cmllcyA/ICJNU0ktWCIgOgpAQCAtMjA0OSwxMyArMjA1MiwxNiBAQAogCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAotCS8qIGZsdXNoX3NjaGVkdWxlZCB3b3JrIG1heSByZXNjaGVkdWxlIG91ciB3YXRjaGRvZyB0YXNrLCBzbwotCSAqIGV4cGxpY2l0bHkgZGlzYWJsZSB3YXRjaGRvZyB0YXNrcyBmcm9tIGJlaW5nIHJlc2NoZWR1bGVkICAqLworCS8qCisJICogVGhlIHdhdGNoZG9nIHRpbWVyIG1heSBiZSByZXNjaGVkdWxlZCwgc28gZXhwbGljaXRseQorCSAqIGRpc2FibGUgd2F0Y2hkb2cgZnJvbSBiZWluZyByZXNjaGVkdWxlZC4KKwkgKi8KIAlzZXRfYml0KF9fSUdCX0RPV04sICZhZGFwdGVyLT5zdGF0ZSk7CiAJZGVsX3RpbWVyX3N5bmMoJmFkYXB0ZXItPndhdGNoZG9nX3RpbWVyKTsKIAlkZWxfdGltZXJfc3luYygmYWRhcHRlci0+cGh5X2luZm9fdGltZXIpOwogCi0JZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwljYW5jZWxfd29ya19zeW5jKCZhZGFwdGVyLT5yZXNldF90YXNrKTsKKwljYW5jZWxfd29ya19zeW5jKCZhZGFwdGVyLT53YXRjaGRvZ190YXNrKTsKIAogI2lmZGVmIENPTkZJR19JR0JfRENBCiAJaWYgKGFkYXB0ZXItPmZsYWdzICYgSUdCX0ZMQUdfRENBX0VOQUJMRUQpIHsKQEAgLTI0MzYsMTAgKzI0NDIsOSBAQAogCWludCBzaXplOwogCiAJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaWdiX2J1ZmZlcikgKiB0eF9yaW5nLT5jb3VudDsKLQl0eF9yaW5nLT5idWZmZXJfaW5mbyA9IHZtYWxsb2Moc2l6ZSk7CisJdHhfcmluZy0+YnVmZmVyX2luZm8gPSB2emFsbG9jKHNpemUpOwogCWlmICghdHhfcmluZy0+YnVmZmVyX2luZm8pCiAJCWdvdG8gZXJyOwotCW1lbXNldCh0eF9yaW5nLT5idWZmZXJfaW5mbywgMCwgc2l6ZSk7CiAKIAkvKiByb3VuZCB1cCB0byBuZWFyZXN0IDRLICovCiAJdHhfcmluZy0+c2l6ZSA9IHR4X3JpbmctPmNvdW50ICogc2l6ZW9mKHVuaW9uIGUxMDAwX2Fkdl90eF9kZXNjKTsKQEAgLTI1ODcsMTAgKzI1OTIsOSBAQAogCWludCBzaXplLCBkZXNjX2xlbjsKIAogCXNpemUgPSBzaXplb2Yoc3RydWN0IGlnYl9idWZmZXIpICogcnhfcmluZy0+Y291bnQ7Ci0JcnhfcmluZy0+YnVmZmVyX2luZm8gPSB2bWFsbG9jKHNpemUpOworCXJ4X3JpbmctPmJ1ZmZlcl9pbmZvID0gdnphbGxvYyhzaXplKTsKIAlpZiAoIXJ4X3JpbmctPmJ1ZmZlcl9pbmZvKQogCQlnb3RvIGVycjsKLQltZW1zZXQocnhfcmluZy0+YnVmZmVyX2luZm8sIDAsIHNpemUpOwogCiAJZGVzY19sZW4gPSBzaXplb2YodW5pb24gZTEwMDBfYWR2X3J4X2Rlc2MpOwogCkBAIC0zMzYyLDYgKzMzNjYsNDUgQEAKIAlpZ2JfcmVzdG9yZV92Zl9tdWx0aWNhc3RzKGFkYXB0ZXIpOwogfQogCitzdGF0aWMgdm9pZCBpZ2JfY2hlY2tfd3ZicihzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwl1MzIgd3ZiciA9IDA7CisKKwlzd2l0Y2ggKGh3LT5tYWMudHlwZSkgeworCWNhc2UgZTEwMDBfODI1NzY6CisJY2FzZSBlMTAwMF9pMzUwOgorCQlpZiAoISh3dmJyID0gcmQzMihFMTAwMF9XVkJSKSkpCisJCQlyZXR1cm47CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWFkYXB0ZXItPnd2YnIgfD0gd3ZicjsKK30KKworI2RlZmluZSBJR0JfU1RBR0dFUkVEX1FVRVVFX09GRlNFVCA4CisKK3N0YXRpYyB2b2lkIGlnYl9zcG9vZl9jaGVjayhzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGo7CisKKwlpZiAoIWFkYXB0ZXItPnd2YnIpCisJCXJldHVybjsKKworCWZvcihqID0gMDsgaiA8IGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQ7IGorKykgeworCQlpZiAoYWRhcHRlci0+d3ZiciAmICgxIDw8IGopIHx8CisJCSAgICBhZGFwdGVyLT53dmJyICYgKDEgPDwgKGogKyBJR0JfU1RBR0dFUkVEX1FVRVVFX09GRlNFVCkpKSB7CisJCQlkZXZfd2FybigmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJCSJTcG9vZiBldmVudChzKSBkZXRlY3RlZCBvbiBWRiAlZFxuIiwgaik7CisJCQlhZGFwdGVyLT53dmJyICY9CisJCQkJfigoMSA8PCBqKSB8CisJCQkJICAoMSA8PCAoaiArIElHQl9TVEFHR0VSRURfUVVFVUVfT0ZGU0VUKSkpOworCQl9CisJfQorfQorCiAvKiBOZWVkIHRvIHdhaXQgYSBmZXcgc2Vjb25kcyBhZnRlciBsaW5rIHVwIHRvIGdldCBkaWFnbm9zdGljIGluZm9ybWF0aW9uIGZyb20KICAqIHRoZSBwaHkgKi8KIHN0YXRpYyB2b2lkIGlnYl91cGRhdGVfcGh5X2luZm8odW5zaWduZWQgbG9uZyBkYXRhKQpAQCAtMzUyMSw2ICszNTY0LDggQEAKIAkJd3IzMihFMTAwMF9JQ1MsIEUxMDAwX0lDU19SWERNVDApOwogCX0KIAorCWlnYl9zcG9vZl9jaGVjayhhZGFwdGVyKTsKKwogCS8qIFJlc2V0IHRoZSB0aW1lciAqLwogCWlmICghdGVzdF9iaXQoX19JR0JfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSkKIAkJbW9kX3RpbWVyKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lciwKQEAgLTQ1MTcsNiArNDU2MiwxMCBAQAogCWlmIChpY3IgJiBFMTAwMF9JQ1JfRE9VVFNZTkMpIHsKIAkJLyogSFcgaXMgcmVwb3J0aW5nIERNQSBpcyBvdXQgb2Ygc3luYyAqLwogCQlhZGFwdGVyLT5zdGF0cy5kb29zeW5jKys7CisJCS8qIFRoZSBETUEgT3V0IG9mIFN5bmMgaXMgYWxzbyBpbmRpY2F0aW9uIG9mIGEgc3Bvb2YgZXZlbnQKKwkJICogaW4gSU9WIG1vZGUuIENoZWNrIHRoZSBXcm9uZyBWTSBCZWhhdmlvciByZWdpc3RlciB0bworCQkgKiBzZWUgaWYgaXQgaXMgcmVhbGx5IGEgc3Bvb2YgZXZlbnQuICovCisJCWlnYl9jaGVja193dmJyKGFkYXB0ZXIpOwogCX0KIAogCS8qIENoZWNrIGZvciBhIG1haWxib3ggZXZlbnQgKi8KQEAgLTQ5NjksOCArNTAxOCw4IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpZ2JfdmZfcmVzZXQoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyLCB1MzIgdmYpCiB7Ci0JLyogY2xlYXIgZmxhZ3MgKi8KLQlhZGFwdGVyLT52Zl9kYXRhW3ZmXS5mbGFncyAmPSB+KElHQl9WRl9GTEFHX1BGX1NFVF9NQUMpOworCS8qIGNsZWFyIGZsYWdzIC0gZXhjZXB0IGZsYWcgdGhhdCBpbmRpY2F0ZXMgUEYgaGFzIHNldCB0aGUgTUFDICovCisJYWRhcHRlci0+dmZfZGF0YVt2Zl0uZmxhZ3MgJj0gSUdCX1ZGX0ZMQUdfUEZfU0VUX01BQzsKIAlhZGFwdGVyLT52Zl9kYXRhW3ZmXS5sYXN0X25hY2sgPSBqaWZmaWVzOwogCiAJLyogcmVzZXQgb2ZmbG9hZHMgdG8gZGVmYXVsdHMgKi8KQEAgLTUwMjQsNyArNTA3Myw3IEBACiAJcmVnID0gcmQzMihFMTAwMF9WRlJFKTsKIAl3cjMyKEUxMDAwX1ZGUkUsIHJlZyB8ICgxIDw8IHZmKSk7CiAKLQlhZGFwdGVyLT52Zl9kYXRhW3ZmXS5mbGFncyA9IElHQl9WRl9GTEFHX0NUUzsKKwlhZGFwdGVyLT52Zl9kYXRhW3ZmXS5mbGFncyB8PSBJR0JfVkZfRkxBR19DVFM7CiAKIAkvKiByZXBseSB0byByZXNldCB3aXRoIGFjayBhbmQgdmYgbWFjIGFkZHJlc3MgKi8KIAltc2didWZbMF0gPSBFMTAwMF9WRl9SRVNFVCB8IEUxMDAwX1ZUX01TR1RZUEVfQUNLOwpAQCAtNTEwMyw3ICs1MTUyLDE0IEBACiAKIAlzd2l0Y2ggKChtc2didWZbMF0gJiAweEZGRkYpKSB7CiAJY2FzZSBFMTAwMF9WRl9TRVRfTUFDX0FERFI6Ci0JCXJldHZhbCA9IGlnYl9zZXRfdmZfbWFjX2FkZHIoYWRhcHRlciwgbXNnYnVmLCB2Zik7CisJCXJldHZhbCA9IC1FSU5WQUw7CisJCWlmICghKHZmX2RhdGEtPmZsYWdzICYgSUdCX1ZGX0ZMQUdfUEZfU0VUX01BQykpCisJCQlyZXR2YWwgPSBpZ2Jfc2V0X3ZmX21hY19hZGRyKGFkYXB0ZXIsIG1zZ2J1ZiwgdmYpOworCQllbHNlCisJCQlkZXZfd2FybigmcGRldi0+ZGV2LAorCQkJCSAiVkYgJWQgYXR0ZW1wdGVkIHRvIG92ZXJyaWRlIGFkbWluaXN0cmF0aXZlbHkgIgorCQkJCSAic2V0IE1BQyBhZGRyZXNzXG5SZWxvYWQgdGhlIFZGIGRyaXZlciB0byAiCisJCQkJICJyZXN1bWUgb3BlcmF0aW9uc1xuIiwgdmYpOwogCQlicmVhazsKIAljYXNlIEUxMDAwX1ZGX1NFVF9QUk9NSVNDOgogCQlyZXR2YWwgPSBpZ2Jfc2V0X3ZmX3Byb21pc2MoYWRhcHRlciwgbXNnYnVmLCB2Zik7CkBAIC01MTE1LDggKzUxNzEsMTIgQEAKIAkJcmV0dmFsID0gaWdiX3NldF92Zl9ybHBtbChhZGFwdGVyLCBtc2didWZbMV0sIHZmKTsKIAkJYnJlYWs7CiAJY2FzZSBFMTAwMF9WRl9TRVRfVkxBTjoKLQkJaWYgKGFkYXB0ZXItPnZmX2RhdGFbdmZdLnBmX3ZsYW4pCi0JCQlyZXR2YWwgPSAtMTsKKwkJcmV0dmFsID0gLTE7CisJCWlmICh2Zl9kYXRhLT5wZl92bGFuKQorCQkJZGV2X3dhcm4oJnBkZXYtPmRldiwKKwkJCQkgIlZGICVkIGF0dGVtcHRlZCB0byBvdmVycmlkZSBhZG1pbmlzdHJhdGl2ZWx5ICIKKwkJCQkgInNldCBWTEFOIHRhZ1xuUmVsb2FkIHRoZSBWRiBkcml2ZXIgdG8gIgorCQkJCSAicmVzdW1lIG9wZXJhdGlvbnNcbiIsIHZmKTsKIAkJZWxzZQogCQkJcmV0dmFsID0gaWdiX3NldF92Zl92bGFuKGFkYXB0ZXIsIG1zZ2J1ZiwgdmYpOwogCQlicmVhazsKQEAgLTY1ODAsNiArNjY0MCw4IEBACiAJaWYgKGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQpIHsKIAkJaWdiX3ZtZHFfc2V0X2xvb3BiYWNrX3BmKGh3LCB0cnVlKTsKIAkJaWdiX3ZtZHFfc2V0X3JlcGxpY2F0aW9uX3BmKGh3LCB0cnVlKTsKKwkJaWdiX3ZtZHFfc2V0X2FudGlfc3Bvb2ZpbmdfcGYoaHcsIHRydWUsCisJCQkJCQlhZGFwdGVyLT52ZnNfYWxsb2NhdGVkX2NvdW50KTsKIAl9IGVsc2UgewogCQlpZ2Jfdm1kcV9zZXRfbG9vcGJhY2tfcGYoaHcsIGZhbHNlKTsKIAkJaWdiX3ZtZHFfc2V0X3JlcGxpY2F0aW9uX3BmKGh3LCBmYWxzZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2J2Zi9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2lnYnZmL01ha2VmaWxlCmluZGV4IGMyZjE1MGQuLjBmYTNkYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYnZmL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L2lnYnZmL01ha2VmaWxlCkBAIC0xLDcgKzEsNyBAQAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMKICMgSW50ZWwoUikgODI1NzYgVmlydHVhbCBGdW5jdGlvbiBMaW51eCBkcml2ZXIKLSMgQ29weXJpZ2h0KGMpIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCisjIENvcHlyaWdodChjKSAyMDA5IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4KICMKICMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICMgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYnZmL2RlZmluZXMuaCBiL2RyaXZlcnMvbmV0L2lnYnZmL2RlZmluZXMuaAppbmRleCA4OGE0NzUzLi43OWYyNjA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2J2Zi9kZWZpbmVzLmgKKysrIGIvZHJpdmVycy9uZXQvaWdidmYvZGVmaW5lcy5oCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICBJbnRlbChSKSA4MjU3NiBWaXJ0dWFsIEZ1bmN0aW9uIExpbnV4IGRyaXZlcgotICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCisgIENvcHlyaWdodChjKSAxOTk5IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdidmYvZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvaWdidmYvZXRodG9vbC5jCmluZGV4IDMzYWRkNzAuLmVkNmUzZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYnZmL2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9pZ2J2Zi9ldGh0b29sLmMKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAgIEludGVsKFIpIDgyNTc2IFZpcnR1YWwgRnVuY3Rpb24gTGludXggZHJpdmVyCi0gIENvcHlyaWdodChjKSAyMDA5IEludGVsIENvcnBvcmF0aW9uLgorICBDb3B5cmlnaHQoYykgMjAwOSAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uCiAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKQEAgLTExMCwxMSArMTEwLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHUzMiBpZ2J2Zl9nZXRfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQotewotCXJldHVybiBuZXRpZl9jYXJyaWVyX29rKG5ldGRldik7Ci19Ci0KIHN0YXRpYyBpbnQgaWdidmZfc2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZXRodG9vbF9jbWQgKmVjbWQpCiB7CkBAIC01MTUsNyArNTEwLDcgQEAKIAkuZ2V0X21zZ2xldmVsCQk9IGlnYnZmX2dldF9tc2dsZXZlbCwKIAkuc2V0X21zZ2xldmVsCQk9IGlnYnZmX3NldF9tc2dsZXZlbCwKIAkubndheV9yZXNldAkJPSBpZ2J2Zl9ud2F5X3Jlc2V0LAotCS5nZXRfbGluawkJPSBpZ2J2Zl9nZXRfbGluaywKKwkuZ2V0X2xpbmsJCT0gZXRodG9vbF9vcF9nZXRfbGluaywKIAkuZ2V0X2VlcHJvbV9sZW4JCT0gaWdidmZfZ2V0X2VlcHJvbV9sZW4sCiAJLmdldF9lZXByb20JCT0gaWdidmZfZ2V0X2VlcHJvbSwKIAkuc2V0X2VlcHJvbQkJPSBpZ2J2Zl9zZXRfZWVwcm9tLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdidmYvaWdidmYuaCBiL2RyaXZlcnMvbmV0L2lnYnZmL2lnYnZmLmgKaW5kZXggZGViZWVlMi4uOTkwYzMyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWdidmYvaWdidmYuaAorKysgYi9kcml2ZXJzL25ldC9pZ2J2Zi9pZ2J2Zi5oCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICBJbnRlbChSKSA4MjU3NiBWaXJ0dWFsIEZ1bmN0aW9uIExpbnV4IGRyaXZlcgotICBDb3B5cmlnaHQoYykgMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAgQ29weXJpZ2h0KGMpIDIwMDkgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLgogCiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCkBAIC05Nyw2ICs5Nyw3IEBACiAKIGVudW0gaWdidmZfYm9hcmRzIHsKIAlib2FyZF92ZiwKKwlib2FyZF9pMzUwX3ZmLAogfTsKIAogc3RydWN0IGlnYnZmX3F1ZXVlX3N0YXRzIHsKQEAgLTEyNiw3ICsxMjcsNiBAQAogCQkJdW5zaWduZWQgaW50IHBhZ2Vfb2Zmc2V0OwogCQl9OwogCX07Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7CiB9OwogCiB1bmlvbiBpZ2J2Zl9kZXNjIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYnZmL21ieC5jIGIvZHJpdmVycy9uZXQvaWdidmYvbWJ4LmMKaW5kZXggODE5YThlYy4uM2Q2ZjRjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWdidmYvbWJ4LmMKKysrIGIvZHJpdmVycy9uZXQvaWdidmYvbWJ4LmMKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAgIEludGVsKFIpIDgyNTc2IFZpcnR1YWwgRnVuY3Rpb24gTGludXggZHJpdmVyCi0gIENvcHlyaWdodChjKSAyMDA5IEludGVsIENvcnBvcmF0aW9uLgorICBDb3B5cmlnaHQoYykgMjAwOSAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uCiAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYnZmL21ieC5oIGIvZHJpdmVycy9uZXQvaWdidmYvbWJ4LmgKaW5kZXggNDkzODYwOS4uYzI4ODNjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWdidmYvbWJ4LmgKKysrIGIvZHJpdmVycy9uZXQvaWdidmYvbWJ4LmgKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAgIEludGVsKFIpIDgyNTc2IFZpcnR1YWwgRnVuY3Rpb24gTGludXggZHJpdmVyCi0gIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLgogCiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2J2Zi9uZXRkZXYuYyBiL2RyaXZlcnMvbmV0L2lnYnZmL25ldGRldi5jCmluZGV4IDI4YWYwMTkuLjYzNTJjODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYnZmL25ldGRldi5jCisrKyBiL2RyaXZlcnMvbmV0L2lnYnZmL25ldGRldi5jCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICBJbnRlbChSKSA4MjU3NiBWaXJ0dWFsIEZ1bmN0aW9uIExpbnV4IGRyaXZlcgotICBDb3B5cmlnaHQoYykgMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAgQ29weXJpZ2h0KGMpIDIwMDkgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLgogCiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCkBAIC00NCwxMiArNDQsMTMgQEAKIAogI2luY2x1ZGUgImlnYnZmLmgiCiAKLSNkZWZpbmUgRFJWX1ZFUlNJT04gIjEuMC4wLWswIgorI2RlZmluZSBEUlZfVkVSU0lPTiAiMS4wLjgtazAiCiBjaGFyIGlnYnZmX2RyaXZlcl9uYW1lW10gPSAiaWdidmYiOwogY29uc3QgY2hhciBpZ2J2Zl9kcml2ZXJfdmVyc2lvbltdID0gRFJWX1ZFUlNJT047CiBzdGF0aWMgY29uc3QgY2hhciBpZ2J2Zl9kcml2ZXJfc3RyaW5nW10gPQogCQkJCSJJbnRlbChSKSBWaXJ0dWFsIEZ1bmN0aW9uIE5ldHdvcmsgRHJpdmVyIjsKLXN0YXRpYyBjb25zdCBjaGFyIGlnYnZmX2NvcHlyaWdodFtdID0gIkNvcHlyaWdodCAoYykgMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4iOworc3RhdGljIGNvbnN0IGNoYXIgaWdidmZfY29weXJpZ2h0W10gPQorCQkJCSJDb3B5cmlnaHQgKGMpIDIwMDkgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiI7CiAKIHN0YXRpYyBpbnQgaWdidmZfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpOwogc3RhdGljIHZvaWQgaWdidmZfcmVzZXQoc3RydWN0IGlnYnZmX2FkYXB0ZXIgKik7CkBAIC02Myw4ICs2NCwxNiBAQAogCS5pbml0X29wcyAgICAgICAgICAgICAgID0gZTEwMDBfaW5pdF9mdW5jdGlvbl9wb2ludGVyc192ZiwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgaWdidmZfaW5mbyBpZ2J2Zl9pMzUwX3ZmX2luZm8gPSB7CisJLm1hYwkJCT0gZTEwMDBfdmZhZGFwdF9pMzUwLAorCS5mbGFncwkJCT0gMCwKKwkucGJhCQkJPSAxMCwKKwkuaW5pdF9vcHMJCT0gZTEwMDBfaW5pdF9mdW5jdGlvbl9wb2ludGVyc192ZiwKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWdidmZfaW5mbyAqaWdidmZfaW5mb190YmxbXSA9IHsKIAlbYm9hcmRfdmZdICAgICAgICAgICAgICA9ICZpZ2J2Zl92Zl9pbmZvLAorCVtib2FyZF9pMzUwX3ZmXQkJPSAmaWdidmZfaTM1MF92Zl9pbmZvLAogfTsKIAogLyoqCkBAIC00MjksMTAgKzQzOCw5IEBACiAJaW50IHNpemU7CiAKIAlzaXplID0gc2l6ZW9mKHN0cnVjdCBpZ2J2Zl9idWZmZXIpICogdHhfcmluZy0+Y291bnQ7Ci0JdHhfcmluZy0+YnVmZmVyX2luZm8gPSB2bWFsbG9jKHNpemUpOworCXR4X3JpbmctPmJ1ZmZlcl9pbmZvID0gdnphbGxvYyhzaXplKTsKIAlpZiAoIXR4X3JpbmctPmJ1ZmZlcl9pbmZvKQogCQlnb3RvIGVycjsKLQltZW1zZXQodHhfcmluZy0+YnVmZmVyX2luZm8sIDAsIHNpemUpOwogCiAJLyogcm91bmQgdXAgdG8gbmVhcmVzdCA0SyAqLwogCXR4X3JpbmctPnNpemUgPSB0eF9yaW5nLT5jb3VudCAqIHNpemVvZih1bmlvbiBlMTAwMF9hZHZfdHhfZGVzYyk7CkBAIC00NjksMTAgKzQ3Nyw5IEBACiAJaW50IHNpemUsIGRlc2NfbGVuOwogCiAJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaWdidmZfYnVmZmVyKSAqIHJ4X3JpbmctPmNvdW50OwotCXJ4X3JpbmctPmJ1ZmZlcl9pbmZvID0gdm1hbGxvYyhzaXplKTsKKwlyeF9yaW5nLT5idWZmZXJfaW5mbyA9IHZ6YWxsb2Moc2l6ZSk7CiAJaWYgKCFyeF9yaW5nLT5idWZmZXJfaW5mbykKIAkJZ290byBlcnI7Ci0JbWVtc2V0KHJ4X3JpbmctPmJ1ZmZlcl9pbmZvLCAwLCBzaXplKTsKIAogCWRlc2NfbGVuID0gc2l6ZW9mKHVuaW9uIGUxMDAwX2Fkdl9yeF9kZXNjKTsKIApAQCAtMTg1MSw4ICsxODU4LDYgQEAKIAogCWlmIChsaW5rKSB7CiAJCWlmICghbmV0aWZfY2Fycmllcl9vayhuZXRkZXYpKSB7Ci0JCQlib29sIHR4YjJiID0gMTsKLQogCQkJbWFjLT5vcHMuZ2V0X2xpbmtfdXBfaW5mbygmYWRhcHRlci0+aHcsCiAJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICZhZGFwdGVyLT5saW5rX3NwZWVkLAogCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAmYWRhcHRlci0+bGlua19kdXBsZXgpOwpAQCAtMTg2MiwxMSArMTg2Nyw5IEBACiAJCQlhZGFwdGVyLT50eF90aW1lb3V0X2ZhY3RvciA9IDE7CiAJCQlzd2l0Y2ggKGFkYXB0ZXItPmxpbmtfc3BlZWQpIHsKIAkJCWNhc2UgU1BFRURfMTA6Ci0JCQkJdHhiMmIgPSAwOwogCQkJCWFkYXB0ZXItPnR4X3RpbWVvdXRfZmFjdG9yID0gMTY7CiAJCQkJYnJlYWs7CiAJCQljYXNlIFNQRUVEXzEwMDoKLQkJCQl0eGIyYiA9IDA7CiAJCQkJLyogbWF5YmUgYWRkIHNvbWUgdGltZW91dCBmYWN0b3IgPyAqLwogCQkJCWJyZWFrOwogCQkJfQpAQCAtMjgzMCwxMyArMjgzMywxNCBAQAogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAKIAkvKgotCSAqIGZsdXNoX3NjaGVkdWxlZCB3b3JrIG1heSByZXNjaGVkdWxlIG91ciB3YXRjaGRvZyB0YXNrLCBzbwotCSAqIGV4cGxpY2l0bHkgZGlzYWJsZSB3YXRjaGRvZyB0YXNrcyBmcm9tIGJlaW5nIHJlc2NoZWR1bGVkCisJICogVGhlIHdhdGNoZG9nIHRpbWVyIG1heSBiZSByZXNjaGVkdWxlZCwgc28gZXhwbGljaXRseQorCSAqIGRpc2FibGUgaXQgZnJvbSBiZWluZyByZXNjaGVkdWxlZC4KIAkgKi8KIAlzZXRfYml0KF9fSUdCVkZfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKTsKIAlkZWxfdGltZXJfc3luYygmYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIpOwogCi0JZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwljYW5jZWxfd29ya19zeW5jKCZhZGFwdGVyLT5yZXNldF90YXNrKTsKKwljYW5jZWxfd29ya19zeW5jKCZhZGFwdGVyLT53YXRjaGRvZ190YXNrKTsKIAogCXVucmVnaXN0ZXJfbmV0ZGV2KG5ldGRldik7CiAKQEAgLTI4NjksNiArMjg3Myw3IEBACiAKIHN0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShpZ2J2Zl9wY2lfdGJsKSA9IHsKIAl7IFBDSV9WREVWSUNFKElOVEVMLCBFMTAwMF9ERVZfSURfODI1NzZfVkYpLCBib2FyZF92ZiB9LAorCXsgUENJX1ZERVZJQ0UoSU5URUwsIEUxMDAwX0RFVl9JRF9JMzUwX1ZGKSwgYm9hcmRfaTM1MF92ZiB9LAogCXsgfSAvKiB0ZXJtaW5hdGUgbGlzdCAqLwogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBpZ2J2Zl9wY2lfdGJsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYnZmL3JlZ3MuaCBiL2RyaXZlcnMvbmV0L2lnYnZmL3JlZ3MuaAppbmRleCBiOWUyNGVkLi43N2UxOGQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2J2Zi9yZWdzLmgKKysrIGIvZHJpdmVycy9uZXQvaWdidmYvcmVncy5oCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICBJbnRlbChSKSA4MjU3NiBWaXJ0dWFsIEZ1bmN0aW9uIExpbnV4IGRyaXZlcgotICBDb3B5cmlnaHQoYykgMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAgQ29weXJpZ2h0KGMpIDIwMDkgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLgogCiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2J2Zi92Zi5jIGIvZHJpdmVycy9uZXQvaWdidmYvdmYuYwppbmRleCBhOWE2MWVmLi43NDQ4NmE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2J2Zi92Zi5jCisrKyBiL2RyaXZlcnMvbmV0L2lnYnZmL3ZmLmMKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAgIEludGVsKFIpIDgyNTc2IFZpcnR1YWwgRnVuY3Rpb24gTGludXggZHJpdmVyCi0gIENvcHlyaWdodChjKSAyMDA5IEludGVsIENvcnBvcmF0aW9uLgorICBDb3B5cmlnaHQoYykgMjAwOSAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uCiAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKQEAgLTM2Miw4ICszNjIsOCBAQAogCSAqIG9yIGEgdmlydHVhbCBmdW5jdGlvbiByZXNldAogCSAqLwogCi0JLyogSWYgd2Ugd2VyZSBoaXQgd2l0aCBhIHJlc2V0IGRyb3AgdGhlIGxpbmsgKi8KLQlpZiAoIW1ieC0+b3BzLmNoZWNrX2Zvcl9yc3QoaHcpKQorCS8qIElmIHdlIHdlcmUgaGl0IHdpdGggYSByZXNldCBvciB0aW1lb3V0IGRyb3AgdGhlIGxpbmsgKi8KKwlpZiAoIW1ieC0+b3BzLmNoZWNrX2Zvcl9yc3QoaHcpIHx8ICFtYngtPnRpbWVvdXQpCiAJCW1hYy0+Z2V0X2xpbmtfc3RhdHVzID0gdHJ1ZTsKIAogCWlmICghbWFjLT5nZXRfbGlua19zdGF0dXMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2J2Zi92Zi5oIGIvZHJpdmVycy9uZXQvaWdidmYvdmYuaAppbmRleCAxZThjZTM3NC4uZDdlZDU4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWdidmYvdmYuaAorKysgYi9kcml2ZXJzL25ldC9pZ2J2Zi92Zi5oCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICBJbnRlbChSKSA4MjU3NiBWaXJ0dWFsIEZ1bmN0aW9uIExpbnV4IGRyaXZlcgotICBDb3B5cmlnaHQoYykgMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAgQ29weXJpZ2h0KGMpIDIwMDkgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLgogCiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCkBAIC0zOSw2ICszOSw3IEBACiBzdHJ1Y3QgZTEwMDBfaHc7CiAKICNkZWZpbmUgRTEwMDBfREVWX0lEXzgyNTc2X1ZGICAgICAgICAgICAgICAgICAweDEwQ0EKKyNkZWZpbmUgRTEwMDBfREVWX0lEX0kzNTBfVkYgICAgICAgICAgICAgICAgICAweDE1MjAKICNkZWZpbmUgRTEwMDBfUkVWSVNJT05fMCAwCiAjZGVmaW5lIEUxMDAwX1JFVklTSU9OXzEgMQogI2RlZmluZSBFMTAwMF9SRVZJU0lPTl8yIDIKQEAgLTEzMyw2ICsxMzQsNyBAQAogZW51bSBlMTAwMF9tYWNfdHlwZSB7CiAJZTEwMDBfdW5kZWZpbmVkID0gMCwKIAllMTAwMF92ZmFkYXB0LAorCWUxMDAwX3ZmYWRhcHRfaTM1MCwKIAllMTAwMF9udW1fbWFjcyAgLyogTGlzdCBpcyAxLWJhc2VkLCBzbyBzdWJ0cmFjdCAxIGZvciB0cnVlIGNvdW50LiAqLwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9hY3QyMDBsLXNpci5jIGIvZHJpdmVycy9uZXQvaXJkYS9hY3QyMDBsLXNpci5jCmluZGV4IDM3YWI4YzguLjhmZjA4NGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvYWN0MjAwbC1zaXIuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL2FjdDIwMGwtc2lyLmMKQEAgLTE5OSw3ICsxOTksNyBAQAogewogCXVuc2lnbmVkIHN0YXRlID0gZGV2LT5mc20uc3Vic3RhdGU7CiAJdW5zaWduZWQgZGVsYXkgPSAwOwotCXU4IGNvbnRyb2xbOV0gPSB7CisJc3RhdGljIGNvbnN0IHU4IGNvbnRyb2xbOV0gPSB7CiAJCUFDVDIwMExfUkVHMTUsCiAJCUFDVDIwMExfUkVHMTMgfCBBQ1QyMDBMX1NIRFcsCiAJCUFDVDIwMExfUkVHMjEgfCBBQ1QyMDBMX0VYQ0sgfCBBQ1QyMDBMX09TQ0wsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL2RvbmF1Ym9lLmMgYi9kcml2ZXJzL25ldC9pcmRhL2RvbmF1Ym9lLmMKaW5kZXggYjYyNmNjYy4uZjgxZDk0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9kb25hdWJvZS5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvZG9uYXVib2UuYwpAQCAtODE4LDkgKzgxOCw5IEBACiB7CiAgIGludCBpLCBqLCBuOwogI2lmZGVmIFVTRV9NSVIKLSAgaW50IGJhdWRzW10gPSB7IDk2MDAsIDExNTIwMCwgNDAwMDAwMCwgMTE1MjAwMCB9OworICBzdGF0aWMgY29uc3QgaW50IGJhdWRzW10gPSB7IDk2MDAsIDExNTIwMCwgNDAwMDAwMCwgMTE1MjAwMCB9OwogI2Vsc2UKLSAgaW50IGJhdWRzW10gPSB7IDk2MDAsIDExNTIwMCwgNDAwMDAwMCB9OworICBzdGF0aWMgY29uc3QgaW50IGJhdWRzW10gPSB7IDk2MDAsIDExNTIwMCwgNDAwMDAwMCB9OwogI2VuZGlmCiAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvbWNzNzc4MC5jIGIvZHJpdmVycy9uZXQvaXJkYS9tY3M3NzgwLmMKaW5kZXggNzRiMjBmMS4uY2M4MjFkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9tY3M3NzgwLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9tY3M3NzgwLmMKQEAgLTk1OSw3ICs5NTksNyBAQAogCWlmICghbWNzKQogCQlyZXR1cm47CiAKLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCWNhbmNlbF93b3JrX3N5bmMoJm1jcy0+d29yayk7CiAKIAl1bnJlZ2lzdGVyX25ldGRldihtY3MtPm5ldGRldik7CiAJZnJlZV9uZXRkZXYobWNzLT5uZXRkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9zbXNjLWlyY2MyLmMgYi9kcml2ZXJzL25ldC9pcmRhL3Ntc2MtaXJjYzIuYwppbmRleCA4YzU3YmZiLi4xYzE2NzdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL3Ntc2MtaXJjYzIuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL3Ntc2MtaXJjYzIuYwpAQCAtMzc2LDcgKzM3Niw3IEBACiBzdGF0aWMgaW50IHBucF9kcml2ZXJfcmVnaXN0ZXJlZDsKIAogI2lmZGVmIENPTkZJR19QTlAKLXN0YXRpYyBpbnQgX19pbml0IHNtc2NfaXJjY19wbnBfcHJvYmUoc3RydWN0IHBucF9kZXYgKmRldiwKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNtc2NfaXJjY19wbnBfcHJvYmUoc3RydWN0IHBucF9kZXYgKmRldiwKIAkJCQkgICAgICBjb25zdCBzdHJ1Y3QgcG5wX2RldmljZV9pZCAqZGV2X2lkKQogewogCXVuc2lnbmVkIGludCBmaXJiYXNlLCBzaXJiYXNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXNlcmllc192ZXRoLmMgYi9kcml2ZXJzL25ldC9pc2VyaWVzX3ZldGguYwppbmRleCA4ZGY2NDVlLi45ZWNlMWZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pc2VyaWVzX3ZldGguYworKysgYi9kcml2ZXJzL25ldC9pc2VyaWVzX3ZldGguYwpAQCAtODg1LDE3ICs4ODUsOCBAQAogCXZldGhfa2lja19zdGF0ZW1hY2hpbmUoY254KTsKIAlzcGluX3VubG9ja19pcnEoJmNueC0+bG9jayk7CiAKLQkvKiBUaGVyZSdzIGEgc2xpbSBjaGFuY2UgdGhlIHJlc2V0IGNvZGUgaGFzIGp1c3QgcXVldWVkIHRoZQotCSAqIHN0YXRlbWFjaGluZSB0byBydW4gaW4gZml2ZSBzZWNvbmRzLiBJZiBzbyB3ZSBuZWVkIHRvIGNhbmNlbAotCSAqIHRoYXQgYW5kIHJlcXVldWUgdGhlIHdvcmsgdG8gcnVuIG5vdy4gKi8KLQlpZiAoY2FuY2VsX2RlbGF5ZWRfd29yaygmY254LT5zdGF0ZW1hY2hpbmVfd3EpKSB7Ci0JCXNwaW5fbG9ja19pcnEoJmNueC0+bG9jayk7Ci0JCXZldGhfa2lja19zdGF0ZW1hY2hpbmUoY254KTsKLQkJc3Bpbl91bmxvY2tfaXJxKCZjbngtPmxvY2spOwotCX0KLQotCS8qIFdhaXQgZm9yIHRoZSBzdGF0ZSBtYWNoaW5lIHRvIHJ1bi4gKi8KLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCS8qIGVuc3VyZSB0aGUgc3RhdGVtYWNoaW5lIHJ1bnMgbm93IGFuZCB3YWl0cyBmb3IgaXRzIGNvbXBsZXRpb24gKi8KKwlmbHVzaF9kZWxheWVkX3dvcmtfc3luYygmY254LT5zdGF0ZW1hY2hpbmVfd3EpOwogfQogCiBzdGF0aWMgdm9pZCB2ZXRoX2Rlc3Ryb3lfY29ubmVjdGlvbihzdHJ1Y3QgdmV0aF9scGFyX2Nvbm5lY3Rpb24gKmNueCkKQEAgLTEwMDksMTUgKzEwMDAsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHUzMiB2ZXRoX2dldF9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIDE7Ci19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgb3BzID0gewogCS5nZXRfZHJ2aW5mbyA9IHZldGhfZ2V0X2RydmluZm8sCiAJLmdldF9zZXR0aW5ncyA9IHZldGhfZ2V0X3NldHRpbmdzLAotCS5nZXRfbGluayA9IHZldGhfZ2V0X2xpbmssCisJLmdldF9saW5rID0gZXRodG9vbF9vcF9nZXRfbGluaywKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdmV0aF9uZXRkZXZfb3BzID0gewpAQCAtMTYwNSw3ICsxNTkxLDcgQEAKIAl9CiAJdmV0aF9kZXZbaV0gPSBkZXY7CiAKLQlwb3J0ID0gKHN0cnVjdCB2ZXRoX3BvcnQqKW5ldGRldl9wcml2KGRldik7CisJcG9ydCA9IG5ldGRldl9wcml2KGRldik7CiAKIAkvKiBTdGFydCB0aGUgc3RhdGUgbWFjaGluZSBvbiBlYWNoIGNvbm5lY3Rpb24gb24gdGhpcyB2bGFuLiBJZiB3ZSdyZQogCSAqIHRoZSBmaXJzdCBkZXYgdG8gZG8gc28gdGhpcyB3aWxsIGNvbW1lbmNlIGxpbmsgbmVnb3RpYXRpb24gKi8KQEAgLTE2NTgsMTUgKzE2NDQsMTQgQEAKIAkvKiBEaXNjb25uZWN0IG91ciAiaXJxIiB0byBzdG9wIGV2ZW50cyBjb21pbmcgZnJvbSB0aGUgSHlwZXJ2aXNvci4gKi8KIAlIdkxwRXZlbnRfdW5yZWdpc3RlckhhbmRsZXIoSHZMcEV2ZW50X1R5cGVfVmlydHVhbExhbik7CiAKLQkvKiBNYWtlIHN1cmUgYW55IHdvcmsgcXVldWVkIGZyb20gSHlwZXJ2aXNvciBjYWxsYmFja3MgaXMgZmluaXNoZWQuICovCi0JZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKLQogCWZvciAoaSA9IDA7IGkgPCBIVk1BWEFSQ0hJVEVDVEVETFBTOyArK2kpIHsKIAkJY254ID0gdmV0aF9jbnhbaV07CiAKIAkJaWYgKCFjbngpCiAJCQljb250aW51ZTsKIAorCQkvKiBDYW5jZWwgd29yayBxdWV1ZWQgZnJvbSBIeXBlcnZpc29yIGNhbGxiYWNrcyAqLworCQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmNueC0+c3RhdGVtYWNoaW5lX3dxKTsKIAkJLyogUmVtb3ZlIHRoZSBjb25uZWN0aW9uIGZyb20gc3lzZnMgKi8KIAkJa29iamVjdF9kZWwoJmNueC0+a29iamVjdCk7CiAJCS8qIERyb3AgdGhlIGRyaXZlcidzIHJlZmVyZW5jZSB0byB0aGUgY29ubmVjdGlvbiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYi9peGdiX21haW4uYyBiL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9tYWluLmMKaW5kZXggY2FhODE5Mi4uNTYzOWNjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYi9peGdiX21haW4uYworKysgYi9kcml2ZXJzL25ldC9peGdiL2l4Z2JfbWFpbi5jCkBAIC05OCw2ICs5OCw4IEBACiBzdGF0aWMgdm9pZCBpeGdiX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBpeGdiX3R4X3RpbWVvdXRfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogCitzdGF0aWMgdm9pZCBpeGdiX3ZsYW5fc3RyaXBfZW5hYmxlKHN0cnVjdCBpeGdiX2FkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIHZvaWQgaXhnYl92bGFuX3N0cmlwX2Rpc2FibGUoc3RydWN0IGl4Z2JfYWRhcHRlciAqYWRhcHRlcik7CiBzdGF0aWMgdm9pZCBpeGdiX3ZsYW5fcnhfcmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgdmxhbl9ncm91cCAqZ3JwKTsKIHN0YXRpYyB2b2lkIGl4Z2Jfdmxhbl9yeF9hZGRfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUxNiB2aWQpOwpAQCAtNTI1LDcgKzUyNyw3IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgaXhnYl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAotCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisJY2FuY2VsX3dvcmtfc3luYygmYWRhcHRlci0+dHhfdGltZW91dF90YXNrKTsKIAogCXVucmVnaXN0ZXJfbmV0ZGV2KG5ldGRldik7CiAKQEAgLTY2OSwxMyArNjcxLDEyIEBACiAJaW50IHNpemU7CiAKIAlzaXplID0gc2l6ZW9mKHN0cnVjdCBpeGdiX2J1ZmZlcikgKiB0eGRyLT5jb3VudDsKLQl0eGRyLT5idWZmZXJfaW5mbyA9IHZtYWxsb2Moc2l6ZSk7CisJdHhkci0+YnVmZmVyX2luZm8gPSB2emFsbG9jKHNpemUpOwogCWlmICghdHhkci0+YnVmZmVyX2luZm8pIHsKIAkJbmV0aWZfZXJyKGFkYXB0ZXIsIHByb2JlLCBhZGFwdGVyLT5uZXRkZXYsCiAJCQkgICJVbmFibGUgdG8gYWxsb2NhdGUgdHJhbnNtaXQgZGVzY3JpcHRvciByaW5nIG1lbW9yeVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQltZW1zZXQodHhkci0+YnVmZmVyX2luZm8sIDAsIHNpemUpOwogCiAJLyogcm91bmQgdXAgdG8gbmVhcmVzdCA0SyAqLwogCkBAIC03NTksMTMgKzc2MCwxMiBAQAogCWludCBzaXplOwogCiAJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaXhnYl9idWZmZXIpICogcnhkci0+Y291bnQ7Ci0Jcnhkci0+YnVmZmVyX2luZm8gPSB2bWFsbG9jKHNpemUpOworCXJ4ZHItPmJ1ZmZlcl9pbmZvID0gdnphbGxvYyhzaXplKTsKIAlpZiAoIXJ4ZHItPmJ1ZmZlcl9pbmZvKSB7CiAJCW5ldGlmX2VycihhZGFwdGVyLCBwcm9iZSwgYWRhcHRlci0+bmV0ZGV2LAogCQkJICAiVW5hYmxlIHRvIGFsbG9jYXRlIHJlY2VpdmUgZGVzY3JpcHRvciByaW5nXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCW1lbXNldChyeGRyLT5idWZmZXJfaW5mbywgMCwgc2l6ZSk7CiAKIAkvKiBSb3VuZCB1cCB0byBuZWFyZXN0IDRLICovCiAKQEAgLTEwNzgsNiArMTA3OCw4IEBACiAKIAlpZiAobmV0ZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CiAJCXJjdGwgfD0gKElYR0JfUkNUTF9VUEUgfCBJWEdCX1JDVExfTVBFKTsKKwkJLyogZGlzYWJsZSBWTEFOIGZpbHRlcmluZyAqLworCQlyY3RsICY9IH5JWEdCX1JDVExfQ0ZJRU47CiAJCXJjdGwgJj0gfklYR0JfUkNUTF9WRkU7CiAJfSBlbHNlIHsKIAkJaWYgKG5ldGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHsKQEAgLTEwODYsNyArMTA4OCw5IEBACiAJCX0gZWxzZSB7CiAJCQlyY3RsICY9IH4oSVhHQl9SQ1RMX1VQRSB8IElYR0JfUkNUTF9NUEUpOwogCQl9CisJCS8qIGVuYWJsZSBWTEFOIGZpbHRlcmluZyAqLwogCQlyY3RsIHw9IElYR0JfUkNUTF9WRkU7CisJCXJjdGwgJj0gfklYR0JfUkNUTF9DRklFTjsKIAl9CiAKIAlpZiAobmV0ZGV2X21jX2NvdW50KG5ldGRldikgPiBJWEdCX01BWF9OVU1fTVVMVElDQVNUX0FERFJFU1NFUykgewpAQCAtMTEwNSw2ICsxMTA5LDEyIEBACiAKIAkJaXhnYl9tY19hZGRyX2xpc3RfdXBkYXRlKGh3LCBtdGEsIG5ldGRldl9tY19jb3VudChuZXRkZXYpLCAwKTsKIAl9CisKKwlpZiAobmV0ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfSFdfVkxBTl9SWCkKKwkJaXhnYl92bGFuX3N0cmlwX2VuYWJsZShhZGFwdGVyKTsKKwllbHNlCisJCWl4Z2Jfdmxhbl9zdHJpcF9kaXNhYmxlKGFkYXB0ZXIpOworCiB9CiAKIC8qKgpAQCAtMTI1Miw3ICsxMjYyLDcgQEAKIAogCWlmIChsaWtlbHkoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkpIHsKIAkJc3RydWN0IGl4Z2JfYnVmZmVyICpidWZmZXJfaW5mbzsKLQkJY3NzID0gc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKTsKKwkJY3NzID0gc2tiX2NoZWNrc3VtX3N0YXJ0X29mZnNldChza2IpOwogCQljc28gPSBjc3MgKyBza2ItPmNzdW1fb2Zmc2V0OwogCiAJCWkgPSBhZGFwdGVyLT50eF9yaW5nLm5leHRfdG9fdXNlOwpAQCAtMjE1MiwzMyArMjE2MiwzMCBAQAogaXhnYl92bGFuX3J4X3JlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCB2bGFuX2dyb3VwICpncnApCiB7CiAJc3RydWN0IGl4Z2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0JdTMyIGN0cmwsIHJjdGw7CiAKLQlpeGdiX2lycV9kaXNhYmxlKGFkYXB0ZXIpOwogCWFkYXB0ZXItPnZsZ3JwID0gZ3JwOworfQogCi0JaWYgKGdycCkgewotCQkvKiBlbmFibGUgVkxBTiB0YWcgaW5zZXJ0L3N0cmlwICovCi0JCWN0cmwgPSBJWEdCX1JFQURfUkVHKCZhZGFwdGVyLT5odywgQ1RSTDApOwotCQljdHJsIHw9IElYR0JfQ1RSTDBfVk1FOwotCQlJWEdCX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIENUUkwwLCBjdHJsKTsKK3N0YXRpYyB2b2lkCitpeGdiX3ZsYW5fc3RyaXBfZW5hYmxlKHN0cnVjdCBpeGdiX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJdTMyIGN0cmw7CiAKLQkJLyogZW5hYmxlIFZMQU4gcmVjZWl2ZSBmaWx0ZXJpbmcgKi8KKwkvKiBlbmFibGUgVkxBTiB0YWcgaW5zZXJ0L3N0cmlwICovCisJY3RybCA9IElYR0JfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBDVFJMMCk7CisJY3RybCB8PSBJWEdCX0NUUkwwX1ZNRTsKKwlJWEdCX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIENUUkwwLCBjdHJsKTsKK30KIAotCQlyY3RsID0gSVhHQl9SRUFEX1JFRygmYWRhcHRlci0+aHcsIFJDVEwpOwotCQlyY3RsICY9IH5JWEdCX1JDVExfQ0ZJRU47Ci0JCUlYR0JfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgUkNUTCwgcmN0bCk7Ci0JfSBlbHNlIHsKLQkJLyogZGlzYWJsZSBWTEFOIHRhZyBpbnNlcnQvc3RyaXAgKi8KK3N0YXRpYyB2b2lkCitpeGdiX3ZsYW5fc3RyaXBfZGlzYWJsZShzdHJ1Y3QgaXhnYl9hZGFwdGVyICphZGFwdGVyKQoreworCXUzMiBjdHJsOwogCi0JCWN0cmwgPSBJWEdCX1JFQURfUkVHKCZhZGFwdGVyLT5odywgQ1RSTDApOwotCQljdHJsICY9IH5JWEdCX0NUUkwwX1ZNRTsKLQkJSVhHQl9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBDVFJMMCwgY3RybCk7Ci0JfQotCi0JLyogZG9uJ3QgZW5hYmxlIGludGVycnVwdHMgdW5sZXNzIHdlIGFyZSBVUCAqLwotCWlmIChhZGFwdGVyLT5uZXRkZXYtPmZsYWdzICYgSUZGX1VQKQotCQlpeGdiX2lycV9lbmFibGUoYWRhcHRlcik7CisJLyogZGlzYWJsZSBWTEFOIHRhZyBpbnNlcnQvc3RyaXAgKi8KKwljdHJsID0gSVhHQl9SRUFEX1JFRygmYWRhcHRlci0+aHcsIENUUkwwKTsKKwljdHJsICY9IH5JWEdCX0NUUkwwX1ZNRTsKKwlJWEdCX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIENUUkwwLCBjdHJsKTsKIH0KIAogc3RhdGljIHZvaWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9wYXJhbS5jIGIvZHJpdmVycy9uZXQvaXhnYi9peGdiX3BhcmFtLmMKaW5kZXggODhhMDhmMC4uZGQ3ZmJlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYi9peGdiX3BhcmFtLmMKKysrIGIvZHJpdmVycy9uZXQvaXhnYi9peGdiX3BhcmFtLmMKQEAgLTE5MSw5ICsxOTEsOSBAQAogCQl9IHI7CiAJCXN0cnVjdCB7CS8qIGxpc3Rfb3B0aW9uIGluZm8gKi8KIAkJCWludCBucjsKLQkJCXN0cnVjdCBpeGdiX29wdF9saXN0IHsKKwkJCWNvbnN0IHN0cnVjdCBpeGdiX29wdF9saXN0IHsKIAkJCQlpbnQgaTsKLQkJCQljaGFyICpzdHI7CisJCQkJY29uc3QgY2hhciAqc3RyOwogCQkJfSAqcDsKIAkJfSBsOwogCX0gYXJnOwpAQCAtMjI2LDcgKzIyNiw3IEBACiAJCWJyZWFrOwogCWNhc2UgbGlzdF9vcHRpb246IHsKIAkJaW50IGk7Ci0JCXN0cnVjdCBpeGdiX29wdF9saXN0ICplbnQ7CisJCWNvbnN0IHN0cnVjdCBpeGdiX29wdF9saXN0ICplbnQ7CiAKIAkJZm9yIChpID0gMDsgaSA8IG9wdC0+YXJnLmwubnI7IGkrKykgewogCQkJZW50ID0gJm9wdC0+YXJnLmwucFtpXTsKQEAgLTMyMiwxNCArMzIyLDE1IEBACiAJfQogCXsgLyogRmxvdyBDb250cm9sICovCiAKLQkJc3RydWN0IGl4Z2Jfb3B0X2xpc3QgZmNfbGlzdFtdID0KLQkJCXt7IGl4Z2JfZmNfbm9uZSwJIkZsb3cgQ29udHJvbCBEaXNhYmxlZCIgfSwKLQkJCSB7IGl4Z2JfZmNfcnhfcGF1c2UsIkZsb3cgQ29udHJvbCBSZWNlaXZlIE9ubHkiIH0sCi0JCQkgeyBpeGdiX2ZjX3R4X3BhdXNlLCJGbG93IENvbnRyb2wgVHJhbnNtaXQgT25seSIgfSwKLQkJCSB7IGl4Z2JfZmNfZnVsbCwJIkZsb3cgQ29udHJvbCBFbmFibGVkIiB9LAotCQkJIHsgaXhnYl9mY19kZWZhdWx0LCAiRmxvdyBDb250cm9sIEhhcmR3YXJlIERlZmF1bHQiIH19OworCQlzdGF0aWMgY29uc3Qgc3RydWN0IGl4Z2Jfb3B0X2xpc3QgZmNfbGlzdFtdID0geworCQkgICAgICAgeyBpeGdiX2ZjX25vbmUsICJGbG93IENvbnRyb2wgRGlzYWJsZWQiIH0sCisJCSAgICAgICB7IGl4Z2JfZmNfcnhfcGF1c2UsICJGbG93IENvbnRyb2wgUmVjZWl2ZSBPbmx5IiB9LAorCQkgICAgICAgeyBpeGdiX2ZjX3R4X3BhdXNlLCAiRmxvdyBDb250cm9sIFRyYW5zbWl0IE9ubHkiIH0sCisJCSAgICAgICB7IGl4Z2JfZmNfZnVsbCwgIkZsb3cgQ29udHJvbCBFbmFibGVkIiB9LAorCQkgICAgICAgeyBpeGdiX2ZjX2RlZmF1bHQsICJGbG93IENvbnRyb2wgSGFyZHdhcmUgRGVmYXVsdCIgfQorCQl9OwogCi0JCWNvbnN0IHN0cnVjdCBpeGdiX29wdGlvbiBvcHQgPSB7CisJCXN0YXRpYyBjb25zdCBzdHJ1Y3QgaXhnYl9vcHRpb24gb3B0ID0gewogCQkJLnR5cGUgPSBsaXN0X29wdGlvbiwKIAkJCS5uYW1lID0gIkZsb3cgQ29udHJvbCIsCiAJCQkuZXJyICA9ICJyZWFkaW5nIGRlZmF1bHQgc2V0dGluZ3MgZnJvbSBFRVBST00iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9peGdiZS9NYWtlZmlsZQppbmRleCA4ZjgxZWZiLi43ZDczODdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC9peGdiZS9NYWtlZmlsZQpAQCAtMzQsNyArMzQsNyBAQAogCiBpeGdiZS1vYmpzIDo9IGl4Z2JlX21haW4ubyBpeGdiZV9jb21tb24ubyBpeGdiZV9ldGh0b29sLm8gXAogICAgICAgICAgICAgICBpeGdiZV84MjU5OS5vIGl4Z2JlXzgyNTk4Lm8gaXhnYmVfcGh5Lm8gaXhnYmVfc3Jpb3YubyBcCi0gICAgICAgICAgICAgIGl4Z2JlX21ieC5vCisgICAgICAgICAgICAgIGl4Z2JlX21ieC5vIGl4Z2JlX3g1NDAubwogCiBpeGdiZS0kKENPTkZJR19JWEdCRV9EQ0IpICs9ICBpeGdiZV9kY2IubyBpeGdiZV9kY2JfODI1OTgubyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpeGdiZV9kY2JfODI1OTkubyBpeGdiZV9kY2JfbmwubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmUuaCBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlLmgKaW5kZXggZWQ4NzAzYy4uM2FlMzBiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmUuaAorKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZS5oCkBAIC02MSwxMCArNjEsOCBAQAogI2RlZmluZSBJWEdCRV9NSU5fUlhECQkJICAgICA2NAogCiAvKiBmbG93IGNvbnRyb2wgKi8KLSNkZWZpbmUgSVhHQkVfREVGQVVMVF9GQ1JUTAkJMHgxMDAwMAogI2RlZmluZSBJWEdCRV9NSU5fRkNSVEwJCQkgICAweDQwCiAjZGVmaW5lIElYR0JFX01BWF9GQ1JUTAkJCTB4N0ZGODAKLSNkZWZpbmUgSVhHQkVfREVGQVVMVF9GQ1JUSAkJMHgyMDAwMAogI2RlZmluZSBJWEdCRV9NSU5fRkNSVEgJCQkgIDB4NjAwCiAjZGVmaW5lIElYR0JFX01BWF9GQ1JUSAkJCTB4N0ZGRjAKICNkZWZpbmUgSVhHQkVfREVGQVVMVF9GQ1BBVVNFCQkgMHhGRkZGCkBAIC0xMzAsNyArMTI4LDkgQEAKIAl1bnNpZ25lZCBsb25nIHRpbWVfc3RhbXA7CiAJdTE2IGxlbmd0aDsKIAl1MTYgbmV4dF90b193YXRjaDsKLQl1MTYgbWFwcGVkX2FzX3BhZ2U7CisJdW5zaWduZWQgaW50IGJ5dGVjb3VudDsKKwl1MTYgZ3NvX3NlZ3M7CisJdTggbWFwcGVkX2FzX3BhZ2U7CiB9OwogCiBzdHJ1Y3QgaXhnYmVfcnhfYnVmZmVyIHsKQEAgLTE0NiwxMiArMTQ2LDU2IEBACiAJdTY0IGJ5dGVzOwogfTsKIAorc3RydWN0IGl4Z2JlX3R4X3F1ZXVlX3N0YXRzIHsKKwl1NjQgcmVzdGFydF9xdWV1ZTsKKwl1NjQgdHhfYnVzeTsKKwl1NjQgY29tcGxldGVkOworCXU2NCB0eF9kb25lX29sZDsKK307CisKK3N0cnVjdCBpeGdiZV9yeF9xdWV1ZV9zdGF0cyB7CisJdTY0IHJzY19jb3VudDsKKwl1NjQgcnNjX2ZsdXNoOworCXU2NCBub25fZW9wX2Rlc2NzOworCXU2NCBhbGxvY19yeF9wYWdlX2ZhaWxlZDsKKwl1NjQgYWxsb2NfcnhfYnVmZl9mYWlsZWQ7Cit9OworCitlbnVtIGl4YmdlX3Jpbmdfc3RhdGVfdCB7CisJX19JWEdCRV9UWF9GRElSX0lOSVRfRE9ORSwKKwlfX0lYR0JFX1RYX0RFVEVDVF9IQU5HLAorCV9fSVhHQkVfSEFOR19DSEVDS19BUk1FRCwKKwlfX0lYR0JFX1JYX1BTX0VOQUJMRUQsCisJX19JWEdCRV9SWF9SU0NfRU5BQkxFRCwKK307CisKKyNkZWZpbmUgcmluZ19pc19wc19lbmFibGVkKHJpbmcpIFwKKwl0ZXN0X2JpdChfX0lYR0JFX1JYX1BTX0VOQUJMRUQsICYocmluZyktPnN0YXRlKQorI2RlZmluZSBzZXRfcmluZ19wc19lbmFibGVkKHJpbmcpIFwKKwlzZXRfYml0KF9fSVhHQkVfUlhfUFNfRU5BQkxFRCwgJihyaW5nKS0+c3RhdGUpCisjZGVmaW5lIGNsZWFyX3JpbmdfcHNfZW5hYmxlZChyaW5nKSBcCisJY2xlYXJfYml0KF9fSVhHQkVfUlhfUFNfRU5BQkxFRCwgJihyaW5nKS0+c3RhdGUpCisjZGVmaW5lIGNoZWNrX2Zvcl90eF9oYW5nKHJpbmcpIFwKKwl0ZXN0X2JpdChfX0lYR0JFX1RYX0RFVEVDVF9IQU5HLCAmKHJpbmcpLT5zdGF0ZSkKKyNkZWZpbmUgc2V0X2NoZWNrX2Zvcl90eF9oYW5nKHJpbmcpIFwKKwlzZXRfYml0KF9fSVhHQkVfVFhfREVURUNUX0hBTkcsICYocmluZyktPnN0YXRlKQorI2RlZmluZSBjbGVhcl9jaGVja19mb3JfdHhfaGFuZyhyaW5nKSBcCisJY2xlYXJfYml0KF9fSVhHQkVfVFhfREVURUNUX0hBTkcsICYocmluZyktPnN0YXRlKQorI2RlZmluZSByaW5nX2lzX3JzY19lbmFibGVkKHJpbmcpIFwKKwl0ZXN0X2JpdChfX0lYR0JFX1JYX1JTQ19FTkFCTEVELCAmKHJpbmcpLT5zdGF0ZSkKKyNkZWZpbmUgc2V0X3JpbmdfcnNjX2VuYWJsZWQocmluZykgXAorCXNldF9iaXQoX19JWEdCRV9SWF9SU0NfRU5BQkxFRCwgJihyaW5nKS0+c3RhdGUpCisjZGVmaW5lIGNsZWFyX3JpbmdfcnNjX2VuYWJsZWQocmluZykgXAorCWNsZWFyX2JpdChfX0lYR0JFX1JYX1JTQ19FTkFCTEVELCAmKHJpbmcpLT5zdGF0ZSkKIHN0cnVjdCBpeGdiZV9yaW5nIHsKIAl2b2lkICpkZXNjOwkJCS8qIGRlc2NyaXB0b3IgcmluZyBtZW1vcnkgKi8KKwlzdHJ1Y3QgZGV2aWNlICpkZXY7ICAgICAgICAgICAgIC8qIGRldmljZSBmb3IgRE1BIG1hcHBpbmcgKi8KKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OyAgICAgIC8qIG5ldGRldiByaW5nIGJlbG9uZ3MgdG8gKi8KIAl1bmlvbiB7CiAJCXN0cnVjdCBpeGdiZV90eF9idWZmZXIgKnR4X2J1ZmZlcl9pbmZvOwogCQlzdHJ1Y3QgaXhnYmVfcnhfYnVmZmVyICpyeF9idWZmZXJfaW5mbzsKIAl9OworCXVuc2lnbmVkIGxvbmcgc3RhdGU7CiAJdTggYXRyX3NhbXBsZV9yYXRlOwogCXU4IGF0cl9jb3VudDsKIAl1MTYgY291bnQ7CQkJLyogYW1vdW50IG9mIGRlc2NyaXB0b3JzICovCkBAIC0xNjAsMzggKzIwNCwzMCBAQAogCXUxNiBuZXh0X3RvX2NsZWFuOwogCiAJdTggcXVldWVfaW5kZXg7IC8qIG5lZWRlZCBmb3IgbXVsdGlxdWV1ZSBxdWV1ZSBtYW5hZ2VtZW50ICovCi0KLSNkZWZpbmUgSVhHQkVfUklOR19SWF9QU19FTkFCTEVEICAgICAgICAgICAgICAgICh1OCkoMSkKLQl1OCBmbGFnczsJCQkvKiBwZXIgcmluZyBmZWF0dXJlIGZsYWdzICovCi0JdTE2IGhlYWQ7Ci0JdTE2IHRhaWw7Ci0KLQl1bnNpZ25lZCBpbnQgdG90YWxfYnl0ZXM7Ci0JdW5zaWduZWQgaW50IHRvdGFsX3BhY2tldHM7Ci0KLSNpZmRlZiBDT05GSUdfSVhHQkVfRENBCi0JLyogY3B1IGZvciB0eCBxdWV1ZSAqLwotCWludCBjcHU7Ci0jZW5kaWYKLQotCXUxNiB3b3JrX2xpbWl0OwkJCS8qIG1heCB3b3JrIHBlciBpbnRlcnJ1cHQgKi8KLQl1MTYgcmVnX2lkeDsJCQkvKiBob2xkcyB0aGUgc3BlY2lhbCB2YWx1ZSB0aGF0IGdldHMKKwl1OCByZWdfaWR4OwkJCS8qIGhvbGRzIHRoZSBzcGVjaWFsIHZhbHVlIHRoYXQgZ2V0cwogCQkJCQkgKiB0aGUgaGFyZHdhcmUgcmVnaXN0ZXIgb2Zmc2V0CiAJCQkJCSAqIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJpbmcsIHdoaWNoIGlzCiAJCQkJCSAqIGRpZmZlcmVudCBmb3IgRENCIGFuZCBSU1MgbW9kZXMKIAkJCQkJICovCiAKKwl1MTYgd29ya19saW1pdDsJCQkvKiBtYXggd29yayBwZXIgaW50ZXJydXB0ICovCisKKwl1OCBfX2lvbWVtICp0YWlsOworCisJdW5zaWduZWQgaW50IHRvdGFsX2J5dGVzOworCXVuc2lnbmVkIGludCB0b3RhbF9wYWNrZXRzOworCiAJc3RydWN0IGl4Z2JlX3F1ZXVlX3N0YXRzIHN0YXRzOwogCXN0cnVjdCB1NjRfc3RhdHNfc3luYyBzeW5jcDsKKwl1bmlvbiB7CisJCXN0cnVjdCBpeGdiZV90eF9xdWV1ZV9zdGF0cyB0eF9zdGF0czsKKwkJc3RydWN0IGl4Z2JlX3J4X3F1ZXVlX3N0YXRzIHJ4X3N0YXRzOworCX07CiAJaW50IG51bWFfbm9kZTsKLQl1bnNpZ25lZCBsb25nIHJlaW5pdF9zdGF0ZTsKLQl1NjQgcnNjX2NvdW50OwkJCS8qIHN0YXQgZm9yIGNvYWxlc2NlZCBwYWNrZXRzICovCi0JdTY0IHJzY19mbHVzaDsJCQkvKiBzdGF0cyBmb3IgZmx1c2hlZCBwYWNrZXRzICovCi0JdTMyIHJlc3RhcnRfcXVldWU7CQkvKiB0cmFjayB0eCBxdWV1ZSByZXN0YXJ0cyAqLwotCXUzMiBub25fZW9wX2Rlc2NzOwkJLyogdHJhY2sgaGFyZHdhcmUgZGVzY3JpcHRvciBjaGFpbmluZyAqLwotCiAJdW5zaWduZWQgaW50IHNpemU7CQkvKiBsZW5ndGggaW4gYnl0ZXMgKi8KIAlkbWFfYWRkcl90IGRtYTsJCQkvKiBwaHlzLiBhZGRyZXNzIG9mIGRlc2NyaXB0b3IgcmluZyAqLworCXN0cnVjdCByY3VfaGVhZCByY3U7CisJc3RydWN0IGl4Z2JlX3FfdmVjdG9yICpxX3ZlY3RvcjsgLyogYmFjay1wb2ludGVyIHRvIGhvc3QgcV92ZWN0b3IgKi8KIH0gX19fX2NhY2hlbGluZV9pbnRlcm5vZGVhbGlnbmVkX2luX3NtcDsKIAogZW51bSBpeGdiZV9yaW5nX2ZfZW51bSB7CkBAIC0yMzcsNiArMjczLDkgQEAKIAl1bnNpZ25lZCBpbnQgdl9pZHg7IC8qIGluZGV4IG9mIHFfdmVjdG9yIHdpdGhpbiBhcnJheSwgYWxzbyB1c2VkIGZvcgogCSAgICAgICAgICAgICAgICAgICAgICogZmluZGluZyB0aGUgYml0IGluIEVJQ1IgYW5kIGZyaWVuZHMgdGhhdAogCSAgICAgICAgICAgICAgICAgICAgICogcmVwcmVzZW50cyB0aGUgdmVjdG9yIGZvciB0aGlzIHJpbmcgKi8KKyNpZmRlZiBDT05GSUdfSVhHQkVfRENBCisJaW50IGNwdTsJICAgIC8qIENQVSBmb3IgRENBICovCisjZW5kaWYKIAlzdHJ1Y3QgbmFwaV9zdHJ1Y3QgbmFwaTsKIAlERUNMQVJFX0JJVE1BUChyeHJfaWR4LCBNQVhfUlhfUVVFVUVTKTsgLyogUnggcmluZyBpbmRpY2VzICovCiAJREVDTEFSRV9CSVRNQVAodHhyX2lkeCwgTUFYX1RYX1FVRVVFUyk7IC8qIFR4IHJpbmcgaW5kaWNlcyAqLwpAQCAtMjQ2LDYgKzI4NSw3IEBACiAJdTggcnhfaXRyOwogCXUzMiBlaXRyOwogCWNwdW1hc2tfdmFyX3QgYWZmaW5pdHlfbWFzazsKKwljaGFyIG5hbWVbSUZOQU1TSVogKyA5XTsKIH07CiAKIC8qIEhlbHBlciBtYWNyb3MgdG8gc3dpdGNoIGJldHdlZW4gaW50cy9zZWMgYW5kIHdoYXQgdGhlIHJlZ2lzdGVyIHVzZXMuCkBAIC0yOTQsNyArMzM0LDYgQEAKIAl1MTYgYmRfbnVtYmVyOwogCXN0cnVjdCB3b3JrX3N0cnVjdCByZXNldF90YXNrOwogCXN0cnVjdCBpeGdiZV9xX3ZlY3RvciAqcV92ZWN0b3JbTUFYX01TSVhfUV9WRUNUT1JTXTsKLQljaGFyIG5hbWVbTUFYX01TSVhfQ09VTlRdW0lGTkFNU0laICsgOV07CiAJc3RydWN0IGl4Z2JlX2RjYl9jb25maWcgZGNiX2NmZzsKIAlzdHJ1Y3QgaXhnYmVfZGNiX2NvbmZpZyB0ZW1wX2RjYl9jZmc7CiAJdTggZGNiX3NldF9iaXRtYXA7CkBAIC00MTcsNiArNDU2LDcgQEAKIAlpbnQgbm9kZTsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgY2hlY2tfb3ZlcnRlbXBfdGFzazsKIAl1MzIgaW50ZXJydXB0X2V2ZW50OworCWNoYXIgbHNjX2ludF9uYW1lW0lGTkFNU0laICsgOV07CiAKIAkvKiBTUi1JT1YgKi8KIAlERUNMQVJFX0JJVE1BUChhY3RpdmVfdmZzLCBJWEdCRV9NQVhfVkZfRlVOQ1RJT05TKTsKQEAgLTQyOCwxNyArNDY4LDI1IEBACiAJX19JWEdCRV9URVNUSU5HLAogCV9fSVhHQkVfUkVTRVRUSU5HLAogCV9fSVhHQkVfRE9XTiwKLQlfX0lYR0JFX0ZESVJfSU5JVF9ET05FLAogCV9fSVhHQkVfU0ZQX01PRFVMRV9OT1RfRk9VTkQKIH07CiAKK3N0cnVjdCBpeGdiZV9yc2NfY2IgeworCWRtYV9hZGRyX3QgZG1hOworCXUxNiBza2JfY250OworCWJvb2wgZGVsYXlfdW5tYXA7Cit9OworI2RlZmluZSBJWEdCRV9SU0NfQ0Ioc2tiKSAoKHN0cnVjdCBpeGdiZV9yc2NfY2IgKikoc2tiKS0+Y2IpCisKIGVudW0gaXhnYmVfYm9hcmRzIHsKIAlib2FyZF84MjU5OCwKIAlib2FyZF84MjU5OSwKKwlib2FyZF9YNTQwLAogfTsKIAogZXh0ZXJuIHN0cnVjdCBpeGdiZV9pbmZvIGl4Z2JlXzgyNTk4X2luZm87CiBleHRlcm4gc3RydWN0IGl4Z2JlX2luZm8gaXhnYmVfODI1OTlfaW5mbzsKK2V4dGVybiBzdHJ1Y3QgaXhnYmVfaW5mbyBpeGdiZV9YNTQwX2luZm87CiAjaWZkZWYgQ09ORklHX0lYR0JFX0RDQgogZXh0ZXJuIGNvbnN0IHN0cnVjdCBkY2JubF9ydG5sX29wcyBkY2JubF9vcHM7CiBleHRlcm4gaW50IGl4Z2JlX2NvcHlfZGNiX2NmZyhzdHJ1Y3QgaXhnYmVfZGNiX2NvbmZpZyAqc3JjX2RjYl9jZmcsCkBAIC00NTQsMjYgKzUwMiwyNCBAQAogZXh0ZXJuIHZvaWQgaXhnYmVfcmVpbml0X2xvY2tlZChzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcik7CiBleHRlcm4gdm9pZCBpeGdiZV9yZXNldChzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcik7CiBleHRlcm4gdm9pZCBpeGdiZV9zZXRfZXRodG9vbF9vcHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7Ci1leHRlcm4gaW50IGl4Z2JlX3NldHVwX3J4X3Jlc291cmNlcyhzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqLCBzdHJ1Y3QgaXhnYmVfcmluZyAqKTsKLWV4dGVybiBpbnQgaXhnYmVfc2V0dXBfdHhfcmVzb3VyY2VzKHN0cnVjdCBpeGdiZV9hZGFwdGVyICosIHN0cnVjdCBpeGdiZV9yaW5nICopOwotZXh0ZXJuIHZvaWQgaXhnYmVfZnJlZV9yeF9yZXNvdXJjZXMoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKiwgc3RydWN0IGl4Z2JlX3JpbmcgKik7Ci1leHRlcm4gdm9pZCBpeGdiZV9mcmVlX3R4X3Jlc291cmNlcyhzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqLCBzdHJ1Y3QgaXhnYmVfcmluZyAqKTsKK2V4dGVybiBpbnQgaXhnYmVfc2V0dXBfcnhfcmVzb3VyY2VzKHN0cnVjdCBpeGdiZV9yaW5nICopOworZXh0ZXJuIGludCBpeGdiZV9zZXR1cF90eF9yZXNvdXJjZXMoc3RydWN0IGl4Z2JlX3JpbmcgKik7CitleHRlcm4gdm9pZCBpeGdiZV9mcmVlX3J4X3Jlc291cmNlcyhzdHJ1Y3QgaXhnYmVfcmluZyAqKTsKK2V4dGVybiB2b2lkIGl4Z2JlX2ZyZWVfdHhfcmVzb3VyY2VzKHN0cnVjdCBpeGdiZV9yaW5nICopOwogZXh0ZXJuIHZvaWQgaXhnYmVfY29uZmlndXJlX3J4X3Jpbmcoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKixzdHJ1Y3QgaXhnYmVfcmluZyAqKTsKIGV4dGVybiB2b2lkIGl4Z2JlX2NvbmZpZ3VyZV90eF9yaW5nKHN0cnVjdCBpeGdiZV9hZGFwdGVyICosc3RydWN0IGl4Z2JlX3JpbmcgKik7CiBleHRlcm4gdm9pZCBpeGdiZV91cGRhdGVfc3RhdHMoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpOwogZXh0ZXJuIGludCBpeGdiZV9pbml0X2ludGVycnVwdF9zY2hlbWUoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpOwogZXh0ZXJuIHZvaWQgaXhnYmVfY2xlYXJfaW50ZXJydXB0X3NjaGVtZShzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcik7CiBleHRlcm4gbmV0ZGV2X3R4X3QgaXhnYmVfeG1pdF9mcmFtZV9yaW5nKHN0cnVjdCBza19idWZmICosCi0JCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqLAogCQkJCQkgc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKiwKIAkJCQkJIHN0cnVjdCBpeGdiZV9yaW5nICopOwotZXh0ZXJuIHZvaWQgaXhnYmVfdW5tYXBfYW5kX2ZyZWVfdHhfcmVzb3VyY2Uoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKiwKK2V4dGVybiB2b2lkIGl4Z2JlX3VubWFwX2FuZF9mcmVlX3R4X3Jlc291cmNlKHN0cnVjdCBpeGdiZV9yaW5nICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYmVfdHhfYnVmZmVyICopOwotZXh0ZXJuIHZvaWQgaXhnYmVfYWxsb2NfcnhfYnVmZmVycyhzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl4Z2JlX3JpbmcgKnJ4X3JpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjbGVhbmVkX2NvdW50KTsKK2V4dGVybiB2b2lkIGl4Z2JlX2FsbG9jX3J4X2J1ZmZlcnMoc3RydWN0IGl4Z2JlX3JpbmcgKiwgdTE2KTsKIGV4dGVybiB2b2lkIGl4Z2JlX3dyaXRlX2VpdHIoc3RydWN0IGl4Z2JlX3FfdmVjdG9yICopOwogZXh0ZXJuIGludCBldGh0b29sX2lvY3RsKHN0cnVjdCBpZnJlcSAqaWZyKTsKK2V4dGVybiB1OCBpeGdiZV9kY2JfdHhxX3RvX3RjKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLCB1OCBpbmRleCk7CiBleHRlcm4gczMyIGl4Z2JlX3JlaW5pdF9mZGlyX3RhYmxlc184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKIGV4dGVybiBzMzIgaXhnYmVfaW5pdF9mZGlyX3NpZ25hdHVyZV84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgcGJhbGxvYyk7CiBleHRlcm4gczMyIGl4Z2JlX2luaXRfZmRpcl9wZXJmZWN0XzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiBwYmFsbG9jKTsKQEAgLTQ5OCw2ICs1NDQsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2IGZsZXhfYnl0ZSk7CiBleHRlcm4gczMyIGl4Z2JlX2F0cl9zZXRfbDR0eXBlXzgyNTk5KHN0cnVjdCBpeGdiZV9hdHJfaW5wdXQgKmlucHV0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCBsNHR5cGUpOworZXh0ZXJuIHZvaWQgaXhnYmVfY29uZmlndXJlX3JzY2N0bChzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl4Z2JlX3JpbmcgKnJpbmcpOworZXh0ZXJuIHZvaWQgaXhnYmVfY2xlYXJfcnNjY3RsKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpeGdiZV9yaW5nICpyaW5nKTsKIGV4dGVybiB2b2lkIGl4Z2JlX3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOwogI2lmZGVmIElYR0JFX0ZDT0UKIGV4dGVybiB2b2lkIGl4Z2JlX2NvbmZpZ3VyZV9mY29lKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlXzgyNTk4LmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV84MjU5OC5jCmluZGV4IDljMDJkNjAuLmQwZjFkOWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlXzgyNTk4LmMKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfODI1OTguYwpAQCAtMzgsOSArMzgsNiBAQAogI2RlZmluZSBJWEdCRV84MjU5OF9NQ19UQkxfU0laRSAgMTI4CiAjZGVmaW5lIElYR0JFXzgyNTk4X1ZGVF9UQkxfU0laRSAxMjgKIAotc3RhdGljIHMzMiBpeGdiZV9nZXRfY29wcGVyX2xpbmtfY2FwYWJpbGl0aWVzXzgyNTk4KHN0cnVjdCBpeGdiZV9odyAqaHcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpeGdiZV9saW5rX3NwZWVkICpzcGVlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmF1dG9uZWcpOwogc3RhdGljIHMzMiBpeGdiZV9zZXR1cF9jb3BwZXJfbGlua184MjU5OChzdHJ1Y3QgaXhnYmVfaHcgKmh3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpeGdiZV9saW5rX3NwZWVkIHNwZWVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGF1dG9uZWcsCkBAIC0xNTYsNyArMTUzLDcgQEAKIAlpZiAobWFjLT5vcHMuZ2V0X21lZGlhX3R5cGUoaHcpID09IGl4Z2JlX21lZGlhX3R5cGVfY29wcGVyKSB7CiAJCW1hYy0+b3BzLnNldHVwX2xpbmsgPSAmaXhnYmVfc2V0dXBfY29wcGVyX2xpbmtfODI1OTg7CiAJCW1hYy0+b3BzLmdldF9saW5rX2NhcGFiaWxpdGllcyA9Ci0JCSAgICAgICAgICAgICAgICAgICZpeGdiZV9nZXRfY29wcGVyX2xpbmtfY2FwYWJpbGl0aWVzXzgyNTk4OworCQkJJml4Z2JlX2dldF9jb3BwZXJfbGlua19jYXBhYmlsaXRpZXNfZ2VuZXJpYzsKIAl9CiAKIAlzd2l0Y2ggKGh3LT5waHkudHlwZSkgewpAQCAtMjc0LDM3ICsyNzEsNiBAQAogfQogCiAvKioKLSAqICBpeGdiZV9nZXRfY29wcGVyX2xpbmtfY2FwYWJpbGl0aWVzXzgyNTk4IC0gRGV0ZXJtaW5lcyBsaW5rIGNhcGFiaWxpdGllcwotICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKLSAqICBAc3BlZWQ6IHBvaW50ZXIgdG8gbGluayBzcGVlZAotICogIEBhdXRvbmVnOiBib29sZWFuIGF1dG8tbmVnb3RpYXRpb24gdmFsdWUKLSAqCi0gKiAgRGV0ZXJtaW5lcyB0aGUgbGluayBjYXBhYmlsaXRpZXMgYnkgcmVhZGluZyB0aGUgQVVUT0MgcmVnaXN0ZXIuCi0gKiovCi1zdGF0aWMgczMyIGl4Z2JlX2dldF9jb3BwZXJfbGlua19jYXBhYmlsaXRpZXNfODI1OTgoc3RydWN0IGl4Z2JlX2h3ICpodywKLQkJCQkJCSAgICBpeGdiZV9saW5rX3NwZWVkICpzcGVlZCwKLQkJCQkJCSAgICBib29sICphdXRvbmVnKQotewotCXMzMiBzdGF0dXMgPSBJWEdCRV9FUlJfTElOS19TRVRVUDsKLQl1MTYgc3BlZWRfYWJpbGl0eTsKLQotCSpzcGVlZCA9IDA7Ci0JKmF1dG9uZWcgPSB0cnVlOwotCi0Jc3RhdHVzID0gaHctPnBoeS5vcHMucmVhZF9yZWcoaHcsIE1ESU9fU1BFRUQsIE1ESU9fTU1EX1BNQVBNRCwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3BlZWRfYWJpbGl0eSk7Ci0KLQlpZiAoc3RhdHVzID09IDApIHsKLQkJaWYgKHNwZWVkX2FiaWxpdHkgJiBNRElPX1NQRUVEXzEwRykKLQkJICAgICpzcGVlZCB8PSBJWEdCRV9MSU5LX1NQRUVEXzEwR0JfRlVMTDsKLQkJaWYgKHNwZWVkX2FiaWxpdHkgJiBNRElPX1BNQV9TUEVFRF8xMDAwKQotCQkgICAgKnNwZWVkIHw9IElYR0JFX0xJTktfU1BFRURfMUdCX0ZVTEw7Ci0JfQotCi0JcmV0dXJuIHN0YXR1czsKLX0KLQotLyoqCiAgKiAgaXhnYmVfZ2V0X21lZGlhX3R5cGVfODI1OTggLSBEZXRlcm1pbmVzIG1lZGlhIHR5cGUKICAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCiAgKgpAQCAtMzU3LDYgKzMyMyw3IEBACiAJdTMyIGZjdHJsX3JlZzsKIAl1MzIgcm1jc19yZWc7CiAJdTMyIHJlZzsKKwl1MzIgcnhfcGJhX3NpemU7CiAJdTMyIGxpbmtfc3BlZWQgPSAwOwogCWJvb2wgbGlua191cDsKIApAQCAtNDU5LDE2ICs0MjYsMTggQEAKIAogCS8qIFNldCB1cCBhbmQgZW5hYmxlIFJ4IGhpZ2gvbG93IHdhdGVyIG1hcmsgdGhyZXNob2xkcywgZW5hYmxlIFhPTi4gKi8KIAlpZiAoaHctPmZjLmN1cnJlbnRfbW9kZSAmIGl4Z2JlX2ZjX3R4X3BhdXNlKSB7Ci0JCWlmIChody0+ZmMuc2VuZF94b24pIHsKLQkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkNSVEwocGFja2V0YnVmX251bSksCi0JCQkgICAgICAgICAgICAgICAgKGh3LT5mYy5sb3dfd2F0ZXIgfCBJWEdCRV9GQ1JUTF9YT05FKSk7Ci0JCX0gZWxzZSB7Ci0JCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZDUlRMKHBhY2tldGJ1Zl9udW0pLAotCQkJICAgICAgICAgICAgICAgIGh3LT5mYy5sb3dfd2F0ZXIpOwotCQl9CisJCXJ4X3BiYV9zaXplID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1JYUEJTSVpFKHBhY2tldGJ1Zl9udW0pKTsKKwkJcnhfcGJhX3NpemUgPj49IElYR0JFX1JYUEJTSVpFX1NISUZUOwogCi0JCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkNSVEgocGFja2V0YnVmX251bSksCi0JCSAgICAgICAgICAgICAgICAoaHctPmZjLmhpZ2hfd2F0ZXIgfCBJWEdCRV9GQ1JUSF9GQ0VOKSk7CisJCXJlZyA9IChyeF9wYmFfc2l6ZSAtIGh3LT5mYy5sb3dfd2F0ZXIpIDw8IDY7CisJCWlmIChody0+ZmMuc2VuZF94b24pCisJCQlyZWcgfD0gSVhHQkVfRkNSVExfWE9ORTsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GQ1JUTChwYWNrZXRidWZfbnVtKSwgcmVnKTsKKworCQlyZWcgPSAocnhfcGJhX3NpemUgLSBody0+ZmMuaGlnaF93YXRlcikgPDwgMTA7CisJCXJlZyB8PSBJWEdCRV9GQ1JUSF9GQ0VOOworCisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkNSVEgocGFja2V0YnVmX251bSksIHJlZyk7CiAJfQogCiAJLyogQ29uZmlndXJlIHBhdXNlIHRpbWUgKDIgVENzIHBlciByZWdpc3RlcikgKi8KQEAgLTEyMjIsNiArMTE5MSw3IEBACiBzdGF0aWMgc3RydWN0IGl4Z2JlX2VlcHJvbV9vcGVyYXRpb25zIGVlcHJvbV9vcHNfODI1OTggPSB7CiAJLmluaXRfcGFyYW1zCQk9ICZpeGdiZV9pbml0X2VlcHJvbV9wYXJhbXNfZ2VuZXJpYywKIAkucmVhZAkJCT0gJml4Z2JlX3JlYWRfZWVyZF9nZW5lcmljLAorCS5jYWxjX2NoZWNrc3VtICAgICAgICAgID0gJml4Z2JlX2NhbGNfZWVwcm9tX2NoZWNrc3VtX2dlbmVyaWMsCiAJLnZhbGlkYXRlX2NoZWNrc3VtCT0gJml4Z2JlX3ZhbGlkYXRlX2VlcHJvbV9jaGVja3N1bV9nZW5lcmljLAogCS51cGRhdGVfY2hlY2tzdW0JPSAmaXhnYmVfdXBkYXRlX2VlcHJvbV9jaGVja3N1bV9nZW5lcmljLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlXzgyNTk5LmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV84MjU5OS5jCmluZGV4IDBiZDhmYmIuLmJmZDNjMjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlXzgyNTk5LmMKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfODI1OTkuYwpAQCAtNTYsOSArNTYsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl4Z2JlX2xpbmtfc3BlZWQgc3BlZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhdXRvbmVnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYXV0b25lZ193YWl0X3RvX2NvbXBsZXRlKTsKLXN0YXRpYyBzMzIgaXhnYmVfZ2V0X2NvcHBlcl9saW5rX2NhcGFiaWxpdGllc184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXhnYmVfbGlua19zcGVlZCAqc3BlZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICphdXRvbmVnKTsKIHN0YXRpYyBzMzIgaXhnYmVfc2V0dXBfY29wcGVyX2xpbmtfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXhnYmVfbGlua19zcGVlZCBzcGVlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhdXRvbmVnLApAQCAtNjgsOSArNjUsOSBAQAogc3RhdGljIHZvaWQgaXhnYmVfaW5pdF9tYWNfbGlua19vcHNfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodykKIHsKIAlzdHJ1Y3QgaXhnYmVfbWFjX2luZm8gKm1hYyA9ICZody0+bWFjOwotCWlmIChody0+cGh5Lm11bHRpc3BlZWRfZmliZXIpIHsKLQkJLyogU2V0IHVwIGR1YWwgc3BlZWQgU0ZQKyBzdXBwb3J0ICovCi0JCW1hYy0+b3BzLnNldHVwX2xpbmsgPSAmaXhnYmVfc2V0dXBfbWFjX2xpbmtfbXVsdGlzcGVlZF9maWJlcjsKKworCS8qIGVuYWJsZSB0aGUgbGFzZXIgY29udHJvbCBmdW5jdGlvbnMgZm9yIFNGUCsgZmliZXIgKi8KKwlpZiAobWFjLT5vcHMuZ2V0X21lZGlhX3R5cGUoaHcpID09IGl4Z2JlX21lZGlhX3R5cGVfZmliZXIpIHsKIAkJbWFjLT5vcHMuZGlzYWJsZV90eF9sYXNlciA9CiAJCSAgICAgICAgICAgICAgICAgICAgICAgJml4Z2JlX2Rpc2FibGVfdHhfbGFzZXJfbXVsdGlzcGVlZF9maWJlcjsKIAkJbWFjLT5vcHMuZW5hYmxlX3R4X2xhc2VyID0KQEAgLTgwLDYgKzc3LDEyIEBACiAJCW1hYy0+b3BzLmRpc2FibGVfdHhfbGFzZXIgPSBOVUxMOwogCQltYWMtPm9wcy5lbmFibGVfdHhfbGFzZXIgPSBOVUxMOwogCQltYWMtPm9wcy5mbGFwX3R4X2xhc2VyID0gTlVMTDsKKwl9CisKKwlpZiAoaHctPnBoeS5tdWx0aXNwZWVkX2ZpYmVyKSB7CisJCS8qIFNldCB1cCBkdWFsIHNwZWVkIFNGUCsgc3VwcG9ydCAqLworCQltYWMtPm9wcy5zZXR1cF9saW5rID0gJml4Z2JlX3NldHVwX21hY19saW5rX211bHRpc3BlZWRfZmliZXI7CisJfSBlbHNlIHsKIAkJaWYgKChtYWMtPm9wcy5nZXRfbWVkaWFfdHlwZShodykgPT0KIAkJICAgICBpeGdiZV9tZWRpYV90eXBlX2JhY2twbGFuZSkgJiYKIAkJICAgIChody0+cGh5LnNtYXJ0X3NwZWVkID09IGl4Z2JlX3NtYXJ0X3NwZWVkX2F1dG8gfHwKQEAgLTkzLDYgKzk2LDggQEAKIHN0YXRpYyBzMzIgaXhnYmVfc2V0dXBfc2ZwX21vZHVsZXNfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodykKIHsKIAlzMzIgcmV0X3ZhbCA9IDA7CisJdTMyIHJlZ19hbmxwMSA9IDA7CisJdTMyIGkgPSAwOwogCXUxNiBsaXN0X29mZnNldCwgZGF0YV9vZmZzZXQsIGRhdGFfdmFsdWU7CiAKIAlpZiAoaHctPnBoeS5zZnBfdHlwZSAhPSBpeGdiZV9zZnBfdHlwZV91bmtub3duKSB7CkBAIC0xMTksMTQgKzEyNCwzNCBAQAogCQkJSVhHQkVfV1JJVEVfRkxVU0goaHcpOwogCQkJaHctPmVlcHJvbS5vcHMucmVhZChodywgKytkYXRhX29mZnNldCwgJmRhdGFfdmFsdWUpOwogCQl9Ci0JCS8qIE5vdyByZXN0YXJ0IERTUCBieSBzZXR0aW5nIFJlc3RhcnRfQU4gKi8KLQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9BVVRPQywKLQkJICAgIChJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfQVVUT0MpIHwgSVhHQkVfQVVUT0NfQU5fUkVTVEFSVCkpOwogCiAJCS8qIFJlbGVhc2UgdGhlIHNlbWFwaG9yZSAqLwogCQlpeGdiZV9yZWxlYXNlX3N3Zndfc3luYyhodywgSVhHQkVfR1NTUl9NQUNfQ1NSX1NNKTsKIAkJLyogRGVsYXkgb2J0YWluaW5nIHNlbWFwaG9yZSBhZ2FpbiB0byBhbGxvdyBGVyBhY2Nlc3MgKi8KIAkJbXNsZWVwKGh3LT5lZXByb20uc2VtYXBob3JlX2RlbGF5KTsKKworCQkvKiBOb3cgcmVzdGFydCBEU1AgYnkgc2V0dGluZyBSZXN0YXJ0X0FOIGFuZCBjbGVhcmluZyBMTVMgKi8KKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9BVVRPQywgKChJWEdCRV9SRUFEX1JFRyhodywKKwkJICAgICAgICAgICAgICAgIElYR0JFX0FVVE9DKSAmIH5JWEdCRV9BVVRPQ19MTVNfTUFTSykgfAorCQkgICAgICAgICAgICAgICAgSVhHQkVfQVVUT0NfQU5fUkVTVEFSVCkpOworCisJCS8qIFdhaXQgZm9yIEFOIHRvIGxlYXZlIHN0YXRlIDAgKi8KKwkJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKKwkJCW1zbGVlcCg0KTsKKwkJCXJlZ19hbmxwMSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9BTkxQMSk7CisJCQlpZiAocmVnX2FubHAxICYgSVhHQkVfQU5MUDFfQU5fU1RBVEVfTUFTSykKKwkJCQlicmVhazsKKwkJfQorCQlpZiAoIShyZWdfYW5scDEgJiBJWEdCRV9BTkxQMV9BTl9TVEFURV9NQVNLKSkgeworCQkJaHdfZGJnKGh3LCAic2ZwIG1vZHVsZSBzZXR1cCBub3QgY29tcGxldGVcbiIpOworCQkJcmV0X3ZhbCA9IElYR0JFX0VSUl9TRlBfU0VUVVBfTk9UX0NPTVBMRVRFOworCQkJZ290byBzZXR1cF9zZnBfb3V0OworCQl9CisKKwkJLyogUmVzdGFydCBEU1AgYnkgc2V0dGluZyBSZXN0YXJ0X0FOIGFuZCByZXR1cm4gdG8gU0ZJIG1vZGUgKi8KKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9BVVRPQywgKElYR0JFX1JFQURfUkVHKGh3LAorCQkgICAgICAgICAgICAgICAgSVhHQkVfQVVUT0MpIHwgSVhHQkVfQVVUT0NfTE1TXzEwR19TRVJJQUwgfAorCQkgICAgICAgICAgICAgICAgSVhHQkVfQVVUT0NfQU5fUkVTVEFSVCkpOwogCX0KIAogc2V0dXBfc2ZwX291dDoKQEAgLTE3NCw3ICsxOTksNyBAQAogCWlmIChtYWMtPm9wcy5nZXRfbWVkaWFfdHlwZShodykgPT0gaXhnYmVfbWVkaWFfdHlwZV9jb3BwZXIpIHsKIAkJbWFjLT5vcHMuc2V0dXBfbGluayA9ICZpeGdiZV9zZXR1cF9jb3BwZXJfbGlua184MjU5OTsKIAkJbWFjLT5vcHMuZ2V0X2xpbmtfY2FwYWJpbGl0aWVzID0KLQkJICAgICAgICAgICAgICAgICAgJml4Z2JlX2dldF9jb3BwZXJfbGlua19jYXBhYmlsaXRpZXNfODI1OTk7CisJCQkmaXhnYmVfZ2V0X2NvcHBlcl9saW5rX2NhcGFiaWxpdGllc19nZW5lcmljOwogCX0KIAogCS8qIFNldCBuZWNlc3NhcnkgZnVuY3Rpb24gcG9pbnRlcnMgYmFzZWQgb24gcGh5IHR5cGUgKi8KQEAgLTE4NCw2ICsyMDksMTAgQEAKIAkJcGh5LT5vcHMuZ2V0X2Zpcm13YXJlX3ZlcnNpb24gPQogCQkgICAgICAgICAgICAgJml4Z2JlX2dldF9waHlfZmlybXdhcmVfdmVyc2lvbl90bng7CiAJCWJyZWFrOworCWNhc2UgaXhnYmVfcGh5X2FxOgorCQlwaHktPm9wcy5nZXRfZmlybXdhcmVfdmVyc2lvbiA9CisJCQkmaXhnYmVfZ2V0X3BoeV9maXJtd2FyZV92ZXJzaW9uX2dlbmVyaWM7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KQEAgLTI5MCwzNyArMzE5LDYgQEAKIH0KIAogLyoqCi0gKiAgaXhnYmVfZ2V0X2NvcHBlcl9saW5rX2NhcGFiaWxpdGllc184MjU5OSAtIERldGVybWluZXMgbGluayBjYXBhYmlsaXRpZXMKLSAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCi0gKiAgQHNwZWVkOiBwb2ludGVyIHRvIGxpbmsgc3BlZWQKLSAqICBAYXV0b25lZzogYm9vbGVhbiBhdXRvLW5lZ290aWF0aW9uIHZhbHVlCi0gKgotICogIERldGVybWluZXMgdGhlIGxpbmsgY2FwYWJpbGl0aWVzIGJ5IHJlYWRpbmcgdGhlIEFVVE9DIHJlZ2lzdGVyLgotICoqLwotc3RhdGljIHMzMiBpeGdiZV9nZXRfY29wcGVyX2xpbmtfY2FwYWJpbGl0aWVzXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXhnYmVfbGlua19zcGVlZCAqc3BlZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqYXV0b25lZykKLXsKLQlzMzIgc3RhdHVzID0gSVhHQkVfRVJSX0xJTktfU0VUVVA7Ci0JdTE2IHNwZWVkX2FiaWxpdHk7Ci0KLQkqc3BlZWQgPSAwOwotCSphdXRvbmVnID0gdHJ1ZTsKLQotCXN0YXR1cyA9IGh3LT5waHkub3BzLnJlYWRfcmVnKGh3LCBNRElPX1NQRUVELCBNRElPX01NRF9QTUFQTUQsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNwZWVkX2FiaWxpdHkpOwotCi0JaWYgKHN0YXR1cyA9PSAwKSB7Ci0JCWlmIChzcGVlZF9hYmlsaXR5ICYgTURJT19TUEVFRF8xMEcpCi0JCSAgICAqc3BlZWQgfD0gSVhHQkVfTElOS19TUEVFRF8xMEdCX0ZVTEw7Ci0JCWlmIChzcGVlZF9hYmlsaXR5ICYgTURJT19QTUFfU1BFRURfMTAwMCkKLQkJICAgICpzcGVlZCB8PSBJWEdCRV9MSU5LX1NQRUVEXzFHQl9GVUxMOwotCX0KLQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qKgogICogIGl4Z2JlX2dldF9tZWRpYV90eXBlXzgyNTk5IC0gR2V0IG1lZGlhIHR5cGUKICAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCiAgKgpAQCAtMzMyLDcgKzMzMCw4IEBACiAKIAkvKiBEZXRlY3QgaWYgdGhlcmUgaXMgYSBjb3BwZXIgUEhZIGF0dGFjaGVkLiAqLwogCWlmIChody0+cGh5LnR5cGUgPT0gaXhnYmVfcGh5X2N1X3Vua25vd24gfHwKLQkgICAgaHctPnBoeS50eXBlID09IGl4Z2JlX3BoeV90bikgeworCSAgICBody0+cGh5LnR5cGUgPT0gaXhnYmVfcGh5X3RuIHx8CisJICAgIGh3LT5waHkudHlwZSA9PSBpeGdiZV9waHlfYXEpIHsKIAkJbWVkaWFfdHlwZSA9IGl4Z2JlX21lZGlhX3R5cGVfY29wcGVyOwogCQlnb3RvIG91dDsKIAl9CkBAIC0zNDIsMTEgKzM0MSwxMyBAQAogCWNhc2UgSVhHQkVfREVWX0lEXzgyNTk5X0tYNF9NRVpaOgogCWNhc2UgSVhHQkVfREVWX0lEXzgyNTk5X0NPTUJPX0JBQ0tQTEFORToKIAljYXNlIElYR0JFX0RFVl9JRF84MjU5OV9LUjoKKwljYXNlIElYR0JFX0RFVl9JRF84MjU5OV9CQUNLUExBTkVfRkNPRToKIAljYXNlIElYR0JFX0RFVl9JRF84MjU5OV9YQVVJX0xPTToKIAkJLyogRGVmYXVsdCBkZXZpY2UgSUQgaXMgbWV6emFuaW5lIGNhcmQgS1gvS1g0ICovCiAJCW1lZGlhX3R5cGUgPSBpeGdiZV9tZWRpYV90eXBlX2JhY2twbGFuZTsKIAkJYnJlYWs7CiAJY2FzZSBJWEdCRV9ERVZfSURfODI1OTlfU0ZQOgorCWNhc2UgSVhHQkVfREVWX0lEXzgyNTk5X1NGUF9GQ09FOgogCWNhc2UgSVhHQkVfREVWX0lEXzgyNTk5X1NGUF9FTToKIAkJbWVkaWFfdHlwZSA9IGl4Z2JlX21lZGlhX3R5cGVfZmliZXI7CiAJCWJyZWFrOwpAQCAtMTkyNCw2ICsxOTI1LDcgQEAKIAlody0+cGh5Lm9wcy5pZGVudGlmeShodyk7CiAKIAlpZiAoaHctPnBoeS50eXBlID09IGl4Z2JlX3BoeV90biB8fAorCSAgICBody0+cGh5LnR5cGUgPT0gaXhnYmVfcGh5X2FxIHx8CiAJICAgIGh3LT5waHkudHlwZSA9PSBpeGdiZV9waHlfY3VfdW5rbm93bikgewogCQlody0+cGh5Lm9wcy5yZWFkX3JlZyhodywgTURJT19QTUFfRVhUQUJMRSwgTURJT19NTURfUE1BUE1ELAogCQkJCSAgICAgJmV4dF9hYmlsaXR5KTsKQEAgLTIxMjUsNTEgKzIxMjcsNiBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKLS8qKgotICogIGl4Z2JlX2dldF93d25fcHJlZml4XzgyNTk5IC0gR2V0IGFsdGVybmF0aXZlIFdXTk4vV1dQTiBwcmVmaXggZnJvbQotICogIHRoZSBFRVBST00KLSAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCi0gKiAgQHd3bm5fcHJlZml4OiB0aGUgYWx0ZXJuYXRpdmUgV1dOTiBwcmVmaXgKLSAqICBAd3dwbl9wcmVmaXg6IHRoZSBhbHRlcm5hdGl2ZSBXV1BOIHByZWZpeAotICoKLSAqICBUaGlzIGZ1bmN0aW9uIHdpbGwgcmVhZCB0aGUgRUVQUk9NIGZyb20gdGhlIGFsdGVybmF0aXZlIFNBTiBNQUMgYWRkcmVzcwotICogIGJsb2NrIHRvIGNoZWNrIHRoZSBzdXBwb3J0IGZvciB0aGUgYWx0ZXJuYXRpdmUgV1dOTi9XV1BOIHByZWZpeCBzdXBwb3J0LgotICoqLwotc3RhdGljIHMzMiBpeGdiZV9nZXRfd3duX3ByZWZpeF84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MTYgKnd3bm5fcHJlZml4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgKnd3cG5fcHJlZml4KQotewotCXUxNiBvZmZzZXQsIGNhcHM7Ci0JdTE2IGFsdF9zYW5fbWFjX2Jsa19vZmZzZXQ7Ci0KLQkvKiBjbGVhciBvdXRwdXQgZmlyc3QgKi8KLQkqd3dubl9wcmVmaXggPSAweEZGRkY7Ci0JKnd3cG5fcHJlZml4ID0gMHhGRkZGOwotCi0JLyogY2hlY2sgaWYgYWx0ZXJuYXRpdmUgU0FOIE1BQyBpcyBzdXBwb3J0ZWQgKi8KLQlody0+ZWVwcm9tLm9wcy5yZWFkKGh3LCBJWEdCRV9BTFRfU0FOX01BQ19BRERSX0JMS19QVFIsCi0JICAgICAgICAgICAgICAgICAgICAmYWx0X3Nhbl9tYWNfYmxrX29mZnNldCk7Ci0KLQlpZiAoKGFsdF9zYW5fbWFjX2Jsa19vZmZzZXQgPT0gMCkgfHwKLQkgICAgKGFsdF9zYW5fbWFjX2Jsa19vZmZzZXQgPT0gMHhGRkZGKSkKLQkJZ290byB3d25fcHJlZml4X291dDsKLQotCS8qIGNoZWNrIGNhcGFiaWxpdHkgaW4gYWx0ZXJuYXRpdmUgc2FuIG1hYyBhZGRyZXNzIGJsb2NrICovCi0Jb2Zmc2V0ID0gYWx0X3Nhbl9tYWNfYmxrX29mZnNldCArIElYR0JFX0FMVF9TQU5fTUFDX0FERFJfQ0FQU19PRkZTRVQ7Ci0JaHctPmVlcHJvbS5vcHMucmVhZChodywgb2Zmc2V0LCAmY2Fwcyk7Ci0JaWYgKCEoY2FwcyAmIElYR0JFX0FMVF9TQU5fTUFDX0FERFJfQ0FQU19BTFRXV04pKQotCQlnb3RvIHd3bl9wcmVmaXhfb3V0OwotCi0JLyogZ2V0IHRoZSBjb3JyZXNwb25kaW5nIHByZWZpeCBmb3IgV1dOTi9XV1BOICovCi0Jb2Zmc2V0ID0gYWx0X3Nhbl9tYWNfYmxrX29mZnNldCArIElYR0JFX0FMVF9TQU5fTUFDX0FERFJfV1dOTl9PRkZTRVQ7Ci0JaHctPmVlcHJvbS5vcHMucmVhZChodywgb2Zmc2V0LCB3d25uX3ByZWZpeCk7Ci0KLQlvZmZzZXQgPSBhbHRfc2FuX21hY19ibGtfb2Zmc2V0ICsgSVhHQkVfQUxUX1NBTl9NQUNfQUREUl9XV1BOX09GRlNFVDsKLQlody0+ZWVwcm9tLm9wcy5yZWFkKGh3LCBvZmZzZXQsIHd3cG5fcHJlZml4KTsKLQotd3duX3ByZWZpeF9vdXQ6Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgaXhnYmVfbWFjX29wZXJhdGlvbnMgbWFjX29wc184MjU5OSA9IHsKIAkuaW5pdF9odyAgICAgICAgICAgICAgICA9ICZpeGdiZV9pbml0X2h3X2dlbmVyaWMsCiAJLnJlc2V0X2h3ICAgICAgICAgICAgICAgPSAmaXhnYmVfcmVzZXRfaHdfODI1OTksCkBAIC0yMTgxLDcgKzIxMzgsNyBAQAogCS5nZXRfbWFjX2FkZHIgICAgICAgICAgID0gJml4Z2JlX2dldF9tYWNfYWRkcl9nZW5lcmljLAogCS5nZXRfc2FuX21hY19hZGRyICAgICAgID0gJml4Z2JlX2dldF9zYW5fbWFjX2FkZHJfZ2VuZXJpYywKIAkuZ2V0X2RldmljZV9jYXBzICAgICAgICA9ICZpeGdiZV9nZXRfZGV2aWNlX2NhcHNfODI1OTksCi0JLmdldF93d25fcHJlZml4ICAgICAgICAgPSAmaXhnYmVfZ2V0X3d3bl9wcmVmaXhfODI1OTksCisJLmdldF93d25fcHJlZml4ICAgICAgICAgPSAmaXhnYmVfZ2V0X3d3bl9wcmVmaXhfZ2VuZXJpYywKIAkuc3RvcF9hZGFwdGVyICAgICAgICAgICA9ICZpeGdiZV9zdG9wX2FkYXB0ZXJfZ2VuZXJpYywKIAkuZ2V0X2J1c19pbmZvICAgICAgICAgICA9ICZpeGdiZV9nZXRfYnVzX2luZm9fZ2VuZXJpYywKIAkuc2V0X2xhbl9pZCAgICAgICAgICAgICA9ICZpeGdiZV9zZXRfbGFuX2lkX211bHRpX3BvcnRfcGNpZSwKQEAgLTIyMDgsMTIgKzIxNjUsMTUgQEAKIAkuZmNfZW5hYmxlICAgICAgICAgICAgICA9ICZpeGdiZV9mY19lbmFibGVfZ2VuZXJpYywKIAkuaW5pdF91dGFfdGFibGVzICAgICAgICA9ICZpeGdiZV9pbml0X3V0YV90YWJsZXNfZ2VuZXJpYywKIAkuc2V0dXBfc2ZwICAgICAgICAgICAgICA9ICZpeGdiZV9zZXR1cF9zZnBfbW9kdWxlc184MjU5OSwKKwkuc2V0X21hY19hbnRpX3Nwb29maW5nICA9ICZpeGdiZV9zZXRfbWFjX2FudGlfc3Bvb2ZpbmcsCisJLnNldF92bGFuX2FudGlfc3Bvb2ZpbmcgPSAmaXhnYmVfc2V0X3ZsYW5fYW50aV9zcG9vZmluZywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaXhnYmVfZWVwcm9tX29wZXJhdGlvbnMgZWVwcm9tX29wc184MjU5OSA9IHsKIAkuaW5pdF9wYXJhbXMgICAgICAgICAgICA9ICZpeGdiZV9pbml0X2VlcHJvbV9wYXJhbXNfZ2VuZXJpYywKIAkucmVhZCAgICAgICAgICAgICAgICAgICA9ICZpeGdiZV9yZWFkX2VlcmRfZ2VuZXJpYywKIAkud3JpdGUgICAgICAgICAgICAgICAgICA9ICZpeGdiZV93cml0ZV9lZXByb21fZ2VuZXJpYywKKwkuY2FsY19jaGVja3N1bSAgICAgICAgICA9ICZpeGdiZV9jYWxjX2VlcHJvbV9jaGVja3N1bV9nZW5lcmljLAogCS52YWxpZGF0ZV9jaGVja3N1bSAgICAgID0gJml4Z2JlX3ZhbGlkYXRlX2VlcHJvbV9jaGVja3N1bV9nZW5lcmljLAogCS51cGRhdGVfY2hlY2tzdW0gICAgICAgID0gJml4Z2JlX3VwZGF0ZV9lZXByb21fY2hlY2tzdW1fZ2VuZXJpYywKIH07CkBAIC0yMjQwLDUgKzIyMDAsNSBAQAogCS5tYWNfb3BzICAgICAgICAgICAgICAgID0gJm1hY19vcHNfODI1OTksCiAJLmVlcHJvbV9vcHMgICAgICAgICAgICAgPSAmZWVwcm9tX29wc184MjU5OSwKIAkucGh5X29wcyAgICAgICAgICAgICAgICA9ICZwaHlfb3BzXzgyNTk5LAotCS5tYnhfb3BzICAgICAgICAgICAgICAgID0gJm1ieF9vcHNfODI1OTksCisJLm1ieF9vcHMgICAgICAgICAgICAgICAgPSAmbWJ4X29wc19nZW5lcmljLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfY29tbW9uLmMKaW5kZXggZTNlY2ExMy4uZDVlZGUyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfY29tbW9uLmMKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfY29tbW9uLmMKQEAgLTQ1LDE0ICs0NSwxMiBAQAogc3RhdGljIHZvaWQgaXhnYmVfcmFpc2VfZWVwcm9tX2NsayhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgKmVlYyk7CiBzdGF0aWMgdm9pZCBpeGdiZV9sb3dlcl9lZXByb21fY2xrKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiAqZWVjKTsKIHN0YXRpYyB2b2lkIGl4Z2JlX3JlbGVhc2VfZWVwcm9tKHN0cnVjdCBpeGdiZV9odyAqaHcpOwotc3RhdGljIHUxNiBpeGdiZV9jYWxjX2VlcHJvbV9jaGVja3N1bShzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKIAogc3RhdGljIHZvaWQgaXhnYmVfZW5hYmxlX3JhcihzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgaW5kZXgpOwogc3RhdGljIHZvaWQgaXhnYmVfZGlzYWJsZV9yYXIoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIGluZGV4KTsKIHN0YXRpYyBzMzIgaXhnYmVfbXRhX3ZlY3RvcihzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1OCAqbWNfYWRkcik7CiBzdGF0aWMgdm9pZCBpeGdiZV9hZGRfdWNfYWRkcihzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1OCAqYWRkciwgdTMyIHZtZHEpOwogc3RhdGljIHMzMiBpeGdiZV9zZXR1cF9mYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCBzMzIgcGFja2V0YnVmX251bSk7Ci1zdGF0aWMgczMyIGl4Z2JlX3BvbGxfZWVyZF9lZXdyX2RvbmUoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIGVlX3JlZyk7CiAKIC8qKgogICogIGl4Z2JlX3N0YXJ0X2h3X2dlbmVyaWMgLSBQcmVwYXJlIGhhcmR3YXJlIGZvciBUeC9SeApAQCAtMTk4LDMwICsxOTYsMTEwIEBACiB9CiAKIC8qKgotICogIGl4Z2JlX3JlYWRfcGJhX251bV9nZW5lcmljIC0gUmVhZHMgcGFydCBudW1iZXIgZnJvbSBFRVBST00KKyAqICBpeGdiZV9yZWFkX3BiYV9zdHJpbmdfZ2VuZXJpYyAtIFJlYWRzIHBhcnQgbnVtYmVyIHN0cmluZyBmcm9tIEVFUFJPTQogICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKLSAqICBAcGJhX251bTogc3RvcmVzIHRoZSBwYXJ0IG51bWJlciBmcm9tIHRoZSBFRVBST00KKyAqICBAcGJhX251bTogc3RvcmVzIHRoZSBwYXJ0IG51bWJlciBzdHJpbmcgZnJvbSB0aGUgRUVQUk9NCisgKiAgQHBiYV9udW1fc2l6ZTogcGFydCBudW1iZXIgc3RyaW5nIGJ1ZmZlciBsZW5ndGgKICAqCi0gKiAgUmVhZHMgdGhlIHBhcnQgbnVtYmVyIGZyb20gdGhlIEVFUFJPTS4KKyAqICBSZWFkcyB0aGUgcGFydCBudW1iZXIgc3RyaW5nIGZyb20gdGhlIEVFUFJPTS4KICAqKi8KLXMzMiBpeGdiZV9yZWFkX3BiYV9udW1fZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgKnBiYV9udW0pCitzMzIgaXhnYmVfcmVhZF9wYmFfc3RyaW5nX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTggKnBiYV9udW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyIHBiYV9udW1fc2l6ZSkKIHsKIAlzMzIgcmV0X3ZhbDsKIAl1MTYgZGF0YTsKKwl1MTYgcGJhX3B0cjsKKwl1MTYgb2Zmc2V0OworCXUxNiBsZW5ndGg7CisKKwlpZiAocGJhX251bSA9PSBOVUxMKSB7CisJCWh3X2RiZyhodywgIlBCQSBzdHJpbmcgYnVmZmVyIHdhcyBudWxsXG4iKTsKKwkJcmV0dXJuIElYR0JFX0VSUl9JTlZBTElEX0FSR1VNRU5UOworCX0KIAogCXJldF92YWwgPSBody0+ZWVwcm9tLm9wcy5yZWFkKGh3LCBJWEdCRV9QQkFOVU0wX1BUUiwgJmRhdGEpOwogCWlmIChyZXRfdmFsKSB7CiAJCWh3X2RiZyhodywgIk5WTSBSZWFkIEVycm9yXG4iKTsKIAkJcmV0dXJuIHJldF92YWw7CiAJfQotCSpwYmFfbnVtID0gKHUzMikoZGF0YSA8PCAxNik7CiAKLQlyZXRfdmFsID0gaHctPmVlcHJvbS5vcHMucmVhZChodywgSVhHQkVfUEJBTlVNMV9QVFIsICZkYXRhKTsKKwlyZXRfdmFsID0gaHctPmVlcHJvbS5vcHMucmVhZChodywgSVhHQkVfUEJBTlVNMV9QVFIsICZwYmFfcHRyKTsKIAlpZiAocmV0X3ZhbCkgewogCQlod19kYmcoaHcsICJOVk0gUmVhZCBFcnJvclxuIik7CiAJCXJldHVybiByZXRfdmFsOwogCX0KLQkqcGJhX251bSB8PSBkYXRhOworCisJLyoKKwkgKiBpZiBkYXRhIGlzIG5vdCBwdHIgZ3VhcmQgdGhlIFBCQSBtdXN0IGJlIGluIGxlZ2FjeSBmb3JtYXQgd2hpY2gKKwkgKiBtZWFucyBwYmFfcHRyIGlzIGFjdHVhbGx5IG91ciBzZWNvbmQgZGF0YSB3b3JkIGZvciB0aGUgUEJBIG51bWJlcgorCSAqIGFuZCB3ZSBjYW4gZGVjb2RlIGl0IGludG8gYW4gYXNjaWkgc3RyaW5nCisJICovCisJaWYgKGRhdGEgIT0gSVhHQkVfUEJBTlVNX1BUUl9HVUFSRCkgeworCQlod19kYmcoaHcsICJOVk0gUEJBIG51bWJlciBpcyBub3Qgc3RvcmVkIGFzIHN0cmluZ1xuIik7CisKKwkJLyogd2Ugd2lsbCBuZWVkIDExIGNoYXJhY3RlcnMgdG8gc3RvcmUgdGhlIFBCQSAqLworCQlpZiAocGJhX251bV9zaXplIDwgMTEpIHsKKwkJCWh3X2RiZyhodywgIlBCQSBzdHJpbmcgYnVmZmVyIHRvbyBzbWFsbFxuIik7CisJCQlyZXR1cm4gSVhHQkVfRVJSX05PX1NQQUNFOworCQl9CisKKwkJLyogZXh0cmFjdCBoZXggc3RyaW5nIGZyb20gZGF0YSBhbmQgcGJhX3B0ciAqLworCQlwYmFfbnVtWzBdID0gKGRhdGEgPj4gMTIpICYgMHhGOworCQlwYmFfbnVtWzFdID0gKGRhdGEgPj4gOCkgJiAweEY7CisJCXBiYV9udW1bMl0gPSAoZGF0YSA+PiA0KSAmIDB4RjsKKwkJcGJhX251bVszXSA9IGRhdGEgJiAweEY7CisJCXBiYV9udW1bNF0gPSAocGJhX3B0ciA+PiAxMikgJiAweEY7CisJCXBiYV9udW1bNV0gPSAocGJhX3B0ciA+PiA4KSAmIDB4RjsKKwkJcGJhX251bVs2XSA9ICctJzsKKwkJcGJhX251bVs3XSA9IDA7CisJCXBiYV9udW1bOF0gPSAocGJhX3B0ciA+PiA0KSAmIDB4RjsKKwkJcGJhX251bVs5XSA9IHBiYV9wdHIgJiAweEY7CisKKwkJLyogcHV0IGEgbnVsbCBjaGFyYWN0ZXIgb24gdGhlIGVuZCBvZiBvdXIgc3RyaW5nICovCisJCXBiYV9udW1bMTBdID0gJ1wwJzsKKworCQkvKiBzd2l0Y2ggYWxsIHRoZSBkYXRhIGJ1dCB0aGUgJy0nIHRvIGhleCBjaGFyICovCisJCWZvciAob2Zmc2V0ID0gMDsgb2Zmc2V0IDwgMTA7IG9mZnNldCsrKSB7CisJCQlpZiAocGJhX251bVtvZmZzZXRdIDwgMHhBKQorCQkJCXBiYV9udW1bb2Zmc2V0XSArPSAnMCc7CisJCQllbHNlIGlmIChwYmFfbnVtW29mZnNldF0gPCAweDEwKQorCQkJCXBiYV9udW1bb2Zmc2V0XSArPSAnQScgLSAweEE7CisJCX0KKworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXRfdmFsID0gaHctPmVlcHJvbS5vcHMucmVhZChodywgcGJhX3B0ciwgJmxlbmd0aCk7CisJaWYgKHJldF92YWwpIHsKKwkJaHdfZGJnKGh3LCAiTlZNIFJlYWQgRXJyb3JcbiIpOworCQlyZXR1cm4gcmV0X3ZhbDsKKwl9CisKKwlpZiAobGVuZ3RoID09IDB4RkZGRiB8fCBsZW5ndGggPT0gMCkgeworCQlod19kYmcoaHcsICJOVk0gUEJBIG51bWJlciBzZWN0aW9uIGludmFsaWQgbGVuZ3RoXG4iKTsKKwkJcmV0dXJuIElYR0JFX0VSUl9QQkFfU0VDVElPTjsKKwl9CisKKwkvKiBjaGVjayBpZiBwYmFfbnVtIGJ1ZmZlciBpcyBiaWcgZW5vdWdoICovCisJaWYgKHBiYV9udW1fc2l6ZSAgPCAoKCh1MzIpbGVuZ3RoICogMikgLSAxKSkgeworCQlod19kYmcoaHcsICJQQkEgc3RyaW5nIGJ1ZmZlciB0b28gc21hbGxcbiIpOworCQlyZXR1cm4gSVhHQkVfRVJSX05PX1NQQUNFOworCX0KKworCS8qIHRyaW0gcGJhIGxlbmd0aCBmcm9tIHN0YXJ0IG9mIHN0cmluZyAqLworCXBiYV9wdHIrKzsKKwlsZW5ndGgtLTsKKworCWZvciAob2Zmc2V0ID0gMDsgb2Zmc2V0IDwgbGVuZ3RoOyBvZmZzZXQrKykgeworCQlyZXRfdmFsID0gaHctPmVlcHJvbS5vcHMucmVhZChodywgcGJhX3B0ciArIG9mZnNldCwgJmRhdGEpOworCQlpZiAocmV0X3ZhbCkgeworCQkJaHdfZGJnKGh3LCAiTlZNIFJlYWQgRXJyb3JcbiIpOworCQkJcmV0dXJuIHJldF92YWw7CisJCX0KKwkJcGJhX251bVtvZmZzZXQgKiAyXSA9ICh1OCkoZGF0YSA+PiA4KTsKKwkJcGJhX251bVsob2Zmc2V0ICogMikgKyAxXSA9ICh1OCkoZGF0YSAmIDB4RkYpOworCX0KKwlwYmFfbnVtW29mZnNldCAqIDJdID0gJ1wwJzsKIAogCXJldHVybiAwOwogfQpAQCAtNjM4LDcgKzcxNiw3IEBACiAgKiAgUG9sbHMgdGhlIHN0YXR1cyBiaXQgKGJpdCAxKSBvZiB0aGUgRUVSRCBvciBFRVdSIHRvIGRldGVybWluZSB3aGVuIHRoZQogICogIHJlYWQgb3Igd3JpdGUgaXMgZG9uZSByZXNwZWN0aXZlbHkuCiAgKiovCi1zdGF0aWMgczMyIGl4Z2JlX3BvbGxfZWVyZF9lZXdyX2RvbmUoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIGVlX3JlZykKK3MzMiBpeGdiZV9wb2xsX2VlcmRfZWV3cl9kb25lKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiBlZV9yZWcpCiB7CiAJdTMyIGk7CiAJdTMyIHJlZzsKQEAgLTEwMDksNyArMTA4Nyw3IEBACiAgKiAgaXhnYmVfY2FsY19lZXByb21fY2hlY2tzdW0gLSBDYWxjdWxhdGVzIGFuZCByZXR1cm5zIHRoZSBjaGVja3N1bQogICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKICAqKi8KLXN0YXRpYyB1MTYgaXhnYmVfY2FsY19lZXByb21fY2hlY2tzdW0oc3RydWN0IGl4Z2JlX2h3ICpodykKK3UxNiBpeGdiZV9jYWxjX2VlcHJvbV9jaGVja3N1bV9nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcpCiB7CiAJdTE2IGk7CiAJdTE2IGo7CkBAIC0xMDcyLDcgKzExNTAsNyBAQAogCXN0YXR1cyA9IGh3LT5lZXByb20ub3BzLnJlYWQoaHcsIDAsICZjaGVja3N1bSk7CiAKIAlpZiAoc3RhdHVzID09IDApIHsKLQkJY2hlY2tzdW0gPSBpeGdiZV9jYWxjX2VlcHJvbV9jaGVja3N1bShodyk7CisJCWNoZWNrc3VtID0gaHctPmVlcHJvbS5vcHMuY2FsY19jaGVja3N1bShodyk7CiAKIAkJaHctPmVlcHJvbS5vcHMucmVhZChodywgSVhHQkVfRUVQUk9NX0NIRUNLU1VNLCAmcmVhZF9jaGVja3N1bSk7CiAKQEAgLTExMTAsNyArMTE4OCw3IEBACiAJc3RhdHVzID0gaHctPmVlcHJvbS5vcHMucmVhZChodywgMCwgJmNoZWNrc3VtKTsKIAogCWlmIChzdGF0dXMgPT0gMCkgewotCQljaGVja3N1bSA9IGl4Z2JlX2NhbGNfZWVwcm9tX2NoZWNrc3VtKGh3KTsKKwkJY2hlY2tzdW0gPSBody0+ZWVwcm9tLm9wcy5jYWxjX2NoZWNrc3VtKGh3KTsKIAkJc3RhdHVzID0gaHctPmVlcHJvbS5vcHMud3JpdGUoaHcsIElYR0JFX0VFUFJPTV9DSEVDS1NVTSwKIAkJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrc3VtKTsKIAl9IGVsc2UgewpAQCAtMTU5NSw2ICsxNjczLDcgQEAKIAl1MzIgbWZsY25fcmVnLCBmY2NmZ19yZWc7CiAJdTMyIHJlZzsKIAl1MzIgcnhfcGJhX3NpemU7CisJdTMyIGZjcnRsLCBmY3J0aDsKIAogI2lmZGVmIENPTkZJR19EQ0IKIAlpZiAoaHctPmZjLnJlcXVlc3RlZF9tb2RlID09IGl4Z2JlX2ZjX3BmYykKQEAgLTE2NzEsNDEgKzE3NTAsMjEgQEAKIAlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX01GTENOLCBtZmxjbl9yZWcpOwogCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkNDRkcsIGZjY2ZnX3JlZyk7CiAKLQlyZWcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTVRRQyk7Ci0JLyogVGhyZXNob2xkcyBhcmUgZGlmZmVyZW50IGZvciBsaW5rIGZsb3cgY29udHJvbCB3aGVuIGluIERDQiBtb2RlICovCi0JaWYgKHJlZyAmIElYR0JFX01UUUNfUlRfRU5BKSB7Ci0JCXJ4X3BiYV9zaXplID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1JYUEJTSVpFKHBhY2tldGJ1Zl9udW0pKTsKKwlyeF9wYmFfc2l6ZSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9SWFBCU0laRShwYWNrZXRidWZfbnVtKSk7CisJcnhfcGJhX3NpemUgPj49IElYR0JFX1JYUEJTSVpFX1NISUZUOwogCi0JCS8qIEFsd2F5cyBkaXNhYmxlIFhPTiBmb3IgTEZDIHdoZW4gaW4gRENCIG1vZGUgKi8KLQkJcmVnID0gKHJ4X3BiYV9zaXplID4+IDUpICYgMHhGRkUwOwotCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZDUlRMXzgyNTk5KHBhY2tldGJ1Zl9udW0pLCByZWcpOworCWZjcnRoID0gKHJ4X3BiYV9zaXplIC0gaHctPmZjLmhpZ2hfd2F0ZXIpIDw8IDEwOworCWZjcnRsID0gKHJ4X3BiYV9zaXplIC0gaHctPmZjLmxvd193YXRlcikgPDwgMTA7CiAKLQkJcmVnID0gKHJ4X3BiYV9zaXplID4+IDIpICYgMHhGRkUwOwotCQlpZiAoaHctPmZjLmN1cnJlbnRfbW9kZSAmIGl4Z2JlX2ZjX3R4X3BhdXNlKQotCQkJcmVnIHw9IElYR0JFX0ZDUlRIX0ZDRU47Ci0JCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkNSVEhfODI1OTkocGFja2V0YnVmX251bSksIHJlZyk7Ci0JfSBlbHNlIHsKLQkJLyoKLQkJICogU2V0IHVwIGFuZCBlbmFibGUgUnggaGlnaC9sb3cgd2F0ZXIgbWFyayB0aHJlc2hvbGRzLAotCQkgKiBlbmFibGUgWE9OLgotCQkgKi8KLQkJaWYgKGh3LT5mYy5jdXJyZW50X21vZGUgJiBpeGdiZV9mY190eF9wYXVzZSkgewotCQkJaWYgKGh3LT5mYy5zZW5kX3hvbikgewotCQkJCUlYR0JFX1dSSVRFX1JFRyhodywKLQkJCQkgICAgICAgICAgICAgIElYR0JFX0ZDUlRMXzgyNTk5KHBhY2tldGJ1Zl9udW0pLAotCQkJICAgICAgICAgICAgICAgICAgICAgIChody0+ZmMubG93X3dhdGVyIHwKLQkJCQkgICAgICAgICAgICAgIElYR0JFX0ZDUlRMX1hPTkUpKTsKLQkJCX0gZWxzZSB7Ci0JCQkJSVhHQkVfV1JJVEVfUkVHKGh3LAotCQkJCSAgICAgICAgICAgICAgSVhHQkVfRkNSVExfODI1OTkocGFja2V0YnVmX251bSksCi0JCQkJICAgICAgICAgICAgICBody0+ZmMubG93X3dhdGVyKTsKLQkJCX0KLQotCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GQ1JUSF84MjU5OShwYWNrZXRidWZfbnVtKSwKLQkJCSAgICAgICAgICAgICAgIChody0+ZmMuaGlnaF93YXRlciB8IElYR0JFX0ZDUlRIX0ZDRU4pKTsKLQkJfQorCWlmIChody0+ZmMuY3VycmVudF9tb2RlICYgaXhnYmVfZmNfdHhfcGF1c2UpIHsKKwkJZmNydGggfD0gSVhHQkVfRkNSVEhfRkNFTjsKKwkJaWYgKGh3LT5mYy5zZW5kX3hvbikKKwkJCWZjcnRsIHw9IElYR0JFX0ZDUlRMX1hPTkU7CiAJfQogCisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GQ1JUSF84MjU5OShwYWNrZXRidWZfbnVtKSwgZmNydGgpOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkNSVExfODI1OTkocGFja2V0YnVmX251bSksIGZjcnRsKTsKKwogCS8qIENvbmZpZ3VyZSBwYXVzZSB0aW1lICgyIFRDcyBwZXIgcmVnaXN0ZXIpICovCiAJcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0ZDVFRWKHBhY2tldGJ1Zl9udW0gLyAyKSk7CiAJaWYgKChwYWNrZXRidWZfbnVtICYgMSkgPT0gMCkKQEAgLTI3MDUsMyArMjc2NCwxMTIgQEAKIAogCXJldHVybiAwOwogfQorCisvKioKKyAqICBpeGdiZV9nZXRfd3duX3ByZWZpeF9nZW5lcmljIEdldCBhbHRlcm5hdGl2ZSBXV05OL1dXUE4gcHJlZml4IGZyb20KKyAqICB0aGUgRUVQUk9NCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEB3d25uX3ByZWZpeDogdGhlIGFsdGVybmF0aXZlIFdXTk4gcHJlZml4CisgKiAgQHd3cG5fcHJlZml4OiB0aGUgYWx0ZXJuYXRpdmUgV1dQTiBwcmVmaXgKKyAqCisgKiAgVGhpcyBmdW5jdGlvbiB3aWxsIHJlYWQgdGhlIEVFUFJPTSBmcm9tIHRoZSBhbHRlcm5hdGl2ZSBTQU4gTUFDIGFkZHJlc3MKKyAqICBibG9jayB0byBjaGVjayB0aGUgc3VwcG9ydCBmb3IgdGhlIGFsdGVybmF0aXZlIFdXTk4vV1dQTiBwcmVmaXggc3VwcG9ydC4KKyAqKi8KK3MzMiBpeGdiZV9nZXRfd3duX3ByZWZpeF9nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUxNiAqd3dubl9wcmVmaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2ICp3d3BuX3ByZWZpeCkKK3sKKwl1MTYgb2Zmc2V0LCBjYXBzOworCXUxNiBhbHRfc2FuX21hY19ibGtfb2Zmc2V0OworCisJLyogY2xlYXIgb3V0cHV0IGZpcnN0ICovCisJKnd3bm5fcHJlZml4ID0gMHhGRkZGOworCSp3d3BuX3ByZWZpeCA9IDB4RkZGRjsKKworCS8qIGNoZWNrIGlmIGFsdGVybmF0aXZlIFNBTiBNQUMgaXMgc3VwcG9ydGVkICovCisJaHctPmVlcHJvbS5vcHMucmVhZChodywgSVhHQkVfQUxUX1NBTl9NQUNfQUREUl9CTEtfUFRSLAorCSAgICAgICAgICAgICAgICAgICAgJmFsdF9zYW5fbWFjX2Jsa19vZmZzZXQpOworCisJaWYgKChhbHRfc2FuX21hY19ibGtfb2Zmc2V0ID09IDApIHx8CisJICAgIChhbHRfc2FuX21hY19ibGtfb2Zmc2V0ID09IDB4RkZGRikpCisJCWdvdG8gd3duX3ByZWZpeF9vdXQ7CisKKwkvKiBjaGVjayBjYXBhYmlsaXR5IGluIGFsdGVybmF0aXZlIHNhbiBtYWMgYWRkcmVzcyBibG9jayAqLworCW9mZnNldCA9IGFsdF9zYW5fbWFjX2Jsa19vZmZzZXQgKyBJWEdCRV9BTFRfU0FOX01BQ19BRERSX0NBUFNfT0ZGU0VUOworCWh3LT5lZXByb20ub3BzLnJlYWQoaHcsIG9mZnNldCwgJmNhcHMpOworCWlmICghKGNhcHMgJiBJWEdCRV9BTFRfU0FOX01BQ19BRERSX0NBUFNfQUxUV1dOKSkKKwkJZ290byB3d25fcHJlZml4X291dDsKKworCS8qIGdldCB0aGUgY29ycmVzcG9uZGluZyBwcmVmaXggZm9yIFdXTk4vV1dQTiAqLworCW9mZnNldCA9IGFsdF9zYW5fbWFjX2Jsa19vZmZzZXQgKyBJWEdCRV9BTFRfU0FOX01BQ19BRERSX1dXTk5fT0ZGU0VUOworCWh3LT5lZXByb20ub3BzLnJlYWQoaHcsIG9mZnNldCwgd3dubl9wcmVmaXgpOworCisJb2Zmc2V0ID0gYWx0X3Nhbl9tYWNfYmxrX29mZnNldCArIElYR0JFX0FMVF9TQU5fTUFDX0FERFJfV1dQTl9PRkZTRVQ7CisJaHctPmVlcHJvbS5vcHMucmVhZChodywgb2Zmc2V0LCB3d3BuX3ByZWZpeCk7CisKK3d3bl9wcmVmaXhfb3V0OgorCXJldHVybiAwOworfQorCisvKioKKyAqICBpeGdiZV9zZXRfbWFjX2FudGlfc3Bvb2ZpbmcgLSBFbmFibGUvRGlzYWJsZSBNQUMgYW50aS1zcG9vZmluZworICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqICBAZW5hYmxlOiBlbmFibGUgb3IgZGlzYWJsZSBzd2l0Y2ggZm9yIGFudGktc3Bvb2ZpbmcKKyAqICBAcGY6IFBoeXNpY2FsIEZ1bmN0aW9uIHBvb2wgLSBkbyBub3QgZW5hYmxlIGFudGktc3Bvb2ZpbmcgZm9yIHRoZSBQRgorICoKKyAqKi8KK3ZvaWQgaXhnYmVfc2V0X21hY19hbnRpX3Nwb29maW5nKHN0cnVjdCBpeGdiZV9odyAqaHcsIGJvb2wgZW5hYmxlLCBpbnQgcGYpCit7CisJaW50IGo7CisJaW50IHBmX3RhcmdldF9yZWcgPSBwZiA+PiAzOworCWludCBwZl90YXJnZXRfc2hpZnQgPSBwZiAlIDg7CisJdTMyIHBmdmZzcG9vZiA9IDA7CisKKwlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OEVCKQorCQlyZXR1cm47CisKKwlpZiAoZW5hYmxlKQorCQlwZnZmc3Bvb2YgPSBJWEdCRV9TUE9PRl9NQUNBU19NQVNLOworCisJLyoKKwkgKiBQRlZGU1BPT0YgcmVnaXN0ZXIgYXJyYXkgaXMgc2l6ZSA4IHdpdGggOCBiaXRzIGFzc2lnbmVkIHRvCisJICogTUFDIGFudGktc3Bvb2YgZW5hYmxlcyBpbiBlYWNoIHJlZ2lzdGVyIGFycmF5IGVsZW1lbnQuCisJICovCisJZm9yIChqID0gMDsgaiA8IElYR0JFX1BGVkZTUE9PRl9SRUdfQ09VTlQ7IGorKykKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9QRlZGU1BPT0YoaiksIHBmdmZzcG9vZik7CisKKwkvKiBJZiBub3QgZW5hYmxpbmcgYW50aS1zcG9vZmluZyB0aGVuIGRvbmUgKi8KKwlpZiAoIWVuYWJsZSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBUaGUgUEYgc2hvdWxkIGJlIGFsbG93ZWQgdG8gc3Bvb2Ygc28gdGhhdCBpdCBjYW4gc3VwcG9ydAorCSAqIGVtdWxhdGlvbiBtb2RlIE5JQ3MuICBSZXNldCB0aGUgYml0IGFzc2lnbmVkIHRvIHRoZSBQRgorCSAqLworCXBmdmZzcG9vZiA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9QRlZGU1BPT0YocGZfdGFyZ2V0X3JlZykpOworCXBmdmZzcG9vZiBePSAoMSA8PCBwZl90YXJnZXRfc2hpZnQpOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUEZWRlNQT09GKHBmX3RhcmdldF9yZWcpLCBwZnZmc3Bvb2YpOworfQorCisvKioKKyAqICBpeGdiZV9zZXRfdmxhbl9hbnRpX3Nwb29maW5nIC0gRW5hYmxlL0Rpc2FibGUgVkxBTiBhbnRpLXNwb29maW5nCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEBlbmFibGU6IGVuYWJsZSBvciBkaXNhYmxlIHN3aXRjaCBmb3IgVkxBTiBhbnRpLXNwb29maW5nCisgKiAgQHBmOiBWaXJ0dWFsIEZ1bmN0aW9uIHBvb2wgLSBWRiBQb29sIHRvIHNldCBmb3IgVkxBTiBhbnRpLXNwb29maW5nCisgKgorICoqLwordm9pZCBpeGdiZV9zZXRfdmxhbl9hbnRpX3Nwb29maW5nKHN0cnVjdCBpeGdiZV9odyAqaHcsIGJvb2wgZW5hYmxlLCBpbnQgdmYpCit7CisJaW50IHZmX3RhcmdldF9yZWcgPSB2ZiA+PiAzOworCWludCB2Zl90YXJnZXRfc2hpZnQgPSB2ZiAlIDggKyBJWEdCRV9TUE9PRl9WTEFOQVNfU0hJRlQ7CisJdTMyIHBmdmZzcG9vZjsKKworCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk4RUIpCisJCXJldHVybjsKKworCXBmdmZzcG9vZiA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9QRlZGU1BPT0YodmZfdGFyZ2V0X3JlZykpOworCWlmIChlbmFibGUpCisJCXBmdmZzcG9vZiB8PSAoMSA8PCB2Zl90YXJnZXRfc2hpZnQpOworCWVsc2UKKwkJcGZ2ZnNwb29mICY9IH4oMSA8PCB2Zl90YXJnZXRfc2hpZnQpOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUEZWRlNQT09GKHZmX3RhcmdldF9yZWcpLCBwZnZmc3Bvb2YpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfY29tbW9uLmggYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9jb21tb24uaAppbmRleCA0MjRjMjIzLi42NmVkMDQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9jb21tb24uaAorKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9jb21tb24uaApAQCAtMzUsNyArMzUsOCBAQAogczMyIGl4Z2JlX2luaXRfaHdfZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKIHMzMiBpeGdiZV9zdGFydF9od19nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcpOwogczMyIGl4Z2JlX2NsZWFyX2h3X2NudHJzX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodyk7Ci1zMzIgaXhnYmVfcmVhZF9wYmFfbnVtX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyICpwYmFfbnVtKTsKK3MzMiBpeGdiZV9yZWFkX3BiYV9zdHJpbmdfZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1OCAqcGJhX251bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgcGJhX251bV9zaXplKTsKIHMzMiBpeGdiZV9nZXRfbWFjX2FkZHJfZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1OCAqbWFjX2FkZHIpOwogczMyIGl4Z2JlX2dldF9idXNfaW5mb19nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcpOwogdm9pZCBpeGdiZV9zZXRfbGFuX2lkX211bHRpX3BvcnRfcGNpZShzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKQEAgLTQ5LDkgKzUwLDExIEBACiBzMzIgaXhnYmVfcmVhZF9lZXJkX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTE2IG9mZnNldCwgdTE2ICpkYXRhKTsKIHMzMiBpeGdiZV9yZWFkX2VlcHJvbV9iaXRfYmFuZ19nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUxNiBvZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgKmRhdGEpOwordTE2IGl4Z2JlX2NhbGNfZWVwcm9tX2NoZWNrc3VtX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodyk7CiBzMzIgaXhnYmVfdmFsaWRhdGVfZWVwcm9tX2NoZWNrc3VtX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgKmNoZWNrc3VtX3ZhbCk7CiBzMzIgaXhnYmVfdXBkYXRlX2VlcHJvbV9jaGVja3N1bV9nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcpOworczMyIGl4Z2JlX3BvbGxfZWVyZF9lZXdyX2RvbmUoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIGVlX3JlZyk7CiAKIHMzMiBpeGdiZV9zZXRfcmFyX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIGluZGV4LCB1OCAqYWRkciwgdTMyIHZtZHEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiBlbmFibGVfYWRkcik7CkBAIC04MSw5ICs4NCwxMiBAQAogczMyIGl4Z2JlX2NoZWNrX21hY19saW5rX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl4Z2JlX2xpbmtfc3BlZWQgKnNwZWVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqbGlua191cCwgYm9vbCBsaW5rX3VwX3dhaXRfdG9fY29tcGxldGUpOwotCitzMzIgaXhnYmVfZ2V0X3d3bl9wcmVmaXhfZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MTYgKnd3bm5fcHJlZml4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2ICp3d3BuX3ByZWZpeCk7CiBzMzIgaXhnYmVfYmxpbmtfbGVkX3N0YXJ0X2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIGluZGV4KTsKIHMzMiBpeGdiZV9ibGlua19sZWRfc3RvcF9nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiBpbmRleCk7Cit2b2lkIGl4Z2JlX3NldF9tYWNfYW50aV9zcG9vZmluZyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCBib29sIGVuYWJsZSwgaW50IHBmKTsKK3ZvaWQgaXhnYmVfc2V0X3ZsYW5fYW50aV9zcG9vZmluZyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCBib29sIGVuYWJsZSwgaW50IHZmKTsKIAogI2RlZmluZSBJWEdCRV9XUklURV9SRUcoYSwgcmVnLCB2YWx1ZSkgd3JpdGVsKCh2YWx1ZSksICgoYSktPmh3X2FkZHIgKyAocmVnKSkpCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYi5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiLmMKaW5kZXggMGQ0NGM2NC4uZDE2YzI2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiLmMKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiLmMKQEAgLTQyLDcgKzQyLDggQEAKICAqIEl0IHNob3VsZCBiZSBjYWxsZWQgb25seSBhZnRlciB0aGUgcnVsZXMgYXJlIGNoZWNrZWQgYnkKICAqIGl4Z2JlX2RjYl9jaGVja19jb25maWcoKS4KICAqLwotczMyIGl4Z2JlX2RjYl9jYWxjdWxhdGVfdGNfY3JlZGl0cyhzdHJ1Y3QgaXhnYmVfZGNiX2NvbmZpZyAqZGNiX2NvbmZpZywKK3MzMiBpeGdiZV9kY2JfY2FsY3VsYXRlX3RjX2NyZWRpdHMoc3RydWN0IGl4Z2JlX2h3ICpodywKKwkJCQkgICBzdHJ1Y3QgaXhnYmVfZGNiX2NvbmZpZyAqZGNiX2NvbmZpZywKIAkJCQkgICBpbnQgbWF4X2ZyYW1lLCB1OCBkaXJlY3Rpb24pCiB7CiAJc3RydWN0IHRjX2J3X2FsbG9jICpwOwpAQCAtMTI0LDcgKzEyNSw4IEBACiAJCQkgKiBjcmVkaXQgbWF5IG5vdCBiZSBlbm91Z2ggdG8gc2VuZCBvdXQgYSBUU08KIAkJCSAqIHBhY2tldCBpbiBkZXNjcmlwdG9yIHBsYW5lIGFyYml0cmF0aW9uLgogCQkJICovCi0JCQlpZiAoY3JlZGl0X21heCAmJgorCQkJaWYgKChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk4RUIpICYmCisJCQkgICAgY3JlZGl0X21heCAmJgogCQkJICAgIChjcmVkaXRfbWF4IDwgTUlOSU1VTV9DUkVESVRfRk9SX1RTTykpCiAJCQkJY3JlZGl0X21heCA9IE1JTklNVU1fQ1JFRElUX0ZPUl9UU087CiAKQEAgLTE1MCwxMCArMTUyLDE3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYmVfZGNiX2NvbmZpZyAqZGNiX2NvbmZpZykKIHsKIAlzMzIgcmV0ID0gMDsKLQlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OEVCKQorCXN3aXRjaCAoaHctPm1hYy50eXBlKSB7CisJY2FzZSBpeGdiZV9tYWNfODI1OThFQjoKIAkJcmV0ID0gaXhnYmVfZGNiX2h3X2NvbmZpZ184MjU5OChodywgZGNiX2NvbmZpZyk7Ci0JZWxzZSBpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKQorCQlicmVhazsKKwljYXNlIGl4Z2JlX21hY184MjU5OUVCOgorCWNhc2UgaXhnYmVfbWFjX1g1NDA6CiAJCXJldCA9IGl4Z2JlX2RjYl9od19jb25maWdfODI1OTkoaHcsIGRjYl9jb25maWcpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiLmggYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2IuaAppbmRleCAwMjA4YTg3Li4xY2ZlMzhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2IuaAorKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2IuaApAQCAtMTUwLDcgKzE1MCw4IEBACiAvKiBEQ0IgZHJpdmVyIEFQSXMgKi8KIAogLyogRENCIGNyZWRpdHMgY2FsY3VsYXRpb24gKi8KLXMzMiBpeGdiZV9kY2JfY2FsY3VsYXRlX3RjX2NyZWRpdHMoc3RydWN0IGl4Z2JlX2RjYl9jb25maWcgKiwgaW50LCB1OCk7CitzMzIgaXhnYmVfZGNiX2NhbGN1bGF0ZV90Y19jcmVkaXRzKHN0cnVjdCBpeGdiZV9odyAqLAorCQkJCSAgIHN0cnVjdCBpeGdiZV9kY2JfY29uZmlnICosIGludCwgdTgpOwogCiAvKiBEQ0IgaHcgaW5pdGlhbGl6YXRpb24gKi8KIHMzMiBpeGdiZV9kY2JfaHdfY29uZmlnKHN0cnVjdCBpeGdiZV9odyAqLCBzdHJ1Y3QgaXhnYmVfZGNiX2NvbmZpZyAqKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl84MjU5OC5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiXzgyNTk4LmMKaW5kZXggNTAyODhiYy4uOWE1ZTg5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiXzgyNTk4LmMKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiXzgyNTk4LmMKQEAgLTI1NiwyMSArMjU2LDE3IEBACiAJICogZm9yIGVhY2ggdHJhZmZpYyBjbGFzcy4KIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgTUFYX1RSQUZGSUNfQ0xBU1M7IGkrKykgewotCQlpZiAoZGNiX2NvbmZpZy0+cnhfcGJhX2NmZyA9PSBwYmFfZXF1YWwpIHsKLQkJCXJ4X3BiYV9zaXplID0gSVhHQkVfUlhQQlNJWkVfNjRLQjsKLQkJfSBlbHNlIHsKLQkJCXJ4X3BiYV9zaXplID0gKGkgPCA0KSA/IElYR0JFX1JYUEJTSVpFXzgwS0IKLQkJCQkJICAgICAgOiBJWEdCRV9SWFBCU0laRV80OEtCOwotCQl9CisJCXJ4X3BiYV9zaXplID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1JYUEJTSVpFKGkpKTsKKwkJcnhfcGJhX3NpemUgPj49IElYR0JFX1JYUEJTSVpFX1NISUZUOworCQlyZWcgPSAocnhfcGJhX3NpemUgLSBody0+ZmMubG93X3dhdGVyKSA8PCAxMDsKIAotCQlyZWcgPSAoKHJ4X3BiYV9zaXplID4+IDUpICYgIDB4RkZGMCk7CiAJCWlmIChkY2JfY29uZmlnLT50Y19jb25maWdbaV0uZGNiX3BmYyA9PSBwZmNfZW5hYmxlZF90eCB8fAogCQkgICAgZGNiX2NvbmZpZy0+dGNfY29uZmlnW2ldLmRjYl9wZmMgPT0gcGZjX2VuYWJsZWRfZnVsbCkKIAkJCXJlZyB8PSBJWEdCRV9GQ1JUTF9YT05FOwogCiAJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkNSVEwoaSksIHJlZyk7CiAKLQkJcmVnID0gKChyeF9wYmFfc2l6ZSA+PiAyKSAmIDB4RkZGMCk7CisJCXJlZyA9IChyeF9wYmFfc2l6ZSAtIGh3LT5mYy5oaWdoX3dhdGVyKSA8PCAxMDsKIAkJaWYgKGRjYl9jb25maWctPnRjX2NvbmZpZ1tpXS5kY2JfcGZjID09IHBmY19lbmFibGVkX3R4IHx8CiAJCSAgICBkY2JfY29uZmlnLT50Y19jb25maWdbaV0uZGNiX3BmYyA9PSBwZmNfZW5hYmxlZF9mdWxsKQogCQkJcmVnIHw9IElYR0JFX0ZDUlRIX0ZDRU47CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfODI1OTkuYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl84MjU5OS5jCmluZGV4IDA1ZjIyNDcuLjM3NGUxZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl84MjU5OS5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl84MjU5OS5jCkBAIC0yNTEsMTkgKzI1MSwxNyBAQAogCiAJLyogQ29uZmlndXJlIFBGQyBUeCB0aHJlc2hvbGRzIHBlciBUQyAqLwogCWZvciAoaSA9IDA7IGkgPCBNQVhfVFJBRkZJQ19DTEFTUzsgaSsrKSB7Ci0JCWlmIChkY2JfY29uZmlnLT5yeF9wYmFfY2ZnID09IHBiYV9lcXVhbCkKLQkJCXJ4X3BiYV9zaXplID0gSVhHQkVfUlhQQlNJWkVfNjRLQjsKLQkJZWxzZQotCQkJcnhfcGJhX3NpemUgPSAoaSA8IDQpID8gSVhHQkVfUlhQQlNJWkVfODBLQgotCQkJICAgICAgICAgICAgICAgICAgICAgIDogSVhHQkVfUlhQQlNJWkVfNDhLQjsKKwkJcnhfcGJhX3NpemUgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUlhQQlNJWkUoaSkpOworCQlyeF9wYmFfc2l6ZSA+Pj0gSVhHQkVfUlhQQlNJWkVfU0hJRlQ7CiAKLQkJcmVnID0gKChyeF9wYmFfc2l6ZSA+PiA1KSAmIDB4RkZFMCk7CisJCXJlZyA9IChyeF9wYmFfc2l6ZSAtIGh3LT5mYy5sb3dfd2F0ZXIpIDw8IDEwOworCiAJCWlmIChkY2JfY29uZmlnLT50Y19jb25maWdbaV0uZGNiX3BmYyA9PSBwZmNfZW5hYmxlZF9mdWxsIHx8CiAJCSAgICBkY2JfY29uZmlnLT50Y19jb25maWdbaV0uZGNiX3BmYyA9PSBwZmNfZW5hYmxlZF90eCkKIAkJCXJlZyB8PSBJWEdCRV9GQ1JUTF9YT05FOwogCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZDUlRMXzgyNTk5KGkpLCByZWcpOwogCi0JCXJlZyA9ICgocnhfcGJhX3NpemUgPj4gMikgJiAweEZGRTApOworCQlyZWcgPSAocnhfcGJhX3NpemUgLSBody0+ZmMuaGlnaF93YXRlcikgPDwgMTA7CiAJCWlmIChkY2JfY29uZmlnLT50Y19jb25maWdbaV0uZGNiX3BmYyA9PSBwZmNfZW5hYmxlZF9mdWxsIHx8CiAJCSAgICBkY2JfY29uZmlnLT50Y19jb25maWdbaV0uZGNiX3BmYyA9PSBwZmNfZW5hYmxlZF90eCkKIAkJCXJlZyB8PSBJWEdCRV9GQ1JUSF9GQ0VOOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiX25sLmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfbmwuYwppbmRleCBiNTNiNDY1Li5iZjU2NmU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfbmwuYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfbmwuYwpAQCAtMTMwLDE1ICsxMzAsMjEgQEAKIAkJCW5ldGRldi0+bmV0ZGV2X29wcy0+bmRvX3N0b3AobmV0ZGV2KTsKIAkJaXhnYmVfY2xlYXJfaW50ZXJydXB0X3NjaGVtZShhZGFwdGVyKTsKIAotCQlpZiAoYWRhcHRlci0+aHcubWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk4RUIpIHsKKwkJYWRhcHRlci0+ZmxhZ3MgJj0gfklYR0JFX0ZMQUdfUlNTX0VOQUJMRUQ7CisJCXN3aXRjaCAoYWRhcHRlci0+aHcubWFjLnR5cGUpIHsKKwkJY2FzZSBpeGdiZV9tYWNfODI1OThFQjoKIAkJCWFkYXB0ZXItPmxhc3RfbGZjX21vZGUgPSBhZGFwdGVyLT5ody5mYy5jdXJyZW50X21vZGU7CiAJCQlhZGFwdGVyLT5ody5mYy5yZXF1ZXN0ZWRfbW9kZSA9IGl4Z2JlX2ZjX25vbmU7Ci0JCX0KLQkJYWRhcHRlci0+ZmxhZ3MgJj0gfklYR0JFX0ZMQUdfUlNTX0VOQUJMRUQ7Ci0JCWlmIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikgeworCQkJYnJlYWs7CisJCWNhc2UgaXhnYmVfbWFjXzgyNTk5RUI6CisJCWNhc2UgaXhnYmVfbWFjX1g1NDA6CiAJCQlhZGFwdGVyLT5mbGFncyAmPSB+SVhHQkVfRkxBR19GRElSX0hBU0hfQ0FQQUJMRTsKIAkJCWFkYXB0ZXItPmZsYWdzICY9IH5JWEdCRV9GTEFHX0ZESVJfUEVSRkVDVF9DQVBBQkxFOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKIAkJfQorCiAJCWFkYXB0ZXItPmZsYWdzIHw9IElYR0JFX0ZMQUdfRENCX0VOQUJMRUQ7CiAJCWl4Z2JlX2luaXRfaW50ZXJydXB0X3NjaGVtZShhZGFwdGVyKTsKIAkJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKQEAgLTE1NSw4ICsxNjEsMTQgQEAKIAkJCWFkYXB0ZXItPmRjYl9jZmcucGZjX21vZGVfZW5hYmxlID0gZmFsc2U7CiAJCQlhZGFwdGVyLT5mbGFncyAmPSB+SVhHQkVfRkxBR19EQ0JfRU5BQkxFRDsKIAkJCWFkYXB0ZXItPmZsYWdzIHw9IElYR0JFX0ZMQUdfUlNTX0VOQUJMRUQ7Ci0JCQlpZiAoYWRhcHRlci0+aHcubWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpCisJCQlzd2l0Y2ggKGFkYXB0ZXItPmh3Lm1hYy50eXBlKSB7CisJCQljYXNlIGl4Z2JlX21hY184MjU5OUVCOgorCQkJY2FzZSBpeGdiZV9tYWNfWDU0MDoKIAkJCQlhZGFwdGVyLT5mbGFncyB8PSBJWEdCRV9GTEFHX0ZESVJfSEFTSF9DQVBBQkxFOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlicmVhazsKKwkJCX0KIAogCQkJaXhnYmVfaW5pdF9pbnRlcnJ1cHRfc2NoZW1lKGFkYXB0ZXIpOwogCQkJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKQEAgLTE3OCw5ICsxOTAsMTQgQEAKIAlmb3IgKGkgPSAwOyBpIDwgbmV0ZGV2LT5hZGRyX2xlbjsgaSsrKQogCQlwZXJtX2FkZHJbaV0gPSBhZGFwdGVyLT5ody5tYWMucGVybV9hZGRyW2ldOwogCi0JaWYgKGFkYXB0ZXItPmh3Lm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKSB7CisJc3dpdGNoIChhZGFwdGVyLT5ody5tYWMudHlwZSkgeworCWNhc2UgaXhnYmVfbWFjXzgyNTk5RUI6CisJY2FzZSBpeGdiZV9tYWNfWDU0MDoKIAkJZm9yIChqID0gMDsgaiA8IG5ldGRldi0+YWRkcl9sZW47IGorKywgaSsrKQogCQkJcGVybV9hZGRyW2ldID0gYWRhcHRlci0+aHcubWFjLnNhbl9hZGRyW2pdOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKIAl9CiB9CiAKQEAgLTM2NiwxNSArMzgzLDI5IEBACiAJfQogCiAJaWYgKGFkYXB0ZXItPmRjYl9jZmcucGZjX21vZGVfZW5hYmxlKSB7Ci0JCWlmICgoYWRhcHRlci0+aHcubWFjLnR5cGUgIT0gaXhnYmVfbWFjXzgyNTk4RUIpICYmCi0JCQkoYWRhcHRlci0+aHcuZmMuY3VycmVudF9tb2RlICE9IGl4Z2JlX2ZjX3BmYykpCi0JCQlhZGFwdGVyLT5sYXN0X2xmY19tb2RlID0gYWRhcHRlci0+aHcuZmMuY3VycmVudF9tb2RlOworCQlzd2l0Y2ggKGFkYXB0ZXItPmh3Lm1hYy50eXBlKSB7CisJCWNhc2UgaXhnYmVfbWFjXzgyNTk5RUI6CisJCWNhc2UgaXhnYmVfbWFjX1g1NDA6CisJCQlpZiAoYWRhcHRlci0+aHcuZmMuY3VycmVudF9tb2RlICE9IGl4Z2JlX2ZjX3BmYykKKwkJCQlhZGFwdGVyLT5sYXN0X2xmY19tb2RlID0KKwkJCQkgICAgICAgICAgICAgICAgICBhZGFwdGVyLT5ody5mYy5jdXJyZW50X21vZGU7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CiAJCWFkYXB0ZXItPmh3LmZjLnJlcXVlc3RlZF9tb2RlID0gaXhnYmVfZmNfcGZjOwogCX0gZWxzZSB7Ci0JCWlmIChhZGFwdGVyLT5ody5tYWMudHlwZSAhPSBpeGdiZV9tYWNfODI1OThFQikKLQkJCWFkYXB0ZXItPmh3LmZjLnJlcXVlc3RlZF9tb2RlID0gYWRhcHRlci0+bGFzdF9sZmNfbW9kZTsKLQkJZWxzZQorCQlzd2l0Y2ggKGFkYXB0ZXItPmh3Lm1hYy50eXBlKSB7CisJCWNhc2UgaXhnYmVfbWFjXzgyNTk4RUI6CiAJCQlhZGFwdGVyLT5ody5mYy5yZXF1ZXN0ZWRfbW9kZSA9IGl4Z2JlX2ZjX25vbmU7CisJCQlicmVhazsKKwkJY2FzZSBpeGdiZV9tYWNfODI1OTlFQjoKKwkJY2FzZSBpeGdiZV9tYWNfWDU0MDoKKwkJCWFkYXB0ZXItPmh3LmZjLnJlcXVlc3RlZF9tb2RlID0gYWRhcHRlci0+bGFzdF9sZmNfbW9kZTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KIAl9CiAKIAlpZiAoYWRhcHRlci0+ZGNiX3NldF9iaXRtYXAgJiBCSVRfUkVTRVRMSU5LKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9ldGh0b29sLmMKaW5kZXggM2RjNzMxYy4uMjNmZjIzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2V0aHRvb2wuYwpAQCAtMTg1LDYgKzE4NSwxNiBAQAogCQkJCQkgICAgIEFEVkVSVElTRURfRklCUkUpOwogCQkJZWNtZC0+cG9ydCA9IFBPUlRfRklCUkU7CiAJCQllY21kLT5hdXRvbmVnID0gQVVUT05FR19ESVNBQkxFOworCQl9IGVsc2UgaWYgKChody0+ZGV2aWNlX2lkID09IElYR0JFX0RFVl9JRF84MjU5OV9DT01CT19CQUNLUExBTkUpIHx8CisJCQkgICAoaHctPmRldmljZV9pZCA9PSBJWEdCRV9ERVZfSURfODI1OTlfS1g0X01FWlopKSB7CisJCQllY21kLT5zdXBwb3J0ZWQgfD0gKFNVUFBPUlRFRF8xMDAwYmFzZVRfRnVsbCB8CisJCQkJCSAgICBTVVBQT1JURURfQXV0b25lZyB8CisJCQkJCSAgICBTVVBQT1JURURfRklCUkUpOworCQkJZWNtZC0+YWR2ZXJ0aXNpbmcgPSAoQURWRVJUSVNFRF8xMDAwMGJhc2VUX0Z1bGwgfAorCQkJCQkgICAgIEFEVkVSVElTRURfMTAwMGJhc2VUX0Z1bGwgfAorCQkJCQkgICAgIEFEVkVSVElTRURfQXV0b25lZyB8CisJCQkJCSAgICAgQURWRVJUSVNFRF9GSUJSRSk7CisJCQllY21kLT5wb3J0ID0gUE9SVF9GSUJSRTsKIAkJfSBlbHNlIHsKIAkJCWVjbWQtPnN1cHBvcnRlZCB8PSAoU1VQUE9SVEVEXzEwMDBiYXNlVF9GdWxsIHwKIAkJCQkJICAgIFNVUFBPUlRFRF9GSUJSRSk7CkBAIC0yMDQsNiArMjE0LDcgQEAKIAkvKiBHZXQgUEhZIHR5cGUgKi8KIAlzd2l0Y2ggKGFkYXB0ZXItPmh3LnBoeS50eXBlKSB7CiAJY2FzZSBpeGdiZV9waHlfdG46CisJY2FzZSBpeGdiZV9waHlfYXE6CiAJY2FzZSBpeGdiZV9waHlfY3VfdW5rbm93bjoKIAkJLyogQ29wcGVyIDEwRy1CQVNFVCAqLwogCQllY21kLT5wb3J0ID0gUE9SVF9UUDsKQEAgLTMzMiwxMyArMzQzLDYgQEAKIAllbHNlCiAJCXBhdXNlLT5hdXRvbmVnID0gMTsKIAotI2lmZGVmIENPTkZJR19EQ0IKLQlpZiAoaHctPmZjLmN1cnJlbnRfbW9kZSA9PSBpeGdiZV9mY19wZmMpIHsKLQkJcGF1c2UtPnJ4X3BhdXNlID0gMDsKLQkJcGF1c2UtPnR4X3BhdXNlID0gMDsKLQl9Ci0KLSNlbmRpZgogCWlmIChody0+ZmMuY3VycmVudF9tb2RlID09IGl4Z2JlX2ZjX3J4X3BhdXNlKSB7CiAJCXBhdXNlLT5yeF9wYXVzZSA9IDE7CiAJfSBlbHNlIGlmIChody0+ZmMuY3VycmVudF9tb2RlID09IGl4Z2JlX2ZjX3R4X3BhdXNlKSB7CkBAIC0zNDYsNiArMzUwLDExIEBACiAJfSBlbHNlIGlmIChody0+ZmMuY3VycmVudF9tb2RlID09IGl4Z2JlX2ZjX2Z1bGwpIHsKIAkJcGF1c2UtPnJ4X3BhdXNlID0gMTsKIAkJcGF1c2UtPnR4X3BhdXNlID0gMTsKKyNpZmRlZiBDT05GSUdfRENCCisJfSBlbHNlIGlmIChody0+ZmMuY3VycmVudF9tb2RlID09IGl4Z2JlX2ZjX3BmYykgeworCQlwYXVzZS0+cnhfcGF1c2UgPSAwOworCQlwYXVzZS0+dHhfcGF1c2UgPSAwOworI2VuZGlmCiAJfQogfQogCkBAIC0zNjMsNyArMzcyLDYgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKICNlbmRpZgotCiAJZmMgPSBody0+ZmM7CiAKIAlpZiAocGF1c2UtPmF1dG9uZWcgIT0gQVVUT05FR19FTkFCTEUpCkBAIC00MTIsMTEgKzQyMCw2IEBACiAJZWxzZQogCQlhZGFwdGVyLT5mbGFncyAmPSB+SVhHQkVfRkxBR19SWF9DU1VNX0VOQUJMRUQ7CiAKLQlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQotCQlpeGdiZV9yZWluaXRfbG9ja2VkKGFkYXB0ZXIpOwotCWVsc2UKLQkJaXhnYmVfcmVzZXQoYWRhcHRlcik7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtNDI4LDE2ICs0MzEsMjEgQEAKIHN0YXRpYyBpbnQgaXhnYmVfc2V0X3R4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTMyIGRhdGEpCiB7CiAJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXUzMiBmZWF0dXJlX2xpc3Q7CiAKLQlpZiAoZGF0YSkgewotCQluZXRkZXYtPmZlYXR1cmVzIHw9IChORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX0lQVjZfQ1NVTSk7Ci0JCWlmIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikKLQkJCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9TQ1RQX0NTVU07Ci0JfSBlbHNlIHsKLQkJbmV0ZGV2LT5mZWF0dXJlcyAmPSB+KE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfSVBWNl9DU1VNKTsKLQkJaWYgKGFkYXB0ZXItPmh3Lm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKQotCQkJbmV0ZGV2LT5mZWF0dXJlcyAmPSB+TkVUSUZfRl9TQ1RQX0NTVU07CisJZmVhdHVyZV9saXN0ID0gKE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfSVBWNl9DU1VNKTsKKwlzd2l0Y2ggKGFkYXB0ZXItPmh3Lm1hYy50eXBlKSB7CisJY2FzZSBpeGdiZV9tYWNfODI1OTlFQjoKKwljYXNlIGl4Z2JlX21hY19YNTQwOgorCQlmZWF0dXJlX2xpc3QgfD0gTkVUSUZfRl9TQ1RQX0NTVU07CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOwogCX0KKwlpZiAoZGF0YSkKKwkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBmZWF0dXJlX2xpc3Q7CisJZWxzZQorCQluZXRkZXYtPmZlYXR1cmVzICY9IH5mZWF0dXJlX2xpc3Q7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTUzMCwxMCArNTM4LDIwIEBACiAJcmVnc19idWZmWzMyXSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9GQ1RUVigxKSk7CiAJcmVnc19idWZmWzMzXSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9GQ1RUVigyKSk7CiAJcmVnc19idWZmWzM0XSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9GQ1RUVigzKSk7Ci0JZm9yIChpID0gMDsgaSA8IDg7IGkrKykKLQkJcmVnc19idWZmWzM1ICsgaV0gPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfRkNSVEwoaSkpOwotCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCi0JCXJlZ3NfYnVmZls0MyArIGldID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0ZDUlRIKGkpKTsKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCXN3aXRjaCAoaHctPm1hYy50eXBlKSB7CisJCWNhc2UgaXhnYmVfbWFjXzgyNTk4RUI6CisJCQlyZWdzX2J1ZmZbMzUgKyBpXSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9GQ1JUTChpKSk7CisJCQlyZWdzX2J1ZmZbNDMgKyBpXSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9GQ1JUSChpKSk7CisJCQlicmVhazsKKwkJY2FzZSBpeGdiZV9tYWNfODI1OTlFQjoKKwkJCXJlZ3NfYnVmZlszNSArIGldID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0ZDUlRMXzgyNTk5KGkpKTsKKwkJCXJlZ3NfYnVmZls0MyArIGldID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0ZDUlRIXzgyNTk5KGkpKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwl9CiAJcmVnc19idWZmWzUxXSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9GQ1JUVik7CiAJcmVnc19idWZmWzUyXSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9URkNTKTsKIApAQCAtNjE1LDYgKzYzMyw3IEBACiAJcmVnc19idWZmWzgyN10gPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfV1VQTSk7CiAJcmVnc19idWZmWzgyOF0gPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfRkhGVCgwKSk7CiAKKwkvKiBEQ0IgKi8KIAlyZWdzX2J1ZmZbODI5XSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9STUNTKTsKIAlyZWdzX2J1ZmZbODMwXSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9EUE1DUyk7CiAJcmVnc19idWZmWzgzMV0gPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUERQTUNTKTsKQEAgLTgyMCw5ICs4MzksMTAgQEAKIAlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJY2hhciBmaXJtd2FyZV92ZXJzaW9uWzMyXTsKIAotCXN0cm5jcHkoZHJ2aW5mby0+ZHJpdmVyLCBpeGdiZV9kcml2ZXJfbmFtZSwgc2l6ZW9mKGRydmluZm8tPmRyaXZlcikpOworCXN0cm5jcHkoZHJ2aW5mby0+ZHJpdmVyLCBpeGdiZV9kcml2ZXJfbmFtZSwKKwkgICAgICAgIHNpemVvZihkcnZpbmZvLT5kcml2ZXIpIC0gMSk7CiAJc3RybmNweShkcnZpbmZvLT52ZXJzaW9uLCBpeGdiZV9kcml2ZXJfdmVyc2lvbiwKLQkgICAgICAgIHNpemVvZihkcnZpbmZvLT52ZXJzaW9uKSk7CisJICAgICAgICBzaXplb2YoZHJ2aW5mby0+dmVyc2lvbikgLSAxKTsKIAogCXNucHJpbnRmKGZpcm13YXJlX3ZlcnNpb24sIHNpemVvZihmaXJtd2FyZV92ZXJzaW9uKSwgIiVkLiVkLSVkIiwKIAkgICAgICAgICAoYWRhcHRlci0+ZWVwcm9tX3ZlcnNpb24gJiAweEYwMDApID4+IDEyLApAQCAtOTA1LDEzICs5MjUsMTEgQEAKIAkJCW1lbWNweSgmdGVtcF90eF9yaW5nW2ldLCBhZGFwdGVyLT50eF9yaW5nW2ldLAogCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgaXhnYmVfcmluZykpOwogCQkJdGVtcF90eF9yaW5nW2ldLmNvdW50ID0gbmV3X3R4X2NvdW50OwotCQkJZXJyID0gaXhnYmVfc2V0dXBfdHhfcmVzb3VyY2VzKGFkYXB0ZXIsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRlbXBfdHhfcmluZ1tpXSk7CisJCQllcnIgPSBpeGdiZV9zZXR1cF90eF9yZXNvdXJjZXMoJnRlbXBfdHhfcmluZ1tpXSk7CiAJCQlpZiAoZXJyKSB7CiAJCQkJd2hpbGUgKGkpIHsKIAkJCQkJaS0tOwotCQkJCQlpeGdiZV9mcmVlX3R4X3Jlc291cmNlcyhhZGFwdGVyLAotCQkJCQkgICAgICAgICAgICAgICAgICAgICAgJnRlbXBfdHhfcmluZ1tpXSk7CisJCQkJCWl4Z2JlX2ZyZWVfdHhfcmVzb3VyY2VzKCZ0ZW1wX3R4X3JpbmdbaV0pOwogCQkJCX0KIAkJCQlnb3RvIGNsZWFyX3Jlc2V0OwogCQkJfQpAQCAtOTMwLDEzICs5NDgsMTEgQEAKIAkJCW1lbWNweSgmdGVtcF9yeF9yaW5nW2ldLCBhZGFwdGVyLT5yeF9yaW5nW2ldLAogCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgaXhnYmVfcmluZykpOwogCQkJdGVtcF9yeF9yaW5nW2ldLmNvdW50ID0gbmV3X3J4X2NvdW50OwotCQkJZXJyID0gaXhnYmVfc2V0dXBfcnhfcmVzb3VyY2VzKGFkYXB0ZXIsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRlbXBfcnhfcmluZ1tpXSk7CisJCQllcnIgPSBpeGdiZV9zZXR1cF9yeF9yZXNvdXJjZXMoJnRlbXBfcnhfcmluZ1tpXSk7CiAJCQlpZiAoZXJyKSB7CiAJCQkJd2hpbGUgKGkpIHsKIAkJCQkJaS0tOwotCQkJCQlpeGdiZV9mcmVlX3J4X3Jlc291cmNlcyhhZGFwdGVyLAotCQkJCQkgICAgICAgICAgICAgICAgICAgICAgJnRlbXBfcnhfcmluZ1tpXSk7CisJCQkJCWl4Z2JlX2ZyZWVfcnhfcmVzb3VyY2VzKCZ0ZW1wX3J4X3JpbmdbaV0pOwogCQkJCX0KIAkJCQlnb3RvIGVycl9zZXR1cDsKIAkJCX0KQEAgLTk1MSw4ICs5NjcsNyBAQAogCQkvKiB0eCAqLwogCQlpZiAobmV3X3R4X2NvdW50ICE9IGFkYXB0ZXItPnR4X3JpbmdfY291bnQpIHsKIAkJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspIHsKLQkJCQlpeGdiZV9mcmVlX3R4X3Jlc291cmNlcyhhZGFwdGVyLAotCQkJCSAgICAgICAgICAgICAgICAgICAgICAgIGFkYXB0ZXItPnR4X3JpbmdbaV0pOworCQkJCWl4Z2JlX2ZyZWVfdHhfcmVzb3VyY2VzKGFkYXB0ZXItPnR4X3JpbmdbaV0pOwogCQkJCW1lbWNweShhZGFwdGVyLT50eF9yaW5nW2ldLCAmdGVtcF90eF9yaW5nW2ldLAogCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IGl4Z2JlX3JpbmcpKTsKIAkJCX0KQEAgLTk2Miw4ICs5NzcsNyBAQAogCQkvKiByeCAqLwogCQlpZiAobmV3X3J4X2NvdW50ICE9IGFkYXB0ZXItPnJ4X3JpbmdfY291bnQpIHsKIAkJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspIHsKLQkJCQlpeGdiZV9mcmVlX3J4X3Jlc291cmNlcyhhZGFwdGVyLAotCQkJCSAgICAgICAgICAgICAgICAgICAgICAgIGFkYXB0ZXItPnJ4X3JpbmdbaV0pOworCQkJCWl4Z2JlX2ZyZWVfcnhfcmVzb3VyY2VzKGFkYXB0ZXItPnJ4X3JpbmdbaV0pOwogCQkJCW1lbWNweShhZGFwdGVyLT5yeF9yaW5nW2ldLCAmdGVtcF9yeF9yaW5nW2ldLAogCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IGl4Z2JlX3JpbmcpKTsKIAkJCX0KQEAgLTExNDQsNyArMTE1OCw3IEBACiAjZGVmaW5lIFRBQkxFNjRfVEVTVF9ISQk2CiAKIC8qIGRlZmF1bHQgODI1OTkgcmVnaXN0ZXIgdGVzdCAqLwotc3RhdGljIHN0cnVjdCBpeGdiZV9yZWdfdGVzdCByZWdfdGVzdF84MjU5OVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpeGdiZV9yZWdfdGVzdCByZWdfdGVzdF84MjU5OVtdID0gewogCXsgSVhHQkVfRkNSVExfODI1OTkoMCksIDEsIFBBVFRFUk5fVEVTVCwgMHg4MDA3RkZGMCwgMHg4MDA3RkZGMCB9LAogCXsgSVhHQkVfRkNSVEhfODI1OTkoMCksIDEsIFBBVFRFUk5fVEVTVCwgMHg4MDA3RkZGMCwgMHg4MDA3RkZGMCB9LAogCXsgSVhHQkVfUEZDVE9QLCAxLCBQQVRURVJOX1RFU1QsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYgfSwKQEAgLTExNjgsNyArMTE4Miw3IEBACiB9OwogCiAvKiBkZWZhdWx0IDgyNTk4IHJlZ2lzdGVyIHRlc3QgKi8KLXN0YXRpYyBzdHJ1Y3QgaXhnYmVfcmVnX3Rlc3QgcmVnX3Rlc3RfODI1OThbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaXhnYmVfcmVnX3Rlc3QgcmVnX3Rlc3RfODI1OThbXSA9IHsKIAl7IElYR0JFX0ZDUlRMKDApLCAxLCBQQVRURVJOX1RFU1QsIDB4ODAwN0ZGRjAsIDB4ODAwN0ZGRjAgfSwKIAl7IElYR0JFX0ZDUlRIKDApLCAxLCBQQVRURVJOX1RFU1QsIDB4ODAwN0ZGRjAsIDB4ODAwN0ZGRjAgfSwKIAl7IElYR0JFX1BGQ1RPUCwgMSwgUEFUVEVSTl9URVNULCAweEZGRkZGRkZGLCAweEZGRkZGRkZGIH0sCkBAIC0xMTk1LDE4ICsxMjA5LDIyIEBACiAJeyAwLCAwLCAwLCAwIH0KIH07CiAKK3N0YXRpYyBjb25zdCB1MzIgcmVnaXN0ZXJfdGVzdF9wYXR0ZXJuc1tdID0geworCTB4NUE1QTVBNUEsIDB4QTVBNUE1QTUsIDB4MDAwMDAwMDAsIDB4RkZGRkZGRkYKK307CisKICNkZWZpbmUgUkVHX1BBVFRFUk5fVEVTVChSLCBNLCBXKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIAl1MzIgcGF0LCB2YWwsIGJlZm9yZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCWNvbnN0IHUzMiBfdGVzdFtdID0gezB4NUE1QTVBNUEsIDB4QTVBNUE1QTUsIDB4MDAwMDAwMDAsIDB4RkZGRkZGRkZ9OyBcCi0JZm9yIChwYXQgPSAwOyBwYXQgPCBBUlJBWV9TSVpFKF90ZXN0KTsgcGF0KyspIHsgICAgICAgICAgICAgICAgICAgICAgIFwKKwlmb3IgKHBhdCA9IDA7IHBhdCA8IEFSUkFZX1NJWkUocmVnaXN0ZXJfdGVzdF9wYXR0ZXJucyk7IHBhdCsrKSB7ICAgICAgXAogCQliZWZvcmUgPSByZWFkbChhZGFwdGVyLT5ody5od19hZGRyICsgUik7ICAgICAgICAgICAgICAgICAgICAgIFwKLQkJd3JpdGVsKChfdGVzdFtwYXRdICYgVyksIChhZGFwdGVyLT5ody5od19hZGRyICsgUikpOyAgICAgICAgICBcCisJCXdyaXRlbCgocmVnaXN0ZXJfdGVzdF9wYXR0ZXJuc1twYXRdICYgVyksICAgICAgICAgICAgICAgICAgICAgXAorCQkgICAgICAgKGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyBSKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIAkJdmFsID0gcmVhZGwoYWRhcHRlci0+aHcuaHdfYWRkciArIFIpOyAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCWlmICh2YWwgIT0gKF90ZXN0W3BhdF0gJiBXICYgTSkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQkJZV9lcnIoZHJ2LCAicGF0dGVybiB0ZXN0IHJlZyAlMDRYIGZhaWxlZDogZ290ICIgICBcCi0JCQkgICAgICAiMHglMDhYIGV4cGVjdGVkIDB4JTA4WFxuIiwJCSAgICAgIFwKLQkJCSAgICAgIFIsIHZhbCwgKF90ZXN0W3BhdF0gJiBXICYgTSkpOyAgICAgICAgICAgICAgICBcCisJCWlmICh2YWwgIT0gKHJlZ2lzdGVyX3Rlc3RfcGF0dGVybnNbcGF0XSAmIFcgJiBNKSkgeyAgICAgICAgICAgXAorCQkJZV9lcnIoZHJ2LCAicGF0dGVybiB0ZXN0IHJlZyAlMDRYIGZhaWxlZDogZ290ICIgICAgICAgXAorCQkJICAgICAgIjB4JTA4WCBleHBlY3RlZCAweCUwOFhcbiIsICAgICAgICAgICAgICAgICAgICAgXAorCQkJICAgICAgUiwgdmFsLCAocmVnaXN0ZXJfdGVzdF9wYXR0ZXJuc1twYXRdICYgVyAmIE0pKTsgXAogCQkJKmRhdGEgPSBSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogCQkJd3JpdGVsKGJlZm9yZSwgYWRhcHRlci0+aHcuaHdfYWRkciArIFIpOyAgICAgICAgICAgICAgXAogCQkJcmV0dXJuIDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMTIzMywxNiArMTI1MSwyNCBAQAogCiBzdGF0aWMgaW50IGl4Z2JlX3JlZ190ZXN0KHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLCB1NjQgKmRhdGEpCiB7Ci0Jc3RydWN0IGl4Z2JlX3JlZ190ZXN0ICp0ZXN0OworCWNvbnN0IHN0cnVjdCBpeGdiZV9yZWdfdGVzdCAqdGVzdDsKIAl1MzIgdmFsdWUsIGJlZm9yZSwgYWZ0ZXI7CiAJdTMyIGksIHRvZ2dsZTsKIAotCWlmIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikgewotCQl0b2dnbGUgPSAweDdGRkZGMzBGOwotCQl0ZXN0ID0gcmVnX3Rlc3RfODI1OTk7Ci0JfSBlbHNlIHsKKwlzd2l0Y2ggKGFkYXB0ZXItPmh3Lm1hYy50eXBlKSB7CisJY2FzZSBpeGdiZV9tYWNfODI1OThFQjoKIAkJdG9nZ2xlID0gMHg3RkZGRjNGRjsKIAkJdGVzdCA9IHJlZ190ZXN0XzgyNTk4OworCQlicmVhazsKKwljYXNlIGl4Z2JlX21hY184MjU5OUVCOgorCWNhc2UgaXhnYmVfbWFjX1g1NDA6CisJCXRvZ2dsZSA9IDB4N0ZGRkYzMEY7CisJCXRlc3QgPSByZWdfdGVzdF84MjU5OTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJKmRhdGEgPSAxOworCQlyZXR1cm4gMTsKKwkJYnJlYWs7CiAJfQogCiAJLyoKQEAgLTE0NjAsMTYgKzE0ODYsMjEgQEAKIAlyZWdfY3RsICY9IH5JWEdCRV9UWERDVExfRU5BQkxFOwogCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVFhEQ1RMKHR4X3JpbmctPnJlZ19pZHgpLCByZWdfY3RsKTsKIAotCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpIHsKKwlzd2l0Y2ggKGh3LT5tYWMudHlwZSkgeworCWNhc2UgaXhnYmVfbWFjXzgyNTk5RUI6CisJY2FzZSBpeGdiZV9tYWNfWDU0MDoKIAkJcmVnX2N0bCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9ETUFUWENUTCk7CiAJCXJlZ19jdGwgJj0gfklYR0JFX0RNQVRYQ1RMX1RFOwogCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0RNQVRYQ1RMLCByZWdfY3RsKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CiAJfQogCiAJaXhnYmVfcmVzZXQoYWRhcHRlcik7CiAKLQlpeGdiZV9mcmVlX3R4X3Jlc291cmNlcyhhZGFwdGVyLCAmYWRhcHRlci0+dGVzdF90eF9yaW5nKTsKLQlpeGdiZV9mcmVlX3J4X3Jlc291cmNlcyhhZGFwdGVyLCAmYWRhcHRlci0+dGVzdF9yeF9yaW5nKTsKKwlpeGdiZV9mcmVlX3R4X3Jlc291cmNlcygmYWRhcHRlci0+dGVzdF90eF9yaW5nKTsKKwlpeGdiZV9mcmVlX3J4X3Jlc291cmNlcygmYWRhcHRlci0+dGVzdF9yeF9yaW5nKTsKIH0KIAogc3RhdGljIGludCBpeGdiZV9zZXR1cF9kZXNjX3JpbmdzKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQpAQCAtMTQ4MywxNyArMTUxNCwyNCBAQAogCS8qIFNldHVwIFR4IGRlc2NyaXB0b3IgcmluZyBhbmQgVHggYnVmZmVycyAqLwogCXR4X3JpbmctPmNvdW50ID0gSVhHQkVfREVGQVVMVF9UWEQ7CiAJdHhfcmluZy0+cXVldWVfaW5kZXggPSAwOworCXR4X3JpbmctPmRldiA9ICZhZGFwdGVyLT5wZGV2LT5kZXY7CisJdHhfcmluZy0+bmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwogCXR4X3JpbmctPnJlZ19pZHggPSBhZGFwdGVyLT50eF9yaW5nWzBdLT5yZWdfaWR4OwogCXR4X3JpbmctPm51bWFfbm9kZSA9IGFkYXB0ZXItPm5vZGU7CiAKLQllcnIgPSBpeGdiZV9zZXR1cF90eF9yZXNvdXJjZXMoYWRhcHRlciwgdHhfcmluZyk7CisJZXJyID0gaXhnYmVfc2V0dXBfdHhfcmVzb3VyY2VzKHR4X3JpbmcpOwogCWlmIChlcnIpCiAJCXJldHVybiAxOwogCi0JaWYgKGFkYXB0ZXItPmh3Lm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKSB7CisJc3dpdGNoIChhZGFwdGVyLT5ody5tYWMudHlwZSkgeworCWNhc2UgaXhnYmVfbWFjXzgyNTk5RUI6CisJY2FzZSBpeGdiZV9tYWNfWDU0MDoKIAkJcmVnX2RhdGEgPSBJWEdCRV9SRUFEX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0RNQVRYQ1RMKTsKIAkJcmVnX2RhdGEgfD0gSVhHQkVfRE1BVFhDVExfVEU7CiAJCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0RNQVRYQ1RMLCByZWdfZGF0YSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOwogCX0KIAogCWl4Z2JlX2NvbmZpZ3VyZV90eF9yaW5nKGFkYXB0ZXIsIHR4X3JpbmcpOwpAQCAtMTUwMSwxMSArMTUzOSwxMyBAQAogCS8qIFNldHVwIFJ4IERlc2NyaXB0b3IgcmluZyBhbmQgUnggYnVmZmVycyAqLwogCXJ4X3JpbmctPmNvdW50ID0gSVhHQkVfREVGQVVMVF9SWEQ7CiAJcnhfcmluZy0+cXVldWVfaW5kZXggPSAwOworCXJ4X3JpbmctPmRldiA9ICZhZGFwdGVyLT5wZGV2LT5kZXY7CisJcnhfcmluZy0+bmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwogCXJ4X3JpbmctPnJlZ19pZHggPSBhZGFwdGVyLT5yeF9yaW5nWzBdLT5yZWdfaWR4OwogCXJ4X3JpbmctPnJ4X2J1Zl9sZW4gPSBJWEdCRV9SWEJVRkZFUl8yMDQ4OwogCXJ4X3JpbmctPm51bWFfbm9kZSA9IGFkYXB0ZXItPm5vZGU7CiAKLQllcnIgPSBpeGdiZV9zZXR1cF9yeF9yZXNvdXJjZXMoYWRhcHRlciwgcnhfcmluZyk7CisJZXJyID0gaXhnYmVfc2V0dXBfcnhfcmVzb3VyY2VzKHJ4X3JpbmcpOwogCWlmIChlcnIpIHsKIAkJcmV0X3ZhbCA9IDQ7CiAJCWdvdG8gZXJyX25vbWVtOwpAQCAtMTYwNCw4ICsxNjQ0LDcgQEAKIAlyZXR1cm4gMTM7CiB9CiAKLXN0YXRpYyB1MTYgaXhnYmVfY2xlYW5fdGVzdF9yaW5ncyhzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYmVfcmluZyAqcnhfcmluZywKK3N0YXRpYyB1MTYgaXhnYmVfY2xlYW5fdGVzdF9yaW5ncyhzdHJ1Y3QgaXhnYmVfcmluZyAqcnhfcmluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYmVfcmluZyAqdHhfcmluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2l6ZSkKIHsKQEAgLTE2MjcsNyArMTY2Niw3IEBACiAJCXJ4X2J1ZmZlcl9pbmZvID0gJnJ4X3JpbmctPnJ4X2J1ZmZlcl9pbmZvW3J4X250Y107CiAKIAkJLyogdW5tYXAgUnggYnVmZmVyLCB3aWxsIGJlIHJlbWFwcGVkIGJ5IGFsbG9jX3J4X2J1ZmZlcnMgKi8KLQkJZG1hX3VubWFwX3NpbmdsZSgmYWRhcHRlci0+cGRldi0+ZGV2LAorCQlkbWFfdW5tYXBfc2luZ2xlKHJ4X3JpbmctPmRldiwKIAkJICAgICAgICAgICAgICAgICByeF9idWZmZXJfaW5mby0+ZG1hLAogCQkJCSBidWZzeiwKIAkJCQkgRE1BX0ZST01fREVWSUNFKTsKQEAgLTE2MzksNyArMTY3OCw3IEBACiAKIAkJLyogdW5tYXAgYnVmZmVyIG9uIFR4IHNpZGUgKi8KIAkJdHhfYnVmZmVyX2luZm8gPSAmdHhfcmluZy0+dHhfYnVmZmVyX2luZm9bdHhfbnRjXTsKLQkJaXhnYmVfdW5tYXBfYW5kX2ZyZWVfdHhfcmVzb3VyY2UoYWRhcHRlciwgdHhfYnVmZmVyX2luZm8pOworCQlpeGdiZV91bm1hcF9hbmRfZnJlZV90eF9yZXNvdXJjZSh0eF9yaW5nLCB0eF9idWZmZXJfaW5mbyk7CiAKIAkJLyogaW5jcmVtZW50IFJ4L1R4IG5leHQgdG8gY2xlYW4gY291bnRlcnMgKi8KIAkJcnhfbnRjKys7CkBAIC0xNjU1LDcgKzE2OTQsNyBAQAogCX0KIAogCS8qIHJlLW1hcCBidWZmZXJzIHRvIHJpbmcsIHN0b3JlIG5leHQgdG8gY2xlYW4gdmFsdWVzICovCi0JaXhnYmVfYWxsb2NfcnhfYnVmZmVycyhhZGFwdGVyLCByeF9yaW5nLCBjb3VudCk7CisJaXhnYmVfYWxsb2NfcnhfYnVmZmVycyhyeF9yaW5nLCBjb3VudCk7CiAJcnhfcmluZy0+bmV4dF90b19jbGVhbiA9IHJ4X250YzsKIAl0eF9yaW5nLT5uZXh0X3RvX2NsZWFuID0gdHhfbnRjOwogCkBAIC0xNjk5LDcgKzE3MzgsNiBAQAogCQlmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykgewogCQkJc2tiX2dldChza2IpOwogCQkJdHhfcmV0X3ZhbCA9IGl4Z2JlX3htaXRfZnJhbWVfcmluZyhza2IsCi0JCQkJCQkJICAgYWRhcHRlci0+bmV0ZGV2LAogCQkJCQkJCSAgIGFkYXB0ZXIsCiAJCQkJCQkJICAgdHhfcmluZyk7CiAJCQlpZiAodHhfcmV0X3ZhbCA9PSBORVRERVZfVFhfT0spCkBAIC0xNzE0LDggKzE3NTIsNyBAQAogCQkvKiBhbGxvdyAyMDAgbWlsbGlzZWNvbmRzIGZvciBwYWNrZXRzIHRvIGdvIGZyb20gVHggdG8gUnggKi8KIAkJbXNsZWVwKDIwMCk7CiAKLQkJZ29vZF9jbnQgPSBpeGdiZV9jbGVhbl90ZXN0X3JpbmdzKGFkYXB0ZXIsIHJ4X3JpbmcsCi0JCQkJCQkgIHR4X3JpbmcsIHNpemUpOworCQlnb29kX2NudCA9IGl4Z2JlX2NsZWFuX3Rlc3RfcmluZ3MocnhfcmluZywgdHhfcmluZywgc2l6ZSk7CiAJCWlmIChnb29kX2NudCAhPSA2NCkgewogCQkJcmV0X3ZhbCA9IDEzOwogCQkJYnJlYWs7CkBAIC0xODQ3LDcgKzE4ODQsMjUgQEAKIAlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCWludCByZXR2YWwgPSAxOwogCisJLyogV09MIG5vdCBzdXBwb3J0ZWQgZXhjZXB0IGZvciB0aGUgZm9sbG93aW5nICovCiAJc3dpdGNoKGh3LT5kZXZpY2VfaWQpIHsKKwljYXNlIElYR0JFX0RFVl9JRF84MjU5OV9TRlA6CisJCS8qIE9ubHkgdGhpcyBzdWJkZXZpY2Ugc3VwcG9ydHMgV09MICovCisJCWlmIChody0+c3Vic3lzdGVtX2RldmljZV9pZCAhPSBJWEdCRV9TVUJERVZfSURfODI1OTlfU0ZQKSB7CisJCQl3b2wtPnN1cHBvcnRlZCA9IDA7CisJCQlicmVhazsKKwkJfQorCQlyZXR2YWwgPSAwOworCQlicmVhazsKKwljYXNlIElYR0JFX0RFVl9JRF84MjU5OV9DT01CT19CQUNLUExBTkU6CisJCS8qIEFsbCBleGNlcHQgdGhpcyBzdWJkZXZpY2Ugc3VwcG9ydCBXT0wgKi8KKwkJaWYgKGh3LT5zdWJzeXN0ZW1fZGV2aWNlX2lkID09CisJCSAgICBJWEdCRV9TVUJERVZfSURfODI1OTlfS1g0X0tSX01FWlopIHsKKwkJCXdvbC0+c3VwcG9ydGVkID0gMDsKKwkJCWJyZWFrOworCQl9CisJCXJldHZhbCA9IDA7CisJCWJyZWFrOwogCWNhc2UgSVhHQkVfREVWX0lEXzgyNTk5X0tYNDoKIAkJcmV0dmFsID0gMDsKIAkJYnJlYWs7CkBAIC0xOTg1LDYgKzIwNDAsNDEgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgYmVmb3JlIHNldHRpbmcgdGhlIG5ldyB2YWx1ZSBvZgorICogcnhfaXRyX3NldHRpbmcKKyAqLworc3RhdGljIGJvb2wgaXhnYmVfdXBkYXRlX3JzYyhzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciwKKwkJCSAgICAgc3RydWN0IGV0aHRvb2xfY29hbGVzY2UgKmVjKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisKKwlpZiAoIShhZGFwdGVyLT5mbGFnczIgJiBJWEdCRV9GTEFHMl9SU0NfQ0FQQUJMRSkpCisJCXJldHVybiBmYWxzZTsKKworCS8qIGlmIGludGVycnVwdCByYXRlIGlzIHRvbyBoaWdoIHRoZW4gZGlzYWJsZSBSU0MgKi8KKwlpZiAoZWMtPnJ4X2NvYWxlc2NlX3VzZWNzICE9IDEgJiYKKwkgICAgZWMtPnJ4X2NvYWxlc2NlX3VzZWNzIDw9IDEwMDAwMDAvSVhHQkVfTUFYX1JTQ19JTlRfUkFURSkgeworCQlpZiAoYWRhcHRlci0+ZmxhZ3MyICYgSVhHQkVfRkxBRzJfUlNDX0VOQUJMRUQpIHsKKwkJCWVfaW5mbyhwcm9iZSwgInJ4LXVzZWNzIHNldCB0b28gbG93LCAiCisJCQkJICAgICAgImRpc2FibGluZyBSU0NcbiIpOworCQkJYWRhcHRlci0+ZmxhZ3MyICY9IH5JWEdCRV9GTEFHMl9SU0NfRU5BQkxFRDsKKwkJCXJldHVybiB0cnVlOworCQl9CisJfSBlbHNlIHsKKwkJLyogY2hlY2sgdGhlIGZlYXR1cmUgZmxhZyB2YWx1ZSBhbmQgZW5hYmxlIFJTQyBpZiBuZWNlc3NhcnkgKi8KKwkJaWYgKChuZXRkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9MUk8pICYmCisJCSAgICAhKGFkYXB0ZXItPmZsYWdzMiAmIElYR0JFX0ZMQUcyX1JTQ19FTkFCTEVEKSkgeworCQkJZV9pbmZvKHByb2JlLCAicngtdXNlY3Mgc2V0IHRvICVkLCAiCisJCQkJICAgICAgInJlLWVuYWJsaW5nIFJTQ1xuIiwKKwkJCSAgICAgICBlYy0+cnhfY29hbGVzY2VfdXNlY3MpOworCQkJYWRhcHRlci0+ZmxhZ3MyIHw9IElYR0JFX0ZMQUcyX1JTQ19FTkFCTEVEOworCQkJcmV0dXJuIHRydWU7CisJCX0KKwl9CisJcmV0dXJuIGZhbHNlOworfQorCiBzdGF0aWMgaW50IGl4Z2JlX3NldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGV0aHRvb2xfY29hbGVzY2UgKmVjKQogewpAQCAtMjAwMiwxNyArMjA5MiwxNCBAQAogCQlhZGFwdGVyLT50eF9yaW5nWzBdLT53b3JrX2xpbWl0ID0gZWMtPnR4X21heF9jb2FsZXNjZWRfZnJhbWVzX2lycTsKIAogCWlmIChlYy0+cnhfY29hbGVzY2VfdXNlY3MgPiAxKSB7Ci0JCXUzMiBtYXhfaW50OwotCQlpZiAoYWRhcHRlci0+ZmxhZ3MyICYgSVhHQkVfRkxBRzJfUlNDX0VOQUJMRUQpCi0JCQltYXhfaW50ID0gSVhHQkVfTUFYX1JTQ19JTlRfUkFURTsKLQkJZWxzZQotCQkJbWF4X2ludCA9IElYR0JFX01BWF9JTlRfUkFURTsKLQogCQkvKiBjaGVjayB0aGUgbGltaXRzICovCi0JCWlmICgoMTAwMDAwMC9lYy0+cnhfY29hbGVzY2VfdXNlY3MgPiBtYXhfaW50KSB8fAorCQlpZiAoKDEwMDAwMDAvZWMtPnJ4X2NvYWxlc2NlX3VzZWNzID4gSVhHQkVfTUFYX0lOVF9SQVRFKSB8fAogCQkgICAgKDEwMDAwMDAvZWMtPnJ4X2NvYWxlc2NlX3VzZWNzIDwgSVhHQkVfTUlOX0lOVF9SQVRFKSkKIAkJCXJldHVybiAtRUlOVkFMOwogCisJCS8qIGNoZWNrIHRoZSBvbGQgdmFsdWUgYW5kIGVuYWJsZSBSU0MgaWYgbmVjZXNzYXJ5ICovCisJCW5lZWRfcmVzZXQgPSBpeGdiZV91cGRhdGVfcnNjKGFkYXB0ZXIsIGVjKTsKKwogCQkvKiBzdG9yZSB0aGUgdmFsdWUgaW4gaW50cy9zZWNvbmQgKi8KIAkJYWRhcHRlci0+cnhfZWl0cl9wYXJhbSA9IDEwMDAwMDAvZWMtPnJ4X2NvYWxlc2NlX3VzZWNzOwogCkBAIC0yMDIxLDMyICsyMTA4LDIxIEBACiAJCS8qIGNsZWFyIHRoZSBsb3dlciBiaXQgYXMgaXRzIHVzZWQgZm9yIGR5bmFtaWMgc3RhdGUgKi8KIAkJYWRhcHRlci0+cnhfaXRyX3NldHRpbmcgJj0gfjE7CiAJfSBlbHNlIGlmIChlYy0+cnhfY29hbGVzY2VfdXNlY3MgPT0gMSkgeworCQkvKiBjaGVjayB0aGUgb2xkIHZhbHVlIGFuZCBlbmFibGUgUlNDIGlmIG5lY2Vzc2FyeSAqLworCQluZWVkX3Jlc2V0ID0gaXhnYmVfdXBkYXRlX3JzYyhhZGFwdGVyLCBlYyk7CisKIAkJLyogMSBtZWFucyBkeW5hbWljIG1vZGUgKi8KIAkJYWRhcHRlci0+cnhfZWl0cl9wYXJhbSA9IDIwMDAwOwogCQlhZGFwdGVyLT5yeF9pdHJfc2V0dGluZyA9IDE7CiAJfSBlbHNlIHsKKwkJLyogY2hlY2sgdGhlIG9sZCB2YWx1ZSBhbmQgZW5hYmxlIFJTQyBpZiBuZWNlc3NhcnkgKi8KKwkJbmVlZF9yZXNldCA9IGl4Z2JlX3VwZGF0ZV9yc2MoYWRhcHRlciwgZWMpOwogCQkvKgogCQkgKiBhbnkgb3RoZXIgdmFsdWUgbWVhbnMgZGlzYWJsZSBlaXRyLCB3aGljaCBpcyBiZXN0CiAJCSAqIHNlcnZlZCBieSBzZXR0aW5nIHRoZSBpbnRlcnJ1cHQgcmF0ZSB2ZXJ5IGhpZ2gKIAkJICovCiAJCWFkYXB0ZXItPnJ4X2VpdHJfcGFyYW0gPSBJWEdCRV9NQVhfSU5UX1JBVEU7CiAJCWFkYXB0ZXItPnJ4X2l0cl9zZXR0aW5nID0gMDsKLQotCQkvKgotCQkgKiBpZiBoYXJkd2FyZSBSU0MgaXMgZW5hYmxlZCwgZGlzYWJsZSBpdCB3aGVuCi0JCSAqIHNldHRpbmcgbG93IGxhdGVuY3kgbW9kZSwgdG8gYXZvaWQgZXJyYXRhLCBhc3N1bWluZwotCQkgKiB0aGF0IHdoZW4gdGhlIHVzZXIgc2V0IGxvdyBsYXRlbmN5IG1vZGUgdGhleSB3YW50Ci0JCSAqIGl0IGF0IHRoZSBjb3N0IG9mIGFueXRoaW5nIGVsc2UKLQkJICovCi0JCWlmIChhZGFwdGVyLT5mbGFnczIgJiBJWEdCRV9GTEFHMl9SU0NfRU5BQkxFRCkgewotCQkJYWRhcHRlci0+ZmxhZ3MyICY9IH5JWEdCRV9GTEFHMl9SU0NfRU5BQkxFRDsKLQkJCWlmIChuZXRkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9MUk8pIHsKLQkJCQluZXRkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX0xSTzsKLQkJCQllX2luZm8ocHJvYmUsICJyeC11c2VjcyBzZXQgdG8gMCwgIgotCQkJCSAgICAgICAiZGlzYWJsaW5nIFJTQ1xuIik7Ci0JCQl9Ci0JCQluZWVkX3Jlc2V0ID0gdHJ1ZTsKLQkJfQogCX0KIAogCWlmIChlYy0+dHhfY29hbGVzY2VfdXNlY3MgPiAxKSB7CkBAIC0yMTI3LDM0ICsyMjAzLDQ1IEBACiAJbmVlZF9yZXNldCA9IChkYXRhICYgRVRIX0ZMQUdfUlhWTEFOKSAhPQogCQkgICAgIChuZXRkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9IV19WTEFOX1JYKTsKIAotCXJjID0gZXRodG9vbF9vcF9zZXRfZmxhZ3MobmV0ZGV2LCBkYXRhLCBFVEhfRkxBR19MUk8gfAorCXJjID0gZXRodG9vbF9vcF9zZXRfZmxhZ3MobmV0ZGV2LCBkYXRhLCBFVEhfRkxBR19MUk8gfCBFVEhfRkxBR19OVFVQTEUgfAogCQkJCQlFVEhfRkxBR19SWFZMQU4gfCBFVEhfRkxBR19UWFZMQU4pOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCiAJLyogaWYgc3RhdGUgY2hhbmdlcyB3ZSBuZWVkIHRvIHVwZGF0ZSBhZGFwdGVyLT5mbGFncyBhbmQgcmVzZXQgKi8KLQlpZiAoYWRhcHRlci0+ZmxhZ3MyICYgSVhHQkVfRkxBRzJfUlNDX0NBUEFCTEUpIHsKLQkJLyoKLQkJICogY2FzdCBib3RoIHRvIGJvb2wgYW5kIHZlcmlmeSBpZiB0aGV5IGFyZSBzZXQgdGhlIHNhbWUKLQkJICogYnV0IG9ubHkgZW5hYmxlIFJTQyBpZiBpdHIgaXMgbm9uLXplcm8sIGFzCi0JCSAqIGl0cj0wIGFuZCBSU0MgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZQotCQkgKi8KLQkJaWYgKCgoISEoZGF0YSAmIEVUSF9GTEFHX0xSTykpICE9Ci0JCSAgICAgKCEhKGFkYXB0ZXItPmZsYWdzMiAmIElYR0JFX0ZMQUcyX1JTQ19FTkFCTEVEKSkpICYmCi0JCSAgICBhZGFwdGVyLT5yeF9pdHJfc2V0dGluZykgeworCWlmICgoYWRhcHRlci0+ZmxhZ3MyICYgSVhHQkVfRkxBRzJfUlNDX0NBUEFCTEUpICYmCisJICAgICghIShkYXRhICYgRVRIX0ZMQUdfTFJPKSAhPQorCSAgICAgISEoYWRhcHRlci0+ZmxhZ3MyICYgSVhHQkVfRkxBRzJfUlNDX0VOQUJMRUQpKSkgeworCQlpZiAoKGRhdGEgJiBFVEhfRkxBR19MUk8pICYmCisJCSAgICAoIWFkYXB0ZXItPnJ4X2l0cl9zZXR0aW5nIHx8CisJCSAgICAgKGFkYXB0ZXItPnJ4X2l0cl9zZXR0aW5nID4gSVhHQkVfTUFYX1JTQ19JTlRfUkFURSkpKSB7CisJCQllX2luZm8ocHJvYmUsICJyeC11c2VjcyBzZXQgdG9vIGxvdywgIgorCQkJCSAgICAgICJub3QgZW5hYmxpbmcgUlNDLlxuIik7CisJCX0gZWxzZSB7CiAJCQlhZGFwdGVyLT5mbGFnczIgXj0gSVhHQkVfRkxBRzJfUlNDX0VOQUJMRUQ7CiAJCQlzd2l0Y2ggKGFkYXB0ZXItPmh3Lm1hYy50eXBlKSB7CiAJCQljYXNlIGl4Z2JlX21hY184MjU5OUVCOgogCQkJCW5lZWRfcmVzZXQgPSB0cnVlOwogCQkJCWJyZWFrOworCQkJY2FzZSBpeGdiZV9tYWNfWDU0MDogeworCQkJCWludCBpOworCQkJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspIHsKKwkJCQkJc3RydWN0IGl4Z2JlX3JpbmcgKnJpbmcgPQorCQkJCQkgICAgICAgICAgICAgICAgICBhZGFwdGVyLT5yeF9yaW5nW2ldOworCQkJCQlpZiAoYWRhcHRlci0+ZmxhZ3MyICYKKwkJCQkJICAgIElYR0JFX0ZMQUcyX1JTQ19FTkFCTEVEKSB7CisJCQkJCQlpeGdiZV9jb25maWd1cmVfcnNjY3RsKGFkYXB0ZXIsCisJCQkJCQkgICAgICAgICAgICAgICAgICAgICAgIHJpbmcpOworCQkJCQl9IGVsc2UgeworCQkJCQkJaXhnYmVfY2xlYXJfcnNjY3RsKGFkYXB0ZXIsCisJCQkJCQkgICAgICAgICAgICAgICAgICAgcmluZyk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgogCQkJCWJyZWFrOwogCQkJfQotCQl9IGVsc2UgaWYgKCFhZGFwdGVyLT5yeF9pdHJfc2V0dGluZykgewotCQkJbmV0ZGV2LT5mZWF0dXJlcyAmPSB+TkVUSUZfRl9MUk87Ci0JCQlpZiAoZGF0YSAmIEVUSF9GTEFHX0xSTykKLQkJCQllX2luZm8ocHJvYmUsICJyeC11c2VjcyBzZXQgdG8gMCwgIgotCQkJCSAgICAgICAiTFJPL1JTQyBjYW5ub3QgYmUgZW5hYmxlZC5cbiIpOwogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9mY29lLmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9mY29lLmMKaW5kZXggMDVlZmE2YS4uNjM0MmQ0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZmNvZS5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2Zjb2UuYwpAQCAtNjgsNyArNjgsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIGl4Z2JlX2Zjb2VfY2xlYXJfZGRwKHN0cnVjdCBpeGdiZV9mY29lX2RkcCAqZGRwKQogewogCWRkcC0+bGVuID0gMDsKLQlkZHAtPmVyciA9IDA7CisJZGRwLT5lcnIgPSAxOwogCWRkcC0+dWRsID0gTlVMTDsKIAlkZHAtPnVkcCA9IDBVTDsKIAlkZHAtPnNnbCA9IE5VTEw7CkBAIC05Miw2ICs5Miw3IEBACiAJc3RydWN0IGl4Z2JlX2Zjb2UgKmZjb2U7CiAJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXI7CiAJc3RydWN0IGl4Z2JlX2Zjb2VfZGRwICpkZHA7CisJdTMyIGZjYnVmZjsKIAogCWlmICghbmV0ZGV2KQogCQlnb3RvIG91dF9kZHBfcHV0OwpAQCAtMTE1LDcgKzExNiwxNCBAQAogCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9GQ0JVRkYsIDApOwogCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9GQ0RNQVJXLAogCQkJCSh4aWQgfCBJWEdCRV9GQ0RNQVJXX1dFKSk7CisKKwkJLyogZ3VhcmFudGVlZCB0byBiZSBpbnZhbGlkYXRlZCBhZnRlciAxMDB1cyAqLworCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9GQ0RNQVJXLAorCQkJCSh4aWQgfCBJWEdCRV9GQ0RNQVJXX1JFKSk7CisJCWZjYnVmZiA9IElYR0JFX1JFQURfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfRkNCVUZGKTsKIAkJc3Bpbl91bmxvY2tfYmgoJmZjb2UtPmxvY2spOworCQlpZiAoZmNidWZmICYgSVhHQkVfRkNCVUZGX1ZBTElEKQorCQkJdWRlbGF5KDEwMCk7CiAJfQogCWlmIChkZHAtPnNnbCkKIAkJcGNpX3VubWFwX3NnKGFkYXB0ZXItPnBkZXYsIGRkcC0+c2dsLCBkZHAtPnNnYywKQEAgLTE2OCw2ICsxNzYsMTEgQEAKIAkJcmV0dXJuIDA7CiAJfQogCisJLyogbm8gRERQIGlmIHdlIGFyZSBhbHJlYWR5IGRvd24gb3IgcmVzZXR0aW5nICovCisJaWYgKHRlc3RfYml0KF9fSVhHQkVfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSB8fAorCSAgICB0ZXN0X2JpdChfX0lYR0JFX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKSkKKwkJcmV0dXJuIDA7CisKIAlmY29lID0gJmFkYXB0ZXItPmZjb2U7CiAJaWYgKCFmY29lLT5wb29sKSB7CiAJCWVfd2FybihkcnYsICJ4aWQ9MHgleCBubyBkZHAgcG9vbCBmb3IgZmNvZVxuIiwgeGlkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX21haW4uYwppbmRleCBlZWUwYjI5Li4zOGFiNGYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWFpbi5jCkBAIC01MiwxMyArNTIsMTQgQEAKIHN0YXRpYyBjb25zdCBjaGFyIGl4Z2JlX2RyaXZlcl9zdHJpbmdbXSA9CiAJCQkgICAgICAiSW50ZWwoUikgMTAgR2lnYWJpdCBQQ0kgRXhwcmVzcyBOZXR3b3JrIERyaXZlciI7CiAKLSNkZWZpbmUgRFJWX1ZFUlNJT04gIjIuMC44NC1rMiIKKyNkZWZpbmUgRFJWX1ZFUlNJT04gIjMuMC4xMi1rMiIKIGNvbnN0IGNoYXIgaXhnYmVfZHJpdmVyX3ZlcnNpb25bXSA9IERSVl9WRVJTSU9OOwogc3RhdGljIGNoYXIgaXhnYmVfY29weXJpZ2h0W10gPSAiQ29weXJpZ2h0IChjKSAxOTk5LTIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIjsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpeGdiZV9pbmZvICppeGdiZV9pbmZvX3RibFtdID0gewogCVtib2FyZF84MjU5OF0gPSAmaXhnYmVfODI1OThfaW5mbywKIAlbYm9hcmRfODI1OTldID0gJml4Z2JlXzgyNTk5X2luZm8sCisJW2JvYXJkX1g1NDBdID0gJml4Z2JlX1g1NDBfaW5mbywKIH07CiAKIC8qIGl4Z2JlX3BjaV90YmwgLSBQQ0kgRGV2aWNlIElEIFRhYmxlCkBAIC0xMDgsMTAgKzEwOSwxNiBAQAogCSBib2FyZF84MjU5OSB9LAogCXtQQ0lfVkRFVklDRShJTlRFTCwgSVhHQkVfREVWX0lEXzgyNTk5X0NYNCksCiAJIGJvYXJkXzgyNTk5IH0sCisJe1BDSV9WREVWSUNFKElOVEVMLCBJWEdCRV9ERVZfSURfODI1OTlfQkFDS1BMQU5FX0ZDT0UpLAorCSBib2FyZF84MjU5OSB9LAorCXtQQ0lfVkRFVklDRShJTlRFTCwgSVhHQkVfREVWX0lEXzgyNTk5X1NGUF9GQ09FKSwKKwkgYm9hcmRfODI1OTkgfSwKIAl7UENJX1ZERVZJQ0UoSU5URUwsIElYR0JFX0RFVl9JRF84MjU5OV9UM19MT00pLAogCSBib2FyZF84MjU5OSB9LAogCXtQQ0lfVkRFVklDRShJTlRFTCwgSVhHQkVfREVWX0lEXzgyNTk5X0NPTUJPX0JBQ0tQTEFORSksCiAJIGJvYXJkXzgyNTk5IH0sCisJe1BDSV9WREVWSUNFKElOVEVMLCBJWEdCRV9ERVZfSURfWDU0MFQpLAorCSBib2FyZF9YNTQwIH0sCiAKIAkvKiByZXF1aXJlZCBsYXN0IGVudHJ5ICovCiAJezAsIH0KQEAgLTU2MCw2ICs1NjcsNyBAQAogCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0lWQVIoaW5kZXgpLCBpdmFyKTsKIAkJYnJlYWs7CiAJY2FzZSBpeGdiZV9tYWNfODI1OTlFQjoKKwljYXNlIGl4Z2JlX21hY19YNTQwOgogCQlpZiAoZGlyZWN0aW9uID09IC0xKSB7CiAJCQkvKiBvdGhlciBjYXVzZXMgKi8KIAkJCW1zaXhfdmVjdG9yIHw9IElYR0JFX0lWQVJfQUxMT0NfVkFMOwpAQCAtNTg5LDI5ICs1OTcsMzQgQEAKIHsKIAl1MzIgbWFzazsKIAotCWlmIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQikgeworCXN3aXRjaCAoYWRhcHRlci0+aHcubWFjLnR5cGUpIHsKKwljYXNlIGl4Z2JlX21hY184MjU5OEVCOgogCQltYXNrID0gKElYR0JFX0VJTVNfUlRYX1FVRVVFICYgcW1hc2spOwogCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9FSUNTLCBtYXNrKTsKLQl9IGVsc2UgeworCQlicmVhazsKKwljYXNlIGl4Z2JlX21hY184MjU5OUVCOgorCWNhc2UgaXhnYmVfbWFjX1g1NDA6CiAJCW1hc2sgPSAocW1hc2sgJiAweEZGRkZGRkZGKTsKIAkJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfRUlDU19FWCgwKSwgbWFzayk7CiAJCW1hc2sgPSAocW1hc2sgPj4gMzIpOwogCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9FSUNTX0VYKDEpLCBtYXNrKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CiAJfQogfQogCi12b2lkIGl4Z2JlX3VubWFwX2FuZF9mcmVlX3R4X3Jlc291cmNlKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLAotCQkJCSAgICAgIHN0cnVjdCBpeGdiZV90eF9idWZmZXIKLQkJCQkgICAgICAqdHhfYnVmZmVyX2luZm8pCit2b2lkIGl4Z2JlX3VubWFwX2FuZF9mcmVlX3R4X3Jlc291cmNlKHN0cnVjdCBpeGdiZV9yaW5nICp0eF9yaW5nLAorCQkJCSAgICAgIHN0cnVjdCBpeGdiZV90eF9idWZmZXIgKnR4X2J1ZmZlcl9pbmZvKQogewogCWlmICh0eF9idWZmZXJfaW5mby0+ZG1hKSB7CiAJCWlmICh0eF9idWZmZXJfaW5mby0+bWFwcGVkX2FzX3BhZ2UpCi0JCQlkbWFfdW5tYXBfcGFnZSgmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJZG1hX3VubWFwX3BhZ2UodHhfcmluZy0+ZGV2LAogCQkJCSAgICAgICB0eF9idWZmZXJfaW5mby0+ZG1hLAogCQkJCSAgICAgICB0eF9idWZmZXJfaW5mby0+bGVuZ3RoLAogCQkJCSAgICAgICBETUFfVE9fREVWSUNFKTsKIAkJZWxzZQotCQkJZG1hX3VubWFwX3NpbmdsZSgmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJZG1hX3VubWFwX3NpbmdsZSh0eF9yaW5nLT5kZXYsCiAJCQkJCSB0eF9idWZmZXJfaW5mby0+ZG1hLAogCQkJCQkgdHhfYnVmZmVyX2luZm8tPmxlbmd0aCwKIAkJCQkJIERNQV9UT19ERVZJQ0UpOwpAQCAtNjI2LDkyICs2MzksMTY2IEBACiB9CiAKIC8qKgotICogaXhnYmVfdHhfeG9uX3N0YXRlIC0gY2hlY2sgdGhlIHR4IHJpbmcgeG9uIHN0YXRlCi0gKiBAYWRhcHRlcjogdGhlIGl4Z2JlIGFkYXB0ZXIKLSAqIEB0eF9yaW5nOiB0aGUgY29ycmVzcG9uZGluZyB0eF9yaW5nCisgKiBpeGdiZV9kY2JfdHhxX3RvX3RjIC0gY29udmVydCBhIHJlZyBpbmRleCB0byBhIHRyYWZmaWMgY2xhc3MKKyAqIEBhZGFwdGVyOiBkcml2ZXIgcHJpdmF0ZSBzdHJ1Y3QKKyAqIEBpbmRleDogcmVnIGlkeCBvZiBxdWV1ZSB0byBxdWVyeSAoMC0xMjcpCiAgKgotICogSWYgbm90IGluIERDQiBtb2RlLCBjaGVja3MgVEZDUy5UWE9GRiwgb3RoZXJ3aXNlLCBmaW5kIG91dCB0aGUKLSAqIGNvcnJlc3BvbmRpbmcgVEMgb2YgdGhpcyB0eF9yaW5nIHdoZW4gY2hlY2tpbmcgVEZDUy4KKyAqIEhlbHBlciBmdW5jdGlvbiB0byBkZXRlcm1pbmUgdGhlIHRyYWZmaWMgaW5kZXggZm9yIGEgcGF0aWN1bGFyCisgKiByZWdpc3RlciBpbmRleC4KICAqCi0gKiBSZXR1cm5zIDogdHJ1ZSBpZiBpbiB4b24gc3RhdGUgKGN1cnJlbnRseSBub3QgcGF1c2VkKQorICogUmV0dXJucyA6IGEgdGMgaW5kZXggZm9yIHVzZSBpbiByYW5nZSAwLTcsIG9yIDAtMwogICovCi1zdGF0aWMgaW5saW5lIGJvb2wgaXhnYmVfdHhfeG9uX3N0YXRlKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLAotCQkJCSAgICAgIHN0cnVjdCBpeGdiZV9yaW5nICp0eF9yaW5nKQordTggaXhnYmVfZGNiX3R4cV90b190YyhzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciwgdTggcmVnX2lkeCkKIHsKLQl1MzIgdHhvZmYgPSBJWEdCRV9URkNTX1RYT0ZGOworCWludCB0YyA9IC0xOworCWludCBkY2JfaSA9IGFkYXB0ZXItPnJpbmdfZmVhdHVyZVtSSU5HX0ZfRENCXS5pbmRpY2VzOwogCi0jaWZkZWYgQ09ORklHX0lYR0JFX0RDQgotCWlmIChhZGFwdGVyLT5kY2JfY2ZnLnBmY19tb2RlX2VuYWJsZSkgewotCQlpbnQgdGM7Ci0JCWludCByZWdfaWR4ID0gdHhfcmluZy0+cmVnX2lkeDsKLQkJaW50IGRjYl9pID0gYWRhcHRlci0+cmluZ19mZWF0dXJlW1JJTkdfRl9EQ0JdLmluZGljZXM7CisJLyogaWYgRENCIGlzIG5vdCBlbmFibGVkIHRoZSBxdWV1ZXMgaGF2ZSBubyBUQyAqLworCWlmICghKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19EQ0JfRU5BQkxFRCkpCisJCXJldHVybiB0YzsKIAotCQlzd2l0Y2ggKGFkYXB0ZXItPmh3Lm1hYy50eXBlKSB7Ci0JCWNhc2UgaXhnYmVfbWFjXzgyNTk4RUI6Ci0JCQl0YyA9IHJlZ19pZHggPj4gMjsKLQkJCXR4b2ZmID0gSVhHQkVfVEZDU19UWE9GRjA7CisJLyogY2hlY2sgdmFsaWQgcmFuZ2UgKi8KKwlpZiAocmVnX2lkeCA+PSBhZGFwdGVyLT5ody5tYWMubWF4X3R4X3F1ZXVlcykKKwkJcmV0dXJuIHRjOworCisJc3dpdGNoIChhZGFwdGVyLT5ody5tYWMudHlwZSkgeworCWNhc2UgaXhnYmVfbWFjXzgyNTk4RUI6CisJCXRjID0gcmVnX2lkeCA+PiAyOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlpZiAoZGNiX2kgIT0gNCAmJiBkY2JfaSAhPSA4KQogCQkJYnJlYWs7Ci0JCWNhc2UgaXhnYmVfbWFjXzgyNTk5RUI6Ci0JCQl0YyA9IDA7Ci0JCQl0eG9mZiA9IElYR0JFX1RGQ1NfVFhPRkY7Ci0JCQlpZiAoZGNiX2kgPT0gOCkgewotCQkJCS8qIFRDMCwgVEMxICovCi0JCQkJdGMgPSByZWdfaWR4ID4+IDU7Ci0JCQkJaWYgKHRjID09IDIpIC8qIFRDMiwgVEMzICovCi0JCQkJCXRjICs9IChyZWdfaWR4IC0gNjQpID4+IDQ7Ci0JCQkJZWxzZSBpZiAodGMgPT0gMykgLyogVEM0LCBUQzUsIFRDNiwgVEM3ICovCi0JCQkJCXRjICs9IDEgKyAoKHJlZ19pZHggLSA5NikgPj4gMyk7Ci0JCQl9IGVsc2UgaWYgKGRjYl9pID09IDQpIHsKLQkJCQkvKiBUQzAsIFRDMSAqLwotCQkJCXRjID0gcmVnX2lkeCA+PiA2OwotCQkJCWlmICh0YyA9PSAxKSB7Ci0JCQkJCXRjICs9IChyZWdfaWR4IC0gNjQpID4+IDU7Ci0JCQkJCWlmICh0YyA9PSAyKSAvKiBUQzIsIFRDMyAqLwotCQkJCQkJdGMgKz0gKHJlZ19pZHggLSA5NikgPj4gNDsKLQkJCQl9Ci0JCQl9CisKKwkJLyogaWYgVk1EcSBpcyBlbmFibGVkIHRoZSBsb3dlc3Qgb3JkZXIgYml0cyBkZXRlcm1pbmUgVEMgKi8KKwkJaWYgKGFkYXB0ZXItPmZsYWdzICYgKElYR0JFX0ZMQUdfU1JJT1ZfRU5BQkxFRCB8CisJCQkJICAgICAgSVhHQkVfRkxBR19WTURRX0VOQUJMRUQpKSB7CisJCQl0YyA9IHJlZ19pZHggJiAoZGNiX2kgLSAxKTsKIAkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJdGMgPSAwOwogCQl9Ci0JCXR4b2ZmIDw8PSB0YzsKKworCQkvKgorCQkgKiBDb252ZXJ0IHRoZSByZWdfaWR4IGludG8gdGhlIGNvcnJlY3QgVEMuIFRoaXMgYml0bWFzaworCQkgKiB0YXJnZXRzIHRoZSBsYXN0IGZ1bGwgMzIgcmluZyB0cmFmZmljIGNsYXNzIGFuZCBhc3NpZ25zCisJCSAqIGl0IGEgdmFsdWUgb2YgMS4gRnJvbSB0aGVyZSB0aGUgcmVzdCBvZiB0aGUgcmluZ3MgYXJlCisJCSAqIGJhc2VkIG9uIHNoaWZ0aW5nIHRoZSBtYXNrIGZ1cnRoZXIgdXAgdG8gaW5jbHVkZSB0aGUKKwkJICogcmVnX2lkeCAvIDE2IGFuZCB0aGVuIHJlZ19pZHggLyA4LiBJdCBhc3N1bWVzIGRjQl9pCisJCSAqIHdpbGwgb25seSBldmVyIGJlIDggb3IgNCBhbmQgdGhhdCByZWdfaWR4IHdpbGwgbmV2ZXIKKwkJICogYmUgZ3JlYXRlciB0aGVuIDEyOC4gVGhlIGNvZGUgd2l0aG91dCB0aGUgcG93ZXIgb2YgMgorCQkgKiBvcHRpbWl6YXRpb25zIHdvdWxkIGJlOgorCQkgKiAoKChyZWdfaWR4ICUgMzIpICsgMzIpICogZGNiX2kpID4+ICg5IC0gcmVnX2lkeCAvIDMyKQorCQkgKi8KKwkJdGMgPSAoKHJlZ19pZHggJiAwWDFGKSArIDB4MjApICogZGNiX2k7CisJCXRjID4+PSA5IC0gKHJlZ19pZHggPj4gNSk7CiAJfQotI2VuZGlmCi0JcmV0dXJuIElYR0JFX1JFQURfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfVEZDUykgJiB0eG9mZjsKKworCXJldHVybiB0YzsKIH0KIAotc3RhdGljIGlubGluZSBib29sIGl4Z2JlX2NoZWNrX3R4X2hhbmcoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCQkJICAgICAgIHN0cnVjdCBpeGdiZV9yaW5nICp0eF9yaW5nLAotCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgZW9wKQorc3RhdGljIHZvaWQgaXhnYmVfdXBkYXRlX3hvZmZfcmVjZWl2ZWQoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwlzdHJ1Y3QgaXhnYmVfaHdfc3RhdHMgKmh3c3RhdHMgPSAmYWRhcHRlci0+c3RhdHM7CisJdTMyIGRhdGEgPSAwOworCXUzMiB4b2ZmWzhdID0gezB9OworCWludCBpOwogCi0JLyogRGV0ZWN0IGEgdHJhbnNtaXQgaGFuZyBpbiBoYXJkd2FyZSwgdGhpcyBzZXJpYWxpemVzIHRoZQotCSAqIGNoZWNrIHdpdGggdGhlIGNsZWFyaW5nIG9mIHRpbWVfc3RhbXAgYW5kIG1vdmVtZW50IG9mIGVvcCAqLwotCWFkYXB0ZXItPmRldGVjdF90eF9odW5nID0gZmFsc2U7Ci0JaWYgKHR4X3JpbmctPnR4X2J1ZmZlcl9pbmZvW2VvcF0udGltZV9zdGFtcCAmJgotCSAgICB0aW1lX2FmdGVyKGppZmZpZXMsIHR4X3JpbmctPnR4X2J1ZmZlcl9pbmZvW2VvcF0udGltZV9zdGFtcCArIEhaKSAmJgotCSAgICBpeGdiZV90eF94b25fc3RhdGUoYWRhcHRlciwgdHhfcmluZykpIHsKLQkJLyogZGV0ZWN0ZWQgVHggdW5pdCBoYW5nICovCi0JCXVuaW9uIGl4Z2JlX2Fkdl90eF9kZXNjICp0eF9kZXNjOwotCQl0eF9kZXNjID0gSVhHQkVfVFhfREVTQ19BRFYodHhfcmluZywgZW9wKTsKLQkJZV9lcnIoZHJ2LCAiRGV0ZWN0ZWQgVHggVW5pdCBIYW5nXG4iCi0JCSAgICAgICIgIFR4IFF1ZXVlICAgICAgICAgICAgIDwlZD5cbiIKLQkJICAgICAgIiAgVERILCBURFQgICAgICAgICAgICAgPCV4PiwgPCV4PlxuIgotCQkgICAgICAiICBuZXh0X3RvX3VzZSAgICAgICAgICA8JXg+XG4iCi0JCSAgICAgICIgIG5leHRfdG9fY2xlYW4gICAgICAgIDwleD5cbiIKLQkJICAgICAgInR4X2J1ZmZlcl9pbmZvW25leHRfdG9fY2xlYW5dXG4iCi0JCSAgICAgICIgIHRpbWVfc3RhbXAgICAgICAgICAgIDwlbHg+XG4iCi0JCSAgICAgICIgIGppZmZpZXMgICAgICAgICAgICAgIDwlbHg+XG4iLAotCQkgICAgICB0eF9yaW5nLT5xdWV1ZV9pbmRleCwKLQkJICAgICAgSVhHQkVfUkVBRF9SRUcoaHcsIHR4X3JpbmctPmhlYWQpLAotCQkgICAgICBJWEdCRV9SRUFEX1JFRyhodywgdHhfcmluZy0+dGFpbCksCi0JCSAgICAgIHR4X3JpbmctPm5leHRfdG9fdXNlLCBlb3AsCi0JCSAgICAgIHR4X3JpbmctPnR4X2J1ZmZlcl9pbmZvW2VvcF0udGltZV9zdGFtcCwgamlmZmllcyk7Ci0JCXJldHVybiB0cnVlOworCWlmICgoaHctPmZjLmN1cnJlbnRfbW9kZSA9PSBpeGdiZV9mY19mdWxsKSB8fAorCSAgICAoaHctPmZjLmN1cnJlbnRfbW9kZSA9PSBpeGdiZV9mY19yeF9wYXVzZSkpIHsKKwkJc3dpdGNoIChody0+bWFjLnR5cGUpIHsKKwkJY2FzZSBpeGdiZV9tYWNfODI1OThFQjoKKwkJCWRhdGEgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTFhPRkZSWEMpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlkYXRhID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0xYT0ZGUlhDTlQpOworCQl9CisJCWh3c3RhdHMtPmx4b2ZmcnhjICs9IGRhdGE7CisKKwkJLyogcmVmaWxsIGNyZWRpdHMgKG5vIHR4IGhhbmcpIGlmIHdlIHJlY2VpdmVkIHhvZmYgKi8KKwkJaWYgKCFkYXRhKQorCQkJcmV0dXJuOworCisJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspCisJCQljbGVhcl9iaXQoX19JWEdCRV9IQU5HX0NIRUNLX0FSTUVELAorCQkJCSAgJmFkYXB0ZXItPnR4X3JpbmdbaV0tPnN0YXRlKTsKKwkJcmV0dXJuOworCX0gZWxzZSBpZiAoIShhZGFwdGVyLT5kY2JfY2ZnLnBmY19tb2RlX2VuYWJsZSkpCisJCXJldHVybjsKKworCS8qIHVwZGF0ZSBzdGF0cyBmb3IgZWFjaCB0Yywgb25seSB2YWxpZCB3aXRoIFBGQyBlbmFibGVkICovCisJZm9yIChpID0gMDsgaSA8IE1BWF9UWF9QQUNLRVRfQlVGRkVSUzsgaSsrKSB7CisJCXN3aXRjaCAoaHctPm1hYy50eXBlKSB7CisJCWNhc2UgaXhnYmVfbWFjXzgyNTk4RUI6CisJCQl4b2ZmW2ldID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1BYT0ZGUlhDKGkpKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJeG9mZltpXSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9QWE9GRlJYQ05UKGkpKTsKKwkJfQorCQlod3N0YXRzLT5weG9mZnJ4Y1tpXSArPSB4b2ZmW2ldOwogCX0KIAotCXJldHVybiBmYWxzZTsKKwkvKiBkaXNhcm0gdHggcXVldWVzIHRoYXQgaGF2ZSByZWNlaXZlZCB4b2ZmIGZyYW1lcyAqLworCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspIHsKKwkJc3RydWN0IGl4Z2JlX3JpbmcgKnR4X3JpbmcgPSBhZGFwdGVyLT50eF9yaW5nW2ldOworCQl1MzIgdGMgPSBpeGdiZV9kY2JfdHhxX3RvX3RjKGFkYXB0ZXIsIHR4X3JpbmctPnJlZ19pZHgpOworCisJCWlmICh4b2ZmW3RjXSkKKwkJCWNsZWFyX2JpdChfX0lYR0JFX0hBTkdfQ0hFQ0tfQVJNRUQsICZ0eF9yaW5nLT5zdGF0ZSk7CisJfQorfQorCitzdGF0aWMgdTY0IGl4Z2JlX2dldF90eF9jb21wbGV0ZWQoc3RydWN0IGl4Z2JlX3JpbmcgKnJpbmcpCit7CisJcmV0dXJuIHJpbmctPnR4X3N0YXRzLmNvbXBsZXRlZDsKK30KKworc3RhdGljIHU2NCBpeGdiZV9nZXRfdHhfcGVuZGluZyhzdHJ1Y3QgaXhnYmVfcmluZyAqcmluZykKK3sKKwlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KHJpbmctPm5ldGRldik7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKworCXUzMiBoZWFkID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1RESChyaW5nLT5yZWdfaWR4KSk7CisJdTMyIHRhaWwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVERUKHJpbmctPnJlZ19pZHgpKTsKKworCWlmIChoZWFkICE9IHRhaWwpCisJCXJldHVybiAoaGVhZCA8IHRhaWwpID8KKwkJCXRhaWwgLSBoZWFkIDogKHRhaWwgKyByaW5nLT5jb3VudCAtIGhlYWQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpeGdiZV9jaGVja190eF9oYW5nKHN0cnVjdCBpeGdiZV9yaW5nICp0eF9yaW5nKQoreworCXUzMiB0eF9kb25lID0gaXhnYmVfZ2V0X3R4X2NvbXBsZXRlZCh0eF9yaW5nKTsKKwl1MzIgdHhfZG9uZV9vbGQgPSB0eF9yaW5nLT50eF9zdGF0cy50eF9kb25lX29sZDsKKwl1MzIgdHhfcGVuZGluZyA9IGl4Z2JlX2dldF90eF9wZW5kaW5nKHR4X3JpbmcpOworCWJvb2wgcmV0ID0gZmFsc2U7CisKKwljbGVhcl9jaGVja19mb3JfdHhfaGFuZyh0eF9yaW5nKTsKKworCS8qCisJICogQ2hlY2sgZm9yIGEgaHVuZyBxdWV1ZSwgYnV0IGJlIHRob3JvdWdoLiBUaGlzIHZlcmlmaWVzCisJICogdGhhdCBhIHRyYW5zbWl0IGhhcyBiZWVuIGNvbXBsZXRlZCBzaW5jZSB0aGUgcHJldmlvdXMKKwkgKiBjaGVjayBBTkQgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIHBhY2tldCBwZW5kaW5nLiBUaGUKKwkgKiBBUk1FRCBiaXQgaXMgc2V0IHRvIGluZGljYXRlIGEgcG90ZW50aWFsIGhhbmcuIFRoZQorCSAqIGJpdCBpcyBjbGVhcmVkIGlmIGEgcGF1c2UgZnJhbWUgaXMgcmVjZWl2ZWQgdG8gcmVtb3ZlCisJICogZmFsc2UgaGFuZyBkZXRlY3Rpb24gZHVlIHRvIFBGQyBvciA4MDIuM3ggZnJhbWVzLiBCeQorCSAqIHJlcXVpcmluZyB0aGlzIHRvIGZhaWwgdHdpY2Ugd2UgYXZvaWQgcmFjZXMgd2l0aAorCSAqIHBmYyBjbGVhcmluZyB0aGUgQVJNRUQgYml0IGFuZCBjb25kaXRpb25zIHdoZXJlIHdlCisJICogcnVuIHRoZSBjaGVja190eF9oYW5nIGxvZ2ljIHdpdGggYSB0cmFuc21pdCBjb21wbGV0aW9uCisJICogcGVuZGluZyBidXQgd2l0aG91dCB0aW1lIHRvIGNvbXBsZXRlIGl0IHlldC4KKwkgKi8KKwlpZiAoKHR4X2RvbmVfb2xkID09IHR4X2RvbmUpICYmIHR4X3BlbmRpbmcpIHsKKwkJLyogbWFrZSBzdXJlIGl0IGlzIHRydWUgZm9yIHR3byBjaGVja3MgaW4gYSByb3cgKi8KKwkJcmV0ID0gdGVzdF9hbmRfc2V0X2JpdChfX0lYR0JFX0hBTkdfQ0hFQ0tfQVJNRUQsCisJCQkJICAgICAgICZ0eF9yaW5nLT5zdGF0ZSk7CisJfSBlbHNlIHsKKwkJLyogdXBkYXRlIGNvbXBsZXRlZCBzdGF0cyBhbmQgY29udGludWUgKi8KKwkJdHhfcmluZy0+dHhfc3RhdHMudHhfZG9uZV9vbGQgPSB0eF9kb25lOworCQkvKiByZXNldCB0aGUgY291bnRkb3duICovCisJCWNsZWFyX2JpdChfX0lYR0JFX0hBTkdfQ0hFQ0tfQVJNRUQsICZ0eF9yaW5nLT5zdGF0ZSk7CisJfQorCisJcmV0dXJuIHJldDsKIH0KIAogI2RlZmluZSBJWEdCRV9NQVhfVFhEX1BXUiAgICAgICAxNApAQCAtNzM0LDExICs4MjEsMTAgQEAKIAkJCSAgICAgICBzdHJ1Y3QgaXhnYmVfcmluZyAqdHhfcmluZykKIHsKIAlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IHFfdmVjdG9yLT5hZGFwdGVyOwotCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CiAJdW5pb24gaXhnYmVfYWR2X3R4X2Rlc2MgKnR4X2Rlc2MsICplb3BfZGVzYzsKIAlzdHJ1Y3QgaXhnYmVfdHhfYnVmZmVyICp0eF9idWZmZXJfaW5mbzsKLQl1bnNpZ25lZCBpbnQgaSwgZW9wLCBjb3VudCA9IDA7CiAJdW5zaWduZWQgaW50IHRvdGFsX2J5dGVzID0gMCwgdG90YWxfcGFja2V0cyA9IDA7CisJdTE2IGksIGVvcCwgY291bnQgPSAwOwogCiAJaSA9IHR4X3JpbmctPm5leHRfdG9fY2xlYW47CiAJZW9wID0gdHhfcmluZy0+dHhfYnVmZmVyX2luZm9baV0ubmV4dF90b193YXRjaDsKQEAgLTc0OSwxNDggKzgzNSwxODIgQEAKIAkJYm9vbCBjbGVhbmVkID0gZmFsc2U7CiAJCXJtYigpOyAvKiByZWFkIGJ1ZmZlcl9pbmZvIGFmdGVyIGVvcF9kZXNjICovCiAJCWZvciAoIDsgIWNsZWFuZWQ7IGNvdW50KyspIHsKLQkJCXN0cnVjdCBza19idWZmICpza2I7CiAJCQl0eF9kZXNjID0gSVhHQkVfVFhfREVTQ19BRFYodHhfcmluZywgaSk7CiAJCQl0eF9idWZmZXJfaW5mbyA9ICZ0eF9yaW5nLT50eF9idWZmZXJfaW5mb1tpXTsKLQkJCWNsZWFuZWQgPSAoaSA9PSBlb3ApOwotCQkJc2tiID0gdHhfYnVmZmVyX2luZm8tPnNrYjsKLQotCQkJaWYgKGNsZWFuZWQgJiYgc2tiKSB7Ci0JCQkJdW5zaWduZWQgaW50IHNlZ3MsIGJ5dGVjb3VudDsKLQkJCQl1bnNpZ25lZCBpbnQgaGxlbiA9IHNrYl9oZWFkbGVuKHNrYik7Ci0KLQkJCQkvKiBnc29fc2VncyBpcyBjdXJyZW50bHkgb25seSB2YWxpZCBmb3IgdGNwICovCi0JCQkJc2VncyA9IHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NlZ3MgPzogMTsKLSNpZmRlZiBJWEdCRV9GQ09FCi0JCQkJLyogYWRqdXN0IGZvciBGQ29FIFNlcXVlbmNlIE9mZmxvYWQgKi8KLQkJCQlpZiAoKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19GQ09FX0VOQUJMRUQpCi0JCQkJICAgICYmIHNrYl9pc19nc28oc2tiKQotCQkJCSAgICAmJiB2bGFuX2dldF9wcm90b2NvbChza2IpID09Ci0JCQkJICAgIGh0b25zKEVUSF9QX0ZDT0UpKSB7Ci0JCQkJCWhsZW4gPSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpICsKLQkJCQkJCXNpemVvZihzdHJ1Y3QgZmNfZnJhbWVfaGVhZGVyKSArCi0JCQkJCQlzaXplb2Yoc3RydWN0IGZjb2VfY3JjX2VvZik7Ci0JCQkJCXNlZ3MgPSBESVZfUk9VTkRfVVAoc2tiLT5sZW4gLSBobGVuLAotCQkJCQkJc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZSk7Ci0JCQkJfQotI2VuZGlmIC8qIElYR0JFX0ZDT0UgKi8KLQkJCQkvKiBtdWx0aXBseSBkYXRhIGNodW5rcyBieSBzaXplIG9mIGhlYWRlcnMgKi8KLQkJCQlieXRlY291bnQgPSAoKHNlZ3MgLSAxKSAqIGhsZW4pICsgc2tiLT5sZW47Ci0JCQkJdG90YWxfcGFja2V0cyArPSBzZWdzOwotCQkJCXRvdGFsX2J5dGVzICs9IGJ5dGVjb3VudDsKLQkJCX0KLQotCQkJaXhnYmVfdW5tYXBfYW5kX2ZyZWVfdHhfcmVzb3VyY2UoYWRhcHRlciwKLQkJCQkJCQkgdHhfYnVmZmVyX2luZm8pOwogCiAJCQl0eF9kZXNjLT53Yi5zdGF0dXMgPSAwOworCQkJY2xlYW5lZCA9IChpID09IGVvcCk7CiAKIAkJCWkrKzsKIAkJCWlmIChpID09IHR4X3JpbmctPmNvdW50KQogCQkJCWkgPSAwOworCisJCQlpZiAoY2xlYW5lZCAmJiB0eF9idWZmZXJfaW5mby0+c2tiKSB7CisJCQkJdG90YWxfYnl0ZXMgKz0gdHhfYnVmZmVyX2luZm8tPmJ5dGVjb3VudDsKKwkJCQl0b3RhbF9wYWNrZXRzICs9IHR4X2J1ZmZlcl9pbmZvLT5nc29fc2VnczsKKwkJCX0KKworCQkJaXhnYmVfdW5tYXBfYW5kX2ZyZWVfdHhfcmVzb3VyY2UodHhfcmluZywKKwkJCQkJCQkgdHhfYnVmZmVyX2luZm8pOwogCQl9CiAKKwkJdHhfcmluZy0+dHhfc3RhdHMuY29tcGxldGVkKys7CiAJCWVvcCA9IHR4X3JpbmctPnR4X2J1ZmZlcl9pbmZvW2ldLm5leHRfdG9fd2F0Y2g7CiAJCWVvcF9kZXNjID0gSVhHQkVfVFhfREVTQ19BRFYodHhfcmluZywgZW9wKTsKIAl9CiAKIAl0eF9yaW5nLT5uZXh0X3RvX2NsZWFuID0gaTsKLQotI2RlZmluZSBUWF9XQUtFX1RIUkVTSE9MRCAoREVTQ19ORUVERUQgKiAyKQotCWlmICh1bmxpa2VseShjb3VudCAmJiBuZXRpZl9jYXJyaWVyX29rKG5ldGRldikgJiYKLQkJICAgICAoSVhHQkVfREVTQ19VTlVTRUQodHhfcmluZykgPj0gVFhfV0FLRV9USFJFU0hPTEQpKSkgewotCQkvKiBNYWtlIHN1cmUgdGhhdCBhbnlib2R5IHN0b3BwaW5nIHRoZSBxdWV1ZSBhZnRlciB0aGlzCi0JCSAqIHNlZXMgdGhlIG5ldyBuZXh0X3RvX2NsZWFuLgotCQkgKi8KLQkJc21wX21iKCk7Ci0JCWlmIChfX25ldGlmX3N1YnF1ZXVlX3N0b3BwZWQobmV0ZGV2LCB0eF9yaW5nLT5xdWV1ZV9pbmRleCkgJiYKLQkJICAgICF0ZXN0X2JpdChfX0lYR0JFX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpIHsKLQkJCW5ldGlmX3dha2Vfc3VicXVldWUobmV0ZGV2LCB0eF9yaW5nLT5xdWV1ZV9pbmRleCk7Ci0JCQkrK3R4X3JpbmctPnJlc3RhcnRfcXVldWU7Ci0JCX0KLQl9Ci0KLQlpZiAoYWRhcHRlci0+ZGV0ZWN0X3R4X2h1bmcpIHsKLQkJaWYgKGl4Z2JlX2NoZWNrX3R4X2hhbmcoYWRhcHRlciwgdHhfcmluZywgaSkpIHsKLQkJCS8qIHNjaGVkdWxlIGltbWVkaWF0ZSByZXNldCBpZiB3ZSBiZWxpZXZlIHdlIGh1bmcgKi8KLQkJCWVfaW5mbyhwcm9iZSwgInR4IGhhbmcgJWQgZGV0ZWN0ZWQsIHJlc2V0dGluZyAiCi0JCQkgICAgICAgImFkYXB0ZXJcbiIsIGFkYXB0ZXItPnR4X3RpbWVvdXRfY291bnQgKyAxKTsKLQkJCWl4Z2JlX3R4X3RpbWVvdXQoYWRhcHRlci0+bmV0ZGV2KTsKLQkJfQotCX0KLQotCS8qIHJlLWFybSB0aGUgaW50ZXJydXB0ICovCi0JaWYgKGNvdW50ID49IHR4X3JpbmctPndvcmtfbGltaXQpCi0JCWl4Z2JlX2lycV9yZWFybV9xdWV1ZXMoYWRhcHRlciwgKCh1NjQpMSA8PCBxX3ZlY3Rvci0+dl9pZHgpKTsKLQogCXR4X3JpbmctPnRvdGFsX2J5dGVzICs9IHRvdGFsX2J5dGVzOwogCXR4X3JpbmctPnRvdGFsX3BhY2tldHMgKz0gdG90YWxfcGFja2V0czsKIAl1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKCZ0eF9yaW5nLT5zeW5jcCk7CiAJdHhfcmluZy0+c3RhdHMucGFja2V0cyArPSB0b3RhbF9wYWNrZXRzOwogCXR4X3JpbmctPnN0YXRzLmJ5dGVzICs9IHRvdGFsX2J5dGVzOwogCXU2NF9zdGF0c191cGRhdGVfZW5kKCZ0eF9yaW5nLT5zeW5jcCk7CisKKwlpZiAoY2hlY2tfZm9yX3R4X2hhbmcodHhfcmluZykgJiYgaXhnYmVfY2hlY2tfdHhfaGFuZyh0eF9yaW5nKSkgeworCQkvKiBzY2hlZHVsZSBpbW1lZGlhdGUgcmVzZXQgaWYgd2UgYmVsaWV2ZSB3ZSBodW5nICovCisJCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJCXR4X2Rlc2MgPSBJWEdCRV9UWF9ERVNDX0FEVih0eF9yaW5nLCBlb3ApOworCQllX2VycihkcnYsICJEZXRlY3RlZCBUeCBVbml0IEhhbmdcbiIKKwkJCSIgIFR4IFF1ZXVlICAgICAgICAgICAgIDwlZD5cbiIKKwkJCSIgIFRESCwgVERUICAgICAgICAgICAgIDwleD4sIDwleD5cbiIKKwkJCSIgIG5leHRfdG9fdXNlICAgICAgICAgIDwleD5cbiIKKwkJCSIgIG5leHRfdG9fY2xlYW4gICAgICAgIDwleD5cbiIKKwkJCSJ0eF9idWZmZXJfaW5mb1tuZXh0X3RvX2NsZWFuXVxuIgorCQkJIiAgdGltZV9zdGFtcCAgICAgICAgICAgPCVseD5cbiIKKwkJCSIgIGppZmZpZXMgICAgICAgICAgICAgIDwlbHg+XG4iLAorCQkJdHhfcmluZy0+cXVldWVfaW5kZXgsCisJCQlJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVERIKHR4X3JpbmctPnJlZ19pZHgpKSwKKwkJCUlYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9URFQodHhfcmluZy0+cmVnX2lkeCkpLAorCQkJdHhfcmluZy0+bmV4dF90b191c2UsIGVvcCwKKwkJCXR4X3JpbmctPnR4X2J1ZmZlcl9pbmZvW2VvcF0udGltZV9zdGFtcCwgamlmZmllcyk7CisKKwkJbmV0aWZfc3RvcF9zdWJxdWV1ZSh0eF9yaW5nLT5uZXRkZXYsIHR4X3JpbmctPnF1ZXVlX2luZGV4KTsKKworCQllX2luZm8ocHJvYmUsCisJCSAgICAgICAidHggaGFuZyAlZCBkZXRlY3RlZCBvbiBxdWV1ZSAlZCwgcmVzZXR0aW5nIGFkYXB0ZXJcbiIsCisJCQlhZGFwdGVyLT50eF90aW1lb3V0X2NvdW50ICsgMSwgdHhfcmluZy0+cXVldWVfaW5kZXgpOworCisJCS8qIHNjaGVkdWxlIGltbWVkaWF0ZSByZXNldCBpZiB3ZSBiZWxpZXZlIHdlIGh1bmcgKi8KKwkJaXhnYmVfdHhfdGltZW91dChhZGFwdGVyLT5uZXRkZXYpOworCisJCS8qIHRoZSBhZGFwdGVyIGlzIGFib3V0IHRvIHJlc2V0LCBubyBwb2ludCBpbiBlbmFibGluZyBzdHVmZiAqLworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKyNkZWZpbmUgVFhfV0FLRV9USFJFU0hPTEQgKERFU0NfTkVFREVEICogMikKKwlpZiAodW5saWtlbHkoY291bnQgJiYgbmV0aWZfY2Fycmllcl9vayh0eF9yaW5nLT5uZXRkZXYpICYmCisJCSAgICAgKElYR0JFX0RFU0NfVU5VU0VEKHR4X3JpbmcpID49IFRYX1dBS0VfVEhSRVNIT0xEKSkpIHsKKwkJLyogTWFrZSBzdXJlIHRoYXQgYW55Ym9keSBzdG9wcGluZyB0aGUgcXVldWUgYWZ0ZXIgdGhpcworCQkgKiBzZWVzIHRoZSBuZXcgbmV4dF90b19jbGVhbi4KKwkJICovCisJCXNtcF9tYigpOworCQlpZiAoX19uZXRpZl9zdWJxdWV1ZV9zdG9wcGVkKHR4X3JpbmctPm5ldGRldiwgdHhfcmluZy0+cXVldWVfaW5kZXgpICYmCisJCSAgICAhdGVzdF9iaXQoX19JWEdCRV9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKSB7CisJCQluZXRpZl93YWtlX3N1YnF1ZXVlKHR4X3JpbmctPm5ldGRldiwgdHhfcmluZy0+cXVldWVfaW5kZXgpOworCQkJKyt0eF9yaW5nLT50eF9zdGF0cy5yZXN0YXJ0X3F1ZXVlOworCQl9CisJfQorCiAJcmV0dXJuIGNvdW50IDwgdHhfcmluZy0+d29ya19saW1pdDsKIH0KIAogI2lmZGVmIENPTkZJR19JWEdCRV9EQ0EKIHN0YXRpYyB2b2lkIGl4Z2JlX3VwZGF0ZV9yeF9kY2Eoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCQkJc3RydWN0IGl4Z2JlX3JpbmcgKnJ4X3JpbmcpCisJCQkJc3RydWN0IGl4Z2JlX3JpbmcgKnJ4X3JpbmcsCisJCQkJaW50IGNwdSkKIHsKKwlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCXUzMiByeGN0cmw7Ci0JaW50IGNwdSA9IGdldF9jcHUoKTsKLQlpbnQgcSA9IHJ4X3JpbmctPnJlZ19pZHg7CisJdTggcmVnX2lkeCA9IHJ4X3JpbmctPnJlZ19pZHg7CiAKLQlpZiAocnhfcmluZy0+Y3B1ICE9IGNwdSkgewotCQlyeGN0cmwgPSBJWEdCRV9SRUFEX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0RDQV9SWENUUkwocSkpOwotCQlpZiAoYWRhcHRlci0+aHcubWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk4RUIpIHsKLQkJCXJ4Y3RybCAmPSB+SVhHQkVfRENBX1JYQ1RSTF9DUFVJRF9NQVNLOwotCQkJcnhjdHJsIHw9IGRjYTNfZ2V0X3RhZygmYWRhcHRlci0+cGRldi0+ZGV2LCBjcHUpOwotCQl9IGVsc2UgaWYgKGFkYXB0ZXItPmh3Lm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKSB7Ci0JCQlyeGN0cmwgJj0gfklYR0JFX0RDQV9SWENUUkxfQ1BVSURfTUFTS184MjU5OTsKLQkJCXJ4Y3RybCB8PSAoZGNhM19nZXRfdGFnKCZhZGFwdGVyLT5wZGV2LT5kZXYsIGNwdSkgPDwKLQkJCQkgICBJWEdCRV9EQ0FfUlhDVFJMX0NQVUlEX1NISUZUXzgyNTk5KTsKLQkJfQotCQlyeGN0cmwgfD0gSVhHQkVfRENBX1JYQ1RSTF9ERVNDX0RDQV9FTjsKLQkJcnhjdHJsIHw9IElYR0JFX0RDQV9SWENUUkxfSEVBRF9EQ0FfRU47Ci0JCXJ4Y3RybCAmPSB+KElYR0JFX0RDQV9SWENUUkxfREVTQ19SUk9fRU4pOwotCQlyeGN0cmwgJj0gfihJWEdCRV9EQ0FfUlhDVFJMX0RFU0NfV1JPX0VOIHwKLQkJCSAgICBJWEdCRV9EQ0FfUlhDVFJMX0RFU0NfSFNST19FTik7Ci0JCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0RDQV9SWENUUkwocSksIHJ4Y3RybCk7Ci0JCXJ4X3JpbmctPmNwdSA9IGNwdTsKKwlyeGN0cmwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfRENBX1JYQ1RSTChyZWdfaWR4KSk7CisJc3dpdGNoIChody0+bWFjLnR5cGUpIHsKKwljYXNlIGl4Z2JlX21hY184MjU5OEVCOgorCQlyeGN0cmwgJj0gfklYR0JFX0RDQV9SWENUUkxfQ1BVSURfTUFTSzsKKwkJcnhjdHJsIHw9IGRjYTNfZ2V0X3RhZygmYWRhcHRlci0+cGRldi0+ZGV2LCBjcHUpOworCQlicmVhazsKKwljYXNlIGl4Z2JlX21hY184MjU5OUVCOgorCWNhc2UgaXhnYmVfbWFjX1g1NDA6CisJCXJ4Y3RybCAmPSB+SVhHQkVfRENBX1JYQ1RSTF9DUFVJRF9NQVNLXzgyNTk5OworCQlyeGN0cmwgfD0gKGRjYTNfZ2V0X3RhZygmYWRhcHRlci0+cGRldi0+ZGV2LCBjcHUpIDw8CisJCQkgICBJWEdCRV9EQ0FfUlhDVFJMX0NQVUlEX1NISUZUXzgyNTk5KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CiAJfQotCXB1dF9jcHUoKTsKKwlyeGN0cmwgfD0gSVhHQkVfRENBX1JYQ1RSTF9ERVNDX0RDQV9FTjsKKwlyeGN0cmwgfD0gSVhHQkVfRENBX1JYQ1RSTF9IRUFEX0RDQV9FTjsKKwlyeGN0cmwgJj0gfihJWEdCRV9EQ0FfUlhDVFJMX0RFU0NfUlJPX0VOKTsKKwlyeGN0cmwgJj0gfihJWEdCRV9EQ0FfUlhDVFJMX0RFU0NfV1JPX0VOIHwKKwkJICAgIElYR0JFX0RDQV9SWENUUkxfREVTQ19IU1JPX0VOKTsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0RDQV9SWENUUkwocmVnX2lkeCksIHJ4Y3RybCk7CiB9CiAKIHN0YXRpYyB2b2lkIGl4Z2JlX3VwZGF0ZV90eF9kY2Eoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCQkJc3RydWN0IGl4Z2JlX3JpbmcgKnR4X3JpbmcpCisJCQkJc3RydWN0IGl4Z2JlX3JpbmcgKnR4X3JpbmcsCisJCQkJaW50IGNwdSkKIHsKLQl1MzIgdHhjdHJsOwotCWludCBjcHUgPSBnZXRfY3B1KCk7Ci0JaW50IHEgPSB0eF9yaW5nLT5yZWdfaWR4OwogCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdTMyIHR4Y3RybDsKKwl1OCByZWdfaWR4ID0gdHhfcmluZy0+cmVnX2lkeDsKIAotCWlmICh0eF9yaW5nLT5jcHUgIT0gY3B1KSB7Ci0JCWlmIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQikgewotCQkJdHhjdHJsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0RDQV9UWENUUkwocSkpOwotCQkJdHhjdHJsICY9IH5JWEdCRV9EQ0FfVFhDVFJMX0NQVUlEX01BU0s7Ci0JCQl0eGN0cmwgfD0gZGNhM19nZXRfdGFnKCZhZGFwdGVyLT5wZGV2LT5kZXYsIGNwdSk7Ci0JCQl0eGN0cmwgfD0gSVhHQkVfRENBX1RYQ1RSTF9ERVNDX0RDQV9FTjsKLQkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRENBX1RYQ1RSTChxKSwgdHhjdHJsKTsKLQkJfSBlbHNlIGlmIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikgewotCQkJdHhjdHJsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0RDQV9UWENUUkxfODI1OTkocSkpOwotCQkJdHhjdHJsICY9IH5JWEdCRV9EQ0FfVFhDVFJMX0NQVUlEX01BU0tfODI1OTk7Ci0JCQl0eGN0cmwgfD0gKGRjYTNfZ2V0X3RhZygmYWRhcHRlci0+cGRldi0+ZGV2LCBjcHUpIDw8Ci0JCQkJICBJWEdCRV9EQ0FfVFhDVFJMX0NQVUlEX1NISUZUXzgyNTk5KTsKLQkJCXR4Y3RybCB8PSBJWEdCRV9EQ0FfVFhDVFJMX0RFU0NfRENBX0VOOwotCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9EQ0FfVFhDVFJMXzgyNTk5KHEpLCB0eGN0cmwpOwotCQl9Ci0JCXR4X3JpbmctPmNwdSA9IGNwdTsKKwlzd2l0Y2ggKGh3LT5tYWMudHlwZSkgeworCWNhc2UgaXhnYmVfbWFjXzgyNTk4RUI6CisJCXR4Y3RybCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9EQ0FfVFhDVFJMKHJlZ19pZHgpKTsKKwkJdHhjdHJsICY9IH5JWEdCRV9EQ0FfVFhDVFJMX0NQVUlEX01BU0s7CisJCXR4Y3RybCB8PSBkY2EzX2dldF90YWcoJmFkYXB0ZXItPnBkZXYtPmRldiwgY3B1KTsKKwkJdHhjdHJsIHw9IElYR0JFX0RDQV9UWENUUkxfREVTQ19EQ0FfRU47CisJCXR4Y3RybCAmPSB+SVhHQkVfRENBX1RYQ1RSTF9UWF9XQl9ST19FTjsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9EQ0FfVFhDVFJMKHJlZ19pZHgpLCB0eGN0cmwpOworCQlicmVhazsKKwljYXNlIGl4Z2JlX21hY184MjU5OUVCOgorCWNhc2UgaXhnYmVfbWFjX1g1NDA6CisJCXR4Y3RybCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9EQ0FfVFhDVFJMXzgyNTk5KHJlZ19pZHgpKTsKKwkJdHhjdHJsICY9IH5JWEdCRV9EQ0FfVFhDVFJMX0NQVUlEX01BU0tfODI1OTk7CisJCXR4Y3RybCB8PSAoZGNhM19nZXRfdGFnKCZhZGFwdGVyLT5wZGV2LT5kZXYsIGNwdSkgPDwKKwkJCSAgIElYR0JFX0RDQV9UWENUUkxfQ1BVSURfU0hJRlRfODI1OTkpOworCQl0eGN0cmwgfD0gSVhHQkVfRENBX1RYQ1RSTF9ERVNDX0RDQV9FTjsKKwkJdHhjdHJsICY9IH5JWEdCRV9EQ0FfVFhDVFJMX1RYX1dCX1JPX0VOOworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0RDQV9UWENUUkxfODI1OTkocmVnX2lkeCksIHR4Y3RybCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOwogCX0KK30KKworc3RhdGljIHZvaWQgaXhnYmVfdXBkYXRlX2RjYShzdHJ1Y3QgaXhnYmVfcV92ZWN0b3IgKnFfdmVjdG9yKQoreworCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gcV92ZWN0b3ItPmFkYXB0ZXI7CisJaW50IGNwdSA9IGdldF9jcHUoKTsKKwlsb25nIHJfaWR4OworCWludCBpOworCisJaWYgKHFfdmVjdG9yLT5jcHUgPT0gY3B1KQorCQlnb3RvIG91dF9ub191cGRhdGU7CisKKwlyX2lkeCA9IGZpbmRfZmlyc3RfYml0KHFfdmVjdG9yLT50eHJfaWR4LCBhZGFwdGVyLT5udW1fdHhfcXVldWVzKTsKKwlmb3IgKGkgPSAwOyBpIDwgcV92ZWN0b3ItPnR4cl9jb3VudDsgaSsrKSB7CisJCWl4Z2JlX3VwZGF0ZV90eF9kY2EoYWRhcHRlciwgYWRhcHRlci0+dHhfcmluZ1tyX2lkeF0sIGNwdSk7CisJCXJfaWR4ID0gZmluZF9uZXh0X2JpdChxX3ZlY3Rvci0+dHhyX2lkeCwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlcywKKwkJCQkgICAgICByX2lkeCArIDEpOworCX0KKworCXJfaWR4ID0gZmluZF9maXJzdF9iaXQocV92ZWN0b3ItPnJ4cl9pZHgsIGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMpOworCWZvciAoaSA9IDA7IGkgPCBxX3ZlY3Rvci0+cnhyX2NvdW50OyBpKyspIHsKKwkJaXhnYmVfdXBkYXRlX3J4X2RjYShhZGFwdGVyLCBhZGFwdGVyLT5yeF9yaW5nW3JfaWR4XSwgY3B1KTsKKwkJcl9pZHggPSBmaW5kX25leHRfYml0KHFfdmVjdG9yLT5yeHJfaWR4LCBhZGFwdGVyLT5udW1fcnhfcXVldWVzLAorCQkJCSAgICAgIHJfaWR4ICsgMSk7CisJfQorCisJcV92ZWN0b3ItPmNwdSA9IGNwdTsKK291dF9ub191cGRhdGU6CiAJcHV0X2NwdSgpOwogfQogCiBzdGF0aWMgdm9pZCBpeGdiZV9zZXR1cF9kY2Eoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CisJaW50IG51bV9xX3ZlY3RvcnM7CiAJaW50IGk7CiAKIAlpZiAoIShhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRENBX0VOQUJMRUQpKQpAQCAtODk5LDIyICsxMDE5LDI1IEBACiAJLyogYWx3YXlzIHVzZSBDQjIgbW9kZSwgZGlmZmVyZW5jZSBpcyBtYXNrZWQgaW4gdGhlIENCIGRyaXZlciAqLwogCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0RDQV9DVFJMLCAyKTsKIAotCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspIHsKLQkJYWRhcHRlci0+dHhfcmluZ1tpXS0+Y3B1ID0gLTE7Ci0JCWl4Z2JlX3VwZGF0ZV90eF9kY2EoYWRhcHRlciwgYWRhcHRlci0+dHhfcmluZ1tpXSk7Ci0JfQotCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspIHsKLQkJYWRhcHRlci0+cnhfcmluZ1tpXS0+Y3B1ID0gLTE7Ci0JCWl4Z2JlX3VwZGF0ZV9yeF9kY2EoYWRhcHRlciwgYWRhcHRlci0+cnhfcmluZ1tpXSk7CisJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19NU0lYX0VOQUJMRUQpCisJCW51bV9xX3ZlY3RvcnMgPSBhZGFwdGVyLT5udW1fbXNpeF92ZWN0b3JzIC0gTk9OX1FfVkVDVE9SUzsKKwllbHNlCisJCW51bV9xX3ZlY3RvcnMgPSAxOworCisJZm9yIChpID0gMDsgaSA8IG51bV9xX3ZlY3RvcnM7IGkrKykgeworCQlhZGFwdGVyLT5xX3ZlY3RvcltpXS0+Y3B1ID0gLTE7CisJCWl4Z2JlX3VwZGF0ZV9kY2EoYWRhcHRlci0+cV92ZWN0b3JbaV0pOwogCX0KIH0KIAogc3RhdGljIGludCBfX2l4Z2JlX25vdGlmeV9kY2Eoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAl1bnNpZ25lZCBsb25nIGV2ZW50ID0gKih1bnNpZ25lZCBsb25nICopZGF0YTsKIAorCWlmICghKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19EQ0FfRU5BQkxFRCkpCisJCXJldHVybiAwOworCiAJc3dpdGNoIChldmVudCkgewogCWNhc2UgRENBX1BST1ZJREVSX0FERDoKIAkJLyogaWYgd2UncmUgYWxyZWFkeSBlbmFibGVkLCBkb24ndCBkbyBpdCBhZ2FpbiAqLwpAQCAtMTAxMyw4ICsxMTM2LDcgQEAKIAlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgaXhnYmVfcmVsZWFzZV9yeF9kZXNjKHN0cnVjdCBpeGdiZV9odyAqaHcsCi0JCQkJCSBzdHJ1Y3QgaXhnYmVfcmluZyAqcnhfcmluZywgdTMyIHZhbCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBpeGdiZV9yZWxlYXNlX3J4X2Rlc2Moc3RydWN0IGl4Z2JlX3JpbmcgKnJ4X3JpbmcsIHUzMiB2YWwpCiB7CiAJLyoKIAkgKiBGb3JjZSBtZW1vcnkgd3JpdGVzIHRvIGNvbXBsZXRlIGJlZm9yZSBsZXR0aW5nIGgvdwpAQCAtMTAyMyw3MiArMTE0NSw4MSBAQAogCSAqIHN1Y2ggYXMgSUEtNjQpLgogCSAqLwogCXdtYigpOwotCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUkRUKHJ4X3JpbmctPnJlZ19pZHgpLCB2YWwpOworCXdyaXRlbCh2YWwsIHJ4X3JpbmctPnRhaWwpOwogfQogCiAvKioKICAqIGl4Z2JlX2FsbG9jX3J4X2J1ZmZlcnMgLSBSZXBsYWNlIHVzZWQgcmVjZWl2ZSBidWZmZXJzOyBwYWNrZXQgc3BsaXQKLSAqIEBhZGFwdGVyOiBhZGRyZXNzIG9mIGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCisgKiBAcnhfcmluZzogcmluZyB0byBwbGFjZSBidWZmZXJzIG9uCisgKiBAY2xlYW5lZF9jb3VudDogbnVtYmVyIG9mIGJ1ZmZlcnMgdG8gcmVwbGFjZQogICoqLwotdm9pZCBpeGdiZV9hbGxvY19yeF9idWZmZXJzKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLAotCQkJICAgIHN0cnVjdCBpeGdiZV9yaW5nICpyeF9yaW5nLAotCQkJICAgIGludCBjbGVhbmVkX2NvdW50KQordm9pZCBpeGdiZV9hbGxvY19yeF9idWZmZXJzKHN0cnVjdCBpeGdiZV9yaW5nICpyeF9yaW5nLCB1MTYgY2xlYW5lZF9jb3VudCkKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwotCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKIAl1bmlvbiBpeGdiZV9hZHZfcnhfZGVzYyAqcnhfZGVzYzsKIAlzdHJ1Y3QgaXhnYmVfcnhfYnVmZmVyICpiaTsKLQl1bnNpZ25lZCBpbnQgaTsKLQl1bnNpZ25lZCBpbnQgYnVmc3ogPSByeF9yaW5nLT5yeF9idWZfbGVuOworCXN0cnVjdCBza19idWZmICpza2I7CisJdTE2IGkgPSByeF9yaW5nLT5uZXh0X3RvX3VzZTsKIAotCWkgPSByeF9yaW5nLT5uZXh0X3RvX3VzZTsKLQliaSA9ICZyeF9yaW5nLT5yeF9idWZmZXJfaW5mb1tpXTsKKwkvKiBkbyBub3RoaW5nIGlmIG5vIHZhbGlkIG5ldGRldiBkZWZpbmVkICovCisJaWYgKCFyeF9yaW5nLT5uZXRkZXYpCisJCXJldHVybjsKIAogCXdoaWxlIChjbGVhbmVkX2NvdW50LS0pIHsKIAkJcnhfZGVzYyA9IElYR0JFX1JYX0RFU0NfQURWKHJ4X3JpbmcsIGkpOworCQliaSA9ICZyeF9yaW5nLT5yeF9idWZmZXJfaW5mb1tpXTsKKwkJc2tiID0gYmktPnNrYjsKIAotCQlpZiAoIWJpLT5wYWdlX2RtYSAmJgotCQkgICAgKHJ4X3JpbmctPmZsYWdzICYgSVhHQkVfUklOR19SWF9QU19FTkFCTEVEKSkgewotCQkJaWYgKCFiaS0+cGFnZSkgewotCQkJCWJpLT5wYWdlID0gbmV0ZGV2X2FsbG9jX3BhZ2UobmV0ZGV2KTsKLQkJCQlpZiAoIWJpLT5wYWdlKSB7Ci0JCQkJCWFkYXB0ZXItPmFsbG9jX3J4X3BhZ2VfZmFpbGVkKys7Ci0JCQkJCWdvdG8gbm9fYnVmZmVyczsKLQkJCQl9Ci0JCQkJYmktPnBhZ2Vfb2Zmc2V0ID0gMDsKLQkJCX0gZWxzZSB7Ci0JCQkJLyogdXNlIGEgaGFsZiBwYWdlIGlmIHdlJ3JlIHJlLXVzaW5nICovCi0JCQkJYmktPnBhZ2Vfb2Zmc2V0IF49IChQQUdFX1NJWkUgLyAyKTsKLQkJCX0KLQotCQkJYmktPnBhZ2VfZG1hID0gZG1hX21hcF9wYWdlKCZwZGV2LT5kZXYsIGJpLT5wYWdlLAotCQkJCQkJICAgIGJpLT5wYWdlX29mZnNldCwKLQkJCQkJCSAgICAoUEFHRV9TSVpFIC8gMiksCi0JCQkJCQkgICAgRE1BX0ZST01fREVWSUNFKTsKLQkJfQotCi0JCWlmICghYmktPnNrYikgewotCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IG5ldGRldl9hbGxvY19za2JfaXBfYWxpZ24obmV0ZGV2LAotCQkJCQkJCQkJYnVmc3opOwotCQkJYmktPnNrYiA9IHNrYjsKLQorCQlpZiAoIXNrYikgeworCQkJc2tiID0gbmV0ZGV2X2FsbG9jX3NrYl9pcF9hbGlnbihyeF9yaW5nLT5uZXRkZXYsCisJCQkJCQkJcnhfcmluZy0+cnhfYnVmX2xlbik7CiAJCQlpZiAoIXNrYikgewotCQkJCWFkYXB0ZXItPmFsbG9jX3J4X2J1ZmZfZmFpbGVkKys7CisJCQkJcnhfcmluZy0+cnhfc3RhdHMuYWxsb2NfcnhfYnVmZl9mYWlsZWQrKzsKIAkJCQlnb3RvIG5vX2J1ZmZlcnM7CiAJCQl9CiAJCQkvKiBpbml0aWFsaXplIHF1ZXVlIG1hcHBpbmcgKi8KIAkJCXNrYl9yZWNvcmRfcnhfcXVldWUoc2tiLCByeF9yaW5nLT5xdWV1ZV9pbmRleCk7CisJCQliaS0+c2tiID0gc2tiOwogCQl9CiAKIAkJaWYgKCFiaS0+ZG1hKSB7Ci0JCQliaS0+ZG1hID0gZG1hX21hcF9zaW5nbGUoJnBkZXYtPmRldiwKLQkJCQkJCSBiaS0+c2tiLT5kYXRhLAorCQkJYmktPmRtYSA9IGRtYV9tYXBfc2luZ2xlKHJ4X3JpbmctPmRldiwKKwkJCQkJCSBza2ItPmRhdGEsCiAJCQkJCQkgcnhfcmluZy0+cnhfYnVmX2xlbiwKIAkJCQkJCSBETUFfRlJPTV9ERVZJQ0UpOworCQkJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKHJ4X3JpbmctPmRldiwgYmktPmRtYSkpIHsKKwkJCQlyeF9yaW5nLT5yeF9zdGF0cy5hbGxvY19yeF9idWZmX2ZhaWxlZCsrOworCQkJCWJpLT5kbWEgPSAwOworCQkJCWdvdG8gbm9fYnVmZmVyczsKKwkJCX0KIAkJfQotCQkvKiBSZWZyZXNoIHRoZSBkZXNjIGV2ZW4gaWYgYnVmZmVyX2FkZHJzIGRpZG4ndCBjaGFuZ2UgYmVjYXVzZQotCQkgKiBlYWNoIHdyaXRlLWJhY2sgZXJhc2VzIHRoaXMgaW5mby4gKi8KLQkJaWYgKHJ4X3JpbmctPmZsYWdzICYgSVhHQkVfUklOR19SWF9QU19FTkFCTEVEKSB7CisKKwkJaWYgKHJpbmdfaXNfcHNfZW5hYmxlZChyeF9yaW5nKSkgeworCQkJaWYgKCFiaS0+cGFnZSkgeworCQkJCWJpLT5wYWdlID0gbmV0ZGV2X2FsbG9jX3BhZ2UocnhfcmluZy0+bmV0ZGV2KTsKKwkJCQlpZiAoIWJpLT5wYWdlKSB7CisJCQkJCXJ4X3JpbmctPnJ4X3N0YXRzLmFsbG9jX3J4X3BhZ2VfZmFpbGVkKys7CisJCQkJCWdvdG8gbm9fYnVmZmVyczsKKwkJCQl9CisJCQl9CisKKwkJCWlmICghYmktPnBhZ2VfZG1hKSB7CisJCQkJLyogdXNlIGEgaGFsZiBwYWdlIGlmIHdlJ3JlIHJlLXVzaW5nICovCisJCQkJYmktPnBhZ2Vfb2Zmc2V0IF49IFBBR0VfU0laRSAvIDI7CisJCQkJYmktPnBhZ2VfZG1hID0gZG1hX21hcF9wYWdlKHJ4X3JpbmctPmRldiwKKwkJCQkJCQkgICAgYmktPnBhZ2UsCisJCQkJCQkJICAgIGJpLT5wYWdlX29mZnNldCwKKwkJCQkJCQkgICAgUEFHRV9TSVpFIC8gMiwKKwkJCQkJCQkgICAgRE1BX0ZST01fREVWSUNFKTsKKwkJCQlpZiAoZG1hX21hcHBpbmdfZXJyb3IocnhfcmluZy0+ZGV2LAorCQkJCQkJICAgICAgYmktPnBhZ2VfZG1hKSkgeworCQkJCQlyeF9yaW5nLT5yeF9zdGF0cy5hbGxvY19yeF9wYWdlX2ZhaWxlZCsrOworCQkJCQliaS0+cGFnZV9kbWEgPSAwOworCQkJCQlnb3RvIG5vX2J1ZmZlcnM7CisJCQkJfQorCQkJfQorCisJCQkvKiBSZWZyZXNoIHRoZSBkZXNjIGV2ZW4gaWYgYnVmZmVyX2FkZHJzIGRpZG4ndCBjaGFuZ2UKKwkJCSAqIGJlY2F1c2UgZWFjaCB3cml0ZS1iYWNrIGVyYXNlcyB0aGlzIGluZm8uICovCiAJCQlyeF9kZXNjLT5yZWFkLnBrdF9hZGRyID0gY3B1X3RvX2xlNjQoYmktPnBhZ2VfZG1hKTsKIAkJCXJ4X2Rlc2MtPnJlYWQuaGRyX2FkZHIgPSBjcHVfdG9fbGU2NChiaS0+ZG1hKTsKIAkJfSBlbHNlIHsKQEAgLTEwOTksNTYgKzEyMzAsNDggQEAKIAkJaSsrOwogCQlpZiAoaSA9PSByeF9yaW5nLT5jb3VudCkKIAkJCWkgPSAwOwotCQliaSA9ICZyeF9yaW5nLT5yeF9idWZmZXJfaW5mb1tpXTsKIAl9CiAKIG5vX2J1ZmZlcnM6CiAJaWYgKHJ4X3JpbmctPm5leHRfdG9fdXNlICE9IGkpIHsKIAkJcnhfcmluZy0+bmV4dF90b191c2UgPSBpOwotCQlpZiAoaS0tID09IDApCi0JCQlpID0gKHJ4X3JpbmctPmNvdW50IC0gMSk7Ci0KLQkJaXhnYmVfcmVsZWFzZV9yeF9kZXNjKCZhZGFwdGVyLT5odywgcnhfcmluZywgaSk7CisJCWl4Z2JlX3JlbGVhc2VfcnhfZGVzYyhyeF9yaW5nLCBpKTsKIAl9CiB9CiAKLXN0YXRpYyBpbmxpbmUgdTE2IGl4Z2JlX2dldF9oZHJfaW5mbyh1bmlvbiBpeGdiZV9hZHZfcnhfZGVzYyAqcnhfZGVzYykKK3N0YXRpYyBpbmxpbmUgdTE2IGl4Z2JlX2dldF9obGVuKHVuaW9uIGl4Z2JlX2Fkdl9yeF9kZXNjICpyeF9kZXNjKQogewotCXJldHVybiByeF9kZXNjLT53Yi5sb3dlci5sb19kd29yZC5oc19yc3MuaGRyX2luZm87Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTE2IGl4Z2JlX2dldF9wa3RfaW5mbyh1bmlvbiBpeGdiZV9hZHZfcnhfZGVzYyAqcnhfZGVzYykKLXsKLQlyZXR1cm4gcnhfZGVzYy0+d2IubG93ZXIubG9fZHdvcmQuaHNfcnNzLnBrdF9pbmZvOwotfQotCi1zdGF0aWMgaW5saW5lIHUzMiBpeGdiZV9nZXRfcnNjX2NvdW50KHVuaW9uIGl4Z2JlX2Fkdl9yeF9kZXNjICpyeF9kZXNjKQotewotCXJldHVybiAobGUzMl90b19jcHUocnhfZGVzYy0+d2IubG93ZXIubG9fZHdvcmQuZGF0YSkgJgotCQlJWEdCRV9SWERBRFZfUlNDQ05UX01BU0spID4+Ci0JCUlYR0JFX1JYREFEVl9SU0NDTlRfU0hJRlQ7CisJLyogSFcgd2lsbCBub3QgRE1BIGluIGRhdGEgbGFyZ2VyIHRoYW4gdGhlIGdpdmVuIGJ1ZmZlciwgZXZlbiBpZiBpdAorCSAqIHBhcnNlcyB0aGUgKE5GUywgb2YgY291cnNlKSBoZWFkZXIgdG8gYmUgbGFyZ2VyLiAgSW4gdGhhdCBjYXNlLCBpdAorCSAqIGZpbGxzIHRoZSBoZWFkZXIgYnVmZmVyIGFuZCBzcGlsbHMgdGhlIHJlc3QgaW50byB0aGUgcGFnZS4KKwkgKi8KKwl1MTYgaGRyX2luZm8gPSBsZTE2X3RvX2NwdShyeF9kZXNjLT53Yi5sb3dlci5sb19kd29yZC5oc19yc3MuaGRyX2luZm8pOworCXUxNiBobGVuID0gKGhkcl9pbmZvICYgIElYR0JFX1JYREFEVl9IRFJCVUZMRU5fTUFTSykgPj4KKwkJICAgIElYR0JFX1JYREFEVl9IRFJCVUZMRU5fU0hJRlQ7CisJaWYgKGhsZW4gPiBJWEdCRV9SWF9IRFJfU0laRSkKKwkJaGxlbiA9IElYR0JFX1JYX0hEUl9TSVpFOworCXJldHVybiBobGVuOwogfQogCiAvKioKICAqIGl4Z2JlX3RyYW5zZm9ybV9yc2NfcXVldWUgLSBjaGFuZ2UgcnNjIHF1ZXVlIGludG8gYSBmdWxsIHBhY2tldAogICogQHNrYjogcG9pbnRlciB0byB0aGUgbGFzdCBza2IgaW4gdGhlIHJzYyBxdWV1ZQotICogQGNvdW50OiBwb2ludGVyIHRvIG51bWJlciBvZiBwYWNrZXRzIGNvYWxlc2NlZCBpbiB0aGlzIGNvbnRleHQKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIGNoYW5nZXMgYSBxdWV1ZSBmdWxsIG9mIGh3IHJzYyBidWZmZXJzIGludG8gYSBjb21wbGV0ZWQKICAqIHBhY2tldC4gIEl0IHVzZXMgdGhlIC0+cHJldiBwb2ludGVycyB0byBmaW5kIHRoZSBmaXJzdCBwYWNrZXQgYW5kIHRoZW4KICAqIHR1cm5zIGl0IGludG8gdGhlIGZyYWcgbGlzdCBvd25lci4KICAqKi8KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKml4Z2JlX3RyYW5zZm9ybV9yc2NfcXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkJCQl1NjQgKmNvdW50KQorc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqaXhnYmVfdHJhbnNmb3JtX3JzY19xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXVuc2lnbmVkIGludCBmcmFnX2xpc3Rfc2l6ZSA9IDA7CisJdW5zaWduZWQgaW50IHNrYl9jbnQgPSAxOwogCiAJd2hpbGUgKHNrYi0+cHJldikgewogCQlzdHJ1Y3Qgc2tfYnVmZiAqcHJldiA9IHNrYi0+cHJldjsKIAkJZnJhZ19saXN0X3NpemUgKz0gc2tiLT5sZW47CiAJCXNrYi0+cHJldiA9IE5VTEw7CiAJCXNrYiA9IHByZXY7Ci0JCSpjb3VudCArPSAxOworCQlza2JfY250Kys7CiAJfQogCiAJc2tiX3NoaW5mbyhza2IpLT5mcmFnX2xpc3QgPSBza2ItPm5leHQ7CkBAIC0xMTU2LDY4ICsxMjc5LDU5IEBACiAJc2tiLT5sZW4gKz0gZnJhZ19saXN0X3NpemU7CiAJc2tiLT5kYXRhX2xlbiArPSBmcmFnX2xpc3Rfc2l6ZTsKIAlza2ItPnRydWVzaXplICs9IGZyYWdfbGlzdF9zaXplOworCUlYR0JFX1JTQ19DQihza2IpLT5za2JfY250ID0gc2tiX2NudDsKKwogCXJldHVybiBza2I7CiB9CiAKLXN0cnVjdCBpeGdiZV9yc2NfY2IgewotCWRtYV9hZGRyX3QgZG1hOwotCWJvb2wgZGVsYXlfdW5tYXA7Ci19Oworc3RhdGljIGlubGluZSBib29sIGl4Z2JlX2dldF9yc2Nfc3RhdGUodW5pb24gaXhnYmVfYWR2X3J4X2Rlc2MgKnJ4X2Rlc2MpCit7CisJcmV0dXJuICEhKGxlMzJfdG9fY3B1KHJ4X2Rlc2MtPndiLmxvd2VyLmxvX2R3b3JkLmRhdGEpICYKKwkJSVhHQkVfUlhEQURWX1JTQ0NOVF9NQVNLKTsKK30KIAotI2RlZmluZSBJWEdCRV9SU0NfQ0Ioc2tiKSAoKHN0cnVjdCBpeGdiZV9yc2NfY2IgKikoc2tiKS0+Y2IpCi0KLXN0YXRpYyBib29sIGl4Z2JlX2NsZWFuX3J4X2lycShzdHJ1Y3QgaXhnYmVfcV92ZWN0b3IgKnFfdmVjdG9yLAorc3RhdGljIHZvaWQgaXhnYmVfY2xlYW5fcnhfaXJxKHN0cnVjdCBpeGdiZV9xX3ZlY3RvciAqcV92ZWN0b3IsCiAJCQkgICAgICAgc3RydWN0IGl4Z2JlX3JpbmcgKnJ4X3JpbmcsCiAJCQkgICAgICAgaW50ICp3b3JrX2RvbmUsIGludCB3b3JrX3RvX2RvKQogewogCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gcV92ZWN0b3ItPmFkYXB0ZXI7Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OwogCXVuaW9uIGl4Z2JlX2Fkdl9yeF9kZXNjICpyeF9kZXNjLCAqbmV4dF9yeGQ7CiAJc3RydWN0IGl4Z2JlX3J4X2J1ZmZlciAqcnhfYnVmZmVyX2luZm8sICpuZXh0X2J1ZmZlcjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXVuc2lnbmVkIGludCBpLCByc2NfY291bnQgPSAwOwotCXUzMiBsZW4sIHN0YXRlcnI7Ci0JdTE2IGhkcl9pbmZvOwotCWJvb2wgY2xlYW5lZCA9IGZhbHNlOwotCWludCBjbGVhbmVkX2NvdW50ID0gMDsKIAl1bnNpZ25lZCBpbnQgdG90YWxfcnhfYnl0ZXMgPSAwLCB0b3RhbF9yeF9wYWNrZXRzID0gMDsKKwljb25zdCBpbnQgY3VycmVudF9ub2RlID0gbnVtYV9ub2RlX2lkKCk7CiAjaWZkZWYgSVhHQkVfRkNPRQogCWludCBkZHBfYnl0ZXMgPSAwOwogI2VuZGlmIC8qIElYR0JFX0ZDT0UgKi8KKwl1MzIgc3RhdGVycjsKKwl1MTYgaTsKKwl1MTYgY2xlYW5lZF9jb3VudCA9IDA7CisJYm9vbCBwa3RfaXNfcnNjID0gZmFsc2U7CiAKIAlpID0gcnhfcmluZy0+bmV4dF90b19jbGVhbjsKIAlyeF9kZXNjID0gSVhHQkVfUlhfREVTQ19BRFYocnhfcmluZywgaSk7CiAJc3RhdGVyciA9IGxlMzJfdG9fY3B1KHJ4X2Rlc2MtPndiLnVwcGVyLnN0YXR1c19lcnJvcik7Ci0JcnhfYnVmZmVyX2luZm8gPSAmcnhfcmluZy0+cnhfYnVmZmVyX2luZm9baV07CiAKIAl3aGlsZSAoc3RhdGVyciAmIElYR0JFX1JYRF9TVEFUX0REKSB7CiAJCXUzMiB1cHBlcl9sZW4gPSAwOwotCQlpZiAoKndvcmtfZG9uZSA+PSB3b3JrX3RvX2RvKQotCQkJYnJlYWs7Ci0JCSgqd29ya19kb25lKSsrOwogCiAJCXJtYigpOyAvKiByZWFkIGRlc2NyaXB0b3IgYW5kIHJ4X2J1ZmZlcl9pbmZvIGFmdGVyIHN0YXR1cyBERCAqLwotCQlpZiAocnhfcmluZy0+ZmxhZ3MgJiBJWEdCRV9SSU5HX1JYX1BTX0VOQUJMRUQpIHsKLQkJCWhkcl9pbmZvID0gbGUxNl90b19jcHUoaXhnYmVfZ2V0X2hkcl9pbmZvKHJ4X2Rlc2MpKTsKLQkJCWxlbiA9IChoZHJfaW5mbyAmIElYR0JFX1JYREFEVl9IRFJCVUZMRU5fTUFTSykgPj4KLQkJCSAgICAgICBJWEdCRV9SWERBRFZfSERSQlVGTEVOX1NISUZUOwotCQkJdXBwZXJfbGVuID0gbGUxNl90b19jcHUocnhfZGVzYy0+d2IudXBwZXIubGVuZ3RoKTsKLQkJCWlmICgobGVuID4gSVhHQkVfUlhfSERSX1NJWkUpIHx8Ci0JCQkgICAgKHVwcGVyX2xlbiAmJiAhKGhkcl9pbmZvICYgSVhHQkVfUlhEQURWX1NQSCkpKQotCQkJCWxlbiA9IElYR0JFX1JYX0hEUl9TSVpFOwotCQl9IGVsc2UgewotCQkJbGVuID0gbGUxNl90b19jcHUocnhfZGVzYy0+d2IudXBwZXIubGVuZ3RoKTsKLQkJfQogCi0JCWNsZWFuZWQgPSB0cnVlOworCQlyeF9idWZmZXJfaW5mbyA9ICZyeF9yaW5nLT5yeF9idWZmZXJfaW5mb1tpXTsKKwogCQlza2IgPSByeF9idWZmZXJfaW5mby0+c2tiOwotCQlwcmVmZXRjaChza2ItPmRhdGEpOwogCQlyeF9idWZmZXJfaW5mby0+c2tiID0gTlVMTDsKKwkJcHJlZmV0Y2goc2tiLT5kYXRhKTsKIAorCQlpZiAocmluZ19pc19yc2NfZW5hYmxlZChyeF9yaW5nKSkKKwkJCXBrdF9pc19yc2MgPSBpeGdiZV9nZXRfcnNjX3N0YXRlKHJ4X2Rlc2MpOworCisJCS8qIGlmIHRoaXMgaXMgYSBza2IgZnJvbSBwcmV2aW91cyByZWNlaXZlIERNQSB3aWxsIGJlIDAgKi8KIAkJaWYgKHJ4X2J1ZmZlcl9pbmZvLT5kbWEpIHsKLQkJCWlmICgoYWRhcHRlci0+ZmxhZ3MyICYgSVhHQkVfRkxBRzJfUlNDX0VOQUJMRUQpICYmCi0JCQkgICAgKCEoc3RhdGVyciAmIElYR0JFX1JYRF9TVEFUX0VPUCkpICYmCi0JCQkJICghKHNrYi0+cHJldikpKSB7CisJCQl1MTYgaGxlbjsKKwkJCWlmIChwa3RfaXNfcnNjICYmCisJCQkgICAgIShzdGF0ZXJyICYgSVhHQkVfUlhEX1NUQVRfRU9QKSAmJgorCQkJICAgICFza2ItPnByZXYpIHsKIAkJCQkvKgogCQkJCSAqIFdoZW4gSFdSU0MgaXMgZW5hYmxlZCwgZGVsYXkgdW5tYXBwaW5nCiAJCQkJICogb2YgdGhlIGZpcnN0IHBhY2tldC4gSXQgY2FycmllcyB0aGUKQEAgLTEyMjgsMjkgKzEzNDIsNDIgQEAKIAkJCQlJWEdCRV9SU0NfQ0Ioc2tiKS0+ZGVsYXlfdW5tYXAgPSB0cnVlOwogCQkJCUlYR0JFX1JTQ19DQihza2IpLT5kbWEgPSByeF9idWZmZXJfaW5mby0+ZG1hOwogCQkJfSBlbHNlIHsKLQkJCQlkbWFfdW5tYXBfc2luZ2xlKCZwZGV2LT5kZXYsCisJCQkJZG1hX3VubWFwX3NpbmdsZShyeF9yaW5nLT5kZXYsCiAJCQkJCQkgcnhfYnVmZmVyX2luZm8tPmRtYSwKIAkJCQkJCSByeF9yaW5nLT5yeF9idWZfbGVuLAogCQkJCQkJIERNQV9GUk9NX0RFVklDRSk7CiAJCQl9CiAJCQlyeF9idWZmZXJfaW5mby0+ZG1hID0gMDsKLQkJCXNrYl9wdXQoc2tiLCBsZW4pOworCisJCQlpZiAocmluZ19pc19wc19lbmFibGVkKHJ4X3JpbmcpKSB7CisJCQkJaGxlbiA9IGl4Z2JlX2dldF9obGVuKHJ4X2Rlc2MpOworCQkJCXVwcGVyX2xlbiA9IGxlMTZfdG9fY3B1KHJ4X2Rlc2MtPndiLnVwcGVyLmxlbmd0aCk7CisJCQl9IGVsc2UgeworCQkJCWhsZW4gPSBsZTE2X3RvX2NwdShyeF9kZXNjLT53Yi51cHBlci5sZW5ndGgpOworCQkJfQorCisJCQlza2JfcHV0KHNrYiwgaGxlbik7CisJCX0gZWxzZSB7CisJCQkvKiBhc3N1bWUgcGFja2V0IHNwbGl0IHNpbmNlIGhlYWRlciBpcyB1bm1hcHBlZCAqLworCQkJdXBwZXJfbGVuID0gbGUxNl90b19jcHUocnhfZGVzYy0+d2IudXBwZXIubGVuZ3RoKTsKIAkJfQogCiAJCWlmICh1cHBlcl9sZW4pIHsKLQkJCWRtYV91bm1hcF9wYWdlKCZwZGV2LT5kZXYsIHJ4X2J1ZmZlcl9pbmZvLT5wYWdlX2RtYSwKLQkJCQkgICAgICAgUEFHRV9TSVpFIC8gMiwgRE1BX0ZST01fREVWSUNFKTsKKwkJCWRtYV91bm1hcF9wYWdlKHJ4X3JpbmctPmRldiwKKwkJCQkgICAgICAgcnhfYnVmZmVyX2luZm8tPnBhZ2VfZG1hLAorCQkJCSAgICAgICBQQUdFX1NJWkUgLyAyLAorCQkJCSAgICAgICBETUFfRlJPTV9ERVZJQ0UpOwogCQkJcnhfYnVmZmVyX2luZm8tPnBhZ2VfZG1hID0gMDsKIAkJCXNrYl9maWxsX3BhZ2VfZGVzYyhza2IsIHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MsCiAJCQkJCSAgIHJ4X2J1ZmZlcl9pbmZvLT5wYWdlLAogCQkJCQkgICByeF9idWZmZXJfaW5mby0+cGFnZV9vZmZzZXQsCiAJCQkJCSAgIHVwcGVyX2xlbik7CiAKLQkJCWlmICgocnhfcmluZy0+cnhfYnVmX2xlbiA+IChQQUdFX1NJWkUgLyAyKSkgfHwKLQkJCSAgICAocGFnZV9jb3VudChyeF9idWZmZXJfaW5mby0+cGFnZSkgIT0gMSkpCi0JCQkJcnhfYnVmZmVyX2luZm8tPnBhZ2UgPSBOVUxMOwotCQkJZWxzZQorCQkJaWYgKChwYWdlX2NvdW50KHJ4X2J1ZmZlcl9pbmZvLT5wYWdlKSA9PSAxKSAmJgorCQkJICAgIChwYWdlX3RvX25pZChyeF9idWZmZXJfaW5mby0+cGFnZSkgPT0gY3VycmVudF9ub2RlKSkKIAkJCQlnZXRfcGFnZShyeF9idWZmZXJfaW5mby0+cGFnZSk7CisJCQllbHNlCisJCQkJcnhfYnVmZmVyX2luZm8tPnBhZ2UgPSBOVUxMOwogCiAJCQlza2ItPmxlbiArPSB1cHBlcl9sZW47CiAJCQlza2ItPmRhdGFfbGVuICs9IHVwcGVyX2xlbjsKQEAgLTEyNjUsMTAgKzEzOTIsNyBAQAogCQlwcmVmZXRjaChuZXh0X3J4ZCk7CiAJCWNsZWFuZWRfY291bnQrKzsKIAotCQlpZiAoYWRhcHRlci0+ZmxhZ3MyICYgSVhHQkVfRkxBRzJfUlNDX0NBUEFCTEUpCi0JCQlyc2NfY291bnQgPSBpeGdiZV9nZXRfcnNjX2NvdW50KHJ4X2Rlc2MpOwotCi0JCWlmIChyc2NfY291bnQpIHsKKwkJaWYgKHBrdF9pc19yc2MpIHsKIAkJCXUzMiBuZXh0cCA9IChzdGF0ZXJyICYgSVhHQkVfUlhEQURWX05FWFRQX01BU0spID4+CiAJCQkJICAgICBJWEdCRV9SWERBRFZfTkVYVFBfU0hJRlQ7CiAJCQluZXh0X2J1ZmZlciA9ICZyeF9yaW5nLT5yeF9idWZmZXJfaW5mb1tuZXh0cF07CkBAIC0xMjc2LDMyICsxNDAwLDggQEAKIAkJCW5leHRfYnVmZmVyID0gJnJ4X3JpbmctPnJ4X2J1ZmZlcl9pbmZvW2ldOwogCQl9CiAKLQkJaWYgKHN0YXRlcnIgJiBJWEdCRV9SWERfU1RBVF9FT1ApIHsKLQkJCWlmIChza2ItPnByZXYpCi0JCQkJc2tiID0gaXhnYmVfdHJhbnNmb3JtX3JzY19xdWV1ZShza2IsCi0JCQkJCQkJCSYocnhfcmluZy0+cnNjX2NvdW50KSk7Ci0JCQlpZiAoYWRhcHRlci0+ZmxhZ3MyICYgSVhHQkVfRkxBRzJfUlNDX0VOQUJMRUQpIHsKLQkJCQlpZiAoSVhHQkVfUlNDX0NCKHNrYiktPmRlbGF5X3VubWFwKSB7Ci0JCQkJCWRtYV91bm1hcF9zaW5nbGUoJnBkZXYtPmRldiwKLQkJCQkJCQkgSVhHQkVfUlNDX0NCKHNrYiktPmRtYSwKLQkJCQkJCQkgcnhfcmluZy0+cnhfYnVmX2xlbiwKLQkJCQkJCQkgRE1BX0ZST01fREVWSUNFKTsKLQkJCQkJSVhHQkVfUlNDX0NCKHNrYiktPmRtYSA9IDA7Ci0JCQkJCUlYR0JFX1JTQ19DQihza2IpLT5kZWxheV91bm1hcCA9IGZhbHNlOwotCQkJCX0KLQkJCQlpZiAocnhfcmluZy0+ZmxhZ3MgJiBJWEdCRV9SSU5HX1JYX1BTX0VOQUJMRUQpCi0JCQkJCXJ4X3JpbmctPnJzY19jb3VudCArPQotCQkJCQkJc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsKLQkJCQllbHNlCi0JCQkJCXJ4X3JpbmctPnJzY19jb3VudCsrOwotCQkJCXJ4X3JpbmctPnJzY19mbHVzaCsrOwotCQkJfQotCQkJdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbigmcnhfcmluZy0+c3luY3ApOwotCQkJcnhfcmluZy0+c3RhdHMucGFja2V0cysrOwotCQkJcnhfcmluZy0+c3RhdHMuYnl0ZXMgKz0gc2tiLT5sZW47Ci0JCQl1NjRfc3RhdHNfdXBkYXRlX2VuZCgmcnhfcmluZy0+c3luY3ApOwotCQl9IGVsc2UgewotCQkJaWYgKHJ4X3JpbmctPmZsYWdzICYgSVhHQkVfUklOR19SWF9QU19FTkFCTEVEKSB7CisJCWlmICghKHN0YXRlcnIgJiBJWEdCRV9SWERfU1RBVF9FT1ApKSB7CisJCQlpZiAocmluZ19pc19wc19lbmFibGVkKHJ4X3JpbmcpKSB7CiAJCQkJcnhfYnVmZmVyX2luZm8tPnNrYiA9IG5leHRfYnVmZmVyLT5za2I7CiAJCQkJcnhfYnVmZmVyX2luZm8tPmRtYSA9IG5leHRfYnVmZmVyLT5kbWE7CiAJCQkJbmV4dF9idWZmZXItPnNrYiA9IHNrYjsKQEAgLTEzMTAsMTIgKzE0MTAsNDUgQEAKIAkJCQlza2ItPm5leHQgPSBuZXh0X2J1ZmZlci0+c2tiOwogCQkJCXNrYi0+bmV4dC0+cHJldiA9IHNrYjsKIAkJCX0KLQkJCXJ4X3JpbmctPm5vbl9lb3BfZGVzY3MrKzsKKwkJCXJ4X3JpbmctPnJ4X3N0YXRzLm5vbl9lb3BfZGVzY3MrKzsKIAkJCWdvdG8gbmV4dF9kZXNjOwogCQl9CiAKKwkJaWYgKHNrYi0+cHJldikgeworCQkJc2tiID0gaXhnYmVfdHJhbnNmb3JtX3JzY19xdWV1ZShza2IpOworCQkJLyogaWYgd2UgZ290IGhlcmUgd2l0aG91dCBSU0MgdGhlIHBhY2tldCBpcyBpbnZhbGlkICovCisJCQlpZiAoIXBrdF9pc19yc2MpIHsKKwkJCQlfX3Bza2JfdHJpbShza2IsIDApOworCQkJCXJ4X2J1ZmZlcl9pbmZvLT5za2IgPSBza2I7CisJCQkJZ290byBuZXh0X2Rlc2M7CisJCQl9CisJCX0KKworCQlpZiAocmluZ19pc19yc2NfZW5hYmxlZChyeF9yaW5nKSkgeworCQkJaWYgKElYR0JFX1JTQ19DQihza2IpLT5kZWxheV91bm1hcCkgeworCQkJCWRtYV91bm1hcF9zaW5nbGUocnhfcmluZy0+ZGV2LAorCQkJCQkJIElYR0JFX1JTQ19DQihza2IpLT5kbWEsCisJCQkJCQkgcnhfcmluZy0+cnhfYnVmX2xlbiwKKwkJCQkJCSBETUFfRlJPTV9ERVZJQ0UpOworCQkJCUlYR0JFX1JTQ19DQihza2IpLT5kbWEgPSAwOworCQkJCUlYR0JFX1JTQ19DQihza2IpLT5kZWxheV91bm1hcCA9IGZhbHNlOworCQkJfQorCQl9CisJCWlmIChwa3RfaXNfcnNjKSB7CisJCQlpZiAocmluZ19pc19wc19lbmFibGVkKHJ4X3JpbmcpKQorCQkJCXJ4X3JpbmctPnJ4X3N0YXRzLnJzY19jb3VudCArPQorCQkJCQlza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOworCQkJZWxzZQorCQkJCXJ4X3JpbmctPnJ4X3N0YXRzLnJzY19jb3VudCArPQorCQkJCQlJWEdCRV9SU0NfQ0Ioc2tiKS0+c2tiX2NudDsKKwkJCXJ4X3JpbmctPnJ4X3N0YXRzLnJzY19mbHVzaCsrOworCQl9CisKKwkJLyogRVJSX01BU0sgd2lsbCBvbmx5IGhhdmUgdmFsaWQgYml0cyBpZiBFT1Agc2V0ICovCiAJCWlmIChzdGF0ZXJyICYgSVhHQkVfUlhEQURWX0VSUl9GUkFNRV9FUlJfTUFTSykgewotCQkJZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKKwkJCS8qIHRyaW0gcGFja2V0IGJhY2sgdG8gc2l6ZSAwIGFuZCByZWN5Y2xlIGl0ICovCisJCQlfX3Bza2JfdHJpbShza2IsIDApOworCQkJcnhfYnVmZmVyX2luZm8tPnNrYiA9IHNrYjsKIAkJCWdvdG8gbmV4dF9kZXNjOwogCQl9CiAKQEAgLTEzMjUsNyArMTQ1OCw3IEBACiAJCXRvdGFsX3J4X2J5dGVzICs9IHNrYi0+bGVuOwogCQl0b3RhbF9yeF9wYWNrZXRzKys7CiAKLQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgYWRhcHRlci0+bmV0ZGV2KTsKKwkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgcnhfcmluZy0+bmV0ZGV2KTsKICNpZmRlZiBJWEdCRV9GQ09FCiAJCS8qIGlmIGRkcCwgbm90IHBhc3NpbmcgdG8gVUxEIHVubGVzcyBmb3IgRkNQX1JTUCBvciBlcnJvciAqLwogCQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0ZDT0VfRU5BQkxFRCkgewpAQCAtMTMzOSwxNiArMTQ3MiwxOCBAQAogbmV4dF9kZXNjOgogCQlyeF9kZXNjLT53Yi51cHBlci5zdGF0dXNfZXJyb3IgPSAwOwogCisJCSgqd29ya19kb25lKSsrOworCQlpZiAoKndvcmtfZG9uZSA+PSB3b3JrX3RvX2RvKQorCQkJYnJlYWs7CisKIAkJLyogcmV0dXJuIHNvbWUgYnVmZmVycyB0byBoYXJkd2FyZSwgb25lIGF0IGEgdGltZSBpcyB0b28gc2xvdyAqLwogCQlpZiAoY2xlYW5lZF9jb3VudCA+PSBJWEdCRV9SWF9CVUZGRVJfV1JJVEUpIHsKLQkJCWl4Z2JlX2FsbG9jX3J4X2J1ZmZlcnMoYWRhcHRlciwgcnhfcmluZywgY2xlYW5lZF9jb3VudCk7CisJCQlpeGdiZV9hbGxvY19yeF9idWZmZXJzKHJ4X3JpbmcsIGNsZWFuZWRfY291bnQpOwogCQkJY2xlYW5lZF9jb3VudCA9IDA7CiAJCX0KIAogCQkvKiB1c2UgcHJlZmV0Y2hlZCB2YWx1ZXMgKi8KIAkJcnhfZGVzYyA9IG5leHRfcnhkOwotCQlyeF9idWZmZXJfaW5mbyA9ICZyeF9yaW5nLT5yeF9idWZmZXJfaW5mb1tpXTsKLQogCQlzdGF0ZXJyID0gbGUzMl90b19jcHUocnhfZGVzYy0+d2IudXBwZXIuc3RhdHVzX2Vycm9yKTsKIAl9CiAKQEAgLTEzNTYsMTQgKzE0OTEsMTQgQEAKIAljbGVhbmVkX2NvdW50ID0gSVhHQkVfREVTQ19VTlVTRUQocnhfcmluZyk7CiAKIAlpZiAoY2xlYW5lZF9jb3VudCkKLQkJaXhnYmVfYWxsb2NfcnhfYnVmZmVycyhhZGFwdGVyLCByeF9yaW5nLCBjbGVhbmVkX2NvdW50KTsKKwkJaXhnYmVfYWxsb2NfcnhfYnVmZmVycyhyeF9yaW5nLCBjbGVhbmVkX2NvdW50KTsKIAogI2lmZGVmIElYR0JFX0ZDT0UKIAkvKiBpbmNsdWRlIEREUGVkIEZDb0UgZGF0YSAqLwogCWlmIChkZHBfYnl0ZXMgPiAwKSB7CiAJCXVuc2lnbmVkIGludCBtc3M7CiAKLQkJbXNzID0gYWRhcHRlci0+bmV0ZGV2LT5tdHUgLSBzaXplb2Yoc3RydWN0IGZjb2VfaGRyKSAtCisJCW1zcyA9IHJ4X3JpbmctPm5ldGRldi0+bXR1IC0gc2l6ZW9mKHN0cnVjdCBmY29lX2hkcikgLQogCQkJc2l6ZW9mKHN0cnVjdCBmY19mcmFtZV9oZWFkZXIpIC0KIAkJCXNpemVvZihzdHJ1Y3QgZmNvZV9jcmNfZW9mKTsKIAkJaWYgKG1zcyA+IDUxMikKQEAgLTEzNzUsOCArMTUxMCwxMCBAQAogCiAJcnhfcmluZy0+dG90YWxfcGFja2V0cyArPSB0b3RhbF9yeF9wYWNrZXRzOwogCXJ4X3JpbmctPnRvdGFsX2J5dGVzICs9IHRvdGFsX3J4X2J5dGVzOwotCi0JcmV0dXJuIGNsZWFuZWQ7CisJdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbigmcnhfcmluZy0+c3luY3ApOworCXJ4X3JpbmctPnN0YXRzLnBhY2tldHMgKz0gdG90YWxfcnhfcGFja2V0czsKKwlyeF9yaW5nLT5zdGF0cy5ieXRlcyArPSB0b3RhbF9yeF9ieXRlczsKKwl1NjRfc3RhdHNfdXBkYXRlX2VuZCgmcnhfcmluZy0+c3luY3ApOwogfQogCiBzdGF0aWMgaW50IGl4Z2JlX2NsZWFuX3J4b25seShzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKiwgaW50KTsKQEAgLTEzOTAsNyArMTUyNyw3IEBACiBzdGF0aWMgdm9pZCBpeGdiZV9jb25maWd1cmVfbXNpeChzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcikKIHsKIAlzdHJ1Y3QgaXhnYmVfcV92ZWN0b3IgKnFfdmVjdG9yOwotCWludCBpLCBqLCBxX3ZlY3RvcnMsIHZfaWR4LCByX2lkeDsKKwlpbnQgaSwgcV92ZWN0b3JzLCB2X2lkeCwgcl9pZHg7CiAJdTMyIG1hc2s7CiAKIAlxX3ZlY3RvcnMgPSBhZGFwdGVyLT5udW1fbXNpeF92ZWN0b3JzIC0gTk9OX1FfVkVDVE9SUzsKQEAgLTE0MDYsOCArMTU0Myw4IEBACiAJCQkJICAgICAgIGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMpOwogCiAJCWZvciAoaSA9IDA7IGkgPCBxX3ZlY3Rvci0+cnhyX2NvdW50OyBpKyspIHsKLQkJCWogPSBhZGFwdGVyLT5yeF9yaW5nW3JfaWR4XS0+cmVnX2lkeDsKLQkJCWl4Z2JlX3NldF9pdmFyKGFkYXB0ZXIsIDAsIGosIHZfaWR4KTsKKwkJCXU4IHJlZ19pZHggPSBhZGFwdGVyLT5yeF9yaW5nW3JfaWR4XS0+cmVnX2lkeDsKKwkJCWl4Z2JlX3NldF9pdmFyKGFkYXB0ZXIsIDAsIHJlZ19pZHgsIHZfaWR4KTsKIAkJCXJfaWR4ID0gZmluZF9uZXh0X2JpdChxX3ZlY3Rvci0+cnhyX2lkeCwKIAkJCQkJICAgICAgYWRhcHRlci0+bnVtX3J4X3F1ZXVlcywKIAkJCQkJICAgICAgcl9pZHggKyAxKTsKQEAgLTE0MTYsOCArMTU1Myw4IEBACiAJCQkJICAgICAgIGFkYXB0ZXItPm51bV90eF9xdWV1ZXMpOwogCiAJCWZvciAoaSA9IDA7IGkgPCBxX3ZlY3Rvci0+dHhyX2NvdW50OyBpKyspIHsKLQkJCWogPSBhZGFwdGVyLT50eF9yaW5nW3JfaWR4XS0+cmVnX2lkeDsKLQkJCWl4Z2JlX3NldF9pdmFyKGFkYXB0ZXIsIDEsIGosIHZfaWR4KTsKKwkJCXU4IHJlZ19pZHggPSBhZGFwdGVyLT50eF9yaW5nW3JfaWR4XS0+cmVnX2lkeDsKKwkJCWl4Z2JlX3NldF9pdmFyKGFkYXB0ZXIsIDEsIHJlZ19pZHgsIHZfaWR4KTsKIAkJCXJfaWR4ID0gZmluZF9uZXh0X2JpdChxX3ZlY3Rvci0+dHhyX2lkeCwKIAkJCQkJICAgICAgYWRhcHRlci0+bnVtX3R4X3F1ZXVlcywKIAkJCQkJICAgICAgcl9pZHggKyAxKTsKQEAgLTE0NDgsMTEgKzE1ODUsMTkgQEAKIAkJfQogCX0KIAotCWlmIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQikKKwlzd2l0Y2ggKGFkYXB0ZXItPmh3Lm1hYy50eXBlKSB7CisJY2FzZSBpeGdiZV9tYWNfODI1OThFQjoKIAkJaXhnYmVfc2V0X2l2YXIoYWRhcHRlciwgLTEsIElYR0JFX0lWQVJfT1RIRVJfQ0FVU0VTX0lOREVYLAogCQkJICAgICAgIHZfaWR4KTsKLQllbHNlIGlmIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikKKwkJYnJlYWs7CisJY2FzZSBpeGdiZV9tYWNfODI1OTlFQjoKKwljYXNlIGl4Z2JlX21hY19YNTQwOgogCQlpeGdiZV9zZXRfaXZhcihhZGFwdGVyLCAtMSwgMSwgdl9pZHgpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KIAlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9FSVRSKHZfaWR4KSwgMTk1MCk7CiAKIAkvKiBzZXQgdXAgdG8gYXV0b2NsZWFyIHRpbWVyLCBhbmQgdGhlIHZlY3RvcnMgKi8KQEAgLTE1NDgsMTIgKzE2OTMsMTUgQEAKIAlpbnQgdl9pZHggPSBxX3ZlY3Rvci0+dl9pZHg7CiAJdTMyIGl0cl9yZWcgPSBFSVRSX0lOVFNfUEVSX1NFQ19UT19SRUcocV92ZWN0b3ItPmVpdHIpOwogCi0JaWYgKGFkYXB0ZXItPmh3Lm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OEVCKSB7CisJc3dpdGNoIChhZGFwdGVyLT5ody5tYWMudHlwZSkgeworCWNhc2UgaXhnYmVfbWFjXzgyNTk4RUI6CiAJCS8qIG11c3Qgd3JpdGUgaGlnaCBhbmQgbG93IDE2IGJpdHMgdG8gcmVzZXQgY291bnRlciAqLwogCQlpdHJfcmVnIHw9IChpdHJfcmVnIDw8IDE2KTsKLQl9IGVsc2UgaWYgKGFkYXB0ZXItPmh3Lm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKSB7CisJCWJyZWFrOworCWNhc2UgaXhnYmVfbWFjXzgyNTk5RUI6CisJY2FzZSBpeGdiZV9tYWNfWDU0MDoKIAkJLyoKLQkJICogODI1OTkgY2FuIHN1cHBvcnQgYSB2YWx1ZSBvZiB6ZXJvLCBzbyBhbGxvdyBpdCBmb3IKKwkJICogODI1OTkgYW5kIFg1NDAgY2FuIHN1cHBvcnQgYSB2YWx1ZSBvZiB6ZXJvLCBzbyBhbGxvdyBpdCBmb3IKIAkJICogbWF4IGludGVycnVwdCByYXRlLCBidXQgdGhlcmUgaXMgYW4gZXJyYXRhIHdoZXJlIGl0IGNhbgogCQkgKiBub3QgYmUgemVybyB3aXRoIFJTQwogCQkgKi8KQEAgLTE1NjYsNiArMTcxNCw5IEBACiAJCSAqIGltbWVkaWF0ZSBhc3NlcnRpb24gb2YgdGhlIGludGVycnVwdAogCQkgKi8KIAkJaXRyX3JlZyB8PSBJWEdCRV9FSVRSX0NOVF9XRElTOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKIAl9CiAJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9FSVRSKHZfaWR4KSwgaXRyX3JlZyk7CiB9CkBAIC0xNTczLDE0ICsxNzI0LDEzIEBACiBzdGF0aWMgdm9pZCBpeGdiZV9zZXRfaXRyX21zaXgoc3RydWN0IGl4Z2JlX3FfdmVjdG9yICpxX3ZlY3RvcikKIHsKIAlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IHFfdmVjdG9yLT5hZGFwdGVyOworCWludCBpLCByX2lkeDsKIAl1MzIgbmV3X2l0cjsKIAl1OCBjdXJyZW50X2l0ciwgcmV0X2l0cjsKLQlpbnQgaSwgcl9pZHg7Ci0Jc3RydWN0IGl4Z2JlX3JpbmcgKnJ4X3JpbmcsICp0eF9yaW5nOwogCiAJcl9pZHggPSBmaW5kX2ZpcnN0X2JpdChxX3ZlY3Rvci0+dHhyX2lkeCwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlcyk7CiAJZm9yIChpID0gMDsgaSA8IHFfdmVjdG9yLT50eHJfY291bnQ7IGkrKykgewotCQl0eF9yaW5nID0gYWRhcHRlci0+dHhfcmluZ1tyX2lkeF07CisJCXN0cnVjdCBpeGdiZV9yaW5nICp0eF9yaW5nID0gYWRhcHRlci0+dHhfcmluZ1tyX2lkeF07CiAJCXJldF9pdHIgPSBpeGdiZV91cGRhdGVfaXRyKGFkYXB0ZXIsIHFfdmVjdG9yLT5laXRyLAogCQkJCQkgICBxX3ZlY3Rvci0+dHhfaXRyLAogCQkJCQkgICB0eF9yaW5nLT50b3RhbF9wYWNrZXRzLApAQCAtMTU5NSw3ICsxNzQ1LDcgQEAKIAogCXJfaWR4ID0gZmluZF9maXJzdF9iaXQocV92ZWN0b3ItPnJ4cl9pZHgsIGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMpOwogCWZvciAoaSA9IDA7IGkgPCBxX3ZlY3Rvci0+cnhyX2NvdW50OyBpKyspIHsKLQkJcnhfcmluZyA9IGFkYXB0ZXItPnJ4X3Jpbmdbcl9pZHhdOworCQlzdHJ1Y3QgaXhnYmVfcmluZyAqcnhfcmluZyA9IGFkYXB0ZXItPnJ4X3Jpbmdbcl9pZHhdOwogCQlyZXRfaXRyID0gaXhnYmVfdXBkYXRlX2l0cihhZGFwdGVyLCBxX3ZlY3Rvci0+ZWl0ciwKIAkJCQkJICAgcV92ZWN0b3ItPnJ4X2l0ciwKIAkJCQkJICAgcnhfcmluZy0+dG90YWxfcGFja2V0cywKQEAgLTE2MjYsNyArMTc3Niw3IEBACiAKIAlpZiAobmV3X2l0ciAhPSBxX3ZlY3Rvci0+ZWl0cikgewogCQkvKiBkbyBhbiBleHBvbmVudGlhbCBzbW9vdGhpbmcgKi8KLQkJbmV3X2l0ciA9ICgocV92ZWN0b3ItPmVpdHIgKiA5MCkvMTAwKSArICgobmV3X2l0ciAqIDEwKS8xMDApOworCQluZXdfaXRyID0gKChxX3ZlY3Rvci0+ZWl0ciAqIDkpICsgbmV3X2l0cikvMTA7CiAKIAkJLyogc2F2ZSB0aGUgYWxnb3JpdGhtIHZhbHVlIGhlcmUsIG5vdCB0aGUgc21vb3RoZWQgb25lICovCiAJCXFfdmVjdG9yLT5laXRyID0gbmV3X2l0cjsKQEAgLTE2OTQsMTcgKzE4NDQsMTggQEAKIHsKIAlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCisJaWYgKGVpY3IgJiBJWEdCRV9FSUNSX0dQSV9TRFAyKSB7CisJCS8qIENsZWFyIHRoZSBpbnRlcnJ1cHQgKi8KKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9FSUNSLCBJWEdCRV9FSUNSX0dQSV9TRFAyKTsKKwkJaWYgKCF0ZXN0X2JpdChfX0lYR0JFX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCisJCQlzY2hlZHVsZV93b3JrKCZhZGFwdGVyLT5zZnBfY29uZmlnX21vZHVsZV90YXNrKTsKKwl9CisKIAlpZiAoZWljciAmIElYR0JFX0VJQ1JfR1BJX1NEUDEpIHsKIAkJLyogQ2xlYXIgdGhlIGludGVycnVwdCAqLwogCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0VJQ1IsIElYR0JFX0VJQ1JfR1BJX1NEUDEpOwotCQlzY2hlZHVsZV93b3JrKCZhZGFwdGVyLT5tdWx0aXNwZWVkX2ZpYmVyX3Rhc2spOwotCX0gZWxzZSBpZiAoZWljciAmIElYR0JFX0VJQ1JfR1BJX1NEUDIpIHsKLQkJLyogQ2xlYXIgdGhlIGludGVycnVwdCAqLwotCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0VJQ1IsIElYR0JFX0VJQ1JfR1BJX1NEUDIpOwotCQlzY2hlZHVsZV93b3JrKCZhZGFwdGVyLT5zZnBfY29uZmlnX21vZHVsZV90YXNrKTsKLQl9IGVsc2UgewotCQkvKiBJbnRlcnJ1cHQgaXNuJ3QgZm9yIHVzLi4uICovCi0JCXJldHVybjsKKwkJaWYgKCF0ZXN0X2JpdChfX0lYR0JFX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCisJCQlzY2hlZHVsZV93b3JrKCZhZGFwdGVyLT5tdWx0aXNwZWVkX2ZpYmVyX3Rhc2spOwogCX0KIH0KIApAQCAtMTc0NCwxNiArMTg5NSwxNiBAQAogCWlmIChlaWNyICYgSVhHQkVfRUlDUl9NQUlMQk9YKQogCQlpeGdiZV9tc2dfdGFzayhhZGFwdGVyKTsKIAotCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk4RUIpCi0JCWl4Z2JlX2NoZWNrX2Zhbl9mYWlsdXJlKGFkYXB0ZXIsIGVpY3IpOwotCi0JaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikgeworCXN3aXRjaCAoaHctPm1hYy50eXBlKSB7CisJY2FzZSBpeGdiZV9tYWNfODI1OTlFQjoKIAkJaXhnYmVfY2hlY2tfc2ZwX2V2ZW50KGFkYXB0ZXIsIGVpY3IpOwotCQlhZGFwdGVyLT5pbnRlcnJ1cHRfZXZlbnQgPSBlaWNyOwogCQlpZiAoKGFkYXB0ZXItPmZsYWdzMiAmIElYR0JFX0ZMQUcyX1RFTVBfU0VOU09SX0NBUEFCTEUpICYmCi0JCSAgICAoKGVpY3IgJiBJWEdCRV9FSUNSX0dQSV9TRFAwKSB8fCAoZWljciAmIElYR0JFX0VJQ1JfTFNDKSkpCisJCSAgICAoKGVpY3IgJiBJWEdCRV9FSUNSX0dQSV9TRFAwKSB8fCAoZWljciAmIElYR0JFX0VJQ1JfTFNDKSkpIHsKKwkJCWFkYXB0ZXItPmludGVycnVwdF9ldmVudCA9IGVpY3I7CiAJCQlzY2hlZHVsZV93b3JrKCZhZGFwdGVyLT5jaGVja19vdmVydGVtcF90YXNrKTsKLQorCQl9CisJCS8qIG5vdyBmYWxsdGhyb3VnaCB0byBoYW5kbGUgRmxvdyBEaXJlY3RvciAqLworCWNhc2UgaXhnYmVfbWFjX1g1NDA6CiAJCS8qIEhhbmRsZSBGbG93IERpcmVjdG9yIEZ1bGwgdGhyZXNob2xkIGludGVycnVwdCAqLwogCQlpZiAoZWljciAmIElYR0JFX0VJQ1JfRkxPV19ESVIpIHsKIAkJCWludCBpOwpAQCAtMTc2MywxMiArMTkxNCwxOCBAQAogCQkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGkrKykgewogCQkJCXN0cnVjdCBpeGdiZV9yaW5nICp0eF9yaW5nID0KIAkJCQkJCQkgICAgYWRhcHRlci0+dHhfcmluZ1tpXTsKLQkJCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KF9fSVhHQkVfRkRJUl9JTklUX0RPTkUsCi0JCQkJCQkgICAgICAgJnR4X3JpbmctPnJlaW5pdF9zdGF0ZSkpCisJCQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChfX0lYR0JFX1RYX0ZESVJfSU5JVF9ET05FLAorCQkJCQkJICAgICAgICZ0eF9yaW5nLT5zdGF0ZSkpCiAJCQkJCXNjaGVkdWxlX3dvcmsoJmFkYXB0ZXItPmZkaXJfcmVpbml0X3Rhc2spOwogCQkJfQogCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOwogCX0KKworCWl4Z2JlX2NoZWNrX2Zhbl9mYWlsdXJlKGFkYXB0ZXIsIGVpY3IpOworCiAJaWYgKCF0ZXN0X2JpdChfX0lYR0JFX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCiAJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRUlNUywgSVhHQkVfRUlNU19PVEhFUik7CiAKQEAgLTE3NzksMTUgKzE5MzYsMjQgQEAKIAkJCQkJICAgdTY0IHFtYXNrKQogewogCXUzMiBtYXNrOworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAKLQlpZiAoYWRhcHRlci0+aHcubWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk4RUIpIHsKKwlzd2l0Y2ggKGh3LT5tYWMudHlwZSkgeworCWNhc2UgaXhnYmVfbWFjXzgyNTk4RUI6CiAJCW1hc2sgPSAoSVhHQkVfRUlNU19SVFhfUVVFVUUgJiBxbWFzayk7Ci0JCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0VJTVMsIG1hc2spOwotCX0gZWxzZSB7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRUlNUywgbWFzayk7CisJCWJyZWFrOworCWNhc2UgaXhnYmVfbWFjXzgyNTk5RUI6CisJY2FzZSBpeGdiZV9tYWNfWDU0MDoKIAkJbWFzayA9IChxbWFzayAmIDB4RkZGRkZGRkYpOwotCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9FSU1TX0VYKDApLCBtYXNrKTsKKwkJaWYgKG1hc2spCisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0VJTVNfRVgoMCksIG1hc2spOwogCQltYXNrID0gKHFtYXNrID4+IDMyKTsKLQkJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfRUlNU19FWCgxKSwgbWFzayk7CisJCWlmIChtYXNrKQorCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9FSU1TX0VYKDEpLCBtYXNrKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CiAJfQogCS8qIHNraXAgdGhlIGZsdXNoICovCiB9CkBAIC0xNzk2LDE1ICsxOTYyLDI0IEBACiAJCQkJCSAgICB1NjQgcW1hc2spCiB7CiAJdTMyIG1hc2s7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAotCWlmIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQikgeworCXN3aXRjaCAoaHctPm1hYy50eXBlKSB7CisJY2FzZSBpeGdiZV9tYWNfODI1OThFQjoKIAkJbWFzayA9IChJWEdCRV9FSU1TX1JUWF9RVUVVRSAmIHFtYXNrKTsKLQkJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfRUlNQywgbWFzayk7Ci0JfSBlbHNlIHsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9FSU1DLCBtYXNrKTsKKwkJYnJlYWs7CisJY2FzZSBpeGdiZV9tYWNfODI1OTlFQjoKKwljYXNlIGl4Z2JlX21hY19YNTQwOgogCQltYXNrID0gKHFtYXNrICYgMHhGRkZGRkZGRik7Ci0JCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0VJTUNfRVgoMCksIG1hc2spOworCQlpZiAobWFzaykKKwkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRUlNQ19FWCgwKSwgbWFzayk7CiAJCW1hc2sgPSAocW1hc2sgPj4gMzIpOwotCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9FSU1DX0VYKDEpLCBtYXNrKTsKKwkJaWYgKG1hc2spCisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0VJTUNfRVgoMSksIG1hc2spOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKIAl9CiAJLyogc2tpcCB0aGUgZmx1c2ggKi8KIH0KQEAgLTE4NDcsOCArMjAyMiwxMyBAQAogCWludCByX2lkeDsKIAlpbnQgaTsKIAorI2lmZGVmIENPTkZJR19JWEdCRV9EQ0EKKwlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0RDQV9FTkFCTEVEKQorCQlpeGdiZV91cGRhdGVfZGNhKHFfdmVjdG9yKTsKKyNlbmRpZgorCiAJcl9pZHggPSBmaW5kX2ZpcnN0X2JpdChxX3ZlY3Rvci0+cnhyX2lkeCwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlcyk7Ci0JZm9yIChpID0gMDsgIGkgPCBxX3ZlY3Rvci0+cnhyX2NvdW50OyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgcV92ZWN0b3ItPnJ4cl9jb3VudDsgaSsrKSB7CiAJCXJ4X3JpbmcgPSBhZGFwdGVyLT5yeF9yaW5nW3JfaWR4XTsKIAkJcnhfcmluZy0+dG90YWxfYnl0ZXMgPSAwOwogCQlyeF9yaW5nLT50b3RhbF9wYWNrZXRzID0gMDsKQEAgLTE4NTksNyArMjAzOSw2IEBACiAJaWYgKCFxX3ZlY3Rvci0+cnhyX2NvdW50KQogCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAKLQkvKiBkaXNhYmxlIGludGVycnVwdHMgb24gdGhpcyB2ZWN0b3Igb25seSAqLwogCS8qIEVJQU0gZGlzYWJsZWQgaW50ZXJydXB0cyAob24gdGhpcyB2ZWN0b3IpIGZvciB1cyAqLwogCW5hcGlfc2NoZWR1bGUoJnFfdmVjdG9yLT5uYXBpKTsKIApAQCAtMTkxOCwxMyArMjA5NywxNCBAQAogCWludCB3b3JrX2RvbmUgPSAwOwogCWxvbmcgcl9pZHg7CiAKLQlyX2lkeCA9IGZpbmRfZmlyc3RfYml0KHFfdmVjdG9yLT5yeHJfaWR4LCBhZGFwdGVyLT5udW1fcnhfcXVldWVzKTsKLQlyeF9yaW5nID0gYWRhcHRlci0+cnhfcmluZ1tyX2lkeF07CiAjaWZkZWYgQ09ORklHX0lYR0JFX0RDQQogCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRENBX0VOQUJMRUQpCi0JCWl4Z2JlX3VwZGF0ZV9yeF9kY2EoYWRhcHRlciwgcnhfcmluZyk7CisJCWl4Z2JlX3VwZGF0ZV9kY2EocV92ZWN0b3IpOwogI2VuZGlmCiAKKwlyX2lkeCA9IGZpbmRfZmlyc3RfYml0KHFfdmVjdG9yLT5yeHJfaWR4LCBhZGFwdGVyLT5udW1fcnhfcXVldWVzKTsKKwlyeF9yaW5nID0gYWRhcHRlci0+cnhfcmluZ1tyX2lkeF07CisKIAlpeGdiZV9jbGVhbl9yeF9pcnEocV92ZWN0b3IsIHJ4X3JpbmcsICZ3b3JrX2RvbmUsIGJ1ZGdldCk7CiAKIAkvKiBJZiBhbGwgUnggd29yayBkb25lLCBleGl0IHRoZSBwb2xsaW5nIG1vZGUgKi8KQEAgLTE5NTgsMTMgKzIxMzgsMTQgQEAKIAlsb25nIHJfaWR4OwogCWJvb2wgdHhfY2xlYW5fY29tcGxldGUgPSB0cnVlOwogCisjaWZkZWYgQ09ORklHX0lYR0JFX0RDQQorCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRENBX0VOQUJMRUQpCisJCWl4Z2JlX3VwZGF0ZV9kY2EocV92ZWN0b3IpOworI2VuZGlmCisKIAlyX2lkeCA9IGZpbmRfZmlyc3RfYml0KHFfdmVjdG9yLT50eHJfaWR4LCBhZGFwdGVyLT5udW1fdHhfcXVldWVzKTsKIAlmb3IgKGkgPSAwOyBpIDwgcV92ZWN0b3ItPnR4cl9jb3VudDsgaSsrKSB7CiAJCXJpbmcgPSBhZGFwdGVyLT50eF9yaW5nW3JfaWR4XTsKLSNpZmRlZiBDT05GSUdfSVhHQkVfRENBCi0JCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRENBX0VOQUJMRUQpCi0JCQlpeGdiZV91cGRhdGVfdHhfZGNhKGFkYXB0ZXIsIHJpbmcpOwotI2VuZGlmCiAJCXR4X2NsZWFuX2NvbXBsZXRlICY9IGl4Z2JlX2NsZWFuX3R4X2lycShxX3ZlY3RvciwgcmluZyk7CiAJCXJfaWR4ID0gZmluZF9uZXh0X2JpdChxX3ZlY3Rvci0+dHhyX2lkeCwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlcywKIAkJCQkgICAgICByX2lkeCArIDEpOwpAQCAtMTk3NywxMCArMjE1OCw2IEBACiAJcl9pZHggPSBmaW5kX2ZpcnN0X2JpdChxX3ZlY3Rvci0+cnhyX2lkeCwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlcyk7CiAJZm9yIChpID0gMDsgaSA8IHFfdmVjdG9yLT5yeHJfY291bnQ7IGkrKykgewogCQlyaW5nID0gYWRhcHRlci0+cnhfcmluZ1tyX2lkeF07Ci0jaWZkZWYgQ09ORklHX0lYR0JFX0RDQQotCQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0RDQV9FTkFCTEVEKQotCQkJaXhnYmVfdXBkYXRlX3J4X2RjYShhZGFwdGVyLCByaW5nKTsKLSNlbmRpZgogCQlpeGdiZV9jbGVhbl9yeF9pcnEocV92ZWN0b3IsIHJpbmcsICZ3b3JrX2RvbmUsIGJ1ZGdldCk7CiAJCXJfaWR4ID0gZmluZF9uZXh0X2JpdChxX3ZlY3Rvci0+cnhyX2lkeCwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlcywKIAkJCQkgICAgICByX2lkeCArIDEpOwpAQCAtMjAxOSwxMyArMjE5NiwxNCBAQAogCWludCB3b3JrX2RvbmUgPSAwOwogCWxvbmcgcl9pZHg7CiAKLQlyX2lkeCA9IGZpbmRfZmlyc3RfYml0KHFfdmVjdG9yLT50eHJfaWR4LCBhZGFwdGVyLT5udW1fdHhfcXVldWVzKTsKLQl0eF9yaW5nID0gYWRhcHRlci0+dHhfcmluZ1tyX2lkeF07CiAjaWZkZWYgQ09ORklHX0lYR0JFX0RDQQogCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRENBX0VOQUJMRUQpCi0JCWl4Z2JlX3VwZGF0ZV90eF9kY2EoYWRhcHRlciwgdHhfcmluZyk7CisJCWl4Z2JlX3VwZGF0ZV9kY2EocV92ZWN0b3IpOwogI2VuZGlmCiAKKwlyX2lkeCA9IGZpbmRfZmlyc3RfYml0KHFfdmVjdG9yLT50eHJfaWR4LCBhZGFwdGVyLT5udW1fdHhfcXVldWVzKTsKKwl0eF9yaW5nID0gYWRhcHRlci0+dHhfcmluZ1tyX2lkeF07CisKIAlpZiAoIWl4Z2JlX2NsZWFuX3R4X2lycShxX3ZlY3RvciwgdHhfcmluZykpCiAJCXdvcmtfZG9uZSA9IGJ1ZGdldDsKIApAQCAtMjA0NiwyNCArMjIyNCwyNyBAQAogCQkJCSAgICAgaW50IHJfaWR4KQogewogCXN0cnVjdCBpeGdiZV9xX3ZlY3RvciAqcV92ZWN0b3IgPSBhLT5xX3ZlY3Rvclt2X2lkeF07CisJc3RydWN0IGl4Z2JlX3JpbmcgKnJ4X3JpbmcgPSBhLT5yeF9yaW5nW3JfaWR4XTsKIAogCXNldF9iaXQocl9pZHgsIHFfdmVjdG9yLT5yeHJfaWR4KTsKIAlxX3ZlY3Rvci0+cnhyX2NvdW50Kys7CisJcnhfcmluZy0+cV92ZWN0b3IgPSBxX3ZlY3RvcjsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIG1hcF92ZWN0b3JfdG9fdHhxKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphLCBpbnQgdl9pZHgsCiAJCQkJICAgICBpbnQgdF9pZHgpCiB7CiAJc3RydWN0IGl4Z2JlX3FfdmVjdG9yICpxX3ZlY3RvciA9IGEtPnFfdmVjdG9yW3ZfaWR4XTsKKwlzdHJ1Y3QgaXhnYmVfcmluZyAqdHhfcmluZyA9IGEtPnR4X3JpbmdbdF9pZHhdOwogCiAJc2V0X2JpdCh0X2lkeCwgcV92ZWN0b3ItPnR4cl9pZHgpOwogCXFfdmVjdG9yLT50eHJfY291bnQrKzsKKwl0eF9yaW5nLT5xX3ZlY3RvciA9IHFfdmVjdG9yOwogfQogCiAvKioKICAqIGl4Z2JlX21hcF9yaW5nc190b192ZWN0b3JzIC0gTWFwcyBkZXNjcmlwdG9yIHJpbmdzIHRvIHZlY3RvcnMKICAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZSB0byBpbml0aWFsaXplCi0gKiBAdmVjdG9yczogYWxsb3R0ZWQgdmVjdG9yIGNvdW50IGZvciBkZXNjcmlwdG9yIHJpbmdzCiAgKgogICogVGhpcyBmdW5jdGlvbiBtYXBzIGRlc2NyaXB0b3IgcmluZ3MgdG8gdGhlIHF1ZXVlLXNwZWNpZmljIHZlY3RvcnMKICAqIHdlIHdlcmUgYWxsb3R0ZWQgdGhyb3VnaCB0aGUgTVNJLVggZW5hYmxpbmcgY29kZS4gIElkZWFsbHksIHdlJ2QgaGF2ZQpAQCAtMjA3MSw5ICsyMjUyLDkgQEAKICAqIGdyb3VwIHRoZSByaW5ncyBhcyAiZWZmaWNpZW50bHkiIGFzIHBvc3NpYmxlLiAgWW91IHdvdWxkIGFkZCBuZXcKICAqIG1hcHBpbmcgY29uZmlndXJhdGlvbnMgaW4gaGVyZS4KICAqKi8KLXN0YXRpYyBpbnQgaXhnYmVfbWFwX3JpbmdzX3RvX3ZlY3RvcnMoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCQkJICAgICAgaW50IHZlY3RvcnMpCitzdGF0aWMgaW50IGl4Z2JlX21hcF9yaW5nc190b192ZWN0b3JzKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQogeworCWludCBxX3ZlY3RvcnM7CiAJaW50IHZfc3RhcnQgPSAwOwogCWludCByeHJfaWR4ID0gMCwgdHhyX2lkeCA9IDA7CiAJaW50IHJ4cl9yZW1haW5pbmcgPSBhZGFwdGVyLT5udW1fcnhfcXVldWVzOwpAQCAtMjA4NiwxMSArMjI2NywxMyBAQAogCWlmICghKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19NU0lYX0VOQUJMRUQpKQogCQlnb3RvIG91dDsKIAorCXFfdmVjdG9ycyA9IGFkYXB0ZXItPm51bV9tc2l4X3ZlY3RvcnMgLSBOT05fUV9WRUNUT1JTOworCiAJLyoKIAkgKiBUaGUgaWRlYWwgY29uZmlndXJhdGlvbi4uLgogCSAqIFdlIGhhdmUgZW5vdWdoIHZlY3RvcnMgdG8gbWFwIG9uZSBwZXIgcXVldWUuCiAJICovCi0JaWYgKHZlY3RvcnMgPT0gYWRhcHRlci0+bnVtX3J4X3F1ZXVlcyArIGFkYXB0ZXItPm51bV90eF9xdWV1ZXMpIHsKKwlpZiAocV92ZWN0b3JzID09IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMgKyBhZGFwdGVyLT5udW1fdHhfcXVldWVzKSB7CiAJCWZvciAoOyByeHJfaWR4IDwgcnhyX3JlbWFpbmluZzsgdl9zdGFydCsrLCByeHJfaWR4KyspCiAJCQltYXBfdmVjdG9yX3RvX3J4cShhZGFwdGVyLCB2X3N0YXJ0LCByeHJfaWR4KTsKIApAQCAtMjEwNiwyMyArMjI4OSwyMCBAQAogCSAqIG11bHRpcGxlIHF1ZXVlcyBwZXIgdmVjdG9yLgogCSAqLwogCS8qIFJlLWFkanVzdGluZyAqcXB2IHRha2VzIGNhcmUgb2YgdGhlIHJlbWFpbmRlci4gKi8KLQlmb3IgKGkgPSB2X3N0YXJ0OyBpIDwgdmVjdG9yczsgaSsrKSB7Ci0JCXJxcHYgPSBESVZfUk9VTkRfVVAocnhyX3JlbWFpbmluZywgdmVjdG9ycyAtIGkpOworCWZvciAoaSA9IHZfc3RhcnQ7IGkgPCBxX3ZlY3RvcnM7IGkrKykgeworCQlycXB2ID0gRElWX1JPVU5EX1VQKHJ4cl9yZW1haW5pbmcsIHFfdmVjdG9ycyAtIGkpOwogCQlmb3IgKGogPSAwOyBqIDwgcnFwdjsgaisrKSB7CiAJCQltYXBfdmVjdG9yX3RvX3J4cShhZGFwdGVyLCBpLCByeHJfaWR4KTsKIAkJCXJ4cl9pZHgrKzsKIAkJCXJ4cl9yZW1haW5pbmctLTsKIAkJfQotCX0KLQlmb3IgKGkgPSB2X3N0YXJ0OyBpIDwgdmVjdG9yczsgaSsrKSB7Ci0JCXRxcHYgPSBESVZfUk9VTkRfVVAodHhyX3JlbWFpbmluZywgdmVjdG9ycyAtIGkpOworCQl0cXB2ID0gRElWX1JPVU5EX1VQKHR4cl9yZW1haW5pbmcsIHFfdmVjdG9ycyAtIGkpOwogCQlmb3IgKGogPSAwOyBqIDwgdHFwdjsgaisrKSB7CiAJCQltYXBfdmVjdG9yX3RvX3R4cShhZGFwdGVyLCBpLCB0eHJfaWR4KTsKIAkJCXR4cl9pZHgrKzsKIAkJCXR4cl9yZW1haW5pbmctLTsKIAkJfQogCX0KLQogb3V0OgogCXJldHVybiBlcnI7CiB9CkBAIC0yMTQ0LDMwICsyMzI0LDM2IEBACiAJLyogRGVjcmVtZW50IGZvciBPdGhlciBhbmQgVENQIFRpbWVyIHZlY3RvcnMgKi8KIAlxX3ZlY3RvcnMgPSBhZGFwdGVyLT5udW1fbXNpeF92ZWN0b3JzIC0gTk9OX1FfVkVDVE9SUzsKIAotCS8qIE1hcCB0aGUgVHgvUnggcmluZ3MgdG8gdGhlIHZlY3RvcnMgd2Ugd2VyZSBhbGxvdHRlZC4gKi8KLQllcnIgPSBpeGdiZV9tYXBfcmluZ3NfdG9fdmVjdG9ycyhhZGFwdGVyLCBxX3ZlY3RvcnMpOworCWVyciA9IGl4Z2JlX21hcF9yaW5nc190b192ZWN0b3JzKGFkYXB0ZXIpOwogCWlmIChlcnIpCi0JCWdvdG8gb3V0OworCQlyZXR1cm4gZXJyOwogCi0jZGVmaW5lIFNFVF9IQU5ETEVSKF92KSAoKCEoX3YpLT5yeHJfY291bnQpID8gJml4Z2JlX21zaXhfY2xlYW5fdHggOiBcCi0JCQkgKCEoX3YpLT50eHJfY291bnQpID8gJml4Z2JlX21zaXhfY2xlYW5fcnggOiBcCi0JCQkgJml4Z2JlX21zaXhfY2xlYW5fbWFueSkKKyNkZWZpbmUgU0VUX0hBTkRMRVIoX3YpICgoKF92KS0+cnhyX2NvdW50ICYmIChfdiktPnR4cl9jb3VudCkgICAgICAgIFwKKwkJCQkJICA/ICZpeGdiZV9tc2l4X2NsZWFuX21hbnkgOiBcCisJCQkgIChfdiktPnJ4cl9jb3VudCA/ICZpeGdiZV9tc2l4X2NsZWFuX3J4ICAgOiBcCisJCQkgIChfdiktPnR4cl9jb3VudCA/ICZpeGdiZV9tc2l4X2NsZWFuX3R4ICAgOiBcCisJCQkgIE5VTEwpCiAJZm9yICh2ZWN0b3IgPSAwOyB2ZWN0b3IgPCBxX3ZlY3RvcnM7IHZlY3RvcisrKSB7Ci0JCWhhbmRsZXIgPSBTRVRfSEFORExFUihhZGFwdGVyLT5xX3ZlY3Rvclt2ZWN0b3JdKTsKKwkJc3RydWN0IGl4Z2JlX3FfdmVjdG9yICpxX3ZlY3RvciA9IGFkYXB0ZXItPnFfdmVjdG9yW3ZlY3Rvcl07CisJCWhhbmRsZXIgPSBTRVRfSEFORExFUihxX3ZlY3Rvcik7CiAKIAkJaWYgKGhhbmRsZXIgPT0gJml4Z2JlX21zaXhfY2xlYW5fcngpIHsKLQkJCXNwcmludGYoYWRhcHRlci0+bmFtZVt2ZWN0b3JdLCAiJXMtJXMtJWQiLAotCQkJCW5ldGRldi0+bmFtZSwgInJ4IiwgcmkrKyk7CisJCQlzbnByaW50ZihxX3ZlY3Rvci0+bmFtZSwgc2l6ZW9mKHFfdmVjdG9yLT5uYW1lKSAtIDEsCisJCQkgICAgICAgICAiJXMtJXMtJWQiLCBuZXRkZXYtPm5hbWUsICJyeCIsIHJpKyspOwogCQl9IGVsc2UgaWYgKGhhbmRsZXIgPT0gJml4Z2JlX21zaXhfY2xlYW5fdHgpIHsKLQkJCXNwcmludGYoYWRhcHRlci0+bmFtZVt2ZWN0b3JdLCAiJXMtJXMtJWQiLAotCQkJCW5ldGRldi0+bmFtZSwgInR4IiwgdGkrKyk7Ci0JCX0gZWxzZQotCQkJc3ByaW50ZihhZGFwdGVyLT5uYW1lW3ZlY3Rvcl0sICIlcy0lcy0lZCIsCi0JCQkJbmV0ZGV2LT5uYW1lLCAiVHhSeCIsIHZlY3Rvcik7Ci0KKwkJCXNucHJpbnRmKHFfdmVjdG9yLT5uYW1lLCBzaXplb2YocV92ZWN0b3ItPm5hbWUpIC0gMSwKKwkJCSAgICAgICAgICIlcy0lcy0lZCIsIG5ldGRldi0+bmFtZSwgInR4IiwgdGkrKyk7CisJCX0gZWxzZSBpZiAoaGFuZGxlciA9PSAmaXhnYmVfbXNpeF9jbGVhbl9tYW55KSB7CisJCQlzbnByaW50ZihxX3ZlY3Rvci0+bmFtZSwgc2l6ZW9mKHFfdmVjdG9yLT5uYW1lKSAtIDEsCisJCQkgICAgICAgICAiJXMtJXMtJWQiLCBuZXRkZXYtPm5hbWUsICJUeFJ4IiwgcmkrKyk7CisJCQl0aSsrOworCQl9IGVsc2UgeworCQkJLyogc2tpcCB0aGlzIHVudXNlZCBxX3ZlY3RvciAqLworCQkJY29udGludWU7CisJCX0KIAkJZXJyID0gcmVxdWVzdF9pcnEoYWRhcHRlci0+bXNpeF9lbnRyaWVzW3ZlY3Rvcl0udmVjdG9yLAotCQkJCSAgaGFuZGxlciwgMCwgYWRhcHRlci0+bmFtZVt2ZWN0b3JdLAotCQkJCSAgYWRhcHRlci0+cV92ZWN0b3JbdmVjdG9yXSk7CisJCQkJICBoYW5kbGVyLCAwLCBxX3ZlY3Rvci0+bmFtZSwKKwkJCQkgIHFfdmVjdG9yKTsKIAkJaWYgKGVycikgewogCQkJZV9lcnIocHJvYmUsICJyZXF1ZXN0X2lycSBmYWlsZWQgZm9yIE1TSVggaW50ZXJydXB0ICIKIAkJCSAgICAgICJFcnJvcjogJWRcbiIsIGVycik7CkBAIC0yMTc1LDkgKzIzNjEsOSBAQAogCQl9CiAJfQogCi0Jc3ByaW50ZihhZGFwdGVyLT5uYW1lW3ZlY3Rvcl0sICIlczpsc2MiLCBuZXRkZXYtPm5hbWUpOworCXNwcmludGYoYWRhcHRlci0+bHNjX2ludF9uYW1lLCAiJXM6bHNjIiwgbmV0ZGV2LT5uYW1lKTsKIAllcnIgPSByZXF1ZXN0X2lycShhZGFwdGVyLT5tc2l4X2VudHJpZXNbdmVjdG9yXS52ZWN0b3IsCi0JCQkgIGl4Z2JlX21zaXhfbHNjLCAwLCBhZGFwdGVyLT5uYW1lW3ZlY3Rvcl0sIG5ldGRldik7CisJCQkgIGl4Z2JlX21zaXhfbHNjLCAwLCBhZGFwdGVyLT5sc2NfaW50X25hbWUsIG5ldGRldik7CiAJaWYgKGVycikgewogCQllX2Vycihwcm9iZSwgInJlcXVlc3RfaXJxIGZvciBtc2l4X2xzYyBmYWlsZWQ6ICVkXG4iLCBlcnIpOwogCQlnb3RvIGZyZWVfcXVldWVfaXJxczsKQEAgLTIxOTMsMTcgKzIzNzksMTYgQEAKIAlwY2lfZGlzYWJsZV9tc2l4KGFkYXB0ZXItPnBkZXYpOwogCWtmcmVlKGFkYXB0ZXItPm1zaXhfZW50cmllcyk7CiAJYWRhcHRlci0+bXNpeF9lbnRyaWVzID0gTlVMTDsKLW91dDoKIAlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgdm9pZCBpeGdiZV9zZXRfaXRyKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQogewogCXN0cnVjdCBpeGdiZV9xX3ZlY3RvciAqcV92ZWN0b3IgPSBhZGFwdGVyLT5xX3ZlY3RvclswXTsKLQl1OCBjdXJyZW50X2l0cjsKLQl1MzIgbmV3X2l0ciA9IHFfdmVjdG9yLT5laXRyOwogCXN0cnVjdCBpeGdiZV9yaW5nICpyeF9yaW5nID0gYWRhcHRlci0+cnhfcmluZ1swXTsKIAlzdHJ1Y3QgaXhnYmVfcmluZyAqdHhfcmluZyA9IGFkYXB0ZXItPnR4X3JpbmdbMF07CisJdTMyIG5ld19pdHIgPSBxX3ZlY3Rvci0+ZWl0cjsKKwl1OCBjdXJyZW50X2l0cjsKIAogCXFfdmVjdG9yLT50eF9pdHIgPSBpeGdiZV91cGRhdGVfaXRyKGFkYXB0ZXIsIG5ld19pdHIsCiAJCQkJCSAgICBxX3ZlY3Rvci0+dHhfaXRyLApAQCAtMjIzMyw5ICsyNDE4LDkgQEAKIAogCWlmIChuZXdfaXRyICE9IHFfdmVjdG9yLT5laXRyKSB7CiAJCS8qIGRvIGFuIGV4cG9uZW50aWFsIHNtb290aGluZyAqLwotCQluZXdfaXRyID0gKChxX3ZlY3Rvci0+ZWl0ciAqIDkwKS8xMDApICsgKChuZXdfaXRyICogMTApLzEwMCk7CisJCW5ld19pdHIgPSAoKHFfdmVjdG9yLT5laXRyICogOSkgKyBuZXdfaXRyKS8xMDsKIAotCQkvKiBzYXZlIHRoZSBhbGdvcml0aG0gdmFsdWUgaGVyZSwgbm90IHRoZSBzbW9vdGhlZCBvbmUgKi8KKwkJLyogc2F2ZSB0aGUgYWxnb3JpdGhtIHZhbHVlIGhlcmUgKi8KIAkJcV92ZWN0b3ItPmVpdHIgPSBuZXdfaXRyOwogCiAJCWl4Z2JlX3dyaXRlX2VpdHIocV92ZWN0b3IpOwpAQCAtMjI1NiwxMiArMjQ0MSwxNyBAQAogCQltYXNrIHw9IElYR0JFX0VJTVNfR1BJX1NEUDA7CiAJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19GQU5fRkFJTF9DQVBBQkxFKQogCQltYXNrIHw9IElYR0JFX0VJTVNfR1BJX1NEUDE7Ci0JaWYgKGFkYXB0ZXItPmh3Lm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKSB7CisJc3dpdGNoIChhZGFwdGVyLT5ody5tYWMudHlwZSkgeworCWNhc2UgaXhnYmVfbWFjXzgyNTk5RUI6CisJY2FzZSBpeGdiZV9tYWNfWDU0MDoKIAkJbWFzayB8PSBJWEdCRV9FSU1TX0VDQzsKIAkJbWFzayB8PSBJWEdCRV9FSU1TX0dQSV9TRFAxOwogCQltYXNrIHw9IElYR0JFX0VJTVNfR1BJX1NEUDI7CiAJCWlmIChhZGFwdGVyLT5udW1fdmZzKQogCQkJbWFzayB8PSBJWEdCRV9FSU1TX01BSUxCT1g7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOwogCX0KIAlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0ZESVJfSEFTSF9DQVBBQkxFIHx8CiAJICAgIGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19GRElSX1BFUkZFQ1RfQ0FQQUJMRSkKQEAgLTIzMTcsMTMgKzI1MDcsMjAgQEAKIAlpZiAoZWljciAmIElYR0JFX0VJQ1JfTFNDKQogCQlpeGdiZV9jaGVja19sc2MoYWRhcHRlcik7CiAKLQlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKQorCXN3aXRjaCAoaHctPm1hYy50eXBlKSB7CisJY2FzZSBpeGdiZV9tYWNfODI1OTlFQjoKIAkJaXhnYmVfY2hlY2tfc2ZwX2V2ZW50KGFkYXB0ZXIsIGVpY3IpOworCQlpZiAoKGFkYXB0ZXItPmZsYWdzMiAmIElYR0JFX0ZMQUcyX1RFTVBfU0VOU09SX0NBUEFCTEUpICYmCisJCSAgICAoKGVpY3IgJiBJWEdCRV9FSUNSX0dQSV9TRFAwKSB8fCAoZWljciAmIElYR0JFX0VJQ1JfTFNDKSkpIHsKKwkJCWFkYXB0ZXItPmludGVycnVwdF9ldmVudCA9IGVpY3I7CisJCQlzY2hlZHVsZV93b3JrKCZhZGFwdGVyLT5jaGVja19vdmVydGVtcF90YXNrKTsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CiAKIAlpeGdiZV9jaGVja19mYW5fZmFpbHVyZShhZGFwdGVyLCBlaWNyKTsKLQlpZiAoKGFkYXB0ZXItPmZsYWdzMiAmIElYR0JFX0ZMQUcyX1RFTVBfU0VOU09SX0NBUEFCTEUpICYmCi0JICAgICgoZWljciAmIElYR0JFX0VJQ1JfR1BJX1NEUDApIHx8IChlaWNyICYgSVhHQkVfRUlDUl9MU0MpKSkKLQkJc2NoZWR1bGVfd29yaygmYWRhcHRlci0+Y2hlY2tfb3ZlcnRlbXBfdGFzayk7CiAKIAlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKCYocV92ZWN0b3ItPm5hcGkpKSkgewogCQlhZGFwdGVyLT50eF9yaW5nWzBdLT50b3RhbF9wYWNrZXRzID0gMDsKQEAgLTI0MTYsMTQgKzI2MTMsMjAgQEAKICAqKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBpeGdiZV9pcnFfZGlzYWJsZShzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcikKIHsKLQlpZiAoYWRhcHRlci0+aHcubWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk4RUIpIHsKKwlzd2l0Y2ggKGFkYXB0ZXItPmh3Lm1hYy50eXBlKSB7CisJY2FzZSBpeGdiZV9tYWNfODI1OThFQjoKIAkJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfRUlNQywgfjApOwotCX0gZWxzZSB7CisJCWJyZWFrOworCWNhc2UgaXhnYmVfbWFjXzgyNTk5RUI6CisJY2FzZSBpeGdiZV9tYWNfWDU0MDoKIAkJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfRUlNQywgMHhGRkZGMDAwMCk7CiAJCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0VJTUNfRVgoMCksIH4wKTsKIAkJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfRUlNQ19FWCgxKSwgfjApOwogCQlpZiAoYWRhcHRlci0+bnVtX3ZmcyA+IDMyKQogCQkJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfRUlUUlNFTCwgMCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOwogCX0KIAlJWEdCRV9XUklURV9GTFVTSCgmYWRhcHRlci0+aHcpOwogCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfTVNJWF9FTkFCTEVEKSB7CkBAIC0yNDY5LDcgKzI2NzIsNyBAQAogCXU2NCB0ZGJhID0gcmluZy0+ZG1hOwogCWludCB3YWl0X2xvb3AgPSAxMDsKIAl1MzIgdHhkY3RsOwotCXUxNiByZWdfaWR4ID0gcmluZy0+cmVnX2lkeDsKKwl1OCByZWdfaWR4ID0gcmluZy0+cmVnX2lkeDsKIAogCS8qIGRpc2FibGUgcXVldWUgdG8gYXZvaWQgaXNzdWVzIHdoaWxlIHVwZGF0aW5nIHN0YXRlICovCiAJdHhkY3RsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1RYRENUTChyZWdfaWR4KSk7CkBAIC0yNDg0LDggKzI2ODcsNyBAQAogCQkJcmluZy0+Y291bnQgKiBzaXplb2YodW5pb24gaXhnYmVfYWR2X3R4X2Rlc2MpKTsKIAlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1RESChyZWdfaWR4KSwgMCk7CiAJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9URFQocmVnX2lkeCksIDApOwotCXJpbmctPmhlYWQgPSBJWEdCRV9UREgocmVnX2lkeCk7Ci0JcmluZy0+dGFpbCA9IElYR0JFX1REVChyZWdfaWR4KTsKKwlyaW5nLT50YWlsID0gaHctPmh3X2FkZHIgKyBJWEdCRV9URFQocmVnX2lkeCk7CiAKIAkvKiBjb25maWd1cmUgZmV0Y2hpbmcgdGhyZXNob2xkcyAqLwogCWlmIChhZGFwdGVyLT5yeF9pdHJfc2V0dGluZyA9PSAwKSB7CkBAIC0yNTAxLDcgKzI3MDMsMTYgQEAKIAl9CiAKIAkvKiByZWluaXRpYWxpemUgZmxvd2RpcmVjdG9yIHN0YXRlICovCi0Jc2V0X2JpdChfX0lYR0JFX0ZESVJfSU5JVF9ET05FLCAmcmluZy0+cmVpbml0X3N0YXRlKTsKKwlpZiAoKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19GRElSX0hBU0hfQ0FQQUJMRSkgJiYKKwkgICAgYWRhcHRlci0+YXRyX3NhbXBsZV9yYXRlKSB7CisJCXJpbmctPmF0cl9zYW1wbGVfcmF0ZSA9IGFkYXB0ZXItPmF0cl9zYW1wbGVfcmF0ZTsKKwkJcmluZy0+YXRyX2NvdW50ID0gMDsKKwkJc2V0X2JpdChfX0lYR0JFX1RYX0ZESVJfSU5JVF9ET05FLCAmcmluZy0+c3RhdGUpOworCX0gZWxzZSB7CisJCXJpbmctPmF0cl9zYW1wbGVfcmF0ZSA9IDA7CisJfQorCisJY2xlYXJfYml0KF9fSVhHQkVfSEFOR19DSEVDS19BUk1FRCwgJnJpbmctPnN0YXRlKTsKIAogCS8qIGVuYWJsZSBxdWV1ZSAqLwogCXR4ZGN0bCB8PSBJWEdCRV9UWERDVExfRU5BQkxFOwpAQCAtMjU5MiwxNiArMjgwMywyMiBAQAogCQkJCSAgIHN0cnVjdCBpeGdiZV9yaW5nICpyeF9yaW5nKQogewogCXUzMiBzcnJjdGw7Ci0JaW50IGluZGV4OwotCXN0cnVjdCBpeGdiZV9yaW5nX2ZlYXR1cmUgKmZlYXR1cmUgPSBhZGFwdGVyLT5yaW5nX2ZlYXR1cmU7CisJdTggcmVnX2lkeCA9IHJ4X3JpbmctPnJlZ19pZHg7CiAKLQlpbmRleCA9IHJ4X3JpbmctPnJlZ19pZHg7Ci0JaWYgKGFkYXB0ZXItPmh3Lm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OEVCKSB7Ci0JCXVuc2lnbmVkIGxvbmcgbWFzazsKLQkJbWFzayA9ICh1bnNpZ25lZCBsb25nKSBmZWF0dXJlW1JJTkdfRl9SU1NdLm1hc2s7Ci0JCWluZGV4ID0gaW5kZXggJiBtYXNrOworCXN3aXRjaCAoYWRhcHRlci0+aHcubWFjLnR5cGUpIHsKKwljYXNlIGl4Z2JlX21hY184MjU5OEVCOiB7CisJCXN0cnVjdCBpeGdiZV9yaW5nX2ZlYXR1cmUgKmZlYXR1cmUgPSBhZGFwdGVyLT5yaW5nX2ZlYXR1cmU7CisJCWNvbnN0IGludCBtYXNrID0gZmVhdHVyZVtSSU5HX0ZfUlNTXS5tYXNrOworCQlyZWdfaWR4ID0gcmVnX2lkeCAmIG1hc2s7CiAJfQotCXNycmN0bCA9IElYR0JFX1JFQURfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfU1JSQ1RMKGluZGV4KSk7CisJCWJyZWFrOworCWNhc2UgaXhnYmVfbWFjXzgyNTk5RUI6CisJY2FzZSBpeGdiZV9tYWNfWDU0MDoKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlzcnJjdGwgPSBJWEdCRV9SRUFEX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX1NSUkNUTChyZWdfaWR4KSk7CiAKIAlzcnJjdGwgJj0gfklYR0JFX1NSUkNUTF9CU0laRUhEUl9NQVNLOwogCXNycmN0bCAmPSB+SVhHQkVfU1JSQ1RMX0JTSVpFUEtUX01BU0s7CkBAIC0yNjExLDcgKzI4MjgsNyBAQAogCXNycmN0bCB8PSAoSVhHQkVfUlhfSERSX1NJWkUgPDwgSVhHQkVfU1JSQ1RMX0JTSVpFSERSU0laRV9TSElGVCkgJgogCQkgIElYR0JFX1NSUkNUTF9CU0laRUhEUl9NQVNLOwogCi0JaWYgKHJ4X3JpbmctPmZsYWdzICYgSVhHQkVfUklOR19SWF9QU19FTkFCTEVEKSB7CisJaWYgKHJpbmdfaXNfcHNfZW5hYmxlZChyeF9yaW5nKSkgewogI2lmIChQQUdFX1NJWkUgLyAyKSA+IElYR0JFX01BWF9SWEJVRkZFUgogCQlzcnJjdGwgfD0gSVhHQkVfTUFYX1JYQlVGRkVSID4+IElYR0JFX1NSUkNUTF9CU0laRVBLVF9TSElGVDsKICNlbHNlCkBAIC0yNjI0LDcgKzI4NDEsNyBAQAogCQlzcnJjdGwgfD0gSVhHQkVfU1JSQ1RMX0RFU0NUWVBFX0FEVl9PTkVCVUY7CiAJfQogCi0JSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfU1JSQ1RMKGluZGV4KSwgc3JyY3RsKTsKKwlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9TUlJDVEwocmVnX2lkeCksIHNycmN0bCk7CiB9CiAKIHN0YXRpYyB2b2lkIGl4Z2JlX3NldHVwX21ycWMoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpCkBAIC0yNjk0LDE5ICsyOTExLDM2IEBACiB9CiAKIC8qKgorICogaXhnYmVfY2xlYXJfcnNjY3RsIC0gZGlzYWJsZSBSU0MgZm9yIHRoZSBpbmRpY2F0ZWQgcmluZworICogQGFkYXB0ZXI6IGFkZHJlc3Mgb2YgYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqIEByaW5nOiBzdHJ1Y3R1cmUgY29udGFpbmluZyByaW5nIHNwZWNpZmljIGRhdGEKKyAqKi8KK3ZvaWQgaXhnYmVfY2xlYXJfcnNjY3RsKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl4Z2JlX3JpbmcgKnJpbmcpCit7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwl1MzIgcnNjY3RybDsKKwl1OCByZWdfaWR4ID0gcmluZy0+cmVnX2lkeDsKKworCXJzY2N0cmwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUlNDQ1RMKHJlZ19pZHgpKTsKKwlyc2NjdHJsICY9IH5JWEdCRV9SU0NDVExfUlNDRU47CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SU0NDVEwocmVnX2lkeCksIHJzY2N0cmwpOworfQorCisvKioKICAqIGl4Z2JlX2NvbmZpZ3VyZV9yc2NjdGwgLSBlbmFibGUgUlNDIGZvciB0aGUgaW5kaWNhdGVkIHJpbmcKICAqIEBhZGFwdGVyOiAgICBhZGRyZXNzIG9mIGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCiAgKiBAaW5kZXg6ICAgICAgaW5kZXggb2YgcmluZyB0byBzZXQKICAqKi8KLXN0YXRpYyB2b2lkIGl4Z2JlX2NvbmZpZ3VyZV9yc2NjdGwoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsCit2b2lkIGl4Z2JlX2NvbmZpZ3VyZV9yc2NjdGwoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCQkJICAgc3RydWN0IGl4Z2JlX3JpbmcgKnJpbmcpCiB7CiAJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAl1MzIgcnNjY3RybDsKIAlpbnQgcnhfYnVmX2xlbjsKLQl1MTYgcmVnX2lkeCA9IHJpbmctPnJlZ19pZHg7CisJdTggcmVnX2lkeCA9IHJpbmctPnJlZ19pZHg7CiAKLQlpZiAoIShhZGFwdGVyLT5mbGFnczIgJiBJWEdCRV9GTEFHMl9SU0NfRU5BQkxFRCkpCisJaWYgKCFyaW5nX2lzX3JzY19lbmFibGVkKHJpbmcpKQogCQlyZXR1cm47CiAKIAlyeF9idWZfbGVuID0gcmluZy0+cnhfYnVmX2xlbjsKQEAgLTI3MTcsNyArMjk1MSw3IEBACiAJICogdG90YWwgc2l6ZSBvZiBtYXggZGVzYyAqIGJ1Zl9sZW4gaXMgbm90IGdyZWF0ZXIKIAkgKiB0aGFuIDY1NTM1CiAJICovCi0JaWYgKHJpbmctPmZsYWdzICYgSVhHQkVfUklOR19SWF9QU19FTkFCTEVEKSB7CisJaWYgKHJpbmdfaXNfcHNfZW5hYmxlZChyaW5nKSkgewogI2lmIChNQVhfU0tCX0ZSQUdTID4gMTYpCiAJCXJzY2N0cmwgfD0gSVhHQkVfUlNDQ1RMX01BWERFU0NfMTY7CiAjZWxpZiAoTUFYX1NLQl9GUkFHUyA+IDgpCkBAIC0yNzcwLDkgKzMwMDQsOSBAQAogCQkJCSAgICAgICBzdHJ1Y3QgaXhnYmVfcmluZyAqcmluZykKIHsKIAlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwotCWludCByZWdfaWR4ID0gcmluZy0+cmVnX2lkeDsKIAlpbnQgd2FpdF9sb29wID0gSVhHQkVfTUFYX1JYX0RFU0NfUE9MTDsKIAl1MzIgcnhkY3RsOworCXU4IHJlZ19pZHggPSByaW5nLT5yZWdfaWR4OwogCiAJLyogUlhEQ1RMLkVOIHdpbGwgcmV0dXJuIDAgb24gODI1OTggaWYgbGluayBpcyBkb3duLCBzbyBza2lwIGl0ICovCiAJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQiAmJgpAQCAtMjc5Niw3ICszMDMwLDcgQEAKIAlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCXU2NCByZGJhID0gcmluZy0+ZG1hOwogCXUzMiByeGRjdGw7Ci0JdTE2IHJlZ19pZHggPSByaW5nLT5yZWdfaWR4OworCXU4IHJlZ19pZHggPSByaW5nLT5yZWdfaWR4OwogCiAJLyogZGlzYWJsZSBxdWV1ZSB0byBhdm9pZCBpc3N1ZXMgd2hpbGUgdXBkYXRpbmcgc3RhdGUgKi8KIAlyeGRjdGwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUlhEQ1RMKHJlZ19pZHgpKTsKQEAgLTI4MTAsOCArMzA0NCw3IEBACiAJCQlyaW5nLT5jb3VudCAqIHNpemVvZih1bmlvbiBpeGdiZV9hZHZfcnhfZGVzYykpOwogCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUkRIKHJlZ19pZHgpLCAwKTsKIAlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JEVChyZWdfaWR4KSwgMCk7Ci0JcmluZy0+aGVhZCA9IElYR0JFX1JESChyZWdfaWR4KTsKLQlyaW5nLT50YWlsID0gSVhHQkVfUkRUKHJlZ19pZHgpOworCXJpbmctPnRhaWwgPSBody0+aHdfYWRkciArIElYR0JFX1JEVChyZWdfaWR4KTsKIAogCWl4Z2JlX2NvbmZpZ3VyZV9zcnJjdGwoYWRhcHRlciwgcmluZyk7CiAJaXhnYmVfY29uZmlndXJlX3JzY2N0bChhZGFwdGVyLCByaW5nKTsKQEAgLTI4MzMsNyArMzA2Niw3IEBACiAJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SWERDVEwocmVnX2lkeCksIHJ4ZGN0bCk7CiAKIAlpeGdiZV9yeF9kZXNjX3F1ZXVlX2VuYWJsZShhZGFwdGVyLCByaW5nKTsKLQlpeGdiZV9hbGxvY19yeF9idWZmZXJzKGFkYXB0ZXIsIHJpbmcsIElYR0JFX0RFU0NfVU5VU0VEKHJpbmcpKTsKKwlpeGdiZV9hbGxvY19yeF9idWZmZXJzKHJpbmcsIElYR0JFX0RFU0NfVU5VU0VEKHJpbmcpKTsKIH0KIAogc3RhdGljIHZvaWQgaXhnYmVfc2V0dXBfcHNydHlwZShzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcikKQEAgLTI4OTksNiArMzEzMiw5IEBACiAKIAkvKiBlbmFibGUgVHggbG9vcGJhY2sgZm9yIFZGL1BGIGNvbW11bmljYXRpb24gKi8KIAlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1BGRFRYR1NXQywgSVhHQkVfUEZEVFhHU1dDX1ZUX0xCRU4pOworCS8qIEVuYWJsZSBNQUMgQW50aS1TcG9vZmluZyAqLworCWh3LT5tYWMub3BzLnNldF9tYWNfYW50aV9zcG9vZmluZyhodywgKGFkYXB0ZXItPm51bV92ZnMgIT0gMCksCisJCQkJCSAgYWRhcHRlci0+bnVtX3Zmcyk7CiB9CiAKIHN0YXRpYyB2b2lkIGl4Z2JlX3NldF9yeF9idWZmZXJfbGVuKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQpAQCAtMjk1NiwyNCArMzE5MiwzMiBAQAogCQlyeF9yaW5nLT5yeF9idWZfbGVuID0gcnhfYnVmX2xlbjsKIAogCQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX1JYX1BTX0VOQUJMRUQpCi0JCQlyeF9yaW5nLT5mbGFncyB8PSBJWEdCRV9SSU5HX1JYX1BTX0VOQUJMRUQ7CisJCQlzZXRfcmluZ19wc19lbmFibGVkKHJ4X3JpbmcpOwogCQllbHNlCi0JCQlyeF9yaW5nLT5mbGFncyAmPSB+SVhHQkVfUklOR19SWF9QU19FTkFCTEVEOworCQkJY2xlYXJfcmluZ19wc19lbmFibGVkKHJ4X3JpbmcpOworCisJCWlmIChhZGFwdGVyLT5mbGFnczIgJiBJWEdCRV9GTEFHMl9SU0NfRU5BQkxFRCkKKwkJCXNldF9yaW5nX3JzY19lbmFibGVkKHJ4X3JpbmcpOworCQllbHNlCisJCQljbGVhcl9yaW5nX3JzY19lbmFibGVkKHJ4X3JpbmcpOwogCiAjaWZkZWYgSVhHQkVfRkNPRQogCQlpZiAobmV0ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfRkNPRV9NVFUpIHsKIAkJCXN0cnVjdCBpeGdiZV9yaW5nX2ZlYXR1cmUgKmY7CiAJCQlmID0gJmFkYXB0ZXItPnJpbmdfZmVhdHVyZVtSSU5HX0ZfRkNPRV07CiAJCQlpZiAoKGkgPj0gZi0+bWFzaykgJiYgKGkgPCBmLT5tYXNrICsgZi0+aW5kaWNlcykpIHsKLQkJCQlyeF9yaW5nLT5mbGFncyAmPSB+SVhHQkVfUklOR19SWF9QU19FTkFCTEVEOworCQkJCWNsZWFyX3JpbmdfcHNfZW5hYmxlZChyeF9yaW5nKTsKIAkJCQlpZiAocnhfYnVmX2xlbiA8IElYR0JFX0ZDT0VfSlVNQk9fRlJBTUVfU0laRSkKIAkJCQkJcnhfcmluZy0+cnhfYnVmX2xlbiA9CiAJCQkJCQlJWEdCRV9GQ09FX0pVTUJPX0ZSQU1FX1NJWkU7CisJCQl9IGVsc2UgaWYgKCFyaW5nX2lzX3JzY19lbmFibGVkKHJ4X3JpbmcpICYmCisJCQkJICAgIXJpbmdfaXNfcHNfZW5hYmxlZChyeF9yaW5nKSkgeworCQkJCXJ4X3JpbmctPnJ4X2J1Zl9sZW4gPQorCQkJCQkJSVhHQkVfRkNPRV9KVU1CT19GUkFNRV9TSVpFOwogCQkJfQogCQl9CiAjZW5kaWYgLyogSVhHQkVfRkNPRSAqLwogCX0KLQogfQogCiBzdGF0aWMgdm9pZCBpeGdiZV9zZXR1cF9yZHJ4Y3RsKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQpAQCAtMjk5Niw2ICszMjQwLDcgQEAKIAkJcmRyeGN0bCB8PSBJWEdCRV9SRFJYQ1RMX01WTUVOOwogCQlicmVhazsKIAljYXNlIGl4Z2JlX21hY184MjU5OUVCOgorCWNhc2UgaXhnYmVfbWFjX1g1NDA6CiAJCS8qIERpc2FibGUgUlNDIGZvciBBQ0sgcGFja2V0cyAqLwogCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JTQ0RCVSwKIAkJICAgKElYR0JFX1JTQ0RCVV9SU0NBQ0tESVMgfCBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUlNDREJVKSkpOwpAQCAtMzEyMyw2ICszMzY4LDcgQEAKIAkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WTE5DVFJMLCB2bG5jdHJsKTsKIAkJYnJlYWs7CiAJY2FzZSBpeGdiZV9tYWNfODI1OTlFQjoKKwljYXNlIGl4Z2JlX21hY19YNTQwOgogCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKSB7CiAJCQlqID0gYWRhcHRlci0+cnhfcmluZ1tpXS0+cmVnX2lkeDsKIAkJCXZsbmN0cmwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUlhEQ1RMKGopKTsKQEAgLTMxNTIsNiArMzM5OCw3IEBACiAJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVkxOQ1RSTCwgdmxuY3RybCk7CiAJCWJyZWFrOwogCWNhc2UgaXhnYmVfbWFjXzgyNTk5RUI6CisJY2FzZSBpeGdiZV9tYWNfWDU0MDoKIAkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykgewogCQkJaiA9IGFkYXB0ZXItPnJ4X3JpbmdbaV0tPnJlZ19pZHg7CiAJCQl2bG5jdHJsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1JYRENUTChqKSk7CkBAIC0zMzQ5LDggKzM1OTYsNiBAQAogewogCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJaW50IG1heF9mcmFtZSA9IGFkYXB0ZXItPm5ldGRldi0+bXR1ICsgRVRIX0hMRU4gKyBFVEhfRkNTX0xFTjsKLQl1MzIgdHhkY3RsOwotCWludCBpLCBqOwogCiAJaWYgKCEoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0RDQl9FTkFCTEVEKSkgewogCQlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OEVCKQpAQCAtMzM2NiwyNSArMzYxMSwxOCBAQAogCQltYXhfZnJhbWUgPSBtYXgobWF4X2ZyYW1lLCBJWEdCRV9GQ09FX0pVTUJPX0ZSQU1FX1NJWkUpOwogI2VuZGlmCiAKLQlpeGdiZV9kY2JfY2FsY3VsYXRlX3RjX2NyZWRpdHMoJmFkYXB0ZXItPmRjYl9jZmcsIG1heF9mcmFtZSwKKwlpeGdiZV9kY2JfY2FsY3VsYXRlX3RjX2NyZWRpdHMoaHcsICZhZGFwdGVyLT5kY2JfY2ZnLCBtYXhfZnJhbWUsCiAJCQkJCURDQl9UWF9DT05GSUcpOwotCWl4Z2JlX2RjYl9jYWxjdWxhdGVfdGNfY3JlZGl0cygmYWRhcHRlci0+ZGNiX2NmZywgbWF4X2ZyYW1lLAorCWl4Z2JlX2RjYl9jYWxjdWxhdGVfdGNfY3JlZGl0cyhodywgJmFkYXB0ZXItPmRjYl9jZmcsIG1heF9mcmFtZSwKIAkJCQkJRENCX1JYX0NPTkZJRyk7CiAKLQkvKiByZWNvbmZpZ3VyZSB0aGUgaGFyZHdhcmUgKi8KLQlpeGdiZV9kY2JfaHdfY29uZmlnKCZhZGFwdGVyLT5odywgJmFkYXB0ZXItPmRjYl9jZmcpOwotCi0JZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGkrKykgewotCQlqID0gYWRhcHRlci0+dHhfcmluZ1tpXS0+cmVnX2lkeDsKLQkJdHhkY3RsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1RYRENUTChqKSk7Ci0JCS8qIFBUaHJlc2ggd29ya2Fyb3VuZCBmb3IgVHggaGFuZyB3aXRoIERGUCBlbmFibGVkLiAqLwotCQl0eGRjdGwgfD0gMzI7Ci0JCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVFhEQ1RMKGopLCB0eGRjdGwpOwotCX0KIAkvKiBFbmFibGUgVkxBTiB0YWcgaW5zZXJ0L3N0cmlwICovCiAJYWRhcHRlci0+bmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1ZMQU5fUlg7CiAKIAlody0+bWFjLm9wcy5zZXRfdmZ0YSgmYWRhcHRlci0+aHcsIDAsIDAsIHRydWUpOworCisJLyogcmVjb25maWd1cmUgdGhlIGhhcmR3YXJlICovCisJaXhnYmVfZGNiX2h3X2NvbmZpZyhodywgJmFkYXB0ZXItPmRjYl9jZmcpOwogfQogCiAjZW5kaWYKQEAgLTM1MTYsOCArMzc1NCw5IEBACiAJCWNhc2UgaXhnYmVfbWFjXzgyNTk4RUI6CiAJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0VJQU0sIElYR0JFX0VJQ1NfUlRYX1FVRVVFKTsKIAkJCWJyZWFrOwotCQlkZWZhdWx0OgogCQljYXNlIGl4Z2JlX21hY184MjU5OUVCOgorCQljYXNlIGl4Z2JlX21hY19YNTQwOgorCQlkZWZhdWx0OgogCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9FSUFNX0VYKDApLCAweEZGRkZGRkZGKTsKIAkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRUlBTV9FWCgxKSwgMHhGRkZGRkZGRik7CiAJCQlicmVhazsKQEAgLTM1NjEsMTMgKzM4MDAsMjQgQEAKIAllbHNlCiAJCWl4Z2JlX2NvbmZpZ3VyZV9tc2lfYW5kX2xlZ2FjeShhZGFwdGVyKTsKIAotCS8qIGVuYWJsZSB0aGUgb3B0aWNzICovCi0JaWYgKGh3LT5waHkubXVsdGlzcGVlZF9maWJlcikKKwkvKiBlbmFibGUgdGhlIG9wdGljcyBmb3IgYm90aCBtdWx0LXNwZWVkIGZpYmVyIGFuZCA4MjU5OSBTRlArIGZpYmVyICovCisJaWYgKGh3LT5tYWMub3BzLmVuYWJsZV90eF9sYXNlciAmJgorCSAgICAoKGh3LT5waHkubXVsdGlzcGVlZF9maWJlcikgfHwKKwkgICAgICgoaHctPm1hYy5vcHMuZ2V0X21lZGlhX3R5cGUoaHcpID09IGl4Z2JlX21lZGlhX3R5cGVfZmliZXIpICYmCisJICAgICAgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikpKSkKIAkJaHctPm1hYy5vcHMuZW5hYmxlX3R4X2xhc2VyKGh3KTsKIAogCWNsZWFyX2JpdChfX0lYR0JFX0RPV04sICZhZGFwdGVyLT5zdGF0ZSk7CiAJaXhnYmVfbmFwaV9lbmFibGVfYWxsKGFkYXB0ZXIpOwogCisJaWYgKGl4Z2JlX2lzX3NmcChodykpIHsKKwkJaXhnYmVfc2ZwX2xpbmtfY29uZmlnKGFkYXB0ZXIpOworCX0gZWxzZSB7CisJCWVyciA9IGl4Z2JlX25vbl9zZnBfbGlua19jb25maWcoaHcpOworCQlpZiAoZXJyKQorCQkJZV9lcnIocHJvYmUsICJsaW5rX2NvbmZpZyBGQUlMRUQgJWRcbiIsIGVycik7CisJfQorCiAJLyogY2xlYXIgYW55IHBlbmRpbmcgaW50ZXJydXB0cywgbWF5IGF1dG8gbWFzayAqLwogCUlYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9FSUNSKTsKIAlpeGdiZV9pcnFfZW5hYmxlKGFkYXB0ZXIsIHRydWUsIHRydWUpOwpAQCAtMzU5MCwyNiArMzg0MCw4IEBACiAJICogSWYgd2UncmUgbm90IGhvdC1wbHVnZ2FibGUgU0ZQKywgd2UganVzdCBuZWVkIHRvIGNvbmZpZ3VyZSBsaW5rCiAJICogYW5kIGJyaW5nIGl0IHVwLgogCSAqLwotCWlmIChody0+cGh5LnR5cGUgPT0gaXhnYmVfcGh5X3Vua25vd24pIHsKLQkJZXJyID0gaHctPnBoeS5vcHMuaWRlbnRpZnkoaHcpOwotCQlpZiAoZXJyID09IElYR0JFX0VSUl9TRlBfTk9UX1NVUFBPUlRFRCkgewotCQkJLyoKLQkJCSAqIFRha2UgdGhlIGRldmljZSBkb3duIGFuZCBzY2hlZHVsZSB0aGUgc2ZwIHRhc2tsZXQKLQkJCSAqIHdoaWNoIHdpbGwgdW5yZWdpc3Rlcl9uZXRkZXYgYW5kIGxvZyBpdC4KLQkJCSAqLwotCQkJaXhnYmVfZG93bihhZGFwdGVyKTsKLQkJCXNjaGVkdWxlX3dvcmsoJmFkYXB0ZXItPnNmcF9jb25maWdfbW9kdWxlX3Rhc2spOwotCQkJcmV0dXJuIGVycjsKLQkJfQotCX0KLQotCWlmIChpeGdiZV9pc19zZnAoaHcpKSB7Ci0JCWl4Z2JlX3NmcF9saW5rX2NvbmZpZyhhZGFwdGVyKTsKLQl9IGVsc2UgewotCQllcnIgPSBpeGdiZV9ub25fc2ZwX2xpbmtfY29uZmlnKGh3KTsKLQkJaWYgKGVycikKLQkJCWVfZXJyKHByb2JlLCAibGlua19jb25maWcgRkFJTEVEICVkXG4iLCBlcnIpOwotCX0KKwlpZiAoaHctPnBoeS50eXBlID09IGl4Z2JlX3BoeV91bmtub3duKQorCQlzY2hlZHVsZV93b3JrKCZhZGFwdGVyLT5zZnBfY29uZmlnX21vZHVsZV90YXNrKTsKIAogCS8qIGVuYWJsZSB0cmFuc21pdHMgKi8KIAluZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKGFkYXB0ZXItPm5ldGRldik7CkBAIC0zNjg3LDE1ICszOTE5LDEzIEBACiAKIC8qKgogICogaXhnYmVfY2xlYW5fcnhfcmluZyAtIEZyZWUgUnggQnVmZmVycyBwZXIgUXVldWUKLSAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQogICogQHJ4X3Jpbmc6IHJpbmcgdG8gZnJlZSBidWZmZXJzIGZyb20KICAqKi8KLXN0YXRpYyB2b2lkIGl4Z2JlX2NsZWFuX3J4X3Jpbmcoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCQkJc3RydWN0IGl4Z2JlX3JpbmcgKnJ4X3JpbmcpCitzdGF0aWMgdm9pZCBpeGdiZV9jbGVhbl9yeF9yaW5nKHN0cnVjdCBpeGdiZV9yaW5nICpyeF9yaW5nKQogewotCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSByeF9yaW5nLT5kZXY7CiAJdW5zaWduZWQgbG9uZyBzaXplOwotCXVuc2lnbmVkIGludCBpOworCXUxNiBpOwogCiAJLyogcmluZyBhbHJlYWR5IGNsZWFyZWQsIG5vdGhpbmcgdG8gZG8gKi8KIAlpZiAoIXJ4X3JpbmctPnJ4X2J1ZmZlcl9pbmZvKQpAQCAtMzcwNyw3ICszOTM3LDcgQEAKIAogCQlyeF9idWZmZXJfaW5mbyA9ICZyeF9yaW5nLT5yeF9idWZmZXJfaW5mb1tpXTsKIAkJaWYgKHJ4X2J1ZmZlcl9pbmZvLT5kbWEpIHsKLQkJCWRtYV91bm1hcF9zaW5nbGUoJnBkZXYtPmRldiwgcnhfYnVmZmVyX2luZm8tPmRtYSwKKwkJCWRtYV91bm1hcF9zaW5nbGUocnhfcmluZy0+ZGV2LCByeF9idWZmZXJfaW5mby0+ZG1hLAogCQkJCQkgcnhfcmluZy0+cnhfYnVmX2xlbiwKIAkJCQkJIERNQV9GUk9NX0RFVklDRSk7CiAJCQlyeF9idWZmZXJfaW5mby0+ZG1hID0gMDsKQEAgLTM3MTgsNyArMzk0OCw3IEBACiAJCQlkbyB7CiAJCQkJc3RydWN0IHNrX2J1ZmYgKnRoaXMgPSBza2I7CiAJCQkJaWYgKElYR0JFX1JTQ19DQih0aGlzKS0+ZGVsYXlfdW5tYXApIHsKLQkJCQkJZG1hX3VubWFwX3NpbmdsZSgmcGRldi0+ZGV2LAorCQkJCQlkbWFfdW5tYXBfc2luZ2xlKGRldiwKIAkJCQkJCQkgSVhHQkVfUlNDX0NCKHRoaXMpLT5kbWEsCiAJCQkJCQkJIHJ4X3JpbmctPnJ4X2J1Zl9sZW4sCiAJCQkJCQkJIERNQV9GUk9NX0RFVklDRSk7CkBAIC0zNzMyLDcgKzM5NjIsNyBAQAogCQlpZiAoIXJ4X2J1ZmZlcl9pbmZvLT5wYWdlKQogCQkJY29udGludWU7CiAJCWlmIChyeF9idWZmZXJfaW5mby0+cGFnZV9kbWEpIHsKLQkJCWRtYV91bm1hcF9wYWdlKCZwZGV2LT5kZXYsIHJ4X2J1ZmZlcl9pbmZvLT5wYWdlX2RtYSwKKwkJCWRtYV91bm1hcF9wYWdlKGRldiwgcnhfYnVmZmVyX2luZm8tPnBhZ2VfZG1hLAogCQkJCSAgICAgICBQQUdFX1NJWkUgLyAyLCBETUFfRlJPTV9ERVZJQ0UpOwogCQkJcnhfYnVmZmVyX2luZm8tPnBhZ2VfZG1hID0gMDsKIAkJfQpAQCAtMzc0OSwyNCArMzk3OSwxNyBAQAogCiAJcnhfcmluZy0+bmV4dF90b19jbGVhbiA9IDA7CiAJcnhfcmluZy0+bmV4dF90b191c2UgPSAwOwotCi0JaWYgKHJ4X3JpbmctPmhlYWQpCi0JCXdyaXRlbCgwLCBhZGFwdGVyLT5ody5od19hZGRyICsgcnhfcmluZy0+aGVhZCk7Ci0JaWYgKHJ4X3JpbmctPnRhaWwpCi0JCXdyaXRlbCgwLCBhZGFwdGVyLT5ody5od19hZGRyICsgcnhfcmluZy0+dGFpbCk7CiB9CiAKIC8qKgogICogaXhnYmVfY2xlYW5fdHhfcmluZyAtIEZyZWUgVHggQnVmZmVycwotICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCiAgKiBAdHhfcmluZzogcmluZyB0byBiZSBjbGVhbmVkCiAgKiovCi1zdGF0aWMgdm9pZCBpeGdiZV9jbGVhbl90eF9yaW5nKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLAotCQkJCXN0cnVjdCBpeGdiZV9yaW5nICp0eF9yaW5nKQorc3RhdGljIHZvaWQgaXhnYmVfY2xlYW5fdHhfcmluZyhzdHJ1Y3QgaXhnYmVfcmluZyAqdHhfcmluZykKIHsKIAlzdHJ1Y3QgaXhnYmVfdHhfYnVmZmVyICp0eF9idWZmZXJfaW5mbzsKIAl1bnNpZ25lZCBsb25nIHNpemU7Ci0JdW5zaWduZWQgaW50IGk7CisJdTE2IGk7CiAKIAkvKiByaW5nIGFscmVhZHkgY2xlYXJlZCwgbm90aGluZyB0byBkbyAqLwogCWlmICghdHhfcmluZy0+dHhfYnVmZmVyX2luZm8pCkBAIC0zNzc1LDcgKzM5OTgsNyBAQAogCS8qIEZyZWUgYWxsIHRoZSBUeCByaW5nIHNrX2J1ZmZzICovCiAJZm9yIChpID0gMDsgaSA8IHR4X3JpbmctPmNvdW50OyBpKyspIHsKIAkJdHhfYnVmZmVyX2luZm8gPSAmdHhfcmluZy0+dHhfYnVmZmVyX2luZm9baV07Ci0JCWl4Z2JlX3VubWFwX2FuZF9mcmVlX3R4X3Jlc291cmNlKGFkYXB0ZXIsIHR4X2J1ZmZlcl9pbmZvKTsKKwkJaXhnYmVfdW5tYXBfYW5kX2ZyZWVfdHhfcmVzb3VyY2UodHhfcmluZywgdHhfYnVmZmVyX2luZm8pOwogCX0KIAogCXNpemUgPSBzaXplb2Yoc3RydWN0IGl4Z2JlX3R4X2J1ZmZlcikgKiB0eF9yaW5nLT5jb3VudDsKQEAgLTM3ODYsMTEgKzQwMDksNiBAQAogCiAJdHhfcmluZy0+bmV4dF90b191c2UgPSAwOwogCXR4X3JpbmctPm5leHRfdG9fY2xlYW4gPSAwOwotCi0JaWYgKHR4X3JpbmctPmhlYWQpCi0JCXdyaXRlbCgwLCBhZGFwdGVyLT5ody5od19hZGRyICsgdHhfcmluZy0+aGVhZCk7Ci0JaWYgKHR4X3JpbmctPnRhaWwpCi0JCXdyaXRlbCgwLCBhZGFwdGVyLT5ody5od19hZGRyICsgdHhfcmluZy0+dGFpbCk7CiB9CiAKIC8qKgpAQCAtMzgwMiw3ICs0MDIwLDcgQEAKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspCi0JCWl4Z2JlX2NsZWFuX3J4X3JpbmcoYWRhcHRlciwgYWRhcHRlci0+cnhfcmluZ1tpXSk7CisJCWl4Z2JlX2NsZWFuX3J4X3JpbmcoYWRhcHRlci0+cnhfcmluZ1tpXSk7CiB9CiAKIC8qKgpAQCAtMzgxNCw3ICs0MDMyLDcgQEAKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspCi0JCWl4Z2JlX2NsZWFuX3R4X3JpbmcoYWRhcHRlciwgYWRhcHRlci0+dHhfcmluZ1tpXSk7CisJCWl4Z2JlX2NsZWFuX3R4X3JpbmcoYWRhcHRlci0+dHhfcmluZ1tpXSk7CiB9CiAKIHZvaWQgaXhnYmVfZG93bihzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcikKQEAgLTM4MjMsNyArNDA0MSw3IEBACiAJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAl1MzIgcnhjdHJsOwogCXUzMiB0eGRjdGw7Ci0JaW50IGksIGo7CisJaW50IGk7CiAJaW50IG51bV9xX3ZlY3RvcnMgPSBhZGFwdGVyLT5udW1fbXNpeF92ZWN0b3JzIC0gTk9OX1FfVkVDVE9SUzsKIAogCS8qIHNpZ25hbCB0aGF0IHdlIGFyZSBkb3duIHRvIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciAqLwpAQCAtMzg4MSwyNiArNDA5OSwzNiBAQAogCiAJLyogZGlzYWJsZSB0cmFuc21pdHMgaW4gdGhlIGhhcmR3YXJlIG5vdyB0aGF0IGludGVycnVwdHMgYXJlIG9mZiAqLwogCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspIHsKLQkJaiA9IGFkYXB0ZXItPnR4X3JpbmdbaV0tPnJlZ19pZHg7Ci0JCXR4ZGN0bCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9UWERDVEwoaikpOwotCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1RYRENUTChqKSwKKwkJdTggcmVnX2lkeCA9IGFkYXB0ZXItPnR4X3JpbmdbaV0tPnJlZ19pZHg7CisJCXR4ZGN0bCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9UWERDVEwocmVnX2lkeCkpOworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1RYRENUTChyZWdfaWR4KSwKIAkJCQkodHhkY3RsICYgfklYR0JFX1RYRENUTF9FTkFCTEUpKTsKIAl9CiAJLyogRGlzYWJsZSB0aGUgVHggRE1BIGVuZ2luZSBvbiA4MjU5OSAqLwotCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpCisJc3dpdGNoIChody0+bWFjLnR5cGUpIHsKKwljYXNlIGl4Z2JlX21hY184MjU5OUVCOgorCWNhc2UgaXhnYmVfbWFjX1g1NDA6CiAJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRE1BVFhDVEwsCiAJCQkJKElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9ETUFUWENUTCkgJgogCQkJCSB+SVhHQkVfRE1BVFhDVExfVEUpKTsKLQotCS8qIHBvd2VyIGRvd24gdGhlIG9wdGljcyAqLwotCWlmIChody0+cGh5Lm11bHRpc3BlZWRfZmliZXIpCi0JCWh3LT5tYWMub3BzLmRpc2FibGVfdHhfbGFzZXIoaHcpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CiAKIAkvKiBjbGVhciBuLXR1cGxlIGZpbHRlcnMgdGhhdCBhcmUgY2FjaGVkICovCiAJZXRodG9vbF9udHVwbGVfZmx1c2gobmV0ZGV2KTsKIAogCWlmICghcGNpX2NoYW5uZWxfb2ZmbGluZShhZGFwdGVyLT5wZGV2KSkKIAkJaXhnYmVfcmVzZXQoYWRhcHRlcik7CisKKwkvKiBwb3dlciBkb3duIHRoZSBvcHRpY3MgZm9yIG11bHRpc3BlZWQgZmliZXIgYW5kIDgyNTk5IFNGUCsgZmliZXIgKi8KKwlpZiAoaHctPm1hYy5vcHMuZGlzYWJsZV90eF9sYXNlciAmJgorCSAgICAoKGh3LT5waHkubXVsdGlzcGVlZF9maWJlcikgfHwKKwkgICAgICgoaHctPm1hYy5vcHMuZ2V0X21lZGlhX3R5cGUoaHcpID09IGl4Z2JlX21lZGlhX3R5cGVfZmliZXIpICYmCisJICAgICAgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikpKSkKKwkJaHctPm1hYy5vcHMuZGlzYWJsZV90eF9sYXNlcihodyk7CisKIAlpeGdiZV9jbGVhbl9hbGxfdHhfcmluZ3MoYWRhcHRlcik7CiAJaXhnYmVfY2xlYW5fYWxsX3J4X3JpbmdzKGFkYXB0ZXIpOwogCkBAIC0zOTI1LDEwICs0MTUzLDggQEAKIAlpbnQgdHhfY2xlYW5fY29tcGxldGUsIHdvcmtfZG9uZSA9IDA7CiAKICNpZmRlZiBDT05GSUdfSVhHQkVfRENBCi0JaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19EQ0FfRU5BQkxFRCkgewotCQlpeGdiZV91cGRhdGVfdHhfZGNhKGFkYXB0ZXIsIGFkYXB0ZXItPnR4X3JpbmdbMF0pOwotCQlpeGdiZV91cGRhdGVfcnhfZGNhKGFkYXB0ZXIsIGFkYXB0ZXItPnJ4X3JpbmdbMF0pOwotCX0KKwlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0RDQV9FTkFCTEVEKQorCQlpeGdiZV91cGRhdGVfZGNhKHFfdmVjdG9yKTsKICNlbmRpZgogCiAJdHhfY2xlYW5fY29tcGxldGUgPSBpeGdiZV9jbGVhbl90eF9pcnEocV92ZWN0b3IsIGFkYXB0ZXItPnR4X3JpbmdbMF0pOwpAQCAtMzk1Niw2ICs0MTgyLDggQEAKIHsKIAlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAKKwlhZGFwdGVyLT50eF90aW1lb3V0X2NvdW50Kys7CisKIAkvKiBEbyB0aGUgcmVzZXQgb3V0c2lkZSBvZiBpbnRlcnJ1cHQgY29udGV4dCAqLwogCXNjaGVkdWxlX3dvcmsoJmFkYXB0ZXItPnJlc2V0X3Rhc2spOwogfQpAQCAtMzk3MCw4ICs0MTk4LDYgQEAKIAkgICAgdGVzdF9iaXQoX19JWEdCRV9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSkpCiAJCXJldHVybjsKIAotCWFkYXB0ZXItPnR4X3RpbWVvdXRfY291bnQrKzsKLQogCWl4Z2JlX2R1bXAoYWRhcHRlcik7CiAJbmV0ZGV2X2VycihhZGFwdGVyLT5uZXRkZXYsICJSZXNldCBhZGFwdGVyXG4iKTsKIAlpeGdiZV9yZWluaXRfbG9ja2VkKGFkYXB0ZXIpOwpAQCAtNDIyMSwxOSArNDQ0NywxNiBAQAogc3RhdGljIGlubGluZSBib29sIGl4Z2JlX2NhY2hlX3JpbmdfcnNzKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQogewogCWludCBpOwotCWJvb2wgcmV0ID0gZmFsc2U7CiAKLQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX1JTU19FTkFCTEVEKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspCi0JCQlhZGFwdGVyLT5yeF9yaW5nW2ldLT5yZWdfaWR4ID0gaTsKLQkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGkrKykKLQkJCWFkYXB0ZXItPnR4X3JpbmdbaV0tPnJlZ19pZHggPSBpOwotCQlyZXQgPSB0cnVlOwotCX0gZWxzZSB7Ci0JCXJldCA9IGZhbHNlOwotCX0KKwlpZiAoIShhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfUlNTX0VOQUJMRUQpKQorCQlyZXR1cm4gZmFsc2U7CiAKLQlyZXR1cm4gcmV0OworCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspCisJCWFkYXB0ZXItPnJ4X3JpbmdbaV0tPnJlZ19pZHggPSBpOworCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspCisJCWFkYXB0ZXItPnR4X3JpbmdbaV0tPnJlZ19pZHggPSBpOworCisJcmV0dXJuIHRydWU7CiB9CiAKICNpZmRlZiBDT05GSUdfSVhHQkVfRENCCkBAIC00MjUwLDcxICs0NDczLDY3IEBACiAJYm9vbCByZXQgPSBmYWxzZTsKIAlpbnQgZGNiX2kgPSBhZGFwdGVyLT5yaW5nX2ZlYXR1cmVbUklOR19GX0RDQl0uaW5kaWNlczsKIAotCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRENCX0VOQUJMRUQpIHsKLQkJaWYgKGFkYXB0ZXItPmh3Lm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OEVCKSB7Ci0JCQkvKiB0aGUgbnVtYmVyIG9mIHF1ZXVlcyBpcyBhc3N1bWVkIHRvIGJlIHN5bW1ldHJpYyAqLwotCQkJZm9yIChpID0gMDsgaSA8IGRjYl9pOyBpKyspIHsKLQkJCQlhZGFwdGVyLT5yeF9yaW5nW2ldLT5yZWdfaWR4ID0gaSA8PCAzOwotCQkJCWFkYXB0ZXItPnR4X3JpbmdbaV0tPnJlZ19pZHggPSBpIDw8IDI7CisJaWYgKCEoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0RDQl9FTkFCTEVEKSkKKwkJcmV0dXJuIGZhbHNlOworCisJLyogdGhlIG51bWJlciBvZiBxdWV1ZXMgaXMgYXNzdW1lZCB0byBiZSBzeW1tZXRyaWMgKi8KKwlzd2l0Y2ggKGFkYXB0ZXItPmh3Lm1hYy50eXBlKSB7CisJY2FzZSBpeGdiZV9tYWNfODI1OThFQjoKKwkJZm9yIChpID0gMDsgaSA8IGRjYl9pOyBpKyspIHsKKwkJCWFkYXB0ZXItPnJ4X3JpbmdbaV0tPnJlZ19pZHggPSBpIDw8IDM7CisJCQlhZGFwdGVyLT50eF9yaW5nW2ldLT5yZWdfaWR4ID0gaSA8PCAyOworCQl9CisJCXJldCA9IHRydWU7CisJCWJyZWFrOworCWNhc2UgaXhnYmVfbWFjXzgyNTk5RUI6CisJY2FzZSBpeGdiZV9tYWNfWDU0MDoKKwkJaWYgKGRjYl9pID09IDgpIHsKKwkJCS8qCisJCQkgKiBUeCBUQzAgc3RhcnRzIGF0OiBkZXNjcmlwdG9yIHF1ZXVlIDAKKwkJCSAqIFR4IFRDMSBzdGFydHMgYXQ6IGRlc2NyaXB0b3IgcXVldWUgMzIKKwkJCSAqIFR4IFRDMiBzdGFydHMgYXQ6IGRlc2NyaXB0b3IgcXVldWUgNjQKKwkJCSAqIFR4IFRDMyBzdGFydHMgYXQ6IGRlc2NyaXB0b3IgcXVldWUgODAKKwkJCSAqIFR4IFRDNCBzdGFydHMgYXQ6IGRlc2NyaXB0b3IgcXVldWUgOTYKKwkJCSAqIFR4IFRDNSBzdGFydHMgYXQ6IGRlc2NyaXB0b3IgcXVldWUgMTA0CisJCQkgKiBUeCBUQzYgc3RhcnRzIGF0OiBkZXNjcmlwdG9yIHF1ZXVlIDExMgorCQkJICogVHggVEM3IHN0YXJ0cyBhdDogZGVzY3JpcHRvciBxdWV1ZSAxMjAKKwkJCSAqCisJCQkgKiBSeCBUQzAtVEM3IGFyZSBvZmZzZXQgYnkgMTYgcXVldWVzIGVhY2gKKwkJCSAqLworCQkJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQkJCWFkYXB0ZXItPnR4X3JpbmdbaV0tPnJlZ19pZHggPSBpIDw8IDU7CisJCQkJYWRhcHRlci0+cnhfcmluZ1tpXS0+cmVnX2lkeCA9IGkgPDwgNDsKKwkJCX0KKwkJCWZvciAoIDsgaSA8IDU7IGkrKykgeworCQkJCWFkYXB0ZXItPnR4X3JpbmdbaV0tPnJlZ19pZHggPSAoKGkgKyAyKSA8PCA0KTsKKwkJCQlhZGFwdGVyLT5yeF9yaW5nW2ldLT5yZWdfaWR4ID0gaSA8PCA0OworCQkJfQorCQkJZm9yICggOyBpIDwgZGNiX2k7IGkrKykgeworCQkJCWFkYXB0ZXItPnR4X3JpbmdbaV0tPnJlZ19pZHggPSAoKGkgKyA4KSA8PCAzKTsKKwkJCQlhZGFwdGVyLT5yeF9yaW5nW2ldLT5yZWdfaWR4ID0gaSA8PCA0OwogCQkJfQogCQkJcmV0ID0gdHJ1ZTsKLQkJfSBlbHNlIGlmIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikgewotCQkJaWYgKGRjYl9pID09IDgpIHsKLQkJCQkvKgotCQkJCSAqIFR4IFRDMCBzdGFydHMgYXQ6IGRlc2NyaXB0b3IgcXVldWUgMAotCQkJCSAqIFR4IFRDMSBzdGFydHMgYXQ6IGRlc2NyaXB0b3IgcXVldWUgMzIKLQkJCQkgKiBUeCBUQzIgc3RhcnRzIGF0OiBkZXNjcmlwdG9yIHF1ZXVlIDY0Ci0JCQkJICogVHggVEMzIHN0YXJ0cyBhdDogZGVzY3JpcHRvciBxdWV1ZSA4MAotCQkJCSAqIFR4IFRDNCBzdGFydHMgYXQ6IGRlc2NyaXB0b3IgcXVldWUgOTYKLQkJCQkgKiBUeCBUQzUgc3RhcnRzIGF0OiBkZXNjcmlwdG9yIHF1ZXVlIDEwNAotCQkJCSAqIFR4IFRDNiBzdGFydHMgYXQ6IGRlc2NyaXB0b3IgcXVldWUgMTEyCi0JCQkJICogVHggVEM3IHN0YXJ0cyBhdDogZGVzY3JpcHRvciBxdWV1ZSAxMjAKLQkJCQkgKgotCQkJCSAqIFJ4IFRDMC1UQzcgYXJlIG9mZnNldCBieSAxNiBxdWV1ZXMgZWFjaAotCQkJCSAqLwotCQkJCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKLQkJCQkJYWRhcHRlci0+dHhfcmluZ1tpXS0+cmVnX2lkeCA9IGkgPDwgNTsKLQkJCQkJYWRhcHRlci0+cnhfcmluZ1tpXS0+cmVnX2lkeCA9IGkgPDwgNDsKLQkJCQl9Ci0JCQkJZm9yICggOyBpIDwgNTsgaSsrKSB7Ci0JCQkJCWFkYXB0ZXItPnR4X3JpbmdbaV0tPnJlZ19pZHggPQotCQkJCQkJCQkgKChpICsgMikgPDwgNCk7Ci0JCQkJCWFkYXB0ZXItPnJ4X3JpbmdbaV0tPnJlZ19pZHggPSBpIDw8IDQ7Ci0JCQkJfQotCQkJCWZvciAoIDsgaSA8IGRjYl9pOyBpKyspIHsKLQkJCQkJYWRhcHRlci0+dHhfcmluZ1tpXS0+cmVnX2lkeCA9Ci0JCQkJCQkJCSAoKGkgKyA4KSA8PCAzKTsKLQkJCQkJYWRhcHRlci0+cnhfcmluZ1tpXS0+cmVnX2lkeCA9IGkgPDwgNDsKLQkJCQl9Ci0KLQkJCQlyZXQgPSB0cnVlOwotCQkJfSBlbHNlIGlmIChkY2JfaSA9PSA0KSB7Ci0JCQkJLyoKLQkJCQkgKiBUeCBUQzAgc3RhcnRzIGF0OiBkZXNjcmlwdG9yIHF1ZXVlIDAKLQkJCQkgKiBUeCBUQzEgc3RhcnRzIGF0OiBkZXNjcmlwdG9yIHF1ZXVlIDY0Ci0JCQkJICogVHggVEMyIHN0YXJ0cyBhdDogZGVzY3JpcHRvciBxdWV1ZSA5NgotCQkJCSAqIFR4IFRDMyBzdGFydHMgYXQ6IGRlc2NyaXB0b3IgcXVldWUgMTEyCi0JCQkJICoKLQkJCQkgKiBSeCBUQzAtVEMzIGFyZSBvZmZzZXQgYnkgMzIgcXVldWVzIGVhY2gKLQkJCQkgKi8KLQkJCQlhZGFwdGVyLT50eF9yaW5nWzBdLT5yZWdfaWR4ID0gMDsKLQkJCQlhZGFwdGVyLT50eF9yaW5nWzFdLT5yZWdfaWR4ID0gNjQ7Ci0JCQkJYWRhcHRlci0+dHhfcmluZ1syXS0+cmVnX2lkeCA9IDk2OwotCQkJCWFkYXB0ZXItPnR4X3JpbmdbM10tPnJlZ19pZHggPSAxMTI7Ci0JCQkJZm9yIChpID0gMCA7IGkgPCBkY2JfaTsgaSsrKQotCQkJCQlhZGFwdGVyLT5yeF9yaW5nW2ldLT5yZWdfaWR4ID0gaSA8PCA1OwotCi0JCQkJcmV0ID0gdHJ1ZTsKLQkJCX0gZWxzZSB7Ci0JCQkJcmV0ID0gZmFsc2U7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlyZXQgPSBmYWxzZTsKKwkJfSBlbHNlIGlmIChkY2JfaSA9PSA0KSB7CisJCQkvKgorCQkJICogVHggVEMwIHN0YXJ0cyBhdDogZGVzY3JpcHRvciBxdWV1ZSAwCisJCQkgKiBUeCBUQzEgc3RhcnRzIGF0OiBkZXNjcmlwdG9yIHF1ZXVlIDY0CisJCQkgKiBUeCBUQzIgc3RhcnRzIGF0OiBkZXNjcmlwdG9yIHF1ZXVlIDk2CisJCQkgKiBUeCBUQzMgc3RhcnRzIGF0OiBkZXNjcmlwdG9yIHF1ZXVlIDExMgorCQkJICoKKwkJCSAqIFJ4IFRDMC1UQzMgYXJlIG9mZnNldCBieSAzMiBxdWV1ZXMgZWFjaAorCQkJICovCisJCQlhZGFwdGVyLT50eF9yaW5nWzBdLT5yZWdfaWR4ID0gMDsKKwkJCWFkYXB0ZXItPnR4X3JpbmdbMV0tPnJlZ19pZHggPSA2NDsKKwkJCWFkYXB0ZXItPnR4X3JpbmdbMl0tPnJlZ19pZHggPSA5NjsKKwkJCWFkYXB0ZXItPnR4X3JpbmdbM10tPnJlZ19pZHggPSAxMTI7CisJCQlmb3IgKGkgPSAwIDsgaSA8IGRjYl9pOyBpKyspCisJCQkJYWRhcHRlci0+cnhfcmluZ1tpXS0+cmVnX2lkeCA9IGkgPDwgNTsKKwkJCXJldCA9IHRydWU7CiAJCX0KLQl9IGVsc2UgewotCQlyZXQgPSBmYWxzZTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CiAJfQotCiAJcmV0dXJuIHJldDsKIH0KICNlbmRpZgpAQCAtNDM1NCw1NSArNDU3Myw1NSBAQAogICovCiBzdGF0aWMgaW5saW5lIGJvb2wgaXhnYmVfY2FjaGVfcmluZ19mY29lKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQogewotCWludCBpLCBmY29lX3J4X2kgPSAwLCBmY29lX3R4X2kgPSAwOwotCWJvb2wgcmV0ID0gZmFsc2U7CiAJc3RydWN0IGl4Z2JlX3JpbmdfZmVhdHVyZSAqZiA9ICZhZGFwdGVyLT5yaW5nX2ZlYXR1cmVbUklOR19GX0ZDT0VdOworCWludCBpOworCXU4IGZjb2VfcnhfaSA9IDAsIGZjb2VfdHhfaSA9IDA7CiAKLQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0ZDT0VfRU5BQkxFRCkgeworCWlmICghKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19GQ09FX0VOQUJMRUQpKQorCQlyZXR1cm4gZmFsc2U7CisKICNpZmRlZiBDT05GSUdfSVhHQkVfRENCCi0JCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRENCX0VOQUJMRUQpIHsKLQkJCXN0cnVjdCBpeGdiZV9mY29lICpmY29lID0gJmFkYXB0ZXItPmZjb2U7CisJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19EQ0JfRU5BQkxFRCkgeworCQlzdHJ1Y3QgaXhnYmVfZmNvZSAqZmNvZSA9ICZhZGFwdGVyLT5mY29lOwogCi0JCQlpeGdiZV9jYWNoZV9yaW5nX2RjYihhZGFwdGVyKTsKLQkJCS8qIGZpbmQgb3V0IHF1ZXVlcyBpbiBUQyBmb3IgRkNvRSAqLwotCQkJZmNvZV9yeF9pID0gYWRhcHRlci0+cnhfcmluZ1tmY29lLT50Y10tPnJlZ19pZHggKyAxOwotCQkJZmNvZV90eF9pID0gYWRhcHRlci0+dHhfcmluZ1tmY29lLT50Y10tPnJlZ19pZHggKyAxOwotCQkJLyoKLQkJCSAqIEluIDgyNTk5LCB0aGUgbnVtYmVyIG9mIFR4IHF1ZXVlcyBmb3IgZWFjaCB0cmFmZmljCi0JCQkgKiBjbGFzcyBmb3IgYm90aCA4LVRDIGFuZCA0LVRDIG1vZGVzIGFyZToKLQkJCSAqIFRDcyAgOiBUQzAgVEMxIFRDMiBUQzMgVEM0IFRDNSBUQzYgVEM3Ci0JCQkgKiA4IFRDczogIDMyICAzMiAgMTYgIDE2ICAgOCAgIDggICA4ICAgOAotCQkJICogNCBUQ3M6ICA2NCAgNjQgIDMyICAzMgotCQkJICogV2UgaGF2ZSBtYXggOCBxdWV1ZXMgZm9yIEZDb0UsIHdoZXJlIDggdGhlIGlzCi0JCQkgKiBGQ29FIHJlZGlyZWN0aW9uIHRhYmxlIHNpemUuIElmIFRDIGZvciBGQ29FIGlzCi0JCQkgKiBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gVEMzLCB3ZSBoYXZlIGVub3VnaCBxdWV1ZXMKLQkJCSAqIHRvIGFkZCBtYXggb2YgOCBxdWV1ZXMgZm9yIEZDb0UsIHNvIHdlIHN0YXJ0IEZDb0UKLQkJCSAqIHR4IGRlc2NyaXB0b3IgZnJvbSB0aGUgbmV4dCBvbmUsIGkuZS4sIHJlZ19pZHggKyAxLgotCQkJICogSWYgVEMgZm9yIEZDb0UgaXMgYWJvdmUgVEMzLCBpbXBseWluZyA4IFRDIG1vZGUsCi0JCQkgKiBhbmQgd2UgbmVlZCA4IGZvciBGQ29FLCB3ZSBoYXZlIHRvIHRha2UgYWxsIHF1ZXVlcwotCQkJICogaW4gdGhhdCB0cmFmZmljIGNsYXNzIGZvciBGQ29FLgotCQkJICovCi0JCQlpZiAoKGYtPmluZGljZXMgPT0gSVhHQkVfRkNSRVRBX1NJWkUpICYmIChmY29lLT50YyA+IDMpKQotCQkJCWZjb2VfdHhfaS0tOwotCQl9Ci0jZW5kaWYgLyogQ09ORklHX0lYR0JFX0RDQiAqLwotCQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX1JTU19FTkFCTEVEKSB7Ci0JCQlpZiAoKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19GRElSX0hBU0hfQ0FQQUJMRSkgfHwKLQkJCSAgICAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0ZESVJfUEVSRkVDVF9DQVBBQkxFKSkKLQkJCQlpeGdiZV9jYWNoZV9yaW5nX2ZkaXIoYWRhcHRlcik7Ci0JCQllbHNlCi0JCQkJaXhnYmVfY2FjaGVfcmluZ19yc3MoYWRhcHRlcik7Ci0KLQkJCWZjb2VfcnhfaSA9IGYtPm1hc2s7Ci0JCQlmY29lX3R4X2kgPSBmLT5tYXNrOwotCQl9Ci0JCWZvciAoaSA9IDA7IGkgPCBmLT5pbmRpY2VzOyBpKyssIGZjb2VfcnhfaSsrLCBmY29lX3R4X2krKykgewotCQkJYWRhcHRlci0+cnhfcmluZ1tmLT5tYXNrICsgaV0tPnJlZ19pZHggPSBmY29lX3J4X2k7Ci0JCQlhZGFwdGVyLT50eF9yaW5nW2YtPm1hc2sgKyBpXS0+cmVnX2lkeCA9IGZjb2VfdHhfaTsKLQkJfQotCQlyZXQgPSB0cnVlOworCQlpeGdiZV9jYWNoZV9yaW5nX2RjYihhZGFwdGVyKTsKKwkJLyogZmluZCBvdXQgcXVldWVzIGluIFRDIGZvciBGQ29FICovCisJCWZjb2VfcnhfaSA9IGFkYXB0ZXItPnJ4X3JpbmdbZmNvZS0+dGNdLT5yZWdfaWR4ICsgMTsKKwkJZmNvZV90eF9pID0gYWRhcHRlci0+dHhfcmluZ1tmY29lLT50Y10tPnJlZ19pZHggKyAxOworCQkvKgorCQkgKiBJbiA4MjU5OSwgdGhlIG51bWJlciBvZiBUeCBxdWV1ZXMgZm9yIGVhY2ggdHJhZmZpYworCQkgKiBjbGFzcyBmb3IgYm90aCA4LVRDIGFuZCA0LVRDIG1vZGVzIGFyZToKKwkJICogVENzICA6IFRDMCBUQzEgVEMyIFRDMyBUQzQgVEM1IFRDNiBUQzcKKwkJICogOCBUQ3M6ICAzMiAgMzIgIDE2ICAxNiAgIDggICA4ICAgOCAgIDgKKwkJICogNCBUQ3M6ICA2NCAgNjQgIDMyICAzMgorCQkgKiBXZSBoYXZlIG1heCA4IHF1ZXVlcyBmb3IgRkNvRSwgd2hlcmUgOCB0aGUgaXMKKwkJICogRkNvRSByZWRpcmVjdGlvbiB0YWJsZSBzaXplLiBJZiBUQyBmb3IgRkNvRSBpcworCQkgKiBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gVEMzLCB3ZSBoYXZlIGVub3VnaCBxdWV1ZXMKKwkJICogdG8gYWRkIG1heCBvZiA4IHF1ZXVlcyBmb3IgRkNvRSwgc28gd2Ugc3RhcnQgRkNvRQorCQkgKiBUeCBxdWV1ZSBmcm9tIHRoZSBuZXh0IG9uZSwgaS5lLiwgcmVnX2lkeCArIDEuCisJCSAqIElmIFRDIGZvciBGQ29FIGlzIGFib3ZlIFRDMywgaW1wbHlpbmcgOCBUQyBtb2RlLAorCQkgKiBhbmQgd2UgbmVlZCA4IGZvciBGQ29FLCB3ZSBoYXZlIHRvIHRha2UgYWxsIHF1ZXVlcworCQkgKiBpbiB0aGF0IHRyYWZmaWMgY2xhc3MgZm9yIEZDb0UuCisJCSAqLworCQlpZiAoKGYtPmluZGljZXMgPT0gSVhHQkVfRkNSRVRBX1NJWkUpICYmIChmY29lLT50YyA+IDMpKQorCQkJZmNvZV90eF9pLS07CiAJfQotCXJldHVybiByZXQ7CisjZW5kaWYgLyogQ09ORklHX0lYR0JFX0RDQiAqLworCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfUlNTX0VOQUJMRUQpIHsKKwkJaWYgKChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRkRJUl9IQVNIX0NBUEFCTEUpIHx8CisJCSAgICAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0ZESVJfUEVSRkVDVF9DQVBBQkxFKSkKKwkJCWl4Z2JlX2NhY2hlX3JpbmdfZmRpcihhZGFwdGVyKTsKKwkJZWxzZQorCQkJaXhnYmVfY2FjaGVfcmluZ19yc3MoYWRhcHRlcik7CisKKwkJZmNvZV9yeF9pID0gZi0+bWFzazsKKwkJZmNvZV90eF9pID0gZi0+bWFzazsKKwl9CisJZm9yIChpID0gMDsgaSA8IGYtPmluZGljZXM7IGkrKywgZmNvZV9yeF9pKyssIGZjb2VfdHhfaSsrKSB7CisJCWFkYXB0ZXItPnJ4X3JpbmdbZi0+bWFzayArIGldLT5yZWdfaWR4ID0gZmNvZV9yeF9pOworCQlhZGFwdGVyLT50eF9yaW5nW2YtPm1hc2sgKyBpXS0+cmVnX2lkeCA9IGZjb2VfdHhfaTsKKwl9CisJcmV0dXJuIHRydWU7CiB9CiAKICNlbmRpZiAvKiBJWEdCRV9GQ09FICovCkBAIC00NDcxLDY1ICs0NjkwLDU1IEBACiAgKiovCiBzdGF0aWMgaW50IGl4Z2JlX2FsbG9jX3F1ZXVlcyhzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcikKIHsKLQlpbnQgaTsKLQlpbnQgb3JpZ19ub2RlID0gYWRhcHRlci0+bm9kZTsKKwlpbnQgcnggPSAwLCB0eCA9IDAsIG5pZCA9IGFkYXB0ZXItPm5vZGU7CiAKLQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKSB7Ci0JCXN0cnVjdCBpeGdiZV9yaW5nICpyaW5nID0gYWRhcHRlci0+dHhfcmluZ1tpXTsKLQkJaWYgKG9yaWdfbm9kZSA9PSAtMSkgewotCQkJaW50IGN1cl9ub2RlID0gbmV4dF9vbmxpbmVfbm9kZShhZGFwdGVyLT5ub2RlKTsKLQkJCWlmIChjdXJfbm9kZSA9PSBNQVhfTlVNTk9ERVMpCi0JCQkJY3VyX25vZGUgPSBmaXJzdF9vbmxpbmVfbm9kZTsKLQkJCWFkYXB0ZXItPm5vZGUgPSBjdXJfbm9kZTsKLQkJfQotCQlyaW5nID0ga3phbGxvY19ub2RlKHNpemVvZihzdHJ1Y3QgaXhnYmVfcmluZyksIEdGUF9LRVJORUwsCi0JCQkJICAgIGFkYXB0ZXItPm5vZGUpOworCWlmIChuaWQgPCAwIHx8ICFub2RlX29ubGluZShuaWQpKQorCQluaWQgPSBmaXJzdF9vbmxpbmVfbm9kZTsKKworCWZvciAoOyB0eCA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IHR4KyspIHsKKwkJc3RydWN0IGl4Z2JlX3JpbmcgKnJpbmc7CisKKwkJcmluZyA9IGt6YWxsb2Nfbm9kZShzaXplb2YoKnJpbmcpLCBHRlBfS0VSTkVMLCBuaWQpOwogCQlpZiAoIXJpbmcpCi0JCQlyaW5nID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGl4Z2JlX3JpbmcpLCBHRlBfS0VSTkVMKTsKKwkJCXJpbmcgPSBremFsbG9jKHNpemVvZigqcmluZyksIEdGUF9LRVJORUwpOwogCQlpZiAoIXJpbmcpCi0JCQlnb3RvIGVycl90eF9yaW5nX2FsbG9jYXRpb247CisJCQlnb3RvIGVycl9hbGxvY2F0aW9uOwogCQlyaW5nLT5jb3VudCA9IGFkYXB0ZXItPnR4X3JpbmdfY291bnQ7Ci0JCXJpbmctPnF1ZXVlX2luZGV4ID0gaTsKLQkJcmluZy0+bnVtYV9ub2RlID0gYWRhcHRlci0+bm9kZTsKKwkJcmluZy0+cXVldWVfaW5kZXggPSB0eDsKKwkJcmluZy0+bnVtYV9ub2RlID0gbmlkOworCQlyaW5nLT5kZXYgPSAmYWRhcHRlci0+cGRldi0+ZGV2OworCQlyaW5nLT5uZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CiAKLQkJYWRhcHRlci0+dHhfcmluZ1tpXSA9IHJpbmc7CisJCWFkYXB0ZXItPnR4X3JpbmdbdHhdID0gcmluZzsKIAl9CiAKLQkvKiBSZXN0b3JlIHRoZSBhZGFwdGVyJ3Mgb3JpZ2luYWwgbm9kZSAqLwotCWFkYXB0ZXItPm5vZGUgPSBvcmlnX25vZGU7CisJZm9yICg7IHJ4IDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgcngrKykgeworCQlzdHJ1Y3QgaXhnYmVfcmluZyAqcmluZzsKIAotCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspIHsKLQkJc3RydWN0IGl4Z2JlX3JpbmcgKnJpbmcgPSBhZGFwdGVyLT5yeF9yaW5nW2ldOwotCQlpZiAob3JpZ19ub2RlID09IC0xKSB7Ci0JCQlpbnQgY3VyX25vZGUgPSBuZXh0X29ubGluZV9ub2RlKGFkYXB0ZXItPm5vZGUpOwotCQkJaWYgKGN1cl9ub2RlID09IE1BWF9OVU1OT0RFUykKLQkJCQljdXJfbm9kZSA9IGZpcnN0X29ubGluZV9ub2RlOwotCQkJYWRhcHRlci0+bm9kZSA9IGN1cl9ub2RlOwotCQl9Ci0JCXJpbmcgPSBremFsbG9jX25vZGUoc2l6ZW9mKHN0cnVjdCBpeGdiZV9yaW5nKSwgR0ZQX0tFUk5FTCwKLQkJCQkgICAgYWRhcHRlci0+bm9kZSk7CisJCXJpbmcgPSBremFsbG9jX25vZGUoc2l6ZW9mKCpyaW5nKSwgR0ZQX0tFUk5FTCwgbmlkKTsKIAkJaWYgKCFyaW5nKQotCQkJcmluZyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpeGdiZV9yaW5nKSwgR0ZQX0tFUk5FTCk7CisJCQlyaW5nID0ga3phbGxvYyhzaXplb2YoKnJpbmcpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFyaW5nKQotCQkJZ290byBlcnJfcnhfcmluZ19hbGxvY2F0aW9uOworCQkJZ290byBlcnJfYWxsb2NhdGlvbjsKIAkJcmluZy0+Y291bnQgPSBhZGFwdGVyLT5yeF9yaW5nX2NvdW50OwotCQlyaW5nLT5xdWV1ZV9pbmRleCA9IGk7Ci0JCXJpbmctPm51bWFfbm9kZSA9IGFkYXB0ZXItPm5vZGU7CisJCXJpbmctPnF1ZXVlX2luZGV4ID0gcng7CisJCXJpbmctPm51bWFfbm9kZSA9IG5pZDsKKwkJcmluZy0+ZGV2ID0gJmFkYXB0ZXItPnBkZXYtPmRldjsKKwkJcmluZy0+bmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwogCi0JCWFkYXB0ZXItPnJ4X3JpbmdbaV0gPSByaW5nOworCQlhZGFwdGVyLT5yeF9yaW5nW3J4XSA9IHJpbmc7CiAJfQogCi0JLyogUmVzdG9yZSB0aGUgYWRhcHRlcidzIG9yaWdpbmFsIG5vZGUgKi8KLQlhZGFwdGVyLT5ub2RlID0gb3JpZ19ub2RlOwotCiAJaXhnYmVfY2FjaGVfcmluZ19yZWdpc3RlcihhZGFwdGVyKTsKIAogCXJldHVybiAwOwogCi1lcnJfcnhfcmluZ19hbGxvY2F0aW9uOgotCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspCi0JCWtmcmVlKGFkYXB0ZXItPnR4X3JpbmdbaV0pOwotZXJyX3R4X3JpbmdfYWxsb2NhdGlvbjoKK2Vycl9hbGxvY2F0aW9uOgorCXdoaWxlICh0eCkKKwkJa2ZyZWUoYWRhcHRlci0+dHhfcmluZ1stLXR4XSk7CisKKwl3aGlsZSAocngpCisJCWtmcmVlKGFkYXB0ZXItPnJ4X3JpbmdbLS1yeF0pOwogCXJldHVybiAtRU5PTUVNOwogfQogCkBAIC00NzUxLDYgKzQ5NjAsMTEgQEAKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgdm9pZCByaW5nX2ZyZWVfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKK3sKKwlrZnJlZShjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGl4Z2JlX3JpbmcsIHJjdSkpOworfQorCiAvKioKICAqIGl4Z2JlX2NsZWFyX2ludGVycnVwdF9zY2hlbWUgLSBDbGVhciB0aGUgY3VycmVudCBpbnRlcnJ1cHQgc2NoZW1lIHNldHRpbmdzCiAgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUgdG8gY2xlYXIgaW50ZXJydXB0IHNjaGVtZSBvbgpAQCAtNDc2Nyw3ICs0OTgxLDEyIEBACiAJCWFkYXB0ZXItPnR4X3JpbmdbaV0gPSBOVUxMOwogCX0KIAlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKSB7Ci0JCWtmcmVlKGFkYXB0ZXItPnJ4X3JpbmdbaV0pOworCQlzdHJ1Y3QgaXhnYmVfcmluZyAqcmluZyA9IGFkYXB0ZXItPnJ4X3JpbmdbaV07CisKKwkJLyogaXhnYmVfZ2V0X3N0YXRzNjQoKSBtaWdodCBhY2Nlc3MgdGhpcyByaW5nLCB3ZSBtdXN0IHdhaXQKKwkJICogYSBncmFjZSBwZXJpb2QgYmVmb3JlIGZyZWVpbmcgaXQuCisJCSAqLworCQljYWxsX3JjdSgmcmluZy0+cmN1LCByaW5nX2ZyZWVfcmN1KTsKIAkJYWRhcHRlci0+cnhfcmluZ1tpXSA9IE5VTEw7CiAJfQogCkBAIC00ODQ3LDYgKzUwNjYsNyBAQAogCWludCBqOwogCXN0cnVjdCB0Y19jb25maWd1cmF0aW9uICp0YzsKICNlbmRpZgorCWludCBtYXhfZnJhbWUgPSBkZXYtPm10dSArIEVUSF9ITEVOICsgRVRIX0ZDU19MRU47CiAKIAkvKiBQQ0kgY29uZmlnIHNwYWNlIGluZm8gKi8KIApAQCAtNDg2MSwxMSArNTA4MSwxNCBAQAogCWFkYXB0ZXItPnJpbmdfZmVhdHVyZVtSSU5HX0ZfUlNTXS5pbmRpY2VzID0gcnNzOwogCWFkYXB0ZXItPmZsYWdzIHw9IElYR0JFX0ZMQUdfUlNTX0VOQUJMRUQ7CiAJYWRhcHRlci0+cmluZ19mZWF0dXJlW1JJTkdfRl9EQ0JdLmluZGljZXMgPSBJWEdCRV9NQVhfRENCX0lORElDRVM7Ci0JaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQikgeworCXN3aXRjaCAoaHctPm1hYy50eXBlKSB7CisJY2FzZSBpeGdiZV9tYWNfODI1OThFQjoKIAkJaWYgKGh3LT5kZXZpY2VfaWQgPT0gSVhHQkVfREVWX0lEXzgyNTk4QVQpCiAJCQlhZGFwdGVyLT5mbGFncyB8PSBJWEdCRV9GTEFHX0ZBTl9GQUlMX0NBUEFCTEU7CiAJCWFkYXB0ZXItPm1heF9tc2l4X3FfdmVjdG9ycyA9IE1BWF9NU0lYX1FfVkVDVE9SU184MjU5ODsKLQl9IGVsc2UgaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikgeworCQlicmVhazsKKwljYXNlIGl4Z2JlX21hY184MjU5OUVCOgorCWNhc2UgaXhnYmVfbWFjX1g1NDA6CiAJCWFkYXB0ZXItPm1heF9tc2l4X3FfdmVjdG9ycyA9IE1BWF9NU0lYX1FfVkVDVE9SU184MjU5OTsKIAkJYWRhcHRlci0+ZmxhZ3MyIHw9IElYR0JFX0ZMQUcyX1JTQ19DQVBBQkxFOwogCQlhZGFwdGVyLT5mbGFnczIgfD0gSVhHQkVfRkxBRzJfUlNDX0VOQUJMRUQ7CkBAIC00ODk0LDYgKzUxMTcsOSBAQAogCQlhZGFwdGVyLT5mY29lLnVwID0gSVhHQkVfRkNPRV9ERUZUQzsKICNlbmRpZgogI2VuZGlmIC8qIElYR0JFX0ZDT0UgKi8KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CiAJfQogCiAjaWZkZWYgQ09ORklHX0lYR0JFX0RDQgpAQCAtNDkyMyw4ICs1MTQ5LDggQEAKICNpZmRlZiBDT05GSUdfRENCCiAJYWRhcHRlci0+bGFzdF9sZmNfbW9kZSA9IGh3LT5mYy5jdXJyZW50X21vZGU7CiAjZW5kaWYKLQlody0+ZmMuaGlnaF93YXRlciA9IElYR0JFX0RFRkFVTFRfRkNSVEg7Ci0JaHctPmZjLmxvd193YXRlciA9IElYR0JFX0RFRkFVTFRfRkNSVEw7CisJaHctPmZjLmhpZ2hfd2F0ZXIgPSBGQ19ISUdIX1dBVEVSKG1heF9mcmFtZSk7CisJaHctPmZjLmxvd193YXRlciA9IEZDX0xPV19XQVRFUihtYXhfZnJhbWUpOwogCWh3LT5mYy5wYXVzZV90aW1lID0gSVhHQkVfREVGQVVMVF9GQ1BBVVNFOwogCWh3LT5mYy5zZW5kX3hvbiA9IHRydWU7CiAJaHctPmZjLmRpc2FibGVfZmNfYXV0b25lZyA9IGZhbHNlOwpAQCAtNDk2MiwzMCArNTE4OCwyNyBAQAogCiAvKioKICAqIGl4Z2JlX3NldHVwX3R4X3Jlc291cmNlcyAtIGFsbG9jYXRlIFR4IHJlc291cmNlcyAoRGVzY3JpcHRvcnMpCi0gKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKICAqIEB0eF9yaW5nOiAgICB0eCBkZXNjcmlwdG9yIHJpbmcgKGZvciBhIHNwZWNpZmljIHF1ZXVlKSB0byBzZXR1cAogICoKICAqIFJldHVybiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIG9uIGZhaWx1cmUKICAqKi8KLWludCBpeGdiZV9zZXR1cF90eF9yZXNvdXJjZXMoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCQkgICAgIHN0cnVjdCBpeGdiZV9yaW5nICp0eF9yaW5nKQoraW50IGl4Z2JlX3NldHVwX3R4X3Jlc291cmNlcyhzdHJ1Y3QgaXhnYmVfcmluZyAqdHhfcmluZykKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisJc3RydWN0IGRldmljZSAqZGV2ID0gdHhfcmluZy0+ZGV2OwogCWludCBzaXplOwogCiAJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaXhnYmVfdHhfYnVmZmVyKSAqIHR4X3JpbmctPmNvdW50OwotCXR4X3JpbmctPnR4X2J1ZmZlcl9pbmZvID0gdm1hbGxvY19ub2RlKHNpemUsIHR4X3JpbmctPm51bWFfbm9kZSk7CisJdHhfcmluZy0+dHhfYnVmZmVyX2luZm8gPSB2emFsbG9jX25vZGUoc2l6ZSwgdHhfcmluZy0+bnVtYV9ub2RlKTsKIAlpZiAoIXR4X3JpbmctPnR4X2J1ZmZlcl9pbmZvKQotCQl0eF9yaW5nLT50eF9idWZmZXJfaW5mbyA9IHZtYWxsb2Moc2l6ZSk7CisJCXR4X3JpbmctPnR4X2J1ZmZlcl9pbmZvID0gdnphbGxvYyhzaXplKTsKIAlpZiAoIXR4X3JpbmctPnR4X2J1ZmZlcl9pbmZvKQogCQlnb3RvIGVycjsKLQltZW1zZXQodHhfcmluZy0+dHhfYnVmZmVyX2luZm8sIDAsIHNpemUpOwogCiAJLyogcm91bmQgdXAgdG8gbmVhcmVzdCA0SyAqLwogCXR4X3JpbmctPnNpemUgPSB0eF9yaW5nLT5jb3VudCAqIHNpemVvZih1bmlvbiBpeGdiZV9hZHZfdHhfZGVzYyk7CiAJdHhfcmluZy0+c2l6ZSA9IEFMSUdOKHR4X3JpbmctPnNpemUsIDQwOTYpOwogCi0JdHhfcmluZy0+ZGVzYyA9IGRtYV9hbGxvY19jb2hlcmVudCgmcGRldi0+ZGV2LCB0eF9yaW5nLT5zaXplLAorCXR4X3JpbmctPmRlc2MgPSBkbWFfYWxsb2NfY29oZXJlbnQoZGV2LCB0eF9yaW5nLT5zaXplLAogCQkJCQkgICAmdHhfcmluZy0+ZG1hLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXR4X3JpbmctPmRlc2MpCiAJCWdvdG8gZXJyOwpAQCAtNDk5OCw3ICs1MjIxLDcgQEAKIGVycjoKIAl2ZnJlZSh0eF9yaW5nLT50eF9idWZmZXJfaW5mbyk7CiAJdHhfcmluZy0+dHhfYnVmZmVyX2luZm8gPSBOVUxMOwotCWVfZXJyKHByb2JlLCAiVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIFR4IGRlc2NyaXB0b3IgcmluZ1xuIik7CisJZGV2X2VycihkZXYsICJVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgVHggZGVzY3JpcHRvciByaW5nXG4iKTsKIAlyZXR1cm4gLUVOT01FTTsKIH0KIApAQCAtNTAxNyw3ICs1MjQwLDcgQEAKIAlpbnQgaSwgZXJyID0gMDsKIAogCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspIHsKLQkJZXJyID0gaXhnYmVfc2V0dXBfdHhfcmVzb3VyY2VzKGFkYXB0ZXIsIGFkYXB0ZXItPnR4X3JpbmdbaV0pOworCQllcnIgPSBpeGdiZV9zZXR1cF90eF9yZXNvdXJjZXMoYWRhcHRlci0+dHhfcmluZ1tpXSk7CiAJCWlmICghZXJyKQogCQkJY29udGludWU7CiAJCWVfZXJyKHByb2JlLCAiQWxsb2NhdGlvbiBmb3IgVHggUXVldWUgJXUgZmFpbGVkXG4iLCBpKTsKQEAgLTUwMjksNDggKzUyNTIsNDAgQEAKIAogLyoqCiAgKiBpeGdiZV9zZXR1cF9yeF9yZXNvdXJjZXMgLSBhbGxvY2F0ZSBSeCByZXNvdXJjZXMgKERlc2NyaXB0b3JzKQotICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCiAgKiBAcnhfcmluZzogICAgcnggZGVzY3JpcHRvciByaW5nIChmb3IgYSBzcGVjaWZpYyBxdWV1ZSkgdG8gc2V0dXAKICAqCiAgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZmFpbHVyZQogICoqLwotaW50IGl4Z2JlX3NldHVwX3J4X3Jlc291cmNlcyhzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciwKLQkJCSAgICAgc3RydWN0IGl4Z2JlX3JpbmcgKnJ4X3JpbmcpCitpbnQgaXhnYmVfc2V0dXBfcnhfcmVzb3VyY2VzKHN0cnVjdCBpeGdiZV9yaW5nICpyeF9yaW5nKQogewotCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSByeF9yaW5nLT5kZXY7CiAJaW50IHNpemU7CiAKIAlzaXplID0gc2l6ZW9mKHN0cnVjdCBpeGdiZV9yeF9idWZmZXIpICogcnhfcmluZy0+Y291bnQ7Ci0JcnhfcmluZy0+cnhfYnVmZmVyX2luZm8gPSB2bWFsbG9jX25vZGUoc2l6ZSwgYWRhcHRlci0+bm9kZSk7CisJcnhfcmluZy0+cnhfYnVmZmVyX2luZm8gPSB2emFsbG9jX25vZGUoc2l6ZSwgcnhfcmluZy0+bnVtYV9ub2RlKTsKIAlpZiAoIXJ4X3JpbmctPnJ4X2J1ZmZlcl9pbmZvKQotCQlyeF9yaW5nLT5yeF9idWZmZXJfaW5mbyA9IHZtYWxsb2Moc2l6ZSk7Ci0JaWYgKCFyeF9yaW5nLT5yeF9idWZmZXJfaW5mbykgewotCQllX2Vycihwcm9iZSwgInZtYWxsb2MgYWxsb2NhdGlvbiBmYWlsZWQgZm9yIHRoZSBSeCAiCi0JCSAgICAgICJkZXNjcmlwdG9yIHJpbmdcbiIpOwotCQlnb3RvIGFsbG9jX2ZhaWxlZDsKLQl9Ci0JbWVtc2V0KHJ4X3JpbmctPnJ4X2J1ZmZlcl9pbmZvLCAwLCBzaXplKTsKKwkJcnhfcmluZy0+cnhfYnVmZmVyX2luZm8gPSB2emFsbG9jKHNpemUpOworCWlmICghcnhfcmluZy0+cnhfYnVmZmVyX2luZm8pCisJCWdvdG8gZXJyOwogCiAJLyogUm91bmQgdXAgdG8gbmVhcmVzdCA0SyAqLwogCXJ4X3JpbmctPnNpemUgPSByeF9yaW5nLT5jb3VudCAqIHNpemVvZih1bmlvbiBpeGdiZV9hZHZfcnhfZGVzYyk7CiAJcnhfcmluZy0+c2l6ZSA9IEFMSUdOKHJ4X3JpbmctPnNpemUsIDQwOTYpOwogCi0JcnhfcmluZy0+ZGVzYyA9IGRtYV9hbGxvY19jb2hlcmVudCgmcGRldi0+ZGV2LCByeF9yaW5nLT5zaXplLAorCXJ4X3JpbmctPmRlc2MgPSBkbWFfYWxsb2NfY29oZXJlbnQoZGV2LCByeF9yaW5nLT5zaXplLAogCQkJCQkgICAmcnhfcmluZy0+ZG1hLCBHRlBfS0VSTkVMKTsKIAotCWlmICghcnhfcmluZy0+ZGVzYykgewotCQllX2Vycihwcm9iZSwgIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCBmb3IgdGhlIFJ4ICIKLQkJICAgICAgImRlc2NyaXB0b3IgcmluZ1xuIik7Ci0JCXZmcmVlKHJ4X3JpbmctPnJ4X2J1ZmZlcl9pbmZvKTsKLQkJZ290byBhbGxvY19mYWlsZWQ7Ci0JfQorCWlmICghcnhfcmluZy0+ZGVzYykKKwkJZ290byBlcnI7CiAKIAlyeF9yaW5nLT5uZXh0X3RvX2NsZWFuID0gMDsKIAlyeF9yaW5nLT5uZXh0X3RvX3VzZSA9IDA7CiAKIAlyZXR1cm4gMDsKLQotYWxsb2NfZmFpbGVkOgorZXJyOgorCXZmcmVlKHJ4X3JpbmctPnJ4X2J1ZmZlcl9pbmZvKTsKKwlyeF9yaW5nLT5yeF9idWZmZXJfaW5mbyA9IE5VTEw7CisJZGV2X2VycihkZXYsICJVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgUnggZGVzY3JpcHRvciByaW5nXG4iKTsKIAlyZXR1cm4gLUVOT01FTTsKIH0KIApAQCAtNTA4NCwxMyArNTI5OSwxMiBAQAogICoKICAqIFJldHVybiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIG9uIGZhaWx1cmUKICAqKi8KLQogc3RhdGljIGludCBpeGdiZV9zZXR1cF9hbGxfcnhfcmVzb3VyY2VzKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQogewogCWludCBpLCBlcnIgPSAwOwogCiAJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykgewotCQllcnIgPSBpeGdiZV9zZXR1cF9yeF9yZXNvdXJjZXMoYWRhcHRlciwgYWRhcHRlci0+cnhfcmluZ1tpXSk7CisJCWVyciA9IGl4Z2JlX3NldHVwX3J4X3Jlc291cmNlcyhhZGFwdGVyLT5yeF9yaW5nW2ldKTsKIAkJaWYgKCFlcnIpCiAJCQljb250aW51ZTsKIAkJZV9lcnIocHJvYmUsICJBbGxvY2F0aW9uIGZvciBSeCBRdWV1ZSAldSBmYWlsZWRcbiIsIGkpOwpAQCAtNTEwMiwyMyArNTMxNiwyMyBAQAogCiAvKioKICAqIGl4Z2JlX2ZyZWVfdHhfcmVzb3VyY2VzIC0gRnJlZSBUeCBSZXNvdXJjZXMgcGVyIFF1ZXVlCi0gKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKICAqIEB0eF9yaW5nOiBUeCBkZXNjcmlwdG9yIHJpbmcgZm9yIGEgc3BlY2lmaWMgcXVldWUKICAqCiAgKiBGcmVlIGFsbCB0cmFuc21pdCBzb2Z0d2FyZSByZXNvdXJjZXMKICAqKi8KLXZvaWQgaXhnYmVfZnJlZV90eF9yZXNvdXJjZXMoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCQkgICAgIHN0cnVjdCBpeGdiZV9yaW5nICp0eF9yaW5nKQordm9pZCBpeGdiZV9mcmVlX3R4X3Jlc291cmNlcyhzdHJ1Y3QgaXhnYmVfcmluZyAqdHhfcmluZykKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7Ci0KLQlpeGdiZV9jbGVhbl90eF9yaW5nKGFkYXB0ZXIsIHR4X3JpbmcpOworCWl4Z2JlX2NsZWFuX3R4X3JpbmcodHhfcmluZyk7CiAKIAl2ZnJlZSh0eF9yaW5nLT50eF9idWZmZXJfaW5mbyk7CiAJdHhfcmluZy0+dHhfYnVmZmVyX2luZm8gPSBOVUxMOwogCi0JZG1hX2ZyZWVfY29oZXJlbnQoJnBkZXYtPmRldiwgdHhfcmluZy0+c2l6ZSwgdHhfcmluZy0+ZGVzYywKLQkJCSAgdHhfcmluZy0+ZG1hKTsKKwkvKiBpZiBub3Qgc2V0LCB0aGVuIGRvbid0IGZyZWUgKi8KKwlpZiAoIXR4X3JpbmctPmRlc2MpCisJCXJldHVybjsKKworCWRtYV9mcmVlX2NvaGVyZW50KHR4X3JpbmctPmRldiwgdHhfcmluZy0+c2l6ZSwKKwkJCSAgdHhfcmluZy0+ZGVzYywgdHhfcmluZy0+ZG1hKTsKIAogCXR4X3JpbmctPmRlc2MgPSBOVUxMOwogfQpAQCAtNTEzNSwyOCArNTM0OSwyOCBAQAogCiAJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGkrKykKIAkJaWYgKGFkYXB0ZXItPnR4X3JpbmdbaV0tPmRlc2MpCi0JCQlpeGdiZV9mcmVlX3R4X3Jlc291cmNlcyhhZGFwdGVyLCBhZGFwdGVyLT50eF9yaW5nW2ldKTsKKwkJCWl4Z2JlX2ZyZWVfdHhfcmVzb3VyY2VzKGFkYXB0ZXItPnR4X3JpbmdbaV0pOwogfQogCiAvKioKICAqIGl4Z2JlX2ZyZWVfcnhfcmVzb3VyY2VzIC0gRnJlZSBSeCBSZXNvdXJjZXMKLSAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQogICogQHJ4X3Jpbmc6IHJpbmcgdG8gY2xlYW4gdGhlIHJlc291cmNlcyBmcm9tCiAgKgogICogRnJlZSBhbGwgcmVjZWl2ZSBzb2Z0d2FyZSByZXNvdXJjZXMKICAqKi8KLXZvaWQgaXhnYmVfZnJlZV9yeF9yZXNvdXJjZXMoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCQkgICAgIHN0cnVjdCBpeGdiZV9yaW5nICpyeF9yaW5nKQordm9pZCBpeGdiZV9mcmVlX3J4X3Jlc291cmNlcyhzdHJ1Y3QgaXhnYmVfcmluZyAqcnhfcmluZykKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7Ci0KLQlpeGdiZV9jbGVhbl9yeF9yaW5nKGFkYXB0ZXIsIHJ4X3JpbmcpOworCWl4Z2JlX2NsZWFuX3J4X3JpbmcocnhfcmluZyk7CiAKIAl2ZnJlZShyeF9yaW5nLT5yeF9idWZmZXJfaW5mbyk7CiAJcnhfcmluZy0+cnhfYnVmZmVyX2luZm8gPSBOVUxMOwogCi0JZG1hX2ZyZWVfY29oZXJlbnQoJnBkZXYtPmRldiwgcnhfcmluZy0+c2l6ZSwgcnhfcmluZy0+ZGVzYywKLQkJCSAgcnhfcmluZy0+ZG1hKTsKKwkvKiBpZiBub3Qgc2V0LCB0aGVuIGRvbid0IGZyZWUgKi8KKwlpZiAoIXJ4X3JpbmctPmRlc2MpCisJCXJldHVybjsKKworCWRtYV9mcmVlX2NvaGVyZW50KHJ4X3JpbmctPmRldiwgcnhfcmluZy0+c2l6ZSwKKwkJCSAgcnhfcmluZy0+ZGVzYywgcnhfcmluZy0+ZG1hKTsKIAogCXJ4X3JpbmctPmRlc2MgPSBOVUxMOwogfQpAQCAtNTE3Myw3ICs1Mzg3LDcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspCiAJCWlmIChhZGFwdGVyLT5yeF9yaW5nW2ldLT5kZXNjKQotCQkJaXhnYmVfZnJlZV9yeF9yZXNvdXJjZXMoYWRhcHRlciwgYWRhcHRlci0+cnhfcmluZ1tpXSk7CisJCQlpeGdiZV9mcmVlX3J4X3Jlc291cmNlcyhhZGFwdGVyLT5yeF9yaW5nW2ldKTsKIH0KIAogLyoqCkBAIC01MTg2LDYgKzU0MDAsNyBAQAogc3RhdGljIGludCBpeGdiZV9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBuZXdfbXR1KQogewogCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCWludCBtYXhfZnJhbWUgPSBuZXdfbXR1ICsgRVRIX0hMRU4gKyBFVEhfRkNTX0xFTjsKIAogCS8qIE1UVSA8IDY4IGlzIGFuIGVycm9yIGFuZCBjYXVzZXMgcHJvYmxlbXMgb24gc29tZSBrZXJuZWxzICovCkBAIC01MTk2LDYgKzU0MTEsOSBAQAogCS8qIG11c3Qgc2V0IG5ldyBNVFUgYmVmb3JlIGNhbGxpbmcgZG93biBvciB1cCAqLwogCW5ldGRldi0+bXR1ID0gbmV3X210dTsKIAorCWh3LT5mYy5oaWdoX3dhdGVyID0gRkNfSElHSF9XQVRFUihtYXhfZnJhbWUpOworCWh3LT5mYy5sb3dfd2F0ZXIgPSBGQ19MT1dfV0FURVIobWF4X2ZyYW1lKTsKKwogCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCiAJCWl4Z2JlX3JlaW5pdF9sb2NrZWQoYWRhcHRlcik7CiAKQEAgLTUyOTEsOCArNTUwOSw4IEBACiAjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IGl4Z2JlX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwogCXUzMiBlcnI7CiAKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7CkBAIC01MzIzLDcgKzU1NDEsNyBAQAogCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX1dVUywgfjApOwogCiAJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgewotCQllcnIgPSBpeGdiZV9vcGVuKGFkYXB0ZXItPm5ldGRldik7CisJCWVyciA9IGl4Z2JlX29wZW4obmV0ZGV2KTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CiAJfQpAQCAtNTMzNiw4ICs1NTU0LDggQEAKIAogc3RhdGljIGludCBfX2l4Z2JlX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBib29sICplbmFibGVfd2FrZSkKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwogCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJdTMyIGN0cmwsIGZjdHJsOwogCXUzMiB3dWZjID0gYWRhcHRlci0+d29sOwpAQCAtNTM1NCw2ICs1NTcyLDggQEAKIAkJaXhnYmVfZnJlZV9hbGxfcnhfcmVzb3VyY2VzKGFkYXB0ZXIpOwogCX0KIAorCWl4Z2JlX2NsZWFyX2ludGVycnVwdF9zY2hlbWUoYWRhcHRlcik7CisKICNpZmRlZiBDT05GSUdfUE0KIAlyZXR2YWwgPSBwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKIAlpZiAocmV0dmFsKQpAQCAtNTM4MCwxNSArNTYwMCwyMCBAQAogCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1dVRkMsIDApOwogCX0KIAotCWlmICh3dWZjICYmIGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikKLQkJcGNpX3dha2VfZnJvbV9kMyhwZGV2LCB0cnVlKTsKLQllbHNlCisJc3dpdGNoIChody0+bWFjLnR5cGUpIHsKKwljYXNlIGl4Z2JlX21hY184MjU5OEVCOgogCQlwY2lfd2FrZV9mcm9tX2QzKHBkZXYsIGZhbHNlKTsKKwkJYnJlYWs7CisJY2FzZSBpeGdiZV9tYWNfODI1OTlFQjoKKwljYXNlIGl4Z2JlX21hY19YNTQwOgorCQlwY2lfd2FrZV9mcm9tX2QzKHBkZXYsICEhd3VmYyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KIAogCSplbmFibGVfd2FrZSA9ICEhd3VmYzsKIAotCWl4Z2JlX2NsZWFyX2ludGVycnVwdF9zY2hlbWUoYWRhcHRlcik7Ci0KIAlpeGdiZV9yZWxlYXNlX2h3X2NvbnRyb2woYWRhcHRlcik7CiAKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CkBAIC01NDM3LDEwICs1NjYyLDEyIEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKIAlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXN0cnVjdCBpeGdiZV9od19zdGF0cyAqaHdzdGF0cyA9ICZhZGFwdGVyLT5zdGF0czsKIAl1NjQgdG90YWxfbXBjID0gMDsKIAl1MzIgaSwgbWlzc2VkX3J4ID0gMCwgbXBjLCBicHJjLCBseG9uLCBseG9mZiwgeG9uX29mZl90b3Q7Ci0JdTY0IG5vbl9lb3BfZGVzY3MgPSAwLCByZXN0YXJ0X3F1ZXVlID0gMDsKLQlzdHJ1Y3QgaXhnYmVfaHdfc3RhdHMgKmh3c3RhdHMgPSAmYWRhcHRlci0+c3RhdHM7CisJdTY0IG5vbl9lb3BfZGVzY3MgPSAwLCByZXN0YXJ0X3F1ZXVlID0gMCwgdHhfYnVzeSA9IDA7CisJdTY0IGFsbG9jX3J4X3BhZ2VfZmFpbGVkID0gMCwgYWxsb2NfcnhfYnVmZl9mYWlsZWQgPSAwOworCXU2NCBieXRlcyA9IDAsIHBhY2tldHMgPSAwOwogCiAJaWYgKHRlc3RfYml0KF9fSVhHQkVfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSB8fAogCSAgICB0ZXN0X2JpdChfX0lYR0JFX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKSkKQEAgLTU0NTMsMjEgKzU2ODAsNDEgQEAKIAkJCWFkYXB0ZXItPmh3X3J4X25vX2RtYV9yZXNvdXJjZXMgKz0KIAkJCQlJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUVBSREMoaSkpOwogCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKSB7Ci0JCQlyc2NfY291bnQgKz0gYWRhcHRlci0+cnhfcmluZ1tpXS0+cnNjX2NvdW50OwotCQkJcnNjX2ZsdXNoICs9IGFkYXB0ZXItPnJ4X3JpbmdbaV0tPnJzY19mbHVzaDsKKwkJCXJzY19jb3VudCArPSBhZGFwdGVyLT5yeF9yaW5nW2ldLT5yeF9zdGF0cy5yc2NfY291bnQ7CisJCQlyc2NfZmx1c2ggKz0gYWRhcHRlci0+cnhfcmluZ1tpXS0+cnhfc3RhdHMucnNjX2ZsdXNoOwogCQl9CiAJCWFkYXB0ZXItPnJzY190b3RhbF9jb3VudCA9IHJzY19jb3VudDsKIAkJYWRhcHRlci0+cnNjX3RvdGFsX2ZsdXNoID0gcnNjX2ZsdXNoOwogCX0KIAotCS8qIGdhdGhlciBzb21lIHN0YXRzIHRvIHRoZSBhZGFwdGVyIHN0cnVjdCB0aGF0IGFyZSBwZXIgcXVldWUgKi8KLQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKQotCQlyZXN0YXJ0X3F1ZXVlICs9IGFkYXB0ZXItPnR4X3JpbmdbaV0tPnJlc3RhcnRfcXVldWU7Ci0JYWRhcHRlci0+cmVzdGFydF9xdWV1ZSA9IHJlc3RhcnRfcXVldWU7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKQotCQlub25fZW9wX2Rlc2NzICs9IGFkYXB0ZXItPnJ4X3JpbmdbaV0tPm5vbl9lb3BfZGVzY3M7CisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykgeworCQlzdHJ1Y3QgaXhnYmVfcmluZyAqcnhfcmluZyA9IGFkYXB0ZXItPnJ4X3JpbmdbaV07CisJCW5vbl9lb3BfZGVzY3MgKz0gcnhfcmluZy0+cnhfc3RhdHMubm9uX2VvcF9kZXNjczsKKwkJYWxsb2NfcnhfcGFnZV9mYWlsZWQgKz0gcnhfcmluZy0+cnhfc3RhdHMuYWxsb2NfcnhfcGFnZV9mYWlsZWQ7CisJCWFsbG9jX3J4X2J1ZmZfZmFpbGVkICs9IHJ4X3JpbmctPnJ4X3N0YXRzLmFsbG9jX3J4X2J1ZmZfZmFpbGVkOworCQlieXRlcyArPSByeF9yaW5nLT5zdGF0cy5ieXRlczsKKwkJcGFja2V0cyArPSByeF9yaW5nLT5zdGF0cy5wYWNrZXRzOworCX0KIAlhZGFwdGVyLT5ub25fZW9wX2Rlc2NzID0gbm9uX2VvcF9kZXNjczsKKwlhZGFwdGVyLT5hbGxvY19yeF9wYWdlX2ZhaWxlZCA9IGFsbG9jX3J4X3BhZ2VfZmFpbGVkOworCWFkYXB0ZXItPmFsbG9jX3J4X2J1ZmZfZmFpbGVkID0gYWxsb2NfcnhfYnVmZl9mYWlsZWQ7CisJbmV0ZGV2LT5zdGF0cy5yeF9ieXRlcyA9IGJ5dGVzOworCW5ldGRldi0+c3RhdHMucnhfcGFja2V0cyA9IHBhY2tldHM7CisKKwlieXRlcyA9IDA7CisJcGFja2V0cyA9IDA7CisJLyogZ2F0aGVyIHNvbWUgc3RhdHMgdG8gdGhlIGFkYXB0ZXIgc3RydWN0IHRoYXQgYXJlIHBlciBxdWV1ZSAqLworCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspIHsKKwkJc3RydWN0IGl4Z2JlX3JpbmcgKnR4X3JpbmcgPSBhZGFwdGVyLT50eF9yaW5nW2ldOworCQlyZXN0YXJ0X3F1ZXVlICs9IHR4X3JpbmctPnR4X3N0YXRzLnJlc3RhcnRfcXVldWU7CisJCXR4X2J1c3kgKz0gdHhfcmluZy0+dHhfc3RhdHMudHhfYnVzeTsKKwkJYnl0ZXMgKz0gdHhfcmluZy0+c3RhdHMuYnl0ZXM7CisJCXBhY2tldHMgKz0gdHhfcmluZy0+c3RhdHMucGFja2V0czsKKwl9CisJYWRhcHRlci0+cmVzdGFydF9xdWV1ZSA9IHJlc3RhcnRfcXVldWU7CisJYWRhcHRlci0+dHhfYnVzeSA9IHR4X2J1c3k7CisJbmV0ZGV2LT5zdGF0cy50eF9ieXRlcyA9IGJ5dGVzOworCW5ldGRldi0+c3RhdHMudHhfcGFja2V0cyA9IHBhY2tldHM7CiAKIAlod3N0YXRzLT5jcmNlcnJzICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9DUkNFUlJTKTsKIAlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CkBAIC01NDgyLDE3ICs1NzI5LDE4IEBACiAJCWh3c3RhdHMtPnFidGNbaV0gKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1FCVEMoaSkpOwogCQlod3N0YXRzLT5xcHJjW2ldICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9RUFJDKGkpKTsKIAkJaHdzdGF0cy0+cWJyY1tpXSArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUUJSQyhpKSk7Ci0JCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpIHsKLQkJCWh3c3RhdHMtPnB4b25yeGNbaV0gKz0KLQkJCQlJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUFhPTlJYQ05UKGkpKTsKLQkJCWh3c3RhdHMtPnB4b2ZmcnhjW2ldICs9Ci0JCQkJSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1BYT0ZGUlhDTlQoaSkpOwotCQkJaHdzdGF0cy0+cXByZGNbaV0gKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1FQUkRDKGkpKTsKLQkJfSBlbHNlIHsKKwkJc3dpdGNoIChody0+bWFjLnR5cGUpIHsKKwkJY2FzZSBpeGdiZV9tYWNfODI1OThFQjoKIAkJCWh3c3RhdHMtPnB4b25yeGNbaV0gKz0KIAkJCQlJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUFhPTlJYQyhpKSk7Ci0JCQlod3N0YXRzLT5weG9mZnJ4Y1tpXSArPQotCQkJCUlYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9QWE9GRlJYQyhpKSk7CisJCQlicmVhazsKKwkJY2FzZSBpeGdiZV9tYWNfODI1OTlFQjoKKwkJY2FzZSBpeGdiZV9tYWNfWDU0MDoKKwkJCWh3c3RhdHMtPnB4b25yeGNbaV0gKz0KKwkJCQlJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUFhPTlJYQ05UKGkpKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CiAJCX0KIAkJaHdzdGF0cy0+cHhvbnR4Y1tpXSArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUFhPTlRYQyhpKSk7CiAJCWh3c3RhdHMtPnB4b2ZmdHhjW2ldICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9QWE9GRlRYQyhpKSk7CkBAIC01NTAxLDIxICs1NzQ5LDI1IEBACiAJLyogd29yayBhcm91bmQgaGFyZHdhcmUgY291bnRpbmcgaXNzdWUgKi8KIAlod3N0YXRzLT5ncHJjIC09IG1pc3NlZF9yeDsKIAorCWl4Z2JlX3VwZGF0ZV94b2ZmX3JlY2VpdmVkKGFkYXB0ZXIpOworCiAJLyogODI1OTggaGFyZHdhcmUgb25seSBoYXMgYSAzMiBiaXQgY291bnRlciBpbiB0aGUgaGlnaCByZWdpc3RlciAqLwotCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpIHsKLQkJdTY0IHRtcDsKKwlzd2l0Y2ggKGh3LT5tYWMudHlwZSkgeworCWNhc2UgaXhnYmVfbWFjXzgyNTk4RUI6CisJCWh3c3RhdHMtPmx4b25yeGMgKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0xYT05SWEMpOworCQlod3N0YXRzLT5nb3JjICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9HT1JDSCk7CisJCWh3c3RhdHMtPmdvdGMgKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0dPVENIKTsKKwkJaHdzdGF0cy0+dG9yICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9UT1JIKTsKKwkJYnJlYWs7CisJY2FzZSBpeGdiZV9tYWNfODI1OTlFQjoKKwljYXNlIGl4Z2JlX21hY19YNTQwOgogCQlod3N0YXRzLT5nb3JjICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9HT1JDTCk7Ci0JCXRtcCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9HT1JDSCkgJiAweEY7Ci0JCQkJCQkvKiA0IGhpZ2ggYml0cyBvZiBHT1JDICovCi0JCWh3c3RhdHMtPmdvcmMgKz0gKHRtcCA8PCAzMik7CisJCUlYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9HT1JDSCk7IC8qIHRvIGNsZWFyICovCiAJCWh3c3RhdHMtPmdvdGMgKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0dPVENMKTsKLQkJdG1wID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0dPVENIKSAmIDB4RjsKLQkJCQkJCS8qIDQgaGlnaCBiaXRzIG9mIEdPVEMgKi8KLQkJaHdzdGF0cy0+Z290YyArPSAodG1wIDw8IDMyKTsKKwkJSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0dPVENIKTsgLyogdG8gY2xlYXIgKi8KIAkJaHdzdGF0cy0+dG9yICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9UT1JMKTsKLQkJSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1RPUkgpOwkvKiB0byBjbGVhciAqLworCQlJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVE9SSCk7IC8qIHRvIGNsZWFyICovCiAJCWh3c3RhdHMtPmx4b25yeGMgKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0xYT05SWENOVCk7Ci0JCWh3c3RhdHMtPmx4b2ZmcnhjICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9MWE9GRlJYQ05UKTsKIAkJaHdzdGF0cy0+ZmRpcm1hdGNoICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9GRElSTUFUQ0gpOwogCQlod3N0YXRzLT5mZGlybWlzcyArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfRkRJUk1JU1MpOwogI2lmZGVmIElYR0JFX0ZDT0UKQEAgLTU1MjYsMTIgKzU3NzgsOSBAQAogCQlod3N0YXRzLT5mY29lZHdyYyArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfRkNPRURXUkMpOwogCQlod3N0YXRzLT5mY29lZHd0YyArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfRkNPRURXVEMpOwogI2VuZGlmIC8qIElYR0JFX0ZDT0UgKi8KLQl9IGVsc2UgewotCQlod3N0YXRzLT5seG9ucnhjICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9MWE9OUlhDKTsKLQkJaHdzdGF0cy0+bHhvZmZyeGMgKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0xYT0ZGUlhDKTsKLQkJaHdzdGF0cy0+Z29yYyArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfR09SQ0gpOwotCQlod3N0YXRzLT5nb3RjICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9HT1RDSCk7Ci0JCWh3c3RhdHMtPnRvciArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVE9SSCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOwogCX0KIAlicHJjID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0JQUkMpOwogCWh3c3RhdHMtPmJwcmMgKz0gYnByYzsKQEAgLTU3MDQsOCArNTk1Myw4IEBACiAKIAlpZiAoaXhnYmVfcmVpbml0X2ZkaXJfdGFibGVzXzgyNTk5KGh3KSA9PSAwKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspCi0JCQlzZXRfYml0KF9fSVhHQkVfRkRJUl9JTklUX0RPTkUsCi0JCQkJJihhZGFwdGVyLT50eF9yaW5nW2ldLT5yZWluaXRfc3RhdGUpKTsKKwkJCXNldF9iaXQoX19JWEdCRV9UWF9GRElSX0lOSVRfRE9ORSwKKwkJCQkmKGFkYXB0ZXItPnR4X3JpbmdbaV0tPnN0YXRlKSk7CiAJfSBlbHNlIHsKIAkJZV9lcnIocHJvYmUsICJmYWlsZWQgdG8gZmluaXNoIEZESVIgcmUtaW5pdGlhbGl6YXRpb24sICIKIAkJICAgICAgImlnbm9yZWQgYWRkaW5nIEZESVIgQVRSIGZpbHRlcnNcbiIpOwpAQCAtNTcxNCw2ICs1OTYzLDI2IEBACiAJbmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhhZGFwdGVyLT5uZXRkZXYpOwogfQogCitzdGF0aWMgdm9pZCBpeGdiZV9zcG9vZl9jaGVjayhzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwl1MzIgc3N2cGM7CisKKwkvKiBEbyBub3QgcGVyZm9ybSBzcG9vZiBjaGVjayBmb3IgODI1OTggKi8KKwlpZiAoYWRhcHRlci0+aHcubWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk4RUIpCisJCXJldHVybjsKKworCXNzdnBjID0gSVhHQkVfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9TU1ZQQyk7CisKKwkvKgorCSAqIHNzdnBjIHJlZ2lzdGVyIGlzIGNsZWFyZWQgb24gcmVhZCwgaWYgemVybyB0aGVuIG5vCisJICogc3Bvb2ZlZCBwYWNrZXRzIGluIHRoZSBsYXN0IGludGVydmFsLgorCSAqLworCWlmICghc3N2cGMpCisJCXJldHVybjsKKworCWVfd2FybihkcnYsICIlZCBTcG9vZmVkIHBhY2tldHMgZGV0ZWN0ZWRcbiIsIHNzdnBjKTsKK30KKwogc3RhdGljIERFRklORV9NVVRFWChpeGdiZV93YXRjaGRvZ19sb2NrKTsKIAogLyoqCkBAIC01NzY3LDE3ICs2MDM2LDI3IEBACiAJCWlmICghbmV0aWZfY2Fycmllcl9vayhuZXRkZXYpKSB7CiAJCQlib29sIGZsb3dfcngsIGZsb3dfdHg7CiAKLQkJCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpIHsKLQkJCQl1MzIgbWZsY24gPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTUZMQ04pOwotCQkJCXUzMiBmY2NmZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9GQ0NGRyk7Ci0JCQkJZmxvd19yeCA9ICEhKG1mbGNuICYgSVhHQkVfTUZMQ05fUkZDRSk7Ci0JCQkJZmxvd190eCA9ICEhKGZjY2ZnICYgSVhHQkVfRkNDRkdfVEZDRV84MDJfM1gpOwotCQkJfSBlbHNlIHsKKwkJCXN3aXRjaCAoaHctPm1hYy50eXBlKSB7CisJCQljYXNlIGl4Z2JlX21hY184MjU5OEVCOiB7CiAJCQkJdTMyIGZyY3RsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0ZDVFJMKTsKIAkJCQl1MzIgcm1jcyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9STUNTKTsKIAkJCQlmbG93X3J4ID0gISEoZnJjdGwgJiBJWEdCRV9GQ1RSTF9SRkNFKTsKIAkJCQlmbG93X3R4ID0gISEocm1jcyAmIElYR0JFX1JNQ1NfVEZDRV84MDJfM1gpOwogCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSBpeGdiZV9tYWNfODI1OTlFQjoKKwkJCWNhc2UgaXhnYmVfbWFjX1g1NDA6IHsKKwkJCQl1MzIgbWZsY24gPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTUZMQ04pOworCQkJCXUzMiBmY2NmZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9GQ0NGRyk7CisJCQkJZmxvd19yeCA9ICEhKG1mbGNuICYgSVhHQkVfTUZMQ05fUkZDRSk7CisJCQkJZmxvd190eCA9ICEhKGZjY2ZnICYgSVhHQkVfRkNDRkdfVEZDRV84MDJfM1gpOworCQkJfQorCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlmbG93X3R4ID0gZmFsc2U7CisJCQkJZmxvd19yeCA9IGZhbHNlOworCQkJCWJyZWFrOworCQkJfQogCiAJCQllX2luZm8oZHJ2LCAiTklDIExpbmsgaXMgVXAgJXMsIEZsb3cgQ29udHJvbDogJXNcbiIsCiAJCQkgICAgICAgKGxpbmtfc3BlZWQgPT0gSVhHQkVfTElOS19TUEVFRF8xMEdCX0ZVTEwgPwpAQCAtNTc5MSw3ICs2MDcwLDEwIEBACiAJCQluZXRpZl9jYXJyaWVyX29uKG5ldGRldik7CiAJCX0gZWxzZSB7CiAJCQkvKiBGb3JjZSBkZXRlY3Rpb24gb2YgaHVuZyBjb250cm9sbGVyICovCi0JCQlhZGFwdGVyLT5kZXRlY3RfdHhfaHVuZyA9IHRydWU7CisJCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKSB7CisJCQkJdHhfcmluZyA9IGFkYXB0ZXItPnR4X3JpbmdbaV07CisJCQkJc2V0X2NoZWNrX2Zvcl90eF9oYW5nKHR4X3JpbmcpOworCQkJfQogCQl9CiAJfSBlbHNlIHsKIAkJYWRhcHRlci0+bGlua191cCA9IGZhbHNlOwpAQCAtNTgyMSw2ICs2MTAzLDcgQEAKIAkJfQogCX0KIAorCWl4Z2JlX3Nwb29mX2NoZWNrKGFkYXB0ZXIpOwogCWl4Z2JlX3VwZGF0ZV9zdGF0cyhhZGFwdGVyKTsKIAltdXRleF91bmxvY2soJml4Z2JlX3dhdGNoZG9nX2xvY2spOwogfQpAQCAtNjAwMywxNSArNjI4NiwxNyBAQAogc3RhdGljIGludCBpeGdiZV90eF9tYXAoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCQlzdHJ1Y3QgaXhnYmVfcmluZyAqdHhfcmluZywKIAkJCXN0cnVjdCBza19idWZmICpza2IsIHUzMiB0eF9mbGFncywKLQkJCXVuc2lnbmVkIGludCBmaXJzdCkKKwkJCXVuc2lnbmVkIGludCBmaXJzdCwgY29uc3QgdTggaGRyX2xlbikKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisJc3RydWN0IGRldmljZSAqZGV2ID0gdHhfcmluZy0+ZGV2OwogCXN0cnVjdCBpeGdiZV90eF9idWZmZXIgKnR4X2J1ZmZlcl9pbmZvOwogCXVuc2lnbmVkIGludCBsZW47CiAJdW5zaWduZWQgaW50IHRvdGFsID0gc2tiLT5sZW47CiAJdW5zaWduZWQgaW50IG9mZnNldCA9IDAsIHNpemUsIGNvdW50ID0gMCwgaTsKIAl1bnNpZ25lZCBpbnQgbnJfZnJhZ3MgPSBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOwogCXVuc2lnbmVkIGludCBmOworCXVuc2lnbmVkIGludCBieXRlY291bnQgPSBza2ItPmxlbjsKKwl1MTYgZ3NvX3NlZ3MgPSAxOwogCiAJaSA9IHR4X3JpbmctPm5leHRfdG9fdXNlOwogCkBAIC02MDI2LDEwICs2MzExLDEwIEBACiAKIAkJdHhfYnVmZmVyX2luZm8tPmxlbmd0aCA9IHNpemU7CiAJCXR4X2J1ZmZlcl9pbmZvLT5tYXBwZWRfYXNfcGFnZSA9IGZhbHNlOwotCQl0eF9idWZmZXJfaW5mby0+ZG1hID0gZG1hX21hcF9zaW5nbGUoJnBkZXYtPmRldiwKKwkJdHhfYnVmZmVyX2luZm8tPmRtYSA9IGRtYV9tYXBfc2luZ2xlKGRldiwKIAkJCQkJCSAgICAgc2tiLT5kYXRhICsgb2Zmc2V0LAogCQkJCQkJICAgICBzaXplLCBETUFfVE9fREVWSUNFKTsKLQkJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKCZwZGV2LT5kZXYsIHR4X2J1ZmZlcl9pbmZvLT5kbWEpKQorCQlpZiAoZG1hX21hcHBpbmdfZXJyb3IoZGV2LCB0eF9idWZmZXJfaW5mby0+ZG1hKSkKIAkJCWdvdG8gZG1hX2Vycm9yOwogCQl0eF9idWZmZXJfaW5mby0+dGltZV9zdGFtcCA9IGppZmZpZXM7CiAJCXR4X2J1ZmZlcl9pbmZvLT5uZXh0X3RvX3dhdGNoID0gaTsKQEAgLTYwNjIsMTIgKzYzNDcsMTIgQEAKIAkJCXNpemUgPSBtaW4obGVuLCAodWludClJWEdCRV9NQVhfREFUQV9QRVJfVFhEKTsKIAogCQkJdHhfYnVmZmVyX2luZm8tPmxlbmd0aCA9IHNpemU7Ci0JCQl0eF9idWZmZXJfaW5mby0+ZG1hID0gZG1hX21hcF9wYWdlKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCQl0eF9idWZmZXJfaW5mby0+ZG1hID0gZG1hX21hcF9wYWdlKGRldiwKIAkJCQkJCQkgICBmcmFnLT5wYWdlLAogCQkJCQkJCSAgIG9mZnNldCwgc2l6ZSwKIAkJCQkJCQkgICBETUFfVE9fREVWSUNFKTsKIAkJCXR4X2J1ZmZlcl9pbmZvLT5tYXBwZWRfYXNfcGFnZSA9IHRydWU7Ci0JCQlpZiAoZG1hX21hcHBpbmdfZXJyb3IoJnBkZXYtPmRldiwgdHhfYnVmZmVyX2luZm8tPmRtYSkpCisJCQlpZiAoZG1hX21hcHBpbmdfZXJyb3IoZGV2LCB0eF9idWZmZXJfaW5mby0+ZG1hKSkKIAkJCQlnb3RvIGRtYV9lcnJvcjsKIAkJCXR4X2J1ZmZlcl9pbmZvLT50aW1lX3N0YW1wID0gamlmZmllczsKIAkJCXR4X2J1ZmZlcl9pbmZvLT5uZXh0X3RvX3dhdGNoID0gaTsKQEAgLTYwODEsNiArNjM2NiwxOSBAQAogCQkJYnJlYWs7CiAJfQogCisJaWYgKHR4X2ZsYWdzICYgSVhHQkVfVFhfRkxBR1NfVFNPKQorCQlnc29fc2VncyA9IHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NlZ3M7CisjaWZkZWYgSVhHQkVfRkNPRQorCS8qIGFkanVzdCBmb3IgRkNvRSBTZXF1ZW5jZSBPZmZsb2FkICovCisJZWxzZSBpZiAodHhfZmxhZ3MgJiBJWEdCRV9UWF9GTEFHU19GU08pCisJCWdzb19zZWdzID0gRElWX1JPVU5EX1VQKHNrYi0+bGVuIC0gaGRyX2xlbiwKKwkJCQkJc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZSk7CisjZW5kaWYgLyogSVhHQkVfRkNPRSAqLworCWJ5dGVjb3VudCArPSAoZ3NvX3NlZ3MgLSAxKSAqIGhkcl9sZW47CisKKwkvKiBtdWx0aXBseSBkYXRhIGNodW5rcyBieSBzaXplIG9mIGhlYWRlcnMgKi8KKwl0eF9yaW5nLT50eF9idWZmZXJfaW5mb1tpXS5ieXRlY291bnQgPSBieXRlY291bnQ7CisJdHhfcmluZy0+dHhfYnVmZmVyX2luZm9baV0uZ3NvX3NlZ3MgPSBnc29fc2VnczsKIAl0eF9yaW5nLT50eF9idWZmZXJfaW5mb1tpXS5za2IgPSBza2I7CiAJdHhfcmluZy0+dHhfYnVmZmVyX2luZm9bZmlyc3RdLm5leHRfdG9fd2F0Y2ggPSBpOwogCkBAIC02MTAyLDE0ICs2NDAwLDEzIEBACiAJCQlpICs9IHR4X3JpbmctPmNvdW50OwogCQlpLS07CiAJCXR4X2J1ZmZlcl9pbmZvID0gJnR4X3JpbmctPnR4X2J1ZmZlcl9pbmZvW2ldOwotCQlpeGdiZV91bm1hcF9hbmRfZnJlZV90eF9yZXNvdXJjZShhZGFwdGVyLCB0eF9idWZmZXJfaW5mbyk7CisJCWl4Z2JlX3VubWFwX2FuZF9mcmVlX3R4X3Jlc291cmNlKHR4X3JpbmcsIHR4X2J1ZmZlcl9pbmZvKTsKIAl9CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgaXhnYmVfdHhfcXVldWUoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCQkgICBzdHJ1Y3QgaXhnYmVfcmluZyAqdHhfcmluZywKK3N0YXRpYyB2b2lkIGl4Z2JlX3R4X3F1ZXVlKHN0cnVjdCBpeGdiZV9yaW5nICp0eF9yaW5nLAogCQkJICAgaW50IHR4X2ZsYWdzLCBpbnQgY291bnQsIHUzMiBwYXlsZW4sIHU4IGhkcl9sZW4pCiB7CiAJdW5pb24gaXhnYmVfYWR2X3R4X2Rlc2MgKnR4X2Rlc2MgPSBOVUxMOwpAQCAtNjE3NCw2MCArNjQ3MSw0NiBAQAogCXdtYigpOwogCiAJdHhfcmluZy0+bmV4dF90b191c2UgPSBpOwotCXdyaXRlbChpLCBhZGFwdGVyLT5ody5od19hZGRyICsgdHhfcmluZy0+dGFpbCk7CisJd3JpdGVsKGksIHR4X3JpbmctPnRhaWwpOwogfQogCiBzdGF0aWMgdm9pZCBpeGdiZV9hdHIoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBza19idWZmICpza2IsCi0JCSAgICAgIGludCBxdWV1ZSwgdTMyIHR4X2ZsYWdzLCBfX2JlMTYgcHJvdG9jb2wpCisJCSAgICAgIHU4IHF1ZXVlLCB1MzIgdHhfZmxhZ3MsIF9fYmUxNiBwcm90b2NvbCkKIHsKIAlzdHJ1Y3QgaXhnYmVfYXRyX2lucHV0IGF0cl9pbnB1dDsKLQlzdHJ1Y3QgdGNwaGRyICp0aDsKIAlzdHJ1Y3QgaXBoZHIgKmlwaCA9IGlwX2hkcihza2IpOwogCXN0cnVjdCBldGhoZHIgKmV0aCA9IChzdHJ1Y3QgZXRoaGRyICopc2tiLT5kYXRhOwotCXUxNiB2bGFuX2lkLCBzcmNfcG9ydCwgZHN0X3BvcnQsIGZsZXhfYnl0ZXM7Ci0JdTMyIHNyY19pcHY0X2FkZHIsIGRzdF9pcHY0X2FkZHI7Ci0JdTggbDR0eXBlID0gMDsKKwlzdHJ1Y3QgdGNwaGRyICp0aDsKKwl1MTYgdmxhbl9pZDsKIAotCS8qIFJpZ2h0IG5vdywgd2Ugc3VwcG9ydCBJUHY0IG9ubHkgKi8KLQlpZiAocHJvdG9jb2wgIT0gaHRvbnMoRVRIX1BfSVApKQorCS8qIFJpZ2h0IG5vdywgd2Ugc3VwcG9ydCBJUHY0IHcvIFRDUCBvbmx5ICovCisJaWYgKHByb3RvY29sICE9IGh0b25zKEVUSF9QX0lQKSB8fAorCSAgICBpcGgtPnByb3RvY29sICE9IElQUFJPVE9fVENQKQogCQlyZXR1cm47Ci0JLyogY2hlY2sgaWYgd2UncmUgVURQIG9yIFRDUCAqLwotCWlmIChpcGgtPnByb3RvY29sID09IElQUFJPVE9fVENQKSB7Ci0JCXRoID0gdGNwX2hkcihza2IpOwotCQlzcmNfcG9ydCA9IHRoLT5zb3VyY2U7Ci0JCWRzdF9wb3J0ID0gdGgtPmRlc3Q7Ci0JCWw0dHlwZSB8PSBJWEdCRV9BVFJfTDRUWVBFX1RDUDsKLQkJLyogbDR0eXBlIElQdjQgdHlwZSBpcyAwLCBubyBuZWVkIHRvIGFzc2lnbiAqLwotCX0gZWxzZSB7Ci0JCS8qIFVuc3VwcG9ydGVkIEw0IGhlYWRlciwganVzdCBiYWlsIGhlcmUgKi8KLQkJcmV0dXJuOwotCX0KIAogCW1lbXNldCgmYXRyX2lucHV0LCAwLCBzaXplb2Yoc3RydWN0IGl4Z2JlX2F0cl9pbnB1dCkpOwogCiAJdmxhbl9pZCA9ICh0eF9mbGFncyAmIElYR0JFX1RYX0ZMQUdTX1ZMQU5fTUFTSykgPj4KIAkJICAgSVhHQkVfVFhfRkxBR1NfVkxBTl9TSElGVDsKLQlzcmNfaXB2NF9hZGRyID0gaXBoLT5zYWRkcjsKLQlkc3RfaXB2NF9hZGRyID0gaXBoLT5kYWRkcjsKLQlmbGV4X2J5dGVzID0gZXRoLT5oX3Byb3RvOworCisJdGggPSB0Y3BfaGRyKHNrYik7CiAKIAlpeGdiZV9hdHJfc2V0X3ZsYW5faWRfODI1OTkoJmF0cl9pbnB1dCwgdmxhbl9pZCk7Ci0JaXhnYmVfYXRyX3NldF9zcmNfcG9ydF84MjU5OSgmYXRyX2lucHV0LCBkc3RfcG9ydCk7Ci0JaXhnYmVfYXRyX3NldF9kc3RfcG9ydF84MjU5OSgmYXRyX2lucHV0LCBzcmNfcG9ydCk7Ci0JaXhnYmVfYXRyX3NldF9mbGV4X2J5dGVfODI1OTkoJmF0cl9pbnB1dCwgZmxleF9ieXRlcyk7Ci0JaXhnYmVfYXRyX3NldF9sNHR5cGVfODI1OTkoJmF0cl9pbnB1dCwgbDR0eXBlKTsKKwlpeGdiZV9hdHJfc2V0X3NyY19wb3J0XzgyNTk5KCZhdHJfaW5wdXQsIHRoLT5kZXN0KTsKKwlpeGdiZV9hdHJfc2V0X2RzdF9wb3J0XzgyNTk5KCZhdHJfaW5wdXQsIHRoLT5zb3VyY2UpOworCWl4Z2JlX2F0cl9zZXRfZmxleF9ieXRlXzgyNTk5KCZhdHJfaW5wdXQsIGV0aC0+aF9wcm90byk7CisJaXhnYmVfYXRyX3NldF9sNHR5cGVfODI1OTkoJmF0cl9pbnB1dCwgSVhHQkVfQVRSX0w0VFlQRV9UQ1ApOwogCS8qIHNyYyBhbmQgZHN0IGFyZSBpbnZlcnRlZCwgdGhpbmsgaG93IHRoZSByZWNlaXZlciBzZWVzIHRoZW0gKi8KLQlpeGdiZV9hdHJfc2V0X3NyY19pcHY0XzgyNTk5KCZhdHJfaW5wdXQsIGRzdF9pcHY0X2FkZHIpOwotCWl4Z2JlX2F0cl9zZXRfZHN0X2lwdjRfODI1OTkoJmF0cl9pbnB1dCwgc3JjX2lwdjRfYWRkcik7CisJaXhnYmVfYXRyX3NldF9zcmNfaXB2NF84MjU5OSgmYXRyX2lucHV0LCBpcGgtPmRhZGRyKTsKKwlpeGdiZV9hdHJfc2V0X2RzdF9pcHY0XzgyNTk5KCZhdHJfaW5wdXQsIGlwaC0+c2FkZHIpOwogCiAJLyogVGhpcyBhc3N1bWVzIHRoZSBSeCBxdWV1ZSBhbmQgVHggcXVldWUgYXJlIGJvdW5kIHRvIHRoZSBzYW1lIENQVSAqLwogCWl4Z2JlX2ZkaXJfYWRkX3NpZ25hdHVyZV9maWx0ZXJfODI1OTkoJmFkYXB0ZXItPmh3LCAmYXRyX2lucHV0LCBxdWV1ZSk7CiB9CiAKLXN0YXRpYyBpbnQgX19peGdiZV9tYXliZV9zdG9wX3R4KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCi0JCQkJIHN0cnVjdCBpeGdiZV9yaW5nICp0eF9yaW5nLCBpbnQgc2l6ZSkKK3N0YXRpYyBpbnQgX19peGdiZV9tYXliZV9zdG9wX3R4KHN0cnVjdCBpeGdiZV9yaW5nICp0eF9yaW5nLCBpbnQgc2l6ZSkKIHsKLQluZXRpZl9zdG9wX3N1YnF1ZXVlKG5ldGRldiwgdHhfcmluZy0+cXVldWVfaW5kZXgpOworCW5ldGlmX3N0b3Bfc3VicXVldWUodHhfcmluZy0+bmV0ZGV2LCB0eF9yaW5nLT5xdWV1ZV9pbmRleCk7CiAJLyogSGVyYmVydCdzIG9yaWdpbmFsIHBhdGNoIGhhZDoKIAkgKiAgc21wX21iX19hZnRlcl9uZXRpZl9zdG9wX3F1ZXVlKCk7CiAJICogYnV0IHNpbmNlIHRoYXQgZG9lc24ndCBleGlzdCB5ZXQsIGp1c3Qgb3BlbiBjb2RlIGl0LiAqLwpAQCAtNjIzOSwxNyArNjUyMiwxNiBAQAogCQlyZXR1cm4gLUVCVVNZOwogCiAJLyogQSByZXByaWV2ZSEgLSB1c2Ugc3RhcnRfcXVldWUgYmVjYXVzZSBpdCBkb2Vzbid0IGNhbGwgc2NoZWR1bGUgKi8KLQluZXRpZl9zdGFydF9zdWJxdWV1ZShuZXRkZXYsIHR4X3JpbmctPnF1ZXVlX2luZGV4KTsKLQkrK3R4X3JpbmctPnJlc3RhcnRfcXVldWU7CisJbmV0aWZfc3RhcnRfc3VicXVldWUodHhfcmluZy0+bmV0ZGV2LCB0eF9yaW5nLT5xdWV1ZV9pbmRleCk7CisJKyt0eF9yaW5nLT50eF9zdGF0cy5yZXN0YXJ0X3F1ZXVlOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGl4Z2JlX21heWJlX3N0b3BfdHgoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKLQkJCSAgICAgIHN0cnVjdCBpeGdiZV9yaW5nICp0eF9yaW5nLCBpbnQgc2l6ZSkKK3N0YXRpYyBpbnQgaXhnYmVfbWF5YmVfc3RvcF90eChzdHJ1Y3QgaXhnYmVfcmluZyAqdHhfcmluZywgaW50IHNpemUpCiB7CiAJaWYgKGxpa2VseShJWEdCRV9ERVNDX1VOVVNFRCh0eF9yaW5nKSA+PSBzaXplKSkKIAkJcmV0dXJuIDA7Ci0JcmV0dXJuIF9faXhnYmVfbWF5YmVfc3RvcF90eChuZXRkZXYsIHR4X3JpbmcsIHNpemUpOworCXJldHVybiBfX2l4Z2JlX21heWJlX3N0b3BfdHgodHhfcmluZywgc2l6ZSk7CiB9CiAKIHN0YXRpYyB1MTYgaXhnYmVfc2VsZWN0X3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCkBAIC02Mjk0LDEwICs2NTc2LDExIEBACiAJcmV0dXJuIHNrYl90eF9oYXNoKGRldiwgc2tiKTsKIH0KIAotbmV0ZGV2X3R4X3QgaXhnYmVfeG1pdF9mcmFtZV9yaW5nKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCituZXRkZXZfdHhfdCBpeGdiZV94bWl0X2ZyYW1lX3Jpbmcoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSAgc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCQkgIHN0cnVjdCBpeGdiZV9yaW5nICp0eF9yaW5nKQogeworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSB0eF9yaW5nLT5uZXRkZXY7CiAJc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxOwogCXVuc2lnbmVkIGludCBmaXJzdDsKIAl1bnNpZ25lZCBpbnQgdHhfZmxhZ3MgPSAwOwpAQCAtNjM1NSw4ICs2NjM4LDggQEAKIAlmb3IgKGYgPSAwOyBmIDwgc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsgZisrKQogCQljb3VudCArPSBUWERfVVNFX0NPVU5UKHNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbZl0uc2l6ZSk7CiAKLQlpZiAoaXhnYmVfbWF5YmVfc3RvcF90eChuZXRkZXYsIHR4X3JpbmcsIGNvdW50KSkgewotCQlhZGFwdGVyLT50eF9idXN5Kys7CisJaWYgKGl4Z2JlX21heWJlX3N0b3BfdHgodHhfcmluZywgY291bnQpKSB7CisJCXR4X3JpbmctPnR4X3N0YXRzLnR4X2J1c3krKzsKIAkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwogCX0KIApAQCAtNjM5MCwxNCArNjY3MywxNCBAQAogCQkJdHhfZmxhZ3MgfD0gSVhHQkVfVFhfRkxBR1NfQ1NVTTsKIAl9CiAKLQljb3VudCA9IGl4Z2JlX3R4X21hcChhZGFwdGVyLCB0eF9yaW5nLCBza2IsIHR4X2ZsYWdzLCBmaXJzdCk7CisJY291bnQgPSBpeGdiZV90eF9tYXAoYWRhcHRlciwgdHhfcmluZywgc2tiLCB0eF9mbGFncywgZmlyc3QsIGhkcl9sZW4pOwogCWlmIChjb3VudCkgewogCQkvKiBhZGQgdGhlIEFUUiBmaWx0ZXIgaWYgQVRSIGlzIG9uICovCiAJCWlmICh0eF9yaW5nLT5hdHJfc2FtcGxlX3JhdGUpIHsKIAkJCSsrdHhfcmluZy0+YXRyX2NvdW50OwogCQkJaWYgKCh0eF9yaW5nLT5hdHJfY291bnQgPj0gdHhfcmluZy0+YXRyX3NhbXBsZV9yYXRlKSAmJgotCQkJICAgICB0ZXN0X2JpdChfX0lYR0JFX0ZESVJfSU5JVF9ET05FLAotCQkJCSAgICAgICZ0eF9yaW5nLT5yZWluaXRfc3RhdGUpKSB7CisJCQkgICAgIHRlc3RfYml0KF9fSVhHQkVfVFhfRkRJUl9JTklUX0RPTkUsCisJCQkJICAgICAgJnR4X3JpbmctPnN0YXRlKSkgewogCQkJCWl4Z2JlX2F0cihhZGFwdGVyLCBza2IsIHR4X3JpbmctPnF1ZXVlX2luZGV4LAogCQkJCQkgIHR4X2ZsYWdzLCBwcm90b2NvbCk7CiAJCQkJdHhfcmluZy0+YXRyX2NvdW50ID0gMDsKQEAgLTY0MDYsOSArNjY4OSw4IEBACiAJCXR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUobmV0ZGV2LCB0eF9yaW5nLT5xdWV1ZV9pbmRleCk7CiAJCXR4cS0+dHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAJCXR4cS0+dHhfcGFja2V0cysrOwotCQlpeGdiZV90eF9xdWV1ZShhZGFwdGVyLCB0eF9yaW5nLCB0eF9mbGFncywgY291bnQsIHNrYi0+bGVuLAotCQkJICAgICAgIGhkcl9sZW4pOwotCQlpeGdiZV9tYXliZV9zdG9wX3R4KG5ldGRldiwgdHhfcmluZywgREVTQ19ORUVERUQpOworCQlpeGdiZV90eF9xdWV1ZSh0eF9yaW5nLCB0eF9mbGFncywgY291bnQsIHNrYi0+bGVuLCBoZHJfbGVuKTsKKwkJaXhnYmVfbWF5YmVfc3RvcF90eCh0eF9yaW5nLCBERVNDX05FRURFRCk7CiAKIAl9IGVsc2UgewogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwpAQCAtNjQyNSw3ICs2NzA3LDcgQEAKIAlzdHJ1Y3QgaXhnYmVfcmluZyAqdHhfcmluZzsKIAogCXR4X3JpbmcgPSBhZGFwdGVyLT50eF9yaW5nW3NrYi0+cXVldWVfbWFwcGluZ107Ci0JcmV0dXJuIGl4Z2JlX3htaXRfZnJhbWVfcmluZyhza2IsIG5ldGRldiwgYWRhcHRlciwgdHhfcmluZyk7CisJcmV0dXJuIGl4Z2JlX3htaXRfZnJhbWVfcmluZyhza2IsIGFkYXB0ZXIsIHR4X3JpbmcpOwogfQogCiAvKioKQEAgLTY1NjYsMjAgKzY4NDgsMjMgQEAKIAogCS8qIGFjY3VyYXRlIHJ4L3R4IGJ5dGVzL3BhY2tldHMgc3RhdHMgKi8KIAlkZXZfdHhxX3N0YXRzX2ZvbGQobmV0ZGV2LCBzdGF0cyk7CisJcmN1X3JlYWRfbG9jaygpOwogCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspIHsKLQkJc3RydWN0IGl4Z2JlX3JpbmcgKnJpbmcgPSBhZGFwdGVyLT5yeF9yaW5nW2ldOworCQlzdHJ1Y3QgaXhnYmVfcmluZyAqcmluZyA9IEFDQ0VTU19PTkNFKGFkYXB0ZXItPnJ4X3JpbmdbaV0pOwogCQl1NjQgYnl0ZXMsIHBhY2tldHM7CiAJCXVuc2lnbmVkIGludCBzdGFydDsKIAotCQlkbyB7Ci0JCQlzdGFydCA9IHU2NF9zdGF0c19mZXRjaF9iZWdpbl9iaCgmcmluZy0+c3luY3ApOwotCQkJcGFja2V0cyA9IHJpbmctPnN0YXRzLnBhY2tldHM7Ci0JCQlieXRlcyAgID0gcmluZy0+c3RhdHMuYnl0ZXM7Ci0JCX0gd2hpbGUgKHU2NF9zdGF0c19mZXRjaF9yZXRyeV9iaCgmcmluZy0+c3luY3AsIHN0YXJ0KSk7Ci0JCXN0YXRzLT5yeF9wYWNrZXRzICs9IHBhY2tldHM7Ci0JCXN0YXRzLT5yeF9ieXRlcyAgICs9IGJ5dGVzOworCQlpZiAocmluZykgeworCQkJZG8geworCQkJCXN0YXJ0ID0gdTY0X3N0YXRzX2ZldGNoX2JlZ2luX2JoKCZyaW5nLT5zeW5jcCk7CisJCQkJcGFja2V0cyA9IHJpbmctPnN0YXRzLnBhY2tldHM7CisJCQkJYnl0ZXMgICA9IHJpbmctPnN0YXRzLmJ5dGVzOworCQkJfSB3aGlsZSAodTY0X3N0YXRzX2ZldGNoX3JldHJ5X2JoKCZyaW5nLT5zeW5jcCwgc3RhcnQpKTsKKwkJCXN0YXRzLT5yeF9wYWNrZXRzICs9IHBhY2tldHM7CisJCQlzdGF0cy0+cnhfYnl0ZXMgICArPSBieXRlczsKKwkJfQogCX0KLQorCXJjdV9yZWFkX3VubG9jaygpOwogCS8qIGZvbGxvd2luZyBzdGF0cyB1cGRhdGVkIGJ5IGl4Z2JlX3dhdGNoZG9nX3Rhc2soKSAqLwogCXN0YXRzLT5tdWx0aWNhc3QJPSBuZXRkZXYtPnN0YXRzLm11bHRpY2FzdDsKIAlzdGF0cy0+cnhfZXJyb3JzCT0gbmV0ZGV2LT5zdGF0cy5yeF9lcnJvcnM7CkBAIC02NjI4LDcgKzY5MTMsNyBAQAogCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJaW50IGVycjsKIAotCWlmIChody0+bWFjLnR5cGUgIT0gaXhnYmVfbWFjXzgyNTk5RUIgfHwgIW1heF92ZnMpCisJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQiB8fCAhbWF4X3ZmcykKIAkJcmV0dXJuOwogCiAJLyogVGhlIDgyNTk5IHN1cHBvcnRzIHVwIHRvIDY0IFZGcyBwZXIgcGh5c2ljYWwgZnVuY3Rpb24KQEAgLTY2OTQsMTEgKzY5NzksMTIgQEAKIAljb25zdCBzdHJ1Y3QgaXhnYmVfaW5mbyAqaWkgPSBpeGdiZV9pbmZvX3RibFtlbnQtPmRyaXZlcl9kYXRhXTsKIAlzdGF0aWMgaW50IGNhcmRzX2ZvdW5kOwogCWludCBpLCBlcnIsIHBjaV91c2luZ19kYWM7CisJdTggcGFydF9zdHJbSVhHQkVfUEJBTlVNX0xFTkdUSF07CiAJdW5zaWduZWQgaW50IGluZGljZXMgPSBudW1fcG9zc2libGVfY3B1cygpOwogI2lmZGVmIElYR0JFX0ZDT0UKIAl1MTYgZGV2aWNlX2NhcHM7CiAjZW5kaWYKLQl1MzIgcGFydF9udW0sIGVlYzsKKwl1MzIgZWVjOwogCiAJLyogQ2F0Y2ggYnJva2VuIGhhcmR3YXJlIHRoYXQgcHV0IHRoZSB3cm9uZyBWRiBkZXZpY2UgSUQgaW4KIAkgKiB0aGUgUENJZSBTUi1JT1YgY2FwYWJpbGl0eS4KQEAgLTY3NjEsOCArNzA0Nyw4IEBACiAKIAlTRVRfTkVUREVWX0RFVihuZXRkZXYsICZwZGV2LT5kZXYpOwogCi0JcGNpX3NldF9kcnZkYXRhKHBkZXYsIG5ldGRldik7CiAJYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGFkYXB0ZXIpOwogCiAJYWRhcHRlci0+bmV0ZGV2ID0gbmV0ZGV2OwogCWFkYXB0ZXItPnBkZXYgPSBwZGV2OwpAQCAtNjc4NSw3ICs3MDcxLDcgQEAKIAluZXRkZXYtPm5ldGRldl9vcHMgPSAmaXhnYmVfbmV0ZGV2X29wczsKIAlpeGdiZV9zZXRfZXRodG9vbF9vcHMobmV0ZGV2KTsKIAluZXRkZXYtPndhdGNoZG9nX3RpbWVvID0gNSAqIEhaOwotCXN0cmNweShuZXRkZXYtPm5hbWUsIHBjaV9uYW1lKHBkZXYpKTsKKwlzdHJuY3B5KG5ldGRldi0+bmFtZSwgcGNpX25hbWUocGRldiksIHNpemVvZihuZXRkZXYtPm5hbWUpIC0gMSk7CiAKIAlhZGFwdGVyLT5iZF9udW1iZXIgPSBjYXJkc19mb3VuZDsKIApAQCAtNjgzNSw4ICs3MTIxLDE0IEBACiAJCWdvdG8gZXJyX3N3X2luaXQ7CiAKIAkvKiBNYWtlIGl0IHBvc3NpYmxlIHRoZSBhZGFwdGVyIHRvIGJlIHdva2VuIHVwIHZpYSBXT0wgKi8KLQlpZiAoYWRhcHRlci0+aHcubWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpCisJc3dpdGNoIChhZGFwdGVyLT5ody5tYWMudHlwZSkgeworCWNhc2UgaXhnYmVfbWFjXzgyNTk5RUI6CisJY2FzZSBpeGdiZV9tYWNfWDU0MDoKIAkJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfV1VTLCB+MCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KIAogCS8qCiAJICogSWYgdGhlcmUgaXMgYSBmYW4gb24gdGhpcyBkZXZpY2UgYW5kIGl0IGhhcyBmYWlsZWQgbG9nIHRoZQpAQCAtNjk0NCw4ICs3MjM2LDExIEBACiAJCWdvdG8gZXJyX2VlcHJvbTsKIAl9CiAKLQkvKiBwb3dlciBkb3duIHRoZSBvcHRpY3MgKi8KLQlpZiAoaHctPnBoeS5tdWx0aXNwZWVkX2ZpYmVyKQorCS8qIHBvd2VyIGRvd24gdGhlIG9wdGljcyBmb3IgbXVsdGlzcGVlZCBmaWJlciBhbmQgODI1OTkgU0ZQKyBmaWJlciAqLworCWlmIChody0+bWFjLm9wcy5kaXNhYmxlX3R4X2xhc2VyICYmCisJICAgICgoaHctPnBoeS5tdWx0aXNwZWVkX2ZpYmVyKSB8fAorCSAgICAgKChody0+bWFjLm9wcy5nZXRfbWVkaWFfdHlwZShodykgPT0gaXhnYmVfbWVkaWFfdHlwZV9maWJlcikgJiYKKwkgICAgICAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKSkpKQogCQlody0+bWFjLm9wcy5kaXNhYmxlX3R4X2xhc2VyKGh3KTsKIAogCWluaXRfdGltZXIoJmFkYXB0ZXItPndhdGNoZG9nX3RpbWVyKTsKQEAgLTY5NjAsNiArNzI1NSwxOCBAQAogCQlnb3RvIGVycl9zd19pbml0OwogCiAJc3dpdGNoIChwZGV2LT5kZXZpY2UpIHsKKwljYXNlIElYR0JFX0RFVl9JRF84MjU5OV9TRlA6CisJCS8qIE9ubHkgdGhpcyBzdWJkZXZpY2Ugc3VwcG9ydHMgV09MICovCisJCWlmIChwZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09IElYR0JFX1NVQkRFVl9JRF84MjU5OV9TRlApCisJCQlhZGFwdGVyLT53b2wgPSAoSVhHQkVfV1VGQ19NQUcgfCBJWEdCRV9XVUZDX0VYIHwKKwkJCSAgICAgICAgICAgICAgICBJWEdCRV9XVUZDX01DIHwgSVhHQkVfV1VGQ19CQyk7CisJCWJyZWFrOworCWNhc2UgSVhHQkVfREVWX0lEXzgyNTk5X0NPTUJPX0JBQ0tQTEFORToKKwkJLyogQWxsIGV4Y2VwdCB0aGlzIHN1YmRldmljZSBzdXBwb3J0IFdPTCAqLworCQlpZiAocGRldi0+c3Vic3lzdGVtX2RldmljZSAhPSBJWEdCRV9TVUJERVZfSURfODI1OTlfS1g0X0tSX01FWlopCisJCQlhZGFwdGVyLT53b2wgPSAoSVhHQkVfV1VGQ19NQUcgfCBJWEdCRV9XVUZDX0VYIHwKKwkJCSAgICAgICAgICAgICAgICBJWEdCRV9XVUZDX01DIHwgSVhHQkVfV1VGQ19CQyk7CisJCWJyZWFrOwogCWNhc2UgSVhHQkVfREVWX0lEXzgyNTk5X0tYNDoKIAkJYWRhcHRlci0+d29sID0gKElYR0JFX1dVRkNfTUFHIHwgSVhHQkVfV1VGQ19FWCB8CiAJCQkJSVhHQkVfV1VGQ19NQyB8IElYR0JFX1dVRkNfQkMpOwpAQCAtNjk4MywxNiArNzI5MCwxNyBAQAogCQkgICAgaHctPmJ1cy53aWR0aCA9PSBpeGdiZV9idXNfd2lkdGhfcGNpZV94MSA/ICJXaWR0aCB4MSIgOgogCQkgICAgIlVua25vd24iKSwKIAkJICAgbmV0ZGV2LT5kZXZfYWRkcik7Ci0JaXhnYmVfcmVhZF9wYmFfbnVtX2dlbmVyaWMoaHcsICZwYXJ0X251bSk7CisKKwllcnIgPSBpeGdiZV9yZWFkX3BiYV9zdHJpbmdfZ2VuZXJpYyhodywgcGFydF9zdHIsIElYR0JFX1BCQU5VTV9MRU5HVEgpOworCWlmIChlcnIpCisJCXN0cm5jcHkocGFydF9zdHIsICJVbmtub3duIiwgSVhHQkVfUEJBTlVNX0xFTkdUSCk7CiAJaWYgKGl4Z2JlX2lzX3NmcChodykgJiYgaHctPnBoeS5zZnBfdHlwZSAhPSBpeGdiZV9zZnBfdHlwZV9ub3RfcHJlc2VudCkKLQkJZV9kZXZfaW5mbygiTUFDOiAlZCwgUEhZOiAlZCwgU0ZQKzogJWQsICIKLQkJCSAgICJQQkEgTm86ICUwNngtJTAzeFxuIiwKKwkJZV9kZXZfaW5mbygiTUFDOiAlZCwgUEhZOiAlZCwgU0ZQKzogJWQsIFBCQSBObzogJXNcbiIsCiAJCQkgICBody0+bWFjLnR5cGUsIGh3LT5waHkudHlwZSwgaHctPnBoeS5zZnBfdHlwZSwKLQkJCSAgIChwYXJ0X251bSA+PiA4KSwgKHBhcnRfbnVtICYgMHhmZikpOworCQkgICAgICAgICAgIHBhcnRfc3RyKTsKIAllbHNlCi0JCWVfZGV2X2luZm8oIk1BQzogJWQsIFBIWTogJWQsIFBCQSBObzogJTA2eC0lMDN4XG4iLAotCQkJICAgaHctPm1hYy50eXBlLCBody0+cGh5LnR5cGUsCi0JCQkgICAocGFydF9udW0gPj4gOCksIChwYXJ0X251bSAmIDB4ZmYpKTsKKwkJZV9kZXZfaW5mbygiTUFDOiAlZCwgUEhZOiAlZCwgUEJBIE5vOiAlc1xuIiwKKwkJCSAgIGh3LT5tYWMudHlwZSwgaHctPnBoeS50eXBlLCBwYXJ0X3N0cik7CiAKIAlpZiAoaHctPmJ1cy53aWR0aCA8PSBpeGdiZV9idXNfd2lkdGhfcGNpZV94NCkgewogCQllX2Rldl93YXJuKCJQQ0ktRXhwcmVzcyBiYW5kd2lkdGggYXZhaWxhYmxlIGZvciB0aGlzIGNhcmQgaXMgIgpAQCAtNzA4NSwxNyArNzM5MywxOSBAQAogICoqLwogc3RhdGljIHZvaWQgX19kZXZleGl0IGl4Z2JlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwogCiAJc2V0X2JpdChfX0lYR0JFX0RPV04sICZhZGFwdGVyLT5zdGF0ZSk7Ci0JLyogY2xlYXIgdGhlIG1vZHVsZSBub3QgZm91bmQgYml0IHRvIG1ha2Ugc3VyZSB0aGUgd29ya2VyIHdvbid0Ci0JICogcmVzY2hlZHVsZQorCisJLyoKKwkgKiBUaGUgdGltZXJzIG1heSBiZSByZXNjaGVkdWxlZCwgc28gZXhwbGljaXRseSBkaXNhYmxlIHRoZW0KKwkgKiBmcm9tIGJlaW5nIHJlc2NoZWR1bGVkLgogCSAqLwogCWNsZWFyX2JpdChfX0lYR0JFX1NGUF9NT0RVTEVfTk9UX0ZPVU5ELCAmYWRhcHRlci0+c3RhdGUpOwogCWRlbF90aW1lcl9zeW5jKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lcik7Ci0KIAlkZWxfdGltZXJfc3luYygmYWRhcHRlci0+c2ZwX3RpbWVyKTsKKwogCWNhbmNlbF93b3JrX3N5bmMoJmFkYXB0ZXItPndhdGNoZG9nX3Rhc2spOwogCWNhbmNlbF93b3JrX3N5bmMoJmFkYXB0ZXItPnNmcF90YXNrKTsKIAljYW5jZWxfd29ya19zeW5jKCZhZGFwdGVyLT5tdWx0aXNwZWVkX2ZpYmVyX3Rhc2spOwpAQCAtNzEwMyw3ICs3NDEzLDggQEAKIAlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0ZESVJfSEFTSF9DQVBBQkxFIHx8CiAJICAgIGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19GRElSX1BFUkZFQ1RfQ0FQQUJMRSkKIAkJY2FuY2VsX3dvcmtfc3luYygmYWRhcHRlci0+ZmRpcl9yZWluaXRfdGFzayk7Ci0JZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwlpZiAoYWRhcHRlci0+ZmxhZ3MyICYgSVhHQkVfRkxBRzJfVEVNUF9TRU5TT1JfQ0FQQUJMRSkKKwkJY2FuY2VsX3dvcmtfc3luYygmYWRhcHRlci0+Y2hlY2tfb3ZlcnRlbXBfdGFzayk7CiAKICNpZmRlZiBDT05GSUdfSVhHQkVfRENBCiAJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19EQ0FfRU5BQkxFRCkgewpAQCAtNzE1Niw4ICs3NDY3LDggQEAKIHN0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IGl4Z2JlX2lvX2Vycm9yX2RldGVjdGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQkJCQkJcGNpX2NoYW5uZWxfc3RhdGVfdCBzdGF0ZSkKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwogCiAJbmV0aWZfZGV2aWNlX2RldGFjaChuZXRkZXYpOwogCkBAIC03MTgwLDggKzc0OTEsNyBAQAogICovCiBzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCBpeGdiZV9pb19zbG90X3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXBjaV9lcnNfcmVzdWx0X3QgcmVzdWx0OwogCWludCBlcnI7CiAKQEAgLTcyMTksOCArNzUyOSw4IEBACiAgKi8KIHN0YXRpYyB2b2lkIGl4Z2JlX2lvX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwogCiAJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgewogCQlpZiAoaXhnYmVfdXAoYWRhcHRlcikpIHsKQEAgLTcyODUsNiArNzU5NSw3IEBACiAJZGNhX3VucmVnaXN0ZXJfbm90aWZ5KCZkY2Ffbm90aWZpZXIpOwogI2VuZGlmCiAJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZpeGdiZV9kcml2ZXIpOworCXJjdV9iYXJyaWVyKCk7IC8qIFdhaXQgZm9yIGNvbXBsZXRpb24gb2YgY2FsbF9yY3UoKSdzICovCiB9CiAKICNpZmRlZiBDT05GSUdfSVhHQkVfRENBCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYnguYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX21ieC5jCmluZGV4IDQ3MWYwZjIuLmVhODJjNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX21ieC5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX21ieC5jCkBAIC0zMTksOCArMzE5LDE2IEBACiAJdTMyIHZmbHJlID0gMDsKIAlzMzIgcmV0X3ZhbCA9IElYR0JFX0VSUl9NQlg7CiAKLQlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKQorCXN3aXRjaCAoaHctPm1hYy50eXBlKSB7CisJY2FzZSBpeGdiZV9tYWNfODI1OTlFQjoKIAkJdmZscmUgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVkZMUkUocmVnX29mZnNldCkpOworCQlicmVhazsKKwljYXNlIGl4Z2JlX21hY19YNTQwOgorCQl2ZmxyZSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WRkxSRUMocmVnX29mZnNldCkpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CiAKIAlpZiAodmZscmUgJiAoMSA8PCB2Zl9zaGlmdCkpIHsKIAkJcmV0X3ZhbCA9IDA7CkBAIC00MzksMjIgKzQ0NywyNiBAQAogewogCXN0cnVjdCBpeGdiZV9tYnhfaW5mbyAqbWJ4ID0gJmh3LT5tYng7CiAKLQlpZiAoaHctPm1hYy50eXBlICE9IGl4Z2JlX21hY184MjU5OUVCKQotCQlyZXR1cm47CisJc3dpdGNoIChody0+bWFjLnR5cGUpIHsKKwljYXNlIGl4Z2JlX21hY184MjU5OUVCOgorCWNhc2UgaXhnYmVfbWFjX1g1NDA6CisJCW1ieC0+dGltZW91dCA9IDA7CisJCW1ieC0+dXNlY19kZWxheSA9IDA7CiAKLQltYngtPnRpbWVvdXQgPSAwOwotCW1ieC0+dXNlY19kZWxheSA9IDA7CisJCW1ieC0+c2l6ZSA9IElYR0JFX1ZGTUFJTEJPWF9TSVpFOwogCi0JbWJ4LT5zaXplID0gSVhHQkVfVkZNQUlMQk9YX1NJWkU7Ci0KLQltYngtPnN0YXRzLm1zZ3NfdHggPSAwOwotCW1ieC0+c3RhdHMubXNnc19yeCA9IDA7Ci0JbWJ4LT5zdGF0cy5yZXFzID0gMDsKLQltYngtPnN0YXRzLmFja3MgPSAwOwotCW1ieC0+c3RhdHMucnN0cyA9IDA7CisJCW1ieC0+c3RhdHMubXNnc190eCA9IDA7CisJCW1ieC0+c3RhdHMubXNnc19yeCA9IDA7CisJCW1ieC0+c3RhdHMucmVxcyA9IDA7CisJCW1ieC0+c3RhdHMuYWNrcyA9IDA7CisJCW1ieC0+c3RhdHMucnN0cyA9IDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KIH0KIAotc3RydWN0IGl4Z2JlX21ieF9vcGVyYXRpb25zIG1ieF9vcHNfODI1OTkgPSB7CitzdHJ1Y3QgaXhnYmVfbWJ4X29wZXJhdGlvbnMgbWJ4X29wc19nZW5lcmljID0gewogCS5yZWFkICAgICAgICAgICAgICAgICAgID0gaXhnYmVfcmVhZF9tYnhfcGYsCiAJLndyaXRlICAgICAgICAgICAgICAgICAgPSBpeGdiZV93cml0ZV9tYnhfcGYsCiAJLnJlYWRfcG9zdGVkICAgICAgICAgICAgPSBpeGdiZV9yZWFkX3Bvc3RlZF9tYngsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYnguaCBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX21ieC5oCmluZGV4IDdlMGQwOGYuLjNkZjliMTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX21ieC5oCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX21ieC5oCkBAIC04OCw2ICs4OCw2IEBACiBzMzIgaXhnYmVfY2hlY2tfZm9yX3JzdChzdHJ1Y3QgaXhnYmVfaHcgKiwgdTE2KTsKIHZvaWQgaXhnYmVfaW5pdF9tYnhfcGFyYW1zX3BmKHN0cnVjdCBpeGdiZV9odyAqKTsKIAotZXh0ZXJuIHN0cnVjdCBpeGdiZV9tYnhfb3BlcmF0aW9ucyBtYnhfb3BzXzgyNTk5OworZXh0ZXJuIHN0cnVjdCBpeGdiZV9tYnhfb3BlcmF0aW9ucyBtYnhfb3BzX2dlbmVyaWM7CiAKICNlbmRpZiAvKiBfSVhHQkVfTUJYX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9waHkuYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3BoeS5jCmluZGV4IDZjMGQ0MmUuLjhmNzEyM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3BoeS5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3BoeS5jCkBAIC0xMTUsNiArMTE1LDkgQEAKIAljYXNlIFROMTAxMF9QSFlfSUQ6CiAJCXBoeV90eXBlID0gaXhnYmVfcGh5X3RuOwogCQlicmVhazsKKwljYXNlIFg1NDBfUEhZX0lEOgorCQlwaHlfdHlwZSA9IGl4Z2JlX3BoeV9hcTsKKwkJYnJlYWs7CiAJY2FzZSBRVDIwMjJfUEhZX0lEOgogCQlwaHlfdHlwZSA9IGl4Z2JlX3BoeV9xdDsKIAkJYnJlYWs7CkBAIC00MjUsNiArNDI4LDM5IEBACiB9CiAKIC8qKgorICogaXhnYmVfZ2V0X2NvcHBlcl9saW5rX2NhcGFiaWxpdGllc19nZW5lcmljIC0gRGV0ZXJtaW5lcyBsaW5rIGNhcGFiaWxpdGllcworICogQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogQHNwZWVkOiBwb2ludGVyIHRvIGxpbmsgc3BlZWQKKyAqIEBhdXRvbmVnOiBib29sZWFuIGF1dG8tbmVnb3RpYXRpb24gdmFsdWUKKyAqCisgKiBEZXRlcm1pbmVzIHRoZSBsaW5rIGNhcGFiaWxpdGllcyBieSByZWFkaW5nIHRoZSBBVVRPQyByZWdpc3Rlci4KKyAqLworczMyIGl4Z2JlX2dldF9jb3BwZXJfbGlua19jYXBhYmlsaXRpZXNfZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpeGdiZV9saW5rX3NwZWVkICpzcGVlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqYXV0b25lZykKK3sKKwlzMzIgc3RhdHVzID0gSVhHQkVfRVJSX0xJTktfU0VUVVA7CisJdTE2IHNwZWVkX2FiaWxpdHk7CisKKwkqc3BlZWQgPSAwOworCSphdXRvbmVnID0gdHJ1ZTsKKworCXN0YXR1cyA9IGh3LT5waHkub3BzLnJlYWRfcmVnKGh3LCBNRElPX1NQRUVELCBNRElPX01NRF9QTUFQTUQsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNwZWVkX2FiaWxpdHkpOworCisJaWYgKHN0YXR1cyA9PSAwKSB7CisJCWlmIChzcGVlZF9hYmlsaXR5ICYgTURJT19TUEVFRF8xMEcpCisJCQkqc3BlZWQgfD0gSVhHQkVfTElOS19TUEVFRF8xMEdCX0ZVTEw7CisJCWlmIChzcGVlZF9hYmlsaXR5ICYgTURJT19QTUFfU1BFRURfMTAwMCkKKwkJCSpzcGVlZCB8PSBJWEdCRV9MSU5LX1NQRUVEXzFHQl9GVUxMOworCQlpZiAoc3BlZWRfYWJpbGl0eSAmIE1ESU9fUE1BX1NQRUVEXzEwMCkKKwkJCSpzcGVlZCB8PSBJWEdCRV9MSU5LX1NQRUVEXzEwMF9GVUxMOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgogICogIGl4Z2JlX3Jlc2V0X3BoeV9ubCAtIFBlcmZvcm1zIGEgUEhZIHJlc2V0CiAgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQogICoqLwpAQCAtMTM3OCw2ICsxNDE0LDIyIEBACiB9CiAKIC8qKgorICogIGl4Z2JlX2dldF9waHlfZmlybXdhcmVfdmVyc2lvbl9nZW5lcmljIC0gR2V0cyB0aGUgUEhZIEZpcm13YXJlIFZlcnNpb24KKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQGZpcm13YXJlX3ZlcnNpb246IHBvaW50ZXIgdG8gdGhlIFBIWSBGaXJtd2FyZSBWZXJzaW9uCisqKi8KK3MzMiBpeGdiZV9nZXRfcGh5X2Zpcm13YXJlX3ZlcnNpb25fZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiAqZmlybXdhcmVfdmVyc2lvbikKK3sKKwlzMzIgc3RhdHVzID0gMDsKKworCXN0YXR1cyA9IGh3LT5waHkub3BzLnJlYWRfcmVnKGh3LCBBUV9GV19SRVYsIE1ESU9fTU1EX1ZFTkQxLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcm13YXJlX3ZlcnNpb24pOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCiAgKiAgaXhnYmVfdG5fY2hlY2tfb3ZlcnRlbXAgLSBDaGVja3MgaWYgYW4gb3ZlcnRlbXAgb2NjdXJlZC4KICAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfcGh5LmggYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9waHkuaAppbmRleCBmYjM4OThmLi5lMmM2YjdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9waHkuaAorKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9waHkuaApAQCAtOTYsNiArOTYsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXhnYmVfbGlua19zcGVlZCBzcGVlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYXV0b25lZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYXV0b25lZ193YWl0X3RvX2NvbXBsZXRlKTsKK3MzMiBpeGdiZV9nZXRfY29wcGVyX2xpbmtfY2FwYWJpbGl0aWVzX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXhnYmVfbGlua19zcGVlZCAqc3BlZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmF1dG9uZWcpOwogCiAvKiBQSFkgc3BlY2lmaWMgKi8KIHMzMiBpeGdiZV9jaGVja19waHlfbGlua190bngoc3RydWN0IGl4Z2JlX2h3ICpodywKQEAgLTEwMyw2ICsxMDYsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpsaW5rX3VwKTsKIHMzMiBpeGdiZV9nZXRfcGh5X2Zpcm13YXJlX3ZlcnNpb25fdG54KHN0cnVjdCBpeGdiZV9odyAqaHcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgKmZpcm13YXJlX3ZlcnNpb24pOworczMyIGl4Z2JlX2dldF9waHlfZmlybXdhcmVfdmVyc2lvbl9nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2ICpmaXJtd2FyZV92ZXJzaW9uKTsKIAogczMyIGl4Z2JlX3Jlc2V0X3BoeV9ubChzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKIHMzMiBpeGdiZV9pZGVudGlmeV9zZnBfbW9kdWxlX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9zcmlvdi5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfc3Jpb3YuYwppbmRleCA1NDI4MTUzLi40N2IxNTczIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9zcmlvdi5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3NyaW92LmMKQEAgLTY4LDcgKzY4LDcgQEAKIAkgKiBhZGRyZXNzZXMKIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgZW50cmllczsgaSsrKSB7Ci0JCXZmaW5mby0+dmZfbWNfaGFzaGVzW2ldID0gaGFzaF9saXN0W2ldOzsKKwkJdmZpbmZvLT52Zl9tY19oYXNoZXNbaV0gPSBoYXNoX2xpc3RbaV07CiAJfQogCiAJZm9yIChpID0gMDsgaSA8IHZmaW5mby0+bnVtX3ZmX21jX2hhc2hlczsgaSsrKSB7CkBAIC0xNzgsOCArMTc4LDcgQEAKIGludCBpeGdiZV92Zl9jb25maWd1cmF0aW9uKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBpbnQgZXZlbnRfbWFzaykKIHsKIAl1bnNpZ25lZCBjaGFyIHZmX21hY19hZGRyWzZdOwotCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXVuc2lnbmVkIGludCB2Zm4gPSAoZXZlbnRfbWFzayAmIDB4M2YpOwogCiAJYm9vbCBlbmFibGUgPSAoKGV2ZW50X21hc2sgJiAweDEwMDAwMDAwVSkgIT0gMCk7CkBAIC0yMTYsNiArMjE1LDExIEBACiAJcmVnIHw9IChyZWcgfCAoMSA8PCB2Zl9zaGlmdCkpOwogCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVkZSRShyZWdfb2Zmc2V0KSwgcmVnKTsKIAorCS8qIEVuYWJsZSBjb3VudGluZyBvZiBzcG9vZmVkIHBhY2tldHMgaW4gdGhlIFNTVlBDIHJlZ2lzdGVyICovCisJcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZNRUNNKHJlZ19vZmZzZXQpKTsKKwlyZWcgfD0gKDEgPDwgdmZfc2hpZnQpOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVk1FQ00ocmVnX29mZnNldCksIHJlZyk7CisKIAlpeGdiZV92Zl9yZXNldF9ldmVudChhZGFwdGVyLCB2Zik7CiB9CiAKQEAgLTIyOCw2ICsyMzIsNyBAQAogCWludCBlbnRyaWVzOwogCXUxNiAqaGFzaF9saXN0OwogCWludCBhZGQsIHZpZDsKKwl1OCAqbmV3X21hYzsKIAogCXJldHZhbCA9IGl4Z2JlX3JlYWRfbWJ4KGh3LCBtc2didWYsIG1ieF9zaXplLCB2Zik7CiAKQEAgLTI0NSwxNSArMjUwLDIyIEBACiAKIAlpZiAobXNnYnVmWzBdID09IElYR0JFX1ZGX1JFU0VUKSB7CiAJCXVuc2lnbmVkIGNoYXIgKnZmX21hYyA9IGFkYXB0ZXItPnZmaW5mb1t2Zl0udmZfbWFjX2FkZHJlc3NlczsKLQkJdTggKmFkZHIgPSAodTggKikoJm1zZ2J1ZlsxXSk7CisJCW5ld19tYWMgPSAodTggKikoJm1zZ2J1ZlsxXSk7CiAJCWVfaW5mbyhwcm9iZSwgIlZGIFJlc2V0IG1zZyByZWNlaXZlZCBmcm9tIHZmICVkXG4iLCB2Zik7CiAJCWFkYXB0ZXItPnZmaW5mb1t2Zl0uY2xlYXJfdG9fc2VuZCA9IGZhbHNlOwogCQlpeGdiZV92Zl9yZXNldF9tc2coYWRhcHRlciwgdmYpOwogCQlhZGFwdGVyLT52ZmluZm9bdmZdLmNsZWFyX3RvX3NlbmQgPSB0cnVlOwogCisJCWlmIChpc192YWxpZF9ldGhlcl9hZGRyKG5ld19tYWMpICYmCisJCSAgICAhYWRhcHRlci0+dmZpbmZvW3ZmXS5wZl9zZXRfbWFjKQorCQkJaXhnYmVfc2V0X3ZmX21hYyhhZGFwdGVyLCB2ZiwgdmZfbWFjKTsKKwkJZWxzZQorCQkJaXhnYmVfc2V0X3ZmX21hYyhhZGFwdGVyLAorCQkJCSB2ZiwgYWRhcHRlci0+dmZpbmZvW3ZmXS52Zl9tYWNfYWRkcmVzc2VzKTsKKwogCQkvKiByZXBseSB0byByZXNldCB3aXRoIGFjayBhbmQgdmYgbWFjIGFkZHJlc3MgKi8KIAkJbXNnYnVmWzBdID0gSVhHQkVfVkZfUkVTRVQgfCBJWEdCRV9WVF9NU0dUWVBFX0FDSzsKLQkJbWVtY3B5KGFkZHIsIHZmX21hYywgSVhHQkVfRVRIX0xFTkdUSF9PRl9BRERSRVNTKTsKKwkJbWVtY3B5KG5ld19tYWMsIHZmX21hYywgSVhHQkVfRVRIX0xFTkdUSF9PRl9BRERSRVNTKTsKIAkJLyoKIAkJICogUGlnZ3liYWNrIHRoZSBtdWx0aWNhc3QgZmlsdGVyIHR5cGUgc28gVkYgY2FuIGNvbXB1dGUgdGhlCiAJCSAqIGNvcnJlY3QgdmVjdG9ycwpAQCAtMjcyLDE0ICsyODQsMTYgQEAKIAogCXN3aXRjaCAoKG1zZ2J1ZlswXSAmIDB4RkZGRikpIHsKIAljYXNlIElYR0JFX1ZGX1NFVF9NQUNfQUREUjoKLQkJewotCQkJdTggKm5ld19tYWMgPSAoKHU4ICopKCZtc2didWZbMV0pKTsKLQkJCWlmIChpc192YWxpZF9ldGhlcl9hZGRyKG5ld19tYWMpICYmCi0JCQkgICAgIWFkYXB0ZXItPnZmaW5mb1t2Zl0ucGZfc2V0X21hYykKLQkJCQlpeGdiZV9zZXRfdmZfbWFjKGFkYXB0ZXIsIHZmLCBuZXdfbWFjKTsKLQkJCWVsc2UKLQkJCQlpeGdiZV9zZXRfdmZfbWFjKGFkYXB0ZXIsCi0JCQkJICB2ZiwgYWRhcHRlci0+dmZpbmZvW3ZmXS52Zl9tYWNfYWRkcmVzc2VzKTsKKwkJbmV3X21hYyA9ICgodTggKikoJm1zZ2J1ZlsxXSkpOworCQlpZiAoaXNfdmFsaWRfZXRoZXJfYWRkcihuZXdfbWFjKSAmJgorCQkgICAgIWFkYXB0ZXItPnZmaW5mb1t2Zl0ucGZfc2V0X21hYykgeworCQkJaXhnYmVfc2V0X3ZmX21hYyhhZGFwdGVyLCB2ZiwgbmV3X21hYyk7CisJCX0gZWxzZSBpZiAobWVtY21wKGFkYXB0ZXItPnZmaW5mb1t2Zl0udmZfbWFjX2FkZHJlc3NlcywKKwkJCQkgIG5ld19tYWMsIEVUSF9BTEVOKSkgeworCQkJZV93YXJuKGRydiwgIlZGICVkIGF0dGVtcHRlZCB0byBvdmVycmlkZSAiCisJCQkgICAgICAgImFkbWluaXN0cmF0aXZlbHkgc2V0IE1BQyBhZGRyZXNzXG5SZWxvYWQgIgorCQkJICAgICAgICJ0aGUgVkYgZHJpdmVyIHRvIHJlc3VtZSBvcGVyYXRpb25zXG4iLCB2Zik7CisJCQlyZXR2YWwgPSAtMTsKIAkJfQogCQlicmVhazsKIAljYXNlIElYR0JFX1ZGX1NFVF9NVUxUSUNBU1Q6CkBAIC0yOTYsNyArMzEwLDE1IEBACiAJCWFkZCA9IChtc2didWZbMF0gJiBJWEdCRV9WVF9NU0dJTkZPX01BU0spCiAJCSAgICAgID4+IElYR0JFX1ZUX01TR0lORk9fU0hJRlQ7CiAJCXZpZCA9IChtc2didWZbMV0gJiBJWEdCRV9WTFZGX1ZMQU5JRF9NQVNLKTsKLQkJcmV0dmFsID0gaXhnYmVfc2V0X3ZmX3ZsYW4oYWRhcHRlciwgYWRkLCB2aWQsIHZmKTsKKwkJaWYgKGFkYXB0ZXItPnZmaW5mb1t2Zl0ucGZfdmxhbikgeworCQkJZV93YXJuKGRydiwgIlZGICVkIGF0dGVtcHRlZCB0byBvdmVycmlkZSAiCisJCQkgICAgICAgImFkbWluaXN0cmF0aXZlbHkgc2V0IFZMQU4gY29uZmlndXJhdGlvblxuIgorCQkJICAgICAgICJSZWxvYWQgdGhlIFZGIGRyaXZlciB0byByZXN1bWUgb3BlcmF0aW9uc1xuIiwKKwkJCSAgICAgICB2Zik7CisJCQlyZXR2YWwgPSAtMTsKKwkJfSBlbHNlIHsKKwkJCXJldHZhbCA9IGl4Z2JlX3NldF92Zl92bGFuKGFkYXB0ZXIsIGFkZCwgdmlkLCB2Zik7CisJCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJZV9lcnIoZHJ2LCAiVW5oYW5kbGVkIE1zZyAlOC44eFxuIiwgbXNnYnVmWzBdKTsKQEAgLTM5NSw2ICs0MTcsNyBAQAogewogCWludCBlcnIgPSAwOwogCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCiAJaWYgKCh2ZiA+PSBhZGFwdGVyLT5udW1fdmZzKSB8fCAodmxhbiA+IDQwOTUpIHx8IChxb3MgPiA3KSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC00MDMsNyArNDI2LDggQEAKIAkJaWYgKGVycikKIAkJCWdvdG8gb3V0OwogCQlpeGdiZV9zZXRfdm12aXIoYWRhcHRlciwgdmxhbiB8IChxb3MgPDwgVkxBTl9QUklPX1NISUZUKSwgdmYpOwotCQlpeGdiZV9zZXRfdm1vbHIoJmFkYXB0ZXItPmh3LCB2ZiwgZmFsc2UpOworCQlpeGdiZV9zZXRfdm1vbHIoaHcsIHZmLCBmYWxzZSk7CisJCWh3LT5tYWMub3BzLnNldF92bGFuX2FudGlfc3Bvb2ZpbmcoaHcsIHRydWUsIHZmKTsKIAkJYWRhcHRlci0+dmZpbmZvW3ZmXS5wZl92bGFuID0gdmxhbjsKIAkJYWRhcHRlci0+dmZpbmZvW3ZmXS5wZl9xb3MgPSBxb3M7CiAJCWRldl9pbmZvKCZhZGFwdGVyLT5wZGV2LT5kZXYsCkBAIC00MjAsNyArNDQ0LDggQEAKIAkJZXJyID0gaXhnYmVfc2V0X3ZmX3ZsYW4oYWRhcHRlciwgZmFsc2UsCiAJCQkJCWFkYXB0ZXItPnZmaW5mb1t2Zl0ucGZfdmxhbiwgdmYpOwogCQlpeGdiZV9zZXRfdm12aXIoYWRhcHRlciwgdmxhbiwgdmYpOwotCQlpeGdiZV9zZXRfdm1vbHIoJmFkYXB0ZXItPmh3LCB2ZiwgdHJ1ZSk7CisJCWl4Z2JlX3NldF92bW9scihodywgdmYsIHRydWUpOworCQlody0+bWFjLm9wcy5zZXRfdmxhbl9hbnRpX3Nwb29maW5nKGh3LCBmYWxzZSwgdmYpOwogCQlhZGFwdGVyLT52ZmluZm9bdmZdLnBmX3ZsYW4gPSAwOwogCQlhZGFwdGVyLT52ZmluZm9bdmZdLnBmX3FvcyA9IDA7CiAgICAgICAgfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfdHlwZS5oIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfdHlwZS5oCmluZGV4IGQzY2M2Y2UuLjQ0NmYzNDY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV90eXBlLmgKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfdHlwZS5oCkBAIC01NCw5ICs1NCwxNCBAQAogI2RlZmluZSBJWEdCRV9ERVZfSURfODI1OTlfVDNfTE9NICAgICAgICAweDE1MUMKICNkZWZpbmUgSVhHQkVfREVWX0lEXzgyNTk5X0NYNCAgICAgICAgICAgMHgxMEY5CiAjZGVmaW5lIElYR0JFX0RFVl9JRF84MjU5OV9TRlAgICAgICAgICAgIDB4MTBGQgorI2RlZmluZSBJWEdCRV9ERVZfSURfODI1OTlfQkFDS1BMQU5FX0ZDT0UgICAgICAgMHgxNTJhCisjZGVmaW5lIElYR0JFX0RFVl9JRF84MjU5OV9TRlBfRkNPRSAgICAgIDB4MTUyOQorI2RlZmluZSBJWEdCRV9TVUJERVZfSURfODI1OTlfU0ZQICAgICAgICAweDExQTkKICNkZWZpbmUgSVhHQkVfREVWX0lEXzgyNTk5X1NGUF9FTSAgICAgICAgMHgxNTA3CiAjZGVmaW5lIElYR0JFX0RFVl9JRF84MjU5OV9YQVVJX0xPTSAgICAgIDB4MTBGQwogI2RlZmluZSBJWEdCRV9ERVZfSURfODI1OTlfQ09NQk9fQkFDS1BMQU5FIDB4MTBGOAorI2RlZmluZSBJWEdCRV9TVUJERVZfSURfODI1OTlfS1g0X0tSX01FWlogIDB4MDAwQworI2RlZmluZSBJWEdCRV9ERVZfSURfWDU0MFQgICAgICAgICAgICAgICAweDE1MjgKIAogLyogR2VuZXJhbCBSZWdpc3RlcnMgKi8KICNkZWZpbmUgSVhHQkVfQ1RSTCAgICAgIDB4MDAwMDAKQEAgLTIyNSw2ICsyMzAsNyBAQAogI2RlZmluZSBJWEdCRV9WVF9DVEwgICAgMHgwNTFCMAogI2RlZmluZSBJWEdCRV9WRlJFKF9pKSAgKDB4MDUxRTAgKyAoKF9pKSAqIDQpKQogI2RlZmluZSBJWEdCRV9WRlRFKF9pKSAgKDB4MDgxMTAgKyAoKF9pKSAqIDQpKQorI2RlZmluZSBJWEdCRV9WTUVDTShfaSkgKDB4MDg3OTAgKyAoKF9pKSAqIDQpKQogI2RlZmluZSBJWEdCRV9RREUgICAgICAgMHgyRjA0CiAjZGVmaW5lIElYR0JFX1ZNT0xSKF9pKSAoMHgwRjAwMCArICgoX2kpICogNCkpIC8qIDY0IHRvdGFsICovCiAjZGVmaW5lIElYR0JFX1VUQShfaSkgICAoMHgwRjQwMCArICgoX2kpICogNCkpCkBAIC0yNzksNyArMjg1LDggQEAKICNkZWZpbmUgSVhHQkVfVERXQkFIKF9pKSAoMHgwNjAzQyArICgoX2kpICogMHg0MCkpCiAjZGVmaW5lIElYR0JFX0RUWENUTCAgICAweDA3RTAwCiAKLSNkZWZpbmUgSVhHQkVfRE1BVFhDVEwgIDB4MDRBODAKKyNkZWZpbmUgSVhHQkVfRE1BVFhDVEwgICAgICAweDA0QTgwCisjZGVmaW5lIElYR0JFX1BGVkZTUE9PRihfaSkgKDB4MDgyMDAgKyAoKF9pKSAqIDQpKSAvKiA4IG9mIHRoZXNlIDAgLSA3ICovCiAjZGVmaW5lIElYR0JFX1BGRFRYR1NXQyAgICAgMHgwODIyMAogI2RlZmluZSBJWEdCRV9EVFhNWFNaUlEgICAgIDB4MDgxMDAKICNkZWZpbmUgSVhHQkVfRFRYVENQRkxHTCAgICAweDA0QTg4CkBAIC0yOTMsNiArMzAwLDEzIEBACiAjZGVmaW5lIElYR0JFX0RNQVRYQ1RMX1ZUX1NISUZUIDE2ICAvKiBWTEFOIEV0aGVyVHlwZSAqLwogCiAjZGVmaW5lIElYR0JFX1BGRFRYR1NXQ19WVF9MQkVOIDB4MSAvKiBMb2NhbCBMMiBWVCBzd2l0Y2ggZW5hYmxlICovCisKKy8qIEFudGktc3Bvb2ZpbmcgZGVmaW5lcyAqLworI2RlZmluZSBJWEdCRV9TUE9PRl9NQUNBU19NQVNLICAgICAgICAgIDB4RkYKKyNkZWZpbmUgSVhHQkVfU1BPT0ZfVkxBTkFTX01BU0sgICAgICAgICAweEZGMDAKKyNkZWZpbmUgSVhHQkVfU1BPT0ZfVkxBTkFTX1NISUZUICAgICAgICA4CisjZGVmaW5lIElYR0JFX1BGVkZTUE9PRl9SRUdfQ09VTlQgICAgICAgOAorCiAjZGVmaW5lIElYR0JFX0RDQV9UWENUUkwoX2kpICAgICgweDA3MjAwICsgKChfaSkgKiA0KSkgLyogMTYgb2YgdGhlc2UgKDAtMTUpICovCiAvKiBUeCBEQ0EgQ29udHJvbCByZWdpc3RlciA6IDEyOCBvZiB0aGVzZSAoMC0xMjcpICovCiAjZGVmaW5lIElYR0JFX0RDQV9UWENUUkxfODI1OTkoX2kpICAoMHgwNjAwQyArICgoX2kpICogMHg0MCkpCkBAIC05OTQsOCArMTAwOCwxMCBAQAogLyogUEhZIElEcyovCiAjZGVmaW5lIFROMTAxMF9QSFlfSUQgICAgMHgwMEExOTQxMAogI2RlZmluZSBUTlhfRldfUkVWICAgICAgIDB4QgorI2RlZmluZSBYNTQwX1BIWV9JRCAgICAgIDB4MDE1NDAyMDAKICNkZWZpbmUgUVQyMDIyX1BIWV9JRCAgICAweDAwNDNBNDAwCiAjZGVmaW5lIEFUSF9QSFlfSUQgICAgICAgMHgwMzQyOTA1MAorI2RlZmluZSBBUV9GV19SRVYgICAgICAgIDB4MjAKIAogLyogUEhZIFR5cGVzICovCiAjZGVmaW5lIElYR0JFX004OEUxMTQ1X0VfUEhZX0lEICAweDAxNDEwQ0QwCkBAIC0xNDYzLDYgKzE0NzksOCBAQAogI2RlZmluZSBJWEdCRV9BTkxQMV9QQVVTRSAgICAgICAgICAgICAgIDB4MEMwMAogI2RlZmluZSBJWEdCRV9BTkxQMV9TWU1fUEFVU0UgICAgICAgICAgIDB4MDQwMAogI2RlZmluZSBJWEdCRV9BTkxQMV9BU01fUEFVU0UgICAgICAgICAgIDB4MDgwMAorI2RlZmluZSBJWEdCRV9BTkxQMV9BTl9TVEFURV9NQVNLICAgICAgIDB4MDAwZjAwMDAKKwogCiAvKiBTVyBTZW1hcGhvcmUgUmVnaXN0ZXIgYml0bWFza3MgKi8KICNkZWZpbmUgSVhHQkVfU1dTTV9TTUJJIDB4MDAwMDAwMDEgLyogRHJpdmVyIFNlbWFwaG9yZSBiaXQgKi8KQEAgLTE0OTEsNiArMTUwOSw3IEBACiAjZGVmaW5lIElYR0JFX0VFQ19QUkVTICAgICAgMHgwMDAwMDEwMCAvKiBFRVBST00gUHJlc2VudCAqLwogI2RlZmluZSBJWEdCRV9FRUNfQVJEICAgICAgIDB4MDAwMDAyMDAgLyogRUVQUk9NIEF1dG8gUmVhZCBEb25lICovCiAjZGVmaW5lIElYR0JFX0VFQ19GTFVQICAgICAgMHgwMDgwMDAwMCAvKiBGbGFzaCB1cGRhdGUgY29tbWFuZCAqLworI2RlZmluZSBJWEdCRV9FRUNfU0VDMVZBTCAgIDB4MDIwMDAwMDAgLyogU2VjdG9yIDEgVmFsaWQgKi8KICNkZWZpbmUgSVhHQkVfRUVDX0ZMVURPTkUgICAweDA0MDAwMDAwIC8qIEZsYXNoIHVwZGF0ZSBkb25lICovCiAvKiBFRVBST00gQWRkcmVzc2luZyBiaXRzIGJhc2VkIG9uIHR5cGUgKDAtc21hbGwsIDEtbGFyZ2UpICovCiAjZGVmaW5lIElYR0JFX0VFQ19BRERSX1NJWkUgMHgwMDAwMDQwMApAQCAtMTUwMCwxMiArMTUxOSwxOCBAQAogI2RlZmluZSBJWEdCRV9FRVBST01fV09SRF9TSVpFX1NISUZUICA2CiAjZGVmaW5lIElYR0JFX0VFUFJPTV9PUENPREVfQklUUyAgICAgIDgKIAorLyogUGFydCBOdW1iZXIgU3RyaW5nIExlbmd0aCAqLworI2RlZmluZSBJWEdCRV9QQkFOVU1fTEVOR1RIIDExCisKIC8qIENoZWNrc3VtIGFuZCBFRVBST00gcG9pbnRlcnMgKi8KKyNkZWZpbmUgSVhHQkVfUEJBTlVNX1BUUl9HVUFSRCAgMHhGQUZBCiAjZGVmaW5lIElYR0JFX0VFUFJPTV9DSEVDS1NVTSAgIDB4M0YKICNkZWZpbmUgSVhHQkVfRUVQUk9NX1NVTSAgICAgICAgMHhCQUJBCiAjZGVmaW5lIElYR0JFX1BDSUVfQU5BTE9HX1BUUiAgIDB4MDMKICNkZWZpbmUgSVhHQkVfQVRMQVMwX0NPTkZJR19QVFIgMHgwNAorI2RlZmluZSBJWEdCRV9QSFlfUFRSICAgICAgICAgICAweDA0CiAjZGVmaW5lIElYR0JFX0FUTEFTMV9DT05GSUdfUFRSIDB4MDUKKyNkZWZpbmUgSVhHQkVfT1BUSU9OX1JPTV9QVFIgICAgMHgwNQogI2RlZmluZSBJWEdCRV9QQ0lFX0dFTkVSQUxfUFRSICAweDA2CiAjZGVmaW5lIElYR0JFX1BDSUVfQ09ORklHMF9QVFIgIDB4MDcKICNkZWZpbmUgSVhHQkVfUENJRV9DT05GSUcxX1BUUiAgMHgwOApAQCAtMjExMyw2ICsyMTM4LDE0IEBACiAjZGVmaW5lIElYR0JFX1BIWVNJQ0FMX0xBWUVSXzEwR0JBU0VfWEFVSSAweDEwMDAKICNkZWZpbmUgSVhHQkVfUEhZU0lDQUxfTEFZRVJfU0ZQX0FDVElWRV9EQSAweDIwMDAKIAorLyogRmxvdyBDb250cm9sIE1hY3JvcyAqLworI2RlZmluZSBQQVVTRV9SVFQJOAorI2RlZmluZSBQQVVTRV9NVFUoTVRVKQkoKE1UVSArIDEwMjQgLSAxKSAvIDEwMjQpCisKKyNkZWZpbmUgRkNfSElHSF9XQVRFUihNVFUpICgoKChQQVVTRV9SVFQgKyBQQVVTRV9NVFUoTVRVKSkgKiAxNDQpICsgOTkpIC8gMTAwICtcCisJCQkJUEFVU0VfTVRVKE1UVSkpCisjZGVmaW5lIEZDX0xPV19XQVRFUihNVFUpICAoMiAqICgyICogUEFVU0VfTVRVKE1UVSkgKyBQQVVTRV9SVFQpKQorCiAvKiBTb2Z0d2FyZSBBVFIgaGFzaCBrZXlzICovCiAjZGVmaW5lIElYR0JFX0FUUl9CVUNLRVRfSEFTSF9LRVkgICAgMHhFMjE0QUQzRAogI2RlZmluZSBJWEdCRV9BVFJfU0lHTkFUVVJFX0hBU0hfS0VZIDB4MTQzNjREMTcKQEAgLTIxNjQsNiArMjE5Nyw3IEBACiBlbnVtIGl4Z2JlX2VlcHJvbV90eXBlIHsKIAlpeGdiZV9lZXByb21fdW5pbml0aWFsaXplZCA9IDAsCiAJaXhnYmVfZWVwcm9tX3NwaSwKKwlpeGdiZV9mbGFzaCwKIAlpeGdiZV9lZXByb21fbm9uZSAvKiBObyBOVk0gc3VwcG9ydCAqLwogfTsKIApAQCAtMjE3MSwxMiArMjIwNSwxNCBAQAogCWl4Z2JlX21hY191bmtub3duID0gMCwKIAlpeGdiZV9tYWNfODI1OThFQiwKIAlpeGdiZV9tYWNfODI1OTlFQiwKKwlpeGdiZV9tYWNfWDU0MCwKIAlpeGdiZV9udW1fbWFjcwogfTsKIAogZW51bSBpeGdiZV9waHlfdHlwZSB7CiAJaXhnYmVfcGh5X3Vua25vd24gPSAwLAogCWl4Z2JlX3BoeV90biwKKwlpeGdiZV9waHlfYXEsCiAJaXhnYmVfcGh5X2N1X3Vua25vd24sCiAJaXhnYmVfcGh5X3F0LAogCWl4Z2JlX3BoeV94YXVpLApAQCAtMjQwNSw2ICsyNDQxLDcgQEAKIAlzMzIgKCp3cml0ZSkoc3RydWN0IGl4Z2JlX2h3ICosIHUxNiwgdTE2KTsKIAlzMzIgKCp2YWxpZGF0ZV9jaGVja3N1bSkoc3RydWN0IGl4Z2JlX2h3ICosIHUxNiAqKTsKIAlzMzIgKCp1cGRhdGVfY2hlY2tzdW0pKHN0cnVjdCBpeGdiZV9odyAqKTsKKwl1MTYgKCpjYWxjX2NoZWNrc3VtKShzdHJ1Y3QgaXhnYmVfaHcgKik7CiB9OwogCiBzdHJ1Y3QgaXhnYmVfbWFjX29wZXJhdGlvbnMgewpAQCAtMjQ1NCw2ICsyNDkxLDggQEAKIAlzMzIgKCpjbGVhcl92ZnRhKShzdHJ1Y3QgaXhnYmVfaHcgKik7CiAJczMyICgqc2V0X3ZmdGEpKHN0cnVjdCBpeGdiZV9odyAqLCB1MzIsIHUzMiwgYm9vbCk7CiAJczMyICgqaW5pdF91dGFfdGFibGVzKShzdHJ1Y3QgaXhnYmVfaHcgKik7CisJdm9pZCAoKnNldF9tYWNfYW50aV9zcG9vZmluZykoc3RydWN0IGl4Z2JlX2h3ICosIGJvb2wsIGludCk7CisJdm9pZCAoKnNldF92bGFuX2FudGlfc3Bvb2ZpbmcpKHN0cnVjdCBpeGdiZV9odyAqLCBib29sLCBpbnQpOwogCiAJLyogRmxvdyBDb250cm9sICovCiAJczMyICgqZmNfZW5hYmxlKShzdHJ1Y3QgaXhnYmVfaHcgKiwgczMyKTsKQEAgLTI1NzQsNiArMjYxMyw3IEBACiAJdTE2CQkJCXN1YnN5c3RlbV92ZW5kb3JfaWQ7CiAJdTgJCQkJcmV2aXNpb25faWQ7CiAJYm9vbAkJCQlhZGFwdGVyX3N0b3BwZWQ7CisJYm9vbAkJCQlmb3JjZV9mdWxsX3Jlc2V0OwogfTsKIAogc3RydWN0IGl4Z2JlX2luZm8gewpAQCAtMjYxNCw2ICsyNjU0LDkgQEAKICNkZWZpbmUgSVhHQkVfRVJSX05PX1NQQUNFICAgICAgICAgICAgICAgICAgICAgIC0yNQogI2RlZmluZSBJWEdCRV9FUlJfT1ZFUlRFTVAgICAgICAgICAgICAgICAgICAgICAgLTI2CiAjZGVmaW5lIElYR0JFX0VSUl9SQVJfSU5ERVggICAgICAgICAgICAgICAgICAgICAtMjcKKyNkZWZpbmUgSVhHQkVfRVJSX1NGUF9TRVRVUF9OT1RfQ09NUExFVEUgICAgICAgIC0zMAorI2RlZmluZSBJWEdCRV9FUlJfUEJBX1NFQ1RJT04gICAgICAgICAgICAgICAgICAgLTMxCisjZGVmaW5lIElYR0JFX0VSUl9JTlZBTElEX0FSR1VNRU5UICAgICAgICAgICAgICAtMzIKICNkZWZpbmUgSVhHQkVfTk9UX0lNUExFTUVOVEVEICAgICAgICAgICAgICAgICAgIDB4N0ZGRkZGRkYKIAogI2VuZGlmIC8qIF9JWEdCRV9UWVBFX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV94NTQwLmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV94NTQwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2E4OTIzOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3g1NDAuYwpAQCAtMCwwICsxLDcyNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworICBJbnRlbCAxMCBHaWdhYml0IFBDSSBFeHByZXNzIExpbnV4IGRyaXZlcgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisgIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluCisgIHRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCisKKyAgQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAgZTEwMDAtZGV2ZWwgTWFpbGluZyBMaXN0IDxlMTAwMC1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+CisgIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKworI2luY2x1ZGUgIml4Z2JlLmgiCisjaW5jbHVkZSAiaXhnYmVfcGh5LmgiCisvLyNpbmNsdWRlICJpeGdiZV9tYnguaCIKKworI2RlZmluZSBJWEdCRV9YNTQwX01BWF9UWF9RVUVVRVMgMTI4CisjZGVmaW5lIElYR0JFX1g1NDBfTUFYX1JYX1FVRVVFUyAxMjgKKyNkZWZpbmUgSVhHQkVfWDU0MF9SQVJfRU5UUklFUyAgIDEyOAorI2RlZmluZSBJWEdCRV9YNTQwX01DX1RCTF9TSVpFICAgMTI4CisjZGVmaW5lIElYR0JFX1g1NDBfVkZUX1RCTF9TSVpFICAxMjgKKworc3RhdGljIHMzMiBpeGdiZV91cGRhdGVfZmxhc2hfWDU0MChzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKK3N0YXRpYyBzMzIgaXhnYmVfcG9sbF9mbGFzaF91cGRhdGVfZG9uZV9YNTQwKHN0cnVjdCBpeGdiZV9odyAqaHcpOworc3RhdGljIHMzMiBpeGdiZV9hY3F1aXJlX3N3Zndfc3luY19YNTQwKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUxNiBtYXNrKTsKK3N0YXRpYyB2b2lkIGl4Z2JlX3JlbGVhc2Vfc3dmd19zeW5jX1g1NDAoc3RydWN0IGl4Z2JlX2h3ICpodywgdTE2IG1hc2spOworc3RhdGljIHMzMiBpeGdiZV9nZXRfc3dmd19zeW5jX3NlbWFwaG9yZShzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKK3N0YXRpYyB2b2lkIGl4Z2JlX3JlbGVhc2Vfc3dmd19zeW5jX3NlbWFwaG9yZShzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKKworc3RhdGljIGVudW0gaXhnYmVfbWVkaWFfdHlwZSBpeGdiZV9nZXRfbWVkaWFfdHlwZV9YNTQwKHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJcmV0dXJuIGl4Z2JlX21lZGlhX3R5cGVfY29wcGVyOworfQorCitzdGF0aWMgczMyIGl4Z2JlX2dldF9pbnZhcmlhbnRzX1g1NDAoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwlzdHJ1Y3QgaXhnYmVfbWFjX2luZm8gKm1hYyA9ICZody0+bWFjOworCisJLyogQ2FsbCBQSFkgaWRlbnRpZnkgcm91dGluZSB0byBnZXQgdGhlIHBoeSB0eXBlICovCisJaXhnYmVfaWRlbnRpZnlfcGh5X2dlbmVyaWMoaHcpOworCisJbWFjLT5tY2Z0X3NpemUgPSBJWEdCRV9YNTQwX01DX1RCTF9TSVpFOworCW1hYy0+dmZ0X3NpemUgPSBJWEdCRV9YNTQwX1ZGVF9UQkxfU0laRTsKKwltYWMtPm51bV9yYXJfZW50cmllcyA9IElYR0JFX1g1NDBfUkFSX0VOVFJJRVM7CisJbWFjLT5tYXhfcnhfcXVldWVzID0gSVhHQkVfWDU0MF9NQVhfUlhfUVVFVUVTOworCW1hYy0+bWF4X3R4X3F1ZXVlcyA9IElYR0JFX1g1NDBfTUFYX1RYX1FVRVVFUzsKKwltYWMtPm1heF9tc2l4X3ZlY3RvcnMgPSBpeGdiZV9nZXRfcGNpZV9tc2l4X2NvdW50X2dlbmVyaWMoaHcpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogIGl4Z2JlX3NldHVwX21hY19saW5rX1g1NDAgLSBTZXQgdGhlIGF1dG8gYWR2ZXJ0aXNlZCBjYXBhYmlsaXRpcmVzCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEBzcGVlZDogbmV3IGxpbmsgc3BlZWQKKyAqICBAYXV0b25lZzogdHJ1ZSBpZiBhdXRvbmVnb3RpYXRpb24gZW5hYmxlZAorICogIEBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGU6IHRydWUgd2hlbiB3YWl0aW5nIGZvciBjb21wbGV0aW9uIGlzIG5lZWRlZAorICoqLworc3RhdGljIHMzMiBpeGdiZV9zZXR1cF9tYWNfbGlua19YNTQwKHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXhnYmVfbGlua19zcGVlZCBzcGVlZCwgYm9vbCBhdXRvbmVnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYXV0b25lZ193YWl0X3RvX2NvbXBsZXRlKQoreworCXJldHVybiBody0+cGh5Lm9wcy5zZXR1cF9saW5rX3NwZWVkKGh3LCBzcGVlZCwgYXV0b25lZywKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGUpOworfQorCisvKioKKyAqICBpeGdiZV9yZXNldF9od19YNTQwIC0gUGVyZm9ybSBoYXJkd2FyZSByZXNldAorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqCisgKiAgUmVzZXRzIHRoZSBoYXJkd2FyZSBieSByZXNldHRpbmcgdGhlIHRyYW5zbWl0IGFuZCByZWNlaXZlIHVuaXRzLCBtYXNrcworICogIGFuZCBjbGVhcnMgYWxsIGludGVycnVwdHMsIHBlcmZvcm0gYSBQSFkgcmVzZXQsIGFuZCBwZXJmb3JtIGEgbGluayAoTUFDKQorICogIHJlc2V0LgorICoqLworc3RhdGljIHMzMiBpeGdiZV9yZXNldF9od19YNTQwKHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJaXhnYmVfbGlua19zcGVlZCBsaW5rX3NwZWVkOworCXMzMiBzdGF0dXMgPSAwOworCXUzMiBjdHJsOworCXUzMiBjdHJsX2V4dDsKKwl1MzIgcmVzZXRfYml0OworCXUzMiBpOworCXUzMiBhdXRvYzsKKwl1MzIgYXV0b2MyOworCWJvb2wgbGlua191cCA9IGZhbHNlOworCisJLyogQ2FsbCBhZGFwdGVyIHN0b3AgdG8gZGlzYWJsZSB0eC9yeCBhbmQgY2xlYXIgaW50ZXJydXB0cyAqLworCWh3LT5tYWMub3BzLnN0b3BfYWRhcHRlcihodyk7CisKKwkvKgorCSAqIFByZXZlbnQgdGhlIFBDSS1FIGJ1cyBmcm9tIGZyb20gaGFuZ2luZyBieSBkaXNhYmxpbmcgUENJLUUgbWFzdGVyCisJICogYWNjZXNzIGFuZCB2ZXJpZnkgbm8gcGVuZGluZyByZXF1ZXN0cyBiZWZvcmUgcmVzZXQKKwkgKi8KKwlzdGF0dXMgPSBpeGdiZV9kaXNhYmxlX3BjaWVfbWFzdGVyKGh3KTsKKwlpZiAoc3RhdHVzICE9IDApIHsKKwkJc3RhdHVzID0gSVhHQkVfRVJSX01BU1RFUl9SRVFVRVNUU19QRU5ESU5HOworCQlod19kYmcoaHcsICJQQ0ktRSBNYXN0ZXIgZGlzYWJsZSBwb2xsaW5nIGhhcyBmYWlsZWQuXG4iKTsKKwl9CisKKwkvKgorCSAqIElzc3VlIGdsb2JhbCByZXNldCB0byB0aGUgTUFDLiAgTmVlZHMgdG8gYmUgU1cgcmVzZXQgaWYgbGluayBpcyB1cC4KKwkgKiBJZiBsaW5rIHJlc2V0IGlzIHVzZWQgd2hlbiBsaW5rIGlzIHVwLCBpdCBtaWdodCByZXNldCB0aGUgUEhZIHdoZW4KKwkgKiBtbmcgaXMgdXNpbmcgaXQuICBJZiBsaW5rIGlzIGRvd24gb3IgdGhlIGZsYWcgdG8gZm9yY2UgZnVsbCBsaW5rCisJICogcmVzZXQgaXMgc2V0LCB0aGVuIHBlcmZvcm0gbGluayByZXNldC4KKwkgKi8KKwlpZiAoaHctPmZvcmNlX2Z1bGxfcmVzZXQpIHsKKwkJcmVzZXRfYml0ID0gSVhHQkVfQ1RSTF9MTktfUlNUOworCX0gZWxzZSB7CisJCWh3LT5tYWMub3BzLmNoZWNrX2xpbmsoaHcsICZsaW5rX3NwZWVkLCAmbGlua191cCwgZmFsc2UpOworCQlpZiAoIWxpbmtfdXApCisJCQlyZXNldF9iaXQgPSBJWEdCRV9DVFJMX0xOS19SU1Q7CisJCWVsc2UKKwkJCXJlc2V0X2JpdCA9IElYR0JFX0NUUkxfUlNUOworCX0KKworCWN0cmwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfQ1RSTCk7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9DVFJMLCAoY3RybCB8IElYR0JFX0NUUkxfUlNUKSk7CisJSVhHQkVfV1JJVEVfRkxVU0goaHcpOworCisJLyogUG9sbCBmb3IgcmVzZXQgYml0IHRvIHNlbGYtY2xlYXIgaW5kaWNhdGluZyByZXNldCBpcyBjb21wbGV0ZSAqLworCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisJCXVkZWxheSgxKTsKKwkJY3RybCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9DVFJMKTsKKwkJaWYgKCEoY3RybCAmIElYR0JFX0NUUkxfUlNUKSkKKwkJCWJyZWFrOworCX0KKwlpZiAoY3RybCAmIElYR0JFX0NUUkxfUlNUKSB7CisJCXN0YXR1cyA9IElYR0JFX0VSUl9SRVNFVF9GQUlMRUQ7CisJCWh3X2RiZyhodywgIlJlc2V0IHBvbGxpbmcgZmFpbGVkIHRvIGNvbXBsZXRlLlxuIik7CisJfQorCisJLyogQ2xlYXIgUEYgUmVzZXQgRG9uZSBiaXQgc28gUEYvVkYgTWFpbCBPcHMgY2FuIHdvcmsgKi8KKwljdHJsX2V4dCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9DVFJMX0VYVCk7CisJY3RybF9leHQgfD0gSVhHQkVfQ1RSTF9FWFRfUEZSU1REOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfQ1RSTF9FWFQsIGN0cmxfZXh0KTsKKworCW1zbGVlcCg1MCk7CisKKwkvKiBTZXQgdGhlIFJ4IHBhY2tldCBidWZmZXIgc2l6ZS4gKi8KKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JYUEJTSVpFKDApLCAzODQgPDwgSVhHQkVfUlhQQlNJWkVfU0hJRlQpOworCisJLyogU3RvcmUgdGhlIHBlcm1hbmVudCBtYWMgYWRkcmVzcyAqLworCWh3LT5tYWMub3BzLmdldF9tYWNfYWRkcihodywgaHctPm1hYy5wZXJtX2FkZHIpOworCisJLyoKKwkgKiBTdG9yZSB0aGUgb3JpZ2luYWwgQVVUT0MvQVVUT0MyIHZhbHVlcyBpZiB0aGV5IGhhdmUgbm90IGJlZW4KKwkgKiBzdG9yZWQgb2ZmIHlldC4gIE90aGVyd2lzZSByZXN0b3JlIHRoZSBzdG9yZWQgb3JpZ2luYWwKKwkgKiB2YWx1ZXMgc2luY2UgdGhlIHJlc2V0IG9wZXJhdGlvbiBzZXRzIGJhY2sgdG8gZGVmYXVsdHMuCisJICovCisJYXV0b2MgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfQVVUT0MpOworCWF1dG9jMiA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9BVVRPQzIpOworCWlmIChody0+bWFjLm9yaWdfbGlua19zZXR0aW5nc19zdG9yZWQgPT0gZmFsc2UpIHsKKwkJaHctPm1hYy5vcmlnX2F1dG9jID0gYXV0b2M7CisJCWh3LT5tYWMub3JpZ19hdXRvYzIgPSBhdXRvYzI7CisJCWh3LT5tYWMub3JpZ19saW5rX3NldHRpbmdzX3N0b3JlZCA9IHRydWU7CisJfSBlbHNlIHsKKwkJaWYgKGF1dG9jICE9IGh3LT5tYWMub3JpZ19hdXRvYykKKwkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfQVVUT0MsIChody0+bWFjLm9yaWdfYXV0b2MgfAorCQkJICAgICAgICAgICAgICAgIElYR0JFX0FVVE9DX0FOX1JFU1RBUlQpKTsKKworCQlpZiAoKGF1dG9jMiAmIElYR0JFX0FVVE9DMl9VUFBFUl9NQVNLKSAhPQorCQkgICAgKGh3LT5tYWMub3JpZ19hdXRvYzIgJiBJWEdCRV9BVVRPQzJfVVBQRVJfTUFTSykpIHsKKwkJCWF1dG9jMiAmPSB+SVhHQkVfQVVUT0MyX1VQUEVSX01BU0s7CisJCQlhdXRvYzIgfD0gKGh3LT5tYWMub3JpZ19hdXRvYzIgJgorCQkJICAgICAgICAgICBJWEdCRV9BVVRPQzJfVVBQRVJfTUFTSyk7CisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0FVVE9DMiwgYXV0b2MyKTsKKwkJfQorCX0KKworCS8qCisJICogU3RvcmUgTUFDIGFkZHJlc3MgZnJvbSBSQVIwLCBjbGVhciByZWNlaXZlIGFkZHJlc3MgcmVnaXN0ZXJzLCBhbmQKKwkgKiBjbGVhciB0aGUgbXVsdGljYXN0IHRhYmxlLiAgQWxzbyByZXNldCBudW1fcmFyX2VudHJpZXMgdG8gMTI4LAorCSAqIHNpbmNlIHdlIG1vZGlmeSB0aGlzIHZhbHVlIHdoZW4gcHJvZ3JhbW1pbmcgdGhlIFNBTiBNQUMgYWRkcmVzcy4KKwkgKi8KKwlody0+bWFjLm51bV9yYXJfZW50cmllcyA9IDEyODsKKwlody0+bWFjLm9wcy5pbml0X3J4X2FkZHJzKGh3KTsKKworCS8qIFN0b3JlIHRoZSBwZXJtYW5lbnQgbWFjIGFkZHJlc3MgKi8KKwlody0+bWFjLm9wcy5nZXRfbWFjX2FkZHIoaHcsIGh3LT5tYWMucGVybV9hZGRyKTsKKworCS8qIFN0b3JlIHRoZSBwZXJtYW5lbnQgU0FOIG1hYyBhZGRyZXNzICovCisJaHctPm1hYy5vcHMuZ2V0X3Nhbl9tYWNfYWRkcihodywgaHctPm1hYy5zYW5fYWRkcik7CisKKwkvKiBBZGQgdGhlIFNBTiBNQUMgYWRkcmVzcyB0byB0aGUgUkFSIG9ubHkgaWYgaXQncyBhIHZhbGlkIGFkZHJlc3MgKi8KKwlpZiAoaXhnYmVfdmFsaWRhdGVfbWFjX2FkZHIoaHctPm1hYy5zYW5fYWRkcikgPT0gMCkgeworCQlody0+bWFjLm9wcy5zZXRfcmFyKGh3LCBody0+bWFjLm51bV9yYXJfZW50cmllcyAtIDEsCisJCSAgICAgICAgICAgICAgICAgICAgaHctPm1hYy5zYW5fYWRkciwgMCwgSVhHQkVfUkFIX0FWKTsKKworCQkvKiBSZXNlcnZlIHRoZSBsYXN0IFJBUiBmb3IgdGhlIFNBTiBNQUMgYWRkcmVzcyAqLworCQlody0+bWFjLm51bV9yYXJfZW50cmllcy0tOworCX0KKworCS8qIFN0b3JlIHRoZSBhbHRlcm5hdGl2ZSBXV05OL1dXUE4gcHJlZml4ICovCisJaHctPm1hYy5vcHMuZ2V0X3d3bl9wcmVmaXgoaHcsICZody0+bWFjLnd3bm5fcHJlZml4LAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICZody0+bWFjLnd3cG5fcHJlZml4KTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogIGl4Z2JlX2dldF9zdXBwb3J0ZWRfcGh5c2ljYWxfbGF5ZXJfWDU0MCAtIFJldHVybnMgcGh5c2ljYWwgbGF5ZXIgdHlwZQorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqCisgKiAgRGV0ZXJtaW5lcyBwaHlzaWNhbCBsYXllciBjYXBhYmlsaXRpZXMgb2YgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4KKyAqKi8KK3N0YXRpYyB1MzIgaXhnYmVfZ2V0X3N1cHBvcnRlZF9waHlzaWNhbF9sYXllcl9YNTQwKHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJdTMyIHBoeXNpY2FsX2xheWVyID0gSVhHQkVfUEhZU0lDQUxfTEFZRVJfVU5LTk9XTjsKKwl1MTYgZXh0X2FiaWxpdHkgPSAwOworCisJaHctPnBoeS5vcHMuaWRlbnRpZnkoaHcpOworCisJaHctPnBoeS5vcHMucmVhZF9yZWcoaHcsIE1ESU9fUE1BX0VYVEFCTEUsIE1ESU9fTU1EX1BNQVBNRCwKKwkJCSAgICAgJmV4dF9hYmlsaXR5KTsKKwlpZiAoZXh0X2FiaWxpdHkgJiBNRElPX1BNQV9FWFRBQkxFXzEwR0JUKQorCQlwaHlzaWNhbF9sYXllciB8PSBJWEdCRV9QSFlTSUNBTF9MQVlFUl8xMEdCQVNFX1Q7CisJaWYgKGV4dF9hYmlsaXR5ICYgTURJT19QTUFfRVhUQUJMRV8xMDAwQlQpCisJCXBoeXNpY2FsX2xheWVyIHw9IElYR0JFX1BIWVNJQ0FMX0xBWUVSXzEwMDBCQVNFX1Q7CisJaWYgKGV4dF9hYmlsaXR5ICYgTURJT19QTUFfRVhUQUJMRV8xMDBCVFgpCisJCXBoeXNpY2FsX2xheWVyIHw9IElYR0JFX1BIWVNJQ0FMX0xBWUVSXzEwMEJBU0VfVFg7CisKKwlyZXR1cm4gcGh5c2ljYWxfbGF5ZXI7Cit9CisKKy8qKgorICogaXhnYmVfaW5pdF9lZXByb21fcGFyYW1zX1g1NDAgLSBJbml0aWFsaXplIEVFUFJPTSBwYXJhbXMKKyAqIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqKi8KK3N0YXRpYyBzMzIgaXhnYmVfaW5pdF9lZXByb21fcGFyYW1zX1g1NDAoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwlzdHJ1Y3QgaXhnYmVfZWVwcm9tX2luZm8gKmVlcHJvbSA9ICZody0+ZWVwcm9tOworCXUzMiBlZWM7CisJdTE2IGVlcHJvbV9zaXplOworCisJaWYgKGVlcHJvbS0+dHlwZSA9PSBpeGdiZV9lZXByb21fdW5pbml0aWFsaXplZCkgeworCQllZXByb20tPnNlbWFwaG9yZV9kZWxheSA9IDEwOworCQllZXByb20tPnR5cGUgPSBpeGdiZV9mbGFzaDsKKworCQllZWMgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfRUVDKTsKKwkJZWVwcm9tX3NpemUgPSAodTE2KSgoZWVjICYgSVhHQkVfRUVDX1NJWkUpID4+CisJCSAgICAgICAgICAgICAgICAgICAgSVhHQkVfRUVDX1NJWkVfU0hJRlQpOworCQllZXByb20tPndvcmRfc2l6ZSA9IDEgPDwgKGVlcHJvbV9zaXplICsKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICBJWEdCRV9FRVBST01fV09SRF9TSVpFX1NISUZUKTsKKworCQlod19kYmcoaHcsICJFZXByb20gcGFyYW1zOiB0eXBlID0gJWQsIHNpemUgPSAlZFxuIiwKKwkJICAgICAgICBlZXByb20tPnR5cGUsIGVlcHJvbS0+d29yZF9zaXplKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBpeGdiZV9yZWFkX2VlcmRfWDU0MCAtIFJlYWQgRUVQUk9NIHdvcmQgdXNpbmcgRUVSRAorICogQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogQG9mZnNldDogb2Zmc2V0IG9mIHdvcmQgaW4gdGhlIEVFUFJPTSB0byByZWFkCisgKiBAZGF0YTogd29yZCByZWFkIGZyb20gdGhlIEVFUlBPTQorICoqLworc3RhdGljIHMzMiBpeGdiZV9yZWFkX2VlcmRfWDU0MChzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MTYgb2Zmc2V0LCB1MTYgKmRhdGEpCit7CisJczMyIHN0YXR1czsKKworCWlmIChpeGdiZV9hY3F1aXJlX3N3Zndfc3luY19YNTQwKGh3LCBJWEdCRV9HU1NSX0VFUF9TTSkgPT0gMCkKKwkJc3RhdHVzID0gaXhnYmVfcmVhZF9lZXJkX2dlbmVyaWMoaHcsIG9mZnNldCwgZGF0YSk7CisJZWxzZQorCQlzdGF0dXMgPSBJWEdCRV9FUlJfU1dGV19TWU5DOworCisJaXhnYmVfcmVsZWFzZV9zd2Z3X3N5bmNfWDU0MChodywgSVhHQkVfR1NTUl9FRVBfU00pOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogaXhnYmVfd3JpdGVfZWV3cl9YNTQwIC0gV3JpdGUgRUVQUk9NIHdvcmQgdXNpbmcgRUVXUgorICogQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogQG9mZnNldDogb2Zmc2V0IG9mICB3b3JkIGluIHRoZSBFRVBST00gdG8gd3JpdGUKKyAqIEBkYXRhOiB3b3JkIHdyaXRlIHRvIHRoZSBFRVBST00KKyAqCisgKiBXcml0ZSBhIDE2IGJpdCB3b3JkIHRvIHRoZSBFRVBST00gdXNpbmcgdGhlIEVFV1IgcmVnaXN0ZXIuCisgKiovCitzdGF0aWMgczMyIGl4Z2JlX3dyaXRlX2Vld3JfWDU0MChzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MTYgb2Zmc2V0LCB1MTYgZGF0YSkKK3sKKwl1MzIgZWV3cjsKKwlzMzIgc3RhdHVzOworCisJaHctPmVlcHJvbS5vcHMuaW5pdF9wYXJhbXMoaHcpOworCisJaWYgKG9mZnNldCA+PSBody0+ZWVwcm9tLndvcmRfc2l6ZSkgeworCQlzdGF0dXMgPSBJWEdCRV9FUlJfRUVQUk9NOworCQlnb3RvIG91dDsKKwl9CisKKwllZXdyID0gKG9mZnNldCA8PCBJWEdCRV9FRVBST01fUldfQUREUl9TSElGVCkgfAorCSAgICAgICAoZGF0YSA8PCBJWEdCRV9FRVBST01fUldfUkVHX0RBVEEpIHwKKwkgICAgICAgSVhHQkVfRUVQUk9NX1JXX1JFR19TVEFSVDsKKworCWlmIChpeGdiZV9hY3F1aXJlX3N3Zndfc3luY19YNTQwKGh3LCBJWEdCRV9HU1NSX0VFUF9TTSkgPT0gMCkgeworCQlzdGF0dXMgPSBpeGdiZV9wb2xsX2VlcmRfZWV3cl9kb25lKGh3LCBJWEdCRV9OVk1fUE9MTF9XUklURSk7CisJCWlmIChzdGF0dXMgIT0gMCkgeworCQkJaHdfZGJnKGh3LCAiRWVwcm9tIHdyaXRlIEVFV1IgdGltZWQgb3V0XG4iKTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9FRVdSLCBlZXdyKTsKKworCQlzdGF0dXMgPSBpeGdiZV9wb2xsX2VlcmRfZWV3cl9kb25lKGh3LCBJWEdCRV9OVk1fUE9MTF9XUklURSk7CisJCWlmIChzdGF0dXMgIT0gMCkgeworCQkJaHdfZGJnKGh3LCAiRWVwcm9tIHdyaXRlIEVFV1IgdGltZWQgb3V0XG4iKTsKKwkJCWdvdG8gb3V0OworCQl9CisJfSBlbHNlIHsKKwkJc3RhdHVzID0gSVhHQkVfRVJSX1NXRldfU1lOQzsKKwl9CisKK291dDoKKwlpeGdiZV9yZWxlYXNlX3N3Zndfc3luY19YNTQwKGh3LCBJWEdCRV9HU1NSX0VFUF9TTSk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiBpeGdiZV9jYWxjX2VlcHJvbV9jaGVja3N1bV9YNTQwIC0gQ2FsY3VsYXRlcyBhbmQgcmV0dXJucyB0aGUgY2hlY2tzdW0KKyAqIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqKi8KK3N0YXRpYyB1MTYgaXhnYmVfY2FsY19lZXByb21fY2hlY2tzdW1fWDU0MChzdHJ1Y3QgaXhnYmVfaHcgKmh3KQoreworCXUxNiBpOworCXUxNiBqOworCXUxNiBjaGVja3N1bSA9IDA7CisJdTE2IGxlbmd0aCA9IDA7CisJdTE2IHBvaW50ZXIgPSAwOworCXUxNiB3b3JkID0gMDsKKworCS8qIEluY2x1ZGUgMHgwLTB4M0YgaW4gdGhlIGNoZWNrc3VtICovCisJZm9yIChpID0gMDsgaSA8IElYR0JFX0VFUFJPTV9DSEVDS1NVTTsgaSsrKSB7CisJCWlmIChody0+ZWVwcm9tLm9wcy5yZWFkKGh3LCBpLCAmd29yZCkgIT0gMCkgeworCQkJaHdfZGJnKGh3LCAiRUVQUk9NIHJlYWQgZmFpbGVkXG4iKTsKKwkJCWJyZWFrOworCQl9CisJCWNoZWNrc3VtICs9IHdvcmQ7CisJfQorCisJLyoKKwkgKiBJbmNsdWRlIGFsbCBkYXRhIGZyb20gcG9pbnRlcnMgMHgzLCAweDYtMHhFLiAgVGhpcyBleGNsdWRlcyB0aGUKKwkgKiBGVywgUEhZIG1vZHVsZSwgYW5kIFBDSWUgRXhwYW5zaW9uL09wdGlvbiBST00gcG9pbnRlcnMuCisJICovCisJZm9yIChpID0gSVhHQkVfUENJRV9BTkFMT0dfUFRSOyBpIDwgSVhHQkVfRldfUFRSOyBpKyspIHsKKwkJaWYgKGkgPT0gSVhHQkVfUEhZX1BUUiB8fCBpID09IElYR0JFX09QVElPTl9ST01fUFRSKQorCQkJY29udGludWU7CisKKwkJaWYgKGh3LT5lZXByb20ub3BzLnJlYWQoaHcsIGksICZwb2ludGVyKSAhPSAwKSB7CisJCQlod19kYmcoaHcsICJFRVBST00gcmVhZCBmYWlsZWRcbiIpOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBTa2lwIHBvaW50ZXIgc2VjdGlvbiBpZiB0aGUgcG9pbnRlciBpcyBpbnZhbGlkLiAqLworCQlpZiAocG9pbnRlciA9PSAweEZGRkYgfHwgcG9pbnRlciA9PSAwIHx8CisJCSAgICBwb2ludGVyID49IGh3LT5lZXByb20ud29yZF9zaXplKQorCQkJY29udGludWU7CisKKwkJaWYgKGh3LT5lZXByb20ub3BzLnJlYWQoaHcsIHBvaW50ZXIsICZsZW5ndGgpICE9IDApIHsKKwkJCWh3X2RiZyhodywgIkVFUFJPTSByZWFkIGZhaWxlZFxuIik7CisJCQlicmVhazsKKwkJfQorCisJCS8qIFNraXAgcG9pbnRlciBzZWN0aW9uIGlmIGxlbmd0aCBpcyBpbnZhbGlkLiAqLworCQlpZiAobGVuZ3RoID09IDB4RkZGRiB8fCBsZW5ndGggPT0gMCB8fAorCQkgICAgKHBvaW50ZXIgKyBsZW5ndGgpID49IGh3LT5lZXByb20ud29yZF9zaXplKQorCQkJY29udGludWU7CisKKwkJZm9yIChqID0gcG9pbnRlcisxOyBqIDw9IHBvaW50ZXIrbGVuZ3RoOyBqKyspIHsKKwkJCWlmIChody0+ZWVwcm9tLm9wcy5yZWFkKGh3LCBqLCAmd29yZCkgIT0gMCkgeworCQkJCWh3X2RiZyhodywgIkVFUFJPTSByZWFkIGZhaWxlZFxuIik7CisJCQkJYnJlYWs7CisJCQl9CisJCQljaGVja3N1bSArPSB3b3JkOworCQl9CisJfQorCisJY2hlY2tzdW0gPSAodTE2KUlYR0JFX0VFUFJPTV9TVU0gLSBjaGVja3N1bTsKKworCXJldHVybiBjaGVja3N1bTsKK30KKworLyoqCisgKiBpeGdiZV91cGRhdGVfZWVwcm9tX2NoZWNrc3VtX1g1NDAgLSBVcGRhdGVzIHRoZSBFRVBST00gY2hlY2tzdW0gYW5kIGZsYXNoCisgKiBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKgorICogQWZ0ZXIgd3JpdGluZyBFRVBST00gdG8gc2hhZG93IFJBTSB1c2luZyBFRVdSIHJlZ2lzdGVyLCBzb2Z0d2FyZSBjYWxjdWxhdGVzCisgKiBjaGVja3N1bSBhbmQgdXBkYXRlcyB0aGUgRUVQUk9NIGFuZCBpbnN0cnVjdHMgdGhlIGhhcmR3YXJlIHRvIHVwZGF0ZQorICogdGhlIGZsYXNoLgorICoqLworc3RhdGljIHMzMiBpeGdiZV91cGRhdGVfZWVwcm9tX2NoZWNrc3VtX1g1NDAoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwlzMzIgc3RhdHVzOworCisJc3RhdHVzID0gaXhnYmVfdXBkYXRlX2VlcHJvbV9jaGVja3N1bV9nZW5lcmljKGh3KTsKKworCWlmIChzdGF0dXMpCisJCXN0YXR1cyA9IGl4Z2JlX3VwZGF0ZV9mbGFzaF9YNTQwKGh3KTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogaXhnYmVfdXBkYXRlX2ZsYXNoX1g1NDAgLSBJbnN0cnVjdCBIVyB0byBjb3B5IEVFUFJPTSB0byBGbGFzaCBkZXZpY2UKKyAqIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqCisgKiBTZXQgRkxVUCAoYml0IDIzKSBvZiB0aGUgRUVDIHJlZ2lzdGVyIHRvIGluc3RydWN0IEhhcmR3YXJlIHRvIGNvcHkKKyAqIEVFUFJPTSBmcm9tIHNoYWRvdyBSQU0gdG8gdGhlIGZsYXNoIGRldmljZS4KKyAqKi8KK3N0YXRpYyBzMzIgaXhnYmVfdXBkYXRlX2ZsYXNoX1g1NDAoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwl1MzIgZmx1cDsKKwlzMzIgc3RhdHVzID0gSVhHQkVfRVJSX0VFUFJPTTsKKworCXN0YXR1cyA9IGl4Z2JlX3BvbGxfZmxhc2hfdXBkYXRlX2RvbmVfWDU0MChodyk7CisJaWYgKHN0YXR1cyA9PSBJWEdCRV9FUlJfRUVQUk9NKSB7CisJCWh3X2RiZyhodywgIkZsYXNoIHVwZGF0ZSB0aW1lIG91dFxuIik7CisJCWdvdG8gb3V0OworCX0KKworCWZsdXAgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfRUVDKSB8IElYR0JFX0VFQ19GTFVQOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRUVDLCBmbHVwKTsKKworCXN0YXR1cyA9IGl4Z2JlX3BvbGxfZmxhc2hfdXBkYXRlX2RvbmVfWDU0MChodyk7CisJaWYgKHN0YXR1cykKKwkJaHdfZGJnKGh3LCAiRmxhc2ggdXBkYXRlIGNvbXBsZXRlXG4iKTsKKwllbHNlCisJCWh3X2RiZyhodywgIkZsYXNoIHVwZGF0ZSB0aW1lIG91dFxuIik7CisKKwlpZiAoaHctPnJldmlzaW9uX2lkID09IDApIHsKKwkJZmx1cCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9FRUMpOworCisJCWlmIChmbHVwICYgSVhHQkVfRUVDX1NFQzFWQUwpIHsKKwkJCWZsdXAgfD0gSVhHQkVfRUVDX0ZMVVA7CisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0VFQywgZmx1cCk7CisJCX0KKworCQlzdGF0dXMgPSBpeGdiZV9wb2xsX2ZsYXNoX3VwZGF0ZV9kb25lX1g1NDAoaHcpOworCQlpZiAoc3RhdHVzKQorCQkJaHdfZGJnKGh3LCAiRmxhc2ggdXBkYXRlIGNvbXBsZXRlXG4iKTsKKwkJZWxzZQorCQkJaHdfZGJnKGh3LCAiRmxhc2ggdXBkYXRlIHRpbWUgb3V0XG4iKTsKKworCX0KK291dDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqIGl4Z2JlX3BvbGxfZmxhc2hfdXBkYXRlX2RvbmVfWDU0MCAtIFBvbGwgZmxhc2ggdXBkYXRlIHN0YXR1cworICogQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICoKKyAqIFBvbGxzIHRoZSBGTFVET05FIChiaXQgMjYpIG9mIHRoZSBFRUMgUmVnaXN0ZXIgdG8gZGV0ZXJtaW5lIHdoZW4gdGhlCisgKiBmbGFzaCB1cGRhdGUgaXMgZG9uZS4KKyAqKi8KK3N0YXRpYyBzMzIgaXhnYmVfcG9sbF9mbGFzaF91cGRhdGVfZG9uZV9YNTQwKHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJdTMyIGk7CisJdTMyIHJlZzsKKwlzMzIgc3RhdHVzID0gSVhHQkVfRVJSX0VFUFJPTTsKKworCWZvciAoaSA9IDA7IGkgPCBJWEdCRV9GTFVET05FX0FUVEVNUFRTOyBpKyspIHsKKwkJcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0VFQyk7CisJCWlmIChyZWcgJiBJWEdCRV9FRUNfRkxVRE9ORSkgeworCQkJc3RhdHVzID0gMDsKKwkJCWJyZWFrOworCQl9CisJCXVkZWxheSg1KTsKKwl9CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiBpeGdiZV9hY3F1aXJlX3N3Zndfc3luY19YNTQwIC0gQWNxdWlyZSBTV0ZXIHNlbWFwaG9yZQorICogQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogQG1hc2s6IE1hc2sgdG8gc3BlY2lmeSB3aGljaCBzZW1hcGhvcmUgdG8gYWNxdWlyZQorICoKKyAqIEFjcXVpcmVzIHRoZSBTV0ZXIHNlbWFwaG9yZSB0aG91Z2h0IHRoZSBTV19GV19TWU5DIHJlZ2lzdGVyIGZvcgorICogdGhlIHNwZWNpZmllZCBmdW5jdGlvbiAoQ1NSLCBQSFkwLCBQSFkxLCBOVk0sIEZsYXNoKQorICoqLworc3RhdGljIHMzMiBpeGdiZV9hY3F1aXJlX3N3Zndfc3luY19YNTQwKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUxNiBtYXNrKQoreworCXUzMiBzd2Z3X3N5bmM7CisJdTMyIHN3bWFzayA9IG1hc2s7CisJdTMyIGZ3bWFzayA9IG1hc2sgPDwgNTsKKwl1MzIgaHdtYXNrID0gMDsKKwl1MzIgdGltZW91dCA9IDIwMDsKKwl1MzIgaTsKKworCWlmIChzd21hc2sgPT0gSVhHQkVfR1NTUl9FRVBfU00pCisJCWh3bWFzayA9IElYR0JFX0dTU1JfRkxBU0hfU007CisKKwlmb3IgKGkgPSAwOyBpIDwgdGltZW91dDsgaSsrKSB7CisJCS8qCisJCSAqIFNXIE5WTSBzZW1hcGhvcmUgYml0IGlzIHVzZWQgZm9yIGFjY2VzcyB0byBhbGwKKwkJICogU1dfRldfU1lOQyBiaXRzIChub3QganVzdCBOVk0pCisJCSAqLworCQlpZiAoaXhnYmVfZ2V0X3N3Zndfc3luY19zZW1hcGhvcmUoaHcpKQorCQkJcmV0dXJuIElYR0JFX0VSUl9TV0ZXX1NZTkM7CisKKwkJc3dmd19zeW5jID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1NXRldfU1lOQyk7CisJCWlmICghKHN3Zndfc3luYyAmIChmd21hc2sgfCBzd21hc2sgfCBod21hc2spKSkgeworCQkJc3dmd19zeW5jIHw9IHN3bWFzazsKKwkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfU1dGV19TWU5DLCBzd2Z3X3N5bmMpOworCQkJaXhnYmVfcmVsZWFzZV9zd2Z3X3N5bmNfc2VtYXBob3JlKGh3KTsKKwkJCWJyZWFrOworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIEZpcm13YXJlIGN1cnJlbnRseSB1c2luZyByZXNvdXJjZSAoZndtYXNrKSwKKwkJCSAqIGhhcmR3YXJlIGN1cnJlbnRseSB1c2luZyByZXNvdXJjZSAoaHdtYXNrKSwKKwkJCSAqIG9yIG90aGVyIHNvZnR3YXJlIHRocmVhZCBjdXJyZW50bHkgdXNpbmcKKwkJCSAqIHJlc291cmNlIChzd21hc2spCisJCQkgKi8KKwkJCWl4Z2JlX3JlbGVhc2Vfc3dmd19zeW5jX3NlbWFwaG9yZShodyk7CisJCQltc2xlZXAoNSk7CisJCX0KKwl9CisKKwkvKgorCSAqIElmIHRoZSByZXNvdXJjZSBpcyBub3QgcmVsZWFzZWQgYnkgdGhlIEZXL0hXIHRoZSBTVyBjYW4gYXNzdW1lIHRoYXQKKwkgKiB0aGUgRlcvSFcgbWFsZnVuY3Rpb25zLiBJbiB0aGF0IGNhc2UgdGhlIFNXIHNob3VsZCBzZXRzIHRoZQorCSAqIFNXIGJpdChzKSBvZiB0aGUgcmVxdWVzdGVkIHJlc291cmNlKHMpIHdoaWxlIGlnbm9yaW5nIHRoZQorCSAqIGNvcnJlc3BvbmRpbmcgRlcvSFcgYml0cyBpbiB0aGUgU1dfRldfU1lOQyByZWdpc3Rlci4KKwkgKi8KKwlpZiAoaSA+PSB0aW1lb3V0KSB7CisJCXN3Zndfc3luYyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9TV0ZXX1NZTkMpOworCQlpZiAoc3dmd19zeW5jICYgKGZ3bWFzayB8IGh3bWFzaykpIHsKKwkJCWlmIChpeGdiZV9nZXRfc3dmd19zeW5jX3NlbWFwaG9yZShodykpCisJCQkJcmV0dXJuIElYR0JFX0VSUl9TV0ZXX1NZTkM7CisKKwkJCXN3Zndfc3luYyB8PSBzd21hc2s7CisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1NXRldfU1lOQywgc3dmd19zeW5jKTsKKwkJCWl4Z2JlX3JlbGVhc2Vfc3dmd19zeW5jX3NlbWFwaG9yZShodyk7CisJCX0KKwl9CisKKwltc2xlZXAoNSk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogaXhnYmVfcmVsZWFzZV9zd2Z3X3N5bmNfWDU0MCAtIFJlbGVhc2UgU1dGVyBzZW1hcGhvcmUKKyAqIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqIEBtYXNrOiBNYXNrIHRvIHNwZWNpZnkgd2hpY2ggc2VtYXBob3JlIHRvIHJlbGVhc2UKKyAqCisgKiBSZWxlYXNlcyB0aGUgU1dGVyBzZW1hcGhvcmUgdGhyb3VnaHQgdGhlIFNXX0ZXX1NZTkMgcmVnaXN0ZXIKKyAqIGZvciB0aGUgc3BlY2lmaWVkIGZ1bmN0aW9uIChDU1IsIFBIWTAsIFBIWTEsIEVWTSwgRmxhc2gpCisgKiovCitzdGF0aWMgdm9pZCBpeGdiZV9yZWxlYXNlX3N3Zndfc3luY19YNTQwKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUxNiBtYXNrKQoreworCXUzMiBzd2Z3X3N5bmM7CisJdTMyIHN3bWFzayA9IG1hc2s7CisKKwlpeGdiZV9nZXRfc3dmd19zeW5jX3NlbWFwaG9yZShodyk7CisKKwlzd2Z3X3N5bmMgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfU1dGV19TWU5DKTsKKwlzd2Z3X3N5bmMgJj0gfnN3bWFzazsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1NXRldfU1lOQywgc3dmd19zeW5jKTsKKworCWl4Z2JlX3JlbGVhc2Vfc3dmd19zeW5jX3NlbWFwaG9yZShodyk7CisJbXNsZWVwKDUpOworfQorCisvKioKKyAqIGl4Z2JlX2dldF9udm1fc2VtYXBob3JlIC0gR2V0IGhhcmR3YXJlIHNlbWFwaG9yZQorICogQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICoKKyAqIFNldHMgdGhlIGhhcmR3YXJlIHNlbWFwaG9yZXMgc28gU1cvRlcgY2FuIGdhaW4gY29udHJvbCBvZiBzaGFyZWQgcmVzb3VyY2VzCisgKiovCitzdGF0aWMgczMyIGl4Z2JlX2dldF9zd2Z3X3N5bmNfc2VtYXBob3JlKHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJczMyIHN0YXR1cyA9IElYR0JFX0VSUl9FRVBST007CisJdTMyIHRpbWVvdXQgPSAyMDAwOworCXUzMiBpOworCXUzMiBzd3NtOworCisJLyogR2V0IFNNQkkgc29mdHdhcmUgc2VtYXBob3JlIGJldHdlZW4gZGV2aWNlIGRyaXZlcnMgZmlyc3QgKi8KKwlmb3IgKGkgPSAwOyBpIDwgdGltZW91dDsgaSsrKSB7CisJCS8qCisJCSAqIElmIHRoZSBTTUJJIGJpdCBpcyAwIHdoZW4gd2UgcmVhZCBpdCwgdGhlbiB0aGUgYml0IHdpbGwgYmUKKwkJICogc2V0IGFuZCB3ZSBoYXZlIHRoZSBzZW1hcGhvcmUKKwkJICovCisJCXN3c20gPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfU1dTTSk7CisJCWlmICghKHN3c20gJiBJWEdCRV9TV1NNX1NNQkkpKSB7CisJCQlzdGF0dXMgPSAwOworCQkJYnJlYWs7CisJCX0KKwkJdWRlbGF5KDUwKTsKKwl9CisKKwkvKiBOb3cgZ2V0IHRoZSBzZW1hcGhvcmUgYmV0d2VlbiBTVy9GVyB0aHJvdWdoIHRoZSBSRUdTTVAgYml0ICovCisJaWYgKHN0YXR1cykgeworCQlmb3IgKGkgPSAwOyBpIDwgdGltZW91dDsgaSsrKSB7CisJCQlzd3NtID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1NXRldfU1lOQyk7CisJCQlpZiAoIShzd3NtICYgSVhHQkVfU1dGV19SRUdTTVApKQorCQkJCWJyZWFrOworCisJCQl1ZGVsYXkoNTApOworCQl9CisJfSBlbHNlIHsKKwkJaHdfZGJnKGh3LCAiU29mdHdhcmUgc2VtYXBob3JlIFNNQkkgYmV0d2VlbiBkZXZpY2UgZHJpdmVycyAiCisJCSAgICAgICAgICAgIm5vdCBncmFudGVkLlxuIik7CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiBpeGdiZV9yZWxlYXNlX252bV9zZW1hcGhvcmUgLSBSZWxlYXNlIGhhcmR3YXJlIHNlbWFwaG9yZQorICogQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gY2xlYXJzIGhhcmR3YXJlIHNlbWFwaG9yZSBiaXRzLgorICoqLworc3RhdGljIHZvaWQgaXhnYmVfcmVsZWFzZV9zd2Z3X3N5bmNfc2VtYXBob3JlKHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJIHUzMiBzd3NtOworCisJLyogUmVsZWFzZSBib3RoIHNlbWFwaG9yZXMgYnkgd3JpdGluZyAwIHRvIHRoZSBiaXRzIFJFR1NNUCBhbmQgU01CSSAqLworCisJc3dzbSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9TV1NNKTsKKwlzd3NtICY9IH5JWEdCRV9TV1NNX1NNQkk7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9TV1NNLCBzd3NtKTsKKworCXN3c20gPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfU1dGV19TWU5DKTsKKwlzd3NtICY9IH5JWEdCRV9TV0ZXX1JFR1NNUDsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1NXRldfU1lOQywgc3dzbSk7CisKKwlJWEdCRV9XUklURV9GTFVTSChodyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXhnYmVfbWFjX29wZXJhdGlvbnMgbWFjX29wc19YNTQwID0geworCS5pbml0X2h3ICAgICAgICAgICAgICAgID0gJml4Z2JlX2luaXRfaHdfZ2VuZXJpYywKKwkucmVzZXRfaHcgICAgICAgICAgICAgICA9ICZpeGdiZV9yZXNldF9od19YNTQwLAorCS5zdGFydF9odyAgICAgICAgICAgICAgID0gJml4Z2JlX3N0YXJ0X2h3X2dlbmVyaWMsCisJLmNsZWFyX2h3X2NudHJzICAgICAgICAgPSAmaXhnYmVfY2xlYXJfaHdfY250cnNfZ2VuZXJpYywKKwkuZ2V0X21lZGlhX3R5cGUgICAgICAgICA9ICZpeGdiZV9nZXRfbWVkaWFfdHlwZV9YNTQwLAorCS5nZXRfc3VwcG9ydGVkX3BoeXNpY2FsX2xheWVyID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaXhnYmVfZ2V0X3N1cHBvcnRlZF9waHlzaWNhbF9sYXllcl9YNTQwLAorCS5lbmFibGVfcnhfZG1hICAgICAgICAgID0gJml4Z2JlX2VuYWJsZV9yeF9kbWFfZ2VuZXJpYywKKwkuZ2V0X21hY19hZGRyICAgICAgICAgICA9ICZpeGdiZV9nZXRfbWFjX2FkZHJfZ2VuZXJpYywKKwkuZ2V0X3Nhbl9tYWNfYWRkciAgICAgICA9ICZpeGdiZV9nZXRfc2FuX21hY19hZGRyX2dlbmVyaWMsCisJLmdldF9kZXZpY2VfY2FwcyAgICAgICAgPSBOVUxMLAorCS5nZXRfd3duX3ByZWZpeCAgICAgICAgID0gJml4Z2JlX2dldF93d25fcHJlZml4X2dlbmVyaWMsCisJLnN0b3BfYWRhcHRlciAgICAgICAgICAgPSAmaXhnYmVfc3RvcF9hZGFwdGVyX2dlbmVyaWMsCisJLmdldF9idXNfaW5mbyAgICAgICAgICAgPSAmaXhnYmVfZ2V0X2J1c19pbmZvX2dlbmVyaWMsCisJLnNldF9sYW5faWQgICAgICAgICAgICAgPSAmaXhnYmVfc2V0X2xhbl9pZF9tdWx0aV9wb3J0X3BjaWUsCisJLnJlYWRfYW5hbG9nX3JlZzggICAgICAgPSBOVUxMLAorCS53cml0ZV9hbmFsb2dfcmVnOCAgICAgID0gTlVMTCwKKwkuc2V0dXBfbGluayAgICAgICAgICAgICA9ICZpeGdiZV9zZXR1cF9tYWNfbGlua19YNTQwLAorCS5jaGVja19saW5rICAgICAgICAgICAgID0gJml4Z2JlX2NoZWNrX21hY19saW5rX2dlbmVyaWMsCisJLmdldF9saW5rX2NhcGFiaWxpdGllcyAgPSAmaXhnYmVfZ2V0X2NvcHBlcl9saW5rX2NhcGFiaWxpdGllc19nZW5lcmljLAorCS5sZWRfb24gICAgICAgICAgICAgICAgID0gJml4Z2JlX2xlZF9vbl9nZW5lcmljLAorCS5sZWRfb2ZmICAgICAgICAgICAgICAgID0gJml4Z2JlX2xlZF9vZmZfZ2VuZXJpYywKKwkuYmxpbmtfbGVkX3N0YXJ0ICAgICAgICA9ICZpeGdiZV9ibGlua19sZWRfc3RhcnRfZ2VuZXJpYywKKwkuYmxpbmtfbGVkX3N0b3AgICAgICAgICA9ICZpeGdiZV9ibGlua19sZWRfc3RvcF9nZW5lcmljLAorCS5zZXRfcmFyICAgICAgICAgICAgICAgID0gJml4Z2JlX3NldF9yYXJfZ2VuZXJpYywKKwkuY2xlYXJfcmFyICAgICAgICAgICAgICA9ICZpeGdiZV9jbGVhcl9yYXJfZ2VuZXJpYywKKwkuc2V0X3ZtZHEgICAgICAgICAgICAgICA9ICZpeGdiZV9zZXRfdm1kcV9nZW5lcmljLAorCS5jbGVhcl92bWRxICAgICAgICAgICAgID0gJml4Z2JlX2NsZWFyX3ZtZHFfZ2VuZXJpYywKKwkuaW5pdF9yeF9hZGRycyAgICAgICAgICA9ICZpeGdiZV9pbml0X3J4X2FkZHJzX2dlbmVyaWMsCisJLnVwZGF0ZV91Y19hZGRyX2xpc3QgICAgPSAmaXhnYmVfdXBkYXRlX3VjX2FkZHJfbGlzdF9nZW5lcmljLAorCS51cGRhdGVfbWNfYWRkcl9saXN0ICAgID0gJml4Z2JlX3VwZGF0ZV9tY19hZGRyX2xpc3RfZ2VuZXJpYywKKwkuZW5hYmxlX21jICAgICAgICAgICAgICA9ICZpeGdiZV9lbmFibGVfbWNfZ2VuZXJpYywKKwkuZGlzYWJsZV9tYyAgICAgICAgICAgICA9ICZpeGdiZV9kaXNhYmxlX21jX2dlbmVyaWMsCisJLmNsZWFyX3ZmdGEgICAgICAgICAgICAgPSAmaXhnYmVfY2xlYXJfdmZ0YV9nZW5lcmljLAorCS5zZXRfdmZ0YSAgICAgICAgICAgICAgID0gJml4Z2JlX3NldF92ZnRhX2dlbmVyaWMsCisJLmZjX2VuYWJsZSAgICAgICAgICAgICAgPSAmaXhnYmVfZmNfZW5hYmxlX2dlbmVyaWMsCisJLmluaXRfdXRhX3RhYmxlcyAgICAgICAgPSAmaXhnYmVfaW5pdF91dGFfdGFibGVzX2dlbmVyaWMsCisJLnNldHVwX3NmcCAgICAgICAgICAgICAgPSBOVUxMLAorCS5zZXRfbWFjX2FudGlfc3Bvb2ZpbmcgID0gJml4Z2JlX3NldF9tYWNfYW50aV9zcG9vZmluZywKKwkuc2V0X3ZsYW5fYW50aV9zcG9vZmluZyA9ICZpeGdiZV9zZXRfdmxhbl9hbnRpX3Nwb29maW5nLAorfTsKKworc3RhdGljIHN0cnVjdCBpeGdiZV9lZXByb21fb3BlcmF0aW9ucyBlZXByb21fb3BzX1g1NDAgPSB7CisJLmluaXRfcGFyYW1zICAgICAgICAgICAgPSAmaXhnYmVfaW5pdF9lZXByb21fcGFyYW1zX1g1NDAsCisJLnJlYWQgICAgICAgICAgICAgICAgICAgPSAmaXhnYmVfcmVhZF9lZXJkX1g1NDAsCisJLndyaXRlICAgICAgICAgICAgICAgICAgPSAmaXhnYmVfd3JpdGVfZWV3cl9YNTQwLAorCS5jYWxjX2NoZWNrc3VtCQk9ICZpeGdiZV9jYWxjX2VlcHJvbV9jaGVja3N1bV9YNTQwLAorCS52YWxpZGF0ZV9jaGVja3N1bSAgICAgID0gJml4Z2JlX3ZhbGlkYXRlX2VlcHJvbV9jaGVja3N1bV9nZW5lcmljLAorCS51cGRhdGVfY2hlY2tzdW0gICAgICAgID0gJml4Z2JlX3VwZGF0ZV9lZXByb21fY2hlY2tzdW1fWDU0MCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaXhnYmVfcGh5X29wZXJhdGlvbnMgcGh5X29wc19YNTQwID0geworCS5pZGVudGlmeSAgICAgICAgICAgICAgID0gJml4Z2JlX2lkZW50aWZ5X3BoeV9nZW5lcmljLAorCS5pZGVudGlmeV9zZnAgICAgICAgICAgID0gJml4Z2JlX2lkZW50aWZ5X3NmcF9tb2R1bGVfZ2VuZXJpYywKKwkuaW5pdAkJCT0gTlVMTCwKKwkucmVzZXQgICAgICAgICAgICAgICAgICA9ICZpeGdiZV9yZXNldF9waHlfZ2VuZXJpYywKKwkucmVhZF9yZWcgICAgICAgICAgICAgICA9ICZpeGdiZV9yZWFkX3BoeV9yZWdfZ2VuZXJpYywKKwkud3JpdGVfcmVnICAgICAgICAgICAgICA9ICZpeGdiZV93cml0ZV9waHlfcmVnX2dlbmVyaWMsCisJLnNldHVwX2xpbmsgICAgICAgICAgICAgPSAmaXhnYmVfc2V0dXBfcGh5X2xpbmtfZ2VuZXJpYywKKwkuc2V0dXBfbGlua19zcGVlZCAgICAgICA9ICZpeGdiZV9zZXR1cF9waHlfbGlua19zcGVlZF9nZW5lcmljLAorCS5yZWFkX2kyY19ieXRlICAgICAgICAgID0gJml4Z2JlX3JlYWRfaTJjX2J5dGVfZ2VuZXJpYywKKwkud3JpdGVfaTJjX2J5dGUgICAgICAgICA9ICZpeGdiZV93cml0ZV9pMmNfYnl0ZV9nZW5lcmljLAorCS5yZWFkX2kyY19lZXByb20gICAgICAgID0gJml4Z2JlX3JlYWRfaTJjX2VlcHJvbV9nZW5lcmljLAorCS53cml0ZV9pMmNfZWVwcm9tICAgICAgID0gJml4Z2JlX3dyaXRlX2kyY19lZXByb21fZ2VuZXJpYywKKwkuY2hlY2tfb3ZlcnRlbXAgICAgICAgICA9ICZpeGdiZV90bl9jaGVja19vdmVydGVtcCwKK307CisKK3N0cnVjdCBpeGdiZV9pbmZvIGl4Z2JlX1g1NDBfaW5mbyA9IHsKKwkubWFjICAgICAgICAgICAgICAgICAgICA9IGl4Z2JlX21hY19YNTQwLAorCS5nZXRfaW52YXJpYW50cyAgICAgICAgID0gJml4Z2JlX2dldF9pbnZhcmlhbnRzX1g1NDAsCisJLm1hY19vcHMgICAgICAgICAgICAgICAgPSAmbWFjX29wc19YNTQwLAorCS5lZXByb21fb3BzICAgICAgICAgICAgID0gJmVlcHJvbV9vcHNfWDU0MCwKKwkucGh5X29wcyAgICAgICAgICAgICAgICA9ICZwaHlfb3BzX1g1NDAsCisJLm1ieF9vcHMgICAgICAgICAgICAgICAgPSAmbWJ4X29wc19nZW5lcmljLAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JldmYvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9peGdiZXZmL01ha2VmaWxlCmluZGV4IGRkNGUwZDIuLjFmMzVkMjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JldmYvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvaXhnYmV2Zi9NYWtlZmlsZQpAQCAtMSw3ICsxLDcgQEAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjCiAjIEludGVsIDgyNTk5IFZpcnR1YWwgRnVuY3Rpb24gZHJpdmVyCi0jIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KKyMgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLgogIwogIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogIyB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmV2Zi9kZWZpbmVzLmggYi9kcml2ZXJzL25ldC9peGdiZXZmL2RlZmluZXMuaAppbmRleCBjYTJjODFmLi5kZTY0M2ViIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZXZmL2RlZmluZXMuaAorKysgYi9kcml2ZXJzL25ldC9peGdiZXZmL2RlZmluZXMuaApAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKICAgSW50ZWwgODI1OTkgVmlydHVhbCBGdW5jdGlvbiBkcml2ZXIKLSAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uCiAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKQEAgLTMwLDYgKzMwLDcgQEAKIAogLyogRGV2aWNlIElEcyAqLwogI2RlZmluZSBJWEdCRV9ERVZfSURfODI1OTlfVkYgICAgICAgICAgIDB4MTBFRAorI2RlZmluZSBJWEdCRV9ERVZfSURfWDU0MF9WRiAgICAgICAgICAgIDB4MTUxNQogCiAjZGVmaW5lIElYR0JFX1ZGX0lSUV9DTEVBUl9NQVNLICAgICAgICAgNwogI2RlZmluZSBJWEdCRV9WRl9NQVhfVFhfUVVFVUVTICAgICAgICAgIDEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JldmYvZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvaXhnYmV2Zi9ldGh0b29sLmMKaW5kZXggNGNjODE3YS4uZmEyOWIzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmV2Zi9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvaXhnYmV2Zi9ldGh0b29sLmMKQEAgLTU0NCw3ICs1NDQsNyBAQAogI2RlZmluZSBUQUJMRTY0X1RFU1RfSEkJNgogCiAvKiBkZWZhdWx0IFZGIHJlZ2lzdGVyIHRlc3QgKi8KLXN0YXRpYyBzdHJ1Y3QgaXhnYmV2Zl9yZWdfdGVzdCByZWdfdGVzdF92ZltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpeGdiZXZmX3JlZ190ZXN0IHJlZ190ZXN0X3ZmW10gPSB7CiAJeyBJWEdCRV9WRlJEQkFMKDApLCAyLCBQQVRURVJOX1RFU1QsIDB4RkZGRkZGODAsIDB4RkZGRkZGODAgfSwKIAl7IElYR0JFX1ZGUkRCQUgoMCksIDIsIFBBVFRFUk5fVEVTVCwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiB9LAogCXsgSVhHQkVfVkZSRExFTigwKSwgMiwgUEFUVEVSTl9URVNULCAweDAwMEZGRjgwLCAweDAwMEZGRkZGIH0sCkBAIC01NTcsMTkgKzU1NywyMyBAQAogCXsgMCwgMCwgMCwgMCB9CiB9OwogCitzdGF0aWMgY29uc3QgdTMyIHJlZ2lzdGVyX3Rlc3RfcGF0dGVybnNbXSA9IHsKKwkweDVBNUE1QTVBLCAweEE1QTVBNUE1LCAweDAwMDAwMDAwLCAweEZGRkZGRkZGCit9OworCiAjZGVmaW5lIFJFR19QQVRURVJOX1RFU1QoUiwgTSwgVykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAJdTMyIHBhdCwgdmFsLCBiZWZvcmU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQljb25zdCB1MzIgX3Rlc3RbXSA9IHsweDVBNUE1QTVBLCAweEE1QTVBNUE1LCAweDAwMDAwMDAwLCAweEZGRkZGRkZGfTsgXAotCWZvciAocGF0ID0gMDsgcGF0IDwgQVJSQVlfU0laRShfdGVzdCk7IHBhdCsrKSB7ICAgICAgICAgICAgICAgICAgICAgICBcCisJZm9yIChwYXQgPSAwOyBwYXQgPCBBUlJBWV9TSVpFKHJlZ2lzdGVyX3Rlc3RfcGF0dGVybnMpOyBwYXQrKykgeyAgICAgIFwKIAkJYmVmb3JlID0gcmVhZGwoYWRhcHRlci0+aHcuaHdfYWRkciArIFIpOyAgICAgICAgICAgICAgICAgICAgICBcCi0JCXdyaXRlbCgoX3Rlc3RbcGF0XSAmIFcpLCAoYWRhcHRlci0+aHcuaHdfYWRkciArIFIpKTsgICAgICAgICAgXAorCQl3cml0ZWwoKHJlZ2lzdGVyX3Rlc3RfcGF0dGVybnNbcGF0XSAmIFcpLCAgICAgICAgICAgICAgICAgICAgIFwKKwkJICAgICAgIChhZGFwdGVyLT5ody5od19hZGRyICsgUikpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAJCXZhbCA9IHJlYWRsKGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyBSKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQlpZiAodmFsICE9IChfdGVzdFtwYXRdICYgVyAmIE0pKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJaWYgKHZhbCAhPSAocmVnaXN0ZXJfdGVzdF9wYXR0ZXJuc1twYXRdICYgVyAmIE0pKSB7ICAgICAgICAgICBcCiAJCQlod19kYmcoJmFkYXB0ZXItPmh3LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAJCQkicGF0dGVybiB0ZXN0IHJlZyAlMDRYIGZhaWxlZDogZ290ICIgICAgICAgICAgICAgICAgICBcCiAJCQkiMHglMDhYIGV4cGVjdGVkIDB4JTA4WFxuIiwgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCQlSLCB2YWwsIChfdGVzdFtwYXRdICYgVyAmIE0pKTsgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQlSLCB2YWwsIChyZWdpc3Rlcl90ZXN0X3BhdHRlcm5zW3BhdF0gJiBXICYgTSkpOyAgICAgICBcCiAJCQkqZGF0YSA9IFI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAJCQl3cml0ZWwoYmVmb3JlLCBhZGFwdGVyLT5ody5od19hZGRyICsgUik7ICAgICAgICAgICAgICBcCiAJCQlyZXR1cm4gMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC01OTYsNyArNjAwLDcgQEAKIAogc3RhdGljIGludCBpeGdiZXZmX3JlZ190ZXN0KHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIsIHU2NCAqZGF0YSkKIHsKLQlzdHJ1Y3QgaXhnYmV2Zl9yZWdfdGVzdCAqdGVzdDsKKwljb25zdCBzdHJ1Y3QgaXhnYmV2Zl9yZWdfdGVzdCAqdGVzdDsKIAl1MzIgaTsKIAogCXRlc3QgPSByZWdfdGVzdF92ZjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JldmYvaXhnYmV2Zi5oIGIvZHJpdmVycy9uZXQvaXhnYmV2Zi9peGdiZXZmLmgKaW5kZXggZGE0MDMzYy4uYTYzZWZjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmV2Zi9peGdiZXZmLmgKKysrIGIvZHJpdmVycy9uZXQvaXhnYmV2Zi9peGdiZXZmLmgKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAgIEludGVsIDgyNTk5IFZpcnR1YWwgRnVuY3Rpb24gZHJpdmVyCi0gIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLgogCiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCkBAIC0yNzUsOSArMjc1LDExIEBACiAKIGVudW0gaXhnYmV2Zl9ib2FyZHMgewogCWJvYXJkXzgyNTk5X3ZmLAorCWJvYXJkX1g1NDBfdmYsCiB9OwogCi1leHRlcm4gc3RydWN0IGl4Z2JldmZfaW5mbyBpeGdiZXZmX3ZmX2luZm87CitleHRlcm4gc3RydWN0IGl4Z2JldmZfaW5mbyBpeGdiZXZmXzgyNTk5X3ZmX2luZm87CitleHRlcm4gc3RydWN0IGl4Z2JldmZfaW5mbyBpeGdiZXZmX1g1NDBfdmZfaW5mbzsKIGV4dGVybiBzdHJ1Y3QgaXhnYmVfbWFjX29wZXJhdGlvbnMgaXhnYmV2Zl9tYnhfb3BzOwogCiAvKiBuZWVkZWQgYnkgZXRodG9vbC5jICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jIGIvZHJpdmVycy9uZXQvaXhnYmV2Zi9peGdiZXZmX21haW4uYwppbmRleCBkYzAzYzk2Li40NjRlNmM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JldmYvaXhnYmV2Zl9tYWluLmMKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAgIEludGVsIDgyNTk5IFZpcnR1YWwgRnVuY3Rpb24gZHJpdmVyCi0gIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLgogCiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCkBAIC01MSwxMiArNTEsMTQgQEAKIHN0YXRpYyBjb25zdCBjaGFyIGl4Z2JldmZfZHJpdmVyX3N0cmluZ1tdID0KIAkiSW50ZWwoUikgODI1OTkgVmlydHVhbCBGdW5jdGlvbiI7CiAKLSNkZWZpbmUgRFJWX1ZFUlNJT04gIjEuMC4wLWswIgorI2RlZmluZSBEUlZfVkVSU0lPTiAiMS4wLjE5LWswIgogY29uc3QgY2hhciBpeGdiZXZmX2RyaXZlcl92ZXJzaW9uW10gPSBEUlZfVkVSU0lPTjsKLXN0YXRpYyBjaGFyIGl4Z2JldmZfY29weXJpZ2h0W10gPSAiQ29weXJpZ2h0IChjKSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiI7CitzdGF0aWMgY2hhciBpeGdiZXZmX2NvcHlyaWdodFtdID0KKwkiQ29weXJpZ2h0IChjKSAyMDA5IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4iOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGl4Z2JldmZfaW5mbyAqaXhnYmV2Zl9pbmZvX3RibFtdID0gewotCVtib2FyZF84MjU5OV92Zl0gPSAmaXhnYmV2Zl92Zl9pbmZvLAorCVtib2FyZF84MjU5OV92Zl0gPSAmaXhnYmV2Zl84MjU5OV92Zl9pbmZvLAorCVtib2FyZF9YNTQwX3ZmXSAgPSAmaXhnYmV2Zl9YNTQwX3ZmX2luZm8sCiB9OwogCiAvKiBpeGdiZXZmX3BjaV90YmwgLSBQQ0kgRGV2aWNlIElEIFRhYmxlCkBAIC03MCw2ICs3Miw4IEBACiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgaXhnYmV2Zl9wY2lfdGJsW10gPSB7CiAJe1BDSV9WREVWSUNFKElOVEVMLCBJWEdCRV9ERVZfSURfODI1OTlfVkYpLAogCWJvYXJkXzgyNTk5X3ZmfSwKKwl7UENJX1ZERVZJQ0UoSU5URUwsIElYR0JFX0RFVl9JRF9YNTQwX1ZGKSwKKwlib2FyZF9YNTQwX3ZmfSwKIAogCS8qIHJlcXVpcmVkIGxhc3QgZW50cnkgKi8KIAl7MCwgfQpAQCAtMjQ4OCwxMCArMjQ5Miw5IEBACiAJaW50IHNpemU7CiAKIAlzaXplID0gc2l6ZW9mKHN0cnVjdCBpeGdiZXZmX3R4X2J1ZmZlcikgKiB0eF9yaW5nLT5jb3VudDsKLQl0eF9yaW5nLT50eF9idWZmZXJfaW5mbyA9IHZtYWxsb2Moc2l6ZSk7CisJdHhfcmluZy0+dHhfYnVmZmVyX2luZm8gPSB2emFsbG9jKHNpemUpOwogCWlmICghdHhfcmluZy0+dHhfYnVmZmVyX2luZm8pCiAJCWdvdG8gZXJyOwotCW1lbXNldCh0eF9yaW5nLT50eF9idWZmZXJfaW5mbywgMCwgc2l6ZSk7CiAKIAkvKiByb3VuZCB1cCB0byBuZWFyZXN0IDRLICovCiAJdHhfcmluZy0+c2l6ZSA9IHR4X3JpbmctPmNvdW50ICogc2l6ZW9mKHVuaW9uIGl4Z2JlX2Fkdl90eF9kZXNjKTsKQEAgLTI1NTUsMTQgKzI1NTgsMTMgQEAKIAlpbnQgc2l6ZTsKIAogCXNpemUgPSBzaXplb2Yoc3RydWN0IGl4Z2JldmZfcnhfYnVmZmVyKSAqIHJ4X3JpbmctPmNvdW50OwotCXJ4X3JpbmctPnJ4X2J1ZmZlcl9pbmZvID0gdm1hbGxvYyhzaXplKTsKKwlyeF9yaW5nLT5yeF9idWZmZXJfaW5mbyA9IHZ6YWxsb2Moc2l6ZSk7CiAJaWYgKCFyeF9yaW5nLT5yeF9idWZmZXJfaW5mbykgewogCQlod19kYmcoJmFkYXB0ZXItPmh3LAogCQkgICAgICAgIlVuYWJsZSB0byB2bWFsbG9jIGJ1ZmZlciBtZW1vcnkgZm9yICIKIAkJICAgICAgICJ0aGUgcmVjZWl2ZSBkZXNjcmlwdG9yIHJpbmdcbiIpOwogCQlnb3RvIGFsbG9jX2ZhaWxlZDsKIAl9Ci0JbWVtc2V0KHJ4X3JpbmctPnJ4X2J1ZmZlcl9pbmZvLCAwLCBzaXplKTsKIAogCS8qIFJvdW5kIHVwIHRvIG5lYXJlc3QgNEsgKi8KIAlyeF9yaW5nLT5zaXplID0gcnhfcmluZy0+Y291bnQgKiBzaXplb2YodW5pb24gaXhnYmVfYWR2X3J4X2Rlc2MpOwpAQCAtMzQyNCwxMCArMzQyNiw2IEBACiAJaWYgKGh3LT5tYWMub3BzLmdldF9idXNfaW5mbykKIAkJaHctPm1hYy5vcHMuZ2V0X2J1c19pbmZvKGh3KTsKIAotCi0JbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKLQluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTsKLQogCXN0cmNweShuZXRkZXYtPm5hbWUsICJldGglZCIpOwogCiAJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KG5ldGRldik7CkBAIC0zNDM2LDYgKzM0MzQsOCBAQAogCiAJYWRhcHRlci0+bmV0ZGV2X3JlZ2lzdGVyZWQgPSB0cnVlOwogCisJbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKKwogCWl4Z2JldmZfaW5pdF9sYXN0X2NvdW50ZXJfc3RhdHMoYWRhcHRlcik7CiAKIAkvKiBwcmludCB0aGUgTUFDIGFkZHJlc3MgKi8KQEAgLTM0ODcsMTAgKzM0ODcsOSBAQAogCiAJZGVsX3RpbWVyX3N5bmMoJmFkYXB0ZXItPndhdGNoZG9nX3RpbWVyKTsKIAorCWNhbmNlbF93b3JrX3N5bmMoJmFkYXB0ZXItPnJlc2V0X3Rhc2spOwogCWNhbmNlbF93b3JrX3N5bmMoJmFkYXB0ZXItPndhdGNoZG9nX3Rhc2spOwogCi0JZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKLQogCWlmIChhZGFwdGVyLT5uZXRkZXZfcmVnaXN0ZXJlZCkgewogCQl1bnJlZ2lzdGVyX25ldGRldihuZXRkZXYpOwogCQlhZGFwdGVyLT5uZXRkZXZfcmVnaXN0ZXJlZCA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmV2Zi9tYnguYyBiL2RyaXZlcnMvbmV0L2l4Z2JldmYvbWJ4LmMKaW5kZXggODRhYzQ4Ni4uN2E4ODMzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmV2Zi9tYnguYworKysgYi9kcml2ZXJzL25ldC9peGdiZXZmL21ieC5jCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICBJbnRlbCA4MjU5OSBWaXJ0dWFsIEZ1bmN0aW9uIGRyaXZlcgotICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCisgIENvcHlyaWdodChjKSAxOTk5IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmV2Zi9tYnguaCBiL2RyaXZlcnMvbmV0L2l4Z2JldmYvbWJ4LmgKaW5kZXggOGMwNjNiZS4uYjJiNWJmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmV2Zi9tYnguaAorKysgYi9kcml2ZXJzL25ldC9peGdiZXZmL21ieC5oCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICBJbnRlbCA4MjU5OSBWaXJ0dWFsIEZ1bmN0aW9uIGRyaXZlcgotICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCisgIENvcHlyaWdodChjKSAxOTk5IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmV2Zi9yZWdzLmggYi9kcml2ZXJzL25ldC9peGdiZXZmL3JlZ3MuaAppbmRleCAxMmY3NTk2Li5mYjgwY2ExIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZXZmL3JlZ3MuaAorKysgYi9kcml2ZXJzL25ldC9peGdiZXZmL3JlZ3MuaApAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKICAgSW50ZWwgODI1OTkgVmlydHVhbCBGdW5jdGlvbiBkcml2ZXIKLSAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uCiAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JldmYvdmYuYyBiL2RyaXZlcnMvbmV0L2l4Z2JldmYvdmYuYwppbmRleCBiZmU0MmMxLi5lZWNkM2JmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZXZmL3ZmLmMKKysrIGIvZHJpdmVycy9uZXQvaXhnYmV2Zi92Zi5jCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICBJbnRlbCA4MjU5OSBWaXJ0dWFsIEZ1bmN0aW9uIGRyaXZlcgotICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCisgIENvcHlyaWdodChjKSAxOTk5IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApAQCAtMzgxLDggKzM4MSwxMiBAQAogCS5zZXRfdmZ0YSAgICAgICAgICAgID0gaXhnYmV2Zl9zZXRfdmZ0YV92ZiwKIH07CiAKLXN0cnVjdCBpeGdiZXZmX2luZm8gaXhnYmV2Zl92Zl9pbmZvID0geworc3RydWN0IGl4Z2JldmZfaW5mbyBpeGdiZXZmXzgyNTk5X3ZmX2luZm8gPSB7CiAJLm1hYyA9IGl4Z2JlX21hY184MjU5OV92ZiwKIAkubWFjX29wcyA9ICZpeGdiZXZmX21hY19vcHMsCiB9OwogCitzdHJ1Y3QgaXhnYmV2Zl9pbmZvIGl4Z2JldmZfWDU0MF92Zl9pbmZvID0geworCS5tYWMgPSBpeGdiZV9tYWNfWDU0MF92ZiwKKwkubWFjX29wcyA9ICZpeGdiZXZmX21hY19vcHMsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmV2Zi92Zi5oIGIvZHJpdmVycy9uZXQvaXhnYmV2Zi92Zi5oCmluZGV4IDYxZjlkYzguLjIzZWIxMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JldmYvdmYuaAorKysgYi9kcml2ZXJzL25ldC9peGdiZXZmL3ZmLmgKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAgIEludGVsIDgyNTk5IFZpcnR1YWwgRnVuY3Rpb24gZHJpdmVyCi0gIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLgogCiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCkBAIC03Myw2ICs3Myw3IEBACiBlbnVtIGl4Z2JlX21hY190eXBlIHsKIAlpeGdiZV9tYWNfdW5rbm93biA9IDAsCiAJaXhnYmVfbWFjXzgyNTk5X3ZmLAorCWl4Z2JlX21hY19YNTQwX3ZmLAogCWl4Z2JlX251bV9tYWNzCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9qbWUuYyBiL2RyaXZlcnMvbmV0L2ptZS5jCmluZGV4IGM1N2Q5YTQuLmU5N2ViZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ptZS5jCisrKyBiL2RyaXZlcnMvbmV0L2ptZS5jCkBAIC0xMzUsNyArMTM1LDcgQEAKIAogc3RhdGljIHZvaWQKIGptZV9zZXR1cF93YWtldXBfZnJhbWUoc3RydWN0IGptZV9hZGFwdGVyICpqbWUsCi0JCXUzMiAqbWFzaywgdTMyIGNyYywgaW50IGZucikKKwkJICAgICAgIGNvbnN0IHUzMiAqbWFzaywgdTMyIGNyYywgaW50IGZucikKIHsKIAlpbnQgaTsKIApAQCAtMTYzLDcgKzE2Myw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQKIGptZV9yZXNldF9tYWNfcHJvY2Vzc29yKHN0cnVjdCBqbWVfYWRhcHRlciAqam1lKQogewotCXUzMiBtYXNrW1dBS0VVUF9GUkFNRV9NQVNLX0RXTlJdID0gezAsIDAsIDAsIDB9OworCXN0YXRpYyBjb25zdCB1MzIgbWFza1tXQUtFVVBfRlJBTUVfTUFTS19EV05SXSA9IHswLCAwLCAwLCAwfTsKIAl1MzIgY3JjID0gMHhDRENEQ0RDRDsKIAl1MzIgZ3ByZWcwOwogCWludCBpOwpAQCAtMjA3NiwxMiArMjA3NiwxMSBAQAogCX0KIAogCWlmIChuZXdfbXR1ID4gMTkwMCkgewotCQluZXRkZXYtPmZlYXR1cmVzICY9IH4oTkVUSUZfRl9IV19DU1VNIHwKLQkJCQlORVRJRl9GX1RTTyB8Ci0JCQkJTkVUSUZfRl9UU082KTsKKwkJbmV0ZGV2LT5mZWF0dXJlcyAmPSB+KE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfSVBWNl9DU1VNIHwKKwkJCQlORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPNik7CiAJfSBlbHNlIHsKIAkJaWYgKHRlc3RfYml0KEpNRV9GTEFHX1RYQ1NVTSwgJmptZS0+ZmxhZ3MpKQotCQkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hXX0NTVU07CisJCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfSVBWNl9DU1VNOwogCQlpZiAodGVzdF9iaXQoSk1FX0ZMQUdfVFNPLCAmam1lLT5mbGFncykpCiAJCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU082OwogCX0KQEAgLTI1MTQsMTAgKzI1MTMsMTIgQEAKIAlpZiAob24pIHsKIAkJc2V0X2JpdChKTUVfRkxBR19UWENTVU0sICZqbWUtPmZsYWdzKTsKIAkJaWYgKG5ldGRldi0+bXR1IDw9IDE5MDApCi0JCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfQ1NVTTsKKwkJCW5ldGRldi0+ZmVhdHVyZXMgfD0KKwkJCQlORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX0lQVjZfQ1NVTTsKIAl9IGVsc2UgewogCQljbGVhcl9iaXQoSk1FX0ZMQUdfVFhDU1VNLCAmam1lLT5mbGFncyk7Ci0JCW5ldGRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfSFdfQ1NVTTsKKwkJbmV0ZGV2LT5mZWF0dXJlcyAmPQorCQkJCX4oTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9JUFY2X0NTVU0pOwogCX0KIAogCXJldHVybiAwOwpAQCAtMjc5Nyw3ICsyNzk4LDggQEAKIAluZXRkZXYtPm5ldGRldl9vcHMgPSAmam1lX25ldGRldl9vcHM7CiAJbmV0ZGV2LT5ldGh0b29sX29wcwkJPSAmam1lX2V0aHRvb2xfb3BzOwogCW5ldGRldi0+d2F0Y2hkb2dfdGltZW8JCT0gVFhfVElNRU9VVDsKLQluZXRkZXYtPmZlYXR1cmVzCQk9CU5FVElGX0ZfSFdfQ1NVTSB8CisJbmV0ZGV2LT5mZWF0dXJlcwkJPQlORVRJRl9GX0lQX0NTVU0gfAorCQkJCQkJTkVUSUZfRl9JUFY2X0NTVU0gfAogCQkJCQkJTkVUSUZfRl9TRyB8CiAJCQkJCQlORVRJRl9GX1RTTyB8CiAJCQkJCQlORVRJRl9GX1RTTzYgfApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQva3M4ODUxLmMgYi9kcml2ZXJzL25ldC9rczg4NTEuYwppbmRleCA1MTkxOWZjLi4wZmE0YTk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9rczg4NTEuYworKysgYi9kcml2ZXJzL25ldC9rczg4NTEuYwpAQCAtMTU0NSw2ICsxNTQ1LDM3IEBACiAKIC8qIGRyaXZlciBidXMgbWFuYWdlbWVudCBmdW5jdGlvbnMgKi8KIAorI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBrczg4NTFfc3VzcGVuZChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IGtzODg1MV9uZXQgKmtzID0gZGV2X2dldF9kcnZkYXRhKCZzcGktPmRldik7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGtzLT5uZXRkZXY7CisKKwlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CisJCW5ldGlmX2RldmljZV9kZXRhY2goZGV2KTsKKwkJa3M4ODUxX25ldF9zdG9wKGRldik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQga3M4ODUxX3Jlc3VtZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBrczg4NTFfbmV0ICprcyA9IGRldl9nZXRfZHJ2ZGF0YSgmc3BpLT5kZXYpOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBrcy0+bmV0ZGV2OworCisJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgeworCQlrczg4NTFfbmV0X29wZW4oZGV2KTsKKwkJbmV0aWZfZGV2aWNlX2F0dGFjaChkZXYpOworCX0KKworCXJldHVybiAwOworfQorI2Vsc2UKKyNkZWZpbmUga3M4ODUxX3N1c3BlbmQgTlVMTAorI2RlZmluZSBrczg4NTFfcmVzdW1lIE5VTEwKKyNlbmRpZgorCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBrczg4NTFfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjsKQEAgLTE2NzksNiArMTcxMCw4IEBACiAJfSwKIAkucHJvYmUgPSBrczg4NTFfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKGtzODg1MV9yZW1vdmUpLAorCS5zdXNwZW5kID0ga3M4ODUxX3N1c3BlbmQsCisJLnJlc3VtZSA9IGtzODg1MV9yZXN1bWUsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBrczg4NTFfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQva3N6ODg0eC5jIGIvZHJpdmVycy9uZXQva3N6ODg0eC5jCmluZGV4IDM3NTA0YTM5Li41NDBhOGRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9rc3o4ODR4LmMKKysrIGIvZHJpdmVycy9uZXQva3N6ODg0eC5jCkBAIC0zNTcwLDcgKzM1NzAsNyBAQAogICogVGhpcyByb3V0aW5lIGlzIHVzZWQgdG8gcHJvZ3JhbSBXYWtlLW9uLUxBTiBwYXR0ZXJuLgogICovCiBzdGF0aWMgdm9pZCBod19zZXRfd29sX2ZyYW1lKHN0cnVjdCBrc3pfaHcgKmh3LCBpbnQgaSwgdWludCBtYXNrX3NpemUsCi0JdTggKm1hc2ssIHVpbnQgZnJhbWVfc2l6ZSwgdTggKnBhdHRlcm4pCisJY29uc3QgdTggKm1hc2ssIHVpbnQgZnJhbWVfc2l6ZSwgY29uc3QgdTggKnBhdHRlcm4pCiB7CiAJaW50IGJpdHM7CiAJaW50IGZyb207CkBAIC0zNjI2LDkgKzM2MjYsOSBAQAogICoKICAqIFRoaXMgcm91dGluZSBpcyB1c2VkIHRvIGFkZCBBUlAgcGF0dGVybiBmb3Igd2FraW5nIHVwIHRoZSBob3N0LgogICovCi1zdGF0aWMgdm9pZCBod19hZGRfd29sX2FycChzdHJ1Y3Qga3N6X2h3ICpodywgdTggKmlwX2FkZHIpCitzdGF0aWMgdm9pZCBod19hZGRfd29sX2FycChzdHJ1Y3Qga3N6X2h3ICpodywgY29uc3QgdTggKmlwX2FkZHIpCiB7Ci0JdTggbWFza1s2XSA9IHsgMHgzRiwgMHhGMCwgMHgzRiwgMHgwMCwgMHhDMCwgMHgwMyB9OworCXN0YXRpYyBjb25zdCB1OCBtYXNrWzZdID0geyAweDNGLCAweEYwLCAweDNGLCAweDAwLCAweEMwLCAweDAzIH07CiAJdTggcGF0dGVybls0Ml0gPSB7CiAJCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCiAJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCkBAIC0zNjUxLDggKzM2NTEsOCBAQAogICovCiBzdGF0aWMgdm9pZCBod19hZGRfd29sX2JjYXN0KHN0cnVjdCBrc3pfaHcgKmh3KQogewotCXU4IG1hc2tbXSA9IHsgMHgzRiB9OwotCXU4IHBhdHRlcm5bXSA9IHsgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiB9OworCXN0YXRpYyBjb25zdCB1OCBtYXNrW10gPSB7IDB4M0YgfTsKKwlzdGF0aWMgY29uc3QgdTggcGF0dGVybltdID0geyAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGIH07CiAKIAlod19zZXRfd29sX2ZyYW1lKGh3LCAyLCAxLCBtYXNrLCBNQUNfQUREUl9MRU4sIHBhdHRlcm4pOwogfQpAQCAtMzY2OSw3ICszNjY5LDcgQEAKICAqLwogc3RhdGljIHZvaWQgaHdfYWRkX3dvbF9tY2FzdChzdHJ1Y3Qga3N6X2h3ICpodykKIHsKLQl1OCBtYXNrW10gPSB7IDB4M0YgfTsKKwlzdGF0aWMgY29uc3QgdTggbWFza1tdID0geyAweDNGIH07CiAJdTggcGF0dGVybltdID0geyAweDMzLCAweDMzLCAweEZGLCAweDAwLCAweDAwLCAweDAwIH07CiAKIAltZW1jcHkoJnBhdHRlcm5bM10sICZody0+b3ZlcnJpZGVfYWRkclszXSwgMyk7CkBAIC0zNjg3LDcgKzM2ODcsNyBAQAogICovCiBzdGF0aWMgdm9pZCBod19hZGRfd29sX3VjYXN0KHN0cnVjdCBrc3pfaHcgKmh3KQogewotCXU4IG1hc2tbXSA9IHsgMHgzRiB9OworCXN0YXRpYyBjb25zdCB1OCBtYXNrW10gPSB7IDB4M0YgfTsKIAogCWh3X3NldF93b2xfZnJhbWUoaHcsIDAsIDEsIG1hc2ssIE1BQ19BRERSX0xFTiwgaHctPm92ZXJyaWRlX2FkZHIpOwogfQpAQCAtMzcwMCw3ICszNzAwLDcgQEAKICAqCiAgKiBUaGlzIHJvdXRpbmUgaXMgdXNlZCB0byBlbmFibGUgV2FrZS1vbi1MQU4gZGVwZW5kaW5nIG9uIGRyaXZlciBzZXR0aW5ncy4KICAqLwotc3RhdGljIHZvaWQgaHdfZW5hYmxlX3dvbChzdHJ1Y3Qga3N6X2h3ICpodywgdTMyIHdvbF9lbmFibGUsIHU4ICpuZXRfYWRkcikKK3N0YXRpYyB2b2lkIGh3X2VuYWJsZV93b2woc3RydWN0IGtzel9odyAqaHcsIHUzMiB3b2xfZW5hYmxlLCBjb25zdCB1OCAqbmV0X2FkZHIpCiB7CiAJaHdfY2ZnX3dvbChodywgS1M4ODQxX1dPTF9NQUdJQ19FTkFCTEUsICh3b2xfZW5hYmxlICYgV0FLRV9NQUdJQykpOwogCWh3X2NmZ193b2woaHcsIEtTODg0MV9XT0xfRlJBTUUwX0VOQUJMRSwgKHdvbF9lbmFibGUgJiBXQUtFX1VDQVNUKSk7CkBAIC02MjA4LDcgKzYyMDgsNyBAQAogCXN0cnVjdCBkZXZfaW5mbyAqaHdfcHJpdiA9IHByaXYtPmFkYXB0ZXI7CiAKIAkvKiBOZWVkIHRvIGZpbmQgYSB3YXkgdG8gcmV0cmlldmUgdGhlIGRldmljZSBJUCBhZGRyZXNzLiAqLwotCXU4IG5ldF9hZGRyW10gPSB7IDE5MiwgMTY4LCAxLCAxIH07CisJc3RhdGljIGNvbnN0IHU4IG5ldF9hZGRyW10gPSB7IDE5MiwgMTY4LCAxLCAxIH07CiAKIAlpZiAod29sLT53b2xvcHRzICYgfmh3X3ByaXYtPndvbF9zdXBwb3J0KQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTY5NTMsNyArNjk1Myw3IEBACiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfTUlDUkVMX0tTCQkweDE2YzYKICNlbmRpZgogCi1zdGF0aWMgaW50IF9faW5pdCBwY2lkZXZfaW5pdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwKK3N0YXRpYyBpbnQgX19kZXZpbml0IHBjaWRldl9pbml0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwpAQCAtNzI0MSw3ICs3MjQxLDcgQEAKIAlzdHJ1Y3Qga3N6X2h3ICpodyA9ICZod19wcml2LT5odzsKIAogCS8qIE5lZWQgdG8gZmluZCBhIHdheSB0byByZXRyaWV2ZSB0aGUgZGV2aWNlIElQIGFkZHJlc3MuICovCi0JdTggbmV0X2FkZHJbXSA9IHsgMTkyLCAxNjgsIDEsIDEgfTsKKwlzdGF0aWMgY29uc3QgdTggbmV0X2FkZHJbXSA9IHsgMTkyLCAxNjgsIDEsIDEgfTsKIAogCWZvciAoaSA9IDA7IGkgPCBody0+ZGV2X2NvdW50OyBpKyspIHsKIAkJaWYgKGluZm8tPm5ldGRldltpXSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbGFuY2UuYyBiL2RyaXZlcnMvbmV0L2xhbmNlLmMKaW5kZXggZjA2Mjk2Yi4uMDIzMzZlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbGFuY2UuYworKysgYi9kcml2ZXJzL25ldC9sYW5jZS5jCkBAIC0yMDcsNyArMjA3LDcgQEAKICNkZWZpbmUgTEFOQ0VfQlVTX0lGIDB4MTYKICNkZWZpbmUgTEFOQ0VfVE9UQUxfU0laRSAweDE4CiAKLSNkZWZpbmUgVFhfVElNRU9VVAkyMAorI2RlZmluZSBUWF9USU1FT1VUCShIWi81KQogCiAvKiBUaGUgTEFOQ0UgUnggYW5kIFR4IHJpbmcgZGVzY3JpcHRvcnMuICovCiBzdHJ1Y3QgbGFuY2VfcnhfaGVhZCB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9saWI4MjU5Ni5jIGIvZHJpdmVycy9uZXQvbGliODI1OTYuYwppbmRleCBjMjdmNDI5Li45ZTA0Mjg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9saWI4MjU5Ni5jCisrKyBiL2RyaXZlcnMvbmV0L2xpYjgyNTk2LmMKQEAgLTE2MSw3ICsxNjEsNyBAQAogI2RlZmluZQkgUlhfU1VTUEVORAkweDAwMzAKICNkZWZpbmUJIFJYX0FCT1JUCTB4MDA0MAogCi0jZGVmaW5lIFRYX1RJTUVPVVQJNQorI2RlZmluZSBUWF9USU1FT1VUCShIWi8yMCkKIAogCiBzdHJ1Y3QgaTU5Nl9yZWcgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbGliODM5MC5jIGIvZHJpdmVycy9uZXQvbGliODM5MC5jCmluZGV4IGU3MDMwY2UuLmRhNzRkYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2xpYjgzOTAuYworKysgYi9kcml2ZXJzL25ldC9saWI4MzkwLmMKQEAgLTIwMyw3ICsyMDMsNyBAQAogc3RhdGljIGludCBfX2VpX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBlaV9kZXZpY2UgKmVpX2xvY2FsID0gKHN0cnVjdCBlaV9kZXZpY2UgKikgbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZWlfZGV2aWNlICplaV9sb2NhbCA9IG5ldGRldl9wcml2KGRldik7CiAKIAlpZiAoZGV2LT53YXRjaGRvZ190aW1lbyA8PSAwKQogCQkgZGV2LT53YXRjaGRvZ190aW1lbyA9IFRYX1RJTUVPVVQ7CkBAIC0yMzEsNyArMjMxLDcgQEAKICAqLwogc3RhdGljIGludCBfX2VpX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGVpX2RldmljZSAqZWlfbG9jYWwgPSAoc3RydWN0IGVpX2RldmljZSAqKSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBlaV9kZXZpY2UgKmVpX2xvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJLyoKQEAgLTI1Niw3ICsyNTYsNyBAQAogc3RhdGljIHZvaWQgX19laV90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJdW5zaWduZWQgbG9uZyBlODM5MF9iYXNlID0gZGV2LT5iYXNlX2FkZHI7Ci0Jc3RydWN0IGVpX2RldmljZSAqZWlfbG9jYWwgPSAoc3RydWN0IGVpX2RldmljZSAqKSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBlaV9kZXZpY2UgKmVpX2xvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgdHhzciwgaXNyLCB0aWNrc3NvZmFyID0gamlmZmllcyAtIGRldl90cmFuc19zdGFydChkZXYpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTMwMyw3ICszMDMsNyBAQAogCQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJdW5zaWduZWQgbG9uZyBlODM5MF9iYXNlID0gZGV2LT5iYXNlX2FkZHI7Ci0Jc3RydWN0IGVpX2RldmljZSAqZWlfbG9jYWwgPSAoc3RydWN0IGVpX2RldmljZSAqKSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBlaV9kZXZpY2UgKmVpX2xvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgc2VuZF9sZW5ndGggPSBza2ItPmxlbiwgb3V0cHV0X3BhZ2U7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAljaGFyIGJ1ZltFVEhfWkxFTl07CkBAIC01OTIsNyArNTkyLDcgQEAKIHN0YXRpYyB2b2lkIGVpX3R4X2ludHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAl1bnNpZ25lZCBsb25nIGU4MzkwX2Jhc2UgPSBkZXYtPmJhc2VfYWRkcjsKLQlzdHJ1Y3QgZWlfZGV2aWNlICplaV9sb2NhbCA9IChzdHJ1Y3QgZWlfZGV2aWNlICopIG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGVpX2RldmljZSAqZWlfbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCBzdGF0dXMgPSBlaV9pbmIoZTgzOTBfYmFzZSArIEVOMF9UU1IpOwogCiAJZWlfb3V0Yl9wKEVOSVNSX1RYLCBlODM5MF9iYXNlICsgRU4wX0lTUik7IC8qIEFjayBpbnRyLiAqLwpAQCAtNjc1LDcgKzY3NSw3IEBACiBzdGF0aWMgdm9pZCBlaV9yZWNlaXZlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJdW5zaWduZWQgbG9uZyBlODM5MF9iYXNlID0gZGV2LT5iYXNlX2FkZHI7Ci0Jc3RydWN0IGVpX2RldmljZSAqZWlfbG9jYWwgPSAoc3RydWN0IGVpX2RldmljZSAqKSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBlaV9kZXZpY2UgKmVpX2xvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1bnNpZ25lZCBjaGFyIHJ4aW5nX3BhZ2UsIHRoaXNfZnJhbWUsIG5leHRfZnJhbWU7CiAJdW5zaWduZWQgc2hvcnQgY3VycmVudF9vZmZzZXQ7CiAJaW50IHJ4X3BrdF9jb3VudCA9IDA7CkBAIC04NzksNyArODc5LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqX19laV9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAl1bnNpZ25lZCBsb25nIGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwotCXN0cnVjdCBlaV9kZXZpY2UgKmVpX2xvY2FsID0gKHN0cnVjdCBlaV9kZXZpY2UgKikgbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZWlfZGV2aWNlICplaV9sb2NhbCA9IG5ldGRldl9wcml2KGRldik7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCS8qIElmIHRoZSBjYXJkIGlzIHN0b3BwZWQsIGp1c3QgcmV0dXJuIHRoZSBwcmVzZW50IHN0YXRzLiAqLwpAQCAtOTI3LDcgKzkyNyw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyBlODM5MF9iYXNlID0gZGV2LT5iYXNlX2FkZHI7CiAJaW50IGk7Ci0Jc3RydWN0IGVpX2RldmljZSAqZWlfbG9jYWwgPSAoc3RydWN0IGVpX2RldmljZSopbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZWlfZGV2aWNlICplaV9sb2NhbCA9IG5ldGRldl9wcml2KGRldik7CiAKIAlpZiAoIShkZXYtPmZsYWdzJihJRkZfUFJPTUlTQ3xJRkZfQUxMTVVMVEkpKSkKIAl7CkBAIC05ODEsNyArOTgxLDcgQEAKIHN0YXRpYyB2b2lkIF9fZWlfc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgZWlfZGV2aWNlICplaV9sb2NhbCA9IChzdHJ1Y3QgZWlfZGV2aWNlKiluZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBlaV9kZXZpY2UgKmVpX2xvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZlaV9sb2NhbC0+cGFnZV9sb2NrLCBmbGFncyk7CiAJZG9fc2V0X211bHRpY2FzdF9saXN0KGRldik7CkBAIC05OTgsNyArOTk4LDcgQEAKIAogc3RhdGljIHZvaWQgZXRoZGV2X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGVpX2RldmljZSAqZWlfbG9jYWwgPSAoc3RydWN0IGVpX2RldmljZSAqKSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBlaV9kZXZpY2UgKmVpX2xvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpZiAoZWlfZGVidWcgPiAxKQogCQlwcmludGsodmVyc2lvbik7CiAKQEAgLTEwMzYsNyArMTAzNiw3IEBACiBzdGF0aWMgdm9pZCBfX05TODM5MF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBzdGFydHApCiB7CiAJdW5zaWduZWQgbG9uZyBlODM5MF9iYXNlID0gZGV2LT5iYXNlX2FkZHI7Ci0Jc3RydWN0IGVpX2RldmljZSAqZWlfbG9jYWwgPSAoc3RydWN0IGVpX2RldmljZSAqKSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBlaV9kZXZpY2UgKmVpX2xvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgaTsKIAlpbnQgZW5kY2ZnID0gZWlfbG9jYWwtPndvcmQxNgogCSAgICA/ICgweDQ4IHwgRU5EQ0ZHX1dUUyB8IChlaV9sb2NhbC0+YmlnZW5kaWFuID8gRU5EQ0ZHX0JPUyA6IDApKQpAQCAtMTA5OSw3ICsxMDk5LDcgQEAKIAkJCQkJCQkJaW50IHN0YXJ0X3BhZ2UpCiB7CiAJdW5zaWduZWQgbG9uZyBlODM5MF9iYXNlID0gZGV2LT5iYXNlX2FkZHI7Ci0gCXN0cnVjdCBlaV9kZXZpY2UgKmVpX2xvY2FsIF9fYXR0cmlidXRlKCh1bnVzZWQpKSA9IChzdHJ1Y3QgZWlfZGV2aWNlICopIG5ldGRldl9wcml2KGRldik7CisgCXN0cnVjdCBlaV9kZXZpY2UgKmVpX2xvY2FsIF9fYXR0cmlidXRlKCh1bnVzZWQpKSA9IG5ldGRldl9wcml2KGRldik7CiAKIAllaV9vdXRiX3AoRTgzOTBfTk9ETUErRTgzOTBfUEFHRTAsIGU4MzkwX2Jhc2UrRTgzOTBfQ01EKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbGxfdGVtYWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvbGxfdGVtYWNfbWFpbi5jCmluZGV4IDlmOGU3MDIuLjE4Mzc2NWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2xsX3RlbWFjX21haW4uYworKysgYi9kcml2ZXJzL25ldC9sbF90ZW1hY19tYWluLmMKQEAgLTY5Miw3ICs2OTIsNyBAQAogCiAJY3VyX3AtPmFwcDAgPSAwOwogCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7Ci0JCXVuc2lnbmVkIGludCBjc3VtX3N0YXJ0X29mZiA9IHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYik7CisJCXVuc2lnbmVkIGludCBjc3VtX3N0YXJ0X29mZiA9IHNrYl9jaGVja3N1bV9zdGFydF9vZmZzZXQoc2tiKTsKIAkJdW5zaWduZWQgaW50IGNzdW1faW5kZXhfb2ZmID0gY3N1bV9zdGFydF9vZmYgKyBza2ItPmNzdW1fb2Zmc2V0OwogCiAJCWN1cl9wLT5hcHAwIHw9IDE7IC8qIFRYIENoZWNrc3VtIEVuYWJsZWQgKi8KQEAgLTk1Miw3ICs5NTIsNyBAQAogCS5hdHRycyA9IHRlbWFjX2RldmljZV9hdHRycywKIH07CiAKLXN0YXRpYyBpbnQgX19pbml0CitzdGF0aWMgaW50IF9fZGV2aW5pdAogdGVtYWNfb2ZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb3AsIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tYWN2bGFuLmMgYi9kcml2ZXJzL25ldC9tYWN2bGFuLmMKaW5kZXggMGZjOWRjNy4uNmVkNTc3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWFjdmxhbi5jCisrKyBiL2RyaXZlcnMvbmV0L21hY3ZsYW4uYwpAQCAtMzgsNiArMzgsNyBAQAogCXN0cnVjdCBobGlzdF9oZWFkCXZsYW5faGFzaFtNQUNWTEFOX0hBU0hfU0laRV07CiAJc3RydWN0IGxpc3RfaGVhZAl2bGFuczsKIAlzdHJ1Y3QgcmN1X2hlYWQJCXJjdTsKKwlib29sIAkJCXBhc3N0aHJ1OwogfTsKIAogI2RlZmluZSBtYWN2bGFuX3BvcnRfZ2V0X3JjdShkZXYpIFwKQEAgLTE2OSw2ICsxNzAsNyBAQAogCQkJbWFjdmxhbl9icm9hZGNhc3Qoc2tiLCBwb3J0LCBOVUxMLAogCQkJCQkgIE1BQ1ZMQU5fTU9ERV9QUklWQVRFIHwKIAkJCQkJICBNQUNWTEFOX01PREVfVkVQQSAgICB8CisJCQkJCSAgTUFDVkxBTl9NT0RFX1BBU1NUSFJVfAogCQkJCQkgIE1BQ1ZMQU5fTU9ERV9CUklER0UpOwogCQllbHNlIGlmIChzcmMtPm1vZGUgPT0gTUFDVkxBTl9NT0RFX1ZFUEEpCiAJCQkvKiBmbG9vZCB0byBldmVyeW9uZSBleGNlcHQgc291cmNlICovCkBAIC0xODUsNyArMTg3LDEwIEBACiAJCXJldHVybiBza2I7CiAJfQogCi0JdmxhbiA9IG1hY3ZsYW5faGFzaF9sb29rdXAocG9ydCwgZXRoLT5oX2Rlc3QpOworCWlmIChwb3J0LT5wYXNzdGhydSkKKwkJdmxhbiA9IGxpc3RfZmlyc3RfZW50cnkoJnBvcnQtPnZsYW5zLCBzdHJ1Y3QgbWFjdmxhbl9kZXYsIGxpc3QpOworCWVsc2UKKwkJdmxhbiA9IG1hY3ZsYW5faGFzaF9sb29rdXAocG9ydCwgZXRoLT5oX2Rlc3QpOwogCWlmICh2bGFuID09IE5VTEwpCiAJCXJldHVybiBza2I7CiAKQEAgLTI0MywxOCArMjQ4LDIyIEBACiBuZXRkZXZfdHhfdCBtYWN2bGFuX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCWludCBpID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7Ci0Jc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIGkpOwogCXVuc2lnbmVkIGludCBsZW4gPSBza2ItPmxlbjsKIAlpbnQgcmV0OworCWNvbnN0IHN0cnVjdCBtYWN2bGFuX2RldiAqdmxhbiA9IG5ldGRldl9wcml2KGRldik7CiAKIAlyZXQgPSBtYWN2bGFuX3F1ZXVlX3htaXQoc2tiLCBkZXYpOwogCWlmIChsaWtlbHkocmV0ID09IE5FVF9YTUlUX1NVQ0NFU1MgfHwgcmV0ID09IE5FVF9YTUlUX0NOKSkgewotCQl0eHEtPnR4X3BhY2tldHMrKzsKLQkJdHhxLT50eF9ieXRlcyArPSBsZW47Ci0JfSBlbHNlCi0JCXR4cS0+dHhfZHJvcHBlZCsrOworCQlzdHJ1Y3QgbWFjdmxhbl9wY3B1X3N0YXRzICpwY3B1X3N0YXRzOwogCisJCXBjcHVfc3RhdHMgPSB0aGlzX2NwdV9wdHIodmxhbi0+cGNwdV9zdGF0cyk7CisJCXU2NF9zdGF0c191cGRhdGVfYmVnaW4oJnBjcHVfc3RhdHMtPnN5bmNwKTsKKwkJcGNwdV9zdGF0cy0+dHhfcGFja2V0cysrOworCQlwY3B1X3N0YXRzLT50eF9ieXRlcyArPSBsZW47CisJCXU2NF9zdGF0c191cGRhdGVfZW5kKCZwY3B1X3N0YXRzLT5zeW5jcCk7CisJfSBlbHNlIHsKKwkJdGhpc19jcHVfaW5jKHZsYW4tPnBjcHVfc3RhdHMtPnR4X2Ryb3BwZWQpOworCX0KIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTF9HUEwobWFjdmxhbl9zdGFydF94bWl0KTsKQEAgLTI4NCw2ICsyOTMsMTEgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbG93ZXJkZXYgPSB2bGFuLT5sb3dlcmRldjsKIAlpbnQgZXJyOwogCisJaWYgKHZsYW4tPnBvcnQtPnBhc3N0aHJ1KSB7CisJCWRldl9zZXRfcHJvbWlzY3VpdHkobG93ZXJkZXYsIDEpOworCQlnb3RvIGhhc2hfYWRkOworCX0KKwogCWVyciA9IC1FQlVTWTsKIAlpZiAobWFjdmxhbl9hZGRyX2J1c3kodmxhbi0+cG9ydCwgZGV2LT5kZXZfYWRkcikpCiAJCWdvdG8gb3V0OwpAQCAtMjk2LDYgKzMxMCw4IEBACiAJCWlmIChlcnIgPCAwKQogCQkJZ290byBkZWxfdW5pY2FzdDsKIAl9CisKK2hhc2hfYWRkOgogCW1hY3ZsYW5faGFzaF9hZGQodmxhbik7CiAJcmV0dXJuIDA7CiAKQEAgLTMxMCwxMiArMzI2LDE4IEBACiAJc3RydWN0IG1hY3ZsYW5fZGV2ICp2bGFuID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbG93ZXJkZXYgPSB2bGFuLT5sb3dlcmRldjsKIAorCWlmICh2bGFuLT5wb3J0LT5wYXNzdGhydSkgeworCQlkZXZfc2V0X3Byb21pc2N1aXR5KGxvd2VyZGV2LCAtMSk7CisJCWdvdG8gaGFzaF9kZWw7CisJfQorCiAJZGV2X21jX3Vuc3luYyhsb3dlcmRldiwgZGV2KTsKIAlpZiAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkKIAkJZGV2X3NldF9hbGxtdWx0aShsb3dlcmRldiwgLTEpOwogCiAJZGV2X3VjX2RlbChsb3dlcmRldiwgZGV2LT5kZXZfYWRkcik7CiAKK2hhc2hfZGVsOgogCW1hY3ZsYW5faGFzaF9kZWwodmxhbik7CiAJcmV0dXJuIDA7CiB9CkBAIC00MTQsMTQgKzQzNiwxNSBAQAogCWRldi0+c3RhdGUJCT0gKGRldi0+c3RhdGUgJiB+TUFDVkxBTl9TVEFURV9NQVNLKSB8CiAJCQkJICAobG93ZXJkZXYtPnN0YXRlICYgTUFDVkxBTl9TVEFURV9NQVNLKTsKIAlkZXYtPmZlYXR1cmVzIAkJPSBsb3dlcmRldi0+ZmVhdHVyZXMgJiBNQUNWTEFOX0ZFQVRVUkVTOworCWRldi0+ZmVhdHVyZXMJCXw9IE5FVElGX0ZfTExUWDsKIAlkZXYtPmdzb19tYXhfc2l6ZQk9IGxvd2VyZGV2LT5nc29fbWF4X3NpemU7CiAJZGV2LT5pZmxpbmsJCT0gbG93ZXJkZXYtPmlmaW5kZXg7CiAJZGV2LT5oYXJkX2hlYWRlcl9sZW4JPSBsb3dlcmRldi0+aGFyZF9oZWFkZXJfbGVuOwogCiAJbWFjdmxhbl9zZXRfbG9ja2RlcF9jbGFzcyhkZXYpOwogCi0Jdmxhbi0+cnhfc3RhdHMgPSBhbGxvY19wZXJjcHUoc3RydWN0IG1hY3ZsYW5fcnhfc3RhdHMpOwotCWlmICghdmxhbi0+cnhfc3RhdHMpCisJdmxhbi0+cGNwdV9zdGF0cyA9IGFsbG9jX3BlcmNwdShzdHJ1Y3QgbWFjdmxhbl9wY3B1X3N0YXRzKTsKKwlpZiAoIXZsYW4tPnBjcHVfc3RhdHMpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJcmV0dXJuIDA7CkBAIC00MzEsNyArNDU0LDcgQEAKIHsKIAlzdHJ1Y3QgbWFjdmxhbl9kZXYgKnZsYW4gPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JZnJlZV9wZXJjcHUodmxhbi0+cnhfc3RhdHMpOworCWZyZWVfcGVyY3B1KHZsYW4tPnBjcHVfc3RhdHMpOwogfQogCiBzdGF0aWMgc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICptYWN2bGFuX2Rldl9nZXRfc3RhdHM2NChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LApAQCAtNDM5LDMzICs0NjIsMzggQEAKIHsKIAlzdHJ1Y3QgbWFjdmxhbl9kZXYgKnZsYW4gPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JZGV2X3R4cV9zdGF0c19mb2xkKGRldiwgc3RhdHMpOwotCi0JaWYgKHZsYW4tPnJ4X3N0YXRzKSB7Ci0JCXN0cnVjdCBtYWN2bGFuX3J4X3N0YXRzICpwLCBhY2N1bSA9IHswfTsKLQkJdTY0IHJ4X3BhY2tldHMsIHJ4X2J5dGVzLCByeF9tdWx0aWNhc3Q7CisJaWYgKHZsYW4tPnBjcHVfc3RhdHMpIHsKKwkJc3RydWN0IG1hY3ZsYW5fcGNwdV9zdGF0cyAqcDsKKwkJdTY0IHJ4X3BhY2tldHMsIHJ4X2J5dGVzLCByeF9tdWx0aWNhc3QsIHR4X3BhY2tldHMsIHR4X2J5dGVzOworCQl1MzIgcnhfZXJyb3JzID0gMCwgdHhfZHJvcHBlZCA9IDA7CiAJCXVuc2lnbmVkIGludCBzdGFydDsKIAkJaW50IGk7CiAKIAkJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKLQkJCXAgPSBwZXJfY3B1X3B0cih2bGFuLT5yeF9zdGF0cywgaSk7CisJCQlwID0gcGVyX2NwdV9wdHIodmxhbi0+cGNwdV9zdGF0cywgaSk7CiAJCQlkbyB7CiAJCQkJc3RhcnQgPSB1NjRfc3RhdHNfZmV0Y2hfYmVnaW5fYmgoJnAtPnN5bmNwKTsKIAkJCQlyeF9wYWNrZXRzCT0gcC0+cnhfcGFja2V0czsKIAkJCQlyeF9ieXRlcwk9IHAtPnJ4X2J5dGVzOwogCQkJCXJ4X211bHRpY2FzdAk9IHAtPnJ4X211bHRpY2FzdDsKKwkJCQl0eF9wYWNrZXRzCT0gcC0+dHhfcGFja2V0czsKKwkJCQl0eF9ieXRlcwk9IHAtPnR4X2J5dGVzOwogCQkJfSB3aGlsZSAodTY0X3N0YXRzX2ZldGNoX3JldHJ5X2JoKCZwLT5zeW5jcCwgc3RhcnQpKTsKLQkJCWFjY3VtLnJ4X3BhY2tldHMJKz0gcnhfcGFja2V0czsKLQkJCWFjY3VtLnJ4X2J5dGVzCQkrPSByeF9ieXRlczsKLQkJCWFjY3VtLnJ4X211bHRpY2FzdAkrPSByeF9tdWx0aWNhc3Q7Ci0JCQkvKiByeF9lcnJvcnMgaXMgYW4gdWxvbmcsIHVwZGF0ZWQgd2l0aG91dCBzeW5jcCBwcm90ZWN0aW9uICovCi0JCQlhY2N1bS5yeF9lcnJvcnMJCSs9IHAtPnJ4X2Vycm9yczsKKworCQkJc3RhdHMtPnJ4X3BhY2tldHMJKz0gcnhfcGFja2V0czsKKwkJCXN0YXRzLT5yeF9ieXRlcwkJKz0gcnhfYnl0ZXM7CisJCQlzdGF0cy0+bXVsdGljYXN0CSs9IHJ4X211bHRpY2FzdDsKKwkJCXN0YXRzLT50eF9wYWNrZXRzCSs9IHR4X3BhY2tldHM7CisJCQlzdGF0cy0+dHhfYnl0ZXMJCSs9IHR4X2J5dGVzOworCQkJLyogcnhfZXJyb3JzICYgdHhfZHJvcHBlZCBhcmUgdTMyLCB1cGRhdGVkCisJCQkgKiB3aXRob3V0IHN5bmNwIHByb3RlY3Rpb24uCisJCQkgKi8KKwkJCXJ4X2Vycm9ycwkrPSBwLT5yeF9lcnJvcnM7CisJCQl0eF9kcm9wcGVkCSs9IHAtPnR4X2Ryb3BwZWQ7CiAJCX0KLQkJc3RhdHMtPnJ4X3BhY2tldHMgPSBhY2N1bS5yeF9wYWNrZXRzOwotCQlzdGF0cy0+cnhfYnl0ZXMgICA9IGFjY3VtLnJ4X2J5dGVzOwotCQlzdGF0cy0+cnhfZXJyb3JzICA9IGFjY3VtLnJ4X2Vycm9yczsKLQkJc3RhdHMtPnJ4X2Ryb3BwZWQgPSBhY2N1bS5yeF9lcnJvcnM7Ci0JCXN0YXRzLT5tdWx0aWNhc3QgID0gYWNjdW0ucnhfbXVsdGljYXN0OworCQlzdGF0cy0+cnhfZXJyb3JzCT0gcnhfZXJyb3JzOworCQlzdGF0cy0+cnhfZHJvcHBlZAk9IHJ4X2Vycm9yczsKKwkJc3RhdHMtPnR4X2Ryb3BwZWQJPSB0eF9kcm9wcGVkOwogCX0KIAlyZXR1cm4gc3RhdHM7CiB9CkBAIC01NDksNiArNTc3LDcgQEAKIAlpZiAocG9ydCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAorCXBvcnQtPnBhc3N0aHJ1ID0gZmFsc2U7CiAJcG9ydC0+ZGV2ID0gZGV2OwogCUlOSVRfTElTVF9IRUFEKCZwb3J0LT52bGFucyk7CiAJZm9yIChpID0gMDsgaSA8IE1BQ1ZMQU5fSEFTSF9TSVpFOyBpKyspCkBAIC01OTMsNiArNjIyLDcgQEAKIAkJY2FzZSBNQUNWTEFOX01PREVfUFJJVkFURToKIAkJY2FzZSBNQUNWTEFOX01PREVfVkVQQToKIAkJY2FzZSBNQUNWTEFOX01PREVfQlJJREdFOgorCQljYXNlIE1BQ1ZMQU5fTU9ERV9QQVNTVEhSVToKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC02MDEsMjUgKzYzMSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbWFjdmxhbl9nZXRfdHhfcXVldWVzKHN0cnVjdCBuZXQgKm5ldCwKLQkJCQkgc3RydWN0IG5sYXR0ciAqdGJbXSwKLQkJCQkgdW5zaWduZWQgaW50ICpudW1fdHhfcXVldWVzLAotCQkJCSB1bnNpZ25lZCBpbnQgKnJlYWxfbnVtX3R4X3F1ZXVlcykKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqcmVhbF9kZXY7Ci0KLQlpZiAoIXRiW0lGTEFfTElOS10pCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmVhbF9kZXYgPSBfX2Rldl9nZXRfYnlfaW5kZXgobmV0LCBubGFfZ2V0X3UzMih0YltJRkxBX0xJTktdKSk7Ci0JaWYgKCFyZWFsX2RldikKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQkqbnVtX3R4X3F1ZXVlcyAgICAgID0gcmVhbF9kZXYtPm51bV90eF9xdWV1ZXM7Ci0JKnJlYWxfbnVtX3R4X3F1ZXVlcyA9IHJlYWxfZGV2LT5yZWFsX251bV90eF9xdWV1ZXM7Ci0JcmV0dXJuIDA7Ci19Ci0KIGludCBtYWN2bGFuX2NvbW1vbl9uZXdsaW5rKHN0cnVjdCBuZXQgKnNyY19uZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgICBzdHJ1Y3QgbmxhdHRyICp0YltdLCBzdHJ1Y3QgbmxhdHRyICpkYXRhW10sCiAJCQkgICBpbnQgKCpyZWNlaXZlKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSwKQEAgLTY2MSw2ICs2NzIsMTAgQEAKIAl9CiAJcG9ydCA9IG1hY3ZsYW5fcG9ydF9nZXQobG93ZXJkZXYpOwogCisJLyogT25seSAxIG1hY3ZsYW4gZGV2aWNlIGNhbiBiZSBjcmVhdGVkIGluIHBhc3N0aHJ1IG1vZGUgKi8KKwlpZiAocG9ydC0+cGFzc3RocnUpCisJCXJldHVybiAtRUlOVkFMOworCiAJdmxhbi0+bG93ZXJkZXYgPSBsb3dlcmRldjsKIAl2bGFuLT5kZXYgICAgICA9IGRldjsKIAl2bGFuLT5wb3J0ICAgICA9IHBvcnQ7CkBAIC02NzEsNiArNjg2LDEzIEBACiAJaWYgKGRhdGEgJiYgZGF0YVtJRkxBX01BQ1ZMQU5fTU9ERV0pCiAJCXZsYW4tPm1vZGUgPSBubGFfZ2V0X3UzMihkYXRhW0lGTEFfTUFDVkxBTl9NT0RFXSk7CiAKKwlpZiAodmxhbi0+bW9kZSA9PSBNQUNWTEFOX01PREVfUEFTU1RIUlUpIHsKKwkJaWYgKCFsaXN0X2VtcHR5KCZwb3J0LT52bGFucykpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJcG9ydC0+cGFzc3RocnUgPSB0cnVlOworCQltZW1jcHkoZGV2LT5kZXZfYWRkciwgbG93ZXJkZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJfQorCiAJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2aWNlKGRldik7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gZGVzdHJveV9wb3J0OwpAQCAtNzQzLDcgKzc2NSw2IEBACiB7CiAJLyogY29tbW9uIGZpZWxkcyAqLwogCW9wcy0+cHJpdl9zaXplCQk9IHNpemVvZihzdHJ1Y3QgbWFjdmxhbl9kZXYpOwotCW9wcy0+Z2V0X3R4X3F1ZXVlcwk9IG1hY3ZsYW5fZ2V0X3R4X3F1ZXVlczsKIAlvcHMtPnZhbGlkYXRlCQk9IG1hY3ZsYW5fdmFsaWRhdGU7CiAJb3BzLT5tYXh0eXBlCQk9IElGTEFfTUFDVkxBTl9NQVg7CiAJb3BzLT5wb2xpY3kJCT0gbWFjdmxhbl9wb2xpY3k7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tYWN2dGFwLmMgYi9kcml2ZXJzL25ldC9tYWN2dGFwLmMKaW5kZXggNDI1NjcyNy4uMjE4NDVhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWFjdnRhcC5jCisrKyBiL2RyaXZlcnMvbmV0L21hY3Z0YXAuYwpAQCAtNTA0LDggKzUwNCw3IEBACiAKIAlpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkgewogCQl2bmV0X2hkci0+ZmxhZ3MgPSBWSVJUSU9fTkVUX0hEUl9GX05FRURTX0NTVU07Ci0JCXZuZXRfaGRyLT5jc3VtX3N0YXJ0ID0gc2tiLT5jc3VtX3N0YXJ0IC0KLQkJCQkJc2tiX2hlYWRyb29tKHNrYik7CisJCXZuZXRfaGRyLT5jc3VtX3N0YXJ0ID0gc2tiX2NoZWNrc3VtX3N0YXJ0X29mZnNldChza2IpOwogCQl2bmV0X2hkci0+Y3N1bV9vZmZzZXQgPSBza2ItPmNzdW1fb2Zmc2V0OwogCX0gLyogZWxzZSBldmVyeXRoaW5nIGlzIHplcm8gKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbXY2NDN4eF9ldGguYyBiL2RyaXZlcnMvbmV0L212NjQzeHhfZXRoLmMKaW5kZXggZGQyYjZhNy4uMDIwNzZlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbXY2NDN4eF9ldGguYworKysgYi9kcml2ZXJzL25ldC9tdjY0M3h4X2V0aC5jCkBAIC0xNTE0LDExICsxNTE0LDYgQEAKIAlyZXR1cm4gZ2VucGh5X3Jlc3RhcnRfYW5lZyhtcC0+cGh5KTsKIH0KIAotc3RhdGljIHUzMiBtdjY0M3h4X2V0aF9nZXRfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXJldHVybiAhIW5ldGlmX2NhcnJpZXJfb2soZGV2KTsKLX0KLQogc3RhdGljIGludAogbXY2NDN4eF9ldGhfZ2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2NvYWxlc2NlICplYykKIHsKQEAgLTE2NTgsNyArMTY1Myw3IEBACiAJLnNldF9zZXR0aW5ncwkJPSBtdjY0M3h4X2V0aF9zZXRfc2V0dGluZ3MsCiAJLmdldF9kcnZpbmZvCQk9IG12NjQzeHhfZXRoX2dldF9kcnZpbmZvLAogCS5ud2F5X3Jlc2V0CQk9IG12NjQzeHhfZXRoX253YXlfcmVzZXQsCi0JLmdldF9saW5rCQk9IG12NjQzeHhfZXRoX2dldF9saW5rLAorCS5nZXRfbGluawkJPSBldGh0b29sX29wX2dldF9saW5rLAogCS5nZXRfY29hbGVzY2UJCT0gbXY2NDN4eF9ldGhfZ2V0X2NvYWxlc2NlLAogCS5zZXRfY29hbGVzY2UJCT0gbXY2NDN4eF9ldGhfc2V0X2NvYWxlc2NlLAogCS5nZXRfcmluZ3BhcmFtCQk9IG12NjQzeHhfZXRoX2dldF9yaW5ncGFyYW0sCkBAIC0yOTgzLDcgKzI5NzgsNyBAQAogCXVucmVnaXN0ZXJfbmV0ZGV2KG1wLT5kZXYpOwogCWlmIChtcC0+cGh5ICE9IE5VTEwpCiAJCXBoeV9kZXRhY2gobXAtPnBoeSk7Ci0JZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwljYW5jZWxfd29ya19zeW5jKCZtcC0+dHhfdGltZW91dF90YXNrKTsKIAlmcmVlX25ldGRldihtcC0+ZGV2KTsKIAogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbXlyaTEwZ2UvbXlyaTEwZ2UuYyBiL2RyaXZlcnMvbmV0L215cmkxMGdlL215cmkxMGdlLmMKaW5kZXggODUyNGNjNC4uYTM3ZmNmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbXlyaTEwZ2UvbXlyaTEwZ2UuYworKysgYi9kcml2ZXJzL25ldC9teXJpMTBnZS9teXJpMTBnZS5jCkBAIC0yNzM2LDcgKzI3MzYsNyBAQAogCW9kZF9mbGFnID0gMDsKIAlmbGFncyA9IChNWEdFRldfRkxBR1NfTk9fVFNPIHwgTVhHRUZXX0ZMQUdTX0ZJUlNUKTsKIAlpZiAobGlrZWx5KHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpKSB7Ci0JCWNrc3VtX29mZnNldCA9IHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYik7CisJCWNrc3VtX29mZnNldCA9IHNrYl9jaGVja3N1bV9zdGFydF9vZmZzZXQoc2tiKTsKIAkJcHNldWRvX2hkcl9vZmZzZXQgPSBja3N1bV9vZmZzZXQgKyBza2ItPmNzdW1fb2Zmc2V0OwogCQkvKiBJZiB0aGUgaGVhZGVycyBhcmUgZXhjZXNzaXZlbHkgbGFyZ2UsIHRoZW4gd2UgbXVzdAogCQkgKiBmYWxsIGJhY2sgdG8gYSBzb2Z0d2FyZSBjaGVja3N1bSAqLwpAQCAtNDA2Nyw3ICs0MDY3LDcgQEAKIAlpZiAobWdwID09IE5VTEwpCiAJCXJldHVybjsKIAotCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisJY2FuY2VsX3dvcmtfc3luYygmbWdwLT53YXRjaGRvZ193b3JrKTsKIAluZXRkZXYgPSBtZ3AtPmRldjsKIAl1bnJlZ2lzdGVyX25ldGRldihuZXRkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZS1oODMwMC5jIGIvZHJpdmVycy9uZXQvbmUtaDgzMDAuYwppbmRleCBlMGIwZWYxLi4zMGJlOGM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZS1oODMwMC5jCisrKyBiL2RyaXZlcnMvbmV0L25lLWg4MzAwLmMKQEAgLTg2LDcgKzg2LDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgaW5pdF9yZWdfb2Zmc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsdW5zaWduZWQgbG9uZyBiYXNlX2FkZHIpCiB7Ci0Jc3RydWN0IGVpX2RldmljZSAqZWlfbG9jYWwgPSAoc3RydWN0IGVpX2RldmljZSAqKSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBlaV9kZXZpY2UgKmVpX2xvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgaTsKIAl1bnNpZ25lZCBjaGFyIGJ1c193aWR0aDsKIApAQCAtMjE4LDcgKzIxOCw3IEBACiAJaW50IHN0YXJ0X3BhZ2UsIHN0b3BfcGFnZTsKIAlpbnQgcmVnMCwgcmV0OwogCXN0YXRpYyB1bnNpZ25lZCB2ZXJzaW9uX3ByaW50ZWQ7Ci0Jc3RydWN0IGVpX2RldmljZSAqZWlfbG9jYWwgPSAoc3RydWN0IGVpX2RldmljZSAqKSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBlaV9kZXZpY2UgKmVpX2xvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1bnNpZ25lZCBjaGFyIGJ1c193aWR0aDsKIAogCWlmICghcmVxdWVzdF9yZWdpb24oaW9hZGRyLCBORV9JT19FWFRFTlQsIERSVl9OQU1FKSkKQEAgLTM3MSw3ICszNzEsNyBAQAogc3RhdGljIHZvaWQgbmVfcmVzZXRfODM5MChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXVuc2lnbmVkIGxvbmcgcmVzZXRfc3RhcnRfdGltZSA9IGppZmZpZXM7Ci0Jc3RydWN0IGVpX2RldmljZSAqZWlfbG9jYWwgPSAoc3RydWN0IGVpX2RldmljZSAqKSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBlaV9kZXZpY2UgKmVpX2xvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCWlmIChlaV9kZWJ1ZyA+IDEpCiAJCXByaW50ayhLRVJOX0RFQlVHICJyZXNldHRpbmcgdGhlIDgzOTAgdD0lbGQuLi4iLCBqaWZmaWVzKTsKQEAgLTM5Nyw3ICszOTcsNyBAQAogCiBzdGF0aWMgdm9pZCBuZV9nZXRfODM5MF9oZHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGU4MzkwX3BrdF9oZHIgKmhkciwgaW50IHJpbmdfcGFnZSkKIHsKLQlzdHJ1Y3QgZWlfZGV2aWNlICplaV9sb2NhbCA9IChzdHJ1Y3QgZWlfZGV2aWNlICopIG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGVpX2RldmljZSAqZWlfbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwogCS8qIFRoaXMgKnNob3VsZG4ndCogaGFwcGVuLiBJZiBpdCBkb2VzLCBpdCdzIHRoZSBsYXN0IHRoaW5nIHlvdSdsbCBzZWUgKi8KIAogCWlmIChlaV9zdGF0dXMuZG1haW5nKQpAQCAtNDM3LDcgKzQzNyw3IEBACiAKIHN0YXRpYyB2b2lkIG5lX2Jsb2NrX2lucHV0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBjb3VudCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHJpbmdfb2Zmc2V0KQogewotCXN0cnVjdCBlaV9kZXZpY2UgKmVpX2xvY2FsID0gKHN0cnVjdCBlaV9kZXZpY2UgKikgbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZWlfZGV2aWNlICplaV9sb2NhbCA9IG5ldGRldl9wcml2KGRldik7CiAjaWZkZWYgTkVfU0FOSVRZX0NIRUNLCiAJaW50IHhmZXJfY291bnQgPSBjb3VudDsKICNlbmRpZgpAQCAtNTA3LDcgKzUwNyw3IEBACiBzdGF0aWMgdm9pZCBuZV9ibG9ja19vdXRwdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGNvdW50LAogCQljb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGNvbnN0IGludCBzdGFydF9wYWdlKQogewotCXN0cnVjdCBlaV9kZXZpY2UgKmVpX2xvY2FsID0gKHN0cnVjdCBlaV9kZXZpY2UgKikgbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZWlfZGV2aWNlICplaV9sb2NhbCA9IG5ldGRldl9wcml2KGRldik7CiAJdW5zaWduZWQgbG9uZyBkbWFfc3RhcnQ7CiAjaWZkZWYgTkVfU0FOSVRZX0NIRUNLCiAJaW50IHJldHJpZXMgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jIGIvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jCmluZGV4IDk0MjU1ZjAuLmRmYjY3ZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYworKysgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMKQEAgLTY2NCw2ICs2NjQsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudDsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHRyOworCWJvb2wgc3RvcHBlZCA9IGZhbHNlOwogCiAJaWYgKCEoZXZlbnQgPT0gTkVUREVWX0NIQU5HRU5BTUUgfHwgZXZlbnQgPT0gTkVUREVWX1VOUkVHSVNURVIgfHwKIAkgICAgICBldmVudCA9PSBORVRERVZfQk9ORElOR19ERVNMQVZFIHx8IGV2ZW50ID09IE5FVERFVl9HT0lOR19ET1dOKSkKQEAgLTY5MCwxNSArNjkxLDE2IEBACiAJCQljYXNlIE5FVERFVl9HT0lOR19ET1dOOgogCQkJY2FzZSBORVRERVZfQk9ORElOR19ERVNMQVZFOgogCQkJCW50LT5lbmFibGVkID0gMDsKKwkJCQlzdG9wcGVkID0gdHJ1ZTsKIAkJCQlicmVhazsKIAkJCX0KIAkJfQogCQluZXRjb25zb2xlX3RhcmdldF9wdXQobnQpOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0YXJnZXRfbGlzdF9sb2NrLCBmbGFncyk7Ci0JaWYgKGV2ZW50ID09IE5FVERFVl9VTlJFR0lTVEVSIHx8IGV2ZW50ID09IE5FVERFVl9CT05ESU5HX0RFU0xBVkUpCi0JCXByaW50ayhLRVJOX0lORk8gIm5ldGNvbnNvbGU6IG5ldHdvcmsgbG9nZ2luZyBzdG9wcGVkLCAiCi0JCQkiaW50ZXJmYWNlICVzICVzXG4iLCAgZGV2LT5uYW1lLAorCWlmIChzdG9wcGVkICYmIChldmVudCA9PSBORVRERVZfVU5SRUdJU1RFUiB8fCBldmVudCA9PSBORVRERVZfQk9ORElOR19ERVNMQVZFKSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAibmV0Y29uc29sZTogbmV0d29yayBsb2dnaW5nIHN0b3BwZWQgb24gIgorCQkJImludGVyZmFjZSAlcyBhcyBpdCAlc1xuIiwgIGRldi0+bmFtZSwKIAkJCWV2ZW50ID09IE5FVERFVl9VTlJFR0lTVEVSID8gInVucmVnaXN0ZXJlZCIgOiAicmVsZWFzZWQgc2xhdmVzIik7CiAKIGRvbmU6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pYy5oIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWMuaAppbmRleCA4ZThhOTc4Li5hMTEzODA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pYy5oCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljLmgKQEAgLTUzLDggKzUzLDggQEAKIAogI2RlZmluZSBfTkVUWEVOX05JQ19MSU5VWF9NQUpPUiA0CiAjZGVmaW5lIF9ORVRYRU5fTklDX0xJTlVYX01JTk9SIDAKLSNkZWZpbmUgX05FVFhFTl9OSUNfTElOVVhfU1VCVkVSU0lPTiA3NAotI2RlZmluZSBORVRYRU5fTklDX0xJTlVYX1ZFUlNJT05JRCAgIjQuMC43NCIKKyNkZWZpbmUgX05FVFhFTl9OSUNfTElOVVhfU1VCVkVSU0lPTiA3NQorI2RlZmluZSBORVRYRU5fTklDX0xJTlVYX1ZFUlNJT05JRCAgIjQuMC43NSIKIAogI2RlZmluZSBORVRYRU5fVkVSU0lPTl9DT0RFKGEsIGIsIGMpCSgoKGEpIDw8IDI0KSArICgoYikgPDwgMTYpICsgKGMpKQogI2RlZmluZSBfbWFqb3IodikJKCgodikgPj4gMjQpICYgMHhmZikKQEAgLTExMzIsNiArMTEzMiw3IEBACiAjZGVmaW5lIE5FVFhFTl9OSUNfTVNJX0VOQUJMRUQJCTB4MDIKICNkZWZpbmUgTkVUWEVOX05JQ19NU0lYX0VOQUJMRUQJCTB4MDQKICNkZWZpbmUgTkVUWEVOX05JQ19MUk9fRU5BQkxFRAkJMHgwOAorI2RlZmluZSBORVRYRU5fTklDX0xST19ESVNBQkxFRAkJMHgwMAogI2RlZmluZSBORVRYRU5fTklDX0JSSURHRV9FTkFCTEVEICAgICAgIDBYMTAKICNkZWZpbmUgTkVUWEVOX05JQ19ESUFHX0VOQUJMRUQJCTB4MjAKICNkZWZpbmUgTkVUWEVOX0lTX01TSV9GQU1JTFkoYWRhcHRlcikgXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfZXRodG9vbC5jCmluZGV4IGIzMGRlMjQuLjU4NzQ5OGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ldGh0b29sLmMKQEAgLTcyMCw3ICs3MjAsMjEgQEAKIHN0YXRpYyBpbnQgbmV0eGVuX25pY19zZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKIHsKIAlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOwotCWFkYXB0ZXItPnJ4X2NzdW0gPSAhIWRhdGE7CisKKwlpZiAoZGF0YSkgeworCQlhZGFwdGVyLT5yeF9jc3VtID0gZGF0YTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0xSTykgeworCQlpZiAobmV0eGVuX2NvbmZpZ19od19scm8oYWRhcHRlciwgTkVUWEVOX05JQ19MUk9fRElTQUJMRUQpKQorCQkJcmV0dXJuIC1FSU87CisKKwkJZGV2LT5mZWF0dXJlcyAmPSB+TkVUSUZfRl9MUk87CisJCW5ldHhlbl9zZW5kX2xyb19jbGVhbnVwKGFkYXB0ZXIpOworCQluZXRkZXZfaW5mbyhkZXYsICJkaXNhYmxpbmcgTFJPIGFzIHJ4X2NzdW0gaXMgb2ZmXG4iKTsKKwl9CisJYWRhcHRlci0+cnhfY3N1bSA9IGRhdGE7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTg5MywxMSArOTA3LDE5IEBACiAJaWYgKCEoYWRhcHRlci0+Y2FwYWJpbGl0aWVzICYgTlhfRldfQ0FQQUJJTElUWV9IV19MUk8pKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCWlmICghYWRhcHRlci0+cnhfY3N1bSkgeworCQluZXRkZXZfaW5mbyhuZXRkZXYsICJyeCBjc3VtIGlzIG9mZiwgY2Fubm90IHRvZ2dsZSBMUk9cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoISEoZGF0YSAmIEVUSF9GTEFHX0xSTykgPT0gISEobmV0ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfTFJPKSkKKwkJcmV0dXJuIDA7CisKIAlpZiAoZGF0YSAmIEVUSF9GTEFHX0xSTykgewogCQlod19scm8gPSBORVRYRU5fTklDX0xST19FTkFCTEVEOwogCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTFJPOwogCX0gZWxzZSB7Ci0JCWh3X2xybyA9IDA7CisJCWh3X2xybyA9IE5FVFhFTl9OSUNfTFJPX0RJU0FCTEVEOwogCQluZXRkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX0xSTzsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2h3LmMgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ody5jCmluZGV4IDM3ZDNlYmQuLjVjZWY3MTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2h3LmMKKysrIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaHcuYwpAQCAtNjU1LDcgKzY1NSw3IEBACiB9CiAKIHN0YXRpYyBpbnQgbnhfcDNfbmljX2FkZF9tYWMoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAotCQl1OCAqYWRkciwgc3RydWN0IGxpc3RfaGVhZCAqZGVsX2xpc3QpCisJCWNvbnN0IHU4ICphZGRyLCBzdHJ1Y3QgbGlzdF9oZWFkICpkZWxfbGlzdCkKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkOwogCW54X21hY19saXN0X3QgKmN1cjsKQEAgLTY4Niw3ICs2ODYsOSBAQAogewogCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IG5ldGRldl9od19hZGRyICpoYTsKLQl1OCBiY2FzdF9hZGRyW0VUSF9BTEVOXSA9IHsgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiB9OworCXN0YXRpYyBjb25zdCB1OCBiY2FzdF9hZGRyW0VUSF9BTEVOXSA9IHsKKwkJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZgorCX07CiAJdTMyIG1vZGUgPSBWUE9SVF9NSVNTX01PREVfRFJPUDsKIAlMSVNUX0hFQUQoZGVsX2xpc3QpOwogCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQ7CkBAIC04MDcsOSArODA5LDYgQEAKIAl1NjQgd29yZDsKIAlpbnQgcnYgPSAwOwogCi0JaWYgKChhZGFwdGVyLT5mbGFncyAmIE5FVFhFTl9OSUNfTFJPX0VOQUJMRUQpID09IGVuYWJsZSkKLQkJcmV0dXJuIDA7Ci0KIAltZW1zZXQoJnJlcSwgMCwgc2l6ZW9mKG54X25pY19yZXFfdCkpOwogCiAJcmVxLnFoZHIgPSBjcHVfdG9fbGU2NChOWF9IT1NUX1JFUVVFU1QgPDwgMjMpOwpAQCAtODI1LDggKzgyNCw2IEBACiAJCQkiY29uZmlndXJlIGh3IGxybyByZXF1ZXN0XG4iKTsKIAl9CiAKLQlhZGFwdGVyLT5mbGFncyBePSBORVRYRU5fTklDX0xST19FTkFCTEVEOwotCiAJcmV0dXJuIHJ2OwogfQogCkBAIC04NjksOSArODY2LDExIEBACiAJdTY0IHdvcmQ7CiAJaW50IGksIHJ2OwogCi0JdTY0IGtleVtdID0geyAweGJlYWMwMWZhNmE0MmI3M2JVTEwsIDB4ODAzMGYyMGM3N2NiMmRhM1VMTCwKLQkJCTB4YWU3YjMwYjRkMGNhMmJjYlVMTCwgMHg0M2EzOGZiMDQxNjcyNTNkVUxMLAotCQkJMHgyNTViMGVjMjZkNWE1NmRhVUxMIH07CisJc3RhdGljIGNvbnN0IHU2NCBrZXlbXSA9IHsKKwkJMHhiZWFjMDFmYTZhNDJiNzNiVUxMLCAweDgwMzBmMjBjNzdjYjJkYTNVTEwsCisJCTB4YWU3YjMwYjRkMGNhMmJjYlVMTCwgMHg0M2EzOGZiMDQxNjcyNTNkVUxMLAorCQkweDI1NWIwZWMyNmQ1YTU2ZGFVTEwKKwl9OwogCiAKIAltZW1zZXQoJnJlcSwgMCwgc2l6ZW9mKG54X25pY19yZXFfdCkpOwpAQCAtODk1LDcgKzg5NCw3IEBACiAJCSgodTY0KShlbmFibGUgJiAweDEpIDw8IDgpIHwKIAkJKCgweDdVTEwpIDw8IDQ4KTsKIAlyZXEud29yZHNbMF0gPSBjcHVfdG9fbGU2NCh3b3JkKTsKLQlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGtleSk7IGkrKykKIAkJcmVxLndvcmRzW2krMV0gPSBjcHVfdG9fbGU2NChrZXlbaV0pOwogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYwppbmRleCA5NWZlNTUyLi43MzEwNzdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmMKKysrIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jCkBAIC0yMTQsMTMgKzIxNCwxMiBAQAogCXR4X3JpbmctPm51bV9kZXNjID0gYWRhcHRlci0+bnVtX3R4ZDsKIAl0eF9yaW5nLT50eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKG5ldGRldiwgMCk7CiAKLQljbWRfYnVmX2FyciA9IHZtYWxsb2MoVFhfQlVGRl9SSU5HU0laRSh0eF9yaW5nKSk7CisJY21kX2J1Zl9hcnIgPSB2emFsbG9jKFRYX0JVRkZfUklOR1NJWkUodHhfcmluZykpOwogCWlmIChjbWRfYnVmX2FyciA9PSBOVUxMKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgY21kIGJ1ZmZlciByaW5nXG4iLAogCQkgICAgICAgbmV0ZGV2LT5uYW1lKTsKIAkJZ290byBlcnJfb3V0OwogCX0KLQltZW1zZXQoY21kX2J1Zl9hcnIsIDAsIFRYX0JVRkZfUklOR1NJWkUodHhfcmluZykpOwogCXR4X3JpbmctPmNtZF9idWZfYXJyID0gY21kX2J1Zl9hcnI7CiAKIAlyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eDsKQEAgLTI3OSw4ICsyNzgsNyBAQAogCQkJYnJlYWs7CiAKIAkJfQotCQlyZHNfcmluZy0+cnhfYnVmX2FyciA9IChzdHJ1Y3QgbmV0eGVuX3J4X2J1ZmZlciAqKQotCQkJdm1hbGxvYyhSQ1ZfQlVGRl9SSU5HU0laRShyZHNfcmluZykpOworCQlyZHNfcmluZy0+cnhfYnVmX2FyciA9IHZ6YWxsb2MoUkNWX0JVRkZfUklOR1NJWkUocmRzX3JpbmcpKTsKIAkJaWYgKHJkc19yaW5nLT5yeF9idWZfYXJyID09IE5VTEwpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEZhaWxlZCB0byBhbGxvY2F0ZSAiCiAJCQkJInJ4IGJ1ZmZlciByaW5nICVkXG4iLApAQCAtMjg4LDcgKzI4Niw2IEBACiAJCQkvKiBmcmVlIHdoYXRldmVyIHdhcyBhbHJlYWR5IGFsbG9jYXRlZCAqLwogCQkJZ290byBlcnJfb3V0OwogCQl9Ci0JCW1lbXNldChyZHNfcmluZy0+cnhfYnVmX2FyciwgMCwgUkNWX0JVRkZfUklOR1NJWkUocmRzX3JpbmcpKTsKIAkJSU5JVF9MSVNUX0hFQUQoJnJkc19yaW5nLT5mcmVlX2xpc3QpOwogCQkvKgogCQkgKiBOb3cgZ28gdGhyb3VnaCBhbGwgb2YgdGhlbSwgc2V0IHJlZmVyZW5jZSBoYW5kbGVzCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMKaW5kZXggZTFkMzBkNy4uMzNmYWMzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX21haW4uYwpAQCAtMzgsNyArMzgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvYWVyLmg+CiAKLU1PRFVMRV9ERVNDUklQVElPTigiUUxvZ2ljL05ldFhlbiAoMS8xMCkgR2JFIENvbnZlcmdlZCBFdGhlcm5ldCBEcml2ZXIiKTsKK01PRFVMRV9ERVNDUklQVElPTigiUUxvZ2ljL05ldFhlbiAoMS8xMCkgR2JFIEludGVsbGlnZW50IEV0aGVybmV0IERyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX1ZFUlNJT04oTkVUWEVOX05JQ19MSU5VWF9WRVJTSU9OSUQpOwogTU9EVUxFX0ZJUk1XQVJFKE5YX1VOSUZJRURfUk9NSU1BR0VfTkFNRSk7CkBAIC03NjIsOCArNzYyLDYgQEAKIAlpZiAoYWRhcHRlci0+ZndfdmVyc2lvbiA+PSBORVRYRU5fVkVSU0lPTl9DT0RFKDQsIDAsIDIyMikpCiAJCWFkYXB0ZXItPmNhcGFiaWxpdGllcyA9IE5YUkQzMihhZGFwdGVyLCBDUkJfRldfQ0FQQUJJTElUSUVTXzEpOwogCi0JYWRhcHRlci0+ZmxhZ3MgJj0gfk5FVFhFTl9OSUNfTFJPX0VOQUJMRUQ7Ci0KIAlpZiAoYWRhcHRlci0+YWh3LnBvcnRfdHlwZSA9PSBORVRYRU5fTklDX1hHQkUpIHsKIAkJYWRhcHRlci0+bnVtX3J4ZCA9IERFRkFVTFRfUkNWX0RFU0NSSVBUT1JTXzEwRzsKIAkJYWRhcHRlci0+bnVtX2p1bWJvX3J4ZCA9IE1BWF9KVU1CT19SQ1ZfREVTQ1JJUFRPUlNfMTBHOwpAQCAtOTkwLDcgKzk4OCw3IEBACiAJaWYgKE5YX0lTX1JFVklTSU9OX1AzKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCkpCiAJCW5ldHhlbl9jb25maWdfaW50cl9jb2FsZXNjZShhZGFwdGVyKTsKIAotCWlmIChhZGFwdGVyLT5jYXBhYmlsaXRpZXMgJiBOWF9GV19DQVBBQklMSVRZX0hXX0xSTykKKwlpZiAobmV0ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfTFJPKQogCQluZXR4ZW5fY29uZmlnX2h3X2xybyhhZGFwdGVyLCBORVRYRU5fTklDX0xST19FTkFCTEVEKTsKIAogCW5ldHhlbl9uYXBpX2VuYWJsZShhZGFwdGVyKTsKQEAgLTEyNzcsNiArMTI3NSw3IEBACiAJaW50IGkgPSAwLCBlcnI7CiAJaW50IHBjaV9mdW5jX2lkID0gUENJX0ZVTkMocGRldi0+ZGV2Zm4pOwogCXVpbnQ4X3QgcmV2aXNpb25faWQ7CisJdTMyIHZhbDsKIAogCWlmIChwZGV2LT5yZXZpc2lvbiA+PSBOWF9QM19BMCAmJiBwZGV2LT5yZXZpc2lvbiA8PSBOWF9QM19CMSkgewogCQlwcl93YXJuaW5nKCIlczogY2hpcCByZXZpc2lvbnMgYmV0d2VlbiAweCV4LTB4JXggIgpAQCAtMTM1Miw4ICsxMzUxLDkgQEAKIAkJYnJlYWs7CiAJfQogCi0JaWYgKHJlc2V0X2RldmljZXMpIHsKLQkJaWYgKGFkYXB0ZXItPnBvcnRudW0gPT0gMCkgeworCWlmIChhZGFwdGVyLT5wb3J0bnVtID09IDApIHsKKwkJdmFsID0gTlhSRDMyKGFkYXB0ZXIsIE5YX0NSQl9ERVZfUkVGX0NPVU5UKTsKKwkJaWYgKHZhbCAhPSAweGZmZmZmZmZmICYmIHZhbCAhPSAwKSB7CiAJCQlOWFdSMzIoYWRhcHRlciwgTlhfQ1JCX0RFVl9SRUZfQ09VTlQsIDApOwogCQkJYWRhcHRlci0+bmVlZF9md19yZXNldCA9IDE7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25pNTIuYyBiL2RyaXZlcnMvbmV0L25pNTIuYwppbmRleCAzMzYxOGVkYy4uZDk3M2ZjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmk1Mi5jCisrKyBiL2RyaXZlcnMvbmV0L25pNTIuYwpAQCAtMzg4LDkgKzM4OCw5IEBACiBzdHJ1Y3QgbmV0X2RldmljZSAqIF9faW5pdCBuaTUyX3Byb2JlKGludCB1bml0KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IHByaXYpKTsKLQlzdGF0aWMgaW50IHBvcnRzW10gPSB7MHgzMDAsIDB4MjgwLCAweDM2MCAsIDB4MzIwICwgMHgzNDAsIDB9OworCXN0YXRpYyBjb25zdCBpbnQgcG9ydHNbXSA9IHsweDMwMCwgMHgyODAsIDB4MzYwLCAweDMyMCwgMHgzNDAsIDB9OworCWNvbnN0IGludCAqcG9ydDsKIAlzdHJ1Y3QgcHJpdiAqcDsKLQlpbnQgKnBvcnQ7CiAJaW50IGVyciA9IDA7CiAKIAlpZiAoIWRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25pNjUuYyBiL2RyaXZlcnMvbmV0L25pNjUuYwppbmRleCBkYTIyOGEwLi5jNzVhZTg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uaTY1LmMKKysrIGIvZHJpdmVycy9uZXQvbmk2NS5jCkBAIC0zNjEsOCArMzYxLDggQEAKIHN0cnVjdCBuZXRfZGV2aWNlICogX19pbml0IG5pNjVfcHJvYmUoaW50IHVuaXQpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGFsbG9jX2V0aGVyZGV2KDApOwotCXN0YXRpYyBpbnQgcG9ydHNbXSA9IHsweDM2MCwweDMwMCwweDMyMCwweDM0MCwgMH07Ci0JaW50ICpwb3J0OworCXN0YXRpYyBjb25zdCBpbnQgcG9ydHNbXSA9IHsgMHgzNjAsIDB4MzAwLCAweDMyMCwgMHgzNDAsIDAgfTsKKwljb25zdCBpbnQgKnBvcnQ7CiAJaW50IGVyciA9IDA7CiAKIAlpZiAoIWRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25pdS5jIGIvZHJpdmVycy9uZXQvbml1LmMKaW5kZXggNzgxZTM2OC4uMjU0MTMyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbml1LmMKKysrIGIvZHJpdmVycy9uZXQvbml1LmMKQEAgLTY1ODksNyArNjU4OSw3IEBACiAJCQkgICAgIChpcF9wcm90byA9PSBJUFBST1RPX1VEUCA/CiAJCQkgICAgICBUWEhEUl9DU1VNX1VEUCA6IFRYSERSX0NTVU1fU0NUUCkpOwogCi0JCXN0YXJ0ID0gc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSAtCisJCXN0YXJ0ID0gc2tiX2NoZWNrc3VtX3N0YXJ0X29mZnNldChza2IpIC0KIAkJCShwYWRfYnl0ZXMgKyBzaXplb2Yoc3RydWN0IHR4X3BrdF9oZHIpKTsKIAkJc3R1ZmYgPSBzdGFydCArIHNrYi0+Y3N1bV9vZmZzZXQ7CiAKQEAgLTk5MTcsNyArOTkxNyw3IEBACiAJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCiAJCXJldHVybiAwOwogCi0JZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwlmbHVzaF93b3JrX3N5bmMoJm5wLT5yZXNldF90YXNrKTsKIAluaXVfbmV0aWZfc3RvcChucCk7CiAKIAlkZWxfdGltZXJfc3luYygmbnAtPnRpbWVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjaF9nYmUvcGNoX2diZV9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9wY2hfZ2JlL3BjaF9nYmVfZXRodG9vbC5jCmluZGV4IGM4Y2MzMmMuLmM4Yzg3M2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjaF9nYmUvcGNoX2diZV9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvcGNoX2diZS9wY2hfZ2JlX2V0aHRvb2wuYwpAQCAtNDY5LDE4ICs0NjksNiBAQAogfQogCiAvKioKLSAqIHBjaF9nYmVfZ2V0X3R4X2NzdW0gLSBSZXBvcnQgd2hldGhlciB0cmFuc21pdCBjaGVja3N1bXMgYXJlIHR1cm5lZCBvbiBvciBvZmYKLSAqIEBuZXRkZXY6ICBOZXR3b3JrIGludGVyZmFjZSBkZXZpY2Ugc3RydWN0dXJlCi0gKiBSZXR1cm5zCi0gKgl0cnVlKDEpOiAgQ2hlY2tzdW0gT24KLSAqCWZhbHNlKDApOiBDaGVja3N1bSBPZmYKLSAqLwotc3RhdGljIHUzMiBwY2hfZ2JlX2dldF90eF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCi17Ci0JcmV0dXJuIChuZXRkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9IV19DU1VNKSAhPSAwOwotfQotCi0vKioKICAqIHBjaF9nYmVfc2V0X3R4X2NzdW0gLSBUdXJuIHRyYW5zbWl0IGNoZWNrc3VtcyBvbiBvciBvZmYKICAqIEBuZXRkZXY6IE5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBzdHJ1Y3R1cmUKICAqIEBkYXRhOiAgIENoZWNrc3VtIG9uW3RydWVdIG9yIG9mZltmYWxzZV0KQEAgLTQ5MywxMSArNDgxLDcgQEAKIAlzdHJ1Y3QgcGNoX2diZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAogCWFkYXB0ZXItPnR4X2NzdW0gPSBkYXRhOwotCWlmIChkYXRhKQotCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfQ1NVTTsKLQllbHNlCi0JCW5ldGRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfSFdfQ1NVTTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZXRodG9vbF9vcF9zZXRfdHhfaXB2Nl9jc3VtKG5ldGRldiwgZGF0YSk7CiB9CiAKIC8qKgpAQCAtNTcyLDcgKzU1Niw2IEBACiAJLnNldF9wYXVzZXBhcmFtID0gcGNoX2diZV9zZXRfcGF1c2VwYXJhbSwKIAkuZ2V0X3J4X2NzdW0gPSBwY2hfZ2JlX2dldF9yeF9jc3VtLAogCS5zZXRfcnhfY3N1bSA9IHBjaF9nYmVfc2V0X3J4X2NzdW0sCi0JLmdldF90eF9jc3VtID0gcGNoX2diZV9nZXRfdHhfY3N1bSwKIAkuc2V0X3R4X2NzdW0gPSBwY2hfZ2JlX3NldF90eF9jc3VtLAogCS5nZXRfc3RyaW5ncyA9IHBjaF9nYmVfZ2V0X3N0cmluZ3MsCiAJLmdldF9ldGh0b29sX3N0YXRzID0gcGNoX2diZV9nZXRfZXRodG9vbF9zdGF0cywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjaF9nYmUvcGNoX2diZV9tYWluLmMgYi9kcml2ZXJzL25ldC9wY2hfZ2JlL3BjaF9nYmVfbWFpbi5jCmluZGV4IDAzYTFkMjguLmQ3MzU1MzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjaF9nYmUvcGNoX2diZV9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvcGNoX2diZS9wY2hfZ2JlX21haW4uYwpAQCAtMTUyMywxMiArMTUyMywxMSBAQAogCWludCBkZXNObzsKIAogCXNpemUgPSAoaW50KXNpemVvZihzdHJ1Y3QgcGNoX2diZV9idWZmZXIpICogdHhfcmluZy0+Y291bnQ7Ci0JdHhfcmluZy0+YnVmZmVyX2luZm8gPSB2bWFsbG9jKHNpemUpOworCXR4X3JpbmctPmJ1ZmZlcl9pbmZvID0gdnphbGxvYyhzaXplKTsKIAlpZiAoIXR4X3JpbmctPmJ1ZmZlcl9pbmZvKSB7CiAJCXByX2VycigiVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGJ1ZmZlciBpbmZvbWF0aW9uXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCW1lbXNldCh0eF9yaW5nLT5idWZmZXJfaW5mbywgMCwgc2l6ZSk7CiAKIAl0eF9yaW5nLT5zaXplID0gdHhfcmluZy0+Y291bnQgKiAoaW50KXNpemVvZihzdHJ1Y3QgcGNoX2diZV90eF9kZXNjKTsKIApAQCAtMTU3MywxMiArMTU3MiwxMSBAQAogCWludCBkZXNObzsKIAogCXNpemUgPSAoaW50KXNpemVvZihzdHJ1Y3QgcGNoX2diZV9idWZmZXIpICogcnhfcmluZy0+Y291bnQ7Ci0JcnhfcmluZy0+YnVmZmVyX2luZm8gPSB2bWFsbG9jKHNpemUpOworCXJ4X3JpbmctPmJ1ZmZlcl9pbmZvID0gdnphbGxvYyhzaXplKTsKIAlpZiAoIXJ4X3JpbmctPmJ1ZmZlcl9pbmZvKSB7CiAJCXByX2VycigiVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIHJlY2VpdmUgZGVzY3JpcHRvciByaW5nXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCW1lbXNldChyeF9yaW5nLT5idWZmZXJfaW5mbywgMCwgc2l6ZSk7CiAJcnhfcmluZy0+c2l6ZSA9IHJ4X3JpbmctPmNvdW50ICogKGludClzaXplb2Yoc3RydWN0IHBjaF9nYmVfcnhfZGVzYyk7CiAJcnhfcmluZy0+ZGVzYyA9CWRtYV9hbGxvY19jb2hlcmVudCgmcGRldi0+ZGV2LCByeF9yaW5nLT5zaXplLAogCQkJCQkgICAmcnhfcmluZy0+ZG1hLCBHRlBfS0VSTkVMKTsKQEAgLTIzMjEsNyArMjMxOSw3IEBACiAJbmV0ZGV2LT53YXRjaGRvZ190aW1lbyA9IFBDSF9HQkVfV0FUQ0hET0dfUEVSSU9EOwogCW5ldGlmX25hcGlfYWRkKG5ldGRldiwgJmFkYXB0ZXItPm5hcGksCiAJCSAgICAgICBwY2hfZ2JlX25hcGlfcG9sbCwgUENIX0dCRV9SWF9XRUlHSFQpOwotCW5ldGRldi0+ZmVhdHVyZXMgPSBORVRJRl9GX0hXX0NTVU0gfCBORVRJRl9GX0dSTzsKKwluZXRkZXYtPmZlYXR1cmVzID0gTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9JUFY2X0NTVU0gfCBORVRJRl9GX0dSTzsKIAlwY2hfZ2JlX3NldF9ldGh0b29sX29wcyhuZXRkZXYpOwogCiAJcGNoX2diZV9tYWNfcmVzZXRfaHcoJmFkYXB0ZXItPmh3KTsKQEAgLTIzNjAsOSArMjM1OCw5IEBACiAJcGNoX2diZV9jaGVja19vcHRpb25zKGFkYXB0ZXIpOwogCiAJaWYgKGFkYXB0ZXItPnR4X2NzdW0pCi0JCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19DU1VNOworCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfSVBWNl9DU1VNOwogCWVsc2UKLQkJbmV0ZGV2LT5mZWF0dXJlcyAmPSB+TkVUSUZfRl9IV19DU1VNOworCQluZXRkZXYtPmZlYXR1cmVzICY9IH4oTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9JUFY2X0NTVU0pOwogCiAJLyogaW5pdGlhbGl6ZSB0aGUgd29sIHNldHRpbmdzIGJhc2VkIG9uIHRoZSBlZXByb20gc2V0dGluZ3MgKi8KIAlhZGFwdGVyLT53YWtlX3VwX2V2dCA9IFBDSF9HQkVfV0xfSU5JVF9TRVRUSU5HOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhL2F4bmV0X2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvYXhuZXRfY3MuYwppbmRleCBmMTA0N2RkLi4xZjQyZjZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvYXhuZXRfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEvYXhuZXRfY3MuYwpAQCAtODc2LDcgKzg3Niw3IEBACiBzdGF0aWMgaW50IGF4X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBlaV9kZXZpY2UgKmVpX2xvY2FsID0gKHN0cnVjdCBlaV9kZXZpY2UgKikgbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZWlfZGV2aWNlICplaV9sb2NhbCA9IG5ldGRldl9wcml2KGRldik7CiAKIAkvKgogCSAqCUdyYWIgdGhlIHBhZ2UgbG9jayBzbyB3ZSBvd24gdGhlIHJlZ2lzdGVyIHNldCwgdGhlbiBjYWxsCkBAIC05MjcsNyArOTI3LDcgQEAKIHN0YXRpYyB2b2lkIGF4bmV0X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlsb25nIGU4MzkwX2Jhc2UgPSBkZXYtPmJhc2VfYWRkcjsKLQlzdHJ1Y3QgZWlfZGV2aWNlICplaV9sb2NhbCA9IChzdHJ1Y3QgZWlfZGV2aWNlICopIG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGVpX2RldmljZSAqZWlfbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCB0eHNyLCBpc3IsIHRpY2tzc29mYXIgPSBqaWZmaWVzIC0gZGV2X3RyYW5zX3N0YXJ0KGRldik7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtOTc0LDcgKzk3NCw3IEBACiAJCQkJCSAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlsb25nIGU4MzkwX2Jhc2UgPSBkZXYtPmJhc2VfYWRkcjsKLQlzdHJ1Y3QgZWlfZGV2aWNlICplaV9sb2NhbCA9IChzdHJ1Y3QgZWlfZGV2aWNlICopIG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGVpX2RldmljZSAqZWlfbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCBsZW5ndGgsIHNlbmRfbGVuZ3RoLCBvdXRwdXRfcGFnZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXU4IHBhY2tldFtFVEhfWkxFTl07CkBAIC0xMjcxLDcgKzEyNzEsNyBAQAogc3RhdGljIHZvaWQgZWlfdHhfaW50cihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWxvbmcgZTgzOTBfYmFzZSA9IGRldi0+YmFzZV9hZGRyOwotCXN0cnVjdCBlaV9kZXZpY2UgKmVpX2xvY2FsID0gKHN0cnVjdCBlaV9kZXZpY2UgKikgbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZWlfZGV2aWNlICplaV9sb2NhbCA9IG5ldGRldl9wcml2KGRldik7CiAJaW50IHN0YXR1cyA9IGluYihlODM5MF9iYXNlICsgRU4wX1RTUik7CiAgICAgCiAJLyoKQEAgLTEzNTUsNyArMTM1NSw3IEBACiBzdGF0aWMgdm9pZCBlaV9yZWNlaXZlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJbG9uZyBlODM5MF9iYXNlID0gZGV2LT5iYXNlX2FkZHI7Ci0Jc3RydWN0IGVpX2RldmljZSAqZWlfbG9jYWwgPSAoc3RydWN0IGVpX2RldmljZSAqKSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBlaV9kZXZpY2UgKmVpX2xvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1bnNpZ25lZCBjaGFyIHJ4aW5nX3BhZ2UsIHRoaXNfZnJhbWUsIG5leHRfZnJhbWU7CiAJdW5zaWduZWQgc2hvcnQgY3VycmVudF9vZmZzZXQ7CiAJaW50IHJ4X3BrdF9jb3VudCA9IDA7CkBAIC0xNTQwLDcgKzE1NDAsNyBAQAogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpnZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlsb25nIGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwotCXN0cnVjdCBlaV9kZXZpY2UgKmVpX2xvY2FsID0gKHN0cnVjdCBlaV9kZXZpY2UgKikgbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZWlfZGV2aWNlICplaV9sb2NhbCA9IG5ldGRldl9wcml2KGRldik7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKICAgICAKIAkvKiBJZiB0aGUgY2FyZCBpcyBzdG9wcGVkLCBqdXN0IHJldHVybiB0aGUgcHJlc2VudCBzdGF0cy4gKi8KQEAgLTE1ODksNyArMTU4OSw3IEBACiB7CiAJbG9uZyBlODM5MF9iYXNlID0gZGV2LT5iYXNlX2FkZHI7CiAJaW50IGk7Ci0Jc3RydWN0IGVpX2RldmljZSAqZWlfbG9jYWwgPSAoc3RydWN0IGVpX2RldmljZSopbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZWlfZGV2aWNlICplaV9sb2NhbCA9IG5ldGRldl9wcml2KGRldik7CiAKIAlpZiAoIShkZXYtPmZsYWdzJihJRkZfUFJPTUlTQ3xJRkZfQUxMTVVMVEkpKSkgewogCQltZW1zZXQoZWlfbG9jYWwtPm1jZmlsdGVyLCAwLCA4KTsKQEAgLTE2NDcsNyArMTY0Nyw3IEBACiB7CiAJYXhuZXRfZGV2X3QgKmluZm8gPSBQUklWKGRldik7CiAJbG9uZyBlODM5MF9iYXNlID0gZGV2LT5iYXNlX2FkZHI7Ci0Jc3RydWN0IGVpX2RldmljZSAqZWlfbG9jYWwgPSAoc3RydWN0IGVpX2RldmljZSAqKSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBlaV9kZXZpY2UgKmVpX2xvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgaTsKIAlpbnQgZW5kY2ZnID0gZWlfbG9jYWwtPndvcmQxNiA/ICgweDQ4IHwgRU5EQ0ZHX1dUUykgOiAweDQ4OwogICAgIApAQCAtMTcxMyw3ICsxNzEzLDcgQEAKIAkJCQkJCQkJaW50IHN0YXJ0X3BhZ2UpCiB7CiAJbG9uZyBlODM5MF9iYXNlID0gZGV2LT5iYXNlX2FkZHI7Ci0gCXN0cnVjdCBlaV9kZXZpY2UgKmVpX2xvY2FsIF9fYXR0cmlidXRlKCh1bnVzZWQpKSA9IChzdHJ1Y3QgZWlfZGV2aWNlICopIG5ldGRldl9wcml2KGRldik7CisgCXN0cnVjdCBlaV9kZXZpY2UgKmVpX2xvY2FsIF9fYXR0cmlidXRlKCh1bnVzZWQpKSA9IG5ldGRldl9wcml2KGRldik7CiAgICAgCiAJaWYgKGluYl9wKGU4MzkwX2Jhc2UpICYgRTgzOTBfVFJBTlMpIAogCXsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbWNpYS9ubWNsYW5fY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9ubWNsYW5fY3MuYwppbmRleCAwYTJiMGY5Li43NjY4M2Q5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhL25tY2xhbl9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9ubWNsYW5fY3MuYwpAQCAtMTI5MSw3ICsxMjkxLDcgQEAKIAogc3RhdGljIHZvaWQgdXBkYXRlQ1JDKGludCAqQ1JDLCBpbnQgYml0KQogewotICBpbnQgcG9seVtdPXsKKyAgc3RhdGljIGNvbnN0IGludCBwb2x5W109ewogICAgIDEsMSwxLDAsIDEsMSwwLDEsCiAgICAgMSwwLDEsMSwgMSwwLDAsMCwKICAgICAxLDAsMCwwLCAwLDAsMSwxLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeS5jCmluZGV4IDc2NzBhYWMuLmE4NDQ1YzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHkuYworKysgYi9kcml2ZXJzL25ldC9waHkvcGh5LmMKQEAgLTQ3LDExICs0NywxMSBAQAogCXByX2luZm8oIlBIWTogJXMgLSBMaW5rIGlzICVzIiwgZGV2X25hbWUoJnBoeWRldi0+ZGV2KSwKIAkJCXBoeWRldi0+bGluayA/ICJVcCIgOiAiRG93biIpOwogCWlmIChwaHlkZXYtPmxpbmspCi0JCXByaW50aygiIC0gJWQvJXMiLCBwaHlkZXYtPnNwZWVkLAorCQlwcmludGsoS0VSTl9DT05UICIgLSAlZC8lcyIsIHBoeWRldi0+c3BlZWQsCiAJCQkJRFVQTEVYX0ZVTEwgPT0gcGh5ZGV2LT5kdXBsZXggPwogCQkJCSJGdWxsIiA6ICJIYWxmIik7CiAKLQlwcmludGsoIlxuIik7CisJcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKIH0KIEVYUE9SVF9TWU1CT0wocGh5X3ByaW50X3N0YXR1cyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcF9nZW5lcmljLmMgYi9kcml2ZXJzL25ldC9wcHBfZ2VuZXJpYy5jCmluZGV4IDg5Mjk0YjQuLjY0NTY0ODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcF9nZW5lcmljLmMKKysrIGIvZHJpdmVycy9uZXQvcHBwX2dlbmVyaWMuYwpAQCAtMTEzNiw4ICsxMTM2LDcgQEAKIAkJICAgYSBmb3VyLWJ5dGUgUFBQIGhlYWRlciBvbiBlYWNoIHBhY2tldCAqLwogCQkqc2tiX3B1c2goc2tiLCAyKSA9IDE7CiAJCWlmIChwcHAtPnBhc3NfZmlsdGVyICYmCi0JCSAgICBza19ydW5fZmlsdGVyKHNrYiwgcHBwLT5wYXNzX2ZpbHRlciwKLQkJCQkgIHBwcC0+cGFzc19sZW4pID09IDApIHsKKwkJICAgIHNrX3J1bl9maWx0ZXIoc2tiLCBwcHAtPnBhc3NfZmlsdGVyKSA9PSAwKSB7CiAJCQlpZiAocHBwLT5kZWJ1ZyAmIDEpCiAJCQkJcHJpbnRrKEtFUk5fREVCVUcgIlBQUDogb3V0Ym91bmQgZnJhbWUgbm90IHBhc3NlZFxuIik7CiAJCQlrZnJlZV9za2Ioc2tiKTsKQEAgLTExNDUsOCArMTE0NCw3IEBACiAJCX0KIAkJLyogaWYgdGhpcyBwYWNrZXQgcGFzc2VzIHRoZSBhY3RpdmUgZmlsdGVyLCByZWNvcmQgdGhlIHRpbWUgKi8KIAkJaWYgKCEocHBwLT5hY3RpdmVfZmlsdGVyICYmCi0JCSAgICAgIHNrX3J1bl9maWx0ZXIoc2tiLCBwcHAtPmFjdGl2ZV9maWx0ZXIsCi0JCQkJICAgIHBwcC0+YWN0aXZlX2xlbikgPT0gMCkpCisJCSAgICAgIHNrX3J1bl9maWx0ZXIoc2tiLCBwcHAtPmFjdGl2ZV9maWx0ZXIpID09IDApKQogCQkJcHBwLT5sYXN0X3htaXQgPSBqaWZmaWVzOwogCQlza2JfcHVsbChza2IsIDIpOwogI2Vsc2UKQEAgLTE3NjMsOCArMTc2MSw3IEBACiAKIAkJCSpza2JfcHVzaChza2IsIDIpID0gMDsKIAkJCWlmIChwcHAtPnBhc3NfZmlsdGVyICYmCi0JCQkgICAgc2tfcnVuX2ZpbHRlcihza2IsIHBwcC0+cGFzc19maWx0ZXIsCi0JCQkJCSAgcHBwLT5wYXNzX2xlbikgPT0gMCkgeworCQkJICAgIHNrX3J1bl9maWx0ZXIoc2tiLCBwcHAtPnBhc3NfZmlsdGVyKSA9PSAwKSB7CiAJCQkJaWYgKHBwcC0+ZGVidWcgJiAxKQogCQkJCQlwcmludGsoS0VSTl9ERUJVRyAiUFBQOiBpbmJvdW5kIGZyYW1lICIKIAkJCQkJICAgICAgICJub3QgcGFzc2VkXG4iKTsKQEAgLTE3NzIsOCArMTc2OSw3IEBACiAJCQkJcmV0dXJuOwogCQkJfQogCQkJaWYgKCEocHBwLT5hY3RpdmVfZmlsdGVyICYmCi0JCQkgICAgICBza19ydW5fZmlsdGVyKHNrYiwgcHBwLT5hY3RpdmVfZmlsdGVyLAotCQkJCQkgICAgcHBwLT5hY3RpdmVfbGVuKSA9PSAwKSkKKwkJCSAgICAgIHNrX3J1bl9maWx0ZXIoc2tiLCBwcHAtPmFjdGl2ZV9maWx0ZXIpID09IDApKQogCQkJCXBwcC0+bGFzdF9yZWN2ID0gamlmZmllczsKIAkJCV9fc2tiX3B1bGwoc2tiLCAyKTsKIAkJfSBlbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHRwLmMgYi9kcml2ZXJzL25ldC9wcHRwLmMKaW5kZXggY2NiYzkxMy4uMTY0Y2ZhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHB0cC5jCisrKyBiL2RyaXZlcnMvbmV0L3BwdHAuYwpAQCAtMjc3LDcgKzI3Nyw3IEBACiAJaXBoLT50b3MgICAgICA9IDA7CiAJaXBoLT5kYWRkciAgICA9IHJ0LT5ydF9kc3Q7CiAJaXBoLT5zYWRkciAgICA9IHJ0LT5ydF9zcmM7Ci0JaXBoLT50dGwgICAgICA9IGRzdF9tZXRyaWMoJnJ0LT5kc3QsIFJUQVhfSE9QTElNSVQpOworCWlwaC0+dHRsICAgICAgPSBpcDRfZHN0X2hvcGxpbWl0KCZydC0+ZHN0KTsKIAlpcGgtPnRvdF9sZW4gID0gaHRvbnMoc2tiLT5sZW4pOwogCiAJc2tiX2RzdF9kcm9wKHNrYik7CkBAIC02NzMsOCArNjczLDcgQEAKIAlpbnQgZXJyID0gMDsKIAlwcl9pbmZvKCJQUFRQIGRyaXZlciB2ZXJzaW9uICIgUFBUUF9EUklWRVJfVkVSU0lPTiAiXG4iKTsKIAotCWNhbGxpZF9zb2NrID0gX192bWFsbG9jKChNQVhfQ0FMTElEICsgMSkgKiBzaXplb2Yodm9pZCAqKSwKLQkJR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8sIFBBR0VfS0VSTkVMKTsKKwljYWxsaWRfc29jayA9IHZ6YWxsb2MoKE1BWF9DQUxMSUQgKyAxKSAqIHNpemVvZih2b2lkICopKTsKIAlpZiAoIWNhbGxpZF9zb2NrKSB7CiAJCXByX2VycigiUFBUUDogY2Fubid0IGFsbG9jYXRlIG1lbW9yeVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHhhMTY4X2V0aC5jIGIvZHJpdmVycy9uZXQvcHhhMTY4X2V0aC5jCmluZGV4IDE4YzAyOTcuLjFiNjNjOGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3B4YTE2OF9ldGguYworKysgYi9kcml2ZXJzL25ldC9weGExNjhfZXRoLmMKQEAgLTE0NTAsMTYgKzE0NTAsMTEgQEAKIAlzdHJuY3B5KGluZm8tPmJ1c19pbmZvLCAiTi9BIiwgMzIpOwogfQogCi1zdGF0aWMgdTMyIHB4YTE2OF9nZXRfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXJldHVybiAhIW5ldGlmX2NhcnJpZXJfb2soZGV2KTsKLX0KLQogc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBweGExNjhfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9zZXR0aW5ncyA9IHB4YTE2OF9nZXRfc2V0dGluZ3MsCiAJLnNldF9zZXR0aW5ncyA9IHB4YTE2OF9zZXRfc2V0dGluZ3MsCiAJLmdldF9kcnZpbmZvID0gcHhhMTY4X2dldF9kcnZpbmZvLAotCS5nZXRfbGluayA9IHB4YTE2OF9nZXRfbGluaywKKwkuZ2V0X2xpbmsgPSBldGh0b29sX29wX2dldF9saW5rLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBweGExNjhfZXRoX25ldGRldl9vcHMgPSB7CkBAIC0xNjA3LDcgKzE2MDIsNyBAQAogCW1kaW9idXNfdW5yZWdpc3RlcihwZXAtPnNtaV9idXMpOwogCW1kaW9idXNfZnJlZShwZXAtPnNtaV9idXMpOwogCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7Ci0JZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwljYW5jZWxfd29ya19zeW5jKCZwZXAtPnR4X3RpbWVvdXRfdGFzayk7CiAJZnJlZV9uZXRkZXYoZGV2KTsKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3FsYTN4eHguYyBiL2RyaXZlcnMvbmV0L3FsYTN4eHguYwppbmRleCA3NDk2ZWQyLi4xYTM1ODRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9xbGEzeHh4LmMKKysrIGIvZHJpdmVycy9uZXQvcWxhM3h4eC5jCkBAIC0yNDY3LDcgKzI0NjcsNyBAQAogc3RhdGljIG5ldGRldl90eF90IHFsM3h4eF9zZW5kKHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiB7Ci0Jc3RydWN0IHFsM19hZGFwdGVyICpxZGV2ID0gKHN0cnVjdCBxbDNfYWRhcHRlciAqKW5ldGRldl9wcml2KG5kZXYpOworCXN0cnVjdCBxbDNfYWRhcHRlciAqcWRldiA9IG5ldGRldl9wcml2KG5kZXYpOwogCXN0cnVjdCBxbDN4eHhfcG9ydF9yZWdpc3RlcnMgX19pb21lbSAqcG9ydF9yZWdzID0KIAkJCXFkZXYtPm1lbV9tYXBfcmVnaXN0ZXJzOwogCXN0cnVjdCBxbF90eF9idWZfY2IgKnR4X2NiOwpAQCAtMzM5MCw3ICszMzkwLDcgQEAKIAogc3RhdGljIHZvaWQgcWxfZGlzcGxheV9kZXZfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKIHsKLQlzdHJ1Y3QgcWwzX2FkYXB0ZXIgKnFkZXYgPSAoc3RydWN0IHFsM19hZGFwdGVyICopbmV0ZGV2X3ByaXYobmRldik7CisJc3RydWN0IHFsM19hZGFwdGVyICpxZGV2ID0gbmV0ZGV2X3ByaXYobmRldik7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBxZGV2LT5wZGV2OwogCiAJbmV0ZGV2X2luZm8obmRldiwKQEAgLTM1NzMsNyArMzU3Myw3IEBACiAKIHN0YXRpYyBpbnQgcWwzeHh4X3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgdm9pZCAqcCkKIHsKLQlzdHJ1Y3QgcWwzX2FkYXB0ZXIgKnFkZXYgPSAoc3RydWN0IHFsM19hZGFwdGVyICopbmV0ZGV2X3ByaXYobmRldik7CisJc3RydWN0IHFsM19hZGFwdGVyICpxZGV2ID0gbmV0ZGV2X3ByaXYobmRldik7CiAJc3RydWN0IHFsM3h4eF9wb3J0X3JlZ2lzdGVycyBfX2lvbWVtICpwb3J0X3JlZ3MgPQogCQkJcWRldi0+bWVtX21hcF9yZWdpc3RlcnM7CiAJc3RydWN0IHNvY2thZGRyICphZGRyID0gcDsKQEAgLTM2MDgsNyArMzYwOCw3IEBACiAKIHN0YXRpYyB2b2lkIHFsM3h4eF90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogewotCXN0cnVjdCBxbDNfYWRhcHRlciAqcWRldiA9IChzdHJ1Y3QgcWwzX2FkYXB0ZXIgKiluZXRkZXZfcHJpdihuZGV2KTsKKwlzdHJ1Y3QgcWwzX2FkYXB0ZXIgKnFkZXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAogCW5ldGRldl9lcnIobmRldiwgIlJlc2V0dGluZy4uLlxuIik7CiAJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3FsY25pYy9xbGNuaWMuaCBiL2RyaXZlcnMvbmV0L3FsY25pYy9xbGNuaWMuaAppbmRleCA4ZWNjMTcwLi45YzJhMDJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljLmgKKysrIGIvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pYy5oCkBAIC0xLDI1ICsxLDggQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgLSBRTG9naWMgQ29ycG9yYXRpb24uCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUUxvZ2ljIHFsY25pYyBOSUMgRHJpdmVyCisgKiBDb3B5cmlnaHQgKGMpICAyMDA5LTIwMTAgUUxvZ2ljIENvcnBvcmF0aW9uCiAgKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCi0gKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sCi0gKiBNQSAgMDIxMTEtMTMwNywgVVNBLgotICoKLSAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uCi0gKiBpbiB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgotICoKKyAqIFNlZSBMSUNFTlNFLnFsY25pYyBmb3IgY29weXJpZ2h0IGFuZCBsaWNlbnNpbmcgZGV0YWlscy4KICAqLwogCiAjaWZuZGVmIF9RTENOSUNfSF8KQEAgLTUxLDggKzM0LDggQEAKIAogI2RlZmluZSBfUUxDTklDX0xJTlVYX01BSk9SIDUKICNkZWZpbmUgX1FMQ05JQ19MSU5VWF9NSU5PUiAwCi0jZGVmaW5lIF9RTENOSUNfTElOVVhfU1VCVkVSU0lPTiAxMQotI2RlZmluZSBRTENOSUNfTElOVVhfVkVSU0lPTklEICAiNS4wLjExIgorI2RlZmluZSBfUUxDTklDX0xJTlVYX1NVQlZFUlNJT04gMTQKKyNkZWZpbmUgUUxDTklDX0xJTlVYX1ZFUlNJT05JRCAgIjUuMC4xNCIKICNkZWZpbmUgUUxDTklDX0RSVl9JRENfVkVSICAweDAxCiAjZGVmaW5lIFFMQ05JQ19EUklWRVJfVkVSU0lPTiAgKChfUUxDTklDX0xJTlVYX01BSk9SIDw8IDE2KSB8XAogCQkgKF9RTENOSUNfTElOVVhfTUlOT1IgPDwgOCkgfCAoX1FMQ05JQ19MSU5VWF9TVUJWRVJTSU9OKSkKQEAgLTc5OCw3ICs3ODEsNiBAQAogI2RlZmluZSBRTENOSUNfSDJDX09QQ09ERV9HRVRfTkVUX1NUQVRTIAkJMTYKICNkZWZpbmUgUUxDTklDX0gyQ19PUENPREVfUFJPWFlfVVBEQVRFX1AyVgkJMTcKICNkZWZpbmUgUUxDTklDX0gyQ19PUENPREVfQ09ORklHX0lQQUREUiAJCTE4Ci0jZGVmaW5lIFFMQ05JQ19IMkNfT1BDT0RFX0NPTkZJR19MT09QQkFDSwkJMTkKICNkZWZpbmUgUUxDTklDX0gyQ19PUENPREVfUFJPWFlfU1RPUF9ET05FCQkyMAogI2RlZmluZSBRTENOSUNfSDJDX09QQ09ERV9HRVRfTElOS0VWRU5UIAkJMjEKICNkZWZpbmUgUUxDTklDX0MyQ19PUENPREUJCQkJMjIKQEAgLTkyMyw2ICs5MDUsNyBAQAogI2RlZmluZSBRTENOSUNfTUFDU1BPT0YJCQkweDIwMAogI2RlZmluZSBRTENOSUNfTUFDX09WRVJSSURFX0RJU0FCTEVECTB4NDAwCiAjZGVmaW5lIFFMQ05JQ19QUk9NSVNDX0RJU0FCTEVECQkweDgwMAorI2RlZmluZSBRTENOSUNfTkVFRF9GTFIJCQkweDEwMDAKICNkZWZpbmUgUUxDTklDX0lTX01TSV9GQU1JTFkoYWRhcHRlcikgXAogCSgoYWRhcHRlciktPmZsYWdzICYgKFFMQ05JQ19NU0lfRU5BQkxFRCB8IFFMQ05JQ19NU0lYX0VOQUJMRUQpKQogCkBAIC05NDIsNiArOTI1LDcgQEAKIAogI2RlZmluZSBRTENOSUNfSU5URVJSVVBUX1RFU1QJCTEKICNkZWZpbmUgUUxDTklDX0xPT1BCQUNLX1RFU1QJCTIKKyNkZWZpbmUgUUxDTklDX0xFRF9URVNUCQkzCiAKICNkZWZpbmUgUUxDTklDX0ZJTFRFUl9BR0UJODAKICNkZWZpbmUgUUxDTklDX1JFQUREX0FHRQkyMApAQCAtMTEyNiw4ICsxMTEwLDcgQEAKIC8qIFJldHVybiBjb2RlcyBmb3IgRXJyb3IgaGFuZGxpbmcgKi8KICNkZWZpbmUgUUxfU1RBVFVTX0lOVkFMSURfUEFSQU0JLTEKIAotI2RlZmluZSBNQVhfQlcJCQkxMDAKLSNkZWZpbmUgTUlOX0JXCQkJMQorI2RlZmluZSBNQVhfQlcJCQkxMDAJLyogJSBvZiBsaW5rIHNwZWVkICovCiAjZGVmaW5lIE1BWF9WTEFOX0lECQk0MDk1CiAjZGVmaW5lIE1JTl9WTEFOX0lECQkyCiAjZGVmaW5lIE1BWF9UWF9RVUVVRVMJCTEKQEAgLTExMzUsNyArMTExOCw3IEBACiAjZGVmaW5lIERFRkFVTFRfTUFDX0xFQVJOCTEKIAogI2RlZmluZSBJU19WQUxJRF9WTEFOKHZsYW4pCSh2bGFuID49IE1JTl9WTEFOX0lEICYmIHZsYW4gPCBNQVhfVkxBTl9JRCkKLSNkZWZpbmUgSVNfVkFMSURfQlcoYncpCQkoYncgPj0gTUlOX0JXICYmIGJ3IDw9IE1BWF9CVykKKyNkZWZpbmUgSVNfVkFMSURfQlcoYncpCQkoYncgPD0gTUFYX0JXKQogI2RlZmluZSBJU19WQUxJRF9UWF9RVUVVRVMocXVlKQkocXVlID4gMCAmJiBxdWUgPD0gTUFYX1RYX1FVRVVFUykKICNkZWZpbmUgSVNfVkFMSURfUlhfUVVFVUVTKHF1ZSkJKHF1ZSA+IDAgJiYgcXVlIDw9IE1BWF9SWF9RVUVVRVMpCiAKQEAgLTEzMTQsMjEgKzEyOTcsMTUgQEAKIGludCBxbGNuaWNfc2VuZF9scm9fY2xlYW51cChzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpOwogdm9pZCBxbGNuaWNfdXBkYXRlX2NtZF9wcm9kdWNlcihzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCXN0cnVjdCBxbGNuaWNfaG9zdF90eF9yaW5nICp0eF9yaW5nKTsKLXZvaWQgcWxjbmljX2NsZWFyX2lsYl9tb2RlKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcik7Ci1pbnQgcWxjbmljX3NldF9pbGJfbW9kZShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpOwogdm9pZCBxbGNuaWNfZmV0Y2hfbWFjKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqLCB1MzIsIHUzMiwgdTgsIHU4ICopOwogCiAvKiBGdW5jdGlvbnMgZnJvbSBxbGNuaWNfbWFpbi5jICovCi1pbnQgcWxjbmljX3JlcXVlc3RfcXVpc2NlbnRfbW9kZShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpOwotdm9pZCBxbGNuaWNfY2xlYXJfcXVpc2NlbnRfbW9kZShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpOwogaW50IHFsY25pY19yZXNldF9jb250ZXh0KHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqKTsKIHUzMiBxbGNuaWNfaXNzdWVfY21kKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwKIAl1MzIgcGNpX2ZuLCB1MzIgdmVyc2lvbiwgdTMyIGFyZzEsIHUzMiBhcmcyLCB1MzIgYXJnMywgdTMyIGNtZCk7CiB2b2lkIHFsY25pY19kaWFnX2ZyZWVfcmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBtYXhfc2RzX3JpbmdzKTsKIGludCBxbGNuaWNfZGlhZ19hbGxvY19yZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHRlc3QpOwotaW50IHFsY25pY19jaGVja19sb29wYmFja19idWZmKHVuc2lnbmVkIGNoYXIgKmRhdGEpOwogbmV0ZGV2X3R4X3QgcWxjbmljX3htaXRfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7Ci12b2lkIHFsY25pY19wcm9jZXNzX3Jjdl9yaW5nX2RpYWcoc3RydWN0IHFsY25pY19ob3N0X3Nkc19yaW5nICpzZHNfcmluZyk7CiAKIC8qIE1hbmFnZW1lbnQgZnVuY3Rpb25zICovCiBpbnQgcWxjbmljX2dldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKiwgdTgqKTsKQEAgLTEzNzcsNiArMTM1NCw4IEBACiAJCSIzMjAwIFNlcmllcyBTaW5nbGUgUG9ydCAxMEdiIEludGVsbGlnZW50IEV0aGVybmV0IEFkYXB0ZXIifSwKIAl7MHgxMDc3LCAweDgwMjAsIDB4MTAzYywgMHgzNzMzLAogCQkiTkM1MjNTRlAgMTBHYiAyLXBvcnQgU2VydmVyIEFkYXB0ZXIifSwKKwl7MHgxMDc3LCAweDgwMjAsIDB4MTAzYywgMHgzMzQ2LAorCQkiQ04xMDAwUSBEdWFsIFBvcnQgQ29udmVyZ2VkIE5ldHdvcmsgQWRhcHRlciJ9LAogCXsweDEwNzcsIDB4ODAyMCwgMHgwLCAweDAsICJjTE9NODIxNCAxLzEwR2JFIENvbnRyb2xsZXIifSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3FsY25pYy9xbGNuaWNfY3R4LmMgYi9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX2N0eC5jCmluZGV4IDFjZGMwNWQuLjI3NjMxZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3FsY25pYy9xbGNuaWNfY3R4LmMKKysrIGIvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pY19jdHguYwpAQCAtMSwyNSArMSw4IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IC0gUUxvZ2ljIENvcnBvcmF0aW9uLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFFMb2dpYyBxbGNuaWMgTklDIERyaXZlcgorICogQ29weXJpZ2h0IChjKSAgMjAwOS0yMDEwIFFMb2dpYyBDb3Jwb3JhdGlvbgogICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgotICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgIDAyMTExLTEzMDcsIFVTQS4KLSAqCi0gKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbgotICogaW4gdGhlIGZpbGUgY2FsbGVkICJDT1BZSU5HIi4KLSAqCisgKiBTZWUgTElDRU5TRS5xbGNuaWMgZm9yIGNvcHlyaWdodCBhbmQgbGljZW5zaW5nIGRldGFpbHMuCiAgKi8KIAogI2luY2x1ZGUgInFsY25pYy5oIgpAQCAtNDgwLDYgKzQ2MywxMSBAQAogewogCWludCBlcnI7CiAKKwlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBRTENOSUNfTkVFRF9GTFIpIHsKKwkJcGNpX3Jlc2V0X2Z1bmN0aW9uKGFkYXB0ZXItPnBkZXYpOworCQlhZGFwdGVyLT5mbGFncyAmPSB+UUxDTklDX05FRURfRkxSOworCX0KKwogCWVyciA9IHFsY25pY19md19jbWRfY3JlYXRlX3J4X2N0eChhZGFwdGVyKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pY19ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX2V0aHRvb2wuYwppbmRleCBlYzIxZDI0Li4xZTdhZjcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX2V0aHRvb2wuYwpAQCAtMSwyNSArMSw4IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IC0gUUxvZ2ljIENvcnBvcmF0aW9uLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFFMb2dpYyBxbGNuaWMgTklDIERyaXZlcgorICogQ29weXJpZ2h0IChjKSAgMjAwOS0yMDEwIFFMb2dpYyBDb3Jwb3JhdGlvbgogICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgotICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgIDAyMTExLTEzMDcsIFVTQS4KLSAqCi0gKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbgotICogaW4gdGhlIGZpbGUgY2FsbGVkICJDT1BZSU5HIi4KLSAqCisgKiBTZWUgTElDRU5TRS5xbGNuaWMgZm9yIGNvcHlyaWdodCBhbmQgbGljZW5zaW5nIGRldGFpbHMuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CkBAIC0xMDEsOCArODQsNyBAQAogc3RhdGljIGNvbnN0IGNoYXIgcWxjbmljX2dzdHJpbmdzX3Rlc3RbXVtFVEhfR1NUUklOR19MRU5dID0gewogCSJSZWdpc3Rlcl9UZXN0X29uX29mZmxpbmUiLAogCSJMaW5rX1Rlc3Rfb25fb2ZmbGluZSIsCi0JIkludGVycnVwdF9UZXN0X29mZmxpbmUiLAotCSJMb29wYmFja19UZXN0X29mZmxpbmUiCisJIkludGVycnVwdF9UZXN0X29mZmxpbmUiCiB9OwogCiAjZGVmaW5lIFFMQ05JQ19URVNUX0xFTglBUlJBWV9TSVpFKHFsY25pY19nc3RyaW5nc190ZXN0KQpAQCAtNjQzLDEwNCArNjI1LDYgQEAKIAl9CiB9CiAKLSNkZWZpbmUgUUxDX0lMQl9QS1RfU0laRSA2NAotI2RlZmluZSBRTENfTlVNX0lMQl9QS1QJMTYKLSNkZWZpbmUgUUxDX0lMQl9NQVhfUkNWX0xPT1AgMTAKLQotc3RhdGljIHZvaWQgcWxjbmljX2NyZWF0ZV9sb29wYmFja19idWZmKHVuc2lnbmVkIGNoYXIgKmRhdGEpCi17Ci0JdW5zaWduZWQgY2hhciByYW5kb21fZGF0YVtdID0gezB4YTgsIDB4MDYsIDB4NDUsIDB4MDB9OwotCW1lbXNldChkYXRhLCAweDRlLCBRTENfSUxCX1BLVF9TSVpFKTsKLQltZW1zZXQoZGF0YSwgMHhmZiwgMTIpOwotCW1lbWNweShkYXRhICsgMTIsIHJhbmRvbV9kYXRhLCBzaXplb2YocmFuZG9tX2RhdGEpKTsKLX0KLQotaW50IHFsY25pY19jaGVja19sb29wYmFja19idWZmKHVuc2lnbmVkIGNoYXIgKmRhdGEpCi17Ci0JdW5zaWduZWQgY2hhciBidWZmW1FMQ19JTEJfUEtUX1NJWkVdOwotCXFsY25pY19jcmVhdGVfbG9vcGJhY2tfYnVmZihidWZmKTsKLQlyZXR1cm4gbWVtY21wKGRhdGEsIGJ1ZmYsIFFMQ19JTEJfUEtUX1NJWkUpOwotfQotCi1zdGF0aWMgaW50IHFsY25pY19kb19pbGJfdGVzdChzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0Jc3RydWN0IHFsY25pY19yZWN2X2NvbnRleHQgKnJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4OwotCXN0cnVjdCBxbGNuaWNfaG9zdF9zZHNfcmluZyAqc2RzX3JpbmcgPSAmcmVjdl9jdHgtPnNkc19yaW5nc1swXTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCWludCBpLCBsb29wLCBjbnQgPSAwOwotCi0JZm9yIChpID0gMDsgaSA8IFFMQ19OVU1fSUxCX1BLVDsgaSsrKSB7Ci0JCXNrYiA9IGRldl9hbGxvY19za2IoUUxDX0lMQl9QS1RfU0laRSk7Ci0JCXFsY25pY19jcmVhdGVfbG9vcGJhY2tfYnVmZihza2ItPmRhdGEpOwotCQlza2JfcHV0KHNrYiwgUUxDX0lMQl9QS1RfU0laRSk7Ci0KLQkJYWRhcHRlci0+ZGlhZ19jbnQgPSAwOwotCQlxbGNuaWNfeG1pdF9mcmFtZShza2IsIGFkYXB0ZXItPm5ldGRldik7Ci0KLQkJbG9vcCA9IDA7Ci0JCWRvIHsKLQkJCW1zbGVlcCgxKTsKLQkJCXFsY25pY19wcm9jZXNzX3Jjdl9yaW5nX2RpYWcoc2RzX3JpbmcpOwotCQl9IHdoaWxlIChsb29wKysgPCBRTENfSUxCX01BWF9SQ1ZfTE9PUCAmJgotCQkJICFhZGFwdGVyLT5kaWFnX2NudCk7Ci0KLQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQotCQlpZiAoIWFkYXB0ZXItPmRpYWdfY250KQotCQkJZGV2X3dhcm4oJmFkYXB0ZXItPnBkZXYtPmRldiwgIklMQiBUZXN0OiAlZHRoIHBhY2tldCIKLQkJCQkiIG5vdCByZWNldmllZFxuIiwgaSArIDEpOwotCQllbHNlCi0JCQljbnQrKzsKLQl9Ci0JaWYgKGNudCAhPSBpKSB7Ci0JCWRldl93YXJuKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJJTEIgVGVzdCBmYWlsZWRcbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHFsY25pY19sb29wYmFja190ZXN0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCi17Ci0Jc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQlpbnQgbWF4X3Nkc19yaW5ncyA9IGFkYXB0ZXItPm1heF9zZHNfcmluZ3M7Ci0JaW50IHJldDsKLQotCWlmIChhZGFwdGVyLT5vcF9tb2RlID09IFFMQ05JQ19OT05fUFJJVl9GVU5DKSB7Ci0JCWRldl93YXJuKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJMb29wYmFjayB0ZXN0IG5vdCBzdXBwb3J0ZWQiCi0JCQkJImZvciBub24gcHJpdmlsZWdlIGZ1bmN0aW9uXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKHRlc3RfYW5kX3NldF9iaXQoX19RTENOSUNfUkVTRVRUSU5HLCAmYWRhcHRlci0+c3RhdGUpKQotCQlyZXR1cm4gLUVJTzsKLQotCWlmIChxbGNuaWNfcmVxdWVzdF9xdWlzY2VudF9tb2RlKGFkYXB0ZXIpKSB7Ci0JCWNsZWFyX2JpdChfX1FMQ05JQ19SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSk7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCXJldCA9IHFsY25pY19kaWFnX2FsbG9jX3JlcyhuZXRkZXYsIFFMQ05JQ19MT09QQkFDS19URVNUKTsKLQlpZiAocmV0KQotCQlnb3RvIGNsZWFyX2l0OwotCi0JcmV0ID0gcWxjbmljX3NldF9pbGJfbW9kZShhZGFwdGVyKTsKLQlpZiAocmV0KQotCQlnb3RvIGRvbmU7Ci0KLQlyZXQgPSBxbGNuaWNfZG9faWxiX3Rlc3QoYWRhcHRlcik7Ci0KLQlxbGNuaWNfY2xlYXJfaWxiX21vZGUoYWRhcHRlcik7Ci0KLWRvbmU6Ci0JcWxjbmljX2RpYWdfZnJlZV9yZXMobmV0ZGV2LCBtYXhfc2RzX3JpbmdzKTsKLQotY2xlYXJfaXQ6Ci0JcWxjbmljX2NsZWFyX3F1aXNjZW50X21vZGUoYWRhcHRlcik7Ci0JYWRhcHRlci0+bWF4X3Nkc19yaW5ncyA9IG1heF9zZHNfcmluZ3M7Ci0JY2xlYXJfYml0KF9fUUxDTklDX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKTsKLQlyZXR1cm4gcmV0OwotfQotCiBzdGF0aWMgaW50IHFsY25pY19pcnFfdGVzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CkBAIC03OTMsOSArNjc3LDYgQEAKIAkJaWYgKGRhdGFbMl0pCiAJCQlldGhfdGVzdC0+ZmxhZ3MgfD0gRVRIX1RFU1RfRkxfRkFJTEVEOwogCi0JCWRhdGFbM10gPSBxbGNuaWNfbG9vcGJhY2tfdGVzdChkZXYpOwotCQlpZiAoZGF0YVszXSkKLQkJCWV0aF90ZXN0LT5mbGFncyB8PSBFVEhfVEVTVF9GTF9GQUlMRUQ7CiAKIAl9CiB9CkBAIC05MjUsOSArODA2LDEwIEBACiAKIAkJZGV2LT5mZWF0dXJlcyAmPSB+TkVUSUZfRl9MUk87CiAJCXFsY25pY19zZW5kX2xyb19jbGVhbnVwKGFkYXB0ZXIpOworCQlkZXZfaW5mbygmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJCQkiZGlzYWJsaW5nIExSTyBhcyByeF9jc3VtIGlzIG9mZlxuIik7CiAJfQogCWFkYXB0ZXItPnJ4X2NzdW0gPSAhIWRhdGE7Ci0JZGV2X2luZm8oJmFkYXB0ZXItPnBkZXYtPmRldiwgImRpc2FibGluZyBMUk8gYXMgcnhfY3N1bSBpcyBvZmZcbiIpOwogCXJldHVybiAwOwogfQogCkBAIC05NTIsMTYgKzgzNCwyNyBAQAogc3RhdGljIGludCBxbGNuaWNfYmxpbmtfbGVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiB2YWwpCiB7CiAJc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgbWF4X3Nkc19yaW5ncyA9IGFkYXB0ZXItPm1heF9zZHNfcmluZ3M7CisJaW50IGRldl9kb3duID0gMDsKIAlpbnQgcmV0OwogCi0JaWYgKCF0ZXN0X2JpdChfX1FMQ05JQ19ERVZfVVAsICZhZGFwdGVyLT5zdGF0ZSkpCi0JCXJldHVybiAtRUlPOworCWlmICghdGVzdF9iaXQoX19RTENOSUNfREVWX1VQLCAmYWRhcHRlci0+c3RhdGUpKSB7CisJCWRldl9kb3duID0gMTsKKwkJaWYgKHRlc3RfYW5kX3NldF9iaXQoX19RTENOSUNfUkVTRVRUSU5HLCAmYWRhcHRlci0+c3RhdGUpKQorCQkJcmV0dXJuIC1FSU87CisKKwkJcmV0ID0gcWxjbmljX2RpYWdfYWxsb2NfcmVzKGRldiwgUUxDTklDX0xFRF9URVNUKTsKKwkJaWYgKHJldCkgeworCQkJY2xlYXJfYml0KF9fUUxDTklDX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CiAKIAlyZXQgPSBhZGFwdGVyLT5uaWNfb3BzLT5jb25maWdfbGVkKGFkYXB0ZXIsIDEsIDB4Zik7CiAJaWYgKHJldCkgewogCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsCiAJCQkiRmFpbGVkIHRvIHNldCBMRUQgYmxpbmsgc3RhdGUuXG4iKTsKLQkJcmV0dXJuIHJldDsKKwkJZ290byBkb25lOwogCX0KIAogCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKHZhbCAqIDEwMDApOwpAQCAtOTcwLDEwICs4NjMsMTYgQEAKIAlpZiAocmV0KSB7CiAJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwKIAkJCSJGYWlsZWQgdG8gcmVzZXQgTEVEIGJsaW5rIHN0YXRlLlxuIik7Ci0JCXJldHVybiByZXQ7CisJCWdvdG8gZG9uZTsKIAl9CiAKLQlyZXR1cm4gMDsKK2RvbmU6CisJaWYgKGRldl9kb3duKSB7CisJCXFsY25pY19kaWFnX2ZyZWVfcmVzKGRldiwgbWF4X3Nkc19yaW5ncyk7CisJCWNsZWFyX2JpdChfX1FMQ05JQ19SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSk7CisJfQorCXJldHVybiByZXQ7CisKIH0KIAogc3RhdGljIHZvaWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3FsY25pYy9xbGNuaWNfaGRyLmggYi9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX2hkci5oCmluZGV4IDQyOTBiODAuLjcyNmVmNTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3FsY25pYy9xbGNuaWNfaGRyLmgKKysrIGIvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pY19oZHIuaApAQCAtMSwyNSArMSw4IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IC0gUUxvZ2ljIENvcnBvcmF0aW9uLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFFMb2dpYyBxbGNuaWMgTklDIERyaXZlcgorICogQ29weXJpZ2h0IChjKSAgMjAwOS0yMDEwIFFMb2dpYyBDb3Jwb3JhdGlvbgogICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgotICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgIDAyMTExLTEzMDcsIFVTQS4KLSAqCi0gKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbgotICogaW4gdGhlIGZpbGUgY2FsbGVkICJDT1BZSU5HIi4KLSAqCisgKiBTZWUgTElDRU5TRS5xbGNuaWMgZm9yIGNvcHlyaWdodCBhbmQgbGljZW5zaW5nIGRldGFpbHMuCiAgKi8KIAogI2lmbmRlZiBfX1FMQ05JQ19IRFJfSF8KQEAgLTYzOCw3ICs2MjEsNyBAQAogI2RlZmluZSBQQ0lYX0lOVF9NQVNLCQkoMHgxMDEwNCkKIAogI2RlZmluZSBQQ0lYX09DTV9XSU5ET1cJCSgweDEwODAwKQotI2RlZmluZSBQQ0lYX09DTV9XSU5ET1dfUkVHKGZ1bmMpCShQQ0lYX09DTV9XSU5ET1cgKyAweDIwICogKGZ1bmMpKQorI2RlZmluZSBQQ0lYX09DTV9XSU5ET1dfUkVHKGZ1bmMpCShQQ0lYX09DTV9XSU5ET1cgKyAweDQgKiAoZnVuYykpCiAKICNkZWZpbmUgUENJWF9UQVJHRVRfU1RBVFVTCSgweDEwMTE4KQogI2RlZmluZSBQQ0lYX1RBUkdFVF9TVEFUVVNfRjEJKDB4MTAxNjApCkBAIC03MjIsNyArNzA1LDcgQEAKICNkZWZpbmUgUUxDTklDX0RFVl9OUEFSX09QRVIJCTEgLyogTlBBUiBPcGVyYXRpb25hbCAqLwogI2RlZmluZSBRTENOSUNfREVWX05QQVJfT1BFUl9USU1FTwkzMCAvKiBPcGVyYXRpb25hbCB0aW1lIG91dCAqLwogCi0jZGVmaW5lIFFMQ19ERVZfQ0hFQ0tfQUNUSVZFKFZBTCwgRk4pCQkoKFZBTCkgJj0gKDEgPDwgKEZOICogNCkpKQorI2RlZmluZSBRTENfREVWX0NIRUNLX0FDVElWRShWQUwsIEZOKQkJKChWQUwpICYgKDEgPDwgKEZOICogNCkpKQogI2RlZmluZSBRTENfREVWX1NFVF9SRUZfQ05UKFZBTCwgRk4pCQkoKFZBTCkgfD0gKDEgPDwgKEZOICogNCkpKQogI2RlZmluZSBRTENfREVWX0NMUl9SRUZfQ05UKFZBTCwgRk4pCQkoKFZBTCkgJj0gfigxIDw8IChGTiAqIDQpKSkKICNkZWZpbmUgUUxDX0RFVl9TRVRfUlNUX1JEWShWQUwsIEZOKQkJKChWQUwpIHw9ICgxIDw8IChGTiAqIDQpKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3FsY25pYy9xbGNuaWNfaHcuYyBiL2RyaXZlcnMvbmV0L3FsY25pYy9xbGNuaWNfaHcuYwppbmRleCA3YTQ3YTJhLi42MTY5NDBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX2h3LmMKKysrIGIvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pY19ody5jCkBAIC0xLDI1ICsxLDggQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgLSBRTG9naWMgQ29ycG9yYXRpb24uCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUUxvZ2ljIHFsY25pYyBOSUMgRHJpdmVyCisgKiBDb3B5cmlnaHQgKGMpICAyMDA5LTIwMTAgUUxvZ2ljIENvcnBvcmF0aW9uCiAgKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCi0gKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sCi0gKiBNQSAgMDIxMTEtMTMwNywgVVNBLgotICoKLSAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uCi0gKiBpbiB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgotICoKKyAqIFNlZSBMSUNFTlNFLnFsY25pYyBmb3IgY29weXJpZ2h0IGFuZCBsaWNlbnNpbmcgZGV0YWlscy4KICAqLwogCiAjaW5jbHVkZSAicWxjbmljLmgiCkBAIC0zOTgsNyArMzgxLDcgQEAKIAlyZXR1cm4gcWxjbmljX3NlbmRfY21kX2Rlc2NzKGFkYXB0ZXIsIChzdHJ1Y3QgY21kX2Rlc2NfdHlwZTAgKikmcmVxLCAxKTsKIH0KIAotc3RhdGljIGludCBxbGNuaWNfbmljX2FkZF9tYWMoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLCB1OCAqYWRkcikKK3N0YXRpYyBpbnQgcWxjbmljX25pY19hZGRfbWFjKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwgY29uc3QgdTggKmFkZHIpCiB7CiAJc3RydWN0IGxpc3RfaGVhZCAqaGVhZDsKIAlzdHJ1Y3QgcWxjbmljX21hY19saXN0X3MgKmN1cjsKQEAgLTQzMiw3ICs0MTUsOSBAQAogewogCXN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IG5ldGRldl9od19hZGRyICpoYTsKLQl1OCBiY2FzdF9hZGRyW0VUSF9BTEVOXSA9IHsgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiB9OworCXN0YXRpYyBjb25zdCB1OCBiY2FzdF9hZGRyW0VUSF9BTEVOXSA9IHsKKwkJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZgorCX07CiAJdTMyIG1vZGUgPSBWUE9SVF9NSVNTX01PREVfRFJPUDsKIAogCWlmICghdGVzdF9iaXQoX19RTENOSUNfRldfQVRUQUNIRUQsICZhZGFwdGVyLT5zdGF0ZSkpCkBAIC02MzgsMTAgKzYyMywxMSBAQAogCXU2NCB3b3JkOwogCWludCBpLCBydjsKIAotCWNvbnN0IHU2NCBrZXlbXSA9IHsgMHhiZWFjMDFmYTZhNDJiNzNiVUxMLCAweDgwMzBmMjBjNzdjYjJkYTNVTEwsCi0JCQkweGFlN2IzMGI0ZDBjYTJiY2JVTEwsIDB4NDNhMzhmYjA0MTY3MjUzZFVMTCwKLQkJCTB4MjU1YjBlYzI2ZDVhNTZkYVVMTCB9OwotCisJc3RhdGljIGNvbnN0IHU2NCBrZXlbXSA9IHsKKwkJMHhiZWFjMDFmYTZhNDJiNzNiVUxMLCAweDgwMzBmMjBjNzdjYjJkYTNVTEwsCisJCTB4YWU3YjMwYjRkMGNhMmJjYlVMTCwgMHg0M2EzOGZiMDQxNjcyNTNkVUxMLAorCQkweDI1NWIwZWMyNmQ1YTU2ZGFVTEwKKwl9OwogCiAJbWVtc2V0KCZyZXEsIDAsIHNpemVvZihzdHJ1Y3QgcWxjbmljX25pY19yZXEpKTsKIAlyZXEucWhkciA9IGNwdV90b19sZTY0KFFMQ05JQ19IT1NUX1JFUVVFU1QgPDwgMjMpOwpAQCAtMTIzNCw1NiArMTIyMCwzIEBACiAKIAlyZXR1cm4gcnY7CiB9Ci0KLXN0YXRpYyBpbnQgcWxjbmljX3NldF9md19sb29wYmFjayhzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBmbGFnKQotewotCXN0cnVjdCBxbGNuaWNfbmljX3JlcQlyZXE7Ci0JaW50CQkJcnY7Ci0JdTY0CQkJd29yZDsKLQotCW1lbXNldCgmcmVxLCAwLCBzaXplb2Yoc3RydWN0IHFsY25pY19uaWNfcmVxKSk7Ci0JcmVxLnFoZHIgPSBjcHVfdG9fbGU2NChRTENOSUNfSE9TVF9SRVFVRVNUIDw8IDIzKTsKLQotCXdvcmQgPSBRTENOSUNfSDJDX09QQ09ERV9DT05GSUdfTE9PUEJBQ0sgfAotCQkJKCh1NjQpYWRhcHRlci0+cG9ydG51bSA8PCAxNik7Ci0JcmVxLnJlcV9oZHIgPSBjcHVfdG9fbGU2NCh3b3JkKTsKLQlyZXEud29yZHNbMF0gPSBjcHVfdG9fbGU2NChmbGFnKTsKLQotCXJ2ID0gcWxjbmljX3NlbmRfY21kX2Rlc2NzKGFkYXB0ZXIsIChzdHJ1Y3QgY21kX2Rlc2NfdHlwZTAgKikmcmVxLCAxKTsKLQlpZiAocnYpCi0JCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwKLQkJCSIlc3RpbmcgbG9vcGJhY2sgbW9kZSBmYWlsZWQuXG4iLAotCQkJCQlmbGFnID8gIlNldCIgOiAiUmVzZXQiKTsKLQlyZXR1cm4gcnY7Ci19Ci0KLWludCBxbGNuaWNfc2V0X2lsYl9tb2RlKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcikKLXsKLQlpZiAocWxjbmljX3NldF9md19sb29wYmFjayhhZGFwdGVyLCAxKSkKLQkJcmV0dXJuIC1FSU87Ci0KLQlpZiAocWxjbmljX25pY19zZXRfcHJvbWlzYyhhZGFwdGVyLAotCQkJCVZQT1JUX01JU1NfTU9ERV9BQ0NFUFRfQUxMKSkgewotCQlxbGNuaWNfc2V0X2Z3X2xvb3BiYWNrKGFkYXB0ZXIsIDApOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQltc2xlZXAoMTAwMCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgcWxjbmljX2NsZWFyX2lsYl9tb2RlKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcikKLXsKLQlpbnQgbW9kZSA9IFZQT1JUX01JU1NfTU9ERV9EUk9QOwotCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7Ci0KLQlxbGNuaWNfc2V0X2Z3X2xvb3BiYWNrKGFkYXB0ZXIsIDApOwotCi0JaWYgKG5ldGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykKLQkJbW9kZSA9IFZQT1JUX01JU1NfTU9ERV9BQ0NFUFRfQUxMOwotCWVsc2UgaWYgKG5ldGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpCi0JCW1vZGUgPSBWUE9SVF9NSVNTX01PREVfQUNDRVBUX01VTFRJOwotCi0JcWxjbmljX25pY19zZXRfcHJvbWlzYyhhZGFwdGVyLCBtb2RlKTsKLQltc2xlZXAoMTAwMCk7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX2luaXQuYyBiL2RyaXZlcnMvbmV0L3FsY25pYy9xbGNuaWNfaW5pdC5jCmluZGV4IDBkMTgwYzYuLjliOWM3YzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3FsY25pYy9xbGNuaWNfaW5pdC5jCisrKyBiL2RyaXZlcnMvbmV0L3FsY25pYy9xbGNuaWNfaW5pdC5jCkBAIC0xLDI1ICsxLDggQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgLSBRTG9naWMgQ29ycG9yYXRpb24uCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUUxvZ2ljIHFsY25pYyBOSUMgRHJpdmVyCisgKiBDb3B5cmlnaHQgKGMpICAyMDA5LTIwMTAgUUxvZ2ljIENvcnBvcmF0aW9uCiAgKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCi0gKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sCi0gKiBNQSAgMDIxMTEtMTMwNywgVVNBLgotICoKLSAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uCi0gKiBpbiB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgotICoKKyAqIFNlZSBMSUNFTlNFLnFsY25pYyBmb3IgY29weXJpZ2h0IGFuZCBsaWNlbnNpbmcgZGV0YWlscy4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CkBAIC0yMzYsMTIgKzIxOSwxMSBAQAogCXR4X3JpbmctPm51bV9kZXNjID0gYWRhcHRlci0+bnVtX3R4ZDsKIAl0eF9yaW5nLT50eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKG5ldGRldiwgMCk7CiAKLQljbWRfYnVmX2FyciA9IHZtYWxsb2MoVFhfQlVGRl9SSU5HU0laRSh0eF9yaW5nKSk7CisJY21kX2J1Zl9hcnIgPSB2emFsbG9jKFRYX0JVRkZfUklOR1NJWkUodHhfcmluZykpOwogCWlmIChjbWRfYnVmX2FyciA9PSBOVUxMKSB7CiAJCWRldl9lcnIoJm5ldGRldi0+ZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIGNtZCBidWZmZXIgcmluZ1xuIik7CiAJCWdvdG8gZXJyX291dDsKIAl9Ci0JbWVtc2V0KGNtZF9idWZfYXJyLCAwLCBUWF9CVUZGX1JJTkdTSVpFKHR4X3JpbmcpKTsKIAl0eF9yaW5nLT5jbWRfYnVmX2FyciA9IGNtZF9idWZfYXJyOwogCiAJcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHg7CkBAIC0yNzUsMTQgKzI1NywxMiBAQAogCQkJCXJkc19yaW5nLT5kbWFfc2l6ZSArIE5FVF9JUF9BTElHTjsKIAkJCWJyZWFrOwogCQl9Ci0JCXJkc19yaW5nLT5yeF9idWZfYXJyID0gKHN0cnVjdCBxbGNuaWNfcnhfYnVmZmVyICopCi0JCQl2bWFsbG9jKFJDVl9CVUZGX1JJTkdTSVpFKHJkc19yaW5nKSk7CisJCXJkc19yaW5nLT5yeF9idWZfYXJyID0gdnphbGxvYyhSQ1ZfQlVGRl9SSU5HU0laRShyZHNfcmluZykpOwogCQlpZiAocmRzX3JpbmctPnJ4X2J1Zl9hcnIgPT0gTlVMTCkgewogCQkJZGV2X2VycigmbmV0ZGV2LT5kZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgIgogCQkJCSJyeCBidWZmZXIgcmluZyAlZFxuIiwgcmluZyk7CiAJCQlnb3RvIGVycl9vdXQ7CiAJCX0KLQkJbWVtc2V0KHJkc19yaW5nLT5yeF9idWZfYXJyLCAwLCBSQ1ZfQlVGRl9SSU5HU0laRShyZHNfcmluZykpOwogCQlJTklUX0xJU1RfSEVBRCgmcmRzX3JpbmctPmZyZWVfbGlzdCk7CiAJCS8qCiAJCSAqIE5vdyBnbyB0aHJvdWdoIGFsbCBvZiB0aGVtLCBzZXQgcmVmZXJlbmNlIGhhbmRsZXMKQEAgLTE2OTMsOTkgKzE2NzMsNiBAQAogCXNwaW5fdW5sb2NrKCZyZHNfcmluZy0+bG9jayk7CiB9CiAKLXN0YXRpYyB2b2lkIGR1bXBfc2tiKHN0cnVjdCBza19idWZmICpza2IpCi17Ci0JaW50IGk7Ci0JdW5zaWduZWQgY2hhciAqZGF0YSA9IHNrYi0+ZGF0YTsKLQotCWZvciAoaSA9IDA7IGkgPCBza2ItPmxlbjsgaSsrKSB7Ci0JCXByaW50aygiJTAyeCAiLCBkYXRhW2ldKTsKLQkJaWYgKChpICYgMHgwZikgPT0gOCkKLQkJCXByaW50aygiXG4iKTsKLQl9Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcWxjbmljX3J4X2J1ZmZlciAqCi1xbGNuaWNfcHJvY2Vzc19yY3ZfZGlhZyhzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCXN0cnVjdCBxbGNuaWNfaG9zdF9zZHNfcmluZyAqc2RzX3JpbmcsCi0JCWludCByaW5nLCB1NjQgc3RzX2RhdGEwKQotewotCXN0cnVjdCBxbGNuaWNfcmVjdl9jb250ZXh0ICpyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eDsKLQlzdHJ1Y3QgcWxjbmljX3J4X2J1ZmZlciAqYnVmZmVyOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IHFsY25pY19ob3N0X3Jkc19yaW5nICpyZHNfcmluZzsKLQlpbnQgaW5kZXgsIGxlbmd0aCwgY2tzdW0sIHBrdF9vZmZzZXQ7Ci0KLQlpZiAodW5saWtlbHkocmluZyA+PSBhZGFwdGVyLT5tYXhfcmRzX3JpbmdzKSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlyZHNfcmluZyA9ICZyZWN2X2N0eC0+cmRzX3JpbmdzW3JpbmddOwotCi0JaW5kZXggPSBxbGNuaWNfZ2V0X3N0c19yZWZoYW5kbGUoc3RzX2RhdGEwKTsKLQlpZiAodW5saWtlbHkoaW5kZXggPj0gcmRzX3JpbmctPm51bV9kZXNjKSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlidWZmZXIgPSAmcmRzX3JpbmctPnJ4X2J1Zl9hcnJbaW5kZXhdOwotCi0JbGVuZ3RoID0gcWxjbmljX2dldF9zdHNfdG90YWxsZW5ndGgoc3RzX2RhdGEwKTsKLQlja3N1bSAgPSBxbGNuaWNfZ2V0X3N0c19zdGF0dXMoc3RzX2RhdGEwKTsKLQlwa3Rfb2Zmc2V0ID0gcWxjbmljX2dldF9zdHNfcGt0X29mZnNldChzdHNfZGF0YTApOwotCi0Jc2tiID0gcWxjbmljX3Byb2Nlc3NfcnhidWYoYWRhcHRlciwgcmRzX3JpbmcsIGluZGV4LCBja3N1bSk7Ci0JaWYgKCFza2IpCi0JCXJldHVybiBidWZmZXI7Ci0KLQlpZiAobGVuZ3RoID4gcmRzX3JpbmctPnNrYl9zaXplKQotCQlza2JfcHV0KHNrYiwgcmRzX3JpbmctPnNrYl9zaXplKTsKLQllbHNlCi0JCXNrYl9wdXQoc2tiLCBsZW5ndGgpOwotCi0JaWYgKHBrdF9vZmZzZXQpCi0JCXNrYl9wdWxsKHNrYiwgcGt0X29mZnNldCk7Ci0KLQlpZiAoIXFsY25pY19jaGVja19sb29wYmFja19idWZmKHNrYi0+ZGF0YSkpCi0JCWFkYXB0ZXItPmRpYWdfY250Kys7Ci0JZWxzZQotCQlkdW1wX3NrYihza2IpOwotCi0JZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQlhZGFwdGVyLT5zdGF0cy5yeF9wa3RzKys7Ci0JYWRhcHRlci0+c3RhdHMucnhieXRlcyArPSBsZW5ndGg7Ci0KLQlyZXR1cm4gYnVmZmVyOwotfQotCi12b2lkCi1xbGNuaWNfcHJvY2Vzc19yY3ZfcmluZ19kaWFnKHN0cnVjdCBxbGNuaWNfaG9zdF9zZHNfcmluZyAqc2RzX3JpbmcpCi17Ci0Jc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyID0gc2RzX3JpbmctPmFkYXB0ZXI7Ci0Jc3RydWN0IHN0YXR1c19kZXNjICpkZXNjOwotCXN0cnVjdCBxbGNuaWNfcnhfYnVmZmVyICpyeGJ1ZjsKLQl1NjQgc3RzX2RhdGEwOwotCi0JaW50IG9wY29kZSwgcmluZywgZGVzY19jbnQ7Ci0JdTMyIGNvbnN1bWVyID0gc2RzX3JpbmctPmNvbnN1bWVyOwotCi0JZGVzYyA9ICZzZHNfcmluZy0+ZGVzY19oZWFkW2NvbnN1bWVyXTsKLQlzdHNfZGF0YTAgPSBsZTY0X3RvX2NwdShkZXNjLT5zdGF0dXNfZGVzY19kYXRhWzBdKTsKLQotCWlmICghKHN0c19kYXRhMCAmIFNUQVRVU19PV05FUl9IT1NUKSkKLQkJcmV0dXJuOwotCi0JZGVzY19jbnQgPSBxbGNuaWNfZ2V0X3N0c19kZXNjX2NudChzdHNfZGF0YTApOwotCW9wY29kZSA9IHFsY25pY19nZXRfc3RzX29wY29kZShzdHNfZGF0YTApOwotCi0JcmluZyA9IHFsY25pY19nZXRfc3RzX3R5cGUoc3RzX2RhdGEwKTsKLQlyeGJ1ZiA9IHFsY25pY19wcm9jZXNzX3Jjdl9kaWFnKGFkYXB0ZXIsIHNkc19yaW5nLAotCQkJCQlyaW5nLCBzdHNfZGF0YTApOwotCi0JZGVzYy0+c3RhdHVzX2Rlc2NfZGF0YVswXSA9IGNwdV90b19sZTY0KFNUQVRVU19PV05FUl9QSEFOVE9NKTsKLQljb25zdW1lciA9IGdldF9uZXh0X2luZGV4KGNvbnN1bWVyLCBzZHNfcmluZy0+bnVtX2Rlc2MpOwotCi0Jc2RzX3JpbmctPmNvbnN1bWVyID0gY29uc3VtZXI7Ci0Jd3JpdGVsKGNvbnN1bWVyLCBzZHNfcmluZy0+Y3JiX3N0c19jb25zdW1lcik7Ci19Ci0KIHZvaWQKIHFsY25pY19mZXRjaF9tYWMoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLCB1MzIgb2ZmMSwgdTMyIG9mZjIsCiAJCQl1OCBhbHRfbWFjLCB1OCAqbWFjKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pY19tYWluLmMgYi9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX21haW4uYwppbmRleCBhM2RjZDA0Li4xMWUzYTQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX21haW4uYworKysgYi9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX21haW4uYwpAQCAtMSwyNSArMSw4IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IC0gUUxvZ2ljIENvcnBvcmF0aW9uLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFFMb2dpYyBxbGNuaWMgTklDIERyaXZlcgorICogQ29weXJpZ2h0IChjKSAgMjAwOS0yMDEwIFFMb2dpYyBDb3Jwb3JhdGlvbgogICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgotICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgIDAyMTExLTEzMDcsIFVTQS4KLSAqCi0gKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbgotICogaW4gdGhlIGZpbGUgY2FsbGVkICJDT1BZSU5HIi4KLSAqCisgKiBTZWUgTElDRU5TRS5xbGNuaWMgZm9yIGNvcHlyaWdodCBhbmQgbGljZW5zaW5nIGRldGFpbHMuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KQEAgLTE1NDYsNiArMTUyOSw4IEBACiAJaWYgKGVycikKIAkJZ290byBlcnJfb3V0X2lvdW5tYXA7CiAKKwlhZGFwdGVyLT5mbGFncyB8PSBRTENOSUNfTkVFRF9GTFI7CisKIAllcnIgPSBhZGFwdGVyLT5uaWNfb3BzLT5zdGFydF9maXJtd2FyZShhZGFwdGVyKTsKIAlpZiAoZXJyKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIkxvYWRpbmcgZncgZmFpbGVkLlBsZWFzZSBSZWJvb3RcbiIpOwpAQCAtMjg1NCw2MSArMjgzOSw2IEBACiAJcWxjbmljX2FwaV91bmxvY2soYWRhcHRlcik7CiB9CiAKLS8qIENhbGxlciBzaG91bGQgaGVsZCBSRVNFVFRJTkcgYml0LgotICogVGhpcyBzaG91bGQgYmUgY2FsbCBpbiBzeW5jIHdpdGggcWxjbmljX3JlcXVlc3RfcXVpc2NlbnRfbW9kZS4KLSAqLwotdm9pZCBxbGNuaWNfY2xlYXJfcXVpc2NlbnRfbW9kZShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JcWxjbmljX2Nscl9kcnZfc3RhdGUoYWRhcHRlcik7Ci0JcWxjbmljX2FwaV9sb2NrKGFkYXB0ZXIpOwotCVFMQ1dSMzIoYWRhcHRlciwgUUxDTklDX0NSQl9ERVZfU1RBVEUsIFFMQ05JQ19ERVZfUkVBRFkpOwotCXFsY25pY19hcGlfdW5sb2NrKGFkYXB0ZXIpOwotfQotCi0vKiBDYWxsZXIgc2hvdWxkIGhlbGQgUkVTRVRUSU5HIGJpdC4KLSAqLwotaW50IHFsY25pY19yZXF1ZXN0X3F1aXNjZW50X21vZGUoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKQotewotCXU4IHRpbWVvID0gYWRhcHRlci0+ZGV2X2luaXRfdGltZW8gLyAyOwotCXUzMiBzdGF0ZTsKLQotCWlmIChxbGNuaWNfYXBpX2xvY2soYWRhcHRlcikpCi0JCXJldHVybiAtRUlPOwotCi0Jc3RhdGUgPSBRTENSRDMyKGFkYXB0ZXIsIFFMQ05JQ19DUkJfREVWX1NUQVRFKTsKLQlpZiAoc3RhdGUgIT0gUUxDTklDX0RFVl9SRUFEWSkKLQkJcmV0dXJuIC1FSU87Ci0KLQlRTENXUjMyKGFkYXB0ZXIsIFFMQ05JQ19DUkJfREVWX1NUQVRFLCBRTENOSUNfREVWX05FRURfUVVJU0NFTlQpOwotCXFsY25pY19hcGlfdW5sb2NrKGFkYXB0ZXIpOwotCVFMQ0RCKGFkYXB0ZXIsIERSViwgIk5FRUQgUVVJU0NFTlQgc3RhdGUgc2V0XG4iKTsKLQlxbGNuaWNfaWRjX2RlYnVnX2luZm8oYWRhcHRlciwgMCk7Ci0KLQlxbGNuaWNfc2V0X2Rydl9zdGF0ZShhZGFwdGVyLCBRTENOSUNfREVWX05FRURfUVVJU0NFTlQpOwotCi0JZG8gewotCQltc2xlZXAoMjAwMCk7Ci0JCXN0YXRlID0gUUxDUkQzMihhZGFwdGVyLCBRTENOSUNfQ1JCX0RFVl9TVEFURSk7Ci0JCWlmIChzdGF0ZSA9PSBRTENOSUNfREVWX1FVSVNDRU5UKQotCQkJcmV0dXJuIDA7Ci0JCWlmICghcWxjbmljX2NoZWNrX2Rydl9zdGF0ZShhZGFwdGVyKSkgewotCQkJaWYgKHFsY25pY19hcGlfbG9jayhhZGFwdGVyKSkKLQkJCQlyZXR1cm4gLUVJTzsKLQkJCVFMQ1dSMzIoYWRhcHRlciwgUUxDTklDX0NSQl9ERVZfU1RBVEUsCi0JCQkJCQkJUUxDTklDX0RFVl9RVUlTQ0VOVCk7Ci0JCQlxbGNuaWNfYXBpX3VubG9jayhhZGFwdGVyKTsKLQkJCVFMQ0RCKGFkYXB0ZXIsIERSViwgIlFVSVNDRU5UIG1vZGUgc2V0XG4iKTsKLQkJCXJldHVybiAwOwotCQl9Ci0JfSB3aGlsZSAoLS10aW1lbyk7Ci0KLQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJGYWlsZWQgdG8gcXVpZXNjZSBkZXZpY2UsIERSVl9TVEFURT0lMDh4IgotCQkiIERSVl9BQ1RJVkU9JTA4eFxuIiwgUUxDUkQzMihhZGFwdGVyLCBRTENOSUNfQ1JCX0RSVl9TVEFURSksCi0JCVFMQ1JEMzIoYWRhcHRlciwgUUxDTklDX0NSQl9EUlZfQUNUSVZFKSk7Ci0JcWxjbmljX2NsZWFyX3F1aXNjZW50X21vZGUoYWRhcHRlcik7Ci0JcmV0dXJuIC1FSU87Ci19Ci0KIC8qVHJhbnNpdCB0byBSRVNFVCBzdGF0ZSBmcm9tIFJFQURZIHN0YXRlIG9ubHkgKi8KIHN0YXRpYyB2b2lkCiBxbGNuaWNfZGV2X3JlcXVlc3RfcmVzZXQoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKQpAQCAtMzU4Nyw5ICszNTE3LDEyIEBACiAJCWNhc2UgUUxDTklDX1BPUlRfREVGQVVMVFM6CiAJCQlpZiAoUUxDX0RFVl9HRVRfRFJWKG9wX21vZGUsIHBjaV9mdW5jKSAhPQogCQkJCQkJUUxDTklDX05PTl9QUklWX0ZVTkMpIHsKLQkJCQllc3dfY2ZnW2ldLm1hY19hbnRpX3Nwb29mID0gMDsKLQkJCQllc3dfY2ZnW2ldLm1hY19vdmVycmlkZSA9IDE7Ci0JCQkJZXN3X2NmZ1tpXS5wcm9taXNjX21vZGUgPSAxOworCQkJCWlmIChlc3dfY2ZnW2ldLm1hY19hbnRpX3Nwb29mICE9IDApCisJCQkJCXJldHVybiBRTF9TVEFUVVNfSU5WQUxJRF9QQVJBTTsKKwkJCQlpZiAoZXN3X2NmZ1tpXS5tYWNfb3ZlcnJpZGUgIT0gMSkKKwkJCQkJcmV0dXJuIFFMX1NUQVRVU19JTlZBTElEX1BBUkFNOworCQkJCWlmIChlc3dfY2ZnW2ldLnByb21pc2NfbW9kZSAhPSAxKQorCQkJCQlyZXR1cm4gUUxfU1RBVFVTX0lOVkFMSURfUEFSQU07CiAJCQl9CiAJCQlicmVhazsKIAkJY2FzZSBRTENOSUNfQUREX1ZMQU46CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9xbGdlL3FsZ2UuaCBiL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZS5oCmluZGV4IDk3ODdkZmYuLjQ3NTdjNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZS5oCisrKyBiL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZS5oCkBAIC0xNiw3ICsxNiw3IEBACiAgKi8KICNkZWZpbmUgRFJWX05BTUUgIAkicWxnZSIKICNkZWZpbmUgRFJWX1NUUklORyAJIlFMb2dpYyAxMCBHaWdhYml0IFBDSS1FIEV0aGVybmV0IERyaXZlciAiCi0jZGVmaW5lIERSVl9WRVJTSU9OCSJ2MS4wMC4wMC4yNS4wMC4wMC0wMSIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JInYxLjAwLjAwLjI3LjAwLjAwLTAxIgogCiAjZGVmaW5lIFdRX0FERFJfQUxJR04JMHgzCS8qIDQgYnl0ZSBhbGlnbm1lbnQgKi8KIApAQCAtMjIyMiw2ICsyMjIyLDcgQEAKIGludCBxbF91bnBhdXNlX21waV9yaXNjKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KTsKIGludCBxbF9wYXVzZV9tcGlfcmlzYyhzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldik7CiBpbnQgcWxfaGFyZF9yZXNldF9tcGlfcmlzYyhzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldik7CitpbnQgcWxfc29mdF9yZXNldF9tcGlfcmlzYyhzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldik7CiBpbnQgcWxfZHVtcF9yaXNjX3JhbV9hcmVhKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LCB2b2lkICpidWYsCiAJCXUzMiByYW1fYWRkciwgaW50IHdvcmRfY291bnQpOwogaW50IHFsX2NvcmVfZHVtcChzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwKQEAgLTIyMzcsNiArMjIzOCw3IEBACiBpbnQgcWxfbWJfZ2V0X3BvcnRfY2ZnKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KTsKIGludCBxbF9tYl9zZXRfcG9ydF9jZmcoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpOwogaW50IHFsX3dhaXRfZmlmb19lbXB0eShzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldik7Cit2b2lkIHFsX2dldF9kdW1wKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LCB2b2lkICpidWZmKTsKIHZvaWQgcWxfZ2VuX3JlZ19kdW1wKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LAogCQkJc3RydWN0IHFsX3JlZ19kdW1wICptcGlfY29yZWR1bXApOwogbmV0ZGV2X3R4X3QgcWxfbGJfc2VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfZGJnLmMgYi9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfZGJnLmMKaW5kZXggNDc0NzQ5Mi4uZmNhODA0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcWxnZS9xbGdlX2RiZy5jCisrKyBiL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9kYmcuYwpAQCAtMTMxNyw5ICsxMzE3LDI4IEBACiAJc3RhdHVzID0gcWxfZ2V0X2V0c19yZWdzKHFkZXYsICZtcGlfY29yZWR1bXAtPmV0c1swXSk7CiAJaWYgKHN0YXR1cykKIAkJcmV0dXJuOworfQogCi0JaWYgKHRlc3RfYml0KFFMX0ZSQ19DT1JFRFVNUCwgJnFkZXYtPmZsYWdzKSkKK3ZvaWQgcWxfZ2V0X2R1bXAoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsIHZvaWQgKmJ1ZmYpCit7CisJLyoKKwkgKiBJZiB0aGUgZHVtcCBoYXMgYWxyZWFkeSBiZWVuIHRha2VuIGFuZCBpcyBzdG9yZWQKKwkgKiBpbiBvdXIgaW50ZXJuYWwgYnVmZmVyIGFuZCBpZiBmb3JjZSBkdW1wIGlzIHNldCB0aGVuCisJICoganVzdCBzdGFydCB0aGUgc3Bvb2wgdG8gZHVtcCBpdCB0byB0aGUgbG9nIGZpbGUKKwkgKiBhbmQgYWxzbywgdGFrZSBhIHNuYXBzaG90IG9mIHRoZSBnZW5lcmFsIHJlZ3MgdG8KKwkgKiB0byB0aGUgdXNlcidzIGJ1ZmZlciBvciBlbHNlIHRha2UgY29tcGxldGUgZHVtcAorCSAqIHRvIHRoZSB1c2VyJ3MgYnVmZmVyIGlmIGZvcmNlIGlzIG5vdCBzZXQuCisJICovCisKKwlpZiAoIXRlc3RfYml0KFFMX0ZSQ19DT1JFRFVNUCwgJnFkZXYtPmZsYWdzKSkgeworCQlpZiAoIXFsX2NvcmVfZHVtcChxZGV2LCBidWZmKSkKKwkJCXFsX3NvZnRfcmVzZXRfbXBpX3Jpc2MocWRldik7CisJCWVsc2UKKwkJCW5ldGlmX2VycihxZGV2LCBkcnYsIHFkZXYtPm5kZXYsICJjb3JlZHVtcCBmYWlsZWQhXG4iKTsKKwl9IGVsc2UgeworCQlxbF9nZW5fcmVnX2R1bXAocWRldiwgYnVmZik7CiAJCXFsX2dldF9jb3JlX2R1bXAocWRldik7CisJfQogfQogCiAvKiBDb3JlZHVtcCB0byBtZXNzYWdlcyBsb2cgZmlsZSB1c2luZyBzZXBhcmF0ZSB3b3JrZXIgdGhyZWFkICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvcWxnZS9xbGdlX2V0aHRvb2wuYwppbmRleCA0ODkyZDY0Li44MTQ5Y2M5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9ldGh0b29sLmMKQEAgLTM3NSw3ICszNzUsMTAgQEAKIAlzdHJuY3B5KGRydmluZm8tPmJ1c19pbmZvLCBwY2lfbmFtZShxZGV2LT5wZGV2KSwgMzIpOwogCWRydmluZm8tPm5fc3RhdHMgPSAwOwogCWRydmluZm8tPnRlc3RpbmZvX2xlbiA9IDA7Ci0JZHJ2aW5mby0+cmVnZHVtcF9sZW4gPSAwOworCWlmICghdGVzdF9iaXQoUUxfRlJDX0NPUkVEVU1QLCAmcWRldi0+ZmxhZ3MpKQorCQlkcnZpbmZvLT5yZWdkdW1wX2xlbiA9IHNpemVvZihzdHJ1Y3QgcWxfbXBpX2NvcmVkdW1wKTsKKwllbHNlCisJCWRydmluZm8tPnJlZ2R1bXBfbGVuID0gc2l6ZW9mKHN0cnVjdCBxbF9yZWdfZHVtcCk7CiAJZHJ2aW5mby0+ZWVkdW1wX2xlbiA9IDA7CiB9CiAKQEAgLTU0Nyw3ICs1NTAsMTIgQEAKIAogc3RhdGljIGludCBxbF9nZXRfcmVnc19sZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiB7Ci0JcmV0dXJuIHNpemVvZihzdHJ1Y3QgcWxfcmVnX2R1bXApOworCXN0cnVjdCBxbF9hZGFwdGVyICpxZGV2ID0gbmV0ZGV2X3ByaXYobmRldik7CisKKwlpZiAoIXRlc3RfYml0KFFMX0ZSQ19DT1JFRFVNUCwgJnFkZXYtPmZsYWdzKSkKKwkJcmV0dXJuIHNpemVvZihzdHJ1Y3QgcWxfbXBpX2NvcmVkdW1wKTsKKwllbHNlCisJCXJldHVybiBzaXplb2Yoc3RydWN0IHFsX3JlZ19kdW1wKTsKIH0KIAogc3RhdGljIHZvaWQgcWxfZ2V0X3JlZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsCkBAIC01NTUsNyArNTYzLDEyIEBACiB7CiAJc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAotCXFsX2dlbl9yZWdfZHVtcChxZGV2LCBwKTsKKwlxbF9nZXRfZHVtcChxZGV2LCBwKTsKKwlxZGV2LT5jb3JlX2lzX2R1bXBlZCA9IDA7CisJaWYgKCF0ZXN0X2JpdChRTF9GUkNfQ09SRURVTVAsICZxZGV2LT5mbGFncykpCisJCXJlZ3MtPmxlbiA9IHNpemVvZihzdHJ1Y3QgcWxfbXBpX2NvcmVkdW1wKTsKKwllbHNlCisJCXJlZ3MtPmxlbiA9IHNpemVvZihzdHJ1Y3QgcWxfcmVnX2R1bXApOwogfQogCiBzdGF0aWMgaW50IHFsX2dldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9jb2FsZXNjZSAqYykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9tYWluLmMgYi9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfbWFpbi5jCmluZGV4IDI1NTViMWQuLjQ5YmZhNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvcWxnZS9xbGdlX21haW4uYwpAQCAtMzU0OCwxMiArMzU0OCwxMyBAQAogCiBzdGF0aWMgaW50IHFsX3N0YXJ0X3JzcyhzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldikKIHsKLQl1OCBpbml0X2hhc2hfc2VlZFtdID0gezB4NmQsIDB4NWEsIDB4NTYsIDB4ZGEsIDB4MjUsIDB4NWIsIDB4MGUsIDB4YzIsCi0JCQkJMHg0MSwgMHg2NywgMHgyNSwgMHgzZCwgMHg0MywgMHhhMywgMHg4ZiwKLQkJCQkweGIwLCAweGQwLCAweGNhLCAweDJiLCAweGNiLCAweGFlLCAweDdiLAotCQkJCTB4MzAsIDB4YjQsIDB4NzcsIDB4Y2IsIDB4MmQsIDB4YTMsIDB4ODAsCi0JCQkJMHgzMCwgMHhmMiwgMHgwYywgMHg2YSwgMHg0MiwgMHhiNywgMHgzYiwKLQkJCQkweGJlLCAweGFjLCAweDAxLCAweGZhfTsKKwlzdGF0aWMgY29uc3QgdTggaW5pdF9oYXNoX3NlZWRbXSA9IHsKKwkJMHg2ZCwgMHg1YSwgMHg1NiwgMHhkYSwgMHgyNSwgMHg1YiwgMHgwZSwgMHhjMiwKKwkJMHg0MSwgMHg2NywgMHgyNSwgMHgzZCwgMHg0MywgMHhhMywgMHg4ZiwgMHhiMCwKKwkJMHhkMCwgMHhjYSwgMHgyYiwgMHhjYiwgMHhhZSwgMHg3YiwgMHgzMCwgMHhiNCwKKwkJMHg3NywgMHhjYiwgMHgyZCwgMHhhMywgMHg4MCwgMHgzMCwgMHhmMiwgMHgwYywKKwkJMHg2YSwgMHg0MiwgMHhiNywgMHgzYiwgMHhiZSwgMHhhYywgMHgwMSwgMHhmYQorCX07CiAJc3RydWN0IHJpY2IgKnJpY2IgPSAmcWRldi0+cmljYjsKIAlpbnQgc3RhdHVzID0gMDsKIAlpbnQgaTsKQEAgLTM4NDQsNyArMzg0NSw3IEBACiAKIHN0YXRpYyB2b2lkIHFsX2Rpc3BsYXlfZGV2X2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiB7Ci0Jc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYgPSAoc3RydWN0IHFsX2FkYXB0ZXIgKiluZXRkZXZfcHJpdihuZGV2KTsKKwlzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiA9IG5ldGRldl9wcml2KG5kZXYpOwogCiAJbmV0aWZfaW5mbyhxZGV2LCBwcm9iZSwgcWRldi0+bmRldiwKIAkJICAgIkZ1bmN0aW9uICMlZCwgUG9ydCAlZCwgTklDIFJvbGwgJWQsIE5JQyBSZXYgPSAlZCwgIgpAQCAtNDI2NCw3ICs0MjY1LDcgQEAKIAogc3RhdGljIHZvaWQgcWxnZV9zZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiB7Ci0Jc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYgPSAoc3RydWN0IHFsX2FkYXB0ZXIgKiluZXRkZXZfcHJpdihuZGV2KTsKKwlzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiA9IG5ldGRldl9wcml2KG5kZXYpOwogCXN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7CiAJaW50IGksIHN0YXR1czsKIApAQCAtNDM1NCw3ICs0MzU1LDcgQEAKIAogc3RhdGljIGludCBxbGdlX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgdm9pZCAqcCkKIHsKLQlzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiA9IChzdHJ1Y3QgcWxfYWRhcHRlciAqKW5ldGRldl9wcml2KG5kZXYpOworCXN0cnVjdCBxbF9hZGFwdGVyICpxZGV2ID0gbmV0ZGV2X3ByaXYobmRldik7CiAJc3RydWN0IHNvY2thZGRyICphZGRyID0gcDsKIAlpbnQgc3RhdHVzOwogCkBAIC00Mzc3LDcgKzQzNzgsNyBAQAogCiBzdGF0aWMgdm9pZCBxbGdlX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiB7Ci0Jc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYgPSAoc3RydWN0IHFsX2FkYXB0ZXIgKiluZXRkZXZfcHJpdihuZGV2KTsKKwlzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiA9IG5ldGRldl9wcml2KG5kZXYpOwogCXFsX3F1ZXVlX2FzaWNfZXJyb3IocWRldik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9tcGkuYyBiL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9tcGkuYwppbmRleCBhMmU5MTliLi5mZjJiZjhhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfbXBpLmMKKysrIGIvZHJpdmVycy9uZXQvcWxnZS9xbGdlX21waS5jCkBAIC04Nyw3ICs4Nyw3IEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAotc3RhdGljIGludCBxbF9zb2Z0X3Jlc2V0X21waV9yaXNjKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KQoraW50IHFsX3NvZnRfcmVzZXRfbXBpX3Jpc2Moc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpCiB7CiAJaW50IHN0YXR1czsKIAlzdGF0dXMgPSBxbF93cml0ZV9tcGlfcmVnKHFkZXYsIDB4MDAwMDEwMTAsIDEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcjYwNDAuYyBiL2RyaXZlcnMvbmV0L3I2MDQwLmMKaW5kZXggMGIwMTRjODkuLjI3ZTZmNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3I2MDQwLmMKKysrIGIvZHJpdmVycy9uZXQvcjYwNDAuYwpAQCAtMTE1Myw2ICsxMTUzLDcgQEAKIAlscC0+bWlpX2J1cyA9IG1kaW9idXNfYWxsb2MoKTsKIAlpZiAoIWxwLT5taWlfYnVzKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIm1kaW9idXNfYWxsb2MoKSBmYWlsZWRcbiIpOworCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGVycl9vdXRfdW5tYXA7CiAJfQogCkBAIC0xMTY1LDYgKzExNjYsNyBAQAogCWxwLT5taWlfYnVzLT5pcnEgPSBrbWFsbG9jKHNpemVvZihpbnQpKlBIWV9NQVhfQUREUiwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFscC0+bWlpX2J1cy0+aXJxKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIm1paV9idXMgaXJxIGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKKwkJZXJyID0gLUVOT01FTTsKIAkJZ290byBlcnJfb3V0X21kaW87CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9yODE2OS5jIGIvZHJpdmVycy9uZXQvcjgxNjkuYwppbmRleCA1M2IxM2RlLi4yN2E3YzIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9yODE2OS5jCisrKyBiL2RyaXZlcnMvbmV0L3I4MTY5LmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KQEAgLTMzLDYgKzM0LDkgQEAKICNkZWZpbmUgTU9EVUxFTkFNRSAicjgxNjkiCiAjZGVmaW5lIFBGWCBNT0RVTEVOQU1FICI6ICIKIAorI2RlZmluZSBGSVJNV0FSRV84MTY4RF8xCSJydGxfbmljL3J0bDgxNjhkLTEuZnciCisjZGVmaW5lIEZJUk1XQVJFXzgxNjhEXzIJInJ0bF9uaWMvcnRsODE2OGQtMi5mdyIKKwogI2lmZGVmIFJUTDgxNjlfREVCVUcKICNkZWZpbmUgYXNzZXJ0KGV4cHIpIFwKIAlpZiAoIShleHByKSkgewkJCQkJXApAQCAtNjMsNyArNjcsNiBAQAogI2RlZmluZSBSWF9GSUZPX1RIUkVTSAk3CS8qIDcgbWVhbnMgTk8gdGhyZXNob2xkLCBSeCBidWZmZXIgbGV2ZWwgYmVmb3JlIGZpcnN0IFBDSSB4ZmVyLiAqLwogI2RlZmluZSBSWF9ETUFfQlVSU1QJNgkvKiBNYXhpbXVtIFBDSSBidXJzdCwgJzYnIGlzIDEwMjQgKi8KICNkZWZpbmUgVFhfRE1BX0JVUlNUCTYJLyogTWF4aW11bSBQQ0kgYnVyc3QsICc2JyBpcyAxMDI0ICovCi0jZGVmaW5lIEVhcmx5VHhUaGxkCTB4M0YJLyogMHgzRiBtZWFucyBOTyBlYXJseSB0cmFuc21pdCAqLwogI2RlZmluZSBTYWZlTXR1CQkweDFjMjAJLyogLi4uIGFjdHVhbGx5IGxpZmUgc3Vja3MgYmV5b25kIH43ayAqLwogI2RlZmluZSBJbnRlckZyYW1lR2FwCTB4MDMJLyogMyBtZWFucyBJbnRlckZyYW1lR2FwID0gdGhlIHNob3J0ZXN0IG9uZSAqLwogCkBAIC0xMTgsNyArMTIxLDggQEAKIAlSVExfR0lHQV9NQUNfVkVSXzI0ID0gMHgxOCwgLy8gODE2OENQCiAJUlRMX0dJR0FfTUFDX1ZFUl8yNSA9IDB4MTksIC8vIDgxNjhECiAJUlRMX0dJR0FfTUFDX1ZFUl8yNiA9IDB4MWEsIC8vIDgxNjhECi0JUlRMX0dJR0FfTUFDX1ZFUl8yNyA9IDB4MWIgIC8vIDgxNjhEUAorCVJUTF9HSUdBX01BQ19WRVJfMjcgPSAweDFiLCAvLyA4MTY4RFAKKwlSVExfR0lHQV9NQUNfVkVSXzI4ID0gMHgxYywgLy8gODE2OERQCiB9OwogCiAjZGVmaW5lIF9SKE5BTUUsTUFDLE1BU0spIFwKQEAgLTE1NSw3ICsxNTksOCBAQAogCV9SKCJSVEw4MTY4Y3AvODExMWNwIiwJUlRMX0dJR0FfTUFDX1ZFUl8yNCwgMHhmZjdlMTg4MCksIC8vIFBDSS1FCiAJX1IoIlJUTDgxNjhkLzgxMTFkIiwJUlRMX0dJR0FfTUFDX1ZFUl8yNSwgMHhmZjdlMTg4MCksIC8vIFBDSS1FCiAJX1IoIlJUTDgxNjhkLzgxMTFkIiwJUlRMX0dJR0FfTUFDX1ZFUl8yNiwgMHhmZjdlMTg4MCksIC8vIFBDSS1FCi0JX1IoIlJUTDgxNjhkcC84MTExZHAiLAlSVExfR0lHQV9NQUNfVkVSXzI3LCAweGZmN2UxODgwKSAgLy8gUENJLUUKKwlfUigiUlRMODE2OGRwLzgxMTFkcCIsCVJUTF9HSUdBX01BQ19WRVJfMjcsIDB4ZmY3ZTE4ODApLCAvLyBQQ0ktRQorCV9SKCJSVEw4MTY4ZHAvODExMWRwIiwJUlRMX0dJR0FfTUFDX1ZFUl8yOCwgMHhmZjdlMTg4MCkgIC8vIFBDSS1FCiB9OwogI3VuZGVmIF9SCiAKQEAgLTIyNyw3ICsyMzIsMTQgQEAKIAlJbnRyTWl0aWdhdGUJPSAweGUyLAogCVJ4RGVzY0FkZHJMb3cJPSAweGU0LAogCVJ4RGVzY0FkZHJIaWdoCT0gMHhlOCwKLQlFYXJseVR4VGhyZXMJPSAweGVjLAorCUVhcmx5VHhUaHJlcwk9IDB4ZWMsCS8qIDgxNjkuIFVuaXQgb2YgMzIgYnl0ZXMuICovCisKKyNkZWZpbmUgTm9FYXJseVR4CTB4M2YJLyogTWF4IHZhbHVlIDogbm8gZWFybHkgdHJhbnNtaXQuICovCisKKwlNYXhUeFBhY2tldFNpemUJPSAweGVjLAkvKiA4MTAxLzgxNjguIFVuaXQgb2YgMTI4IGJ5dGVzLiAqLworCisjZGVmaW5lIFR4UGFja2V0TWF4CSg4MDY0ID4+IDcpCisKIAlGdW5jRXZlbnQJPSAweGYwLAogCUZ1bmNFdmVudE1hc2sJPSAweGY0LAogCUZ1bmNQcmVzZXRTdGF0ZQk9IDB4ZjgsCkBAIC0yNDgsNyArMjYwLDcgQEAKICNkZWZpbmUJQ1NJQVJfQllURV9FTkFCTEUJCTB4MGYKICNkZWZpbmUJQ1NJQVJfQllURV9FTkFCTEVfU0hJRlQJCTEyCiAjZGVmaW5lCUNTSUFSX0FERFJfTUFTSwkJCTB4MGZmZgotCisJUE1DSAkJCT0gMHg2ZiwKIAlFUEhZQVIJCQk9IDB4ODAsCiAjZGVmaW5lCUVQSFlBUl9GTEFHCQkJMHg4MDAwMDAwMAogI2RlZmluZQlFUEhZQVJfV1JJVEVfQ01ECQkweDgwMDAwMDAwCkBAIC0yNjcsNiArMjc5LDMzIEBACiAjZGVmaW5lCUVGVVNFQVJfREFUQV9NQVNLCQkweGZmCiB9OwogCitlbnVtIHJ0bDgxNjhfcmVnaXN0ZXJzIHsKKwlFUklEUgkJCT0gMHg3MCwKKwlFUklBUgkJCT0gMHg3NCwKKyNkZWZpbmUgRVJJQVJfRkxBRwkJCTB4ODAwMDAwMDAKKyNkZWZpbmUgRVJJQVJfV1JJVEVfQ01ECQkJMHg4MDAwMDAwMAorI2RlZmluZSBFUklBUl9SRUFEX0NNRAkJCTB4MDAwMDAwMDAKKyNkZWZpbmUgRVJJQVJfQUREUl9CWVRFX0FMSUdOCQk0CisjZGVmaW5lIEVSSUFSX0VYR01BQwkJCTAKKyNkZWZpbmUgRVJJQVJfTVNJWAkJCTEKKyNkZWZpbmUgRVJJQVJfQVNGCQkJMgorI2RlZmluZSBFUklBUl9UWVBFX1NISUZUCQkxNgorI2RlZmluZSBFUklBUl9CWVRFRU4JCQkweDBmCisjZGVmaW5lIEVSSUFSX0JZVEVFTl9TSElGVAkJMTIKKwlFUEhZX1JYRVJfTlVNCQk9IDB4N2MsCisJT0NQRFIJCQk9IDB4YjAsCS8qIE9DUCBHUEhZIGFjY2VzcyAqLworI2RlZmluZSBPQ1BEUl9XUklURV9DTUQJCQkweDgwMDAwMDAwCisjZGVmaW5lIE9DUERSX1JFQURfQ01ECQkJMHgwMDAwMDAwMAorI2RlZmluZSBPQ1BEUl9SRUdfTUFTSwkJCTB4N2YKKyNkZWZpbmUgT0NQRFJfR1BIWV9SRUdfU0hJRlQJCTE2CisjZGVmaW5lIE9DUERSX0RBVEFfTUFTSwkJCTB4ZmZmZgorCU9DUEFSCQkJPSAweGI0LAorI2RlZmluZSBPQ1BBUl9GTEFHCQkJMHg4MDAwMDAwMAorI2RlZmluZSBPQ1BBUl9HUEhZX1dSSVRFX0NNRAkJMHg4MDAwZjA2MAorI2RlZmluZSBPQ1BBUl9HUEhZX1JFQURfQ01ECQkweDAwMDBmMDYwCisJUkRTQVIxCQkJPSAweGQwCS8qIDgxNjhjIG9ubHkuIFVuZG9jdW1lbnRlZCBvbiA4MTY4ZHAgKi8KK307CisKIGVudW0gcnRsX3JlZ2lzdGVyX2NvbnRlbnQgewogCS8qIEludGVycnVwdFN0YXR1c0JpdHMgKi8KIAlTWVNFcnIJCT0gMHg4MDAwLApAQCAtNDkwLDExICs1MjksMjIgQEAKICNpZmRlZiBDT05GSUdfUjgxNjlfVkxBTgogCXN0cnVjdCB2bGFuX2dyb3VwICp2bGdycDsKICNlbmRpZgorCisJc3RydWN0IG1kaW9fb3BzIHsKKwkJdm9pZCAoKndyaXRlKSh2b2lkIF9faW9tZW0gKiwgaW50LCBpbnQpOworCQlpbnQgKCpyZWFkKSh2b2lkIF9faW9tZW0gKiwgaW50KTsKKwl9IG1kaW9fb3BzOworCisJc3RydWN0IHBsbF9wb3dlcl9vcHMgeworCQl2b2lkICgqZG93bikoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqKTsKKwkJdm9pZCAoKnVwKShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICopOworCX0gcGxsX3Bvd2VyX29wczsKKwogCWludCAoKnNldF9zcGVlZCkoc3RydWN0IG5ldF9kZXZpY2UgKiwgdTggYXV0b25lZywgdTE2IHNwZWVkLCB1OCBkdXBsZXgpOwogCWludCAoKmdldF9zZXR0aW5ncykoc3RydWN0IG5ldF9kZXZpY2UgKiwgc3RydWN0IGV0aHRvb2xfY21kICopOwotCXZvaWQgKCpwaHlfcmVzZXRfZW5hYmxlKSh2b2lkIF9faW9tZW0gKik7CisJdm9pZCAoKnBoeV9yZXNldF9lbmFibGUpKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKTsKIAl2b2lkICgqaHdfc3RhcnQpKHN0cnVjdCBuZXRfZGV2aWNlICopOwotCXVuc2lnbmVkIGludCAoKnBoeV9yZXNldF9wZW5kaW5nKSh2b2lkIF9faW9tZW0gKik7CisJdW5zaWduZWQgaW50ICgqcGh5X3Jlc2V0X3BlbmRpbmcpKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKTsKIAl1bnNpZ25lZCBpbnQgKCpsaW5rX29rKSh2b2lkIF9faW9tZW0gKik7CiAJaW50ICgqZG9faW9jdGwpKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBzdHJ1Y3QgbWlpX2lvY3RsX2RhdGEgKmRhdGEsIGludCBjbWQpOwogCWludCBwY2llX2NhcDsKQEAgLTUxNCw2ICs1NjQsOCBAQAogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIHZlcmJvc2l0eSBsZXZlbCAoMD1ub25lLCAuLi4sIDE2PWFsbCkiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9WRVJTSU9OKFJUTDgxNjlfVkVSU0lPTik7CitNT0RVTEVfRklSTVdBUkUoRklSTVdBUkVfODE2OERfMSk7CitNT0RVTEVfRklSTVdBUkUoRklSTVdBUkVfODE2OERfMik7CiAKIHN0YXRpYyBpbnQgcnRsODE2OV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIG5ldGRldl90eF90IHJ0bDgxNjlfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLApAQCAtNTM1LDcgKzU4Nyw4MiBAQAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBydGw4MTY5X3J4X2NvbmZpZyA9CiAJKFJYX0ZJRk9fVEhSRVNIIDw8IFJ4Q2ZnRklGT1NoaWZ0KSB8IChSWF9ETUFfQlVSU1QgPDwgUnhDZmdETUFTaGlmdCk7CiAKLXN0YXRpYyB2b2lkIG1kaW9fd3JpdGUodm9pZCBfX2lvbWVtICppb2FkZHIsIGludCByZWdfYWRkciwgaW50IHZhbHVlKQorc3RhdGljIHUzMiBvY3BfcmVhZChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgdTggbWFzaywgdTE2IHJlZykKK3sKKwl2b2lkIF9faW9tZW0gKmlvYWRkciA9IHRwLT5tbWlvX2FkZHI7CisJaW50IGk7CisKKwlSVExfVzMyKE9DUEFSLCAoKHUzMiltYXNrICYgMHgwZikgPDwgMTIgfCAocmVnICYgMHgwZmZmKSk7CisJZm9yIChpID0gMDsgaSA8IDIwOyBpKyspIHsKKwkJdWRlbGF5KDEwMCk7CisJCWlmIChSVExfUjMyKE9DUEFSKSAmIE9DUEFSX0ZMQUcpCisJCQlicmVhazsKKwl9CisJcmV0dXJuIFJUTF9SMzIoT0NQRFIpOworfQorCitzdGF0aWMgdm9pZCBvY3Bfd3JpdGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHU4IG1hc2ssIHUxNiByZWcsIHUzMiBkYXRhKQoreworCXZvaWQgX19pb21lbSAqaW9hZGRyID0gdHAtPm1taW9fYWRkcjsKKwlpbnQgaTsKKworCVJUTF9XMzIoT0NQRFIsIGRhdGEpOworCVJUTF9XMzIoT0NQQVIsIE9DUEFSX0ZMQUcgfCAoKHUzMiltYXNrICYgMHgwZikgPDwgMTIgfCAocmVnICYgMHgwZmZmKSk7CisJZm9yIChpID0gMDsgaSA8IDIwOyBpKyspIHsKKwkJdWRlbGF5KDEwMCk7CisJCWlmICgoUlRMX1IzMihPQ1BBUikgJiBPQ1BBUl9GTEFHKSA9PSAwKQorCQkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBydGw4MTY4X29vYl9ub3RpZnkodm9pZCBfX2lvbWVtICppb2FkZHIsIHU4IGNtZCkKK3sKKwlpbnQgaTsKKworCVJUTF9XOChFUklEUiwgY21kKTsKKwlSVExfVzMyKEVSSUFSLCAweDgwMDAxMGU4KTsKKwltc2xlZXAoMik7CisJZm9yIChpID0gMDsgaSA8IDU7IGkrKykgeworCQl1ZGVsYXkoMTAwKTsKKwkJaWYgKCEoUlRMX1IzMihFUklEUikgJiBFUklBUl9GTEFHKSkKKwkJCWJyZWFrOworCX0KKworCW9jcF93cml0ZShpb2FkZHIsIDB4MSwgMHgzMCwgMHgwMDAwMDAwMSk7Cit9CisKKyNkZWZpbmUgT09CX0NNRF9SRVNFVAkJMHgwMAorI2RlZmluZSBPT0JfQ01EX0RSSVZFUl9TVEFSVAkweDA1CisjZGVmaW5lIE9PQl9DTURfRFJJVkVSX1NUT1AJMHgwNgorCitzdGF0aWMgdm9pZCBydGw4MTY4X2RyaXZlcl9zdGFydChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKK3sKKwlpbnQgaTsKKworCXJ0bDgxNjhfb29iX25vdGlmeSh0cCwgT09CX0NNRF9EUklWRVJfU1RBUlQpOworCisJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKKwkJbXNsZWVwKDEwKTsKKwkJaWYgKG9jcF9yZWFkKHRwLCAweDBmLCAweDAwMTApICYgMHgwMDAwMDgwMCkKKwkJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgcnRsODE2OF9kcml2ZXJfc3RvcChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKK3sKKwlpbnQgaTsKKworCXJ0bDgxNjhfb29iX25vdGlmeSh0cCwgT09CX0NNRF9EUklWRVJfU1RPUCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeworCQltc2xlZXAoMTApOworCQlpZiAoKG9jcF9yZWFkKHRwLCAweDBmLCAweDAwMTApICYgMHgwMDAwMDgwMCkgPT0gMCkKKwkJCWJyZWFrOworCX0KK30KKworCitzdGF0aWMgdm9pZCByODE2OV9tZGlvX3dyaXRlKHZvaWQgX19pb21lbSAqaW9hZGRyLCBpbnQgcmVnX2FkZHIsIGludCB2YWx1ZSkKIHsKIAlpbnQgaTsKIApAQCAtNTU3LDcgKzY4NCw3IEBACiAJdWRlbGF5KDIwKTsKIH0KIAotc3RhdGljIGludCBtZGlvX3JlYWQodm9pZCBfX2lvbWVtICppb2FkZHIsIGludCByZWdfYWRkcikKK3N0YXRpYyBpbnQgcjgxNjlfbWRpb19yZWFkKHZvaWQgX19pb21lbSAqaW9hZGRyLCBpbnQgcmVnX2FkZHIpCiB7CiAJaW50IGksIHZhbHVlID0gLTE7CiAKQEAgLTU4MywzNCArNzEwLDExNyBAQAogCXJldHVybiB2YWx1ZTsKIH0KIAotc3RhdGljIHZvaWQgbWRpb19wYXRjaCh2b2lkIF9faW9tZW0gKmlvYWRkciwgaW50IHJlZ19hZGRyLCBpbnQgdmFsdWUpCitzdGF0aWMgdm9pZCByODE2OGRwXzFfbWRpb19hY2Nlc3Modm9pZCBfX2lvbWVtICppb2FkZHIsIGludCByZWdfYWRkciwgdTMyIGRhdGEpCiB7Ci0JbWRpb193cml0ZShpb2FkZHIsIHJlZ19hZGRyLCBtZGlvX3JlYWQoaW9hZGRyLCByZWdfYWRkcikgfCB2YWx1ZSk7CisJaW50IGk7CisKKwlSVExfVzMyKE9DUERSLCBkYXRhIHwKKwkJKChyZWdfYWRkciAmIE9DUERSX1JFR19NQVNLKSA8PCBPQ1BEUl9HUEhZX1JFR19TSElGVCkpOworCVJUTF9XMzIoT0NQQVIsIE9DUEFSX0dQSFlfV1JJVEVfQ01EKTsKKwlSVExfVzMyKEVQSFlfUlhFUl9OVU0sIDApOworCisJZm9yIChpID0gMDsgaSA8IDEwMDsgaSsrKSB7CisJCW1kZWxheSgxKTsKKwkJaWYgKCEoUlRMX1IzMihPQ1BBUikgJiBPQ1BBUl9GTEFHKSkKKwkJCWJyZWFrOworCX0KIH0KIAotc3RhdGljIHZvaWQgbWRpb19wbHVzX21pbnVzKHZvaWQgX19pb21lbSAqaW9hZGRyLCBpbnQgcmVnX2FkZHIsIGludCBwLCBpbnQgbSkKK3N0YXRpYyB2b2lkIHI4MTY4ZHBfMV9tZGlvX3dyaXRlKHZvaWQgX19pb21lbSAqaW9hZGRyLCBpbnQgcmVnX2FkZHIsIGludCB2YWx1ZSkKK3sKKwlyODE2OGRwXzFfbWRpb19hY2Nlc3MoaW9hZGRyLCByZWdfYWRkciwgT0NQRFJfV1JJVEVfQ01EIHwKKwkJKHZhbHVlICYgT0NQRFJfREFUQV9NQVNLKSk7Cit9CisKK3N0YXRpYyBpbnQgcjgxNjhkcF8xX21kaW9fcmVhZCh2b2lkIF9faW9tZW0gKmlvYWRkciwgaW50IHJlZ19hZGRyKQoreworCWludCBpOworCisJcjgxNjhkcF8xX21kaW9fYWNjZXNzKGlvYWRkciwgcmVnX2FkZHIsIE9DUERSX1JFQURfQ01EKTsKKworCW1kZWxheSgxKTsKKwlSVExfVzMyKE9DUEFSLCBPQ1BBUl9HUEhZX1JFQURfQ01EKTsKKwlSVExfVzMyKEVQSFlfUlhFUl9OVU0sIDApOworCisJZm9yIChpID0gMDsgaSA8IDEwMDsgaSsrKSB7CisJCW1kZWxheSgxKTsKKwkJaWYgKFJUTF9SMzIoT0NQQVIpICYgT0NQQVJfRkxBRykKKwkJCWJyZWFrOworCX0KKworCXJldHVybiBSVExfUjMyKE9DUERSKSAmIE9DUERSX0RBVEFfTUFTSzsKK30KKworI2RlZmluZSBSODE2OERQXzFfTURJT19BQ0NFU1NfQklUCTB4MDAwMjAwMDAKKworc3RhdGljIHZvaWQgcjgxNjhkcF8yX21kaW9fc3RhcnQodm9pZCBfX2lvbWVtICppb2FkZHIpCit7CisJUlRMX1czMigweGQwLCBSVExfUjMyKDB4ZDApICYgflI4MTY4RFBfMV9NRElPX0FDQ0VTU19CSVQpOworfQorCitzdGF0aWMgdm9pZCByODE2OGRwXzJfbWRpb19zdG9wKHZvaWQgX19pb21lbSAqaW9hZGRyKQoreworCVJUTF9XMzIoMHhkMCwgUlRMX1IzMigweGQwKSB8IFI4MTY4RFBfMV9NRElPX0FDQ0VTU19CSVQpOworfQorCitzdGF0aWMgdm9pZCByODE2OGRwXzJfbWRpb193cml0ZSh2b2lkIF9faW9tZW0gKmlvYWRkciwgaW50IHJlZ19hZGRyLCBpbnQgdmFsdWUpCit7CisJcjgxNjhkcF8yX21kaW9fc3RhcnQoaW9hZGRyKTsKKworCXI4MTY5X21kaW9fd3JpdGUoaW9hZGRyLCByZWdfYWRkciwgdmFsdWUpOworCisJcjgxNjhkcF8yX21kaW9fc3RvcChpb2FkZHIpOworfQorCitzdGF0aWMgaW50IHI4MTY4ZHBfMl9tZGlvX3JlYWQodm9pZCBfX2lvbWVtICppb2FkZHIsIGludCByZWdfYWRkcikKK3sKKwlpbnQgdmFsdWU7CisKKwlyODE2OGRwXzJfbWRpb19zdGFydChpb2FkZHIpOworCisJdmFsdWUgPSByODE2OV9tZGlvX3JlYWQoaW9hZGRyLCByZWdfYWRkcik7CisKKwlyODE2OGRwXzJfbWRpb19zdG9wKGlvYWRkcik7CisKKwlyZXR1cm4gdmFsdWU7Cit9CisKK3N0YXRpYyB2b2lkIHJ0bF93cml0ZXBoeShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IGxvY2F0aW9uLCB1MzIgdmFsKQoreworCXRwLT5tZGlvX29wcy53cml0ZSh0cC0+bW1pb19hZGRyLCBsb2NhdGlvbiwgdmFsKTsKK30KKworc3RhdGljIGludCBydGxfcmVhZHBoeShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IGxvY2F0aW9uKQoreworCXJldHVybiB0cC0+bWRpb19vcHMucmVhZCh0cC0+bW1pb19hZGRyLCBsb2NhdGlvbik7Cit9CisKK3N0YXRpYyB2b2lkIHJ0bF9wYXRjaHBoeShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IHJlZ19hZGRyLCBpbnQgdmFsdWUpCit7CisJcnRsX3dyaXRlcGh5KHRwLCByZWdfYWRkciwgcnRsX3JlYWRwaHkodHAsIHJlZ19hZGRyKSB8IHZhbHVlKTsKK30KKworc3RhdGljIHZvaWQgcnRsX3cxdzBfcGh5KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgcmVnX2FkZHIsIGludCBwLCBpbnQgbSkKIHsKIAlpbnQgdmFsOwogCi0JdmFsID0gbWRpb19yZWFkKGlvYWRkciwgcmVnX2FkZHIpOwotCW1kaW9fd3JpdGUoaW9hZGRyLCByZWdfYWRkciwgKHZhbCB8IHApICYgfm0pOworCXZhbCA9IHJ0bF9yZWFkcGh5KHRwLCByZWdfYWRkcik7CisJcnRsX3dyaXRlcGh5KHRwLCByZWdfYWRkciwgKHZhbCB8IHApICYgfm0pOwogfQogCiBzdGF0aWMgdm9pZCBydGxfbWRpb193cml0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jYXRpb24sCiAJCQkgICBpbnQgdmFsKQogewogCXN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl2b2lkIF9faW9tZW0gKmlvYWRkciA9IHRwLT5tbWlvX2FkZHI7CiAKLQltZGlvX3dyaXRlKGlvYWRkciwgbG9jYXRpb24sIHZhbCk7CisJcnRsX3dyaXRlcGh5KHRwLCBsb2NhdGlvbiwgdmFsKTsKIH0KIAogc3RhdGljIGludCBydGxfbWRpb19yZWFkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfaWQsIGludCBsb2NhdGlvbikKIHsKIAlzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7Ci0Jdm9pZCBfX2lvbWVtICppb2FkZHIgPSB0cC0+bW1pb19hZGRyOwogCi0JcmV0dXJuIG1kaW9fcmVhZChpb2FkZHIsIGxvY2F0aW9uKTsKKwlyZXR1cm4gcnRsX3JlYWRwaHkodHAsIGxvY2F0aW9uKTsKIH0KIAogc3RhdGljIHZvaWQgcnRsX2VwaHlfd3JpdGUodm9pZCBfX2lvbWVtICppb2FkZHIsIGludCByZWdfYWRkciwgaW50IHZhbHVlKQpAQCAtNzExLDE0ICs5MjEsMTYgQEAKIAlSVExfUjE2KENQbHVzQ21kKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBydGw4MTY5X3RiaV9yZXNldF9wZW5kaW5nKHZvaWQgX19pb21lbSAqaW9hZGRyKQorc3RhdGljIHVuc2lnbmVkIGludCBydGw4MTY5X3RiaV9yZXNldF9wZW5kaW5nKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogeworCXZvaWQgX19pb21lbSAqaW9hZGRyID0gdHAtPm1taW9fYWRkcjsKKwogCXJldHVybiBSVExfUjMyKFRCSUNTUikgJiBUQklSZXNldDsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBydGw4MTY5X3htaWlfcmVzZXRfcGVuZGluZyh2b2lkIF9faW9tZW0gKmlvYWRkcikKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcnRsODE2OV94bWlpX3Jlc2V0X3BlbmRpbmcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiB7Ci0JcmV0dXJuIG1kaW9fcmVhZChpb2FkZHIsIE1JSV9CTUNSKSAmIEJNQ1JfUkVTRVQ7CisJcmV0dXJuIHJ0bF9yZWFkcGh5KHRwLCBNSUlfQk1DUikgJiBCTUNSX1JFU0VUOwogfQogCiBzdGF0aWMgdW5zaWduZWQgaW50IHJ0bDgxNjlfdGJpX2xpbmtfb2sodm9pZCBfX2lvbWVtICppb2FkZHIpCkBAIC03MzEsMTcgKzk0MywxOSBAQAogCXJldHVybiBSVExfUjgoUEhZc3RhdHVzKSAmIExpbmtTdGF0dXM7CiB9CiAKLXN0YXRpYyB2b2lkIHJ0bDgxNjlfdGJpX3Jlc2V0X2VuYWJsZSh2b2lkIF9faW9tZW0gKmlvYWRkcikKK3N0YXRpYyB2b2lkIHJ0bDgxNjlfdGJpX3Jlc2V0X2VuYWJsZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIHsKKwl2b2lkIF9faW9tZW0gKmlvYWRkciA9IHRwLT5tbWlvX2FkZHI7CisKIAlSVExfVzMyKFRCSUNTUiwgUlRMX1IzMihUQklDU1IpIHwgVEJJUmVzZXQpOwogfQogCi1zdGF0aWMgdm9pZCBydGw4MTY5X3htaWlfcmVzZXRfZW5hYmxlKHZvaWQgX19pb21lbSAqaW9hZGRyKQorc3RhdGljIHZvaWQgcnRsODE2OV94bWlpX3Jlc2V0X2VuYWJsZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIHsKIAl1bnNpZ25lZCBpbnQgdmFsOwogCi0JdmFsID0gbWRpb19yZWFkKGlvYWRkciwgTUlJX0JNQ1IpIHwgQk1DUl9SRVNFVDsKLQltZGlvX3dyaXRlKGlvYWRkciwgTUlJX0JNQ1IsIHZhbCAmIDB4ZmZmZik7CisJdmFsID0gcnRsX3JlYWRwaHkodHAsIE1JSV9CTUNSKSB8IEJNQ1JfUkVTRVQ7CisJcnRsX3dyaXRlcGh5KHRwLCBNSUlfQk1DUiwgdmFsICYgMHhmZmZmKTsKIH0KIAogc3RhdGljIHZvaWQgX19ydGw4MTY5X2NoZWNrX2xpbmtfc3RhdHVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCkBAIC05MDUsMTggKzExMTksMTcgQEAKIAkJCQkgIHU4IGF1dG9uZWcsIHUxNiBzcGVlZCwgdTggZHVwbGV4KQogewogCXN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl2b2lkIF9faW9tZW0gKmlvYWRkciA9IHRwLT5tbWlvX2FkZHI7CiAJaW50IGdpZ2FfY3RybCwgYm1jcjsKIAogCWlmIChhdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFKSB7CiAJCWludCBhdXRvX25lZ287CiAKLQkJYXV0b19uZWdvID0gbWRpb19yZWFkKGlvYWRkciwgTUlJX0FEVkVSVElTRSk7CisJCWF1dG9fbmVnbyA9IHJ0bF9yZWFkcGh5KHRwLCBNSUlfQURWRVJUSVNFKTsKIAkJYXV0b19uZWdvIHw9IChBRFZFUlRJU0VfMTBIQUxGIHwgQURWRVJUSVNFXzEwRlVMTCB8CiAJCQkgICAgICBBRFZFUlRJU0VfMTAwSEFMRiB8IEFEVkVSVElTRV8xMDBGVUxMKTsKIAkJYXV0b19uZWdvIHw9IEFEVkVSVElTRV9QQVVTRV9DQVAgfCBBRFZFUlRJU0VfUEFVU0VfQVNZTTsKIAotCQlnaWdhX2N0cmwgPSBtZGlvX3JlYWQoaW9hZGRyLCBNSUlfQ1RSTDEwMDApOworCQlnaWdhX2N0cmwgPSBydGxfcmVhZHBoeSh0cCwgTUlJX0NUUkwxMDAwKTsKIAkJZ2lnYV9jdHJsICY9IH4oQURWRVJUSVNFXzEwMDBGVUxMIHwgQURWRVJUSVNFXzEwMDBIQUxGKTsKIAogCQkvKiBUaGUgODEwMGUvODEwMWUvODEwMmUgZG8gRmFzdCBFdGhlcm5ldCBvbmx5LiAqLwpAQCAtOTQ0LDEyICsxMTU3LDEyIEBACiAJCQkgKiBWZW5kb3Igc3BlY2lmaWMgKDB4MWYpIGFuZCByZXNlcnZlZCAoMHgwZSkgTUlJCiAJCQkgKiByZWdpc3RlcnMuCiAJCQkgKi8KLQkJCW1kaW9fd3JpdGUoaW9hZGRyLCAweDFmLCAweDAwMDApOwotCQkJbWRpb193cml0ZShpb2FkZHIsIDB4MGUsIDB4MDAwMCk7CisJCQlydGxfd3JpdGVwaHkodHAsIDB4MWYsIDB4MDAwMCk7CisJCQlydGxfd3JpdGVwaHkodHAsIDB4MGUsIDB4MDAwMCk7CiAJCX0KIAotCQltZGlvX3dyaXRlKGlvYWRkciwgTUlJX0FEVkVSVElTRSwgYXV0b19uZWdvKTsKLQkJbWRpb193cml0ZShpb2FkZHIsIE1JSV9DVFJMMTAwMCwgZ2lnYV9jdHJsKTsKKwkJcnRsX3dyaXRlcGh5KHRwLCBNSUlfQURWRVJUSVNFLCBhdXRvX25lZ28pOworCQlydGxfd3JpdGVwaHkodHAsIE1JSV9DVFJMMTAwMCwgZ2lnYV9jdHJsKTsKIAl9IGVsc2UgewogCQlnaWdhX2N0cmwgPSAwOwogCkBAIC05NjMsMjEgKzExNzYsMjEgQEAKIAkJaWYgKGR1cGxleCA9PSBEVVBMRVhfRlVMTCkKIAkJCWJtY3IgfD0gQk1DUl9GVUxMRFBMWDsKIAotCQltZGlvX3dyaXRlKGlvYWRkciwgMHgxZiwgMHgwMDAwKTsKKwkJcnRsX3dyaXRlcGh5KHRwLCAweDFmLCAweDAwMDApOwogCX0KIAogCXRwLT5waHlfMTAwMF9jdHJsX3JlZyA9IGdpZ2FfY3RybDsKIAotCW1kaW9fd3JpdGUoaW9hZGRyLCBNSUlfQk1DUiwgYm1jcik7CisJcnRsX3dyaXRlcGh5KHRwLCBNSUlfQk1DUiwgYm1jcik7CiAKIAlpZiAoKHRwLT5tYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzAyKSB8fAogCSAgICAodHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMDMpKSB7CiAJCWlmICgoc3BlZWQgPT0gU1BFRURfMTAwKSAmJiAoYXV0b25lZyAhPSBBVVRPTkVHX0VOQUJMRSkpIHsKLQkJCW1kaW9fd3JpdGUoaW9hZGRyLCAweDE3LCAweDIxMzgpOwotCQkJbWRpb193cml0ZShpb2FkZHIsIDB4MGUsIDB4MDI2MCk7CisJCQlydGxfd3JpdGVwaHkodHAsIDB4MTcsIDB4MjEzOCk7CisJCQlydGxfd3JpdGVwaHkodHAsIDB4MGUsIDB4MDI2MCk7CiAJCX0gZWxzZSB7Ci0JCQltZGlvX3dyaXRlKGlvYWRkciwgMHgxNywgMHgyMTA4KTsKLQkJCW1kaW9fd3JpdGUoaW9hZGRyLCAweDBlLCAweDAwMDApOworCQkJcnRsX3dyaXRlcGh5KHRwLCAweDE3LCAweDIxMDgpOworCQkJcnRsX3dyaXRlcGh5KHRwLCAweDBlLCAweDAwMDApOwogCQl9CiAJfQogCkBAIC0xMzE5LDkgKzE1MzIsMTIgQEAKIAkJLyogODE2OEQgZmFtaWx5LiAqLwogCQl7IDB4N2NmMDAwMDAsIDB4MjgzMDAwMDAsCVJUTF9HSUdBX01BQ19WRVJfMjYgfSwKIAkJeyAweDdjZjAwMDAwLCAweDI4MTAwMDAwLAlSVExfR0lHQV9NQUNfVkVSXzI1IH0sCi0JCXsgMHg3YzgwMDAwMCwgMHgyODgwMDAwMCwJUlRMX0dJR0FfTUFDX1ZFUl8yNyB9LAogCQl7IDB4N2M4MDAwMDAsIDB4MjgwMDAwMDAsCVJUTF9HSUdBX01BQ19WRVJfMjYgfSwKIAorCQkvKiA4MTY4RFAgZmFtaWx5LiAqLworCQl7IDB4N2NmMDAwMDAsIDB4Mjg4MDAwMDAsCVJUTF9HSUdBX01BQ19WRVJfMjcgfSwKKwkJeyAweDdjZjAwMDAwLCAweDI4YTAwMDAwLAlSVExfR0lHQV9NQUNfVkVSXzI4IH0sCisKIAkJLyogODE2OEMgZmFtaWx5LiAqLwogCQl7IDB4N2NmMDAwMDAsIDB4M2NiMDAwMDAsCVJUTF9HSUdBX01BQ19WRVJfMjQgfSwKIAkJeyAweDdjZjAwMDAwLCAweDNjOTAwMDAwLAlSVExfR0lHQV9NQUNfVkVSXzIzIH0sCkBAIC0xMzg1LDE1ICsxNjAxLDc0IEBACiAJdTE2IHZhbDsKIH07CiAKLXN0YXRpYyB2b2lkIHJ0bF9waHlfd3JpdGUodm9pZCBfX2lvbWVtICppb2FkZHIsIGNvbnN0IHN0cnVjdCBwaHlfcmVnICpyZWdzLCBpbnQgbGVuKQorc3RhdGljIHZvaWQgcnRsX3dyaXRlcGh5X2JhdGNoKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBwaHlfcmVnICpyZWdzLCBpbnQgbGVuKQogewogCXdoaWxlIChsZW4tLSA+IDApIHsKLQkJbWRpb193cml0ZShpb2FkZHIsIHJlZ3MtPnJlZywgcmVncy0+dmFsKTsKKwkJcnRsX3dyaXRlcGh5KHRwLCByZWdzLT5yZWcsIHJlZ3MtPnZhbCk7CiAJCXJlZ3MrKzsKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIHJ0bDgxNjlzX2h3X3BoeV9jb25maWcodm9pZCBfX2lvbWVtICppb2FkZHIpCisjZGVmaW5lIFBIWV9SRUFECQkweDAwMDAwMDAwCisjZGVmaW5lIFBIWV9EQVRBX09SCQkweDEwMDAwMDAwCisjZGVmaW5lIFBIWV9EQVRBX0FORAkJMHgyMDAwMDAwMAorI2RlZmluZSBQSFlfQkpNUE4JCTB4MzAwMDAwMDAKKyNkZWZpbmUgUEhZX1JFQURfRUZVU0UJCTB4NDAwMDAwMDAKKyNkZWZpbmUgUEhZX1JFQURfTUFDX0JZVEUJMHg1MDAwMDAwMAorI2RlZmluZSBQSFlfV1JJVEVfTUFDX0JZVEUJMHg2MDAwMDAwMAorI2RlZmluZSBQSFlfQ0xFQVJfUkVBRENPVU5UCTB4NzAwMDAwMDAKKyNkZWZpbmUgUEhZX1dSSVRFCQkweDgwMDAwMDAwCisjZGVmaW5lIFBIWV9SRUFEQ09VTlRfRVFfU0tJUAkweDkwMDAwMDAwCisjZGVmaW5lIFBIWV9DT01QX0VRX1NLSVBOCTB4YTAwMDAwMDAKKyNkZWZpbmUgUEhZX0NPTVBfTkVRX1NLSVBOCTB4YjAwMDAwMDAKKyNkZWZpbmUgUEhZX1dSSVRFX1BSRVZJT1VTCTB4YzAwMDAwMDAKKyNkZWZpbmUgUEhZX1NLSVBOCQkweGQwMDAwMDAwCisjZGVmaW5lIFBIWV9ERUxBWV9NUwkJMHhlMDAwMDAwMAorI2RlZmluZSBQSFlfV1JJVEVfRVJJX1dPUkQJMHhmMDAwMDAwMAorCitzdGF0aWMgdm9pZAorcnRsX3BoeV93cml0ZV9mdyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdykKK3sKKwlfX2xlMzIgKnBoeXRhYmxlID0gKF9fbGUzMiAqKWZ3LT5kYXRhOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB0cC0+ZGV2OworCXNpemVfdCBpOworCisJaWYgKGZ3LT5zaXplICUgc2l6ZW9mKCpwaHl0YWJsZSkpIHsKKwkJbmV0aWZfZXJyKHRwLCBwcm9iZSwgZGV2LCAib2RkIHNpemVkIGZpcm13YXJlICV6ZFxuIiwgZnctPnNpemUpOworCQlyZXR1cm47CisJfQorCisJZm9yIChpID0gMDsgaSA8IGZ3LT5zaXplIC8gc2l6ZW9mKCpwaHl0YWJsZSk7IGkrKykgeworCQl1MzIgYWN0aW9uID0gbGUzMl90b19jcHUocGh5dGFibGVbaV0pOworCisJCWlmICghYWN0aW9uKQorCQkJYnJlYWs7CisKKwkJaWYgKChhY3Rpb24gJiAweGYwMDAwMDAwKSAhPSBQSFlfV1JJVEUpIHsKKwkJCW5ldGlmX2Vycih0cCwgcHJvYmUsIGRldiwKKwkJCQkgICJ1bmtub3duIGFjdGlvbiAweCUwOHhcbiIsIGFjdGlvbik7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwl3aGlsZSAoaS0tICE9IDApIHsKKwkJdTMyIGFjdGlvbiA9IGxlMzJfdG9fY3B1KCpwaHl0YWJsZSk7CisJCXUzMiBkYXRhID0gYWN0aW9uICYgMHgwMDAwZmZmZjsKKwkJdTMyIHJlZyA9IChhY3Rpb24gJiAweDBmZmYwMDAwKSA+PiAxNjsKKworCQlzd2l0Y2goYWN0aW9uICYgMHhmMDAwMDAwMCkgeworCQljYXNlIFBIWV9XUklURToKKwkJCXJ0bF93cml0ZXBoeSh0cCwgcmVnLCBkYXRhKTsKKwkJCXBoeXRhYmxlKys7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCUJVRygpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBydGw4MTY5c19od19waHlfY29uZmlnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogewogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGh5X3JlZyBwaHlfcmVnX2luaXRbXSA9IHsKIAkJeyAweDFmLCAweDAwMDEgfSwKQEAgLTE0NTcsMTAgKzE3MzIsMTAgQEAKIAkJeyAweDAwLCAweDkyMDAgfQogCX07CiAKLQlydGxfcGh5X3dyaXRlKGlvYWRkciwgcGh5X3JlZ19pbml0LCBBUlJBWV9TSVpFKHBoeV9yZWdfaW5pdCkpOworCXJ0bF93cml0ZXBoeV9iYXRjaCh0cCwgcGh5X3JlZ19pbml0LCBBUlJBWV9TSVpFKHBoeV9yZWdfaW5pdCkpOwogfQogCi1zdGF0aWMgdm9pZCBydGw4MTY5c2JfaHdfcGh5X2NvbmZpZyh2b2lkIF9faW9tZW0gKmlvYWRkcikKK3N0YXRpYyB2b2lkIHJ0bDgxNjlzYl9od19waHlfY29uZmlnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogewogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGh5X3JlZyBwaHlfcmVnX2luaXRbXSA9IHsKIAkJeyAweDFmLCAweDAwMDIgfSwKQEAgLTE0NjgsMTEgKzE3NDMsMTAgQEAKIAkJeyAweDFmLCAweDAwMDAgfQogCX07CiAKLQlydGxfcGh5X3dyaXRlKGlvYWRkciwgcGh5X3JlZ19pbml0LCBBUlJBWV9TSVpFKHBoeV9yZWdfaW5pdCkpOworCXJ0bF93cml0ZXBoeV9iYXRjaCh0cCwgcGh5X3JlZ19pbml0LCBBUlJBWV9TSVpFKHBoeV9yZWdfaW5pdCkpOwogfQogCi1zdGF0aWMgdm9pZCBydGw4MTY5c2NkX2h3X3BoeV9jb25maWdfcXVpcmsoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsCi0JCQkJCSAgIHZvaWQgX19pb21lbSAqaW9hZGRyKQorc3RhdGljIHZvaWQgcnRsODE2OXNjZF9od19waHlfY29uZmlnX3F1aXJrKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogewogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdHAtPnBjaV9kZXY7CiAJdTE2IHZlbmRvcl9pZCwgZGV2aWNlX2lkOwpAQCAtMTQ4MywxMyArMTc1NywxMiBAQAogCWlmICgodmVuZG9yX2lkICE9IFBDSV9WRU5ET1JfSURfR0lHQUJZVEUpIHx8IChkZXZpY2VfaWQgIT0gMHhlMDAwKSkKIAkJcmV0dXJuOwogCi0JbWRpb193cml0ZShpb2FkZHIsIDB4MWYsIDB4MDAwMSk7Ci0JbWRpb193cml0ZShpb2FkZHIsIDB4MTAsIDB4ZjAxYik7Ci0JbWRpb193cml0ZShpb2FkZHIsIDB4MWYsIDB4MDAwMCk7CisJcnRsX3dyaXRlcGh5KHRwLCAweDFmLCAweDAwMDEpOworCXJ0bF93cml0ZXBoeSh0cCwgMHgxMCwgMHhmMDFiKTsKKwlydGxfd3JpdGVwaHkodHAsIDB4MWYsIDB4MDAwMCk7CiB9CiAKLXN0YXRpYyB2b2lkIHJ0bDgxNjlzY2RfaHdfcGh5X2NvbmZpZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwKLQkJCQkgICAgIHZvaWQgX19pb21lbSAqaW9hZGRyKQorc3RhdGljIHZvaWQgcnRsODE2OXNjZF9od19waHlfY29uZmlnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogewogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGh5X3JlZyBwaHlfcmVnX2luaXRbXSA9IHsKIAkJeyAweDFmLCAweDAwMDEgfSwKQEAgLTE1MzEsMTIgKzE4MDQsMTIgQEAKIAkJeyAweDFmLCAweDAwMDAgfQogCX07CiAKLQlydGxfcGh5X3dyaXRlKGlvYWRkciwgcGh5X3JlZ19pbml0LCBBUlJBWV9TSVpFKHBoeV9yZWdfaW5pdCkpOworCXJ0bF93cml0ZXBoeV9iYXRjaCh0cCwgcGh5X3JlZ19pbml0LCBBUlJBWV9TSVpFKHBoeV9yZWdfaW5pdCkpOwogCi0JcnRsODE2OXNjZF9od19waHlfY29uZmlnX3F1aXJrKHRwLCBpb2FkZHIpOworCXJ0bDgxNjlzY2RfaHdfcGh5X2NvbmZpZ19xdWlyayh0cCk7CiB9CiAKLXN0YXRpYyB2b2lkIHJ0bDgxNjlzY2VfaHdfcGh5X2NvbmZpZyh2b2lkIF9faW9tZW0gKmlvYWRkcikKK3N0YXRpYyB2b2lkIHJ0bDgxNjlzY2VfaHdfcGh5X2NvbmZpZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IHBoeV9yZWcgcGh5X3JlZ19pbml0W10gPSB7CiAJCXsgMHgxZiwgMHgwMDAxIH0sCkBAIC0xNTg2LDIzICsxODU5LDIzIEBACiAJCXsgMHgxZiwgMHgwMDAwIH0KIAl9OwogCi0JcnRsX3BoeV93cml0ZShpb2FkZHIsIHBoeV9yZWdfaW5pdCwgQVJSQVlfU0laRShwaHlfcmVnX2luaXQpKTsKKwlydGxfd3JpdGVwaHlfYmF0Y2godHAsIHBoeV9yZWdfaW5pdCwgQVJSQVlfU0laRShwaHlfcmVnX2luaXQpKTsKIH0KIAotc3RhdGljIHZvaWQgcnRsODE2OGJiX2h3X3BoeV9jb25maWcodm9pZCBfX2lvbWVtICppb2FkZHIpCitzdGF0aWMgdm9pZCBydGw4MTY4YmJfaHdfcGh5X2NvbmZpZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IHBoeV9yZWcgcGh5X3JlZ19pbml0W10gPSB7CiAJCXsgMHgxMCwgMHhmNDFiIH0sCiAJCXsgMHgxZiwgMHgwMDAwIH0KIAl9OwogCi0JbWRpb193cml0ZShpb2FkZHIsIDB4MWYsIDB4MDAwMSk7Ci0JbWRpb19wYXRjaChpb2FkZHIsIDB4MTYsIDEgPDwgMCk7CisJcnRsX3dyaXRlcGh5KHRwLCAweDFmLCAweDAwMDEpOworCXJ0bF9wYXRjaHBoeSh0cCwgMHgxNiwgMSA8PCAwKTsKIAotCXJ0bF9waHlfd3JpdGUoaW9hZGRyLCBwaHlfcmVnX2luaXQsIEFSUkFZX1NJWkUocGh5X3JlZ19pbml0KSk7CisJcnRsX3dyaXRlcGh5X2JhdGNoKHRwLCBwaHlfcmVnX2luaXQsIEFSUkFZX1NJWkUocGh5X3JlZ19pbml0KSk7CiB9CiAKLXN0YXRpYyB2b2lkIHJ0bDgxNjhiZWZfaHdfcGh5X2NvbmZpZyh2b2lkIF9faW9tZW0gKmlvYWRkcikKK3N0YXRpYyB2b2lkIHJ0bDgxNjhiZWZfaHdfcGh5X2NvbmZpZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IHBoeV9yZWcgcGh5X3JlZ19pbml0W10gPSB7CiAJCXsgMHgxZiwgMHgwMDAxIH0sCkBAIC0xNjEwLDEwICsxODgzLDEwIEBACiAJCXsgMHgxZiwgMHgwMDAwIH0KIAl9OwogCi0JcnRsX3BoeV93cml0ZShpb2FkZHIsIHBoeV9yZWdfaW5pdCwgQVJSQVlfU0laRShwaHlfcmVnX2luaXQpKTsKKwlydGxfd3JpdGVwaHlfYmF0Y2godHAsIHBoeV9yZWdfaW5pdCwgQVJSQVlfU0laRShwaHlfcmVnX2luaXQpKTsKIH0KIAotc3RhdGljIHZvaWQgcnRsODE2OGNwXzFfaHdfcGh5X2NvbmZpZyh2b2lkIF9faW9tZW0gKmlvYWRkcikKK3N0YXRpYyB2b2lkIHJ0bDgxNjhjcF8xX2h3X3BoeV9jb25maWcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBwaHlfcmVnIHBoeV9yZWdfaW5pdFtdID0gewogCQl7IDB4MWYsIDB4MDAwMCB9LApAQCAtMTYyMywxMCArMTg5NiwxMCBAQAogCQl7IDB4MWYsIDB4MDAwMCB9CiAJfTsKIAotCXJ0bF9waHlfd3JpdGUoaW9hZGRyLCBwaHlfcmVnX2luaXQsIEFSUkFZX1NJWkUocGh5X3JlZ19pbml0KSk7CisJcnRsX3dyaXRlcGh5X2JhdGNoKHRwLCBwaHlfcmVnX2luaXQsIEFSUkFZX1NJWkUocGh5X3JlZ19pbml0KSk7CiB9CiAKLXN0YXRpYyB2b2lkIHJ0bDgxNjhjcF8yX2h3X3BoeV9jb25maWcodm9pZCBfX2lvbWVtICppb2FkZHIpCitzdGF0aWMgdm9pZCBydGw4MTY4Y3BfMl9od19waHlfY29uZmlnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogewogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGh5X3JlZyBwaHlfcmVnX2luaXRbXSA9IHsKIAkJeyAweDFmLCAweDAwMDEgfSwKQEAgLTE2MzQsMTQgKzE5MDcsMTQgQEAKIAkJeyAweDFmLCAweDAwMDAgfQogCX07CiAKLQltZGlvX3dyaXRlKGlvYWRkciwgMHgxZiwgMHgwMDAwKTsKLQltZGlvX3BhdGNoKGlvYWRkciwgMHgxNCwgMSA8PCA1KTsKLQltZGlvX3BhdGNoKGlvYWRkciwgMHgwZCwgMSA8PCA1KTsKKwlydGxfd3JpdGVwaHkodHAsIDB4MWYsIDB4MDAwMCk7CisJcnRsX3BhdGNocGh5KHRwLCAweDE0LCAxIDw8IDUpOworCXJ0bF9wYXRjaHBoeSh0cCwgMHgwZCwgMSA8PCA1KTsKIAotCXJ0bF9waHlfd3JpdGUoaW9hZGRyLCBwaHlfcmVnX2luaXQsIEFSUkFZX1NJWkUocGh5X3JlZ19pbml0KSk7CisJcnRsX3dyaXRlcGh5X2JhdGNoKHRwLCBwaHlfcmVnX2luaXQsIEFSUkFZX1NJWkUocGh5X3JlZ19pbml0KSk7CiB9CiAKLXN0YXRpYyB2b2lkIHJ0bDgxNjhjXzFfaHdfcGh5X2NvbmZpZyh2b2lkIF9faW9tZW0gKmlvYWRkcikKK3N0YXRpYyB2b2lkIHJ0bDgxNjhjXzFfaHdfcGh5X2NvbmZpZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IHBoeV9yZWcgcGh5X3JlZ19pbml0W10gPSB7CiAJCXsgMHgxZiwgMHgwMDAxIH0sCkBAIC0xNjYzLDE0ICsxOTM2LDE0IEBACiAJCXsgMHgwOSwgMHgwMDAwIH0KIAl9OwogCi0JcnRsX3BoeV93cml0ZShpb2FkZHIsIHBoeV9yZWdfaW5pdCwgQVJSQVlfU0laRShwaHlfcmVnX2luaXQpKTsKKwlydGxfd3JpdGVwaHlfYmF0Y2godHAsIHBoeV9yZWdfaW5pdCwgQVJSQVlfU0laRShwaHlfcmVnX2luaXQpKTsKIAotCW1kaW9fcGF0Y2goaW9hZGRyLCAweDE0LCAxIDw8IDUpOwotCW1kaW9fcGF0Y2goaW9hZGRyLCAweDBkLCAxIDw8IDUpOwotCW1kaW9fd3JpdGUoaW9hZGRyLCAweDFmLCAweDAwMDApOworCXJ0bF9wYXRjaHBoeSh0cCwgMHgxNCwgMSA8PCA1KTsKKwlydGxfcGF0Y2hwaHkodHAsIDB4MGQsIDEgPDwgNSk7CisJcnRsX3dyaXRlcGh5KHRwLCAweDFmLCAweDAwMDApOwogfQogCi1zdGF0aWMgdm9pZCBydGw4MTY4Y18yX2h3X3BoeV9jb25maWcodm9pZCBfX2lvbWVtICppb2FkZHIpCitzdGF0aWMgdm9pZCBydGw4MTY4Y18yX2h3X3BoeV9jb25maWcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBwaHlfcmVnIHBoeV9yZWdfaW5pdFtdID0gewogCQl7IDB4MWYsIDB4MDAwMSB9LApAQCAtMTY5MCwxNSArMTk2MywxNSBAQAogCQl7IDB4MWYsIDB4MDAwMCB9CiAJfTsKIAotCXJ0bF9waHlfd3JpdGUoaW9hZGRyLCBwaHlfcmVnX2luaXQsIEFSUkFZX1NJWkUocGh5X3JlZ19pbml0KSk7CisJcnRsX3dyaXRlcGh5X2JhdGNoKHRwLCBwaHlfcmVnX2luaXQsIEFSUkFZX1NJWkUocGh5X3JlZ19pbml0KSk7CiAKLQltZGlvX3BhdGNoKGlvYWRkciwgMHgxNiwgMSA8PCAwKTsKLQltZGlvX3BhdGNoKGlvYWRkciwgMHgxNCwgMSA8PCA1KTsKLQltZGlvX3BhdGNoKGlvYWRkciwgMHgwZCwgMSA8PCA1KTsKLQltZGlvX3dyaXRlKGlvYWRkciwgMHgxZiwgMHgwMDAwKTsKKwlydGxfcGF0Y2hwaHkodHAsIDB4MTYsIDEgPDwgMCk7CisJcnRsX3BhdGNocGh5KHRwLCAweDE0LCAxIDw8IDUpOworCXJ0bF9wYXRjaHBoeSh0cCwgMHgwZCwgMSA8PCA1KTsKKwlydGxfd3JpdGVwaHkodHAsIDB4MWYsIDB4MDAwMCk7CiB9CiAKLXN0YXRpYyB2b2lkIHJ0bDgxNjhjXzNfaHdfcGh5X2NvbmZpZyh2b2lkIF9faW9tZW0gKmlvYWRkcikKK3N0YXRpYyB2b2lkIHJ0bDgxNjhjXzNfaHdfcGh5X2NvbmZpZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IHBoeV9yZWcgcGh5X3JlZ19pbml0W10gPSB7CiAJCXsgMHgxZiwgMHgwMDAxIH0sCkBAIC0xNzEyLDQ2NSArMTk4NSwyMyBAQAogCQl7IDB4MWYsIDB4MDAwMCB9CiAJfTsKIAotCXJ0bF9waHlfd3JpdGUoaW9hZGRyLCBwaHlfcmVnX2luaXQsIEFSUkFZX1NJWkUocGh5X3JlZ19pbml0KSk7CisJcnRsX3dyaXRlcGh5X2JhdGNoKHRwLCBwaHlfcmVnX2luaXQsIEFSUkFZX1NJWkUocGh5X3JlZ19pbml0KSk7CiAKLQltZGlvX3BhdGNoKGlvYWRkciwgMHgxNiwgMSA8PCAwKTsKLQltZGlvX3BhdGNoKGlvYWRkciwgMHgxNCwgMSA8PCA1KTsKLQltZGlvX3BhdGNoKGlvYWRkciwgMHgwZCwgMSA8PCA1KTsKLQltZGlvX3dyaXRlKGlvYWRkciwgMHgxZiwgMHgwMDAwKTsKKwlydGxfcGF0Y2hwaHkodHAsIDB4MTYsIDEgPDwgMCk7CisJcnRsX3BhdGNocGh5KHRwLCAweDE0LCAxIDw8IDUpOworCXJ0bF9wYXRjaHBoeSh0cCwgMHgwZCwgMSA8PCA1KTsKKwlydGxfd3JpdGVwaHkodHAsIDB4MWYsIDB4MDAwMCk7CiB9CiAKLXN0YXRpYyB2b2lkIHJ0bDgxNjhjXzRfaHdfcGh5X2NvbmZpZyh2b2lkIF9faW9tZW0gKmlvYWRkcikKK3N0YXRpYyB2b2lkIHJ0bDgxNjhjXzRfaHdfcGh5X2NvbmZpZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIHsKLQlydGw4MTY4Y18zX2h3X3BoeV9jb25maWcoaW9hZGRyKTsKKwlydGw4MTY4Y18zX2h3X3BoeV9jb25maWcodHApOwogfQogCi1zdGF0aWMgdm9pZCBydGw4MTY4ZF8xX2h3X3BoeV9jb25maWcodm9pZCBfX2lvbWVtICppb2FkZHIpCitzdGF0aWMgdm9pZCBydGw4MTY4ZF8xX2h3X3BoeV9jb25maWcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBwaHlfcmVnIHBoeV9yZWdfaW5pdF8wW10gPSB7Ci0JCXsgMHgxZiwgMHgwMDAxIH0sCi0JCXsgMHgwNiwgMHg0MDY0IH0sCi0JCXsgMHgwNywgMHgyODYzIH0sCi0JCXsgMHgwOCwgMHgwNTljIH0sCi0JCXsgMHgwOSwgMHgyNmI0IH0sCi0JCXsgMHgwYSwgMHg2YTE5IH0sCi0JCXsgMHgwYiwgMHhkY2M4IH0sCi0JCXsgMHgxMCwgMHhmMDZkIH0sCi0JCXsgMHgxNCwgMHg3ZjY4IH0sCi0JCXsgMHgxOCwgMHg3ZmQ5IH0sCi0JCXsgMHgxYywgMHhmMGZmIH0sCi0JCXsgMHgxZCwgMHgzZDljIH0sCi0JCXsgMHgxZiwgMHgwMDAzIH0sCi0JCXsgMHgxMiwgMHhmNDlmIH0sCi0JCXsgMHgxMywgMHgwNzBiIH0sCi0JCXsgMHgxYSwgMHgwNWFkIH0sCi0JCXsgMHgxNCwgMHg5NGMwIH0KLQl9OwotCXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGh5X3JlZyBwaHlfcmVnX2luaXRfMVtdID0gewotCQl7IDB4MWYsIDB4MDAwMiB9LAotCQl7IDB4MDYsIDB4NTU2MSB9LAotCQl7IDB4MWYsIDB4MDAwNSB9LAotCQl7IDB4MDUsIDB4ODMzMiB9LAotCQl7IDB4MDYsIDB4NTU2MSB9Ci0JfTsKLQlzdGF0aWMgY29uc3Qgc3RydWN0IHBoeV9yZWcgcGh5X3JlZ19pbml0XzJbXSA9IHsKLQkJeyAweDFmLCAweDAwMDUgfSwKLQkJeyAweDA1LCAweGZmYzIgfSwKLQkJeyAweDFmLCAweDAwMDUgfSwKLQkJeyAweDA1LCAweDgwMDAgfSwKLQkJeyAweDA2LCAweGY4ZjkgfSwKLQkJeyAweDA2LCAweGZhZWYgfSwKLQkJeyAweDA2LCAweDU5ZWUgfSwKLQkJeyAweDA2LCAweGY4ZWEgfSwKLQkJeyAweDA2LCAweDAwZWUgfSwKLQkJeyAweDA2LCAweGY4ZWIgfSwKLQkJeyAweDA2LCAweDAwZTAgfSwKLQkJeyAweDA2LCAweGY4N2MgfSwKLQkJeyAweDA2LCAweGUxZjggfSwKLQkJeyAweDA2LCAweDdkNTkgfSwKLQkJeyAweDA2LCAweDBmZWYgfSwKLQkJeyAweDA2LCAweDAxMzkgfSwKLQkJeyAweDA2LCAweDAyOWUgfSwKLQkJeyAweDA2LCAweDA2ZWYgfSwKLQkJeyAweDA2LCAweDEwMzkgfSwKLQkJeyAweDA2LCAweDA4OWYgfSwKLQkJeyAweDA2LCAweDJhZWUgfSwKLQkJeyAweDA2LCAweGY4ZWEgfSwKLQkJeyAweDA2LCAweDAwZWUgfSwKLQkJeyAweDA2LCAweGY4ZWIgfSwKLQkJeyAweDA2LCAweDAxZTAgfSwKLQkJeyAweDA2LCAweGY4N2MgfSwKLQkJeyAweDA2LCAweGUxZjggfSwKLQkJeyAweDA2LCAweDdkNTggfSwKLQkJeyAweDA2LCAweDQwOWUgfSwKLQkJeyAweDA2LCAweDBmMzkgfSwKLQkJeyAweDA2LCAweDQ2YWEgfSwKLQkJeyAweDA2LCAweDBiYmYgfSwKLQkJeyAweDA2LCAweDgyOTAgfSwKLQkJeyAweDA2LCAweGQ2ODIgfSwKLQkJeyAweDA2LCAweDk4MDIgfSwKLQkJeyAweDA2LCAweDAxNGYgfSwKLQkJeyAweDA2LCAweGFlMDkgfSwKLQkJeyAweDA2LCAweGJmODIgfSwKLQkJeyAweDA2LCAweDk4ZDYgfSwKLQkJeyAweDA2LCAweDgyYTAgfSwKLQkJeyAweDA2LCAweDAyMDEgfSwKLQkJeyAweDA2LCAweDRmZWYgfSwKLQkJeyAweDA2LCAweDk1ZmUgfSwKLQkJeyAweDA2LCAweGZkZmMgfSwKLQkJeyAweDA2LCAweDA1ZjggfSwKLQkJeyAweDA2LCAweGY5ZmEgfSwKLQkJeyAweDA2LCAweGVlZjggfSwKLQkJeyAweDA2LCAweGVhMDAgfSwKLQkJeyAweDA2LCAweGVlZjggfSwKLQkJeyAweDA2LCAweGViMDAgfSwKLQkJeyAweDA2LCAweGUyZjggfSwKLQkJeyAweDA2LCAweDdjZTMgfSwKLQkJeyAweDA2LCAweGY4N2QgfSwKLQkJeyAweDA2LCAweGE1MTEgfSwKLQkJeyAweDA2LCAweDExMTIgfSwKLQkJeyAweDA2LCAweGQyNDAgfSwKLQkJeyAweDA2LCAweGQ2NDQgfSwKLQkJeyAweDA2LCAweDQ0MDIgfSwKLQkJeyAweDA2LCAweDgyMTcgfSwKLQkJeyAweDA2LCAweGQyYTAgfSwKLQkJeyAweDA2LCAweGQ2YWEgfSwKLQkJeyAweDA2LCAweGFhMDIgfSwKLQkJeyAweDA2LCAweDgyMTcgfSwKLQkJeyAweDA2LCAweGFlMGYgfSwKLQkJeyAweDA2LCAweGE1NDQgfSwKLQkJeyAweDA2LCAweDQ0MDIgfSwKLQkJeyAweDA2LCAweGFlNGQgfSwKLQkJeyAweDA2LCAweGE1YWEgfSwKLQkJeyAweDA2LCAweGFhMDIgfSwKLQkJeyAweDA2LCAweGFlNDcgfSwKLQkJeyAweDA2LCAweGFmODIgfSwKLQkJeyAweDA2LCAweDEzZWUgfSwKLQkJeyAweDA2LCAweDgzNGUgfSwKLQkJeyAweDA2LCAweDAwZWUgfSwKLQkJeyAweDA2LCAweDgzNGQgfSwKLQkJeyAweDA2LCAweDBmZWUgfSwKLQkJeyAweDA2LCAweDgzNGMgfSwKLQkJeyAweDA2LCAweDBmZWUgfSwKLQkJeyAweDA2LCAweDgzNGYgfSwKLQkJeyAweDA2LCAweDAwZWUgfSwKLQkJeyAweDA2LCAweDgzNTEgfSwKLQkJeyAweDA2LCAweDAwZWUgfSwKLQkJeyAweDA2LCAweDgzNGEgfSwKLQkJeyAweDA2LCAweGZmZWUgfSwKLQkJeyAweDA2LCAweDgzNGIgfSwKLQkJeyAweDA2LCAweGZmZTAgfSwKLQkJeyAweDA2LCAweDgzMzAgfSwKLQkJeyAweDA2LCAweGUxODMgfSwKLQkJeyAweDA2LCAweDMxNTggfSwKLQkJeyAweDA2LCAweGZlZTQgfSwKLQkJeyAweDA2LCAweGY4OGEgfSwKLQkJeyAweDA2LCAweGU1ZjggfSwKLQkJeyAweDA2LCAweDhiZTAgfSwKLQkJeyAweDA2LCAweDgzMzIgfSwKLQkJeyAweDA2LCAweGUxODMgfSwKLQkJeyAweDA2LCAweDMzNTkgfSwKLQkJeyAweDA2LCAweDBmZTIgfSwKLQkJeyAweDA2LCAweDgzNGQgfSwKLQkJeyAweDA2LCAweDBjMjQgfSwKLQkJeyAweDA2LCAweDVhZjAgfSwKLQkJeyAweDA2LCAweDFlMTIgfSwKLQkJeyAweDA2LCAweGU0ZjggfSwKLQkJeyAweDA2LCAweDhjZTUgfSwKLQkJeyAweDA2LCAweGY4OGQgfSwKLQkJeyAweDA2LCAweGFmODIgfSwKLQkJeyAweDA2LCAweDEzZTAgfSwKLQkJeyAweDA2LCAweDgzNGYgfSwKLQkJeyAweDA2LCAweDEwZTQgfSwKLQkJeyAweDA2LCAweDgzNGYgfSwKLQkJeyAweDA2LCAweGUwODMgfSwKLQkJeyAweDA2LCAweDRlNzggfSwKLQkJeyAweDA2LCAweDAwOWYgfSwKLQkJeyAweDA2LCAweDBhZTAgfSwKLQkJeyAweDA2LCAweDgzNGYgfSwKLQkJeyAweDA2LCAweGEwMTAgfSwKLQkJeyAweDA2LCAweGE1ZWUgfSwKLQkJeyAweDA2LCAweDgzNGUgfSwKLQkJeyAweDA2LCAweDAxZTAgfSwKLQkJeyAweDA2LCAweDgzNGUgfSwKLQkJeyAweDA2LCAweDc4MDUgfSwKLQkJeyAweDA2LCAweDllOWEgfSwKLQkJeyAweDA2LCAweGUwODMgfSwKLQkJeyAweDA2LCAweDRlNzggfSwKLQkJeyAweDA2LCAweDA0OWUgfSwKLQkJeyAweDA2LCAweDEwZTAgfSwKLQkJeyAweDA2LCAweDgzNGUgfSwKLQkJeyAweDA2LCAweDc4MDMgfSwKLQkJeyAweDA2LCAweDllMGYgfSwKLQkJeyAweDA2LCAweGUwODMgfSwKLQkJeyAweDA2LCAweDRlNzggfSwKLQkJeyAweDA2LCAweDAxOWUgfSwKLQkJeyAweDA2LCAweDA1YWUgfSwKLQkJeyAweDA2LCAweDBjYWYgfSwKLQkJeyAweDA2LCAweDgxZjggfSwKLQkJeyAweDA2LCAweGFmODEgfSwKLQkJeyAweDA2LCAweGEzYWYgfSwKLQkJeyAweDA2LCAweDgxZGMgfSwKLQkJeyAweDA2LCAweGFmODIgfSwKLQkJeyAweDA2LCAweDEzZWUgfSwKLQkJeyAweDA2LCAweDgzNDggfSwKLQkJeyAweDA2LCAweDAwZWUgfSwKLQkJeyAweDA2LCAweDgzNDkgfSwKLQkJeyAweDA2LCAweDAwZTAgfSwKLQkJeyAweDA2LCAweDgzNTEgfSwKLQkJeyAweDA2LCAweDEwZTQgfSwKLQkJeyAweDA2LCAweDgzNTEgfSwKLQkJeyAweDA2LCAweDU4MDEgfSwKLQkJeyAweDA2LCAweDlmZWEgfSwKLQkJeyAweDA2LCAweGQwMDAgfSwKLQkJeyAweDA2LCAweGQxODAgfSwKLQkJeyAweDA2LCAweDFmNjYgfSwKLQkJeyAweDA2LCAweGUyZjggfSwKLQkJeyAweDA2LCAweGVhZTMgfSwKLQkJeyAweDA2LCAweGY4ZWIgfSwKLQkJeyAweDA2LCAweDVhZjggfSwKLQkJeyAweDA2LCAweDFlMjAgfSwKLQkJeyAweDA2LCAweGU2ZjggfSwKLQkJeyAweDA2LCAweGVhZTUgfSwKLQkJeyAweDA2LCAweGY4ZWIgfSwKLQkJeyAweDA2LCAweGQzMDIgfSwKLQkJeyAweDA2LCAweGIzZmUgfSwKLQkJeyAweDA2LCAweGUyZjggfSwKLQkJeyAweDA2LCAweDdjZWYgfSwKLQkJeyAweDA2LCAweDMyNWIgfSwKLQkJeyAweDA2LCAweDgwZTMgfSwKLQkJeyAweDA2LCAweGY4N2QgfSwKLQkJeyAweDA2LCAweDllMDMgfSwKLQkJeyAweDA2LCAweDdkZmYgfSwKLQkJeyAweDA2LCAweGZmMGQgfSwKLQkJeyAweDA2LCAweDU4MWMgfSwKLQkJeyAweDA2LCAweDU1MWEgfSwKLQkJeyAweDA2LCAweDY1MTEgfSwKLQkJeyAweDA2LCAweGExOTAgfSwKLQkJeyAweDA2LCAweGQzZTIgfSwKLQkJeyAweDA2LCAweDgzNDggfSwKLQkJeyAweDA2LCAweGUzODMgfSwKLQkJeyAweDA2LCAweDQ5MWIgfSwKLQkJeyAweDA2LCAweDU2YWIgfSwKLQkJeyAweDA2LCAweDA4ZWYgfSwKLQkJeyAweDA2LCAweDU2ZTYgfSwKLQkJeyAweDA2LCAweDgzNDggfSwKLQkJeyAweDA2LCAweGU3ODMgfSwKLQkJeyAweDA2LCAweDQ5MTAgfSwKLQkJeyAweDA2LCAweGQxODAgfSwKLQkJeyAweDA2LCAweDFmNjYgfSwKLQkJeyAweDA2LCAweGEwMDQgfSwKLQkJeyAweDA2LCAweGI5ZTIgfSwKLQkJeyAweDA2LCAweDgzNDggfSwKLQkJeyAweDA2LCAweGUzODMgfSwKLQkJeyAweDA2LCAweDQ5ZWYgfSwKLQkJeyAweDA2LCAweDY1ZTIgfSwKLQkJeyAweDA2LCAweDgzNGEgfSwKLQkJeyAweDA2LCAweGUzODMgfSwKLQkJeyAweDA2LCAweDRiMWIgfSwKLQkJeyAweDA2LCAweDU2YWEgfSwKLQkJeyAweDA2LCAweDBlZWYgfSwKLQkJeyAweDA2LCAweDU2ZTYgfSwKLQkJeyAweDA2LCAweDgzNGEgfSwKLQkJeyAweDA2LCAweGU3ODMgfSwKLQkJeyAweDA2LCAweDRiZTIgfSwKLQkJeyAweDA2LCAweDgzNGQgfSwKLQkJeyAweDA2LCAweGU2ODMgfSwKLQkJeyAweDA2LCAweDRjZTAgfSwKLQkJeyAweDA2LCAweDgzNGQgfSwKLQkJeyAweDA2LCAweGEwMDAgfSwKLQkJeyAweDA2LCAweDBjYWYgfSwKLQkJeyAweDA2LCAweDgxZGMgfSwKLQkJeyAweDA2LCAweGUwODMgfSwKLQkJeyAweDA2LCAweDRkMTAgfSwKLQkJeyAweDA2LCAweGU0ODMgfSwKLQkJeyAweDA2LCAweDRkYWUgfSwKLQkJeyAweDA2LCAweDA0ODAgfSwKLQkJeyAweDA2LCAweGU0ODMgfSwKLQkJeyAweDA2LCAweDRkZTAgfSwKLQkJeyAweDA2LCAweDgzNGUgfSwKLQkJeyAweDA2LCAweDc4MDMgfSwKLQkJeyAweDA2LCAweDllMGIgfSwKLQkJeyAweDA2LCAweGUwODMgfSwKLQkJeyAweDA2LCAweDRlNzggfSwKLQkJeyAweDA2LCAweDA0OWUgfSwKLQkJeyAweDA2LCAweDA0ZWUgfSwKLQkJeyAweDA2LCAweDgzNGUgfSwKLQkJeyAweDA2LCAweDAyZTAgfSwKLQkJeyAweDA2LCAweDgzMzIgfSwKLQkJeyAweDA2LCAweGUxODMgfSwKLQkJeyAweDA2LCAweDMzNTkgfSwKLQkJeyAweDA2LCAweDBmZTIgfSwKLQkJeyAweDA2LCAweDgzNGQgfSwKLQkJeyAweDA2LCAweDBjMjQgfSwKLQkJeyAweDA2LCAweDVhZjAgfSwKLQkJeyAweDA2LCAweDFlMTIgfSwKLQkJeyAweDA2LCAweGU0ZjggfSwKLQkJeyAweDA2LCAweDhjZTUgfSwKLQkJeyAweDA2LCAweGY4OGQgfSwKLQkJeyAweDA2LCAweGUwODMgfSwKLQkJeyAweDA2LCAweDMwZTEgfSwKLQkJeyAweDA2LCAweDgzMzEgfSwKLQkJeyAweDA2LCAweDY4MDEgfSwKLQkJeyAweDA2LCAweGU0ZjggfSwKLQkJeyAweDA2LCAweDhhZTUgfSwKLQkJeyAweDA2LCAweGY4OGIgfSwKLQkJeyAweDA2LCAweGFlMzcgfSwKLQkJeyAweDA2LCAweGVlODMgfSwKLQkJeyAweDA2LCAweDRlMDMgfSwKLQkJeyAweDA2LCAweGUwODMgfSwKLQkJeyAweDA2LCAweDRjZTEgfSwKLQkJeyAweDA2LCAweDgzNGQgfSwKLQkJeyAweDA2LCAweDFiMDEgfSwKLQkJeyAweDA2LCAweDllMDQgfSwKLQkJeyAweDA2LCAweGFhYTEgfSwKLQkJeyAweDA2LCAweGFlYTggfSwKLQkJeyAweDA2LCAweGVlODMgfSwKLQkJeyAweDA2LCAweDRlMDQgfSwKLQkJeyAweDA2LCAweGVlODMgfSwKLQkJeyAweDA2LCAweDRmMDAgfSwKLQkJeyAweDA2LCAweGFlYWIgfSwKLQkJeyAweDA2LCAweGUwODMgfSwKLQkJeyAweDA2LCAweDRmNzggfSwKLQkJeyAweDA2LCAweDAzOWYgfSwKLQkJeyAweDA2LCAweDE0ZWUgfSwKLQkJeyAweDA2LCAweDgzNGUgfSwKLQkJeyAweDA2LCAweDA1ZDIgfSwKLQkJeyAweDA2LCAweDQwZDYgfSwKLQkJeyAweDA2LCAweDU1NTQgfSwKLQkJeyAweDA2LCAweDAyODIgfSwKLQkJeyAweDA2LCAweDE3ZDIgfSwKLQkJeyAweDA2LCAweGEwZDYgfSwKLQkJeyAweDA2LCAweGJhMDAgfSwKLQkJeyAweDA2LCAweDAyODIgfSwKLQkJeyAweDA2LCAweDE3ZmUgfSwKLQkJeyAweDA2LCAweGZkZmMgfSwKLQkJeyAweDA2LCAweDA1ZjggfSwKLQkJeyAweDA2LCAweGUwZjggfSwKLQkJeyAweDA2LCAweDYwZTEgfSwKLQkJeyAweDA2LCAweGY4NjEgfSwKLQkJeyAweDA2LCAweDY4MDIgfSwKLQkJeyAweDA2LCAweGU0ZjggfSwKLQkJeyAweDA2LCAweDYwZTUgfSwKLQkJeyAweDA2LCAweGY4NjEgfSwKLQkJeyAweDA2LCAweGUwZjggfSwKLQkJeyAweDA2LCAweDQ4ZTEgfSwKLQkJeyAweDA2LCAweGY4NDkgfSwKLQkJeyAweDA2LCAweDU4MGYgfSwKLQkJeyAweDA2LCAweDFlMDIgfSwKLQkJeyAweDA2LCAweGU0ZjggfSwKLQkJeyAweDA2LCAweDQ4ZTUgfSwKLQkJeyAweDA2LCAweGY4NDkgfSwKLQkJeyAweDA2LCAweGQwMDAgfSwKLQkJeyAweDA2LCAweDAyODIgfSwKLQkJeyAweDA2LCAweDViYmYgfSwKLQkJeyAweDA2LCAweDgzNTAgfSwKLQkJeyAweDA2LCAweGVmNDYgfSwKLQkJeyAweDA2LCAweGRjMTkgfSwKLQkJeyAweDA2LCAweGRkZDAgfSwKLQkJeyAweDA2LCAweDAxMDIgfSwKLQkJeyAweDA2LCAweDgyNWIgfSwKLQkJeyAweDA2LCAweDAyODIgfSwKLQkJeyAweDA2LCAweDc3ZTAgfSwKLQkJeyAweDA2LCAweGY4NjAgfSwKLQkJeyAweDA2LCAweGUxZjggfSwKLQkJeyAweDA2LCAweDYxNTggfSwKLQkJeyAweDA2LCAweGZkZTQgfSwKLQkJeyAweDA2LCAweGY4NjAgfSwKLQkJeyAweDA2LCAweGU1ZjggfSwKLQkJeyAweDA2LCAweDYxZmMgfSwKLQkJeyAweDA2LCAweDA0ZjkgfSwKLQkJeyAweDA2LCAweGZhZmIgfSwKLQkJeyAweDA2LCAweGM2YmYgfSwKLQkJeyAweDA2LCAweGY4NDAgfSwKLQkJeyAweDA2LCAweGJlODMgfSwKLQkJeyAweDA2LCAweDUwYTAgfSwKLQkJeyAweDA2LCAweDAxMDEgfSwKLQkJeyAweDA2LCAweDA3MWIgfSwKLQkJeyAweDA2LCAweDg5Y2YgfSwKLQkJeyAweDA2LCAweGQyMDggfSwKLQkJeyAweDA2LCAweGViZGIgfSwKLQkJeyAweDA2LCAweDE5YjIgfSwKLQkJeyAweDA2LCAweGZiZmYgfSwKLQkJeyAweDA2LCAweGZlZmQgfSwKLQkJeyAweDA2LCAweDA0ZjggfSwKLQkJeyAweDA2LCAweGUwZjggfSwKLQkJeyAweDA2LCAweDQ4ZTEgfSwKLQkJeyAweDA2LCAweGY4NDkgfSwKLQkJeyAweDA2LCAweDY4MDggfSwKLQkJeyAweDA2LCAweGU0ZjggfSwKLQkJeyAweDA2LCAweDQ4ZTUgfSwKLQkJeyAweDA2LCAweGY4NDkgfSwKLQkJeyAweDA2LCAweDU4ZjcgfSwKLQkJeyAweDA2LCAweGU0ZjggfSwKLQkJeyAweDA2LCAweDQ4ZTUgfSwKLQkJeyAweDA2LCAweGY4NDkgfSwKLQkJeyAweDA2LCAweGZjMDQgfSwKLQkJeyAweDA2LCAweDRkMjAgfSwKLQkJeyAweDA2LCAweDAwMDIgfSwKLQkJeyAweDA2LCAweDRlMjIgfSwKLQkJeyAweDA2LCAweDAwMDIgfSwKLQkJeyAweDA2LCAweDRkZGYgfSwKLQkJeyAweDA2LCAweGZmMDEgfSwKLQkJeyAweDA2LCAweDRlZGQgfSwKLQkJeyAweDA2LCAweGZmMDEgfSwKLQkJeyAweDA1LCAweDgzZDQgfSwKLQkJeyAweDA2LCAweDgwMDAgfSwKLQkJeyAweDA1LCAweDgzZDggfSwKLQkJeyAweDA2LCAweDgwNTEgfSwKLQkJeyAweDAyLCAweDYwMTAgfSwKLQkJeyAweDAzLCAweGRjMDAgfSwKLQkJeyAweDA1LCAweGZmZjYgfSwKLQkJeyAweDA2LCAweDAwZmMgfSwKLQkJeyAweDFmLCAweDAwMDAgfSwKLQotCQl7IDB4MWYsIDB4MDAwMCB9LAotCQl7IDB4MGQsIDB4Zjg4MCB9LAotCQl7IDB4MWYsIDB4MDAwMCB9Ci0JfTsKLQotCXJ0bF9waHlfd3JpdGUoaW9hZGRyLCBwaHlfcmVnX2luaXRfMCwgQVJSQVlfU0laRShwaHlfcmVnX2luaXRfMCkpOwotCi0JbWRpb193cml0ZShpb2FkZHIsIDB4MWYsIDB4MDAwMik7Ci0JbWRpb19wbHVzX21pbnVzKGlvYWRkciwgMHgwYiwgMHgwMDEwLCAweDAwZWYpOwotCW1kaW9fcGx1c19taW51cyhpb2FkZHIsIDB4MGMsIDB4YTIwMCwgMHg1ZDAwKTsKLQotCXJ0bF9waHlfd3JpdGUoaW9hZGRyLCBwaHlfcmVnX2luaXRfMSwgQVJSQVlfU0laRShwaHlfcmVnX2luaXRfMSkpOwotCi0JaWYgKHJ0bDgxNjhkX2VmdXNlX3JlYWQoaW9hZGRyLCAweDAxKSA9PSAweGIxKSB7Ci0JCXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGh5X3JlZyBwaHlfcmVnX2luaXRbXSA9IHsKLQkJCXsgMHgxZiwgMHgwMDAyIH0sCi0JCQl7IDB4MDUsIDB4NjY5YSB9LAotCQkJeyAweDFmLCAweDAwMDUgfSwKLQkJCXsgMHgwNSwgMHg4MzMwIH0sCi0JCQl7IDB4MDYsIDB4NjY5YSB9LAotCQkJeyAweDFmLCAweDAwMDIgfQotCQl9OwotCQlpbnQgdmFsOwotCi0JCXJ0bF9waHlfd3JpdGUoaW9hZGRyLCBwaHlfcmVnX2luaXQsIEFSUkFZX1NJWkUocGh5X3JlZ19pbml0KSk7Ci0KLQkJdmFsID0gbWRpb19yZWFkKGlvYWRkciwgMHgwZCk7Ci0KLQkJaWYgKCh2YWwgJiAweDAwZmYpICE9IDB4MDA2YykgewotCQkJc3RhdGljIGNvbnN0IHUzMiBzZXRbXSA9IHsKLQkJCQkweDAwNjUsIDB4MDA2NiwgMHgwMDY3LCAweDAwNjgsCi0JCQkJMHgwMDY5LCAweDAwNmEsIDB4MDA2YiwgMHgwMDZjCi0JCQl9OwotCQkJaW50IGk7Ci0KLQkJCW1kaW9fd3JpdGUoaW9hZGRyLCAweDFmLCAweDAwMDIpOwotCi0JCQl2YWwgJj0gMHhmZjAwOwotCQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2V0KTsgaSsrKQotCQkJCW1kaW9fd3JpdGUoaW9hZGRyLCAweDBkLCB2YWwgfCBzZXRbaV0pOwotCQl9Ci0JfSBlbHNlIHsKLQkJc3RhdGljIGNvbnN0IHN0cnVjdCBwaHlfcmVnIHBoeV9yZWdfaW5pdFtdID0gewotCQkJeyAweDFmLCAweDAwMDIgfSwKLQkJCXsgMHgwNSwgMHg2NjYyIH0sCi0JCQl7IDB4MWYsIDB4MDAwNSB9LAotCQkJeyAweDA1LCAweDgzMzAgfSwKLQkJCXsgMHgwNiwgMHg2NjYyIH0KLQkJfTsKLQotCQlydGxfcGh5X3dyaXRlKGlvYWRkciwgcGh5X3JlZ19pbml0LCBBUlJBWV9TSVpFKHBoeV9yZWdfaW5pdCkpOwotCX0KLQotCW1kaW9fd3JpdGUoaW9hZGRyLCAweDFmLCAweDAwMDIpOwotCW1kaW9fcGF0Y2goaW9hZGRyLCAweDBkLCAweDAzMDApOwotCW1kaW9fcGF0Y2goaW9hZGRyLCAweDBmLCAweDAwMTApOwotCi0JbWRpb193cml0ZShpb2FkZHIsIDB4MWYsIDB4MDAwMik7Ci0JbWRpb19wbHVzX21pbnVzKGlvYWRkciwgMHgwMiwgMHgwMTAwLCAweDA2MDApOwotCW1kaW9fcGx1c19taW51cyhpb2FkZHIsIDB4MDMsIDB4MDAwMCwgMHhlMDAwKTsKLQotCXJ0bF9waHlfd3JpdGUoaW9hZGRyLCBwaHlfcmVnX2luaXRfMiwgQVJSQVlfU0laRShwaHlfcmVnX2luaXRfMikpOwotfQotCi1zdGF0aWMgdm9pZCBydGw4MTY4ZF8yX2h3X3BoeV9jb25maWcodm9pZCBfX2lvbWVtICppb2FkZHIpCi17Ci0Jc3RhdGljIGNvbnN0IHN0cnVjdCBwaHlfcmVnIHBoeV9yZWdfaW5pdF8wW10gPSB7CisJCS8qIENoYW5uZWwgRXN0aW1hdGlvbiAqLwogCQl7IDB4MWYsIDB4MDAwMSB9LAogCQl7IDB4MDYsIDB4NDA2NCB9LAogCQl7IDB4MDcsIDB4Mjg2MyB9LApAQCAtMjE4OSwzMjYgKzIwMjAsMTQ4IEBACiAJCXsgMHgxYSwgMHgwNWFkIH0sCiAJCXsgMHgxNCwgMHg5NGMwIH0sCiAKKwkJLyoKKwkJICogVHggRXJyb3IgSXNzdWUKKwkJICogZW5oYW5jZSBsaW5lIGRyaXZlciBwb3dlcgorCQkgKi8KIAkJeyAweDFmLCAweDAwMDIgfSwKIAkJeyAweDA2LCAweDU1NjEgfSwKIAkJeyAweDFmLCAweDAwMDUgfSwKIAkJeyAweDA1LCAweDgzMzIgfSwKLQkJeyAweDA2LCAweDU1NjEgfQotCX07Ci0Jc3RhdGljIGNvbnN0IHN0cnVjdCBwaHlfcmVnIHBoeV9yZWdfaW5pdF8xW10gPSB7Ci0JCXsgMHgxZiwgMHgwMDA1IH0sCi0JCXsgMHgwNSwgMHhmZmMyIH0sCi0JCXsgMHgxZiwgMHgwMDA1IH0sCi0JCXsgMHgwNSwgMHg4MDAwIH0sCi0JCXsgMHgwNiwgMHhmOGY5IH0sCi0JCXsgMHgwNiwgMHhmYWVlIH0sCi0JCXsgMHgwNiwgMHhmOGVhIH0sCi0JCXsgMHgwNiwgMHgwMGVlIH0sCi0JCXsgMHgwNiwgMHhmOGViIH0sCi0JCXsgMHgwNiwgMHgwMGUyIH0sCi0JCXsgMHgwNiwgMHhmODdjIH0sCi0JCXsgMHgwNiwgMHhlM2Y4IH0sCi0JCXsgMHgwNiwgMHg3ZGE1IH0sCi0JCXsgMHgwNiwgMHgxMTExIH0sCi0JCXsgMHgwNiwgMHgxMmQyIH0sCi0JCXsgMHgwNiwgMHg0MGQ2IH0sCi0JCXsgMHgwNiwgMHg0NDQ0IH0sCi0JCXsgMHgwNiwgMHgwMjgxIH0sCi0JCXsgMHgwNiwgMHhjNmQyIH0sCi0JCXsgMHgwNiwgMHhhMGQ2IH0sCi0JCXsgMHgwNiwgMHhhYWFhIH0sCi0JCXsgMHgwNiwgMHgwMjgxIH0sCi0JCXsgMHgwNiwgMHhjNmFlIH0sCi0JCXsgMHgwNiwgMHgwZmE1IH0sCi0JCXsgMHgwNiwgMHg0NDQ0IH0sCi0JCXsgMHgwNiwgMHgwMmFlIH0sCi0JCXsgMHgwNiwgMHg0ZGE1IH0sCi0JCXsgMHgwNiwgMHhhYWFhIH0sCi0JCXsgMHgwNiwgMHgwMmFlIH0sCi0JCXsgMHgwNiwgMHg0N2FmIH0sCi0JCXsgMHgwNiwgMHg4MWMyIH0sCi0JCXsgMHgwNiwgMHhlZTgzIH0sCi0JCXsgMHgwNiwgMHg0ZTAwIH0sCi0JCXsgMHgwNiwgMHhlZTgzIH0sCi0JCXsgMHgwNiwgMHg0ZDBmIH0sCi0JCXsgMHgwNiwgMHhlZTgzIH0sCi0JCXsgMHgwNiwgMHg0YzBmIH0sCi0JCXsgMHgwNiwgMHhlZTgzIH0sCi0JCXsgMHgwNiwgMHg0ZjAwIH0sCi0JCXsgMHgwNiwgMHhlZTgzIH0sCi0JCXsgMHgwNiwgMHg1MTAwIH0sCi0JCXsgMHgwNiwgMHhlZTgzIH0sCi0JCXsgMHgwNiwgMHg0YWZmIH0sCi0JCXsgMHgwNiwgMHhlZTgzIH0sCi0JCXsgMHgwNiwgMHg0YmZmIH0sCi0JCXsgMHgwNiwgMHhlMDgzIH0sCi0JCXsgMHgwNiwgMHgzMGUxIH0sCi0JCXsgMHgwNiwgMHg4MzMxIH0sCi0JCXsgMHgwNiwgMHg1OGZlIH0sCi0JCXsgMHgwNiwgMHhlNGY4IH0sCi0JCXsgMHgwNiwgMHg4YWU1IH0sCi0JCXsgMHgwNiwgMHhmODhiIH0sCi0JCXsgMHgwNiwgMHhlMDgzIH0sCi0JCXsgMHgwNiwgMHgzMmUxIH0sCi0JCXsgMHgwNiwgMHg4MzMzIH0sCi0JCXsgMHgwNiwgMHg1OTBmIH0sCi0JCXsgMHgwNiwgMHhlMjgzIH0sCi0JCXsgMHgwNiwgMHg0ZDBjIH0sCi0JCXsgMHgwNiwgMHgyNDVhIH0sCi0JCXsgMHgwNiwgMHhmMDFlIH0sCi0JCXsgMHgwNiwgMHgxMmU0IH0sCi0JCXsgMHgwNiwgMHhmODhjIH0sCi0JCXsgMHgwNiwgMHhlNWY4IH0sCi0JCXsgMHgwNiwgMHg4ZGFmIH0sCi0JCXsgMHgwNiwgMHg4MWMyIH0sCi0JCXsgMHgwNiwgMHhlMDgzIH0sCi0JCXsgMHgwNiwgMHg0ZjEwIH0sCi0JCXsgMHgwNiwgMHhlNDgzIH0sCi0JCXsgMHgwNiwgMHg0ZmUwIH0sCi0JCXsgMHgwNiwgMHg4MzRlIH0sCi0JCXsgMHgwNiwgMHg3ODAwIH0sCi0JCXsgMHgwNiwgMHg5ZjBhIH0sCi0JCXsgMHgwNiwgMHhlMDgzIH0sCi0JCXsgMHgwNiwgMHg0ZmEwIH0sCi0JCXsgMHgwNiwgMHgxMGE1IH0sCi0JCXsgMHgwNiwgMHhlZTgzIH0sCi0JCXsgMHgwNiwgMHg0ZTAxIH0sCi0JCXsgMHgwNiwgMHhlMDgzIH0sCi0JCXsgMHgwNiwgMHg0ZTc4IH0sCi0JCXsgMHgwNiwgMHgwNTllIH0sCi0JCXsgMHgwNiwgMHg5YWUwIH0sCi0JCXsgMHgwNiwgMHg4MzRlIH0sCi0JCXsgMHgwNiwgMHg3ODA0IH0sCi0JCXsgMHgwNiwgMHg5ZTEwIH0sCi0JCXsgMHgwNiwgMHhlMDgzIH0sCi0JCXsgMHgwNiwgMHg0ZTc4IH0sCi0JCXsgMHgwNiwgMHgwMzllIH0sCi0JCXsgMHgwNiwgMHgwZmUwIH0sCi0JCXsgMHgwNiwgMHg4MzRlIH0sCi0JCXsgMHgwNiwgMHg3ODAxIH0sCi0JCXsgMHgwNiwgMHg5ZTA1IH0sCi0JCXsgMHgwNiwgMHhhZTBjIH0sCi0JCXsgMHgwNiwgMHhhZjgxIH0sCi0JCXsgMHgwNiwgMHhhN2FmIH0sCi0JCXsgMHgwNiwgMHg4MTUyIH0sCi0JCXsgMHgwNiwgMHhhZjgxIH0sCi0JCXsgMHgwNiwgMHg4YmFmIH0sCi0JCXsgMHgwNiwgMHg4MWMyIH0sCi0JCXsgMHgwNiwgMHhlZTgzIH0sCi0JCXsgMHgwNiwgMHg0ODAwIH0sCi0JCXsgMHgwNiwgMHhlZTgzIH0sCi0JCXsgMHgwNiwgMHg0OTAwIH0sCi0JCXsgMHgwNiwgMHhlMDgzIH0sCi0JCXsgMHgwNiwgMHg1MTEwIH0sCi0JCXsgMHgwNiwgMHhlNDgzIH0sCi0JCXsgMHgwNiwgMHg1MTU4IH0sCi0JCXsgMHgwNiwgMHgwMTlmIH0sCi0JCXsgMHgwNiwgMHhlYWQwIH0sCi0JCXsgMHgwNiwgMHgwMGQxIH0sCi0JCXsgMHgwNiwgMHg4MDFmIH0sCi0JCXsgMHgwNiwgMHg2NmUyIH0sCi0JCXsgMHgwNiwgMHhmOGVhIH0sCi0JCXsgMHgwNiwgMHhlM2Y4IH0sCi0JCXsgMHgwNiwgMHhlYjVhIH0sCi0JCXsgMHgwNiwgMHhmODFlIH0sCi0JCXsgMHgwNiwgMHgyMGU2IH0sCi0JCXsgMHgwNiwgMHhmOGVhIH0sCi0JCXsgMHgwNiwgMHhlNWY4IH0sCi0JCXsgMHgwNiwgMHhlYmQzIH0sCi0JCXsgMHgwNiwgMHgwMmIzIH0sCi0JCXsgMHgwNiwgMHhmZWUyIH0sCi0JCXsgMHgwNiwgMHhmODdjIH0sCi0JCXsgMHgwNiwgMHhlZjMyIH0sCi0JCXsgMHgwNiwgMHg1YjgwIH0sCi0JCXsgMHgwNiwgMHhlM2Y4IH0sCi0JCXsgMHgwNiwgMHg3ZDllIH0sCi0JCXsgMHgwNiwgMHgwMzdkIH0sCi0JCXsgMHgwNiwgMHhmZmZmIH0sCi0JCXsgMHgwNiwgMHgwZDU4IH0sCi0JCXsgMHgwNiwgMHgxYzU1IH0sCi0JCXsgMHgwNiwgMHgxYTY1IH0sCi0JCXsgMHgwNiwgMHgxMWExIH0sCi0JCXsgMHgwNiwgMHg5MGQzIH0sCi0JCXsgMHgwNiwgMHhlMjgzIH0sCi0JCXsgMHgwNiwgMHg0OGUzIH0sCi0JCXsgMHgwNiwgMHg4MzQ5IH0sCi0JCXsgMHgwNiwgMHgxYjU2IH0sCi0JCXsgMHgwNiwgMHhhYjA4IH0sCi0JCXsgMHgwNiwgMHhlZjU2IH0sCi0JCXsgMHgwNiwgMHhlNjgzIH0sCi0JCXsgMHgwNiwgMHg0OGU3IH0sCi0JCXsgMHgwNiwgMHg4MzQ5IH0sCi0JCXsgMHgwNiwgMHgxMGQxIH0sCi0JCXsgMHgwNiwgMHg4MDFmIH0sCi0JCXsgMHgwNiwgMHg2NmEwIH0sCi0JCXsgMHgwNiwgMHgwNGI5IH0sCi0JCXsgMHgwNiwgMHhlMjgzIH0sCi0JCXsgMHgwNiwgMHg0OGUzIH0sCi0JCXsgMHgwNiwgMHg4MzQ5IH0sCi0JCXsgMHgwNiwgMHhlZjY1IH0sCi0JCXsgMHgwNiwgMHhlMjgzIH0sCi0JCXsgMHgwNiwgMHg0YWUzIH0sCi0JCXsgMHgwNiwgMHg4MzRiIH0sCi0JCXsgMHgwNiwgMHgxYjU2IH0sCi0JCXsgMHgwNiwgMHhhYTBlIH0sCi0JCXsgMHgwNiwgMHhlZjU2IH0sCi0JCXsgMHgwNiwgMHhlNjgzIH0sCi0JCXsgMHgwNiwgMHg0YWU3IH0sCi0JCXsgMHgwNiwgMHg4MzRiIH0sCi0JCXsgMHgwNiwgMHhlMjgzIH0sCi0JCXsgMHgwNiwgMHg0ZGU2IH0sCi0JCXsgMHgwNiwgMHg4MzRjIH0sCi0JCXsgMHgwNiwgMHhlMDgzIH0sCi0JCXsgMHgwNiwgMHg0ZGEwIH0sCi0JCXsgMHgwNiwgMHgwMDBjIH0sCi0JCXsgMHgwNiwgMHhhZjgxIH0sCi0JCXsgMHgwNiwgMHg4YmUwIH0sCi0JCXsgMHgwNiwgMHg4MzRkIH0sCi0JCXsgMHgwNiwgMHgxMGU0IH0sCi0JCXsgMHgwNiwgMHg4MzRkIH0sCi0JCXsgMHgwNiwgMHhhZTA0IH0sCi0JCXsgMHgwNiwgMHg4MGU0IH0sCi0JCXsgMHgwNiwgMHg4MzRkIH0sCi0JCXsgMHgwNiwgMHhlMDgzIH0sCi0JCXsgMHgwNiwgMHg0ZTc4IH0sCi0JCXsgMHgwNiwgMHgwMzllIH0sCi0JCXsgMHgwNiwgMHgwYmUwIH0sCi0JCXsgMHgwNiwgMHg4MzRlIH0sCi0JCXsgMHgwNiwgMHg3ODA0IH0sCi0JCXsgMHgwNiwgMHg5ZTA0IH0sCi0JCXsgMHgwNiwgMHhlZTgzIH0sCi0JCXsgMHgwNiwgMHg0ZTAyIH0sCi0JCXsgMHgwNiwgMHhlMDgzIH0sCi0JCXsgMHgwNiwgMHgzMmUxIH0sCi0JCXsgMHgwNiwgMHg4MzMzIH0sCi0JCXsgMHgwNiwgMHg1OTBmIH0sCi0JCXsgMHgwNiwgMHhlMjgzIH0sCi0JCXsgMHgwNiwgMHg0ZDBjIH0sCi0JCXsgMHgwNiwgMHgyNDVhIH0sCi0JCXsgMHgwNiwgMHhmMDFlIH0sCi0JCXsgMHgwNiwgMHgxMmU0IH0sCi0JCXsgMHgwNiwgMHhmODhjIH0sCi0JCXsgMHgwNiwgMHhlNWY4IH0sCi0JCXsgMHgwNiwgMHg4ZGUwIH0sCi0JCXsgMHgwNiwgMHg4MzMwIH0sCi0JCXsgMHgwNiwgMHhlMTgzIH0sCi0JCXsgMHgwNiwgMHgzMTY4IH0sCi0JCXsgMHgwNiwgMHgwMWU0IH0sCi0JCXsgMHgwNiwgMHhmODhhIH0sCi0JCXsgMHgwNiwgMHhlNWY4IH0sCi0JCXsgMHgwNiwgMHg4YmFlIH0sCi0JCXsgMHgwNiwgMHgzN2VlIH0sCi0JCXsgMHgwNiwgMHg4MzRlIH0sCi0JCXsgMHgwNiwgMHgwM2UwIH0sCi0JCXsgMHgwNiwgMHg4MzRjIH0sCi0JCXsgMHgwNiwgMHhlMTgzIH0sCi0JCXsgMHgwNiwgMHg0ZDFiIH0sCi0JCXsgMHgwNiwgMHgwMTllIH0sCi0JCXsgMHgwNiwgMHgwNGFhIH0sCi0JCXsgMHgwNiwgMHhhMWFlIH0sCi0JCXsgMHgwNiwgMHhhOGVlIH0sCi0JCXsgMHgwNiwgMHg4MzRlIH0sCi0JCXsgMHgwNiwgMHgwNGVlIH0sCi0JCXsgMHgwNiwgMHg4MzRmIH0sCi0JCXsgMHgwNiwgMHgwMGFlIH0sCi0JCXsgMHgwNiwgMHhhYmUwIH0sCi0JCXsgMHgwNiwgMHg4MzRmIH0sCi0JCXsgMHgwNiwgMHg3ODAzIH0sCi0JCXsgMHgwNiwgMHg5ZjE0IH0sCi0JCXsgMHgwNiwgMHhlZTgzIH0sCi0JCXsgMHgwNiwgMHg0ZTA1IH0sCi0JCXsgMHgwNiwgMHhkMjQwIH0sCi0JCXsgMHgwNiwgMHhkNjU1IH0sCi0JCXsgMHgwNiwgMHg1NDAyIH0sCi0JCXsgMHgwNiwgMHg4MWM2IH0sCi0JCXsgMHgwNiwgMHhkMmEwIH0sCi0JCXsgMHgwNiwgMHhkNmJhIH0sCi0JCXsgMHgwNiwgMHgwMDAyIH0sCi0JCXsgMHgwNiwgMHg4MWM2IH0sCi0JCXsgMHgwNiwgMHhmZWZkIH0sCi0JCXsgMHgwNiwgMHhmYzA1IH0sCi0JCXsgMHgwNiwgMHhmOGUwIH0sCi0JCXsgMHgwNiwgMHhmODYwIH0sCi0JCXsgMHgwNiwgMHhlMWY4IH0sCi0JCXsgMHgwNiwgMHg2MTY4IH0sCi0JCXsgMHgwNiwgMHgwMmU0IH0sCi0JCXsgMHgwNiwgMHhmODYwIH0sCi0JCXsgMHgwNiwgMHhlNWY4IH0sCi0JCXsgMHgwNiwgMHg2MWUwIH0sCi0JCXsgMHgwNiwgMHhmODQ4IH0sCi0JCXsgMHgwNiwgMHhlMWY4IH0sCi0JCXsgMHgwNiwgMHg0OTU4IH0sCi0JCXsgMHgwNiwgMHgwZjFlIH0sCi0JCXsgMHgwNiwgMHgwMmU0IH0sCi0JCXsgMHgwNiwgMHhmODQ4IH0sCi0JCXsgMHgwNiwgMHhlNWY4IH0sCi0JCXsgMHgwNiwgMHg0OWQwIH0sCi0JCXsgMHgwNiwgMHgwMDAyIH0sCi0JCXsgMHgwNiwgMHg4MjBhIH0sCi0JCXsgMHgwNiwgMHhiZjgzIH0sCi0JCXsgMHgwNiwgMHg1MGVmIH0sCi0JCXsgMHgwNiwgMHg0NmRjIH0sCi0JCXsgMHgwNiwgMHgxOWRkIH0sCi0JCXsgMHgwNiwgMHhkMDAxIH0sCi0JCXsgMHgwNiwgMHgwMjgyIH0sCi0JCXsgMHgwNiwgMHgwYTAyIH0sCi0JCXsgMHgwNiwgMHg4MjI2IH0sCi0JCXsgMHgwNiwgMHhlMGY4IH0sCi0JCXsgMHgwNiwgMHg2MGUxIH0sCi0JCXsgMHgwNiwgMHhmODYxIH0sCi0JCXsgMHgwNiwgMHg1OGZkIH0sCi0JCXsgMHgwNiwgMHhlNGY4IH0sCi0JCXsgMHgwNiwgMHg2MGU1IH0sCi0JCXsgMHgwNiwgMHhmODYxIH0sCi0JCXsgMHgwNiwgMHhmYzA0IH0sCi0JCXsgMHgwNiwgMHhmOWZhIH0sCi0JCXsgMHgwNiwgMHhmYmM2IH0sCi0JCXsgMHgwNiwgMHhiZmY4IH0sCi0JCXsgMHgwNiwgMHg0MGJlIH0sCi0JCXsgMHgwNiwgMHg4MzUwIH0sCi0JCXsgMHgwNiwgMHhhMDAxIH0sCi0JCXsgMHgwNiwgMHgwMTA3IH0sCi0JCXsgMHgwNiwgMHgxYjg5IH0sCi0JCXsgMHgwNiwgMHhjZmQyIH0sCi0JCXsgMHgwNiwgMHgwOGViIH0sCi0JCXsgMHgwNiwgMHhkYjE5IH0sCi0JCXsgMHgwNiwgMHhiMmZiIH0sCi0JCXsgMHgwNiwgMHhmZmZlIH0sCi0JCXsgMHgwNiwgMHhmZDA0IH0sCi0JCXsgMHgwNiwgMHhmOGUwIH0sCi0JCXsgMHgwNiwgMHhmODQ4IH0sCi0JCXsgMHgwNiwgMHhlMWY4IH0sCi0JCXsgMHgwNiwgMHg0OTY4IH0sCi0JCXsgMHgwNiwgMHgwOGU0IH0sCi0JCXsgMHgwNiwgMHhmODQ4IH0sCi0JCXsgMHgwNiwgMHhlNWY4IH0sCi0JCXsgMHgwNiwgMHg0OTU4IH0sCi0JCXsgMHgwNiwgMHhmN2U0IH0sCi0JCXsgMHgwNiwgMHhmODQ4IH0sCi0JCXsgMHgwNiwgMHhlNWY4IH0sCi0JCXsgMHgwNiwgMHg0OWZjIH0sCi0JCXsgMHgwNiwgMHgwNDRkIH0sCi0JCXsgMHgwNiwgMHgyMDAwIH0sCi0JCXsgMHgwNiwgMHgwMjRlIH0sCi0JCXsgMHgwNiwgMHgyMjAwIH0sCi0JCXsgMHgwNiwgMHgwMjRkIH0sCi0JCXsgMHgwNiwgMHhkZmZmIH0sCi0JCXsgMHgwNiwgMHgwMTRlIH0sCi0JCXsgMHgwNiwgMHhkZGZmIH0sCi0JCXsgMHgwNiwgMHgwMTAwIH0sCi0JCXsgMHgwNSwgMHg4M2Q4IH0sCi0JCXsgMHgwNiwgMHg4MDAwIH0sCi0JCXsgMHgwMywgMHhkYzAwIH0sCi0JCXsgMHgwNSwgMHhmZmY2IH0sCi0JCXsgMHgwNiwgMHgwMGZjIH0sCi0JCXsgMHgxZiwgMHgwMDAwIH0sCisJCXsgMHgwNiwgMHg1NTYxIH0sCisKKwkJLyoKKwkJICogQ2FuIG5vdCBsaW5rIHRvIDFHYnBzIHdpdGggYmFkIGNhYmxlCisJCSAqIERlY3JlYXNlIFNOUiB0aHJlc2hvbGQgZm9ybSAyMS4wN2RCIHRvIDE5LjA0ZEIKKwkJICovCisJCXsgMHgxZiwgMHgwMDAxIH0sCisJCXsgMHgxNywgMHgwY2MwIH0sCiAKIAkJeyAweDFmLCAweDAwMDAgfSwKLQkJeyAweDBkLCAweGY4ODAgfSwKLQkJeyAweDFmLCAweDAwMDAgfQorCQl7IDB4MGQsIDB4Zjg4MCB9CiAJfTsKKwl2b2lkIF9faW9tZW0gKmlvYWRkciA9IHRwLT5tbWlvX2FkZHI7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKIAotCXJ0bF9waHlfd3JpdGUoaW9hZGRyLCBwaHlfcmVnX2luaXRfMCwgQVJSQVlfU0laRShwaHlfcmVnX2luaXRfMCkpOworCXJ0bF93cml0ZXBoeV9iYXRjaCh0cCwgcGh5X3JlZ19pbml0XzAsIEFSUkFZX1NJWkUocGh5X3JlZ19pbml0XzApKTsKKworCS8qCisJICogUnggRXJyb3IgSXNzdWUKKwkgKiBGaW5lIFR1bmUgU3dpdGNoaW5nIHJlZ3VsYXRvciBwYXJhbWV0ZXIKKwkgKi8KKwlydGxfd3JpdGVwaHkodHAsIDB4MWYsIDB4MDAwMik7CisJcnRsX3cxdzBfcGh5KHRwLCAweDBiLCAweDAwMTAsIDB4MDBlZik7CisJcnRsX3cxdzBfcGh5KHRwLCAweDBjLCAweGEyMDAsIDB4NWQwMCk7CisKKwlpZiAocnRsODE2OGRfZWZ1c2VfcmVhZChpb2FkZHIsIDB4MDEpID09IDB4YjEpIHsKKwkJc3RhdGljIGNvbnN0IHN0cnVjdCBwaHlfcmVnIHBoeV9yZWdfaW5pdFtdID0geworCQkJeyAweDFmLCAweDAwMDIgfSwKKwkJCXsgMHgwNSwgMHg2NjlhIH0sCisJCQl7IDB4MWYsIDB4MDAwNSB9LAorCQkJeyAweDA1LCAweDgzMzAgfSwKKwkJCXsgMHgwNiwgMHg2NjlhIH0sCisJCQl7IDB4MWYsIDB4MDAwMiB9CisJCX07CisJCWludCB2YWw7CisKKwkJcnRsX3dyaXRlcGh5X2JhdGNoKHRwLCBwaHlfcmVnX2luaXQsIEFSUkFZX1NJWkUocGh5X3JlZ19pbml0KSk7CisKKwkJdmFsID0gcnRsX3JlYWRwaHkodHAsIDB4MGQpOworCisJCWlmICgodmFsICYgMHgwMGZmKSAhPSAweDAwNmMpIHsKKwkJCXN0YXRpYyBjb25zdCB1MzIgc2V0W10gPSB7CisJCQkJMHgwMDY1LCAweDAwNjYsIDB4MDA2NywgMHgwMDY4LAorCQkJCTB4MDA2OSwgMHgwMDZhLCAweDAwNmIsIDB4MDA2YworCQkJfTsKKwkJCWludCBpOworCisJCQlydGxfd3JpdGVwaHkodHAsIDB4MWYsIDB4MDAwMik7CisKKwkJCXZhbCAmPSAweGZmMDA7CisJCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzZXQpOyBpKyspCisJCQkJcnRsX3dyaXRlcGh5KHRwLCAweDBkLCB2YWwgfCBzZXRbaV0pOworCQl9CisJfSBlbHNlIHsKKwkJc3RhdGljIGNvbnN0IHN0cnVjdCBwaHlfcmVnIHBoeV9yZWdfaW5pdFtdID0geworCQkJeyAweDFmLCAweDAwMDIgfSwKKwkJCXsgMHgwNSwgMHg2NjYyIH0sCisJCQl7IDB4MWYsIDB4MDAwNSB9LAorCQkJeyAweDA1LCAweDgzMzAgfSwKKwkJCXsgMHgwNiwgMHg2NjYyIH0KKwkJfTsKKworCQlydGxfd3JpdGVwaHlfYmF0Y2godHAsIHBoeV9yZWdfaW5pdCwgQVJSQVlfU0laRShwaHlfcmVnX2luaXQpKTsKKwl9CisKKwkvKiBSU0VUIGNvdXBsZSBpbXByb3ZlICovCisJcnRsX3dyaXRlcGh5KHRwLCAweDFmLCAweDAwMDIpOworCXJ0bF9wYXRjaHBoeSh0cCwgMHgwZCwgMHgwMzAwKTsKKwlydGxfcGF0Y2hwaHkodHAsIDB4MGYsIDB4MDAxMCk7CisKKwkvKiBGaW5lIHR1bmUgUExMIHBlcmZvcm1hbmNlICovCisJcnRsX3dyaXRlcGh5KHRwLCAweDFmLCAweDAwMDIpOworCXJ0bF93MXcwX3BoeSh0cCwgMHgwMiwgMHgwMTAwLCAweDA2MDApOworCXJ0bF93MXcwX3BoeSh0cCwgMHgwMywgMHgwMDAwLCAweGUwMDApOworCisJcnRsX3dyaXRlcGh5KHRwLCAweDFmLCAweDAwMDUpOworCXJ0bF93cml0ZXBoeSh0cCwgMHgwNSwgMHgwMDFiKTsKKwlpZiAocnRsX3JlYWRwaHkodHAsIDB4MDYpID09IDB4YmYwMCAmJgorCSAgICByZXF1ZXN0X2Zpcm13YXJlKCZmdywgRklSTVdBUkVfODE2OERfMSwgJnRwLT5wY2lfZGV2LT5kZXYpID09IDApIHsKKwkJcnRsX3BoeV93cml0ZV9mdyh0cCwgZncpOworCQlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKKwl9IGVsc2UgeworCQluZXRpZl93YXJuKHRwLCBwcm9iZSwgdHAtPmRldiwgInVuYWJsZSB0byBhcHBseSBmaXJtd2FyZSBwYXRjaFxuIik7CisJfQorCisJcnRsX3dyaXRlcGh5KHRwLCAweDFmLCAweDAwMDApOworfQorCitzdGF0aWMgdm9pZCBydGw4MTY4ZF8yX2h3X3BoeV9jb25maWcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCit7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBwaHlfcmVnIHBoeV9yZWdfaW5pdF8wW10gPSB7CisJCS8qIENoYW5uZWwgRXN0aW1hdGlvbiAqLworCQl7IDB4MWYsIDB4MDAwMSB9LAorCQl7IDB4MDYsIDB4NDA2NCB9LAorCQl7IDB4MDcsIDB4Mjg2MyB9LAorCQl7IDB4MDgsIDB4MDU5YyB9LAorCQl7IDB4MDksIDB4MjZiNCB9LAorCQl7IDB4MGEsIDB4NmExOSB9LAorCQl7IDB4MGIsIDB4ZGNjOCB9LAorCQl7IDB4MTAsIDB4ZjA2ZCB9LAorCQl7IDB4MTQsIDB4N2Y2OCB9LAorCQl7IDB4MTgsIDB4N2ZkOSB9LAorCQl7IDB4MWMsIDB4ZjBmZiB9LAorCQl7IDB4MWQsIDB4M2Q5YyB9LAorCQl7IDB4MWYsIDB4MDAwMyB9LAorCQl7IDB4MTIsIDB4ZjQ5ZiB9LAorCQl7IDB4MTMsIDB4MDcwYiB9LAorCQl7IDB4MWEsIDB4MDVhZCB9LAorCQl7IDB4MTQsIDB4OTRjMCB9LAorCisJCS8qCisJCSAqIFR4IEVycm9yIElzc3VlCisJCSAqIGVuaGFuY2UgbGluZSBkcml2ZXIgcG93ZXIKKwkJICovCisJCXsgMHgxZiwgMHgwMDAyIH0sCisJCXsgMHgwNiwgMHg1NTYxIH0sCisJCXsgMHgxZiwgMHgwMDA1IH0sCisJCXsgMHgwNSwgMHg4MzMyIH0sCisJCXsgMHgwNiwgMHg1NTYxIH0sCisKKwkJLyoKKwkJICogQ2FuIG5vdCBsaW5rIHRvIDFHYnBzIHdpdGggYmFkIGNhYmxlCisJCSAqIERlY3JlYXNlIFNOUiB0aHJlc2hvbGQgZm9ybSAyMS4wN2RCIHRvIDE5LjA0ZEIKKwkJICovCisJCXsgMHgxZiwgMHgwMDAxIH0sCisJCXsgMHgxNywgMHgwY2MwIH0sCisKKwkJeyAweDFmLCAweDAwMDAgfSwKKwkJeyAweDBkLCAweGY4ODAgfQorCX07CisJdm9pZCBfX2lvbWVtICppb2FkZHIgPSB0cC0+bW1pb19hZGRyOworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CisKKwlydGxfd3JpdGVwaHlfYmF0Y2godHAsIHBoeV9yZWdfaW5pdF8wLCBBUlJBWV9TSVpFKHBoeV9yZWdfaW5pdF8wKSk7CiAKIAlpZiAocnRsODE2OGRfZWZ1c2VfcmVhZChpb2FkZHIsIDB4MDEpID09IDB4YjEpIHsKIAkJc3RhdGljIGNvbnN0IHN0cnVjdCBwaHlfcmVnIHBoeV9yZWdfaW5pdFtdID0gewpAQCAtMjUyMiwyMSArMjE3NSwyMSBAQAogCQl9OwogCQlpbnQgdmFsOwogCi0JCXJ0bF9waHlfd3JpdGUoaW9hZGRyLCBwaHlfcmVnX2luaXQsIEFSUkFZX1NJWkUocGh5X3JlZ19pbml0KSk7CisJCXJ0bF93cml0ZXBoeV9iYXRjaCh0cCwgcGh5X3JlZ19pbml0LCBBUlJBWV9TSVpFKHBoeV9yZWdfaW5pdCkpOwogCi0JCXZhbCA9IG1kaW9fcmVhZChpb2FkZHIsIDB4MGQpOworCQl2YWwgPSBydGxfcmVhZHBoeSh0cCwgMHgwZCk7CiAJCWlmICgodmFsICYgMHgwMGZmKSAhPSAweDAwNmMpIHsKLQkJCXUzMiBzZXRbXSA9IHsKKwkJCXN0YXRpYyBjb25zdCB1MzIgc2V0W10gPSB7CiAJCQkJMHgwMDY1LCAweDAwNjYsIDB4MDA2NywgMHgwMDY4LAogCQkJCTB4MDA2OSwgMHgwMDZhLCAweDAwNmIsIDB4MDA2YwogCQkJfTsKIAkJCWludCBpOwogCi0JCQltZGlvX3dyaXRlKGlvYWRkciwgMHgxZiwgMHgwMDAyKTsKKwkJCXJ0bF93cml0ZXBoeSh0cCwgMHgxZiwgMHgwMDAyKTsKIAogCQkJdmFsICY9IDB4ZmYwMDsKIAkJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNldCk7IGkrKykKLQkJCQltZGlvX3dyaXRlKGlvYWRkciwgMHgwZCwgdmFsIHwgc2V0W2ldKTsKKwkJCQlydGxfd3JpdGVwaHkodHAsIDB4MGQsIHZhbCB8IHNldFtpXSk7CiAJCX0KIAl9IGVsc2UgewogCQlzdGF0aWMgY29uc3Qgc3RydWN0IHBoeV9yZWcgcGh5X3JlZ19pbml0W10gPSB7CkBAIC0yNTQ3LDIzICsyMjAwLDMyIEBACiAJCQl7IDB4MDYsIDB4MjY0MiB9CiAJCX07CiAKLQkJcnRsX3BoeV93cml0ZShpb2FkZHIsIHBoeV9yZWdfaW5pdCwgQVJSQVlfU0laRShwaHlfcmVnX2luaXQpKTsKKwkJcnRsX3dyaXRlcGh5X2JhdGNoKHRwLCBwaHlfcmVnX2luaXQsIEFSUkFZX1NJWkUocGh5X3JlZ19pbml0KSk7CiAJfQogCi0JbWRpb193cml0ZShpb2FkZHIsIDB4MWYsIDB4MDAwMik7Ci0JbWRpb19wbHVzX21pbnVzKGlvYWRkciwgMHgwMiwgMHgwMTAwLCAweDA2MDApOwotCW1kaW9fcGx1c19taW51cyhpb2FkZHIsIDB4MDMsIDB4MDAwMCwgMHhlMDAwKTsKKwkvKiBGaW5lIHR1bmUgUExMIHBlcmZvcm1hbmNlICovCisJcnRsX3dyaXRlcGh5KHRwLCAweDFmLCAweDAwMDIpOworCXJ0bF93MXcwX3BoeSh0cCwgMHgwMiwgMHgwMTAwLCAweDA2MDApOworCXJ0bF93MXcwX3BoeSh0cCwgMHgwMywgMHgwMDAwLCAweGUwMDApOwogCi0JbWRpb193cml0ZShpb2FkZHIsIDB4MWYsIDB4MDAwMSk7Ci0JbWRpb193cml0ZShpb2FkZHIsIDB4MTcsIDB4MGNjMCk7CisJLyogU3dpdGNoaW5nIHJlZ3VsYXRvciBTbGV3IHJhdGUgKi8KKwlydGxfd3JpdGVwaHkodHAsIDB4MWYsIDB4MDAwMik7CisJcnRsX3BhdGNocGh5KHRwLCAweDBmLCAweDAwMTcpOwogCi0JbWRpb193cml0ZShpb2FkZHIsIDB4MWYsIDB4MDAwMik7Ci0JbWRpb19wYXRjaChpb2FkZHIsIDB4MGYsIDB4MDAxNyk7CisJcnRsX3dyaXRlcGh5KHRwLCAweDFmLCAweDAwMDUpOworCXJ0bF93cml0ZXBoeSh0cCwgMHgwNSwgMHgwMDFiKTsKKwlpZiAocnRsX3JlYWRwaHkodHAsIDB4MDYpID09IDB4YjMwMCAmJgorCSAgICByZXF1ZXN0X2Zpcm13YXJlKCZmdywgRklSTVdBUkVfODE2OERfMiwgJnRwLT5wY2lfZGV2LT5kZXYpID09IDApIHsKKwkJcnRsX3BoeV93cml0ZV9mdyh0cCwgZncpOworCQlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKKwl9IGVsc2UgeworCQluZXRpZl93YXJuKHRwLCBwcm9iZSwgdHAtPmRldiwgInVuYWJsZSB0byBhcHBseSBmaXJtd2FyZSBwYXRjaFxuIik7CisJfQogCi0JcnRsX3BoeV93cml0ZShpb2FkZHIsIHBoeV9yZWdfaW5pdF8xLCBBUlJBWV9TSVpFKHBoeV9yZWdfaW5pdF8xKSk7CisJcnRsX3dyaXRlcGh5KHRwLCAweDFmLCAweDAwMDApOwogfQogCi1zdGF0aWMgdm9pZCBydGw4MTY4ZF8zX2h3X3BoeV9jb25maWcodm9pZCBfX2lvbWVtICppb2FkZHIpCitzdGF0aWMgdm9pZCBydGw4MTY4ZF8zX2h3X3BoeV9jb25maWcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBwaHlfcmVnIHBoeV9yZWdfaW5pdFtdID0gewogCQl7IDB4MWYsIDB4MDAwMiB9LApAQCAtMjYyMSwxMCArMjI4MywyNiBAQAogCQl7IDB4MWYsIDB4MDAwMCB9CiAJfTsKIAotCXJ0bF9waHlfd3JpdGUoaW9hZGRyLCBwaHlfcmVnX2luaXQsIEFSUkFZX1NJWkUocGh5X3JlZ19pbml0KSk7CisJcnRsX3dyaXRlcGh5X2JhdGNoKHRwLCBwaHlfcmVnX2luaXQsIEFSUkFZX1NJWkUocGh5X3JlZ19pbml0KSk7CiB9CiAKLXN0YXRpYyB2b2lkIHJ0bDgxMDJlX2h3X3BoeV9jb25maWcodm9pZCBfX2lvbWVtICppb2FkZHIpCitzdGF0aWMgdm9pZCBydGw4MTY4ZF80X2h3X3BoeV9jb25maWcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCit7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBwaHlfcmVnIHBoeV9yZWdfaW5pdFtdID0geworCQl7IDB4MWYsIDB4MDAwMSB9LAorCQl7IDB4MTcsIDB4MGNjMCB9LAorCisJCXsgMHgxZiwgMHgwMDA3IH0sCisJCXsgMHgxZSwgMHgwMDJkIH0sCisJCXsgMHgxOCwgMHgwMDQwIH0sCisJCXsgMHgxZiwgMHgwMDAwIH0KKwl9OworCisJcnRsX3dyaXRlcGh5X2JhdGNoKHRwLCBwaHlfcmVnX2luaXQsIEFSUkFZX1NJWkUocGh5X3JlZ19pbml0KSk7CisJcnRsX3BhdGNocGh5KHRwLCAweDBkLCAxIDw8IDUpOworfQorCitzdGF0aWMgdm9pZCBydGw4MTAyZV9od19waHlfY29uZmlnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogewogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGh5X3JlZyBwaHlfcmVnX2luaXRbXSA9IHsKIAkJeyAweDFmLCAweDAwMDMgfSwKQEAgLTI2MzMsMTggKzIzMTEsMTcgQEAKIAkJeyAweDFmLCAweDAwMDAgfQogCX07CiAKLQltZGlvX3dyaXRlKGlvYWRkciwgMHgxZiwgMHgwMDAwKTsKLQltZGlvX3BhdGNoKGlvYWRkciwgMHgxMSwgMSA8PCAxMik7Ci0JbWRpb19wYXRjaChpb2FkZHIsIDB4MTksIDEgPDwgMTMpOwotCW1kaW9fcGF0Y2goaW9hZGRyLCAweDEwLCAxIDw8IDE1KTsKKwlydGxfd3JpdGVwaHkodHAsIDB4MWYsIDB4MDAwMCk7CisJcnRsX3BhdGNocGh5KHRwLCAweDExLCAxIDw8IDEyKTsKKwlydGxfcGF0Y2hwaHkodHAsIDB4MTksIDEgPDwgMTMpOworCXJ0bF9wYXRjaHBoeSh0cCwgMHgxMCwgMSA8PCAxNSk7CiAKLQlydGxfcGh5X3dyaXRlKGlvYWRkciwgcGh5X3JlZ19pbml0LCBBUlJBWV9TSVpFKHBoeV9yZWdfaW5pdCkpOworCXJ0bF93cml0ZXBoeV9iYXRjaCh0cCwgcGh5X3JlZ19pbml0LCBBUlJBWV9TSVpFKHBoeV9yZWdfaW5pdCkpOwogfQogCiBzdGF0aWMgdm9pZCBydGxfaHdfcGh5X2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl2b2lkIF9faW9tZW0gKmlvYWRkciA9IHRwLT5tbWlvX2FkZHI7CiAKIAlydGw4MTY5X3ByaW50X21hY192ZXJzaW9uKHRwKTsKIApAQCAtMjY1Myw1OCArMjMzMCw2MSBAQAogCQlicmVhazsKIAljYXNlIFJUTF9HSUdBX01BQ19WRVJfMDI6CiAJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzAzOgotCQlydGw4MTY5c19od19waHlfY29uZmlnKGlvYWRkcik7CisJCXJ0bDgxNjlzX2h3X3BoeV9jb25maWcodHApOwogCQlicmVhazsKIAljYXNlIFJUTF9HSUdBX01BQ19WRVJfMDQ6Ci0JCXJ0bDgxNjlzYl9od19waHlfY29uZmlnKGlvYWRkcik7CisJCXJ0bDgxNjlzYl9od19waHlfY29uZmlnKHRwKTsKIAkJYnJlYWs7CiAJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzA1OgotCQlydGw4MTY5c2NkX2h3X3BoeV9jb25maWcodHAsIGlvYWRkcik7CisJCXJ0bDgxNjlzY2RfaHdfcGh5X2NvbmZpZyh0cCk7CiAJCWJyZWFrOwogCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8wNjoKLQkJcnRsODE2OXNjZV9od19waHlfY29uZmlnKGlvYWRkcik7CisJCXJ0bDgxNjlzY2VfaHdfcGh5X2NvbmZpZyh0cCk7CiAJCWJyZWFrOwogCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8wNzoKIAljYXNlIFJUTF9HSUdBX01BQ19WRVJfMDg6CiAJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzA5OgotCQlydGw4MTAyZV9od19waHlfY29uZmlnKGlvYWRkcik7CisJCXJ0bDgxMDJlX2h3X3BoeV9jb25maWcodHApOwogCQlicmVhazsKIAljYXNlIFJUTF9HSUdBX01BQ19WRVJfMTE6Ci0JCXJ0bDgxNjhiYl9od19waHlfY29uZmlnKGlvYWRkcik7CisJCXJ0bDgxNjhiYl9od19waHlfY29uZmlnKHRwKTsKIAkJYnJlYWs7CiAJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzEyOgotCQlydGw4MTY4YmVmX2h3X3BoeV9jb25maWcoaW9hZGRyKTsKKwkJcnRsODE2OGJlZl9od19waHlfY29uZmlnKHRwKTsKIAkJYnJlYWs7CiAJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzE3OgotCQlydGw4MTY4YmVmX2h3X3BoeV9jb25maWcoaW9hZGRyKTsKKwkJcnRsODE2OGJlZl9od19waHlfY29uZmlnKHRwKTsKIAkJYnJlYWs7CiAJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzE4OgotCQlydGw4MTY4Y3BfMV9od19waHlfY29uZmlnKGlvYWRkcik7CisJCXJ0bDgxNjhjcF8xX2h3X3BoeV9jb25maWcodHApOwogCQlicmVhazsKIAljYXNlIFJUTF9HSUdBX01BQ19WRVJfMTk6Ci0JCXJ0bDgxNjhjXzFfaHdfcGh5X2NvbmZpZyhpb2FkZHIpOworCQlydGw4MTY4Y18xX2h3X3BoeV9jb25maWcodHApOwogCQlicmVhazsKIAljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjA6Ci0JCXJ0bDgxNjhjXzJfaHdfcGh5X2NvbmZpZyhpb2FkZHIpOworCQlydGw4MTY4Y18yX2h3X3BoeV9jb25maWcodHApOwogCQlicmVhazsKIAljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjE6Ci0JCXJ0bDgxNjhjXzNfaHdfcGh5X2NvbmZpZyhpb2FkZHIpOworCQlydGw4MTY4Y18zX2h3X3BoeV9jb25maWcodHApOwogCQlicmVhazsKIAljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjI6Ci0JCXJ0bDgxNjhjXzRfaHdfcGh5X2NvbmZpZyhpb2FkZHIpOworCQlydGw4MTY4Y180X2h3X3BoeV9jb25maWcodHApOwogCQlicmVhazsKIAljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjM6CiAJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzI0OgotCQlydGw4MTY4Y3BfMl9od19waHlfY29uZmlnKGlvYWRkcik7CisJCXJ0bDgxNjhjcF8yX2h3X3BoeV9jb25maWcodHApOwogCQlicmVhazsKIAljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjU6Ci0JCXJ0bDgxNjhkXzFfaHdfcGh5X2NvbmZpZyhpb2FkZHIpOworCQlydGw4MTY4ZF8xX2h3X3BoeV9jb25maWcodHApOwogCQlicmVhazsKIAljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjY6Ci0JCXJ0bDgxNjhkXzJfaHdfcGh5X2NvbmZpZyhpb2FkZHIpOworCQlydGw4MTY4ZF8yX2h3X3BoeV9jb25maWcodHApOwogCQlicmVhazsKIAljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjc6Ci0JCXJ0bDgxNjhkXzNfaHdfcGh5X2NvbmZpZyhpb2FkZHIpOworCQlydGw4MTY4ZF8zX2h3X3BoeV9jb25maWcodHApOworCQlicmVhazsKKwljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjg6CisJCXJ0bDgxNjhkXzRfaHdfcGh5X2NvbmZpZyh0cCk7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKQEAgLTI3MjcsNyArMjQwNyw3IEBACiAKIAlzcGluX2xvY2tfaXJxKCZ0cC0+bG9jayk7CiAKLQlpZiAodHAtPnBoeV9yZXNldF9wZW5kaW5nKGlvYWRkcikpIHsKKwlpZiAodHAtPnBoeV9yZXNldF9wZW5kaW5nKHRwKSkgewogCQkvKgogCQkgKiBBIGJ1c3kgbG9vcCBjb3VsZCBidXJuIHF1aXRlIGEgZmV3IGN5Y2xlcyBvbiBub3dhZGF5cyBDUFUuCiAJCSAqIExldCdzIGRlbGF5IHRoZSBleGVjdXRpb24gb2YgdGhlIHRpbWVyIGZvciBhIGZldyB0aWNrcy4KQEAgLTI3NDEsNyArMjQyMSw3IEBACiAKIAluZXRpZl93YXJuKHRwLCBsaW5rLCBkZXYsICJQSFkgcmVzZXQgdW50aWwgbGluayB1cFxuIik7CiAKLQl0cC0+cGh5X3Jlc2V0X2VuYWJsZShpb2FkZHIpOworCXRwLT5waHlfcmVzZXRfZW5hYmxlKHRwKTsKIAogb3V0X21vZF90aW1lcjoKIAltb2RfdGltZXIodGltZXIsIGppZmZpZXMgKyB0aW1lb3V0KTsKQEAgLTI4MDEsMTIgKzI0ODEsMTEgQEAKIHN0YXRpYyB2b2lkIHJ0bDgxNjlfcGh5X3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgICAgICBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIHsKLQl2b2lkIF9faW9tZW0gKmlvYWRkciA9IHRwLT5tbWlvX2FkZHI7CiAJdW5zaWduZWQgaW50IGk7CiAKLQl0cC0+cGh5X3Jlc2V0X2VuYWJsZShpb2FkZHIpOworCXRwLT5waHlfcmVzZXRfZW5hYmxlKHRwKTsKIAlmb3IgKGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKLQkJaWYgKCF0cC0+cGh5X3Jlc2V0X3BlbmRpbmcoaW9hZGRyKSkKKwkJaWYgKCF0cC0+cGh5X3Jlc2V0X3BlbmRpbmcodHApKQogCQkJcmV0dXJuOwogCQltc2xlZXAoMSk7CiAJfQpAQCAtMjgzMyw3ICsyNTEyLDcgQEAKIAkJZHByaW50aygiU2V0IE1BQyBSZWcgQytDUiBPZmZzZXQgMHg4MmggPSAweDAxaFxuIik7CiAJCVJUTF9XOCgweDgyLCAweDAxKTsKIAkJZHByaW50aygiU2V0IFBIWSBSZWcgMHgwYmggPSAweDAwaFxuIik7Ci0JCW1kaW9fd3JpdGUoaW9hZGRyLCAweDBiLCAweDAwMDApOyAvL3cgMHgwYiAxNSAwIDAKKwkJcnRsX3dyaXRlcGh5KHRwLCAweDBiLCAweDAwMDApOyAvL3cgMHgwYiAxNSAwIDAKIAl9CiAKIAlydGw4MTY5X3BoeV9yZXNldChkZXYsIHRwKTsKQEAgLTI5MDMsMTEgKzI1ODIsMTEgQEAKIAkJcmV0dXJuIDA7CiAKIAljYXNlIFNJT0NHTUlJUkVHOgotCQlkYXRhLT52YWxfb3V0ID0gbWRpb19yZWFkKHRwLT5tbWlvX2FkZHIsIGRhdGEtPnJlZ19udW0gJiAweDFmKTsKKwkJZGF0YS0+dmFsX291dCA9IHJ0bF9yZWFkcGh5KHRwLCBkYXRhLT5yZWdfbnVtICYgMHgxZik7CiAJCXJldHVybiAwOwogCiAJY2FzZSBTSU9DU01JSVJFRzoKLQkJbWRpb193cml0ZSh0cC0+bW1pb19hZGRyLCBkYXRhLT5yZWdfbnVtICYgMHgxZiwgZGF0YS0+dmFsX2luKTsKKwkJcnRsX3dyaXRlcGh5KHRwLCBkYXRhLT5yZWdfbnVtICYgMHgxZiwgZGF0YS0+dmFsX2luKTsKIAkJcmV0dXJuIDA7CiAJfQogCXJldHVybiAtRU9QTk9UU1VQUDsKQEAgLTMwMDcsNiArMjY4NiwxNzMgQEAKIAogfTsKIAorc3RhdGljIHZvaWQgX19kZXZpbml0IHJ0bF9pbml0X21kaW9fb3BzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQoreworCXN0cnVjdCBtZGlvX29wcyAqb3BzID0gJnRwLT5tZGlvX29wczsKKworCXN3aXRjaCAodHAtPm1hY192ZXJzaW9uKSB7CisJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzI3OgorCQlvcHMtPndyaXRlCT0gcjgxNjhkcF8xX21kaW9fd3JpdGU7CisJCW9wcy0+cmVhZAk9IHI4MTY4ZHBfMV9tZGlvX3JlYWQ7CisJCWJyZWFrOworCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8yODoKKwkJb3BzLT53cml0ZQk9IHI4MTY4ZHBfMl9tZGlvX3dyaXRlOworCQlvcHMtPnJlYWQJPSByODE2OGRwXzJfbWRpb19yZWFkOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlvcHMtPndyaXRlCT0gcjgxNjlfbWRpb193cml0ZTsKKwkJb3BzLT5yZWFkCT0gcjgxNjlfbWRpb19yZWFkOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHI4MTB4X3BoeV9wb3dlcl9kb3duKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQoreworCXJ0bF93cml0ZXBoeSh0cCwgMHgxZiwgMHgwMDAwKTsKKwlydGxfd3JpdGVwaHkodHAsIE1JSV9CTUNSLCBCTUNSX1BET1dOKTsKK30KKworc3RhdGljIHZvaWQgcjgxMHhfcGh5X3Bvd2VyX3VwKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQoreworCXJ0bF93cml0ZXBoeSh0cCwgMHgxZiwgMHgwMDAwKTsKKwlydGxfd3JpdGVwaHkodHAsIE1JSV9CTUNSLCBCTUNSX0FORU5BQkxFKTsKK30KKworc3RhdGljIHZvaWQgcjgxMHhfcGxsX3Bvd2VyX2Rvd24oc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCit7CisJaWYgKF9fcnRsODE2OV9nZXRfd29sKHRwKSAmIFdBS0VfQU5ZKSB7CisJCXJ0bF93cml0ZXBoeSh0cCwgMHgxZiwgMHgwMDAwKTsKKwkJcnRsX3dyaXRlcGh5KHRwLCBNSUlfQk1DUiwgMHgwMDAwKTsKKwkJcmV0dXJuOworCX0KKworCXI4MTB4X3BoeV9wb3dlcl9kb3duKHRwKTsKK30KKworc3RhdGljIHZvaWQgcjgxMHhfcGxsX3Bvd2VyX3VwKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQoreworCXI4MTB4X3BoeV9wb3dlcl91cCh0cCk7Cit9CisKK3N0YXRpYyB2b2lkIHI4MTY4X3BoeV9wb3dlcl91cChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKK3sKKwlydGxfd3JpdGVwaHkodHAsIDB4MWYsIDB4MDAwMCk7CisJcnRsX3dyaXRlcGh5KHRwLCAweDBlLCAweDAwMDApOworCXJ0bF93cml0ZXBoeSh0cCwgTUlJX0JNQ1IsIEJNQ1JfQU5FTkFCTEUpOworfQorCitzdGF0aWMgdm9pZCByODE2OF9waHlfcG93ZXJfZG93bihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKK3sKKwlydGxfd3JpdGVwaHkodHAsIDB4MWYsIDB4MDAwMCk7CisJcnRsX3dyaXRlcGh5KHRwLCAweDBlLCAweDAyMDApOworCXJ0bF93cml0ZXBoeSh0cCwgTUlJX0JNQ1IsIEJNQ1JfUERPV04pOworfQorCitzdGF0aWMgdm9pZCByODE2OF9wbGxfcG93ZXJfZG93bihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKK3sKKwl2b2lkIF9faW9tZW0gKmlvYWRkciA9IHRwLT5tbWlvX2FkZHI7CisKKwlpZiAodHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMjcpCisJCXJldHVybjsKKworCWlmICgoKHRwLT5tYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzIzKSB8fAorCSAgICAgKHRwLT5tYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzI0KSkgJiYKKwkgICAgKFJUTF9SMTYoQ1BsdXNDbWQpICYgQVNGKSkgeworCQlyZXR1cm47CisJfQorCisJaWYgKF9fcnRsODE2OV9nZXRfd29sKHRwKSAmIFdBS0VfQU5ZKSB7CisJCXJ0bF93cml0ZXBoeSh0cCwgMHgxZiwgMHgwMDAwKTsKKwkJcnRsX3dyaXRlcGh5KHRwLCBNSUlfQk1DUiwgMHgwMDAwKTsKKworCQlSVExfVzMyKFJ4Q29uZmlnLCBSVExfUjMyKFJ4Q29uZmlnKSB8CisJCQlBY2NlcHRCcm9hZGNhc3QgfCBBY2NlcHRNdWx0aWNhc3QgfCBBY2NlcHRNeVBoeXMpOworCQlyZXR1cm47CisJfQorCisJcjgxNjhfcGh5X3Bvd2VyX2Rvd24odHApOworCisJc3dpdGNoICh0cC0+bWFjX3ZlcnNpb24pIHsKKwljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjU6CisJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzI2OgorCQlSVExfVzgoUE1DSCwgUlRMX1I4KFBNQ0gpICYgfjB4ODApOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHI4MTY4X3BsbF9wb3dlcl91cChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKK3sKKwl2b2lkIF9faW9tZW0gKmlvYWRkciA9IHRwLT5tbWlvX2FkZHI7CisKKwlpZiAodHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMjcpCisJCXJldHVybjsKKworCXN3aXRjaCAodHAtPm1hY192ZXJzaW9uKSB7CisJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzI1OgorCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8yNjoKKwkJUlRMX1c4KFBNQ0gsIFJUTF9SOChQTUNIKSB8IDB4ODApOworCQlicmVhazsKKwl9CisKKwlyODE2OF9waHlfcG93ZXJfdXAodHApOworfQorCitzdGF0aWMgdm9pZCBydGxfcGxsX3Bvd2VyX29wKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLAorCQkJICAgICB2b2lkICgqb3ApKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKikpCit7CisJaWYgKG9wKQorCQlvcCh0cCk7Cit9CisKK3N0YXRpYyB2b2lkIHJ0bF9wbGxfcG93ZXJfZG93bihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKK3sKKwlydGxfcGxsX3Bvd2VyX29wKHRwLCB0cC0+cGxsX3Bvd2VyX29wcy5kb3duKTsKK30KKworc3RhdGljIHZvaWQgcnRsX3BsbF9wb3dlcl91cChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKK3sKKwlydGxfcGxsX3Bvd2VyX29wKHRwLCB0cC0+cGxsX3Bvd2VyX29wcy51cCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBydGxfaW5pdF9wbGxfcG93ZXJfb3BzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQoreworCXN0cnVjdCBwbGxfcG93ZXJfb3BzICpvcHMgPSAmdHAtPnBsbF9wb3dlcl9vcHM7CisKKwlzd2l0Y2ggKHRwLT5tYWNfdmVyc2lvbikgeworCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8wNzoKKwljYXNlIFJUTF9HSUdBX01BQ19WRVJfMDg6CisJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzA5OgorCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8xMDoKKwljYXNlIFJUTF9HSUdBX01BQ19WRVJfMTY6CisJCW9wcy0+ZG93bgk9IHI4MTB4X3BsbF9wb3dlcl9kb3duOworCQlvcHMtPnVwCQk9IHI4MTB4X3BsbF9wb3dlcl91cDsKKwkJYnJlYWs7CisKKwljYXNlIFJUTF9HSUdBX01BQ19WRVJfMTE6CisJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzEyOgorCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8xNzoKKwljYXNlIFJUTF9HSUdBX01BQ19WRVJfMTg6CisJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzE5OgorCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8yMDoKKwljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjE6CisJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzIyOgorCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8yMzoKKwljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjQ6CisJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzI1OgorCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8yNjoKKwljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjc6CisJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzI4OgorCQlvcHMtPmRvd24JPSByODE2OF9wbGxfcG93ZXJfZG93bjsKKwkJb3BzLT51cAkJPSByODE2OF9wbGxfcG93ZXJfdXA7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJb3BzLT5kb3duCT0gTlVMTDsKKwkJb3BzLT51cAkJPSBOVUxMOworCQlicmVhazsKKwl9Cit9CisKIHN0YXRpYyBpbnQgX19kZXZpbml0CiBydGw4MTY5X2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogewpAQCAtMzEyNSw2ICsyOTcxLDkgQEAKIAkvKiBJZGVudGlmeSBjaGlwIGF0dGFjaGVkIHRvIGJvYXJkICovCiAJcnRsODE2OV9nZXRfbWFjX3ZlcnNpb24odHAsIGlvYWRkcik7CiAKKwlydGxfaW5pdF9tZGlvX29wcyh0cCk7CisJcnRsX2luaXRfcGxsX3Bvd2VyX29wcyh0cCk7CisKIAkvKiBVc2UgYXBwcm9wcmlhdGUgZGVmYXVsdCBpZiB1bmtub3duICovCiAJaWYgKHRwLT5tYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfTk9ORSkgewogCQluZXRpZl9ub3RpY2UodHAsIHByb2JlLCBkZXYsCkBAIC0zMjE1LDYgKzMwNjQsMTEgQEAKIAkJICAgZGV2LT5iYXNlX2FkZHIsIGRldi0+ZGV2X2FkZHIsCiAJCSAgICh1MzIpKFJUTF9SMzIoVHhDb25maWcpICYgMHg5Y2YwZjhmZiksIGRldi0+aXJxKTsKIAorCWlmICgodHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMjcpIHx8CisJICAgICh0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8yOCkpIHsKKwkJcnRsODE2OF9kcml2ZXJfc3RhcnQodHApOworCX0KKwogCXJ0bDgxNjlfaW5pdF9waHkoZGV2LCB0cCk7CiAKIAkvKgpAQCAtMzI1MCw3ICszMTA0LDEyIEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7CiAKLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCWlmICgodHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMjcpIHx8CisJICAgICh0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8yOCkpIHsKKwkJcnRsODE2OF9kcml2ZXJfc3RvcCh0cCk7CisJfQorCisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZ0cC0+dGFzayk7CiAKIAl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwogCkBAIC0zMzAzLDYgKzMxNjIsOCBAQAogCiAJbmFwaV9lbmFibGUoJnRwLT5uYXBpKTsKIAorCXJ0bF9wbGxfcG93ZXJfdXAodHApOworCiAJcnRsX2h3X3N0YXJ0KGRldik7CiAKIAlydGw4MTY5X3JlcXVlc3RfdGltZXIoZGV2KTsKQEAgLTMzMjksMTEgKzMxOTAsMTkgQEAKIAlnb3RvIG91dDsKIH0KIAotc3RhdGljIHZvaWQgcnRsODE2OV9od19yZXNldCh2b2lkIF9faW9tZW0gKmlvYWRkcikKK3N0YXRpYyB2b2lkIHJ0bDgxNjlfaHdfcmVzZXQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiB7CisJdm9pZCBfX2lvbWVtICppb2FkZHIgPSB0cC0+bW1pb19hZGRyOworCiAJLyogRGlzYWJsZSBpbnRlcnJ1cHRzICovCiAJcnRsODE2OV9pcnFfbWFza19hbmRfYWNrKGlvYWRkcik7CiAKKwlpZiAodHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMjgpIHsKKwkJd2hpbGUgKFJUTF9SOChUeFBvbGwpICYgTlBRKQorCQkJdWRlbGF5KDIwKTsKKworCX0KKwogCS8qIFJlc2V0IHRoZSBjaGlwc2V0ICovCiAJUlRMX1c4KENoaXBDbWQsIENtZFJlc2V0KTsKIApAQCAtMzQ0Nyw3ICszMzE2LDcgQEAKIAkgICAgKHRwLT5tYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzA0KSkKIAkJUlRMX1c4KENoaXBDbWQsIENtZFR4RW5iIHwgQ21kUnhFbmIpOwogCi0JUlRMX1c4KEVhcmx5VHhUaHJlcywgRWFybHlUeFRobGQpOworCVJUTF9XOChFYXJseVR4VGhyZXMsIE5vRWFybHlUeCk7CiAKIAlydGxfc2V0X3J4X21heF9zaXplKGlvYWRkciwgcnhfYnVmX3N6KTsKIApAQCAtMzUxNywxMiArMzM4NiwyMiBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgcnRsX2NzaV9hY2Nlc3NfZW5hYmxlKHZvaWQgX19pb21lbSAqaW9hZGRyKQorc3RhdGljIHZvaWQgcnRsX2NzaV9hY2Nlc3NfZW5hYmxlKHZvaWQgX19pb21lbSAqaW9hZGRyLCB1MzIgYml0cykKIHsKIAl1MzIgY3NpOwogCiAJY3NpID0gcnRsX2NzaV9yZWFkKGlvYWRkciwgMHgwNzBjKSAmIDB4MDBmZmZmZmY7Ci0JcnRsX2NzaV93cml0ZShpb2FkZHIsIDB4MDcwYywgY3NpIHwgMHgyNzAwMDAwMCk7CisJcnRsX2NzaV93cml0ZShpb2FkZHIsIDB4MDcwYywgY3NpIHwgYml0cyk7Cit9CisKK3N0YXRpYyB2b2lkIHJ0bF9jc2lfYWNjZXNzX2VuYWJsZV8xKHZvaWQgX19pb21lbSAqaW9hZGRyKQoreworCXJ0bF9jc2lfYWNjZXNzX2VuYWJsZShpb2FkZHIsIDB4MTcwMDAwMDApOworfQorCitzdGF0aWMgdm9pZCBydGxfY3NpX2FjY2Vzc19lbmFibGVfMih2b2lkIF9faW9tZW0gKmlvYWRkcikKK3sKKwlydGxfY3NpX2FjY2Vzc19lbmFibGUoaW9hZGRyLCAweDI3MDAwMDAwKTsKIH0KIAogc3RydWN0IGVwaHlfaW5mbyB7CkBAIC0zNTU3LDYgKzM0MzYsMjEgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIHJ0bF9lbmFibGVfY2xvY2tfcmVxdWVzdChzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgY2FwID0gdHAtPnBjaWVfY2FwOworCisJaWYgKGNhcCkgeworCQl1MTYgY3RsOworCisJCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIGNhcCArIFBDSV9FWFBfTE5LQ1RMLCAmY3RsKTsKKwkJY3RsIHw9IFBDSV9FWFBfTE5LQ1RMX0NMS1JFUV9FTjsKKwkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHBkZXYsIGNhcCArIFBDSV9FWFBfTE5LQ1RMLCBjdGwpOworCX0KK30KKwogI2RlZmluZSBSODE2OF9DUENNRF9RVUlSS19NQVNLIChcCiAJRW5hYmxlQmlzdCB8IFwKIAlNYWNfZGJnb19vZSB8IFwKQEAgLTM1ODIsNyArMzQ3Niw3IEBACiB7CiAJcnRsX2h3X3N0YXJ0XzgxNjhiYihpb2FkZHIsIHBkZXYpOwogCi0JUlRMX1c4KEVhcmx5VHhUaHJlcywgRWFybHlUeFRobGQpOworCVJUTF9XOChNYXhUeFBhY2tldFNpemUsIFR4UGFja2V0TWF4KTsKIAogCVJUTF9XOChDb25maWc0LCBSVExfUjgoQ29uZmlnNCkgJiB+KDEgPDwgMCkpOwogfQpAQCAtMzYxMCw3ICszNTA0LDcgQEAKIAkJeyAweDA3LCAwLAkweDIwMDAgfQogCX07CiAKLQlydGxfY3NpX2FjY2Vzc19lbmFibGUoaW9hZGRyKTsKKwlydGxfY3NpX2FjY2Vzc19lbmFibGVfMihpb2FkZHIpOwogCiAJcnRsX2VwaHlfaW5pdChpb2FkZHIsIGVfaW5mb184MTY4Y3AsIEFSUkFZX1NJWkUoZV9pbmZvXzgxNjhjcCkpOwogCkBAIC0zNjE5LDcgKzM1MTMsNyBAQAogCiBzdGF0aWMgdm9pZCBydGxfaHdfc3RhcnRfODE2OGNwXzIodm9pZCBfX2lvbWVtICppb2FkZHIsIHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewotCXJ0bF9jc2lfYWNjZXNzX2VuYWJsZShpb2FkZHIpOworCXJ0bF9jc2lfYWNjZXNzX2VuYWJsZV8yKGlvYWRkcik7CiAKIAlSVExfVzgoQ29uZmlnMywgUlRMX1I4KENvbmZpZzMpICYgfkJlYWNvbl9lbik7CiAKQEAgLTM2MzAsMTQgKzM1MjQsMTQgQEAKIAogc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0XzgxNjhjcF8zKHZvaWQgX19pb21lbSAqaW9hZGRyLCBzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKLQlydGxfY3NpX2FjY2Vzc19lbmFibGUoaW9hZGRyKTsKKwlydGxfY3NpX2FjY2Vzc19lbmFibGVfMihpb2FkZHIpOwogCiAJUlRMX1c4KENvbmZpZzMsIFJUTF9SOChDb25maWczKSAmIH5CZWFjb25fZW4pOwogCiAJLyogTWFnaWMuICovCiAJUlRMX1c4KERCR19SRUcsIDB4MjApOwogCi0JUlRMX1c4KEVhcmx5VHhUaHJlcywgRWFybHlUeFRobGQpOworCVJUTF9XOChNYXhUeFBhY2tldFNpemUsIFR4UGFja2V0TWF4KTsKIAogCXJ0bF90eF9wZXJmb3JtYW5jZV90d2VhayhwZGV2LCAweDUgPDwgTUFYX1JFQURfUkVRVUVTVF9TSElGVCk7CiAKQEAgLTM2NTIsNyArMzU0Niw3IEBACiAJCXsgMHgwNiwgMHgwMDgwLAkweDAwMDAgfQogCX07CiAKLQlydGxfY3NpX2FjY2Vzc19lbmFibGUoaW9hZGRyKTsKKwlydGxfY3NpX2FjY2Vzc19lbmFibGVfMihpb2FkZHIpOwogCiAJUlRMX1c4KERCR19SRUcsIDB4MDYgfCBGSVhfTkFLXzEgfCBGSVhfTkFLXzIpOwogCkBAIC0zNjY4LDcgKzM1NjIsNyBAQAogCQl7IDB4MDMsIDB4MDQwMCwJMHgwMjIwIH0KIAl9OwogCi0JcnRsX2NzaV9hY2Nlc3NfZW5hYmxlKGlvYWRkcik7CisJcnRsX2NzaV9hY2Nlc3NfZW5hYmxlXzIoaW9hZGRyKTsKIAogCXJ0bF9lcGh5X2luaXQoaW9hZGRyLCBlX2luZm9fODE2OGNfMiwgQVJSQVlfU0laRShlX2luZm9fODE2OGNfMikpOwogCkBAIC0zNjgyLDI0ICszNTc2LDUwIEBACiAKIHN0YXRpYyB2b2lkIHJ0bF9od19zdGFydF84MTY4Y180KHZvaWQgX19pb21lbSAqaW9hZGRyLCBzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKLQlydGxfY3NpX2FjY2Vzc19lbmFibGUoaW9hZGRyKTsKKwlydGxfY3NpX2FjY2Vzc19lbmFibGVfMihpb2FkZHIpOwogCiAJX19ydGxfaHdfc3RhcnRfODE2OGNwKGlvYWRkciwgcGRldik7CiB9CiAKIHN0YXRpYyB2b2lkIHJ0bF9od19zdGFydF84MTY4ZCh2b2lkIF9faW9tZW0gKmlvYWRkciwgc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7Ci0JcnRsX2NzaV9hY2Nlc3NfZW5hYmxlKGlvYWRkcik7CisJcnRsX2NzaV9hY2Nlc3NfZW5hYmxlXzIoaW9hZGRyKTsKIAogCXJ0bF9kaXNhYmxlX2Nsb2NrX3JlcXVlc3QocGRldik7CiAKLQlSVExfVzgoRWFybHlUeFRocmVzLCBFYXJseVR4VGhsZCk7CisJUlRMX1c4KE1heFR4UGFja2V0U2l6ZSwgVHhQYWNrZXRNYXgpOwogCiAJcnRsX3R4X3BlcmZvcm1hbmNlX3R3ZWFrKHBkZXYsIDB4NSA8PCBNQVhfUkVBRF9SRVFVRVNUX1NISUZUKTsKIAogCVJUTF9XMTYoQ1BsdXNDbWQsIFJUTF9SMTYoQ1BsdXNDbWQpICYgflI4MTY4X0NQQ01EX1FVSVJLX01BU0spOwogfQogCitzdGF0aWMgdm9pZCBydGxfaHdfc3RhcnRfODE2OGRfNCh2b2lkIF9faW9tZW0gKmlvYWRkciwgc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBlcGh5X2luZm8gZV9pbmZvXzgxNjhkXzRbXSA9IHsKKwkJeyAweDBiLCB+MCwJMHg0OCB9LAorCQl7IDB4MTksIDB4MjAsCTB4NTAgfSwKKwkJeyAweDBjLCB+MCwJMHgyMCB9CisJfTsKKwlpbnQgaTsKKworCXJ0bF9jc2lfYWNjZXNzX2VuYWJsZV8xKGlvYWRkcik7CisKKwlydGxfdHhfcGVyZm9ybWFuY2VfdHdlYWsocGRldiwgMHg1IDw8IE1BWF9SRUFEX1JFUVVFU1RfU0hJRlQpOworCisJUlRMX1c4KE1heFR4UGFja2V0U2l6ZSwgVHhQYWNrZXRNYXgpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZV9pbmZvXzgxNjhkXzQpOyBpKyspIHsKKwkJY29uc3Qgc3RydWN0IGVwaHlfaW5mbyAqZSA9IGVfaW5mb184MTY4ZF80ICsgaTsKKwkJdTE2IHc7CisKKwkJdyA9IHJ0bF9lcGh5X3JlYWQoaW9hZGRyLCBlLT5vZmZzZXQpOworCQlydGxfZXBoeV93cml0ZShpb2FkZHIsIDB4MDMsICh3ICYgZS0+bWFzaykgfCBlLT5iaXRzKTsKKwl9CisKKwlydGxfZW5hYmxlX2Nsb2NrX3JlcXVlc3QocGRldik7Cit9CisKIHN0YXRpYyB2b2lkIHJ0bF9od19zdGFydF84MTY4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtMzcwOCw3ICszNjI4LDcgQEAKIAogCVJUTF9XOChDZmc5MzQ2LCBDZmc5MzQ2X1VubG9jayk7CiAKLQlSVExfVzgoRWFybHlUeFRocmVzLCBFYXJseVR4VGhsZCk7CisJUlRMX1c4KE1heFR4UGFja2V0U2l6ZSwgVHhQYWNrZXRNYXgpOwogCiAJcnRsX3NldF9yeF9tYXhfc2l6ZShpb2FkZHIsIHJ4X2J1Zl9zeik7CiAKQEAgLTM3NzcsNiArMzY5NywxMCBAQAogCQlydGxfaHdfc3RhcnRfODE2OGQoaW9hZGRyLCBwZGV2KTsKIAlicmVhazsKIAorCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8yODoKKwkJcnRsX2h3X3N0YXJ0XzgxNjhkXzQoaW9hZGRyLCBwZGV2KTsKKwlicmVhazsKKwogCWRlZmF1bHQ6CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiB1bmtub3duIGNoaXBzZXQgKG1hY192ZXJzaW9uID0gJWQpLlxuIiwKIAkJCWRldi0+bmFtZSwgdHAtPm1hY192ZXJzaW9uKTsKQEAgLTM4MTgsNyArMzc0Miw3IEBACiAJfTsKIAl1OCBjZmcxOwogCi0JcnRsX2NzaV9hY2Nlc3NfZW5hYmxlKGlvYWRkcik7CisJcnRsX2NzaV9hY2Nlc3NfZW5hYmxlXzIoaW9hZGRyKTsKIAogCVJUTF9XOChEQkdfUkVHLCBGSVhfTkFLXzEpOwogCkBAIC0zODM5LDcgKzM3NjMsNyBAQAogCiBzdGF0aWMgdm9pZCBydGxfaHdfc3RhcnRfODEwMmVfMih2b2lkIF9faW9tZW0gKmlvYWRkciwgc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7Ci0JcnRsX2NzaV9hY2Nlc3NfZW5hYmxlKGlvYWRkcik7CisJcnRsX2NzaV9hY2Nlc3NfZW5hYmxlXzIoaW9hZGRyKTsKIAogCXJ0bF90eF9wZXJmb3JtYW5jZV90d2VhayhwZGV2LCAweDUgPDwgTUFYX1JFQURfUkVRVUVTVF9TSElGVCk7CiAKQEAgLTM4ODgsNyArMzgxMiw3IEBACiAKIAlSVExfVzgoQ2ZnOTM0NiwgQ2ZnOTM0Nl9VbmxvY2spOwogCi0JUlRMX1c4KEVhcmx5VHhUaHJlcywgRWFybHlUeFRobGQpOworCVJUTF9XOChNYXhUeFBhY2tldFNpemUsIFR4UGFja2V0TWF4KTsKIAogCXJ0bF9zZXRfcnhfbWF4X3NpemUoaW9hZGRyLCByeF9idWZfc3opOwogCkBAIC00MTg5LDcgKzQxMTMsNyBAQAogewogCXN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCXJ0bDgxNjlfaHdfcmVzZXQodHAtPm1taW9fYWRkcik7CisJcnRsODE2OV9od19yZXNldCh0cCk7CiAKIAkvKiBMZXQncyB3YWl0IGEgYml0IHdoaWxlIGFueSAoYXN5bmMpIGlycSBsYW5kcyBvbiAqLwogCXJ0bDgxNjlfc2NoZWR1bGVfd29yayhkZXYsIHJ0bDgxNjlfcmVzZXRfdGFzayk7CkBAIC00MzQ3LDcgKzQyNzEsNiBAQAogewogCXN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRwLT5wY2lfZGV2OwotCXZvaWQgX19pb21lbSAqaW9hZGRyID0gdHAtPm1taW9fYWRkcjsKIAl1MTYgcGNpX3N0YXR1cywgcGNpX2NtZDsKIAogCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIFBDSV9DT01NQU5ELCAmcGNpX2NtZCk7CkBAIC00Mzc4LDEzICs0MzAxLDE1IEBACiAKIAkvKiBUaGUgaW5mYW1vdXMgREFDIGYqY2t1cCBvbmx5IGhhcHBlbnMgYXQgYm9vdCB0aW1lICovCiAJaWYgKCh0cC0+Y3BfY21kICYgUENJREFDKSAmJiAhdHAtPmRpcnR5X3J4ICYmICF0cC0+Y3VyX3J4KSB7CisJCXZvaWQgX19pb21lbSAqaW9hZGRyID0gdHAtPm1taW9fYWRkcjsKKwogCQluZXRpZl9pbmZvKHRwLCBpbnRyLCBkZXYsICJkaXNhYmxpbmcgUENJIERBQ1xuIik7CiAJCXRwLT5jcF9jbWQgJj0gflBDSURBQzsKIAkJUlRMX1cxNihDUGx1c0NtZCwgdHAtPmNwX2NtZCk7CiAJCWRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfSElHSERNQTsKIAl9CiAKLQlydGw4MTY5X2h3X3Jlc2V0KGlvYWRkcik7CisJcnRsODE2OV9od19yZXNldCh0cCk7CiAKIAlydGw4MTY5X3NjaGVkdWxlX3dvcmsoZGV2LCBydGw4MTY5X3JlaW5pdF90YXNrKTsKIH0KQEAgLTQ3MTEsNiArNDYzNiw4IEBACiAJcnRsODE2OV90eF9jbGVhcih0cCk7CiAKIAlydGw4MTY5X3J4X2NsZWFyKHRwKTsKKworCXJ0bF9wbGxfcG93ZXJfZG93bih0cCk7CiB9CiAKIHN0YXRpYyBpbnQgcnRsODE2OV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtNDgxNSw5ICs0NzQyLDEzIEBACiAKIHN0YXRpYyB2b2lkIHJ0bDgxNjlfbmV0X3N1c3BlbmQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKKwlzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7CisKIAlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKIAkJcmV0dXJuOwogCisJcnRsX3BsbF9wb3dlcl9kb3duKHRwKTsKKwogCW5ldGlmX2RldmljZV9kZXRhY2goZGV2KTsKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiB9CkBAIC00ODM2LDcgKzQ3NjcsMTIgQEAKIAogc3RhdGljIHZvaWQgX19ydGw4MTY5X3Jlc3VtZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogeworCXN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwogCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKKworCXJ0bF9wbGxfcG93ZXJfdXAodHApOworCiAJcnRsODE2OV9zY2hlZHVsZV93b3JrKGRldiwgcnRsODE2OV9yZXNldF90YXNrKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvczJpby5jIGIvZHJpdmVycy9uZXQvczJpby5jCmluZGV4IGVjYzI1YWEuLjM5YzE3Y2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3MyaW8uYworKysgYi9kcml2ZXJzL25ldC9zMmlvLmMKQEAgLTg4LDE0ICs4OCwxNCBAQAogI2luY2x1ZGUgInMyaW8uaCIKICNpbmNsdWRlICJzMmlvLXJlZ3MuaCIKIAotI2RlZmluZSBEUlZfVkVSU0lPTiAiMi4wLjI2LjI3IgorI2RlZmluZSBEUlZfVkVSU0lPTiAiMi4wLjI2LjI4IgogCiAvKiBTMmlvIERyaXZlciBuYW1lICYgdmVyc2lvbi4gKi8KLXN0YXRpYyBjaGFyIHMyaW9fZHJpdmVyX25hbWVbXSA9ICJOZXRlcmlvbiI7Ci1zdGF0aWMgY2hhciBzMmlvX2RyaXZlcl92ZXJzaW9uW10gPSBEUlZfVkVSU0lPTjsKK3N0YXRpYyBjb25zdCBjaGFyIHMyaW9fZHJpdmVyX25hbWVbXSA9ICJOZXRlcmlvbiI7CitzdGF0aWMgY29uc3QgY2hhciBzMmlvX2RyaXZlcl92ZXJzaW9uW10gPSBEUlZfVkVSU0lPTjsKIAotc3RhdGljIGludCByeGRfc2l6ZVsyXSA9IHszMiwgNDh9Owotc3RhdGljIGludCByeGRfY291bnRbMl0gPSB7MTI3LCA4NX07CitzdGF0aWMgY29uc3QgaW50IHJ4ZF9zaXplWzJdID0gezMyLCA0OH07CitzdGF0aWMgY29uc3QgaW50IHJ4ZF9jb3VudFsyXSA9IHsxMjcsIDg1fTsKIAogc3RhdGljIGlubGluZSBpbnQgUlhEX0lTX1VQMkRUKHN0cnVjdCBSeERfdCAqcnhkcCkKIHsKQEAgLTM1OTgsMTAgKzM1OTgsMTIgQEAKIAl2YWw2NCA9IHJlYWRxKCZiYXIwLT5waWZfcmRfc3dhcHBlcl9mYik7CiAJaWYgKHZhbDY0ICE9IDB4MDEyMzQ1Njc4OUFCQ0RFRlVMTCkgewogCQlpbnQgaSA9IDA7Ci0JCXU2NCB2YWx1ZVtdID0geyAweEMzMDAwMEMzQzMwMDAwQzNVTEwsICAgLyogRkU9MSwgU0U9MSAqLwotCQkJCTB4ODEwMDAwODE4MTAwMDA4MVVMTCwgIC8qIEZFPTEsIFNFPTAgKi8KLQkJCQkweDQyMDAwMDQyNDIwMDAwNDJVTEwsICAvKiBGRT0wLCBTRT0xICovCi0JCQkJMH07ICAgICAgICAgICAgICAgICAgICAgLyogRkU9MCwgU0U9MCAqLworCQlzdGF0aWMgY29uc3QgdTY0IHZhbHVlW10gPSB7CisJCQkweEMzMDAwMEMzQzMwMDAwQzNVTEwsCS8qIEZFPTEsIFNFPTEgKi8KKwkJCTB4ODEwMDAwODE4MTAwMDA4MVVMTCwJLyogRkU9MSwgU0U9MCAqLworCQkJMHg0MjAwMDA0MjQyMDAwMDQyVUxMLAkvKiBGRT0wLCBTRT0xICovCisJCQkwCQkJLyogRkU9MCwgU0U9MCAqLworCQl9OwogCiAJCXdoaWxlIChpIDwgNCkgewogCQkJd3JpdGVxKHZhbHVlW2ldLCAmYmFyMC0+c3dhcHBlcl9jdHJsKTsKQEAgLTM2MjcsMTAgKzM2MjksMTIgQEAKIAogCWlmICh2YWw2NCAhPSB2YWx0KSB7CiAJCWludCBpID0gMDsKLQkJdTY0IHZhbHVlW10gPSB7IDB4MDBDM0MzMDAwMEMzQzMwMFVMTCwgIC8qIEZFPTEsIFNFPTEgKi8KLQkJCQkweDAwODE4MTAwMDA4MTgxMDBVTEwsICAvKiBGRT0xLCBTRT0wICovCi0JCQkJMHgwMDQyNDIwMDAwNDI0MjAwVUxMLCAgLyogRkU9MCwgU0U9MSAqLwotCQkJCTB9OyAgICAgICAgICAgICAgICAgICAgIC8qIEZFPTAsIFNFPTAgKi8KKwkJc3RhdGljIGNvbnN0IHU2NCB2YWx1ZVtdID0geworCQkJMHgwMEMzQzMwMDAwQzNDMzAwVUxMLAkvKiBGRT0xLCBTRT0xICovCisJCQkweDAwODE4MTAwMDA4MTgxMDBVTEwsCS8qIEZFPTEsIFNFPTAgKi8KKwkJCTB4MDA0MjQyMDAwMDQyNDIwMFVMTCwJLyogRkU9MCwgU0U9MSAqLworCQkJMAkJCS8qIEZFPTAsIFNFPTAgKi8KKwkJfTsKIAogCQl3aGlsZSAoaSA8IDQpIHsKIAkJCXdyaXRlcSgodmFsdWVbaV0gfCB2YWxyKSwgJmJhcjAtPnN3YXBwZXJfY3RybCk7CkBAIC01NTY4LDMwICs1NTcyLDI3IEBACiAJc3RydWN0IHMyaW9fbmljICpzcCA9IG5ldGRldl9wcml2KGRldik7CiAJaW50IGksIHR4X2Rlc2NfY291bnQgPSAwLCByeF9kZXNjX2NvdW50ID0gMDsKIAotCWlmIChzcC0+cnhkX21vZGUgPT0gUlhEX01PREVfMSkKKwlpZiAoc3AtPnJ4ZF9tb2RlID09IFJYRF9NT0RFXzEpIHsKIAkJZXJpbmctPnJ4X21heF9wZW5kaW5nID0gTUFYX1JYX0RFU0NfMTsKLQllbHNlIGlmIChzcC0+cnhkX21vZGUgPT0gUlhEX01PREVfM0IpCisJCWVyaW5nLT5yeF9qdW1ib19tYXhfcGVuZGluZyA9IE1BWF9SWF9ERVNDXzE7CisJfSBlbHNlIHsKIAkJZXJpbmctPnJ4X21heF9wZW5kaW5nID0gTUFYX1JYX0RFU0NfMjsKLQotCWVyaW5nLT50eF9tYXhfcGVuZGluZyA9IE1BWF9UWF9ERVNDOwotCWZvciAoaSA9IDAgOyBpIDwgc3AtPmNvbmZpZy50eF9maWZvX251bSA7IGkrKykKLQkJdHhfZGVzY19jb3VudCArPSBzcC0+Y29uZmlnLnR4X2NmZ1tpXS5maWZvX2xlbjsKLQotCURCR19QUklOVChJTkZPX0RCRywgIm1heCB0eGRzOiAlZFxuIiwgc3AtPmNvbmZpZy5tYXhfdHhkcyk7Ci0JZXJpbmctPnR4X3BlbmRpbmcgPSB0eF9kZXNjX2NvdW50OwotCXJ4X2Rlc2NfY291bnQgPSAwOwotCWZvciAoaSA9IDAgOyBpIDwgc3AtPmNvbmZpZy5yeF9yaW5nX251bSA7IGkrKykKLQkJcnhfZGVzY19jb3VudCArPSBzcC0+Y29uZmlnLnJ4X2NmZ1tpXS5udW1fcnhkOwotCi0JZXJpbmctPnJ4X3BlbmRpbmcgPSByeF9kZXNjX2NvdW50OworCQllcmluZy0+cnhfanVtYm9fbWF4X3BlbmRpbmcgPSBNQVhfUlhfREVTQ18yOworCX0KIAogCWVyaW5nLT5yeF9taW5pX21heF9wZW5kaW5nID0gMDsKLQllcmluZy0+cnhfbWluaV9wZW5kaW5nID0gMDsKLQlpZiAoc3AtPnJ4ZF9tb2RlID09IFJYRF9NT0RFXzEpCi0JCWVyaW5nLT5yeF9qdW1ib19tYXhfcGVuZGluZyA9IE1BWF9SWF9ERVNDXzE7Ci0JZWxzZSBpZiAoc3AtPnJ4ZF9tb2RlID09IFJYRF9NT0RFXzNCKQotCQllcmluZy0+cnhfanVtYm9fbWF4X3BlbmRpbmcgPSBNQVhfUlhfREVTQ18yOworCWVyaW5nLT50eF9tYXhfcGVuZGluZyA9IE1BWF9UWF9ERVNDOworCisJZm9yIChpID0gMDsgaSA8IHNwLT5jb25maWcucnhfcmluZ19udW07IGkrKykKKwkJcnhfZGVzY19jb3VudCArPSBzcC0+Y29uZmlnLnJ4X2NmZ1tpXS5udW1fcnhkOworCWVyaW5nLT5yeF9wZW5kaW5nID0gcnhfZGVzY19jb3VudDsKIAllcmluZy0+cnhfanVtYm9fcGVuZGluZyA9IHJ4X2Rlc2NfY291bnQ7CisJZXJpbmctPnJ4X21pbmlfcGVuZGluZyA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgc3AtPmNvbmZpZy50eF9maWZvX251bTsgaSsrKQorCQl0eF9kZXNjX2NvdW50ICs9IHNwLT5jb25maWcudHhfY2ZnW2ldLmZpZm9fbGVuOworCWVyaW5nLT50eF9wZW5kaW5nID0gdHhfZGVzY19jb3VudDsKKwlEQkdfUFJJTlQoSU5GT19EQkcsICJtYXggdHhkczogJWRcbiIsIHNwLT5jb25maWcubWF4X3R4ZHMpOwogfQogCiAvKioKQEAgLTc2OTIsNiArNzY5Myw4IEBACiBzdGF0aWMgaW50IHMyaW9fdmVyaWZ5X3Bhcm0oc3RydWN0IHBjaV9kZXYgKnBkZXYsIHU4ICpkZXZfaW50cl90eXBlLAogCQkJICAgIHU4ICpkZXZfbXVsdGlxKQogeworCWludCBpOworCiAJaWYgKCh0eF9maWZvX251bSA+IE1BWF9UWF9GSUZPUykgfHwgKHR4X2ZpZm9fbnVtIDwgMSkpIHsKIAkJREJHX1BSSU5UKEVSUl9EQkcsICJSZXF1ZXN0ZWQgbnVtYmVyIG9mIHR4IGZpZm9zICIKIAkJCSAgIiglZCkgbm90IHN1cHBvcnRlZFxuIiwgdHhfZmlmb19udW0pOwpAQCAtNzc1MCw2ICs3NzUzLDE1IEBACiAJCURCR19QUklOVChFUlJfREJHLCAiRGVmYXVsdGluZyB0byAxLWJ1ZmZlciBtb2RlXG4iKTsKIAkJcnhfcmluZ19tb2RlID0gMTsKIAl9CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX1JYX1JJTkdTOyBpKyspCisJCWlmIChyeF9yaW5nX3N6W2ldID4gTUFYX1JYX0JMT0NLU19QRVJfUklORykgeworCQkJREJHX1BSSU5UKEVSUl9EQkcsICJSZXF1ZXN0ZWQgcnggcmluZyBzaXplIG5vdCAiCisJCQkJICAic3VwcG9ydGVkXG5EZWZhdWx0aW5nIHRvICVkXG4iLAorCQkJCSAgTUFYX1JYX0JMT0NLU19QRVJfUklORyk7CisJCQlyeF9yaW5nX3N6W2ldID0gTUFYX1JYX0JMT0NLU19QRVJfUklORzsKKwkJfQorCiAJcmV0dXJuIFNVQ0NFU1M7CiB9CiAKQEAgLTgzMjEsOCArODMzMyw3IEBACiAKIHN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBzMmlvX3JlbV9uaWMoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9Ci0JCShzdHJ1Y3QgbmV0X2RldmljZSAqKXBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBzMmlvX25pYyAqc3A7CiAKIAlpZiAoZGV2ID09IE5VTEwpIHsKQEAgLTgzMzAsOSArODM0MSwxMSBAQAogCQlyZXR1cm47CiAJfQogCi0JZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKLQogCXNwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWNhbmNlbF93b3JrX3N5bmMoJnNwLT5yc3RfdGltZXJfdGFzayk7CisJY2FuY2VsX3dvcmtfc3luYygmc3AtPnNldF9saW5rX3Rhc2spOworCiAJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAogCWZyZWVfc2hhcmVkX21lbShzcCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zMmlvLmggYi9kcml2ZXJzL25ldC9zMmlvLmgKaW5kZXggMDBiODYxNC4uN2QxNjAzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvczJpby5oCisrKyBiL2RyaXZlcnMvbmV0L3MyaW8uaApAQCAtMzU1LDEzICszNTUsMTIgQEAKICNkZWZpbmUgRklGT19PVEhFUl9NQVhfTlVNCQkJMQogCiAKLSNkZWZpbmUgTUFYX1JYX0RFU0NfMSAgKE1BWF9SWF9SSU5HUyAqIE1BWF9SWF9CTE9DS1NfUEVSX1JJTkcgKiAxMjcgKQotI2RlZmluZSBNQVhfUlhfREVTQ18yICAoTUFYX1JYX1JJTkdTICogTUFYX1JYX0JMT0NLU19QRVJfUklORyAqIDg1ICkKLSNkZWZpbmUgTUFYX1JYX0RFU0NfMyAgKE1BWF9SWF9SSU5HUyAqIE1BWF9SWF9CTE9DS1NfUEVSX1JJTkcgKiA4NSApCisjZGVmaW5lIE1BWF9SWF9ERVNDXzEgIChNQVhfUlhfUklOR1MgKiBNQVhfUlhfQkxPQ0tTX1BFUl9SSU5HICogMTI4KQorI2RlZmluZSBNQVhfUlhfREVTQ18yICAoTUFYX1JYX1JJTkdTICogTUFYX1JYX0JMT0NLU19QRVJfUklORyAqIDg2KQogI2RlZmluZSBNQVhfVFhfREVTQyAgICAoTUFYX0FWQUlMQUJMRV9UWERTKQogCiAvKiBGSUZPIG1hcHBpbmdzIGZvciBhbGwgcG9zc2libGUgbnVtYmVyIG9mIGZpZm9zIGNvbmZpZ3VyZWQgKi8KLXN0YXRpYyBpbnQgZmlmb19tYXBbXVtNQVhfVFhfRklGT1NdID0geworc3RhdGljIGNvbnN0IGludCBmaWZvX21hcFtdW01BWF9UWF9GSUZPU10gPSB7CiAJezAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9LAogCXswLCAwLCAwLCAwLCAxLCAxLCAxLCAxfSwKIAl7MCwgMCwgMCwgMSwgMSwgMSwgMiwgMn0sCkBAIC0zNzIsNyArMzcxLDcgQEAKIAl7MCwgMSwgMiwgMywgNCwgNSwgNiwgN30sCiB9OwogCi1zdGF0aWMgdTE2IGZpZm9fc2VsZWN0b3JbTUFYX1RYX0ZJRk9TXSA9IHswLCAxLCAzLCAzLCA3LCA3LCA3LCA3fTsKK3N0YXRpYyBjb25zdCB1MTYgZmlmb19zZWxlY3RvcltNQVhfVFhfRklGT1NdID0gezAsIDEsIDMsIDMsIDcsIDcsIDcsIDd9OwogCiAvKiBNYWludGFpbnMgUGVyIEZJRk8gcmVsYXRlZCBpbmZvcm1hdGlvbi4gKi8KIHN0cnVjdCB0eF9maWZvX2NvbmZpZyB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zYzkyMDMxLmMgYi9kcml2ZXJzL25ldC9zYzkyMDMxLmMKaW5kZXggNDE3YWRmMy4uNzYyOTBhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2M5MjAzMS5jCisrKyBiL2RyaXZlcnMvbmV0L3NjOTIwMzEuYwpAQCAtMTQ0OSw3ICsxNDQ5LDggQEAKIAlkZXYtPmlycSA9IHBkZXYtPmlycTsKIAogCS8qIGZha2VkIHdpdGggc2tiX2NvcHlfYW5kX2NzdW1fZGV2ICovCi0JZGV2LT5mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0hXX0NTVU0gfCBORVRJRl9GX0hJR0hETUE7CisJZGV2LT5mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0hJR0hETUEgfAorCQlORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX0lQVjZfQ1NVTTsKIAogCWRldi0+bmV0ZGV2X29wcwkJPSAmc2M5MjAzMV9uZXRkZXZfb3BzOwogCWRldi0+d2F0Y2hkb2dfdGltZW8JPSBUWF9USU1FT1VUOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL2VmeC5jIGIvZHJpdmVycy9uZXQvc2ZjL2VmeC5jCmluZGV4IGZiODNjZGQuLjcxMTQ0OWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9lZnguYworKysgYi9kcml2ZXJzL25ldC9zZmMvZWZ4LmMKQEAgLTIzLDcgKzIzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9nZnAuaD4KICNpbmNsdWRlICJuZXRfZHJpdmVyLmgiCiAjaW5jbHVkZSAiZWZ4LmgiCi0jaW5jbHVkZSAibWRpb18xMGcuaCIKICNpbmNsdWRlICJuaWMuaCIKIAogI2luY2x1ZGUgIm1jZGkuaCIKQEAgLTQ2Miw5ICs0NjEsNiBAQAogCQl9CiAJfQogCi0Jc3Bpbl9sb2NrX2luaXQoJmNoYW5uZWwtPnR4X3N0b3BfbG9jayk7Ci0JYXRvbWljX3NldCgmY2hhbm5lbC0+dHhfc3RvcF9jb3VudCwgMSk7Ci0KIAlyeF9xdWV1ZSA9ICZjaGFubmVsLT5yeF9xdWV1ZTsKIAlyeF9xdWV1ZS0+ZWZ4ID0gZWZ4OwogCXNldHVwX3RpbWVyKCZyeF9xdWV1ZS0+c2xvd19maWxsLCBlZnhfcnhfc2xvd19maWxsLApAQCAtOTIxLDYgKzkxNyw3IEBACiAKIHN0YXRpYyBpbnQgZWZ4X3Byb2JlX3BvcnQoc3RydWN0IGVmeF9uaWMgKmVmeCkKIHsKKwl1bnNpZ25lZCBjaGFyICpwZXJtX2FkZHI7CiAJaW50IHJjOwogCiAJbmV0aWZfZGJnKGVmeCwgcHJvYmUsIGVmeC0+bmV0X2RldiwgImNyZWF0ZSBwb3J0XG4iKTsKQEAgLTkzNCwxMSArOTMxLDEyIEBACiAJCXJldHVybiByYzsKIAogCS8qIFNhbml0eSBjaGVjayBNQUMgYWRkcmVzcyAqLwotCWlmIChpc192YWxpZF9ldGhlcl9hZGRyKGVmeC0+bWFjX2FkZHJlc3MpKSB7Ci0JCW1lbWNweShlZngtPm5ldF9kZXYtPmRldl9hZGRyLCBlZngtPm1hY19hZGRyZXNzLCBFVEhfQUxFTik7CisJcGVybV9hZGRyID0gZWZ4LT5uZXRfZGV2LT5wZXJtX2FkZHI7CisJaWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIocGVybV9hZGRyKSkgeworCQltZW1jcHkoZWZ4LT5uZXRfZGV2LT5kZXZfYWRkciwgcGVybV9hZGRyLCBFVEhfQUxFTik7CiAJfSBlbHNlIHsKIAkJbmV0aWZfZXJyKGVmeCwgcHJvYmUsIGVmeC0+bmV0X2RldiwgImludmFsaWQgTUFDIGFkZHJlc3MgJXBNXG4iLAotCQkJICBlZngtPm1hY19hZGRyZXNzKTsKKwkJCSAgcGVybV9hZGRyKTsKIAkJaWYgKCFhbGxvd19iYWRfaHdhZGRyKSB7CiAJCQlyYyA9IC1FSU5WQUw7CiAJCQlnb3RvIGVycjsKQEAgLTE0MDUsMTEgKzE0MDMsMTEgQEAKIAkgKiByZXN0YXJ0IHRoZSB0cmFuc21pdCBpbnRlcmZhY2UgZWFybHkgc28gdGhlIHdhdGNoZG9nIHRpbWVyIHN0b3BzICovCiAJZWZ4X3N0YXJ0X3BvcnQoZWZ4KTsKIAotCWVmeF9mb3JfZWFjaF9jaGFubmVsKGNoYW5uZWwsIGVmeCkgewotCQlpZiAoZWZ4X2Rldl9yZWdpc3RlcmVkKGVmeCkpCi0JCQllZnhfd2FrZV9xdWV1ZShjaGFubmVsKTsKKwlpZiAoZWZ4X2Rldl9yZWdpc3RlcmVkKGVmeCkpCisJCW5ldGlmX3R4X3dha2VfYWxsX3F1ZXVlcyhlZngtPm5ldF9kZXYpOworCisJZWZ4X2Zvcl9lYWNoX2NoYW5uZWwoY2hhbm5lbCwgZWZ4KQogCQllZnhfc3RhcnRfY2hhbm5lbChjaGFubmVsKTsKLQl9CiAKIAlpZiAoZWZ4LT5sZWdhY3lfaXJxKQogCQllZngtPmxlZ2FjeV9pcnFfZW5hYmxlZCA9IHRydWU7CkBAIC0xNDk3LDkgKzE0OTUsNyBAQAogCS8qIFN0b3AgdGhlIGtlcm5lbCB0cmFuc21pdCBpbnRlcmZhY2UgbGF0ZSwgc28gdGhlIHdhdGNoZG9nCiAJICogdGltZXIgaXNuJ3QgdGlja2luZyBvdmVyIHRoZSBmbHVzaCAqLwogCWlmIChlZnhfZGV2X3JlZ2lzdGVyZWQoZWZ4KSkgewotCQlzdHJ1Y3QgZWZ4X2NoYW5uZWwgKmNoYW5uZWw7Ci0JCWVmeF9mb3JfZWFjaF9jaGFubmVsKGNoYW5uZWwsIGVmeCkKLQkJCWVmeF9zdG9wX3F1ZXVlKGNoYW5uZWwpOworCQluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMoZWZ4LT5uZXRfZGV2KTsKIAkJbmV0aWZfdHhfbG9ja19iaChlZngtPm5ldF9kZXYpOwogCQluZXRpZl90eF91bmxvY2tfYmgoZWZ4LT5uZXRfZGV2KTsKIAl9CkBAIC0xODk1LDYgKzE4OTEsNyBAQAogc3RhdGljIGludCBlZnhfcmVnaXN0ZXJfbmV0ZGV2KHN0cnVjdCBlZnhfbmljICplZngpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYgPSBlZngtPm5ldF9kZXY7CisJc3RydWN0IGVmeF9jaGFubmVsICpjaGFubmVsOwogCWludCByYzsKIAogCW5ldF9kZXYtPndhdGNoZG9nX3RpbWVvID0gNSAqIEhaOwpAQCAtMTkxNyw2ICsxOTE0LDE0IEBACiAJaWYgKHJjKQogCQlnb3RvIGZhaWxfbG9ja2VkOwogCisJZWZ4X2Zvcl9lYWNoX2NoYW5uZWwoY2hhbm5lbCwgZWZ4KSB7CisJCXN0cnVjdCBlZnhfdHhfcXVldWUgKnR4X3F1ZXVlOworCQllZnhfZm9yX2VhY2hfY2hhbm5lbF90eF9xdWV1ZSh0eF9xdWV1ZSwgY2hhbm5lbCkgeworCQkJdHhfcXVldWUtPmNvcmVfdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZSgKKwkJCQllZngtPm5ldF9kZXYsIHR4X3F1ZXVlLT5xdWV1ZSAvIEVGWF9UWFFfVFlQRVMpOworCQl9CisJfQorCiAJLyogQWx3YXlzIHN0YXJ0IHdpdGggY2FycmllciBvZmY7IFBIWSBldmVudHMgd2lsbCBkZXRlY3QgdGhlIGxpbmsgKi8KIAluZXRpZl9jYXJyaWVyX29mZihlZngtPm5ldF9kZXYpOwogCkBAIC0xOTgwLDcgKzE5ODUsNiBAQAogCiAJZWZ4X3N0b3BfYWxsKGVmeCk7CiAJbXV0ZXhfbG9jaygmZWZ4LT5tYWNfbG9jayk7Ci0JbXV0ZXhfbG9jaygmZWZ4LT5zcGlfbG9jayk7CiAKIAllZnhfZmluaV9jaGFubmVscyhlZngpOwogCWlmIChlZngtPnBvcnRfaW5pdGlhbGl6ZWQgJiYgbWV0aG9kICE9IFJFU0VUX1RZUEVfSU5WSVNJQkxFKQpAQCAtMjAyMiw3ICsyMDI2LDYgQEAKIAllZnhfaW5pdF9jaGFubmVscyhlZngpOwogCWVmeF9yZXN0b3JlX2ZpbHRlcnMoZWZ4KTsKIAotCW11dGV4X3VubG9jaygmZWZ4LT5zcGlfbG9jayk7CiAJbXV0ZXhfdW5sb2NrKCZlZngtPm1hY19sb2NrKTsKIAogCWVmeF9zdGFydF9hbGwoZWZ4KTsKQEAgLTIwMzIsNyArMjAzNSw2IEBACiBmYWlsOgogCWVmeC0+cG9ydF9pbml0aWFsaXplZCA9IGZhbHNlOwogCi0JbXV0ZXhfdW5sb2NrKCZlZngtPnNwaV9sb2NrKTsKIAltdXRleF91bmxvY2soJmVmeC0+bWFjX2xvY2spOwogCiAJcmV0dXJuIHJjOwpAQCAtMjIyMCw4ICsyMjIyLDYgQEAKIAkvKiBJbml0aWFsaXNlIGNvbW1vbiBzdHJ1Y3R1cmVzICovCiAJbWVtc2V0KGVmeCwgMCwgc2l6ZW9mKCplZngpKTsKIAlzcGluX2xvY2tfaW5pdCgmZWZ4LT5iaXVfbG9jayk7Ci0JbXV0ZXhfaW5pdCgmZWZ4LT5tZGlvX2xvY2spOwotCW11dGV4X2luaXQoJmVmeC0+c3BpX2xvY2spOwogI2lmZGVmIENPTkZJR19TRkNfTVRECiAJSU5JVF9MSVNUX0hFQUQoJmVmeC0+bXRkX2xpc3QpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvZWZ4LmggYi9kcml2ZXJzL25ldC9zZmMvZWZ4LmgKaW5kZXggMTBhMWJmNC4uZDQzYTdlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL2VmeC5oCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9lZnguaApAQCAtMzYsOCArMzYsNiBAQAogZXh0ZXJuIG5ldGRldl90eF90CiBlZnhfZW5xdWV1ZV9za2Ioc3RydWN0IGVmeF90eF9xdWV1ZSAqdHhfcXVldWUsIHN0cnVjdCBza19idWZmICpza2IpOwogZXh0ZXJuIHZvaWQgZWZ4X3htaXRfZG9uZShzdHJ1Y3QgZWZ4X3R4X3F1ZXVlICp0eF9xdWV1ZSwgdW5zaWduZWQgaW50IGluZGV4KTsKLWV4dGVybiB2b2lkIGVmeF9zdG9wX3F1ZXVlKHN0cnVjdCBlZnhfY2hhbm5lbCAqY2hhbm5lbCk7Ci1leHRlcm4gdm9pZCBlZnhfd2FrZV9xdWV1ZShzdHJ1Y3QgZWZ4X2NoYW5uZWwgKmNoYW5uZWwpOwogCiAvKiBSWCAqLwogZXh0ZXJuIGludCBlZnhfcHJvYmVfcnhfcXVldWUoc3RydWN0IGVmeF9yeF9xdWV1ZSAqcnhfcXVldWUpOwpAQCAtNzQsOSArNzIsOCBAQAogCQkJCSAgICBib29sIHJlcGxhY2UpOwogZXh0ZXJuIGludCBlZnhfZmlsdGVyX3JlbW92ZV9maWx0ZXIoc3RydWN0IGVmeF9uaWMgKmVmeCwKIAkJCQkgICAgc3RydWN0IGVmeF9maWx0ZXJfc3BlYyAqc3BlYyk7Ci1leHRlcm4gdm9pZCBlZnhfZmlsdGVyX3RhYmxlX2NsZWFyKHN0cnVjdCBlZnhfbmljICplZngsCi0JCQkJICAgZW51bSBlZnhfZmlsdGVyX3RhYmxlX2lkIHRhYmxlX2lkLAotCQkJCSAgIGVudW0gZWZ4X2ZpbHRlcl9wcmlvcml0eSBwcmlvcml0eSk7CitleHRlcm4gdm9pZCBlZnhfZmlsdGVyX2NsZWFyX3J4KHN0cnVjdCBlZnhfbmljICplZngsCisJCQkJZW51bSBlZnhfZmlsdGVyX3ByaW9yaXR5IHByaW9yaXR5KTsKIAogLyogQ2hhbm5lbHMgKi8KIGV4dGVybiB2b2lkIGVmeF9wcm9jZXNzX2NoYW5uZWxfbm93KHN0cnVjdCBlZnhfY2hhbm5lbCAqY2hhbm5lbCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvc2ZjL2V0aHRvb2wuYwppbmRleCBlZGI5ZDE2Li4wZThiYjE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9ldGh0b29sLmMKQEAgLTExLDE0ICsxMSwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KICNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgogI2luY2x1ZGUgIm5ldF9kcml2ZXIuaCIKICNpbmNsdWRlICJ3b3JrYXJvdW5kcy5oIgogI2luY2x1ZGUgInNlbGZ0ZXN0LmgiCiAjaW5jbHVkZSAiZWZ4LmgiCiAjaW5jbHVkZSAiZmlsdGVyLmgiCiAjaW5jbHVkZSAibmljLmgiCi0jaW5jbHVkZSAic3BpLmgiCi0jaW5jbHVkZSAibWRpb18xMGcuaCIKIAogc3RydWN0IGV0aHRvb2xfc3RyaW5nIHsKIAljaGFyIG5hbWVbRVRIX0dTVFJJTkdfTEVOXTsKQEAgLTU2MCwxMiArNTU5LDggQEAKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIAotCWlmICghKGRhdGEgJiBFVEhfRkxBR19OVFVQTEUpKSB7Ci0JCWVmeF9maWx0ZXJfdGFibGVfY2xlYXIoZWZ4LCBFRlhfRklMVEVSX1RBQkxFX1JYX0lQLAotCQkJCSAgICAgICBFRlhfRklMVEVSX1BSSV9NQU5VQUwpOwotCQllZnhfZmlsdGVyX3RhYmxlX2NsZWFyKGVmeCwgRUZYX0ZJTFRFUl9UQUJMRV9SWF9NQUMsCi0JCQkJICAgICAgIEVGWF9GSUxURVJfUFJJX01BTlVBTCk7Ci0JfQorCWlmICghKGRhdGEgJiBFVEhfRkxBR19OVFVQTEUpKQorCQllZnhfZmlsdGVyX2NsZWFyX3J4KGVmeCwgRUZYX0ZJTFRFUl9QUklfTUFOVUFMKTsKIAogCXJldHVybiAwOwogfQpAQCAtNTg0LDYgKzU3OSw5IEBACiAJCWdvdG8gZmFpbDE7CiAJfQogCisJbmV0aWZfaW5mbyhlZngsIGRydiwgZWZ4LT5uZXRfZGV2LCAic3RhcnRpbmcgJXNsaW5lIHRlc3RpbmdcbiIsCisJCSAgICh0ZXN0LT5mbGFncyAmIEVUSF9URVNUX0ZMX09GRkxJTkUpID8gIm9mZiIgOiAib24iKTsKKwogCS8qIFdlIG5lZWQgcnggYnVmZmVycyBhbmQgaW50ZXJydXB0cy4gKi8KIAlhbHJlYWR5X3VwID0gKGVmeC0+bmV0X2Rldi0+ZmxhZ3MgJiBJRkZfVVApOwogCWlmICghYWxyZWFkeV91cCkgewpAQCAtNjAyLDkgKzYwMCw5IEBACiAJaWYgKCFhbHJlYWR5X3VwKQogCQlkZXZfY2xvc2UoZWZ4LT5uZXRfZGV2KTsKIAotCW5ldGlmX2RiZyhlZngsIGRydiwgZWZ4LT5uZXRfZGV2LCAiJXMgJXNsaW5lIHNlbGYtdGVzdHNcbiIsCi0JCSAgcmMgPT0gMCA/ICJwYXNzZWQiIDogImZhaWxlZCIsCi0JCSAgKHRlc3QtPmZsYWdzICYgRVRIX1RFU1RfRkxfT0ZGTElORSkgPyAib2ZmIiA6ICJvbiIpOworCW5ldGlmX2luZm8oZWZ4LCBkcnYsIGVmeC0+bmV0X2RldiwgIiVzICVzbGluZSBzZWxmLXRlc3RzXG4iLAorCQkgICByYyA9PSAwID8gInBhc3NlZCIgOiAiZmFpbGVkIiwKKwkJICAgKHRlc3QtPmZsYWdzICYgRVRIX1RFU1RfRkxfT0ZGTElORSkgPyAib2ZmIiA6ICJvbiIpOwogCiAgZmFpbDI6CiAgZmFpbDE6CkBAIC02MjIsNjggKzYyMCw2IEBACiAJcmV0dXJuIG1kaW80NV9ud2F5X3Jlc3RhcnQoJmVmeC0+bWRpbyk7CiB9CiAKLXN0YXRpYyB1MzIgZWZ4X2V0aHRvb2xfZ2V0X2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpCi17Ci0Jc3RydWN0IGVmeF9uaWMgKmVmeCA9IG5ldGRldl9wcml2KG5ldF9kZXYpOwotCi0JcmV0dXJuIGVmeC0+bGlua19zdGF0ZS51cDsKLX0KLQotc3RhdGljIGludCBlZnhfZXRodG9vbF9nZXRfZWVwcm9tX2xlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldikKLXsKLQlzdHJ1Y3QgZWZ4X25pYyAqZWZ4ID0gbmV0ZGV2X3ByaXYobmV0X2Rldik7Ci0Jc3RydWN0IGVmeF9zcGlfZGV2aWNlICpzcGkgPSBlZngtPnNwaV9lZXByb207Ci0KLQlpZiAoIXNwaSkKLQkJcmV0dXJuIDA7Ci0JcmV0dXJuIG1pbihzcGktPnNpemUsIEVGWF9FRVBST01fQk9PVENPTkZJR19FTkQpIC0KLQkJbWluKHNwaS0+c2l6ZSwgRUZYX0VFUFJPTV9CT09UQ09ORklHX1NUQVJUKTsKLX0KLQotc3RhdGljIGludCBlZnhfZXRodG9vbF9nZXRfZWVwcm9tKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2LAotCQkJCSAgc3RydWN0IGV0aHRvb2xfZWVwcm9tICplZXByb20sIHU4ICpidWYpCi17Ci0Jc3RydWN0IGVmeF9uaWMgKmVmeCA9IG5ldGRldl9wcml2KG5ldF9kZXYpOwotCXN0cnVjdCBlZnhfc3BpX2RldmljZSAqc3BpID0gZWZ4LT5zcGlfZWVwcm9tOwotCXNpemVfdCBsZW47Ci0JaW50IHJjOwotCi0JcmMgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmVmeC0+c3BpX2xvY2spOwotCWlmIChyYykKLQkJcmV0dXJuIHJjOwotCXJjID0gZmFsY29uX3NwaV9yZWFkKGVmeCwgc3BpLAotCQkJICAgICBlZXByb20tPm9mZnNldCArIEVGWF9FRVBST01fQk9PVENPTkZJR19TVEFSVCwKLQkJCSAgICAgZWVwcm9tLT5sZW4sICZsZW4sIGJ1Zik7Ci0JbXV0ZXhfdW5sb2NrKCZlZngtPnNwaV9sb2NrKTsKLQotCWVlcHJvbS0+bWFnaWMgPSBFRlhfRVRIVE9PTF9FRVBST01fTUFHSUM7Ci0JZWVwcm9tLT5sZW4gPSBsZW47Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGVmeF9ldGh0b29sX3NldF9lZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYsCi0JCQkJICBzdHJ1Y3QgZXRodG9vbF9lZXByb20gKmVlcHJvbSwgdTggKmJ1ZikKLXsKLQlzdHJ1Y3QgZWZ4X25pYyAqZWZ4ID0gbmV0ZGV2X3ByaXYobmV0X2Rldik7Ci0Jc3RydWN0IGVmeF9zcGlfZGV2aWNlICpzcGkgPSBlZngtPnNwaV9lZXByb207Ci0Jc2l6ZV90IGxlbjsKLQlpbnQgcmM7Ci0KLQlpZiAoZWVwcm9tLT5tYWdpYyAhPSBFRlhfRVRIVE9PTF9FRVBST01fTUFHSUMpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmMgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmVmeC0+c3BpX2xvY2spOwotCWlmIChyYykKLQkJcmV0dXJuIHJjOwotCXJjID0gZmFsY29uX3NwaV93cml0ZShlZngsIHNwaSwKLQkJCSAgICAgIGVlcHJvbS0+b2Zmc2V0ICsgRUZYX0VFUFJPTV9CT09UQ09ORklHX1NUQVJULAotCQkJICAgICAgZWVwcm9tLT5sZW4sICZsZW4sIGJ1Zik7Ci0JbXV0ZXhfdW5sb2NrKCZlZngtPnNwaV9sb2NrKTsKLQotCWVlcHJvbS0+bGVuID0gbGVuOwotCXJldHVybiByYzsKLX0KLQogc3RhdGljIGludCBlZnhfZXRodG9vbF9nZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYsCiAJCQkJICAgIHN0cnVjdCBldGh0b29sX2NvYWxlc2NlICpjb2FsZXNjZSkKIHsKQEAgLTk3OCw2ICs5MTQsNyBAQAogCXN0cnVjdCBldGhoZHIgKm1hY19lbnRyeSA9ICZudHVwbGUtPmZzLmhfdS5ldGhlcl9zcGVjOwogCXN0cnVjdCBldGhoZHIgKm1hY19tYXNrID0gJm50dXBsZS0+ZnMubV91LmV0aGVyX3NwZWM7CiAJc3RydWN0IGVmeF9maWx0ZXJfc3BlYyBmaWx0ZXI7CisJaW50IHJjOwogCiAJLyogUmFuZ2UtY2hlY2sgYWN0aW9uICovCiAJaWYgKG50dXBsZS0+ZnMuYWN0aW9uIDwgRVRIVE9PTF9SWE5UVVBMRV9BQ1RJT05fQ0xFQVIgfHwKQEAgLTk4Nyw5ICs5MjQsMTYgQEAKIAlpZiAofm50dXBsZS0+ZnMuZGF0YV9tYXNrKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCWVmeF9maWx0ZXJfaW5pdF9yeCgmZmlsdGVyLCBFRlhfRklMVEVSX1BSSV9NQU5VQUwsIDAsCisJCQkgICAobnR1cGxlLT5mcy5hY3Rpb24gPT0gRVRIVE9PTF9SWE5UVVBMRV9BQ1RJT05fRFJPUCkgPworCQkJICAgMHhmZmYgOiBudHVwbGUtPmZzLmFjdGlvbik7CisKIAlzd2l0Y2ggKG50dXBsZS0+ZnMuZmxvd190eXBlKSB7CiAJY2FzZSBUQ1BfVjRfRkxPVzoKLQljYXNlIFVEUF9WNF9GTE9XOgorCWNhc2UgVURQX1Y0X0ZMT1c6IHsKKwkJdTggcHJvdG8gPSAobnR1cGxlLT5mcy5mbG93X3R5cGUgPT0gVENQX1Y0X0ZMT1cgPworCQkJICAgIElQUFJPVE9fVENQIDogSVBQUk9UT19VRFApOworCiAJCS8qIE11c3QgbWF0Y2ggYWxsIG9mIGRlc3RpbmF0aW9uLCAqLwogCQlpZiAoaXBfbWFzay0+aXA0ZHN0IHwgaXBfbWFzay0+cGRzdCkKIAkJCXJldHVybiAtRUlOVkFMOwpAQCAtMTAwMSw3ICs5NDUsMjIgQEAKIAkJLyogYW5kIG5vdGhpbmcgZWxzZSAqLwogCQlpZiAoKHU4KX5pcF9tYXNrLT50b3MgfCAodTE2KX5udHVwbGUtPmZzLnZsYW5fdGFnX21hc2spCiAJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAoIWlwX21hc2stPmlwNHNyYykKKwkJCXJjID0gZWZ4X2ZpbHRlcl9zZXRfaXB2NF9mdWxsKCZmaWx0ZXIsIHByb3RvLAorCQkJCQkJICAgICAgaXBfZW50cnktPmlwNGRzdCwKKwkJCQkJCSAgICAgIGlwX2VudHJ5LT5wZHN0LAorCQkJCQkJICAgICAgaXBfZW50cnktPmlwNHNyYywKKwkJCQkJCSAgICAgIGlwX2VudHJ5LT5wc3JjKTsKKwkJZWxzZQorCQkJcmMgPSBlZnhfZmlsdGVyX3NldF9pcHY0X2xvY2FsKCZmaWx0ZXIsIHByb3RvLAorCQkJCQkJICAgICAgIGlwX2VudHJ5LT5pcDRkc3QsCisJCQkJCQkgICAgICAgaXBfZW50cnktPnBkc3QpOworCQlpZiAocmMpCisJCQlyZXR1cm4gcmM7CiAJCWJyZWFrOworCX0KKwogCWNhc2UgRVRIRVJfRkxPVzoKIAkJLyogTXVzdCBtYXRjaCBhbGwgb2YgZGVzdGluYXRpb24sICovCiAJCWlmICghaXNfemVyb19ldGhlcl9hZGRyKG1hY19tYXNrLT5oX2Rlc3QpKQpAQCAtMTAxNCw1OCArOTczLDI0IEBACiAJCWlmICghaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIobWFjX21hc2stPmhfc291cmNlKSB8fAogCQkgICAgbWFjX21hc2stPmhfcHJvdG8gIT0gaHRvbnMoMHhmZmZmKSkKIAkJCXJldHVybiAtRUlOVkFMOworCisJCXJjID0gZWZ4X2ZpbHRlcl9zZXRfZXRoX2xvY2FsKAorCQkJJmZpbHRlciwKKwkJCShudHVwbGUtPmZzLnZsYW5fdGFnX21hc2sgPT0gMHhmMDAwKSA/CisJCQludHVwbGUtPmZzLnZsYW5fdGFnIDogRUZYX0ZJTFRFUl9WSURfVU5TUEVDLAorCQkJbWFjX2VudHJ5LT5oX2Rlc3QpOworCQlpZiAocmMpCisJCQlyZXR1cm4gcmM7CiAJCWJyZWFrOworCiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JZmlsdGVyLnByaW9yaXR5ID0gRUZYX0ZJTFRFUl9QUklfTUFOVUFMOwotCWZpbHRlci5mbGFncyA9IDA7Ci0KLQlzd2l0Y2ggKG50dXBsZS0+ZnMuZmxvd190eXBlKSB7Ci0JY2FzZSBUQ1BfVjRfRkxPVzoKLQkJaWYgKCFpcF9tYXNrLT5pcDRzcmMpCi0JCQllZnhfZmlsdGVyX3NldF9yeF90Y3BfZnVsbCgmZmlsdGVyLAotCQkJCQkJICAgaHRvbmwoaXBfZW50cnktPmlwNHNyYyksCi0JCQkJCQkgICBodG9ucyhpcF9lbnRyeS0+cHNyYyksCi0JCQkJCQkgICBodG9ubChpcF9lbnRyeS0+aXA0ZHN0KSwKLQkJCQkJCSAgIGh0b25zKGlwX2VudHJ5LT5wZHN0KSk7Ci0JCWVsc2UKLQkJCWVmeF9maWx0ZXJfc2V0X3J4X3RjcF93aWxkKCZmaWx0ZXIsCi0JCQkJCQkgICBodG9ubChpcF9lbnRyeS0+aXA0ZHN0KSwKLQkJCQkJCSAgIGh0b25zKGlwX2VudHJ5LT5wZHN0KSk7Ci0JCWJyZWFrOwotCWNhc2UgVURQX1Y0X0ZMT1c6Ci0JCWlmICghaXBfbWFzay0+aXA0c3JjKQotCQkJZWZ4X2ZpbHRlcl9zZXRfcnhfdWRwX2Z1bGwoJmZpbHRlciwKLQkJCQkJCSAgIGh0b25sKGlwX2VudHJ5LT5pcDRzcmMpLAotCQkJCQkJICAgaHRvbnMoaXBfZW50cnktPnBzcmMpLAotCQkJCQkJICAgaHRvbmwoaXBfZW50cnktPmlwNGRzdCksCi0JCQkJCQkgICBodG9ucyhpcF9lbnRyeS0+cGRzdCkpOwotCQllbHNlCi0JCQllZnhfZmlsdGVyX3NldF9yeF91ZHBfd2lsZCgmZmlsdGVyLAotCQkJCQkJICAgaHRvbmwoaXBfZW50cnktPmlwNGRzdCksCi0JCQkJCQkgICBodG9ucyhpcF9lbnRyeS0+cGRzdCkpOwotCQlicmVhazsKLQljYXNlIEVUSEVSX0ZMT1c6Ci0JCWlmIChudHVwbGUtPmZzLnZsYW5fdGFnX21hc2sgPT0gMHhmMDAwKQotCQkJZWZ4X2ZpbHRlcl9zZXRfcnhfbWFjX2Z1bGwoJmZpbHRlciwKLQkJCQkJCSAgIG50dXBsZS0+ZnMudmxhbl90YWcgJiAweGZmZiwKLQkJCQkJCSAgIG1hY19lbnRyeS0+aF9kZXN0KTsKLQkJZWxzZQotCQkJZWZ4X2ZpbHRlcl9zZXRfcnhfbWFjX3dpbGQoJmZpbHRlciwgbWFjX2VudHJ5LT5oX2Rlc3QpOwotCQlicmVhazsKLQl9Ci0KLQlpZiAobnR1cGxlLT5mcy5hY3Rpb24gPT0gRVRIVE9PTF9SWE5UVVBMRV9BQ1RJT05fQ0xFQVIpIHsKKwlpZiAobnR1cGxlLT5mcy5hY3Rpb24gPT0gRVRIVE9PTF9SWE5UVVBMRV9BQ1RJT05fQ0xFQVIpCiAJCXJldHVybiBlZnhfZmlsdGVyX3JlbW92ZV9maWx0ZXIoZWZ4LCAmZmlsdGVyKTsKLQl9IGVsc2UgewotCQlpZiAobnR1cGxlLT5mcy5hY3Rpb24gPT0gRVRIVE9PTF9SWE5UVVBMRV9BQ1RJT05fRFJPUCkKLQkJCWZpbHRlci5kbWFxX2lkID0gMHhmZmY7Ci0JCWVsc2UKLQkJCWZpbHRlci5kbWFxX2lkID0gbnR1cGxlLT5mcy5hY3Rpb247CisJZWxzZQogCQlyZXR1cm4gZWZ4X2ZpbHRlcl9pbnNlcnRfZmlsdGVyKGVmeCwgJmZpbHRlciwgdHJ1ZSk7Ci0JfQogfQogCiBzdGF0aWMgaW50IGVmeF9ldGh0b29sX2dldF9yeGZoX2luZGlyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2LApAQCAtMTExNSwxMCArMTA0MCw3IEBACiAJLmdldF9tc2dsZXZlbAkJPSBlZnhfZXRodG9vbF9nZXRfbXNnbGV2ZWwsCiAJLnNldF9tc2dsZXZlbAkJPSBlZnhfZXRodG9vbF9zZXRfbXNnbGV2ZWwsCiAJLm53YXlfcmVzZXQJCT0gZWZ4X2V0aHRvb2xfbndheV9yZXNldCwKLQkuZ2V0X2xpbmsJCT0gZWZ4X2V0aHRvb2xfZ2V0X2xpbmssCi0JLmdldF9lZXByb21fbGVuCQk9IGVmeF9ldGh0b29sX2dldF9lZXByb21fbGVuLAotCS5nZXRfZWVwcm9tCQk9IGVmeF9ldGh0b29sX2dldF9lZXByb20sCi0JLnNldF9lZXByb20JCT0gZWZ4X2V0aHRvb2xfc2V0X2VlcHJvbSwKKwkuZ2V0X2xpbmsJCT0gZXRodG9vbF9vcF9nZXRfbGluaywKIAkuZ2V0X2NvYWxlc2NlCQk9IGVmeF9ldGh0b29sX2dldF9jb2FsZXNjZSwKIAkuc2V0X2NvYWxlc2NlCQk9IGVmeF9ldGh0b29sX3NldF9jb2FsZXNjZSwKIAkuZ2V0X3JpbmdwYXJhbQkJPSBlZnhfZXRodG9vbF9nZXRfcmluZ3BhcmFtLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL2ZhbGNvbi5jIGIvZHJpdmVycy9uZXQvc2ZjL2ZhbGNvbi5jCmluZGV4IDI2NzAxOWIuLjcwZTRmN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9mYWxjb24uYworKysgYi9kcml2ZXJzL25ldC9zZmMvZmFsY29uLmMKQEAgLTI0LDcgKzI0LDYgQEAKICNpbmNsdWRlICJuaWMuaCIKICNpbmNsdWRlICJyZWdzLmgiCiAjaW5jbHVkZSAiaW8uaCIKLSNpbmNsdWRlICJtZGlvXzEwZy5oIgogI2luY2x1ZGUgInBoeS5oIgogI2luY2x1ZGUgIndvcmthcm91bmRzLmgiCiAKQEAgLTI1NSw3ICsyNTQsNiBAQAogCS8qIElucHV0IHZhbGlkYXRpb24gKi8KIAlpZiAobGVuID4gRkFMQ09OX1NQSV9NQVhfTEVOKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlCVUdfT04oIW11dGV4X2lzX2xvY2tlZCgmZWZ4LT5zcGlfbG9jaykpOwogCiAJLyogQ2hlY2sgdGhhdCBwcmV2aW91cyBjb21tYW5kIGlzIG5vdCBzdGlsbCBydW5uaW5nICovCiAJcmMgPSBmYWxjb25fc3BpX3BvbGwoZWZ4KTsKQEAgLTcxOSw2ICs3MTcsNyBAQAogCQkJICAgICBpbnQgcHJ0YWQsIGludCBkZXZhZCwgdTE2IGFkZHIsIHUxNiB2YWx1ZSkKIHsKIAlzdHJ1Y3QgZWZ4X25pYyAqZWZ4ID0gbmV0ZGV2X3ByaXYobmV0X2Rldik7CisJc3RydWN0IGZhbGNvbl9uaWNfZGF0YSAqbmljX2RhdGEgPSBlZngtPm5pY19kYXRhOwogCWVmeF9vd29yZF90IHJlZzsKIAlpbnQgcmM7CiAKQEAgLTcyNiw3ICs3MjUsNyBAQAogCQkgICAid3JpdGluZyBNRElPICVkIHJlZ2lzdGVyICVkLiVkIHdpdGggMHglMDR4XG4iLAogCQkgICAgcHJ0YWQsIGRldmFkLCBhZGRyLCB2YWx1ZSk7CiAKLQltdXRleF9sb2NrKCZlZngtPm1kaW9fbG9jayk7CisJbXV0ZXhfbG9jaygmbmljX2RhdGEtPm1kaW9fbG9jayk7CiAKIAkvKiBDaGVjayBNRElPIG5vdCBjdXJyZW50bHkgYmVpbmcgYWNjZXNzZWQgKi8KIAlyYyA9IGZhbGNvbl9nbWlpX3dhaXQoZWZ4KTsKQEAgLTc2Miw3ICs3NjEsNyBAQAogCX0KIAogb3V0OgotCW11dGV4X3VubG9jaygmZWZ4LT5tZGlvX2xvY2spOworCW11dGV4X3VubG9jaygmbmljX2RhdGEtPm1kaW9fbG9jayk7CiAJcmV0dXJuIHJjOwogfQogCkBAIC03NzEsMTAgKzc3MCwxMSBAQAogCQkJICAgIGludCBwcnRhZCwgaW50IGRldmFkLCB1MTYgYWRkcikKIHsKIAlzdHJ1Y3QgZWZ4X25pYyAqZWZ4ID0gbmV0ZGV2X3ByaXYobmV0X2Rldik7CisJc3RydWN0IGZhbGNvbl9uaWNfZGF0YSAqbmljX2RhdGEgPSBlZngtPm5pY19kYXRhOwogCWVmeF9vd29yZF90IHJlZzsKIAlpbnQgcmM7CiAKLQltdXRleF9sb2NrKCZlZngtPm1kaW9fbG9jayk7CisJbXV0ZXhfbG9jaygmbmljX2RhdGEtPm1kaW9fbG9jayk7CiAKIAkvKiBDaGVjayBNRElPIG5vdCBjdXJyZW50bHkgYmVpbmcgYWNjZXNzZWQgKi8KIAlyYyA9IGZhbGNvbl9nbWlpX3dhaXQoZWZ4KTsKQEAgLTgxMyw3ICs4MTMsNyBAQAogCX0KIAogb3V0OgotCW11dGV4X3VubG9jaygmZWZ4LT5tZGlvX2xvY2spOworCW11dGV4X3VubG9jaygmbmljX2RhdGEtPm1kaW9fbG9jayk7CiAJcmV0dXJuIHJjOwogfQogCkBAIC04NDEsNiArODQxLDcgQEAKIAl9CiAKIAkvKiBGaWxsIG91dCBNRElPIHN0cnVjdHVyZSBhbmQgbG9vcGJhY2sgbW9kZXMgKi8KKwltdXRleF9pbml0KCZuaWNfZGF0YS0+bWRpb19sb2NrKTsKIAllZngtPm1kaW8ubWRpb19yZWFkID0gZmFsY29uX21kaW9fcmVhZDsKIAllZngtPm1kaW8ubWRpb193cml0ZSA9IGZhbGNvbl9tZGlvX3dyaXRlOwogCXJjID0gZWZ4LT5waHlfb3AtPnByb2JlKGVmeCk7CkBAIC04ODAsNiArODgxLDQxIEBACiAJZWZ4X25pY19mcmVlX2J1ZmZlcihlZngsICZlZngtPnN0YXRzX2J1ZmZlcik7CiB9CiAKKy8qIEdsb2JhbCBldmVudHMgYXJlIGJhc2ljYWxseSBQSFkgZXZlbnRzICovCitzdGF0aWMgYm9vbAorZmFsY29uX2hhbmRsZV9nbG9iYWxfZXZlbnQoc3RydWN0IGVmeF9jaGFubmVsICpjaGFubmVsLCBlZnhfcXdvcmRfdCAqZXZlbnQpCit7CisJc3RydWN0IGVmeF9uaWMgKmVmeCA9IGNoYW5uZWwtPmVmeDsKKwlzdHJ1Y3QgZmFsY29uX25pY19kYXRhICpuaWNfZGF0YSA9IGVmeC0+bmljX2RhdGE7CisKKwlpZiAoRUZYX1FXT1JEX0ZJRUxEKCpldmVudCwgRlNGX0FCX0dMQl9FVl9HX1BIWTBfSU5UUikgfHwKKwkgICAgRUZYX1FXT1JEX0ZJRUxEKCpldmVudCwgRlNGX0FCX0dMQl9FVl9YR19QSFkwX0lOVFIpIHx8CisJICAgIEVGWF9RV09SRF9GSUVMRCgqZXZlbnQsIEZTRl9BQl9HTEJfRVZfWEZQX1BIWTBfSU5UUikpCisJCS8qIElnbm9yZWQgKi8KKwkJcmV0dXJuIHRydWU7CisKKwlpZiAoKGVmeF9uaWNfcmV2KGVmeCkgPT0gRUZYX1JFVl9GQUxDT05fQjApICYmCisJICAgIEVGWF9RV09SRF9GSUVMRCgqZXZlbnQsIEZTRl9CQl9HTEJfRVZfWEdfTUdUX0lOVFIpKSB7CisJCW5pY19kYXRhLT54bWFjX3BvbGxfcmVxdWlyZWQgPSB0cnVlOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlpZiAoZWZ4X25pY19yZXYoZWZ4KSA8PSBFRlhfUkVWX0ZBTENPTl9BMSA/CisJICAgIEVGWF9RV09SRF9GSUVMRCgqZXZlbnQsIEZTRl9BQV9HTEJfRVZfUlhfUkVDT1ZFUlkpIDoKKwkgICAgRUZYX1FXT1JEX0ZJRUxEKCpldmVudCwgRlNGX0JCX0dMQl9FVl9SWF9SRUNPVkVSWSkpIHsKKwkJbmV0aWZfZXJyKGVmeCwgcnhfZXJyLCBlZngtPm5ldF9kZXYsCisJCQkgICJjaGFubmVsICVkIHNlZW4gZ2xvYmFsIFJYX1JFU0VUIGV2ZW50LiBSZXNldHRpbmcuXG4iLAorCQkJICBjaGFubmVsLT5jaGFubmVsKTsKKworCQlhdG9taWNfaW5jKCZlZngtPnJ4X3Jlc2V0KTsKKwkJZWZ4X3NjaGVkdWxlX3Jlc2V0KGVmeCwgRUZYX1dPUktBUk9VTkRfNjU1NShlZngpID8KKwkJCQkgICBSRVNFVF9UWVBFX1JYX1JFQ09WRVJZIDogUkVTRVRfVFlQRV9ESVNBQkxFKTsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBGYWxjb24gdGVzdCBjb2RlCkBAIC04ODksNiArOTI1LDcgQEAKIHN0YXRpYyBpbnQKIGZhbGNvbl9yZWFkX252cmFtKHN0cnVjdCBlZnhfbmljICplZngsIHN0cnVjdCBmYWxjb25fbnZjb25maWcgKm52Y29uZmlnX291dCkKIHsKKwlzdHJ1Y3QgZmFsY29uX25pY19kYXRhICpuaWNfZGF0YSA9IGVmeC0+bmljX2RhdGE7CiAJc3RydWN0IGZhbGNvbl9udmNvbmZpZyAqbnZjb25maWc7CiAJc3RydWN0IGVmeF9zcGlfZGV2aWNlICpzcGk7CiAJdm9pZCAqcmVnaW9uOwpAQCAtODk2LDggKzkzMywxMSBAQAogCV9fbGUxNiAqd29yZCwgKmxpbWl0OwogCXUzMiBjc3VtOwogCi0Jc3BpID0gZWZ4LT5zcGlfZmxhc2ggPyBlZngtPnNwaV9mbGFzaCA6IGVmeC0+c3BpX2VlcHJvbTsKLQlpZiAoIXNwaSkKKwlpZiAoZWZ4X3NwaV9wcmVzZW50KCZuaWNfZGF0YS0+c3BpX2ZsYXNoKSkKKwkJc3BpID0gJm5pY19kYXRhLT5zcGlfZmxhc2g7CisJZWxzZSBpZiAoZWZ4X3NwaV9wcmVzZW50KCZuaWNfZGF0YS0+c3BpX2VlcHJvbSkpCisJCXNwaSA9ICZuaWNfZGF0YS0+c3BpX2VlcHJvbTsKKwllbHNlCiAJCXJldHVybiAtRUlOVkFMOwogCiAJcmVnaW9uID0ga21hbGxvYyhGQUxDT05fTlZDT05GSUdfRU5ELCBHRlBfS0VSTkVMKTsKQEAgLTkwNSwxMiArOTQ1LDEzIEBACiAJCXJldHVybiAtRU5PTUVNOwogCW52Y29uZmlnID0gcmVnaW9uICsgRkFMQ09OX05WQ09ORklHX09GRlNFVDsKIAotCW11dGV4X2xvY2soJmVmeC0+c3BpX2xvY2spOworCW11dGV4X2xvY2soJm5pY19kYXRhLT5zcGlfbG9jayk7CiAJcmMgPSBmYWxjb25fc3BpX3JlYWQoZWZ4LCBzcGksIDAsIEZBTENPTl9OVkNPTkZJR19FTkQsIE5VTEwsIHJlZ2lvbik7Ci0JbXV0ZXhfdW5sb2NrKCZlZngtPnNwaV9sb2NrKTsKKwltdXRleF91bmxvY2soJm5pY19kYXRhLT5zcGlfbG9jayk7CiAJaWYgKHJjKSB7CiAJCW5ldGlmX2VycihlZngsIGh3LCBlZngtPm5ldF9kZXYsICJGYWlsZWQgdG8gcmVhZCAlc1xuIiwKLQkJCSAgZWZ4LT5zcGlfZmxhc2ggPyAiZmxhc2giIDogIkVFUFJPTSIpOworCQkJICBlZnhfc3BpX3ByZXNlbnQoJm5pY19kYXRhLT5zcGlfZmxhc2gpID8KKwkJCSAgImZsYXNoIiA6ICJFRVBST00iKTsKIAkJcmMgPSAtRUlPOwogCQlnb3RvIG91dDsKIAl9CkBAIC0xMDEyLDcgKzEwNTMsNyBAQAogCiAvKiBSZXNldHMgTklDIHRvIGtub3duIHN0YXRlLiAgVGhpcyByb3V0aW5lIG11c3QgYmUgY2FsbGVkIGluIHByb2Nlc3MKICAqIGNvbnRleHQgYW5kIGlzIGFsbG93ZWQgdG8gc2xlZXAuICovCi1zdGF0aWMgaW50IGZhbGNvbl9yZXNldF9odyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCBlbnVtIHJlc2V0X3R5cGUgbWV0aG9kKQorc3RhdGljIGludCBfX2ZhbGNvbl9yZXNldF9odyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCBlbnVtIHJlc2V0X3R5cGUgbWV0aG9kKQogewogCXN0cnVjdCBmYWxjb25fbmljX2RhdGEgKm5pY19kYXRhID0gZWZ4LT5uaWNfZGF0YTsKIAllZnhfb3dvcmRfdCBnbGJfY3RsX3JlZ19rZXI7CkBAIC0xMTA4LDYgKzExNDksMTggQEAKIAlyZXR1cm4gcmM7CiB9CiAKK3N0YXRpYyBpbnQgZmFsY29uX3Jlc2V0X2h3KHN0cnVjdCBlZnhfbmljICplZngsIGVudW0gcmVzZXRfdHlwZSBtZXRob2QpCit7CisJc3RydWN0IGZhbGNvbl9uaWNfZGF0YSAqbmljX2RhdGEgPSBlZngtPm5pY19kYXRhOworCWludCByYzsKKworCW11dGV4X2xvY2soJm5pY19kYXRhLT5zcGlfbG9jayk7CisJcmMgPSBfX2ZhbGNvbl9yZXNldF9odyhlZngsIG1ldGhvZCk7CisJbXV0ZXhfdW5sb2NrKCZuaWNfZGF0YS0+c3BpX2xvY2spOworCisJcmV0dXJuIHJjOworfQorCiBzdGF0aWMgdm9pZCBmYWxjb25fbW9uaXRvcihzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQogewogCWJvb2wgbGlua19jaGFuZ2VkOwpAQCAtMTE4OSwxNiArMTI0MiwxMSBAQAogCXJldHVybiAtRVRJTUVET1VUOwogfQogCi1zdGF0aWMgaW50IGZhbGNvbl9zcGlfZGV2aWNlX2luaXQoc3RydWN0IGVmeF9uaWMgKmVmeCwKLQkJCQkgIHN0cnVjdCBlZnhfc3BpX2RldmljZSAqKnNwaV9kZXZpY2VfcmV0LAorc3RhdGljIHZvaWQgZmFsY29uX3NwaV9kZXZpY2VfaW5pdChzdHJ1Y3QgZWZ4X25pYyAqZWZ4LAorCQkJCSAgc3RydWN0IGVmeF9zcGlfZGV2aWNlICpzcGlfZGV2aWNlLAogCQkJCSAgdW5zaWduZWQgaW50IGRldmljZV9pZCwgdTMyIGRldmljZV90eXBlKQogewotCXN0cnVjdCBlZnhfc3BpX2RldmljZSAqc3BpX2RldmljZTsKLQogCWlmIChkZXZpY2VfdHlwZSAhPSAwKSB7Ci0JCXNwaV9kZXZpY2UgPSBremFsbG9jKHNpemVvZigqc3BpX2RldmljZSksIEdGUF9LRVJORUwpOwotCQlpZiAoIXNwaV9kZXZpY2UpCi0JCQlyZXR1cm4gLUVOT01FTTsKIAkJc3BpX2RldmljZS0+ZGV2aWNlX2lkID0gZGV2aWNlX2lkOwogCQlzcGlfZGV2aWNlLT5zaXplID0KIAkJCTEgPDwgU1BJX0RFVl9UWVBFX0ZJRUxEKGRldmljZV90eXBlLCBTUElfREVWX1RZUEVfU0laRSk7CkBAIC0xMjE1LDI3ICsxMjYzLDE1IEBACiAJCQkxIDw8IFNQSV9ERVZfVFlQRV9GSUVMRChkZXZpY2VfdHlwZSwKIAkJCQkJCVNQSV9ERVZfVFlQRV9CTE9DS19TSVpFKTsKIAl9IGVsc2UgewotCQlzcGlfZGV2aWNlID0gTlVMTDsKKwkJc3BpX2RldmljZS0+c2l6ZSA9IDA7CiAJfQotCi0Ja2ZyZWUoKnNwaV9kZXZpY2VfcmV0KTsKLQkqc3BpX2RldmljZV9yZXQgPSBzcGlfZGV2aWNlOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBmYWxjb25fcmVtb3ZlX3NwaV9kZXZpY2VzKHN0cnVjdCBlZnhfbmljICplZngpCi17Ci0Ja2ZyZWUoZWZ4LT5zcGlfZWVwcm9tKTsKLQllZngtPnNwaV9lZXByb20gPSBOVUxMOwotCWtmcmVlKGVmeC0+c3BpX2ZsYXNoKTsKLQllZngtPnNwaV9mbGFzaCA9IE5VTEw7CiB9CiAKIC8qIEV4dHJhY3Qgbm9uLXZvbGF0aWxlIGNvbmZpZ3VyYXRpb24gKi8KIHN0YXRpYyBpbnQgZmFsY29uX3Byb2JlX252Y29uZmlnKHN0cnVjdCBlZnhfbmljICplZngpCiB7CisJc3RydWN0IGZhbGNvbl9uaWNfZGF0YSAqbmljX2RhdGEgPSBlZngtPm5pY19kYXRhOwogCXN0cnVjdCBmYWxjb25fbnZjb25maWcgKm52Y29uZmlnOwotCWludCBib2FyZF9yZXY7CiAJaW50IHJjOwogCiAJbnZjb25maWcgPSBrbWFsbG9jKHNpemVvZigqbnZjb25maWcpLCBHRlBfS0VSTkVMKTsKQEAgLTEyNDMsNTUgKzEyNzksMzIgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlyYyA9IGZhbGNvbl9yZWFkX252cmFtKGVmeCwgbnZjb25maWcpOwotCWlmIChyYyA9PSAtRUlOVkFMKSB7Ci0JCW5ldGlmX2VycihlZngsIHByb2JlLCBlZngtPm5ldF9kZXYsCi0JCQkgICJOVlJBTSBpcyBpbnZhbGlkIHRoZXJlZm9yZSB1c2luZyBkZWZhdWx0c1xuIik7Ci0JCWVmeC0+cGh5X3R5cGUgPSBQSFlfVFlQRV9OT05FOwotCQllZngtPm1kaW8ucHJ0YWQgPSBNRElPX1BSVEFEX05PTkU7Ci0JCWJvYXJkX3JldiA9IDA7Ci0JCXJjID0gMDsKLQl9IGVsc2UgaWYgKHJjKSB7Ci0JCWdvdG8gZmFpbDE7Ci0JfSBlbHNlIHsKLQkJc3RydWN0IGZhbGNvbl9udmNvbmZpZ19ib2FyZF92MiAqdjIgPSAmbnZjb25maWctPmJvYXJkX3YyOwotCQlzdHJ1Y3QgZmFsY29uX252Y29uZmlnX2JvYXJkX3YzICp2MyA9ICZudmNvbmZpZy0+Ym9hcmRfdjM7CisJaWYgKHJjKQorCQlnb3RvIG91dDsKIAotCQllZngtPnBoeV90eXBlID0gdjItPnBvcnQwX3BoeV90eXBlOwotCQllZngtPm1kaW8ucHJ0YWQgPSB2Mi0+cG9ydDBfcGh5X2FkZHI7Ci0JCWJvYXJkX3JldiA9IGxlMTZfdG9fY3B1KHYyLT5ib2FyZF9yZXZpc2lvbik7CisJZWZ4LT5waHlfdHlwZSA9IG52Y29uZmlnLT5ib2FyZF92Mi5wb3J0MF9waHlfdHlwZTsKKwllZngtPm1kaW8ucHJ0YWQgPSBudmNvbmZpZy0+Ym9hcmRfdjIucG9ydDBfcGh5X2FkZHI7CiAKLQkJaWYgKGxlMTZfdG9fY3B1KG52Y29uZmlnLT5ib2FyZF9zdHJ1Y3RfdmVyKSA+PSAzKSB7Ci0JCQlyYyA9IGZhbGNvbl9zcGlfZGV2aWNlX2luaXQoCi0JCQkJZWZ4LCAmZWZ4LT5zcGlfZmxhc2gsIEZGRV9BQl9TUElfREVWSUNFX0ZMQVNILAotCQkJCWxlMzJfdG9fY3B1KHYzLT5zcGlfZGV2aWNlX3R5cGUKLQkJCQkJICAgIFtGRkVfQUJfU1BJX0RFVklDRV9GTEFTSF0pKTsKLQkJCWlmIChyYykKLQkJCQlnb3RvIGZhaWwyOwotCQkJcmMgPSBmYWxjb25fc3BpX2RldmljZV9pbml0KAotCQkJCWVmeCwgJmVmeC0+c3BpX2VlcHJvbSwgRkZFX0FCX1NQSV9ERVZJQ0VfRUVQUk9NLAotCQkJCWxlMzJfdG9fY3B1KHYzLT5zcGlfZGV2aWNlX3R5cGUKLQkJCQkJICAgIFtGRkVfQUJfU1BJX0RFVklDRV9FRVBST01dKSk7Ci0JCQlpZiAocmMpCi0JCQkJZ290byBmYWlsMjsKLQkJfQorCWlmIChsZTE2X3RvX2NwdShudmNvbmZpZy0+Ym9hcmRfc3RydWN0X3ZlcikgPj0gMykgeworCQlmYWxjb25fc3BpX2RldmljZV9pbml0KAorCQkJZWZ4LCAmbmljX2RhdGEtPnNwaV9mbGFzaCwgRkZFX0FCX1NQSV9ERVZJQ0VfRkxBU0gsCisJCQlsZTMyX3RvX2NwdShudmNvbmZpZy0+Ym9hcmRfdjMKKwkJCQkgICAgLnNwaV9kZXZpY2VfdHlwZVtGRkVfQUJfU1BJX0RFVklDRV9GTEFTSF0pKTsKKwkJZmFsY29uX3NwaV9kZXZpY2VfaW5pdCgKKwkJCWVmeCwgJm5pY19kYXRhLT5zcGlfZWVwcm9tLCBGRkVfQUJfU1BJX0RFVklDRV9FRVBST00sCisJCQlsZTMyX3RvX2NwdShudmNvbmZpZy0+Ym9hcmRfdjMKKwkJCQkgICAgLnNwaV9kZXZpY2VfdHlwZVtGRkVfQUJfU1BJX0RFVklDRV9FRVBST01dKSk7CiAJfQogCiAJLyogUmVhZCB0aGUgTUFDIGFkZHJlc3NlcyAqLwotCW1lbWNweShlZngtPm1hY19hZGRyZXNzLCBudmNvbmZpZy0+bWFjX2FkZHJlc3NbMF0sIEVUSF9BTEVOKTsKKwltZW1jcHkoZWZ4LT5uZXRfZGV2LT5wZXJtX2FkZHIsIG52Y29uZmlnLT5tYWNfYWRkcmVzc1swXSwgRVRIX0FMRU4pOwogCiAJbmV0aWZfZGJnKGVmeCwgcHJvYmUsIGVmeC0+bmV0X2RldiwgIlBIWSBpcyAlZCBwaHlfaWQgJWRcbiIsCiAJCSAgZWZ4LT5waHlfdHlwZSwgZWZ4LT5tZGlvLnBydGFkKTsKIAotCXJjID0gZmFsY29uX3Byb2JlX2JvYXJkKGVmeCwgYm9hcmRfcmV2KTsKLQlpZiAocmMpCi0JCWdvdG8gZmFpbDI7Ci0KLQlrZnJlZShudmNvbmZpZyk7Ci0JcmV0dXJuIDA7Ci0KLSBmYWlsMjoKLQlmYWxjb25fcmVtb3ZlX3NwaV9kZXZpY2VzKGVmeCk7Ci0gZmFpbDE6CisJcmMgPSBmYWxjb25fcHJvYmVfYm9hcmQoZWZ4LAorCQkJCWxlMTZfdG9fY3B1KG52Y29uZmlnLT5ib2FyZF92Mi5ib2FyZF9yZXZpc2lvbikpOworb3V0OgogCWtmcmVlKG52Y29uZmlnKTsKIAlyZXR1cm4gcmM7CiB9CkBAIC0xMjk5LDYgKzEzMTIsNyBAQAogLyogUHJvYmUgYWxsIFNQSSBkZXZpY2VzIG9uIHRoZSBOSUMgKi8KIHN0YXRpYyB2b2lkIGZhbGNvbl9wcm9iZV9zcGlfZGV2aWNlcyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQogeworCXN0cnVjdCBmYWxjb25fbmljX2RhdGEgKm5pY19kYXRhID0gZWZ4LT5uaWNfZGF0YTsKIAllZnhfb3dvcmRfdCBuaWNfc3RhdCwgZ3Bpb19jdGwsIGVlX3ZwZF9jZmc7CiAJaW50IGJvb3RfZGV2OwogCkBAIC0xMzI3LDEyICsxMzQxLDE0IEBACiAJCWVmeF93cml0ZW8oZWZ4LCAmZWVfdnBkX2NmZywgRlJfQUJfRUVfVlBEX0NGRzApOwogCX0KIAorCW11dGV4X2luaXQoJm5pY19kYXRhLT5zcGlfbG9jayk7CisKIAlpZiAoYm9vdF9kZXYgPT0gRkZFX0FCX1NQSV9ERVZJQ0VfRkxBU0gpCi0JCWZhbGNvbl9zcGlfZGV2aWNlX2luaXQoZWZ4LCAmZWZ4LT5zcGlfZmxhc2gsCisJCWZhbGNvbl9zcGlfZGV2aWNlX2luaXQoZWZ4LCAmbmljX2RhdGEtPnNwaV9mbGFzaCwKIAkJCQkgICAgICAgRkZFX0FCX1NQSV9ERVZJQ0VfRkxBU0gsCiAJCQkJICAgICAgIGRlZmF1bHRfZmxhc2hfdHlwZSk7CiAJaWYgKGJvb3RfZGV2ID09IEZGRV9BQl9TUElfREVWSUNFX0VFUFJPTSkKLQkJZmFsY29uX3NwaV9kZXZpY2VfaW5pdChlZngsICZlZngtPnNwaV9lZXByb20sCisJCWZhbGNvbl9zcGlfZGV2aWNlX2luaXQoZWZ4LCAmbmljX2RhdGEtPnNwaV9lZXByb20sCiAJCQkJICAgICAgIEZGRV9BQl9TUElfREVWSUNFX0VFUFJPTSwKIAkJCQkgICAgICAgbGFyZ2VfZWVwcm9tX3R5cGUpOwogfQpAQCAtMTM5Nyw3ICsxNDEzLDcgQEAKIAl9CiAKIAkvKiBOb3cgd2UgY2FuIHJlc2V0IHRoZSBOSUMgKi8KLQlyYyA9IGZhbGNvbl9yZXNldF9odyhlZngsIFJFU0VUX1RZUEVfQUxMKTsKKwlyYyA9IF9fZmFsY29uX3Jlc2V0X2h3KGVmeCwgUkVTRVRfVFlQRV9BTEwpOwogCWlmIChyYykgewogCQluZXRpZl9lcnIoZWZ4LCBwcm9iZSwgZWZ4LT5uZXRfZGV2LCAiZmFpbGVkIHRvIHJlc2V0IE5JQ1xuIik7CiAJCWdvdG8gZmFpbDM7CkBAIC0xNDE5LDggKzE0MzUsMTEgQEAKIAogCS8qIFJlYWQgaW4gdGhlIG5vbi12b2xhdGlsZSBjb25maWd1cmF0aW9uICovCiAJcmMgPSBmYWxjb25fcHJvYmVfbnZjb25maWcoZWZ4KTsKLQlpZiAocmMpCisJaWYgKHJjKSB7CisJCWlmIChyYyA9PSAtRUlOVkFMKQorCQkJbmV0aWZfZXJyKGVmeCwgcHJvYmUsIGVmeC0+bmV0X2RldiwgIk5WUkFNIGlzIGludmFsaWRcbiIpOwogCQlnb3RvIGZhaWw1OworCX0KIAogCS8qIEluaXRpYWxpc2UgSTJDIGFkYXB0ZXIgKi8KIAlib2FyZCA9IGZhbGNvbl9ib2FyZChlZngpOwpAQCAtMTQ1Miw3ICsxNDcxLDYgQEAKIAlCVUdfT04oaTJjX2RlbF9hZGFwdGVyKCZib2FyZC0+aTJjX2FkYXApKTsKIAltZW1zZXQoJmJvYXJkLT5pMmNfYWRhcCwgMCwgc2l6ZW9mKGJvYXJkLT5pMmNfYWRhcCkpOwogIGZhaWw1OgotCWZhbGNvbl9yZW1vdmVfc3BpX2RldmljZXMoZWZ4KTsKIAllZnhfbmljX2ZyZWVfYnVmZmVyKGVmeCwgJmVmeC0+aXJxX3N0YXR1cyk7CiAgZmFpbDQ6CiAgZmFpbDM6CkBAIC0xNjA2LDEwICsxNjI0LDkgQEAKIAlCVUdfT04ocmMpOwogCW1lbXNldCgmYm9hcmQtPmkyY19hZGFwLCAwLCBzaXplb2YoYm9hcmQtPmkyY19hZGFwKSk7CiAKLQlmYWxjb25fcmVtb3ZlX3NwaV9kZXZpY2VzKGVmeCk7CiAJZWZ4X25pY19mcmVlX2J1ZmZlcihlZngsICZlZngtPmlycV9zdGF0dXMpOwogCi0JZmFsY29uX3Jlc2V0X2h3KGVmeCwgUkVTRVRfVFlQRV9BTEwpOworCV9fZmFsY29uX3Jlc2V0X2h3KGVmeCwgUkVTRVRfVFlQRV9BTEwpOwogCiAJLyogUmVsZWFzZSB0aGUgc2Vjb25kIGZ1bmN0aW9uIGFmdGVyIHRoZSByZXNldCAqLwogCWlmIChuaWNfZGF0YS0+cGNpX2RldjIpIHsKQEAgLTE3MjAsNiArMTczNyw3IEBACiAJLnJlc2V0ID0gZmFsY29uX3Jlc2V0X2h3LAogCS5wcm9iZV9wb3J0ID0gZmFsY29uX3Byb2JlX3BvcnQsCiAJLnJlbW92ZV9wb3J0ID0gZmFsY29uX3JlbW92ZV9wb3J0LAorCS5oYW5kbGVfZ2xvYmFsX2V2ZW50ID0gZmFsY29uX2hhbmRsZV9nbG9iYWxfZXZlbnQsCiAJLnByZXBhcmVfZmx1c2ggPSBmYWxjb25fcHJlcGFyZV9mbHVzaCwKIAkudXBkYXRlX3N0YXRzID0gZmFsY29uX3VwZGF0ZV9uaWNfc3RhdHMsCiAJLnN0YXJ0X3N0YXRzID0gZmFsY29uX3N0YXJ0X25pY19zdGF0cywKQEAgLTE3NjAsNiArMTc3OCw3IEBACiAJLnJlc2V0ID0gZmFsY29uX3Jlc2V0X2h3LAogCS5wcm9iZV9wb3J0ID0gZmFsY29uX3Byb2JlX3BvcnQsCiAJLnJlbW92ZV9wb3J0ID0gZmFsY29uX3JlbW92ZV9wb3J0LAorCS5oYW5kbGVfZ2xvYmFsX2V2ZW50ID0gZmFsY29uX2hhbmRsZV9nbG9iYWxfZXZlbnQsCiAJLnByZXBhcmVfZmx1c2ggPSBmYWxjb25fcHJlcGFyZV9mbHVzaCwKIAkudXBkYXRlX3N0YXRzID0gZmFsY29uX3VwZGF0ZV9uaWNfc3RhdHMsCiAJLnN0YXJ0X3N0YXRzID0gZmFsY29uX3N0YXJ0X25pY19zdGF0cywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9mYWxjb25fYm9hcmRzLmMgYi9kcml2ZXJzL25ldC9zZmMvZmFsY29uX2JvYXJkcy5jCmluZGV4IGNmYzZhNWIuLjJkZDE2ZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9mYWxjb25fYm9hcmRzLmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL2ZhbGNvbl9ib2FyZHMuYwpAQCAtMTMsOCArMTMsNiBAQAogI2luY2x1ZGUgInBoeS5oIgogI2luY2x1ZGUgImVmeC5oIgogI2luY2x1ZGUgIm5pYy5oIgotI2luY2x1ZGUgInJlZ3MuaCIKLSNpbmNsdWRlICJpby5oIgogI2luY2x1ZGUgIndvcmthcm91bmRzLmgiCiAKIC8qIE1hY3JvcyBmb3IgdW5wYWNraW5nIHRoZSBib2FyZCByZXZpc2lvbiAqLwpAQCAtMzAsMTcgKzI4LDI4IEBACiAjZGVmaW5lIEZBTENPTl9CT0FSRF9TRk40MTEyRiAweDUyCiAKIC8qIEJvYXJkIHRlbXBlcmF0dXJlIGlzIGFib3V0IDE1wrBDIGFib3ZlIGFtYmllbnQgd2hlbiBhaXIgZmxvdyBpcwotICogbGltaXRlZC4gKi8KKyAqIGxpbWl0ZWQuICBUaGUgbWF4aW11bSBhY2NlcHRhYmxlIGFtYmllbnQgdGVtcGVyYXR1cmUgdmFyaWVzCisgKiBkZXBlbmRpbmcgb24gdGhlIFBIWSBzcGVjaWZpY2F0aW9ucyBidXQgdGhlIGNyaXRpY2FsIHRlbXBlcmF0dXJlCisgKiBhYm92ZSB3aGljaCB3ZSBzaG91bGQgc2h1dCBkb3duIHRvIGF2b2lkIGRhbWFnZSBpcyA4MMKwQy4gKi8KICNkZWZpbmUgRkFMQ09OX0JPQVJEX1RFTVBfQklBUwkxNQorI2RlZmluZSBGQUxDT05fQk9BUkRfVEVNUF9DUklUCSg4MCArIEZBTENPTl9CT0FSRF9URU1QX0JJQVMpCiAKIC8qIFNGQzQwMDAgZGF0YXNoZWV0IHNheXM6ICdUaGUgbWF4aW11bSBwZXJtaXR0ZWQganVuY3Rpb24gdGVtcGVyYXR1cmUKICAqIGlzIDEyNcKwQzsgdGhlIHRoZXJtYWwgZGVzaWduIG9mIHRoZSBlbnZpcm9ubWVudCBmb3IgdGhlIFNGQzQwMDAKICAqIHNob3VsZCBhaW0gdG8ga2VlcCB0aGlzIHdlbGwgYmVsb3cgMTAwwrBDLicgKi8KKyNkZWZpbmUgRkFMQ09OX0pVTkNfVEVNUF9NSU4JMAogI2RlZmluZSBGQUxDT05fSlVOQ19URU1QX01BWAk5MAorI2RlZmluZSBGQUxDT05fSlVOQ19URU1QX0NSSVQJMTI1CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogU3VwcG9ydCBmb3IgTE04NyBzZW5zb3IgY2hpcCB1c2VkIG9uIHNldmVyYWwgYm9hcmRzCiAgKi8KKyNkZWZpbmUgTE04N19SRUdfVEVNUF9IV19JTlRfTE9DSwkweDEzCisjZGVmaW5lIExNODdfUkVHX1RFTVBfSFdfRVhUX0xPQ0sJMHgxNAorI2RlZmluZSBMTTg3X1JFR19URU1QX0hXX0lOVAkJMHgxNworI2RlZmluZSBMTTg3X1JFR19URU1QX0hXX0VYVAkJMHgxOAorI2RlZmluZSBMTTg3X1JFR19URU1QX0VYVDEJCTB4MjYKKyNkZWZpbmUgTE04N19SRUdfVEVNUF9JTlQJCTB4MjcKICNkZWZpbmUgTE04N19SRUdfQUxBUk1TMQkJMHg0MQogI2RlZmluZSBMTTg3X1JFR19BTEFSTVMyCQkweDQyCiAjZGVmaW5lIExNODdfSU5fTElNSVRTKG5yLCBfbWluLCBfbWF4KQkJCVwKQEAgLTU3LDYgKzY2LDI3IEBACiAKICNpZiBkZWZpbmVkKENPTkZJR19TRU5TT1JTX0xNODcpIHx8IGRlZmluZWQoQ09ORklHX1NFTlNPUlNfTE04N19NT0RVTEUpCiAKK3N0YXRpYyBpbnQgZWZ4X3Bva2VfbG04NyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBjb25zdCB1OCAqcmVnX3ZhbHVlcykKK3sKKwl3aGlsZSAoKnJlZ192YWx1ZXMpIHsKKwkJdTggcmVnID0gKnJlZ192YWx1ZXMrKzsKKwkJdTggdmFsdWUgPSAqcmVnX3ZhbHVlcysrOworCQlpbnQgcmMgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLCB2YWx1ZSk7CisJCWlmIChyYykKKwkJCXJldHVybiByYzsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCB1OCBmYWxjb25fbG04N19jb21tb25fcmVnc1tdID0geworCUxNODdfUkVHX1RFTVBfSFdfSU5UX0xPQ0ssIEZBTENPTl9CT0FSRF9URU1QX0NSSVQsCisJTE04N19SRUdfVEVNUF9IV19JTlQsIEZBTENPTl9CT0FSRF9URU1QX0NSSVQsCisJTE04N19URU1QX0VYVDFfTElNSVRTKEZBTENPTl9KVU5DX1RFTVBfTUlOLCBGQUxDT05fSlVOQ19URU1QX01BWCksCisJTE04N19SRUdfVEVNUF9IV19FWFRfTE9DSywgRkFMQ09OX0pVTkNfVEVNUF9DUklULAorCUxNODdfUkVHX1RFTVBfSFdfRVhULCBGQUxDT05fSlVOQ19URU1QX0NSSVQsCisJMAorfTsKKwogc3RhdGljIGludCBlZnhfaW5pdF9sbTg3KHN0cnVjdCBlZnhfbmljICplZngsIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbywKIAkJCSBjb25zdCB1OCAqcmVnX3ZhbHVlcykKIHsKQEAgLTY3LDEzICs5NywxNiBAQAogCWlmICghY2xpZW50KQogCQlyZXR1cm4gLUVJTzsKIAotCXdoaWxlICgqcmVnX3ZhbHVlcykgewotCQl1OCByZWcgPSAqcmVnX3ZhbHVlcysrOwotCQl1OCB2YWx1ZSA9ICpyZWdfdmFsdWVzKys7Ci0JCXJjID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZywgdmFsdWUpOwotCQlpZiAocmMpCi0JCQlnb3RvIGVycjsKLQl9CisJLyogUmVhZC10by1jbGVhciBhbGFybS9pbnRlcnJ1cHQgc3RhdHVzICovCisJaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgTE04N19SRUdfQUxBUk1TMSk7CisJaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgTE04N19SRUdfQUxBUk1TMik7CisKKwlyYyA9IGVmeF9wb2tlX2xtODcoY2xpZW50LCByZWdfdmFsdWVzKTsKKwlpZiAocmMpCisJCWdvdG8gZXJyOworCXJjID0gZWZ4X3Bva2VfbG04NyhjbGllbnQsIGZhbGNvbl9sbTg3X2NvbW1vbl9yZWdzKTsKKwlpZiAocmMpCisJCWdvdG8gZXJyOwogCiAJYm9hcmQtPmh3bW9uX2NsaWVudCA9IGNsaWVudDsKIAlyZXR1cm4gMDsKQEAgLTkxLDM2ICsxMjQsNTYgQEAKIHN0YXRpYyBpbnQgZWZ4X2NoZWNrX2xtODcoc3RydWN0IGVmeF9uaWMgKmVmeCwgdW5zaWduZWQgbWFzaykKIHsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gZmFsY29uX2JvYXJkKGVmeCktPmh3bW9uX2NsaWVudDsKLQlzMzIgYWxhcm1zMSwgYWxhcm1zMjsKKwlib29sIHRlbXBfY3JpdCwgZWxlY19mYXVsdCwgaXNfZmFpbHVyZTsKKwl1MTYgYWxhcm1zOworCXMzMiByZWc7CiAKIAkvKiBJZiBsaW5rIGlzIHVwIHRoZW4gZG8gbm90IG1vbml0b3IgdGVtcGVyYXR1cmUgKi8KIAlpZiAoRUZYX1dPUktBUk9VTkRfNzg4NChlZngpICYmIGVmeC0+bGlua19zdGF0ZS51cCkKIAkJcmV0dXJuIDA7CiAKLQlhbGFybXMxID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgTE04N19SRUdfQUxBUk1TMSk7Ci0JYWxhcm1zMiA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIExNODdfUkVHX0FMQVJNUzIpOwotCWlmIChhbGFybXMxIDwgMCkKLQkJcmV0dXJuIGFsYXJtczE7Ci0JaWYgKGFsYXJtczIgPCAwKQotCQlyZXR1cm4gYWxhcm1zMjsKLQlhbGFybXMxICY9IG1hc2s7Ci0JYWxhcm1zMiAmPSBtYXNrID4+IDg7Ci0JaWYgKGFsYXJtczEgfHwgYWxhcm1zMikgewotCQluZXRpZl9lcnIoZWZ4LCBodywgZWZ4LT5uZXRfZGV2LAotCQkJICAiTE04NyBkZXRlY3RlZCBhIGhhcmR3YXJlIGZhaWx1cmUgKHN0YXR1cyAlMDJ4OiUwMngpIgotCQkJICAiJXMlcyVzXG4iLAotCQkJICBhbGFybXMxLCBhbGFybXMyLAotCQkJICAoYWxhcm1zMSAmIExNODdfQUxBUk1fVEVNUF9JTlQpID8KLQkJCSAgIjsgYm9hcmQgaXMgb3ZlcmhlYXRpbmciIDogIiIsCi0JCQkgIChhbGFybXMxICYgTE04N19BTEFSTV9URU1QX0VYVDEpID8KLQkJCSAgIjsgY29udHJvbGxlciBpcyBvdmVyaGVhdGluZyIgOiAiIiwKLQkJCSAgKGFsYXJtczEgJiB+KExNODdfQUxBUk1fVEVNUF9JTlQgfCBMTTg3X0FMQVJNX1RFTVBfRVhUMSkKLQkJCSAgIHx8IGFsYXJtczIpID8KLQkJCSAgIjsgZWxlY3RyaWNhbCBmYXVsdCIgOiAiIik7Ci0JCXJldHVybiAtRVJBTkdFOwotCX0KKwlyZWcgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBMTTg3X1JFR19BTEFSTVMxKTsKKwlpZiAocmVnIDwgMCkKKwkJcmV0dXJuIHJlZzsKKwlhbGFybXMgPSByZWc7CisJcmVnID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgTE04N19SRUdfQUxBUk1TMik7CisJaWYgKHJlZyA8IDApCisJCXJldHVybiByZWc7CisJYWxhcm1zIHw9IHJlZyA8PCA4OworCWFsYXJtcyAmPSBtYXNrOwogCi0JcmV0dXJuIDA7CisJdGVtcF9jcml0ID0gZmFsc2U7CisJaWYgKGFsYXJtcyAmIExNODdfQUxBUk1fVEVNUF9JTlQpIHsKKwkJcmVnID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgTE04N19SRUdfVEVNUF9JTlQpOworCQlpZiAocmVnIDwgMCkKKwkJCXJldHVybiByZWc7CisJCWlmIChyZWcgPiBGQUxDT05fQk9BUkRfVEVNUF9DUklUKQorCQkJdGVtcF9jcml0ID0gdHJ1ZTsKKwl9CisJaWYgKGFsYXJtcyAmIExNODdfQUxBUk1fVEVNUF9FWFQxKSB7CisJCXJlZyA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIExNODdfUkVHX1RFTVBfRVhUMSk7CisJCWlmIChyZWcgPCAwKQorCQkJcmV0dXJuIHJlZzsKKwkJaWYgKHJlZyA+IEZBTENPTl9KVU5DX1RFTVBfQ1JJVCkKKwkJCXRlbXBfY3JpdCA9IHRydWU7CisJfQorCWVsZWNfZmF1bHQgPSBhbGFybXMgJiB+KExNODdfQUxBUk1fVEVNUF9JTlQgfCBMTTg3X0FMQVJNX1RFTVBfRVhUMSk7CisJaXNfZmFpbHVyZSA9IHRlbXBfY3JpdCB8fCBlbGVjX2ZhdWx0OworCisJaWYgKGFsYXJtcykKKwkJbmV0aWZfZXJyKGVmeCwgaHcsIGVmeC0+bmV0X2RldiwKKwkJCSAgIkxNODcgZGV0ZWN0ZWQgYSBoYXJkd2FyZSAlcyAoc3RhdHVzICUwMng6JTAyeCkiCisJCQkgICIlcyVzJXMlc1xuIiwKKwkJCSAgaXNfZmFpbHVyZSA/ICJmYWlsdXJlIiA6ICJwcm9ibGVtIiwKKwkJCSAgYWxhcm1zICYgMHhmZiwgYWxhcm1zID4+IDgsCisJCQkgIChhbGFybXMgJiBMTTg3X0FMQVJNX1RFTVBfSU5UKSA/CisJCQkgICI7IGJvYXJkIGlzIG92ZXJoZWF0aW5nIiA6ICIiLAorCQkJICAoYWxhcm1zICYgTE04N19BTEFSTV9URU1QX0VYVDEpID8KKwkJCSAgIjsgY29udHJvbGxlciBpcyBvdmVyaGVhdGluZyIgOiAiIiwKKwkJCSAgdGVtcF9jcml0ID8gIjsgcmVhY2hlZCBjcml0aWNhbCB0ZW1wZXJhdHVyZSIgOiAiIiwKKwkJCSAgZWxlY19mYXVsdCA/ICI7IGVsZWN0cmljYWwgZmF1bHQiIDogIiIpOworCisJcmV0dXJuIGlzX2ZhaWx1cmUgPyAtRVJBTkdFIDogMDsKIH0KIAogI2Vsc2UgLyogIUNPTkZJR19TRU5TT1JTX0xNODcgKi8KQEAgLTMyNSw3ICszNzgsNyBAQAogCQluZXdfbW9kZSA9IG9sZF9tb2RlICYgflBIWV9NT0RFX1NQRUNJQUw7CiAJZWxzZQogCQluZXdfbW9kZSA9IFBIWV9NT0RFX1NQRUNJQUw7Ci0JaWYgKG9sZF9tb2RlID09IG5ld19tb2RlKSB7CisJaWYgKCEoKG9sZF9tb2RlIF4gbmV3X21vZGUpICYgUEhZX01PREVfU1BFQ0lBTCkpIHsKIAkJZXJyID0gMDsKIAl9IGVsc2UgaWYgKGVmeC0+c3RhdGUgIT0gU1RBVEVfUlVOTklORyB8fCBuZXRpZl9ydW5uaW5nKGVmeC0+bmV0X2RldikpIHsKIAkJZXJyID0gLUVCVVNZOwpAQCAtMzYyLDEwICs0MTUsMTEgQEAKIAogc3RhdGljIGludCBzZmU0MDAxX2NoZWNrX2h3KHN0cnVjdCBlZnhfbmljICplZngpCiB7CisJc3RydWN0IGZhbGNvbl9uaWNfZGF0YSAqbmljX2RhdGEgPSBlZngtPm5pY19kYXRhOwogCXMzMiBzdGF0dXM7CiAKIAkvKiBJZiBYQVVJIGxpbmsgaXMgdXAgdGhlbiBkbyBub3QgbW9uaXRvciAqLwotCWlmIChFRlhfV09SS0FST1VORF83ODg0KGVmeCkgJiYgIWVmeC0+eG1hY19wb2xsX3JlcXVpcmVkKQorCWlmIChFRlhfV09SS0FST1VORF83ODg0KGVmeCkgJiYgIW5pY19kYXRhLT54bWFjX3BvbGxfcmVxdWlyZWQpCiAJCXJldHVybiAwOwogCiAJLyogQ2hlY2sgdGhlIHBvd2VyZWQgc3RhdHVzIG9mIHRoZSBQSFkuIExhY2sgb2YgcG93ZXIgaW1wbGllcyB0aGF0CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvZmFsY29uX3htYWMuYyBiL2RyaXZlcnMvbmV0L3NmYy9mYWxjb25feG1hYy5jCmluZGV4IGIzMWY1OTUuLmI0OWU4NDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9mYWxjb25feG1hYy5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9mYWxjb25feG1hYy5jCkBAIC0xNiw3ICsxNiw2IEBACiAjaW5jbHVkZSAiaW8uaCIKICNpbmNsdWRlICJtYWMuaCIKICNpbmNsdWRlICJtZGlvXzEwZy5oIgotI2luY2x1ZGUgInBoeS5oIgogI2luY2x1ZGUgIndvcmthcm91bmRzLmgiCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtODgsNiArODcsNyBAQAogCiBzdGF0aWMgdm9pZCBmYWxjb25fYWNrX3N0YXR1c19pbnRyKHN0cnVjdCBlZnhfbmljICplZngpCiB7CisJc3RydWN0IGZhbGNvbl9uaWNfZGF0YSAqbmljX2RhdGEgPSBlZngtPm5pY19kYXRhOwogCWVmeF9vd29yZF90IHJlZzsKIAogCWlmICgoZWZ4X25pY19yZXYoZWZ4KSAhPSBFRlhfUkVWX0ZBTENPTl9CMCkgfHwgTE9PUEJBQ0tfSU5URVJOQUwoZWZ4KSkKQEAgLTk5LDcgKzk5LDcgQEAKIAogCS8qIFdlIGNhbiBvbmx5IHVzZSB0aGlzIGludGVycnVwdCB0byBzaWduYWwgdGhlIG5lZ2F0aXZlIGVkZ2Ugb2YKIAkgKiB4YXVpX2FsaWduIFt3ZSBoYXZlIHRvIHBvbGwgdGhlIHBvc2l0aXZlIGVkZ2VdLiAqLwotCWlmIChlZngtPnhtYWNfcG9sbF9yZXF1aXJlZCkKKwlpZiAobmljX2RhdGEtPnhtYWNfcG9sbF9yZXF1aXJlZCkKIAkJcmV0dXJuOwogCiAJZWZ4X3JlYWRvKGVmeCwgJnJlZywgRlJfQUJfWE1fTUdUX0lOVF9NU0spOwpAQCAtMjc3LDEyICsyNzcsMTQgQEAKIAogc3RhdGljIGludCBmYWxjb25fcmVjb25maWd1cmVfeG1hYyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQogeworCXN0cnVjdCBmYWxjb25fbmljX2RhdGEgKm5pY19kYXRhID0gZWZ4LT5uaWNfZGF0YTsKKwogCWZhbGNvbl9yZWNvbmZpZ3VyZV94Z3hzX2NvcmUoZWZ4KTsKIAlmYWxjb25fcmVjb25maWd1cmVfeG1hY19jb3JlKGVmeCk7CiAKIAlmYWxjb25fcmVjb25maWd1cmVfbWFjX3dyYXBwZXIoZWZ4KTsKIAotCWVmeC0+eG1hY19wb2xsX3JlcXVpcmVkID0gIWZhbGNvbl94bWFjX2xpbmtfb2tfcmV0cnkoZWZ4LCA1KTsKKwluaWNfZGF0YS0+eG1hY19wb2xsX3JlcXVpcmVkID0gIWZhbGNvbl94bWFjX2xpbmtfb2tfcmV0cnkoZWZ4LCA1KTsKIAlmYWxjb25fYWNrX3N0YXR1c19pbnRyKGVmeCk7CiAKIAlyZXR1cm4gMDsKQEAgLTM1MCwxMSArMzUyLDEzIEBACiAKIHZvaWQgZmFsY29uX3BvbGxfeG1hYyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQogeworCXN0cnVjdCBmYWxjb25fbmljX2RhdGEgKm5pY19kYXRhID0gZWZ4LT5uaWNfZGF0YTsKKwogCWlmICghRUZYX1dPUktBUk9VTkRfNTE0NyhlZngpIHx8ICFlZngtPmxpbmtfc3RhdGUudXAgfHwKLQkgICAgIWVmeC0+eG1hY19wb2xsX3JlcXVpcmVkKQorCSAgICAhbmljX2RhdGEtPnhtYWNfcG9sbF9yZXF1aXJlZCkKIAkJcmV0dXJuOwogCi0JZWZ4LT54bWFjX3BvbGxfcmVxdWlyZWQgPSAhZmFsY29uX3htYWNfbGlua19va19yZXRyeShlZngsIDEpOworCW5pY19kYXRhLT54bWFjX3BvbGxfcmVxdWlyZWQgPSAhZmFsY29uX3htYWNfbGlua19va19yZXRyeShlZngsIDEpOwogCWZhbGNvbl9hY2tfc3RhdHVzX2ludHIoZWZ4KTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL2ZpbHRlci5jIGIvZHJpdmVycy9uZXQvc2ZjL2ZpbHRlci5jCmluZGV4IDUyY2I2MDguLmQ0NzIyYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9maWx0ZXIuYworKysgYi9kcml2ZXJzL25ldC9zZmMvZmlsdGVyLmMKQEAgLTcsNiArNyw3IEBACiAgKiBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KICAqLwogCisjaW5jbHVkZSA8bGludXgvaW4uaD4KICNpbmNsdWRlICJlZnguaCIKICNpbmNsdWRlICJmaWx0ZXIuaCIKICNpbmNsdWRlICJpby5oIgpAQCAtMjYsMTkgKzI3LDI2IEBACiAgKi8KICNkZWZpbmUgRklMVEVSX0NUTF9TUkNIX01BWCAyMDAKIAorZW51bSBlZnhfZmlsdGVyX3RhYmxlX2lkIHsKKwlFRlhfRklMVEVSX1RBQkxFX1JYX0lQID0gMCwKKwlFRlhfRklMVEVSX1RBQkxFX1JYX01BQywKKwlFRlhfRklMVEVSX1RBQkxFX0NPVU5ULAorfTsKKwogc3RydWN0IGVmeF9maWx0ZXJfdGFibGUgeworCWVudW0gZWZ4X2ZpbHRlcl90YWJsZV9pZCBpZDsKIAl1MzIJCW9mZnNldDsJCS8qIGFkZHJlc3Mgb2YgdGFibGUgcmVsYXRpdmUgdG8gQkFSICovCiAJdW5zaWduZWQJc2l6ZTsJCS8qIG51bWJlciBvZiBlbnRyaWVzICovCiAJdW5zaWduZWQJc3RlcDsJCS8qIHN0ZXAgYmV0d2VlbiBlbnRyaWVzICovCiAJdW5zaWduZWQJdXNlZDsJCS8qIG51bWJlciBjdXJyZW50bHkgdXNlZCAqLwogCXVuc2lnbmVkIGxvbmcJKnVzZWRfYml0bWFwOwogCXN0cnVjdCBlZnhfZmlsdGVyX3NwZWMgKnNwZWM7CisJdW5zaWduZWQJc2VhcmNoX2RlcHRoW0VGWF9GSUxURVJfVFlQRV9DT1VOVF07CiB9OwogCiBzdHJ1Y3QgZWZ4X2ZpbHRlcl9zdGF0ZSB7CiAJc3BpbmxvY2tfdAlsb2NrOwogCXN0cnVjdCBlZnhfZmlsdGVyX3RhYmxlIHRhYmxlW0VGWF9GSUxURVJfVEFCTEVfQ09VTlRdOwotCXVuc2lnbmVkCXNlYXJjaF9kZXB0aFtFRlhfRklMVEVSX1RZUEVfQ09VTlRdOwogfTsKIAogLyogVGhlIGZpbHRlciBoYXNoIGZ1bmN0aW9uIGlzIExGU1IgcG9seW5vbWlhbCB4XjE2ICsgeF4zICsgMSBvZiBhIDMyLWJpdApAQCAtNjUsNjggKzczLDIwMyBAQAogfQogCiBzdGF0aWMgZW51bSBlZnhfZmlsdGVyX3RhYmxlX2lkCi1lZnhfZmlsdGVyX3R5cGVfdGFibGVfaWQoZW51bSBlZnhfZmlsdGVyX3R5cGUgdHlwZSkKK2VmeF9maWx0ZXJfc3BlY190YWJsZV9pZChjb25zdCBzdHJ1Y3QgZWZ4X2ZpbHRlcl9zcGVjICpzcGVjKQogewotCUJVSUxEX0JVR19PTihFRlhfRklMVEVSX1RBQkxFX1JYX0lQICE9IChFRlhfRklMVEVSX1JYX1RDUF9GVUxMID4+IDIpKTsKLQlCVUlMRF9CVUdfT04oRUZYX0ZJTFRFUl9UQUJMRV9SWF9JUCAhPSAoRUZYX0ZJTFRFUl9SWF9UQ1BfV0lMRCA+PiAyKSk7Ci0JQlVJTERfQlVHX09OKEVGWF9GSUxURVJfVEFCTEVfUlhfSVAgIT0gKEVGWF9GSUxURVJfUlhfVURQX0ZVTEwgPj4gMikpOwotCUJVSUxEX0JVR19PTihFRlhfRklMVEVSX1RBQkxFX1JYX0lQICE9IChFRlhfRklMVEVSX1JYX1VEUF9XSUxEID4+IDIpKTsKLQlCVUlMRF9CVUdfT04oRUZYX0ZJTFRFUl9UQUJMRV9SWF9NQUMgIT0gKEVGWF9GSUxURVJfUlhfTUFDX0ZVTEwgPj4gMikpOwotCUJVSUxEX0JVR19PTihFRlhfRklMVEVSX1RBQkxFX1JYX01BQyAhPSAoRUZYX0ZJTFRFUl9SWF9NQUNfV0lMRCA+PiAyKSk7Ci0JcmV0dXJuIHR5cGUgPj4gMjsKKwlCVUlMRF9CVUdfT04oRUZYX0ZJTFRFUl9UQUJMRV9SWF9JUCAhPSAoRUZYX0ZJTFRFUl9UQ1BfRlVMTCA+PiAyKSk7CisJQlVJTERfQlVHX09OKEVGWF9GSUxURVJfVEFCTEVfUlhfSVAgIT0gKEVGWF9GSUxURVJfVENQX1dJTEQgPj4gMikpOworCUJVSUxEX0JVR19PTihFRlhfRklMVEVSX1RBQkxFX1JYX0lQICE9IChFRlhfRklMVEVSX1VEUF9GVUxMID4+IDIpKTsKKwlCVUlMRF9CVUdfT04oRUZYX0ZJTFRFUl9UQUJMRV9SWF9JUCAhPSAoRUZYX0ZJTFRFUl9VRFBfV0lMRCA+PiAyKSk7CisJQlVJTERfQlVHX09OKEVGWF9GSUxURVJfVEFCTEVfUlhfTUFDICE9IChFRlhfRklMVEVSX01BQ19GVUxMID4+IDIpKTsKKwlCVUlMRF9CVUdfT04oRUZYX0ZJTFRFUl9UQUJMRV9SWF9NQUMgIT0gKEVGWF9GSUxURVJfTUFDX1dJTEQgPj4gMikpOworCUVGWF9CVUdfT05fUEFSQU5PSUQoc3BlYy0+dHlwZSA9PSBFRlhfRklMVEVSX1VOU1BFQyk7CisJcmV0dXJuIHNwZWMtPnR5cGUgPj4gMjsKIH0KIAotc3RhdGljIHZvaWQKLWVmeF9maWx0ZXJfdGFibGVfcmVzZXRfc2VhcmNoX2RlcHRoKHN0cnVjdCBlZnhfZmlsdGVyX3N0YXRlICpzdGF0ZSwKLQkJCQkgICAgZW51bSBlZnhfZmlsdGVyX3RhYmxlX2lkIHRhYmxlX2lkKQorc3RhdGljIHN0cnVjdCBlZnhfZmlsdGVyX3RhYmxlICoKK2VmeF9maWx0ZXJfc3BlY190YWJsZShzdHJ1Y3QgZWZ4X2ZpbHRlcl9zdGF0ZSAqc3RhdGUsCisJCSAgICAgIGNvbnN0IHN0cnVjdCBlZnhfZmlsdGVyX3NwZWMgKnNwZWMpCiB7Ci0JbWVtc2V0KHN0YXRlLT5zZWFyY2hfZGVwdGggKyAodGFibGVfaWQgPDwgMiksIDAsCi0JICAgICAgIHNpemVvZihzdGF0ZS0+c2VhcmNoX2RlcHRoWzBdKSA8PCAyKTsKKwlpZiAoc3BlYy0+dHlwZSA9PSBFRlhfRklMVEVSX1VOU1BFQykKKwkJcmV0dXJuIE5VTEw7CisJZWxzZQorCQlyZXR1cm4gJnN0YXRlLT50YWJsZVtlZnhfZmlsdGVyX3NwZWNfdGFibGVfaWQoc3BlYyldOworfQorCitzdGF0aWMgdm9pZCBlZnhfZmlsdGVyX3RhYmxlX3Jlc2V0X3NlYXJjaF9kZXB0aChzdHJ1Y3QgZWZ4X2ZpbHRlcl90YWJsZSAqdGFibGUpCit7CisJbWVtc2V0KHRhYmxlLT5zZWFyY2hfZGVwdGgsIDAsIHNpemVvZih0YWJsZS0+c2VhcmNoX2RlcHRoKSk7CiB9CiAKIHN0YXRpYyB2b2lkIGVmeF9maWx0ZXJfcHVzaF9yeF9saW1pdHMoc3RydWN0IGVmeF9uaWMgKmVmeCkKIHsKIAlzdHJ1Y3QgZWZ4X2ZpbHRlcl9zdGF0ZSAqc3RhdGUgPSBlZngtPmZpbHRlcl9zdGF0ZTsKKwlzdHJ1Y3QgZWZ4X2ZpbHRlcl90YWJsZSAqdGFibGU7CiAJZWZ4X293b3JkX3QgZmlsdGVyX2N0bDsKIAogCWVmeF9yZWFkbyhlZngsICZmaWx0ZXJfY3RsLCBGUl9CWl9SWF9GSUxURVJfQ1RMKTsKIAorCXRhYmxlID0gJnN0YXRlLT50YWJsZVtFRlhfRklMVEVSX1RBQkxFX1JYX0lQXTsKIAlFRlhfU0VUX09XT1JEX0ZJRUxEKGZpbHRlcl9jdGwsIEZSRl9CWl9UQ1BfRlVMTF9TUkNIX0xJTUlULAotCQkJICAgIHN0YXRlLT5zZWFyY2hfZGVwdGhbRUZYX0ZJTFRFUl9SWF9UQ1BfRlVMTF0gKworCQkJICAgIHRhYmxlLT5zZWFyY2hfZGVwdGhbRUZYX0ZJTFRFUl9UQ1BfRlVMTF0gKwogCQkJICAgIEZJTFRFUl9DVExfU1JDSF9GVURHRV9GVUxMKTsKIAlFRlhfU0VUX09XT1JEX0ZJRUxEKGZpbHRlcl9jdGwsIEZSRl9CWl9UQ1BfV0lMRF9TUkNIX0xJTUlULAotCQkJICAgIHN0YXRlLT5zZWFyY2hfZGVwdGhbRUZYX0ZJTFRFUl9SWF9UQ1BfV0lMRF0gKworCQkJICAgIHRhYmxlLT5zZWFyY2hfZGVwdGhbRUZYX0ZJTFRFUl9UQ1BfV0lMRF0gKwogCQkJICAgIEZJTFRFUl9DVExfU1JDSF9GVURHRV9XSUxEKTsKIAlFRlhfU0VUX09XT1JEX0ZJRUxEKGZpbHRlcl9jdGwsIEZSRl9CWl9VRFBfRlVMTF9TUkNIX0xJTUlULAotCQkJICAgIHN0YXRlLT5zZWFyY2hfZGVwdGhbRUZYX0ZJTFRFUl9SWF9VRFBfRlVMTF0gKworCQkJICAgIHRhYmxlLT5zZWFyY2hfZGVwdGhbRUZYX0ZJTFRFUl9VRFBfRlVMTF0gKwogCQkJICAgIEZJTFRFUl9DVExfU1JDSF9GVURHRV9GVUxMKTsKIAlFRlhfU0VUX09XT1JEX0ZJRUxEKGZpbHRlcl9jdGwsIEZSRl9CWl9VRFBfV0lMRF9TUkNIX0xJTUlULAotCQkJICAgIHN0YXRlLT5zZWFyY2hfZGVwdGhbRUZYX0ZJTFRFUl9SWF9VRFBfV0lMRF0gKworCQkJICAgIHRhYmxlLT5zZWFyY2hfZGVwdGhbRUZYX0ZJTFRFUl9VRFBfV0lMRF0gKwogCQkJICAgIEZJTFRFUl9DVExfU1JDSF9GVURHRV9XSUxEKTsKIAotCWlmIChzdGF0ZS0+dGFibGVbRUZYX0ZJTFRFUl9UQUJMRV9SWF9NQUNdLnNpemUpIHsKKwl0YWJsZSA9ICZzdGF0ZS0+dGFibGVbRUZYX0ZJTFRFUl9UQUJMRV9SWF9NQUNdOworCWlmICh0YWJsZS0+c2l6ZSkgewogCQlFRlhfU0VUX09XT1JEX0ZJRUxEKAogCQkJZmlsdGVyX2N0bCwgRlJGX0NaX0VUSEVSTkVUX0ZVTExfU0VBUkNIX0xJTUlULAotCQkJc3RhdGUtPnNlYXJjaF9kZXB0aFtFRlhfRklMVEVSX1JYX01BQ19GVUxMXSArCisJCQl0YWJsZS0+c2VhcmNoX2RlcHRoW0VGWF9GSUxURVJfTUFDX0ZVTExdICsKIAkJCUZJTFRFUl9DVExfU1JDSF9GVURHRV9GVUxMKTsKIAkJRUZYX1NFVF9PV09SRF9GSUVMRCgKIAkJCWZpbHRlcl9jdGwsIEZSRl9DWl9FVEhFUk5FVF9XSUxEQ0FSRF9TRUFSQ0hfTElNSVQsCi0JCQlzdGF0ZS0+c2VhcmNoX2RlcHRoW0VGWF9GSUxURVJfUlhfTUFDX1dJTERdICsKKwkJCXRhYmxlLT5zZWFyY2hfZGVwdGhbRUZYX0ZJTFRFUl9NQUNfV0lMRF0gKwogCQkJRklMVEVSX0NUTF9TUkNIX0ZVREdFX1dJTEQpOwogCX0KIAogCWVmeF93cml0ZW8oZWZ4LCAmZmlsdGVyX2N0bCwgRlJfQlpfUlhfRklMVEVSX0NUTCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2VmeF9maWx0ZXJfc2V0X2lwdjQoc3RydWN0IGVmeF9maWx0ZXJfc3BlYyAqc3BlYywKKwkJCQkJIF9fYmUzMiBob3N0MSwgX19iZTE2IHBvcnQxLAorCQkJCQkgX19iZTMyIGhvc3QyLCBfX2JlMTYgcG9ydDIpCit7CisJc3BlYy0+ZGF0YVswXSA9IG50b2hsKGhvc3QxKSA8PCAxNiB8IG50b2hzKHBvcnQxKTsKKwlzcGVjLT5kYXRhWzFdID0gbnRvaHMocG9ydDIpIDw8IDE2IHwgbnRvaGwoaG9zdDEpID4+IDE2OworCXNwZWMtPmRhdGFbMl0gPSBudG9obChob3N0Mik7Cit9CisKKy8qKgorICogZWZ4X2ZpbHRlcl9zZXRfaXB2NF9sb2NhbCAtIHNwZWNpZnkgSVB2NCBob3N0LCB0cmFuc3BvcnQgcHJvdG9jb2wgYW5kIHBvcnQKKyAqIEBzcGVjOiBTcGVjaWZpY2F0aW9uIHRvIGluaXRpYWxpc2UKKyAqIEBwcm90bzogVHJhbnNwb3J0IGxheWVyIHByb3RvY29sIG51bWJlcgorICogQGhvc3Q6IExvY2FsIGhvc3QgYWRkcmVzcyAobmV0d29yayBieXRlIG9yZGVyKQorICogQHBvcnQ6IExvY2FsIHBvcnQgKG5ldHdvcmsgYnl0ZSBvcmRlcikKKyAqLworaW50IGVmeF9maWx0ZXJfc2V0X2lwdjRfbG9jYWwoc3RydWN0IGVmeF9maWx0ZXJfc3BlYyAqc3BlYywgdTggcHJvdG8sCisJCQkgICAgICBfX2JlMzIgaG9zdCwgX19iZTE2IHBvcnQpCit7CisJX19iZTMyIGhvc3QxOworCV9fYmUxNiBwb3J0MTsKKworCUVGWF9CVUdfT05fUEFSQU5PSUQoIShzcGVjLT5mbGFncyAmIEVGWF9GSUxURVJfRkxBR19SWCkpOworCisJLyogVGhpcyBjYW5ub3QgY3VycmVudGx5IGJlIGNvbWJpbmVkIHdpdGggb3RoZXIgZmlsdGVyaW5nICovCisJaWYgKHNwZWMtPnR5cGUgIT0gRUZYX0ZJTFRFUl9VTlNQRUMpCisJCXJldHVybiAtRVBST1RPTk9TVVBQT1JUOworCisJaWYgKHBvcnQgPT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzd2l0Y2ggKHByb3RvKSB7CisJY2FzZSBJUFBST1RPX1RDUDoKKwkJc3BlYy0+dHlwZSA9IEVGWF9GSUxURVJfVENQX1dJTEQ7CisJCWJyZWFrOworCWNhc2UgSVBQUk9UT19VRFA6CisJCXNwZWMtPnR5cGUgPSBFRlhfRklMVEVSX1VEUF9XSUxEOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVQUk9UT05PU1VQUE9SVDsKKwl9CisKKwkvKiBGaWx0ZXIgaXMgY29uc3RydWN0ZWQgaW4gdGVybXMgb2Ygc291cmNlIGFuZCBkZXN0aW5hdGlvbiwKKwkgKiB3aXRoIHRoZSBvZGQgd3JpbmtsZSB0aGF0IHRoZSBwb3J0cyBhcmUgc3dhcHBlZCBpbiBhIFVEUAorCSAqIHdpbGRjYXJkIGZpbHRlci4gIFdlIG5lZWQgdG8gY29udmVydCBmcm9tIGxvY2FsIGFuZCByZW1vdGUKKwkgKiAoPSB6ZXJvIGZvciB3aWxkY2FyZCkgYWRkcmVzc2VzLgorCSAqLworCWhvc3QxID0gMDsKKwlpZiAocHJvdG8gIT0gSVBQUk9UT19VRFApIHsKKwkJcG9ydDEgPSAwOworCX0gZWxzZSB7CisJCXBvcnQxID0gcG9ydDsKKwkJcG9ydCA9IDA7CisJfQorCisJX19lZnhfZmlsdGVyX3NldF9pcHY0KHNwZWMsIGhvc3QxLCBwb3J0MSwgaG9zdCwgcG9ydCk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogZWZ4X2ZpbHRlcl9zZXRfaXB2NF9mdWxsIC0gc3BlY2lmeSBJUHY0IGhvc3RzLCB0cmFuc3BvcnQgcHJvdG9jb2wgYW5kIHBvcnRzCisgKiBAc3BlYzogU3BlY2lmaWNhdGlvbiB0byBpbml0aWFsaXNlCisgKiBAcHJvdG86IFRyYW5zcG9ydCBsYXllciBwcm90b2NvbCBudW1iZXIKKyAqIEBob3N0OiBMb2NhbCBob3N0IGFkZHJlc3MgKG5ldHdvcmsgYnl0ZSBvcmRlcikKKyAqIEBwb3J0OiBMb2NhbCBwb3J0IChuZXR3b3JrIGJ5dGUgb3JkZXIpCisgKiBAcmhvc3Q6IFJlbW90ZSBob3N0IGFkZHJlc3MgKG5ldHdvcmsgYnl0ZSBvcmRlcikKKyAqIEBycG9ydDogUmVtb3RlIHBvcnQgKG5ldHdvcmsgYnl0ZSBvcmRlcikKKyAqLworaW50IGVmeF9maWx0ZXJfc2V0X2lwdjRfZnVsbChzdHJ1Y3QgZWZ4X2ZpbHRlcl9zcGVjICpzcGVjLCB1OCBwcm90bywKKwkJCSAgICAgX19iZTMyIGhvc3QsIF9fYmUxNiBwb3J0LAorCQkJICAgICBfX2JlMzIgcmhvc3QsIF9fYmUxNiBycG9ydCkKK3sKKwlFRlhfQlVHX09OX1BBUkFOT0lEKCEoc3BlYy0+ZmxhZ3MgJiBFRlhfRklMVEVSX0ZMQUdfUlgpKTsKKworCS8qIFRoaXMgY2Fubm90IGN1cnJlbnRseSBiZSBjb21iaW5lZCB3aXRoIG90aGVyIGZpbHRlcmluZyAqLworCWlmIChzcGVjLT50eXBlICE9IEVGWF9GSUxURVJfVU5TUEVDKQorCQlyZXR1cm4gLUVQUk9UT05PU1VQUE9SVDsKKworCWlmIChwb3J0ID09IDAgfHwgcnBvcnQgPT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzd2l0Y2ggKHByb3RvKSB7CisJY2FzZSBJUFBST1RPX1RDUDoKKwkJc3BlYy0+dHlwZSA9IEVGWF9GSUxURVJfVENQX0ZVTEw7CisJCWJyZWFrOworCWNhc2UgSVBQUk9UT19VRFA6CisJCXNwZWMtPnR5cGUgPSBFRlhfRklMVEVSX1VEUF9GVUxMOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVQUk9UT05PU1VQUE9SVDsKKwl9CisKKwlfX2VmeF9maWx0ZXJfc2V0X2lwdjQoc3BlYywgcmhvc3QsIHJwb3J0LCBob3N0LCBwb3J0KTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBlZnhfZmlsdGVyX3NldF9ldGhfbG9jYWwgLSBzcGVjaWZ5IGxvY2FsIEV0aGVybmV0IGFkZHJlc3MgYW5kIG9wdGlvbmFsIFZJRAorICogQHNwZWM6IFNwZWNpZmljYXRpb24gdG8gaW5pdGlhbGlzZQorICogQHZpZDogVkxBTiBJRCB0byBtYXRjaCwgb3IgJUVGWF9GSUxURVJfVklEX1VOU1BFQworICogQGFkZHI6IExvY2FsIEV0aGVybmV0IE1BQyBhZGRyZXNzCisgKi8KK2ludCBlZnhfZmlsdGVyX3NldF9ldGhfbG9jYWwoc3RydWN0IGVmeF9maWx0ZXJfc3BlYyAqc3BlYywKKwkJCSAgICAgdTE2IHZpZCwgY29uc3QgdTggKmFkZHIpCit7CisJRUZYX0JVR19PTl9QQVJBTk9JRCghKHNwZWMtPmZsYWdzICYgRUZYX0ZJTFRFUl9GTEFHX1JYKSk7CisKKwkvKiBUaGlzIGNhbm5vdCBjdXJyZW50bHkgYmUgY29tYmluZWQgd2l0aCBvdGhlciBmaWx0ZXJpbmcgKi8KKwlpZiAoc3BlYy0+dHlwZSAhPSBFRlhfRklMVEVSX1VOU1BFQykKKwkJcmV0dXJuIC1FUFJPVE9OT1NVUFBPUlQ7CisKKwlpZiAodmlkID09IEVGWF9GSUxURVJfVklEX1VOU1BFQykgeworCQlzcGVjLT50eXBlID0gRUZYX0ZJTFRFUl9NQUNfV0lMRDsKKwkJc3BlYy0+ZGF0YVswXSA9IDA7CisJfSBlbHNlIHsKKwkJc3BlYy0+dHlwZSA9IEVGWF9GSUxURVJfTUFDX0ZVTEw7CisJCXNwZWMtPmRhdGFbMF0gPSB2aWQ7CisJfQorCisJc3BlYy0+ZGF0YVsxXSA9IGFkZHJbMl0gPDwgMjQgfCBhZGRyWzNdIDw8IDE2IHwgYWRkcls0XSA8PCA4IHwgYWRkcls1XTsKKwlzcGVjLT5kYXRhWzJdID0gYWRkclswXSA8PCA4IHwgYWRkclsxXTsKKwlyZXR1cm4gMDsKK30KKwogLyogQnVpbGQgYSBmaWx0ZXIgZW50cnkgYW5kIHJldHVybiBpdHMgbi10dXBsZSBrZXkuICovCiBzdGF0aWMgdTMyIGVmeF9maWx0ZXJfYnVpbGQoZWZ4X293b3JkX3QgKmZpbHRlciwgc3RydWN0IGVmeF9maWx0ZXJfc3BlYyAqc3BlYykKIHsKIAl1MzIgZGF0YTM7CiAKLQlzd2l0Y2ggKGVmeF9maWx0ZXJfdHlwZV90YWJsZV9pZChzcGVjLT50eXBlKSkgeworCXN3aXRjaCAoZWZ4X2ZpbHRlcl9zcGVjX3RhYmxlX2lkKHNwZWMpKSB7CiAJY2FzZSBFRlhfRklMVEVSX1RBQkxFX1JYX0lQOiB7Ci0JCWJvb2wgaXNfdWRwID0gKHNwZWMtPnR5cGUgPT0gRUZYX0ZJTFRFUl9SWF9VRFBfRlVMTCB8fAotCQkJICAgICAgIHNwZWMtPnR5cGUgPT0gRUZYX0ZJTFRFUl9SWF9VRFBfV0lMRCk7CisJCWJvb2wgaXNfdWRwID0gKHNwZWMtPnR5cGUgPT0gRUZYX0ZJTFRFUl9VRFBfRlVMTCB8fAorCQkJICAgICAgIHNwZWMtPnR5cGUgPT0gRUZYX0ZJTFRFUl9VRFBfV0lMRCk7CiAJCUVGWF9QT1BVTEFURV9PV09SRF83KAogCQkJKmZpbHRlciwKIAkJCUZSRl9CWl9SU1NfRU4sCkBAIC0xNDMsNyArMjg2LDcgQEAKIAl9CiAKIAljYXNlIEVGWF9GSUxURVJfVEFCTEVfUlhfTUFDOiB7Ci0JCWJvb2wgaXNfd2lsZCA9IHNwZWMtPnR5cGUgPT0gRUZYX0ZJTFRFUl9SWF9NQUNfV0lMRDsKKwkJYm9vbCBpc193aWxkID0gc3BlYy0+dHlwZSA9PSBFRlhfRklMVEVSX01BQ19XSUxEOwogCQlFRlhfUE9QVUxBVEVfT1dPUkRfOCgKIAkJCSpmaWx0ZXIsCiAJCQlGUkZfQ1pfUk1GVF9SU1NfRU4sCkBAIC0yMDYsNiArMzQ5LDE0IEBACiAJcmV0dXJuIGZpbHRlcl9pZHg7CiB9CiAKKy8qIENvbnN0cnVjdC9kZWNvbnN0cnVjdCBleHRlcm5hbCBmaWx0ZXIgSURzICovCisKK3N0YXRpYyBpbmxpbmUgaW50CitlZnhfZmlsdGVyX21ha2VfaWQoZW51bSBlZnhfZmlsdGVyX3RhYmxlX2lkIHRhYmxlX2lkLCB1bnNpZ25lZCBpbmRleCkKK3sKKwlyZXR1cm4gdGFibGVfaWQgPDwgMTYgfCBpbmRleDsKK30KKwogLyoqCiAgKiBlZnhfZmlsdGVyX2luc2VydF9maWx0ZXIgLSBhZGQgb3IgcmVwbGFjZSBhIGZpbHRlcgogICogQGVmeDogTklDIGluIHdoaWNoIHRvIGluc2VydCB0aGUgZmlsdGVyCkBAIC0yMTMsMzAgKzM2NCwyOCBAQAogICogQHJlcGxhY2U6IEZsYWcgZm9yIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBmaWx0ZXIgbWF5IHJlcGxhY2UgYSBmaWx0ZXIKICAqCXdpdGggYW4gaWRlbnRpY2FsIG1hdGNoIGV4cHJlc3Npb24gYW5kIGVxdWFsIG9yIGxvd2VyIHByaW9yaXR5CiAgKgotICogT24gc3VjY2VzcywgcmV0dXJuIHRoZSBmaWx0ZXIgaW5kZXggd2l0aGluIGl0cyB0YWJsZS4KKyAqIE9uIHN1Y2Nlc3MsIHJldHVybiB0aGUgZmlsdGVyIElELgogICogT24gZmFpbHVyZSwgcmV0dXJuIGEgbmVnYXRpdmUgZXJyb3IgY29kZS4KICAqLwogaW50IGVmeF9maWx0ZXJfaW5zZXJ0X2ZpbHRlcihzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCBzdHJ1Y3QgZWZ4X2ZpbHRlcl9zcGVjICpzcGVjLAogCQkJICAgICBib29sIHJlcGxhY2UpCiB7CiAJc3RydWN0IGVmeF9maWx0ZXJfc3RhdGUgKnN0YXRlID0gZWZ4LT5maWx0ZXJfc3RhdGU7Ci0JZW51bSBlZnhfZmlsdGVyX3RhYmxlX2lkIHRhYmxlX2lkID0KLQkJZWZ4X2ZpbHRlcl90eXBlX3RhYmxlX2lkKHNwZWMtPnR5cGUpOwotCXN0cnVjdCBlZnhfZmlsdGVyX3RhYmxlICp0YWJsZSA9ICZzdGF0ZS0+dGFibGVbdGFibGVfaWRdOworCXN0cnVjdCBlZnhfZmlsdGVyX3RhYmxlICp0YWJsZSA9IGVmeF9maWx0ZXJfc3BlY190YWJsZShzdGF0ZSwgc3BlYyk7CiAJc3RydWN0IGVmeF9maWx0ZXJfc3BlYyAqc2F2ZWRfc3BlYzsKIAllZnhfb3dvcmRfdCBmaWx0ZXI7CiAJaW50IGZpbHRlcl9pZHgsIGRlcHRoOwogCXUzMiBrZXk7CiAJaW50IHJjOwogCi0JaWYgKHRhYmxlLT5zaXplID09IDApCisJaWYgKCF0YWJsZSB8fCB0YWJsZS0+c2l6ZSA9PSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWtleSA9IGVmeF9maWx0ZXJfYnVpbGQoJmZpbHRlciwgc3BlYyk7CiAKIAluZXRpZl92ZGJnKGVmeCwgaHcsIGVmeC0+bmV0X2RldiwKIAkJICAgIiVzOiB0eXBlICVkIHNlYXJjaF9kZXB0aD0lZCIsIF9fZnVuY19fLCBzcGVjLT50eXBlLAotCQkgICBzdGF0ZS0+c2VhcmNoX2RlcHRoW3NwZWMtPnR5cGVdKTsKKwkJICAgdGFibGUtPnNlYXJjaF9kZXB0aFtzcGVjLT50eXBlXSk7CiAKIAlzcGluX2xvY2tfYmgoJnN0YXRlLT5sb2NrKTsKIApAQCAtMjYzLDggKzQxMiw4IEBACiAJfQogCSpzYXZlZF9zcGVjID0gKnNwZWM7CiAKLQlpZiAoc3RhdGUtPnNlYXJjaF9kZXB0aFtzcGVjLT50eXBlXSA8IGRlcHRoKSB7Ci0JCXN0YXRlLT5zZWFyY2hfZGVwdGhbc3BlYy0+dHlwZV0gPSBkZXB0aDsKKwlpZiAodGFibGUtPnNlYXJjaF9kZXB0aFtzcGVjLT50eXBlXSA8IGRlcHRoKSB7CisJCXRhYmxlLT5zZWFyY2hfZGVwdGhbc3BlYy0+dHlwZV0gPSBkZXB0aDsKIAkJZWZ4X2ZpbHRlcl9wdXNoX3J4X2xpbWl0cyhlZngpOwogCX0KIApAQCAtMjczLDYgKzQyMiw3IEBACiAJbmV0aWZfdmRiZyhlZngsIGh3LCBlZngtPm5ldF9kZXYsCiAJCSAgICIlczogZmlsdGVyIHR5cGUgJWQgaW5kZXggJWQgcnhxICV1IHNldCIsCiAJCSAgIF9fZnVuY19fLCBzcGVjLT50eXBlLCBmaWx0ZXJfaWR4LCBzcGVjLT5kbWFxX2lkKTsKKwlyYyA9IGVmeF9maWx0ZXJfbWFrZV9pZCh0YWJsZS0+aWQsIGZpbHRlcl9pZHgpOwogCiBvdXQ6CiAJc3Bpbl91bmxvY2tfYmgoJnN0YXRlLT5sb2NrKTsKQEAgLTMwNiwxNSArNDU2LDE2IEBACiBpbnQgZWZ4X2ZpbHRlcl9yZW1vdmVfZmlsdGVyKHN0cnVjdCBlZnhfbmljICplZngsIHN0cnVjdCBlZnhfZmlsdGVyX3NwZWMgKnNwZWMpCiB7CiAJc3RydWN0IGVmeF9maWx0ZXJfc3RhdGUgKnN0YXRlID0gZWZ4LT5maWx0ZXJfc3RhdGU7Ci0JZW51bSBlZnhfZmlsdGVyX3RhYmxlX2lkIHRhYmxlX2lkID0KLQkJZWZ4X2ZpbHRlcl90eXBlX3RhYmxlX2lkKHNwZWMtPnR5cGUpOwotCXN0cnVjdCBlZnhfZmlsdGVyX3RhYmxlICp0YWJsZSA9ICZzdGF0ZS0+dGFibGVbdGFibGVfaWRdOworCXN0cnVjdCBlZnhfZmlsdGVyX3RhYmxlICp0YWJsZSA9IGVmeF9maWx0ZXJfc3BlY190YWJsZShzdGF0ZSwgc3BlYyk7CiAJc3RydWN0IGVmeF9maWx0ZXJfc3BlYyAqc2F2ZWRfc3BlYzsKIAllZnhfb3dvcmRfdCBmaWx0ZXI7CiAJaW50IGZpbHRlcl9pZHgsIGRlcHRoOwogCXUzMiBrZXk7CiAJaW50IHJjOwogCisJaWYgKCF0YWJsZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlrZXkgPSBlZnhfZmlsdGVyX2J1aWxkKCZmaWx0ZXIsIHNwZWMpOwogCiAJc3Bpbl9sb2NrX2JoKCZzdGF0ZS0+bG9jayk7CkBAIC0zMzIsNyArNDgzLDcgQEAKIAogCWVmeF9maWx0ZXJfdGFibGVfY2xlYXJfZW50cnkoZWZ4LCB0YWJsZSwgZmlsdGVyX2lkeCk7CiAJaWYgKHRhYmxlLT51c2VkID09IDApCi0JCWVmeF9maWx0ZXJfdGFibGVfcmVzZXRfc2VhcmNoX2RlcHRoKHN0YXRlLCB0YWJsZV9pZCk7CisJCWVmeF9maWx0ZXJfdGFibGVfcmVzZXRfc2VhcmNoX2RlcHRoKHRhYmxlKTsKIAlyYyA9IDA7CiAKIG91dDoKQEAgLTM0MCwxNSArNDkxLDkgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLS8qKgotICogZWZ4X2ZpbHRlcl90YWJsZV9jbGVhciAtIHJlbW92ZSBmaWx0ZXJzIGZyb20gYSB0YWJsZSBieSBwcmlvcml0eQotICogQGVmeDogTklDIGZyb20gd2hpY2ggdG8gcmVtb3ZlIHRoZSBmaWx0ZXJzCi0gKiBAdGFibGVfaWQ6IFRhYmxlIGZyb20gd2hpY2ggdG8gcmVtb3ZlIHRoZSBmaWx0ZXJzCi0gKiBAcHJpb3JpdHk6IE1heGltdW0gcHJpb3JpdHkgdG8gcmVtb3ZlCi0gKi8KLXZvaWQgZWZ4X2ZpbHRlcl90YWJsZV9jbGVhcihzdHJ1Y3QgZWZ4X25pYyAqZWZ4LAotCQkJICAgIGVudW0gZWZ4X2ZpbHRlcl90YWJsZV9pZCB0YWJsZV9pZCwKLQkJCSAgICBlbnVtIGVmeF9maWx0ZXJfcHJpb3JpdHkgcHJpb3JpdHkpCitzdGF0aWMgdm9pZCBlZnhfZmlsdGVyX3RhYmxlX2NsZWFyKHN0cnVjdCBlZnhfbmljICplZngsCisJCQkJICAgZW51bSBlZnhfZmlsdGVyX3RhYmxlX2lkIHRhYmxlX2lkLAorCQkJCSAgIGVudW0gZWZ4X2ZpbHRlcl9wcmlvcml0eSBwcmlvcml0eSkKIHsKIAlzdHJ1Y3QgZWZ4X2ZpbHRlcl9zdGF0ZSAqc3RhdGUgPSBlZngtPmZpbHRlcl9zdGF0ZTsKIAlzdHJ1Y3QgZWZ4X2ZpbHRlcl90YWJsZSAqdGFibGUgPSAmc3RhdGUtPnRhYmxlW3RhYmxlX2lkXTsKQEAgLTM2MCwxMSArNTA1LDIyIEBACiAJCWlmICh0YWJsZS0+c3BlY1tmaWx0ZXJfaWR4XS5wcmlvcml0eSA8PSBwcmlvcml0eSkKIAkJCWVmeF9maWx0ZXJfdGFibGVfY2xlYXJfZW50cnkoZWZ4LCB0YWJsZSwgZmlsdGVyX2lkeCk7CiAJaWYgKHRhYmxlLT51c2VkID09IDApCi0JCWVmeF9maWx0ZXJfdGFibGVfcmVzZXRfc2VhcmNoX2RlcHRoKHN0YXRlLCB0YWJsZV9pZCk7CisJCWVmeF9maWx0ZXJfdGFibGVfcmVzZXRfc2VhcmNoX2RlcHRoKHRhYmxlKTsKIAogCXNwaW5fdW5sb2NrX2JoKCZzdGF0ZS0+bG9jayk7CiB9CiAKKy8qKgorICogZWZ4X2ZpbHRlcl9jbGVhcl9yeCAtIHJlbW92ZSBSWCBmaWx0ZXJzIGJ5IHByaW9yaXR5CisgKiBAZWZ4OiBOSUMgZnJvbSB3aGljaCB0byByZW1vdmUgdGhlIGZpbHRlcnMKKyAqIEBwcmlvcml0eTogTWF4aW11bSBwcmlvcml0eSB0byByZW1vdmUKKyAqLwordm9pZCBlZnhfZmlsdGVyX2NsZWFyX3J4KHN0cnVjdCBlZnhfbmljICplZngsIGVudW0gZWZ4X2ZpbHRlcl9wcmlvcml0eSBwcmlvcml0eSkKK3sKKwllZnhfZmlsdGVyX3RhYmxlX2NsZWFyKGVmeCwgRUZYX0ZJTFRFUl9UQUJMRV9SWF9JUCwgcHJpb3JpdHkpOworCWVmeF9maWx0ZXJfdGFibGVfY2xlYXIoZWZ4LCBFRlhfRklMVEVSX1RBQkxFX1JYX01BQywgcHJpb3JpdHkpOworfQorCiAvKiBSZXN0b3JlIGZpbHRlciBzdGF0ZXIgYWZ0ZXIgcmVzZXQgKi8KIHZvaWQgZWZ4X3Jlc3RvcmVfZmlsdGVycyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQogewpAQCAtNDA3LDYgKzU2Myw3IEBACiAKIAlpZiAoZWZ4X25pY19yZXYoZWZ4KSA+PSBFRlhfUkVWX0ZBTENPTl9CMCkgewogCQl0YWJsZSA9ICZzdGF0ZS0+dGFibGVbRUZYX0ZJTFRFUl9UQUJMRV9SWF9JUF07CisJCXRhYmxlLT5pZCA9IEVGWF9GSUxURVJfVEFCTEVfUlhfSVA7CiAJCXRhYmxlLT5vZmZzZXQgPSBGUl9CWl9SWF9GSUxURVJfVEJMMDsKIAkJdGFibGUtPnNpemUgPSBGUl9CWl9SWF9GSUxURVJfVEJMMF9ST1dTOwogCQl0YWJsZS0+c3RlcCA9IEZSX0JaX1JYX0ZJTFRFUl9UQkwwX1NURVA7CkBAIC00MTQsNiArNTcxLDcgQEAKIAogCWlmIChlZnhfbmljX3JldihlZngpID49IEVGWF9SRVZfU0lFTkFfQTApIHsKIAkJdGFibGUgPSAmc3RhdGUtPnRhYmxlW0VGWF9GSUxURVJfVEFCTEVfUlhfTUFDXTsKKwkJdGFibGUtPmlkID0gRUZYX0ZJTFRFUl9UQUJMRV9SWF9NQUM7CiAJCXRhYmxlLT5vZmZzZXQgPSBGUl9DWl9SWF9NQUNfRklMVEVSX1RCTDA7CiAJCXRhYmxlLT5zaXplID0gRlJfQ1pfUlhfTUFDX0ZJTFRFUl9UQkwwX1JPV1M7CiAJCXRhYmxlLT5zdGVwID0gRlJfQ1pfUlhfTUFDX0ZJTFRFUl9UQkwwX1NURVA7CkBAIC00MjgsMTAgKzU4Niw5IEBACiAJCQkJCSAgICAgR0ZQX0tFUk5FTCk7CiAJCWlmICghdGFibGUtPnVzZWRfYml0bWFwKQogCQkJZ290byBmYWlsOwotCQl0YWJsZS0+c3BlYyA9IHZtYWxsb2ModGFibGUtPnNpemUgKiBzaXplb2YoKnRhYmxlLT5zcGVjKSk7CisJCXRhYmxlLT5zcGVjID0gdnphbGxvYyh0YWJsZS0+c2l6ZSAqIHNpemVvZigqdGFibGUtPnNwZWMpKTsKIAkJaWYgKCF0YWJsZS0+c3BlYykKIAkJCWdvdG8gZmFpbDsKLQkJbWVtc2V0KHRhYmxlLT5zcGVjLCAwLCB0YWJsZS0+c2l6ZSAqIHNpemVvZigqdGFibGUtPnNwZWMpKTsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9maWx0ZXIuaCBiL2RyaXZlcnMvbmV0L3NmYy9maWx0ZXIuaAppbmRleCBhNTMzMTlkLi44NzJmMjEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvZmlsdGVyLmgKKysrIGIvZHJpdmVycy9uZXQvc2ZjL2ZpbHRlci5oCkBAIC0xMiwzMSArMTIsMjcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKLWVudW0gZWZ4X2ZpbHRlcl90YWJsZV9pZCB7Ci0JRUZYX0ZJTFRFUl9UQUJMRV9SWF9JUCA9IDAsCi0JRUZYX0ZJTFRFUl9UQUJMRV9SWF9NQUMsCi0JRUZYX0ZJTFRFUl9UQUJMRV9DT1VOVCwKLX07Ci0KIC8qKgogICogZW51bSBlZnhfZmlsdGVyX3R5cGUgLSB0eXBlIG9mIGhhcmR3YXJlIGZpbHRlcgotICogQEVGWF9GSUxURVJfUlhfVENQX0ZVTEw6IFJYLCBtYXRjaGluZyBUQ1AvSVB2NCA0LXR1cGxlCi0gKiBARUZYX0ZJTFRFUl9SWF9UQ1BfV0lMRDogUlgsIG1hdGNoaW5nIFRDUC9JUHY0IGRlc3RpbmF0aW9uIChob3N0LCBwb3J0KQotICogQEVGWF9GSUxURVJfUlhfVURQX0ZVTEw6IFJYLCBtYXRjaGluZyBVRFAvSVB2NCA0LXR1cGxlCi0gKiBARUZYX0ZJTFRFUl9SWF9VRFBfV0lMRDogUlgsIG1hdGNoaW5nIFVEUC9JUHY0IGRlc3RpbmF0aW9uIChob3N0LCBwb3J0KQotICogQEVGWF9GSUxURVJfUlhfTUFDX0ZVTEw6IFJYLCBtYXRjaGluZyBFdGhlcm5ldCBkZXN0aW5hdGlvbiBNQUMgYWRkcmVzcywgVklECi0gKiBARUZYX0ZJTFRFUl9SWF9NQUNfV0lMRDogUlgsIG1hdGNoaW5nIEV0aGVybmV0IGRlc3RpbmF0aW9uIE1BQyBhZGRyZXNzCisgKiBARUZYX0ZJTFRFUl9UQ1BfRlVMTDogTWF0Y2hpbmcgVENQL0lQdjQgNC10dXBsZQorICogQEVGWF9GSUxURVJfVENQX1dJTEQ6IE1hdGNoaW5nIFRDUC9JUHY0IGRlc3RpbmF0aW9uIChob3N0LCBwb3J0KQorICogQEVGWF9GSUxURVJfVURQX0ZVTEw6IE1hdGNoaW5nIFVEUC9JUHY0IDQtdHVwbGUKKyAqIEBFRlhfRklMVEVSX1VEUF9XSUxEOiBNYXRjaGluZyBVRFAvSVB2NCBkZXN0aW5hdGlvbiAoaG9zdCwgcG9ydCkKKyAqIEBFRlhfRklMVEVSX01BQ19GVUxMOiBNYXRjaGluZyBFdGhlcm5ldCBkZXN0aW5hdGlvbiBNQUMgYWRkcmVzcywgVklECisgKiBARUZYX0ZJTFRFUl9NQUNfV0lMRDogTWF0Y2hpbmcgRXRoZXJuZXQgZGVzdGluYXRpb24gTUFDIGFkZHJlc3MKKyAqIEBFRlhfRklMVEVSX1VOU1BFQzogTWF0Y2ggdHlwZSBpcyB1bnNwZWNpZmllZAogICoKLSAqIEZhbGNvbiBOSUNzIG9ubHkgc3VwcG9ydCB0aGUgUlggVENQL0lQdjQgYW5kIFVEUC9JUHY0IGZpbHRlciB0eXBlcy4KKyAqIEZhbGNvbiBOSUNzIG9ubHkgc3VwcG9ydCB0aGUgVENQL0lQdjQgYW5kIFVEUC9JUHY0IGZpbHRlciB0eXBlcy4KICAqLwogZW51bSBlZnhfZmlsdGVyX3R5cGUgewotCUVGWF9GSUxURVJfUlhfVENQX0ZVTEwgPSAwLAotCUVGWF9GSUxURVJfUlhfVENQX1dJTEQsCi0JRUZYX0ZJTFRFUl9SWF9VRFBfRlVMTCwKLQlFRlhfRklMVEVSX1JYX1VEUF9XSUxELAotCUVGWF9GSUxURVJfUlhfTUFDX0ZVTEwgPSA0LAotCUVGWF9GSUxURVJfUlhfTUFDX1dJTEQsCi0JRUZYX0ZJTFRFUl9UWVBFX0NPVU5ULAorCUVGWF9GSUxURVJfVENQX0ZVTEwgPSAwLAorCUVGWF9GSUxURVJfVENQX1dJTEQsCisJRUZYX0ZJTFRFUl9VRFBfRlVMTCwKKwlFRlhfRklMVEVSX1VEUF9XSUxELAorCUVGWF9GSUxURVJfTUFDX0ZVTEwgPSA0LAorCUVGWF9GSUxURVJfTUFDX1dJTEQsCisJRUZYX0ZJTFRFUl9UWVBFX0NPVU5ULAkJLyogbnVtYmVyIG9mIHNwZWNpZmljIHR5cGVzICovCisJRUZYX0ZJTFRFUl9VTlNQRUMgPSAweGYsCiB9OwogCiAvKioKQEAgLTYzLDEzICs1OSwxMyBAQAogICogQEVGWF9GSUxURVJfRkxBR19SWF9PVkVSUklERV9JUDogRW5hYmxlcyBhIE1BQyBmaWx0ZXIgdG8gb3ZlcnJpZGUKICAqCWFueSBJUCBmaWx0ZXIgdGhhdCBtYXRjaGVzIHRoZSBzYW1lIHBhY2tldC4gIEJ5IGRlZmF1bHQsIElQCiAgKglmaWx0ZXJzIHRha2UgcHJlY2VkZW5jZS4KLSAqCi0gKiBDdXJyZW50bHksIG5vIGZsYWdzIGFyZSBkZWZpbmVkIGZvciBUWCBmaWx0ZXJzLgorICogQEVGWF9GSUxURVJfRkxBR19SWDogRmlsdGVyIGlzIGZvciBSWAogICovCiBlbnVtIGVmeF9maWx0ZXJfZmxhZ3MgewogCUVGWF9GSUxURVJfRkxBR19SWF9SU1MgPSAweDAxLAogCUVGWF9GSUxURVJfRkxBR19SWF9TQ0FUVEVSID0gMHgwMiwKIAlFRlhfRklMVEVSX0ZMQUdfUlhfT1ZFUlJJREVfSVAgPSAweDA0LAorCUVGWF9GSUxURVJfRkxBR19SWCA9IDB4MDgsCiB9OwogCiAvKioKQEAgLTkxLDk5ICs4NywyNiBAQAogCXUzMglkYXRhWzNdOwogfTsKIAotLyoqCi0gKiBlZnhfZmlsdGVyX3NldF9yeF90Y3BfZnVsbCAtIHNwZWNpZnkgUlggZmlsdGVyIHdpdGggVENQL0lQdjQgZnVsbCBtYXRjaAotICogQHNwZWM6IFNwZWNpZmljYXRpb24gdG8gaW5pdGlhbGlzZQotICogQHNob3N0OiBTb3VyY2UgaG9zdCBhZGRyZXNzIChob3N0IGJ5dGUgb3JkZXIpCi0gKiBAc3BvcnQ6IFNvdXJjZSBwb3J0IChob3N0IGJ5dGUgb3JkZXIpCi0gKiBAZGhvc3Q6IERlc3RpbmF0aW9uIGhvc3QgYWRkcmVzcyAoaG9zdCBieXRlIG9yZGVyKQotICogQGRwb3J0OiBEZXN0aW5hdGlvbiBwb3J0IChob3N0IGJ5dGUgb3JkZXIpCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAotZWZ4X2ZpbHRlcl9zZXRfcnhfdGNwX2Z1bGwoc3RydWN0IGVmeF9maWx0ZXJfc3BlYyAqc3BlYywKLQkJCSAgIHUzMiBzaG9zdCwgdTE2IHNwb3J0LCB1MzIgZGhvc3QsIHUxNiBkcG9ydCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBlZnhfZmlsdGVyX2luaXRfcngoc3RydWN0IGVmeF9maWx0ZXJfc3BlYyAqc3BlYywKKwkJCQkgICAgICBlbnVtIGVmeF9maWx0ZXJfcHJpb3JpdHkgcHJpb3JpdHksCisJCQkJICAgICAgZW51bSBlZnhfZmlsdGVyX2ZsYWdzIGZsYWdzLAorCQkJCSAgICAgIHVuc2lnbmVkIHJ4cV9pZCkKIHsKLQlzcGVjLT50eXBlID0gRUZYX0ZJTFRFUl9SWF9UQ1BfRlVMTDsKLQlzcGVjLT5kYXRhWzBdID0gc3BvcnQgfCBzaG9zdCA8PCAxNjsKLQlzcGVjLT5kYXRhWzFdID0gZHBvcnQgPDwgMTYgfCBzaG9zdCA+PiAxNjsKLQlzcGVjLT5kYXRhWzJdID0gZGhvc3Q7CisJc3BlYy0+dHlwZSA9IEVGWF9GSUxURVJfVU5TUEVDOworCXNwZWMtPnByaW9yaXR5ID0gcHJpb3JpdHk7CisJc3BlYy0+ZmxhZ3MgPSBFRlhfRklMVEVSX0ZMQUdfUlggfCBmbGFnczsKKwlzcGVjLT5kbWFxX2lkID0gcnhxX2lkOwogfQogCi0vKioKLSAqIGVmeF9maWx0ZXJfc2V0X3J4X3RjcF93aWxkIC0gc3BlY2lmeSBSWCBmaWx0ZXIgd2l0aCBUQ1AvSVB2NCB3aWxkY2FyZCBtYXRjaAotICogQHNwZWM6IFNwZWNpZmljYXRpb24gdG8gaW5pdGlhbGlzZQotICogQGRob3N0OiBEZXN0aW5hdGlvbiBob3N0IGFkZHJlc3MgKGhvc3QgYnl0ZSBvcmRlcikKLSAqIEBkcG9ydDogRGVzdGluYXRpb24gcG9ydCAoaG9zdCBieXRlIG9yZGVyKQotICovCi1zdGF0aWMgaW5saW5lIHZvaWQKLWVmeF9maWx0ZXJfc2V0X3J4X3RjcF93aWxkKHN0cnVjdCBlZnhfZmlsdGVyX3NwZWMgKnNwZWMsIHUzMiBkaG9zdCwgdTE2IGRwb3J0KQotewotCXNwZWMtPnR5cGUgPSBFRlhfRklMVEVSX1JYX1RDUF9XSUxEOwotCXNwZWMtPmRhdGFbMF0gPSAwOwotCXNwZWMtPmRhdGFbMV0gPSBkcG9ydCA8PCAxNjsKLQlzcGVjLT5kYXRhWzJdID0gZGhvc3Q7Ci19Ci0KLS8qKgotICogZWZ4X2ZpbHRlcl9zZXRfcnhfdWRwX2Z1bGwgLSBzcGVjaWZ5IFJYIGZpbHRlciB3aXRoIFVEUC9JUHY0IGZ1bGwgbWF0Y2gKLSAqIEBzcGVjOiBTcGVjaWZpY2F0aW9uIHRvIGluaXRpYWxpc2UKLSAqIEBzaG9zdDogU291cmNlIGhvc3QgYWRkcmVzcyAoaG9zdCBieXRlIG9yZGVyKQotICogQHNwb3J0OiBTb3VyY2UgcG9ydCAoaG9zdCBieXRlIG9yZGVyKQotICogQGRob3N0OiBEZXN0aW5hdGlvbiBob3N0IGFkZHJlc3MgKGhvc3QgYnl0ZSBvcmRlcikKLSAqIEBkcG9ydDogRGVzdGluYXRpb24gcG9ydCAoaG9zdCBieXRlIG9yZGVyKQotICovCi1zdGF0aWMgaW5saW5lIHZvaWQKLWVmeF9maWx0ZXJfc2V0X3J4X3VkcF9mdWxsKHN0cnVjdCBlZnhfZmlsdGVyX3NwZWMgKnNwZWMsCi0JCQkgICB1MzIgc2hvc3QsIHUxNiBzcG9ydCwgdTMyIGRob3N0LCB1MTYgZHBvcnQpCi17Ci0Jc3BlYy0+dHlwZSA9IEVGWF9GSUxURVJfUlhfVURQX0ZVTEw7Ci0Jc3BlYy0+ZGF0YVswXSA9IHNwb3J0IHwgc2hvc3QgPDwgMTY7Ci0Jc3BlYy0+ZGF0YVsxXSA9IGRwb3J0IDw8IDE2IHwgc2hvc3QgPj4gMTY7Ci0Jc3BlYy0+ZGF0YVsyXSA9IGRob3N0OwotfQotCi0vKioKLSAqIGVmeF9maWx0ZXJfc2V0X3J4X3VkcF93aWxkIC0gc3BlY2lmeSBSWCBmaWx0ZXIgd2l0aCBVRFAvSVB2NCB3aWxkY2FyZCBtYXRjaAotICogQHNwZWM6IFNwZWNpZmljYXRpb24gdG8gaW5pdGlhbGlzZQotICogQGRob3N0OiBEZXN0aW5hdGlvbiBob3N0IGFkZHJlc3MgKGhvc3QgYnl0ZSBvcmRlcikKLSAqIEBkcG9ydDogRGVzdGluYXRpb24gcG9ydCAoaG9zdCBieXRlIG9yZGVyKQotICovCi1zdGF0aWMgaW5saW5lIHZvaWQKLWVmeF9maWx0ZXJfc2V0X3J4X3VkcF93aWxkKHN0cnVjdCBlZnhfZmlsdGVyX3NwZWMgKnNwZWMsIHUzMiBkaG9zdCwgdTE2IGRwb3J0KQotewotCXNwZWMtPnR5cGUgPSBFRlhfRklMVEVSX1JYX1VEUF9XSUxEOwotCXNwZWMtPmRhdGFbMF0gPSBkcG9ydDsKLQlzcGVjLT5kYXRhWzFdID0gMDsKLQlzcGVjLT5kYXRhWzJdID0gZGhvc3Q7Ci19Ci0KLS8qKgotICogZWZ4X2ZpbHRlcl9zZXRfcnhfbWFjX2Z1bGwgLSBzcGVjaWZ5IFJYIGZpbHRlciB3aXRoIE1BQyBmdWxsIG1hdGNoCi0gKiBAc3BlYzogU3BlY2lmaWNhdGlvbiB0byBpbml0aWFsaXNlCi0gKiBAdmlkOiBWTEFOIElECi0gKiBAYWRkcjogRGVzdGluYXRpb24gTUFDIGFkZHJlc3MKLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGVmeF9maWx0ZXJfc2V0X3J4X21hY19mdWxsKHN0cnVjdCBlZnhfZmlsdGVyX3NwZWMgKnNwZWMsCi0JCQkJCSAgICAgIHUxNiB2aWQsIGNvbnN0IHU4ICphZGRyKQotewotCXNwZWMtPnR5cGUgPSBFRlhfRklMVEVSX1JYX01BQ19GVUxMOwotCXNwZWMtPmRhdGFbMF0gPSB2aWQ7Ci0Jc3BlYy0+ZGF0YVsxXSA9IGFkZHJbMl0gPDwgMjQgfCBhZGRyWzNdIDw8IDE2IHwgYWRkcls0XSA8PCA4IHwgYWRkcls1XTsKLQlzcGVjLT5kYXRhWzJdID0gYWRkclswXSA8PCA4IHwgYWRkclsxXTsKLX0KLQotLyoqCi0gKiBlZnhfZmlsdGVyX3NldF9yeF9tYWNfZnVsbCAtIHNwZWNpZnkgUlggZmlsdGVyIHdpdGggTUFDIHdpbGRjYXJkIG1hdGNoCi0gKiBAc3BlYzogU3BlY2lmaWNhdGlvbiB0byBpbml0aWFsaXNlCi0gKiBAYWRkcjogRGVzdGluYXRpb24gTUFDIGFkZHJlc3MKLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGVmeF9maWx0ZXJfc2V0X3J4X21hY193aWxkKHN0cnVjdCBlZnhfZmlsdGVyX3NwZWMgKnNwZWMsCi0JCQkJCSAgICAgIGNvbnN0IHU4ICphZGRyKQotewotCXNwZWMtPnR5cGUgPSBFRlhfRklMVEVSX1JYX01BQ19XSUxEOwotCXNwZWMtPmRhdGFbMF0gPSAwOwotCXNwZWMtPmRhdGFbMV0gPSBhZGRyWzJdIDw8IDI0IHwgYWRkclszXSA8PCAxNiB8IGFkZHJbNF0gPDwgOCB8IGFkZHJbNV07Ci0Jc3BlYy0+ZGF0YVsyXSA9IGFkZHJbMF0gPDwgOCB8IGFkZHJbMV07Ci19CitleHRlcm4gaW50IGVmeF9maWx0ZXJfc2V0X2lwdjRfbG9jYWwoc3RydWN0IGVmeF9maWx0ZXJfc3BlYyAqc3BlYywgdTggcHJvdG8sCisJCQkJICAgICBfX2JlMzIgaG9zdCwgX19iZTE2IHBvcnQpOworZXh0ZXJuIGludCBlZnhfZmlsdGVyX3NldF9pcHY0X2Z1bGwoc3RydWN0IGVmeF9maWx0ZXJfc3BlYyAqc3BlYywgdTggcHJvdG8sCisJCQkJICAgIF9fYmUzMiBob3N0LCBfX2JlMTYgcG9ydCwKKwkJCQkgICAgX19iZTMyIHJob3N0LCBfX2JlMTYgcnBvcnQpOworZXh0ZXJuIGludCBlZnhfZmlsdGVyX3NldF9ldGhfbG9jYWwoc3RydWN0IGVmeF9maWx0ZXJfc3BlYyAqc3BlYywKKwkJCQkgICAgdTE2IHZpZCwgY29uc3QgdTggKmFkZHIpOworZW51bSB7CisJRUZYX0ZJTFRFUl9WSURfVU5TUEVDID0gMHhmZmZmLAorfTsKIAogI2VuZGlmIC8qIEVGWF9GSUxURVJfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL2lvLmggYi9kcml2ZXJzL25ldC9zZmMvaW8uaAppbmRleCA4NWE5OWZlLi42ZGE0YWUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvaW8uaAorKysgYi9kcml2ZXJzL25ldC9zZmMvaW8uaApAQCAtMjIsMjggKzIyLDM5IEBACiAgKgogICogTm90ZXMgb24gbG9ja2luZyBzdHJhdGVneToKICAqCi0gKiBNb3N0IE5JQyByZWdpc3RlcnMgcmVxdWlyZSAxNi1ieXRlIChvciA4LWJ5dGUsIGZvciBTUkFNKSBhdG9taWMgd3JpdGVzCi0gKiB3aGljaCBuZWNlc3NpdGF0ZXMgbG9ja2luZy4KLSAqIFVuZGVyIG5vcm1hbCBvcGVyYXRpb24gZmV3IHdyaXRlcyB0byBOSUMgcmVnaXN0ZXJzIGFyZSBtYWRlIGFuZCB0aGVzZQotICogcmVnaXN0ZXJzIChFVlFfUlBUUl9SRUcsIFJYX0RFU0NfVVBEX1JFRyBhbmQgVFhfREVTQ19VUERfUkVHKSBhcmUgc3BlY2lhbAotICogY2FzZWQgdG8gYWxsb3cgNC1ieXRlIChoZW5jZSBsb2NrbGVzcykgYWNjZXNzZXMuCisgKiBNb3N0IENTUnMgYXJlIDEyOC1iaXQgKG93b3JkKSBhbmQgdGhlcmVmb3JlIGNhbm5vdCBiZSByZWFkIG9yCisgKiB3cml0dGVuIGF0b21pY2FsbHkuICBBY2Nlc3MgZnJvbSB0aGUgaG9zdCBpcyBidWZmZXJlZCBieSB0aGUgQnVzCisgKiBJbnRlcmZhY2UgVW5pdCAoQklVKS4gIFdoZW5ldmVyIHRoZSBob3N0IHJlYWRzIGZyb20gdGhlIGxvd2VzdAorICogYWRkcmVzcyBvZiBzdWNoIGEgcmVnaXN0ZXIsIG9yIGZyb20gdGhlIGFkZHJlc3Mgb2YgYSBkaWZmZXJlbnQgc3VjaAorICogcmVnaXN0ZXIsIHRoZSBCSVUgbGF0Y2hlcyB0aGUgcmVnaXN0ZXIncyB2YWx1ZS4gIFN1YnNlcXVlbnQgcmVhZHMKKyAqIGZyb20gaGlnaGVyIGFkZHJlc3NlcyBvZiB0aGUgc2FtZSByZWdpc3RlciB3aWxsIHJlYWQgdGhlIGxhdGNoZWQKKyAqIHZhbHVlLiAgV2hlbmV2ZXIgdGhlIGhvc3Qgd3JpdGVzIHBhcnQgb2Ygc3VjaCBhIHJlZ2lzdGVyLCB0aGUgQklVCisgKiBjb2xsZWN0cyB0aGUgd3JpdHRlbiB2YWx1ZSBhbmQgZG9lcyBub3Qgd3JpdGUgdG8gdGhlIHVuZGVybHlpbmcKKyAqIHJlZ2lzdGVyIHVudGlsIGFsbCA0IGR3b3JkcyBoYXZlIGJlZW4gd3JpdHRlbi4gIEEgc2ltaWxhciBidWZmZXJpbmcKKyAqIHNjaGVtZSBhcHBsaWVzIHRvIGhvc3QgYWNjZXNzIHRvIHRoZSBOSUMncyA2NC1iaXQgU1JBTS4KICAqCi0gKiBJdCAqaXMqIHNhZmUgdG8gd3JpdGUgdG8gdGhlc2UgNC1ieXRlIHJlZ2lzdGVycyBpbiB0aGUgbWlkZGxlIG9mIGFuCi0gKiBhY2Nlc3MgdG8gYW4gOC1ieXRlIG9yIDE2LWJ5dGUgcmVnaXN0ZXIuICBXZSB0aGVyZWZvcmUgdXNlIGEKLSAqIHNwaW5sb2NrIHRvIHByb3RlY3QgYWNjZXNzZXMgdG8gdGhlIGxhcmdlciByZWdpc3RlcnMsIGJ1dCBubyBsb2NrcwotICogZm9yIHRoZSA0LWJ5dGUgcmVnaXN0ZXJzLgorICogQWNjZXNzIHRvIGRpZmZlcmVudCBDU1JzIGFuZCA2NC1iaXQgU1JBTSB3b3JkcyBtdXN0IGJlIHNlcmlhbGlzZWQsCisgKiBzaW5jZSBpbnRlcmxlYXZlZCBhY2Nlc3MgY2FuIHJlc3VsdCBpbiBsb3N0IHdyaXRlcyBvciBsb3N0CisgKiBpbmZvcm1hdGlvbiBmcm9tIHJlYWQtdG8tY2xlYXIgZmllbGRzLiAgV2UgdXNlIGVmeF9uaWM6OmJpdV9sb2NrCisgKiBmb3IgdGhpcy4gIChXZSBjb3VsZCB1c2Ugc2VwYXJhdGUgbG9ja3MgZm9yIHJlYWQgYW5kIHdyaXRlLCBidXQKKyAqIHRoaXMgaXMgbm90IG5vcm1hbGx5IGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjay4pCiAgKgotICogQSB3cml0ZSBiYXJyaWVyIGlzIG5lZWRlZCB0byBlbnN1cmUgdGhhdCBEVzMgaXMgd3JpdHRlbiBhZnRlciBEVzAvMS8yCi0gKiBkdWUgdG8gdGhlIHdheSB0aGUgMTZieXRlIHJlZ2lzdGVycyBhcmUgImNvbGxlY3RlZCIgaW4gdGhlIEJJVS4KKyAqIFRoZSBETUEgZGVzY3JpcHRvciBwb2ludGVycyAoUlhfREVTQ19VUEQgYW5kIFRYX0RFU0NfVVBEKSBhcmUKKyAqIDEyOC1iaXQgYnV0IGFyZSBzcGVjaWFsLWNhc2VkIGluIHRoZSBCSVUgdG8gYXZvaWQgdGhlIG5lZWQgZm9yCisgKiBsb2NraW5nIGluIHRoZSBob3N0OgogICoKLSAqIFdlIGFsc28gbG9jayB3aGVuIGNhcnJ5aW5nIG91dCByZWFkcywgdG8gZW5zdXJlIGNvbnNpc3RlbmN5IG9mIHRoZQotICogZGF0YSAobWFkZSBwb3NzaWJsZSBzaW5jZSB0aGUgQklVIHJlYWRzIGFsbCAxMjggYml0cyBpbnRvIGEgY2FjaGUpLgotICogUmVhZHMgYXJlIHZlcnkgcmFyZSwgc28gdGhpcyBpc24ndCBhIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlCi0gKiBpbXBhY3QuICAoTW9zdCBkYXRhIHRyYW5zZmVycmVkIGZyb20gTklDIHRvIGhvc3QgaXMgRE1BZWQgZGlyZWN0bHkKLSAqIGludG8gaG9zdCBtZW1vcnkpLgotICoKLSAqIEkvTyBCQVIgYWNjZXNzIHVzZXMgbG9ja3MgZm9yIGJvdGggcmVhZHMgYW5kIHdyaXRlcyAoYnV0IGlzIG9ubHkgcHJvdmlkZWQKLSAqIGZvciB0ZXN0aW5nIHB1cnBvc2VzKS4KKyAqIC0gVGhleSBhcmUgd3JpdGUtb25seS4KKyAqIC0gVGhlIHNlbWFudGljcyBvZiB3cml0aW5nIHRvIHRoZXNlIHJlZ2lzdGVycyBhcmUgc3VjaCB0aGF0CisgKiAgIHJlcGxhY2luZyB0aGUgbG93IDk2IGJpdHMgd2l0aCB6ZXJvIGRvZXMgbm90IGFmZmVjdCBmdW5jdGlvbmFsaXR5LgorICogLSBJZiB0aGUgaG9zdCB3cml0ZXMgdG8gdGhlIGxhc3QgZHdvcmQgYWRkcmVzcyBvZiBzdWNoIGEgcmVnaXN0ZXIKKyAqICAgKGkuZS4gdGhlIGhpZ2ggMzIgYml0cykgdGhlIHVuZGVybHlpbmcgcmVnaXN0ZXIgd2lsbCBhbHdheXMgYmUKKyAqICAgd3JpdHRlbi4gIElmIHRoZSBjb2xsZWN0b3IgZG9lcyBub3QgaG9sZCB2YWx1ZXMgZm9yIHRoZSBsb3cgOTYKKyAqICAgYml0cyBvZiB0aGUgcmVnaXN0ZXIsIHRoZXkgd2lsbCBiZSB3cml0dGVuIGFzIHplcm8uICBXcml0aW5nIHRvCisgKiAgIHRoZSBsYXN0IHF3b3JkIGRvZXMgbm90IGhhdmUgdGhpcyBlZmZlY3QgYW5kIG11c3Qgbm90IGJlIGRvbmUuCisgKiAtIElmIHRoZSBob3N0IHdyaXRlcyB0byB0aGUgYWRkcmVzcyBvZiBhbnkgb3RoZXIgcGFydCBvZiBzdWNoIGEKKyAqICAgcmVnaXN0ZXIgd2hpbGUgdGhlIGNvbGxlY3RvciBhbHJlYWR5IGhvbGRzIHZhbHVlcyBmb3Igc29tZSBvdGhlcgorICogICByZWdpc3RlciwgdGhlIHdyaXRlIGlzIGRpc2NhcmRlZCBhbmQgdGhlIGNvbGxlY3RvciBtYWludGFpbnMgaXRzCisgKiAgIGN1cnJlbnQgc3RhdGUuCiAgKi8KIAogI2lmIEJJVFNfUEVSX0xPTkcgPT0gNjQKQEAgLTcyLDcgKzgzLDcgQEAKIAlyZXR1cm4gKF9fZm9yY2UgX19sZTMyKV9fcmF3X3JlYWRsKGVmeC0+bWVtYmFzZSArIHJlZyk7CiB9CiAKLS8qIFdyaXRlcyB0byBhIG5vcm1hbCAxNi1ieXRlIEVmeCByZWdpc3RlciwgbG9ja2luZyBhcyBhcHByb3ByaWF0ZS4gKi8KKy8qIFdyaXRlIGEgbm9ybWFsIDEyOC1iaXQgQ1NSLCBsb2NraW5nIGFzIGFwcHJvcHJpYXRlLiAqLwogc3RhdGljIGlubGluZSB2b2lkIGVmeF93cml0ZW8oc3RydWN0IGVmeF9uaWMgKmVmeCwgZWZ4X293b3JkX3QgKnZhbHVlLAogCQkJICAgICAgdW5zaWduZWQgaW50IHJlZykKIHsKQEAgLTg1LDIxICs5NiwxOCBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZlZngtPmJpdV9sb2NrLCBmbGFncyk7CiAjaWZkZWYgRUZYX1VTRV9RV09SRF9JTwogCV9lZnhfd3JpdGVxKGVmeCwgdmFsdWUtPnU2NFswXSwgcmVnICsgMCk7Ci0Jd21iKCk7CiAJX2VmeF93cml0ZXEoZWZ4LCB2YWx1ZS0+dTY0WzFdLCByZWcgKyA4KTsKICNlbHNlCiAJX2VmeF93cml0ZWQoZWZ4LCB2YWx1ZS0+dTMyWzBdLCByZWcgKyAwKTsKIAlfZWZ4X3dyaXRlZChlZngsIHZhbHVlLT51MzJbMV0sIHJlZyArIDQpOwogCV9lZnhfd3JpdGVkKGVmeCwgdmFsdWUtPnUzMlsyXSwgcmVnICsgOCk7Ci0Jd21iKCk7CiAJX2VmeF93cml0ZWQoZWZ4LCB2YWx1ZS0+dTMyWzNdLCByZWcgKyAxMik7CiAjZW5kaWYKIAltbWlvd2IoKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlZngtPmJpdV9sb2NrLCBmbGFncyk7CiB9CiAKLS8qIFdyaXRlIGFuIDgtYnl0ZSBOSUMgU1JBTSBlbnRyeSB0aHJvdWdoIHRoZSBzdXBwbGllZCBtYXBwaW5nLAotICogbG9ja2luZyBhcyBhcHByb3ByaWF0ZS4gKi8KKy8qIFdyaXRlIDY0LWJpdCBTUkFNIHRocm91Z2ggdGhlIHN1cHBsaWVkIG1hcHBpbmcsIGxvY2tpbmcgYXMgYXBwcm9wcmlhdGUuICovCiBzdGF0aWMgaW5saW5lIHZvaWQgZWZ4X3NyYW1fd3JpdGVxKHN0cnVjdCBlZnhfbmljICplZngsIHZvaWQgX19pb21lbSAqbWVtYmFzZSwKIAkJCQkgICBlZnhfcXdvcmRfdCAqdmFsdWUsIHVuc2lnbmVkIGludCBpbmRleCkKIHsKQEAgLTExNSwzNiArMTIzLDI1IEBACiAJX19yYXdfd3JpdGVxKChfX2ZvcmNlIHU2NCl2YWx1ZS0+dTY0WzBdLCBtZW1iYXNlICsgYWRkcik7CiAjZWxzZQogCV9fcmF3X3dyaXRlbCgoX19mb3JjZSB1MzIpdmFsdWUtPnUzMlswXSwgbWVtYmFzZSArIGFkZHIpOwotCXdtYigpOwogCV9fcmF3X3dyaXRlbCgoX19mb3JjZSB1MzIpdmFsdWUtPnUzMlsxXSwgbWVtYmFzZSArIGFkZHIgKyA0KTsKICNlbmRpZgogCW1taW93YigpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVmeC0+Yml1X2xvY2ssIGZsYWdzKTsKIH0KIAotLyogV3JpdGUgZHdvcmQgdG8gTklDIHJlZ2lzdGVyIHRoYXQgYWxsb3dzIHBhcnRpYWwgd3JpdGVzCi0gKgotICogU29tZSByZWdpc3RlcnMgKEVWUV9SUFRSX1JFRywgUlhfREVTQ19VUERfUkVHIGFuZAotICogVFhfREVTQ19VUERfUkVHKSBjYW4gYmUgd3JpdHRlbiB0byBhcyBhIHNpbmdsZSBkd29yZC4gIFRoaXMgYWxsb3dzCi0gKiBmb3IgbG9ja2xlc3Mgd3JpdGVzLgotICovCisvKiBXcml0ZSBhIDMyLWJpdCBDU1Igb3IgdGhlIGxhc3QgZHdvcmQgb2YgYSBzcGVjaWFsIDEyOC1iaXQgQ1NSICovCiBzdGF0aWMgaW5saW5lIHZvaWQgZWZ4X3dyaXRlZChzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCBlZnhfZHdvcmRfdCAqdmFsdWUsCiAJCQkgICAgICB1bnNpZ25lZCBpbnQgcmVnKQogewogCW5ldGlmX3ZkYmcoZWZ4LCBodywgZWZ4LT5uZXRfZGV2LAotCQkgICAid3JpdGluZyBwYXJ0aWFsIHJlZ2lzdGVyICV4IHdpdGggIkVGWF9EV09SRF9GTVQiXG4iLAorCQkgICAid3JpdGluZyByZWdpc3RlciAleCB3aXRoICJFRlhfRFdPUkRfRk1UIlxuIiwKIAkJICAgcmVnLCBFRlhfRFdPUkRfVkFMKCp2YWx1ZSkpOwogCiAJLyogTm8gbG9jayByZXF1aXJlZCAqLwogCV9lZnhfd3JpdGVkKGVmeCwgdmFsdWUtPnUzMlswXSwgcmVnKTsKIH0KIAotLyogUmVhZCBmcm9tIGEgTklDIHJlZ2lzdGVyCi0gKgotICogVGhpcyByZWFkcyBhbiBlbnRpcmUgMTYtYnl0ZSByZWdpc3RlciBpbiBvbmUgZ28sIGxvY2tpbmcgYXMKLSAqIGFwcHJvcHJpYXRlLiAgSXQgaXMgZXNzZW50aWFsIHRvIHJlYWQgdGhlIGZpcnN0IGR3b3JkIGZpcnN0LCBhcyB0aGlzCi0gKiBwcm9tcHRzIHRoZSBOSUMgdG8gbG9hZCB0aGUgY3VycmVudCB2YWx1ZSBpbnRvIHRoZSBzaGFkb3cgcmVnaXN0ZXIuCi0gKi8KKy8qIFJlYWQgYSAxMjgtYml0IENTUiwgbG9ja2luZyBhcyBhcHByb3ByaWF0ZS4gKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBlZnhfcmVhZG8oc3RydWN0IGVmeF9uaWMgKmVmeCwgZWZ4X293b3JkX3QgKnZhbHVlLAogCQkJICAgICB1bnNpZ25lZCBpbnQgcmVnKQogewpAQCAtMTUyLDcgKzE0OSw2IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZWZ4LT5iaXVfbG9jaywgZmxhZ3MpOwogCXZhbHVlLT51MzJbMF0gPSBfZWZ4X3JlYWRkKGVmeCwgcmVnICsgMCk7Ci0Jcm1iKCk7CiAJdmFsdWUtPnUzMlsxXSA9IF9lZnhfcmVhZGQoZWZ4LCByZWcgKyA0KTsKIAl2YWx1ZS0+dTMyWzJdID0gX2VmeF9yZWFkZChlZngsIHJlZyArIDgpOwogCXZhbHVlLT51MzJbM10gPSBfZWZ4X3JlYWRkKGVmeCwgcmVnICsgMTIpOwpAQCAtMTYzLDggKzE1OSw3IEBACiAJCSAgIEVGWF9PV09SRF9WQUwoKnZhbHVlKSk7CiB9CiAKLS8qIFJlYWQgYW4gOC1ieXRlIFNSQU0gZW50cnkgdGhyb3VnaCBzdXBwbGllZCBtYXBwaW5nLAotICogbG9ja2luZyBhcyBhcHByb3ByaWF0ZS4gKi8KKy8qIFJlYWQgNjQtYml0IFNSQU0gdGhyb3VnaCB0aGUgc3VwcGxpZWQgbWFwcGluZywgbG9ja2luZyBhcyBhcHByb3ByaWF0ZS4gKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBlZnhfc3JhbV9yZWFkcShzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCB2b2lkIF9faW9tZW0gKm1lbWJhc2UsCiAJCQkJICBlZnhfcXdvcmRfdCAqdmFsdWUsIHVuc2lnbmVkIGludCBpbmRleCkKIHsKQEAgLTE3Niw3ICsxNzEsNiBAQAogCXZhbHVlLT51NjRbMF0gPSAoX19mb3JjZSBfX2xlNjQpX19yYXdfcmVhZHEobWVtYmFzZSArIGFkZHIpOwogI2Vsc2UKIAl2YWx1ZS0+dTMyWzBdID0gKF9fZm9yY2UgX19sZTMyKV9fcmF3X3JlYWRsKG1lbWJhc2UgKyBhZGRyKTsKLQlybWIoKTsKIAl2YWx1ZS0+dTMyWzFdID0gKF9fZm9yY2UgX19sZTMyKV9fcmF3X3JlYWRsKG1lbWJhc2UgKyBhZGRyICsgNCk7CiAjZW5kaWYKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlZngtPmJpdV9sb2NrLCBmbGFncyk7CkBAIC0xODYsNyArMTgwLDcgQEAKIAkJICAgYWRkciwgRUZYX1FXT1JEX1ZBTCgqdmFsdWUpKTsKIH0KIAotLyogUmVhZCBkd29yZCBmcm9tIHJlZ2lzdGVyIHRoYXQgYWxsb3dzIHBhcnRpYWwgd3JpdGVzIChzaWMpICovCisvKiBSZWFkIGEgMzItYml0IENTUiBvciBTUkFNICovCiBzdGF0aWMgaW5saW5lIHZvaWQgZWZ4X3JlYWRkKHN0cnVjdCBlZnhfbmljICplZngsIGVmeF9kd29yZF90ICp2YWx1ZSwKIAkJCQl1bnNpZ25lZCBpbnQgcmVnKQogewpAQCAtMTk2LDI4ICsxOTAsMjggQEAKIAkJICAgcmVnLCBFRlhfRFdPUkRfVkFMKCp2YWx1ZSkpOwogfQogCi0vKiBXcml0ZSB0byBhIHJlZ2lzdGVyIGZvcm1pbmcgcGFydCBvZiBhIHRhYmxlICovCisvKiBXcml0ZSBhIDEyOC1iaXQgQ1NSIGZvcm1pbmcgcGFydCBvZiBhIHRhYmxlICovCiBzdGF0aWMgaW5saW5lIHZvaWQgZWZ4X3dyaXRlb190YWJsZShzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCBlZnhfb3dvcmRfdCAqdmFsdWUsCiAJCQkJICAgICAgdW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgaW50IGluZGV4KQogewogCWVmeF93cml0ZW8oZWZ4LCB2YWx1ZSwgcmVnICsgaW5kZXggKiBzaXplb2YoZWZ4X293b3JkX3QpKTsKIH0KIAotLyogUmVhZCB0byBhIHJlZ2lzdGVyIGZvcm1pbmcgcGFydCBvZiBhIHRhYmxlICovCisvKiBSZWFkIGEgMTI4LWJpdCBDU1IgZm9ybWluZyBwYXJ0IG9mIGEgdGFibGUgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBlZnhfcmVhZG9fdGFibGUoc3RydWN0IGVmeF9uaWMgKmVmeCwgZWZ4X293b3JkX3QgKnZhbHVlLAogCQkJCSAgICAgdW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgaW50IGluZGV4KQogewogCWVmeF9yZWFkbyhlZngsIHZhbHVlLCByZWcgKyBpbmRleCAqIHNpemVvZihlZnhfb3dvcmRfdCkpOwogfQogCi0vKiBXcml0ZSB0byBhIGR3b3JkIHJlZ2lzdGVyIGZvcm1pbmcgcGFydCBvZiBhIHRhYmxlICovCisvKiBXcml0ZSBhIDMyLWJpdCBDU1IgZm9ybWluZyBwYXJ0IG9mIGEgdGFibGUsIG9yIDMyLWJpdCBTUkFNICovCiBzdGF0aWMgaW5saW5lIHZvaWQgZWZ4X3dyaXRlZF90YWJsZShzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCBlZnhfZHdvcmRfdCAqdmFsdWUsCiAJCQkJICAgICAgIHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGludCBpbmRleCkKIHsKIAllZnhfd3JpdGVkKGVmeCwgdmFsdWUsIHJlZyArIGluZGV4ICogc2l6ZW9mKGVmeF9vd29yZF90KSk7CiB9CiAKLS8qIFJlYWQgZnJvbSBhIGR3b3JkIHJlZ2lzdGVyIGZvcm1pbmcgcGFydCBvZiBhIHRhYmxlICovCisvKiBSZWFkIGEgMzItYml0IENTUiBmb3JtaW5nIHBhcnQgb2YgYSB0YWJsZSwgb3IgMzItYml0IFNSQU0gKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBlZnhfcmVhZGRfdGFibGUoc3RydWN0IGVmeF9uaWMgKmVmeCwgZWZ4X2R3b3JkX3QgKnZhbHVlLAogCQkJCSAgIHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGludCBpbmRleCkKIHsKQEAgLTIzMSwyOSArMjI1LDU0IEBACiAjZGVmaW5lIEVGWF9QQUdFRF9SRUcocGFnZSwgcmVnKSBcCiAJKChwYWdlKSAqIEVGWF9QQUdFX0JMT0NLX1NJWkUgKyAocmVnKSkKIAotLyogQXMgZm9yIGVmeF93cml0ZW8oKSwgYnV0IGZvciBhIHBhZ2UtbWFwcGVkIHJlZ2lzdGVyLiAqLwotc3RhdGljIGlubGluZSB2b2lkIGVmeF93cml0ZW9fcGFnZShzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCBlZnhfb3dvcmRfdCAqdmFsdWUsCi0JCQkJICAgdW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgaW50IHBhZ2UpCisvKiBXcml0ZSB0aGUgd2hvbGUgb2YgUlhfREVTQ19VUEQgb3IgVFhfREVTQ19VUEQgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfZWZ4X3dyaXRlb19wYWdlKHN0cnVjdCBlZnhfbmljICplZngsIGVmeF9vd29yZF90ICp2YWx1ZSwKKwkJCQkgICAgdW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgaW50IHBhZ2UpCiB7Ci0JZWZ4X3dyaXRlbyhlZngsIHZhbHVlLCBFRlhfUEFHRURfUkVHKHBhZ2UsIHJlZykpOwotfQorCXJlZyA9IEVGWF9QQUdFRF9SRUcocGFnZSwgcmVnKTsKIAotLyogQXMgZm9yIGVmeF93cml0ZWQoKSwgYnV0IGZvciBhIHBhZ2UtbWFwcGVkIHJlZ2lzdGVyLiAqLwotc3RhdGljIGlubGluZSB2b2lkIGVmeF93cml0ZWRfcGFnZShzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCBlZnhfZHdvcmRfdCAqdmFsdWUsCi0JCQkJICAgdW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgaW50IHBhZ2UpCisJbmV0aWZfdmRiZyhlZngsIGh3LCBlZngtPm5ldF9kZXYsCisJCSAgICJ3cml0aW5nIHJlZ2lzdGVyICV4IHdpdGggIiBFRlhfT1dPUkRfRk1UICJcbiIsIHJlZywKKwkJICAgRUZYX09XT1JEX1ZBTCgqdmFsdWUpKTsKKworI2lmZGVmIEVGWF9VU0VfUVdPUkRfSU8KKwlfZWZ4X3dyaXRlcShlZngsIHZhbHVlLT51NjRbMF0sIHJlZyArIDApOworI2Vsc2UKKwlfZWZ4X3dyaXRlZChlZngsIHZhbHVlLT51MzJbMF0sIHJlZyArIDApOworCV9lZnhfd3JpdGVkKGVmeCwgdmFsdWUtPnUzMlsxXSwgcmVnICsgNCk7CisjZW5kaWYKKwlfZWZ4X3dyaXRlZChlZngsIHZhbHVlLT51MzJbMl0sIHJlZyArIDgpOworCV9lZnhfd3JpdGVkKGVmeCwgdmFsdWUtPnUzMlszXSwgcmVnICsgMTIpOworfQorI2RlZmluZSBlZnhfd3JpdGVvX3BhZ2UoZWZ4LCB2YWx1ZSwgcmVnLCBwYWdlKQkJCQlcCisJX2VmeF93cml0ZW9fcGFnZShlZngsIHZhbHVlLAkJCQkJXAorCQkJIHJlZyArCQkJCQkJXAorCQkJIEJVSUxEX0JVR19PTl9aRVJPKChyZWcpICE9IDB4ODMwICYmIChyZWcpICE9IDB4YTEwKSwgXAorCQkJIHBhZ2UpCisKKy8qIFdyaXRlIGEgcGFnZS1tYXBwZWQgMzItYml0IENTUiAoRVZRX1JQVFIgb3IgdGhlIGhpZ2ggYml0cyBvZgorICogUlhfREVTQ19VUEQgb3IgVFhfREVTQ19VUEQpCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfZWZ4X3dyaXRlZF9wYWdlKHN0cnVjdCBlZnhfbmljICplZngsIGVmeF9kd29yZF90ICp2YWx1ZSwKKwkJCQkgICAgdW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgaW50IHBhZ2UpCiB7CiAJZWZ4X3dyaXRlZChlZngsIHZhbHVlLCBFRlhfUEFHRURfUkVHKHBhZ2UsIHJlZykpOwogfQorI2RlZmluZSBlZnhfd3JpdGVkX3BhZ2UoZWZ4LCB2YWx1ZSwgcmVnLCBwYWdlKQkJCQlcCisJX2VmeF93cml0ZWRfcGFnZShlZngsIHZhbHVlLAkJCQkJXAorCQkJIHJlZyArCQkJCQkJXAorCQkJIEJVSUxEX0JVR19PTl9aRVJPKChyZWcpICE9IDB4NDAwICYmIChyZWcpICE9IDB4ODNjIFwKKwkJCQkJICAgJiYgKHJlZykgIT0gMHhhMWMpLAkJXAorCQkJIHBhZ2UpCiAKLS8qIFdyaXRlIGR3b3JkIHRvIHBhZ2UtbWFwcGVkIHJlZ2lzdGVyIHdpdGggYW4gZXh0cmEgbG9jay4KLSAqCi0gKiBBcyBmb3IgZWZ4X3dyaXRlZF9wYWdlKCksIGJ1dCBmb3IgYSByZWdpc3RlciB0aGF0IHN1ZmZlcnMgZnJvbQotICogU0ZDIGJ1ZyAzMTgxLiBUYWtlIG91dCBhIGxvY2sgc28gdGhlIEJJVSBjb2xsZWN0b3IgY2Fubm90IGJlCi0gKiBjb25mdXNlZC4gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBlZnhfd3JpdGVkX3BhZ2VfbG9ja2VkKHN0cnVjdCBlZnhfbmljICplZngsCi0JCQkJCSAgZWZ4X2R3b3JkX3QgKnZhbHVlLAotCQkJCQkgIHVuc2lnbmVkIGludCByZWcsCi0JCQkJCSAgdW5zaWduZWQgaW50IHBhZ2UpCisvKiBXcml0ZSBUSU1FUl9DT01NQU5ELiAgVGhpcyBpcyBhIHBhZ2UtbWFwcGVkIDMyLWJpdCBDU1IsIGJ1dCBhIGJ1ZworICogaW4gdGhlIEJJVSBtZWFucyB0aGF0IHdyaXRlcyB0byBUSU1FUl9DT01NQU5EWzBdIGludmFsaWRhdGUgdGhlCisgKiBjb2xsZWN0b3IgcmVnaXN0ZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfZWZ4X3dyaXRlZF9wYWdlX2xvY2tlZChzdHJ1Y3QgZWZ4X25pYyAqZWZ4LAorCQkJCQkgICBlZnhfZHdvcmRfdCAqdmFsdWUsCisJCQkJCSAgIHVuc2lnbmVkIGludCByZWcsCisJCQkJCSAgIHVuc2lnbmVkIGludCBwYWdlKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3MgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOwogCkBAIC0yNjUsNSArMjg0LDkgQEAKIAkJZWZ4X3dyaXRlZChlZngsIHZhbHVlLCBFRlhfUEFHRURfUkVHKHBhZ2UsIHJlZykpOwogCX0KIH0KKyNkZWZpbmUgZWZ4X3dyaXRlZF9wYWdlX2xvY2tlZChlZngsIHZhbHVlLCByZWcsIHBhZ2UpCQkJXAorCV9lZnhfd3JpdGVkX3BhZ2VfbG9ja2VkKGVmeCwgdmFsdWUsCQkJCVwKKwkJCQlyZWcgKyBCVUlMRF9CVUdfT05fWkVSTygocmVnKSAhPSAweDQyMCksIFwKKwkJCQlwYWdlKQogCiAjZW5kaWYgLyogRUZYX0lPX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9tY2RpLmMgYi9kcml2ZXJzL25ldC9zZmMvbWNkaS5jCmluZGV4IDEyY2Y5MTAuLmI3MTZlODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9tY2RpLmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL21jZGkuYwpAQCAtMzgxLDcgKzM4MSw3IEBACiAJCQkJICAtcmMpOwogCQkJZWZ4X3NjaGVkdWxlX3Jlc2V0KGVmeCwgUkVTRVRfVFlQRV9NQ19GQUlMVVJFKTsKIAkJfSBlbHNlCi0JCQluZXRpZl9lcnIoZWZ4LCBodywgZWZ4LT5uZXRfZGV2LAorCQkJbmV0aWZfZGJnKGVmeCwgaHcsIGVmeC0+bmV0X2RldiwKIAkJCQkgICJNQyBjb21tYW5kIDB4JXggaW5sZW4gJWQgZmFpbGVkIHJjPSVkXG4iLAogCQkJCSAgY21kLCAoaW50KWlubGVuLCAtcmMpOwogCX0KQEAgLTQ2Myw2ICs0NjMsNyBAQAogCQlpZiAobWNkaS0+bW9kZSA9PSBNQ0RJX01PREVfRVZFTlRTKSB7CiAJCQltY2RpLT5yZXNwcmMgPSByYzsKIAkJCW1jZGktPnJlc3BsZW4gPSAwOworCQkJKyttY2RpLT5jcmVkaXRzOwogCQl9CiAJfSBlbHNlCiAJCS8qIE5vYm9keSB3YXMgd2FpdGluZyBmb3IgYW4gTUNESSByZXF1ZXN0LCBzbyB0cmlnZ2VyIGEgcmVzZXQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9tY2RpX3BoeS5jIGIvZHJpdmVycy9uZXQvc2ZjL21jZGlfcGh5LmMKaW5kZXggYzk5Mjc0Mi4uMGU5N2VlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL21jZGlfcGh5LmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL21jZGlfcGh5LmMKQEAgLTE2LDcgKzE2LDYgQEAKICNpbmNsdWRlICJwaHkuaCIKICNpbmNsdWRlICJtY2RpLmgiCiAjaW5jbHVkZSAibWNkaV9wY29sLmgiCi0jaW5jbHVkZSAibWRpb18xMGcuaCIKICNpbmNsdWRlICJuaWMuaCIKICNpbmNsdWRlICJzZWxmdGVzdC5oIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvbWRpb18xMGcuYyBiL2RyaXZlcnMvbmV0L3NmYy9tZGlvXzEwZy5jCmluZGV4IDk4ZDk0NjAuLjU2YjAyNjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9tZGlvXzEwZy5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9tZGlvXzEwZy5jCkBAIC0xNSw3ICsxNSw2IEBACiAjaW5jbHVkZSAibmV0X2RyaXZlci5oIgogI2luY2x1ZGUgIm1kaW9fMTBnLmgiCiAjaW5jbHVkZSAid29ya2Fyb3VuZHMuaCIKLSNpbmNsdWRlICJuaWMuaCIKIAogdW5zaWduZWQgZWZ4X21kaW9faWRfb3VpKHUzMiBpZCkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9tdGQuYyBiL2RyaXZlcnMvbmV0L3NmYy9tdGQuYwppbmRleCAwMmU1NGI0Li5kMzg2Mjc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvbXRkLmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL210ZC5jCkBAIC0zMjEsMTQgKzMyMSwxNSBAQAogCXN0cnVjdCBlZnhfbXRkICplZnhfbXRkID0gbXRkLT5wcml2OwogCWNvbnN0IHN0cnVjdCBlZnhfc3BpX2RldmljZSAqc3BpID0gZWZ4X210ZC0+c3BpOwogCXN0cnVjdCBlZnhfbmljICplZnggPSBlZnhfbXRkLT5lZng7CisJc3RydWN0IGZhbGNvbl9uaWNfZGF0YSAqbmljX2RhdGEgPSBlZngtPm5pY19kYXRhOwogCWludCByYzsKIAotCXJjID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZlZngtPnNwaV9sb2NrKTsKKwlyYyA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmbmljX2RhdGEtPnNwaV9sb2NrKTsKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIAlyYyA9IGZhbGNvbl9zcGlfcmVhZChlZngsIHNwaSwgcGFydC0+b2Zmc2V0ICsgc3RhcnQsIGxlbiwKIAkJCSAgICAgcmV0bGVuLCBidWZmZXIpOwotCW11dGV4X3VubG9jaygmZWZ4LT5zcGlfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZuaWNfZGF0YS0+c3BpX2xvY2spOwogCXJldHVybiByYzsKIH0KIApAQCAtMzM3LDEzICszMzgsMTQgQEAKIAlzdHJ1Y3QgZWZ4X210ZF9wYXJ0aXRpb24gKnBhcnQgPSB0b19lZnhfbXRkX3BhcnRpdGlvbihtdGQpOwogCXN0cnVjdCBlZnhfbXRkICplZnhfbXRkID0gbXRkLT5wcml2OwogCXN0cnVjdCBlZnhfbmljICplZnggPSBlZnhfbXRkLT5lZng7CisJc3RydWN0IGZhbGNvbl9uaWNfZGF0YSAqbmljX2RhdGEgPSBlZngtPm5pY19kYXRhOwogCWludCByYzsKIAotCXJjID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZlZngtPnNwaV9sb2NrKTsKKwlyYyA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmbmljX2RhdGEtPnNwaV9sb2NrKTsKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIAlyYyA9IGVmeF9zcGlfZXJhc2UocGFydCwgcGFydC0+b2Zmc2V0ICsgc3RhcnQsIGxlbik7Ci0JbXV0ZXhfdW5sb2NrKCZlZngtPnNwaV9sb2NrKTsKKwltdXRleF91bmxvY2soJm5pY19kYXRhLT5zcGlfbG9jayk7CiAJcmV0dXJuIHJjOwogfQogCkBAIC0zNTQsMTQgKzM1NiwxNSBAQAogCXN0cnVjdCBlZnhfbXRkICplZnhfbXRkID0gbXRkLT5wcml2OwogCWNvbnN0IHN0cnVjdCBlZnhfc3BpX2RldmljZSAqc3BpID0gZWZ4X210ZC0+c3BpOwogCXN0cnVjdCBlZnhfbmljICplZnggPSBlZnhfbXRkLT5lZng7CisJc3RydWN0IGZhbGNvbl9uaWNfZGF0YSAqbmljX2RhdGEgPSBlZngtPm5pY19kYXRhOwogCWludCByYzsKIAotCXJjID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZlZngtPnNwaV9sb2NrKTsKKwlyYyA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmbmljX2RhdGEtPnNwaV9sb2NrKTsKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIAlyYyA9IGZhbGNvbl9zcGlfd3JpdGUoZWZ4LCBzcGksIHBhcnQtPm9mZnNldCArIHN0YXJ0LCBsZW4sCiAJCQkgICAgICByZXRsZW4sIGJ1ZmZlcik7Ci0JbXV0ZXhfdW5sb2NrKCZlZngtPnNwaV9sb2NrKTsKKwltdXRleF91bmxvY2soJm5pY19kYXRhLT5zcGlfbG9jayk7CiAJcmV0dXJuIHJjOwogfQogCkBAIC0zNzAsMTEgKzM3MywxMiBAQAogCXN0cnVjdCBlZnhfbXRkX3BhcnRpdGlvbiAqcGFydCA9IHRvX2VmeF9tdGRfcGFydGl0aW9uKG10ZCk7CiAJc3RydWN0IGVmeF9tdGQgKmVmeF9tdGQgPSBtdGQtPnByaXY7CiAJc3RydWN0IGVmeF9uaWMgKmVmeCA9IGVmeF9tdGQtPmVmeDsKKwlzdHJ1Y3QgZmFsY29uX25pY19kYXRhICpuaWNfZGF0YSA9IGVmeC0+bmljX2RhdGE7CiAJaW50IHJjOwogCi0JbXV0ZXhfbG9jaygmZWZ4LT5zcGlfbG9jayk7CisJbXV0ZXhfbG9jaygmbmljX2RhdGEtPnNwaV9sb2NrKTsKIAlyYyA9IGVmeF9zcGlfc2xvd193YWl0KHBhcnQsIHRydWUpOwotCW11dGV4X3VubG9jaygmZWZ4LT5zcGlfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZuaWNfZGF0YS0+c3BpX2xvY2spOwogCXJldHVybiByYzsKIH0KIApAQCAtMzg3LDM1ICszOTEsNjcgQEAKIAogc3RhdGljIGludCBmYWxjb25fbXRkX3Byb2JlKHN0cnVjdCBlZnhfbmljICplZngpCiB7Ci0Jc3RydWN0IGVmeF9zcGlfZGV2aWNlICpzcGkgPSBlZngtPnNwaV9mbGFzaDsKKwlzdHJ1Y3QgZmFsY29uX25pY19kYXRhICpuaWNfZGF0YSA9IGVmeC0+bmljX2RhdGE7CisJc3RydWN0IGVmeF9zcGlfZGV2aWNlICpzcGk7CiAJc3RydWN0IGVmeF9tdGQgKmVmeF9tdGQ7Ci0JaW50IHJjOworCWludCByYyA9IC1FTk9ERVY7CiAKIAlBU1NFUlRfUlROTCgpOwogCi0JaWYgKCFzcGkgfHwgc3BpLT5zaXplIDw9IEZBTENPTl9GTEFTSF9CT09UQ09ERV9TVEFSVCkKLQkJcmV0dXJuIC1FTk9ERVY7CisJc3BpID0gJm5pY19kYXRhLT5zcGlfZmxhc2g7CisJaWYgKGVmeF9zcGlfcHJlc2VudChzcGkpICYmIHNwaS0+c2l6ZSA+IEZBTENPTl9GTEFTSF9CT09UQ09ERV9TVEFSVCkgeworCQllZnhfbXRkID0ga3phbGxvYyhzaXplb2YoKmVmeF9tdGQpICsgc2l6ZW9mKGVmeF9tdGQtPnBhcnRbMF0pLAorCQkJCSAgR0ZQX0tFUk5FTCk7CisJCWlmICghZWZ4X210ZCkKKwkJCXJldHVybiAtRU5PTUVNOwogCi0JZWZ4X210ZCA9IGt6YWxsb2Moc2l6ZW9mKCplZnhfbXRkKSArIHNpemVvZihlZnhfbXRkLT5wYXJ0WzBdKSwKLQkJCSAgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFlZnhfbXRkKQotCQlyZXR1cm4gLUVOT01FTTsKKwkJZWZ4X210ZC0+c3BpID0gc3BpOworCQllZnhfbXRkLT5uYW1lID0gImZsYXNoIjsKKwkJZWZ4X210ZC0+b3BzID0gJmZhbGNvbl9tdGRfb3BzOwogCi0JZWZ4X210ZC0+c3BpID0gc3BpOwotCWVmeF9tdGQtPm5hbWUgPSAiZmxhc2giOwotCWVmeF9tdGQtPm9wcyA9ICZmYWxjb25fbXRkX29wczsKKwkJZWZ4X210ZC0+bl9wYXJ0cyA9IDE7CisJCWVmeF9tdGQtPnBhcnRbMF0ubXRkLnR5cGUgPSBNVERfTk9SRkxBU0g7CisJCWVmeF9tdGQtPnBhcnRbMF0ubXRkLmZsYWdzID0gTVREX0NBUF9OT1JGTEFTSDsKKwkJZWZ4X210ZC0+cGFydFswXS5tdGQuc2l6ZSA9IHNwaS0+c2l6ZSAtIEZBTENPTl9GTEFTSF9CT09UQ09ERV9TVEFSVDsKKwkJZWZ4X210ZC0+cGFydFswXS5tdGQuZXJhc2VzaXplID0gc3BpLT5lcmFzZV9zaXplOworCQllZnhfbXRkLT5wYXJ0WzBdLm9mZnNldCA9IEZBTENPTl9GTEFTSF9CT09UQ09ERV9TVEFSVDsKKwkJZWZ4X210ZC0+cGFydFswXS50eXBlX25hbWUgPSAic2ZjX2ZsYXNoX2Jvb3Ryb20iOwogCi0JZWZ4X210ZC0+bl9wYXJ0cyA9IDE7Ci0JZWZ4X210ZC0+cGFydFswXS5tdGQudHlwZSA9IE1URF9OT1JGTEFTSDsKLQllZnhfbXRkLT5wYXJ0WzBdLm10ZC5mbGFncyA9IE1URF9DQVBfTk9SRkxBU0g7Ci0JZWZ4X210ZC0+cGFydFswXS5tdGQuc2l6ZSA9IHNwaS0+c2l6ZSAtIEZBTENPTl9GTEFTSF9CT09UQ09ERV9TVEFSVDsKLQllZnhfbXRkLT5wYXJ0WzBdLm10ZC5lcmFzZXNpemUgPSBzcGktPmVyYXNlX3NpemU7Ci0JZWZ4X210ZC0+cGFydFswXS5vZmZzZXQgPSBGQUxDT05fRkxBU0hfQk9PVENPREVfU1RBUlQ7Ci0JZWZ4X210ZC0+cGFydFswXS50eXBlX25hbWUgPSAic2ZjX2ZsYXNoX2Jvb3Ryb20iOworCQlyYyA9IGVmeF9tdGRfcHJvYmVfZGV2aWNlKGVmeCwgZWZ4X210ZCk7CisJCWlmIChyYykgeworCQkJa2ZyZWUoZWZ4X210ZCk7CisJCQlyZXR1cm4gcmM7CisJCX0KKwl9CiAKLQlyYyA9IGVmeF9tdGRfcHJvYmVfZGV2aWNlKGVmeCwgZWZ4X210ZCk7Ci0JaWYgKHJjKQotCQlrZnJlZShlZnhfbXRkKTsKKwlzcGkgPSAmbmljX2RhdGEtPnNwaV9lZXByb207CisJaWYgKGVmeF9zcGlfcHJlc2VudChzcGkpICYmIHNwaS0+c2l6ZSA+IEVGWF9FRVBST01fQk9PVENPTkZJR19TVEFSVCkgeworCQllZnhfbXRkID0ga3phbGxvYyhzaXplb2YoKmVmeF9tdGQpICsgc2l6ZW9mKGVmeF9tdGQtPnBhcnRbMF0pLAorCQkJCSAgR0ZQX0tFUk5FTCk7CisJCWlmICghZWZ4X210ZCkKKwkJCXJldHVybiAtRU5PTUVNOworCisJCWVmeF9tdGQtPnNwaSA9IHNwaTsKKwkJZWZ4X210ZC0+bmFtZSA9ICJFRVBST00iOworCQllZnhfbXRkLT5vcHMgPSAmZmFsY29uX210ZF9vcHM7CisKKwkJZWZ4X210ZC0+bl9wYXJ0cyA9IDE7CisJCWVmeF9tdGQtPnBhcnRbMF0ubXRkLnR5cGUgPSBNVERfUkFNOworCQllZnhfbXRkLT5wYXJ0WzBdLm10ZC5mbGFncyA9IE1URF9DQVBfUkFNOworCQllZnhfbXRkLT5wYXJ0WzBdLm10ZC5zaXplID0KKwkJCW1pbihzcGktPnNpemUsIEVGWF9FRVBST01fQk9PVENPTkZJR19FTkQpIC0KKwkJCUVGWF9FRVBST01fQk9PVENPTkZJR19TVEFSVDsKKwkJZWZ4X210ZC0+cGFydFswXS5tdGQuZXJhc2VzaXplID0gc3BpLT5lcmFzZV9zaXplOworCQllZnhfbXRkLT5wYXJ0WzBdLm9mZnNldCA9IEVGWF9FRVBST01fQk9PVENPTkZJR19TVEFSVDsKKwkJZWZ4X210ZC0+cGFydFswXS50eXBlX25hbWUgPSAic2ZjX2Jvb3Rjb25maWciOworCisJCXJjID0gZWZ4X210ZF9wcm9iZV9kZXZpY2UoZWZ4LCBlZnhfbXRkKTsKKwkJaWYgKHJjKSB7CisJCQlrZnJlZShlZnhfbXRkKTsKKwkJCXJldHVybiByYzsKKwkJfQorCX0KKwogCXJldHVybiByYzsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL25ldF9kcml2ZXIuaCBiL2RyaXZlcnMvbmV0L3NmYy9uZXRfZHJpdmVyLmgKaW5kZXggYjEzN2M4OC4uYmRjZTY2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL25ldF9kcml2ZXIuaAorKysgYi9kcml2ZXJzL25ldC9zZmMvbmV0X2RyaXZlci5oCkBAIC0xMzYsMTQgKzEzNiwxOSBAQAogICogQGVmeDogVGhlIGFzc29jaWF0ZWQgRWZ4IE5JQwogICogQHF1ZXVlOiBETUEgcXVldWUgbnVtYmVyCiAgKiBAY2hhbm5lbDogVGhlIGFzc29jaWF0ZWQgY2hhbm5lbAorICogQGNvcmVfdHhxOiBUaGUgbmV0d29ya2luZyBjb3JlIFRYIHF1ZXVlIHN0cnVjdHVyZQogICogQGJ1ZmZlcjogVGhlIHNvZnR3YXJlIGJ1ZmZlciByaW5nCiAgKiBAdHhkOiBUaGUgaGFyZHdhcmUgZGVzY3JpcHRvciByaW5nCiAgKiBAcHRyX21hc2s6IFRoZSBzaXplIG9mIHRoZSByaW5nIG1pbnVzIDEuCiAgKiBAZmx1c2hlZDogVXNlZCB3aGVuIGhhbmRsaW5nIHF1ZXVlIGZsdXNoaW5nCiAgKiBAcmVhZF9jb3VudDogQ3VycmVudCByZWFkIHBvaW50ZXIuCiAgKglUaGlzIGlzIHRoZSBudW1iZXIgb2YgYnVmZmVycyB0aGF0IGhhdmUgYmVlbiByZW1vdmVkIGZyb20gYm90aCByaW5ncy4KLSAqIEBzdG9wcGVkOiBTdG9wcGVkIGNvdW50LgotICoJU2V0IGlmIHRoaXMgVFggcXVldWUgaXMgY3VycmVudGx5IHN0b3BwaW5nIGl0cyBwb3J0LgorICogQG9sZF93cml0ZV9jb3VudDogVGhlIHZhbHVlIG9mIEB3cml0ZV9jb3VudCB3aGVuIGxhc3QgY2hlY2tlZC4KKyAqCVRoaXMgaXMgaGVyZSBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucy4gIFRoZSB4bWl0IHBhdGggd2lsbAorICoJb25seSBnZXQgdGhlIHVwLXRvLWRhdGUgdmFsdWUgb2YgQHdyaXRlX2NvdW50IGlmIHRoaXMKKyAqCXZhcmlhYmxlIGluZGljYXRlcyB0aGF0IHRoZSBxdWV1ZSBpcyBlbXB0eS4gIFRoaXMgaXMgdG8KKyAqCWF2b2lkIGNhY2hlLWxpbmUgcGluZy1wb25nIGJldHdlZW4gdGhlIHhtaXQgcGF0aCBhbmQgdGhlCisgKgljb21wbGV0aW9uIHBhdGguCiAgKiBAaW5zZXJ0X2NvdW50OiBDdXJyZW50IGluc2VydCBwb2ludGVyCiAgKglUaGlzIGlzIHRoZSBudW1iZXIgb2YgYnVmZmVycyB0aGF0IGhhdmUgYmVlbiBhZGRlZCB0byB0aGUKICAqCXNvZnR3YXJlIHJpbmcuCkBAIC0xNjMsMTMgKzE2OCwxNyBAQAogICogQHRzb19sb25nX2hlYWRlcnM6IE51bWJlciBvZiBwYWNrZXRzIHdpdGggaGVhZGVycyB0b28gbG9uZyBmb3Igc3RhbmRhcmQKICAqCWJsb2NrcwogICogQHRzb19wYWNrZXRzOiBOdW1iZXIgb2YgcGFja2V0cyB2aWEgdGhlIFRTTyB4bWl0IHBhdGgKKyAqIEBwdXNoZXM6IE51bWJlciBvZiB0aW1lcyB0aGUgVFggcHVzaCBmZWF0dXJlIGhhcyBiZWVuIHVzZWQKKyAqIEBlbXB0eV9yZWFkX2NvdW50OiBJZiB0aGUgY29tcGxldGlvbiBwYXRoIGhhcyBzZWVuIHRoZSBxdWV1ZSBhcyBlbXB0eQorICoJYW5kIHRoZSB0cmFuc21pc3Npb24gcGF0aCBoYXMgbm90IHlldCBjaGVja2VkIHRoaXMsIHRoZSB2YWx1ZSBvZgorICoJQHJlYWRfY291bnQgYml0d2lzZS1hZGRlZCB0byAlRUZYX0VNUFRZX0NPVU5UX1ZBTElEOyBvdGhlcndpc2UgMC4KICAqLwogc3RydWN0IGVmeF90eF9xdWV1ZSB7CiAJLyogTWVtYmVycyB3aGljaCBkb24ndCBjaGFuZ2Ugb24gdGhlIGZhc3QgcGF0aCAqLwogCXN0cnVjdCBlZnhfbmljICplZnggX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKIAl1bnNpZ25lZCBxdWV1ZTsKIAlzdHJ1Y3QgZWZ4X2NoYW5uZWwgKmNoYW5uZWw7Ci0Jc3RydWN0IGVmeF9uaWMgKm5pYzsKKwlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICpjb3JlX3R4cTsKIAlzdHJ1Y3QgZWZ4X3R4X2J1ZmZlciAqYnVmZmVyOwogCXN0cnVjdCBlZnhfc3BlY2lhbF9idWZmZXIgdHhkOwogCXVuc2lnbmVkIGludCBwdHJfbWFzazsKQEAgLTE3Nyw3ICsxODYsNyBAQAogCiAJLyogTWVtYmVycyB1c2VkIG1haW5seSBvbiB0aGUgY29tcGxldGlvbiBwYXRoICovCiAJdW5zaWduZWQgaW50IHJlYWRfY291bnQgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKLQlpbnQgc3RvcHBlZDsKKwl1bnNpZ25lZCBpbnQgb2xkX3dyaXRlX2NvdW50OwogCiAJLyogTWVtYmVycyB1c2VkIG9ubHkgb24gdGhlIHhtaXQgcGF0aCAqLwogCXVuc2lnbmVkIGludCBpbnNlcnRfY291bnQgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKQEAgLTE4Nyw2ICsxOTYsMTEgQEAKIAl1bnNpZ25lZCBpbnQgdHNvX2J1cnN0czsKIAl1bnNpZ25lZCBpbnQgdHNvX2xvbmdfaGVhZGVyczsKIAl1bnNpZ25lZCBpbnQgdHNvX3BhY2tldHM7CisJdW5zaWduZWQgaW50IHB1c2hlczsKKworCS8qIE1lbWJlcnMgc2hhcmVkIGJldHdlZW4gcGF0aHMgYW5kIHNvbWV0aW1lcyB1cGRhdGVkICovCisJdW5zaWduZWQgaW50IGVtcHR5X3JlYWRfY291bnQgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKKyNkZWZpbmUgRUZYX0VNUFRZX0NPVU5UX1ZBTElEIDB4ODAwMDAwMDAKIH07CiAKIC8qKgpAQCAtMzA1LDcgKzMxOSw2IEBACiAgKiBAaXJxX21vZGVyYXRpb246IElSUSBtb2RlcmF0aW9uIHZhbHVlIChpbiBoYXJkd2FyZSB0aWNrcykKICAqIEBuYXBpX2RldjogTmV0IGRldmljZSB1c2VkIHdpdGggTkFQSQogICogQG5hcGlfc3RyOiBOQVBJIGNvbnRyb2wgc3RydWN0dXJlCi0gKiBAcmVzZXRfd29yazogU2NoZWR1bGVkIHJlc2V0IHdvcmsgdGhyZWFkCiAgKiBAd29ya19wZW5kaW5nOiBJcyB3b3JrIHBlbmRpbmcgdmlhIE5BUEk/CiAgKiBAZXZlbnRxOiBFdmVudCBxdWV1ZSBidWZmZXIKICAqIEBldmVudHFfbWFzazogRXZlbnQgcXVldWUgcG9pbnRlciBtYXNrCkBAIC0zMjYsOCArMzM5LDYgQEAKICAqIEBuX3J4X292ZXJsZW5ndGg6IENvdW50IG9mIFJYX09WRVJMRU5HVEggZXJyb3JzCiAgKiBAbl9za2J1ZmZfbGVha3M6IENvdW50IG9mIHNrYnVmZnMgbGVha2VkIGR1ZSB0byBSWCBvdmVycnVuCiAgKiBAcnhfcXVldWU6IFJYIHF1ZXVlIGZvciB0aGlzIGNoYW5uZWwKLSAqIEB0eF9zdG9wX2NvdW50OiBDb3JlIFRYIHF1ZXVlIHN0b3AgY291bnQKLSAqIEB0eF9zdG9wX2xvY2s6IENvcmUgVFggcXVldWUgc3RvcCBsb2NrCiAgKiBAdHhfcXVldWU6IFRYIHF1ZXVlcyBmb3IgdGhpcyBjaGFubmVsCiAgKi8KIHN0cnVjdCBlZnhfY2hhbm5lbCB7CkBAIC0zNjYsMTAgKzM3Nyw2IEBACiAJYm9vbCByeF9wa3RfY3N1bW1lZDsKIAogCXN0cnVjdCBlZnhfcnhfcXVldWUgcnhfcXVldWU7Ci0KLQlhdG9taWNfdCB0eF9zdG9wX2NvdW50OwotCXNwaW5sb2NrX3QgdHhfc3RvcF9sb2NrOwotCiAJc3RydWN0IGVmeF90eF9xdWV1ZSB0eF9xdWV1ZVsyXTsKIH07CiAKQEAgLTYyNiwxMCArNjMzLDggQEAKICAqCVdvcmsgaXRlbXMgZG8gbm90IGhvbGQgYW5kIG11c3Qgbm90IGFjcXVpcmUgUlROTC4KICAqIEB3b3JrcXVldWVfbmFtZTogTmFtZSBvZiB3b3JrcXVldWUKICAqIEByZXNldF93b3JrOiBTY2hlZHVsZWQgcmVzZXQgd29ya2l0ZW0KLSAqIEBtb25pdG9yX3dvcms6IEhhcmR3YXJlIG1vbml0b3Igd29ya2l0ZW0KICAqIEBtZW1iYXNlX3BoeXM6IE1lbW9yeSBCQVIgdmFsdWUgYXMgcGh5c2ljYWwgYWRkcmVzcwogICogQG1lbWJhc2U6IE1lbW9yeSBCQVIgdmFsdWUKLSAqIEBiaXVfbG9jazogQklVIChidXMgaW50ZXJmYWNlIHVuaXQpIGxvY2sKICAqIEBpbnRlcnJ1cHRfbW9kZTogSW50ZXJydXB0IG1vZGUKICAqIEBpcnFfcnhfYWRhcHRpdmU6IEFkYXB0aXZlIElSUSBtb2RlcmF0aW9uIGVuYWJsZWQgZm9yIFJYIGV2ZW50IHF1ZXVlcwogICogQGlycV9yeF9tb2RlcmF0aW9uOiBJUlEgbW9kZXJhdGlvbiB0aW1lIGZvciBSWCBldmVudCBxdWV1ZXMKQEAgLTY0OCwyMyArNjUzLDE0IEBACiAgKiBAbl90eF9jaGFubmVsczogTnVtYmVyIG9mIGNoYW5uZWxzIHVzZWQgZm9yIFRYCiAgKiBAcnhfYnVmZmVyX2xlbjogUlggYnVmZmVyIGxlbmd0aAogICogQHJ4X2J1ZmZlcl9vcmRlcjogT3JkZXIgKGxvZzIpIG9mIG51bWJlciBvZiBwYWdlcyBmb3IgZWFjaCBSWCBidWZmZXIKKyAqIEByeF9oYXNoX2tleTogVG9lcGxpdHogaGFzaCBrZXkgZm9yIFJTUwogICogQHJ4X2luZGlyX3RhYmxlOiBJbmRpcmVjdGlvbiB0YWJsZSBmb3IgUlNTCiAgKiBAaW50X2Vycm9yX2NvdW50OiBOdW1iZXIgb2YgaW50ZXJuYWwgZXJyb3JzIHNlZW4gcmVjZW50bHkKICAqIEBpbnRfZXJyb3JfZXhwaXJlOiBUaW1lIGF0IHdoaWNoIGVycm9yIGNvdW50IHdpbGwgYmUgZXhwaXJlZAogICogQGlycV9zdGF0dXM6IEludGVycnVwdCBzdGF0dXMgYnVmZmVyCi0gKiBAbGFzdF9pcnFfY3B1OiBMYXN0IENQVSB0byBoYW5kbGUgaW50ZXJydXB0LgotICoJVGhpcyByZWdpc3RlciBpcyB3cml0dGVuIHdpdGggdGhlIFNNUCBwcm9jZXNzb3IgSUQgd2hlbmV2ZXIgYW4KLSAqCWludGVycnVwdCBpcyBoYW5kbGVkLiAgSXQgaXMgdXNlZCBieSBlZnhfbmljX3Rlc3RfaW50ZXJydXB0KCkKLSAqCXRvIHZlcmlmeSB0aGF0IGFuIGludGVycnVwdCBoYXMgb2NjdXJyZWQuCiAgKiBAaXJxX3plcm9fY291bnQ6IE51bWJlciBvZiBsZWdhY3kgSVJRcyBzZWVuIHdpdGggcXVldWUgZmxhZ3MgPT0gMAogICogQGZhdGFsX2lycV9sZXZlbDogSVJRIGxldmVsIChiaXQgbnVtYmVyKSB1c2VkIGZvciBzZXJpb3VzIGVycm9ycwotICogQHNwaV9mbGFzaDogU1BJIGZsYXNoIGRldmljZQotICoJVGhpcyBmaWVsZCB3aWxsIGJlICVOVUxMIGlmIG5vIGZsYXNoIGRldmljZSBpcyBwcmVzZW50IChvciBmb3IgU2llbmEpLgotICogQHNwaV9lZXByb206IFNQSSBFRVBST00gZGV2aWNlCi0gKglUaGlzIGZpZWxkIHdpbGwgYmUgJU5VTEwgaWYgbm8gRUVQUk9NIGRldmljZSBpcyBwcmVzZW50IChvciBmb3IgU2llbmEpLgotICogQHNwaV9sb2NrOiBTUEkgYnVzIGxvY2sKICAqIEBtdGRfbGlzdDogTGlzdCBvZiBNVERzIGF0dGFjaGVkIHRvIHRoZSBOSUMKLSAqIEBuX3J4X25vZGVzY19kcm9wX2NudDogUlggbm8gZGVzY3JpcHRvciBkcm9wIGNvdW50CiAgKiBAbmljX2RhdGE6IEhhcmR3YXJlIGRlcGVuZGFudCBzdGF0ZQogICogQG1hY19sb2NrOiBNQUMgYWNjZXNzIGxvY2suIFByb3RlY3RzIEBwb3J0X2VuYWJsZWQsIEBwaHlfbW9kZSwKICAqCUBwb3J0X2luaGliaXRlZCwgZWZ4X21vbml0b3IoKSBhbmQgZWZ4X3JlY29uZmlndXJlX3BvcnQoKQpAQCAtNjc3LDIxICs2NzMsMTQgQEAKICAqIEBwb3J0X2luaXRpYWxpemVkOiBQb3J0IGluaXRpYWxpemVkPwogICogQG5ldF9kZXY6IE9wZXJhdGluZyBzeXN0ZW0gbmV0d29yayBkZXZpY2UuIENvbnNpZGVyIGhvbGRpbmcgdGhlIHJ0bmwgbG9jawogICogQHJ4X2NoZWNrc3VtX2VuYWJsZWQ6IFJYIGNoZWNrc3VtbWluZyBlbmFibGVkCi0gKiBAbWFjX3N0YXRzOiBNQUMgc3RhdGlzdGljcy4gVGhlc2UgaW5jbHVkZSBhbGwgc3RhdGlzdGljcyB0aGUgTUFDcwotICoJY2FuIHByb3ZpZGUuICBHZW5lcmljIGNvZGUgY29udmVydHMgdGhlc2UgaW50byBhIHN0YW5kYXJkCi0gKgkmc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMuCiAgKiBAc3RhdHNfYnVmZmVyOiBETUEgYnVmZmVyIGZvciBzdGF0aXN0aWNzCi0gKiBAc3RhdHNfbG9jazogU3RhdGlzdGljcyB1cGRhdGUgbG9jay4gU2VyaWFsaXNlcyBzdGF0aXN0aWNzIGZldGNoZXMKICAqIEBtYWNfb3A6IE1BQyBpbnRlcmZhY2UKLSAqIEBtYWNfYWRkcmVzczogUGVybWFuZW50IE1BQyBhZGRyZXNzCiAgKiBAcGh5X3R5cGU6IFBIWSB0eXBlCi0gKiBAbWRpb19sb2NrOiBNRElPIGxvY2sKICAqIEBwaHlfb3A6IFBIWSBpbnRlcmZhY2UKICAqIEBwaHlfZGF0YTogUEhZIHByaXZhdGUgZGF0YSAoaW5jbHVkaW5nIFBIWS1zcGVjaWZpYyBzdGF0cykKICAqIEBtZGlvOiBQSFkgTURJTyBpbnRlcmZhY2UKICAqIEBtZGlvX2J1czogUEhZIE1ESU8gYnVzIElEIChvbmx5IHVzZWQgYnkgU2llbmEpCiAgKiBAcGh5X21vZGU6IFBIWSBvcGVyYXRpbmcgbW9kZS4gU2VyaWFsaXNlZCBieSBAbWFjX2xvY2suCi0gKiBAeG1hY19wb2xsX3JlcXVpcmVkOiBYTUFDIGxpbmsgc3RhdGUgbmVlZHMgcG9sbGluZwogICogQGxpbmtfYWR2ZXJ0aXNpbmc6IEF1dG9uZWdvdGlhdGlvbiBhZHZlcnRpc2luZyBmbGFncwogICogQGxpbmtfc3RhdGU6IEN1cnJlbnQgc3RhdGUgb2YgdGhlIGxpbmsKICAqIEBuX2xpbmtfc3RhdGVfY2hhbmdlczogTnVtYmVyIG9mIHRpbWVzIHRoZSBsaW5rIGhhcyBjaGFuZ2VkIHN0YXRlCkBAIC03MDIsMTAgKzY5MSwyMyBAQAogICogQGxvb3BiYWNrX21vZGU6IExvb3BiYWNrIHN0YXR1cwogICogQGxvb3BiYWNrX21vZGVzOiBTdXBwb3J0ZWQgbG9vcGJhY2sgbW9kZSBiaXRtYXNrCiAgKiBAbG9vcGJhY2tfc2VsZnRlc3Q6IE9mZmxpbmUgc2VsZi10ZXN0IHByaXZhdGUgc3RhdGUKKyAqIEBtb25pdG9yX3dvcms6IEhhcmR3YXJlIG1vbml0b3Igd29ya2l0ZW0KKyAqIEBiaXVfbG9jazogQklVIChidXMgaW50ZXJmYWNlIHVuaXQpIGxvY2sKKyAqIEBsYXN0X2lycV9jcHU6IExhc3QgQ1BVIHRvIGhhbmRsZSBpbnRlcnJ1cHQuCisgKglUaGlzIHJlZ2lzdGVyIGlzIHdyaXR0ZW4gd2l0aCB0aGUgU01QIHByb2Nlc3NvciBJRCB3aGVuZXZlciBhbgorICoJaW50ZXJydXB0IGlzIGhhbmRsZWQuICBJdCBpcyB1c2VkIGJ5IGVmeF9uaWNfdGVzdF9pbnRlcnJ1cHQoKQorICoJdG8gdmVyaWZ5IHRoYXQgYW4gaW50ZXJydXB0IGhhcyBvY2N1cnJlZC4KKyAqIEBuX3J4X25vZGVzY19kcm9wX2NudDogUlggbm8gZGVzY3JpcHRvciBkcm9wIGNvdW50CisgKiBAbWFjX3N0YXRzOiBNQUMgc3RhdGlzdGljcy4gVGhlc2UgaW5jbHVkZSBhbGwgc3RhdGlzdGljcyB0aGUgTUFDcworICoJY2FuIHByb3ZpZGUuICBHZW5lcmljIGNvZGUgY29udmVydHMgdGhlc2UgaW50byBhIHN0YW5kYXJkCisgKgkmc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMuCisgKiBAc3RhdHNfbG9jazogU3RhdGlzdGljcyB1cGRhdGUgbG9jay4gU2VyaWFsaXNlcyBzdGF0aXN0aWNzIGZldGNoZXMKICAqCiAgKiBUaGlzIGlzIHN0b3JlZCBpbiB0aGUgcHJpdmF0ZSBhcmVhIG9mIHRoZSAmc3RydWN0IG5ldF9kZXZpY2UuCiAgKi8KIHN0cnVjdCBlZnhfbmljIHsKKwkvKiBUaGUgZm9sbG93aW5nIGZpZWxkcyBzaG91bGQgYmUgd3JpdHRlbiB2ZXJ5IHJhcmVseSAqLworCiAJY2hhciBuYW1lW0lGTkFNU0laXTsKIAlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjsKIAljb25zdCBzdHJ1Y3QgZWZ4X25pY190eXBlICp0eXBlOwpAQCAtNzE0LDEwICs3MTYsOSBAQAogCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3b3JrcXVldWU7CiAJY2hhciB3b3JrcXVldWVfbmFtZVsxNl07CiAJc3RydWN0IHdvcmtfc3RydWN0IHJlc2V0X3dvcms7Ci0Jc3RydWN0IGRlbGF5ZWRfd29yayBtb25pdG9yX3dvcms7CiAJcmVzb3VyY2Vfc2l6ZV90IG1lbWJhc2VfcGh5czsKIAl2b2lkIF9faW9tZW0gKm1lbWJhc2U7Ci0Jc3BpbmxvY2tfdCBiaXVfbG9jazsKKwogCWVudW0gZWZ4X2ludF9tb2RlIGludGVycnVwdF9tb2RlOwogCWJvb2wgaXJxX3J4X2FkYXB0aXZlOwogCXVuc2lnbmVkIGludCBpcnFfcnhfbW9kZXJhdGlvbjsKQEAgLTc0NCwxOSArNzQ1LDEzIEBACiAJdW5zaWduZWQgbG9uZyBpbnRfZXJyb3JfZXhwaXJlOwogCiAJc3RydWN0IGVmeF9idWZmZXIgaXJxX3N0YXR1czsKLQl2b2xhdGlsZSBzaWduZWQgaW50IGxhc3RfaXJxX2NwdTsKIAl1bnNpZ25lZCBpcnFfemVyb19jb3VudDsKIAl1bnNpZ25lZCBmYXRhbF9pcnFfbGV2ZWw7CiAKLQlzdHJ1Y3QgZWZ4X3NwaV9kZXZpY2UgKnNwaV9mbGFzaDsKLQlzdHJ1Y3QgZWZ4X3NwaV9kZXZpY2UgKnNwaV9lZXByb207Ci0Jc3RydWN0IG11dGV4IHNwaV9sb2NrOwogI2lmZGVmIENPTkZJR19TRkNfTVRECiAJc3RydWN0IGxpc3RfaGVhZCBtdGRfbGlzdDsKICNlbmRpZgogCi0JdW5zaWduZWQgbl9yeF9ub2Rlc2NfZHJvcF9jbnQ7Ci0KIAl2b2lkICpuaWNfZGF0YTsKIAogCXN0cnVjdCBtdXRleCBtYWNfbG9jazsKQEAgLTc2OCwyMiArNzYzLDE3IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXY7CiAJYm9vbCByeF9jaGVja3N1bV9lbmFibGVkOwogCi0Jc3RydWN0IGVmeF9tYWNfc3RhdHMgbWFjX3N0YXRzOwogCXN0cnVjdCBlZnhfYnVmZmVyIHN0YXRzX2J1ZmZlcjsKLQlzcGlubG9ja190IHN0YXRzX2xvY2s7CiAKIAlzdHJ1Y3QgZWZ4X21hY19vcGVyYXRpb25zICptYWNfb3A7Ci0JdW5zaWduZWQgY2hhciBtYWNfYWRkcmVzc1tFVEhfQUxFTl07CiAKIAl1bnNpZ25lZCBpbnQgcGh5X3R5cGU7Ci0Jc3RydWN0IG11dGV4IG1kaW9fbG9jazsKIAlzdHJ1Y3QgZWZ4X3BoeV9vcGVyYXRpb25zICpwaHlfb3A7CiAJdm9pZCAqcGh5X2RhdGE7CiAJc3RydWN0IG1kaW9faWZfaW5mbyBtZGlvOwogCXVuc2lnbmVkIGludCBtZGlvX2J1czsKIAllbnVtIGVmeF9waHlfbW9kZSBwaHlfbW9kZTsKIAotCWJvb2wgeG1hY19wb2xsX3JlcXVpcmVkOwogCXUzMiBsaW5rX2FkdmVydGlzaW5nOwogCXN0cnVjdCBlZnhfbGlua19zdGF0ZSBsaW5rX3N0YXRlOwogCXVuc2lnbmVkIGludCBuX2xpbmtfc3RhdGVfY2hhbmdlczsKQEAgLTc5OSw2ICs3ODksMTUgQEAKIAl2b2lkICpsb29wYmFja19zZWxmdGVzdDsKIAogCXN0cnVjdCBlZnhfZmlsdGVyX3N0YXRlICpmaWx0ZXJfc3RhdGU7CisKKwkvKiBUaGUgZm9sbG93aW5nIGZpZWxkcyBtYXkgYmUgd3JpdHRlbiBtb3JlIG9mdGVuICovCisKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIG1vbml0b3Jfd29yayBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOworCXNwaW5sb2NrX3QgYml1X2xvY2s7CisJdm9sYXRpbGUgc2lnbmVkIGludCBsYXN0X2lycV9jcHU7CisJdW5zaWduZWQgbl9yeF9ub2Rlc2NfZHJvcF9jbnQ7CisJc3RydWN0IGVmeF9tYWNfc3RhdHMgbWFjX3N0YXRzOworCXNwaW5sb2NrX3Qgc3RhdHNfbG9jazsKIH07CiAKIHN0YXRpYyBpbmxpbmUgaW50IGVmeF9kZXZfcmVnaXN0ZXJlZChzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQpAQCAtODMxLDYgKzgzMCw3IEBACiAgKgliZSBjYWxsZWQgd2hpbGUgdGhlIGNvbnRyb2xsZXIgaXMgdW5pbml0aWFsaXNlZC4KICAqIEBwcm9iZV9wb3J0OiBQcm9iZSB0aGUgTUFDIGFuZCBQSFkKICAqIEByZW1vdmVfcG9ydDogRnJlZSByZXNvdXJjZXMgYWxsb2NhdGVkIGJ5IHByb2JlX3BvcnQoKQorICogQGhhbmRsZV9nbG9iYWxfZXZlbnQ6IEhhbmRsZSBhICJnbG9iYWwiIGV2ZW50IChtYXkgYmUgJU5VTEwpCiAgKiBAcHJlcGFyZV9mbHVzaDogUHJlcGFyZSB0aGUgaGFyZHdhcmUgZm9yIGZsdXNoaW5nIHRoZSBETUEgcXVldWVzCiAgKiBAdXBkYXRlX3N0YXRzOiBVcGRhdGUgc3RhdGlzdGljcyBub3QgcHJvdmlkZWQgYnkgZXZlbnQgaGFuZGxpbmcKICAqIEBzdGFydF9zdGF0czogU3RhcnQgdGhlIHJlZ3VsYXIgZmV0Y2hpbmcgb2Ygc3RhdGlzdGljcwpAQCAtODc1LDYgKzg3NSw3IEBACiAJaW50ICgqcmVzZXQpKHN0cnVjdCBlZnhfbmljICplZngsIGVudW0gcmVzZXRfdHlwZSBtZXRob2QpOwogCWludCAoKnByb2JlX3BvcnQpKHN0cnVjdCBlZnhfbmljICplZngpOwogCXZvaWQgKCpyZW1vdmVfcG9ydCkoc3RydWN0IGVmeF9uaWMgKmVmeCk7CisJYm9vbCAoKmhhbmRsZV9nbG9iYWxfZXZlbnQpKHN0cnVjdCBlZnhfY2hhbm5lbCAqY2hhbm5lbCwgZWZ4X3F3b3JkX3QgKik7CiAJdm9pZCAoKnByZXBhcmVfZmx1c2gpKHN0cnVjdCBlZnhfbmljICplZngpOwogCXZvaWQgKCp1cGRhdGVfc3RhdHMpKHN0cnVjdCBlZnhfbmljICplZngpOwogCXZvaWQgKCpzdGFydF9zdGF0cykoc3RydWN0IGVmeF9uaWMgKmVmeCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvbmljLmMgYi9kcml2ZXJzL25ldC9zZmMvbmljLmMKaW5kZXggNjdjYjBjOS4uZGEzODY1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL25pYy5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9uaWMuYwpAQCAtMzYyLDYgKzM2MiwzNSBAQAogCQkJRlJfQVpfVFhfREVTQ19VUERfRFdPUkRfUDAsIHR4X3F1ZXVlLT5xdWV1ZSk7CiB9CiAKKy8qIFdyaXRlIHBvaW50ZXIgYW5kIGZpcnN0IGRlc2NyaXB0b3IgZm9yIFRYIGRlc2NyaXB0b3IgcmluZyAqLworc3RhdGljIGlubGluZSB2b2lkIGVmeF9wdXNoX3R4X2Rlc2Moc3RydWN0IGVmeF90eF9xdWV1ZSAqdHhfcXVldWUsCisJCQkJICAgIGNvbnN0IGVmeF9xd29yZF90ICp0eGQpCit7CisJdW5zaWduZWQgd3JpdGVfcHRyOworCWVmeF9vd29yZF90IHJlZzsKKworCUJVSUxEX0JVR19PTihGUkZfQVpfVFhfREVTQ19MQk4gIT0gMCk7CisJQlVJTERfQlVHX09OKEZSX0FBX1RYX0RFU0NfVVBEX0tFUiAhPSBGUl9CWl9UWF9ERVNDX1VQRF9QMCk7CisKKwl3cml0ZV9wdHIgPSB0eF9xdWV1ZS0+d3JpdGVfY291bnQgJiB0eF9xdWV1ZS0+cHRyX21hc2s7CisJRUZYX1BPUFVMQVRFX09XT1JEXzIocmVnLCBGUkZfQVpfVFhfREVTQ19QVVNIX0NNRCwgdHJ1ZSwKKwkJCSAgICAgRlJGX0FaX1RYX0RFU0NfV1BUUiwgd3JpdGVfcHRyKTsKKwlyZWcucXdvcmRbMF0gPSAqdHhkOworCWVmeF93cml0ZW9fcGFnZSh0eF9xdWV1ZS0+ZWZ4LCAmcmVnLAorCQkJRlJfQlpfVFhfREVTQ19VUERfUDAsIHR4X3F1ZXVlLT5xdWV1ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbAorZWZ4X21heV9wdXNoX3R4X2Rlc2Moc3RydWN0IGVmeF90eF9xdWV1ZSAqdHhfcXVldWUsIHVuc2lnbmVkIGludCB3cml0ZV9jb3VudCkKK3sKKwl1bnNpZ25lZCBlbXB0eV9yZWFkX2NvdW50ID0gQUNDRVNTX09OQ0UodHhfcXVldWUtPmVtcHR5X3JlYWRfY291bnQpOworCisJaWYgKGVtcHR5X3JlYWRfY291bnQgPT0gMCkKKwkJcmV0dXJuIGZhbHNlOworCisJdHhfcXVldWUtPmVtcHR5X3JlYWRfY291bnQgPSAwOworCXJldHVybiAoKGVtcHR5X3JlYWRfY291bnQgXiB3cml0ZV9jb3VudCkgJiB+RUZYX0VNUFRZX0NPVU5UX1ZBTElEKSA9PSAwOworfQogCiAvKiBGb3IgZWFjaCBlbnRyeSBpbnNlcnRlZCBpbnRvIHRoZSBzb2Z0d2FyZSBkZXNjcmlwdG9yIHJpbmcsIGNyZWF0ZSBhCiAgKiBkZXNjcmlwdG9yIGluIHRoZSBoYXJkd2FyZSBUWCBkZXNjcmlwdG9yIHJpbmcgKGluIGhvc3QgbWVtb3J5KSwgYW5kCkBAIC0zNzMsNiArNDAyLDcgQEAKIAlzdHJ1Y3QgZWZ4X3R4X2J1ZmZlciAqYnVmZmVyOwogCWVmeF9xd29yZF90ICp0eGQ7CiAJdW5zaWduZWQgd3JpdGVfcHRyOworCXVuc2lnbmVkIG9sZF93cml0ZV9jb3VudCA9IHR4X3F1ZXVlLT53cml0ZV9jb3VudDsKIAogCUJVR19PTih0eF9xdWV1ZS0+d3JpdGVfY291bnQgPT0gdHhfcXVldWUtPmluc2VydF9jb3VudCk7CiAKQEAgLTM5MSw3ICs0MjEsMTUgQEAKIAl9IHdoaWxlICh0eF9xdWV1ZS0+d3JpdGVfY291bnQgIT0gdHhfcXVldWUtPmluc2VydF9jb3VudCk7CiAKIAl3bWIoKTsgLyogRW5zdXJlIGRlc2NyaXB0b3JzIGFyZSB3cml0dGVuIGJlZm9yZSB0aGV5IGFyZSBmZXRjaGVkICovCi0JZWZ4X25vdGlmeV90eF9kZXNjKHR4X3F1ZXVlKTsKKworCWlmIChlZnhfbWF5X3B1c2hfdHhfZGVzYyh0eF9xdWV1ZSwgb2xkX3dyaXRlX2NvdW50KSkgeworCQl0eGQgPSBlZnhfdHhfZGVzYyh0eF9xdWV1ZSwKKwkJCQkgIG9sZF93cml0ZV9jb3VudCAmIHR4X3F1ZXVlLT5wdHJfbWFzayk7CisJCWVmeF9wdXNoX3R4X2Rlc2ModHhfcXVldWUsIHR4ZCk7CisJCSsrdHhfcXVldWUtPnB1c2hlczsKKwl9IGVsc2UgeworCQllZnhfbm90aWZ5X3R4X2Rlc2ModHhfcXVldWUpOworCX0KIH0KIAogLyogQWxsb2NhdGUgaGFyZHdhcmUgcmVzb3VyY2VzIGZvciBhIFRYIHF1ZXVlICovCkBAIC04OTQsNDYgKzkzMiw2IEBACiAJCQkgIGNoYW5uZWwtPmNoYW5uZWwsIEVGWF9RV09SRF9WQUwoKmV2ZW50KSk7CiB9CiAKLS8qIEdsb2JhbCBldmVudHMgYXJlIGJhc2ljYWxseSBQSFkgZXZlbnRzICovCi1zdGF0aWMgdm9pZAotZWZ4X2hhbmRsZV9nbG9iYWxfZXZlbnQoc3RydWN0IGVmeF9jaGFubmVsICpjaGFubmVsLCBlZnhfcXdvcmRfdCAqZXZlbnQpCi17Ci0Jc3RydWN0IGVmeF9uaWMgKmVmeCA9IGNoYW5uZWwtPmVmeDsKLQlib29sIGhhbmRsZWQgPSBmYWxzZTsKLQotCWlmIChFRlhfUVdPUkRfRklFTEQoKmV2ZW50LCBGU0ZfQUJfR0xCX0VWX0dfUEhZMF9JTlRSKSB8fAotCSAgICBFRlhfUVdPUkRfRklFTEQoKmV2ZW50LCBGU0ZfQUJfR0xCX0VWX1hHX1BIWTBfSU5UUikgfHwKLQkgICAgRUZYX1FXT1JEX0ZJRUxEKCpldmVudCwgRlNGX0FCX0dMQl9FVl9YRlBfUEhZMF9JTlRSKSkgewotCQkvKiBJZ25vcmVkICovCi0JCWhhbmRsZWQgPSB0cnVlOwotCX0KLQotCWlmICgoZWZ4X25pY19yZXYoZWZ4KSA+PSBFRlhfUkVWX0ZBTENPTl9CMCkgJiYKLQkgICAgRUZYX1FXT1JEX0ZJRUxEKCpldmVudCwgRlNGX0JCX0dMQl9FVl9YR19NR1RfSU5UUikpIHsKLQkJZWZ4LT54bWFjX3BvbGxfcmVxdWlyZWQgPSB0cnVlOwotCQloYW5kbGVkID0gdHJ1ZTsKLQl9Ci0KLQlpZiAoZWZ4X25pY19yZXYoZWZ4KSA8PSBFRlhfUkVWX0ZBTENPTl9BMSA/Ci0JICAgIEVGWF9RV09SRF9GSUVMRCgqZXZlbnQsIEZTRl9BQV9HTEJfRVZfUlhfUkVDT1ZFUlkpIDoKLQkgICAgRUZYX1FXT1JEX0ZJRUxEKCpldmVudCwgRlNGX0JCX0dMQl9FVl9SWF9SRUNPVkVSWSkpIHsKLQkJbmV0aWZfZXJyKGVmeCwgcnhfZXJyLCBlZngtPm5ldF9kZXYsCi0JCQkgICJjaGFubmVsICVkIHNlZW4gZ2xvYmFsIFJYX1JFU0VUIGV2ZW50LiBSZXNldHRpbmcuXG4iLAotCQkJICBjaGFubmVsLT5jaGFubmVsKTsKLQotCQlhdG9taWNfaW5jKCZlZngtPnJ4X3Jlc2V0KTsKLQkJZWZ4X3NjaGVkdWxlX3Jlc2V0KGVmeCwgRUZYX1dPUktBUk9VTkRfNjU1NShlZngpID8KLQkJCQkgICBSRVNFVF9UWVBFX1JYX1JFQ09WRVJZIDogUkVTRVRfVFlQRV9ESVNBQkxFKTsKLQkJaGFuZGxlZCA9IHRydWU7Ci0JfQotCi0JaWYgKCFoYW5kbGVkKQotCQluZXRpZl9lcnIoZWZ4LCBodywgZWZ4LT5uZXRfZGV2LAotCQkJICAiY2hhbm5lbCAlZCB1bmtub3duIGdsb2JhbCBldmVudCAiCi0JCQkgIEVGWF9RV09SRF9GTVQgIlxuIiwgY2hhbm5lbC0+Y2hhbm5lbCwKLQkJCSAgRUZYX1FXT1JEX1ZBTCgqZXZlbnQpKTsKLX0KLQogc3RhdGljIHZvaWQKIGVmeF9oYW5kbGVfZHJpdmVyX2V2ZW50KHN0cnVjdCBlZnhfY2hhbm5lbCAqY2hhbm5lbCwgZWZ4X3F3b3JkX3QgKmV2ZW50KQogewpAQCAtMTA1MCwxNSArMTA0OCwxNyBAQAogCQljYXNlIEZTRV9BWl9FVl9DT0RFX0RSVl9HRU5fRVY6CiAJCQllZnhfaGFuZGxlX2dlbmVyYXRlZF9ldmVudChjaGFubmVsLCAmZXZlbnQpOwogCQkJYnJlYWs7Ci0JCWNhc2UgRlNFX0FaX0VWX0NPREVfR0xPQkFMX0VWOgotCQkJZWZ4X2hhbmRsZV9nbG9iYWxfZXZlbnQoY2hhbm5lbCwgJmV2ZW50KTsKLQkJCWJyZWFrOwogCQljYXNlIEZTRV9BWl9FVl9DT0RFX0RSSVZFUl9FVjoKIAkJCWVmeF9oYW5kbGVfZHJpdmVyX2V2ZW50KGNoYW5uZWwsICZldmVudCk7CiAJCQlicmVhazsKIAkJY2FzZSBGU0VfQ1pfRVZfQ09ERV9NQ0RJX0VWOgogCQkJZWZ4X21jZGlfcHJvY2Vzc19ldmVudChjaGFubmVsLCAmZXZlbnQpOwogCQkJYnJlYWs7CisJCWNhc2UgRlNFX0FaX0VWX0NPREVfR0xPQkFMX0VWOgorCQkJaWYgKGVmeC0+dHlwZS0+aGFuZGxlX2dsb2JhbF9ldmVudCAmJgorCQkJICAgIGVmeC0+dHlwZS0+aGFuZGxlX2dsb2JhbF9ldmVudChjaGFubmVsLCAmZXZlbnQpKQorCQkJCWJyZWFrOworCQkJLyogZWxzZSBmYWxsIHRocm91Z2ggKi8KIAkJZGVmYXVsdDoKIAkJCW5ldGlmX2VycihjaGFubmVsLT5lZngsIGh3LCBjaGFubmVsLT5lZngtPm5ldF9kZXYsCiAJCQkJICAiY2hhbm5lbCAlZCB1bmtub3duIGV2ZW50IHR5cGUgJWQgKGRhdGEgIgpAQCAtMTY3MCw3ICsxNjcwLDcgQEAKIAlFRlhfU0VUX09XT1JEX0ZJRUxEKHRlbXAsIEZSRl9BWl9UWF9SWF9TUEFDRVIsIDB4ZmUpOwogCUVGWF9TRVRfT1dPUkRfRklFTEQodGVtcCwgRlJGX0FaX1RYX1JYX1NQQUNFUl9FTiwgMSk7CiAJRUZYX1NFVF9PV09SRF9GSUVMRCh0ZW1wLCBGUkZfQVpfVFhfT05FX1BLVF9QRVJfUSwgMSk7Ci0JRUZYX1NFVF9PV09SRF9GSUVMRCh0ZW1wLCBGUkZfQVpfVFhfUFVTSF9FTiwgMCk7CisJRUZYX1NFVF9PV09SRF9GSUVMRCh0ZW1wLCBGUkZfQVpfVFhfUFVTSF9FTiwgMSk7CiAJRUZYX1NFVF9PV09SRF9GSUVMRCh0ZW1wLCBGUkZfQVpfVFhfRElTX05PTl9JUF9FViwgMSk7CiAJLyogRW5hYmxlIFNXX0VWIHRvIGluaGVyaXQgaW4gY2hhciBkcml2ZXIgLSBhc3N1bWUgaGFybWxlc3MgaGVyZSAqLwogCUVGWF9TRVRfT1dPUkRfRklFTEQodGVtcCwgRlJGX0FaX1RYX1NPRlRfRVZUX0VOLCAxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9uaWMuaCBiL2RyaXZlcnMvbmV0L3NmYy9uaWMuaAppbmRleCAwNDM4ZGM5Li5lYjA1ODY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvbmljLmgKKysrIGIvZHJpdmVycy9uZXQvc2ZjL25pYy5oCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSAibmV0X2RyaXZlci5oIgogI2luY2x1ZGUgImVmeC5oIgogI2luY2x1ZGUgIm1jZGkuaCIKKyNpbmNsdWRlICJzcGkuaCIKIAogLyoKICAqIEZhbGNvbiBoYXJkd2FyZSBjb250cm9sCkBAIC0xMTMsNiArMTE0LDExIEBACiAgKiBAc3RhdHNfcGVuZGluZzogSXMgdGhlcmUgYSBwZW5kaW5nIERNQSBvZiBNQUMgc3RhdGlzdGljcy4KICAqIEBzdGF0c190aW1lcjogQSB0aW1lciBmb3IgcmVndWxhcmx5IGZldGNoaW5nIE1BQyBzdGF0aXN0aWNzLgogICogQHN0YXRzX2RtYV9kb25lOiBQb2ludGVyIHRvIHRoZSBmbGFnIHdoaWNoIGluZGljYXRlcyBETUEgY29tcGxldGlvbi4KKyAqIEBzcGlfZmxhc2g6IFNQSSBmbGFzaCBkZXZpY2UKKyAqIEBzcGlfZWVwcm9tOiBTUEkgRUVQUk9NIGRldmljZQorICogQHNwaV9sb2NrOiBTUEkgYnVzIGxvY2sKKyAqIEBtZGlvX2xvY2s6IE1ESU8gYnVzIGxvY2sKKyAqIEB4bWFjX3BvbGxfcmVxdWlyZWQ6IFhNQUMgbGluayBzdGF0ZSBuZWVkcyBwb2xsaW5nCiAgKi8KIHN0cnVjdCBmYWxjb25fbmljX2RhdGEgewogCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2MjsKQEAgLTEyMSw2ICsxMjcsMTEgQEAKIAlib29sIHN0YXRzX3BlbmRpbmc7CiAJc3RydWN0IHRpbWVyX2xpc3Qgc3RhdHNfdGltZXI7CiAJdTMyICpzdGF0c19kbWFfZG9uZTsKKwlzdHJ1Y3QgZWZ4X3NwaV9kZXZpY2Ugc3BpX2ZsYXNoOworCXN0cnVjdCBlZnhfc3BpX2RldmljZSBzcGlfZWVwcm9tOworCXN0cnVjdCBtdXRleCBzcGlfbG9jazsKKwlzdHJ1Y3QgbXV0ZXggbWRpb19sb2NrOworCWJvb2wgeG1hY19wb2xsX3JlcXVpcmVkOwogfTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgZmFsY29uX2JvYXJkICpmYWxjb25fYm9hcmQoc3RydWN0IGVmeF9uaWMgKmVmeCkKQEAgLTEzNSw3ICsxNDYsNiBAQAogICogQGZ3X2J1aWxkOiBGaXJtd2FyZSBidWlsZCBudW1iZXIKICAqIEBtY2RpOiBNYW5hZ2VtZW50LUNvbnRyb2xsZXItdG8tRHJpdmVyIEludGVyZmFjZQogICogQHdvbF9maWx0ZXJfaWQ6IFdha2Utb24tTEFOIHBhY2tldCBmaWx0ZXIgaWQKLSAqIEBpcHY2X3Jzc19rZXk6IFRvZXBsaXR6IGhhc2gga2V5IGZvciBJUHY2IFJTUwogICovCiBzdHJ1Y3Qgc2llbmFfbmljX2RhdGEgewogCXU2NCBmd192ZXJzaW9uOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL3F0MjAyeF9waHkuYyBiL2RyaXZlcnMvbmV0L3NmYy9xdDIwMnhfcGh5LmMKaW5kZXggNjg4MTNkMS4uZWEzYWUwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL3F0MjAyeF9waHkuYworKysgYi9kcml2ZXJzL25ldC9zZmMvcXQyMDJ4X3BoeS5jCkBAIC00MSw2ICs0MSw4IEBACiAjZGVmaW5lIFBDU19VQ19TVEFUVVNfTEJOCTAKICNkZWZpbmUgUENTX1VDX1NUQVRVU19XSURUSAk4CiAjZGVmaW5lIFBDU19VQ19TVEFUVVNfRldfU0FWRQkweDIwCisjZGVmaW5lIFBNQV9QTURfTU9ERV9SRUcJMHhjMzAxCisjZGVmaW5lIFBNQV9QTURfUlhJTl9TRUxfTEJOCTYKICNkZWZpbmUgUE1BX1BNRF9GVFhfQ1RSTDJfUkVHCTB4YzMwOQogI2RlZmluZSBQTUFfUE1EX0ZUWF9TVEFUSUNfTEJOCTEzCiAjZGVmaW5lIFBNQV9QTURfVkVORDFfUkVHCTB4YzAwMQpAQCAtMjgyLDYgKzI4NCwxMCBAQAogCSAqIHNsb3cpIHJlbG9hZCBvZiB0aGUgZmlybXdhcmUgaW1hZ2UgKHRoZSBtaWNyb2NvbnRyb2xsZXIncyBjb2RlCiAJICogbWVtb3J5IGlzIG5vdCBhZmZlY3RlZCBieSB0aGUgbWljcm9jb250cm9sbGVyIHJlc2V0KS4gKi8KIAllZnhfbWRpb193cml0ZShlZngsIDEsIDB4YzMxNywgMHgwMGZmKTsKKwkvKiBQTUEvUE1EIGxvb3BiYWNrIHNldHMgUlhJTiB0byBpbnZlcnNlIHBvbGFyaXR5IGFuZCB0aGUgZmlybXdhcmUKKwkgKiByZXN0YXJ0IGRvZXNuJ3QgcmVzZXQgaXQuIFdlIG5lZWQgdG8gZG8gdGhhdCBvdXJzZWx2ZXMuICovCisJZWZ4X21kaW9fc2V0X2ZsYWcoZWZ4LCAxLCBQTUFfUE1EX01PREVfUkVHLAorCQkJICAxIDw8IFBNQV9QTURfUlhJTl9TRUxfTEJOLCBmYWxzZSk7CiAJZWZ4X21kaW9fd3JpdGUoZWZ4LCAxLCAweGMzMDAsIDB4MDAwMik7CiAJbXNsZWVwKDIwKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL3J4LmMgYi9kcml2ZXJzL25ldC9zZmMvcnguYwppbmRleCA2ZDA5NTliLi4zOTI1ZmQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvcnguYworKysgYi9kcml2ZXJzL25ldC9zZmMvcnguYwpAQCAtMzcsNyArMzcsNyBAQAogICogVGhpcyBkcml2ZXIgc3VwcG9ydHMgdHdvIG1ldGhvZHMgZm9yIGFsbG9jYXRpbmcgYW5kIHVzaW5nIFJYIGJ1ZmZlcnM6CiAgKiBlYWNoIFJYIGJ1ZmZlciBtYXkgYmUgYmFja2VkIGJ5IGFuIHNrYiBvciBieSBhbiBvcmRlci1uIHBhZ2UuCiAgKgotICogV2hlbiBMUk8gaXMgaW4gdXNlIHRoZW4gdGhlIHNlY29uZCBtZXRob2QgaGFzIGEgbG93ZXIgb3ZlcmhlYWQsCisgKiBXaGVuIEdSTyBpcyBpbiB1c2UgdGhlbiB0aGUgc2Vjb25kIG1ldGhvZCBoYXMgYSBsb3dlciBvdmVyaGVhZCwKICAqIHNpbmNlIHdlIGRvbid0IGhhdmUgdG8gYWxsb2NhdGUgdGhlbiBmcmVlIHNrYnMgb24gcmVhc3NlbWJsZWQgZnJhbWVzLgogICoKICAqIFZhbHVlczoKQEAgLTUwLDI1ICs1MCwyNSBAQAogICoKICAqICAgLSBTaW5jZSBwdXNoaW5nIGFuZCBwb3BwaW5nIGRlc2NyaXB0b3JzIGFyZSBzZXBhcmF0ZWQgYnkgdGhlIHJ4X3F1ZXVlCiAgKiAgICAgc2l6ZSwgc28gdGhlIHdhdGVybWFya3Mgc2hvdWxkIGJlIH5yeGRfc2l6ZS4KLSAqICAgLSBUaGUgcGVyZm9ybWFuY2Ugd2luIGJ5IHVzaW5nIHBhZ2UtYmFzZWQgYWxsb2NhdGlvbiBmb3IgTFJPIGlzIGxlc3MKLSAqICAgICB0aGFuIHRoZSBwZXJmb3JtYW5jZSBoaXQgb2YgdXNpbmcgcGFnZS1iYXNlZCBhbGxvY2F0aW9uIG9mIG5vbi1MUk8sCisgKiAgIC0gVGhlIHBlcmZvcm1hbmNlIHdpbiBieSB1c2luZyBwYWdlLWJhc2VkIGFsbG9jYXRpb24gZm9yIEdSTyBpcyBsZXNzCisgKiAgICAgdGhhbiB0aGUgcGVyZm9ybWFuY2UgaGl0IG9mIHVzaW5nIHBhZ2UtYmFzZWQgYWxsb2NhdGlvbiBvZiBub24tR1JPLAogICogICAgIHNvIHRoZSB3YXRlcm1hcmtzIHNob3VsZCByZWZsZWN0IHRoaXMuCiAgKgogICogUGVyIGNoYW5uZWwgd2UgbWFpbnRhaW4gYSBzaW5nbGUgdmFyaWFibGUsIHVwZGF0ZWQgYnkgZWFjaCBjaGFubmVsOgogICoKLSAqICAgcnhfYWxsb2NfbGV2ZWwgKz0gKGxyb19wZXJmb3JtZWQgPyBSWF9BTExPQ19GQUNUT1JfTFJPIDoKKyAqICAgcnhfYWxsb2NfbGV2ZWwgKz0gKGdyb19wZXJmb3JtZWQgPyBSWF9BTExPQ19GQUNUT1JfR1JPIDoKICAqICAgICAgICAgICAgICAgICAgICAgIFJYX0FMTE9DX0ZBQ1RPUl9TS0IpCiAgKiBQZXIgTkFQSSBwb2xsIGludGVydmFsLCB3ZSBjb25zdHJhaW4gcnhfYWxsb2NfbGV2ZWwgdG8gMC4uTUFYICh3aGljaAogICogbGltaXRzIHRoZSBoeXN0ZXJlc2lzKSwgYW5kIHVwZGF0ZSB0aGUgYWxsb2NhdGlvbiBzdHJhdGVneToKICAqCi0gKiAgIHJ4X2FsbG9jX21ldGhvZCA9IChyeF9hbGxvY19sZXZlbCA+IFJYX0FMTE9DX0xFVkVMX0xSTyA/CisgKiAgIHJ4X2FsbG9jX21ldGhvZCA9IChyeF9hbGxvY19sZXZlbCA+IFJYX0FMTE9DX0xFVkVMX0dSTyA/CiAgKiAgICAgICAgICAgICAgICAgICAgICBSWF9BTExPQ19NRVRIT0RfUEFHRSA6IFJYX0FMTE9DX01FVEhPRF9TS0IpCiAgKi8KIHN0YXRpYyBpbnQgcnhfYWxsb2NfbWV0aG9kID0gUlhfQUxMT0NfTUVUSE9EX0FVVE87CiAKLSNkZWZpbmUgUlhfQUxMT0NfTEVWRUxfTFJPIDB4MjAwMAorI2RlZmluZSBSWF9BTExPQ19MRVZFTF9HUk8gMHgyMDAwCiAjZGVmaW5lIFJYX0FMTE9DX0xFVkVMX01BWCAweDMwMDAKLSNkZWZpbmUgUlhfQUxMT0NfRkFDVE9SX0xSTyAxCisjZGVmaW5lIFJYX0FMTE9DX0ZBQ1RPUl9HUk8gMQogI2RlZmluZSBSWF9BTExPQ19GQUNUT1JfU0tCICgtMikKIAogLyogVGhpcyBpcyB0aGUgcGVyY2VudGFnZSBmaWxsIGxldmVsIGJlbG93IHdoaWNoIG5ldyBSWCBkZXNjcmlwdG9ycwpAQCAtNDQxLDE5ICs0NDEsMTkgQEAKIAllZnhfcnhfcXVldWVfY2hhbm5lbChyeF9xdWV1ZSktPm5fcnhfb3Zlcmxlbmd0aCsrOwogfQogCi0vKiBQYXNzIGEgcmVjZWl2ZWQgcGFja2V0IHVwIHRocm91Z2ggdGhlIGdlbmVyaWMgTFJPIHN0YWNrCisvKiBQYXNzIGEgcmVjZWl2ZWQgcGFja2V0IHVwIHRocm91Z2ggdGhlIGdlbmVyaWMgR1JPIHN0YWNrCiAgKgogICogSGFuZGxlcyBkcml2ZXJsaW5rIHZldG8sIGFuZCBwYXNzZXMgdGhlIGZyYWdtZW50IHVwIHZpYQotICogdGhlIGFwcHJvcHJpYXRlIExSTyBtZXRob2QKKyAqIHRoZSBhcHByb3ByaWF0ZSBHUk8gbWV0aG9kCiAgKi8KLXN0YXRpYyB2b2lkIGVmeF9yeF9wYWNrZXRfbHJvKHN0cnVjdCBlZnhfY2hhbm5lbCAqY2hhbm5lbCwKK3N0YXRpYyB2b2lkIGVmeF9yeF9wYWNrZXRfZ3JvKHN0cnVjdCBlZnhfY2hhbm5lbCAqY2hhbm5lbCwKIAkJCSAgICAgIHN0cnVjdCBlZnhfcnhfYnVmZmVyICpyeF9idWYsCiAJCQkgICAgICBib29sIGNoZWNrc3VtbWVkKQogewogCXN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSA9ICZjaGFubmVsLT5uYXBpX3N0cjsKIAlncm9fcmVzdWx0X3QgZ3JvX3Jlc3VsdDsKIAotCS8qIFBhc3MgdGhlIHNrYi9wYWdlIGludG8gdGhlIExSTyBlbmdpbmUgKi8KKwkvKiBQYXNzIHRoZSBza2IvcGFnZSBpbnRvIHRoZSBHUk8gZW5naW5lICovCiAJaWYgKHJ4X2J1Zi0+cGFnZSkgewogCQlzdHJ1Y3QgZWZ4X25pYyAqZWZ4ID0gY2hhbm5lbC0+ZWZ4OwogCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHJ4X2J1Zi0+cGFnZTsKQEAgLTQ5OSw3ICs0OTksNyBAQAogCWlmIChncm9fcmVzdWx0ID09IEdST19OT1JNQUwpIHsKIAkJY2hhbm5lbC0+cnhfYWxsb2NfbGV2ZWwgKz0gUlhfQUxMT0NfRkFDVE9SX1NLQjsKIAl9IGVsc2UgaWYgKGdyb19yZXN1bHQgIT0gR1JPX0RST1ApIHsKLQkJY2hhbm5lbC0+cnhfYWxsb2NfbGV2ZWwgKz0gUlhfQUxMT0NfRkFDVE9SX0xSTzsKKwkJY2hhbm5lbC0+cnhfYWxsb2NfbGV2ZWwgKz0gUlhfQUxMT0NfRkFDVE9SX0dSTzsKIAkJY2hhbm5lbC0+aXJxX21vZF9zY29yZSArPSAyOwogCX0KIH0KQEAgLTYwNSw3ICs2MDUsNyBAQAogCX0KIAogCWlmIChsaWtlbHkoY2hlY2tzdW1tZWQgfHwgcnhfYnVmLT5wYWdlKSkgewotCQllZnhfcnhfcGFja2V0X2xybyhjaGFubmVsLCByeF9idWYsIGNoZWNrc3VtbWVkKTsKKwkJZWZ4X3J4X3BhY2tldF9ncm8oY2hhbm5lbCwgcnhfYnVmLCBjaGVja3N1bW1lZCk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTYyOCw3ICs2MjgsNyBAQAogewogCWVudW0gZWZ4X3J4X2FsbG9jX21ldGhvZCBtZXRob2QgPSByeF9hbGxvY19tZXRob2Q7CiAKLQkvKiBPbmx5IG1ha2VzIHNlbnNlIHRvIHVzZSBwYWdlIGJhc2VkIGFsbG9jYXRpb24gaWYgTFJPIGlzIGVuYWJsZWQgKi8KKwkvKiBPbmx5IG1ha2VzIHNlbnNlIHRvIHVzZSBwYWdlIGJhc2VkIGFsbG9jYXRpb24gaWYgR1JPIGlzIGVuYWJsZWQgKi8KIAlpZiAoIShjaGFubmVsLT5lZngtPm5ldF9kZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9HUk8pKSB7CiAJCW1ldGhvZCA9IFJYX0FMTE9DX01FVEhPRF9TS0I7CiAJfSBlbHNlIGlmIChtZXRob2QgPT0gUlhfQUxMT0NfTUVUSE9EX0FVVE8pIHsKQEAgLTYzOSw3ICs2MzksNyBAQAogCQkJY2hhbm5lbC0+cnhfYWxsb2NfbGV2ZWwgPSBSWF9BTExPQ19MRVZFTF9NQVg7CiAKIAkJLyogRGVjaWRlIG9uIHRoZSBhbGxvY2F0aW9uIG1ldGhvZCAqLwotCQltZXRob2QgPSAoKGNoYW5uZWwtPnJ4X2FsbG9jX2xldmVsID4gUlhfQUxMT0NfTEVWRUxfTFJPKSA/CisJCW1ldGhvZCA9ICgoY2hhbm5lbC0+cnhfYWxsb2NfbGV2ZWwgPiBSWF9BTExPQ19MRVZFTF9HUk8pID8KIAkJCSAgUlhfQUxMT0NfTUVUSE9EX1BBR0UgOiBSWF9BTExPQ19NRVRIT0RfU0tCKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9zaWVuYS5jIGIvZHJpdmVycy9uZXQvc2ZjL3NpZW5hLmMKaW5kZXggNDUyMzZmNS4uYmY4NDU2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL3NpZW5hLmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL3NpZW5hLmMKQEAgLTE5NCwxMyArMTk0LDcgQEAKIAogc3RhdGljIGludCBzaWVuYV9wcm9iZV9udmNvbmZpZyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQogewotCWludCByYzsKLQotCXJjID0gZWZ4X21jZGlfZ2V0X2JvYXJkX2NmZyhlZngsIGVmeC0+bWFjX2FkZHJlc3MsIE5VTEwpOwotCWlmIChyYykKLQkJcmV0dXJuIHJjOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIGVmeF9tY2RpX2dldF9ib2FyZF9jZmcoZWZ4LCBlZngtPm5ldF9kZXYtPnBlcm1fYWRkciwgTlVMTCk7CiB9CiAKIHN0YXRpYyBpbnQgc2llbmFfcHJvYmVfbmljKHN0cnVjdCBlZnhfbmljICplZngpCkBAIC01NjIsNyArNTU2LDcgQEAKIAkJaWYgKG5pY19kYXRhLT53b2xfZmlsdGVyX2lkICE9IC0xKQogCQkJZWZ4X21jZGlfd29sX2ZpbHRlcl9yZW1vdmUoZWZ4LAogCQkJCQkJICAgbmljX2RhdGEtPndvbF9maWx0ZXJfaWQpOwotCQlyYyA9IGVmeF9tY2RpX3dvbF9maWx0ZXJfc2V0X21hZ2ljKGVmeCwgZWZ4LT5tYWNfYWRkcmVzcywKKwkJcmMgPSBlZnhfbWNkaV93b2xfZmlsdGVyX3NldF9tYWdpYyhlZngsIGVmeC0+bmV0X2Rldi0+ZGV2X2FkZHIsCiAJCQkJCQkgICAmbmljX2RhdGEtPndvbF9maWx0ZXJfaWQpOwogCQlpZiAocmMpCiAJCQlnb3RvIGZhaWw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvc3BpLmggYi9kcml2ZXJzL25ldC9zZmMvc3BpLmgKaW5kZXggOGJmNGZjZS4uODc5YjdmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL3NwaS5oCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9zcGkuaApAQCAtNjEsNiArNjEsMTEgQEAKIAl1bnNpZ25lZCBpbnQgYmxvY2tfc2l6ZTsKIH07CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBlZnhfc3BpX3ByZXNlbnQoY29uc3Qgc3RydWN0IGVmeF9zcGlfZGV2aWNlICpzcGkpCit7CisJcmV0dXJuIHNwaS0+c2l6ZSAhPSAwOworfQorCiBpbnQgZmFsY29uX3NwaV9jbWQoc3RydWN0IGVmeF9uaWMgKmVmeCwKIAkJICAgY29uc3Qgc3RydWN0IGVmeF9zcGlfZGV2aWNlICpzcGksIHVuc2lnbmVkIGludCBjb21tYW5kLAogCQkgICBpbnQgYWRkcmVzcywgY29uc3Qgdm9pZCogaW4sIHZvaWQgKm91dCwgc2l6ZV90IGxlbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvdGVueHByZXNzLmMgYi9kcml2ZXJzL25ldC9zZmMvdGVueHByZXNzLmMKaW5kZXggMWJjNmM0OC4uZjEwMjkxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL3RlbnhwcmVzcy5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy90ZW54cHJlc3MuYwpAQCAtMTUsOSArMTUsNyBAQAogI2luY2x1ZGUgIm1kaW9fMTBnLmgiCiAjaW5jbHVkZSAibmljLmgiCiAjaW5jbHVkZSAicGh5LmgiCi0jaW5jbHVkZSAicmVncy5oIgogI2luY2x1ZGUgIndvcmthcm91bmRzLmgiCi0jaW5jbHVkZSAic2VsZnRlc3QuaCIKIAogLyogV2UgZXhwZWN0IHRoZXNlIE1NRHMgdG8gYmUgaW4gdGhlIHBhY2thZ2UuICovCiAjZGVmaW5lIFRFTlhQUkVTU19SRVFVSVJFRF9ERVZTIChNRElPX0RFVlNfUE1BUE1ECXwgXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL3R4LmMgYi9kcml2ZXJzL25ldC9zZmMvdHguYwppbmRleCAxMTcyNjk4Li4yZjVlOWRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvdHguYworKysgYi9kcml2ZXJzL25ldC9zZmMvdHguYwpAQCAtMzAsNTAgKzMwLDYgQEAKICAqLwogI2RlZmluZSBFRlhfVFhRX1RIUkVTSE9MRChfZWZ4KSAoKF9lZngpLT50eHFfZW50cmllcyAvIDJ1KQogCi0vKiBXZSBuZWVkIHRvIGJlIGFibGUgdG8gbmVzdCBjYWxscyB0byBuZXRpZl90eF9zdG9wX3F1ZXVlKCksIHBhcnRseQotICogYmVjYXVzZSBvZiB0aGUgMiBoYXJkd2FyZSBxdWV1ZXMgYXNzb2NpYXRlZCB3aXRoIGVhY2ggY29yZSBxdWV1ZSwKLSAqIGJ1dCBhbHNvIHNvIHRoYXQgd2UgY2FuIGluaGliaXQgVFggZm9yIHJlYXNvbnMgb3RoZXIgdGhhbiBhIGZ1bGwKLSAqIGhhcmR3YXJlIHF1ZXVlLiAqLwotdm9pZCBlZnhfc3RvcF9xdWV1ZShzdHJ1Y3QgZWZ4X2NoYW5uZWwgKmNoYW5uZWwpCi17Ci0Jc3RydWN0IGVmeF9uaWMgKmVmeCA9IGNoYW5uZWwtPmVmeDsKLQlzdHJ1Y3QgZWZ4X3R4X3F1ZXVlICp0eF9xdWV1ZSA9IGVmeF9jaGFubmVsX2dldF90eF9xdWV1ZShjaGFubmVsLCAwKTsKLQotCWlmICghdHhfcXVldWUpCi0JCXJldHVybjsKLQotCXNwaW5fbG9ja19iaCgmY2hhbm5lbC0+dHhfc3RvcF9sb2NrKTsKLQluZXRpZl92ZGJnKGVmeCwgdHhfcXVldWVkLCBlZngtPm5ldF9kZXYsICJzdG9wIFRYIHF1ZXVlXG4iKTsKLQotCWF0b21pY19pbmMoJmNoYW5uZWwtPnR4X3N0b3BfY291bnQpOwotCW5ldGlmX3R4X3N0b3BfcXVldWUoCi0JCW5ldGRldl9nZXRfdHhfcXVldWUoZWZ4LT5uZXRfZGV2LAotCQkJCSAgICB0eF9xdWV1ZS0+cXVldWUgLyBFRlhfVFhRX1RZUEVTKSk7Ci0KLQlzcGluX3VubG9ja19iaCgmY2hhbm5lbC0+dHhfc3RvcF9sb2NrKTsKLX0KLQotLyogRGVjcmVtZW50IGNvcmUgVFggcXVldWUgc3RvcCBjb3VudCBhbmQgd2FrZSBpdCBpZiB0aGUgY291bnQgaXMgMCAqLwotdm9pZCBlZnhfd2FrZV9xdWV1ZShzdHJ1Y3QgZWZ4X2NoYW5uZWwgKmNoYW5uZWwpCi17Ci0Jc3RydWN0IGVmeF9uaWMgKmVmeCA9IGNoYW5uZWwtPmVmeDsKLQlzdHJ1Y3QgZWZ4X3R4X3F1ZXVlICp0eF9xdWV1ZSA9IGVmeF9jaGFubmVsX2dldF90eF9xdWV1ZShjaGFubmVsLCAwKTsKLQotCWlmICghdHhfcXVldWUpCi0JCXJldHVybjsKLQotCWxvY2FsX2JoX2Rpc2FibGUoKTsKLQlpZiAoYXRvbWljX2RlY19hbmRfbG9jaygmY2hhbm5lbC0+dHhfc3RvcF9jb3VudCwKLQkJCQkmY2hhbm5lbC0+dHhfc3RvcF9sb2NrKSkgewotCQluZXRpZl92ZGJnKGVmeCwgdHhfcXVldWVkLCBlZngtPm5ldF9kZXYsICJ3YWtpbmcgVFggcXVldWVcbiIpOwotCQluZXRpZl90eF93YWtlX3F1ZXVlKAotCQkJbmV0ZGV2X2dldF90eF9xdWV1ZShlZngtPm5ldF9kZXYsCi0JCQkJCSAgICB0eF9xdWV1ZS0+cXVldWUgLyBFRlhfVFhRX1RZUEVTKSk7Ci0JCXNwaW5fdW5sb2NrKCZjaGFubmVsLT50eF9zdG9wX2xvY2spOwotCX0KLQlsb2NhbF9iaF9lbmFibGUoKTsKLX0KLQogc3RhdGljIHZvaWQgZWZ4X2RlcXVldWVfYnVmZmVyKHN0cnVjdCBlZnhfdHhfcXVldWUgKnR4X3F1ZXVlLAogCQkJICAgICAgIHN0cnVjdCBlZnhfdHhfYnVmZmVyICpidWZmZXIpCiB7CkBAIC0yMzQsMjEgKzE5MCwyMiBAQAogCQkJCSAqIGNoZWNrZWQuICBVcGRhdGUgdGhlIHhtaXQgcGF0aCdzCiAJCQkJICogY29weSBvZiByZWFkX2NvdW50LgogCQkJCSAqLwotCQkJCSsrdHhfcXVldWUtPnN0b3BwZWQ7CisJCQkJbmV0aWZfdHhfc3RvcF9xdWV1ZSh0eF9xdWV1ZS0+Y29yZV90eHEpOwogCQkJCS8qIFRoaXMgbWVtb3J5IGJhcnJpZXIgcHJvdGVjdHMgdGhlCi0JCQkJICogY2hhbmdlIG9mIHN0b3BwZWQgZnJvbSB0aGUgYWNjZXNzCisJCQkJICogY2hhbmdlIG9mIHF1ZXVlIHN0YXRlIGZyb20gdGhlIGFjY2VzcwogCQkJCSAqIG9mIHJlYWRfY291bnQuICovCiAJCQkJc21wX21iKCk7CiAJCQkJdHhfcXVldWUtPm9sZF9yZWFkX2NvdW50ID0KLQkJCQkJKih2b2xhdGlsZSB1bnNpZ25lZCAqKQotCQkJCQkmdHhfcXVldWUtPnJlYWRfY291bnQ7CisJCQkJCUFDQ0VTU19PTkNFKHR4X3F1ZXVlLT5yZWFkX2NvdW50KTsKIAkJCQlmaWxsX2xldmVsID0gKHR4X3F1ZXVlLT5pbnNlcnRfY291bnQKIAkJCQkJICAgICAgLSB0eF9xdWV1ZS0+b2xkX3JlYWRfY291bnQpOwogCQkJCXFfc3BhY2UgPSBlZngtPnR4cV9lbnRyaWVzIC0gMSAtIGZpbGxfbGV2ZWw7Ci0JCQkJaWYgKHVubGlrZWx5KHFfc3BhY2UtLSA8PSAwKSkKLQkJCQkJZ290byBzdG9wOworCQkJCWlmICh1bmxpa2VseShxX3NwYWNlLS0gPD0gMCkpIHsKKwkJCQkJcmMgPSBORVRERVZfVFhfQlVTWTsKKwkJCQkJZ290byB1bndpbmQ7CisJCQkJfQogCQkJCXNtcF9tYigpOwotCQkJCS0tdHhfcXVldWUtPnN0b3BwZWQ7CisJCQkJbmV0aWZfdHhfc3RhcnRfcXVldWUodHhfcXVldWUtPmNvcmVfdHhxKTsKIAkJCX0KIAogCQkJaW5zZXJ0X3B0ciA9IHR4X3F1ZXVlLT5pbnNlcnRfY291bnQgJiB0eF9xdWV1ZS0+cHRyX21hc2s7CkBAIC0zMDgsMTMgKzI2NSw2IEBACiAKIAkvKiBNYXJrIHRoZSBwYWNrZXQgYXMgdHJhbnNtaXR0ZWQsIGFuZCBmcmVlIHRoZSBTS0Igb3Vyc2VsdmVzICovCiAJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQlnb3RvIHVud2luZDsKLQotIHN0b3A6Ci0JcmMgPSBORVRERVZfVFhfQlVTWTsKLQotCWlmICh0eF9xdWV1ZS0+c3RvcHBlZCA9PSAxKQotCQllZnhfc3RvcF9xdWV1ZSh0eF9xdWV1ZS0+Y2hhbm5lbCk7CiAKICB1bndpbmQ6CiAJLyogV29yayBiYWNrd2FyZHMgdW50aWwgd2UgaGl0IHRoZSBvcmlnaW5hbCBpbnNlcnQgcG9pbnRlciB2YWx1ZSAqLwpAQCAtNDA3LDIyICszNTcsMjUgQEAKIAllZnhfZGVxdWV1ZV9idWZmZXJzKHR4X3F1ZXVlLCBpbmRleCk7CiAKIAkvKiBTZWUgaWYgd2UgbmVlZCB0byByZXN0YXJ0IHRoZSBuZXRpZiBxdWV1ZS4gIFRoaXMgYmFycmllcgotCSAqIHNlcGFyYXRlcyB0aGUgdXBkYXRlIG9mIHJlYWRfY291bnQgZnJvbSB0aGUgdGVzdCBvZgotCSAqIHN0b3BwZWQuICovCisJICogc2VwYXJhdGVzIHRoZSB1cGRhdGUgb2YgcmVhZF9jb3VudCBmcm9tIHRoZSB0ZXN0IG9mIHRoZQorCSAqIHF1ZXVlIHN0YXRlLiAqLwogCXNtcF9tYigpOwotCWlmICh1bmxpa2VseSh0eF9xdWV1ZS0+c3RvcHBlZCkgJiYgbGlrZWx5KGVmeC0+cG9ydF9lbmFibGVkKSkgeworCWlmICh1bmxpa2VseShuZXRpZl90eF9xdWV1ZV9zdG9wcGVkKHR4X3F1ZXVlLT5jb3JlX3R4cSkpICYmCisJICAgIGxpa2VseShlZngtPnBvcnRfZW5hYmxlZCkpIHsKIAkJZmlsbF9sZXZlbCA9IHR4X3F1ZXVlLT5pbnNlcnRfY291bnQgLSB0eF9xdWV1ZS0+cmVhZF9jb3VudDsKIAkJaWYgKGZpbGxfbGV2ZWwgPCBFRlhfVFhRX1RIUkVTSE9MRChlZngpKSB7CiAJCQlFRlhfQlVHX09OX1BBUkFOT0lEKCFlZnhfZGV2X3JlZ2lzdGVyZWQoZWZ4KSk7CisJCQluZXRpZl90eF93YWtlX3F1ZXVlKHR4X3F1ZXVlLT5jb3JlX3R4cSk7CisJCX0KKwl9CiAKLQkJCS8qIERvIHRoaXMgdW5kZXIgbmV0aWZfdHhfbG9jaygpLCB0byBhdm9pZCByYWNpbmcKLQkJCSAqIHdpdGggZWZ4X3htaXQoKS4gKi8KLQkJCW5ldGlmX3R4X2xvY2soZWZ4LT5uZXRfZGV2KTsKLQkJCWlmICh0eF9xdWV1ZS0+c3RvcHBlZCkgewotCQkJCXR4X3F1ZXVlLT5zdG9wcGVkID0gMDsKLQkJCQllZnhfd2FrZV9xdWV1ZSh0eF9xdWV1ZS0+Y2hhbm5lbCk7Ci0JCQl9Ci0JCQluZXRpZl90eF91bmxvY2soZWZ4LT5uZXRfZGV2KTsKKwkvKiBDaGVjayB3aGV0aGVyIHRoZSBoYXJkd2FyZSBxdWV1ZSBpcyBub3cgZW1wdHkgKi8KKwlpZiAoKGludCkodHhfcXVldWUtPnJlYWRfY291bnQgLSB0eF9xdWV1ZS0+b2xkX3dyaXRlX2NvdW50KSA+PSAwKSB7CisJCXR4X3F1ZXVlLT5vbGRfd3JpdGVfY291bnQgPSBBQ0NFU1NfT05DRSh0eF9xdWV1ZS0+d3JpdGVfY291bnQpOworCQlpZiAodHhfcXVldWUtPnJlYWRfY291bnQgPT0gdHhfcXVldWUtPm9sZF93cml0ZV9jb3VudCkgeworCQkJc21wX21iKCk7CisJCQl0eF9xdWV1ZS0+ZW1wdHlfcmVhZF9jb3VudCA9CisJCQkJdHhfcXVldWUtPnJlYWRfY291bnQgfCBFRlhfRU1QVFlfQ09VTlRfVkFMSUQ7CiAJCX0KIAl9CiB9CkBAIC00NzAsOSArNDIzLDEwIEBACiAKIAl0eF9xdWV1ZS0+aW5zZXJ0X2NvdW50ID0gMDsKIAl0eF9xdWV1ZS0+d3JpdGVfY291bnQgPSAwOworCXR4X3F1ZXVlLT5vbGRfd3JpdGVfY291bnQgPSAwOwogCXR4X3F1ZXVlLT5yZWFkX2NvdW50ID0gMDsKIAl0eF9xdWV1ZS0+b2xkX3JlYWRfY291bnQgPSAwOwotCUJVR19PTih0eF9xdWV1ZS0+c3RvcHBlZCk7CisJdHhfcXVldWUtPmVtcHR5X3JlYWRfY291bnQgPSAwIHwgRUZYX0VNUFRZX0NPVU5UX1ZBTElEOwogCiAJLyogU2V0IHVwIFRYIGRlc2NyaXB0b3IgcmluZyAqLwogCWVmeF9uaWNfaW5pdF90eCh0eF9xdWV1ZSk7CkBAIC01MDgsMTIgKzQ2Miw2IEBACiAKIAkvKiBGcmVlIHVwIFRTTyBoZWFkZXIgY2FjaGUgKi8KIAllZnhfZmluaV90c28odHhfcXVldWUpOwotCi0JLyogUmVsZWFzZSBxdWV1ZSdzIHN0b3Agb24gcG9ydCwgaWYgYW55ICovCi0JaWYgKHR4X3F1ZXVlLT5zdG9wcGVkKSB7Ci0JCXR4X3F1ZXVlLT5zdG9wcGVkID0gMDsKLQkJZWZ4X3dha2VfcXVldWUodHhfcXVldWUtPmNoYW5uZWwpOwotCX0KIH0KIAogdm9pZCBlZnhfcmVtb3ZlX3R4X3F1ZXVlKHN0cnVjdCBlZnhfdHhfcXVldWUgKnR4X3F1ZXVlKQpAQCAtNzU1LDEyICs3MDMsMTIgQEAKIAkJCSAqIHNpbmNlIHRoZSB4bWl0IHBhdGggbGFzdCBjaGVja2VkLiAgVXBkYXRlCiAJCQkgKiB0aGUgeG1pdCBwYXRoJ3MgY29weSBvZiByZWFkX2NvdW50LgogCQkJICovCi0JCQkrK3R4X3F1ZXVlLT5zdG9wcGVkOworCQkJbmV0aWZfdHhfc3RvcF9xdWV1ZSh0eF9xdWV1ZS0+Y29yZV90eHEpOwogCQkJLyogVGhpcyBtZW1vcnkgYmFycmllciBwcm90ZWN0cyB0aGUgY2hhbmdlIG9mCi0JCQkgKiBzdG9wcGVkIGZyb20gdGhlIGFjY2VzcyBvZiByZWFkX2NvdW50LiAqLworCQkJICogcXVldWUgc3RhdGUgZnJvbSB0aGUgYWNjZXNzIG9mIHJlYWRfY291bnQuICovCiAJCQlzbXBfbWIoKTsKIAkJCXR4X3F1ZXVlLT5vbGRfcmVhZF9jb3VudCA9Ci0JCQkJKih2b2xhdGlsZSB1bnNpZ25lZCAqKSZ0eF9xdWV1ZS0+cmVhZF9jb3VudDsKKwkJCQlBQ0NFU1NfT05DRSh0eF9xdWV1ZS0+cmVhZF9jb3VudCk7CiAJCQlmaWxsX2xldmVsID0gKHR4X3F1ZXVlLT5pbnNlcnRfY291bnQKIAkJCQkgICAgICAtIHR4X3F1ZXVlLT5vbGRfcmVhZF9jb3VudCk7CiAJCQlxX3NwYWNlID0gZWZ4LT50eHFfZW50cmllcyAtIDEgLSBmaWxsX2xldmVsOwpAQCAtNzY5LDcgKzcxNyw3IEBACiAJCQkJcmV0dXJuIDE7CiAJCQl9CiAJCQlzbXBfbWIoKTsKLQkJCS0tdHhfcXVldWUtPnN0b3BwZWQ7CisJCQluZXRpZl90eF9zdGFydF9xdWV1ZSh0eF9xdWV1ZS0+Y29yZV90eHEpOwogCQl9CiAKIAkJaW5zZXJ0X3B0ciA9IHR4X3F1ZXVlLT5pbnNlcnRfY291bnQgJiB0eF9xdWV1ZS0+cHRyX21hc2s7CkBAIC0xMTA5LDggKzEwNTcsMTAgQEAKIAogCXdoaWxlICgxKSB7CiAJCXJjID0gdHNvX2ZpbGxfcGFja2V0X3dpdGhfZnJhZ21lbnQodHhfcXVldWUsIHNrYiwgJnN0YXRlKTsKLQkJaWYgKHVubGlrZWx5KHJjKSkKLQkJCWdvdG8gc3RvcDsKKwkJaWYgKHVubGlrZWx5KHJjKSkgeworCQkJcmMyID0gTkVUREVWX1RYX0JVU1k7CisJCQlnb3RvIHVud2luZDsKKwkJfQogCiAJCS8qIE1vdmUgb250byB0aGUgbmV4dCBmcmFnbWVudD8gKi8KIAkJaWYgKHN0YXRlLmluX2xlbiA9PSAwKSB7CkBAIC0xMTM5LDE0ICsxMDg5LDYgQEAKIAluZXRpZl9lcnIoZWZ4LCB0eF9lcnIsIGVmeC0+bmV0X2RldiwKIAkJICAiT3V0IG9mIG1lbW9yeSBmb3IgVFNPIGhlYWRlcnMsIG9yIFBDSSBtYXBwaW5nIGVycm9yXG4iKTsKIAlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCWdvdG8gdW53aW5kOwotCi0gc3RvcDoKLQlyYzIgPSBORVRERVZfVFhfQlVTWTsKLQotCS8qIFN0b3AgdGhlIHF1ZXVlIGlmIGl0IHdhc24ndCBzdG9wcGVkIGJlZm9yZS4gKi8KLQlpZiAodHhfcXVldWUtPnN0b3BwZWQgPT0gMSkKLQkJZWZ4X3N0b3BfcXVldWUodHhfcXVldWUtPmNoYW5uZWwpOwogCiAgdW53aW5kOgogCS8qIEZyZWUgdGhlIERNQSBtYXBwaW5nIHdlIHdlcmUgaW4gdGhlIHByb2Nlc3Mgb2Ygd3JpdGluZyBvdXQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NoX2V0aC5jIGIvZHJpdmVycy9uZXQvc2hfZXRoLmMKaW5kZXggNTAyNTlkZi4uODE5YzE3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2hfZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvc2hfZXRoLmMKQEAgLTQ1LDkgKzQ1LDkgQEAKIAl1MzIgaW9hZGRyID0gbmRldi0+YmFzZV9hZGRyOwogCiAJaWYgKG1kcC0+ZHVwbGV4KSAvKiBGdWxsICovCi0JCWN0cmxfb3V0bChjdHJsX2lubChpb2FkZHIgKyBFQ01SKSB8IEVDTVJfRE0sIGlvYWRkciArIEVDTVIpOworCQl3cml0ZWwocmVhZGwoaW9hZGRyICsgRUNNUikgfCBFQ01SX0RNLCBpb2FkZHIgKyBFQ01SKTsKIAllbHNlCQkvKiBIYWxmICovCi0JCWN0cmxfb3V0bChjdHJsX2lubChpb2FkZHIgKyBFQ01SKSAmIH5FQ01SX0RNLCBpb2FkZHIgKyBFQ01SKTsKKwkJd3JpdGVsKHJlYWRsKGlvYWRkciArIEVDTVIpICYgfkVDTVJfRE0sIGlvYWRkciArIEVDTVIpOwogfQogCiBzdGF0aWMgdm9pZCBzaF9ldGhfc2V0X3JhdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCkBAIC01NywxMCArNTcsMTAgQEAKIAogCXN3aXRjaCAobWRwLT5zcGVlZCkgewogCWNhc2UgMTA6IC8qIDEwQkFTRSAqLwotCQljdHJsX291dGwoY3RybF9pbmwoaW9hZGRyICsgRUNNUikgJiB+RUNNUl9SVE0sIGlvYWRkciArIEVDTVIpOworCQl3cml0ZWwocmVhZGwoaW9hZGRyICsgRUNNUikgJiB+RUNNUl9SVE0sIGlvYWRkciArIEVDTVIpOwogCQlicmVhazsKIAljYXNlIDEwMDovKiAxMDBCQVNFICovCi0JCWN0cmxfb3V0bChjdHJsX2lubChpb2FkZHIgKyBFQ01SKSB8IEVDTVJfUlRNLCBpb2FkZHIgKyBFQ01SKTsKKwkJd3JpdGVsKHJlYWRsKGlvYWRkciArIEVDTVIpIHwgRUNNUl9SVE0sIGlvYWRkciArIEVDTVIpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKQEAgLTk2LDkgKzk2LDkgQEAKIAl1MzIgaW9hZGRyID0gbmRldi0+YmFzZV9hZGRyOwogCiAJaWYgKG1kcC0+ZHVwbGV4KSAvKiBGdWxsICovCi0JCWN0cmxfb3V0bChjdHJsX2lubChpb2FkZHIgKyBFQ01SKSB8IEVDTVJfRE0sIGlvYWRkciArIEVDTVIpOworCQl3cml0ZWwocmVhZGwoaW9hZGRyICsgRUNNUikgfCBFQ01SX0RNLCBpb2FkZHIgKyBFQ01SKTsKIAllbHNlCQkvKiBIYWxmICovCi0JCWN0cmxfb3V0bChjdHJsX2lubChpb2FkZHIgKyBFQ01SKSAmIH5FQ01SX0RNLCBpb2FkZHIgKyBFQ01SKTsKKwkJd3JpdGVsKHJlYWRsKGlvYWRkciArIEVDTVIpICYgfkVDTVJfRE0sIGlvYWRkciArIEVDTVIpOwogfQogCiBzdGF0aWMgdm9pZCBzaF9ldGhfc2V0X3JhdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCkBAIC0xMDgsMTAgKzEwOCwxMCBAQAogCiAJc3dpdGNoIChtZHAtPnNwZWVkKSB7CiAJY2FzZSAxMDogLyogMTBCQVNFICovCi0JCWN0cmxfb3V0bCgwLCBpb2FkZHIgKyBSVFJBVEUpOworCQl3cml0ZWwoMCwgaW9hZGRyICsgUlRSQVRFKTsKIAkJYnJlYWs7CiAJY2FzZSAxMDA6LyogMTAwQkFTRSAqLwotCQljdHJsX291dGwoMSwgaW9hZGRyICsgUlRSQVRFKTsKKwkJd3JpdGVsKDEsIGlvYWRkciArIFJUUkFURSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwpAQCAtMTQzLDcgKzE0Myw3IEBACiBzdGF0aWMgdm9pZCBzaF9ldGhfY2hpcF9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKIHsKIAkvKiByZXNldCBkZXZpY2UgKi8KLQljdHJsX291dGwoQVJTVFJfQVJTVFIsIEFSU1RSKTsKKwl3cml0ZWwoQVJTVFJfQVJTVFIsIEFSU1RSKTsKIAltZGVsYXkoMSk7CiB9CiAKQEAgLTE1MiwxMCArMTUyLDEwIEBACiAJdTMyIGlvYWRkciA9IG5kZXYtPmJhc2VfYWRkcjsKIAlpbnQgY250ID0gMTAwOwogCi0JY3RybF9vdXRsKEVEU1JfRU5BTEwsIGlvYWRkciArIEVEU1IpOwotCWN0cmxfb3V0bChjdHJsX2lubChpb2FkZHIgKyBFRE1SKSB8IEVETVJfU1JTVCwgaW9hZGRyICsgRURNUik7CisJd3JpdGVsKEVEU1JfRU5BTEwsIGlvYWRkciArIEVEU1IpOworCXdyaXRlbChyZWFkbChpb2FkZHIgKyBFRE1SKSB8IEVETVJfU1JTVCwgaW9hZGRyICsgRURNUik7CiAJd2hpbGUgKGNudCA+IDApIHsKLQkJaWYgKCEoY3RybF9pbmwoaW9hZGRyICsgRURNUikgJiAweDMpKQorCQlpZiAoIShyZWFkbChpb2FkZHIgKyBFRE1SKSAmIDB4MykpCiAJCQlicmVhazsKIAkJbWRlbGF5KDEpOwogCQljbnQtLTsKQEAgLTE2NCwxNCArMTY0LDE0IEBACiAJCXByaW50ayhLRVJOX0VSUiAiRGV2aWNlIHJlc2V0IGZhaWxcbiIpOwogCiAJLyogVGFibGUgSW5pdCAqLwotCWN0cmxfb3V0bCgweDAsIGlvYWRkciArIFRETEFSKTsKLQljdHJsX291dGwoMHgwLCBpb2FkZHIgKyBUREZBUik7Ci0JY3RybF9vdXRsKDB4MCwgaW9hZGRyICsgVERGWFIpOwotCWN0cmxfb3V0bCgweDAsIGlvYWRkciArIFRERkZSKTsKLQljdHJsX291dGwoMHgwLCBpb2FkZHIgKyBSRExBUik7Ci0JY3RybF9vdXRsKDB4MCwgaW9hZGRyICsgUkRGQVIpOwotCWN0cmxfb3V0bCgweDAsIGlvYWRkciArIFJERlhSKTsKLQljdHJsX291dGwoMHgwLCBpb2FkZHIgKyBSREZGUik7CisJd3JpdGVsKDB4MCwgaW9hZGRyICsgVERMQVIpOworCXdyaXRlbCgweDAsIGlvYWRkciArIFRERkFSKTsKKwl3cml0ZWwoMHgwLCBpb2FkZHIgKyBUREZYUik7CisJd3JpdGVsKDB4MCwgaW9hZGRyICsgVERGRlIpOworCXdyaXRlbCgweDAsIGlvYWRkciArIFJETEFSKTsKKwl3cml0ZWwoMHgwLCBpb2FkZHIgKyBSREZBUik7CisJd3JpdGVsKDB4MCwgaW9hZGRyICsgUkRGWFIpOworCXdyaXRlbCgweDAsIGlvYWRkciArIFJERkZSKTsKIH0KIAogc3RhdGljIHZvaWQgc2hfZXRoX3NldF9kdXBsZXgoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCkBAIC0xODAsOSArMTgwLDkgQEAKIAl1MzIgaW9hZGRyID0gbmRldi0+YmFzZV9hZGRyOwogCiAJaWYgKG1kcC0+ZHVwbGV4KSAvKiBGdWxsICovCi0JCWN0cmxfb3V0bChjdHJsX2lubChpb2FkZHIgKyBFQ01SKSB8IEVDTVJfRE0sIGlvYWRkciArIEVDTVIpOworCQl3cml0ZWwocmVhZGwoaW9hZGRyICsgRUNNUikgfCBFQ01SX0RNLCBpb2FkZHIgKyBFQ01SKTsKIAllbHNlCQkvKiBIYWxmICovCi0JCWN0cmxfb3V0bChjdHJsX2lubChpb2FkZHIgKyBFQ01SKSAmIH5FQ01SX0RNLCBpb2FkZHIgKyBFQ01SKTsKKwkJd3JpdGVsKHJlYWRsKGlvYWRkciArIEVDTVIpICYgfkVDTVJfRE0sIGlvYWRkciArIEVDTVIpOwogfQogCiBzdGF0aWMgdm9pZCBzaF9ldGhfc2V0X3JhdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCkBAIC0xOTIsMTMgKzE5MiwxMyBAQAogCiAJc3dpdGNoIChtZHAtPnNwZWVkKSB7CiAJY2FzZSAxMDogLyogMTBCQVNFICovCi0JCWN0cmxfb3V0bChHRUNNUl8xMCwgaW9hZGRyICsgR0VDTVIpOworCQl3cml0ZWwoR0VDTVJfMTAsIGlvYWRkciArIEdFQ01SKTsKIAkJYnJlYWs7CiAJY2FzZSAxMDA6LyogMTAwQkFTRSAqLwotCQljdHJsX291dGwoR0VDTVJfMTAwLCBpb2FkZHIgKyBHRUNNUik7CisJCXdyaXRlbChHRUNNUl8xMDAsIGlvYWRkciArIEdFQ01SKTsKIAkJYnJlYWs7CiAJY2FzZSAxMDAwOiAvKiAxMDAwQkFTRSAqLwotCQljdHJsX291dGwoR0VDTVJfMTAwMCwgaW9hZGRyICsgR0VDTVIpOworCQl3cml0ZWwoR0VDTVJfMTAwMCwgaW9hZGRyICsgR0VDTVIpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKQEAgLTI4Myw5ICsyODMsOSBAQAogewogCXUzMiBpb2FkZHIgPSBuZGV2LT5iYXNlX2FkZHI7CiAKLQljdHJsX291dGwoY3RybF9pbmwoaW9hZGRyICsgRURNUikgfCBFRE1SX1NSU1QsIGlvYWRkciArIEVETVIpOworCXdyaXRlbChyZWFkbChpb2FkZHIgKyBFRE1SKSB8IEVETVJfU1JTVCwgaW9hZGRyICsgRURNUik7CiAJbWRlbGF5KDMpOwotCWN0cmxfb3V0bChjdHJsX2lubChpb2FkZHIgKyBFRE1SKSAmIH5FRE1SX1NSU1QsIGlvYWRkciArIEVETVIpOworCXdyaXRlbChyZWFkbChpb2FkZHIgKyBFRE1SKSAmIH5FRE1SX1NSU1QsIGlvYWRkciArIEVETVIpOwogfQogI2VuZGlmCiAKQEAgLTMzNiwxMCArMzM2LDEwIEBACiB7CiAJdTMyIGlvYWRkciA9IG5kZXYtPmJhc2VfYWRkcjsKIAotCWN0cmxfb3V0bCgobmRldi0+ZGV2X2FkZHJbMF0gPDwgMjQpIHwgKG5kZXYtPmRldl9hZGRyWzFdIDw8IDE2KSB8CisJd3JpdGVsKChuZGV2LT5kZXZfYWRkclswXSA8PCAyNCkgfCAobmRldi0+ZGV2X2FkZHJbMV0gPDwgMTYpIHwKIAkJICAobmRldi0+ZGV2X2FkZHJbMl0gPDwgOCkgfCAobmRldi0+ZGV2X2FkZHJbM10pLAogCQkgIGlvYWRkciArIE1BSFIpOwotCWN0cmxfb3V0bCgobmRldi0+ZGV2X2FkZHJbNF0gPDwgOCkgfCAobmRldi0+ZGV2X2FkZHJbNV0pLAorCXdyaXRlbCgobmRldi0+ZGV2X2FkZHJbNF0gPDwgOCkgfCAobmRldi0+ZGV2X2FkZHJbNV0pLAogCQkgIGlvYWRkciArIE1BTFIpOwogfQogCkBAIC0zNTgsMTIgKzM1OCwxMiBAQAogCWlmIChtYWNbMF0gfHwgbWFjWzFdIHx8IG1hY1syXSB8fCBtYWNbM10gfHwgbWFjWzRdIHx8IG1hY1s1XSkgewogCQltZW1jcHkobmRldi0+ZGV2X2FkZHIsIG1hYywgNik7CiAJfSBlbHNlIHsKLQkJbmRldi0+ZGV2X2FkZHJbMF0gPSAoY3RybF9pbmwoaW9hZGRyICsgTUFIUikgPj4gMjQpOwotCQluZGV2LT5kZXZfYWRkclsxXSA9IChjdHJsX2lubChpb2FkZHIgKyBNQUhSKSA+PiAxNikgJiAweEZGOwotCQluZGV2LT5kZXZfYWRkclsyXSA9IChjdHJsX2lubChpb2FkZHIgKyBNQUhSKSA+PiA4KSAmIDB4RkY7Ci0JCW5kZXYtPmRldl9hZGRyWzNdID0gKGN0cmxfaW5sKGlvYWRkciArIE1BSFIpICYgMHhGRik7Ci0JCW5kZXYtPmRldl9hZGRyWzRdID0gKGN0cmxfaW5sKGlvYWRkciArIE1BTFIpID4+IDgpICYgMHhGRjsKLQkJbmRldi0+ZGV2X2FkZHJbNV0gPSAoY3RybF9pbmwoaW9hZGRyICsgTUFMUikgJiAweEZGKTsKKwkJbmRldi0+ZGV2X2FkZHJbMF0gPSAocmVhZGwoaW9hZGRyICsgTUFIUikgPj4gMjQpOworCQluZGV2LT5kZXZfYWRkclsxXSA9IChyZWFkbChpb2FkZHIgKyBNQUhSKSA+PiAxNikgJiAweEZGOworCQluZGV2LT5kZXZfYWRkclsyXSA9IChyZWFkbChpb2FkZHIgKyBNQUhSKSA+PiA4KSAmIDB4RkY7CisJCW5kZXYtPmRldl9hZGRyWzNdID0gKHJlYWRsKGlvYWRkciArIE1BSFIpICYgMHhGRik7CisJCW5kZXYtPmRldl9hZGRyWzRdID0gKHJlYWRsKGlvYWRkciArIE1BTFIpID4+IDgpICYgMHhGRjsKKwkJbmRldi0+ZGV2X2FkZHJbNV0gPSAocmVhZGwoaW9hZGRyICsgTUFMUikgJiAweEZGKTsKIAl9CiB9CiAKQEAgLTM3OSwxOSArMzc5LDE5IEBACiAvKiBQSFkgYml0IHNldCAqLwogc3RhdGljIHZvaWQgYmJfc2V0KHUzMiBhZGRyLCB1MzIgbXNrKQogewotCWN0cmxfb3V0bChjdHJsX2lubChhZGRyKSB8IG1zaywgYWRkcik7CisJd3JpdGVsKHJlYWRsKGFkZHIpIHwgbXNrLCBhZGRyKTsKIH0KIAogLyogUEhZIGJpdCBjbGVhciAqLwogc3RhdGljIHZvaWQgYmJfY2xyKHUzMiBhZGRyLCB1MzIgbXNrKQogewotCWN0cmxfb3V0bCgoY3RybF9pbmwoYWRkcikgJiB+bXNrKSwgYWRkcik7CisJd3JpdGVsKChyZWFkbChhZGRyKSAmIH5tc2spLCBhZGRyKTsKIH0KIAogLyogUEhZIGJpdCByZWFkICovCiBzdGF0aWMgaW50IGJiX3JlYWQodTMyIGFkZHIsIHUzMiBtc2spCiB7Ci0JcmV0dXJuIChjdHJsX2lubChhZGRyKSAmIG1zaykgIT0gMDsKKwlyZXR1cm4gKHJlYWRsKGFkZHIpICYgbXNrKSAhPSAwOwogfQogCiAvKiBEYXRhIEkvTyBwaW4gY29udHJvbCAqLwpAQCAtNTA2LDkgKzUwNiw5IEBACiAJCXJ4ZGVzYy0+YnVmZmVyX2xlbmd0aCA9IEFMSUdOKG1kcC0+cnhfYnVmX3N6LCAxNik7CiAJCS8qIFJ4IGRlc2NyaXB0b3IgYWRkcmVzcyBzZXQgKi8KIAkJaWYgKGkgPT0gMCkgewotCQkJY3RybF9vdXRsKG1kcC0+cnhfZGVzY19kbWEsIGlvYWRkciArIFJETEFSKTsKKwkJCXdyaXRlbChtZHAtPnJ4X2Rlc2NfZG1hLCBpb2FkZHIgKyBSRExBUik7CiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzKQotCQkJY3RybF9vdXRsKG1kcC0+cnhfZGVzY19kbWEsIGlvYWRkciArIFJERkFSKTsKKwkJCXdyaXRlbChtZHAtPnJ4X2Rlc2NfZG1hLCBpb2FkZHIgKyBSREZBUik7CiAjZW5kaWYKIAkJfQogCX0KQEAgLTUyOCw5ICs1MjgsOSBAQAogCQl0eGRlc2MtPmJ1ZmZlcl9sZW5ndGggPSAwOwogCQlpZiAoaSA9PSAwKSB7CiAJCQkvKiBUeCBkZXNjcmlwdG9yIGFkZHJlc3Mgc2V0ICovCi0JCQljdHJsX291dGwobWRwLT50eF9kZXNjX2RtYSwgaW9hZGRyICsgVERMQVIpOworCQkJd3JpdGVsKG1kcC0+dHhfZGVzY19kbWEsIGlvYWRkciArIFRETEFSKTsKICNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMpCi0JCQljdHJsX291dGwobWRwLT50eF9kZXNjX2RtYSwgaW9hZGRyICsgVERGQVIpOworCQkJd3JpdGVsKG1kcC0+dHhfZGVzY19kbWEsIGlvYWRkciArIFRERkFSKTsKICNlbmRpZgogCQl9CiAJfQpAQCAtNjIzLDcxICs2MjMsNzEgQEAKIAkvKiBEZXNjcmlwdG9yIGZvcm1hdCAqLwogCXNoX2V0aF9yaW5nX2Zvcm1hdChuZGV2KTsKIAlpZiAobWRwLT5jZC0+cnBhZGlyKQotCQljdHJsX291dGwobWRwLT5jZC0+cnBhZGlyX3ZhbHVlLCBpb2FkZHIgKyBSUEFESVIpOworCQl3cml0ZWwobWRwLT5jZC0+cnBhZGlyX3ZhbHVlLCBpb2FkZHIgKyBSUEFESVIpOwogCiAJLyogYWxsIHNoX2V0aCBpbnQgbWFzayAqLwotCWN0cmxfb3V0bCgwLCBpb2FkZHIgKyBFRVNJUFIpOworCXdyaXRlbCgwLCBpb2FkZHIgKyBFRVNJUFIpOwogCiAjaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fXykKIAlpZiAobWRwLT5jZC0+aHdfc3dhcCkKLQkJY3RybF9vdXRsKEVETVJfRUwsIGlvYWRkciArIEVETVIpOworCQl3cml0ZWwoRURNUl9FTCwgaW9hZGRyICsgRURNUik7CiAJZWxzZQogI2VuZGlmCi0JCWN0cmxfb3V0bCgwLCBpb2FkZHIgKyBFRE1SKTsKKwkJd3JpdGVsKDAsIGlvYWRkciArIEVETVIpOwogCiAJLyogRklGTyBzaXplIHNldCAqLwotCWN0cmxfb3V0bChtZHAtPmNkLT5mZHJfdmFsdWUsIGlvYWRkciArIEZEUik7Ci0JY3RybF9vdXRsKDAsIGlvYWRkciArIFRGVFIpOworCXdyaXRlbChtZHAtPmNkLT5mZHJfdmFsdWUsIGlvYWRkciArIEZEUik7CisJd3JpdGVsKDAsIGlvYWRkciArIFRGVFIpOwogCiAJLyogRnJhbWUgcmVjdiBjb250cm9sICovCi0JY3RybF9vdXRsKG1kcC0+Y2QtPnJtY3JfdmFsdWUsIGlvYWRkciArIFJNQ1IpOworCXdyaXRlbChtZHAtPmNkLT5ybWNyX3ZhbHVlLCBpb2FkZHIgKyBSTUNSKTsKIAogCXJ4X2ludF92YXIgPSBtZHAtPnJ4X2ludF92YXIgPSBERVNDX0lfUklOVDggfCBERVNDX0lfUklOVDU7CiAJdHhfaW50X3ZhciA9IG1kcC0+dHhfaW50X3ZhciA9IERFU0NfSV9USU5UMjsKLQljdHJsX291dGwocnhfaW50X3ZhciB8IHR4X2ludF92YXIsIGlvYWRkciArIFRSU0NFUik7CisJd3JpdGVsKHJ4X2ludF92YXIgfCB0eF9pbnRfdmFyLCBpb2FkZHIgKyBUUlNDRVIpOwogCiAJaWYgKG1kcC0+Y2QtPmJjdWxyKQotCQljdHJsX291dGwoMHg4MDAsIGlvYWRkciArIEJDVUxSKTsJLyogQnVyc3Qgc3ljbGUgc2V0ICovCisJCXdyaXRlbCgweDgwMCwgaW9hZGRyICsgQkNVTFIpOwkvKiBCdXJzdCBzeWNsZSBzZXQgKi8KIAotCWN0cmxfb3V0bChtZHAtPmNkLT5mY2Z0cl92YWx1ZSwgaW9hZGRyICsgRkNGVFIpOworCXdyaXRlbChtZHAtPmNkLT5mY2Z0cl92YWx1ZSwgaW9hZGRyICsgRkNGVFIpOwogCiAJaWYgKCFtZHAtPmNkLT5ub190cmltZCkKLQkJY3RybF9vdXRsKDAsIGlvYWRkciArIFRSSU1EKTsKKwkJd3JpdGVsKDAsIGlvYWRkciArIFRSSU1EKTsKIAogCS8qIFJlY3YgZnJhbWUgbGltaXQgc2V0IHJlZ2lzdGVyICovCi0JY3RybF9vdXRsKFJGTFJfVkFMVUUsIGlvYWRkciArIFJGTFIpOworCXdyaXRlbChSRkxSX1ZBTFVFLCBpb2FkZHIgKyBSRkxSKTsKIAotCWN0cmxfb3V0bChjdHJsX2lubChpb2FkZHIgKyBFRVNSKSwgaW9hZGRyICsgRUVTUik7Ci0JY3RybF9vdXRsKG1kcC0+Y2QtPmVlc2lwcl92YWx1ZSwgaW9hZGRyICsgRUVTSVBSKTsKKwl3cml0ZWwocmVhZGwoaW9hZGRyICsgRUVTUiksIGlvYWRkciArIEVFU1IpOworCXdyaXRlbChtZHAtPmNkLT5lZXNpcHJfdmFsdWUsIGlvYWRkciArIEVFU0lQUik7CiAKIAkvKiBQQVVTRSBQcm9oaWJpdGlvbiAqLwotCXZhbCA9IChjdHJsX2lubChpb2FkZHIgKyBFQ01SKSAmIEVDTVJfRE0pIHwKKwl2YWwgPSAocmVhZGwoaW9hZGRyICsgRUNNUikgJiBFQ01SX0RNKSB8CiAJCUVDTVJfWlBGIHwgKG1kcC0+ZHVwbGV4ID8gRUNNUl9ETSA6IDApIHwgRUNNUl9URSB8IEVDTVJfUkU7CiAKLQljdHJsX291dGwodmFsLCBpb2FkZHIgKyBFQ01SKTsKKwl3cml0ZWwodmFsLCBpb2FkZHIgKyBFQ01SKTsKIAogCWlmIChtZHAtPmNkLT5zZXRfcmF0ZSkKIAkJbWRwLT5jZC0+c2V0X3JhdGUobmRldik7CiAKIAkvKiBFLU1BQyBTdGF0dXMgUmVnaXN0ZXIgY2xlYXIgKi8KLQljdHJsX291dGwobWRwLT5jZC0+ZWNzcl92YWx1ZSwgaW9hZGRyICsgRUNTUik7CisJd3JpdGVsKG1kcC0+Y2QtPmVjc3JfdmFsdWUsIGlvYWRkciArIEVDU1IpOwogCiAJLyogRS1NQUMgSW50ZXJydXB0IEVuYWJsZSByZWdpc3RlciAqLwotCWN0cmxfb3V0bChtZHAtPmNkLT5lY3NpcHJfdmFsdWUsIGlvYWRkciArIEVDU0lQUik7CisJd3JpdGVsKG1kcC0+Y2QtPmVjc2lwcl92YWx1ZSwgaW9hZGRyICsgRUNTSVBSKTsKIAogCS8qIFNldCBNQUMgYWRkcmVzcyAqLwogCXVwZGF0ZV9tYWNfYWRkcmVzcyhuZGV2KTsKIAogCS8qIG1hc2sgcmVzZXQgKi8KIAlpZiAobWRwLT5jZC0+YXByKQotCQljdHJsX291dGwoQVBSX0FQLCBpb2FkZHIgKyBBUFIpOworCQl3cml0ZWwoQVBSX0FQLCBpb2FkZHIgKyBBUFIpOwogCWlmIChtZHAtPmNkLT5tcHIpCi0JCWN0cmxfb3V0bChNUFJfTVAsIGlvYWRkciArIE1QUik7CisJCXdyaXRlbChNUFJfTVAsIGlvYWRkciArIE1QUik7CiAJaWYgKG1kcC0+Y2QtPnRwYXVzZXIpCi0JCWN0cmxfb3V0bChUUEFVU0VSX1VOTElNSVRFRCwgaW9hZGRyICsgVFBBVVNFUik7CisJCXdyaXRlbChUUEFVU0VSX1VOTElNSVRFRCwgaW9hZGRyICsgVFBBVVNFUik7CiAKIAkvKiBTZXR0aW5nIHRoZSBSeCBtb2RlIHdpbGwgc3RhcnQgdGhlIFJ4IHByb2Nlc3MuICovCi0JY3RybF9vdXRsKEVEUlJSX1IsIGlvYWRkciArIEVEUlJSKTsKKwl3cml0ZWwoRURSUlJfUiwgaW9hZGRyICsgRURSUlIpOwogCiAJbmV0aWZfc3RhcnRfcXVldWUobmRldik7CiAKQEAgLTgxMSw4ICs4MTEsOCBAQAogCiAJLyogUmVzdGFydCBSeCBlbmdpbmUgaWYgc3RvcHBlZC4gKi8KIAkvKiBJZiB3ZSBkb24ndCBuZWVkIHRvIGNoZWNrIHN0YXR1cywgZG9uJ3QuIC1LRFUgKi8KLQlpZiAoIShjdHJsX2lubChuZGV2LT5iYXNlX2FkZHIgKyBFRFJSUikgJiBFRFJSUl9SKSkKLQkJY3RybF9vdXRsKEVEUlJSX1IsIG5kZXYtPmJhc2VfYWRkciArIEVEUlJSKTsKKwlpZiAoIShyZWFkbChuZGV2LT5iYXNlX2FkZHIgKyBFRFJSUikgJiBFRFJSUl9SKSkKKwkJd3JpdGVsKEVEUlJSX1IsIG5kZXYtPmJhc2VfYWRkciArIEVEUlJSKTsKIAogCXJldHVybiAwOwogfQpAQCAtODI3LDggKzgyNyw4IEBACiAJdTMyIG1hc2s7CiAKIAlpZiAoaW50cl9zdGF0dXMgJiBFRVNSX0VDSSkgewotCQlmZWxpY19zdGF0ID0gY3RybF9pbmwoaW9hZGRyICsgRUNTUik7Ci0JCWN0cmxfb3V0bChmZWxpY19zdGF0LCBpb2FkZHIgKyBFQ1NSKTsJLyogY2xlYXIgaW50ICovCisJCWZlbGljX3N0YXQgPSByZWFkbChpb2FkZHIgKyBFQ1NSKTsKKwkJd3JpdGVsKGZlbGljX3N0YXQsIGlvYWRkciArIEVDU1IpOwkvKiBjbGVhciBpbnQgKi8KIAkJaWYgKGZlbGljX3N0YXQgJiBFQ1NSX0lDRCkKIAkJCW1kcC0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKIAkJaWYgKGZlbGljX3N0YXQgJiBFQ1NSX0xDSE5HKSB7CkBAIC04MzksMjUgKzgzOSwyNSBAQAogCQkJCWVsc2UKIAkJCQkJbGlua19zdGF0ID0gUEhZX1NUX0xJTks7CiAJCQl9IGVsc2UgewotCQkJCWxpbmtfc3RhdCA9IChjdHJsX2lubChpb2FkZHIgKyBQU1IpKTsKKwkJCQlsaW5rX3N0YXQgPSAocmVhZGwoaW9hZGRyICsgUFNSKSk7CiAJCQkJaWYgKG1kcC0+ZXRoZXJfbGlua19hY3RpdmVfbG93KQogCQkJCQlsaW5rX3N0YXQgPSB+bGlua19zdGF0OwogCQkJfQogCQkJaWYgKCEobGlua19zdGF0ICYgUEhZX1NUX0xJTkspKSB7CiAJCQkJLyogTGluayBEb3duIDogZGlzYWJsZSB0eCBhbmQgcnggKi8KLQkJCQljdHJsX291dGwoY3RybF9pbmwoaW9hZGRyICsgRUNNUikgJgorCQkJCXdyaXRlbChyZWFkbChpb2FkZHIgKyBFQ01SKSAmCiAJCQkJCSAgfihFQ01SX1JFIHwgRUNNUl9URSksIGlvYWRkciArIEVDTVIpOwogCQkJfSBlbHNlIHsKIAkJCQkvKiBMaW5rIFVwICovCi0JCQkJY3RybF9vdXRsKGN0cmxfaW5sKGlvYWRkciArIEVFU0lQUikgJgorCQkJCXdyaXRlbChyZWFkbChpb2FkZHIgKyBFRVNJUFIpICYKIAkJCQkJICB+RE1BQ19NX0VDSSwgaW9hZGRyICsgRUVTSVBSKTsKIAkJCQkvKmNsZWFyIGludCAqLwotCQkJCWN0cmxfb3V0bChjdHJsX2lubChpb2FkZHIgKyBFQ1NSKSwKKwkJCQl3cml0ZWwocmVhZGwoaW9hZGRyICsgRUNTUiksCiAJCQkJCSAgaW9hZGRyICsgRUNTUik7Ci0JCQkJY3RybF9vdXRsKGN0cmxfaW5sKGlvYWRkciArIEVFU0lQUikgfAorCQkJCXdyaXRlbChyZWFkbChpb2FkZHIgKyBFRVNJUFIpIHwKIAkJCQkJICBETUFDX01fRUNJLCBpb2FkZHIgKyBFRVNJUFIpOwogCQkJCS8qIGVuYWJsZSB0eCBhbmQgcnggKi8KLQkJCQljdHJsX291dGwoY3RybF9pbmwoaW9hZGRyICsgRUNNUikgfAorCQkJCXdyaXRlbChyZWFkbChpb2FkZHIgKyBFQ01SKSB8CiAJCQkJCSAgKEVDTVJfUkUgfCBFQ01SX1RFKSwgaW9hZGRyICsgRUNNUik7CiAJCQl9CiAJCX0KQEAgLTg4OCw4ICs4ODgsOCBAQAogCQkvKiBSZWNlaXZlIERlc2NyaXB0b3IgRW1wdHkgaW50ICovCiAJCW1kcC0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKIAotCQlpZiAoY3RybF9pbmwoaW9hZGRyICsgRURSUlIpIF4gRURSUlJfUikKLQkJCWN0cmxfb3V0bChFRFJSUl9SLCBpb2FkZHIgKyBFRFJSUik7CisJCWlmIChyZWFkbChpb2FkZHIgKyBFRFJSUikgXiBFRFJSUl9SKQorCQkJd3JpdGVsKEVEUlJSX1IsIGlvYWRkciArIEVEUlJSKTsKIAkJZGV2X2VycigmbmRldi0+ZGV2LCAiUmVjZWl2ZSBEZXNjcmlwdG9yIEVtcHR5XG4iKTsKIAl9CiAJaWYgKGludHJfc3RhdHVzICYgRUVTUl9SRkUpIHsKQEAgLTkwMyw3ICs5MDMsNyBAQAogCQltYXNrICY9IH5FRVNSX0FERTsKIAlpZiAoaW50cl9zdGF0dXMgJiBtYXNrKSB7CiAJCS8qIFR4IGVycm9yICovCi0JCXUzMiBlZHRyciA9IGN0cmxfaW5sKG5kZXYtPmJhc2VfYWRkciArIEVEVFJSKTsKKwkJdTMyIGVkdHJyID0gcmVhZGwobmRldi0+YmFzZV9hZGRyICsgRURUUlIpOwogCQkvKiBkbWVzZyAqLwogCQlkZXZfZXJyKCZuZGV2LT5kZXYsICJUWCBlcnJvci4gc3RhdHVzPSU4Ljh4IGN1cl90eD0lOC44eCAiLAogCQkJCWludHJfc3RhdHVzLCBtZHAtPmN1cl90eCk7CkBAIC05MTUsNyArOTE1LDcgQEAKIAkJLyogU0g3NzEyIEJVRyAqLwogCQlpZiAoZWR0cnIgXiBFRFRSUl9UUk5TKSB7CiAJCQkvKiB0eCBkbWEgc3RhcnQgKi8KLQkJCWN0cmxfb3V0bChFRFRSUl9UUk5TLCBuZGV2LT5iYXNlX2FkZHIgKyBFRFRSUik7CisJCQl3cml0ZWwoRURUUlJfVFJOUywgbmRldi0+YmFzZV9hZGRyICsgRURUUlIpOwogCQl9CiAJCS8qIHdha2V1cCAqLwogCQluZXRpZl93YWtlX3F1ZXVlKG5kZXYpOwpAQCAtOTM0LDEyICs5MzQsMTIgQEAKIAlzcGluX2xvY2soJm1kcC0+bG9jayk7CiAKIAkvKiBHZXQgaW50ZXJycHQgc3RhdCAqLwotCWludHJfc3RhdHVzID0gY3RybF9pbmwoaW9hZGRyICsgRUVTUik7CisJaW50cl9zdGF0dXMgPSByZWFkbChpb2FkZHIgKyBFRVNSKTsKIAkvKiBDbGVhciBpbnRlcnJ1cHQgKi8KIAlpZiAoaW50cl9zdGF0dXMgJiAoRUVTUl9GUkMgfCBFRVNSX1JNQUYgfCBFRVNSX1JSRiB8CiAJCQlFRVNSX1JUTEYgfCBFRVNSX1JUU0YgfCBFRVNSX1BSRSB8IEVFU1JfQ0VSRiB8CiAJCQljZC0+dHhfY2hlY2sgfCBjZC0+ZWVzcl9lcnJfY2hlY2spKSB7Ci0JCWN0cmxfb3V0bChpbnRyX3N0YXR1cywgaW9hZGRyICsgRUVTUik7CisJCXdyaXRlbChpbnRyX3N0YXR1cywgaW9hZGRyICsgRUVTUik7CiAJCXJldCA9IElSUV9IQU5ETEVEOwogCX0gZWxzZQogCQlnb3RvIG90aGVyX2lycTsKQEAgLTEwMDAsNyArMTAwMCw3IEBACiAJCQkJbWRwLT5jZC0+c2V0X3JhdGUobmRldik7CiAJCX0KIAkJaWYgKG1kcC0+bGluayA9PSBQSFlfRE9XTikgewotCQkJY3RybF9vdXRsKChjdHJsX2lubChpb2FkZHIgKyBFQ01SKSAmIH5FQ01SX1RYRikKKwkJCXdyaXRlbCgocmVhZGwoaW9hZGRyICsgRUNNUikgJiB+RUNNUl9UWEYpCiAJCQkJCXwgRUNNUl9ETSwgaW9hZGRyICsgRUNNUik7CiAJCQluZXdfc3RhdGUgPSAxOwogCQkJbWRwLT5saW5rID0gcGh5ZGV2LT5saW5rOwpAQCAtMTEyNSw3ICsxMTI1LDcgQEAKIAogCS8qIHdvcm5pbmcgbWVzc2FnZSBvdXQuICovCiAJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHRyYW5zbWl0IHRpbWVkIG91dCwgc3RhdHVzICU4Ljh4LCIKLQkgICAgICAgIiByZXNldHRpbmcuLi5cbiIsIG5kZXYtPm5hbWUsIChpbnQpY3RybF9pbmwoaW9hZGRyICsgRUVTUikpOworCSAgICAgICAiIHJlc2V0dGluZy4uLlxuIiwgbmRldi0+bmFtZSwgKGludClyZWFkbChpb2FkZHIgKyBFRVNSKSk7CiAKIAkvKiB0eF9lcnJvcnMgY291bnQgdXAgKi8KIAltZHAtPnN0YXRzLnR4X2Vycm9ycysrOwpAQCAtMTE5Niw4ICsxMTk2LDggQEAKIAogCW1kcC0+Y3VyX3R4Kys7CiAKLQlpZiAoIShjdHJsX2lubChuZGV2LT5iYXNlX2FkZHIgKyBFRFRSUikgJiBFRFRSUl9UUk5TKSkKLQkJY3RybF9vdXRsKEVEVFJSX1RSTlMsIG5kZXYtPmJhc2VfYWRkciArIEVEVFJSKTsKKwlpZiAoIShyZWFkbChuZGV2LT5iYXNlX2FkZHIgKyBFRFRSUikgJiBFRFRSUl9UUk5TKSkKKwkJd3JpdGVsKEVEVFJSX1RSTlMsIG5kZXYtPmJhc2VfYWRkciArIEVEVFJSKTsKIAogCXJldHVybiBORVRERVZfVFhfT0s7CiB9CkBAIC0xMjEyLDExICsxMjEyLDExIEBACiAJbmV0aWZfc3RvcF9xdWV1ZShuZGV2KTsKIAogCS8qIERpc2FibGUgaW50ZXJydXB0cyBieSBjbGVhcmluZyB0aGUgaW50ZXJydXB0IG1hc2suICovCi0JY3RybF9vdXRsKDB4MDAwMCwgaW9hZGRyICsgRUVTSVBSKTsKKwl3cml0ZWwoMHgwMDAwLCBpb2FkZHIgKyBFRVNJUFIpOwogCiAJLyogU3RvcCB0aGUgY2hpcCdzIFR4IGFuZCBSeCBwcm9jZXNzZXMuICovCi0JY3RybF9vdXRsKDAsIGlvYWRkciArIEVEVFJSKTsKLQljdHJsX291dGwoMCwgaW9hZGRyICsgRURSUlIpOworCXdyaXRlbCgwLCBpb2FkZHIgKyBFRFRSUik7CisJd3JpdGVsKDAsIGlvYWRkciArIEVEUlJSKTsKIAogCS8qIFBIWSBEaXNjb25uZWN0ICovCiAJaWYgKG1kcC0+cGh5ZGV2KSB7CkBAIC0xMjUxLDIwICsxMjUxLDIwIEBACiAKIAlwbV9ydW50aW1lX2dldF9zeW5jKCZtZHAtPnBkZXYtPmRldik7CiAKLQltZHAtPnN0YXRzLnR4X2Ryb3BwZWQgKz0gY3RybF9pbmwoaW9hZGRyICsgVFJPQ1IpOwotCWN0cmxfb3V0bCgwLCBpb2FkZHIgKyBUUk9DUik7CS8qICh3cml0ZSBjbGVhcikgKi8KLQltZHAtPnN0YXRzLmNvbGxpc2lvbnMgKz0gY3RybF9pbmwoaW9hZGRyICsgQ0RDUik7Ci0JY3RybF9vdXRsKDAsIGlvYWRkciArIENEQ1IpOwkvKiAod3JpdGUgY2xlYXIpICovCi0JbWRwLT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycyArPSBjdHJsX2lubChpb2FkZHIgKyBMQ0NSKTsKLQljdHJsX291dGwoMCwgaW9hZGRyICsgTENDUik7CS8qICh3cml0ZSBjbGVhcikgKi8KKwltZHAtPnN0YXRzLnR4X2Ryb3BwZWQgKz0gcmVhZGwoaW9hZGRyICsgVFJPQ1IpOworCXdyaXRlbCgwLCBpb2FkZHIgKyBUUk9DUik7CS8qICh3cml0ZSBjbGVhcikgKi8KKwltZHAtPnN0YXRzLmNvbGxpc2lvbnMgKz0gcmVhZGwoaW9hZGRyICsgQ0RDUik7CisJd3JpdGVsKDAsIGlvYWRkciArIENEQ1IpOwkvKiAod3JpdGUgY2xlYXIpICovCisJbWRwLT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycyArPSByZWFkbChpb2FkZHIgKyBMQ0NSKTsKKwl3cml0ZWwoMCwgaW9hZGRyICsgTENDUik7CS8qICh3cml0ZSBjbGVhcikgKi8KICNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMpCi0JbWRwLT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycyArPSBjdHJsX2lubChpb2FkZHIgKyBDRVJDUik7LyogQ0VSQ1IgKi8KLQljdHJsX291dGwoMCwgaW9hZGRyICsgQ0VSQ1IpOwkvKiAod3JpdGUgY2xlYXIpICovCi0JbWRwLT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycyArPSBjdHJsX2lubChpb2FkZHIgKyBDRUVDUik7LyogQ0VFQ1IgKi8KLQljdHJsX291dGwoMCwgaW9hZGRyICsgQ0VFQ1IpOwkvKiAod3JpdGUgY2xlYXIpICovCisJbWRwLT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycyArPSByZWFkbChpb2FkZHIgKyBDRVJDUik7LyogQ0VSQ1IgKi8KKwl3cml0ZWwoMCwgaW9hZGRyICsgQ0VSQ1IpOwkvKiAod3JpdGUgY2xlYXIpICovCisJbWRwLT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycyArPSByZWFkbChpb2FkZHIgKyBDRUVDUik7LyogQ0VFQ1IgKi8KKwl3cml0ZWwoMCwgaW9hZGRyICsgQ0VFQ1IpOwkvKiAod3JpdGUgY2xlYXIpICovCiAjZWxzZQotCW1kcC0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMgKz0gY3RybF9pbmwoaW9hZGRyICsgQ05EQ1IpOwotCWN0cmxfb3V0bCgwLCBpb2FkZHIgKyBDTkRDUik7CS8qICh3cml0ZSBjbGVhcikgKi8KKwltZHAtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzICs9IHJlYWRsKGlvYWRkciArIENORENSKTsKKwl3cml0ZWwoMCwgaW9hZGRyICsgQ05EQ1IpOwkvKiAod3JpdGUgY2xlYXIpICovCiAjZW5kaWYKIAlwbV9ydW50aW1lX3B1dF9zeW5jKCZtZHAtPnBkZXYtPmRldik7CiAKQEAgLTEyOTUsMTEgKzEyOTUsMTEgQEAKIAogCWlmIChuZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CiAJCS8qIFNldCBwcm9taXNjdW91cy4gKi8KLQkJY3RybF9vdXRsKChjdHJsX2lubChpb2FkZHIgKyBFQ01SKSAmIH5FQ01SX01DVCkgfCBFQ01SX1BSTSwKKwkJd3JpdGVsKChyZWFkbChpb2FkZHIgKyBFQ01SKSAmIH5FQ01SX01DVCkgfCBFQ01SX1BSTSwKIAkJCSAgaW9hZGRyICsgRUNNUik7CiAJfSBlbHNlIHsKIAkJLyogTm9ybWFsLCB1bmljYXN0L2Jyb2FkY2FzdC1vbmx5IG1vZGUuICovCi0JCWN0cmxfb3V0bCgoY3RybF9pbmwoaW9hZGRyICsgRUNNUikgJiB+RUNNUl9QUk0pIHwgRUNNUl9NQ1QsCisJCXdyaXRlbCgocmVhZGwoaW9hZGRyICsgRUNNUikgJiB+RUNNUl9QUk0pIHwgRUNNUl9NQ1QsCiAJCQkgIGlvYWRkciArIEVDTVIpOwogCX0KIH0KQEAgLTEzMDcsMzAgKzEzMDcsMzAgQEAKIC8qIFN1cGVySCdzIFRTVSByZWdpc3RlciBpbml0IGZ1bmN0aW9uICovCiBzdGF0aWMgdm9pZCBzaF9ldGhfdHN1X2luaXQodTMyIGlvYWRkcikKIHsKLQljdHJsX291dGwoMCwgaW9hZGRyICsgVFNVX0ZXRU4wKTsJLyogRGlzYWJsZSBmb3J3YXJkKDAtPjEpICovCi0JY3RybF9vdXRsKDAsIGlvYWRkciArIFRTVV9GV0VOMSk7CS8qIERpc2FibGUgZm9yd2FyZCgxLT4wKSAqLwotCWN0cmxfb3V0bCgwLCBpb2FkZHIgKyBUU1VfRkNNKTsJLyogZm9yd2FyZCBmaWZvIDNrLTNrICovCi0JY3RybF9vdXRsKDB4YywgaW9hZGRyICsgVFNVX0JTWVNMMCk7Ci0JY3RybF9vdXRsKDB4YywgaW9hZGRyICsgVFNVX0JTWVNMMSk7Ci0JY3RybF9vdXRsKDAsIGlvYWRkciArIFRTVV9QUklTTDApOwotCWN0cmxfb3V0bCgwLCBpb2FkZHIgKyBUU1VfUFJJU0wxKTsKLQljdHJsX291dGwoMCwgaW9hZGRyICsgVFNVX0ZXU0wwKTsKLQljdHJsX291dGwoMCwgaW9hZGRyICsgVFNVX0ZXU0wxKTsKLQljdHJsX291dGwoVFNVX0ZXU0xDX1BPU1RFTlUgfCBUU1VfRldTTENfUE9TVEVOTCwgaW9hZGRyICsgVFNVX0ZXU0xDKTsKKwl3cml0ZWwoMCwgaW9hZGRyICsgVFNVX0ZXRU4wKTsJLyogRGlzYWJsZSBmb3J3YXJkKDAtPjEpICovCisJd3JpdGVsKDAsIGlvYWRkciArIFRTVV9GV0VOMSk7CS8qIERpc2FibGUgZm9yd2FyZCgxLT4wKSAqLworCXdyaXRlbCgwLCBpb2FkZHIgKyBUU1VfRkNNKTsJLyogZm9yd2FyZCBmaWZvIDNrLTNrICovCisJd3JpdGVsKDB4YywgaW9hZGRyICsgVFNVX0JTWVNMMCk7CisJd3JpdGVsKDB4YywgaW9hZGRyICsgVFNVX0JTWVNMMSk7CisJd3JpdGVsKDAsIGlvYWRkciArIFRTVV9QUklTTDApOworCXdyaXRlbCgwLCBpb2FkZHIgKyBUU1VfUFJJU0wxKTsKKwl3cml0ZWwoMCwgaW9hZGRyICsgVFNVX0ZXU0wwKTsKKwl3cml0ZWwoMCwgaW9hZGRyICsgVFNVX0ZXU0wxKTsKKwl3cml0ZWwoVFNVX0ZXU0xDX1BPU1RFTlUgfCBUU1VfRldTTENfUE9TVEVOTCwgaW9hZGRyICsgVFNVX0ZXU0xDKTsKICNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMpCi0JY3RybF9vdXRsKDAsIGlvYWRkciArIFRTVV9RVEFHMCk7CS8qIERpc2FibGUgUVRBRygwLT4xKSAqLwotCWN0cmxfb3V0bCgwLCBpb2FkZHIgKyBUU1VfUVRBRzEpOwkvKiBEaXNhYmxlIFFUQUcoMS0+MCkgKi8KKwl3cml0ZWwoMCwgaW9hZGRyICsgVFNVX1FUQUcwKTsJLyogRGlzYWJsZSBRVEFHKDAtPjEpICovCisJd3JpdGVsKDAsIGlvYWRkciArIFRTVV9RVEFHMSk7CS8qIERpc2FibGUgUVRBRygxLT4wKSAqLwogI2Vsc2UKLQljdHJsX291dGwoMCwgaW9hZGRyICsgVFNVX1FUQUdNMCk7CS8qIERpc2FibGUgUVRBRygwLT4xKSAqLwotCWN0cmxfb3V0bCgwLCBpb2FkZHIgKyBUU1VfUVRBR00xKTsJLyogRGlzYWJsZSBRVEFHKDEtPjApICovCisJd3JpdGVsKDAsIGlvYWRkciArIFRTVV9RVEFHTTApOwkvKiBEaXNhYmxlIFFUQUcoMC0+MSkgKi8KKwl3cml0ZWwoMCwgaW9hZGRyICsgVFNVX1FUQUdNMSk7CS8qIERpc2FibGUgUVRBRygxLT4wKSAqLwogI2VuZGlmCi0JY3RybF9vdXRsKDAsIGlvYWRkciArIFRTVV9GV1NSKTsJLyogYWxsIGludGVycnVwdCBzdGF0dXMgY2xlYXIgKi8KLQljdHJsX291dGwoMCwgaW9hZGRyICsgVFNVX0ZXSU5NSyk7CS8qIERpc2FibGUgYWxsIGludGVycnVwdCAqLwotCWN0cmxfb3V0bCgwLCBpb2FkZHIgKyBUU1VfVEVOKTsJLyogRGlzYWJsZSBhbGwgQ0FNIGVudHJ5ICovCi0JY3RybF9vdXRsKDAsIGlvYWRkciArIFRTVV9QT1NUMSk7CS8qIERpc2FibGUgQ0FNIGVudHJ5IFsgMC0gN10gKi8KLQljdHJsX291dGwoMCwgaW9hZGRyICsgVFNVX1BPU1QyKTsJLyogRGlzYWJsZSBDQU0gZW50cnkgWyA4LTE1XSAqLwotCWN0cmxfb3V0bCgwLCBpb2FkZHIgKyBUU1VfUE9TVDMpOwkvKiBEaXNhYmxlIENBTSBlbnRyeSBbMTYtMjNdICovCi0JY3RybF9vdXRsKDAsIGlvYWRkciArIFRTVV9QT1NUNCk7CS8qIERpc2FibGUgQ0FNIGVudHJ5IFsyNC0zMV0gKi8KKwl3cml0ZWwoMCwgaW9hZGRyICsgVFNVX0ZXU1IpOwkvKiBhbGwgaW50ZXJydXB0IHN0YXR1cyBjbGVhciAqLworCXdyaXRlbCgwLCBpb2FkZHIgKyBUU1VfRldJTk1LKTsJLyogRGlzYWJsZSBhbGwgaW50ZXJydXB0ICovCisJd3JpdGVsKDAsIGlvYWRkciArIFRTVV9URU4pOwkvKiBEaXNhYmxlIGFsbCBDQU0gZW50cnkgKi8KKwl3cml0ZWwoMCwgaW9hZGRyICsgVFNVX1BPU1QxKTsJLyogRGlzYWJsZSBDQU0gZW50cnkgWyAwLSA3XSAqLworCXdyaXRlbCgwLCBpb2FkZHIgKyBUU1VfUE9TVDIpOwkvKiBEaXNhYmxlIENBTSBlbnRyeSBbIDgtMTVdICovCisJd3JpdGVsKDAsIGlvYWRkciArIFRTVV9QT1NUMyk7CS8qIERpc2FibGUgQ0FNIGVudHJ5IFsxNi0yM10gKi8KKwl3cml0ZWwoMCwgaW9hZGRyICsgVFNVX1BPU1Q0KTsJLyogRGlzYWJsZSBDQU0gZW50cnkgWzI0LTMxXSAqLwogfQogI2VuZGlmIC8qIFNIX0VUSF9IQVNfVFNVICovCiAKQEAgLTE1NTIsNyArMTU1Miw2IEBACiAKIAlzaF9tZGlvX3JlbGVhc2UobmRldik7CiAJdW5yZWdpc3Rlcl9uZXRkZXYobmRldik7Ci0JZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKIAlwbV9ydW50aW1lX2Rpc2FibGUoJnBkZXYtPmRldik7CiAJZnJlZV9uZXRkZXYobmRldik7CiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zaF9ldGguaCBiL2RyaXZlcnMvbmV0L3NoX2V0aC5oCmluZGV4IDhiNDc3NjMuLmVmYTY0MjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NoX2V0aC5oCisrKyBiL2RyaXZlcnMvbmV0L3NoX2V0aC5oCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9waHkuaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2lzMTkwLmMgYi9kcml2ZXJzL25ldC9zaXMxOTAuYwppbmRleCBhNWQ2YTZiLi4zNDA2ZWQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zaXMxOTAuYworKysgYi9kcml2ZXJzL25ldC9zaXMxOTAuYwpAQCAtMTkxNSw5ICsxOTE1LDEwIEBACiBzdGF0aWMgdm9pZCBfX2RldmV4aXQgc2lzMTkwX3JlbW92ZV9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgc2lzMTkwX3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCXNpczE5MF9taWlfcmVtb3ZlKGRldik7Ci0JZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwljYW5jZWxfd29ya19zeW5jKCZ0cC0+cGh5X3Rhc2spOwogCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJc2lzMTkwX3JlbGVhc2VfYm9hcmQocGRldik7CiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2tmcC9zbXQuYyBiL2RyaXZlcnMvbmV0L3NrZnAvc210LmMKaW5kZXggMmQ5OTQxYy4uMWUxYmQwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2tmcC9zbXQuYworKysgYi9kcml2ZXJzL25ldC9za2ZwL3NtdC5jCkBAIC0xMjYzLDcgKzEyNjMsNyBAQAogc3RhdGljIHZvaWQgc210X2ZpbGxfcG9saWN5KHN0cnVjdCBzX3NtYyAqc21jLCBzdHJ1Y3Qgc210X3BfcG9saWN5ICpwb2xpY3kpCiB7CiAJaW50CWkgOwotCXVfY2hhcgkqbWFwIDsKKwljb25zdCB1X2NoYXIgKm1hcCA7CiAJdV9zaG9ydAlpbiA7CiAJdV9zaG9ydAlvdXQgOwogCkBAIC0xMjcxLDcgKzEyNzEsNyBAQAogCSAqIE1JQiBwYXJhIDEwMWIgKGZkZGlTTVRDb25uZWN0aW9uUG9saWN5KSBjb2RpbmcKIAkgKiBpcyBkaWZmZXJlbnQgZnJvbSAwMDA1IGNvZGluZwogCSAqLwotCXN0YXRpYyB1X2NoYXIJYW5zaV93ZWlyZG5lc3NbMTZdID0geworCXN0YXRpYyBjb25zdCB1X2NoYXIgYW5zaV93ZWlyZG5lc3NbMTZdID0gewogCQkwLDcsNSwzLDgsMSw2LDQsOSwxMCwyLDExLDEyLDEzLDE0LDE1CiAJfSA7CiAJU01UU0VUUEFSQShwb2xpY3ksU01UX1BfUE9MSUNZKSA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9za2dlLmMgYi9kcml2ZXJzL25ldC9za2dlLmMKaW5kZXggMjIwZTAzOS4uNDJkYWY5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2tnZS5jCisrKyBiL2RyaXZlcnMvbmV0L3NrZ2UuYwpAQCAtMTE5MSw3ICsxMTkxLDcgQEAKIAogc3RhdGljIHZvaWQgZ2VuZXNpc19yZXNldChzdHJ1Y3Qgc2tnZV9odyAqaHcsIGludCBwb3J0KQogewotCWNvbnN0IHU4IHplcm9bOF0gID0geyAwIH07CisJc3RhdGljIGNvbnN0IHU4IHplcm9bOF0gID0geyAwIH07CiAJdTMyIHJlZzsKIAogCXNrZ2Vfd3JpdGU4KGh3LCBTS19SRUcocG9ydCwgR01BQ19JUlFfTVNLKSwgMCk7CkBAIC0xNTU3LDcgKzE1NTcsNyBAQAogCWludCBqdW1ibyA9IGh3LT5kZXZbcG9ydF0tPm10dSA+IEVUSF9EQVRBX0xFTjsKIAlpbnQgaTsKIAl1MzIgcjsKLQljb25zdCB1OCB6ZXJvWzZdICA9IHsgMCB9OworCXN0YXRpYyBjb25zdCB1OCB6ZXJvWzZdICA9IHsgMCB9OwogCiAJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKIAkJc2tnZV93cml0ZTE2KGh3LCBTS19SRUcocG9ydCwgVFhfTUZGX0NUUkwxKSwKQEAgLTI3NjQsNyArMjc2NCw3IEBACiAJdGQtPmRtYV9oaSA9IG1hcCA+PiAzMjsKIAogCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7Ci0JCWNvbnN0IGludCBvZmZzZXQgPSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpOworCQljb25zdCBpbnQgb2Zmc2V0ID0gc2tiX2NoZWNrc3VtX3N0YXJ0X29mZnNldChza2IpOwogCiAJCS8qIFRoaXMgc2VlbXMgYmFja3dhcmRzLCBidXQgaXQgaXMgd2hhdCB0aGUgc2s5OGxpbgogCQkgKiBkb2VzLiAgTG9va3MgbGlrZSBoYXJkd2FyZSBpcyB3cm9uZz8KQEAgLTQwMTIsOCArNDAxMiw2IEBACiAJaWYgKCFodykKIAkJcmV0dXJuOwogCi0JZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKLQogCWRldjEgPSBody0+ZGV2WzFdOwogCWlmIChkZXYxKQogCQl1bnJlZ2lzdGVyX25ldGRldihkZXYxKTsKQEAgLTQwNDQsNTMgKzQwNDIsNDAgQEAKIH0KIAogI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBza2dlX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgc2tnZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZGV2KTsKIAlzdHJ1Y3Qgc2tnZV9odyAqaHcgID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCWludCBpLCBlcnIsIHdvbCA9IDA7CisJaW50IGk7CiAKIAlpZiAoIWh3KQogCQlyZXR1cm4gMDsKIAotCWVyciA9IHBjaV9zYXZlX3N0YXRlKHBkZXYpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KIAlmb3IgKGkgPSAwOyBpIDwgaHctPnBvcnRzOyBpKyspIHsKIAkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGh3LT5kZXZbaV07CiAJCXN0cnVjdCBza2dlX3BvcnQgKnNrZ2UgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJCWlmIChuZXRpZl9ydW5uaW5nKGRldikpCiAJCQlza2dlX2Rvd24oZGV2KTsKKwogCQlpZiAoc2tnZS0+d29sKQogCQkJc2tnZV93b2xfaW5pdChza2dlKTsKLQotCQl3b2wgfD0gc2tnZS0+d29sOwogCX0KIAogCXNrZ2Vfd3JpdGUzMihodywgQjBfSU1TSywgMCk7CiAKLQlwY2lfcHJlcGFyZV90b19zbGVlcChwZGV2KTsKLQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNrZ2VfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQorc3RhdGljIGludCBza2dlX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGRldik7CiAJc3RydWN0IHNrZ2VfaHcgKmh3ICA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlpbnQgaSwgZXJyOwogCiAJaWYgKCFodykKIAkJcmV0dXJuIDA7CiAKLQllcnIgPSBwY2lfYmFja19mcm9tX3NsZWVwKHBkZXYpOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0OwotCi0JZXJyID0gcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7Ci0JaWYgKGVycikKLQkJZ290byBvdXQ7Ci0KIAllcnIgPSBza2dlX3Jlc2V0KGh3KTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKQEAgLTQxMTEsMTIgKzQwOTYsMTkgQEAKIG91dDoKIAlyZXR1cm4gZXJyOwogfQorCitzdGF0aWMgU0lNUExFX0RFVl9QTV9PUFMoc2tnZV9wbV9vcHMsIHNrZ2Vfc3VzcGVuZCwgc2tnZV9yZXN1bWUpOworI2RlZmluZSBTS0dFX1BNX09QUyAoJnNrZ2VfcG1fb3BzKQorCisjZWxzZQorCisjZGVmaW5lIFNLR0VfUE1fT1BTIE5VTEwKICNlbmRpZgogCiBzdGF0aWMgdm9pZCBza2dlX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewogCXN0cnVjdCBza2dlX2h3ICpodyAgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7Ci0JaW50IGksIHdvbCA9IDA7CisJaW50IGk7CiAKIAlpZiAoIWh3KQogCQlyZXR1cm47CkBAIC00MTI3LDE1ICs0MTE5LDEwIEBACiAKIAkJaWYgKHNrZ2UtPndvbCkKIAkJCXNrZ2Vfd29sX2luaXQoc2tnZSk7Ci0JCXdvbCB8PSBza2dlLT53b2w7CiAJfQogCi0JaWYgKHBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNjb2xkLCB3b2wpKQotCQlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzaG90LCB3b2wpOwotCi0JcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCXBjaV93YWtlX2Zyb21fZDMocGRldiwgZGV2aWNlX21heV93YWtldXAoJnBkZXYtPmRldikpOwogCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QzaG90KTsKLQogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgc2tnZV9kcml2ZXIgPSB7CkBAIC00MTQzLDExICs0MTMwLDggQEAKIAkuaWRfdGFibGUgPSAgICAgc2tnZV9pZF90YWJsZSwKIAkucHJvYmUgPSAgICAgICAgc2tnZV9wcm9iZSwKIAkucmVtb3ZlID0gICAgICAgX19kZXZleGl0X3Aoc2tnZV9yZW1vdmUpLAotI2lmZGVmIENPTkZJR19QTQotCS5zdXNwZW5kID0gCXNrZ2Vfc3VzcGVuZCwKLQkucmVzdW1lID0gCXNrZ2VfcmVzdW1lLAotI2VuZGlmCiAJLnNodXRkb3duID0Jc2tnZV9zaHV0ZG93biwKKwkuZHJpdmVyLnBtID0JU0tHRV9QTV9PUFMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGRtaV9zeXN0ZW1faWQgc2tnZV8zMmJpdF9kbWFfYm9hcmRzW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9za3kyLmMgYi9kcml2ZXJzL25ldC9za3kyLmMKaW5kZXggZDY1NzcwOC4uMzk5OTZiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2t5Mi5jCisrKyBiL2RyaXZlcnMvbmV0L3NreTIuYwpAQCAtMTkxNyw4ICsxOTE3LDEwIEBACiAJCQluZXRpZl9wcmludGsoc2t5MiwgdHhfZG9uZSwgS0VSTl9ERUJVRywgZGV2LAogCQkJCSAgICAgInR4IGRvbmUgJXVcbiIsIGlkeCk7CiAKLQkJCWRldi0+c3RhdHMudHhfcGFja2V0cysrOwotCQkJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKKwkJCXU2NF9zdGF0c191cGRhdGVfYmVnaW4oJnNreTItPnR4X3N0YXRzLnN5bmNwKTsKKwkJCSsrc2t5Mi0+dHhfc3RhdHMucGFja2V0czsKKwkJCXNreTItPnR4X3N0YXRzLmJ5dGVzICs9IHNrYi0+bGVuOworCQkJdTY0X3N0YXRzX3VwZGF0ZV9lbmQoJnNreTItPnR4X3N0YXRzLnN5bmNwKTsKIAogCQkJcmUtPnNrYiA9IE5VTEw7CiAJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwpAQCAtMjQ2MCw3ICsyNDYyLDcgQEAKIAogCS8qIGlmIGxlbmd0aCByZXBvcnRlZCBieSBETUEgZG9lcyBub3QgbWF0Y2ggUEhZLCBwYWNrZXQgd2FzIHRydW5jYXRlZCAqLwogCWlmIChsZW5ndGggIT0gY291bnQpCi0JCWdvdG8gbGVuX2Vycm9yOworCQlnb3RvIGVycm9yOwogCiBva2F5OgogCWlmIChsZW5ndGggPCBjb3B5YnJlYWspCkBAIC0yNDc1LDM0ICsyNDc3LDEzIEBACiAKIAlyZXR1cm4gc2tiOwogCi1sZW5fZXJyb3I6Ci0JLyogVHJ1bmNhdGlvbiBvZiBvdmVybGVuZ3RoIHBhY2tldHMKLQkgICBjYXVzZXMgUEhZIGxlbmd0aCB0byBub3QgbWF0Y2ggTUFDIGxlbmd0aCAqLwotCSsrZGV2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzOwotCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCW5ldGlmX2luZm8oc2t5MiwgcnhfZXJyLCBkZXYsCi0JCQkgICAicnggbGVuZ3RoIGVycm9yOiBzdGF0dXMgJSN4IGxlbmd0aCAlZFxuIiwKLQkJCSAgIHN0YXR1cywgbGVuZ3RoKTsKLQlnb3RvIHJlc3VibWl0OwotCiBlcnJvcjoKIAkrK2Rldi0+c3RhdHMucnhfZXJyb3JzOwotCWlmIChzdGF0dXMgJiBHTVJfRlNfUlhfRkZfT1YpIHsKLQkJZGV2LT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOwotCQlnb3RvIHJlc3VibWl0OwotCX0KIAogCWlmIChuZXRfcmF0ZWxpbWl0KCkpCiAJCW5ldGlmX2luZm8oc2t5MiwgcnhfZXJyLCBkZXYsCiAJCQkgICAicnggZXJyb3IsIHN0YXR1cyAweCV4IGxlbmd0aCAlZFxuIiwgc3RhdHVzLCBsZW5ndGgpOwogCi0JaWYgKHN0YXR1cyAmIChHTVJfRlNfTE9OR19FUlIgfCBHTVJfRlNfVU5fU0laRSkpCi0JCWRldi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwotCWlmIChzdGF0dXMgJiBHTVJfRlNfRlJBR01FTlQpCi0JCWRldi0+c3RhdHMucnhfZnJhbWVfZXJyb3JzKys7Ci0JaWYgKHN0YXR1cyAmIEdNUl9GU19DUkNfRVJSKQotCQlkZXYtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKLQogCWdvdG8gcmVzdWJtaXQ7CiB9CiAKQEAgLTI1NDMsMTQgKzI1MjQsMTkgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBza3kyX3J4X2RvbmUoc3RydWN0IHNreTJfaHcgKmh3LCB1bnNpZ25lZCBwb3J0LAogCQkJCXVuc2lnbmVkIHBhY2tldHMsIHVuc2lnbmVkIGJ5dGVzKQogewotCWlmIChwYWNrZXRzKSB7Ci0JCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBody0+ZGV2W3BvcnRdOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBody0+ZGV2W3BvcnRdOworCXN0cnVjdCBza3kyX3BvcnQgKnNreTIgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JCWRldi0+c3RhdHMucnhfcGFja2V0cyArPSBwYWNrZXRzOwotCQlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IGJ5dGVzOwotCQlkZXYtPmxhc3RfcnggPSBqaWZmaWVzOwotCQlza3kyX3J4X3VwZGF0ZShuZXRkZXZfcHJpdihkZXYpLCByeHFhZGRyW3BvcnRdKTsKLQl9CisJaWYgKHBhY2tldHMgPT0gMCkKKwkJcmV0dXJuOworCisJdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbigmc2t5Mi0+cnhfc3RhdHMuc3luY3ApOworCXNreTItPnJ4X3N0YXRzLnBhY2tldHMgKz0gcGFja2V0czsKKwlza3kyLT5yeF9zdGF0cy5ieXRlcyArPSBieXRlczsKKwl1NjRfc3RhdHNfdXBkYXRlX2VuZCgmc2t5Mi0+cnhfc3RhdHMuc3luY3ApOworCisJZGV2LT5sYXN0X3J4ID0gamlmZmllczsKKwlza3kyX3J4X3VwZGF0ZShuZXRkZXZfcHJpdihkZXYpLCByeHFhZGRyW3BvcnRdKTsKIH0KIAogc3RhdGljIHZvaWQgc2t5Ml9yeF9jaGVja3N1bShzdHJ1Y3Qgc2t5Ml9wb3J0ICpza3kyLCB1MzIgc3RhdHVzKQpAQCAtMzM5OCwxMiArMzM4NCwyNCBAQAogewogCXN0cnVjdCBza3kyX3BvcnQgKnNreTIgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBza3kyX2h3ICpodyA9IHNreTItPmh3OworCWJvb2wgZW5hYmxlX3dha2V1cCA9IGZhbHNlOworCWludCBpOwogCiAJaWYgKCh3b2wtPndvbG9wdHMgJiB+c2t5Ml93b2xfc3VwcG9ydGVkKHNreTItPmh3KSkgfHwKIAkgICAgIWRldmljZV9jYW5fd2FrZXVwKCZody0+cGRldi0+ZGV2KSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJc2t5Mi0+d29sID0gd29sLT53b2xvcHRzOworCisJZm9yIChpID0gMDsgaSA8IGh3LT5wb3J0czsgaSsrKSB7CisJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBody0+ZGV2W2ldOworCQlzdHJ1Y3Qgc2t5Ml9wb3J0ICpza3kyID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCQlpZiAoc2t5Mi0+d29sKQorCQkJZW5hYmxlX3dha2V1cCA9IHRydWU7CisJfQorCWRldmljZV9zZXRfd2FrZXVwX2VuYWJsZSgmaHctPnBkZXYtPmRldiwgZW5hYmxlX3dha2V1cCk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzYxNCwxMyArMzYxMiwxMSBAQAogCXVuc2lnbmVkIHBvcnQgPSBza3kyLT5wb3J0OwogCWludCBpOwogCi0JZGF0YVswXSA9ICh1NjQpIGdtYV9yZWFkMzIoaHcsIHBvcnQsIEdNX1RYT19PS19ISSkgPDwgMzIKLQkgICAgfCAodTY0KSBnbWFfcmVhZDMyKGh3LCBwb3J0LCBHTV9UWE9fT0tfTE8pOwotCWRhdGFbMV0gPSAodTY0KSBnbWFfcmVhZDMyKGh3LCBwb3J0LCBHTV9SWE9fT0tfSEkpIDw8IDMyCi0JICAgIHwgKHU2NCkgZ21hX3JlYWQzMihodywgcG9ydCwgR01fUlhPX09LX0xPKTsKKwlkYXRhWzBdID0gZ2V0X3N0YXRzNjQoaHcsIHBvcnQsIEdNX1RYT19PS19MTyk7CisJZGF0YVsxXSA9IGdldF9zdGF0czY0KGh3LCBwb3J0LCBHTV9SWE9fT0tfTE8pOwogCiAJZm9yIChpID0gMjsgaSA8IGNvdW50OyBpKyspCi0JCWRhdGFbaV0gPSAodTY0KSBnbWFfcmVhZDMyKGh3LCBwb3J0LCBza3kyX3N0YXRzW2ldLm9mZnNldCk7CisJCWRhdGFbaV0gPSBnZXRfc3RhdHMzMihodywgcG9ydCwgc2t5Ml9zdGF0c1tpXS5vZmZzZXQpOwogfQogCiBzdGF0aWMgdm9pZCBza3kyX3NldF9tc2dsZXZlbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgdmFsdWUpCkBAIC0zNzM4LDYgKzM3MzQsNTEgQEAKIAlnbWFfd3JpdGUxNihodywgcG9ydCwgR01fUlhfQ1RSTCwgcmVnKTsKIH0KIAorc3RhdGljIHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqc2t5Ml9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkJCXN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqc3RhdHMpCit7CisJc3RydWN0IHNreTJfcG9ydCAqc2t5MiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHNreTJfaHcgKmh3ID0gc2t5Mi0+aHc7CisJdW5zaWduZWQgcG9ydCA9IHNreTItPnBvcnQ7CisJdW5zaWduZWQgaW50IHN0YXJ0OworCXU2NCBfYnl0ZXMsIF9wYWNrZXRzOworCisJZG8geworCQlzdGFydCA9IHU2NF9zdGF0c19mZXRjaF9iZWdpbl9iaCgmc2t5Mi0+cnhfc3RhdHMuc3luY3ApOworCQlfYnl0ZXMgPSBza3kyLT5yeF9zdGF0cy5ieXRlczsKKwkJX3BhY2tldHMgPSBza3kyLT5yeF9zdGF0cy5wYWNrZXRzOworCX0gd2hpbGUgKHU2NF9zdGF0c19mZXRjaF9yZXRyeV9iaCgmc2t5Mi0+cnhfc3RhdHMuc3luY3AsIHN0YXJ0KSk7CisKKwlzdGF0cy0+cnhfcGFja2V0cyA9IF9wYWNrZXRzOworCXN0YXRzLT5yeF9ieXRlcyA9IF9ieXRlczsKKworCWRvIHsKKwkJc3RhcnQgPSB1NjRfc3RhdHNfZmV0Y2hfYmVnaW5fYmgoJnNreTItPnR4X3N0YXRzLnN5bmNwKTsKKwkJX2J5dGVzID0gc2t5Mi0+dHhfc3RhdHMuYnl0ZXM7CisJCV9wYWNrZXRzID0gc2t5Mi0+dHhfc3RhdHMucGFja2V0czsKKwl9IHdoaWxlICh1NjRfc3RhdHNfZmV0Y2hfcmV0cnlfYmgoJnNreTItPnR4X3N0YXRzLnN5bmNwLCBzdGFydCkpOworCisJc3RhdHMtPnR4X3BhY2tldHMgPSBfcGFja2V0czsKKwlzdGF0cy0+dHhfYnl0ZXMgPSBfYnl0ZXM7CisKKwlzdGF0cy0+bXVsdGljYXN0ID0gZ2V0X3N0YXRzMzIoaHcsIHBvcnQsIEdNX1JYRl9NQ19PSykKKwkJKyBnZXRfc3RhdHMzMihodywgcG9ydCwgR01fUlhGX0JDX09LKTsKKworCXN0YXRzLT5jb2xsaXNpb25zID0gZ2V0X3N0YXRzMzIoaHcsIHBvcnQsIEdNX1RYRl9DT0wpOworCisJc3RhdHMtPnJ4X2xlbmd0aF9lcnJvcnMgPSBnZXRfc3RhdHMzMihodywgcG9ydCwgR01fUlhGX0xOR19FUlIpOworCXN0YXRzLT5yeF9jcmNfZXJyb3JzID0gZ2V0X3N0YXRzMzIoaHcsIHBvcnQsIEdNX1JYRl9GQ1NfRVJSKTsKKwlzdGF0cy0+cnhfZnJhbWVfZXJyb3JzID0gZ2V0X3N0YXRzMzIoaHcsIHBvcnQsIEdNX1JYRl9TSFQpCisJCSsgZ2V0X3N0YXRzMzIoaHcsIHBvcnQsIEdNX1JYRV9GUkFHKTsKKwlzdGF0cy0+cnhfb3Zlcl9lcnJvcnMgPSBnZXRfc3RhdHMzMihodywgcG9ydCwgR01fUlhFX0ZJRk9fT1YpOworCisJc3RhdHMtPnJ4X2Ryb3BwZWQgPSBkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQ7CisJc3RhdHMtPnJ4X2ZpZm9fZXJyb3JzID0gZGV2LT5zdGF0cy5yeF9maWZvX2Vycm9yczsKKwlzdGF0cy0+dHhfZmlmb19lcnJvcnMgPSBkZXYtPnN0YXRzLnR4X2ZpZm9fZXJyb3JzOworCisJcmV0dXJuIHN0YXRzOworfQorCiAvKiBDYW4gaGF2ZSBvbmUgZ2xvYmFsIGJlY2F1c2UgYmxpbmtpbmcgaXMgY29udHJvbGxlZCBieQogICogZXRodG9vbCBhbmQgdGhhdCBpcyBhbHdheXMgdW5kZXIgUlROTCBtdXRleAogICovCkBAIC00NTEyLDYgKzQ1NTMsNyBAQAogCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gc2t5Ml9zZXRfbXVsdGljYXN0LAogCS5uZG9fY2hhbmdlX210dQkJPSBza3kyX2NoYW5nZV9tdHUsCiAJLm5kb190eF90aW1lb3V0CQk9IHNreTJfdHhfdGltZW91dCwKKwkubmRvX2dldF9zdGF0czY0CT0gc2t5Ml9nZXRfc3RhdHMsCiAjaWZkZWYgU0tZMl9WTEFOX1RBR19VU0VECiAJLm5kb192bGFuX3J4X3JlZ2lzdGVyCT0gc2t5Ml92bGFuX3J4X3JlZ2lzdGVyLAogI2VuZGlmCkBAIC00NTI5LDYgKzQ1NzEsNyBAQAogCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gc2t5Ml9zZXRfbXVsdGljYXN0LAogCS5uZG9fY2hhbmdlX210dQkJPSBza3kyX2NoYW5nZV9tdHUsCiAJLm5kb190eF90aW1lb3V0CQk9IHNreTJfdHhfdGltZW91dCwKKwkubmRvX2dldF9zdGF0czY0CT0gc2t5Ml9nZXRfc3RhdHMsCiAjaWZkZWYgU0tZMl9WTEFOX1RBR19VU0VECiAJLm5kb192bGFuX3J4X3JlZ2lzdGVyCT0gc2t5Ml92bGFuX3J4X3JlZ2lzdGVyLAogI2VuZGlmCkBAIC00OTIwLDEwICs0OTYzLDExIEBACiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogfQogCi1zdGF0aWMgaW50IHNreTJfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBza3kyX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogeworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXYpOwogCXN0cnVjdCBza3kyX2h3ICpodyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlpbnQgaSwgd29sID0gMDsKKwlpbnQgaTsKIAogCWlmICghaHcpCiAJCXJldHVybiAwOwpAQCAtNDk0MCw0MSArNDk4NCwyNCBAQAogCiAJCWlmIChza3kyLT53b2wpCiAJCQlza3kyX3dvbF9pbml0KHNreTIpOwotCi0JCXdvbCB8PSBza3kyLT53b2w7CiAJfQogCi0JZGV2aWNlX3NldF93YWtldXBfZW5hYmxlKCZwZGV2LT5kZXYsIHdvbCAhPSAwKTsKLQogCXNreTJfcG93ZXJfYXV4KGh3KTsKIAlydG5sX3VubG9jaygpOwogCi0JcGNpX3NhdmVfc3RhdGUocGRldik7Ci0JcGNpX2VuYWJsZV93YWtlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpLCB3b2wpOwotCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgcGNpX2Nob29zZV9zdGF0ZShwZGV2LCBzdGF0ZSkpOwotCiAJcmV0dXJuIDA7CiB9CiAKICNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyBpbnQgc2t5Ml9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCitzdGF0aWMgaW50IHNreTJfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZGV2KTsKIAlzdHJ1Y3Qgc2t5Ml9odyAqaHcgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJaW50IGVycjsKIAogCWlmICghaHcpCiAJCXJldHVybiAwOwogCi0JZXJyID0gcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDApOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0OwotCi0JZXJyID0gcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7Ci0JaWYgKGVycikKLQkJZ290byBvdXQ7Ci0KLQlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QwLCAwKTsKLQogCS8qIFJlLWVuYWJsZSBhbGwgY2xvY2tzICovCiAJZXJyID0gcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCBQQ0lfREVWX1JFRzMsIDApOwogCWlmIChlcnIpIHsKQEAgLTQ5OTQsMTEgKzUwMjEsMjAgQEAKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiAJcmV0dXJuIGVycjsKIH0KKworc3RhdGljIFNJTVBMRV9ERVZfUE1fT1BTKHNreTJfcG1fb3BzLCBza3kyX3N1c3BlbmQsIHNreTJfcmVzdW1lKTsKKyNkZWZpbmUgU0tZMl9QTV9PUFMgKCZza3kyX3BtX29wcykKKworI2Vsc2UKKworI2RlZmluZSBTS1kyX1BNX09QUyBOVUxMCiAjZW5kaWYKIAogc3RhdGljIHZvaWQgc2t5Ml9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKLQlza3kyX3N1c3BlbmQocGRldiwgUE1TR19TVVNQRU5EKTsKKwlza3kyX3N1c3BlbmQoJnBkZXYtPmRldik7CisJcGNpX3dha2VfZnJvbV9kMyhwZGV2LCBkZXZpY2VfbWF5X3dha2V1cCgmcGRldi0+ZGV2KSk7CisJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDNob3QpOwogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgc2t5Ml9kcml2ZXIgPSB7CkBAIC01MDA2LDExICs1MDQyLDggQEAKIAkuaWRfdGFibGUgPSBza3kyX2lkX3RhYmxlLAogCS5wcm9iZSA9IHNreTJfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNreTJfcmVtb3ZlKSwKLSNpZmRlZiBDT05GSUdfUE0KLQkuc3VzcGVuZCA9IHNreTJfc3VzcGVuZCwKLQkucmVzdW1lID0gc2t5Ml9yZXN1bWUsCi0jZW5kaWYKIAkuc2h1dGRvd24gPSBza3kyX3NodXRkb3duLAorCS5kcml2ZXIucG0gPSBTS1kyX1BNX09QUywKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHNreTJfaW5pdF9tb2R1bGUodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NreTIuaCBiL2RyaXZlcnMvbmV0L3NreTIuaAppbmRleCA2MTg5MWE2Li44MGJkYzQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za3kyLmgKKysrIGIvZHJpdmVycy9uZXQvc2t5Mi5oCkBAIC0yMjAwLDYgKzIyMDAsMTIgQEAKIAlGQ19CT1RICT0gMywKIH07CiAKK3N0cnVjdCBza3kyX3N0YXRzIHsKKwlzdHJ1Y3QgdTY0X3N0YXRzX3N5bmMgc3luY3A7CisJdTY0CQlwYWNrZXRzOworCXU2NAkJYnl0ZXM7Cit9OworCiBzdHJ1Y3Qgc2t5Ml9wb3J0IHsKIAlzdHJ1Y3Qgc2t5Ml9odwkgICAgICpodzsKIAlzdHJ1Y3QgbmV0X2RldmljZSAgICAqbmV0ZGV2OwpAQCAtMjIwOSw2ICsyMjE1LDggQEAKIAogCXN0cnVjdCB0eF9yaW5nX2luZm8gICp0eF9yaW5nOwogCXN0cnVjdCBza3kyX3R4X2xlICAgICp0eF9sZTsKKwlzdHJ1Y3Qgc2t5Ml9zdGF0cyAgICB0eF9zdGF0czsKKwogCXUxNgkJICAgICB0eF9yaW5nX3NpemU7CiAJdTE2CQkgICAgIHR4X2NvbnM7CQkvKiBuZXh0IGxlIHRvIGNoZWNrICovCiAJdTE2CQkgICAgIHR4X3Byb2Q7CQkvKiBuZXh0IGxlIHRvIHVzZSAqLwpAQCAtMjIyMSw2ICsyMjI5LDcgQEAKIAogCXN0cnVjdCByeF9yaW5nX2luZm8gICpyeF9yaW5nIF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7CiAJc3RydWN0IHNreTJfcnhfbGUgICAgKnJ4X2xlOworCXN0cnVjdCBza3kyX3N0YXRzICAgIHJ4X3N0YXRzOwogCiAJdTE2CQkgICAgIHJ4X25leHQ7CQkvKiBuZXh0IHJlIHRvIGNoZWNrICovCiAJdTE2CQkgICAgIHJ4X3B1dDsJCS8qIG5leHQgbGUgaW5kZXggdG8gdXNlICovCkBAIC0yMzQ2LDYgKzIzNTUsMzkgQEAKIAkJfCAodTMyKSBza3kyX3JlYWQxNihodywgYmFzZSs0KSA8PCAxNjsKIH0KIAorc3RhdGljIGlubGluZSB1NjQgZ21hX3JlYWQ2NChzdHJ1Y3Qgc2t5Ml9odyAqaHcsIHVuc2lnbmVkIHBvcnQsIHVuc2lnbmVkIHJlZykKK3sKKwl1bnNpZ25lZCBiYXNlID0gU0tfR01BQ19SRUcocG9ydCwgcmVnKTsKKworCXJldHVybiAodTY0KSBza3kyX3JlYWQxNihodywgYmFzZSkKKwkJfCAodTY0KSBza3kyX3JlYWQxNihodywgYmFzZSs0KSA8PCAxNgorCQl8ICh1NjQpIHNreTJfcmVhZDE2KGh3LCBiYXNlKzgpIDw8IDMyCisJCXwgKHU2NCkgc2t5Ml9yZWFkMTYoaHcsIGJhc2UrMTIpIDw8IDQ4OworfQorCisvKiBUaGVyZSBpcyBubyB3YXkgdG8gYXRvbWljYWxseSByZWFkMzIgYml0IHZhbHVlcyBmcm9tIFBIWSwgc28gcmV0cnkgKi8KK3N0YXRpYyBpbmxpbmUgdTMyIGdldF9zdGF0czMyKHN0cnVjdCBza3kyX2h3ICpodywgdW5zaWduZWQgcG9ydCwgdW5zaWduZWQgcmVnKQoreworCXUzMiB2YWw7CisKKwlkbyB7CisJCXZhbCA9IGdtYV9yZWFkMzIoaHcsIHBvcnQsIHJlZyk7CisJfSB3aGlsZSAoZ21hX3JlYWQzMihodywgcG9ydCwgcmVnKSAhPSB2YWwpOworCisJcmV0dXJuIHZhbDsKK30KKworc3RhdGljIGlubGluZSB1NjQgZ2V0X3N0YXRzNjQoc3RydWN0IHNreTJfaHcgKmh3LCB1bnNpZ25lZCBwb3J0LCB1bnNpZ25lZCByZWcpCit7CisJdTY0IHZhbDsKKworCWRvIHsKKwkJdmFsID0gZ21hX3JlYWQ2NChodywgcG9ydCwgcmVnKTsKKwl9IHdoaWxlIChnbWFfcmVhZDY0KGh3LCBwb3J0LCByZWcpICE9IHZhbCk7CisKKwlyZXR1cm4gdmFsOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgZ21hX3dyaXRlMTYoY29uc3Qgc3RydWN0IHNreTJfaHcgKmh3LCB1bnNpZ25lZCBwb3J0LCBpbnQgciwgdTE2IHYpCiB7CiAJc2t5Ml93cml0ZTE2KGh3LCBTS19HTUFDX1JFRyhwb3J0LHIpLCB2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NtYy11bHRyYS5jIGIvZHJpdmVycy9uZXQvc21jLXVsdHJhLmMKaW5kZXggZDJkZDhlNi4uMjM1YTNjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc21jLXVsdHJhLmMKKysrIGIvZHJpdmVycy9uZXQvc21jLXVsdHJhLmMKQEAgLTI3Nyw4ICsyNzcsMTIgQEAKIAlkZXYtPmJhc2VfYWRkciA9IGlvYWRkcitVTFRSQV9OSUNfT0ZGU0VUOwogCiAJewotCQlpbnQgYWRkcl90YmxbNF0gPSB7MHgwQzAwMDAsIDB4MEUwMDAwLCAweEZDMDAwMCwgMHhGRTAwMDB9OwotCQlzaG9ydCBudW1fcGFnZXNfdGJsWzRdID0gezB4MjAsIDB4NDAsIDB4ODAsIDB4ZmZ9OworCQlzdGF0aWMgY29uc3QgaW50IGFkZHJfdGJsWzRdID0geworCQkJMHgwQzAwMDAsIDB4MEUwMDAwLCAweEZDMDAwMCwgMHhGRTAwMDAKKwkJfTsKKwkJc3RhdGljIGNvbnN0IHNob3J0IG51bV9wYWdlc190YmxbNF0gPSB7CisJCQkweDIwLCAweDQwLCAweDgwLCAweGZmCisJCX07CiAKIAkJZGV2LT5tZW1fc3RhcnQgPSAoKGFkZHIgJiAweDBmKSA8PCAxMykgKyBhZGRyX3RibFsoYWRkciA+PiA2KSAmIDNdIDsKIAkJbnVtX3BhZ2VzID0gbnVtX3BhZ2VzX3RibFsoYWRkciA+PiA0KSAmIDNdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hYy5oIGIvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hYy5oCmluZGV4IDc5YmRjMmUuLjVmMDZjNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWMuaAorKysgYi9kcml2ZXJzL25ldC9zdG1tYWMvc3RtbWFjLmgKQEAgLTIwLDcgKzIwLDcgQEAKICAgQXV0aG9yOiBHaXVzZXBwZSBDYXZhbGxhcm8gPHBlcHBlLmNhdmFsbGFyb0BzdC5jb20+CiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTgkiQXByXzIwMTAiCisjZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTgkiTm92XzIwMTAiCiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc3RtbWFjLmg+CiAKQEAgLTM3LDcgKzM3LDYgQEAKIAl1bnNpZ25lZCBpbnQgY3VyX3R4OwogCXVuc2lnbmVkIGludCBkaXJ0eV90eDsKIAl1bnNpZ25lZCBpbnQgZG1hX3R4X3NpemU7Ci0JaW50IHR4X2NvZTsKIAlpbnQgdHhfY29hbGVzY2U7CiAKIAlzdHJ1Y3QgZG1hX2Rlc2MgKmRtYV9yeCA7CkBAIC00OCw3ICs0Nyw2IEBACiAJc3RydWN0IHNrX2J1ZmZfaGVhZCByeF9yZWN5Y2xlOwogCiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQlpbnQgaXNfZ21hYzsKIAlkbWFfYWRkcl90IGRtYV9yeF9waHk7CiAJdW5zaWduZWQgaW50IGRtYV9yeF9zaXplOwogCXVuc2lnbmVkIGludCBkbWFfYnVmX3N6OwpAQCAtNjAsMTQgKzU4LDExIEBACiAJc3RydWN0IG5hcGlfc3RydWN0IG5hcGk7CiAKIAlwaHlfaW50ZXJmYWNlX3QgcGh5X2ludGVyZmFjZTsKLQlpbnQgcGJsOwotCWludCBidXNfaWQ7CiAJaW50IHBoeV9hZGRyOwogCWludCBwaHlfbWFzazsKIAlpbnQgKCpwaHlfcmVzZXQpICh2b2lkICpwcml2KTsKLQl2b2lkICgqZml4X21hY19zcGVlZCkgKHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCBzcGVlZCk7Ci0Jdm9pZCAoKmJ1c19zZXR1cCkodm9pZCBfX2lvbWVtICppb2FkZHIpOwotCXZvaWQgKmJzcF9wcml2OworCWludCByeF9jb2U7CisJaW50IG5vX2NzdW1faW5zZXJ0aW9uOwogCiAJaW50IHBoeV9pcnE7CiAJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjsKQEAgLTc3LDQ3ICs3MiwyMCBAQAogCXVuc2lnbmVkIGludCBmbG93X2N0cmw7CiAJdW5zaWduZWQgaW50IHBhdXNlOwogCXN0cnVjdCBtaWlfYnVzICptaWk7Ci0JaW50IG1paV9jbGtfY3NyOwogCiAJdTMyIG1zZ19lbmFibGU7CiAJc3BpbmxvY2tfdCBsb2NrOwogCWludCB3b2xvcHRzOwogCWludCB3b2xlbmFibGVkOwotCWludCBzaHV0ZG93bjsKICNpZmRlZiBDT05GSUdfU1RNTUFDX1RJTUVSCiAJc3RydWN0IHN0bW1hY190aW1lciAqdG07CiAjZW5kaWYKICNpZmRlZiBTVE1NQUNfVkxBTl9UQUdfVVNFRAogCXN0cnVjdCB2bGFuX2dyb3VwICp2bGdycDsKICNlbmRpZgotCWludCBlbmhfZGVzYzsKLQlpbnQgcnhfY29lOwotCWludCBidWdnZWRfanVtYm87Ci0JaW50IG5vX2NzdW1faW5zZXJ0aW9uOworCXN0cnVjdCBwbGF0X3N0bW1hY2VuZXRfZGF0YSAqcGxhdDsKIH07CiAKLSNpZmRlZiBDT05GSUdfU1RNX0RSSVZFUlMKLSNpbmNsdWRlIDxsaW51eC9zdG0vcGFkLmg+Ci1zdGF0aWMgaW5saW5lIGludCBzdG1tYWNfY2xhaW1fcmVzb3VyY2Uoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQlpbnQgcmV0ID0gMDsKLQlzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXRfZGF0ID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7Ci0KLQkvKiBQYWQgcm91dGluZyBzZXR1cCAqLwotCWlmIChJU19FUlIoZGV2bV9zdG1fcGFkX2NsYWltKCZwZGV2LT5kZXYsIHBsYXRfZGF0LT5wYWRfY29uZmlnLAotCQkJZGV2X25hbWUoJnBkZXYtPmRldikpKSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBGYWlsZWQgdG8gcmVxdWVzdCBwYWRzIVxuIiwgX19mdW5jX18pOwotCQlyZXQgPSAtRU5PREVWOwotCX0KLQlyZXR1cm4gcmV0OwotfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IHN0bW1hY19jbGFpbV9yZXNvdXJjZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCXJldHVybiAwOwotfQotI2VuZGlmCi0KIGV4dGVybiBpbnQgc3RtbWFjX21kaW9fdW5yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7CiBleHRlcm4gaW50IHN0bW1hY19tZGlvX3JlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTsKIGV4dGVybiB2b2lkIHN0bW1hY19zZXRfZXRodG9vbF9vcHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdG1tYWMvc3RtbWFjX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWNfZXRodG9vbC5jCmluZGV4IDZkNjU0ODIuLmZkNzE5ZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWNfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWNfZXRodG9vbC5jCkBAIC05NCw3ICs5NCw3IEBACiB7CiAJc3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCWlmICghcHJpdi0+aXNfZ21hYykKKwlpZiAoIXByaXYtPnBsYXQtPmhhc19nbWFjKQogCQlzdHJjcHkoaW5mby0+ZHJpdmVyLCBNQUMxMDBfRVRIVE9PTF9OQU1FKTsKIAllbHNlCiAJCXN0cmNweShpbmZvLT5kcml2ZXIsIEdNQUNfRVRIVE9PTF9OQU1FKTsKQEAgLTE3Niw3ICsxNzYsNyBAQAogCiAJbWVtc2V0KHJlZ19zcGFjZSwgMHgwLCBSRUdfU1BBQ0VfU0laRSk7CiAKLQlpZiAoIXByaXYtPmlzX2dtYWMpIHsKKwlpZiAoIXByaXYtPnBsYXQtPmhhc19nbWFjKSB7CiAJCS8qIE1BQyByZWdpc3RlcnMgKi8KIAkJZm9yIChpID0gMDsgaSA8IDEyOyBpKyspCiAJCQlyZWdfc3BhY2VbaV0gPSByZWFkbChwcml2LT5pb2FkZHIgKyAoaSAqIDQpKTsKQEAgLTE5NywxNiArMTk3LDYgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgc3RtbWFjX2V0aHRvb2xfc2V0X3R4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTMyIGRhdGEpCi17Ci0JaWYgKGRhdGEpCi0JCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19DU1VNOwotCWVsc2UKLQkJbmV0ZGV2LT5mZWF0dXJlcyAmPSB+TkVUSUZfRl9IV19DU1VNOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyB1MzIgc3RtbWFjX2V0aHRvb2xfZ2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtMzcwLDcgKzM2MCw3IEBACiAJLmdldF9saW5rID0gZXRodG9vbF9vcF9nZXRfbGluaywKIAkuZ2V0X3J4X2NzdW0gPSBzdG1tYWNfZXRodG9vbF9nZXRfcnhfY3N1bSwKIAkuZ2V0X3R4X2NzdW0gPSBldGh0b29sX29wX2dldF90eF9jc3VtLAotCS5zZXRfdHhfY3N1bSA9IHN0bW1hY19ldGh0b29sX3NldF90eF9jc3VtLAorCS5zZXRfdHhfY3N1bSA9IGV0aHRvb2xfb3Bfc2V0X3R4X2lwdjZfY3N1bSwKIAkuZ2V0X3NnID0gZXRodG9vbF9vcF9nZXRfc2csCiAJLnNldF9zZyA9IGV0aHRvb2xfb3Bfc2V0X3NnLAogCS5nZXRfcGF1c2VwYXJhbSA9IHN0bW1hY19nZXRfcGF1c2VwYXJhbSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY19tYWluLmMKaW5kZXggMjExNDgzNy4uMzRhMGFmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY19tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY19tYWluLmMKQEAgLTE4Niw2ICsxODYsMTggQEAKIAlyZXR1cm4gcHJpdi0+ZGlydHlfdHggKyBwcml2LT5kbWFfdHhfc2l6ZSAtIHByaXYtPmN1cl90eCAtIDE7CiB9CiAKKy8qIE9uIHNvbWUgU1QgcGxhdGZvcm1zLCBzb21lIEhXIHN5c3RlbSBjb25maWd1cmF0b24gcmVnaXN0ZXJzIGhhdmUgdG8gYmUKKyAqIHNldCBhY2NvcmRpbmcgdG8gdGhlIGxpbmsgc3BlZWQgbmVnb3RpYXRlZC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHN0bW1hY19od19maXhfbWFjX3NwZWVkKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdikKK3sKKwlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gcHJpdi0+cGh5ZGV2OworCisJaWYgKGxpa2VseShwcml2LT5wbGF0LT5maXhfbWFjX3NwZWVkKSkKKwkJcHJpdi0+cGxhdC0+Zml4X21hY19zcGVlZChwcml2LT5wbGF0LT5ic3BfcHJpdiwKKwkJCQkJICBwaHlkZXYtPnNwZWVkKTsKK30KKwogLyoqCiAgKiBzdG1tYWNfYWRqdXN0X2xpbmsKICAqIEBkZXY6IG5ldCBkZXZpY2Ugc3RydWN0dXJlCkBAIC0yMjgsMTUgKzI0MCwxMyBAQAogCQkJbmV3X3N0YXRlID0gMTsKIAkJCXN3aXRjaCAocGh5ZGV2LT5zcGVlZCkgewogCQkJY2FzZSAxMDAwOgotCQkJCWlmIChsaWtlbHkocHJpdi0+aXNfZ21hYykpCisJCQkJaWYgKGxpa2VseShwcml2LT5wbGF0LT5oYXNfZ21hYykpCiAJCQkJCWN0cmwgJj0gfnByaXYtPmh3LT5saW5rLnBvcnQ7Ci0JCQkJaWYgKGxpa2VseShwcml2LT5maXhfbWFjX3NwZWVkKSkKLQkJCQkJcHJpdi0+Zml4X21hY19zcGVlZChwcml2LT5ic3BfcHJpdiwKLQkJCQkJCQkgICAgcGh5ZGV2LT5zcGVlZCk7CisJCQkJc3RtbWFjX2h3X2ZpeF9tYWNfc3BlZWQocHJpdik7CiAJCQkJYnJlYWs7CiAJCQljYXNlIDEwMDoKIAkJCWNhc2UgMTA6Ci0JCQkJaWYgKHByaXYtPmlzX2dtYWMpIHsKKwkJCQlpZiAocHJpdi0+cGxhdC0+aGFzX2dtYWMpIHsKIAkJCQkJY3RybCB8PSBwcml2LT5ody0+bGluay5wb3J0OwogCQkJCQlpZiAocGh5ZGV2LT5zcGVlZCA9PSBTUEVFRF8xMDApIHsKIAkJCQkJCWN0cmwgfD0gcHJpdi0+aHctPmxpbmsuc3BlZWQ7CkBAIC0yNDYsOSArMjU2LDcgQEAKIAkJCQl9IGVsc2UgewogCQkJCQljdHJsICY9IH5wcml2LT5ody0+bGluay5wb3J0OwogCQkJCX0KLQkJCQlpZiAobGlrZWx5KHByaXYtPmZpeF9tYWNfc3BlZWQpKQotCQkJCQlwcml2LT5maXhfbWFjX3NwZWVkKHByaXYtPmJzcF9wcml2LAotCQkJCQkJCSAgICBwaHlkZXYtPnNwZWVkKTsKKwkJCQlzdG1tYWNfaHdfZml4X21hY19zcGVlZChwcml2KTsKIAkJCQlicmVhazsKIAkJCWRlZmF1bHQ6CiAJCQkJaWYgKG5ldGlmX21zZ19saW5rKHByaXYpKQpAQCAtMzA1LDcgKzMxMyw3IEBACiAJCXJldHVybiAwOwogCX0KIAotCXNucHJpbnRmKGJ1c19pZCwgTUlJX0JVU19JRF9TSVpFLCAiJXgiLCBwcml2LT5idXNfaWQpOworCXNucHJpbnRmKGJ1c19pZCwgTUlJX0JVU19JRF9TSVpFLCAiJXgiLCBwcml2LT5wbGF0LT5idXNfaWQpOwogCXNucHJpbnRmKHBoeV9pZCwgTUlJX0JVU19JRF9TSVpFICsgMywgUEhZX0lEX0ZNVCwgYnVzX2lkLAogCQkgcHJpdi0+cGh5X2FkZHIpOwogCXByX2RlYnVnKCJzdG1tYWNfaW5pdF9waHk6ICB0cnlpbmcgdG8gYXR0YWNoIHRvICVzXG4iLCBwaHlfaWQpOwpAQCAtNTUyLDcgKzU2MCw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIHN0bW1hY19kbWFfb3BlcmF0aW9uX21vZGUoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KQogewotCWlmIChsaWtlbHkoKHByaXYtPnR4X2NvZSkgJiYgKCFwcml2LT5ub19jc3VtX2luc2VydGlvbikpKSB7CisJaWYgKGxpa2VseSgocHJpdi0+cGxhdC0+dHhfY29lKSAmJiAoIXByaXYtPm5vX2NzdW1faW5zZXJ0aW9uKSkpIHsKIAkJLyogSW4gY2FzZSBvZiBHTUFDLCBTRiBtb2RlIGhhcyB0byBiZSBlbmFibGVkCiAJCSAqIHRvIHBlcmZvcm0gdGhlIFRYIENPRS4gVGhpcyBkZXBlbmRzIG9uOgogCQkgKiAxKSBUWCBDT0UgaWYgYWN0dWFsbHkgc3VwcG9ydGVkCkBAIC04MTQsNyArODIyLDcgQEAKIAlpbml0X2RtYV9kZXNjX3JpbmdzKGRldik7CiAKIAkvKiBETUEgaW5pdGlhbGl6YXRpb24gYW5kIFNXIHJlc2V0ICovCi0JaWYgKHVubGlrZWx5KHByaXYtPmh3LT5kbWEtPmluaXQocHJpdi0+aW9hZGRyLCBwcml2LT5wYmwsCisJaWYgKHVubGlrZWx5KHByaXYtPmh3LT5kbWEtPmluaXQocHJpdi0+aW9hZGRyLCBwcml2LT5wbGF0LT5wYmwsCiAJCQkJCSBwcml2LT5kbWFfdHhfcGh5LAogCQkJCQkgcHJpdi0+ZG1hX3J4X3BoeSkgPCAwKSkgewogCkBAIC04MjUsMTkgKzgzMywxNyBAQAogCS8qIENvcHkgdGhlIE1BQyBhZGRyIGludG8gdGhlIEhXICAqLwogCXByaXYtPmh3LT5tYWMtPnNldF91bWFjX2FkZHIocHJpdi0+aW9hZGRyLCBkZXYtPmRldl9hZGRyLCAwKTsKIAkvKiBJZiByZXF1aXJlZCwgcGVyZm9ybSBodyBzZXR1cCBvZiB0aGUgYnVzLiAqLwotCWlmIChwcml2LT5idXNfc2V0dXApCi0JCXByaXYtPmJ1c19zZXR1cChwcml2LT5pb2FkZHIpOworCWlmIChwcml2LT5wbGF0LT5idXNfc2V0dXApCisJCXByaXYtPnBsYXQtPmJ1c19zZXR1cChwcml2LT5pb2FkZHIpOwogCS8qIEluaXRpYWxpemUgdGhlIE1BQyBDb3JlICovCiAJcHJpdi0+aHctPm1hYy0+Y29yZV9pbml0KHByaXYtPmlvYWRkcik7CiAKIAlwcml2LT5yeF9jb2UgPSBwcml2LT5ody0+bWFjLT5yeF9jb2UocHJpdi0+aW9hZGRyKTsKIAlpZiAocHJpdi0+cnhfY29lKQogCQlwcl9pbmZvKCJzdG1tYWM6IFJ4IENoZWNrc3VtIE9mZmxvYWQgRW5naW5lIHN1cHBvcnRlZFxuIik7Ci0JaWYgKHByaXYtPnR4X2NvZSkKKwlpZiAocHJpdi0+cGxhdC0+dHhfY29lKQogCQlwcl9pbmZvKCJcdFRYIENoZWNrc3VtIGluc2VydGlvbiBzdXBwb3J0ZWRcbiIpOwogCi0JcHJpdi0+c2h1dGRvd24gPSAwOwotCiAJLyogSW5pdGlhbGlzZSB0aGUgTU1DIChpZiBwcmVzZW50KSB0byBkaXNhYmxlIGFsbCBpbnRlcnJ1cHRzLiAqLwogCXdyaXRlbCgweGZmZmZmZmZmLCBwcml2LT5pb2FkZHIgKyBNTUNfSElHSF9JTlRSX01BU0spOwogCXdyaXRlbCgweGZmZmZmZmZmLCBwcml2LT5pb2FkZHIgKyBNTUNfTE9XX0lOVFJfTUFTSyk7CkBAIC05NDMsNyArOTQ5LDcgQEAKIAkgICAgICAgc2tiLCBza2ItPmxlbik7CiAKIAlzZWdzID0gc2tiX2dzb19zZWdtZW50KHNrYiwgcHJpdi0+ZGV2LT5mZWF0dXJlcyAmIH5ORVRJRl9GX1RTTyk7Ci0JaWYgKHVubGlrZWx5KElTX0VSUihzZWdzKSkpCisJaWYgKElTX0VSUihzZWdzKSkKIAkJZ290byBzd190c29fZW5kOwogCiAJZG8gewpAQCAtMTA0Miw3ICsxMDQ4LDggQEAKIAkJcmV0dXJuIHN0bW1hY19zd190c28ocHJpdiwgc2tiKTsKIAogCWlmIChsaWtlbHkoKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpKSkgewotCQlpZiAodW5saWtlbHkoKCFwcml2LT50eF9jb2UpIHx8IChwcml2LT5ub19jc3VtX2luc2VydGlvbikpKQorCQlpZiAodW5saWtlbHkoKCFwcml2LT5wbGF0LT50eF9jb2UpIHx8CisJCQkgICAgIChwcml2LT5ub19jc3VtX2luc2VydGlvbikpKQogCQkJc2tiX2NoZWNrc3VtX2hlbHAoc2tiKTsKIAkJZWxzZQogCQkJY3N1bV9pbnNlcnRpb24gPSAxOwpAQCAtMTE0Niw3ICsxMTUzLDcgQEAKIAkJCQkJICAgRE1BX0ZST01fREVWSUNFKTsKIAogCQkJKHAgKyBlbnRyeSktPmRlczIgPSBwcml2LT5yeF9za2J1ZmZfZG1hW2VudHJ5XTsKLQkJCWlmICh1bmxpa2VseShwcml2LT5pc19nbWFjKSkgeworCQkJaWYgKHVubGlrZWx5KHByaXYtPnBsYXQtPmhhc19nbWFjKSkgewogCQkJCWlmIChiZnNpemUgPj0gQlVGX1NJWkVfOEtpQikKIAkJCQkJKHAgKyBlbnRyeSktPmRlczMgPQogCQkJCQkgICAgKHAgKyBlbnRyeSktPmRlczIgKyBCVUZfU0laRV84S2lCOwpAQCAtMTM1Niw3ICsxMzYzLDcgQEAKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKLQlpZiAocHJpdi0+aXNfZ21hYykKKwlpZiAocHJpdi0+cGxhdC0+aGFzX2dtYWMpCiAJCW1heF9tdHUgPSBKVU1CT19MRU47CiAJZWxzZQogCQltYXhfbXR1ID0gRVRIX0RBVEFfTEVOOwpAQCAtMTM3MCw3ICsxMzc3LDcgQEAKIAkgKiBuZWVkcyB0byBoYXZlIHRoZSBUeCBDT0UgZGlzYWJsZWQgZm9yIG92ZXJzaXplZCBmcmFtZXMKIAkgKiAoZHVlIHRvIGxpbWl0ZWQgYnVmZmVyIHNpemVzKS4gSW4gdGhpcyBjYXNlIHdlIGRpc2FibGUKIAkgKiB0aGUgVFggY3N1bSBpbnNlcnRpb25pbiB0aGUgVERFUyBhbmQgbm90IHVzZSBTRi4gKi8KLQlpZiAoKHByaXYtPmJ1Z2dlZF9qdW1ibykgJiYgKHByaXYtPmRldi0+bXR1ID4gRVRIX0RBVEFfTEVOKSkKKwlpZiAoKHByaXYtPnBsYXQtPmJ1Z2dlZF9qdW1ibykgJiYgKHByaXYtPmRldi0+bXR1ID4gRVRIX0RBVEFfTEVOKSkKIAkJcHJpdi0+bm9fY3N1bV9pbnNlcnRpb24gPSAxOwogCWVsc2UKIAkJcHJpdi0+bm9fY3N1bV9pbnNlcnRpb24gPSAwOwpAQCAtMTM5MCw3ICsxMzk3LDcgQEAKIAkJcmV0dXJuIElSUV9OT05FOwogCX0KIAotCWlmIChwcml2LT5pc19nbWFjKQorCWlmIChwcml2LT5wbGF0LT5oYXNfZ21hYykKIAkJLyogVG8gaGFuZGxlIEdNQUMgb3duIGludGVycnVwdHMgKi8KIAkJcHJpdi0+aHctPm1hYy0+aG9zdF9pcnFfc3RhdHVzKCh2b2lkIF9faW9tZW0gKikgZGV2LT5iYXNlX2FkZHIpOwogCkBAIC0xNDg3LDcgKzE0OTQsOCBAQAogCWRldi0+bmV0ZGV2X29wcyA9ICZzdG1tYWNfbmV0ZGV2X29wczsKIAlzdG1tYWNfc2V0X2V0aHRvb2xfb3BzKGRldik7CiAKLQlkZXYtPmZlYXR1cmVzIHw9IChORVRJRl9GX1NHIHwgTkVUSUZfRl9IV19DU1VNIHwgTkVUSUZfRl9ISUdIRE1BKTsKKwlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0hJR0hETUEgfAorCQlORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX0lQVjZfQ1NVTTsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gbXNlY3NfdG9famlmZmllcyh3YXRjaGRvZyk7CiAjaWZkZWYgU1RNTUFDX1ZMQU5fVEFHX1VTRUQKIAkvKiBCb3RoIG1hYzEwMCBhbmQgZ21hYyBzdXBwb3J0IHJlY2VpdmUgVkxBTiB0YWcgZGV0ZWN0aW9uICovCkBAIC0xNTIwLDcgKzE1MjgsNyBAQAogCiAJREJHKHByb2JlLCBERUJVRywgIiVzOiBTY2F0dGVyL0dhdGhlcjogJXMgLSBIVyBjaGVja3N1bXM6ICVzXG4iLAogCSAgICBkZXYtPm5hbWUsIChkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9TRykgPyAib24iIDogIm9mZiIsCi0JICAgIChkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9IV19DU1VNKSA/ICJvbiIgOiAib2ZmIik7CisJICAgIChkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9JUF9DU1VNKSA/ICJvbiIgOiAib2ZmIik7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTUzNiw3ICsxNTQ0LDcgQEAKIAogCXN0cnVjdCBtYWNfZGV2aWNlX2luZm8gKmRldmljZTsKIAotCWlmIChwcml2LT5pc19nbWFjKQorCWlmIChwcml2LT5wbGF0LT5oYXNfZ21hYykKIAkJZGV2aWNlID0gZHdtYWMxMDAwX3NldHVwKHByaXYtPmlvYWRkcik7CiAJZWxzZQogCQlkZXZpY2UgPSBkd21hYzEwMF9zZXR1cChwcml2LT5pb2FkZHIpOwpAQCAtMTU0NCw3ICsxNTUyLDcgQEAKIAlpZiAoIWRldmljZSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlpZiAocHJpdi0+ZW5oX2Rlc2MpIHsKKwlpZiAocHJpdi0+cGxhdC0+ZW5oX2Rlc2MpIHsKIAkJZGV2aWNlLT5kZXNjID0gJmVuaF9kZXNjX29wczsKIAkJcHJfaW5mbygiXHRFbmhhbmNlZCBkZXNjcmlwdG9yIHN0cnVjdHVyZVxuIik7CiAJfSBlbHNlCkBAIC0xNTk4LDcgKzE2MDYsNyBAQAogCQlwbGF0X2RhdC0+YnVzX2lkKTsKIAogCS8qIENoZWNrIHRoYXQgdGhpcyBwaHkgaXMgZm9yIHRoZSBNQUMgYmVpbmcgaW5pdGlhbGlzZWQgKi8KLQlpZiAocHJpdi0+YnVzX2lkICE9IHBsYXRfZGF0LT5idXNfaWQpCisJaWYgKHByaXYtPnBsYXQtPmJ1c19pZCAhPSBwbGF0X2RhdC0+YnVzX2lkKQogCQlyZXR1cm4gMDsKIAogCS8qIE9LLCB0aGlzIFBIWSBpcyBjb25uZWN0ZWQgdG8gdGhlIE1BQy4KQEAgLTE2MzQsMTUgKzE2NDIsMTMgQEAKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAl2b2lkIF9faW9tZW0gKmFkZHIgPSBOVUxMOwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gTlVMTDsKLQlzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXY7CisJc3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gTlVMTDsKIAlzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXRfZGF0OwogCiAJcHJfaW5mbygiU1RNTUFDIGRyaXZlcjpcblx0cGxhdGZvcm0gcmVnaXN0cmF0aW9uLi4uICIpOwogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7Ci0JaWYgKCFyZXMpIHsKLQkJcmV0ID0gLUVOT0RFVjsKLQkJZ290byBvdXQ7Ci0JfQorCWlmICghcmVzKQorCQlyZXR1cm4gLUVOT0RFVjsKIAlwcl9pbmZvKCJcdGRvbmUhXG4iKTsKIAogCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSwKQEAgLTE2NTAsMjIgKzE2NTYsMjEgQEAKIAkJcHJfZXJyKCIlczogRVJST1I6IG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCIKIAkJICAgICAgICJjYW5ub3QgZ2V0IHRoZSBJL08gYWRkciAweCV4XG4iLAogCQkgICAgICAgX19mdW5jX18sICh1bnNpZ25lZCBpbnQpcmVzLT5zdGFydCk7Ci0JCXJldCA9IC1FQlVTWTsKLQkJZ290byBvdXQ7CisJCXJldHVybiAtRUJVU1k7CiAJfQogCiAJYWRkciA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIAlpZiAoIWFkZHIpIHsKIAkJcHJfZXJyKCIlczogRVJST1I6IG1lbW9yeSBtYXBwaW5nIGZhaWxlZFxuIiwgX19mdW5jX18pOwogCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dDsKKwkJZ290byBvdXRfcmVsZWFzZV9yZWdpb247CiAJfQogCiAJbmRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3Qgc3RtbWFjX3ByaXYpKTsKIAlpZiAoIW5kZXYpIHsKIAkJcHJfZXJyKCIlczogRVJST1I6IGFsbG9jYXRpbmcgdGhlIGRldmljZVxuIiwgX19mdW5jX18pOwogCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dDsKKwkJZ290byBvdXRfdW5tYXA7CiAJfQogCiAJU0VUX05FVERFVl9ERVYobmRldiwgJnBkZXYtPmRldik7CkBAIC0xNjc1LDIxICsxNjgwLDE3IEBACiAJaWYgKG5kZXYtPmlycSA9PSAtRU5YSU8pIHsKIAkJcHJfZXJyKCIlczogRVJST1I6IE1BQyBJUlEgY29uZmlndXJhdGlvbiAiCiAJCSAgICAgICAiaW5mb3JtYXRpb24gbm90IGZvdW5kXG4iLCBfX2Z1bmNfXyk7Ci0JCXJldCA9IC1FTk9ERVY7Ci0JCWdvdG8gb3V0OworCQlyZXQgPSAtRU5YSU87CisJCWdvdG8gb3V0X2ZyZWVfbmRldjsKIAl9CiAKIAlwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7CiAJcHJpdi0+ZGV2aWNlID0gJihwZGV2LT5kZXYpOwogCXByaXYtPmRldiA9IG5kZXY7CiAJcGxhdF9kYXQgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKLQlwcml2LT5idXNfaWQgPSBwbGF0X2RhdC0+YnVzX2lkOwotCXByaXYtPnBibCA9IHBsYXRfZGF0LT5wYmw7CS8qIFRMSSAqLwotCXByaXYtPm1paV9jbGtfY3NyID0gcGxhdF9kYXQtPmNsa19jc3I7Ci0JcHJpdi0+dHhfY29lID0gcGxhdF9kYXQtPnR4X2NvZTsKLQlwcml2LT5idWdnZWRfanVtYm8gPSBwbGF0X2RhdC0+YnVnZ2VkX2p1bWJvOwotCXByaXYtPmlzX2dtYWMgPSBwbGF0X2RhdC0+aGFzX2dtYWM7CS8qIEdNQUMgaXMgb24gYm9hcmQgKi8KLQlwcml2LT5lbmhfZGVzYyA9IHBsYXRfZGF0LT5lbmhfZGVzYzsKKworCXByaXYtPnBsYXQgPSBwbGF0X2RhdDsKKwogCXByaXYtPmlvYWRkciA9IGFkZHI7CiAKIAkvKiBQTVQgbW9kdWxlIGlzIG5vdCBpbnRlZ3JhdGVkIGluIGFsbCB0aGUgTUFDIGRldmljZXMuICovCkBAIC0xNzAzLDIwICsxNzA0LDIyIEBACiAJLyogU2V0IHRoZSBJL08gYmFzZSBhZGRyICovCiAJbmRldi0+YmFzZV9hZGRyID0gKHVuc2lnbmVkIGxvbmcpYWRkcjsKIAotCS8qIFZlcmlmeSBlbWJlZGRlZCByZXNvdXJjZSBmb3IgdGhlIHBsYXRmb3JtICovCi0JcmV0ID0gc3RtbWFjX2NsYWltX3Jlc291cmNlKHBkZXYpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dDsKKwkvKiBDdXN0b20gaW5pdGlhbGlzYXRpb24gKi8KKwlpZiAocHJpdi0+cGxhdC0+aW5pdCkgeworCQlyZXQgPSBwcml2LT5wbGF0LT5pbml0KHBkZXYpOworCQlpZiAodW5saWtlbHkocmV0KSkKKwkJCWdvdG8gb3V0X2ZyZWVfbmRldjsKKwl9CiAKIAkvKiBNQUMgSFcgcmV2aWNlIGRldGVjdGlvbiAqLwogCXJldCA9IHN0bW1hY19tYWNfZGV2aWNlX3NldHVwKG5kZXYpOwogCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dDsKKwkJZ290byBvdXRfcGxhdF9leGl0OwogCiAJLyogTmV0d29yayBEZXZpY2UgUmVnaXN0cmF0aW9uICovCiAJcmV0ID0gc3RtbWFjX3Byb2JlKG5kZXYpOwogCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dDsKKwkJZ290byBvdXRfcGxhdF9leGl0OwogCiAJLyogYXNzb2NpYXRlIGEgUEhZIC0gaXQgaXMgcHJvdmlkZWQgYnkgYW5vdGhlciBwbGF0Zm9ybSBidXMgKi8KIAlpZiAoIWRyaXZlcl9mb3JfZWFjaF9kZXZpY2UKQEAgLTE3MjQsMzEgKzE3MjcsMzMgQEAKIAkgICAgIHN0bW1hY19hc3NvY2lhdGVfcGh5KSkgewogCQlwcl9lcnIoIk5vIFBIWSBkZXZpY2UgaXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgTUFDIVxuIik7CiAJCXJldCA9IC1FTk9ERVY7Ci0JCWdvdG8gb3V0OworCQlnb3RvIG91dF91bnJlZ2lzdGVyOwogCX0KIAotCXByaXYtPmZpeF9tYWNfc3BlZWQgPSBwbGF0X2RhdC0+Zml4X21hY19zcGVlZDsKLQlwcml2LT5idXNfc2V0dXAgPSBwbGF0X2RhdC0+YnVzX3NldHVwOwotCXByaXYtPmJzcF9wcml2ID0gcGxhdF9kYXQtPmJzcF9wcml2OwotCiAJcHJfaW5mbygiXHQlcyAtIChkZXYuIG5hbWU6ICVzIC0gaWQ6ICVkLCBJUlEgIyVkXG4iCiAJICAgICAgICJcdElPIGJhc2UgYWRkcjogMHglcClcbiIsIG5kZXYtPm5hbWUsIHBkZXYtPm5hbWUsCiAJICAgICAgIHBkZXYtPmlkLCBuZGV2LT5pcnEsIGFkZHIpOwogCiAJLyogTURJTyBidXMgUmVnaXN0cmF0aW9uICovCi0JcHJfZGVidWcoIlx0TURJTyBidXMgKGlkOiAlZCkuLi4iLCBwcml2LT5idXNfaWQpOworCXByX2RlYnVnKCJcdE1ESU8gYnVzIChpZDogJWQpLi4uIiwgcHJpdi0+cGxhdC0+YnVzX2lkKTsKIAlyZXQgPSBzdG1tYWNfbWRpb19yZWdpc3RlcihuZGV2KTsKIAlpZiAocmV0IDwgMCkKLQkJZ290byBvdXQ7CisJCWdvdG8gb3V0X3VucmVnaXN0ZXI7CiAJcHJfZGVidWcoInJlZ2lzdGVyZWQhXG4iKTsKKwlyZXR1cm4gMDsKIAotb3V0OgotCWlmIChyZXQgPCAwKSB7Ci0JCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwotCQlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKLQkJaWYgKGFkZHIgIT0gTlVMTCkKLQkJCWlvdW5tYXAoYWRkcik7Ci0JfQorb3V0X3VucmVnaXN0ZXI6CisJdW5yZWdpc3Rlcl9uZXRkZXYobmRldik7CitvdXRfcGxhdF9leGl0OgorCWlmIChwcml2LT5wbGF0LT5leGl0KQorCQlwcml2LT5wbGF0LT5leGl0KHBkZXYpOworb3V0X2ZyZWVfbmRldjoKKwlmcmVlX25ldGRldihuZGV2KTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKK291dF91bm1hcDoKKwlpb3VubWFwKGFkZHIpOworb3V0X3JlbGVhc2VfcmVnaW9uOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTE3NzcsNiArMTc4Miw5IEBACiAKIAlzdG1tYWNfbWRpb191bnJlZ2lzdGVyKG5kZXYpOwogCisJaWYgKHByaXYtPnBsYXQtPmV4aXQpCisJCXByaXYtPnBsYXQtPmV4aXQocGRldik7CisKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAl1bnJlZ2lzdGVyX25ldGRldihuZGV2KTsKIApAQCAtMTc5MCw3MCArMTc5OCw1NSBAQAogfQogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IHN0bW1hY19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgc3RtbWFjX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7CiAJaW50IGRpc19pYyA9IDA7CiAKLQlpZiAoIWRldiB8fCAhbmV0aWZfcnVubmluZyhkZXYpKQorCWlmICghbmRldiB8fCAhbmV0aWZfcnVubmluZyhuZGV2KSkKIAkJcmV0dXJuIDA7CiAKIAlzcGluX2xvY2soJnByaXYtPmxvY2spOwogCi0JaWYgKHN0YXRlLmV2ZW50ID09IFBNX0VWRU5UX1NVU1BFTkQpIHsKLQkJbmV0aWZfZGV2aWNlX2RldGFjaChkZXYpOwotCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0JCWlmIChwcml2LT5waHlkZXYpCi0JCQlwaHlfc3RvcChwcml2LT5waHlkZXYpOworCW5ldGlmX2RldmljZV9kZXRhY2gobmRldik7CisJbmV0aWZfc3RvcF9xdWV1ZShuZGV2KTsKKwlpZiAocHJpdi0+cGh5ZGV2KQorCQlwaHlfc3RvcChwcml2LT5waHlkZXYpOwogCiAjaWZkZWYgQ09ORklHX1NUTU1BQ19USU1FUgotCQlwcml2LT50bS0+dGltZXJfc3RvcCgpOwotCQlpZiAobGlrZWx5KHByaXYtPnRtLT5lbmFibGUpKQotCQkJZGlzX2ljID0gMTsKKwlwcml2LT50bS0+dGltZXJfc3RvcCgpOworCWlmIChsaWtlbHkocHJpdi0+dG0tPmVuYWJsZSkpCisJCWRpc19pYyA9IDE7CiAjZW5kaWYKLQkJbmFwaV9kaXNhYmxlKCZwcml2LT5uYXBpKTsKKwluYXBpX2Rpc2FibGUoJnByaXYtPm5hcGkpOwogCi0JCS8qIFN0b3AgVFgvUlggRE1BICovCi0JCXByaXYtPmh3LT5kbWEtPnN0b3BfdHgocHJpdi0+aW9hZGRyKTsKLQkJcHJpdi0+aHctPmRtYS0+c3RvcF9yeChwcml2LT5pb2FkZHIpOwotCQkvKiBDbGVhciB0aGUgUngvVHggZGVzY3JpcHRvcnMgKi8KLQkJcHJpdi0+aHctPmRlc2MtPmluaXRfcnhfZGVzYyhwcml2LT5kbWFfcngsIHByaXYtPmRtYV9yeF9zaXplLAotCQkJCQkgICAgIGRpc19pYyk7Ci0JCXByaXYtPmh3LT5kZXNjLT5pbml0X3R4X2Rlc2MocHJpdi0+ZG1hX3R4LCBwcml2LT5kbWFfdHhfc2l6ZSk7CisJLyogU3RvcCBUWC9SWCBETUEgKi8KKwlwcml2LT5ody0+ZG1hLT5zdG9wX3R4KHByaXYtPmlvYWRkcik7CisJcHJpdi0+aHctPmRtYS0+c3RvcF9yeChwcml2LT5pb2FkZHIpOworCS8qIENsZWFyIHRoZSBSeC9UeCBkZXNjcmlwdG9ycyAqLworCXByaXYtPmh3LT5kZXNjLT5pbml0X3J4X2Rlc2MocHJpdi0+ZG1hX3J4LCBwcml2LT5kbWFfcnhfc2l6ZSwKKwkJCQkgICAgIGRpc19pYyk7CisJcHJpdi0+aHctPmRlc2MtPmluaXRfdHhfZGVzYyhwcml2LT5kbWFfdHgsIHByaXYtPmRtYV90eF9zaXplKTsKIAotCQkvKiBFbmFibGUgUG93ZXIgZG93biBtb2RlIGJ5IHByb2dyYW1taW5nIHRoZSBQTVQgcmVncyAqLwotCQlpZiAoZGV2aWNlX2Nhbl93YWtldXAocHJpdi0+ZGV2aWNlKSkKLQkJCXByaXYtPmh3LT5tYWMtPnBtdChwcml2LT5pb2FkZHIsIHByaXYtPndvbG9wdHMpOwotCQllbHNlCi0JCQlzdG1tYWNfZGlzYWJsZV9tYWMocHJpdi0+aW9hZGRyKTsKLQl9IGVsc2UgewotCQlwcml2LT5zaHV0ZG93biA9IDE7Ci0JCS8qIEFsdGhvdWdoIHRoaXMgY2FuIGFwcGVhciBzbGlnaHRseSByZWR1bmRhbnQgaXQgYWN0dWFsbHkKLQkJICogbWFrZXMgZmFzdCB0aGUgc3RhbmRieSBvcGVyYXRpb24gYW5kIGd1YXJhbnRlZXMgdGhlIGRyaXZlcgotCQkgKiB3b3JraW5nIGlmIGhpYmVybmF0aW9uIGlzIG9uIG1lZGlhLiAqLwotCQlzdG1tYWNfcmVsZWFzZShkZXYpOwotCX0KKwkvKiBFbmFibGUgUG93ZXIgZG93biBtb2RlIGJ5IHByb2dyYW1taW5nIHRoZSBQTVQgcmVncyAqLworCWlmIChkZXZpY2VfbWF5X3dha2V1cChwcml2LT5kZXZpY2UpKQorCQlwcml2LT5ody0+bWFjLT5wbXQocHJpdi0+aW9hZGRyLCBwcml2LT53b2xvcHRzKTsKKwllbHNlCisJCXN0bW1hY19kaXNhYmxlX21hYyhwcml2LT5pb2FkZHIpOwogCiAJc3Bpbl91bmxvY2soJnByaXYtPmxvY2spOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHN0bW1hY19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgc3RtbWFjX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAotCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQorCWlmICghbmV0aWZfcnVubmluZyhuZGV2KSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAocHJpdi0+c2h1dGRvd24pIHsKLQkJLyogUmUtb3BlbiB0aGUgaW50ZXJmYWNlIGFuZCByZS1pbml0IHRoZSBNQUMvRE1BCi0JCSAgIGFuZCB0aGUgcmluZ3MgKGkuZS4gb24gaGliZXJuYXRpb24gc3RhZ2UpICovCi0JCXN0bW1hY19vcGVuKGRldik7Ci0JCXJldHVybiAwOwotCX0KLQogCXNwaW5fbG9jaygmcHJpdi0+bG9jayk7CiAKIAkvKiBQb3dlciBEb3duIGJpdCwgaW50byB0aGUgUE0gcmVnaXN0ZXIsIGlzIGNsZWFyZWQKQEAgLTE4NjEsMTAgKzE4NTQsMTAgQEAKIAkgKiBpcyByZWNlaXZlZC4gQW55d2F5LCBpdCdzIGJldHRlciB0byBtYW51YWxseSBjbGVhcgogCSAqIHRoaXMgYml0IGJlY2F1c2UgaXQgY2FuIGdlbmVyYXRlIHByb2JsZW1zIHdoaWxlIHJlc3VtaW5nCiAJICogZnJvbSBhbm90aGVyIGRldmljZXMgKGUuZy4gc2VyaWFsIGNvbnNvbGUpLiAqLwotCWlmIChkZXZpY2VfY2FuX3dha2V1cChwcml2LT5kZXZpY2UpKQorCWlmIChkZXZpY2VfbWF5X3dha2V1cChwcml2LT5kZXZpY2UpKQogCQlwcml2LT5ody0+bWFjLT5wbXQocHJpdi0+aW9hZGRyLCAwKTsKIAotCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKKwluZXRpZl9kZXZpY2VfYXR0YWNoKG5kZXYpOwogCiAJLyogRW5hYmxlIHRoZSBNQUMgYW5kIERNQSAqLwogCXN0bW1hY19lbmFibGVfbWFjKHByaXYtPmlvYWRkcik7CkBAIC0xODcyLDMxICsxODY1LDU5IEBACiAJcHJpdi0+aHctPmRtYS0+c3RhcnRfcngocHJpdi0+aW9hZGRyKTsKIAogI2lmZGVmIENPTkZJR19TVE1NQUNfVElNRVIKLQlwcml2LT50bS0+dGltZXJfc3RhcnQodG1yYXRlKTsKKwlpZiAobGlrZWx5KHByaXYtPnRtLT5lbmFibGUpKQorCQlwcml2LT50bS0+dGltZXJfc3RhcnQodG1yYXRlKTsKICNlbmRpZgogCW5hcGlfZW5hYmxlKCZwcml2LT5uYXBpKTsKIAogCWlmIChwcml2LT5waHlkZXYpCiAJCXBoeV9zdGFydChwcml2LT5waHlkZXYpOwogCi0JbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKKwluZXRpZl9zdGFydF9xdWV1ZShuZGV2KTsKIAogCXNwaW5fdW5sb2NrKCZwcml2LT5sb2NrKTsKIAlyZXR1cm4gMDsKIH0KLSNlbmRpZgogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzdG1tYWNfZHJpdmVyID0gewotCS5kcml2ZXIgPSB7Ci0JCSAgIC5uYW1lID0gU1RNTUFDX1JFU09VUkNFX05BTUUsCi0JCSAgIH0sCi0JLnByb2JlID0gc3RtbWFjX2R2cl9wcm9iZSwKLQkucmVtb3ZlID0gc3RtbWFjX2R2cl9yZW1vdmUsCi0jaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHN0bW1hY19mcmVlemUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAoIW5kZXYgfHwgIW5ldGlmX3J1bm5pbmcobmRldikpCisJCXJldHVybiAwOworCisJcmV0dXJuIHN0bW1hY19yZWxlYXNlKG5kZXYpOworfQorCitzdGF0aWMgaW50IHN0bW1hY19yZXN0b3JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKCFuZGV2IHx8ICFuZXRpZl9ydW5uaW5nKG5kZXYpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBzdG1tYWNfb3BlbihuZGV2KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHN0bW1hY19wbV9vcHMgPSB7CiAJLnN1c3BlbmQgPSBzdG1tYWNfc3VzcGVuZCwKIAkucmVzdW1lID0gc3RtbWFjX3Jlc3VtZSwKLSNlbmRpZgorCS5mcmVlemUgPSBzdG1tYWNfZnJlZXplLAorCS50aGF3ID0gc3RtbWFjX3Jlc3RvcmUsCisJLnJlc3RvcmUgPSBzdG1tYWNfcmVzdG9yZSwKK307CisjZWxzZQorc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHN0bW1hY19wbV9vcHM7CisjZW5kaWYgLyogQ09ORklHX1BNICovCiAKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHN0bW1hY19kcml2ZXIgPSB7CisJLnByb2JlID0gc3RtbWFjX2R2cl9wcm9iZSwKKwkucmVtb3ZlID0gc3RtbWFjX2R2cl9yZW1vdmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSBTVE1NQUNfUkVTT1VSQ0VfTkFNRSwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJCS5wbSA9ICZzdG1tYWNfcG1fb3BzLAorCX0sCiB9OwogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWNfbWRpby5jIGIvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY19tZGlvLmMKaW5kZXggZDc0NDE2MS4uMjM0YjQwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY19tZGlvLmMKKysrIGIvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY19tZGlvLmMKQEAgLTUzLDcgKzUzLDcgQEAKIAlpbnQgZGF0YTsKIAl1MTYgcmVnVmFsdWUgPSAoKChwaHlhZGRyIDw8IDExKSAmICgweDAwMDBGODAwKSkgfAogCQkJKChwaHlyZWcgPDwgNikgJiAoMHgwMDAwMDdDMCkpKTsKLQlyZWdWYWx1ZSB8PSBNSUlfQlVTWSB8ICgocHJpdi0+bWlpX2Nsa19jc3IgJiA3KSA8PCAyKTsKKwlyZWdWYWx1ZSB8PSBNSUlfQlVTWSB8ICgocHJpdi0+cGxhdC0+Y2xrX2NzciAmIDcpIDw8IDIpOwogCiAJZG8ge30gd2hpbGUgKCgocmVhZGwocHJpdi0+aW9hZGRyICsgbWlpX2FkZHJlc3MpKSAmIE1JSV9CVVNZKSA9PSAxKTsKIAl3cml0ZWwocmVnVmFsdWUsIHByaXYtPmlvYWRkciArIG1paV9hZGRyZXNzKTsKQEAgLTg1LDcgKzg1LDcgQEAKIAkgICAgKCgocGh5YWRkciA8PCAxMSkgJiAoMHgwMDAwRjgwMCkpIHwgKChwaHlyZWcgPDwgNikgJiAoMHgwMDAwMDdDMCkpKQogCSAgICB8IE1JSV9XUklURTsKIAotCXZhbHVlIHw9IE1JSV9CVVNZIHwgKChwcml2LT5taWlfY2xrX2NzciAmIDcpIDw8IDIpOworCXZhbHVlIHw9IE1JSV9CVVNZIHwgKChwcml2LT5wbGF0LT5jbGtfY3NyICYgNykgPDwgMik7CiAKIAogCS8qIFdhaXQgdW50aWwgYW55IGV4aXN0aW5nIE1JSSBvcGVyYXRpb24gaXMgY29tcGxldGUgKi8KQEAgLTExNCw3ICsxMTQsNyBAQAogCiAJaWYgKHByaXYtPnBoeV9yZXNldCkgewogCQlwcl9kZWJ1Zygic3RtbWFjX21kaW9fcmVzZXQ6IGNhbGxpbmcgcGh5X3Jlc2V0XG4iKTsKLQkJcHJpdi0+cGh5X3Jlc2V0KHByaXYtPmJzcF9wcml2KTsKKwkJcHJpdi0+cGh5X3Jlc2V0KHByaXYtPnBsYXQtPmJzcF9wcml2KTsKIAl9CiAKIAkvKiBUaGlzIGlzIGEgd29ya2Fyb3VuZCBmb3IgcHJvYmxlbXMgd2l0aCB0aGUgU1RFMTAxUCBQSFkuCkBAIC0xNTcsNyArMTU3LDcgQEAKIAluZXdfYnVzLT5yZWFkID0gJnN0bW1hY19tZGlvX3JlYWQ7CiAJbmV3X2J1cy0+d3JpdGUgPSAmc3RtbWFjX21kaW9fd3JpdGU7CiAJbmV3X2J1cy0+cmVzZXQgPSAmc3RtbWFjX21kaW9fcmVzZXQ7Ci0Jc25wcmludGYobmV3X2J1cy0+aWQsIE1JSV9CVVNfSURfU0laRSwgIiV4IiwgcHJpdi0+YnVzX2lkKTsKKwlzbnByaW50ZihuZXdfYnVzLT5pZCwgTUlJX0JVU19JRF9TSVpFLCAiJXgiLCBwcml2LT5wbGF0LT5idXNfaWQpOwogCW5ld19idXMtPnByaXYgPSBuZGV2OwogCW5ld19idXMtPmlycSA9IGlycWxpc3Q7CiAJbmV3X2J1cy0+cGh5X21hc2sgPSBwcml2LT5waHlfbWFzazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N1bmRhbmNlLmMgYi9kcml2ZXJzL25ldC9zdW5kYW5jZS5jCmluZGV4IGI0MDlkN2UuLjQ3OTNkZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N1bmRhbmNlLmMKKysrIGIvZHJpdmVycy9uZXQvc3VuZGFuY2UuYwpAQCAtMjk0LDYgKzI5NCw5IEBACiAJLyogQWxpYXNlZCBhbmQgYm9ndXMgdmFsdWVzISAqLwogCVJ4U3RhdHVzID0gMHgwYywKIH07CisKKyNkZWZpbmUgQVNJQ19ISV9XT1JEKHgpCSgoeCkgKyAyKQorCiBlbnVtIEFTSUNDdHJsX0hpV29yZF9iaXQgewogCUdsb2JhbFJlc2V0ID0gMHgwMDAxLAogCVJ4UmVzZXQgPSAweDAwMDIsCkBAIC00MzEsNiArNDM0LDcgQEAKIHN0YXRpYyB2b2lkIG5ldGRldl9lcnJvcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaW50cl9zdGF0dXMpOwogc3RhdGljIHZvaWQgc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IF9fc2V0X21hY19hZGRyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIGludCBzdW5kYW5jZV9zZXRfbWFjX2FkZHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSk7CiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmdldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgbmV0ZGV2X2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpOwogc3RhdGljIGludCAgbmV0ZGV2X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpAQCAtNDY0LDcgKzQ2OCw3IEBACiAJLm5kb19kb19pb2N0bCAJCT0gbmV0ZGV2X2lvY3RsLAogCS5uZG9fdHhfdGltZW91dAkJPSB0eF90aW1lb3V0LAogCS5uZG9fY2hhbmdlX210dQkJPSBjaGFuZ2VfbXR1LAotCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBzdW5kYW5jZV9zZXRfbWFjX2FkZHIsCiAJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCiB9OwogCkBAIC0xNTkyLDYgKzE1OTYsMTkgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyogSW52b2tlZCB3aXRoIHJ0bmxfbG9jayBoZWxkICovCitzdGF0aWMgaW50IHN1bmRhbmNlX3NldF9tYWNfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpkYXRhKQoreworCWNvbnN0IHN0cnVjdCBzb2NrYWRkciAqYWRkciA9IGRhdGE7CisKKwlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoYWRkci0+c2FfZGF0YSkpCisJCXJldHVybiAtRUlOVkFMOworCW1lbWNweShkZXYtPmRldl9hZGRyLCBhZGRyLT5zYV9kYXRhLCBFVEhfQUxFTik7CisJX19zZXRfbWFjX2FkZHIoZGV2KTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IHsKIAljb25zdCBjaGFyIG5hbWVbRVRIX0dTVFJJTkdfTEVOXTsKIH0gc3VuZGFuY2Vfc3RhdHNbXSA9IHsKQEAgLTE3NzIsMTAgKzE3ODksMTAgQEAKICAgICAJfQogCiAgICAgCWlvd3JpdGUxNihHbG9iYWxSZXNldCB8IERNQVJlc2V0IHwgRklGT1Jlc2V0IHwgTmV0d29ya1Jlc2V0LAotCQkJaW9hZGRyICtBU0lDQ3RybCArIDIpOworCQkJaW9hZGRyICsgQVNJQ19ISV9XT1JEKEFTSUNDdHJsKSk7CiAKICAgICAJZm9yIChpID0gMjAwMDsgaSA+IDA7IGktLSkgewotIAkJaWYgKChpb3JlYWQxNihpb2FkZHIgKyBBU0lDQ3RybCArMikgJiBSZXNldEJ1c3kpID09IDApCisJCWlmICgoaW9yZWFkMTYoaW9hZGRyICsgQVNJQ19ISV9XT1JEKEFTSUNDdHJsKSkgJiBSZXNldEJ1c3kpID09IDApCiAJCQlicmVhazsKIAkJbWRlbGF5KDEpOwogICAgIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdW5nZW0uYyBiL2RyaXZlcnMvbmV0L3N1bmdlbS5jCmluZGV4IDRjZWIzY2YuLjFjNTQwOGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N1bmdlbS5jCisrKyBiL2RyaXZlcnMvbmV0L3N1bmdlbS5jCkBAIC0xMDA0LDcgKzEwMDQsNyBAQAogCiAJY3RybCA9IDA7CiAJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpIHsKLQkJY29uc3QgdTY0IGNzdW1fc3RhcnRfb2ZmID0gc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKTsKKwkJY29uc3QgdTY0IGNzdW1fc3RhcnRfb2ZmID0gc2tiX2NoZWNrc3VtX3N0YXJ0X29mZnNldChza2IpOwogCQljb25zdCB1NjQgY3N1bV9zdHVmZl9vZmYgPSBjc3VtX3N0YXJ0X29mZiArIHNrYi0+Y3N1bV9vZmZzZXQ7CiAKIAkJY3RybCA9IChUWERDVFJMX0NFTkFCIHwKQEAgLTIzODAsMTAgKzIzODAsOCBAQAogCSAqLwogCW11dGV4X3VubG9jaygmZ3AtPnBtX211dGV4KTsKIAotCS8qIFdhaXQgZm9yIGEgcGVuZGluZyByZXNldCB0YXNrIHRvIGNvbXBsZXRlICovCi0Jd2hpbGUgKGdwLT5yZXNldF90YXNrX3BlbmRpbmcpCi0JCXlpZWxkKCk7Ci0JZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwkvKiBXYWl0IGZvciB0aGUgcGVuZGluZyByZXNldCB0YXNrIHRvIGNvbXBsZXRlICovCisJZmx1c2hfd29ya19zeW5jKCZncC0+cmVzZXRfdGFzayk7CiAKIAkvKiBTaHV0IHRoZSBQSFkgZG93biBldmVudHVhbGx5IGFuZCBzZXR1cCBXT0wgKi8KIAlnZW1fc3RvcF9waHkoZ3AsIGdwLT5hc2xlZXBfd29sKTsKQEAgLTI5MjgsMTAgKzI5MjYsOCBAQAogCQkvKiBXZSBzaG91bGRuJ3QgbmVlZCBhbnkgbG9ja2luZyBoZXJlICovCiAJCWdlbV9nZXRfY2VsbChncCk7CiAKLQkJLyogV2FpdCBmb3IgYSBwZW5kaW5nIHJlc2V0IHRhc2sgdG8gY29tcGxldGUgKi8KLQkJd2hpbGUgKGdwLT5yZXNldF90YXNrX3BlbmRpbmcpCi0JCQl5aWVsZCgpOwotCQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCQkvKiBDYW5jZWwgcmVzZXQgdGFzayAqLworCQljYW5jZWxfd29ya19zeW5jKCZncC0+cmVzZXRfdGFzayk7CiAKIAkJLyogU2h1dCB0aGUgUEhZIGRvd24gKi8KIAkJZ2VtX3N0b3BfcGh5KGdwLCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N1bmhtZS5jIGIvZHJpdmVycy9uZXQvc3VuaG1lLmMKaW5kZXggNWUyOGM0MS4uNTViYmI5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3VuaG1lLmMKKysrIGIvZHJpdmVycy9uZXQvc3VuaG1lLmMKQEAgLTIyNjYsNyArMjI2Niw3IEBACiAKIAl0eF9mbGFncyA9IFRYRkxBR19PV047CiAJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpIHsKLQkJY29uc3QgdTMyIGNzdW1fc3RhcnRfb2ZmID0gc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKTsKKwkJY29uc3QgdTMyIGNzdW1fc3RhcnRfb2ZmID0gc2tiX2NoZWNrc3VtX3N0YXJ0X29mZnNldChza2IpOwogCQljb25zdCB1MzIgY3N1bV9zdHVmZl9vZmYgPSBjc3VtX3N0YXJ0X29mZiArIHNrYi0+Y3N1bV9vZmZzZXQ7CiAKIAkJdHhfZmxhZ3MgPSAoVFhGTEFHX09XTiB8IFRYRkxBR19DU0VOQUJMRSB8CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdW5sYW5jZS5jIGIvZHJpdmVycy9uZXQvc3VubGFuY2UuYwppbmRleCAyY2Y4NGU1Li43NjdlMWUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdW5sYW5jZS5jCisrKyBiL2RyaXZlcnMvbmV0L3N1bmxhbmNlLmMKQEAgLTEyOTUsMTcgKzEyOTUsOSBAQAogCXN0cmNweShpbmZvLT52ZXJzaW9uLCAiMi4wMiIpOwogfQogCi1zdGF0aWMgdTMyIHNwYXJjX2xhbmNlX2dldF9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JLyogV2UgcmVhbGx5IGRvIG5vdCBrZWVwIHRyYWNrIG9mIHRoaXMsIGJ1dCB0aGlzCi0JICogaXMgYmV0dGVyIHRoYW4gbm90IHJlcG9ydGluZyBhbnl0aGluZyBhdCBhbGwuCi0JICovCi0JcmV0dXJuIDE7Ci19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgc3BhcmNfbGFuY2VfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9kcnZpbmZvCQk9IHNwYXJjX2xhbmNlX2dldF9kcnZpbmZvLAotCS5nZXRfbGluawkJPSBzcGFyY19sYW5jZV9nZXRfbGluaywKKwkuZ2V0X2xpbmsJCT0gZXRodG9vbF9vcF9nZXRfbGluaywKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgc3BhcmNfbGFuY2Vfb3BzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdGczLmMgYi9kcml2ZXJzL25ldC90ZzMuYwppbmRleCA2Zjk3YjdiLi43ODQxYThmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90ZzMuYworKysgYi9kcml2ZXJzL25ldC90ZzMuYwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgorI2luY2x1ZGUgPGxpbnV4L21kaW8uaD4KICNpbmNsdWRlIDxsaW51eC9taWkuaD4KICNpbmNsdWRlIDxsaW51eC9waHkuaD4KICNpbmNsdWRlIDxsaW51eC9icmNtcGh5Lmg+CkBAIC02OSwxMCArNzAsMTAgQEAKIAogI2RlZmluZSBEUlZfTU9EVUxFX05BTUUJCSJ0ZzMiCiAjZGVmaW5lIFRHM19NQUpfTlVNCQkJMwotI2RlZmluZSBURzNfTUlOX05VTQkJCTExNQorI2RlZmluZSBURzNfTUlOX05VTQkJCTExNgogI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04JXAogCV9fc3RyaW5naWZ5KFRHM19NQUpfTlVNKSAiLiIgX19zdHJpbmdpZnkoVEczX01JTl9OVU0pCi0jZGVmaW5lIERSVl9NT0RVTEVfUkVMREFURQkiT2N0b2JlciAxNCwgMjAxMCIKKyNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFCSJEZWNlbWJlciAzLCAyMDEwIgogCiAjZGVmaW5lIFRHM19ERUZfTUFDX01PREUJMAogI2RlZmluZSBURzNfREVGX1JYX01PREUJCTAKQEAgLTE3NjksOSArMTc3MCw5IEBACiAKIAlpZiAodHAtPmxpbmtfY29uZmlnLmF1dG9uZWcgPT0gQVVUT05FR19FTkFCTEUgJiYKIAkgICAgY3VycmVudF9saW5rX3VwID09IDEgJiYKLQkgICAgKHRwLT5saW5rX2NvbmZpZy5hY3RpdmVfc3BlZWQgPT0gU1BFRURfMTAwMCB8fAotCSAgICAgKHRwLT5saW5rX2NvbmZpZy5hY3RpdmVfc3BlZWQgPT0gU1BFRURfMTAwICYmCi0JICAgICAgdHAtPmxpbmtfY29uZmlnLmFjdGl2ZV9kdXBsZXggPT0gRFVQTEVYX0ZVTEwpKSkgeworCSAgICB0cC0+bGlua19jb25maWcuYWN0aXZlX2R1cGxleCA9PSBEVVBMRVhfRlVMTCAmJgorCSAgICAodHAtPmxpbmtfY29uZmlnLmFjdGl2ZV9zcGVlZCA9PSBTUEVFRF8xMDAgfHwKKwkgICAgIHRwLT5saW5rX2NvbmZpZy5hY3RpdmVfc3BlZWQgPT0gU1BFRURfMTAwMCkpIHsKIAkJdTMyIGVlZWN0bDsKIAogCQlpZiAodHAtPmxpbmtfY29uZmlnLmFjdGl2ZV9zcGVlZCA9PSBTUEVFRF8xMDAwKQpAQCAtMTc4MSw3ICsxNzgyLDggQEAKIAogCQl0dzMyKFRHM19DUE1VX0VFRV9DVFJMLCBlZWVjdGwpOwogCi0JCXRnM19waHlfY2w0NV9yZWFkKHRwLCAweDcsIFRHM19DTDQ1X0Q3X0VFRVJFU19TVEFULCAmdmFsKTsKKwkJdGczX3BoeV9jbDQ1X3JlYWQodHAsIE1ESU9fTU1EX0FOLAorCQkJCSAgVEczX0NMNDVfRDdfRUVFUkVTX1NUQVQsICZ2YWwpOwogCiAJCWlmICh2YWwgPT0gVEczX0NMNDVfRDdfRUVFUkVTX1NUQVRfTFBfMTAwMFQgfHwKIAkJICAgIHZhbCA9PSBURzNfQ0w0NV9EN19FRUVSRVNfU1RBVF9MUF8xMDBUWCkKQEAgLTI1NDksMzkgKzI1NTEsMzUgQEAKIAl0dzMyKE1BQ19UWF9CQUNLT0ZGX1NFRUQsIGFkZHJfaGlnaCk7CiB9CiAKLXN0YXRpYyBpbnQgdGczX3NldF9wb3dlcl9zdGF0ZShzdHJ1Y3QgdGczICp0cCwgcGNpX3Bvd2VyX3Qgc3RhdGUpCitzdGF0aWMgdm9pZCB0ZzNfZW5hYmxlX3JlZ2lzdGVyX2FjY2VzcyhzdHJ1Y3QgdGczICp0cCkKK3sKKwkvKgorCSAqIE1ha2Ugc3VyZSByZWdpc3RlciBhY2Nlc3NlcyAoaW5kaXJlY3Qgb3Igb3RoZXJ3aXNlKSB3aWxsIGZ1bmN0aW9uCisJICogY29ycmVjdGx5LgorCSAqLworCXBjaV93cml0ZV9jb25maWdfZHdvcmQodHAtPnBkZXYsCisJCQkgICAgICAgVEczUENJX01JU0NfSE9TVF9DVFJMLCB0cC0+bWlzY19ob3N0X2N0cmwpOworfQorCitzdGF0aWMgaW50IHRnM19wb3dlcl91cChzdHJ1Y3QgdGczICp0cCkKK3sKKwl0ZzNfZW5hYmxlX3JlZ2lzdGVyX2FjY2Vzcyh0cCk7CisKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHRwLT5wZGV2LCBQQ0lfRDApOworCisJLyogU3dpdGNoIG91dCBvZiBWYXV4IGlmIGl0IGlzIGEgTklDICovCisJaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfSVNfTklDKQorCQl0dzMyX3dhaXRfZihHUkNfTE9DQUxfQ1RSTCwgdHAtPmdyY19sb2NhbF9jdHJsLCAxMDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGczX3Bvd2VyX2Rvd25fcHJlcGFyZShzdHJ1Y3QgdGczICp0cCkKIHsKIAl1MzIgbWlzY19ob3N0X2N0cmw7CiAJYm9vbCBkZXZpY2Vfc2hvdWxkX3dha2UsIGRvX2xvd19wb3dlcjsKIAotCS8qIE1ha2Ugc3VyZSByZWdpc3RlciBhY2Nlc3NlcyAoaW5kaXJlY3Qgb3Igb3RoZXJ3aXNlKQotCSAqIHdpbGwgZnVuY3Rpb24gY29ycmVjdGx5LgotCSAqLwotCXBjaV93cml0ZV9jb25maWdfZHdvcmQodHAtPnBkZXYsCi0JCQkgICAgICAgVEczUENJX01JU0NfSE9TVF9DVFJMLAotCQkJICAgICAgIHRwLT5taXNjX2hvc3RfY3RybCk7Ci0KLQlzd2l0Y2ggKHN0YXRlKSB7Ci0JY2FzZSBQQ0lfRDA6Ci0JCXBjaV9lbmFibGVfd2FrZSh0cC0+cGRldiwgc3RhdGUsIGZhbHNlKTsKLQkJcGNpX3NldF9wb3dlcl9zdGF0ZSh0cC0+cGRldiwgUENJX0QwKTsKLQotCQkvKiBTd2l0Y2ggb3V0IG9mIFZhdXggaWYgaXQgaXMgYSBOSUMgKi8KLQkJaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfSVNfTklDKQotCQkJdHczMl93YWl0X2YoR1JDX0xPQ0FMX0NUUkwsIHRwLT5ncmNfbG9jYWxfY3RybCwgMTAwKTsKLQotCQlyZXR1cm4gMDsKLQotCWNhc2UgUENJX0QxOgotCWNhc2UgUENJX0QyOgotCWNhc2UgUENJX0QzaG90OgotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCW5ldGRldl9lcnIodHAtPmRldiwgIkludmFsaWQgcG93ZXIgc3RhdGUgKEQlZCkgcmVxdWVzdGVkXG4iLAotCQkJICAgc3RhdGUpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9CisJdGczX2VuYWJsZV9yZWdpc3Rlcl9hY2Nlc3ModHApOwogCiAJLyogUmVzdG9yZSB0aGUgQ0xLUkVRIHNldHRpbmcuICovCiAJaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfQ0xLUkVRX0JVRykgewpAQCAtMjYwMCw4ICsyNTk4LDcgQEAKIAl0dzMyKFRHM1BDSV9NSVNDX0hPU1RfQ1RSTCwKIAkgICAgIG1pc2NfaG9zdF9jdHJsIHwgTUlTQ19IT1NUX0NUUkxfTUFTS19QQ0lfSU5UKTsKIAotCWRldmljZV9zaG91bGRfd2FrZSA9IHBjaV9wbWVfY2FwYWJsZSh0cC0+cGRldiwgc3RhdGUpICYmCi0JCQkgICAgIGRldmljZV9tYXlfd2FrZXVwKCZ0cC0+cGRldi0+ZGV2KSAmJgorCWRldmljZV9zaG91bGRfd2FrZSA9IGRldmljZV9tYXlfd2FrZXVwKCZ0cC0+cGRldi0+ZGV2KSAmJgogCQkJICAgICAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1dPTF9FTkFCTEUpOwogCiAJaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfVVNFX1BIWUxJQikgewpAQCAtMjcyOCwxMiArMjcyNSwxMCBAQAogCQkgICAgICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX0VOQUJMRV9BUEUpKSkKIAkJCW1hY19tb2RlIHw9IE1BQ19NT0RFX0tFRVBfRlJBTUVfSU5fV09MOwogCi0JCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX0VOQUJMRV9BUEUpIHsKLQkJCW1hY19tb2RlIHw9IHRwLT5tYWNfbW9kZSAmCi0JCQkJICAgIChNQUNfTU9ERV9BUEVfVFhfRU4gfCBNQUNfTU9ERV9BUEVfUlhfRU4pOwotCQkJaWYgKG1hY19tb2RlICYgTUFDX01PREVfQVBFX1RYX0VOKQotCQkJCW1hY19tb2RlIHw9IE1BQ19NT0RFX1RERV9FTkFCTEU7Ci0JCX0KKwkJaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfRU5BQkxFX0FQRSkKKwkJCW1hY19tb2RlIHw9IE1BQ19NT0RFX0FQRV9UWF9FTiB8CisJCQkJICAgIE1BQ19NT0RFX0FQRV9SWF9FTiB8CisJCQkJICAgIE1BQ19NT0RFX1RERV9FTkFCTEU7CiAKIAkJdHczMl9mKE1BQ19NT0RFLCBtYWNfbW9kZSk7CiAJCXVkZWxheSgxMDApOwpAQCAtMjgyMywxNSArMjgxOCwxNyBAQAogCiAJdGczX3dyaXRlX3NpZ19wb3N0X3Jlc2V0KHRwLCBSRVNFVF9LSU5EX1NIVVRET1dOKTsKIAotCWlmIChkZXZpY2Vfc2hvdWxkX3dha2UpCi0JCXBjaV9lbmFibGVfd2FrZSh0cC0+cGRldiwgc3RhdGUsIHRydWUpOwotCi0JLyogRmluYWxseSwgc2V0IHRoZSBuZXcgcG93ZXIgc3RhdGUuICovCi0JcGNpX3NldF9wb3dlcl9zdGF0ZSh0cC0+cGRldiwgc3RhdGUpOwotCiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIHRnM19wb3dlcl9kb3duKHN0cnVjdCB0ZzMgKnRwKQoreworCXRnM19wb3dlcl9kb3duX3ByZXBhcmUodHApOworCisJcGNpX3dha2VfZnJvbV9kMyh0cC0+cGRldiwgdHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1dPTF9FTkFCTEUpOworCXBjaV9zZXRfcG93ZXJfc3RhdGUodHAtPnBkZXYsIFBDSV9EM2hvdCk7Cit9CisKIHN0YXRpYyB2b2lkIHRnM19hdXhfc3RhdF90b19zcGVlZF9kdXBsZXgoc3RydWN0IHRnMyAqdHAsIHUzMiB2YWwsIHUxNiAqc3BlZWQsIHU4ICpkdXBsZXgpCiB7CiAJc3dpdGNoICh2YWwgJiBNSUlfVEczX0FVWF9TVEFUX1NQRE1BU0spIHsKQEAgLTI5NjksNyArMjk2Niw3IEBACiAJfQogCiAJaWYgKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX0VFRV9DQVApIHsKLQkJdTMyIHZhbCA9IDA7CisJCXUzMiB2YWw7CiAKIAkJdHczMihURzNfQ1BNVV9FRUVfTU9ERSwKIAkJICAgICB0cjMyKFRHM19DUE1VX0VFRV9NT0RFKSAmIH5URzNfQ1BNVV9FRUVNRF9MUElfRU5BQkxFKTsKQEAgLTI5ODYsMTkgKzI5ODMsMTggQEAKIAkJCXRnM19waHlkc3Bfd3JpdGUodHAsIE1JSV9URzNfRFNQX0NIMzRUUDIsCiAJCQkJCSB2YWwgfCBNSUlfVEczX0RTUF9DSDM0VFAyX0hJQlcwMSk7CiAKKwkJdmFsID0gMDsKIAkJaWYgKHRwLT5saW5rX2NvbmZpZy5hdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFKSB7CiAJCQkvKiBBZHZlcnRpc2UgMTAwLUJhc2VUWCBFRUUgYWJpbGl0eSAqLwogCQkJaWYgKHRwLT5saW5rX2NvbmZpZy5hZHZlcnRpc2luZyAmCi0JCQkgICAgKEFEVkVSVElTRURfMTAwYmFzZVRfSGFsZiB8Ci0JCQkgICAgIEFEVkVSVElTRURfMTAwYmFzZVRfRnVsbCkpCi0JCQkJdmFsIHw9IFRHM19DTDQ1X0Q3X0VFRUFEVl9DQVBfMTAwVFg7CisJCQkgICAgQURWRVJUSVNFRF8xMDBiYXNlVF9GdWxsKQorCQkJCXZhbCB8PSBNRElPX0FOX0VFRV9BRFZfMTAwVFg7CiAJCQkvKiBBZHZlcnRpc2UgMTAwMC1CYXNlVCBFRUUgYWJpbGl0eSAqLwogCQkJaWYgKHRwLT5saW5rX2NvbmZpZy5hZHZlcnRpc2luZyAmCi0JCQkgICAgKEFEVkVSVElTRURfMTAwMGJhc2VUX0hhbGYgfAotCQkJICAgICBBRFZFUlRJU0VEXzEwMDBiYXNlVF9GdWxsKSkKLQkJCQl2YWwgfD0gVEczX0NMNDVfRDdfRUVFQURWX0NBUF8xMDAwVDsKKwkJCSAgICBBRFZFUlRJU0VEXzEwMDBiYXNlVF9GdWxsKQorCQkJCXZhbCB8PSBNRElPX0FOX0VFRV9BRFZfMTAwMFQ7CiAJCX0KLQkJdGczX3BoeV9jbDQ1X3dyaXRlKHRwLCAweDcsIFRHM19DTDQ1X0Q3X0VFRUFEVl9DQVAsIHZhbCk7CisJCXRnM19waHlfY2w0NV93cml0ZSh0cCwgTURJT19NTURfQU4sIE1ESU9fQU5fRUVFX0FEViwgdmFsKTsKIAogCQkvKiBUdXJuIG9mZiBTTV9EU1AgY2xvY2suICovCiAJCXZhbCA9IE1JSV9URzNfQVVYQ1RMX1NIRFdTRUxfQVVYQ1RMIHwKQEAgLTU3NjMsNyArNTc1OSw3IEBACiAJZG1hX3VubWFwX2FkZHJfc2V0KCZ0bmFwaS0+dHhfYnVmZmVyc1tlbnRyeV0sIG1hcHBpbmcsIG1hcHBpbmcpOwogCiAJaWYgKCh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX1VTRV9KVU1CT19CREZMQUcpICYmCi0JICAgICFtc3MgJiYgc2tiLT5sZW4gPiBFVEhfREFUQV9MRU4pCisJICAgICFtc3MgJiYgc2tiLT5sZW4gPiBWTEFOX0VUSF9GUkFNRV9MRU4pCiAJCWJhc2VfZmxhZ3MgfD0gVFhEX0ZMQUdfSk1CX1BLVDsKIAogCXRnM19zZXRfdHhkKHRuYXBpLCBlbnRyeSwgbWFwcGluZywgbGVuLCBiYXNlX2ZsYWdzLApAQCAtNTk5Nyw3ICs1OTkzLDcgQEAKICNlbmRpZgogCiAJaWYgKCh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX1VTRV9KVU1CT19CREZMQUcpICYmCi0JICAgICFtc3MgJiYgc2tiLT5sZW4gPiBFVEhfREFUQV9MRU4pCisJICAgICFtc3MgJiYgc2tiLT5sZW4gPiBWTEFOX0VUSF9GUkFNRV9MRU4pCiAJCWJhc2VfZmxhZ3MgfD0gVFhEX0ZMQUdfSk1CX1BLVDsKIAogCWxlbiA9IHNrYl9oZWFkbGVuKHNrYik7CkBAIC02MzM5LDEzICs2MzM1LDEzIEBACiAJa2ZyZWUodHByLT5yeF9qbWJfYnVmZmVycyk7CiAJdHByLT5yeF9qbWJfYnVmZmVycyA9IE5VTEw7CiAJaWYgKHRwci0+cnhfc3RkKSB7Ci0JCXBjaV9mcmVlX2NvbnNpc3RlbnQodHAtPnBkZXYsIFRHM19SWF9TVERfUklOR19CWVRFUyh0cCksCi0JCQkJICAgIHRwci0+cnhfc3RkLCB0cHItPnJ4X3N0ZF9tYXBwaW5nKTsKKwkJZG1hX2ZyZWVfY29oZXJlbnQoJnRwLT5wZGV2LT5kZXYsIFRHM19SWF9TVERfUklOR19CWVRFUyh0cCksCisJCQkJICB0cHItPnJ4X3N0ZCwgdHByLT5yeF9zdGRfbWFwcGluZyk7CiAJCXRwci0+cnhfc3RkID0gTlVMTDsKIAl9CiAJaWYgKHRwci0+cnhfam1iKSB7Ci0JCXBjaV9mcmVlX2NvbnNpc3RlbnQodHAtPnBkZXYsIFRHM19SWF9KTUJfUklOR19CWVRFUyh0cCksCi0JCQkJICAgIHRwci0+cnhfam1iLCB0cHItPnJ4X2ptYl9tYXBwaW5nKTsKKwkJZG1hX2ZyZWVfY29oZXJlbnQoJnRwLT5wZGV2LT5kZXYsIFRHM19SWF9KTUJfUklOR19CWVRFUyh0cCksCisJCQkJICB0cHItPnJ4X2ptYiwgdHByLT5yeF9qbWJfbWFwcGluZyk7CiAJCXRwci0+cnhfam1iID0gTlVMTDsKIAl9CiB9CkBAIC02MzU4LDggKzYzNTQsMTAgQEAKIAlpZiAoIXRwci0+cnhfc3RkX2J1ZmZlcnMpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JdHByLT5yeF9zdGQgPSBwY2lfYWxsb2NfY29uc2lzdGVudCh0cC0+cGRldiwgVEczX1JYX1NURF9SSU5HX0JZVEVTKHRwKSwKLQkJCQkJICAgJnRwci0+cnhfc3RkX21hcHBpbmcpOworCXRwci0+cnhfc3RkID0gZG1hX2FsbG9jX2NvaGVyZW50KCZ0cC0+cGRldi0+ZGV2LAorCQkJCQkgVEczX1JYX1NURF9SSU5HX0JZVEVTKHRwKSwKKwkJCQkJICZ0cHItPnJ4X3N0ZF9tYXBwaW5nLAorCQkJCQkgR0ZQX0tFUk5FTCk7CiAJaWYgKCF0cHItPnJ4X3N0ZCkKIAkJZ290byBlcnJfb3V0OwogCkBAIC02MzcwLDkgKzYzNjgsMTAgQEAKIAkJaWYgKCF0cHItPnJ4X2ptYl9idWZmZXJzKQogCQkJZ290byBlcnJfb3V0OwogCi0JCXRwci0+cnhfam1iID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQodHAtPnBkZXYsCi0JCQkJCQkgICBURzNfUlhfSk1CX1JJTkdfQllURVModHApLAotCQkJCQkJICAgJnRwci0+cnhfam1iX21hcHBpbmcpOworCQl0cHItPnJ4X2ptYiA9IGRtYV9hbGxvY19jb2hlcmVudCgmdHAtPnBkZXYtPmRldiwKKwkJCQkJCSBURzNfUlhfSk1CX1JJTkdfQllURVModHApLAorCQkJCQkJICZ0cHItPnJ4X2ptYl9tYXBwaW5nLAorCQkJCQkJIEdGUF9LRVJORUwpOwogCQlpZiAoIXRwci0+cnhfam1iKQogCQkJZ290byBlcnJfb3V0OwogCX0KQEAgLTY0OTEsNyArNjQ5MCw3IEBACiAJCXN0cnVjdCB0ZzNfbmFwaSAqdG5hcGkgPSAmdHAtPm5hcGlbaV07CiAKIAkJaWYgKHRuYXBpLT50eF9yaW5nKSB7Ci0JCQlwY2lfZnJlZV9jb25zaXN0ZW50KHRwLT5wZGV2LCBURzNfVFhfUklOR19CWVRFUywKKwkJCWRtYV9mcmVlX2NvaGVyZW50KCZ0cC0+cGRldi0+ZGV2LCBURzNfVFhfUklOR19CWVRFUywKIAkJCQl0bmFwaS0+dHhfcmluZywgdG5hcGktPnR4X2Rlc2NfbWFwcGluZyk7CiAJCQl0bmFwaS0+dHhfcmluZyA9IE5VTEw7CiAJCX0KQEAgLTY1MDAsMjUgKzY0OTksMjYgQEAKIAkJdG5hcGktPnR4X2J1ZmZlcnMgPSBOVUxMOwogCiAJCWlmICh0bmFwaS0+cnhfcmNiKSB7Ci0JCQlwY2lfZnJlZV9jb25zaXN0ZW50KHRwLT5wZGV2LCBURzNfUlhfUkNCX1JJTkdfQllURVModHApLAotCQkJCQkgICAgdG5hcGktPnJ4X3JjYiwKLQkJCQkJICAgIHRuYXBpLT5yeF9yY2JfbWFwcGluZyk7CisJCQlkbWFfZnJlZV9jb2hlcmVudCgmdHAtPnBkZXYtPmRldiwKKwkJCQkJICBURzNfUlhfUkNCX1JJTkdfQllURVModHApLAorCQkJCQkgIHRuYXBpLT5yeF9yY2IsCisJCQkJCSAgdG5hcGktPnJ4X3JjYl9tYXBwaW5nKTsKIAkJCXRuYXBpLT5yeF9yY2IgPSBOVUxMOwogCQl9CiAKIAkJdGczX3J4X3Byb2RyaW5nX2ZpbmkodHAsICZ0bmFwaS0+cHJvZHJpbmcpOwogCiAJCWlmICh0bmFwaS0+aHdfc3RhdHVzKSB7Ci0JCQlwY2lfZnJlZV9jb25zaXN0ZW50KHRwLT5wZGV2LCBURzNfSFdfU1RBVFVTX1NJWkUsCi0JCQkJCSAgICB0bmFwaS0+aHdfc3RhdHVzLAotCQkJCQkgICAgdG5hcGktPnN0YXR1c19tYXBwaW5nKTsKKwkJCWRtYV9mcmVlX2NvaGVyZW50KCZ0cC0+cGRldi0+ZGV2LCBURzNfSFdfU1RBVFVTX1NJWkUsCisJCQkJCSAgdG5hcGktPmh3X3N0YXR1cywKKwkJCQkJICB0bmFwaS0+c3RhdHVzX21hcHBpbmcpOwogCQkJdG5hcGktPmh3X3N0YXR1cyA9IE5VTEw7CiAJCX0KIAl9CiAKIAlpZiAodHAtPmh3X3N0YXRzKSB7Ci0JCXBjaV9mcmVlX2NvbnNpc3RlbnQodHAtPnBkZXYsIHNpemVvZihzdHJ1Y3QgdGczX2h3X3N0YXRzKSwKLQkJCQkgICAgdHAtPmh3X3N0YXRzLCB0cC0+c3RhdHNfbWFwcGluZyk7CisJCWRtYV9mcmVlX2NvaGVyZW50KCZ0cC0+cGRldi0+ZGV2LCBzaXplb2Yoc3RydWN0IHRnM19od19zdGF0cyksCisJCQkJICB0cC0+aHdfc3RhdHMsIHRwLT5zdGF0c19tYXBwaW5nKTsKIAkJdHAtPmh3X3N0YXRzID0gTlVMTDsKIAl9CiB9CkBAIC02NTMxLDkgKzY1MzEsMTAgQEAKIHsKIAlpbnQgaTsKIAotCXRwLT5od19zdGF0cyA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHRwLT5wZGV2LAotCQkJCQkgICAgc2l6ZW9mKHN0cnVjdCB0ZzNfaHdfc3RhdHMpLAotCQkJCQkgICAgJnRwLT5zdGF0c19tYXBwaW5nKTsKKwl0cC0+aHdfc3RhdHMgPSBkbWFfYWxsb2NfY29oZXJlbnQoJnRwLT5wZGV2LT5kZXYsCisJCQkJCSAgc2l6ZW9mKHN0cnVjdCB0ZzNfaHdfc3RhdHMpLAorCQkJCQkgICZ0cC0+c3RhdHNfbWFwcGluZywKKwkJCQkJICBHRlBfS0VSTkVMKTsKIAlpZiAoIXRwLT5od19zdGF0cykKIAkJZ290byBlcnJfb3V0OwogCkBAIC02NTQzLDkgKzY1NDQsMTAgQEAKIAkJc3RydWN0IHRnM19uYXBpICp0bmFwaSA9ICZ0cC0+bmFwaVtpXTsKIAkJc3RydWN0IHRnM19od19zdGF0dXMgKnNibGs7CiAKLQkJdG5hcGktPmh3X3N0YXR1cyA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHRwLT5wZGV2LAotCQkJCQkJCVRHM19IV19TVEFUVVNfU0laRSwKLQkJCQkJCQkmdG5hcGktPnN0YXR1c19tYXBwaW5nKTsKKwkJdG5hcGktPmh3X3N0YXR1cyA9IGRtYV9hbGxvY19jb2hlcmVudCgmdHAtPnBkZXYtPmRldiwKKwkJCQkJCSAgICAgIFRHM19IV19TVEFUVVNfU0laRSwKKwkJCQkJCSAgICAgICZ0bmFwaS0+c3RhdHVzX21hcHBpbmcsCisJCQkJCQkgICAgICBHRlBfS0VSTkVMKTsKIAkJaWYgKCF0bmFwaS0+aHdfc3RhdHVzKQogCQkJZ290byBlcnJfb3V0OwogCkBAIC02NTY2LDkgKzY1NjgsMTAgQEAKIAkJCWlmICghdG5hcGktPnR4X2J1ZmZlcnMpCiAJCQkJZ290byBlcnJfb3V0OwogCi0JCQl0bmFwaS0+dHhfcmluZyA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHRwLT5wZGV2LAotCQkJCQkJCSAgICAgIFRHM19UWF9SSU5HX0JZVEVTLAotCQkJCQkJICAgICAgICZ0bmFwaS0+dHhfZGVzY19tYXBwaW5nKTsKKwkJCXRuYXBpLT50eF9yaW5nID0gZG1hX2FsbG9jX2NvaGVyZW50KCZ0cC0+cGRldi0+ZGV2LAorCQkJCQkJCSAgICBURzNfVFhfUklOR19CWVRFUywKKwkJCQkJCQkmdG5hcGktPnR4X2Rlc2NfbWFwcGluZywKKwkJCQkJCQkgICAgR0ZQX0tFUk5FTCk7CiAJCQlpZiAoIXRuYXBpLT50eF9yaW5nKQogCQkJCWdvdG8gZXJyX291dDsKIAkJfQpAQCAtNjYwMSw5ICs2NjA0LDEwIEBACiAJCWlmICghaSAmJiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19FTkFCTEVfUlNTKSkKIAkJCWNvbnRpbnVlOwogCi0JCXRuYXBpLT5yeF9yY2IgPSBwY2lfYWxsb2NfY29uc2lzdGVudCh0cC0+cGRldiwKLQkJCQkJCSAgICAgVEczX1JYX1JDQl9SSU5HX0JZVEVTKHRwKSwKLQkJCQkJCSAgICAgJnRuYXBpLT5yeF9yY2JfbWFwcGluZyk7CisJCXRuYXBpLT5yeF9yY2IgPSBkbWFfYWxsb2NfY29oZXJlbnQoJnRwLT5wZGV2LT5kZXYsCisJCQkJCQkgICBURzNfUlhfUkNCX1JJTkdfQllURVModHApLAorCQkJCQkJICAgJnRuYXBpLT5yeF9yY2JfbWFwcGluZywKKwkJCQkJCSAgIEdGUF9LRVJORUwpOwogCQlpZiAoIXRuYXBpLT5yeF9yY2IpCiAJCQlnb3RvIGVycl9vdXQ7CiAKQEAgLTY5ODcsNyArNjk5MSw3IEBACiAKIAlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IEFTSUNfUkVWXzU3ODUpIHsKIAkJaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfUENJX0VYUFJFU1MpCi0JCQlwY2llX3NldF9yZWFkcnEodHAtPnBkZXYsIDQwOTYpOworCQkJcGNpZV9zZXRfcmVhZHJxKHRwLT5wZGV2LCB0cC0+cGNpZV9yZWFkcnEpOwogCQllbHNlIHsKIAkJCXBjaV93cml0ZV9jb25maWdfYnl0ZSh0cC0+cGRldiwgUENJX0NBQ0hFX0xJTkVfU0laRSwKIAkJCQkJICAgICAgdHAtPnBjaV9jYWNoZWxpbmVfc3opOwpAQCAtNzE4MSw3ICs3MTg1LDcgQEAKIAkJCQkgICAgICB0cC0+cGNpZV9jYXAgKyBQQ0lfRVhQX0RFVkNUTCwKIAkJCQkgICAgICB2YWwxNik7CiAKLQkJcGNpZV9zZXRfcmVhZHJxKHRwLT5wZGV2LCA0MDk2KTsKKwkJcGNpZV9zZXRfcmVhZHJxKHRwLT5wZGV2LCB0cC0+cGNpZV9yZWFkcnEpOwogCiAJCS8qIENsZWFyIGVycm9yIHN0YXR1cyAqLwogCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQodHAtPnBkZXYsCkBAIC03MjIyLDE5ICs3MjI2LDIxIEBACiAJCXR3MzIoVEczUENJX0NMT0NLX0NUUkwsIHRwLT5wY2lfY2xvY2tfY3RybCk7CiAJfQogCisJaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfRU5BQkxFX0FQRSkKKwkJdHAtPm1hY19tb2RlID0gTUFDX01PREVfQVBFX1RYX0VOIHwKKwkJCSAgICAgICBNQUNfTU9ERV9BUEVfUlhfRU4gfAorCQkJICAgICAgIE1BQ19NT0RFX1RERV9FTkFCTEU7CisKIAlpZiAodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfUEhZX1NFUkRFUykgewotCQl0cC0+bWFjX21vZGUgPSBNQUNfTU9ERV9QT1JUX01PREVfVEJJOwotCQl0dzMyX2YoTUFDX01PREUsIHRwLT5tYWNfbW9kZSk7CisJCXRwLT5tYWNfbW9kZSB8PSBNQUNfTU9ERV9QT1JUX01PREVfVEJJOworCQl2YWwgPSB0cC0+bWFjX21vZGU7CiAJfSBlbHNlIGlmICh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19NSUlfU0VSREVTKSB7Ci0JCXRwLT5tYWNfbW9kZSA9IE1BQ19NT0RFX1BPUlRfTU9ERV9HTUlJOwotCQl0dzMyX2YoTUFDX01PREUsIHRwLT5tYWNfbW9kZSk7Ci0JfSBlbHNlIGlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX0VOQUJMRV9BUEUpIHsKLQkJdHAtPm1hY19tb2RlICY9IChNQUNfTU9ERV9BUEVfVFhfRU4gfCBNQUNfTU9ERV9BUEVfUlhfRU4pOwotCQlpZiAodHAtPm1hY19tb2RlICYgTUFDX01PREVfQVBFX1RYX0VOKQotCQkJdHAtPm1hY19tb2RlIHw9IE1BQ19NT0RFX1RERV9FTkFCTEU7Ci0JCXR3MzJfZihNQUNfTU9ERSwgdHAtPm1hY19tb2RlKTsKKwkJdHAtPm1hY19tb2RlIHw9IE1BQ19NT0RFX1BPUlRfTU9ERV9HTUlJOworCQl2YWwgPSB0cC0+bWFjX21vZGU7CiAJfSBlbHNlCi0JCXR3MzJfZihNQUNfTU9ERSwgMCk7CisJCXZhbCA9IDA7CisKKwl0dzMyX2YoTUFDX01PREUsIHZhbCk7CiAJdWRlbGF5KDQwKTsKIAogCXRnM19hcGVfdW5sb2NrKHRwLCBURzNfQVBFX0xPQ0tfR1JDKTsKQEAgLTc4MDEsNiArNzgwNywzNyBAQAogCWlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfSU5JVF9DT01QTEVURSkKIAkJdGczX2Fib3J0X2h3KHRwLCAxKTsKIAorCS8qIEVuYWJsZSBNQUMgY29udHJvbCBvZiBMUEkgKi8KKwlpZiAodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfRUVFX0NBUCkgeworCQl0dzMyX2YoVEczX0NQTVVfRUVFX0xOS0lETF9DVFJMLAorCQkgICAgICAgVEczX0NQTVVfRUVFX0xOS0lETF9QQ0lFX05MMCB8CisJCSAgICAgICBURzNfQ1BNVV9FRUVfTE5LSURMX1VBUlRfSURMKTsKKworCQl0dzMyX2YoVEczX0NQTVVfRUVFX0NUUkwsCisJCSAgICAgICBURzNfQ1BNVV9FRUVfQ1RSTF9FWElUXzIwXzFfVVMpOworCisJCXZhbCA9IFRHM19DUE1VX0VFRU1EX0VSTFlfTDFfWElUX0RFVCB8CisJCSAgICAgIFRHM19DUE1VX0VFRU1EX0xQSV9JTl9UWCB8CisJCSAgICAgIFRHM19DUE1VX0VFRU1EX0xQSV9JTl9SWCB8CisJCSAgICAgIFRHM19DUE1VX0VFRU1EX0VFRV9FTkFCTEU7CisKKwkJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81NzE3KQorCQkJdmFsIHw9IFRHM19DUE1VX0VFRU1EX1NORF9JRFhfREVUX0VOOworCisJCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX0VOQUJMRV9BUEUpCisJCQl2YWwgfD0gVEczX0NQTVVfRUVFTURfQVBFX1RYX0RFVF9FTjsKKworCQl0dzMyX2YoVEczX0NQTVVfRUVFX01PREUsIHZhbCk7CisKKwkJdHczMl9mKFRHM19DUE1VX0VFRV9EQlRNUjEsCisJCSAgICAgICBURzNfQ1BNVV9EQlRNUjFfUENJRVhJVF8yMDQ3VVMgfAorCQkgICAgICAgVEczX0NQTVVfREJUTVIxX0xOS0lETEVfMjA0N1VTKTsKKworCQl0dzMyX2YoVEczX0NQTVVfRUVFX0RCVE1SMiwKKwkJICAgICAgIFRHM19DUE1VX0RCVE1SMV9BUEVfVFhfMjA0N1VTIHwKKwkJICAgICAgIFRHM19DUE1VX0RCVE1SMl9UWElEWEVRXzIwNDdVUyk7CisJfQorCiAJaWYgKHJlc2V0X3BoeSkKIAkJdGczX3BoeV9yZXNldCh0cCk7CiAKQEAgLTc4NjAsMTggKzc4OTcsMjEgQEAKIAkJdHczMihHUkNfTU9ERSwgZ3JjX21vZGUpOwogCX0KIAotCWlmICh0cC0+cGNpX2NoaXBfcmV2X2lkID09IENISVBSRVZfSURfNTc3NjVfQTApIHsKLQkJdTMyIGdyY19tb2RlID0gdHIzMihHUkNfTU9ERSk7CisJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzc2NSkgeworCQlpZiAodHAtPnBjaV9jaGlwX3Jldl9pZCA9PSBDSElQUkVWX0lEXzU3NzY1X0EwKSB7CisJCQl1MzIgZ3JjX21vZGUgPSB0cjMyKEdSQ19NT0RFKTsKIAotCQkvKiBBY2Nlc3MgdGhlIGxvd2VyIDFLIG9mIFBMIFBDSUUgYmxvY2sgcmVnaXN0ZXJzLiAqLwotCQl2YWwgPSBncmNfbW9kZSAmIH5HUkNfTU9ERV9QQ0lFX1BPUlRfTUFTSzsKLQkJdHczMihHUkNfTU9ERSwgdmFsIHwgR1JDX01PREVfUENJRV9QTF9TRUwpOworCQkJLyogQWNjZXNzIHRoZSBsb3dlciAxSyBvZiBQTCBQQ0lFIGJsb2NrIHJlZ2lzdGVycy4gKi8KKwkJCXZhbCA9IGdyY19tb2RlICYgfkdSQ19NT0RFX1BDSUVfUE9SVF9NQVNLOworCQkJdHczMihHUkNfTU9ERSwgdmFsIHwgR1JDX01PREVfUENJRV9QTF9TRUwpOwogCi0JCXZhbCA9IHRyMzIoVEczX1BDSUVfVExETFBMX1BPUlQgKyBURzNfUENJRV9QTF9MT19QSFlDVEw1KTsKLQkJdHczMihURzNfUENJRV9UTERMUExfUE9SVCArIFRHM19QQ0lFX1BMX0xPX1BIWUNUTDUsCi0JCSAgICAgdmFsIHwgVEczX1BDSUVfUExfTE9fUEhZQ1RMNV9ESVNfTDJDTEtSRVEpOworCQkJdmFsID0gdHIzMihURzNfUENJRV9UTERMUExfUE9SVCArCisJCQkJICAgVEczX1BDSUVfUExfTE9fUEhZQ1RMNSk7CisJCQl0dzMyKFRHM19QQ0lFX1RMRExQTF9QT1JUICsgVEczX1BDSUVfUExfTE9fUEhZQ1RMNSwKKwkJCSAgICAgdmFsIHwgVEczX1BDSUVfUExfTE9fUEhZQ1RMNV9ESVNfTDJDTEtSRVEpOwogCi0JCXR3MzIoR1JDX01PREUsIGdyY19tb2RlKTsKKwkJCXR3MzIoR1JDX01PREUsIGdyY19tb2RlKTsKKwkJfQogCiAJCXZhbCA9IHRyMzIoVEczX0NQTVVfTFNQRF8xME1CX0NMSyk7CiAJCXZhbCAmPSB+Q1BNVV9MU1BEXzEwTUJfTUFDQ0xLX01BU0s7CkBAIC03ODc5LDIyICs3OTE5LDYgQEAKIAkJdHczMihURzNfQ1BNVV9MU1BEXzEwTUJfQ0xLLCB2YWwpOwogCX0KIAotCS8qIEVuYWJsZSBNQUMgY29udHJvbCBvZiBMUEkgKi8KLQlpZiAodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfRUVFX0NBUCkgewotCQl0dzMyX2YoVEczX0NQTVVfRUVFX0xOS0lETF9DVFJMLAotCQkgICAgICAgVEczX0NQTVVfRUVFX0xOS0lETF9QQ0lFX05MMCB8Ci0JCSAgICAgICBURzNfQ1BNVV9FRUVfTE5LSURMX1VBUlRfSURMKTsKLQotCQl0dzMyX2YoVEczX0NQTVVfRUVFX0NUUkwsCi0JCSAgICAgICBURzNfQ1BNVV9FRUVfQ1RSTF9FWElUXzIwXzFfVVMpOwotCi0JCXR3MzJfZihURzNfQ1BNVV9FRUVfTU9ERSwKLQkJICAgICAgIFRHM19DUE1VX0VFRU1EX0VSTFlfTDFfWElUX0RFVCB8Ci0JCSAgICAgICBURzNfQ1BNVV9FRUVNRF9MUElfSU5fVFggfAotCQkgICAgICAgVEczX0NQTVVfRUVFTURfTFBJX0lOX1JYIHwKLQkJICAgICAgIFRHM19DUE1VX0VFRU1EX0VFRV9FTkFCTEUpOwotCX0KLQogCS8qIFRoaXMgd29ya3MgYXJvdW5kIGFuIGlzc3VlIHdpdGggQXRobG9uIGNoaXBzZXRzIG9uCiAJICogQjMgdGlnb24zIHNpbGljb24uICBUaGlzIGJpdCBoYXMgbm8gZWZmZWN0IG9uIGFueQogCSAqIG90aGVyIHJldmlzaW9uLiAgQnV0IGRvIG5vdCBzZXQgdGhpcyBvbiBQQ0kgRXhwcmVzcwpAQCAtODE2Miw4ICs4MTg2LDcgQEAKIAkJICAgICAgUkRNQUNfTU9ERV9GSUZPVVJVTl9FTkFCIHwgUkRNQUNfTU9ERV9GSUZPT1JFQURfRU5BQiB8CiAJCSAgICAgIFJETUFDX01PREVfTE5HUkVBRF9FTkFCKTsKIAotCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxNyB8fAotCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxOSkKKwlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTcpCiAJCXJkbWFjX21vZGUgfD0gUkRNQUNfTU9ERV9NVUxUX0RNQV9SRF9ESVM7CiAKIAlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3ODQgfHwKQEAgLTgyMDMsNiArODIyNiwxMCBAQAogCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc3ODAgfHwKIAkgICAgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfNTcxN19QTFVTKSkgewogCQl2YWwgPSB0cjMyKFRHM19SRE1BX1JTUlZDVFJMX1JFRyk7CisJCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxOSkgeworCQkJdmFsICY9IH5URzNfUkRNQV9SU1JWQ1RSTF9UWE1SR05fTUFTSzsKKwkJCXZhbCB8PSBURzNfUkRNQV9SU1JWQ1RSTF9UWE1SR05fMzIwQjsKKwkJfQogCQl0dzMyKFRHM19SRE1BX1JTUlZDVFJMX1JFRywKIAkJICAgICB2YWwgfCBURzNfUkRNQV9SU1JWQ1RSTF9GSUZPX09GTFdfRklYKTsKIAl9CkBAIC04MjgwLDcgKzgzMDcsNyBAQAogCX0KIAogCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX0VOQUJMRV9BUEUpCi0JCXRwLT5tYWNfbW9kZSAmPSBNQUNfTU9ERV9BUEVfVFhfRU4gfCBNQUNfTU9ERV9BUEVfUlhfRU47CisJCXRwLT5tYWNfbW9kZSA9IE1BQ19NT0RFX0FQRV9UWF9FTiB8IE1BQ19NT0RFX0FQRV9SWF9FTjsKIAllbHNlCiAJCXRwLT5tYWNfbW9kZSA9IDA7CiAJdHAtPm1hY19tb2RlIHw9IE1BQ19NT0RFX1RYU1RBVF9FTkFCTEUgfCBNQUNfTU9ERV9SWFNUQVRfRU5BQkxFIHwKQEAgLTkwMzEsOCArOTA1OCwxNCBAQAogCQlwY2lfZGlzYWJsZV9tc2l4KHRwLT5wZGV2KTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KLQlpZiAodHAtPmlycV9jbnQgPiAxKQorCisJaWYgKHRwLT5pcnFfY250ID4gMSkgewogCQl0cC0+dGczX2ZsYWdzMyB8PSBURzNfRkxHM19FTkFCTEVfUlNTOworCQlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTkpIHsKKwkJCXRwLT50ZzNfZmxhZ3MzIHw9IFRHM19GTEczX0VOQUJMRV9UU1M7CisJCQluZXRpZl9zZXRfcmVhbF9udW1fdHhfcXVldWVzKHRwLT5kZXYsIHRwLT5pcnFfY250IC0gMSk7CisJCX0KKwl9CiAKIAlyZXR1cm4gdHJ1ZTsKIH0KQEAgLTkxMDEsNyArOTEzNCw3IEBACiAKIAluZXRpZl9jYXJyaWVyX29mZih0cC0+ZGV2KTsKIAotCWVyciA9IHRnM19zZXRfcG93ZXJfc3RhdGUodHAsIFBDSV9EMCk7CisJZXJyID0gdGczX3Bvd2VyX3VwKHRwKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCkBAIC05MjY2LDcgKzkyOTksNyBAQAogCiAJdGczX2ZyZWVfY29uc2lzdGVudCh0cCk7CiAKLQl0ZzNfc2V0X3Bvd2VyX3N0YXRlKHRwLCBQQ0lfRDNob3QpOworCXRnM19wb3dlcl9kb3duKHRwKTsKIAogCW5ldGlmX2NhcnJpZXJfb2ZmKHRwLT5kZXYpOwogCkBAIC0xMTA2OCw3ICsxMTEwMSw3IEBACiAJc3RydWN0IHRnMyAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJaWYgKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX0lTX0xPV19QT1dFUikKLQkJdGczX3NldF9wb3dlcl9zdGF0ZSh0cCwgUENJX0QwKTsKKwkJdGczX3Bvd2VyX3VwKHRwKTsKIAogCW1lbXNldChkYXRhLCAwLCBzaXplb2YodTY0KSAqIFRHM19OVU1fVEVTVCk7CiAKQEAgLTExMTM2LDcgKzExMTY5LDcgQEAKIAkJCXRnM19waHlfc3RhcnQodHApOwogCX0KIAlpZiAodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfSVNfTE9XX1BPV0VSKQotCQl0ZzNfc2V0X3Bvd2VyX3N0YXRlKHRwLCBQQ0lfRDNob3QpOworCQl0ZzNfcG93ZXJfZG93bih0cCk7CiAKIH0KIApAQCAtMTI0MTEsOCArMTI0NDQsOSBAQAogCQlpZiAoY2ZnMiAmICgxIDw8IDE4KSkKIAkJCXRwLT5waHlfZmxhZ3MgfD0gVEczX1BIWUZMR19TRVJERVNfUFJFRU1QSEFTSVM7CiAKLQkJaWYgKCgoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3ODQgJiYKLQkJICAgICAgR0VUX0NISVBfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IENISVBSRVZfNTc4NF9BWCkpICYmCisJCWlmICgoKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfNTcxN19QTFVTKSB8fAorCQkgICAgKChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc4NCAmJgorCQkgICAgICBHRVRfQ0hJUF9SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgIT0gQ0hJUFJFVl81Nzg0X0FYKSkpICYmCiAJCSAgICAoY2ZnMiAmIE5JQ19TUkFNX0RBVEFfQ0ZHXzJfQVBEX0VOKSkKIAkJCXRwLT5waHlfZmxhZ3MgfD0gVEczX1BIWUZMR19FTkFCTEVfQVBEOwogCkBAIC0xMjU0OCw5ICsxMjU4MiwxMSBAQAogCQl9CiAJfQogCi0JaWYgKHRwLT5wZGV2LT5kZXZpY2UgPT0gVEczUENJX0RFVklDRV9USUdPTjNfNTcxOCB8fAotCSAgICAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NzY1ICYmCi0JICAgICB0cC0+cGNpX2NoaXBfcmV2X2lkICE9IENISVBSRVZfSURfNTc3NjVfQTApKQorCWlmICghKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX0FOWV9TRVJERVMpICYmCisJICAgICgodHAtPnBkZXYtPmRldmljZSA9PSBURzNQQ0lfREVWSUNFX1RJR09OM181NzE4ICYmCisJICAgICAgdHAtPnBjaV9jaGlwX3Jldl9pZCAhPSBDSElQUkVWX0lEXzU3MTdfQTApIHx8CisJICAgICAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NzY1ICYmCisJICAgICAgdHAtPnBjaV9jaGlwX3Jldl9pZCAhPSBDSElQUkVWX0lEXzU3NzY1X0EwKSkpCiAJCXRwLT5waHlfZmxhZ3MgfD0gVEczX1BIWUZMR19FRUVfQ0FQOwogCiAJaWYgKCEodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfQU5ZX1NFUkRFUykgJiYKQEAgLTEzMDQ3LDE3ICsxMzA4MywxNSBAQAogCQlyZXR1cm4gNTEyOwogfQogCitERUZJTkVfUENJX0RFVklDRV9UQUJMRSh3cml0ZV9yZW9yZGVyX2NoaXBzZXRzKSA9IHsKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BTUQsIFBDSV9ERVZJQ0VfSURfQU1EX0ZFX0dBVEVfNzAwQykgfSwKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BTUQsIFBDSV9ERVZJQ0VfSURfQU1EXzgxMzFfQlJJREdFKSB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1ZJQSwgUENJX0RFVklDRV9JRF9WSUFfODM4NV8wKSB9LAorCXsgfSwKK307CisKIHN0YXRpYyBpbnQgX19kZXZpbml0IHRnM19nZXRfaW52YXJpYW50cyhzdHJ1Y3QgdGczICp0cCkKIHsKLQlzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgd3JpdGVfcmVvcmRlcl9jaGlwc2V0c1tdID0gewotCQl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BTUQsCi0JCQkgICAgIFBDSV9ERVZJQ0VfSURfQU1EX0ZFX0dBVEVfNzAwQykgfSwKLQkJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQU1ELAotCQkJICAgICBQQ0lfREVWSUNFX0lEX0FNRF84MTMxX0JSSURHRSkgfSwKLQkJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfVklBLAotCQkJICAgICBQQ0lfREVWSUNFX0lEX1ZJQV84Mzg1XzApIH0sCi0JCXsgfSwKLQl9OwogCXUzMiBtaXNjX2N0cmxfcmVnOwogCXUzMiBwY2lfc3RhdGVfcmVnLCBncmNfbWlzY19jZmc7CiAJdTMyIHZhbDsKQEAgLTEzMzU5LDcgKzEzMzkzLDQ1IEBACiAKIAkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfUENJX0VYUFJFU1M7CiAKLQkJcGNpZV9zZXRfcmVhZHJxKHRwLT5wZGV2LCA0MDk2KTsKKwkJdHAtPnBjaWVfcmVhZHJxID0gNDA5NjsKKwkJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE5KSB7CisJCQl1MTYgd29yZDsKKworCQkJcGNpX3JlYWRfY29uZmlnX3dvcmQodHAtPnBkZXYsCisJCQkJCSAgICAgdHAtPnBjaWVfY2FwICsgUENJX0VYUF9MTktTVEEsCisJCQkJCSAgICAgJndvcmQpOworCQkJc3dpdGNoICh3b3JkICYgUENJX0VYUF9MTktTVEFfQ0xTKSB7CisJCQljYXNlIFBDSV9FWFBfTE5LU1RBX0NMU18yXzVHQjoKKwkJCQl3b3JkICY9IFBDSV9FWFBfTE5LU1RBX05MVzsKKwkJCQl3b3JkID4+PSBQQ0lfRVhQX0xOS1NUQV9OTFdfU0hJRlQ7CisJCQkJc3dpdGNoICh3b3JkKSB7CisJCQkJY2FzZSAyOgorCQkJCQl0cC0+cGNpZV9yZWFkcnEgPSAyMDQ4OworCQkJCQlicmVhazsKKwkJCQljYXNlIDQ6CisJCQkJCXRwLT5wY2llX3JlYWRycSA9IDEwMjQ7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJY2FzZSBQQ0lfRVhQX0xOS1NUQV9DTFNfNV8wR0I6CisJCQkJd29yZCAmPSBQQ0lfRVhQX0xOS1NUQV9OTFc7CisJCQkJd29yZCA+Pj0gUENJX0VYUF9MTktTVEFfTkxXX1NISUZUOworCQkJCXN3aXRjaCAod29yZCkgeworCQkJCWNhc2UgMToKKwkJCQkJdHAtPnBjaWVfcmVhZHJxID0gMjA0ODsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAyOgorCQkJCQl0cC0+cGNpZV9yZWFkcnEgPSAxMDI0OworCQkJCQlicmVhazsKKwkJCQljYXNlIDQ6CisJCQkJCXRwLT5wY2llX3JlYWRycSA9IDUxMjsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisKKwkJcGNpZV9zZXRfcmVhZHJxKHRwLT5wZGV2LCB0cC0+cGNpZV9yZWFkcnEpOwogCiAJCXBjaV9yZWFkX2NvbmZpZ193b3JkKHRwLT5wZGV2LAogCQkJCSAgICAgdHAtPnBjaWVfY2FwICsgUENJX0VYUF9MTktDVEwsCkBAIC0xMzU0Niw3ICsxMzYxOCw3IEBACiAJICAgICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczXzU3MTdfUExVUykpCiAJCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfQ1BNVV9QUkVTRU5UOwogCi0JLyogU2V0IHVwIHRwLT5ncmNfbG9jYWxfY3RybCBiZWZvcmUgY2FsbGluZyB0ZzNfc2V0X3Bvd2VyX3N0YXRlKCkuCisJLyogU2V0IHVwIHRwLT5ncmNfbG9jYWxfY3RybCBiZWZvcmUgY2FsbGluZyB0Z19wb3dlcl91cCgpLgogCSAqIEdQSU8xIGRyaXZlbiBoaWdoIHdpbGwgYnJpbmcgNTcwMCdzIGV4dGVybmFsIFBIWSBvdXQgb2YgcmVzZXQuCiAJICogSXQgaXMgYWxzbyB1c2VkIGFzIGVlcHJvbSB3cml0ZSBwcm90ZWN0IG9uIExPTXMuCiAJICovCkBAIC0xMzU3Nyw3ICsxMzY0OSw3IEBACiAJfQogCiAJLyogRm9yY2UgdGhlIGNoaXAgaW50byBEMC4gKi8KLQllcnIgPSB0ZzNfc2V0X3Bvd2VyX3N0YXRlKHRwLCBQQ0lfRDApOworCWVyciA9IHRnM19wb3dlcl91cCh0cCk7CiAJaWYgKGVycikgewogCQlkZXZfZXJyKCZ0cC0+cGRldi0+ZGV2LCAiVHJhbnNpdGlvbiB0byBEMCBmYWlsZWRcbiIpOwogCQlyZXR1cm4gZXJyOwpAQCAtMTM3MjIsOCArMTM3OTQsNyBAQAogCiAJLyogUHJlc2VydmUgdGhlIEFQRSBNQUNfTU9ERSBiaXRzICovCiAJaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfRU5BQkxFX0FQRSkKLQkJdHAtPm1hY19tb2RlID0gdHIzMihNQUNfTU9ERSkgfAotCQkJICAgICAgIE1BQ19NT0RFX0FQRV9UWF9FTiB8IE1BQ19NT0RFX0FQRV9SWF9FTjsKKwkJdHAtPm1hY19tb2RlID0gTUFDX01PREVfQVBFX1RYX0VOIHwgTUFDX01PREVfQVBFX1JYX0VOOwogCWVsc2UKIAkJdHAtPm1hY19tb2RlID0gVEczX0RFRl9NQUNfTU9ERTsKIApAQCAtMTQxNTMsMTMgKzE0MjI0LDE5IEBACiAKICNkZWZpbmUgVEVTVF9CVUZGRVJfU0laRQkweDIwMDAKIAorREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoZG1hX3dhaXRfc3RhdGVfY2hpcHNldHMpID0geworCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FQUExFLCBQQ0lfREVWSUNFX0lEX0FQUExFX1VOSV9OX1BDSTE1KSB9LAorCXsgfSwKK307CisKIHN0YXRpYyBpbnQgX19kZXZpbml0IHRnM190ZXN0X2RtYShzdHJ1Y3QgdGczICp0cCkKIHsKIAlkbWFfYWRkcl90IGJ1Zl9kbWE7CiAJdTMyICpidWYsIHNhdmVkX2RtYV9yd2N0cmw7CiAJaW50IHJldCA9IDA7CiAKLQlidWYgPSBwY2lfYWxsb2NfY29uc2lzdGVudCh0cC0+cGRldiwgVEVTVF9CVUZGRVJfU0laRSwgJmJ1Zl9kbWEpOworCWJ1ZiA9IGRtYV9hbGxvY19jb2hlcmVudCgmdHAtPnBkZXYtPmRldiwgVEVTVF9CVUZGRVJfU0laRSwKKwkJCQkgJmJ1Zl9kbWEsIEdGUF9LRVJORUwpOwogCWlmICghYnVmKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0X25vZnJlZTsKQEAgLTE0MzIxLDExICsxNDM5OCw2IEBACiAJfQogCWlmICgodHAtPmRtYV9yd2N0cmwgJiBETUFfUldDVFJMX1dSSVRFX0JORFJZX01BU0spICE9CiAJICAgIERNQV9SV0NUUkxfV1JJVEVfQk5EUllfMTYpIHsKLQkJc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGRtYV93YWl0X3N0YXRlX2NoaXBzZXRzW10gPSB7Ci0JCQl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BUFBMRSwKLQkJCQkgICAgIFBDSV9ERVZJQ0VfSURfQVBQTEVfVU5JX05fUENJMTUpIH0sCi0JCQl7IH0sCi0JCX07CiAKIAkJLyogRE1BIHRlc3QgcGFzc2VkIHdpdGhvdXQgYWRqdXN0aW5nIERNQSBib3VuZGFyeSwKIAkJICogbm93IGxvb2sgZm9yIGNoaXBzZXRzIHRoYXQgYXJlIGtub3duIHRvIGV4cG9zZSB0aGUKQEAgLTE0MzQzLDcgKzE0NDE1LDcgQEAKIAl9CiAKIG91dDoKLQlwY2lfZnJlZV9jb25zaXN0ZW50KHRwLT5wZGV2LCBURVNUX0JVRkZFUl9TSVpFLCBidWYsIGJ1Zl9kbWEpOworCWRtYV9mcmVlX2NvaGVyZW50KCZ0cC0+cGRldi0+ZGV2LCBURVNUX0JVRkZFUl9TSVpFLCBidWYsIGJ1Zl9kbWEpOwogb3V0X25vZnJlZToKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTQ5NTcsNyArMTUwMjksNyBAQAogCQlpZiAodHAtPmZ3KQogCQkJcmVsZWFzZV9maXJtd2FyZSh0cC0+ZncpOwogCi0JCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisJCWNhbmNlbF93b3JrX3N5bmMoJnRwLT5yZXNldF90YXNrKTsKIAogCQlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19VU0VfUEhZTElCKSB7CiAJCQl0ZzNfcGh5X2ZpbmkodHApOwpAQCAtMTQ5ODAsMjMgKzE1MDUyLDE4IEBACiAJfQogfQogCi1zdGF0aWMgaW50IHRnM19zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCisjaWZkZWYgQ09ORklHX1BNX1NMRUVQCitzdGF0aWMgaW50IHRnM19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKIHsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZGV2aWNlKTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCB0ZzMgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlwY2lfcG93ZXJfdCB0YXJnZXRfc3RhdGU7CiAJaW50IGVycjsKIAotCS8qIFBDSSByZWdpc3RlciA0IG5lZWRzIHRvIGJlIHNhdmVkIHdoZXRoZXIgbmV0aWZfcnVubmluZygpIG9yIG5vdC4KLQkgKiBNU0kgYWRkcmVzcyBhbmQgZGF0YSBuZWVkIHRvIGJlIHNhdmVkIGlmIHVzaW5nIE1TSSBhbmQKLQkgKiBuZXRpZl9ydW5uaW5nKCkuCi0JICovCi0JcGNpX3NhdmVfc3RhdGUocGRldik7Ci0KIAlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKIAkJcmV0dXJuIDA7CiAKLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCWZsdXNoX3dvcmtfc3luYygmdHAtPnJlc2V0X3Rhc2spOwogCXRnM19waHlfc3RvcCh0cCk7CiAJdGczX25ldGlmX3N0b3AodHApOwogCkBAIC0xNTAxMyw5ICsxNTA4MCw3IEBACiAJdHAtPnRnM19mbGFncyAmPSB+VEczX0ZMQUdfSU5JVF9DT01QTEVURTsKIAl0ZzNfZnVsbF91bmxvY2sodHApOwogCi0JdGFyZ2V0X3N0YXRlID0gcGRldi0+cG1fY2FwID8gcGNpX3RhcmdldF9zdGF0ZShwZGV2KSA6IFBDSV9EM2hvdDsKLQotCWVyciA9IHRnM19zZXRfcG93ZXJfc3RhdGUodHAsIHRhcmdldF9zdGF0ZSk7CisJZXJyID0gdGczX3Bvd2VyX2Rvd25fcHJlcGFyZSh0cCk7CiAJaWYgKGVycikgewogCQlpbnQgZXJyMjsKIApAQCAtMTUwNDIsMjEgKzE1MTA3LDE2IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCB0ZzNfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQorc3RhdGljIGludCB0ZzNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKIHsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZGV2aWNlKTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCB0ZzMgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgZXJyOwogCi0JcGNpX3Jlc3RvcmVfc3RhdGUodHAtPnBkZXYpOwotCiAJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCiAJCXJldHVybiAwOwogCi0JZXJyID0gdGczX3NldF9wb3dlcl9zdGF0ZSh0cCwgUENJX0QwKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCiAJbmV0aWZfZGV2aWNlX2F0dGFjaChkZXYpOwogCiAJdGczX2Z1bGxfbG9jayh0cCwgMCk7CkBAIC0xNTA4MCwxMyArMTUxNDAsMjEgQEAKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgU0lNUExFX0RFVl9QTV9PUFModGczX3BtX29wcywgdGczX3N1c3BlbmQsIHRnM19yZXN1bWUpOworI2RlZmluZSBURzNfUE1fT1BTICgmdGczX3BtX29wcykKKworI2Vsc2UKKworI2RlZmluZSBURzNfUE1fT1BTIE5VTEwKKworI2VuZGlmIC8qIENPTkZJR19QTV9TTEVFUCAqLworCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgdGczX2RyaXZlciA9IHsKIAkubmFtZQkJPSBEUlZfTU9EVUxFX05BTUUsCiAJLmlkX3RhYmxlCT0gdGczX3BjaV90YmwsCiAJLnByb2JlCQk9IHRnM19pbml0X29uZSwKIAkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHRnM19yZW1vdmVfb25lKSwKLQkuc3VzcGVuZAk9IHRnM19zdXNwZW5kLAotCS5yZXN1bWUJCT0gdGczX3Jlc3VtZQorCS5kcml2ZXIucG0JPSBURzNfUE1fT1BTLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgdGczX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RnMy5oIGIvZHJpdmVycy9uZXQvdGczLmgKaW5kZXggNGExOTc0OC4uZDYyYzhkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdGczLmgKKysrIGIvZHJpdmVycy9uZXQvdGczLmgKQEAgLTEwOTQsMTMgKzEwOTQsMTkgQEAKIC8qIDB4MzY2NCAtLT4gMHgzNmIwIHVudXNlZCAqLwogCiAjZGVmaW5lIFRHM19DUE1VX0VFRV9NT0RFCQkweDAwMDAzNmIwCi0jZGVmaW5lIFRHM19DUE1VX0VFRU1EX0VSTFlfTDFfWElUX0RFVAkgMHgwMDAwMDAwOAotI2RlZmluZSBURzNfQ1BNVV9FRUVNRF9MUElfRU5BQkxFCSAweDAwMDAwMDgwCi0jZGVmaW5lIFRHM19DUE1VX0VFRU1EX0xQSV9JTl9UWAkgMHgwMDAwMDEwMAotI2RlZmluZSBURzNfQ1BNVV9FRUVNRF9MUElfSU5fUlgJIDB4MDAwMDAyMDAKLSNkZWZpbmUgVEczX0NQTVVfRUVFTURfRUVFX0VOQUJMRQkgMHgwMDEwMDAwMAotLyogMHgzNmI0IC0tPiAweDM2YjggdW51c2VkICovCi0KKyNkZWZpbmUgIFRHM19DUE1VX0VFRU1EX0FQRV9UWF9ERVRfRU4JIDB4MDAwMDAwMDQKKyNkZWZpbmUgIFRHM19DUE1VX0VFRU1EX0VSTFlfTDFfWElUX0RFVAkgMHgwMDAwMDAwOAorI2RlZmluZSAgVEczX0NQTVVfRUVFTURfU05EX0lEWF9ERVRfRU4JIDB4MDAwMDAwNDAKKyNkZWZpbmUgIFRHM19DUE1VX0VFRU1EX0xQSV9FTkFCTEUJIDB4MDAwMDAwODAKKyNkZWZpbmUgIFRHM19DUE1VX0VFRU1EX0xQSV9JTl9UWAkgMHgwMDAwMDEwMAorI2RlZmluZSAgVEczX0NQTVVfRUVFTURfTFBJX0lOX1JYCSAweDAwMDAwMjAwCisjZGVmaW5lICBURzNfQ1BNVV9FRUVNRF9FRUVfRU5BQkxFCSAweDAwMTAwMDAwCisjZGVmaW5lIFRHM19DUE1VX0VFRV9EQlRNUjEJCTB4MDAwMDM2YjQKKyNkZWZpbmUgIFRHM19DUE1VX0RCVE1SMV9QQ0lFWElUXzIwNDdVUwkgMHgwN2ZmMDAwMAorI2RlZmluZSAgVEczX0NQTVVfREJUTVIxX0xOS0lETEVfMjA0N1VTCSAweDAwMDA3MGZmCisjZGVmaW5lIFRHM19DUE1VX0VFRV9EQlRNUjIJCTB4MDAwMDM2YjgKKyNkZWZpbmUgIFRHM19DUE1VX0RCVE1SMV9BUEVfVFhfMjA0N1VTCSAweDA3ZmYwMDAwCisjZGVmaW5lICBURzNfQ1BNVV9EQlRNUjJfVFhJRFhFUV8yMDQ3VVMJIDB4MDAwMDcwZmYKICNkZWZpbmUgVEczX0NQTVVfRUVFX0xOS0lETF9DVFJMCTB4MDAwMDM2YmMKICNkZWZpbmUgIFRHM19DUE1VX0VFRV9MTktJRExfUENJRV9OTDAJIDB4MDEwMDAwMDAKICNkZWZpbmUgIFRHM19DUE1VX0VFRV9MTktJRExfVUFSVF9JREwJIDB4MDAwMDAwMDQKQEAgLTEzMjcsNiArMTMzMyw4IEBACiAKICNkZWZpbmUgVEczX1JETUFfUlNSVkNUUkxfUkVHCQkweDAwMDA0OTAwCiAjZGVmaW5lIFRHM19SRE1BX1JTUlZDVFJMX0ZJRk9fT0ZMV19GSVgJIDB4MDAwMDAwMDQKKyNkZWZpbmUgVEczX1JETUFfUlNSVkNUUkxfVFhNUkdOXzMyMEIJIDB4MjgwMDAwMDAKKyNkZWZpbmUgVEczX1JETUFfUlNSVkNUUkxfVFhNUkdOX01BU0sJIDB4ZmZlMDAwMDAKIC8qIDB4NDkwNCAtLT4gMHg0OTEwIHVudXNlZCAqLwogCiAjZGVmaW5lIFRHM19MU09fUkRfRE1BX0NSUFRFTl9DVFJMCTB4MDAwMDQ5MTAKQEAgLTIxNzAsOSArMjE3OCw2IEBACiAjZGVmaW5lIE1JSV9URzNfVEVTVDFfQ1JDX0VOCQkweDgwMDAKIAogLyogQ2xhdXNlIDQ1IGV4cGFuc2lvbiByZWdpc3RlcnMgKi8KLSNkZWZpbmUgVEczX0NMNDVfRDdfRUVFQURWX0NBUAkJMHgwMDNjCi0jZGVmaW5lIFRHM19DTDQ1X0Q3X0VFRUFEVl9DQVBfMTAwVFgJMHgwMDAyCi0jZGVmaW5lIFRHM19DTDQ1X0Q3X0VFRUFEVl9DQVBfMTAwMFQJMHgwMDA0CiAjZGVmaW5lIFRHM19DTDQ1X0Q3X0VFRVJFU19TVEFUCQkweDgwM2UKICNkZWZpbmUgVEczX0NMNDVfRDdfRUVFUkVTX1NUQVRfTFBfMTAwVFgJMHgwMDAyCiAjZGVmaW5lIFRHM19DTDQ1X0Q3X0VFRVJFU19TVEFUX0xQXzEwMDBUCTB4MDAwNApAQCAtMjU2MiwxMCArMjU2Nyw2IEBACiAJREVGSU5FX0RNQV9VTk1BUF9BRERSKG1hcHBpbmcpOwogfTsKIAotc3RydWN0IHRnM19jb25maWdfaW5mbyB7Ci0JdTMyCQkJCWZsYWdzOwotfTsKLQogc3RydWN0IHRnM19saW5rX2NvbmZpZyB7CiAJLyogRGVzY3JpYmVzIHdoYXQgd2UncmUgdHJ5aW5nIHRvIGdldC4gKi8KIAl1MzIJCQkJYWR2ZXJ0aXNpbmc7CkBAIC0yNzEzLDE3ICsyNzE0LDE3IEBACiAJdTMyCQkJCWxhc3RfaXJxX3RhZzsKIAl1MzIJCQkJaW50X21ib3g7CiAJdTMyCQkJCWNvYWxfbm93OwotCXUzMgkJCQl0eF9wcm9kOwotCXUzMgkJCQl0eF9jb25zOwotCXUzMgkJCQl0eF9wZW5kaW5nOwotCXUzMgkJCQlwcm9kbWJveDsKIAotCXUzMgkJCQljb25zbWJveDsKKwl1MzIJCQkJY29uc21ib3ggX19fX2NhY2hlbGluZV9hbGlnbmVkOwogCXUzMgkJCQlyeF9yY2JfcHRyOwogCXUxNgkJCQkqcnhfcmNiX3Byb2RfaWR4OwogCXN0cnVjdCB0ZzNfcnhfcHJvZHJpbmdfc2V0CXByb2RyaW5nOwotCiAJc3RydWN0IHRnM19yeF9idWZmZXJfZGVzYwkqcnhfcmNiOworCisJdTMyCQkJCXR4X3Byb2QJX19fX2NhY2hlbGluZV9hbGlnbmVkOworCXUzMgkJCQl0eF9jb25zOworCXUzMgkJCQl0eF9wZW5kaW5nOworCXUzMgkJCQlwcm9kbWJveDsKIAlzdHJ1Y3QgdGczX3R4X2J1ZmZlcl9kZXNjCSp0eF9yaW5nOwogCXN0cnVjdCByaW5nX2luZm8JCSp0eF9idWZmZXJzOwogCkBAIC0yOTQ2LDYgKzI5NDcsNyBAQAogCWludAkJCQlwY2l4X2NhcDsKIAlpbnQJCQkJcGNpZV9jYXA7CiAJfTsKKwlpbnQJCQkJcGNpZV9yZWFkcnE7CiAKIAlzdHJ1Y3QgbWlpX2J1cwkJCSptZGlvX2J1czsKIAlpbnQJCQkJbWRpb19pcnFbUEhZX01BWF9BRERSXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9pYm10ci5jIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2libXRyLmMKaW5kZXggOTFlNmM3OC4uNDc4NjQ5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2libXRyLmMKKysrIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2libXRyLmMKQEAgLTY1Nyw4ICs2NTcsOSBAQAogI2lmbmRlZiBQQ01DSUEKIAkvKiBmaW5pc2ggZmlndXJpbmcgdGhlIHNoYXJlZCBSQU0gYWRkcmVzcyAqLwogCWlmIChjYXJkcHJlc2VudCA9PSBUUl9JU0EpIHsKLQkJc3RhdGljIF9fdTMyIHJhbV9ibmRyeV9tYXNrW10gPQotCQkJeyAweGZmZmZlMDAwLCAweGZmZmZjMDAwLCAweGZmZmY4MDAwLCAweGZmZmYwMDAwIH07CisJCXN0YXRpYyBjb25zdCBfX3UzMiByYW1fYm5kcnlfbWFza1tdID0geworCQkJMHhmZmZmZTAwMCwgMHhmZmZmYzAwMCwgMHhmZmZmODAwMCwgMHhmZmZmMDAwMAorCQl9OwogCQlfX3UzMiBuZXdfYmFzZSwgcnJyXzMyLCBjaGtfYmFzZSwgcmJtOwogCiAJCXJycl8zMj1yZWFkYih0aS0+bW1pbytBQ0FfT0ZGU0VUK0FDQV9SVytSUlJfT0REKSA+PiAyICYgMHgwMzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL2RlMjEwNHguYyBiL2RyaXZlcnMvbmV0L3R1bGlwL2RlMjEwNHguYwppbmRleCBjNzhhNTA1Li5iMTNjNmIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC9kZTIxMDR4LmMKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAvZGUyMTA0eC5jCkBAIC05NjQsNyArOTY0LDcgQEAKIAkJZHczMihNYWNNb2RlLCBtYWNtb2RlKTsKIH0KIAotc3RhdGljIHZvaWQgZGVfbmV4dF9tZWRpYSAoc3RydWN0IGRlX3ByaXZhdGUgKmRlLCB1MzIgKm1lZGlhLAorc3RhdGljIHZvaWQgZGVfbmV4dF9tZWRpYSAoc3RydWN0IGRlX3ByaXZhdGUgKmRlLCBjb25zdCB1MzIgKm1lZGlhLAogCQkJICAgdW5zaWduZWQgaW50IG5fbWVkaWEpCiB7CiAJdW5zaWduZWQgaW50IGk7CkBAIC0xMDA4LDEwICsxMDA4LDEwIEBACiAJCXJldHVybjsKIAogCWlmIChkZS0+bWVkaWFfdHlwZSA9PSBERV9NRURJQV9BVUkpIHsKLQkJdTMyIG5leHRfc3RhdGUgPSBERV9NRURJQV9UUDsKKwkJc3RhdGljIGNvbnN0IHUzMiBuZXh0X3N0YXRlID0gREVfTUVESUFfVFA7CiAJCWRlX25leHRfbWVkaWEoZGUsICZuZXh0X3N0YXRlLCAxKTsKIAl9IGVsc2UgewotCQl1MzIgbmV4dF9zdGF0ZSA9IERFX01FRElBX0FVSTsKKwkJc3RhdGljIGNvbnN0IHUzMiBuZXh0X3N0YXRlID0gREVfTUVESUFfQVVJOwogCQlkZV9uZXh0X21lZGlhKGRlLCAmbmV4dF9zdGF0ZSwgMSk7CiAJfQogCkBAIC0xMTM2LDEzICsxMTM2LDE5IEBACiAJICogc2ltcGx5IHJlc2V0cyB0aGUgUEhZIGFuZCByZWxvYWRzIHRoZSBjdXJyZW50IG1lZGlhIHNldHRpbmdzLgogCSAqLwogCWlmIChkZS0+bWVkaWFfdHlwZSA9PSBERV9NRURJQV9BVUkpIHsKLQkJdTMyIG5leHRfc3RhdGVzW10gPSB7IERFX01FRElBX0JOQywgREVfTUVESUFfVFBfQVVUTyB9OworCQlzdGF0aWMgY29uc3QgdTMyIG5leHRfc3RhdGVzW10gPSB7CisJCQlERV9NRURJQV9CTkMsIERFX01FRElBX1RQX0FVVE8KKwkJfTsKIAkJZGVfbmV4dF9tZWRpYShkZSwgbmV4dF9zdGF0ZXMsIEFSUkFZX1NJWkUobmV4dF9zdGF0ZXMpKTsKIAl9IGVsc2UgaWYgKGRlLT5tZWRpYV90eXBlID09IERFX01FRElBX0JOQykgewotCQl1MzIgbmV4dF9zdGF0ZXNbXSA9IHsgREVfTUVESUFfVFBfQVVUTywgREVfTUVESUFfQVVJIH07CisJCXN0YXRpYyBjb25zdCB1MzIgbmV4dF9zdGF0ZXNbXSA9IHsKKwkJCURFX01FRElBX1RQX0FVVE8sIERFX01FRElBX0FVSQorCQl9OwogCQlkZV9uZXh0X21lZGlhKGRlLCBuZXh0X3N0YXRlcywgQVJSQVlfU0laRShuZXh0X3N0YXRlcykpOwogCX0gZWxzZSB7Ci0JCXUzMiBuZXh0X3N0YXRlc1tdID0geyBERV9NRURJQV9BVUksIERFX01FRElBX0JOQywgREVfTUVESUFfVFBfQVVUTyB9OworCQlzdGF0aWMgY29uc3QgdTMyIG5leHRfc3RhdGVzW10gPSB7CisJCQlERV9NRURJQV9BVUksIERFX01FRElBX0JOQywgREVfTUVESUFfVFBfQVVUTworCQl9OwogCQlkZV9uZXh0X21lZGlhKGRlLCBuZXh0X3N0YXRlcywgQVJSQVlfU0laRShuZXh0X3N0YXRlcykpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvdHVsaXBfY29yZS5jIGIvZHJpdmVycy9uZXQvdHVsaXAvdHVsaXBfY29yZS5jCmluZGV4IDJjMzlmMjU5Li41YzAxZTI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC90dWxpcF9jb3JlLmMKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAvdHVsaXBfY29yZS5jCkBAIC0xMzAyLDE3ICsxMzAyLDE4IEBACiAjZW5kaWYKIH07CiAKK0RFRklORV9QQ0lfREVWSUNFX1RBQkxFKGVhcmx5XzQ4Nl9jaGlwc2V0cykgPSB7CisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfODI0MjQpIH0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfU0ksIFBDSV9ERVZJQ0VfSURfU0lfNDk2KSB9LAorCXsgfSwKK307CisKIHN0YXRpYyBpbnQgX19kZXZpbml0IHR1bGlwX2luaXRfb25lIChzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJCQkgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiB7CiAJc3RydWN0IHR1bGlwX3ByaXZhdGUgKnRwOwogCS8qIFNlZSBub3RlIGJlbG93IG9uIHRoZSBtdWx0aXBvcnQgY2FyZHMuICovCiAJc3RhdGljIHVuc2lnbmVkIGNoYXIgbGFzdF9waHlzX2FkZHJbNl0gPSB7MHgwMCwgJ0wnLCAnaScsICduJywgJ3UnLCAneCd9OwotCXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBlYXJseV80ODZfY2hpcHNldHNbXSA9IHsKLQkJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfODI0MjQpIH0sCi0JCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1NJLCBQQ0lfREVWSUNFX0lEX1NJXzQ5NikgfSwKLQkJeyB9LAotCX07CiAJc3RhdGljIGludCBsYXN0X2lycTsKIAlzdGF0aWMgaW50IG11bHRpcG9ydF9jbnQ7CS8qIEZvciBmb3VyLXBvcnQgYm9hcmRzIHcvb25lIEVFUFJPTSAqLwogCWludCBpLCBpcnE7CkBAIC0xNjgyLDcgKzE2ODMsOSBAQAogCQl0cC0+ZnVsbF9kdXBsZXhfbG9jayA9IDE7CiAKIAlpZiAodHVsaXBfbWVkaWFfY2FwW3RwLT5kZWZhdWx0X3BvcnRdICYgTWVkaWFJc01JSSkgewotCQl1MTYgbWVkaWEyYWR2ZXJ0W10gPSB7IDB4MjAsIDB4NDAsIDB4MDNlMCwgMHg2MCwgMHg4MCwgMHgxMDAsIDB4MjAwIH07CisJCXN0YXRpYyBjb25zdCB1MTYgbWVkaWEyYWR2ZXJ0W10gPSB7CisJCQkweDIwLCAweDQwLCAweDAzZTAsIDB4NjAsIDB4ODAsIDB4MTAwLCAweDIwMAorCQl9OwogCQl0cC0+bWlpX2FkdmVydGlzZSA9IG1lZGlhMmFkdmVydFt0cC0+ZGVmYXVsdF9wb3J0IC0gOV07CiAJCXRwLT5taWlfYWR2ZXJ0aXNlIHw9ICh0cC0+ZmxhZ3MgJiBIQVNfODAyM1gpOyAvKiBNYXRjaGluZyBiaXRzISAqLwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bi5jIGIvZHJpdmVycy9uZXQvdHVuLmMKaW5kZXggNTVmM2EzZS4uNzU5OWM0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVuLmMKKysrIGIvZHJpdmVycy9uZXQvdHVuLmMKQEAgLTc1Nyw3ICs3NTcsNyBAQAogCiAJCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7CiAJCQlnc28uZmxhZ3MgPSBWSVJUSU9fTkVUX0hEUl9GX05FRURTX0NTVU07Ci0JCQlnc28uY3N1bV9zdGFydCA9IHNrYi0+Y3N1bV9zdGFydCAtIHNrYl9oZWFkcm9vbShza2IpOworCQkJZ3NvLmNzdW1fc3RhcnQgPSBza2JfY2hlY2tzdW1fc3RhcnRfb2Zmc2V0KHNrYik7CiAJCQlnc28uY3N1bV9vZmZzZXQgPSBza2ItPmNzdW1fb2Zmc2V0OwogCQl9IC8qIGVsc2UgZXZlcnl0aGluZyBpcyB6ZXJvICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9LY29uZmlnIGIvZHJpdmVycy9uZXQvdXNiL0tjb25maWcKaW5kZXggNTJmZmFiZS4uNmY2MDBjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvdXNiL0tjb25maWcKQEAgLTE5Niw2ICsxOTYsMjUgQEAKIAkgIElFRUUgODAyICJsb2NhbCBhc3NpZ25tZW50IiBiaXQgaXMgc2V0IGluIHRoZSBhZGRyZXNzLCBhICJ1c2JYIgogCSAgbmFtZSBpcyB1c2VkIGluc3RlYWQuCiAKK2NvbmZpZyBVU0JfTkVUX0NEQ19OQ00KKwl0cmlzdGF0ZSAiQ0RDIE5DTSBzdXBwb3J0IgorCWRlcGVuZHMgb24gVVNCX1VTQk5FVAorCWRlZmF1bHQgeQorCWhlbHAKKwkgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIHN1cHBvcnQgZm9yIENEQyBOQ00gKE5ldHdvcmsgQ29udHJvbCBNb2RlbAorCSAgRGV2aWNlIFVTQiBDbGFzcyBTcGVjaWZpY2F0aW9uKS4gVGhlIENEQyBOQ00gc3BlY2lmaWNhdGlvbiBpcworCSAgYXZhaWxhYmxlIGZyb20gPGh0dHA6Ly93d3cudXNiLm9yZy8+LgorCisJICBTYXkgInkiIHRvIGxpbmsgdGhlIGRyaXZlciBzdGF0aWNhbGx5LCBvciAibSIgdG8gYnVpbGQgYQorCSAgZHluYW1pY2FsbHkgbGlua2VkIG1vZHVsZS4KKworCSAgVGhpcyBkcml2ZXIgc2hvdWxkIHdvcmsgd2l0aCBhdCBsZWFzdCB0aGUgZm9sbG93aW5nIGRldmljZXM6CisJICAgICogU1QtRXJpY3Nzb24gTTcwMCBMVEUgRkREL1RERCBNb2JpbGUgQnJvYWRiYW5kIE1vZGVtIChyZWYuIGRlc2lnbikKKwkgICAgKiBTVC1Fcmljc3NvbiBNNTczMCBIU1BBKyBNb2JpbGUgQnJvYWRiYW5kIE1vZGVtIChyZWZlcmVuY2UgZGVzaWduKQorCSAgICAqIFNULUVyaWNzc29uIE01NzAgSFNQQSsgTW9iaWxlIEJyb2FkYmFuZCBNb2RlbSAocmVmZXJlbmNlIGRlc2lnbikKKwkgICAgKiBTVC1Fcmljc3NvbiBNMzQzIEhTUEEgTW9iaWxlIEJyb2FkYmFuZCBNb2RlbSAocmVmZXJlbmNlIGRlc2lnbikKKwkgICAgKiBFcmljc3NvbiBGNTUyMWd3IE1vYmlsZSBCcm9hZGJhbmQgTW9kdWxlCisKIGNvbmZpZyBVU0JfTkVUX0RNOTYwMQogCXRyaXN0YXRlICJEYXZpY29tIERNOTYwMSBiYXNlZCBVU0IgMS4xIDEwLzEwMCBldGhlcm5ldCBkZXZpY2VzIgogCWRlcGVuZHMgb24gVVNCX1VTQk5FVApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlCmluZGV4IGExOWIwMjUuLmNhYzE3MDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC91c2IvTWFrZWZpbGUKQEAgLTI2LDQgKzI2LDUgQEAKIG9iai0kKENPTkZJR19VU0JfSVBIRVRIKQkrPSBpcGhldGgubwogb2JqLSQoQ09ORklHX1VTQl9TSUVSUkFfTkVUKQkrPSBzaWVycmFfbmV0Lm8KIG9iai0kKENPTkZJR19VU0JfTkVUX0NYODIzMTBfRVRIKQkrPSBjeDgyMzEwX2V0aC5vCitvYmotJChDT05GSUdfVVNCX05FVF9DRENfTkNNKQkrPSBjZGNfbmNtLm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2NkY19ldGhlci5jIGIvZHJpdmVycy9uZXQvdXNiL2NkY19ldGhlci5jCmluZGV4IGIzZmUwZGUuLjlhNjBlNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9jZGNfZXRoZXIuYworKysgYi9kcml2ZXJzL25ldC91c2IvY2RjX2V0aGVyLmMKQEAgLTk5LDkgKzk5LDcgQEAKIAkJICovCiAJCWJ1ZiA9IGRldi0+dWRldi0+YWN0Y29uZmlnLT5leHRyYTsKIAkJbGVuID0gZGV2LT51ZGV2LT5hY3Rjb25maWctPmV4dHJhbGVuOwotCQlpZiAobGVuKQotCQkJZGV2X2RiZygmaW50Zi0+ZGV2LAotCQkJCSJDREMgZGVzY3JpcHRvcnMgb24gY29uZmlnXG4iKTsKKwkJZGV2X2RiZygmaW50Zi0+ZGV2LCAiQ0RDIGRlc2NyaXB0b3JzIG9uIGNvbmZpZ1xuIik7CiAJfQogCiAJLyogTWF5YmUgQ0RDIGRlc2NyaXB0b3JzIGFyZSBhZnRlciB0aGUgZW5kcG9pbnQ/ICBUaGlzIGJ1ZyBoYXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9jZGNfbmNtLmMgYi9kcml2ZXJzL25ldC91c2IvY2RjX25jbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5M2MxMDQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC91c2IvY2RjX25jbS5jCkBAIC0wLDAgKzEsMTIxMyBAQAorLyoKKyAqIGNkY19uY20uYworICoKKyAqIENvcHlyaWdodCAoQykgU1QtRXJpY3Nzb24gMjAxMAorICogQ29udGFjdDogQWxleGV5IE9yaXNoa28gPGFsZXhleS5vcmlzaGtvQHN0ZXJpY3Nzb24uY29tPgorICogT3JpZ2luYWwgYXV0aG9yOiBIYW5zIFBldHRlciBTZWxhc2t5IDxoYW5zLnBldHRlci5zZWxhc2t5QHN0ZXJpY3Nzb24uY29tPgorICoKKyAqIFVTQiBIb3N0IERyaXZlciBmb3IgTmV0d29yayBDb250cm9sIE1vZGVsIChOQ00pCisgKiBodHRwOi8vd3d3LnVzYi5vcmcvZGV2ZWxvcGVycy9kZXZjbGFzc19kb2NzL05DTTEwLnppcAorICoKKyAqIFRoZSBOQ00gZW5jb2RpbmcsIGRlY29kaW5nIGFuZCBpbml0aWFsaXphdGlvbiBsb2dpYworICogZGVyaXZlcyBmcm9tIEZyZWVCU0QgOC54LiBpZl9jZGNlLmMgYW5kIGlmX2NkY2VyZWcuaAorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gWW91IG1heSBjaG9vc2UgdGhpcyBmaWxlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcworICogb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBvciB0aGUgMi1jbGF1c2UKKyAqIEJTRCBsaWNlbnNlIGxpc3RlZCBiZWxvdzoKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L21paS5oPgorI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9hdG9taWMuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvdXNibmV0Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiL2NkYy5oPgorCisjZGVmaW5lCURSSVZFUl9WRVJTSU9OCQkJCSIzMC1Ob3YtMjAxMCIKKworLyogQ0RDIE5DTSBzdWJjbGFzcyAzLjIuMSAqLworI2RlZmluZSBVU0JfQ0RDX05DTV9ORFAxNl9MRU5HVEhfTUlOCQkweDEwCisKKy8qIE1heGltdW0gTlRCIGxlbmd0aCAqLworI2RlZmluZQlDRENfTkNNX05UQl9NQVhfU0laRV9UWAkJCTE2Mzg0CS8qIGJ5dGVzICovCisjZGVmaW5lCUNEQ19OQ01fTlRCX01BWF9TSVpFX1JYCQkJMTYzODQJLyogYnl0ZXMgKi8KKworLyogTWluaW11bSB2YWx1ZSBmb3IgTWF4RGF0YWdyYW1TaXplLCBjaC4gNi4yLjkgKi8KKyNkZWZpbmUJQ0RDX05DTV9NSU5fREFUQUdSQU1fU0laRQkJMTUxNAkvKiBieXRlcyAqLworCisjZGVmaW5lCUNEQ19OQ01fTUlOX1RYX1BLVAkJCTUxMgkvKiBieXRlcyAqLworCisvKiBEZWZhdWx0IHZhbHVlIGZvciBNYXhEYXRhZ3JhbVNpemUgKi8KKyNkZWZpbmUJQ0RDX05DTV9NQVhfREFUQUdSQU1fU0laRQkJMjA0OAkvKiBieXRlcyAqLworCisvKgorICogTWF4aW11bSBhbW91bnQgb2YgZGF0YWdyYW1zIGluIE5DTSBEYXRhZ3JhbSBQb2ludGVyIFRhYmxlLCBub3QgY291bnRpbmcKKyAqIHRoZSBsYXN0IE5VTEwgZW50cnkuIEFueSBhZGRpdGlvbmFsIGRhdGFncmFtcyBpbiBOVEIgd291bGQgYmUgZGlzY2FyZGVkLgorICovCisjZGVmaW5lCUNEQ19OQ01fRFBUX0RBVEFHUkFNU19NQVgJCTMyCisKKy8qIFJlc3RhcnQgdGhlIHRpbWVyLCBpZiBhbW91bnQgb2YgZGF0YWdyYW1zIGlzIGxlc3MgdGhhbiBnaXZlbiB2YWx1ZSAqLworI2RlZmluZQlDRENfTkNNX1JFU1RBUlRfVElNRVJfREFUQUdSQU1fQ05UCTMKKworLyogVGhlIGZvbGxvd2luZyBtYWNybyBkZWZpbmVzIHRoZSBtaW5pbXVtIGhlYWRlciBzcGFjZSAqLworI2RlZmluZQlDRENfTkNNX01JTl9IRFJfU0laRSBcCisJKHNpemVvZihzdHJ1Y3QgdXNiX2NkY19uY21fbnRoMTYpICsgc2l6ZW9mKHN0cnVjdCB1c2JfY2RjX25jbV9uZHAxNikgKyBcCisJKENEQ19OQ01fRFBUX0RBVEFHUkFNU19NQVggKyAxKSAqIHNpemVvZihzdHJ1Y3QgdXNiX2NkY19uY21fZHBlMTYpKQorCitzdHJ1Y3QgY29ubmVjdGlvbl9zcGVlZF9jaGFuZ2UgeworCV9fbGUzMglVU0JpdFJhdGU7IC8qIGhvbGRzIDNHUFAgZG93bmxpbmsgdmFsdWUsIGJpdHMgcGVyIHNlY29uZCAqLworCV9fbGUzMglEU0JpdFJhdGU7IC8qIGhvbGRzIDNHUFAgdXBsaW5rIHZhbHVlLCBiaXRzIHBlciBzZWNvbmQgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgY2RjX25jbV9kYXRhIHsKKwlzdHJ1Y3QgdXNiX2NkY19uY21fbnRoMTYgbnRoMTY7CisJc3RydWN0IHVzYl9jZGNfbmNtX25kcDE2IG5kcDE2OworCXN0cnVjdCB1c2JfY2RjX25jbV9kcGUxNiBkcGUxNltDRENfTkNNX0RQVF9EQVRBR1JBTVNfTUFYICsgMV07Cit9OworCitzdHJ1Y3QgY2RjX25jbV9jdHggeworCXN0cnVjdCBjZGNfbmNtX2RhdGEgcnhfbmNtOworCXN0cnVjdCBjZGNfbmNtX2RhdGEgdHhfbmNtOworCXN0cnVjdCB1c2JfY2RjX25jbV9udGJfcGFyYW1ldGVycyBuY21fcGFybTsKKwlzdHJ1Y3QgdGltZXJfbGlzdCB0eF90aW1lcjsKKworCWNvbnN0IHN0cnVjdCB1c2JfY2RjX25jbV9kZXNjICpmdW5jX2Rlc2M7CisJY29uc3Qgc3RydWN0IHVzYl9jZGNfaGVhZGVyX2Rlc2MgKmhlYWRlcl9kZXNjOworCWNvbnN0IHN0cnVjdCB1c2JfY2RjX3VuaW9uX2Rlc2MgKnVuaW9uX2Rlc2M7CisJY29uc3Qgc3RydWN0IHVzYl9jZGNfZXRoZXJfZGVzYyAqZXRoZXJfZGVzYzsKKworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CisJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICppbl9lcDsKKwlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKm91dF9lcDsKKwlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKnN0YXR1c19lcDsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZjsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqY29udHJvbDsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqZGF0YTsKKworCXN0cnVjdCBza19idWZmICp0eF9jdXJyX3NrYjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqdHhfcmVtX3NrYjsKKworCXNwaW5sb2NrX3QgbXR4OworCisJdTMyIHR4X3RpbWVyX3BlbmRpbmc7CisJdTMyIHR4X2N1cnJfb2Zmc2V0OworCXUzMiB0eF9jdXJyX2xhc3Rfb2Zmc2V0OworCXUzMiB0eF9jdXJyX2ZyYW1lX251bTsKKwl1MzIgcnhfc3BlZWQ7CisJdTMyIHR4X3NwZWVkOworCXUzMiByeF9tYXg7CisJdTMyIHR4X21heDsKKwl1MzIgbWF4X2RhdGFncmFtX3NpemU7CisJdTE2IHR4X21heF9kYXRhZ3JhbXM7CisJdTE2IHR4X3JlbWFpbmRlcjsKKwl1MTYgdHhfbW9kdWx1czsKKwl1MTYgdHhfbmRwX21vZHVsdXM7CisJdTE2IHR4X3NlcTsKKwl1MTYgY29ubmVjdGVkOworCXU4IGRhdGFfY2xhaW1lZDsKKwl1OCBjb250cm9sX2NsYWltZWQ7Cit9OworCitzdGF0aWMgdm9pZCBjZGNfbmNtX3R4X3RpbWVvdXQodW5zaWduZWQgbG9uZyBhcmcpOworc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyBjZGNfbmNtX2luZm87CitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgY2RjX25jbV9kcml2ZXI7CitzdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIGNkY19uY21fZXRodG9vbF9vcHM7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBjZGNfZGV2c1tdID0geworCXsgVVNCX0lOVEVSRkFDRV9JTkZPKFVTQl9DTEFTU19DT01NLAorCQlVU0JfQ0RDX1NVQkNMQVNTX05DTSwgVVNCX0NEQ19QUk9UT19OT05FKSwKKwkJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpJmNkY19uY21faW5mbywKKwl9LAorCXsKKwl9LAorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGNkY19kZXZzKTsKKworc3RhdGljIHZvaWQKK2NkY19uY21fZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpOworCisJc3RybmNweShpbmZvLT5kcml2ZXIsIGRldi0+ZHJpdmVyX25hbWUsIHNpemVvZihpbmZvLT5kcml2ZXIpKTsKKwlzdHJuY3B5KGluZm8tPnZlcnNpb24sIERSSVZFUl9WRVJTSU9OLCBzaXplb2YoaW5mby0+dmVyc2lvbikpOworCXN0cm5jcHkoaW5mby0+ZndfdmVyc2lvbiwgZGV2LT5kcml2ZXJfaW5mby0+ZGVzY3JpcHRpb24sCisJCXNpemVvZihpbmZvLT5md192ZXJzaW9uKSk7CisJdXNiX21ha2VfcGF0aChkZXYtPnVkZXYsIGluZm8tPmJ1c19pbmZvLCBzaXplb2YoaW5mby0+YnVzX2luZm8pKTsKK30KKworc3RhdGljIGludAorY2RjX25jbV9kb19yZXF1ZXN0KHN0cnVjdCBjZGNfbmNtX2N0eCAqY3R4LCBzdHJ1Y3QgdXNiX2NkY19ub3RpZmljYXRpb24gKnJlcSwKKwkJICAgdm9pZCAqZGF0YSwgdTE2IGZsYWdzLCB1MTYgKmFjdGxlbiwgdTE2IHRpbWVvdXQpCit7CisJaW50IGVycjsKKworCWVyciA9IHVzYl9jb250cm9sX21zZyhjdHgtPnVkZXYsIChyZXEtPmJtUmVxdWVzdFR5cGUgJiBVU0JfRElSX0lOKSA/CisJCQkJdXNiX3JjdmN0cmxwaXBlKGN0eC0+dWRldiwgMCkgOgorCQkJCXVzYl9zbmRjdHJscGlwZShjdHgtPnVkZXYsIDApLAorCQkJCXJlcS0+Yk5vdGlmaWNhdGlvblR5cGUsIHJlcS0+Ym1SZXF1ZXN0VHlwZSwKKwkJCQlyZXEtPndWYWx1ZSwKKwkJCQlyZXEtPndJbmRleCwgZGF0YSwKKwkJCQlyZXEtPndMZW5ndGgsIHRpbWVvdXQpOworCisJaWYgKGVyciA8IDApIHsKKwkJaWYgKGFjdGxlbikKKwkJCSphY3RsZW4gPSAwOworCQlyZXR1cm4gZXJyOworCX0KKworCWlmIChhY3RsZW4pCisJCSphY3RsZW4gPSBlcnI7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHU4IGNkY19uY21fc2V0dXAoc3RydWN0IGNkY19uY21fY3R4ICpjdHgpCit7CisJc3RydWN0IHVzYl9jZGNfbm90aWZpY2F0aW9uIHJlcTsKKwl1MzIgdmFsOworCV9fbGUxNiBtYXhfZGF0YWdyYW1fc2l6ZTsKKwl1OCBmbGFnczsKKwl1OCBpZmFjZV9ubzsKKwlpbnQgZXJyOworCisJaWZhY2Vfbm8gPSBjdHgtPmNvbnRyb2wtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXI7CisKKwlyZXEuYm1SZXF1ZXN0VHlwZSA9IFVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9JTiB8IFVTQl9SRUNJUF9JTlRFUkZBQ0U7CisJcmVxLmJOb3RpZmljYXRpb25UeXBlID0gVVNCX0NEQ19HRVRfTlRCX1BBUkFNRVRFUlM7CisJcmVxLndWYWx1ZSA9IDA7CisJcmVxLndJbmRleCA9IGNwdV90b19sZTE2KGlmYWNlX25vKTsKKwlyZXEud0xlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZihjdHgtPm5jbV9wYXJtKSk7CisKKwllcnIgPSBjZGNfbmNtX2RvX3JlcXVlc3QoY3R4LCAmcmVxLCAmY3R4LT5uY21fcGFybSwgMCwgTlVMTCwgMTAwMCk7CisJaWYgKGVycikgeworCQlwcl9kZWJ1ZygiZmFpbGVkIEdFVF9OVEJfUEFSQU1FVEVSU1xuIik7CisJCXJldHVybiAxOworCX0KKworCS8qIHJlYWQgY29ycmVjdCBzZXQgb2YgcGFyYW1ldGVycyBhY2NvcmRpbmcgdG8gZGV2aWNlIG1vZGUgKi8KKwljdHgtPnJ4X21heCA9IGxlMzJfdG9fY3B1KGN0eC0+bmNtX3Bhcm0uZHdOdGJJbk1heFNpemUpOworCWN0eC0+dHhfbWF4ID0gbGUzMl90b19jcHUoY3R4LT5uY21fcGFybS5kd050Yk91dE1heFNpemUpOworCWN0eC0+dHhfcmVtYWluZGVyID0gbGUxNl90b19jcHUoY3R4LT5uY21fcGFybS53TmRwT3V0UGF5bG9hZFJlbWFpbmRlcik7CisJY3R4LT50eF9tb2R1bHVzID0gbGUxNl90b19jcHUoY3R4LT5uY21fcGFybS53TmRwT3V0RGl2aXNvcik7CisJY3R4LT50eF9uZHBfbW9kdWx1cyA9IGxlMTZfdG9fY3B1KGN0eC0+bmNtX3Bhcm0ud05kcE91dEFsaWdubWVudCk7CisKKwlpZiAoY3R4LT5mdW5jX2Rlc2MgIT0gTlVMTCkKKwkJZmxhZ3MgPSBjdHgtPmZ1bmNfZGVzYy0+Ym1OZXR3b3JrQ2FwYWJpbGl0aWVzOworCWVsc2UKKwkJZmxhZ3MgPSAwOworCisJcHJfZGVidWcoImR3TnRiSW5NYXhTaXplPSV1IGR3TnRiT3V0TWF4U2l6ZT0ldSAiCisJCSAid05kcE91dFBheWxvYWRSZW1haW5kZXI9JXUgd05kcE91dERpdmlzb3I9JXUgIgorCQkgIndOZHBPdXRBbGlnbm1lbnQ9JXUgZmxhZ3M9MHgleFxuIiwKKwkJIGN0eC0+cnhfbWF4LCBjdHgtPnR4X21heCwgY3R4LT50eF9yZW1haW5kZXIsIGN0eC0+dHhfbW9kdWx1cywKKwkJIGN0eC0+dHhfbmRwX21vZHVsdXMsIGZsYWdzKTsKKworCS8qIG1heCBjb3VudCBvZiB0eCBkYXRhZ3JhbXMgd2l0aG91dCB0ZXJtaW5hdGluZyBOVUxMIGVudHJ5ICovCisJY3R4LT50eF9tYXhfZGF0YWdyYW1zID0gQ0RDX05DTV9EUFRfREFUQUdSQU1TX01BWDsKKworCS8qIHZlcmlmeSBtYXhpbXVtIHNpemUgb2YgcmVjZWl2ZWQgTlRCIGluIGJ5dGVzICovCisJaWYgKChjdHgtPnJ4X21heCA8CisJICAgIChDRENfTkNNX01JTl9IRFJfU0laRSArIENEQ19OQ01fTUlOX0RBVEFHUkFNX1NJWkUpKSB8fAorCSAgICAoY3R4LT5yeF9tYXggPiBDRENfTkNNX05UQl9NQVhfU0laRV9SWCkpIHsKKwkJcHJfZGVidWcoIlVzaW5nIGRlZmF1bHQgbWF4aW11bSByZWNlaXZlIGxlbmd0aD0lZFxuIiwKKwkJCQkJCUNEQ19OQ01fTlRCX01BWF9TSVpFX1JYKTsKKwkJY3R4LT5yeF9tYXggPSBDRENfTkNNX05UQl9NQVhfU0laRV9SWDsKKwl9CisKKwkvKiB2ZXJpZnkgbWF4aW11bSBzaXplIG9mIHRyYW5zbWl0dGVkIE5UQiBpbiBieXRlcyAqLworCWlmICgoY3R4LT50eF9tYXggPAorCSAgICAoQ0RDX05DTV9NSU5fSERSX1NJWkUgKyBDRENfTkNNX01JTl9EQVRBR1JBTV9TSVpFKSkgfHwKKwkgICAgKGN0eC0+dHhfbWF4ID4gQ0RDX05DTV9OVEJfTUFYX1NJWkVfVFgpKSB7CisJCXByX2RlYnVnKCJVc2luZyBkZWZhdWx0IG1heGltdW0gdHJhbnNtaXQgbGVuZ3RoPSVkXG4iLAorCQkJCQkJQ0RDX05DTV9OVEJfTUFYX1NJWkVfVFgpOworCQljdHgtPnR4X21heCA9IENEQ19OQ01fTlRCX01BWF9TSVpFX1RYOworCX0KKworCS8qCisJICogdmVyaWZ5IHRoYXQgdGhlIHN0cnVjdHVyZSBhbGlnbm1lbnQgaXM6CisJICogLSBwb3dlciBvZiB0d28KKwkgKiAtIG5vdCBncmVhdGVyIHRoYW4gdGhlIG1heGltdW0gdHJhbnNtaXQgbGVuZ3RoCisJICogLSBub3QgbGVzcyB0aGFuIGZvdXIgYnl0ZXMKKwkgKi8KKwl2YWwgPSBjdHgtPnR4X25kcF9tb2R1bHVzOworCisJaWYgKCh2YWwgPCBVU0JfQ0RDX05DTV9ORFBfQUxJR05fTUlOX1NJWkUpIHx8CisJICAgICh2YWwgIT0gKCgtdmFsKSAmIHZhbCkpIHx8ICh2YWwgPj0gY3R4LT50eF9tYXgpKSB7CisJCXByX2RlYnVnKCJVc2luZyBkZWZhdWx0IGFsaWdubWVudDogNCBieXRlc1xuIik7CisJCWN0eC0+dHhfbmRwX21vZHVsdXMgPSBVU0JfQ0RDX05DTV9ORFBfQUxJR05fTUlOX1NJWkU7CisJfQorCisJLyoKKwkgKiB2ZXJpZnkgdGhhdCB0aGUgcGF5bG9hZCBhbGlnbm1lbnQgaXM6CisJICogLSBwb3dlciBvZiB0d28KKwkgKiAtIG5vdCBncmVhdGVyIHRoYW4gdGhlIG1heGltdW0gdHJhbnNtaXQgbGVuZ3RoCisJICogLSBub3QgbGVzcyB0aGFuIGZvdXIgYnl0ZXMKKwkgKi8KKwl2YWwgPSBjdHgtPnR4X21vZHVsdXM7CisKKwlpZiAoKHZhbCA8IFVTQl9DRENfTkNNX05EUF9BTElHTl9NSU5fU0laRSkgfHwKKwkgICAgKHZhbCAhPSAoKC12YWwpICYgdmFsKSkgfHwgKHZhbCA+PSBjdHgtPnR4X21heCkpIHsKKwkJcHJfZGVidWcoIlVzaW5nIGRlZmF1bHQgdHJhbnNtaXQgbW9kdWx1czogNCBieXRlc1xuIik7CisJCWN0eC0+dHhfbW9kdWx1cyA9IFVTQl9DRENfTkNNX05EUF9BTElHTl9NSU5fU0laRTsKKwl9CisKKwkvKiB2ZXJpZnkgdGhlIHBheWxvYWQgcmVtYWluZGVyICovCisJaWYgKGN0eC0+dHhfcmVtYWluZGVyID49IGN0eC0+dHhfbW9kdWx1cykgeworCQlwcl9kZWJ1ZygiVXNpbmcgZGVmYXVsdCB0cmFuc21pdCByZW1haW5kZXI6IDAgYnl0ZXNcbiIpOworCQljdHgtPnR4X3JlbWFpbmRlciA9IDA7CisJfQorCisJLyogYWRqdXN0IFRYLXJlbWFpbmRlciBhY2NvcmRpbmcgdG8gTkNNIHNwZWNpZmljYXRpb24uICovCisJY3R4LT50eF9yZW1haW5kZXIgPSAoKGN0eC0+dHhfcmVtYWluZGVyIC0gRVRIX0hMRU4pICYKKwkJCQkJCShjdHgtPnR4X21vZHVsdXMgLSAxKSk7CisKKwkvKiBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gKi8KKworCS8qIHNldCBDUkMgTW9kZSAqLworCXJlcS5ibVJlcXVlc3RUeXBlID0gVVNCX1RZUEVfQ0xBU1MgfCBVU0JfRElSX09VVCB8IFVTQl9SRUNJUF9JTlRFUkZBQ0U7CisJcmVxLmJOb3RpZmljYXRpb25UeXBlID0gVVNCX0NEQ19TRVRfQ1JDX01PREU7CisJcmVxLndWYWx1ZSA9IGNwdV90b19sZTE2KFVTQl9DRENfTkNNX0NSQ19OT1RfQVBQRU5ERUQpOworCXJlcS53SW5kZXggPSBjcHVfdG9fbGUxNihpZmFjZV9ubyk7CisJcmVxLndMZW5ndGggPSAwOworCisJZXJyID0gY2RjX25jbV9kb19yZXF1ZXN0KGN0eCwgJnJlcSwgTlVMTCwgMCwgTlVMTCwgMTAwMCk7CisJaWYgKGVycikKKwkJcHJfZGVidWcoIlNldHRpbmcgQ1JDIG1vZGUgb2ZmIGZhaWxlZFxuIik7CisKKwkvKiBzZXQgTlRCIGZvcm1hdCAqLworCXJlcS5ibVJlcXVlc3RUeXBlID0gVVNCX1RZUEVfQ0xBU1MgfCBVU0JfRElSX09VVCB8IFVTQl9SRUNJUF9JTlRFUkZBQ0U7CisJcmVxLmJOb3RpZmljYXRpb25UeXBlID0gVVNCX0NEQ19TRVRfTlRCX0ZPUk1BVDsKKwlyZXEud1ZhbHVlID0gY3B1X3RvX2xlMTYoVVNCX0NEQ19OQ01fTlRCMTZfRk9STUFUKTsKKwlyZXEud0luZGV4ID0gY3B1X3RvX2xlMTYoaWZhY2Vfbm8pOworCXJlcS53TGVuZ3RoID0gMDsKKworCWVyciA9IGNkY19uY21fZG9fcmVxdWVzdChjdHgsICZyZXEsIE5VTEwsIDAsIE5VTEwsIDEwMDApOworCWlmIChlcnIpCisJCXByX2RlYnVnKCJTZXR0aW5nIE5UQiBmb3JtYXQgdG8gMTYtYml0IGZhaWxlZFxuIik7CisKKwkvKiBzZXQgTWF4IERhdGFncmFtIFNpemUgKE1UVSkgKi8KKwlyZXEuYm1SZXF1ZXN0VHlwZSA9IFVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9JTiB8IFVTQl9SRUNJUF9JTlRFUkZBQ0U7CisJcmVxLmJOb3RpZmljYXRpb25UeXBlID0gVVNCX0NEQ19HRVRfTUFYX0RBVEFHUkFNX1NJWkU7CisJcmVxLndWYWx1ZSA9IDA7CisJcmVxLndJbmRleCA9IGNwdV90b19sZTE2KGlmYWNlX25vKTsKKwlyZXEud0xlbmd0aCA9IGNwdV90b19sZTE2KDIpOworCisJZXJyID0gY2RjX25jbV9kb19yZXF1ZXN0KGN0eCwgJnJlcSwgJm1heF9kYXRhZ3JhbV9zaXplLCAwLCBOVUxMLCAxMDAwKTsKKwlpZiAoZXJyKSB7CisJCXByX2RlYnVnKCIgR0VUX01BWF9EQVRBR1JBTV9TSVpFIGZhaWxlZCwgdXNpbmcgc2l6ZT0ldVxuIiwKKwkJCSBDRENfTkNNX01JTl9EQVRBR1JBTV9TSVpFKTsKKwkJLyogdXNlIGRlZmF1bHQgKi8KKwkJY3R4LT5tYXhfZGF0YWdyYW1fc2l6ZSA9IENEQ19OQ01fTUlOX0RBVEFHUkFNX1NJWkU7CisJfSBlbHNlIHsKKwkJY3R4LT5tYXhfZGF0YWdyYW1fc2l6ZSA9IGxlMTZfdG9fY3B1KG1heF9kYXRhZ3JhbV9zaXplKTsKKworCQlpZiAoY3R4LT5tYXhfZGF0YWdyYW1fc2l6ZSA8IENEQ19OQ01fTUlOX0RBVEFHUkFNX1NJWkUpCisJCQljdHgtPm1heF9kYXRhZ3JhbV9zaXplID0gQ0RDX05DTV9NSU5fREFUQUdSQU1fU0laRTsKKwkJZWxzZSBpZiAoY3R4LT5tYXhfZGF0YWdyYW1fc2l6ZSA+IENEQ19OQ01fTUFYX0RBVEFHUkFNX1NJWkUpCisJCQljdHgtPm1heF9kYXRhZ3JhbV9zaXplID0gQ0RDX05DTV9NQVhfREFUQUdSQU1fU0laRTsKKwl9CisKKwlpZiAoY3R4LT5uZXRkZXYtPm10dSAhPSAoY3R4LT5tYXhfZGF0YWdyYW1fc2l6ZSAtIEVUSF9ITEVOKSkKKwkJY3R4LT5uZXRkZXYtPm10dSA9IGN0eC0+bWF4X2RhdGFncmFtX3NpemUgLSBFVEhfSExFTjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorY2RjX25jbV9maW5kX2VuZHBvaW50cyhzdHJ1Y3QgY2RjX25jbV9jdHggKmN0eCwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplOworCXU4IGVwOworCisJZm9yIChlcCA9IDA7IGVwIDwgaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYk51bUVuZHBvaW50czsgZXArKykgeworCisJCWUgPSBpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZW5kcG9pbnQgKyBlcDsKKwkJc3dpdGNoIChlLT5kZXNjLmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKSB7CisJCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfSU5UOgorCQkJaWYgKHVzYl9lbmRwb2ludF9kaXJfaW4oJmUtPmRlc2MpKSB7CisJCQkJaWYgKGN0eC0+c3RhdHVzX2VwID09IE5VTEwpCisJCQkJCWN0eC0+c3RhdHVzX2VwID0gZTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfQlVMSzoKKwkJCWlmICh1c2JfZW5kcG9pbnRfZGlyX2luKCZlLT5kZXNjKSkgeworCQkJCWlmIChjdHgtPmluX2VwID09IE5VTEwpCisJCQkJCWN0eC0+aW5fZXAgPSBlOworCQkJfSBlbHNlIHsKKwkJCQlpZiAoY3R4LT5vdXRfZXAgPT0gTlVMTCkKKwkJCQkJY3R4LT5vdXRfZXAgPSBlOworCQkJfQorCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBjZGNfbmNtX2ZyZWUoc3RydWN0IGNkY19uY21fY3R4ICpjdHgpCit7CisJaWYgKGN0eCA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlkZWxfdGltZXJfc3luYygmY3R4LT50eF90aW1lcik7CisKKwlpZiAoY3R4LT5kYXRhX2NsYWltZWQpIHsKKwkJdXNiX3NldF9pbnRmZGF0YShjdHgtPmRhdGEsIE5VTEwpOworCQl1c2JfZHJpdmVyX3JlbGVhc2VfaW50ZXJmYWNlKGRyaXZlcl9vZihjdHgtPmludGYpLCBjdHgtPmRhdGEpOworCX0KKworCWlmIChjdHgtPmNvbnRyb2xfY2xhaW1lZCkgeworCQl1c2Jfc2V0X2ludGZkYXRhKGN0eC0+Y29udHJvbCwgTlVMTCk7CisJCXVzYl9kcml2ZXJfcmVsZWFzZV9pbnRlcmZhY2UoZHJpdmVyX29mKGN0eC0+aW50ZiksCisJCQkJCQkJCWN0eC0+Y29udHJvbCk7CisJfQorCisJaWYgKGN0eC0+dHhfcmVtX3NrYiAhPSBOVUxMKSB7CisJCWRldl9rZnJlZV9za2JfYW55KGN0eC0+dHhfcmVtX3NrYik7CisJCWN0eC0+dHhfcmVtX3NrYiA9IE5VTEw7CisJfQorCisJaWYgKGN0eC0+dHhfY3Vycl9za2IgIT0gTlVMTCkgeworCQlkZXZfa2ZyZWVfc2tiX2FueShjdHgtPnR4X2N1cnJfc2tiKTsKKwkJY3R4LT50eF9jdXJyX3NrYiA9IE5VTEw7CisJfQorCisJa2ZyZWUoY3R4KTsKK30KKworc3RhdGljIGludCBjZGNfbmNtX2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgY2RjX25jbV9jdHggKmN0eDsKKwlzdHJ1Y3QgdXNiX2RyaXZlciAqZHJpdmVyOworCXU4ICpidWY7CisJaW50IGxlbjsKKwlpbnQgdGVtcDsKKwl1OCBpZmFjZV9ubzsKKworCWN0eCA9IGttYWxsb2Moc2l6ZW9mKCpjdHgpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY3R4ID09IE5VTEwpCisJCWdvdG8gZXJyb3I7CisKKwltZW1zZXQoY3R4LCAwLCBzaXplb2YoKmN0eCkpOworCisJaW5pdF90aW1lcigmY3R4LT50eF90aW1lcik7CisJc3Bpbl9sb2NrX2luaXQoJmN0eC0+bXR4KTsKKwljdHgtPm5ldGRldiA9IGRldi0+bmV0OworCisJLyogc3RvcmUgY3R4IHBvaW50ZXIgaW4gZGV2aWNlIGRhdGEgZmllbGQgKi8KKwlkZXYtPmRhdGFbMF0gPSAodW5zaWduZWQgbG9uZyljdHg7CisKKwkvKiBnZXQgc29tZSBwb2ludGVycyAqLworCWRyaXZlciA9IGRyaXZlcl9vZihpbnRmKTsKKwlidWYgPSBpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZXh0cmE7CisJbGVuID0gaW50Zi0+Y3VyX2FsdHNldHRpbmctPmV4dHJhbGVuOworCisJY3R4LT51ZGV2ID0gZGV2LT51ZGV2OworCWN0eC0+aW50ZiA9IGludGY7CisKKwkvKiBwYXJzZSB0aHJvdWdoIGRlc2NyaXB0b3JzIGFzc29jaWF0ZWQgd2l0aCBjb250cm9sIGludGVyZmFjZSAqLworCXdoaWxlICgobGVuID4gMCkgJiYgKGJ1ZlswXSA+IDIpICYmIChidWZbMF0gPD0gbGVuKSkgeworCisJCWlmIChidWZbMV0gIT0gVVNCX0RUX0NTX0lOVEVSRkFDRSkKKwkJCWdvdG8gYWR2YW5jZTsKKworCQlzd2l0Y2ggKGJ1ZlsyXSkgeworCQljYXNlIFVTQl9DRENfVU5JT05fVFlQRToKKwkJCWlmIChidWZbMF0gPCBzaXplb2YoKihjdHgtPnVuaW9uX2Rlc2MpKSkKKwkJCQlicmVhazsKKworCQkJY3R4LT51bmlvbl9kZXNjID0KKwkJCQkJKGNvbnN0IHN0cnVjdCB1c2JfY2RjX3VuaW9uX2Rlc2MgKilidWY7CisKKwkJCWN0eC0+Y29udHJvbCA9IHVzYl9pZm51bV90b19pZihkZXYtPnVkZXYsCisJCQkJCWN0eC0+dW5pb25fZGVzYy0+Yk1hc3RlckludGVyZmFjZTApOworCQkJY3R4LT5kYXRhID0gdXNiX2lmbnVtX3RvX2lmKGRldi0+dWRldiwKKwkJCQkJY3R4LT51bmlvbl9kZXNjLT5iU2xhdmVJbnRlcmZhY2UwKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVVNCX0NEQ19FVEhFUk5FVF9UWVBFOgorCQkJaWYgKGJ1ZlswXSA8IHNpemVvZigqKGN0eC0+ZXRoZXJfZGVzYykpKQorCQkJCWJyZWFrOworCisJCQljdHgtPmV0aGVyX2Rlc2MgPQorCQkJCQkoY29uc3Qgc3RydWN0IHVzYl9jZGNfZXRoZXJfZGVzYyAqKWJ1ZjsKKworCQkJZGV2LT5oYXJkX210dSA9CisJCQkJbGUxNl90b19jcHUoY3R4LT5ldGhlcl9kZXNjLT53TWF4U2VnbWVudFNpemUpOworCisJCQlpZiAoZGV2LT5oYXJkX210dSA8CisJCQkgICAgKENEQ19OQ01fTUlOX0RBVEFHUkFNX1NJWkUgLSBFVEhfSExFTikpCisJCQkJZGV2LT5oYXJkX210dSA9CisJCQkJCUNEQ19OQ01fTUlOX0RBVEFHUkFNX1NJWkUgLSBFVEhfSExFTjsKKworCQkJZWxzZSBpZiAoZGV2LT5oYXJkX210dSA+CisJCQkJIChDRENfTkNNX01BWF9EQVRBR1JBTV9TSVpFIC0gRVRIX0hMRU4pKQorCQkJCWRldi0+aGFyZF9tdHUgPQorCQkJCQlDRENfTkNNX01BWF9EQVRBR1JBTV9TSVpFIC0gRVRIX0hMRU47CisJCQlicmVhazsKKworCQljYXNlIFVTQl9DRENfTkNNX1RZUEU6CisJCQlpZiAoYnVmWzBdIDwgc2l6ZW9mKCooY3R4LT5mdW5jX2Rlc2MpKSkKKwkJCQlicmVhazsKKworCQkJY3R4LT5mdW5jX2Rlc2MgPSAoY29uc3Qgc3RydWN0IHVzYl9jZGNfbmNtX2Rlc2MgKilidWY7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KK2FkdmFuY2U6CisJCS8qIGFkdmFuY2UgdG8gbmV4dCBkZXNjcmlwdG9yICovCisJCXRlbXAgPSBidWZbMF07CisJCWJ1ZiArPSB0ZW1wOworCQlsZW4gLT0gdGVtcDsKKwl9CisKKwkvKiBjaGVjayBpZiB3ZSBnb3QgZXZlcnl0aGluZyAqLworCWlmICgoY3R4LT5jb250cm9sID09IE5VTEwpIHx8IChjdHgtPmRhdGEgPT0gTlVMTCkgfHwKKwkgICAgKGN0eC0+ZXRoZXJfZGVzYyA9PSBOVUxMKSkKKwkJZ290byBlcnJvcjsKKworCS8qIGNsYWltIGludGVyZmFjZXMsIGlmIGFueSAqLworCWlmIChjdHgtPmRhdGEgIT0gaW50ZikgeworCQl0ZW1wID0gdXNiX2RyaXZlcl9jbGFpbV9pbnRlcmZhY2UoZHJpdmVyLCBjdHgtPmRhdGEsIGRldik7CisJCWlmICh0ZW1wKQorCQkJZ290byBlcnJvcjsKKwkJY3R4LT5kYXRhX2NsYWltZWQgPSAxOworCX0KKworCWlmIChjdHgtPmNvbnRyb2wgIT0gaW50ZikgeworCQl0ZW1wID0gdXNiX2RyaXZlcl9jbGFpbV9pbnRlcmZhY2UoZHJpdmVyLCBjdHgtPmNvbnRyb2wsIGRldik7CisJCWlmICh0ZW1wKQorCQkJZ290byBlcnJvcjsKKwkJY3R4LT5jb250cm9sX2NsYWltZWQgPSAxOworCX0KKworCWlmYWNlX25vID0gY3R4LT5kYXRhLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyOworCisJLyogcmVzZXQgZGF0YSBpbnRlcmZhY2UgKi8KKwl0ZW1wID0gdXNiX3NldF9pbnRlcmZhY2UoZGV2LT51ZGV2LCBpZmFjZV9ubywgMCk7CisJaWYgKHRlbXApCisJCWdvdG8gZXJyb3I7CisKKwkvKiBpbml0aWFsaXplIGRhdGEgaW50ZXJmYWNlICovCisJaWYgKGNkY19uY21fc2V0dXAoY3R4KSkKKwkJZ290byBlcnJvcjsKKworCS8qIGNvbmZpZ3VyZSBkYXRhIGludGVyZmFjZSAqLworCXRlbXAgPSB1c2Jfc2V0X2ludGVyZmFjZShkZXYtPnVkZXYsIGlmYWNlX25vLCAxKTsKKwlpZiAodGVtcCkKKwkJZ290byBlcnJvcjsKKworCWNkY19uY21fZmluZF9lbmRwb2ludHMoY3R4LCBjdHgtPmRhdGEpOworCWNkY19uY21fZmluZF9lbmRwb2ludHMoY3R4LCBjdHgtPmNvbnRyb2wpOworCisJaWYgKChjdHgtPmluX2VwID09IE5VTEwpIHx8IChjdHgtPm91dF9lcCA9PSBOVUxMKSB8fAorCSAgICAoY3R4LT5zdGF0dXNfZXAgPT0gTlVMTCkpCisJCWdvdG8gZXJyb3I7CisKKwlkZXYtPm5ldC0+ZXRodG9vbF9vcHMgPSAmY2RjX25jbV9ldGh0b29sX29wczsKKworCXVzYl9zZXRfaW50ZmRhdGEoY3R4LT5kYXRhLCBkZXYpOworCXVzYl9zZXRfaW50ZmRhdGEoY3R4LT5jb250cm9sLCBkZXYpOworCXVzYl9zZXRfaW50ZmRhdGEoY3R4LT5pbnRmLCBkZXYpOworCisJdGVtcCA9IHVzYm5ldF9nZXRfZXRoZXJuZXRfYWRkcihkZXYsIGN0eC0+ZXRoZXJfZGVzYy0+aU1BQ0FkZHJlc3MpOworCWlmICh0ZW1wKQorCQlnb3RvIGVycm9yOworCisJZGV2X2luZm8oJmRldi0+dWRldi0+ZGV2LCAiTUFDLUFkZHJlc3M6ICIKKwkJCQkiMHglMDJ4OjB4JTAyeDoweCUwMng6MHglMDJ4OjB4JTAyeDoweCUwMnhcbiIsCisJCQkJZGV2LT5uZXQtPmRldl9hZGRyWzBdLCBkZXYtPm5ldC0+ZGV2X2FkZHJbMV0sCisJCQkJZGV2LT5uZXQtPmRldl9hZGRyWzJdLCBkZXYtPm5ldC0+ZGV2X2FkZHJbM10sCisJCQkJZGV2LT5uZXQtPmRldl9hZGRyWzRdLCBkZXYtPm5ldC0+ZGV2X2FkZHJbNV0pOworCisJZGV2LT5pbiA9IHVzYl9yY3ZidWxrcGlwZShkZXYtPnVkZXYsCisJCWN0eC0+aW5fZXAtPmRlc2MuYkVuZHBvaW50QWRkcmVzcyAmIFVTQl9FTkRQT0lOVF9OVU1CRVJfTUFTSyk7CisJZGV2LT5vdXQgPSB1c2Jfc25kYnVsa3BpcGUoZGV2LT51ZGV2LAorCQljdHgtPm91dF9lcC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0VORFBPSU5UX05VTUJFUl9NQVNLKTsKKwlkZXYtPnN0YXR1cyA9IGN0eC0+c3RhdHVzX2VwOworCWRldi0+cnhfdXJiX3NpemUgPSBjdHgtPnJ4X21heDsKKworCS8qCisJICogV2Ugc2hvdWxkIGdldCBhbiBldmVudCB3aGVuIG5ldHdvcmsgY29ubmVjdGlvbiBpcyAiY29ubmVjdGVkIiBvcgorCSAqICJkaXNjb25uZWN0ZWQiLiBTZXQgbmV0d29yayBjb25uZWN0aW9uIGluICJkaXNjb25uZWN0ZWQiIHN0YXRlCisJICogKGNhcnJpZXIgaXMgT0ZGKSBkdXJpbmcgYXR0YWNoLCBzbyB0aGUgSVAgbmV0d29yayBzdGFjayBkb2VzIG5vdAorCSAqIHN0YXJ0IElQdjYgbmVnb3RpYXRpb24gYW5kIG1vcmUuCisJICovCisJbmV0aWZfY2Fycmllcl9vZmYoZGV2LT5uZXQpOworCWN0eC0+dHhfc3BlZWQgPSBjdHgtPnJ4X3NwZWVkID0gMDsKKwlyZXR1cm4gMDsKKworZXJyb3I6CisJY2RjX25jbV9mcmVlKChzdHJ1Y3QgY2RjX25jbV9jdHggKilkZXYtPmRhdGFbMF0pOworCWRldi0+ZGF0YVswXSA9IDA7CisJZGV2X2luZm8oJmRldi0+dWRldi0+ZGV2LCAiRGVzY3JpcHRvciBmYWlsdXJlXG4iKTsKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworc3RhdGljIHZvaWQgY2RjX25jbV91bmJpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgY2RjX25jbV9jdHggKmN0eCA9IChzdHJ1Y3QgY2RjX25jbV9jdHggKilkZXYtPmRhdGFbMF07CisJc3RydWN0IHVzYl9kcml2ZXIgKmRyaXZlcjsKKworCWlmIChjdHggPT0gTlVMTCkKKwkJcmV0dXJuOwkJLyogbm8gc2V0dXAgKi8KKworCWRyaXZlciA9IGRyaXZlcl9vZihpbnRmKTsKKworCXVzYl9zZXRfaW50ZmRhdGEoY3R4LT5kYXRhLCBOVUxMKTsKKwl1c2Jfc2V0X2ludGZkYXRhKGN0eC0+Y29udHJvbCwgTlVMTCk7CisJdXNiX3NldF9pbnRmZGF0YShjdHgtPmludGYsIE5VTEwpOworCisJLyogcmVsZWFzZSBpbnRlcmZhY2VzLCBpZiBhbnkgKi8KKwlpZiAoY3R4LT5kYXRhX2NsYWltZWQpIHsKKwkJdXNiX2RyaXZlcl9yZWxlYXNlX2ludGVyZmFjZShkcml2ZXIsIGN0eC0+ZGF0YSk7CisJCWN0eC0+ZGF0YV9jbGFpbWVkID0gMDsKKwl9CisKKwlpZiAoY3R4LT5jb250cm9sX2NsYWltZWQpIHsKKwkJdXNiX2RyaXZlcl9yZWxlYXNlX2ludGVyZmFjZShkcml2ZXIsIGN0eC0+Y29udHJvbCk7CisJCWN0eC0+Y29udHJvbF9jbGFpbWVkID0gMDsKKwl9CisKKwljZGNfbmNtX2ZyZWUoY3R4KTsKK30KKworc3RhdGljIHZvaWQgY2RjX25jbV96ZXJvX2ZpbGwodTggKnB0ciwgdTMyIGZpcnN0LCB1MzIgZW5kLCB1MzIgbWF4KQoreworCWlmIChmaXJzdCA+PSBtYXgpCisJCXJldHVybjsKKwlpZiAoZmlyc3QgPj0gZW5kKQorCQlyZXR1cm47CisJaWYgKGVuZCA+IG1heCkKKwkJZW5kID0gbWF4OworCW1lbXNldChwdHIgKyBmaXJzdCwgMCwgZW5kIC0gZmlyc3QpOworfQorCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKgorY2RjX25jbV9maWxsX3R4X2ZyYW1lKHN0cnVjdCBjZGNfbmNtX2N0eCAqY3R4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBza19idWZmICpza2Jfb3V0OworCXUzMiByZW07CisJdTMyIG9mZnNldDsKKwl1MzIgbGFzdF9vZmZzZXQ7CisJdTE2IG4gPSAwOworCXU4IHRpbWVvdXQgPSAwOworCisJLyogaWYgdGhlcmUgaXMgYSByZW1haW5pbmcgc2tiLCBpdCBnZXRzIHByaW9yaXR5ICovCisJaWYgKHNrYiAhPSBOVUxMKQorCQlzd2FwKHNrYiwgY3R4LT50eF9yZW1fc2tiKTsKKwllbHNlCisJCXRpbWVvdXQgPSAxOworCisJLyoKKwkgKiArLS0tLS0tLS0tLS0tLS0tLSsKKwkgKiB8IHNrYl9vdXQgICAgICAgIHwKKwkgKiArLS0tLS0tLS0tLS0tLS0tLSsKKwkgKiAgICAgICAgICAgXiBvZmZzZXQKKwkgKiAgICAgICAgXiBsYXN0X29mZnNldAorCSAqLworCisJLyogY2hlY2sgaWYgd2UgYXJlIHJlc3VtaW5nIGFuIE9VVCBza2IgKi8KKwlpZiAoY3R4LT50eF9jdXJyX3NrYiAhPSBOVUxMKSB7CisJCS8qIHBvcCB2YXJpYWJsZXMgKi8KKwkJc2tiX291dCA9IGN0eC0+dHhfY3Vycl9za2I7CisJCW9mZnNldCA9IGN0eC0+dHhfY3Vycl9vZmZzZXQ7CisJCWxhc3Rfb2Zmc2V0ID0gY3R4LT50eF9jdXJyX2xhc3Rfb2Zmc2V0OworCQluID0gY3R4LT50eF9jdXJyX2ZyYW1lX251bTsKKworCX0gZWxzZSB7CisJCS8qIHJlc2V0IHZhcmlhYmxlcyAqLworCQlza2Jfb3V0ID0gYWxsb2Nfc2tiKGN0eC0+dHhfbWF4LCBHRlBfQVRPTUlDKTsKKwkJaWYgKHNrYl9vdXQgPT0gTlVMTCkgeworCQkJaWYgKHNrYiAhPSBOVUxMKSB7CisJCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJCQljdHgtPm5ldGRldi0+c3RhdHMudHhfZHJvcHBlZCsrOworCQkJfQorCQkJZ290byBleGl0X25vX3NrYjsKKwkJfQorCisJCS8qIG1ha2Ugcm9vbSBmb3IgTlRIIGFuZCBORFAgKi8KKwkJb2Zmc2V0ID0gQUxJR04oc2l6ZW9mKHN0cnVjdCB1c2JfY2RjX25jbV9udGgxNiksCisJCQkJCWN0eC0+dHhfbmRwX21vZHVsdXMpICsKKwkJCQkJc2l6ZW9mKHN0cnVjdCB1c2JfY2RjX25jbV9uZHAxNikgKworCQkJCQkoY3R4LT50eF9tYXhfZGF0YWdyYW1zICsgMSkgKgorCQkJCQlzaXplb2Yoc3RydWN0IHVzYl9jZGNfbmNtX2RwZTE2KTsKKworCQkvKiBzdG9yZSBsYXN0IHZhbGlkIG9mZnNldCBiZWZvcmUgYWxpZ25tZW50ICovCisJCWxhc3Rfb2Zmc2V0ID0gb2Zmc2V0OworCQkvKiBhbGlnbiBmaXJzdCBEYXRhZ3JhbSBvZmZzZXQgY29ycmVjdGx5ICovCisJCW9mZnNldCA9IEFMSUdOKG9mZnNldCwgY3R4LT50eF9tb2R1bHVzKSArIGN0eC0+dHhfcmVtYWluZGVyOworCQkvKiB6ZXJvIGJ1ZmZlciB0aWxsIHRoZSBmaXJzdCBJUCBkYXRhZ3JhbSAqLworCQljZGNfbmNtX3plcm9fZmlsbChza2Jfb3V0LT5kYXRhLCAwLCBvZmZzZXQsIG9mZnNldCk7CisJCW4gPSAwOworCQljdHgtPnR4X2N1cnJfZnJhbWVfbnVtID0gMDsKKwl9CisKKwlmb3IgKDsgbiA8IGN0eC0+dHhfbWF4X2RhdGFncmFtczsgbisrKSB7CisJCS8qIGNoZWNrIGlmIGVuZCBvZiB0cmFuc21pdCBidWZmZXIgaXMgcmVhY2hlZCAqLworCQlpZiAob2Zmc2V0ID49IGN0eC0+dHhfbWF4KQorCQkJYnJlYWs7CisKKwkJLyogY29tcHV0ZSBtYXhpbXVtIGJ1ZmZlciBzaXplICovCisJCXJlbSA9IGN0eC0+dHhfbWF4IC0gb2Zmc2V0OworCisJCWlmIChza2IgPT0gTlVMTCkgeworCQkJc2tiID0gY3R4LT50eF9yZW1fc2tiOworCQkJY3R4LT50eF9yZW1fc2tiID0gTlVMTDsKKworCQkJLyogY2hlY2sgZm9yIGVuZCBvZiBza2IgKi8KKwkJCWlmIChza2IgPT0gTlVMTCkKKwkJCQlicmVhazsKKwkJfQorCisJCWlmIChza2ItPmxlbiA+IHJlbSkgeworCQkJaWYgKG4gPT0gMCkgeworCQkJCS8qIHdvbid0IGZpdCwgTVRVIHByb2JsZW0/ICovCisJCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJCQlza2IgPSBOVUxMOworCQkJCWN0eC0+bmV0ZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CisJCQl9IGVsc2UgeworCQkJCS8qIG5vIHJvb20gZm9yIHNrYiAtIHN0b3JlIGZvciBsYXRlciAqLworCQkJCWlmIChjdHgtPnR4X3JlbV9za2IgIT0gTlVMTCkgeworCQkJCQlkZXZfa2ZyZWVfc2tiX2FueShjdHgtPnR4X3JlbV9za2IpOworCQkJCQljdHgtPm5ldGRldi0+c3RhdHMudHhfZHJvcHBlZCsrOworCQkJCX0KKwkJCQljdHgtPnR4X3JlbV9za2IgPSBza2I7CisJCQkJc2tiID0gTlVMTDsKKworCQkJCS8qIGxvb3Agb25lIG1vcmUgdGltZSAqLworCQkJCXRpbWVvdXQgPSAxOworCQkJfQorCQkJYnJlYWs7CisJCX0KKworCQltZW1jcHkoKCh1OCAqKXNrYl9vdXQtPmRhdGEpICsgb2Zmc2V0LCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKKworCQljdHgtPnR4X25jbS5kcGUxNltuXS53RGF0YWdyYW1MZW5ndGggPSBjcHVfdG9fbGUxNihza2ItPmxlbik7CisJCWN0eC0+dHhfbmNtLmRwZTE2W25dLndEYXRhZ3JhbUluZGV4ID0gY3B1X3RvX2xlMTYob2Zmc2V0KTsKKworCQkvKiB1cGRhdGUgb2Zmc2V0ICovCisJCW9mZnNldCArPSBza2ItPmxlbjsKKworCQkvKiBzdG9yZSBsYXN0IHZhbGlkIG9mZnNldCBiZWZvcmUgYWxpZ25tZW50ICovCisJCWxhc3Rfb2Zmc2V0ID0gb2Zmc2V0OworCisJCS8qIGFsaWduIG9mZnNldCBjb3JyZWN0bHkgKi8KKwkJb2Zmc2V0ID0gQUxJR04ob2Zmc2V0LCBjdHgtPnR4X21vZHVsdXMpICsgY3R4LT50eF9yZW1haW5kZXI7CisKKwkJLyogemVybyBwYWRkaW5nICovCisJCWNkY19uY21femVyb19maWxsKHNrYl9vdXQtPmRhdGEsIGxhc3Rfb2Zmc2V0LCBvZmZzZXQsCisJCQkJCQkJCWN0eC0+dHhfbWF4KTsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJc2tiID0gTlVMTDsKKwl9CisKKwkvKiBmcmVlIHVwIGFueSBkYW5nbGluZyBza2IgKi8KKwlpZiAoc2tiICE9IE5VTEwpIHsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJc2tiID0gTlVMTDsKKwkJY3R4LT5uZXRkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKKwl9CisKKwljdHgtPnR4X2N1cnJfZnJhbWVfbnVtID0gbjsKKworCWlmIChuID09IDApIHsKKwkJLyogd2FpdCBmb3IgbW9yZSBmcmFtZXMgKi8KKwkJLyogcHVzaCB2YXJpYWJsZXMgKi8KKwkJY3R4LT50eF9jdXJyX3NrYiA9IHNrYl9vdXQ7CisJCWN0eC0+dHhfY3Vycl9vZmZzZXQgPSBvZmZzZXQ7CisJCWN0eC0+dHhfY3Vycl9sYXN0X29mZnNldCA9IGxhc3Rfb2Zmc2V0OworCQlnb3RvIGV4aXRfbm9fc2tiOworCisJfSBlbHNlIGlmICgobiA8IGN0eC0+dHhfbWF4X2RhdGFncmFtcykgJiYgKHRpbWVvdXQgPT0gMCkpIHsKKwkJLyogd2FpdCBmb3IgbW9yZSBmcmFtZXMgKi8KKwkJLyogcHVzaCB2YXJpYWJsZXMgKi8KKwkJY3R4LT50eF9jdXJyX3NrYiA9IHNrYl9vdXQ7CisJCWN0eC0+dHhfY3Vycl9vZmZzZXQgPSBvZmZzZXQ7CisJCWN0eC0+dHhfY3Vycl9sYXN0X29mZnNldCA9IGxhc3Rfb2Zmc2V0OworCQkvKiBzZXQgdGhlIHBlbmRpbmcgY291bnQgKi8KKwkJaWYgKG4gPCBDRENfTkNNX1JFU1RBUlRfVElNRVJfREFUQUdSQU1fQ05UKQorCQkJY3R4LT50eF90aW1lcl9wZW5kaW5nID0gMjsKKwkJZ290byBleGl0X25vX3NrYjsKKworCX0gZWxzZSB7CisJCS8qIGZyYW1lIGdvZXMgb3V0ICovCisJCS8qIHZhcmlhYmxlcyB3aWxsIGJlIHJlc2V0IGF0IG5leHQgY2FsbCAqLworCX0KKworCS8qIGNoZWNrIGZvciBvdmVyZmxvdyAqLworCWlmIChsYXN0X29mZnNldCA+IGN0eC0+dHhfbWF4KQorCQlsYXN0X29mZnNldCA9IGN0eC0+dHhfbWF4OworCisJLyogcmV2ZXJ0IG9mZnNldCAqLworCW9mZnNldCA9IGxhc3Rfb2Zmc2V0OworCisJLyoKKwkgKiBJZiBjb2xsZWN0ZWQgZGF0YSBzaXplIGlzIGxlc3Mgb3IgZXF1YWwgQ0RDX05DTV9NSU5fVFhfUEtUIGJ5dGVzLAorCSAqIHdlIHNlbmQgYnVmZmVycyBhcyBpdCBpcy4gSWYgd2UgZ2V0IG1vcmUgZGF0YSwgaXQgd291bGQgYmUgbW9yZQorCSAqIGVmZmljaWVudCBmb3IgVVNCIEhTIG1vYmlsZSBkZXZpY2Ugd2l0aCBETUEgZW5naW5lIHRvIHJlY2VpdmUgYSBmdWxsCisJICogc2l6ZSBOVEIsIHRoYW4gY2FuY2VsaW5nIERNQSB0cmFuc2ZlciBhbmQgcmVjZWl2aW5nIGEgc2hvcnQgcGFja2V0LgorCSAqLworCWlmIChvZmZzZXQgPiBDRENfTkNNX01JTl9UWF9QS1QpCisJCW9mZnNldCA9IGN0eC0+dHhfbWF4OworCisJLyogZmluYWwgemVybyBwYWRkaW5nICovCisJY2RjX25jbV96ZXJvX2ZpbGwoc2tiX291dC0+ZGF0YSwgbGFzdF9vZmZzZXQsIG9mZnNldCwgY3R4LT50eF9tYXgpOworCisJLyogc3RvcmUgbGFzdCBvZmZzZXQgKi8KKwlsYXN0X29mZnNldCA9IG9mZnNldDsKKworCWlmICgobGFzdF9vZmZzZXQgPCBjdHgtPnR4X21heCkgJiYgKChsYXN0X29mZnNldCAlCisJCQlsZTE2X3RvX2NwdShjdHgtPm91dF9lcC0+ZGVzYy53TWF4UGFja2V0U2l6ZSkpID09IDApKSB7CisJCS8qIGZvcmNlIHNob3J0IHBhY2tldCAqLworCQkqKCgodTggKilza2Jfb3V0LT5kYXRhKSArIGxhc3Rfb2Zmc2V0KSA9IDA7CisJCWxhc3Rfb2Zmc2V0Kys7CisJfQorCisJLyogemVybyB0aGUgcmVzdCBvZiB0aGUgRFBFcyBwbHVzIHRoZSBsYXN0IE5VTEwgZW50cnkgKi8KKwlmb3IgKDsgbiA8PSBDRENfTkNNX0RQVF9EQVRBR1JBTVNfTUFYOyBuKyspIHsKKwkJY3R4LT50eF9uY20uZHBlMTZbbl0ud0RhdGFncmFtTGVuZ3RoID0gMDsKKwkJY3R4LT50eF9uY20uZHBlMTZbbl0ud0RhdGFncmFtSW5kZXggPSAwOworCX0KKworCS8qIGZpbGwgb3V0IDE2LWJpdCBOVEIgaGVhZGVyICovCisJY3R4LT50eF9uY20ubnRoMTYuZHdTaWduYXR1cmUgPSBjcHVfdG9fbGUzMihVU0JfQ0RDX05DTV9OVEgxNl9TSUdOKTsKKwljdHgtPnR4X25jbS5udGgxNi53SGVhZGVyTGVuZ3RoID0KKwkJCQkJY3B1X3RvX2xlMTYoc2l6ZW9mKGN0eC0+dHhfbmNtLm50aDE2KSk7CisJY3R4LT50eF9uY20ubnRoMTYud1NlcXVlbmNlID0gY3B1X3RvX2xlMTYoY3R4LT50eF9zZXEpOworCWN0eC0+dHhfbmNtLm50aDE2LndCbG9ja0xlbmd0aCA9IGNwdV90b19sZTE2KGxhc3Rfb2Zmc2V0KTsKKwljdHgtPnR4X25jbS5udGgxNi53RnBJbmRleCA9IEFMSUdOKHNpemVvZihzdHJ1Y3QgdXNiX2NkY19uY21fbnRoMTYpLAorCQkJCQkJCWN0eC0+dHhfbmRwX21vZHVsdXMpOworCisJbWVtY3B5KHNrYl9vdXQtPmRhdGEsICYoY3R4LT50eF9uY20ubnRoMTYpLCBzaXplb2YoY3R4LT50eF9uY20ubnRoMTYpKTsKKwljdHgtPnR4X3NlcSsrOworCisJLyogZmlsbCBvdXQgMTYtYml0IE5EUCB0YWJsZSAqLworCWN0eC0+dHhfbmNtLm5kcDE2LmR3U2lnbmF0dXJlID0KKwkJCQljcHVfdG9fbGUzMihVU0JfQ0RDX05DTV9ORFAxNl9OT0NSQ19TSUdOKTsKKwlyZW0gPSBzaXplb2YoY3R4LT50eF9uY20ubmRwMTYpICsgKChjdHgtPnR4X2N1cnJfZnJhbWVfbnVtICsgMSkgKgorCQkJCQlzaXplb2Yoc3RydWN0IHVzYl9jZGNfbmNtX2RwZTE2KSk7CisJY3R4LT50eF9uY20ubmRwMTYud0xlbmd0aCA9IGNwdV90b19sZTE2KHJlbSk7CisJY3R4LT50eF9uY20ubmRwMTYud05leHRGcEluZGV4ID0gMDsgLyogcmVzZXJ2ZWQgKi8KKworCW1lbWNweSgoKHU4ICopc2tiX291dC0+ZGF0YSkgKyBjdHgtPnR4X25jbS5udGgxNi53RnBJbmRleCwKKwkJCQkJCSYoY3R4LT50eF9uY20ubmRwMTYpLAorCQkJCQkJc2l6ZW9mKGN0eC0+dHhfbmNtLm5kcDE2KSk7CisKKwltZW1jcHkoKCh1OCAqKXNrYl9vdXQtPmRhdGEpICsgY3R4LT50eF9uY20ubnRoMTYud0ZwSW5kZXggKworCQkJCQlzaXplb2YoY3R4LT50eF9uY20ubmRwMTYpLAorCQkJCQkmKGN0eC0+dHhfbmNtLmRwZTE2KSwKKwkJCQkJKGN0eC0+dHhfY3Vycl9mcmFtZV9udW0gKyAxKSAqCisJCQkJCXNpemVvZihzdHJ1Y3QgdXNiX2NkY19uY21fZHBlMTYpKTsKKworCS8qIHNldCBmcmFtZSBsZW5ndGggKi8KKwlza2JfcHV0KHNrYl9vdXQsIGxhc3Rfb2Zmc2V0KTsKKworCS8qIHJldHVybiBza2IgKi8KKwljdHgtPnR4X2N1cnJfc2tiID0gTlVMTDsKKwlyZXR1cm4gc2tiX291dDsKKworZXhpdF9ub19za2I6CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIGNkY19uY21fdHhfdGltZW91dF9zdGFydChzdHJ1Y3QgY2RjX25jbV9jdHggKmN0eCkKK3sKKwkvKiBzdGFydCB0aW1lciwgaWYgbm90IGFscmVhZHkgc3RhcnRlZCAqLworCWlmICh0aW1lcl9wZW5kaW5nKCZjdHgtPnR4X3RpbWVyKSA9PSAwKSB7CisJCWN0eC0+dHhfdGltZXIuZnVuY3Rpb24gPSAmY2RjX25jbV90eF90aW1lb3V0OworCQljdHgtPnR4X3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZyljdHg7CisJCWN0eC0+dHhfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyAoKEhaICsgOTk5KSAvIDEwMDApOworCQlhZGRfdGltZXIoJmN0eC0+dHhfdGltZXIpOworCX0KK30KKworc3RhdGljIHZvaWQgY2RjX25jbV90eF90aW1lb3V0KHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBjZGNfbmNtX2N0eCAqY3R4ID0gKHN0cnVjdCBjZGNfbmNtX2N0eCAqKWFyZzsKKwl1OCByZXN0YXJ0OworCisJc3Bpbl9sb2NrKCZjdHgtPm10eCk7CisJaWYgKGN0eC0+dHhfdGltZXJfcGVuZGluZyAhPSAwKSB7CisJCWN0eC0+dHhfdGltZXJfcGVuZGluZy0tOworCQlyZXN0YXJ0ID0gMTsKKwl9IGVsc2UKKwkJcmVzdGFydCA9IDA7CisKKwlzcGluX3VubG9jaygmY3R4LT5tdHgpOworCisJaWYgKHJlc3RhcnQpCisJCWNkY19uY21fdHhfdGltZW91dF9zdGFydChjdHgpOworCWVsc2UgaWYgKGN0eC0+bmV0ZGV2ICE9IE5VTEwpCisJCXVzYm5ldF9zdGFydF94bWl0KE5VTEwsIGN0eC0+bmV0ZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCBza19idWZmICoKK2NkY19uY21fdHhfZml4dXAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBnZnBfdCBmbGFncykKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiX291dDsKKwlzdHJ1Y3QgY2RjX25jbV9jdHggKmN0eCA9IChzdHJ1Y3QgY2RjX25jbV9jdHggKilkZXYtPmRhdGFbMF07CisJdTggbmVlZF90aW1lciA9IDA7CisKKwkvKgorCSAqIFRoZSBFdGhlcm5ldCBBUEkgd2UgYXJlIHVzaW5nIGRvZXMgbm90IHN1cHBvcnQgdHJhbnNtaXR0aW5nCisJICogbXVsdGlwbGUgRXRoZXJuZXQgZnJhbWVzIGluIGEgc2luZ2xlIGNhbGwuIFRoaXMgZHJpdmVyIHdpbGwKKwkgKiBhY2N1bXVsYXRlIG11bHRpcGxlIEV0aGVybmV0IGZyYW1lcyBhbmQgc2VuZCBvdXQgYSBsYXJnZXIKKwkgKiBVU0IgZnJhbWUgd2hlbiB0aGUgVVNCIGJ1ZmZlciBpcyBmdWxsIG9yIHdoZW4gYSBzaW5nbGUgamlmZmllcworCSAqIHRpbWVvdXQgaGFwcGVucy4KKwkgKi8KKwlpZiAoY3R4ID09IE5VTEwpCisJCWdvdG8gZXJyb3I7CisKKwlzcGluX2xvY2soJmN0eC0+bXR4KTsKKwlza2Jfb3V0ID0gY2RjX25jbV9maWxsX3R4X2ZyYW1lKGN0eCwgc2tiKTsKKwlpZiAoY3R4LT50eF9jdXJyX3NrYiAhPSBOVUxMKQorCQluZWVkX3RpbWVyID0gMTsKKwlzcGluX3VubG9jaygmY3R4LT5tdHgpOworCisJLyogU3RhcnQgdGltZXIsIGlmIHRoZXJlIGlzIGEgcmVtYWluaW5nIHNrYiAqLworCWlmIChuZWVkX3RpbWVyKQorCQljZGNfbmNtX3R4X3RpbWVvdXRfc3RhcnQoY3R4KTsKKworCWlmIChza2Jfb3V0KQorCQlkZXYtPm5ldC0+c3RhdHMudHhfcGFja2V0cyArPSBjdHgtPnR4X2N1cnJfZnJhbWVfbnVtOworCXJldHVybiBza2Jfb3V0OworCitlcnJvcjoKKwlpZiAoc2tiICE9IE5VTEwpCisJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCBjZGNfbmNtX3J4X2ZpeHVwKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYl9pbikKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBjZGNfbmNtX2N0eCAqY3R4OworCWludCBzdW1sZW47CisJaW50IGFjdGxlbjsKKwlpbnQgdGVtcDsKKwlpbnQgbmZyYW1lczsKKwlpbnQgeDsKKwlpbnQgb2Zmc2V0OworCisJY3R4ID0gKHN0cnVjdCBjZGNfbmNtX2N0eCAqKWRldi0+ZGF0YVswXTsKKwlpZiAoY3R4ID09IE5VTEwpCisJCWdvdG8gZXJyb3I7CisKKwlhY3RsZW4gPSBza2JfaW4tPmxlbjsKKwlzdW1sZW4gPSBDRENfTkNNX05UQl9NQVhfU0laRV9SWDsKKworCWlmIChhY3RsZW4gPCAoc2l6ZW9mKGN0eC0+cnhfbmNtLm50aDE2KSArIHNpemVvZihjdHgtPnJ4X25jbS5uZHAxNikpKSB7CisJCXByX2RlYnVnKCJmcmFtZSB0b28gc2hvcnRcbiIpOworCQlnb3RvIGVycm9yOworCX0KKworCW1lbWNweSgmKGN0eC0+cnhfbmNtLm50aDE2KSwgKCh1OCAqKXNrYl9pbi0+ZGF0YSksCisJCQkJCQlzaXplb2YoY3R4LT5yeF9uY20ubnRoMTYpKTsKKworCWlmIChsZTMyX3RvX2NwdShjdHgtPnJ4X25jbS5udGgxNi5kd1NpZ25hdHVyZSkgIT0KKwkgICAgVVNCX0NEQ19OQ01fTlRIMTZfU0lHTikgeworCQlwcl9kZWJ1ZygiaW52YWxpZCBOVEgxNiBzaWduYXR1cmUgPCV1PlxuIiwKKwkJCSBsZTMyX3RvX2NwdShjdHgtPnJ4X25jbS5udGgxNi5kd1NpZ25hdHVyZSkpOworCQlnb3RvIGVycm9yOworCX0KKworCXRlbXAgPSBsZTE2X3RvX2NwdShjdHgtPnJ4X25jbS5udGgxNi53QmxvY2tMZW5ndGgpOworCWlmICh0ZW1wID4gc3VtbGVuKSB7CisJCXByX2RlYnVnKCJ1bnN1cHBvcnRlZCBOVEIgYmxvY2sgbGVuZ3RoICV1LyV1XG4iLCB0ZW1wLCBzdW1sZW4pOworCQlnb3RvIGVycm9yOworCX0KKworCXRlbXAgPSBsZTE2X3RvX2NwdShjdHgtPnJ4X25jbS5udGgxNi53RnBJbmRleCk7CisJaWYgKCh0ZW1wICsgc2l6ZW9mKGN0eC0+cnhfbmNtLm5kcDE2KSkgPiBhY3RsZW4pIHsKKwkJcHJfZGVidWcoImludmFsaWQgRFBUMTYgaW5kZXhcbiIpOworCQlnb3RvIGVycm9yOworCX0KKworCW1lbWNweSgmKGN0eC0+cnhfbmNtLm5kcDE2KSwgKCh1OCAqKXNrYl9pbi0+ZGF0YSkgKyB0ZW1wLAorCQkJCQkJc2l6ZW9mKGN0eC0+cnhfbmNtLm5kcDE2KSk7CisKKwlpZiAobGUzMl90b19jcHUoY3R4LT5yeF9uY20ubmRwMTYuZHdTaWduYXR1cmUpICE9CisJICAgIFVTQl9DRENfTkNNX05EUDE2X05PQ1JDX1NJR04pIHsKKwkJcHJfZGVidWcoImludmFsaWQgRFBUMTYgc2lnbmF0dXJlIDwldT5cbiIsCisJCQkgbGUzMl90b19jcHUoY3R4LT5yeF9uY20ubmRwMTYuZHdTaWduYXR1cmUpKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlpZiAobGUxNl90b19jcHUoY3R4LT5yeF9uY20ubmRwMTYud0xlbmd0aCkgPAorCSAgICBVU0JfQ0RDX05DTV9ORFAxNl9MRU5HVEhfTUlOKSB7CisJCXByX2RlYnVnKCJpbnZhbGlkIERQVDE2IGxlbmd0aCA8JXU+XG4iLAorCQkJIGxlMzJfdG9fY3B1KGN0eC0+cnhfbmNtLm5kcDE2LmR3U2lnbmF0dXJlKSk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJbmZyYW1lcyA9ICgobGUxNl90b19jcHUoY3R4LT5yeF9uY20ubmRwMTYud0xlbmd0aCkgLQorCQkJCQlzaXplb2Yoc3RydWN0IHVzYl9jZGNfbmNtX25kcDE2KSkgLworCQkJCQlzaXplb2Yoc3RydWN0IHVzYl9jZGNfbmNtX2RwZTE2KSk7CisJbmZyYW1lcy0tOyAvKiB3ZSBwcm9jZXNzIE5EUCBlbnRyaWVzIGV4Y2VwdCBmb3IgdGhlIGxhc3Qgb25lICovCisKKwlwcl9kZWJ1ZygibmZyYW1lcyA9ICV1XG4iLCBuZnJhbWVzKTsKKworCXRlbXAgKz0gc2l6ZW9mKGN0eC0+cnhfbmNtLm5kcDE2KTsKKworCWlmICgodGVtcCArIG5mcmFtZXMgKiAoc2l6ZW9mKHN0cnVjdCB1c2JfY2RjX25jbV9kcGUxNikpKSA+IGFjdGxlbikgeworCQlwcl9kZWJ1ZygiSW52YWxpZCBuZnJhbWVzID0gJWRcbiIsIG5mcmFtZXMpOworCQlnb3RvIGVycm9yOworCX0KKworCWlmIChuZnJhbWVzID4gQ0RDX05DTV9EUFRfREFUQUdSQU1TX01BWCkgeworCQlwcl9kZWJ1ZygiVHJ1bmNhdGluZyBudW1iZXIgb2YgZnJhbWVzIGZyb20gJXUgdG8gJXVcbiIsCisJCQkJCW5mcmFtZXMsIENEQ19OQ01fRFBUX0RBVEFHUkFNU19NQVgpOworCQluZnJhbWVzID0gQ0RDX05DTV9EUFRfREFUQUdSQU1TX01BWDsKKwl9CisKKwltZW1jcHkoJihjdHgtPnJ4X25jbS5kcGUxNiksICgodTggKilza2JfaW4tPmRhdGEpICsgdGVtcCwKKwkJCQluZnJhbWVzICogKHNpemVvZihzdHJ1Y3QgdXNiX2NkY19uY21fZHBlMTYpKSk7CisKKwlmb3IgKHggPSAwOyB4IDwgbmZyYW1lczsgeCsrKSB7CisJCW9mZnNldCA9IGxlMTZfdG9fY3B1KGN0eC0+cnhfbmNtLmRwZTE2W3hdLndEYXRhZ3JhbUluZGV4KTsKKwkJdGVtcCA9IGxlMTZfdG9fY3B1KGN0eC0+cnhfbmNtLmRwZTE2W3hdLndEYXRhZ3JhbUxlbmd0aCk7CisKKwkJLyoKKwkJICogQ0RDIE5DTSBjaC4gMy43CisJCSAqIEFsbCBlbnRyaWVzIGFmdGVyIGZpcnN0IE5VTEwgZW50cnkgYXJlIHRvIGJlIGlnbm9yZWQKKwkJICovCisJCWlmICgob2Zmc2V0ID09IDApIHx8ICh0ZW1wID09IDApKSB7CisJCQlpZiAoIXgpCisJCQkJZ290byBlcnJvcjsgLyogZW1wdHkgTlRCICovCisJCQlicmVhazsKKwkJfQorCisJCS8qIHNhbml0eSBjaGVja2luZyAqLworCQlpZiAoKChvZmZzZXQgKyB0ZW1wKSA+IGFjdGxlbikgfHwKKwkJICAgICh0ZW1wID4gQ0RDX05DTV9NQVhfREFUQUdSQU1fU0laRSkgfHwgKHRlbXAgPCBFVEhfSExFTikpIHsKKwkJCXByX2RlYnVnKCJpbnZhbGlkIGZyYW1lIGRldGVjdGVkIChpZ25vcmVkKSIKKwkJCQkib2Zmc2V0WyV1XT0ldSwgbGVuZ3RoPSV1LCBza2I9JXBcbiIsCisJCQkJCQkJeCwgb2Zmc2V0LCB0ZW1wLCBza2IpOworCQkJaWYgKCF4KQorCQkJCWdvdG8gZXJyb3I7CisJCQlicmVhazsKKworCQl9IGVsc2UgeworCQkJc2tiID0gc2tiX2Nsb25lKHNrYl9pbiwgR0ZQX0FUT01JQyk7CisJCQlza2ItPmxlbiA9IHRlbXA7CisJCQlza2ItPmRhdGEgPSAoKHU4ICopc2tiX2luLT5kYXRhKSArIG9mZnNldDsKKwkJCXNrYl9zZXRfdGFpbF9wb2ludGVyKHNrYiwgdGVtcCk7CisJCQl1c2JuZXRfc2tiX3JldHVybihkZXYsIHNrYik7CisJCX0KKwl9CisJcmV0dXJuIDE7CitlcnJvcjoKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2NkY19uY21fc3BlZWRfY2hhbmdlKHN0cnVjdCBjZGNfbmNtX2N0eCAqY3R4LAorCQkgICAgIHN0cnVjdCBjb25uZWN0aW9uX3NwZWVkX2NoYW5nZSAqZGF0YSkKK3sKKwl1aW50MzJfdCByeF9zcGVlZCA9IGxlMzJfdG9fY3B1KGRhdGEtPlVTQml0UmF0ZSk7CisJdWludDMyX3QgdHhfc3BlZWQgPSBsZTMyX3RvX2NwdShkYXRhLT5EU0JpdFJhdGUpOworCisJLyoKKwkgKiBDdXJyZW50bHkgdGhlIFVTQi1ORVQgQVBJIGRvZXMgbm90IHN1cHBvcnQgcmVwb3J0aW5nIHRoZSBhY3R1YWwKKwkgKiBkZXZpY2Ugc3BlZWQuIERvIHByaW50IGl0IGluc3RlYWQuCisJICovCisJaWYgKCh0eF9zcGVlZCAhPSBjdHgtPnR4X3NwZWVkKSB8fCAocnhfc3BlZWQgIT0gY3R4LT5yeF9zcGVlZCkpIHsKKwkJY3R4LT50eF9zcGVlZCA9IHR4X3NwZWVkOworCQljdHgtPnJ4X3NwZWVkID0gcnhfc3BlZWQ7CisKKwkJaWYgKCh0eF9zcGVlZCA+IDEwMDAwMDApICYmIChyeF9zcGVlZCA+IDEwMDAwMDApKSB7CisJCQlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FCisJCQkJIjogJXM6ICV1IG1iaXQvcyBkb3dubGluayAiCisJCQkJIiV1IG1iaXQvcyB1cGxpbmtcbiIsCisJCQkJY3R4LT5uZXRkZXYtPm5hbWUsCisJCQkJKHVuc2lnbmVkIGludCkocnhfc3BlZWQgLyAxMDAwMDAwVSksCisJCQkJKHVuc2lnbmVkIGludCkodHhfc3BlZWQgLyAxMDAwMDAwVSkpOworCQl9IGVsc2UgeworCQkJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRQorCQkJCSI6ICVzOiAldSBrYml0L3MgZG93bmxpbmsgIgorCQkJCSIldSBrYml0L3MgdXBsaW5rXG4iLAorCQkJCWN0eC0+bmV0ZGV2LT5uYW1lLAorCQkJCSh1bnNpZ25lZCBpbnQpKHJ4X3NwZWVkIC8gMTAwMFUpLAorCQkJCSh1bnNpZ25lZCBpbnQpKHR4X3NwZWVkIC8gMTAwMFUpKTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgY2RjX25jbV9zdGF0dXMoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IGNkY19uY21fY3R4ICpjdHg7CisJc3RydWN0IHVzYl9jZGNfbm90aWZpY2F0aW9uICpldmVudDsKKworCWN0eCA9IChzdHJ1Y3QgY2RjX25jbV9jdHggKilkZXYtPmRhdGFbMF07CisKKwlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoIDwgc2l6ZW9mKCpldmVudCkpCisJCXJldHVybjsKKworCS8qIHRlc3QgZm9yIHNwbGl0IGRhdGEgaW4gOC1ieXRlIGNodW5rcyAqLworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoRVZFTlRfU1RTX1NQTElULCAmZGV2LT5mbGFncykpIHsKKwkJY2RjX25jbV9zcGVlZF9jaGFuZ2UoY3R4LAorCQkgICAgICAoc3RydWN0IGNvbm5lY3Rpb25fc3BlZWRfY2hhbmdlICopdXJiLT50cmFuc2Zlcl9idWZmZXIpOworCQlyZXR1cm47CisJfQorCisJZXZlbnQgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKworCXN3aXRjaCAoZXZlbnQtPmJOb3RpZmljYXRpb25UeXBlKSB7CisJY2FzZSBVU0JfQ0RDX05PVElGWV9ORVRXT1JLX0NPTk5FQ1RJT046CisJCS8qCisJCSAqIEFjY29yZGluZyB0byB0aGUgQ0RDIE5DTSBzcGVjaWZpY2F0aW9uIGNoLjcuMQorCQkgKiBVU0JfQ0RDX05PVElGWV9ORVRXT1JLX0NPTk5FQ1RJT04gbm90aWZpY2F0aW9uIHNoYWxsIGJlCisJCSAqIHNlbnQgYnkgZGV2aWNlIGFmdGVyIFVTQl9DRENfTk9USUZZX1NQRUVEX0NIQU5HRS4KKwkJICovCisJCWN0eC0+Y29ubmVjdGVkID0gZXZlbnQtPndWYWx1ZTsKKworCQlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICVzOiBuZXR3b3JrIGNvbm5lY3Rpb246IgorCQkJIiAlc2Nvbm5lY3RlZFxuIiwKKwkJCWN0eC0+bmV0ZGV2LT5uYW1lLCBjdHgtPmNvbm5lY3RlZCA/ICIiIDogImRpcyIpOworCisJCWlmIChjdHgtPmNvbm5lY3RlZCkKKwkJCW5ldGlmX2NhcnJpZXJfb24oZGV2LT5uZXQpOworCQllbHNlIHsKKwkJCW5ldGlmX2NhcnJpZXJfb2ZmKGRldi0+bmV0KTsKKwkJCWN0eC0+dHhfc3BlZWQgPSBjdHgtPnJ4X3NwZWVkID0gMDsKKwkJfQorCQlicmVhazsKKworCWNhc2UgVVNCX0NEQ19OT1RJRllfU1BFRURfQ0hBTkdFOgorCQlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoIDwKKwkJICAgIChzaXplb2YoKmV2ZW50KSArIHNpemVvZihzdHJ1Y3QgY29ubmVjdGlvbl9zcGVlZF9jaGFuZ2UpKSkKKwkJCXNldF9iaXQoRVZFTlRfU1RTX1NQTElULCAmZGV2LT5mbGFncyk7CisJCWVsc2UKKwkJCWNkY19uY21fc3BlZWRfY2hhbmdlKGN0eCwKKwkJCQkoc3RydWN0IGNvbm5lY3Rpb25fc3BlZWRfY2hhbmdlICopICZldmVudFsxXSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZGV2X2VycigmZGV2LT51ZGV2LT5kZXYsICJOQ006IHVuZXhwZWN0ZWQgIgorCQkJIm5vdGlmaWNhdGlvbiAweCUwMnghXG4iLCBldmVudC0+Yk5vdGlmaWNhdGlvblR5cGUpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgY2RjX25jbV9jaGVja19jb25uZWN0KHN0cnVjdCB1c2JuZXQgKmRldikKK3sKKwlzdHJ1Y3QgY2RjX25jbV9jdHggKmN0eDsKKworCWN0eCA9IChzdHJ1Y3QgY2RjX25jbV9jdHggKilkZXYtPmRhdGFbMF07CisJaWYgKGN0eCA9PSBOVUxMKQorCQlyZXR1cm4gMTsJLyogZGlzY29ubmVjdGVkICovCisKKwlyZXR1cm4gIWN0eC0+Y29ubmVjdGVkOworfQorCitzdGF0aWMgaW50CitjZGNfbmNtX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICp1ZGV2LCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqcHJvZCkKK3sKKwlyZXR1cm4gdXNibmV0X3Byb2JlKHVkZXYsIHByb2QpOworfQorCitzdGF0aWMgdm9pZCBjZGNfbmNtX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IHVzYm5ldCAqZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKworCWlmIChkZXYgPT0gTlVMTCkKKwkJcmV0dXJuOwkJLyogYWxyZWFkeSBkaXNjb25uZWN0ZWQgKi8KKworCXVzYm5ldF9kaXNjb25uZWN0KGludGYpOworfQorCitzdGF0aWMgaW50IGNkY19uY21fbWFuYWdlX3Bvd2VyKHN0cnVjdCB1c2JuZXQgKmRldiwgaW50IHN0YXR1cykKK3sKKwlkZXYtPmludGYtPm5lZWRzX3JlbW90ZV93YWtldXAgPSBzdGF0dXM7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8gY2RjX25jbV9pbmZvID0geworCS5kZXNjcmlwdGlvbiA9ICJDREMgTkNNIiwKKwkuZmxhZ3MgPSBGTEFHX05PX1NFVElOVCB8IEZMQUdfTVVMVElfUEFDS0VULAorCS5iaW5kID0gY2RjX25jbV9iaW5kLAorCS51bmJpbmQgPSBjZGNfbmNtX3VuYmluZCwKKwkuY2hlY2tfY29ubmVjdCA9IGNkY19uY21fY2hlY2tfY29ubmVjdCwKKwkubWFuYWdlX3Bvd2VyID0gY2RjX25jbV9tYW5hZ2VfcG93ZXIsCisJLnN0YXR1cyA9IGNkY19uY21fc3RhdHVzLAorCS5yeF9maXh1cCA9IGNkY19uY21fcnhfZml4dXAsCisJLnR4X2ZpeHVwID0gY2RjX25jbV90eF9maXh1cCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBjZGNfbmNtX2RyaXZlciA9IHsKKwkubmFtZSA9ICJjZGNfbmNtIiwKKwkuaWRfdGFibGUgPSBjZGNfZGV2cywKKwkucHJvYmUgPSBjZGNfbmNtX3Byb2JlLAorCS5kaXNjb25uZWN0ID0gY2RjX25jbV9kaXNjb25uZWN0LAorCS5zdXNwZW5kID0gdXNibmV0X3N1c3BlbmQsCisJLnJlc3VtZSA9IHVzYm5ldF9yZXN1bWUsCisJLnN1cHBvcnRzX2F1dG9zdXNwZW5kID0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgY2RjX25jbV9ldGh0b29sX29wcyA9IHsKKwkuZ2V0X2RydmluZm8gPSBjZGNfbmNtX2dldF9kcnZpbmZvLAorCS5nZXRfbGluayA9IHVzYm5ldF9nZXRfbGluaywKKwkuZ2V0X21zZ2xldmVsID0gdXNibmV0X2dldF9tc2dsZXZlbCwKKwkuc2V0X21zZ2xldmVsID0gdXNibmV0X3NldF9tc2dsZXZlbCwKKwkuZ2V0X3NldHRpbmdzID0gdXNibmV0X2dldF9zZXR0aW5ncywKKwkuc2V0X3NldHRpbmdzID0gdXNibmV0X3NldF9zZXR0aW5ncywKKwkubndheV9yZXNldCA9IHVzYm5ldF9ud2F5X3Jlc2V0LAorfTsKKworc3RhdGljIGludCBfX2luaXQgY2RjX25jbV9pbml0KHZvaWQpCit7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICJcbiIpOworCXJldHVybiB1c2JfcmVnaXN0ZXIoJmNkY19uY21fZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoY2RjX25jbV9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IGNkY19uY21fZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZjZGNfbmNtX2RyaXZlcik7Cit9CisKK21vZHVsZV9leGl0KGNkY19uY21fZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkhhbnMgUGV0dGVyIFNlbGFza3kiKTsKK01PRFVMRV9ERVNDUklQVElPTigiVVNCIENEQyBOQ00gaG9zdCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJEdWFsIEJTRC9HUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9oc28uYyBiL2RyaXZlcnMvbmV0L3VzYi9oc28uYwppbmRleCA4MTJlZGY4Li5iZWQ4ZmNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvaHNvLmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL2hzby5jCkBAIC05OTcsNiArOTk3LDE4IEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBmaXhfY3JjX2J1ZyhzdHJ1Y3QgdXJiICp1cmIsIF9fbGUxNiBtYXhfcGFja2V0X3NpemUpCit7CisJc3RhdGljIGNvbnN0IHU4IGNyY19jaGVja1s0XSA9IHsgMHhERSwgMHhBRCwgMHhCRSwgMHhFRiB9OworCXUzMiByZXN0ID0gdXJiLT5hY3R1YWxfbGVuZ3RoICUgbGUxNl90b19jcHUobWF4X3BhY2tldF9zaXplKTsKKworCWlmICgoKHJlc3QgPT0gNSkgfHwgKHJlc3QgPT0gNikpICYmCisJICAgICFtZW1jbXAoKCh1OCAqKXVyYi0+dHJhbnNmZXJfYnVmZmVyKSArIHVyYi0+YWN0dWFsX2xlbmd0aCAtIDQsCisJCSAgICBjcmNfY2hlY2ssIDQpKSB7CisJCXVyYi0+YWN0dWFsX2xlbmd0aCAtPSA0OworCX0KK30KKwogLyogTW92aW5nIGRhdGEgZnJvbSB1c2IgdG8ga2VybmVsIChpbiBpbnRlcnJ1cHQgc3RhdGUpICovCiBzdGF0aWMgdm9pZCByZWFkX2J1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQogewpAQCAtMTAyNSwxNyArMTAzNyw4IEBACiAJCXJldHVybjsKIAl9CiAKLQlpZiAob2Rldi0+cGFyZW50LT5wb3J0X3NwZWMgJiBIU09fSU5GT19DUkNfQlVHKSB7Ci0JCXUzMiByZXN0OwotCQl1OCBjcmNfY2hlY2tbNF0gPSB7IDB4REUsIDB4QUQsIDB4QkUsIDB4RUYgfTsKLQkJcmVzdCA9IHVyYi0+YWN0dWFsX2xlbmd0aCAlCi0JCQlsZTE2X3RvX2NwdShvZGV2LT5pbl9lbmRwLT53TWF4UGFja2V0U2l6ZSk7Ci0JCWlmICgoKHJlc3QgPT0gNSkgfHwgKHJlc3QgPT0gNikpICYmCi0JCSAgICAhbWVtY21wKCgodTggKikgdXJiLT50cmFuc2Zlcl9idWZmZXIpICsKLQkJCSAgICB1cmItPmFjdHVhbF9sZW5ndGggLSA0LCBjcmNfY2hlY2ssIDQpKSB7Ci0JCQl1cmItPmFjdHVhbF9sZW5ndGggLT0gNDsKLQkJfQotCX0KKwlpZiAob2Rldi0+cGFyZW50LT5wb3J0X3NwZWMgJiBIU09fSU5GT19DUkNfQlVHKQorCQlmaXhfY3JjX2J1Zyh1cmIsIG9kZXYtPmluX2VuZHAtPndNYXhQYWNrZXRTaXplKTsKIAogCS8qIGRvIHdlIGV2ZW4gaGF2ZSBhIHBhY2tldD8gKi8KIAlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoKSB7CkBAIC0xMjI3LDE4ICsxMjMwLDggQEAKIAkJcmV0dXJuOwogCiAJaWYgKHN0YXR1cyA9PSAwKSB7Ci0JCWlmIChzZXJpYWwtPnBhcmVudC0+cG9ydF9zcGVjICYgSFNPX0lORk9fQ1JDX0JVRykgewotCQkJdTMyIHJlc3Q7Ci0JCQl1OCBjcmNfY2hlY2tbNF0gPSB7IDB4REUsIDB4QUQsIDB4QkUsIDB4RUYgfTsKLQkJCXJlc3QgPQotCQkJICAgIHVyYi0+YWN0dWFsX2xlbmd0aCAlCi0JCQkgICAgbGUxNl90b19jcHUoc2VyaWFsLT5pbl9lbmRwLT53TWF4UGFja2V0U2l6ZSk7Ci0JCQlpZiAoKChyZXN0ID09IDUpIHx8IChyZXN0ID09IDYpKSAmJgotCQkJICAgICFtZW1jbXAoKCh1OCAqKSB1cmItPnRyYW5zZmVyX2J1ZmZlcikgKwotCQkJCSAgICB1cmItPmFjdHVhbF9sZW5ndGggLSA0LCBjcmNfY2hlY2ssIDQpKSB7Ci0JCQkJdXJiLT5hY3R1YWxfbGVuZ3RoIC09IDQ7Ci0JCQl9Ci0JCX0KKwkJaWYgKHNlcmlhbC0+cGFyZW50LT5wb3J0X3NwZWMgJiBIU09fSU5GT19DUkNfQlVHKQorCQkJZml4X2NyY19idWcodXJiLCBzZXJpYWwtPmluX2VuZHAtPndNYXhQYWNrZXRTaXplKTsKIAkJLyogVmFsaWQgZGF0YSwgaGFuZGxlIFJYIGRhdGEgKi8KIAkJc3Bpbl9sb2NrKCZzZXJpYWwtPnNlcmlhbF9sb2NrKTsKIAkJc2VyaWFsLT5yeF91cmJfZmlsbGVkW2hzb191cmJfdG9faW5kZXgoc2VyaWFsLCB1cmIpXSA9IDE7CkBAIC0xNzQxLDcgKzE3MzQsNiBAQAogCQkJICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXN0cnVjdCBoc29fc2VyaWFsICpzZXJpYWwgPSAgZ2V0X3NlcmlhbF9ieV90dHkodHR5KTsKLQl2b2lkIF9fdXNlciAqdWFyZyA9ICh2b2lkIF9fdXNlciAqKWFyZzsKIAlpbnQgcmV0ID0gMDsKIAlENCgiSU9DVEwgY21kOiAlZCwgYXJnOiAlbGQiLCBjbWQsIGFyZyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9pcGhldGguYyBiL2RyaXZlcnMvbmV0L3VzYi9pcGhldGguYwppbmRleCBiMmJjZjk5Li43ZDQyZjlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jCkBAIC0zNjMsNyArMzYzLDcgQEAKIAogCS8qIFBhcmFub2lkICovCiAJaWYgKHNrYi0+bGVuID4gSVBIRVRIX0JVRl9TSVpFKSB7Ci0JCVdBUk4oMSwgIiVzOiBza2IgdG9vIGxhcmdlOiAlZCBieXRlcyIsIF9fZnVuY19fLCBza2ItPmxlbik7CisJCVdBUk4oMSwgIiVzOiBza2IgdG9vIGxhcmdlOiAlZCBieXRlc1xuIiwgX19mdW5jX18sIHNrYi0+bGVuKTsKIAkJZGV2LT5uZXQtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKIAkJcmV0dXJuIE5FVERFVl9UWF9PSzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9wZWdhc3VzLmMgYi9kcml2ZXJzL25ldC91c2IvcGVnYXN1cy5jCmluZGV4IDY3MTBmMDkuLmVmMzY2NzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9wZWdhc3VzLmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL3BlZ2FzdXMuYwpAQCAtMzU5LDcgKzM1OSw3IEBACiAKIHN0YXRpYyBpbnQgbWRpb19yZWFkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfaWQsIGludCBsb2MpCiB7Ci0JcGVnYXN1c190ICpwZWdhc3VzID0gKHBlZ2FzdXNfdCAqKSBuZXRkZXZfcHJpdihkZXYpOworCXBlZ2FzdXNfdCAqcGVnYXN1cyA9IG5ldGRldl9wcml2KGRldik7CiAJdTE2IHJlczsKIAogCXJlYWRfbWlpX3dvcmQocGVnYXN1cywgcGh5X2lkLCBsb2MsICZyZXMpOwpAQCAtMzk3LDcgKzM5Nyw3IEBACiAKIHN0YXRpYyB2b2lkIG1kaW9fd3JpdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9pZCwgaW50IGxvYywgaW50IHZhbCkKIHsKLQlwZWdhc3VzX3QgKnBlZ2FzdXMgPSAocGVnYXN1c190ICopIG5ldGRldl9wcml2KGRldik7CisJcGVnYXN1c190ICpwZWdhc3VzID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCXdyaXRlX21paV93b3JkKHBlZ2FzdXMsIHBoeV9pZCwgbG9jLCB2YWwpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3NpZXJyYV9uZXQuYyBiL2RyaXZlcnMvbmV0L3VzYi9zaWVycmFfbmV0LmMKaW5kZXggZDFhYzE1Yy4uZWQxYjQzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL3NpZXJyYV9uZXQuYworKysgYi9kcml2ZXJzL25ldC91c2Ivc2llcnJhX25ldC5jCkBAIC04MDIsMTAgKzgwMiw5IEBACiAKIAlkZXZfZGJnKCZkZXYtPnVkZXYtPmRldiwgIiVzIiwgX19mdW5jX18pOwogCi0JLyogS2lsbCB0aGUgdGltZXIgdGhlbiBmbHVzaCB0aGUgd29yayBxdWV1ZSAqLworCS8qIGtpbGwgdGhlIHRpbWVyIGFuZCB3b3JrICovCiAJZGVsX3RpbWVyX3N5bmMoJnByaXYtPnN5bmNfdGltZXIpOwotCi0JZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwljYW5jZWxfd29ya19zeW5jKCZwcml2LT5zaWVycmFfbmV0X2tldmVudCk7CiAKIAkvKiB0ZWxsIG1vZGVtIHdlIGFyZSBnb2luZyBhd2F5ICovCiAJc3RhdHVzID0gc2llcnJhX25ldF9zZW5kX2NtZChkZXYsIHByaXYtPnNoZHduX21zZywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jIGIvZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMKaW5kZXggNjVjYjFhYi4uYmM4NmY0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMKQEAgLTExNjMsOSArMTE2Myw4IEBACiAKIHN0YXRpYyB1MzIgc21zYzk1eHhfY2FsY19jc3VtX3ByZWFtYmxlKHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JaW50IGxlbiA9IHNrYi0+ZGF0YSAtIHNrYi0+aGVhZDsKLQl1MTYgaGlnaF8xNiA9ICh1MTYpKHNrYi0+Y3N1bV9vZmZzZXQgKyBza2ItPmNzdW1fc3RhcnQgLSBsZW4pOwotCXUxNiBsb3dfMTYgPSAodTE2KShza2ItPmNzdW1fc3RhcnQgLSBsZW4pOworCXUxNiBsb3dfMTYgPSAodTE2KXNrYl9jaGVja3N1bV9zdGFydF9vZmZzZXQoc2tiKTsKKwl1MTYgaGlnaF8xNiA9IGxvd18xNiArIHNrYi0+Y3N1bV9vZmZzZXQ7CiAJcmV0dXJuIChoaWdoXzE2IDw8IDE2KSB8IGxvd18xNjsKIH0KIApAQCAtMTE5Myw3ICsxMTkyLDcgQEAKIAkJaWYgKHNrYi0+bGVuIDw9IDQ1KSB7CiAJCQkvKiB3b3JrYXJvdW5kIC0gaGFyZHdhcmUgdHggY2hlY2tzdW0gZG9lcyBub3Qgd29yawogCQkJICogcHJvcGVybHkgd2l0aCBleHRyZW1lbHkgc21hbGwgcGFja2V0cyAqLwotCQkJbG9uZyBjc3N0YXJ0ID0gc2tiLT5jc3VtX3N0YXJ0IC0gc2tiX2hlYWRyb29tKHNrYik7CisJCQlsb25nIGNzc3RhcnQgPSBza2JfY2hlY2tzdW1fc3RhcnRfb2Zmc2V0KHNrYik7CiAJCQlfX3dzdW0gY2FsYyA9IGNzdW1fcGFydGlhbChza2ItPmRhdGEgKyBjc3N0YXJ0LAogCQkJCXNrYi0+bGVuIC0gY3NzdGFydCwgMCk7CiAJCQkqKChfX3N1bTE2ICopKHNrYi0+ZGF0YSArIGNzc3RhcnQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuYyBiL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuYwppbmRleCBjMDRkNDllLi5lZDlhNDE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvdXNibmV0LmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jCkBAIC0zOTEsMTQgKzM5MSwxOSBAQAogCQlnb3RvIGVycm9yOwogCS8vIGVsc2UgbmV0d29yayBzdGFjayByZW1vdmVzIGV4dHJhIGJ5dGUgaWYgd2UgZm9yY2VkIGEgc2hvcnQgcGFja2V0CiAKLQlpZiAoc2tiLT5sZW4pCi0JCXVzYm5ldF9za2JfcmV0dXJuIChkZXYsIHNrYik7Ci0JZWxzZSB7Ci0JCW5ldGlmX2RiZyhkZXYsIHJ4X2VyciwgZGV2LT5uZXQsICJkcm9wXG4iKTsKLWVycm9yOgotCQlkZXYtPm5ldC0+c3RhdHMucnhfZXJyb3JzKys7Ci0JCXNrYl9xdWV1ZV90YWlsICgmZGV2LT5kb25lLCBza2IpOworCWlmIChza2ItPmxlbikgeworCQkvKiBhbGwgZGF0YSB3YXMgYWxyZWFkeSBjbG9uZWQgZnJvbSBza2IgaW5zaWRlIHRoZSBkcml2ZXIgKi8KKwkJaWYgKGRldi0+ZHJpdmVyX2luZm8tPmZsYWdzICYgRkxBR19NVUxUSV9QQUNLRVQpCisJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQllbHNlCisJCQl1c2JuZXRfc2tiX3JldHVybihkZXYsIHNrYik7CisJCXJldHVybjsKIAl9CisKKwluZXRpZl9kYmcoZGV2LCByeF9lcnIsIGRldi0+bmV0LCAiZHJvcFxuIik7CitlcnJvcjoKKwlkZXYtPm5ldC0+c3RhdHMucnhfZXJyb3JzKys7CisJc2tiX3F1ZXVlX3RhaWwoJmRldi0+ZG9uZSwgc2tiKTsKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTk3MSw3ICs5NzYsOCBAQAogCXN0cnVjdCB1c2JuZXQJCSpkZXYgPSBlbnRyeS0+ZGV2OwogCiAJaWYgKHVyYi0+c3RhdHVzID09IDApIHsKLQkJZGV2LT5uZXQtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwkJaWYgKCEoZGV2LT5kcml2ZXJfaW5mby0+ZmxhZ3MgJiBGTEFHX01VTFRJX1BBQ0tFVCkpCisJCQlkZXYtPm5ldC0+c3RhdHMudHhfcGFja2V0cysrOwogCQlkZXYtPm5ldC0+c3RhdHMudHhfYnl0ZXMgKz0gZW50cnktPmxlbmd0aDsKIAl9IGVsc2UgewogCQlkZXYtPm5ldC0+c3RhdHMudHhfZXJyb3JzKys7CkBAIC0xMDQ0LDggKzEwNTAsMTMgQEAKIAlpZiAoaW5mby0+dHhfZml4dXApIHsKIAkJc2tiID0gaW5mby0+dHhfZml4dXAgKGRldiwgc2tiLCBHRlBfQVRPTUlDKTsKIAkJaWYgKCFza2IpIHsKLQkJCW5ldGlmX2RiZyhkZXYsIHR4X2VyciwgZGV2LT5uZXQsICJjYW4ndCB0eF9maXh1cCBza2JcbiIpOwotCQkJZ290byBkcm9wOworCQkJaWYgKG5ldGlmX21zZ190eF9lcnIoZGV2KSkgeworCQkJCW5ldGlmX2RiZyhkZXYsIHR4X2VyciwgZGV2LT5uZXQsICJjYW4ndCB0eF9maXh1cCBza2JcbiIpOworCQkJCWdvdG8gZHJvcDsKKwkJCX0gZWxzZSB7CisJCQkJLyogY2RjX25jbSBjb2xsZWN0ZWQgcGFja2V0OyB3YWl0cyBmb3IgbW9yZSAqLworCQkJCWdvdG8gbm90X2Ryb3A7CisJCQl9CiAJCX0KIAl9CiAJbGVuZ3RoID0gc2tiLT5sZW47CkBAIC0xMDY3LDEzICsxMDc4LDE4IEBACiAJLyogZG9uJ3QgYXNzdW1lIHRoZSBoYXJkd2FyZSBoYW5kbGVzIFVTQl9aRVJPX1BBQ0tFVAogCSAqIE5PVEU6ICBzdHJpY3RseSBjb25mb3JtaW5nIGNkYy1ldGhlciBkZXZpY2VzIHNob3VsZCBleHBlY3QKIAkgKiB0aGUgWkxQIGhlcmUsIGJ1dCBpZ25vcmUgdGhlIG9uZS1ieXRlIHBhY2tldC4KKwkgKiBOT1RFMjogQ0RDIE5DTSBzcGVjaWZpY2F0aW9uIGlzIGRpZmZlcmVudCBmcm9tIENEQyBFQ00gd2hlbgorCSAqIGhhbmRsaW5nIFpMUC9zaG9ydCBwYWNrZXRzLCBzbyBjZGNfbmNtIGRyaXZlciB3aWxsIG1ha2Ugc2hvcnQKKwkgKiBwYWNrZXQgaXRzZWxmIGlmIG5lZWRlZC4KIAkgKi8KIAlpZiAobGVuZ3RoICUgZGV2LT5tYXhwYWNrZXQgPT0gMCkgewogCQlpZiAoIShpbmZvLT5mbGFncyAmIEZMQUdfU0VORF9aTFApKSB7Ci0JCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgrKzsKLQkJCWlmIChza2JfdGFpbHJvb20oc2tiKSkgewotCQkJCXNrYi0+ZGF0YVtza2ItPmxlbl0gPSAwOwotCQkJCV9fc2tiX3B1dChza2IsIDEpOworCQkJaWYgKCEoaW5mby0+ZmxhZ3MgJiBGTEFHX01VTFRJX1BBQ0tFVCkpIHsKKwkJCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgrKzsKKwkJCQlpZiAoc2tiX3RhaWxyb29tKHNrYikpIHsKKwkJCQkJc2tiLT5kYXRhW3NrYi0+bGVuXSA9IDA7CisJCQkJCV9fc2tiX3B1dChza2IsIDEpOworCQkJCX0KIAkJCX0KIAkJfSBlbHNlCiAJCQl1cmItPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9aRVJPX1BBQ0tFVDsKQEAgLTExMjIsNiArMTEzOCw3IEBACiAJCW5ldGlmX2RiZyhkZXYsIHR4X2VyciwgZGV2LT5uZXQsICJkcm9wLCBjb2RlICVkXG4iLCByZXR2YWwpOwogZHJvcDoKIAkJZGV2LT5uZXQtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKK25vdF9kcm9wOgogCQlpZiAoc2tiKQogCQkJZGV2X2tmcmVlX3NrYl9hbnkgKHNrYik7CiAJCXVzYl9mcmVlX3VyYiAodXJiKTsKQEAgLTEyMzEsOCArMTI0OCw3IEBACiAJbmV0ID0gZGV2LT5uZXQ7CiAJdW5yZWdpc3Rlcl9uZXRkZXYgKG5ldCk7CiAKLQkvKiB3ZSBkb24ndCBob2xkIHJ0bmwgaGVyZSAuLi4gKi8KLQlmbHVzaF9zY2hlZHVsZWRfd29yayAoKTsKKwljYW5jZWxfd29ya19zeW5jKCZkZXYtPmtldmVudCk7CiAKIAlpZiAoZGV2LT5kcml2ZXJfaW5mby0+dW5iaW5kKQogCQlkZXYtPmRyaXZlcl9pbmZvLT51bmJpbmQgKGRldiwgaW50Zik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92aWEtcmhpbmUuYyBiL2RyaXZlcnMvbmV0L3ZpYS1yaGluZS5jCmluZGV4IDQ5MzBmOWQuLjVlN2YwNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3ZpYS1yaGluZS5jCisrKyBiL2RyaXZlcnMvbmV0L3ZpYS1yaGluZS5jCkBAIC0zMCw4ICszMCw4IEBACiAqLwogCiAjZGVmaW5lIERSVl9OQU1FCSJ2aWEtcmhpbmUiCi0jZGVmaW5lIERSVl9WRVJTSU9OCSIxLjQuMyIKLSNkZWZpbmUgRFJWX1JFTERBVEUJIjIwMDctMDMtMDYiCisjZGVmaW5lIERSVl9WRVJTSU9OCSIxLjUuMCIKKyNkZWZpbmUgRFJWX1JFTERBVEUJIjIwMTAtMTAtMDkiCiAKIAogLyogQSBmZXcgdXNlci1jb25maWd1cmFibGUgdmFsdWVzLgpAQCAtMTAwLDYgKzEwMCw3IEBACiAjaW5jbHVkZSA8bGludXgvbWlpLmg+CiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CisjaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4JLyogUHJvY2Vzc29yIHR5cGUgZm9yIGNhY2hlIGFsaWdubWVudC4gKi8KQEAgLTEzMyw2ICsxMzQsOSBAQAogTU9EVUxFX1BBUk1fREVTQyhyeF9jb3B5YnJlYWssICJWSUEgUmhpbmUgY29weSBicmVha3BvaW50IGZvciBjb3B5LW9ubHktdGlueS1mcmFtZXMiKTsKIE1PRFVMRV9QQVJNX0RFU0MoYXZvaWRfRDMsICJBdm9pZCBwb3dlciBzdGF0ZSBEMyAod29yay1hcm91bmQgZm9yIGJyb2tlbiBCSU9TZXMpIik7CiAKKyNkZWZpbmUgTUNBTV9TSVpFCTMyCisjZGVmaW5lIFZDQU1fU0laRQkzMgorCiAvKgogCQlUaGVvcnkgb2YgT3BlcmF0aW9uCiAKQEAgLTI3OSwxNSArMjgzLDE2IEBACiAvKiBPZmZzZXRzIHRvIHRoZSBkZXZpY2UgcmVnaXN0ZXJzLiAqLwogZW51bSByZWdpc3Rlcl9vZmZzZXRzIHsKIAlTdGF0aW9uQWRkcj0weDAwLCBSeENvbmZpZz0weDA2LCBUeENvbmZpZz0weDA3LCBDaGlwQ21kPTB4MDgsCi0JQ2hpcENtZDE9MHgwOSwKKwlDaGlwQ21kMT0weDA5LCBUUVdha2U9MHgwQSwKIAlJbnRyU3RhdHVzPTB4MEMsIEludHJFbmFibGU9MHgwRSwKIAlNdWx0aWNhc3RGaWx0ZXIwPTB4MTAsIE11bHRpY2FzdEZpbHRlcjE9MHgxNCwKIAlSeFJpbmdQdHI9MHgxOCwgVHhSaW5nUHRyPTB4MUMsIEdGSUZPVGVzdD0weDU0LAotCU1JSVBoeUFkZHI9MHg2QywgTUlJU3RhdHVzPTB4NkQsIFBDSUJ1c0NvbmZpZz0weDZFLAorCU1JSVBoeUFkZHI9MHg2QywgTUlJU3RhdHVzPTB4NkQsIFBDSUJ1c0NvbmZpZz0weDZFLCBQQ0lCdXNDb25maWcxPTB4NkYsCiAJTUlJQ21kPTB4NzAsIE1JSVJlZ0FkZHI9MHg3MSwgTUlJRGF0YT0weDcyLCBNQUNSZWdFRWNzcj0weDc0LAogCUNvbmZpZ0E9MHg3OCwgQ29uZmlnQj0weDc5LCBDb25maWdDPTB4N0EsIENvbmZpZ0Q9MHg3QiwKIAlSeE1pc3NlZD0weDdDLCBSeENSQ0VycnM9MHg3RSwgTWlzY0NtZD0weDgxLAogCVN0aWNreUhXPTB4ODMsIEludHJTdGF0dXMyPTB4ODQsCisJQ2FtTWFzaz0weDg4LCBDYW1Db249MHg5MiwgQ2FtQWRkcj0weDkzLAogCVdPTGNyU2V0PTB4QTAsIFB3Y2ZnU2V0PTB4QTEsIFdPTGNnU2V0PTB4QTMsIFdPTGNyQ2xyPTB4QTQsCiAJV09MY3JDbHIxPTB4QTYsIFdPTGNnQ2xyPTB4QTcsCiAJUHdyY3NyU2V0PTB4QTgsIFB3cmNzclNldDE9MHhBOSwgUHdyY3NyQ2xyPTB4QUMsIFB3cmNzckNscjE9MHhBRCwKQEAgLTI5OSw2ICszMDQsNDAgQEAKIAlCYWNrQ2FwdHVyZUVmZmVjdD0weDA0LCBCYWNrUmFuZG9tPTB4MDgKIH07CiAKKy8qIEJpdHMgaW4gdGhlIFR4Q29uZmlnIChUQ1IpIHJlZ2lzdGVyICovCitlbnVtIHRjcl9iaXRzIHsKKwlUQ1JfUFFFTj0weDAxLAorCVRDUl9MQjA9MHgwMiwJCS8qIGxvb3BiYWNrWzBdICovCisJVENSX0xCMT0weDA0LAkJLyogbG9vcGJhY2tbMV0gKi8KKwlUQ1JfT0ZTRVQ9MHgwOCwKKwlUQ1JfUlRHT1BUPTB4MTAsCisJVENSX1JURlQwPTB4MjAsCisJVENSX1JURlQxPTB4NDAsCisJVENSX1JUU0Y9MHg4MCwKK307CisKKy8qIEJpdHMgaW4gdGhlIENhbUNvbiAoQ0FNQykgcmVnaXN0ZXIgKi8KK2VudW0gY2FtY29uX2JpdHMgeworCUNBTUNfQ0FNRU49MHgwMSwKKwlDQU1DX1ZDQU1TTD0weDAyLAorCUNBTUNfQ0FNV1I9MHgwNCwKKwlDQU1DX0NBTVJEPTB4MDgsCit9OworCisvKiBCaXRzIGluIHRoZSBQQ0lCdXNDb25maWcxIChCQ1IxKSByZWdpc3RlciAqLworZW51bSBiY3IxX2JpdHMgeworCUJDUjFfUE9UMD0weDAxLAorCUJDUjFfUE9UMT0weDAyLAorCUJDUjFfUE9UMj0weDA0LAorCUJDUjFfQ1RGVDA9MHgwOCwKKwlCQ1IxX0NURlQxPTB4MTAsCisJQkNSMV9DVFNGPTB4MjAsCisJQkNSMV9UWFFOT0JLPTB4NDAsCS8qIGZvciBWVDYxMDUgKi8KKwlCQ1IxX1ZJREZSPTB4ODAsCS8qIGZvciBWVDYxMDUgKi8KKwlCQ1IxX01FRDA9MHg0MCwJCS8qIGZvciBWVDYxMDIgKi8KKwlCQ1IxX01FRDE9MHg4MCwJCS8qIGZvciBWVDYxMDIgKi8KK307CisKICNpZmRlZiBVU0VfTU1JTwogLyogUmVnaXN0ZXJzIHdlIGNoZWNrIHRoYXQgbW1pbyBhbmQgcmVnIGFyZSB0aGUgc2FtZS4gKi8KIHN0YXRpYyBjb25zdCBpbnQgbW1pb192ZXJpZnlfcmVnaXN0ZXJzW10gPSB7CkBAIC0zNTYsNiArMzk1LDExIEBACiAJRGVzY093bj0weDgwMDAwMDAwCiB9OwogCisvKiBCaXRzIGluICpfZGVzYy4qX2xlbmd0aCAqLworZW51bSBkZXNjX2xlbmd0aF9iaXRzIHsKKwlEZXNjVGFnPTB4MDAwMTAwMDAKK307CisKIC8qIEJpdHMgaW4gQ2hpcENtZC4gKi8KIGVudW0gY2hpcF9jbWRfYml0cyB7CiAJQ21kSW5pdD0weDAxLCBDbWRTdGFydD0weDAyLCBDbWRTdG9wPTB4MDQsIENtZFJ4T249MHgwOCwKQEAgLTM2NSw2ICs0MDksOSBAQAogfTsKIAogc3RydWN0IHJoaW5lX3ByaXZhdGUgeworCS8qIEJpdCBtYXNrIGZvciBjb25maWd1cmVkIFZMQU4gaWRzICovCisJdW5zaWduZWQgbG9uZyBhY3RpdmVfdmxhbnNbQklUU19UT19MT05HUyhWTEFOX05fVklEKV07CisKIAkvKiBEZXNjcmlwdG9yIHJpbmdzICovCiAJc3RydWN0IHJ4X2Rlc2MgKnJ4X3Jpbmc7CiAJc3RydWN0IHR4X2Rlc2MgKnR4X3Jpbmc7CkBAIC00MDUsNiArNDUyLDIzIEBACiAJdm9pZCBfX2lvbWVtICpiYXNlOwogfTsKIAorI2RlZmluZSBCWVRFX1JFR19CSVRTX09OKHgsIHApICAgICAgZG8geyBpb3dyaXRlOCgoaW9yZWFkOCgocCkpfCh4KSksIChwKSk7IH0gd2hpbGUgKDApCisjZGVmaW5lIFdPUkRfUkVHX0JJVFNfT04oeCwgcCkgICAgICBkbyB7IGlvd3JpdGUxNigoaW9yZWFkMTYoKHApKXwoeCkpLCAocCkpOyB9IHdoaWxlICgwKQorI2RlZmluZSBEV09SRF9SRUdfQklUU19PTih4LCBwKSAgICAgZG8geyBpb3dyaXRlMzIoKGlvcmVhZDMyKChwKSl8KHgpKSwgKHApKTsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBCWVRFX1JFR19CSVRTX0lTX09OKHgsIHApICAgKGlvcmVhZDgoKHApKSAmICh4KSkKKyNkZWZpbmUgV09SRF9SRUdfQklUU19JU19PTih4LCBwKSAgIChpb3JlYWQxNigocCkpICYgKHgpKQorI2RlZmluZSBEV09SRF9SRUdfQklUU19JU19PTih4LCBwKSAgKGlvcmVhZDMyKChwKSkgJiAoeCkpCisKKyNkZWZpbmUgQllURV9SRUdfQklUU19PRkYoeCwgcCkgICAgIGRvIHsgaW93cml0ZTgoaW9yZWFkOCgocCkpICYgKH4oeCkpLCAocCkpOyB9IHdoaWxlICgwKQorI2RlZmluZSBXT1JEX1JFR19CSVRTX09GRih4LCBwKSAgICAgZG8geyBpb3dyaXRlMTYoaW9yZWFkMTYoKHApKSAmICh+KHgpKSwgKHApKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgRFdPUkRfUkVHX0JJVFNfT0ZGKHgsIHApICAgIGRvIHsgaW93cml0ZTMyKGlvcmVhZDMyKChwKSkgJiAofih4KSksIChwKSk7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgQllURV9SRUdfQklUU19TRVQoeCwgbSwgcCkgICBkbyB7IGlvd3JpdGU4KChpb3JlYWQ4KChwKSkgJiAofihtKSkpfCh4KSwgKHApKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgV09SRF9SRUdfQklUU19TRVQoeCwgbSwgcCkgICBkbyB7IGlvd3JpdGUxNigoaW9yZWFkMTYoKHApKSAmICh+KG0pKSl8KHgpLCAocCkpOyB9IHdoaWxlICgwKQorI2RlZmluZSBEV09SRF9SRUdfQklUU19TRVQoeCwgbSwgcCkgIGRvIHsgaW93cml0ZTMyKChpb3JlYWQzMigocCkpICYgKH4obSkpKXwoeCksIChwKSk7IH0gd2hpbGUgKDApCisKKwogc3RhdGljIGludCAgbWRpb19yZWFkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfaWQsIGludCBsb2NhdGlvbik7CiBzdGF0aWMgdm9pZCBtZGlvX3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfaWQsIGludCBsb2NhdGlvbiwgaW50IHZhbHVlKTsKIHN0YXRpYyBpbnQgIHJoaW5lX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CkBAIC00MjIsNiArNDg2LDE0IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG5ldGRldl9ldGh0b29sX29wczsKIHN0YXRpYyBpbnQgIHJoaW5lX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgcmhpbmVfc2h1dGRvd24gKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKK3N0YXRpYyB2b2lkIHJoaW5lX3ZsYW5fcnhfYWRkX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBzaG9ydCB2aWQpOworc3RhdGljIHZvaWQgcmhpbmVfdmxhbl9yeF9raWxsX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBzaG9ydCB2aWQpOworc3RhdGljIHZvaWQgcmhpbmVfc2V0X2NhbSh2b2lkIF9faW9tZW0gKmlvYWRkciwgaW50IGlkeCwgdTggKmFkZHIpOworc3RhdGljIHZvaWQgcmhpbmVfc2V0X3ZsYW5fY2FtKHZvaWQgX19pb21lbSAqaW9hZGRyLCBpbnQgaWR4LCB1OCAqYWRkcik7CitzdGF0aWMgdm9pZCByaGluZV9zZXRfY2FtX21hc2sodm9pZCBfX2lvbWVtICppb2FkZHIsIHUzMiBtYXNrKTsKK3N0YXRpYyB2b2lkIHJoaW5lX3NldF92bGFuX2NhbV9tYXNrKHZvaWQgX19pb21lbSAqaW9hZGRyLCB1MzIgbWFzayk7CitzdGF0aWMgdm9pZCByaGluZV9pbml0X2NhbV9maWx0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgdm9pZCByaGluZV91cGRhdGVfdmNhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAogI2RlZmluZSBSSElORV9XQUlUX0ZPUihjb25kaXRpb24pIGRvIHsJCQkJCVwKIAlpbnQgaT0xMDI0OwkJCQkJCQlcCkBAIC02MjksNiArNzAxLDggQEAKIAkubmRvX3NldF9tYWNfYWRkcmVzcyAJID0gZXRoX21hY19hZGRyLAogCS5uZG9fZG9faW9jdGwJCSA9IG5ldGRldl9pb2N0bCwKIAkubmRvX3R4X3RpbWVvdXQgCSA9IHJoaW5lX3R4X3RpbWVvdXQsCisJLm5kb192bGFuX3J4X2FkZF92aWQJID0gcmhpbmVfdmxhbl9yeF9hZGRfdmlkLAorCS5uZG9fdmxhbl9yeF9raWxsX3ZpZAkgPSByaGluZV92bGFuX3J4X2tpbGxfdmlkLAogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCiAJLm5kb19wb2xsX2NvbnRyb2xsZXIJID0gcmhpbmVfcG9sbCwKICNlbmRpZgpAQCAtNzk1LDYgKzg2OSwxMCBAQAogCWlmIChycC0+cXVpcmtzICYgcnFSaGluZUkpCiAJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9TR3xORVRJRl9GX0hXX0NTVU07CiAKKwlpZiAocGRldi0+cmV2aXNpb24gPj0gVlQ2MTA1TSkKKwkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1ZMQU5fVFggfCBORVRJRl9GX0hXX1ZMQU5fUlggfAorCQlORVRJRl9GX0hXX1ZMQU5fRklMVEVSOworCiAJLyogZGV2LT5uYW1lIG5vdCBkZWZpbmVkIGJlZm9yZSByZWdpc3Rlcl9uZXRkZXYoKSEgKi8KIAlyYyA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwogCWlmIChyYykKQEAgLTEwNDAsNiArMTExOCwxNjcgQEAKIAkJICAgICAgIG5ldGlmX2NhcnJpZXJfb2sobWlpLT5kZXYpKTsKIH0KIAorLyoqCisgKiByaGluZV9zZXRfY2FtIC0gc2V0IENBTSBtdWx0aWNhc3QgZmlsdGVycworICogQGlvYWRkcjogcmVnaXN0ZXIgYmxvY2sgb2YgdGhpcyBSaGluZQorICogQGlkeDogbXVsdGljYXN0IENBTSBpbmRleCBbMC4uTUNBTV9TSVpFLTFdCisgKiBAYWRkcjogbXVsdGljYXN0IGFkZHJlc3MgKDYgYnl0ZXMpCisgKgorICogTG9hZCBhZGRyZXNzZXMgaW50byBtdWx0aWNhc3QgZmlsdGVycy4KKyAqLworc3RhdGljIHZvaWQgcmhpbmVfc2V0X2NhbSh2b2lkIF9faW9tZW0gKmlvYWRkciwgaW50IGlkeCwgdTggKmFkZHIpCit7CisJaW50IGk7CisKKwlpb3dyaXRlOChDQU1DX0NBTUVOLCBpb2FkZHIgKyBDYW1Db24pOworCXdtYigpOworCisJLyogUGFyYW5vaWQgLS0gaWR4IG91dCBvZiByYW5nZSBzaG91bGQgbmV2ZXIgaGFwcGVuICovCisJaWR4ICY9IChNQ0FNX1NJWkUgLSAxKTsKKworCWlvd3JpdGU4KCh1OCkgaWR4LCBpb2FkZHIgKyBDYW1BZGRyKTsKKworCWZvciAoaSA9IDA7IGkgPCA2OyBpKyssIGFkZHIrKykKKwkJaW93cml0ZTgoKmFkZHIsIGlvYWRkciArIE11bHRpY2FzdEZpbHRlcjAgKyBpKTsKKwl1ZGVsYXkoMTApOworCXdtYigpOworCisJaW93cml0ZTgoQ0FNQ19DQU1XUiB8IENBTUNfQ0FNRU4sIGlvYWRkciArIENhbUNvbik7CisJdWRlbGF5KDEwKTsKKworCWlvd3JpdGU4KDAsIGlvYWRkciArIENhbUNvbik7Cit9CisKKy8qKgorICogcmhpbmVfc2V0X3ZsYW5fY2FtIC0gc2V0IENBTSBWTEFOIGZpbHRlcnMKKyAqIEBpb2FkZHI6IHJlZ2lzdGVyIGJsb2NrIG9mIHRoaXMgUmhpbmUKKyAqIEBpZHg6IFZMQU4gQ0FNIGluZGV4IFswLi5WQ0FNX1NJWkUtMV0KKyAqIEBhZGRyOiBWTEFOIElEICgyIGJ5dGVzKQorICoKKyAqIExvYWQgYWRkcmVzc2VzIGludG8gVkxBTiBmaWx0ZXJzLgorICovCitzdGF0aWMgdm9pZCByaGluZV9zZXRfdmxhbl9jYW0odm9pZCBfX2lvbWVtICppb2FkZHIsIGludCBpZHgsIHU4ICphZGRyKQoreworCWlvd3JpdGU4KENBTUNfQ0FNRU4gfCBDQU1DX1ZDQU1TTCwgaW9hZGRyICsgQ2FtQ29uKTsKKwl3bWIoKTsKKworCS8qIFBhcmFub2lkIC0tIGlkeCBvdXQgb2YgcmFuZ2Ugc2hvdWxkIG5ldmVyIGhhcHBlbiAqLworCWlkeCAmPSAoVkNBTV9TSVpFIC0gMSk7CisKKwlpb3dyaXRlOCgodTgpIGlkeCwgaW9hZGRyICsgQ2FtQWRkcik7CisKKwlpb3dyaXRlMTYoKigodTE2ICopIGFkZHIpLCBpb2FkZHIgKyBNdWx0aWNhc3RGaWx0ZXIwICsgNik7CisJdWRlbGF5KDEwKTsKKwl3bWIoKTsKKworCWlvd3JpdGU4KENBTUNfQ0FNV1IgfCBDQU1DX0NBTUVOLCBpb2FkZHIgKyBDYW1Db24pOworCXVkZWxheSgxMCk7CisKKwlpb3dyaXRlOCgwLCBpb2FkZHIgKyBDYW1Db24pOworfQorCisvKioKKyAqIHJoaW5lX3NldF9jYW1fbWFzayAtIHNldCBtdWx0aWNhc3QgQ0FNIG1hc2sKKyAqIEBpb2FkZHI6IHJlZ2lzdGVyIGJsb2NrIG9mIHRoaXMgUmhpbmUKKyAqIEBtYXNrOiBtdWx0aWNhc3QgQ0FNIG1hc2sKKyAqCisgKiBNYXNrIHNldHMgbXVsdGljYXN0IGZpbHRlcnMgYWN0aXZlL2luYWN0aXZlLgorICovCitzdGF0aWMgdm9pZCByaGluZV9zZXRfY2FtX21hc2sodm9pZCBfX2lvbWVtICppb2FkZHIsIHUzMiBtYXNrKQoreworCWlvd3JpdGU4KENBTUNfQ0FNRU4sIGlvYWRkciArIENhbUNvbik7CisJd21iKCk7CisKKwkvKiB3cml0ZSBtYXNrICovCisJaW93cml0ZTMyKG1hc2ssIGlvYWRkciArIENhbU1hc2spOworCisJLyogZGlzYWJsZSBDQU1FTiAqLworCWlvd3JpdGU4KDAsIGlvYWRkciArIENhbUNvbik7Cit9CisKKy8qKgorICogcmhpbmVfc2V0X3ZsYW5fY2FtX21hc2sgLSBzZXQgVkxBTiBDQU0gbWFzaworICogQGlvYWRkcjogcmVnaXN0ZXIgYmxvY2sgb2YgdGhpcyBSaGluZQorICogQG1hc2s6IFZMQU4gQ0FNIG1hc2sKKyAqCisgKiBNYXNrIHNldHMgVkxBTiBmaWx0ZXJzIGFjdGl2ZS9pbmFjdGl2ZS4KKyAqLworc3RhdGljIHZvaWQgcmhpbmVfc2V0X3ZsYW5fY2FtX21hc2sodm9pZCBfX2lvbWVtICppb2FkZHIsIHUzMiBtYXNrKQoreworCWlvd3JpdGU4KENBTUNfQ0FNRU4gfCBDQU1DX1ZDQU1TTCwgaW9hZGRyICsgQ2FtQ29uKTsKKwl3bWIoKTsKKworCS8qIHdyaXRlIG1hc2sgKi8KKwlpb3dyaXRlMzIobWFzaywgaW9hZGRyICsgQ2FtTWFzayk7CisKKwkvKiBkaXNhYmxlIENBTUVOICovCisJaW93cml0ZTgoMCwgaW9hZGRyICsgQ2FtQ29uKTsKK30KKworLyoqCisgKiByaGluZV9pbml0X2NhbV9maWx0ZXIgLSBpbml0aWFsaXplIENBTSBmaWx0ZXJzCisgKiBAZGV2OiBuZXR3b3JrIGRldmljZQorICoKKyAqIEluaXRpYWxpemUgKGRpc2FibGUpIGhhcmR3YXJlIFZMQU4gYW5kIG11bHRpY2FzdCBzdXBwb3J0IG9uIHRoaXMKKyAqIFJoaW5lLgorICovCitzdGF0aWMgdm9pZCByaGluZV9pbml0X2NhbV9maWx0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcmhpbmVfcHJpdmF0ZSAqcnAgPSBuZXRkZXZfcHJpdihkZXYpOworCXZvaWQgX19pb21lbSAqaW9hZGRyID0gcnAtPmJhc2U7CisKKwkvKiBEaXNhYmxlIGFsbCBDQU1zICovCisJcmhpbmVfc2V0X3ZsYW5fY2FtX21hc2soaW9hZGRyLCAwKTsKKwlyaGluZV9zZXRfY2FtX21hc2soaW9hZGRyLCAwKTsKKworCS8qIGRpc2FibGUgaGFyZHdhcmUgVkxBTiBzdXBwb3J0ICovCisJQllURV9SRUdfQklUU19PTihUQ1JfUFFFTiwgaW9hZGRyICsgVHhDb25maWcpOworCUJZVEVfUkVHX0JJVFNfT0ZGKEJDUjFfVklERlIsIGlvYWRkciArIFBDSUJ1c0NvbmZpZzEpOworfQorCisvKioKKyAqIHJoaW5lX3VwZGF0ZV92Y2FtIC0gdXBkYXRlIFZMQU4gQ0FNIGZpbHRlcnMKKyAqIEBycDogcmhpbmVfcHJpdmF0ZSBkYXRhIG9mIHRoaXMgUmhpbmUKKyAqCisgKiBVcGRhdGUgVkxBTiBDQU0gZmlsdGVycyB0byBtYXRjaCBjb25maWd1cmF0aW9uIGNoYW5nZS4KKyAqLworc3RhdGljIHZvaWQgcmhpbmVfdXBkYXRlX3ZjYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcmhpbmVfcHJpdmF0ZSAqcnAgPSBuZXRkZXZfcHJpdihkZXYpOworCXZvaWQgX19pb21lbSAqaW9hZGRyID0gcnAtPmJhc2U7CisJdTE2IHZpZDsKKwl1MzIgdkNBTW1hc2sgPSAwOwkvKiAzMiB2Q0FNcyAoNjEwNU0gYW5kIGJldHRlcikgKi8KKwl1bnNpZ25lZCBpbnQgaSA9IDA7CisKKwlmb3JfZWFjaF9zZXRfYml0KHZpZCwgcnAtPmFjdGl2ZV92bGFucywgVkxBTl9OX1ZJRCkgeworCQlyaGluZV9zZXRfdmxhbl9jYW0oaW9hZGRyLCBpLCAodTggKikmdmlkKTsKKwkJdkNBTW1hc2sgfD0gMSA8PCBpOworCQlpZiAoKytpID49IFZDQU1fU0laRSkKKwkJCWJyZWFrOworCX0KKwlyaGluZV9zZXRfdmxhbl9jYW1fbWFzayhpb2FkZHIsIHZDQU1tYXNrKTsKK30KKworc3RhdGljIHZvaWQgcmhpbmVfdmxhbl9yeF9hZGRfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIHNob3J0IHZpZCkKK3sKKwlzdHJ1Y3QgcmhpbmVfcHJpdmF0ZSAqcnAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJc3Bpbl9sb2NrX2lycSgmcnAtPmxvY2spOworCXNldF9iaXQodmlkLCBycC0+YWN0aXZlX3ZsYW5zKTsKKwlyaGluZV91cGRhdGVfdmNhbShkZXYpOworCXNwaW5fdW5sb2NrX2lycSgmcnAtPmxvY2spOworfQorCitzdGF0aWMgdm9pZCByaGluZV92bGFuX3J4X2tpbGxfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIHNob3J0IHZpZCkKK3sKKwlzdHJ1Y3QgcmhpbmVfcHJpdmF0ZSAqcnAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJc3Bpbl9sb2NrX2lycSgmcnAtPmxvY2spOworCWNsZWFyX2JpdCh2aWQsIHJwLT5hY3RpdmVfdmxhbnMpOworCXJoaW5lX3VwZGF0ZV92Y2FtKGRldik7CisJc3Bpbl91bmxvY2tfaXJxKCZycC0+bG9jayk7Cit9CisKIHN0YXRpYyB2b2lkIGluaXRfcmVnaXN0ZXJzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHJoaW5lX3ByaXZhdGUgKnJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTEwNjEsNiArMTMwMCw5IEBACiAKIAlyaGluZV9zZXRfcnhfbW9kZShkZXYpOwogCisJaWYgKHJwLT5wZGV2LT5yZXZpc2lvbiA+PSBWVDYxMDVNKQorCQlyaGluZV9pbml0X2NhbV9maWx0ZXIoZGV2KTsKKwogCW5hcGlfZW5hYmxlKCZycC0+bmFwaSk7CiAKIAkvKiBFbmFibGUgaW50ZXJydXB0cyBieSBzZXR0aW5nIHRoZSBpbnRlcnJ1cHQgbWFzay4gKi8KQEAgLTEyNzYsMTYgKzE1MTgsMjggQEAKIAlycC0+dHhfcmluZ1tlbnRyeV0uZGVzY19sZW5ndGggPQogCQljcHVfdG9fbGUzMihUWERFU0MgfCAoc2tiLT5sZW4gPj0gRVRIX1pMRU4gPyBza2ItPmxlbiA6IEVUSF9aTEVOKSk7CiAKKwlpZiAodW5saWtlbHkodmxhbl90eF90YWdfcHJlc2VudChza2IpKSkgeworCQlycC0+dHhfcmluZ1tlbnRyeV0udHhfc3RhdHVzID0gY3B1X3RvX2xlMzIoKHZsYW5fdHhfdGFnX2dldChza2IpKSA8PCAxNik7CisJCS8qIHJlcXVlc3QgdGFnZ2luZyAqLworCQlycC0+dHhfcmluZ1tlbnRyeV0uZGVzY19sZW5ndGggfD0gY3B1X3RvX2xlMzIoMHgwMjAwMDApOworCX0KKwllbHNlCisJCXJwLT50eF9yaW5nW2VudHJ5XS50eF9zdGF0dXMgPSAwOworCiAJLyogbG9jayBldGggaXJxICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnJwLT5sb2NrLCBmbGFncyk7CiAJd21iKCk7Ci0JcnAtPnR4X3JpbmdbZW50cnldLnR4X3N0YXR1cyA9IGNwdV90b19sZTMyKERlc2NPd24pOworCXJwLT50eF9yaW5nW2VudHJ5XS50eF9zdGF0dXMgfD0gY3B1X3RvX2xlMzIoRGVzY093bik7CiAJd21iKCk7CiAKIAlycC0+Y3VyX3R4Kys7CiAKIAkvKiBOb24teDg2IFRvZG86IGV4cGxpY2l0bHkgZmx1c2ggY2FjaGUgbGluZXMgaGVyZS4gKi8KIAorCWlmICh2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpCisJCS8qIFR4IHF1ZXVlcyBhcmUgYml0cyA3LTAgKGZpcnN0IFR4IHF1ZXVlOiBiaXQgNykgKi8KKwkJQllURV9SRUdfQklUU19PTigxIDw8IDcsIGlvYWRkciArIFRRV2FrZSk7CisKIAkvKiBXYWtlIHRoZSBwb3RlbnRpYWxseS1pZGxlIHRyYW5zbWl0IGNoYW5uZWwgKi8KIAlpb3dyaXRlOChpb3JlYWQ4KGlvYWRkciArIENoaXBDbWQxKSB8IENtZDFUeERlbWFuZCwKIAkgICAgICAgaW9hZGRyICsgQ2hpcENtZDEpOwpAQCAtMTQzNyw2ICsxNjkxLDIxIEBACiAJc3Bpbl91bmxvY2soJnJwLT5sb2NrKTsKIH0KIAorLyoqCisgKiByaGluZV9nZXRfdmxhbl90Y2kgLSBleHRyYWN0IFRDSSBmcm9tIFJ4IGRhdGEgYnVmZmVyCisgKiBAc2tiOiBwb2ludGVyIHRvIHNrX2J1ZmYKKyAqIEBkYXRhX3NpemU6IHVzZWQgZGF0YSBhcmVhIG9mIHRoZSBidWZmZXIgaW5jbHVkaW5nIENSQworICoKKyAqIElmIGhhcmR3YXJlIFZMQU4gdGFnIGV4dHJhY3Rpb24gaXMgZW5hYmxlZCBhbmQgdGhlIGNoaXAgaW5kaWNhdGVzIGEgODAyLjFRCisgKiBwYWNrZXQsIHRoZSBleHRyYWN0ZWQgODAyLjFRIGhlYWRlciAoMiBieXRlcyBUUElEICsgMiBieXRlcyBUQ0kpIGlzIDQtYnl0ZQorICogYWxpZ25lZCBmb2xsb3dpbmcgdGhlIENSQy4KKyAqLworc3RhdGljIGlubGluZSB1MTYgcmhpbmVfZ2V0X3ZsYW5fdGNpKHN0cnVjdCBza19idWZmICpza2IsIGludCBkYXRhX3NpemUpCit7CisJdTggKnRyYWlsZXIgPSAodTggKilza2ItPmRhdGEgKyAoKGRhdGFfc2l6ZSArIDMpICYgfjMpICsgMjsKKwlyZXR1cm4gbnRvaHMoKih1MTYgKil0cmFpbGVyKTsKK30KKwogLyogUHJvY2VzcyB1cCB0byBsaW1pdCBmcmFtZXMgZnJvbSByZWNlaXZlIHJpbmcgKi8KIHN0YXRpYyBpbnQgcmhpbmVfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGxpbWl0KQogewpAQCAtMTQ1NCw2ICsxNzIzLDcgQEAKIAlmb3IgKGNvdW50ID0gMDsgY291bnQgPCBsaW1pdDsgKytjb3VudCkgewogCQlzdHJ1Y3QgcnhfZGVzYyAqZGVzYyA9IHJwLT5yeF9oZWFkX2Rlc2M7CiAJCXUzMiBkZXNjX3N0YXR1cyA9IGxlMzJfdG9fY3B1KGRlc2MtPnJ4X3N0YXR1cyk7CisJCXUzMiBkZXNjX2xlbmd0aCA9IGxlMzJfdG9fY3B1KGRlc2MtPmRlc2NfbGVuZ3RoKTsKIAkJaW50IGRhdGFfc2l6ZSA9IGRlc2Nfc3RhdHVzID4+IDE2OwogCiAJCWlmIChkZXNjX3N0YXR1cyAmIERlc2NPd24pCkBAIC0xNDk4LDYgKzE3NjgsNyBAQAogCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7CiAJCQkvKiBMZW5ndGggc2hvdWxkIG9taXQgdGhlIENSQyAqLwogCQkJaW50IHBrdF9sZW4gPSBkYXRhX3NpemUgLSA0OworCQkJdTE2IHZsYW5fdGNpID0gMDsKIAogCQkJLyogQ2hlY2sgaWYgdGhlIHBhY2tldCBpcyBsb25nIGVub3VnaCB0byBhY2NlcHQgd2l0aG91dAogCQkJICAgY29weWluZyB0byBhIG1pbmltYWxseS1zaXplZCBza2J1ZmYuICovCkBAIC0xNTMyLDcgKzE4MDMsMTQgQEAKIAkJCQkJCSBycC0+cnhfYnVmX3N6LAogCQkJCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCQl9CisKKwkJCWlmICh1bmxpa2VseShkZXNjX2xlbmd0aCAmIERlc2NUYWcpKQorCQkJCXZsYW5fdGNpID0gcmhpbmVfZ2V0X3ZsYW5fdGNpKHNrYiwgZGF0YV9zaXplKTsKKwogCQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsKKworCQkJaWYgKHVubGlrZWx5KGRlc2NfbGVuZ3RoICYgRGVzY1RhZykpCisJCQkJX192bGFuX2h3YWNjZWxfcHV0X3RhZyhza2IsIHZsYW5fdGNpKTsKIAkJCW5ldGlmX3JlY2VpdmVfc2tiKHNrYik7CiAJCQlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHBrdF9sZW47CiAJCQlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKQEAgLTE1OTYsNiArMTg3NCwxMSBAQAogCiAJCWlvd3JpdGU4KGlvcmVhZDgoaW9hZGRyICsgQ2hpcENtZCkgfCBDbWRUeE9uLAogCQkgICAgICAgaW9hZGRyICsgQ2hpcENtZCk7CisKKwkJaWYgKHJwLT50eF9yaW5nW2VudHJ5XS5kZXNjX2xlbmd0aCAmIGNwdV90b19sZTMyKDB4MDIwMDAwKSkKKwkJCS8qIFR4IHF1ZXVlcyBhcmUgYml0cyA3LTAgKGZpcnN0IFR4IHF1ZXVlOiBiaXQgNykgKi8KKwkJCUJZVEVfUkVHX0JJVFNfT04oMSA8PCA3LCBpb2FkZHIgKyBUUVdha2UpOworCiAJCWlvd3JpdGU4KGlvcmVhZDgoaW9hZGRyICsgQ2hpcENtZDEpIHwgQ21kMVR4RGVtYW5kLAogCQkgICAgICAgaW9hZGRyICsgQ2hpcENtZDEpOwogCQlJT1NZTkM7CkBAIC0xNjMxLDcgKzE5MTQsNyBAQAogCX0KIAlpZiAoaW50cl9zdGF0dXMgJiBJbnRyVHhVbmRlcnJ1bikgewogCQlpZiAocnAtPnR4X3RocmVzaCA8IDB4RTApCi0JCQlpb3dyaXRlOChycC0+dHhfdGhyZXNoICs9IDB4MjAsIGlvYWRkciArIFR4Q29uZmlnKTsKKwkJCUJZVEVfUkVHX0JJVFNfU0VUKChycC0+dHhfdGhyZXNoICs9IDB4MjApLCAweDgwLCBpb2FkZHIgKyBUeENvbmZpZyk7CiAJCWlmIChkZWJ1ZyA+IDEpCiAJCQlwcmludGsoS0VSTl9JTkZPICIlczogVHJhbnNtaXR0ZXIgdW5kZXJydW4sIFR4ICIKIAkJCSAgICAgICAidGhyZXNob2xkIG5vdyAlMi4yeC5cbiIsCkBAIC0xNjQ2LDcgKzE5MjksNyBAQAogCSAgICAoaW50cl9zdGF0dXMgJiAoSW50clR4QWJvcnRlZCB8CiAJICAgICBJbnRyVHhVbmRlcnJ1biB8IEludHJUeERlc2NSYWNlKSkgPT0gMCkgewogCQlpZiAocnAtPnR4X3RocmVzaCA8IDB4RTApIHsKLQkJCWlvd3JpdGU4KHJwLT50eF90aHJlc2ggKz0gMHgyMCwgaW9hZGRyICsgVHhDb25maWcpOworCQkJQllURV9SRUdfQklUU19TRVQoKHJwLT50eF90aHJlc2ggKz0gMHgyMCksIDB4ODAsIGlvYWRkciArIFR4Q29uZmlnKTsKIAkJfQogCQlpZiAoZGVidWcgPiAxKQogCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFVuc3BlY2lmaWVkIGVycm9yLiBUeCAiCkBAIC0xNjg4LDcgKzE5NzEsOCBAQAogCXN0cnVjdCByaGluZV9wcml2YXRlICpycCA9IG5ldGRldl9wcml2KGRldik7CiAJdm9pZCBfX2lvbWVtICppb2FkZHIgPSBycC0+YmFzZTsKIAl1MzIgbWNfZmlsdGVyWzJdOwkvKiBNdWx0aWNhc3QgaGFzaCBmaWx0ZXIgKi8KLQl1OCByeF9tb2RlOwkJLyogTm90ZTogMHgwMj1hY2NlcHQgcnVudCwgMHgwMT1hY2NlcHQgZXJycyAqLworCXU4IHJ4X21vZGUgPSAweDBDOwkvKiBOb3RlOiAweDAyPWFjY2VwdCBydW50LCAweDAxPWFjY2VwdCBlcnJzICovCisJc3RydWN0IG5ldGRldl9od19hZGRyICpoYTsKIAogCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsJCS8qIFNldCBwcm9taXNjdW91cy4gKi8KIAkJcnhfbW9kZSA9IDB4MUM7CkBAIC0xNjk5LDEwICsxOTgzLDE4IEBACiAJCS8qIFRvbyBtYW55IHRvIG1hdGNoLCBvciBhY2NlcHQgYWxsIG11bHRpY2FzdHMuICovCiAJCWlvd3JpdGUzMigweGZmZmZmZmZmLCBpb2FkZHIgKyBNdWx0aWNhc3RGaWx0ZXIwKTsKIAkJaW93cml0ZTMyKDB4ZmZmZmZmZmYsIGlvYWRkciArIE11bHRpY2FzdEZpbHRlcjEpOwotCQlyeF9tb2RlID0gMHgwQzsKKwl9IGVsc2UgaWYgKHJwLT5wZGV2LT5yZXZpc2lvbiA+PSBWVDYxMDVNKSB7CisJCWludCBpID0gMDsKKwkJdTMyIG1DQU1tYXNrID0gMDsJLyogMzIgbUNBTXMgKDYxMDVNIGFuZCBiZXR0ZXIpICovCisJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGhhLCBkZXYpIHsKKwkJCWlmIChpID09IE1DQU1fU0laRSkKKwkJCQlicmVhazsKKwkJCXJoaW5lX3NldF9jYW0oaW9hZGRyLCBpLCBoYS0+YWRkcik7CisJCQltQ0FNbWFzayB8PSAxIDw8IGk7CisJCQlpKys7CisJCX0KKwkJcmhpbmVfc2V0X2NhbV9tYXNrKGlvYWRkciwgbUNBTW1hc2spOwogCX0gZWxzZSB7Ci0JCXN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7Ci0KIAkJbWVtc2V0KG1jX2ZpbHRlciwgMCwgc2l6ZW9mKG1jX2ZpbHRlcikpOwogCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihoYSwgZGV2KSB7CiAJCQlpbnQgYml0X25yID0gZXRoZXJfY3JjKEVUSF9BTEVOLCBoYS0+YWRkcikgPj4gMjY7CkBAIC0xNzExLDkgKzIwMDMsMTUgQEAKIAkJfQogCQlpb3dyaXRlMzIobWNfZmlsdGVyWzBdLCBpb2FkZHIgKyBNdWx0aWNhc3RGaWx0ZXIwKTsKIAkJaW93cml0ZTMyKG1jX2ZpbHRlclsxXSwgaW9hZGRyICsgTXVsdGljYXN0RmlsdGVyMSk7Ci0JCXJ4X21vZGUgPSAweDBDOwogCX0KLQlpb3dyaXRlOChycC0+cnhfdGhyZXNoIHwgcnhfbW9kZSwgaW9hZGRyICsgUnhDb25maWcpOworCS8qIGVuYWJsZS9kaXNhYmxlIFZMQU4gcmVjZWl2ZSBmaWx0ZXJpbmcgKi8KKwlpZiAocnAtPnBkZXYtPnJldmlzaW9uID49IFZUNjEwNU0pIHsKKwkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykKKwkJCUJZVEVfUkVHX0JJVFNfT0ZGKEJDUjFfVklERlIsIGlvYWRkciArIFBDSUJ1c0NvbmZpZzEpOworCQllbHNlCisJCQlCWVRFX1JFR19CSVRTX09OKEJDUjFfVklERlIsIGlvYWRkciArIFBDSUJ1c0NvbmZpZzEpOworCX0KKwlCWVRFX1JFR19CSVRTX09OKHJ4X21vZGUsIGlvYWRkciArIFJ4Q29uZmlnKTsKIH0KIAogc3RhdGljIHZvaWQgbmV0ZGV2X2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2RydmluZm8gKmluZm8pCkBAIC0xOTY2LDcgKzIyNjQsNyBAQAogCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQogCQlyZXR1cm4gMDsKIAotICAgICAgICBpZiAocmVxdWVzdF9pcnEoZGV2LT5pcnEsIHJoaW5lX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsIGRldi0+bmFtZSwgZGV2KSkKKwlpZiAocmVxdWVzdF9pcnEoZGV2LT5pcnEsIHJoaW5lX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsIGRldi0+bmFtZSwgZGV2KSkKIAkJcHJpbnRrKEtFUk5fRVJSICJ2aWEtcmhpbmUgJXM6IHJlcXVlc3RfaXJxIGZhaWxlZFxuIiwgZGV2LT5uYW1lKTsKIAogCXJldCA9IHBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYyBiL2RyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYwppbmRleCBiNmQ0MDI4Li45MGEyM2U0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMKKysrIGIvZHJpdmVycy9uZXQvdmlydGlvX25ldC5jCkBAIC01MTksNyArNTE5LDcgQEAKIAogCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7CiAJCWhkci0+aGRyLmZsYWdzID0gVklSVElPX05FVF9IRFJfRl9ORUVEU19DU1VNOwotCQloZHItPmhkci5jc3VtX3N0YXJ0ID0gc2tiLT5jc3VtX3N0YXJ0IC0gc2tiX2hlYWRyb29tKHNrYik7CisJCWhkci0+aGRyLmNzdW1fc3RhcnQgPSBza2JfY2hlY2tzdW1fc3RhcnRfb2Zmc2V0KHNrYik7CiAJCWhkci0+aGRyLmNzdW1fb2Zmc2V0ID0gc2tiLT5jc3VtX29mZnNldDsKIAl9IGVsc2UgewogCQloZHItPmhkci5mbGFncyA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92bXhuZXQzL3ZteG5ldDNfZHJ2LmMgYi9kcml2ZXJzL25ldC92bXhuZXQzL3ZteG5ldDNfZHJ2LmMKaW5kZXggMjEzMTRlMC4uZDE0M2U4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdm14bmV0My92bXhuZXQzX2Rydi5jCisrKyBiL2RyaXZlcnMvbmV0L3ZteG5ldDMvdm14bmV0M19kcnYuYwpAQCAtNDQsNiArNDQsOSBAQAogCiBzdGF0aWMgYXRvbWljX3QgZGV2aWNlc19mb3VuZDsKIAorI2RlZmluZSBWTVhORVQzX01BWF9ERVZJQ0VTIDEwCitzdGF0aWMgaW50IGVuYWJsZV9tcSA9IDE7CitzdGF0aWMgaW50IGlycV9zaGFyZV9tb2RlOwogCiAvKgogICogICAgRW5hYmxlL0Rpc2FibGUgdGhlIGdpdmVuIGludHIKQEAgLTk5LDcgKzEwMiw3IEBACiBzdGF0aWMgYm9vbAogdm14bmV0M190cV9zdG9wcGVkKHN0cnVjdCB2bXhuZXQzX3R4X3F1ZXVlICp0cSwgc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlcikKIHsKLQlyZXR1cm4gbmV0aWZfcXVldWVfc3RvcHBlZChhZGFwdGVyLT5uZXRkZXYpOworCXJldHVybiB0cS0+c3RvcHBlZDsKIH0KIAogCkBAIC0xMDcsNyArMTEwLDcgQEAKIHZteG5ldDNfdHFfc3RhcnQoc3RydWN0IHZteG5ldDNfdHhfcXVldWUgKnRxLCBzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyKQogewogCXRxLT5zdG9wcGVkID0gZmFsc2U7Ci0JbmV0aWZfc3RhcnRfcXVldWUoYWRhcHRlci0+bmV0ZGV2KTsKKwluZXRpZl9zdGFydF9zdWJxdWV1ZShhZGFwdGVyLT5uZXRkZXYsIHRxIC0gYWRhcHRlci0+dHhfcXVldWUpOwogfQogCiAKQEAgLTExNSw3ICsxMTgsNyBAQAogdm14bmV0M190cV93YWtlKHN0cnVjdCB2bXhuZXQzX3R4X3F1ZXVlICp0cSwgc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlcikKIHsKIAl0cS0+c3RvcHBlZCA9IGZhbHNlOwotCW5ldGlmX3dha2VfcXVldWUoYWRhcHRlci0+bmV0ZGV2KTsKKwluZXRpZl93YWtlX3N1YnF1ZXVlKGFkYXB0ZXItPm5ldGRldiwgKHRxIC0gYWRhcHRlci0+dHhfcXVldWUpKTsKIH0KIAogCkBAIC0xMjQsNyArMTI3LDcgQEAKIHsKIAl0cS0+c3RvcHBlZCA9IHRydWU7CiAJdHEtPm51bV9zdG9wKys7Ci0JbmV0aWZfc3RvcF9xdWV1ZShhZGFwdGVyLT5uZXRkZXYpOworCW5ldGlmX3N0b3Bfc3VicXVldWUoYWRhcHRlci0+bmV0ZGV2LCAodHEgLSBhZGFwdGVyLT50eF9xdWV1ZSkpOwogfQogCiAKQEAgLTEzNSw2ICsxMzgsNyBAQAogdm14bmV0M19jaGVja19saW5rKHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIsIGJvb2wgYWZmZWN0VHhRdWV1ZSkKIHsKIAl1MzIgcmV0OworCWludCBpOwogCiAJVk1YTkVUM19XUklURV9CQVIxX1JFRyhhZGFwdGVyLCBWTVhORVQzX1JFR19DTUQsIFZNWE5FVDNfQ01EX0dFVF9MSU5LKTsKIAlyZXQgPSBWTVhORVQzX1JFQURfQkFSMV9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfQ01EKTsKQEAgLTE0NSwyMiArMTQ5LDI4IEBACiAJCWlmICghbmV0aWZfY2Fycmllcl9vayhhZGFwdGVyLT5uZXRkZXYpKQogCQkJbmV0aWZfY2Fycmllcl9vbihhZGFwdGVyLT5uZXRkZXYpOwogCi0JCWlmIChhZmZlY3RUeFF1ZXVlKQotCQkJdm14bmV0M190cV9zdGFydCgmYWRhcHRlci0+dHhfcXVldWUsIGFkYXB0ZXIpOworCQlpZiAoYWZmZWN0VHhRdWV1ZSkgeworCQkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGkrKykKKwkJCQl2bXhuZXQzX3RxX3N0YXJ0KCZhZGFwdGVyLT50eF9xdWV1ZVtpXSwKKwkJCQkJCSBhZGFwdGVyKTsKKwkJfQogCX0gZWxzZSB7CiAJCXByaW50ayhLRVJOX0lORk8gIiVzOiBOSUMgTGluayBpcyBEb3duXG4iLAogCQkgICAgICAgYWRhcHRlci0+bmV0ZGV2LT5uYW1lKTsKIAkJaWYgKG5ldGlmX2NhcnJpZXJfb2soYWRhcHRlci0+bmV0ZGV2KSkKIAkJCW5ldGlmX2NhcnJpZXJfb2ZmKGFkYXB0ZXItPm5ldGRldik7CiAKLQkJaWYgKGFmZmVjdFR4UXVldWUpCi0JCQl2bXhuZXQzX3RxX3N0b3AoJmFkYXB0ZXItPnR4X3F1ZXVlLCBhZGFwdGVyKTsKKwkJaWYgKGFmZmVjdFR4UXVldWUpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspCisJCQkJdm14bmV0M190cV9zdG9wKCZhZGFwdGVyLT50eF9xdWV1ZVtpXSwgYWRhcHRlcik7CisJCX0KIAl9CiB9CiAKIHN0YXRpYyB2b2lkCiB2bXhuZXQzX3Byb2Nlc3NfZXZlbnRzKHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CisJaW50IGk7CiAJdTMyIGV2ZW50cyA9IGxlMzJfdG9fY3B1KGFkYXB0ZXItPnNoYXJlZC0+ZWNyKTsKIAlpZiAoIWV2ZW50cykKIAkJcmV0dXJuOwpAQCAtMTc2LDE2ICsxODYsMTggQEAKIAkJVk1YTkVUM19XUklURV9CQVIxX1JFRyhhZGFwdGVyLCBWTVhORVQzX1JFR19DTUQsCiAJCQkJICAgICAgIFZNWE5FVDNfQ01EX0dFVF9RVUVVRV9TVEFUVVMpOwogCi0JCWlmIChhZGFwdGVyLT50cWRfc3RhcnQtPnN0YXR1cy5zdG9wcGVkKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiB0cSBlcnJvciAweCV4XG4iLAotCQkJICAgICAgIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwKLQkJCSAgICAgICBsZTMyX3RvX2NwdShhZGFwdGVyLT50cWRfc3RhcnQtPnN0YXR1cy5lcnJvcikpOwotCQl9Ci0JCWlmIChhZGFwdGVyLT5ycWRfc3RhcnQtPnN0YXR1cy5zdG9wcGVkKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBycSBlcnJvciAweCV4XG4iLAotCQkJICAgICAgIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwKLQkJCSAgICAgICBhZGFwdGVyLT5ycWRfc3RhcnQtPnN0YXR1cy5lcnJvcik7Ci0JCX0KKwkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGkrKykKKwkJCWlmIChhZGFwdGVyLT50cWRfc3RhcnRbaV0uc3RhdHVzLnN0b3BwZWQpCisJCQkJZGV2X2VycigmYWRhcHRlci0+bmV0ZGV2LT5kZXYsCisJCQkJCSIlczogdHFbJWRdIGVycm9yIDB4JXhcbiIsCisJCQkJCWFkYXB0ZXItPm5ldGRldi0+bmFtZSwgaSwgbGUzMl90b19jcHUoCisJCQkJCWFkYXB0ZXItPnRxZF9zdGFydFtpXS5zdGF0dXMuZXJyb3IpKTsKKwkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykKKwkJCWlmIChhZGFwdGVyLT5ycWRfc3RhcnRbaV0uc3RhdHVzLnN0b3BwZWQpCisJCQkJZGV2X2VycigmYWRhcHRlci0+bmV0ZGV2LT5kZXYsCisJCQkJCSIlczogcnFbJWRdIGVycm9yIDB4JXhcbiIsCisJCQkJCWFkYXB0ZXItPm5ldGRldi0+bmFtZSwgaSwKKwkJCQkJYWRhcHRlci0+cnFkX3N0YXJ0W2ldLnN0YXR1cy5lcnJvcik7CiAKIAkJc2NoZWR1bGVfd29yaygmYWRhcHRlci0+d29yayk7CiAJfQpAQCAtNDEwLDcgKzQyMiw3IEBACiB9CiAKIAotdm9pZAorc3RhdGljIHZvaWQKIHZteG5ldDNfdHFfZGVzdHJveShzdHJ1Y3Qgdm14bmV0M190eF9xdWV1ZSAqdHEsCiAJCSAgIHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CkBAIC00MzcsNiArNDQ5LDE3IEBACiB9CiAKIAorLyogRGVzdHJveSBhbGwgdHggcXVldWVzICovCit2b2lkCit2bXhuZXQzX3RxX2Rlc3Ryb3lfYWxsKHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKQorCQl2bXhuZXQzX3RxX2Rlc3Ryb3koJmFkYXB0ZXItPnR4X3F1ZXVlW2ldLCBhZGFwdGVyKTsKK30KKworCiBzdGF0aWMgdm9pZAogdm14bmV0M190cV9pbml0KHN0cnVjdCB2bXhuZXQzX3R4X3F1ZXVlICp0cSwKIAkJc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlcikKQEAgLTUxOCw2ICs1NDEsMTQgQEAKIAlyZXR1cm4gLUVOT01FTTsKIH0KIAorc3RhdGljIHZvaWQKK3ZteG5ldDNfdHFfY2xlYW51cF9hbGwoc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspCisJCXZteG5ldDNfdHFfY2xlYW51cCgmYWRhcHRlci0+dHhfcXVldWVbaV0sIGFkYXB0ZXIpOworfQogCiAvKgogICogICAgc3RhcnRpbmcgZnJvbSByaW5nLT5uZXh0MmZpbGwsIGFsbG9jYXRlIHJ4IGJ1ZmZlcnMgZm9yIHRoZSBnaXZlbiByaW5nCkBAIC03MzIsNiArNzYzLDE3IEBACiB9CiAKIAorLyogSW5pdCBhbGwgdHggcXVldWVzICovCitzdGF0aWMgdm9pZAordm14bmV0M190cV9pbml0X2FsbChzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGkrKykKKwkJdm14bmV0M190cV9pbml0KCZhZGFwdGVyLT50eF9xdWV1ZVtpXSwgYWRhcHRlcik7Cit9CisKKwogLyoKICAqICAgIHBhcnNlIGFuZCBjb3B5IHJlbGV2YW50IHByb3RvY29sIGhlYWRlcnM6CiAgKiAgICAgIEZvciBhIHRzbyBwa3QsIHJlbGV2YW50IGhlYWRlcnMgYXJlIEwyLzMvNCBpbmNsdWRpbmcgb3B0aW9ucwpAQCAtNzU2LDcgKzc5OCw3IEBACiB7CiAJc3RydWN0IFZteG5ldDNfVHhEYXRhRGVzYyAqdGRkOwogCi0JaWYgKGN0eC0+bXNzKSB7CisJaWYgKGN0eC0+bXNzKSB7CS8qIFRTTyAqLwogCQljdHgtPmV0aF9pcF9oZHJfc2l6ZSA9IHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYik7CiAJCWN0eC0+bDRfaGRyX3NpemUgPSAoKHN0cnVjdCB0Y3BoZHIgKikKIAkJCQkgICBza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpKS0+ZG9mZiAqIDQ7CkBAIC03NjUsNyArODA3LDcgQEAKIAkJdW5zaWduZWQgaW50IHB1bGxfc2l6ZTsKIAogCQlpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkgewotCQkJY3R4LT5ldGhfaXBfaGRyX3NpemUgPSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpOworCQkJY3R4LT5ldGhfaXBfaGRyX3NpemUgPSBza2JfY2hlY2tzdW1fc3RhcnRfb2Zmc2V0KHNrYik7CiAKIAkJCWlmIChjdHgtPmlwdjQpIHsKIAkJCQlzdHJ1Y3QgaXBoZHIgKmlwaCA9IChzdHJ1Y3QgaXBoZHIgKikKQEAgLTkwMyw2ICs5NDUsMjEgQEAKIAkJfQogCX0KIAorCXNwaW5fbG9ja19pcnFzYXZlKCZ0cS0+dHhfbG9jaywgZmxhZ3MpOworCisJaWYgKGNvdW50ID4gdm14bmV0M19jbWRfcmluZ19kZXNjX2F2YWlsKCZ0cS0+dHhfcmluZykpIHsKKwkJdHEtPnN0YXRzLnR4X3JpbmdfZnVsbCsrOworCQlkZXZfZGJnKCZhZGFwdGVyLT5uZXRkZXYtPmRldiwKKwkJCSJ0eCBxdWV1ZSBzdG9wcGVkIG9uICVzLCBuZXh0MmNvbXAgJXUiCisJCQkiIG5leHQyZmlsbCAldVxuIiwgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLAorCQkJdHEtPnR4X3JpbmcubmV4dDJjb21wLCB0cS0+dHhfcmluZy5uZXh0MmZpbGwpOworCisJCXZteG5ldDNfdHFfc3RvcCh0cSwgYWRhcHRlcik7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRxLT50eF9sb2NrLCBmbGFncyk7CisJCXJldHVybiBORVRERVZfVFhfQlVTWTsKKwl9CisKKwogCXJldCA9IHZteG5ldDNfcGFyc2VfYW5kX2NvcHlfaGRyKHNrYiwgdHEsICZjdHgsIGFkYXB0ZXIpOwogCWlmIChyZXQgPj0gMCkgewogCQlCVUdfT04ocmV0IDw9IDAgJiYgY3R4LmNvcHlfc2l6ZSAhPSAwKTsKQEAgLTkyMywyMSArOTgwLDcgQEAKIAkJfQogCX0gZWxzZSB7CiAJCXRxLT5zdGF0cy5kcm9wX2hkcl9pbnNwZWN0X2VycisrOwotCQlnb3RvIGRyb3BfcGt0OwotCX0KLQotCXNwaW5fbG9ja19pcnFzYXZlKCZ0cS0+dHhfbG9jaywgZmxhZ3MpOwotCi0JaWYgKGNvdW50ID4gdm14bmV0M19jbWRfcmluZ19kZXNjX2F2YWlsKCZ0cS0+dHhfcmluZykpIHsKLQkJdHEtPnN0YXRzLnR4X3JpbmdfZnVsbCsrOwotCQlkZXZfZGJnKCZhZGFwdGVyLT5uZXRkZXYtPmRldiwKLQkJCSJ0eCBxdWV1ZSBzdG9wcGVkIG9uICVzLCBuZXh0MmNvbXAgJXUiCi0JCQkiIG5leHQyZmlsbCAldVxuIiwgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLAotCQkJdHEtPnR4X3JpbmcubmV4dDJjb21wLCB0cS0+dHhfcmluZy5uZXh0MmZpbGwpOwotCi0JCXZteG5ldDNfdHFfc3RvcCh0cSwgYWRhcHRlcik7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRxLT50eF9sb2NrLCBmbGFncyk7Ci0JCXJldHVybiBORVRERVZfVFhfQlVTWTsKKwkJZ290byB1bmxvY2tfZHJvcF9wa3Q7CiAJfQogCiAJLyogZmlsbCB0eCBkZXNjcyByZWxhdGVkIHRvIGFkZHIgJiBsZW4gKi8KQEAgLTEwMDAsNyArMTA0Myw4IEBACiAJaWYgKGxlMzJfdG9fY3B1KHRxLT5zaGFyZWQtPnR4TnVtRGVmZXJyZWQpID49CiAJCQkJCWxlMzJfdG9fY3B1KHRxLT5zaGFyZWQtPnR4VGhyZXNob2xkKSkgewogCQl0cS0+c2hhcmVkLT50eE51bURlZmVycmVkID0gMDsKLQkJVk1YTkVUM19XUklURV9CQVIwX1JFRyhhZGFwdGVyLCBWTVhORVQzX1JFR19UWFBST0QsCisJCVZNWE5FVDNfV1JJVEVfQkFSMF9SRUcoYWRhcHRlciwKKwkJCQkgICAgICAgVk1YTkVUM19SRUdfVFhQUk9EICsgdHEtPnFpZCAqIDgsCiAJCQkJICAgICAgIHRxLT50eF9yaW5nLm5leHQyZmlsbCk7CiAJfQogCkBAIC0xMDA4LDYgKzEwNTIsOCBAQAogCiBoZHJfdG9vX2JpZzoKIAl0cS0+c3RhdHMuZHJvcF9vdmVyc2l6ZWRfaGRyKys7Cit1bmxvY2tfZHJvcF9wa3Q6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHEtPnR4X2xvY2ssIGZsYWdzKTsKIGRyb3BfcGt0OgogCXRxLT5zdGF0cy5kcm9wX3RvdGFsKys7CiAJZGV2X2tmcmVlX3NrYihza2IpOwpAQCAtMTAyMCw3ICsxMDY2LDEwIEBACiB7CiAJc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAKLQlyZXR1cm4gdm14bmV0M190cV94bWl0KHNrYiwgJmFkYXB0ZXItPnR4X3F1ZXVlLCBhZGFwdGVyLCBuZXRkZXYpOworCQlCVUdfT04oc2tiLT5xdWV1ZV9tYXBwaW5nID4gYWRhcHRlci0+bnVtX3R4X3F1ZXVlcyk7CisJCXJldHVybiB2bXhuZXQzX3RxX3htaXQoc2tiLAorCQkJCSAgICAgICAmYWRhcHRlci0+dHhfcXVldWVbc2tiLT5xdWV1ZV9tYXBwaW5nXSwKKwkJCQkgICAgICAgYWRhcHRlciwgbmV0ZGV2KTsKIH0KIAogCkBAIC0xMDgyLDcgKzExMzEsOSBAQAogdm14bmV0M19ycV9yeF9jb21wbGV0ZShzdHJ1Y3Qgdm14bmV0M19yeF9xdWV1ZSAqcnEsCiAJCSAgICAgICBzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyLCBpbnQgcXVvdGEpCiB7Ci0Jc3RhdGljIHUzMiByeHByb2RfcmVnWzJdID0ge1ZNWE5FVDNfUkVHX1JYUFJPRCwgVk1YTkVUM19SRUdfUlhQUk9EMn07CisJc3RhdGljIGNvbnN0IHUzMiByeHByb2RfcmVnWzJdID0geworCQlWTVhORVQzX1JFR19SWFBST0QsIFZNWE5FVDNfUkVHX1JYUFJPRDIKKwl9OwogCXUzMiBudW1fcnhkID0gMDsKIAlzdHJ1Y3QgVm14bmV0M19SeENvbXBEZXNjICpyY2Q7CiAJc3RydWN0IHZteG5ldDNfcnhfY3R4ICpjdHggPSAmcnEtPnJ4X2N0eDsKQEAgLTExMDYsOSArMTE1Nyw5IEBACiAJCQlicmVhazsKIAkJfQogCQludW1fcnhkKys7Ci0KKwkJQlVHX09OKHJjZC0+cnFJRCAhPSBycS0+cWlkICYmIHJjZC0+cnFJRCAhPSBycS0+cWlkMik7CiAJCWlkeCA9IHJjZC0+cnhkSWR4OwotCQlyaW5nX2lkeCA9IHJjZC0+cnFJRCA9PSBycS0+cWlkID8gMCA6IDE7CisJCXJpbmdfaWR4ID0gcmNkLT5ycUlEIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlcyA/IDAgOiAxOwogCQl2bXhuZXQzX2dldFJ4RGVzYyhyeGQsICZycS0+cnhfcmluZ1tyaW5nX2lkeF0uYmFzZVtpZHhdLnJ4ZCwKIAkJCQkgICZyeENtZERlc2MpOwogCQlyYmkgPSBycS0+YnVmX2luZm9bcmluZ19pZHhdICsgaWR4OwpAQCAtMTI2MCw2ICsxMzExLDE2IEBACiB9CiAKIAorc3RhdGljIHZvaWQKK3ZteG5ldDNfcnFfY2xlYW51cF9hbGwoc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspCisJCXZteG5ldDNfcnFfY2xlYW51cCgmYWRhcHRlci0+cnhfcXVldWVbaV0sIGFkYXB0ZXIpOworfQorCisKIHZvaWQgdm14bmV0M19ycV9kZXN0cm95KHN0cnVjdCB2bXhuZXQzX3J4X3F1ZXVlICpycSwKIAkJCXN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CkBAIC0xMzUxLDYgKzE0MTIsMjUgQEAKIAogCiBzdGF0aWMgaW50Cit2bXhuZXQzX3JxX2luaXRfYWxsKHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGksIGVyciA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKSB7CisJCWVyciA9IHZteG5ldDNfcnFfaW5pdCgmYWRhcHRlci0+cnhfcXVldWVbaV0sIGFkYXB0ZXIpOworCQlpZiAodW5saWtlbHkoZXJyKSkgeworCQkJZGV2X2VycigmYWRhcHRlci0+bmV0ZGV2LT5kZXYsICIlczogZmFpbGVkIHRvICIKKwkJCQkiaW5pdGlhbGl6ZSByeCBxdWV1ZSVpXG4iLAorCQkJCWFkYXB0ZXItPm5ldGRldi0+bmFtZSwgaSk7CisJCQlicmVhazsKKwkJfQorCX0KKwlyZXR1cm4gZXJyOworCit9CisKKworc3RhdGljIGludAogdm14bmV0M19ycV9jcmVhdGUoc3RydWN0IHZteG5ldDNfcnhfcXVldWUgKnJxLCBzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyKQogewogCWludCBpOwpAQCAtMTM5OCwzMiArMTQ3OCwxNzYgQEAKIAogCiBzdGF0aWMgaW50Cit2bXhuZXQzX3JxX2NyZWF0ZV9hbGwoc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgaSwgZXJyID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspIHsKKwkJZXJyID0gdm14bmV0M19ycV9jcmVhdGUoJmFkYXB0ZXItPnJ4X3F1ZXVlW2ldLCBhZGFwdGVyKTsKKwkJaWYgKHVubGlrZWx5KGVycikpIHsKKwkJCWRldl9lcnIoJmFkYXB0ZXItPm5ldGRldi0+ZGV2LAorCQkJCSIlczogZmFpbGVkIHRvIGNyZWF0ZSByeCBxdWV1ZSVpXG4iLAorCQkJCWFkYXB0ZXItPm5ldGRldi0+bmFtZSwgaSk7CisJCQlnb3RvIGVycl9vdXQ7CisJCX0KKwl9CisJcmV0dXJuIGVycjsKK2Vycl9vdXQ6CisJdm14bmV0M19ycV9kZXN0cm95X2FsbChhZGFwdGVyKTsKKwlyZXR1cm4gZXJyOworCit9CisKKy8qIE11bHRpcGxlIHF1ZXVlIGF3YXJlIHBvbGxpbmcgZnVuY3Rpb24gZm9yIHR4IGFuZCByeCAqLworCitzdGF0aWMgaW50CiB2bXhuZXQzX2RvX3BvbGwoc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlciwgaW50IGJ1ZGdldCkKIHsKKwlpbnQgcmNkX2RvbmUgPSAwLCBpOwogCWlmICh1bmxpa2VseShhZGFwdGVyLT5zaGFyZWQtPmVjcikpCiAJCXZteG5ldDNfcHJvY2Vzc19ldmVudHMoYWRhcHRlcik7CisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGkrKykKKwkJdm14bmV0M190cV90eF9jb21wbGV0ZSgmYWRhcHRlci0+dHhfcXVldWVbaV0sIGFkYXB0ZXIpOwogCi0Jdm14bmV0M190cV90eF9jb21wbGV0ZSgmYWRhcHRlci0+dHhfcXVldWUsIGFkYXB0ZXIpOwotCXJldHVybiB2bXhuZXQzX3JxX3J4X2NvbXBsZXRlKCZhZGFwdGVyLT5yeF9xdWV1ZSwgYWRhcHRlciwgYnVkZ2V0KTsKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKQorCQlyY2RfZG9uZSArPSB2bXhuZXQzX3JxX3J4X2NvbXBsZXRlKCZhZGFwdGVyLT5yeF9xdWV1ZVtpXSwKKwkJCQkJCSAgIGFkYXB0ZXIsIGJ1ZGdldCk7CisJcmV0dXJuIHJjZF9kb25lOwogfQogCiAKIHN0YXRpYyBpbnQKIHZteG5ldDNfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCiB7Ci0Jc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlciA9IGNvbnRhaW5lcl9vZihuYXBpLAotCQkJCQkgIHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIsIG5hcGkpOworCXN0cnVjdCB2bXhuZXQzX3J4X3F1ZXVlICpyeF9xdWV1ZSA9IGNvbnRhaW5lcl9vZihuYXBpLAorCQkJCQkgIHN0cnVjdCB2bXhuZXQzX3J4X3F1ZXVlLCBuYXBpKTsKIAlpbnQgcnhkX2RvbmU7CiAKLQlyeGRfZG9uZSA9IHZteG5ldDNfZG9fcG9sbChhZGFwdGVyLCBidWRnZXQpOworCXJ4ZF9kb25lID0gdm14bmV0M19kb19wb2xsKHJ4X3F1ZXVlLT5hZGFwdGVyLCBidWRnZXQpOwogCiAJaWYgKHJ4ZF9kb25lIDwgYnVkZ2V0KSB7CiAJCW5hcGlfY29tcGxldGUobmFwaSk7Ci0JCXZteG5ldDNfZW5hYmxlX2ludHIoYWRhcHRlciwgMCk7CisJCXZteG5ldDNfZW5hYmxlX2FsbF9pbnRycyhyeF9xdWV1ZS0+YWRhcHRlcik7CiAJfQogCXJldHVybiByeGRfZG9uZTsKIH0KIAorLyoKKyAqIE5BUEkgcG9sbGluZyBmdW5jdGlvbiBmb3IgTVNJLVggbW9kZSB3aXRoIG11bHRpcGxlIFJ4IHF1ZXVlcworICogUmV0dXJucyB0aGUgIyBvZiB0aGUgTkFQSSBjcmVkaXQgY29uc3VtZWQgKCMgb2YgcnggZGVzY3JpcHRvcnMgcHJvY2Vzc2VkKQorICovCisKK3N0YXRpYyBpbnQKK3ZteG5ldDNfcG9sbF9yeF9vbmx5KHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkKK3sKKwlzdHJ1Y3Qgdm14bmV0M19yeF9xdWV1ZSAqcnEgPSBjb250YWluZXJfb2YobmFwaSwKKwkJCQkJCXN0cnVjdCB2bXhuZXQzX3J4X3F1ZXVlLCBuYXBpKTsKKwlzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyID0gcnEtPmFkYXB0ZXI7CisJaW50IHJ4ZF9kb25lOworCisJLyogV2hlbiBzaGFyaW5nIGludGVycnVwdCB3aXRoIGNvcnJlc3BvbmRpbmcgdHggcXVldWUsIHByb2Nlc3MKKwkgKiB0eCBjb21wbGV0aW9ucyBpbiB0aGF0IHF1ZXVlIGFzIHdlbGwKKwkgKi8KKwlpZiAoYWRhcHRlci0+c2hhcmVfaW50ciA9PSBWTVhORVQzX0lOVFJfQlVERFlTSEFSRSkgeworCQlzdHJ1Y3Qgdm14bmV0M190eF9xdWV1ZSAqdHEgPQorCQkJCSZhZGFwdGVyLT50eF9xdWV1ZVtycSAtIGFkYXB0ZXItPnJ4X3F1ZXVlXTsKKwkJdm14bmV0M190cV90eF9jb21wbGV0ZSh0cSwgYWRhcHRlcik7CisJfQorCisJcnhkX2RvbmUgPSB2bXhuZXQzX3JxX3J4X2NvbXBsZXRlKHJxLCBhZGFwdGVyLCBidWRnZXQpOworCisJaWYgKHJ4ZF9kb25lIDwgYnVkZ2V0KSB7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CisJCXZteG5ldDNfZW5hYmxlX2ludHIoYWRhcHRlciwgcnEtPmNvbXBfcmluZy5pbnRyX2lkeCk7CisJfQorCXJldHVybiByeGRfZG9uZTsKK30KKworCisjaWZkZWYgQ09ORklHX1BDSV9NU0kKKworLyoKKyAqIEhhbmRsZSBjb21wbGV0aW9uIGludGVycnVwdHMgb24gdHggcXVldWVzCisgKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBpbnRyIGlzIGhhbmRsZWQKKyAqLworCitzdGF0aWMgaXJxcmV0dXJuX3QKK3ZteG5ldDNfbXNpeF90eChpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCB2bXhuZXQzX3R4X3F1ZXVlICp0cSA9IGRhdGE7CisJc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlciA9IHRxLT5hZGFwdGVyOworCisJaWYgKGFkYXB0ZXItPmludHIubWFza19tb2RlID09IFZNWE5FVDNfSU1NX0FDVElWRSkKKwkJdm14bmV0M19kaXNhYmxlX2ludHIoYWRhcHRlciwgdHEtPmNvbXBfcmluZy5pbnRyX2lkeCk7CisKKwkvKiBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgb25seSBvbmUgaXJxIGlzIGFsbG9jYXRlIGZvciBhbGwgdHggcXVldWVzICovCisJaWYgKGFkYXB0ZXItPnNoYXJlX2ludHIgPT0gVk1YTkVUM19JTlRSX1RYU0hBUkUpIHsKKwkJaW50IGk7CisJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspIHsKKwkJCXN0cnVjdCB2bXhuZXQzX3R4X3F1ZXVlICp0eHEgPSAmYWRhcHRlci0+dHhfcXVldWVbaV07CisJCQl2bXhuZXQzX3RxX3R4X2NvbXBsZXRlKHR4cSwgYWRhcHRlcik7CisJCX0KKwl9IGVsc2UgeworCQl2bXhuZXQzX3RxX3R4X2NvbXBsZXRlKHRxLCBhZGFwdGVyKTsKKwl9CisJdm14bmV0M19lbmFibGVfaW50cihhZGFwdGVyLCB0cS0+Y29tcF9yaW5nLmludHJfaWR4KTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworCisvKgorICogSGFuZGxlIGNvbXBsZXRpb24gaW50ZXJydXB0cyBvbiByeCBxdWV1ZXMuIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlCisgKiBpbnRyIGlzIGhhbmRsZWQKKyAqLworCitzdGF0aWMgaXJxcmV0dXJuX3QKK3ZteG5ldDNfbXNpeF9yeChpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCB2bXhuZXQzX3J4X3F1ZXVlICpycSA9IGRhdGE7CisJc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlciA9IHJxLT5hZGFwdGVyOworCisJLyogZGlzYWJsZSBpbnRyIGlmIG5lZWRlZCAqLworCWlmIChhZGFwdGVyLT5pbnRyLm1hc2tfbW9kZSA9PSBWTVhORVQzX0lNTV9BQ1RJVkUpCisJCXZteG5ldDNfZGlzYWJsZV9pbnRyKGFkYXB0ZXIsIHJxLT5jb21wX3JpbmcuaW50cl9pZHgpOworCW5hcGlfc2NoZWR1bGUoJnJxLT5uYXBpKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHZteG5ldDNfbXNpeF9ldmVudCAtLQorICoKKyAqICAgIHZteG5ldDMgbXNpeCBldmVudCBpbnRyIGhhbmRsZXIKKyAqCisgKiBSZXN1bHQ6CisgKiAgICB3aGV0aGVyIG9yIG5vdCB0aGUgaW50ciBpcyBoYW5kbGVkCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworc3RhdGljIGlycXJldHVybl90Cit2bXhuZXQzX21zaXhfZXZlbnQoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZGF0YTsKKwlzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCS8qIGRpc2FibGUgaW50ciBpZiBuZWVkZWQgKi8KKwlpZiAoYWRhcHRlci0+aW50ci5tYXNrX21vZGUgPT0gVk1YTkVUM19JTU1fQUNUSVZFKQorCQl2bXhuZXQzX2Rpc2FibGVfaW50cihhZGFwdGVyLCBhZGFwdGVyLT5pbnRyLmV2ZW50X2ludHJfaWR4KTsKKworCWlmIChhZGFwdGVyLT5zaGFyZWQtPmVjcikKKwkJdm14bmV0M19wcm9jZXNzX2V2ZW50cyhhZGFwdGVyKTsKKworCXZteG5ldDNfZW5hYmxlX2ludHIoYWRhcHRlciwgYWRhcHRlci0+aW50ci5ldmVudF9pbnRyX2lkeCk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfUENJX01TSSAgKi8KKwogCiAvKiBJbnRlcnJ1cHQgaGFuZGxlciBmb3Igdm14bmV0MyAgKi8KIHN0YXRpYyBpcnFyZXR1cm5fdApAQCAtMTQzMiw3ICsxNjU2LDcgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZGV2X2lkOwogCXN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JaWYgKHVubGlrZWx5KGFkYXB0ZXItPmludHIudHlwZSA9PSBWTVhORVQzX0lUX0lOVFgpKSB7CisJaWYgKGFkYXB0ZXItPmludHIudHlwZSA9PSBWTVhORVQzX0lUX0lOVFgpIHsKIAkJdTMyIGljciA9IFZNWE5FVDNfUkVBRF9CQVIxX1JFRyhhZGFwdGVyLCBWTVhORVQzX1JFR19JQ1IpOwogCQlpZiAodW5saWtlbHkoaWNyID09IDApKQogCQkJLyogbm90IG91cnMgKi8KQEAgLTE0NDIsNzcgKzE2NjYsMTQ0IEBACiAKIAkvKiBkaXNhYmxlIGludHIgaWYgbmVlZGVkICovCiAJaWYgKGFkYXB0ZXItPmludHIubWFza19tb2RlID09IFZNWE5FVDNfSU1NX0FDVElWRSkKLQkJdm14bmV0M19kaXNhYmxlX2ludHIoYWRhcHRlciwgMCk7CisJCXZteG5ldDNfZGlzYWJsZV9hbGxfaW50cnMoYWRhcHRlcik7CiAKLQluYXBpX3NjaGVkdWxlKCZhZGFwdGVyLT5uYXBpKTsKKwluYXBpX3NjaGVkdWxlKCZhZGFwdGVyLT5yeF9xdWV1ZVswXS5uYXBpKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCiAKLQogLyogbmV0cG9sbCBjYWxsYmFjay4gKi8KIHN0YXRpYyB2b2lkCiB2bXhuZXQzX25ldHBvbGwoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQlpbnQgaXJxOwogCi0jaWZkZWYgQ09ORklHX1BDSV9NU0kKLQlpZiAoYWRhcHRlci0+aW50ci50eXBlID09IFZNWE5FVDNfSVRfTVNJWCkKLQkJaXJxID0gYWRhcHRlci0+aW50ci5tc2l4X2VudHJpZXNbMF0udmVjdG9yOwotCWVsc2UKLSNlbmRpZgotCQlpcnEgPSBhZGFwdGVyLT5wZGV2LT5pcnE7CisJaWYgKGFkYXB0ZXItPmludHIubWFza19tb2RlID09IFZNWE5FVDNfSU1NX0FDVElWRSkKKwkJdm14bmV0M19kaXNhYmxlX2FsbF9pbnRycyhhZGFwdGVyKTsKIAotCWRpc2FibGVfaXJxKGlycSk7Ci0Jdm14bmV0M19pbnRyKGlycSwgbmV0ZGV2KTsKLQllbmFibGVfaXJxKGlycSk7CisJdm14bmV0M19kb19wb2xsKGFkYXB0ZXIsIGFkYXB0ZXItPnJ4X3F1ZXVlWzBdLnJ4X3JpbmdbMF0uc2l6ZSk7CisJdm14bmV0M19lbmFibGVfYWxsX2ludHJzKGFkYXB0ZXIpOworCiB9Ci0jZW5kaWYKKyNlbmRpZgkvKiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiAqLwogCiBzdGF0aWMgaW50CiB2bXhuZXQzX3JlcXVlc3RfaXJxcyhzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyKQogewotCWludCBlcnI7CisJc3RydWN0IHZteG5ldDNfaW50ciAqaW50ciA9ICZhZGFwdGVyLT5pbnRyOworCWludCBlcnIgPSAwLCBpOworCWludCB2ZWN0b3IgPSAwOwogCiAjaWZkZWYgQ09ORklHX1BDSV9NU0kKIAlpZiAoYWRhcHRlci0+aW50ci50eXBlID09IFZNWE5FVDNfSVRfTVNJWCkgewotCQkvKiB3ZSBvbmx5IHVzZSAxIE1TSS1YIHZlY3RvciAqLwotCQllcnIgPSByZXF1ZXN0X2lycShhZGFwdGVyLT5pbnRyLm1zaXhfZW50cmllc1swXS52ZWN0b3IsCi0JCQkJICB2bXhuZXQzX2ludHIsIDAsIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwKLQkJCQkgIGFkYXB0ZXItPm5ldGRldik7Ci0JfSBlbHNlIGlmIChhZGFwdGVyLT5pbnRyLnR5cGUgPT0gVk1YTkVUM19JVF9NU0kpIHsKKwkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGkrKykgeworCQkJaWYgKGFkYXB0ZXItPnNoYXJlX2ludHIgIT0gVk1YTkVUM19JTlRSX0JVRERZU0hBUkUpIHsKKwkJCQlzcHJpbnRmKGFkYXB0ZXItPnR4X3F1ZXVlW2ldLm5hbWUsICIlcy10eC0lZCIsCisJCQkJCWFkYXB0ZXItPm5ldGRldi0+bmFtZSwgdmVjdG9yKTsKKwkJCQllcnIgPSByZXF1ZXN0X2lycSgKKwkJCQkJICAgICAgaW50ci0+bXNpeF9lbnRyaWVzW3ZlY3Rvcl0udmVjdG9yLAorCQkJCQkgICAgICB2bXhuZXQzX21zaXhfdHgsIDAsCisJCQkJCSAgICAgIGFkYXB0ZXItPnR4X3F1ZXVlW2ldLm5hbWUsCisJCQkJCSAgICAgICZhZGFwdGVyLT50eF9xdWV1ZVtpXSk7CisJCQl9IGVsc2UgeworCQkJCXNwcmludGYoYWRhcHRlci0+dHhfcXVldWVbaV0ubmFtZSwgIiVzLXJ4dHgtJWQiLAorCQkJCQlhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIHZlY3Rvcik7CisJCQl9CisJCQlpZiAoZXJyKSB7CisJCQkJZGV2X2VycigmYWRhcHRlci0+bmV0ZGV2LT5kZXYsCisJCQkJCSJGYWlsZWQgdG8gcmVxdWVzdCBpcnEgZm9yIE1TSVgsICVzLCAiCisJCQkJCSJlcnJvciAlZFxuIiwKKwkJCQkJYWRhcHRlci0+dHhfcXVldWVbaV0ubmFtZSwgZXJyKTsKKwkJCQlyZXR1cm4gZXJyOworCQkJfQorCisJCQkvKiBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgb25seSAxIE1TSXggd2FzIGFsbG9jYXRlZCBmb3IKKwkJCSAqIGFsbCB0eCBxdWV1ZXMgKi8KKwkJCWlmIChhZGFwdGVyLT5zaGFyZV9pbnRyID09IFZNWE5FVDNfSU5UUl9UWFNIQVJFKSB7CisJCQkJZm9yICg7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspCisJCQkJCWFkYXB0ZXItPnR4X3F1ZXVlW2ldLmNvbXBfcmluZy5pbnRyX2lkeAorCQkJCQkJCQk9IHZlY3RvcjsKKwkJCQl2ZWN0b3IrKzsKKwkJCQlicmVhazsKKwkJCX0gZWxzZSB7CisJCQkJYWRhcHRlci0+dHhfcXVldWVbaV0uY29tcF9yaW5nLmludHJfaWR4CisJCQkJCQkJCT0gdmVjdG9yKys7CisJCQl9CisJCX0KKwkJaWYgKGFkYXB0ZXItPnNoYXJlX2ludHIgPT0gVk1YTkVUM19JTlRSX0JVRERZU0hBUkUpCisJCQl2ZWN0b3IgPSAwOworCisJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspIHsKKwkJCWlmIChhZGFwdGVyLT5zaGFyZV9pbnRyICE9IFZNWE5FVDNfSU5UUl9CVUREWVNIQVJFKQorCQkJCXNwcmludGYoYWRhcHRlci0+cnhfcXVldWVbaV0ubmFtZSwgIiVzLXJ4LSVkIiwKKwkJCQkJYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCB2ZWN0b3IpOworCQkJZWxzZQorCQkJCXNwcmludGYoYWRhcHRlci0+cnhfcXVldWVbaV0ubmFtZSwgIiVzLXJ4dHgtJWQiLAorCQkJCQlhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIHZlY3Rvcik7CisJCQllcnIgPSByZXF1ZXN0X2lycShpbnRyLT5tc2l4X2VudHJpZXNbdmVjdG9yXS52ZWN0b3IsCisJCQkJCSAgdm14bmV0M19tc2l4X3J4LCAwLAorCQkJCQkgIGFkYXB0ZXItPnJ4X3F1ZXVlW2ldLm5hbWUsCisJCQkJCSAgJihhZGFwdGVyLT5yeF9xdWV1ZVtpXSkpOworCQkJaWYgKGVycikgeworCQkJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJlcXVlc3QgaXJxIGZvciBNU0lYIgorCQkJCSAgICAgICAiLCAlcywgZXJyb3IgJWRcbiIsCisJCQkJICAgICAgIGFkYXB0ZXItPnJ4X3F1ZXVlW2ldLm5hbWUsIGVycik7CisJCQkJcmV0dXJuIGVycjsKKwkJCX0KKworCQkJYWRhcHRlci0+cnhfcXVldWVbaV0uY29tcF9yaW5nLmludHJfaWR4ID0gdmVjdG9yKys7CisJCX0KKworCQlzcHJpbnRmKGludHItPmV2ZW50X21zaV92ZWN0b3JfbmFtZSwgIiVzLWV2ZW50LSVkIiwKKwkJCWFkYXB0ZXItPm5ldGRldi0+bmFtZSwgdmVjdG9yKTsKKwkJZXJyID0gcmVxdWVzdF9pcnEoaW50ci0+bXNpeF9lbnRyaWVzW3ZlY3Rvcl0udmVjdG9yLAorCQkJCSAgdm14bmV0M19tc2l4X2V2ZW50LCAwLAorCQkJCSAgaW50ci0+ZXZlbnRfbXNpX3ZlY3Rvcl9uYW1lLCBhZGFwdGVyLT5uZXRkZXYpOworCQlpbnRyLT5ldmVudF9pbnRyX2lkeCA9IHZlY3RvcjsKKworCX0gZWxzZSBpZiAoaW50ci0+dHlwZSA9PSBWTVhORVQzX0lUX01TSSkgeworCQlhZGFwdGVyLT5udW1fcnhfcXVldWVzID0gMTsKIAkJZXJyID0gcmVxdWVzdF9pcnEoYWRhcHRlci0+cGRldi0+aXJxLCB2bXhuZXQzX2ludHIsIDAsCiAJCQkJICBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIGFkYXB0ZXItPm5ldGRldik7Ci0JfSBlbHNlCisJfSBlbHNlIHsKICNlbmRpZgotCXsKKwkJYWRhcHRlci0+bnVtX3J4X3F1ZXVlcyA9IDE7CiAJCWVyciA9IHJlcXVlc3RfaXJxKGFkYXB0ZXItPnBkZXYtPmlycSwgdm14bmV0M19pbnRyLAogCQkJCSAgSVJRRl9TSEFSRUQsIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwKIAkJCQkgIGFkYXB0ZXItPm5ldGRldik7CisjaWZkZWYgQ09ORklHX1BDSV9NU0kKIAl9Ci0KLQlpZiAoZXJyKQorI2VuZGlmCisJaW50ci0+bnVtX2ludHJzID0gdmVjdG9yICsgMTsKKwlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJlcXVlc3QgaXJxICVzIChpbnRyIHR5cGU6JWQpLCBlcnJvciIKLQkJICAgICAgICI6JWRcbiIsIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwgYWRhcHRlci0+aW50ci50eXBlLCBlcnIpOworCQkgICAgICAgIjolZFxuIiwgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBpbnRyLT50eXBlLCBlcnIpOworCX0gZWxzZSB7CisJCS8qIE51bWJlciBvZiByeCBxdWV1ZXMgd2lsbCBub3QgY2hhbmdlIGFmdGVyIHRoaXMgKi8KKwkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykgeworCQkJc3RydWN0IHZteG5ldDNfcnhfcXVldWUgKnJxID0gJmFkYXB0ZXItPnJ4X3F1ZXVlW2ldOworCQkJcnEtPnFpZCA9IGk7CisJCQlycS0+cWlkMiA9IGkgKyBhZGFwdGVyLT5udW1fcnhfcXVldWVzOworCQl9CiAKIAotCWlmICghZXJyKSB7Ci0JCWludCBpOworCiAJCS8qIGluaXQgb3VyIGludHIgc2V0dGluZ3MgKi8KLQkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPmludHIubnVtX2ludHJzOyBpKyspCi0JCQlhZGFwdGVyLT5pbnRyLm1vZF9sZXZlbHNbaV0gPSBVUFQxX0lNTF9BREFQVElWRTsKLQotCQkvKiBuZXh0IHNldHVwIGludHIgaW5kZXggZm9yIGFsbCBpbnRyIHNvdXJjZXMgKi8KLQkJYWRhcHRlci0+dHhfcXVldWUuY29tcF9yaW5nLmludHJfaWR4ID0gMDsKLQkJYWRhcHRlci0+cnhfcXVldWUuY29tcF9yaW5nLmludHJfaWR4ID0gMDsKLQkJYWRhcHRlci0+aW50ci5ldmVudF9pbnRyX2lkeCA9IDA7CisJCWZvciAoaSA9IDA7IGkgPCBpbnRyLT5udW1faW50cnM7IGkrKykKKwkJCWludHItPm1vZF9sZXZlbHNbaV0gPSBVUFQxX0lNTF9BREFQVElWRTsKKwkJaWYgKGFkYXB0ZXItPmludHIudHlwZSAhPSBWTVhORVQzX0lUX01TSVgpIHsKKwkJCWFkYXB0ZXItPmludHIuZXZlbnRfaW50cl9pZHggPSAwOworCQkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGkrKykKKwkJCQlhZGFwdGVyLT50eF9xdWV1ZVtpXS5jb21wX3JpbmcuaW50cl9pZHggPSAwOworCQkJYWRhcHRlci0+cnhfcXVldWVbMF0uY29tcF9yaW5nLmludHJfaWR4ID0gMDsKKwkJfQogCiAJCXByaW50ayhLRVJOX0lORk8gIiVzOiBpbnRyIHR5cGUgJXUsIG1vZGUgJXUsICV1IHZlY3RvcnMgIgotCQkgICAgICAgImFsbG9jYXRlZFxuIiwgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBhZGFwdGVyLT5pbnRyLnR5cGUsCi0JCSAgICAgICBhZGFwdGVyLT5pbnRyLm1hc2tfbW9kZSwgYWRhcHRlci0+aW50ci5udW1faW50cnMpOworCQkgICAgICAgImFsbG9jYXRlZFxuIiwgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBpbnRyLT50eXBlLAorCQkgICAgICAgaW50ci0+bWFza19tb2RlLCBpbnRyLT5udW1faW50cnMpOwogCX0KIAogCXJldHVybiBlcnI7CkBAIC0xNTIyLDE4ICsxODEzLDMyIEBACiBzdGF0aWMgdm9pZAogdm14bmV0M19mcmVlX2lycXMoc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlcikKIHsKLQlCVUdfT04oYWRhcHRlci0+aW50ci50eXBlID09IFZNWE5FVDNfSVRfQVVUTyB8fAotCSAgICAgICBhZGFwdGVyLT5pbnRyLm51bV9pbnRycyA8PSAwKTsKKwlzdHJ1Y3Qgdm14bmV0M19pbnRyICppbnRyID0gJmFkYXB0ZXItPmludHI7CisJQlVHX09OKGludHItPnR5cGUgPT0gVk1YTkVUM19JVF9BVVRPIHx8IGludHItPm51bV9pbnRycyA8PSAwKTsKIAotCXN3aXRjaCAoYWRhcHRlci0+aW50ci50eXBlKSB7CisJc3dpdGNoIChpbnRyLT50eXBlKSB7CiAjaWZkZWYgQ09ORklHX1BDSV9NU0kKIAljYXNlIFZNWE5FVDNfSVRfTVNJWDoKIAl7Ci0JCWludCBpOworCQlpbnQgaSwgdmVjdG9yID0gMDsKIAotCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+aW50ci5udW1faW50cnM7IGkrKykKLQkJCWZyZWVfaXJxKGFkYXB0ZXItPmludHIubXNpeF9lbnRyaWVzW2ldLnZlY3RvciwKLQkJCQkgYWRhcHRlci0+bmV0ZGV2KTsKKwkJaWYgKGFkYXB0ZXItPnNoYXJlX2ludHIgIT0gVk1YTkVUM19JTlRSX0JVRERZU0hBUkUpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspIHsKKwkJCQlmcmVlX2lycShpbnRyLT5tc2l4X2VudHJpZXNbdmVjdG9yKytdLnZlY3RvciwKKwkJCQkJICYoYWRhcHRlci0+dHhfcXVldWVbaV0pKTsKKwkJCQlpZiAoYWRhcHRlci0+c2hhcmVfaW50ciA9PSBWTVhORVQzX0lOVFJfVFhTSEFSRSkKKwkJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKSB7CisJCQlmcmVlX2lycShpbnRyLT5tc2l4X2VudHJpZXNbdmVjdG9yKytdLnZlY3RvciwKKwkJCQkgJihhZGFwdGVyLT5yeF9xdWV1ZVtpXSkpOworCQl9CisKKwkJZnJlZV9pcnEoaW50ci0+bXNpeF9lbnRyaWVzW3ZlY3Rvcl0udmVjdG9yLAorCQkJIGFkYXB0ZXItPm5ldGRldik7CisJCUJVR19PTih2ZWN0b3IgPj0gaW50ci0+bnVtX2ludHJzKTsKIAkJYnJlYWs7CiAJfQogI2VuZGlmCkBAIC0xNzI3LDYgKzIwMzIsMTUgQEAKIAlrZnJlZShuZXdfdGFibGUpOwogfQogCit2b2lkCit2bXhuZXQzX3JxX2Rlc3Ryb3lfYWxsKHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKQorCQl2bXhuZXQzX3JxX2Rlc3Ryb3koJmFkYXB0ZXItPnJ4X3F1ZXVlW2ldLCBhZGFwdGVyKTsKK30KKwogCiAvKgogICogICBTZXQgdXAgZHJpdmVyX3NoYXJlZCBiYXNlZCBvbiBzZXR0aW5ncyBpbiBhZGFwdGVyLgpAQCAtMTc3NCw0MCArMjA4OCw3MiBAQAogCWRldlJlYWQtPm1pc2MubXR1ID0gY3B1X3RvX2xlMzIoYWRhcHRlci0+bmV0ZGV2LT5tdHUpOwogCWRldlJlYWQtPm1pc2MucXVldWVEZXNjUEEgPSBjcHVfdG9fbGU2NChhZGFwdGVyLT5xdWV1ZV9kZXNjX3BhKTsKIAlkZXZSZWFkLT5taXNjLnF1ZXVlRGVzY0xlbiA9IGNwdV90b19sZTMyKAotCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBWbXhuZXQzX1R4UXVldWVEZXNjKSArCi0JCQkJICAgICBzaXplb2Yoc3RydWN0IFZteG5ldDNfUnhRdWV1ZURlc2MpKTsKKwkJYWRhcHRlci0+bnVtX3R4X3F1ZXVlcyAqIHNpemVvZihzdHJ1Y3QgVm14bmV0M19UeFF1ZXVlRGVzYykgKworCQlhZGFwdGVyLT5udW1fcnhfcXVldWVzICogc2l6ZW9mKHN0cnVjdCBWbXhuZXQzX1J4UXVldWVEZXNjKSk7CiAKIAkvKiB0eCBxdWV1ZSBzZXR0aW5ncyAqLwotCUJVR19PTihhZGFwdGVyLT50eF9xdWV1ZS50eF9yaW5nLmJhc2UgPT0gTlVMTCk7Ci0KLQlkZXZSZWFkLT5taXNjLm51bVR4UXVldWVzID0gMTsKLQl0cWMgPSAmYWRhcHRlci0+dHFkX3N0YXJ0LT5jb25mOwotCXRxYy0+dHhSaW5nQmFzZVBBICAgPSBjcHVfdG9fbGU2NChhZGFwdGVyLT50eF9xdWV1ZS50eF9yaW5nLmJhc2VQQSk7Ci0JdHFjLT5kYXRhUmluZ0Jhc2VQQSA9IGNwdV90b19sZTY0KGFkYXB0ZXItPnR4X3F1ZXVlLmRhdGFfcmluZy5iYXNlUEEpOwotCXRxYy0+Y29tcFJpbmdCYXNlUEEgPSBjcHVfdG9fbGU2NChhZGFwdGVyLT50eF9xdWV1ZS5jb21wX3JpbmcuYmFzZVBBKTsKLQl0cWMtPmRkUEEgICAgICAgICAgID0gY3B1X3RvX2xlNjQodmlydF90b19waHlzKAotCQkJCQkJYWRhcHRlci0+dHhfcXVldWUuYnVmX2luZm8pKTsKLQl0cWMtPnR4UmluZ1NpemUgICAgID0gY3B1X3RvX2xlMzIoYWRhcHRlci0+dHhfcXVldWUudHhfcmluZy5zaXplKTsKLQl0cWMtPmRhdGFSaW5nU2l6ZSAgID0gY3B1X3RvX2xlMzIoYWRhcHRlci0+dHhfcXVldWUuZGF0YV9yaW5nLnNpemUpOwotCXRxYy0+Y29tcFJpbmdTaXplICAgPSBjcHVfdG9fbGUzMihhZGFwdGVyLT50eF9xdWV1ZS5jb21wX3Jpbmcuc2l6ZSk7Ci0JdHFjLT5kZExlbiAgICAgICAgICA9IGNwdV90b19sZTMyKHNpemVvZihzdHJ1Y3Qgdm14bmV0M190eF9idWZfaW5mbykgKgotCQkJICAgICAgdHFjLT50eFJpbmdTaXplKTsKLQl0cWMtPmludHJJZHggICAgICAgID0gYWRhcHRlci0+dHhfcXVldWUuY29tcF9yaW5nLmludHJfaWR4OworCWRldlJlYWQtPm1pc2MubnVtVHhRdWV1ZXMgPSAgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKSB7CisJCXN0cnVjdCB2bXhuZXQzX3R4X3F1ZXVlCSp0cSA9ICZhZGFwdGVyLT50eF9xdWV1ZVtpXTsKKwkJQlVHX09OKGFkYXB0ZXItPnR4X3F1ZXVlW2ldLnR4X3JpbmcuYmFzZSA9PSBOVUxMKTsKKwkJdHFjID0gJmFkYXB0ZXItPnRxZF9zdGFydFtpXS5jb25mOworCQl0cWMtPnR4UmluZ0Jhc2VQQSAgID0gY3B1X3RvX2xlNjQodHEtPnR4X3JpbmcuYmFzZVBBKTsKKwkJdHFjLT5kYXRhUmluZ0Jhc2VQQSA9IGNwdV90b19sZTY0KHRxLT5kYXRhX3JpbmcuYmFzZVBBKTsKKwkJdHFjLT5jb21wUmluZ0Jhc2VQQSA9IGNwdV90b19sZTY0KHRxLT5jb21wX3JpbmcuYmFzZVBBKTsKKwkJdHFjLT5kZFBBICAgICAgICAgICA9IGNwdV90b19sZTY0KHZpcnRfdG9fcGh5cyh0cS0+YnVmX2luZm8pKTsKKwkJdHFjLT50eFJpbmdTaXplICAgICA9IGNwdV90b19sZTMyKHRxLT50eF9yaW5nLnNpemUpOworCQl0cWMtPmRhdGFSaW5nU2l6ZSAgID0gY3B1X3RvX2xlMzIodHEtPmRhdGFfcmluZy5zaXplKTsKKwkJdHFjLT5jb21wUmluZ1NpemUgICA9IGNwdV90b19sZTMyKHRxLT5jb21wX3Jpbmcuc2l6ZSk7CisJCXRxYy0+ZGRMZW4gICAgICAgICAgPSBjcHVfdG9fbGUzMigKKwkJCQkJc2l6ZW9mKHN0cnVjdCB2bXhuZXQzX3R4X2J1Zl9pbmZvKSAqCisJCQkJCXRxYy0+dHhSaW5nU2l6ZSk7CisJCXRxYy0+aW50cklkeCAgICAgICAgPSB0cS0+Y29tcF9yaW5nLmludHJfaWR4OworCX0KIAogCS8qIHJ4IHF1ZXVlIHNldHRpbmdzICovCi0JZGV2UmVhZC0+bWlzYy5udW1SeFF1ZXVlcyA9IDE7Ci0JcnFjID0gJmFkYXB0ZXItPnJxZF9zdGFydC0+Y29uZjsKLQlycWMtPnJ4UmluZ0Jhc2VQQVswXSA9IGNwdV90b19sZTY0KGFkYXB0ZXItPnJ4X3F1ZXVlLnJ4X3JpbmdbMF0uYmFzZVBBKTsKLQlycWMtPnJ4UmluZ0Jhc2VQQVsxXSA9IGNwdV90b19sZTY0KGFkYXB0ZXItPnJ4X3F1ZXVlLnJ4X3JpbmdbMV0uYmFzZVBBKTsKLQlycWMtPmNvbXBSaW5nQmFzZVBBICA9IGNwdV90b19sZTY0KGFkYXB0ZXItPnJ4X3F1ZXVlLmNvbXBfcmluZy5iYXNlUEEpOwotCXJxYy0+ZGRQQSAgICAgICAgICAgID0gY3B1X3RvX2xlNjQodmlydF90b19waHlzKAotCQkJCQkJYWRhcHRlci0+cnhfcXVldWUuYnVmX2luZm8pKTsKLQlycWMtPnJ4UmluZ1NpemVbMF0gICA9IGNwdV90b19sZTMyKGFkYXB0ZXItPnJ4X3F1ZXVlLnJ4X3JpbmdbMF0uc2l6ZSk7Ci0JcnFjLT5yeFJpbmdTaXplWzFdICAgPSBjcHVfdG9fbGUzMihhZGFwdGVyLT5yeF9xdWV1ZS5yeF9yaW5nWzFdLnNpemUpOwotCXJxYy0+Y29tcFJpbmdTaXplICAgID0gY3B1X3RvX2xlMzIoYWRhcHRlci0+cnhfcXVldWUuY29tcF9yaW5nLnNpemUpOwotCXJxYy0+ZGRMZW4gICAgICAgICAgID0gY3B1X3RvX2xlMzIoc2l6ZW9mKHN0cnVjdCB2bXhuZXQzX3J4X2J1Zl9pbmZvKSAqCi0JCQkgICAgICAgKHJxYy0+cnhSaW5nU2l6ZVswXSArIHJxYy0+cnhSaW5nU2l6ZVsxXSkpOwotCXJxYy0+aW50cklkeCAgICAgICAgID0gYWRhcHRlci0+cnhfcXVldWUuY29tcF9yaW5nLmludHJfaWR4OworCWRldlJlYWQtPm1pc2MubnVtUnhRdWV1ZXMgPSBhZGFwdGVyLT5udW1fcnhfcXVldWVzOworCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspIHsKKwkJc3RydWN0IHZteG5ldDNfcnhfcXVldWUJKnJxID0gJmFkYXB0ZXItPnJ4X3F1ZXVlW2ldOworCQlycWMgPSAmYWRhcHRlci0+cnFkX3N0YXJ0W2ldLmNvbmY7CisJCXJxYy0+cnhSaW5nQmFzZVBBWzBdID0gY3B1X3RvX2xlNjQocnEtPnJ4X3JpbmdbMF0uYmFzZVBBKTsKKwkJcnFjLT5yeFJpbmdCYXNlUEFbMV0gPSBjcHVfdG9fbGU2NChycS0+cnhfcmluZ1sxXS5iYXNlUEEpOworCQlycWMtPmNvbXBSaW5nQmFzZVBBICA9IGNwdV90b19sZTY0KHJxLT5jb21wX3JpbmcuYmFzZVBBKTsKKwkJcnFjLT5kZFBBICAgICAgICAgICAgPSBjcHVfdG9fbGU2NCh2aXJ0X3RvX3BoeXMoCisJCQkJCQkJcnEtPmJ1Zl9pbmZvKSk7CisJCXJxYy0+cnhSaW5nU2l6ZVswXSAgID0gY3B1X3RvX2xlMzIocnEtPnJ4X3JpbmdbMF0uc2l6ZSk7CisJCXJxYy0+cnhSaW5nU2l6ZVsxXSAgID0gY3B1X3RvX2xlMzIocnEtPnJ4X3JpbmdbMV0uc2l6ZSk7CisJCXJxYy0+Y29tcFJpbmdTaXplICAgID0gY3B1X3RvX2xlMzIocnEtPmNvbXBfcmluZy5zaXplKTsKKwkJcnFjLT5kZExlbiAgICAgICAgICAgPSBjcHVfdG9fbGUzMigKKwkJCQkJc2l6ZW9mKHN0cnVjdCB2bXhuZXQzX3J4X2J1Zl9pbmZvKSAqCisJCQkJCShycWMtPnJ4UmluZ1NpemVbMF0gKworCQkJCQkgcnFjLT5yeFJpbmdTaXplWzFdKSk7CisJCXJxYy0+aW50cklkeCAgICAgICAgID0gcnEtPmNvbXBfcmluZy5pbnRyX2lkeDsKKwl9CisKKyNpZmRlZiBWTVhORVQzX1JTUworCW1lbXNldChhZGFwdGVyLT5yc3NfY29uZiwgMCwgc2l6ZW9mKCphZGFwdGVyLT5yc3NfY29uZikpOworCisJaWYgKGFkYXB0ZXItPnJzcykgeworCQlzdHJ1Y3QgVVBUMV9SU1NDb25mICpyc3NDb25mID0gYWRhcHRlci0+cnNzX2NvbmY7CisJCWRldlJlYWQtPm1pc2MudXB0RmVhdHVyZXMgfD0gVVBUMV9GX1JTUzsKKwkJZGV2UmVhZC0+bWlzYy5udW1SeFF1ZXVlcyA9IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7CisJCXJzc0NvbmYtPmhhc2hUeXBlID0gVVBUMV9SU1NfSEFTSF9UWVBFX1RDUF9JUFY0IHwKKwkJCQkgICAgVVBUMV9SU1NfSEFTSF9UWVBFX0lQVjQgfAorCQkJCSAgICBVUFQxX1JTU19IQVNIX1RZUEVfVENQX0lQVjYgfAorCQkJCSAgICBVUFQxX1JTU19IQVNIX1RZUEVfSVBWNjsKKwkJcnNzQ29uZi0+aGFzaEZ1bmMgPSBVUFQxX1JTU19IQVNIX0ZVTkNfVE9FUExJVFo7CisJCXJzc0NvbmYtPmhhc2hLZXlTaXplID0gVVBUMV9SU1NfTUFYX0tFWV9TSVpFOworCQlyc3NDb25mLT5pbmRUYWJsZVNpemUgPSBWTVhORVQzX1JTU19JTkRfVEFCTEVfU0laRTsKKwkJZ2V0X3JhbmRvbV9ieXRlcygmcnNzQ29uZi0+aGFzaEtleVswXSwgcnNzQ29uZi0+aGFzaEtleVNpemUpOworCQlmb3IgKGkgPSAwOyBpIDwgcnNzQ29uZi0+aW5kVGFibGVTaXplOyBpKyspCisJCQlyc3NDb25mLT5pbmRUYWJsZVtpXSA9IGkgJSBhZGFwdGVyLT5udW1fcnhfcXVldWVzOworCisJCWRldlJlYWQtPnJzc0NvbmZEZXNjLmNvbmZWZXIgPSAxOworCQlkZXZSZWFkLT5yc3NDb25mRGVzYy5jb25mTGVuID0gc2l6ZW9mKCpyc3NDb25mKTsKKwkJZGV2UmVhZC0+cnNzQ29uZkRlc2MuY29uZlBBICA9IHZpcnRfdG9fcGh5cyhyc3NDb25mKTsKKwl9CisKKyNlbmRpZiAvKiBWTVhORVQzX1JTUyAqLwogCiAJLyogaW50ciBzZXR0aW5ncyAqLwogCWRldlJlYWQtPmludHJDb25mLmF1dG9NYXNrID0gYWRhcHRlci0+aW50ci5tYXNrX21vZGUgPT0KQEAgLTE4MjksMTggKzIxNzUsMTggQEAKIGludAogdm14bmV0M19hY3RpdmF0ZV9kZXYoc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlcikKIHsKLQlpbnQgZXJyOworCWludCBlcnIsIGk7CiAJdTMyIHJldDsKIAotCWRldl9kYmcoJmFkYXB0ZXItPm5ldGRldi0+ZGV2LAotCQkiJXM6IHNrYl9idWZfc2l6ZSAlZCwgcnhfYnVmX3Blcl9wa3QgJWQsIHJpbmcgc2l6ZXMiCi0JCSIgJXUgJXUgJXVcbiIsIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwgYWRhcHRlci0+c2tiX2J1Zl9zaXplLAotCQlhZGFwdGVyLT5yeF9idWZfcGVyX3BrdCwgYWRhcHRlci0+dHhfcXVldWUudHhfcmluZy5zaXplLAotCQlhZGFwdGVyLT5yeF9xdWV1ZS5yeF9yaW5nWzBdLnNpemUsCi0JCWFkYXB0ZXItPnJ4X3F1ZXVlLnJ4X3JpbmdbMV0uc2l6ZSk7CisJZGV2X2RiZygmYWRhcHRlci0+bmV0ZGV2LT5kZXYsICIlczogc2tiX2J1Zl9zaXplICVkLCByeF9idWZfcGVyX3BrdCAlZCwiCisJCSIgcmluZyBzaXplcyAldSAldSAldVxuIiwgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLAorCQlhZGFwdGVyLT5za2JfYnVmX3NpemUsIGFkYXB0ZXItPnJ4X2J1Zl9wZXJfcGt0LAorCQlhZGFwdGVyLT50eF9xdWV1ZVswXS50eF9yaW5nLnNpemUsCisJCWFkYXB0ZXItPnJ4X3F1ZXVlWzBdLnJ4X3JpbmdbMF0uc2l6ZSwKKwkJYWRhcHRlci0+cnhfcXVldWVbMF0ucnhfcmluZ1sxXS5zaXplKTsKIAotCXZteG5ldDNfdHFfaW5pdCgmYWRhcHRlci0+dHhfcXVldWUsIGFkYXB0ZXIpOwotCWVyciA9IHZteG5ldDNfcnFfaW5pdCgmYWRhcHRlci0+cnhfcXVldWUsIGFkYXB0ZXIpOworCXZteG5ldDNfdHFfaW5pdF9hbGwoYWRhcHRlcik7CisJZXJyID0gdm14bmV0M19ycV9pbml0X2FsbChhZGFwdGVyKTsKIAlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIGluaXQgcnggcXVldWUgZm9yICVzOiBlcnJvciAlZFxuIiwKIAkJICAgICAgIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwgZXJyKTsKQEAgLTE4NzAsMTAgKzIyMTYsMTUgQEAKIAkJZXJyID0gLUVJTlZBTDsKIAkJZ290byBhY3RpdmF0ZV9lcnI7CiAJfQotCVZNWE5FVDNfV1JJVEVfQkFSMF9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfUlhQUk9ELAotCQkJICAgICAgIGFkYXB0ZXItPnJ4X3F1ZXVlLnJ4X3JpbmdbMF0ubmV4dDJmaWxsKTsKLQlWTVhORVQzX1dSSVRFX0JBUjBfUkVHKGFkYXB0ZXIsIFZNWE5FVDNfUkVHX1JYUFJPRDIsCi0JCQkgICAgICAgYWRhcHRlci0+cnhfcXVldWUucnhfcmluZ1sxXS5uZXh0MmZpbGwpOworCisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykgeworCQlWTVhORVQzX1dSSVRFX0JBUjBfUkVHKGFkYXB0ZXIsCisJCQkJVk1YTkVUM19SRUdfUlhQUk9EICsgaSAqIFZNWE5FVDNfUkVHX0FMSUdOLAorCQkJCWFkYXB0ZXItPnJ4X3F1ZXVlW2ldLnJ4X3JpbmdbMF0ubmV4dDJmaWxsKTsKKwkJVk1YTkVUM19XUklURV9CQVIwX1JFRyhhZGFwdGVyLCAoVk1YTkVUM19SRUdfUlhQUk9EMiArCisJCQkJKGkgKiBWTVhORVQzX1JFR19BTElHTikpLAorCQkJCWFkYXB0ZXItPnJ4X3F1ZXVlW2ldLnJ4X3JpbmdbMV0ubmV4dDJmaWxsKTsKKwl9CiAKIAkvKiBBcHBseSB0aGUgcnggZmlsdGVyIHNldHRpbnMgbGFzdC4gKi8KIAl2bXhuZXQzX3NldF9tYyhhZGFwdGVyLT5uZXRkZXYpOwpAQCAtMTg4Myw4ICsyMjM0LDggQEAKIAkgKiB0eCBxdWV1ZSBpZiB0aGUgbGluayBpcyB1cC4KIAkgKi8KIAl2bXhuZXQzX2NoZWNrX2xpbmsoYWRhcHRlciwgdHJ1ZSk7Ci0KLQluYXBpX2VuYWJsZSgmYWRhcHRlci0+bmFwaSk7CisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykKKwkJbmFwaV9lbmFibGUoJmFkYXB0ZXItPnJ4X3F1ZXVlW2ldLm5hcGkpOwogCXZteG5ldDNfZW5hYmxlX2FsbF9pbnRycyhhZGFwdGVyKTsKIAljbGVhcl9iaXQoVk1YTkVUM19TVEFURV9CSVRfUVVJRVNDRUQsICZhZGFwdGVyLT5zdGF0ZSk7CiAJcmV0dXJuIDA7CkBAIC0xODk2LDcgKzIyNDcsNyBAQAogaXJxX2VycjoKIHJxX2VycjoKIAkvKiBmcmVlIHVwIGJ1ZmZlcnMgd2UgYWxsb2NhdGVkICovCi0Jdm14bmV0M19ycV9jbGVhbnVwKCZhZGFwdGVyLT5yeF9xdWV1ZSwgYWRhcHRlcik7CisJdm14bmV0M19ycV9jbGVhbnVwX2FsbChhZGFwdGVyKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xOTExLDYgKzIyNjIsNyBAQAogaW50CiB2bXhuZXQzX3F1aWVzY2VfZGV2KHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CisJaW50IGk7CiAJaWYgKHRlc3RfYW5kX3NldF9iaXQoVk1YTkVUM19TVEFURV9CSVRfUVVJRVNDRUQsICZhZGFwdGVyLT5zdGF0ZSkpCiAJCXJldHVybiAwOwogCkBAIC0xOTE5LDEzICsyMjcxLDE0IEBACiAJCQkgICAgICAgVk1YTkVUM19DTURfUVVJRVNDRV9ERVYpOwogCXZteG5ldDNfZGlzYWJsZV9hbGxfaW50cnMoYWRhcHRlcik7CiAKLQluYXBpX2Rpc2FibGUoJmFkYXB0ZXItPm5hcGkpOworCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspCisJCW5hcGlfZGlzYWJsZSgmYWRhcHRlci0+cnhfcXVldWVbaV0ubmFwaSk7CiAJbmV0aWZfdHhfZGlzYWJsZShhZGFwdGVyLT5uZXRkZXYpOwogCWFkYXB0ZXItPmxpbmtfc3BlZWQgPSAwOwogCW5ldGlmX2NhcnJpZXJfb2ZmKGFkYXB0ZXItPm5ldGRldik7CiAKLQl2bXhuZXQzX3RxX2NsZWFudXAoJmFkYXB0ZXItPnR4X3F1ZXVlLCBhZGFwdGVyKTsKLQl2bXhuZXQzX3JxX2NsZWFudXAoJmFkYXB0ZXItPnJ4X3F1ZXVlLCBhZGFwdGVyKTsKKwl2bXhuZXQzX3RxX2NsZWFudXBfYWxsKGFkYXB0ZXIpOworCXZteG5ldDNfcnFfY2xlYW51cF9hbGwoYWRhcHRlcik7CiAJdm14bmV0M19mcmVlX2lycXMoYWRhcHRlcik7CiAJcmV0dXJuIDA7CiB9CkBAIC0yMDQ3LDcgKzI0MDAsOSBAQAogc3RhdGljIHZvaWQKIHZteG5ldDNfYWRqdXN0X3J4X3Jpbmdfc2l6ZShzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyKQogewotCXNpemVfdCBzejsKKwlzaXplX3Qgc3osIGksIHJpbmcwX3NpemUsIHJpbmcxX3NpemUsIGNvbXBfc2l6ZTsKKwlzdHJ1Y3Qgdm14bmV0M19yeF9xdWV1ZQkqcnEgPSAmYWRhcHRlci0+cnhfcXVldWVbMF07CisKIAogCWlmIChhZGFwdGVyLT5uZXRkZXYtPm10dSA8PSBWTVhORVQzX01BWF9TS0JfQlVGX1NJWkUgLQogCQkJCSAgICBWTVhORVQzX01BWF9FVEhfSERSX1NJWkUpIHsKQEAgLTIwNjksMTEgKzI0MjQsMTkgQEAKIAkgKiByeF9idWZfcGVyX3BrdCAqIFZNWE5FVDNfUklOR19TSVpFX0FMSUdOCiAJICovCiAJc3ogPSBhZGFwdGVyLT5yeF9idWZfcGVyX3BrdCAqIFZNWE5FVDNfUklOR19TSVpFX0FMSUdOOwotCWFkYXB0ZXItPnJ4X3F1ZXVlLnJ4X3JpbmdbMF0uc2l6ZSA9IChhZGFwdGVyLT5yeF9xdWV1ZS5yeF9yaW5nWzBdLnNpemUgKwotCQkJCQkgICAgIHN6IC0gMSkgLyBzeiAqIHN6OwotCWFkYXB0ZXItPnJ4X3F1ZXVlLnJ4X3JpbmdbMF0uc2l6ZSA9IG1pbl90KHUzMiwKLQkJCQkJICAgIGFkYXB0ZXItPnJ4X3F1ZXVlLnJ4X3JpbmdbMF0uc2l6ZSwKLQkJCQkJICAgIFZNWE5FVDNfUlhfUklOR19NQVhfU0laRSAvIHN6ICogc3opOworCXJpbmcwX3NpemUgPSBhZGFwdGVyLT5yeF9xdWV1ZVswXS5yeF9yaW5nWzBdLnNpemU7CisJcmluZzBfc2l6ZSA9IChyaW5nMF9zaXplICsgc3ogLSAxKSAvIHN6ICogc3o7CisJcmluZzBfc2l6ZSA9IG1pbl90KHUzMiwgcnEtPnJ4X3JpbmdbMF0uc2l6ZSwgVk1YTkVUM19SWF9SSU5HX01BWF9TSVpFIC8KKwkJCSAgIHN6ICogc3opOworCXJpbmcxX3NpemUgPSBhZGFwdGVyLT5yeF9xdWV1ZVswXS5yeF9yaW5nWzFdLnNpemU7CisJY29tcF9zaXplID0gcmluZzBfc2l6ZSArIHJpbmcxX3NpemU7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKSB7CisJCXJxID0gJmFkYXB0ZXItPnJ4X3F1ZXVlW2ldOworCQlycS0+cnhfcmluZ1swXS5zaXplID0gcmluZzBfc2l6ZTsKKwkJcnEtPnJ4X3JpbmdbMV0uc2l6ZSA9IHJpbmcxX3NpemU7CisJCXJxLT5jb21wX3Jpbmcuc2l6ZSA9IGNvbXBfc2l6ZTsKKwl9CiB9CiAKIApAQCAtMjA4MSwyOSArMjQ0NCw1MyBAQAogdm14bmV0M19jcmVhdGVfcXVldWVzKHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiB0eF9yaW5nX3NpemUsCiAJCSAgICAgIHUzMiByeF9yaW5nX3NpemUsIHUzMiByeF9yaW5nMl9zaXplKQogewotCWludCBlcnI7CisJaW50IGVyciA9IDAsIGk7CiAKLQlhZGFwdGVyLT50eF9xdWV1ZS50eF9yaW5nLnNpemUgICA9IHR4X3Jpbmdfc2l6ZTsKLQlhZGFwdGVyLT50eF9xdWV1ZS5kYXRhX3Jpbmcuc2l6ZSA9IHR4X3Jpbmdfc2l6ZTsKLQlhZGFwdGVyLT50eF9xdWV1ZS5jb21wX3Jpbmcuc2l6ZSA9IHR4X3Jpbmdfc2l6ZTsKLQlhZGFwdGVyLT50eF9xdWV1ZS5zaGFyZWQgPSAmYWRhcHRlci0+dHFkX3N0YXJ0LT5jdHJsOwotCWFkYXB0ZXItPnR4X3F1ZXVlLnN0b3BwZWQgPSB0cnVlOwotCWVyciA9IHZteG5ldDNfdHFfY3JlYXRlKCZhZGFwdGVyLT50eF9xdWV1ZSwgYWRhcHRlcik7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKSB7CisJCXN0cnVjdCB2bXhuZXQzX3R4X3F1ZXVlCSp0cSA9ICZhZGFwdGVyLT50eF9xdWV1ZVtpXTsKKwkJdHEtPnR4X3Jpbmcuc2l6ZSAgID0gdHhfcmluZ19zaXplOworCQl0cS0+ZGF0YV9yaW5nLnNpemUgPSB0eF9yaW5nX3NpemU7CisJCXRxLT5jb21wX3Jpbmcuc2l6ZSA9IHR4X3Jpbmdfc2l6ZTsKKwkJdHEtPnNoYXJlZCA9ICZhZGFwdGVyLT50cWRfc3RhcnRbaV0uY3RybDsKKwkJdHEtPnN0b3BwZWQgPSB0cnVlOworCQl0cS0+YWRhcHRlciA9IGFkYXB0ZXI7CisJCXRxLT5xaWQgPSBpOworCQllcnIgPSB2bXhuZXQzX3RxX2NyZWF0ZSh0cSwgYWRhcHRlcik7CisJCS8qCisJCSAqIFRvbyBsYXRlIHRvIGNoYW5nZSBudW1fdHhfcXVldWVzLiBXZSBjYW5ub3QgZG8gYXdheSB3aXRoCisJCSAqIGxlc3NlciBudW1iZXIgb2YgcXVldWVzIHRoYW4gd2hhdCB3ZSBhc2tlZCBmb3IKKwkJICovCisJCWlmIChlcnIpCisJCQlnb3RvIHF1ZXVlX2VycjsKKwl9CiAKLQlhZGFwdGVyLT5yeF9xdWV1ZS5yeF9yaW5nWzBdLnNpemUgPSByeF9yaW5nX3NpemU7Ci0JYWRhcHRlci0+cnhfcXVldWUucnhfcmluZ1sxXS5zaXplID0gcnhfcmluZzJfc2l6ZTsKKwlhZGFwdGVyLT5yeF9xdWV1ZVswXS5yeF9yaW5nWzBdLnNpemUgPSByeF9yaW5nX3NpemU7CisJYWRhcHRlci0+cnhfcXVldWVbMF0ucnhfcmluZ1sxXS5zaXplID0gcnhfcmluZzJfc2l6ZTsKIAl2bXhuZXQzX2FkanVzdF9yeF9yaW5nX3NpemUoYWRhcHRlcik7Ci0JYWRhcHRlci0+cnhfcXVldWUuY29tcF9yaW5nLnNpemUgID0gYWRhcHRlci0+cnhfcXVldWUucnhfcmluZ1swXS5zaXplICsKLQkJCQkJICAgIGFkYXB0ZXItPnJ4X3F1ZXVlLnJ4X3JpbmdbMV0uc2l6ZTsKLQlhZGFwdGVyLT5yeF9xdWV1ZS5xaWQgID0gMDsKLQlhZGFwdGVyLT5yeF9xdWV1ZS5xaWQyID0gMTsKLQlhZGFwdGVyLT5yeF9xdWV1ZS5zaGFyZWQgPSAmYWRhcHRlci0+cnFkX3N0YXJ0LT5jdHJsOwotCWVyciA9IHZteG5ldDNfcnFfY3JlYXRlKCZhZGFwdGVyLT5yeF9xdWV1ZSwgYWRhcHRlcik7Ci0JaWYgKGVycikKLQkJdm14bmV0M190cV9kZXN0cm95KCZhZGFwdGVyLT50eF9xdWV1ZSwgYWRhcHRlcik7Ci0KKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKSB7CisJCXN0cnVjdCB2bXhuZXQzX3J4X3F1ZXVlICpycSA9ICZhZGFwdGVyLT5yeF9xdWV1ZVtpXTsKKwkJLyogcWlkIGFuZCBxaWQyIGZvciByeCBxdWV1ZXMgd2lsbCBiZSBhc3NpZ25lZCBsYXRlciB3aGVuIG51bQorCQkgKiBvZiByeCBxdWV1ZXMgaXMgZmluYWxpemVkIGFmdGVyIGFsbG9jYXRpbmcgaW50cnMgKi8KKwkJcnEtPnNoYXJlZCA9ICZhZGFwdGVyLT5ycWRfc3RhcnRbaV0uY3RybDsKKwkJcnEtPmFkYXB0ZXIgPSBhZGFwdGVyOworCQllcnIgPSB2bXhuZXQzX3JxX2NyZWF0ZShycSwgYWRhcHRlcik7CisJCWlmIChlcnIpIHsKKwkJCWlmIChpID09IDApIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgIkNvdWxkIG5vdCBhbGxvY2F0ZSBhbnkgcngiCisJCQkJICAgICAgICJxdWV1ZXMuIEFib3J0aW5nLlxuIik7CisJCQkJZ290byBxdWV1ZV9lcnI7CisJCQl9IGVsc2UgeworCQkJCXByaW50ayhLRVJOX0lORk8gIk51bWJlciBvZiByeCBxdWV1ZXMgY2hhbmdlZCAiCisJCQkJICAgICAgICJ0byA6ICVkLlxuIiwgaSk7CisJCQkJYWRhcHRlci0+bnVtX3J4X3F1ZXVlcyA9IGk7CisJCQkJZXJyID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gZXJyOworcXVldWVfZXJyOgorCXZteG5ldDNfdHFfZGVzdHJveV9hbGwoYWRhcHRlcik7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMjExMSwxMSArMjQ5OCwxMiBAQAogdm14bmV0M19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlcjsKLQlpbnQgZXJyOworCWludCBlcnIsIGk7CiAKIAlhZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAotCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT50eF9xdWV1ZS50eF9sb2NrKTsKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKQorCQlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+dHhfcXVldWVbaV0udHhfbG9jayk7CiAKIAllcnIgPSB2bXhuZXQzX2NyZWF0ZV9xdWV1ZXMoYWRhcHRlciwgVk1YTkVUM19ERUZfVFhfUklOR19TSVpFLAogCQkJCSAgICBWTVhORVQzX0RFRl9SWF9SSU5HX1NJWkUsCkBAIC0yMTMwLDggKzI1MTgsOCBAQAogCXJldHVybiAwOwogCiBhY3RpdmF0ZV9lcnI6Ci0Jdm14bmV0M19ycV9kZXN0cm95KCZhZGFwdGVyLT5yeF9xdWV1ZSwgYWRhcHRlcik7Ci0Jdm14bmV0M190cV9kZXN0cm95KCZhZGFwdGVyLT50eF9xdWV1ZSwgYWRhcHRlcik7CisJdm14bmV0M19ycV9kZXN0cm95X2FsbChhZGFwdGVyKTsKKwl2bXhuZXQzX3RxX2Rlc3Ryb3lfYWxsKGFkYXB0ZXIpOwogcXVldWVfZXJyOgogCXJldHVybiBlcnI7CiB9CkBAIC0yMTUxLDggKzI1MzksOCBAQAogCiAJdm14bmV0M19xdWllc2NlX2RldihhZGFwdGVyKTsKIAotCXZteG5ldDNfcnFfZGVzdHJveSgmYWRhcHRlci0+cnhfcXVldWUsIGFkYXB0ZXIpOwotCXZteG5ldDNfdHFfZGVzdHJveSgmYWRhcHRlci0+dHhfcXVldWUsIGFkYXB0ZXIpOworCXZteG5ldDNfcnFfZGVzdHJveV9hbGwoYWRhcHRlcik7CisJdm14bmV0M190cV9kZXN0cm95X2FsbChhZGFwdGVyKTsKIAogCWNsZWFyX2JpdChWTVhORVQzX1NUQVRFX0JJVF9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSk7CiAKQEAgLTIxNjQsNiArMjU1Miw4IEBACiB2b2lkCiB2bXhuZXQzX2ZvcmNlX2Nsb3NlKHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CisJaW50IGk7CisKIAkvKgogCSAqIHdlIG11c3QgY2xlYXIgVk1YTkVUM19TVEFURV9CSVRfUkVTRVRUSU5HLCBvdGhlcndpc2UKIAkgKiB2bXhuZXQzX2Nsb3NlKCkgd2lsbCBkZWFkbG9jay4KQEAgLTIxNzEsNyArMjU2MSw4IEBACiAJQlVHX09OKHRlc3RfYml0KFZNWE5FVDNfU1RBVEVfQklUX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKSk7CiAKIAkvKiB3ZSBuZWVkIHRvIGVuYWJsZSBOQVBJLCBvdGhlcndpc2UgZGV2X2Nsb3NlIHdpbGwgZGVhZGxvY2sgKi8KLQluYXBpX2VuYWJsZSgmYWRhcHRlci0+bmFwaSk7CisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykKKwkJbmFwaV9lbmFibGUoJmFkYXB0ZXItPnJ4X3F1ZXVlW2ldLm5hcGkpOwogCWRldl9jbG9zZShhZGFwdGVyLT5uZXRkZXYpOwogfQogCkBAIC0yMjAyLDE0ICsyNTkzLDExIEBACiAJCXZteG5ldDNfcmVzZXRfZGV2KGFkYXB0ZXIpOwogCiAJCS8qIHdlIG5lZWQgdG8gcmUtY3JlYXRlIHRoZSByeCBxdWV1ZSBiYXNlZCBvbiB0aGUgbmV3IG10dSAqLwotCQl2bXhuZXQzX3JxX2Rlc3Ryb3koJmFkYXB0ZXItPnJ4X3F1ZXVlLCBhZGFwdGVyKTsKKwkJdm14bmV0M19ycV9kZXN0cm95X2FsbChhZGFwdGVyKTsKIAkJdm14bmV0M19hZGp1c3RfcnhfcmluZ19zaXplKGFkYXB0ZXIpOwotCQlhZGFwdGVyLT5yeF9xdWV1ZS5jb21wX3Jpbmcuc2l6ZSAgPQotCQkJCQlhZGFwdGVyLT5yeF9xdWV1ZS5yeF9yaW5nWzBdLnNpemUgKwotCQkJCQlhZGFwdGVyLT5yeF9xdWV1ZS5yeF9yaW5nWzFdLnNpemU7Ci0JCWVyciA9IHZteG5ldDNfcnFfY3JlYXRlKCZhZGFwdGVyLT5yeF9xdWV1ZSwgYWRhcHRlcik7CisJCWVyciA9IHZteG5ldDNfcnFfY3JlYXRlX2FsbChhZGFwdGVyKTsKIAkJaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHJlLWNyZWF0ZSByeCBxdWV1ZSwiCisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gcmUtY3JlYXRlIHJ4IHF1ZXVlcywiCiAJCQkJIiBlcnJvciAlZC4gQ2xvc2luZyBpdC5cbiIsIG5ldGRldi0+bmFtZSwgZXJyKTsKIAkJCWdvdG8gb3V0OwogCQl9CkBAIC0yMjc0LDYgKzI2NjIsNTUgQEAKIAltYWNbNV0gPSAodG1wID4+IDgpICYgMHhmZjsKIH0KIAorI2lmZGVmIENPTkZJR19QQ0lfTVNJCisKKy8qCisgKiBFbmFibGUgTVNJeCB2ZWN0b3JzLgorICogUmV0dXJucyA6CisgKgkwIG9uIHN1Y2Nlc3NmdWwgZW5hYmxpbmcgb2YgcmVxdWlyZWQgdmVjdG9ycywKKyAqCVZNWE5FVDNfTElOVVhfTUlOX01TSVhfVkVDVCB3aGVuIG9ubHkgbWludW11bSBudW1iZXIgb2YgdmVjdG9ycyByZXF1aXJlZAorICoJIGNvdWxkIGJlIGVuYWJsZWQuCisgKgludW1iZXIgb2YgdmVjdG9ycyB3aGljaCBjYW4gYmUgZW5hYmxlZCBvdGhlcndpc2UgKHRoaXMgbnVtYmVyIGlzIHNtYWxsZXIKKyAqCSB0aGFuIFZNWE5FVDNfTElOVVhfTUlOX01TSVhfVkVDVCkKKyAqLworCitzdGF0aWMgaW50Cit2bXhuZXQzX2FjcXVpcmVfbXNpeF92ZWN0b3JzKHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkgICAgIGludCB2ZWN0b3JzKQoreworCWludCBlcnIgPSAwLCB2ZWN0b3JfdGhyZXNob2xkOworCXZlY3Rvcl90aHJlc2hvbGQgPSBWTVhORVQzX0xJTlVYX01JTl9NU0lYX1ZFQ1Q7CisKKwl3aGlsZSAodmVjdG9ycyA+PSB2ZWN0b3JfdGhyZXNob2xkKSB7CisJCWVyciA9IHBjaV9lbmFibGVfbXNpeChhZGFwdGVyLT5wZGV2LCBhZGFwdGVyLT5pbnRyLm1zaXhfZW50cmllcywKKwkJCQkgICAgICB2ZWN0b3JzKTsKKwkJaWYgKCFlcnIpIHsKKwkJCWFkYXB0ZXItPmludHIubnVtX2ludHJzID0gdmVjdG9yczsKKwkJCXJldHVybiAwOworCQl9IGVsc2UgaWYgKGVyciA8IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIGVuYWJsZSBNU0ktWCBmb3IgJXMsIGVycm9yIgorCQkJICAgICAgICIgJWRcbiIsCWFkYXB0ZXItPm5ldGRldi0+bmFtZSwgZXJyKTsKKwkJCXZlY3RvcnMgPSAwOworCQl9IGVsc2UgaWYgKGVyciA8IHZlY3Rvcl90aHJlc2hvbGQpIHsKKwkJCWJyZWFrOworCQl9IGVsc2UgeworCQkJLyogSWYgZmFpbHMgdG8gZW5hYmxlIHJlcXVpcmVkIG51bWJlciBvZiBNU0kteCB2ZWN0b3JzCisJCQkgKiB0cnkgZW5hYmxpbmcgMyBvZiB0aGVtLiBPbmUgZWFjaCBmb3IgcngsIHR4IGFuZCBldmVudAorCQkJICovCisJCQl2ZWN0b3JzID0gdmVjdG9yX3RocmVzaG9sZDsKKwkJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIGVuYWJsZSAlZCBNU0ktWCBmb3IgJXMsIHRyeSIKKwkJCSAgICAgICAiICVkIGluc3RlYWRcbiIsIHZlY3RvcnMsIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwKKwkJCSAgICAgICB2ZWN0b3JfdGhyZXNob2xkKTsKKwkJfQorCX0KKworCXByaW50ayhLRVJOX0lORk8gIk51bWJlciBvZiBNU0ktWCBpbnRlcnJ1cHRzIHdoaWNoIGNhbiBiZSBhbGxvY2F0ZWRpIgorCSAgICAgICAiIGFyZSBsb3dlciB0aGFuIG1pbiB0aHJlc2hvbGQgcmVxdWlyZWQuXG4iKTsKKwlyZXR1cm4gZXJyOworfQorCisKKyNlbmRpZiAvKiBDT05GSUdfUENJX01TSSAqLwogCiBzdGF0aWMgdm9pZAogdm14bmV0M19hbGxvY19pbnRyX3Jlc291cmNlcyhzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyKQpAQCAtMjI5MywxNiArMjczMCw0NyBAQAogCiAjaWZkZWYgQ09ORklHX1BDSV9NU0kKIAlpZiAoYWRhcHRlci0+aW50ci50eXBlID09IFZNWE5FVDNfSVRfTVNJWCkgewotCQlpbnQgZXJyOworCQlpbnQgdmVjdG9yLCBlcnIgPSAwOwogCi0JCWFkYXB0ZXItPmludHIubXNpeF9lbnRyaWVzWzBdLmVudHJ5ID0gMDsKLQkJZXJyID0gcGNpX2VuYWJsZV9tc2l4KGFkYXB0ZXItPnBkZXYsIGFkYXB0ZXItPmludHIubXNpeF9lbnRyaWVzLAotCQkJCSAgICAgIFZNWE5FVDNfTElOVVhfTUFYX01TSVhfVkVDVCk7Ci0JCWlmICghZXJyKSB7Ci0JCQlhZGFwdGVyLT5pbnRyLm51bV9pbnRycyA9IDE7Ci0JCQlhZGFwdGVyLT5pbnRyLnR5cGUgPSBWTVhORVQzX0lUX01TSVg7CisJCWFkYXB0ZXItPmludHIubnVtX2ludHJzID0gKGFkYXB0ZXItPnNoYXJlX2ludHIgPT0KKwkJCQkJICAgVk1YTkVUM19JTlRSX1RYU0hBUkUpID8gMSA6CisJCQkJCSAgIGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7CisJCWFkYXB0ZXItPmludHIubnVtX2ludHJzICs9IChhZGFwdGVyLT5zaGFyZV9pbnRyID09CisJCQkJCSAgIFZNWE5FVDNfSU5UUl9CVUREWVNIQVJFKSA/IDAgOgorCQkJCQkgICBhZGFwdGVyLT5udW1fcnhfcXVldWVzOworCQlhZGFwdGVyLT5pbnRyLm51bV9pbnRycyArPSAxOwkJLyogZm9yIGxpbmsgZXZlbnQgKi8KKworCQlhZGFwdGVyLT5pbnRyLm51bV9pbnRycyA9IChhZGFwdGVyLT5pbnRyLm51bV9pbnRycyA+CisJCQkJCSAgIFZNWE5FVDNfTElOVVhfTUlOX01TSVhfVkVDVAorCQkJCQkgICA/IGFkYXB0ZXItPmludHIubnVtX2ludHJzIDoKKwkJCQkJICAgVk1YTkVUM19MSU5VWF9NSU5fTVNJWF9WRUNUKTsKKworCQlmb3IgKHZlY3RvciA9IDA7IHZlY3RvciA8IGFkYXB0ZXItPmludHIubnVtX2ludHJzOyB2ZWN0b3IrKykKKwkJCWFkYXB0ZXItPmludHIubXNpeF9lbnRyaWVzW3ZlY3Rvcl0uZW50cnkgPSB2ZWN0b3I7CisKKwkJZXJyID0gdm14bmV0M19hY3F1aXJlX21zaXhfdmVjdG9ycyhhZGFwdGVyLAorCQkJCQkJICAgYWRhcHRlci0+aW50ci5udW1faW50cnMpOworCQkvKiBJZiB3ZSBjYW5ub3QgYWxsb2NhdGUgb25lIE1TSXggdmVjdG9yIHBlciBxdWV1ZQorCQkgKiB0aGVuIGxpbWl0IHRoZSBudW1iZXIgb2YgcnggcXVldWVzIHRvIDEKKwkJICovCisJCWlmIChlcnIgPT0gVk1YTkVUM19MSU5VWF9NSU5fTVNJWF9WRUNUKSB7CisJCQlpZiAoYWRhcHRlci0+c2hhcmVfaW50ciAhPSBWTVhORVQzX0lOVFJfQlVERFlTSEFSRQorCQkJICAgIHx8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMgIT0gMikgeworCQkJCWFkYXB0ZXItPnNoYXJlX2ludHIgPSBWTVhORVQzX0lOVFJfVFhTSEFSRTsKKwkJCQlwcmludGsoS0VSTl9FUlIgIk51bWJlciBvZiByeCBxdWV1ZXMgOiAxXG4iKTsKKwkJCQlhZGFwdGVyLT5udW1fcnhfcXVldWVzID0gMTsKKwkJCQlhZGFwdGVyLT5pbnRyLm51bV9pbnRycyA9CisJCQkJCQlWTVhORVQzX0xJTlVYX01JTl9NU0lYX1ZFQ1Q7CisJCQl9CiAJCQlyZXR1cm47CiAJCX0KKwkJaWYgKCFlcnIpCisJCQlyZXR1cm47CisKKwkJLyogSWYgd2UgY2Fubm90IGFsbG9jYXRlIE1TSXggdmVjdG9ycyB1c2Ugb25seSBvbmUgcnggcXVldWUgKi8KKwkJcHJpbnRrKEtFUk5fSU5GTyAiRmFpbGVkIHRvIGVuYWJsZSBNU0ktWCBmb3IgJXMsIGVycm9yICVkLiIKKwkJICAgICAgICIjcnggcXVldWVzIDogMSwgdHJ5IE1TSVxuIiwgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBlcnIpOworCiAJCWFkYXB0ZXItPmludHIudHlwZSA9IFZNWE5FVDNfSVRfTVNJOwogCX0KIApAQCAtMjMxMCwxMiArMjc3OCwxNSBAQAogCQlpbnQgZXJyOwogCQllcnIgPSBwY2lfZW5hYmxlX21zaShhZGFwdGVyLT5wZGV2KTsKIAkJaWYgKCFlcnIpIHsKKwkJCWFkYXB0ZXItPm51bV9yeF9xdWV1ZXMgPSAxOwogCQkJYWRhcHRlci0+aW50ci5udW1faW50cnMgPSAxOwogCQkJcmV0dXJuOwogCQl9CiAJfQogI2VuZGlmIC8qIENPTkZJR19QQ0lfTVNJICovCiAKKwlhZGFwdGVyLT5udW1fcnhfcXVldWVzID0gMTsKKwlwcmludGsoS0VSTl9JTkZPICJVc2luZyBJTlR4IGludGVycnVwdCwgI1J4IHF1ZXVlczogMS5cbiIpOwogCWFkYXB0ZXItPmludHIudHlwZSA9IFZNWE5FVDNfSVRfSU5UWDsKIAogCS8qIElOVC1YIHJlbGF0ZWQgc2V0dGluZyAqLwpAQCAtMjM0Myw2ICsyODE0LDcgQEAKIAogCXByaW50ayhLRVJOX0VSUiAiJXM6IHR4IGhhbmdcbiIsIGFkYXB0ZXItPm5ldGRldi0+bmFtZSk7CiAJc2NoZWR1bGVfd29yaygmYWRhcHRlci0+d29yayk7CisJbmV0aWZfd2FrZV9xdWV1ZShhZGFwdGVyLT5uZXRkZXYpOwogfQogCiAKQEAgLTIzOTksOCArMjg3MSwyOSBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CiAJc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlcjsKIAl1OCBtYWNbRVRIX0FMRU5dOworCWludCBzaXplOworCWludCBudW1fdHhfcXVldWVzOworCWludCBudW1fcnhfcXVldWVzOwogCi0JbmV0ZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIpKTsKKyNpZmRlZiBWTVhORVQzX1JTUworCWlmIChlbmFibGVfbXEpCisJCW51bV9yeF9xdWV1ZXMgPSBtaW4oVk1YTkVUM19ERVZJQ0VfTUFYX1JYX1FVRVVFUywKKwkJCQkgICAgKGludCludW1fb25saW5lX2NwdXMoKSk7CisJZWxzZQorI2VuZGlmCisJCW51bV9yeF9xdWV1ZXMgPSAxOworCisJaWYgKGVuYWJsZV9tcSkKKwkJbnVtX3R4X3F1ZXVlcyA9IG1pbihWTVhORVQzX0RFVklDRV9NQVhfVFhfUVVFVUVTLAorCQkJCSAgICAoaW50KW51bV9vbmxpbmVfY3B1cygpKTsKKwllbHNlCisJCW51bV90eF9xdWV1ZXMgPSAxOworCisJbmV0ZGV2ID0gYWxsb2NfZXRoZXJkZXZfbXEoc2l6ZW9mKHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIpLAorCQkJCSAgIG1heChudW1fdHhfcXVldWVzLCBudW1fcnhfcXVldWVzKSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiIyBvZiBUeCBxdWV1ZXMgOiAlZCwgIyBvZiBSeCBxdWV1ZXMgOiAlZFxuIiwKKwkgICAgICAgbnVtX3R4X3F1ZXVlcywgbnVtX3J4X3F1ZXVlcyk7CisKIAlpZiAoIW5ldGRldikgewogCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBhbGxvYyBldGhlcm5ldCBkZXZpY2UgZm9yIGFkYXB0ZXIgIgogCQkJIiVzXG4iLAlwY2lfbmFtZShwZGV2KSk7CkBAIC0yNDIyLDkgKzI5MTUsMTIgQEAKIAkJZ290byBlcnJfYWxsb2Nfc2hhcmVkOwogCX0KIAotCWFkYXB0ZXItPnRxZF9zdGFydCA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsCi0JCQkgICAgIHNpemVvZihzdHJ1Y3QgVm14bmV0M19UeFF1ZXVlRGVzYykgKwotCQkJICAgICBzaXplb2Yoc3RydWN0IFZteG5ldDNfUnhRdWV1ZURlc2MpLAorCWFkYXB0ZXItPm51bV9yeF9xdWV1ZXMgPSBudW1fcnhfcXVldWVzOworCWFkYXB0ZXItPm51bV90eF9xdWV1ZXMgPSBudW1fdHhfcXVldWVzOworCisJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgVm14bmV0M19UeFF1ZXVlRGVzYykgKiBhZGFwdGVyLT5udW1fdHhfcXVldWVzOworCXNpemUgKz0gc2l6ZW9mKHN0cnVjdCBWbXhuZXQzX1J4UXVldWVEZXNjKSAqIGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7CisJYWRhcHRlci0+dHFkX3N0YXJ0ID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwgc2l6ZSwKIAkJCSAgICAgJmFkYXB0ZXItPnF1ZXVlX2Rlc2NfcGEpOwogCiAJaWYgKCFhZGFwdGVyLT50cWRfc3RhcnQpIHsKQEAgLTI0MzMsOCArMjkyOSw4IEBACiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX2FsbG9jX3F1ZXVlX2Rlc2M7CiAJfQotCWFkYXB0ZXItPnJxZF9zdGFydCA9IChzdHJ1Y3QgVm14bmV0M19SeFF1ZXVlRGVzYyAqKShhZGFwdGVyLT50cWRfc3RhcnQKLQkJCQkJCQkgICAgKyAxKTsKKwlhZGFwdGVyLT5ycWRfc3RhcnQgPSAoc3RydWN0IFZteG5ldDNfUnhRdWV1ZURlc2MgKikoYWRhcHRlci0+dHFkX3N0YXJ0ICsKKwkJCQkJCQlhZGFwdGVyLT5udW1fdHhfcXVldWVzKTsKIAogCWFkYXB0ZXItPnBtX2NvbmYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgVm14bmV0M19QTUNvbmYpLCBHRlBfS0VSTkVMKTsKIAlpZiAoYWRhcHRlci0+cG1fY29uZiA9PSBOVUxMKSB7CkBAIC0yNDQ0LDYgKzI5NDAsMTcgQEAKIAkJZ290byBlcnJfYWxsb2NfcG07CiAJfQogCisjaWZkZWYgVk1YTkVUM19SU1MKKworCWFkYXB0ZXItPnJzc19jb25mID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IFVQVDFfUlNTQ29uZiksIEdGUF9LRVJORUwpOworCWlmIChhZGFwdGVyLT5yc3NfY29uZiA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgJXNcbiIsCisJCSAgICAgICBwY2lfbmFtZShwZGV2KSk7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2FsbG9jX3JzczsKKwl9CisjZW5kaWYgLyogVk1YTkVUM19SU1MgKi8KKwogCWVyciA9IHZteG5ldDNfYWxsb2NfcGNpX3Jlc291cmNlcyhhZGFwdGVyLCAmZG1hNjQpOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIGVycl9hbGxvY19wY2k7CkBAIC0yNDcxLDE4ICsyOTc4LDQ4IEBACiAJdm14bmV0M19kZWNsYXJlX2ZlYXR1cmVzKGFkYXB0ZXIsIGRtYTY0KTsKIAogCWFkYXB0ZXItPmRldl9udW1iZXIgPSBhdG9taWNfcmVhZCgmZGV2aWNlc19mb3VuZCk7CisKKwkgYWRhcHRlci0+c2hhcmVfaW50ciA9IGlycV9zaGFyZV9tb2RlOworCWlmIChhZGFwdGVyLT5zaGFyZV9pbnRyID09IFZNWE5FVDNfSU5UUl9CVUREWVNIQVJFICYmCisJICAgIGFkYXB0ZXItPm51bV90eF9xdWV1ZXMgIT0gYWRhcHRlci0+bnVtX3J4X3F1ZXVlcykKKwkJYWRhcHRlci0+c2hhcmVfaW50ciA9IFZNWE5FVDNfSU5UUl9ET05UU0hBUkU7CisKIAl2bXhuZXQzX2FsbG9jX2ludHJfcmVzb3VyY2VzKGFkYXB0ZXIpOwogCisjaWZkZWYgVk1YTkVUM19SU1MKKwlpZiAoYWRhcHRlci0+bnVtX3J4X3F1ZXVlcyA+IDEgJiYKKwkgICAgYWRhcHRlci0+aW50ci50eXBlID09IFZNWE5FVDNfSVRfTVNJWCkgeworCQlhZGFwdGVyLT5yc3MgPSB0cnVlOworCQlwcmludGsoS0VSTl9JTkZPICJSU1MgaXMgZW5hYmxlZC5cbiIpOworCX0gZWxzZSB7CisJCWFkYXB0ZXItPnJzcyA9IGZhbHNlOworCX0KKyNlbmRpZgorCiAJdm14bmV0M19yZWFkX21hY19hZGRyKGFkYXB0ZXIsIG1hYyk7CiAJbWVtY3B5KG5ldGRldi0+ZGV2X2FkZHIsICBtYWMsIG5ldGRldi0+YWRkcl9sZW4pOwogCiAJbmV0ZGV2LT5uZXRkZXZfb3BzID0gJnZteG5ldDNfbmV0ZGV2X29wczsKLQluZXRkZXYtPndhdGNoZG9nX3RpbWVvID0gNSAqIEhaOwogCXZteG5ldDNfc2V0X2V0aHRvb2xfb3BzKG5ldGRldik7CisJbmV0ZGV2LT53YXRjaGRvZ190aW1lbyA9IDUgKiBIWjsKIAogCUlOSVRfV09SSygmYWRhcHRlci0+d29yaywgdm14bmV0M19yZXNldF93b3JrKTsKIAotCW5ldGlmX25hcGlfYWRkKG5ldGRldiwgJmFkYXB0ZXItPm5hcGksIHZteG5ldDNfcG9sbCwgNjQpOworCWlmIChhZGFwdGVyLT5pbnRyLnR5cGUgPT0gVk1YTkVUM19JVF9NU0lYKSB7CisJCWludCBpOworCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKSB7CisJCQluZXRpZl9uYXBpX2FkZChhZGFwdGVyLT5uZXRkZXYsCisJCQkJICAgICAgICZhZGFwdGVyLT5yeF9xdWV1ZVtpXS5uYXBpLAorCQkJCSAgICAgICB2bXhuZXQzX3BvbGxfcnhfb25seSwgNjQpOworCQl9CisJfSBlbHNlIHsKKwkJbmV0aWZfbmFwaV9hZGQoYWRhcHRlci0+bmV0ZGV2LCAmYWRhcHRlci0+cnhfcXVldWVbMF0ubmFwaSwKKwkJCSAgICAgICB2bXhuZXQzX3BvbGwsIDY0KTsKKwl9CisKKwluZXRpZl9zZXRfcmVhbF9udW1fdHhfcXVldWVzKGFkYXB0ZXItPm5ldGRldiwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlcyk7CisJbmV0aWZfc2V0X3JlYWxfbnVtX3J4X3F1ZXVlcyhhZGFwdGVyLT5uZXRkZXYsIGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMpOworCiAJU0VUX05FVERFVl9ERVYobmV0ZGV2LCAmcGRldi0+ZGV2KTsKIAllcnIgPSByZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KTsKIApAQCAtMjUwMiwxMSArMzAzOSwxNCBAQAogZXJyX3ZlcjoKIAl2bXhuZXQzX2ZyZWVfcGNpX3Jlc291cmNlcyhhZGFwdGVyKTsKIGVycl9hbGxvY19wY2k6CisjaWZkZWYgVk1YTkVUM19SU1MKKwlrZnJlZShhZGFwdGVyLT5yc3NfY29uZik7CitlcnJfYWxsb2NfcnNzOgorI2VuZGlmCiAJa2ZyZWUoYWRhcHRlci0+cG1fY29uZik7CiBlcnJfYWxsb2NfcG06Ci0JcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LCBzaXplb2Yoc3RydWN0IFZteG5ldDNfVHhRdWV1ZURlc2MpICsKLQkJCSAgICBzaXplb2Yoc3RydWN0IFZteG5ldDNfUnhRdWV1ZURlc2MpLAotCQkJICAgIGFkYXB0ZXItPnRxZF9zdGFydCwgYWRhcHRlci0+cXVldWVfZGVzY19wYSk7CisJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LCBzaXplLCBhZGFwdGVyLT50cWRfc3RhcnQsCisJCQkgICAgYWRhcHRlci0+cXVldWVfZGVzY19wYSk7CiBlcnJfYWxsb2NfcXVldWVfZGVzYzoKIAlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsIHNpemVvZihzdHJ1Y3QgVm14bmV0M19Ecml2ZXJTaGFyZWQpLAogCQkJICAgIGFkYXB0ZXItPnNoYXJlZCwgYWRhcHRlci0+c2hhcmVkX3BhKTsKQEAgLTI1MjIsMTcgKzMwNjIsMzIgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWludCBzaXplID0gMDsKKwlpbnQgbnVtX3J4X3F1ZXVlczsKIAotCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisjaWZkZWYgVk1YTkVUM19SU1MKKwlpZiAoZW5hYmxlX21xKQorCQludW1fcnhfcXVldWVzID0gbWluKFZNWE5FVDNfREVWSUNFX01BWF9SWF9RVUVVRVMsCisJCQkJICAgIChpbnQpbnVtX29ubGluZV9jcHVzKCkpOworCWVsc2UKKyNlbmRpZgorCQludW1fcnhfcXVldWVzID0gMTsKKworCWNhbmNlbF93b3JrX3N5bmMoJmFkYXB0ZXItPndvcmspOwogCiAJdW5yZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KTsKIAogCXZteG5ldDNfZnJlZV9pbnRyX3Jlc291cmNlcyhhZGFwdGVyKTsKIAl2bXhuZXQzX2ZyZWVfcGNpX3Jlc291cmNlcyhhZGFwdGVyKTsKKyNpZmRlZiBWTVhORVQzX1JTUworCWtmcmVlKGFkYXB0ZXItPnJzc19jb25mKTsKKyNlbmRpZgogCWtmcmVlKGFkYXB0ZXItPnBtX2NvbmYpOwotCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwgc2l6ZW9mKHN0cnVjdCBWbXhuZXQzX1R4UXVldWVEZXNjKSArCi0JCQkgICAgc2l6ZW9mKHN0cnVjdCBWbXhuZXQzX1J4UXVldWVEZXNjKSwKLQkJCSAgICBhZGFwdGVyLT50cWRfc3RhcnQsIGFkYXB0ZXItPnF1ZXVlX2Rlc2NfcGEpOworCisJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgVm14bmV0M19UeFF1ZXVlRGVzYykgKiBhZGFwdGVyLT5udW1fdHhfcXVldWVzOworCXNpemUgKz0gc2l6ZW9mKHN0cnVjdCBWbXhuZXQzX1J4UXVldWVEZXNjKSAqIG51bV9yeF9xdWV1ZXM7CisJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LCBzaXplLCBhZGFwdGVyLT50cWRfc3RhcnQsCisJCQkgICAgYWRhcHRlci0+cXVldWVfZGVzY19wYSk7CiAJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LCBzaXplb2Yoc3RydWN0IFZteG5ldDNfRHJpdmVyU2hhcmVkKSwKIAkJCSAgICBhZGFwdGVyLT5zaGFyZWQsIGFkYXB0ZXItPnNoYXJlZF9wYSk7CiAJZnJlZV9uZXRkZXYobmV0ZGV2KTsKQEAgLTI1NjMsNyArMzExOCw3IEBACiAJdm14bmV0M19mcmVlX2ludHJfcmVzb3VyY2VzKGFkYXB0ZXIpOwogCiAJbmV0aWZfZGV2aWNlX2RldGFjaChuZXRkZXYpOwotCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKKwluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTsKIAogCS8qIENyZWF0ZSB3YWtlLXVwIGZpbHRlcnMuICovCiAJcG1Db25mID0gYWRhcHRlci0+cG1fY29uZjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZteG5ldDMvdm14bmV0M19ldGh0b29sLmMgYi9kcml2ZXJzL25ldC92bXhuZXQzL3ZteG5ldDNfZXRodG9vbC5jCmluZGV4IGI3OTA3MGIuLjhlMTdmYzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3ZteG5ldDMvdm14bmV0M19ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvdm14bmV0My92bXhuZXQzX2V0aHRvb2wuYwpAQCAtMTUxLDQ0ICsxNTEsNDIgQEAKIAlzdHJ1Y3QgVVBUMV9UeFN0YXRzICpkZXZUeFN0YXRzOwogCXN0cnVjdCBVUFQxX1J4U3RhdHMgKmRldlJ4U3RhdHM7CiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKm5ldF9zdGF0cyA9ICZuZXRkZXYtPnN0YXRzOworCWludCBpOwogCiAJYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAKIAkvKiBDb2xsZWN0IHRoZSBkZXYgc3RhdHMgaW50byB0aGUgc2hhcmVkIGFyZWEgKi8KIAlWTVhORVQzX1dSSVRFX0JBUjFfUkVHKGFkYXB0ZXIsIFZNWE5FVDNfUkVHX0NNRCwgVk1YTkVUM19DTURfR0VUX1NUQVRTKTsKIAotCS8qIEFzc3VtaW5nIHRoYXQgd2UgaGF2ZSBhIHNpbmdsZSBxdWV1ZSBkZXZpY2UgKi8KLQlkZXZUeFN0YXRzID0gJmFkYXB0ZXItPnRxZF9zdGFydC0+c3RhdHM7Ci0JZGV2UnhTdGF0cyA9ICZhZGFwdGVyLT5ycWRfc3RhcnQtPnN0YXRzOwotCi0JLyogR2V0IGFjY2VzcyB0byB0aGUgZHJpdmVyIHN0YXRzIHBlciBxdWV1ZSAqLwotCWRydlR4U3RhdHMgPSAmYWRhcHRlci0+dHhfcXVldWUuc3RhdHM7Ci0JZHJ2UnhTdGF0cyA9ICZhZGFwdGVyLT5yeF9xdWV1ZS5zdGF0czsKLQogCW1lbXNldChuZXRfc3RhdHMsIDAsIHNpemVvZigqbmV0X3N0YXRzKSk7CisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGkrKykgeworCQlkZXZUeFN0YXRzID0gJmFkYXB0ZXItPnRxZF9zdGFydFtpXS5zdGF0czsKKwkJZHJ2VHhTdGF0cyA9ICZhZGFwdGVyLT50eF9xdWV1ZVtpXS5zdGF0czsKKwkJbmV0X3N0YXRzLT50eF9wYWNrZXRzICs9IGRldlR4U3RhdHMtPnVjYXN0UGt0c1R4T0sgKworCQkJCQlkZXZUeFN0YXRzLT5tY2FzdFBrdHNUeE9LICsKKwkJCQkJZGV2VHhTdGF0cy0+YmNhc3RQa3RzVHhPSzsKKwkJbmV0X3N0YXRzLT50eF9ieXRlcyArPSBkZXZUeFN0YXRzLT51Y2FzdEJ5dGVzVHhPSyArCisJCQkJICAgICAgZGV2VHhTdGF0cy0+bWNhc3RCeXRlc1R4T0sgKworCQkJCSAgICAgIGRldlR4U3RhdHMtPmJjYXN0Qnl0ZXNUeE9LOworCQluZXRfc3RhdHMtPnR4X2Vycm9ycyArPSBkZXZUeFN0YXRzLT5wa3RzVHhFcnJvcjsKKwkJbmV0X3N0YXRzLT50eF9kcm9wcGVkICs9IGRydlR4U3RhdHMtPmRyb3BfdG90YWw7CisJfQogCi0JbmV0X3N0YXRzLT5yeF9wYWNrZXRzID0gZGV2UnhTdGF0cy0+dWNhc3RQa3RzUnhPSyArCi0JCQkJZGV2UnhTdGF0cy0+bWNhc3RQa3RzUnhPSyArCi0JCQkJZGV2UnhTdGF0cy0+YmNhc3RQa3RzUnhPSzsKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKSB7CisJCWRldlJ4U3RhdHMgPSAmYWRhcHRlci0+cnFkX3N0YXJ0W2ldLnN0YXRzOworCQlkcnZSeFN0YXRzID0gJmFkYXB0ZXItPnJ4X3F1ZXVlW2ldLnN0YXRzOworCQluZXRfc3RhdHMtPnJ4X3BhY2tldHMgKz0gZGV2UnhTdGF0cy0+dWNhc3RQa3RzUnhPSyArCisJCQkJCWRldlJ4U3RhdHMtPm1jYXN0UGt0c1J4T0sgKworCQkJCQlkZXZSeFN0YXRzLT5iY2FzdFBrdHNSeE9LOwogCi0JbmV0X3N0YXRzLT50eF9wYWNrZXRzID0gZGV2VHhTdGF0cy0+dWNhc3RQa3RzVHhPSyArCi0JCQkJZGV2VHhTdGF0cy0+bWNhc3RQa3RzVHhPSyArCi0JCQkJZGV2VHhTdGF0cy0+YmNhc3RQa3RzVHhPSzsKKwkJbmV0X3N0YXRzLT5yeF9ieXRlcyArPSBkZXZSeFN0YXRzLT51Y2FzdEJ5dGVzUnhPSyArCisJCQkJICAgICAgZGV2UnhTdGF0cy0+bWNhc3RCeXRlc1J4T0sgKworCQkJCSAgICAgIGRldlJ4U3RhdHMtPmJjYXN0Qnl0ZXNSeE9LOwogCi0JbmV0X3N0YXRzLT5yeF9ieXRlcyA9IGRldlJ4U3RhdHMtPnVjYXN0Qnl0ZXNSeE9LICsKLQkJCSAgICAgIGRldlJ4U3RhdHMtPm1jYXN0Qnl0ZXNSeE9LICsKLQkJCSAgICAgIGRldlJ4U3RhdHMtPmJjYXN0Qnl0ZXNSeE9LOwotCi0JbmV0X3N0YXRzLT50eF9ieXRlcyA9IGRldlR4U3RhdHMtPnVjYXN0Qnl0ZXNUeE9LICsKLQkJCSAgICAgIGRldlR4U3RhdHMtPm1jYXN0Qnl0ZXNUeE9LICsKLQkJCSAgICAgIGRldlR4U3RhdHMtPmJjYXN0Qnl0ZXNUeE9LOwotCi0JbmV0X3N0YXRzLT5yeF9lcnJvcnMgPSBkZXZSeFN0YXRzLT5wa3RzUnhFcnJvcjsKLQluZXRfc3RhdHMtPnR4X2Vycm9ycyA9IGRldlR4U3RhdHMtPnBrdHNUeEVycm9yOwotCW5ldF9zdGF0cy0+cnhfZHJvcHBlZCA9IGRydlJ4U3RhdHMtPmRyb3BfdG90YWw7Ci0JbmV0X3N0YXRzLT50eF9kcm9wcGVkID0gZHJ2VHhTdGF0cy0+ZHJvcF90b3RhbDsKLQluZXRfc3RhdHMtPm11bHRpY2FzdCA9ICBkZXZSeFN0YXRzLT5tY2FzdFBrdHNSeE9LOwotCisJCW5ldF9zdGF0cy0+cnhfZXJyb3JzICs9IGRldlJ4U3RhdHMtPnBrdHNSeEVycm9yOworCQluZXRfc3RhdHMtPnJ4X2Ryb3BwZWQgKz0gZHJ2UnhTdGF0cy0+ZHJvcF90b3RhbDsKKwkJbmV0X3N0YXRzLT5tdWx0aWNhc3QgKz0gIGRldlJ4U3RhdHMtPm1jYXN0UGt0c1J4T0s7CisJfQogCXJldHVybiBuZXRfc3RhdHM7CiB9CiAKQEAgLTMwNywyNCArMzA1LDI2IEBACiAJc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJdTggKmJhc2U7CiAJaW50IGk7CisJaW50IGogPSAwOwogCiAJVk1YTkVUM19XUklURV9CQVIxX1JFRyhhZGFwdGVyLCBWTVhORVQzX1JFR19DTUQsIFZNWE5FVDNfQ01EX0dFVF9TVEFUUyk7CiAKIAkvKiB0aGlzIGRvZXMgYXNzdW1lIGVhY2ggY291bnRlciBpcyA2NC1iaXQgd2lkZSAqLworLyogVE9ETyBjaGFuZ2UgdGhpcyBmb3IgbXVsdGlwbGUgcXVldWVzICovCiAKLQliYXNlID0gKHU4ICopJmFkYXB0ZXItPnRxZF9zdGFydC0+c3RhdHM7CisJYmFzZSA9ICh1OCAqKSZhZGFwdGVyLT50cWRfc3RhcnRbal0uc3RhdHM7CiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodm14bmV0M190cV9kZXZfc3RhdHMpOyBpKyspCiAJCSpidWYrKyA9ICoodTY0ICopKGJhc2UgKyB2bXhuZXQzX3RxX2Rldl9zdGF0c1tpXS5vZmZzZXQpOwogCi0JYmFzZSA9ICh1OCAqKSZhZGFwdGVyLT50eF9xdWV1ZS5zdGF0czsKKwliYXNlID0gKHU4ICopJmFkYXB0ZXItPnR4X3F1ZXVlW2pdLnN0YXRzOwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHZteG5ldDNfdHFfZHJpdmVyX3N0YXRzKTsgaSsrKQogCQkqYnVmKysgPSAqKHU2NCAqKShiYXNlICsgdm14bmV0M190cV9kcml2ZXJfc3RhdHNbaV0ub2Zmc2V0KTsKIAotCWJhc2UgPSAodTggKikmYWRhcHRlci0+cnFkX3N0YXJ0LT5zdGF0czsKKwliYXNlID0gKHU4ICopJmFkYXB0ZXItPnJxZF9zdGFydFtqXS5zdGF0czsKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2bXhuZXQzX3JxX2Rldl9zdGF0cyk7IGkrKykKIAkJKmJ1ZisrID0gKih1NjQgKikoYmFzZSArIHZteG5ldDNfcnFfZGV2X3N0YXRzW2ldLm9mZnNldCk7CiAKLQliYXNlID0gKHU4ICopJmFkYXB0ZXItPnJ4X3F1ZXVlLnN0YXRzOworCWJhc2UgPSAodTggKikmYWRhcHRlci0+cnhfcXVldWVbal0uc3RhdHM7CiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodm14bmV0M19ycV9kcml2ZXJfc3RhdHMpOyBpKyspCiAJCSpidWYrKyA9ICoodTY0ICopKGJhc2UgKyB2bXhuZXQzX3JxX2RyaXZlcl9zdGF0c1tpXS5vZmZzZXQpOwogCkBAIC0zMzksNiArMzM5LDcgQEAKIHsKIAlzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAl1MzIgKmJ1ZiA9IHA7CisJaW50IGkgPSAwOwogCiAJbWVtc2V0KHAsIDAsIHZteG5ldDNfZ2V0X3JlZ3NfbGVuKG5ldGRldikpOwogCkBAIC0zNDcsMjggKzM0OCwyOSBAQAogCS8qIFVwZGF0ZSB2bXhuZXQzX2dldF9yZWdzX2xlbiBpZiB3ZSB3YW50IHRvIGR1bXAgbW9yZSByZWdpc3RlcnMgKi8KIAogCS8qIG1ha2UgZWFjaCByaW5nIHVzZSBtdWx0aXBsZSBvZiAxNiBieXRlcyAqLwotCWJ1ZlswXSA9IGFkYXB0ZXItPnR4X3F1ZXVlLnR4X3JpbmcubmV4dDJmaWxsOwotCWJ1ZlsxXSA9IGFkYXB0ZXItPnR4X3F1ZXVlLnR4X3JpbmcubmV4dDJjb21wOwotCWJ1ZlsyXSA9IGFkYXB0ZXItPnR4X3F1ZXVlLnR4X3JpbmcuZ2VuOworLyogVE9ETyBjaGFuZ2UgdGhpcyBmb3IgbXVsdGlwbGUgcXVldWVzICovCisJYnVmWzBdID0gYWRhcHRlci0+dHhfcXVldWVbaV0udHhfcmluZy5uZXh0MmZpbGw7CisJYnVmWzFdID0gYWRhcHRlci0+dHhfcXVldWVbaV0udHhfcmluZy5uZXh0MmNvbXA7CisJYnVmWzJdID0gYWRhcHRlci0+dHhfcXVldWVbaV0udHhfcmluZy5nZW47CiAJYnVmWzNdID0gMDsKIAotCWJ1Zls0XSA9IGFkYXB0ZXItPnR4X3F1ZXVlLmNvbXBfcmluZy5uZXh0MnByb2M7Ci0JYnVmWzVdID0gYWRhcHRlci0+dHhfcXVldWUuY29tcF9yaW5nLmdlbjsKLQlidWZbNl0gPSBhZGFwdGVyLT50eF9xdWV1ZS5zdG9wcGVkOworCWJ1Zls0XSA9IGFkYXB0ZXItPnR4X3F1ZXVlW2ldLmNvbXBfcmluZy5uZXh0MnByb2M7CisJYnVmWzVdID0gYWRhcHRlci0+dHhfcXVldWVbaV0uY29tcF9yaW5nLmdlbjsKKwlidWZbNl0gPSBhZGFwdGVyLT50eF9xdWV1ZVtpXS5zdG9wcGVkOwogCWJ1Zls3XSA9IDA7CiAKLQlidWZbOF0gPSBhZGFwdGVyLT5yeF9xdWV1ZS5yeF9yaW5nWzBdLm5leHQyZmlsbDsKLQlidWZbOV0gPSBhZGFwdGVyLT5yeF9xdWV1ZS5yeF9yaW5nWzBdLm5leHQyY29tcDsKLQlidWZbMTBdID0gYWRhcHRlci0+cnhfcXVldWUucnhfcmluZ1swXS5nZW47CisJYnVmWzhdID0gYWRhcHRlci0+cnhfcXVldWVbaV0ucnhfcmluZ1swXS5uZXh0MmZpbGw7CisJYnVmWzldID0gYWRhcHRlci0+cnhfcXVldWVbaV0ucnhfcmluZ1swXS5uZXh0MmNvbXA7CisJYnVmWzEwXSA9IGFkYXB0ZXItPnJ4X3F1ZXVlW2ldLnJ4X3JpbmdbMF0uZ2VuOwogCWJ1ZlsxMV0gPSAwOwogCi0JYnVmWzEyXSA9IGFkYXB0ZXItPnJ4X3F1ZXVlLnJ4X3JpbmdbMV0ubmV4dDJmaWxsOwotCWJ1ZlsxM10gPSBhZGFwdGVyLT5yeF9xdWV1ZS5yeF9yaW5nWzFdLm5leHQyY29tcDsKLQlidWZbMTRdID0gYWRhcHRlci0+cnhfcXVldWUucnhfcmluZ1sxXS5nZW47CisJYnVmWzEyXSA9IGFkYXB0ZXItPnJ4X3F1ZXVlW2ldLnJ4X3JpbmdbMV0ubmV4dDJmaWxsOworCWJ1ZlsxM10gPSBhZGFwdGVyLT5yeF9xdWV1ZVtpXS5yeF9yaW5nWzFdLm5leHQyY29tcDsKKwlidWZbMTRdID0gYWRhcHRlci0+cnhfcXVldWVbaV0ucnhfcmluZ1sxXS5nZW47CiAJYnVmWzE1XSA9IDA7CiAKLQlidWZbMTZdID0gYWRhcHRlci0+cnhfcXVldWUuY29tcF9yaW5nLm5leHQycHJvYzsKLQlidWZbMTddID0gYWRhcHRlci0+cnhfcXVldWUuY29tcF9yaW5nLmdlbjsKKwlidWZbMTZdID0gYWRhcHRlci0+cnhfcXVldWVbaV0uY29tcF9yaW5nLm5leHQycHJvYzsKKwlidWZbMTddID0gYWRhcHRlci0+cnhfcXVldWVbaV0uY29tcF9yaW5nLmdlbjsKIAlidWZbMThdID0gMDsKIAlidWZbMTldID0gMDsKIH0KQEAgLTQzNSw4ICs0MzcsMTAgQEAKIAlwYXJhbS0+cnhfbWluaV9tYXhfcGVuZGluZyA9IDA7CiAJcGFyYW0tPnJ4X2p1bWJvX21heF9wZW5kaW5nID0gMDsKIAotCXBhcmFtLT5yeF9wZW5kaW5nID0gYWRhcHRlci0+cnhfcXVldWUucnhfcmluZ1swXS5zaXplOwotCXBhcmFtLT50eF9wZW5kaW5nID0gYWRhcHRlci0+dHhfcXVldWUudHhfcmluZy5zaXplOworCXBhcmFtLT5yeF9wZW5kaW5nID0gYWRhcHRlci0+cnhfcXVldWVbMF0ucnhfcmluZ1swXS5zaXplICoKKwkJCSAgICBhZGFwdGVyLT5udW1fcnhfcXVldWVzOworCXBhcmFtLT50eF9wZW5kaW5nID0gYWRhcHRlci0+dHhfcXVldWVbMF0udHhfcmluZy5zaXplICoKKwkJCSAgICBhZGFwdGVyLT5udW1fdHhfcXVldWVzOwogCXBhcmFtLT5yeF9taW5pX3BlbmRpbmcgPSAwOwogCXBhcmFtLT5yeF9qdW1ib19wZW5kaW5nID0gMDsKIH0KQEAgLTQ4MCw4ICs0ODQsOCBAQAogCQkJCQkJCSAgIHN6KSAhPSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChuZXdfdHhfcmluZ19zaXplID09IGFkYXB0ZXItPnR4X3F1ZXVlLnR4X3Jpbmcuc2l6ZSAmJgotCQkJbmV3X3J4X3Jpbmdfc2l6ZSA9PSBhZGFwdGVyLT5yeF9xdWV1ZS5yeF9yaW5nWzBdLnNpemUpIHsKKwlpZiAobmV3X3R4X3Jpbmdfc2l6ZSA9PSBhZGFwdGVyLT50eF9xdWV1ZVswXS50eF9yaW5nLnNpemUgJiYKKwkgICAgbmV3X3J4X3Jpbmdfc2l6ZSA9PSBhZGFwdGVyLT5yeF9xdWV1ZVswXS5yeF9yaW5nWzBdLnNpemUpIHsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC00OTgsMTEgKzUwMiwxMiBAQAogCiAJCS8qIHJlY3JlYXRlIHRoZSByeCBxdWV1ZSBhbmQgdGhlIHR4IHF1ZXVlIGJhc2VkIG9uIHRoZQogCQkgKiBuZXcgc2l6ZXMgKi8KLQkJdm14bmV0M190cV9kZXN0cm95KCZhZGFwdGVyLT50eF9xdWV1ZSwgYWRhcHRlcik7Ci0JCXZteG5ldDNfcnFfZGVzdHJveSgmYWRhcHRlci0+cnhfcXVldWUsIGFkYXB0ZXIpOworCQl2bXhuZXQzX3RxX2Rlc3Ryb3lfYWxsKGFkYXB0ZXIpOworCQl2bXhuZXQzX3JxX2Rlc3Ryb3lfYWxsKGFkYXB0ZXIpOwogCiAJCWVyciA9IHZteG5ldDNfY3JlYXRlX3F1ZXVlcyhhZGFwdGVyLCBuZXdfdHhfcmluZ19zaXplLAogCQkJbmV3X3J4X3Jpbmdfc2l6ZSwgVk1YTkVUM19ERUZfUlhfUklOR19TSVpFKTsKKwogCQlpZiAoZXJyKSB7CiAJCQkvKiBmYWlsZWQsIG1vc3QgbGlrZWx5IGJlY2F1c2Ugb2YgT09NLCB0cnkgZGVmYXVsdAogCQkJICogc2l6ZSAqLwpAQCAtNTM1LDYgKzU0MCw2NiBAQAogfQogCiAKK3N0YXRpYyBpbnQKK3ZteG5ldDNfZ2V0X3J4bmZjKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBldGh0b29sX3J4bmZjICppbmZvLAorCQkgIHZvaWQgKnJ1bGVzKQoreworCXN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN3aXRjaCAoaW5mby0+Y21kKSB7CisJY2FzZSBFVEhUT09MX0dSWFJJTkdTOgorCQlpbmZvLT5kYXRhID0gYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtRU9QTk9UU1VQUDsKK30KKworI2lmZGVmIFZNWE5FVDNfUlNTCitzdGF0aWMgaW50Cit2bXhuZXQzX2dldF9yc3NfaW5kaXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJICAgICAgc3RydWN0IGV0aHRvb2xfcnhmaF9pbmRpciAqcCkKK3sKKwlzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgVVBUMV9SU1NDb25mICpyc3NDb25mID0gYWRhcHRlci0+cnNzX2NvbmY7CisJdW5zaWduZWQgaW50IG4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHAtPnNpemUsIHJzc0NvbmYtPmluZFRhYmxlU2l6ZSk7CisKKwlwLT5zaXplID0gcnNzQ29uZi0+aW5kVGFibGVTaXplOworCXdoaWxlIChuLS0pCisJCXAtPnJpbmdfaW5kZXhbbl0gPSByc3NDb25mLT5pbmRUYWJsZVtuXTsKKwlyZXR1cm4gMDsKKworfQorCitzdGF0aWMgaW50Cit2bXhuZXQzX3NldF9yc3NfaW5kaXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJICAgICAgY29uc3Qgc3RydWN0IGV0aHRvb2xfcnhmaF9pbmRpciAqcCkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwlzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgVVBUMV9SU1NDb25mICpyc3NDb25mID0gYWRhcHRlci0+cnNzX2NvbmY7CisKKwlpZiAocC0+c2l6ZSAhPSByc3NDb25mLT5pbmRUYWJsZVNpemUpCisJCXJldHVybiAtRUlOVkFMOworCWZvciAoaSA9IDA7IGkgPCByc3NDb25mLT5pbmRUYWJsZVNpemU7IGkrKykgeworCQkvKgorCQkgKiBSZXR1cm4gd2l0aCBlcnJvciBjb2RlIGlmIGFueSBvZiB0aGUgcXVldWUgaW5kaWNlcworCQkgKiBpcyBvdXQgb2YgcmFuZ2UKKwkJICovCisJCWlmIChwLT5yaW5nX2luZGV4W2ldIDwgMCB8fAorCQkgICAgcC0+cmluZ19pbmRleFtpXSA+PSBhZGFwdGVyLT5udW1fcnhfcXVldWVzKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZm9yIChpID0gMDsgaSA8IHJzc0NvbmYtPmluZFRhYmxlU2l6ZTsgaSsrKQorCQlyc3NDb25mLT5pbmRUYWJsZVtpXSA9IHAtPnJpbmdfaW5kZXhbaV07CisKKwlWTVhORVQzX1dSSVRFX0JBUjFfUkVHKGFkYXB0ZXIsIFZNWE5FVDNfUkVHX0NNRCwKKwkJCSAgICAgICBWTVhORVQzX0NNRF9VUERBVEVfUlNTSURUKTsKKworCXJldHVybiAwOworCit9CisjZW5kaWYKKwogc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyB2bXhuZXQzX2V0aHRvb2xfb3BzID0gewogCS5nZXRfc2V0dGluZ3MgICAgICA9IHZteG5ldDNfZ2V0X3NldHRpbmdzLAogCS5nZXRfZHJ2aW5mbyAgICAgICA9IHZteG5ldDNfZ2V0X2RydmluZm8sCkBAIC01NTgsNiArNjIzLDExIEBACiAJLmdldF9ldGh0b29sX3N0YXRzID0gdm14bmV0M19nZXRfZXRodG9vbF9zdGF0cywKIAkuZ2V0X3JpbmdwYXJhbSAgICAgPSB2bXhuZXQzX2dldF9yaW5ncGFyYW0sCiAJLnNldF9yaW5ncGFyYW0gICAgID0gdm14bmV0M19zZXRfcmluZ3BhcmFtLAorCS5nZXRfcnhuZmMgICAgICAgICA9IHZteG5ldDNfZ2V0X3J4bmZjLAorI2lmZGVmIFZNWE5FVDNfUlNTCisJLmdldF9yeGZoX2luZGlyICAgID0gdm14bmV0M19nZXRfcnNzX2luZGlyLAorCS5zZXRfcnhmaF9pbmRpciAgICA9IHZteG5ldDNfc2V0X3Jzc19pbmRpciwKKyNlbmRpZgogfTsKIAogdm9pZCB2bXhuZXQzX3NldF9ldGh0b29sX29wcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdm14bmV0My92bXhuZXQzX2ludC5oIGIvZHJpdmVycy9uZXQvdm14bmV0My92bXhuZXQzX2ludC5oCmluZGV4IGVkZjIyODguLjdmYWRlZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3ZteG5ldDMvdm14bmV0M19pbnQuaAorKysgYi9kcml2ZXJzL25ldC92bXhuZXQzL3ZteG5ldDNfaW50LmgKQEAgLTY4LDExICs2OCwxNSBAQAogLyoKICAqIFZlcnNpb24gbnVtYmVycwogICovCi0jZGVmaW5lIFZNWE5FVDNfRFJJVkVSX1ZFUlNJT05fU1RSSU5HICAgIjEuMC4xNC4wLWsiCisjZGVmaW5lIFZNWE5FVDNfRFJJVkVSX1ZFUlNJT05fU1RSSU5HICAgIjEuMC4xNi4wLWsiCiAKIC8qIGEgMzItYml0IGludCwgZWFjaCBieXRlIGVuY29kZSBhIHZlcmlvbiBudW1iZXIgaW4gVk1YTkVUM19EUklWRVJfVkVSU0lPTiAqLwotI2RlZmluZSBWTVhORVQzX0RSSVZFUl9WRVJTSU9OX05VTSAgICAgIDB4MDEwMDBFMDAKKyNkZWZpbmUgVk1YTkVUM19EUklWRVJfVkVSU0lPTl9OVU0gICAgICAweDAxMDAxMDAwCiAKKyNpZiBkZWZpbmVkKENPTkZJR19QQ0lfTVNJKQorCS8qIFJTUyBvbmx5IG1ha2VzIHNlbnNlIGlmIE1TSS1YIGlzIHN1cHBvcnRlZC4gKi8KKwkjZGVmaW5lIFZNWE5FVDNfUlNTCisjZW5kaWYKIAogLyoKICAqIENhcGFiaWxpdGllcwpAQCAtMjE4LDE2ICsyMjIsMTkgQEAKIH07CiAKIHN0cnVjdCB2bXhuZXQzX3R4X3F1ZXVlIHsKKwljaGFyCQkJbmFtZVtJRk5BTVNJWis4XTsgLyogVG8gaWRlbnRpZnkgaW50ZXJydXB0ICovCisJc3RydWN0IHZteG5ldDNfYWRhcHRlcgkJKmFkYXB0ZXI7CiAJc3BpbmxvY2tfdCAgICAgICAgICAgICAgICAgICAgICB0eF9sb2NrOwogCXN0cnVjdCB2bXhuZXQzX2NtZF9yaW5nICAgICAgICAgdHhfcmluZzsKLQlzdHJ1Y3Qgdm14bmV0M190eF9idWZfaW5mbyAgICAgKmJ1Zl9pbmZvOworCXN0cnVjdCB2bXhuZXQzX3R4X2J1Zl9pbmZvICAgICAgKmJ1Zl9pbmZvOwogCXN0cnVjdCB2bXhuZXQzX3R4X2RhdGFfcmluZyAgICAgZGF0YV9yaW5nOwogCXN0cnVjdCB2bXhuZXQzX2NvbXBfcmluZyAgICAgICAgY29tcF9yaW5nOwotCXN0cnVjdCBWbXhuZXQzX1R4UXVldWVDdHJsICAgICAgICAgICAgKnNoYXJlZDsKKwlzdHJ1Y3QgVm14bmV0M19UeFF1ZXVlQ3RybCAgICAgICpzaGFyZWQ7CiAJc3RydWN0IHZteG5ldDNfdHFfZHJpdmVyX3N0YXRzICBzdGF0czsKIAlib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3BwZWQ7CiAJaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1fc3RvcDsgIC8qICMgb2YgdGltZXMgdGhlIHF1ZXVlIGlzCiAJCQkJCQkgICAgKiBzdG9wcGVkICovCisJaW50CQkJCXFpZDsKIH0gX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oU01QX0NBQ0hFX0JZVEVTKSkpOwogCiBlbnVtIHZteG5ldDNfcnhfYnVmX3R5cGUgewpAQCAtMjU5LDYgKzI2Niw5IEBACiB9OwogCiBzdHJ1Y3Qgdm14bmV0M19yeF9xdWV1ZSB7CisJY2hhcgkJCW5hbWVbSUZOQU1TSVogKyA4XTsgLyogVG8gaWRlbnRpZnkgaW50ZXJydXB0ICovCisJc3RydWN0IHZteG5ldDNfYWRhcHRlcgkgICphZGFwdGVyOworCXN0cnVjdCBuYXBpX3N0cnVjdCAgICAgICAgbmFwaTsKIAlzdHJ1Y3Qgdm14bmV0M19jbWRfcmluZyAgIHJ4X3JpbmdbMl07CiAJc3RydWN0IHZteG5ldDNfY29tcF9yaW5nICBjb21wX3Jpbmc7CiAJc3RydWN0IHZteG5ldDNfcnhfY3R4ICAgICByeF9jdHg7CkBAIC0yNzEsNyArMjgxLDE2IEBACiAJc3RydWN0IHZteG5ldDNfcnFfZHJpdmVyX3N0YXRzICBzdGF0czsKIH0gX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oU01QX0NBQ0hFX0JZVEVTKSkpOwogCi0jZGVmaW5lIFZNWE5FVDNfTElOVVhfTUFYX01TSVhfVkVDVCAgICAgMQorI2RlZmluZSBWTVhORVQzX0RFVklDRV9NQVhfVFhfUVVFVUVTIDgKKyNkZWZpbmUgVk1YTkVUM19ERVZJQ0VfTUFYX1JYX1FVRVVFUyA4ICAgLyogS2VlcCB0aGlzIHZhbHVlIGFzIGEgcG93ZXIgb2YgMiAqLworCisvKiBTaG91bGQgYmUgbGVzcyB0aGFuIFVQVDFfUlNTX01BWF9JTkRfVEFCTEVfU0laRSAqLworI2RlZmluZSBWTVhORVQzX1JTU19JTkRfVEFCTEVfU0laRSAoVk1YTkVUM19ERVZJQ0VfTUFYX1JYX1FVRVVFUyAqIDQpCisKKyNkZWZpbmUgVk1YTkVUM19MSU5VWF9NQVhfTVNJWF9WRUNUICAgICAoVk1YTkVUM19ERVZJQ0VfTUFYX1RYX1FVRVVFUyArIFwKKwkJCQkJIFZNWE5FVDNfREVWSUNFX01BWF9SWF9RVUVVRVMgKyAxKQorI2RlZmluZSBWTVhORVQzX0xJTlVYX01JTl9NU0lYX1ZFQ1QgICAgIDMgICAgLyogMSBmb3IgZWFjaCA6IHR4LCByeCBhbmQgZXZlbnQgKi8KKwogCiBzdHJ1Y3Qgdm14bmV0M19pbnRyIHsKIAllbnVtIHZteG5ldDNfaW50cl9tYXNrX21vZGUgIG1hc2tfbW9kZTsKQEAgLTI3OSwyNyArMjk4LDMyIEBACiAJdTggIG51bV9pbnRyczsJCQkvKiAjIG9mIGludHIgdmVjdG9ycyAqLwogCXU4ICBldmVudF9pbnRyX2lkeDsJCS8qIGlkeCBvZiB0aGUgaW50ciB2ZWN0b3IgZm9yIGV2ZW50ICovCiAJdTggIG1vZF9sZXZlbHNbVk1YTkVUM19MSU5VWF9NQVhfTVNJWF9WRUNUXTsgLyogbW9kZXJhdGlvbiBsZXZlbCAqLworCWNoYXIJZXZlbnRfbXNpX3ZlY3Rvcl9uYW1lW0lGTkFNU0laKzExXTsKICNpZmRlZiBDT05GSUdfUENJX01TSQogCXN0cnVjdCBtc2l4X2VudHJ5IG1zaXhfZW50cmllc1tWTVhORVQzX0xJTlVYX01BWF9NU0lYX1ZFQ1RdOwogI2VuZGlmCiB9OwogCisvKiBJbnRlcnJ1cHQgc2hhcmluZyBzY2hlbWVzLCBzaGFyZV9pbnRyICovCisjZGVmaW5lIFZNWE5FVDNfSU5UUl9CVUREWVNIQVJFIDAgICAgLyogQ29ycmVzcG9uZGluZyB0eCxyeCBxdWV1ZXMgc2hhcmUgaXJxICovCisjZGVmaW5lIFZNWE5FVDNfSU5UUl9UWFNIQVJFIDEJICAgICAvKiBBbGwgdHggcXVldWVzIHNoYXJlIG9uZSBpcnEgKi8KKyNkZWZpbmUgVk1YTkVUM19JTlRSX0RPTlRTSEFSRSAyICAgICAvKiBlYWNoIHF1ZXVlIGhhcyBpdHMgb3duIGlycSAqLworCisKICNkZWZpbmUgVk1YTkVUM19TVEFURV9CSVRfUkVTRVRUSU5HICAgMAogI2RlZmluZSBWTVhORVQzX1NUQVRFX0JJVF9RVUlFU0NFRCAgICAxCiBzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyIHsKLQlzdHJ1Y3Qgdm14bmV0M190eF9xdWV1ZSAgICAgICAgIHR4X3F1ZXVlOwotCXN0cnVjdCB2bXhuZXQzX3J4X3F1ZXVlICAgICAgICAgcnhfcXVldWU7Ci0Jc3RydWN0IG5hcGlfc3RydWN0ICAgICAgICAgICAgICBuYXBpOwotCXN0cnVjdCB2bGFuX2dyb3VwICAgICAgICAgICAgICAqdmxhbl9ncnA7Ci0KLQlzdHJ1Y3Qgdm14bmV0M19pbnRyICAgICAgICAgICAgIGludHI7Ci0KLQlzdHJ1Y3QgVm14bmV0M19Ecml2ZXJTaGFyZWQgICAgKnNoYXJlZDsKLQlzdHJ1Y3QgVm14bmV0M19QTUNvbmYgICAgICAgICAgKnBtX2NvbmY7Ci0Jc3RydWN0IFZteG5ldDNfVHhRdWV1ZURlc2MgICAgICp0cWRfc3RhcnQ7ICAgICAvKiBmaXJzdCB0eCBxdWV1ZSBkZXNjICovCi0Jc3RydWN0IFZteG5ldDNfUnhRdWV1ZURlc2MgICAgICpycWRfc3RhcnQ7ICAgICAvKiBmaXJzdCByeCBxdWV1ZSBkZXNjICovCi0Jc3RydWN0IG5ldF9kZXZpY2UgICAgICAgICAgICAgICpuZXRkZXY7Ci0Jc3RydWN0IHBjaV9kZXYgICAgICAgICAgICAgICAgICpwZGV2OworCXN0cnVjdCB2bXhuZXQzX3R4X3F1ZXVlCQl0eF9xdWV1ZVtWTVhORVQzX0RFVklDRV9NQVhfVFhfUVVFVUVTXTsKKwlzdHJ1Y3Qgdm14bmV0M19yeF9xdWV1ZQkJcnhfcXVldWVbVk1YTkVUM19ERVZJQ0VfTUFYX1JYX1FVRVVFU107CisJc3RydWN0IHZsYW5fZ3JvdXAJCSp2bGFuX2dycDsKKwlzdHJ1Y3Qgdm14bmV0M19pbnRyCQlpbnRyOworCXN0cnVjdCBWbXhuZXQzX0RyaXZlclNoYXJlZAkqc2hhcmVkOworCXN0cnVjdCBWbXhuZXQzX1BNQ29uZgkJKnBtX2NvbmY7CisJc3RydWN0IFZteG5ldDNfVHhRdWV1ZURlc2MJKnRxZF9zdGFydDsgICAgIC8qIGFsbCB0eCBxdWV1ZSBkZXNjICovCisJc3RydWN0IFZteG5ldDNfUnhRdWV1ZURlc2MJKnJxZF9zdGFydDsJLyogYWxsIHJ4IHF1ZXVlIGRlc2MgKi8KKwlzdHJ1Y3QgbmV0X2RldmljZQkJKm5ldGRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cwkJbmV0X3N0YXRzOworCXN0cnVjdCBwY2lfZGV2CQkJKnBkZXY7CiAKIAl1OAkJCV9faW9tZW0gKmh3X2FkZHIwOyAvKiBmb3IgQkFSIDAgKi8KIAl1OAkJCV9faW9tZW0gKmh3X2FkZHIxOyAvKiBmb3IgQkFSIDEgKi8KQEAgLTMwOCw2ICszMzIsMTIgQEAKIAlib29sCQkJCXJ4Y3N1bTsKIAlib29sCQkJCWxybzsKIAlib29sCQkJCWp1bWJvX2ZyYW1lOworI2lmZGVmIFZNWE5FVDNfUlNTCisJc3RydWN0IFVQVDFfUlNTQ29uZgkJKnJzc19jb25mOworCWJvb2wJCQkJcnNzOworI2VuZGlmCisJdTMyCQkJCW51bV9yeF9xdWV1ZXM7CisJdTMyCQkJCW51bV90eF9xdWV1ZXM7CiAKIAkvKiByeCBidWZmZXIgcmVsYXRlZCAqLwogCXVuc2lnbmVkCQkJc2tiX2J1Zl9zaXplOwpAQCAtMzI3LDYgKzM1Nyw3IEBACiAJdW5zaWduZWQgbG9uZyAgc3RhdGU7ICAgIC8qIFZNWE5FVDNfU1RBVEVfQklUX3h4eCAqLwogCiAJaW50IGRldl9udW1iZXI7CisJaW50IHNoYXJlX2ludHI7CiB9OwogCiAjZGVmaW5lIFZNWE5FVDNfV1JJVEVfQkFSMF9SRUcoYWRhcHRlciwgcmVnLCB2YWwpICBcCkBAIC0zNjYsMTIgKzM5NywxMCBAQAogdm14bmV0M19yZXNldF9kZXYoc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlcik7CiAKIHZvaWQKLXZteG5ldDNfdHFfZGVzdHJveShzdHJ1Y3Qgdm14bmV0M190eF9xdWV1ZSAqdHEsCi0JCSAgIHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIpOwordm14bmV0M190cV9kZXN0cm95X2FsbChzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyKTsKIAogdm9pZAotdm14bmV0M19ycV9kZXN0cm95KHN0cnVjdCB2bXhuZXQzX3J4X3F1ZXVlICpycSwKLQkJICAgc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlcik7Cit2bXhuZXQzX3JxX2Rlc3Ryb3lfYWxsKHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIpOwogCiBpbnQKIHZteG5ldDNfY3JlYXRlX3F1ZXVlcyhzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdnhnZS92eGdlLWNvbmZpZy5jIGIvZHJpdmVycy9uZXQvdnhnZS92eGdlLWNvbmZpZy5jCmluZGV4IDkwNmEzY2EzLi4wMWMwNWY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtY29uZmlnLmMKKysrIGIvZHJpdmVycy9uZXQvdnhnZS92eGdlLWNvbmZpZy5jCkBAIC0xOSwzNDMgKzE5LDk1IEBACiAKICNpbmNsdWRlICJ2eGdlLXRyYWZmaWMuaCIKICNpbmNsdWRlICJ2eGdlLWNvbmZpZy5oIgorI2luY2x1ZGUgInZ4Z2UtbWFpbi5oIgogCi1zdGF0aWMgZW51bSB2eGdlX2h3X3N0YXR1cwotX192eGdlX2h3X2ZpZm9fY3JlYXRlKAotCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cGF0aF9oYW5kbGUsCi0Jc3RydWN0IHZ4Z2VfaHdfZmlmb19hdHRyICphdHRyKTsKLQotc3RhdGljIGVudW0gdnhnZV9od19zdGF0dXMKLV9fdnhnZV9od19maWZvX2Fib3J0KAotCXN0cnVjdCBfX3Z4Z2VfaHdfZmlmbyAqZmlmb2gpOwotCi1zdGF0aWMgZW51bSB2eGdlX2h3X3N0YXR1cwotX192eGdlX2h3X2ZpZm9fcmVzZXQoCi0Jc3RydWN0IF9fdnhnZV9od19maWZvICpyaW5naCk7Ci0KLXN0YXRpYyBlbnVtIHZ4Z2VfaHdfc3RhdHVzCi1fX3Z4Z2VfaHdfZmlmb19kZWxldGUoCi0Jc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwYXRoX2hhbmRsZSk7Ci0KLXN0YXRpYyBzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbF9lbnRyeSAqCi1fX3Z4Z2VfaHdfYmxvY2twb29sX2Jsb2NrX2FsbG9jYXRlKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldiwKLQkJCXUzMiBzaXplKTsKLQotc3RhdGljIHZvaWQKLV9fdnhnZV9od19ibG9ja3Bvb2xfYmxvY2tfZnJlZShzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYsCi0JCQlzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbF9lbnRyeSAqZW50cnkpOwotCi1zdGF0aWMgdm9pZCB2eGdlX2h3X2Jsb2NrcG9vbF9ibG9ja19hZGQoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgsCi0JCQkJCXZvaWQgKmJsb2NrX2FkZHIsCi0JCQkJCXUzMiBsZW5ndGgsCi0JCQkJCXN0cnVjdCBwY2lfZGV2ICpkbWFfaCwKLQkJCQkJc3RydWN0IHBjaV9kZXYgKmFjY19oYW5kbGUpOwotCi1zdGF0aWMgZW51bSB2eGdlX2h3X3N0YXR1cwotX192eGdlX2h3X2Jsb2NrcG9vbF9jcmVhdGUoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2LAotCQkJc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2wgICpibG9ja3Bvb2wsCi0JCQl1MzIgcG9vbF9zaXplLAotCQkJdTMyIHBvb2xfbWF4KTsKLQotc3RhdGljIHZvaWQKLV9fdnhnZV9od19ibG9ja3Bvb2xfZGVzdHJveShzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbCAgKmJsb2NrcG9vbCk7Ci0KLXN0YXRpYyB2b2lkICoKLV9fdnhnZV9od19ibG9ja3Bvb2xfbWFsbG9jKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldiwKLQkJCXUzMiBzaXplLAotCQkJc3RydWN0IHZ4Z2VfaHdfbWVtcG9vbF9kbWEgKmRtYV9vYmplY3QpOwotCi1zdGF0aWMgdm9pZAotX192eGdlX2h3X2Jsb2NrcG9vbF9mcmVlKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldiwKLQkJCXZvaWQgKm1lbWJsb2NrLAotCQkJdTMyIHNpemUsCi0JCQlzdHJ1Y3QgdnhnZV9od19tZW1wb29sX2RtYSAqZG1hX29iamVjdCk7Ci0KLQotc3RhdGljIHN0cnVjdCBfX3Z4Z2VfaHdfY2hhbm5lbCoKLV9fdnhnZV9od19jaGFubmVsX2FsbG9jYXRlKHN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cGgsCi0JCQllbnVtIF9fdnhnZV9od19jaGFubmVsX3R5cGUgdHlwZSwgdTMyIGxlbmd0aCwKLQkJCXUzMiBwZXJfZHRyX3NwYWNlLCB2b2lkICp1c2VyZGF0YSk7Ci0KLXN0YXRpYyB2b2lkCi1fX3Z4Z2VfaHdfY2hhbm5lbF9mcmVlKAotCXN0cnVjdCBfX3Z4Z2VfaHdfY2hhbm5lbCAqY2hhbm5lbCk7Ci0KLXN0YXRpYyBlbnVtIHZ4Z2VfaHdfc3RhdHVzCi1fX3Z4Z2VfaHdfY2hhbm5lbF9pbml0aWFsaXplKAotCXN0cnVjdCBfX3Z4Z2VfaHdfY2hhbm5lbCAqY2hhbm5lbCk7Ci0KLXN0YXRpYyBlbnVtIHZ4Z2VfaHdfc3RhdHVzCi1fX3Z4Z2VfaHdfY2hhbm5lbF9yZXNldCgKLQlzdHJ1Y3QgX192eGdlX2h3X2NoYW5uZWwgKmNoYW5uZWwpOwotCi1zdGF0aWMgZW51bSB2eGdlX2h3X3N0YXR1cyBfX3Z4Z2VfaHdfcmluZ19kZWxldGUoc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwKTsKLQotc3RhdGljIGVudW0gdnhnZV9od19zdGF0dXMKLV9fdnhnZV9od19kZXZpY2VfZmlmb19jb25maWdfY2hlY2soc3RydWN0IHZ4Z2VfaHdfZmlmb19jb25maWcgKmZpZm9fY29uZmlnKTsKLQotc3RhdGljIGVudW0gdnhnZV9od19zdGF0dXMKLV9fdnhnZV9od19kZXZpY2VfY29uZmlnX2NoZWNrKHN0cnVjdCB2eGdlX2h3X2RldmljZV9jb25maWcgKm5ld19jb25maWcpOwotCi1zdGF0aWMgdm9pZAotX192eGdlX2h3X2RldmljZV9pZF9nZXQoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2KTsKLQotc3RhdGljIHZvaWQKLV9fdnhnZV9od19kZXZpY2VfaG9zdF9pbmZvX2dldChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYpOwotCi1zdGF0aWMgZW51bSB2eGdlX2h3X3N0YXR1cwotX192eGdlX2h3X3ZwYXRoX2NhcmRfaW5mb19nZXQoCi0JdTMyIHZwX2lkLAotCXN0cnVjdCB2eGdlX2h3X3ZwYXRoX3JlZyBfX2lvbWVtICp2cGF0aF9yZWcsCi0Jc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX2h3X2luZm8gKmh3X2luZm8pOwotCi1zdGF0aWMgZW51bSB2eGdlX2h3X3N0YXR1cwotX192eGdlX2h3X2RldmljZV9pbml0aWFsaXplKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldik7Ci0KLXN0YXRpYyB2b2lkCi1fX3Z4Z2VfaHdfZGV2aWNlX3BjaV9lX2luaXQoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2KTsKLQotc3RhdGljIGVudW0gdnhnZV9od19zdGF0dXMKLV9fdnhnZV9od19kZXZpY2VfcmVnX2FkZHJfZ2V0KHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldik7Ci0KLXN0YXRpYyBlbnVtIHZ4Z2VfaHdfc3RhdHVzCi1fX3Z4Z2VfaHdfZGV2aWNlX3JlZ2lzdGVyX3BvbGwoCi0Jdm9pZCBfX2lvbWVtCSpyZWcsCi0JdTY0IG1hc2ssIHUzMiBtYXhfbWlsbGlzKTsKLQotc3RhdGljIGlubGluZSBlbnVtIHZ4Z2VfaHdfc3RhdHVzCi1fX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTY0KHU2NCB2YWw2NCwgdm9pZCBfX2lvbWVtICphZGRyLAotCQkJICB1NjQgbWFzaywgdTMyIG1heF9taWxsaXMpCi17Ci0JX192eGdlX2h3X3Bpb19tZW1fd3JpdGUzMl9sb3dlcigodTMyKXZ4Z2VfYlZBTG4odmFsNjQsIDMyLCAzMiksIGFkZHIpOwotCXdtYigpOwotCi0JX192eGdlX2h3X3Bpb19tZW1fd3JpdGUzMl91cHBlcigodTMyKXZ4Z2VfYlZBTG4odmFsNjQsIDAsIDMyKSwgYWRkcik7Ci0Jd21iKCk7Ci0KLQlyZXR1cm4gIF9fdnhnZV9od19kZXZpY2VfcmVnaXN0ZXJfcG9sbChhZGRyLCBtYXNrLCBtYXhfbWlsbGlzKTsKKyNkZWZpbmUgVlhHRV9IV19WUEFUSF9TVEFUU19QSU9fUkVBRChvZmZzZXQpIHsJCQkJXAorCXN0YXR1cyA9IF9fdnhnZV9od192cGF0aF9zdGF0c19hY2Nlc3ModnBhdGgsCQkJXAorCQkJCQkgICAgICBWWEdFX0hXX1NUQVRTX09QX1JFQUQsCVwKKwkJCQkJICAgICAgb2Zmc2V0LAkJCVwKKwkJCQkJICAgICAgJnZhbDY0KTsJCQlcCisJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQkJCQkJXAorCQlyZXR1cm4gc3RhdHVzOwkJCQkJCVwKIH0KIAotc3RhdGljIHN0cnVjdCB2eGdlX2h3X21lbXBvb2wqCi1fX3Z4Z2VfaHdfbWVtcG9vbF9jcmVhdGUoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgsIHUzMiBtZW1ibG9ja19zaXplLAotCQkJIHUzMiBpdGVtX3NpemUsCXUzMiBwcml2YXRlX3NpemUsIHUzMiBpdGVtc19pbml0aWFsLAotCQkJIHUzMiBpdGVtc19tYXgsCXN0cnVjdCB2eGdlX2h3X21lbXBvb2xfY2JzICptcF9jYWxsYmFjaywKLQkJCSB2b2lkICp1c2VyZGF0YSk7Ci1zdGF0aWMgdm9pZCBfX3Z4Z2VfaHdfbWVtcG9vbF9kZXN0cm95KHN0cnVjdCB2eGdlX2h3X21lbXBvb2wgKm1lbXBvb2wpOwotCi1zdGF0aWMgZW51bSB2eGdlX2h3X3N0YXR1cwotX192eGdlX2h3X3ZwYXRoX3N0YXRzX2dldChzdHJ1Y3QgX192eGdlX2h3X3ZpcnR1YWxwYXRoICp2cGF0aCwKLQkJCSAgc3RydWN0IHZ4Z2VfaHdfdnBhdGhfc3RhdHNfaHdfaW5mbyAqaHdfc3RhdHMpOwotCi1zdGF0aWMgZW51bSB2eGdlX2h3X3N0YXR1cwotdnhnZV9od192cGF0aF9zdGF0c19lbmFibGUoc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwYXRoX2hhbmRsZSk7Ci0KLXN0YXRpYyBlbnVtIHZ4Z2VfaHdfc3RhdHVzCi1fX3Z4Z2VfaHdfbGVnYWN5X3N3YXBwZXJfc2V0KHN0cnVjdCB2eGdlX2h3X2xlZ2FjeV9yZWcgX19pb21lbSAqbGVnYWN5X3JlZyk7Ci0KLXN0YXRpYyB1NjQKLV9fdnhnZV9od192cGF0aF9wY2lfZnVuY19tb2RlX2dldCh1MzIgIHZwX2lkLAotCQkJCSAgc3RydWN0IHZ4Z2VfaHdfdnBhdGhfcmVnIF9faW9tZW0gKnZwYXRoX3JlZyk7Ci0KLXN0YXRpYyB1MzIKLV9fdnhnZV9od192cGF0aF9mdW5jX2lkX2dldCh1MzIgdnBfaWQsIHN0cnVjdCB2eGdlX2h3X3ZwbWdtdF9yZWcgX19pb21lbSAqdnBtZ210X3JlZyk7Ci0KLXN0YXRpYyBlbnVtIHZ4Z2VfaHdfc3RhdHVzCi1fX3Z4Z2VfaHdfdnBhdGhfYWRkcl9nZXQodTMyIHZwX2lkLCBzdHJ1Y3QgdnhnZV9od192cGF0aF9yZWcgX19pb21lbSAqdnBhdGhfcmVnLAotCQkJIHU4IChtYWNhZGRyKVtFVEhfQUxFTl0sIHU4IChtYWNhZGRyX21hc2spW0VUSF9BTEVOXSk7Ci0KLXN0YXRpYyBlbnVtIHZ4Z2VfaHdfc3RhdHVzCi1fX3Z4Z2VfaHdfdnBhdGhfcmVzZXRfY2hlY2soc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aCAqdnBhdGgpOwotCi0KLXN0YXRpYyBlbnVtIHZ4Z2VfaHdfc3RhdHVzCi1fX3Z4Z2VfaHdfdnBhdGhfc3dfcmVzZXQoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgsIHUzMiB2cF9pZCk7Ci0KLXN0YXRpYyBlbnVtIHZ4Z2VfaHdfc3RhdHVzCi1fX3Z4Z2VfaHdfdnBhdGhfZndfdmVyX2dldCh1MzIgdnBfaWQsIHN0cnVjdCB2eGdlX2h3X3ZwYXRoX3JlZyBfX2lvbWVtICp2cGF0aF9yZWcsCi0JCQkgICBzdHJ1Y3QgdnhnZV9od19kZXZpY2VfaHdfaW5mbyAqaHdfaW5mbyk7Ci0KLXN0YXRpYyBlbnVtIHZ4Z2VfaHdfc3RhdHVzCi1fX3Z4Z2VfaHdfdnBhdGhfbWFjX2NvbmZpZ3VyZShzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aCwgdTMyIHZwX2lkKTsKLQogc3RhdGljIHZvaWQKLV9fdnhnZV9od192cF90ZXJtaW5hdGUoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgsIHUzMiB2cF9pZCk7Ci0KLXN0YXRpYyBlbnVtIHZ4Z2VfaHdfc3RhdHVzCi1fX3Z4Z2VfaHdfdnBhdGhfc3RhdHNfYWNjZXNzKHN0cnVjdCBfX3Z4Z2VfaHdfdmlydHVhbHBhdGggKnZwYXRoLAotCQkJICAgICB1MzIgb3BlcmF0aW9uLCB1MzIgb2Zmc2V0LAl1NjQgKnN0YXQpOwotCi1zdGF0aWMgZW51bSB2eGdlX2h3X3N0YXR1cwotX192eGdlX2h3X3ZwYXRoX3htYWNfdHhfc3RhdHNfZ2V0KHN0cnVjdCBfX3Z4Z2VfaHdfdmlydHVhbHBhdGgJKnZwYXRoLAotCQkJCSAgc3RydWN0IHZ4Z2VfaHdfeG1hY192cGF0aF90eF9zdGF0cyAqdnBhdGhfdHhfc3RhdHMpOwotCi1zdGF0aWMgZW51bSB2eGdlX2h3X3N0YXR1cwotX192eGdlX2h3X3ZwYXRoX3htYWNfcnhfc3RhdHNfZ2V0KHN0cnVjdCBfX3Z4Z2VfaHdfdmlydHVhbHBhdGgJKnZwYXRoLAotCQkJCSAgc3RydWN0IHZ4Z2VfaHdfeG1hY192cGF0aF9yeF9zdGF0cyAqdnBhdGhfcnhfc3RhdHMpOwotCi0vKgotICogX192eGdlX2h3X2NoYW5uZWxfYWxsb2NhdGUgLSBBbGxvY2F0ZSBtZW1vcnkgZm9yIGNoYW5uZWwKLSAqIFRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIHJlcXVpcmVkIG1lbW9yeSBmb3IgdGhlIGNoYW5uZWwgYW5kIHZhcmlvdXMgYXJyYXlzCi0gKiBpbiB0aGUgY2hhbm5lbAotICovCi1zdHJ1Y3QgX192eGdlX2h3X2NoYW5uZWwqCi1fX3Z4Z2VfaHdfY2hhbm5lbF9hbGxvY2F0ZShzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnBoLAotCQkJICAgZW51bSBfX3Z4Z2VfaHdfY2hhbm5lbF90eXBlIHR5cGUsCi0JdTMyIGxlbmd0aCwgdTMyIHBlcl9kdHJfc3BhY2UsIHZvaWQgKnVzZXJkYXRhKQordnhnZV9od192cGF0aF9zZXRfemVyb19yeF9mcm1fbGVuKHN0cnVjdCB2eGdlX2h3X3ZwYXRoX3JlZyBfX2lvbWVtICp2cF9yZWcpCiB7Ci0Jc3RydWN0IF9fdnhnZV9od19jaGFubmVsICpjaGFubmVsOwotCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldjsKLQlpbnQgc2l6ZSA9IDA7Ci0JdTMyIHZwX2lkOworCXU2NCB2YWw2NDsKIAotCWhsZGV2ID0gdnBoLT52cGF0aC0+aGxkZXY7Ci0JdnBfaWQgPSB2cGgtPnZwYXRoLT52cF9pZDsKLQotCXN3aXRjaCAodHlwZSkgewotCWNhc2UgVlhHRV9IV19DSEFOTkVMX1RZUEVfRklGTzoKLQkJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgX192eGdlX2h3X2ZpZm8pOwotCQlicmVhazsKLQljYXNlIFZYR0VfSFdfQ0hBTk5FTF9UWVBFX1JJTkc6Ci0JCXNpemUgPSBzaXplb2Yoc3RydWN0IF9fdnhnZV9od19yaW5nKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCi0JY2hhbm5lbCA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGNoYW5uZWwgPT0gTlVMTCkKLQkJZ290byBleGl0MDsKLQlJTklUX0xJU1RfSEVBRCgmY2hhbm5lbC0+aXRlbSk7Ci0KLQljaGFubmVsLT5jb21tb25fcmVnID0gaGxkZXYtPmNvbW1vbl9yZWc7Ci0JY2hhbm5lbC0+Zmlyc3RfdnBfaWQgPSBobGRldi0+Zmlyc3RfdnBfaWQ7Ci0JY2hhbm5lbC0+dHlwZSA9IHR5cGU7Ci0JY2hhbm5lbC0+ZGV2aCA9IGhsZGV2OwotCWNoYW5uZWwtPnZwaCA9IHZwaDsKLQljaGFubmVsLT51c2VyZGF0YSA9IHVzZXJkYXRhOwotCWNoYW5uZWwtPnBlcl9kdHJfc3BhY2UgPSBwZXJfZHRyX3NwYWNlOwotCWNoYW5uZWwtPmxlbmd0aCA9IGxlbmd0aDsKLQljaGFubmVsLT52cF9pZCA9IHZwX2lkOwotCi0JY2hhbm5lbC0+d29ya19hcnIgPSBremFsbG9jKHNpemVvZih2b2lkICopKmxlbmd0aCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGNoYW5uZWwtPndvcmtfYXJyID09IE5VTEwpCi0JCWdvdG8gZXhpdDE7Ci0KLQljaGFubmVsLT5mcmVlX2FyciA9IGt6YWxsb2Moc2l6ZW9mKHZvaWQgKikqbGVuZ3RoLCBHRlBfS0VSTkVMKTsKLQlpZiAoY2hhbm5lbC0+ZnJlZV9hcnIgPT0gTlVMTCkKLQkJZ290byBleGl0MTsKLQljaGFubmVsLT5mcmVlX3B0ciA9IGxlbmd0aDsKLQotCWNoYW5uZWwtPnJlc2VydmVfYXJyID0ga3phbGxvYyhzaXplb2Yodm9pZCAqKSpsZW5ndGgsIEdGUF9LRVJORUwpOwotCWlmIChjaGFubmVsLT5yZXNlcnZlX2FyciA9PSBOVUxMKQotCQlnb3RvIGV4aXQxOwotCWNoYW5uZWwtPnJlc2VydmVfcHRyID0gbGVuZ3RoOwotCWNoYW5uZWwtPnJlc2VydmVfdG9wID0gMDsKLQotCWNoYW5uZWwtPm9yaWdfYXJyID0ga3phbGxvYyhzaXplb2Yodm9pZCAqKSpsZW5ndGgsIEdGUF9LRVJORUwpOwotCWlmIChjaGFubmVsLT5vcmlnX2FyciA9PSBOVUxMKQotCQlnb3RvIGV4aXQxOwotCi0JcmV0dXJuIGNoYW5uZWw7Ci1leGl0MToKLQlfX3Z4Z2VfaHdfY2hhbm5lbF9mcmVlKGNoYW5uZWwpOwotCi1leGl0MDoKLQlyZXR1cm4gTlVMTDsKKwl2YWw2NCA9IHJlYWRxKCZ2cF9yZWctPnJ4bWFjX3ZjZmcwKTsKKwl2YWw2NCAmPSB+VlhHRV9IV19SWE1BQ19WQ0ZHMF9SVFNfTUFYX0ZSTV9MRU4oMHgzZmZmKTsKKwl3cml0ZXEodmFsNjQsICZ2cF9yZWctPnJ4bWFjX3ZjZmcwKTsKKwl2YWw2NCA9IHJlYWRxKCZ2cF9yZWctPnJ4bWFjX3ZjZmcwKTsKIH0KIAogLyoKLSAqIF9fdnhnZV9od19jaGFubmVsX2ZyZWUgLSBGcmVlIG1lbW9yeSBhbGxvY2F0ZWQgZm9yIGNoYW5uZWwKLSAqIFRoaXMgZnVuY3Rpb24gZGVhbGxvY2F0ZXMgbWVtb3J5IGZyb20gdGhlIGNoYW5uZWwgYW5kIHZhcmlvdXMgYXJyYXlzCi0gKiBpbiB0aGUgY2hhbm5lbAorICogdnhnZV9od192cGF0aF93YWl0X3JlY2VpdmVfaWRsZSAtIFdhaXQgZm9yIFJ4IHRvIGJlY29tZSBpZGxlCiAgKi8KLXZvaWQgX192eGdlX2h3X2NoYW5uZWxfZnJlZShzdHJ1Y3QgX192eGdlX2h3X2NoYW5uZWwgKmNoYW5uZWwpCitpbnQgdnhnZV9od192cGF0aF93YWl0X3JlY2VpdmVfaWRsZShzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYsIHUzMiB2cF9pZCkKIHsKLQlrZnJlZShjaGFubmVsLT53b3JrX2Fycik7Ci0Ja2ZyZWUoY2hhbm5lbC0+ZnJlZV9hcnIpOwotCWtmcmVlKGNoYW5uZWwtPnJlc2VydmVfYXJyKTsKLQlrZnJlZShjaGFubmVsLT5vcmlnX2Fycik7Ci0Ja2ZyZWUoY2hhbm5lbCk7Ci19Ci0KLS8qCi0gKiBfX3Z4Z2VfaHdfY2hhbm5lbF9pbml0aWFsaXplIC0gSW5pdGlhbGl6ZSBhIGNoYW5uZWwKLSAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgYSBjaGFubmVsIGJ5IHByb3Blcmx5IHNldHRpbmcgdGhlCi0gKiB2YXJpb3VzIHJlZmVyZW5jZXMKLSAqLwotZW51bSB2eGdlX2h3X3N0YXR1cwotX192eGdlX2h3X2NoYW5uZWxfaW5pdGlhbGl6ZShzdHJ1Y3QgX192eGdlX2h3X2NoYW5uZWwgKmNoYW5uZWwpCi17Ci0JdTMyIGk7CisJc3RydWN0IHZ4Z2VfaHdfdnBhdGhfcmVnIF9faW9tZW0gKnZwX3JlZzsKIAlzdHJ1Y3QgX192eGdlX2h3X3ZpcnR1YWxwYXRoICp2cGF0aDsKKwl1NjQgdmFsNjQsIHJ4ZF9jb3VudCwgcnhkX3NwYXQ7CisJaW50IGNvdW50ID0gMCwgdG90YWxfY291bnQgPSAwOwogCi0JdnBhdGggPSBjaGFubmVsLT52cGgtPnZwYXRoOworCXZwYXRoID0gJmhsZGV2LT52aXJ0dWFsX3BhdGhzW3ZwX2lkXTsKKwl2cF9yZWcgPSB2cGF0aC0+dnBfcmVnOwogCi0JaWYgKChjaGFubmVsLT5yZXNlcnZlX2FyciAhPSBOVUxMKSAmJiAoY2hhbm5lbC0+b3JpZ19hcnIgIT0gTlVMTCkpIHsKLQkJZm9yIChpID0gMDsgaSA8IGNoYW5uZWwtPmxlbmd0aDsgaSsrKQotCQkJY2hhbm5lbC0+b3JpZ19hcnJbaV0gPSBjaGFubmVsLT5yZXNlcnZlX2FycltpXTsKLQl9CisJdnhnZV9od192cGF0aF9zZXRfemVyb19yeF9mcm1fbGVuKHZwX3JlZyk7CiAKLQlzd2l0Y2ggKGNoYW5uZWwtPnR5cGUpIHsKLQljYXNlIFZYR0VfSFdfQ0hBTk5FTF9UWVBFX0ZJRk86Ci0JCXZwYXRoLT5maWZvaCA9IChzdHJ1Y3QgX192eGdlX2h3X2ZpZm8gKiljaGFubmVsOwotCQljaGFubmVsLT5zdGF0cyA9ICYoKHN0cnVjdCBfX3Z4Z2VfaHdfZmlmbyAqKQotCQkJCWNoYW5uZWwpLT5zdGF0cy0+Y29tbW9uX3N0YXRzOwotCQlicmVhazsKLQljYXNlIFZYR0VfSFdfQ0hBTk5FTF9UWVBFX1JJTkc6Ci0JCXZwYXRoLT5yaW5naCA9IChzdHJ1Y3QgX192eGdlX2h3X3JpbmcgKiljaGFubmVsOwotCQljaGFubmVsLT5zdGF0cyA9ICYoKHN0cnVjdCBfX3Z4Z2VfaHdfcmluZyAqKQotCQkJCWNoYW5uZWwpLT5zdGF0cy0+Y29tbW9uX3N0YXRzOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9CisJLyogQ2hlY2sgdGhhdCB0aGUgcmluZyBjb250cm9sbGVyIGZvciB0aGlzIHZwYXRoIGhhcyBlbm91Z2ggZnJlZSBSeERzCisJICogdG8gc2VuZCBmcmFtZXMgdG8gdGhlIGhvc3QuICBUaGlzIGlzIGRvbmUgYnkgcmVhZGluZyB0aGUKKwkgKiBQUkNfUlhEX0RPT1JCRUxMX1ZQbiByZWdpc3RlciBhbmQgY29tcGFyaW5nIHRoZSByZWFkIHZhbHVlIHRvIHRoZQorCSAqIFJYRF9TUEFUIHZhbHVlIGZvciB0aGUgdnBhdGguCisJICovCisJdmFsNjQgPSByZWFkcSgmdnBfcmVnLT5wcmNfY2ZnNik7CisJcnhkX3NwYXQgPSBWWEdFX0hXX1BSQ19DRkc2X0dFVF9SWERfU1BBVCh2YWw2NCkgKyAxOworCS8qIFVzZSBhIGZhY3RvciBvZiAyIHdoZW4gY29tcGFyaW5nIHJ4ZF9jb3VudCBhZ2FpbnN0IHJ4ZF9zcGF0IGZvciBzb21lCisJICogbGVnIHJvb20uCisJICovCisJcnhkX3NwYXQgKj0gMjsKIAotCXJldHVybiBWWEdFX0hXX09LOworCWRvIHsKKwkJbWRlbGF5KDEpOworCisJCXJ4ZF9jb3VudCA9IHJlYWRxKCZ2cF9yZWctPnByY19yeGRfZG9vcmJlbGwpOworCisJCS8qIENoZWNrIHRoYXQgdGhlIHJpbmcgY29udHJvbGxlciBmb3IgdGhpcyB2cGF0aCBkb2VzCisJCSAqIG5vdCBoYXZlIGFueSBmcmFtZSBpbiBpdHMgcGlwZWxpbmUuCisJCSAqLworCQl2YWw2NCA9IHJlYWRxKCZ2cF9yZWctPmZybV9pbl9wcm9ncmVzc19jbnQpOworCQlpZiAoKHJ4ZF9jb3VudCA8PSByeGRfc3BhdCkgfHwgKHZhbDY0ID4gMCkpCisJCQljb3VudCA9IDA7CisJCWVsc2UKKwkJCWNvdW50Kys7CisJCXRvdGFsX2NvdW50Kys7CisJfSB3aGlsZSAoKGNvdW50IDwgVlhHRV9IV19NSU5fU1VDQ0VTU0lWRV9JRExFX0NPVU5UKSAmJgorCQkJKHRvdGFsX2NvdW50IDwgVlhHRV9IV19NQVhfUE9MTElOR19DT1VOVCkpOworCisJaWYgKHRvdGFsX2NvdW50ID49IFZYR0VfSFdfTUFYX1BPTExJTkdfQ09VTlQpCisJCXByaW50ayhLRVJOX0FMRVJUICIlczogU3RpbGwgUmVjZWl2aW5nIHRyYWZmaWMuIEFib3J0IHdhaXRcbiIsCisJCQlfX2Z1bmNfXyk7CisKKwlyZXR1cm4gdG90YWxfY291bnQ7CiB9CiAKLS8qCi0gKiBfX3Z4Z2VfaHdfY2hhbm5lbF9yZXNldCAtIFJlc2V0cyBhIGNoYW5uZWwKLSAqIFRoaXMgZnVuY3Rpb24gcmVzZXRzIGEgY2hhbm5lbCBieSBwcm9wZXJseSBzZXR0aW5nIHRoZSB2YXJpb3VzIHJlZmVyZW5jZXMKKy8qIHZ4Z2VfaHdfZGV2aWNlX3dhaXRfcmVjZWl2ZV9pZGxlIC0gVGhpcyBmdW5jdGlvbiB3YWl0cyB1bnRpbCBhbGwgZnJhbWVzCisgKiBzdG9yZWQgaW4gdGhlIGZyYW1lIGJ1ZmZlciBmb3IgZWFjaCB2cGF0aCBhc3NpZ25lZCB0byB0aGUgZ2l2ZW4KKyAqIGZ1bmN0aW9uIChobGRldikgaGF2ZSBiZWVuIHNlbnQgdG8gdGhlIGhvc3QuCiAgKi8KLWVudW0gdnhnZV9od19zdGF0dXMKLV9fdnhnZV9od19jaGFubmVsX3Jlc2V0KHN0cnVjdCBfX3Z4Z2VfaHdfY2hhbm5lbCAqY2hhbm5lbCkKK3ZvaWQgdnhnZV9od19kZXZpY2Vfd2FpdF9yZWNlaXZlX2lkbGUoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2KQogewotCXUzMiBpOworCWludCBpLCB0b3RhbF9jb3VudCA9IDA7CiAKLQlmb3IgKGkgPSAwOyBpIDwgY2hhbm5lbC0+bGVuZ3RoOyBpKyspIHsKLQkJaWYgKGNoYW5uZWwtPnJlc2VydmVfYXJyICE9IE5VTEwpCi0JCQljaGFubmVsLT5yZXNlcnZlX2FycltpXSA9IGNoYW5uZWwtPm9yaWdfYXJyW2ldOwotCQlpZiAoY2hhbm5lbC0+ZnJlZV9hcnIgIT0gTlVMTCkKLQkJCWNoYW5uZWwtPmZyZWVfYXJyW2ldID0gTlVMTDsKLQkJaWYgKGNoYW5uZWwtPndvcmtfYXJyICE9IE5VTEwpCi0JCQljaGFubmVsLT53b3JrX2FycltpXSA9IE5VTEw7CisJZm9yIChpID0gMDsgaSA8IFZYR0VfSFdfTUFYX1ZJUlRVQUxfUEFUSFM7IGkrKykgeworCQlpZiAoIShobGRldi0+dnBhdGhzX2RlcGxveWVkICYgdnhnZV9tQklUKGkpKSkKKwkJCWNvbnRpbnVlOworCisJCXRvdGFsX2NvdW50ICs9IHZ4Z2VfaHdfdnBhdGhfd2FpdF9yZWNlaXZlX2lkbGUoaGxkZXYsIGkpOworCQlpZiAodG90YWxfY291bnQgPj0gVlhHRV9IV19NQVhfUE9MTElOR19DT1VOVCkKKwkJCWJyZWFrOwogCX0KLQljaGFubmVsLT5mcmVlX3B0ciA9IGNoYW5uZWwtPmxlbmd0aDsKLQljaGFubmVsLT5yZXNlcnZlX3B0ciA9IGNoYW5uZWwtPmxlbmd0aDsKLQljaGFubmVsLT5yZXNlcnZlX3RvcCA9IDA7Ci0JY2hhbm5lbC0+cG9zdF9pbmRleCA9IDA7Ci0JY2hhbm5lbC0+Y29tcGxfaW5kZXggPSAwOwotCi0JcmV0dXJuIFZYR0VfSFdfT0s7Ci19Ci0KLS8qCi0gKiBfX3Z4Z2VfaHdfZGV2aWNlX3BjaV9lX2luaXQKLSAqIEluaXRpYWxpemUgY2VydGFpbiBQQ0kvUENJLVggY29uZmlndXJhdGlvbiByZWdpc3RlcnMKLSAqIHdpdGggcmVjb21tZW5kZWQgdmFsdWVzLiBTYXZlIGNvbmZpZyBzcGFjZSBmb3IgZnV0dXJlIGh3IHJlc2V0cy4KLSAqLwotdm9pZAotX192eGdlX2h3X2RldmljZV9wY2lfZV9pbml0KHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldikKLXsKLQl1MTYgY21kID0gMDsKLQotCS8qIFNldCB0aGUgUEVyciBSZXBjb25zZSBiaXQgYW5kIFNFUlIgaW4gUENJIGNvbW1hbmQgcmVnaXN0ZXIuICovCi0JcGNpX3JlYWRfY29uZmlnX3dvcmQoaGxkZXYtPnBkZXYsIFBDSV9DT01NQU5ELCAmY21kKTsKLQljbWQgfD0gMHgxNDA7Ci0JcGNpX3dyaXRlX2NvbmZpZ193b3JkKGhsZGV2LT5wZGV2LCBQQ0lfQ09NTUFORCwgY21kKTsKLQotCXBjaV9zYXZlX3N0YXRlKGhsZGV2LT5wZGV2KTsKIH0KIAogLyoKQEAgLTM5MCw3ICsxNDIsMzYwIEBACiAJcmV0dXJuIHJldDsKIH0KIAotIC8qIF9fdnhnZV9od19kZXZpY2VfdnBhdGhfcmVzZXRfaW5fcHJvZ19jaGVjayAtIENoZWNrIGlmIHZwYXRoIHJlc2V0CitzdGF0aWMgaW5saW5lIGVudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od19waW9fbWVtX3dyaXRlNjQodTY0IHZhbDY0LCB2b2lkIF9faW9tZW0gKmFkZHIsCisJCQkgIHU2NCBtYXNrLCB1MzIgbWF4X21pbGxpcykKK3sKKwlfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTMyX2xvd2VyKCh1MzIpdnhnZV9iVkFMbih2YWw2NCwgMzIsIDMyKSwgYWRkcik7CisJd21iKCk7CisJX192eGdlX2h3X3Bpb19tZW1fd3JpdGUzMl91cHBlcigodTMyKXZ4Z2VfYlZBTG4odmFsNjQsIDAsIDMyKSwgYWRkcik7CisJd21iKCk7CisKKwlyZXR1cm4gX192eGdlX2h3X2RldmljZV9yZWdpc3Rlcl9wb2xsKGFkZHIsIG1hc2ssIG1heF9taWxsaXMpOworfQorCitzdGF0aWMgZW51bSB2eGdlX2h3X3N0YXR1cwordnhnZV9od192cGF0aF9md19hcGkoc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aCAqdnBhdGgsIHUzMiBhY3Rpb24sCisJCSAgICAgdTMyIGZ3X21lbW8sIHUzMiBvZmZzZXQsIHU2NCAqZGF0YTAsIHU2NCAqZGF0YTEsCisJCSAgICAgdTY0ICpzdGVlcl9jdHJsKQoreworCXN0cnVjdCB2eGdlX2h3X3ZwYXRoX3JlZyBfX2lvbWVtICp2cF9yZWc7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXM7CisJdTY0IHZhbDY0OworCXUzMiByZXRyeSA9IDAsIG1heF9yZXRyeSA9IDEwMDsKKworCXZwX3JlZyA9IHZwYXRoLT52cF9yZWc7CisKKwlpZiAodnBhdGgtPnZwX29wZW4pIHsKKwkJbWF4X3JldHJ5ID0gMzsKKwkJc3Bpbl9sb2NrKCZ2cGF0aC0+bG9jayk7CisJfQorCisJd3JpdGVxKCpkYXRhMCwgJnZwX3JlZy0+cnRzX2FjY2Vzc19zdGVlcl9kYXRhMCk7CisJd3JpdGVxKCpkYXRhMSwgJnZwX3JlZy0+cnRzX2FjY2Vzc19zdGVlcl9kYXRhMSk7CisJd21iKCk7CisKKwl2YWw2NCA9IFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0FDVElPTihhY3Rpb24pIHwKKwkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMKGZ3X21lbW8pIHwKKwkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfT0ZGU0VUKG9mZnNldCkgfAorCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9TVFJPQkUgfAorCQkqc3RlZXJfY3RybDsKKworCXN0YXR1cyA9IF9fdnhnZV9od19waW9fbWVtX3dyaXRlNjQodmFsNjQsCisJCQkJCSAgICZ2cF9yZWctPnJ0c19hY2Nlc3Nfc3RlZXJfY3RybCwKKwkJCQkJICAgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfU1RST0JFLAorCQkJCQkgICBWWEdFX0hXX0RFRl9ERVZJQ0VfUE9MTF9NSUxMSVMpOworCisJLyogVGhlIF9fdnhnZV9od19kZXZpY2VfcmVnaXN0ZXJfcG9sbCBjYW4gdWRlbGF5IGZvciBhIHNpZ25pZmljYW50CisJICogYW1vdW50IG9mIHRpbWUsIGJsb2NraW5nIG90aGVyIHByb2NjZXNzIGZyb20gdGhlIENQVS4gIElmIGl0IGRlbGF5cworCSAqIGZvciB+NXNlY3MsIGEgTk1JIGVycm9yIGNhbiBvY2N1ci4gIEEgd2F5IGFyb3VuZCB0aGlzIGlzIHRvIGdpdmUgdXAKKwkgKiB0aGUgcHJvY2Vzc29yIHZpYSBtc2xlZXAsIGJ1dCB0aGlzIGlzIG5vdCBhbGxvd2VkIGlzIHVuZGVyIGxvY2suCisJICogU28sIG9ubHkgYWxsb3cgaXQgdG8gc2xlZXAgZm9yIH40c2VjcyBpZiBvcGVuLiAgT3RoZXJ3aXNlLCBkZWxheSBmb3IKKwkgKiAxc2VjIGFuZCBzbGVlcCBmb3IgMTBtcyB1bnRpbCB0aGUgZmlybXdhcmUgb3BlcmF0aW9uIGhhcyBjb21wbGV0ZWQKKwkgKiBvciB0aW1lZC1vdXQuCisJICovCisJd2hpbGUgKChzdGF0dXMgIT0gVlhHRV9IV19PSykgJiYgcmV0cnkrKyA8IG1heF9yZXRyeSkgeworCQlpZiAoIXZwYXRoLT52cF9vcGVuKQorCQkJbXNsZWVwKDIwKTsKKwkJc3RhdHVzID0gX192eGdlX2h3X2RldmljZV9yZWdpc3Rlcl9wb2xsKAorCQkJCQkmdnBfcmVnLT5ydHNfYWNjZXNzX3N0ZWVyX2N0cmwsCisJCQkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX1NUUk9CRSwKKwkJCQkJVlhHRV9IV19ERUZfREVWSUNFX1BPTExfTUlMTElTKTsKKwl9CisKKwlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCisJCWdvdG8gb3V0OworCisJdmFsNjQgPSByZWFkcSgmdnBfcmVnLT5ydHNfYWNjZXNzX3N0ZWVyX2N0cmwpOworCWlmICh2YWw2NCAmIFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX1JNQUNKX1NUQVRVUykgeworCQkqZGF0YTAgPSByZWFkcSgmdnBfcmVnLT5ydHNfYWNjZXNzX3N0ZWVyX2RhdGEwKTsKKwkJKmRhdGExID0gcmVhZHEoJnZwX3JlZy0+cnRzX2FjY2Vzc19zdGVlcl9kYXRhMSk7CisJCSpzdGVlcl9jdHJsID0gdmFsNjQ7CisJfSBlbHNlCisJCXN0YXR1cyA9IFZYR0VfSFdfRkFJTDsKKworb3V0OgorCWlmICh2cGF0aC0+dnBfb3BlbikKKwkJc3Bpbl91bmxvY2soJnZwYXRoLT5sb2NrKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCit2eGdlX2h3X3VwZ3JhZGVfcmVhZF92ZXJzaW9uKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldiwgdTMyICptYWpvciwKKwkJCSAgICAgdTMyICptaW5vciwgdTMyICpidWlsZCkKK3sKKwl1NjQgZGF0YTAgPSAwLCBkYXRhMSA9IDAsIHN0ZWVyX2N0cmwgPSAwOworCXN0cnVjdCBfX3Z4Z2VfaHdfdmlydHVhbHBhdGggKnZwYXRoOworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzOworCisJdnBhdGggPSAmaGxkZXYtPnZpcnR1YWxfcGF0aHNbaGxkZXYtPmZpcnN0X3ZwX2lkXTsKKworCXN0YXR1cyA9IHZ4Z2VfaHdfdnBhdGhfZndfYXBpKHZwYXRoLAorCQkJCSAgICAgIFZYR0VfSFdfRldfVVBHUkFERV9BQ1RJT04sCisJCQkJICAgICAgVlhHRV9IV19GV19VUEdSQURFX01FTU8sCisJCQkJICAgICAgVlhHRV9IV19GV19VUEdSQURFX09GRlNFVF9SRUFELAorCQkJCSAgICAgICZkYXRhMCwgJmRhdGExLCAmc3RlZXJfY3RybCk7CisJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQlyZXR1cm4gc3RhdHVzOworCisJKm1ham9yID0gVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0dFVF9GV19WRVJfTUFKT1IoZGF0YTApOworCSptaW5vciA9IFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9HRVRfRldfVkVSX01JTk9SKGRhdGEwKTsKKwkqYnVpbGQgPSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfR0VUX0ZXX1ZFUl9CVUlMRChkYXRhMCk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfaHdfZmxhc2hfZncoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2KQoreworCXU2NCBkYXRhMCA9IDAsIGRhdGExID0gMCwgc3RlZXJfY3RybCA9IDA7CisJc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aCAqdnBhdGg7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXM7CisJdTMyIHJldDsKKworCXZwYXRoID0gJmhsZGV2LT52aXJ0dWFsX3BhdGhzW2hsZGV2LT5maXJzdF92cF9pZF07CisKKwlzdGF0dXMgPSB2eGdlX2h3X3ZwYXRoX2Z3X2FwaSh2cGF0aCwKKwkJCQkgICAgICBWWEdFX0hXX0ZXX1VQR1JBREVfQUNUSU9OLAorCQkJCSAgICAgIFZYR0VfSFdfRldfVVBHUkFERV9NRU1PLAorCQkJCSAgICAgIFZYR0VfSFdfRldfVVBHUkFERV9PRkZTRVRfQ09NTUlULAorCQkJCSAgICAgICZkYXRhMCwgJmRhdGExLCAmc3RlZXJfY3RybCk7CisJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKSB7CisJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwgIiVzOiBGVyB1cGdyYWRlIGZhaWxlZCIsIF9fZnVuY19fKTsKKwkJZ290byBleGl0OworCX0KKworCXJldCA9IFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0dFVF9BQ1RJT04oc3RlZXJfY3RybCkgJiAweDdGOworCWlmIChyZXQgIT0gMSkgeworCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsICIlczogRlcgY29tbWl0IGZhaWxlZCB3aXRoIGVycm9yICVkIiwKKwkJCQlfX2Z1bmNfXywgcmV0KTsKKwkJc3RhdHVzID0gVlhHRV9IV19GQUlMOworCX0KKworZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworfQorCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCit2eGdlX3VwZGF0ZV9md19pbWFnZShzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYsIGNvbnN0IHU4ICpmd2RhdGEsIGludCBzaXplKQoreworCXU2NCBkYXRhMCA9IDAsIGRhdGExID0gMCwgc3RlZXJfY3RybCA9IDA7CisJc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aCAqdnBhdGg7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXM7CisJaW50IHJldF9jb2RlLCBzZWNfY29kZTsKKworCXZwYXRoID0gJmhsZGV2LT52aXJ0dWFsX3BhdGhzW2hsZGV2LT5maXJzdF92cF9pZF07CisKKwkvKiBzZW5kIHVwZ3JhZGUgc3RhcnQgY29tbWFuZCAqLworCXN0YXR1cyA9IHZ4Z2VfaHdfdnBhdGhfZndfYXBpKHZwYXRoLAorCQkJCSAgICAgIFZYR0VfSFdfRldfVVBHUkFERV9BQ1RJT04sCisJCQkJICAgICAgVlhHRV9IV19GV19VUEdSQURFX01FTU8sCisJCQkJICAgICAgVlhHRV9IV19GV19VUEdSQURFX09GRlNFVF9TVEFSVCwKKwkJCQkgICAgICAmZGF0YTAsICZkYXRhMSwgJnN0ZWVyX2N0cmwpOworCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykgeworCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsICIgJXM6IFVwZ3JhZGUgc3RhcnQgY21kIGZhaWxlZCIsCisJCQkJX19mdW5jX18pOworCQlyZXR1cm4gc3RhdHVzOworCX0KKworCS8qIFRyYW5zZmVyIGZ3IGltYWdlIHRvIGFkYXB0ZXIgMTYgYnl0ZXMgYXQgYSB0aW1lICovCisJZm9yICg7IHNpemUgPiAwOyBzaXplIC09IFZYR0VfSFdfRldfVVBHUkFERV9CTEtfU0laRSkgeworCQlzdGVlcl9jdHJsID0gMDsKKworCQkvKiBUaGUgbmV4dCAxMjhiaXRzIG9mIGZ3ZGF0YSB0byBiZSBsb2FkZWQgb250byB0aGUgYWRhcHRlciAqLworCQlkYXRhMCA9ICooKHU2NCAqKWZ3ZGF0YSk7CisJCWRhdGExID0gKigodTY0ICopZndkYXRhICsgMSk7CisKKwkJc3RhdHVzID0gdnhnZV9od192cGF0aF9md19hcGkodnBhdGgsCisJCQkJCSAgICAgIFZYR0VfSFdfRldfVVBHUkFERV9BQ1RJT04sCisJCQkJCSAgICAgIFZYR0VfSFdfRldfVVBHUkFERV9NRU1PLAorCQkJCQkgICAgICBWWEdFX0hXX0ZXX1VQR1JBREVfT0ZGU0VUX1NFTkQsCisJCQkJCSAgICAgICZkYXRhMCwgJmRhdGExLCAmc3RlZXJfY3RybCk7CisJCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykgeworCQkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLCAiJXM6IFVwZ3JhZGUgc2VuZCBmYWlsZWQiLAorCQkJCQlfX2Z1bmNfXyk7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCXJldF9jb2RlID0gVlhHRV9IV19VUEdSQURFX0dFVF9SRVRfRVJSX0NPREUoZGF0YTApOworCQlzd2l0Y2ggKHJldF9jb2RlKSB7CisJCWNhc2UgVlhHRV9IV19GV19VUEdSQURFX09LOgorCQkJLyogQWxsIE9LLCBzZW5kIG5leHQgMTYgYnl0ZXMuICovCisJCQlicmVhazsKKwkJY2FzZSBWWEdFX0ZXX1VQR1JBREVfQllURVMyU0tJUDoKKwkJCS8qIHNraXAgYnl0ZXMgaW4gdGhlIHN0cmVhbSAqLworCQkJZndkYXRhICs9IChkYXRhMCA+PiA4KSAmIDB4RkZGRkZGRkY7CisJCQlicmVhazsKKwkJY2FzZSBWWEdFX0hXX0ZXX1VQR1JBREVfRE9ORToKKwkJCWdvdG8gb3V0OworCQljYXNlIFZYR0VfSFdfRldfVVBHUkFERV9FUlI6CisJCQlzZWNfY29kZSA9IFZYR0VfSFdfVVBHUkFERV9HRVRfU0VDX0VSUl9DT0RFKGRhdGEwKTsKKwkJCXN3aXRjaCAoc2VjX2NvZGUpIHsKKwkJCWNhc2UgVlhHRV9IV19GV19VUEdSQURFX0VSUl9DT1JSVVBUX0RBVEFfMToKKwkJCWNhc2UgVlhHRV9IV19GV19VUEdSQURFX0VSUl9DT1JSVVBUX0RBVEFfNzoKKwkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkgICAgICAgImNvcnJ1cHRlZCBkYXRhIGZyb20gLm5jZiBmaWxlXG4iKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgVlhHRV9IV19GV19VUEdSQURFX0VSUl9JTlZfTkNGX0ZJTEVfMzoKKwkJCWNhc2UgVlhHRV9IV19GV19VUEdSQURFX0VSUl9JTlZfTkNGX0ZJTEVfNDoKKwkJCWNhc2UgVlhHRV9IV19GV19VUEdSQURFX0VSUl9JTlZfTkNGX0ZJTEVfNToKKwkJCWNhc2UgVlhHRV9IV19GV19VUEdSQURFX0VSUl9JTlZfTkNGX0ZJTEVfNjoKKwkJCWNhc2UgVlhHRV9IV19GV19VUEdSQURFX0VSUl9JTlZfTkNGX0ZJTEVfODoKKwkJCQlwcmludGsoS0VSTl9FUlIgImludmFsaWQgLm5jZiBmaWxlXG4iKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgVlhHRV9IV19GV19VUEdSQURFX0VSUl9CVUZGRVJfT1ZFUkZMT1c6CisJCQkJcHJpbnRrKEtFUk5fRVJSICJidWZmZXIgb3ZlcmZsb3dcbiIpOworCQkJCWJyZWFrOworCQkJY2FzZSBWWEdFX0hXX0ZXX1VQR1JBREVfRVJSX0ZBSUxFRF9UT19GTEFTSDoKKwkJCQlwcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byBmbGFzaCB0aGUgaW1hZ2VcbiIpOworCQkJCWJyZWFrOworCQkJY2FzZSBWWEdFX0hXX0ZXX1VQR1JBREVfRVJSX0dFTkVSSUNfRVJST1JfVU5LTk9XTjoKKwkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkgICAgICAgImdlbmVyaWMgZXJyb3IuIFVua25vd24gZXJyb3IgdHlwZVxuIik7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXByaW50ayhLRVJOX0VSUiAiVW5rbm93biBlcnJvciBvZiB0eXBlICVkXG4iLAorCQkJCSAgICAgICBzZWNfY29kZSk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlzdGF0dXMgPSBWWEdFX0hXX0ZBSUw7CisJCQlnb3RvIG91dDsKKwkJZGVmYXVsdDoKKwkJCXByaW50ayhLRVJOX0VSUiAiVW5rbm93biBGVyBlcnJvcjogJWRcbiIsIHJldF9jb2RlKTsKKwkJCXN0YXR1cyA9IFZYR0VfSFdfRkFJTDsKKwkJCWdvdG8gb3V0OworCQl9CisJCS8qIHBvaW50IHRvIG5leHQgMTYgYnl0ZXMgKi8KKwkJZndkYXRhICs9IFZYR0VfSFdfRldfVVBHUkFERV9CTEtfU0laRTsKKwl9CitvdXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworZW51bSB2eGdlX2h3X3N0YXR1cwordnhnZV9od192cGF0aF9lcHJvbV9pbWdfdmVyX2dldChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYsCisJCQkJc3RydWN0IGVwcm9tX2ltYWdlICppbWcpCit7CisJdTY0IGRhdGEwID0gMCwgZGF0YTEgPSAwLCBzdGVlcl9jdHJsID0gMDsKKwlzdHJ1Y3QgX192eGdlX2h3X3ZpcnR1YWxwYXRoICp2cGF0aDsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1czsKKwlpbnQgaTsKKworCXZwYXRoID0gJmhsZGV2LT52aXJ0dWFsX3BhdGhzW2hsZGV2LT5maXJzdF92cF9pZF07CisKKwlmb3IgKGkgPSAwOyBpIDwgVlhHRV9IV19NQVhfUk9NX0lNQUdFUzsgaSsrKSB7CisJCWRhdGEwID0gVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX1JPTV9JTUFHRV9JTkRFWChpKTsKKwkJZGF0YTEgPSBzdGVlcl9jdHJsID0gMDsKKworCQlzdGF0dXMgPSB2eGdlX2h3X3ZwYXRoX2Z3X2FwaSh2cGF0aCwKKwkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9GV19NRU1PLAorCQkJVlhHRV9IV19GV19BUElfR0VUX0VQUk9NX1JFViwKKwkJCTAsICZkYXRhMCwgJmRhdGExLCAmc3RlZXJfY3RybCk7CisJCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJCWJyZWFrOworCisJCWltZ1tpXS5pc192YWxpZCA9IFZYR0VfSFdfR0VUX0VQUk9NX0lNQUdFX1ZBTElEKGRhdGEwKTsKKwkJaW1nW2ldLmluZGV4ID0gVlhHRV9IV19HRVRfRVBST01fSU1BR0VfSU5ERVgoZGF0YTApOworCQlpbWdbaV0udHlwZSA9IFZYR0VfSFdfR0VUX0VQUk9NX0lNQUdFX1RZUEUoZGF0YTApOworCQlpbWdbaV0udmVyc2lvbiA9IFZYR0VfSFdfR0VUX0VQUk9NX0lNQUdFX1JFVihkYXRhMCk7CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIF9fdnhnZV9od19jaGFubmVsX2ZyZWUgLSBGcmVlIG1lbW9yeSBhbGxvY2F0ZWQgZm9yIGNoYW5uZWwKKyAqIFRoaXMgZnVuY3Rpb24gZGVhbGxvY2F0ZXMgbWVtb3J5IGZyb20gdGhlIGNoYW5uZWwgYW5kIHZhcmlvdXMgYXJyYXlzCisgKiBpbiB0aGUgY2hhbm5lbAorICovCitzdGF0aWMgdm9pZCBfX3Z4Z2VfaHdfY2hhbm5lbF9mcmVlKHN0cnVjdCBfX3Z4Z2VfaHdfY2hhbm5lbCAqY2hhbm5lbCkKK3sKKwlrZnJlZShjaGFubmVsLT53b3JrX2Fycik7CisJa2ZyZWUoY2hhbm5lbC0+ZnJlZV9hcnIpOworCWtmcmVlKGNoYW5uZWwtPnJlc2VydmVfYXJyKTsKKwlrZnJlZShjaGFubmVsLT5vcmlnX2Fycik7CisJa2ZyZWUoY2hhbm5lbCk7Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfY2hhbm5lbF9pbml0aWFsaXplIC0gSW5pdGlhbGl6ZSBhIGNoYW5uZWwKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgYSBjaGFubmVsIGJ5IHByb3Blcmx5IHNldHRpbmcgdGhlCisgKiB2YXJpb3VzIHJlZmVyZW5jZXMKKyAqLworc3RhdGljIGVudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od19jaGFubmVsX2luaXRpYWxpemUoc3RydWN0IF9fdnhnZV9od19jaGFubmVsICpjaGFubmVsKQoreworCXUzMiBpOworCXN0cnVjdCBfX3Z4Z2VfaHdfdmlydHVhbHBhdGggKnZwYXRoOworCisJdnBhdGggPSBjaGFubmVsLT52cGgtPnZwYXRoOworCisJaWYgKChjaGFubmVsLT5yZXNlcnZlX2FyciAhPSBOVUxMKSAmJiAoY2hhbm5lbC0+b3JpZ19hcnIgIT0gTlVMTCkpIHsKKwkJZm9yIChpID0gMDsgaSA8IGNoYW5uZWwtPmxlbmd0aDsgaSsrKQorCQkJY2hhbm5lbC0+b3JpZ19hcnJbaV0gPSBjaGFubmVsLT5yZXNlcnZlX2FycltpXTsKKwl9CisKKwlzd2l0Y2ggKGNoYW5uZWwtPnR5cGUpIHsKKwljYXNlIFZYR0VfSFdfQ0hBTk5FTF9UWVBFX0ZJRk86CisJCXZwYXRoLT5maWZvaCA9IChzdHJ1Y3QgX192eGdlX2h3X2ZpZm8gKiljaGFubmVsOworCQljaGFubmVsLT5zdGF0cyA9ICYoKHN0cnVjdCBfX3Z4Z2VfaHdfZmlmbyAqKQorCQkJCWNoYW5uZWwpLT5zdGF0cy0+Y29tbW9uX3N0YXRzOworCQlicmVhazsKKwljYXNlIFZYR0VfSFdfQ0hBTk5FTF9UWVBFX1JJTkc6CisJCXZwYXRoLT5yaW5naCA9IChzdHJ1Y3QgX192eGdlX2h3X3JpbmcgKiljaGFubmVsOworCQljaGFubmVsLT5zdGF0cyA9ICYoKHN0cnVjdCBfX3Z4Z2VfaHdfcmluZyAqKQorCQkJCWNoYW5uZWwpLT5zdGF0cy0+Y29tbW9uX3N0YXRzOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gVlhHRV9IV19PSzsKK30KKworLyoKKyAqIF9fdnhnZV9od19jaGFubmVsX3Jlc2V0IC0gUmVzZXRzIGEgY2hhbm5lbAorICogVGhpcyBmdW5jdGlvbiByZXNldHMgYSBjaGFubmVsIGJ5IHByb3Blcmx5IHNldHRpbmcgdGhlIHZhcmlvdXMgcmVmZXJlbmNlcworICovCitzdGF0aWMgZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X2NoYW5uZWxfcmVzZXQoc3RydWN0IF9fdnhnZV9od19jaGFubmVsICpjaGFubmVsKQoreworCXUzMiBpOworCisJZm9yIChpID0gMDsgaSA8IGNoYW5uZWwtPmxlbmd0aDsgaSsrKSB7CisJCWlmIChjaGFubmVsLT5yZXNlcnZlX2FyciAhPSBOVUxMKQorCQkJY2hhbm5lbC0+cmVzZXJ2ZV9hcnJbaV0gPSBjaGFubmVsLT5vcmlnX2FycltpXTsKKwkJaWYgKGNoYW5uZWwtPmZyZWVfYXJyICE9IE5VTEwpCisJCQljaGFubmVsLT5mcmVlX2FycltpXSA9IE5VTEw7CisJCWlmIChjaGFubmVsLT53b3JrX2FyciAhPSBOVUxMKQorCQkJY2hhbm5lbC0+d29ya19hcnJbaV0gPSBOVUxMOworCX0KKwljaGFubmVsLT5mcmVlX3B0ciA9IGNoYW5uZWwtPmxlbmd0aDsKKwljaGFubmVsLT5yZXNlcnZlX3B0ciA9IGNoYW5uZWwtPmxlbmd0aDsKKwljaGFubmVsLT5yZXNlcnZlX3RvcCA9IDA7CisJY2hhbm5lbC0+cG9zdF9pbmRleCA9IDA7CisJY2hhbm5lbC0+Y29tcGxfaW5kZXggPSAwOworCisJcmV0dXJuIFZYR0VfSFdfT0s7Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfZGV2aWNlX3BjaV9lX2luaXQKKyAqIEluaXRpYWxpemUgY2VydGFpbiBQQ0kvUENJLVggY29uZmlndXJhdGlvbiByZWdpc3RlcnMKKyAqIHdpdGggcmVjb21tZW5kZWQgdmFsdWVzLiBTYXZlIGNvbmZpZyBzcGFjZSBmb3IgZnV0dXJlIGh3IHJlc2V0cy4KKyAqLworc3RhdGljIHZvaWQgX192eGdlX2h3X2RldmljZV9wY2lfZV9pbml0KHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldikKK3sKKwl1MTYgY21kID0gMDsKKworCS8qIFNldCB0aGUgUEVyciBSZXBjb25zZSBiaXQgYW5kIFNFUlIgaW4gUENJIGNvbW1hbmQgcmVnaXN0ZXIuICovCisJcGNpX3JlYWRfY29uZmlnX3dvcmQoaGxkZXYtPnBkZXYsIFBDSV9DT01NQU5ELCAmY21kKTsKKwljbWQgfD0gMHgxNDA7CisJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGhsZGV2LT5wZGV2LCBQQ0lfQ09NTUFORCwgY21kKTsKKworCXBjaV9zYXZlX3N0YXRlKGhsZGV2LT5wZGV2KTsKK30KKworLyogX192eGdlX2h3X2RldmljZV92cGF0aF9yZXNldF9pbl9wcm9nX2NoZWNrIC0gQ2hlY2sgaWYgdnBhdGggcmVzZXQKICAqIGluIHByb2dyZXNzCiAgKiBUaGlzIHJvdXRpbmUgY2hlY2tzIHRoZSB2cGF0aCByZXNldCBpbiBwcm9ncmVzcyByZWdpc3RlciBpcyB0dXJuZWQgemVybwogICovCkBAIC00MDUsNiArNTEwLDYwIEBACiB9CiAKIC8qCisgKiBfaHdfbGVnYWN5X3N3YXBwZXJfc2V0IC0gU2V0IHRoZSBzd2FwcGVyIGJpdHMgZm9yIHRoZSBsZWdhY3kgc2VjaW9uLgorICogU2V0IHRoZSBzd2FwcGVyIGJpdHMgYXBwcm9wcmlhdGVseSBmb3IgdGhlIGxhZ2FjeSBzZWN0aW9uLgorICovCitzdGF0aWMgZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X2xlZ2FjeV9zd2FwcGVyX3NldChzdHJ1Y3QgdnhnZV9od19sZWdhY3lfcmVnIF9faW9tZW0gKmxlZ2FjeV9yZWcpCit7CisJdTY0IHZhbDY0OworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKworCXZhbDY0ID0gcmVhZHEoJmxlZ2FjeV9yZWctPnRvY19zd2FwcGVyX2ZiKTsKKworCXdtYigpOworCisJc3dpdGNoICh2YWw2NCkgeworCWNhc2UgVlhHRV9IV19TV0FQUEVSX0lOSVRJQUxfVkFMVUU6CisJCXJldHVybiBzdGF0dXM7CisKKwljYXNlIFZYR0VfSFdfU1dBUFBFUl9CWVRFX1NXQVBQRURfQklUX0ZMSVBQRUQ6CisJCXdyaXRlcShWWEdFX0hXX1NXQVBQRVJfUkVBRF9CWVRFX1NXQVBfRU5BQkxFLAorCQkJJmxlZ2FjeV9yZWctPnBpZm1fcmRfc3dhcF9lbik7CisJCXdyaXRlcShWWEdFX0hXX1NXQVBQRVJfUkVBRF9CSVRfRkxBUF9FTkFCTEUsCisJCQkmbGVnYWN5X3JlZy0+cGlmbV9yZF9mbGlwX2VuKTsKKwkJd3JpdGVxKFZYR0VfSFdfU1dBUFBFUl9XUklURV9CWVRFX1NXQVBfRU5BQkxFLAorCQkJJmxlZ2FjeV9yZWctPnBpZm1fd3Jfc3dhcF9lbik7CisJCXdyaXRlcShWWEdFX0hXX1NXQVBQRVJfV1JJVEVfQklUX0ZMQVBfRU5BQkxFLAorCQkJJmxlZ2FjeV9yZWctPnBpZm1fd3JfZmxpcF9lbik7CisJCWJyZWFrOworCisJY2FzZSBWWEdFX0hXX1NXQVBQRVJfQllURV9TV0FQUEVEOgorCQl3cml0ZXEoVlhHRV9IV19TV0FQUEVSX1JFQURfQllURV9TV0FQX0VOQUJMRSwKKwkJCSZsZWdhY3lfcmVnLT5waWZtX3JkX3N3YXBfZW4pOworCQl3cml0ZXEoVlhHRV9IV19TV0FQUEVSX1dSSVRFX0JZVEVfU1dBUF9FTkFCTEUsCisJCQkmbGVnYWN5X3JlZy0+cGlmbV93cl9zd2FwX2VuKTsKKwkJYnJlYWs7CisKKwljYXNlIFZYR0VfSFdfU1dBUFBFUl9CSVRfRkxJUFBFRDoKKwkJd3JpdGVxKFZYR0VfSFdfU1dBUFBFUl9SRUFEX0JJVF9GTEFQX0VOQUJMRSwKKwkJCSZsZWdhY3lfcmVnLT5waWZtX3JkX2ZsaXBfZW4pOworCQl3cml0ZXEoVlhHRV9IV19TV0FQUEVSX1dSSVRFX0JJVF9GTEFQX0VOQUJMRSwKKwkJCSZsZWdhY3lfcmVnLT5waWZtX3dyX2ZsaXBfZW4pOworCQlicmVhazsKKwl9CisKKwl3bWIoKTsKKworCXZhbDY0ID0gcmVhZHEoJmxlZ2FjeV9yZWctPnRvY19zd2FwcGVyX2ZiKTsKKworCWlmICh2YWw2NCAhPSBWWEdFX0hXX1NXQVBQRVJfSU5JVElBTF9WQUxVRSkKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfU1dBUFBFUl9DVFJMOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKICAqIF9fdnhnZV9od19kZXZpY2VfdG9jX2dldAogICogVGhpcyByb3V0aW5lIHNldHMgdGhlIHN3YXBwZXIgYW5kIHJlYWRzIHRoZSB0b2MgcG9pbnRlciBhbmQgcmV0dXJucyB0aGUKICAqIG1lbW9yeSBtYXBwZWQgYWRkcmVzcyBvZiB0aGUgdG9jCkBAIC00MzUsNyArNTk0LDcgQEAKICAqIHJlZ2lzdGVyIGxvY2F0aW9uIHBvaW50ZXJzIGluIHRoZSBkZXZpY2Ugb2JqZWN0LiBJdCB3YWl0cyB1bnRpbCB0aGUgcmljIGlzCiAgKiBjb21wbGV0ZWQgaW5pdGlhbGl6aW5nIHJlZ2lzdGVycy4KICAqLwotZW51bSB2eGdlX2h3X3N0YXR1cworc3RhdGljIGVudW0gdnhnZV9od19zdGF0dXMKIF9fdnhnZV9od19kZXZpY2VfcmVnX2FkZHJfZ2V0KHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldikKIHsKIAl1NjQgdmFsNjQ7CkBAIC00OTYsMjYgKzY1NSw2IEBACiB9CiAKIC8qCi0gKiBfX3Z4Z2VfaHdfZGV2aWNlX2lkX2dldAotICogVGhpcyByb3V0aW5lIHJldHVybnMgc2V0cyB0aGUgZGV2aWNlIGlkIGFuZCByZXZpc2lvbiBudW1iZXJzIGludG8gdGhlIGRldmljZQotICogc3RydWN0dXJlCi0gKi8KLXZvaWQgX192eGdlX2h3X2RldmljZV9pZF9nZXQoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2KQotewotCXU2NCB2YWw2NDsKLQotCXZhbDY0ID0gcmVhZHEoJmhsZGV2LT5jb21tb25fcmVnLT50aXRhbl9hc2ljX2lkKTsKLQlobGRldi0+ZGV2aWNlX2lkID0KLQkJKHUxNilWWEdFX0hXX1RJVEFOX0FTSUNfSURfR0VUX0lOSVRJQUxfREVWSUNFX0lEKHZhbDY0KTsKLQotCWhsZGV2LT5tYWpvcl9yZXZpc2lvbiA9Ci0JCSh1OClWWEdFX0hXX1RJVEFOX0FTSUNfSURfR0VUX0lOSVRJQUxfTUFKT1JfUkVWSVNJT04odmFsNjQpOwotCi0JaGxkZXYtPm1pbm9yX3JldmlzaW9uID0KLQkJKHU4KVZYR0VfSFdfVElUQU5fQVNJQ19JRF9HRVRfSU5JVElBTF9NSU5PUl9SRVZJU0lPTih2YWw2NCk7Ci19Ci0KLS8qCiAgKiBfX3Z4Z2VfaHdfZGV2aWNlX2FjY2Vzc19yaWdodHNfZ2V0OiBHZXQgQWNjZXNzIFJpZ2h0cyBvZiB0aGUgZHJpdmVyCiAgKiBUaGlzIHJvdXRpbmUgcmV0dXJucyB0aGUgQWNjZXNzIFJpZ2h0cyBvZiB0aGUgZHJpdmVyCiAgKi8KQEAgLTU2OCwxMCArNzA3LDI1IEBACiB9CiAKIC8qCisgKiBfX3Z4Z2VfaHdfdnBhdGhfZnVuY19pZF9nZXQgLSBHZXQgdGhlIGZ1bmN0aW9uIGlkIG9mIHRoZSB2cGF0aC4KKyAqIFJldHVybnMgdGhlIGZ1bmN0aW9uIG51bWJlciBvZiB0aGUgdnBhdGguCisgKi8KK3N0YXRpYyB1MzIKK19fdnhnZV9od192cGF0aF9mdW5jX2lkX2dldChzdHJ1Y3QgdnhnZV9od192cG1nbXRfcmVnIF9faW9tZW0gKnZwbWdtdF9yZWcpCit7CisJdTY0IHZhbDY0OworCisJdmFsNjQgPSByZWFkcSgmdnBtZ210X3JlZy0+dnBhdGhfdG9fZnVuY19tYXBfY2ZnMSk7CisKKwlyZXR1cm4KKwkgKHUzMilWWEdFX0hXX1ZQQVRIX1RPX0ZVTkNfTUFQX0NGRzFfR0VUX1ZQQVRIX1RPX0ZVTkNfTUFQX0NGRzEodmFsNjQpOworfQorCisvKgogICogX192eGdlX2h3X2RldmljZV9ob3N0X2luZm9fZ2V0CiAgKiBUaGlzIHJvdXRpbmUgcmV0dXJucyB0aGUgaG9zdCB0eXBlIGFzc2lnbm1lbnRzCiAgKi8KLXZvaWQgX192eGdlX2h3X2RldmljZV9ob3N0X2luZm9fZ2V0KHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldikKK3N0YXRpYyB2b2lkIF9fdnhnZV9od19kZXZpY2VfaG9zdF9pbmZvX2dldChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYpCiB7CiAJdTY0IHZhbDY0OwogCXUzMiBpOwpAQCAtNTg0LDE2ICs3MzgsMTggQEAKIAlobGRldi0+dnBhdGhfYXNzaWdubWVudHMgPSByZWFkcSgmaGxkZXYtPmNvbW1vbl9yZWctPnZwYXRoX2Fzc2lnbm1lbnRzKTsKIAogCWZvciAoaSA9IDA7IGkgPCBWWEdFX0hXX01BWF9WSVJUVUFMX1BBVEhTOyBpKyspIHsKLQogCQlpZiAoIShobGRldi0+dnBhdGhfYXNzaWdubWVudHMgJiB2eGdlX21CSVQoaSkpKQogCQkJY29udGludWU7CiAKIAkJaGxkZXYtPmZ1bmNfaWQgPQotCQkJX192eGdlX2h3X3ZwYXRoX2Z1bmNfaWRfZ2V0KGksIGhsZGV2LT52cG1nbXRfcmVnW2ldKTsKKwkJCV9fdnhnZV9od192cGF0aF9mdW5jX2lkX2dldChobGRldi0+dnBtZ210X3JlZ1tpXSk7CiAKIAkJaGxkZXYtPmFjY2Vzc19yaWdodHMgPSBfX3Z4Z2VfaHdfZGV2aWNlX2FjY2Vzc19yaWdodHNfZ2V0KAogCQkJaGxkZXYtPmhvc3RfdHlwZSwgaGxkZXYtPmZ1bmNfaWQpOwogCisJCWhsZGV2LT52aXJ0dWFsX3BhdGhzW2ldLnZwX29wZW4gPSBWWEdFX0hXX1ZQX05PVF9PUEVOOworCQlobGRldi0+dmlydHVhbF9wYXRoc1tpXS52cF9yZWcgPSBobGRldi0+dnBhdGhfcmVnW2ldOworCiAJCWhsZGV2LT5maXJzdF92cF9pZCA9IGk7CiAJCWJyZWFrOwogCX0KQEAgLTYzNCw3ICs3OTAsOCBAQAogICogX192eGdlX2h3X2RldmljZV9pbml0aWFsaXplCiAgKiBJbml0aWFsaXplIFRpdGFuLVYgaGFyZHdhcmUuCiAgKi8KLWVudW0gdnhnZV9od19zdGF0dXMgX192eGdlX2h3X2RldmljZV9pbml0aWFsaXplKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldikKK3N0YXRpYyBlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfZGV2aWNlX2luaXRpYWxpemUoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2KQogewogCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKIApAQCAtNjUwLDYgKzgwNywxOTYgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCisvKgorICogX192eGdlX2h3X3ZwYXRoX2Z3X3Zlcl9nZXQgLSBHZXQgdGhlIGZ3IHZlcnNpb24KKyAqIFJldHVybnMgRlcgVmVyc2lvbgorICovCitzdGF0aWMgZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X3ZwYXRoX2Z3X3Zlcl9nZXQoc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aCAqdnBhdGgsCisJCQkgICBzdHJ1Y3QgdnhnZV9od19kZXZpY2VfaHdfaW5mbyAqaHdfaW5mbykKK3sKKwlzdHJ1Y3QgdnhnZV9od19kZXZpY2VfdmVyc2lvbiAqZndfdmVyc2lvbiA9ICZod19pbmZvLT5md192ZXJzaW9uOworCXN0cnVjdCB2eGdlX2h3X2RldmljZV9kYXRlICpmd19kYXRlID0gJmh3X2luZm8tPmZ3X2RhdGU7CisJc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX3ZlcnNpb24gKmZsYXNoX3ZlcnNpb24gPSAmaHdfaW5mby0+Zmxhc2hfdmVyc2lvbjsKKwlzdHJ1Y3QgdnhnZV9od19kZXZpY2VfZGF0ZSAqZmxhc2hfZGF0ZSA9ICZod19pbmZvLT5mbGFzaF9kYXRlOworCXU2NCBkYXRhMCwgZGF0YTEgPSAwLCBzdGVlcl9jdHJsID0gMDsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1czsKKworCXN0YXR1cyA9IHZ4Z2VfaHdfdnBhdGhfZndfYXBpKHZwYXRoLAorCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfQUNUSU9OX1JFQURfRU5UUlksCisJCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfRldfTUVNTywKKwkJCTAsICZkYXRhMCwgJmRhdGExLCAmc3RlZXJfY3RybCk7CisJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQlnb3RvIGV4aXQ7CisKKwlmd19kYXRlLT5kYXkgPQorCSAgICAodTMyKSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfR0VUX0ZXX1ZFUl9EQVkoZGF0YTApOworCWZ3X2RhdGUtPm1vbnRoID0KKwkgICAgKHUzMikgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0dFVF9GV19WRVJfTU9OVEgoZGF0YTApOworCWZ3X2RhdGUtPnllYXIgPQorCSAgICAodTMyKSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfR0VUX0ZXX1ZFUl9ZRUFSKGRhdGEwKTsKKworCXNucHJpbnRmKGZ3X2RhdGUtPmRhdGUsIFZYR0VfSFdfRldfU1RSTEVOLCAiJTIuMmQvJTIuMmQvJTQuNGQiLAorCQkgZndfZGF0ZS0+bW9udGgsIGZ3X2RhdGUtPmRheSwgZndfZGF0ZS0+eWVhcik7CisKKwlmd192ZXJzaW9uLT5tYWpvciA9CisJICAgICh1MzIpIFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9HRVRfRldfVkVSX01BSk9SKGRhdGEwKTsKKwlmd192ZXJzaW9uLT5taW5vciA9CisJICAgICh1MzIpIFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9HRVRfRldfVkVSX01JTk9SKGRhdGEwKTsKKwlmd192ZXJzaW9uLT5idWlsZCA9CisJICAgICh1MzIpIFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9HRVRfRldfVkVSX0JVSUxEKGRhdGEwKTsKKworCXNucHJpbnRmKGZ3X3ZlcnNpb24tPnZlcnNpb24sIFZYR0VfSFdfRldfU1RSTEVOLCAiJWQuJWQuJWQiLAorCQkgZndfdmVyc2lvbi0+bWFqb3IsIGZ3X3ZlcnNpb24tPm1pbm9yLCBmd192ZXJzaW9uLT5idWlsZCk7CisKKwlmbGFzaF9kYXRlLT5kYXkgPQorCSAgICAodTMyKSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfR0VUX0ZMQVNIX1ZFUl9EQVkoZGF0YTEpOworCWZsYXNoX2RhdGUtPm1vbnRoID0KKwkgICAgKHUzMikgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX0dFVF9GTEFTSF9WRVJfTU9OVEgoZGF0YTEpOworCWZsYXNoX2RhdGUtPnllYXIgPQorCSAgICAodTMyKSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfR0VUX0ZMQVNIX1ZFUl9ZRUFSKGRhdGExKTsKKworCXNucHJpbnRmKGZsYXNoX2RhdGUtPmRhdGUsIFZYR0VfSFdfRldfU1RSTEVOLCAiJTIuMmQvJTIuMmQvJTQuNGQiLAorCQkgZmxhc2hfZGF0ZS0+bW9udGgsIGZsYXNoX2RhdGUtPmRheSwgZmxhc2hfZGF0ZS0+eWVhcik7CisKKwlmbGFzaF92ZXJzaW9uLT5tYWpvciA9CisJICAgICh1MzIpIFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9HRVRfRkxBU0hfVkVSX01BSk9SKGRhdGExKTsKKwlmbGFzaF92ZXJzaW9uLT5taW5vciA9CisJICAgICh1MzIpIFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9HRVRfRkxBU0hfVkVSX01JTk9SKGRhdGExKTsKKwlmbGFzaF92ZXJzaW9uLT5idWlsZCA9CisJICAgICh1MzIpIFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9HRVRfRkxBU0hfVkVSX0JVSUxEKGRhdGExKTsKKworCXNucHJpbnRmKGZsYXNoX3ZlcnNpb24tPnZlcnNpb24sIFZYR0VfSFdfRldfU1RSTEVOLCAiJWQuJWQuJWQiLAorCQkgZmxhc2hfdmVyc2lvbi0+bWFqb3IsIGZsYXNoX3ZlcnNpb24tPm1pbm9yLAorCQkgZmxhc2hfdmVyc2lvbi0+YnVpbGQpOworCitleGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfdnBhdGhfY2FyZF9pbmZvX2dldCAtIEdldCB0aGUgc2VyaWFsIG51bWJlcnMsCisgKiBwYXJ0IG51bWJlciBhbmQgcHJvZHVjdCBkZXNjcmlwdGlvbi4KKyAqLworc3RhdGljIGVudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od192cGF0aF9jYXJkX2luZm9fZ2V0KHN0cnVjdCBfX3Z4Z2VfaHdfdmlydHVhbHBhdGggKnZwYXRoLAorCQkJICAgICAgc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX2h3X2luZm8gKmh3X2luZm8pCit7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXM7CisJdTY0IGRhdGEwLCBkYXRhMSA9IDAsIHN0ZWVyX2N0cmwgPSAwOworCXU4ICpzZXJpYWxfbnVtYmVyID0gaHdfaW5mby0+c2VyaWFsX251bWJlcjsKKwl1OCAqcGFydF9udW1iZXIgPSBod19pbmZvLT5wYXJ0X251bWJlcjsKKwl1OCAqcHJvZHVjdF9kZXNjID0gaHdfaW5mby0+cHJvZHVjdF9kZXNjOworCXUzMiBpLCBqID0gMDsKKworCWRhdGEwID0gVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX01FTU9fSVRFTV9TRVJJQUxfTlVNQkVSOworCisJc3RhdHVzID0gdnhnZV9od192cGF0aF9md19hcGkodnBhdGgsCisJCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9BQ1RJT05fUkVBRF9NRU1PX0VOVFJZLAorCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX0ZXX01FTU8sCisJCQkwLCAmZGF0YTAsICZkYXRhMSwgJnN0ZWVyX2N0cmwpOworCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJcmV0dXJuIHN0YXR1czsKKworCSgodTY0ICopc2VyaWFsX251bWJlcilbMF0gPSBiZTY0X3RvX2NwdShkYXRhMCk7CisJKCh1NjQgKilzZXJpYWxfbnVtYmVyKVsxXSA9IGJlNjRfdG9fY3B1KGRhdGExKTsKKworCWRhdGEwID0gVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX01FTU9fSVRFTV9QQVJUX05VTUJFUjsKKwlkYXRhMSA9IHN0ZWVyX2N0cmwgPSAwOworCisJc3RhdHVzID0gdnhnZV9od192cGF0aF9md19hcGkodnBhdGgsCisJCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9BQ1RJT05fUkVBRF9NRU1PX0VOVFJZLAorCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX0ZXX01FTU8sCisJCQkwLCAmZGF0YTAsICZkYXRhMSwgJnN0ZWVyX2N0cmwpOworCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJcmV0dXJuIHN0YXR1czsKKworCSgodTY0ICopcGFydF9udW1iZXIpWzBdID0gYmU2NF90b19jcHUoZGF0YTApOworCSgodTY0ICopcGFydF9udW1iZXIpWzFdID0gYmU2NF90b19jcHUoZGF0YTEpOworCisJZm9yIChpID0gVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX01FTU9fSVRFTV9ERVNDXzA7CisJICAgICBpIDw9IFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9NRU1PX0lURU1fREVTQ18zOyBpKyspIHsKKwkJZGF0YTAgPSBpOworCQlkYXRhMSA9IHN0ZWVyX2N0cmwgPSAwOworCisJCXN0YXR1cyA9IHZ4Z2VfaHdfdnBhdGhfZndfYXBpKHZwYXRoLAorCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfQUNUSU9OX1JFQURfTUVNT19FTlRSWSwKKwkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9GV19NRU1PLAorCQkJMCwgJmRhdGEwLCAmZGF0YTEsICZzdGVlcl9jdHJsKTsKKwkJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQkJcmV0dXJuIHN0YXR1czsKKworCQkoKHU2NCAqKXByb2R1Y3RfZGVzYylbaisrXSA9IGJlNjRfdG9fY3B1KGRhdGEwKTsKKwkJKCh1NjQgKilwcm9kdWN0X2Rlc2MpW2orK10gPSBiZTY0X3RvX2NwdShkYXRhMSk7CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIF9fdnhnZV9od192cGF0aF9wY2lfZnVuY19tb2RlX2dldCAtIEdldCB0aGUgcGNpIG1vZGUKKyAqIFJldHVybnMgcGNpIGZ1bmN0aW9uIG1vZGUKKyAqLworc3RhdGljIGVudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od192cGF0aF9wY2lfZnVuY19tb2RlX2dldChzdHJ1Y3QgX192eGdlX2h3X3ZpcnR1YWxwYXRoICp2cGF0aCwKKwkJCQkgIHN0cnVjdCB2eGdlX2h3X2RldmljZV9od19pbmZvICpod19pbmZvKQoreworCXU2NCBkYXRhMCwgZGF0YTEgPSAwLCBzdGVlcl9jdHJsID0gMDsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1czsKKworCWRhdGEwID0gMDsKKworCXN0YXR1cyA9IHZ4Z2VfaHdfdnBhdGhfZndfYXBpKHZwYXRoLAorCQkJVlhHRV9IV19GV19BUElfR0VUX0ZVTkNfTU9ERSwKKwkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9GV19NRU1PLAorCQkJMCwgJmRhdGEwLCAmZGF0YTEsICZzdGVlcl9jdHJsKTsKKwlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCisJCXJldHVybiBzdGF0dXM7CisKKwlod19pbmZvLT5mdW5jdGlvbl9tb2RlID0gVlhHRV9IV19HRVRfRlVOQ19NT0RFX1ZBTChkYXRhMCk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIF9fdnhnZV9od192cGF0aF9hZGRyX2dldCAtIEdldCB0aGUgaHcgYWRkcmVzcyBlbnRyeSBmb3IgdGhpcyB2cGF0aAorICogICAgICAgICAgICAgICBmcm9tIE1BQyBhZGRyZXNzIHRhYmxlLgorICovCitzdGF0aWMgZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X3ZwYXRoX2FkZHJfZ2V0KHN0cnVjdCBfX3Z4Z2VfaHdfdmlydHVhbHBhdGggKnZwYXRoLAorCQkJIHU4ICptYWNhZGRyLCB1OCAqbWFjYWRkcl9tYXNrKQoreworCXU2NCBhY3Rpb24gPSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9BQ1RJT05fTElTVF9GSVJTVF9FTlRSWSwKKwkgICAgZGF0YTAgPSAwLCBkYXRhMSA9IDAsIHN0ZWVyX2N0cmwgPSAwOworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzOworCWludCBpOworCisJZG8geworCQlzdGF0dXMgPSB2eGdlX2h3X3ZwYXRoX2Z3X2FwaSh2cGF0aCwgYWN0aW9uLAorCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX0RBLAorCQkJMCwgJmRhdGEwLCAmZGF0YTEsICZzdGVlcl9jdHJsKTsKKwkJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQkJZ290byBleGl0OworCisJCWRhdGEwID0gVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0dFVF9EQV9NQUNfQUREUihkYXRhMCk7CisJCWRhdGExID0gVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX0dFVF9EQV9NQUNfQUREUl9NQVNLKAorCQkJCQkJCQkJZGF0YTEpOworCisJCWZvciAoaSA9IEVUSF9BTEVOOyBpID4gMDsgaS0tKSB7CisJCQltYWNhZGRyW2kgLSAxXSA9ICh1OCkgKGRhdGEwICYgMHhGRik7CisJCQlkYXRhMCA+Pj0gODsKKworCQkJbWFjYWRkcl9tYXNrW2kgLSAxXSA9ICh1OCkgKGRhdGExICYgMHhGRik7CisJCQlkYXRhMSA+Pj0gODsKKwkJfQorCisJCWFjdGlvbiA9IFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0FDVElPTl9MSVNUX05FWFRfRU5UUlk7CisJCWRhdGEwID0gMCwgZGF0YTEgPSAwLCBzdGVlcl9jdHJsID0gMDsKKworCX0gd2hpbGUgKCFpc192YWxpZF9ldGhlcl9hZGRyKG1hY2FkZHIpKTsKK2V4aXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKwogLyoqCiAgKiB2eGdlX2h3X2RldmljZV9od19pbmZvX2dldCAtIEdldCB0aGUgaHcgaW5mb3JtYXRpb24KICAqIFJldHVybnMgdGhlIHZwYXRoIG1hc2sgdGhhdCBoYXMgdGhlIGJpdHMgc2V0IGZvciBlYWNoIHZwYXRoIGFsbG9jYXRlZApAQCAtNjY1LDkgKzEwMTIsOSBAQAogCXN0cnVjdCB2eGdlX2h3X3RvY19yZWcgX19pb21lbSAqdG9jOwogCXN0cnVjdCB2eGdlX2h3X21ycGNpbV9yZWcgX19pb21lbSAqbXJwY2ltX3JlZzsKIAlzdHJ1Y3QgdnhnZV9od19jb21tb25fcmVnIF9faW9tZW0gKmNvbW1vbl9yZWc7Ci0Jc3RydWN0IHZ4Z2VfaHdfdnBhdGhfcmVnIF9faW9tZW0gKnZwYXRoX3JlZzsKIAlzdHJ1Y3QgdnhnZV9od192cG1nbXRfcmVnIF9faW9tZW0gKnZwbWdtdF9yZWc7CiAJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXM7CisJc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aCB2cGF0aDsKIAogCW1lbXNldChod19pbmZvLCAwLCBzaXplb2Yoc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX2h3X2luZm8pKTsKIApAQCAtNjkzLDcgKzEwNDAsNiBAQAogCSAgICh1MzIpVlhHRV9IV19IT1NUX1RZUEVfQVNTSUdOTUVOVFNfR0VUX0hPU1RfVFlQRV9BU1NJR05NRU5UUyh2YWw2NCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgVlhHRV9IV19NQVhfVklSVFVBTF9QQVRIUzsgaSsrKSB7Ci0KIAkJaWYgKCEoKGh3X2luZm8tPnZwYXRoX21hc2spICYgdnhnZV9tQklUKGkpKSkKIAkJCWNvbnRpbnVlOwogCkBAIC03MDIsNyArMTA0OCw3IEBACiAJCXZwbWdtdF9yZWcgPSAoc3RydWN0IHZ4Z2VfaHdfdnBtZ210X3JlZyBfX2lvbWVtICopCiAJCQkJKGJhcjAgKyB2YWw2NCk7CiAKLQkJaHdfaW5mby0+ZnVuY19pZCA9IF9fdnhnZV9od192cGF0aF9mdW5jX2lkX2dldChpLCB2cG1nbXRfcmVnKTsKKwkJaHdfaW5mby0+ZnVuY19pZCA9IF9fdnhnZV9od192cGF0aF9mdW5jX2lkX2dldCh2cG1nbXRfcmVnKTsKIAkJaWYgKF9fdnhnZV9od19kZXZpY2VfYWNjZXNzX3JpZ2h0c19nZXQoaHdfaW5mby0+aG9zdF90eXBlLAogCQkJaHdfaW5mby0+ZnVuY19pZCkgJgogCQkJVlhHRV9IV19ERVZJQ0VfQUNDRVNTX1JJR0hUX01SUENJTSkgewpAQCAtNzE4LDE2ICsxMDY0LDE5IEBACiAKIAkJdmFsNjQgPSByZWFkcSgmdG9jLT50b2NfdnBhdGhfcG9pbnRlcltpXSk7CiAKLQkJdnBhdGhfcmVnID0gKHN0cnVjdCB2eGdlX2h3X3ZwYXRoX3JlZyBfX2lvbWVtICopKGJhcjAgKyB2YWw2NCk7CisJCXZwYXRoLnZwX3JlZyA9IChzdHJ1Y3QgdnhnZV9od192cGF0aF9yZWcgX19pb21lbSAqKQorCQkJICAgICAgIChiYXIwICsgdmFsNjQpOworCQl2cGF0aC52cF9vcGVuID0gMDsKIAotCQlod19pbmZvLT5mdW5jdGlvbl9tb2RlID0KLQkJCV9fdnhnZV9od192cGF0aF9wY2lfZnVuY19tb2RlX2dldChpLCB2cGF0aF9yZWcpOwotCi0JCXN0YXR1cyA9IF9fdnhnZV9od192cGF0aF9md192ZXJfZ2V0KGksIHZwYXRoX3JlZywgaHdfaW5mbyk7CisJCXN0YXR1cyA9IF9fdnhnZV9od192cGF0aF9wY2lfZnVuY19tb2RlX2dldCgmdnBhdGgsIGh3X2luZm8pOwogCQlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCiAJCQlnb3RvIGV4aXQ7CiAKLQkJc3RhdHVzID0gX192eGdlX2h3X3ZwYXRoX2NhcmRfaW5mb19nZXQoaSwgdnBhdGhfcmVnLCBod19pbmZvKTsKKwkJc3RhdHVzID0gX192eGdlX2h3X3ZwYXRoX2Z3X3Zlcl9nZXQoJnZwYXRoLCBod19pbmZvKTsKKwkJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQkJZ290byBleGl0OworCisJCXN0YXR1cyA9IF9fdnhnZV9od192cGF0aF9jYXJkX2luZm9fZ2V0KCZ2cGF0aCwgaHdfaW5mbyk7CiAJCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKIAkJCWdvdG8gZXhpdDsKIApAQCAtNzM1LDE0ICsxMDg0LDE1IEBACiAJfQogCiAJZm9yIChpID0gMDsgaSA8IFZYR0VfSFdfTUFYX1ZJUlRVQUxfUEFUSFM7IGkrKykgewotCiAJCWlmICghKChod19pbmZvLT52cGF0aF9tYXNrKSAmIHZ4Z2VfbUJJVChpKSkpCiAJCQljb250aW51ZTsKIAogCQl2YWw2NCA9IHJlYWRxKCZ0b2MtPnRvY192cGF0aF9wb2ludGVyW2ldKTsKLQkJdnBhdGhfcmVnID0gKHN0cnVjdCB2eGdlX2h3X3ZwYXRoX3JlZyBfX2lvbWVtICopKGJhcjAgKyB2YWw2NCk7CisJCXZwYXRoLnZwX3JlZyA9IChzdHJ1Y3QgdnhnZV9od192cGF0aF9yZWcgX19pb21lbSAqKQorCQkJICAgICAgIChiYXIwICsgdmFsNjQpOworCQl2cGF0aC52cF9vcGVuID0gMDsKIAotCQlzdGF0dXMgPSAgX192eGdlX2h3X3ZwYXRoX2FkZHJfZ2V0KGksIHZwYXRoX3JlZywKKwkJc3RhdHVzID0gIF9fdnhnZV9od192cGF0aF9hZGRyX2dldCgmdnBhdGgsCiAJCQkJaHdfaW5mby0+bWFjX2FkZHJzW2ldLAogCQkJCWh3X2luZm8tPm1hY19hZGRyX21hc2tzW2ldKTsKIAkJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQpAQCAtNzUzLDYgKzExMDMsMjE4IEBACiB9CiAKIC8qCisgKiBfX3Z4Z2VfaHdfYmxvY2twb29sX2Rlc3Ryb3kgLSBEZWFsbG9jYXRlcyB0aGUgYmxvY2sgcG9vbAorICovCitzdGF0aWMgdm9pZCBfX3Z4Z2VfaHdfYmxvY2twb29sX2Rlc3Ryb3koc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2wgKmJsb2NrcG9vbCkKK3sKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXY7CisJc3RydWN0IGxpc3RfaGVhZCAqcCwgKm47CisJdTE2IHJldDsKKworCWlmIChibG9ja3Bvb2wgPT0gTlVMTCkgeworCQlyZXQgPSAxOworCQlnb3RvIGV4aXQ7CisJfQorCisJaGxkZXYgPSBibG9ja3Bvb2wtPmhsZGV2OworCisJbGlzdF9mb3JfZWFjaF9zYWZlKHAsIG4sICZibG9ja3Bvb2wtPmZyZWVfYmxvY2tfbGlzdCkgeworCQlwY2lfdW5tYXBfc2luZ2xlKGhsZGV2LT5wZGV2LAorCQkJKChzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbF9lbnRyeSAqKXApLT5kbWFfYWRkciwKKwkJCSgoc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2xfZW50cnkgKilwKS0+bGVuZ3RoLAorCQkJUENJX0RNQV9CSURJUkVDVElPTkFMKTsKKworCQl2eGdlX29zX2RtYV9mcmVlKGhsZGV2LT5wZGV2LAorCQkJKChzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbF9lbnRyeSAqKXApLT5tZW1ibG9jaywKKwkJCSYoKHN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sX2VudHJ5ICopcCktPmFjY19oYW5kbGUpOworCisJCWxpc3RfZGVsKCYoKHN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sX2VudHJ5ICopcCktPml0ZW0pOworCQlrZnJlZShwKTsKKwkJYmxvY2twb29sLT5wb29sX3NpemUtLTsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoX3NhZmUocCwgbiwgJmJsb2NrcG9vbC0+ZnJlZV9lbnRyeV9saXN0KSB7CisJCWxpc3RfZGVsKCYoKHN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sX2VudHJ5ICopcCktPml0ZW0pOworCQlrZnJlZSgodm9pZCAqKXApOworCX0KKwlyZXQgPSAwOworZXhpdDoKKwlyZXR1cm47Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfYmxvY2twb29sX2NyZWF0ZSAtIENyZWF0ZSBibG9jayBwb29sCisgKi8KK3N0YXRpYyBlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfYmxvY2twb29sX2NyZWF0ZShzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYsCisJCQkgICBzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbCAqYmxvY2twb29sLAorCQkJICAgdTMyIHBvb2xfc2l6ZSwKKwkJCSAgIHUzMiBwb29sX21heCkKK3sKKwl1MzIgaTsKKwlzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbF9lbnRyeSAqZW50cnkgPSBOVUxMOworCXZvaWQgKm1lbWJsb2NrOworCWRtYV9hZGRyX3QgZG1hX2FkZHI7CisJc3RydWN0IHBjaV9kZXYgKmRtYV9oYW5kbGU7CisJc3RydWN0IHBjaV9kZXYgKmFjY19oYW5kbGU7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCisJaWYgKGJsb2NrcG9vbCA9PSBOVUxMKSB7CisJCXN0YXR1cyA9IFZYR0VfSFdfRkFJTDsKKwkJZ290byBibG9ja3Bvb2xfY3JlYXRlX2V4aXQ7CisJfQorCisJYmxvY2twb29sLT5obGRldiA9IGhsZGV2OworCWJsb2NrcG9vbC0+YmxvY2tfc2l6ZSA9IFZYR0VfSFdfQkxPQ0tfU0laRTsKKwlibG9ja3Bvb2wtPnBvb2xfc2l6ZSA9IDA7CisJYmxvY2twb29sLT5wb29sX21heCA9IHBvb2xfbWF4OworCWJsb2NrcG9vbC0+cmVxX291dCA9IDA7CisKKwlJTklUX0xJU1RfSEVBRCgmYmxvY2twb29sLT5mcmVlX2Jsb2NrX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZibG9ja3Bvb2wtPmZyZWVfZW50cnlfbGlzdCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcG9vbF9zaXplICsgcG9vbF9tYXg7IGkrKykgeworCQllbnRyeSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sX2VudHJ5KSwKKwkJCQlHRlBfS0VSTkVMKTsKKwkJaWYgKGVudHJ5ID09IE5VTEwpIHsKKwkJCV9fdnhnZV9od19ibG9ja3Bvb2xfZGVzdHJveShibG9ja3Bvb2wpOworCQkJc3RhdHVzID0gVlhHRV9IV19FUlJfT1VUX09GX01FTU9SWTsKKwkJCWdvdG8gYmxvY2twb29sX2NyZWF0ZV9leGl0OworCQl9CisJCWxpc3RfYWRkKCZlbnRyeS0+aXRlbSwgJmJsb2NrcG9vbC0+ZnJlZV9lbnRyeV9saXN0KTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgcG9vbF9zaXplOyBpKyspIHsKKwkJbWVtYmxvY2sgPSB2eGdlX29zX2RtYV9tYWxsb2MoCisJCQkJaGxkZXYtPnBkZXYsCisJCQkJVlhHRV9IV19CTE9DS19TSVpFLAorCQkJCSZkbWFfaGFuZGxlLAorCQkJCSZhY2NfaGFuZGxlKTsKKwkJaWYgKG1lbWJsb2NrID09IE5VTEwpIHsKKwkJCV9fdnhnZV9od19ibG9ja3Bvb2xfZGVzdHJveShibG9ja3Bvb2wpOworCQkJc3RhdHVzID0gVlhHRV9IV19FUlJfT1VUX09GX01FTU9SWTsKKwkJCWdvdG8gYmxvY2twb29sX2NyZWF0ZV9leGl0OworCQl9CisKKwkJZG1hX2FkZHIgPSBwY2lfbWFwX3NpbmdsZShobGRldi0+cGRldiwgbWVtYmxvY2ssCisJCQkJVlhHRV9IV19CTE9DS19TSVpFLCBQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOworCQlpZiAodW5saWtlbHkocGNpX2RtYV9tYXBwaW5nX2Vycm9yKGhsZGV2LT5wZGV2LAorCQkJCWRtYV9hZGRyKSkpIHsKKwkJCXZ4Z2Vfb3NfZG1hX2ZyZWUoaGxkZXYtPnBkZXYsIG1lbWJsb2NrLCAmYWNjX2hhbmRsZSk7CisJCQlfX3Z4Z2VfaHdfYmxvY2twb29sX2Rlc3Ryb3koYmxvY2twb29sKTsKKwkJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX09VVF9PRl9NRU1PUlk7CisJCQlnb3RvIGJsb2NrcG9vbF9jcmVhdGVfZXhpdDsKKwkJfQorCisJCWlmICghbGlzdF9lbXB0eSgmYmxvY2twb29sLT5mcmVlX2VudHJ5X2xpc3QpKQorCQkJZW50cnkgPSAoc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2xfZW50cnkgKikKKwkJCQlsaXN0X2ZpcnN0X2VudHJ5KCZibG9ja3Bvb2wtPmZyZWVfZW50cnlfbGlzdCwKKwkJCQkJc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2xfZW50cnksCisJCQkJCWl0ZW0pOworCisJCWlmIChlbnRyeSA9PSBOVUxMKQorCQkJZW50cnkgPQorCQkJICAgIGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sX2VudHJ5KSwKKwkJCQkJR0ZQX0tFUk5FTCk7CisJCWlmIChlbnRyeSAhPSBOVUxMKSB7CisJCQlsaXN0X2RlbCgmZW50cnktPml0ZW0pOworCQkJZW50cnktPmxlbmd0aCA9IFZYR0VfSFdfQkxPQ0tfU0laRTsKKwkJCWVudHJ5LT5tZW1ibG9jayA9IG1lbWJsb2NrOworCQkJZW50cnktPmRtYV9hZGRyID0gZG1hX2FkZHI7CisJCQllbnRyeS0+YWNjX2hhbmRsZSA9IGFjY19oYW5kbGU7CisJCQllbnRyeS0+ZG1hX2hhbmRsZSA9IGRtYV9oYW5kbGU7CisJCQlsaXN0X2FkZCgmZW50cnktPml0ZW0sCisJCQkJCSAgJmJsb2NrcG9vbC0+ZnJlZV9ibG9ja19saXN0KTsKKwkJCWJsb2NrcG9vbC0+cG9vbF9zaXplKys7CisJCX0gZWxzZSB7CisJCQlfX3Z4Z2VfaHdfYmxvY2twb29sX2Rlc3Ryb3koYmxvY2twb29sKTsKKwkJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX09VVF9PRl9NRU1PUlk7CisJCQlnb3RvIGJsb2NrcG9vbF9jcmVhdGVfZXhpdDsKKwkJfQorCX0KKworYmxvY2twb29sX2NyZWF0ZV9leGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfZGV2aWNlX2ZpZm9fY29uZmlnX2NoZWNrIC0gQ2hlY2sgZmlmbyBjb25maWd1cmF0aW9uLgorICogQ2hlY2sgdGhlIGZpZm8gY29uZmlndXJhdGlvbgorICovCitzdGF0aWMgZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X2RldmljZV9maWZvX2NvbmZpZ19jaGVjayhzdHJ1Y3QgdnhnZV9od19maWZvX2NvbmZpZyAqZmlmb19jb25maWcpCit7CisJaWYgKChmaWZvX2NvbmZpZy0+Zmlmb19ibG9ja3MgPCBWWEdFX0hXX01JTl9GSUZPX0JMT0NLUykgfHwKKwkgICAgKGZpZm9fY29uZmlnLT5maWZvX2Jsb2NrcyA+IFZYR0VfSFdfTUFYX0ZJRk9fQkxPQ0tTKSkKKwkJcmV0dXJuIFZYR0VfSFdfQkFEQ0ZHX0ZJRk9fQkxPQ0tTOworCisJcmV0dXJuIFZYR0VfSFdfT0s7Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfZGV2aWNlX3ZwYXRoX2NvbmZpZ19jaGVjayAtIENoZWNrIHZwYXRoIGNvbmZpZ3VyYXRpb24uCisgKiBDaGVjayB0aGUgdnBhdGggY29uZmlndXJhdGlvbgorICovCitzdGF0aWMgZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X2RldmljZV92cGF0aF9jb25maWdfY2hlY2soc3RydWN0IHZ4Z2VfaHdfdnBfY29uZmlnICp2cF9jb25maWcpCit7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXM7CisKKwlpZiAoKHZwX2NvbmZpZy0+bWluX2JhbmR3aWR0aCA8IFZYR0VfSFdfVlBBVEhfQkFORFdJRFRIX01JTikgfHwKKwkgICAgKHZwX2NvbmZpZy0+bWluX2JhbmR3aWR0aCA+CVZYR0VfSFdfVlBBVEhfQkFORFdJRFRIX01BWCkpCisJCXJldHVybiBWWEdFX0hXX0JBRENGR19WUEFUSF9NSU5fQkFORFdJRFRIOworCisJc3RhdHVzID0gX192eGdlX2h3X2RldmljZV9maWZvX2NvbmZpZ19jaGVjaygmdnBfY29uZmlnLT5maWZvKTsKKwlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCisJCXJldHVybiBzdGF0dXM7CisKKwlpZiAoKHZwX2NvbmZpZy0+bXR1ICE9IFZYR0VfSFdfVlBBVEhfVVNFX0ZMQVNIX0RFRkFVTFRfSU5JVElBTF9NVFUpICYmCisJCSgodnBfY29uZmlnLT5tdHUgPCBWWEdFX0hXX1ZQQVRIX01JTl9JTklUSUFMX01UVSkgfHwKKwkJKHZwX2NvbmZpZy0+bXR1ID4gVlhHRV9IV19WUEFUSF9NQVhfSU5JVElBTF9NVFUpKSkKKwkJcmV0dXJuIFZYR0VfSFdfQkFEQ0ZHX1ZQQVRIX01UVTsKKworCWlmICgodnBfY29uZmlnLT5ycGFfc3RyaXBfdmxhbl90YWcgIT0KKwkJVlhHRV9IV19WUEFUSF9SUEFfU1RSSVBfVkxBTl9UQUdfVVNFX0ZMQVNIX0RFRkFVTFQpICYmCisJCSh2cF9jb25maWctPnJwYV9zdHJpcF92bGFuX3RhZyAhPQorCQlWWEdFX0hXX1ZQQVRIX1JQQV9TVFJJUF9WTEFOX1RBR19FTkFCTEUpICYmCisJCSh2cF9jb25maWctPnJwYV9zdHJpcF92bGFuX3RhZyAhPQorCQlWWEdFX0hXX1ZQQVRIX1JQQV9TVFJJUF9WTEFOX1RBR19ESVNBQkxFKSkKKwkJcmV0dXJuIFZYR0VfSFdfQkFEQ0ZHX1ZQQVRIX1JQQV9TVFJJUF9WTEFOX1RBRzsKKworCXJldHVybiBWWEdFX0hXX09LOworfQorCisvKgorICogX192eGdlX2h3X2RldmljZV9jb25maWdfY2hlY2sgLSBDaGVjayBkZXZpY2UgY29uZmlndXJhdGlvbi4KKyAqIENoZWNrIHRoZSBkZXZpY2UgY29uZmlndXJhdGlvbgorICovCitzdGF0aWMgZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X2RldmljZV9jb25maWdfY2hlY2soc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX2NvbmZpZyAqbmV3X2NvbmZpZykKK3sKKwl1MzIgaTsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1czsKKworCWlmICgobmV3X2NvbmZpZy0+aW50cl9tb2RlICE9IFZYR0VfSFdfSU5UUl9NT0RFX0lSUUxJTkUpICYmCisJICAgIChuZXdfY29uZmlnLT5pbnRyX21vZGUgIT0gVlhHRV9IV19JTlRSX01PREVfTVNJWCkgJiYKKwkgICAgKG5ld19jb25maWctPmludHJfbW9kZSAhPSBWWEdFX0hXX0lOVFJfTU9ERV9NU0lYX09ORV9TSE9UKSAmJgorCSAgICAobmV3X2NvbmZpZy0+aW50cl9tb2RlICE9IFZYR0VfSFdfSU5UUl9NT0RFX0RFRikpCisJCXJldHVybiBWWEdFX0hXX0JBRENGR19JTlRSX01PREU7CisKKwlpZiAoKG5ld19jb25maWctPnJ0c19tYWNfZW4gIT0gVlhHRV9IV19SVFNfTUFDX0RJU0FCTEUpICYmCisJICAgIChuZXdfY29uZmlnLT5ydHNfbWFjX2VuICE9IFZYR0VfSFdfUlRTX01BQ19FTkFCTEUpKQorCQlyZXR1cm4gVlhHRV9IV19CQURDRkdfUlRTX01BQ19FTjsKKworCWZvciAoaSA9IDA7IGkgPCBWWEdFX0hXX01BWF9WSVJUVUFMX1BBVEhTOyBpKyspIHsKKwkJc3RhdHVzID0gX192eGdlX2h3X2RldmljZV92cGF0aF9jb25maWdfY2hlY2soCisJCQkJJm5ld19jb25maWctPnZwX2NvbmZpZ1tpXSk7CisJCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJCXJldHVybiBzdGF0dXM7CisJfQorCisJcmV0dXJuIFZYR0VfSFdfT0s7Cit9CisKKy8qCiAgKiB2eGdlX2h3X2RldmljZV9pbml0aWFsaXplIC0gSW5pdGlhbGl6ZSBUaXRhbiBkZXZpY2UuCiAgKiBJbml0aWFsaXplIFRpdGFuIGRldmljZS4gTm90ZSB0aGF0IGFsbCB0aGUgYXJndW1lbnRzIG9mIHRoaXMgcHVibGljIEFQSQogICogYXJlICdJTicsIGluY2x1ZGluZyBAaGxkZXYuIERyaXZlciBjb29wZXJhdGVzIHdpdGgKQEAgLTc3NiwxNCArMTMzOCwxMiBAQAogCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKIAkJZ290byBleGl0OwogCi0JaGxkZXYgPSAoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKikKLQkJCXZtYWxsb2Moc2l6ZW9mKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlKSk7CisJaGxkZXYgPSB2emFsbG9jKHNpemVvZihzdHJ1Y3QgX192eGdlX2h3X2RldmljZSkpOwogCWlmIChobGRldiA9PSBOVUxMKSB7CiAJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX09VVF9PRl9NRU1PUlk7CiAJCWdvdG8gZXhpdDsKIAl9CiAKLQltZW1zZXQoaGxkZXYsIDAsIHNpemVvZihzdHJ1Y3QgX192eGdlX2h3X2RldmljZSkpOwogCWhsZGV2LT5tYWdpYyA9IFZYR0VfSFdfREVWSUNFX01BR0lDOwogCiAJdnhnZV9od19kZXZpY2VfZGVidWdfc2V0KGhsZGV2LCBWWEdFX0VSUiwgVlhHRV9DT01QT05FTlRfQUxMKTsKQEAgLTgwNiw3ICsxMzY2LDYgQEAKIAkJdmZyZWUoaGxkZXYpOwogCQlnb3RvIGV4aXQ7CiAJfQotCV9fdnhnZV9od19kZXZpY2VfaWRfZ2V0KGhsZGV2KTsKIAogCV9fdnhnZV9od19kZXZpY2VfaG9zdF9pbmZvX2dldChobGRldik7CiAKQEAgLTgxNCw3ICsxMzczLDYgQEAKIAluYmxvY2tzKys7CiAKIAlmb3IgKGkgPSAwOyBpIDwgVlhHRV9IV19NQVhfVklSVFVBTF9QQVRIUzsgaSsrKSB7Ci0KIAkJaWYgKCEoaGxkZXYtPnZwYXRoX2Fzc2lnbm1lbnRzICYgdnhnZV9tQklUKGkpKSkKIAkJCWNvbnRpbnVlOwogCkBAIC04MzksNyArMTM5Nyw2IEBACiAJfQogCiAJc3RhdHVzID0gX192eGdlX2h3X2RldmljZV9pbml0aWFsaXplKGhsZGV2KTsKLQogCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykgewogCQl2eGdlX2h3X2RldmljZV90ZXJtaW5hdGUoaGxkZXYpOwogCQlnb3RvIGV4aXQ7CkBAIC04NjUsNiArMTQyMiwyNDIgQEAKIH0KIAogLyoKKyAqIF9fdnhnZV9od192cGF0aF9zdGF0c19hY2Nlc3MgLSBHZXQgdGhlIHN0YXRpc3RpY3MgZnJvbSB0aGUgZ2l2ZW4gbG9jYXRpb24KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIG9mZnNldCBhbmQgcGVyZm9ybSBhbiBvcGVyYXRpb24KKyAqLworc3RhdGljIGVudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od192cGF0aF9zdGF0c19hY2Nlc3Moc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aCAqdnBhdGgsCisJCQkgICAgIHUzMiBvcGVyYXRpb24sIHUzMiBvZmZzZXQsIHU2NCAqc3RhdCkKK3sKKwl1NjQgdmFsNjQ7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCXN0cnVjdCB2eGdlX2h3X3ZwYXRoX3JlZyBfX2lvbWVtICp2cF9yZWc7CisKKwlpZiAodnBhdGgtPnZwX29wZW4gPT0gVlhHRV9IV19WUF9OT1RfT1BFTikgeworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9WUEFUSF9OT1RfT1BFTjsKKwkJZ290byB2cGF0aF9zdGF0c19hY2Nlc3NfZXhpdDsKKwl9CisKKwl2cF9yZWcgPSB2cGF0aC0+dnBfcmVnOworCisJdmFsNjQgPSAgVlhHRV9IV19YTUFDX1NUQVRTX0FDQ0VTU19DTURfT1Aob3BlcmF0aW9uKSB8CisJCSBWWEdFX0hXX1hNQUNfU1RBVFNfQUNDRVNTX0NNRF9TVFJPQkUgfAorCQkgVlhHRV9IV19YTUFDX1NUQVRTX0FDQ0VTU19DTURfT0ZGU0VUX1NFTChvZmZzZXQpOworCisJc3RhdHVzID0gX192eGdlX2h3X3Bpb19tZW1fd3JpdGU2NCh2YWw2NCwKKwkJCQkmdnBfcmVnLT54bWFjX3N0YXRzX2FjY2Vzc19jbWQsCisJCQkJVlhHRV9IV19YTUFDX1NUQVRTX0FDQ0VTU19DTURfU1RST0JFLAorCQkJCXZwYXRoLT5obGRldi0+Y29uZmlnLmRldmljZV9wb2xsX21pbGxpcyk7CisJaWYgKChzdGF0dXMgPT0gVlhHRV9IV19PSykgJiYgKG9wZXJhdGlvbiA9PSBWWEdFX0hXX1NUQVRTX09QX1JFQUQpKQorCQkqc3RhdCA9IHJlYWRxKCZ2cF9yZWctPnhtYWNfc3RhdHNfYWNjZXNzX2RhdGEpOworCWVsc2UKKwkJKnN0YXQgPSAwOworCit2cGF0aF9zdGF0c19hY2Nlc3NfZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogX192eGdlX2h3X3ZwYXRoX3htYWNfdHhfc3RhdHNfZ2V0IC0gR2V0IHRoZSBUWCBTdGF0aXN0aWNzIG9mIGEgdnBhdGgKKyAqLworc3RhdGljIGVudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od192cGF0aF94bWFjX3R4X3N0YXRzX2dldChzdHJ1Y3QgX192eGdlX2h3X3ZpcnR1YWxwYXRoICp2cGF0aCwKKwkJCXN0cnVjdCB2eGdlX2h3X3htYWNfdnBhdGhfdHhfc3RhdHMgKnZwYXRoX3R4X3N0YXRzKQoreworCXU2NCAqdmFsNjQ7CisJaW50IGk7CisJdTMyIG9mZnNldCA9IFZYR0VfSFdfU1RBVFNfVlBBVEhfVFhfT0ZGU0VUOworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKworCXZhbDY0ID0gKHU2NCAqKXZwYXRoX3R4X3N0YXRzOworCisJaWYgKHZwYXRoLT52cF9vcGVuID09IFZYR0VfSFdfVlBfTk9UX09QRU4pIHsKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfVlBBVEhfTk9UX09QRU47CisJCWdvdG8gZXhpdDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHN0cnVjdCB2eGdlX2h3X3htYWNfdnBhdGhfdHhfc3RhdHMpIC8gODsgaSsrKSB7CisJCXN0YXR1cyA9IF9fdnhnZV9od192cGF0aF9zdGF0c19hY2Nlc3ModnBhdGgsCisJCQkJCVZYR0VfSFdfU1RBVFNfT1BfUkVBRCwKKwkJCQkJb2Zmc2V0LCB2YWw2NCk7CisJCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJCWdvdG8gZXhpdDsKKwkJb2Zmc2V0Kys7CisJCXZhbDY0Kys7CisJfQorZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogX192eGdlX2h3X3ZwYXRoX3htYWNfcnhfc3RhdHNfZ2V0IC0gR2V0IHRoZSBSWCBTdGF0aXN0aWNzIG9mIGEgdnBhdGgKKyAqLworc3RhdGljIGVudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od192cGF0aF94bWFjX3J4X3N0YXRzX2dldChzdHJ1Y3QgX192eGdlX2h3X3ZpcnR1YWxwYXRoICp2cGF0aCwKKwkJCXN0cnVjdCB2eGdlX2h3X3htYWNfdnBhdGhfcnhfc3RhdHMgKnZwYXRoX3J4X3N0YXRzKQoreworCXU2NCAqdmFsNjQ7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCWludCBpOworCXUzMiBvZmZzZXQgPSBWWEdFX0hXX1NUQVRTX1ZQQVRIX1JYX09GRlNFVDsKKwl2YWw2NCA9ICh1NjQgKikgdnBhdGhfcnhfc3RhdHM7CisKKwlpZiAodnBhdGgtPnZwX29wZW4gPT0gVlhHRV9IV19WUF9OT1RfT1BFTikgeworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9WUEFUSF9OT1RfT1BFTjsKKwkJZ290byBleGl0OworCX0KKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHN0cnVjdCB2eGdlX2h3X3htYWNfdnBhdGhfcnhfc3RhdHMpIC8gODsgaSsrKSB7CisJCXN0YXR1cyA9IF9fdnhnZV9od192cGF0aF9zdGF0c19hY2Nlc3ModnBhdGgsCisJCQkJCVZYR0VfSFdfU1RBVFNfT1BfUkVBRCwKKwkJCQkJb2Zmc2V0ID4+IDMsIHZhbDY0KTsKKwkJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQkJZ290byBleGl0OworCisJCW9mZnNldCArPSA4OworCQl2YWw2NCsrOworCX0KK2V4aXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIF9fdnhnZV9od192cGF0aF9zdGF0c19nZXQgLSBHZXQgdGhlIHZwYXRoIGh3IHN0YXRpc3RpY3MuCisgKi8KK3N0YXRpYyBlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfdnBhdGhfc3RhdHNfZ2V0KHN0cnVjdCBfX3Z4Z2VfaHdfdmlydHVhbHBhdGggKnZwYXRoLAorCQkJICBzdHJ1Y3QgdnhnZV9od192cGF0aF9zdGF0c19od19pbmZvICpod19zdGF0cykKK3sKKwl1NjQgdmFsNjQ7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCXN0cnVjdCB2eGdlX2h3X3ZwYXRoX3JlZyBfX2lvbWVtICp2cF9yZWc7CisKKwlpZiAodnBhdGgtPnZwX29wZW4gPT0gVlhHRV9IV19WUF9OT1RfT1BFTikgeworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9WUEFUSF9OT1RfT1BFTjsKKwkJZ290byBleGl0OworCX0KKwl2cF9yZWcgPSB2cGF0aC0+dnBfcmVnOworCisJdmFsNjQgPSByZWFkcSgmdnBfcmVnLT52cGF0aF9kZWJ1Z19zdGF0czApOworCWh3X3N0YXRzLT5pbmlfbnVtX213cl9zZW50ID0KKwkJKHUzMilWWEdFX0hXX1ZQQVRIX0RFQlVHX1NUQVRTMF9HRVRfSU5JX05VTV9NV1JfU0VOVCh2YWw2NCk7CisKKwl2YWw2NCA9IHJlYWRxKCZ2cF9yZWctPnZwYXRoX2RlYnVnX3N0YXRzMSk7CisJaHdfc3RhdHMtPmluaV9udW1fbXJkX3NlbnQgPQorCQkodTMyKVZYR0VfSFdfVlBBVEhfREVCVUdfU1RBVFMxX0dFVF9JTklfTlVNX01SRF9TRU5UKHZhbDY0KTsKKworCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+dnBhdGhfZGVidWdfc3RhdHMyKTsKKwlod19zdGF0cy0+aW5pX251bV9jcGxfcmN2ZCA9CisJCSh1MzIpVlhHRV9IV19WUEFUSF9ERUJVR19TVEFUUzJfR0VUX0lOSV9OVU1fQ1BMX1JDVkQodmFsNjQpOworCisJdmFsNjQgPSByZWFkcSgmdnBfcmVnLT52cGF0aF9kZWJ1Z19zdGF0czMpOworCWh3X3N0YXRzLT5pbmlfbnVtX213cl9ieXRlX3NlbnQgPQorCQlWWEdFX0hXX1ZQQVRIX0RFQlVHX1NUQVRTM19HRVRfSU5JX05VTV9NV1JfQllURV9TRU5UKHZhbDY0KTsKKworCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+dnBhdGhfZGVidWdfc3RhdHM0KTsKKwlod19zdGF0cy0+aW5pX251bV9jcGxfYnl0ZV9yY3ZkID0KKwkJVlhHRV9IV19WUEFUSF9ERUJVR19TVEFUUzRfR0VUX0lOSV9OVU1fQ1BMX0JZVEVfUkNWRCh2YWw2NCk7CisKKwl2YWw2NCA9IHJlYWRxKCZ2cF9yZWctPnZwYXRoX2RlYnVnX3N0YXRzNSk7CisJaHdfc3RhdHMtPndyY3JkdGFyYl94b2ZmID0KKwkJKHUzMilWWEdFX0hXX1ZQQVRIX0RFQlVHX1NUQVRTNV9HRVRfV1JDUkRUQVJCX1hPRkYodmFsNjQpOworCisJdmFsNjQgPSByZWFkcSgmdnBfcmVnLT52cGF0aF9kZWJ1Z19zdGF0czYpOworCWh3X3N0YXRzLT5yZGNyZHRhcmJfeG9mZiA9CisJCSh1MzIpVlhHRV9IV19WUEFUSF9ERUJVR19TVEFUUzZfR0VUX1JEQ1JEVEFSQl9YT0ZGKHZhbDY0KTsKKworCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+dnBhdGhfZ2Vuc3RhdHNfY291bnQwMSk7CisJaHdfc3RhdHMtPnZwYXRoX2dlbnN0YXRzX2NvdW50MCA9CisJKHUzMilWWEdFX0hXX1ZQQVRIX0dFTlNUQVRTX0NPVU5UMDFfR0VUX1BQSUZfVlBBVEhfR0VOU1RBVFNfQ09VTlQwKAorCQl2YWw2NCk7CisKKwl2YWw2NCA9IHJlYWRxKCZ2cF9yZWctPnZwYXRoX2dlbnN0YXRzX2NvdW50MDEpOworCWh3X3N0YXRzLT52cGF0aF9nZW5zdGF0c19jb3VudDEgPQorCSh1MzIpVlhHRV9IV19WUEFUSF9HRU5TVEFUU19DT1VOVDAxX0dFVF9QUElGX1ZQQVRIX0dFTlNUQVRTX0NPVU5UMSgKKwkJdmFsNjQpOworCisJdmFsNjQgPSByZWFkcSgmdnBfcmVnLT52cGF0aF9nZW5zdGF0c19jb3VudDIzKTsKKwlod19zdGF0cy0+dnBhdGhfZ2Vuc3RhdHNfY291bnQyID0KKwkodTMyKVZYR0VfSFdfVlBBVEhfR0VOU1RBVFNfQ09VTlQyM19HRVRfUFBJRl9WUEFUSF9HRU5TVEFUU19DT1VOVDIoCisJCXZhbDY0KTsKKworCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+dnBhdGhfZ2Vuc3RhdHNfY291bnQwMSk7CisJaHdfc3RhdHMtPnZwYXRoX2dlbnN0YXRzX2NvdW50MyA9CisJKHUzMilWWEdFX0hXX1ZQQVRIX0dFTlNUQVRTX0NPVU5UMjNfR0VUX1BQSUZfVlBBVEhfR0VOU1RBVFNfQ09VTlQzKAorCQl2YWw2NCk7CisKKwl2YWw2NCA9IHJlYWRxKCZ2cF9yZWctPnZwYXRoX2dlbnN0YXRzX2NvdW50NCk7CisJaHdfc3RhdHMtPnZwYXRoX2dlbnN0YXRzX2NvdW50NCA9CisJKHUzMilWWEdFX0hXX1ZQQVRIX0dFTlNUQVRTX0NPVU5UNF9HRVRfUFBJRl9WUEFUSF9HRU5TVEFUU19DT1VOVDQoCisJCXZhbDY0KTsKKworCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+dnBhdGhfZ2Vuc3RhdHNfY291bnQ1KTsKKwlod19zdGF0cy0+dnBhdGhfZ2Vuc3RhdHNfY291bnQ1ID0KKwkodTMyKVZYR0VfSFdfVlBBVEhfR0VOU1RBVFNfQ09VTlQ1X0dFVF9QUElGX1ZQQVRIX0dFTlNUQVRTX0NPVU5UNSgKKwkJdmFsNjQpOworCisJc3RhdHVzID0gX192eGdlX2h3X3ZwYXRoX3htYWNfdHhfc3RhdHNfZ2V0KHZwYXRoLCAmaHdfc3RhdHMtPnR4X3N0YXRzKTsKKwlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCisJCWdvdG8gZXhpdDsKKworCXN0YXR1cyA9IF9fdnhnZV9od192cGF0aF94bWFjX3J4X3N0YXRzX2dldCh2cGF0aCwgJmh3X3N0YXRzLT5yeF9zdGF0cyk7CisJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQlnb3RvIGV4aXQ7CisKKwlWWEdFX0hXX1ZQQVRIX1NUQVRTX1BJT19SRUFEKAorCQlWWEdFX0hXX1NUQVRTX1ZQQVRIX1BST0dfRVZFTlRfVk5VTTBfT0ZGU0VUKTsKKworCWh3X3N0YXRzLT5wcm9nX2V2ZW50X3ZudW0wID0KKwkJCSh1MzIpVlhHRV9IV19TVEFUU19HRVRfVlBBVEhfUFJPR19FVkVOVF9WTlVNMCh2YWw2NCk7CisKKwlod19zdGF0cy0+cHJvZ19ldmVudF92bnVtMSA9CisJCQkodTMyKVZYR0VfSFdfU1RBVFNfR0VUX1ZQQVRIX1BST0dfRVZFTlRfVk5VTTEodmFsNjQpOworCisJVlhHRV9IV19WUEFUSF9TVEFUU19QSU9fUkVBRCgKKwkJVlhHRV9IV19TVEFUU19WUEFUSF9QUk9HX0VWRU5UX1ZOVU0yX09GRlNFVCk7CisKKwlod19zdGF0cy0+cHJvZ19ldmVudF92bnVtMiA9CisJCQkodTMyKVZYR0VfSFdfU1RBVFNfR0VUX1ZQQVRIX1BST0dfRVZFTlRfVk5VTTIodmFsNjQpOworCisJaHdfc3RhdHMtPnByb2dfZXZlbnRfdm51bTMgPQorCQkJKHUzMilWWEdFX0hXX1NUQVRTX0dFVF9WUEFUSF9QUk9HX0VWRU5UX1ZOVU0zKHZhbDY0KTsKKworCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+cnhfbXVsdGlfY2FzdF9zdGF0cyk7CisJaHdfc3RhdHMtPnJ4X211bHRpX2Nhc3RfZnJhbWVfZGlzY2FyZCA9CisJCSh1MTYpVlhHRV9IV19SWF9NVUxUSV9DQVNUX1NUQVRTX0dFVF9GUkFNRV9ESVNDQVJEKHZhbDY0KTsKKworCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+cnhfZnJtX3RyYW5zZmVycmVkKTsKKwlod19zdGF0cy0+cnhfZnJtX3RyYW5zZmVycmVkID0KKwkJKHUzMilWWEdFX0hXX1JYX0ZSTV9UUkFOU0ZFUlJFRF9HRVRfUlhfRlJNX1RSQU5TRkVSUkVEKHZhbDY0KTsKKworCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+cnhkX3JldHVybmVkKTsKKwlod19zdGF0cy0+cnhkX3JldHVybmVkID0KKwkJKHUxNilWWEdFX0hXX1JYRF9SRVRVUk5FRF9HRVRfUlhEX1JFVFVSTkVEKHZhbDY0KTsKKworCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+ZGJnX3N0YXRzX3J4X21wYSk7CisJaHdfc3RhdHMtPnJ4X21wYV9sZW5fZmFpbF9mcm1zID0KKwkJKHUxNilWWEdFX0hXX0RCR19TVEFUU19HRVRfUlhfTVBBX0xFTl9GQUlMX0ZSTVModmFsNjQpOworCWh3X3N0YXRzLT5yeF9tcGFfbXJrX2ZhaWxfZnJtcyA9CisJCSh1MTYpVlhHRV9IV19EQkdfU1RBVFNfR0VUX1JYX01QQV9NUktfRkFJTF9GUk1TKHZhbDY0KTsKKwlod19zdGF0cy0+cnhfbXBhX2NyY19mYWlsX2ZybXMgPQorCQkodTE2KVZYR0VfSFdfREJHX1NUQVRTX0dFVF9SWF9NUEFfQ1JDX0ZBSUxfRlJNUyh2YWw2NCk7CisKKwl2YWw2NCA9IHJlYWRxKCZ2cF9yZWctPmRiZ19zdGF0c19yeF9mYXUpOworCWh3X3N0YXRzLT5yeF9wZXJtaXR0ZWRfZnJtcyA9CisJCSh1MTYpVlhHRV9IV19EQkdfU1RBVFNfR0VUX1JYX0ZBVV9SWF9QRVJNSVRURURfRlJNUyh2YWw2NCk7CisJaHdfc3RhdHMtPnJ4X3ZwX3Jlc2V0X2Rpc2NhcmRlZF9mcm1zID0KKwkodTE2KVZYR0VfSFdfREJHX1NUQVRTX0dFVF9SWF9GQVVfUlhfVlBfUkVTRVRfRElTQ0FSREVEX0ZSTVModmFsNjQpOworCWh3X3N0YXRzLT5yeF93b2xfZnJtcyA9CisJCSh1MTYpVlhHRV9IV19EQkdfU1RBVFNfR0VUX1JYX0ZBVV9SWF9XT0xfRlJNUyh2YWw2NCk7CisKKwl2YWw2NCA9IHJlYWRxKCZ2cF9yZWctPnR4X3ZwX3Jlc2V0X2Rpc2NhcmRlZF9mcm1zKTsKKwlod19zdGF0cy0+dHhfdnBfcmVzZXRfZGlzY2FyZGVkX2ZybXMgPQorCSh1MTYpVlhHRV9IV19UWF9WUF9SRVNFVF9ESVNDQVJERURfRlJNU19HRVRfVFhfVlBfUkVTRVRfRElTQ0FSREVEX0ZSTVMoCisJCXZhbDY0KTsKK2V4aXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKICAqIHZ4Z2VfaHdfZGV2aWNlX3N0YXRzX2dldCAtIEdldCB0aGUgZGV2aWNlIGh3IHN0YXRpc3RpY3MuCiAgKiBSZXR1cm5zIHRoZSB2cGF0aCBoL3cgc3RhdHMgZm9yIHRoZSBkZXZpY2UuCiAgKi8KQEAgLTg3Niw3ICsxNjY5LDYgQEAKIAllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CiAKIAlmb3IgKGkgPSAwOyBpIDwgVlhHRV9IV19NQVhfVklSVFVBTF9QQVRIUzsgaSsrKSB7Ci0KIAkJaWYgKCEoaGxkZXYtPnZwYXRoc19kZXBsb3llZCAmIHZ4Z2VfbUJJVChpKSkgfHwKIAkJCShobGRldi0+dmlydHVhbF9wYXRoc1tpXS52cF9vcGVuID09CiAJCQkJVlhHRV9IV19WUF9OT1RfT1BFTikpCkBAIC0xMDMxLDcgKzE4MjMsNiBAQAogCiAJc3RhdHVzID0gdnhnZV9od19kZXZpY2VfeG1hY19hZ2dyX3N0YXRzX2dldChobGRldiwKIAkJCQkJMCwgJnhtYWNfc3RhdHMtPmFnZ3Jfc3RhdHNbMF0pOwotCiAJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQogCQlnb3RvIGV4aXQ7CiAKQEAgLTExNjUsNyArMTk1Niw2IEBACiAgKiBJdCBjYW4gYmUgdXNlZCB0byBzZXQgb3IgcmVzZXQgUGF1c2UgZnJhbWUgZ2VuZXJhdGlvbiBvciByZWNlcHRpb24KICAqIHN1cHBvcnQgb2YgdGhlIE5JQy4KICAqLwotCiBlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfaHdfZGV2aWNlX3NldHBhdXNlX2RhdGEoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2LAogCQkJCQkJIHUzMiBwb3J0LCB1MzIgdHgsIHUzMiByeCkKIHsKQEAgLTE0MDcsMTE1ICsyMTk3LDU1MCBAQAogfQogCiAvKgotICogX192eGdlX2h3X3JpbmdfY3JlYXRlIC0gQ3JlYXRlIGEgUmluZwotICogVGhpcyBmdW5jdGlvbiBjcmVhdGVzIFJpbmcgYW5kIGluaXRpYWxpemVzIGl0LgotICoKKyAqIF9fdnhnZV9od19jaGFubmVsX2FsbG9jYXRlIC0gQWxsb2NhdGUgbWVtb3J5IGZvciBjaGFubmVsCisgKiBUaGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyByZXF1aXJlZCBtZW1vcnkgZm9yIHRoZSBjaGFubmVsIGFuZCB2YXJpb3VzIGFycmF5cworICogaW4gdGhlIGNoYW5uZWwKICAqLwotc3RhdGljIGVudW0gdnhnZV9od19zdGF0dXMKLV9fdnhnZV9od19yaW5nX2NyZWF0ZShzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnAsCi0JCSAgICAgIHN0cnVjdCB2eGdlX2h3X3JpbmdfYXR0ciAqYXR0cikKK3N0YXRpYyBzdHJ1Y3QgX192eGdlX2h3X2NoYW5uZWwgKgorX192eGdlX2h3X2NoYW5uZWxfYWxsb2NhdGUoc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwaCwKKwkJCSAgIGVudW0gX192eGdlX2h3X2NoYW5uZWxfdHlwZSB0eXBlLAorCQkJICAgdTMyIGxlbmd0aCwgdTMyIHBlcl9kdHJfc3BhY2UsCisJCQkgICB2b2lkICp1c2VyZGF0YSkKIHsKLQllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7Ci0Jc3RydWN0IF9fdnhnZV9od19yaW5nICpyaW5nOwotCXUzMiByaW5nX2xlbmd0aDsKLQlzdHJ1Y3QgdnhnZV9od19yaW5nX2NvbmZpZyAqY29uZmlnOworCXN0cnVjdCBfX3Z4Z2VfaHdfY2hhbm5lbCAqY2hhbm5lbDsKIAlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXY7CisJaW50IHNpemUgPSAwOwogCXUzMiB2cF9pZDsKLQlzdHJ1Y3QgdnhnZV9od19tZW1wb29sX2NicyByaW5nX21wX2NhbGxiYWNrOwogCi0JaWYgKCh2cCA9PSBOVUxMKSB8fCAoYXR0ciA9PSBOVUxMKSkgeworCWhsZGV2ID0gdnBoLT52cGF0aC0+aGxkZXY7CisJdnBfaWQgPSB2cGgtPnZwYXRoLT52cF9pZDsKKworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgVlhHRV9IV19DSEFOTkVMX1RZUEVfRklGTzoKKwkJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgX192eGdlX2h3X2ZpZm8pOworCQlicmVhazsKKwljYXNlIFZYR0VfSFdfQ0hBTk5FTF9UWVBFX1JJTkc6CisJCXNpemUgPSBzaXplb2Yoc3RydWN0IF9fdnhnZV9od19yaW5nKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJY2hhbm5lbCA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNoYW5uZWwgPT0gTlVMTCkKKwkJZ290byBleGl0MDsKKwlJTklUX0xJU1RfSEVBRCgmY2hhbm5lbC0+aXRlbSk7CisKKwljaGFubmVsLT5jb21tb25fcmVnID0gaGxkZXYtPmNvbW1vbl9yZWc7CisJY2hhbm5lbC0+Zmlyc3RfdnBfaWQgPSBobGRldi0+Zmlyc3RfdnBfaWQ7CisJY2hhbm5lbC0+dHlwZSA9IHR5cGU7CisJY2hhbm5lbC0+ZGV2aCA9IGhsZGV2OworCWNoYW5uZWwtPnZwaCA9IHZwaDsKKwljaGFubmVsLT51c2VyZGF0YSA9IHVzZXJkYXRhOworCWNoYW5uZWwtPnBlcl9kdHJfc3BhY2UgPSBwZXJfZHRyX3NwYWNlOworCWNoYW5uZWwtPmxlbmd0aCA9IGxlbmd0aDsKKwljaGFubmVsLT52cF9pZCA9IHZwX2lkOworCisJY2hhbm5lbC0+d29ya19hcnIgPSBremFsbG9jKHNpemVvZih2b2lkICopKmxlbmd0aCwgR0ZQX0tFUk5FTCk7CisJaWYgKGNoYW5uZWwtPndvcmtfYXJyID09IE5VTEwpCisJCWdvdG8gZXhpdDE7CisKKwljaGFubmVsLT5mcmVlX2FyciA9IGt6YWxsb2Moc2l6ZW9mKHZvaWQgKikqbGVuZ3RoLCBHRlBfS0VSTkVMKTsKKwlpZiAoY2hhbm5lbC0+ZnJlZV9hcnIgPT0gTlVMTCkKKwkJZ290byBleGl0MTsKKwljaGFubmVsLT5mcmVlX3B0ciA9IGxlbmd0aDsKKworCWNoYW5uZWwtPnJlc2VydmVfYXJyID0ga3phbGxvYyhzaXplb2Yodm9pZCAqKSpsZW5ndGgsIEdGUF9LRVJORUwpOworCWlmIChjaGFubmVsLT5yZXNlcnZlX2FyciA9PSBOVUxMKQorCQlnb3RvIGV4aXQxOworCWNoYW5uZWwtPnJlc2VydmVfcHRyID0gbGVuZ3RoOworCWNoYW5uZWwtPnJlc2VydmVfdG9wID0gMDsKKworCWNoYW5uZWwtPm9yaWdfYXJyID0ga3phbGxvYyhzaXplb2Yodm9pZCAqKSpsZW5ndGgsIEdGUF9LRVJORUwpOworCWlmIChjaGFubmVsLT5vcmlnX2FyciA9PSBOVUxMKQorCQlnb3RvIGV4aXQxOworCisJcmV0dXJuIGNoYW5uZWw7CitleGl0MToKKwlfX3Z4Z2VfaHdfY2hhbm5lbF9mcmVlKGNoYW5uZWwpOworCitleGl0MDoKKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIHZ4Z2VfaHdfYmxvY2twb29sX2Jsb2NrX2FkZCAtIGNhbGxiYWNrIGZvciB2eGdlX29zX2RtYV9tYWxsb2NfYXN5bmMKKyAqIEFkZHMgYSBibG9jayB0byBibG9jayBwb29sCisgKi8KK3N0YXRpYyB2b2lkIHZ4Z2VfaHdfYmxvY2twb29sX2Jsb2NrX2FkZChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aCwKKwkJCQkJdm9pZCAqYmxvY2tfYWRkciwKKwkJCQkJdTMyIGxlbmd0aCwKKwkJCQkJc3RydWN0IHBjaV9kZXYgKmRtYV9oLAorCQkJCQlzdHJ1Y3QgcGNpX2RldiAqYWNjX2hhbmRsZSkKK3sKKwlzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbCAqYmxvY2twb29sOworCXN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sX2VudHJ5ICplbnRyeSA9IE5VTEw7CisJZG1hX2FkZHJfdCBkbWFfYWRkcjsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisJdTMyIHJlcV9vdXQ7CisKKwlibG9ja3Bvb2wgPSAmZGV2aC0+YmxvY2tfcG9vbDsKKworCWlmIChibG9ja19hZGRyID09IE5VTEwpIHsKKwkJYmxvY2twb29sLT5yZXFfb3V0LS07CiAJCXN0YXR1cyA9IFZYR0VfSFdfRkFJTDsKIAkJZ290byBleGl0OwogCX0KIAotCWhsZGV2ID0gdnAtPnZwYXRoLT5obGRldjsKLQl2cF9pZCA9IHZwLT52cGF0aC0+dnBfaWQ7CisJZG1hX2FkZHIgPSBwY2lfbWFwX3NpbmdsZShkZXZoLT5wZGV2LCBibG9ja19hZGRyLCBsZW5ndGgsCisJCQkJUENJX0RNQV9CSURJUkVDVElPTkFMKTsKIAotCWNvbmZpZyA9ICZobGRldi0+Y29uZmlnLnZwX2NvbmZpZ1t2cF9pZF0ucmluZzsKKwlpZiAodW5saWtlbHkocGNpX2RtYV9tYXBwaW5nX2Vycm9yKGRldmgtPnBkZXYsIGRtYV9hZGRyKSkpIHsKKwkJdnhnZV9vc19kbWFfZnJlZShkZXZoLT5wZGV2LCBibG9ja19hZGRyLCAmYWNjX2hhbmRsZSk7CisJCWJsb2NrcG9vbC0+cmVxX291dC0tOworCQlzdGF0dXMgPSBWWEdFX0hXX0ZBSUw7CisJCWdvdG8gZXhpdDsKKwl9CiAKLQlyaW5nX2xlbmd0aCA9IGNvbmZpZy0+cmluZ19ibG9ja3MgKgotCQkJdnhnZV9od19yaW5nX3J4ZHNfcGVyX2Jsb2NrX2dldChjb25maWctPmJ1ZmZlcl9tb2RlKTsKKwlpZiAoIWxpc3RfZW1wdHkoJmJsb2NrcG9vbC0+ZnJlZV9lbnRyeV9saXN0KSkKKwkJZW50cnkgPSAoc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2xfZW50cnkgKikKKwkJCWxpc3RfZmlyc3RfZW50cnkoJmJsb2NrcG9vbC0+ZnJlZV9lbnRyeV9saXN0LAorCQkJCXN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sX2VudHJ5LAorCQkJCWl0ZW0pOwogCi0JcmluZyA9IChzdHJ1Y3QgX192eGdlX2h3X3JpbmcgKilfX3Z4Z2VfaHdfY2hhbm5lbF9hbGxvY2F0ZSh2cCwKLQkJCQkJCVZYR0VfSFdfQ0hBTk5FTF9UWVBFX1JJTkcsCi0JCQkJCQlyaW5nX2xlbmd0aCwKLQkJCQkJCWF0dHItPnBlcl9yeGRfc3BhY2UsCi0JCQkJCQlhdHRyLT51c2VyZGF0YSk7CisJaWYgKGVudHJ5ID09IE5VTEwpCisJCWVudHJ5ID0Jdm1hbGxvYyhzaXplb2Yoc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2xfZW50cnkpKTsKKwllbHNlCisJCWxpc3RfZGVsKCZlbnRyeS0+aXRlbSk7CiAKLQlpZiAocmluZyA9PSBOVUxMKSB7CisJaWYgKGVudHJ5ICE9IE5VTEwpIHsKKwkJZW50cnktPmxlbmd0aCA9IGxlbmd0aDsKKwkJZW50cnktPm1lbWJsb2NrID0gYmxvY2tfYWRkcjsKKwkJZW50cnktPmRtYV9hZGRyID0gZG1hX2FkZHI7CisJCWVudHJ5LT5hY2NfaGFuZGxlID0gYWNjX2hhbmRsZTsKKwkJZW50cnktPmRtYV9oYW5kbGUgPSBkbWFfaDsKKwkJbGlzdF9hZGQoJmVudHJ5LT5pdGVtLCAmYmxvY2twb29sLT5mcmVlX2Jsb2NrX2xpc3QpOworCQlibG9ja3Bvb2wtPnBvb2xfc2l6ZSsrOworCQlzdGF0dXMgPSBWWEdFX0hXX09LOworCX0gZWxzZQorCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9PVVRfT0ZfTUVNT1JZOworCisJYmxvY2twb29sLT5yZXFfb3V0LS07CisKKwlyZXFfb3V0ID0gYmxvY2twb29sLT5yZXFfb3V0OworZXhpdDoKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAordnhnZV9vc19kbWFfbWFsbG9jX2FzeW5jKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB2b2lkICpkZXZoLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJZ2ZwX3QgZmxhZ3M7CisJdm9pZCAqdmFkZHI7CisKKwlpZiAoaW5faW50ZXJydXB0KCkpCisJCWZsYWdzID0gR0ZQX0FUT01JQyB8IEdGUF9ETUE7CisJZWxzZQorCQlmbGFncyA9IEdGUF9LRVJORUwgfCBHRlBfRE1BOworCisJdmFkZHIgPSBrbWFsbG9jKChzaXplKSwgZmxhZ3MpOworCisJdnhnZV9od19ibG9ja3Bvb2xfYmxvY2tfYWRkKGRldmgsIHZhZGRyLCBzaXplLCBwZGV2LCBwZGV2KTsKK30KKworLyoKKyAqIF9fdnhnZV9od19ibG9ja3Bvb2xfYmxvY2tzX2FkZCAtIFJlcXVlc3QgYWRkaXRpb25hbCBibG9ja3MKKyAqLworc3RhdGljCit2b2lkIF9fdnhnZV9od19ibG9ja3Bvb2xfYmxvY2tzX2FkZChzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbCAqYmxvY2twb29sKQoreworCXUzMiBucmVxID0gMCwgaTsKKworCWlmICgoYmxvY2twb29sLT5wb29sX3NpemUgICsgIGJsb2NrcG9vbC0+cmVxX291dCkgPAorCQlWWEdFX0hXX01JTl9ETUFfQkxPQ0tfUE9PTF9TSVpFKSB7CisJCW5yZXEgPSBWWEdFX0hXX0lOQ1JfRE1BX0JMT0NLX1BPT0xfU0laRTsKKwkJYmxvY2twb29sLT5yZXFfb3V0ICs9IG5yZXE7CisJfQorCisJZm9yIChpID0gMDsgaSA8IG5yZXE7IGkrKykKKwkJdnhnZV9vc19kbWFfbWFsbG9jX2FzeW5jKAorCQkJKChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqKWJsb2NrcG9vbC0+aGxkZXYpLT5wZGV2LAorCQkJYmxvY2twb29sLT5obGRldiwgVlhHRV9IV19CTE9DS19TSVpFKTsKK30KKworLyoKKyAqIF9fdnhnZV9od19ibG9ja3Bvb2xfbWFsbG9jIC0gQWxsb2NhdGUgYSBtZW1vcnkgYmxvY2sgZnJvbSBwb29sCisgKiBBbGxvY2F0ZXMgYSBibG9jayBvZiBtZW1vcnkgb2YgZ2l2ZW4gc2l6ZSwgZWl0aGVyIGZyb20gYmxvY2sgcG9vbAorICogb3IgYnkgY2FsbGluZyB2eGdlX29zX2RtYV9tYWxsb2MoKQorICovCitzdGF0aWMgdm9pZCAqX192eGdlX2h3X2Jsb2NrcG9vbF9tYWxsb2Moc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgsIHUzMiBzaXplLAorCQkJCQlzdHJ1Y3QgdnhnZV9od19tZW1wb29sX2RtYSAqZG1hX29iamVjdCkKK3sKKwlzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbF9lbnRyeSAqZW50cnkgPSBOVUxMOworCXN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sICAqYmxvY2twb29sOworCXZvaWQgKm1lbWJsb2NrID0gTlVMTDsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisKKwlibG9ja3Bvb2wgPSAmZGV2aC0+YmxvY2tfcG9vbDsKKworCWlmIChzaXplICE9IGJsb2NrcG9vbC0+YmxvY2tfc2l6ZSkgeworCisJCW1lbWJsb2NrID0gdnhnZV9vc19kbWFfbWFsbG9jKGRldmgtPnBkZXYsIHNpemUsCisJCQkJCQkmZG1hX29iamVjdC0+aGFuZGxlLAorCQkJCQkJJmRtYV9vYmplY3QtPmFjY19oYW5kbGUpOworCisJCWlmIChtZW1ibG9jayA9PSBOVUxMKSB7CisJCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9PVVRfT0ZfTUVNT1JZOworCQkJZ290byBleGl0OworCQl9CisKKwkJZG1hX29iamVjdC0+YWRkciA9IHBjaV9tYXBfc2luZ2xlKGRldmgtPnBkZXYsIG1lbWJsb2NrLCBzaXplLAorCQkJCQlQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOworCisJCWlmICh1bmxpa2VseShwY2lfZG1hX21hcHBpbmdfZXJyb3IoZGV2aC0+cGRldiwKKwkJCQlkbWFfb2JqZWN0LT5hZGRyKSkpIHsKKwkJCXZ4Z2Vfb3NfZG1hX2ZyZWUoZGV2aC0+cGRldiwgbWVtYmxvY2ssCisJCQkJJmRtYV9vYmplY3QtPmFjY19oYW5kbGUpOworCQkJc3RhdHVzID0gVlhHRV9IV19FUlJfT1VUX09GX01FTU9SWTsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCisJfSBlbHNlIHsKKworCQlpZiAoIWxpc3RfZW1wdHkoJmJsb2NrcG9vbC0+ZnJlZV9ibG9ja19saXN0KSkKKwkJCWVudHJ5ID0gKHN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sX2VudHJ5ICopCisJCQkJbGlzdF9maXJzdF9lbnRyeSgmYmxvY2twb29sLT5mcmVlX2Jsb2NrX2xpc3QsCisJCQkJCXN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sX2VudHJ5LAorCQkJCQlpdGVtKTsKKworCQlpZiAoZW50cnkgIT0gTlVMTCkgeworCQkJbGlzdF9kZWwoJmVudHJ5LT5pdGVtKTsKKwkJCWRtYV9vYmplY3QtPmFkZHIgPSBlbnRyeS0+ZG1hX2FkZHI7CisJCQlkbWFfb2JqZWN0LT5oYW5kbGUgPSBlbnRyeS0+ZG1hX2hhbmRsZTsKKwkJCWRtYV9vYmplY3QtPmFjY19oYW5kbGUgPSBlbnRyeS0+YWNjX2hhbmRsZTsKKwkJCW1lbWJsb2NrID0gZW50cnktPm1lbWJsb2NrOworCisJCQlsaXN0X2FkZCgmZW50cnktPml0ZW0sCisJCQkJJmJsb2NrcG9vbC0+ZnJlZV9lbnRyeV9saXN0KTsKKwkJCWJsb2NrcG9vbC0+cG9vbF9zaXplLS07CisJCX0KKworCQlpZiAobWVtYmxvY2sgIT0gTlVMTCkKKwkJCV9fdnhnZV9od19ibG9ja3Bvb2xfYmxvY2tzX2FkZChibG9ja3Bvb2wpOworCX0KK2V4aXQ6CisJcmV0dXJuIG1lbWJsb2NrOworfQorCisvKgorICogX192eGdlX2h3X2Jsb2NrcG9vbF9ibG9ja3NfcmVtb3ZlIC0gRnJlZSBhZGRpdGlvbmFsIGJsb2NrcworICovCitzdGF0aWMgdm9pZAorX192eGdlX2h3X2Jsb2NrcG9vbF9ibG9ja3NfcmVtb3ZlKHN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sICpibG9ja3Bvb2wpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqcCwgKm47CisKKwlsaXN0X2Zvcl9lYWNoX3NhZmUocCwgbiwgJmJsb2NrcG9vbC0+ZnJlZV9ibG9ja19saXN0KSB7CisKKwkJaWYgKGJsb2NrcG9vbC0+cG9vbF9zaXplIDwgYmxvY2twb29sLT5wb29sX21heCkKKwkJCWJyZWFrOworCisJCXBjaV91bm1hcF9zaW5nbGUoCisJCQkoKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICopYmxvY2twb29sLT5obGRldiktPnBkZXYsCisJCQkoKHN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sX2VudHJ5ICopcCktPmRtYV9hZGRyLAorCQkJKChzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbF9lbnRyeSAqKXApLT5sZW5ndGgsCisJCQlQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOworCisJCXZ4Z2Vfb3NfZG1hX2ZyZWUoCisJCQkoKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICopYmxvY2twb29sLT5obGRldiktPnBkZXYsCisJCQkoKHN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sX2VudHJ5ICopcCktPm1lbWJsb2NrLAorCQkJJigoc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2xfZW50cnkgKilwKS0+YWNjX2hhbmRsZSk7CisKKwkJbGlzdF9kZWwoJigoc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2xfZW50cnkgKilwKS0+aXRlbSk7CisKKwkJbGlzdF9hZGQocCwgJmJsb2NrcG9vbC0+ZnJlZV9lbnRyeV9saXN0KTsKKworCQlibG9ja3Bvb2wtPnBvb2xfc2l6ZS0tOworCisJfQorfQorCisvKgorICogX192eGdlX2h3X2Jsb2NrcG9vbF9mcmVlIC0gRnJlZXMgdGhlIG1lbW9yeSBhbGxjb2F0ZWQgd2l0aAorICoJCQkJX192eGdlX2h3X2Jsb2NrcG9vbF9tYWxsb2MKKyAqLworc3RhdGljIHZvaWQgX192eGdlX2h3X2Jsb2NrcG9vbF9mcmVlKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpkZXZoLAorCQkJCSAgICAgdm9pZCAqbWVtYmxvY2ssIHUzMiBzaXplLAorCQkJCSAgICAgc3RydWN0IHZ4Z2VfaHdfbWVtcG9vbF9kbWEgKmRtYV9vYmplY3QpCit7CisJc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2xfZW50cnkgKmVudHJ5ID0gTlVMTDsKKwlzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbCAgKmJsb2NrcG9vbDsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisKKwlibG9ja3Bvb2wgPSAmZGV2aC0+YmxvY2tfcG9vbDsKKworCWlmIChzaXplICE9IGJsb2NrcG9vbC0+YmxvY2tfc2l6ZSkgeworCQlwY2lfdW5tYXBfc2luZ2xlKGRldmgtPnBkZXYsIGRtYV9vYmplY3QtPmFkZHIsIHNpemUsCisJCQlQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOworCQl2eGdlX29zX2RtYV9mcmVlKGRldmgtPnBkZXYsIG1lbWJsb2NrLCAmZG1hX29iamVjdC0+YWNjX2hhbmRsZSk7CisJfSBlbHNlIHsKKworCQlpZiAoIWxpc3RfZW1wdHkoJmJsb2NrcG9vbC0+ZnJlZV9lbnRyeV9saXN0KSkKKwkJCWVudHJ5ID0gKHN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sX2VudHJ5ICopCisJCQkJbGlzdF9maXJzdF9lbnRyeSgmYmxvY2twb29sLT5mcmVlX2VudHJ5X2xpc3QsCisJCQkJCXN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sX2VudHJ5LAorCQkJCQlpdGVtKTsKKworCQlpZiAoZW50cnkgPT0gTlVMTCkKKwkJCWVudHJ5ID0Jdm1hbGxvYyhzaXplb2YoCisJCQkJCXN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sX2VudHJ5KSk7CisJCWVsc2UKKwkJCWxpc3RfZGVsKCZlbnRyeS0+aXRlbSk7CisKKwkJaWYgKGVudHJ5ICE9IE5VTEwpIHsKKwkJCWVudHJ5LT5sZW5ndGggPSBzaXplOworCQkJZW50cnktPm1lbWJsb2NrID0gbWVtYmxvY2s7CisJCQllbnRyeS0+ZG1hX2FkZHIgPSBkbWFfb2JqZWN0LT5hZGRyOworCQkJZW50cnktPmFjY19oYW5kbGUgPSBkbWFfb2JqZWN0LT5hY2NfaGFuZGxlOworCQkJZW50cnktPmRtYV9oYW5kbGUgPSBkbWFfb2JqZWN0LT5oYW5kbGU7CisJCQlsaXN0X2FkZCgmZW50cnktPml0ZW0sCisJCQkJCSZibG9ja3Bvb2wtPmZyZWVfYmxvY2tfbGlzdCk7CisJCQlibG9ja3Bvb2wtPnBvb2xfc2l6ZSsrOworCQkJc3RhdHVzID0gVlhHRV9IV19PSzsKKwkJfSBlbHNlCisJCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9PVVRfT0ZfTUVNT1JZOworCisJCWlmIChzdGF0dXMgPT0gVlhHRV9IV19PSykKKwkJCV9fdnhnZV9od19ibG9ja3Bvb2xfYmxvY2tzX3JlbW92ZShibG9ja3Bvb2wpOworCX0KK30KKworLyoKKyAqIHZ4Z2VfaHdfbWVtcG9vbF9kZXN0cm95CisgKi8KK3N0YXRpYyB2b2lkIF9fdnhnZV9od19tZW1wb29sX2Rlc3Ryb3koc3RydWN0IHZ4Z2VfaHdfbWVtcG9vbCAqbWVtcG9vbCkKK3sKKwl1MzIgaSwgajsKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aCA9IG1lbXBvb2wtPmRldmg7CisKKwlmb3IgKGkgPSAwOyBpIDwgbWVtcG9vbC0+bWVtYmxvY2tzX2FsbG9jYXRlZDsgaSsrKSB7CisJCXN0cnVjdCB2eGdlX2h3X21lbXBvb2xfZG1hICpkbWFfb2JqZWN0OworCisJCXZ4Z2VfYXNzZXJ0KG1lbXBvb2wtPm1lbWJsb2Nrc19hcnJbaV0pOworCQl2eGdlX2Fzc2VydChtZW1wb29sLT5tZW1ibG9ja3NfZG1hX2FyciArIGkpOworCisJCWRtYV9vYmplY3QgPSBtZW1wb29sLT5tZW1ibG9ja3NfZG1hX2FyciArIGk7CisKKwkJZm9yIChqID0gMDsgaiA8IG1lbXBvb2wtPml0ZW1zX3Blcl9tZW1ibG9jazsgaisrKSB7CisJCQl1MzIgaW5kZXggPSBpICogbWVtcG9vbC0+aXRlbXNfcGVyX21lbWJsb2NrICsgajsKKworCQkJLyogdG8gc2tpcCBsYXN0IHBhcnRpYWxseSBmaWxsZWQoaWYgYW55KSBtZW1ibG9jayAqLworCQkJaWYgKGluZGV4ID49IG1lbXBvb2wtPml0ZW1zX2N1cnJlbnQpCisJCQkJYnJlYWs7CisJCX0KKworCQl2ZnJlZShtZW1wb29sLT5tZW1ibG9ja3NfcHJpdl9hcnJbaV0pOworCisJCV9fdnhnZV9od19ibG9ja3Bvb2xfZnJlZShkZXZoLCBtZW1wb29sLT5tZW1ibG9ja3NfYXJyW2ldLAorCQkJCW1lbXBvb2wtPm1lbWJsb2NrX3NpemUsIGRtYV9vYmplY3QpOworCX0KKworCXZmcmVlKG1lbXBvb2wtPml0ZW1zX2Fycik7CisJdmZyZWUobWVtcG9vbC0+bWVtYmxvY2tzX2RtYV9hcnIpOworCXZmcmVlKG1lbXBvb2wtPm1lbWJsb2Nrc19wcml2X2Fycik7CisJdmZyZWUobWVtcG9vbC0+bWVtYmxvY2tzX2Fycik7CisJdmZyZWUobWVtcG9vbCk7Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfbWVtcG9vbF9ncm93CisgKiBXaWxsIHJlc2l6ZSBtZW1wb29sIHVwIHRvICVudW1fYWxsb2NhdGUgdmFsdWUuCisgKi8KK3N0YXRpYyBlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfbWVtcG9vbF9ncm93KHN0cnVjdCB2eGdlX2h3X21lbXBvb2wgKm1lbXBvb2wsIHUzMiBudW1fYWxsb2NhdGUsCisJCSAgICAgICB1MzIgKm51bV9hbGxvY2F0ZWQpCit7CisJdTMyIGksIGZpcnN0X3RpbWUgPSBtZW1wb29sLT5tZW1ibG9ja3NfYWxsb2NhdGVkID09IDAgPyAxIDogMDsKKwl1MzIgbl9pdGVtcyA9IG1lbXBvb2wtPml0ZW1zX3Blcl9tZW1ibG9jazsKKwl1MzIgc3RhcnRfYmxvY2tfaWR4ID0gbWVtcG9vbC0+bWVtYmxvY2tzX2FsbG9jYXRlZDsKKwl1MzIgZW5kX2Jsb2NrX2lkeCA9IG1lbXBvb2wtPm1lbWJsb2Nrc19hbGxvY2F0ZWQgKyBudW1fYWxsb2NhdGU7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCisJKm51bV9hbGxvY2F0ZWQgPSAwOworCisJaWYgKGVuZF9ibG9ja19pZHggPiBtZW1wb29sLT5tZW1ibG9ja3NfbWF4KSB7CiAJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX09VVF9PRl9NRU1PUlk7CiAJCWdvdG8gZXhpdDsKIAl9CiAKLQl2cC0+dnBhdGgtPnJpbmdoID0gcmluZzsKLQlyaW5nLT52cF9pZCA9IHZwX2lkOwotCXJpbmctPnZwX3JlZyA9IHZwLT52cGF0aC0+dnBfcmVnOwotCXJpbmctPmNvbW1vbl9yZWcgPSBobGRldi0+Y29tbW9uX3JlZzsKLQlyaW5nLT5zdGF0cyA9ICZ2cC0+dnBhdGgtPnN3X3N0YXRzLT5yaW5nX3N0YXRzOwotCXJpbmctPmNvbmZpZyA9IGNvbmZpZzsKLQlyaW5nLT5jYWxsYmFjayA9IGF0dHItPmNhbGxiYWNrOwotCXJpbmctPnJ4ZF9pbml0ID0gYXR0ci0+cnhkX2luaXQ7Ci0JcmluZy0+cnhkX3Rlcm0gPSBhdHRyLT5yeGRfdGVybTsKLQlyaW5nLT5idWZmZXJfbW9kZSA9IGNvbmZpZy0+YnVmZmVyX21vZGU7Ci0JcmluZy0+cnhkc19saW1pdCA9IGNvbmZpZy0+cnhkc19saW1pdDsKKwlmb3IgKGkgPSBzdGFydF9ibG9ja19pZHg7IGkgPCBlbmRfYmxvY2tfaWR4OyBpKyspIHsKKwkJdTMyIGo7CisJCXUzMiBpc19sYXN0ID0gKChlbmRfYmxvY2tfaWR4IC0gMSkgPT0gaSk7CisJCXN0cnVjdCB2eGdlX2h3X21lbXBvb2xfZG1hICpkbWFfb2JqZWN0ID0KKwkJCW1lbXBvb2wtPm1lbWJsb2Nrc19kbWFfYXJyICsgaTsKKwkJdm9pZCAqdGhlX21lbWJsb2NrOwogCi0JcmluZy0+cnhkX3NpemUgPSB2eGdlX2h3X3JpbmdfcnhkX3NpemVfZ2V0KGNvbmZpZy0+YnVmZmVyX21vZGUpOwotCXJpbmctPnJ4ZF9wcml2X3NpemUgPQotCQlzaXplb2Yoc3RydWN0IF9fdnhnZV9od19yaW5nX3J4ZF9wcml2KSArIGF0dHItPnBlcl9yeGRfc3BhY2U7Ci0JcmluZy0+cGVyX3J4ZF9zcGFjZSA9IGF0dHItPnBlcl9yeGRfc3BhY2U7CisJCS8qIGFsbG9jYXRlIG1lbWJsb2NrJ3MgcHJpdmF0ZSBwYXJ0LiBFYWNoIERNQSBtZW1ibG9jaworCQkgKiBoYXMgYSBzcGFjZSBhbGxvY2F0ZWQgZm9yIGl0ZW0ncyBwcml2YXRlIHVzYWdlIHVwb24KKwkJICogbWVtcG9vbCdzIHVzZXIgcmVxdWVzdC4gRWFjaCB0aW1lIG1lbXBvb2wgZ3Jvd3MsIGl0IHdpbGwKKwkJICogYWxsb2NhdGUgbmV3IG1lbWJsb2NrIGFuZCBpdHMgcHJpdmF0ZSBwYXJ0IGF0IG9uY2UuCisJCSAqIFRoaXMgaGVscHMgdG8gbWluaW1pemUgbWVtb3J5IHVzYWdlIGEgbG90LiAqLworCQltZW1wb29sLT5tZW1ibG9ja3NfcHJpdl9hcnJbaV0gPQorCQkJCXZ6YWxsb2MobWVtcG9vbC0+aXRlbXNfcHJpdl9zaXplICogbl9pdGVtcyk7CisJCWlmIChtZW1wb29sLT5tZW1ibG9ja3NfcHJpdl9hcnJbaV0gPT0gTlVMTCkgeworCQkJc3RhdHVzID0gVlhHRV9IV19FUlJfT1VUX09GX01FTU9SWTsKKwkJCWdvdG8gZXhpdDsKKwkJfQogCi0JcmluZy0+cnhkX3ByaXZfc2l6ZSA9Ci0JCSgocmluZy0+cnhkX3ByaXZfc2l6ZSArIFZYR0VfQ0FDSEVfTElORV9TSVpFIC0gMSkgLwotCQlWWEdFX0NBQ0hFX0xJTkVfU0laRSkgKiBWWEdFX0NBQ0hFX0xJTkVfU0laRTsKKwkJLyogYWxsb2NhdGUgRE1BLWNhcGFibGUgbWVtYmxvY2sgKi8KKwkJbWVtcG9vbC0+bWVtYmxvY2tzX2FycltpXSA9CisJCQlfX3Z4Z2VfaHdfYmxvY2twb29sX21hbGxvYyhtZW1wb29sLT5kZXZoLAorCQkJCW1lbXBvb2wtPm1lbWJsb2NrX3NpemUsIGRtYV9vYmplY3QpOworCQlpZiAobWVtcG9vbC0+bWVtYmxvY2tzX2FycltpXSA9PSBOVUxMKSB7CisJCQl2ZnJlZShtZW1wb29sLT5tZW1ibG9ja3NfcHJpdl9hcnJbaV0pOworCQkJc3RhdHVzID0gVlhHRV9IV19FUlJfT1VUX09GX01FTU9SWTsKKwkJCWdvdG8gZXhpdDsKKwkJfQogCi0JLyogaG93IG1hbnkgUnhEcyBjYW4gZml0IGludG8gb25lIGJsb2NrLiBEZXBlbmRzIG9uIGNvbmZpZ3VyZWQKLQkgKiBidWZmZXJfbW9kZS4gKi8KLQlyaW5nLT5yeGRzX3Blcl9ibG9jayA9Ci0JCXZ4Z2VfaHdfcmluZ19yeGRzX3Blcl9ibG9ja19nZXQoY29uZmlnLT5idWZmZXJfbW9kZSk7CisJCSgqbnVtX2FsbG9jYXRlZCkrKzsKKwkJbWVtcG9vbC0+bWVtYmxvY2tzX2FsbG9jYXRlZCsrOwogCi0JLyogY2FsY3VsYXRlIGFjdHVhbCBSeEQgYmxvY2sgcHJpdmF0ZSBzaXplICovCi0JcmluZy0+cnhkYmxvY2tfcHJpdl9zaXplID0gcmluZy0+cnhkX3ByaXZfc2l6ZSAqIHJpbmctPnJ4ZHNfcGVyX2Jsb2NrOwotCXJpbmdfbXBfY2FsbGJhY2suaXRlbV9mdW5jX2FsbG9jID0gX192eGdlX2h3X3JpbmdfbWVtcG9vbF9pdGVtX2FsbG9jOwotCXJpbmctPm1lbXBvb2wgPSBfX3Z4Z2VfaHdfbWVtcG9vbF9jcmVhdGUoaGxkZXYsCi0JCQkJVlhHRV9IV19CTE9DS19TSVpFLAotCQkJCVZYR0VfSFdfQkxPQ0tfU0laRSwKLQkJCQlyaW5nLT5yeGRibG9ja19wcml2X3NpemUsCi0JCQkJcmluZy0+Y29uZmlnLT5yaW5nX2Jsb2NrcywKLQkJCQlyaW5nLT5jb25maWctPnJpbmdfYmxvY2tzLAotCQkJCSZyaW5nX21wX2NhbGxiYWNrLAotCQkJCXJpbmcpOworCQltZW1zZXQobWVtcG9vbC0+bWVtYmxvY2tzX2FycltpXSwgMCwgbWVtcG9vbC0+bWVtYmxvY2tfc2l6ZSk7CiAKLQlpZiAocmluZy0+bWVtcG9vbCA9PSBOVUxMKSB7Ci0JCV9fdnhnZV9od19yaW5nX2RlbGV0ZSh2cCk7Ci0JCXJldHVybiBWWEdFX0hXX0VSUl9PVVRfT0ZfTUVNT1JZOworCQl0aGVfbWVtYmxvY2sgPSBtZW1wb29sLT5tZW1ibG9ja3NfYXJyW2ldOworCisJCS8qIGZpbGwgdGhlIGl0ZW1zIGhhc2ggYXJyYXkgKi8KKwkJZm9yIChqID0gMDsgaiA8IG5faXRlbXM7IGorKykgeworCQkJdTMyIGluZGV4ID0gaSAqIG5faXRlbXMgKyBqOworCisJCQlpZiAoZmlyc3RfdGltZSAmJiBpbmRleCA+PSBtZW1wb29sLT5pdGVtc19pbml0aWFsKQorCQkJCWJyZWFrOworCisJCQltZW1wb29sLT5pdGVtc19hcnJbaW5kZXhdID0KKwkJCQkoKGNoYXIgKil0aGVfbWVtYmxvY2sgKyBqKm1lbXBvb2wtPml0ZW1fc2l6ZSk7CisKKwkJCS8qIGxldCBjYWxsZXIgdG8gZG8gbW9yZSBqb2Igb24gZWFjaCBpdGVtICovCisJCQlpZiAobWVtcG9vbC0+aXRlbV9mdW5jX2FsbG9jICE9IE5VTEwpCisJCQkJbWVtcG9vbC0+aXRlbV9mdW5jX2FsbG9jKG1lbXBvb2wsIGksCisJCQkJCWRtYV9vYmplY3QsIGluZGV4LCBpc19sYXN0KTsKKworCQkJbWVtcG9vbC0+aXRlbXNfY3VycmVudCA9IGluZGV4ICsgMTsKKwkJfQorCisJCWlmIChmaXJzdF90aW1lICYmIG1lbXBvb2wtPml0ZW1zX2N1cnJlbnQgPT0KKwkJCQkJbWVtcG9vbC0+aXRlbXNfaW5pdGlhbCkKKwkJCWJyZWFrOwogCX0KK2V4aXQ6CisJcmV0dXJuIHN0YXR1czsKK30KIAotCXN0YXR1cyA9IF9fdnhnZV9od19jaGFubmVsX2luaXRpYWxpemUoJnJpbmctPmNoYW5uZWwpOwotCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykgewotCQlfX3Z4Z2VfaHdfcmluZ19kZWxldGUodnApOworLyoKKyAqIHZ4Z2VfaHdfbWVtcG9vbF9jcmVhdGUKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBjcmVhdGUgbWVtb3J5IHBvb2wgb2JqZWN0LiBQb29sIG1heSBncm93IGJ1dCB3aWxsCisgKiBuZXZlciBzaHJpbmsuIFBvb2wgY29uc2lzdHMgb2YgbnVtYmVyIG9mIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBibG9ja3MKKyAqIHdpdGggc2l6ZSBlbm91Z2ggdG8gaG9sZCAlaXRlbXNfaW5pdGlhbCBudW1iZXIgb2YgaXRlbXMuIE1lbW9yeSBpcworICogRE1BLWFibGUgYnV0IGNsaWVudCBtdXN0IG1hcC91bm1hcCBiZWZvcmUgaW50ZXJvcGVyYXRpbmcgd2l0aCB0aGUgZGV2aWNlLgorICovCitzdGF0aWMgc3RydWN0IHZ4Z2VfaHdfbWVtcG9vbCAqCitfX3Z4Z2VfaHdfbWVtcG9vbF9jcmVhdGUoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgsCisJCQkgdTMyIG1lbWJsb2NrX3NpemUsCisJCQkgdTMyIGl0ZW1fc2l6ZSwKKwkJCSB1MzIgaXRlbXNfcHJpdl9zaXplLAorCQkJIHUzMiBpdGVtc19pbml0aWFsLAorCQkJIHUzMiBpdGVtc19tYXgsCisJCQkgc3RydWN0IHZ4Z2VfaHdfbWVtcG9vbF9jYnMgKm1wX2NhbGxiYWNrLAorCQkJIHZvaWQgKnVzZXJkYXRhKQoreworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKwl1MzIgbWVtYmxvY2tzX3RvX2FsbG9jYXRlOworCXN0cnVjdCB2eGdlX2h3X21lbXBvb2wgKm1lbXBvb2wgPSBOVUxMOworCXUzMiBhbGxvY2F0ZWQ7CisKKwlpZiAobWVtYmxvY2tfc2l6ZSA8IGl0ZW1fc2l6ZSkgeworCQlzdGF0dXMgPSBWWEdFX0hXX0ZBSUw7CiAJCWdvdG8gZXhpdDsKIAl9CiAKLQkvKiBOb3RlOgotCSAqIFNwZWNpZnlpbmcgcnhkX2luaXQgY2FsbGJhY2sgbWVhbnMgdHdvIHRoaW5nczoKLQkgKiAxKSByeGRzIG5lZWQgdG8gYmUgaW5pdGlhbGl6ZWQgYnkgZHJpdmVyIGF0IGNoYW5uZWwtb3BlbiB0aW1lOwotCSAqIDIpIHJ4ZHMgbmVlZCB0byBiZSBwb3N0ZWQgYXQgY2hhbm5lbC1vcGVuIHRpbWUKLQkgKiAgICAodGhhdCdzIHdoYXQgdGhlIGluaXRpYWxfcmVwbGVuaXNoKCkgYmVsb3cgZG9lcykKLQkgKiBDdXJyZW50bHkgd2UgZG9uJ3QgaGF2ZSBhIGNhc2Ugd2hlbiB0aGUgMSkgaXMgZG9uZSB3aXRob3V0IHRoZSAyKS4KLQkgKi8KLQlpZiAocmluZy0+cnhkX2luaXQpIHsKLQkJc3RhdHVzID0gdnhnZV9od19yaW5nX3JlcGxlbmlzaChyaW5nKTsKLQkJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKSB7Ci0JCQlfX3Z4Z2VfaHdfcmluZ19kZWxldGUodnApOwotCQkJZ290byBleGl0OwotCQl9CisJbWVtcG9vbCA9IHZ6YWxsb2Moc2l6ZW9mKHN0cnVjdCB2eGdlX2h3X21lbXBvb2wpKTsKKwlpZiAobWVtcG9vbCA9PSBOVUxMKSB7CisJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX09VVF9PRl9NRU1PUlk7CisJCWdvdG8gZXhpdDsKIAl9CiAKLQkvKiBpbml0aWFsIHJlcGxlbmlzaCB3aWxsIGluY3JlbWVudCB0aGUgY291bnRlciBpbiBpdHMgcG9zdCgpIHJvdXRpbmUsCi0JICogd2UgaGF2ZSB0byByZXNldCBpdCAqLwotCXJpbmctPnN0YXRzLT5jb21tb25fc3RhdHMudXNhZ2VfY250ID0gMDsKKwltZW1wb29sLT5kZXZoCQkJPSBkZXZoOworCW1lbXBvb2wtPm1lbWJsb2NrX3NpemUJCT0gbWVtYmxvY2tfc2l6ZTsKKwltZW1wb29sLT5pdGVtc19tYXgJCT0gaXRlbXNfbWF4OworCW1lbXBvb2wtPml0ZW1zX2luaXRpYWwJCT0gaXRlbXNfaW5pdGlhbDsKKwltZW1wb29sLT5pdGVtX3NpemUJCT0gaXRlbV9zaXplOworCW1lbXBvb2wtPml0ZW1zX3ByaXZfc2l6ZQk9IGl0ZW1zX3ByaXZfc2l6ZTsKKwltZW1wb29sLT5pdGVtX2Z1bmNfYWxsb2MJPSBtcF9jYWxsYmFjay0+aXRlbV9mdW5jX2FsbG9jOworCW1lbXBvb2wtPnVzZXJkYXRhCQk9IHVzZXJkYXRhOworCisJbWVtcG9vbC0+bWVtYmxvY2tzX2FsbG9jYXRlZCA9IDA7CisKKwltZW1wb29sLT5pdGVtc19wZXJfbWVtYmxvY2sgPSBtZW1ibG9ja19zaXplIC8gaXRlbV9zaXplOworCisJbWVtcG9vbC0+bWVtYmxvY2tzX21heCA9IChpdGVtc19tYXggKyBtZW1wb29sLT5pdGVtc19wZXJfbWVtYmxvY2sgLSAxKSAvCisJCQkJCW1lbXBvb2wtPml0ZW1zX3Blcl9tZW1ibG9jazsKKworCS8qIGFsbG9jYXRlIGFycmF5IG9mIG1lbWJsb2NrcyAqLworCW1lbXBvb2wtPm1lbWJsb2Nrc19hcnIgPQorCQl2emFsbG9jKHNpemVvZih2b2lkICopICogbWVtcG9vbC0+bWVtYmxvY2tzX21heCk7CisJaWYgKG1lbXBvb2wtPm1lbWJsb2Nrc19hcnIgPT0gTlVMTCkgeworCQlfX3Z4Z2VfaHdfbWVtcG9vbF9kZXN0cm95KG1lbXBvb2wpOworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9PVVRfT0ZfTUVNT1JZOworCQltZW1wb29sID0gTlVMTDsKKwkJZ290byBleGl0OworCX0KKworCS8qIGFsbG9jYXRlIGFycmF5IG9mIHByaXZhdGUgcGFydHMgb2YgaXRlbXMgcGVyIG1lbWJsb2NrcyAqLworCW1lbXBvb2wtPm1lbWJsb2Nrc19wcml2X2FyciA9CisJCXZ6YWxsb2Moc2l6ZW9mKHZvaWQgKikgKiBtZW1wb29sLT5tZW1ibG9ja3NfbWF4KTsKKwlpZiAobWVtcG9vbC0+bWVtYmxvY2tzX3ByaXZfYXJyID09IE5VTEwpIHsKKwkJX192eGdlX2h3X21lbXBvb2xfZGVzdHJveShtZW1wb29sKTsKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfT1VUX09GX01FTU9SWTsKKwkJbWVtcG9vbCA9IE5VTEw7CisJCWdvdG8gZXhpdDsKKwl9CisKKwkvKiBhbGxvY2F0ZSBhcnJheSBvZiBtZW1ibG9ja3MgRE1BIG9iamVjdHMgKi8KKwltZW1wb29sLT5tZW1ibG9ja3NfZG1hX2FyciA9CisJCXZ6YWxsb2Moc2l6ZW9mKHN0cnVjdCB2eGdlX2h3X21lbXBvb2xfZG1hKSAqCisJCQltZW1wb29sLT5tZW1ibG9ja3NfbWF4KTsKKwlpZiAobWVtcG9vbC0+bWVtYmxvY2tzX2RtYV9hcnIgPT0gTlVMTCkgeworCQlfX3Z4Z2VfaHdfbWVtcG9vbF9kZXN0cm95KG1lbXBvb2wpOworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9PVVRfT0ZfTUVNT1JZOworCQltZW1wb29sID0gTlVMTDsKKwkJZ290byBleGl0OworCX0KKworCS8qIGFsbG9jYXRlIGhhc2ggYXJyYXkgb2YgaXRlbXMgKi8KKwltZW1wb29sLT5pdGVtc19hcnIgPSB2emFsbG9jKHNpemVvZih2b2lkICopICogbWVtcG9vbC0+aXRlbXNfbWF4KTsKKwlpZiAobWVtcG9vbC0+aXRlbXNfYXJyID09IE5VTEwpIHsKKwkJX192eGdlX2h3X21lbXBvb2xfZGVzdHJveShtZW1wb29sKTsKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfT1VUX09GX01FTU9SWTsKKwkJbWVtcG9vbCA9IE5VTEw7CisJCWdvdG8gZXhpdDsKKwl9CisKKwkvKiBjYWxjdWxhdGUgaW5pdGlhbCBudW1iZXIgb2YgbWVtYmxvY2tzICovCisJbWVtYmxvY2tzX3RvX2FsbG9jYXRlID0gKG1lbXBvb2wtPml0ZW1zX2luaXRpYWwgKworCQkJCSBtZW1wb29sLT5pdGVtc19wZXJfbWVtYmxvY2sgLSAxKSAvCisJCQkJCQltZW1wb29sLT5pdGVtc19wZXJfbWVtYmxvY2s7CisKKwkvKiBwcmUtYWxsb2NhdGUgdGhlIG1lbXBvb2wgKi8KKwlzdGF0dXMgPSBfX3Z4Z2VfaHdfbWVtcG9vbF9ncm93KG1lbXBvb2wsIG1lbWJsb2Nrc190b19hbGxvY2F0ZSwKKwkJCQkJJmFsbG9jYXRlZCk7CisJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKSB7CisJCV9fdnhnZV9od19tZW1wb29sX2Rlc3Ryb3kobWVtcG9vbCk7CisJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX09VVF9PRl9NRU1PUlk7CisJCW1lbXBvb2wgPSBOVUxMOworCQlnb3RvIGV4aXQ7CisJfQorCiBleGl0OgotCXJldHVybiBzdGF0dXM7CisJcmV0dXJuIG1lbXBvb2w7CiB9CiAKIC8qCkBAIC0xNTc4LDcgKzI4MDMsOCBAQAogICogX192eGdlX2h3X3JpbmdfZGVsZXRlIC0gUmVtb3ZlcyB0aGUgcmluZwogICogVGhpcyBmdW5jdGlvbiBmcmVldXAgdGhlIG1lbW9yeSBwb29sIGFuZCByZW1vdmVzIHRoZSByaW5nCiAgKi8KLXN0YXRpYyBlbnVtIHZ4Z2VfaHdfc3RhdHVzIF9fdnhnZV9od19yaW5nX2RlbGV0ZShzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnApCitzdGF0aWMgZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X3JpbmdfZGVsZXRlKHN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cCkKIHsKIAlzdHJ1Y3QgX192eGdlX2h3X3JpbmcgKnJpbmcgPSB2cC0+dnBhdGgtPnJpbmdoOwogCkBAIC0xNTk0LDMyOSArMjgyMCwxMTIgQEAKIH0KIAogLyoKLSAqIF9fdnhnZV9od19tZW1wb29sX2dyb3cKLSAqIFdpbGwgcmVzaXplIG1lbXBvb2wgdXAgdG8gJW51bV9hbGxvY2F0ZSB2YWx1ZS4KKyAqIF9fdnhnZV9od19yaW5nX2NyZWF0ZSAtIENyZWF0ZSBhIFJpbmcKKyAqIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBSaW5nIGFuZCBpbml0aWFsaXplcyBpdC4KICAqLwogc3RhdGljIGVudW0gdnhnZV9od19zdGF0dXMKLV9fdnhnZV9od19tZW1wb29sX2dyb3coc3RydWN0IHZ4Z2VfaHdfbWVtcG9vbCAqbWVtcG9vbCwgdTMyIG51bV9hbGxvY2F0ZSwKLQkJICAgICAgIHUzMiAqbnVtX2FsbG9jYXRlZCkKLXsKLQl1MzIgaSwgZmlyc3RfdGltZSA9IG1lbXBvb2wtPm1lbWJsb2Nrc19hbGxvY2F0ZWQgPT0gMCA/IDEgOiAwOwotCXUzMiBuX2l0ZW1zID0gbWVtcG9vbC0+aXRlbXNfcGVyX21lbWJsb2NrOwotCXUzMiBzdGFydF9ibG9ja19pZHggPSBtZW1wb29sLT5tZW1ibG9ja3NfYWxsb2NhdGVkOwotCXUzMiBlbmRfYmxvY2tfaWR4ID0gbWVtcG9vbC0+bWVtYmxvY2tzX2FsbG9jYXRlZCArIG51bV9hbGxvY2F0ZTsKLQllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7Ci0KLQkqbnVtX2FsbG9jYXRlZCA9IDA7Ci0KLQlpZiAoZW5kX2Jsb2NrX2lkeCA+IG1lbXBvb2wtPm1lbWJsb2Nrc19tYXgpIHsKLQkJc3RhdHVzID0gVlhHRV9IV19FUlJfT1VUX09GX01FTU9SWTsKLQkJZ290byBleGl0OwotCX0KLQotCWZvciAoaSA9IHN0YXJ0X2Jsb2NrX2lkeDsgaSA8IGVuZF9ibG9ja19pZHg7IGkrKykgewotCQl1MzIgajsKLQkJdTMyIGlzX2xhc3QgPSAoKGVuZF9ibG9ja19pZHggLSAxKSA9PSBpKTsKLQkJc3RydWN0IHZ4Z2VfaHdfbWVtcG9vbF9kbWEgKmRtYV9vYmplY3QgPQotCQkJbWVtcG9vbC0+bWVtYmxvY2tzX2RtYV9hcnIgKyBpOwotCQl2b2lkICp0aGVfbWVtYmxvY2s7Ci0KLQkJLyogYWxsb2NhdGUgbWVtYmxvY2sncyBwcml2YXRlIHBhcnQuIEVhY2ggRE1BIG1lbWJsb2NrCi0JCSAqIGhhcyBhIHNwYWNlIGFsbG9jYXRlZCBmb3IgaXRlbSdzIHByaXZhdGUgdXNhZ2UgdXBvbgotCQkgKiBtZW1wb29sJ3MgdXNlciByZXF1ZXN0LiBFYWNoIHRpbWUgbWVtcG9vbCBncm93cywgaXQgd2lsbAotCQkgKiBhbGxvY2F0ZSBuZXcgbWVtYmxvY2sgYW5kIGl0cyBwcml2YXRlIHBhcnQgYXQgb25jZS4KLQkJICogVGhpcyBoZWxwcyB0byBtaW5pbWl6ZSBtZW1vcnkgdXNhZ2UgYSBsb3QuICovCi0JCW1lbXBvb2wtPm1lbWJsb2Nrc19wcml2X2FycltpXSA9Ci0JCQkJdm1hbGxvYyhtZW1wb29sLT5pdGVtc19wcml2X3NpemUgKiBuX2l0ZW1zKTsKLQkJaWYgKG1lbXBvb2wtPm1lbWJsb2Nrc19wcml2X2FycltpXSA9PSBOVUxMKSB7Ci0JCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9PVVRfT0ZfTUVNT1JZOwotCQkJZ290byBleGl0OwotCQl9Ci0KLQkJbWVtc2V0KG1lbXBvb2wtPm1lbWJsb2Nrc19wcml2X2FycltpXSwgMCwKLQkJCSAgICAgbWVtcG9vbC0+aXRlbXNfcHJpdl9zaXplICogbl9pdGVtcyk7Ci0KLQkJLyogYWxsb2NhdGUgRE1BLWNhcGFibGUgbWVtYmxvY2sgKi8KLQkJbWVtcG9vbC0+bWVtYmxvY2tzX2FycltpXSA9Ci0JCQlfX3Z4Z2VfaHdfYmxvY2twb29sX21hbGxvYyhtZW1wb29sLT5kZXZoLAotCQkJCW1lbXBvb2wtPm1lbWJsb2NrX3NpemUsIGRtYV9vYmplY3QpOwotCQlpZiAobWVtcG9vbC0+bWVtYmxvY2tzX2FycltpXSA9PSBOVUxMKSB7Ci0JCQl2ZnJlZShtZW1wb29sLT5tZW1ibG9ja3NfcHJpdl9hcnJbaV0pOwotCQkJc3RhdHVzID0gVlhHRV9IV19FUlJfT1VUX09GX01FTU9SWTsKLQkJCWdvdG8gZXhpdDsKLQkJfQotCi0JCSgqbnVtX2FsbG9jYXRlZCkrKzsKLQkJbWVtcG9vbC0+bWVtYmxvY2tzX2FsbG9jYXRlZCsrOwotCi0JCW1lbXNldChtZW1wb29sLT5tZW1ibG9ja3NfYXJyW2ldLCAwLCBtZW1wb29sLT5tZW1ibG9ja19zaXplKTsKLQotCQl0aGVfbWVtYmxvY2sgPSBtZW1wb29sLT5tZW1ibG9ja3NfYXJyW2ldOwotCi0JCS8qIGZpbGwgdGhlIGl0ZW1zIGhhc2ggYXJyYXkgKi8KLQkJZm9yIChqID0gMDsgaiA8IG5faXRlbXM7IGorKykgewotCQkJdTMyIGluZGV4ID0gaSAqIG5faXRlbXMgKyBqOwotCi0JCQlpZiAoZmlyc3RfdGltZSAmJiBpbmRleCA+PSBtZW1wb29sLT5pdGVtc19pbml0aWFsKQotCQkJCWJyZWFrOwotCi0JCQltZW1wb29sLT5pdGVtc19hcnJbaW5kZXhdID0KLQkJCQkoKGNoYXIgKil0aGVfbWVtYmxvY2sgKyBqKm1lbXBvb2wtPml0ZW1fc2l6ZSk7Ci0KLQkJCS8qIGxldCBjYWxsZXIgdG8gZG8gbW9yZSBqb2Igb24gZWFjaCBpdGVtICovCi0JCQlpZiAobWVtcG9vbC0+aXRlbV9mdW5jX2FsbG9jICE9IE5VTEwpCi0JCQkJbWVtcG9vbC0+aXRlbV9mdW5jX2FsbG9jKG1lbXBvb2wsIGksCi0JCQkJCWRtYV9vYmplY3QsIGluZGV4LCBpc19sYXN0KTsKLQotCQkJbWVtcG9vbC0+aXRlbXNfY3VycmVudCA9IGluZGV4ICsgMTsKLQkJfQotCi0JCWlmIChmaXJzdF90aW1lICYmIG1lbXBvb2wtPml0ZW1zX2N1cnJlbnQgPT0KLQkJCQkJbWVtcG9vbC0+aXRlbXNfaW5pdGlhbCkKLQkJCWJyZWFrOwotCX0KLWV4aXQ6Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotLyoKLSAqIHZ4Z2VfaHdfbWVtcG9vbF9jcmVhdGUKLSAqIFRoaXMgZnVuY3Rpb24gd2lsbCBjcmVhdGUgbWVtb3J5IHBvb2wgb2JqZWN0LiBQb29sIG1heSBncm93IGJ1dCB3aWxsCi0gKiBuZXZlciBzaHJpbmsuIFBvb2wgY29uc2lzdHMgb2YgbnVtYmVyIG9mIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBibG9ja3MKLSAqIHdpdGggc2l6ZSBlbm91Z2ggdG8gaG9sZCAlaXRlbXNfaW5pdGlhbCBudW1iZXIgb2YgaXRlbXMuIE1lbW9yeSBpcwotICogRE1BLWFibGUgYnV0IGNsaWVudCBtdXN0IG1hcC91bm1hcCBiZWZvcmUgaW50ZXJvcGVyYXRpbmcgd2l0aCB0aGUgZGV2aWNlLgotICovCi1zdGF0aWMgc3RydWN0IHZ4Z2VfaHdfbWVtcG9vbCoKLV9fdnhnZV9od19tZW1wb29sX2NyZWF0ZSgKLQlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aCwKLQl1MzIgbWVtYmxvY2tfc2l6ZSwKLQl1MzIgaXRlbV9zaXplLAotCXUzMiBpdGVtc19wcml2X3NpemUsCi0JdTMyIGl0ZW1zX2luaXRpYWwsCi0JdTMyIGl0ZW1zX21heCwKLQlzdHJ1Y3QgdnhnZV9od19tZW1wb29sX2NicyAqbXBfY2FsbGJhY2ssCi0Jdm9pZCAqdXNlcmRhdGEpCitfX3Z4Z2VfaHdfcmluZ19jcmVhdGUoc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwLAorCQkgICAgICBzdHJ1Y3QgdnhnZV9od19yaW5nX2F0dHIgKmF0dHIpCiB7CiAJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOwotCXUzMiBtZW1ibG9ja3NfdG9fYWxsb2NhdGU7Ci0Jc3RydWN0IHZ4Z2VfaHdfbWVtcG9vbCAqbWVtcG9vbCA9IE5VTEw7Ci0JdTMyIGFsbG9jYXRlZDsKKwlzdHJ1Y3QgX192eGdlX2h3X3JpbmcgKnJpbmc7CisJdTMyIHJpbmdfbGVuZ3RoOworCXN0cnVjdCB2eGdlX2h3X3JpbmdfY29uZmlnICpjb25maWc7CisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2OworCXUzMiB2cF9pZDsKKwlzdHJ1Y3QgdnhnZV9od19tZW1wb29sX2NicyByaW5nX21wX2NhbGxiYWNrOwogCi0JaWYgKG1lbWJsb2NrX3NpemUgPCBpdGVtX3NpemUpIHsKKwlpZiAoKHZwID09IE5VTEwpIHx8IChhdHRyID09IE5VTEwpKSB7CiAJCXN0YXR1cyA9IFZYR0VfSFdfRkFJTDsKIAkJZ290byBleGl0OwogCX0KIAotCW1lbXBvb2wgPSAoc3RydWN0IHZ4Z2VfaHdfbWVtcG9vbCAqKQotCQkJdm1hbGxvYyhzaXplb2Yoc3RydWN0IHZ4Z2VfaHdfbWVtcG9vbCkpOwotCWlmIChtZW1wb29sID09IE5VTEwpIHsKKwlobGRldiA9IHZwLT52cGF0aC0+aGxkZXY7CisJdnBfaWQgPSB2cC0+dnBhdGgtPnZwX2lkOworCisJY29uZmlnID0gJmhsZGV2LT5jb25maWcudnBfY29uZmlnW3ZwX2lkXS5yaW5nOworCisJcmluZ19sZW5ndGggPSBjb25maWctPnJpbmdfYmxvY2tzICoKKwkJCXZ4Z2VfaHdfcmluZ19yeGRzX3Blcl9ibG9ja19nZXQoY29uZmlnLT5idWZmZXJfbW9kZSk7CisKKwlyaW5nID0gKHN0cnVjdCBfX3Z4Z2VfaHdfcmluZyAqKV9fdnhnZV9od19jaGFubmVsX2FsbG9jYXRlKHZwLAorCQkJCQkJVlhHRV9IV19DSEFOTkVMX1RZUEVfUklORywKKwkJCQkJCXJpbmdfbGVuZ3RoLAorCQkJCQkJYXR0ci0+cGVyX3J4ZF9zcGFjZSwKKwkJCQkJCWF0dHItPnVzZXJkYXRhKTsKKwlpZiAocmluZyA9PSBOVUxMKSB7CiAJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX09VVF9PRl9NRU1PUlk7CiAJCWdvdG8gZXhpdDsKIAl9Ci0JbWVtc2V0KG1lbXBvb2wsIDAsIHNpemVvZihzdHJ1Y3QgdnhnZV9od19tZW1wb29sKSk7CiAKLQltZW1wb29sLT5kZXZoCQkJPSBkZXZoOwotCW1lbXBvb2wtPm1lbWJsb2NrX3NpemUJCT0gbWVtYmxvY2tfc2l6ZTsKLQltZW1wb29sLT5pdGVtc19tYXgJCT0gaXRlbXNfbWF4OwotCW1lbXBvb2wtPml0ZW1zX2luaXRpYWwJCT0gaXRlbXNfaW5pdGlhbDsKLQltZW1wb29sLT5pdGVtX3NpemUJCT0gaXRlbV9zaXplOwotCW1lbXBvb2wtPml0ZW1zX3ByaXZfc2l6ZQk9IGl0ZW1zX3ByaXZfc2l6ZTsKLQltZW1wb29sLT5pdGVtX2Z1bmNfYWxsb2MJPSBtcF9jYWxsYmFjay0+aXRlbV9mdW5jX2FsbG9jOwotCW1lbXBvb2wtPnVzZXJkYXRhCQk9IHVzZXJkYXRhOworCXZwLT52cGF0aC0+cmluZ2ggPSByaW5nOworCXJpbmctPnZwX2lkID0gdnBfaWQ7CisJcmluZy0+dnBfcmVnID0gdnAtPnZwYXRoLT52cF9yZWc7CisJcmluZy0+Y29tbW9uX3JlZyA9IGhsZGV2LT5jb21tb25fcmVnOworCXJpbmctPnN0YXRzID0gJnZwLT52cGF0aC0+c3dfc3RhdHMtPnJpbmdfc3RhdHM7CisJcmluZy0+Y29uZmlnID0gY29uZmlnOworCXJpbmctPmNhbGxiYWNrID0gYXR0ci0+Y2FsbGJhY2s7CisJcmluZy0+cnhkX2luaXQgPSBhdHRyLT5yeGRfaW5pdDsKKwlyaW5nLT5yeGRfdGVybSA9IGF0dHItPnJ4ZF90ZXJtOworCXJpbmctPmJ1ZmZlcl9tb2RlID0gY29uZmlnLT5idWZmZXJfbW9kZTsKKwlyaW5nLT5yeGRzX2xpbWl0ID0gY29uZmlnLT5yeGRzX2xpbWl0OwogCi0JbWVtcG9vbC0+bWVtYmxvY2tzX2FsbG9jYXRlZCA9IDA7CisJcmluZy0+cnhkX3NpemUgPSB2eGdlX2h3X3JpbmdfcnhkX3NpemVfZ2V0KGNvbmZpZy0+YnVmZmVyX21vZGUpOworCXJpbmctPnJ4ZF9wcml2X3NpemUgPQorCQlzaXplb2Yoc3RydWN0IF9fdnhnZV9od19yaW5nX3J4ZF9wcml2KSArIGF0dHItPnBlcl9yeGRfc3BhY2U7CisJcmluZy0+cGVyX3J4ZF9zcGFjZSA9IGF0dHItPnBlcl9yeGRfc3BhY2U7CiAKLQltZW1wb29sLT5pdGVtc19wZXJfbWVtYmxvY2sgPSBtZW1ibG9ja19zaXplIC8gaXRlbV9zaXplOworCXJpbmctPnJ4ZF9wcml2X3NpemUgPQorCQkoKHJpbmctPnJ4ZF9wcml2X3NpemUgKyBWWEdFX0NBQ0hFX0xJTkVfU0laRSAtIDEpIC8KKwkJVlhHRV9DQUNIRV9MSU5FX1NJWkUpICogVlhHRV9DQUNIRV9MSU5FX1NJWkU7CiAKLQltZW1wb29sLT5tZW1ibG9ja3NfbWF4ID0gKGl0ZW1zX21heCArIG1lbXBvb2wtPml0ZW1zX3Blcl9tZW1ibG9jayAtIDEpIC8KLQkJCQkJbWVtcG9vbC0+aXRlbXNfcGVyX21lbWJsb2NrOworCS8qIGhvdyBtYW55IFJ4RHMgY2FuIGZpdCBpbnRvIG9uZSBibG9jay4gRGVwZW5kcyBvbiBjb25maWd1cmVkCisJICogYnVmZmVyX21vZGUuICovCisJcmluZy0+cnhkc19wZXJfYmxvY2sgPQorCQl2eGdlX2h3X3Jpbmdfcnhkc19wZXJfYmxvY2tfZ2V0KGNvbmZpZy0+YnVmZmVyX21vZGUpOwogCi0JLyogYWxsb2NhdGUgYXJyYXkgb2YgbWVtYmxvY2tzICovCi0JbWVtcG9vbC0+bWVtYmxvY2tzX2FyciA9Ci0JCSh2b2lkICoqKSB2bWFsbG9jKHNpemVvZih2b2lkICopICogbWVtcG9vbC0+bWVtYmxvY2tzX21heCk7Ci0JaWYgKG1lbXBvb2wtPm1lbWJsb2Nrc19hcnIgPT0gTlVMTCkgewotCQlfX3Z4Z2VfaHdfbWVtcG9vbF9kZXN0cm95KG1lbXBvb2wpOwotCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9PVVRfT0ZfTUVNT1JZOwotCQltZW1wb29sID0gTlVMTDsKLQkJZ290byBleGl0OworCS8qIGNhbGN1bGF0ZSBhY3R1YWwgUnhEIGJsb2NrIHByaXZhdGUgc2l6ZSAqLworCXJpbmctPnJ4ZGJsb2NrX3ByaXZfc2l6ZSA9IHJpbmctPnJ4ZF9wcml2X3NpemUgKiByaW5nLT5yeGRzX3Blcl9ibG9jazsKKwlyaW5nX21wX2NhbGxiYWNrLml0ZW1fZnVuY19hbGxvYyA9IF9fdnhnZV9od19yaW5nX21lbXBvb2xfaXRlbV9hbGxvYzsKKwlyaW5nLT5tZW1wb29sID0gX192eGdlX2h3X21lbXBvb2xfY3JlYXRlKGhsZGV2LAorCQkJCVZYR0VfSFdfQkxPQ0tfU0laRSwKKwkJCQlWWEdFX0hXX0JMT0NLX1NJWkUsCisJCQkJcmluZy0+cnhkYmxvY2tfcHJpdl9zaXplLAorCQkJCXJpbmctPmNvbmZpZy0+cmluZ19ibG9ja3MsCisJCQkJcmluZy0+Y29uZmlnLT5yaW5nX2Jsb2NrcywKKwkJCQkmcmluZ19tcF9jYWxsYmFjaywKKwkJCQlyaW5nKTsKKwlpZiAocmluZy0+bWVtcG9vbCA9PSBOVUxMKSB7CisJCV9fdnhnZV9od19yaW5nX2RlbGV0ZSh2cCk7CisJCXJldHVybiBWWEdFX0hXX0VSUl9PVVRfT0ZfTUVNT1JZOwogCX0KLQltZW1zZXQobWVtcG9vbC0+bWVtYmxvY2tzX2FyciwgMCwKLQkJc2l6ZW9mKHZvaWQgKikgKiBtZW1wb29sLT5tZW1ibG9ja3NfbWF4KTsKIAotCS8qIGFsbG9jYXRlIGFycmF5IG9mIHByaXZhdGUgcGFydHMgb2YgaXRlbXMgcGVyIG1lbWJsb2NrcyAqLwotCW1lbXBvb2wtPm1lbWJsb2Nrc19wcml2X2FyciA9Ci0JCSh2b2lkICoqKSB2bWFsbG9jKHNpemVvZih2b2lkICopICogbWVtcG9vbC0+bWVtYmxvY2tzX21heCk7Ci0JaWYgKG1lbXBvb2wtPm1lbWJsb2Nrc19wcml2X2FyciA9PSBOVUxMKSB7Ci0JCV9fdnhnZV9od19tZW1wb29sX2Rlc3Ryb3kobWVtcG9vbCk7Ci0JCXN0YXR1cyA9IFZYR0VfSFdfRVJSX09VVF9PRl9NRU1PUlk7Ci0JCW1lbXBvb2wgPSBOVUxMOwotCQlnb3RvIGV4aXQ7Ci0JfQotCW1lbXNldChtZW1wb29sLT5tZW1ibG9ja3NfcHJpdl9hcnIsIDAsCi0JCSAgICBzaXplb2Yodm9pZCAqKSAqIG1lbXBvb2wtPm1lbWJsb2Nrc19tYXgpOwotCi0JLyogYWxsb2NhdGUgYXJyYXkgb2YgbWVtYmxvY2tzIERNQSBvYmplY3RzICovCi0JbWVtcG9vbC0+bWVtYmxvY2tzX2RtYV9hcnIgPSAoc3RydWN0IHZ4Z2VfaHdfbWVtcG9vbF9kbWEgKikKLQkJdm1hbGxvYyhzaXplb2Yoc3RydWN0IHZ4Z2VfaHdfbWVtcG9vbF9kbWEpICoKLQkJCW1lbXBvb2wtPm1lbWJsb2Nrc19tYXgpOwotCi0JaWYgKG1lbXBvb2wtPm1lbWJsb2Nrc19kbWFfYXJyID09IE5VTEwpIHsKLQkJX192eGdlX2h3X21lbXBvb2xfZGVzdHJveShtZW1wb29sKTsKLQkJc3RhdHVzID0gVlhHRV9IV19FUlJfT1VUX09GX01FTU9SWTsKLQkJbWVtcG9vbCA9IE5VTEw7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0JbWVtc2V0KG1lbXBvb2wtPm1lbWJsb2Nrc19kbWFfYXJyLCAwLAotCQkJc2l6ZW9mKHN0cnVjdCB2eGdlX2h3X21lbXBvb2xfZG1hKSAqCi0JCQltZW1wb29sLT5tZW1ibG9ja3NfbWF4KTsKLQotCS8qIGFsbG9jYXRlIGhhc2ggYXJyYXkgb2YgaXRlbXMgKi8KLQltZW1wb29sLT5pdGVtc19hcnIgPQotCQkodm9pZCAqKikgdm1hbGxvYyhzaXplb2Yodm9pZCAqKSAqIG1lbXBvb2wtPml0ZW1zX21heCk7Ci0JaWYgKG1lbXBvb2wtPml0ZW1zX2FyciA9PSBOVUxMKSB7Ci0JCV9fdnhnZV9od19tZW1wb29sX2Rlc3Ryb3kobWVtcG9vbCk7Ci0JCXN0YXR1cyA9IFZYR0VfSFdfRVJSX09VVF9PRl9NRU1PUlk7Ci0JCW1lbXBvb2wgPSBOVUxMOwotCQlnb3RvIGV4aXQ7Ci0JfQotCW1lbXNldChtZW1wb29sLT5pdGVtc19hcnIsIDAsIHNpemVvZih2b2lkICopICogbWVtcG9vbC0+aXRlbXNfbWF4KTsKLQotCS8qIGNhbGN1bGF0ZSBpbml0aWFsIG51bWJlciBvZiBtZW1ibG9ja3MgKi8KLQltZW1ibG9ja3NfdG9fYWxsb2NhdGUgPSAobWVtcG9vbC0+aXRlbXNfaW5pdGlhbCArCi0JCQkJIG1lbXBvb2wtPml0ZW1zX3Blcl9tZW1ibG9jayAtIDEpIC8KLQkJCQkJCW1lbXBvb2wtPml0ZW1zX3Blcl9tZW1ibG9jazsKLQotCS8qIHByZS1hbGxvY2F0ZSB0aGUgbWVtcG9vbCAqLwotCXN0YXR1cyA9IF9fdnhnZV9od19tZW1wb29sX2dyb3cobWVtcG9vbCwgbWVtYmxvY2tzX3RvX2FsbG9jYXRlLAotCQkJCQkmYWxsb2NhdGVkKTsKKwlzdGF0dXMgPSBfX3Z4Z2VfaHdfY2hhbm5lbF9pbml0aWFsaXplKCZyaW5nLT5jaGFubmVsKTsKIAlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spIHsKLQkJX192eGdlX2h3X21lbXBvb2xfZGVzdHJveShtZW1wb29sKTsKLQkJc3RhdHVzID0gVlhHRV9IV19FUlJfT1VUX09GX01FTU9SWTsKLQkJbWVtcG9vbCA9IE5VTEw7CisJCV9fdnhnZV9od19yaW5nX2RlbGV0ZSh2cCk7CiAJCWdvdG8gZXhpdDsKIAl9CiAKLWV4aXQ6Ci0JcmV0dXJuIG1lbXBvb2w7Ci19Ci0KLS8qCi0gKiB2eGdlX2h3X21lbXBvb2xfZGVzdHJveQotICovCi1zdGF0aWMgdm9pZCBfX3Z4Z2VfaHdfbWVtcG9vbF9kZXN0cm95KHN0cnVjdCB2eGdlX2h3X21lbXBvb2wgKm1lbXBvb2wpCi17Ci0JdTMyIGksIGo7Ci0Jc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmggPSBtZW1wb29sLT5kZXZoOwotCi0JZm9yIChpID0gMDsgaSA8IG1lbXBvb2wtPm1lbWJsb2Nrc19hbGxvY2F0ZWQ7IGkrKykgewotCQlzdHJ1Y3QgdnhnZV9od19tZW1wb29sX2RtYSAqZG1hX29iamVjdDsKLQotCQl2eGdlX2Fzc2VydChtZW1wb29sLT5tZW1ibG9ja3NfYXJyW2ldKTsKLQkJdnhnZV9hc3NlcnQobWVtcG9vbC0+bWVtYmxvY2tzX2RtYV9hcnIgKyBpKTsKLQotCQlkbWFfb2JqZWN0ID0gbWVtcG9vbC0+bWVtYmxvY2tzX2RtYV9hcnIgKyBpOwotCi0JCWZvciAoaiA9IDA7IGogPCBtZW1wb29sLT5pdGVtc19wZXJfbWVtYmxvY2s7IGorKykgewotCQkJdTMyIGluZGV4ID0gaSAqIG1lbXBvb2wtPml0ZW1zX3Blcl9tZW1ibG9jayArIGo7Ci0KLQkJCS8qIHRvIHNraXAgbGFzdCBwYXJ0aWFsbHkgZmlsbGVkKGlmIGFueSkgbWVtYmxvY2sgKi8KLQkJCWlmIChpbmRleCA+PSBtZW1wb29sLT5pdGVtc19jdXJyZW50KQotCQkJCWJyZWFrOworCS8qIE5vdGU6CisJICogU3BlY2lmeWluZyByeGRfaW5pdCBjYWxsYmFjayBtZWFucyB0d28gdGhpbmdzOgorCSAqIDEpIHJ4ZHMgbmVlZCB0byBiZSBpbml0aWFsaXplZCBieSBkcml2ZXIgYXQgY2hhbm5lbC1vcGVuIHRpbWU7CisJICogMikgcnhkcyBuZWVkIHRvIGJlIHBvc3RlZCBhdCBjaGFubmVsLW9wZW4gdGltZQorCSAqICAgICh0aGF0J3Mgd2hhdCB0aGUgaW5pdGlhbF9yZXBsZW5pc2goKSBiZWxvdyBkb2VzKQorCSAqIEN1cnJlbnRseSB3ZSBkb24ndCBoYXZlIGEgY2FzZSB3aGVuIHRoZSAxKSBpcyBkb25lIHdpdGhvdXQgdGhlIDIpLgorCSAqLworCWlmIChyaW5nLT5yeGRfaW5pdCkgeworCQlzdGF0dXMgPSB2eGdlX2h3X3JpbmdfcmVwbGVuaXNoKHJpbmcpOworCQlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spIHsKKwkJCV9fdnhnZV9od19yaW5nX2RlbGV0ZSh2cCk7CisJCQlnb3RvIGV4aXQ7CiAJCX0KLQotCQl2ZnJlZShtZW1wb29sLT5tZW1ibG9ja3NfcHJpdl9hcnJbaV0pOwotCi0JCV9fdnhnZV9od19ibG9ja3Bvb2xfZnJlZShkZXZoLCBtZW1wb29sLT5tZW1ibG9ja3NfYXJyW2ldLAotCQkJCW1lbXBvb2wtPm1lbWJsb2NrX3NpemUsIGRtYV9vYmplY3QpOwogCX0KIAotCXZmcmVlKG1lbXBvb2wtPml0ZW1zX2Fycik7Ci0KLQl2ZnJlZShtZW1wb29sLT5tZW1ibG9ja3NfZG1hX2Fycik7Ci0KLQl2ZnJlZShtZW1wb29sLT5tZW1ibG9ja3NfcHJpdl9hcnIpOwotCi0JdmZyZWUobWVtcG9vbC0+bWVtYmxvY2tzX2Fycik7Ci0KLQl2ZnJlZShtZW1wb29sKTsKLX0KLQotLyoKLSAqIF9fdnhnZV9od19kZXZpY2VfZmlmb19jb25maWdfY2hlY2sgLSBDaGVjayBmaWZvIGNvbmZpZ3VyYXRpb24uCi0gKiBDaGVjayB0aGUgZmlmbyBjb25maWd1cmF0aW9uCi0gKi8KLWVudW0gdnhnZV9od19zdGF0dXMKLV9fdnhnZV9od19kZXZpY2VfZmlmb19jb25maWdfY2hlY2soc3RydWN0IHZ4Z2VfaHdfZmlmb19jb25maWcgKmZpZm9fY29uZmlnKQotewotCWlmICgoZmlmb19jb25maWctPmZpZm9fYmxvY2tzIDwgVlhHRV9IV19NSU5fRklGT19CTE9DS1MpIHx8Ci0JICAgICAoZmlmb19jb25maWctPmZpZm9fYmxvY2tzID4gVlhHRV9IV19NQVhfRklGT19CTE9DS1MpKQotCQlyZXR1cm4gVlhHRV9IV19CQURDRkdfRklGT19CTE9DS1M7Ci0KLQlyZXR1cm4gVlhHRV9IV19PSzsKLX0KLQotLyoKLSAqIF9fdnhnZV9od19kZXZpY2VfdnBhdGhfY29uZmlnX2NoZWNrIC0gQ2hlY2sgdnBhdGggY29uZmlndXJhdGlvbi4KLSAqIENoZWNrIHRoZSB2cGF0aCBjb25maWd1cmF0aW9uCi0gKi8KLXN0YXRpYyBlbnVtIHZ4Z2VfaHdfc3RhdHVzCi1fX3Z4Z2VfaHdfZGV2aWNlX3ZwYXRoX2NvbmZpZ19jaGVjayhzdHJ1Y3QgdnhnZV9od192cF9jb25maWcgKnZwX2NvbmZpZykKLXsKLQllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1czsKLQotCWlmICgodnBfY29uZmlnLT5taW5fYmFuZHdpZHRoIDwgVlhHRV9IV19WUEFUSF9CQU5EV0lEVEhfTUlOKSB8fAotCQkodnBfY29uZmlnLT5taW5fYmFuZHdpZHRoID4KLQkJCQkJVlhHRV9IV19WUEFUSF9CQU5EV0lEVEhfTUFYKSkKLQkJcmV0dXJuIFZYR0VfSFdfQkFEQ0ZHX1ZQQVRIX01JTl9CQU5EV0lEVEg7Ci0KLQlzdGF0dXMgPSBfX3Z4Z2VfaHdfZGV2aWNlX2ZpZm9fY29uZmlnX2NoZWNrKCZ2cF9jb25maWctPmZpZm8pOwotCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKLQkJcmV0dXJuIHN0YXR1czsKLQotCWlmICgodnBfY29uZmlnLT5tdHUgIT0gVlhHRV9IV19WUEFUSF9VU0VfRkxBU0hfREVGQVVMVF9JTklUSUFMX01UVSkgJiYKLQkJKCh2cF9jb25maWctPm10dSA8IFZYR0VfSFdfVlBBVEhfTUlOX0lOSVRJQUxfTVRVKSB8fAotCQkodnBfY29uZmlnLT5tdHUgPiBWWEdFX0hXX1ZQQVRIX01BWF9JTklUSUFMX01UVSkpKQotCQlyZXR1cm4gVlhHRV9IV19CQURDRkdfVlBBVEhfTVRVOwotCi0JaWYgKCh2cF9jb25maWctPnJwYV9zdHJpcF92bGFuX3RhZyAhPQotCQlWWEdFX0hXX1ZQQVRIX1JQQV9TVFJJUF9WTEFOX1RBR19VU0VfRkxBU0hfREVGQVVMVCkgJiYKLQkJKHZwX2NvbmZpZy0+cnBhX3N0cmlwX3ZsYW5fdGFnICE9Ci0JCVZYR0VfSFdfVlBBVEhfUlBBX1NUUklQX1ZMQU5fVEFHX0VOQUJMRSkgJiYKLQkJKHZwX2NvbmZpZy0+cnBhX3N0cmlwX3ZsYW5fdGFnICE9Ci0JCVZYR0VfSFdfVlBBVEhfUlBBX1NUUklQX1ZMQU5fVEFHX0RJU0FCTEUpKQotCQlyZXR1cm4gVlhHRV9IV19CQURDRkdfVlBBVEhfUlBBX1NUUklQX1ZMQU5fVEFHOwotCi0JcmV0dXJuIFZYR0VfSFdfT0s7Ci19Ci0KLS8qCi0gKiBfX3Z4Z2VfaHdfZGV2aWNlX2NvbmZpZ19jaGVjayAtIENoZWNrIGRldmljZSBjb25maWd1cmF0aW9uLgotICogQ2hlY2sgdGhlIGRldmljZSBjb25maWd1cmF0aW9uCi0gKi8KLWVudW0gdnhnZV9od19zdGF0dXMKLV9fdnhnZV9od19kZXZpY2VfY29uZmlnX2NoZWNrKHN0cnVjdCB2eGdlX2h3X2RldmljZV9jb25maWcgKm5ld19jb25maWcpCi17Ci0JdTMyIGk7Ci0JZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXM7Ci0KLQlpZiAoKG5ld19jb25maWctPmludHJfbW9kZSAhPSBWWEdFX0hXX0lOVFJfTU9ERV9JUlFMSU5FKSAmJgotCSAgIChuZXdfY29uZmlnLT5pbnRyX21vZGUgIT0gVlhHRV9IV19JTlRSX01PREVfTVNJWCkgJiYKLQkgICAobmV3X2NvbmZpZy0+aW50cl9tb2RlICE9IFZYR0VfSFdfSU5UUl9NT0RFX01TSVhfT05FX1NIT1QpICYmCi0JICAgKG5ld19jb25maWctPmludHJfbW9kZSAhPSBWWEdFX0hXX0lOVFJfTU9ERV9ERUYpKQotCQlyZXR1cm4gVlhHRV9IV19CQURDRkdfSU5UUl9NT0RFOwotCi0JaWYgKChuZXdfY29uZmlnLT5ydHNfbWFjX2VuICE9IFZYR0VfSFdfUlRTX01BQ19ESVNBQkxFKSAmJgotCSAgIChuZXdfY29uZmlnLT5ydHNfbWFjX2VuICE9IFZYR0VfSFdfUlRTX01BQ19FTkFCTEUpKQotCQlyZXR1cm4gVlhHRV9IV19CQURDRkdfUlRTX01BQ19FTjsKLQotCWZvciAoaSA9IDA7IGkgPCBWWEdFX0hXX01BWF9WSVJUVUFMX1BBVEhTOyBpKyspIHsKLQkJc3RhdHVzID0gX192eGdlX2h3X2RldmljZV92cGF0aF9jb25maWdfY2hlY2soCi0JCQkJJm5ld19jb25maWctPnZwX2NvbmZpZ1tpXSk7Ci0JCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKLQkJCXJldHVybiBzdGF0dXM7Ci0JfQotCi0JcmV0dXJuIFZYR0VfSFdfT0s7CisJLyogaW5pdGlhbCByZXBsZW5pc2ggd2lsbCBpbmNyZW1lbnQgdGhlIGNvdW50ZXIgaW4gaXRzIHBvc3QoKSByb3V0aW5lLAorCSAqIHdlIGhhdmUgdG8gcmVzZXQgaXQgKi8KKwlyaW5nLT5zdGF0cy0+Y29tbW9uX3N0YXRzLnVzYWdlX2NudCA9IDA7CitleGl0OgorCXJldHVybiBzdGF0dXM7CiB9CiAKIC8qCkBAIC0xOTM4LDcgKzI5NDcsNiBAQAogCWRldmljZV9jb25maWctPnJ0c19tYWNfZW4gPSAgVlhHRV9IV19SVFNfTUFDX0RFRkFVTFQ7CiAKIAlmb3IgKGkgPSAwOyBpIDwgVlhHRV9IV19NQVhfVklSVFVBTF9QQVRIUzsgaSsrKSB7Ci0KIAkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnZwX2lkID0gaTsKIAogCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0ubWluX2JhbmR3aWR0aCA9CkBAIC0yMDc4LDYxICszMDg2LDYgQEAKIH0KIAogLyoKLSAqIF9od19sZWdhY3lfc3dhcHBlcl9zZXQgLSBTZXQgdGhlIHN3YXBwZXIgYml0cyBmb3IgdGhlIGxlZ2FjeSBzZWNpb24uCi0gKiBTZXQgdGhlIHN3YXBwZXIgYml0cyBhcHByb3ByaWF0ZWx5IGZvciB0aGUgbGFnYWN5IHNlY3Rpb24uCi0gKi8KLXN0YXRpYyBlbnVtIHZ4Z2VfaHdfc3RhdHVzCi1fX3Z4Z2VfaHdfbGVnYWN5X3N3YXBwZXJfc2V0KHN0cnVjdCB2eGdlX2h3X2xlZ2FjeV9yZWcgX19pb21lbSAqbGVnYWN5X3JlZykKLXsKLQl1NjQgdmFsNjQ7Ci0JZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOwotCi0JdmFsNjQgPSByZWFkcSgmbGVnYWN5X3JlZy0+dG9jX3N3YXBwZXJfZmIpOwotCi0Jd21iKCk7Ci0KLQlzd2l0Y2ggKHZhbDY0KSB7Ci0KLQljYXNlIFZYR0VfSFdfU1dBUFBFUl9JTklUSUFMX1ZBTFVFOgotCQlyZXR1cm4gc3RhdHVzOwotCi0JY2FzZSBWWEdFX0hXX1NXQVBQRVJfQllURV9TV0FQUEVEX0JJVF9GTElQUEVEOgotCQl3cml0ZXEoVlhHRV9IV19TV0FQUEVSX1JFQURfQllURV9TV0FQX0VOQUJMRSwKLQkJCSZsZWdhY3lfcmVnLT5waWZtX3JkX3N3YXBfZW4pOwotCQl3cml0ZXEoVlhHRV9IV19TV0FQUEVSX1JFQURfQklUX0ZMQVBfRU5BQkxFLAotCQkJJmxlZ2FjeV9yZWctPnBpZm1fcmRfZmxpcF9lbik7Ci0JCXdyaXRlcShWWEdFX0hXX1NXQVBQRVJfV1JJVEVfQllURV9TV0FQX0VOQUJMRSwKLQkJCSZsZWdhY3lfcmVnLT5waWZtX3dyX3N3YXBfZW4pOwotCQl3cml0ZXEoVlhHRV9IV19TV0FQUEVSX1dSSVRFX0JJVF9GTEFQX0VOQUJMRSwKLQkJCSZsZWdhY3lfcmVnLT5waWZtX3dyX2ZsaXBfZW4pOwotCQlicmVhazsKLQotCWNhc2UgVlhHRV9IV19TV0FQUEVSX0JZVEVfU1dBUFBFRDoKLQkJd3JpdGVxKFZYR0VfSFdfU1dBUFBFUl9SRUFEX0JZVEVfU1dBUF9FTkFCTEUsCi0JCQkmbGVnYWN5X3JlZy0+cGlmbV9yZF9zd2FwX2VuKTsKLQkJd3JpdGVxKFZYR0VfSFdfU1dBUFBFUl9XUklURV9CWVRFX1NXQVBfRU5BQkxFLAotCQkJJmxlZ2FjeV9yZWctPnBpZm1fd3Jfc3dhcF9lbik7Ci0JCWJyZWFrOwotCi0JY2FzZSBWWEdFX0hXX1NXQVBQRVJfQklUX0ZMSVBQRUQ6Ci0JCXdyaXRlcShWWEdFX0hXX1NXQVBQRVJfUkVBRF9CSVRfRkxBUF9FTkFCTEUsCi0JCQkmbGVnYWN5X3JlZy0+cGlmbV9yZF9mbGlwX2VuKTsKLQkJd3JpdGVxKFZYR0VfSFdfU1dBUFBFUl9XUklURV9CSVRfRkxBUF9FTkFCTEUsCi0JCQkmbGVnYWN5X3JlZy0+cGlmbV93cl9mbGlwX2VuKTsKLQkJYnJlYWs7Ci0JfQotCi0Jd21iKCk7Ci0KLQl2YWw2NCA9IHJlYWRxKCZsZWdhY3lfcmVnLT50b2Nfc3dhcHBlcl9mYik7Ci0KLQlpZiAodmFsNjQgIT0gVlhHRV9IV19TV0FQUEVSX0lOSVRJQUxfVkFMVUUpCi0JCXN0YXR1cyA9IFZYR0VfSFdfRVJSX1NXQVBQRVJfQ1RSTDsKLQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qCiAgKiBfX3Z4Z2VfaHdfdnBhdGhfc3dhcHBlcl9zZXQgLSBTZXQgdGhlIHN3YXBwZXIgYml0cyBmb3IgdGhlIHZwYXRoLgogICogU2V0IHRoZSBzd2FwcGVyIGJpdHMgYXBwcm9wcmlhdGVseSBmb3IgdGhlIHZwYXRoLgogICovCkBAIC0yMTU2LDkgKzMxMDksOCBAQAogICogU2V0IHRoZSBzd2FwcGVyIGJpdHMgYXBwcm9wcmlhdGVseSBmb3IgdGhlIHZwYXRoLgogICovCiBzdGF0aWMgZW51bSB2eGdlX2h3X3N0YXR1cwotX192eGdlX2h3X2tkZmNfc3dhcHBlcl9zZXQoCi0Jc3RydWN0IHZ4Z2VfaHdfbGVnYWN5X3JlZyBfX2lvbWVtICpsZWdhY3lfcmVnLAotCXN0cnVjdCB2eGdlX2h3X3ZwYXRoX3JlZyBfX2lvbWVtICp2cGF0aF9yZWcpCitfX3Z4Z2VfaHdfa2RmY19zd2FwcGVyX3NldChzdHJ1Y3QgdnhnZV9od19sZWdhY3lfcmVnIF9faW9tZW0gKmxlZ2FjeV9yZWcsCisJCQkgICBzdHJ1Y3QgdnhnZV9od192cGF0aF9yZWcgX19pb21lbSAqdnBhdGhfcmVnKQogewogCXU2NCB2YWw2NDsKIApAQCAtMjQwOCw2ICszMzYwLDY5IEBACiB9CiAKIC8qCisgKiBfX3Z4Z2VfaHdfZmlmb19hYm9ydCAtIFJldHVybnMgdGhlIFR4RAorICogVGhpcyBmdW5jdGlvbiB0ZXJtaW5hdGVzIHRoZSBUeERzIG9mIGZpZm8KKyAqLworc3RhdGljIGVudW0gdnhnZV9od19zdGF0dXMgX192eGdlX2h3X2ZpZm9fYWJvcnQoc3RydWN0IF9fdnhnZV9od19maWZvICpmaWZvKQoreworCXZvaWQgKnR4ZGxoOworCisJZm9yICg7OykgeworCQl2eGdlX2h3X2NoYW5uZWxfZHRyX3RyeV9jb21wbGV0ZSgmZmlmby0+Y2hhbm5lbCwgJnR4ZGxoKTsKKworCQlpZiAodHhkbGggPT0gTlVMTCkKKwkJCWJyZWFrOworCisJCXZ4Z2VfaHdfY2hhbm5lbF9kdHJfY29tcGxldGUoJmZpZm8tPmNoYW5uZWwpOworCisJCWlmIChmaWZvLT50eGRsX3Rlcm0pIHsKKwkJCWZpZm8tPnR4ZGxfdGVybSh0eGRsaCwKKwkJCVZYR0VfSFdfVFhETF9TVEFURV9QT1NURUQsCisJCQlmaWZvLT5jaGFubmVsLnVzZXJkYXRhKTsKKwkJfQorCisJCXZ4Z2VfaHdfY2hhbm5lbF9kdHJfZnJlZSgmZmlmby0+Y2hhbm5lbCwgdHhkbGgpOworCX0KKworCXJldHVybiBWWEdFX0hXX09LOworfQorCisvKgorICogX192eGdlX2h3X2ZpZm9fcmVzZXQgLSBSZXNldHMgdGhlIGZpZm8KKyAqIFRoaXMgZnVuY3Rpb24gcmVzZXRzIHRoZSBmaWZvIGR1cmluZyB2cGF0aCByZXNldCBvcGVyYXRpb24KKyAqLworc3RhdGljIGVudW0gdnhnZV9od19zdGF0dXMgX192eGdlX2h3X2ZpZm9fcmVzZXQoc3RydWN0IF9fdnhnZV9od19maWZvICpmaWZvKQoreworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKworCV9fdnhnZV9od19maWZvX2Fib3J0KGZpZm8pOworCXN0YXR1cyA9IF9fdnhnZV9od19jaGFubmVsX3Jlc2V0KCZmaWZvLT5jaGFubmVsKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfZmlmb19kZWxldGUgLSBSZW1vdmVzIHRoZSBGSUZPCisgKiBUaGlzIGZ1bmN0aW9uIGZyZWV1cCB0aGUgbWVtb3J5IHBvb2wgYW5kIHJlbW92ZXMgdGhlIEZJRk8KKyAqLworc3RhdGljIGVudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od19maWZvX2RlbGV0ZShzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnApCit7CisJc3RydWN0IF9fdnhnZV9od19maWZvICpmaWZvID0gdnAtPnZwYXRoLT5maWZvaDsKKworCV9fdnhnZV9od19maWZvX2Fib3J0KGZpZm8pOworCisJaWYgKGZpZm8tPm1lbXBvb2wpCisJCV9fdnhnZV9od19tZW1wb29sX2Rlc3Ryb3koZmlmby0+bWVtcG9vbCk7CisKKwl2cC0+dnBhdGgtPmZpZm9oID0gTlVMTDsKKworCV9fdnhnZV9od19jaGFubmVsX2ZyZWUoJmZpZm8tPmNoYW5uZWwpOworCisJcmV0dXJuIFZYR0VfSFdfT0s7Cit9CisKKy8qCiAgKiBfX3Z4Z2VfaHdfZmlmb19tZW1wb29sX2l0ZW1fYWxsb2MgLSBBbGxvY2F0ZSBMaXN0IGJsb2NrcyBmb3IgVHhECiAgKiBsaXN0IGNhbGxiYWNrCiAgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxiYWNrIHBhc3NlZCB0byBfX3Z4Z2VfaHdfbWVtcG9vbF9jcmVhdGUgdG8gY3JlYXRlIG1lbW9yeQpAQCAtMjQ1Myw3ICszNDY4LDcgQEAKICAqIF9fdnhnZV9od19maWZvX2NyZWF0ZSAtIENyZWF0ZSBhIEZJRk8KICAqIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBGSUZPIGFuZCBpbml0aWFsaXplcyBpdC4KICAqLwotZW51bSB2eGdlX2h3X3N0YXR1cworc3RhdGljIGVudW0gdnhnZV9od19zdGF0dXMKIF9fdnhnZV9od19maWZvX2NyZWF0ZShzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnAsCiAJCSAgICAgIHN0cnVjdCB2eGdlX2h3X2ZpZm9fYXR0ciAqYXR0cikKIHsKQEAgLTI1NzIsNjggKzM1ODcsNiBAQAogfQogCiAvKgotICogX192eGdlX2h3X2ZpZm9fYWJvcnQgLSBSZXR1cm5zIHRoZSBUeEQKLSAqIFRoaXMgZnVuY3Rpb24gdGVybWluYXRlcyB0aGUgVHhEcyBvZiBmaWZvCi0gKi8KLXN0YXRpYyBlbnVtIHZ4Z2VfaHdfc3RhdHVzIF9fdnhnZV9od19maWZvX2Fib3J0KHN0cnVjdCBfX3Z4Z2VfaHdfZmlmbyAqZmlmbykKLXsKLQl2b2lkICp0eGRsaDsKLQotCWZvciAoOzspIHsKLQkJdnhnZV9od19jaGFubmVsX2R0cl90cnlfY29tcGxldGUoJmZpZm8tPmNoYW5uZWwsICZ0eGRsaCk7Ci0KLQkJaWYgKHR4ZGxoID09IE5VTEwpCi0JCQlicmVhazsKLQotCQl2eGdlX2h3X2NoYW5uZWxfZHRyX2NvbXBsZXRlKCZmaWZvLT5jaGFubmVsKTsKLQotCQlpZiAoZmlmby0+dHhkbF90ZXJtKSB7Ci0JCQlmaWZvLT50eGRsX3Rlcm0odHhkbGgsCi0JCQlWWEdFX0hXX1RYRExfU1RBVEVfUE9TVEVELAotCQkJZmlmby0+Y2hhbm5lbC51c2VyZGF0YSk7Ci0JCX0KLQotCQl2eGdlX2h3X2NoYW5uZWxfZHRyX2ZyZWUoJmZpZm8tPmNoYW5uZWwsIHR4ZGxoKTsKLQl9Ci0KLQlyZXR1cm4gVlhHRV9IV19PSzsKLX0KLQotLyoKLSAqIF9fdnhnZV9od19maWZvX3Jlc2V0IC0gUmVzZXRzIHRoZSBmaWZvCi0gKiBUaGlzIGZ1bmN0aW9uIHJlc2V0cyB0aGUgZmlmbyBkdXJpbmcgdnBhdGggcmVzZXQgb3BlcmF0aW9uCi0gKi8KLXN0YXRpYyBlbnVtIHZ4Z2VfaHdfc3RhdHVzIF9fdnhnZV9od19maWZvX3Jlc2V0KHN0cnVjdCBfX3Z4Z2VfaHdfZmlmbyAqZmlmbykKLXsKLQllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7Ci0KLQlfX3Z4Z2VfaHdfZmlmb19hYm9ydChmaWZvKTsKLQlzdGF0dXMgPSBfX3Z4Z2VfaHdfY2hhbm5lbF9yZXNldCgmZmlmby0+Y2hhbm5lbCk7Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgotICogX192eGdlX2h3X2ZpZm9fZGVsZXRlIC0gUmVtb3ZlcyB0aGUgRklGTwotICogVGhpcyBmdW5jdGlvbiBmcmVldXAgdGhlIG1lbW9yeSBwb29sIGFuZCByZW1vdmVzIHRoZSBGSUZPCi0gKi8KLWVudW0gdnhnZV9od19zdGF0dXMgX192eGdlX2h3X2ZpZm9fZGVsZXRlKHN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cCkKLXsKLQlzdHJ1Y3QgX192eGdlX2h3X2ZpZm8gKmZpZm8gPSB2cC0+dnBhdGgtPmZpZm9oOwotCi0JX192eGdlX2h3X2ZpZm9fYWJvcnQoZmlmbyk7Ci0KLQlpZiAoZmlmby0+bWVtcG9vbCkKLQkJX192eGdlX2h3X21lbXBvb2xfZGVzdHJveShmaWZvLT5tZW1wb29sKTsKLQotCXZwLT52cGF0aC0+Zmlmb2ggPSBOVUxMOwotCi0JX192eGdlX2h3X2NoYW5uZWxfZnJlZSgmZmlmby0+Y2hhbm5lbCk7Ci0KLQlyZXR1cm4gVlhHRV9IV19PSzsKLX0KLQotLyoKICAqIF9fdnhnZV9od192cGF0aF9wY2lfcmVhZCAtIFJlYWQgdGhlIGNvbnRlbnQgb2YgZ2l2ZW4gYWRkcmVzcwogICogICAgICAgICAgICAgICAgICAgICAgICAgIGluIHBjaSBjb25maWcgc3BhY2UuCiAgKiBSZWFkIGZyb20gdGhlIHZwYXRoIHBjaSBjb25maWcgc3BhY2UuCkBAIC0yNjc1LDI5NyArMzYyOCw2IEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAotLyoKLSAqIF9fdnhnZV9od192cGF0aF9mdW5jX2lkX2dldCAtIEdldCB0aGUgZnVuY3Rpb24gaWQgb2YgdGhlIHZwYXRoLgotICogUmV0dXJucyB0aGUgZnVuY3Rpb24gbnVtYmVyIG9mIHRoZSB2cGF0aC4KLSAqLwotc3RhdGljIHUzMgotX192eGdlX2h3X3ZwYXRoX2Z1bmNfaWRfZ2V0KHUzMiB2cF9pZCwKLQlzdHJ1Y3QgdnhnZV9od192cG1nbXRfcmVnIF9faW9tZW0gKnZwbWdtdF9yZWcpCi17Ci0JdTY0IHZhbDY0OwotCi0JdmFsNjQgPSByZWFkcSgmdnBtZ210X3JlZy0+dnBhdGhfdG9fZnVuY19tYXBfY2ZnMSk7Ci0KLQlyZXR1cm4KLQkgKHUzMilWWEdFX0hXX1ZQQVRIX1RPX0ZVTkNfTUFQX0NGRzFfR0VUX1ZQQVRIX1RPX0ZVTkNfTUFQX0NGRzEodmFsNjQpOwotfQotCi0vKgotICogX192eGdlX2h3X3JlYWRfcnRzX2RzIC0gUHJvZ3JhbSBSVFMgc3RlZXJpbmcgY3JpdGllcmlhCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAotX192eGdlX2h3X3JlYWRfcnRzX2RzKHN0cnVjdCB2eGdlX2h3X3ZwYXRoX3JlZyBfX2lvbWVtICp2cGF0aF9yZWcsCi0JCSAgICAgIHU2NCBkdGFfc3RydWN0X3NlbCkKLXsKLQl3cml0ZXEoMCwgJnZwYXRoX3JlZy0+cnRzX2FjY2Vzc19zdGVlcl9jdHJsKTsKLQl3bWIoKTsKLQl3cml0ZXEoZHRhX3N0cnVjdF9zZWwsICZ2cGF0aF9yZWctPnJ0c19hY2Nlc3Nfc3RlZXJfZGF0YTApOwotCXdyaXRlcSgwLCAmdnBhdGhfcmVnLT5ydHNfYWNjZXNzX3N0ZWVyX2RhdGExKTsKLQl3bWIoKTsKLX0KLQotCi0vKgotICogX192eGdlX2h3X3ZwYXRoX2NhcmRfaW5mb19nZXQgLSBHZXQgdGhlIHNlcmlhbCBudW1iZXJzLAotICogcGFydCBudW1iZXIgYW5kIHByb2R1Y3QgZGVzY3JpcHRpb24uCi0gKi8KLXN0YXRpYyBlbnVtIHZ4Z2VfaHdfc3RhdHVzCi1fX3Z4Z2VfaHdfdnBhdGhfY2FyZF9pbmZvX2dldCgKLQl1MzIgdnBfaWQsCi0Jc3RydWN0IHZ4Z2VfaHdfdnBhdGhfcmVnIF9faW9tZW0gKnZwYXRoX3JlZywKLQlzdHJ1Y3QgdnhnZV9od19kZXZpY2VfaHdfaW5mbyAqaHdfaW5mbykKLXsKLQl1MzIgaSwgajsKLQl1NjQgdmFsNjQ7Ci0JdTY0IGRhdGExID0gMFVMTDsKLQl1NjQgZGF0YTIgPSAwVUxMOwotCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKLQl1OCAqc2VyaWFsX251bWJlciA9IGh3X2luZm8tPnNlcmlhbF9udW1iZXI7Ci0JdTggKnBhcnRfbnVtYmVyID0gaHdfaW5mby0+cGFydF9udW1iZXI7Ci0JdTggKnByb2R1Y3RfZGVzYyA9IGh3X2luZm8tPnByb2R1Y3RfZGVzYzsKLQotCV9fdnhnZV9od19yZWFkX3J0c19kcyh2cGF0aF9yZWcsCi0JCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9NRU1PX0lURU1fU0VSSUFMX05VTUJFUik7Ci0KLQl2YWw2NCA9IFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0FDVElPTigKLQkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0FDVElPTl9SRUFEX01FTU9fRU5UUlkpIHwKLQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMKAotCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX0ZXX01FTU8pIHwKLQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfU1RST0JFIHwKLQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfT0ZGU0VUKDApOwotCi0Jc3RhdHVzID0gX192eGdlX2h3X3Bpb19tZW1fd3JpdGU2NCh2YWw2NCwKLQkJCQkmdnBhdGhfcmVnLT5ydHNfYWNjZXNzX3N0ZWVyX2N0cmwsCi0JCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfU1RST0JFLAotCQkJCVZYR0VfSFdfREVGX0RFVklDRV9QT0xMX01JTExJUyk7Ci0KLQlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCi0JCXJldHVybiBzdGF0dXM7Ci0KLQl2YWw2NCA9IHJlYWRxKCZ2cGF0aF9yZWctPnJ0c19hY2Nlc3Nfc3RlZXJfY3RybCk7Ci0KLQlpZiAodmFsNjQgJiBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9STUFDSl9TVEFUVVMpIHsKLQkJZGF0YTEgPSByZWFkcSgmdnBhdGhfcmVnLT5ydHNfYWNjZXNzX3N0ZWVyX2RhdGEwKTsKLQkJKCh1NjQgKilzZXJpYWxfbnVtYmVyKVswXSA9IGJlNjRfdG9fY3B1KGRhdGExKTsKLQotCQlkYXRhMiA9IHJlYWRxKCZ2cGF0aF9yZWctPnJ0c19hY2Nlc3Nfc3RlZXJfZGF0YTEpOwotCQkoKHU2NCAqKXNlcmlhbF9udW1iZXIpWzFdID0gYmU2NF90b19jcHUoZGF0YTIpOwotCQlzdGF0dXMgPSBWWEdFX0hXX09LOwotCX0gZWxzZQotCQkqc2VyaWFsX251bWJlciA9IDA7Ci0KLQlfX3Z4Z2VfaHdfcmVhZF9ydHNfZHModnBhdGhfcmVnLAotCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX01FTU9fSVRFTV9QQVJUX05VTUJFUik7Ci0KLQl2YWw2NCA9IFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0FDVElPTigKLQkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0FDVElPTl9SRUFEX01FTU9fRU5UUlkpIHwKLQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMKAotCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX0ZXX01FTU8pIHwKLQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfU1RST0JFIHwKLQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfT0ZGU0VUKDApOwotCi0Jc3RhdHVzID0gX192eGdlX2h3X3Bpb19tZW1fd3JpdGU2NCh2YWw2NCwKLQkJCQkmdnBhdGhfcmVnLT5ydHNfYWNjZXNzX3N0ZWVyX2N0cmwsCi0JCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfU1RST0JFLAotCQkJCVZYR0VfSFdfREVGX0RFVklDRV9QT0xMX01JTExJUyk7Ci0KLQlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCi0JCXJldHVybiBzdGF0dXM7Ci0KLQl2YWw2NCA9IHJlYWRxKCZ2cGF0aF9yZWctPnJ0c19hY2Nlc3Nfc3RlZXJfY3RybCk7Ci0KLQlpZiAodmFsNjQgJiBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9STUFDSl9TVEFUVVMpIHsKLQotCQlkYXRhMSA9IHJlYWRxKCZ2cGF0aF9yZWctPnJ0c19hY2Nlc3Nfc3RlZXJfZGF0YTApOwotCQkoKHU2NCAqKXBhcnRfbnVtYmVyKVswXSA9IGJlNjRfdG9fY3B1KGRhdGExKTsKLQotCQlkYXRhMiA9IHJlYWRxKCZ2cGF0aF9yZWctPnJ0c19hY2Nlc3Nfc3RlZXJfZGF0YTEpOwotCQkoKHU2NCAqKXBhcnRfbnVtYmVyKVsxXSA9IGJlNjRfdG9fY3B1KGRhdGEyKTsKLQotCQlzdGF0dXMgPSBWWEdFX0hXX09LOwotCi0JfSBlbHNlCi0JCSpwYXJ0X251bWJlciA9IDA7Ci0KLQlqID0gMDsKLQotCWZvciAoaSA9IFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9NRU1PX0lURU1fREVTQ18wOwotCSAgICAgaSA8PSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfTUVNT19JVEVNX0RFU0NfMzsgaSsrKSB7Ci0KLQkJX192eGdlX2h3X3JlYWRfcnRzX2RzKHZwYXRoX3JlZywgaSk7Ci0KLQkJdmFsNjQgPSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9BQ1RJT04oCi0JCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9BQ1RJT05fUkVBRF9NRU1PX0VOVFJZKSB8Ci0JCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUwoCi0JCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfRldfTUVNTykgfAotCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfU1RST0JFIHwKLQkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX09GRlNFVCgwKTsKLQotCQlzdGF0dXMgPSBfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTY0KHZhbDY0LAotCQkJCSZ2cGF0aF9yZWctPnJ0c19hY2Nlc3Nfc3RlZXJfY3RybCwKLQkJCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9TVFJPQkUsCi0JCQkJVlhHRV9IV19ERUZfREVWSUNFX1BPTExfTUlMTElTKTsKLQotCQlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCi0JCQlyZXR1cm4gc3RhdHVzOwotCi0JCXZhbDY0ID0gcmVhZHEoJnZwYXRoX3JlZy0+cnRzX2FjY2Vzc19zdGVlcl9jdHJsKTsKLQotCQlpZiAodmFsNjQgJiBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9STUFDSl9TVEFUVVMpIHsKLQotCQkJZGF0YTEgPSByZWFkcSgmdnBhdGhfcmVnLT5ydHNfYWNjZXNzX3N0ZWVyX2RhdGEwKTsKLQkJCSgodTY0ICopcHJvZHVjdF9kZXNjKVtqKytdID0gYmU2NF90b19jcHUoZGF0YTEpOwotCi0JCQlkYXRhMiA9IHJlYWRxKCZ2cGF0aF9yZWctPnJ0c19hY2Nlc3Nfc3RlZXJfZGF0YTEpOwotCQkJKCh1NjQgKilwcm9kdWN0X2Rlc2MpW2orK10gPSBiZTY0X3RvX2NwdShkYXRhMik7Ci0KLQkJCXN0YXR1cyA9IFZYR0VfSFdfT0s7Ci0JCX0gZWxzZQotCQkJKnByb2R1Y3RfZGVzYyA9IDA7Ci0JfQotCi0JcmV0dXJuIHN0YXR1czsKLX0KLQotLyoKLSAqIF9fdnhnZV9od192cGF0aF9md192ZXJfZ2V0IC0gR2V0IHRoZSBmdyB2ZXJzaW9uCi0gKiBSZXR1cm5zIEZXIFZlcnNpb24KLSAqLwotc3RhdGljIGVudW0gdnhnZV9od19zdGF0dXMKLV9fdnhnZV9od192cGF0aF9md192ZXJfZ2V0KAotCXUzMiB2cF9pZCwKLQlzdHJ1Y3QgdnhnZV9od192cGF0aF9yZWcgX19pb21lbSAqdnBhdGhfcmVnLAotCXN0cnVjdCB2eGdlX2h3X2RldmljZV9od19pbmZvICpod19pbmZvKQotewotCXU2NCB2YWw2NDsKLQl1NjQgZGF0YTEgPSAwVUxMOwotCXU2NCBkYXRhMiA9IDBVTEw7Ci0Jc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX3ZlcnNpb24gKmZ3X3ZlcnNpb24gPSAmaHdfaW5mby0+ZndfdmVyc2lvbjsKLQlzdHJ1Y3QgdnhnZV9od19kZXZpY2VfZGF0ZSAqZndfZGF0ZSA9ICZod19pbmZvLT5md19kYXRlOwotCXN0cnVjdCB2eGdlX2h3X2RldmljZV92ZXJzaW9uICpmbGFzaF92ZXJzaW9uID0gJmh3X2luZm8tPmZsYXNoX3ZlcnNpb247Ci0Jc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX2RhdGUgKmZsYXNoX2RhdGUgPSAmaHdfaW5mby0+Zmxhc2hfZGF0ZTsKLQllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7Ci0KLQl2YWw2NCA9IFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0FDVElPTigKLQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfQUNUSU9OX1JFQURfRU5UUlkpIHwKLQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMKAotCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfRldfTUVNTykgfAotCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9TVFJPQkUgfAotCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9PRkZTRVQoMCk7Ci0KLQlzdGF0dXMgPSBfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTY0KHZhbDY0LAotCQkJCSZ2cGF0aF9yZWctPnJ0c19hY2Nlc3Nfc3RlZXJfY3RybCwKLQkJCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9TVFJPQkUsCi0JCQkJVlhHRV9IV19ERUZfREVWSUNFX1BPTExfTUlMTElTKTsKLQotCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKLQkJZ290byBleGl0OwotCi0JdmFsNjQgPSByZWFkcSgmdnBhdGhfcmVnLT5ydHNfYWNjZXNzX3N0ZWVyX2N0cmwpOwotCi0JaWYgKHZhbDY0ICYgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfUk1BQ0pfU1RBVFVTKSB7Ci0KLQkJZGF0YTEgPSByZWFkcSgmdnBhdGhfcmVnLT5ydHNfYWNjZXNzX3N0ZWVyX2RhdGEwKTsKLQkJZGF0YTIgPSByZWFkcSgmdnBhdGhfcmVnLT5ydHNfYWNjZXNzX3N0ZWVyX2RhdGExKTsKLQotCQlmd19kYXRlLT5kYXkgPQotCQkJKHUzMilWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfR0VUX0ZXX1ZFUl9EQVkoCi0JCQkJCQlkYXRhMSk7Ci0JCWZ3X2RhdGUtPm1vbnRoID0KLQkJCSh1MzIpVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0dFVF9GV19WRVJfTU9OVEgoCi0JCQkJCQlkYXRhMSk7Ci0JCWZ3X2RhdGUtPnllYXIgPQotCQkJKHUzMilWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfR0VUX0ZXX1ZFUl9ZRUFSKAotCQkJCQkJZGF0YTEpOwotCi0JCXNucHJpbnRmKGZ3X2RhdGUtPmRhdGUsIFZYR0VfSFdfRldfU1RSTEVOLCAiJTIuMmQvJTIuMmQvJTQuNGQiLAotCQkJZndfZGF0ZS0+bW9udGgsIGZ3X2RhdGUtPmRheSwgZndfZGF0ZS0+eWVhcik7Ci0KLQkJZndfdmVyc2lvbi0+bWFqb3IgPQotCQkgICAgKHUzMilWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfR0VUX0ZXX1ZFUl9NQUpPUihkYXRhMSk7Ci0JCWZ3X3ZlcnNpb24tPm1pbm9yID0KLQkJICAgICh1MzIpVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0dFVF9GV19WRVJfTUlOT1IoZGF0YTEpOwotCQlmd192ZXJzaW9uLT5idWlsZCA9Ci0JCSAgICAodTMyKVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9HRVRfRldfVkVSX0JVSUxEKGRhdGExKTsKLQotCQlzbnByaW50Zihmd192ZXJzaW9uLT52ZXJzaW9uLCBWWEdFX0hXX0ZXX1NUUkxFTiwgIiVkLiVkLiVkIiwKLQkJICAgIGZ3X3ZlcnNpb24tPm1ham9yLCBmd192ZXJzaW9uLT5taW5vciwgZndfdmVyc2lvbi0+YnVpbGQpOwotCi0JCWZsYXNoX2RhdGUtPmRheSA9Ci0JCSAgKHUzMilWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfR0VUX0ZMQVNIX1ZFUl9EQVkoZGF0YTIpOwotCQlmbGFzaF9kYXRlLT5tb250aCA9Ci0JCSAodTMyKVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9HRVRfRkxBU0hfVkVSX01PTlRIKGRhdGEyKTsKLQkJZmxhc2hfZGF0ZS0+eWVhciA9Ci0JCSAodTMyKVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9HRVRfRkxBU0hfVkVSX1lFQVIoZGF0YTIpOwotCi0JCXNucHJpbnRmKGZsYXNoX2RhdGUtPmRhdGUsIFZYR0VfSFdfRldfU1RSTEVOLAotCQkJIiUyLjJkLyUyLjJkLyU0LjRkIiwKLQkJCWZsYXNoX2RhdGUtPm1vbnRoLCBmbGFzaF9kYXRlLT5kYXksIGZsYXNoX2RhdGUtPnllYXIpOwotCi0JCWZsYXNoX3ZlcnNpb24tPm1ham9yID0KLQkJICh1MzIpVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX0dFVF9GTEFTSF9WRVJfTUFKT1IoZGF0YTIpOwotCQlmbGFzaF92ZXJzaW9uLT5taW5vciA9Ci0JCSAodTMyKVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9HRVRfRkxBU0hfVkVSX01JTk9SKGRhdGEyKTsKLQkJZmxhc2hfdmVyc2lvbi0+YnVpbGQgPQotCQkgKHUzMilWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfR0VUX0ZMQVNIX1ZFUl9CVUlMRChkYXRhMik7Ci0KLQkJc25wcmludGYoZmxhc2hfdmVyc2lvbi0+dmVyc2lvbiwgVlhHRV9IV19GV19TVFJMRU4sICIlZC4lZC4lZCIsCi0JCQlmbGFzaF92ZXJzaW9uLT5tYWpvciwgZmxhc2hfdmVyc2lvbi0+bWlub3IsCi0JCQlmbGFzaF92ZXJzaW9uLT5idWlsZCk7Ci0KLQkJc3RhdHVzID0gVlhHRV9IV19PSzsKLQotCX0gZWxzZQotCQlzdGF0dXMgPSBWWEdFX0hXX0ZBSUw7Ci1leGl0OgotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qCi0gKiBfX3Z4Z2VfaHdfdnBhdGhfcGNpX2Z1bmNfbW9kZV9nZXQgLSBHZXQgdGhlIHBjaSBtb2RlCi0gKiBSZXR1cm5zIHBjaSBmdW5jdGlvbiBtb2RlCi0gKi8KLXN0YXRpYyB1NjQKLV9fdnhnZV9od192cGF0aF9wY2lfZnVuY19tb2RlX2dldCgKLQl1MzIgIHZwX2lkLAotCXN0cnVjdCB2eGdlX2h3X3ZwYXRoX3JlZyBfX2lvbWVtICp2cGF0aF9yZWcpCi17Ci0JdTY0IHZhbDY0OwotCXU2NCBkYXRhMSA9IDBVTEw7Ci0JZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOwotCi0JX192eGdlX2h3X3JlYWRfcnRzX2RzKHZwYXRoX3JlZywKLQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX01FTU9fSVRFTV9QQ0lfTU9ERSk7Ci0KLQl2YWw2NCA9IFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0FDVElPTigKLQkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0FDVElPTl9SRUFEX01FTU9fRU5UUlkpIHwKLQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMKAotCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX0ZXX01FTU8pIHwKLQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfU1RST0JFIHwKLQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfT0ZGU0VUKDApOwotCi0Jc3RhdHVzID0gX192eGdlX2h3X3Bpb19tZW1fd3JpdGU2NCh2YWw2NCwKLQkJCQkmdnBhdGhfcmVnLT5ydHNfYWNjZXNzX3N0ZWVyX2N0cmwsCi0JCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfU1RST0JFLAotCQkJCVZYR0VfSFdfREVGX0RFVklDRV9QT0xMX01JTExJUyk7Ci0KLQlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCi0JCWdvdG8gZXhpdDsKLQotCXZhbDY0ID0gcmVhZHEoJnZwYXRoX3JlZy0+cnRzX2FjY2Vzc19zdGVlcl9jdHJsKTsKLQotCWlmICh2YWw2NCAmIFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX1JNQUNKX1NUQVRVUykgewotCQlkYXRhMSA9IHJlYWRxKCZ2cGF0aF9yZWctPnJ0c19hY2Nlc3Nfc3RlZXJfZGF0YTApOwotCQlzdGF0dXMgPSBWWEdFX0hXX09LOwotCX0gZWxzZSB7Ci0JCWRhdGExID0gMDsKLQkJc3RhdHVzID0gVlhHRV9IV19GQUlMOwotCX0KLWV4aXQ6Ci0JcmV0dXJuIGRhdGExOwotfQotCiAvKioKICAqIHZ4Z2VfaHdfZGV2aWNlX2ZsaWNrX2xpbmtfbGVkIC0gRmxpY2sgKGJsaW5rKSBsaW5rIExFRC4KICAqIEBobGRldjogSFcgZGV2aWNlLgpAQCAtMjk3NCwzNyArMzYzNiwyNCBAQAogICogRmxpY2tlciB0aGUgbGluayBMRUQuCiAgKi8KIGVudW0gdnhnZV9od19zdGF0dXMKLXZ4Z2VfaHdfZGV2aWNlX2ZsaWNrX2xpbmtfbGVkKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldiwKLQkJCSAgICAgICB1NjQgb25fb2ZmKQordnhnZV9od19kZXZpY2VfZmxpY2tfbGlua19sZWQoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2LCB1NjQgb25fb2ZmKQogewotCXU2NCB2YWw2NDsKLQllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7Ci0Jc3RydWN0IHZ4Z2VfaHdfdnBhdGhfcmVnIF9faW9tZW0gKnZwX3JlZzsKKwlzdHJ1Y3QgX192eGdlX2h3X3ZpcnR1YWxwYXRoICp2cGF0aDsKKwl1NjQgZGF0YTAsIGRhdGExID0gMCwgc3RlZXJfY3RybCA9IDA7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXM7CiAKIAlpZiAoaGxkZXYgPT0gTlVMTCkgewogCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9JTlZBTElEX0RFVklDRTsKIAkJZ290byBleGl0OwogCX0KIAotCXZwX3JlZyA9IGhsZGV2LT52cGF0aF9yZWdbaGxkZXYtPmZpcnN0X3ZwX2lkXTsKKwl2cGF0aCA9ICZobGRldi0+dmlydHVhbF9wYXRoc1tobGRldi0+Zmlyc3RfdnBfaWRdOwogCi0Jd3JpdGVxKDAsICZ2cF9yZWctPnJ0c19hY2Nlc3Nfc3RlZXJfY3RybCk7Ci0Jd21iKCk7Ci0Jd3JpdGVxKG9uX29mZiwgJnZwX3JlZy0+cnRzX2FjY2Vzc19zdGVlcl9kYXRhMCk7Ci0Jd3JpdGVxKDAsICZ2cF9yZWctPnJ0c19hY2Nlc3Nfc3RlZXJfZGF0YTEpOwotCXdtYigpOwotCi0JdmFsNjQgPSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9BQ1RJT04oCi0JCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9BQ1RJT05fTEVEX0NPTlRST0wpIHwKLQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMKAotCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX0ZXX01FTU8pIHwKLQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfU1RST0JFIHwKLQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfT0ZGU0VUKDApOwotCi0Jc3RhdHVzID0gX192eGdlX2h3X3Bpb19tZW1fd3JpdGU2NCh2YWw2NCwKLQkJCQkmdnBfcmVnLT5ydHNfYWNjZXNzX3N0ZWVyX2N0cmwsCi0JCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfU1RST0JFLAotCQkJCVZYR0VfSFdfREVGX0RFVklDRV9QT0xMX01JTExJUyk7CisJZGF0YTAgPSBvbl9vZmY7CisJc3RhdHVzID0gdnhnZV9od192cGF0aF9md19hcGkodnBhdGgsCisJCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9BQ1RJT05fTEVEX0NPTlRST0wsCisJCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfRldfTUVNTywKKwkJCTAsICZkYXRhMCwgJmRhdGExLCAmc3RlZXJfY3RybCk7CiBleGl0OgogCXJldHVybiBzdGF0dXM7CiB9CkBAIC0zMDEzLDYzICszNjYyLDM4IEBACiAgKiBfX3Z4Z2VfaHdfdnBhdGhfcnRzX3RhYmxlX2dldCAtIEdldCB0aGUgZW50cmllcyBmcm9tIFJUUyBhY2Nlc3MgdGFibGVzCiAgKi8KIGVudW0gdnhnZV9od19zdGF0dXMKLV9fdnhnZV9od192cGF0aF9ydHNfdGFibGVfZ2V0KAotCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cCwKLQl1MzIgYWN0aW9uLCB1MzIgcnRzX3RhYmxlLCB1MzIgb2Zmc2V0LCB1NjQgKmRhdGExLCB1NjQgKmRhdGEyKQorX192eGdlX2h3X3ZwYXRoX3J0c190YWJsZV9nZXQoc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwLAorCQkJICAgICAgdTMyIGFjdGlvbiwgdTMyIHJ0c190YWJsZSwgdTMyIG9mZnNldCwKKwkJCSAgICAgIHU2NCAqZGF0YTAsIHU2NCAqZGF0YTEpCiB7Ci0JdTY0IHZhbDY0OwotCXN0cnVjdCBfX3Z4Z2VfaHdfdmlydHVhbHBhdGggKnZwYXRoOwotCXN0cnVjdCB2eGdlX2h3X3ZwYXRoX3JlZyBfX2lvbWVtICp2cF9yZWc7Ci0KLQllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXM7CisJdTY0IHN0ZWVyX2N0cmwgPSAwOwogCiAJaWYgKHZwID09IE5VTEwpIHsKIAkJc3RhdHVzID0gVlhHRV9IV19FUlJfSU5WQUxJRF9IQU5ETEU7CiAJCWdvdG8gZXhpdDsKIAl9CiAKLQl2cGF0aCA9IHZwLT52cGF0aDsKLQl2cF9yZWcgPSB2cGF0aC0+dnBfcmVnOwotCi0JdmFsNjQgPSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9BQ1RJT04oYWN0aW9uKSB8Ci0JCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTChydHNfdGFibGUpIHwKLQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfU1RST0JFIHwKLQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfT0ZGU0VUKG9mZnNldCk7Ci0KIAlpZiAoKHJ0c190YWJsZSA9PQotCQlWWEdFX0hXX1JUU19BQ1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfUlRIX1NPTE9fSVQpIHx8CisJICAgICBWWEdFX0hXX1JUU19BQ1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfUlRIX1NPTE9fSVQpIHx8CiAJICAgIChydHNfdGFibGUgPT0KLQkJVlhHRV9IV19SVFNfQUNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX1JUSF9NVUxUSV9JVCkgfHwKKwkgICAgIFZYR0VfSFdfUlRTX0FDU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9SVEhfTVVMVElfSVQpIHx8CiAJICAgIChydHNfdGFibGUgPT0KLQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX1JUSF9NQVNLKSB8fAorCSAgICAgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX1JUSF9NQVNLKSB8fAogCSAgICAocnRzX3RhYmxlID09Ci0JCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9SVEhfS0VZKSkgewotCQl2YWw2NCA9IHZhbDY0IHwJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfVEFCTEVfU0VMOworCSAgICAgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX1JUSF9LRVkpKSB7CisJCXN0ZWVyX2N0cmwgPSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9UQUJMRV9TRUw7CiAJfQogCi0Jc3RhdHVzID0gX192eGdlX2h3X3Bpb19tZW1fd3JpdGU2NCh2YWw2NCwKLQkJCQkmdnBfcmVnLT5ydHNfYWNjZXNzX3N0ZWVyX2N0cmwsCi0JCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfU1RST0JFLAotCQkJCXZwYXRoLT5obGRldi0+Y29uZmlnLmRldmljZV9wb2xsX21pbGxpcyk7Ci0KKwlzdGF0dXMgPSB2eGdlX2h3X3ZwYXRoX2Z3X2FwaSh2cC0+dnBhdGgsIGFjdGlvbiwgcnRzX3RhYmxlLCBvZmZzZXQsCisJCQkJICAgICAgZGF0YTAsIGRhdGExLCAmc3RlZXJfY3RybCk7CiAJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQogCQlnb3RvIGV4aXQ7CiAKLQl2YWw2NCA9IHJlYWRxKCZ2cF9yZWctPnJ0c19hY2Nlc3Nfc3RlZXJfY3RybCk7Ci0KLQlpZiAodmFsNjQgJiBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9STUFDSl9TVEFUVVMpIHsKLQotCQkqZGF0YTEgPSByZWFkcSgmdnBfcmVnLT5ydHNfYWNjZXNzX3N0ZWVyX2RhdGEwKTsKLQotCQlpZiAoKHJ0c190YWJsZSA9PQotCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfREEpIHx8Ci0JCShydHNfdGFibGUgPT0KLQkJVlhHRV9IV19SVFNfQUNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX1JUSF9NVUxUSV9JVCkpIHsKLQkJCSpkYXRhMiA9IHJlYWRxKCZ2cF9yZWctPnJ0c19hY2Nlc3Nfc3RlZXJfZGF0YTEpOwotCQl9Ci0JCXN0YXR1cyA9IFZYR0VfSFdfT0s7Ci0JfSBlbHNlCi0JCXN0YXR1cyA9IFZYR0VfSFdfRkFJTDsKKwlpZiAoKHJ0c190YWJsZSAhPSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfREEpIHx8CisJICAgIChydHNfdGFibGUgIT0KKwkgICAgIFZYR0VfSFdfUlRTX0FDU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9SVEhfTVVMVElfSVQpKQorCQkqZGF0YTEgPSAwOwogZXhpdDoKIAlyZXR1cm4gc3RhdHVzOwogfQpAQCAtMzA3OCwxMDcgKzM3MDIsMjcgQEAKICAqIF9fdnhnZV9od192cGF0aF9ydHNfdGFibGVfc2V0IC0gU2V0IHRoZSBlbnRyaWVzIG9mIFJUUyBhY2Nlc3MgdGFibGVzCiAgKi8KIGVudW0gdnhnZV9od19zdGF0dXMKLV9fdnhnZV9od192cGF0aF9ydHNfdGFibGVfc2V0KAotCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cCwgdTMyIGFjdGlvbiwgdTMyIHJ0c190YWJsZSwKLQl1MzIgb2Zmc2V0LCB1NjQgZGF0YTEsIHU2NCBkYXRhMikKK19fdnhnZV9od192cGF0aF9ydHNfdGFibGVfc2V0KHN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cCwgdTMyIGFjdGlvbiwKKwkJCSAgICAgIHUzMiBydHNfdGFibGUsIHUzMiBvZmZzZXQsIHU2NCBzdGVlcl9kYXRhMCwKKwkJCSAgICAgIHU2NCBzdGVlcl9kYXRhMSkKIHsKLQl1NjQgdmFsNjQ7Ci0Jc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aCAqdnBhdGg7Ci0JZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOwotCXN0cnVjdCB2eGdlX2h3X3ZwYXRoX3JlZyBfX2lvbWVtICp2cF9yZWc7CisJdTY0IGRhdGEwLCBkYXRhMSA9IDAsIHN0ZWVyX2N0cmwgPSAwOworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzOwogCiAJaWYgKHZwID09IE5VTEwpIHsKIAkJc3RhdHVzID0gVlhHRV9IV19FUlJfSU5WQUxJRF9IQU5ETEU7CiAJCWdvdG8gZXhpdDsKIAl9CiAKLQl2cGF0aCA9IHZwLT52cGF0aDsKLQl2cF9yZWcgPSB2cGF0aC0+dnBfcmVnOwotCi0Jd3JpdGVxKGRhdGExLCAmdnBfcmVnLT5ydHNfYWNjZXNzX3N0ZWVyX2RhdGEwKTsKLQl3bWIoKTsKKwlkYXRhMCA9IHN0ZWVyX2RhdGEwOwogCiAJaWYgKChydHNfdGFibGUgPT0gVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX0RBKSB8fAogCSAgICAocnRzX3RhYmxlID09Ci0JCVZYR0VfSFdfUlRTX0FDU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9SVEhfTVVMVElfSVQpKSB7Ci0JCXdyaXRlcShkYXRhMiwgJnZwX3JlZy0+cnRzX2FjY2Vzc19zdGVlcl9kYXRhMSk7Ci0JCXdtYigpOwotCX0KKwkgICAgIFZYR0VfSFdfUlRTX0FDU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9SVEhfTVVMVElfSVQpKQorCQlkYXRhMSA9IHN0ZWVyX2RhdGExOwogCi0JdmFsNjQgPSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9BQ1RJT04oYWN0aW9uKSB8Ci0JCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTChydHNfdGFibGUpIHwKLQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfU1RST0JFIHwKLQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfT0ZGU0VUKG9mZnNldCk7Ci0KLQlzdGF0dXMgPSBfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTY0KHZhbDY0LAotCQkJCSZ2cF9yZWctPnJ0c19hY2Nlc3Nfc3RlZXJfY3RybCwKLQkJCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9TVFJPQkUsCi0JCQkJdnBhdGgtPmhsZGV2LT5jb25maWcuZGV2aWNlX3BvbGxfbWlsbGlzKTsKLQotCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKLQkJZ290byBleGl0OwotCi0JdmFsNjQgPSByZWFkcSgmdnBfcmVnLT5ydHNfYWNjZXNzX3N0ZWVyX2N0cmwpOwotCi0JaWYgKHZhbDY0ICYgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfUk1BQ0pfU1RBVFVTKQotCQlzdGF0dXMgPSBWWEdFX0hXX09LOwotCWVsc2UKLQkJc3RhdHVzID0gVlhHRV9IV19GQUlMOwotZXhpdDoKLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgotICogX192eGdlX2h3X3ZwYXRoX2FkZHJfZ2V0IC0gR2V0IHRoZSBodyBhZGRyZXNzIGVudHJ5IGZvciB0aGlzIHZwYXRoCi0gKiAgICAgICAgICAgICAgIGZyb20gTUFDIGFkZHJlc3MgdGFibGUuCi0gKi8KLXN0YXRpYyBlbnVtIHZ4Z2VfaHdfc3RhdHVzCi1fX3Z4Z2VfaHdfdnBhdGhfYWRkcl9nZXQoCi0JdTMyIHZwX2lkLCBzdHJ1Y3QgdnhnZV9od192cGF0aF9yZWcgX19pb21lbSAqdnBhdGhfcmVnLAotCXU4IChtYWNhZGRyKVtFVEhfQUxFTl0sIHU4IChtYWNhZGRyX21hc2spW0VUSF9BTEVOXSkKLXsKLQl1MzIgaTsKLQl1NjQgdmFsNjQ7Ci0JdTY0IGRhdGExID0gMFVMTDsKLQl1NjQgZGF0YTIgPSAwVUxMOwotCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKLQotCXZhbDY0ID0gVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfQUNUSU9OKAotCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9BQ1RJT05fTElTVF9GSVJTVF9FTlRSWSkgfAotCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUwoCi0JCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9EQSkgfAotCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9TVFJPQkUgfAotCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9PRkZTRVQoMCk7Ci0KLQlzdGF0dXMgPSBfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTY0KHZhbDY0LAotCQkJCSZ2cGF0aF9yZWctPnJ0c19hY2Nlc3Nfc3RlZXJfY3RybCwKLQkJCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9TVFJPQkUsCi0JCQkJVlhHRV9IV19ERUZfREVWSUNFX1BPTExfTUlMTElTKTsKLQotCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKLQkJZ290byBleGl0OwotCi0JdmFsNjQgPSByZWFkcSgmdnBhdGhfcmVnLT5ydHNfYWNjZXNzX3N0ZWVyX2N0cmwpOwotCi0JaWYgKHZhbDY0ICYgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfUk1BQ0pfU1RBVFVTKSB7Ci0KLQkJZGF0YTEgPSByZWFkcSgmdnBhdGhfcmVnLT5ydHNfYWNjZXNzX3N0ZWVyX2RhdGEwKTsKLQkJZGF0YTIgPSByZWFkcSgmdnBhdGhfcmVnLT5ydHNfYWNjZXNzX3N0ZWVyX2RhdGExKTsKLQotCQlkYXRhMSA9IFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9HRVRfREFfTUFDX0FERFIoZGF0YTEpOwotCQlkYXRhMiA9IFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9HRVRfREFfTUFDX0FERFJfTUFTSygKLQkJCQkJCQlkYXRhMik7Ci0KLQkJZm9yIChpID0gRVRIX0FMRU47IGkgPiAwOyBpLS0pIHsKLQkJCW1hY2FkZHJbaS0xXSA9ICh1OCkoZGF0YTEgJiAweEZGKTsKLQkJCWRhdGExID4+PSA4OwotCi0JCQltYWNhZGRyX21hc2tbaS0xXSA9ICh1OCkoZGF0YTIgJiAweEZGKTsKLQkJCWRhdGEyID4+PSA4OwotCQl9Ci0JCXN0YXR1cyA9IFZYR0VfSFdfT0s7Ci0JfSBlbHNlCi0JCXN0YXR1cyA9IFZYR0VfSFdfRkFJTDsKKwlzdGF0dXMgPSB2eGdlX2h3X3ZwYXRoX2Z3X2FwaSh2cC0+dnBhdGgsIGFjdGlvbiwgcnRzX3RhYmxlLCBvZmZzZXQsCisJCQkJICAgICAgJmRhdGEwLCAmZGF0YTEsICZzdGVlcl9jdHJsKTsKIGV4aXQ6CiAJcmV0dXJuIHN0YXR1czsKIH0KQEAgLTMyMDQsNiArMzc0OCw4IEBACiAJCSAgICAgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfQUNUSU9OX1JFQURfRU5UUlksCiAJCSAgICAgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX1JUSF9HRU5fQ0ZHLAogCQkJMCwgJmRhdGEwLCAmZGF0YTEpOworCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJZ290byBleGl0OwogCiAJZGF0YTAgJj0gfihWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfUlRIX0dFTl9CVUNLRVRfU0laRSgweGYpIHwKIAkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9SVEhfR0VOX0FMR19TRUwoMHgzKSk7CkBAIC0zNzcxLDEwICs0MzE3LDEwIEBACiAJdnBfcmVnID0gdnBhdGgtPnZwX3JlZzsKIAljb25maWcgPSB2cGF0aC0+dnBfY29uZmlnOwogCi0Jd3JpdGVxKCh1NjQpMCwgJnZwX3JlZy0+dGltX2Rlc3RfYWRkcik7Ci0Jd3JpdGVxKCh1NjQpMCwgJnZwX3JlZy0+dGltX3ZwYXRoX21hcCk7Ci0Jd3JpdGVxKCh1NjQpMCwgJnZwX3JlZy0+dGltX2JpdG1hcCk7Ci0Jd3JpdGVxKCh1NjQpMCwgJnZwX3JlZy0+dGltX3JlbWFwKTsKKwl3cml0ZXEoMCwgJnZwX3JlZy0+dGltX2Rlc3RfYWRkcik7CisJd3JpdGVxKDAsICZ2cF9yZWctPnRpbV92cGF0aF9tYXApOworCXdyaXRlcSgwLCAmdnBfcmVnLT50aW1fYml0bWFwKTsKKwl3cml0ZXEoMCwgJnZwX3JlZy0+dGltX3JlbWFwKTsKIAogCWlmIChjb25maWctPnJpbmcuZW5hYmxlID09IFZYR0VfSFdfUklOR19FTkFCTEUpCiAJCXdyaXRlcShWWEdFX0hXX1RJTV9SSU5HX0FTU05fSU5UX05VTSgKQEAgLTM4NzYsOCArNDQyMiw3IEBACiAKIAkJaWYgKGNvbmZpZy0+dHRpLnV0aWxfc2VsICE9IFZYR0VfSFdfVVNFX0ZMQVNIX0RFRkFVTFQpIHsKIAkJCXZhbDY0ICY9IH5WWEdFX0hXX1RJTV9DRkczX0lOVF9OVU1fVVRJTF9TRUwoMHgzZik7Ci0JCQl2YWw2NCB8PSBWWEdFX0hXX1RJTV9DRkczX0lOVF9OVU1fVVRJTF9TRUwoCi0JCQkJCWNvbmZpZy0+dHRpLnV0aWxfc2VsKTsKKwkJCXZhbDY0IHw9IFZYR0VfSFdfVElNX0NGRzNfSU5UX05VTV9VVElMX1NFTCh2cF9pZCk7CiAJCX0KIAogCQlpZiAoY29uZmlnLT50dGkubHRpbWVyX3ZhbCAhPSBWWEdFX0hXX1VTRV9GTEFTSF9ERUZBVUxUKSB7CkBAIC0zOTgxLDggKzQ1MjYsNyBAQAogCiAJCWlmIChjb25maWctPnJ0aS51dGlsX3NlbCAhPSBWWEdFX0hXX1VTRV9GTEFTSF9ERUZBVUxUKSB7CiAJCQl2YWw2NCAmPSB+VlhHRV9IV19USU1fQ0ZHM19JTlRfTlVNX1VUSUxfU0VMKDB4M2YpOwotCQkJdmFsNjQgfD0gVlhHRV9IV19USU1fQ0ZHM19JTlRfTlVNX1VUSUxfU0VMKAotCQkJCQljb25maWctPnJ0aS51dGlsX3NlbCk7CisJCQl2YWw2NCB8PSBWWEdFX0hXX1RJTV9DRkczX0lOVF9OVU1fVVRJTF9TRUwodnBfaWQpOwogCQl9CiAKIAkJaWYgKGNvbmZpZy0+cnRpLmx0aW1lcl92YWwgIT0gVlhHRV9IV19VU0VfRkxBU0hfREVGQVVMVCkgewpAQCAtNDAwMywxMSArNDU0NywxNSBAQAogCXdyaXRlcSh2YWw2NCwgJnZwX3JlZy0+dGltX2NmZzJfaW50X251bVtWWEdFX0hXX1ZQQVRIX0lOVFJfQk1BUF0pOwogCXdyaXRlcSh2YWw2NCwgJnZwX3JlZy0+dGltX2NmZzNfaW50X251bVtWWEdFX0hXX1ZQQVRIX0lOVFJfQk1BUF0pOwogCisJdmFsNjQgPSBWWEdFX0hXX1RJTV9XUktMRF9DTENfV1JLTERfRVZBTF9QUkQoMTUwKTsKKwl2YWw2NCB8PSBWWEdFX0hXX1RJTV9XUktMRF9DTENfV1JLTERfRVZBTF9ESVYoMCk7CisJdmFsNjQgfD0gVlhHRV9IV19USU1fV1JLTERfQ0xDX0NOVF9SWF9UWCgzKTsKKwl3cml0ZXEodmFsNjQsICZ2cF9yZWctPnRpbV93cmtsZF9jbGMpOworCiAJcmV0dXJuIHN0YXR1czsKIH0KIAotdm9pZAotdnhnZV9od192cGF0aF90dGlfY2lfc2V0KHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldiwgdTMyIHZwX2lkKQordm9pZCB2eGdlX2h3X3ZwYXRoX3R0aV9jaV9zZXQoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2LCB1MzIgdnBfaWQpCiB7CiAJc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aCAqdnBhdGg7CiAJc3RydWN0IHZ4Z2VfaHdfdnBhdGhfcmVnIF9faW9tZW0gKnZwX3JlZzsKQEAgLTQwMTgsMTcgKzQ1NjYsMTUgQEAKIAl2cF9yZWcgPSB2cGF0aC0+dnBfcmVnOwogCWNvbmZpZyA9IHZwYXRoLT52cF9jb25maWc7CiAKLQlpZiAoY29uZmlnLT5maWZvLmVuYWJsZSA9PSBWWEdFX0hXX0ZJRk9fRU5BQkxFKSB7CisJaWYgKGNvbmZpZy0+Zmlmby5lbmFibGUgPT0gVlhHRV9IV19GSUZPX0VOQUJMRSAmJgorCSAgICBjb25maWctPnR0aS50aW1lcl9jaV9lbiAhPSBWWEdFX0hXX1RJTV9USU1FUl9DSV9FTkFCTEUpIHsKKwkJY29uZmlnLT50dGkudGltZXJfY2lfZW4gPSBWWEdFX0hXX1RJTV9USU1FUl9DSV9FTkFCTEU7CiAJCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+dGltX2NmZzFfaW50X251bVtWWEdFX0hXX1ZQQVRIX0lOVFJfVFhdKTsKLQotCQlpZiAoY29uZmlnLT50dGkudGltZXJfY2lfZW4gIT0gVlhHRV9IV19USU1fVElNRVJfQ0lfRU5BQkxFKSB7Ci0JCQljb25maWctPnR0aS50aW1lcl9jaV9lbiA9IFZYR0VfSFdfVElNX1RJTUVSX0NJX0VOQUJMRTsKLQkJCXZhbDY0IHw9IFZYR0VfSFdfVElNX0NGRzFfSU5UX05VTV9USU1FUl9DSTsKLQkJCXdyaXRlcSh2YWw2NCwKLQkJCSZ2cF9yZWctPnRpbV9jZmcxX2ludF9udW1bVlhHRV9IV19WUEFUSF9JTlRSX1RYXSk7Ci0JCX0KKwkJdmFsNjQgfD0gVlhHRV9IV19USU1fQ0ZHMV9JTlRfTlVNX1RJTUVSX0NJOworCQl3cml0ZXEodmFsNjQsICZ2cF9yZWctPnRpbV9jZmcxX2ludF9udW1bVlhHRV9IV19WUEFUSF9JTlRSX1RYXSk7CiAJfQogfQorCiAvKgogICogX192eGdlX2h3X3ZwYXRoX2luaXRpYWxpemUKICAqIFRoaXMgcm91dGluZSBpcyB0aGUgZmluYWwgcGhhc2Ugb2YgaW5pdCB3aGljaCBpbml0aWFsaXplcyB0aGUKQEAgLTQwNTIsMjIgKzQ1OTgsMTggQEAKIAl2cF9yZWcgPSB2cGF0aC0+dnBfcmVnOwogCiAJc3RhdHVzID0gIF9fdnhnZV9od192cGF0aF9zd2FwcGVyX3NldCh2cGF0aC0+dnBfcmVnKTsKLQogCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKIAkJZ290byBleGl0OwogCiAJc3RhdHVzID0gIF9fdnhnZV9od192cGF0aF9tYWNfY29uZmlndXJlKGhsZGV2LCB2cF9pZCk7Ci0KIAlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCiAJCWdvdG8gZXhpdDsKIAogCXN0YXR1cyA9ICBfX3Z4Z2VfaHdfdnBhdGhfa2RmY19jb25maWd1cmUoaGxkZXYsIHZwX2lkKTsKLQogCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKIAkJZ290byBleGl0OwogCiAJc3RhdHVzID0gX192eGdlX2h3X3ZwYXRoX3RpbV9jb25maWd1cmUoaGxkZXYsIHZwX2lkKTsKLQogCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKIAkJZ290byBleGl0OwogCkBAIC00MDc1LDcgKzQ2MTcsNiBAQAogCiAJLyogR2V0IE1SUlMgdmFsdWUgZnJvbSBkZXZpY2UgY29udHJvbCAqLwogCXN0YXR1cyAgPSBfX3Z4Z2VfaHdfdnBhdGhfcGNpX3JlYWQodnBhdGgsIDEsIDB4NzgsICZ2YWwzMik7Ci0KIAlpZiAoc3RhdHVzID09IFZYR0VfSFdfT0spIHsKIAkJdmFsMzIgPSAodmFsMzIgJiBWWEdFX0hXX1BDSV9FWFBfREVWQ1RMX1JFQURSUSkgPj4gMTI7CiAJCXZhbDY0ICY9CkBAIC00MDk5LDYgKzQ2NDAsMjggQEAKIH0KIAogLyoKKyAqIF9fdnhnZV9od192cF90ZXJtaW5hdGUgLSBUZXJtaW5hdGUgVmlydHVhbCBQYXRoIHN0cnVjdHVyZQorICogVGhpcyByb3V0aW5lIGNsb3NlcyBhbGwgY2hhbm5lbHMgaXQgb3BlbmVkIGFuZCBmcmVldXAgbWVtb3J5CisgKi8KK3N0YXRpYyB2b2lkIF9fdnhnZV9od192cF90ZXJtaW5hdGUoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2LCB1MzIgdnBfaWQpCit7CisJc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aCAqdnBhdGg7CisKKwl2cGF0aCA9ICZobGRldi0+dmlydHVhbF9wYXRoc1t2cF9pZF07CisKKwlpZiAodnBhdGgtPnZwX29wZW4gPT0gVlhHRV9IV19WUF9OT1RfT1BFTikKKwkJZ290byBleGl0OworCisJVlhHRV9IV19ERVZJQ0VfVElNX0lOVF9NQVNLX1JFU0VUKHZwYXRoLT5obGRldi0+dGltX2ludF9tYXNrMCwKKwkJdnBhdGgtPmhsZGV2LT50aW1faW50X21hc2sxLCB2cGF0aC0+dnBfaWQpOworCWhsZGV2LT5zdGF0cy5od19kZXZfaW5mb19zdGF0cy52cGF0aF9pbmZvW3ZwYXRoLT52cF9pZF0gPSBOVUxMOworCisJbWVtc2V0KHZwYXRoLCAwLCBzaXplb2Yoc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aCkpOworZXhpdDoKKwlyZXR1cm47Cit9CisKKy8qCiAgKiBfX3Z4Z2VfaHdfdnBfaW5pdGlhbGl6ZSAtIEluaXRpYWxpemUgVmlydHVhbCBQYXRoIHN0cnVjdHVyZQogICogVGhpcyByb3V0aW5lIGlzIHRoZSBpbml0aWFsIHBoYXNlIG9mIGluaXQgd2hpY2ggcmVzZXRzIHRoZSB2cGF0aCBhbmQKICAqIGluaXRpYWxpemVzIHRoZSBzb2Z0d2FyZSBzdXBwb3J0IHN0cnVjdHVyZXMuCkBAIC00MTE3LDYgKzQ2ODAsNyBAQAogCiAJdnBhdGggPSAmaGxkZXYtPnZpcnR1YWxfcGF0aHNbdnBfaWRdOwogCisJc3Bpbl9sb2NrX2luaXQoJmhsZGV2LT52aXJ0dWFsX3BhdGhzW3ZwX2lkXS5sb2NrKTsKIAl2cGF0aC0+dnBfaWQgPSB2cF9pZDsKIAl2cGF0aC0+dnBfb3BlbiA9IFZYR0VfSFdfVlBfT1BFTjsKIAl2cGF0aC0+aGxkZXYgPSBobGRldjsKQEAgLTQxMjcsMTQgKzQ2OTEsMTIgQEAKIAlfX3Z4Z2VfaHdfdnBhdGhfcmVzZXQoaGxkZXYsIHZwX2lkKTsKIAogCXN0YXR1cyA9IF9fdnhnZV9od192cGF0aF9yZXNldF9jaGVjayh2cGF0aCk7Ci0KIAlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spIHsKIAkJbWVtc2V0KHZwYXRoLCAwLCBzaXplb2Yoc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aCkpOwogCQlnb3RvIGV4aXQ7CiAJfQogCiAJc3RhdHVzID0gX192eGdlX2h3X3ZwYXRoX21nbXRfcmVhZChobGRldiwgdnBhdGgpOwotCiAJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKSB7CiAJCW1lbXNldCh2cGF0aCwgMCwgc2l6ZW9mKHN0cnVjdCBfX3Z4Z2VfaHdfdmlydHVhbHBhdGgpKTsKIAkJZ290byBleGl0OwpAQCAtNDE0OCw3ICs0NzEwLDYgQEAKIAkJaGxkZXYtPnRpbV9pbnRfbWFzazEsIHZwX2lkKTsKIAogCXN0YXR1cyA9IF9fdnhnZV9od192cGF0aF9pbml0aWFsaXplKGhsZGV2LCB2cF9pZCk7Ci0KIAlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCiAJCV9fdnhnZV9od192cF90ZXJtaW5hdGUoaGxkZXYsIHZwX2lkKTsKIGV4aXQ6CkBAIC00MTU2LDI5ICs0NzE3LDYgQEAKIH0KIAogLyoKLSAqIF9fdnhnZV9od192cF90ZXJtaW5hdGUgLSBUZXJtaW5hdGUgVmlydHVhbCBQYXRoIHN0cnVjdHVyZQotICogVGhpcyByb3V0aW5lIGNsb3NlcyBhbGwgY2hhbm5lbHMgaXQgb3BlbmVkIGFuZCBmcmVldXAgbWVtb3J5Ci0gKi8KLXN0YXRpYyB2b2lkCi1fX3Z4Z2VfaHdfdnBfdGVybWluYXRlKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldiwgdTMyIHZwX2lkKQotewotCXN0cnVjdCBfX3Z4Z2VfaHdfdmlydHVhbHBhdGggKnZwYXRoOwotCi0JdnBhdGggPSAmaGxkZXYtPnZpcnR1YWxfcGF0aHNbdnBfaWRdOwotCi0JaWYgKHZwYXRoLT52cF9vcGVuID09IFZYR0VfSFdfVlBfTk9UX09QRU4pCi0JCWdvdG8gZXhpdDsKLQotCVZYR0VfSFdfREVWSUNFX1RJTV9JTlRfTUFTS19SRVNFVCh2cGF0aC0+aGxkZXYtPnRpbV9pbnRfbWFzazAsCi0JCXZwYXRoLT5obGRldi0+dGltX2ludF9tYXNrMSwgdnBhdGgtPnZwX2lkKTsKLQlobGRldi0+c3RhdHMuaHdfZGV2X2luZm9fc3RhdHMudnBhdGhfaW5mb1t2cGF0aC0+dnBfaWRdID0gTlVMTDsKLQotCW1lbXNldCh2cGF0aCwgMCwgc2l6ZW9mKHN0cnVjdCBfX3Z4Z2VfaHdfdmlydHVhbHBhdGgpKTsKLWV4aXQ6Ci0JcmV0dXJuOwotfQotCi0vKgogICogdnhnZV9od192cGF0aF9tdHVfc2V0IC0gU2V0IE1UVS4KICAqIFNldCBuZXcgTVRVIHZhbHVlLiBFeGFtcGxlLCB0byB1c2UganVtYm8gZnJhbWVzOgogICogdnhnZV9od192cGF0aF9tdHVfc2V0KG15X2RldmljZSwgOTYwMCk7CkBAIC00MjE1LDYgKzQ3NTMsNjQgQEAKIH0KIAogLyoKKyAqIHZ4Z2VfaHdfdnBhdGhfc3RhdHNfZW5hYmxlIC0gRW5hYmxlIHZwYXRoIGgvd3N0YXRpc3RpY3MuCisgKiBFbmFibGUgdGhlIERNQSB2cGF0aCBzdGF0aXN0aWNzLiBUaGUgZnVuY3Rpb24gaXMgdG8gYmUgY2FsbGVkIHRvIHJlLWVuYWJsZQorICogdGhlIGFkYXB0ZXIgdG8gdXBkYXRlIHN0YXRzIGludG8gdGhlIGhvc3QgbWVtb3J5CisgKi8KK3N0YXRpYyBlbnVtIHZ4Z2VfaHdfc3RhdHVzCit2eGdlX2h3X3ZwYXRoX3N0YXRzX2VuYWJsZShzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnApCit7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCXN0cnVjdCBfX3Z4Z2VfaHdfdmlydHVhbHBhdGggKnZwYXRoOworCisJdnBhdGggPSB2cC0+dnBhdGg7CisKKwlpZiAodnBhdGgtPnZwX29wZW4gPT0gVlhHRV9IV19WUF9OT1RfT1BFTikgeworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9WUEFUSF9OT1RfT1BFTjsKKwkJZ290byBleGl0OworCX0KKworCW1lbWNweSh2cGF0aC0+aHdfc3RhdHNfc2F2LCB2cGF0aC0+aHdfc3RhdHMsCisJCQlzaXplb2Yoc3RydWN0IHZ4Z2VfaHdfdnBhdGhfc3RhdHNfaHdfaW5mbykpOworCisJc3RhdHVzID0gX192eGdlX2h3X3ZwYXRoX3N0YXRzX2dldCh2cGF0aCwgdnBhdGgtPmh3X3N0YXRzKTsKK2V4aXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIF9fdnhnZV9od19ibG9ja3Bvb2xfYmxvY2tfYWxsb2NhdGUgLSBBbGxvY2F0ZXMgYSBibG9jayBmcm9tIGJsb2NrIHBvb2wKKyAqIFRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIGEgYmxvY2sgZnJvbSBibG9jayBwb29sIG9yIGZyb20gdGhlIHN5c3RlbQorICovCitzdGF0aWMgc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2xfZW50cnkgKgorX192eGdlX2h3X2Jsb2NrcG9vbF9ibG9ja19hbGxvY2F0ZShzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aCwgdTMyIHNpemUpCit7CisJc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2xfZW50cnkgKmVudHJ5ID0gTlVMTDsKKwlzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbCAgKmJsb2NrcG9vbDsKKworCWJsb2NrcG9vbCA9ICZkZXZoLT5ibG9ja19wb29sOworCisJaWYgKHNpemUgPT0gYmxvY2twb29sLT5ibG9ja19zaXplKSB7CisKKwkJaWYgKCFsaXN0X2VtcHR5KCZibG9ja3Bvb2wtPmZyZWVfYmxvY2tfbGlzdCkpCisJCQllbnRyeSA9IChzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbF9lbnRyeSAqKQorCQkJCWxpc3RfZmlyc3RfZW50cnkoJmJsb2NrcG9vbC0+ZnJlZV9ibG9ja19saXN0LAorCQkJCQlzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbF9lbnRyeSwKKwkJCQkJaXRlbSk7CisKKwkJaWYgKGVudHJ5ICE9IE5VTEwpIHsKKwkJCWxpc3RfZGVsKCZlbnRyeS0+aXRlbSk7CisJCQlibG9ja3Bvb2wtPnBvb2xfc2l6ZS0tOworCQl9CisJfQorCisJaWYgKGVudHJ5ICE9IE5VTEwpCisJCV9fdnhnZV9od19ibG9ja3Bvb2xfYmxvY2tzX2FkZChibG9ja3Bvb2wpOworCisJcmV0dXJuIGVudHJ5OworfQorCisvKgogICogdnhnZV9od192cGF0aF9vcGVuIC0gT3BlbiBhIHZpcnR1YWwgcGF0aCBvbiBhIGdpdmVuIGFkYXB0ZXIKICAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBvcGVuIGFjY2VzcyB0byB2aXJ0dWFsIHBhdGggb2YgYW4KICAqIGFkYXB0ZXIgZm9yIG9mZmxvYWQsIEdSTyBvcGVyYXRpb25zLiBUaGlzIGZ1bmN0aW9uIHJldHVybnMKQEAgLTQyMzgsMTkgKzQ4MzQsMTUgQEAKIAogCXN0YXR1cyA9IF9fdnhnZV9od192cF9pbml0aWFsaXplKGhsZGV2LCBhdHRyLT52cF9pZCwKIAkJCSZobGRldi0+Y29uZmlnLnZwX2NvbmZpZ1thdHRyLT52cF9pZF0pOwotCiAJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQogCQlnb3RvIHZwYXRoX29wZW5fZXhpdDE7CiAKLQl2cCA9IChzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqKQotCQl2bWFsbG9jKHNpemVvZihzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSkpOworCXZwID0gdnphbGxvYyhzaXplb2Yoc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUpKTsKIAlpZiAodnAgPT0gTlVMTCkgewogCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9PVVRfT0ZfTUVNT1JZOwogCQlnb3RvIHZwYXRoX29wZW5fZXhpdDI7CiAJfQogCi0JbWVtc2V0KHZwLCAwLCBzaXplb2Yoc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUpKTsKLQogCXZwLT52cGF0aCA9IHZwYXRoOwogCiAJaWYgKHZwYXRoLT52cF9jb25maWctPmZpZm8uZW5hYmxlID09IFZYR0VfSFdfRklGT19FTkFCTEUpIHsKQEAgLTQyNzMsNyArNDg2NSw2IEBACiAKIAl2cGF0aC0+c3RhdHNfYmxvY2sgPSBfX3Z4Z2VfaHdfYmxvY2twb29sX2Jsb2NrX2FsbG9jYXRlKGhsZGV2LAogCQkJCVZYR0VfSFdfQkxPQ0tfU0laRSk7Ci0KIAlpZiAodnBhdGgtPnN0YXRzX2Jsb2NrID09IE5VTEwpIHsKIAkJc3RhdHVzID0gVlhHRV9IV19FUlJfT1VUX09GX01FTU9SWTsKIAkJZ290byB2cGF0aF9vcGVuX2V4aXQ4OwpAQCAtNDMzMiwxOSArNDkyMywyMCBAQAogICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGNsb3NlIGFjY2VzcyB0byB2aXJ0dWFsIHBhdGggb3BlbmVkCiAgKiBlYXJsaWVyLgogICovCi12b2lkCi12eGdlX2h3X3ZwYXRoX3J4X2Rvb3JiZWxsX2luaXQoc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwKQordm9pZCB2eGdlX2h3X3ZwYXRoX3J4X2Rvb3JiZWxsX2luaXQoc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwKQogewotCXN0cnVjdCBfX3Z4Z2VfaHdfdmlydHVhbHBhdGggKnZwYXRoID0gTlVMTDsKKwlzdHJ1Y3QgX192eGdlX2h3X3ZpcnR1YWxwYXRoICp2cGF0aCA9IHZwLT52cGF0aDsKKwlzdHJ1Y3QgX192eGdlX2h3X3JpbmcgKnJpbmcgPSB2cGF0aC0+cmluZ2g7CisJc3RydWN0IHZ4Z2VkZXYgKnZkZXYgPSBuZXRkZXZfcHJpdih2cGF0aC0+aGxkZXYtPm5kZXYpOwogCXU2NCBuZXdfY291bnQsIHZhbDY0LCB2YWwxNjQ7Ci0Jc3RydWN0IF9fdnhnZV9od19yaW5nICpyaW5nOwogCi0JdnBhdGggPSB2cC0+dnBhdGg7Ci0JcmluZyA9IHZwYXRoLT5yaW5naDsKKwlpZiAodmRldi0+dGl0YW4xKSB7CisJCW5ld19jb3VudCA9IHJlYWRxKCZ2cGF0aC0+dnBfcmVnLT5yeGRtZW1fc2l6ZSk7CisJCW5ld19jb3VudCAmPSAweDFmZmY7CisJfSBlbHNlCisJCW5ld19jb3VudCA9IHJpbmctPmNvbmZpZy0+cmluZ19ibG9ja3MgKiBWWEdFX0hXX0JMT0NLX1NJWkUgLyA4OwogCi0JbmV3X2NvdW50ID0gcmVhZHEoJnZwYXRoLT52cF9yZWctPnJ4ZG1lbV9zaXplKTsKLQluZXdfY291bnQgJj0gMHgxZmZmOwotCXZhbDE2NCA9IChWWEdFX0hXX1JYRE1FTV9TSVpFX1BSQ19SWERNRU1fU0laRShuZXdfY291bnQpKTsKKwl2YWwxNjQgPSBWWEdFX0hXX1JYRE1FTV9TSVpFX1BSQ19SWERNRU1fU0laRShuZXdfY291bnQpOwogCiAJd3JpdGVxKFZYR0VfSFdfUFJDX1JYRF9ET09SQkVMTF9ORVdfUVdfQ05UKHZhbDE2NCksCiAJCSZ2cGF0aC0+dnBfcmVnLT5wcmNfcnhkX2Rvb3JiZWxsKTsKQEAgLTQzNjcsNiArNDk1OSwyOSBAQAogfQogCiAvKgorICogX192eGdlX2h3X2Jsb2NrcG9vbF9ibG9ja19mcmVlIC0gRnJlZXMgYSBibG9jayBmcm9tIGJsb2NrIHBvb2wKKyAqIEBkZXZoOiBIYWwgZGV2aWNlCisgKiBAZW50cnk6IEVudHJ5IG9mIGJsb2NrIHRvIGJlIGZyZWVkCisgKgorICogVGhpcyBmdW5jdGlvbiBmcmVlcyBhIGJsb2NrIGZyb20gYmxvY2sgcG9vbAorICovCitzdGF0aWMgdm9pZAorX192eGdlX2h3X2Jsb2NrcG9vbF9ibG9ja19mcmVlKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpkZXZoLAorCQkJICAgICAgIHN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sX2VudHJ5ICplbnRyeSkKK3sKKwlzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbCAgKmJsb2NrcG9vbDsKKworCWJsb2NrcG9vbCA9ICZkZXZoLT5ibG9ja19wb29sOworCisJaWYgKGVudHJ5LT5sZW5ndGggPT0gYmxvY2twb29sLT5ibG9ja19zaXplKSB7CisJCWxpc3RfYWRkKCZlbnRyeS0+aXRlbSwgJmJsb2NrcG9vbC0+ZnJlZV9ibG9ja19saXN0KTsKKwkJYmxvY2twb29sLT5wb29sX3NpemUrKzsKKwl9CisKKwlfX3Z4Z2VfaHdfYmxvY2twb29sX2Jsb2Nrc19yZW1vdmUoYmxvY2twb29sKTsKK30KKworLyoKICAqIHZ4Z2VfaHdfdnBhdGhfY2xvc2UgLSBDbG9zZSB0aGUgaGFuZGxlIGdvdCBmcm9tIHByZXZpb3VzIHZwYXRoICh2cGF0aCkgb3BlbgogICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGNsb3NlIGFjY2VzcyB0byB2aXJ0dWFsIHBhdGggb3BlbmVkCiAgKiBlYXJsaWVyLgpAQCAtNDQxNCw3ICs1MDI5LDkgQEAKIAogCV9fdnhnZV9od192cF90ZXJtaW5hdGUoZGV2aCwgdnBfaWQpOwogCisJc3Bpbl9sb2NrKCZ2cGF0aC0+bG9jayk7CiAJdnBhdGgtPnZwX29wZW4gPSBWWEdFX0hXX1ZQX05PVF9PUEVOOworCXNwaW5fdW5sb2NrKCZ2cGF0aC0+bG9jayk7CiAKIHZwYXRoX2Nsb3NlX2V4aXQ6CiAJcmV0dXJuIHN0YXR1czsKQEAgLTQ1MTUsNzMwICs1MTMyLDMgQEAKIAlfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTMyX3VwcGVyKCh1MzIpdnhnZV9iVkFMbih2YWw2NCwgMCwgMzIpLAogCQkmaGxkZXYtPmNvbW1vbl9yZWctPmNtbl9yc3RoZGxyX2NmZzEpOwogfQotCi0vKgotICogdnhnZV9od192cGF0aF9zdGF0c19lbmFibGUgLSBFbmFibGUgdnBhdGggaC93c3RhdGlzdGljcy4KLSAqIEVuYWJsZSB0aGUgRE1BIHZwYXRoIHN0YXRpc3RpY3MuIFRoZSBmdW5jdGlvbiBpcyB0byBiZSBjYWxsZWQgdG8gcmUtZW5hYmxlCi0gKiB0aGUgYWRhcHRlciB0byB1cGRhdGUgc3RhdHMgaW50byB0aGUgaG9zdCBtZW1vcnkKLSAqLwotc3RhdGljIGVudW0gdnhnZV9od19zdGF0dXMKLXZ4Z2VfaHdfdnBhdGhfc3RhdHNfZW5hYmxlKHN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cCkKLXsKLQllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7Ci0Jc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aCAqdnBhdGg7Ci0KLQl2cGF0aCA9IHZwLT52cGF0aDsKLQotCWlmICh2cGF0aC0+dnBfb3BlbiA9PSBWWEdFX0hXX1ZQX05PVF9PUEVOKSB7Ci0JCXN0YXR1cyA9IFZYR0VfSFdfRVJSX1ZQQVRIX05PVF9PUEVOOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JbWVtY3B5KHZwYXRoLT5od19zdGF0c19zYXYsIHZwYXRoLT5od19zdGF0cywKLQkJCXNpemVvZihzdHJ1Y3QgdnhnZV9od192cGF0aF9zdGF0c19od19pbmZvKSk7Ci0KLQlzdGF0dXMgPSBfX3Z4Z2VfaHdfdnBhdGhfc3RhdHNfZ2V0KHZwYXRoLCB2cGF0aC0+aHdfc3RhdHMpOwotZXhpdDoKLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgotICogX192eGdlX2h3X3ZwYXRoX3N0YXRzX2FjY2VzcyAtIEdldCB0aGUgc3RhdGlzdGljcyBmcm9tIHRoZSBnaXZlbiBsb2NhdGlvbgotICogICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgb2Zmc2V0IGFuZCBwZXJmb3JtIGFuIG9wZXJhdGlvbgotICovCi1zdGF0aWMgZW51bSB2eGdlX2h3X3N0YXR1cwotX192eGdlX2h3X3ZwYXRoX3N0YXRzX2FjY2VzcyhzdHJ1Y3QgX192eGdlX2h3X3ZpcnR1YWxwYXRoICp2cGF0aCwKLQkJCSAgICAgdTMyIG9wZXJhdGlvbiwgdTMyIG9mZnNldCwgdTY0ICpzdGF0KQotewotCXU2NCB2YWw2NDsKLQllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7Ci0Jc3RydWN0IHZ4Z2VfaHdfdnBhdGhfcmVnIF9faW9tZW0gKnZwX3JlZzsKLQotCWlmICh2cGF0aC0+dnBfb3BlbiA9PSBWWEdFX0hXX1ZQX05PVF9PUEVOKSB7Ci0JCXN0YXR1cyA9IFZYR0VfSFdfRVJSX1ZQQVRIX05PVF9PUEVOOwotCQlnb3RvIHZwYXRoX3N0YXRzX2FjY2Vzc19leGl0OwotCX0KLQotCXZwX3JlZyA9IHZwYXRoLT52cF9yZWc7Ci0KLQl2YWw2NCA9ICBWWEdFX0hXX1hNQUNfU1RBVFNfQUNDRVNTX0NNRF9PUChvcGVyYXRpb24pIHwKLQkJIFZYR0VfSFdfWE1BQ19TVEFUU19BQ0NFU1NfQ01EX1NUUk9CRSB8Ci0JCSBWWEdFX0hXX1hNQUNfU1RBVFNfQUNDRVNTX0NNRF9PRkZTRVRfU0VMKG9mZnNldCk7Ci0KLQlzdGF0dXMgPSBfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTY0KHZhbDY0LAotCQkJCSZ2cF9yZWctPnhtYWNfc3RhdHNfYWNjZXNzX2NtZCwKLQkJCQlWWEdFX0hXX1hNQUNfU1RBVFNfQUNDRVNTX0NNRF9TVFJPQkUsCi0JCQkJdnBhdGgtPmhsZGV2LT5jb25maWcuZGV2aWNlX3BvbGxfbWlsbGlzKTsKLQotCWlmICgoc3RhdHVzID09IFZYR0VfSFdfT0spICYmIChvcGVyYXRpb24gPT0gVlhHRV9IV19TVEFUU19PUF9SRUFEKSkKLQkJKnN0YXQgPSByZWFkcSgmdnBfcmVnLT54bWFjX3N0YXRzX2FjY2Vzc19kYXRhKTsKLQllbHNlCi0JCSpzdGF0ID0gMDsKLQotdnBhdGhfc3RhdHNfYWNjZXNzX2V4aXQ6Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotLyoKLSAqIF9fdnhnZV9od192cGF0aF94bWFjX3R4X3N0YXRzX2dldCAtIEdldCB0aGUgVFggU3RhdGlzdGljcyBvZiBhIHZwYXRoCi0gKi8KLXN0YXRpYyBlbnVtIHZ4Z2VfaHdfc3RhdHVzCi1fX3Z4Z2VfaHdfdnBhdGhfeG1hY190eF9zdGF0c19nZXQoCi0Jc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aCAqdnBhdGgsCi0Jc3RydWN0IHZ4Z2VfaHdfeG1hY192cGF0aF90eF9zdGF0cyAqdnBhdGhfdHhfc3RhdHMpCi17Ci0JdTY0ICp2YWw2NDsKLQlpbnQgaTsKLQl1MzIgb2Zmc2V0ID0gVlhHRV9IV19TVEFUU19WUEFUSF9UWF9PRkZTRVQ7Ci0JZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOwotCi0JdmFsNjQgPSAodTY0ICopIHZwYXRoX3R4X3N0YXRzOwotCi0JaWYgKHZwYXRoLT52cF9vcGVuID09IFZYR0VfSFdfVlBfTk9UX09QRU4pIHsKLQkJc3RhdHVzID0gVlhHRV9IV19FUlJfVlBBVEhfTk9UX09QRU47Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHN0cnVjdCB2eGdlX2h3X3htYWNfdnBhdGhfdHhfc3RhdHMpIC8gODsgaSsrKSB7Ci0JCXN0YXR1cyA9IF9fdnhnZV9od192cGF0aF9zdGF0c19hY2Nlc3ModnBhdGgsCi0JCQkJCVZYR0VfSFdfU1RBVFNfT1BfUkVBRCwKLQkJCQkJb2Zmc2V0LCB2YWw2NCk7Ci0JCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKLQkJCWdvdG8gZXhpdDsKLQkJb2Zmc2V0Kys7Ci0JCXZhbDY0Kys7Ci0JfQotZXhpdDoKLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgotICogX192eGdlX2h3X3ZwYXRoX3htYWNfcnhfc3RhdHNfZ2V0IC0gR2V0IHRoZSBSWCBTdGF0aXN0aWNzIG9mIGEgdnBhdGgKLSAqLwotc3RhdGljIGVudW0gdnhnZV9od19zdGF0dXMKLV9fdnhnZV9od192cGF0aF94bWFjX3J4X3N0YXRzX2dldChzdHJ1Y3QgX192eGdlX2h3X3ZpcnR1YWxwYXRoICp2cGF0aCwKLQkJCQkgIHN0cnVjdCB2eGdlX2h3X3htYWNfdnBhdGhfcnhfc3RhdHMgKnZwYXRoX3J4X3N0YXRzKQotewotCXU2NCAqdmFsNjQ7Ci0JZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOwotCWludCBpOwotCXUzMiBvZmZzZXQgPSBWWEdFX0hXX1NUQVRTX1ZQQVRIX1JYX09GRlNFVDsKLQl2YWw2NCA9ICh1NjQgKikgdnBhdGhfcnhfc3RhdHM7Ci0KLQlpZiAodnBhdGgtPnZwX29wZW4gPT0gVlhHRV9IV19WUF9OT1RfT1BFTikgewotCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9WUEFUSF9OT1RfT1BFTjsKLQkJZ290byBleGl0OwotCX0KLQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHN0cnVjdCB2eGdlX2h3X3htYWNfdnBhdGhfcnhfc3RhdHMpIC8gODsgaSsrKSB7Ci0JCXN0YXR1cyA9IF9fdnhnZV9od192cGF0aF9zdGF0c19hY2Nlc3ModnBhdGgsCi0JCQkJCVZYR0VfSFdfU1RBVFNfT1BfUkVBRCwKLQkJCQkJb2Zmc2V0ID4+IDMsIHZhbDY0KTsKLQkJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQotCQkJZ290byBleGl0OwotCi0JCW9mZnNldCArPSA4OwotCQl2YWw2NCsrOwotCX0KLWV4aXQ6Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotLyoKLSAqIF9fdnhnZV9od192cGF0aF9zdGF0c19nZXQgLSBHZXQgdGhlIHZwYXRoIGh3IHN0YXRpc3RpY3MuCi0gKi8KLXN0YXRpYyBlbnVtIHZ4Z2VfaHdfc3RhdHVzCi1fX3Z4Z2VfaHdfdnBhdGhfc3RhdHNfZ2V0KHN0cnVjdCBfX3Z4Z2VfaHdfdmlydHVhbHBhdGggKnZwYXRoLAotCQkJICBzdHJ1Y3QgdnhnZV9od192cGF0aF9zdGF0c19od19pbmZvICpod19zdGF0cykKLXsKLQl1NjQgdmFsNjQ7Ci0JZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOwotCXN0cnVjdCB2eGdlX2h3X3ZwYXRoX3JlZyBfX2lvbWVtICp2cF9yZWc7Ci0KLQlpZiAodnBhdGgtPnZwX29wZW4gPT0gVlhHRV9IV19WUF9OT1RfT1BFTikgewotCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9WUEFUSF9OT1RfT1BFTjsKLQkJZ290byBleGl0OwotCX0KLQl2cF9yZWcgPSB2cGF0aC0+dnBfcmVnOwotCi0JdmFsNjQgPSByZWFkcSgmdnBfcmVnLT52cGF0aF9kZWJ1Z19zdGF0czApOwotCWh3X3N0YXRzLT5pbmlfbnVtX213cl9zZW50ID0KLQkJKHUzMilWWEdFX0hXX1ZQQVRIX0RFQlVHX1NUQVRTMF9HRVRfSU5JX05VTV9NV1JfU0VOVCh2YWw2NCk7Ci0KLQl2YWw2NCA9IHJlYWRxKCZ2cF9yZWctPnZwYXRoX2RlYnVnX3N0YXRzMSk7Ci0JaHdfc3RhdHMtPmluaV9udW1fbXJkX3NlbnQgPQotCQkodTMyKVZYR0VfSFdfVlBBVEhfREVCVUdfU1RBVFMxX0dFVF9JTklfTlVNX01SRF9TRU5UKHZhbDY0KTsKLQotCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+dnBhdGhfZGVidWdfc3RhdHMyKTsKLQlod19zdGF0cy0+aW5pX251bV9jcGxfcmN2ZCA9Ci0JCSh1MzIpVlhHRV9IV19WUEFUSF9ERUJVR19TVEFUUzJfR0VUX0lOSV9OVU1fQ1BMX1JDVkQodmFsNjQpOwotCi0JdmFsNjQgPSByZWFkcSgmdnBfcmVnLT52cGF0aF9kZWJ1Z19zdGF0czMpOwotCWh3X3N0YXRzLT5pbmlfbnVtX213cl9ieXRlX3NlbnQgPQotCQlWWEdFX0hXX1ZQQVRIX0RFQlVHX1NUQVRTM19HRVRfSU5JX05VTV9NV1JfQllURV9TRU5UKHZhbDY0KTsKLQotCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+dnBhdGhfZGVidWdfc3RhdHM0KTsKLQlod19zdGF0cy0+aW5pX251bV9jcGxfYnl0ZV9yY3ZkID0KLQkJVlhHRV9IV19WUEFUSF9ERUJVR19TVEFUUzRfR0VUX0lOSV9OVU1fQ1BMX0JZVEVfUkNWRCh2YWw2NCk7Ci0KLQl2YWw2NCA9IHJlYWRxKCZ2cF9yZWctPnZwYXRoX2RlYnVnX3N0YXRzNSk7Ci0JaHdfc3RhdHMtPndyY3JkdGFyYl94b2ZmID0KLQkJKHUzMilWWEdFX0hXX1ZQQVRIX0RFQlVHX1NUQVRTNV9HRVRfV1JDUkRUQVJCX1hPRkYodmFsNjQpOwotCi0JdmFsNjQgPSByZWFkcSgmdnBfcmVnLT52cGF0aF9kZWJ1Z19zdGF0czYpOwotCWh3X3N0YXRzLT5yZGNyZHRhcmJfeG9mZiA9Ci0JCSh1MzIpVlhHRV9IV19WUEFUSF9ERUJVR19TVEFUUzZfR0VUX1JEQ1JEVEFSQl9YT0ZGKHZhbDY0KTsKLQotCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+dnBhdGhfZ2Vuc3RhdHNfY291bnQwMSk7Ci0JaHdfc3RhdHMtPnZwYXRoX2dlbnN0YXRzX2NvdW50MCA9Ci0JKHUzMilWWEdFX0hXX1ZQQVRIX0dFTlNUQVRTX0NPVU5UMDFfR0VUX1BQSUZfVlBBVEhfR0VOU1RBVFNfQ09VTlQwKAotCQl2YWw2NCk7Ci0KLQl2YWw2NCA9IHJlYWRxKCZ2cF9yZWctPnZwYXRoX2dlbnN0YXRzX2NvdW50MDEpOwotCWh3X3N0YXRzLT52cGF0aF9nZW5zdGF0c19jb3VudDEgPQotCSh1MzIpVlhHRV9IV19WUEFUSF9HRU5TVEFUU19DT1VOVDAxX0dFVF9QUElGX1ZQQVRIX0dFTlNUQVRTX0NPVU5UMSgKLQkJdmFsNjQpOwotCi0JdmFsNjQgPSByZWFkcSgmdnBfcmVnLT52cGF0aF9nZW5zdGF0c19jb3VudDIzKTsKLQlod19zdGF0cy0+dnBhdGhfZ2Vuc3RhdHNfY291bnQyID0KLQkodTMyKVZYR0VfSFdfVlBBVEhfR0VOU1RBVFNfQ09VTlQyM19HRVRfUFBJRl9WUEFUSF9HRU5TVEFUU19DT1VOVDIoCi0JCXZhbDY0KTsKLQotCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+dnBhdGhfZ2Vuc3RhdHNfY291bnQwMSk7Ci0JaHdfc3RhdHMtPnZwYXRoX2dlbnN0YXRzX2NvdW50MyA9Ci0JKHUzMilWWEdFX0hXX1ZQQVRIX0dFTlNUQVRTX0NPVU5UMjNfR0VUX1BQSUZfVlBBVEhfR0VOU1RBVFNfQ09VTlQzKAotCQl2YWw2NCk7Ci0KLQl2YWw2NCA9IHJlYWRxKCZ2cF9yZWctPnZwYXRoX2dlbnN0YXRzX2NvdW50NCk7Ci0JaHdfc3RhdHMtPnZwYXRoX2dlbnN0YXRzX2NvdW50NCA9Ci0JKHUzMilWWEdFX0hXX1ZQQVRIX0dFTlNUQVRTX0NPVU5UNF9HRVRfUFBJRl9WUEFUSF9HRU5TVEFUU19DT1VOVDQoCi0JCXZhbDY0KTsKLQotCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+dnBhdGhfZ2Vuc3RhdHNfY291bnQ1KTsKLQlod19zdGF0cy0+dnBhdGhfZ2Vuc3RhdHNfY291bnQ1ID0KLQkodTMyKVZYR0VfSFdfVlBBVEhfR0VOU1RBVFNfQ09VTlQ1X0dFVF9QUElGX1ZQQVRIX0dFTlNUQVRTX0NPVU5UNSgKLQkJdmFsNjQpOwotCi0Jc3RhdHVzID0gX192eGdlX2h3X3ZwYXRoX3htYWNfdHhfc3RhdHNfZ2V0KHZwYXRoLCAmaHdfc3RhdHMtPnR4X3N0YXRzKTsKLQlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCi0JCWdvdG8gZXhpdDsKLQotCXN0YXR1cyA9IF9fdnhnZV9od192cGF0aF94bWFjX3J4X3N0YXRzX2dldCh2cGF0aCwgJmh3X3N0YXRzLT5yeF9zdGF0cyk7Ci0JaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQotCQlnb3RvIGV4aXQ7Ci0KLQlWWEdFX0hXX1ZQQVRIX1NUQVRTX1BJT19SRUFEKAotCQlWWEdFX0hXX1NUQVRTX1ZQQVRIX1BST0dfRVZFTlRfVk5VTTBfT0ZGU0VUKTsKLQotCWh3X3N0YXRzLT5wcm9nX2V2ZW50X3ZudW0wID0KLQkJCSh1MzIpVlhHRV9IV19TVEFUU19HRVRfVlBBVEhfUFJPR19FVkVOVF9WTlVNMCh2YWw2NCk7Ci0KLQlod19zdGF0cy0+cHJvZ19ldmVudF92bnVtMSA9Ci0JCQkodTMyKVZYR0VfSFdfU1RBVFNfR0VUX1ZQQVRIX1BST0dfRVZFTlRfVk5VTTEodmFsNjQpOwotCi0JVlhHRV9IV19WUEFUSF9TVEFUU19QSU9fUkVBRCgKLQkJVlhHRV9IV19TVEFUU19WUEFUSF9QUk9HX0VWRU5UX1ZOVU0yX09GRlNFVCk7Ci0KLQlod19zdGF0cy0+cHJvZ19ldmVudF92bnVtMiA9Ci0JCQkodTMyKVZYR0VfSFdfU1RBVFNfR0VUX1ZQQVRIX1BST0dfRVZFTlRfVk5VTTIodmFsNjQpOwotCi0JaHdfc3RhdHMtPnByb2dfZXZlbnRfdm51bTMgPQotCQkJKHUzMilWWEdFX0hXX1NUQVRTX0dFVF9WUEFUSF9QUk9HX0VWRU5UX1ZOVU0zKHZhbDY0KTsKLQotCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+cnhfbXVsdGlfY2FzdF9zdGF0cyk7Ci0JaHdfc3RhdHMtPnJ4X211bHRpX2Nhc3RfZnJhbWVfZGlzY2FyZCA9Ci0JCSh1MTYpVlhHRV9IV19SWF9NVUxUSV9DQVNUX1NUQVRTX0dFVF9GUkFNRV9ESVNDQVJEKHZhbDY0KTsKLQotCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+cnhfZnJtX3RyYW5zZmVycmVkKTsKLQlod19zdGF0cy0+cnhfZnJtX3RyYW5zZmVycmVkID0KLQkJKHUzMilWWEdFX0hXX1JYX0ZSTV9UUkFOU0ZFUlJFRF9HRVRfUlhfRlJNX1RSQU5TRkVSUkVEKHZhbDY0KTsKLQotCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+cnhkX3JldHVybmVkKTsKLQlod19zdGF0cy0+cnhkX3JldHVybmVkID0KLQkJKHUxNilWWEdFX0hXX1JYRF9SRVRVUk5FRF9HRVRfUlhEX1JFVFVSTkVEKHZhbDY0KTsKLQotCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+ZGJnX3N0YXRzX3J4X21wYSk7Ci0JaHdfc3RhdHMtPnJ4X21wYV9sZW5fZmFpbF9mcm1zID0KLQkJKHUxNilWWEdFX0hXX0RCR19TVEFUU19HRVRfUlhfTVBBX0xFTl9GQUlMX0ZSTVModmFsNjQpOwotCWh3X3N0YXRzLT5yeF9tcGFfbXJrX2ZhaWxfZnJtcyA9Ci0JCSh1MTYpVlhHRV9IV19EQkdfU1RBVFNfR0VUX1JYX01QQV9NUktfRkFJTF9GUk1TKHZhbDY0KTsKLQlod19zdGF0cy0+cnhfbXBhX2NyY19mYWlsX2ZybXMgPQotCQkodTE2KVZYR0VfSFdfREJHX1NUQVRTX0dFVF9SWF9NUEFfQ1JDX0ZBSUxfRlJNUyh2YWw2NCk7Ci0KLQl2YWw2NCA9IHJlYWRxKCZ2cF9yZWctPmRiZ19zdGF0c19yeF9mYXUpOwotCWh3X3N0YXRzLT5yeF9wZXJtaXR0ZWRfZnJtcyA9Ci0JCSh1MTYpVlhHRV9IV19EQkdfU1RBVFNfR0VUX1JYX0ZBVV9SWF9QRVJNSVRURURfRlJNUyh2YWw2NCk7Ci0JaHdfc3RhdHMtPnJ4X3ZwX3Jlc2V0X2Rpc2NhcmRlZF9mcm1zID0KLQkodTE2KVZYR0VfSFdfREJHX1NUQVRTX0dFVF9SWF9GQVVfUlhfVlBfUkVTRVRfRElTQ0FSREVEX0ZSTVModmFsNjQpOwotCWh3X3N0YXRzLT5yeF93b2xfZnJtcyA9Ci0JCSh1MTYpVlhHRV9IV19EQkdfU1RBVFNfR0VUX1JYX0ZBVV9SWF9XT0xfRlJNUyh2YWw2NCk7Ci0KLQl2YWw2NCA9IHJlYWRxKCZ2cF9yZWctPnR4X3ZwX3Jlc2V0X2Rpc2NhcmRlZF9mcm1zKTsKLQlod19zdGF0cy0+dHhfdnBfcmVzZXRfZGlzY2FyZGVkX2ZybXMgPQotCSh1MTYpVlhHRV9IV19UWF9WUF9SRVNFVF9ESVNDQVJERURfRlJNU19HRVRfVFhfVlBfUkVTRVRfRElTQ0FSREVEX0ZSTVMoCi0JCXZhbDY0KTsKLWV4aXQ6Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotCi1zdGF0aWMgdm9pZCB2eGdlX29zX2RtYV9tYWxsb2NfYXN5bmMoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHZvaWQgKmRldmgsCi0JCQkJCXVuc2lnbmVkIGxvbmcgc2l6ZSkKLXsKLQlnZnBfdCBmbGFnczsKLQl2b2lkICp2YWRkcjsKLQotCWlmIChpbl9pbnRlcnJ1cHQoKSkKLQkJZmxhZ3MgPSBHRlBfQVRPTUlDIHwgR0ZQX0RNQTsKLQllbHNlCi0JCWZsYWdzID0gR0ZQX0tFUk5FTCB8IEdGUF9ETUE7Ci0KLQl2YWRkciA9IGttYWxsb2MoKHNpemUpLCBmbGFncyk7Ci0KLQl2eGdlX2h3X2Jsb2NrcG9vbF9ibG9ja19hZGQoZGV2aCwgdmFkZHIsIHNpemUsIHBkZXYsIHBkZXYpOwotfQotCi1zdGF0aWMgdm9pZCB2eGdlX29zX2RtYV9mcmVlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCB2b2lkICp2YWRkciwKLQkJCSAgICAgc3RydWN0IHBjaV9kZXYgKipwX2RtYV9hY2NoKQotewotCXVuc2lnbmVkIGxvbmcgbWlzYWxpZ25lZCA9ICoodW5zaWduZWQgbG9uZyAqKXBfZG1hX2FjY2g7Ci0JdTggKnRtcCA9ICh1OCAqKXZhZGRyOwotCXRtcCAtPSBtaXNhbGlnbmVkOwotCWtmcmVlKCh2b2lkICopdG1wKTsKLX0KLQotLyoKLSAqIF9fdnhnZV9od19ibG9ja3Bvb2xfY3JlYXRlIC0gQ3JlYXRlIGJsb2NrIHBvb2wKLSAqLwotCi1lbnVtIHZ4Z2VfaHdfc3RhdHVzCi1fX3Z4Z2VfaHdfYmxvY2twb29sX2NyZWF0ZShzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYsCi0JCQkgICBzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbCAqYmxvY2twb29sLAotCQkJICAgdTMyIHBvb2xfc2l6ZSwKLQkJCSAgIHUzMiBwb29sX21heCkKLXsKLQl1MzIgaTsKLQlzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbF9lbnRyeSAqZW50cnkgPSBOVUxMOwotCXZvaWQgKm1lbWJsb2NrOwotCWRtYV9hZGRyX3QgZG1hX2FkZHI7Ci0Jc3RydWN0IHBjaV9kZXYgKmRtYV9oYW5kbGU7Ci0Jc3RydWN0IHBjaV9kZXYgKmFjY19oYW5kbGU7Ci0JZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOwotCi0JaWYgKGJsb2NrcG9vbCA9PSBOVUxMKSB7Ci0JCXN0YXR1cyA9IFZYR0VfSFdfRkFJTDsKLQkJZ290byBibG9ja3Bvb2xfY3JlYXRlX2V4aXQ7Ci0JfQotCi0JYmxvY2twb29sLT5obGRldiA9IGhsZGV2OwotCWJsb2NrcG9vbC0+YmxvY2tfc2l6ZSA9IFZYR0VfSFdfQkxPQ0tfU0laRTsKLQlibG9ja3Bvb2wtPnBvb2xfc2l6ZSA9IDA7Ci0JYmxvY2twb29sLT5wb29sX21heCA9IHBvb2xfbWF4OwotCWJsb2NrcG9vbC0+cmVxX291dCA9IDA7Ci0KLQlJTklUX0xJU1RfSEVBRCgmYmxvY2twb29sLT5mcmVlX2Jsb2NrX2xpc3QpOwotCUlOSVRfTElTVF9IRUFEKCZibG9ja3Bvb2wtPmZyZWVfZW50cnlfbGlzdCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgcG9vbF9zaXplICsgcG9vbF9tYXg7IGkrKykgewotCQllbnRyeSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sX2VudHJ5KSwKLQkJCQlHRlBfS0VSTkVMKTsKLQkJaWYgKGVudHJ5ID09IE5VTEwpIHsKLQkJCV9fdnhnZV9od19ibG9ja3Bvb2xfZGVzdHJveShibG9ja3Bvb2wpOwotCQkJc3RhdHVzID0gVlhHRV9IV19FUlJfT1VUX09GX01FTU9SWTsKLQkJCWdvdG8gYmxvY2twb29sX2NyZWF0ZV9leGl0OwotCQl9Ci0JCWxpc3RfYWRkKCZlbnRyeS0+aXRlbSwgJmJsb2NrcG9vbC0+ZnJlZV9lbnRyeV9saXN0KTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgcG9vbF9zaXplOyBpKyspIHsKLQotCQltZW1ibG9jayA9IHZ4Z2Vfb3NfZG1hX21hbGxvYygKLQkJCQlobGRldi0+cGRldiwKLQkJCQlWWEdFX0hXX0JMT0NLX1NJWkUsCi0JCQkJJmRtYV9oYW5kbGUsCi0JCQkJJmFjY19oYW5kbGUpOwotCi0JCWlmIChtZW1ibG9jayA9PSBOVUxMKSB7Ci0JCQlfX3Z4Z2VfaHdfYmxvY2twb29sX2Rlc3Ryb3koYmxvY2twb29sKTsKLQkJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX09VVF9PRl9NRU1PUlk7Ci0JCQlnb3RvIGJsb2NrcG9vbF9jcmVhdGVfZXhpdDsKLQkJfQotCi0JCWRtYV9hZGRyID0gcGNpX21hcF9zaW5nbGUoaGxkZXYtPnBkZXYsIG1lbWJsb2NrLAotCQkJCVZYR0VfSFdfQkxPQ0tfU0laRSwgUENJX0RNQV9CSURJUkVDVElPTkFMKTsKLQotCQlpZiAodW5saWtlbHkocGNpX2RtYV9tYXBwaW5nX2Vycm9yKGhsZGV2LT5wZGV2LAotCQkJCWRtYV9hZGRyKSkpIHsKLQotCQkJdnhnZV9vc19kbWFfZnJlZShobGRldi0+cGRldiwgbWVtYmxvY2ssICZhY2NfaGFuZGxlKTsKLQkJCV9fdnhnZV9od19ibG9ja3Bvb2xfZGVzdHJveShibG9ja3Bvb2wpOwotCQkJc3RhdHVzID0gVlhHRV9IV19FUlJfT1VUX09GX01FTU9SWTsKLQkJCWdvdG8gYmxvY2twb29sX2NyZWF0ZV9leGl0OwotCQl9Ci0KLQkJaWYgKCFsaXN0X2VtcHR5KCZibG9ja3Bvb2wtPmZyZWVfZW50cnlfbGlzdCkpCi0JCQllbnRyeSA9IChzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbF9lbnRyeSAqKQotCQkJCWxpc3RfZmlyc3RfZW50cnkoJmJsb2NrcG9vbC0+ZnJlZV9lbnRyeV9saXN0LAotCQkJCQlzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbF9lbnRyeSwKLQkJCQkJaXRlbSk7Ci0KLQkJaWYgKGVudHJ5ID09IE5VTEwpCi0JCQllbnRyeSA9Ci0JCQkgICAga3phbGxvYyhzaXplb2Yoc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2xfZW50cnkpLAotCQkJCQlHRlBfS0VSTkVMKTsKLQkJaWYgKGVudHJ5ICE9IE5VTEwpIHsKLQkJCWxpc3RfZGVsKCZlbnRyeS0+aXRlbSk7Ci0JCQllbnRyeS0+bGVuZ3RoID0gVlhHRV9IV19CTE9DS19TSVpFOwotCQkJZW50cnktPm1lbWJsb2NrID0gbWVtYmxvY2s7Ci0JCQllbnRyeS0+ZG1hX2FkZHIgPSBkbWFfYWRkcjsKLQkJCWVudHJ5LT5hY2NfaGFuZGxlID0gYWNjX2hhbmRsZTsKLQkJCWVudHJ5LT5kbWFfaGFuZGxlID0gZG1hX2hhbmRsZTsKLQkJCWxpc3RfYWRkKCZlbnRyeS0+aXRlbSwKLQkJCQkJICAmYmxvY2twb29sLT5mcmVlX2Jsb2NrX2xpc3QpOwotCQkJYmxvY2twb29sLT5wb29sX3NpemUrKzsKLQkJfSBlbHNlIHsKLQkJCV9fdnhnZV9od19ibG9ja3Bvb2xfZGVzdHJveShibG9ja3Bvb2wpOwotCQkJc3RhdHVzID0gVlhHRV9IV19FUlJfT1VUX09GX01FTU9SWTsKLQkJCWdvdG8gYmxvY2twb29sX2NyZWF0ZV9leGl0OwotCQl9Ci0JfQotCi1ibG9ja3Bvb2xfY3JlYXRlX2V4aXQ6Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotLyoKLSAqIF9fdnhnZV9od19ibG9ja3Bvb2xfZGVzdHJveSAtIERlYWxsb2NhdGVzIHRoZSBibG9jayBwb29sCi0gKi8KLQotdm9pZCBfX3Z4Z2VfaHdfYmxvY2twb29sX2Rlc3Ryb3koc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2wgKmJsb2NrcG9vbCkKLXsKLQotCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldjsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwLCAqbjsKLQl1MTYgcmV0OwotCi0JaWYgKGJsb2NrcG9vbCA9PSBOVUxMKSB7Ci0JCXJldCA9IDE7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQlobGRldiA9IGJsb2NrcG9vbC0+aGxkZXY7Ci0KLQlsaXN0X2Zvcl9lYWNoX3NhZmUocCwgbiwgJmJsb2NrcG9vbC0+ZnJlZV9ibG9ja19saXN0KSB7Ci0KLQkJcGNpX3VubWFwX3NpbmdsZShobGRldi0+cGRldiwKLQkJCSgoc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2xfZW50cnkgKilwKS0+ZG1hX2FkZHIsCi0JCQkoKHN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sX2VudHJ5ICopcCktPmxlbmd0aCwKLQkJCVBDSV9ETUFfQklESVJFQ1RJT05BTCk7Ci0KLQkJdnhnZV9vc19kbWFfZnJlZShobGRldi0+cGRldiwKLQkJCSgoc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2xfZW50cnkgKilwKS0+bWVtYmxvY2ssCi0JCQkmKChzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbF9lbnRyeSAqKSBwKS0+YWNjX2hhbmRsZSk7Ci0KLQkJbGlzdF9kZWwoCi0JCQkmKChzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbF9lbnRyeSAqKXApLT5pdGVtKTsKLQkJa2ZyZWUocCk7Ci0JCWJsb2NrcG9vbC0+cG9vbF9zaXplLS07Ci0JfQotCi0JbGlzdF9mb3JfZWFjaF9zYWZlKHAsIG4sICZibG9ja3Bvb2wtPmZyZWVfZW50cnlfbGlzdCkgewotCQlsaXN0X2RlbCgKLQkJCSYoKHN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sX2VudHJ5ICopcCktPml0ZW0pOwotCQlrZnJlZSgodm9pZCAqKXApOwotCX0KLQlyZXQgPSAwOwotZXhpdDoKLQlyZXR1cm47Ci19Ci0KLS8qCi0gKiBfX3Z4Z2VfaHdfYmxvY2twb29sX2Jsb2Nrc19hZGQgLSBSZXF1ZXN0IGFkZGl0aW9uYWwgYmxvY2tzCi0gKi8KLXN0YXRpYwotdm9pZCBfX3Z4Z2VfaHdfYmxvY2twb29sX2Jsb2Nrc19hZGQoc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2wgKmJsb2NrcG9vbCkKLXsKLQl1MzIgbnJlcSA9IDAsIGk7Ci0KLQlpZiAoKGJsb2NrcG9vbC0+cG9vbF9zaXplICArICBibG9ja3Bvb2wtPnJlcV9vdXQpIDwKLQkJVlhHRV9IV19NSU5fRE1BX0JMT0NLX1BPT0xfU0laRSkgewotCQlucmVxID0gVlhHRV9IV19JTkNSX0RNQV9CTE9DS19QT09MX1NJWkU7Ci0JCWJsb2NrcG9vbC0+cmVxX291dCArPSBucmVxOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBucmVxOyBpKyspCi0JCXZ4Z2Vfb3NfZG1hX21hbGxvY19hc3luYygKLQkJCSgoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKilibG9ja3Bvb2wtPmhsZGV2KS0+cGRldiwKLQkJCWJsb2NrcG9vbC0+aGxkZXYsIFZYR0VfSFdfQkxPQ0tfU0laRSk7Ci19Ci0KLS8qCi0gKiBfX3Z4Z2VfaHdfYmxvY2twb29sX2Jsb2Nrc19yZW1vdmUgLSBGcmVlIGFkZGl0aW9uYWwgYmxvY2tzCi0gKi8KLXN0YXRpYwotdm9pZCBfX3Z4Z2VfaHdfYmxvY2twb29sX2Jsb2Nrc19yZW1vdmUoc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2wgKmJsb2NrcG9vbCkKLXsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwLCAqbjsKLQotCWxpc3RfZm9yX2VhY2hfc2FmZShwLCBuLCAmYmxvY2twb29sLT5mcmVlX2Jsb2NrX2xpc3QpIHsKLQotCQlpZiAoYmxvY2twb29sLT5wb29sX3NpemUgPCBibG9ja3Bvb2wtPnBvb2xfbWF4KQotCQkJYnJlYWs7Ci0KLQkJcGNpX3VubWFwX3NpbmdsZSgKLQkJCSgoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKilibG9ja3Bvb2wtPmhsZGV2KS0+cGRldiwKLQkJCSgoc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2xfZW50cnkgKilwKS0+ZG1hX2FkZHIsCi0JCQkoKHN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sX2VudHJ5ICopcCktPmxlbmd0aCwKLQkJCVBDSV9ETUFfQklESVJFQ1RJT05BTCk7Ci0KLQkJdnhnZV9vc19kbWFfZnJlZSgKLQkJCSgoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKilibG9ja3Bvb2wtPmhsZGV2KS0+cGRldiwKLQkJCSgoc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2xfZW50cnkgKilwKS0+bWVtYmxvY2ssCi0JCQkmKChzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbF9lbnRyeSAqKXApLT5hY2NfaGFuZGxlKTsKLQotCQlsaXN0X2RlbCgmKChzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbF9lbnRyeSAqKXApLT5pdGVtKTsKLQotCQlsaXN0X2FkZChwLCAmYmxvY2twb29sLT5mcmVlX2VudHJ5X2xpc3QpOwotCi0JCWJsb2NrcG9vbC0+cG9vbF9zaXplLS07Ci0KLQl9Ci19Ci0KLS8qCi0gKiB2eGdlX2h3X2Jsb2NrcG9vbF9ibG9ja19hZGQgLSBjYWxsYmFjayBmb3IgdnhnZV9vc19kbWFfbWFsbG9jX2FzeW5jCi0gKiBBZGRzIGEgYmxvY2sgdG8gYmxvY2sgcG9vbAotICovCi1zdGF0aWMgdm9pZCB2eGdlX2h3X2Jsb2NrcG9vbF9ibG9ja19hZGQoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgsCi0JCQkJCXZvaWQgKmJsb2NrX2FkZHIsCi0JCQkJCXUzMiBsZW5ndGgsCi0JCQkJCXN0cnVjdCBwY2lfZGV2ICpkbWFfaCwKLQkJCQkJc3RydWN0IHBjaV9kZXYgKmFjY19oYW5kbGUpCi17Ci0Jc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2wgICpibG9ja3Bvb2w7Ci0Jc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2xfZW50cnkgICplbnRyeSA9IE5VTEw7Ci0JZG1hX2FkZHJfdCBkbWFfYWRkcjsKLQllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7Ci0JdTMyIHJlcV9vdXQ7Ci0KLQlibG9ja3Bvb2wgPSAmZGV2aC0+YmxvY2tfcG9vbDsKLQotCWlmIChibG9ja19hZGRyID09IE5VTEwpIHsKLQkJYmxvY2twb29sLT5yZXFfb3V0LS07Ci0JCXN0YXR1cyA9IFZYR0VfSFdfRkFJTDsKLQkJZ290byBleGl0OwotCX0KLQotCWRtYV9hZGRyID0gcGNpX21hcF9zaW5nbGUoZGV2aC0+cGRldiwgYmxvY2tfYWRkciwgbGVuZ3RoLAotCQkJCVBDSV9ETUFfQklESVJFQ1RJT05BTCk7Ci0KLQlpZiAodW5saWtlbHkocGNpX2RtYV9tYXBwaW5nX2Vycm9yKGRldmgtPnBkZXYsIGRtYV9hZGRyKSkpIHsKLQotCQl2eGdlX29zX2RtYV9mcmVlKGRldmgtPnBkZXYsIGJsb2NrX2FkZHIsICZhY2NfaGFuZGxlKTsKLQkJYmxvY2twb29sLT5yZXFfb3V0LS07Ci0JCXN0YXR1cyA9IFZYR0VfSFdfRkFJTDsKLQkJZ290byBleGl0OwotCX0KLQotCi0JaWYgKCFsaXN0X2VtcHR5KCZibG9ja3Bvb2wtPmZyZWVfZW50cnlfbGlzdCkpCi0JCWVudHJ5ID0gKHN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sX2VudHJ5ICopCi0JCQlsaXN0X2ZpcnN0X2VudHJ5KCZibG9ja3Bvb2wtPmZyZWVfZW50cnlfbGlzdCwKLQkJCQlzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbF9lbnRyeSwKLQkJCQlpdGVtKTsKLQotCWlmIChlbnRyeSA9PSBOVUxMKQotCQllbnRyeSA9IChzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbF9lbnRyeSAqKQotCQkJdm1hbGxvYyhzaXplb2Yoc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2xfZW50cnkpKTsKLQllbHNlCi0JCWxpc3RfZGVsKCZlbnRyeS0+aXRlbSk7Ci0KLQlpZiAoZW50cnkgIT0gTlVMTCkgewotCQllbnRyeS0+bGVuZ3RoID0gbGVuZ3RoOwotCQllbnRyeS0+bWVtYmxvY2sgPSBibG9ja19hZGRyOwotCQllbnRyeS0+ZG1hX2FkZHIgPSBkbWFfYWRkcjsKLQkJZW50cnktPmFjY19oYW5kbGUgPSBhY2NfaGFuZGxlOwotCQllbnRyeS0+ZG1hX2hhbmRsZSA9IGRtYV9oOwotCQlsaXN0X2FkZCgmZW50cnktPml0ZW0sICZibG9ja3Bvb2wtPmZyZWVfYmxvY2tfbGlzdCk7Ci0JCWJsb2NrcG9vbC0+cG9vbF9zaXplKys7Ci0JCXN0YXR1cyA9IFZYR0VfSFdfT0s7Ci0JfSBlbHNlCi0JCXN0YXR1cyA9IFZYR0VfSFdfRVJSX09VVF9PRl9NRU1PUlk7Ci0KLQlibG9ja3Bvb2wtPnJlcV9vdXQtLTsKLQotCXJlcV9vdXQgPSBibG9ja3Bvb2wtPnJlcV9vdXQ7Ci1leGl0OgotCXJldHVybjsKLX0KLQotLyoKLSAqIF9fdnhnZV9od19ibG9ja3Bvb2xfbWFsbG9jIC0gQWxsb2NhdGUgYSBtZW1vcnkgYmxvY2sgZnJvbSBwb29sCi0gKiBBbGxvY2F0ZXMgYSBibG9jayBvZiBtZW1vcnkgb2YgZ2l2ZW4gc2l6ZSwgZWl0aGVyIGZyb20gYmxvY2sgcG9vbAotICogb3IgYnkgY2FsbGluZyB2eGdlX29zX2RtYV9tYWxsb2MoKQotICovCi12b2lkICoKLV9fdnhnZV9od19ibG9ja3Bvb2xfbWFsbG9jKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpkZXZoLCB1MzIgc2l6ZSwKLQkJCQlzdHJ1Y3QgdnhnZV9od19tZW1wb29sX2RtYSAqZG1hX29iamVjdCkKLXsKLQlzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbF9lbnRyeSAqZW50cnkgPSBOVUxMOwotCXN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sICAqYmxvY2twb29sOwotCXZvaWQgKm1lbWJsb2NrID0gTlVMTDsKLQllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7Ci0KLQlibG9ja3Bvb2wgPSAmZGV2aC0+YmxvY2tfcG9vbDsKLQotCWlmIChzaXplICE9IGJsb2NrcG9vbC0+YmxvY2tfc2l6ZSkgewotCi0JCW1lbWJsb2NrID0gdnhnZV9vc19kbWFfbWFsbG9jKGRldmgtPnBkZXYsIHNpemUsCi0JCQkJCQkmZG1hX29iamVjdC0+aGFuZGxlLAotCQkJCQkJJmRtYV9vYmplY3QtPmFjY19oYW5kbGUpOwotCi0JCWlmIChtZW1ibG9jayA9PSBOVUxMKSB7Ci0JCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9PVVRfT0ZfTUVNT1JZOwotCQkJZ290byBleGl0OwotCQl9Ci0KLQkJZG1hX29iamVjdC0+YWRkciA9IHBjaV9tYXBfc2luZ2xlKGRldmgtPnBkZXYsIG1lbWJsb2NrLCBzaXplLAotCQkJCQlQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOwotCi0JCWlmICh1bmxpa2VseShwY2lfZG1hX21hcHBpbmdfZXJyb3IoZGV2aC0+cGRldiwKLQkJCQlkbWFfb2JqZWN0LT5hZGRyKSkpIHsKLQkJCXZ4Z2Vfb3NfZG1hX2ZyZWUoZGV2aC0+cGRldiwgbWVtYmxvY2ssCi0JCQkJJmRtYV9vYmplY3QtPmFjY19oYW5kbGUpOwotCQkJc3RhdHVzID0gVlhHRV9IV19FUlJfT1VUX09GX01FTU9SWTsKLQkJCWdvdG8gZXhpdDsKLQkJfQotCi0JfSBlbHNlIHsKLQotCQlpZiAoIWxpc3RfZW1wdHkoJmJsb2NrcG9vbC0+ZnJlZV9ibG9ja19saXN0KSkKLQkJCWVudHJ5ID0gKHN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sX2VudHJ5ICopCi0JCQkJbGlzdF9maXJzdF9lbnRyeSgmYmxvY2twb29sLT5mcmVlX2Jsb2NrX2xpc3QsCi0JCQkJCXN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sX2VudHJ5LAotCQkJCQlpdGVtKTsKLQotCQlpZiAoZW50cnkgIT0gTlVMTCkgewotCQkJbGlzdF9kZWwoJmVudHJ5LT5pdGVtKTsKLQkJCWRtYV9vYmplY3QtPmFkZHIgPSBlbnRyeS0+ZG1hX2FkZHI7Ci0JCQlkbWFfb2JqZWN0LT5oYW5kbGUgPSBlbnRyeS0+ZG1hX2hhbmRsZTsKLQkJCWRtYV9vYmplY3QtPmFjY19oYW5kbGUgPSBlbnRyeS0+YWNjX2hhbmRsZTsKLQkJCW1lbWJsb2NrID0gZW50cnktPm1lbWJsb2NrOwotCi0JCQlsaXN0X2FkZCgmZW50cnktPml0ZW0sCi0JCQkJJmJsb2NrcG9vbC0+ZnJlZV9lbnRyeV9saXN0KTsKLQkJCWJsb2NrcG9vbC0+cG9vbF9zaXplLS07Ci0JCX0KLQotCQlpZiAobWVtYmxvY2sgIT0gTlVMTCkKLQkJCV9fdnhnZV9od19ibG9ja3Bvb2xfYmxvY2tzX2FkZChibG9ja3Bvb2wpOwotCX0KLWV4aXQ6Ci0JcmV0dXJuIG1lbWJsb2NrOwotfQotCi0vKgotICogX192eGdlX2h3X2Jsb2NrcG9vbF9mcmVlIC0gRnJlZXMgdGhlIG1lbW9yeSBhbGxjb2F0ZWQgd2l0aAotCQkJCV9fdnhnZV9od19ibG9ja3Bvb2xfbWFsbG9jCi0gKi8KLXZvaWQKLV9fdnhnZV9od19ibG9ja3Bvb2xfZnJlZShzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aCwKLQkJCXZvaWQgKm1lbWJsb2NrLCB1MzIgc2l6ZSwKLQkJCXN0cnVjdCB2eGdlX2h3X21lbXBvb2xfZG1hICpkbWFfb2JqZWN0KQotewotCXN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sX2VudHJ5ICplbnRyeSA9IE5VTEw7Ci0Jc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2wgICpibG9ja3Bvb2w7Ci0JZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOwotCi0JYmxvY2twb29sID0gJmRldmgtPmJsb2NrX3Bvb2w7Ci0KLQlpZiAoc2l6ZSAhPSBibG9ja3Bvb2wtPmJsb2NrX3NpemUpIHsKLQkJcGNpX3VubWFwX3NpbmdsZShkZXZoLT5wZGV2LCBkbWFfb2JqZWN0LT5hZGRyLCBzaXplLAotCQkJUENJX0RNQV9CSURJUkVDVElPTkFMKTsKLQkJdnhnZV9vc19kbWFfZnJlZShkZXZoLT5wZGV2LCBtZW1ibG9jaywgJmRtYV9vYmplY3QtPmFjY19oYW5kbGUpOwotCX0gZWxzZSB7Ci0KLQkJaWYgKCFsaXN0X2VtcHR5KCZibG9ja3Bvb2wtPmZyZWVfZW50cnlfbGlzdCkpCi0JCQllbnRyeSA9IChzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbF9lbnRyeSAqKQotCQkJCWxpc3RfZmlyc3RfZW50cnkoJmJsb2NrcG9vbC0+ZnJlZV9lbnRyeV9saXN0LAotCQkJCQlzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbF9lbnRyeSwKLQkJCQkJaXRlbSk7Ci0KLQkJaWYgKGVudHJ5ID09IE5VTEwpCi0JCQllbnRyeSA9IChzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbF9lbnRyeSAqKQotCQkJCXZtYWxsb2Moc2l6ZW9mKAotCQkJCQlzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbF9lbnRyeSkpOwotCQllbHNlCi0JCQlsaXN0X2RlbCgmZW50cnktPml0ZW0pOwotCi0JCWlmIChlbnRyeSAhPSBOVUxMKSB7Ci0JCQllbnRyeS0+bGVuZ3RoID0gc2l6ZTsKLQkJCWVudHJ5LT5tZW1ibG9jayA9IG1lbWJsb2NrOwotCQkJZW50cnktPmRtYV9hZGRyID0gZG1hX29iamVjdC0+YWRkcjsKLQkJCWVudHJ5LT5hY2NfaGFuZGxlID0gZG1hX29iamVjdC0+YWNjX2hhbmRsZTsKLQkJCWVudHJ5LT5kbWFfaGFuZGxlID0gZG1hX29iamVjdC0+aGFuZGxlOwotCQkJbGlzdF9hZGQoJmVudHJ5LT5pdGVtLAotCQkJCQkmYmxvY2twb29sLT5mcmVlX2Jsb2NrX2xpc3QpOwotCQkJYmxvY2twb29sLT5wb29sX3NpemUrKzsKLQkJCXN0YXR1cyA9IFZYR0VfSFdfT0s7Ci0JCX0gZWxzZQotCQkJc3RhdHVzID0gVlhHRV9IV19FUlJfT1VUX09GX01FTU9SWTsKLQotCQlpZiAoc3RhdHVzID09IFZYR0VfSFdfT0spCi0JCQlfX3Z4Z2VfaHdfYmxvY2twb29sX2Jsb2Nrc19yZW1vdmUoYmxvY2twb29sKTsKLQl9Ci19Ci0KLS8qCi0gKiBfX3Z4Z2VfaHdfYmxvY2twb29sX2Jsb2NrX2FsbG9jYXRlIC0gQWxsb2NhdGVzIGEgYmxvY2sgZnJvbSBibG9jayBwb29sCi0gKiBUaGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyBhIGJsb2NrIGZyb20gYmxvY2sgcG9vbCBvciBmcm9tIHRoZSBzeXN0ZW0KLSAqLwotc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2xfZW50cnkgKgotX192eGdlX2h3X2Jsb2NrcG9vbF9ibG9ja19hbGxvY2F0ZShzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aCwgdTMyIHNpemUpCi17Ci0Jc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2xfZW50cnkgKmVudHJ5ID0gTlVMTDsKLQlzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbCAgKmJsb2NrcG9vbDsKLQotCWJsb2NrcG9vbCA9ICZkZXZoLT5ibG9ja19wb29sOwotCi0JaWYgKHNpemUgPT0gYmxvY2twb29sLT5ibG9ja19zaXplKSB7Ci0KLQkJaWYgKCFsaXN0X2VtcHR5KCZibG9ja3Bvb2wtPmZyZWVfYmxvY2tfbGlzdCkpCi0JCQllbnRyeSA9IChzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbF9lbnRyeSAqKQotCQkJCWxpc3RfZmlyc3RfZW50cnkoJmJsb2NrcG9vbC0+ZnJlZV9ibG9ja19saXN0LAotCQkJCQlzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbF9lbnRyeSwKLQkJCQkJaXRlbSk7Ci0KLQkJaWYgKGVudHJ5ICE9IE5VTEwpIHsKLQkJCWxpc3RfZGVsKCZlbnRyeS0+aXRlbSk7Ci0JCQlibG9ja3Bvb2wtPnBvb2xfc2l6ZS0tOwotCQl9Ci0JfQotCi0JaWYgKGVudHJ5ICE9IE5VTEwpCi0JCV9fdnhnZV9od19ibG9ja3Bvb2xfYmxvY2tzX2FkZChibG9ja3Bvb2wpOwotCi0JcmV0dXJuIGVudHJ5OwotfQotCi0vKgotICogX192eGdlX2h3X2Jsb2NrcG9vbF9ibG9ja19mcmVlIC0gRnJlZXMgYSBibG9jayBmcm9tIGJsb2NrIHBvb2wKLSAqIEBkZXZoOiBIYWwgZGV2aWNlCi0gKiBAZW50cnk6IEVudHJ5IG9mIGJsb2NrIHRvIGJlIGZyZWVkCi0gKgotICogVGhpcyBmdW5jdGlvbiBmcmVlcyBhIGJsb2NrIGZyb20gYmxvY2sgcG9vbAotICovCi12b2lkCi1fX3Z4Z2VfaHdfYmxvY2twb29sX2Jsb2NrX2ZyZWUoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgsCi0JCQlzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbF9lbnRyeSAqZW50cnkpCi17Ci0Jc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2wgICpibG9ja3Bvb2w7Ci0KLQlibG9ja3Bvb2wgPSAmZGV2aC0+YmxvY2tfcG9vbDsKLQotCWlmIChlbnRyeS0+bGVuZ3RoID09IGJsb2NrcG9vbC0+YmxvY2tfc2l6ZSkgewotCQlsaXN0X2FkZCgmZW50cnktPml0ZW0sICZibG9ja3Bvb2wtPmZyZWVfYmxvY2tfbGlzdCk7Ci0JCWJsb2NrcG9vbC0+cG9vbF9zaXplKys7Ci0JfQotCi0JX192eGdlX2h3X2Jsb2NrcG9vbF9ibG9ja3NfcmVtb3ZlKGJsb2NrcG9vbCk7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtY29uZmlnLmggYi9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtY29uZmlnLmgKaW5kZXggNWMwMDg2MS4uZTI0OWUyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdnhnZS92eGdlLWNvbmZpZy5oCisrKyBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1jb25maWcuaApAQCAtMjAsMTMgKzIwLDYgQEAKICNkZWZpbmUgVlhHRV9DQUNIRV9MSU5FX1NJWkUgMTI4CiAjZW5kaWYKIAotI2RlZmluZSB2eGdlX29zX3ZhcHJpbnRmKGxldmVsLCBtYXNrLCBmbXQsIC4uLikgeyBcCi0JY2hhciBidWZmWzI1NV07IFwKLQkJc25wcmludGYoYnVmZiwgMjU1LCBmbXQsIF9fVkFfQVJHU19fKTsgXAotCQlwcmludGsoYnVmZik7IFwKLQkJcHJpbnRrKCJcbiIpOyBcCi19Ci0KICNpZm5kZWYgVlhHRV9BTElHTgogI2RlZmluZSBWWEdFX0FMSUdOKGFkcnMsIHNpemUpIFwKIAkoKChzaXplKSAtICgoKHU2NClhZHJzKSAmICgoc2l6ZSktMSkpKSAmICgoc2l6ZSktMSkpCkBAIC0zNiw4ICsyOSwxNiBAQAogI2RlZmluZSBWWEdFX0hXX01BWF9NVFUJCQkJOTYwMAogI2RlZmluZSBWWEdFX0hXX0RFRkFVTFRfTVRVCQkJMTUwMAogCi0jaWZkZWYgVlhHRV9ERUJVR19BU1NFUlQKKyNkZWZpbmUgVlhHRV9IV19NQVhfUk9NX0lNQUdFUwkJCTgKIAorc3RydWN0IGVwcm9tX2ltYWdlIHsKKwl1OCBpc192YWxpZDoxOworCXU4IGluZGV4OworCXU4IHR5cGU7CisJdTE2IHZlcnNpb247Cit9OworCisjaWZkZWYgVlhHRV9ERUJVR19BU1NFUlQKIC8qKgogICogdnhnZV9hc3NlcnQKICAqIEB0ZXN0OiBDLWNvbmRpdGlvbiB0byBjaGVjawpAQCAtNDgsMTYgKzQ5LDEzIEBACiAgKiBjb21waWxhdGlvbgogICogdGltZS4KICAqLwotI2RlZmluZSB2eGdlX2Fzc2VydCh0ZXN0KSB7IFwKLQlpZiAoISh0ZXN0KSkgXAotCQl2eGdlX29zX2J1ZygiYmFkIGNvbmQ6ICIjdGVzdCIgYXQgJXM6JWRcbiIsIFwKLQkJCQlfX0ZJTEVfXywgX19MSU5FX18pOyB9CisjZGVmaW5lIHZ4Z2VfYXNzZXJ0KHRlc3QpIEJVR19PTighKHRlc3QpKQogI2Vsc2UKICNkZWZpbmUgdnhnZV9hc3NlcnQodGVzdCkKICNlbmRpZiAvKiBlbmQgb2YgVlhHRV9ERUJVR19BU1NFUlQgKi8KIAogLyoqCi0gKiBlbnVtIGVudW0gdnhnZV9kZWJ1Z19sZXZlbAorICogZW51bSB2eGdlX2RlYnVnX2xldmVsCiAgKiBAVlhHRV9OT05FOiBkZWJ1ZyBkaXNhYmxlZAogICogQFZYR0VfRVJSOiBhbGwgZXJyb3JzIGdvaW5nIHRvIGJlIGxvZ2dlZCBvdXQKICAqIEBWWEdFX1RSQUNFOiBhbGwgZXJyb3JzIHBsdXMgYWxsIGtpbmQgb2YgdmVyYm9zZSB0cmFjaW5nIHByaW50IG91dHMKQEAgLTE1OSw2ICsxNTcsNDcgQEAKIH07CiAKIC8qKgorICogZW51bSBlbnVtIHZ4Z2VfaHdfZndfdXBncmFkZV9jb2RlIC0gRlcgdXBncmFkZSByZXR1cm4gY29kZXMuCisgKiBAVlhHRV9IV19GV19VUEdSQURFX09LOiBBbGwgT0sgc2VuZCBuZXh0IDE2IGJ5dGVzCisgKiBAVlhHRV9IV19GV19VUEdSQURFX0RPTkU6ICB1cGxvYWQgY29tcGxldGVkCisgKiBAVlhHRV9IV19GV19VUEdSQURFX0VSUjogIHVwbG9hZCBlcnJvcgorICogQFZYR0VfRldfVVBHUkFERV9CWVRFUzJTS0lQOiAgc2tpcCBieXRlcyBpbiB0aGUgc3RyZWFtCisgKgorICovCitlbnVtIHZ4Z2VfaHdfZndfdXBncmFkZV9jb2RlIHsKKwlWWEdFX0hXX0ZXX1VQR1JBREVfT0sJCT0gMCwKKwlWWEdFX0hXX0ZXX1VQR1JBREVfRE9ORQkJPSAxLAorCVZYR0VfSFdfRldfVVBHUkFERV9FUlIJCT0gMiwKKwlWWEdFX0ZXX1VQR1JBREVfQllURVMyU0tJUAk9IDMKK307CisKKy8qKgorICogZW51bSBlbnVtIHZ4Z2VfaHdfZndfdXBncmFkZV9lcnJfY29kZSAtIEZXIHVwZ3JhZGUgZXJyb3IgY29kZXMuCisgKiBAVlhHRV9IV19GV19VUEdSQURFX0VSUl9DT1JSVVBUX0RBVEFfMTogY29ycnVwdCBkYXRhCisgKiBAVlhHRV9IV19GV19VUEdSQURFX0VSUl9CVUZGRVJfT1ZFUkZMT1c6IGJ1ZmZlciBvdmVyZmxvdworICogQFZYR0VfSFdfRldfVVBHUkFERV9FUlJfSU5WX05DRl9GSUxFXzM6IGludmFsaWQgLm5jZiBmaWxlCisgKiBAVlhHRV9IV19GV19VUEdSQURFX0VSUl9JTlZfTkNGX0ZJTEVfNDogaW52YWxpZCAubmNmIGZpbGUKKyAqIEBWWEdFX0hXX0ZXX1VQR1JBREVfRVJSX0lOVl9OQ0ZfRklMRV81OiBpbnZhbGlkIC5uY2YgZmlsZQorICogQFZYR0VfSFdfRldfVVBHUkFERV9FUlJfSU5WX05DRl9GSUxFXzY6IGludmFsaWQgLm5jZiBmaWxlCisgKiBAVlhHRV9IV19GV19VUEdSQURFX0VSUl9DT1JSVVBUX0RBVEFfNzogY29ycnVwdCBkYXRhCisgKiBAVlhHRV9IV19GV19VUEdSQURFX0VSUl9JTlZfTkNGX0ZJTEVfODogaW52YWxpZCAubmNmIGZpbGUKKyAqIEBWWEdFX0hXX0ZXX1VQR1JBREVfRVJSX0dFTkVSSUNfRVJST1JfVU5LTk9XTjogZ2VuZXJpYyBlcnJvciB1bmtub3duIHR5cGUKKyAqIEBWWEdFX0hXX0ZXX1VQR1JBREVfRVJSX0ZBSUxFRF9UT19GTEFTSDogZmFpbGVkIHRvIGZsYXNoIGltYWdlIGNoZWNrIGZhaWxlZAorICovCitlbnVtIHZ4Z2VfaHdfZndfdXBncmFkZV9lcnJfY29kZSB7CisJVlhHRV9IV19GV19VUEdSQURFX0VSUl9DT1JSVVBUX0RBVEFfMQkJPSAxLAorCVZYR0VfSFdfRldfVVBHUkFERV9FUlJfQlVGRkVSX09WRVJGTE9XCQk9IDIsCisJVlhHRV9IV19GV19VUEdSQURFX0VSUl9JTlZfTkNGX0ZJTEVfMwkJPSAzLAorCVZYR0VfSFdfRldfVVBHUkFERV9FUlJfSU5WX05DRl9GSUxFXzQJCT0gNCwKKwlWWEdFX0hXX0ZXX1VQR1JBREVfRVJSX0lOVl9OQ0ZfRklMRV81CQk9IDUsCisJVlhHRV9IV19GV19VUEdSQURFX0VSUl9JTlZfTkNGX0ZJTEVfNgkJPSA2LAorCVZYR0VfSFdfRldfVVBHUkFERV9FUlJfQ09SUlVQVF9EQVRBXzcJCT0gNywKKwlWWEdFX0hXX0ZXX1VQR1JBREVfRVJSX0lOVl9OQ0ZfRklMRV84CQk9IDgsCisJVlhHRV9IV19GV19VUEdSQURFX0VSUl9HRU5FUklDX0VSUk9SX1VOS05PV04JPSA5LAorCVZYR0VfSFdfRldfVVBHUkFERV9FUlJfRkFJTEVEX1RPX0ZMQVNICQk9IDEwCit9OworCisvKioKICAqIHN0cnVjdCB2eGdlX2h3X2RldmljZV9kYXRlIC0gRGF0ZSBGb3JtYXQKICAqIEBkYXk6IERheQogICogQG1vbnRoOiBNb250aApAQCAtMjc1LDkgKzMxNCw5IEBACiAjZGVmaW5lIFZYR0VfSFdfUklOR19ERUZBVUxUCQkJCQkxCiAKIAl1MzIJCQkJcmluZ19ibG9ja3M7Ci0jZGVmaW5lIFZYR0VfSFdfTUlOX1JJTkdfQkxPQ0tTCQkJCTEKLSNkZWZpbmUgVlhHRV9IV19NQVhfUklOR19CTE9DS1MJCQkJMTI4Ci0jZGVmaW5lIFZYR0VfSFdfREVGX1JJTkdfQkxPQ0tTCQkJCTIKKyNkZWZpbmUgVlhHRV9IV19NSU5fUklOR19CTE9DS1MJCQkJCTEKKyNkZWZpbmUgVlhHRV9IV19NQVhfUklOR19CTE9DS1MJCQkJCTEyOAorI2RlZmluZSBWWEdFX0hXX0RFRl9SSU5HX0JMT0NLUwkJCQkJMgogCiAJdTMyCQkJCWJ1ZmZlcl9tb2RlOwogI2RlZmluZSBWWEdFX0hXX1JJTkdfUlhEX0JVRkZFUl9NT0RFXzEJCQkJMQpAQCAtNDY1LDcgKzUwNCw2IEBACiAgKiBTZWUgYWxzbzogdnhnZV9od19kcml2ZXJfaW5pdGlhbGl6ZSgpLgogICovCiBzdHJ1Y3QgdnhnZV9od191bGRfY2JzIHsKLQogCXZvaWQgKCpsaW5rX3VwKShzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aCk7CiAJdm9pZCAoKmxpbmtfZG93bikoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgpOwogCXZvaWQgKCpjcml0X2Vycikoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgsCkBAIC02NTIsNiArNjkwLDcgQEAKIAlzdHJ1Y3QgdnhnZV9od192cGF0aF9zdGF0c19od19pbmZvCSpod19zdGF0czsKIAlzdHJ1Y3QgdnhnZV9od192cGF0aF9zdGF0c19od19pbmZvCSpod19zdGF0c19zYXY7CiAJc3RydWN0IHZ4Z2VfaHdfdnBhdGhfc3RhdHNfc3dfaW5mbwkqc3dfc3RhdHM7CisJc3BpbmxvY2tfdCBsb2NrOwogfTsKIAogLyoKQEAgLTY2MSw3ICs3MDAsNyBAQAogICoKICAqIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgdG8gc3RvcmUgdGhlIGNhbGxiYWNrIGluZm9ybWF0aW9uLgogICovCi1zdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZXsKK3N0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkCWl0ZW07CiAJc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aAkqdnBhdGg7CiB9OwpAQCAtNjc0LDkgKzcxMyw2IEBACiAvKioKICAqIHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICAtIEhhbCBkZXZpY2Ugb2JqZWN0CiAgKiBAbWFnaWM6IE1hZ2ljIE51bWJlcgotICogQGRldmljZV9pZDogUENJIERldmljZSBJZCBvZiB0aGUgYWRhcHRlcgotICogQG1ham9yX3JldmlzaW9uOiBQQ0kgRGV2aWNlIG1ham9yIHJldmlzaW9uCi0gKiBAbWlub3JfcmV2aXNpb246IFBDSSBEZXZpY2UgbWlub3IgcmV2aXNpb24KICAqIEBiYXIwOiBCQVIwIHZpcnR1YWwgYWRkcmVzcy4KICAqIEBwZGV2OiBQaHlzaWNhbCBkZXZpY2UgaGFuZGxlCiAgKiBAY29uZmlnOiBDb25mZ3VyYXRpb24gcGFzc2VkIGJ5IHRoZSBMTCBkcml2ZXIgYXQgaW5pdGlhbGl6YXRpb24KQEAgLTY4OCw5ICs3MjQsNiBAQAogCXUzMgkJCQltYWdpYzsKICNkZWZpbmUgVlhHRV9IV19ERVZJQ0VfTUFHSUMJCTB4MTIzNDU2NzgKICNkZWZpbmUgVlhHRV9IV19ERVZJQ0VfREVBRAkJMHhERUFEREVBRAotCXUxNgkJCQlkZXZpY2VfaWQ7Ci0JdTgJCQkJbWFqb3JfcmV2aXNpb247Ci0JdTgJCQkJbWlub3JfcmV2aXNpb247CiAJdm9pZCBfX2lvbWVtCQkJKmJhcjA7CiAJc3RydWN0IHBjaV9kZXYJCQkqcGRldjsKIAlzdHJ1Y3QgbmV0X2RldmljZQkJKm5kZXY7CkBAIC03MzEsNiArNzY0LDcgQEAKIAl1MzIJCQkJZGVidWdfbGV2ZWw7CiAJdTMyCQkJCWxldmVsX2VycjsKIAl1MzIJCQkJbGV2ZWxfdHJhY2U7CisJdTE2IGVwcm9tX3ZlcnNpb25zW1ZYR0VfSFdfTUFYX1JPTV9JTUFHRVNdOwogfTsKIAogI2RlZmluZSBWWEdFX0hXX0lORk9fTEVOCTY0CkBAIC03ODEsOCArODE1LDggQEAKIAl1OAkJc2VyaWFsX251bWJlcltWWEdFX0hXX0lORk9fTEVOXTsKIAl1OAkJcGFydF9udW1iZXJbVlhHRV9IV19JTkZPX0xFTl07CiAJdTgJCXByb2R1Y3RfZGVzY1tWWEdFX0hXX0lORk9fTEVOXTsKLQl1OCAobWFjX2FkZHJzKVtWWEdFX0hXX01BWF9WSVJUVUFMX1BBVEhTXVtFVEhfQUxFTl07Ci0JdTggKG1hY19hZGRyX21hc2tzKVtWWEdFX0hXX01BWF9WSVJUVUFMX1BBVEhTXVtFVEhfQUxFTl07CisJdTggbWFjX2FkZHJzW1ZYR0VfSFdfTUFYX1ZJUlRVQUxfUEFUSFNdW0VUSF9BTEVOXTsKKwl1OCBtYWNfYWRkcl9tYXNrc1tWWEdFX0hXX01BWF9WSVJUVUFMX1BBVEhTXVtFVEhfQUxFTl07CiB9OwogCiAvKioKQEAgLTgyOSwyMCArODYzLDEwIEBACiAJCQkJbG9jLCBcCiAJCQkJb2Zmc2V0LCBcCiAJCQkJJnZhbDY0KTsJCQlcCi0JCQkJCQkJCVwKIAlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCQkJCVwKIAkJcmV0dXJuIHN0YXR1czsJCQkJCQlcCiB9CiAKLSNkZWZpbmUgVlhHRV9IV19WUEFUSF9TVEFUU19QSU9fUkVBRChvZmZzZXQpIHsJCQkJXAotCXN0YXR1cyA9IF9fdnhnZV9od192cGF0aF9zdGF0c19hY2Nlc3ModnBhdGgsIFwKLQkJCVZYR0VfSFdfU1RBVFNfT1BfUkVBRCwgXAotCQkJb2Zmc2V0LCBcCi0JCQkmdmFsNjQpOwkJCQkJXAotCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykJCQkJCVwKLQkJcmV0dXJuIHN0YXR1czsJCQkJCQlcCi19Ci0KIC8qCiAgKiBzdHJ1Y3QgX192eGdlX2h3X3JpbmcgLSBSaW5nIGNoYW5uZWwuCiAgKiBAY2hhbm5lbDogQ2hhbm5lbCAiYmFzZSIgb2YgdGhpcyByaW5nLCB0aGUgY29tbW9uIHBhcnQgb2YgYWxsIEhXCkBAIC0xMTE0LDcgKzExMzgsNyBAQAogICogICAgICAgICAgICAgbG9va3VwIHRvIGRldGVybWluZSB0aGUgdHJhbnNtaXQgcG9ydC4KICAqICAgICAgICAgICAgIDAxOiBTZW5kIG9uIHBoeXNpY2FsIFBvcnQxLgogICogICAgICAgICAgICAgMTA6IFNlbmQgb24gcGh5c2ljYWwgUG9ydDAuCi0JKgkgICAgICAgMTE6IFNlbmQgb24gYm90aCBwb3J0cy4KKyAqCSAgICAgICAxMTogU2VuZCBvbiBib3RoIHBvcnRzLgogICogICAgICAgICAgICAgQml0cyAxOCB0byAyMSAtIFJlc2VydmVkCiAgKiAgICAgICAgICAgICBCaXRzIDIyIHRvIDIzIC0gR2F0aGVyX0NvZGUuIFRoaXMgZmllbGQgaXMgc2V0IGJ5IHRoZSBob3N0IGFuZAogICogICAgICAgICAgICAgaXMgdXNlZCB0byBkZXNjcmliZSBob3cgaW5kaXZpZHVhbCBidWZmZXJzIGNvbXByaXNlIGEgZnJhbWUuCkBAIC0xNDEzLDEyICsxNDM3LDEyIEBACiAgKiBTZWUgYWxzbzogdnhnZV9od192cGF0aF9ydHNfcnRoX3NldCgpLCB2eGdlX2h3X3ZwYXRoX3J0c19ydGhfZ2V0KCkuCiAgKi8KIHN0cnVjdCB2eGdlX2h3X3J0aF9oYXNoX3R5cGVzIHsKLQl1OCBoYXNoX3R5cGVfdGNwaXB2NF9lbjsKLQl1OCBoYXNoX3R5cGVfaXB2NF9lbjsKLQl1OCBoYXNoX3R5cGVfdGNwaXB2Nl9lbjsKLQl1OCBoYXNoX3R5cGVfaXB2Nl9lbjsKLQl1OCBoYXNoX3R5cGVfdGNwaXB2NmV4X2VuOwotCXU4IGhhc2hfdHlwZV9pcHY2ZXhfZW47CisJdTggaGFzaF90eXBlX3RjcGlwdjRfZW46MSwKKwkgICBoYXNoX3R5cGVfaXB2NF9lbjoxLAorCSAgIGhhc2hfdHlwZV90Y3BpcHY2X2VuOjEsCisJICAgaGFzaF90eXBlX2lwdjZfZW46MSwKKwkgICBoYXNoX3R5cGVfdGNwaXB2NmV4X2VuOjEsCisJICAgaGFzaF90eXBlX2lwdjZleF9lbjoxOwogfTsKIAogdm9pZCB2eGdlX2h3X2RldmljZV9kZWJ1Z19zZXQoCkBAIC0xODkzLDYgKzE5MTcsMTUgQEAKIAlyZXR1cm4gdmFkZHI7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCB2eGdlX29zX2RtYV9mcmVlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCB2b2lkICp2YWRkciwKKwkJCXN0cnVjdCBwY2lfZGV2ICoqcF9kbWFfYWNjaCkKK3sKKwl1bnNpZ25lZCBsb25nIG1pc2FsaWduZWQgPSAqKHVuc2lnbmVkIGxvbmcgKilwX2RtYV9hY2NoOworCXU4ICp0bXAgPSAodTggKil2YWRkcjsKKwl0bXAgLT0gbWlzYWxpZ25lZDsKKwlrZnJlZSgodm9pZCAqKXRtcCk7Cit9CisKIC8qCiAgKiBfX3Z4Z2VfaHdfbWVtcG9vbF9pdGVtX3ByaXYgLSB3aWxsIHJldHVybiBwb2ludGVyIG9uIHBlciBpdGVtIHByaXZhdGUgc3BhY2UKICAqLwpAQCAtMTk2Miw3ICsxOTk1LDYgQEAKIHZvaWQKIHZ4Z2VfaHdfdnBhdGhfcnhfZG9vcmJlbGxfaW5pdChzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnApOwogCi0KICNpZm5kZWYgcmVhZHEKIHN0YXRpYyBpbmxpbmUgdTY0IHJlYWRxKHZvaWQgX19pb21lbSAqYWRkcikKIHsKQEAgLTIwMDAsNyArMjAzMiw3IEBACiB2eGdlX2h3X3ZwYXRoX3N0cmlwX2Zjc19jaGVjayhzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYsIHU2NCB2cGF0aF9tYXNrKTsKIAogLyoqCi0gKiB2eGdlX2RlYnVnCisgKiB2eGdlX2RlYnVnX2xsCiAgKiBAbGV2ZWw6IGxldmVsIG9mIGRlYnVnIHZlcmJvc2l0eS4KICAqIEBtYXNrOiBtYXNrIGZvciB0aGUgZGVidWcKICAqIEBidWY6IENpcmN1bGFyIGJ1ZmZlciBmb3IgdHJhY2luZwpAQCAtMjAxMiwyNiArMjA0NCwxMyBAQAogICogbWF5IGJlIGNvbXBpbGVkIG91dCBpZiBERUJVRyBtYWNybyB3YXMgbmV2ZXIgZGVmaW5lZC4KICAqIFNlZSBhbHNvOiBlbnVtIHZ4Z2VfZGVidWdfbGV2ZWx7fS4KICAqLwotCi0jZGVmaW5lIHZ4Z2VfdHJhY2VfYXV4KGxldmVsLCBtYXNrLCBmbXQsIC4uLikgXAote1wKLQkJdnhnZV9vc192YXByaW50ZihsZXZlbCwgbWFzaywgZm10LCBfX1ZBX0FSR1NfXyk7XAotfQotCi0jZGVmaW5lIHZ4Z2VfZGVidWcobW9kdWxlLCBsZXZlbCwgbWFzaywgZm10LCAuLi4pIHsgXAotaWYgKChsZXZlbCA+PSBWWEdFX1RSQUNFICYmICgobW9kdWxlICYgVlhHRV9ERUJVR19UUkFDRV9NQVNLKSA9PSBtb2R1bGUpKSB8fCBcCi0JKGxldmVsID49IFZYR0VfRVJSICYmICgobW9kdWxlICYgVlhHRV9ERUJVR19FUlJfTUFTSykgPT0gbW9kdWxlKSkpIHtcCi0JaWYgKChtYXNrICYgVlhHRV9ERUJVR19NQVNLKSA9PSBtYXNrKVwKLQkJdnhnZV90cmFjZV9hdXgobGV2ZWwsIG1hc2ssIGZtdCwgX19WQV9BUkdTX18pOyBcCi19IFwKLX0KLQogI2lmIChWWEdFX0NPTVBPTkVOVF9MTCAmIFZYR0VfREVCVUdfTU9EVUxFX01BU0spCi0jZGVmaW5lIHZ4Z2VfZGVidWdfbGwobGV2ZWwsIG1hc2ssIGZtdCwgLi4uKSBcCi17XAotCXZ4Z2VfZGVidWcoVlhHRV9DT01QT05FTlRfTEwsIGxldmVsLCBtYXNrLCBmbXQsIF9fVkFfQVJHU19fKTtcCi19Ci0KKyNkZWZpbmUgdnhnZV9kZWJ1Z19sbChsZXZlbCwgbWFzaywgZm10LCAuLi4pIGRvIHsJCQkgICAgICAgXAorCWlmICgobGV2ZWwgPj0gVlhHRV9FUlIgJiYgVlhHRV9DT01QT05FTlRfTEwgJiBWWEdFX0RFQlVHX0VSUl9NQVNLKSB8fCAgXAorCSAgICAobGV2ZWwgPj0gVlhHRV9UUkFDRSAmJiBWWEdFX0NPTVBPTkVOVF9MTCAmIFZYR0VfREVCVUdfVFJBQ0VfTUFTSykpXAorCQlpZiAoKG1hc2sgJiBWWEdFX0RFQlVHX01BU0spID09IG1hc2spCQkJICAgICAgIFwKKwkJCXByaW50ayhmbXQgIlxuIiwgX19WQV9BUkdTX18pOwkJCSAgICAgICBcCit9IHdoaWxlICgwKQogI2Vsc2UKICNkZWZpbmUgdnhnZV9kZWJ1Z19sbChsZXZlbCwgbWFzaywgZm10LCAuLi4pCiAjZW5kaWYKQEAgLTIwNTEsNCArMjA3MCwyNiBAQAogCiBlbnVtIHZ4Z2VfaHdfc3RhdHVzCiBfX3Z4Z2VfaHdfZGV2aWNlX2lzX3ByaXZpbGFnZWQodTMyIGhvc3RfdHlwZSwgdTMyIGZ1bmNfaWQpOworCisjZGVmaW5lIFZYR0VfSFdfTUlOX1NVQ0NFU1NJVkVfSURMRV9DT1VOVCA1CisjZGVmaW5lIFZYR0VfSFdfTUFYX1BPTExJTkdfQ09VTlQgMTAwCisKK3ZvaWQKK3Z4Z2VfaHdfZGV2aWNlX3dhaXRfcmVjZWl2ZV9pZGxlKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldik7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK3Z4Z2VfaHdfdXBncmFkZV9yZWFkX3ZlcnNpb24oc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2LCB1MzIgKm1ham9yLAorCQkJICAgICB1MzIgKm1pbm9yLCB1MzIgKmJ1aWxkKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX2h3X2ZsYXNoX2Z3KHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldik7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK3Z4Z2VfdXBkYXRlX2Z3X2ltYWdlKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldiwgY29uc3QgdTggKmZpbGVidWYsCisJCSAgICAgaW50IHNpemUpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCit2eGdlX2h3X3ZwYXRoX2Vwcm9tX2ltZ192ZXJfZ2V0KHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldiwKKwkJCQlzdHJ1Y3QgZXByb21faW1hZ2UgKmVwcm9tX2ltYWdlX2RhdGEpOworCitpbnQgdnhnZV9od192cGF0aF93YWl0X3JlY2VpdmVfaWRsZShzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYsIHUzMiB2cF9pZCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1ldGh0b29sLmMgYi9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtZXRodG9vbC5jCmluZGV4IGI2Nzc0NmUuLjFkZDNhMjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvdnhnZS92eGdlLWV0aHRvb2wuYwpAQCAtMTEsNyArMTEsNyBAQAogICogICAgICAgICAgICAgICAgIFZpcnR1YWxpemVkIFNlcnZlciBBZGFwdGVyLgogICogQ29weXJpZ2h0KGMpIDIwMDItMjAxMCBFeGFyIENvcnAuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2luY2x1ZGU8bGludXgvZXRodG9vbC5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KQEAgLTI5LDcgKzI5LDYgQEAKICAqIFJldHVybiB2YWx1ZToKICAqIDAgb24gc3VjY2Vzcy4KICAqLwotCiBzdGF0aWMgaW50IHZ4Z2VfZXRodG9vbF9zc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqaW5mbykKIHsKIAkvKiBXZSBjdXJyZW50bHkgb25seSBzdXBwb3J0IDEwR2IvRlVMTCAqLwpAQCAtNzksMTAgKzc4LDkgQEAKICAqIFJldHVybnMgZHJpdmVyIHNwZWNlZmljIGluZm9ybWF0aW9uIGxpa2UgbmFtZSwgdmVyc2lvbiBldGMuLiB0byBldGh0b29sLgogICovCiBzdGF0aWMgdm9pZCB2eGdlX2V0aHRvb2xfZ2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCXN0cnVjdCBldGh0b29sX2RydmluZm8gKmluZm8pCisJCQkJICBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICppbmZvKQogewotCXN0cnVjdCB2eGdlZGV2ICp2ZGV2OwotCXZkZXYgPSAoc3RydWN0IHZ4Z2VkZXYgKiluZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCB2eGdlZGV2ICp2ZGV2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJsY3B5KGluZm8tPmRyaXZlciwgVlhHRV9EUklWRVJfTkFNRSwgc2l6ZW9mKFZYR0VfRFJJVkVSX05BTUUpKTsKIAlzdHJsY3B5KGluZm8tPnZlcnNpb24sIERSVl9WRVJTSU9OLCBzaXplb2YoRFJWX1ZFUlNJT04pKTsKIAlzdHJsY3B5KGluZm8tPmZ3X3ZlcnNpb24sIHZkZXYtPmZ3X3ZlcnNpb24sIFZYR0VfSFdfRldfU1RSTEVOKTsKQEAgLTEwNCwxNSArMTAyLDE0IEBACiAgKiBidWZmZXIgYXJlYS4KICAqLwogc3RhdGljIHZvaWQgdnhnZV9ldGh0b29sX2dyZWdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQlzdHJ1Y3QgZXRodG9vbF9yZWdzICpyZWdzLCB2b2lkICpzcGFjZSkKKwkJCSAgICAgICBzdHJ1Y3QgZXRodG9vbF9yZWdzICpyZWdzLCB2b2lkICpzcGFjZSkKIHsKIAlpbnQgaW5kZXgsIG9mZnNldDsKIAllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1czsKIAl1NjQgcmVnOwotCXU2NCAqcmVnX3NwYWNlID0gKHU2NCAqKSBzcGFjZTsKLQlzdHJ1Y3QgdnhnZWRldiAqdmRldiA9IChzdHJ1Y3QgdnhnZWRldiAqKW5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IF9fdnhnZV9od19kZXZpY2UgICpobGRldiA9IChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqKQotCQkJCQlwY2lfZ2V0X2RydmRhdGEodmRldi0+cGRldik7CisJdTY0ICpyZWdfc3BhY2UgPSAodTY0ICopc3BhY2U7CisJc3RydWN0IHZ4Z2VkZXYgKnZkZXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldiA9IHZkZXYtPmRldmg7CiAKIAlyZWdzLT5sZW4gPSBzaXplb2Yoc3RydWN0IHZ4Z2VfaHdfdnBhdGhfcmVnKSAqIHZkZXYtPm5vX29mX3ZwYXRoOwogCXJlZ3MtPnZlcnNpb24gPSB2ZGV2LT5wZGV2LT5zdWJzeXN0ZW1fZGV2aWNlOwpAQCAtMTQ3LDkgKzE0NCw4IEBACiAgKi8KIHN0YXRpYyBpbnQgdnhnZV9ldGh0b29sX2lkbmljKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQogewotCXN0cnVjdCB2eGdlZGV2ICp2ZGV2ID0gKHN0cnVjdCB2eGdlZGV2ICopbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAgKmhsZGV2ID0gKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICAqKQotCQkJcGNpX2dldF9kcnZkYXRhKHZkZXYtPnBkZXYpOworCXN0cnVjdCB2eGdlZGV2ICp2ZGV2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYgPSB2ZGV2LT5kZXZoOwogCiAJdnhnZV9od19kZXZpY2VfZmxpY2tfbGlua19sZWQoaGxkZXYsIFZYR0VfRkxJQ0tFUl9PTik7CiAJbXNsZWVwX2ludGVycnVwdGlibGUoZGF0YSA/IChkYXRhICogSFopIDogVlhHRV9NQVhfRkxJQ0tFUl9USU1FKTsKQEAgLTE2OCwxMSArMTY0LDEwIEBACiAgKiAgdm9pZAogICovCiBzdGF0aWMgdm9pZCB2eGdlX2V0aHRvb2xfZ2V0cGF1c2VfZGF0YShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCQlzdHJ1Y3QgZXRodG9vbF9wYXVzZXBhcmFtICplcCkKKwkJCQkgICAgICAgc3RydWN0IGV0aHRvb2xfcGF1c2VwYXJhbSAqZXApCiB7Ci0Jc3RydWN0IHZ4Z2VkZXYgKnZkZXYgPSAoc3RydWN0IHZ4Z2VkZXYgKiluZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICAqaGxkZXYgPSAoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgICopCi0JCQlwY2lfZ2V0X2RydmRhdGEodmRldi0+cGRldik7CisJc3RydWN0IHZ4Z2VkZXYgKnZkZXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldiA9IHZkZXYtPmRldmg7CiAKIAl2eGdlX2h3X2RldmljZV9nZXRwYXVzZV9kYXRhKGhsZGV2LCAwLCAmZXAtPnR4X3BhdXNlLCAmZXAtPnJ4X3BhdXNlKTsKIH0KQEAgLTE4OCwxMSArMTgzLDEwIEBACiAgKiBpbnQsIHJldHVybnMgMCBvbiBTdWNjZXNzCiAgKi8KIHN0YXRpYyBpbnQgdnhnZV9ldGh0b29sX3NldHBhdXNlX2RhdGEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkJc3RydWN0IGV0aHRvb2xfcGF1c2VwYXJhbSAqZXApCisJCQkJICAgICAgc3RydWN0IGV0aHRvb2xfcGF1c2VwYXJhbSAqZXApCiB7Ci0Jc3RydWN0IHZ4Z2VkZXYgKnZkZXYgPSAoc3RydWN0IHZ4Z2VkZXYgKiluZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICAqaGxkZXYgPSAoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgICopCi0JCQlwY2lfZ2V0X2RydmRhdGEodmRldi0+cGRldik7CisJc3RydWN0IHZ4Z2VkZXYgKnZkZXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldiA9IHZkZXYtPmRldmg7CiAKIAl2eGdlX2h3X2RldmljZV9zZXRwYXVzZV9kYXRhKGhsZGV2LCAwLCBlcC0+dHhfcGF1c2UsIGVwLT5yeF9wYXVzZSk7CiAKQEAgLTIwOSw5ICsyMDMsOCBAQAogCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzOwogCWVudW0gdnhnZV9od19zdGF0dXMgc3dzdGF0dXM7CiAJc3RydWN0IHZ4Z2VfdnBhdGggKnZwYXRoID0gTlVMTDsKLQotCXN0cnVjdCB2eGdlZGV2ICp2ZGV2ID0gKHN0cnVjdCB2eGdlZGV2ICopbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAgKmhsZGV2ID0gdmRldi0+ZGV2aDsKKwlzdHJ1Y3QgdnhnZWRldiAqdmRldiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2ID0gdmRldi0+ZGV2aDsKIAlzdHJ1Y3QgdnhnZV9od194bWFjX3N0YXRzICp4bWFjX3N0YXRzOwogCXN0cnVjdCB2eGdlX2h3X2RldmljZV9zdGF0c19zd19pbmZvICpzd19zdGF0czsKIAlzdHJ1Y3QgdnhnZV9od19kZXZpY2Vfc3RhdHNfaHdfaW5mbyAqaHdfc3RhdHM7CkBAIC01NzQsMTIgKzU2NywxMiBAQAogCWtmcmVlKGh3X3N0YXRzKTsKIH0KIAotc3RhdGljIHZvaWQgdnhnZV9ldGh0b29sX2dldF9zdHJpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkgICAgICB1MzIgc3RyaW5nc2V0LCB1OCAqZGF0YSkKK3N0YXRpYyB2b2lkIHZ4Z2VfZXRodG9vbF9nZXRfc3RyaW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgc3RyaW5nc2V0LAorCQkJCSAgICAgdTggKmRhdGEpCiB7CiAJaW50IHN0YXRfc2l6ZSA9IDA7CiAJaW50IGksIGo7Ci0Jc3RydWN0IHZ4Z2VkZXYgKnZkZXYgPSAoc3RydWN0IHZ4Z2VkZXYgKiluZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCB2eGdlZGV2ICp2ZGV2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzd2l0Y2ggKHN0cmluZ3NldCkgewogCWNhc2UgRVRIX1NTX1NUQVRTOgogCQl2eGdlX2FkZF9zdHJpbmcoIlZQQVRIIFNUQVRJU1RJQ1Mlc1x0XHRcdCIsCkBAIC0xMDY2LDIxICsxMDU5LDIxIEBACiAKIHN0YXRpYyBpbnQgdnhnZV9ldGh0b29sX2dldF9yZWdzX2xlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCB2eGdlZGV2ICp2ZGV2ID0gKHN0cnVjdCB2eGdlZGV2ICopbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgdnhnZWRldiAqdmRldiA9IG5ldGRldl9wcml2KGRldik7CiAKIAlyZXR1cm4gc2l6ZW9mKHN0cnVjdCB2eGdlX2h3X3ZwYXRoX3JlZykgKiB2ZGV2LT5ub19vZl92cGF0aDsKIH0KIAogc3RhdGljIHUzMiB2eGdlX2dldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHZ4Z2VkZXYgKnZkZXYgPSAoc3RydWN0IHZ4Z2VkZXYgKiluZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCB2eGdlZGV2ICp2ZGV2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCXJldHVybiB2ZGV2LT5yeF9jc3VtOwogfQogCiBzdGF0aWMgaW50IHZ4Z2Vfc2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCiB7Ci0Jc3RydWN0IHZ4Z2VkZXYgKnZkZXYgPSAoc3RydWN0IHZ4Z2VkZXYgKiluZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCB2eGdlZGV2ICp2ZGV2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCWlmIChkYXRhKQogCQl2ZGV2LT5yeF9jc3VtID0gMTsKQEAgLTExMDIsNyArMTA5NSw3IEBACiAKIHN0YXRpYyBpbnQgdnhnZV9ldGh0b29sX2dldF9zc2V0X2NvdW50KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBzc2V0KQogewotCXN0cnVjdCB2eGdlZGV2ICp2ZGV2ID0gKHN0cnVjdCB2eGdlZGV2ICopbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgdnhnZWRldiAqdmRldiA9IG5ldGRldl9wcml2KGRldik7CiAKIAlzd2l0Y2ggKHNzZXQpIHsKIAljYXNlIEVUSF9TU19TVEFUUzoKQEAgLTExMTksNiArMTExMiw1OSBAQAogCX0KIH0KIAorc3RhdGljIGludCB2eGdlX3NldF9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKK3sKKwlzdHJ1Y3QgdnhnZWRldiAqdmRldiA9IG5ldGRldl9wcml2KGRldik7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXM7CisKKwlpZiAoZGF0YSAmIH5FVEhfRkxBR19SWEhBU0gpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWlmICghIShkYXRhICYgRVRIX0ZMQUdfUlhIQVNIKSA9PSB2ZGV2LT5kZXZoLT5jb25maWcucnRoX2VuKQorCQlyZXR1cm4gMDsKKworCWlmIChuZXRpZl9ydW5uaW5nKGRldikgfHwgKHZkZXYtPmNvbmZpZy5ydGhfc3RlZXJpbmcgPT0gTk9fU1RFRVJJTkcpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXZkZXYtPmRldmgtPmNvbmZpZy5ydGhfZW4gPSAhIShkYXRhICYgRVRIX0ZMQUdfUlhIQVNIKTsKKworCS8qIEVuYWJsaW5nIFJUSCByZXF1aXJlcyBzb21lIG9mIHRoZSBsb2dpYyBpbiB2eGdlX2RldmljZV9yZWdpc3RlciBhbmQgYQorCSAqIHZwYXRoIHJlc2V0LiAgRHVlIHRvIHRoZXNlIHJlc3RyaWN0aW9ucywgb25seSBhbGxvdyBtb2RpZmljYXRpb24KKwkgKiB3aGlsZSB0aGUgaW50ZXJmYWNlIGlzIGRvd24uCisJICovCisJc3RhdHVzID0gdnhnZV9yZXNldF9hbGxfdnBhdGhzKHZkZXYpOworCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykgeworCQl2ZGV2LT5kZXZoLT5jb25maWcucnRoX2VuID0gIXZkZXYtPmRldmgtPmNvbmZpZy5ydGhfZW47CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCWlmICh2ZGV2LT5kZXZoLT5jb25maWcucnRoX2VuKQorCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfUlhIQVNIOworCWVsc2UKKwkJZGV2LT5mZWF0dXJlcyAmPSB+TkVUSUZfRl9SWEhBU0g7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2eGdlX2Z3X2ZsYXNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2ZsYXNoICpwYXJtcykKK3sKKwlzdHJ1Y3QgdnhnZWRldiAqdmRldiA9IG5ldGRldl9wcml2KGRldik7CisKKwlpZiAodmRldi0+bWF4X3ZwYXRoX3N1cHBvcnRlZCAhPSBWWEdFX0hXX01BWF9WSVJUVUFMX1BBVEhTKSB7CisJCXByaW50ayhLRVJOX0lORk8gIlNpbmdsZSBGdW5jdGlvbiBNb2RlIGlzIHJlcXVpcmVkIHRvIGZsYXNoIHRoZSIKKwkJICAgICAgICIgZmlybXdhcmVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CisJCXByaW50ayhLRVJOX0lORk8gIkludGVyZmFjZSAlcyBtdXN0IGJlIGRvd24gdG8gZmxhc2ggdGhlICIKKwkJICAgICAgICJmaXJtd2FyZVxuIiwgZGV2LT5uYW1lKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlyZXR1cm4gdnhnZV9md191cGdyYWRlKHZkZXYsIHBhcm1zLT5kYXRhLCAxKTsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyB2eGdlX2V0aHRvb2xfb3BzID0gewogCS5nZXRfc2V0dGluZ3MJCT0gdnhnZV9ldGh0b29sX2dzZXQsCiAJLnNldF9zZXR0aW5ncwkJPSB2eGdlX2V0aHRvb2xfc3NldCwKQEAgLTExMzEsNyArMTE3Nyw3IEBACiAJLmdldF9yeF9jc3VtCQk9IHZ4Z2VfZ2V0X3J4X2NzdW0sCiAJLnNldF9yeF9jc3VtCQk9IHZ4Z2Vfc2V0X3J4X2NzdW0sCiAJLmdldF90eF9jc3VtCQk9IGV0aHRvb2xfb3BfZ2V0X3R4X2NzdW0sCi0JLnNldF90eF9jc3VtCQk9IGV0aHRvb2xfb3Bfc2V0X3R4X2h3X2NzdW0sCisJLnNldF90eF9jc3VtCQk9IGV0aHRvb2xfb3Bfc2V0X3R4X2lwdjZfY3N1bSwKIAkuZ2V0X3NnCQkJPSBldGh0b29sX29wX2dldF9zZywKIAkuc2V0X3NnCQkJPSBldGh0b29sX29wX3NldF9zZywKIAkuZ2V0X3RzbwkJPSBldGh0b29sX29wX2dldF90c28sCkBAIC0xMTQwLDYgKzExODYsOCBAQAogCS5waHlzX2lkCQk9IHZ4Z2VfZXRodG9vbF9pZG5pYywKIAkuZ2V0X3NzZXRfY291bnQJCT0gdnhnZV9ldGh0b29sX2dldF9zc2V0X2NvdW50LAogCS5nZXRfZXRodG9vbF9zdGF0cwk9IHZ4Z2VfZ2V0X2V0aHRvb2xfc3RhdHMsCisJLnNldF9mbGFncwkJPSB2eGdlX3NldF9mbGFncywKKwkuZmxhc2hfZGV2aWNlCQk9IHZ4Z2VfZndfZmxhc2gsCiB9OwogCiB2b2lkIHZ4Z2VfaW5pdGlhbGl6ZV9ldGh0b29sX29wcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1tYWluLmMgYi9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtbWFpbi5jCmluZGV4IDgxMzgyOWYuLjFhYzliNTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvdnhnZS92eGdlLW1haW4uYwpAQCAtNTAsNiArNTAsOCBAQAogI2luY2x1ZGUgPG5ldC9pcC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRfdHN0YW1wLmg+CiAjaW5jbHVkZSAidnhnZS1tYWluLmgiCiAjaW5jbHVkZSAidnhnZS1yZWcuaCIKIApAQCAtODIsMTYgKzg0LDYgQEAKIAogc3RhdGljIHN0cnVjdCB2eGdlX2Rydl9jb25maWcgKmRyaXZlcl9jb25maWc7CiAKLXN0YXRpYyBlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfYWRkX21hY19hZGRyKHN0cnVjdCB2eGdlZGV2ICp2ZGV2LAotCQkJCQkgICAgIHN0cnVjdCBtYWNJbmZvICptYWMpOwotc3RhdGljIGVudW0gdnhnZV9od19zdGF0dXMgdnhnZV9kZWxfbWFjX2FkZHIoc3RydWN0IHZ4Z2VkZXYgKnZkZXYsCi0JCQkJCSAgICAgc3RydWN0IG1hY0luZm8gKm1hYyk7Ci1zdGF0aWMgaW50IHZ4Z2VfbWFjX2xpc3RfYWRkKHN0cnVjdCB2eGdlX3ZwYXRoICp2cGF0aCwgc3RydWN0IG1hY0luZm8gKm1hYyk7Ci1zdGF0aWMgaW50IHZ4Z2VfbWFjX2xpc3RfZGVsKHN0cnVjdCB2eGdlX3ZwYXRoICp2cGF0aCwgc3RydWN0IG1hY0luZm8gKm1hYyk7Ci1zdGF0aWMgZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX3Jlc3RvcmVfdnBhdGhfdmlkX3RhYmxlKHN0cnVjdCB2eGdlX3ZwYXRoICp2cGF0aCk7Ci1zdGF0aWMgZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX3Jlc3RvcmVfdnBhdGhfbWFjX2FkZHIoc3RydWN0IHZ4Z2VfdnBhdGggKnZwYXRoKTsKLXN0YXRpYyBlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfcmVzZXRfYWxsX3ZwYXRocyhzdHJ1Y3QgdnhnZWRldiAqdmRldik7Ci0KIHN0YXRpYyBpbmxpbmUgaW50IGlzX3Z4Z2VfY2FyZF91cChzdHJ1Y3QgdnhnZWRldiAqdmRldikKIHsKIAlyZXR1cm4gdGVzdF9iaXQoX19WWEdFX1NUQVRFX0NBUkRfVVAsICZ2ZGV2LT5zdGF0ZSk7CkBAIC0xNDgsMTEgKzE0MCwxMCBAQAogICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZHVyaW5nIGludGVycnVwdCBjb250ZXh0IHRvIG5vdGlmeSBsaW5rIHVwIHN0YXRlCiAgKiBjaGFuZ2UuCiAgKi8KLXN0YXRpYyB2b2lkCi12eGdlX2NhbGxiYWNrX2xpbmtfdXAoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2KQorc3RhdGljIHZvaWQgdnhnZV9jYWxsYmFja19saW5rX3VwKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaGxkZXYtPm5kZXY7Ci0Jc3RydWN0IHZ4Z2VkZXYgKnZkZXYgPSAoc3RydWN0IHZ4Z2VkZXYgKiluZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCB2eGdlZGV2ICp2ZGV2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCXZ4Z2VfZGVidWdfZW50cnlleGl0KFZYR0VfVFJBQ0UsICIlczogJXM6JWQiLAogCQl2ZGV2LT5uZGV2LT5uYW1lLCBfX2Z1bmNfXywgX19MSU5FX18pOwpAQCAtMTcyLDExICsxNjMsMTAgQEAKICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGR1cmluZyBpbnRlcnJ1cHQgY29udGV4dCB0byBub3RpZnkgbGluayBkb3duIHN0YXRlCiAgKiBjaGFuZ2UuCiAgKi8KLXN0YXRpYyB2b2lkCi12eGdlX2NhbGxiYWNrX2xpbmtfZG93bihzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYpCitzdGF0aWMgdm9pZCB2eGdlX2NhbGxiYWNrX2xpbmtfZG93bihzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGhsZGV2LT5uZGV2OwotCXN0cnVjdCB2eGdlZGV2ICp2ZGV2ID0gKHN0cnVjdCB2eGdlZGV2ICopbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgdnhnZWRldiAqdmRldiA9IG5ldGRldl9wcml2KGRldik7CiAKIAl2eGdlX2RlYnVnX2VudHJ5ZXhpdChWWEdFX1RSQUNFLAogCQkiJXM6ICVzOiVkIiwgdmRldi0+bmRldi0+bmFtZSwgX19mdW5jX18sIF9fTElORV9fKTsKQEAgLTE5NSw3ICsxODUsNyBAQAogICoKICAqIEFsbG9jYXRlIFNLQi4KICAqLwotc3RhdGljIHN0cnVjdCBza19idWZmKgorc3RhdGljIHN0cnVjdCBza19idWZmICoKIHZ4Z2VfcnhfYWxsb2Modm9pZCAqZHRyaCwgc3RydWN0IHZ4Z2VfcmluZyAqcmluZywgY29uc3QgaW50IHNrYl9zaXplKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICAgICpkZXY7CkBAIC0zNjksNyArMzU5LDcgQEAKIAkJIHU4IHRfY29kZSwgdm9pZCAqdXNlcmRhdGEpCiB7CiAJc3RydWN0IHZ4Z2VfcmluZyAqcmluZyA9IChzdHJ1Y3QgdnhnZV9yaW5nICopdXNlcmRhdGE7Ci0Jc3RydWN0ICBuZXRfZGV2aWNlICpkZXYgPSByaW5nLT5uZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSByaW5nLT5uZGV2OwogCXVuc2lnbmVkIGludCBkbWFfc2l6ZXM7CiAJdm9pZCAqZmlyc3RfZHRyID0gTlVMTDsKIAlpbnQgZHRyX2NudCA9IDA7CkBAIC00MTMsNyArNDAzLDYgQEAKIAogCQlwcmVmZXRjaCgoY2hhciAqKXNrYiArIEwxX0NBQ0hFX0JZVEVTKTsKIAkJaWYgKHVubGlrZWx5KHRfY29kZSkpIHsKLQogCQkJaWYgKHZ4Z2VfaHdfcmluZ19oYW5kbGVfdGNvZGUocmluZ2gsIGR0ciwgdF9jb2RlKSAhPQogCQkJCVZYR0VfSFdfT0spIHsKIApAQCAtNDM2LDkgKzQyNSw3IEBACiAJCX0KIAogCQlpZiAocGt0X2xlbmd0aCA+IFZYR0VfTExfUlhfQ09QWV9USFJFU0hPTEQpIHsKLQogCQkJaWYgKHZ4Z2VfcnhfYWxsb2MoZHRyLCByaW5nLCBkYXRhX3NpemUpICE9IE5VTEwpIHsKLQogCQkJCWlmICghdnhnZV9yeF9tYXAoZHRyLCByaW5nKSkgewogCQkJCQlza2JfcHV0KHNrYiwgcGt0X2xlbmd0aCk7CiAKQEAgLTUxMyw2ICs1MDAsMjMgQEAKIAkJZWxzZQogCQkJc2tiX2NoZWNrc3VtX25vbmVfYXNzZXJ0KHNrYik7CiAKKworCQlpZiAocmluZy0+cnhfaHd0cykgeworCQkJc3RydWN0IHNrYl9zaGFyZWRfaHd0c3RhbXBzICpza2JfaHd0czsKKwkJCXUzMiBucyA9ICoodTMyICopKHNrYi0+aGVhZCArIHBrdF9sZW5ndGgpOworCisJCQlza2JfaHd0cyA9IHNrYl9od3RzdGFtcHMoc2tiKTsKKwkJCXNrYl9od3RzLT5od3RzdGFtcCA9IG5zX3RvX2t0aW1lKG5zKTsKKwkJCXNrYl9od3RzLT5zeXN0c3RhbXAudHY2NCA9IDA7CisJCX0KKworCQkvKiBydGhfaGFzaF90eXBlIGFuZCBydGhfaXRfaGl0IGFyZSBub24temVybyByZWdhcmRsZXNzIG9mCisJCSAqIHdoZXRoZXIgcnNzIGlzIGVuYWJsZWQuICBPbmx5IHRoZSBydGhfdmFsdWUgaXMgemVyby9ub24temVybworCQkgKiBpZiByc3MgaXMgZGlzYWJsZWQvZW5hYmxlZCwgc28ga2V5IG9mZiBvZiB0aGF0LgorCQkgKi8KKwkJaWYgKGV4dF9pbmZvLnJ0aF92YWx1ZSkKKwkJCXNrYi0+cnhoYXNoID0gZXh0X2luZm8ucnRoX3ZhbHVlOworCiAJCXZ4Z2VfcnhfY29tcGxldGUocmluZywgc2tiLCBleHRfaW5mby52bGFuLAogCQkJcGt0X2xlbmd0aCwgJmV4dF9pbmZvKTsKIApAQCAtNjYwLDYgKzY2NCw2NSBAQAogCXJldHVybiBGQUxTRTsKIH0KIAorc3RhdGljIGludCB2eGdlX21hY19saXN0X2FkZChzdHJ1Y3QgdnhnZV92cGF0aCAqdnBhdGgsIHN0cnVjdCBtYWNJbmZvICptYWMpCit7CisJc3RydWN0IHZ4Z2VfbWFjX2FkZHJzICpuZXdfbWFjX2VudHJ5OworCXU4ICptYWNfYWRkcmVzcyA9IE5VTEw7CisKKwlpZiAodnBhdGgtPm1hY19hZGRyX2NudCA+PSBWWEdFX01BWF9MRUFSTl9NQUNfQUREUl9DTlQpCisJCXJldHVybiBUUlVFOworCisJbmV3X21hY19lbnRyeSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB2eGdlX21hY19hZGRycyksIEdGUF9BVE9NSUMpOworCWlmICghbmV3X21hY19lbnRyeSkgeworCQl2eGdlX2RlYnVnX21lbShWWEdFX0VSUiwKKwkJCSIlczogbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkIiwKKwkJCVZYR0VfRFJJVkVSX05BTUUpOworCQlyZXR1cm4gRkFMU0U7CisJfQorCisJbGlzdF9hZGQoJm5ld19tYWNfZW50cnktPml0ZW0sICZ2cGF0aC0+bWFjX2FkZHJfbGlzdCk7CisKKwkvKiBDb3B5IHRoZSBuZXcgbWFjIGFkZHJlc3MgdG8gdGhlIGxpc3QgKi8KKwltYWNfYWRkcmVzcyA9ICh1OCAqKSZuZXdfbWFjX2VudHJ5LT5tYWNhZGRyOworCW1lbWNweShtYWNfYWRkcmVzcywgbWFjLT5tYWNhZGRyLCBFVEhfQUxFTik7CisKKwluZXdfbWFjX2VudHJ5LT5zdGF0ZSA9IG1hYy0+c3RhdGU7CisJdnBhdGgtPm1hY19hZGRyX2NudCsrOworCisJLyogSXMgdGhpcyBhIG11bHRpY2FzdCBhZGRyZXNzICovCisJaWYgKDB4MDEgJiBtYWMtPm1hY2FkZHJbMF0pCisJCXZwYXRoLT5tY2FzdF9hZGRyX2NudCsrOworCisJcmV0dXJuIFRSVUU7Cit9CisKKy8qIEFkZCBhIG1hYyBhZGRyZXNzIHRvIERBIHRhYmxlICovCitzdGF0aWMgZW51bSB2eGdlX2h3X3N0YXR1cwordnhnZV9hZGRfbWFjX2FkZHIoc3RydWN0IHZ4Z2VkZXYgKnZkZXYsIHN0cnVjdCBtYWNJbmZvICptYWMpCit7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCXN0cnVjdCB2eGdlX3ZwYXRoICp2cGF0aDsKKwllbnVtIHZ4Z2VfaHdfdnBhdGhfbWFjX2FkZHJfYWRkX21vZGUgZHVwbGljYXRlX21vZGU7CisKKwlpZiAoMHgwMSAmIG1hYy0+bWFjYWRkclswXSkgLyogbXVsdGljYXN0IGFkZHJlc3MgKi8KKwkJZHVwbGljYXRlX21vZGUgPSBWWEdFX0hXX1ZQQVRIX01BQ19BRERSX0FERF9EVVBMSUNBVEU7CisJZWxzZQorCQlkdXBsaWNhdGVfbW9kZSA9IFZYR0VfSFdfVlBBVEhfTUFDX0FERFJfUkVQTEFDRV9EVVBMSUNBVEU7CisKKwl2cGF0aCA9ICZ2ZGV2LT52cGF0aHNbbWFjLT52cGF0aF9ub107CisJc3RhdHVzID0gdnhnZV9od192cGF0aF9tYWNfYWRkcl9hZGQodnBhdGgtPmhhbmRsZSwgbWFjLT5tYWNhZGRyLAorCQkJCQkJbWFjLT5tYWNtYXNrLCBkdXBsaWNhdGVfbW9kZSk7CisJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKSB7CisJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJCSJEQSBjb25maWcgYWRkIGVudHJ5IGZhaWxlZCBmb3IgdnBhdGg6JWQiLAorCQkJdnBhdGgtPmRldmljZV9pZCk7CisJfSBlbHNlCisJCWlmIChGQUxTRSA9PSB2eGdlX21hY19saXN0X2FkZCh2cGF0aCwgbWFjKSkKKwkJCXN0YXR1cyA9IC1FUEVSTTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKIHN0YXRpYyBpbnQgdnhnZV9sZWFybl9tYWMoc3RydWN0IHZ4Z2VkZXYgKnZkZXYsIHU4ICptYWNfaGVhZGVyKQogewogCXN0cnVjdCBtYWNJbmZvIG1hY19pbmZvOwpAQCAtNjcwLDcgKzczMyw3IEBACiAJc3RydWN0IHZ4Z2VfdnBhdGggKnZwYXRoID0gTlVMTDsKIAlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXY7CiAKLQlobGRldiA9IChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqKSBwY2lfZ2V0X2RydmRhdGEodmRldi0+cGRldik7CisJaGxkZXYgPSBwY2lfZ2V0X2RydmRhdGEodmRldi0+cGRldik7CiAKIAltYWNfYWRkcmVzcyA9ICh1OCAqKSZtYWNfYWRkcjsKIAltZW1jcHkobWFjX2FkZHJlc3MsIG1hY19oZWFkZXIsIEVUSF9BTEVOKTsKQEAgLTc2OSw3ICs4MzIsNyBAQAogCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KIAotCXZkZXYgPSAoc3RydWN0IHZ4Z2VkZXYgKiluZXRkZXZfcHJpdihkZXYpOworCXZkZXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJaWYgKHVubGlrZWx5KCFpc192eGdlX2NhcmRfdXAodmRldikpKSB7CiAJCXZ4Z2VfZGVidWdfdHgoVlhHRV9FUlIsCkBAIC0xMDA1LDYgKzEwNjgsNTAgQEAKIAkJIiVzOiVkICBFeGl0aW5nLi4uIiwgX19mdW5jX18sIF9fTElORV9fKTsKIH0KIAorc3RhdGljIGludCB2eGdlX21hY19saXN0X2RlbChzdHJ1Y3QgdnhnZV92cGF0aCAqdnBhdGgsIHN0cnVjdCBtYWNJbmZvICptYWMpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqZW50cnksICpuZXh0OworCXU2NCBkZWxfbWFjID0gMDsKKwl1OCAqbWFjX2FkZHJlc3MgPSAodTggKikgKCZkZWxfbWFjKTsKKworCS8qIENvcHkgdGhlIG1hYyBhZGRyZXNzIHRvIGRlbGV0ZSBmcm9tIHRoZSBsaXN0ICovCisJbWVtY3B5KG1hY19hZGRyZXNzLCBtYWMtPm1hY2FkZHIsIEVUSF9BTEVOKTsKKworCWxpc3RfZm9yX2VhY2hfc2FmZShlbnRyeSwgbmV4dCwgJnZwYXRoLT5tYWNfYWRkcl9saXN0KSB7CisJCWlmICgoKHN0cnVjdCB2eGdlX21hY19hZGRycyAqKWVudHJ5KS0+bWFjYWRkciA9PSBkZWxfbWFjKSB7CisJCQlsaXN0X2RlbChlbnRyeSk7CisJCQlrZnJlZSgoc3RydWN0IHZ4Z2VfbWFjX2FkZHJzICopZW50cnkpOworCQkJdnBhdGgtPm1hY19hZGRyX2NudC0tOworCisJCQkvKiBJcyB0aGlzIGEgbXVsdGljYXN0IGFkZHJlc3MgKi8KKwkJCWlmICgweDAxICYgbWFjLT5tYWNhZGRyWzBdKQorCQkJCXZwYXRoLT5tY2FzdF9hZGRyX2NudC0tOworCQkJcmV0dXJuIFRSVUU7CisJCX0KKwl9CisKKwlyZXR1cm4gRkFMU0U7Cit9CisKKy8qIGRlbGV0ZSBhIG1hYyBhZGRyZXNzIGZyb20gREEgdGFibGUgKi8KK3N0YXRpYyBlbnVtIHZ4Z2VfaHdfc3RhdHVzCit2eGdlX2RlbF9tYWNfYWRkcihzdHJ1Y3QgdnhnZWRldiAqdmRldiwgc3RydWN0IG1hY0luZm8gKm1hYykKK3sKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisJc3RydWN0IHZ4Z2VfdnBhdGggKnZwYXRoOworCisJdnBhdGggPSAmdmRldi0+dnBhdGhzW21hYy0+dnBhdGhfbm9dOworCXN0YXR1cyA9IHZ4Z2VfaHdfdnBhdGhfbWFjX2FkZHJfZGVsZXRlKHZwYXRoLT5oYW5kbGUsIG1hYy0+bWFjYWRkciwKKwkJCQkJCW1hYy0+bWFjbWFzayk7CisJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKSB7CisJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJCSJEQSBjb25maWcgZGVsZXRlIGVudHJ5IGZhaWxlZCBmb3IgdnBhdGg6JWQiLAorCQkJdnBhdGgtPmRldmljZV9pZCk7CisJfSBlbHNlCisJCXZ4Z2VfbWFjX2xpc3RfZGVsKHZwYXRoLCBtYWMpOworCXJldHVybiBzdGF0dXM7Cit9CisKIC8qKgogICogdnhnZV9zZXRfbXVsdGljYXN0CiAgKiBAZGV2OiBwb2ludGVyIHRvIHRoZSBkZXZpY2Ugc3RydWN0dXJlCkBAIC0xMDM0LDcgKzExNDEsNyBAQAogCXZ4Z2VfZGVidWdfZW50cnlleGl0KFZYR0VfVFJBQ0UsCiAJCSIlczolZCIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CiAKLQl2ZGV2ID0gKHN0cnVjdCB2eGdlZGV2ICopbmV0ZGV2X3ByaXYoZGV2KTsKKwl2ZGV2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlobGRldiA9IChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAgKil2ZGV2LT5kZXZoOwogCiAJaWYgKHVubGlrZWx5KCFpc192eGdlX2NhcmRfdXAodmRldikpKQpAQCAtMTA5NCw3ICsxMjAxLDcgQEAKIAkJLyogRGVsZXRlIHByZXZpb3VzIE1DJ3MgKi8KIAkJZm9yIChpID0gMDsgaSA8IG1jYXN0X2NudDsgaSsrKSB7CiAJCQlsaXN0X2Zvcl9lYWNoX3NhZmUoZW50cnksIG5leHQsIGxpc3RfaGVhZCkgewotCQkJCW1hY19lbnRyeSA9IChzdHJ1Y3QgdnhnZV9tYWNfYWRkcnMgKikgZW50cnk7CisJCQkJbWFjX2VudHJ5ID0gKHN0cnVjdCB2eGdlX21hY19hZGRycyAqKWVudHJ5OwogCQkJCS8qIENvcHkgdGhlIG1hYyBhZGRyZXNzIHRvIGRlbGV0ZSAqLwogCQkJCW1hY19hZGRyZXNzID0gKHU4ICopJm1hY19lbnRyeS0+bWFjYWRkcjsKIAkJCQltZW1jcHkobWFjX2luZm8ubWFjYWRkciwgbWFjX2FkZHJlc3MsIEVUSF9BTEVOKTsKQEAgLTExMzcsNyArMTI0NCw3IEBACiAJCS8qIERlbGV0ZSBwcmV2aW91cyBNQydzICovCiAJCWZvciAoaSA9IDA7IGkgPCBtY2FzdF9jbnQ7IGkrKykgewogCQkJbGlzdF9mb3JfZWFjaF9zYWZlKGVudHJ5LCBuZXh0LCBsaXN0X2hlYWQpIHsKLQkJCQltYWNfZW50cnkgPSAoc3RydWN0IHZ4Z2VfbWFjX2FkZHJzICopIGVudHJ5OworCQkJCW1hY19lbnRyeSA9IChzdHJ1Y3QgdnhnZV9tYWNfYWRkcnMgKillbnRyeTsKIAkJCQkvKiBDb3B5IHRoZSBtYWMgYWRkcmVzcyB0byBkZWxldGUgKi8KIAkJCQltYWNfYWRkcmVzcyA9ICh1OCAqKSZtYWNfZW50cnktPm1hY2FkZHI7CiAJCQkJbWVtY3B5KG1hY19pbmZvLm1hY2FkZHIsIG1hY19hZGRyZXNzLCBFVEhfQUxFTik7CkBAIC0xMTg0LDE0ICsxMjkxLDE0IEBACiB7CiAJc3RydWN0IHNvY2thZGRyICphZGRyID0gcDsKIAlzdHJ1Y3QgdnhnZWRldiAqdmRldjsKLQlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAgKmhsZGV2OworCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldjsKIAllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CiAJc3RydWN0IG1hY0luZm8gbWFjX2luZm9fbmV3LCBtYWNfaW5mb19vbGQ7CiAJaW50IHZwYXRoX2lkeCA9IDA7CiAKIAl2eGdlX2RlYnVnX2VudHJ5ZXhpdChWWEdFX1RSQUNFLCAiJXM6JWQiLCBfX2Z1bmNfXywgX19MSU5FX18pOwogCi0JdmRldiA9IChzdHJ1Y3QgdnhnZWRldiAqKW5ldGRldl9wcml2KGRldik7CisJdmRldiA9IG5ldGRldl9wcml2KGRldik7CiAJaGxkZXYgPSB2ZGV2LT5kZXZoOwogCiAJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGFkZHItPnNhX2RhdGEpKQpAQCAtMTI5Miw4ICsxMzk5LDEzIEBACiBzdGF0aWMgdm9pZCB2eGdlX3ZwYXRoX2ludHJfZGlzYWJsZShzdHJ1Y3QgdnhnZWRldiAqdmRldiwgaW50IHZwX2lkKQogewogCXN0cnVjdCB2eGdlX3ZwYXRoICp2cGF0aCA9ICZ2ZGV2LT52cGF0aHNbdnBfaWRdOworCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldjsKIAlpbnQgbXNpeF9pZDsKIAorCWhsZGV2ID0gcGNpX2dldF9kcnZkYXRhKHZkZXYtPnBkZXYpOworCisJdnhnZV9od192cGF0aF93YWl0X3JlY2VpdmVfaWRsZShobGRldiwgdnBhdGgtPmRldmljZV9pZCk7CisKIAl2eGdlX2h3X3ZwYXRoX2ludHJfZGlzYWJsZSh2cGF0aC0+aGFuZGxlKTsKIAogCWlmICh2ZGV2LT5jb25maWcuaW50cl90eXBlID09IElOVEEpCkBAIC0xMzEwLDYgKzE0MjIsOTUgQEAKIAl9CiB9CiAKKy8qIGxpc3QgYWxsIG1hYyBhZGRyZXNzZXMgZnJvbSBEQSB0YWJsZSAqLworc3RhdGljIGVudW0gdnhnZV9od19zdGF0dXMKK3Z4Z2Vfc2VhcmNoX21hY19hZGRyX2luX2RhX3RhYmxlKHN0cnVjdCB2eGdlX3ZwYXRoICp2cGF0aCwgc3RydWN0IG1hY0luZm8gKm1hYykKK3sKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisJdW5zaWduZWQgY2hhciBtYWNtYXNrW0VUSF9BTEVOXTsKKwl1bnNpZ25lZCBjaGFyIG1hY2FkZHJbRVRIX0FMRU5dOworCisJc3RhdHVzID0gdnhnZV9od192cGF0aF9tYWNfYWRkcl9nZXQodnBhdGgtPmhhbmRsZSwKKwkJCQltYWNhZGRyLCBtYWNtYXNrKTsKKwlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spIHsKKwkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJIkRBIGNvbmZpZyBsaXN0IGVudHJ5IGZhaWxlZCBmb3IgdnBhdGg6JWQiLAorCQkJdnBhdGgtPmRldmljZV9pZCk7CisJCXJldHVybiBzdGF0dXM7CisJfQorCisJd2hpbGUgKG1lbWNtcChtYWMtPm1hY2FkZHIsIG1hY2FkZHIsIEVUSF9BTEVOKSkgeworCQlzdGF0dXMgPSB2eGdlX2h3X3ZwYXRoX21hY19hZGRyX2dldF9uZXh0KHZwYXRoLT5oYW5kbGUsCisJCQkJbWFjYWRkciwgbWFjbWFzayk7CisJCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJCWJyZWFrOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qIFN0b3JlIGFsbCBtYWMgYWRkcmVzc2VzIGZyb20gdGhlIGxpc3QgdG8gdGhlIERBIHRhYmxlICovCitzdGF0aWMgZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX3Jlc3RvcmVfdnBhdGhfbWFjX2FkZHIoc3RydWN0IHZ4Z2VfdnBhdGggKnZwYXRoKQoreworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKwlzdHJ1Y3QgbWFjSW5mbyBtYWNfaW5mbzsKKwl1OCAqbWFjX2FkZHJlc3MgPSBOVUxMOworCXN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5LCAqbmV4dDsKKworCW1lbXNldCgmbWFjX2luZm8sIDAsIHNpemVvZihzdHJ1Y3QgbWFjSW5mbykpOworCisJaWYgKHZwYXRoLT5pc19vcGVuKSB7CisJCWxpc3RfZm9yX2VhY2hfc2FmZShlbnRyeSwgbmV4dCwgJnZwYXRoLT5tYWNfYWRkcl9saXN0KSB7CisJCQltYWNfYWRkcmVzcyA9CisJCQkJKHU4ICopJgorCQkJCSgoc3RydWN0IHZ4Z2VfbWFjX2FkZHJzICopZW50cnkpLT5tYWNhZGRyOworCQkJbWVtY3B5KG1hY19pbmZvLm1hY2FkZHIsIG1hY19hZGRyZXNzLCBFVEhfQUxFTik7CisJCQkoKHN0cnVjdCB2eGdlX21hY19hZGRycyAqKWVudHJ5KS0+c3RhdGUgPQorCQkJCVZYR0VfTExfTUFDX0FERFJfSU5fREFfVEFCTEU7CisJCQkvKiBkb2VzIHRoaXMgbWFjIGFkZHJlc3MgYWxyZWFkeSBleGlzdCBpbiBkYSB0YWJsZT8gKi8KKwkJCXN0YXR1cyA9IHZ4Z2Vfc2VhcmNoX21hY19hZGRyX2luX2RhX3RhYmxlKHZwYXRoLAorCQkJCSZtYWNfaW5mbyk7CisJCQlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spIHsKKwkJCQkvKiBBZGQgdGhpcyBtYWMgYWRkcmVzcyB0byB0aGUgREEgdGFibGUgKi8KKwkJCQlzdGF0dXMgPSB2eGdlX2h3X3ZwYXRoX21hY19hZGRyX2FkZCgKKwkJCQkJdnBhdGgtPmhhbmRsZSwgbWFjX2luZm8ubWFjYWRkciwKKwkJCQkJbWFjX2luZm8ubWFjbWFzaywKKwkJCQkgICAgVlhHRV9IV19WUEFUSF9NQUNfQUREUl9BRERfRFVQTElDQVRFKTsKKwkJCQlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spIHsKKwkJCQkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJCQkgICAgIkRBIGFkZCBlbnRyeSBmYWlsZWQgZm9yIHZwYXRoOiVkIiwKKwkJCQkJICAgIHZwYXRoLT5kZXZpY2VfaWQpOworCQkJCQkoKHN0cnVjdCB2eGdlX21hY19hZGRycyAqKWVudHJ5KS0+c3RhdGUKKwkJCQkJCT0gVlhHRV9MTF9NQUNfQUREUl9JTl9MSVNUOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qIFN0b3JlIGFsbCB2bGFuIGlkcyBmcm9tIHRoZSBsaXN0IHRvIHRoZSB2aWQgdGFibGUgKi8KK3N0YXRpYyBlbnVtIHZ4Z2VfaHdfc3RhdHVzCit2eGdlX3Jlc3RvcmVfdnBhdGhfdmlkX3RhYmxlKHN0cnVjdCB2eGdlX3ZwYXRoICp2cGF0aCkKK3sKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisJc3RydWN0IHZ4Z2VkZXYgKnZkZXYgPSB2cGF0aC0+dmRldjsKKwl1MTYgdmlkOworCisJaWYgKHZkZXYtPnZsZ3JwICYmIHZwYXRoLT5pc19vcGVuKSB7CisKKwkJZm9yICh2aWQgPSAwOyB2aWQgPCBWTEFOX05fVklEOyB2aWQrKykgeworCQkJaWYgKCF2bGFuX2dyb3VwX2dldF9kZXZpY2UodmRldi0+dmxncnAsIHZpZCkpCisJCQkJY29udGludWU7CisJCQkvKiBBZGQgdGhlc2UgdmxhbiB0byB0aGUgdmlkIHRhYmxlICovCisJCQlzdGF0dXMgPSB2eGdlX2h3X3ZwYXRoX3ZpZF9hZGQodnBhdGgtPmhhbmRsZSwgdmlkKTsKKwkJfQorCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKIC8qCiAgKiB2eGdlX3Jlc2V0X3ZwYXRoCiAgKiBAdmRldjogcG9pbnRlciB0byB2ZGV2CkBAIC0xNDA1LDEyICsxNjA2LDE2IEBACiAJfQogCiAJaWYgKGV2ZW50ID09IFZYR0VfTExfRlVMTF9SRVNFVCkgeworCQluZXRpZl9jYXJyaWVyX29mZih2ZGV2LT5uZGV2KTsKKwogCQkvKiB3YWl0IGZvciBhbGwgdGhlIHZwYXRoIHJlc2V0IHRvIGNvbXBsZXRlICovCiAJCWZvciAodnBfaWQgPSAwOyB2cF9pZCA8IHZkZXYtPm5vX29mX3ZwYXRoOyB2cF9pZCsrKSB7CiAJCQl3aGlsZSAodGVzdF9iaXQodnBfaWQsICZ2ZGV2LT52cF9yZXNldCkpCiAJCQkJbXNsZWVwKDUwKTsKIAkJfQogCisJCW5ldGlmX2NhcnJpZXJfb24odmRldi0+bmRldik7CisKIAkJLyogaWYgZXhlY3V0aW9uIG1vZGUgaXMgc2V0IHRvIGRlYnVnLCBkb24ndCByZXNldCB0aGUgYWRhcHRlciAqLwogCQlpZiAodW5saWtlbHkodmRldi0+ZXhlY19tb2RlKSkgewogCQkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLApAQCAtMTQyMyw2ICsxNjI4LDcgQEAKIAl9CiAKIAlpZiAoZXZlbnQgPT0gVlhHRV9MTF9GVUxMX1JFU0VUKSB7CisJCXZ4Z2VfaHdfZGV2aWNlX3dhaXRfcmVjZWl2ZV9pZGxlKHZkZXYtPmRldmgpOwogCQl2eGdlX2h3X2RldmljZV9pbnRyX2Rpc2FibGUodmRldi0+ZGV2aCk7CiAKIAkJc3dpdGNoICh2ZGV2LT5jcmljX2Vycl9ldmVudCkgewpAQCAtMTU2Myw5ICsxNzY5LDE0IEBACiAgKgogICogZHJpdmVyIG1heSByZXNldCB0aGUgY2hpcCBvbiBldmVudHMgb2Ygc2VyciwgZWNjZXJyLCBldGMKICAqLwotc3RhdGljIGludCB2eGdlX3Jlc2V0KHN0cnVjdCB2eGdlZGV2ICp2ZGV2KQorc3RhdGljIHZvaWQgdnhnZV9yZXNldChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0JcmV0dXJuIGRvX3Z4Z2VfcmVzZXQodmRldiwgVlhHRV9MTF9GVUxMX1JFU0VUKTsKKwlzdHJ1Y3QgdnhnZWRldiAqdmRldiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgdnhnZWRldiwgcmVzZXRfdGFzayk7CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcodmRldi0+bmRldikpCisJCXJldHVybjsKKworCWRvX3Z4Z2VfcmVzZXQodmRldiwgVlhHRV9MTF9GVUxMX1JFU0VUKTsKIH0KIAogLyoqCkBAIC0xNjA4LDggKzE4MTksNyBAQAogCWludCBidWRnZXRfb3JnID0gYnVkZ2V0OwogCXN0cnVjdCB2eGdlX3JpbmcgKnJpbmc7CiAKLQlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAgKmhsZGV2ID0gKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICopCi0JCXBjaV9nZXRfZHJ2ZGF0YSh2ZGV2LT5wZGV2KTsKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYgPSBwY2lfZ2V0X2RydmRhdGEodmRldi0+cGRldik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgdmRldi0+bm9fb2ZfdnBhdGg7IGkrKykgewogCQlyaW5nID0gJnZkZXYtPnZwYXRoc1tpXS5yaW5nOwpAQCAtMTY0NSwxMSArMTg1NSwxMSBAQAogICovCiBzdGF0aWMgdm9pZCB2eGdlX25ldHBvbGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAgKmhsZGV2OworCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldjsKIAlzdHJ1Y3QgdnhnZWRldiAqdmRldjsKIAotCXZkZXYgPSAoc3RydWN0IHZ4Z2VkZXYgKiluZXRkZXZfcHJpdihkZXYpOwotCWhsZGV2ID0gKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICAqKXBjaV9nZXRfZHJ2ZGF0YSh2ZGV2LT5wZGV2KTsKKwl2ZGV2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlobGRldiA9IHBjaV9nZXRfZHJ2ZGF0YSh2ZGV2LT5wZGV2KTsKIAogCXZ4Z2VfZGVidWdfZW50cnlleGl0KFZYR0VfVFJBQ0UsICIlczolZCIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CiAKQEAgLTE2ODksMTUgKzE4OTksNiBAQAogCQltdGFibGVbaW5kZXhdID0gaW5kZXggJSB2ZGV2LT5ub19vZl92cGF0aDsKIAl9CiAKLQkvKiBGaWxsIFJUSCBoYXNoIHR5cGVzICovCi0JaGFzaF90eXBlcy5oYXNoX3R5cGVfdGNwaXB2NF9lbiAgID0gdmRldi0+Y29uZmlnLnJ0aF9oYXNoX3R5cGVfdGNwaXB2NDsKLQloYXNoX3R5cGVzLmhhc2hfdHlwZV9pcHY0X2VuICAgICAgPSB2ZGV2LT5jb25maWcucnRoX2hhc2hfdHlwZV9pcHY0OwotCWhhc2hfdHlwZXMuaGFzaF90eXBlX3RjcGlwdjZfZW4gICA9IHZkZXYtPmNvbmZpZy5ydGhfaGFzaF90eXBlX3RjcGlwdjY7Ci0JaGFzaF90eXBlcy5oYXNoX3R5cGVfaXB2Nl9lbiAgICAgID0gdmRldi0+Y29uZmlnLnJ0aF9oYXNoX3R5cGVfaXB2NjsKLQloYXNoX3R5cGVzLmhhc2hfdHlwZV90Y3BpcHY2ZXhfZW4gPQotCQkJCQl2ZGV2LT5jb25maWcucnRoX2hhc2hfdHlwZV90Y3BpcHY2ZXg7Ci0JaGFzaF90eXBlcy5oYXNoX3R5cGVfaXB2NmV4X2VuICAgID0gdmRldi0+Y29uZmlnLnJ0aF9oYXNoX3R5cGVfaXB2NmV4OwotCiAJLyogc2V0IGluZGlyZWN0aW9uIHRhYmxlLCBidWNrZXQtdG8tdnBhdGggbWFwcGluZyAqLwogCXN0YXR1cyA9IHZ4Z2VfaHdfdnBhdGhfcnRzX3J0aF9pdGFibGVfc2V0KHZkZXYtPnZwX2hhbmRsZXMsCiAJCQkJCQl2ZGV2LT5ub19vZl92cGF0aCwKQEAgLTE3MTAsMTkgKzE5MTEsMjcgQEAKIAkJcmV0dXJuIHN0YXR1czsKIAl9CiAKKwkvKiBGaWxsIFJUSCBoYXNoIHR5cGVzICovCisJaGFzaF90eXBlcy5oYXNoX3R5cGVfdGNwaXB2NF9lbiAgID0gdmRldi0+Y29uZmlnLnJ0aF9oYXNoX3R5cGVfdGNwaXB2NDsKKwloYXNoX3R5cGVzLmhhc2hfdHlwZV9pcHY0X2VuICAgICAgPSB2ZGV2LT5jb25maWcucnRoX2hhc2hfdHlwZV9pcHY0OworCWhhc2hfdHlwZXMuaGFzaF90eXBlX3RjcGlwdjZfZW4gICA9IHZkZXYtPmNvbmZpZy5ydGhfaGFzaF90eXBlX3RjcGlwdjY7CisJaGFzaF90eXBlcy5oYXNoX3R5cGVfaXB2Nl9lbiAgICAgID0gdmRldi0+Y29uZmlnLnJ0aF9oYXNoX3R5cGVfaXB2NjsKKwloYXNoX3R5cGVzLmhhc2hfdHlwZV90Y3BpcHY2ZXhfZW4gPQorCQkJCQl2ZGV2LT5jb25maWcucnRoX2hhc2hfdHlwZV90Y3BpcHY2ZXg7CisJaGFzaF90eXBlcy5oYXNoX3R5cGVfaXB2NmV4X2VuICAgID0gdmRldi0+Y29uZmlnLnJ0aF9oYXNoX3R5cGVfaXB2NmV4OworCiAJLyoKLQkqIEJlY2F1c2UgdGhlIGl0YWJsZV9zZXQoKSBtZXRob2QgdXNlcyB0aGUgYWN0aXZlX3RhYmxlIGZpZWxkCi0JKiBmb3IgdGhlIHRhcmdldCB2aXJ0dWFsIHBhdGggdGhlIFJUSCBjb25maWcgc2hvdWxkIGJlIHVwZGF0ZWQKLQkqIGZvciBhbGwgVlBBVEhzLiBUaGUgaC93IG9ubHkgdXNlcyB0aGUgbG93ZXN0IG51bWJlcmVkIFZQQVRICi0JKiB3aGVuIHN0ZWVyaW5nIGZyYW1lcy4KLQkqLworCSAqIEJlY2F1c2UgdGhlIGl0YWJsZV9zZXQoKSBtZXRob2QgdXNlcyB0aGUgYWN0aXZlX3RhYmxlIGZpZWxkCisJICogZm9yIHRoZSB0YXJnZXQgdmlydHVhbCBwYXRoIHRoZSBSVEggY29uZmlnIHNob3VsZCBiZSB1cGRhdGVkCisJICogZm9yIGFsbCBWUEFUSHMuIFRoZSBoL3cgb25seSB1c2VzIHRoZSBsb3dlc3QgbnVtYmVyZWQgVlBBVEgKKwkgKiB3aGVuIHN0ZWVyaW5nIGZyYW1lcy4KKwkgKi8KIAkgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgdmRldi0+bm9fb2ZfdnBhdGg7IGluZGV4KyspIHsKIAkJc3RhdHVzID0gdnhnZV9od192cGF0aF9ydHNfcnRoX3NldCgKIAkJCQl2ZGV2LT52cGF0aHNbaW5kZXhdLmhhbmRsZSwKIAkJCQl2ZGV2LT5jb25maWcucnRoX2FsZ29yaXRobSwKIAkJCQkmaGFzaF90eXBlcywKIAkJCQl2ZGV2LT5jb25maWcucnRoX2JrdF9zeik7Ci0KIAkJIGlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykgewogCQkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAogCQkJCSJSVEggY29uZmlndXJhdGlvbiBmYWlsZWQgZm9yIHZwYXRoOiVkIiwKQEAgLTE3MzQsMjAxICsxOTQzLDggQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCi1zdGF0aWMgaW50IHZ4Z2VfbWFjX2xpc3RfYWRkKHN0cnVjdCB2eGdlX3ZwYXRoICp2cGF0aCwgc3RydWN0IG1hY0luZm8gKm1hYykKLXsKLQlzdHJ1Y3QgdnhnZV9tYWNfYWRkcnMgKm5ld19tYWNfZW50cnk7Ci0JdTggKm1hY19hZGRyZXNzID0gTlVMTDsKLQotCWlmICh2cGF0aC0+bWFjX2FkZHJfY250ID49IFZYR0VfTUFYX0xFQVJOX01BQ19BRERSX0NOVCkKLQkJcmV0dXJuIFRSVUU7Ci0KLQluZXdfbWFjX2VudHJ5ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHZ4Z2VfbWFjX2FkZHJzKSwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFuZXdfbWFjX2VudHJ5KSB7Ci0JCXZ4Z2VfZGVidWdfbWVtKFZYR0VfRVJSLAotCQkJIiVzOiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQiLAotCQkJVlhHRV9EUklWRVJfTkFNRSk7Ci0JCXJldHVybiBGQUxTRTsKLQl9Ci0KLQlsaXN0X2FkZCgmbmV3X21hY19lbnRyeS0+aXRlbSwgJnZwYXRoLT5tYWNfYWRkcl9saXN0KTsKLQotCS8qIENvcHkgdGhlIG5ldyBtYWMgYWRkcmVzcyB0byB0aGUgbGlzdCAqLwotCW1hY19hZGRyZXNzID0gKHU4ICopJm5ld19tYWNfZW50cnktPm1hY2FkZHI7Ci0JbWVtY3B5KG1hY19hZGRyZXNzLCBtYWMtPm1hY2FkZHIsIEVUSF9BTEVOKTsKLQotCW5ld19tYWNfZW50cnktPnN0YXRlID0gbWFjLT5zdGF0ZTsKLQl2cGF0aC0+bWFjX2FkZHJfY250Kys7Ci0KLQkvKiBJcyB0aGlzIGEgbXVsdGljYXN0IGFkZHJlc3MgKi8KLQlpZiAoMHgwMSAmIG1hYy0+bWFjYWRkclswXSkKLQkJdnBhdGgtPm1jYXN0X2FkZHJfY250Kys7Ci0KLQlyZXR1cm4gVFJVRTsKLX0KLQotLyogQWRkIGEgbWFjIGFkZHJlc3MgdG8gREEgdGFibGUgKi8KLXN0YXRpYyBlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfYWRkX21hY19hZGRyKHN0cnVjdCB2eGdlZGV2ICp2ZGV2LAotCQkJCQkgICAgIHN0cnVjdCBtYWNJbmZvICptYWMpCi17Ci0JZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOwotCXN0cnVjdCB2eGdlX3ZwYXRoICp2cGF0aDsKLQllbnVtIHZ4Z2VfaHdfdnBhdGhfbWFjX2FkZHJfYWRkX21vZGUgZHVwbGljYXRlX21vZGU7Ci0KLQlpZiAoMHgwMSAmIG1hYy0+bWFjYWRkclswXSkgLyogbXVsdGljYXN0IGFkZHJlc3MgKi8KLQkJZHVwbGljYXRlX21vZGUgPSBWWEdFX0hXX1ZQQVRIX01BQ19BRERSX0FERF9EVVBMSUNBVEU7Ci0JZWxzZQotCQlkdXBsaWNhdGVfbW9kZSA9IFZYR0VfSFdfVlBBVEhfTUFDX0FERFJfUkVQTEFDRV9EVVBMSUNBVEU7Ci0KLQl2cGF0aCA9ICZ2ZGV2LT52cGF0aHNbbWFjLT52cGF0aF9ub107Ci0Jc3RhdHVzID0gdnhnZV9od192cGF0aF9tYWNfYWRkcl9hZGQodnBhdGgtPmhhbmRsZSwgbWFjLT5tYWNhZGRyLAotCQkJCQkJbWFjLT5tYWNtYXNrLCBkdXBsaWNhdGVfbW9kZSk7Ci0JaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKSB7Ci0JCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKLQkJCSJEQSBjb25maWcgYWRkIGVudHJ5IGZhaWxlZCBmb3IgdnBhdGg6JWQiLAotCQkJdnBhdGgtPmRldmljZV9pZCk7Ci0JfSBlbHNlCi0JCWlmIChGQUxTRSA9PSB2eGdlX21hY19saXN0X2FkZCh2cGF0aCwgbWFjKSkKLQkJCXN0YXR1cyA9IC1FUEVSTTsKLQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLXN0YXRpYyBpbnQgdnhnZV9tYWNfbGlzdF9kZWwoc3RydWN0IHZ4Z2VfdnBhdGggKnZwYXRoLCBzdHJ1Y3QgbWFjSW5mbyAqbWFjKQotewotCXN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5LCAqbmV4dDsKLQl1NjQgZGVsX21hYyA9IDA7Ci0JdTggKm1hY19hZGRyZXNzID0gKHU4ICopICgmZGVsX21hYyk7Ci0KLQkvKiBDb3B5IHRoZSBtYWMgYWRkcmVzcyB0byBkZWxldGUgZnJvbSB0aGUgbGlzdCAqLwotCW1lbWNweShtYWNfYWRkcmVzcywgbWFjLT5tYWNhZGRyLCBFVEhfQUxFTik7Ci0KLQlsaXN0X2Zvcl9lYWNoX3NhZmUoZW50cnksIG5leHQsICZ2cGF0aC0+bWFjX2FkZHJfbGlzdCkgewotCQlpZiAoKChzdHJ1Y3QgdnhnZV9tYWNfYWRkcnMgKillbnRyeSktPm1hY2FkZHIgPT0gZGVsX21hYykgewotCQkJbGlzdF9kZWwoZW50cnkpOwotCQkJa2ZyZWUoKHN0cnVjdCB2eGdlX21hY19hZGRycyAqKWVudHJ5KTsKLQkJCXZwYXRoLT5tYWNfYWRkcl9jbnQtLTsKLQotCQkJLyogSXMgdGhpcyBhIG11bHRpY2FzdCBhZGRyZXNzICovCi0JCQlpZiAoMHgwMSAmIG1hYy0+bWFjYWRkclswXSkKLQkJCQl2cGF0aC0+bWNhc3RfYWRkcl9jbnQtLTsKLQkJCXJldHVybiBUUlVFOwotCQl9Ci0JfQotCi0JcmV0dXJuIEZBTFNFOwotfQotLyogZGVsZXRlIGEgbWFjIGFkZHJlc3MgZnJvbSBEQSB0YWJsZSAqLwotc3RhdGljIGVudW0gdnhnZV9od19zdGF0dXMgdnhnZV9kZWxfbWFjX2FkZHIoc3RydWN0IHZ4Z2VkZXYgKnZkZXYsCi0JCQkJCSAgICAgc3RydWN0IG1hY0luZm8gKm1hYykKLXsKLQllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7Ci0Jc3RydWN0IHZ4Z2VfdnBhdGggKnZwYXRoOwotCi0JdnBhdGggPSAmdmRldi0+dnBhdGhzW21hYy0+dnBhdGhfbm9dOwotCXN0YXR1cyA9IHZ4Z2VfaHdfdnBhdGhfbWFjX2FkZHJfZGVsZXRlKHZwYXRoLT5oYW5kbGUsIG1hYy0+bWFjYWRkciwKLQkJCQkJCW1hYy0+bWFjbWFzayk7Ci0JaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKSB7Ci0JCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKLQkJCSJEQSBjb25maWcgZGVsZXRlIGVudHJ5IGZhaWxlZCBmb3IgdnBhdGg6JWQiLAotCQkJdnBhdGgtPmRldmljZV9pZCk7Ci0JfSBlbHNlCi0JCXZ4Z2VfbWFjX2xpc3RfZGVsKHZwYXRoLCBtYWMpOwotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qIGxpc3QgYWxsIG1hYyBhZGRyZXNzZXMgZnJvbSBEQSB0YWJsZSAqLwotZW51bSB2eGdlX2h3X3N0YXR1cwotc3RhdGljIHZ4Z2Vfc2VhcmNoX21hY19hZGRyX2luX2RhX3RhYmxlKHN0cnVjdCB2eGdlX3ZwYXRoICp2cGF0aCwKLQkJCQkJc3RydWN0IG1hY0luZm8gKm1hYykKLXsKLQllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7Ci0JdW5zaWduZWQgY2hhciBtYWNtYXNrW0VUSF9BTEVOXTsKLQl1bnNpZ25lZCBjaGFyIG1hY2FkZHJbRVRIX0FMRU5dOwotCi0Jc3RhdHVzID0gdnhnZV9od192cGF0aF9tYWNfYWRkcl9nZXQodnBhdGgtPmhhbmRsZSwKLQkJCQltYWNhZGRyLCBtYWNtYXNrKTsKLQlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spIHsKLQkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAotCQkJIkRBIGNvbmZpZyBsaXN0IGVudHJ5IGZhaWxlZCBmb3IgdnBhdGg6JWQiLAotCQkJdnBhdGgtPmRldmljZV9pZCk7Ci0JCXJldHVybiBzdGF0dXM7Ci0JfQotCi0Jd2hpbGUgKG1lbWNtcChtYWMtPm1hY2FkZHIsIG1hY2FkZHIsIEVUSF9BTEVOKSkgewotCi0JCXN0YXR1cyA9IHZ4Z2VfaHdfdnBhdGhfbWFjX2FkZHJfZ2V0X25leHQodnBhdGgtPmhhbmRsZSwKLQkJCQltYWNhZGRyLCBtYWNtYXNrKTsKLQkJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQotCQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIHN0YXR1czsKLX0KLQotLyogU3RvcmUgYWxsIHZsYW4gaWRzIGZyb20gdGhlIGxpc3QgdG8gdGhlIHZpZCB0YWJsZSAqLwotc3RhdGljIGVudW0gdnhnZV9od19zdGF0dXMgdnhnZV9yZXN0b3JlX3ZwYXRoX3ZpZF90YWJsZShzdHJ1Y3QgdnhnZV92cGF0aCAqdnBhdGgpCi17Ci0JZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOwotCXN0cnVjdCB2eGdlZGV2ICp2ZGV2ID0gdnBhdGgtPnZkZXY7Ci0JdTE2IHZpZDsKLQotCWlmICh2ZGV2LT52bGdycCAmJiB2cGF0aC0+aXNfb3BlbikgewotCi0JCWZvciAodmlkID0gMDsgdmlkIDwgVkxBTl9OX1ZJRDsgdmlkKyspIHsKLQkJCWlmICghdmxhbl9ncm91cF9nZXRfZGV2aWNlKHZkZXYtPnZsZ3JwLCB2aWQpKQotCQkJCWNvbnRpbnVlOwotCQkJLyogQWRkIHRoZXNlIHZsYW4gdG8gdGhlIHZpZCB0YWJsZSAqLwotCQkJc3RhdHVzID0gdnhnZV9od192cGF0aF92aWRfYWRkKHZwYXRoLT5oYW5kbGUsIHZpZCk7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKiBTdG9yZSBhbGwgbWFjIGFkZHJlc3NlcyBmcm9tIHRoZSBsaXN0IHRvIHRoZSBEQSB0YWJsZSAqLwotc3RhdGljIGVudW0gdnhnZV9od19zdGF0dXMgdnhnZV9yZXN0b3JlX3ZwYXRoX21hY19hZGRyKHN0cnVjdCB2eGdlX3ZwYXRoICp2cGF0aCkKLXsKLQllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7Ci0Jc3RydWN0IG1hY0luZm8gbWFjX2luZm87Ci0JdTggKm1hY19hZGRyZXNzID0gTlVMTDsKLQlzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeSwgKm5leHQ7Ci0KLQltZW1zZXQoJm1hY19pbmZvLCAwLCBzaXplb2Yoc3RydWN0IG1hY0luZm8pKTsKLQotCWlmICh2cGF0aC0+aXNfb3BlbikgewotCi0JCWxpc3RfZm9yX2VhY2hfc2FmZShlbnRyeSwgbmV4dCwgJnZwYXRoLT5tYWNfYWRkcl9saXN0KSB7Ci0JCQltYWNfYWRkcmVzcyA9Ci0JCQkJKHU4ICopJgotCQkJCSgoc3RydWN0IHZ4Z2VfbWFjX2FkZHJzICopZW50cnkpLT5tYWNhZGRyOwotCQkJbWVtY3B5KG1hY19pbmZvLm1hY2FkZHIsIG1hY19hZGRyZXNzLCBFVEhfQUxFTik7Ci0JCQkoKHN0cnVjdCB2eGdlX21hY19hZGRycyAqKWVudHJ5KS0+c3RhdGUgPQotCQkJCVZYR0VfTExfTUFDX0FERFJfSU5fREFfVEFCTEU7Ci0JCQkvKiBkb2VzIHRoaXMgbWFjIGFkZHJlc3MgYWxyZWFkeSBleGlzdCBpbiBkYSB0YWJsZT8gKi8KLQkJCXN0YXR1cyA9IHZ4Z2Vfc2VhcmNoX21hY19hZGRyX2luX2RhX3RhYmxlKHZwYXRoLAotCQkJCSZtYWNfaW5mbyk7Ci0JCQlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spIHsKLQkJCQkvKiBBZGQgdGhpcyBtYWMgYWRkcmVzcyB0byB0aGUgREEgdGFibGUgKi8KLQkJCQlzdGF0dXMgPSB2eGdlX2h3X3ZwYXRoX21hY19hZGRyX2FkZCgKLQkJCQkJdnBhdGgtPmhhbmRsZSwgbWFjX2luZm8ubWFjYWRkciwKLQkJCQkJbWFjX2luZm8ubWFjbWFzaywKLQkJCQkgICAgVlhHRV9IV19WUEFUSF9NQUNfQUREUl9BRERfRFVQTElDQVRFKTsKLQkJCQlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spIHsKLQkJCQkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAotCQkJCQkgICAgIkRBIGFkZCBlbnRyeSBmYWlsZWQgZm9yIHZwYXRoOiVkIiwKLQkJCQkJICAgIHZwYXRoLT5kZXZpY2VfaWQpOwotCQkJCQkoKHN0cnVjdCB2eGdlX21hY19hZGRycyAqKWVudHJ5KS0+c3RhdGUKLQkJCQkJCT0gVlhHRV9MTF9NQUNfQUREUl9JTl9MSVNUOwotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQotCXJldHVybiBzdGF0dXM7Ci19Ci0KIC8qIHJlc2V0IHZwYXRocyAqLwotc3RhdGljIGVudW0gdnhnZV9od19zdGF0dXMgdnhnZV9yZXNldF9hbGxfdnBhdGhzKHN0cnVjdCB2eGdlZGV2ICp2ZGV2KQorZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX3Jlc2V0X2FsbF92cGF0aHMoc3RydWN0IHZ4Z2VkZXYgKnZkZXYpCiB7CiAJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOwogCXN0cnVjdCB2eGdlX3ZwYXRoICp2cGF0aDsKQEAgLTE5ODgsOCArMjAwNCwyMyBAQAogCiAJZm9yIChpID0gMDsgaSA8IHZkZXYtPm5vX29mX3ZwYXRoOyBpKyspIHsKIAkJdnBhdGggPSAmdmRldi0+dnBhdGhzW2ldOwotCiAJCXZ4Z2VfYXNzZXJ0KHZwYXRoLT5pc19jb25maWd1cmVkKTsKKworCQlpZiAoIXZkZXYtPnRpdGFuMSkgeworCQkJc3RydWN0IHZ4Z2VfaHdfdnBfY29uZmlnICp2Y2ZnOworCQkJdmNmZyA9ICZ2ZGV2LT5kZXZoLT5jb25maWcudnBfY29uZmlnW3ZwYXRoLT5kZXZpY2VfaWRdOworCisJCQl2Y2ZnLT5ydGkudXJhbmdlX2EgPSBSVElfVDFBX1JYX1VSQU5HRV9BOworCQkJdmNmZy0+cnRpLnVyYW5nZV9iID0gUlRJX1QxQV9SWF9VUkFOR0VfQjsKKwkJCXZjZmctPnJ0aS51cmFuZ2VfYyA9IFJUSV9UMUFfUlhfVVJBTkdFX0M7CisJCQl2Y2ZnLT50dGkudWVjX2EgPSBUVElfVDFBX1RYX1VGQ19BOworCQkJdmNmZy0+dHRpLnVlY19iID0gVFRJX1QxQV9UWF9VRkNfQjsKKwkJCXZjZmctPnR0aS51ZWNfYyA9IFRUSV9UMUFfVFhfVUZDX0ModmRldi0+bXR1KTsKKwkJCXZjZmctPnR0aS51ZWNfZCA9IFRUSV9UMUFfVFhfVUZDX0QodmRldi0+bXR1KTsKKwkJCXZjZmctPnR0aS5sdGltZXJfdmFsID0gVlhHRV9UMUFfVFRJX0xUSU1FUl9WQUw7CisJCQl2Y2ZnLT50dGkucnRpbWVyX3ZhbCA9IFZYR0VfVDFBX1RUSV9SVElNRVJfVkFMOworCQl9CisKIAkJYXR0ci52cF9pZCA9IHZwYXRoLT5kZXZpY2VfaWQ7CiAJCWF0dHIuZmlmb19hdHRyLmNhbGxiYWNrID0gdnhnZV94bWl0X2NvbXBsOwogCQlhdHRyLmZpZm9fYXR0ci50eGRsX3Rlcm0gPSB2eGdlX3R4X3Rlcm07CkBAIC0yMDA0LDYgKzIwMzUsNyBAQAogCiAJCXZwYXRoLT5yaW5nLm5kZXYgPSB2ZGV2LT5uZGV2OwogCQl2cGF0aC0+cmluZy5wZGV2ID0gdmRldi0+cGRldjsKKwogCQlzdGF0dXMgPSB2eGdlX2h3X3ZwYXRoX29wZW4odmRldi0+ZGV2aCwgJmF0dHIsICZ2cGF0aC0+aGFuZGxlKTsKIAkJaWYgKHN0YXR1cyA9PSBWWEdFX0hXX09LKSB7CiAJCQl2cGF0aC0+Zmlmby5oYW5kbGUgPQpAQCAtMjAyNCw2ICsyMDU2LDcgQEAKIAkJCQl2ZGV2LT5jb25maWcuZmlmb19pbmRpY2F0ZV9tYXhfcGt0czsKIAkJCXZwYXRoLT5yaW5nLnJ4X3ZlY3Rvcl9ubyA9IDA7CiAJCQl2cGF0aC0+cmluZy5yeF9jc3VtID0gdmRldi0+cnhfY3N1bTsKKwkJCXZwYXRoLT5yaW5nLnJ4X2h3dHMgPSB2ZGV2LT5yeF9od3RzOwogCQkJdnBhdGgtPmlzX29wZW4gPSAxOwogCQkJdmRldi0+dnBfaGFuZGxlc1tpXSA9IHZwYXRoLT5oYW5kbGU7CiAJCQl2cGF0aC0+cmluZy5ncm9fZW5hYmxlID0gdmRldi0+Y29uZmlnLmdyb19lbmFibGU7CkBAIC0yMDMxLDExICsyMDY0LDEwIEBACiAJCQl2ZGV2LT5zdGF0cy52cGF0aHNfb3BlbisrOwogCQl9IGVsc2UgewogCQkJdmRldi0+c3RhdHMudnBhdGhfb3Blbl9mYWlsKys7Ci0JCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCi0JCQkJIiVzOiB2cGF0aDogJWQgZmFpbGVkIHRvIG9wZW4gIgotCQkJCSJ3aXRoIHN0YXR1czogJWQiLAotCQkJICAgIHZkZXYtPm5kZXYtPm5hbWUsIHZwYXRoLT5kZXZpY2VfaWQsCi0JCQkJc3RhdHVzKTsKKwkJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwgIiVzOiB2cGF0aDogJWQgZmFpbGVkIHRvICIKKwkJCQkJIm9wZW4gd2l0aCBzdGF0dXM6ICVkIiwKKwkJCQkJdmRldi0+bmRldi0+bmFtZSwgdnBhdGgtPmRldmljZV9pZCwKKwkJCQkJc3RhdHVzKTsKIAkJCXZ4Z2VfY2xvc2VfdnBhdGhzKHZkZXYsIDApOwogCQkJcmV0dXJuIC1FUEVSTTsKIAkJfQpAQCAtMjA0Myw2ICsyMDc1LDcgQEAKIAkJdnBfaWQgPSB2cGF0aC0+aGFuZGxlLT52cGF0aC0+dnBfaWQ7CiAJCXZkZXYtPnZwYXRoc19kZXBsb3llZCB8PSB2eGdlX21CSVQodnBfaWQpOwogCX0KKwogCXJldHVybiBWWEdFX0hXX09LOwogfQogCkBAIC0yMDYyLDIxICsyMDk1LDIwIEBACiAJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2OwogCXU2NCByZWFzb247CiAJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXM7Ci0Jc3RydWN0IHZ4Z2VkZXYgKnZkZXYgPSAoc3RydWN0IHZ4Z2VkZXYgKikgZGV2X2lkOzsKKwlzdHJ1Y3QgdnhnZWRldiAqdmRldiA9IChzdHJ1Y3QgdnhnZWRldiAqKWRldl9pZDsKIAogCXZ4Z2VfZGVidWdfaW50cihWWEdFX1RSQUNFLCAiJXM6JWQiLCBfX2Z1bmNfXywgX19MSU5FX18pOwogCiAJZGV2ID0gdmRldi0+bmRldjsKLQlobGRldiA9IChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqKXBjaV9nZXRfZHJ2ZGF0YSh2ZGV2LT5wZGV2KTsKKwlobGRldiA9IHBjaV9nZXRfZHJ2ZGF0YSh2ZGV2LT5wZGV2KTsKIAogCWlmIChwY2lfY2hhbm5lbF9vZmZsaW5lKHZkZXYtPnBkZXYpKQogCQlyZXR1cm4gSVJRX05PTkU7CiAKIAlpZiAodW5saWtlbHkoIWlzX3Z4Z2VfY2FyZF91cCh2ZGV2KSkpCi0JCXJldHVybiBJUlFfTk9ORTsKKwkJcmV0dXJuIElSUV9IQU5ETEVEOwogCi0Jc3RhdHVzID0gdnhnZV9od19kZXZpY2VfYmVnaW5faXJxKGhsZGV2LCB2ZGV2LT5leGVjX21vZGUsCi0JCQkmcmVhc29uKTsKKwlzdGF0dXMgPSB2eGdlX2h3X2RldmljZV9iZWdpbl9pcnEoaGxkZXYsIHZkZXYtPmV4ZWNfbW9kZSwgJnJlYXNvbik7CiAJaWYgKHN0YXR1cyA9PSBWWEdFX0hXX09LKSB7CiAJCXZ4Z2VfaHdfZGV2aWNlX21hc2tfYWxsKGhsZGV2KTsKIApAQCAtMjMwMSw4ICsyMzMzLDggQEAKIAogc3RhdGljIHZvaWQgdnhnZV9yZW1faXNyKHN0cnVjdCB2eGdlZGV2ICp2ZGV2KQogewotCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICAqaGxkZXY7Ci0JaGxkZXYgPSAoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgICopIHBjaV9nZXRfZHJ2ZGF0YSh2ZGV2LT5wZGV2KTsKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXY7CisJaGxkZXYgPSBwY2lfZ2V0X2RydmRhdGEodmRldi0+cGRldik7CiAKICNpZmRlZiBDT05GSUdfUENJX01TSQogCWlmICh2ZGV2LT5jb25maWcuaW50cl90eXBlID09IE1TSV9YKSB7CkBAIC0yNTI5LDggKzI1NjEsNyBAQAogICogUmV0dXJuIHZhbHVlOiAnMCcgb24gc3VjY2VzcyBhbmQgYW4gYXBwcm9wcmlhdGUgKC0pdmUgaW50ZWdlciBhcwogICogZGVmaW5lZCBpbiBlcnJuby5oIGZpbGUgb24gZmFpbHVyZS4KICAqLwotc3RhdGljIGludAotdnhnZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHZ4Z2Vfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzOwogCXN0cnVjdCB2eGdlZGV2ICp2ZGV2OwpAQCAtMjUzOSwxMSArMjU3MCwxMiBAQAogCWludCByZXQgPSAwOwogCWludCBpOwogCXU2NCB2YWw2NCwgZnVuY3Rpb25fbW9kZTsKKwogCXZ4Z2VfZGVidWdfZW50cnlleGl0KFZYR0VfVFJBQ0UsCiAJCSIlczogJXM6JWQiLCBkZXYtPm5hbWUsIF9fZnVuY19fLCBfX0xJTkVfXyk7CiAKLQl2ZGV2ID0gKHN0cnVjdCB2eGdlZGV2ICopbmV0ZGV2X3ByaXYoZGV2KTsKLQlobGRldiA9IChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqKSBwY2lfZ2V0X2RydmRhdGEodmRldi0+cGRldik7CisJdmRldiA9IG5ldGRldl9wcml2KGRldik7CisJaGxkZXYgPSBwY2lfZ2V0X2RydmRhdGEodmRldi0+cGRldik7CiAJZnVuY3Rpb25fbW9kZSA9IHZkZXYtPmNvbmZpZy5kZXZpY2VfaHdfaW5mby5mdW5jdGlvbl9tb2RlOwogCiAJLyogbWFrZSBzdXJlIHlvdSBoYXZlIGxpbmsgb2ZmIGJ5IGRlZmF1bHQgZXZlcnkgdGltZSBOaWMgaXMKQEAgLTI1OTgsNiArMjYzMCw4IEBACiAJCQlnb3RvIG91dDI7CiAJCX0KIAl9CisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFJlY2VpdmUgSGFzaGluZyBPZmZsb2FkICVzXG4iLCBkZXYtPm5hbWUsCisJICAgICAgIGhsZGV2LT5jb25maWcucnRoX2VuID8gImVuYWJsZWQiIDogImRpc2FibGVkIik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgdmRldi0+bm9fb2ZfdnBhdGg7IGkrKykgewogCQl2cGF0aCA9ICZ2ZGV2LT52cGF0aHNbaV07CkBAIC0yNjgzLDkgKzI3MTcsMTAgQEAKIAkJdnhnZV9vc190aW1lcih2ZGV2LT52cF9yZXNldF90aW1lciwKIAkJCXZ4Z2VfcG9sbF92cF9yZXNldCwgdmRldiwgKEhaLzIpKTsKIAotCWlmICh2ZGV2LT52cF9sb2NrdXBfdGltZXIuZnVuY3Rpb24gPT0gTlVMTCkKLQkJdnhnZV9vc190aW1lcih2ZGV2LT52cF9sb2NrdXBfdGltZXIsCi0JCQl2eGdlX3BvbGxfdnBfbG9ja3VwLCB2ZGV2LCAoSFovMikpOworCS8qIFRoZXJlIGlzIG5vIG5lZWQgdG8gY2hlY2sgZm9yIFJ4RCBsZWFrIGFuZCBSeEQgbG9va3VwIG9uIFRpdGFuMUEgKi8KKwlpZiAodmRldi0+dGl0YW4xICYmIHZkZXYtPnZwX2xvY2t1cF90aW1lci5mdW5jdGlvbiA9PSBOVUxMKQorCQl2eGdlX29zX3RpbWVyKHZkZXYtPnZwX2xvY2t1cF90aW1lciwgdnhnZV9wb2xsX3ZwX2xvY2t1cCwgdmRldiwKKwkJCSAgICAgIEhaIC8gMik7CiAKIAlzZXRfYml0KF9fVlhHRV9TVEFURV9DQVJEX1VQLCAmdmRldi0+c3RhdGUpOwogCkBAIC0yNzY3LDggKzI4MDIsOCBAQAogCXZ4Z2VfZGVidWdfZW50cnlleGl0KFZYR0VfVFJBQ0UsICIlczogJXM6JWQiLAogCQlkZXYtPm5hbWUsIF9fZnVuY19fLCBfX0xJTkVfXyk7CiAKLQl2ZGV2ID0gKHN0cnVjdCB2eGdlZGV2ICopbmV0ZGV2X3ByaXYoZGV2KTsKLQlobGRldiA9IChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqKSBwY2lfZ2V0X2RydmRhdGEodmRldi0+cGRldik7CisJdmRldiA9IG5ldGRldl9wcml2KGRldik7CisJaGxkZXYgPSBwY2lfZ2V0X2RydmRhdGEodmRldi0+cGRldik7CiAKIAlpZiAodW5saWtlbHkoIWlzX3Z4Z2VfY2FyZF91cCh2ZGV2KSkpCiAJCXJldHVybiAwOwpAQCAtMjc3OCw3ICsyODEzLDYgQEAKIAl3aGlsZSAodGVzdF9hbmRfc2V0X2JpdChfX1ZYR0VfU1RBVEVfUkVTRVRfQ0FSRCwgJnZkZXYtPnN0YXRlKSkKIAkJbXNsZWVwKDUwKTsKIAotCWNsZWFyX2JpdChfX1ZYR0VfU1RBVEVfQ0FSRF9VUCwgJnZkZXYtPnN0YXRlKTsKIAlpZiAoZG9faW8pIHsKIAkJLyogUHV0IHRoZSB2cGF0aCBiYWNrIGluIG5vcm1hbCBtb2RlICovCiAJCXZwYXRoX3ZlY3RvciA9IHZ4Z2VfbUJJVCh2ZGV2LT52cGF0aHNbMF0uZGV2aWNlX2lkKTsKQEAgLTI3ODksNyArMjgyMyw2IEBACiAJCQkJCXN0cnVjdCB2eGdlX2h3X21ycGNpbV9yZWcsCiAJCQkJCXJ0c19tZ3JfY2Jhc2luX2NmZyksCiAJCQkJJnZhbDY0KTsKLQogCQlpZiAoc3RhdHVzID09IFZYR0VfSFdfT0spIHsKIAkJCXZhbDY0ICY9IH52cGF0aF92ZWN0b3I7CiAJCQlzdGF0dXMgPSB2eGdlX2h3X21nbXRfcmVnX3dyaXRlKHZkZXYtPmRldmgsCkBAIC0yODE4LDEwICsyODUxLDE3IEBACiAKIAkJc21wX3dtYigpOwogCX0KLQlkZWxfdGltZXJfc3luYygmdmRldi0+dnBfbG9ja3VwX3RpbWVyKTsKKworCWlmICh2ZGV2LT50aXRhbjEpCisJCWRlbF90aW1lcl9zeW5jKCZ2ZGV2LT52cF9sb2NrdXBfdGltZXIpOwogCiAJZGVsX3RpbWVyX3N5bmMoJnZkZXYtPnZwX3Jlc2V0X3RpbWVyKTsKIAorCWlmIChkb19pbykKKwkJdnhnZV9od19kZXZpY2Vfd2FpdF9yZWNlaXZlX2lkbGUoaGxkZXYpOworCisJY2xlYXJfYml0KF9fVlhHRV9TVEFURV9DQVJEX1VQLCAmdmRldi0+c3RhdGUpOworCiAJLyogRGlzYWJsZSBuYXBpICovCiAJaWYgKHZkZXYtPmNvbmZpZy5pbnRyX3R5cGUgIT0gTVNJX1gpCiAJCW5hcGlfZGlzYWJsZSgmdmRldi0+bmFwaSk7CkBAIC0yODM4LDggKzI4NzgsNiBAQAogCWlmIChkb19pbykKIAkJdnhnZV9od19kZXZpY2VfaW50cl9kaXNhYmxlKHZkZXYtPmRldmgpOwogCi0JbWRlbGF5KDEwMDApOwotCiAJdnhnZV9yZW1faXNyKHZkZXYpOwogCiAJdnhnZV9uYXBpX2RlbF9hbGwodmRldik7CkBAIC0yODY4LDggKzI5MDYsNyBAQAogICogUmV0dXJuIHZhbHVlOiAnMCcgb24gc3VjY2VzcyBhbmQgYW4gYXBwcm9wcmlhdGUgKC0pdmUgaW50ZWdlciBhcwogICogZGVmaW5lZCBpbiBlcnJuby5oIGZpbGUgb24gZmFpbHVyZS4KICAqLwotc3RhdGljIGludAotdnhnZV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIGludCB2eGdlX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJZG9fdnhnZV9jbG9zZShkZXYsIDEpOwogCXJldHVybiAwOwpAQCAtMjk0Myw5ICsyOTgwLDcgQEAKIAkJbmV0X3N0YXRzLT5yeF9ieXRlcyArPSB2ZGV2LT52cGF0aHNba10ucmluZy5zdGF0cy5yeF9ieXRlczsKIAkJbmV0X3N0YXRzLT5yeF9lcnJvcnMgKz0gdmRldi0+dnBhdGhzW2tdLnJpbmcuc3RhdHMucnhfZXJyb3JzOwogCQluZXRfc3RhdHMtPm11bHRpY2FzdCArPSB2ZGV2LT52cGF0aHNba10ucmluZy5zdGF0cy5yeF9tY2FzdDsKLQkJbmV0X3N0YXRzLT5yeF9kcm9wcGVkICs9Ci0JCQl2ZGV2LT52cGF0aHNba10ucmluZy5zdGF0cy5yeF9kcm9wcGVkOwotCisJCW5ldF9zdGF0cy0+cnhfZHJvcHBlZCArPSB2ZGV2LT52cGF0aHNba10ucmluZy5zdGF0cy5yeF9kcm9wcGVkOwogCQluZXRfc3RhdHMtPnR4X3BhY2tldHMgKz0gdmRldi0+dnBhdGhzW2tdLmZpZm8uc3RhdHMudHhfZnJtczsKIAkJbmV0X3N0YXRzLT50eF9ieXRlcyArPSB2ZGV2LT52cGF0aHNba10uZmlmby5zdGF0cy50eF9ieXRlczsKIAkJbmV0X3N0YXRzLT50eF9lcnJvcnMgKz0gdmRldi0+dnBhdGhzW2tdLmZpZm8uc3RhdHMudHhfZXJyb3JzOwpAQCAtMjk1NCw2ICsyOTg5LDEwMSBAQAogCXJldHVybiBuZXRfc3RhdHM7CiB9CiAKK3N0YXRpYyBlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfdGltZXN0YW1wX2NvbmZpZyhzdHJ1Y3QgdnhnZWRldiAqdmRldiwKKwkJCQkJCSBpbnQgZW5hYmxlKQoreworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzOworCXU2NCB2YWw2NDsKKworCS8qIFRpbWVzdGFtcCBpcyBwYXNzZWQgdG8gdGhlIGRyaXZlciB2aWEgdGhlIEZDUywgdGhlcmVmb3JlIHdlCisJICogbXVzdCBkaXNhYmxlIHRoZSBGQ1Mgc3RyaXBwaW5nIGJ5IHRoZSBhZGFwdGVyLiAgU2luY2UgdGhpcyBpcworCSAqIHJlcXVpcmVkIGZvciB0aGUgZHJpdmVyIHRvIGxvYWQgKGR1ZSB0byBhIGhhcmR3YXJlIGJ1ZyksCisJICogdGhlcmUgaXMgbm8gbmVlZCB0byBkbyBhbnl0aGluZyBzcGVjaWFsIGhlcmUuCisJICovCisJaWYgKGVuYWJsZSkKKwkJdmFsNjQgPSBWWEdFX0hXX1hNQUNfVElNRVNUQU1QX0VOIHwKKwkJCVZYR0VfSFdfWE1BQ19USU1FU1RBTVBfVVNFX0xJTktfSUQoMCkgfAorCQkJVlhHRV9IV19YTUFDX1RJTUVTVEFNUF9JTlRFUlZBTCgwKTsKKwllbHNlCisJCXZhbDY0ID0gMDsKKworCXN0YXR1cyA9IHZ4Z2VfaHdfbWdtdF9yZWdfd3JpdGUodmRldi0+ZGV2aCwKKwkJCQkJdnhnZV9od19tZ210X3JlZ190eXBlX21ycGNpbSwKKwkJCQkJMCwKKwkJCQkJb2Zmc2V0b2Yoc3RydWN0IHZ4Z2VfaHdfbXJwY2ltX3JlZywKKwkJCQkJCSB4bWFjX3RpbWVzdGFtcCksCisJCQkJCXZhbDY0KTsKKwl2eGdlX2h3X2RldmljZV9mbHVzaF9pbyh2ZGV2LT5kZXZoKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IHZ4Z2VfaHd0c3RhbXBfaW9jdGwoc3RydWN0IHZ4Z2VkZXYgKnZkZXYsIHZvaWQgX191c2VyICpkYXRhKQoreworCXN0cnVjdCBod3RzdGFtcF9jb25maWcgY29uZmlnOworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzOworCWludCBpOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZjb25maWcsIGRhdGEsIHNpemVvZihjb25maWcpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwkvKiByZXNlcnZlZCBmb3IgZnV0dXJlIGV4dGVuc2lvbnMgKi8KKwlpZiAoY29uZmlnLmZsYWdzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIFRyYW5zbWl0IEhXIFRpbWVzdGFtcCBub3Qgc3VwcG9ydGVkICovCisJc3dpdGNoIChjb25maWcudHhfdHlwZSkgeworCWNhc2UgSFdUU1RBTVBfVFhfT0ZGOgorCQlicmVhazsKKwljYXNlIEhXVFNUQU1QX1RYX09OOgorCWRlZmF1bHQ6CisJCXJldHVybiAtRVJBTkdFOworCX0KKworCXN3aXRjaCAoY29uZmlnLnJ4X2ZpbHRlcikgeworCWNhc2UgSFdUU1RBTVBfRklMVEVSX05PTkU6CisJCXN0YXR1cyA9IHZ4Z2VfdGltZXN0YW1wX2NvbmZpZyh2ZGV2LCAwKTsKKwkJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJdmRldi0+cnhfaHd0cyA9IDA7CisJCWNvbmZpZy5yeF9maWx0ZXIgPSBIV1RTVEFNUF9GSUxURVJfTk9ORTsKKwkJYnJlYWs7CisKKwljYXNlIEhXVFNUQU1QX0ZJTFRFUl9BTEw6CisJY2FzZSBIV1RTVEFNUF9GSUxURVJfU09NRToKKwljYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjFfTDRfRVZFTlQ6CisJY2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YxX0w0X1NZTkM6CisJY2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YxX0w0X0RFTEFZX1JFUToKKwljYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDRfRVZFTlQ6CisJY2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0w0X1NZTkM6CisJY2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0w0X0RFTEFZX1JFUToKKwljYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDJfRVZFTlQ6CisJY2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0wyX1NZTkM6CisJY2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0wyX0RFTEFZX1JFUToKKwljYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfRVZFTlQ6CisJY2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX1NZTkM6CisJY2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0RFTEFZX1JFUToKKwkJc3RhdHVzID0gdnhnZV90aW1lc3RhbXBfY29uZmlnKHZkZXYsIDEpOworCQlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQl2ZGV2LT5yeF9od3RzID0gMTsKKwkJY29uZmlnLnJ4X2ZpbHRlciA9IEhXVFNUQU1QX0ZJTFRFUl9BTEw7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJIHJldHVybiAtRVJBTkdFOworCX0KKworCWZvciAoaSA9IDA7IGkgPCB2ZGV2LT5ub19vZl92cGF0aDsgaSsrKQorCQl2ZGV2LT52cGF0aHNbaV0ucmluZy5yeF9od3RzID0gdmRldi0+cnhfaHd0czsKKworCWlmIChjb3B5X3RvX3VzZXIoZGF0YSwgJmNvbmZpZywgc2l6ZW9mKGNvbmZpZykpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldHVybiAwOworfQorCiAvKioKICAqIHZ4Z2VfaW9jdGwKICAqIEBkZXY6IERldmljZSBwb2ludGVyLgpAQCAtMjk2Niw3ICszMDk2LDIwIEBACiAgKi8KIHN0YXRpYyBpbnQgdnhnZV9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKQogewotCXJldHVybiAtRU9QTk9UU1VQUDsKKwlzdHJ1Y3QgdnhnZWRldiAqdmRldiA9IG5ldGRldl9wcml2KGRldik7CisJaW50IHJldDsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTSU9DU0hXVFNUQU1QOgorCQlyZXQgPSB2eGdlX2h3dHN0YW1wX2lvY3RsKHZkZXYsIHJxLT5pZnJfZGF0YSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorCisJcmV0dXJuIDA7CiB9CiAKIC8qKgpAQCAtMjk3NywxOCArMzEyMCwxNyBAQAogICogVGhpcyBmdW5jdGlvbiBpcyB0cmlnZ2VyZWQgaWYgdGhlIFR4IFF1ZXVlIGlzIHN0b3BwZWQKICAqIGZvciBhIHByZS1kZWZpbmVkIGFtb3VudCBvZiB0aW1lIHdoZW4gdGhlIEludGVyZmFjZSBpcyBzdGlsbCB1cC4KICAqLwotc3RhdGljIHZvaWQKLXZ4Z2VfdHhfd2F0Y2hkb2coc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIHZ4Z2VfdHhfd2F0Y2hkb2coc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgdnhnZWRldiAqdmRldjsKIAogCXZ4Z2VfZGVidWdfZW50cnlleGl0KFZYR0VfVFJBQ0UsICIlczolZCIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CiAKLQl2ZGV2ID0gKHN0cnVjdCB2eGdlZGV2ICopbmV0ZGV2X3ByaXYoZGV2KTsKKwl2ZGV2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCXZkZXYtPmNyaWNfZXJyX2V2ZW50ID0gVlhHRV9IV19FVkVOVF9SRVNFVF9TVEFSVDsKIAotCXZ4Z2VfcmVzZXQodmRldik7CisJc2NoZWR1bGVfd29yaygmdmRldi0+cmVzZXRfdGFzayk7CiAJdnhnZV9kZWJ1Z19lbnRyeWV4aXQoVlhHRV9UUkFDRSwKIAkJIiVzOiVkICBFeGl0aW5nLi4uIiwgX19mdW5jX18sIF9fTElORV9fKTsKIH0KQEAgLTMwMTIsNyArMzE1NCw3IEBACiAKIAl2eGdlX2RlYnVnX2VudHJ5ZXhpdChWWEdFX1RSQUNFLCAiJXM6JWQiLCBfX2Z1bmNfXywgX19MSU5FX18pOwogCi0JdmRldiA9IChzdHJ1Y3QgdnhnZWRldiAqKW5ldGRldl9wcml2KGRldik7CisJdmRldiA9IG5ldGRldl9wcml2KGRldik7CiAKIAl2cGF0aCA9ICZ2ZGV2LT52cGF0aHNbMF07CiAJaWYgKChOVUxMID09IGdycCkgJiYgKHZwYXRoLT5pc19vcGVuKSkgewpAQCAtMzA2MSw3ICszMjAzLDcgQEAKIAlzdHJ1Y3QgdnhnZV92cGF0aCAqdnBhdGg7CiAJaW50IHZwX2lkOwogCi0JdmRldiA9IChzdHJ1Y3QgdnhnZWRldiAqKW5ldGRldl9wcml2KGRldik7CisJdmRldiA9IG5ldGRldl9wcml2KGRldik7CiAKIAkvKiBBZGQgdGhlc2UgdmxhbiB0byB0aGUgdmlkIHRhYmxlICovCiAJZm9yICh2cF9pZCA9IDA7IHZwX2lkIDwgdmRldi0+bm9fb2ZfdnBhdGg7IHZwX2lkKyspIHsKQEAgLTMwODgsNyArMzIzMCw3IEBACiAKIAl2eGdlX2RlYnVnX2VudHJ5ZXhpdChWWEdFX1RSQUNFLCAiJXM6JWQiLCBfX2Z1bmNfXywgX19MSU5FX18pOwogCi0JdmRldiA9IChzdHJ1Y3QgdnhnZWRldiAqKW5ldGRldl9wcml2KGRldik7CisJdmRldiA9IG5ldGRldl9wcml2KGRldik7CiAKIAl2bGFuX2dyb3VwX3NldF9kZXZpY2UodmRldi0+dmxncnAsIHZpZCwgTlVMTCk7CiAKQEAgLTMxMTAsMjEgKzMyNTIsMzEgQEAKIAkubmRvX3N0YXJ0X3htaXQgICAgICAgICA9IHZ4Z2VfeG1pdCwKIAkubmRvX3ZhbGlkYXRlX2FkZHIgICAgICA9IGV0aF92YWxpZGF0ZV9hZGRyLAogCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gdnhnZV9zZXRfbXVsdGljYXN0LAotCiAJLm5kb19kb19pb2N0bCAgICAgICAgICAgPSB2eGdlX2lvY3RsLAotCiAJLm5kb19zZXRfbWFjX2FkZHJlc3MgICAgPSB2eGdlX3NldF9tYWNfYWRkciwKIAkubmRvX2NoYW5nZV9tdHUgICAgICAgICA9IHZ4Z2VfY2hhbmdlX210dSwKIAkubmRvX3ZsYW5fcnhfcmVnaXN0ZXIgICA9IHZ4Z2Vfdmxhbl9yeF9yZWdpc3RlciwKIAkubmRvX3ZsYW5fcnhfa2lsbF92aWQgICA9IHZ4Z2Vfdmxhbl9yeF9raWxsX3ZpZCwKIAkubmRvX3ZsYW5fcnhfYWRkX3ZpZAk9IHZ4Z2Vfdmxhbl9yeF9hZGRfdmlkLAotCiAJLm5kb190eF90aW1lb3V0ICAgICAgICAgPSB2eGdlX3R4X3dhdGNoZG9nLAogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCiAJLm5kb19wb2xsX2NvbnRyb2xsZXIgICAgPSB2eGdlX25ldHBvbGwsCiAjZW5kaWYKIH07CiAKK3N0YXRpYyBpbnQgX19kZXZpbml0IHZ4Z2VfZGV2aWNlX3JldmlzaW9uKHN0cnVjdCB2eGdlZGV2ICp2ZGV2KQoreworCWludCByZXQ7CisJdTggcmV2aXNpb247CisKKwlyZXQgPSBwY2lfcmVhZF9jb25maWdfYnl0ZSh2ZGV2LT5wZGV2LCBQQ0lfUkVWSVNJT05fSUQsICZyZXZpc2lvbik7CisJaWYgKHJldCkKKwkJcmV0dXJuIC1FSU87CisKKwl2ZGV2LT50aXRhbjEgPSAocmV2aXNpb24gPT0gVlhHRV9IV19USVRBTjFfUENJX1JFVklTSU9OKTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBfX2RldmluaXQgdnhnZV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2LAogCQkJCQkgIHN0cnVjdCB2eGdlX2NvbmZpZyAqY29uZmlnLAogCQkJCQkgIGludCBoaWdoX2RtYSwgaW50IG5vX29mX3ZwYXRoLApAQCAtMzE2Myw2ICszMzE1LDExIEBACiAJdmRldi0+cGRldiA9IGhsZGV2LT5wZGV2OwogCW1lbWNweSgmdmRldi0+Y29uZmlnLCBjb25maWcsIHNpemVvZihzdHJ1Y3QgdnhnZV9jb25maWcpKTsKIAl2ZGV2LT5yeF9jc3VtID0gMTsJLyogRW5hYmxlIFJ4IENTVU0gYnkgZGVmYXVsdC4gKi8KKwl2ZGV2LT5yeF9od3RzID0gMDsKKworCXJldCA9IHZ4Z2VfZGV2aWNlX3JldmlzaW9uKHZkZXYpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIF9vdXQxOwogCiAJU0VUX05FVERFVl9ERVYobmRldiwgJnZkZXYtPnBkZXYtPmRldik7CiAKQEAgLTMxNzUsOSArMzMzMiwxNSBAQAogCW5kZXYtPm5ldGRldl9vcHMgPSAmdnhnZV9uZXRkZXZfb3BzOwogCiAJbmRldi0+d2F0Y2hkb2dfdGltZW8gPSBWWEdFX0xMX1dBVENIX0RPR19USU1FT1VUOworCUlOSVRfV09SSygmdmRldi0+cmVzZXRfdGFzaywgdnhnZV9yZXNldCk7CiAKIAl2eGdlX2luaXRpYWxpemVfZXRodG9vbF9vcHMobmRldik7CiAKKwlpZiAodmRldi0+Y29uZmlnLnJ0aF9zdGVlcmluZyAhPSBOT19TVEVFUklORykgeworCQluZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1JYSEFTSDsKKwkJaGxkZXYtPmNvbmZpZy5ydGhfZW4gPSBWWEdFX0hXX1JUSF9FTkFCTEU7CisJfQorCiAJLyogQWxsb2NhdGUgbWVtb3J5IGZvciB2cGF0aCAqLwogCXZkZXYtPnZwYXRocyA9IGt6YWxsb2MoKHNpemVvZihzdHJ1Y3QgdnhnZV92cGF0aCkpICoKIAkJCQlub19vZl92cGF0aCwgR0ZQX0tFUk5FTCk7CkBAIC0zMTkxLDcgKzMzNTQsNyBAQAogCiAJbmRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9TRzsKIAotCW5kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfQ1NVTTsKKwluZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX0lQVjZfQ1NVTTsKIAl2eGdlX2RlYnVnX2luaXQodnhnZV9od19kZXZpY2VfdHJhY2VfbGV2ZWxfZ2V0KGhsZGV2KSwKIAkJIiVzIDogY2hlY2tzdW1pbmcgZW5hYmxlZCIsIF9fZnVuY19fKTsKIApAQCAtMzIyNyw2ICszMzkwLDcgQEAKIAkJIiVzOiBFdGhlcm5ldCBkZXZpY2UgcmVnaXN0ZXJlZCIsCiAJCW5kZXYtPm5hbWUpOwogCisJaGxkZXYtPm5kZXYgPSBuZGV2OwogCSp2ZGV2X291dCA9IHZkZXY7CiAKIAkvKiBSZXNldHRpbmcgdGhlIERldmljZSBzdGF0cyAqLwpAQCAtMzI2MSwzNiArMzQyNSwyOSBAQAogICoKICAqIFRoaXMgZnVuY3Rpb24gd2lsbCB1bnJlZ2lzdGVyIGFuZCBmcmVlIG5ldHdvcmsgZGV2aWNlCiAgKi8KLXN0YXRpYyB2b2lkCi12eGdlX2RldmljZV91bnJlZ2lzdGVyKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldikKK3N0YXRpYyB2b2lkIHZ4Z2VfZGV2aWNlX3VucmVnaXN0ZXIoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2KQogewogCXN0cnVjdCB2eGdlZGV2ICp2ZGV2OwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJY2hhciBidWZbSUZOQU1TSVpdOwotI2lmICgoVlhHRV9ERUJVR19JTklUICYgVlhHRV9ERUJVR19NQVNLKSB8fCBcCi0JKFZYR0VfREVCVUdfRU5UUllFWElUICYgVlhHRV9ERUJVR19NQVNLKSkKLQl1MzIgbGV2ZWxfdHJhY2U7Ci0jZW5kaWYKIAogCWRldiA9IGhsZGV2LT5uZGV2OwogCXZkZXYgPSBuZXRkZXZfcHJpdihkZXYpOwotI2lmICgoVlhHRV9ERUJVR19JTklUICYgVlhHRV9ERUJVR19NQVNLKSB8fCBcCi0JKFZYR0VfREVCVUdfRU5UUllFWElUICYgVlhHRV9ERUJVR19NQVNLKSkKLQlsZXZlbF90cmFjZSA9IHZkZXYtPmxldmVsX3RyYWNlOwotI2VuZGlmCi0JdnhnZV9kZWJ1Z19lbnRyeWV4aXQobGV2ZWxfdHJhY2UsCi0JCSIlczogJXM6JWQiLCB2ZGV2LT5uZGV2LT5uYW1lLCBfX2Z1bmNfXywgX19MSU5FX18pOwogCi0JbWVtY3B5KGJ1ZiwgdmRldi0+bmRldi0+bmFtZSwgSUZOQU1TSVopOworCXZ4Z2VfZGVidWdfZW50cnlleGl0KHZkZXYtPmxldmVsX3RyYWNlLAkiJXM6ICVzOiVkIiwgdmRldi0+bmRldi0+bmFtZSwKKwkJCSAgICAgX19mdW5jX18sIF9fTElORV9fKTsKKworCXN0cm5jcHkoYnVmLCBkZXYtPm5hbWUsIElGTkFNU0laKTsKKworCWZsdXNoX3dvcmtfc3luYygmdmRldi0+cmVzZXRfdGFzayk7CiAKIAkvKiBpbiAyLjYgd2lsbCBjYWxsIHN0b3AoKSBpZiBkZXZpY2UgaXMgdXAgKi8KIAl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwogCi0JZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKLQotCXZ4Z2VfZGVidWdfaW5pdChsZXZlbF90cmFjZSwgIiVzOiBldGhlcm5ldCBkZXZpY2UgdW5yZWdpc3RlcmVkIiwgYnVmKTsKLQl2eGdlX2RlYnVnX2VudHJ5ZXhpdChsZXZlbF90cmFjZSwKLQkJIiVzOiAlczolZCAgRXhpdGluZy4uLiIsIGJ1ZiwgX19mdW5jX18sIF9fTElORV9fKTsKKwl2eGdlX2RlYnVnX2luaXQodmRldi0+bGV2ZWxfdHJhY2UsICIlczogZXRoZXJuZXQgZGV2aWNlIHVucmVnaXN0ZXJlZCIsCisJCQlidWYpOworCXZ4Z2VfZGVidWdfZW50cnlleGl0KHZkZXYtPmxldmVsX3RyYWNlLAkiJXM6ICVzOiVkICBFeGl0aW5nLi4uIiwgYnVmLAorCQkJICAgICBfX2Z1bmNfXywgX19MSU5FX18pOwogfQogCiAvKgpAQCAtMzMwNCw3ICszNDYxLDcgQEAKIAkJCWVudW0gdnhnZV9od19ldmVudCB0eXBlLCB1NjQgdnBfaWQpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGhsZGV2LT5uZGV2OwotCXN0cnVjdCB2eGdlZGV2ICp2ZGV2ID0gKHN0cnVjdCB2eGdlZGV2ICopbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgdnhnZWRldiAqdmRldiA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IHZ4Z2VfdnBhdGggKnZwYXRoID0gTlVMTDsKIAlpbnQgdnBhdGhfaWR4OwogCkBAIC0zNTI3LDkgKzM2ODQsOSBAQAogCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0udHRpLnRpbWVyX2FjX2VuID0KIAkJCQlWWEdFX0hXX1RJTV9USU1FUl9BQ19FTkFCTEU7CiAKLQkJLyogRm9yIG1zaS14IHdpdGggbmFwaSAoZWFjaCB2ZWN0b3IKLQkJaGFzIGEgaGFuZGxlciBvZiBpdHMgb3duKSAtCi0JCVNldCBDSSB0byBPRkYgZm9yIGFsbCB2cGF0aHMgKi8KKwkJLyogRm9yIG1zaS14IHdpdGggbmFwaSAoZWFjaCB2ZWN0b3IgaGFzIGEgaGFuZGxlciBvZiBpdHMgb3duKSAtCisJCSAqIFNldCBDSSB0byBPRkYgZm9yIGFsbCB2cGF0aHMKKwkJICovCiAJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS50dGkudGltZXJfY2lfZW4gPQogCQkJVlhHRV9IV19USU1fVElNRVJfQ0lfRElTQUJMRTsKIApAQCAtMzU1OSwxMCArMzcxNiwxMyBAQAogCiAJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS5yaW5nLnJpbmdfYmxvY2tzICA9CiAJCQkJCQlWWEdFX0hXX0RFRl9SSU5HX0JMT0NLUzsKKwogCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0ucmluZy5idWZmZXJfbW9kZSA9CiAJCQlWWEdFX0hXX1JJTkdfUlhEX0JVRkZFUl9NT0RFXzE7CisKIAkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnJpbmcucnhkc19saW1pdCAgPQogCQkJCVZYR0VfSFdfREVGX1JJTkdfUlhEU19MSU1JVDsKKwogCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0ucmluZy5zY2F0dGVyX21vZGUgPQogCQkJCQlWWEdFX0hXX1JJTkdfU0NBVFRFUl9NT0RFX0E7CiAKQEAgLTM2NDIsNiArMzgwMiw3IEBACiAJCWRldmljZV9jb25maWctPmludHJfbW9kZSA9IFZYR0VfSFdfSU5UUl9NT0RFX01TSVg7CiAJCWJyZWFrOwogCX0KKwogCS8qIFRpbWVyIHBlcmlvZCBiZXR3ZWVuIGRldmljZSBwb2xsICovCiAJZGV2aWNlX2NvbmZpZy0+ZGV2aWNlX3BvbGxfbWlsbGlzID0gVlhHRV9USU1FUl9ERUxBWTsKIApAQCAtMzY1MywxNiArMzgxNCwxMCBAQAogCiAJdnhnZV9kZWJ1Z19sbF9jb25maWcoVlhHRV9UUkFDRSwgIiVzIDogRGV2aWNlIENvbmZpZyBQYXJhbXMgIiwKIAkJCV9fZnVuY19fKTsKLQl2eGdlX2RlYnVnX2xsX2NvbmZpZyhWWEdFX1RSQUNFLCAiZG1hX2Jsb2NrcG9vbF9pbml0aWFsIDogJWQiLAotCQkJZGV2aWNlX2NvbmZpZy0+ZG1hX2Jsb2NrcG9vbF9pbml0aWFsKTsKLQl2eGdlX2RlYnVnX2xsX2NvbmZpZyhWWEdFX1RSQUNFLCAiZG1hX2Jsb2NrcG9vbF9tYXggOiAlZCIsCi0JCQlkZXZpY2VfY29uZmlnLT5kbWFfYmxvY2twb29sX21heCk7CiAJdnhnZV9kZWJ1Z19sbF9jb25maWcoVlhHRV9UUkFDRSwgImludHJfbW9kZSA6ICVkIiwKIAkJCWRldmljZV9jb25maWctPmludHJfbW9kZSk7CiAJdnhnZV9kZWJ1Z19sbF9jb25maWcoVlhHRV9UUkFDRSwgImRldmljZV9wb2xsX21pbGxpcyA6ICVkIiwKIAkJCWRldmljZV9jb25maWctPmRldmljZV9wb2xsX21pbGxpcyk7Ci0JdnhnZV9kZWJ1Z19sbF9jb25maWcoVlhHRV9UUkFDRSwgInJ0c19tYWNfZW4gOiAlZCIsCi0JCQlkZXZpY2VfY29uZmlnLT5ydHNfbWFjX2VuKTsKIAl2eGdlX2RlYnVnX2xsX2NvbmZpZyhWWEdFX1RSQUNFLCAicnRoX2VuIDogJWQiLAogCQkJZGV2aWNlX2NvbmZpZy0+cnRoX2VuKTsKIAl2eGdlX2RlYnVnX2xsX2NvbmZpZyhWWEdFX1RSQUNFLCAicnRoX2l0X3R5cGUgOiAlZCIsCkBAIC0zNzUxLDkgKzM5MDYsNiBAQAogCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9UUkFDRSwKIAkJCSIlczogTUFDIEFkZHJlc3MgbGVhcm5pbmcgZW5hYmxlZCIsIHZkZXYtPm5kZXYtPm5hbWUpOwogCi0JdnhnZV9kZWJ1Z19pbml0KFZYR0VfVFJBQ0UsCi0JCSIlczogUnggZG9vcmJlbGwgbW9kZSBlbmFibGVkIiwgdmRldi0+bmRldi0+bmFtZSk7Ci0KIAlmb3IgKGkgPSAwOyBpIDwgVlhHRV9IV19NQVhfVklSVFVBTF9QQVRIUzsgaSsrKSB7CiAJCWlmICghdnhnZV9iVkFMbih2cGF0aF9tYXNrLCBpLCAxKSkKIAkJCWNvbnRpbnVlOwpAQCAtMzc2NiwxNCArMzkxOCw2IEBACiAJCQkoKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICAqKSh2ZGV2LT5kZXZoKSktPgogCQkJCWNvbmZpZy52cF9jb25maWdbaV0ucnBhX3N0cmlwX3ZsYW5fdGFnCiAJCQk/ICJFbmFibGVkIiA6ICJEaXNhYmxlZCIpOwotCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9UUkFDRSwKLQkJCSIlczogUmluZyBibG9ja3MgOiAlZCIsIHZkZXYtPm5kZXYtPm5hbWUsCi0JCQkoKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICAqKSh2ZGV2LT5kZXZoKSktPgotCQkJCWNvbmZpZy52cF9jb25maWdbaV0ucmluZy5yaW5nX2Jsb2Nrcyk7Ci0JCXZ4Z2VfZGVidWdfaW5pdChWWEdFX1RSQUNFLAotCQkJIiVzOiBGaWZvIGJsb2NrcyA6ICVkIiwgdmRldi0+bmRldi0+bmFtZSwKLQkJCSgoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgICopKHZkZXYtPmRldmgpKS0+Ci0JCQkJY29uZmlnLnZwX2NvbmZpZ1tpXS5maWZvLmZpZm9fYmxvY2tzKTsKIAkJdnhnZV9kZWJ1Z19sbF9jb25maWcoVlhHRV9UUkFDRSwKIAkJCSIlczogTWF4IGZyYWdzIDogJWQiLCB2ZGV2LT5uZGV2LT5uYW1lLAogCQkJKChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAgKikodmRldi0+ZGV2aCkpLT4KQEAgLTM4MTMsOCArMzk1Nyw3IEBACiBzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCB2eGdlX2lvX2Vycm9yX2RldGVjdGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQkJCQkJcGNpX2NoYW5uZWxfc3RhdGVfdCBzdGF0ZSkKIHsKLQlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAgKmhsZGV2ID0KLQkJKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICAqKSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBobGRldi0+bmRldjsKIAogCW5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTsKQEAgLTM4NDMsOCArMzk4Niw3IEBACiAgKi8KIHN0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IHZ4Z2VfaW9fc2xvdF9yZXNldChzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKLQlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAgKmhsZGV2ID0KLQkJKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICAqKSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBobGRldi0+bmRldjsKIAogCXN0cnVjdCB2eGdlZGV2ICp2ZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKQEAgLTM4NTUsNyArMzk5Nyw3IEBACiAJfQogCiAJcGNpX3NldF9tYXN0ZXIocGRldik7Ci0JdnhnZV9yZXNldCh2ZGV2KTsKKwlkb192eGdlX3Jlc2V0KHZkZXYsIFZYR0VfTExfRlVMTF9SRVNFVCk7CiAKIAlyZXR1cm4gUENJX0VSU19SRVNVTFRfUkVDT1ZFUkVEOwogfQpAQCAtMzg2OSw4ICs0MDExLDcgQEAKICAqLwogc3RhdGljIHZvaWQgdnhnZV9pb19yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7Ci0Jc3RydWN0IF9fdnhnZV9od19kZXZpY2UgICpobGRldiA9Ci0JCShzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAgKikgcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gaGxkZXYtPm5kZXY7CiAKIAlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CkBAIC0zOTE0LDYgKzQwNTUsMTU2IEBACiAJcmV0dXJuIG51bV9mdW5jdGlvbnM7CiB9CiAKK2ludCB2eGdlX2Z3X3VwZ3JhZGUoc3RydWN0IHZ4Z2VkZXYgKnZkZXYsIGNoYXIgKmZ3X25hbWUsIGludCBvdmVycmlkZSkKK3sKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYgPSB2ZGV2LT5kZXZoOworCXUzMiBtYWosIG1pbiwgYmxkLCBjbWFqLCBjbWluLCBjYmxkOworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzOworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CisJaW50IHJldDsKKworCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBmd19uYW1lLCAmdmRldi0+cGRldi0+ZGV2KTsKKwlpZiAocmV0KSB7CisJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwgIiVzOiBGaXJtd2FyZSBmaWxlICclcycgbm90IGZvdW5kIiwKKwkJCQlWWEdFX0RSSVZFUl9OQU1FLCBmd19uYW1lKTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogTG9hZCB0aGUgbmV3IGZpcm13YXJlIG9udG8gdGhlIGFkYXB0ZXIgKi8KKwlzdGF0dXMgPSB2eGdlX3VwZGF0ZV9md19pbWFnZShobGRldiwgZnctPmRhdGEsIGZ3LT5zaXplKTsKKwlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spIHsKKwkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJCSIlczogRlcgaW1hZ2UgZG93bmxvYWQgdG8gYWRhcHRlciBmYWlsZWQgJyVzJy4iLAorCQkJCVZYR0VfRFJJVkVSX05BTUUsIGZ3X25hbWUpOworCQlyZXQgPSAtRUlPOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBSZWFkIHRoZSB2ZXJzaW9uIG9mIHRoZSBuZXcgZmlybXdhcmUgKi8KKwlzdGF0dXMgPSB2eGdlX2h3X3VwZ3JhZGVfcmVhZF92ZXJzaW9uKGhsZGV2LCAmbWFqLCAmbWluLCAmYmxkKTsKKwlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spIHsKKwkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJCSIlczogVXBncmFkZSByZWFkIHZlcnNpb24gZmFpbGVkICclcycuIiwKKwkJCQlWWEdFX0RSSVZFUl9OQU1FLCBmd19uYW1lKTsKKwkJcmV0ID0gLUVJTzsKKwkJZ290byBvdXQ7CisJfQorCisJY21haiA9IHZkZXYtPmNvbmZpZy5kZXZpY2VfaHdfaW5mby5md192ZXJzaW9uLm1ham9yOworCWNtaW4gPSB2ZGV2LT5jb25maWcuZGV2aWNlX2h3X2luZm8uZndfdmVyc2lvbi5taW5vcjsKKwljYmxkID0gdmRldi0+Y29uZmlnLmRldmljZV9od19pbmZvLmZ3X3ZlcnNpb24uYnVpbGQ7CisJLyogSXQncyBwb3NzaWJsZSB0aGUgdmVyc2lvbiBpbiAvbGliL2Zpcm13YXJlIGlzIG5vdCB0aGUgbGF0ZXN0IHZlcnNpb24uCisJICogSWYgc28sIHdlIGNvdWxkIGdldCBpbnRvIGEgbG9vcCBvZiB0cnlpbmcgdG8gdXBncmFkZSB0byB0aGUgbGF0ZXN0CisJICogYW5kIGZsYXNoaW5nIHRoZSBvbGRlciB2ZXJzaW9uLgorCSAqLworCWlmIChWWEdFX0ZXX1ZFUihtYWosIG1pbiwgYmxkKSA9PSBWWEdFX0ZXX1ZFUihjbWFqLCBjbWluLCBjYmxkKSAmJgorCSAgICAhb3ZlcnJpZGUpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJcHJpbnRrKEtFUk5fTk9USUNFICJVcGdyYWRlIHRvIGZpcm13YXJlIHZlcnNpb24gJWQuJWQuJWQgY29tbWVuY2luZ1xuIiwKKwkgICAgICAgbWFqLCBtaW4sIGJsZCk7CisKKwkvKiBGbGFzaCB0aGUgYWRhcHRlciB3aXRoIHRoZSBuZXcgZmlybXdhcmUgKi8KKwlzdGF0dXMgPSB2eGdlX2h3X2ZsYXNoX2Z3KGhsZGV2KTsKKwlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spIHsKKwkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLCAiJXM6IFVwZ3JhZGUgY29tbWl0IGZhaWxlZCAnJXMnLiIsCisJCQkJVlhHRV9EUklWRVJfTkFNRSwgZndfbmFtZSk7CisJCXJldCA9IC1FSU87CisJCWdvdG8gb3V0OworCX0KKworCXByaW50ayhLRVJOX05PVElDRSAiVXBncmFkZSBvZiBmaXJtd2FyZSBzdWNjZXNzZnVsISAgQWRhcHRlciBtdXN0IGJlICIKKwkgICAgICAgImhhcmQgcmVzZXQgYmVmb3JlIHVzaW5nLCB0aHVzIHJlcXVpcmluZyBhIHN5c3RlbSByZWJvb3Qgb3IgYSAiCisJICAgICAgICJob3RwbHVnIGV2ZW50LlxuIik7CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHZ4Z2VfcHJvYmVfZndfdXBkYXRlKHN0cnVjdCB2eGdlZGV2ICp2ZGV2KQoreworCXUzMiBtYWosIG1pbiwgYmxkOworCWludCByZXQsIGdweGUgPSAwOworCWNoYXIgKmZ3X25hbWU7CisKKwltYWogPSB2ZGV2LT5jb25maWcuZGV2aWNlX2h3X2luZm8uZndfdmVyc2lvbi5tYWpvcjsKKwltaW4gPSB2ZGV2LT5jb25maWcuZGV2aWNlX2h3X2luZm8uZndfdmVyc2lvbi5taW5vcjsKKwlibGQgPSB2ZGV2LT5jb25maWcuZGV2aWNlX2h3X2luZm8uZndfdmVyc2lvbi5idWlsZDsKKworCWlmIChWWEdFX0ZXX1ZFUihtYWosIG1pbiwgYmxkKSA9PSBWWEdFX0NFUlRfRldfVkVSKQorCQlyZXR1cm4gMDsKKworCS8qIElnbm9yZSB0aGUgYnVpbGQgbnVtYmVyIHdoZW4gZGV0ZXJtaW5pbmcgaWYgdGhlIGN1cnJlbnQgZmlybXdhcmUgaXMKKwkgKiAidG9vIG5ldyIgdG8gbG9hZCB0aGUgZHJpdmVyCisJICovCisJaWYgKFZYR0VfRldfVkVSKG1haiwgbWluLCAwKSA+IFZYR0VfQ0VSVF9GV19WRVIpIHsKKwkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLCAiJXM6IEZpcm13YXJlIG5ld2VyIHRoYW4gbGFzdCBrbm93biAiCisJCQkJInZlcnNpb24sIHVuYWJsZSB0byBsb2FkIGRyaXZlclxuIiwKKwkJCQlWWEdFX0RSSVZFUl9OQU1FKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogRmlybXdhcmUgMS40LjQgYW5kIG9sZGVyIGNhbm5vdCBiZSB1cGdyYWRlZCwgYW5kIGlzIHRvbyBhbmNpZW50IHRvCisJICogd29yayB3aXRoIHRoaXMgZHJpdmVyLgorCSAqLworCWlmIChWWEdFX0ZXX1ZFUihtYWosIG1pbiwgYmxkKSA8PSBWWEdFX0ZXX0RFQURfVkVSKSB7CisJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwgIiVzOiBGaXJtd2FyZSAlZC4lZC4lZCBjYW5ub3QgYmUgIgorCQkJCSJ1cGdyYWRlZFxuIiwgVlhHRV9EUklWRVJfTkFNRSwgbWFqLCBtaW4sIGJsZCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIElmIGZpbGUgbm90IHNwZWNpZmllZCwgZGV0ZXJtaW5lIGdQWEUgb3Igbm90ICovCisJaWYgKFZYR0VfRldfVkVSKG1haiwgbWluLCBibGQpID49IFZYR0VfRVBST01fRldfVkVSKSB7CisJCWludCBpOworCQlmb3IgKGkgPSAwOyBpIDwgVlhHRV9IV19NQVhfUk9NX0lNQUdFUzsgaSsrKQorCQkJaWYgKHZkZXYtPmRldmgtPmVwcm9tX3ZlcnNpb25zW2ldKSB7CisJCQkJZ3B4ZSA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJfQorCWlmIChncHhlKQorCQlmd19uYW1lID0gInZ4Z2UvWDNmdy1weGUubmNmIjsKKwllbHNlCisJCWZ3X25hbWUgPSAidnhnZS9YM2Z3Lm5jZiI7CisKKwlyZXQgPSB2eGdlX2Z3X3VwZ3JhZGUodmRldiwgZndfbmFtZSwgMCk7CisJLyogLUVJTlZBTCBhbmQgLUVOT0VOVCBhcmUgbm90IGZhdGFsIGVycm9ycyBmb3IgZmxhc2hpbmcgZmlybXdhcmUgb24KKwkgKiBwcm9iZSwgc28gaWdub3JlIHRoZW0KKwkgKi8KKwlpZiAocmV0ICE9IC1FSU5WQUwgJiYgcmV0ICE9IC1FTk9FTlQpCisJCXJldHVybiAtRUlPOworCWVsc2UKKwkJcmV0ID0gMDsKKworCWlmIChWWEdFX0ZXX1ZFUihWWEdFX0NFUlRfRldfVkVSX01BSk9SLCBWWEdFX0NFUlRfRldfVkVSX01JTk9SLCAwKSA+CisJICAgIFZYR0VfRldfVkVSKG1haiwgbWluLCAwKSkgeworCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsICIlczogRmlybXdhcmUgJWQuJWQuJWQgaXMgdG9vIG9sZCB0byIKKwkJCQkiIGJlIHVzZWQgd2l0aCB0aGlzIGRyaXZlci5cbiIKKwkJCQkiUGxlYXNlIGdldCB0aGUgbGF0ZXN0IHZlcnNpb24gZnJvbSAiCisJCQkJImZ0cDovL2Z0cC5zMmlvLmNvbS9wdWIvWDMxMDAtRHJpdmVycy9GSVJNV0FSRSIsCisJCQkJVlhHRV9EUklWRVJfTkFNRSwgbWFqLCBtaW4sIGJsZCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGlzX3NyaW92X2luaXRpYWxpemVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCWludCBwb3M7CisJdTE2IGN0cmw7CisKKwlwb3MgPSBwY2lfZmluZF9leHRfY2FwYWJpbGl0eShwZGV2LCBQQ0lfRVhUX0NBUF9JRF9TUklPVik7CisJaWYgKHBvcykgeworCQlwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBwb3MgKyBQQ0lfU1JJT1ZfQ1RSTCwgJmN0cmwpOworCQlpZiAoY3RybCAmIFBDSV9TUklPVl9DVFJMX1ZGRSkKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKwogLyoqCiAgKiB2eGdlX3Byb2JlCiAgKiBAcGRldiA6IHN0cnVjdHVyZSBjb250YWluaW5nIHRoZSBQQ0kgcmVsYXRlZCBpbmZvcm1hdGlvbiBvZiB0aGUgZGV2aWNlLgpAQCAtMzkyOCw3ICs0MjE5LDcgQEAKIHN0YXRpYyBpbnQgX19kZXZpbml0CiB2eGdlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcHJlKQogewotCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICAqaGxkZXY7CisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2OwogCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzOwogCWludCByZXQ7CiAJaW50IGhpZ2hfZG1hID0gMDsKQEAgLTM5NTEsOSArNDI0MiwxMCBAQAogCWF0dHIucGRldiA9IHBkZXY7CiAKIAkvKiBJbiBTUklPVi0xNyBtb2RlLCBmdW5jdGlvbnMgb2YgdGhlIHNhbWUgYWRhcHRlcgotCSAqIGNhbiBiZSBkZXBsb3llZCBvbiBkaWZmZXJlbnQgYnVzZXMgKi8KLQlpZiAoKCFwZGV2LT5pc192aXJ0Zm4pICYmICgoYnVzICE9IHBkZXYtPmJ1cy0+bnVtYmVyKSB8fAotCQkoZGV2aWNlICE9IFBDSV9TTE9UKHBkZXYtPmRldmZuKSkpKQorCSAqIGNhbiBiZSBkZXBsb3llZCBvbiBkaWZmZXJlbnQgYnVzZXMKKwkgKi8KKwlpZiAoKChidXMgIT0gcGRldi0+YnVzLT5udW1iZXIpIHx8IChkZXZpY2UgIT0gUENJX1NMT1QocGRldi0+ZGV2Zm4pKSkgJiYKKwkgICAgIXBkZXYtPmlzX3ZpcnRmbikKIAkJbmV3X2RldmljZSA9IDE7CiAKIAlidXMgPSBwZGV2LT5idXMtPm51bWJlcjsKQEAgLTM5NzEsNiArNDI2Myw3IEBACiAJCWRyaXZlcl9jb25maWctPmNvbmZpZ19kZXZfY250ID0gMDsKIAkJZHJpdmVyX2NvbmZpZy0+dG90YWxfZGV2X2NudCA9IDA7CiAJfQorCiAJLyogTm93IG1ha2luZyB0aGUgQ1BVIGJhc2VkIG5vIG9mIHZwYXRoIGNhbGN1bGF0aW9uCiAJICogYXBwbGljYWJsZSBmb3IgaW5kaXZpZHVhbCBmdW5jdGlvbnMgYXMgd2VsbC4KIAkgKi8KQEAgLTM5OTMsMTEgKzQyODYsMTEgQEAKIAkJZ290byBfZXhpdDA7CiAJfQogCi0JbGxfY29uZmlnID0ga3phbGxvYyhzaXplb2YoKmxsX2NvbmZpZyksIEdGUF9LRVJORUwpOworCWxsX2NvbmZpZyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB2eGdlX2NvbmZpZyksIEdGUF9LRVJORUwpOwogCWlmICghbGxfY29uZmlnKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKLQkJCSJsbF9jb25maWcgOiBtYWxsb2MgZmFpbGVkICVzICVkIiwKKwkJCSJkZXZpY2VfY29uZmlnIDogbWFsbG9jIGZhaWxlZCAlcyAlZCIsCiAJCQlfX0ZJTEVfXywgX19MSU5FX18pOwogCQlnb3RvIF9leGl0MDsKIAl9CkBAIC00MDQxLDcgKzQzMzQsNyBAQAogCQlnb3RvIF9leGl0MTsKIAl9CiAKLQlpZiAocGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBWWEdFX0RSSVZFUl9OQU1FKSkgeworCWlmIChwY2lfcmVxdWVzdF9yZWdpb24ocGRldiwgMCwgVlhHRV9EUklWRVJfTkFNRSkpIHsKIAkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAogCQkJIiVzIDogcmVxdWVzdCByZWdpb25zIGZhaWxlZCIsIF9fZnVuY19fKTsKIAkJcmV0ID0gLUVOT0RFVjsKQEAgLTQwNzIsMTYgKzQzNjUsNiBAQAogCQlnb3RvIF9leGl0MzsKIAl9CiAKLQlpZiAobGxfY29uZmlnLT5kZXZpY2VfaHdfaW5mby5md192ZXJzaW9uLm1ham9yICE9Ci0JCVZYR0VfRFJJVkVSX0ZXX1ZFUlNJT05fTUFKT1IpIHsKLQkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAotCQkJIiVzOiBJbmNvcnJlY3QgZmlybXdhcmUgdmVyc2lvbi4iCi0JCQkiUGxlYXNlIHVwZ3JhZGUgdGhlIGZpcm13YXJlIHRvIHZlcnNpb24gMS54LngiLAotCQkJVlhHRV9EUklWRVJfTkFNRSk7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gX2V4aXQzOwotCX0KLQogCXZwYXRoX21hc2sgPSBsbF9jb25maWctPmRldmljZV9od19pbmZvLnZwYXRoX21hc2s7CiAJaWYgKHZwYXRoX21hc2sgPT0gMCkgewogCQl2eGdlX2RlYnVnX2xsX2NvbmZpZyhWWEdFX1RSQUNFLApAQCAtNDExMCwxNCArNDM5MywxMyBAQAogCQludW1fdmZzID0gdnhnZV9nZXRfbnVtX3ZmcyhmdW5jdGlvbl9tb2RlKSAtIDE7CiAKIAkvKiBFbmFibGUgU1JJT1YgbW9kZSwgaWYgZmlybXdhcmUgaGFzIFNSSU9WIHN1cHBvcnQgYW5kIGlmIGl0IGlzIGEgUEYgKi8KLQlpZiAoaXNfc3Jpb3YoZnVuY3Rpb25fbW9kZSkgJiYgKG1heF9jb25maWdfZGV2ID4gMSkgJiYKLQkJKGxsX2NvbmZpZy0+aW50cl90eXBlICE9IElOVEEpICYmCi0JCShpc19wcml2aWxlZ2VkID09IFZYR0VfSFdfT0spKSB7Ci0JCXJldCA9IHBjaV9lbmFibGVfc3Jpb3YocGRldiwgKChtYXhfY29uZmlnX2RldiAtIDEpIDwgbnVtX3ZmcykKLQkJCT8gKG1heF9jb25maWdfZGV2IC0gMSkgOiBudW1fdmZzKTsKKwlpZiAoaXNfc3Jpb3YoZnVuY3Rpb25fbW9kZSkgJiYgIWlzX3NyaW92X2luaXRpYWxpemVkKHBkZXYpICYmCisJICAgKGxsX2NvbmZpZy0+aW50cl90eXBlICE9IElOVEEpKSB7CisJCXJldCA9IHBjaV9lbmFibGVfc3Jpb3YocGRldiwgbnVtX3Zmcyk7CiAJCWlmIChyZXQpCiAJCQl2eGdlX2RlYnVnX2xsX2NvbmZpZyhWWEdFX0VSUiwKIAkJCQkiRmFpbGVkIGluIGVuYWJsaW5nIFNSSU9WIG1vZGU6ICVkXG4iLCByZXQpOworCQkJLyogTm8gbmVlZCB0byBmYWlsIG91dCwgYXMgYW4gZXJyb3IgaGVyZSBpcyBub24tZmF0YWwgKi8KIAl9CiAKIAkvKgpAQCAtNDE0NSwxMSArNDQyNywzNyBAQAogCQkJZ290byBfZXhpdDM7CiAJfQogCisJaWYgKFZYR0VfRldfVkVSKGxsX2NvbmZpZy0+ZGV2aWNlX2h3X2luZm8uZndfdmVyc2lvbi5tYWpvciwKKwkJCWxsX2NvbmZpZy0+ZGV2aWNlX2h3X2luZm8uZndfdmVyc2lvbi5taW5vciwKKwkJCWxsX2NvbmZpZy0+ZGV2aWNlX2h3X2luZm8uZndfdmVyc2lvbi5idWlsZCkgPj0KKwkgICAgVlhHRV9FUFJPTV9GV19WRVIpIHsKKwkJc3RydWN0IGVwcm9tX2ltYWdlIGltZ1tWWEdFX0hXX01BWF9ST01fSU1BR0VTXTsKKworCQlzdGF0dXMgPSB2eGdlX2h3X3ZwYXRoX2Vwcm9tX2ltZ192ZXJfZ2V0KGhsZGV2LCBpbWcpOworCQlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spIHsKKwkJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwgIiVzOiBSZWFkaW5nIG9mIEVQUk9NIGZhaWxlZCIsCisJCQkJCVZYR0VfRFJJVkVSX05BTUUpOworCQkJLyogVGhpcyBpcyBhIG5vbi1mYXRhbCBlcnJvciwgY29udGludWUgKi8KKwkJfQorCisJCWZvciAoaSA9IDA7IGkgPCBWWEdFX0hXX01BWF9ST01fSU1BR0VTOyBpKyspIHsKKwkJCWhsZGV2LT5lcHJvbV92ZXJzaW9uc1tpXSA9IGltZ1tpXS52ZXJzaW9uOworCQkJaWYgKCFpbWdbaV0uaXNfdmFsaWQpCisJCQkJYnJlYWs7CisJCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9UUkFDRSwgIiVzOiBFUFJPTSAlZCwgdmVyc2lvbiAiCisJCQkJCSIlZC4lZC4lZC4lZFxuIiwgVlhHRV9EUklWRVJfTkFNRSwgaSwKKwkJCQkJVlhHRV9FUFJPTV9JTUdfTUFKT1IoaW1nW2ldLnZlcnNpb24pLAorCQkJCQlWWEdFX0VQUk9NX0lNR19NSU5PUihpbWdbaV0udmVyc2lvbiksCisJCQkJCVZYR0VfRVBST01fSU1HX0ZJWChpbWdbaV0udmVyc2lvbiksCisJCQkJCVZYR0VfRVBST01fSU1HX0JVSUxEKGltZ1tpXS52ZXJzaW9uKSk7CisJCX0KKwl9CisKIAkvKiBpZiBGQ1Mgc3RyaXBwaW5nIGlzIG5vdCBkaXNhYmxlZCBpbiBNQUMgZmFpbCBkcml2ZXIgbG9hZCAqLwotCWlmICh2eGdlX2h3X3ZwYXRoX3N0cmlwX2Zjc19jaGVjayhobGRldiwgdnBhdGhfbWFzaykgIT0gVlhHRV9IV19PSykgewotCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCi0JCQkiJXM6IEZDUyBzdHJpcHBpbmcgaXMgbm90IGRpc2FibGVkIGluIE1BQyIKLQkJCSIgZmFpbGluZyBkcml2ZXIgbG9hZCIsIFZYR0VfRFJJVkVSX05BTUUpOworCXN0YXR1cyA9IHZ4Z2VfaHdfdnBhdGhfc3RyaXBfZmNzX2NoZWNrKGhsZGV2LCB2cGF0aF9tYXNrKTsKKwlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spIHsKKwkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLCAiJXM6IEZDUyBzdHJpcHBpbmcgaXMgZW5hYmxlZCBpbiBNQUMiCisJCQkJIiBmYWlsaW5nIGRyaXZlciBsb2FkIiwgVlhHRV9EUklWRVJfTkFNRSk7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gX2V4aXQ0OwogCX0KQEAgLTQxNjMsMjggKzQ0NzEsMzIgQEAKIAlsbF9jb25maWctPmZpZm9faW5kaWNhdGVfbWF4X3BrdHMgPSBWWEdFX0ZJRk9fSU5ESUNBVEVfTUFYX1BLVFM7CiAJbGxfY29uZmlnLT5hZGRyX2xlYXJuX2VuID0gYWRkcl9sZWFybl9lbjsKIAlsbF9jb25maWctPnJ0aF9hbGdvcml0aG0gPSBSVEhfQUxHX0pFTktJTlM7Ci0JbGxfY29uZmlnLT5ydGhfaGFzaF90eXBlX3RjcGlwdjQgPSBWWEdFX0hXX1JJTkdfSEFTSF9UWVBFX1RDUF9JUFY0OwotCWxsX2NvbmZpZy0+cnRoX2hhc2hfdHlwZV9pcHY0ID0gVlhHRV9IV19SSU5HX0hBU0hfVFlQRV9OT05FOwotCWxsX2NvbmZpZy0+cnRoX2hhc2hfdHlwZV90Y3BpcHY2ID0gVlhHRV9IV19SSU5HX0hBU0hfVFlQRV9OT05FOwotCWxsX2NvbmZpZy0+cnRoX2hhc2hfdHlwZV9pcHY2ID0gVlhHRV9IV19SSU5HX0hBU0hfVFlQRV9OT05FOwotCWxsX2NvbmZpZy0+cnRoX2hhc2hfdHlwZV90Y3BpcHY2ZXggPSBWWEdFX0hXX1JJTkdfSEFTSF9UWVBFX05PTkU7Ci0JbGxfY29uZmlnLT5ydGhfaGFzaF90eXBlX2lwdjZleCA9IFZYR0VfSFdfUklOR19IQVNIX1RZUEVfTk9ORTsKKwlsbF9jb25maWctPnJ0aF9oYXNoX3R5cGVfdGNwaXB2NCA9IDE7CisJbGxfY29uZmlnLT5ydGhfaGFzaF90eXBlX2lwdjQgPSAwOworCWxsX2NvbmZpZy0+cnRoX2hhc2hfdHlwZV90Y3BpcHY2ID0gMDsKKwlsbF9jb25maWctPnJ0aF9oYXNoX3R5cGVfaXB2NiA9IDA7CisJbGxfY29uZmlnLT5ydGhfaGFzaF90eXBlX3RjcGlwdjZleCA9IDA7CisJbGxfY29uZmlnLT5ydGhfaGFzaF90eXBlX2lwdjZleCA9IDA7CiAJbGxfY29uZmlnLT5ydGhfYmt0X3N6ID0gUlRIX0JVQ0tFVF9TSVpFOwogCWxsX2NvbmZpZy0+dHhfcGF1c2VfZW5hYmxlID0gVlhHRV9QQVVTRV9DVFJMX0VOQUJMRTsKIAlsbF9jb25maWctPnJ4X3BhdXNlX2VuYWJsZSA9IFZYR0VfUEFVU0VfQ1RSTF9FTkFCTEU7CiAKLQlpZiAodnhnZV9kZXZpY2VfcmVnaXN0ZXIoaGxkZXYsIGxsX2NvbmZpZywgaGlnaF9kbWEsIG5vX29mX3ZwYXRoLAotCQkmdmRldikpIHsKKwlyZXQgPSB2eGdlX2RldmljZV9yZWdpc3RlcihobGRldiwgbGxfY29uZmlnLCBoaWdoX2RtYSwgbm9fb2ZfdnBhdGgsCisJCQkJICAgJnZkZXYpOworCWlmIChyZXQpIHsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBfZXhpdDQ7CiAJfQogCisJcmV0ID0gdnhnZV9wcm9iZV9md191cGRhdGUodmRldik7CisJaWYgKHJldCkKKwkJZ290byBfZXhpdDU7CisKIAl2eGdlX2h3X2RldmljZV9kZWJ1Z19zZXQoaGxkZXYsIFZYR0VfVFJBQ0UsIFZYR0VfQ09NUE9ORU5UX0xMKTsKIAlWWEdFX0NPUFlfREVCVUdfSU5GT19UT19MTCh2ZGV2LCB2eGdlX2h3X2RldmljZV9lcnJvcl9sZXZlbF9nZXQoaGxkZXYpLAogCQl2eGdlX2h3X2RldmljZV90cmFjZV9sZXZlbF9nZXQoaGxkZXYpKTsKIAogCS8qIHNldCBwcml2YXRlIEhXIGRldmljZSBpbmZvICovCi0JaGxkZXYtPm5kZXYgPSB2ZGV2LT5uZGV2OwogCXZkZXYtPm10dSA9IFZYR0VfSFdfREVGQVVMVF9NVFU7CiAJdmRldi0+YmFyMCA9IGF0dHIuYmFyMDsKIAl2ZGV2LT5tYXhfdnBhdGhfc3VwcG9ydGVkID0gbWF4X3ZwYXRoX3N1cHBvcnRlZDsKQEAgLTQyNzgsMTUgKzQ1OTAsMTMgQEAKIAogCS8qIENvcHkgdGhlIHN0YXRpb24gbWFjIGFkZHJlc3MgdG8gdGhlIGxpc3QgKi8KIAlmb3IgKGkgPSAwOyBpIDwgdmRldi0+bm9fb2ZfdnBhdGg7IGkrKykgewotCQllbnRyeSA9CShzdHJ1Y3QgdnhnZV9tYWNfYWRkcnMgKikKLQkJCQlremFsbG9jKHNpemVvZihzdHJ1Y3QgdnhnZV9tYWNfYWRkcnMpLAotCQkJCQlHRlBfS0VSTkVMKTsKKwkJZW50cnkgPQlremFsbG9jKHNpemVvZihzdHJ1Y3QgdnhnZV9tYWNfYWRkcnMpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKE5VTEwgPT0gZW50cnkpIHsKIAkJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKIAkJCQkiJXM6IG1hY19hZGRyX2xpc3QgOiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQiLAogCQkJCXZkZXYtPm5kZXYtPm5hbWUpOwogCQkJcmV0ID0gLUVQRVJNOwotCQkJZ290byBfZXhpdDU7CisJCQlnb3RvIF9leGl0NjsKIAkJfQogCQltYWNhZGRyID0gKHU4ICopJmVudHJ5LT5tYWNhZGRyOwogCQltZW1jcHkobWFjYWRkciwgdmRldi0+bmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKQEAgLTQzMjYsMTAgKzQ2MzYsMTAgQEAKIAlrZnJlZShsbF9jb25maWcpOwogCXJldHVybiAwOwogCi1fZXhpdDU6CitfZXhpdDY6CiAJZm9yIChpID0gMDsgaSA8IHZkZXYtPm5vX29mX3ZwYXRoOyBpKyspCiAJCXZ4Z2VfZnJlZV9tYWNfYWRkX2xpc3QoJnZkZXYtPnZwYXRoc1tpXSk7Ci0KK19leGl0NToKIAl2eGdlX2RldmljZV91bnJlZ2lzdGVyKGhsZGV2KTsKIF9leGl0NDoKIAlwY2lfZGlzYWJsZV9zcmlvdihwZGV2KTsKQEAgLTQzMzcsNyArNDY0Nyw3IEBACiBfZXhpdDM6CiAJaW91bm1hcChhdHRyLmJhcjApOwogX2V4aXQyOgotCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CisJcGNpX3JlbGVhc2VfcmVnaW9uKHBkZXYsIDApOwogX2V4aXQxOgogCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIF9leGl0MDoKQEAgLTQzNTQsMzQgKzQ2NjQsMjUgQEAKICAqIERlc2NyaXB0aW9uOiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgUGNpIHN1YnN5c3RlbSB0byByZWxlYXNlIGEKICAqIFBDSSBkZXZpY2UgYW5kIGZyZWUgdXAgYWxsIHJlc291cmNlIGhlbGQgdXAgYnkgdGhlIGRldmljZS4KICAqLwotc3RhdGljIHZvaWQgX19kZXZleGl0Ci12eGdlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCB2eGdlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKLQlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAgKmhsZGV2OworCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldjsKIAlzdHJ1Y3QgdnhnZWRldiAqdmRldiA9IE5VTEw7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlpbnQgaSA9IDA7Ci0jaWYgKChWWEdFX0RFQlVHX0lOSVQgJiBWWEdFX0RFQlVHX01BU0spIHx8IFwKLQkoVlhHRV9ERUJVR19FTlRSWUVYSVQgJiBWWEdFX0RFQlVHX01BU0spKQotCXUzMiBsZXZlbF90cmFjZTsKLSNlbmRpZgogCi0JaGxkZXYgPSAoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgICopIHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlobGRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAogCWlmIChobGRldiA9PSBOVUxMKQogCQlyZXR1cm47CisKIAlkZXYgPSBobGRldi0+bmRldjsKIAl2ZGV2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotI2lmICgoVlhHRV9ERUJVR19JTklUICYgVlhHRV9ERUJVR19NQVNLKSB8fCBcCi0JKFZYR0VfREVCVUdfRU5UUllFWElUICYgVlhHRV9ERUJVR19NQVNLKSkKLQlsZXZlbF90cmFjZSA9IHZkZXYtPmxldmVsX3RyYWNlOwotI2VuZGlmCi0JdnhnZV9kZWJ1Z19lbnRyeWV4aXQobGV2ZWxfdHJhY2UsCi0JCSIlczolZCIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisJdnhnZV9kZWJ1Z19lbnRyeWV4aXQodmRldi0+bGV2ZWxfdHJhY2UsCSIlczolZCIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CiAKLQl2eGdlX2RlYnVnX2luaXQobGV2ZWxfdHJhY2UsCi0JCSIlcyA6IHJlbW92aW5nIFBDSSBkZXZpY2UuLi4iLCBfX2Z1bmNfXyk7CisJdnhnZV9kZWJ1Z19pbml0KHZkZXYtPmxldmVsX3RyYWNlLCAiJXMgOiByZW1vdmluZyBQQ0kgZGV2aWNlLi4uIiwKKwkJCV9fZnVuY19fKTsKIAl2eGdlX2RldmljZV91bnJlZ2lzdGVyKGhsZGV2KTsKIAogCWZvciAoaSA9IDA7IGkgPCB2ZGV2LT5ub19vZl92cGF0aDsgaSsrKSB7CkBAIC00Mzk0LDIxICs0Njk1LDE5IEBACiAKIAlpb3VubWFwKHZkZXYtPmJhcjApOwogCi0JcGNpX2Rpc2FibGVfc3Jpb3YocGRldik7Ci0KIAkvKiB3ZSBhcmUgc2FmZSB0byBmcmVlIGl0IG5vdyAqLwogCWZyZWVfbmV0ZGV2KGRldik7CiAKLQl2eGdlX2RlYnVnX2luaXQobGV2ZWxfdHJhY2UsCi0JCSIlczolZCAgRGV2aWNlIHVucmVnaXN0ZXJlZCIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisJdnhnZV9kZWJ1Z19pbml0KHZkZXYtPmxldmVsX3RyYWNlLCAiJXM6JWQgRGV2aWNlIHVucmVnaXN0ZXJlZCIsCisJCQlfX2Z1bmNfXywgX19MSU5FX18pOwogCiAJdnhnZV9od19kZXZpY2VfdGVybWluYXRlKGhsZGV2KTsKIAogCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKLQlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworCXBjaV9yZWxlYXNlX3JlZ2lvbihwZGV2LCAwKTsKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7Ci0JdnhnZV9kZWJ1Z19lbnRyeWV4aXQobGV2ZWxfdHJhY2UsCi0JCSIlczolZCAgRXhpdGluZy4uLiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisJdnhnZV9kZWJ1Z19lbnRyeWV4aXQodmRldi0+bGV2ZWxfdHJhY2UsCSIlczolZCAgRXhpdGluZy4uLiIsIF9fZnVuY19fLAorCQkJICAgICBfX0xJTkVfXyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHZ4Z2VfZXJyX2hhbmRsZXIgPSB7CkBAIC00NDQ0LDYgKzQ3NDMsMTAgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlyZXQgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZ2eGdlX2RyaXZlcik7CisJaWYgKHJldCkgeworCQlrZnJlZShkcml2ZXJfY29uZmlnKTsKKwkJZ290byBlcnI7CisJfQogCiAJaWYgKGRyaXZlcl9jb25maWctPmNvbmZpZ19kZXZfY250ICYmCiAJICAgKGRyaXZlcl9jb25maWctPmNvbmZpZ19kZXZfY250ICE9IGRyaXZlcl9jb25maWctPnRvdGFsX2Rldl9jbnQpKQpAQCAtNDQ1MSwxMCArNDc1NCw3IEBACiAJCQkiJXM6IENvbmZpZ3VyZWQgJWQgb2YgJWQgZGV2aWNlcyIsCiAJCQlWWEdFX0RSSVZFUl9OQU1FLCBkcml2ZXJfY29uZmlnLT5jb25maWdfZGV2X2NudCwKIAkJCWRyaXZlcl9jb25maWctPnRvdGFsX2Rldl9jbnQpOwotCi0JaWYgKHJldCkKLQkJa2ZyZWUoZHJpdmVyX2NvbmZpZyk7Ci0KK2VycjoKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtbWFpbi5oIGIvZHJpdmVycy9uZXQvdnhnZS92eGdlLW1haW4uaAppbmRleCBkZTY0NTM2Li41NzQ2ZmVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtbWFpbi5oCisrKyBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1tYWluLmgKQEAgLTI5LDYgKzI5LDkgQEAKIAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJVEFOX1dJTgkJMHg1NzMzCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElUQU5fVU5JCQkweDU4MzMKKyNkZWZpbmUgVlhHRV9IV19USVRBTjFfUENJX1JFVklTSU9OCTEKKyNkZWZpbmUgVlhHRV9IV19USVRBTjFBX1BDSV9SRVZJU0lPTgkyCisKICNkZWZpbmUJVlhHRV9VU0VfREVGQVVMVAkJMHhmZmZmZmZmZgogI2RlZmluZSBWWEdFX0hXX1ZQQVRIX01TSVhfQUNUSVZFCTQKICNkZWZpbmUgVlhHRV9BTEFSTV9NU0lYX0lECQkyCkBAIC01MywxMSArNTYsMTMgQEAKIAogI2RlZmluZSBWWEdFX1RUSV9CVElNRVJfVkFMIDI1MDAwMAogCi0jZGVmaW5lIFZYR0VfVFRJX0xUSU1FUl9WQUwgMTAwMAotI2RlZmluZSBWWEdFX1RUSV9SVElNRVJfVkFMIDAKLSNkZWZpbmUgVlhHRV9SVElfQlRJTUVSX1ZBTCAyNTAKLSNkZWZpbmUgVlhHRV9SVElfTFRJTUVSX1ZBTCAxMDAKLSNkZWZpbmUgVlhHRV9SVElfUlRJTUVSX1ZBTCAwCisjZGVmaW5lIFZYR0VfVFRJX0xUSU1FUl9WQUwJMTAwMAorI2RlZmluZSBWWEdFX1QxQV9UVElfTFRJTUVSX1ZBTAk4MAorI2RlZmluZSBWWEdFX1RUSV9SVElNRVJfVkFMCTAKKyNkZWZpbmUgVlhHRV9UMUFfVFRJX1JUSU1FUl9WQUwJNDAwCisjZGVmaW5lIFZYR0VfUlRJX0JUSU1FUl9WQUwJMjUwCisjZGVmaW5lIFZYR0VfUlRJX0xUSU1FUl9WQUwJMTAwCisjZGVmaW5lIFZYR0VfUlRJX1JUSU1FUl9WQUwJMAogI2RlZmluZSBWWEdFX0ZJRk9fSU5ESUNBVEVfTUFYX1BLVFMgVlhHRV9ERUZfRklGT19MRU5HVEgKICNkZWZpbmUgVlhHRV9JU1JfUE9MTElOR19DTlQgCTgKICNkZWZpbmUgVlhHRV9NQVhfQ09ORklHX0RFVgkweEZGCkBAIC03NiwxNCArODEsMzIgQEAKICNkZWZpbmUgVFRJX1RYX1VGQ19CCTQwCiAjZGVmaW5lIFRUSV9UWF9VRkNfQwk2MAogI2RlZmluZSBUVElfVFhfVUZDX0QJMTAwCisjZGVmaW5lIFRUSV9UMUFfVFhfVUZDX0EJMzAKKyNkZWZpbmUgVFRJX1QxQV9UWF9VRkNfQgk4MAorLyogU2xvcGUgLSAobWF4X210dSAtIG1pbl9tdHUpLyhtYXhfbXR1X3VmYyAtIG1pbl9tdHVfdWZjKSAqLworLyogU2xvcGUgLSA5MyAqLworLyogNjAgLSA5ayBNdHUsIDE0MCAtIDEuNWsgbXR1ICovCisjZGVmaW5lIFRUSV9UMUFfVFhfVUZDX0MobXR1KQkoNjAgKyAoKFZYR0VfSFdfTUFYX01UVSAtIG10dSkgLyA5MykpCiAKLSNkZWZpbmUgUlRJX1JYX1VSQU5HRV9BCTUKLSNkZWZpbmUgUlRJX1JYX1VSQU5HRV9CCTE1Ci0jZGVmaW5lIFJUSV9SWF9VUkFOR0VfQwk0MAotI2RlZmluZSBSVElfUlhfVUZDX0EJMQotI2RlZmluZSBSVElfUlhfVUZDX0IJNQotI2RlZmluZSBSVElfUlhfVUZDX0MJMTAKLSNkZWZpbmUgUlRJX1JYX1VGQ19ECTE1CisvKiBTbG9wZSAtIDM3ICovCisvKiAxMDAgLSA5ayBNdHUsIDMwMCAtIDEuNWsgbXR1ICovCisjZGVmaW5lIFRUSV9UMUFfVFhfVUZDX0QobXR1KQkoMTAwICsgKChWWEdFX0hXX01BWF9NVFUgLSBtdHUpIC8gMzcpKQorCisKKyNkZWZpbmUgUlRJX1JYX1VSQU5HRV9BCQk1CisjZGVmaW5lIFJUSV9SWF9VUkFOR0VfQgkJMTUKKyNkZWZpbmUgUlRJX1JYX1VSQU5HRV9DCQk0MAorI2RlZmluZSBSVElfVDFBX1JYX1VSQU5HRV9BCTEKKyNkZWZpbmUgUlRJX1QxQV9SWF9VUkFOR0VfQgkyMAorI2RlZmluZSBSVElfVDFBX1JYX1VSQU5HRV9DCTUwCisjZGVmaW5lIFJUSV9SWF9VRkNfQQkJMQorI2RlZmluZSBSVElfUlhfVUZDX0IJCTUKKyNkZWZpbmUgUlRJX1JYX1VGQ19DCQkxMAorI2RlZmluZSBSVElfUlhfVUZDX0QJCTE1CisjZGVmaW5lIFJUSV9UMUFfUlhfVUZDX0IJMjAKKyNkZWZpbmUgUlRJX1QxQV9SWF9VRkNfQwk1MAorI2RlZmluZSBSVElfVDFBX1JYX1VGQ19ECTYwCisKIAogLyogTWlsbGkgc2VjcyB0aW1lciBwZXJpb2QgKi8KICNkZWZpbmUgVlhHRV9USU1FUl9ERUxBWQkJMTAwMDAKQEAgLTE0NSwxNSArMTY4LDE1IEBACiAKIAlpbnQJCWFkZHJfbGVhcm5fZW47CiAKLQlpbnQJCXJ0aF9zdGVlcmluZzsKLQlpbnQJCXJ0aF9hbGdvcml0aG07Ci0JaW50CQlydGhfaGFzaF90eXBlX3RjcGlwdjQ7Ci0JaW50CQlydGhfaGFzaF90eXBlX2lwdjQ7Ci0JaW50CQlydGhfaGFzaF90eXBlX3RjcGlwdjY7Ci0JaW50CQlydGhfaGFzaF90eXBlX2lwdjY7Ci0JaW50CQlydGhfaGFzaF90eXBlX3RjcGlwdjZleDsKLQlpbnQJCXJ0aF9oYXNoX3R5cGVfaXB2NmV4OwotCWludAkJcnRoX2JrdF9zejsKKwl1MzIJCXJ0aF9zdGVlcmluZzoyLAorCQkJcnRoX2FsZ29yaXRobToyLAorCQkJcnRoX2hhc2hfdHlwZV90Y3BpcHY0OjEsCisJCQlydGhfaGFzaF90eXBlX2lwdjQ6MSwKKwkJCXJ0aF9oYXNoX3R5cGVfdGNwaXB2NjoxLAorCQkJcnRoX2hhc2hfdHlwZV9pcHY2OjEsCisJCQlydGhfaGFzaF90eXBlX3RjcGlwdjZleDoxLAorCQkJcnRoX2hhc2hfdHlwZV9pcHY2ZXg6MSwKKwkJCXJ0aF9ia3Rfc3o6ODsKIAlpbnQJCXJ0aF9qaGFzaF9nb2xkZW5fcmF0aW87CiAJaW50CQl0eF9zdGVlcmluZ190eXBlOwogCWludCAJZmlmb19pbmRpY2F0ZV9tYXhfcGt0czsKQEAgLTI0OCw4ICsyNzEsOSBAQAogCSAqLwogCWludCBkcml2ZXJfaWQ7CiAKLQkgLyogY29weSBvZiB0aGUgZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgcnhfY3N1bSBpcyB0byBiZSB1c2VkICovCi0JdTMyIHJ4X2NzdW07CisJLyogY29weSBvZiB0aGUgZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgcnhfY3N1bSBpcyB0byBiZSB1c2VkICovCisJdTMyIHJ4X2NzdW06MSwKKwkgICAgcnhfaHd0czoxOwogCiAJaW50IHBrdHNfcHJvY2Vzc2VkOwogCWludCBidWRnZXQ7CkBAIC0yODEsOCArMzA1LDggQEAKIAlpbnQgaXNfY29uZmlndXJlZDsKIAlpbnQgaXNfb3BlbjsKIAlzdHJ1Y3QgdnhnZWRldiAqdmRldjsKLQl1OCAobWFjYWRkcilbRVRIX0FMRU5dOwotCXU4IChtYWNtYXNrKVtFVEhfQUxFTl07CisJdTggbWFjYWRkcltFVEhfQUxFTl07CisJdTggbWFjbWFza1tFVEhfQUxFTl07CiAKICNkZWZpbmUgVlhHRV9NQVhfTEVBUk5fTUFDX0FERFJfQ05UCTIwNDgKIAkvKiBtYWMgYWRkcmVzc2VzIGN1cnJlbnRseSBwcm9ncmFtbWVkIGludG8gTklDICovCkBAIC0zMjcsNyArMzUxLDkgQEAKIAl1MTYJCWFsbF9tdWx0aV9mbGc7CiAKIAkgLyogQSBmbGFnIGluZGljYXRpbmcgd2hldGhlciByeF9jc3VtIGlzIHRvIGJlIHVzZWQgb3Igbm90LiAqLwotCXUzMglyeF9jc3VtOworCXUzMglyeF9jc3VtOjEsCisJCXJ4X2h3dHM6MSwKKwkJdGl0YW4xOjE7CiAKIAlzdHJ1Y3QgdnhnZV9tc2l4X2VudHJ5ICp2eGdlX2VudHJpZXM7CiAJc3RydWN0IG1zaXhfZW50cnkgKmVudHJpZXM7CkBAIC0zNjksNiArMzk1LDcgQEAKIAl1MzIgCQlsZXZlbF9lcnI7CiAJdTMyIAkJbGV2ZWxfdHJhY2U7CiAJY2hhcgkJZndfdmVyc2lvbltWWEdFX0hXX0ZXX1NUUkxFTl07CisJc3RydWN0IHdvcmtfc3RydWN0IHJlc2V0X3Rhc2s7CiB9OwogCiBzdHJ1Y3QgdnhnZV9yeF9wcml2IHsKQEAgLTM4Nyw4ICs0MTQsNiBAQAogCXN0YXRpYyBpbnQgcCA9IHZhbDsgXAogCW1vZHVsZV9wYXJhbShwLCBpbnQsIDApCiAKLSNkZWZpbmUgdnhnZV9vc19idWcoZm10Li4uKQkJeyBwcmludGsoZm10KTsgQlVHKCk7IH0KLQogI2RlZmluZSB2eGdlX29zX3RpbWVyKHRpbWVyLCBoYW5kbGUsIGFyZywgZXhwKSBkbyB7IFwKIAkJaW5pdF90aW1lcigmdGltZXIpOyBcCiAJCXRpbWVyLmZ1bmN0aW9uID0gaGFuZGxlOyBcCkBAIC0zOTYsNyArNDIxLDEwIEBACiAJCW1vZF90aW1lcigmdGltZXIsIChqaWZmaWVzICsgZXhwKSk7IFwKIAl9IHdoaWxlICgwKTsKIAotZXh0ZXJuIHZvaWQgdnhnZV9pbml0aWFsaXplX2V0aHRvb2xfb3BzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTsKK3ZvaWQgdnhnZV9pbml0aWFsaXplX2V0aHRvb2xfb3BzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTsKK2VudW0gdnhnZV9od19zdGF0dXMgdnhnZV9yZXNldF9hbGxfdnBhdGhzKHN0cnVjdCB2eGdlZGV2ICp2ZGV2KTsKK2ludCB2eGdlX2Z3X3VwZ3JhZGUoc3RydWN0IHZ4Z2VkZXYgKnZkZXYsIGNoYXIgKmZ3X25hbWUsIGludCBvdmVycmlkZSk7CisKIC8qKgogICogI2RlZmluZSBWWEdFX0RFQlVHX0lOSVQ6IGRlYnVnIGZvciBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMKICAqICNkZWZpbmUgVlhHRV9ERUJVR19UWAkgOiBkZWJ1ZyB0cmFuc21pdCByZWxhdGVkIGZ1bmN0aW9ucwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdnhnZS92eGdlLXJlZy5oIGIvZHJpdmVycy9uZXQvdnhnZS92eGdlLXJlZy5oCmluZGV4IDNkZDVjOTYuLjNlNjU4YjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1yZWcuaAorKysgYi9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtcmVnLmgKQEAgLTQ5LDYgKzQ5LDMzIEBACiAjZGVmaW5lIFZYR0VfSFdfVElUQU5fVlBNR01UX1JFR19TUEFDRVMJCQkxNwogI2RlZmluZSBWWEdFX0hXX1RJVEFOX1ZQQVRIX1JFR19TUEFDRVMJCQkxNwogCisjZGVmaW5lIFZYR0VfSFdfRldfQVBJX0dFVF9FUFJPTV9SRVYJCQkzMQorCisjZGVmaW5lIFZYR0VfRVBST01fSU1HX01BSk9SKHZhbCkJCSh1MzIpIHZ4Z2VfYlZBTG4odmFsLCA0OCwgNCkKKyNkZWZpbmUgVlhHRV9FUFJPTV9JTUdfTUlOT1IodmFsKQkJKHUzMikgdnhnZV9iVkFMbih2YWwsIDUyLCA0KQorI2RlZmluZSBWWEdFX0VQUk9NX0lNR19GSVgodmFsKQkJCSh1MzIpIHZ4Z2VfYlZBTG4odmFsLCA1NiwgNCkKKyNkZWZpbmUgVlhHRV9FUFJPTV9JTUdfQlVJTEQodmFsKQkJKHUzMikgdnhnZV9iVkFMbih2YWwsIDYwLCA0KQorCisjZGVmaW5lIFZYR0VfSFdfR0VUX0VQUk9NX0lNQUdFX0lOREVYKHZhbCkJCXZ4Z2VfYlZBTG4odmFsLCAxNiwgOCkKKyNkZWZpbmUgVlhHRV9IV19HRVRfRVBST01fSU1BR0VfVkFMSUQodmFsKQkJdnhnZV9iVkFMbih2YWwsIDMxLCAxKQorI2RlZmluZSBWWEdFX0hXX0dFVF9FUFJPTV9JTUFHRV9UWVBFKHZhbCkJCXZ4Z2VfYlZBTG4odmFsLCA0MCwgOCkKKyNkZWZpbmUgVlhHRV9IV19HRVRfRVBST01fSU1BR0VfUkVWKHZhbCkJCXZ4Z2VfYlZBTG4odmFsLCA0OCwgMTYpCisjZGVmaW5lIFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9ST01fSU1BR0VfSU5ERVgodmFsKQl2eGdlX3ZCSVQodmFsLCAxNiwgOCkKKworI2RlZmluZSBWWEdFX0hXX0ZXX0FQSV9HRVRfRlVOQ19NT0RFCQkJMjkKKyNkZWZpbmUgVlhHRV9IV19HRVRfRlVOQ19NT0RFX1ZBTCh2YWwpCQkJKHZhbCAmIDB4RkYpCisKKyNkZWZpbmUgVlhHRV9IV19GV19VUEdSQURFX01FTU8JCQkJMTMKKyNkZWZpbmUgVlhHRV9IV19GV19VUEdSQURFX0FDVElPTgkJCTE2CisjZGVmaW5lIFZYR0VfSFdfRldfVVBHUkFERV9PRkZTRVRfU1RBUlQJCQkyCisjZGVmaW5lIFZYR0VfSFdfRldfVVBHUkFERV9PRkZTRVRfU0VORAkJCTMKKyNkZWZpbmUgVlhHRV9IV19GV19VUEdSQURFX09GRlNFVF9DT01NSVQJCTQKKyNkZWZpbmUgVlhHRV9IV19GV19VUEdSQURFX09GRlNFVF9SRUFECQkJNQorCisjZGVmaW5lIFZYR0VfSFdfRldfVVBHUkFERV9CTEtfU0laRQkJCTE2CisjZGVmaW5lIFZYR0VfSFdfVVBHUkFERV9HRVRfUkVUX0VSUl9DT0RFKHZhbCkJCSh2YWwgJiAweGZmKQorI2RlZmluZSBWWEdFX0hXX1VQR1JBREVfR0VUX1NFQ19FUlJfQ09ERSh2YWwpCQkoKHZhbCA+PiA4KSAmIDB4ZmYpCisKICNkZWZpbmUgVlhHRV9IV19BU0lDX01PREVfUkVTRVJWRUQJCQkJMAogI2RlZmluZSBWWEdFX0hXX0FTSUNfTU9ERV9OT19JT1YJCQkJMQogI2RlZmluZSBWWEdFX0hXX0FTSUNfTU9ERV9TUl9JT1YJCQkJMgpAQCAtMTY1LDEzICsxOTIsMTMgQEAKICNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX0VUWVBFCQkyCiAjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9QTgkJMwogI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfUlRIX0dFTl9DRkcJNQotI2RlZmluZQlWWEdFX0hXX1JUU19BQ1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfUlRIX1NPTE9fSVQJNgorI2RlZmluZQlWWEdFX0hXX1JUU19BQ1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfUlRIX1NPTE9fSVQJCTYKICNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX1JUSF9KSEFTSF9DRkcJNwogI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfUlRIX01BU0sJCTgKICNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX1JUSF9LRVkJCTkKICNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX1FPUwkJMTAKICNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX0RTCQkxMQotI2RlZmluZQlWWEdFX0hXX1JUU19BQ1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfUlRIX01VTFRJX0lUCTEyCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9SVEhfTVVMVElfSVQJCTEyCiAjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9GV19NRU1PCQkxMwogCiAjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9HRVRfREFfTUFDX0FERFIoYml0cykgXApAQCAtNDM3LDYgKzQ2NCw3IEBACiAjZGVmaW5lIFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9HRVRfRkxBU0hfVkVSX0JVSUxEKGJpdHMpIFwKIAkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDQ4LCAxNikKICNkZWZpbmUgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX0ZMQVNIX1ZFUl9CVUlMRCB2eGdlX3ZCSVQodmFsLCA0OCwgMTYpCisjZGVmaW5lIFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0dFVF9BQ1RJT04oYml0cykgdnhnZV9iVkFMbihiaXRzLCAwLCA4KQogCiAjZGVmaW5lCVZYR0VfSFdfU1JQQ0lNX1RPX1ZQQVRIX0FMQVJNX1JFR19HRVRfUFBJRl9TUlBDSU1fVE9fVlBBVEhfQUxBUk0oYml0cylcCiAJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAwLCAxOCkKQEAgLTM5OTgsNiArNDAyNiw3IEBACiAjZGVmaW5lCVZYR0VfSFdfUFJDX0NGRzZfTDRfQ1BDX1RSU0ZSX0NPREVfRU4JdnhnZV9tQklUKDkpCiAjZGVmaW5lIFZYR0VfSFdfUFJDX0NGRzZfUlhEX0NSWERUKHZhbCkgdnhnZV92QklUKHZhbCwgMjMsIDkpCiAjZGVmaW5lIFZYR0VfSFdfUFJDX0NGRzZfUlhEX1NQQVQodmFsKSB2eGdlX3ZCSVQodmFsLCAzNiwgOSkKKyNkZWZpbmUgVlhHRV9IV19QUkNfQ0ZHNl9HRVRfUlhEX1NQQVQodmFsKQl2eGdlX2JWQUxuKHZhbCwgMzYsIDkpCiAvKjB4MDBhNzgqLwl1NjQJcHJjX2NmZzc7CiAjZGVmaW5lIFZYR0VfSFdfUFJDX0NGRzdfU0NBVFRFUl9NT0RFKHZhbCkgdnhnZV92QklUKHZhbCwgNiwgMikKICNkZWZpbmUJVlhHRV9IV19QUkNfQ0ZHN19TTUFSVF9TQ0FUX0VOCXZ4Z2VfbUJJVCgxMSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS10cmFmZmljLmMgYi9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtdHJhZmZpYy5jCmluZGV4IDRiZGI2MTEuLjRjMTBkNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS10cmFmZmljLmMKKysrIGIvZHJpdmVycy9uZXQvdnhnZS92eGdlLXRyYWZmaWMuYwpAQCAtMTcsMTMgKzE3LDYgQEAKICNpbmNsdWRlICJ2eGdlLWNvbmZpZy5oIgogI2luY2x1ZGUgInZ4Z2UtbWFpbi5oIgogCi1zdGF0aWMgZW51bSB2eGdlX2h3X3N0YXR1cwotX192eGdlX2h3X2RldmljZV9oYW5kbGVfZXJyb3Ioc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2LAotCQkJICAgICAgdTMyIHZwX2lkLCBlbnVtIHZ4Z2VfaHdfZXZlbnQgdHlwZSk7Ci1zdGF0aWMgZW51bSB2eGdlX2h3X3N0YXR1cwotX192eGdlX2h3X3ZwYXRoX2FsYXJtX3Byb2Nlc3Moc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aCAqdnBhdGgsCi0JCQkgICAgICB1MzIgc2tpcF9hbGFybXMpOwotCiAvKgogICogdnhnZV9od192cGF0aF9pbnRyX2VuYWJsZSAtIEVuYWJsZSB2cGF0aCBpbnRlcnJ1cHRzLgogICogQHZwOiBWaXJ0dWFsIFBhdGggaGFuZGxlLgpAQCAtNDE5LDYgKzQxMiwzODQgQEAKIH0KIAogLyoqCisgKiBfX3Z4Z2VfaHdfZGV2aWNlX2hhbmRsZV9lcnJvciAtIEhhbmRsZSBlcnJvcgorICogQGhsZGV2OiBIVyBkZXZpY2UKKyAqIEB2cF9pZDogVnBhdGggSWQKKyAqIEB0eXBlOiBFcnJvciB0eXBlLiBQbGVhc2Ugc2VlIGVudW0gdnhnZV9od19ldmVudHt9CisgKgorICogSGFuZGxlIGVycm9yLgorICovCitzdGF0aWMgZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X2RldmljZV9oYW5kbGVfZXJyb3Ioc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2LCB1MzIgdnBfaWQsCisJCQkgICAgICBlbnVtIHZ4Z2VfaHdfZXZlbnQgdHlwZSkKK3sKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIFZYR0VfSFdfRVZFTlRfVU5LTk9XTjoKKwkJYnJlYWs7CisJY2FzZSBWWEdFX0hXX0VWRU5UX1JFU0VUX1NUQVJUOgorCWNhc2UgVlhHRV9IV19FVkVOVF9SRVNFVF9DT01QTEVURToKKwljYXNlIFZYR0VfSFdfRVZFTlRfTElOS19ET1dOOgorCWNhc2UgVlhHRV9IV19FVkVOVF9MSU5LX1VQOgorCQlnb3RvIG91dDsKKwljYXNlIFZYR0VfSFdfRVZFTlRfQUxBUk1fQ0xFQVJFRDoKKwkJZ290byBvdXQ7CisJY2FzZSBWWEdFX0hXX0VWRU5UX0VDQ0VSUjoKKwljYXNlIFZYR0VfSFdfRVZFTlRfTVJQQ0lNX0VDQ0VSUjoKKwkJZ290byBvdXQ7CisJY2FzZSBWWEdFX0hXX0VWRU5UX0ZJRk9fRVJSOgorCWNhc2UgVlhHRV9IV19FVkVOVF9WUEFUSF9FUlI6CisJY2FzZSBWWEdFX0hXX0VWRU5UX0NSSVRJQ0FMX0VSUjoKKwljYXNlIFZYR0VfSFdfRVZFTlRfU0VSUjoKKwkJYnJlYWs7CisJY2FzZSBWWEdFX0hXX0VWRU5UX1NSUENJTV9TRVJSOgorCWNhc2UgVlhHRV9IV19FVkVOVF9NUlBDSU1fU0VSUjoKKwkJZ290byBvdXQ7CisJY2FzZSBWWEdFX0hXX0VWRU5UX1NMT1RfRlJFRVpFOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQl2eGdlX2Fzc2VydCgwKTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogbm90aWZ5IGRyaXZlciAqLworCWlmIChobGRldi0+dWxkX2NhbGxiYWNrcy5jcml0X2VycikKKwkJaGxkZXYtPnVsZF9jYWxsYmFja3MuY3JpdF9lcnIoCisJCQkoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKilobGRldiwKKwkJCXR5cGUsIHZwX2lkKTsKK291dDoKKworCXJldHVybiBWWEdFX0hXX09LOworfQorCisvKgorICogX192eGdlX2h3X2RldmljZV9oYW5kbGVfbGlua19kb3duX2luZAorICogQGhsZGV2OiBIVyBkZXZpY2UgaGFuZGxlLgorICoKKyAqIExpbmsgZG93biBpbmRpY2F0aW9uIGhhbmRsZXIuIFRoZSBmdW5jdGlvbiBpcyBpbnZva2VkIGJ5IEhXIHdoZW4KKyAqIFRpdGFuIGluZGljYXRlcyB0aGF0IHRoZSBsaW5rIGlzIGRvd24uCisgKi8KK3N0YXRpYyBlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfZGV2aWNlX2hhbmRsZV9saW5rX2Rvd25faW5kKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldikKK3sKKwkvKgorCSAqIElmIHRoZSBwcmV2aW91cyBsaW5rIHN0YXRlIGlzIG5vdCBkb3duLCByZXR1cm4uCisJICovCisJaWYgKGhsZGV2LT5saW5rX3N0YXRlID09IFZYR0VfSFdfTElOS19ET1dOKQorCQlnb3RvIGV4aXQ7CisKKwlobGRldi0+bGlua19zdGF0ZSA9IFZYR0VfSFdfTElOS19ET1dOOworCisJLyogbm90aWZ5IGRyaXZlciAqLworCWlmIChobGRldi0+dWxkX2NhbGxiYWNrcy5saW5rX2Rvd24pCisJCWhsZGV2LT51bGRfY2FsbGJhY2tzLmxpbmtfZG93bihobGRldik7CitleGl0OgorCXJldHVybiBWWEdFX0hXX09LOworfQorCisvKgorICogX192eGdlX2h3X2RldmljZV9oYW5kbGVfbGlua191cF9pbmQKKyAqIEBobGRldjogSFcgZGV2aWNlIGhhbmRsZS4KKyAqCisgKiBMaW5rIHVwIGluZGljYXRpb24gaGFuZGxlci4gVGhlIGZ1bmN0aW9uIGlzIGludm9rZWQgYnkgSFcgd2hlbgorICogVGl0YW4gaW5kaWNhdGVzIHRoYXQgdGhlIGxpbmsgaXMgdXAgZm9yIHByb2dyYW1tYWJsZSBhbW91bnQgb2YgdGltZS4KKyAqLworc3RhdGljIGVudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od19kZXZpY2VfaGFuZGxlX2xpbmtfdXBfaW5kKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldikKK3sKKwkvKgorCSAqIElmIHRoZSBwcmV2aW91cyBsaW5rIHN0YXRlIGlzIG5vdCBkb3duLCByZXR1cm4uCisJICovCisJaWYgKGhsZGV2LT5saW5rX3N0YXRlID09IFZYR0VfSFdfTElOS19VUCkKKwkJZ290byBleGl0OworCisJaGxkZXYtPmxpbmtfc3RhdGUgPSBWWEdFX0hXX0xJTktfVVA7CisKKwkvKiBub3RpZnkgZHJpdmVyICovCisJaWYgKGhsZGV2LT51bGRfY2FsbGJhY2tzLmxpbmtfdXApCisJCWhsZGV2LT51bGRfY2FsbGJhY2tzLmxpbmtfdXAoaGxkZXYpOworZXhpdDoKKwlyZXR1cm4gVlhHRV9IV19PSzsKK30KKworLyoKKyAqIF9fdnhnZV9od192cGF0aF9hbGFybV9wcm9jZXNzIC0gUHJvY2VzcyBBbGFybXMuCisgKiBAdnBhdGg6IFZpcnR1YWwgUGF0aC4KKyAqIEBza2lwX2FsYXJtczogRG8gbm90IGNsZWFyIHRoZSBhbGFybXMKKyAqCisgKiBQcm9jZXNzIHZwYXRoIGFsYXJtcy4KKyAqCisgKi8KK3N0YXRpYyBlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfdnBhdGhfYWxhcm1fcHJvY2VzcyhzdHJ1Y3QgX192eGdlX2h3X3ZpcnR1YWxwYXRoICp2cGF0aCwKKwkJCSAgICAgIHUzMiBza2lwX2FsYXJtcykKK3sKKwl1NjQgdmFsNjQ7CisJdTY0IGFsYXJtX3N0YXR1czsKKwl1NjQgcGljX3N0YXR1czsKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYgPSBOVUxMOworCWVudW0gdnhnZV9od19ldmVudCBhbGFybV9ldmVudCA9IFZYR0VfSFdfRVZFTlRfVU5LTk9XTjsKKwl1NjQgbWFzazY0OworCXN0cnVjdCB2eGdlX2h3X3ZwYXRoX3N0YXRzX3N3X2luZm8gKnN3X3N0YXRzOworCXN0cnVjdCB2eGdlX2h3X3ZwYXRoX3JlZyBfX2lvbWVtICp2cF9yZWc7CisKKwlpZiAodnBhdGggPT0gTlVMTCkgeworCQlhbGFybV9ldmVudCA9IFZYR0VfSFdfU0VUX0xFVkVMKFZYR0VfSFdfRVZFTlRfVU5LTk9XTiwKKwkJCWFsYXJtX2V2ZW50KTsKKwkJZ290byBvdXQyOworCX0KKworCWhsZGV2ID0gdnBhdGgtPmhsZGV2OworCXZwX3JlZyA9IHZwYXRoLT52cF9yZWc7CisJYWxhcm1fc3RhdHVzID0gcmVhZHEoJnZwX3JlZy0+dnBhdGhfZ2VuZXJhbF9pbnRfc3RhdHVzKTsKKworCWlmIChhbGFybV9zdGF0dXMgPT0gVlhHRV9IV19BTExfRk9YRVMpIHsKKwkJYWxhcm1fZXZlbnQgPSBWWEdFX0hXX1NFVF9MRVZFTChWWEdFX0hXX0VWRU5UX1NMT1RfRlJFRVpFLAorCQkJYWxhcm1fZXZlbnQpOworCQlnb3RvIG91dDsKKwl9CisKKwlzd19zdGF0cyA9IHZwYXRoLT5zd19zdGF0czsKKworCWlmIChhbGFybV9zdGF0dXMgJiB+KAorCQlWWEdFX0hXX1ZQQVRIX0dFTkVSQUxfSU5UX1NUQVRVU19QSUNfSU5UIHwKKwkJVlhHRV9IV19WUEFUSF9HRU5FUkFMX0lOVF9TVEFUVVNfUENJX0lOVCB8CisJCVZYR0VfSFdfVlBBVEhfR0VORVJBTF9JTlRfU1RBVFVTX1dSRE1BX0lOVCB8CisJCVZYR0VfSFdfVlBBVEhfR0VORVJBTF9JTlRfU1RBVFVTX1hNQUNfSU5UKSkgeworCQlzd19zdGF0cy0+ZXJyb3Jfc3RhdHMudW5rbm93bl9hbGFybXMrKzsKKworCQlhbGFybV9ldmVudCA9IFZYR0VfSFdfU0VUX0xFVkVMKFZYR0VfSFdfRVZFTlRfVU5LTk9XTiwKKwkJCWFsYXJtX2V2ZW50KTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGFsYXJtX3N0YXR1cyAmIFZYR0VfSFdfVlBBVEhfR0VORVJBTF9JTlRfU1RBVFVTX1hNQUNfSU5UKSB7CisKKwkJdmFsNjQgPSByZWFkcSgmdnBfcmVnLT54Z21hY192cF9pbnRfc3RhdHVzKTsKKworCQlpZiAodmFsNjQgJgorCQlWWEdFX0hXX1hHTUFDX1ZQX0lOVF9TVEFUVVNfQVNJQ19OVFdLX1ZQX0VSUl9BU0lDX05UV0tfVlBfSU5UKSB7CisKKwkJCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+YXNpY19udHdrX3ZwX2Vycl9yZWcpOworCisJCQlpZiAoKCh2YWw2NCAmCisJCQkgICAgICBWWEdFX0hXX0FTSUNfTldfVlBfRVJSX1JFR19YTUFDSl9TVE5fRkxUKSAmJgorCQkJICAgICAoISh2YWw2NCAmCisJCQkJVlhHRV9IV19BU0lDX05XX1ZQX0VSUl9SRUdfWE1BQ0pfU1ROX09LKSkpIHx8CisJCQkgICAgKCh2YWw2NCAmCisJCQkgICAgIFZYR0VfSFdfQVNJQ19OV19WUF9FUlJfUkVHX1hNQUNKX1NUTl9GTFRfT0NDVVJSKSAmJgorCQkJICAgICAoISh2YWw2NCAmCisJCQkJVlhHRV9IV19BU0lDX05XX1ZQX0VSUl9SRUdfWE1BQ0pfU1ROX09LX09DQ1VSUikKKwkJCQkgICAgICkpKSB7CisJCQkJc3dfc3RhdHMtPmVycm9yX3N0YXRzLm5ldHdvcmtfc3VzdGFpbmVkX2ZhdWx0Kys7CisKKwkJCQl3cml0ZXEoCisJCQkJVlhHRV9IV19BU0lDX05XX1ZQX0VSUl9SRUdfWE1BQ0pfU1ROX0ZMVCwKKwkJCQkJJnZwX3JlZy0+YXNpY19udHdrX3ZwX2Vycl9tYXNrKTsKKworCQkJCV9fdnhnZV9od19kZXZpY2VfaGFuZGxlX2xpbmtfZG93bl9pbmQoaGxkZXYpOworCQkJCWFsYXJtX2V2ZW50ID0gVlhHRV9IV19TRVRfTEVWRUwoCisJCQkJCVZYR0VfSFdfRVZFTlRfTElOS19ET1dOLCBhbGFybV9ldmVudCk7CisJCQl9CisKKwkJCWlmICgoKHZhbDY0ICYKKwkJCSAgICAgIFZYR0VfSFdfQVNJQ19OV19WUF9FUlJfUkVHX1hNQUNKX1NUTl9PSykgJiYKKwkJCSAgICAgKCEodmFsNjQgJgorCQkJCVZYR0VfSFdfQVNJQ19OV19WUF9FUlJfUkVHX1hNQUNKX1NUTl9GTFQpKSkgfHwKKwkJCSAgICAoKHZhbDY0ICYKKwkJCSAgICAgIFZYR0VfSFdfQVNJQ19OV19WUF9FUlJfUkVHX1hNQUNKX1NUTl9PS19PQ0NVUlIpICYmCisJCQkgICAgICghKHZhbDY0ICYKKwkJCQlWWEdFX0hXX0FTSUNfTldfVlBfRVJSX1JFR19YTUFDSl9TVE5fRkxUX09DQ1VSUikKKwkJCQkgICAgICkpKSB7CisKKwkJCQlzd19zdGF0cy0+ZXJyb3Jfc3RhdHMubmV0d29ya19zdXN0YWluZWRfb2srKzsKKworCQkJCXdyaXRlcSgKKwkJCQlWWEdFX0hXX0FTSUNfTldfVlBfRVJSX1JFR19YTUFDSl9TVE5fT0ssCisJCQkJCSZ2cF9yZWctPmFzaWNfbnR3a192cF9lcnJfbWFzayk7CisKKwkJCQlfX3Z4Z2VfaHdfZGV2aWNlX2hhbmRsZV9saW5rX3VwX2luZChobGRldik7CisJCQkJYWxhcm1fZXZlbnQgPSBWWEdFX0hXX1NFVF9MRVZFTCgKKwkJCQkJVlhHRV9IV19FVkVOVF9MSU5LX1VQLCBhbGFybV9ldmVudCk7CisJCQl9CisKKwkJCXdyaXRlcShWWEdFX0hXX0lOVFJfTUFTS19BTEwsCisJCQkJJnZwX3JlZy0+YXNpY19udHdrX3ZwX2Vycl9yZWcpOworCisJCQlhbGFybV9ldmVudCA9IFZYR0VfSFdfU0VUX0xFVkVMKAorCQkJCVZYR0VfSFdfRVZFTlRfQUxBUk1fQ0xFQVJFRCwgYWxhcm1fZXZlbnQpOworCisJCQlpZiAoc2tpcF9hbGFybXMpCisJCQkJcmV0dXJuIFZYR0VfSFdfT0s7CisJCX0KKwl9CisKKwlpZiAoYWxhcm1fc3RhdHVzICYgVlhHRV9IV19WUEFUSF9HRU5FUkFMX0lOVF9TVEFUVVNfUElDX0lOVCkgeworCisJCXBpY19zdGF0dXMgPSByZWFkcSgmdnBfcmVnLT52cGF0aF9wcGlmX2ludF9zdGF0dXMpOworCisJCWlmIChwaWNfc3RhdHVzICYKKwkJICAgIFZYR0VfSFdfVlBBVEhfUFBJRl9JTlRfU1RBVFVTX0dFTkVSQUxfRVJST1JTX0dFTkVSQUxfSU5UKSB7CisKKwkJCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+Z2VuZXJhbF9lcnJvcnNfcmVnKTsKKwkJCW1hc2s2NCA9IHJlYWRxKCZ2cF9yZWctPmdlbmVyYWxfZXJyb3JzX21hc2spOworCisJCQlpZiAoKHZhbDY0ICYKKwkJCQlWWEdFX0hXX0dFTkVSQUxfRVJST1JTX1JFR19JTklfU0VSUl9ERVQpICYKKwkJCQl+bWFzazY0KSB7CisJCQkJc3dfc3RhdHMtPmVycm9yX3N0YXRzLmluaV9zZXJyX2RldCsrOworCisJCQkJYWxhcm1fZXZlbnQgPSBWWEdFX0hXX1NFVF9MRVZFTCgKKwkJCQkJVlhHRV9IV19FVkVOVF9TRVJSLCBhbGFybV9ldmVudCk7CisJCQl9CisKKwkJCWlmICgodmFsNjQgJgorCQkJICAgIFZYR0VfSFdfR0VORVJBTF9FUlJPUlNfUkVHX0RCTEdFTl9GSUZPMF9PVlJGTE9XKSAmCisJCQkJfm1hc2s2NCkgeworCQkJCXN3X3N0YXRzLT5lcnJvcl9zdGF0cy5kYmxnZW5fZmlmbzBfb3ZlcmZsb3crKzsKKworCQkJCWFsYXJtX2V2ZW50ID0gVlhHRV9IV19TRVRfTEVWRUwoCisJCQkJCVZYR0VfSFdfRVZFTlRfRklGT19FUlIsIGFsYXJtX2V2ZW50KTsKKwkJCX0KKworCQkJaWYgKCh2YWw2NCAmCisJCQkgICAgVlhHRV9IV19HRU5FUkFMX0VSUk9SU19SRUdfU1RBVFNCX1BJRl9DSEFJTl9FUlIpICYKKwkJCQl+bWFzazY0KQorCQkJCXN3X3N0YXRzLT5lcnJvcl9zdGF0cy5zdGF0c2JfcGlmX2NoYWluX2Vycm9yKys7CisKKwkJCWlmICgodmFsNjQgJgorCQkJICAgVlhHRV9IV19HRU5FUkFMX0VSUk9SU19SRUdfU1RBVFNCX0RST1BfVElNRU9VVF9SRVEpICYKKwkJCQl+bWFzazY0KQorCQkJCXN3X3N0YXRzLT5lcnJvcl9zdGF0cy5zdGF0c2JfZHJvcF90aW1lb3V0Kys7CisKKwkJCWlmICgodmFsNjQgJgorCQkJCVZYR0VfSFdfR0VORVJBTF9FUlJPUlNfUkVHX1RHVF9JTExFR0FMX0FDQ0VTUykgJgorCQkJCX5tYXNrNjQpCisJCQkJc3dfc3RhdHMtPmVycm9yX3N0YXRzLnRhcmdldF9pbGxlZ2FsX2FjY2VzcysrOworCisJCQlpZiAoIXNraXBfYWxhcm1zKSB7CisJCQkJd3JpdGVxKFZYR0VfSFdfSU5UUl9NQVNLX0FMTCwKKwkJCQkJJnZwX3JlZy0+Z2VuZXJhbF9lcnJvcnNfcmVnKTsKKwkJCQlhbGFybV9ldmVudCA9IFZYR0VfSFdfU0VUX0xFVkVMKAorCQkJCQlWWEdFX0hXX0VWRU5UX0FMQVJNX0NMRUFSRUQsCisJCQkJCWFsYXJtX2V2ZW50KTsKKwkJCX0KKwkJfQorCisJCWlmIChwaWNfc3RhdHVzICYKKwkJICAgIFZYR0VfSFdfVlBBVEhfUFBJRl9JTlRfU1RBVFVTX0tERkNDVExfRVJST1JTX0tERkNDVExfSU5UKSB7CisKKwkJCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+a2RmY2N0bF9lcnJvcnNfcmVnKTsKKwkJCW1hc2s2NCA9IHJlYWRxKCZ2cF9yZWctPmtkZmNjdGxfZXJyb3JzX21hc2spOworCisJCQlpZiAoKHZhbDY0ICYKKwkJCSAgICBWWEdFX0hXX0tERkNDVExfRVJST1JTX1JFR19LREZDQ1RMX0ZJRk8wX09WUldSKSAmCisJCQkJfm1hc2s2NCkgeworCQkJCXN3X3N0YXRzLT5lcnJvcl9zdGF0cy5rZGZjY3RsX2ZpZm8wX292ZXJ3cml0ZSsrOworCisJCQkJYWxhcm1fZXZlbnQgPSBWWEdFX0hXX1NFVF9MRVZFTCgKKwkJCQkJVlhHRV9IV19FVkVOVF9GSUZPX0VSUiwKKwkJCQkJYWxhcm1fZXZlbnQpOworCQkJfQorCisJCQlpZiAoKHZhbDY0ICYKKwkJCSAgICBWWEdFX0hXX0tERkNDVExfRVJST1JTX1JFR19LREZDQ1RMX0ZJRk8wX1BPSVNPTikgJgorCQkJCX5tYXNrNjQpIHsKKwkJCQlzd19zdGF0cy0+ZXJyb3Jfc3RhdHMua2RmY2N0bF9maWZvMF9wb2lzb24rKzsKKworCQkJCWFsYXJtX2V2ZW50ID0gVlhHRV9IV19TRVRfTEVWRUwoCisJCQkJCVZYR0VfSFdfRVZFTlRfRklGT19FUlIsCisJCQkJCWFsYXJtX2V2ZW50KTsKKwkJCX0KKworCQkJaWYgKCh2YWw2NCAmCisJCQkgICAgVlhHRV9IV19LREZDQ1RMX0VSUk9SU19SRUdfS0RGQ0NUTF9GSUZPMF9ETUFfRVJSKSAmCisJCQkJfm1hc2s2NCkgeworCQkJCXN3X3N0YXRzLT5lcnJvcl9zdGF0cy5rZGZjY3RsX2ZpZm8wX2RtYV9lcnJvcisrOworCisJCQkJYWxhcm1fZXZlbnQgPSBWWEdFX0hXX1NFVF9MRVZFTCgKKwkJCQkJVlhHRV9IV19FVkVOVF9GSUZPX0VSUiwKKwkJCQkJYWxhcm1fZXZlbnQpOworCQkJfQorCisJCQlpZiAoIXNraXBfYWxhcm1zKSB7CisJCQkJd3JpdGVxKFZYR0VfSFdfSU5UUl9NQVNLX0FMTCwKKwkJCQkJJnZwX3JlZy0+a2RmY2N0bF9lcnJvcnNfcmVnKTsKKwkJCQlhbGFybV9ldmVudCA9IFZYR0VfSFdfU0VUX0xFVkVMKAorCQkJCQlWWEdFX0hXX0VWRU5UX0FMQVJNX0NMRUFSRUQsCisJCQkJCWFsYXJtX2V2ZW50KTsKKwkJCX0KKwkJfQorCisJfQorCisJaWYgKGFsYXJtX3N0YXR1cyAmIFZYR0VfSFdfVlBBVEhfR0VORVJBTF9JTlRfU1RBVFVTX1dSRE1BX0lOVCkgeworCisJCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+d3JkbWFfYWxhcm1fc3RhdHVzKTsKKworCQlpZiAodmFsNjQgJiBWWEdFX0hXX1dSRE1BX0FMQVJNX1NUQVRVU19QUkNfQUxBUk1fUFJDX0lOVCkgeworCisJCQl2YWw2NCA9IHJlYWRxKCZ2cF9yZWctPnByY19hbGFybV9yZWcpOworCQkJbWFzazY0ID0gcmVhZHEoJnZwX3JlZy0+cHJjX2FsYXJtX21hc2spOworCisJCQlpZiAoKHZhbDY0ICYgVlhHRV9IV19QUkNfQUxBUk1fUkVHX1BSQ19SSU5HX0JVTVApJgorCQkJCX5tYXNrNjQpCisJCQkJc3dfc3RhdHMtPmVycm9yX3N0YXRzLnByY19yaW5nX2J1bXBzKys7CisKKwkJCWlmICgodmFsNjQgJiBWWEdFX0hXX1BSQ19BTEFSTV9SRUdfUFJDX1JYRENNX1NDX0VSUikgJgorCQkJCX5tYXNrNjQpIHsKKwkJCQlzd19zdGF0cy0+ZXJyb3Jfc3RhdHMucHJjX3J4ZGNtX3NjX2VycisrOworCisJCQkJYWxhcm1fZXZlbnQgPSBWWEdFX0hXX1NFVF9MRVZFTCgKKwkJCQkJVlhHRV9IV19FVkVOVF9WUEFUSF9FUlIsCisJCQkJCWFsYXJtX2V2ZW50KTsKKwkJCX0KKworCQkJaWYgKCh2YWw2NCAmIFZYR0VfSFdfUFJDX0FMQVJNX1JFR19QUkNfUlhEQ01fU0NfQUJPUlQpCisJCQkJJiB+bWFzazY0KSB7CisJCQkJc3dfc3RhdHMtPmVycm9yX3N0YXRzLnByY19yeGRjbV9zY19hYm9ydCsrOworCisJCQkJYWxhcm1fZXZlbnQgPSBWWEdFX0hXX1NFVF9MRVZFTCgKKwkJCQkJCVZYR0VfSFdfRVZFTlRfVlBBVEhfRVJSLAorCQkJCQkJYWxhcm1fZXZlbnQpOworCQkJfQorCisJCQlpZiAoKHZhbDY0ICYgVlhHRV9IV19QUkNfQUxBUk1fUkVHX1BSQ19RVUFOVEFfU0laRV9FUlIpCisJCQkJICYgfm1hc2s2NCkgeworCQkJCXN3X3N0YXRzLT5lcnJvcl9zdGF0cy5wcmNfcXVhbnRhX3NpemVfZXJyKys7CisKKwkJCQlhbGFybV9ldmVudCA9IFZYR0VfSFdfU0VUX0xFVkVMKAorCQkJCQlWWEdFX0hXX0VWRU5UX1ZQQVRIX0VSUiwKKwkJCQkJYWxhcm1fZXZlbnQpOworCQkJfQorCisJCQlpZiAoIXNraXBfYWxhcm1zKSB7CisJCQkJd3JpdGVxKFZYR0VfSFdfSU5UUl9NQVNLX0FMTCwKKwkJCQkJJnZwX3JlZy0+cHJjX2FsYXJtX3JlZyk7CisJCQkJYWxhcm1fZXZlbnQgPSBWWEdFX0hXX1NFVF9MRVZFTCgKKwkJCQkJCVZYR0VfSFdfRVZFTlRfQUxBUk1fQ0xFQVJFRCwKKwkJCQkJCWFsYXJtX2V2ZW50KTsKKwkJCX0KKwkJfQorCX0KK291dDoKKwlobGRldi0+c3RhdHMuc3dfZGV2X2Vycl9zdGF0cy52cGF0aF9hbGFybXMrKzsKK291dDI6CisJaWYgKChhbGFybV9ldmVudCA9PSBWWEdFX0hXX0VWRU5UX0FMQVJNX0NMRUFSRUQpIHx8CisJCShhbGFybV9ldmVudCA9PSBWWEdFX0hXX0VWRU5UX1VOS05PV04pKQorCQlyZXR1cm4gVlhHRV9IV19PSzsKKworCV9fdnhnZV9od19kZXZpY2VfaGFuZGxlX2Vycm9yKGhsZGV2LCB2cGF0aC0+dnBfaWQsIGFsYXJtX2V2ZW50KTsKKworCWlmIChhbGFybV9ldmVudCA9PSBWWEdFX0hXX0VWRU5UX1NFUlIpCisJCXJldHVybiBWWEdFX0hXX0VSUl9DUklUSUNBTDsKKworCXJldHVybiAoYWxhcm1fZXZlbnQgPT0gVlhHRV9IV19FVkVOVF9TTE9UX0ZSRUVaRSkgPworCQlWWEdFX0hXX0VSUl9TTE9UX0ZSRUVaRSA6CisJCShhbGFybV9ldmVudCA9PSBWWEdFX0hXX0VWRU5UX0ZJRk9fRVJSKSA/IFZYR0VfSFdfRVJSX0ZJRk8gOgorCQlWWEdFX0hXX0VSUl9WUEFUSDsKK30KKworLyoqCiAgKiB2eGdlX2h3X2RldmljZV9iZWdpbl9pcnEgLSBCZWdpbiBJUlEgcHJvY2Vzc2luZy4KICAqIEBobGRldjogSFcgZGV2aWNlIGhhbmRsZS4KICAqIEBza2lwX2FsYXJtczogRG8gbm90IGNsZWFyIHRoZSBhbGFybXMKQEAgLTUxMywxMDggKzg4NCw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotLyoKLSAqIF9fdnhnZV9od19kZXZpY2VfaGFuZGxlX2xpbmtfdXBfaW5kCi0gKiBAaGxkZXY6IEhXIGRldmljZSBoYW5kbGUuCi0gKgotICogTGluayB1cCBpbmRpY2F0aW9uIGhhbmRsZXIuIFRoZSBmdW5jdGlvbiBpcyBpbnZva2VkIGJ5IEhXIHdoZW4KLSAqIFRpdGFuIGluZGljYXRlcyB0aGF0IHRoZSBsaW5rIGlzIHVwIGZvciBwcm9ncmFtbWFibGUgYW1vdW50IG9mIHRpbWUuCi0gKi8KLXN0YXRpYyBlbnVtIHZ4Z2VfaHdfc3RhdHVzCi1fX3Z4Z2VfaHdfZGV2aWNlX2hhbmRsZV9saW5rX3VwX2luZChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYpCi17Ci0JLyoKLQkgKiBJZiB0aGUgcHJldmlvdXMgbGluayBzdGF0ZSBpcyBub3QgZG93biwgcmV0dXJuLgotCSAqLwotCWlmIChobGRldi0+bGlua19zdGF0ZSA9PSBWWEdFX0hXX0xJTktfVVApCi0JCWdvdG8gZXhpdDsKLQotCWhsZGV2LT5saW5rX3N0YXRlID0gVlhHRV9IV19MSU5LX1VQOwotCi0JLyogbm90aWZ5IGRyaXZlciAqLwotCWlmIChobGRldi0+dWxkX2NhbGxiYWNrcy5saW5rX3VwKQotCQlobGRldi0+dWxkX2NhbGxiYWNrcy5saW5rX3VwKGhsZGV2KTsKLWV4aXQ6Ci0JcmV0dXJuIFZYR0VfSFdfT0s7Ci19Ci0KLS8qCi0gKiBfX3Z4Z2VfaHdfZGV2aWNlX2hhbmRsZV9saW5rX2Rvd25faW5kCi0gKiBAaGxkZXY6IEhXIGRldmljZSBoYW5kbGUuCi0gKgotICogTGluayBkb3duIGluZGljYXRpb24gaGFuZGxlci4gVGhlIGZ1bmN0aW9uIGlzIGludm9rZWQgYnkgSFcgd2hlbgotICogVGl0YW4gaW5kaWNhdGVzIHRoYXQgdGhlIGxpbmsgaXMgZG93bi4KLSAqLwotc3RhdGljIGVudW0gdnhnZV9od19zdGF0dXMKLV9fdnhnZV9od19kZXZpY2VfaGFuZGxlX2xpbmtfZG93bl9pbmQoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2KQotewotCS8qCi0JICogSWYgdGhlIHByZXZpb3VzIGxpbmsgc3RhdGUgaXMgbm90IGRvd24sIHJldHVybi4KLQkgKi8KLQlpZiAoaGxkZXYtPmxpbmtfc3RhdGUgPT0gVlhHRV9IV19MSU5LX0RPV04pCi0JCWdvdG8gZXhpdDsKLQotCWhsZGV2LT5saW5rX3N0YXRlID0gVlhHRV9IV19MSU5LX0RPV047Ci0KLQkvKiBub3RpZnkgZHJpdmVyICovCi0JaWYgKGhsZGV2LT51bGRfY2FsbGJhY2tzLmxpbmtfZG93bikKLQkJaGxkZXYtPnVsZF9jYWxsYmFja3MubGlua19kb3duKGhsZGV2KTsKLWV4aXQ6Ci0JcmV0dXJuIFZYR0VfSFdfT0s7Ci19Ci0KLS8qKgotICogX192eGdlX2h3X2RldmljZV9oYW5kbGVfZXJyb3IgLSBIYW5kbGUgZXJyb3IKLSAqIEBobGRldjogSFcgZGV2aWNlCi0gKiBAdnBfaWQ6IFZwYXRoIElkCi0gKiBAdHlwZTogRXJyb3IgdHlwZS4gUGxlYXNlIHNlZSBlbnVtIHZ4Z2VfaHdfZXZlbnR7fQotICoKLSAqIEhhbmRsZSBlcnJvci4KLSAqLwotc3RhdGljIGVudW0gdnhnZV9od19zdGF0dXMKLV9fdnhnZV9od19kZXZpY2VfaGFuZGxlX2Vycm9yKAotCQlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYsCi0JCXUzMiB2cF9pZCwKLQkJZW51bSB2eGdlX2h3X2V2ZW50IHR5cGUpCi17Ci0Jc3dpdGNoICh0eXBlKSB7Ci0JY2FzZSBWWEdFX0hXX0VWRU5UX1VOS05PV046Ci0JCWJyZWFrOwotCWNhc2UgVlhHRV9IV19FVkVOVF9SRVNFVF9TVEFSVDoKLQljYXNlIFZYR0VfSFdfRVZFTlRfUkVTRVRfQ09NUExFVEU6Ci0JY2FzZSBWWEdFX0hXX0VWRU5UX0xJTktfRE9XTjoKLQljYXNlIFZYR0VfSFdfRVZFTlRfTElOS19VUDoKLQkJZ290byBvdXQ7Ci0JY2FzZSBWWEdFX0hXX0VWRU5UX0FMQVJNX0NMRUFSRUQ6Ci0JCWdvdG8gb3V0OwotCWNhc2UgVlhHRV9IV19FVkVOVF9FQ0NFUlI6Ci0JY2FzZSBWWEdFX0hXX0VWRU5UX01SUENJTV9FQ0NFUlI6Ci0JCWdvdG8gb3V0OwotCWNhc2UgVlhHRV9IV19FVkVOVF9GSUZPX0VSUjoKLQljYXNlIFZYR0VfSFdfRVZFTlRfVlBBVEhfRVJSOgotCWNhc2UgVlhHRV9IV19FVkVOVF9DUklUSUNBTF9FUlI6Ci0JY2FzZSBWWEdFX0hXX0VWRU5UX1NFUlI6Ci0JCWJyZWFrOwotCWNhc2UgVlhHRV9IV19FVkVOVF9TUlBDSU1fU0VSUjoKLQljYXNlIFZYR0VfSFdfRVZFTlRfTVJQQ0lNX1NFUlI6Ci0JCWdvdG8gb3V0OwotCWNhc2UgVlhHRV9IV19FVkVOVF9TTE9UX0ZSRUVaRToKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJdnhnZV9hc3NlcnQoMCk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qIG5vdGlmeSBkcml2ZXIgKi8KLQlpZiAoaGxkZXYtPnVsZF9jYWxsYmFja3MuY3JpdF9lcnIpCi0JCWhsZGV2LT51bGRfY2FsbGJhY2tzLmNyaXRfZXJyKAotCQkJKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICopaGxkZXYsCi0JCQl0eXBlLCB2cF9pZCk7Ci1vdXQ6Ci0KLQlyZXR1cm4gVlhHRV9IV19PSzsKLX0KLQogLyoqCiAgKiB2eGdlX2h3X2RldmljZV9jbGVhcl90eF9yeCAtIEFja25vd2xlZGdlICh0aGF0IGlzLCBjbGVhcikgdGhlCiAgKiBjb25kaXRpb24gdGhhdCBoYXMgY2F1c2VkIHRoZSBUeCBhbmQgUlggaW50ZXJydXB0LgpAQCAtNjk5LDggKzk2OCw4IEBACiAgKiBQb3N0cyBhIGR0ciB0byB3b3JrIGFycmF5LgogICoKICAqLwotc3RhdGljIHZvaWQgdnhnZV9od19jaGFubmVsX2R0cl9wb3N0KHN0cnVjdCBfX3Z4Z2VfaHdfY2hhbm5lbCAqY2hhbm5lbCwKLQkJCQkgICAgIHZvaWQgKmR0cmgpCitzdGF0aWMgdm9pZAordnhnZV9od19jaGFubmVsX2R0cl9wb3N0KHN0cnVjdCBfX3Z4Z2VfaHdfY2hhbm5lbCAqY2hhbm5lbCwgdm9pZCAqZHRyaCkKIHsKIAl2eGdlX2Fzc2VydChjaGFubmVsLT53b3JrX2FycltjaGFubmVsLT5wb3N0X2luZGV4XSA9PSBOVUxMKTsKIApAQCAtOTExLDEwICsxMTgwLDYgQEAKICAqLwogdm9pZCB2eGdlX2h3X3JpbmdfcnhkX3Bvc3RfcG9zdF93bWIoc3RydWN0IF9fdnhnZV9od19yaW5nICpyaW5nLCB2b2lkICpyeGRoKQogewotCXN0cnVjdCBfX3Z4Z2VfaHdfY2hhbm5lbCAqY2hhbm5lbDsKLQotCWNoYW5uZWwgPSAmcmluZy0+Y2hhbm5lbDsKLQogCXdtYigpOwogCXZ4Z2VfaHdfcmluZ19yeGRfcG9zdF9wb3N0KHJpbmcsIHJ4ZGgpOwogfQpAQCAtOTc1LDcgKzEyNDAsNyBAQAogCSp0X2NvZGUJPSAodTgpVlhHRV9IV19SSU5HX1JYRF9UX0NPREVfR0VUKGNvbnRyb2xfMCk7CiAKIAkvKiBjaGVjayB3aGV0aGVyIGl0IGlzIG5vdCB0aGUgZW5kICovCi0JaWYgKCFvd24gfHwgKCgqdF9jb2RlID09IFZYR0VfSFdfUklOR19UX0NPREVfRlJNX0RST1ApICYmIG93bikpIHsKKwlpZiAoIW93biB8fCAqdF9jb2RlID09IFZYR0VfSFdfUklOR19UX0NPREVfRlJNX0RST1ApIHsKIAogCQl2eGdlX2Fzc2VydCgoKHN0cnVjdCB2eGdlX2h3X3JpbmdfcnhkXzEgKilyeGRwKS0+aG9zdF9jb250cm9sICE9CiAJCQkJMCk7CkBAIC0xODY4LDI4NCArMjEzMyw2IEBACiB9CiAKIC8qCi0gKiBfX3Z4Z2VfaHdfdnBhdGhfYWxhcm1fcHJvY2VzcyAtIFByb2Nlc3MgQWxhcm1zLgotICogQHZwYXRoOiBWaXJ0dWFsIFBhdGguCi0gKiBAc2tpcF9hbGFybXM6IERvIG5vdCBjbGVhciB0aGUgYWxhcm1zCi0gKgotICogUHJvY2VzcyB2cGF0aCBhbGFybXMuCi0gKgotICovCi1zdGF0aWMgZW51bSB2eGdlX2h3X3N0YXR1cwotX192eGdlX2h3X3ZwYXRoX2FsYXJtX3Byb2Nlc3Moc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aCAqdnBhdGgsCi0JCQkgICAgICB1MzIgc2tpcF9hbGFybXMpCi17Ci0JdTY0IHZhbDY0OwotCXU2NCBhbGFybV9zdGF0dXM7Ci0JdTY0IHBpY19zdGF0dXM7Ci0Jc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2ID0gTlVMTDsKLQllbnVtIHZ4Z2VfaHdfZXZlbnQgYWxhcm1fZXZlbnQgPSBWWEdFX0hXX0VWRU5UX1VOS05PV047Ci0JdTY0IG1hc2s2NDsKLQlzdHJ1Y3QgdnhnZV9od192cGF0aF9zdGF0c19zd19pbmZvICpzd19zdGF0czsKLQlzdHJ1Y3QgdnhnZV9od192cGF0aF9yZWcgX19pb21lbSAqdnBfcmVnOwotCi0JaWYgKHZwYXRoID09IE5VTEwpIHsKLQkJYWxhcm1fZXZlbnQgPSBWWEdFX0hXX1NFVF9MRVZFTChWWEdFX0hXX0VWRU5UX1VOS05PV04sCi0JCQlhbGFybV9ldmVudCk7Ci0JCWdvdG8gb3V0MjsKLQl9Ci0KLQlobGRldiA9IHZwYXRoLT5obGRldjsKLQl2cF9yZWcgPSB2cGF0aC0+dnBfcmVnOwotCWFsYXJtX3N0YXR1cyA9IHJlYWRxKCZ2cF9yZWctPnZwYXRoX2dlbmVyYWxfaW50X3N0YXR1cyk7Ci0KLQlpZiAoYWxhcm1fc3RhdHVzID09IFZYR0VfSFdfQUxMX0ZPWEVTKSB7Ci0JCWFsYXJtX2V2ZW50ID0gVlhHRV9IV19TRVRfTEVWRUwoVlhHRV9IV19FVkVOVF9TTE9UX0ZSRUVaRSwKLQkJCWFsYXJtX2V2ZW50KTsKLQkJZ290byBvdXQ7Ci0JfQotCi0Jc3dfc3RhdHMgPSB2cGF0aC0+c3dfc3RhdHM7Ci0KLQlpZiAoYWxhcm1fc3RhdHVzICYgfigKLQkJVlhHRV9IV19WUEFUSF9HRU5FUkFMX0lOVF9TVEFUVVNfUElDX0lOVCB8Ci0JCVZYR0VfSFdfVlBBVEhfR0VORVJBTF9JTlRfU1RBVFVTX1BDSV9JTlQgfAotCQlWWEdFX0hXX1ZQQVRIX0dFTkVSQUxfSU5UX1NUQVRVU19XUkRNQV9JTlQgfAotCQlWWEdFX0hXX1ZQQVRIX0dFTkVSQUxfSU5UX1NUQVRVU19YTUFDX0lOVCkpIHsKLQkJc3dfc3RhdHMtPmVycm9yX3N0YXRzLnVua25vd25fYWxhcm1zKys7Ci0KLQkJYWxhcm1fZXZlbnQgPSBWWEdFX0hXX1NFVF9MRVZFTChWWEdFX0hXX0VWRU5UX1VOS05PV04sCi0JCQlhbGFybV9ldmVudCk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmIChhbGFybV9zdGF0dXMgJiBWWEdFX0hXX1ZQQVRIX0dFTkVSQUxfSU5UX1NUQVRVU19YTUFDX0lOVCkgewotCi0JCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+eGdtYWNfdnBfaW50X3N0YXR1cyk7Ci0KLQkJaWYgKHZhbDY0ICYKLQkJVlhHRV9IV19YR01BQ19WUF9JTlRfU1RBVFVTX0FTSUNfTlRXS19WUF9FUlJfQVNJQ19OVFdLX1ZQX0lOVCkgewotCi0JCQl2YWw2NCA9IHJlYWRxKCZ2cF9yZWctPmFzaWNfbnR3a192cF9lcnJfcmVnKTsKLQotCQkJaWYgKCgodmFsNjQgJgotCQkJICAgICAgVlhHRV9IV19BU0lDX05XX1ZQX0VSUl9SRUdfWE1BQ0pfU1ROX0ZMVCkgJiYKLQkJCSAgICAgKCEodmFsNjQgJgotCQkJCVZYR0VfSFdfQVNJQ19OV19WUF9FUlJfUkVHX1hNQUNKX1NUTl9PSykpKSB8fAotCQkJICAgICgodmFsNjQgJgotCQkJICAgICAgVlhHRV9IV19BU0lDX05XX1ZQX0VSUl9SRUdfWE1BQ0pfU1ROX0ZMVF9PQ0NVUlIpICYmCi0JCQkgICAgICghKHZhbDY0ICYKLQkJCQlWWEdFX0hXX0FTSUNfTldfVlBfRVJSX1JFR19YTUFDSl9TVE5fT0tfT0NDVVJSKQotCQkJCSAgICAgKSkpIHsKLQkJCQlzd19zdGF0cy0+ZXJyb3Jfc3RhdHMubmV0d29ya19zdXN0YWluZWRfZmF1bHQrKzsKLQotCQkJCXdyaXRlcSgKLQkJCQlWWEdFX0hXX0FTSUNfTldfVlBfRVJSX1JFR19YTUFDSl9TVE5fRkxULAotCQkJCQkmdnBfcmVnLT5hc2ljX250d2tfdnBfZXJyX21hc2spOwotCi0JCQkJX192eGdlX2h3X2RldmljZV9oYW5kbGVfbGlua19kb3duX2luZChobGRldik7Ci0JCQkJYWxhcm1fZXZlbnQgPSBWWEdFX0hXX1NFVF9MRVZFTCgKLQkJCQkJVlhHRV9IV19FVkVOVF9MSU5LX0RPV04sIGFsYXJtX2V2ZW50KTsKLQkJCX0KLQotCQkJaWYgKCgodmFsNjQgJgotCQkJICAgICAgVlhHRV9IV19BU0lDX05XX1ZQX0VSUl9SRUdfWE1BQ0pfU1ROX09LKSAmJgotCQkJICAgICAoISh2YWw2NCAmCi0JCQkJVlhHRV9IV19BU0lDX05XX1ZQX0VSUl9SRUdfWE1BQ0pfU1ROX0ZMVCkpKSB8fAotCQkJICAgICgodmFsNjQgJgotCQkJICAgICAgVlhHRV9IV19BU0lDX05XX1ZQX0VSUl9SRUdfWE1BQ0pfU1ROX09LX09DQ1VSUikgJiYKLQkJCSAgICAgKCEodmFsNjQgJgotCQkJCVZYR0VfSFdfQVNJQ19OV19WUF9FUlJfUkVHX1hNQUNKX1NUTl9GTFRfT0NDVVJSKQotCQkJCSAgICAgKSkpIHsKLQotCQkJCXN3X3N0YXRzLT5lcnJvcl9zdGF0cy5uZXR3b3JrX3N1c3RhaW5lZF9vaysrOwotCi0JCQkJd3JpdGVxKAotCQkJCVZYR0VfSFdfQVNJQ19OV19WUF9FUlJfUkVHX1hNQUNKX1NUTl9PSywKLQkJCQkJJnZwX3JlZy0+YXNpY19udHdrX3ZwX2Vycl9tYXNrKTsKLQotCQkJCV9fdnhnZV9od19kZXZpY2VfaGFuZGxlX2xpbmtfdXBfaW5kKGhsZGV2KTsKLQkJCQlhbGFybV9ldmVudCA9IFZYR0VfSFdfU0VUX0xFVkVMKAotCQkJCQlWWEdFX0hXX0VWRU5UX0xJTktfVVAsIGFsYXJtX2V2ZW50KTsKLQkJCX0KLQotCQkJd3JpdGVxKFZYR0VfSFdfSU5UUl9NQVNLX0FMTCwKLQkJCQkmdnBfcmVnLT5hc2ljX250d2tfdnBfZXJyX3JlZyk7Ci0KLQkJCWFsYXJtX2V2ZW50ID0gVlhHRV9IV19TRVRfTEVWRUwoCi0JCQkJVlhHRV9IV19FVkVOVF9BTEFSTV9DTEVBUkVELCBhbGFybV9ldmVudCk7Ci0KLQkJCWlmIChza2lwX2FsYXJtcykKLQkJCQlyZXR1cm4gVlhHRV9IV19PSzsKLQkJfQotCX0KLQotCWlmIChhbGFybV9zdGF0dXMgJiBWWEdFX0hXX1ZQQVRIX0dFTkVSQUxfSU5UX1NUQVRVU19QSUNfSU5UKSB7Ci0KLQkJcGljX3N0YXR1cyA9IHJlYWRxKCZ2cF9yZWctPnZwYXRoX3BwaWZfaW50X3N0YXR1cyk7Ci0KLQkJaWYgKHBpY19zdGF0dXMgJgotCQkgICAgVlhHRV9IV19WUEFUSF9QUElGX0lOVF9TVEFUVVNfR0VORVJBTF9FUlJPUlNfR0VORVJBTF9JTlQpIHsKLQotCQkJdmFsNjQgPSByZWFkcSgmdnBfcmVnLT5nZW5lcmFsX2Vycm9yc19yZWcpOwotCQkJbWFzazY0ID0gcmVhZHEoJnZwX3JlZy0+Z2VuZXJhbF9lcnJvcnNfbWFzayk7Ci0KLQkJCWlmICgodmFsNjQgJgotCQkJCVZYR0VfSFdfR0VORVJBTF9FUlJPUlNfUkVHX0lOSV9TRVJSX0RFVCkgJgotCQkJCX5tYXNrNjQpIHsKLQkJCQlzd19zdGF0cy0+ZXJyb3Jfc3RhdHMuaW5pX3NlcnJfZGV0Kys7Ci0KLQkJCQlhbGFybV9ldmVudCA9IFZYR0VfSFdfU0VUX0xFVkVMKAotCQkJCQlWWEdFX0hXX0VWRU5UX1NFUlIsIGFsYXJtX2V2ZW50KTsKLQkJCX0KLQotCQkJaWYgKCh2YWw2NCAmCi0JCQkgICAgVlhHRV9IV19HRU5FUkFMX0VSUk9SU19SRUdfREJMR0VOX0ZJRk8wX09WUkZMT1cpICYKLQkJCQl+bWFzazY0KSB7Ci0JCQkJc3dfc3RhdHMtPmVycm9yX3N0YXRzLmRibGdlbl9maWZvMF9vdmVyZmxvdysrOwotCi0JCQkJYWxhcm1fZXZlbnQgPSBWWEdFX0hXX1NFVF9MRVZFTCgKLQkJCQkJVlhHRV9IV19FVkVOVF9GSUZPX0VSUiwgYWxhcm1fZXZlbnQpOwotCQkJfQotCi0JCQlpZiAoKHZhbDY0ICYKLQkJCSAgICBWWEdFX0hXX0dFTkVSQUxfRVJST1JTX1JFR19TVEFUU0JfUElGX0NIQUlOX0VSUikgJgotCQkJCX5tYXNrNjQpCi0JCQkJc3dfc3RhdHMtPmVycm9yX3N0YXRzLnN0YXRzYl9waWZfY2hhaW5fZXJyb3IrKzsKLQotCQkJaWYgKCh2YWw2NCAmCi0JCQkgICBWWEdFX0hXX0dFTkVSQUxfRVJST1JTX1JFR19TVEFUU0JfRFJPUF9USU1FT1VUX1JFUSkgJgotCQkJCX5tYXNrNjQpCi0JCQkJc3dfc3RhdHMtPmVycm9yX3N0YXRzLnN0YXRzYl9kcm9wX3RpbWVvdXQrKzsKLQotCQkJaWYgKCh2YWw2NCAmCi0JCQkJVlhHRV9IV19HRU5FUkFMX0VSUk9SU19SRUdfVEdUX0lMTEVHQUxfQUNDRVNTKSAmCi0JCQkJfm1hc2s2NCkKLQkJCQlzd19zdGF0cy0+ZXJyb3Jfc3RhdHMudGFyZ2V0X2lsbGVnYWxfYWNjZXNzKys7Ci0KLQkJCWlmICghc2tpcF9hbGFybXMpIHsKLQkJCQl3cml0ZXEoVlhHRV9IV19JTlRSX01BU0tfQUxMLAotCQkJCQkmdnBfcmVnLT5nZW5lcmFsX2Vycm9yc19yZWcpOwotCQkJCWFsYXJtX2V2ZW50ID0gVlhHRV9IV19TRVRfTEVWRUwoCi0JCQkJCVZYR0VfSFdfRVZFTlRfQUxBUk1fQ0xFQVJFRCwKLQkJCQkJYWxhcm1fZXZlbnQpOwotCQkJfQotCQl9Ci0KLQkJaWYgKHBpY19zdGF0dXMgJgotCQkgICAgVlhHRV9IV19WUEFUSF9QUElGX0lOVF9TVEFUVVNfS0RGQ0NUTF9FUlJPUlNfS0RGQ0NUTF9JTlQpIHsKLQotCQkJdmFsNjQgPSByZWFkcSgmdnBfcmVnLT5rZGZjY3RsX2Vycm9yc19yZWcpOwotCQkJbWFzazY0ID0gcmVhZHEoJnZwX3JlZy0+a2RmY2N0bF9lcnJvcnNfbWFzayk7Ci0KLQkJCWlmICgodmFsNjQgJgotCQkJICAgIFZYR0VfSFdfS0RGQ0NUTF9FUlJPUlNfUkVHX0tERkNDVExfRklGTzBfT1ZSV1IpICYKLQkJCQl+bWFzazY0KSB7Ci0JCQkJc3dfc3RhdHMtPmVycm9yX3N0YXRzLmtkZmNjdGxfZmlmbzBfb3ZlcndyaXRlKys7Ci0KLQkJCQlhbGFybV9ldmVudCA9IFZYR0VfSFdfU0VUX0xFVkVMKAotCQkJCQlWWEdFX0hXX0VWRU5UX0ZJRk9fRVJSLAotCQkJCQlhbGFybV9ldmVudCk7Ci0JCQl9Ci0KLQkJCWlmICgodmFsNjQgJgotCQkJICAgIFZYR0VfSFdfS0RGQ0NUTF9FUlJPUlNfUkVHX0tERkNDVExfRklGTzBfUE9JU09OKSAmCi0JCQkJfm1hc2s2NCkgewotCQkJCXN3X3N0YXRzLT5lcnJvcl9zdGF0cy5rZGZjY3RsX2ZpZm8wX3BvaXNvbisrOwotCi0JCQkJYWxhcm1fZXZlbnQgPSBWWEdFX0hXX1NFVF9MRVZFTCgKLQkJCQkJVlhHRV9IV19FVkVOVF9GSUZPX0VSUiwKLQkJCQkJYWxhcm1fZXZlbnQpOwotCQkJfQotCi0JCQlpZiAoKHZhbDY0ICYKLQkJCSAgICBWWEdFX0hXX0tERkNDVExfRVJST1JTX1JFR19LREZDQ1RMX0ZJRk8wX0RNQV9FUlIpICYKLQkJCQl+bWFzazY0KSB7Ci0JCQkJc3dfc3RhdHMtPmVycm9yX3N0YXRzLmtkZmNjdGxfZmlmbzBfZG1hX2Vycm9yKys7Ci0KLQkJCQlhbGFybV9ldmVudCA9IFZYR0VfSFdfU0VUX0xFVkVMKAotCQkJCQlWWEdFX0hXX0VWRU5UX0ZJRk9fRVJSLAotCQkJCQlhbGFybV9ldmVudCk7Ci0JCQl9Ci0KLQkJCWlmICghc2tpcF9hbGFybXMpIHsKLQkJCQl3cml0ZXEoVlhHRV9IV19JTlRSX01BU0tfQUxMLAotCQkJCQkmdnBfcmVnLT5rZGZjY3RsX2Vycm9yc19yZWcpOwotCQkJCWFsYXJtX2V2ZW50ID0gVlhHRV9IV19TRVRfTEVWRUwoCi0JCQkJCVZYR0VfSFdfRVZFTlRfQUxBUk1fQ0xFQVJFRCwKLQkJCQkJYWxhcm1fZXZlbnQpOwotCQkJfQotCQl9Ci0KLQl9Ci0KLQlpZiAoYWxhcm1fc3RhdHVzICYgVlhHRV9IV19WUEFUSF9HRU5FUkFMX0lOVF9TVEFUVVNfV1JETUFfSU5UKSB7Ci0KLQkJdmFsNjQgPSByZWFkcSgmdnBfcmVnLT53cmRtYV9hbGFybV9zdGF0dXMpOwotCi0JCWlmICh2YWw2NCAmIFZYR0VfSFdfV1JETUFfQUxBUk1fU1RBVFVTX1BSQ19BTEFSTV9QUkNfSU5UKSB7Ci0KLQkJCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+cHJjX2FsYXJtX3JlZyk7Ci0JCQltYXNrNjQgPSByZWFkcSgmdnBfcmVnLT5wcmNfYWxhcm1fbWFzayk7Ci0KLQkJCWlmICgodmFsNjQgJiBWWEdFX0hXX1BSQ19BTEFSTV9SRUdfUFJDX1JJTkdfQlVNUCkmCi0JCQkJfm1hc2s2NCkKLQkJCQlzd19zdGF0cy0+ZXJyb3Jfc3RhdHMucHJjX3JpbmdfYnVtcHMrKzsKLQotCQkJaWYgKCh2YWw2NCAmIFZYR0VfSFdfUFJDX0FMQVJNX1JFR19QUkNfUlhEQ01fU0NfRVJSKSAmCi0JCQkJfm1hc2s2NCkgewotCQkJCXN3X3N0YXRzLT5lcnJvcl9zdGF0cy5wcmNfcnhkY21fc2NfZXJyKys7Ci0KLQkJCQlhbGFybV9ldmVudCA9IFZYR0VfSFdfU0VUX0xFVkVMKAotCQkJCQlWWEdFX0hXX0VWRU5UX1ZQQVRIX0VSUiwKLQkJCQkJYWxhcm1fZXZlbnQpOwotCQkJfQotCi0JCQlpZiAoKHZhbDY0ICYgVlhHRV9IV19QUkNfQUxBUk1fUkVHX1BSQ19SWERDTV9TQ19BQk9SVCkKLQkJCQkmIH5tYXNrNjQpIHsKLQkJCQlzd19zdGF0cy0+ZXJyb3Jfc3RhdHMucHJjX3J4ZGNtX3NjX2Fib3J0Kys7Ci0KLQkJCQlhbGFybV9ldmVudCA9IFZYR0VfSFdfU0VUX0xFVkVMKAotCQkJCQkJVlhHRV9IV19FVkVOVF9WUEFUSF9FUlIsCi0JCQkJCQlhbGFybV9ldmVudCk7Ci0JCQl9Ci0KLQkJCWlmICgodmFsNjQgJiBWWEdFX0hXX1BSQ19BTEFSTV9SRUdfUFJDX1FVQU5UQV9TSVpFX0VSUikKLQkJCQkgJiB+bWFzazY0KSB7Ci0JCQkJc3dfc3RhdHMtPmVycm9yX3N0YXRzLnByY19xdWFudGFfc2l6ZV9lcnIrKzsKLQotCQkJCWFsYXJtX2V2ZW50ID0gVlhHRV9IV19TRVRfTEVWRUwoCi0JCQkJCVZYR0VfSFdfRVZFTlRfVlBBVEhfRVJSLAotCQkJCQlhbGFybV9ldmVudCk7Ci0JCQl9Ci0KLQkJCWlmICghc2tpcF9hbGFybXMpIHsKLQkJCQl3cml0ZXEoVlhHRV9IV19JTlRSX01BU0tfQUxMLAotCQkJCQkmdnBfcmVnLT5wcmNfYWxhcm1fcmVnKTsKLQkJCQlhbGFybV9ldmVudCA9IFZYR0VfSFdfU0VUX0xFVkVMKAotCQkJCQkJVlhHRV9IV19FVkVOVF9BTEFSTV9DTEVBUkVELAotCQkJCQkJYWxhcm1fZXZlbnQpOwotCQkJfQotCQl9Ci0JfQotb3V0OgotCWhsZGV2LT5zdGF0cy5zd19kZXZfZXJyX3N0YXRzLnZwYXRoX2FsYXJtcysrOwotb3V0MjoKLQlpZiAoKGFsYXJtX2V2ZW50ID09IFZYR0VfSFdfRVZFTlRfQUxBUk1fQ0xFQVJFRCkgfHwKLQkJKGFsYXJtX2V2ZW50ID09IFZYR0VfSFdfRVZFTlRfVU5LTk9XTikpCi0JCXJldHVybiBWWEdFX0hXX09LOwotCi0JX192eGdlX2h3X2RldmljZV9oYW5kbGVfZXJyb3IoaGxkZXYsIHZwYXRoLT52cF9pZCwgYWxhcm1fZXZlbnQpOwotCi0JaWYgKGFsYXJtX2V2ZW50ID09IFZYR0VfSFdfRVZFTlRfU0VSUikKLQkJcmV0dXJuIFZYR0VfSFdfRVJSX0NSSVRJQ0FMOwotCi0JcmV0dXJuIChhbGFybV9ldmVudCA9PSBWWEdFX0hXX0VWRU5UX1NMT1RfRlJFRVpFKSA/Ci0JCVZYR0VfSFdfRVJSX1NMT1RfRlJFRVpFIDoKLQkJKGFsYXJtX2V2ZW50ID09IFZYR0VfSFdfRVZFTlRfRklGT19FUlIpID8gVlhHRV9IV19FUlJfRklGTyA6Ci0JCVZYR0VfSFdfRVJSX1ZQQVRIOwotfQotCi0vKgogICogdnhnZV9od192cGF0aF9hbGFybV9wcm9jZXNzIC0gUHJvY2VzcyBBbGFybXMuCiAgKiBAdnBhdGg6IFZpcnR1YWwgUGF0aC4KICAqIEBza2lwX2FsYXJtczogRG8gbm90IGNsZWFyIHRoZSBhbGFybXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS10cmFmZmljLmggYi9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtdHJhZmZpYy5oCmluZGV4IDk4OTBkNGQuLjhjMzEwM2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS10cmFmZmljLmgKKysrIGIvZHJpdmVycy9uZXQvdnhnZS92eGdlLXRyYWZmaWMuaApAQCAtMTkwNCwzNCArMTkwNCw2IEBACiAJVlhHRV9IV19SSU5HX1RfQ09ERV9NVUxUSV9FUlIJCQk9IDB4RgogfTsKIAotLyoqCi0gKiBlbnVtIGVudW0gdnhnZV9od19yaW5nX2hhc2hfdHlwZSAtIFJUSCBoYXNoIHR5cGVzCi0gKiBAVlhHRV9IV19SSU5HX0hBU0hfVFlQRV9OT05FOiBObyBIYXNoCi0gKiBAVlhHRV9IV19SSU5HX0hBU0hfVFlQRV9UQ1BfSVBWNDogVENQIElQdjQKLSAqIEBWWEdFX0hXX1JJTkdfSEFTSF9UWVBFX1VEUF9JUFY0OiBVRFAgSVB2NAotICogQFZYR0VfSFdfUklOR19IQVNIX1RZUEVfSVBWNDogSVB2NAotICogQFZYR0VfSFdfUklOR19IQVNIX1RZUEVfVENQX0lQVjY6IFRDUCBJUHY2Ci0gKiBAVlhHRV9IV19SSU5HX0hBU0hfVFlQRV9VRFBfSVBWNjogVURQIElQdjYKLSAqIEBWWEdFX0hXX1JJTkdfSEFTSF9UWVBFX0lQVjY6IElQdjYKLSAqIEBWWEdFX0hXX1JJTkdfSEFTSF9UWVBFX1RDUF9JUFY2X0VYOiBUQ1AgSVB2NiBleHRlbnNpb24KLSAqIEBWWEdFX0hXX1JJTkdfSEFTSF9UWVBFX1VEUF9JUFY2X0VYOiBVRFAgSVB2NiBleHRlbnNpb24KLSAqIEBWWEdFX0hXX1JJTkdfSEFTSF9UWVBFX0lQVjZfRVg6IElQdjYgZXh0ZW5zaW9uCi0gKgotICogUlRIIGhhc2ggdHlwZXMKLSAqLwotZW51bSB2eGdlX2h3X3JpbmdfaGFzaF90eXBlIHsKLQlWWEdFX0hXX1JJTkdfSEFTSF9UWVBFX05PTkUJCQk9IDB4MCwKLQlWWEdFX0hXX1JJTkdfSEFTSF9UWVBFX1RDUF9JUFY0CQk9IDB4MSwKLQlWWEdFX0hXX1JJTkdfSEFTSF9UWVBFX1VEUF9JUFY0CQk9IDB4MiwKLQlWWEdFX0hXX1JJTkdfSEFTSF9UWVBFX0lQVjQJCQk9IDB4MywKLQlWWEdFX0hXX1JJTkdfSEFTSF9UWVBFX1RDUF9JUFY2CQk9IDB4NCwKLQlWWEdFX0hXX1JJTkdfSEFTSF9UWVBFX1VEUF9JUFY2CQk9IDB4NSwKLQlWWEdFX0hXX1JJTkdfSEFTSF9UWVBFX0lQVjYJCQk9IDB4NiwKLQlWWEdFX0hXX1JJTkdfSEFTSF9UWVBFX1RDUF9JUFY2X0VYCT0gMHg3LAotCVZYR0VfSFdfUklOR19IQVNIX1RZUEVfVURQX0lQVjZfRVgJPSAweDgsCi0JVlhHRV9IV19SSU5HX0hBU0hfVFlQRV9JUFY2X0VYCQk9IDB4OQotfTsKLQogZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX2h3X3JpbmdfcnhkX3Jlc2VydmUoCiAJc3RydWN0IF9fdnhnZV9od19yaW5nICpyaW5nX2hhbmRsZSwKIAl2b2lkICoqcnhkaCk7CkBAIC0yMTA5LDEwICsyMDgxLDYgQEAKICNlbmRpZgogfTsKIAotLyogPT09PT09PT09PT09PT09PT09PT09PT09PSBGSUZPIFBSSVZBVEUgQVBJID09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0KLXN0cnVjdCB2eGdlX2h3X2ZpZm9fYXR0cjsKLQogc3RydWN0IHZ4Z2VfaHdfbWVtcG9vbF9jYnMgewogCXZvaWQgKCppdGVtX2Z1bmNfYWxsb2MpKAogCQkJc3RydWN0IHZ4Z2VfaHdfbWVtcG9vbCAqbWVtcG9vbGgsCkBAIC0yMTg2LDI3ICsyMTU0LDI3IEBACiBlbnVtIHZ4Z2VfaHdfc3RhdHVzCiB2eGdlX2h3X3ZwYXRoX21hY19hZGRyX2FkZCgKIAlzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnBhdGhfaGFuZGxlLAotCXU4IChtYWNhZGRyKVtFVEhfQUxFTl0sCi0JdTggKG1hY2FkZHJfbWFzaylbRVRIX0FMRU5dLAorCXU4ICptYWNhZGRyLAorCXU4ICptYWNhZGRyX21hc2ssCiAJZW51bSB2eGdlX2h3X3ZwYXRoX21hY19hZGRyX2FkZF9tb2RlIGR1cGxpY2F0ZV9tb2RlKTsKIAogZW51bSB2eGdlX2h3X3N0YXR1cwogdnhnZV9od192cGF0aF9tYWNfYWRkcl9nZXQoCiAJc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwYXRoX2hhbmRsZSwKLQl1OCAobWFjYWRkcilbRVRIX0FMRU5dLAotCXU4IChtYWNhZGRyX21hc2spW0VUSF9BTEVOXSk7CisJdTggKm1hY2FkZHIsCisJdTggKm1hY2FkZHJfbWFzayk7CiAKIGVudW0gdnhnZV9od19zdGF0dXMKIHZ4Z2VfaHdfdnBhdGhfbWFjX2FkZHJfZ2V0X25leHQoCiAJc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwYXRoX2hhbmRsZSwKLQl1OCAobWFjYWRkcilbRVRIX0FMRU5dLAotCXU4IChtYWNhZGRyX21hc2spW0VUSF9BTEVOXSk7CisJdTggKm1hY2FkZHIsCisJdTggKm1hY2FkZHJfbWFzayk7CiAKIGVudW0gdnhnZV9od19zdGF0dXMKIHZ4Z2VfaHdfdnBhdGhfbWFjX2FkZHJfZGVsZXRlKAogCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cGF0aF9oYW5kbGUsCi0JdTggKG1hY2FkZHIpW0VUSF9BTEVOXSwKLQl1OCAobWFjYWRkcl9tYXNrKVtFVEhfQUxFTl0pOworCXU4ICptYWNhZGRyLAorCXU4ICptYWNhZGRyX21hc2spOwogCiBlbnVtIHZ4Z2VfaHdfc3RhdHVzCiB2eGdlX2h3X3ZwYXRoX3ZpZF9hZGQoCkBAIC0yMzEzLDYgKzIyODEsNyBAQAogCiBpbnQKIHZ4Z2VfaHdfY2hhbm5lbF9kdHJfY291bnQoc3RydWN0IF9fdnhnZV9od19jaGFubmVsICpjaGFubmVsKTsKKwogdm9pZAogdnhnZV9od192cGF0aF90dGlfY2lfc2V0KHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldiwgdTMyIHZwX2lkKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdnhnZS92eGdlLXZlcnNpb24uaCBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS12ZXJzaW9uLmgKaW5kZXggNTNmZWZlMS4uYWQyZjk5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdnhnZS92eGdlLXZlcnNpb24uaAorKysgYi9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtdmVyc2lvbi5oCkBAIC0xNSw4ICsxNSwzNSBAQAogI2RlZmluZSBWWEdFX1ZFUlNJT05fSAogCiAjZGVmaW5lIFZYR0VfVkVSU0lPTl9NQUpPUgkiMiIKLSNkZWZpbmUgVlhHRV9WRVJTSU9OX01JTk9SCSIwIgotI2RlZmluZSBWWEdFX1ZFUlNJT05fRklYCSI5IgotI2RlZmluZSBWWEdFX1ZFUlNJT05fQlVJTEQJIjIwODQwIgorI2RlZmluZSBWWEdFX1ZFUlNJT05fTUlOT1IJIjUiCisjZGVmaW5lIFZYR0VfVkVSU0lPTl9GSVgJIjEiCisjZGVmaW5lIFZYR0VfVkVSU0lPTl9CVUlMRAkiMjIwODIiCiAjZGVmaW5lIFZYR0VfVkVSU0lPTl9GT1IJImsiCisKKyNkZWZpbmUgVlhHRV9GV19WRVIobWFqLCBtaW4sIGJsZCkgKCgobWFqKSA8PCAxNikgKyAoKG1pbikgPDwgOCkgKyAoYmxkKSkKKworI2RlZmluZSBWWEdFX0RFQURfRldfVkVSX01BSk9SCTEKKyNkZWZpbmUgVlhHRV9ERUFEX0ZXX1ZFUl9NSU5PUgk0CisjZGVmaW5lIFZYR0VfREVBRF9GV19WRVJfQlVJTEQJNAorCisjZGVmaW5lIFZYR0VfRldfREVBRF9WRVIgVlhHRV9GV19WRVIoVlhHRV9ERUFEX0ZXX1ZFUl9NQUpPUiwgXAorCQkJCSAgICAgVlhHRV9ERUFEX0ZXX1ZFUl9NSU5PUiwgXAorCQkJCSAgICAgVlhHRV9ERUFEX0ZXX1ZFUl9CVUlMRCkKKworI2RlZmluZSBWWEdFX0VQUk9NX0ZXX1ZFUl9NQUpPUgkxCisjZGVmaW5lIFZYR0VfRVBST01fRldfVkVSX01JTk9SCTYKKyNkZWZpbmUgVlhHRV9FUFJPTV9GV19WRVJfQlVJTEQJMQorCisjZGVmaW5lIFZYR0VfRVBST01fRldfVkVSIFZYR0VfRldfVkVSKFZYR0VfRVBST01fRldfVkVSX01BSk9SLCBcCisJCQkJICAgICAgVlhHRV9FUFJPTV9GV19WRVJfTUlOT1IsIFwKKwkJCQkgICAgICBWWEdFX0VQUk9NX0ZXX1ZFUl9CVUlMRCkKKworI2RlZmluZSBWWEdFX0NFUlRfRldfVkVSX01BSk9SCTEKKyNkZWZpbmUgVlhHRV9DRVJUX0ZXX1ZFUl9NSU5PUgk4CisjZGVmaW5lIFZYR0VfQ0VSVF9GV19WRVJfQlVJTEQJMQorCisjZGVmaW5lIFZYR0VfQ0VSVF9GV19WRVIgVlhHRV9GV19WRVIoVlhHRV9DRVJUX0ZXX1ZFUl9NQUpPUiwgXAorCQkJCSAgICAgVlhHRV9DRVJUX0ZXX1ZFUl9NSU5PUiwgXAorCQkJCSAgICAgVlhHRV9DRVJUX0ZXX1ZFUl9CVUlMRCkKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vZHNjYzQuYyBiL2RyaXZlcnMvbmV0L3dhbi9kc2NjNC5jCmluZGV4IGQ0NWIwOGQuLjM0Y2ZmNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9kc2NjNC5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9kc2NjNC5jCkBAIC0xMzU4LDcgKzEzNTgsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgZHNjYzRfbWF0Y2goc3RydWN0IHRoaW5naWUgKnAsIGludCB2YWx1ZSkKK3N0YXRpYyBpbnQgZHNjYzRfbWF0Y2goY29uc3Qgc3RydWN0IHRoaW5naWUgKnAsIGludCB2YWx1ZSkKIHsKIAlpbnQgaTsKIApAQCAtMTQwMyw3ICsxNDAzLDcgQEAKIHN0YXRpYyBpbnQgZHNjYzRfZW5jb2Rpbmdfc2V0dGluZyhzdHJ1Y3QgZHNjYzRfZGV2X3ByaXYgKmRwcml2LAogCQkJCSAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgdGhpbmdpZSBlbmNvZGluZ1tdID0geworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgdGhpbmdpZSBlbmNvZGluZ1tdID0gewogCQl7IEVOQ09ESU5HX05SWiwJCTB4MDAwMDAwMDAgfSwKIAkJeyBFTkNPRElOR19OUlpJLAkweDAwMjAwMDAwIH0sCiAJCXsgRU5DT0RJTkdfRk1fTUFSSywJMHgwMDQwMDAwMCB9LApAQCAtMTQ0Miw3ICsxNDQyLDcgQEAKIHN0YXRpYyBpbnQgZHNjYzRfY3JjX3NldHRpbmcoc3RydWN0IGRzY2M0X2Rldl9wcml2ICpkcHJpdiwKIAkJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgdGhpbmdpZSBjcmNbXSA9IHsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IHRoaW5naWUgY3JjW10gPSB7CiAJCXsgUEFSSVRZX0NSQzE2X1BSMF9DQ0lUVCwJMHgwMDAwMDAxMCB9LAogCQl7IFBBUklUWV9DUkMxNl9QUjFfQ0NJVFQsCTB4MDAwMDAwMDAgfSwKIAkJeyBQQVJJVFlfQ1JDMzJfUFIwX0NDSVRULAkweDAwMDAwMDExIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93ZC5jIGIvZHJpdmVycy9uZXQvd2QuYwppbmRleCBmMTU0OWZmLi44ODMxYTMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93ZC5jCisrKyBiL2RyaXZlcnMvbmV0L3dkLmMKQEAgLTI3NSw3ICsyNzUsNyBAQAogCWRldi0+YmFzZV9hZGRyID0gaW9hZGRyK1dEX05JQ19PRkZTRVQ7CiAKIAlpZiAoZGV2LT5pcnEgPCAyKSB7Ci0JCWludCBpcnFtYXBbXSA9IHs5LDMsNSw3LDEwLDExLDE1LDR9OworCQlzdGF0aWMgY29uc3QgaW50IGlycW1hcFtdID0gezksIDMsIDUsIDcsIDEwLCAxMSwgMTUsIDR9OwogCQlpbnQgcmVnMSA9IGluYihpb2FkZHIrMSk7CiAJCWludCByZWc0ID0gaW5iKGlvYWRkcis0KTsKIAkJaWYgKGFuY2llbnQgfHwgcmVnMSA9PSAweGZmKSB7CS8qIEFjayEhIE5vIHdheSB0byByZWFkIHRoZSBJUlEhICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vZHJpdmVyLmMgYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vZHJpdmVyLmMKaW5kZXggY2RlZGFiNC4uZjA2MDMzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL2RyaXZlci5jCisrKyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9kcml2ZXIuYwpAQCAtOTIsNTQgKzkyLDYgQEAKIAkJICJzaWduYWw7IHZhbHVlcyBhcmUgYXBwZW5kZWQgdG8gYSBsaXN0LS1zZXR0aW5nIG9uZSB2YWx1ZSAiCiAJCSAiYXMgemVybyBjbGVhbnMgdGhlIGV4aXN0aW5nIGxpc3QgYW5kIHN0YXJ0cyBhIG5ldyBvbmUuIik7CiAKLXN0YXRpYwotc3RydWN0IGkyNDAwbV93b3JrICpfX2kyNDAwbV93b3JrX3NldHVwKAotCXN0cnVjdCBpMjQwMG0gKmkyNDAwbSwgdm9pZCAoKmZuKShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKiksCi0JZ2ZwX3QgZ2ZwX2ZsYWdzLCBjb25zdCB2b2lkICpwbCwgc2l6ZV90IHBsX3NpemUpCi17Ci0Jc3RydWN0IGkyNDAwbV93b3JrICppdzsKLQotCWl3ID0ga3phbGxvYyhzaXplb2YoKml3KSArIHBsX3NpemUsIGdmcF9mbGFncyk7Ci0JaWYgKGl3ID09IE5VTEwpCi0JCXJldHVybiBOVUxMOwotCWl3LT5pMjQwMG0gPSBpMjQwMG1fZ2V0KGkyNDAwbSk7Ci0JaXctPnBsX3NpemUgPSBwbF9zaXplOwotCW1lbWNweShpdy0+cGwsIHBsLCBwbF9zaXplKTsKLQlJTklUX1dPUksoJml3LT53cywgZm4pOwotCXJldHVybiBpdzsKLX0KLQotCi0vKgotICogU2NoZWR1bGUgaTI0MDBtJ3Mgc3BlY2lmaWMgd29yayBvbiB0aGUgc3lzdGVtJ3MgcXVldWUuCi0gKgotICogVXNlZCBmb3IgYSBmZXcgY2FzZXMgd2hlcmUgd2UgcmVhbGx5IG5lZWQgaXQ7IG90aGVyd2lzZSwgaWRlbnRpY2FsCi0gKiB0byBpMjQwMG1fcXVldWVfd29yaygpLgotICoKLSAqIFJldHVybnMgPCAwIGVycm5vIGNvZGUgb24gZXJyb3IsIDEgaWYgb2suCi0gKgotICogSWYgaXQgcmV0dXJucyB6ZXJvLCBzb21ldGhpbmcgcmVhbGx5IGJhZCBoYXBwZW5lZCwgYXMgaXQgbWVhbnMgdGhlCi0gKiB3b3JrcyBzdHJ1Y3Qgd2FzIGFscmVhZHkgcXVldWVkLCBidXQgd2UgaGF2ZSBqdXN0IGFsbG9jYXRlZCBpdCwgc28KLSAqIGl0IHNob3VsZCBub3QgaGFwcGVuLgotICovCi1zdGF0aWMgaW50IGkyNDAwbV9zY2hlZHVsZV93b3JrKHN0cnVjdCBpMjQwMG0gKmkyNDAwbSwKLQkJCSB2b2lkICgqZm4pKHN0cnVjdCB3b3JrX3N0cnVjdCAqKSwgZ2ZwX3QgZ2ZwX2ZsYWdzLAotCQkJIGNvbnN0IHZvaWQgKnBsLCBzaXplX3QgcGxfc2l6ZSkKLXsKLQlpbnQgcmVzdWx0OwotCXN0cnVjdCBpMjQwMG1fd29yayAqaXc7Ci0KLQlyZXN1bHQgPSAtRU5PTUVNOwotCWl3ID0gX19pMjQwMG1fd29ya19zZXR1cChpMjQwMG0sIGZuLCBnZnBfZmxhZ3MsIHBsLCBwbF9zaXplKTsKLQlpZiAoaXcgIT0gTlVMTCkgewotCQlyZXN1bHQgPSBzY2hlZHVsZV93b3JrKCZpdy0+d3MpOwotCQlpZiAoV0FSTl9PTihyZXN1bHQgPT0gMCkpCi0JCQlyZXN1bHQgPSAtRU5YSU87Ci0JfQotCXJldHVybiByZXN1bHQ7Ci19Ci0KLQogLyoKICAqIFdpTUFYIHN0YWNrIG9wZXJhdGlvbjogcmVsYXkgYSBtZXNzYWdlIGZyb20gdXNlciBzcGFjZQogICoKQEAgLTY0OCwxNyArNjAwLDExIEBACiBzdGF0aWMKIHZvaWQgX19pMjQwMG1fZGV2X3Jlc2V0X2hhbmRsZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndzKQogewotCWludCByZXN1bHQ7Ci0Jc3RydWN0IGkyNDAwbV93b3JrICppdyA9IGNvbnRhaW5lcl9vZih3cywgc3RydWN0IGkyNDAwbV93b3JrLCB3cyk7Ci0JY29uc3QgY2hhciAqcmVhc29uOwotCXN0cnVjdCBpMjQwMG0gKmkyNDAwbSA9IGl3LT5pMjQwMG07CisJc3RydWN0IGkyNDAwbSAqaTI0MDBtID0gY29udGFpbmVyX29mKHdzLCBzdHJ1Y3QgaTI0MDBtLCByZXNldF93cyk7CisJY29uc3QgY2hhciAqcmVhc29uID0gaTI0MDBtLT5yZXNldF9yZWFzb247CiAJc3RydWN0IGRldmljZSAqZGV2ID0gaTI0MDBtX2RldihpMjQwMG0pOwogCXN0cnVjdCBpMjQwMG1fcmVzZXRfY3R4ICpjdHggPSBpMjQwMG0tPnJlc2V0X2N0eDsKLQotCWlmIChXQVJOX09OKGl3LT5wbF9zaXplICE9IHNpemVvZihyZWFzb24pKSkKLQkJcmVhc29uID0gIlNXIEJVRzogcmVhc29uIG4vYSI7Ci0JZWxzZQotCQltZW1jcHkoJnJlYXNvbiwgaXctPnBsLCBzaXplb2YocmVhc29uKSk7CisJaW50IHJlc3VsdDsKIAogCWRfZm5zdGFydCgzLCBkZXYsICIod3MgJXAgaTI0MDBtICVwIHJlYXNvbiAlcylcbiIsIHdzLCBpMjQwMG0sIHJlYXNvbik7CiAKQEAgLTczMyw4ICs2NzksNiBAQAogCQl9CiAJfQogb3V0OgotCWkyNDAwbV9wdXQoaTI0MDBtKTsKLQlrZnJlZShpdyk7CiAJZF9mbmVuZCgzLCBkZXYsICIod3MgJXAgaTI0MDBtICVwIHJlYXNvbiAlcykgPSB2b2lkXG4iLAogCQl3cywgaTI0MDBtLCByZWFzb24pOwogfQpAQCAtNzU0LDggKzY5OCw4IEBACiAgKi8KIGludCBpMjQwMG1fZGV2X3Jlc2V0X2hhbmRsZShzdHJ1Y3QgaTI0MDBtICppMjQwMG0sIGNvbnN0IGNoYXIgKnJlYXNvbikKIHsKLQlyZXR1cm4gaTI0MDBtX3NjaGVkdWxlX3dvcmsoaTI0MDBtLCBfX2kyNDAwbV9kZXZfcmVzZXRfaGFuZGxlLAotCQkJCSAgICBHRlBfQVRPTUlDLCAmcmVhc29uLCBzaXplb2YocmVhc29uKSk7CisJaTI0MDBtLT5yZXNldF9yZWFzb24gPSByZWFzb247CisJcmV0dXJuIHNjaGVkdWxlX3dvcmsoJmkyNDAwbS0+cmVzZXRfd3MpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaTI0MDBtX2Rldl9yZXNldF9oYW5kbGUpOwogCkBAIC03NjgsMTQgKzcxMiw5IEBACiBzdGF0aWMKIHZvaWQgX19pMjQwMG1fZXJyb3JfcmVjb3Zlcnkoc3RydWN0IHdvcmtfc3RydWN0ICp3cykKIHsKLQlzdHJ1Y3QgaTI0MDBtX3dvcmsgKml3ID0gY29udGFpbmVyX29mKHdzLCBzdHJ1Y3QgaTI0MDBtX3dvcmssIHdzKTsKLQlzdHJ1Y3QgaTI0MDBtICppMjQwMG0gPSBpdy0+aTI0MDBtOworCXN0cnVjdCBpMjQwMG0gKmkyNDAwbSA9IGNvbnRhaW5lcl9vZih3cywgc3RydWN0IGkyNDAwbSwgcmVjb3Zlcnlfd3MpOwogCiAJaTI0MDBtX3Jlc2V0KGkyNDAwbSwgSTI0MDBNX1JUX0JVUyk7Ci0KLQlpMjQwMG1fcHV0KGkyNDAwbSk7Ci0Ja2ZyZWUoaXcpOwotCXJldHVybjsKIH0KIAogLyoKQEAgLTgwNSwxOCArNzQ0LDEwIEBACiAgKi8KIHZvaWQgaTI0MDBtX2Vycm9yX3JlY292ZXJ5KHN0cnVjdCBpMjQwMG0gKmkyNDAwbSkKIHsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpMjQwMG1fZGV2KGkyNDAwbSk7Ci0KLQlpZiAoYXRvbWljX2FkZF9yZXR1cm4oMSwgJmkyNDAwbS0+ZXJyb3JfcmVjb3ZlcnkpID09IDEpIHsKLQkJaWYgKGkyNDAwbV9zY2hlZHVsZV93b3JrKGkyNDAwbSwgX19pMjQwMG1fZXJyb3JfcmVjb3ZlcnksCi0JCQlHRlBfQVRPTUlDLCBOVUxMLCAwKSA8IDApIHsKLQkJCWRldl9lcnIoZGV2LCAicnVuIG91dCBvZiBtZW1vcnkgZm9yICIKLQkJCQkic2NoZWR1bGluZyBhbiBlcnJvciByZWNvdmVyeSA/XG4iKTsKLQkJCWF0b21pY19kZWMoJmkyNDAwbS0+ZXJyb3JfcmVjb3ZlcnkpOwotCQl9Ci0JfSBlbHNlCisJaWYgKGF0b21pY19hZGRfcmV0dXJuKDEsICZpMjQwMG0tPmVycm9yX3JlY292ZXJ5KSA9PSAxKQorCQlzY2hlZHVsZV93b3JrKCZpMjQwMG0tPnJlY292ZXJ5X3dzKTsKKwllbHNlCiAJCWF0b21pY19kZWMoJmkyNDAwbS0+ZXJyb3JfcmVjb3ZlcnkpOwotCXJldHVybjsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGkyNDAwbV9lcnJvcl9yZWNvdmVyeSk7CiAKQEAgLTg4Niw2ICs4MTcsMTAgQEAKIAogCW11dGV4X2luaXQoJmkyNDAwbS0+aW5pdF9tdXRleCk7CiAJLyogd2FrZV90eF93cyBpcyBpbml0aWFsaXplZCBpbiBpMjQwMG1fdHhfc2V0dXAoKSAqLworCisJSU5JVF9XT1JLKCZpMjQwMG0tPnJlc2V0X3dzLCBfX2kyNDAwbV9kZXZfcmVzZXRfaGFuZGxlKTsKKwlJTklUX1dPUksoJmkyNDAwbS0+cmVjb3Zlcnlfd3MsIF9faTI0MDBtX2Vycm9yX3JlY292ZXJ5KTsKKwogCWF0b21pY19zZXQoJmkyNDAwbS0+YnVzX3Jlc2V0X3JldHJpZXMsIDApOwogCiAJaTI0MDBtLT5hbGl2ZSA9IDA7CkBAIC0xMDQwLDYgKzk3NSw5IEBACiAKIAlpMjQwMG1fZGV2X3N0b3AoaTI0MDBtKTsKIAorCWNhbmNlbF93b3JrX3N5bmMoJmkyNDAwbS0+cmVzZXRfd3MpOworCWNhbmNlbF93b3JrX3N5bmMoJmkyNDAwbS0+cmVjb3Zlcnlfd3MpOworCiAJaTI0MDBtX2RlYnVnZnNfcm0oaTI0MDBtKTsKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJmkyNDAwbS0+d2ltYXhfZGV2Lm5ldF9kZXYtPmRldi5rb2JqLAogCQkJICAgJmkyNDAwbV9kZXZfYXR0cl9ncm91cCk7CkBAIC0xMDgzLDggKzEwMjEsNiBAQAogc3RhdGljCiB2b2lkIF9fZXhpdCBpMjQwMG1fZHJpdmVyX2V4aXQodm9pZCkKIHsKLQkvKiBmb3Igc2NoZWRzIGkyNDAwbV9kZXZfcmVzZXRfaGFuZGxlKCkgKi8KLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwogCWkyNDAwbV9iYXJrZXJfZGJfZXhpdCgpOwogfQogbW9kdWxlX2V4aXQoaTI0MDBtX2RyaXZlcl9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9pMjQwMG0uaCBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9pMjQwMG0uaAppbmRleCA1OWFjNzcwLi4xN2VjYWE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vaTI0MDBtLmgKKysrIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL2kyNDAwbS5oCkBAIC02MzIsNiArNjMyLDExIEBACiAJc3RydWN0IHdvcmtfc3RydWN0IHdha2VfdHhfd3M7CiAJc3RydWN0IHNrX2J1ZmYgKndha2VfdHhfc2tiOwogCisJc3RydWN0IHdvcmtfc3RydWN0IHJlc2V0X3dzOworCWNvbnN0IGNoYXIgKnJlc2V0X3JlYXNvbjsKKworCXN0cnVjdCB3b3JrX3N0cnVjdCByZWNvdmVyeV93czsKKwogCXN0cnVjdCBkZW50cnkgKmRlYnVnZnNfZGVudHJ5OwogCWNvbnN0IGNoYXIgKmZ3X25hbWU7CQkvKiBuYW1lIG9mIHRoZSBjdXJyZW50IGZpcm13YXJlIGltYWdlICovCiAJdW5zaWduZWQgbG9uZyBmd192ZXJzaW9uOwkvKiB2ZXJzaW9uIG9mIHRoZSBmaXJtd2FyZSBpbnRlcmZhY2UgKi8KQEAgLTg5NiwyMCArOTAxLDYgQEAKIAlyZXR1cm4gaTI0MDBtLT53aW1heF9kZXYubmV0X2Rldi0+ZGV2LnBhcmVudDsKIH0KIAotLyoKLSAqIEhlbHBlciBmb3Igc2NoZWR1bGluZyBzaW1wbGUgd29yayBmdW5jdGlvbnMKLSAqCi0gKiBUaGlzIHN0cnVjdCBjYW4gZ2V0IGFueSBraW5kIG9mIHBheWxvYWQgYXR0YWNoZWQgKG5vcm1hbGx5IGluIHRoZQotICogZm9ybSBvZiBhIHN0cnVjdCB3aGVyZSB5b3UgcGFjayB0aGUgc3R1ZmYgeW91IHdhbnQgdG8gcGFzcyB0byB0aGUKLSAqIF93b3JrIGZ1bmN0aW9uKS4KLSAqLwotc3RydWN0IGkyNDAwbV93b3JrIHsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd3M7Ci0Jc3RydWN0IGkyNDAwbSAqaTI0MDBtOwotCXNpemVfdCBwbF9zaXplOwotCXU4IHBsWzBdOwotfTsKLQogZXh0ZXJuIGludCBpMjQwMG1fbXNnX2NoZWNrX3N0YXR1cyhjb25zdCBzdHJ1Y3QgaTI0MDBtX2wzbDRfaGRyICosCiAJCQkJICAgY2hhciAqLCBzaXplX3QpOwogZXh0ZXJuIGludCBpMjQwMG1fbXNnX3NpemVfY2hlY2soc3RydWN0IGkyNDAwbSAqLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL3NkaW8uYyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9zZGlvLmMKaW5kZXggOWJmYzI2ZS4uYmU0MjhjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL3NkaW8uYworKysgYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vc2Rpby5jCkBAIC01OTAsNyArNTkwLDYgQEAKIHN0YXRpYwogdm9pZCBfX2V4aXQgaTI0MDBtc19kcml2ZXJfZXhpdCh2b2lkKQogewotCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CS8qIGZvciB0aGUgc3R1ZmYgd2Ugc2NoZWR1bGUgKi8KIAlzZGlvX3VucmVnaXN0ZXJfZHJpdmVyKCZpMjQwMG1fc2Rpb19kcml2ZXIpOwogfQogbW9kdWxlX2V4aXQoaTI0MDBtc19kcml2ZXJfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vdXNiLmMgYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vdXNiLmMKaW5kZXggZDMzNjVhYy4uMjk4ZjJiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL3VzYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS91c2IuYwpAQCAtNTE0LDcgKzUxNCw3IEBACiAjaWZkZWYgQ09ORklHX1BNCiAJaWZhY2UtPm5lZWRzX3JlbW90ZV93YWtldXAgPSAxOwkJLyogYXV0b3N1c3BlbmQgKDE1cyBkZWxheSkgKi8KIAlkZXZpY2VfaW5pdF93YWtldXAoZGV2LCAxKTsKLQl1c2JfZGV2LT5hdXRvc3VzcGVuZF9kZWxheSA9IDE1ICogSFo7CisJcG1fcnVudGltZV9zZXRfYXV0b3N1c3BlbmRfZGVsYXkoJnVzYl9kZXYtPmRldiwgMTUwMDApOwogCXVzYl9lbmFibGVfYXV0b3N1c3BlbmQodXNiX2Rldik7CiAjZW5kaWYKIApAQCAtNzgwLDcgKzc4MCw2IEBACiBzdGF0aWMKIHZvaWQgX19leGl0IGkyNDAwbXVfZHJpdmVyX2V4aXQodm9pZCkKIHsKLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwkvKiBmb3IgdGhlIHN0dWZmIHdlIHNjaGVkdWxlIGZyb20gc3lzZnMuYyAqLwogCXVzYl9kZXJlZ2lzdGVyKCZpMjQwMG11X2RyaXZlcik7CiB9CiBtb2R1bGVfZXhpdChpMjQwMG11X2RyaXZlcl9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWcgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnCmluZGV4IDRkZTQ0MTAuLmI0MzM4ZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvS2NvbmZpZwpAQCAtMjc5LDYgKzI3OSw3IEBACiBzb3VyY2UgImRyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vS2NvbmZpZyIKIHNvdXJjZSAiZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L0tjb25maWciCiBzb3VyY2UgImRyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9LY29uZmlnIgorc291cmNlICJkcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL0tjb25maWciCiBzb3VyY2UgImRyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTI1MS9LY29uZmlnIgogc291cmNlICJkcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvS2NvbmZpZyIKIHNvdXJjZSAiZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvTWFrZWZpbGUKaW5kZXggMDZmOGNhMi4uOTc2MDU2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvTWFrZWZpbGUKQEAgLTI0LDYgKzI0LDcgQEAKIG9iai0kKENPTkZJR19aRDEyMTFSVykJCSs9IHpkMTIxMXJ3Lwogb2JqLSQoQ09ORklHX1JUTDgxODApCQkrPSBydGw4MTh4Lwogb2JqLSQoQ09ORklHX1JUTDgxODcpCQkrPSBydGw4MTh4Lworb2JqLSQoQ09ORklHX1JUTDgxOTJDRSkJCSs9IHJ0bHdpZmkvCiAKICMgMTYtYml0IHdpcmVsZXNzIFBDTUNJQSBjbGllbnQgZHJpdmVycwogb2JqLSQoQ09ORklHX1BDTUNJQV9SQVlDUykJKz0gcmF5X2NzLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm8uYwppbmRleCBhMzZlNzg3Li41N2E3OWIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyby5jCkBAIC00NjUyLDI0ICs0NjUyLDE4IEBACiAJCQkgICBzaXplX3QgbGVuLAogCQkJICAgbG9mZl90ICpvZmZzZXQgKQogewotCWxvZmZfdCBwb3MgPSAqb2Zmc2V0OworCXNzaXplX3QgcmV0OwogCXN0cnVjdCBwcm9jX2RhdGEgKnByaXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAKIAlpZiAoIXByaXYtPndidWZmZXIpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKHBvcyA8IDApCi0JCXJldHVybiAtRUlOVkFMOwotCWlmIChwb3MgPj0gcHJpdi0+bWF4d3JpdGVsZW4pCi0JCXJldHVybiAwOwotCWlmIChsZW4gPiBwcml2LT5tYXh3cml0ZWxlbiAtIHBvcykKLQkJbGVuID0gcHJpdi0+bWF4d3JpdGVsZW4gLSBwb3M7Ci0JaWYgKGNvcHlfZnJvbV91c2VyKHByaXYtPndidWZmZXIgKyBwb3MsIGJ1ZmZlciwgbGVuKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JaWYgKCBwb3MgKyBsZW4gPiBwcml2LT53cml0ZWxlbiApCi0JCXByaXYtPndyaXRlbGVuID0gbGVuICsgZmlsZS0+Zl9wb3M7Ci0JKm9mZnNldCA9IHBvcyArIGxlbjsKLQlyZXR1cm4gbGVuOworCXJldCA9IHNpbXBsZV93cml0ZV90b19idWZmZXIocHJpdi0+d2J1ZmZlciwgcHJpdi0+bWF4d3JpdGVsZW4sIG9mZnNldCwKKwkJCQkJYnVmZmVyLCBsZW4pOworCWlmIChyZXQgPiAwKQorCQlwcml2LT53cml0ZWxlbiA9IG1heF90KGludCwgcHJpdi0+d3JpdGVsZW4sICpvZmZzZXQpOworCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBwcm9jX3N0YXR1c19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9jbWQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvY21kLmMKaW5kZXggNDYwNGRlMC4uNjQ1MmM1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9jbWQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL2NtZC5jCkBAIC01NCw3ICs1NCw3IEBACiAKIGludCBhcjkxNzBfd3JpdGVfcmVnKHN0cnVjdCBhcjkxNzAgKmFyLCBjb25zdCB1MzIgcmVnLCBjb25zdCB1MzIgdmFsKQogewotCV9fbGUzMiBidWZbMl0gPSB7CisJY29uc3QgX19sZTMyIGJ1ZlsyXSA9IHsKIAkJY3B1X3RvX2xlMzIocmVnKSwKIAkJY3B1X3RvX2xlMzIodmFsKSwKIAl9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC91c2IuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvdXNiLmMKaW5kZXggNWRiYjUzNi4uZDNiZTZmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC91c2IuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL3VzYi5jCkBAIC0xNjEsOCArMTYxLDcgQEAKIHN0YXRpYyB2b2lkIGFyOTE3MF91c2JfdHhfdXJiX2NvbXBsZXRlX2ZyYW1lKHN0cnVjdCB1cmIgKnVyYikKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdXJiLT5jb250ZXh0OwotCXN0cnVjdCBhcjkxNzBfdXNiICphcnUgPSAoc3RydWN0IGFyOTE3MF91c2IgKikKLQkgICAgICB1c2JfZ2V0X2ludGZkYXRhKHVzYl9pZm51bV90b19pZih1cmItPmRldiwgMCkpOworCXN0cnVjdCBhcjkxNzBfdXNiICphcnUgPSB1c2JfZ2V0X2ludGZkYXRhKHVzYl9pZm51bV90b19pZih1cmItPmRldiwgMCkpOwogCiAJaWYgKHVubGlrZWx5KCFhcnUpKSB7CiAJCWRldl9rZnJlZV9za2JfaXJxKHNrYik7CkBAIC0yMTksOCArMjE4LDcgQEAKIHN0YXRpYyB2b2lkIGFyOTE3MF91c2JfcnhfY29tcGxldGVkKHN0cnVjdCB1cmIgKnVyYikKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdXJiLT5jb250ZXh0OwotCXN0cnVjdCBhcjkxNzBfdXNiICphcnUgPSAoc3RydWN0IGFyOTE3MF91c2IgKikKLQkJdXNiX2dldF9pbnRmZGF0YSh1c2JfaWZudW1fdG9faWYodXJiLT5kZXYsIDApKTsKKwlzdHJ1Y3QgYXI5MTcwX3VzYiAqYXJ1ID0gdXNiX2dldF9pbnRmZGF0YSh1c2JfaWZudW1fdG9faWYodXJiLT5kZXYsIDApKTsKIAlpbnQgZXJyOwogCiAJaWYgKCFhcnUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoLmgKaW5kZXggNTAxMDUwYy4uZTQzMjEwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGguaApAQCAtMTI2LDYgKzEyNiw3IEBACiAJdm9pZCAoKnJlYWRfY2FjaGVzaXplKShzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uLCBpbnQgKmNzeik7CiAJYm9vbCAoKmVlcHJvbV9yZWFkKShzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uLCB1MzIgb2ZmLCB1MTYgKmRhdGEpOwogCXZvaWQgKCpidF9jb2V4X3ByZXApKHN0cnVjdCBhdGhfY29tbW9uICpjb21tb24pOworCXZvaWQgKCpleHRuX3N5bmNoX2VuKShzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uKTsKIH07CiAKIHN0cnVjdCBhdGhfY29tbW9uIHsKQEAgLTE2Miw2ICsxNjMsOCBAQAogCXN0cnVjdCBhdGhfcmVndWxhdG9yeSByZWd1bGF0b3J5OwogCWNvbnN0IHN0cnVjdCBhdGhfb3BzICpvcHM7CiAJY29uc3Qgc3RydWN0IGF0aF9idXNfb3BzICpidXNfb3BzOworCisJYm9vbCBidGNvZXhfZW5hYmxlZDsKIH07CiAKIHN0cnVjdCBza19idWZmICphdGhfcnhidWZfYWxsb2Moc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiwKQEAgLTE3OCw0ICsxODEsMTEyIEBACiB2b2lkIGF0aF9od19jeWNsZV9jb3VudGVyc191cGRhdGUoc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbik7CiBpbnQzMl90IGF0aF9od19nZXRfbGlzdGVuX3RpbWUoc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbik7CiAKK2V4dGVybiBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDMsIDQpKSkgaW50CithdGhfcHJpbnRrKGNvbnN0IGNoYXIgKmxldmVsLCBzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uLCBjb25zdCBjaGFyICpmbXQsIC4uLik7CisKKyNkZWZpbmUgYXRoX2VtZXJnKGNvbW1vbiwgZm10LCAuLi4pCQkJCVwKKwlhdGhfcHJpbnRrKEtFUk5fRU1FUkcsIGNvbW1vbiwgZm10LCAjI19fVkFfQVJHU19fKQorI2RlZmluZSBhdGhfYWxlcnQoY29tbW9uLCBmbXQsIC4uLikJCQkJXAorCWF0aF9wcmludGsoS0VSTl9BTEVSVCwgY29tbW9uLCBmbXQsICMjX19WQV9BUkdTX18pCisjZGVmaW5lIGF0aF9jcml0KGNvbW1vbiwgZm10LCAuLi4pCQkJCVwKKwlhdGhfcHJpbnRrKEtFUk5fQ1JJVCwgY29tbW9uLCBmbXQsICMjX19WQV9BUkdTX18pCisjZGVmaW5lIGF0aF9lcnIoY29tbW9uLCBmbXQsIC4uLikJCQkJXAorCWF0aF9wcmludGsoS0VSTl9FUlIsIGNvbW1vbiwgZm10LCAjI19fVkFfQVJHU19fKQorI2RlZmluZSBhdGhfd2Fybihjb21tb24sIGZtdCwgLi4uKQkJCQlcCisJYXRoX3ByaW50ayhLRVJOX1dBUk5JTkcsIGNvbW1vbiwgZm10LCAjI19fVkFfQVJHU19fKQorI2RlZmluZSBhdGhfbm90aWNlKGNvbW1vbiwgZm10LCAuLi4pCQkJCVwKKwlhdGhfcHJpbnRrKEtFUk5fTk9USUNFLCBjb21tb24sIGZtdCwgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgYXRoX2luZm8oY29tbW9uLCBmbXQsIC4uLikJCQkJXAorCWF0aF9wcmludGsoS0VSTl9JTkZPLCBjb21tb24sIGZtdCwgIyNfX1ZBX0FSR1NfXykKKworLyoqCisgKiBlbnVtIGF0aF9kZWJ1Z19sZXZlbCAtIGF0aGVyb3Mgd2lyZWxlc3MgZGVidWcgbGV2ZWwKKyAqCisgKiBAQVRIX0RCR19SRVNFVDogcmVzZXQgcHJvY2Vzc2luZworICogQEFUSF9EQkdfUVVFVUU6IGhhcmR3YXJlIHF1ZXVlIG1hbmFnZW1lbnQKKyAqIEBBVEhfREJHX0VFUFJPTTogZWVwcm9tIHByb2Nlc3NpbmcKKyAqIEBBVEhfREJHX0NBTElCUkFURTogcGVyaW9kaWMgY2FsaWJyYXRpb24KKyAqIEBBVEhfREJHX0lOVEVSUlVQVDogaW50ZXJydXB0IHByb2Nlc3NpbmcKKyAqIEBBVEhfREJHX1JFR1VMQVRPUlk6IHJlZ3VsYXRvcnkgcHJvY2Vzc2luZworICogQEFUSF9EQkdfQU5JOiBhZGFwdGl2ZSBub2lzZSBpbW11bml0aXZlIHByb2Nlc3NpbmcKKyAqIEBBVEhfREJHX1hNSVQ6IGJhc2ljIHhtaXQgb3BlcmF0aW9uCisgKiBAQVRIX0RCR19CRUFDT046IGJlYWNvbiBoYW5kbGluZworICogQEFUSF9EQkdfQ09ORklHOiBjb25maWd1cmF0aW9uIG9mIHRoZSBoYXJkd2FyZQorICogQEFUSF9EQkdfRkFUQUw6IGZhdGFsIGVycm9ycywgdGhpcyBpcyB0aGUgZGVmYXVsdCwgREJHX0RFRkFVTFQKKyAqIEBBVEhfREJHX1BTOiBwb3dlciBzYXZlIHByb2Nlc3NpbmcKKyAqIEBBVEhfREJHX0hXVElNRVI6IGhhcmR3YXJlIHRpbWVyIGhhbmRsaW5nCisgKiBAQVRIX0RCR19CVENPRVg6IGJsdWV0b290aCBjb2V4aXN0YW5jZQorICogQEFUSF9EQkdfQlNUVUNLOiBzdHVjayBiZWFjb25zCisgKiBAQVRIX0RCR19BTlk6IGVuYWJsZSBhbGwgZGVidWdnaW5nCisgKgorICogVGhlIGRlYnVnIGxldmVsIGlzIHVzZWQgdG8gY29udHJvbCB0aGUgYW1vdW50IGFuZCB0eXBlIG9mIGRlYnVnZ2luZyBvdXRwdXQKKyAqIHdlIHdhbnQgdG8gc2VlLiBFYWNoIGRyaXZlciBoYXMgaXRzIG93biBtZXRob2QgZm9yIGVuYWJsaW5nIGRlYnVnZ2luZyBhbmQKKyAqIG1vZGlmeWluZyBkZWJ1ZyBsZXZlbCBzdGF0ZXMgLS0gYnV0IHRoaXMgaXMgdHlwaWNhbGx5IGRvbmUgdGhyb3VnaCBhCisgKiBtb2R1bGUgcGFyYW1ldGVyICdkZWJ1ZycgYWxvbmcgd2l0aCBhIHJlc3BlY3RpdmUgJ2RlYnVnJyBkZWJ1Z2ZzIGZpbGUKKyAqIGVudHJ5LgorICovCitlbnVtIEFUSF9ERUJVRyB7CisJQVRIX0RCR19SRVNFVAkJPSAweDAwMDAwMDAxLAorCUFUSF9EQkdfUVVFVUUJCT0gMHgwMDAwMDAwMiwKKwlBVEhfREJHX0VFUFJPTQkJPSAweDAwMDAwMDA0LAorCUFUSF9EQkdfQ0FMSUJSQVRFCT0gMHgwMDAwMDAwOCwKKwlBVEhfREJHX0lOVEVSUlVQVAk9IDB4MDAwMDAwMTAsCisJQVRIX0RCR19SRUdVTEFUT1JZCT0gMHgwMDAwMDAyMCwKKwlBVEhfREJHX0FOSQkJPSAweDAwMDAwMDQwLAorCUFUSF9EQkdfWE1JVAkJPSAweDAwMDAwMDgwLAorCUFUSF9EQkdfQkVBQ09OCQk9IDB4MDAwMDAxMDAsCisJQVRIX0RCR19DT05GSUcJCT0gMHgwMDAwMDIwMCwKKwlBVEhfREJHX0ZBVEFMCQk9IDB4MDAwMDA0MDAsCisJQVRIX0RCR19QUwkJPSAweDAwMDAwODAwLAorCUFUSF9EQkdfSFdUSU1FUgkJPSAweDAwMDAxMDAwLAorCUFUSF9EQkdfQlRDT0VYCQk9IDB4MDAwMDIwMDAsCisJQVRIX0RCR19XTUkJCT0gMHgwMDAwNDAwMCwKKwlBVEhfREJHX0JTVFVDSwkJPSAweDAwMDA4MDAwLAorCUFUSF9EQkdfQU5ZCQk9IDB4ZmZmZmZmZmYKK307CisKKyNkZWZpbmUgQVRIX0RCR19ERUZBVUxUIChBVEhfREJHX0ZBVEFMKQorCisjaWZkZWYgQ09ORklHX0FUSF9ERUJVRworCisjZGVmaW5lIGF0aF9kYmcoY29tbW9uLCBkYmdfbWFzaywgZm10LCAuLi4pCQkJXAorKHsJCQkJCQkJCVwKKwlpbnQgcnRuOwkJCQkJCVwKKwlpZiAoKGNvbW1vbiktPmRlYnVnX21hc2sgJiBkYmdfbWFzaykJCQlcCisJCXJ0biA9IGF0aF9wcmludGsoS0VSTl9ERUJVRywgY29tbW9uLCBmbXQsCVwKKwkJCQkgIyNfX1ZBX0FSR1NfXyk7CQlcCisJZWxzZQkJCQkJCQlcCisJCXJ0biA9IDA7CQkJCQlcCisJCQkJCQkJCVwKKwlydG47CQkJCQkJCVwKK30pCisjZGVmaW5lIEFUSF9EQkdfV0FSTihmb28sIGFyZy4uLikgV0FSTihmb28sIGFyZykKKyNkZWZpbmUgQVRIX0RCR19XQVJOX09OX09OQ0UoZm9vKSBXQVJOX09OX09OQ0UoZm9vKQorCisjZWxzZQorCitzdGF0aWMgaW5saW5lICBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDMsIDQpKSkgaW50CithdGhfZGJnKHN0cnVjdCBhdGhfY29tbW9uICpjb21tb24sIGVudW0gQVRIX0RFQlVHIGRiZ19tYXNrLAorCWNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXJldHVybiAwOworfQorI2RlZmluZSBBVEhfREJHX1dBUk4oZm9vLCBhcmcuLi4pIGRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBBVEhfREJHX1dBUk5fT05fT05DRShmb28pICh7CQkJCVwKKwlpbnQgX19yZXRfd2Fybl9vbmNlID0gISEoZm9vKTsJCQkJXAorCXVubGlrZWx5KF9fcmV0X3dhcm5fb25jZSk7CQkJCVwKK30pCisKKyNlbmRpZiAvKiBDT05GSUdfQVRIX0RFQlVHICovCisKKy8qKiBSZXR1cm5zIHN0cmluZyBkZXNjcmliaW5nIG9wbW9kZSwgb3IgTlVMTCBpZiB1bmtub3duIG1vZGUuICovCisjaWZkZWYgQ09ORklHX0FUSF9ERUJVRworY29uc3QgY2hhciAqYXRoX29wbW9kZV90b19zdHJpbmcoZW51bSBubDgwMjExX2lmdHlwZSBvcG1vZGUpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqYXRoX29wbW9kZV90b19zdHJpbmcoZW51bSBubDgwMjExX2lmdHlwZSBvcG1vZGUpCit7CisJcmV0dXJuICJVTktOT1dOIjsKK30KKyNlbmRpZgorCiAjZW5kaWYgLyogQVRIX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9LY29uZmlnIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL0tjb25maWcKaW5kZXggZWI4M2I3Yi4uZTA3OTMzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL0tjb25maWcKQEAgLTEsOSArMSwxMiBAQAogY29uZmlnIEFUSDVLCiAJdHJpc3RhdGUgIkF0aGVyb3MgNXh4eCB3aXJlbGVzcyBjYXJkcyBzdXBwb3J0IgotCWRlcGVuZHMgb24gUENJICYmIE1BQzgwMjExCisJZGVwZW5kcyBvbiAoUENJIHx8IEFUSEVST1NfQVIyMzFYKSAmJiBNQUM4MDIxMQogCXNlbGVjdCBNQUM4MDIxMV9MRURTCiAJc2VsZWN0IExFRFNfQ0xBU1MKIAlzZWxlY3QgTkVXX0xFRFMKKwlzZWxlY3QgQVZFUkFHRQorCXNlbGVjdCBBVEg1S19BSEIgaWYgKEFUSEVST1NfQVIyMzFYICYmICFQQ0kpCisJc2VsZWN0IEFUSDVLX1BDSSBpZiAoIUFUSEVST1NfQVIyMzFYICYmIFBDSSkKIAktLS1oZWxwLS0tCiAJICBUaGlzIG1vZHVsZSBhZGRzIHN1cHBvcnQgZm9yIHdpcmVsZXNzIGFkYXB0ZXJzIGJhc2VkIG9uCiAJICBBdGhlcm9zIDV4eHggY2hpcHNldC4KQEAgLTM3LDMgKzQwLDE2IEBACiAKIAkgIG1vZHByb2JlIGF0aDVrIGRlYnVnPTB4MDAwMDA0MDAKIAorY29uZmlnIEFUSDVLX0FIQgorCWJvb2wgIkF0aGVyb3MgNXh4eCBBSEIgYnVzIHN1cHBvcnQiCisJZGVwZW5kcyBvbiAoQVRIRVJPU19BUjIzMVggJiYgIVBDSSkKKwktLS1oZWxwLS0tCisJICBUaGlzIGFkZHMgc3VwcG9ydCBmb3IgV2lTb0MgdHlwZSBjaGlwc2V0cyBvZiB0aGUgNXh4eCBBdGhlcm9zCisJICBmYW1pbHkuCisKK2NvbmZpZyBBVEg1S19QQ0kKKwlib29sICJBdGhlcm9zIDV4eHggUENJIGJ1cyBzdXBwb3J0IgorCWRlcGVuZHMgb24gKCFBVEhFUk9TX0FSMjMxWCAmJiBQQ0kpCisJLS0taGVscC0tLQorCSAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIFBDSSB0eXBlIGNoaXBzZXRzIG9mIHRoZSA1eHh4IEF0aGVyb3MKKwkgIGZhbWlseS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9NYWtlZmlsZQppbmRleCAyMjQyYTE0Li5mNjBiMzg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL01ha2VmaWxlCkBAIC0xNCw1ICsxNCw4IEBACiBhdGg1ay15CQkJCSs9IHJma2lsbC5vCiBhdGg1ay15CQkJCSs9IGFuaS5vCiBhdGg1ay15CQkJCSs9IHN5c2ZzLm8KK2F0aDVrLXkJCQkJKz0gbWFjODAyMTEtb3BzLm8KIGF0aDVrLSQoQ09ORklHX0FUSDVLX0RFQlVHKQkrPSBkZWJ1Zy5vCithdGg1ay0kKENPTkZJR19BVEg1S19BSEIpCSs9IGFoYi5vCithdGg1ay0kKENPTkZJR19BVEg1S19QQ0kpCSs9IHBjaS5vCiBvYmotJChDT05GSUdfQVRINUspCQkrPSBhdGg1ay5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYWhiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYWhiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA3Y2RlMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9haGIuYwpAQCAtMCwwICsxLDIxOSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDA5IEdhYm9yIEp1aG9zIDxqdWhvc2dAb3BlbndydC5vcmc+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSW1yZSBLYWxveiA8a2Fsb3pAb3BlbndydC5vcmc+CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L25sODAyMTEuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxhcjIzMXhfcGxhdGZvcm0uaD4KKyNpbmNsdWRlICJhdGg1ay5oIgorI2luY2x1ZGUgImRlYnVnLmgiCisjaW5jbHVkZSAiYmFzZS5oIgorI2luY2x1ZGUgInJlZy5oIgorI2luY2x1ZGUgImRlYnVnLmgiCisKKy8qIHJldHVybiBidXMgY2FjaGVzaXplIGluIDRCIHdvcmQgdW5pdHMgKi8KK3N0YXRpYyB2b2lkIGF0aDVrX2FoYl9yZWFkX2NhY2hlc2l6ZShzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uLCBpbnQgKmNzeikKK3sKKwkqY3N6ID0gTDFfQ0FDSEVfQllURVMgPj4gMjsKK30KKworYm9vbCBhdGg1a19haGJfZWVwcm9tX3JlYWQoc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiwgdTMyIG9mZiwgdTE2ICpkYXRhKQoreworCXN0cnVjdCBhdGg1a19zb2Z0YyAqc2MgPSBjb21tb24tPnByaXY7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShzYy0+ZGV2KTsKKwlzdHJ1Y3QgYXIyMzF4X2JvYXJkX2NvbmZpZyAqYmNmZyA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXUxNiAqZWVwcm9tLCAqZWVwcm9tX2VuZDsKKworCisKKwliY2ZnID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJZWVwcm9tID0gKHUxNiAqKSBiY2ZnLT5yYWRpbzsKKwllZXByb21fZW5kID0gKCh2b2lkICopIGJjZmctPmNvbmZpZykgKyBCT0FSRF9DT05GSUdfQlVGU1o7CisKKwllZXByb20gKz0gb2ZmOworCWlmIChlZXByb20gPiBlZXByb21fZW5kKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCSpkYXRhID0gKmVlcHJvbTsKKwlyZXR1cm4gMDsKK30KKworaW50IGF0aDVrX2h3X3JlYWRfc3JldihzdHJ1Y3QgYXRoNWtfaHcgKmFoKQoreworCXN0cnVjdCBhdGg1a19zb2Z0YyAqc2MgPSBhaC0+YWhfc2M7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShzYy0+ZGV2KTsKKwlzdHJ1Y3QgYXIyMzF4X2JvYXJkX2NvbmZpZyAqYmNmZyA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWFoLT5haF9tYWNfc3JldiA9IGJjZmctPmRldmlkOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0aF9idXNfb3BzIGF0aF9haGJfYnVzX29wcyA9IHsKKwkuYXRoX2J1c190eXBlID0gQVRIX0FIQiwKKwkucmVhZF9jYWNoZXNpemUgPSBhdGg1a19haGJfcmVhZF9jYWNoZXNpemUsCisJLmVlcHJvbV9yZWFkID0gYXRoNWtfYWhiX2VlcHJvbV9yZWFkLAorfTsKKworLypJbml0aWFsaXphdGlvbiovCitzdGF0aWMgaW50IGF0aF9haGJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgYXIyMzF4X2JvYXJkX2NvbmZpZyAqYmNmZyA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBhdGg1a19zb2Z0YyAqc2M7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJdm9pZCBfX2lvbWVtICptZW07CisJaW50IGlycTsKKwlpbnQgcmV0ID0gMDsKKwl1MzIgcmVnOworCisJaWYgKCFwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBwbGF0Zm9ybSBkYXRhIHNwZWNpZmllZFxuIik7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyX291dDsKKwl9CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmIChyZXMgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBtZW1vcnkgcmVzb3VyY2UgZm91bmRcbiIpOworCQlyZXQgPSAtRU5YSU87CisJCWdvdG8gZXJyX291dDsKKwl9CisKKwltZW0gPSBpb3JlbWFwX25vY2FjaGUocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CisJaWYgKG1lbSA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImlvcmVtYXAgZmFpbGVkXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfb3V0OworCX0KKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgMCk7CisJaWYgKHJlcyA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIElSUSByZXNvdXJjZSBmb3VuZFxuIik7CisJCXJldCA9IC1FTlhJTzsKKwkJZ290byBlcnJfb3V0OworCX0KKworCWlycSA9IHJlcy0+c3RhcnQ7CisKKwlodyA9IGllZWU4MDIxMV9hbGxvY19odyhzaXplb2Yoc3RydWN0IGF0aDVrX3NvZnRjKSwgJmF0aDVrX2h3X29wcyk7CisJaWYgKGh3ID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gbWVtb3J5IGZvciBpZWVlODAyMTFfaHdcbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycl9vdXQ7CisJfQorCisJc2MgPSBody0+cHJpdjsKKwlzYy0+aHcgPSBodzsKKwlzYy0+ZGV2ID0gJnBkZXYtPmRldjsKKwlzYy0+aW9iYXNlID0gbWVtOworCXNjLT5pcnEgPSBpcnE7CisJc2MtPmRldmlkID0gYmNmZy0+ZGV2aWQ7CisKKwlpZiAoYmNmZy0+ZGV2aWQgPj0gQVI1S19TUkVWX0FSMjMxNV9SNikgeworCQkvKiBFbmFibGUgV01BQyBBSEIgYXJiaXRyYXRpb24gKi8KKwkJcmVnID0gX19yYXdfcmVhZGwoKHZvaWQgX19pb21lbSAqKSBBUjVLX0FSMjMxNV9BSEJfQVJCX0NUTCk7CisJCXJlZyB8PSBBUjVLX0FSMjMxNV9BSEJfQVJCX0NUTF9XTEFOOworCQlfX3Jhd193cml0ZWwocmVnLCAodm9pZCBfX2lvbWVtICopIEFSNUtfQVIyMzE1X0FIQl9BUkJfQ1RMKTsKKworCQkvKiBFbmFibGUgZ2xvYmFsIFdNQUMgc3dhcHBpbmcgKi8KKwkJcmVnID0gX19yYXdfcmVhZGwoKHZvaWQgX19pb21lbSAqKSBBUjVLX0FSMjMxNV9CWVRFU1dBUCk7CisJCXJlZyB8PSBBUjVLX0FSMjMxNV9CWVRFU1dBUF9XTUFDOworCQlfX3Jhd193cml0ZWwocmVnLCAodm9pZCBfX2lvbWVtICopIEFSNUtfQVIyMzE1X0JZVEVTV0FQKTsKKwl9IGVsc2UgeworCQkvKiBFbmFibGUgV01BQyBETUEgYWNjZXNzIChhc3N1bWluZyA1MzEyIG9yIDIzMXgqLworCQkvKiBUT0RPOiBjaGVjayBvdGhlciBwbGF0Zm9ybXMgKi8KKwkJcmVnID0gX19yYXdfcmVhZGwoKHZvaWQgX19pb21lbSAqKSBBUjVLX0FSNTMxMl9FTkFCTEUpOworCQlpZiAodG9fcGxhdGZvcm1fZGV2aWNlKHNjLT5kZXYpLT5pZCA9PSAwKQorCQkJcmVnIHw9IEFSNUtfQVI1MzEyX0VOQUJMRV9XTEFOMDsKKwkJZWxzZQorCQkJcmVnIHw9IEFSNUtfQVI1MzEyX0VOQUJMRV9XTEFOMTsKKwkJX19yYXdfd3JpdGVsKHJlZywgKHZvaWQgX19pb21lbSAqKSBBUjVLX0FSNTMxMl9FTkFCTEUpOworCX0KKworCXJldCA9IGF0aDVrX2luaXRfc29mdGMoc2MsICZhdGhfYWhiX2J1c19vcHMpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gYXR0YWNoIGRldmljZSwgZXJyPSVkXG4iLCByZXQpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGVycl9mcmVlX2h3OworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGh3KTsKKworCXJldHVybiAwOworCisgZXJyX2ZyZWVfaHc6CisJaWVlZTgwMjExX2ZyZWVfaHcoaHcpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworIGVycl9vdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhdGhfYWhiX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBhcjIzMXhfYm9hcmRfY29uZmlnICpiY2ZnID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjOworCXUzMiByZWc7CisKKwlpZiAoIWh3KQorCQlyZXR1cm4gMDsKKworCXNjID0gaHctPnByaXY7CisKKwlpZiAoYmNmZy0+ZGV2aWQgPj0gQVI1S19TUkVWX0FSMjMxNV9SNikgeworCQkvKiBEaXNhYmxlIFdNQUMgQUhCIGFyYml0cmF0aW9uICovCisJCXJlZyA9IF9fcmF3X3JlYWRsKCh2b2lkIF9faW9tZW0gKikgQVI1S19BUjIzMTVfQUhCX0FSQl9DVEwpOworCQlyZWcgJj0gfkFSNUtfQVIyMzE1X0FIQl9BUkJfQ1RMX1dMQU47CisJCV9fcmF3X3dyaXRlbChyZWcsICh2b2lkIF9faW9tZW0gKikgQVI1S19BUjIzMTVfQUhCX0FSQl9DVEwpOworCX0gZWxzZSB7CisJCS8qU3RvcCBETUEgYWNjZXNzICovCisJCXJlZyA9IF9fcmF3X3JlYWRsKCh2b2lkIF9faW9tZW0gKikgQVI1S19BUjUzMTJfRU5BQkxFKTsKKwkJaWYgKHRvX3BsYXRmb3JtX2RldmljZShzYy0+ZGV2KS0+aWQgPT0gMCkKKwkJCXJlZyAmPSB+QVI1S19BUjUzMTJfRU5BQkxFX1dMQU4wOworCQllbHNlCisJCQlyZWcgJj0gfkFSNUtfQVI1MzEyX0VOQUJMRV9XTEFOMTsKKwkJX19yYXdfd3JpdGVsKHJlZywgKHZvaWQgX19pb21lbSAqKSBBUjVLX0FSNTMxMl9FTkFCTEUpOworCX0KKworCWF0aDVrX2RlaW5pdF9zb2Z0YyhzYyk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXRoX2FoYl9kcml2ZXIgPSB7CisJLnByb2JlICAgICAgPSBhdGhfYWhiX3Byb2JlLAorCS5yZW1vdmUgICAgID0gYXRoX2FoYl9yZW1vdmUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gImFyMjMxeC13bWFjIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0CithdGg1a19haGJfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmF0aF9haGJfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0CithdGg1a19haGJfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZhdGhfYWhiX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGF0aDVrX2FoYl9pbml0KTsKK21vZHVsZV9leGl0KGF0aDVrX2FoYl9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9hbmkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9hbmkuYwppbmRleCBmMTQxOTE5Li5mOTE1ZjQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYW5pLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2FuaS5jCkBAIC01OCwyMCArNTgsMjAgQEAKIHsKIAkvKiBUT0RPOgogCSAqIEFOSSBkb2N1bWVudHMgc3VnZ2VzdCB0aGUgZm9sbG93aW5nIGZpdmUgbGV2ZWxzIHRvIHVzZSwgYnV0IHRoZSBIQUwKLQkgKiBhbmQgYXRoOWsgdXNlIG9ubHkgdXNlIHRoZSBsYXN0IHR3byBsZXZlbHMsIG1ha2luZyB0aGlzCisJICogYW5kIGF0aDlrIHVzZSBvbmx5IHRoZSBsYXN0IHR3byBsZXZlbHMsIG1ha2luZyB0aGlzCiAJICogZXNzZW50aWFsbHkgYW4gb24vb2ZmIG9wdGlvbi4gVGhlcmUgKm1heSogYmUgYSByZWFzb24gZm9yIHRoaXMgKD8/PyksCiAJICogc28gaSBzdGljayB3aXRoIHRoZSBIQUwgdmVyc2lvbiBmb3Igbm93Li4uCiAJICovCiAjaWYgMAotCWNvbnN0IHM4IGhpW10gPSB7IC0xOCwgLTE4LCAtMTYsIC0xNCwgLTEyIH07Ci0JY29uc3QgczggbG9bXSA9IHsgLTUyLCAtNTYsIC02MCwgLTY0LCAtNzAgfTsKLQljb25zdCBzOCBzeltdID0geyAtMzQsIC00MSwgLTQ4LCAtNTUsIC02MiB9OwotCWNvbnN0IHM4IGZyW10gPSB7IC03MCwgLTcyLCAtNzUsIC03OCwgLTgwIH07CisJc3RhdGljIGNvbnN0IHM4IGxvW10gPSB7IC01MiwgLTU2LCAtNjAsIC02NCwgLTcwIH07CisJc3RhdGljIGNvbnN0IHM4IGhpW10gPSB7IC0xOCwgLTE4LCAtMTYsIC0xNCwgLTEyIH07CisJc3RhdGljIGNvbnN0IHM4IHN6W10gPSB7IC0zNCwgLTQxLCAtNDgsIC01NSwgLTYyIH07CisJc3RhdGljIGNvbnN0IHM4IGZyW10gPSB7IC03MCwgLTcyLCAtNzUsIC03OCwgLTgwIH07CiAjZWxzZQotCWNvbnN0IHM4IHN6W10gPSB7IC01NSwgLTYyIH07Ci0JY29uc3QgczggbG9bXSA9IHsgLTY0LCAtNzAgfTsKLQljb25zdCBzOCBoaVtdID0geyAtMTQsIC0xMiB9OwotCWNvbnN0IHM4IGZyW10gPSB7IC03OCwgLTgwIH07CisJc3RhdGljIGNvbnN0IHM4IGxvW10gPSB7IC02NCwgLTcwIH07CisJc3RhdGljIGNvbnN0IHM4IGhpW10gPSB7IC0xNCwgLTEyIH07CisJc3RhdGljIGNvbnN0IHM4IHN6W10gPSB7IC01NSwgLTYyIH07CisJc3RhdGljIGNvbnN0IHM4IGZyW10gPSB7IC03OCwgLTgwIH07CiAjZW5kaWYKIAlpZiAobGV2ZWwgPCAwIHx8IGxldmVsID49IEFSUkFZX1NJWkUoc3opKSB7CiAJCUFUSDVLX0VSUihhaC0+YWhfc2MsICJub2lzZSBpbW11bml5IGxldmVsICVkIG91dCBvZiByYW5nZSIsCkBAIC0xMDIsNyArMTAyLDcgQEAKIHZvaWQKIGF0aDVrX2FuaV9zZXRfc3B1cl9pbW11bml0eV9sZXZlbChzdHJ1Y3QgYXRoNWtfaHcgKmFoLCBpbnQgbGV2ZWwpCiB7Ci0JY29uc3QgaW50IHZhbFtdID0geyAyLCA0LCA2LCA4LCAxMCwgMTIsIDE0LCAxNiB9OworCXN0YXRpYyBjb25zdCBpbnQgdmFsW10gPSB7IDIsIDQsIDYsIDgsIDEwLCAxMiwgMTQsIDE2IH07CiAKIAlpZiAobGV2ZWwgPCAwIHx8IGxldmVsID49IEFSUkFZX1NJWkUodmFsKSB8fAogCSAgICBsZXZlbCA+IGFoLT5haF9zYy0+YW5pX3N0YXRlLm1heF9zcHVyX2xldmVsKSB7CkBAIC0xMjcsNyArMTI3LDcgQEAKIHZvaWQKIGF0aDVrX2FuaV9zZXRfZmlyc3RlcF9sZXZlbChzdHJ1Y3QgYXRoNWtfaHcgKmFoLCBpbnQgbGV2ZWwpCiB7Ci0JY29uc3QgaW50IHZhbFtdID0geyAwLCA0LCA4IH07CisJc3RhdGljIGNvbnN0IGludCB2YWxbXSA9IHsgMCwgNCwgOCB9OwogCiAJaWYgKGxldmVsIDwgMCB8fCBsZXZlbCA+PSBBUlJBWV9TSVpFKHZhbCkpIHsKIAkJQVRINUtfRVJSKGFoLT5haF9zYywgImZpcnN0ZXAgbGV2ZWwgJWQgb3V0IG9mIHJhbmdlIiwgbGV2ZWwpOwpAQCAtMTUxLDEyICsxNTEsMTIgQEAKIHZvaWQKIGF0aDVrX2FuaV9zZXRfb2ZkbV93ZWFrX3NpZ25hbF9kZXRlY3Rpb24oc3RydWN0IGF0aDVrX2h3ICphaCwgYm9vbCBvbikKIHsKLQljb25zdCBpbnQgbTFsW10gPSB7IDEyNywgNTAgfTsKLQljb25zdCBpbnQgbTJsW10gPSB7IDEyNywgNDAgfTsKLQljb25zdCBpbnQgbTFbXSA9IHsgMTI3LCAweDRkIH07Ci0JY29uc3QgaW50IG0yW10gPSB7IDEyNywgMHg0MCB9OwotCWNvbnN0IGludCBtMmNudFtdID0geyAzMSwgMTYgfTsKLQljb25zdCBpbnQgbTJsY250W10gPSB7IDYzLCA0OCB9OworCXN0YXRpYyBjb25zdCBpbnQgbTFsW10gPSB7IDEyNywgNTAgfTsKKwlzdGF0aWMgY29uc3QgaW50IG0ybFtdID0geyAxMjcsIDQwIH07CisJc3RhdGljIGNvbnN0IGludCBtMVtdID0geyAxMjcsIDB4NGQgfTsKKwlzdGF0aWMgY29uc3QgaW50IG0yW10gPSB7IDEyNywgMHg0MCB9OworCXN0YXRpYyBjb25zdCBpbnQgbTJjbnRbXSA9IHsgMzEsIDE2IH07CisJc3RhdGljIGNvbnN0IGludCBtMmxjbnRbXSA9IHsgNjMsIDQ4IH07CiAKIAlBUjVLX1JFR19XUklURV9CSVRTKGFoLCBBUjVLX1BIWV9XRUFLX09GRE1fTE9XX1RIUiwKIAkJCQlBUjVLX1BIWV9XRUFLX09GRE1fTE9XX1RIUl9NMSwgbTFsW29uXSk7CkBAIC0xOTIsNyArMTkyLDcgQEAKIHZvaWQKIGF0aDVrX2FuaV9zZXRfY2NrX3dlYWtfc2lnbmFsX2RldGVjdGlvbihzdHJ1Y3QgYXRoNWtfaHcgKmFoLCBib29sIG9uKQogewotCWNvbnN0IGludCB2YWxbXSA9IHsgOCwgNiB9OworCXN0YXRpYyBjb25zdCBpbnQgdmFsW10gPSB7IDgsIDYgfTsKIAlBUjVLX1JFR19XUklURV9CSVRTKGFoLCBBUjVLX1BIWV9DQ0tfQ1JPU1NDT1JSLAogCQkJCUFSNUtfUEhZX0NDS19DUk9TU0NPUlJfV0VBS19TSUdfVEhSLCB2YWxbb25dKTsKIAlhaC0+YWhfc2MtPmFuaV9zdGF0ZS5jY2tfd2Vha19zaWcgPSBvbjsKQEAgLTIxNiw3ICsyMTYsNyBAQAogYXRoNWtfYW5pX3JhaXNlX2ltbXVuaXR5KHN0cnVjdCBhdGg1a19odyAqYWgsIHN0cnVjdCBhdGg1a19hbmlfc3RhdGUgKmFzLAogCQkJIGJvb2wgb2ZkbV90cmlnZ2VyKQogewotCWludCByc3NpID0gYWgtPmFoX2JlYWNvbl9yc3NpX2F2Zy5hdmc7CisJaW50IHJzc2kgPSBld21hX3JlYWQoJmFoLT5haF9iZWFjb25fcnNzaV9hdmcpOwogCiAJQVRINUtfREJHX1VOTElNSVQoYWgtPmFoX3NjLCBBVEg1S19ERUJVR19BTkksICJyYWlzZSBpbW11bml0eSAoJXMpIiwKIAkJb2ZkbV90cmlnZ2VyID8gIk9ERk0iIDogIkNDSyIpOwpAQCAtMzAxLDcgKzMwMSw3IEBACiBzdGF0aWMgdm9pZAogYXRoNWtfYW5pX2xvd2VyX2ltbXVuaXR5KHN0cnVjdCBhdGg1a19odyAqYWgsIHN0cnVjdCBhdGg1a19hbmlfc3RhdGUgKmFzKQogewotCWludCByc3NpID0gYWgtPmFoX2JlYWNvbl9yc3NpX2F2Zy5hdmc7CisJaW50IHJzc2kgPSBld21hX3JlYWQoJmFoLT5haF9iZWFjb25fcnNzaV9hdmcpOwogCiAJQVRINUtfREJHX1VOTElNSVQoYWgtPmFoX3NjLCBBVEg1S19ERUJVR19BTkksICJsb3dlciBpbW11bml0eSIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYXRoNWsuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9hdGg1ay5oCmluZGV4IDMwOGI3OWUuLjQwN2UzOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9hdGg1ay5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9hdGg1ay5oCkBAIC0yNSw2ICsyNSw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvYXZlcmFnZS5oPgogI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgogCiAvKiBSWC9UWCBkZXNjcmlwdG9yIGh3IHN0cnVjdHMKQEAgLTE1MywxOSArMTU0LDYgQEAKIAkJdWRlbGF5KDEpOwkJCQkJCVwKIH0gd2hpbGUgKDApCiAKLS8qIFJlZ2lzdGVyIGR1bXBzIGFyZSBkb25lIHBlciBvcGVyYXRpb24gbW9kZSAqLwotI2RlZmluZSBBUjVLX0lOSV9SRkdBSU5fNUdIWgkJMAotI2RlZmluZSBBUjVLX0lOSV9SRkdBSU5fMkdIWgkJMQotCi0vKiBUT0RPOiBDbGVhbiB0aGlzIHVwICovCi0jZGVmaW5lIEFSNUtfSU5JX1ZBTF8xMUEJCTAKLSNkZWZpbmUgQVI1S19JTklfVkFMXzExQV9UVVJCTwkJMQotI2RlZmluZSBBUjVLX0lOSV9WQUxfMTFCCQkyCi0jZGVmaW5lIEFSNUtfSU5JX1ZBTF8xMUcJCTMKLSNkZWZpbmUgQVI1S19JTklfVkFMXzExR19UVVJCTwkJNAotI2RlZmluZSBBUjVLX0lOSV9WQUxfWFIJCQkwCi0jZGVmaW5lIEFSNUtfSU5JX1ZBTF9NQVgJCTUKLQogLyoKICAqIFNvbWUgdHVuZWFibGUgdmFsdWVzICh0aGVzZSBzaG91bGQgYmUgY2hhbmdlYWJsZSBieSB0aGUgdXNlcikKICAqIFRPRE86IE1ha2UgdXNlIG9mIHRoZW0gYW5kIGFkZCBtb3JlIG9wdGlvbnMgT1IgdXNlIGRlYnVnL2NvbmZpZ2ZzCkBAIC0yMjEsNDIgKzIwOSw2NiBAQAogCiAvKiBJbml0aWFsIHZhbHVlcyAqLwogI2RlZmluZQlBUjVLX0lOSVRfQ1lDUlNTSV9USFIxCQkJMgotI2RlZmluZSBBUjVLX0lOSVRfVFhfTEFURU5DWQkJCTUwMgotI2RlZmluZSBBUjVLX0lOSVRfVVNFQwkJCQkzOQotI2RlZmluZSBBUjVLX0lOSVRfVVNFQ19UVVJCTwkJCTc5Ci0jZGVmaW5lIEFSNUtfSU5JVF9VU0VDXzMyCQkJMzEKLSNkZWZpbmUgQVI1S19JTklUX1NMT1RfVElNRQkJCTM5NgotI2RlZmluZSBBUjVLX0lOSVRfU0xPVF9USU1FX1RVUkJPCQk0ODAKLSNkZWZpbmUgQVI1S19JTklUX0FDS19DVFNfVElNRU9VVAkJMTAyNAotI2RlZmluZSBBUjVLX0lOSVRfQUNLX0NUU19USU1FT1VUX1RVUkJPCQkweDA4MDAwODAwCi0jZGVmaW5lIEFSNUtfSU5JVF9QUk9HX0lGUwkJCTkyMAotI2RlZmluZSBBUjVLX0lOSVRfUFJPR19JRlNfVFVSQk8JCTk2MAotI2RlZmluZSBBUjVLX0lOSVRfRUlGUwkJCQkzNDQwCi0jZGVmaW5lIEFSNUtfSU5JVF9FSUZTX1RVUkJPCQkJNjg4MAotI2RlZmluZSBBUjVLX0lOSVRfU0lGUwkJCQk1NjAKLSNkZWZpbmUgQVI1S19JTklUX1NJRlNfVFVSQk8JCQk0ODAKKworLyogVHggcmV0cnkgbGltaXRzICovCiAjZGVmaW5lIEFSNUtfSU5JVF9TSF9SRVRSWQkJCTEwCiAjZGVmaW5lIEFSNUtfSU5JVF9MR19SRVRSWQkJCUFSNUtfSU5JVF9TSF9SRVRSWQorLyogRm9yIHN0YXRpb24gbW9kZSAqLwogI2RlZmluZSBBUjVLX0lOSVRfU1NIX1JFVFJZCQkJMzIKICNkZWZpbmUgQVI1S19JTklUX1NMR19SRVRSWQkJCUFSNUtfSU5JVF9TU0hfUkVUUlkKICNkZWZpbmUgQVI1S19JTklUX1RYX1JFVFJZCQkJMTAKIAotI2RlZmluZSBBUjVLX0lOSVRfVFJBTlNNSVRfTEFURU5DWQkJKAkJCVwKLQkoQVI1S19JTklUX1RYX0xBVEVOQ1kgPDwgMTQpIHwgKEFSNUtfSU5JVF9VU0VDXzMyIDw8IDcpIHwJXAotCShBUjVLX0lOSVRfVVNFQykJCQkJCQlcCi0pCi0jZGVmaW5lIEFSNUtfSU5JVF9UUkFOU01JVF9MQVRFTkNZX1RVUkJPCSgJCQlcCi0JKEFSNUtfSU5JVF9UWF9MQVRFTkNZIDw8IDE0KSB8IChBUjVLX0lOSVRfVVNFQ18zMiA8PCA3KSB8CVwKLQkoQVI1S19JTklUX1VTRUNfVFVSQk8pCQkJCQkJXAotKQotI2RlZmluZSBBUjVLX0lOSVRfUFJPVE9fVElNRV9DTlRSTAkJKAkJCVwKLQkoQVI1S19JTklUX0NBUlJfU0VOU0VfRU4gPDwgMjYpIHwgKEFSNUtfSU5JVF9FSUZTIDw8IDEyKSB8CVwKLQkoQVI1S19JTklUX1BST0dfSUZTKQkJCQkJCVwKLSkKLSNkZWZpbmUgQVI1S19JTklUX1BST1RPX1RJTUVfQ05UUkxfVFVSQk8JKAkJCVwKLQkoQVI1S19JTklUX0NBUlJfU0VOU0VfRU4gPDwgMjYpIHwgKEFSNUtfSU5JVF9FSUZTX1RVUkJPIDw8IDEyKSB8IFwKLQkoQVI1S19JTklUX1BST0dfSUZTX1RVUkJPKQkJCQkJXAotKQorCisvKiBTbG90IHRpbWUgKi8KKyNkZWZpbmUgQVI1S19JTklUX1NMT1RfVElNRV9UVVJCTwkJNgorI2RlZmluZSBBUjVLX0lOSVRfU0xPVF9USU1FX0RFRkFVTFQJCTkKKyNkZWZpbmUJQVI1S19JTklUX1NMT1RfVElNRV9IQUxGX1JBVEUJCTEzCisjZGVmaW5lCUFSNUtfSU5JVF9TTE9UX1RJTUVfUVVBUlRFUl9SQVRFCTIxCisjZGVmaW5lCUFSNUtfSU5JVF9TTE9UX1RJTUVfQgkJCTIwCisjZGVmaW5lIEFSNUtfU0xPVF9USU1FX01BWAkJCTB4ZmZmZgorCisvKiBTSUZTICovCisjZGVmaW5lCUFSNUtfSU5JVF9TSUZTX1RVUkJPCQkJNgorLyogWFhYOiA4IGZyb20gaW5pdHZhbHMgMTAgZnJvbSBzdGFuZGFyZCAqLworI2RlZmluZQlBUjVLX0lOSVRfU0lGU19ERUZBVUxUX0JHCQk4CisjZGVmaW5lCUFSNUtfSU5JVF9TSUZTX0RFRkFVTFRfQQkJMTYKKyNkZWZpbmUJQVI1S19JTklUX1NJRlNfSEFMRl9SQVRFCQkzMgorI2RlZmluZSBBUjVLX0lOSVRfU0lGU19RVUFSVEVSX1JBVEUJCTY0CisKKy8qIFVzZWQgdG8gY2FsY3VsYXRlIHR4IHRpbWUgZm9yIG5vbiA1LzEwLzQwTUh6CisgKiBvcGVyYXRpb24gKi8KKy8qIEl0J3MgcHJlYW1ibGUgdGltZSArIHNpZ25hbCB0aW1lICgxNiArIDQpICovCisjZGVmaW5lCUFSNUtfSU5JVF9PRkRNX1BSRUFNUExFX1RJTUUJCTIwCisvKiBQcmVhbWJsZSB0aW1lIGZvciA0ME1IeiAodHVyYm8pIG9wZXJhdGlvbiAobWluID8pICovCisjZGVmaW5lCUFSNUtfSU5JVF9PRkRNX1BSRUFNQkxFX1RJTUVfTUlOCTE0CisjZGVmaW5lCUFSNUtfSU5JVF9PRkRNX1NZTUJPTF9USU1FCQk0CisjZGVmaW5lCUFSNUtfSU5JVF9PRkRNX1BMQ1BfQklUUwkJMjIKKworLyogUnggbGF0ZW5jeSBmb3IgNSBhbmQgMTBNSHogb3BlcmF0aW9uIChtYXggPykgKi8KKyNkZWZpbmUgQVI1S19JTklUX1JYX0xBVF9NQVgJCQk2MworLyogVHggbGF0ZW5jaWVzIGZyb20gaW5pdHZhbHMgKDUyMTIgb25seSBidXQgbm8gcHJvYmxlbQorICogYmVjYXVzZSB3ZSBvbmx5IHR3ZWFrIHRoZW0gb24gNTIxMikgKi8KKyNkZWZpbmUJQVI1S19JTklUX1RYX0xBVF9BCQkJNTQKKyNkZWZpbmUJQVI1S19JTklUX1RYX0xBVF9CRwkJCTM4NAorLyogVHggbGF0ZW5jeSBmb3IgNDBNSHogKHR1cmJvKSBvcGVyYXRpb24gKG1pbiA/KSAqLworI2RlZmluZQlBUjVLX0lOSVRfVFhfTEFUX01JTgkJCTMyCisvKiBEZWZhdWx0IFR4L1J4IGxhdGVuY2llcyAoc2FtZSBmb3IgNTIxMSkqLworI2RlZmluZSBBUjVLX0lOSVRfVFhfTEFURU5DWV81MjEwCQk1NAorI2RlZmluZQlBUjVLX0lOSVRfUlhfTEFURU5DWV81MjEwCQkyOQorCisvKiBUeCBmcmFtZSB0byBUeCBkYXRhIHN0YXJ0IGRlbGF5ICovCisjZGVmaW5lIEFSNUtfSU5JVF9UWEYyVFhEX1NUQVJUX0RFRkFVTFQJCTE0CisjZGVmaW5lIEFSNUtfSU5JVF9UWEYyVFhEX1NUQVJUX0RFTEFZXzEwTUhaCTEyCisjZGVmaW5lIEFSNUtfSU5JVF9UWEYyVFhEX1NUQVJUX0RFTEFZXzVNSFoJMTMKKworLyogV2UgbmVlZCB0byBpbmNyZWFzZSBQSFkgc3dpdGNoIGFuZCBhZ2Mgc2V0dGxpbmcgdGltZQorICogb24gdHVyYm8gbW9kZSAqLworI2RlZmluZQlBUjVLX1NXSVRDSF9TRVRUTElORwkJCTU3NjAKKyNkZWZpbmUJQVI1S19TV0lUQ0hfU0VUVExJTkdfVFVSQk8JCTcxNjgKKworI2RlZmluZQlBUjVLX0FHQ19TRVRUTElORwkJCTI4CisvKiAzOCBvbiA1MjEwIGJ1dCBzaG91bGRuJ3QgbWF0dGVyICovCisjZGVmaW5lCUFSNUtfQUdDX1NFVFRMSU5HX1RVUkJPCQkJMzcKIAogCiAvKiBHRU5FUklDIENISVBTRVQgREVGSU5JVElPTlMgKi8KQEAgLTMwMywxMiArMzE1LDE5IEBACiAjZGVmaW5lIEFSNUtfU1JFVl9BUjUzMTFCCTB4MzAgLyogU3Bpcml0ICovCiAjZGVmaW5lIEFSNUtfU1JFVl9BUjUyMTEJMHg0MCAvKiBPYWh1ICovCiAjZGVmaW5lIEFSNUtfU1JFVl9BUjUyMTIJMHg1MCAvKiBWZW5pY2UgKi8KKyNkZWZpbmUgQVI1S19TUkVWX0FSNTMxMl9SMgkweDUyIC8qIEFQMzEgKi8KICNkZWZpbmUgQVI1S19TUkVWX0FSNTIxMl9WNAkweDU0IC8qID8/PyAqLwogI2RlZmluZSBBUjVLX1NSRVZfQVI1MjEzCTB4NTUgLyogPz8/ICovCisjZGVmaW5lIEFSNUtfU1JFVl9BUjUzMTJfUjcJMHg1NyAvKiBBUDMwICovCisjZGVmaW5lIEFSNUtfU1JFVl9BUjIzMTNfUjgJMHg1OCAvKiBBUDQzICovCiAjZGVmaW5lIEFSNUtfU1JFVl9BUjUyMTNBCTB4NTkgLyogSGFpbmFuICovCiAjZGVmaW5lIEFSNUtfU1JFVl9BUjI0MTMJMHg3OCAvKiBHcmlmZmluIGxpdGUgKi8KICNkZWZpbmUgQVI1S19TUkVWX0FSMjQxNAkweDcwIC8qIEdyaWZmaW4gKi8KKyNkZWZpbmUgQVI1S19TUkVWX0FSMjMxNV9SNiAweDg2IC8qIEFQNTEtTGlnaHQgKi8KKyNkZWZpbmUgQVI1S19TUkVWX0FSMjMxNV9SNyAweDg3IC8qIEFQNTEtRnVsbCAqLwogI2RlZmluZSBBUjVLX1NSRVZfQVI1NDI0CTB4OTAgLyogQ29uZG9yICovCisjZGVmaW5lIEFSNUtfU1JFVl9BUjIzMTdfUjEgMHg5MCAvKiBBUDYxLUxpZ2h0ICovCisjZGVmaW5lIEFSNUtfU1JFVl9BUjIzMTdfUjIgMHg5MSAvKiBBUDYxLUZ1bGwgKi8KICNkZWZpbmUgQVI1S19TUkVWX0FSNTQxMwkweGE0IC8qIEVhZ2xlIGxpdGUgKi8KICNkZWZpbmUgQVI1S19TUkVWX0FSNTQxNAkweGEwIC8qIEVhZ2xlICovCiAjZGVmaW5lIEFSNUtfU1JFVl9BUjI0MTUJMHhiMCAvKiBUYWxvbiAqLwpAQCAtNDA0LDEyICs0MjMsMTAgQEAKIAogZW51bSBhdGg1a19kcml2ZXJfbW9kZSB7CiAJQVI1S19NT0RFXzExQQkJPQkwLAotCUFSNUtfTU9ERV8xMUFfVFVSQk8JPQkxLAotCUFSNUtfTU9ERV8xMUIJCT0JMiwKLQlBUjVLX01PREVfMTFHCQk9CTMsCi0JQVI1S19NT0RFXzExR19UVVJCTwk9CTQsCisJQVI1S19NT0RFXzExQgkJPQkxLAorCUFSNUtfTU9ERV8xMUcJCT0JMiwKIAlBUjVLX01PREVfWFIJCT0JMCwKLQlBUjVLX01PREVfTUFYCQk9CTUKKwlBUjVLX01PREVfTUFYCQk9CTMKIH07CiAKIGVudW0gYXRoNWtfYW50X21vZGUgewpAQCAtNDIzLDYgKzQ0MCwxMiBAQAogCUFSNUtfQU5UTU9ERV9NQVgsCiB9OwogCitlbnVtIGF0aDVrX2J3X21vZGUgeworCUFSNUtfQldNT0RFX0RFRkFVTFQJPSAwLAkvKiAyME1IeiwgZGVmYXVsdCBvcGVyYXRpb24gKi8KKwlBUjVLX0JXTU9ERV81TUhaCT0gMSwJLyogUXVhcnRlciByYXRlICovCisJQVI1S19CV01PREVfMTBNSFoJPSAyLAkvKiBIYWxmIHJhdGUgKi8KKwlBUjVLX0JXTU9ERV80ME1IWgk9IDMJLyogVHVyYm8gKi8KK307CiAKIC8qKioqKioqKioqKioqKioqXAogICBUWCBERUZJTklUSU9OUwpAQCAtNjU1LDcgKzY3OCw2IEBACiAKIC8qIGNoYW5uZWxfZmxhZ3MgKi8KICNkZWZpbmUJQ0hBTk5FTF9DV19JTlQJMHgwMDA4CS8qIENvbnRlbnRpb24gV2luZG93IGludGVyZmVyZW5jZSBkZXRlY3RlZCAqLwotI2RlZmluZQlDSEFOTkVMX1RVUkJPCTB4MDAxMAkvKiBUdXJibyBDaGFubmVsICovCiAjZGVmaW5lCUNIQU5ORUxfQ0NLCTB4MDAyMAkvKiBDQ0sgY2hhbm5lbCAqLwogI2RlZmluZQlDSEFOTkVMX09GRE0JMHgwMDQwCS8qIE9GRE0gY2hhbm5lbCAqLwogI2RlZmluZQlDSEFOTkVMXzJHSFoJMHgwMDgwCS8qIDJHSHogY2hhbm5lbC4gKi8KQEAgLTY2NywxNiArNjg5LDEwIEBACiAjZGVmaW5lCUNIQU5ORUxfQQkoQ0hBTk5FTF81R0hafENIQU5ORUxfT0ZETSkKICNkZWZpbmUJQ0hBTk5FTF9CCShDSEFOTkVMXzJHSFp8Q0hBTk5FTF9DQ0spCiAjZGVmaW5lCUNIQU5ORUxfRwkoQ0hBTk5FTF8yR0hafENIQU5ORUxfT0ZETSkKLSNkZWZpbmUJQ0hBTk5FTF9UCShDSEFOTkVMXzVHSFp8Q0hBTk5FTF9PRkRNfENIQU5ORUxfVFVSQk8pCi0jZGVmaW5lCUNIQU5ORUxfVEcJKENIQU5ORUxfMkdIWnxDSEFOTkVMX09GRE18Q0hBTk5FTF9UVVJCTykKLSNkZWZpbmUJQ0hBTk5FTF8xMDhBCUNIQU5ORUxfVAotI2RlZmluZQlDSEFOTkVMXzEwOEcJQ0hBTk5FTF9URwogI2RlZmluZQlDSEFOTkVMX1gJKENIQU5ORUxfNUdIWnxDSEFOTkVMX09GRE18Q0hBTk5FTF9YUikKIAotI2RlZmluZQlDSEFOTkVMX0FMTCAJKENIQU5ORUxfT0ZETXxDSEFOTkVMX0NDS3xDSEFOTkVMXzJHSFp8Q0hBTk5FTF81R0hafCBcCi0JCUNIQU5ORUxfVFVSQk8pCisjZGVmaW5lCUNIQU5ORUxfQUxMCShDSEFOTkVMX09GRE18Q0hBTk5FTF9DQ0t8Q0hBTk5FTF8yR0hafENIQU5ORUxfNUdIWikKIAotI2RlZmluZQlDSEFOTkVMX0FMTF9OT1RVUkJPIAkoQ0hBTk5FTF9BTEwgJiB+Q0hBTk5FTF9UVVJCTykKICNkZWZpbmUgQ0hBTk5FTF9NT0RFUwkJQ0hBTk5FTF9BTEwKIAogLyoKQEAgLTEwMjUsNyArMTA0MSw2IEBACiAJZW51bSBhdGg1a19pbnQJCWFoX2ltcjsKIAogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqYWhfY3VycmVudF9jaGFubmVsOwotCWJvb2wJCQlhaF90dXJibzsKIAlib29sCQkJYWhfY2FsaWJyYXRpb247CiAJYm9vbAkJCWFoX3NpbmdsZV9jaGlwOwogCkBAIC0xMDM0LDYgKzEwNDksNyBAQAogCXUzMgkJCWFoX3BoeTsKIAl1MzIJCQlhaF9tYWNfc3JldjsKIAl1MTYJCQlhaF9tYWNfdmVyc2lvbjsKKwl1MTYJCQlhaF9tYWNfcmV2aXNpb247CiAJdTE2CQkJYWhfcGh5X3JldmlzaW9uOwogCXUxNgkJCWFoX3JhZGlvXzVnaHpfcmV2aXNpb247CiAJdTE2CQkJYWhfcmFkaW9fMmdoel9yZXZpc2lvbjsKQEAgLTEwNDMsNiArMTA1OSw4IEBACiAKIAl1MzIJCQlhaF9saW1pdF90eF9yZXRyaWVzOwogCXU4CQkJYWhfY292ZXJhZ2VfY2xhc3M7CisJYm9vbAkJCWFoX2Fja19iaXRyYXRlX2hpZ2g7CisJdTgJCQlhaF9id21vZGU7CiAKIAkvKiBBbnRlbm5hIENvbnRyb2wgKi8KIAl1MzIJCQlhaF9hbnRfY3RsW0FSNUtfRUVQUk9NX05fTU9ERVNdW0FSNUtfQU5UX01BWF07CkBAIC0xMDg1LDEyICsxMTAzLDE0IEBACiAJCS8qIFZhbHVlcyBpbiAwLjI1ZEIgdW5pdHMgKi8KIAkJczE2CQl0eHBfbWluX3B3cjsKIAkJczE2CQl0eHBfbWF4X3B3cjsKKwkJczE2CQl0eHBfY3VyX3B3cjsKIAkJLyogVmFsdWVzIGluIDAuNWRCIHVuaXRzICovCiAJCXMxNgkJdHhwX29mZnNldDsKIAkJczE2CQl0eHBfb2ZkbTsKIAkJczE2CQl0eHBfY2NrX29mZG1fZ2FpbmZfZGVsdGE7CiAJCS8qIFZhbHVlIGluIGRCIHVuaXRzICovCiAJCXMxNgkJdHhwX2Nja19vZmRtX3B3cl9kZWx0YTsKKwkJYm9vbAkJdHhwX3NldHVwOwogCX0gYWhfdHhwb3dlcjsKIAogCXN0cnVjdCB7CkBAIC0xMTAyLDcgKzExMjIsNyBAQAogCXN0cnVjdCBhdGg1a19uZmNhbF9oaXN0IGFoX25mY2FsX2hpc3Q7CiAKIAkvKiBhdmVyYWdlIGJlYWNvbiBSU1NJIGluIG91ciBCU1MgKHVzZWQgYnkgQU5JKSAqLwotCXN0cnVjdCBhdGg1a19hdmdfdmFsCWFoX2JlYWNvbl9yc3NpX2F2ZzsKKwlzdHJ1Y3QgZXdtYQkJYWhfYmVhY29uX3Jzc2lfYXZnOwogCiAJLyogbm9pc2UgZmxvb3IgZnJvbSBsYXN0IHBlcmlvZGljIGNhbGlicmF0aW9uICovCiAJczMyCQkJYWhfbm9pc2VfZmxvb3I7CkBAIC0xMTMxLDM2ICsxMTUxLDUwIEBACiAvKgogICogUHJvdG90eXBlcwogICovCitleHRlcm4gY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgYXRoNWtfaHdfb3BzOwogCi0vKiBBdHRhY2gvRGV0YWNoIEZ1bmN0aW9ucyAqLwotaW50IGF0aDVrX2h3X2F0dGFjaChzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKTsKLXZvaWQgYXRoNWtfaHdfZGV0YWNoKHN0cnVjdCBhdGg1a19odyAqYWgpOworLyogSW5pdGlhbGl6YXRpb24gYW5kIGRldGFjaCBmdW5jdGlvbnMgKi8KK2ludCBhdGg1a19pbml0X3NvZnRjKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MsIGNvbnN0IHN0cnVjdCBhdGhfYnVzX29wcyAqYnVzX29wcyk7Cit2b2lkIGF0aDVrX2RlaW5pdF9zb2Z0YyhzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKTsKK2ludCBhdGg1a19od19pbml0KHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpOwordm9pZCBhdGg1a19od19kZWluaXQoc3RydWN0IGF0aDVrX2h3ICphaCk7CiAKIGludCBhdGg1a19zeXNmc19yZWdpc3RlcihzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKTsKIHZvaWQgYXRoNWtfc3lzZnNfdW5yZWdpc3RlcihzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKTsKIAorLypDaGlwIGlkIGhlbHBlciBmdW5jdGlvbnMgKi8KK2NvbnN0IGNoYXIgKmF0aDVrX2NoaXBfbmFtZShlbnVtIGF0aDVrX3NyZXZfdHlwZSB0eXBlLCB1X2ludDE2X3QgdmFsKTsKK2ludCBhdGg1a19od19yZWFkX3NyZXYoc3RydWN0IGF0aDVrX2h3ICphaCk7CisKIC8qIExFRCBmdW5jdGlvbnMgKi8KIGludCBhdGg1a19pbml0X2xlZHMoc3RydWN0IGF0aDVrX3NvZnRjICpzYyk7CiB2b2lkIGF0aDVrX2xlZF9lbmFibGUoc3RydWN0IGF0aDVrX3NvZnRjICpzYyk7CiB2b2lkIGF0aDVrX2xlZF9vZmYoc3RydWN0IGF0aDVrX3NvZnRjICpzYyk7CiB2b2lkIGF0aDVrX3VucmVnaXN0ZXJfbGVkcyhzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKTsKIAorCiAvKiBSZXNldCBGdW5jdGlvbnMgKi8KIGludCBhdGg1a19od19uaWNfd2FrZXVwKHN0cnVjdCBhdGg1a19odyAqYWgsIGludCBmbGFncywgYm9vbCBpbml0aWFsKTsKIGludCBhdGg1a19od19vbl9ob2xkKHN0cnVjdCBhdGg1a19odyAqYWgpOwogaW50IGF0aDVrX2h3X3Jlc2V0KHN0cnVjdCBhdGg1a19odyAqYWgsIGVudW0gbmw4MDIxMV9pZnR5cGUgb3BfbW9kZSwKLQkJICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsLCBib29sIGNoYW5nZV9jaGFubmVsKTsKKwkgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwsIGJvb2wgZmFzdCwgYm9vbCBza2lwX3BjdSk7CiBpbnQgYXRoNWtfaHdfcmVnaXN0ZXJfdGltZW91dChzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1MzIgcmVnLCB1MzIgZmxhZywgdTMyIHZhbCwKIAkJCSAgICAgIGJvb2wgaXNfc2V0KTsKIC8qIFBvd2VyIG1hbmFnZW1lbnQgZnVuY3Rpb25zICovCiAKKworLyogQ2xvY2sgcmF0ZSByZWxhdGVkIGZ1bmN0aW9ucyAqLwordW5zaWduZWQgaW50IGF0aDVrX2h3X2h0b2Nsb2NrKHN0cnVjdCBhdGg1a19odyAqYWgsIHVuc2lnbmVkIGludCB1c2VjKTsKK3Vuc2lnbmVkIGludCBhdGg1a19od19jbG9ja3RvaChzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1bnNpZ25lZCBpbnQgY2xvY2spOwordm9pZCBhdGg1a19od19zZXRfY2xvY2tyYXRlKHN0cnVjdCBhdGg1a19odyAqYWgpOworCisKIC8qIERNQSBSZWxhdGVkIEZ1bmN0aW9ucyAqLwogdm9pZCBhdGg1a19od19zdGFydF9yeF9kbWEoc3RydWN0IGF0aDVrX2h3ICphaCk7Ci1pbnQgYXRoNWtfaHdfc3RvcF9yeF9kbWEoc3RydWN0IGF0aDVrX2h3ICphaCk7CiB1MzIgYXRoNWtfaHdfZ2V0X3J4ZHAoc3RydWN0IGF0aDVrX2h3ICphaCk7Ci12b2lkIGF0aDVrX2h3X3NldF9yeGRwKHN0cnVjdCBhdGg1a19odyAqYWgsIHUzMiBwaHlzX2FkZHIpOworaW50IGF0aDVrX2h3X3NldF9yeGRwKHN0cnVjdCBhdGg1a19odyAqYWgsIHUzMiBwaHlzX2FkZHIpOwogaW50IGF0aDVrX2h3X3N0YXJ0X3R4X2RtYShzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1bnNpZ25lZCBpbnQgcXVldWUpOwotaW50IGF0aDVrX2h3X3N0b3BfdHhfZG1hKHN0cnVjdCBhdGg1a19odyAqYWgsIHVuc2lnbmVkIGludCBxdWV1ZSk7CitpbnQgYXRoNWtfaHdfc3RvcF9iZWFjb25fcXVldWUoc3RydWN0IGF0aDVrX2h3ICphaCwgdW5zaWduZWQgaW50IHF1ZXVlKTsKIHUzMiBhdGg1a19od19nZXRfdHhkcChzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1bnNpZ25lZCBpbnQgcXVldWUpOwogaW50IGF0aDVrX2h3X3NldF90eGRwKHN0cnVjdCBhdGg1a19odyAqYWgsIHVuc2lnbmVkIGludCBxdWV1ZSwKIAkJCQl1MzIgcGh5c19hZGRyKTsKQEAgLTExNzAsMzggKzEyMDQsNDMgQEAKIGludCBhdGg1a19od19nZXRfaXNyKHN0cnVjdCBhdGg1a19odyAqYWgsIGVudW0gYXRoNWtfaW50ICppbnRlcnJ1cHRfbWFzayk7CiBlbnVtIGF0aDVrX2ludCBhdGg1a19od19zZXRfaW1yKHN0cnVjdCBhdGg1a19odyAqYWgsIGVudW0gYXRoNWtfaW50IG5ld19tYXNrKTsKIHZvaWQgYXRoNWtfaHdfdXBkYXRlX21pYl9jb3VudGVycyhzdHJ1Y3QgYXRoNWtfaHcgKmFoKTsKKy8qIEluaXQvU3RvcCBmdW5jdGlvbnMgKi8KK3ZvaWQgYXRoNWtfaHdfZG1hX2luaXQoc3RydWN0IGF0aDVrX2h3ICphaCk7CitpbnQgYXRoNWtfaHdfZG1hX3N0b3Aoc3RydWN0IGF0aDVrX2h3ICphaCk7CiAKIC8qIEVFUFJPTSBhY2Nlc3MgZnVuY3Rpb25zICovCiBpbnQgYXRoNWtfZWVwcm9tX2luaXQoc3RydWN0IGF0aDVrX2h3ICphaCk7CiB2b2lkIGF0aDVrX2VlcHJvbV9kZXRhY2goc3RydWN0IGF0aDVrX2h3ICphaCk7CiBpbnQgYXRoNWtfZWVwcm9tX3JlYWRfbWFjKHN0cnVjdCBhdGg1a19odyAqYWgsIHU4ICptYWMpOwogCisKIC8qIFByb3RvY29sIENvbnRyb2wgVW5pdCBGdW5jdGlvbnMgKi8KKy8qIEhlbHBlcnMgKi8KK2ludCBhdGg1a19od19nZXRfZnJhbWVfZHVyYXRpb24oc3RydWN0IGF0aDVrX2h3ICphaCwKKwkJaW50IGxlbiwgc3RydWN0IGllZWU4MDIxMV9yYXRlICpyYXRlKTsKK3Vuc2lnbmVkIGludCBhdGg1a19od19nZXRfZGVmYXVsdF9zbG90dGltZShzdHJ1Y3QgYXRoNWtfaHcgKmFoKTsKK3Vuc2lnbmVkIGludCBhdGg1a19od19nZXRfZGVmYXVsdF9zaWZzKHN0cnVjdCBhdGg1a19odyAqYWgpOwogZXh0ZXJuIGludCBhdGg1a19od19zZXRfb3Btb2RlKHN0cnVjdCBhdGg1a19odyAqYWgsIGVudW0gbmw4MDIxMV9pZnR5cGUgb3Btb2RlKTsKIHZvaWQgYXRoNWtfaHdfc2V0X2NvdmVyYWdlX2NsYXNzKHN0cnVjdCBhdGg1a19odyAqYWgsIHU4IGNvdmVyYWdlX2NsYXNzKTsKLS8qIEJTU0lEIEZ1bmN0aW9ucyAqLworLyogUlggZmlsdGVyIGNvbnRyb2wqLwogaW50IGF0aDVrX2h3X3NldF9sbGFkZHIoc3RydWN0IGF0aDVrX2h3ICphaCwgY29uc3QgdTggKm1hYyk7CiB2b2lkIGF0aDVrX2h3X3NldF9ic3NpZChzdHJ1Y3QgYXRoNWtfaHcgKmFoKTsKIHZvaWQgYXRoNWtfaHdfc2V0X2Jzc2lkX21hc2soc3RydWN0IGF0aDVrX2h3ICphaCwgY29uc3QgdTggKm1hc2spOwotLyogUmVjZWl2ZSBzdGFydC9zdG9wIGZ1bmN0aW9ucyAqLwotdm9pZCBhdGg1a19od19zdGFydF9yeF9wY3Uoc3RydWN0IGF0aDVrX2h3ICphaCk7Ci12b2lkIGF0aDVrX2h3X3N0b3BfcnhfcGN1KHN0cnVjdCBhdGg1a19odyAqYWgpOwotLyogUlggRmlsdGVyIGZ1bmN0aW9ucyAqLwogdm9pZCBhdGg1a19od19zZXRfbWNhc3RfZmlsdGVyKHN0cnVjdCBhdGg1a19odyAqYWgsIHUzMiBmaWx0ZXIwLCB1MzIgZmlsdGVyMSk7CiB1MzIgYXRoNWtfaHdfZ2V0X3J4X2ZpbHRlcihzdHJ1Y3QgYXRoNWtfaHcgKmFoKTsKIHZvaWQgYXRoNWtfaHdfc2V0X3J4X2ZpbHRlcihzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1MzIgZmlsdGVyKTsKKy8qIFJlY2VpdmUgKERSVSkgc3RhcnQvc3RvcCBmdW5jdGlvbnMgKi8KK3ZvaWQgYXRoNWtfaHdfc3RhcnRfcnhfcGN1KHN0cnVjdCBhdGg1a19odyAqYWgpOwordm9pZCBhdGg1a19od19zdG9wX3J4X3BjdShzdHJ1Y3QgYXRoNWtfaHcgKmFoKTsKIC8qIEJlYWNvbiBjb250cm9sIGZ1bmN0aW9ucyAqLwogdTY0IGF0aDVrX2h3X2dldF90c2Y2NChzdHJ1Y3QgYXRoNWtfaHcgKmFoKTsKIHZvaWQgYXRoNWtfaHdfc2V0X3RzZjY0KHN0cnVjdCBhdGg1a19odyAqYWgsIHU2NCB0c2Y2NCk7CiB2b2lkIGF0aDVrX2h3X3Jlc2V0X3RzZihzdHJ1Y3QgYXRoNWtfaHcgKmFoKTsKIHZvaWQgYXRoNWtfaHdfaW5pdF9iZWFjb24oc3RydWN0IGF0aDVrX2h3ICphaCwgdTMyIG5leHRfYmVhY29uLCB1MzIgaW50ZXJ2YWwpOwogYm9vbCBhdGg1a19od19jaGVja19iZWFjb25fdGltZXJzKHN0cnVjdCBhdGg1a19odyAqYWgsIGludCBpbnR2YWwpOwotLyogQUNLIGJpdCByYXRlICovCi12b2lkIGF0aDVrX2h3X3NldF9hY2tfYml0cmF0ZV9oaWdoKHN0cnVjdCBhdGg1a19odyAqYWgsIGJvb2wgaGlnaCk7Ci0vKiBDbG9jayByYXRlIHJlbGF0ZWQgZnVuY3Rpb25zICovCi11bnNpZ25lZCBpbnQgYXRoNWtfaHdfaHRvY2xvY2soc3RydWN0IGF0aDVrX2h3ICphaCwgdW5zaWduZWQgaW50IHVzZWMpOwotdW5zaWduZWQgaW50IGF0aDVrX2h3X2Nsb2NrdG9oKHN0cnVjdCBhdGg1a19odyAqYWgsIHVuc2lnbmVkIGludCBjbG9jayk7Ci12b2lkIGF0aDVrX2h3X3NldF9jbG9ja3JhdGUoc3RydWN0IGF0aDVrX2h3ICphaCk7CisvKiBJbml0IGZ1bmN0aW9uICovCit2b2lkIGF0aDVrX2h3X3BjdV9pbml0KHN0cnVjdCBhdGg1a19odyAqYWgsIGVudW0gbmw4MDIxMV9pZnR5cGUgb3BfbW9kZSwKKwkJCQkJCQkJdTggbW9kZSk7CiAKIC8qIFF1ZXVlIENvbnRyb2wgVW5pdCwgREZTIENvbnRyb2wgVW5pdCBGdW5jdGlvbnMgKi8KIGludCBhdGg1a19od19nZXRfdHhfcXVldWVwcm9wcyhzdHJ1Y3QgYXRoNWtfaHcgKmFoLCBpbnQgcXVldWUsCkBAIC0xMjE0LDcgKzEyNTMsOSBAQAogdTMyIGF0aDVrX2h3X251bV90eF9wZW5kaW5nKHN0cnVjdCBhdGg1a19odyAqYWgsIHVuc2lnbmVkIGludCBxdWV1ZSk7CiB2b2lkIGF0aDVrX2h3X3JlbGVhc2VfdHhfcXVldWUoc3RydWN0IGF0aDVrX2h3ICphaCwgdW5zaWduZWQgaW50IHF1ZXVlKTsKIGludCBhdGg1a19od19yZXNldF90eF9xdWV1ZShzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1bnNpZ25lZCBpbnQgcXVldWUpOwotaW50IGF0aDVrX2h3X3NldF9zbG90X3RpbWUoc3RydWN0IGF0aDVrX2h3ICphaCwgdW5zaWduZWQgaW50IHNsb3RfdGltZSk7CitpbnQgYXRoNWtfaHdfc2V0X2lmc19pbnRlcnZhbHMoc3RydWN0IGF0aDVrX2h3ICphaCwgdW5zaWduZWQgaW50IHNsb3RfdGltZSk7CisvKiBJbml0IGZ1bmN0aW9uICovCitpbnQgYXRoNWtfaHdfaW5pdF9xdWV1ZXMoc3RydWN0IGF0aDVrX2h3ICphaCk7CiAKIC8qIEhhcmR3YXJlIERlc2NyaXB0b3IgRnVuY3Rpb25zICovCiBpbnQgYXRoNWtfaHdfaW5pdF9kZXNjX2Z1bmN0aW9ucyhzdHJ1Y3QgYXRoNWtfaHcgKmFoKTsKQEAgLTEyMjQsNiArMTI2NSw3IEBACiAJdW5zaWduZWQgaW50IHR4X3JhdGUxLCB1X2ludCB0eF90cmllczEsIHVfaW50IHR4X3JhdGUyLAogCXVfaW50IHR4X3RyaWVzMiwgdW5zaWduZWQgaW50IHR4X3JhdGUzLCB1X2ludCB0eF90cmllczMpOwogCisKIC8qIEdQSU8gRnVuY3Rpb25zICovCiB2b2lkIGF0aDVrX2h3X3NldF9sZWRzdGF0ZShzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1bnNpZ25lZCBpbnQgc3RhdGUpOwogaW50IGF0aDVrX2h3X3NldF9ncGlvX2lucHV0KHN0cnVjdCBhdGg1a19odyAqYWgsIHUzMiBncGlvKTsKQEAgLTEyMzMsMTEgKzEyNzUsMTMgQEAKIHZvaWQgYXRoNWtfaHdfc2V0X2dwaW9faW50cihzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1bnNpZ25lZCBpbnQgZ3BpbywKIAkJCSAgICB1MzIgaW50ZXJydXB0X2xldmVsKTsKIAotLyogcmZraWxsIEZ1bmN0aW9ucyAqLworCisvKiBSRmtpbGwgRnVuY3Rpb25zICovCiB2b2lkIGF0aDVrX3Jma2lsbF9od19zdGFydChzdHJ1Y3QgYXRoNWtfaHcgKmFoKTsKIHZvaWQgYXRoNWtfcmZraWxsX2h3X3N0b3Aoc3RydWN0IGF0aDVrX2h3ICphaCk7CiAKLS8qIE1pc2MgZnVuY3Rpb25zICovCisKKy8qIE1pc2MgZnVuY3Rpb25zIFRPRE86IENsZWFudXAgKi8KIGludCBhdGg1a19od19zZXRfY2FwYWJpbGl0aWVzKHN0cnVjdCBhdGg1a19odyAqYWgpOwogaW50IGF0aDVrX2h3X2dldF9jYXBhYmlsaXR5KHN0cnVjdCBhdGg1a19odyAqYWgsCiAJCQkgICAgZW51bSBhdGg1a19jYXBhYmlsaXR5X3R5cGUgY2FwX3R5cGUsIHUzMiBjYXBhYmlsaXR5LApAQCAtMTI0NSwxOSArMTI4OSwyMCBAQAogaW50IGF0aDVrX2h3X2VuYWJsZV9wc3BvbGwoc3RydWN0IGF0aDVrX2h3ICphaCwgdTggKmJzc2lkLCB1MTYgYXNzb2NfaWQpOwogaW50IGF0aDVrX2h3X2Rpc2FibGVfcHNwb2xsKHN0cnVjdCBhdGg1a19odyAqYWgpOwogCisKIC8qIEluaXRpYWwgcmVnaXN0ZXIgc2V0dGluZ3MgZnVuY3Rpb25zICovCiBpbnQgYXRoNWtfaHdfd3JpdGVfaW5pdHZhbHMoc3RydWN0IGF0aDVrX2h3ICphaCwgdTggbW9kZSwgYm9vbCBjaGFuZ2VfY2hhbm5lbCk7CiAKLS8qIEluaXRpYWxpemUgUkYgKi8KLWludCBhdGg1a19od19yZnJlZ3NfaW5pdChzdHJ1Y3QgYXRoNWtfaHcgKmFoLAotCQkJIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCwKLQkJCSB1bnNpZ25lZCBpbnQgbW9kZSk7Ci1pbnQgYXRoNWtfaHdfcmZnYWluX2luaXQoc3RydWN0IGF0aDVrX2h3ICphaCwgdW5zaWduZWQgaW50IGZyZXEpOworCisvKiBQSFkgZnVuY3Rpb25zICovCisvKiBNaXNjIFBIWSBmdW5jdGlvbnMgKi8KK3UxNiBhdGg1a19od19yYWRpb19yZXZpc2lvbihzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1bnNpZ25lZCBpbnQgY2hhbik7CitpbnQgYXRoNWtfaHdfcGh5X2Rpc2FibGUoc3RydWN0IGF0aDVrX2h3ICphaCk7CisvKiBHYWluX0Ygb3B0aW1pemF0aW9uICovCiBlbnVtIGF0aDVrX3JmZ2FpbiBhdGg1a19od19nYWluZl9jYWxpYnJhdGUoc3RydWN0IGF0aDVrX2h3ICphaCk7CiBpbnQgYXRoNWtfaHdfcmZnYWluX29wdF9pbml0KHN0cnVjdCBhdGg1a19odyAqYWgpOwogLyogUEhZL1JGIGNoYW5uZWwgZnVuY3Rpb25zICovCiBib29sIGF0aDVrX2NoYW5uZWxfb2soc3RydWN0IGF0aDVrX2h3ICphaCwgdTE2IGZyZXEsIHVuc2lnbmVkIGludCBmbGFncyk7Ci1pbnQgYXRoNWtfaHdfY2hhbm5lbChzdHJ1Y3QgYXRoNWtfaHcgKmFoLCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwpOwogLyogUEhZIGNhbGlicmF0aW9uICovCiB2b2lkIGF0aDVrX2h3X2luaXRfbmZjYWxfaGlzdChzdHJ1Y3QgYXRoNWtfaHcgKmFoKTsKIGludCBhdGg1a19od19waHlfY2FsaWJyYXRlKHN0cnVjdCBhdGg1a19odyAqYWgsCkBAIC0xMjY2LDE4ICsxMzExLDE0IEBACiAvKiBTcHVyIG1pdGlnYXRpb24gKi8KIGJvb2wgYXRoNWtfaHdfY2hhbl9oYXNfc3B1cl9ub2lzZShzdHJ1Y3QgYXRoNWtfaHcgKmFoLAogCQkJCSAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsKTsKLXZvaWQgYXRoNWtfaHdfc2V0X3NwdXJfbWl0aWdhdGlvbl9maWx0ZXIoc3RydWN0IGF0aDVrX2h3ICphaCwKLQkJCQkJIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCk7Ci0vKiBNaXNjIFBIWSBmdW5jdGlvbnMgKi8KLXUxNiBhdGg1a19od19yYWRpb19yZXZpc2lvbihzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1bnNpZ25lZCBpbnQgY2hhbik7Ci1pbnQgYXRoNWtfaHdfcGh5X2Rpc2FibGUoc3RydWN0IGF0aDVrX2h3ICphaCk7CiAvKiBBbnRlbm5hIGNvbnRyb2wgKi8KIHZvaWQgYXRoNWtfaHdfc2V0X2FudGVubmFfbW9kZShzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1OCBhbnRfbW9kZSk7CiB2b2lkIGF0aDVrX2h3X3NldF9hbnRlbm5hX3N3aXRjaChzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1OCBlZV9tb2RlKTsKIC8qIFRYIHBvd2VyIHNldHVwICovCi1pbnQgYXRoNWtfaHdfdHhwb3dlcihzdHJ1Y3QgYXRoNWtfaHcgKmFoLCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwsCi0JCSAgICAgdTggZWVfbW9kZSwgdTggdHhwb3dlcik7CiBpbnQgYXRoNWtfaHdfc2V0X3R4cG93ZXJfbGltaXQoc3RydWN0IGF0aDVrX2h3ICphaCwgdTggdHhwb3dlcik7CisvKiBJbml0IGZ1bmN0aW9uICovCitpbnQgYXRoNWtfaHdfcGh5X2luaXQoc3RydWN0IGF0aDVrX2h3ICphaCwgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsLAorCQkJCXU4IG1vZGUsIGJvb2wgZmFzdCk7CiAKIC8qCiAgKiBGdW5jdGlvbnMgdXNlZCBpbnRlcm5hbHkKQEAgLTEyOTMsNiArMTMzNCwzMiBAQAogICAgICAgICByZXR1cm4gJihhdGg1a19od19jb21tb24oYWgpLT5yZWd1bGF0b3J5KTsKIH0KIAorI2lmZGVmIENPTkZJR19BVEhFUk9TX0FSMjMxWAorI2RlZmluZSBBUjVLX0FSMjMxNV9QQ0lfQkFTRQkoKHZvaWQgX19pb21lbSAqKTB4YjAxMDAwMDApCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2lvbWVtICphdGg1a19haGJfcmVnKHN0cnVjdCBhdGg1a19odyAqYWgsIHUxNiByZWcpCit7CisJLyogT24gQVIyMzE1IGFuZCBBUjIzMTcgdGhlIFBDSSBjbG9jayBkb21haW4gcmVnaXN0ZXJzCisJICogYXJlIG91dHNpZGUgb2YgdGhlIFdNQUMgcmVnaXN0ZXIgc3BhY2UgKi8KKwlpZiAodW5saWtlbHkoKHJlZyA+PSAweDQwMDApICYmIChyZWcgPCAweDUwMDApICYmCisJCShhaC0+YWhfbWFjX3NyZXYgPj0gQVI1S19TUkVWX0FSMjMxNV9SNikpKQorCQlyZXR1cm4gQVI1S19BUjIzMTVfUENJX0JBU0UgKyByZWc7CisKKwlyZXR1cm4gYWgtPmFoX2lvYmFzZSArIHJlZzsKK30KKworc3RhdGljIGlubGluZSB1MzIgYXRoNWtfaHdfcmVnX3JlYWQoc3RydWN0IGF0aDVrX2h3ICphaCwgdTE2IHJlZykKK3sKKwlyZXR1cm4gX19yYXdfcmVhZGwoYXRoNWtfYWhiX3JlZyhhaCwgcmVnKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdGg1a19od19yZWdfd3JpdGUoc3RydWN0IGF0aDVrX2h3ICphaCwgdTMyIHZhbCwgdTE2IHJlZykKK3sKKwlfX3Jhd193cml0ZWwodmFsLCBhdGg1a19haGJfcmVnKGFoLCByZWcpKTsKK30KKworI2Vsc2UKKwogc3RhdGljIGlubGluZSB1MzIgYXRoNWtfaHdfcmVnX3JlYWQoc3RydWN0IGF0aDVrX2h3ICphaCwgdTE2IHJlZykKIHsKIAlyZXR1cm4gaW9yZWFkMzIoYWgtPmFoX2lvYmFzZSArIHJlZyk7CkBAIC0xMzAzLDYgKzEzNzAsMjQgQEAKIAlpb3dyaXRlMzIodmFsLCBhaC0+YWhfaW9iYXNlICsgcmVnKTsKIH0KIAorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgZW51bSBhdGhfYnVzX3R5cGUgYXRoNWtfZ2V0X2J1c190eXBlKHN0cnVjdCBhdGg1a19odyAqYWgpCit7CisJcmV0dXJuIGF0aDVrX2h3X2NvbW1vbihhaCktPmJ1c19vcHMtPmF0aF9idXNfdHlwZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGF0aDVrX3JlYWRfY2FjaGVzaXplKHN0cnVjdCBhdGhfY29tbW9uICpjb21tb24sIGludCAqY3N6KQoreworCWNvbW1vbi0+YnVzX29wcy0+cmVhZF9jYWNoZXNpemUoY29tbW9uLCBjc3opOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgYXRoNWtfaHdfbnZyYW1fcmVhZChzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1MzIgb2ZmLCB1MTYgKmRhdGEpCit7CisJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDVrX2h3X2NvbW1vbihhaCk7CisJcmV0dXJuIGNvbW1vbi0+YnVzX29wcy0+ZWVwcm9tX3JlYWQoY29tbW9uLCBvZmYsIGRhdGEpOworfQorCiBzdGF0aWMgaW5saW5lIHUzMiBhdGg1a19od19iaXRzd2FwKHUzMiB2YWwsIHVuc2lnbmVkIGludCBiaXRzKQogewogCXUzMiByZXR2YWwgPSAwLCBiaXQsIGk7CkBAIC0xMzE1LDI3ICsxNDAwLDQgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi0jZGVmaW5lIEFWR19TQU1QTEVTCTgKLSNkZWZpbmUgQVZHX0ZBQ1RPUgkxMDAwCi0KLS8qKgotICogYXRoNWtfbW92aW5nX2F2ZXJhZ2UgLSAgRXhwb25lbnRpYWxseSB3ZWlnaHRlZCBtb3ZpbmcgYXZlcmFnZQotICogQGF2ZzogYXZlcmFnZSBzdHJ1Y3R1cmUKLSAqIEB2YWw6IGN1cnJlbnQgdmFsdWUKLSAqCi0gKiBUaGlzIGltcGxlbWVudGF0aW9uIG1ha2UgdXNlIG9mIGEgc3RydWN0IGF0aDVrX2F2Z192YWwgdG8gcHJldmVudCByb3VuZGluZwotICogZXJyb3JzLgotICovCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBhdGg1a19hdmdfdmFsCi1hdGg1a19tb3ZpbmdfYXZlcmFnZShjb25zdCBzdHJ1Y3QgYXRoNWtfYXZnX3ZhbCBhdmcsIGNvbnN0IGludCB2YWwpCi17Ci0Jc3RydWN0IGF0aDVrX2F2Z192YWwgbmV3OwotCW5ldy5hdmdfd2VpZ2h0ID0gYXZnLmF2Z193ZWlnaHQgID8KLQkJKCgoYXZnLmF2Z193ZWlnaHQgKiAoKEFWR19TQU1QTEVTKSAtIDEpKSArCi0JCQkodmFsICogKEFWR19GQUNUT1IpKSkgLyAoQVZHX1NBTVBMRVMpKSA6Ci0JCSh2YWwgKiAoQVZHX0ZBQ1RPUikpOwotCW5ldy5hdmcgPSBuZXcuYXZnX3dlaWdodCAvIChBVkdfRkFDVE9SKTsKLQlyZXR1cm4gbmV3OwotfQotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9hdHRhY2guYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9hdHRhY2guYwppbmRleCBmYmU4YWNhLi5jZGFjNWNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYXR0YWNoLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2F0dGFjaC5jCkBAIC05MywxNiArOTMsMTYgQEAKIH0KIAogLyoqCi0gKiBhdGg1a19od19hdHRhY2ggLSBDaGVjayBpZiBodyBpcyBzdXBwb3J0ZWQgYW5kIGluaXQgdGhlIG5lZWRlZCBzdHJ1Y3RzCisgKiBhdGg1a19od19pbml0IC0gQ2hlY2sgaWYgaHcgaXMgc3VwcG9ydGVkIGFuZCBpbml0IHRoZSBuZWVkZWQgc3RydWN0cwogICoKLSAqIEBzYzogVGhlICZzdHJ1Y3QgYXRoNWtfc29mdGMgd2UgZ290IGZyb20gdGhlIGRyaXZlcidzIGF0dGFjaCBmdW5jdGlvbgorICogQHNjOiBUaGUgJnN0cnVjdCBhdGg1a19zb2Z0YyB3ZSBnb3QgZnJvbSB0aGUgZHJpdmVyJ3MgaW5pdF9zb2Z0YyBmdW5jdGlvbgogICoKICAqIENoZWNrIGlmIHRoZSBkZXZpY2UgaXMgc3VwcG9ydGVkLCBwZXJmb3JtIGEgUE9TVCBhbmQgaW5pdGlhbGl6ZSB0aGUgbmVlZGVkCiAgKiBzdHJ1Y3RzLiBSZXR1cm5zIC1FTk9NRU0gaWYgd2UgZG9uJ3QgaGF2ZSBtZW1vcnkgZm9yIHRoZSBuZWVkZWQgc3RydWN0cywKICAqIC1FTk9ERVYgaWYgdGhlIGRldmljZSBpcyBub3Qgc3VwcG9ydGVkIG9yIHByaW50cyBhbiBlcnJvciBtc2cgaWYgc29tZXRoaW5nCiAgKiBlbHNlIHdlbnQgd3JvbmcuCiAgKi8KLWludCBhdGg1a19od19hdHRhY2goc3RydWN0IGF0aDVrX3NvZnRjICpzYykKK2ludCBhdGg1a19od19pbml0KHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpCiB7CiAJc3RydWN0IGF0aDVrX2h3ICphaCA9IHNjLT5haDsKIAlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoNWtfaHdfY29tbW9uKGFoKTsKQEAgLTExNSw3ICsxMTUsNyBAQAogCSAqIEhXIGluZm9ybWF0aW9uCiAJICovCiAJYWgtPmFoX3JhZGFyLnJfZW5hYmxlZCA9IEFSNUtfVFVORV9SQURBUl9BTEVSVDsKLQlhaC0+YWhfdHVyYm8gPSBmYWxzZTsKKwlhaC0+YWhfYndtb2RlID0gQVI1S19CV01PREVfREVGQVVMVDsKIAlhaC0+YWhfdHhwb3dlci50eHBfdHBjID0gQVI1S19UVU5FX1RQQ19UWFBPV0VSOwogCWFoLT5haF9pbXIgPSAwOwogCWFoLT5haF9saW1pdF90eF9yZXRyaWVzID0gQVI1S19JTklUX1RYX1JFVFJZOwpAQCAtMTI4LDcgKzEyOCw4IEBACiAJLyoKIAkgKiBGaW5kIHRoZSBtYWMgdmVyc2lvbgogCSAqLwotCXNyZXYgPSBhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19TUkVWKTsKKwlhdGg1a19od19yZWFkX3NyZXYoYWgpOworCXNyZXYgPSBhaC0+YWhfbWFjX3NyZXY7CiAJaWYgKHNyZXYgPCBBUjVLX1NSRVZfQVI1MzExKQogCQlhaC0+YWhfdmVyc2lvbiA9IEFSNUtfQVI1MjEwOwogCWVsc2UgaWYgKHNyZXYgPCBBUjVLX1NSRVZfQVI1MjEyKQpAQCAtMTM2LDYgKzEzNywxMCBAQAogCWVsc2UKIAkJYWgtPmFoX3ZlcnNpb24gPSBBUjVLX0FSNTIxMjsKIAorCS8qIEdldCB0aGUgTUFDIHJldmlzaW9uICovCisJYWgtPmFoX21hY192ZXJzaW9uID0gQVI1S19SRUdfTVMoc3JldiwgQVI1S19TUkVWX1ZFUik7CisJYWgtPmFoX21hY19yZXZpc2lvbiA9IEFSNUtfUkVHX01TKHNyZXYsIEFSNUtfU1JFVl9SRVYpOworCiAJLyogRmlsbCB0aGUgYXRoNWtfaHcgc3RydWN0IHdpdGggdGhlIG5lZWRlZCBmdW5jdGlvbnMgKi8KIAlyZXQgPSBhdGg1a19od19pbml0X2Rlc2NfZnVuY3Rpb25zKGFoKTsKIAlpZiAocmV0KQpAQCAtMTQ2LDkgKzE1MSw3IEBACiAJaWYgKHJldCkKIAkJZ290byBlcnI7CiAKLQkvKiBHZXQgTUFDLCBQSFkgYW5kIFJBRElPIHJldmlzaW9ucyAqLwotCWFoLT5haF9tYWNfc3JldiA9IHNyZXY7Ci0JYWgtPmFoX21hY192ZXJzaW9uID0gQVI1S19SRUdfTVMoc3JldiwgQVI1S19TUkVWX1ZFUik7CisJLyogR2V0IFBIWSBhbmQgUkFESU8gcmV2aXNpb25zICovCiAJYWgtPmFoX3BoeV9yZXZpc2lvbiA9IGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX1BIWV9DSElQX0lEKSAmCiAJCQkweGZmZmZmZmZmOwogCWFoLT5haF9yYWRpb181Z2h6X3JldmlzaW9uID0gYXRoNWtfaHdfcmFkaW9fcmV2aXNpb24oYWgsCkBAIC0yNzMsNyArMjc2LDcgQEAKIAkvKgogCSAqIFdyaXRlIFBDSS1FIHBvd2VyIHNhdmUgc2V0dGluZ3MKIAkgKi8KLQlpZiAoKGFoLT5haF92ZXJzaW9uID09IEFSNUtfQVI1MjEyKSAmJiAocGRldi0+aXNfcGNpZSkpIHsKKwlpZiAoKGFoLT5haF92ZXJzaW9uID09IEFSNUtfQVI1MjEyKSAmJiBwZGV2ICYmIChwY2lfaXNfcGNpZShwZGV2KSkpIHsKIAkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDkyNDhmYzAwLCBBUjVLX1BDSUVfU0VSREVTKTsKIAkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDI0OTI0OTI0LCBBUjVLX1BDSUVfU0VSREVTKTsKIApAQCAtMzA1LDggKzMwOCw3IEBACiAJLyogR2V0IG1pc2MgY2FwYWJpbGl0aWVzICovCiAJcmV0ID0gYXRoNWtfaHdfc2V0X2NhcGFiaWxpdGllcyhhaCk7CiAJaWYgKHJldCkgewotCQlBVEg1S19FUlIoc2MsICJ1bmFibGUgdG8gZ2V0IGRldmljZSBjYXBhYmlsaXRpZXM6IDB4JTA0eFxuIiwKLQkJCXNjLT5wZGV2LT5kZXZpY2UpOworCQlBVEg1S19FUlIoc2MsICJ1bmFibGUgdG8gZ2V0IGRldmljZSBjYXBhYmlsaXRpZXNcbiIpOwogCQlnb3RvIGVycjsKIAl9CiAKQEAgLTM0NiwxMSArMzQ4LDExIEBACiB9CiAKIC8qKgotICogYXRoNWtfaHdfZGV0YWNoIC0gRnJlZSB0aGUgYXRoNWtfaHcgc3RydWN0CisgKiBhdGg1a19od19kZWluaXQgLSBGcmVlIHRoZSBhdGg1a19odyBzdHJ1Y3QKICAqCiAgKiBAYWg6IFRoZSAmc3RydWN0IGF0aDVrX2h3CiAgKi8KLXZvaWQgYXRoNWtfaHdfZGV0YWNoKHN0cnVjdCBhdGg1a19odyAqYWgpCit2b2lkIGF0aDVrX2h3X2RlaW5pdChzdHJ1Y3QgYXRoNWtfaHcgKmFoKQogewogCV9fc2V0X2JpdChBVEhfU1RBVF9JTlZBTElELCBhaC0+YWhfc2MtPnN0YXR1cyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9iYXNlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYmFzZS5jCmluZGV4IDQyZWQ5MjMuLjAxOWE3NGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9iYXNlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2Jhc2UuYwpAQCAtNDcsOCArNDcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9wY2ktYXNwbS5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpAQCAtNjIsMTAgKzYwLDkgQEAKICNpbmNsdWRlICJyZWcuaCIKICNpbmNsdWRlICJkZWJ1Zy5oIgogI2luY2x1ZGUgImFuaS5oIgotI2luY2x1ZGUgIi4uL2RlYnVnLmgiCiAKLXN0YXRpYyBpbnQgbW9kcGFyYW1fbm9od2NyeXB0OwotbW9kdWxlX3BhcmFtX25hbWVkKG5vaHdjcnlwdCwgbW9kcGFyYW1fbm9od2NyeXB0LCBib29sLCBTX0lSVUdPKTsKK2ludCBhdGg1a19tb2RwYXJhbV9ub2h3Y3J5cHQ7Cittb2R1bGVfcGFyYW1fbmFtZWQobm9od2NyeXB0LCBhdGg1a19tb2RwYXJhbV9ub2h3Y3J5cHQsIGJvb2wsIFNfSVJVR08pOwogTU9EVUxFX1BBUk1fREVTQyhub2h3Y3J5cHQsICJEaXNhYmxlIGhhcmR3YXJlIGVuY3J5cHRpb24uIik7CiAKIHN0YXRpYyBpbnQgbW9kcGFyYW1fYWxsX2NoYW5uZWxzOwpAQCAtNzgsMzkgKzc1LDI0IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIlN1cHBvcnQgZm9yIDV4eHggc2VyaWVzIG9mIEF0aGVyb3MgODAyLjExIHdpcmVsZXNzIExBTiBjYXJkcy4iKTsKIE1PRFVMRV9TVVBQT1JURURfREVWSUNFKCJBdGhlcm9zIDV4eHggV0xBTiBjYXJkcyIpOwogTU9EVUxFX0xJQ0VOU0UoIkR1YWwgQlNEL0dQTCIpOwotTU9EVUxFX1ZFUlNJT04oIjAuNi4wIChFWFBFUklNRU5UQUwpIik7CiAKLXN0YXRpYyBpbnQgYXRoNWtfcmVzZXQoc3RydWN0IGF0aDVrX3NvZnRjICpzYywgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuKTsKLXN0YXRpYyBpbnQgYXRoNWtfYmVhY29uX3VwZGF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZik7Ci1zdGF0aWMgdm9pZCBhdGg1a19iZWFjb25fdXBkYXRlX3RpbWVycyhzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjLCB1NjQgYmNfdHNmKTsKLQotLyogS25vd24gUENJIGlkcyAqLwotc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGF0aDVrX3BjaV9pZF90YWJsZSkgPSB7Ci0JeyBQQ0lfVkRFVklDRShBVEhFUk9TLCAweDAyMDcpIH0sIC8qIDUyMTAgZWFybHkgKi8KLQl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDAwNykgfSwgLyogNTIxMCAqLwotCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDExKSB9LCAvKiA1MzExIC0gdGhpcyBpcyBvbiBBSEIgYnVzICEqLwotCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDEyKSB9LCAvKiA1MjExICovCi0JeyBQQ0lfVkRFVklDRShBVEhFUk9TLCAweDAwMTMpIH0sIC8qIDUyMTIgKi8KLQl7IFBDSV9WREVWSUNFKDNDT01fMiwgIDB4MDAxMykgfSwgLyogM2NvbSA1MjEyICovCi0JeyBQQ0lfVkRFVklDRSgzQ09NLCAgICAweDAwMTMpIH0sIC8qIDNjb20gM0NSREFHNjc1IDUyMTIgKi8KLQl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MTAxNCkgfSwgLyogSUJNIG1pbmlwY2kgNTIxMiAqLwotCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDE0KSB9LCAvKiA1MjEyIGNvbWJhdGlibGUgKi8KLQl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDAxNSkgfSwgLyogNTIxMiBjb21iYXRpYmxlICovCi0JeyBQQ0lfVkRFVklDRShBVEhFUk9TLCAweDAwMTYpIH0sIC8qIDUyMTIgY29tYmF0aWJsZSAqLwotCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDE3KSB9LCAvKiA1MjEyIGNvbWJhdGlibGUgKi8KLQl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDAxOCkgfSwgLyogNTIxMiBjb21iYXRpYmxlICovCi0JeyBQQ0lfVkRFVklDRShBVEhFUk9TLCAweDAwMTkpIH0sIC8qIDUyMTIgY29tYmF0aWJsZSAqLwotCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDFhKSB9LCAvKiAyNDEzIEdyaWZmaW4tbGl0ZSAqLwotCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDFiKSB9LCAvKiA1NDEzIEVhZ2xlICovCi0JeyBQQ0lfVkRFVklDRShBVEhFUk9TLCAweDAwMWMpIH0sIC8qIFBDSS1FIGNhcmRzICovCi0JeyBQQ0lfVkRFVklDRShBVEhFUk9TLCAweDAwMWQpIH0sIC8qIDI0MTcgTmFsYSAqLwotCXsgMCB9Ci19OwotTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGF0aDVrX3BjaV9pZF90YWJsZSk7CitzdGF0aWMgaW50IGF0aDVrX2luaXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworc3RhdGljIGludCBhdGg1a19yZXNldChzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4sCisJCQkJCQkJCWJvb2wgc2tpcF9wY3UpOworaW50IGF0aDVrX2JlYWNvbl91cGRhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpOwordm9pZCBhdGg1a19iZWFjb25fdXBkYXRlX3RpbWVycyhzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjLCB1NjQgYmNfdHNmKTsKIAogLyogS25vd24gU1JFVnMgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfc3Jldl9uYW1lIHNyZXZfbmFtZXNbXSA9IHsKKyNpZmRlZiBDT05GSUdfQVRIRVJPU19BUjIzMVgKKwl7ICI1MzEyIiwJQVI1S19WRVJTSU9OX01BQywJQVI1S19TUkVWX0FSNTMxMl9SMiB9LAorCXsgIjUzMTIiLAlBUjVLX1ZFUlNJT05fTUFDLAlBUjVLX1NSRVZfQVI1MzEyX1I3IH0sCisJeyAiMjMxMyIsCUFSNUtfVkVSU0lPTl9NQUMsCUFSNUtfU1JFVl9BUjIzMTNfUjggfSwKKwl7ICIyMzE1IiwJQVI1S19WRVJTSU9OX01BQywJQVI1S19TUkVWX0FSMjMxNV9SNiB9LAorCXsgIjIzMTUiLAlBUjVLX1ZFUlNJT05fTUFDLAlBUjVLX1NSRVZfQVIyMzE1X1I3IH0sCisJeyAiMjMxNyIsCUFSNUtfVkVSU0lPTl9NQUMsCUFSNUtfU1JFVl9BUjIzMTdfUjEgfSwKKwl7ICIyMzE3IiwJQVI1S19WRVJTSU9OX01BQywJQVI1S19TUkVWX0FSMjMxN19SMiB9LAorI2Vsc2UKIAl7ICI1MjEwIiwJQVI1S19WRVJTSU9OX01BQywJQVI1S19TUkVWX0FSNTIxMCB9LAogCXsgIjUzMTEiLAlBUjVLX1ZFUlNJT05fTUFDLAlBUjVLX1NSRVZfQVI1MzExIH0sCiAJeyAiNTMxMUEiLAlBUjVLX1ZFUlNJT05fTUFDLAlBUjVLX1NSRVZfQVI1MzExQSB9LApAQCAtMTI5LDYgKzExMSw3IEBACiAJeyAiNTQxOCIsCUFSNUtfVkVSU0lPTl9NQUMsCUFSNUtfU1JFVl9BUjU0MTggfSwKIAl7ICIyNDI1IiwJQVI1S19WRVJTSU9OX01BQywJQVI1S19TUkVWX0FSMjQyNSB9LAogCXsgIjI0MTciLAlBUjVLX1ZFUlNJT05fTUFDLAlBUjVLX1NSRVZfQVIyNDE3IH0sCisjZW5kaWYKIAl7ICJ4eHh4eCIsCUFSNUtfVkVSU0lPTl9NQUMsCUFSNUtfU1JFVl9VTktOT1dOIH0sCiAJeyAiNTExMCIsCUFSNUtfVkVSU0lPTl9SQUQsCUFSNUtfU1JFVl9SQURfNTExMCB9LAogCXsgIjUxMTEiLAlBUjVLX1ZFUlNJT05fUkFELAlBUjVLX1NSRVZfUkFEXzUxMTEgfSwKQEAgLTE0MiwxMCArMTI1LDEyIEBACiAJeyAiMjExMkIiLAlBUjVLX1ZFUlNJT05fUkFELAlBUjVLX1NSRVZfUkFEXzIxMTJCIH0sCiAJeyAiMjQxMyIsCUFSNUtfVkVSU0lPTl9SQUQsCUFSNUtfU1JFVl9SQURfMjQxMyB9LAogCXsgIjU0MTMiLAlBUjVLX1ZFUlNJT05fUkFELAlBUjVLX1NSRVZfUkFEXzU0MTMgfSwKLQl7ICIyMzE2IiwJQVI1S19WRVJTSU9OX1JBRCwJQVI1S19TUkVWX1JBRF8yMzE2IH0sCi0JeyAiMjMxNyIsCUFSNUtfVkVSU0lPTl9SQUQsCUFSNUtfU1JFVl9SQURfMjMxNyB9LAogCXsgIjU0MjQiLAlBUjVLX1ZFUlNJT05fUkFELAlBUjVLX1NSRVZfUkFEXzU0MjQgfSwKIAl7ICI1MTMzIiwJQVI1S19WRVJTSU9OX1JBRCwJQVI1S19TUkVWX1JBRF81MTMzIH0sCisjaWZkZWYgQ09ORklHX0FUSEVST1NfQVIyMzFYCisJeyAiMjMxNiIsCUFSNUtfVkVSU0lPTl9SQUQsCUFSNUtfU1JFVl9SQURfMjMxNiB9LAorCXsgIjIzMTciLAlBUjVLX1ZFUlNJT05fUkFELAlBUjVLX1NSRVZfUkFEXzIzMTcgfSwKKyNlbmRpZgogCXsgInh4eHh4IiwJQVI1S19WRVJTSU9OX1JBRCwJQVI1S19TUkVWX1VOS05PV04gfSwKIH07CiAKQEAgLTE5MSwzOCArMTc2LDYgQEAKIAkvKiBYUiBtaXNzaW5nICovCiB9OwogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRoNWtfdHhidWZfZnJlZV9za2Ioc3RydWN0IGF0aDVrX3NvZnRjICpzYywKLQkJCQlzdHJ1Y3QgYXRoNWtfYnVmICpiZikKLXsKLQlCVUdfT04oIWJmKTsKLQlpZiAoIWJmLT5za2IpCi0JCXJldHVybjsKLQlwY2lfdW5tYXBfc2luZ2xlKHNjLT5wZGV2LCBiZi0+c2tiYWRkciwgYmYtPnNrYi0+bGVuLAotCQkJUENJX0RNQV9UT0RFVklDRSk7Ci0JZGV2X2tmcmVlX3NrYl9hbnkoYmYtPnNrYik7Ci0JYmYtPnNrYiA9IE5VTEw7Ci0JYmYtPnNrYmFkZHIgPSAwOwotCWJmLT5kZXNjLT5kc19kYXRhID0gMDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGF0aDVrX3J4YnVmX2ZyZWVfc2tiKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MsCi0JCQkJc3RydWN0IGF0aDVrX2J1ZiAqYmYpCi17Ci0Jc3RydWN0IGF0aDVrX2h3ICphaCA9IHNjLT5haDsKLQlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoNWtfaHdfY29tbW9uKGFoKTsKLQotCUJVR19PTighYmYpOwotCWlmICghYmYtPnNrYikKLQkJcmV0dXJuOwotCXBjaV91bm1hcF9zaW5nbGUoc2MtPnBkZXYsIGJmLT5za2JhZGRyLCBjb21tb24tPnJ4X2J1ZnNpemUsCi0JCQlQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCWRldl9rZnJlZV9za2JfYW55KGJmLT5za2IpOwotCWJmLT5za2IgPSBOVUxMOwotCWJmLT5za2JhZGRyID0gMDsKLQliZi0+ZGVzYy0+ZHNfZGF0YSA9IDA7Ci19Ci0KLQogc3RhdGljIGlubGluZSB1NjQgYXRoNWtfZXh0ZW5kX3RzZihzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1MzIgcnN0YW1wKQogewogCXU2NCB0c2YgPSBhdGg1a19od19nZXRfdHNmNjQoYWgpOwpAQCAtMjMzLDcgKzE4Niw3IEBACiAJcmV0dXJuICh0c2YgJiB+MHg3ZmZmKSB8IHJzdGFtcDsKIH0KIAotc3RhdGljIGNvbnN0IGNoYXIgKgorY29uc3QgY2hhciAqCiBhdGg1a19jaGlwX25hbWUoZW51bSBhdGg1a19zcmV2X3R5cGUgdHlwZSwgdV9pbnQxNl90IHZhbCkKIHsKIAljb25zdCBjaGFyICpuYW1lID0gInh4eHh4IjsKQEAgLTMyNywxNCArMjgwLDEyIEBACiAKIAlzd2l0Y2ggKG1vZGUpIHsKIAljYXNlIEFSNUtfTU9ERV8xMUE6Ci0JY2FzZSBBUjVLX01PREVfMTFBX1RVUkJPOgogCQkvKiAxLi4yMjAsIGJ1dCAyR0h6IGZyZXF1ZW5jaWVzIGFyZSBmaWx0ZXJlZCBieSBjaGVja19jaGFubmVsICovCiAJCXNpemUgPSAyMjAgOwogCQljaGZyZXEgPSBDSEFOTkVMXzVHSFo7CiAJCWJyZWFrOwogCWNhc2UgQVI1S19NT0RFXzExQjoKIAljYXNlIEFSNUtfTU9ERV8xMUc6Ci0JY2FzZSBBUjVLX01PREVfMTFHX1RVUkJPOgogCQlzaXplID0gMjY7CiAJCWNoZnJlcSA9IENIQU5ORUxfMkdIWjsKIAkJYnJlYWs7CkBAIC0zNjMsMTEgKzMxNCw2IEBACiAJCWNhc2UgQVI1S19NT0RFXzExRzoKIAkJCWNoYW5uZWxzW2NvdW50XS5od192YWx1ZSA9IGNoZnJlcSB8IENIQU5ORUxfT0ZETTsKIAkJCWJyZWFrOwotCQljYXNlIEFSNUtfTU9ERV8xMUFfVFVSQk86Ci0JCWNhc2UgQVI1S19NT0RFXzExR19UVVJCTzoKLQkJCWNoYW5uZWxzW2NvdW50XS5od192YWx1ZSA9IGNoZnJlcSB8Ci0JCQkJQ0hBTk5FTF9PRkRNIHwgQ0hBTk5FTF9UVVJCTzsKLQkJCWJyZWFrOwogCQljYXNlIEFSNUtfTU9ERV8xMUI6CiAJCQljaGFubmVsc1tjb3VudF0uaHdfdmFsdWUgPSBDSEFOTkVMX0I7CiAJCX0KQEAgLTQ4Myw3ICs0MjksNyBAQAogICoKICAqIENhbGxlZCB3aXRoIHNjLT5sb2NrLgogICovCi1zdGF0aWMgaW50CitpbnQKIGF0aDVrX2NoYW5fc2V0KHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MsIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbikKIHsKIAlBVEg1S19EQkcoc2MsIEFUSDVLX0RFQlVHX1JFU0VULApAQCAtNDk2LDcgKzQ0Miw3IEBACiAJICogaGFyZHdhcmUgYXQgdGhlIG5ldyBmcmVxdWVuY3ksIGFuZCB0aGVuIHJlLWVuYWJsZQogCSAqIHRoZSByZWxldmFudCBiaXRzIG9mIHRoZSBoL3cuCiAJICovCi0JcmV0dXJuIGF0aDVrX3Jlc2V0KHNjLCBjaGFuKTsKKwlyZXR1cm4gYXRoNWtfcmVzZXQoc2MsIGNoYW4sIHRydWUpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtNTQ5LDcgKzQ5NSw3IEBACiAJLyogQ2FsY3VsYXRlIGNvbWJpbmVkIG1vZGUgLSB3aGVuIEFQcyBhcmUgYWN0aXZlLCBvcGVyYXRlIGluIEFQIG1vZGUuCiAJICogT3RoZXJ3aXNlIHVzZSB0aGUgbW9kZSBvZiB0aGUgbmV3IGludGVyZmFjZS4gVGhpcyBjYW4gY3VycmVudGx5CiAJICogb25seSBkZWFsIHdpdGggY29tYmluYXRpb25zIG9mIEFQcyBhbmQgU1RBcy4gT25seSBvbmUgYWQtaG9jCi0JICogaW50ZXJmYWNlcyBpcyBhbGxvd2VkIGFib3ZlLgorCSAqIGludGVyZmFjZXMgaXMgYWxsb3dlZC4KIAkgKi8KIAlpZiAoYXZmLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApCiAJCWl0ZXJfZGF0YS0+b3Btb2RlID0gTkw4MDIxMV9JRlRZUEVfQVA7CkBAIC01NTgsMTYgKzUwNCw5IEBACiAJCQlpdGVyX2RhdGEtPm9wbW9kZSA9IGF2Zi0+b3Btb2RlOwogfQogCi1zdGF0aWMgdm9pZCBhdGhfZG9fc2V0X29wbW9kZShzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKQotewotCXN0cnVjdCBhdGg1a19odyAqYWggPSBzYy0+YWg7Ci0JYXRoNWtfaHdfc2V0X29wbW9kZShhaCwgc2MtPm9wbW9kZSk7Ci0JQVRINUtfREJHKHNjLCBBVEg1S19ERUJVR19NT0RFLCAibW9kZSBzZXR1cCBvcG1vZGUgJWQgKCVzKVxuIiwKLQkJICBzYy0+b3Btb2RlLCBhdGhfb3Btb2RlX3RvX3N0cmluZyhzYy0+b3Btb2RlKSk7Ci19Ci0KLXZvaWQgYXRoNWtfdXBkYXRlX2Jzc2lkX21hc2tfYW5kX29wbW9kZShzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjLAotCQkJCQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQordm9pZAorYXRoNWtfdXBkYXRlX2Jzc2lkX21hc2tfYW5kX29wbW9kZShzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjLAorCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCiB7CiAJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDVrX2h3X2NvbW1vbihzYy0+YWgpOwogCXN0cnVjdCBhdGhfdmlmX2l0ZXJfZGF0YSBpdGVyX2RhdGE7CkBAIC01OTUsNyArNTM0LDkgQEAKIAkJLyogTm90aGluZyBhY3RpdmUsIGRlZmF1bHQgdG8gc3RhdGlvbiBtb2RlICovCiAJCXNjLT5vcG1vZGUgPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOwogCi0JYXRoX2RvX3NldF9vcG1vZGUoc2MpOworCWF0aDVrX2h3X3NldF9vcG1vZGUoc2MtPmFoLCBzYy0+b3Btb2RlKTsKKwlBVEg1S19EQkcoc2MsIEFUSDVLX0RFQlVHX01PREUsICJtb2RlIHNldHVwIG9wbW9kZSAlZCAoJXMpXG4iLAorCQkgIHNjLT5vcG1vZGUsIGF0aF9vcG1vZGVfdG9fc3RyaW5nKHNjLT5vcG1vZGUpKTsKIAogCWlmIChpdGVyX2RhdGEubmVlZF9zZXRfaHdfYWRkciAmJiBpdGVyX2RhdGEuZm91bmRfYWN0aXZlKQogCQlhdGg1a19od19zZXRfbGxhZGRyKHNjLT5haCwgaXRlcl9kYXRhLmFjdGl2ZV9tYWMpOwpAQCAtNjA0LDcgKzU0NSw3IEBACiAJCWF0aDVrX2h3X3NldF9ic3NpZF9tYXNrKHNjLT5haCwgc2MtPmJzc2lkbWFzayk7CiB9CiAKLXN0YXRpYyB2b2lkCit2b2lkCiBhdGg1a19tb2RlX3NldHVwKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCiB7CiAJc3RydWN0IGF0aDVrX2h3ICphaCA9IHNjLT5haDsKQEAgLTY1OSwxMCArNjAwLDExIEBACiAJCXJldHVybiBOVUxMOwogCX0KIAotCSpza2JfYWRkciA9IHBjaV9tYXBfc2luZ2xlKHNjLT5wZGV2LAorCSpza2JfYWRkciA9IGRtYV9tYXBfc2luZ2xlKHNjLT5kZXYsCiAJCQkJICAgc2tiLT5kYXRhLCBjb21tb24tPnJ4X2J1ZnNpemUsCi0JCQkJICAgUENJX0RNQV9GUk9NREVWSUNFKTsKLQlpZiAodW5saWtlbHkocGNpX2RtYV9tYXBwaW5nX2Vycm9yKHNjLT5wZGV2LCAqc2tiX2FkZHIpKSkgeworCQkJCSAgIERNQV9GUk9NX0RFVklDRSk7CisKKwlpZiAodW5saWtlbHkoZG1hX21hcHBpbmdfZXJyb3Ioc2MtPmRldiwgKnNrYl9hZGRyKSkpIHsKIAkJQVRINUtfRVJSKHNjLCAiJXM6IERNQSBtYXBwaW5nIGZhaWxlZFxuIiwgX19mdW5jX18pOwogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCXJldHVybiBOVUxMOwpAQCAtNzU4LDggKzcwMCw4IEBACiAJZmxhZ3MgPSBBUjVLX1RYREVTQ19JTlRSRVEgfCBBUjVLX1RYREVTQ19DTFJETUFTSzsKIAogCS8qIFhYWCBlbmRpYW5uZXNzICovCi0JYmYtPnNrYmFkZHIgPSBwY2lfbWFwX3NpbmdsZShzYy0+cGRldiwgc2tiLT5kYXRhLCBza2ItPmxlbiwKLQkJCVBDSV9ETUFfVE9ERVZJQ0UpOworCWJmLT5za2JhZGRyID0gZG1hX21hcF9zaW5nbGUoc2MtPmRldiwgc2tiLT5kYXRhLCBza2ItPmxlbiwKKwkJCURNQV9UT19ERVZJQ0UpOwogCiAJcmF0ZSA9IGllZWU4MDIxMV9nZXRfdHhfcmF0ZShzYy0+aHcsIGluZm8pOwogCWlmICghcmF0ZSkgewpAQCAtODM5LDcgKzc4MSw3IEBACiAKIAlyZXR1cm4gMDsKIGVycl91bm1hcDoKLQlwY2lfdW5tYXBfc2luZ2xlKHNjLT5wZGV2LCBiZi0+c2tiYWRkciwgc2tiLT5sZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOworCWRtYV91bm1hcF9zaW5nbGUoc2MtPmRldiwgYmYtPnNrYmFkZHIsIHNrYi0+bGVuLCBETUFfVE9fREVWSUNFKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC04NDgsNyArNzkwLDcgQEAKIFwqKioqKioqKioqKioqKioqKioqLwogCiBzdGF0aWMgaW50Ci1hdGg1a19kZXNjX2FsbG9jKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MsIHN0cnVjdCBwY2lfZGV2ICpwZGV2KQorYXRoNWtfZGVzY19hbGxvYyhzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKQogewogCXN0cnVjdCBhdGg1a19kZXNjICpkczsKIAlzdHJ1Y3QgYXRoNWtfYnVmICpiZjsKQEAgLTg1OSw3ICs4MDEsOSBAQAogCS8qIGFsbG9jYXRlIGRlc2NyaXB0b3JzICovCiAJc2MtPmRlc2NfbGVuID0gc2l6ZW9mKHN0cnVjdCBhdGg1a19kZXNjKSAqCiAJCQkoQVRIX1RYQlVGICsgQVRIX1JYQlVGICsgQVRIX0JDQlVGICsgMSk7Ci0Jc2MtPmRlc2MgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwZGV2LCBzYy0+ZGVzY19sZW4sICZzYy0+ZGVzY19kYWRkcik7CisKKwlzYy0+ZGVzYyA9IGRtYV9hbGxvY19jb2hlcmVudChzYy0+ZGV2LCBzYy0+ZGVzY19sZW4sCisJCQkJJnNjLT5kZXNjX2RhZGRyLCBHRlBfS0VSTkVMKTsKIAlpZiAoc2MtPmRlc2MgPT0gTlVMTCkgewogCQlBVEg1S19FUlIoc2MsICJjYW4ndCBhbGxvY2F0ZSBkZXNjcmlwdG9yc1xuIik7CiAJCXJldCA9IC1FTk9NRU07CkBAIC05MDUsMTQgKzg0OSw0NSBAQAogCiAJcmV0dXJuIDA7CiBlcnJfZnJlZToKLQlwY2lfZnJlZV9jb25zaXN0ZW50KHBkZXYsIHNjLT5kZXNjX2xlbiwgc2MtPmRlc2MsIHNjLT5kZXNjX2RhZGRyKTsKKwlkbWFfZnJlZV9jb2hlcmVudChzYy0+ZGV2LCBzYy0+ZGVzY19sZW4sIHNjLT5kZXNjLCBzYy0+ZGVzY19kYWRkcik7CiBlcnI6CiAJc2MtPmRlc2MgPSBOVUxMOwogCXJldHVybiByZXQ7CiB9CiAKK3ZvaWQKK2F0aDVrX3R4YnVmX2ZyZWVfc2tiKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MsIHN0cnVjdCBhdGg1a19idWYgKmJmKQoreworCUJVR19PTighYmYpOworCWlmICghYmYtPnNrYikKKwkJcmV0dXJuOworCWRtYV91bm1hcF9zaW5nbGUoc2MtPmRldiwgYmYtPnNrYmFkZHIsIGJmLT5za2ItPmxlbiwKKwkJCURNQV9UT19ERVZJQ0UpOworCWRldl9rZnJlZV9za2JfYW55KGJmLT5za2IpOworCWJmLT5za2IgPSBOVUxMOworCWJmLT5za2JhZGRyID0gMDsKKwliZi0+ZGVzYy0+ZHNfZGF0YSA9IDA7Cit9CisKK3ZvaWQKK2F0aDVrX3J4YnVmX2ZyZWVfc2tiKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MsIHN0cnVjdCBhdGg1a19idWYgKmJmKQoreworCXN0cnVjdCBhdGg1a19odyAqYWggPSBzYy0+YWg7CisJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDVrX2h3X2NvbW1vbihhaCk7CisKKwlCVUdfT04oIWJmKTsKKwlpZiAoIWJmLT5za2IpCisJCXJldHVybjsKKwlkbWFfdW5tYXBfc2luZ2xlKHNjLT5kZXYsIGJmLT5za2JhZGRyLCBjb21tb24tPnJ4X2J1ZnNpemUsCisJCQlETUFfRlJPTV9ERVZJQ0UpOworCWRldl9rZnJlZV9za2JfYW55KGJmLT5za2IpOworCWJmLT5za2IgPSBOVUxMOworCWJmLT5za2JhZGRyID0gMDsKKwliZi0+ZGVzYy0+ZHNfZGF0YSA9IDA7Cit9CisKIHN0YXRpYyB2b2lkCi1hdGg1a19kZXNjX2ZyZWUoc3RydWN0IGF0aDVrX3NvZnRjICpzYywgc3RydWN0IHBjaV9kZXYgKnBkZXYpCithdGg1a19kZXNjX2ZyZWUoc3RydWN0IGF0aDVrX3NvZnRjICpzYykKIHsKIAlzdHJ1Y3QgYXRoNWtfYnVmICpiZjsKIApAQCAtOTI0LDcgKzg5OSw3IEBACiAJCWF0aDVrX3R4YnVmX2ZyZWVfc2tiKHNjLCBiZik7CiAKIAkvKiBGcmVlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggYWxsIGRlc2NyaXB0b3JzICovCi0JcGNpX2ZyZWVfY29uc2lzdGVudChwZGV2LCBzYy0+ZGVzY19sZW4sIHNjLT5kZXNjLCBzYy0+ZGVzY19kYWRkcik7CisJZG1hX2ZyZWVfY29oZXJlbnQoc2MtPmRldiwgc2MtPmRlc2NfbGVuLCBzYy0+ZGVzYywgc2MtPmRlc2NfZGFkZHIpOwogCXNjLT5kZXNjID0gTlVMTDsKIAlzYy0+ZGVzY19kYWRkciA9IDA7CiAKQEAgLTEwNjksNjIgKzEwNDQsNDQgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZAotYXRoNWtfdHhxX2RyYWlucShzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoNWtfdHhxICp0eHEpCi17Ci0Jc3RydWN0IGF0aDVrX2J1ZiAqYmYsICpiZjA7Ci0KLQkvKgotCSAqIE5COiB0aGlzIGFzc3VtZXMgb3V0cHV0IGhhcyBiZWVuIHN0b3BwZWQgYW5kCi0JICogICAgIHdlIGRvIG5vdCBuZWVkIHRvIGJsb2NrIGF0aDVrX3R4X3Rhc2tsZXQKLQkgKi8KLQlzcGluX2xvY2tfYmgoJnR4cS0+bG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGJmLCBiZjAsICZ0eHEtPnEsIGxpc3QpIHsKLQkJYXRoNWtfZGVidWdfcHJpbnR0eGJ1ZihzYywgYmYpOwotCi0JCWF0aDVrX3R4YnVmX2ZyZWVfc2tiKHNjLCBiZik7Ci0KLQkJc3Bpbl9sb2NrX2JoKCZzYy0+dHhidWZsb2NrKTsKLQkJbGlzdF9tb3ZlX3RhaWwoJmJmLT5saXN0LCAmc2MtPnR4YnVmKTsKLQkJc2MtPnR4YnVmX2xlbisrOwotCQl0eHEtPnR4cV9sZW4tLTsKLQkJc3Bpbl91bmxvY2tfYmgoJnNjLT50eGJ1ZmxvY2spOwotCX0KLQl0eHEtPmxpbmsgPSBOVUxMOwotCXR4cS0+dHhxX3BvbGxfbWFyayA9IGZhbHNlOwotCXNwaW5fdW5sb2NrX2JoKCZ0eHEtPmxvY2spOwotfQotCi0vKgotICogRHJhaW4gdGhlIHRyYW5zbWl0IHF1ZXVlcyBhbmQgcmVjbGFpbSByZXNvdXJjZXMuCisvKioKKyAqIGF0aDVrX2RyYWluX3R4X2J1ZmZzIC0gRW1wdHkgdHggYnVmZmVycworICoKKyAqIEBzYyBUaGUgJnN0cnVjdCBhdGg1a19zb2Z0YworICoKKyAqIEVtcHR5IHR4IGJ1ZmZlcnMgZnJvbSBhbGwgcXVldWVzIGluIHByZXBhcmF0aW9uCisgKiBvZiBhIHJlc2V0IG9yIGR1cmluZyBzaHV0ZG93bi4KKyAqCisgKiBOQjoJdGhpcyBhc3N1bWVzIG91dHB1dCBoYXMgYmVlbiBzdG9wcGVkIGFuZAorICoJd2UgZG8gbm90IG5lZWQgdG8gYmxvY2sgYXRoNWtfdHhfdGFza2xldAogICovCiBzdGF0aWMgdm9pZAotYXRoNWtfdHhxX2NsZWFudXAoc3RydWN0IGF0aDVrX3NvZnRjICpzYykKK2F0aDVrX2RyYWluX3R4X2J1ZmZzKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpCiB7Ci0Jc3RydWN0IGF0aDVrX2h3ICphaCA9IHNjLT5haDsKLQl1bnNpZ25lZCBpbnQgaTsKKwlzdHJ1Y3QgYXRoNWtfdHhxICp0eHE7CisJc3RydWN0IGF0aDVrX2J1ZiAqYmYsICpiZjA7CisJaW50IGk7CiAKLQkvKiBYWFggcmV0dXJuIHZhbHVlICovCi0JaWYgKGxpa2VseSghdGVzdF9iaXQoQVRIX1NUQVRfSU5WQUxJRCwgc2MtPnN0YXR1cykpKSB7Ci0JCS8qIGRvbid0IHRvdWNoIHRoZSBoYXJkd2FyZSBpZiBtYXJrZWQgaW52YWxpZCAqLwotCQlhdGg1a19od19zdG9wX3R4X2RtYShhaCwgc2MtPmJoYWxxKTsKLQkJQVRINUtfREJHKHNjLCBBVEg1S19ERUJVR19SRVNFVCwgImJlYWNvbiBxdWV1ZSAleFxuIiwKLQkJCWF0aDVrX2h3X2dldF90eGRwKGFoLCBzYy0+YmhhbHEpKTsKLQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2MtPnR4cXMpOyBpKyspCi0JCQlpZiAoc2MtPnR4cXNbaV0uc2V0dXApIHsKLQkJCQlhdGg1a19od19zdG9wX3R4X2RtYShhaCwgc2MtPnR4cXNbaV0ucW51bSk7Ci0JCQkJQVRINUtfREJHKHNjLCBBVEg1S19ERUJVR19SRVNFVCwgInR4cSBbJXVdICV4LCAiCi0JCQkJCSJsaW5rICVwXG4iLAotCQkJCQlzYy0+dHhxc1tpXS5xbnVtLAotCQkJCQlhdGg1a19od19nZXRfdHhkcChhaCwKLQkJCQkJCQlzYy0+dHhxc1tpXS5xbnVtKSwKLQkJCQkJc2MtPnR4cXNbaV0ubGluayk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2MtPnR4cXMpOyBpKyspIHsKKwkJaWYgKHNjLT50eHFzW2ldLnNldHVwKSB7CisJCQl0eHEgPSAmc2MtPnR4cXNbaV07CisJCQlzcGluX2xvY2tfYmgoJnR4cS0+bG9jayk7CisJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYmYsIGJmMCwgJnR4cS0+cSwgbGlzdCkgeworCQkJCWF0aDVrX2RlYnVnX3ByaW50dHhidWYoc2MsIGJmKTsKKworCQkJCWF0aDVrX3R4YnVmX2ZyZWVfc2tiKHNjLCBiZik7CisKKwkJCQlzcGluX2xvY2tfYmgoJnNjLT50eGJ1ZmxvY2spOworCQkJCWxpc3RfbW92ZV90YWlsKCZiZi0+bGlzdCwgJnNjLT50eGJ1Zik7CisJCQkJc2MtPnR4YnVmX2xlbisrOworCQkJCXR4cS0+dHhxX2xlbi0tOworCQkJCXNwaW5fdW5sb2NrX2JoKCZzYy0+dHhidWZsb2NrKTsKIAkJCX0KKwkJCXR4cS0+bGluayA9IE5VTEw7CisJCQl0eHEtPnR4cV9wb2xsX21hcmsgPSBmYWxzZTsKKwkJCXNwaW5fdW5sb2NrX2JoKCZ0eHEtPmxvY2spOworCQl9CiAJfQotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2MtPnR4cXMpOyBpKyspCi0JCWlmIChzYy0+dHhxc1tpXS5zZXR1cCkKLQkJCWF0aDVrX3R4cV9kcmFpbnEoc2MsICZzYy0+dHhxc1tpXSk7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0xMTg0LDE2ICsxMTQxLDE5IEBACiB9CiAKIC8qCi0gKiBEaXNhYmxlIHRoZSByZWNlaXZlIGgvdyBpbiBwcmVwYXJhdGlvbiBmb3IgYSByZXNldC4KKyAqIERpc2FibGUgdGhlIHJlY2VpdmUgbG9naWMgb24gUENVIChEUlUpCisgKiBJbiBwcmVwYXJhdGlvbiBmb3IgYSBzaHV0ZG93bi4KKyAqCisgKiBOb3RlOiBEb2Vzbid0IHN0b3AgcnggRE1BLCBhdGg1a19od19kbWFfc3RvcAorICogZG9lcy4KICAqLwogc3RhdGljIHZvaWQKIGF0aDVrX3J4X3N0b3Aoc3RydWN0IGF0aDVrX3NvZnRjICpzYykKIHsKIAlzdHJ1Y3QgYXRoNWtfaHcgKmFoID0gc2MtPmFoOwogCi0JYXRoNWtfaHdfc3RvcF9yeF9wY3UoYWgpOwkvKiBkaXNhYmxlIFBDVSAqLwogCWF0aDVrX2h3X3NldF9yeF9maWx0ZXIoYWgsIDApOwkvKiBjbGVhciByZWN2IGZpbHRlciAqLwotCWF0aDVrX2h3X3N0b3BfcnhfZG1hKGFoKTsJLyogZGlzYWJsZSBETUEgZW5naW5lICovCisJYXRoNWtfaHdfc3RvcF9yeF9wY3UoYWgpOwkvKiBkaXNhYmxlIFBDVSAqLwogCiAJYXRoNWtfZGVidWdfcHJpbnRyeGJ1ZmZzKHNjLCBhaCk7CiB9CkBAIC0xMzA3LDggKzEyNjcsNyBAQAogCSAgICBtZW1jbXAobWdtdC0+YnNzaWQsIGNvbW1vbi0+Y3VyYnNzaWQsIEVUSF9BTEVOKSAhPSAwKQogCQlyZXR1cm47CiAKLQlhaC0+YWhfYmVhY29uX3Jzc2lfYXZnID0gYXRoNWtfbW92aW5nX2F2ZXJhZ2UoYWgtPmFoX2JlYWNvbl9yc3NpX2F2ZywKLQkJCQkJCSAgICAgIHJzc2kpOworCWV3bWFfYWRkKCZhaC0+YWhfYmVhY29uX3Jzc2lfYXZnLCByc3NpKTsKIAogCS8qIGluIElCU1MgbW9kZSB3ZSBzaG91bGQga2VlcCBSU1NJIHN0YXRpc3RpY3MgcGVyIG5laWdoYm91ciAqLwogCS8qIGxlMTZfdG9fY3B1KG1nbXQtPnUuYmVhY29uLmNhcGFiX2luZm8pICYgV0xBTl9DQVBBQklMSVRZX0lCU1MgKi8KQEAgLTE1NTEsOSArMTUxMCw5IEBACiAJCQlpZiAoIW5leHRfc2tiKQogCQkJCWdvdG8gbmV4dDsKIAotCQkJcGNpX3VubWFwX3NpbmdsZShzYy0+cGRldiwgYmYtPnNrYmFkZHIsCisJCQlkbWFfdW5tYXBfc2luZ2xlKHNjLT5kZXYsIGJmLT5za2JhZGRyLAogCQkJCQkgY29tbW9uLT5yeF9idWZzaXplLAotCQkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCQkJIERNQV9GUk9NX0RFVklDRSk7CiAKIAkJCXNrYl9wdXQoc2tiLCBycy5yc19kYXRhbGVuKTsKIApAQCAtMTU3NCw4ICsxNTMzLDkgQEAKICogVFggSGFuZGxpbmcgKgogXCoqKioqKioqKioqKiovCiAKLXN0YXRpYyBpbnQgYXRoNWtfdHhfcXVldWUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgIHN0cnVjdCBhdGg1a190eHEgKnR4cSkKK2ludAorYXRoNWtfdHhfcXVldWUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IsCisJICAgICAgIHN0cnVjdCBhdGg1a190eHEgKnR4cSkKIHsKIAlzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjID0gaHctPnByaXY7CiAJc3RydWN0IGF0aDVrX2J1ZiAqYmY7CkBAIC0xNzE2LDggKzE2NzYsOSBAQAogCiAJCQlza2IgPSBiZi0+c2tiOwogCQkJYmYtPnNrYiA9IE5VTEw7Ci0JCQlwY2lfdW5tYXBfc2luZ2xlKHNjLT5wZGV2LCBiZi0+c2tiYWRkciwgc2tiLT5sZW4sCi0JCQkJCVBDSV9ETUFfVE9ERVZJQ0UpOworCisJCQlkbWFfdW5tYXBfc2luZ2xlKHNjLT5kZXYsIGJmLT5za2JhZGRyLCBza2ItPmxlbiwKKwkJCQkJRE1BX1RPX0RFVklDRSk7CiAJCQlhdGg1a190eF9mcmFtZV9jb21wbGV0ZWQoc2MsIHNrYiwgJnRzKTsKIAkJfQogCkBAIC0xNzcxLDEyICsxNzMyLDEzIEBACiAJdTMyIGZsYWdzOwogCWNvbnN0IGludCBwYWRzaXplID0gMDsKIAotCWJmLT5za2JhZGRyID0gcGNpX21hcF9zaW5nbGUoc2MtPnBkZXYsIHNrYi0+ZGF0YSwgc2tiLT5sZW4sCi0JCQlQQ0lfRE1BX1RPREVWSUNFKTsKKwliZi0+c2tiYWRkciA9IGRtYV9tYXBfc2luZ2xlKHNjLT5kZXYsIHNrYi0+ZGF0YSwgc2tiLT5sZW4sCisJCQlETUFfVE9fREVWSUNFKTsKIAlBVEg1S19EQkcoc2MsIEFUSDVLX0RFQlVHX0JFQUNPTiwgInNrYiAlcCBbZGF0YSAlcCBsZW4gJXVdICIKIAkJCSJza2JhZGRyICVsbHhcbiIsIHNrYiwgc2tiLT5kYXRhLCBza2ItPmxlbiwKIAkJCSh1bnNpZ25lZCBsb25nIGxvbmcpYmYtPnNrYmFkZHIpOwotCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3Ioc2MtPnBkZXYsIGJmLT5za2JhZGRyKSkgeworCisJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKHNjLT5kZXYsIGJmLT5za2JhZGRyKSkgewogCQlBVEg1S19FUlIoc2MsICJiZWFjb24gRE1BIG1hcHBpbmcgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQpAQCAtMTgyOCw3ICsxNzkwLDcgQEAKIAogCXJldHVybiAwOwogZXJyX3VubWFwOgotCXBjaV91bm1hcF9zaW5nbGUoc2MtPnBkZXYsIGJmLT5za2JhZGRyLCBza2ItPmxlbiwgUENJX0RNQV9UT0RFVklDRSk7CisJZG1hX3VubWFwX3NpbmdsZShzYy0+ZGV2LCBiZi0+c2tiYWRkciwgc2tiLT5sZW4sIERNQV9UT19ERVZJQ0UpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTE4MzksNyArMTgwMSw3IEBACiAgKgogICogQ2FsbGVkIHdpdGggdGhlIGJlYWNvbiBsb2NrLgogICovCi1zdGF0aWMgaW50CitpbnQKIGF0aDVrX2JlYWNvbl91cGRhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCiB7CiAJaW50IHJldDsKQEAgLTE5NDUsNyArMTkwNyw3IEBACiAJICogVGhpcyBzaG91bGQgbmV2ZXIgZmFpbCBzaW5jZSB3ZSBjaGVjayBhYm92ZSB0aGF0IG5vIGZyYW1lcwogCSAqIGFyZSBzdGlsbCBwZW5kaW5nIG9uIHRoZSBxdWV1ZS4KIAkgKi8KLQlpZiAodW5saWtlbHkoYXRoNWtfaHdfc3RvcF90eF9kbWEoYWgsIHNjLT5iaGFscSkpKSB7CisJaWYgKHVubGlrZWx5KGF0aDVrX2h3X3N0b3BfYmVhY29uX3F1ZXVlKGFoLCBzYy0+YmhhbHEpKSkgewogCQlBVEg1S19XQVJOKHNjLCAiYmVhY29uIHF1ZXVlICV1IGRpZG4ndCBzdGFydC9zdG9wID9cbiIsIHNjLT5iaGFscSk7CiAJCS8qIE5COiBodyBzdGlsbCBzdG9wcyBETUEsIHNvIHByb2NlZWQgKi8KIAl9CkBAIC0xOTg1LDcgKzE5NDcsNyBAQAogICogd2hlbiB3ZSBvdGhlcndpc2Uga25vdyB3ZSBoYXZlIHRvIHVwZGF0ZSB0aGUgdGltZXJzLCBidXQgd2Uga2VlcCBpdCBpbiB0aGlzCiAgKiBmdW5jdGlvbiB0byBoYXZlIGl0IGFsbCB0b2dldGhlciBpbiBvbmUgcGxhY2UuCiAgKi8KLXN0YXRpYyB2b2lkCit2b2lkCiBhdGg1a19iZWFjb25fdXBkYXRlX3RpbWVycyhzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjLCB1NjQgYmNfdHNmKQogewogCXN0cnVjdCBhdGg1a19odyAqYWggPSBzYy0+YWg7CkBAIC0yMDg3LDcgKzIwNDksNyBAQAogICogSW4gSUJTUyBtb2RlIHdlIHVzZSBhIHNlbGYtbGlua2VkIHR4IGRlc2NyaXB0b3IgaWYgcG9zc2libGUuIFdlIGVuYWJsZSBTV0JBCiAgKiBpbnRlcnJ1cHRzIHRvIGRldGVjdCBUU0YgdXBkYXRlcyBvbmx5LgogICovCi1zdGF0aWMgdm9pZAordm9pZAogYXRoNWtfYmVhY29uX2NvbmZpZyhzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKQogewogCXN0cnVjdCBhdGg1a19odyAqYWggPSBzYy0+YWg7CkBAIC0yMTE1LDcgKzIwNzcsNyBAQAogCQl9IGVsc2UKIAkJCWF0aDVrX2JlYWNvbl91cGRhdGVfdGltZXJzKHNjLCAtMSk7CiAJfSBlbHNlIHsKLQkJYXRoNWtfaHdfc3RvcF90eF9kbWEoc2MtPmFoLCBzYy0+YmhhbHEpOworCQlhdGg1a19od19zdG9wX2JlYWNvbl9xdWV1ZShzYy0+YWgsIHNjLT5iaGFscSk7CiAJfQogCiAJYXRoNWtfaHdfc2V0X2ltcihhaCwgc2MtPmltYXNrKTsKQEAgLTIxNzcsNyArMjEzOSw3IEBACiAJICogQVI1S19SRUdfRU5BQkxFX0JJVFMoYWgsIEFSNUtfQ1IsIEFSNUtfQ1JfU1dJKTsgKi8KIH0KIAotc3RhdGljIGlycXJldHVybl90CitpcnFyZXR1cm5fdAogYXRoNWtfaW50cihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CiAJc3RydWN0IGF0aDVrX3NvZnRjICpzYyA9IGRldl9pZDsKQEAgLTIxODYsNyArMjE0OCw4IEBACiAJdW5zaWduZWQgaW50IGNvdW50ZXIgPSAxMDAwOwogCiAJaWYgKHVubGlrZWx5KHRlc3RfYml0KEFUSF9TVEFUX0lOVkFMSUQsIHNjLT5zdGF0dXMpIHx8Ci0JCQkJIWF0aDVrX2h3X2lzX2ludHJfcGVuZGluZyhhaCkpKQorCQkoKGF0aDVrX2dldF9idXNfdHlwZShhaCkgIT0gQVRIX0FIQikgJiYKKwkJCQkhYXRoNWtfaHdfaXNfaW50cl9wZW5kaW5nKGFoKSkpKQogCQlyZXR1cm4gSVJRX05PTkU7CiAKIAlkbyB7CkBAIC0yMjUyLDYgKzIyMTUsMTAgQEAKIAkJCQl0YXNrbGV0X3NjaGVkdWxlKCZzYy0+cmZfa2lsbC50b2dnbGVxKTsKIAogCQl9CisKKwkJaWYgKGF0aDVrX2dldF9idXNfdHlwZShhaCkgPT0gQVRIX0FIQikKKwkJCWJyZWFrOworCiAJfSB3aGlsZSAoYXRoNWtfaHdfaXNfaW50cl9wZW5kaW5nKGFoKSAmJiAtLWNvdW50ZXIgPiAwKTsKIAogCWlmICh1bmxpa2VseSghY291bnRlcikpCkBAIC0yMzUxLDcgKzIzMTgsNyBAQAogCWlmIChuZWVkcmVzZXQpIHsKIAkJQVRINUtfREJHKHNjLCBBVEg1S19ERUJVR19SRVNFVCwKIAkJCSAgIlRYIHF1ZXVlcyBzdHVjaywgcmVzZXR0aW5nXG4iKTsKLQkJYXRoNWtfcmVzZXQoc2MsIHNjLT5jdXJjaGFuKTsKKwkJYXRoNWtfcmVzZXQoc2MsIE5VTEwsIHRydWUpOwogCX0KIAogCWllZWU4MDIxMV9xdWV1ZV9kZWxheWVkX3dvcmsoc2MtPmh3LCAmc2MtPnR4X2NvbXBsZXRlX3dvcmssCkBAIC0yMzYzLDExNzQgKzIzMzAsMjAgQEAKICogSW5pdGlhbGl6YXRpb24gcm91dGluZXMgKgogXCoqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyBpbnQKLWF0aDVrX3N0b3BfbG9ja2VkKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpCitpbnQKK2F0aDVrX2luaXRfc29mdGMoc3RydWN0IGF0aDVrX3NvZnRjICpzYywgY29uc3Qgc3RydWN0IGF0aF9idXNfb3BzICpidXNfb3BzKQogewotCXN0cnVjdCBhdGg1a19odyAqYWggPSBzYy0+YWg7Ci0KLQlBVEg1S19EQkcoc2MsIEFUSDVLX0RFQlVHX1JFU0VULCAiaW52YWxpZCAldVxuIiwKLQkJCXRlc3RfYml0KEFUSF9TVEFUX0lOVkFMSUQsIHNjLT5zdGF0dXMpKTsKLQotCS8qCi0JICogU2h1dGRvd24gdGhlIGhhcmR3YXJlIGFuZCBkcml2ZXI6Ci0JICogICAgc3RvcCBvdXRwdXQgZnJvbSBhYm92ZQotCSAqICAgIGRpc2FibGUgaW50ZXJydXB0cwotCSAqICAgIHR1cm4gb2ZmIHRpbWVycwotCSAqICAgIHR1cm4gb2ZmIHRoZSByYWRpbwotCSAqICAgIGNsZWFyIHRyYW5zbWl0IG1hY2hpbmVyeQotCSAqICAgIGNsZWFyIHJlY2VpdmUgbWFjaGluZXJ5Ci0JICogICAgZHJhaW4gYW5kIHJlbGVhc2UgdHggcXVldWVzCi0JICogICAgcmVjbGFpbSBiZWFjb24gcmVzb3VyY2VzCi0JICogICAgcG93ZXIgZG93biBoYXJkd2FyZQotCSAqCi0JICogTm90ZSB0aGF0IHNvbWUgb2YgdGhpcyB3b3JrIGlzIG5vdCBwb3NzaWJsZSBpZiB0aGUKLQkgKiBoYXJkd2FyZSBpcyBnb25lIChpbnZhbGlkKS4KLQkgKi8KLQlpZWVlODAyMTFfc3RvcF9xdWV1ZXMoc2MtPmh3KTsKLQotCWlmICghdGVzdF9iaXQoQVRIX1NUQVRfSU5WQUxJRCwgc2MtPnN0YXR1cykpIHsKLQkJYXRoNWtfbGVkX29mZihzYyk7Ci0JCWF0aDVrX2h3X3NldF9pbXIoYWgsIDApOwotCQlzeW5jaHJvbml6ZV9pcnEoc2MtPnBkZXYtPmlycSk7Ci0JfQotCWF0aDVrX3R4cV9jbGVhbnVwKHNjKTsKLQlpZiAoIXRlc3RfYml0KEFUSF9TVEFUX0lOVkFMSUQsIHNjLT5zdGF0dXMpKSB7Ci0JCWF0aDVrX3J4X3N0b3Aoc2MpOwotCQlhdGg1a19od19waHlfZGlzYWJsZShhaCk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLWF0aDVrX2luaXQoc3RydWN0IGF0aDVrX3NvZnRjICpzYykKLXsKLQlzdHJ1Y3QgYXRoNWtfaHcgKmFoID0gc2MtPmFoOwotCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg1a19od19jb21tb24oYWgpOwotCWludCByZXQsIGk7Ci0KLQltdXRleF9sb2NrKCZzYy0+bG9jayk7Ci0KLQlBVEg1S19EQkcoc2MsIEFUSDVLX0RFQlVHX1JFU0VULCAibW9kZSAlZFxuIiwgc2MtPm9wbW9kZSk7Ci0KLQkvKgotCSAqIFN0b3AgYW55dGhpbmcgcHJldmlvdXNseSBzZXR1cC4gIFRoaXMgaXMgc2FmZQotCSAqIG5vIG1hdHRlciB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHRocm91Z2ggb3Igbm90LgotCSAqLwotCWF0aDVrX3N0b3BfbG9ja2VkKHNjKTsKLQotCS8qCi0JICogVGhlIGJhc2ljIGludGVyZmFjZSB0byBzZXR0aW5nIHRoZSBoYXJkd2FyZSBpbiBhIGdvb2QKLQkgKiBzdGF0ZSBpcyBgYHJlc2V0JycuICBPbiByZXR1cm4gdGhlIGhhcmR3YXJlIGlzIGtub3duIHRvCi0JICogYmUgcG93ZXJlZCB1cCBhbmQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLiAgVGhpcyBtdXN0Ci0JICogYmUgZm9sbG93ZWQgYnkgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGFwcHJvcHJpYXRlIGJpdHMKLQkgKiBhbmQgdGhlbiBzZXR1cCBvZiB0aGUgaW50ZXJydXB0IG1hc2suCi0JICovCi0Jc2MtPmN1cmNoYW4gPSBzYy0+aHctPmNvbmYuY2hhbm5lbDsKLQlzYy0+Y3VyYmFuZCA9ICZzYy0+c2JhbmRzW3NjLT5jdXJjaGFuLT5iYW5kXTsKLQlzYy0+aW1hc2sgPSBBUjVLX0lOVF9SWE9LIHwgQVI1S19JTlRfUlhFUlIgfCBBUjVLX0lOVF9SWEVPTCB8Ci0JCUFSNUtfSU5UX1JYT1JOIHwgQVI1S19JTlRfVFhERVNDIHwgQVI1S19JTlRfVFhFT0wgfAotCQlBUjVLX0lOVF9GQVRBTCB8IEFSNUtfSU5UX0dMT0JBTCB8IEFSNUtfSU5UX01JQjsKLQotCXJldCA9IGF0aDVrX3Jlc2V0KHNjLCBOVUxMKTsKLQlpZiAocmV0KQotCQlnb3RvIGRvbmU7Ci0KLQlhdGg1a19yZmtpbGxfaHdfc3RhcnQoYWgpOwotCi0JLyoKLQkgKiBSZXNldCB0aGUga2V5IGNhY2hlIHNpbmNlIHNvbWUgcGFydHMgZG8gbm90IHJlc2V0IHRoZQotCSAqIGNvbnRlbnRzIG9uIGluaXRpYWwgcG93ZXIgdXAgb3IgcmVzdW1lIGZyb20gc3VzcGVuZC4KLQkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgY29tbW9uLT5rZXltYXg7IGkrKykKLQkJYXRoX2h3X2tleXJlc2V0KGNvbW1vbiwgKHUxNikgaSk7Ci0KLQlhdGg1a19od19zZXRfYWNrX2JpdHJhdGVfaGlnaChhaCwgdHJ1ZSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzYy0+YnNsb3QpOyBpKyspCi0JCXNjLT5ic2xvdFtpXSA9IE5VTEw7Ci0KLQlyZXQgPSAwOwotZG9uZToKLQltbWlvd2IoKTsKLQltdXRleF91bmxvY2soJnNjLT5sb2NrKTsKLQotCWllZWU4MDIxMV9xdWV1ZV9kZWxheWVkX3dvcmsoc2MtPmh3LCAmc2MtPnR4X2NvbXBsZXRlX3dvcmssCi0JCQltc2Vjc190b19qaWZmaWVzKEFUSDVLX1RYX0NPTVBMRVRFX1BPTExfSU5UKSk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBzdG9wX3Rhc2tsZXRzKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpCi17Ci0JdGFza2xldF9raWxsKCZzYy0+cnh0cSk7Ci0JdGFza2xldF9raWxsKCZzYy0+dHh0cSk7Ci0JdGFza2xldF9raWxsKCZzYy0+Y2FsaWIpOwotCXRhc2tsZXRfa2lsbCgmc2MtPmJlYWNvbnRxKTsKLQl0YXNrbGV0X2tpbGwoJnNjLT5hbmlfdGFza2xldCk7Ci19Ci0KLS8qCi0gKiBTdG9wIHRoZSBkZXZpY2UsIGdyYWJiaW5nIHRoZSB0b3AtbGV2ZWwgbG9jayB0byBwcm90ZWN0Ci0gKiBhZ2FpbnN0IGNvbmN1cnJlbnQgZW50cnkgdGhyb3VnaCBhdGg1a19pbml0ICh3aGljaCBjYW4gaGFwcGVuCi0gKiBpZiBhbm90aGVyIHRocmVhZCBkb2VzIGEgc3lzdGVtIGNhbGwgYW5kIHRoZSB0aHJlYWQgZG9pbmcgdGhlCi0gKiBzdG9wIGlzIHByZWVtcHRlZCkuCi0gKi8KLXN0YXRpYyBpbnQKLWF0aDVrX3N0b3BfaHcoc3RydWN0IGF0aDVrX3NvZnRjICpzYykKLXsKLQlpbnQgcmV0OwotCi0JbXV0ZXhfbG9jaygmc2MtPmxvY2spOwotCXJldCA9IGF0aDVrX3N0b3BfbG9ja2VkKHNjKTsKLQlpZiAocmV0ID09IDAgJiYgIXRlc3RfYml0KEFUSF9TVEFUX0lOVkFMSUQsIHNjLT5zdGF0dXMpKSB7Ci0JCS8qCi0JCSAqIERvbid0IHNldCB0aGUgY2FyZCBpbiBmdWxsIHNsZWVwIG1vZGUhCi0JCSAqCi0JCSAqIGEpIFdoZW4gdGhlIGRldmljZSBpcyBpbiB0aGlzIHN0YXRlIGl0IG11c3QgYmUgY2FyZWZ1bGx5Ci0JCSAqIHdva2VuIHVwIG9yIHJlZmVyZW5jZXMgdG8gcmVnaXN0ZXJzIGluIHRoZSBQQ0kgY2xvY2sKLQkJICogZG9tYWluIG1heSBmcmVlemUgdGhlIGJ1cyAoYW5kIHN5c3RlbSkuICBUaGlzIHZhcmllcwotCQkgKiBieSBjaGlwIGFuZCBpcyBtb3N0bHkgYW4gaXNzdWUgd2l0aCBuZXdlciBwYXJ0cwotCQkgKiAobWFkd2lmaSBzb3VyY2VzIG1lbnRpb25lZCBzcmV2ID49IDB4NzgpIHRoYXQgZ28gdG8KLQkJICogc2xlZXAgbW9yZSBxdWlja2x5LgotCQkgKgotCQkgKiBiKSBPbiBvbGRlciBjaGlwcyBmdWxsIHNsZWVwIHJlc3VsdHMgYSB3ZWlyZCBiZWhhdmlvdXIKLQkJICogZHVyaW5nIHdha2V1cC4gSSB0ZXN0ZWQgdmFyaW91cyBjYXJkcyB3aXRoIHNyZXYgPCAweDc4Ci0JCSAqIGFuZCB0aGV5IGRvbid0IHdha2UgdXAgYWZ0ZXIgbW9kdWxlIHJlbG9hZCwgYSBzZWNvbmQKLQkJICogbW9kdWxlIHJlbG9hZCBpcyBuZWVkZWQgdG8gYnJpbmcgdGhlIGNhcmQgdXAgYWdhaW4uCi0JCSAqCi0JCSAqIFVudGlsIHdlIGZpZ3VyZSBvdXQgd2hhdCdzIGdvaW5nIG9uIGRvbid0IGVuYWJsZQotCQkgKiBmdWxsIGNoaXAgcmVzZXQgb24gYW55IGNoaXAgKHRoaXMgaXMgd2hhdCBMZWdhY3kgSEFMCi0JCSAqIGFuZCBTYW0ncyBIQUwgZG8gYW55d2F5KS4gSW5zdGVhZCBQZXJmb3JtIGEgZnVsbCByZXNldAotCQkgKiBvbiB0aGUgZGV2aWNlIChzYW1lIGFzIGluaXRpYWwgc3RhdGUgYWZ0ZXIgYXR0YWNoKSBhbmQKLQkJICogbGVhdmUgaXQgaWRsZSAoa2VlcCBNQUMvQkIgb24gd2FybSByZXNldCkgKi8KLQkJcmV0ID0gYXRoNWtfaHdfb25faG9sZChzYy0+YWgpOwotCi0JCUFUSDVLX0RCRyhzYywgQVRINUtfREVCVUdfUkVTRVQsCi0JCQkJInB1dHRpbmcgZGV2aWNlIHRvIHNsZWVwXG4iKTsKLQl9Ci0KLQltbWlvd2IoKTsKLQltdXRleF91bmxvY2soJnNjLT5sb2NrKTsKLQotCXN0b3BfdGFza2xldHMoc2MpOwotCi0JY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZzYy0+dHhfY29tcGxldGVfd29yayk7Ci0KLQlhdGg1a19yZmtpbGxfaHdfc3RvcChzYy0+YWgpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotLyoKLSAqIFJlc2V0IHRoZSBoYXJkd2FyZS4gIElmIGNoYW4gaXMgbm90IE5VTEwsIHRoZW4gYWxzbyBwYXVzZSByeC90eAotICogYW5kIGNoYW5nZSB0byB0aGUgZ2l2ZW4gY2hhbm5lbC4KLSAqCi0gKiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgd2l0aCBzYy0+bG9jay4KLSAqLwotc3RhdGljIGludAotYXRoNWtfcmVzZXQoc3RydWN0IGF0aDVrX3NvZnRjICpzYywgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuKQotewotCXN0cnVjdCBhdGg1a19odyAqYWggPSBzYy0+YWg7Ci0JaW50IHJldDsKLQotCUFUSDVLX0RCRyhzYywgQVRINUtfREVCVUdfUkVTRVQsICJyZXNldHRpbmdcbiIpOwotCi0JYXRoNWtfaHdfc2V0X2ltcihhaCwgMCk7Ci0Jc3luY2hyb25pemVfaXJxKHNjLT5wZGV2LT5pcnEpOwotCXN0b3BfdGFza2xldHMoc2MpOwotCi0JaWYgKGNoYW4pIHsKLQkJYXRoNWtfdHhxX2NsZWFudXAoc2MpOwotCQlhdGg1a19yeF9zdG9wKHNjKTsKLQotCQlzYy0+Y3VyY2hhbiA9IGNoYW47Ci0JCXNjLT5jdXJiYW5kID0gJnNjLT5zYmFuZHNbY2hhbi0+YmFuZF07Ci0JfQotCXJldCA9IGF0aDVrX2h3X3Jlc2V0KGFoLCBzYy0+b3Btb2RlLCBzYy0+Y3VyY2hhbiwgY2hhbiAhPSBOVUxMKTsKLQlpZiAocmV0KSB7Ci0JCUFUSDVLX0VSUihzYywgImNhbid0IHJlc2V0IGhhcmR3YXJlICglZClcbiIsIHJldCk7Ci0JCWdvdG8gZXJyOwotCX0KLQotCXJldCA9IGF0aDVrX3J4X3N0YXJ0KHNjKTsKLQlpZiAocmV0KSB7Ci0JCUFUSDVLX0VSUihzYywgImNhbid0IHN0YXJ0IHJlY3YgbG9naWNcbiIpOwotCQlnb3RvIGVycjsKLQl9Ci0KLQlhdGg1a19hbmlfaW5pdChhaCwgYWgtPmFoX3NjLT5hbmlfc3RhdGUuYW5pX21vZGUpOwotCi0JYWgtPmFoX2NhbF9uZXh0X2Z1bGwgPSBqaWZmaWVzOwotCWFoLT5haF9jYWxfbmV4dF9hbmkgPSBqaWZmaWVzOwotCWFoLT5haF9jYWxfbmV4dF9uZiA9IGppZmZpZXM7Ci0KLQkvKgotCSAqIENoYW5nZSBjaGFubmVscyBhbmQgdXBkYXRlIHRoZSBoL3cgcmF0ZSBtYXAgaWYgd2UncmUgc3dpdGNoaW5nOwotCSAqIGUuZy4gMTFhIHRvIDExYi9nLgotCSAqCi0JICogV2UgbWF5IGJlIGRvaW5nIGEgcmVzZXQgaW4gcmVzcG9uc2UgdG8gYW4gaW9jdGwgdGhhdCBjaGFuZ2VzIHRoZQotCSAqIGNoYW5uZWwgc28gdXBkYXRlIGFueSBzdGF0ZSB0aGF0IG1pZ2h0IGNoYW5nZSBhcyBhIHJlc3VsdC4KLQkgKgotCSAqIFhYWCBuZWVkZWQ/Ci0JICovCi0vKglhdGg1a19jaGFuX2NoYW5nZShzYywgYyk7ICovCi0KLQlhdGg1a19iZWFjb25fY29uZmlnKHNjKTsKLQkvKiBpbnRycyBhcmUgZW5hYmxlZCBieSBhdGg1a19iZWFjb25fY29uZmlnICovCi0KLQlpZWVlODAyMTFfd2FrZV9xdWV1ZXMoc2MtPmh3KTsKLQotCXJldHVybiAwOwotZXJyOgotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGF0aDVrX3Jlc2V0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBhdGg1a19zb2Z0YyAqc2MgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGF0aDVrX3NvZnRjLAotCQlyZXNldF93b3JrKTsKLQotCW11dGV4X2xvY2soJnNjLT5sb2NrKTsKLQlhdGg1a19yZXNldChzYywgc2MtPmN1cmNoYW4pOwotCW11dGV4X3VubG9jaygmc2MtPmxvY2spOwotfQotCi1zdGF0aWMgaW50Ci1hdGg1a19hdHRhY2goc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQotewotCXN0cnVjdCBhdGg1a19zb2Z0YyAqc2MgPSBody0+cHJpdjsKLQlzdHJ1Y3QgYXRoNWtfaHcgKmFoID0gc2MtPmFoOwotCXN0cnVjdCBhdGhfcmVndWxhdG9yeSAqcmVndWxhdG9yeSA9IGF0aDVrX2h3X3JlZ3VsYXRvcnkoYWgpOwotCXN0cnVjdCBhdGg1a190eHEgKnR4cTsKLQl1OCBtYWNbRVRIX0FMRU5dID0ge307Ci0JaW50IHJldDsKLQotCUFUSDVLX0RCRyhzYywgQVRINUtfREVCVUdfQU5ZLCAiZGV2aWQgMHgleFxuIiwgcGRldi0+ZGV2aWNlKTsKLQotCS8qCi0JICogQ2hlY2sgaWYgdGhlIE1BQyBoYXMgbXVsdGktcmF0ZSByZXRyeSBzdXBwb3J0LgotCSAqIFdlIGRvIHRoaXMgYnkgdHJ5aW5nIHRvIHNldHVwIGEgZmFrZSBleHRlbmRlZAotCSAqIGRlc2NyaXB0b3IuICBNQUNzIHRoYXQgZG9uJ3QgaGF2ZSBzdXBwb3J0IHdpbGwKLQkgKiByZXR1cm4gZmFsc2Ugdy9vIGRvaW5nIGFueXRoaW5nLiAgTUFDcyB0aGF0IGRvCi0JICogc3VwcG9ydCBpdCB3aWxsIHJldHVybiB0cnVlIHcvbyBkb2luZyBhbnl0aGluZy4KLQkgKi8KLQlyZXQgPSBhdGg1a19od19zZXR1cF9tcnJfdHhfZGVzYyhhaCwgTlVMTCwgMCwgMCwgMCwgMCwgMCwgMCk7Ci0KLQlpZiAocmV0IDwgMCkKLQkJZ290byBlcnI7Ci0JaWYgKHJldCA+IDApCi0JCV9fc2V0X2JpdChBVEhfU1RBVF9NUlJFVFJZLCBzYy0+c3RhdHVzKTsKLQotCS8qCi0JICogQ29sbGVjdCB0aGUgY2hhbm5lbCBsaXN0LiAgVGhlIDgwMi4xMSBsYXllcgotCSAqIGlzIHJlc3Bvc2libGUgZm9yIGZpbHRlcmluZyB0aGlzIGxpc3QgYmFzZWQKLQkgKiBvbiBzZXR0aW5ncyBsaWtlIHRoZSBwaHkgbW9kZSBhbmQgcmVndWxhdG9yeQotCSAqIGRvbWFpbiByZXN0cmljdGlvbnMuCi0JICovCi0JcmV0ID0gYXRoNWtfc2V0dXBfYmFuZHMoaHcpOwotCWlmIChyZXQpIHsKLQkJQVRINUtfRVJSKHNjLCAiY2FuJ3QgZ2V0IGNoYW5uZWxzXG4iKTsKLQkJZ290byBlcnI7Ci0JfQotCi0JLyogTkI6IHNldHVwIGhlcmUgc28gYXRoNWtfcmF0ZV91cGRhdGUgaXMgaGFwcHkgKi8KLQlpZiAodGVzdF9iaXQoQVI1S19NT0RFXzExQSwgYWgtPmFoX21vZGVzKSkKLQkJYXRoNWtfc2V0Y3VybW9kZShzYywgQVI1S19NT0RFXzExQSk7Ci0JZWxzZQotCQlhdGg1a19zZXRjdXJtb2RlKHNjLCBBUjVLX01PREVfMTFCKTsKLQotCS8qCi0JICogQWxsb2NhdGUgdHgrcnggZGVzY3JpcHRvcnMgYW5kIHBvcHVsYXRlIHRoZSBsaXN0cy4KLQkgKi8KLQlyZXQgPSBhdGg1a19kZXNjX2FsbG9jKHNjLCBwZGV2KTsKLQlpZiAocmV0KSB7Ci0JCUFUSDVLX0VSUihzYywgImNhbid0IGFsbG9jYXRlIGRlc2NyaXB0b3JzXG4iKTsKLQkJZ290byBlcnI7Ci0JfQotCi0JLyoKLQkgKiBBbGxvY2F0ZSBoYXJkd2FyZSB0cmFuc21pdCBxdWV1ZXM6IG9uZSBxdWV1ZSBmb3IKLQkgKiBiZWFjb24gZnJhbWVzIGFuZCBvbmUgZGF0YSBxdWV1ZSBmb3IgZWFjaCBRb1MKLQkgKiBwcmlvcml0eS4gIE5vdGUgdGhhdCBodyBmdW5jdGlvbnMgaGFuZGxlIHJlc2V0dGluZwotCSAqIHRoZXNlIHF1ZXVlcyBhdCB0aGUgbmVlZGVkIHRpbWUuCi0JICovCi0JcmV0ID0gYXRoNWtfYmVhY29ucV9zZXR1cChhaCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJQVRINUtfRVJSKHNjLCAiY2FuJ3Qgc2V0dXAgYSBiZWFjb24geG1pdCBxdWV1ZVxuIik7Ci0JCWdvdG8gZXJyX2Rlc2M7Ci0JfQotCXNjLT5iaGFscSA9IHJldDsKLQlzYy0+Y2FicSA9IGF0aDVrX3R4cV9zZXR1cChzYywgQVI1S19UWF9RVUVVRV9DQUIsIDApOwotCWlmIChJU19FUlIoc2MtPmNhYnEpKSB7Ci0JCUFUSDVLX0VSUihzYywgImNhbid0IHNldHVwIGNhYiBxdWV1ZVxuIik7Ci0JCXJldCA9IFBUUl9FUlIoc2MtPmNhYnEpOwotCQlnb3RvIGVycl9iaGFsOwotCX0KLQotCS8qIFRoaXMgb3JkZXIgbWF0Y2hlcyBtYWM4MDIxMSdzIHF1ZXVlIHByaW9yaXR5LCBzbyB3ZSBjYW4KLQkgKiBkaXJlY3RseSB1c2UgdGhlIG1hYzgwMjExIHF1ZXVlIG51bWJlciB3aXRob3V0IGFueSBtYXBwaW5nICovCi0JdHhxID0gYXRoNWtfdHhxX3NldHVwKHNjLCBBUjVLX1RYX1FVRVVFX0RBVEEsIEFSNUtfV01FX0FDX1ZPKTsKLQlpZiAoSVNfRVJSKHR4cSkpIHsKLQkJQVRINUtfRVJSKHNjLCAiY2FuJ3Qgc2V0dXAgeG1pdCBxdWV1ZVxuIik7Ci0JCXJldCA9IFBUUl9FUlIodHhxKTsKLQkJZ290byBlcnJfcXVldWVzOwotCX0KLQl0eHEgPSBhdGg1a190eHFfc2V0dXAoc2MsIEFSNUtfVFhfUVVFVUVfREFUQSwgQVI1S19XTUVfQUNfVkkpOwotCWlmIChJU19FUlIodHhxKSkgewotCQlBVEg1S19FUlIoc2MsICJjYW4ndCBzZXR1cCB4bWl0IHF1ZXVlXG4iKTsKLQkJcmV0ID0gUFRSX0VSUih0eHEpOwotCQlnb3RvIGVycl9xdWV1ZXM7Ci0JfQotCXR4cSA9IGF0aDVrX3R4cV9zZXR1cChzYywgQVI1S19UWF9RVUVVRV9EQVRBLCBBUjVLX1dNRV9BQ19CRSk7Ci0JaWYgKElTX0VSUih0eHEpKSB7Ci0JCUFUSDVLX0VSUihzYywgImNhbid0IHNldHVwIHhtaXQgcXVldWVcbiIpOwotCQlyZXQgPSBQVFJfRVJSKHR4cSk7Ci0JCWdvdG8gZXJyX3F1ZXVlczsKLQl9Ci0JdHhxID0gYXRoNWtfdHhxX3NldHVwKHNjLCBBUjVLX1RYX1FVRVVFX0RBVEEsIEFSNUtfV01FX0FDX0JLKTsKLQlpZiAoSVNfRVJSKHR4cSkpIHsKLQkJQVRINUtfRVJSKHNjLCAiY2FuJ3Qgc2V0dXAgeG1pdCBxdWV1ZVxuIik7Ci0JCXJldCA9IFBUUl9FUlIodHhxKTsKLQkJZ290byBlcnJfcXVldWVzOwotCX0KLQlody0+cXVldWVzID0gNDsKLQotCXRhc2tsZXRfaW5pdCgmc2MtPnJ4dHEsIGF0aDVrX3Rhc2tsZXRfcngsICh1bnNpZ25lZCBsb25nKXNjKTsKLQl0YXNrbGV0X2luaXQoJnNjLT50eHRxLCBhdGg1a190YXNrbGV0X3R4LCAodW5zaWduZWQgbG9uZylzYyk7Ci0JdGFza2xldF9pbml0KCZzYy0+Y2FsaWIsIGF0aDVrX3Rhc2tsZXRfY2FsaWJyYXRlLCAodW5zaWduZWQgbG9uZylzYyk7Ci0JdGFza2xldF9pbml0KCZzYy0+YmVhY29udHEsIGF0aDVrX3Rhc2tsZXRfYmVhY29uLCAodW5zaWduZWQgbG9uZylzYyk7Ci0JdGFza2xldF9pbml0KCZzYy0+YW5pX3Rhc2tsZXQsIGF0aDVrX3Rhc2tsZXRfYW5pLCAodW5zaWduZWQgbG9uZylzYyk7Ci0KLQlJTklUX1dPUksoJnNjLT5yZXNldF93b3JrLCBhdGg1a19yZXNldF93b3JrKTsKLQlJTklUX0RFTEFZRURfV09SSygmc2MtPnR4X2NvbXBsZXRlX3dvcmssIGF0aDVrX3R4X2NvbXBsZXRlX3BvbGxfd29yayk7Ci0KLQlyZXQgPSBhdGg1a19lZXByb21fcmVhZF9tYWMoYWgsIG1hYyk7Ci0JaWYgKHJldCkgewotCQlBVEg1S19FUlIoc2MsICJ1bmFibGUgdG8gcmVhZCBhZGRyZXNzIGZyb20gRUVQUk9NOiAweCUwNHhcbiIsCi0JCQlzYy0+cGRldi0+ZGV2aWNlKTsKLQkJZ290byBlcnJfcXVldWVzOwotCX0KLQotCVNFVF9JRUVFODAyMTFfUEVSTV9BRERSKGh3LCBtYWMpOwotCW1lbWNweSgmc2MtPmxsYWRkciwgbWFjLCBFVEhfQUxFTik7Ci0JLyogQWxsIE1BQyBhZGRyZXNzIGJpdHMgbWF0dGVyIGZvciBBQ0tzICovCi0JYXRoNWtfdXBkYXRlX2Jzc2lkX21hc2tfYW5kX29wbW9kZShzYywgTlVMTCk7Ci0KLQlyZWd1bGF0b3J5LT5jdXJyZW50X3JkID0gYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfZWVwcm9tLmVlX3JlZ2RvbWFpbjsKLQlyZXQgPSBhdGhfcmVnZF9pbml0KHJlZ3VsYXRvcnksIGh3LT53aXBoeSwgYXRoNWtfcmVnX25vdGlmaWVyKTsKLQlpZiAocmV0KSB7Ci0JCUFUSDVLX0VSUihzYywgImNhbid0IGluaXRpYWxpemUgcmVndWxhdG9yeSBzeXN0ZW1cbiIpOwotCQlnb3RvIGVycl9xdWV1ZXM7Ci0JfQotCi0JcmV0ID0gaWVlZTgwMjExX3JlZ2lzdGVyX2h3KGh3KTsKLQlpZiAocmV0KSB7Ci0JCUFUSDVLX0VSUihzYywgImNhbid0IHJlZ2lzdGVyIGllZWU4MDIxMSBod1xuIik7Ci0JCWdvdG8gZXJyX3F1ZXVlczsKLQl9Ci0KLQlpZiAoIWF0aF9pc193b3JsZF9yZWdkKHJlZ3VsYXRvcnkpKQotCQlyZWd1bGF0b3J5X2hpbnQoaHctPndpcGh5LCByZWd1bGF0b3J5LT5hbHBoYTIpOwotCi0JYXRoNWtfaW5pdF9sZWRzKHNjKTsKLQotCWF0aDVrX3N5c2ZzX3JlZ2lzdGVyKHNjKTsKLQotCXJldHVybiAwOwotZXJyX3F1ZXVlczoKLQlhdGg1a190eHFfcmVsZWFzZShzYyk7Ci1lcnJfYmhhbDoKLQlhdGg1a19od19yZWxlYXNlX3R4X3F1ZXVlKGFoLCBzYy0+YmhhbHEpOwotZXJyX2Rlc2M6Ci0JYXRoNWtfZGVzY19mcmVlKHNjLCBwZGV2KTsKLWVycjoKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZAotYXRoNWtfZGV0YWNoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKLXsKLQlzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjID0gaHctPnByaXY7Ci0KLQkvKgotCSAqIE5COiB0aGUgb3JkZXIgb2YgdGhlc2UgaXMgaW1wb3J0YW50OgotCSAqIG8gY2FsbCB0aGUgODAyLjExIGxheWVyIGJlZm9yZSBkZXRhY2hpbmcgYXRoNWtfaHcgdG8KLQkgKiAgIGVuc3VyZSBjYWxsYmFja3MgaW50byB0aGUgZHJpdmVyIHRvIGRlbGV0ZSBnbG9iYWwKLQkgKiAgIGtleSBjYWNoZSBlbnRyaWVzIGNhbiBiZSBoYW5kbGVkCi0JICogbyByZWNsYWltIHRoZSB0eCBxdWV1ZSBkYXRhIHN0cnVjdHVyZXMgYWZ0ZXIgY2FsbGluZwotCSAqICAgdGhlIDgwMi4xMSBsYXllciBhcyB3ZSdsbCBnZXQgY2FsbGVkIGJhY2sgdG8gcmVjbGFpbQotCSAqICAgbm9kZSBzdGF0ZSBhbmQgcG90ZW50aWFsbHkgd2FudCB0byB1c2UgdGhlbQotCSAqIG8gdG8gY2xlYW51cCB0aGUgdHggcXVldWVzIHRoZSBoYWwgaXMgY2FsbGVkLCBzbyBkZXRhY2gKLQkgKiAgIGl0IGxhc3QKLQkgKiBYWFg6ID8/PyBkZXRhY2ggYXRoNWtfaHcgPz8/Ci0JICogT3RoZXIgdGhhbiB0aGF0LCBpdCdzIHN0cmFpZ2h0Zm9yd2FyZC4uLgotCSAqLwotCWllZWU4MDIxMV91bnJlZ2lzdGVyX2h3KGh3KTsKLQlhdGg1a19kZXNjX2ZyZWUoc2MsIHBkZXYpOwotCWF0aDVrX3R4cV9yZWxlYXNlKHNjKTsKLQlhdGg1a19od19yZWxlYXNlX3R4X3F1ZXVlKHNjLT5haCwgc2MtPmJoYWxxKTsKLQlhdGg1a191bnJlZ2lzdGVyX2xlZHMoc2MpOwotCi0JYXRoNWtfc3lzZnNfdW5yZWdpc3RlcihzYyk7Ci0JLyoKLQkgKiBOQjogY2FuJ3QgcmVjbGFpbSB0aGVzZSB1bnRpbCBhZnRlciBpZWVlODAyMTFfaWZkZXRhY2gKLQkgKiByZXR1cm5zIGJlY2F1c2Ugd2UnbGwgZ2V0IGNhbGxlZCBiYWNrIHRvIHJlY2xhaW0gbm9kZQotCSAqIHN0YXRlIGFuZCBwb3RlbnRpYWxseSB3YW50IHRvIHVzZSB0aGVtLgotCSAqLwotfQotCi0vKioqKioqKioqKioqKioqKioqKipcCi0qIE1hYzgwMjExIGZ1bmN0aW9ucyAqCi1cKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyBpbnQKLWF0aDVrX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCBhdGg1a19zb2Z0YyAqc2MgPSBody0+cHJpdjsKLQl1MTYgcW51bSA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpOwotCi0JaWYgKFdBUk5fT04ocW51bSA+PSBzYy0+YWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfcXVldWVzLnFfdHhfbnVtKSkgewotCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZXR1cm4gYXRoNWtfdHhfcXVldWUoaHcsIHNrYiwgJnNjLT50eHFzW3FudW1dKTsKLX0KLQotc3RhdGljIGludCBhdGg1a19zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKLXsKLQlyZXR1cm4gYXRoNWtfaW5pdChody0+cHJpdik7Ci19Ci0KLXN0YXRpYyB2b2lkIGF0aDVrX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCi17Ci0JYXRoNWtfc3RvcF9odyhody0+cHJpdik7Ci19Ci0KLXN0YXRpYyBpbnQgYXRoNWtfYWRkX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKLXsKLQlzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjID0gaHctPnByaXY7Ci0JaW50IHJldDsKLQlzdHJ1Y3QgYXRoNWtfdmlmICphdmYgPSAodm9pZCAqKXZpZi0+ZHJ2X3ByaXY7Ci0KLQltdXRleF9sb2NrKCZzYy0+bG9jayk7Ci0KLQlpZiAoKHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCB8fAotCSAgICAgdmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKQotCSAgICAmJiAoc2MtPm51bV9hcF92aWZzICsgc2MtPm51bV9hZGhvY192aWZzKSA+PSBBVEhfQkNCVUYpIHsKLQkJcmV0ID0gLUVMTlJORzsKLQkJZ290byBlbmQ7Ci0JfQotCi0JLyogRG9uJ3QgYWxsb3cgb3RoZXIgaW50ZXJmYWNlcyBpZiBvbmUgYWQtaG9jIGlzIGNvbmZpZ3VyZWQuCi0JICogVE9ETzogRml4IHRoZSBwcm9ibGVtcyB3aXRoIGFkLWhvYyBhbmQgbXVsdGlwbGUgb3RoZXIgaW50ZXJmYWNlcy4KLQkgKiBXZSB3b3VsZCBuZWVkIHRvIG9wZXJhdGUgdGhlIEhXIGluIGFkLWhvYyBtb2RlIHRvIGFsbG93IFRTRiB1cGRhdGVzCi0JICogZm9yIHRoZSBJQlNTLCBidXQgdGhpcyBicmVha3Mgd2l0aCBhZGRpdGlvbmFsIEFQIG9yIFNUQSBpbnRlcmZhY2VzCi0JICogYXQgdGhlIG1vbWVudC4gKi8KLQlpZiAoc2MtPm51bV9hZGhvY192aWZzIHx8Ci0JICAgIChzYy0+bnZpZnMgJiYgdmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSkgewotCQlBVEg1S19FUlIoc2MsICJPbmx5IG9uZSBzaW5nbGUgYWQtaG9jIGludGVyZmFjZSBpcyBhbGxvd2VkLlxuIik7Ci0JCXJldCA9IC1FTE5STkc7Ci0JCWdvdG8gZW5kOwotCX0KLQotCXN3aXRjaCAodmlmLT50eXBlKSB7Ci0JY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKLQljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046Ci0JY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKLQljYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6Ci0JCWF2Zi0+b3Btb2RlID0gdmlmLT50eXBlOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXQgPSAtRU9QTk9UU1VQUDsKLQkJZ290byBlbmQ7Ci0JfQotCi0Jc2MtPm52aWZzKys7Ci0JQVRINUtfREJHKHNjLCBBVEg1S19ERUJVR19NT0RFLCAiYWRkIGludGVyZmFjZSBtb2RlICVkXG4iLCBhdmYtPm9wbW9kZSk7Ci0KLQkvKiBBc3NpZ24gdGhlIHZhcC9hZGhvYyB0byBhIGJlYWNvbiB4bWl0IHNsb3QuICovCi0JaWYgKChhdmYtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkgfHwKLQkgICAgKGF2Zi0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB8fAotCSAgICAoYXZmLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCkpIHsKLQkJaW50IHNsb3Q7Ci0KLQkJV0FSTl9PTihsaXN0X2VtcHR5KCZzYy0+YmNidWYpKTsKLQkJYXZmLT5iYnVmID0gbGlzdF9maXJzdF9lbnRyeSgmc2MtPmJjYnVmLCBzdHJ1Y3QgYXRoNWtfYnVmLAotCQkJCQkgICAgIGxpc3QpOwotCQlsaXN0X2RlbCgmYXZmLT5iYnVmLT5saXN0KTsKLQotCQlhdmYtPmJzbG90ID0gMDsKLQkJZm9yIChzbG90ID0gMDsgc2xvdCA8IEFUSF9CQ0JVRjsgc2xvdCsrKSB7Ci0JCQlpZiAoIXNjLT5ic2xvdFtzbG90XSkgewotCQkJCWF2Zi0+YnNsb3QgPSBzbG90OwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCUJVR19PTihzYy0+YnNsb3RbYXZmLT5ic2xvdF0gIT0gTlVMTCk7Ci0JCXNjLT5ic2xvdFthdmYtPmJzbG90XSA9IHZpZjsKLQkJaWYgKGF2Zi0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKQotCQkJc2MtPm51bV9hcF92aWZzKys7Ci0JCWVsc2UgaWYgKGF2Zi0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKQotCQkJc2MtPm51bV9hZGhvY192aWZzKys7Ci0JfQotCi0JLyogQW55IE1BQyBhZGRyZXNzIGlzIGZpbmUsIGFsbCBvdGhlcnMgYXJlIGluY2x1ZGVkIHRocm91Z2ggdGhlCi0JICogZmlsdGVyLgotCSAqLwotCW1lbWNweSgmc2MtPmxsYWRkciwgdmlmLT5hZGRyLCBFVEhfQUxFTik7Ci0JYXRoNWtfaHdfc2V0X2xsYWRkcihzYy0+YWgsIHZpZi0+YWRkcik7Ci0KLQltZW1jcHkoJmF2Zi0+bGxhZGRyLCB2aWYtPmFkZHIsIEVUSF9BTEVOKTsKLQotCWF0aDVrX21vZGVfc2V0dXAoc2MsIHZpZik7Ci0KLQlyZXQgPSAwOwotZW5kOgotCW11dGV4X3VubG9jaygmc2MtPmxvY2spOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1hdGg1a19yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKLXsKLQlzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjID0gaHctPnByaXY7Ci0Jc3RydWN0IGF0aDVrX3ZpZiAqYXZmID0gKHZvaWQgKil2aWYtPmRydl9wcml2OwotCXVuc2lnbmVkIGludCBpOwotCi0JbXV0ZXhfbG9jaygmc2MtPmxvY2spOwotCXNjLT5udmlmcy0tOwotCi0JaWYgKGF2Zi0+YmJ1ZikgewotCQlhdGg1a190eGJ1Zl9mcmVlX3NrYihzYywgYXZmLT5iYnVmKTsKLQkJbGlzdF9hZGRfdGFpbCgmYXZmLT5iYnVmLT5saXN0LCAmc2MtPmJjYnVmKTsKLQkJZm9yIChpID0gMDsgaSA8IEFUSF9CQ0JVRjsgaSsrKSB7Ci0JCQlpZiAoc2MtPmJzbG90W2ldID09IHZpZikgewotCQkJCXNjLT5ic2xvdFtpXSA9IE5VTEw7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJYXZmLT5iYnVmID0gTlVMTDsKLQl9Ci0JaWYgKGF2Zi0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKQotCQlzYy0+bnVtX2FwX3ZpZnMtLTsKLQllbHNlIGlmIChhdmYtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKLQkJc2MtPm51bV9hZGhvY192aWZzLS07Ci0KLQlhdGg1a191cGRhdGVfYnNzaWRfbWFza19hbmRfb3Btb2RlKHNjLCBOVUxMKTsKLQltdXRleF91bmxvY2soJnNjLT5sb2NrKTsKLX0KLQotLyoKLSAqIFRPRE86IFBoeSBkaXNhYmxlL2RpdmVyc2l0eSBldGMKLSAqLwotc3RhdGljIGludAotYXRoNWtfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgY2hhbmdlZCkKLXsKLQlzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjID0gaHctPnByaXY7Ci0Jc3RydWN0IGF0aDVrX2h3ICphaCA9IHNjLT5haDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmaHctPmNvbmY7Ci0JaW50IHJldCA9IDA7Ci0KLQltdXRleF9sb2NrKCZzYy0+bG9jayk7Ci0KLQlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9DSEFOTkVMKSB7Ci0JCXJldCA9IGF0aDVrX2NoYW5fc2V0KHNjLCBjb25mLT5jaGFubmVsKTsKLQkJaWYgKHJldCA8IDApCi0JCQlnb3RvIHVubG9jazsKLQl9Ci0KLQlpZiAoKGNoYW5nZWQgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUE9XRVIpICYmCi0JKHNjLT5wb3dlcl9sZXZlbCAhPSBjb25mLT5wb3dlcl9sZXZlbCkpIHsKLQkJc2MtPnBvd2VyX2xldmVsID0gY29uZi0+cG93ZXJfbGV2ZWw7Ci0KLQkJLyogSGFsZiBkQiBzdGVwcyAqLwotCQlhdGg1a19od19zZXRfdHhwb3dlcl9saW1pdChhaCwgKGNvbmYtPnBvd2VyX2xldmVsICogMikpOwotCX0KLQotCS8qIFRPRE86Ci0JICogMSkgTW92ZSB0aGlzIG9uIGNvbmZpZ19pbnRlcmZhY2UgYW5kIGhhbmRsZSBlYWNoIGNhc2UKLQkgKiBzZXBhcmF0ZWx5IGVnLiB3aGVuIHdlIGhhdmUgb25seSBvbmUgU1RBIHZpZiwgdXNlCi0JICogQVI1S19BTlRNT0RFX1NJTkdMRV9BUAotCSAqCi0JICogMikgQWxsb3cgdGhlIHVzZXIgdG8gY2hhbmdlIGFudGVubmEgbW9kZSBlZy4gd2hlbiBvbmx5Ci0JICogb25lIGFudGVubmEgaXMgcHJlc2VudAotCSAqCi0JICogMykgQWxsb3cgdGhlIHVzZXIgdG8gc2V0IGRlZmF1bHQvdHggYW50ZW5uYSB3aGVuIHBvc3NpYmxlCi0JICoKLQkgKiA0KSBEZWZhdWx0IG1vZGUgc2hvdWxkIGhhbmRsZSA5MCUgb2YgdGhlIGNhc2VzLCB0b2dldGhlcgotCSAqIHdpdGggZml4ZWQgYS9iIGFuZCBzaW5nbGUgQVAgbW9kZXMgd2Ugc2hvdWxkIGJlIGFibGUgdG8KLQkgKiBoYW5kbGUgOTklLiBTZWN0b3JlZCBtb2RlcyBhcmUgZXh0cmVtZSBjYXNlcyBhbmQgaSBzdGlsbAotCSAqIGhhdmVuJ3QgZm91bmQgYSB1c2FnZSBmb3IgdGhlbS4gSWYgd2UgZGVjaWRlIHRvIHN1cHBvcnQgdGhlbSwKLQkgKiB0aGVuIHdlIG11c3QgYWxsb3cgdGhlIHVzZXIgdG8gc2V0IGhvdyBtYW55IHR4IGFudGVubmFzIHdlCi0JICogaGF2ZSBhdmFpbGFibGUKLQkgKi8KLQlhdGg1a19od19zZXRfYW50ZW5uYV9tb2RlKGFoLCBhaC0+YWhfYW50X21vZGUpOwotCi11bmxvY2s6Ci0JbXV0ZXhfdW5sb2NrKCZzYy0+bG9jayk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHU2NCBhdGg1a19wcmVwYXJlX211bHRpY2FzdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkgICBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbWNfbGlzdCkKLXsKLQl1MzIgbWZpbHRbMl0sIHZhbDsKLQl1OCBwb3M7Ci0Jc3RydWN0IG5ldGRldl9od19hZGRyICpoYTsKLQotCW1maWx0WzBdID0gMDsKLQltZmlsdFsxXSA9IDE7Ci0KLQluZXRkZXZfaHdfYWRkcl9saXN0X2Zvcl9lYWNoKGhhLCBtY19saXN0KSB7Ci0JCS8qIGNhbGN1bGF0ZSBYT1Igb2YgZWlnaHQgNi1iaXQgdmFsdWVzICovCi0JCXZhbCA9IGdldF91bmFsaWduZWRfbGUzMihoYS0+YWRkciArIDApOwotCQlwb3MgPSAodmFsID4+IDE4KSBeICh2YWwgPj4gMTIpIF4gKHZhbCA+PiA2KSBeIHZhbDsKLQkJdmFsID0gZ2V0X3VuYWxpZ25lZF9sZTMyKGhhLT5hZGRyICsgMyk7Ci0JCXBvcyBePSAodmFsID4+IDE4KSBeICh2YWwgPj4gMTIpIF4gKHZhbCA+PiA2KSBeIHZhbDsKLQkJcG9zICY9IDB4M2Y7Ci0JCW1maWx0W3BvcyAvIDMyXSB8PSAoMSA8PCAocG9zICUgMzIpKTsKLQkJLyogWFhYOiB3ZSBtaWdodCBiZSBhYmxlIHRvIGp1c3QgZG8gdGhpcyBpbnN0ZWFkLAotCQkqIGJ1dCBub3Qgc3VyZSwgbmVlZHMgdGVzdGluZywgaWYgd2UgZG8gdXNlIHRoaXMgd2UnZAotCQkqIG5lZXQgdG8gaW5mb3JtIGJlbG93IHRvIG5vdCByZXNldCB0aGUgbWNhc3QgKi8KLQkJLyogYXRoNWtfaHdfc2V0X21jYXN0X2ZpbHRlcmluZGV4KGFoLAotCQkgKiAgICAgIGhhLT5hZGRyWzVdKTsgKi8KLQl9Ci0KLQlyZXR1cm4gKCh1NjQpKG1maWx0WzFdKSA8PCAzMikgfCBtZmlsdFswXTsKLX0KLQotc3RhdGljIGJvb2wgYXRoX2FueV92aWZfYXNzb2Moc3RydWN0IGF0aDVrX3NvZnRjICpzYykKLXsKLQlzdHJ1Y3QgYXRoX3ZpZl9pdGVyX2RhdGEgaXRlcl9kYXRhOwotCWl0ZXJfZGF0YS5od19tYWNhZGRyID0gTlVMTDsKLQlpdGVyX2RhdGEuYW55X2Fzc29jID0gZmFsc2U7Ci0JaXRlcl9kYXRhLm5lZWRfc2V0X2h3X2FkZHIgPSBmYWxzZTsKLQlpdGVyX2RhdGEuZm91bmRfYWN0aXZlID0gdHJ1ZTsKLQotCWllZWU4MDIxMV9pdGVyYXRlX2FjdGl2ZV9pbnRlcmZhY2VzX2F0b21pYyhzYy0+aHcsIGF0aF92aWZfaXRlciwKLQkJCQkJCSAgICZpdGVyX2RhdGEpOwotCXJldHVybiBpdGVyX2RhdGEuYW55X2Fzc29jOwotfQotCi0jZGVmaW5lIFNVUFBPUlRFRF9GSUZfRkxBR1MgXAotCUZJRl9QUk9NSVNDX0lOX0JTUyB8ICBGSUZfQUxMTVVMVEkgfCBGSUZfRkNTRkFJTCB8IFwKLQlGSUZfUExDUEZBSUwgfCBGSUZfQ09OVFJPTCB8IEZJRl9PVEhFUl9CU1MgfCBcCi0JRklGX0JDTl9QUkJSRVNQX1BST01JU0MKLS8qCi0gKiBvIGFsd2F5cyBhY2NlcHQgdW5pY2FzdCwgYnJvYWRjYXN0LCBhbmQgbXVsdGljYXN0IHRyYWZmaWMKLSAqIG8gbXVsdGljYXN0IHRyYWZmaWMgZm9yIGFsbCBCU1NJRHMgd2lsbCBiZSBlbmFibGVkIGlmIG1hYzgwMjExCi0gKiAgIHNheXMgaXQgc2hvdWxkIGJlCi0gKiBvIG1haW50YWluIGN1cnJlbnQgc3RhdGUgb2YgcGh5IG9mZG0gb3IgcGh5IGNjayBlcnJvciByZWNlcHRpb24uCi0gKiAgIElmIHRoZSBoYXJkd2FyZSBkZXRlY3RzIGFueSBvZiB0aGVzZSB0eXBlIG9mIGVycm9ycyB0aGVuCi0gKiAgIGF0aDVrX2h3X2dldF9yeF9maWx0ZXIoKSB3aWxsIHBhc3MgdG8gdXMgdGhlIHJlc3BlY3RpdmUKLSAqICAgaGFyZHdhcmUgZmlsdGVycyB0byBiZSBhYmxlIHRvIHJlY2VpdmUgdGhlc2UgdHlwZSBvZiBmcmFtZXMuCi0gKiBvIHByb2JlIHJlcXVlc3QgZnJhbWVzIGFyZSBhY2NlcHRlZCBvbmx5IHdoZW4gb3BlcmF0aW5nIGluCi0gKiAgIGhvc3RhcCwgYWRob2MsIG9yIG1vbml0b3IgbW9kZXMKLSAqIG8gZW5hYmxlIHByb21pc2N1b3VzIG1vZGUgYWNjb3JkaW5nIHRvIHRoZSBpbnRlcmZhY2Ugc3RhdGUKLSAqIG8gYWNjZXB0IGJlYWNvbnM6Ci0gKiAgIC0gd2hlbiBvcGVyYXRpbmcgaW4gYWRob2MgbW9kZSBzbyB0aGUgODAyLjExIGxheWVyIGNyZWF0ZXMKLSAqICAgICBub2RlIHRhYmxlIGVudHJpZXMgZm9yIHBlZXJzLAotICogICAtIHdoZW4gb3BlcmF0aW5nIGluIHN0YXRpb24gbW9kZSBmb3IgY29sbGVjdGluZyByc3NpIGRhdGEgd2hlbgotICogICAgIHRoZSBzdGF0aW9uIGlzIG90aGVyd2lzZSBxdWlldCwgb3IKLSAqICAgLSB3aGVuIHNjYW5uaW5nCi0gKi8KLXN0YXRpYyB2b2lkIGF0aDVrX2NvbmZpZ3VyZV9maWx0ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCXVuc2lnbmVkIGludCBjaGFuZ2VkX2ZsYWdzLAotCQl1bnNpZ25lZCBpbnQgKm5ld19mbGFncywKLQkJdTY0IG11bHRpY2FzdCkKLXsKLQlzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjID0gaHctPnByaXY7Ci0Jc3RydWN0IGF0aDVrX2h3ICphaCA9IHNjLT5haDsKLQl1MzIgbWZpbHRbMl0sIHJmaWx0OwotCi0JbXV0ZXhfbG9jaygmc2MtPmxvY2spOwotCi0JbWZpbHRbMF0gPSBtdWx0aWNhc3Q7Ci0JbWZpbHRbMV0gPSBtdWx0aWNhc3QgPj4gMzI7Ci0KLQkvKiBPbmx5IGRlYWwgd2l0aCBzdXBwb3J0ZWQgZmxhZ3MgKi8KLQljaGFuZ2VkX2ZsYWdzICY9IFNVUFBPUlRFRF9GSUZfRkxBR1M7Ci0JKm5ld19mbGFncyAmPSBTVVBQT1JURURfRklGX0ZMQUdTOwotCi0JLyogSWYgSFcgZGV0ZWN0cyBhbnkgcGh5IG9yIHJhZGFyIGVycm9ycywgbGVhdmUgdGhvc2UgZmlsdGVycyBvbi4KLQkgKiBBbHNvLCBhbHdheXMgZW5hYmxlIFVuaWNhc3QsIEJyb2FkY2FzdHMgYW5kIE11bHRpY2FzdAotCSAqIFhYWDogbW92ZSB1bmljYXN0LCBic3NpZCBicm9hZGNhc3RzIGFuZCBtdWx0aWNhc3QgdG8gbWFjODAyMTEgKi8KLQlyZmlsdCA9IChhdGg1a19od19nZXRfcnhfZmlsdGVyKGFoKSAmIChBUjVLX1JYX0ZJTFRFUl9QSFlFUlIpKSB8Ci0JCShBUjVLX1JYX0ZJTFRFUl9VQ0FTVCB8IEFSNUtfUlhfRklMVEVSX0JDQVNUIHwKLQkJQVI1S19SWF9GSUxURVJfTUNBU1QpOwotCi0JaWYgKGNoYW5nZWRfZmxhZ3MgJiAoRklGX1BST01JU0NfSU5fQlNTIHwgRklGX09USEVSX0JTUykpIHsKLQkJaWYgKCpuZXdfZmxhZ3MgJiBGSUZfUFJPTUlTQ19JTl9CU1MpIHsKLQkJCV9fc2V0X2JpdChBVEhfU1RBVF9QUk9NSVNDLCBzYy0+c3RhdHVzKTsKLQkJfSBlbHNlIHsKLQkJCV9fY2xlYXJfYml0KEFUSF9TVEFUX1BST01JU0MsIHNjLT5zdGF0dXMpOwotCQl9Ci0JfQotCi0JaWYgKHRlc3RfYml0KEFUSF9TVEFUX1BST01JU0MsIHNjLT5zdGF0dXMpKQotCQlyZmlsdCB8PSBBUjVLX1JYX0ZJTFRFUl9QUk9NOwotCi0JLyogTm90ZSwgQVI1S19SWF9GSUxURVJfTUNBU1QgaXMgYWxyZWFkeSBlbmFibGVkICovCi0JaWYgKCpuZXdfZmxhZ3MgJiBGSUZfQUxMTVVMVEkpIHsKLQkJbWZpbHRbMF0gPSAgfjA7Ci0JCW1maWx0WzFdID0gIH4wOwotCX0KLQotCS8qIFRoaXMgaXMgdGhlIGJlc3Qgd2UgY2FuIGRvICovCi0JaWYgKCpuZXdfZmxhZ3MgJiAoRklGX0ZDU0ZBSUwgfCBGSUZfUExDUEZBSUwpKQotCQlyZmlsdCB8PSBBUjVLX1JYX0ZJTFRFUl9QSFlFUlI7Ci0KLQkvKiBGSUZfQkNOX1BSQlJFU1BfUFJPTUlTQyByZWFsbHkgbWVhbnMgdG8gZW5hYmxlIGJlYWNvbnMKLQkqIGFuZCBwcm9iZXMgZm9yIGFueSBCU1NJRCAqLwotCWlmICgoKm5ld19mbGFncyAmIEZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDKSB8fCAoc2MtPm52aWZzID4gMSkpCi0JCXJmaWx0IHw9IEFSNUtfUlhfRklMVEVSX0JFQUNPTjsKLQotCS8qIEZJRl9DT05UUk9MIGRvYyBzYXlzIHRoYXQgaWYgRklGX1BST01JU0NfSU5fQlNTIGlzIG5vdAotCSAqIHNldCB3ZSBzaG91bGQgb25seSBwYXNzIG9uIGNvbnRyb2wgZnJhbWVzIGZvciB0aGlzCi0JICogc3RhdGlvbi4gVGhpcyBuZWVkcyB0ZXN0aW5nLiBJIGJlbGlldmUgcmlnaHQgbm93IHRoaXMKLQkgKiBlbmFibGVzICphbGwqIGNvbnRyb2wgZnJhbWVzLCB3aGljaCBpcyBPSy4uIGJ1dAotCSAqIGJ1dCB3ZSBzaG91bGQgc2VlIGlmIHdlIGNhbiBpbXByb3ZlIG9uIGdyYW51bGFyaXR5ICovCi0JaWYgKCpuZXdfZmxhZ3MgJiBGSUZfQ09OVFJPTCkKLQkJcmZpbHQgfD0gQVI1S19SWF9GSUxURVJfQ09OVFJPTDsKLQotCS8qIEFkZGl0aW9uYWwgc2V0dGluZ3MgcGVyIG1vZGUgLS0gdGhpcyBpcyBwZXIgYXRoNWsgKi8KLQotCS8qIFhYWCBtb3ZlIHRoZXNlIHRvIG1hYzgwMjExLCBhbmQgYWRkIGEgYmVhY29uIElGRiBmbGFnIHRvIG1hYzgwMjExICovCi0KLQlzd2l0Y2ggKHNjLT5vcG1vZGUpIHsKLQljYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6Ci0JCXJmaWx0IHw9IEFSNUtfUlhfRklMVEVSX0NPTlRST0wgfAotCQkJIEFSNUtfUlhfRklMVEVSX0JFQUNPTiB8Ci0JCQkgQVI1S19SWF9GSUxURVJfUFJPQkVSRVEgfAotCQkJIEFSNUtfUlhfRklMVEVSX1BST007Ci0JCWJyZWFrOwotCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6Ci0JY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKLQkJcmZpbHQgfD0gQVI1S19SWF9GSUxURVJfUFJPQkVSRVEgfAotCQkJIEFSNUtfUlhfRklMVEVSX0JFQUNPTjsKLQkJYnJlYWs7Ci0JY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgotCQlpZiAoc2MtPmFzc29jKQotCQkJcmZpbHQgfD0gQVI1S19SWF9GSUxURVJfQkVBQ09OOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLQotCS8qIFNldCBmaWx0ZXJzICovCi0JYXRoNWtfaHdfc2V0X3J4X2ZpbHRlcihhaCwgcmZpbHQpOwotCi0JLyogU2V0IG11bHRpY2FzdCBiaXRzICovCi0JYXRoNWtfaHdfc2V0X21jYXN0X2ZpbHRlcihhaCwgbWZpbHRbMF0sIG1maWx0WzFdKTsKLQkvKiBTZXQgdGhlIGNhY2hlZCBodyBmaWx0ZXIgZmxhZ3MsIHRoaXMgd2lsbCBsYXRlciBhY3R1YWxseQotCSAqIGJlIHNldCBpbiBIVyAqLwotCXNjLT5maWx0ZXJfZmxhZ3MgPSByZmlsdDsKLQotCW11dGV4X3VubG9jaygmc2MtPmxvY2spOwotfQotCi1zdGF0aWMgaW50Ci1hdGg1a19zZXRfa2V5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBlbnVtIHNldF9rZXlfY21kIGNtZCwKLQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAotCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSkKLXsKLQlzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjID0gaHctPnByaXY7Ci0Jc3RydWN0IGF0aDVrX2h3ICphaCA9IHNjLT5haDsKLQlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoNWtfaHdfY29tbW9uKGFoKTsKLQlpbnQgcmV0ID0gMDsKLQotCWlmIChtb2RwYXJhbV9ub2h3Y3J5cHQpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQotCXN3aXRjaCAoa2V5LT5jaXBoZXIpIHsKLQljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDQwOgotCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfV0VQMTA0OgotCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfVEtJUDoKLQkJYnJlYWs7Ci0JY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9DQ01QOgotCQlpZiAoY29tbW9uLT5jcnlwdF9jYXBzICYgQVRIX0NSWVBUX0NBUF9DSVBIRVJfQUVTQ0NNKQotCQkJYnJlYWs7Ci0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQlkZWZhdWx0OgotCQlXQVJOX09OKDEpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltdXRleF9sb2NrKCZzYy0+bG9jayk7Ci0KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgU0VUX0tFWToKLQkJcmV0ID0gYXRoX2tleV9jb25maWcoY29tbW9uLCB2aWYsIHN0YSwga2V5KTsKLQkJaWYgKHJldCA+PSAwKSB7Ci0JCQlrZXktPmh3X2tleV9pZHggPSByZXQ7Ci0JCQkvKiBwdXNoIElWIGFuZCBNaWNoYWVsIE1JQyBnZW5lcmF0aW9uIHRvIHN0YWNrICovCi0JCQlrZXktPmZsYWdzIHw9IElFRUU4MDIxMV9LRVlfRkxBR19HRU5FUkFURV9JVjsKLQkJCWlmIChrZXktPmNpcGhlciA9PSBXTEFOX0NJUEhFUl9TVUlURV9US0lQKQotCQkJCWtleS0+ZmxhZ3MgfD0gSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX01NSUM7Ci0JCQlpZiAoa2V5LT5jaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfQ0NNUCkKLQkJCQlrZXktPmZsYWdzIHw9IElFRUU4MDIxMV9LRVlfRkxBR19TV19NR01UOwotCQkJcmV0ID0gMDsKLQkJfQotCQlicmVhazsKLQljYXNlIERJU0FCTEVfS0VZOgotCQlhdGhfa2V5X2RlbGV0ZShjb21tb24sIGtleSk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldCA9IC1FSU5WQUw7Ci0JfQotCi0JbW1pb3diKCk7Ci0JbXV0ZXhfdW5sb2NrKCZzYy0+bG9jayk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludAotYXRoNWtfZ2V0X3N0YXRzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQlzdHJ1Y3QgaWVlZTgwMjExX2xvd19sZXZlbF9zdGF0cyAqc3RhdHMpCi17Ci0Jc3RydWN0IGF0aDVrX3NvZnRjICpzYyA9IGh3LT5wcml2OwotCi0JLyogRm9yY2UgdXBkYXRlICovCi0JYXRoNWtfaHdfdXBkYXRlX21pYl9jb3VudGVycyhzYy0+YWgpOwotCi0Jc3RhdHMtPmRvdDExQUNLRmFpbHVyZUNvdW50ID0gc2MtPnN0YXRzLmFja19mYWlsOwotCXN0YXRzLT5kb3QxMVJUU0ZhaWx1cmVDb3VudCA9IHNjLT5zdGF0cy5ydHNfZmFpbDsKLQlzdGF0cy0+ZG90MTFSVFNTdWNjZXNzQ291bnQgPSBzYy0+c3RhdHMucnRzX29rOwotCXN0YXRzLT5kb3QxMUZDU0Vycm9yQ291bnQgPSBzYy0+c3RhdHMuZmNzX2Vycm9yOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYXRoNWtfZ2V0X3N1cnZleShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgaW50IGlkeCwKLQkJc3RydWN0IHN1cnZleV9pbmZvICpzdXJ2ZXkpCi17Ci0Jc3RydWN0IGF0aDVrX3NvZnRjICpzYyA9IGh3LT5wcml2OwotCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZody0+Y29uZjsKLQotCSBpZiAoaWR4ICE9IDApCi0JCXJldHVybiAtRU5PRU5UOwotCi0Jc3VydmV5LT5jaGFubmVsID0gY29uZi0+Y2hhbm5lbDsKLQlzdXJ2ZXktPmZpbGxlZCA9IFNVUlZFWV9JTkZPX05PSVNFX0RCTTsKLQlzdXJ2ZXktPm5vaXNlID0gc2MtPmFoLT5haF9ub2lzZV9mbG9vcjsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdTY0Ci1hdGg1a19nZXRfdHNmKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQotewotCXN0cnVjdCBhdGg1a19zb2Z0YyAqc2MgPSBody0+cHJpdjsKLQotCXJldHVybiBhdGg1a19od19nZXRfdHNmNjQoc2MtPmFoKTsKLX0KLQotc3RhdGljIHZvaWQKLWF0aDVrX3NldF90c2Yoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU2NCB0c2YpCi17Ci0Jc3RydWN0IGF0aDVrX3NvZnRjICpzYyA9IGh3LT5wcml2OwotCi0JYXRoNWtfaHdfc2V0X3RzZjY0KHNjLT5haCwgdHNmKTsKLX0KLQotc3RhdGljIHZvaWQKLWF0aDVrX3Jlc2V0X3RzZihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKLXsKLQlzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjID0gaHctPnByaXY7Ci0KLQkvKgotCSAqIGluIElCU1MgbW9kZSB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgYmVhY29uIHRpbWVycyB0b28uCi0JICogdGhpcyB3aWxsIGFsc28gcmVzZXQgdGhlIFRTRiBpZiB3ZSBjYWxsIGl0IHdpdGggMAotCSAqLwotCWlmIChzYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKQotCQlhdGg1a19iZWFjb25fdXBkYXRlX3RpbWVycyhzYywgMCk7Ci0JZWxzZQotCQlhdGg1a19od19yZXNldF90c2Yoc2MtPmFoKTsKLX0KLQotc3RhdGljIHZvaWQKLXNldF9iZWFjb25fZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBib29sIGVuYWJsZSkKLXsKLQlzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjID0gaHctPnByaXY7Ci0Jc3RydWN0IGF0aDVrX2h3ICphaCA9IHNjLT5haDsKLQl1MzIgcmZpbHQ7Ci0JcmZpbHQgPSBhdGg1a19od19nZXRfcnhfZmlsdGVyKGFoKTsKLQlpZiAoZW5hYmxlKQotCQlyZmlsdCB8PSBBUjVLX1JYX0ZJTFRFUl9CRUFDT047Ci0JZWxzZQotCQlyZmlsdCAmPSB+QVI1S19SWF9GSUxURVJfQkVBQ09OOwotCWF0aDVrX2h3X3NldF9yeF9maWx0ZXIoYWgsIHJmaWx0KTsKLQlzYy0+ZmlsdGVyX2ZsYWdzID0gcmZpbHQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGF0aDVrX2Jzc19pbmZvX2NoYW5nZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCi0JCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmJzc19jb25mLAotCQkJCSAgICB1MzIgY2hhbmdlcykKLXsKLQlzdHJ1Y3QgYXRoNWtfdmlmICphdmYgPSAodm9pZCAqKXZpZi0+ZHJ2X3ByaXY7Ci0Jc3RydWN0IGF0aDVrX3NvZnRjICpzYyA9IGh3LT5wcml2OwotCXN0cnVjdCBhdGg1a19odyAqYWggPSBzYy0+YWg7Ci0Jc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDVrX2h3X2NvbW1vbihhaCk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCW11dGV4X2xvY2soJnNjLT5sb2NrKTsKLQotCWlmIChjaGFuZ2VzICYgQlNTX0NIQU5HRURfQlNTSUQpIHsKLQkJLyogQ2FjaGUgZm9yIGxhdGVyIHVzZSBkdXJpbmcgcmVzZXRzICovCi0JCW1lbWNweShjb21tb24tPmN1cmJzc2lkLCBic3NfY29uZi0+YnNzaWQsIEVUSF9BTEVOKTsKLQkJY29tbW9uLT5jdXJhaWQgPSAwOwotCQlhdGg1a19od19zZXRfYnNzaWQoYWgpOwotCQltbWlvd2IoKTsKLQl9Ci0KLQlpZiAoY2hhbmdlcyAmIEJTU19DSEFOR0VEX0JFQUNPTl9JTlQpCi0JCXNjLT5iaW50dmFsID0gYnNzX2NvbmYtPmJlYWNvbl9pbnQ7Ci0KLQlpZiAoY2hhbmdlcyAmIEJTU19DSEFOR0VEX0FTU09DKSB7Ci0JCWF2Zi0+YXNzb2MgPSBic3NfY29uZi0+YXNzb2M7Ci0JCWlmIChic3NfY29uZi0+YXNzb2MpCi0JCQlzYy0+YXNzb2MgPSBic3NfY29uZi0+YXNzb2M7Ci0JCWVsc2UKLQkJCXNjLT5hc3NvYyA9IGF0aF9hbnlfdmlmX2Fzc29jKHNjKTsKLQotCQlpZiAoc2MtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQotCQkJc2V0X2JlYWNvbl9maWx0ZXIoaHcsIHNjLT5hc3NvYyk7Ci0JCWF0aDVrX2h3X3NldF9sZWRzdGF0ZShzYy0+YWgsIHNjLT5hc3NvYyA/Ci0JCQlBUjVLX0xFRF9BU1NPQyA6IEFSNUtfTEVEX0lOSVQpOwotCQlpZiAoYnNzX2NvbmYtPmFzc29jKSB7Ci0JCQlBVEg1S19EQkcoc2MsIEFUSDVLX0RFQlVHX0FOWSwKLQkJCQkgICJCc3MgSW5mbyBBU1NPQyAlZCwgYnNzaWQ6ICVwTVxuIiwKLQkJCQkgIGJzc19jb25mLT5haWQsIGNvbW1vbi0+Y3VyYnNzaWQpOwotCQkJY29tbW9uLT5jdXJhaWQgPSBic3NfY29uZi0+YWlkOwotCQkJYXRoNWtfaHdfc2V0X2Jzc2lkKGFoKTsKLQkJCS8qIE9uY2UgQU5JIGlzIGF2YWlsYWJsZSB5b3Ugd291bGQgc3RhcnQgaXQgaGVyZSAqLwotCQl9Ci0JfQotCi0JaWYgKGNoYW5nZXMgJiBCU1NfQ0hBTkdFRF9CRUFDT04pIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnNjLT5ibG9jaywgZmxhZ3MpOwotCQlhdGg1a19iZWFjb25fdXBkYXRlKGh3LCB2aWYpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYy0+YmxvY2ssIGZsYWdzKTsKLQl9Ci0KLQlpZiAoY2hhbmdlcyAmIEJTU19DSEFOR0VEX0JFQUNPTl9FTkFCTEVEKQotCQlzYy0+ZW5hYmxlX2JlYWNvbiA9IGJzc19jb25mLT5lbmFibGVfYmVhY29uOwotCi0JaWYgKGNoYW5nZXMgJiAoQlNTX0NIQU5HRURfQkVBQ09OIHwgQlNTX0NIQU5HRURfQkVBQ09OX0VOQUJMRUQgfAotCQkgICAgICAgQlNTX0NIQU5HRURfQkVBQ09OX0lOVCkpCi0JCWF0aDVrX2JlYWNvbl9jb25maWcoc2MpOwotCi0JbXV0ZXhfdW5sb2NrKCZzYy0+bG9jayk7Ci19Ci0KLXN0YXRpYyB2b2lkIGF0aDVrX3N3X3NjYW5fc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCi17Ci0Jc3RydWN0IGF0aDVrX3NvZnRjICpzYyA9IGh3LT5wcml2OwotCWlmICghc2MtPmFzc29jKQotCQlhdGg1a19od19zZXRfbGVkc3RhdGUoc2MtPmFoLCBBUjVLX0xFRF9TQ0FOKTsKLX0KLQotc3RhdGljIHZvaWQgYXRoNWtfc3dfc2Nhbl9jb21wbGV0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKLXsKLQlzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjID0gaHctPnByaXY7Ci0JYXRoNWtfaHdfc2V0X2xlZHN0YXRlKHNjLT5haCwgc2MtPmFzc29jID8KLQkJQVI1S19MRURfQVNTT0MgOiBBUjVLX0xFRF9JTklUKTsKLX0KLQotLyoqCi0gKiBhdGg1a19zZXRfY292ZXJhZ2VfY2xhc3MgLSBTZXQgSUVFRSA4MDIuMTEgY292ZXJhZ2UgY2xhc3MKLSAqCi0gKiBAaHc6IHN0cnVjdCBpZWVlODAyMTFfaHcgcG9pbnRlcgotICogQGNvdmVyYWdlX2NsYXNzOiBJRUVFIDgwMi4xMSBjb3ZlcmFnZSBjbGFzcyBudW1iZXIKLSAqCi0gKiBNYWM4MDIxMSBjYWxsYmFjay4gU2V0cyBzbG90IHRpbWUsIEFDSyB0aW1lb3V0IGFuZCBDVFMgdGltZW91dCBmb3IgZ2l2ZW4KLSAqIGNvdmVyYWdlIGNsYXNzLiBUaGUgdmFsdWVzIGFyZSBwZXJzaXN0ZW50LCB0aGV5IGFyZSByZXN0b3JlZCBhZnRlciBkZXZpY2UKLSAqIHJlc2V0LgotICovCi1zdGF0aWMgdm9pZCBhdGg1a19zZXRfY292ZXJhZ2VfY2xhc3Moc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGNvdmVyYWdlX2NsYXNzKQotewotCXN0cnVjdCBhdGg1a19zb2Z0YyAqc2MgPSBody0+cHJpdjsKLQotCW11dGV4X2xvY2soJnNjLT5sb2NrKTsKLQlhdGg1a19od19zZXRfY292ZXJhZ2VfY2xhc3Moc2MtPmFoLCBjb3ZlcmFnZV9jbGFzcyk7Ci0JbXV0ZXhfdW5sb2NrKCZzYy0+bG9jayk7Ci19Ci0KLXN0YXRpYyBpbnQgYXRoNWtfY29uZl90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTE2IHF1ZXVlLAotCQkJIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfcGFyYW1zICpwYXJhbXMpCi17Ci0Jc3RydWN0IGF0aDVrX3NvZnRjICpzYyA9IGh3LT5wcml2OwotCXN0cnVjdCBhdGg1a19odyAqYWggPSBzYy0+YWg7Ci0Jc3RydWN0IGF0aDVrX3R4cV9pbmZvIHFpOwotCWludCByZXQgPSAwOwotCi0JaWYgKHF1ZXVlID49IGFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX3F1ZXVlcy5xX3R4X251bSkKLQkJcmV0dXJuIDA7Ci0KLQltdXRleF9sb2NrKCZzYy0+bG9jayk7Ci0KLQlhdGg1a19od19nZXRfdHhfcXVldWVwcm9wcyhhaCwgcXVldWUsICZxaSk7Ci0KLQlxaS50cWlfYWlmcyA9IHBhcmFtcy0+YWlmczsKLQlxaS50cWlfY3dfbWluID0gcGFyYW1zLT5jd19taW47Ci0JcWkudHFpX2N3X21heCA9IHBhcmFtcy0+Y3dfbWF4OwotCXFpLnRxaV9idXJzdF90aW1lID0gcGFyYW1zLT50eG9wOwotCi0JQVRINUtfREJHKHNjLCBBVEg1S19ERUJVR19BTlksCi0JCSAgIkNvbmZpZ3VyZSB0eCBbcXVldWUgJWRdLCAgIgotCQkgICJhaWZzOiAlZCwgY3dfbWluOiAlZCwgY3dfbWF4OiAlZCwgdHhvcDogJWRcbiIsCi0JCSAgcXVldWUsIHBhcmFtcy0+YWlmcywgcGFyYW1zLT5jd19taW4sCi0JCSAgcGFyYW1zLT5jd19tYXgsIHBhcmFtcy0+dHhvcCk7Ci0KLQlpZiAoYXRoNWtfaHdfc2V0X3R4X3F1ZXVlcHJvcHMoYWgsIHF1ZXVlLCAmcWkpKSB7Ci0JCUFUSDVLX0VSUihzYywKLQkJCSAgIlVuYWJsZSB0byB1cGRhdGUgaGFyZHdhcmUgcXVldWUgJXUhXG4iLCBxdWV1ZSk7Ci0JCXJldCA9IC1FSU87Ci0JfSBlbHNlCi0JCWF0aDVrX2h3X3Jlc2V0X3R4X3F1ZXVlKGFoLCBxdWV1ZSk7Ci0KLQltdXRleF91bmxvY2soJnNjLT5sb2NrKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX29wcyBhdGg1a19od19vcHMgPSB7Ci0JLnR4IAkJPSBhdGg1a190eCwKLQkuc3RhcnQgCQk9IGF0aDVrX3N0YXJ0LAotCS5zdG9wIAkJPSBhdGg1a19zdG9wLAotCS5hZGRfaW50ZXJmYWNlIAk9IGF0aDVrX2FkZF9pbnRlcmZhY2UsCi0JLnJlbW92ZV9pbnRlcmZhY2UgPSBhdGg1a19yZW1vdmVfaW50ZXJmYWNlLAotCS5jb25maWcgCT0gYXRoNWtfY29uZmlnLAotCS5wcmVwYXJlX211bHRpY2FzdCA9IGF0aDVrX3ByZXBhcmVfbXVsdGljYXN0LAotCS5jb25maWd1cmVfZmlsdGVyID0gYXRoNWtfY29uZmlndXJlX2ZpbHRlciwKLQkuc2V0X2tleSAJPSBhdGg1a19zZXRfa2V5LAotCS5nZXRfc3RhdHMgCT0gYXRoNWtfZ2V0X3N0YXRzLAotCS5nZXRfc3VydmV5CT0gYXRoNWtfZ2V0X3N1cnZleSwKLQkuY29uZl90eAk9IGF0aDVrX2NvbmZfdHgsCi0JLmdldF90c2YgCT0gYXRoNWtfZ2V0X3RzZiwKLQkuc2V0X3RzZiAJPSBhdGg1a19zZXRfdHNmLAotCS5yZXNldF90c2YgCT0gYXRoNWtfcmVzZXRfdHNmLAotCS5ic3NfaW5mb19jaGFuZ2VkID0gYXRoNWtfYnNzX2luZm9fY2hhbmdlZCwKLQkuc3dfc2Nhbl9zdGFydAk9IGF0aDVrX3N3X3NjYW5fc3RhcnQsCi0JLnN3X3NjYW5fY29tcGxldGUgPSBhdGg1a19zd19zY2FuX2NvbXBsZXRlLAotCS5zZXRfY292ZXJhZ2VfY2xhc3MgPSBhdGg1a19zZXRfY292ZXJhZ2VfY2xhc3MsCi19OwotCi0vKioqKioqKioqKioqKioqKioqKipcCi0qIFBDSSBJbml0aWFsaXphdGlvbiAqCi1cKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyBpbnQgX19kZXZpbml0Ci1hdGg1a19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCi0JCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKLXsKLQl2b2lkIF9faW9tZW0gKm1lbTsKLQlzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjOworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gc2MtPmh3OwogCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb247Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CiAJaW50IHJldDsKLQl1OCBjc3o7Ci0KLQkvKgotCSAqIEwwcyBuZWVkcyB0byBiZSBkaXNhYmxlZCBvbiBhbGwgYXRoNWsgY2FyZHMuCi0JICoKLQkgKiBGb3IgZGlzdHJpYnV0aW9ucyBzaGlwcGluZyB3aXRoIENPTkZJR19QQ0lFQVNQTSAodGhpcyB3aWxsIGJlIGVuYWJsZWQKLQkgKiBieSBkZWZhdWx0IGluIHRoZSBmdXR1cmUgaW4gMi42LjM2KSB0aGlzIHdpbGwgYWxzbyBtZWFuIGJvdGggTDEgYW5kCi0JICogTDBzIHdpbGwgYmUgZGlzYWJsZWQgd2hlbiBhIHByZSAxLjEgUENJZSBkZXZpY2UgaXMgZGV0ZWN0ZWQuIFdlIGRvCi0JICoga25vdyBMMSB3b3JrcyBjb3JyZWN0bHkgZXZlbiBmb3IgYWxsIGF0aDVrIHByZSAxLjEgUENJZSBkZXZpY2VzCi0JICogdGhvdWdoIGJ1dCBjYW5ub3QgY3VycmVudGx5IHVuZHVlIHRoZSBlZmZlY3Qgb2YgYSBibGFja2xpc3QsIGZvcgotCSAqIGRldGFpbHMgeW91IGNhbiByZWFkIHBjaWVfYXNwbV9zYW5pdHlfY2hlY2soKSBhbmQgc2VlIGhvdyBpdCBhZGp1c3RzCi0JICogdGhlIGRldmljZSBsaW5rIGNhcGFiaWxpdHkuCi0JICoKLQkgKiBJdCBtYXkgYmUgcG9zc2libGUgaW4gdGhlIGZ1dHVyZSB0byBpbXBsZW1lbnQgc29tZSBQQ0kgQVBJIHRvIGFsbG93Ci0JICogZHJpdmVycyB0byBvdmVycmlkZSBibGFja2xpc3RzIGZvciBwcmUgMS4xIFBDSWUgYnV0IGZvciBub3cgaXQgaXMKLQkgKiBiZXN0IHRvIGFjY2VwdCB0aGF0IGJvdGggTDBzIGFuZCBMMSB3aWxsIGJlIGRpc2FibGVkIGNvbXBsZXRlbHkgZm9yCi0JICogZGlzdHJpYnV0aW9ucyBzaGlwcGluZyB3aXRoIENPTkZJR19QQ0lFQVNQTSByYXRoZXIgdGhhbiBoYXZpbmcgdGhpcwotCSAqIGlzc3VlIHByZXNlbnQuIE1vdGl2YXRpb24gZm9yIGFkZGluZyB0aGlzIG5ldyBBUEkgd2lsbCBiZSB0byBoZWxwCi0JICogd2l0aCBwb3dlciBjb25zdW1wdGlvbiBmb3Igc29tZSBvZiB0aGVzZSBkZXZpY2VzLgotCSAqLwotCXBjaV9kaXNhYmxlX2xpbmtfc3RhdGUocGRldiwgUENJRV9MSU5LX1NUQVRFX0wwUyk7Ci0KLQlyZXQgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKLQlpZiAocmV0KSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IGVuYWJsZSBkZXZpY2VcbiIpOwotCQlnb3RvIGVycjsKLQl9Ci0KLQkvKiBYWFggMzItYml0IGFkZHJlc3Npbmcgb25seSAqLwotCXJldCA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDMyKSk7Ci0JaWYgKHJldCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICIzMi1iaXQgRE1BIG5vdCBhdmFpbGFibGVcbiIpOwotCQlnb3RvIGVycl9kaXM7Ci0JfQotCi0JLyoKLQkgKiBDYWNoZSBsaW5lIHNpemUgaXMgdXNlZCB0byBzaXplIGFuZCBhbGlnbiB2YXJpb3VzCi0JICogc3RydWN0dXJlcyB1c2VkIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIGhhcmR3YXJlLgotCSAqLwotCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIFBDSV9DQUNIRV9MSU5FX1NJWkUsICZjc3opOwotCWlmIChjc3ogPT0gMCkgewotCQkvKgotCQkgKiBMaW51eCAyLjQuMTggKGF0IGxlYXN0KSB3cml0ZXMgdGhlIGNhY2hlIGxpbmUgc2l6ZQotCQkgKiByZWdpc3RlciBhcyBhIDE2LWJpdCB3aWRlIHJlZ2lzdGVyIHdoaWNoIGlzIHdyb25nLgotCQkgKiBXZSBtdXN0IGhhdmUgdGhpcyBzZXR1cCBwcm9wZXJseSBmb3IgcnggYnVmZmVyCi0JCSAqIERNQSB0byB3b3JrIHNvIGZvcmNlIGEgcmVhc29uYWJsZSB2YWx1ZSBoZXJlIGlmIGl0Ci0JCSAqIGNvbWVzIHVwIHplcm8uCi0JCSAqLwotCQljc3ogPSBMMV9DQUNIRV9CWVRFUyA+PiAyOwotCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgUENJX0NBQ0hFX0xJTkVfU0laRSwgY3N6KTsKLQl9Ci0JLyoKLQkgKiBUaGUgZGVmYXVsdCBzZXR0aW5nIG9mIGxhdGVuY3kgdGltZXIgeWllbGRzIHBvb3IgcmVzdWx0cywKLQkgKiBzZXQgaXQgdG8gdGhlIHZhbHVlIHVzZWQgYnkgb3RoZXIgc3lzdGVtcy4gIEl0IG1heSBiZSB3b3J0aAotCSAqIHR3ZWFraW5nIHRoaXMgc2V0dGluZyBtb3JlLgotCSAqLwotCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBQQ0lfTEFURU5DWV9USU1FUiwgMHhhOCk7Ci0KLQkvKiBFbmFibGUgYnVzIG1hc3RlcmluZyAqLwotCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwotCi0JLyoKLQkgKiBEaXNhYmxlIHRoZSBSRVRSWV9USU1FT1VUIHJlZ2lzdGVyICgweDQxKSB0byBrZWVwCi0JICogUENJIFR4IHJldHJpZXMgZnJvbSBpbnRlcmZlcmluZyB3aXRoIEMzIENQVSBzdGF0ZS4KLQkgKi8KLQlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgMHg0MSwgMCk7Ci0KLQlyZXQgPSBwY2lfcmVxdWVzdF9yZWdpb24ocGRldiwgMCwgImF0aDVrIik7Ci0JaWYgKHJldCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgcmVzZXJ2ZSBQQ0kgbWVtb3J5IHJlZ2lvblxuIik7Ci0JCWdvdG8gZXJyX2RpczsKLQl9Ci0KLQltZW0gPSBwY2lfaW9tYXAocGRldiwgMCwgMCk7Ci0JaWYgKCFtZW0pIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IHJlbWFwIFBDSSBtZW1vcnkgcmVnaW9uXG4iKSA7Ci0JCXJldCA9IC1FSU87Ci0JCWdvdG8gZXJyX3JlZzsKLQl9Ci0KLQkvKgotCSAqIEFsbG9jYXRlIGh3IChtYWM4MDIxMSBtYWluIHN0cnVjdCkKLQkgKiBhbmQgaHctPnByaXYgKGRyaXZlciBwcml2YXRlIGRhdGEpCi0JICovCi0JaHcgPSBpZWVlODAyMTFfYWxsb2NfaHcoc2l6ZW9mKCpzYyksICZhdGg1a19od19vcHMpOwotCWlmIChodyA9PSBOVUxMKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCBhbGxvY2F0ZSBpZWVlODAyMTFfaHdcbiIpOwotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycl9tYXA7Ci0JfQotCi0JZGV2X2luZm8oJnBkZXYtPmRldiwgInJlZ2lzdGVyZWQgYXMgJyVzJ1xuIiwgd2lwaHlfbmFtZShody0+d2lwaHkpKTsKKwlpbnQgY3N6OwogCiAJLyogSW5pdGlhbGl6ZSBkcml2ZXIgcHJpdmF0ZSBkYXRhICovCi0JU0VUX0lFRUU4MDIxMV9ERVYoaHcsICZwZGV2LT5kZXYpOworCVNFVF9JRUVFODAyMTFfREVWKGh3LCBzYy0+ZGV2KTsKIAlody0+ZmxhZ3MgPSBJRUVFODAyMTFfSFdfUlhfSU5DTFVERVNfRkNTIHwKLQkJICAgIElFRUU4MDIxMV9IV19IT1NUX0JST0FEQ0FTVF9QU19CVUZGRVJJTkcgfAotCQkgICAgSUVFRTgwMjExX0hXX1NJR05BTF9EQk07CisJCQlJRUVFODAyMTFfSFdfSE9TVF9CUk9BRENBU1RfUFNfQlVGRkVSSU5HIHwKKwkJCUlFRUU4MDIxMV9IV19TSUdOQUxfREJNIHwKKwkJCUlFRUU4MDIxMV9IV19SRVBPUlRTX1RYX0FDS19TVEFUVVM7CiAKIAlody0+d2lwaHktPmludGVyZmFjZV9tb2RlcyA9CiAJCUJJVChOTDgwMjExX0lGVFlQRV9BUCkgfApAQCAtMzUzOCwxMSArMjM1MSwxMiBAQAogCQlCSVQoTkw4MDIxMV9JRlRZUEVfQURIT0MpIHwKIAkJQklUKE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpOwogCisJLyogYm90aCBhbnRlbm5hcyBjYW4gYmUgY29uZmlndXJlZCBhcyBSWCBvciBUWCAqLworCWh3LT53aXBoeS0+YXZhaWxhYmxlX2FudGVubmFzX3R4ID0gMHgzOworCWh3LT53aXBoeS0+YXZhaWxhYmxlX2FudGVubmFzX3J4ID0gMHgzOworCiAJaHctPmV4dHJhX3R4X2hlYWRyb29tID0gMjsKIAlody0+Y2hhbm5lbF9jaGFuZ2VfdGltZSA9IDUwMDA7Ci0Jc2MgPSBody0+cHJpdjsKLQlzYy0+aHcgPSBodzsKLQlzYy0+cGRldiA9IHBkZXY7CiAKIAkvKgogCSAqIE1hcmsgdGhlIGRldmljZSBhcyBkZXRhY2hlZCB0byBhdm9pZCBwcm9jZXNzaW5nCkBAIC0zNTUwLDcgKzIzNjQsNiBAQAogCSAqLwogCV9fc2V0X2JpdChBVEhfU1RBVF9JTlZBTElELCBzYy0+c3RhdHVzKTsKIAotCXNjLT5pb2Jhc2UgPSBtZW07IC8qIFNvIHdlIGNhbiB1bm1hcCBpdCBvbiBkZXRhY2ggKi8KIAlzYy0+b3Btb2RlID0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTjsKIAlzYy0+YmludHZhbCA9IDEwMDA7CiAJbXV0ZXhfaW5pdCgmc2MtPmxvY2spOwpAQCAtMzU1OCwxNCArMjM3MSwxMiBAQAogCXNwaW5fbG9ja19pbml0KCZzYy0+dHhidWZsb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmc2MtPmJsb2NrKTsKIAotCS8qIFNldCBwcml2YXRlIGRhdGEgKi8KLQlwY2lfc2V0X2RydmRhdGEocGRldiwgc2MpOwogCiAJLyogU2V0dXAgaW50ZXJydXB0IGhhbmRsZXIgKi8KLQlyZXQgPSByZXF1ZXN0X2lycShwZGV2LT5pcnEsIGF0aDVrX2ludHIsIElSUUZfU0hBUkVELCAiYXRoIiwgc2MpOworCXJldCA9IHJlcXVlc3RfaXJxKHNjLT5pcnEsIGF0aDVrX2ludHIsIElSUUZfU0hBUkVELCAiYXRoIiwgc2MpOwogCWlmIChyZXQpIHsKIAkJQVRINUtfRVJSKHNjLCAicmVxdWVzdF9pcnEgZmFpbGVkXG4iKTsKLQkJZ290byBlcnJfZnJlZTsKKwkJZ290byBlcnI7CiAJfQogCiAJLyogSWYgd2UgcGFzc2VkIHRoZSB0ZXN0LCBtYWxsb2MgYW4gYXRoNWtfaHcgc3RydWN0ICovCkBAIC0zNTgwLDE2ICsyMzkxLDI0IEBACiAJc2MtPmFoLT5haF9pb2Jhc2UgPSBzYy0+aW9iYXNlOwogCWNvbW1vbiA9IGF0aDVrX2h3X2NvbW1vbihzYy0+YWgpOwogCWNvbW1vbi0+b3BzID0gJmF0aDVrX2NvbW1vbl9vcHM7CisJY29tbW9uLT5idXNfb3BzID0gYnVzX29wczsKIAljb21tb24tPmFoID0gc2MtPmFoOwogCWNvbW1vbi0+aHcgPSBodzsKKwljb21tb24tPnByaXYgPSBzYzsKKworCS8qCisJICogQ2FjaGUgbGluZSBzaXplIGlzIHVzZWQgdG8gc2l6ZSBhbmQgYWxpZ24gdmFyaW91cworCSAqIHN0cnVjdHVyZXMgdXNlZCB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBoYXJkd2FyZS4KKwkgKi8KKwlhdGg1a19yZWFkX2NhY2hlc2l6ZShjb21tb24sICZjc3opOwogCWNvbW1vbi0+Y2FjaGVsc3ogPSBjc3ogPDwgMjsgLyogY29udmVydCB0byBieXRlcyAqLworCiAJc3Bpbl9sb2NrX2luaXQoJmNvbW1vbi0+Y2NfbG9jayk7CiAKIAkvKiBJbml0aWFsaXplIGRldmljZSAqLwotCXJldCA9IGF0aDVrX2h3X2F0dGFjaChzYyk7Ci0JaWYgKHJldCkgeworCXJldCA9IGF0aDVrX2h3X2luaXQoc2MpOworCWlmIChyZXQpCiAJCWdvdG8gZXJyX2ZyZWVfYWg7Ci0JfQogCiAJLyogc2V0IHVwIG11bHRpLXJhdGUgcmV0cnkgY2FwYWJpbGl0aWVzICovCiAJaWYgKHNjLT5haC0+YWhfdmVyc2lvbiA9PSBBUjVLX0FSNTIxMikgewpAQCAtMzYwMCw3ICsyNDE5LDcgQEAKIAlody0+dmlmX2RhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYXRoNWtfdmlmKTsKIAogCS8qIEZpbmlzaCBwcml2YXRlIGRyaXZlciBkYXRhIGluaXRpYWxpemF0aW9uICovCi0JcmV0ID0gYXRoNWtfYXR0YWNoKHBkZXYsIGh3KTsKKwlyZXQgPSBhdGg1a19pbml0KGh3KTsKIAlpZiAocmV0KQogCQlnb3RvIGVycl9haDsKIApAQCAtMzY1OSwxMDAgKzI0NzgsNDkyIEBACiAKIAlyZXR1cm4gMDsKIGVycl9haDoKLQlhdGg1a19od19kZXRhY2goc2MtPmFoKTsKKwlhdGg1a19od19kZWluaXQoc2MtPmFoKTsKIGVycl9mcmVlX2FoOgogCWtmcmVlKHNjLT5haCk7CiBlcnJfaXJxOgotCWZyZWVfaXJxKHBkZXYtPmlycSwgc2MpOwotZXJyX2ZyZWU6Ci0JaWVlZTgwMjExX2ZyZWVfaHcoaHcpOwotZXJyX21hcDoKLQlwY2lfaW91bm1hcChwZGV2LCBtZW0pOwotZXJyX3JlZzoKLQlwY2lfcmVsZWFzZV9yZWdpb24ocGRldiwgMCk7Ci1lcnJfZGlzOgotCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwlmcmVlX2lycShzYy0+aXJxLCBzYyk7CiBlcnI6CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgX19kZXZleGl0Ci1hdGg1a19wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQorc3RhdGljIGludAorYXRoNWtfc3RvcF9sb2NrZWQoc3RydWN0IGF0aDVrX3NvZnRjICpzYykKIHsKLQlzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBhdGg1a19odyAqYWggPSBzYy0+YWg7CiAKLQlhdGg1a19kZWJ1Z19maW5pc2hfZGV2aWNlKHNjKTsKLQlhdGg1a19kZXRhY2gocGRldiwgc2MtPmh3KTsKLQlhdGg1a19od19kZXRhY2goc2MtPmFoKTsKLQlrZnJlZShzYy0+YWgpOwotCWZyZWVfaXJxKHBkZXYtPmlycSwgc2MpOwotCXBjaV9pb3VubWFwKHBkZXYsIHNjLT5pb2Jhc2UpOwotCXBjaV9yZWxlYXNlX3JlZ2lvbihwZGV2LCAwKTsKLQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7Ci0JaWVlZTgwMjExX2ZyZWVfaHcoc2MtPmh3KTsKLX0KLQotI2lmZGVmIENPTkZJR19QTV9TTEVFUAotc3RhdGljIGludCBhdGg1a19wY2lfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGF0aDVrX3NvZnRjICpzYyA9IHBjaV9nZXRfZHJ2ZGF0YSh0b19wY2lfZGV2KGRldikpOwotCi0JYXRoNWtfbGVkX29mZihzYyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYXRoNWtfcGNpX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGRldik7Ci0Jc3RydWN0IGF0aDVrX3NvZnRjICpzYyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlBVEg1S19EQkcoc2MsIEFUSDVLX0RFQlVHX1JFU0VULCAiaW52YWxpZCAldVxuIiwKKwkJCXRlc3RfYml0KEFUSF9TVEFUX0lOVkFMSUQsIHNjLT5zdGF0dXMpKTsKIAogCS8qCi0JICogU3VzcGVuZC9SZXN1bWUgcmVzZXRzIHRoZSBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSwgc28gd2UgaGF2ZSB0bwotCSAqIHJlLWRpc2FibGUgdGhlIFJFVFJZX1RJTUVPVVQgcmVnaXN0ZXIgKDB4NDEpIHRvIGtlZXAKLQkgKiBQQ0kgVHggcmV0cmllcyBmcm9tIGludGVyZmVyaW5nIHdpdGggQzMgQ1BVIHN0YXRlCisJICogU2h1dGRvd24gdGhlIGhhcmR3YXJlIGFuZCBkcml2ZXI6CisJICogICAgc3RvcCBvdXRwdXQgZnJvbSBhYm92ZQorCSAqICAgIGRpc2FibGUgaW50ZXJydXB0cworCSAqICAgIHR1cm4gb2ZmIHRpbWVycworCSAqICAgIHR1cm4gb2ZmIHRoZSByYWRpbworCSAqICAgIGNsZWFyIHRyYW5zbWl0IG1hY2hpbmVyeQorCSAqICAgIGNsZWFyIHJlY2VpdmUgbWFjaGluZXJ5CisJICogICAgZHJhaW4gYW5kIHJlbGVhc2UgdHggcXVldWVzCisJICogICAgcmVjbGFpbSBiZWFjb24gcmVzb3VyY2VzCisJICogICAgcG93ZXIgZG93biBoYXJkd2FyZQorCSAqCisJICogTm90ZSB0aGF0IHNvbWUgb2YgdGhpcyB3b3JrIGlzIG5vdCBwb3NzaWJsZSBpZiB0aGUKKwkgKiBoYXJkd2FyZSBpcyBnb25lIChpbnZhbGlkKS4KIAkgKi8KLQlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgMHg0MSwgMCk7CisJaWVlZTgwMjExX3N0b3BfcXVldWVzKHNjLT5odyk7CiAKLQlhdGg1a19sZWRfZW5hYmxlKHNjKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIFNJTVBMRV9ERVZfUE1fT1BTKGF0aDVrX3BtX29wcywgYXRoNWtfcGNpX3N1c3BlbmQsIGF0aDVrX3BjaV9yZXN1bWUpOwotI2RlZmluZSBBVEg1S19QTV9PUFMJKCZhdGg1a19wbV9vcHMpCi0jZWxzZQotI2RlZmluZSBBVEg1S19QTV9PUFMJTlVMTAotI2VuZGlmIC8qIENPTkZJR19QTV9TTEVFUCAqLwotCi1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYXRoNWtfcGNpX2RyaXZlciA9IHsKLQkubmFtZQkJPSBLQlVJTERfTU9ETkFNRSwKLQkuaWRfdGFibGUJPSBhdGg1a19wY2lfaWRfdGFibGUsCi0JLnByb2JlCQk9IGF0aDVrX3BjaV9wcm9iZSwKLQkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGF0aDVrX3BjaV9yZW1vdmUpLAotCS5kcml2ZXIucG0JPSBBVEg1S19QTV9PUFMsCi19OwotCi0vKgotICogTW9kdWxlIGluaXQvZXhpdCBmdW5jdGlvbnMKLSAqLwotc3RhdGljIGludCBfX2luaXQKLWluaXRfYXRoNWtfcGNpKHZvaWQpCi17Ci0JaW50IHJldDsKLQotCXJldCA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmF0aDVrX3BjaV9kcml2ZXIpOwotCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJhdGg1a19wY2k6IGNhbid0IHJlZ2lzdGVyIHBjaSBkcml2ZXJcbiIpOwotCQlyZXR1cm4gcmV0OworCWlmICghdGVzdF9iaXQoQVRIX1NUQVRfSU5WQUxJRCwgc2MtPnN0YXR1cykpIHsKKwkJYXRoNWtfbGVkX29mZihzYyk7CisJCWF0aDVrX2h3X3NldF9pbXIoYWgsIDApOworCQlzeW5jaHJvbml6ZV9pcnEoc2MtPmlycSk7CisJCWF0aDVrX3J4X3N0b3Aoc2MpOworCQlhdGg1a19od19kbWFfc3RvcChhaCk7CisJCWF0aDVrX2RyYWluX3R4X2J1ZmZzKHNjKTsKKwkJYXRoNWtfaHdfcGh5X2Rpc2FibGUoYWgpOwogCX0KIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBfX2V4aXQKLWV4aXRfYXRoNWtfcGNpKHZvaWQpCitpbnQKK2F0aDVrX2luaXRfaHcoc3RydWN0IGF0aDVrX3NvZnRjICpzYykKIHsKLQlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmF0aDVrX3BjaV9kcml2ZXIpOworCXN0cnVjdCBhdGg1a19odyAqYWggPSBzYy0+YWg7CisJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDVrX2h3X2NvbW1vbihhaCk7CisJaW50IHJldCwgaTsKKworCW11dGV4X2xvY2soJnNjLT5sb2NrKTsKKworCUFUSDVLX0RCRyhzYywgQVRINUtfREVCVUdfUkVTRVQsICJtb2RlICVkXG4iLCBzYy0+b3Btb2RlKTsKKworCS8qCisJICogU3RvcCBhbnl0aGluZyBwcmV2aW91c2x5IHNldHVwLiAgVGhpcyBpcyBzYWZlCisJICogbm8gbWF0dGVyIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgdGhyb3VnaCBvciBub3QuCisJICovCisJYXRoNWtfc3RvcF9sb2NrZWQoc2MpOworCisJLyoKKwkgKiBUaGUgYmFzaWMgaW50ZXJmYWNlIHRvIHNldHRpbmcgdGhlIGhhcmR3YXJlIGluIGEgZ29vZAorCSAqIHN0YXRlIGlzIGBgcmVzZXQnJy4gIE9uIHJldHVybiB0aGUgaGFyZHdhcmUgaXMga25vd24gdG8KKwkgKiBiZSBwb3dlcmVkIHVwIGFuZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQuICBUaGlzIG11c3QKKwkgKiBiZSBmb2xsb3dlZCBieSBpbml0aWFsaXphdGlvbiBvZiB0aGUgYXBwcm9wcmlhdGUgYml0cworCSAqIGFuZCB0aGVuIHNldHVwIG9mIHRoZSBpbnRlcnJ1cHQgbWFzay4KKwkgKi8KKwlzYy0+Y3VyY2hhbiA9IHNjLT5ody0+Y29uZi5jaGFubmVsOworCXNjLT5jdXJiYW5kID0gJnNjLT5zYmFuZHNbc2MtPmN1cmNoYW4tPmJhbmRdOworCXNjLT5pbWFzayA9IEFSNUtfSU5UX1JYT0sgfCBBUjVLX0lOVF9SWEVSUiB8IEFSNUtfSU5UX1JYRU9MIHwKKwkJQVI1S19JTlRfUlhPUk4gfCBBUjVLX0lOVF9UWERFU0MgfCBBUjVLX0lOVF9UWEVPTCB8CisJCUFSNUtfSU5UX0ZBVEFMIHwgQVI1S19JTlRfR0xPQkFMIHwgQVI1S19JTlRfTUlCOworCisJcmV0ID0gYXRoNWtfcmVzZXQoc2MsIE5VTEwsIGZhbHNlKTsKKwlpZiAocmV0KQorCQlnb3RvIGRvbmU7CisKKwlhdGg1a19yZmtpbGxfaHdfc3RhcnQoYWgpOworCisJLyoKKwkgKiBSZXNldCB0aGUga2V5IGNhY2hlIHNpbmNlIHNvbWUgcGFydHMgZG8gbm90IHJlc2V0IHRoZQorCSAqIGNvbnRlbnRzIG9uIGluaXRpYWwgcG93ZXIgdXAgb3IgcmVzdW1lIGZyb20gc3VzcGVuZC4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgY29tbW9uLT5rZXltYXg7IGkrKykKKwkJYXRoX2h3X2tleXJlc2V0KGNvbW1vbiwgKHUxNikgaSk7CisKKwkvKiBVc2UgaGlnaGVyIHJhdGVzIGZvciBhY2tzIGluc3RlYWQgb2YgYmFzZQorCSAqIHJhdGUgKi8KKwlhaC0+YWhfYWNrX2JpdHJhdGVfaGlnaCA9IHRydWU7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzYy0+YnNsb3QpOyBpKyspCisJCXNjLT5ic2xvdFtpXSA9IE5VTEw7CisKKwlyZXQgPSAwOworZG9uZToKKwltbWlvd2IoKTsKKwltdXRleF91bmxvY2soJnNjLT5sb2NrKTsKKworCWllZWU4MDIxMV9xdWV1ZV9kZWxheWVkX3dvcmsoc2MtPmh3LCAmc2MtPnR4X2NvbXBsZXRlX3dvcmssCisJCQltc2Vjc190b19qaWZmaWVzKEFUSDVLX1RYX0NPTVBMRVRFX1BPTExfSU5UKSk7CisKKwlyZXR1cm4gcmV0OwogfQogCi1tb2R1bGVfaW5pdChpbml0X2F0aDVrX3BjaSk7Ci1tb2R1bGVfZXhpdChleGl0X2F0aDVrX3BjaSk7CitzdGF0aWMgdm9pZCBzdG9wX3Rhc2tsZXRzKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpCit7CisJdGFza2xldF9raWxsKCZzYy0+cnh0cSk7CisJdGFza2xldF9raWxsKCZzYy0+dHh0cSk7CisJdGFza2xldF9raWxsKCZzYy0+Y2FsaWIpOworCXRhc2tsZXRfa2lsbCgmc2MtPmJlYWNvbnRxKTsKKwl0YXNrbGV0X2tpbGwoJnNjLT5hbmlfdGFza2xldCk7Cit9CisKKy8qCisgKiBTdG9wIHRoZSBkZXZpY2UsIGdyYWJiaW5nIHRoZSB0b3AtbGV2ZWwgbG9jayB0byBwcm90ZWN0CisgKiBhZ2FpbnN0IGNvbmN1cnJlbnQgZW50cnkgdGhyb3VnaCBhdGg1a19pbml0ICh3aGljaCBjYW4gaGFwcGVuCisgKiBpZiBhbm90aGVyIHRocmVhZCBkb2VzIGEgc3lzdGVtIGNhbGwgYW5kIHRoZSB0aHJlYWQgZG9pbmcgdGhlCisgKiBzdG9wIGlzIHByZWVtcHRlZCkuCisgKi8KK2ludAorYXRoNWtfc3RvcF9odyhzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKQoreworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZzYy0+bG9jayk7CisJcmV0ID0gYXRoNWtfc3RvcF9sb2NrZWQoc2MpOworCWlmIChyZXQgPT0gMCAmJiAhdGVzdF9iaXQoQVRIX1NUQVRfSU5WQUxJRCwgc2MtPnN0YXR1cykpIHsKKwkJLyoKKwkJICogRG9uJ3Qgc2V0IHRoZSBjYXJkIGluIGZ1bGwgc2xlZXAgbW9kZSEKKwkJICoKKwkJICogYSkgV2hlbiB0aGUgZGV2aWNlIGlzIGluIHRoaXMgc3RhdGUgaXQgbXVzdCBiZSBjYXJlZnVsbHkKKwkJICogd29rZW4gdXAgb3IgcmVmZXJlbmNlcyB0byByZWdpc3RlcnMgaW4gdGhlIFBDSSBjbG9jaworCQkgKiBkb21haW4gbWF5IGZyZWV6ZSB0aGUgYnVzIChhbmQgc3lzdGVtKS4gIFRoaXMgdmFyaWVzCisJCSAqIGJ5IGNoaXAgYW5kIGlzIG1vc3RseSBhbiBpc3N1ZSB3aXRoIG5ld2VyIHBhcnRzCisJCSAqIChtYWR3aWZpIHNvdXJjZXMgbWVudGlvbmVkIHNyZXYgPj0gMHg3OCkgdGhhdCBnbyB0bworCQkgKiBzbGVlcCBtb3JlIHF1aWNrbHkuCisJCSAqCisJCSAqIGIpIE9uIG9sZGVyIGNoaXBzIGZ1bGwgc2xlZXAgcmVzdWx0cyBhIHdlaXJkIGJlaGF2aW91cgorCQkgKiBkdXJpbmcgd2FrZXVwLiBJIHRlc3RlZCB2YXJpb3VzIGNhcmRzIHdpdGggc3JldiA8IDB4NzgKKwkJICogYW5kIHRoZXkgZG9uJ3Qgd2FrZSB1cCBhZnRlciBtb2R1bGUgcmVsb2FkLCBhIHNlY29uZAorCQkgKiBtb2R1bGUgcmVsb2FkIGlzIG5lZWRlZCB0byBicmluZyB0aGUgY2FyZCB1cCBhZ2Fpbi4KKwkJICoKKwkJICogVW50aWwgd2UgZmlndXJlIG91dCB3aGF0J3MgZ29pbmcgb24gZG9uJ3QgZW5hYmxlCisJCSAqIGZ1bGwgY2hpcCByZXNldCBvbiBhbnkgY2hpcCAodGhpcyBpcyB3aGF0IExlZ2FjeSBIQUwKKwkJICogYW5kIFNhbSdzIEhBTCBkbyBhbnl3YXkpLiBJbnN0ZWFkIFBlcmZvcm0gYSBmdWxsIHJlc2V0CisJCSAqIG9uIHRoZSBkZXZpY2UgKHNhbWUgYXMgaW5pdGlhbCBzdGF0ZSBhZnRlciBhdHRhY2gpIGFuZAorCQkgKiBsZWF2ZSBpdCBpZGxlIChrZWVwIE1BQy9CQiBvbiB3YXJtIHJlc2V0KSAqLworCQlyZXQgPSBhdGg1a19od19vbl9ob2xkKHNjLT5haCk7CisKKwkJQVRINUtfREJHKHNjLCBBVEg1S19ERUJVR19SRVNFVCwKKwkJCQkicHV0dGluZyBkZXZpY2UgdG8gc2xlZXBcbiIpOworCX0KKworCW1taW93YigpOworCW11dGV4X3VubG9jaygmc2MtPmxvY2spOworCisJc3RvcF90YXNrbGV0cyhzYyk7CisKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnNjLT50eF9jb21wbGV0ZV93b3JrKTsKKworCWF0aDVrX3Jma2lsbF9od19zdG9wKHNjLT5haCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogUmVzZXQgdGhlIGhhcmR3YXJlLiAgSWYgY2hhbiBpcyBub3QgTlVMTCwgdGhlbiBhbHNvIHBhdXNlIHJ4L3R4CisgKiBhbmQgY2hhbmdlIHRvIHRoZSBnaXZlbiBjaGFubmVsLgorICoKKyAqIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHNjLT5sb2NrLgorICovCitzdGF0aWMgaW50CithdGg1a19yZXNldChzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4sCisJCQkJCQkJYm9vbCBza2lwX3BjdSkKK3sKKwlzdHJ1Y3QgYXRoNWtfaHcgKmFoID0gc2MtPmFoOworCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg1a19od19jb21tb24oYWgpOworCWludCByZXQsIGFuaV9tb2RlOworCisJQVRINUtfREJHKHNjLCBBVEg1S19ERUJVR19SRVNFVCwgInJlc2V0dGluZ1xuIik7CisKKwlhdGg1a19od19zZXRfaW1yKGFoLCAwKTsKKwlzeW5jaHJvbml6ZV9pcnEoc2MtPmlycSk7CisJc3RvcF90YXNrbGV0cyhzYyk7CisKKwkvKiBTYXZlIGFuaSBtb2RlIGFuZCBkaXNhYmxlIEFOSSBkdXJyaW5nCisJICogcmVzZXQuIElmIHdlIGRvbid0IHdlIG1pZ2h0IGdldCBmYWxzZQorCSAqIFBIWSBlcnJvciBpbnRlcnJ1cHRzLiAqLworCWFuaV9tb2RlID0gYWgtPmFoX3NjLT5hbmlfc3RhdGUuYW5pX21vZGU7CisJYXRoNWtfYW5pX2luaXQoYWgsIEFUSDVLX0FOSV9NT0RFX09GRik7CisKKwkvKiBXZSBhcmUgZ29pbmcgdG8gZW1wdHkgaHcgcXVldWVzCisJICogc28gd2Ugc2hvdWxkIGFsc28gZnJlZSBhbnkgcmVtYWluaW5nCisJICogdHggYnVmZmVycyAqLworCWF0aDVrX2RyYWluX3R4X2J1ZmZzKHNjKTsKKwlpZiAoY2hhbikgeworCQlzYy0+Y3VyY2hhbiA9IGNoYW47CisJCXNjLT5jdXJiYW5kID0gJnNjLT5zYmFuZHNbY2hhbi0+YmFuZF07CisJfQorCXJldCA9IGF0aDVrX2h3X3Jlc2V0KGFoLCBzYy0+b3Btb2RlLCBzYy0+Y3VyY2hhbiwgY2hhbiAhPSBOVUxMLAorCQkJCQkJCQlza2lwX3BjdSk7CisJaWYgKHJldCkgeworCQlBVEg1S19FUlIoc2MsICJjYW4ndCByZXNldCBoYXJkd2FyZSAoJWQpXG4iLCByZXQpOworCQlnb3RvIGVycjsKKwl9CisKKwlyZXQgPSBhdGg1a19yeF9zdGFydChzYyk7CisJaWYgKHJldCkgeworCQlBVEg1S19FUlIoc2MsICJjYW4ndCBzdGFydCByZWN2IGxvZ2ljXG4iKTsKKwkJZ290byBlcnI7CisJfQorCisJYXRoNWtfYW5pX2luaXQoYWgsIGFuaV9tb2RlKTsKKworCWFoLT5haF9jYWxfbmV4dF9mdWxsID0gamlmZmllczsKKwlhaC0+YWhfY2FsX25leHRfYW5pID0gamlmZmllczsKKwlhaC0+YWhfY2FsX25leHRfbmYgPSBqaWZmaWVzOworCWV3bWFfaW5pdCgmYWgtPmFoX2JlYWNvbl9yc3NpX2F2ZywgMTAyNCwgOCk7CisKKwkvKiBjbGVhciBzdXJ2ZXkgZGF0YSBhbmQgY3ljbGUgY291bnRlcnMgKi8KKwltZW1zZXQoJnNjLT5zdXJ2ZXksIDAsIHNpemVvZihzYy0+c3VydmV5KSk7CisJc3Bpbl9sb2NrX2JoKCZjb21tb24tPmNjX2xvY2spOworCWF0aF9od19jeWNsZV9jb3VudGVyc191cGRhdGUoY29tbW9uKTsKKwltZW1zZXQoJmNvbW1vbi0+Y2Nfc3VydmV5LCAwLCBzaXplb2YoY29tbW9uLT5jY19zdXJ2ZXkpKTsKKwltZW1zZXQoJmNvbW1vbi0+Y2NfYW5pLCAwLCBzaXplb2YoY29tbW9uLT5jY19hbmkpKTsKKwlzcGluX3VubG9ja19iaCgmY29tbW9uLT5jY19sb2NrKTsKKworCS8qCisJICogQ2hhbmdlIGNoYW5uZWxzIGFuZCB1cGRhdGUgdGhlIGgvdyByYXRlIG1hcCBpZiB3ZSdyZSBzd2l0Y2hpbmc7CisJICogZS5nLiAxMWEgdG8gMTFiL2cuCisJICoKKwkgKiBXZSBtYXkgYmUgZG9pbmcgYSByZXNldCBpbiByZXNwb25zZSB0byBhbiBpb2N0bCB0aGF0IGNoYW5nZXMgdGhlCisJICogY2hhbm5lbCBzbyB1cGRhdGUgYW55IHN0YXRlIHRoYXQgbWlnaHQgY2hhbmdlIGFzIGEgcmVzdWx0LgorCSAqCisJICogWFhYIG5lZWRlZD8KKwkgKi8KKy8qCWF0aDVrX2NoYW5fY2hhbmdlKHNjLCBjKTsgKi8KKworCWF0aDVrX2JlYWNvbl9jb25maWcoc2MpOworCS8qIGludHJzIGFyZSBlbmFibGVkIGJ5IGF0aDVrX2JlYWNvbl9jb25maWcgKi8KKworCWllZWU4MDIxMV93YWtlX3F1ZXVlcyhzYy0+aHcpOworCisJcmV0dXJuIDA7CitlcnI6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgYXRoNWtfcmVzZXRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGF0aDVrX3NvZnRjICpzYyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYXRoNWtfc29mdGMsCisJCXJlc2V0X3dvcmspOworCisJbXV0ZXhfbG9jaygmc2MtPmxvY2spOworCWF0aDVrX3Jlc2V0KHNjLCBOVUxMLCB0cnVlKTsKKwltdXRleF91bmxvY2soJnNjLT5sb2NrKTsKK30KKworc3RhdGljIGludAorYXRoNWtfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKworCXN0cnVjdCBhdGg1a19zb2Z0YyAqc2MgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoNWtfaHcgKmFoID0gc2MtPmFoOworCXN0cnVjdCBhdGhfcmVndWxhdG9yeSAqcmVndWxhdG9yeSA9IGF0aDVrX2h3X3JlZ3VsYXRvcnkoYWgpOworCXN0cnVjdCBhdGg1a190eHEgKnR4cTsKKwl1OCBtYWNbRVRIX0FMRU5dID0ge307CisJaW50IHJldDsKKworCisJLyoKKwkgKiBDaGVjayBpZiB0aGUgTUFDIGhhcyBtdWx0aS1yYXRlIHJldHJ5IHN1cHBvcnQuCisJICogV2UgZG8gdGhpcyBieSB0cnlpbmcgdG8gc2V0dXAgYSBmYWtlIGV4dGVuZGVkCisJICogZGVzY3JpcHRvci4gIE1BQ3MgdGhhdCBkb24ndCBoYXZlIHN1cHBvcnQgd2lsbAorCSAqIHJldHVybiBmYWxzZSB3L28gZG9pbmcgYW55dGhpbmcuICBNQUNzIHRoYXQgZG8KKwkgKiBzdXBwb3J0IGl0IHdpbGwgcmV0dXJuIHRydWUgdy9vIGRvaW5nIGFueXRoaW5nLgorCSAqLworCXJldCA9IGF0aDVrX2h3X3NldHVwX21ycl90eF9kZXNjKGFoLCBOVUxMLCAwLCAwLCAwLCAwLCAwLCAwKTsKKworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycjsKKwlpZiAocmV0ID4gMCkKKwkJX19zZXRfYml0KEFUSF9TVEFUX01SUkVUUlksIHNjLT5zdGF0dXMpOworCisJLyoKKwkgKiBDb2xsZWN0IHRoZSBjaGFubmVsIGxpc3QuICBUaGUgODAyLjExIGxheWVyCisJICogaXMgcmVzcG9zaWJsZSBmb3IgZmlsdGVyaW5nIHRoaXMgbGlzdCBiYXNlZAorCSAqIG9uIHNldHRpbmdzIGxpa2UgdGhlIHBoeSBtb2RlIGFuZCByZWd1bGF0b3J5CisJICogZG9tYWluIHJlc3RyaWN0aW9ucy4KKwkgKi8KKwlyZXQgPSBhdGg1a19zZXR1cF9iYW5kcyhodyk7CisJaWYgKHJldCkgeworCQlBVEg1S19FUlIoc2MsICJjYW4ndCBnZXQgY2hhbm5lbHNcbiIpOworCQlnb3RvIGVycjsKKwl9CisKKwkvKiBOQjogc2V0dXAgaGVyZSBzbyBhdGg1a19yYXRlX3VwZGF0ZSBpcyBoYXBweSAqLworCWlmICh0ZXN0X2JpdChBUjVLX01PREVfMTFBLCBhaC0+YWhfbW9kZXMpKQorCQlhdGg1a19zZXRjdXJtb2RlKHNjLCBBUjVLX01PREVfMTFBKTsKKwllbHNlCisJCWF0aDVrX3NldGN1cm1vZGUoc2MsIEFSNUtfTU9ERV8xMUIpOworCisJLyoKKwkgKiBBbGxvY2F0ZSB0eCtyeCBkZXNjcmlwdG9ycyBhbmQgcG9wdWxhdGUgdGhlIGxpc3RzLgorCSAqLworCXJldCA9IGF0aDVrX2Rlc2NfYWxsb2Moc2MpOworCWlmIChyZXQpIHsKKwkJQVRINUtfRVJSKHNjLCAiY2FuJ3QgYWxsb2NhdGUgZGVzY3JpcHRvcnNcbiIpOworCQlnb3RvIGVycjsKKwl9CisKKwkvKgorCSAqIEFsbG9jYXRlIGhhcmR3YXJlIHRyYW5zbWl0IHF1ZXVlczogb25lIHF1ZXVlIGZvcgorCSAqIGJlYWNvbiBmcmFtZXMgYW5kIG9uZSBkYXRhIHF1ZXVlIGZvciBlYWNoIFFvUworCSAqIHByaW9yaXR5LiAgTm90ZSB0aGF0IGh3IGZ1bmN0aW9ucyBoYW5kbGUgcmVzZXR0aW5nCisJICogdGhlc2UgcXVldWVzIGF0IHRoZSBuZWVkZWQgdGltZS4KKwkgKi8KKwlyZXQgPSBhdGg1a19iZWFjb25xX3NldHVwKGFoKTsKKwlpZiAocmV0IDwgMCkgeworCQlBVEg1S19FUlIoc2MsICJjYW4ndCBzZXR1cCBhIGJlYWNvbiB4bWl0IHF1ZXVlXG4iKTsKKwkJZ290byBlcnJfZGVzYzsKKwl9CisJc2MtPmJoYWxxID0gcmV0OworCXNjLT5jYWJxID0gYXRoNWtfdHhxX3NldHVwKHNjLCBBUjVLX1RYX1FVRVVFX0NBQiwgMCk7CisJaWYgKElTX0VSUihzYy0+Y2FicSkpIHsKKwkJQVRINUtfRVJSKHNjLCAiY2FuJ3Qgc2V0dXAgY2FiIHF1ZXVlXG4iKTsKKwkJcmV0ID0gUFRSX0VSUihzYy0+Y2FicSk7CisJCWdvdG8gZXJyX2JoYWw7CisJfQorCisJLyogNTIxMSBhbmQgNTIxMiB1c3VhbGx5IHN1cHBvcnQgMTAgcXVldWVzIGJ1dCB3ZSBiZXR0ZXIgcmVseSBvbiB0aGUKKwkgKiBjYXBhYmlsaXR5IGluZm9ybWF0aW9uICovCisJaWYgKGFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX3F1ZXVlcy5xX3R4X251bSA+PSA2KSB7CisJCS8qIFRoaXMgb3JkZXIgbWF0Y2hlcyBtYWM4MDIxMSdzIHF1ZXVlIHByaW9yaXR5LCBzbyB3ZSBjYW4KKwkJKiBkaXJlY3RseSB1c2UgdGhlIG1hYzgwMjExIHF1ZXVlIG51bWJlciB3aXRob3V0IGFueSBtYXBwaW5nICovCisJCXR4cSA9IGF0aDVrX3R4cV9zZXR1cChzYywgQVI1S19UWF9RVUVVRV9EQVRBLCBBUjVLX1dNRV9BQ19WTyk7CisJCWlmIChJU19FUlIodHhxKSkgeworCQkJQVRINUtfRVJSKHNjLCAiY2FuJ3Qgc2V0dXAgeG1pdCBxdWV1ZVxuIik7CisJCQlyZXQgPSBQVFJfRVJSKHR4cSk7CisJCQlnb3RvIGVycl9xdWV1ZXM7CisJCX0KKwkJdHhxID0gYXRoNWtfdHhxX3NldHVwKHNjLCBBUjVLX1RYX1FVRVVFX0RBVEEsIEFSNUtfV01FX0FDX1ZJKTsKKwkJaWYgKElTX0VSUih0eHEpKSB7CisJCQlBVEg1S19FUlIoc2MsICJjYW4ndCBzZXR1cCB4bWl0IHF1ZXVlXG4iKTsKKwkJCXJldCA9IFBUUl9FUlIodHhxKTsKKwkJCWdvdG8gZXJyX3F1ZXVlczsKKwkJfQorCQl0eHEgPSBhdGg1a190eHFfc2V0dXAoc2MsIEFSNUtfVFhfUVVFVUVfREFUQSwgQVI1S19XTUVfQUNfQkUpOworCQlpZiAoSVNfRVJSKHR4cSkpIHsKKwkJCUFUSDVLX0VSUihzYywgImNhbid0IHNldHVwIHhtaXQgcXVldWVcbiIpOworCQkJcmV0ID0gUFRSX0VSUih0eHEpOworCQkJZ290byBlcnJfcXVldWVzOworCQl9CisJCXR4cSA9IGF0aDVrX3R4cV9zZXR1cChzYywgQVI1S19UWF9RVUVVRV9EQVRBLCBBUjVLX1dNRV9BQ19CSyk7CisJCWlmIChJU19FUlIodHhxKSkgeworCQkJQVRINUtfRVJSKHNjLCAiY2FuJ3Qgc2V0dXAgeG1pdCBxdWV1ZVxuIik7CisJCQlyZXQgPSBQVFJfRVJSKHR4cSk7CisJCQlnb3RvIGVycl9xdWV1ZXM7CisJCX0KKwkJaHctPnF1ZXVlcyA9IDQ7CisJfSBlbHNlIHsKKwkJLyogb2xkZXIgaGFyZHdhcmUgKDUyMTApIGNhbiBvbmx5IHN1cHBvcnQgb25lIGRhdGEgcXVldWUgKi8KKwkJdHhxID0gYXRoNWtfdHhxX3NldHVwKHNjLCBBUjVLX1RYX1FVRVVFX0RBVEEsIEFSNUtfV01FX0FDX0JFKTsKKwkJaWYgKElTX0VSUih0eHEpKSB7CisJCQlBVEg1S19FUlIoc2MsICJjYW4ndCBzZXR1cCB4bWl0IHF1ZXVlXG4iKTsKKwkJCXJldCA9IFBUUl9FUlIodHhxKTsKKwkJCWdvdG8gZXJyX3F1ZXVlczsKKwkJfQorCQlody0+cXVldWVzID0gMTsKKwl9CisKKwl0YXNrbGV0X2luaXQoJnNjLT5yeHRxLCBhdGg1a190YXNrbGV0X3J4LCAodW5zaWduZWQgbG9uZylzYyk7CisJdGFza2xldF9pbml0KCZzYy0+dHh0cSwgYXRoNWtfdGFza2xldF90eCwgKHVuc2lnbmVkIGxvbmcpc2MpOworCXRhc2tsZXRfaW5pdCgmc2MtPmNhbGliLCBhdGg1a190YXNrbGV0X2NhbGlicmF0ZSwgKHVuc2lnbmVkIGxvbmcpc2MpOworCXRhc2tsZXRfaW5pdCgmc2MtPmJlYWNvbnRxLCBhdGg1a190YXNrbGV0X2JlYWNvbiwgKHVuc2lnbmVkIGxvbmcpc2MpOworCXRhc2tsZXRfaW5pdCgmc2MtPmFuaV90YXNrbGV0LCBhdGg1a190YXNrbGV0X2FuaSwgKHVuc2lnbmVkIGxvbmcpc2MpOworCisJSU5JVF9XT1JLKCZzYy0+cmVzZXRfd29yaywgYXRoNWtfcmVzZXRfd29yayk7CisJSU5JVF9ERUxBWUVEX1dPUksoJnNjLT50eF9jb21wbGV0ZV93b3JrLCBhdGg1a190eF9jb21wbGV0ZV9wb2xsX3dvcmspOworCisJcmV0ID0gYXRoNWtfZWVwcm9tX3JlYWRfbWFjKGFoLCBtYWMpOworCWlmIChyZXQpIHsKKwkJQVRINUtfRVJSKHNjLCAidW5hYmxlIHRvIHJlYWQgYWRkcmVzcyBmcm9tIEVFUFJPTVxuIik7CisJCWdvdG8gZXJyX3F1ZXVlczsKKwl9CisKKwlTRVRfSUVFRTgwMjExX1BFUk1fQUREUihodywgbWFjKTsKKwltZW1jcHkoJnNjLT5sbGFkZHIsIG1hYywgRVRIX0FMRU4pOworCS8qIEFsbCBNQUMgYWRkcmVzcyBiaXRzIG1hdHRlciBmb3IgQUNLcyAqLworCWF0aDVrX3VwZGF0ZV9ic3NpZF9tYXNrX2FuZF9vcG1vZGUoc2MsIE5VTEwpOworCisJcmVndWxhdG9yeS0+Y3VycmVudF9yZCA9IGFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX2VlcHJvbS5lZV9yZWdkb21haW47CisJcmV0ID0gYXRoX3JlZ2RfaW5pdChyZWd1bGF0b3J5LCBody0+d2lwaHksIGF0aDVrX3JlZ19ub3RpZmllcik7CisJaWYgKHJldCkgeworCQlBVEg1S19FUlIoc2MsICJjYW4ndCBpbml0aWFsaXplIHJlZ3VsYXRvcnkgc3lzdGVtXG4iKTsKKwkJZ290byBlcnJfcXVldWVzOworCX0KKworCXJldCA9IGllZWU4MDIxMV9yZWdpc3Rlcl9odyhodyk7CisJaWYgKHJldCkgeworCQlBVEg1S19FUlIoc2MsICJjYW4ndCByZWdpc3RlciBpZWVlODAyMTEgaHdcbiIpOworCQlnb3RvIGVycl9xdWV1ZXM7CisJfQorCisJaWYgKCFhdGhfaXNfd29ybGRfcmVnZChyZWd1bGF0b3J5KSkKKwkJcmVndWxhdG9yeV9oaW50KGh3LT53aXBoeSwgcmVndWxhdG9yeS0+YWxwaGEyKTsKKworCWF0aDVrX2luaXRfbGVkcyhzYyk7CisKKwlhdGg1a19zeXNmc19yZWdpc3RlcihzYyk7CisKKwlyZXR1cm4gMDsKK2Vycl9xdWV1ZXM6CisJYXRoNWtfdHhxX3JlbGVhc2Uoc2MpOworZXJyX2JoYWw6CisJYXRoNWtfaHdfcmVsZWFzZV90eF9xdWV1ZShhaCwgc2MtPmJoYWxxKTsKK2Vycl9kZXNjOgorCWF0aDVrX2Rlc2NfZnJlZShzYyk7CitlcnI6CisJcmV0dXJuIHJldDsKK30KKwordm9pZAorYXRoNWtfZGVpbml0X3NvZnRjKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpCit7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBzYy0+aHc7CisKKwkvKgorCSAqIE5COiB0aGUgb3JkZXIgb2YgdGhlc2UgaXMgaW1wb3J0YW50OgorCSAqIG8gY2FsbCB0aGUgODAyLjExIGxheWVyIGJlZm9yZSBkZXRhY2hpbmcgYXRoNWtfaHcgdG8KKwkgKiAgIGVuc3VyZSBjYWxsYmFja3MgaW50byB0aGUgZHJpdmVyIHRvIGRlbGV0ZSBnbG9iYWwKKwkgKiAgIGtleSBjYWNoZSBlbnRyaWVzIGNhbiBiZSBoYW5kbGVkCisJICogbyByZWNsYWltIHRoZSB0eCBxdWV1ZSBkYXRhIHN0cnVjdHVyZXMgYWZ0ZXIgY2FsbGluZworCSAqICAgdGhlIDgwMi4xMSBsYXllciBhcyB3ZSdsbCBnZXQgY2FsbGVkIGJhY2sgdG8gcmVjbGFpbQorCSAqICAgbm9kZSBzdGF0ZSBhbmQgcG90ZW50aWFsbHkgd2FudCB0byB1c2UgdGhlbQorCSAqIG8gdG8gY2xlYW51cCB0aGUgdHggcXVldWVzIHRoZSBoYWwgaXMgY2FsbGVkLCBzbyBkZXRhY2gKKwkgKiAgIGl0IGxhc3QKKwkgKiBYWFg6ID8/PyBkZXRhY2ggYXRoNWtfaHcgPz8/CisJICogT3RoZXIgdGhhbiB0aGF0LCBpdCdzIHN0cmFpZ2h0Zm9yd2FyZC4uLgorCSAqLworCWF0aDVrX2RlYnVnX2ZpbmlzaF9kZXZpY2Uoc2MpOworCWllZWU4MDIxMV91bnJlZ2lzdGVyX2h3KGh3KTsKKwlhdGg1a19kZXNjX2ZyZWUoc2MpOworCWF0aDVrX3R4cV9yZWxlYXNlKHNjKTsKKwlhdGg1a19od19yZWxlYXNlX3R4X3F1ZXVlKHNjLT5haCwgc2MtPmJoYWxxKTsKKwlhdGg1a191bnJlZ2lzdGVyX2xlZHMoc2MpOworCisJYXRoNWtfc3lzZnNfdW5yZWdpc3RlcihzYyk7CisJLyoKKwkgKiBOQjogY2FuJ3QgcmVjbGFpbSB0aGVzZSB1bnRpbCBhZnRlciBpZWVlODAyMTFfaWZkZXRhY2gKKwkgKiByZXR1cm5zIGJlY2F1c2Ugd2UnbGwgZ2V0IGNhbGxlZCBiYWNrIHRvIHJlY2xhaW0gbm9kZQorCSAqIHN0YXRlIGFuZCBwb3RlbnRpYWxseSB3YW50IHRvIHVzZSB0aGVtLgorCSAqLworCWF0aDVrX2h3X2RlaW5pdChzYy0+YWgpOworCWZyZWVfaXJxKHNjLT5pcnEsIHNjKTsKK30KKworYm9vbAorYXRoX2FueV92aWZfYXNzb2Moc3RydWN0IGF0aDVrX3NvZnRjICpzYykKK3sKKwlzdHJ1Y3QgYXRoX3ZpZl9pdGVyX2RhdGEgaXRlcl9kYXRhOworCWl0ZXJfZGF0YS5od19tYWNhZGRyID0gTlVMTDsKKwlpdGVyX2RhdGEuYW55X2Fzc29jID0gZmFsc2U7CisJaXRlcl9kYXRhLm5lZWRfc2V0X2h3X2FkZHIgPSBmYWxzZTsKKwlpdGVyX2RhdGEuZm91bmRfYWN0aXZlID0gdHJ1ZTsKKworCWllZWU4MDIxMV9pdGVyYXRlX2FjdGl2ZV9pbnRlcmZhY2VzX2F0b21pYyhzYy0+aHcsIGF0aF92aWZfaXRlciwKKwkJCQkJCSAgICZpdGVyX2RhdGEpOworCXJldHVybiBpdGVyX2RhdGEuYW55X2Fzc29jOworfQorCit2b2lkCitzZXRfYmVhY29uX2ZpbHRlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBlbmFibGUpCit7CisJc3RydWN0IGF0aDVrX3NvZnRjICpzYyA9IGh3LT5wcml2OworCXN0cnVjdCBhdGg1a19odyAqYWggPSBzYy0+YWg7CisJdTMyIHJmaWx0OworCXJmaWx0ID0gYXRoNWtfaHdfZ2V0X3J4X2ZpbHRlcihhaCk7CisJaWYgKGVuYWJsZSkKKwkJcmZpbHQgfD0gQVI1S19SWF9GSUxURVJfQkVBQ09OOworCWVsc2UKKwkJcmZpbHQgJj0gfkFSNUtfUlhfRklMVEVSX0JFQUNPTjsKKwlhdGg1a19od19zZXRfcnhfZmlsdGVyKGFoLCByZmlsdCk7CisJc2MtPmZpbHRlcl9mbGFncyA9IHJmaWx0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2Jhc2UuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9iYXNlLmgKaW5kZXggOWE3OTc3My4uNmQ1MTE0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2Jhc2UuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYmFzZS5oCkBAIC0xNjksNyArMTY5LDEwIEBACiAvKiBTb2Z0d2FyZSBDYXJyaWVyLCBrZWVwcyB0cmFjayBvZiB0aGUgZHJpdmVyIHN0YXRlCiAgKiBhc3NvY2lhdGVkIHdpdGggYW4gaW5zdGFuY2Ugb2YgYSBkZXZpY2UgKi8KIHN0cnVjdCBhdGg1a19zb2Z0YyB7Ci0Jc3RydWN0IHBjaV9kZXYJCSpwZGV2OwkJLyogZm9yIGRtYSBtYXBwaW5nICovCisJc3RydWN0IHBjaV9kZXYJCSpwZGV2OworCXN0cnVjdCBkZXZpY2UJCSpkZXY7CQkvKiBmb3IgZG1hIG1hcHBpbmcgKi8KKwlpbnQgaXJxOworCXUxNiBkZXZpZDsKIAl2b2lkIF9faW9tZW0JCSppb2Jhc2U7CS8qIGFkZHJlc3Mgb2YgdGhlIGRldmljZSAqLwogCXN0cnVjdCBtdXRleAkJbG9jazsJCS8qIGRldi1sZXZlbCBsb2NrICovCiAJc3RydWN0IGllZWU4MDIxMV9odwkqaHc7CQkvKiBJRUVFIDgwMi4xMSBjb21tb24gKi8KQEAgLTI1NSw2ICsyNTgsOCBAQAogCXN0cnVjdCB0YXNrbGV0X3N0cnVjdAlhbmlfdGFza2xldDsJLyogQU5JIGNhbGlicmF0aW9uICovCiAKIAlzdHJ1Y3QgZGVsYXllZF93b3JrCXR4X2NvbXBsZXRlX3dvcms7CisKKwlzdHJ1Y3Qgc3VydmV5X2luZm8Jc3VydmV5OwkJLyogY29sbGVjdGVkIHN1cnZleSBpbmZvICovCiB9OwogCiAjZGVmaW5lIGF0aDVrX2h3X2hhc2Jzc2lkbWFzayhfYWgpIFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9jYXBzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvY2Fwcy5jCmluZGV4IGJlYWU1MTkuLjMxY2FkODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9jYXBzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2NhcHMuYwpAQCAtNDksNyArNDksNiBAQAogCiAJCS8qIFNldCBzdXBwb3J0ZWQgbW9kZXMgKi8KIAkJX19zZXRfYml0KEFSNUtfTU9ERV8xMUEsIGFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX21vZGUpOwotCQlfX3NldF9iaXQoQVI1S19NT0RFXzExQV9UVVJCTywgYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfbW9kZSk7CiAJfSBlbHNlIHsKIAkJLyoKIAkJICogWFhYIFRoZSB0cmFuY2VpdmVyIHN1cHBvcnRzIGZyZXF1ZW5jaWVzIGZyb20gNDkyMCB0byA2MTAwR0h6CkBAIC03NCwxMSArNzMsNiBAQAogCQkJLyogU2V0IHN1cHBvcnRlZCBtb2RlcyAqLwogCQkJX19zZXRfYml0KEFSNUtfTU9ERV8xMUEsCiAJCQkJCWFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX21vZGUpOwotCQkJX19zZXRfYml0KEFSNUtfTU9ERV8xMUFfVFVSQk8sCi0JCQkJCWFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX21vZGUpOwotCQkJaWYgKGFoLT5haF92ZXJzaW9uID09IEFSNUtfQVI1MjEyKQotCQkJCV9fc2V0X2JpdChBUjVLX01PREVfMTFHX1RVUkJPLAotCQkJCQkJYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfbW9kZSk7CiAJCX0KIAogCQkvKiBFbmFibGUgIDgwMi4xMWIgaWYgYSAyR0h6IGNhcGFibGUgcmFkaW8gKDIxMTEvNTExMikgaXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9kZWJ1Zy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2RlYnVnLmMKaW5kZXggYWNkYTU2ZS4uZDJmODRkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2RlYnVnLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2RlYnVnLmMKQEAgLTYwLDcgKzYwLDYgQEAKIAogI2luY2x1ZGUgImJhc2UuaCIKICNpbmNsdWRlICJkZWJ1Zy5oIgotI2luY2x1ZGUgIi4uL2RlYnVnLmgiCiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgYXRoNWtfZGVidWc7CiBtb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsIGF0aDVrX2RlYnVnLCB1aW50LCAwKTsKQEAgLTMxMiw2ICszMTEsNyBAQAogCXsgQVRINUtfREVCVUdfRFVNUF9SWCwJImR1bXByeCIsCSJwcmludCByZWNlaXZlZCBza2IgY29udGVudCIgfSwKIAl7IEFUSDVLX0RFQlVHX0RVTVBfVFgsCSJkdW1wdHgiLAkicHJpbnQgdHJhbnNtaXQgc2tiIGNvbnRlbnQiIH0sCiAJeyBBVEg1S19ERUJVR19EVU1QQkFORFMsICJkdW1wYmFuZHMiLAkiZHVtcCBiYW5kcyIgfSwKKwl7IEFUSDVLX0RFQlVHX0RNQSwJImRtYSIsCQkiZG1hIHN0YXJ0L3N0b3AiIH0sCiAJeyBBVEg1S19ERUJVR19BTkksCSJhbmkiLAkJImFkYXB0aXZlIG5vaXNlIGltbXVuaXR5IiB9LAogCXsgQVRINUtfREVCVUdfREVTQywJImRlc2MiLAkJImRlc2NyaXB0b3IgY2hhaW5zIiB9LAogCXsgQVRINUtfREVCVUdfQU5ZLAkiYWxsIiwJCSJzaG93IGFsbCBkZWJ1ZyBsZXZlbHMiIH0sCkBAIC01NTQsNjMgKzU1NCw2MyBAQAogCiAJbGVuICs9IHNucHJpbnRmKGJ1ZitsZW4sIHNpemVvZihidWYpLWxlbiwKIAkJCSJSWFxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKLQlsZW4gKz0gc25wcmludGYoYnVmK2xlbiwgc2l6ZW9mKGJ1ZiktbGVuLCAiQ1JDXHQlZFx0KCVkJSUpXG4iLAorCWxlbiArPSBzbnByaW50ZihidWYrbGVuLCBzaXplb2YoYnVmKS1sZW4sICJDUkNcdCV1XHQoJXUlJSlcbiIsCiAJCQlzdC0+cnhlcnJfY3JjLAogCQkJc3QtPnJ4X2FsbF9jb3VudCA+IDAgPwogCQkJCXN0LT5yeGVycl9jcmMqMTAwL3N0LT5yeF9hbGxfY291bnQgOiAwKTsKLQlsZW4gKz0gc25wcmludGYoYnVmK2xlbiwgc2l6ZW9mKGJ1ZiktbGVuLCAiUEhZXHQlZFx0KCVkJSUpXG4iLAorCWxlbiArPSBzbnByaW50ZihidWYrbGVuLCBzaXplb2YoYnVmKS1sZW4sICJQSFlcdCV1XHQoJXUlJSlcbiIsCiAJCQlzdC0+cnhlcnJfcGh5LAogCQkJc3QtPnJ4X2FsbF9jb3VudCA+IDAgPwogCQkJCXN0LT5yeGVycl9waHkqMTAwL3N0LT5yeF9hbGxfY291bnQgOiAwKTsKIAlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgewogCQlpZiAoc3QtPnJ4ZXJyX3BoeV9jb2RlW2ldKQogCQkJbGVuICs9IHNucHJpbnRmKGJ1ZitsZW4sIHNpemVvZihidWYpLWxlbiwKLQkJCQkiIHBoeV9lcnJbJWRdXHQlZFxuIiwKKwkJCQkiIHBoeV9lcnJbJXVdXHQldVxuIiwKIAkJCQlpLCBzdC0+cnhlcnJfcGh5X2NvZGVbaV0pOwogCX0KIAotCWxlbiArPSBzbnByaW50ZihidWYrbGVuLCBzaXplb2YoYnVmKS1sZW4sICJGSUZPXHQlZFx0KCVkJSUpXG4iLAorCWxlbiArPSBzbnByaW50ZihidWYrbGVuLCBzaXplb2YoYnVmKS1sZW4sICJGSUZPXHQldVx0KCV1JSUpXG4iLAogCQkJc3QtPnJ4ZXJyX2ZpZm8sCiAJCQlzdC0+cnhfYWxsX2NvdW50ID4gMCA/CiAJCQkJc3QtPnJ4ZXJyX2ZpZm8qMTAwL3N0LT5yeF9hbGxfY291bnQgOiAwKTsKLQlsZW4gKz0gc25wcmludGYoYnVmK2xlbiwgc2l6ZW9mKGJ1ZiktbGVuLCAiZGVjcnlwdFx0JWRcdCglZCUlKVxuIiwKKwlsZW4gKz0gc25wcmludGYoYnVmK2xlbiwgc2l6ZW9mKGJ1ZiktbGVuLCAiZGVjcnlwdFx0JXVcdCgldSUlKVxuIiwKIAkJCXN0LT5yeGVycl9kZWNyeXB0LAogCQkJc3QtPnJ4X2FsbF9jb3VudCA+IDAgPwogCQkJCXN0LT5yeGVycl9kZWNyeXB0KjEwMC9zdC0+cnhfYWxsX2NvdW50IDogMCk7Ci0JbGVuICs9IHNucHJpbnRmKGJ1ZitsZW4sIHNpemVvZihidWYpLWxlbiwgIk1JQ1x0JWRcdCglZCUlKVxuIiwKKwlsZW4gKz0gc25wcmludGYoYnVmK2xlbiwgc2l6ZW9mKGJ1ZiktbGVuLCAiTUlDXHQldVx0KCV1JSUpXG4iLAogCQkJc3QtPnJ4ZXJyX21pYywKIAkJCXN0LT5yeF9hbGxfY291bnQgPiAwID8KIAkJCQlzdC0+cnhlcnJfbWljKjEwMC9zdC0+cnhfYWxsX2NvdW50IDogMCk7Ci0JbGVuICs9IHNucHJpbnRmKGJ1ZitsZW4sIHNpemVvZihidWYpLWxlbiwgInByb2Nlc3NcdCVkXHQoJWQlJSlcbiIsCisJbGVuICs9IHNucHJpbnRmKGJ1ZitsZW4sIHNpemVvZihidWYpLWxlbiwgInByb2Nlc3NcdCV1XHQoJXUlJSlcbiIsCiAJCQlzdC0+cnhlcnJfcHJvYywKIAkJCXN0LT5yeF9hbGxfY291bnQgPiAwID8KIAkJCQlzdC0+cnhlcnJfcHJvYyoxMDAvc3QtPnJ4X2FsbF9jb3VudCA6IDApOwotCWxlbiArPSBzbnByaW50ZihidWYrbGVuLCBzaXplb2YoYnVmKS1sZW4sICJqdW1ib1x0JWRcdCglZCUlKVxuIiwKKwlsZW4gKz0gc25wcmludGYoYnVmK2xlbiwgc2l6ZW9mKGJ1ZiktbGVuLCAianVtYm9cdCV1XHQoJXUlJSlcbiIsCiAJCQlzdC0+cnhlcnJfanVtYm8sCiAJCQlzdC0+cnhfYWxsX2NvdW50ID4gMCA/CiAJCQkJc3QtPnJ4ZXJyX2p1bWJvKjEwMC9zdC0+cnhfYWxsX2NvdW50IDogMCk7Ci0JbGVuICs9IHNucHJpbnRmKGJ1ZitsZW4sIHNpemVvZihidWYpLWxlbiwgIltSWCBhbGxcdCVkXVxuIiwKKwlsZW4gKz0gc25wcmludGYoYnVmK2xlbiwgc2l6ZW9mKGJ1ZiktbGVuLCAiW1JYIGFsbFx0JXVdXG4iLAogCQkJc3QtPnJ4X2FsbF9jb3VudCk7Ci0JbGVuICs9IHNucHJpbnRmKGJ1ZitsZW4sIHNpemVvZihidWYpLWxlbiwgIlJYLWFsbC1ieXRlc1x0JWRcbiIsCisJbGVuICs9IHNucHJpbnRmKGJ1ZitsZW4sIHNpemVvZihidWYpLWxlbiwgIlJYLWFsbC1ieXRlc1x0JXVcbiIsCiAJCQlzdC0+cnhfYnl0ZXNfY291bnQpOwogCiAJbGVuICs9IHNucHJpbnRmKGJ1ZitsZW4sIHNpemVvZihidWYpLWxlbiwKIAkJCSJcblRYXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwotCWxlbiArPSBzbnByaW50ZihidWYrbGVuLCBzaXplb2YoYnVmKS1sZW4sICJyZXRyeVx0JWRcdCglZCUlKVxuIiwKKwlsZW4gKz0gc25wcmludGYoYnVmK2xlbiwgc2l6ZW9mKGJ1ZiktbGVuLCAicmV0cnlcdCV1XHQoJXUlJSlcbiIsCiAJCQlzdC0+dHhlcnJfcmV0cnksCiAJCQlzdC0+dHhfYWxsX2NvdW50ID4gMCA/CiAJCQkJc3QtPnR4ZXJyX3JldHJ5KjEwMC9zdC0+dHhfYWxsX2NvdW50IDogMCk7Ci0JbGVuICs9IHNucHJpbnRmKGJ1ZitsZW4sIHNpemVvZihidWYpLWxlbiwgIkZJRk9cdCVkXHQoJWQlJSlcbiIsCisJbGVuICs9IHNucHJpbnRmKGJ1ZitsZW4sIHNpemVvZihidWYpLWxlbiwgIkZJRk9cdCV1XHQoJXUlJSlcbiIsCiAJCQlzdC0+dHhlcnJfZmlmbywKIAkJCXN0LT50eF9hbGxfY291bnQgPiAwID8KIAkJCQlzdC0+dHhlcnJfZmlmbyoxMDAvc3QtPnR4X2FsbF9jb3VudCA6IDApOwotCWxlbiArPSBzbnByaW50ZihidWYrbGVuLCBzaXplb2YoYnVmKS1sZW4sICJmaWx0ZXJcdCVkXHQoJWQlJSlcbiIsCisJbGVuICs9IHNucHJpbnRmKGJ1ZitsZW4sIHNpemVvZihidWYpLWxlbiwgImZpbHRlclx0JXVcdCgldSUlKVxuIiwKIAkJCXN0LT50eGVycl9maWx0LAogCQkJc3QtPnR4X2FsbF9jb3VudCA+IDAgPwogCQkJCXN0LT50eGVycl9maWx0KjEwMC9zdC0+dHhfYWxsX2NvdW50IDogMCk7Ci0JbGVuICs9IHNucHJpbnRmKGJ1ZitsZW4sIHNpemVvZihidWYpLWxlbiwgIltUWCBhbGxcdCVkXVxuIiwKKwlsZW4gKz0gc25wcmludGYoYnVmK2xlbiwgc2l6ZW9mKGJ1ZiktbGVuLCAiW1RYIGFsbFx0JXVdXG4iLAogCQkJc3QtPnR4X2FsbF9jb3VudCk7Ci0JbGVuICs9IHNucHJpbnRmKGJ1ZitsZW4sIHNpemVvZihidWYpLWxlbiwgIlRYLWFsbC1ieXRlc1x0JWRcbiIsCisJbGVuICs9IHNucHJpbnRmKGJ1ZitsZW4sIHNpemVvZihidWYpLWxlbiwgIlRYLWFsbC1ieXRlc1x0JXVcbiIsCiAJCQlzdC0+dHhfYnl0ZXNfY291bnQpOwogCiAJaWYgKGxlbiA+IHNpemVvZihidWYpKQpAQCAtNzE5LDcgKzcxOSw3IEBACiAJCQlzdC0+bWliX2ludHIpOwogCWxlbiArPSBzbnByaW50ZihidWYrbGVuLCBzaXplb2YoYnVmKS1sZW4sCiAJCQkiYmVhY29uIFJTU0kgYXZlcmFnZTpcdCVkXG4iLAotCQkJc2MtPmFoLT5haF9iZWFjb25fcnNzaV9hdmcuYXZnKTsKKwkJCShpbnQpZXdtYV9yZWFkKCZzYy0+YWgtPmFoX2JlYWNvbl9yc3NpX2F2ZykpOwogCiAjZGVmaW5lIENDX1BSSU5UKF9zdHJ1Y3QsIF9maWVsZCkgXAogCV9zdHJ1Y3QuX2ZpZWxkLCBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvZGVidWcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9kZWJ1Zy5oCmluZGV4IDIzNmVkYmQuLjNlMzQ0MjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9kZWJ1Zy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9kZWJ1Zy5oCkBAIC05NSw2ICs5NSw3IEBACiAgKiBAQVRINUtfREVCVUdfRFVNUF9SWDogcHJpbnQgcmVjZWl2ZWQgc2tiIGNvbnRlbnQKICAqIEBBVEg1S19ERUJVR19EVU1QX1RYOiBwcmludCB0cmFuc21pdCBza2IgY29udGVudAogICogQEFUSDVLX0RFQlVHX0RVTVBCQU5EUzogZHVtcCBiYW5kcworICogQEFUSDVLX0RFQlVHX0RNQTogZGVidWcgZG1hIHN0YXJ0L3N0b3AKICAqIEBBVEg1S19ERUJVR19UUkFDRTogdHJhY2UgZnVuY3Rpb24gY2FsbHMKICAqIEBBVEg1S19ERUJVR19ERVNDOiBkZXNjcmlwdG9yIHNldHVwCiAgKiBAQVRINUtfREVCVUdfQU5ZOiBzaG93IGF0IGFueSBkZWJ1ZyBsZXZlbApAQCAtMTE4LDYgKzExOSw3IEBACiAJQVRINUtfREVCVUdfRFVNUF9SWAk9IDB4MDAwMDAxMDAsCiAJQVRINUtfREVCVUdfRFVNUF9UWAk9IDB4MDAwMDAyMDAsCiAJQVRINUtfREVCVUdfRFVNUEJBTkRTCT0gMHgwMDAwMDQwMCwKKwlBVEg1S19ERUJVR19ETUEJCT0gMHgwMDAwMDgwMCwKIAlBVEg1S19ERUJVR19BTkkJCT0gMHgwMDAwMjAwMCwKIAlBVEg1S19ERUJVR19ERVNDCT0gMHgwMDAwNDAwMCwKIAlBVEg1S19ERUJVR19BTlkJCT0gMHhmZmZmZmZmZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2Rlc2MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9kZXNjLmMKaW5kZXggNDMyNDQzOC4uMTZiNDRmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2Rlc2MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvZGVzYy5jCkBAIC0yNiw5ICsyNiwxMCBAQAogI2luY2x1ZGUgImRlYnVnLmgiCiAjaW5jbHVkZSAiYmFzZS5oIgogCi0vKgotICogVFggRGVzY3JpcHRvcnMKLSAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqXAorKiBUWCBDb250cm9sIGRlc2NyaXB0b3JzICoKK1wqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCiAgKiBJbml0aWFsaXplIHRoZSAyLXdvcmQgdHggY29udHJvbCBkZXNjcmlwdG9yIG9uIDUyMTAvNTIxMQpAQCAtMzM1LDYgKzMzNiwxMSBAQAogCXJldHVybiAwOwogfQogCisKKy8qKioqKioqKioqKioqKioqKioqKioqKlwKKyogVFggU3RhdHVzIGRlc2NyaXB0b3JzICoKK1wqKioqKioqKioqKioqKioqKioqKioqKi8KKwogLyoKICAqIFByb2NjZXNzIHRoZSB0eCBzdGF0dXMgZGVzY3JpcHRvciBvbiA1MjEwLzUyMTEKICAqLwpAQCAtNDc2LDkgKzQ4MiwxMCBAQAogCXJldHVybiAwOwogfQogCi0vKgotICogUlggRGVzY3JpcHRvcnMKLSAqLworCisvKioqKioqKioqKioqKioqKlwKKyogUlggRGVzY3JpcHRvcnMgKgorXCoqKioqKioqKioqKioqKiovCiAKIC8qCiAgKiBJbml0aWFsaXplIGFuIHJ4IGNvbnRyb2wgZGVzY3JpcHRvcgpAQCAtNjY2LDYgKzY3MywxMSBAQAogCXJldHVybiAwOwogfQogCisKKy8qKioqKioqKlwKKyogQXR0YWNoICoKK1wqKioqKioqKi8KKwogLyoKICAqIEluaXQgZnVuY3Rpb24gcG9pbnRlcnMgaW5zaWRlIGF0aDVrX2h3IHN0cnVjdAogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvZGVzYy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2Rlc2MuaAppbmRleCBiMmFkYjJhLi4yNTA5ZDBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvZGVzYy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9kZXNjLmgKQEAgLTI2LDcgKzI2LDcgQEAKIHN0cnVjdCBhdGg1a19od19yeF9jdGwgewogCXUzMglyeF9jb250cm9sXzA7IC8qIFJYIGNvbnRyb2wgd29yZCAwICovCiAJdTMyCXJ4X2NvbnRyb2xfMTsgLyogUlggY29udHJvbCB3b3JkIDEgKi8KLX0gX19wYWNrZWQ7Cit9IF9fcGFja2VkIF9fYWxpZ25lZCg0KTsKIAogLyogUlggY29udHJvbCB3b3JkIDEgZmllbGRzL2ZsYWdzICovCiAjZGVmaW5lIEFSNUtfREVTQ19SWF9DVEwxX0JVRl9MRU4JCTB4MDAwMDBmZmYgLyogZGF0YSBidWZmZXIgbGVuZ3RoICovCkBAIC0zOSw3ICszOSw3IEBACiBzdHJ1Y3QgYXRoNWtfaHdfcnhfc3RhdHVzIHsKIAl1MzIJcnhfc3RhdHVzXzA7IC8qIFJYIHN0YXR1cyB3b3JkIDAgKi8KIAl1MzIJcnhfc3RhdHVzXzE7IC8qIFJYIHN0YXR1cyB3b3JkIDEgKi8KLX0gX19wYWNrZWQ7Cit9IF9fcGFja2VkIF9fYWxpZ25lZCg0KTsKIAogLyogNTIxMC81MjExICovCiAvKiBSWCBzdGF0dXMgd29yZCAwIGZpZWxkcy9mbGFncyAqLwpAQCAtMTI5LDcgKzEyOSw3IEBACiBzdHJ1Y3QgYXRoNWtfaHdfMndfdHhfY3RsIHsKIAl1MzIJdHhfY29udHJvbF8wOyAvKiBUWCBjb250cm9sIHdvcmQgMCAqLwogCXUzMgl0eF9jb250cm9sXzE7IC8qIFRYIGNvbnRyb2wgd29yZCAxICovCi19IF9fcGFja2VkOworfSBfX3BhY2tlZCBfX2FsaWduZWQoNCk7CiAKIC8qIFRYIGNvbnRyb2wgd29yZCAwIGZpZWxkcy9mbGFncyAqLwogI2RlZmluZSBBUjVLXzJXX1RYX0RFU0NfQ1RMMF9GUkFNRV9MRU4JCTB4MDAwMDBmZmYgLyogZnJhbWUgbGVuZ3RoICovCkBAIC0xODUsNyArMTg1LDcgQEAKIAl1MzIJdHhfY29udHJvbF8xOyAvKiBUWCBjb250cm9sIHdvcmQgMSAqLwogCXUzMgl0eF9jb250cm9sXzI7IC8qIFRYIGNvbnRyb2wgd29yZCAyICovCiAJdTMyCXR4X2NvbnRyb2xfMzsgLyogVFggY29udHJvbCB3b3JkIDMgKi8KLX0gX19wYWNrZWQ7Cit9IF9fcGFja2VkIF9fYWxpZ25lZCg0KTsKIAogLyogVFggY29udHJvbCB3b3JkIDAgZmllbGRzL2ZsYWdzICovCiAjZGVmaW5lIEFSNUtfNFdfVFhfREVTQ19DVEwwX0ZSQU1FX0xFTgkJMHgwMDAwMGZmZiAvKiBmcmFtZSBsZW5ndGggKi8KQEAgLTI0NCw3ICsyNDQsNyBAQAogc3RydWN0IGF0aDVrX2h3X3R4X3N0YXR1cyB7CiAJdTMyCXR4X3N0YXR1c18wOyAvKiBUWCBzdGF0dXMgd29yZCAwICovCiAJdTMyCXR4X3N0YXR1c18xOyAvKiBUWCBzdGF0dXMgd29yZCAxICovCi19IF9fcGFja2VkOworfSBfX3BhY2tlZCBfX2FsaWduZWQoNCk7CiAKIC8qIFRYIHN0YXR1cyB3b3JkIDAgZmllbGRzL2ZsYWdzICovCiAjZGVmaW5lIEFSNUtfREVTQ19UWF9TVEFUVVMwX0ZSQU1FX1hNSVRfT0sJMHgwMDAwMDAwMSAvKiBUWCBzdWNjZXNzICovCkBAIC0yODIsNyArMjgyLDcgQEAKIHN0cnVjdCBhdGg1a19od181MjEwX3R4X2Rlc2MgewogCXN0cnVjdCBhdGg1a19od18yd190eF9jdGwJdHhfY3RsOwogCXN0cnVjdCBhdGg1a19od190eF9zdGF0dXMJdHhfc3RhdDsKLX0gX19wYWNrZWQ7Cit9IF9fcGFja2VkIF9fYWxpZ25lZCg0KTsKIAogLyoKICAqIDUyMTIgaGFyZHdhcmUgVFggZGVzY3JpcHRvcgpAQCAtMjkwLDcgKzI5MCw3IEBACiBzdHJ1Y3QgYXRoNWtfaHdfNTIxMl90eF9kZXNjIHsKIAlzdHJ1Y3QgYXRoNWtfaHdfNHdfdHhfY3RsCXR4X2N0bDsKIAlzdHJ1Y3QgYXRoNWtfaHdfdHhfc3RhdHVzCXR4X3N0YXQ7Ci19IF9fcGFja2VkOworfSBfX3BhY2tlZCBfX2FsaWduZWQoNCk7CiAKIC8qCiAgKiBDb21tb24gaGFyZHdhcmUgUlggZGVzY3JpcHRvcgpAQCAtMjk4LDcgKzI5OCw3IEBACiBzdHJ1Y3QgYXRoNWtfaHdfYWxsX3J4X2Rlc2MgewogCXN0cnVjdCBhdGg1a19od19yeF9jdGwJCXJ4X2N0bDsKIAlzdHJ1Y3QgYXRoNWtfaHdfcnhfc3RhdHVzCXJ4X3N0YXQ7Ci19IF9fcGFja2VkOworfSBfX3BhY2tlZCBfX2FsaWduZWQoNCk7CiAKIC8qCiAgKiBBdGhlcm9zIGhhcmR3YXJlIERNQSBkZXNjcmlwdG9yCkBAIC0zMTMsNyArMzEzLDcgQEAKIAkJc3RydWN0IGF0aDVrX2h3XzUyMTJfdHhfZGVzYwlkc190eDUyMTI7CiAJCXN0cnVjdCBhdGg1a19od19hbGxfcnhfZGVzYwlkc19yeDsKIAl9IHVkOwotfSBfX3BhY2tlZDsKK30gX19wYWNrZWQgX19hbGlnbmVkKDQpOwogCiAjZGVmaW5lIEFSNUtfUlhERVNDX0lOVFJFUQkweDAwMjAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2RtYS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2RtYS5jCmluZGV4IDkyM2M5Y2EuLjAwNjRiZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9kbWEuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvZG1hLmMKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJkZWJ1Zy5oIgogI2luY2x1ZGUgImJhc2UuaCIKIAorCiAvKioqKioqKioqXAogKiBSZWNlaXZlICoKIFwqKioqKioqKiovCkBAIC01Nyw3ICs1OCw3IEBACiAgKgogICogQGFoOglUaGUgJnN0cnVjdCBhdGg1a19odwogICovCi1pbnQgYXRoNWtfaHdfc3RvcF9yeF9kbWEoc3RydWN0IGF0aDVrX2h3ICphaCkKK3N0YXRpYyBpbnQgYXRoNWtfaHdfc3RvcF9yeF9kbWEoc3RydWN0IGF0aDVrX2h3ICphaCkKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIApAQCAtNjksNyArNzAsMTEgQEAKIAlmb3IgKGkgPSAxMDAwOyBpID4gMCAmJgogCQkJKGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX0NSKSAmIEFSNUtfQ1JfUlhFKSAhPSAwOwogCQkJaS0tKQotCQl1ZGVsYXkoMTApOworCQl1ZGVsYXkoMTAwKTsKKworCWlmICghaSkKKwkJQVRINUtfREJHKGFoLT5haF9zYywgQVRINUtfREVCVUdfRE1BLAorCQkJCSJmYWlsZWQgdG8gc3RvcCBSWCBETUEgIVxuIik7CiAKIAlyZXR1cm4gaSA/IDAgOiAtRUJVU1k7CiB9CkBAIC05MCwxMSArOTUsMTggQEAKICAqIEBhaDogVGhlICZzdHJ1Y3QgYXRoNWtfaHcKICAqIEBwaHlzX2FkZHI6IFJYIGRlc2NyaXB0b3IgYWRkcmVzcwogICoKLSAqIFhYWDogU2hvdWxkIHdlIGNoZWNrIGlmIHJ4IGlzIGVuYWJsZWQgYmVmb3JlIHNldHRpbmcgcnhkcCA/CisgKiBSZXR1cm5zIC1FSU8gaWYgcnggaXMgYWN0aXZlCiAgKi8KLXZvaWQgYXRoNWtfaHdfc2V0X3J4ZHAoc3RydWN0IGF0aDVrX2h3ICphaCwgdTMyIHBoeXNfYWRkcikKK2ludCBhdGg1a19od19zZXRfcnhkcChzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1MzIgcGh5c19hZGRyKQogeworCWlmIChhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19DUikgJiBBUjVLX0NSX1JYRSkgeworCQlBVEg1S19EQkcoYWgtPmFoX3NjLCBBVEg1S19ERUJVR19ETUEsCisJCQkJInRyaWVkIHRvIHNldCBSWERQIHdoaWxlIHJ4IHdhcyBhY3RpdmUgIVxuIik7CisJCXJldHVybiAtRUlPOworCX0KKwogCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgcGh5c19hZGRyLCBBUjVLX1JYRFApOworCXJldHVybiAwOwogfQogCiAKQEAgLTEyNSw3ICsxMzcsNyBAQAogCiAJLyogUmV0dXJuIGlmIHF1ZXVlIGlzIGRlY2xhcmVkIGluYWN0aXZlICovCiAJaWYgKGFoLT5haF90eHFbcXVldWVdLnRxaV90eXBlID09IEFSNUtfVFhfUVVFVUVfSU5BQ1RJVkUpCi0JCXJldHVybiAtRUlPOworCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChhaC0+YWhfdmVyc2lvbiA9PSBBUjVLX0FSNTIxMCkgewogCQl0eF9xdWV1ZSA9IGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX0NSKTsKQEAgLTE3MywxMCArMTg1LDEwIEBACiAgKgogICogU3RvcCBETUEgdHJhbnNtaXQgb24gYSBzcGVjaWZpYyBodyBxdWV1ZSBhbmQgZHJhaW4gcXVldWUgc28gd2UgZG9uJ3QKICAqIGhhdmUgYW55IHBlbmRpbmcgZnJhbWVzLiBSZXR1cm5zIC1FQlVTWSBpZiB3ZSBzdGlsbCBoYXZlIHBlbmRpbmcgZnJhbWVzLAotICogLUVJTlZBTCBpZiBxdWV1ZSBudW1iZXIgaXMgb3V0IG9mIHJhbmdlLgorICogLUVJTlZBTCBpZiBxdWV1ZSBudW1iZXIgaXMgb3V0IG9mIHJhbmdlIG9yIGluYWN0aXZlLgogICoKICAqLwotaW50IGF0aDVrX2h3X3N0b3BfdHhfZG1hKHN0cnVjdCBhdGg1a19odyAqYWgsIHVuc2lnbmVkIGludCBxdWV1ZSkKK3N0YXRpYyBpbnQgYXRoNWtfaHdfc3RvcF90eF9kbWEoc3RydWN0IGF0aDVrX2h3ICphaCwgdW5zaWduZWQgaW50IHF1ZXVlKQogewogCXVuc2lnbmVkIGludCBpID0gNDA7CiAJdTMyIHR4X3F1ZXVlLCBwZW5kaW5nOwpAQCAtMTg1LDcgKzE5Nyw3IEBACiAKIAkvKiBSZXR1cm4gaWYgcXVldWUgaXMgZGVjbGFyZWQgaW5hY3RpdmUgKi8KIAlpZiAoYWgtPmFoX3R4cVtxdWV1ZV0udHFpX3R5cGUgPT0gQVI1S19UWF9RVUVVRV9JTkFDVElWRSkKLQkJcmV0dXJuIC1FSU87CisJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGFoLT5haF92ZXJzaW9uID09IEFSNUtfQVI1MjEwKSB7CiAJCXR4X3F1ZXVlID0gYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfQ1IpOwpAQCAtMjExLDEyICsyMjMsMzEgQEAKIAkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCB0eF9xdWV1ZSwgQVI1S19DUik7CiAJCWF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX0NSKTsKIAl9IGVsc2UgeworCisJCS8qCisJCSAqIEVuYWJsZSBEQ1UgZWFybHkgdGVybWluYXRpb24gdG8gcXVpY2tseQorCQkgKiBmbHVzaCBhbnkgcGVuZGluZyBmcmFtZXMgZnJvbSBRQ1UKKwkJICovCisJCUFSNUtfUkVHX0VOQUJMRV9CSVRTKGFoLCBBUjVLX1FVRVVFX01JU0MocXVldWUpLAorCQkJCQlBUjVLX1FDVV9NSVNDX0RDVV9FQVJMWSk7CisKIAkJLyoKIAkJICogU2NoZWR1bGUgVFggZGlzYWJsZSBhbmQgd2FpdCB1bnRpbCBxdWV1ZSBpcyBlbXB0eQogCQkgKi8KIAkJQVI1S19SRUdfV1JJVEVfUShhaCwgQVI1S19RQ1VfVFhELCBxdWV1ZSk7CiAKLQkJLypDaGVjayBmb3IgcGVuZGluZyBmcmFtZXMqLworCQkvKiBXYWl0IGZvciBxdWV1ZSB0byBzdG9wICovCisJCWZvciAoaSA9IDEwMDA7IGkgPiAwICYmCisJCShBUjVLX1JFR19SRUFEX1EoYWgsIEFSNUtfUUNVX1RYRSwgcXVldWUpICE9IDApOworCQlpLS0pCisJCQl1ZGVsYXkoMTAwKTsKKworCQlpZiAoQVI1S19SRUdfUkVBRF9RKGFoLCBBUjVLX1FDVV9UWEUsIHF1ZXVlKSkKKwkJCUFUSDVLX0RCRyhhaC0+YWhfc2MsIEFUSDVLX0RFQlVHX0RNQSwKKwkJCQkicXVldWUgJWkgZGlkbid0IHN0b3AgIVxuIiwgcXVldWUpOworCisJCS8qIENoZWNrIGZvciBwZW5kaW5nIGZyYW1lcyAqLworCQlpID0gMTAwMDsKIAkJZG8gewogCQkJcGVuZGluZyA9IGF0aDVrX2h3X3JlZ19yZWFkKGFoLAogCQkJCUFSNUtfUVVFVUVfU1RBVFVTKHF1ZXVlKSkgJgpAQCAtMjQ3LDEyICsyNzgsMTIgQEAKIAkJCQkJQVI1S19ESUFHX1NXX0NIQU5ORUxfSURMRV9ISUdIKTsKIAogCQkJLyogV2FpdCBhIHdoaWxlIGFuZCBkaXNhYmxlIG1lY2hhbmlzbSAqLwotCQkJdWRlbGF5KDIwMCk7CisJCQl1ZGVsYXkoNDAwKTsKIAkJCUFSNUtfUkVHX0RJU0FCTEVfQklUUyhhaCwgQVI1S19RVUlFVF9DVEwxLAogCQkJCQkJQVI1S19RVUlFVF9DVEwxX1FUX0VOKTsKIAogCQkJLyogUmUtY2hlY2sgZm9yIHBlbmRpbmcgZnJhbWVzICovCi0JCQlpID0gNDA7CisJCQlpID0gMTAwOwogCQkJZG8gewogCQkJCXBlbmRpbmcgPSBhdGg1a19od19yZWdfcmVhZChhaCwKIAkJCQkJQVI1S19RVUVVRV9TVEFUVVMocXVldWUpKSAmCkBAIC0yNjIsMTIgKzI5MywyNyBAQAogCiAJCQlBUjVLX1JFR19ESVNBQkxFX0JJVFMoYWgsIEFSNUtfRElBR19TV181MjExLAogCQkJCQlBUjVLX0RJQUdfU1dfQ0hBTk5FTF9JRExFX0hJR0gpOworCisJCQlpZiAocGVuZGluZykKKwkJCQlBVEg1S19EQkcoYWgtPmFoX3NjLCBBVEg1S19ERUJVR19ETUEsCisJCQkJCSJxdWlldCBtZWNoYW5pc20gZGlkbid0IHdvcmsgcTolaSAhXG4iLAorCQkJCQlxdWV1ZSk7CiAJCX0KIAorCQkvKgorCQkgKiBEaXNhYmxlIERDVSBlYXJseSB0ZXJtaW5hdGlvbgorCQkgKi8KKwkJQVI1S19SRUdfRElTQUJMRV9CSVRTKGFoLCBBUjVLX1FVRVVFX01JU0MocXVldWUpLAorCQkJCQlBUjVLX1FDVV9NSVNDX0RDVV9FQVJMWSk7CisKIAkJLyogQ2xlYXIgcmVnaXN0ZXIgKi8KIAkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAwLCBBUjVLX1FDVV9UWEQpOwotCQlpZiAocGVuZGluZykKKwkJaWYgKHBlbmRpbmcpIHsKKwkJCUFUSDVLX0RCRyhhaC0+YWhfc2MsIEFUSDVLX0RFQlVHX0RNQSwKKwkJCQkJInR4IGRtYSBkaWRuJ3Qgc3RvcCAocTolaSwgZnJtOiVpKSAhXG4iLAorCQkJCQlxdWV1ZSwgcGVuZGluZyk7CiAJCQlyZXR1cm4gLUVCVVNZOworCQl9CiAJfQogCiAJLyogVE9ETzogQ2hlY2sgZm9yIHN1Y2Nlc3Mgb24gNTIxMCBlbHNlIHJldHVybiBlcnJvciAqLwpAQCAtMjc1LDYgKzMyMSwyNiBAQAogfQogCiAvKioKKyAqIGF0aDVrX2h3X3N0b3BfYmVhY29uX3F1ZXVlIC0gU3RvcCBiZWFjb24gcXVldWUKKyAqCisgKiBAYWggVGhlICZzdHJ1Y3QgYXRoNWtfaHcKKyAqIEBxdWV1ZSBUaGUgcXVldWUgbnVtYmVyCisgKgorICogUmV0dXJucyAtRUlPIGlmIHF1ZXVlIGRpZG4ndCBzdG9wCisgKi8KK2ludCBhdGg1a19od19zdG9wX2JlYWNvbl9xdWV1ZShzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1bnNpZ25lZCBpbnQgcXVldWUpCit7CisJaW50IHJldDsKKwlyZXQgPSBhdGg1a19od19zdG9wX3R4X2RtYShhaCwgcXVldWUpOworCWlmIChyZXQpIHsKKwkJQVRINUtfREJHKGFoLT5haF9zYywgQVRINUtfREVCVUdfRE1BLAorCQkJCSJiZWFjb24gcXVldWUgZGlkbid0IHN0b3AgIVxuIik7CisJCXJldHVybiAtRUlPOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCiAgKiBhdGg1a19od19nZXRfdHhkcCAtIEdldCBUWCBEZXNjcmlwdG9yJ3MgYWRkcmVzcyBmb3IgYSBzcGVjaWZpYyBxdWV1ZQogICoKICAqIEBhaDogVGhlICZzdHJ1Y3QgYXRoNWtfaHcKQEAgLTQyNyw2ICs0OTMsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKKwogLyoqKioqKioqKioqKioqKioqKipcCiAqIEludGVycnVwdCBtYXNraW5nICoKIFwqKioqKioqKioqKioqKioqKioqLwpAQCAtNjg4LDMgKzc1NSw5MiBAQAogCXJldHVybiBvbGRfbWFzazsKIH0KIAorCisvKioqKioqKioqKioqKioqKioqKipcCisgSW5pdC9TdG9wIGZ1bmN0aW9ucworXCoqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIGF0aDVrX2h3X2RtYV9pbml0IC0gSW5pdGlhbGl6ZSBETUEgdW5pdAorICoKKyAqIEBhaDogVGhlICZzdHJ1Y3QgYXRoNWtfaHcKKyAqCisgKiBTZXQgRE1BIHNpemUgYW5kIHByZS1lbmFibGUgaW50ZXJydXB0cworICogKGRyaXZlciBoYW5kbGVzIHR4L3J4IGJ1ZmZlciBzZXR1cCBhbmQKKyAqIGRtYSBzdGFydC9zdG9wKQorICoKKyAqIFhYWDogU2F2ZS9yZXN0b3JlIFJYRFAvVFhEUCByZWdpc3RlcnMgPworICovCit2b2lkIGF0aDVrX2h3X2RtYV9pbml0KHN0cnVjdCBhdGg1a19odyAqYWgpCit7CisJLyoKKwkgKiBTZXQgUngvVHggRE1BIENvbmZpZ3VyYXRpb24KKwkgKgorCSAqIFNldCBzdGFuZGFyZCBETUEgc2l6ZSAoMTI4KS4gTm90ZSB0aGF0CisJICogYSBETUEgc2l6ZSBvZiA1MTIgY2F1c2VzIHJ4IG92ZXJydW5zIGFuZCB0eCBlcnJvcnMKKwkgKiBvbiBwY2ktZSBjYXJkcyAodGVzdGVkIG9uIDU0MjQgYnV0IHNpbmNlIHJ4IG92ZXJydW5zCisJICogYWxzbyBvY2N1ciBvbiA1NDE2LzU0MTggd2l0aCBtYWR3aWZpIHdlIHNldCAxMjgKKwkgKiBmb3IgYWxsIFBDSS1FIGNhcmRzIHRvIGJlIHNhZmUpLgorCSAqCisJICogWFhYOiBuZWVkIHRvIGNoZWNrIDUyMTAgZm9yIHRoaXMKKwkgKiBUT0RPOiBDaGVjayBvdXQgdHggdHJpZ2VyIGxldmVsLCBpdCdzIGFsd2F5cyA2NCBvbiBkdW1wcyBidXQgSQorCSAqIGd1ZXNzIHdlIGNhbiB0d2VhayBpdCBhbmQgc2VlIGhvdyBpdCBnb2VzIDstKQorCSAqLworCWlmIChhaC0+YWhfdmVyc2lvbiAhPSBBUjVLX0FSNTIxMCkgeworCQlBUjVLX1JFR19XUklURV9CSVRTKGFoLCBBUjVLX1RYQ0ZHLAorCQkJQVI1S19UWENGR19TRE1BTVIsIEFSNUtfRE1BU0laRV8xMjhCKTsKKwkJQVI1S19SRUdfV1JJVEVfQklUUyhhaCwgQVI1S19SWENGRywKKwkJCUFSNUtfUlhDRkdfU0RNQU1XLCBBUjVLX0RNQVNJWkVfMTI4Qik7CisJfQorCisJLyogUHJlLWVuYWJsZSBpbnRlcnJ1cHRzIG9uIDUyMTEvNTIxMiovCisJaWYgKGFoLT5haF92ZXJzaW9uICE9IEFSNUtfQVI1MjEwKQorCQlhdGg1a19od19zZXRfaW1yKGFoLCBhaC0+YWhfaW1yKTsKKworfQorCisvKioKKyAqIGF0aDVrX2h3X2RtYV9zdG9wIC0gc3RvcCBETUEgdW5pdAorICoKKyAqIEBhaDogVGhlICZzdHJ1Y3QgYXRoNWtfaHcKKyAqCisgKiBTdG9wIHR4L3J4IERNQSBhbmQgaW50ZXJydXB0cy4gUmV0dXJucworICogLUVCVVNZIGlmIHR4IG9yIHJ4IGRtYSBmYWlsZWQgdG8gc3RvcC4KKyAqCisgKiBYWFg6IFNvbWV0aW1lcyBETUEgdW5pdCBoYW5ncyBhbmQgd2UgaGF2ZQorICogc3R1Y2sgZnJhbWVzIG9uIHR4IHF1ZXVlcywgb25seSBhIHJlc2V0CisgKiBjYW4gZml4IHRoYXQuCisgKi8KK2ludCBhdGg1a19od19kbWFfc3RvcChzdHJ1Y3QgYXRoNWtfaHcgKmFoKQoreworCWludCBpLCBxbWF4LCBlcnI7CisJZXJyID0gMDsKKworCS8qIERpc2FibGUgaW50ZXJydXB0cyAqLworCWF0aDVrX2h3X3NldF9pbXIoYWgsIDApOworCisJLyogU3RvcCByeCBkbWEgKi8KKwllcnIgPSBhdGg1a19od19zdG9wX3J4X2RtYShhaCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCS8qIENsZWFyIGFueSBwZW5kaW5nIGludGVycnVwdHMKKwkgKiBhbmQgZGlzYWJsZSB0eCBkbWEgKi8KKwlpZiAoYWgtPmFoX3ZlcnNpb24gIT0gQVI1S19BUjUyMTApIHsKKwkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweGZmZmZmZmZmLCBBUjVLX1BJU1IpOworCQlxbWF4ID0gQVI1S19OVU1fVFhfUVVFVUVTOworCX0gZWxzZSB7CisJCS8qIFBJU1IvU0lTUiBOb3QgYXZhaWxhYmxlIG9uIDUyMTAgKi8KKwkJYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfSVNSKTsKKwkJcW1heCA9IEFSNUtfTlVNX1RYX1FVRVVFU19OT1FDVTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgcW1heDsgaSsrKSB7CisJCWVyciA9IGF0aDVrX2h3X3N0b3BfdHhfZG1hKGFoLCBpKTsKKwkJLyogLUVJTlZBTCAtPiBxdWV1ZSBpbmFjdGl2ZSAqLworCQlpZiAoZXJyICE9IC1FSU5WQUwpCisJCQlyZXR1cm4gZXJyOworCX0KKworCXJldHVybiBlcnI7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvZWVwcm9tLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvZWVwcm9tLmMKaW5kZXggMzk3MjJkZC4uODBlNjI1NjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9lZXByb20uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvZWVwcm9tLmMKQEAgLTI4LDQ1ICsyOCwxNiBAQAogI2luY2x1ZGUgImRlYnVnLmgiCiAjaW5jbHVkZSAiYmFzZS5oIgogCi0vKgotICogUmVhZCBmcm9tIGVlcHJvbQotICovCi1zdGF0aWMgaW50IGF0aDVrX2h3X2VlcHJvbV9yZWFkKHN0cnVjdCBhdGg1a19odyAqYWgsIHUzMiBvZmZzZXQsIHUxNiAqZGF0YSkKLXsKLQl1MzIgc3RhdHVzLCB0aW1lb3V0OwogCi0JLyoKLQkgKiBJbml0aWFsaXplIEVFUFJPTSBhY2Nlc3MKLQkgKi8KLQlpZiAoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUyMTApIHsKLQkJQVI1S19SRUdfRU5BQkxFX0JJVFMoYWgsIEFSNUtfUENJQ0ZHLCBBUjVLX1BDSUNGR19FRUFFKTsKLQkJKHZvaWQpYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfRUVQUk9NX0JBU0UgKyAoNCAqIG9mZnNldCkpOwotCX0gZWxzZSB7Ci0JCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgb2Zmc2V0LCBBUjVLX0VFUFJPTV9CQVNFKTsKLQkJQVI1S19SRUdfRU5BQkxFX0JJVFMoYWgsIEFSNUtfRUVQUk9NX0NNRCwKLQkJCQlBUjVLX0VFUFJPTV9DTURfUkVBRCk7Ci0JfQotCi0JZm9yICh0aW1lb3V0ID0gQVI1S19UVU5FX1JFR0lTVEVSX1RJTUVPVVQ7IHRpbWVvdXQgPiAwOyB0aW1lb3V0LS0pIHsKLQkJc3RhdHVzID0gYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfRUVQUk9NX1NUQVRVUyk7Ci0JCWlmIChzdGF0dXMgJiBBUjVLX0VFUFJPTV9TVEFUX1JERE9ORSkgewotCQkJaWYgKHN0YXR1cyAmIEFSNUtfRUVQUk9NX1NUQVRfUkRFUlIpCi0JCQkJcmV0dXJuIC1FSU87Ci0JCQkqZGF0YSA9ICh1MTYpKGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX0VFUFJPTV9EQVRBKSAmCi0JCQkJCTB4ZmZmZik7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCQl1ZGVsYXkoMTUpOwotCX0KLQotCXJldHVybiAtRVRJTUVET1VUOwotfQorLyoqKioqKioqKioqKioqKioqKlwKKyogSGVscGVyIGZ1bmN0aW9ucyAqCitcKioqKioqKioqKioqKioqKioqLwogCiAvKgogICogVHJhbnNsYXRlIGJpbmFyeSBjaGFubmVsIHJlcHJlc2VudGF0aW9uIGluIEVFUFJPTSB0byBmcmVxdWVuY3kKICAqLwogc3RhdGljIHUxNiBhdGg1a19lZXByb21fYmluMmZyZXEoc3RydWN0IGF0aDVrX2VlcHJvbV9pbmZvICplZSwgdTE2IGJpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBtb2RlKQorCQkJCQkJCXVuc2lnbmVkIGludCBtb2RlKQogewogCXUxNiB2YWw7CiAKQEAgLTg5LDYgKzYwLDExIEBACiAJcmV0dXJuIHZhbDsKIH0KIAorCisvKioqKioqKioqXAorKiBQYXJzZXJzICoKK1wqKioqKioqKiovCisKIC8qCiAgKiBJbml0aWFsaXplIGVlcHJvbSAmIGNhcGFiaWxpdGllcyBzdHJ1Y3RzCiAgKi8KQEAgLTE5OCw3ICsxNzQsNyBAQAogCSAqCiAJICogWFhYOiBTZXJkZXMgdmFsdWVzIHNlZW0gdG8gYmUgZml4ZWQgc28KIAkgKiBubyBuZWVkIHRvIHJlYWQgdGhlbSBoZXJlLCB3ZSB3cml0ZSB0aGVtCi0JICogZHVyaW5nIGF0aDVrX2h3X2F0dGFjaCAqLworCSAqIGR1cmluZyBhdGg1a19od19pbml0ICovCiAJQVI1S19FRVBST01fUkVBRChBUjVLX0VFUFJPTV9QQ0lFX09GRlNFVCwgdmFsKTsKIAllZS0+ZWVfc2VyZGVzID0gKHZhbCA9PSBBUjVLX0VFUFJPTV9QQ0lFX1NFUkRFU19TRUNUSU9OKSA/CiAJCQkJCQkJdHJ1ZSA6IGZhbHNlOwpAQCAtNjQ3LDYgKzYyMyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKKwogLyoKICAqIFJlYWQgcG93ZXIgY2FsaWJyYXRpb24gZm9yIFJGNTExMSBjaGlwcwogICoKQEAgLTE1MTQsNiArMTQ5MSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKKwogLyoKICAqIFJlYWQgcGVyIGNoYW5uZWwgY2FsaWJyYXRpb24gaW5mbyBmcm9tIEVFUFJPTQogICoKQEAgLTE2MDcsMTUgKzE1ODUsNiBAQAogCXJldHVybiAwOwogfQogCi12b2lkCi1hdGg1a19lZXByb21fZGV0YWNoKHN0cnVjdCBhdGg1a19odyAqYWgpCi17Ci0JdTggbW9kZTsKLQotCWZvciAobW9kZSA9IEFSNUtfRUVQUk9NX01PREVfMTFBOyBtb2RlIDw9IEFSNUtfRUVQUk9NX01PREVfMTFHOyBtb2RlKyspCi0JCWF0aDVrX2VlcHJvbV9mcmVlX3BjYWxfaW5mbyhhaCwgbW9kZSk7Ci19Ci0KIC8qIFJlYWQgY29uZm9ybWFuY2UgdGVzdCBsaW1pdHMgdXNlZCBmb3IgcmVndWxhdG9yeSBjb250cm9sICovCiBzdGF0aWMgaW50CiBhdGg1a19lZXByb21fcmVhZF9jdGxfaW5mbyhzdHJ1Y3QgYXRoNWtfaHcgKmFoKQpAQCAtMTc1Nyw2ICsxNzI2LDQ0IEBACiB9CiAKIC8qCisgKiBSZWFkIHRoZSBNQUMgYWRkcmVzcyBmcm9tIGVlcHJvbQorICovCitpbnQgYXRoNWtfZWVwcm9tX3JlYWRfbWFjKHN0cnVjdCBhdGg1a19odyAqYWgsIHU4ICptYWMpCit7CisJdTggbWFjX2RbRVRIX0FMRU5dID0ge307CisJdTMyIHRvdGFsLCBvZmZzZXQ7CisJdTE2IGRhdGE7CisJaW50IG9jdGV0LCByZXQ7CisKKwlyZXQgPSBhdGg1a19od19udnJhbV9yZWFkKGFoLCAweDIwLCAmZGF0YSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWZvciAob2Zmc2V0ID0gMHgxZiwgb2N0ZXQgPSAwLCB0b3RhbCA9IDA7IG9mZnNldCA+PSAweDFkOyBvZmZzZXQtLSkgeworCQlyZXQgPSBhdGg1a19od19udnJhbV9yZWFkKGFoLCBvZmZzZXQsICZkYXRhKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJdG90YWwgKz0gZGF0YTsKKwkJbWFjX2Rbb2N0ZXQgKyAxXSA9IGRhdGEgJiAweGZmOworCQltYWNfZFtvY3RldF0gPSBkYXRhID4+IDg7CisJCW9jdGV0ICs9IDI7CisJfQorCisJaWYgKCF0b3RhbCB8fCB0b3RhbCA9PSAzICogMHhmZmZmKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW1lbWNweShtYWMsIG1hY19kLCBFVEhfQUxFTik7CisKKwlyZXR1cm4gMDsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKipcCisqIEluaXQvRGV0YWNoIGZ1bmN0aW9ucyAqCitcKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCiAgKiBJbml0aWFsaXplIGVlcHJvbSBkYXRhIHN0cnVjdHVyZQogICovCiBpbnQKQEAgLTE3ODcsMzUgKzE3OTQsMjcgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIFJlYWQgdGhlIE1BQyBhZGRyZXNzIGZyb20gZWVwcm9tCi0gKi8KLWludCBhdGg1a19lZXByb21fcmVhZF9tYWMoc3RydWN0IGF0aDVrX2h3ICphaCwgdTggKm1hYykKK3ZvaWQKK2F0aDVrX2VlcHJvbV9kZXRhY2goc3RydWN0IGF0aDVrX2h3ICphaCkKIHsKLQl1OCBtYWNfZFtFVEhfQUxFTl0gPSB7fTsKLQl1MzIgdG90YWwsIG9mZnNldDsKLQl1MTYgZGF0YTsKLQlpbnQgb2N0ZXQsIHJldDsKKwl1OCBtb2RlOwogCi0JcmV0ID0gYXRoNWtfaHdfZWVwcm9tX3JlYWQoYWgsIDB4MjAsICZkYXRhKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OworCWZvciAobW9kZSA9IEFSNUtfRUVQUk9NX01PREVfMTFBOyBtb2RlIDw9IEFSNUtfRUVQUk9NX01PREVfMTFHOyBtb2RlKyspCisJCWF0aDVrX2VlcHJvbV9mcmVlX3BjYWxfaW5mbyhhaCwgbW9kZSk7Cit9CiAKLQlmb3IgKG9mZnNldCA9IDB4MWYsIG9jdGV0ID0gMCwgdG90YWwgPSAwOyBvZmZzZXQgPj0gMHgxZDsgb2Zmc2V0LS0pIHsKLQkJcmV0ID0gYXRoNWtfaHdfZWVwcm9tX3JlYWQoYWgsIG9mZnNldCwgJmRhdGEpOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsKLQotCQl0b3RhbCArPSBkYXRhOwotCQltYWNfZFtvY3RldCArIDFdID0gZGF0YSAmIDB4ZmY7Ci0JCW1hY19kW29jdGV0XSA9IGRhdGEgPj4gODsKLQkJb2N0ZXQgKz0gMjsKK2ludAorYXRoNWtfZWVwcm9tX21vZGVfZnJvbV9jaGFubmVsKHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCkKK3sKKwlzd2l0Y2ggKGNoYW5uZWwtPmh3X3ZhbHVlICYgQ0hBTk5FTF9NT0RFUykgeworCWNhc2UgQ0hBTk5FTF9BOgorCWNhc2UgQ0hBTk5FTF9YUjoKKwkJcmV0dXJuIEFSNUtfRUVQUk9NX01PREVfMTFBOworCWNhc2UgQ0hBTk5FTF9HOgorCQlyZXR1cm4gQVI1S19FRVBST01fTU9ERV8xMUc7CisJY2FzZSBDSEFOTkVMX0I6CisJCXJldHVybiBBUjVLX0VFUFJPTV9NT0RFXzExQjsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLTE7CiAJfQotCi0JaWYgKCF0b3RhbCB8fCB0b3RhbCA9PSAzICogMHhmZmZmKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCW1lbWNweShtYWMsIG1hY19kLCBFVEhfQUxFTik7Ci0KLQlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9lZXByb20uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9lZXByb20uaAppbmRleCBjNGE2ZDVmLi43YzA5ZTE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvZWVwcm9tLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2VlcHJvbS5oCkBAIC0yNDEsNyArMjQxLDcgQEAKICNkZWZpbmUJQVI1S19TUFVSX1NZTUJPTF9XSURUSF9UVVJCT18xMDBIegk2MjUwCiAKICNkZWZpbmUgQVI1S19FRVBST01fUkVBRChfbywgX3YpIGRvIHsJCQlcCi0JcmV0ID0gYXRoNWtfaHdfZWVwcm9tX3JlYWQoYWgsIChfbyksICYoX3YpKTsJXAorCXJldCA9IGF0aDVrX2h3X252cmFtX3JlYWQoYWgsIChfbyksICYoX3YpKTsJXAogCWlmIChyZXQpCQkJCQlcCiAJCXJldHVybiByZXQ7CQkJCVwKIH0gd2hpbGUgKDApCkBAIC01MTcsMyArNTE3LDUgQEAKIAl1MzIJZWVfYW50ZW5uYVtBUjVLX0VFUFJPTV9OX01PREVTXVtBUjVLX0FOVF9NQVhdOwogfTsKIAoraW50CithdGg1a19lZXByb21fbW9kZV9mcm9tX2NoYW5uZWwoc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9pbml0dmFscy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2luaXR2YWxzLmMKaW5kZXggOGZhNDM5My4uZTQ5MzQwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2luaXR2YWxzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2luaXR2YWxzLmMKQEAgLTQ0LDcgKzQ0LDcgQEAKIAogc3RydWN0IGF0aDVrX2luaV9tb2RlIHsKIAl1MTYJbW9kZV9yZWdpc3RlcjsKLQl1MzIJbW9kZV92YWx1ZVs1XTsKKwl1MzIJbW9kZV92YWx1ZVszXTsKIH07CiAKIC8qIEluaXRpYWwgcmVnaXN0ZXIgc2V0dGluZ3MgZm9yIEFSNTIxMCAqLwpAQCAtMzkxLDc2ICszOTEsNzQgQEAKICAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmlfbW9kZSBhcjUyMTFfaW5pX21vZGVbXSA9IHsKIAl7IEFSNUtfVFhDRkcsCi0JLyoJICBhCSAgICBhVHVyYm8JICBiCSAgZyAoT0ZETSkgICAgKi8KLQkgICB7IDB4MDAwMDAwMTUsIDB4MDAwMDAwMTUsIDB4MDAwMDAwMWQsIDB4MDAwMDAwMTUgfSB9LAorCS8qCUEvWFIgICAgICAgICAgQiAgICAgICAgICAgRyAgICAgICAqLworCSAgIHsgMHgwMDAwMDAxNSwgMHgwMDAwMDAxZCwgMHgwMDAwMDAxNSB9IH0sCiAJeyBBUjVLX1FVRVVFX0RGU19MT0NBTF9JRlMoMCksCi0JICAgeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmLCAweDAwMmZmYzBmIH0gfSwKKwkgICB7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYsIDB4MDAyZmZjMGYgfSB9LAogCXsgQVI1S19RVUVVRV9ERlNfTE9DQUxfSUZTKDEpLAotCSAgIHsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiwgMHgwMDJmZmMwZiB9IH0sCisJICAgeyAweDAwMmZmYzBmLCAweDAwMmZmYzFmLCAweDAwMmZmYzBmIH0gfSwKIAl7IEFSNUtfUVVFVUVfREZTX0xPQ0FMX0lGUygyKSwKLQkgICB7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYsIDB4MDAyZmZjMGYgfSB9LAorCSAgIHsgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiwgMHgwMDJmZmMwZiB9IH0sCiAJeyBBUjVLX1FVRVVFX0RGU19MT0NBTF9JRlMoMyksCi0JICAgeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmLCAweDAwMmZmYzBmIH0gfSwKKwkgICB7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYsIDB4MDAyZmZjMGYgfSB9LAogCXsgQVI1S19RVUVVRV9ERlNfTE9DQUxfSUZTKDQpLAotCSAgIHsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiwgMHgwMDJmZmMwZiB9IH0sCisJICAgeyAweDAwMmZmYzBmLCAweDAwMmZmYzFmLCAweDAwMmZmYzBmIH0gfSwKIAl7IEFSNUtfUVVFVUVfREZTX0xPQ0FMX0lGUyg1KSwKLQkgICB7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYsIDB4MDAyZmZjMGYgfSB9LAorCSAgIHsgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiwgMHgwMDJmZmMwZiB9IH0sCiAJeyBBUjVLX1FVRVVFX0RGU19MT0NBTF9JRlMoNiksCi0JICAgeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmLCAweDAwMmZmYzBmIH0gfSwKKwkgICB7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYsIDB4MDAyZmZjMGYgfSB9LAogCXsgQVI1S19RVUVVRV9ERlNfTE9DQUxfSUZTKDcpLAotCSAgIHsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiwgMHgwMDJmZmMwZiB9IH0sCisJICAgeyAweDAwMmZmYzBmLCAweDAwMmZmYzFmLCAweDAwMmZmYzBmIH0gfSwKIAl7IEFSNUtfUVVFVUVfREZTX0xPQ0FMX0lGUyg4KSwKLQkgICB7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYsIDB4MDAyZmZjMGYgfSB9LAorCSAgIHsgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiwgMHgwMDJmZmMwZiB9IH0sCiAJeyBBUjVLX1FVRVVFX0RGU19MT0NBTF9JRlMoOSksCi0JICAgeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmLCAweDAwMmZmYzBmIH0gfSwKKwkgICB7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYsIDB4MDAyZmZjMGYgfSB9LAogCXsgQVI1S19EQ1VfR0JMX0lGU19TTE9ULAotCSAgIHsgMHgwMDAwMDE2OCwgMHgwMDAwMDFlMCwgMHgwMDAwMDFiOCwgMHgwMDAwMDE2OCB9IH0sCisJICAgeyAweDAwMDAwMTY4LCAweDAwMDAwMWI4LCAweDAwMDAwMTY4IH0gfSwKIAl7IEFSNUtfRENVX0dCTF9JRlNfU0lGUywKLQkgICB7IDB4MDAwMDAyMzAsIDB4MDAwMDAxZTAsIDB4MDAwMDAwYjAsIDB4MDAwMDAyMzAgfSB9LAorCSAgIHsgMHgwMDAwMDIzMCwgMHgwMDAwMDBiMCwgMHgwMDAwMDIzMCB9IH0sCiAJeyBBUjVLX0RDVV9HQkxfSUZTX0VJRlMsCi0JICAgeyAweDAwMDAwZDk4LCAweDAwMDAxMTgwLCAweDAwMDAxZjQ4LCAweDAwMDAwZDk4IH0gfSwKKwkgICB7IDB4MDAwMDBkOTgsIDB4MDAwMDFmNDgsIDB4MDAwMDBkOTggfSB9LAogCXsgQVI1S19EQ1VfR0JMX0lGU19NSVNDLAotCSAgIHsgMHgwMDAwYTBlMCwgMHgwMDAxNDA2OCwgMHgwMDAwNTg4MCwgMHgwMDAwYTBlMCB9IH0sCisJICAgeyAweDAwMDBhMGUwLCAweDAwMDA1ODgwLCAweDAwMDBhMGUwIH0gfSwKIAl7IEFSNUtfVElNRV9PVVQsCi0JICAgeyAweDA0MDAwNDAwLCAweDA4MDAwODAwLCAweDIwMDAzMDAwLCAweDA0MDAwNDAwIH0gfSwKKwkgICB7IDB4MDQwMDA0MDAsIDB4MjAwMDMwMDAsIDB4MDQwMDA0MDAgfSB9LAogCXsgQVI1S19VU0VDXzUyMTEsCi0JICAgeyAweDBlOGQ4ZmE3LCAweDBlOGQ4ZmNmLCAweDAxNjA4Zjk1LCAweDBlOGQ4ZmE3IH0gfSwKLQl7IEFSNUtfUEhZX1RVUkJPLAotCSAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJICAgeyAweDBlOGQ4ZmE3LCAweDAxNjA4Zjk1LCAweDBlOGQ4ZmE3IH0gfSwKIAl7IEFSNUtfUEhZKDgpLAotCSAgIHsgMHgwMjAyMDIwMCwgMHgwMjAyMDIwMCwgMHgwMjAxMDIwMCwgMHgwMjAyMDIwMCB9IH0sCi0JeyBBUjVLX1BIWSg5KSwKLQkgICB7IDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDA3MDcsIDB4MDAwMDBlMGUgfSB9LAotCXsgQVI1S19QSFkoMTApLAotCSAgIHsgMHgwYTAyMDAwMSwgMHgwYTAyMDAwMSwgMHgwNTAxMDAwMCwgMHgwYTAyMDAwMSB9IH0sCi0JeyBBUjVLX1BIWSgxMyksCi0JICAgeyAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlIH0gfSwKLQl7IEFSNUtfUEhZKDE0KSwKLQkgICB7IDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMGIsIDB4MDAwMDAwMGIgfSB9LAotCXsgQVI1S19QSFkoMTcpLAotCSAgIHsgMHgxMzcyMTY5YywgMHgxMzcyMTZhNSwgMHgxMzcyMTZhOCwgMHgxMzcyMTY5YyB9IH0sCi0JeyBBUjVLX1BIWSgxOCksCi0JICAgeyAweDAwMThiYTY3LCAweDAwMThiYTY3LCAweDAwMThiYTY5LCAweDAwMThiYTY5IH0gfSwKLQl7IEFSNUtfUEhZKDIwKSwKLQkgICB7IDB4MGMyOGI0ZTAsIDB4MGMyOGI0ZTAsIDB4MGMyOGI0ZTAsIDB4MGMyOGI0ZTAgfSB9LAorCSAgIHsgMHgwMjAyMDIwMCwgMHgwMjAxMDIwMCwgMHgwMjAyMDIwMCB9IH0sCisJeyBBUjVLX1BIWV9SRl9DVEwyLAorCSAgIHsgMHgwMDAwMGUwZSwgMHgwMDAwMDcwNywgMHgwMDAwMGUwZSB9IH0sCisJeyBBUjVLX1BIWV9SRl9DVEwzLAorCSAgIHsgMHgwYTAyMDAwMSwgMHgwNTAxMDAwMCwgMHgwYTAyMDAwMSB9IH0sCisJeyBBUjVLX1BIWV9SRl9DVEw0LAorCSAgIHsgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSB9IH0sCisJeyBBUjVLX1BIWV9QQV9DVEwsCisJICAgeyAweDAwMDAwMDA3LCAweDAwMDAwMDBiLCAweDAwMDAwMDBiIH0gfSwKKwl7IEFSNUtfUEhZX1NFVFRMSU5HLAorCSAgIHsgMHgxMzcyMTY5YywgMHgxMzcyMTZhOCwgMHgxMzcyMTY5YyB9IH0sCisJeyBBUjVLX1BIWV9HQUlOLAorCSAgIHsgMHgwMDE4YmE2NywgMHgwMDE4YmE2OSwgMHgwMDE4YmE2OSB9IH0sCisJeyBBUjVLX1BIWV9ERVNJUkVEX1NJWkUsCisJICAgeyAweDBjMjhiNGUwLCAweDBjMjhiNGUwLCAweDBjMjhiNGUwIH0gfSwKIAl7IEFSNUtfUEhZX1NJRywKLQkgICB7IDB4N2U4MDBkMmUsIDB4N2U4MDBkMmUsIDB4N2VjMDBkMmUsIDB4N2U4MDBkMmUgfSB9LAorCSAgIHsgMHg3ZTgwMGQyZSwgMHg3ZWMwMGQyZSwgMHg3ZTgwMGQyZSB9IH0sCiAJeyBBUjVLX1BIWV9BR0NDT0FSU0UsCi0JICAgeyAweDMxMzc1ZDVlLCAweDMxMzc1ZDVlLCAweDMxM2E1ZDVlLCAweDMxMzc1ZDVlIH0gfSwKKwkgICB7IDB4MzEzNzVkNWUsIDB4MzEzYTVkNWUsIDB4MzEzNzVkNWUgfSB9LAogCXsgQVI1S19QSFlfQUdDQ1RMLAotCSAgIHsgMHgwMDAwYmQxMCwgMHgwMDAwYmQxMCwgMHgwMDAwYmQzOCwgMHgwMDAwYmQxMCB9IH0sCisJICAgeyAweDAwMDBiZDEwLCAweDAwMDBiZDM4LCAweDAwMDBiZDEwIH0gfSwKIAl7IEFSNUtfUEhZX05GLAotCSAgIHsgMHgwMDAxY2UwMCwgMHgwMDAxY2UwMCwgMHgwMDAxY2UwMCwgMHgwMDAxY2UwMCB9IH0sCisJICAgeyAweDAwMDFjZTAwLCAweDAwMDFjZTAwLCAweDAwMDFjZTAwIH0gfSwKIAl7IEFSNUtfUEhZX1JYX0RFTEFZLAotCSAgIHsgMHgwMDAwMjcxMCwgMHgwMDAwMjcxMCwgMHgwMDAwMTU3YywgMHgwMDAwMjcxMCB9IH0sCisJICAgeyAweDAwMDAyNzEwLCAweDAwMDAxNTdjLCAweDAwMDAyNzEwIH0gfSwKIAl7IEFSNUtfUEhZKDcwKSwKLQkgICB7IDB4MDAwMDAxOTAsIDB4MDAwMDAxOTAsIDB4MDAwMDAwODQsIDB4MDAwMDAxOTAgfSB9LAorCSAgIHsgMHgwMDAwMDE5MCwgMHgwMDAwMDA4NCwgMHgwMDAwMDE5MCB9IH0sCiAJeyBBUjVLX1BIWV9GUkFNRV9DVExfNTIxMSwKLQkgICB7IDB4NmZlMDEwMjAsIDB4NmZlMDEwMjAsIDB4NmZlMDA5MjAsIDB4NmZlMDEwMjAgfSB9LAorCSAgIHsgMHg2ZmUwMTAyMCwgMHg2ZmUwMDkyMCwgMHg2ZmUwMTAyMCB9IH0sCiAJeyBBUjVLX1BIWV9QQ0RBQ19UWFBPV0VSX0JBU0UsCi0JICAgeyAweDA1ZmYxNGZmLCAweDA1ZmYxNGZmLCAweDA1ZmYxNGZmLCAweDA1ZmYxOWZmIH0gfSwKKwkgICB7IDB4MDVmZjE0ZmYsIDB4MDVmZjE0ZmYsIDB4MDVmZjE5ZmYgfSB9LAogCXsgQVI1S19SRl9CVUZGRVJfQ09OVFJPTF80LAotCSAgIHsgMHgwMDAwMDAxMCwgMHgwMDAwMDAxNCwgMHgwMDAwMDAxMCwgMHgwMDAwMDAxMCB9IH0sCisJICAgeyAweDAwMDAwMDEwLCAweDAwMDAwMDEwLCAweDAwMDAwMDEwIH0gfSwKIH07CiAKIC8qIEluaXRpYWwgcmVnaXN0ZXIgc2V0dGluZ3MgZm9yIEFSNTIxMiAqLwpAQCAtNjc3LDg5ICs2NzUsODcgQEAKIC8qIEluaXRpYWwgbW9kZS1zcGVjaWZpYyBzZXR0aW5ncyBmb3IgQVI1MjEyIChXcml0dGVuIGJlZm9yZSBhcjUyMTJfaW5pKSAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmlfbW9kZSBhcjUyMTJfaW5pX21vZGVfc3RhcnRbXSA9IHsKIAl7IEFSNUtfUVVFVUVfREZTX0xPQ0FMX0lGUygwKSwKLQkvKglhL1hSCSAgIGFUdXJibwkgIGIJICAgZyAoRFlOKSAgICAgZ1R1cmJvICAgICAqLwotCSAgIHsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiB9IH0sCisJLyoJQS9YUiAgICAgICAgICBCICAgICAgICAgICBHICAgICAgICovCisJICAgeyAweDAwMmZmYzBmLCAweDAwMmZmYzFmLCAweDAwMmZmYzBmIH0gfSwKIAl7IEFSNUtfUVVFVUVfREZTX0xPQ0FMX0lGUygxKSwKLQkgICB7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYgfSB9LAorCSAgIHsgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiwgMHgwMDJmZmMwZiB9IH0sCiAJeyBBUjVLX1FVRVVFX0RGU19MT0NBTF9JRlMoMiksCi0JICAgeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmLCAweDAwMmZmYzBmLCAweDAwMmZmYzBmIH0gfSwKKwkgICB7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYsIDB4MDAyZmZjMGYgfSB9LAogCXsgQVI1S19RVUVVRV9ERlNfTE9DQUxfSUZTKDMpLAotCSAgIHsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiB9IH0sCisJICAgeyAweDAwMmZmYzBmLCAweDAwMmZmYzFmLCAweDAwMmZmYzBmIH0gfSwKIAl7IEFSNUtfUVVFVUVfREZTX0xPQ0FMX0lGUyg0KSwKLQkgICB7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYgfSB9LAorCSAgIHsgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiwgMHgwMDJmZmMwZiB9IH0sCiAJeyBBUjVLX1FVRVVFX0RGU19MT0NBTF9JRlMoNSksCi0JICAgeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmLCAweDAwMmZmYzBmLCAweDAwMmZmYzBmIH0gfSwKKwkgICB7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYsIDB4MDAyZmZjMGYgfSB9LAogCXsgQVI1S19RVUVVRV9ERlNfTE9DQUxfSUZTKDYpLAotCSAgIHsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiB9IH0sCisJICAgeyAweDAwMmZmYzBmLCAweDAwMmZmYzFmLCAweDAwMmZmYzBmIH0gfSwKIAl7IEFSNUtfUVVFVUVfREZTX0xPQ0FMX0lGUyg3KSwKLQkgICB7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYgfSB9LAorCSAgIHsgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiwgMHgwMDJmZmMwZiB9IH0sCiAJeyBBUjVLX1FVRVVFX0RGU19MT0NBTF9JRlMoOCksCi0JICAgeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmLCAweDAwMmZmYzBmLCAweDAwMmZmYzBmIH0gfSwKKwkgICB7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYsIDB4MDAyZmZjMGYgfSB9LAogCXsgQVI1S19RVUVVRV9ERlNfTE9DQUxfSUZTKDkpLAotCSAgIHsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiB9IH0sCisJICAgeyAweDAwMmZmYzBmLCAweDAwMmZmYzFmLCAweDAwMmZmYzBmIH0gfSwKIAl7IEFSNUtfRENVX0dCTF9JRlNfU0lGUywKLQkgICB7IDB4MDAwMDAyMzAsIDB4MDAwMDAxZTAsIDB4MDAwMDAwYjAsIDB4MDAwMDAxNjAsIDB4MDAwMDAxZTAgfSB9LAorCSAgIHsgMHgwMDAwMDIzMCwgMHgwMDAwMDBiMCwgMHgwMDAwMDE2MCB9IH0sCiAJeyBBUjVLX0RDVV9HQkxfSUZTX1NMT1QsCi0JICAgeyAweDAwMDAwMTY4LCAweDAwMDAwMWUwLCAweDAwMDAwMWI4LCAweDAwMDAwMThjLCAweDAwMDAwMWUwIH0gfSwKKwkgICB7IDB4MDAwMDAxNjgsIDB4MDAwMDAxYjgsIDB4MDAwMDAxOGMgfSB9LAogCXsgQVI1S19EQ1VfR0JMX0lGU19FSUZTLAotCSAgIHsgMHgwMDAwMGU2MCwgMHgwMDAwMTE4MCwgMHgwMDAwMWYxYywgMHgwMDAwM2UzOCwgMHgwMDAwMTE4MCB9IH0sCisJICAgeyAweDAwMDAwZTYwLCAweDAwMDAxZjFjLCAweDAwMDAzZTM4IH0gfSwKIAl7IEFSNUtfRENVX0dCTF9JRlNfTUlTQywKLQkgICB7IDB4MDAwMGEwZTAsIDB4MDAwMTQwNjgsIDB4MDAwMDU4ODAsIDB4MDAwMGIwZTAsIDB4MDAwMTQwNjggfSB9LAorCSAgIHsgMHgwMDAwYTBlMCwgMHgwMDAwNTg4MCwgMHgwMDAwYjBlMCB9IH0sCiAJeyBBUjVLX1RJTUVfT1VULAotCSAgIHsgMHgwM2U4MDNlOCwgMHgwNmUwMDZlMCwgMHgwNDIwMDQyMCwgMHgwODQwMDg0MCwgMHgwNmUwMDZlMCB9IH0sCi0JeyBBUjVLX1BIWV9UVVJCTywKLQkgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDMgfSB9LAorCSAgIHsgMHgwM2U4MDNlOCwgMHgwNDIwMDQyMCwgMHgwODQwMDg0MCB9IH0sCiAJeyBBUjVLX1BIWSg4KSwKLQkgICB7IDB4MDIwMjAyMDAsIDB4MDIwMjAyMDAsIDB4MDIwMTAyMDAsIDB4MDIwMjAyMDAsIDB4MDIwMjAyMDAgfSB9LAorCSAgIHsgMHgwMjAyMDIwMCwgMHgwMjAxMDIwMCwgMHgwMjAyMDIwMCB9IH0sCiAJeyBBUjVLX1BIWV9SRl9DVEwyLAotCSAgIHsgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMDcwNywgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSB9IH0sCisJICAgeyAweDAwMDAwZTBlLCAweDAwMDAwNzA3LCAweDAwMDAwZTBlIH0gfSwKIAl7IEFSNUtfUEhZX1NFVFRMSU5HLAotCSAgIHsgMHgxMzcyMTYxYywgMHgxMzcyMWMyNSwgMHgxMzcyMTcyMiwgMHgxMzcyMTZhMiwgMHgxMzcyMWMyNSB9IH0sCisJICAgeyAweDEzNzIxNjFjLCAweDEzNzIxNzIyLCAweDEzNzIxNmEyIH0gfSwKIAl7IEFSNUtfUEhZX0FHQ0NUTCwKLQkgICB7IDB4MDAwMDlkMTAsIDB4MDAwMDlkMTAsIDB4MDAwMDlkMTgsIDB4MDAwMDlkMTgsIDB4MDAwMDlkMTAgfSB9LAorCSAgIHsgMHgwMDAwOWQxMCwgMHgwMDAwOWQxOCwgMHgwMDAwOWQxOCB9IH0sCiAJeyBBUjVLX1BIWV9ORiwKLQkgICB7IDB4MDAwMWNlMDAsIDB4MDAwMWNlMDAsIDB4MDAwMWNlMDAsIDB4MDAwMWNlMDAsIDB4MDAwMWNlMDAgfSB9LAorCSAgIHsgMHgwMDAxY2UwMCwgMHgwMDAxY2UwMCwgMHgwMDAxY2UwMCB9IH0sCiAJeyBBUjVLX1BIWV9XRUFLX09GRE1fSElHSF9USFIsCi0JICAgeyAweDQwOWE0MTkwLCAweDQwOWE0MTkwLCAweDQwOWE0MTkwLCAweDQwOWE0MTkwLCAweDQwOWE0MTkwIH0gfSwKKwkgICB7IDB4NDA5YTQxOTAsIDB4NDA5YTQxOTAsIDB4NDA5YTQxOTAgfSB9LAogCXsgQVI1S19QSFkoNzApLAotCSAgIHsgMHgwMDAwMDFiOCwgMHgwMDAwMDFiOCwgMHgwMDAwMDA4NCwgMHgwMDAwMDEwOCwgMHgwMDAwMDFiOCB9IH0sCisJICAgeyAweDAwMDAwMWI4LCAweDAwMDAwMDg0LCAweDAwMDAwMTA4IH0gfSwKIAl7IEFSNUtfUEhZX09GRE1fU0VMRkNPUlIsCi0JICAgeyAweDEwMDU4YTA1LCAweDEwMDU4YTA1LCAweDEwMDU4YTA1LCAweDEwMDU4YTA1LCAweDEwMDU4YTA1IH0gfSwKKwkgICB7IDB4MTAwNThhMDUsIDB4MTAwNThhMDUsIDB4MTAwNThhMDUgfSB9LAogCXsgMHhhMjMwLAotCSAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDEwOCwgMHgwMDAwMDAwMCB9IH0sCisJICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMTA4IH0gfSwKIH07CiAKIC8qIEluaXRpYWwgbW9kZS1zcGVjaWZpYyBzZXR0aW5ncyBmb3IgQVI1MjEyICsgUkY1MTExIChXcml0dGVuIGFmdGVyIGFyNTIxMl9pbmkpICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaV9tb2RlIHJmNTExMV9pbmlfbW9kZV9lbmRbXSA9IHsKIAl7IEFSNUtfVFhDRkcsCi0JLyoJYS9YUgkgICBhVHVyYm8JICBiCSAgIGcgKERZTikgICAgIGdUdXJibyAgICAgKi8KLQkgICB7IDB4MDAwMDgwMTUsIDB4MDAwMDgwMTUsIDB4MDAwMDgwMTUsIDB4MDAwMDgwMTUsIDB4MDAwMDgwMTUgfSB9LAorCS8qCUEvWFIgICAgICAgICAgQiAgICAgICAgICAgRyAgICAgICAqLworCSAgIHsgMHgwMDAwODAxNSwgMHgwMDAwODAxNSwgMHgwMDAwODAxNSB9IH0sCiAJeyBBUjVLX1VTRUNfNTIxMSwKLQkgICB7IDB4MTI4ZDhmYTcsIDB4MDk4ODBmY2YsIDB4MDRlMDBmOTUsIDB4MTJlMDBmYWIsIDB4MDk4ODBmY2YgfSB9LAorCSAgIHsgMHgxMjhkOGZhNywgMHgwNGUwMGY5NSwgMHgxMmUwMGZhYiB9IH0sCiAJeyBBUjVLX1BIWV9SRl9DVEwzLAotCSAgIHsgMHgwYTAyMDAwMSwgMHgwYTAyMDAwMSwgMHgwNTAxMDEwMCwgMHgwYTAyMDAwMSwgMHgwYTAyMDAwMSB9IH0sCisJICAgeyAweDBhMDIwMDAxLCAweDA1MDEwMTAwLCAweDBhMDIwMDAxIH0gfSwKIAl7IEFSNUtfUEhZX1JGX0NUTDQsCi0JICAgeyAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlIH0gfSwKKwkgICB7IDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUgfSB9LAogCXsgQVI1S19QSFlfUEFfQ1RMLAotCSAgIHsgMHgwMDAwMDAwNywgMHgwMDAwMDAwNywgMHgwMDAwMDAwYiwgMHgwMDAwMDAwYiwgMHgwMDAwMDAwYiB9IH0sCisJICAgeyAweDAwMDAwMDA3LCAweDAwMDAwMDBiLCAweDAwMDAwMDBiIH0gfSwKIAl7IEFSNUtfUEhZX0dBSU4sCi0JICAgeyAweDAwMThkYTVhLCAweDAwMThkYTVhLCAweDAwMThjYTY5LCAweDAwMThjYTY5LCAweDAwMThjYTY5IH0gfSwKKwkgICB7IDB4MDAxOGRhNWEsIDB4MDAxOGNhNjksIDB4MDAxOGNhNjkgfSB9LAogCXsgQVI1S19QSFlfREVTSVJFRF9TSVpFLAotCSAgIHsgMHgwZGU4YjRlMCwgMHgwZGU4YjRlMCwgMHgwZGU4YjRlMCwgMHgwZGU4YjRlMCwgMHgwZGU4YjRlMCB9IH0sCisJICAgeyAweDBkZThiNGUwLCAweDBkZThiNGUwLCAweDBkZThiNGUwIH0gfSwKIAl7IEFSNUtfUEhZX1NJRywKLQkgICB7IDB4N2U4MDBkMmUsIDB4N2U4MDBkMmUsIDB4N2VlODRkMmUsIDB4N2VlODRkMmUsIDB4N2U4MDBkMmUgfSB9LAorCSAgIHsgMHg3ZTgwMGQyZSwgMHg3ZWU4NGQyZSwgMHg3ZWU4NGQyZSB9IH0sCiAJeyBBUjVLX1BIWV9BR0NDT0FSU0UsCi0JICAgeyAweDMxMzc2NjVlLCAweDMxMzc2NjVlLCAweDMxMzc2NjVlLCAweDMxMzc2NjVlLCAweDMxMzc2MTVlIH0gfSwKKwkgICB7IDB4MzEzNzY2NWUsIDB4MzEzNzY2NWUsIDB4MzEzNzY2NWUgfSB9LAogCXsgQVI1S19QSFlfV0VBS19PRkRNX0xPV19USFIsCi0JICAgeyAweDA1MGNiMDgxLCAweDA1MGNiMDgxLCAweDA1MGNiMDgxLCAweDA1MGNiMDgwLCAweDA1MGNiMDgwIH0gfSwKKwkgICB7IDB4MDUwY2IwODEsIDB4MDUwY2IwODEsIDB4MDUwY2IwODAgfSB9LAogCXsgQVI1S19QSFlfUlhfREVMQVksCi0JICAgeyAweDAwMDAyNzEwLCAweDAwMDAyNzEwLCAweDAwMDAxNTdjLCAweDAwMDAyYWY4LCAweDAwMDAyNzEwIH0gfSwKKwkgICB7IDB4MDAwMDI3MTAsIDB4MDAwMDE1N2MsIDB4MDAwMDJhZjggfSB9LAogCXsgQVI1S19QSFlfRlJBTUVfQ1RMXzUyMTEsCi0JICAgeyAweGY3YjgxMDIwLCAweGY3YjgxMDIwLCAweGY3YjgwZDIwLCAweGY3YjgxMDIwLCAweGY3YjgxMDIwIH0gfSwKKwkgICB7IDB4ZjdiODEwMjAsIDB4ZjdiODBkMjAsIDB4ZjdiODEwMjAgfSB9LAogCXsgQVI1S19QSFlfR0FJTl8yR0haLAotCSAgIHsgMHg2NDJjNDE2YSwgMHg2NDJjNDE2YSwgMHg2NDQwNDE2YSwgMHg2NDQwNDE2YSwgMHg2NDQwNDE2YSB9IH0sCisJICAgeyAweDY0MmM0MTZhLCAweDY0NDA0MTZhLCAweDY0NDA0MTZhIH0gfSwKIAl7IEFSNUtfUEhZX0NDS19SWF9DVExfNCwKLQkgICB7IDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEsIDB4MTg3MzgwMGEsIDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEgfSB9LAorCSAgIHsgMHgxODgzODAwYSwgMHgxODczODAwYSwgMHgxODgzODAwYSB9IH0sCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaSByZjUxMTFfaW5pX2NvbW1vbl9lbmRbXSA9IHsKQEAgLTc4MiwzOCArNzc4LDM4IEBACiAvKiBJbml0aWFsIG1vZGUtc3BlY2lmaWMgc2V0dGluZ3MgZm9yIEFSNTIxMiArIFJGNTExMiAoV3JpdHRlbiBhZnRlciBhcjUyMTJfaW5pKSAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmlfbW9kZSByZjUxMTJfaW5pX21vZGVfZW5kW10gPSB7CiAJeyBBUjVLX1RYQ0ZHLAotCS8qCWEvWFIJICAgYVR1cmJvCSAgYgkgICBnIChEWU4pICAgICBnVHVyYm8gICAgICovCi0JICAgeyAweDAwMDA4MDE1LCAweDAwMDA4MDE1LCAweDAwMDA4MDE1LCAweDAwMDA4MDE1LCAweDAwMDA4MDE1IH0gfSwKKwkvKglBL1hSICAgICAgICAgIEIgICAgICAgICAgIEcgICAgICAgKi8KKwkgICB7IDB4MDAwMDgwMTUsIDB4MDAwMDgwMTUsIDB4MDAwMDgwMTUgfSB9LAogCXsgQVI1S19VU0VDXzUyMTEsCi0JICAgeyAweDEyOGQ5M2E3LCAweDA5ODgxM2NmLCAweDA0ZTAxMzk1LCAweDEyZTAxM2FiLCAweDA5ODgxM2NmIH0gfSwKKwkgICB7IDB4MTI4ZDkzYTcsIDB4MDRlMDEzOTUsIDB4MTJlMDEzYWIgfSB9LAogCXsgQVI1S19QSFlfUkZfQ1RMMywKLQkgICB7IDB4MGEwMjAwMDEsIDB4MGEwMjAwMDEsIDB4MDUwMjAxMDAsIDB4MGEwMjAwMDEsIDB4MGEwMjAwMDEgfSB9LAorCSAgIHsgMHgwYTAyMDAwMSwgMHgwNTAyMDEwMCwgMHgwYTAyMDAwMSB9IH0sCiAJeyBBUjVLX1BIWV9SRl9DVEw0LAotCSAgIHsgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSB9IH0sCisJICAgeyAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlIH0gfSwKIAl7IEFSNUtfUEhZX1BBX0NUTCwKLQkgICB7IDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMGIsIDB4MDAwMDAwMGIsIDB4MDAwMDAwMGIgfSB9LAorCSAgIHsgMHgwMDAwMDAwNywgMHgwMDAwMDAwYiwgMHgwMDAwMDAwYiB9IH0sCiAJeyBBUjVLX1BIWV9HQUlOLAotCSAgIHsgMHgwMDE4ZGE2ZCwgMHgwMDE4ZGE2ZCwgMHgwMDE4Y2E3NSwgMHgwMDE4Y2E3NSwgMHgwMDE4Y2E3NSB9IH0sCisJICAgeyAweDAwMThkYTZkLCAweDAwMThjYTc1LCAweDAwMThjYTc1IH0gfSwKIAl7IEFSNUtfUEhZX0RFU0lSRURfU0laRSwKLQkgICB7IDB4MGRlOGI0ZTAsIDB4MGRlOGI0ZTAsIDB4MGRlOGI0ZTAsIDB4MGRlOGI0ZTAsIDB4MGRlOGI0ZTAgfSB9LAorCSAgIHsgMHgwZGU4YjRlMCwgMHgwZGU4YjRlMCwgMHgwZGU4YjRlMCB9IH0sCiAJeyBBUjVLX1BIWV9TSUcsCi0JICAgeyAweDdlODAwZDJlLCAweDdlODAwZDJlLCAweDdlZTgwZDJlLCAweDdlZTgwZDJlLCAweDdlODAwZDJlIH0gfSwKKwkgICB7IDB4N2U4MDBkMmUsIDB4N2VlODBkMmUsIDB4N2VlODBkMmUgfSB9LAogCXsgQVI1S19QSFlfQUdDQ09BUlNFLAotCSAgIHsgMHgzMTM3NjY1ZSwgMHgzMTM3NjY1ZSwgMHgzMTM3NjY1ZSwgMHgzMTM3NjY1ZSwgMHgzMTM3NjY1ZSB9IH0sCisJICAgeyAweDMxMzc2NjVlLCAweDMxMzc2NjVlLCAweDMxMzc2NjVlIH0gfSwKIAl7IEFSNUtfUEhZX1dFQUtfT0ZETV9MT1dfVEhSLAotCSAgIHsgMHgwNTBjYjA4MSwgMHgwNTBjYjA4MSwgMHgwNTBjYjA4MSwgMHgwNTBjYjA4MSwgMHgwNTBjYjA4MSB9IH0sCisJICAgeyAweDA1MGNiMDgxLCAweDA1MGNiMDgxLCAweDA1MGNiMDgxIH0gfSwKIAl7IEFSNUtfUEhZX1JYX0RFTEFZLAotCSAgIHsgMHgwMDAwMDdkMCwgMHgwMDAwMDdkMCwgMHgwMDAwMDQ0YywgMHgwMDAwMDg5OCwgMHgwMDAwMDdkMCB9IH0sCisJICAgeyAweDAwMDAwN2QwLCAweDAwMDAwNDRjLCAweDAwMDAwODk4IH0gfSwKIAl7IEFSNUtfUEhZX0ZSQU1FX0NUTF81MjExLAotCSAgIHsgMHhmN2I4MTAyMCwgMHhmN2I4MTAyMCwgMHhmN2I4MGQxMCwgMHhmN2I4MTAxMCwgMHhmN2I4MTAxMCB9IH0sCisJICAgeyAweGY3YjgxMDIwLCAweGY3YjgwZDEwLCAweGY3YjgxMDEwIH0gfSwKIAl7IEFSNUtfUEhZX0NDS1RYQ1RMLAotCSAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwOCwgMHgwMDAwMDAwOCwgMHgwMDAwMDAwOCB9IH0sCisJICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDA4LCAweDAwMDAwMDA4IH0gfSwKIAl7IEFSNUtfUEhZX0NDS19DUk9TU0NPUlIsCi0JICAgeyAweGQ2YmU2Nzg4LCAweGQ2YmU2Nzg4LCAweGQwM2U2Nzg4LCAweGQwM2U2Nzg4LCAweGQwM2U2Nzg4IH0gfSwKKwkgICB7IDB4ZDZiZTY3ODgsIDB4ZDAzZTY3ODgsIDB4ZDAzZTY3ODggfSB9LAogCXsgQVI1S19QSFlfR0FJTl8yR0haLAotCSAgIHsgMHg2NDJjMDE0MCwgMHg2NDJjMDE0MCwgMHg2NDQyYzE2MCwgMHg2NDQyYzE2MCwgMHg2NDQyYzE2MCB9IH0sCisJICAgeyAweDY0MmMwMTQwLCAweDY0NDJjMTYwLCAweDY0NDJjMTYwIH0gfSwKIAl7IEFSNUtfUEhZX0NDS19SWF9DVExfNCwKLQkgICB7IDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEsIDB4MTg3MzgwMGEsIDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEgfSB9LAorCSAgIHsgMHgxODgzODAwYSwgMHgxODczODAwYSwgMHgxODgzODAwYSB9IH0sCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaSByZjUxMTJfaW5pX2NvbW1vbl9lbmRbXSA9IHsKQEAgLTgzMyw2NiArODI5LDY2IEBACiAvKiBJbml0aWFsIG1vZGUtc3BlY2lmaWMgc2V0dGluZ3MgZm9yIFJGNTQxMy81NDE0IChXcml0dGVuIGFmdGVyIGFyNTIxMl9pbmkpICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaV9tb2RlIHJmNTQxM19pbmlfbW9kZV9lbmRbXSA9IHsKIAl7IEFSNUtfVFhDRkcsCi0JLyoJYS9YUgkgICBhVHVyYm8JICBiCSAgIGcgKERZTikgICAgIGdUdXJibyAgICAgKi8KLQkgICB7IDB4MDAwMDAwMTUsIDB4MDAwMDAwMTUsIDB4MDAwMDAwMTUsIDB4MDAwMDAwMTUsIDB4MDAwMDAwMTUgfSB9LAorCS8qCUEvWFIgICAgICAgICAgQiAgICAgICAgICAgRyAgICAgICAqLworCSAgIHsgMHgwMDAwMDAxNSwgMHgwMDAwMDAxNSwgMHgwMDAwMDAxNSB9IH0sCiAJeyBBUjVLX1VTRUNfNTIxMSwKLQkgICB7IDB4MTI4ZDkzYTcsIDB4MDk4ODEzY2YsIDB4MDRlMDEzOTUsIDB4MTJlMDEzYWIsIDB4MDk4ODEzY2YgfSB9LAorCSAgIHsgMHgxMjhkOTNhNywgMHgwNGUwMTM5NSwgMHgxMmUwMTNhYiB9IH0sCiAJeyBBUjVLX1BIWV9SRl9DVEwzLAotCSAgIHsgMHgwYTAyMDAwMSwgMHgwYTAyMDAwMSwgMHgwNTAyMDEwMCwgMHgwYTAyMDAwMSwgMHgwYTAyMDAwMSB9IH0sCisJICAgeyAweDBhMDIwMDAxLCAweDA1MDIwMTAwLCAweDBhMDIwMDAxIH0gfSwKIAl7IEFSNUtfUEhZX1JGX0NUTDQsCi0JICAgeyAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlIH0gfSwKKwkgICB7IDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUgfSB9LAogCXsgQVI1S19QSFlfUEFfQ1RMLAotCSAgIHsgMHgwMDAwMDAwNywgMHgwMDAwMDAwNywgMHgwMDAwMDAwYiwgMHgwMDAwMDAwYiwgMHgwMDAwMDAwYiB9IH0sCisJICAgeyAweDAwMDAwMDA3LCAweDAwMDAwMDBiLCAweDAwMDAwMDBiIH0gfSwKIAl7IEFSNUtfUEhZX0dBSU4sCi0JICAgeyAweDAwMThmYTYxLCAweDAwMThmYTYxLCAweDAwMWExYTYzLCAweDAwMWExYTYzLCAweDAwMWExYTYzIH0gfSwKKwkgICB7IDB4MDAxOGZhNjEsIDB4MDAxYTFhNjMsIDB4MDAxYTFhNjMgfSB9LAogCXsgQVI1S19QSFlfREVTSVJFRF9TSVpFLAotCSAgIHsgMHgwYzk4YjRlMCwgMHgwYzk4YjRlMCwgMHgwYzk4YjBkYSwgMHgwYzk4YjBkYSwgMHgwYzk4YjBkYSB9IH0sCisJICAgeyAweDBjOThiNGUwLCAweDBjOThiMGRhLCAweDBjOThiMGRhIH0gfSwKIAl7IEFSNUtfUEhZX1NJRywKLQkgICB7IDB4N2VjODBkMmUsIDB4N2VjODBkMmUsIDB4N2VjODBkMmUsIDB4N2VjODBkMmUsIDB4N2VjODBkMmUgfSB9LAorCSAgIHsgMHg3ZWM4MGQyZSwgMHg3ZWM4MGQyZSwgMHg3ZWM4MGQyZSB9IH0sCiAJeyBBUjVLX1BIWV9BR0NDT0FSU0UsCi0JICAgeyAweDMxMzk2MDVlLCAweDMxMzk2MDVlLCAweDMxMzk2MDVlLCAweDMxMzk2MDVlLCAweDMxMzk2MDVlIH0gfSwKKwkgICB7IDB4MzEzOTYwNWUsIDB4MzEzOTYwNWUsIDB4MzEzOTYwNWUgfSB9LAogCXsgQVI1S19QSFlfV0VBS19PRkRNX0xPV19USFIsCi0JICAgeyAweDA1MGNiMDgxLCAweDA1MGNiMDgxLCAweDA1MGNiMDgxLCAweDA1MGNiMDgxLCAweDA1MGNiMDgxIH0gfSwKKwkgICB7IDB4MDUwY2IwODEsIDB4MDUwY2IwODEsIDB4MDUwY2IwODEgfSB9LAogCXsgQVI1S19QSFlfUlhfREVMQVksCi0JICAgeyAweDAwMDAwN2QwLCAweDAwMDAwN2QwLCAweDAwMDAwNDRjLCAweDAwMDAwODk4LCAweDAwMDAwN2QwIH0gfSwKKwkgICB7IDB4MDAwMDA3ZDAsIDB4MDAwMDA0NGMsIDB4MDAwMDA4OTggfSB9LAogCXsgQVI1S19QSFlfRlJBTUVfQ1RMXzUyMTEsCi0JICAgeyAweGY3YjgxMDAwLCAweGY3YjgxMDAwLCAweGY3YjgwZDAwLCAweGY3YjgxMDAwLCAweGY3YjgxMDAwIH0gfSwKKwkgICB7IDB4ZjdiODEwMDAsIDB4ZjdiODBkMDAsIDB4ZjdiODEwMDAgfSB9LAogCXsgQVI1S19QSFlfQ0NLVFhDVEwsCi0JICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwkgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAogCXsgQVI1S19QSFlfQ0NLX0NST1NTQ09SUiwKLQkgICB7IDB4ZDZiZTY3ODgsIDB4ZDZiZTY3ODgsIDB4ZDAzZTY3ODgsIDB4ZDAzZTY3ODgsIDB4ZDAzZTY3ODggfSB9LAorCSAgIHsgMHhkNmJlNjc4OCwgMHhkMDNlNjc4OCwgMHhkMDNlNjc4OCB9IH0sCiAJeyBBUjVLX1BIWV9HQUlOXzJHSFosCi0JICAgeyAweDAwMmVjMWUwLCAweDAwMmVjMWUwLCAweDAwMmFjMTIwLCAweDAwMmFjMTIwLCAweDAwMmFjMTIwIH0gfSwKKwkgICB7IDB4MDAyZWMxZTAsIDB4MDAyYWMxMjAsIDB4MDAyYWMxMjAgfSB9LAogCXsgQVI1S19QSFlfQ0NLX1JYX0NUTF80LAotCSAgIHsgMHgxODgzODAwYSwgMHgxODgzODAwYSwgMHgxODYzODAwYSwgMHgxODgzODAwYSwgMHgxODgzODAwYSB9IH0sCisJICAgeyAweDE4ODM4MDBhLCAweDE4NjM4MDBhLCAweDE4ODM4MDBhIH0gfSwKIAl7IDB4YTMwMCwKLQkgICB7IDB4MTgwMTAwMDAsIDB4MTgwMTAwMDAsIDB4MTgwMTAwMDAsIDB4MTgwMTAwMDAsIDB4MTgwMTAwMDAgfSB9LAorCSAgIHsgMHgxODAxMDAwMCwgMHgxODAxMDAwMCwgMHgxODAxMDAwMCB9IH0sCiAJeyAweGEzMDQsCi0JICAgeyAweDMwMDMyNjAyLCAweDMwMDMyNjAyLCAweDMwMDMyNjAyLCAweDMwMDMyNjAyLCAweDMwMDMyNjAyIH0gfSwKKwkgICB7IDB4MzAwMzI2MDIsIDB4MzAwMzI2MDIsIDB4MzAwMzI2MDIgfSB9LAogCXsgMHhhMzA4LAotCSAgIHsgMHg0ODA3M2UwNiwgMHg0ODA3M2UwNiwgMHg0ODA3M2UwNiwgMHg0ODA3M2UwNiwgMHg0ODA3M2UwNiB9IH0sCisJICAgeyAweDQ4MDczZTA2LCAweDQ4MDczZTA2LCAweDQ4MDczZTA2IH0gfSwKIAl7IDB4YTMwYywKLQkgICB7IDB4NTYwYjRjMGEsIDB4NTYwYjRjMGEsIDB4NTYwYjRjMGEsIDB4NTYwYjRjMGEsIDB4NTYwYjRjMGEgfSB9LAorCSAgIHsgMHg1NjBiNGMwYSwgMHg1NjBiNGMwYSwgMHg1NjBiNGMwYSB9IH0sCiAJeyAweGEzMTAsCi0JICAgeyAweDY0MWE2MDBmLCAweDY0MWE2MDBmLCAweDY0MWE2MDBmLCAweDY0MWE2MDBmLCAweDY0MWE2MDBmIH0gfSwKKwkgICB7IDB4NjQxYTYwMGYsIDB4NjQxYTYwMGYsIDB4NjQxYTYwMGYgfSB9LAogCXsgMHhhMzE0LAotCSAgIHsgMHg3ODRmNmUxYiwgMHg3ODRmNmUxYiwgMHg3ODRmNmUxYiwgMHg3ODRmNmUxYiwgMHg3ODRmNmUxYiB9IH0sCisJICAgeyAweDc4NGY2ZTFiLCAweDc4NGY2ZTFiLCAweDc4NGY2ZTFiIH0gfSwKIAl7IDB4YTMxOCwKLQkgICB7IDB4ODY4ZjdjNWEsIDB4ODY4ZjdjNWEsIDB4ODY4ZjdjNWEsIDB4ODY4ZjdjNWEsIDB4ODY4ZjdjNWEgfSB9LAorCSAgIHsgMHg4NjhmN2M1YSwgMHg4NjhmN2M1YSwgMHg4NjhmN2M1YSB9IH0sCiAJeyAweGEzMWMsCi0JICAgeyAweDkwY2Y4NjViLCAweDkwY2Y4NjViLCAweDhlY2Y4NjViLCAweDhlY2Y4NjViLCAweDhlY2Y4NjViIH0gfSwKKwkgICB7IDB4OTBjZjg2NWIsIDB4OGVjZjg2NWIsIDB4OGVjZjg2NWIgfSB9LAogCXsgMHhhMzIwLAotCSAgIHsgMHg5ZDRmOTcwZiwgMHg5ZDRmOTcwZiwgMHg5YjRmOTcwZiwgMHg5YjRmOTcwZiwgMHg5YjRmOTcwZiB9IH0sCisJICAgeyAweDlkNGY5NzBmLCAweDliNGY5NzBmLCAweDliNGY5NzBmIH0gfSwKIAl7IDB4YTMyNCwKLQkgICB7IDB4YTdjZmEzOGYsIDB4YTdjZmEzOGYsIDB4YTNjZjlmOGYsIDB4YTNjZjlmOGYsIDB4YTNjZjlmOGYgfSB9LAorCSAgIHsgMHhhN2NmYTM4ZiwgMHhhM2NmOWY4ZiwgMHhhM2NmOWY4ZiB9IH0sCiAJeyAweGEzMjgsCi0JICAgeyAweGI1NWZhZjFmLCAweGI1NWZhZjFmLCAweGIzNWZhZjFmLCAweGIzNWZhZjFmLCAweGIzNWZhZjFmIH0gfSwKKwkgICB7IDB4YjU1ZmFmMWYsIDB4YjM1ZmFmMWYsIDB4YjM1ZmFmMWYgfSB9LAogCXsgMHhhMzJjLAotCSAgIHsgMHhiZGRmYjk5ZiwgMHhiZGRmYjk5ZiwgMHhiYmRmYjk5ZiwgMHhiYmRmYjk5ZiwgMHhiYmRmYjk5ZiB9IH0sCisJICAgeyAweGJkZGZiOTlmLCAweGJiZGZiOTlmLCAweGJiZGZiOTlmIH0gfSwKIAl7IDB4YTMzMCwKLQkgICB7IDB4Y2I3ZmM1M2YsIDB4Y2I3ZmM1M2YsIDB4Y2I3ZmM3M2YsIDB4Y2I3ZmM3M2YsIDB4Y2I3ZmM3M2YgfSB9LAorCSAgIHsgMHhjYjdmYzUzZiwgMHhjYjdmYzczZiwgMHhjYjdmYzczZiB9IH0sCiAJeyAweGEzMzQsCi0JICAgeyAweGQ1ZmZkMWJmLCAweGQ1ZmZkMWJmLCAweGQzZmZkMWJmLCAweGQzZmZkMWJmLCAweGQzZmZkMWJmIH0gfSwKKwkgICB7IDB4ZDVmZmQxYmYsIDB4ZDNmZmQxYmYsIDB4ZDNmZmQxYmYgfSB9LAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmkgcmY1NDEzX2luaV9jb21tb25fZW5kW10gPSB7CkBAIC05NzIsMzggKzk2OCwzOCBAQAogLyogWFhYOiBhIG1vZGUgPyAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmlfbW9kZSByZjI0MTNfaW5pX21vZGVfZW5kW10gPSB7CiAJeyBBUjVLX1RYQ0ZHLAotCS8qCWEvWFIJICAgYVR1cmJvCSAgYgkgICBnIChEWU4pICAgICBnVHVyYm8gICAgICovCi0JICAgeyAweDAwMDAwMDE1LCAweDAwMDAwMDE1LCAweDAwMDAwMDE1LCAweDAwMDAwMDE1LCAweDAwMDAwMDE1IH0gfSwKKwkvKglBL1hSICAgICAgICAgIEIgICAgICAgICAgIEcgICAgICAgKi8KKwkgICB7IDB4MDAwMDAwMTUsIDB4MDAwMDAwMTUsIDB4MDAwMDAwMTUgfSB9LAogCXsgQVI1S19VU0VDXzUyMTEsCi0JICAgeyAweDEyOGQ5M2E3LCAweDA5ODgxM2NmLCAweDA0ZTAxMzk1LCAweDEyZTAxM2FiLCAweDA5ODgxM2NmIH0gfSwKKwkgICB7IDB4MTI4ZDkzYTcsIDB4MDRlMDEzOTUsIDB4MTJlMDEzYWIgfSB9LAogCXsgQVI1S19QSFlfUkZfQ1RMMywKLQkgICB7IDB4MGEwMjAwMDEsIDB4MGEwMjAwMDEsIDB4MDUwMjAwMDAsIDB4MGEwMjAwMDEsIDB4MGEwMjAwMDEgfSB9LAorCSAgIHsgMHgwYTAyMDAwMSwgMHgwNTAyMDAwMCwgMHgwYTAyMDAwMSB9IH0sCiAJeyBBUjVLX1BIWV9SRl9DVEw0LAotCSAgIHsgMHgwMDAwMGUwMCwgMHgwMDAwMGUwMCwgMHgwMDAwMGUwMCwgMHgwMDAwMGUwMCwgMHgwMDAwMGUwMCB9IH0sCisJICAgeyAweDAwMDAwZTAwLCAweDAwMDAwZTAwLCAweDAwMDAwZTAwIH0gfSwKIAl7IEFSNUtfUEhZX1BBX0NUTCwKLQkgICB7IDB4MDAwMDAwMDIsIDB4MDAwMDAwMDIsIDB4MDAwMDAwMGEsIDB4MDAwMDAwMGEsIDB4MDAwMDAwMGEgfSB9LAorCSAgIHsgMHgwMDAwMDAwMiwgMHgwMDAwMDAwYSwgMHgwMDAwMDAwYSB9IH0sCiAJeyBBUjVLX1BIWV9HQUlOLAotCSAgIHsgMHgwMDE4ZGE2ZCwgMHgwMDE4ZGE2ZCwgMHgwMDFhNmE2NCwgMHgwMDFhNmE2NCwgMHgwMDFhNmE2NCB9IH0sCisJICAgeyAweDAwMThkYTZkLCAweDAwMWE2YTY0LCAweDAwMWE2YTY0IH0gfSwKIAl7IEFSNUtfUEhZX0RFU0lSRURfU0laRSwKLQkgICB7IDB4MGRlOGI0ZTAsIDB4MGRlOGI0ZTAsIDB4MGRlOGIwZGEsIDB4MGM5OGIwZGEsIDB4MGRlOGIwZGEgfSB9LAorCSAgIHsgMHgwZGU4YjRlMCwgMHgwZGU4YjBkYSwgMHgwYzk4YjBkYSB9IH0sCiAJeyBBUjVLX1BIWV9TSUcsCi0JICAgeyAweDdlODAwZDJlLCAweDdlODAwZDJlLCAweDdlZTgwZDJlLCAweDdlYzgwZDJlLCAweDdlODAwZDJlIH0gfSwKKwkgICB7IDB4N2U4MDBkMmUsIDB4N2VlODBkMmUsIDB4N2VjODBkMmUgfSB9LAogCXsgQVI1S19QSFlfQUdDQ09BUlNFLAotCSAgIHsgMHgzMTM3NjY1ZSwgMHgzMTM3NjY1ZSwgMHgzMTM3NjY1ZSwgMHgzMTM5NjA1ZSwgMHgzMTM3NjY1ZSB9IH0sCisJICAgeyAweDMxMzc2NjVlLCAweDMxMzc2NjVlLCAweDMxMzk2MDVlIH0gfSwKIAl7IEFSNUtfUEhZX1dFQUtfT0ZETV9MT1dfVEhSLAotCSAgIHsgMHgwNTBjYjA4MSwgMHgwNTBjYjA4MSwgMHgwNTBjYjA4MSwgMHgwNTBjYjA4MSwgMHgwNTBjYjA4MSB9IH0sCisJICAgeyAweDA1MGNiMDgxLCAweDA1MGNiMDgxLCAweDA1MGNiMDgxIH0gfSwKIAl7IEFSNUtfUEhZX1JYX0RFTEFZLAotCSAgIHsgMHgwMDAwMDdkMCwgMHgwMDAwMDdkMCwgMHgwMDAwMDQ0YywgMHgwMDAwMDg5OCwgMHgwMDAwMDdkMCB9IH0sCisJICAgeyAweDAwMDAwN2QwLCAweDAwMDAwNDRjLCAweDAwMDAwODk4IH0gfSwKIAl7IEFSNUtfUEhZX0ZSQU1FX0NUTF81MjExLAotCSAgIHsgMHhmN2I4MTAwMCwgMHhmN2I4MTAwMCwgMHhmN2I4MGQwMCwgMHhmN2I4MTAwMCwgMHhmN2I4MTAwMCB9IH0sCisJICAgeyAweGY3YjgxMDAwLCAweGY3YjgwZDAwLCAweGY3YjgxMDAwIH0gfSwKIAl7IEFSNUtfUEhZX0NDS1RYQ1RMLAotCSAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKIAl7IEFSNUtfUEhZX0NDS19DUk9TU0NPUlIsCi0JICAgeyAweGQ2YmU2Nzg4LCAweGQ2YmU2Nzg4LCAweGQwM2U2Nzg4LCAweGQwM2U2Nzg4LCAweGQwM2U2Nzg4IH0gfSwKKwkgICB7IDB4ZDZiZTY3ODgsIDB4ZDAzZTY3ODgsIDB4ZDAzZTY3ODggfSB9LAogCXsgQVI1S19QSFlfR0FJTl8yR0haLAotCSAgIHsgMHgwMDJjMDE0MCwgMHgwMDJjMDE0MCwgMHgwMDQyYzE0MCwgMHgwMDQyYzE0MCwgMHgwMDQyYzE0MCB9IH0sCisJICAgeyAweDAwMmMwMTQwLCAweDAwNDJjMTQwLCAweDAwNDJjMTQwIH0gfSwKIAl7IEFSNUtfUEhZX0NDS19SWF9DVExfNCwKLQkgICB7IDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEsIDB4MTg2MzgwMGEsIDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEgfSB9LAorCSAgIHsgMHgxODgzODAwYSwgMHgxODYzODAwYSwgMHgxODgzODAwYSB9IH0sCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaSByZjI0MTNfaW5pX2NvbW1vbl9lbmRbXSA9IHsKQEAgLTEwOTQsNTIgKzEwOTAsNTAgQEAKIC8qIFhYWDogYSBtb2RlID8gKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX21vZGUgcmYyNDI1X2luaV9tb2RlX2VuZFtdID0gewogCXsgQVI1S19UWENGRywKLQkvKglhL1hSCSAgIGFUdXJibwkgIGIJICAgZyAoRFlOKSAgICAgZ1R1cmJvICAgICAqLwotCSAgIHsgMHgwMDAwMDAxNSwgMHgwMDAwMDAxNSwgMHgwMDAwMDAxNSwgMHgwMDAwMDAxNSwgMHgwMDAwMDAxNSB9IH0sCisJLyoJQS9YUiAgICAgICAgICBCICAgICAgICAgICBHICAgICAgICovCisJICAgeyAweDAwMDAwMDE1LCAweDAwMDAwMDE1LCAweDAwMDAwMDE1IH0gfSwKIAl7IEFSNUtfVVNFQ181MjExLAotCSAgIHsgMHgxMjhkOTNhNywgMHgwOTg4MTNjZiwgMHgwNGUwMTM5NSwgMHgxMmUwMTNhYiwgMHgwOTg4MTNjZiB9IH0sCi0JeyBBUjVLX1BIWV9UVVJCTywKLQkgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDEgfSB9LAorCSAgIHsgMHgxMjhkOTNhNywgMHgwNGUwMTM5NSwgMHgxMmUwMTNhYiB9IH0sCiAJeyBBUjVLX1BIWV9SRl9DVEwzLAotCSAgIHsgMHgwYTAyMDAwMSwgMHgwYTAyMDAwMSwgMHgwNTAyMDEwMCwgMHgwYTAyMDAwMSwgMHgwYTAyMDAwMSB9IH0sCisJICAgeyAweDBhMDIwMDAxLCAweDA1MDIwMTAwLCAweDBhMDIwMDAxIH0gfSwKIAl7IEFSNUtfUEhZX1JGX0NUTDQsCi0JICAgeyAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlIH0gfSwKKwkgICB7IDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUgfSB9LAogCXsgQVI1S19QSFlfUEFfQ1RMLAotCSAgIHsgMHgwMDAwMDAwMywgMHgwMDAwMDAwMywgMHgwMDAwMDAwYiwgMHgwMDAwMDAwYiwgMHgwMDAwMDAwYiB9IH0sCisJICAgeyAweDAwMDAwMDAzLCAweDAwMDAwMDBiLCAweDAwMDAwMDBiIH0gfSwKIAl7IEFSNUtfUEhZX1NFVFRMSU5HLAotCSAgIHsgMHgxMzcyMTYxYywgMHgxMzcyMWMyNSwgMHgxMzcyMTcyMiwgMHgxMzcyMTQyMiwgMHgxMzcyMWMyNSB9IH0sCisJICAgeyAweDEzNzIxNjFjLCAweDEzNzIxNzIyLCAweDEzNzIxNDIyIH0gfSwKIAl7IEFSNUtfUEhZX0dBSU4sCi0JICAgeyAweDAwMThmYTYxLCAweDAwMThmYTYxLCAweDAwMTk5YTY1LCAweDAwMTk5YTY1LCAweDAwMTk5YTY1IH0gfSwKKwkgICB7IDB4MDAxOGZhNjEsIDB4MDAxOTlhNjUsIDB4MDAxOTlhNjUgfSB9LAogCXsgQVI1S19QSFlfREVTSVJFRF9TSVpFLAotCSAgIHsgMHgwYzk4YjRlMCwgMHgwYzk4YjRlMCwgMHgwYzk4YjBkYSwgMHgwYzk4YjBkYSwgMHgwYzk4YjBkYSB9IH0sCisJICAgeyAweDBjOThiNGUwLCAweDBjOThiMGRhLCAweDBjOThiMGRhIH0gfSwKIAl7IEFSNUtfUEhZX1NJRywKLQkgICB7IDB4N2VjODBkMmUsIDB4N2VjODBkMmUsIDB4N2VjODBkMmUsIDB4N2VjODBkMmUsIDB4N2VjODBkMmUgfSB9LAorCSAgIHsgMHg3ZWM4MGQyZSwgMHg3ZWM4MGQyZSwgMHg3ZWM4MGQyZSB9IH0sCiAJeyBBUjVLX1BIWV9BR0NDT0FSU0UsCi0JICAgeyAweDMxMzk2MDVlLCAweDMxMzk2MDVlLCAweDMxMzk2MDVlLCAweDMxMzk2MDVlLCAweDMxMzk2MDVlIH0gfSwKKwkgICB7IDB4MzEzOTYwNWUsIDB4MzEzOTYwNWUsIDB4MzEzOTYwNWUgfSB9LAogCXsgQVI1S19QSFlfV0VBS19PRkRNX0xPV19USFIsCi0JICAgeyAweDA1MGNiMDgxLCAweDA1MGNiMDgxLCAweDA1MGNiMDgxLCAweDA1MGNiMDgxLCAweDA1MGNiMDgxIH0gfSwKKwkgICB7IDB4MDUwY2IwODEsIDB4MDUwY2IwODEsIDB4MDUwY2IwODEgfSB9LAogCXsgQVI1S19QSFlfUlhfREVMQVksCi0JICAgeyAweDAwMDAwN2QwLCAweDAwMDAwN2QwLCAweDAwMDAwNDRjLCAweDAwMDAwODk4LCAweDAwMDAwN2QwIH0gfSwKKwkgICB7IDB4MDAwMDA3ZDAsIDB4MDAwMDA0NGMsIDB4MDAwMDA4OTggfSB9LAogCXsgQVI1S19QSFlfRlJBTUVfQ1RMXzUyMTEsCi0JICAgeyAweGY3YjgxMDAwLCAweGY3YjgxMDAwLCAweGY3YjgwZDAwLCAweGY3YjgxMDAwLCAweGY3YjgxMDAwIH0gfSwKKwkgICB7IDB4ZjdiODEwMDAsIDB4ZjdiODBkMDAsIDB4ZjdiODEwMDAgfSB9LAogCXsgQVI1S19QSFlfQ0NLVFhDVEwsCi0JICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwkgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAogCXsgQVI1S19QSFlfQ0NLX0NST1NTQ09SUiwKLQkgICB7IDB4ZDZiZTY3ODgsIDB4ZDZiZTY3ODgsIDB4ZDAzZTY3ODgsIDB4ZDAzZTY3ODgsIDB4ZDAzZTY3ODggfSB9LAorCSAgIHsgMHhkNmJlNjc4OCwgMHhkMDNlNjc4OCwgMHhkMDNlNjc4OCB9IH0sCiAJeyBBUjVLX1BIWV9HQUlOXzJHSFosCi0JICAgeyAweDAwMDAwMTQwLCAweDAwMDAwMTQwLCAweDAwNTJjMTQwLCAweDAwNTJjMTQwLCAweDAwNTJjMTQwIH0gfSwKKwkgICB7IDB4MDAwMDAxNDAsIDB4MDA1MmMxNDAsIDB4MDA1MmMxNDAgfSB9LAogCXsgQVI1S19QSFlfQ0NLX1JYX0NUTF80LAotCSAgIHsgMHgxODgzODAwYSwgMHgxODgzODAwYSwgMHgxODYzODAwYSwgMHgxODgzODAwYSwgMHgxODgzODAwYSB9IH0sCisJICAgeyAweDE4ODM4MDBhLCAweDE4NjM4MDBhLCAweDE4ODM4MDBhIH0gfSwKIAl7IDB4YTMyNCwKLQkgICB7IDB4YTdjZmE3Y2YsIDB4YTdjZmE3Y2YsIDB4YTdjZmE3Y2YsIDB4YTdjZmE3Y2YsIDB4YTdjZmE3Y2YgfSB9LAorCSAgIHsgMHhhN2NmYTdjZiwgMHhhN2NmYTdjZiwgMHhhN2NmYTdjZiB9IH0sCiAJeyAweGEzMjgsCi0JICAgeyAweGE3Y2ZhN2NmLCAweGE3Y2ZhN2NmLCAweGE3Y2ZhN2NmLCAweGE3Y2ZhN2NmLCAweGE3Y2ZhN2NmIH0gfSwKKwkgICB7IDB4YTdjZmE3Y2YsIDB4YTdjZmE3Y2YsIDB4YTdjZmE3Y2YgfSB9LAogCXsgMHhhMzJjLAotCSAgIHsgMHhhN2NmYTdjZiwgMHhhN2NmYTdjZiwgMHhhN2NmYTdjZiwgMHhhN2NmYTdjZiwgMHhhN2NmYTdjZiB9IH0sCisJICAgeyAweGE3Y2ZhN2NmLCAweGE3Y2ZhN2NmLCAweGE3Y2ZhN2NmIH0gfSwKIAl7IDB4YTMzMCwKLQkgICB7IDB4YTdjZmE3Y2YsIDB4YTdjZmE3Y2YsIDB4YTdjZmE3Y2YsIDB4YTdjZmE3Y2YsIDB4YTdjZmE3Y2YgfSB9LAorCSAgIHsgMHhhN2NmYTdjZiwgMHhhN2NmYTdjZiwgMHhhN2NmYTdjZiB9IH0sCiAJeyAweGEzMzQsCi0JICAgeyAweGE3Y2ZhN2NmLCAweGE3Y2ZhN2NmLCAweGE3Y2ZhN2NmLCAweGE3Y2ZhN2NmLCAweGE3Y2ZhN2NmIH0gfSwKKwkgICB7IDB4YTdjZmE3Y2YsIDB4YTdjZmE3Y2YsIDB4YTdjZmE3Y2YgfSB9LAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmkgcmYyNDI1X2luaV9jb21tb25fZW5kW10gPSB7CkBAIC0xMzY4LDE1ICsxMzYyLDE1IEBACiAgKiBXcml0ZSBpbml0aWFsIHJlZ2lzdGVyIGR1bXAKICAqLwogc3RhdGljIHZvaWQgYXRoNWtfaHdfaW5pX3JlZ2lzdGVycyhzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1bnNpZ25lZCBpbnQgc2l6ZSwKLQkJY29uc3Qgc3RydWN0IGF0aDVrX2luaSAqaW5pX3JlZ3MsIGJvb2wgY2hhbmdlX2NoYW5uZWwpCisJCWNvbnN0IHN0cnVjdCBhdGg1a19pbmkgKmluaV9yZWdzLCBib29sIHNraXBfcGN1KQogewogCXVuc2lnbmVkIGludCBpOwogCiAJLyogV3JpdGUgaW5pdGlhbCByZWdpc3RlcnMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0JCS8qIE9uIGNoYW5uZWwgY2hhbmdlIHRoZXJlIGlzCi0JCSAqIG5vIG5lZWQgdG8gbWVzcyB3aXRoIFBDVSAqLwotCQlpZiAoY2hhbmdlX2NoYW5uZWwgJiYKKwkJLyogU2tpcCBQQ1UgcmVnaXN0ZXJzIGlmCisJCSAqIHJlcXVlc3RlZCAqLworCQlpZiAoc2tpcF9wY3UgJiYKIAkJCQlpbmlfcmVnc1tpXS5pbmlfcmVnaXN0ZXIgPj0gQVI1S19QQ1VfTUlOICYmCiAJCQkJaW5pX3JlZ3NbaV0uaW5pX3JlZ2lzdGVyIDw9IEFSNUtfUENVX01BWCkKIAkJCWNvbnRpbnVlOwpAQCAtMTQwOSw3ICsxNDAzLDcgQEAKIAogfQogCi1pbnQgYXRoNWtfaHdfd3JpdGVfaW5pdHZhbHMoc3RydWN0IGF0aDVrX2h3ICphaCwgdTggbW9kZSwgYm9vbCBjaGFuZ2VfY2hhbm5lbCkKK2ludCBhdGg1a19od193cml0ZV9pbml0dmFscyhzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1OCBtb2RlLCBib29sIHNraXBfcGN1KQogewogCS8qCiAJICogV3JpdGUgaW5pdGlhbCByZWdpc3RlciBzZXR0aW5ncwpAQCAtMTQyNyw3ICsxNDIxLDcgQEAKIAkJICogV3JpdGUgaW5pdGlhbCBzZXR0aW5ncyBjb21tb24gZm9yIGFsbCBtb2RlcwogCQkgKi8KIAkJYXRoNWtfaHdfaW5pX3JlZ2lzdGVycyhhaCwgQVJSQVlfU0laRShhcjUyMTJfaW5pX2NvbW1vbl9zdGFydCksCi0JCQkJYXI1MjEyX2luaV9jb21tb25fc3RhcnQsIGNoYW5nZV9jaGFubmVsKTsKKwkJCQlhcjUyMTJfaW5pX2NvbW1vbl9zdGFydCwgc2tpcF9wY3UpOwogCiAJCS8qIFNlY29uZCBzZXQgb2YgbW9kZS1zcGVjaWZpYyBzZXR0aW5ncyAqLwogCQlzd2l0Y2ggKGFoLT5haF9yYWRpbykgewpAQCAtMTQzOSwxMiArMTQzMywxMiBAQAogCiAJCQlhdGg1a19od19pbmlfcmVnaXN0ZXJzKGFoLAogCQkJCQlBUlJBWV9TSVpFKHJmNTExMV9pbmlfY29tbW9uX2VuZCksCi0JCQkJCXJmNTExMV9pbmlfY29tbW9uX2VuZCwgY2hhbmdlX2NoYW5uZWwpOworCQkJCQlyZjUxMTFfaW5pX2NvbW1vbl9lbmQsIHNraXBfcGN1KTsKIAogCQkJLyogQmFzZWJhbmQgZ2FpbiB0YWJsZSAqLwogCQkJYXRoNWtfaHdfaW5pX3JlZ2lzdGVycyhhaCwKIAkJCQkJQVJSQVlfU0laRShyZjUxMTFfaW5pX2JiZ2FpbiksCi0JCQkJCXJmNTExMV9pbmlfYmJnYWluLCBjaGFuZ2VfY2hhbm5lbCk7CisJCQkJCXJmNTExMV9pbmlfYmJnYWluLCBza2lwX3BjdSk7CiAKIAkJCWJyZWFrOwogCQljYXNlIEFSNUtfUkY1MTEyOgpAQCAtMTQ1NSwxMSArMTQ0OSwxMSBAQAogCiAJCQlhdGg1a19od19pbmlfcmVnaXN0ZXJzKGFoLAogCQkJCQlBUlJBWV9TSVpFKHJmNTExMl9pbmlfY29tbW9uX2VuZCksCi0JCQkJCXJmNTExMl9pbmlfY29tbW9uX2VuZCwgY2hhbmdlX2NoYW5uZWwpOworCQkJCQlyZjUxMTJfaW5pX2NvbW1vbl9lbmQsIHNraXBfcGN1KTsKIAogCQkJYXRoNWtfaHdfaW5pX3JlZ2lzdGVycyhhaCwKIAkJCQkJQVJSQVlfU0laRShyZjUxMTJfaW5pX2JiZ2FpbiksCi0JCQkJCXJmNTExMl9pbmlfYmJnYWluLCBjaGFuZ2VfY2hhbm5lbCk7CisJCQkJCXJmNTExMl9pbmlfYmJnYWluLCBza2lwX3BjdSk7CiAKIAkJCWJyZWFrOwogCQljYXNlIEFSNUtfUkY1NDEzOgpAQCAtMTQ3MCwxMSArMTQ2NCwxMSBAQAogCiAJCQlhdGg1a19od19pbmlfcmVnaXN0ZXJzKGFoLAogCQkJCQlBUlJBWV9TSVpFKHJmNTQxM19pbmlfY29tbW9uX2VuZCksCi0JCQkJCXJmNTQxM19pbmlfY29tbW9uX2VuZCwgY2hhbmdlX2NoYW5uZWwpOworCQkJCQlyZjU0MTNfaW5pX2NvbW1vbl9lbmQsIHNraXBfcGN1KTsKIAogCQkJYXRoNWtfaHdfaW5pX3JlZ2lzdGVycyhhaCwKIAkJCQkJQVJSQVlfU0laRShyZjUxMTJfaW5pX2JiZ2FpbiksCi0JCQkJCXJmNTExMl9pbmlfYmJnYWluLCBjaGFuZ2VfY2hhbm5lbCk7CisJCQkJCXJmNTExMl9pbmlfYmJnYWluLCBza2lwX3BjdSk7CiAKIAkJCWJyZWFrOwogCQljYXNlIEFSNUtfUkYyMzE2OgpAQCAtMTQ4Niw3ICsxNDgwLDcgQEAKIAogCQkJYXRoNWtfaHdfaW5pX3JlZ2lzdGVycyhhaCwKIAkJCQkJQVJSQVlfU0laRShyZjI0MTNfaW5pX2NvbW1vbl9lbmQpLAotCQkJCQlyZjI0MTNfaW5pX2NvbW1vbl9lbmQsIGNoYW5nZV9jaGFubmVsKTsKKwkJCQkJcmYyNDEzX2luaV9jb21tb25fZW5kLCBza2lwX3BjdSk7CiAKIAkJCS8qIE92ZXJyaWRlIHNldHRpbmdzIGZyb20gcmYyNDEzX2luaV9jb21tb25fZW5kICovCiAJCQlpZiAoYWgtPmFoX3JhZGlvID09IEFSNUtfUkYyMzE2KSB7CkBAIC0xNDk4LDkgKzE0OTIsMzIgQEAKIAogCQkJYXRoNWtfaHdfaW5pX3JlZ2lzdGVycyhhaCwKIAkJCQkJQVJSQVlfU0laRShyZjUxMTJfaW5pX2JiZ2FpbiksCi0JCQkJCXJmNTExMl9pbmlfYmJnYWluLCBjaGFuZ2VfY2hhbm5lbCk7CisJCQkJCXJmNTExMl9pbmlfYmJnYWluLCBza2lwX3BjdSk7CiAJCQlicmVhazsKIAkJY2FzZSBBUjVLX1JGMjMxNzoKKworCQkJYXRoNWtfaHdfaW5pX21vZGVfcmVnaXN0ZXJzKGFoLAorCQkJCQlBUlJBWV9TSVpFKHJmMjQxM19pbmlfbW9kZV9lbmQpLAorCQkJCQlyZjI0MTNfaW5pX21vZGVfZW5kLCBtb2RlKTsKKworCQkJYXRoNWtfaHdfaW5pX3JlZ2lzdGVycyhhaCwKKwkJCQkJQVJSQVlfU0laRShyZjI0MjVfaW5pX2NvbW1vbl9lbmQpLAorCQkJCQlyZjI0MjVfaW5pX2NvbW1vbl9lbmQsIHNraXBfcGN1KTsKKworCQkJLyogT3ZlcnJpZGUgc2V0dGluZ3MgZnJvbSByZjI0MTNfaW5pX21vZGVfZW5kICovCisJCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MDAxODBhNjUsIEFSNUtfUEhZX0dBSU4pOworCisJCQkvKiBPdmVycmlkZSBzZXR0aW5ncyBmcm9tIHJmMjQxM19pbmlfY29tbW9uX2VuZCAqLworCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDAwMDA0MDAwLCBBUjVLX1BIWV9BR0MpOworCQkJQVI1S19SRUdfV1JJVEVfQklUUyhhaCwgQVI1S19QSFlfVFBDX1JHNSwKKwkJCQlBUjVLX1BIWV9UUENfUkc1X1BEX0dBSU5fT1ZFUkxBUCwgMHhhKTsKKwkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHg4MDAwMDBhOCwgMHg4MTQwKTsKKwkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgwMDAwMDBmZiwgMHg5OTU4KTsKKworCQkJYXRoNWtfaHdfaW5pX3JlZ2lzdGVycyhhaCwKKwkJCQkJQVJSQVlfU0laRShyZjUxMTJfaW5pX2JiZ2FpbiksCisJCQkJCXJmNTExMl9pbmlfYmJnYWluLCBza2lwX3BjdSk7CisJCQlicmVhazsKIAkJY2FzZSBBUjVLX1JGMjQyNToKIAogCQkJYXRoNWtfaHdfaW5pX21vZGVfcmVnaXN0ZXJzKGFoLApAQCAtMTUwOSwxMSArMTUyNiwxMSBAQAogCiAJCQlhdGg1a19od19pbmlfcmVnaXN0ZXJzKGFoLAogCQkJCQlBUlJBWV9TSVpFKHJmMjQyNV9pbmlfY29tbW9uX2VuZCksCi0JCQkJCXJmMjQyNV9pbmlfY29tbW9uX2VuZCwgY2hhbmdlX2NoYW5uZWwpOworCQkJCQlyZjI0MjVfaW5pX2NvbW1vbl9lbmQsIHNraXBfcGN1KTsKIAogCQkJYXRoNWtfaHdfaW5pX3JlZ2lzdGVycyhhaCwKIAkJCQkJQVJSQVlfU0laRShyZjUxMTJfaW5pX2JiZ2FpbiksCi0JCQkJCXJmNTExMl9pbmlfYmJnYWluLCBjaGFuZ2VfY2hhbm5lbCk7CisJCQkJCXJmNTExMl9pbmlfYmJnYWluLCBza2lwX3BjdSk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXJldHVybiAtRUlOVkFMOwpAQCAtMTUzOCwxNyArMTU1NSwxNyBAQAogCQkgKiBXcml0ZSBpbml0aWFsIHNldHRpbmdzIGNvbW1vbiBmb3IgYWxsIG1vZGVzCiAJCSAqLwogCQlhdGg1a19od19pbmlfcmVnaXN0ZXJzKGFoLCBBUlJBWV9TSVpFKGFyNTIxMV9pbmkpLAotCQkJCWFyNTIxMV9pbmksIGNoYW5nZV9jaGFubmVsKTsKKwkJCQlhcjUyMTFfaW5pLCBza2lwX3BjdSk7CiAKIAkJLyogQVI1MjExIG9ubHkgY29tZXMgd2l0aCA1MTExICovCiAKIAkJLyogQmFzZWJhbmQgZ2FpbiB0YWJsZSAqLwogCQlhdGg1a19od19pbmlfcmVnaXN0ZXJzKGFoLCBBUlJBWV9TSVpFKHJmNTExMV9pbmlfYmJnYWluKSwKLQkJCQlyZjUxMTFfaW5pX2JiZ2FpbiwgY2hhbmdlX2NoYW5uZWwpOworCQkJCXJmNTExMV9pbmlfYmJnYWluLCBza2lwX3BjdSk7CiAJLyogRm9yIEFSNTIxMCAoZm9yIG1vZGUgc2V0dGluZ3MgY2hlY2sgb3V0IGF0aDVrX2h3X3Jlc2V0X3R4X3F1ZXVlKSAqLwogCX0gZWxzZSBpZiAoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUyMTApIHsKIAkJYXRoNWtfaHdfaW5pX3JlZ2lzdGVycyhhaCwgQVJSQVlfU0laRShhcjUyMTBfaW5pKSwKLQkJCQlhcjUyMTBfaW5pLCBjaGFuZ2VfY2hhbm5lbCk7CisJCQkJYXI1MjEwX2luaSwgc2tpcF9wY3UpOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2xlZC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2xlZC5jCmluZGV4IDY3YWE1MmUuLjU3NmVkZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9sZWQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvbGVkLmMKQEAgLTEzMyw3ICsxMzMsNyBAQAogCWxlZC0+bGVkX2Rldi5kZWZhdWx0X3RyaWdnZXIgPSB0cmlnZ2VyOwogCWxlZC0+bGVkX2Rldi5icmlnaHRuZXNzX3NldCA9IGF0aDVrX2xlZF9icmlnaHRuZXNzX3NldDsKIAotCWVyciA9IGxlZF9jbGFzc2Rldl9yZWdpc3Rlcigmc2MtPnBkZXYtPmRldiwgJmxlZC0+bGVkX2Rldik7CisJZXJyID0gbGVkX2NsYXNzZGV2X3JlZ2lzdGVyKHNjLT5kZXYsICZsZWQtPmxlZF9kZXYpOwogCWlmIChlcnIpIHsKIAkJQVRINUtfV0FSTihzYywgImNvdWxkIG5vdCByZWdpc3RlciBMRUQgJXNcbiIsIG5hbWUpOwogCQlsZWQtPnNjID0gTlVMTDsKQEAgLTE2MSwxMSArMTYxLDIwIEBACiB7CiAJaW50IHJldCA9IDA7CiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBzYy0+aHc7CisjaWZuZGVmIENPTkZJR19BVEhFUk9TX0FSMjMxWAogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gc2MtPnBkZXY7CisjZW5kaWYKIAljaGFyIG5hbWVbQVRINUtfTEVEX01BWF9OQU1FX0xFTiArIDFdOwogCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICptYXRjaDsKIAorCWlmICghc2MtPnBkZXYpCisJCXJldHVybiAwOworCisjaWZkZWYgQ09ORklHX0FUSEVST1NfQVIyMzFYCisJbWF0Y2ggPSBOVUxMOworI2Vsc2UKIAltYXRjaCA9IHBjaV9tYXRjaF9pZCgmYXRoNWtfbGVkX2RldmljZXNbMF0sIHBkZXYpOworI2VuZGlmCiAJaWYgKG1hdGNoKSB7CiAJCV9fc2V0X2JpdChBVEhfU1RBVF9MRURTT0ZULCBzYy0+c3RhdHVzKTsKIAkJc2MtPmxlZF9waW4gPSBBVEhfUElOKG1hdGNoLT5kcml2ZXJfZGF0YSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvbWFjODAyMTEtb3BzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvbWFjODAyMTEtb3BzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDc2ZDY4YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9tYWM4MDIxMS1vcHMuYwpAQCAtMCwwICsxLDc3NCBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBTYW0gTGVmZmxlciwgRXJybm8gQ29uc3VsdGluZworICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDUgQXRoZXJvcyBDb21tdW5pY2F0aW9ucywgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDA2IERldmljZXNjYXBlIFNvZnR3YXJlLCBJbmMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSmlyaSBTbGFieSA8amlyaXNsYWJ5QGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoYykgMjAwNyBMdWlzIFIuIFJvZHJpZ3VleiA8bWNncm9mQHdpbmxhYi5ydXRnZXJzLmVkdT4KKyAqIENvcHlyaWdodCAoYykgMjAxMCBCcnVubyBSYW5kb2xmIDxicjFAZWluZmFjaC5vcmc+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIsCisgKiAgICB3aXRob3V0IG1vZGlmaWNhdGlvbi4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSBhdCBtaW5pbXVtIGEgZGlzY2xhaW1lcgorICogICAgc2ltaWxhciB0byB0aGUgIk5PIFdBUlJBTlRZIiBkaXNjbGFpbWVyIGJlbG93ICgiRGlzY2xhaW1lciIpIGFuZCBhbnkKKyAqICAgIHJlZGlzdHJpYnV0aW9uIG11c3QgYmUgY29uZGl0aW9uZWQgdXBvbiBpbmNsdWRpbmcgYSBzdWJzdGFudGlhbGx5CisgKiAgICBzaW1pbGFyIERpc2NsYWltZXIgcmVxdWlyZW1lbnQgZm9yIGZ1cnRoZXIgYmluYXJ5IHJlZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZXMgb2YgdGhlIGFib3ZlLWxpc3RlZCBjb3B5cmlnaHQgaG9sZGVycyBub3IgdGhlIG5hbWVzCisgKiAgICBvZiBhbnkgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhpcyBzb2Z0d2FyZSBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKCJHUEwiKSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIE5PIFdBUlJBTlRZCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE5PTklORlJJTkdFTUVOVCwgTUVSQ0hBTlRJQklMSVRZCisgKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgU1BFQ0lBTCwgRVhFTVBMQVJZLAorICogT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIKKyAqIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorICoKKyAqLworCisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorCisjaW5jbHVkZSAiYmFzZS5oIgorI2luY2x1ZGUgInJlZy5oIgorCitleHRlcm4gaW50IGF0aDVrX21vZHBhcmFtX25vaHdjcnlwdDsKKworLyogZnVuY3Rpb25zIHVzZWQgZnJvbSBiYXNlLmMgKi8KK3ZvaWQgc2V0X2JlYWNvbl9maWx0ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGJvb2wgZW5hYmxlKTsKK2Jvb2wgYXRoX2FueV92aWZfYXNzb2Moc3RydWN0IGF0aDVrX3NvZnRjICpzYyk7CitpbnQgYXRoNWtfdHhfcXVldWUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IsCisJCSAgIHN0cnVjdCBhdGg1a190eHEgKnR4cSk7CitpbnQgYXRoNWtfaW5pdF9odyhzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKTsKK2ludCBhdGg1a19zdG9wX2h3KHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpOwordm9pZCBhdGg1a19tb2RlX3NldHVwKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpOwordm9pZCBhdGg1a191cGRhdGVfYnNzaWRfbWFza19hbmRfb3Btb2RlKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MsCisJCQkJCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpOworaW50IGF0aDVrX2NoYW5fc2V0KHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MsIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbik7Cit2b2lkIGF0aDVrX2JlYWNvbl91cGRhdGVfdGltZXJzKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MsIHU2NCBiY190c2YpOworaW50IGF0aDVrX2JlYWNvbl91cGRhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpOwordm9pZCBhdGg1a19iZWFjb25fY29uZmlnKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpOwordm9pZCBhdGg1a190eGJ1Zl9mcmVlX3NrYihzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoNWtfYnVmICpiZik7Cit2b2lkIGF0aDVrX3J4YnVmX2ZyZWVfc2tiKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MsIHN0cnVjdCBhdGg1a19idWYgKmJmKTsKKworLyoqKioqKioqKioqKioqKioqKioqXAorKiBNYWM4MDIxMSBmdW5jdGlvbnMgKgorXCoqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50CithdGg1a190eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjID0gaHctPnByaXY7CisJdTE2IHFudW0gPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTsKKworCWlmIChXQVJOX09OKHFudW0gPj0gc2MtPmFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX3F1ZXVlcy5xX3R4X251bSkpIHsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIGF0aDVrX3R4X3F1ZXVlKGh3LCBza2IsICZzYy0+dHhxc1txbnVtXSk7Cit9CisKKworc3RhdGljIGludAorYXRoNWtfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJcmV0dXJuIGF0aDVrX2luaXRfaHcoaHctPnByaXYpOworfQorCisKK3N0YXRpYyB2b2lkCithdGg1a19zdG9wKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCWF0aDVrX3N0b3BfaHcoaHctPnByaXYpOworfQorCisKK3N0YXRpYyBpbnQKK2F0aDVrX2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCit7CisJc3RydWN0IGF0aDVrX3NvZnRjICpzYyA9IGh3LT5wcml2OworCWludCByZXQ7CisJc3RydWN0IGF0aDVrX3ZpZiAqYXZmID0gKHZvaWQgKil2aWYtPmRydl9wcml2OworCisJbXV0ZXhfbG9jaygmc2MtPmxvY2spOworCisJaWYgKCh2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVAgfHwKKwkgICAgIHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKKwkgICAgJiYgKHNjLT5udW1fYXBfdmlmcyArIHNjLT5udW1fYWRob2NfdmlmcykgPj0gQVRIX0JDQlVGKSB7CisJCXJldCA9IC1FTE5STkc7CisJCWdvdG8gZW5kOworCX0KKworCS8qIERvbid0IGFsbG93IG90aGVyIGludGVyZmFjZXMgaWYgb25lIGFkLWhvYyBpcyBjb25maWd1cmVkLgorCSAqIFRPRE86IEZpeCB0aGUgcHJvYmxlbXMgd2l0aCBhZC1ob2MgYW5kIG11bHRpcGxlIG90aGVyIGludGVyZmFjZXMuCisJICogV2Ugd291bGQgbmVlZCB0byBvcGVyYXRlIHRoZSBIVyBpbiBhZC1ob2MgbW9kZSB0byBhbGxvdyBUU0YgdXBkYXRlcworCSAqIGZvciB0aGUgSUJTUywgYnV0IHRoaXMgYnJlYWtzIHdpdGggYWRkaXRpb25hbCBBUCBvciBTVEEgaW50ZXJmYWNlcworCSAqIGF0IHRoZSBtb21lbnQuICovCisJaWYgKHNjLT5udW1fYWRob2NfdmlmcyB8fAorCSAgICAoc2MtPm52aWZzICYmIHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykpIHsKKwkJQVRINUtfRVJSKHNjLCAiT25seSBvbmUgc2luZ2xlIGFkLWhvYyBpbnRlcmZhY2UgaXMgYWxsb3dlZC5cbiIpOworCQlyZXQgPSAtRUxOUk5HOworCQlnb3RvIGVuZDsKKwl9CisKKwlzd2l0Y2ggKHZpZi0+dHlwZSkgeworCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6CisJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgorCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CisJY2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOgorCQlhdmYtPm9wbW9kZSA9IHZpZi0+dHlwZTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVPUE5PVFNVUFA7CisJCWdvdG8gZW5kOworCX0KKworCXNjLT5udmlmcysrOworCUFUSDVLX0RCRyhzYywgQVRINUtfREVCVUdfTU9ERSwgImFkZCBpbnRlcmZhY2UgbW9kZSAlZFxuIiwgYXZmLT5vcG1vZGUpOworCisJLyogQXNzaWduIHRoZSB2YXAvYWRob2MgdG8gYSBiZWFjb24geG1pdCBzbG90LiAqLworCWlmICgoYXZmLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApIHx8CisJICAgIChhdmYtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgfHwKKwkgICAgKGF2Zi0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpKSB7CisJCWludCBzbG90OworCisJCVdBUk5fT04obGlzdF9lbXB0eSgmc2MtPmJjYnVmKSk7CisJCWF2Zi0+YmJ1ZiA9IGxpc3RfZmlyc3RfZW50cnkoJnNjLT5iY2J1Ziwgc3RydWN0IGF0aDVrX2J1ZiwKKwkJCQkJICAgICBsaXN0KTsKKwkJbGlzdF9kZWwoJmF2Zi0+YmJ1Zi0+bGlzdCk7CisKKwkJYXZmLT5ic2xvdCA9IDA7CisJCWZvciAoc2xvdCA9IDA7IHNsb3QgPCBBVEhfQkNCVUY7IHNsb3QrKykgeworCQkJaWYgKCFzYy0+YnNsb3Rbc2xvdF0pIHsKKwkJCQlhdmYtPmJzbG90ID0gc2xvdDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlCVUdfT04oc2MtPmJzbG90W2F2Zi0+YnNsb3RdICE9IE5VTEwpOworCQlzYy0+YnNsb3RbYXZmLT5ic2xvdF0gPSB2aWY7CisJCWlmIChhdmYtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkKKwkJCXNjLT5udW1fYXBfdmlmcysrOworCQllbHNlIGlmIChhdmYtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKKwkJCXNjLT5udW1fYWRob2NfdmlmcysrOworCX0KKworCS8qIEFueSBNQUMgYWRkcmVzcyBpcyBmaW5lLCBhbGwgb3RoZXJzIGFyZSBpbmNsdWRlZCB0aHJvdWdoIHRoZQorCSAqIGZpbHRlci4KKwkgKi8KKwltZW1jcHkoJnNjLT5sbGFkZHIsIHZpZi0+YWRkciwgRVRIX0FMRU4pOworCWF0aDVrX2h3X3NldF9sbGFkZHIoc2MtPmFoLCB2aWYtPmFkZHIpOworCisJbWVtY3B5KCZhdmYtPmxsYWRkciwgdmlmLT5hZGRyLCBFVEhfQUxFTik7CisKKwlhdGg1a19tb2RlX3NldHVwKHNjLCB2aWYpOworCisJcmV0ID0gMDsKK2VuZDoKKwltdXRleF91bmxvY2soJnNjLT5sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCisKK3N0YXRpYyB2b2lkCithdGg1a19yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKK3sKKwlzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjID0gaHctPnByaXY7CisJc3RydWN0IGF0aDVrX3ZpZiAqYXZmID0gKHZvaWQgKil2aWYtPmRydl9wcml2OworCXVuc2lnbmVkIGludCBpOworCisJbXV0ZXhfbG9jaygmc2MtPmxvY2spOworCXNjLT5udmlmcy0tOworCisJaWYgKGF2Zi0+YmJ1ZikgeworCQlhdGg1a190eGJ1Zl9mcmVlX3NrYihzYywgYXZmLT5iYnVmKTsKKwkJbGlzdF9hZGRfdGFpbCgmYXZmLT5iYnVmLT5saXN0LCAmc2MtPmJjYnVmKTsKKwkJZm9yIChpID0gMDsgaSA8IEFUSF9CQ0JVRjsgaSsrKSB7CisJCQlpZiAoc2MtPmJzbG90W2ldID09IHZpZikgeworCQkJCXNjLT5ic2xvdFtpXSA9IE5VTEw7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJYXZmLT5iYnVmID0gTlVMTDsKKwl9CisJaWYgKGF2Zi0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKQorCQlzYy0+bnVtX2FwX3ZpZnMtLTsKKwllbHNlIGlmIChhdmYtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKKwkJc2MtPm51bV9hZGhvY192aWZzLS07CisKKwlhdGg1a191cGRhdGVfYnNzaWRfbWFza19hbmRfb3Btb2RlKHNjLCBOVUxMKTsKKwltdXRleF91bmxvY2soJnNjLT5sb2NrKTsKK30KKworCisvKgorICogVE9ETzogUGh5IGRpc2FibGUvZGl2ZXJzaXR5IGV0YworICovCitzdGF0aWMgaW50CithdGg1a19jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiBjaGFuZ2VkKQoreworCXN0cnVjdCBhdGg1a19zb2Z0YyAqc2MgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoNWtfaHcgKmFoID0gc2MtPmFoOworCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZody0+Y29uZjsKKwlpbnQgcmV0ID0gMDsKKworCW11dGV4X2xvY2soJnNjLT5sb2NrKTsKKworCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0NIQU5ORUwpIHsKKwkJcmV0ID0gYXRoNWtfY2hhbl9zZXQoc2MsIGNvbmYtPmNoYW5uZWwpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gdW5sb2NrOworCX0KKworCWlmICgoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9QT1dFUikgJiYKKwkoc2MtPnBvd2VyX2xldmVsICE9IGNvbmYtPnBvd2VyX2xldmVsKSkgeworCQlzYy0+cG93ZXJfbGV2ZWwgPSBjb25mLT5wb3dlcl9sZXZlbDsKKworCQkvKiBIYWxmIGRCIHN0ZXBzICovCisJCWF0aDVrX2h3X3NldF90eHBvd2VyX2xpbWl0KGFoLCAoY29uZi0+cG93ZXJfbGV2ZWwgKiAyKSk7CisJfQorCisJLyogVE9ETzoKKwkgKiAxKSBNb3ZlIHRoaXMgb24gY29uZmlnX2ludGVyZmFjZSBhbmQgaGFuZGxlIGVhY2ggY2FzZQorCSAqIHNlcGFyYXRlbHkgZWcuIHdoZW4gd2UgaGF2ZSBvbmx5IG9uZSBTVEEgdmlmLCB1c2UKKwkgKiBBUjVLX0FOVE1PREVfU0lOR0xFX0FQCisJICoKKwkgKiAyKSBBbGxvdyB0aGUgdXNlciB0byBjaGFuZ2UgYW50ZW5uYSBtb2RlIGVnLiB3aGVuIG9ubHkKKwkgKiBvbmUgYW50ZW5uYSBpcyBwcmVzZW50CisJICoKKwkgKiAzKSBBbGxvdyB0aGUgdXNlciB0byBzZXQgZGVmYXVsdC90eCBhbnRlbm5hIHdoZW4gcG9zc2libGUKKwkgKgorCSAqIDQpIERlZmF1bHQgbW9kZSBzaG91bGQgaGFuZGxlIDkwJSBvZiB0aGUgY2FzZXMsIHRvZ2V0aGVyCisJICogd2l0aCBmaXhlZCBhL2IgYW5kIHNpbmdsZSBBUCBtb2RlcyB3ZSBzaG91bGQgYmUgYWJsZSB0bworCSAqIGhhbmRsZSA5OSUuIFNlY3RvcmVkIG1vZGVzIGFyZSBleHRyZW1lIGNhc2VzIGFuZCBpIHN0aWxsCisJICogaGF2ZW4ndCBmb3VuZCBhIHVzYWdlIGZvciB0aGVtLiBJZiB3ZSBkZWNpZGUgdG8gc3VwcG9ydCB0aGVtLAorCSAqIHRoZW4gd2UgbXVzdCBhbGxvdyB0aGUgdXNlciB0byBzZXQgaG93IG1hbnkgdHggYW50ZW5uYXMgd2UKKwkgKiBoYXZlIGF2YWlsYWJsZQorCSAqLworCWF0aDVrX2h3X3NldF9hbnRlbm5hX21vZGUoYWgsIGFoLT5haF9hbnRfbW9kZSk7CisKK3VubG9jazoKKwltdXRleF91bmxvY2soJnNjLT5sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCisKK3N0YXRpYyB2b2lkCithdGg1a19ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqYnNzX2NvbmYsIHUzMiBjaGFuZ2VzKQoreworCXN0cnVjdCBhdGg1a192aWYgKmF2ZiA9ICh2b2lkICopdmlmLT5kcnZfcHJpdjsKKwlzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjID0gaHctPnByaXY7CisJc3RydWN0IGF0aDVrX2h3ICphaCA9IHNjLT5haDsKKwlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoNWtfaHdfY29tbW9uKGFoKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbXV0ZXhfbG9jaygmc2MtPmxvY2spOworCisJaWYgKGNoYW5nZXMgJiBCU1NfQ0hBTkdFRF9CU1NJRCkgeworCQkvKiBDYWNoZSBmb3IgbGF0ZXIgdXNlIGR1cmluZyByZXNldHMgKi8KKwkJbWVtY3B5KGNvbW1vbi0+Y3VyYnNzaWQsIGJzc19jb25mLT5ic3NpZCwgRVRIX0FMRU4pOworCQljb21tb24tPmN1cmFpZCA9IDA7CisJCWF0aDVrX2h3X3NldF9ic3NpZChhaCk7CisJCW1taW93YigpOworCX0KKworCWlmIChjaGFuZ2VzICYgQlNTX0NIQU5HRURfQkVBQ09OX0lOVCkKKwkJc2MtPmJpbnR2YWwgPSBic3NfY29uZi0+YmVhY29uX2ludDsKKworCWlmIChjaGFuZ2VzICYgQlNTX0NIQU5HRURfQVNTT0MpIHsKKwkJYXZmLT5hc3NvYyA9IGJzc19jb25mLT5hc3NvYzsKKwkJaWYgKGJzc19jb25mLT5hc3NvYykKKwkJCXNjLT5hc3NvYyA9IGJzc19jb25mLT5hc3NvYzsKKwkJZWxzZQorCQkJc2MtPmFzc29jID0gYXRoX2FueV92aWZfYXNzb2Moc2MpOworCisJCWlmIChzYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCisJCQlzZXRfYmVhY29uX2ZpbHRlcihodywgc2MtPmFzc29jKTsKKwkJYXRoNWtfaHdfc2V0X2xlZHN0YXRlKHNjLT5haCwgc2MtPmFzc29jID8KKwkJCUFSNUtfTEVEX0FTU09DIDogQVI1S19MRURfSU5JVCk7CisJCWlmIChic3NfY29uZi0+YXNzb2MpIHsKKwkJCUFUSDVLX0RCRyhzYywgQVRINUtfREVCVUdfQU5ZLAorCQkJCSAgIkJzcyBJbmZvIEFTU09DICVkLCBic3NpZDogJXBNXG4iLAorCQkJCSAgYnNzX2NvbmYtPmFpZCwgY29tbW9uLT5jdXJic3NpZCk7CisJCQljb21tb24tPmN1cmFpZCA9IGJzc19jb25mLT5haWQ7CisJCQlhdGg1a19od19zZXRfYnNzaWQoYWgpOworCQkJLyogT25jZSBBTkkgaXMgYXZhaWxhYmxlIHlvdSB3b3VsZCBzdGFydCBpdCBoZXJlICovCisJCX0KKwl9CisKKwlpZiAoY2hhbmdlcyAmIEJTU19DSEFOR0VEX0JFQUNPTikgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmc2MtPmJsb2NrLCBmbGFncyk7CisJCWF0aDVrX2JlYWNvbl91cGRhdGUoaHcsIHZpZik7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNjLT5ibG9jaywgZmxhZ3MpOworCX0KKworCWlmIChjaGFuZ2VzICYgQlNTX0NIQU5HRURfQkVBQ09OX0VOQUJMRUQpCisJCXNjLT5lbmFibGVfYmVhY29uID0gYnNzX2NvbmYtPmVuYWJsZV9iZWFjb247CisKKwlpZiAoY2hhbmdlcyAmIChCU1NfQ0hBTkdFRF9CRUFDT04gfCBCU1NfQ0hBTkdFRF9CRUFDT05fRU5BQkxFRCB8CisJCSAgICAgICBCU1NfQ0hBTkdFRF9CRUFDT05fSU5UKSkKKwkJYXRoNWtfYmVhY29uX2NvbmZpZyhzYyk7CisKKwltdXRleF91bmxvY2soJnNjLT5sb2NrKTsKK30KKworCitzdGF0aWMgdTY0CithdGg1a19wcmVwYXJlX211bHRpY2FzdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCXN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICptY19saXN0KQoreworCXUzMiBtZmlsdFsyXSwgdmFsOworCXU4IHBvczsKKwlzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhOworCisJbWZpbHRbMF0gPSAwOworCW1maWx0WzFdID0gMTsKKworCW5ldGRldl9od19hZGRyX2xpc3RfZm9yX2VhY2goaGEsIG1jX2xpc3QpIHsKKwkJLyogY2FsY3VsYXRlIFhPUiBvZiBlaWdodCA2LWJpdCB2YWx1ZXMgKi8KKwkJdmFsID0gZ2V0X3VuYWxpZ25lZF9sZTMyKGhhLT5hZGRyICsgMCk7CisJCXBvcyA9ICh2YWwgPj4gMTgpIF4gKHZhbCA+PiAxMikgXiAodmFsID4+IDYpIF4gdmFsOworCQl2YWwgPSBnZXRfdW5hbGlnbmVkX2xlMzIoaGEtPmFkZHIgKyAzKTsKKwkJcG9zIF49ICh2YWwgPj4gMTgpIF4gKHZhbCA+PiAxMikgXiAodmFsID4+IDYpIF4gdmFsOworCQlwb3MgJj0gMHgzZjsKKwkJbWZpbHRbcG9zIC8gMzJdIHw9ICgxIDw8IChwb3MgJSAzMikpOworCQkvKiBYWFg6IHdlIG1pZ2h0IGJlIGFibGUgdG8ganVzdCBkbyB0aGlzIGluc3RlYWQsCisJCSogYnV0IG5vdCBzdXJlLCBuZWVkcyB0ZXN0aW5nLCBpZiB3ZSBkbyB1c2UgdGhpcyB3ZSdkCisJCSogbmVldCB0byBpbmZvcm0gYmVsb3cgdG8gbm90IHJlc2V0IHRoZSBtY2FzdCAqLworCQkvKiBhdGg1a19od19zZXRfbWNhc3RfZmlsdGVyaW5kZXgoYWgsCisJCSAqICAgICAgaGEtPmFkZHJbNV0pOyAqLworCX0KKworCXJldHVybiAoKHU2NCkobWZpbHRbMV0pIDw8IDMyKSB8IG1maWx0WzBdOworfQorCisKKy8qCisgKiBvIGFsd2F5cyBhY2NlcHQgdW5pY2FzdCwgYnJvYWRjYXN0LCBhbmQgbXVsdGljYXN0IHRyYWZmaWMKKyAqIG8gbXVsdGljYXN0IHRyYWZmaWMgZm9yIGFsbCBCU1NJRHMgd2lsbCBiZSBlbmFibGVkIGlmIG1hYzgwMjExCisgKiAgIHNheXMgaXQgc2hvdWxkIGJlCisgKiBvIG1haW50YWluIGN1cnJlbnQgc3RhdGUgb2YgcGh5IG9mZG0gb3IgcGh5IGNjayBlcnJvciByZWNlcHRpb24uCisgKiAgIElmIHRoZSBoYXJkd2FyZSBkZXRlY3RzIGFueSBvZiB0aGVzZSB0eXBlIG9mIGVycm9ycyB0aGVuCisgKiAgIGF0aDVrX2h3X2dldF9yeF9maWx0ZXIoKSB3aWxsIHBhc3MgdG8gdXMgdGhlIHJlc3BlY3RpdmUKKyAqICAgaGFyZHdhcmUgZmlsdGVycyB0byBiZSBhYmxlIHRvIHJlY2VpdmUgdGhlc2UgdHlwZSBvZiBmcmFtZXMuCisgKiBvIHByb2JlIHJlcXVlc3QgZnJhbWVzIGFyZSBhY2NlcHRlZCBvbmx5IHdoZW4gb3BlcmF0aW5nIGluCisgKiAgIGhvc3RhcCwgYWRob2MsIG9yIG1vbml0b3IgbW9kZXMKKyAqIG8gZW5hYmxlIHByb21pc2N1b3VzIG1vZGUgYWNjb3JkaW5nIHRvIHRoZSBpbnRlcmZhY2Ugc3RhdGUKKyAqIG8gYWNjZXB0IGJlYWNvbnM6CisgKiAgIC0gd2hlbiBvcGVyYXRpbmcgaW4gYWRob2MgbW9kZSBzbyB0aGUgODAyLjExIGxheWVyIGNyZWF0ZXMKKyAqICAgICBub2RlIHRhYmxlIGVudHJpZXMgZm9yIHBlZXJzLAorICogICAtIHdoZW4gb3BlcmF0aW5nIGluIHN0YXRpb24gbW9kZSBmb3IgY29sbGVjdGluZyByc3NpIGRhdGEgd2hlbgorICogICAgIHRoZSBzdGF0aW9uIGlzIG90aGVyd2lzZSBxdWlldCwgb3IKKyAqICAgLSB3aGVuIHNjYW5uaW5nCisgKi8KK3N0YXRpYyB2b2lkCithdGg1a19jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1bnNpZ25lZCBpbnQgY2hhbmdlZF9mbGFncywKKwkJICAgICAgIHVuc2lnbmVkIGludCAqbmV3X2ZsYWdzLCB1NjQgbXVsdGljYXN0KQoreworI2RlZmluZSBTVVBQT1JURURfRklGX0ZMQUdTIFwKKwkoRklGX1BST01JU0NfSU5fQlNTIHwgIEZJRl9BTExNVUxUSSB8IEZJRl9GQ1NGQUlMIHwgXAorCUZJRl9QTENQRkFJTCB8IEZJRl9DT05UUk9MIHwgRklGX09USEVSX0JTUyB8IFwKKwlGSUZfQkNOX1BSQlJFU1BfUFJPTUlTQykKKworCXN0cnVjdCBhdGg1a19zb2Z0YyAqc2MgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoNWtfaHcgKmFoID0gc2MtPmFoOworCXUzMiBtZmlsdFsyXSwgcmZpbHQ7CisKKwltdXRleF9sb2NrKCZzYy0+bG9jayk7CisKKwltZmlsdFswXSA9IG11bHRpY2FzdDsKKwltZmlsdFsxXSA9IG11bHRpY2FzdCA+PiAzMjsKKworCS8qIE9ubHkgZGVhbCB3aXRoIHN1cHBvcnRlZCBmbGFncyAqLworCWNoYW5nZWRfZmxhZ3MgJj0gU1VQUE9SVEVEX0ZJRl9GTEFHUzsKKwkqbmV3X2ZsYWdzICY9IFNVUFBPUlRFRF9GSUZfRkxBR1M7CisKKwkvKiBJZiBIVyBkZXRlY3RzIGFueSBwaHkgb3IgcmFkYXIgZXJyb3JzLCBsZWF2ZSB0aG9zZSBmaWx0ZXJzIG9uLgorCSAqIEFsc28sIGFsd2F5cyBlbmFibGUgVW5pY2FzdCwgQnJvYWRjYXN0cyBhbmQgTXVsdGljYXN0CisJICogWFhYOiBtb3ZlIHVuaWNhc3QsIGJzc2lkIGJyb2FkY2FzdHMgYW5kIG11bHRpY2FzdCB0byBtYWM4MDIxMSAqLworCXJmaWx0ID0gKGF0aDVrX2h3X2dldF9yeF9maWx0ZXIoYWgpICYgKEFSNUtfUlhfRklMVEVSX1BIWUVSUikpIHwKKwkJKEFSNUtfUlhfRklMVEVSX1VDQVNUIHwgQVI1S19SWF9GSUxURVJfQkNBU1QgfAorCQlBUjVLX1JYX0ZJTFRFUl9NQ0FTVCk7CisKKwlpZiAoY2hhbmdlZF9mbGFncyAmIChGSUZfUFJPTUlTQ19JTl9CU1MgfCBGSUZfT1RIRVJfQlNTKSkgeworCQlpZiAoKm5ld19mbGFncyAmIEZJRl9QUk9NSVNDX0lOX0JTUykKKwkJCV9fc2V0X2JpdChBVEhfU1RBVF9QUk9NSVNDLCBzYy0+c3RhdHVzKTsKKwkJZWxzZQorCQkJX19jbGVhcl9iaXQoQVRIX1NUQVRfUFJPTUlTQywgc2MtPnN0YXR1cyk7CisJfQorCisJaWYgKHRlc3RfYml0KEFUSF9TVEFUX1BST01JU0MsIHNjLT5zdGF0dXMpKQorCQlyZmlsdCB8PSBBUjVLX1JYX0ZJTFRFUl9QUk9NOworCisJLyogTm90ZSwgQVI1S19SWF9GSUxURVJfTUNBU1QgaXMgYWxyZWFkeSBlbmFibGVkICovCisJaWYgKCpuZXdfZmxhZ3MgJiBGSUZfQUxMTVVMVEkpIHsKKwkJbWZpbHRbMF0gPSAgfjA7CisJCW1maWx0WzFdID0gIH4wOworCX0KKworCS8qIFRoaXMgaXMgdGhlIGJlc3Qgd2UgY2FuIGRvICovCisJaWYgKCpuZXdfZmxhZ3MgJiAoRklGX0ZDU0ZBSUwgfCBGSUZfUExDUEZBSUwpKQorCQlyZmlsdCB8PSBBUjVLX1JYX0ZJTFRFUl9QSFlFUlI7CisKKwkvKiBGSUZfQkNOX1BSQlJFU1BfUFJPTUlTQyByZWFsbHkgbWVhbnMgdG8gZW5hYmxlIGJlYWNvbnMKKwkqIGFuZCBwcm9iZXMgZm9yIGFueSBCU1NJRCAqLworCWlmICgoKm5ld19mbGFncyAmIEZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDKSB8fCAoc2MtPm52aWZzID4gMSkpCisJCXJmaWx0IHw9IEFSNUtfUlhfRklMVEVSX0JFQUNPTjsKKworCS8qIEZJRl9DT05UUk9MIGRvYyBzYXlzIHRoYXQgaWYgRklGX1BST01JU0NfSU5fQlNTIGlzIG5vdAorCSAqIHNldCB3ZSBzaG91bGQgb25seSBwYXNzIG9uIGNvbnRyb2wgZnJhbWVzIGZvciB0aGlzCisJICogc3RhdGlvbi4gVGhpcyBuZWVkcyB0ZXN0aW5nLiBJIGJlbGlldmUgcmlnaHQgbm93IHRoaXMKKwkgKiBlbmFibGVzICphbGwqIGNvbnRyb2wgZnJhbWVzLCB3aGljaCBpcyBPSy4uIGJ1dAorCSAqIGJ1dCB3ZSBzaG91bGQgc2VlIGlmIHdlIGNhbiBpbXByb3ZlIG9uIGdyYW51bGFyaXR5ICovCisJaWYgKCpuZXdfZmxhZ3MgJiBGSUZfQ09OVFJPTCkKKwkJcmZpbHQgfD0gQVI1S19SWF9GSUxURVJfQ09OVFJPTDsKKworCS8qIEFkZGl0aW9uYWwgc2V0dGluZ3MgcGVyIG1vZGUgLS0gdGhpcyBpcyBwZXIgYXRoNWsgKi8KKworCS8qIFhYWCBtb3ZlIHRoZXNlIHRvIG1hYzgwMjExLCBhbmQgYWRkIGEgYmVhY29uIElGRiBmbGFnIHRvIG1hYzgwMjExICovCisKKwlzd2l0Y2ggKHNjLT5vcG1vZGUpIHsKKwljYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6CisJCXJmaWx0IHw9IEFSNUtfUlhfRklMVEVSX0NPTlRST0wgfAorCQkJIEFSNUtfUlhfRklMVEVSX0JFQUNPTiB8CisJCQkgQVI1S19SWF9GSUxURVJfUFJPQkVSRVEgfAorCQkJIEFSNUtfUlhfRklMVEVSX1BST007CisJCWJyZWFrOworCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6CisJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKKwkJcmZpbHQgfD0gQVI1S19SWF9GSUxURVJfUFJPQkVSRVEgfAorCQkJIEFSNUtfUlhfRklMVEVSX0JFQUNPTjsKKwkJYnJlYWs7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgorCQlpZiAoc2MtPmFzc29jKQorCQkJcmZpbHQgfD0gQVI1S19SWF9GSUxURVJfQkVBQ09OOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCS8qIFNldCBmaWx0ZXJzICovCisJYXRoNWtfaHdfc2V0X3J4X2ZpbHRlcihhaCwgcmZpbHQpOworCisJLyogU2V0IG11bHRpY2FzdCBiaXRzICovCisJYXRoNWtfaHdfc2V0X21jYXN0X2ZpbHRlcihhaCwgbWZpbHRbMF0sIG1maWx0WzFdKTsKKwkvKiBTZXQgdGhlIGNhY2hlZCBodyBmaWx0ZXIgZmxhZ3MsIHRoaXMgd2lsbCBsYXRlciBhY3R1YWxseQorCSAqIGJlIHNldCBpbiBIVyAqLworCXNjLT5maWx0ZXJfZmxhZ3MgPSByZmlsdDsKKworCW11dGV4X3VubG9jaygmc2MtPmxvY2spOworfQorCisKK3N0YXRpYyBpbnQKK2F0aDVrX3NldF9rZXkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGVudW0gc2V0X2tleV9jbWQgY21kLAorCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCisJICAgICAgc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5KQoreworCXN0cnVjdCBhdGg1a19zb2Z0YyAqc2MgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoNWtfaHcgKmFoID0gc2MtPmFoOworCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg1a19od19jb21tb24oYWgpOworCWludCByZXQgPSAwOworCisJaWYgKGF0aDVrX21vZHBhcmFtX25vaHdjcnlwdCkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJc3dpdGNoIChrZXktPmNpcGhlcikgeworCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfV0VQNDA6CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9XRVAxMDQ6CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9US0lQOgorCQlicmVhazsKKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0NDTVA6CisJCWlmIChjb21tb24tPmNyeXB0X2NhcHMgJiBBVEhfQ1JZUFRfQ0FQX0NJUEhFUl9BRVNDQ00pCisJCQlicmVhazsKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCWRlZmF1bHQ6CisJCVdBUk5fT04oMSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW11dGV4X2xvY2soJnNjLT5sb2NrKTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTRVRfS0VZOgorCQlyZXQgPSBhdGhfa2V5X2NvbmZpZyhjb21tb24sIHZpZiwgc3RhLCBrZXkpOworCQlpZiAocmV0ID49IDApIHsKKwkJCWtleS0+aHdfa2V5X2lkeCA9IHJldDsKKwkJCS8qIHB1c2ggSVYgYW5kIE1pY2hhZWwgTUlDIGdlbmVyYXRpb24gdG8gc3RhY2sgKi8KKwkJCWtleS0+ZmxhZ3MgfD0gSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX0lWOworCQkJaWYgKGtleS0+Y2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX1RLSVApCisJCQkJa2V5LT5mbGFncyB8PSBJRUVFODAyMTFfS0VZX0ZMQUdfR0VORVJBVEVfTU1JQzsKKwkJCWlmIChrZXktPmNpcGhlciA9PSBXTEFOX0NJUEhFUl9TVUlURV9DQ01QKQorCQkJCWtleS0+ZmxhZ3MgfD0gSUVFRTgwMjExX0tFWV9GTEFHX1NXX01HTVQ7CisJCQlyZXQgPSAwOworCQl9CisJCWJyZWFrOworCWNhc2UgRElTQUJMRV9LRVk6CisJCWF0aF9rZXlfZGVsZXRlKGNvbW1vbiwga2V5KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVJTlZBTDsKKwl9CisKKwltbWlvd2IoKTsKKwltdXRleF91bmxvY2soJnNjLT5sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCisKK3N0YXRpYyB2b2lkCithdGg1a19zd19zY2FuX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBhdGg1a19zb2Z0YyAqc2MgPSBody0+cHJpdjsKKwlpZiAoIXNjLT5hc3NvYykKKwkJYXRoNWtfaHdfc2V0X2xlZHN0YXRlKHNjLT5haCwgQVI1S19MRURfU0NBTik7Cit9CisKKworc3RhdGljIHZvaWQKK2F0aDVrX3N3X3NjYW5fY29tcGxldGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IGF0aDVrX3NvZnRjICpzYyA9IGh3LT5wcml2OworCWF0aDVrX2h3X3NldF9sZWRzdGF0ZShzYy0+YWgsIHNjLT5hc3NvYyA/CisJCUFSNUtfTEVEX0FTU09DIDogQVI1S19MRURfSU5JVCk7Cit9CisKKworc3RhdGljIGludAorYXRoNWtfZ2V0X3N0YXRzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQlzdHJ1Y3QgaWVlZTgwMjExX2xvd19sZXZlbF9zdGF0cyAqc3RhdHMpCit7CisJc3RydWN0IGF0aDVrX3NvZnRjICpzYyA9IGh3LT5wcml2OworCisJLyogRm9yY2UgdXBkYXRlICovCisJYXRoNWtfaHdfdXBkYXRlX21pYl9jb3VudGVycyhzYy0+YWgpOworCisJc3RhdHMtPmRvdDExQUNLRmFpbHVyZUNvdW50ID0gc2MtPnN0YXRzLmFja19mYWlsOworCXN0YXRzLT5kb3QxMVJUU0ZhaWx1cmVDb3VudCA9IHNjLT5zdGF0cy5ydHNfZmFpbDsKKwlzdGF0cy0+ZG90MTFSVFNTdWNjZXNzQ291bnQgPSBzYy0+c3RhdHMucnRzX29rOworCXN0YXRzLT5kb3QxMUZDU0Vycm9yQ291bnQgPSBzYy0+c3RhdHMuZmNzX2Vycm9yOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludAorYXRoNWtfY29uZl90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTE2IHF1ZXVlLAorCSAgICAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfcGFyYW1zICpwYXJhbXMpCit7CisJc3RydWN0IGF0aDVrX3NvZnRjICpzYyA9IGh3LT5wcml2OworCXN0cnVjdCBhdGg1a19odyAqYWggPSBzYy0+YWg7CisJc3RydWN0IGF0aDVrX3R4cV9pbmZvIHFpOworCWludCByZXQgPSAwOworCisJaWYgKHF1ZXVlID49IGFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX3F1ZXVlcy5xX3R4X251bSkKKwkJcmV0dXJuIDA7CisKKwltdXRleF9sb2NrKCZzYy0+bG9jayk7CisKKwlhdGg1a19od19nZXRfdHhfcXVldWVwcm9wcyhhaCwgcXVldWUsICZxaSk7CisKKwlxaS50cWlfYWlmcyA9IHBhcmFtcy0+YWlmczsKKwlxaS50cWlfY3dfbWluID0gcGFyYW1zLT5jd19taW47CisJcWkudHFpX2N3X21heCA9IHBhcmFtcy0+Y3dfbWF4OworCXFpLnRxaV9idXJzdF90aW1lID0gcGFyYW1zLT50eG9wOworCisJQVRINUtfREJHKHNjLCBBVEg1S19ERUJVR19BTlksCisJCSAgIkNvbmZpZ3VyZSB0eCBbcXVldWUgJWRdLCAgIgorCQkgICJhaWZzOiAlZCwgY3dfbWluOiAlZCwgY3dfbWF4OiAlZCwgdHhvcDogJWRcbiIsCisJCSAgcXVldWUsIHBhcmFtcy0+YWlmcywgcGFyYW1zLT5jd19taW4sCisJCSAgcGFyYW1zLT5jd19tYXgsIHBhcmFtcy0+dHhvcCk7CisKKwlpZiAoYXRoNWtfaHdfc2V0X3R4X3F1ZXVlcHJvcHMoYWgsIHF1ZXVlLCAmcWkpKSB7CisJCUFUSDVLX0VSUihzYywKKwkJCSAgIlVuYWJsZSB0byB1cGRhdGUgaGFyZHdhcmUgcXVldWUgJXUhXG4iLCBxdWV1ZSk7CisJCXJldCA9IC1FSU87CisJfSBlbHNlCisJCWF0aDVrX2h3X3Jlc2V0X3R4X3F1ZXVlKGFoLCBxdWV1ZSk7CisKKwltdXRleF91bmxvY2soJnNjLT5sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKKworc3RhdGljIHU2NAorYXRoNWtfZ2V0X3RzZihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjID0gaHctPnByaXY7CisKKwlyZXR1cm4gYXRoNWtfaHdfZ2V0X3RzZjY0KHNjLT5haCk7Cit9CisKKworc3RhdGljIHZvaWQKK2F0aDVrX3NldF90c2Yoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU2NCB0c2YpCit7CisJc3RydWN0IGF0aDVrX3NvZnRjICpzYyA9IGh3LT5wcml2OworCisJYXRoNWtfaHdfc2V0X3RzZjY0KHNjLT5haCwgdHNmKTsKK30KKworCitzdGF0aWMgdm9pZAorYXRoNWtfcmVzZXRfdHNmKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBhdGg1a19zb2Z0YyAqc2MgPSBody0+cHJpdjsKKworCS8qCisJICogaW4gSUJTUyBtb2RlIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBiZWFjb24gdGltZXJzIHRvby4KKwkgKiB0aGlzIHdpbGwgYWxzbyByZXNldCB0aGUgVFNGIGlmIHdlIGNhbGwgaXQgd2l0aCAwCisJICovCisJaWYgKHNjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCisJCWF0aDVrX2JlYWNvbl91cGRhdGVfdGltZXJzKHNjLCAwKTsKKwllbHNlCisJCWF0aDVrX2h3X3Jlc2V0X3RzZihzYy0+YWgpOworfQorCisKK3N0YXRpYyBpbnQKK2F0aDVrX2dldF9zdXJ2ZXkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGludCBpZHgsIHN0cnVjdCBzdXJ2ZXlfaW5mbyAqc3VydmV5KQoreworCXN0cnVjdCBhdGg1a19zb2Z0YyAqc2MgPSBody0+cHJpdjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmaHctPmNvbmY7CisJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDVrX2h3X2NvbW1vbihzYy0+YWgpOworCXN0cnVjdCBhdGhfY3ljbGVfY291bnRlcnMgKmNjID0gJmNvbW1vbi0+Y2Nfc3VydmV5OworCXVuc2lnbmVkIGludCBkaXYgPSBjb21tb24tPmNsb2NrcmF0ZSAqIDEwMDA7CisKKwlpZiAoaWR4ICE9IDApCisJCXJldHVybiAtRU5PRU5UOworCisJc3Bpbl9sb2NrX2JoKCZjb21tb24tPmNjX2xvY2spOworCWF0aF9od19jeWNsZV9jb3VudGVyc191cGRhdGUoY29tbW9uKTsKKwlpZiAoY2MtPmN5Y2xlcyA+IDApIHsKKwkJc2MtPnN1cnZleS5jaGFubmVsX3RpbWUgKz0gY2MtPmN5Y2xlcyAvIGRpdjsKKwkJc2MtPnN1cnZleS5jaGFubmVsX3RpbWVfYnVzeSArPSBjYy0+cnhfYnVzeSAvIGRpdjsKKwkJc2MtPnN1cnZleS5jaGFubmVsX3RpbWVfcnggKz0gY2MtPnJ4X2ZyYW1lIC8gZGl2OworCQlzYy0+c3VydmV5LmNoYW5uZWxfdGltZV90eCArPSBjYy0+dHhfZnJhbWUgLyBkaXY7CisJfQorCW1lbXNldChjYywgMCwgc2l6ZW9mKCpjYykpOworCXNwaW5fdW5sb2NrX2JoKCZjb21tb24tPmNjX2xvY2spOworCisJbWVtY3B5KHN1cnZleSwgJnNjLT5zdXJ2ZXksIHNpemVvZigqc3VydmV5KSk7CisKKwlzdXJ2ZXktPmNoYW5uZWwgPSBjb25mLT5jaGFubmVsOworCXN1cnZleS0+bm9pc2UgPSBzYy0+YWgtPmFoX25vaXNlX2Zsb29yOworCXN1cnZleS0+ZmlsbGVkID0gU1VSVkVZX0lORk9fTk9JU0VfREJNIHwKKwkJCVNVUlZFWV9JTkZPX0NIQU5ORUxfVElNRSB8CisJCQlTVVJWRVlfSU5GT19DSEFOTkVMX1RJTUVfQlVTWSB8CisJCQlTVVJWRVlfSU5GT19DSEFOTkVMX1RJTUVfUlggfAorCQkJU1VSVkVZX0lORk9fQ0hBTk5FTF9USU1FX1RYOworCisJcmV0dXJuIDA7Cit9CisKKworLyoqCisgKiBhdGg1a19zZXRfY292ZXJhZ2VfY2xhc3MgLSBTZXQgSUVFRSA4MDIuMTEgY292ZXJhZ2UgY2xhc3MKKyAqCisgKiBAaHc6IHN0cnVjdCBpZWVlODAyMTFfaHcgcG9pbnRlcgorICogQGNvdmVyYWdlX2NsYXNzOiBJRUVFIDgwMi4xMSBjb3ZlcmFnZSBjbGFzcyBudW1iZXIKKyAqCisgKiBNYWM4MDIxMSBjYWxsYmFjay4gU2V0cyBzbG90IHRpbWUsIEFDSyB0aW1lb3V0IGFuZCBDVFMgdGltZW91dCBmb3IgZ2l2ZW4KKyAqIGNvdmVyYWdlIGNsYXNzLiBUaGUgdmFsdWVzIGFyZSBwZXJzaXN0ZW50LCB0aGV5IGFyZSByZXN0b3JlZCBhZnRlciBkZXZpY2UKKyAqIHJlc2V0LgorICovCitzdGF0aWMgdm9pZAorYXRoNWtfc2V0X2NvdmVyYWdlX2NsYXNzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBjb3ZlcmFnZV9jbGFzcykKK3sKKwlzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjID0gaHctPnByaXY7CisKKwltdXRleF9sb2NrKCZzYy0+bG9jayk7CisJYXRoNWtfaHdfc2V0X2NvdmVyYWdlX2NsYXNzKHNjLT5haCwgY292ZXJhZ2VfY2xhc3MpOworCW11dGV4X3VubG9jaygmc2MtPmxvY2spOworfQorCisKK3N0YXRpYyBpbnQKK2F0aDVrX3NldF9hbnRlbm5hKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgdHhfYW50LCB1MzIgcnhfYW50KQoreworCXN0cnVjdCBhdGg1a19zb2Z0YyAqc2MgPSBody0+cHJpdjsKKworCWlmICh0eF9hbnQgPT0gMSAmJiByeF9hbnQgPT0gMSkKKwkJYXRoNWtfaHdfc2V0X2FudGVubmFfbW9kZShzYy0+YWgsIEFSNUtfQU5UTU9ERV9GSVhFRF9BKTsKKwllbHNlIGlmICh0eF9hbnQgPT0gMiAmJiByeF9hbnQgPT0gMikKKwkJYXRoNWtfaHdfc2V0X2FudGVubmFfbW9kZShzYy0+YWgsIEFSNUtfQU5UTU9ERV9GSVhFRF9CKTsKKwllbHNlIGlmICgodHhfYW50ICYgMykgPT0gMyAmJiAocnhfYW50ICYgMykgPT0gMykKKwkJYXRoNWtfaHdfc2V0X2FudGVubmFfbW9kZShzYy0+YWgsIEFSNUtfQU5UTU9ERV9ERUZBVUxUKTsKKwllbHNlCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQKK2F0aDVrX2dldF9hbnRlbm5hKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgKnR4X2FudCwgdTMyICpyeF9hbnQpCit7CisJc3RydWN0IGF0aDVrX3NvZnRjICpzYyA9IGh3LT5wcml2OworCisJc3dpdGNoIChzYy0+YWgtPmFoX2FudF9tb2RlKSB7CisJY2FzZSBBUjVLX0FOVE1PREVfRklYRURfQToKKwkJKnR4X2FudCA9IDE7ICpyeF9hbnQgPSAxOyBicmVhazsKKwljYXNlIEFSNUtfQU5UTU9ERV9GSVhFRF9COgorCQkqdHhfYW50ID0gMjsgKnJ4X2FudCA9IDI7IGJyZWFrOworCWNhc2UgQVI1S19BTlRNT0RFX0RFRkFVTFQ6CisJCSp0eF9hbnQgPSAzOyAqcnhfYW50ID0gMzsgYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCisKK2NvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzIGF0aDVrX2h3X29wcyA9IHsKKwkudHgJCQk9IGF0aDVrX3R4LAorCS5zdGFydAkJCT0gYXRoNWtfc3RhcnQsCisJLnN0b3AJCQk9IGF0aDVrX3N0b3AsCisJLmFkZF9pbnRlcmZhY2UJCT0gYXRoNWtfYWRkX2ludGVyZmFjZSwKKwkvKiAuY2hhbmdlX2ludGVyZmFjZQk9IG5vdCBpbXBsZW1lbnRlZCAqLworCS5yZW1vdmVfaW50ZXJmYWNlCT0gYXRoNWtfcmVtb3ZlX2ludGVyZmFjZSwKKwkuY29uZmlnCQkJPSBhdGg1a19jb25maWcsCisJLmJzc19pbmZvX2NoYW5nZWQJPSBhdGg1a19ic3NfaW5mb19jaGFuZ2VkLAorCS5wcmVwYXJlX211bHRpY2FzdAk9IGF0aDVrX3ByZXBhcmVfbXVsdGljYXN0LAorCS5jb25maWd1cmVfZmlsdGVyCT0gYXRoNWtfY29uZmlndXJlX2ZpbHRlciwKKwkvKiAuc2V0X3RpbQkJPSBub3QgaW1wbGVtZW50ZWQgKi8KKwkuc2V0X2tleQkJPSBhdGg1a19zZXRfa2V5LAorCS8qIC51cGRhdGVfdGtpcF9rZXkJPSBub3QgaW1wbGVtZW50ZWQgKi8KKwkvKiAuaHdfc2NhbgkJPSBub3QgaW1wbGVtZW50ZWQgKi8KKwkuc3dfc2Nhbl9zdGFydAkJPSBhdGg1a19zd19zY2FuX3N0YXJ0LAorCS5zd19zY2FuX2NvbXBsZXRlCT0gYXRoNWtfc3dfc2Nhbl9jb21wbGV0ZSwKKwkuZ2V0X3N0YXRzCQk9IGF0aDVrX2dldF9zdGF0cywKKwkvKiAuZ2V0X3RraXBfc2VxCT0gbm90IGltcGxlbWVudGVkICovCisJLyogLnNldF9mcmFnX3RocmVzaG9sZAk9IG5vdCBpbXBsZW1lbnRlZCAqLworCS8qIC5zZXRfcnRzX3RocmVzaG9sZAk9IG5vdCBpbXBsZW1lbnRlZCAqLworCS8qIC5zdGFfYWRkCQk9IG5vdCBpbXBsZW1lbnRlZCAqLworCS8qIC5zdGFfcmVtb3ZlCQk9IG5vdCBpbXBsZW1lbnRlZCAqLworCS8qIC5zdGFfbm90aWZ5CQk9IG5vdCBpbXBsZW1lbnRlZCAqLworCS5jb25mX3R4CQk9IGF0aDVrX2NvbmZfdHgsCisJLmdldF90c2YJCT0gYXRoNWtfZ2V0X3RzZiwKKwkuc2V0X3RzZgkJPSBhdGg1a19zZXRfdHNmLAorCS5yZXNldF90c2YJCT0gYXRoNWtfcmVzZXRfdHNmLAorCS8qIC50eF9sYXN0X2JlYWNvbgk9IG5vdCBpbXBsZW1lbnRlZCAqLworCS8qIC5hbXBkdV9hY3Rpb24JPSBub3QgbmVlZGVkICovCisJLmdldF9zdXJ2ZXkJCT0gYXRoNWtfZ2V0X3N1cnZleSwKKwkuc2V0X2NvdmVyYWdlX2NsYXNzCT0gYXRoNWtfc2V0X2NvdmVyYWdlX2NsYXNzLAorCS8qIC5yZmtpbGxfcG9sbAkJPSBub3QgaW1wbGVtZW50ZWQgKi8KKwkvKiAuZmx1c2gJCT0gbm90IGltcGxlbWVudGVkICovCisJLyogLmNoYW5uZWxfc3dpdGNoCT0gbm90IGltcGxlbWVudGVkICovCisJLyogLm5hcGlfcG9sbAkJPSBub3QgaW1wbGVtZW50ZWQgKi8KKwkuc2V0X2FudGVubmEJCT0gYXRoNWtfc2V0X2FudGVubmEsCisJLmdldF9hbnRlbm5hCQk9IGF0aDVrX2dldF9hbnRlbm5hLAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9wY2kuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9wY2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjhjNWIwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3BjaS5jCkBAIC0wLDAgKzEsMzI3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L25sODAyMTEuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2ktYXNwbS5oPgorI2luY2x1ZGUgIi4uL2F0aC5oIgorI2luY2x1ZGUgImF0aDVrLmgiCisjaW5jbHVkZSAiZGVidWcuaCIKKyNpbmNsdWRlICJiYXNlLmgiCisjaW5jbHVkZSAicmVnLmgiCisKKy8qIEtub3duIFBDSSBpZHMgKi8KK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShhdGg1a19wY2lfaWRfdGFibGUpID0geworCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMjA3KSB9LCAvKiA1MjEwIGVhcmx5ICovCisJeyBQQ0lfVkRFVklDRShBVEhFUk9TLCAweDAwMDcpIH0sIC8qIDUyMTAgKi8KKwl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDAxMSkgfSwgLyogNTMxMSAtIHRoaXMgaXMgb24gQUhCIGJ1cyAhKi8KKwl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDAxMikgfSwgLyogNTIxMSAqLworCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDEzKSB9LCAvKiA1MjEyICovCisJeyBQQ0lfVkRFVklDRSgzQ09NXzIsICAweDAwMTMpIH0sIC8qIDNjb20gNTIxMiAqLworCXsgUENJX1ZERVZJQ0UoM0NPTSwgICAgMHgwMDEzKSB9LCAvKiAzY29tIDNDUkRBRzY3NSA1MjEyICovCisJeyBQQ0lfVkRFVklDRShBVEhFUk9TLCAweDEwMTQpIH0sIC8qIElCTSBtaW5pcGNpIDUyMTIgKi8KKwl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDAxNCkgfSwgLyogNTIxMiBjb21iYXRpYmxlICovCisJeyBQQ0lfVkRFVklDRShBVEhFUk9TLCAweDAwMTUpIH0sIC8qIDUyMTIgY29tYmF0aWJsZSAqLworCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDE2KSB9LCAvKiA1MjEyIGNvbWJhdGlibGUgKi8KKwl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDAxNykgfSwgLyogNTIxMiBjb21iYXRpYmxlICovCisJeyBQQ0lfVkRFVklDRShBVEhFUk9TLCAweDAwMTgpIH0sIC8qIDUyMTIgY29tYmF0aWJsZSAqLworCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDE5KSB9LCAvKiA1MjEyIGNvbWJhdGlibGUgKi8KKwl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDAxYSkgfSwgLyogMjQxMyBHcmlmZmluLWxpdGUgKi8KKwl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDAxYikgfSwgLyogNTQxMyBFYWdsZSAqLworCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDFjKSB9LCAvKiBQQ0ktRSBjYXJkcyAqLworCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDFkKSB9LCAvKiAyNDE3IE5hbGEgKi8KKwl7IDAgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBhdGg1a19wY2lfaWRfdGFibGUpOworCisvKiByZXR1cm4gYnVzIGNhY2hlc2l6ZSBpbiA0QiB3b3JkIHVuaXRzICovCitzdGF0aWMgdm9pZCBhdGg1a19wY2lfcmVhZF9jYWNoZXNpemUoc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiwgaW50ICpjc3opCit7CisJc3RydWN0IGF0aDVrX3NvZnRjICpzYyA9IChzdHJ1Y3QgYXRoNWtfc29mdGMgKikgY29tbW9uLT5wcml2OworCXU4IHU4dG1wOworCisJcGNpX3JlYWRfY29uZmlnX2J5dGUoc2MtPnBkZXYsIFBDSV9DQUNIRV9MSU5FX1NJWkUsICZ1OHRtcCk7CisJKmNzeiA9IChpbnQpdTh0bXA7CisKKwkvKgorCSAqIFRoaXMgY2hlY2sgd2FzIHB1dCBpbiB0byBhdm9pZCAidW5wbGVzYW50IiBjb25zZXF1ZW5jZXMgaWYKKwkgKiB0aGUgYm9vdHJvbSBoYXMgbm90IGZ1bGx5IGluaXRpYWxpemVkIGFsbCBQQ0kgZGV2aWNlcy4KKwkgKiBTb21ldGltZXMgdGhlIGNhY2hlIGxpbmUgc2l6ZSByZWdpc3RlciBpcyBub3Qgc2V0CisJICovCisKKwlpZiAoKmNzeiA9PSAwKQorCQkqY3N6ID0gTDFfQ0FDSEVfQllURVMgPj4gMjsgICAvKiBVc2UgdGhlIGRlZmF1bHQgc2l6ZSAqLworfQorCisvKgorICogUmVhZCBmcm9tIGVlcHJvbQorICovCitib29sIGF0aDVrX3BjaV9lZXByb21fcmVhZChzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uLCB1MzIgb2Zmc2V0LCB1MTYgKmRhdGEpCit7CisJc3RydWN0IGF0aDVrX2h3ICphaCA9IChzdHJ1Y3QgYXRoNWtfaHcgKikgY29tbW9uLT5haDsKKwl1MzIgc3RhdHVzLCB0aW1lb3V0OworCisJLyoKKwkgKiBJbml0aWFsaXplIEVFUFJPTSBhY2Nlc3MKKwkgKi8KKwlpZiAoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUyMTApIHsKKwkJQVI1S19SRUdfRU5BQkxFX0JJVFMoYWgsIEFSNUtfUENJQ0ZHLCBBUjVLX1BDSUNGR19FRUFFKTsKKwkJKHZvaWQpYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfRUVQUk9NX0JBU0UgKyAoNCAqIG9mZnNldCkpOworCX0gZWxzZSB7CisJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgb2Zmc2V0LCBBUjVLX0VFUFJPTV9CQVNFKTsKKwkJQVI1S19SRUdfRU5BQkxFX0JJVFMoYWgsIEFSNUtfRUVQUk9NX0NNRCwKKwkJCQlBUjVLX0VFUFJPTV9DTURfUkVBRCk7CisJfQorCisJZm9yICh0aW1lb3V0ID0gQVI1S19UVU5FX1JFR0lTVEVSX1RJTUVPVVQ7IHRpbWVvdXQgPiAwOyB0aW1lb3V0LS0pIHsKKwkJc3RhdHVzID0gYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfRUVQUk9NX1NUQVRVUyk7CisJCWlmIChzdGF0dXMgJiBBUjVLX0VFUFJPTV9TVEFUX1JERE9ORSkgeworCQkJaWYgKHN0YXR1cyAmIEFSNUtfRUVQUk9NX1NUQVRfUkRFUlIpCisJCQkJcmV0dXJuIC1FSU87CisJCQkqZGF0YSA9ICh1MTYpKGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX0VFUFJPTV9EQVRBKSAmCisJCQkJCTB4ZmZmZik7CisJCQlyZXR1cm4gMDsKKwkJfQorCQl1ZGVsYXkoMTUpOworCX0KKworCXJldHVybiAtRVRJTUVET1VUOworfQorCitpbnQgYXRoNWtfaHdfcmVhZF9zcmV2KHN0cnVjdCBhdGg1a19odyAqYWgpCit7CisJYWgtPmFoX21hY19zcmV2ID0gYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfU1JFVik7CisJcmV0dXJuIDA7Cit9CisKKy8qIENvbW1vbiBhdGhfYnVzX29wdHMgc3RydWN0dXJlICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0aF9idXNfb3BzIGF0aF9wY2lfYnVzX29wcyA9IHsKKwkuYXRoX2J1c190eXBlID0gQVRIX1BDSSwKKwkucmVhZF9jYWNoZXNpemUgPSBhdGg1a19wY2lfcmVhZF9jYWNoZXNpemUsCisJLmVlcHJvbV9yZWFkID0gYXRoNWtfcGNpX2VlcHJvbV9yZWFkLAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqXAorKiBQQ0kgSW5pdGlhbGl6YXRpb24gKgorXCoqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IF9fZGV2aW5pdAorYXRoNWtfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCit7CisJdm9pZCBfX2lvbWVtICptZW07CisJc3RydWN0IGF0aDVrX3NvZnRjICpzYzsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKKwlpbnQgcmV0OworCXU4IGNzejsKKworCS8qCisJICogTDBzIG5lZWRzIHRvIGJlIGRpc2FibGVkIG9uIGFsbCBhdGg1ayBjYXJkcy4KKwkgKgorCSAqIEZvciBkaXN0cmlidXRpb25zIHNoaXBwaW5nIHdpdGggQ09ORklHX1BDSUVBU1BNICh0aGlzIHdpbGwgYmUgZW5hYmxlZAorCSAqIGJ5IGRlZmF1bHQgaW4gdGhlIGZ1dHVyZSBpbiAyLjYuMzYpIHRoaXMgd2lsbCBhbHNvIG1lYW4gYm90aCBMMSBhbmQKKwkgKiBMMHMgd2lsbCBiZSBkaXNhYmxlZCB3aGVuIGEgcHJlIDEuMSBQQ0llIGRldmljZSBpcyBkZXRlY3RlZC4gV2UgZG8KKwkgKiBrbm93IEwxIHdvcmtzIGNvcnJlY3RseSBldmVuIGZvciBhbGwgYXRoNWsgcHJlIDEuMSBQQ0llIGRldmljZXMKKwkgKiB0aG91Z2ggYnV0IGNhbm5vdCBjdXJyZW50bHkgdW5kdWUgdGhlIGVmZmVjdCBvZiBhIGJsYWNrbGlzdCwgZm9yCisJICogZGV0YWlscyB5b3UgY2FuIHJlYWQgcGNpZV9hc3BtX3Nhbml0eV9jaGVjaygpIGFuZCBzZWUgaG93IGl0IGFkanVzdHMKKwkgKiB0aGUgZGV2aWNlIGxpbmsgY2FwYWJpbGl0eS4KKwkgKgorCSAqIEl0IG1heSBiZSBwb3NzaWJsZSBpbiB0aGUgZnV0dXJlIHRvIGltcGxlbWVudCBzb21lIFBDSSBBUEkgdG8gYWxsb3cKKwkgKiBkcml2ZXJzIHRvIG92ZXJyaWRlIGJsYWNrbGlzdHMgZm9yIHByZSAxLjEgUENJZSBidXQgZm9yIG5vdyBpdCBpcworCSAqIGJlc3QgdG8gYWNjZXB0IHRoYXQgYm90aCBMMHMgYW5kIEwxIHdpbGwgYmUgZGlzYWJsZWQgY29tcGxldGVseSBmb3IKKwkgKiBkaXN0cmlidXRpb25zIHNoaXBwaW5nIHdpdGggQ09ORklHX1BDSUVBU1BNIHJhdGhlciB0aGFuIGhhdmluZyB0aGlzCisJICogaXNzdWUgcHJlc2VudC4gTW90aXZhdGlvbiBmb3IgYWRkaW5nIHRoaXMgbmV3IEFQSSB3aWxsIGJlIHRvIGhlbHAKKwkgKiB3aXRoIHBvd2VyIGNvbnN1bXB0aW9uIGZvciBzb21lIG9mIHRoZXNlIGRldmljZXMuCisJICovCisJcGNpX2Rpc2FibGVfbGlua19zdGF0ZShwZGV2LCBQQ0lFX0xJTktfU1RBVEVfTDBTKTsKKworCXJldCA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgZW5hYmxlIGRldmljZVxuIik7CisJCWdvdG8gZXJyOworCX0KKworCS8qIFhYWCAzMi1iaXQgYWRkcmVzc2luZyBvbmx5ICovCisJcmV0ID0gcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soMzIpKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIjMyLWJpdCBETUEgbm90IGF2YWlsYWJsZVxuIik7CisJCWdvdG8gZXJyX2RpczsKKwl9CisKKwkvKgorCSAqIENhY2hlIGxpbmUgc2l6ZSBpcyB1c2VkIHRvIHNpemUgYW5kIGFsaWduIHZhcmlvdXMKKwkgKiBzdHJ1Y3R1cmVzIHVzZWQgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgaGFyZHdhcmUuCisJICovCisJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgUENJX0NBQ0hFX0xJTkVfU0laRSwgJmNzeik7CisJaWYgKGNzeiA9PSAwKSB7CisJCS8qCisJCSAqIExpbnV4IDIuNC4xOCAoYXQgbGVhc3QpIHdyaXRlcyB0aGUgY2FjaGUgbGluZSBzaXplCisJCSAqIHJlZ2lzdGVyIGFzIGEgMTYtYml0IHdpZGUgcmVnaXN0ZXIgd2hpY2ggaXMgd3JvbmcuCisJCSAqIFdlIG11c3QgaGF2ZSB0aGlzIHNldHVwIHByb3Blcmx5IGZvciByeCBidWZmZXIKKwkJICogRE1BIHRvIHdvcmsgc28gZm9yY2UgYSByZWFzb25hYmxlIHZhbHVlIGhlcmUgaWYgaXQKKwkJICogY29tZXMgdXAgemVyby4KKwkJICovCisJCWNzeiA9IEwxX0NBQ0hFX0JZVEVTID4+IDI7CisJCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBQQ0lfQ0FDSEVfTElORV9TSVpFLCBjc3opOworCX0KKwkvKgorCSAqIFRoZSBkZWZhdWx0IHNldHRpbmcgb2YgbGF0ZW5jeSB0aW1lciB5aWVsZHMgcG9vciByZXN1bHRzLAorCSAqIHNldCBpdCB0byB0aGUgdmFsdWUgdXNlZCBieSBvdGhlciBzeXN0ZW1zLiAgSXQgbWF5IGJlIHdvcnRoCisJICogdHdlYWtpbmcgdGhpcyBzZXR0aW5nIG1vcmUuCisJICovCisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIFBDSV9MQVRFTkNZX1RJTUVSLCAweGE4KTsKKworCS8qIEVuYWJsZSBidXMgbWFzdGVyaW5nICovCisJcGNpX3NldF9tYXN0ZXIocGRldik7CisKKwkvKgorCSAqIERpc2FibGUgdGhlIFJFVFJZX1RJTUVPVVQgcmVnaXN0ZXIgKDB4NDEpIHRvIGtlZXAKKwkgKiBQQ0kgVHggcmV0cmllcyBmcm9tIGludGVyZmVyaW5nIHdpdGggQzMgQ1BVIHN0YXRlLgorCSAqLworCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCAweDQxLCAwKTsKKworCXJldCA9IHBjaV9yZXF1ZXN0X3JlZ2lvbihwZGV2LCAwLCAiYXRoNWsiKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCByZXNlcnZlIFBDSSBtZW1vcnkgcmVnaW9uXG4iKTsKKwkJZ290byBlcnJfZGlzOworCX0KKworCW1lbSA9IHBjaV9pb21hcChwZGV2LCAwLCAwKTsKKwlpZiAoIW1lbSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgcmVtYXAgUENJIG1lbW9yeSByZWdpb25cbiIpIDsKKwkJcmV0ID0gLUVJTzsKKwkJZ290byBlcnJfcmVnOworCX0KKworCS8qCisJICogQWxsb2NhdGUgaHcgKG1hYzgwMjExIG1haW4gc3RydWN0KQorCSAqIGFuZCBody0+cHJpdiAoZHJpdmVyIHByaXZhdGUgZGF0YSkKKwkgKi8KKwlodyA9IGllZWU4MDIxMV9hbGxvY19odyhzaXplb2YoKnNjKSwgJmF0aDVrX2h3X29wcyk7CisJaWYgKGh3ID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IGFsbG9jYXRlIGllZWU4MDIxMV9od1xuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX21hcDsKKwl9CisKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAicmVnaXN0ZXJlZCBhcyAnJXMnXG4iLCB3aXBoeV9uYW1lKGh3LT53aXBoeSkpOworCisJc2MgPSBody0+cHJpdjsKKwlzYy0+aHcgPSBodzsKKwlzYy0+cGRldiA9IHBkZXY7CisJc2MtPmRldiA9ICZwZGV2LT5kZXY7CisJc2MtPmlycSA9IHBkZXYtPmlycTsKKwlzYy0+ZGV2aWQgPSBpZC0+ZGV2aWNlOworCXNjLT5pb2Jhc2UgPSBtZW07IC8qIFNvIHdlIGNhbiB1bm1hcCBpdCBvbiBkZXRhY2ggKi8KKworCS8qIEluaXRpYWxpemUgKi8KKwlyZXQgPSBhdGg1a19pbml0X3NvZnRjKHNjLCAmYXRoX3BjaV9idXNfb3BzKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9mcmVlOworCisJLyogU2V0IHByaXZhdGUgZGF0YSAqLworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBodyk7CisKKwlyZXR1cm4gMDsKK2Vycl9mcmVlOgorCWllZWU4MDIxMV9mcmVlX2h3KGh3KTsKK2Vycl9tYXA6CisJcGNpX2lvdW5tYXAocGRldiwgbWVtKTsKK2Vycl9yZWc6CisJcGNpX3JlbGVhc2VfcmVnaW9uKHBkZXYsIDApOworZXJyX2RpczoKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CitlcnI6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0CithdGg1a19wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBhdGg1a19zb2Z0YyAqc2MgPSBody0+cHJpdjsKKworCWF0aDVrX2RlaW5pdF9zb2Z0YyhzYyk7CisJcGNpX2lvdW5tYXAocGRldiwgc2MtPmlvYmFzZSk7CisJcGNpX3JlbGVhc2VfcmVnaW9uKHBkZXYsIDApOworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwlpZWVlODAyMTFfZnJlZV9odyhodyk7Cit9CisKKyNpZmRlZiBDT05GSUdfUE1fU0xFRVAKK3N0YXRpYyBpbnQgYXRoNWtfcGNpX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBhdGg1a19zb2Z0YyAqc2MgPSBwY2lfZ2V0X2RydmRhdGEodG9fcGNpX2RldihkZXYpKTsKKworCWF0aDVrX2xlZF9vZmYoc2MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0aDVrX3BjaV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXYpOworCXN0cnVjdCBhdGg1a19zb2Z0YyAqc2MgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisKKwkvKgorCSAqIFN1c3BlbmQvUmVzdW1lIHJlc2V0cyB0aGUgUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UsIHNvIHdlIGhhdmUgdG8KKwkgKiByZS1kaXNhYmxlIHRoZSBSRVRSWV9USU1FT1VUIHJlZ2lzdGVyICgweDQxKSB0byBrZWVwCisJICogUENJIFR4IHJldHJpZXMgZnJvbSBpbnRlcmZlcmluZyB3aXRoIEMzIENQVSBzdGF0ZQorCSAqLworCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCAweDQxLCAwKTsKKworCWF0aDVrX2xlZF9lbmFibGUoc2MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgU0lNUExFX0RFVl9QTV9PUFMoYXRoNWtfcG1fb3BzLCBhdGg1a19wY2lfc3VzcGVuZCwgYXRoNWtfcGNpX3Jlc3VtZSk7CisjZGVmaW5lIEFUSDVLX1BNX09QUwkoJmF0aDVrX3BtX29wcykKKyNlbHNlCisjZGVmaW5lIEFUSDVLX1BNX09QUwlOVUxMCisjZW5kaWYgLyogQ09ORklHX1BNX1NMRUVQICovCisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBhdGg1a19wY2lfZHJpdmVyID0geworCS5uYW1lCQk9IEtCVUlMRF9NT0ROQU1FLAorCS5pZF90YWJsZQk9IGF0aDVrX3BjaV9pZF90YWJsZSwKKwkucHJvYmUJCT0gYXRoNWtfcGNpX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoYXRoNWtfcGNpX3JlbW92ZSksCisJLmRyaXZlci5wbQk9IEFUSDVLX1BNX09QUywKK307CisKKy8qCisgKiBNb2R1bGUgaW5pdC9leGl0IGZ1bmN0aW9ucworICovCitzdGF0aWMgaW50IF9faW5pdAoraW5pdF9hdGg1a19wY2kodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmYXRoNWtfcGNpX2RyaXZlcik7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9FUlIgImF0aDVrX3BjaTogY2FuJ3QgcmVnaXN0ZXIgcGNpIGRyaXZlclxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdAorZXhpdF9hdGg1a19wY2kodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmF0aDVrX3BjaV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChpbml0X2F0aDVrX3BjaSk7Cittb2R1bGVfZXhpdChleGl0X2F0aDVrX3BjaSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcGN1LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcGN1LmMKaW5kZXggMDc0YjRjNi4uZTVmMmI5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3BjdS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9wY3UuYwpAQCAtMzEsODcgKzMxLDE2MyBAQAogI2luY2x1ZGUgImRlYnVnLmgiCiAjaW5jbHVkZSAiYmFzZS5oIgogCisvKgorICogQVI1MjEyKyBjYW4gdXNlIGhpZ2hlciByYXRlcyBmb3IgYWNrIHRyYW5zbWl0aW9uCisgKiBiYXNlZCBvbiBjdXJyZW50IHR4IHJhdGUgaW5zdGVhZCBvZiB0aGUgYmFzZSByYXRlLgorICogSXQgZG9lcyB0aGlzIHRvIGJldHRlciB1dGlsaXplIGNoYW5uZWwgdXNhZ2UuCisgKiBUaGlzIGlzIGEgbWFwcGluZyBiZXR3ZWVuIEcgcmF0ZXMgKHRoYXQgY292ZXIgYm90aAorICogQ0NLIGFuZCBPRkRNKSBhbmQgYWNrIHJhdGVzIHRoYXQgd2UgdXNlIHdoZW4gc2V0dGluZworICogcmF0ZSAtPiBkdXJhdGlvbiB0YWJsZS4gVGhpcyBtYXBwaW5nIGlzIGh3LWJhc2VkIHNvCisgKiBkb24ndCBjaGFuZ2UgYW55dGhpbmcuCisgKgorICogVG8gZW5hYmxlIHRoaXMgZnVuY3Rpb25hbGl0eSB3ZSBtdXN0IHNldAorICogYWgtPmFoX2Fja19iaXRyYXRlX2hpZ2ggdG8gdHJ1ZSBlbHNlIGJhc2UgcmF0ZSBpcworICogdXNlZCAoMU1iIGZvciBDQ0ssIDZNYiBmb3IgT0ZETSkuCisgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgYWNrX3JhdGVzX2hpZ2hbXSA9CisvKiBUeAktPiBBQ0sJKi8KKy8qIDFNYgktPiAxTWIJKi8JeyAwLAorLyogMk1CCS0+IDJNYgkqLwkxLAorLyogNS41TWIgLT4gMk1iCSovCTEsCisvKiAxMU1iCS0+IDJNYgkqLwkxLAorLyogNk1iCS0+IDZNYgkqLwk0LAorLyogOU1iCS0+IDZNYgkqLwk0LAorLyogMTJNYgktPiAxMk1iCSovCTYsCisvKiAxOE1iCS0+IDEyTWIJKi8JNiwKKy8qIDI0TWIJLT4gMjRNYgkqLwk4LAorLyogMzZNYgktPiAyNE1iCSovCTgsCisvKiA0OE1iCS0+IDI0TWIJKi8JOCwKKy8qIDU0TWIJLT4gMjRNYgkqLwk4IH07CisKIC8qKioqKioqKioqKioqKioqKioqXAotKiBHZW5lcmljIGZ1bmN0aW9ucyAqCisqIEhlbHBlciBmdW5jdGlvbnMgKgogXCoqKioqKioqKioqKioqKioqKiovCiAKIC8qKgotICogYXRoNWtfaHdfc2V0X29wbW9kZSAtIFNldCBQQ1Ugb3BlcmF0aW5nIG1vZGUKKyAqIGF0aDVrX2h3X2dldF9mcmFtZV9kdXJhdGlvbiAtIEdldCB0eCB0aW1lIG9mIGEgZnJhbWUKICAqCiAgKiBAYWg6IFRoZSAmc3RydWN0IGF0aDVrX2h3Ci0gKiBAb3BfbW9kZTogJmVudW0gbmw4MDIxMV9pZnR5cGUgb3BlcmF0aW5nIG1vZGUKKyAqIEBsZW46IEZyYW1lJ3MgbGVuZ3RoIGluIGJ5dGVzCisgKiBAcmF0ZTogVGhlIEBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUKICAqCi0gKiBJbml0aWFsaXplIFBDVSBmb3IgdGhlIHZhcmlvdXMgb3BlcmF0aW5nIG1vZGVzIChBUC9TVEEgZXRjKQorICogQ2FsY3VsYXRlIHR4IGR1cmF0aW9uIG9mIGEgZnJhbWUgZ2l2ZW4gaXQncyByYXRlIGFuZCBsZW5ndGgKKyAqIEl0IGV4dGVuZHMgaWVlZTgwMjExX2dlbmVyaWNfZnJhbWVfZHVyYXRpb24gZm9yIG5vbiBzdGFuZGFyZAorICogYndtb2Rlcy4KICAqLwotaW50IGF0aDVrX2h3X3NldF9vcG1vZGUoc3RydWN0IGF0aDVrX2h3ICphaCwgZW51bSBubDgwMjExX2lmdHlwZSBvcF9tb2RlKQoraW50IGF0aDVrX2h3X2dldF9mcmFtZV9kdXJhdGlvbihzdHJ1Y3QgYXRoNWtfaHcgKmFoLAorCQlpbnQgbGVuLCBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnJhdGUpCiB7Ci0Jc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDVrX2h3X2NvbW1vbihhaCk7Ci0JdTMyIHBjdV9yZWcsIGJlYWNvbl9yZWcsIGxvd19pZCwgaGlnaF9pZDsKKwlzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjID0gYWgtPmFoX3NjOworCWludCBzaWZzLCBwcmVhbWJsZSwgcGxjcF9iaXRzLCBzeW1fdGltZTsKKwlpbnQgYml0cmF0ZSwgYml0cywgc3ltYm9scywgc3ltYm9sX2JpdHM7CisJaW50IGR1cjsKIAotCUFUSDVLX0RCRyhhaC0+YWhfc2MsIEFUSDVLX0RFQlVHX01PREUsICJtb2RlICVkXG4iLCBvcF9tb2RlKTsKLQotCS8qIFByZXNlcnZlIHJlc3Qgc2V0dGluZ3MgKi8KLQlwY3VfcmVnID0gYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfU1RBX0lEMSkgJiAweGZmZmYwMDAwOwotCXBjdV9yZWcgJj0gfihBUjVLX1NUQV9JRDFfQURIT0MgfCBBUjVLX1NUQV9JRDFfQVAKLQkJCXwgQVI1S19TVEFfSUQxX0tFWVNSQ0hfTU9ERQotCQkJfCAoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUyMTAgPwotCQkJKEFSNUtfU1RBX0lEMV9QV1JfU1YgfCBBUjVLX1NUQV9JRDFfTk9fUFNQT0xMKSA6IDApKTsKLQotCWJlYWNvbl9yZWcgPSAwOwotCi0Jc3dpdGNoIChvcF9tb2RlKSB7Ci0JY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKLQkJcGN1X3JlZyB8PSBBUjVLX1NUQV9JRDFfQURIT0MgfCBBUjVLX1NUQV9JRDFfS0VZU1JDSF9NT0RFOwotCQliZWFjb25fcmVnIHw9IEFSNUtfQkNSX0FESE9DOwotCQlpZiAoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUyMTApCi0JCQlwY3VfcmVnIHw9IEFSNUtfU1RBX0lEMV9OT19QU1BPTEw7Ci0JCWVsc2UKLQkJCUFSNUtfUkVHX0VOQUJMRV9CSVRTKGFoLCBBUjVLX0NGRywgQVI1S19DRkdfSUJTUyk7Ci0JCWJyZWFrOwotCi0JY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKLQljYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6Ci0JCXBjdV9yZWcgfD0gQVI1S19TVEFfSUQxX0FQIHwgQVI1S19TVEFfSUQxX0tFWVNSQ0hfTU9ERTsKLQkJYmVhY29uX3JlZyB8PSBBUjVLX0JDUl9BUDsKLQkJaWYgKGFoLT5haF92ZXJzaW9uID09IEFSNUtfQVI1MjEwKQotCQkJcGN1X3JlZyB8PSBBUjVLX1NUQV9JRDFfTk9fUFNQT0xMOwotCQllbHNlCi0JCQlBUjVLX1JFR19ESVNBQkxFX0JJVFMoYWgsIEFSNUtfQ0ZHLCBBUjVLX0NGR19JQlNTKTsKLQkJYnJlYWs7Ci0KLQljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046Ci0JCXBjdV9yZWcgfD0gQVI1S19TVEFfSUQxX0tFWVNSQ0hfTU9ERQotCQkJfCAoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUyMTAgPwotCQkJCUFSNUtfU1RBX0lEMV9QV1JfU1YgOiAwKTsKLQljYXNlIE5MODAyMTFfSUZUWVBFX01PTklUT1I6Ci0JCXBjdV9yZWcgfD0gQVI1S19TVEFfSUQxX0tFWVNSQ0hfTU9ERQotCQkJfCAoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUyMTAgPwotCQkJCUFSNUtfU1RBX0lEMV9OT19QU1BPTEwgOiAwKTsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKKwkvKiBGYWxsYmFjayAqLworCWlmICghYWgtPmFoX2J3bW9kZSkgeworCQlkdXIgPSBpZWVlODAyMTFfZ2VuZXJpY19mcmFtZV9kdXJhdGlvbihzYy0+aHcsCisJCQkJCQlOVUxMLCBsZW4sIHJhdGUpOworCQlyZXR1cm4gZHVyOwogCX0KIAotCS8qCi0JICogU2V0IFBDVSByZWdpc3RlcnMKLQkgKi8KLQlsb3dfaWQgPSBnZXRfdW5hbGlnbmVkX2xlMzIoY29tbW9uLT5tYWNhZGRyKTsKLQloaWdoX2lkID0gZ2V0X3VuYWxpZ25lZF9sZTE2KGNvbW1vbi0+bWFjYWRkciArIDQpOwotCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgbG93X2lkLCBBUjVLX1NUQV9JRDApOwotCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgcGN1X3JlZyB8IGhpZ2hfaWQsIEFSNUtfU1RBX0lEMSk7CisJYml0cmF0ZSA9IHJhdGUtPmJpdHJhdGU7CisJcHJlYW1ibGUgPSBBUjVLX0lOSVRfT0ZETV9QUkVBTVBMRV9USU1FOworCXBsY3BfYml0cyA9IEFSNUtfSU5JVF9PRkRNX1BMQ1BfQklUUzsKKwlzeW1fdGltZSA9IEFSNUtfSU5JVF9PRkRNX1NZTUJPTF9USU1FOwogCi0JLyoKLQkgKiBTZXQgQmVhY29uIENvbnRyb2wgUmVnaXN0ZXIgb24gNTIxMAotCSAqLwotCWlmIChhaC0+YWhfdmVyc2lvbiA9PSBBUjVLX0FSNTIxMCkKLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBiZWFjb25fcmVnLCBBUjVLX0JDUik7CisJc3dpdGNoIChhaC0+YWhfYndtb2RlKSB7CisJY2FzZSBBUjVLX0JXTU9ERV80ME1IWjoKKwkJc2lmcyA9IEFSNUtfSU5JVF9TSUZTX1RVUkJPOworCQlwcmVhbWJsZSA9IEFSNUtfSU5JVF9PRkRNX1BSRUFNQkxFX1RJTUVfTUlOOworCQlicmVhazsKKwljYXNlIEFSNUtfQldNT0RFXzEwTUhaOgorCQlzaWZzID0gQVI1S19JTklUX1NJRlNfSEFMRl9SQVRFOworCQlwcmVhbWJsZSAqPSAyOworCQlzeW1fdGltZSAqPSAyOworCQlicmVhazsKKwljYXNlIEFSNUtfQldNT0RFXzVNSFo6CisJCXNpZnMgPSBBUjVLX0lOSVRfU0lGU19RVUFSVEVSX1JBVEU7CisJCXByZWFtYmxlICo9IDQ7CisJCXN5bV90aW1lICo9IDQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXNpZnMgPSBBUjVLX0lOSVRfU0lGU19ERUZBVUxUX0JHOworCQlicmVhazsKKwl9CiAKLQlyZXR1cm4gMDsKKwliaXRzID0gcGxjcF9iaXRzICsgKGxlbiA8PCAzKTsKKwkvKiBCaXQgcmF0ZSBpcyBpbiAxMDBLYml0cyAqLworCXN5bWJvbF9iaXRzID0gYml0cmF0ZSAqIHN5bV90aW1lOworCXN5bWJvbHMgPSBESVZfUk9VTkRfVVAoYml0cyAqIDEwLCBzeW1ib2xfYml0cyk7CisKKwlkdXIgPSBzaWZzICsgcHJlYW1ibGUgKyAoc3ltX3RpbWUgKiBzeW1ib2xzKTsKKworCXJldHVybiBkdXI7CiB9CiAKIC8qKgotICogYXRoNWtfaHdfdXBkYXRlIC0gVXBkYXRlIE1JQiBjb3VudGVycyAobWFjIGxheWVyIHN0YXRpc3RpY3MpCisgKiBhdGg1a19od19nZXRfZGVmYXVsdF9zbG90dGltZSAtIEdldCB0aGUgZGVmYXVsdCBzbG90IHRpbWUgZm9yIGN1cnJlbnQgbW9kZQorICoKKyAqIEBhaDogVGhlICZzdHJ1Y3QgYXRoNWtfaHcKKyAqLwordW5zaWduZWQgaW50IGF0aDVrX2h3X2dldF9kZWZhdWx0X3Nsb3R0aW1lKHN0cnVjdCBhdGg1a19odyAqYWgpCit7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsID0gYWgtPmFoX2N1cnJlbnRfY2hhbm5lbDsKKwl1bnNpZ25lZCBpbnQgc2xvdF90aW1lOworCisJc3dpdGNoIChhaC0+YWhfYndtb2RlKSB7CisJY2FzZSBBUjVLX0JXTU9ERV80ME1IWjoKKwkJc2xvdF90aW1lID0gQVI1S19JTklUX1NMT1RfVElNRV9UVVJCTzsKKwkJYnJlYWs7CisJY2FzZSBBUjVLX0JXTU9ERV8xME1IWjoKKwkJc2xvdF90aW1lID0gQVI1S19JTklUX1NMT1RfVElNRV9IQUxGX1JBVEU7CisJCWJyZWFrOworCWNhc2UgQVI1S19CV01PREVfNU1IWjoKKwkJc2xvdF90aW1lID0gQVI1S19JTklUX1NMT1RfVElNRV9RVUFSVEVSX1JBVEU7CisJCWJyZWFrOworCWNhc2UgQVI1S19CV01PREVfREVGQVVMVDoKKwkJc2xvdF90aW1lID0gQVI1S19JTklUX1NMT1RfVElNRV9ERUZBVUxUOworCWRlZmF1bHQ6CisJCWlmIChjaGFubmVsLT5od192YWx1ZSAmIENIQU5ORUxfQ0NLKQorCQkJc2xvdF90aW1lID0gQVI1S19JTklUX1NMT1RfVElNRV9COworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gc2xvdF90aW1lOworfQorCisvKioKKyAqIGF0aDVrX2h3X2dldF9kZWZhdWx0X3NpZnMgLSBHZXQgdGhlIGRlZmF1bHQgU0lGUyBmb3IgY3VycmVudCBtb2RlCisgKgorICogQGFoOiBUaGUgJnN0cnVjdCBhdGg1a19odworICovCit1bnNpZ25lZCBpbnQgYXRoNWtfaHdfZ2V0X2RlZmF1bHRfc2lmcyhzdHJ1Y3QgYXRoNWtfaHcgKmFoKQoreworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCA9IGFoLT5haF9jdXJyZW50X2NoYW5uZWw7CisJdW5zaWduZWQgaW50IHNpZnM7CisKKwlzd2l0Y2ggKGFoLT5haF9id21vZGUpIHsKKwljYXNlIEFSNUtfQldNT0RFXzQwTUhaOgorCQlzaWZzID0gQVI1S19JTklUX1NJRlNfVFVSQk87CisJCWJyZWFrOworCWNhc2UgQVI1S19CV01PREVfMTBNSFo6CisJCXNpZnMgPSBBUjVLX0lOSVRfU0lGU19IQUxGX1JBVEU7CisJCWJyZWFrOworCWNhc2UgQVI1S19CV01PREVfNU1IWjoKKwkJc2lmcyA9IEFSNUtfSU5JVF9TSUZTX1FVQVJURVJfUkFURTsKKwkJYnJlYWs7CisJY2FzZSBBUjVLX0JXTU9ERV9ERUZBVUxUOgorCQlzaWZzID0gQVI1S19JTklUX1NJRlNfREVGQVVMVF9CRzsKKwlkZWZhdWx0OgorCQlpZiAoY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMXzVHSFopCisJCQlzaWZzID0gQVI1S19JTklUX1NJRlNfREVGQVVMVF9BOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gc2lmczsKK30KKworLyoqCisgKiBhdGg1a19od191cGRhdGVfbWliX2NvdW50ZXJzIC0gVXBkYXRlIE1JQiBjb3VudGVycyAobWFjIGxheWVyIHN0YXRpc3RpY3MpCiAgKgogICogQGFoOiBUaGUgJnN0cnVjdCBhdGg1a19odwogICoKQEAgLTEzMywzNyArMjA5LDg5IEBACiAJc3RhdHMtPmJlYWNvbnMgKz0gYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfQkVBQ09OX0NOVCk7CiB9CiAKLS8qKgotICogYXRoNWtfaHdfc2V0X2Fja19iaXRyYXRlIC0gc2V0IGJpdHJhdGUgZm9yIEFDS3MKLSAqCi0gKiBAYWg6IFRoZSAmc3RydWN0IGF0aDVrX2h3Ci0gKiBAaGlnaDogRmxhZyB0byBkZXRlcm1pbmUgaWYgd2Ugd2FudCB0byB1c2UgaGlnaCB0cmFuc21pc3Npb24gcmF0ZQotICogZm9yIEFDS3Mgb3Igbm90Ci0gKgotICogSWYgaGlnaCBmbGFnIGlzIHNldCwgd2UgdGVsbCBodyB0byB1c2UgYSBzZXQgb2YgY29udHJvbCByYXRlcyBiYXNlZCBvbgotICogdGhlIGN1cnJlbnQgdHJhbnNtaXNzaW9uIHJhdGUgKGNoZWNrIG91dCBjb250cm9sX3JhdGVzIGFycmF5IGluc2lkZSByZXNldC5jKS4KLSAqIElmIG5vdCBodyBqdXN0IHVzZXMgdGhlIGxvd2VzdCByYXRlIGF2YWlsYWJsZSBmb3IgdGhlIGN1cnJlbnQgbW9kdWxhdGlvbgotICogc2NoZW1lIGJlaW5nIHVzZWQgKDFNYml0IGZvciBDQ0sgYW5kIDZNYml0cyBmb3IgT0ZETSkuCi0gKi8KLXZvaWQgYXRoNWtfaHdfc2V0X2Fja19iaXRyYXRlX2hpZ2goc3RydWN0IGF0aDVrX2h3ICphaCwgYm9vbCBoaWdoKQotewotCWlmIChhaC0+YWhfdmVyc2lvbiAhPSBBUjVLX0FSNTIxMikKLQkJcmV0dXJuOwotCWVsc2UgewotCQl1MzIgdmFsID0gQVI1S19TVEFfSUQxX0JBU0VfUkFURV8xMUIgfCBBUjVLX1NUQV9JRDFfQUNLQ1RTXzZNQjsKLQkJaWYgKGhpZ2gpCi0JCQlBUjVLX1JFR19ESVNBQkxFX0JJVFMoYWgsIEFSNUtfU1RBX0lEMSwgdmFsKTsKLQkJZWxzZQotCQkJQVI1S19SRUdfRU5BQkxFX0JJVFMoYWgsIEFSNUtfU1RBX0lEMSwgdmFsKTsKLQl9Ci19Ci0KIAogLyoqKioqKioqKioqKioqKioqKlwKICogQUNLL0NUUyBUaW1lb3V0cyAqCiBcKioqKioqKioqKioqKioqKioqLwogCiAvKioKKyAqIGF0aDVrX2h3X3dyaXRlX3JhdGVfZHVyYXRpb24gLSBmaWxsIHJhdGUgY29kZSB0byBkdXJhdGlvbiB0YWJsZQorICoKKyAqIEBhaDogdGhlICZzdHJ1Y3QgYXRoNWtfaHcKKyAqIEBtb2RlOiBvbmUgb2YgZW51bSBhdGg1a19kcml2ZXJfbW9kZQorICoKKyAqIFdyaXRlIHRoZSByYXRlIGNvZGUgdG8gZHVyYXRpb24gdGFibGUgdXBvbiBodyByZXNldC4gVGhpcyBpcyBhIGhlbHBlciBmb3IKKyAqIGF0aDVrX2h3X3BjdV9pbml0KCkuIEl0IHNlZW1zIGFsbCB0aGlzIGlzIGRvaW5nIGlzIHNldHRpbmcgYW4gQUNLIHRpbWVvdXQgb24KKyAqIHRoZSBoYXJkd2FyZSwgYmFzZWQgb24gY3VycmVudCBtb2RlLCBmb3IgZWFjaCByYXRlLiBUaGUgcmF0ZXMgd2hpY2ggYXJlCisgKiBjYXBhYmxlIG9mIHNob3J0IHByZWFtYmxlICg4MDIuMTFiIHJhdGVzIDJNYnBzLCA1LjVNYnBzLCBhbmQgMTFNYnBzKSBoYXZlCisgKiBkaWZmZXJlbnQgcmF0ZSBjb2RlIHNvIHdlIHdyaXRlIHRoZWlyIHZhbHVlIHR3aWNlIChvbmUgZm9yIGxvbmcgcHJlYW1ibGUKKyAqIGFuZCBvbmUgZm9yIHNob3J0KS4KKyAqCisgKiBOb3RlOiBCYW5kIGRvZXNuJ3QgbWF0dGVyIGhlcmUsIGlmIHdlIHNldCB0aGUgdmFsdWVzIGZvciBPRkRNIGl0IHdvcmtzCisgKiBvbiBib3RoIGEgYW5kIGcgbW9kZXMuIFNvIGFsbCB3ZSBoYXZlIHRvIGRvIGlzIHNldCB2YWx1ZXMgZm9yIGFsbCBnIHJhdGVzCisgKiB0aGF0IGluY2x1ZGUgYWxsIE9GRE0gYW5kIENDSyByYXRlcy4KKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBhdGg1a19od193cml0ZV9yYXRlX2R1cmF0aW9uKHN0cnVjdCBhdGg1a19odyAqYWgpCit7CisJc3RydWN0IGF0aDVrX3NvZnRjICpzYyA9IGFoLT5haF9zYzsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnJhdGU7CisJdW5zaWduZWQgaW50IGk7CisJLyogODAyLjExZyBjb3ZlcnMgYm90aCBPRkRNIGFuZCBDQ0sgKi8KKwl1OCBiYW5kID0gSUVFRTgwMjExX0JBTkRfMkdIWjsKKworCS8qIFdyaXRlIHJhdGUgZHVyYXRpb24gdGFibGUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc2MtPnNiYW5kc1tiYW5kXS5uX2JpdHJhdGVzOyBpKyspIHsKKwkJdTMyIHJlZzsKKwkJdTE2IHR4X3RpbWU7CisKKwkJaWYgKGFoLT5haF9hY2tfYml0cmF0ZV9oaWdoKQorCQkJcmF0ZSA9ICZzYy0+c2JhbmRzW2JhbmRdLmJpdHJhdGVzW2Fja19yYXRlc19oaWdoW2ldXTsKKwkJLyogQ0NLIC0+IDFNYiAqLworCQllbHNlIGlmIChpIDwgNCkKKwkJCXJhdGUgPSAmc2MtPnNiYW5kc1tiYW5kXS5iaXRyYXRlc1swXTsKKwkJLyogT0ZETSAtPiA2TWIgKi8KKwkJZWxzZQorCQkJcmF0ZSA9ICZzYy0+c2JhbmRzW2JhbmRdLmJpdHJhdGVzWzRdOworCisJCS8qIFNldCBBQ0sgdGltZW91dCAqLworCQlyZWcgPSBBUjVLX1JBVEVfRFVSKHJhdGUtPmh3X3ZhbHVlKTsKKworCQkvKiBBbiBBQ0sgZnJhbWUgY29uc2lzdHMgb2YgMTAgYnl0ZXMuIElmIHlvdSBhZGQgdGhlIEZDUywKKwkJICogd2hpY2ggaWVlZTgwMjExX2dlbmVyaWNfZnJhbWVfZHVyYXRpb24oKSBhZGRzLAorCQkgKiBpdHMgMTQgYnl0ZXMuIE5vdGUgd2UgdXNlIHRoZSBjb250cm9sIHJhdGUgYW5kIG5vdCB0aGUKKwkJICogYWN0dWFsIHJhdGUgZm9yIHRoaXMgcmF0ZS4gU2VlIG1hYzgwMjExIHR4LmMKKwkJICogaWVlZTgwMjExX2R1cmF0aW9uKCkgZm9yIGEgYnJpZWYgZGVzY3JpcHRpb24gb2YKKwkJICogd2hhdCByYXRlIHdlIHNob3VsZCBjaG9vc2UgdG8gVFggQUNLcy4gKi8KKwkJdHhfdGltZSA9IGF0aDVrX2h3X2dldF9mcmFtZV9kdXJhdGlvbihhaCwgMTAsIHJhdGUpOworCisJCXR4X3RpbWUgPSBsZTE2X3RvX2NwdSh0eF90aW1lKTsKKworCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIHR4X3RpbWUsIHJlZyk7CisKKwkJaWYgKCEocmF0ZS0+ZmxhZ3MgJiBJRUVFODAyMTFfUkFURV9TSE9SVF9QUkVBTUJMRSkpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBXZSdyZSBub3QgZGlzdGluZ3Vpc2hpbmcgc2hvcnQgcHJlYW1ibGUgaGVyZSwKKwkJICogVGhpcyBpcyB0cnVlLCBhbGwgd2UnbGwgZ2V0IGlzIGEgbG9uZ2VyIHZhbHVlIGhlcmUKKwkJICogd2hpY2ggaXMgbm90IG5lY2Vzc2FyaWxseSBiYWQuIFdlIGNvdWxkIHVzZQorCQkgKiBleHBvcnQgaWVlZTgwMjExX2ZyYW1lX2R1cmF0aW9uKCkgYnV0IHRoYXQgbmVlZHMgdG8gYmUKKwkJICogZml4ZWQgZmlyc3QgdG8gYmUgcHJvcGVybHkgdXNlZCBieSBtYWM4MDIxMTEgZHJpdmVyczoKKwkJICoKKwkJICogIC0gcmVtb3ZlIGVycCBzdHVmZiBhbmQgbGV0IHRoZSByb3V0aW5lIGZpZ3VyZSBvZmRtCisJCSAqICAgIGVycCByYXRlcworCQkgKiAgLSByZW1vdmUgcGFzc2luZyBhcmd1bWVudCBpZWVlODAyMTFfbG9jYWwgYXMKKwkJICogICAgZHJpdmVycyBkb24ndCBoYXZlIGFjY2VzcyB0byBpdAorCQkgKiAgLSBtb3ZlIGRyaXZlcnMgdXNpbmcgaWVlZTgwMjExX2dlbmVyaWNfZnJhbWVfZHVyYXRpb24oKQorCQkgKiAgICB0byB0aGlzCisJCSAqLworCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIHR4X3RpbWUsCisJCQlyZWcgKyAoQVI1S19TRVRfU0hPUlRfUFJFQU1CTEUgPDwgMikpOworCX0KK30KKworLyoqCiAgKiBhdGg1a19od19zZXRfYWNrX3RpbWVvdXQgLSBTZXQgQUNLIHRpbWVvdXQgb24gUENVCiAgKgogICogQGFoOiBUaGUgJnN0cnVjdCBhdGg1a19odwpAQCAtMTk5LDg4ICszMjcsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoqCi0gKiBhdGg1a19od19odG9jbG9jayAtIFRyYW5zbGF0ZSB1c2VjIHRvIGh3IGNsb2NrIHVuaXRzCi0gKgotICogQGFoOiBUaGUgJnN0cnVjdCBhdGg1a19odwotICogQHVzZWM6IHZhbHVlIGluIG1pY3Jvc2Vjb25kcwotICovCi11bnNpZ25lZCBpbnQgYXRoNWtfaHdfaHRvY2xvY2soc3RydWN0IGF0aDVrX2h3ICphaCwgdW5zaWduZWQgaW50IHVzZWMpCi17Ci0Jc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDVrX2h3X2NvbW1vbihhaCk7Ci0JcmV0dXJuIHVzZWMgKiBjb21tb24tPmNsb2NrcmF0ZTsKLX0KIAotLyoqCi0gKiBhdGg1a19od19jbG9ja3RvaCAtIFRyYW5zbGF0ZSBodyBjbG9jayB1bml0cyB0byB1c2VjCi0gKiBAY2xvY2s6IHZhbHVlIGluIGh3IGNsb2NrIHVuaXRzCi0gKi8KLXVuc2lnbmVkIGludCBhdGg1a19od19jbG9ja3RvaChzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1bnNpZ25lZCBpbnQgY2xvY2spCi17Ci0Jc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDVrX2h3X2NvbW1vbihhaCk7Ci0JcmV0dXJuIGNsb2NrIC8gY29tbW9uLT5jbG9ja3JhdGU7Ci19Ci0KLS8qKgotICogYXRoNWtfaHdfc2V0X2Nsb2NrcmF0ZSAtIFNldCBjb21tb24tPmNsb2NrcmF0ZSBmb3IgdGhlIGN1cnJlbnQgY2hhbm5lbAotICoKLSAqIEBhaDogVGhlICZzdHJ1Y3QgYXRoNWtfaHcKLSAqLwotdm9pZCBhdGg1a19od19zZXRfY2xvY2tyYXRlKHN0cnVjdCBhdGg1a19odyAqYWgpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsID0gYWgtPmFoX2N1cnJlbnRfY2hhbm5lbDsKLQlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoNWtfaHdfY29tbW9uKGFoKTsKLQlpbnQgY2xvY2s7Ci0KLQlpZiAoY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMXzVHSFopCi0JCWNsb2NrID0gNDA7IC8qIDgwMi4xMWEgKi8KLQllbHNlIGlmIChjaGFubmVsLT5od192YWx1ZSAmIENIQU5ORUxfQ0NLKQotCQljbG9jayA9IDIyOyAvKiA4MDIuMTFiICovCi0JZWxzZQotCQljbG9jayA9IDQ0OyAvKiA4MDIuMTFnICovCi0KLQkvKiBDbG9jayByYXRlIGluIHR1cmJvIG1vZGVzIGlzIHR3aWNlIHRoZSBub3JtYWwgcmF0ZSAqLwotCWlmIChjaGFubmVsLT5od192YWx1ZSAmIENIQU5ORUxfVFVSQk8pCi0JCWNsb2NrICo9IDI7Ci0KLQljb21tb24tPmNsb2NrcmF0ZSA9IGNsb2NrOwotfQotCi0vKioKLSAqIGF0aDVrX2h3X2dldF9kZWZhdWx0X3Nsb3R0aW1lIC0gR2V0IHRoZSBkZWZhdWx0IHNsb3QgdGltZSBmb3IgY3VycmVudCBtb2RlCi0gKgotICogQGFoOiBUaGUgJnN0cnVjdCBhdGg1a19odwotICovCi1zdGF0aWMgdW5zaWduZWQgaW50IGF0aDVrX2h3X2dldF9kZWZhdWx0X3Nsb3R0aW1lKHN0cnVjdCBhdGg1a19odyAqYWgpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsID0gYWgtPmFoX2N1cnJlbnRfY2hhbm5lbDsKLQotCWlmIChjaGFubmVsLT5od192YWx1ZSAmIENIQU5ORUxfVFVSQk8pCi0JCXJldHVybiA2OyAvKiBib3RoIHR1cmJvIG1vZGVzICovCi0KLQlpZiAoY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMX0NDSykKLQkJcmV0dXJuIDIwOyAvKiA4MDIuMTFiICovCi0KLQlyZXR1cm4gOTsgLyogODAyLjExIGEvZyAqLwotfQotCi0vKioKLSAqIGF0aDVrX2h3X2dldF9kZWZhdWx0X3NpZnMgLSBHZXQgdGhlIGRlZmF1bHQgU0lGUyBmb3IgY3VycmVudCBtb2RlCi0gKgotICogQGFoOiBUaGUgJnN0cnVjdCBhdGg1a19odwotICovCi1zdGF0aWMgdW5zaWduZWQgaW50IGF0aDVrX2h3X2dldF9kZWZhdWx0X3NpZnMoc3RydWN0IGF0aDVrX2h3ICphaCkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwgPSBhaC0+YWhfY3VycmVudF9jaGFubmVsOwotCi0JaWYgKGNoYW5uZWwtPmh3X3ZhbHVlICYgQ0hBTk5FTF9UVVJCTykKLQkJcmV0dXJuIDg7IC8qIGJvdGggdHVyYm8gbW9kZXMgKi8KLQotCWlmIChjaGFubmVsLT5od192YWx1ZSAmIENIQU5ORUxfNUdIWikKLQkJcmV0dXJuIDE2OyAvKiA4MDIuMTFhICovCi0KLQlyZXR1cm4gMTA7IC8qIDgwMi4xMSBiL2cgKi8KLX0KKy8qKioqKioqKioqKioqKioqKioqXAorKiBSWCBmaWx0ZXIgQ29udHJvbCAqCitcKioqKioqKioqKioqKioqKioqKi8KIAogLyoqCiAgKiBhdGg1a19od19zZXRfbGxhZGRyIC0gU2V0IHN0YXRpb24gaWQKQEAgLTM2MiwzOSArNDEyLDYgQEAKIAkJYXRoX2h3X3NldGJzc2lkbWFzayhjb21tb24pOwogfQogCi0vKioqKioqKioqKioqXAotKiBSWCBDb250cm9sICoKLVwqKioqKioqKioqKiovCi0KLS8qKgotICogYXRoNWtfaHdfc3RhcnRfcnhfcGN1IC0gU3RhcnQgUlggZW5naW5lCi0gKgotICogQGFoOiBUaGUgJnN0cnVjdCBhdGg1a19odwotICoKLSAqIFN0YXJ0cyBSWCBlbmdpbmUgb24gUENVIHNvIHRoYXQgaHcgY2FuIHByb2Nlc3MgUlhlZCBmcmFtZXMKLSAqIChBQ0sgZXRjKS4KLSAqCi0gKiBOT1RFOiBSWCBETUEgc2hvdWxkIGJlIGFscmVhZHkgZW5hYmxlZCB1c2luZyBhdGg1a19od19zdGFydF9yeF9kbWEKLSAqLwotdm9pZCBhdGg1a19od19zdGFydF9yeF9wY3Uoc3RydWN0IGF0aDVrX2h3ICphaCkKLXsKLQlBUjVLX1JFR19ESVNBQkxFX0JJVFMoYWgsIEFSNUtfRElBR19TVywgQVI1S19ESUFHX1NXX0RJU19SWCk7Ci19Ci0KLS8qKgotICogYXQ1a19od19zdG9wX3J4X3BjdSAtIFN0b3AgUlggZW5naW5lCi0gKgotICogQGFoOiBUaGUgJnN0cnVjdCBhdGg1a19odwotICoKLSAqIFN0b3BzIFJYIGVuZ2luZSBvbiBQQ1UKLSAqCi0gKiBUT0RPOiBEZXRhY2ggQU5JIGhlcmUKLSAqLwotdm9pZCBhdGg1a19od19zdG9wX3J4X3BjdShzdHJ1Y3QgYXRoNWtfaHcgKmFoKQotewotCUFSNUtfUkVHX0VOQUJMRV9CSVRTKGFoLCBBUjVLX0RJQUdfU1csIEFSNUtfRElBR19TV19ESVNfUlgpOwotfQotCiAvKgogICogU2V0IG11bHRpY2FzdCBmaWx0ZXIKICAqLwpAQCAtNzQ2LDcgKzc2Myw3IEBACiAgKiBAYWg6IFRoZSAmc3RydWN0IGF0aDVrX2h3CiAgKiBAY292ZXJhZ2VfY2xhc3M6IElFRUUgODAyLjExIGNvdmVyYWdlIGNsYXNzIG51bWJlcgogICoKLSAqIFNldHMgc2xvdCB0aW1lLCBBQ0sgdGltZW91dCBhbmQgQ1RTIHRpbWVvdXQgZm9yIGdpdmVuIGNvdmVyYWdlIGNsYXNzLgorICogU2V0cyBJRlMgaW50ZXJ2YWxzIGFuZCBBQ0svQ1RTIHRpbWVvdXRzIGZvciBnaXZlbiBjb3ZlcmFnZSBjbGFzcy4KICAqLwogdm9pZCBhdGg1a19od19zZXRfY292ZXJhZ2VfY2xhc3Moc3RydWN0IGF0aDVrX2h3ICphaCwgdTggY292ZXJhZ2VfY2xhc3MpCiB7CkBAIC03NTUsOSArNzcyLDE3NSBAQAogCWludCBhY2tfdGltZW91dCA9IGF0aDVrX2h3X2dldF9kZWZhdWx0X3NpZnMoYWgpICsgc2xvdF90aW1lOwogCWludCBjdHNfdGltZW91dCA9IGFja190aW1lb3V0OwogCi0JYXRoNWtfaHdfc2V0X3Nsb3RfdGltZShhaCwgc2xvdF90aW1lKTsKKwlhdGg1a19od19zZXRfaWZzX2ludGVydmFscyhhaCwgc2xvdF90aW1lKTsKIAlhdGg1a19od19zZXRfYWNrX3RpbWVvdXQoYWgsIGFja190aW1lb3V0KTsKIAlhdGg1a19od19zZXRfY3RzX3RpbWVvdXQoYWgsIGN0c190aW1lb3V0KTsKIAogCWFoLT5haF9jb3ZlcmFnZV9jbGFzcyA9IGNvdmVyYWdlX2NsYXNzOwogfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqXAorKiBJbml0L1N0YXJ0L1N0b3AgZnVuY3Rpb25zICoKK1wqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogYXRoNWtfaHdfc3RhcnRfcnhfcGN1IC0gU3RhcnQgUlggZW5naW5lCisgKgorICogQGFoOiBUaGUgJnN0cnVjdCBhdGg1a19odworICoKKyAqIFN0YXJ0cyBSWCBlbmdpbmUgb24gUENVIHNvIHRoYXQgaHcgY2FuIHByb2Nlc3MgUlhlZCBmcmFtZXMKKyAqIChBQ0sgZXRjKS4KKyAqCisgKiBOT1RFOiBSWCBETUEgc2hvdWxkIGJlIGFscmVhZHkgZW5hYmxlZCB1c2luZyBhdGg1a19od19zdGFydF9yeF9kbWEKKyAqLwordm9pZCBhdGg1a19od19zdGFydF9yeF9wY3Uoc3RydWN0IGF0aDVrX2h3ICphaCkKK3sKKwlBUjVLX1JFR19ESVNBQkxFX0JJVFMoYWgsIEFSNUtfRElBR19TVywgQVI1S19ESUFHX1NXX0RJU19SWCk7Cit9CisKKy8qKgorICogYXQ1a19od19zdG9wX3J4X3BjdSAtIFN0b3AgUlggZW5naW5lCisgKgorICogQGFoOiBUaGUgJnN0cnVjdCBhdGg1a19odworICoKKyAqIFN0b3BzIFJYIGVuZ2luZSBvbiBQQ1UKKyAqLwordm9pZCBhdGg1a19od19zdG9wX3J4X3BjdShzdHJ1Y3QgYXRoNWtfaHcgKmFoKQoreworCUFSNUtfUkVHX0VOQUJMRV9CSVRTKGFoLCBBUjVLX0RJQUdfU1csIEFSNUtfRElBR19TV19ESVNfUlgpOworfQorCisvKioKKyAqIGF0aDVrX2h3X3NldF9vcG1vZGUgLSBTZXQgUENVIG9wZXJhdGluZyBtb2RlCisgKgorICogQGFoOiBUaGUgJnN0cnVjdCBhdGg1a19odworICogQG9wX21vZGU6ICZlbnVtIG5sODAyMTFfaWZ0eXBlIG9wZXJhdGluZyBtb2RlCisgKgorICogQ29uZmlndXJlIFBDVSBmb3IgdGhlIHZhcmlvdXMgb3BlcmF0aW5nIG1vZGVzIChBUC9TVEEgZXRjKQorICovCitpbnQgYXRoNWtfaHdfc2V0X29wbW9kZShzdHJ1Y3QgYXRoNWtfaHcgKmFoLCBlbnVtIG5sODAyMTFfaWZ0eXBlIG9wX21vZGUpCit7CisJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDVrX2h3X2NvbW1vbihhaCk7CisJdTMyIHBjdV9yZWcsIGJlYWNvbl9yZWcsIGxvd19pZCwgaGlnaF9pZDsKKworCUFUSDVLX0RCRyhhaC0+YWhfc2MsIEFUSDVLX0RFQlVHX01PREUsICJtb2RlICVkXG4iLCBvcF9tb2RlKTsKKworCS8qIFByZXNlcnZlIHJlc3Qgc2V0dGluZ3MgKi8KKwlwY3VfcmVnID0gYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfU1RBX0lEMSkgJiAweGZmZmYwMDAwOworCXBjdV9yZWcgJj0gfihBUjVLX1NUQV9JRDFfQURIT0MgfCBBUjVLX1NUQV9JRDFfQVAKKwkJCXwgQVI1S19TVEFfSUQxX0tFWVNSQ0hfTU9ERQorCQkJfCAoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUyMTAgPworCQkJKEFSNUtfU1RBX0lEMV9QV1JfU1YgfCBBUjVLX1NUQV9JRDFfTk9fUFNQT0xMKSA6IDApKTsKKworCWJlYWNvbl9yZWcgPSAwOworCisJc3dpdGNoIChvcF9tb2RlKSB7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKKwkJcGN1X3JlZyB8PSBBUjVLX1NUQV9JRDFfQURIT0MgfCBBUjVLX1NUQV9JRDFfS0VZU1JDSF9NT0RFOworCQliZWFjb25fcmVnIHw9IEFSNUtfQkNSX0FESE9DOworCQlpZiAoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUyMTApCisJCQlwY3VfcmVnIHw9IEFSNUtfU1RBX0lEMV9OT19QU1BPTEw7CisJCWVsc2UKKwkJCUFSNUtfUkVHX0VOQUJMRV9CSVRTKGFoLCBBUjVLX0NGRywgQVI1S19DRkdfSUJTUyk7CisJCWJyZWFrOworCisJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKKwljYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6CisJCXBjdV9yZWcgfD0gQVI1S19TVEFfSUQxX0FQIHwgQVI1S19TVEFfSUQxX0tFWVNSQ0hfTU9ERTsKKwkJYmVhY29uX3JlZyB8PSBBUjVLX0JDUl9BUDsKKwkJaWYgKGFoLT5haF92ZXJzaW9uID09IEFSNUtfQVI1MjEwKQorCQkJcGN1X3JlZyB8PSBBUjVLX1NUQV9JRDFfTk9fUFNQT0xMOworCQllbHNlCisJCQlBUjVLX1JFR19ESVNBQkxFX0JJVFMoYWgsIEFSNUtfQ0ZHLCBBUjVLX0NGR19JQlNTKTsKKwkJYnJlYWs7CisKKwljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CisJCXBjdV9yZWcgfD0gQVI1S19TVEFfSUQxX0tFWVNSQ0hfTU9ERQorCQkJfCAoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUyMTAgPworCQkJCUFSNUtfU1RBX0lEMV9QV1JfU1YgOiAwKTsKKwljYXNlIE5MODAyMTFfSUZUWVBFX01PTklUT1I6CisJCXBjdV9yZWcgfD0gQVI1S19TVEFfSUQxX0tFWVNSQ0hfTU9ERQorCQkJfCAoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUyMTAgPworCQkJCUFSNUtfU1RBX0lEMV9OT19QU1BPTEwgOiAwKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKgorCSAqIFNldCBQQ1UgcmVnaXN0ZXJzCisJICovCisJbG93X2lkID0gZ2V0X3VuYWxpZ25lZF9sZTMyKGNvbW1vbi0+bWFjYWRkcik7CisJaGlnaF9pZCA9IGdldF91bmFsaWduZWRfbGUxNihjb21tb24tPm1hY2FkZHIgKyA0KTsKKwlhdGg1a19od19yZWdfd3JpdGUoYWgsIGxvd19pZCwgQVI1S19TVEFfSUQwKTsKKwlhdGg1a19od19yZWdfd3JpdGUoYWgsIHBjdV9yZWcgfCBoaWdoX2lkLCBBUjVLX1NUQV9JRDEpOworCisJLyoKKwkgKiBTZXQgQmVhY29uIENvbnRyb2wgUmVnaXN0ZXIgb24gNTIxMAorCSAqLworCWlmIChhaC0+YWhfdmVyc2lvbiA9PSBBUjVLX0FSNTIxMCkKKwkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBiZWFjb25fcmVnLCBBUjVLX0JDUik7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBhdGg1a19od19wY3VfaW5pdChzdHJ1Y3QgYXRoNWtfaHcgKmFoLCBlbnVtIG5sODAyMTFfaWZ0eXBlIG9wX21vZGUsCisJCQkJCQkJCXU4IG1vZGUpCit7CisJLyogU2V0IGJzc2lkIGFuZCBic3NpZCBtYXNrICovCisJYXRoNWtfaHdfc2V0X2Jzc2lkKGFoKTsKKworCS8qIFNldCBQQ1UgY29uZmlnICovCisJYXRoNWtfaHdfc2V0X29wbW9kZShhaCwgb3BfbW9kZSk7CisKKwkvKiBXcml0ZSByYXRlIGR1cmF0aW9uIHRhYmxlIG9ubHkgb24gQVI1MjEyIGFuZCBpZgorCSAqIHZpcnR1YWwgaW50ZXJmYWNlIGhhcyBhbHJlYWR5IGJlZW4gYnJvdWdodCB1cAorCSAqIFhYWDogcmV0aGluayB0aGlzIGFmdGVyIG5ldyBtb2RlIGNoYW5nZXMgdG8KKwkgKiBtYWM4MDIxMSBhcmUgaW50ZWdyYXRlZCAqLworCWlmIChhaC0+YWhfdmVyc2lvbiA9PSBBUjVLX0FSNTIxMiAmJgorCQlhaC0+YWhfc2MtPm52aWZzKQorCQlhdGg1a19od193cml0ZV9yYXRlX2R1cmF0aW9uKGFoKTsKKworCS8qIFNldCBSU1NJL0JSU1NJIHRocmVzaG9sZHMKKwkgKgorCSAqIE5vdGU6IElmIHdlIGRlY2lkZSB0byBzZXQgdGhpcyB2YWx1ZQorCSAqIGR5bmFtaWNhbHksIGhhdmUgaW4gbWluZCB0aGF0IHdoZW4gQVI1S19SU1NJX1RIUgorCSAqIHJlZ2lzdGVyIGlzIHJlYWQgaXQgbWlnaHQgcmV0dXJuIDB4NDAgaWYgd2UgaGF2ZW4ndAorCSAqIHdyb3RlIGFueXRoaW5nIHRvIGl0IHBsdXMgQk1JU1MgUlNTSSB0aHJlc2hvbGQgaXMgemVyb2VkLgorCSAqIFNvIGRvaW5nIGEgc2F2ZS9yZXN0b3JlIHByb2NlZHVyZSBoZXJlIGlzbid0IHRoZSByaWdodAorCSAqIGNob2ljZS4gSW5zdGVhZCBzdG9yZSBpdCBvbiBhdGg1a19odyAqLworCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgKEFSNUtfVFVORV9SU1NJX1RIUkVTIHwKKwkJCQlBUjVLX1RVTkVfQk1JU1NfVEhSRVMgPDwKKwkJCQlBUjVLX1JTU0lfVEhSX0JNSVNTX1MpLAorCQkJCUFSNUtfUlNTSV9USFIpOworCisJLyogTUlDIFFvUyBzdXBwb3J0ICovCisJaWYgKGFoLT5haF9tYWNfc3JldiA+PSBBUjVLX1NSRVZfQVIyNDEzKSB7CisJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgwMDAxMDBhYSwgQVI1S19NSUNfUU9TX0NUTCk7CisJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgwMDAwMzIxMCwgQVI1S19NSUNfUU9TX1NFTCk7CisJfQorCisJLyogUW9TIE5PQUNLIFBvbGljeSAqLworCWlmIChhaC0+YWhfdmVyc2lvbiA9PSBBUjVLX0FSNTIxMikgeworCQlhdGg1a19od19yZWdfd3JpdGUoYWgsCisJCQlBUjVLX1JFR19TTSgyLCBBUjVLX1FPU19OT0FDS18yQklUX1ZBTFVFUykgfAorCQkJQVI1S19SRUdfU00oNSwgQVI1S19RT1NfTk9BQ0tfQklUX09GRlNFVCkgIHwKKwkJCUFSNUtfUkVHX1NNKDAsIEFSNUtfUU9TX05PQUNLX0JZVEVfT0ZGU0VUKSwKKwkJCUFSNUtfUU9TX05PQUNLKTsKKwl9CisKKwkvKiBSZXN0b3JlIHNsb3QgdGltZSBhbmQgQUNLIHRpbWVvdXRzICovCisJaWYgKGFoLT5haF9jb3ZlcmFnZV9jbGFzcyA+IDApCisJCWF0aDVrX2h3X3NldF9jb3ZlcmFnZV9jbGFzcyhhaCwgYWgtPmFoX2NvdmVyYWdlX2NsYXNzKTsKKworCS8qIFNldCBBQ0sgYml0cmF0ZSBtb2RlIChzZWUgYWNrX3JhdGVzX2hpZ2gpICovCisJaWYgKGFoLT5haF92ZXJzaW9uID09IEFSNUtfQVI1MjEyKSB7CisJCXUzMiB2YWwgPSBBUjVLX1NUQV9JRDFfQkFTRV9SQVRFXzExQiB8IEFSNUtfU1RBX0lEMV9BQ0tDVFNfNk1COworCQlpZiAoYWgtPmFoX2Fja19iaXRyYXRlX2hpZ2gpCisJCQlBUjVLX1JFR19ESVNBQkxFX0JJVFMoYWgsIEFSNUtfU1RBX0lEMSwgdmFsKTsKKwkJZWxzZQorCQkJQVI1S19SRUdfRU5BQkxFX0JJVFMoYWgsIEFSNUtfU1RBX0lEMSwgdmFsKTsKKwl9CisJcmV0dXJuOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3BoeS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3BoeS5jCmluZGV4IDIxOTM2NzguLjc4YzI2ZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9waHkuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcGh5LmMKQEAgLTI5LDYgKzI5LDk1IEBACiAjaW5jbHVkZSAicmZidWZmZXIuaCIKICNpbmNsdWRlICJyZmdhaW4uaCIKIAorCisvKioqKioqKioqKioqKioqKioqXAorKiBIZWxwZXIgZnVuY3Rpb25zICoKK1wqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBHZXQgdGhlIFBIWSBDaGlwIHJldmlzaW9uCisgKi8KK3UxNiBhdGg1a19od19yYWRpb19yZXZpc2lvbihzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1bnNpZ25lZCBpbnQgY2hhbikKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwl1MzIgc3JldjsKKwl1MTYgcmV0OworCisJLyoKKwkgKiBTZXQgdGhlIHJhZGlvIGNoaXAgYWNjZXNzIHJlZ2lzdGVyCisJICovCisJc3dpdGNoIChjaGFuKSB7CisJY2FzZSBDSEFOTkVMXzJHSFo6CisJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgQVI1S19QSFlfU0hJRlRfMkdIWiwgQVI1S19QSFkoMCkpOworCQlicmVhazsKKwljYXNlIENIQU5ORUxfNUdIWjoKKwkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBBUjVLX1BIWV9TSElGVF81R0haLCBBUjVLX1BIWSgwKSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KKworCW1kZWxheSgyKTsKKworCS8qIC4uLndhaXQgdW50aWwgUEhZIGlzIHJlYWR5IGFuZCByZWFkIHRoZSBzZWxlY3RlZCByYWRpbyByZXZpc2lvbiAqLworCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgwMDAwMWMxNiwgQVI1S19QSFkoMHgzNCkpOworCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDAwMDEwMDAwLCBBUjVLX1BIWSgweDIwKSk7CisKKwlpZiAoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUyMTApIHsKKwkJc3JldiA9IGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX1BIWSgyNTYpID4+IDI4KSAmIDB4ZjsKKwkJcmV0ID0gKHUxNilhdGg1a19od19iaXRzd2FwKHNyZXYsIDQpICsgMTsKKwl9IGVsc2UgeworCQlzcmV2ID0gKGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX1BIWSgweDEwMCkpID4+IDI0KSAmIDB4ZmY7CisJCXJldCA9ICh1MTYpYXRoNWtfaHdfYml0c3dhcCgoKHNyZXYgJiAweGYwKSA+PiA0KSB8CisJCQkJKChzcmV2ICYgMHgwZikgPDwgNCksIDgpOworCX0KKworCS8qIFJlc2V0IHRvIHRoZSA1R0h6IG1vZGUgKi8KKwlhdGg1a19od19yZWdfd3JpdGUoYWgsIEFSNUtfUEhZX1NISUZUXzVHSFosIEFSNUtfUEhZKDApKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBDaGVjayBpZiBhIGNoYW5uZWwgaXMgc3VwcG9ydGVkCisgKi8KK2Jvb2wgYXRoNWtfY2hhbm5lbF9vayhzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1MTYgZnJlcSwgdW5zaWduZWQgaW50IGZsYWdzKQoreworCS8qIENoZWNrIGlmIHRoZSBjaGFubmVsIGlzIGluIG91ciBzdXBwb3J0ZWQgcmFuZ2UgKi8KKwlpZiAoZmxhZ3MgJiBDSEFOTkVMXzJHSFopIHsKKwkJaWYgKChmcmVxID49IGFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX3JhbmdlLnJhbmdlXzJnaHpfbWluKSAmJgorCQkgICAgKGZyZXEgPD0gYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfcmFuZ2UucmFuZ2VfMmdoel9tYXgpKQorCQkJcmV0dXJuIHRydWU7CisJfSBlbHNlIGlmIChmbGFncyAmIENIQU5ORUxfNUdIWikKKwkJaWYgKChmcmVxID49IGFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX3JhbmdlLnJhbmdlXzVnaHpfbWluKSAmJgorCQkgICAgKGZyZXEgPD0gYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfcmFuZ2UucmFuZ2VfNWdoel9tYXgpKQorCQkJcmV0dXJuIHRydWU7CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgYXRoNWtfaHdfY2hhbl9oYXNfc3B1cl9ub2lzZShzdHJ1Y3QgYXRoNWtfaHcgKmFoLAorCQkJCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCkKK3sKKwl1OCByZWZjbGtfZnJlcTsKKworCWlmICgoYWgtPmFoX3JhZGlvID09IEFSNUtfUkY1MTEyKSB8fAorCShhaC0+YWhfcmFkaW8gPT0gQVI1S19SRjU0MTMpIHx8CisJKGFoLT5haF9tYWNfdmVyc2lvbiA9PSAoQVI1S19TUkVWX0FSMjQxNyA+PiA0KSkpCisJCXJlZmNsa19mcmVxID0gNDA7CisJZWxzZQorCQlyZWZjbGtfZnJlcSA9IDMyOworCisJaWYgKChjaGFubmVsLT5jZW50ZXJfZnJlcSAlIHJlZmNsa19mcmVxICE9IDApICYmCisJKChjaGFubmVsLT5jZW50ZXJfZnJlcSAlIHJlZmNsa19mcmVxIDwgMTApIHx8CisJKGNoYW5uZWwtPmNlbnRlcl9mcmVxICUgcmVmY2xrX2ZyZXEgPiAyMikpKQorCQlyZXR1cm4gdHJ1ZTsKKwllbHNlCisJCXJldHVybiBmYWxzZTsKK30KKwogLyoKICAqIFVzZWQgdG8gbW9kaWZ5IFJGIEJhbmtzIGJlZm9yZSB3cml0aW5nIHRoZW0gdG8gQVI1S19SRl9CVUZGRVIKICAqLwpAQCAtMTEwLDYgKzE5OSw5MCBAQAogCXJldHVybiBkYXRhOwogfQogCisvKioKKyAqIGF0aDVrX2h3X3dyaXRlX29mZG1fdGltaW5ncyAtIHNldCBPRkRNIHRpbWluZ3Mgb24gQVI1MjEyCisgKgorICogQGFoOiB0aGUgJnN0cnVjdCBhdGg1a19odworICogQGNoYW5uZWw6IHRoZSBjdXJyZW50bHkgc2V0IGNoYW5uZWwgdXBvbiByZXNldAorICoKKyAqIFdyaXRlIHRoZSBkZWx0YSBzbG9wZSBjb2VmZmljaWVudCAodXNlZCBvbiBwaWxvdCB0cmFja2luZyA/KSBmb3IgT0ZETQorICogb3BlcmF0aW9uIG9uIHRoZSBBUjUyMTIgdXBvbiByZXNldC4gVGhpcyBpcyBhIGhlbHBlciBmb3IgYXRoNWtfaHdfcGh5X2luaXQuCisgKgorICogU2luY2UgZGVsdGEgc2xvcGUgaXMgZmxvYXRpbmcgcG9pbnQgd2Ugc3BsaXQgaXQgb24gaXRzIGV4cG9uZW50IGFuZAorICogbWFudGlzc2EgYW5kIHByb3ZpZGUgdGhlc2UgdmFsdWVzIG9uIGh3LgorICoKKyAqIEZvciBtb3JlIGluZm9zIGkgdGhpbmsgdGhpcyBwYXRlbnQgaXMgcmVsYXRlZAorICogaHR0cDovL3d3dy5mcmVlcGF0ZW50c29ubGluZS5jb20vNzE4NDQ5NS5odG1sCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGF0aDVrX2h3X3dyaXRlX29mZG1fdGltaW5ncyhzdHJ1Y3QgYXRoNWtfaHcgKmFoLAorCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCkKK3sKKwkvKiBHZXQgZXhwb25lbnQgYW5kIG1hbnRpc3NhIGFuZCBzZXQgaXQgKi8KKwl1MzIgY29lZl9zY2FsZWQsIGNvZWZfZXhwLCBjb2VmX21hbiwKKwkJZHNfY29lZl9leHAsIGRzX2NvZWZfbWFuLCBjbG9jazsKKworCUJVR19PTighKGFoLT5haF92ZXJzaW9uID09IEFSNUtfQVI1MjEyKSB8fAorCQkhKGNoYW5uZWwtPmh3X3ZhbHVlICYgQ0hBTk5FTF9PRkRNKSk7CisKKwkvKiBHZXQgY29lZmZpY2llbnQKKwkgKiBBTEdPOiBjb2VmID0gKDUgKiBjbG9jayAvIGNhcnJpZXJfZnJlcSkgLyAyCisJICogd2Ugc2NhbGUgY29lZiBieSBzaGlmdGluZyBjbG9jayB2YWx1ZSBieSAyNCBmb3IKKwkgKiBiZXR0ZXIgcHJlY2lzaW9uIHNpbmNlIHdlIHVzZSBpbnRlZ2VycyAqLworCXN3aXRjaCAoYWgtPmFoX2J3bW9kZSkgeworCWNhc2UgQVI1S19CV01PREVfNDBNSFo6CisJCWNsb2NrID0gNDAgKiAyOworCQlicmVhazsKKwljYXNlIEFSNUtfQldNT0RFXzEwTUhaOgorCQljbG9jayA9IDQwIC8gMjsKKwkJYnJlYWs7CisJY2FzZSBBUjVLX0JXTU9ERV81TUhaOgorCQljbG9jayA9IDQwIC8gNDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJY2xvY2sgPSA0MDsKKwkJYnJlYWs7CisJfQorCWNvZWZfc2NhbGVkID0gKCg1ICogKGNsb2NrIDw8IDI0KSkgLyAyKSAvIGNoYW5uZWwtPmNlbnRlcl9mcmVxOworCisJLyogR2V0IGV4cG9uZW50CisJICogQUxHTzogY29lZl9leHAgPSAxNCAtIGhpZ2hlc3Qgc2V0IGJpdCBwb3NpdGlvbiAqLworCWNvZWZfZXhwID0gaWxvZzIoY29lZl9zY2FsZWQpOworCisJLyogRG9lc24ndCBtYWtlIHNlbnNlIGlmIGl0J3MgemVybyovCisJaWYgKCFjb2VmX3NjYWxlZCB8fCAhY29lZl9leHApCisJCXJldHVybiAtRUlOVkFMOworCisJLyogTm90ZTogd2UndmUgc2hpZnRlZCBjb2VmX3NjYWxlZCBieSAyNCAqLworCWNvZWZfZXhwID0gMTQgLSAoY29lZl9leHAgLSAyNCk7CisKKworCS8qIEdldCBtYW50aXNzYSAoc2lnbmlmaWNhbnQgZGlnaXRzKQorCSAqIEFMR086IGNvZWZfbWFudCA9IGZsb29yKGNvZWZfc2NhbGVkKiAyXmNvZWZfZXhwKzAuNSkgKi8KKwljb2VmX21hbiA9IGNvZWZfc2NhbGVkICsKKwkJKDEgPDwgKDI0IC0gY29lZl9leHAgLSAxKSk7CisKKwkvKiBDYWxjdWxhdGUgZGVsdGEgc2xvcGUgY29lZmZpY2llbnQgZXhwb25lbnQKKwkgKiBhbmQgbWFudGlzc2EgKHJlbW92ZSBzY2FsaW5nKSBhbmQgc2V0IHRoZW0gb24gaHcgKi8KKwlkc19jb2VmX21hbiA9IGNvZWZfbWFuID4+ICgyNCAtIGNvZWZfZXhwKTsKKwlkc19jb2VmX2V4cCA9IGNvZWZfZXhwIC0gMTY7CisKKwlBUjVLX1JFR19XUklURV9CSVRTKGFoLCBBUjVLX1BIWV9USU1JTkdfMywKKwkJQVI1S19QSFlfVElNSU5HXzNfRFNDX01BTiwgZHNfY29lZl9tYW4pOworCUFSNUtfUkVHX1dSSVRFX0JJVFMoYWgsIEFSNUtfUEhZX1RJTUlOR18zLAorCQlBUjVLX1BIWV9USU1JTkdfM19EU0NfRVhQLCBkc19jb2VmX2V4cCk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGF0aDVrX2h3X3BoeV9kaXNhYmxlKHN0cnVjdCBhdGg1a19odyAqYWgpCit7CisJLypKdXN0IGEgdHJ5IE0uRi4qLworCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgQVI1S19QSFlfQUNUX0RJU0FCTEUsIEFSNUtfUEhZX0FDVCk7CisKKwlyZXR1cm4gMDsKK30KKworCiAvKioqKioqKioqKioqKioqKioqKioqKlwKICogUkYgR2FpbiBvcHRpbWl6YXRpb24gKgogXCoqKioqKioqKioqKioqKioqKioqKiovCkBAIC00MzYsMTAgKzYwOSwxMCBAQAogLyogV3JpdGUgaW5pdGlhbCBSRiBnYWluIHRhYmxlIHRvIHNldCB0aGUgUkYgc2Vuc2l0aXZpdHkKICAqIHRoaXMgb25lIHdvcmtzIG9uIGFsbCBSRiBjaGlwcyBhbmQgaGFzIG5vdGhpbmcgdG8gZG8KICAqIHdpdGggZ2Fpbl9GIGNhbGlicmF0aW9uICovCi1pbnQgYXRoNWtfaHdfcmZnYWluX2luaXQoc3RydWN0IGF0aDVrX2h3ICphaCwgdW5zaWduZWQgaW50IGZyZXEpCitzdGF0aWMgaW50IGF0aDVrX2h3X3JmZ2Fpbl9pbml0KHN0cnVjdCBhdGg1a19odyAqYWgsIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCkKIHsKIAljb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX3JmZ2FpbiAqYXRoNWtfcmZnOwotCXVuc2lnbmVkIGludCBpLCBzaXplOworCXVuc2lnbmVkIGludCBpLCBzaXplLCBpbmRleDsKIAogCXN3aXRjaCAoYWgtPmFoX3JhZGlvKSB7CiAJY2FzZSBBUjVLX1JGNTExMToKQEAgLTQ3MSwxNyArNjQ0LDExIEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXN3aXRjaCAoZnJlcSkgewotCWNhc2UgQVI1S19JTklfUkZHQUlOXzJHSFo6Ci0JY2FzZSBBUjVLX0lOSV9SRkdBSU5fNUdIWjoKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQorCWluZGV4ID0gKGJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikgPyAxIDogMDsKIAogCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKIAkJQVI1S19SRUdfV0FJVChpKTsKLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBhdGg1a19yZmdbaV0ucmZnX3ZhbHVlW2ZyZXFdLAorCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIGF0aDVrX3JmZ1tpXS5yZmdfdmFsdWVbaW5kZXhdLAogCQkJKHUzMilhdGg1a19yZmdbaV0ucmZnX3JlZ2lzdGVyKTsKIAl9CiAKQEAgLTQ5NCwxMiArNjYxLDExIEBACiAqIFJGIFJlZ2lzdGVycyBzZXR1cCAqCiBcKioqKioqKioqKioqKioqKioqKiovCiAKLQogLyoKICAqIFNldHVwIFJGIHJlZ2lzdGVycyBieSB3cml0aW5nIFJGIGJ1ZmZlciBvbiBodwogICovCi1pbnQgYXRoNWtfaHdfcmZyZWdzX2luaXQoc3RydWN0IGF0aDVrX2h3ICphaCwgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsLAotCQl1bnNpZ25lZCBpbnQgbW9kZSkKK3N0YXRpYyBpbnQgYXRoNWtfaHdfcmZyZWdzX2luaXQoc3RydWN0IGF0aDVrX2h3ICphaCwKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwsIHVuc2lnbmVkIGludCBtb2RlKQogewogCWNvbnN0IHN0cnVjdCBhdGg1a19yZl9yZWcgKnJmX3JlZ3M7CiAJY29uc3Qgc3RydWN0IGF0aDVrX2luaV9yZmJ1ZmZlciAqaW5pX3JmYjsKQEAgLTY1Miw2ICs4MTgsMTEgQEAKIAogCWdfc3RlcCA9ICZnby0+Z29fc3RlcFthaC0+YWhfZ2Fpbi5nX3N0ZXBfaWR4XTsKIAorCS8qIFNldCB0dXJibyBtb2RlIChOL0Egb24gUkY1NDEzKSAqLworCWlmICgoYWgtPmFoX2J3bW9kZSA9PSBBUjVLX0JXTU9ERV80ME1IWikgJiYKKwkoYWgtPmFoX3JhZGlvICE9IEFSNUtfUkY1NDEzKSkKKwkJYXRoNWtfaHdfcmZiX29wKGFoLCByZl9yZWdzLCAxLCBBUjVLX1JGX1RVUkJPLCBmYWxzZSk7CisKIAkvKiBCYW5rIE1vZGlmaWNhdGlvbnMgKGNoaXAtc3BlY2lmaWMpICovCiAJaWYgKGFoLT5haF9yYWRpbyA9PSBBUjVLX1JGNTExMSkgewogCkBAIC02OTEsNyArODYyLDIzIEBACiAJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywgZWUtPmVlX3hwZFtlZV9tb2RlXSwKIAkJCQkJCUFSNUtfUkZfUExPX1NFTCwgdHJ1ZSk7CiAKLQkJLyogVE9ETzogSGFsZi9xdWFydGVyIGNoYW5uZWwgc3VwcG9ydCAqLworCQkvKiBUd2VhayBwb3dlciBkZXRlY3RvcnMgZm9yIGhhbGYvcXVhcnRlciByYXRlIHN1cHBvcnQgKi8KKwkJaWYgKGFoLT5haF9id21vZGUgPT0gQVI1S19CV01PREVfNU1IWiB8fAorCQlhaC0+YWhfYndtb2RlID09IEFSNUtfQldNT0RFXzEwTUhaKSB7CisJCQl1OCB3YWl0X2k7CisKKwkJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywgMHgxZiwKKwkJCQkJCUFSNUtfUkZfV0FJVF9TLCB0cnVlKTsKKworCQkJd2FpdF9pID0gKGFoLT5haF9id21vZGUgPT0gQVI1S19CV01PREVfNU1IWikgPworCQkJCQkJCTB4MWYgOiAweDEwOworCisJCQlhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsIHdhaXRfaSwKKwkJCQkJCUFSNUtfUkZfV0FJVF9JLCB0cnVlKTsKKwkJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywgMywKKwkJCQkJCUFSNUtfUkZfTUFYX1RJTUUsIHRydWUpOworCisJCX0KIAl9CiAKIAlpZiAoYWgtPmFoX3JhZGlvID09IEFSNUtfUkY1MTEyKSB7CkBAIC03ODksOCArOTc2LDIwIEBACiAJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywgZWUtPmVlX2lfZ2FpbltlZV9tb2RlXSwKIAkJCQkJCUFSNUtfUkZfR0FJTl9JLCB0cnVlKTsKIAotCQkvKiBUT0RPOiBIYWxmL3F1YXJ0ZXIgY2hhbm5lbCBzdXBwb3J0ICovCisJCS8qIFR3ZWFrIHBvd2VyIGRldGVjdG9yIGZvciBoYWxmL3F1YXJ0ZXIgcmF0ZXMgKi8KKwkJaWYgKGFoLT5haF9id21vZGUgPT0gQVI1S19CV01PREVfNU1IWiB8fAorCQlhaC0+YWhfYndtb2RlID09IEFSNUtfQldNT0RFXzEwTUhaKSB7CisJCQl1OCBwZF9kZWxheTsKIAorCQkJcGRfZGVsYXkgPSAoYWgtPmFoX2J3bW9kZSA9PSBBUjVLX0JXTU9ERV81TUhaKSA/CisJCQkJCQkJMHhmIDogMHg4OworCisJCQlhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsIHBkX2RlbGF5LAorCQkJCQkJQVI1S19SRl9QRF9QRVJJT0RfQSwgdHJ1ZSk7CisJCQlhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsIDB4ZiwKKwkJCQkJCUFSNUtfUkZfUERfREVMQVlfQSwgdHJ1ZSk7CisKKwkJfQogCX0KIAogCWlmIChhaC0+YWhfcmFkaW8gPT0gQVI1S19SRjU0MTMgJiYKQEAgLTgyMiwyNCArMTAyMSw2IEBACiBcKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDaGVjayBpZiBhIGNoYW5uZWwgaXMgc3VwcG9ydGVkCi0gKi8KLWJvb2wgYXRoNWtfY2hhbm5lbF9vayhzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1MTYgZnJlcSwgdW5zaWduZWQgaW50IGZsYWdzKQotewotCS8qIENoZWNrIGlmIHRoZSBjaGFubmVsIGlzIGluIG91ciBzdXBwb3J0ZWQgcmFuZ2UgKi8KLQlpZiAoZmxhZ3MgJiBDSEFOTkVMXzJHSFopIHsKLQkJaWYgKChmcmVxID49IGFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX3JhbmdlLnJhbmdlXzJnaHpfbWluKSAmJgotCQkgICAgKGZyZXEgPD0gYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfcmFuZ2UucmFuZ2VfMmdoel9tYXgpKQotCQkJcmV0dXJuIHRydWU7Ci0JfSBlbHNlIGlmIChmbGFncyAmIENIQU5ORUxfNUdIWikKLQkJaWYgKChmcmVxID49IGFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX3JhbmdlLnJhbmdlXzVnaHpfbWluKSAmJgotCQkgICAgKGZyZXEgPD0gYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfcmFuZ2UucmFuZ2VfNWdoel9tYXgpKQotCQkJcmV0dXJuIHRydWU7Ci0KLQlyZXR1cm4gZmFsc2U7Ci19Ci0KLS8qCiAgKiBDb252ZXJ0aW9uIG5lZWRlZCBmb3IgUkY1MTEwCiAgKi8KIHN0YXRpYyB1MzIgYXRoNWtfaHdfcmY1MTEwX2NoYW4yYXRoY2hhbihzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwpCkBAIC0xMDQ1LDcgKzEyMjYsOCBAQAogLyoKICAqIFNldCBhIGNoYW5uZWwgb24gdGhlIHJhZGlvIGNoaXAKICAqLwotaW50IGF0aDVrX2h3X2NoYW5uZWwoc3RydWN0IGF0aDVrX2h3ICphaCwgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsKQorc3RhdGljIGludCBhdGg1a19od19jaGFubmVsKHN0cnVjdCBhdGg1a19odyAqYWgsCisJCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCkKIHsKIAlpbnQgcmV0OwogCS8qCkBAIC0xMDkyLDggKzEyNzQsNiBAQAogCX0KIAogCWFoLT5haF9jdXJyZW50X2NoYW5uZWwgPSBjaGFubmVsOwotCWFoLT5haF90dXJibyA9IGNoYW5uZWwtPmh3X3ZhbHVlID09IENIQU5ORUxfVCA/IHRydWUgOiBmYWxzZTsKLQlhdGg1a19od19zZXRfY2xvY2tyYXRlKGFoKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTEwMiwxOCArMTI4MiwxMiBAQAogICBQSFkgY2FsaWJyYXRpb24KIFwqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIGludCBzaWduX2V4dGVuZChpbnQgdmFsLCBjb25zdCBpbnQgbmJpdHMpCi17Ci0JaW50IG9yZGVyID0gQklUKG5iaXRzLTEpOwotCXJldHVybiAodmFsIF4gb3JkZXIpIC0gb3JkZXI7Ci19Ci0KIHN0YXRpYyBzMzIgYXRoNWtfaHdfcmVhZF9tZWFzdXJlZF9ub2lzZV9mbG9vcihzdHJ1Y3QgYXRoNWtfaHcgKmFoKQogewogCXMzMiB2YWw7CiAKIAl2YWwgPSBhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19QSFlfTkYpOwotCXJldHVybiBzaWduX2V4dGVuZChBUjVLX1JFR19NUyh2YWwsIEFSNUtfUEhZX05GX01JTkNDQV9QV1IpLCA5KTsKKwlyZXR1cm4gc2lnbl9leHRlbmQzMihBUjVLX1JFR19NUyh2YWwsIEFSNUtfUEhZX05GX01JTkNDQV9QV1IpLCA4KTsKIH0KIAogdm9pZCBhdGg1a19od19pbml0X25mY2FsX2hpc3Qoc3RydWN0IGF0aDVrX2h3ICphaCkKQEAgLTExODEsMjIgKzEzNTUsNyBAQAogCQlyZXR1cm47CiAJfQogCi0Jc3dpdGNoIChhaC0+YWhfY3VycmVudF9jaGFubmVsLT5od192YWx1ZSAmIENIQU5ORUxfTU9ERVMpIHsKLQljYXNlIENIQU5ORUxfQToKLQljYXNlIENIQU5ORUxfVDoKLQljYXNlIENIQU5ORUxfWFI6Ci0JCWVlX21vZGUgPSBBUjVLX0VFUFJPTV9NT0RFXzExQTsKLQkJYnJlYWs7Ci0JY2FzZSBDSEFOTkVMX0c6Ci0JY2FzZSBDSEFOTkVMX1RHOgotCQllZV9tb2RlID0gQVI1S19FRVBST01fTU9ERV8xMUc7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JY2FzZSBDSEFOTkVMX0I6Ci0JCWVlX21vZGUgPSBBUjVLX0VFUFJPTV9NT0RFXzExQjsKLQkJYnJlYWs7Ci0JfQotCisJZWVfbW9kZSA9IGF0aDVrX2VlcHJvbV9tb2RlX2Zyb21fY2hhbm5lbChhaC0+YWhfY3VycmVudF9jaGFubmVsKTsKIAogCS8qIGNvbXBsZXRlZCBORiBjYWxpYnJhdGlvbiwgdGVzdCB0aHJlc2hvbGQgKi8KIAluZiA9IGF0aDVrX2h3X3JlYWRfbWVhc3VyZWRfbm9pc2VfZmxvb3IoYWgpOwpAQCAtMTQyNSwzMSArMTU4NCwxMiBAQAogCXJldHVybiByZXQ7CiB9CiAKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKlwKICogU3B1ciBtaXRpZ2F0aW9uIGZ1bmN0aW9ucyAqCiBcKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1ib29sIGF0aDVrX2h3X2NoYW5faGFzX3NwdXJfbm9pc2Uoc3RydWN0IGF0aDVrX2h3ICphaCwKLQkJCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwpCi17Ci0JdTggcmVmY2xrX2ZyZXE7Ci0KLQlpZiAoKGFoLT5haF9yYWRpbyA9PSBBUjVLX1JGNTExMikgfHwKLQkoYWgtPmFoX3JhZGlvID09IEFSNUtfUkY1NDEzKSB8fAotCShhaC0+YWhfbWFjX3ZlcnNpb24gPT0gKEFSNUtfU1JFVl9BUjI0MTcgPj4gNCkpKQotCQlyZWZjbGtfZnJlcSA9IDQwOwotCWVsc2UKLQkJcmVmY2xrX2ZyZXEgPSAzMjsKLQotCWlmICgoY2hhbm5lbC0+Y2VudGVyX2ZyZXEgJSByZWZjbGtfZnJlcSAhPSAwKSAmJgotCSgoY2hhbm5lbC0+Y2VudGVyX2ZyZXEgJSByZWZjbGtfZnJlcSA8IDEwKSB8fAotCShjaGFubmVsLT5jZW50ZXJfZnJlcSAlIHJlZmNsa19mcmVxID4gMjIpKSkKLQkJcmV0dXJuIHRydWU7Ci0JZWxzZQotCQlyZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQKK3N0YXRpYyB2b2lkCiBhdGg1a19od19zZXRfc3B1cl9taXRpZ2F0aW9uX2ZpbHRlcihzdHJ1Y3QgYXRoNWtfaHcgKmFoLAogCQkJCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCkKIHsKQEAgLTE0NzgsNyArMTYxOCw3IEBACiAJc3B1cl9jaGFuX2ZiaW4gPSBBUjVLX0VFUFJPTV9OT19TUFVSOwogCXNwdXJfZGV0ZWN0aW9uX3dpbmRvdyA9IEFSNUtfU1BVUl9DSEFOX1dJRFRIOwogCS8qIFhYWDogSGFsZi9RdWFydGVyIGNoYW5uZWxzID8qLwotCWlmIChjaGFubmVsLT5od192YWx1ZSAmIENIQU5ORUxfVFVSQk8pCisJaWYgKGFoLT5haF9id21vZGUgPT0gQVI1S19CV01PREVfNDBNSFopCiAJCXNwdXJfZGV0ZWN0aW9uX3dpbmRvdyAqPSAyOwogCiAJZm9yIChpID0gMDsgaSA8IEFSNUtfRUVQUk9NX05fU1BVUl9DSEFOUzsgaSsrKSB7CkBAIC0xNTA3LDMyICsxNjQ3LDQzIEBACiAJCSAqIENhbGN1bGF0ZSBkZWx0YXM6CiAJCSAqIHNwdXJfZnJlcV9zaWdtYV9kZWx0YSAtPiBzcHVyX29mZnNldCAvIHNhbXBsZV9mcmVxIDw8IDIxCiAJCSAqIHNwdXJfZGVsdGFfcGhhc2UgLT4gc3B1cl9vZmZzZXQgLyBjaGlwX2ZyZXEgPDwgMTEKLQkJICogTm90ZTogQm90aCB2YWx1ZXMgaGF2ZSAxMDBLSHogcmVzb2x1dGlvbgorCQkgKiBOb3RlOiBCb3RoIHZhbHVlcyBoYXZlIDEwMEh6IHJlc29sdXRpb24KIAkJICovCi0JCS8qIFhYWDogSGFsZi9RdWFydGVyIHJhdGUgY2hhbm5lbHMgPyAqLwotCQlzd2l0Y2ggKGNoYW5uZWwtPmh3X3ZhbHVlKSB7Ci0JCWNhc2UgQ0hBTk5FTF9BOgotCQkJLyogQm90aCBzYW1wbGVfZnJlcSBhbmQgY2hpcF9mcmVxIGFyZSA0ME1IeiAqLwotCQkJc3B1cl9kZWx0YV9waGFzZSA9IChzcHVyX29mZnNldCA8PCAxNykgLyAyNTsKLQkJCXNwdXJfZnJlcV9zaWdtYV9kZWx0YSA9IChzcHVyX2RlbHRhX3BoYXNlID4+IDEwKTsKLQkJCXN5bWJvbF93aWR0aCA9IEFSNUtfU1BVUl9TWU1CT0xfV0lEVEhfQkFTRV8xMDBIejsKLQkJCWJyZWFrOwotCQljYXNlIENIQU5ORUxfRzoKLQkJCS8qIHNhbXBsZV9mcmVxIC0+IDQwTUh6IGNoaXBfZnJlcSAtPiA0NE1IegotCQkJICogKGZvciBiIGNvbXBhdGliaWxpdHkpICovCi0JCQlzcHVyX2ZyZXFfc2lnbWFfZGVsdGEgPSAoc3B1cl9vZmZzZXQgPDwgOCkgLyA1NTsKLQkJCXNwdXJfZGVsdGFfcGhhc2UgPSAoc3B1cl9vZmZzZXQgPDwgMTcpIC8gMjU7Ci0JCQlzeW1ib2xfd2lkdGggPSBBUjVLX1NQVVJfU1lNQk9MX1dJRFRIX0JBU0VfMTAwSHo7Ci0JCQlicmVhazsKLQkJY2FzZSBDSEFOTkVMX1Q6Ci0JCWNhc2UgQ0hBTk5FTF9URzoKKwkJc3dpdGNoIChhaC0+YWhfYndtb2RlKSB7CisJCWNhc2UgQVI1S19CV01PREVfNDBNSFo6CiAJCQkvKiBCb3RoIHNhbXBsZV9mcmVxIGFuZCBjaGlwX2ZyZXEgYXJlIDgwTUh6ICovCiAJCQlzcHVyX2RlbHRhX3BoYXNlID0gKHNwdXJfb2Zmc2V0IDw8IDE2KSAvIDI1OwogCQkJc3B1cl9mcmVxX3NpZ21hX2RlbHRhID0gKHNwdXJfZGVsdGFfcGhhc2UgPj4gMTApOwotCQkJc3ltYm9sX3dpZHRoID0gQVI1S19TUFVSX1NZTUJPTF9XSURUSF9UVVJCT18xMDBIejsKKwkJCXN5bWJvbF93aWR0aCA9IEFSNUtfU1BVUl9TWU1CT0xfV0lEVEhfQkFTRV8xMDBIeiAqIDI7CiAJCQlicmVhazsKKwkJY2FzZSBBUjVLX0JXTU9ERV8xME1IWjoKKwkJCS8qIEJvdGggc2FtcGxlX2ZyZXEgYW5kIGNoaXBfZnJlcSBhcmUgMjBNSHogKD8pICovCisJCQlzcHVyX2RlbHRhX3BoYXNlID0gKHNwdXJfb2Zmc2V0IDw8IDE4KSAvIDI1OworCQkJc3B1cl9mcmVxX3NpZ21hX2RlbHRhID0gKHNwdXJfZGVsdGFfcGhhc2UgPj4gMTApOworCQkJc3ltYm9sX3dpZHRoID0gQVI1S19TUFVSX1NZTUJPTF9XSURUSF9CQVNFXzEwMEh6IC8gMjsKKwkJY2FzZSBBUjVLX0JXTU9ERV81TUhaOgorCQkJLyogQm90aCBzYW1wbGVfZnJlcSBhbmQgY2hpcF9mcmVxIGFyZSAxME1IeiAoPykgKi8KKwkJCXNwdXJfZGVsdGFfcGhhc2UgPSAoc3B1cl9vZmZzZXQgPDwgMTkpIC8gMjU7CisJCQlzcHVyX2ZyZXFfc2lnbWFfZGVsdGEgPSAoc3B1cl9kZWx0YV9waGFzZSA+PiAxMCk7CisJCQlzeW1ib2xfd2lkdGggPSBBUjVLX1NQVVJfU1lNQk9MX1dJRFRIX0JBU0VfMTAwSHogLyA0OwogCQlkZWZhdWx0OgotCQkJcmV0dXJuOworCQkJaWYgKGNoYW5uZWwtPmh3X3ZhbHVlID09IENIQU5ORUxfQSkgeworCQkJCS8qIEJvdGggc2FtcGxlX2ZyZXEgYW5kIGNoaXBfZnJlcSBhcmUgNDBNSHogKi8KKwkJCQlzcHVyX2RlbHRhX3BoYXNlID0gKHNwdXJfb2Zmc2V0IDw8IDE3KSAvIDI1OworCQkJCXNwdXJfZnJlcV9zaWdtYV9kZWx0YSA9CisJCQkJCQkoc3B1cl9kZWx0YV9waGFzZSA+PiAxMCk7CisJCQkJc3ltYm9sX3dpZHRoID0KKwkJCQkJQVI1S19TUFVSX1NZTUJPTF9XSURUSF9CQVNFXzEwMEh6OworCQkJfSBlbHNlIHsKKwkJCQkvKiBzYW1wbGVfZnJlcSAtPiA0ME1IeiBjaGlwX2ZyZXEgLT4gNDRNSHoKKwkJCQkgKiAoZm9yIGIgY29tcGF0aWJpbGl0eSkgKi8KKwkJCQlzcHVyX2RlbHRhX3BoYXNlID0gKHNwdXJfb2Zmc2V0IDw8IDE3KSAvIDI1OworCQkJCXNwdXJfZnJlcV9zaWdtYV9kZWx0YSA9CisJCQkJCQkoc3B1cl9vZmZzZXQgPDwgOCkgLyA1NTsKKwkJCQlzeW1ib2xfd2lkdGggPQorCQkJCQlBUjVLX1NQVVJfU1lNQk9MX1dJRFRIX0JBU0VfMTAwSHo7CisJCQl9CisJCQlicmVhazsKIAkJfQogCiAJCS8qIENhbGN1bGF0ZSBwaWxvdCBhbmQgbWFnbml0dWRlIG1hc2tzICovCkBAIC0xNjcyLDYzICsxODIzLDYgQEAKIAl9CiB9CiAKLS8qKioqKioqKioqKioqKioqKioqKlwKLSAgTWlzYyBQSFkgZnVuY3Rpb25zCi1cKioqKioqKioqKioqKioqKioqKiovCi0KLWludCBhdGg1a19od19waHlfZGlzYWJsZShzdHJ1Y3QgYXRoNWtfaHcgKmFoKQotewotCS8qSnVzdCBhIHRyeSBNLkYuKi8KLQlhdGg1a19od19yZWdfd3JpdGUoYWgsIEFSNUtfUEhZX0FDVF9ESVNBQkxFLCBBUjVLX1BIWV9BQ1QpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBHZXQgdGhlIFBIWSBDaGlwIHJldmlzaW9uCi0gKi8KLXUxNiBhdGg1a19od19yYWRpb19yZXZpc2lvbihzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1bnNpZ25lZCBpbnQgY2hhbikKLXsKLQl1bnNpZ25lZCBpbnQgaTsKLQl1MzIgc3JldjsKLQl1MTYgcmV0OwotCi0JLyoKLQkgKiBTZXQgdGhlIHJhZGlvIGNoaXAgYWNjZXNzIHJlZ2lzdGVyCi0JICovCi0Jc3dpdGNoIChjaGFuKSB7Ci0JY2FzZSBDSEFOTkVMXzJHSFo6Ci0JCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgQVI1S19QSFlfU0hJRlRfMkdIWiwgQVI1S19QSFkoMCkpOwotCQlicmVhazsKLQljYXNlIENIQU5ORUxfNUdIWjoKLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBBUjVLX1BIWV9TSElGVF81R0haLCBBUjVLX1BIWSgwKSk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAwOwotCX0KLQotCW1kZWxheSgyKTsKLQotCS8qIC4uLndhaXQgdW50aWwgUEhZIGlzIHJlYWR5IGFuZCByZWFkIHRoZSBzZWxlY3RlZCByYWRpbyByZXZpc2lvbiAqLwotCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgwMDAwMWMxNiwgQVI1S19QSFkoMHgzNCkpOwotCi0JZm9yIChpID0gMDsgaSA8IDg7IGkrKykKLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDAwMDEwMDAwLCBBUjVLX1BIWSgweDIwKSk7Ci0KLQlpZiAoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUyMTApIHsKLQkJc3JldiA9IGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX1BIWSgyNTYpID4+IDI4KSAmIDB4ZjsKLQkJcmV0ID0gKHUxNilhdGg1a19od19iaXRzd2FwKHNyZXYsIDQpICsgMTsKLQl9IGVsc2UgewotCQlzcmV2ID0gKGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX1BIWSgweDEwMCkpID4+IDI0KSAmIDB4ZmY7Ci0JCXJldCA9ICh1MTYpYXRoNWtfaHdfYml0c3dhcCgoKHNyZXYgJiAweGYwKSA+PiA0KSB8Ci0JCQkJKChzcmV2ICYgMHgwZikgPDwgNCksIDgpOwotCX0KLQotCS8qIFJlc2V0IHRvIHRoZSA1R0h6IG1vZGUgKi8KLQlhdGg1a19od19yZWdfd3JpdGUoYWgsIEFSNUtfUEhZX1NISUZUXzVHSFosIEFSNUtfUEhZKDApKTsKLQotCXJldHVybiByZXQ7Ci19CiAKIC8qKioqKioqKioqKioqKioqKlwKICogQW50ZW5uYSBjb250cm9sICoKQEAgLTE4MjIsNyArMTkxNiw4IEBACiAJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsID0gYWgtPmFoX2N1cnJlbnRfY2hhbm5lbDsKIAlib29sIHVzZV9kZWZfZm9yX3R4LCB1cGRhdGVfZGVmX29uX3R4LCB1c2VfZGVmX2Zvcl9ydHMsIGZhc3RfZGl2OwogCWJvb2wgdXNlX2RlZl9mb3Jfc2c7Ci0JdTggZGVmX2FudCwgdHhfYW50LCBlZV9tb2RlOworCWludCBlZV9tb2RlOworCXU4IGRlZl9hbnQsIHR4X2FudDsKIAl1MzIgc3RhX2lkMSA9IDA7CiAKIAkvKiBpZiBjaGFubmVsIGlzIG5vdCBpbml0aWFsaXplZCB5ZXQgd2UgY2FuJ3Qgc2V0IHRoZSBhbnRlbm5hcwpAQCAtMTgzNCwyMCArMTkyOSw4IEBACiAKIAlkZWZfYW50ID0gYWgtPmFoX2RlZl9hbnQ7CiAKLQlzd2l0Y2ggKGNoYW5uZWwtPmh3X3ZhbHVlICYgQ0hBTk5FTF9NT0RFUykgewotCWNhc2UgQ0hBTk5FTF9BOgotCWNhc2UgQ0hBTk5FTF9UOgotCWNhc2UgQ0hBTk5FTF9YUjoKLQkJZWVfbW9kZSA9IEFSNUtfRUVQUk9NX01PREVfMTFBOwotCQlicmVhazsKLQljYXNlIENIQU5ORUxfRzoKLQljYXNlIENIQU5ORUxfVEc6Ci0JCWVlX21vZGUgPSBBUjVLX0VFUFJPTV9NT0RFXzExRzsKLQkJYnJlYWs7Ci0JY2FzZSBDSEFOTkVMX0I6Ci0JCWVlX21vZGUgPSBBUjVLX0VFUFJPTV9NT0RFXzExQjsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKKwllZV9tb2RlID0gYXRoNWtfZWVwcm9tX21vZGVfZnJvbV9jaGFubmVsKGNoYW5uZWwpOworCWlmIChlZV9tb2RlIDwgMCkgewogCQlBVEg1S19FUlIoYWgtPmFoX3NjLAogCQkJImludmFsaWQgY2hhbm5lbDogJWRcbiIsIGNoYW5uZWwtPmNlbnRlcl9mcmVxKTsKIAkJcmV0dXJuOwpAQCAtMjI3NSwyMCArMjM1OCwyMCBAQAogCiAJc3dpdGNoIChjaGFubmVsLT5od192YWx1ZSAmIENIQU5ORUxfTU9ERVMpIHsKIAljYXNlIENIQU5ORUxfQToKLQkJY3RsX21vZGUgfD0gQVI1S19DVExfMTFBOworCQlpZiAoYWgtPmFoX2J3bW9kZSA9PSBBUjVLX0JXTU9ERV80ME1IWikKKwkJCWN0bF9tb2RlIHw9IEFSNUtfQ1RMX1RVUkJPOworCQllbHNlCisJCQljdGxfbW9kZSB8PSBBUjVLX0NUTF8xMUE7CiAJCWJyZWFrOwogCWNhc2UgQ0hBTk5FTF9HOgotCQljdGxfbW9kZSB8PSBBUjVLX0NUTF8xMUc7CisJCWlmIChhaC0+YWhfYndtb2RlID09IEFSNUtfQldNT0RFXzQwTUhaKQorCQkJY3RsX21vZGUgfD0gQVI1S19DVExfVFVSQk9HOworCQllbHNlCisJCQljdGxfbW9kZSB8PSBBUjVLX0NUTF8xMUc7CiAJCWJyZWFrOwogCWNhc2UgQ0hBTk5FTF9COgogCQljdGxfbW9kZSB8PSBBUjVLX0NUTF8xMUI7CiAJCWJyZWFrOwotCWNhc2UgQ0hBTk5FTF9UOgotCQljdGxfbW9kZSB8PSBBUjVLX0NUTF9UVVJCTzsKLQkJYnJlYWs7Ci0JY2FzZSBDSEFOTkVMX1RHOgotCQljdGxfbW9kZSB8PSBBUjVLX0NUTF9UVVJCT0c7Ci0JCWJyZWFrOwogCWNhc2UgQ0hBTk5FTF9YUjoKIAkJLyogRmFsbCB0aHJvdWdoICovCiAJZGVmYXVsdDoKQEAgLTI0ODIsNyArMjU2NSw3IEBACiAKIC8qIFdyaXRlIFBDREFDIHZhbHVlcyBvbiBodyAqLwogc3RhdGljIHZvaWQKLWF0aDVrX3NldHVwX3BjZGFjX3RhYmxlKHN0cnVjdCBhdGg1a19odyAqYWgpCithdGg1a193cml0ZV9wY2RhY190YWJsZShzdHJ1Y3QgYXRoNWtfaHcgKmFoKQogewogCXU4IAkqcGNkYWNfb3V0ID0gYWgtPmFoX3R4cG93ZXIudHhwX3BkX3RhYmxlOwogCWludAlpOwpAQCAtMjYzMSwxMCArMjcxNCwxMiBAQAogCiAvKiBXcml0ZSBQREFEQyB2YWx1ZXMgb24gaHcgKi8KIHN0YXRpYyB2b2lkCi1hdGg1a19zZXR1cF9wd3JfdG9fcGRhZGNfdGFibGUoc3RydWN0IGF0aDVrX2h3ICphaCwKLQkJCXU4IHBkY3VydmVzLCB1OCAqcGRnX3RvX2lkeCkKK2F0aDVrX3dyaXRlX3B3cl90b19wZGFkY190YWJsZShzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1OCBlZV9tb2RlKQogeworCXN0cnVjdCBhdGg1a19lZXByb21faW5mbyAqZWUgPSAmYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfZWVwcm9tOwogCXU4ICpwZGFkY19vdXQgPSBhaC0+YWhfdHhwb3dlci50eHBfcGRfdGFibGU7CisJdTggKnBkZ190b19pZHggPSBlZS0+ZWVfcGRjX3RvX2lkeFtlZV9tb2RlXTsKKwl1OCBwZGN1cnZlcyA9IGVlLT5lZV9wZF9nYWluc1tlZV9tb2RlXTsKIAl1MzIgcmVnOwogCXU4IGk7CiAKQEAgLTI4NDQsOCArMjkyOSw3IEBACiAJCQkJCShzMTYpIHBjaW5mb19SLT5mcmVxLAogCQkJCQlwY2luZm9fTC0+bWF4X3B3ciwgcGNpbmZvX1ItPm1heF9wd3IpOwogCi0JLyogV2UgYXJlIHJlYWR5IHRvIGdvLCBmaWxsIFBDREFDL1BEQURDCi0JICogdGFibGUgYW5kIHdyaXRlIHNldHRpbmdzIG9uIGhhcmR3YXJlICovCisJLyogRmlsbCBQQ0RBQy9QREFEQyB0YWJsZSAqLwogCXN3aXRjaCAodHlwZSkgewogCWNhc2UgQVI1S19QV1JUQUJMRV9MSU5FQVJfUENEQUM6CiAJCS8qIEZvciBSRjUxMTIgd2UgY2FuIGhhdmUgb25lIG9yIHR3byBjdXJ2ZXMKQEAgLTI4NTgsOSArMjk0Miw2IEBACiAJCSAqIG1hdGNoIG1heCBwb3dlciB2YWx1ZSB3aXRoIG1heAogCQkgKiB0YWJsZSBpbmRleCAqLwogCQlhaC0+YWhfdHhwb3dlci50eHBfb2Zmc2V0ID0gNjQgLSAodGFibGVfbWF4WzBdIC8gMik7Ci0KLQkJLyogV3JpdGUgc2V0dGluZ3Mgb24gaHcgKi8KLQkJYXRoNWtfc2V0dXBfcGNkYWNfdGFibGUoYWgpOwogCQlicmVhazsKIAljYXNlIEFSNUtfUFdSVEFCTEVfUFdSX1RPX1BDREFDOgogCQkvKiBXZSBhcmUgZG9uZSBmb3IgUkY1MTExIHNpbmNlIGl0IGhhcyBvbmx5CkBAIC0yODcwLDkgKzI5NTEsNiBAQAogCQkvKiBObyByYXRlIHBvd2VydGFibGUgYWRqdXN0bWVudCBmb3IgUkY1MTExICovCiAJCWFoLT5haF90eHBvd2VyLnR4cF9taW5faWR4ID0gMDsKIAkJYWgtPmFoX3R4cG93ZXIudHhwX29mZnNldCA9IDA7Ci0KLQkJLyogV3JpdGUgc2V0dGluZ3Mgb24gaHcgKi8KLQkJYXRoNWtfc2V0dXBfcGNkYWNfdGFibGUoYWgpOwogCQlicmVhazsKIAljYXNlIEFSNUtfUFdSVEFCTEVfUFdSX1RPX1BEQURDOgogCQkvKiBTZXQgUERBREMgYm91bmRhcmllcyBhbmQgZmlsbApAQCAtMjg4MCw5ICsyOTU4LDYgQEAKIAkJYXRoNWtfY29tYmluZV9wd3JfdG9fcGRhZGNfY3VydmVzKGFoLCB0YWJsZV9taW4sIHRhYmxlX21heCwKIAkJCQkJCWVlLT5lZV9wZF9nYWluc1tlZV9tb2RlXSk7CiAKLQkJLyogV3JpdGUgc2V0dGluZ3Mgb24gaHcgKi8KLQkJYXRoNWtfc2V0dXBfcHdyX3RvX3BkYWRjX3RhYmxlKGFoLCBwZGcsIHBkZ19jdXJ2ZV90b19pZHgpOwotCiAJCS8qIFNldCB0eHAub2Zmc2V0LCBub3RlIHRoYXQgdGFibGVfbWluCiAJCSAqIGNhbiBiZSBuZWdhdGl2ZSAqLwogCQlhaC0+YWhfdHhwb3dlci50eHBfb2Zmc2V0ID0gdGFibGVfbWluWzBdOwpAQCAtMjg5MSw5ICsyOTY2LDIwIEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCWFoLT5haF90eHBvd2VyLnR4cF9zZXR1cCA9IHRydWU7CisKIAlyZXR1cm4gMDsKIH0KIAorLyogV3JpdGUgcG93ZXIgdGFibGUgZm9yIGN1cnJlbnQgY2hhbm5lbCB0byBodyAqLworc3RhdGljIHZvaWQKK2F0aDVrX3dyaXRlX2NoYW5uZWxfcG93ZXJ0YWJsZShzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1OCBlZV9tb2RlLCB1OCB0eXBlKQoreworCWlmICh0eXBlID09IEFSNUtfUFdSVEFCTEVfUFdSX1RPX1BEQURDKQorCQlhdGg1a193cml0ZV9wd3JfdG9fcGRhZGNfdGFibGUoYWgsIGVlX21vZGUpOworCWVsc2UKKwkJYXRoNWtfd3JpdGVfcGNkYWNfdGFibGUoYWgpOworfQogCiAvKgogICogUGVyLXJhdGUgdHggcG93ZXIgc2V0dGluZwpAQCAtMjk4Miw3ICszMDY4LDcgQEAKIAogCS8qIE1pbi9tYXggaW4gMC4yNWRCIHVuaXRzICovCiAJYWgtPmFoX3R4cG93ZXIudHhwX21pbl9wd3IgPSAyICogcmF0ZXNbN107Ci0JYWgtPmFoX3R4cG93ZXIudHhwX21heF9wd3IgPSAyICogcmF0ZXNbMF07CisJYWgtPmFoX3R4cG93ZXIudHhwX2N1cl9wd3IgPSAyICogcmF0ZXNbMF07CiAJYWgtPmFoX3R4cG93ZXIudHhwX29mZG0gPSByYXRlc1s3XTsKIH0KIApAQCAtMjk5MCwxMSArMzA3NiwxMyBAQAogLyoKICAqIFNldCB0cmFuc21pc3Npb24gcG93ZXIKICAqLwotaW50CitzdGF0aWMgaW50CiBhdGg1a19od190eHBvd2VyKHN0cnVjdCBhdGg1a19odyAqYWgsIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCwKLQkJdTggZWVfbW9kZSwgdTggdHhwb3dlcikKKwkJIHU4IHR4cG93ZXIpCiB7CiAJc3RydWN0IGF0aDVrX3JhdGVfcGNhbF9pbmZvIHJhdGVfaW5mbzsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmN1cnJfY2hhbm5lbCA9IGFoLT5haF9jdXJyZW50X2NoYW5uZWw7CisJaW50IGVlX21vZGU7CiAJdTggdHlwZTsKIAlpbnQgcmV0OwogCkBAIC0zMDAzLDE0ICszMDkxLDE4IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCS8qIFJlc2V0IFRYIHBvd2VyIHZhbHVlcyAqLwotCW1lbXNldCgmYWgtPmFoX3R4cG93ZXIsIDAsIHNpemVvZihhaC0+YWhfdHhwb3dlcikpOwotCWFoLT5haF90eHBvd2VyLnR4cF90cGMgPSBBUjVLX1RVTkVfVFBDX1RYUE9XRVI7Ci0JYWgtPmFoX3R4cG93ZXIudHhwX21pbl9wd3IgPSAwOwotCWFoLT5haF90eHBvd2VyLnR4cF9tYXhfcHdyID0gQVI1S19UVU5FX01BWF9UWFBPV0VSOworCWVlX21vZGUgPSBhdGg1a19lZXByb21fbW9kZV9mcm9tX2NoYW5uZWwoY2hhbm5lbCk7CisJaWYgKGVlX21vZGUgPCAwKSB7CisJCUFUSDVLX0VSUihhaC0+YWhfc2MsCisJCQkiaW52YWxpZCBjaGFubmVsOiAlZFxuIiwgY2hhbm5lbC0+Y2VudGVyX2ZyZXEpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKIAkvKiBJbml0aWFsaXplIFRYIHBvd2VyIHRhYmxlICovCiAJc3dpdGNoIChhaC0+YWhfcmFkaW8pIHsKKwljYXNlIEFSNUtfUkY1MTEwOgorCQkvKiBUT0RPICovCisJCXJldHVybiAwOwogCWNhc2UgQVI1S19SRjUxMTE6CiAJCXR5cGUgPSBBUjVLX1BXUlRBQkxFX1BXUl9UT19QQ0RBQzsKIAkJYnJlYWs7CkBAIC0zMDI4LDEwICszMTIwLDI2IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCS8qIEZJWE1FOiBPbmx5IG9uIGNoYW5uZWwvbW9kZSBjaGFuZ2UgKi8KLQlyZXQgPSBhdGg1a19zZXR1cF9jaGFubmVsX3Bvd2VydGFibGUoYWgsIGNoYW5uZWwsIGVlX21vZGUsIHR5cGUpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CisJLyoKKwkgKiBJZiB3ZSBkb24ndCBjaGFuZ2UgY2hhbm5lbC9tb2RlIHNraXAgdHggcG93ZXJ0YWJsZSBjYWxjdWxhdGlvbgorCSAqIGFuZCB1c2UgdGhlIGNhY2hlZCBvbmUuCisJICovCisJaWYgKCFhaC0+YWhfdHhwb3dlci50eHBfc2V0dXAgfHwKKwkgICAgKGNoYW5uZWwtPmh3X3ZhbHVlICE9IGN1cnJfY2hhbm5lbC0+aHdfdmFsdWUpIHx8CisJICAgIChjaGFubmVsLT5jZW50ZXJfZnJlcSAhPSBjdXJyX2NoYW5uZWwtPmNlbnRlcl9mcmVxKSkgeworCQkvKiBSZXNldCBUWCBwb3dlciB2YWx1ZXMgKi8KKwkJbWVtc2V0KCZhaC0+YWhfdHhwb3dlciwgMCwgc2l6ZW9mKGFoLT5haF90eHBvd2VyKSk7CisJCWFoLT5haF90eHBvd2VyLnR4cF90cGMgPSBBUjVLX1RVTkVfVFBDX1RYUE9XRVI7CisKKwkJLyogQ2FsY3VsYXRlIHRoZSBwb3dlcnRhYmxlICovCisJCXJldCA9IGF0aDVrX3NldHVwX2NoYW5uZWxfcG93ZXJ0YWJsZShhaCwgY2hhbm5lbCwKKwkJCQkJCQllZV9tb2RlLCB0eXBlKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJLyogV3JpdGUgdGFibGUgb24gaHcgKi8KKwlhdGg1a193cml0ZV9jaGFubmVsX3Bvd2VydGFibGUoYWgsIGVlX21vZGUsIHR5cGUpOwogCiAJLyogTGltaXQgbWF4IHBvd2VyIGlmIHdlIGhhdmUgYSBDVEwgYXZhaWxhYmxlICovCiAJYXRoNWtfZ2V0X21heF9jdGxfcG93ZXIoYWgsIGNoYW5uZWwpOwpAQCAtMzA4NiwzMSArMzE5NCwyMTkgQEAKIAogaW50IGF0aDVrX2h3X3NldF90eHBvd2VyX2xpbWl0KHN0cnVjdCBhdGg1a19odyAqYWgsIHU4IHR4cG93ZXIpCiB7Ci0JLypKdXN0IGEgdHJ5IE0uRi4qLwotCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCA9IGFoLT5haF9jdXJyZW50X2NoYW5uZWw7Ci0JdTggZWVfbW9kZTsKLQotCXN3aXRjaCAoY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMX01PREVTKSB7Ci0JY2FzZSBDSEFOTkVMX0E6Ci0JY2FzZSBDSEFOTkVMX1Q6Ci0JY2FzZSBDSEFOTkVMX1hSOgotCQllZV9tb2RlID0gQVI1S19FRVBST01fTU9ERV8xMUE7Ci0JCWJyZWFrOwotCWNhc2UgQ0hBTk5FTF9HOgotCWNhc2UgQ0hBTk5FTF9URzoKLQkJZWVfbW9kZSA9IEFSNUtfRUVQUk9NX01PREVfMTFHOwotCQlicmVhazsKLQljYXNlIENIQU5ORUxfQjoKLQkJZWVfbW9kZSA9IEFSNUtfRUVQUk9NX01PREVfMTFCOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlBVEg1S19FUlIoYWgtPmFoX3NjLAotCQkJImludmFsaWQgY2hhbm5lbDogJWRcbiIsIGNoYW5uZWwtPmNlbnRlcl9mcmVxKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCiAJQVRINUtfREJHKGFoLT5haF9zYywgQVRINUtfREVCVUdfVFhQT1dFUiwKIAkJImNoYW5naW5nIHR4cG93ZXIgdG8gJWRcbiIsIHR4cG93ZXIpOwogCi0JcmV0dXJuIGF0aDVrX2h3X3R4cG93ZXIoYWgsIGNoYW5uZWwsIGVlX21vZGUsIHR4cG93ZXIpOworCXJldHVybiBhdGg1a19od190eHBvd2VyKGFoLCBhaC0+YWhfY3VycmVudF9jaGFubmVsLCB0eHBvd2VyKTsKK30KKworLyoqKioqKioqKioqKipcCisgSW5pdCBmdW5jdGlvbgorXCoqKioqKioqKioqKiovCisKK2ludCBhdGg1a19od19waHlfaW5pdChzdHJ1Y3QgYXRoNWtfaHcgKmFoLCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwsCisJCSAgICAgIHU4IG1vZGUsIGJvb2wgZmFzdCkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmN1cnJfY2hhbm5lbDsKKwlpbnQgcmV0LCBpOworCXUzMiBwaHlfdHN0MTsKKwlyZXQgPSAwOworCisJLyoKKwkgKiBTYW5pdHkgY2hlY2sgZm9yIGZhc3QgZmxhZworCSAqIERvbid0IHRyeSBmYXN0IGNoYW5uZWwgY2hhbmdlIHdoZW4gY2hhbmdpbmcgbW9kdWxhdGlvbgorCSAqIG1vZGUvYmFuZC4gV2UgY2hlY2sgZm9yIGNoaXAgY29tcGF0aWJpbGl0eSBvbgorCSAqIGF0aDVrX2h3X3Jlc2V0LgorCSAqLworCWN1cnJfY2hhbm5lbCA9IGFoLT5haF9jdXJyZW50X2NoYW5uZWw7CisJaWYgKGZhc3QgJiYgKGNoYW5uZWwtPmh3X3ZhbHVlICE9IGN1cnJfY2hhbm5lbC0+aHdfdmFsdWUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qCisJICogT24gZmFzdCBjaGFubmVsIGNoYW5nZSB3ZSBvbmx5IHNldCB0aGUgc3ludGggcGFyYW1ldGVycworCSAqIHdoaWxlIFBIWSBpcyBydW5uaW5nLCBlbmFibGUgY2FsaWJyYXRpb24gYW5kIHNraXAgdGhlIHJlc3QuCisJICovCisJaWYgKGZhc3QpIHsKKwkJQVI1S19SRUdfRU5BQkxFX0JJVFMoYWgsIEFSNUtfUEhZX1JGQlVTX1JFUSwKKwkJCQkgICAgQVI1S19QSFlfUkZCVVNfUkVRX1JFUVVFU1QpOworCQlmb3IgKGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKKwkJCWlmIChhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19QSFlfUkZCVVNfR1JBTlQpKQorCQkJCWJyZWFrOworCQkJdWRlbGF5KDUpOworCQl9CisJCS8qIEZhaWxlZCAqLworCQlpZiAoaSA+PSAxMDApCisJCQlyZXR1cm4gLUVJTzsKKwl9CisKKwkvKgorCSAqIFNldCBUWCBwb3dlcgorCSAqCisJICogTm90ZTogV2UgbmVlZCB0byBkbyB0aGF0IGJlZm9yZSB3ZSBzZXQKKwkgKiBSRiBidWZmZXIgc2V0dGluZ3Mgb24gNTIxMS81MjEyKyBzbyB0aGF0IHdlCisJICogcHJvcGVybHkgc2V0IGN1cnZlIGluZGljZXMuCisJICovCisJcmV0ID0gYXRoNWtfaHdfdHhwb3dlcihhaCwgY2hhbm5lbCwgYWgtPmFoX3R4cG93ZXIudHhwX2N1cl9wd3IgPworCQkJYWgtPmFoX3R4cG93ZXIudHhwX2N1cl9wd3IgLyAyIDogQVI1S19UVU5FX01BWF9UWFBPV0VSKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyoKKwkgKiBGb3IgNTIxMCB3ZSBkbyBhbGwgaW5pdGlhbGl6YXRpb24gdXNpbmcKKwkgKiBpbml0dmFscywgc28gd2UgZG9uJ3QgaGF2ZSB0byBtb2RpZnkKKwkgKiBhbnkgc2V0dGluZ3MgKDUyMTAgYWxzbyBvbmx5IHN1cHBvcnRzCisJICogYS9hdHVyYm8gbW9kZXMpCisJICovCisJaWYgKChhaC0+YWhfdmVyc2lvbiAhPSBBUjVLX0FSNTIxMCkgJiYgIWZhc3QpIHsKKworCQkvKgorCQkgKiBXcml0ZSBpbml0aWFsIFJGIGdhaW4gc2V0dGluZ3MKKwkJICogVGhpcyBzaG91bGQgd29yayBmb3IgYm90aCA1MTExLzUxMTIKKwkJICovCisJCXJldCA9IGF0aDVrX2h3X3JmZ2Fpbl9pbml0KGFoLCBjaGFubmVsLT5iYW5kKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJbWRlbGF5KDEpOworCisJCS8qCisJCSAqIFdyaXRlIFJGIGJ1ZmZlcgorCQkgKi8KKwkJcmV0ID0gYXRoNWtfaHdfcmZyZWdzX2luaXQoYWgsIGNoYW5uZWwsIG1vZGUpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQkvKiBXcml0ZSBPRkRNIHRpbWluZ3Mgb24gNTIxMiovCisJCWlmIChhaC0+YWhfdmVyc2lvbiA9PSBBUjVLX0FSNTIxMiAmJgorCQkJY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMX09GRE0pIHsKKworCQkJcmV0ID0gYXRoNWtfaHdfd3JpdGVfb2ZkbV90aW1pbmdzKGFoLCBjaGFubmVsKTsKKwkJCWlmIChyZXQpCisJCQkJcmV0dXJuIHJldDsKKworCQkJLyogU3B1ciBpbmZvIGlzIGF2YWlsYWJsZSBvbmx5IGZyb20gRUVQUk9NIHZlcnNpb25zCisJCQkgKiBncmVhdGVyIHRoYW4gNS4zLCBidXQgdGhlIEVFUFJPTSByb3V0aW5lcyB3aWxsIHVzZQorCQkJICogc3RhdGljIHZhbHVlcyBmb3Igb2xkZXIgdmVyc2lvbnMgKi8KKwkJCWlmIChhaC0+YWhfbWFjX3NyZXYgPj0gQVI1S19TUkVWX0FSNTQyNCkKKwkJCQlhdGg1a19od19zZXRfc3B1cl9taXRpZ2F0aW9uX2ZpbHRlcihhaCwKKwkJCQkJCQkJICAgIGNoYW5uZWwpOworCQl9CisKKwkJLypFbmFibGUvZGlzYWJsZSA4MDIuMTFiIG1vZGUgb24gNTExMQorCQkoZW5hYmxlIDIxMTEgZnJlcXVlbmN5IGNvbnZlcnRlciArIENDSykqLworCQlpZiAoYWgtPmFoX3JhZGlvID09IEFSNUtfUkY1MTExKSB7CisJCQlpZiAobW9kZSA9PSBBUjVLX01PREVfMTFCKQorCQkJCUFSNUtfUkVHX0VOQUJMRV9CSVRTKGFoLCBBUjVLX1RYQ0ZHLAorCQkJCSAgICBBUjVLX1RYQ0ZHX0JfTU9ERSk7CisJCQllbHNlCisJCQkJQVI1S19SRUdfRElTQUJMRV9CSVRTKGFoLCBBUjVLX1RYQ0ZHLAorCQkJCSAgICBBUjVLX1RYQ0ZHX0JfTU9ERSk7CisJCX0KKworCX0gZWxzZSBpZiAoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUyMTApIHsKKwkJbWRlbGF5KDEpOworCQkvKiBEaXNhYmxlIHBoeSBhbmQgd2FpdCAqLworCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIEFSNUtfUEhZX0FDVF9ESVNBQkxFLCBBUjVLX1BIWV9BQ1QpOworCQltZGVsYXkoMSk7CisJfQorCisJLyogU2V0IGNoYW5uZWwgb24gUEhZICovCisJcmV0ID0gYXRoNWtfaHdfY2hhbm5lbChhaCwgY2hhbm5lbCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qCisJICogRW5hYmxlIHRoZSBQSFkgYW5kIHdhaXQgdW50aWwgY29tcGxldGlvbgorCSAqIFRoaXMgaW5jbHVkZXMgQmFzZUJhbmQgYW5kIFN5bnRoZXNpemVyCisJICogYWN0aXZhdGlvbi4KKwkgKi8KKwlhdGg1a19od19yZWdfd3JpdGUoYWgsIEFSNUtfUEhZX0FDVF9FTkFCTEUsIEFSNUtfUEhZX0FDVCk7CisKKwkvKgorCSAqIE9uIDUyMTErIHJlYWQgYWN0aXZhdGlvbiAtPiByeCBkZWxheQorCSAqIGFuZCB1c2UgaXQuCisJICovCisJaWYgKGFoLT5haF92ZXJzaW9uICE9IEFSNUtfQVI1MjEwKSB7CisJCXUzMiBkZWxheTsKKwkJZGVsYXkgPSBhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19QSFlfUlhfREVMQVkpICYKKwkJCUFSNUtfUEhZX1JYX0RFTEFZX007CisJCWRlbGF5ID0gKGNoYW5uZWwtPmh3X3ZhbHVlICYgQ0hBTk5FTF9DQ0spID8KKwkJCSgoZGVsYXkgPDwgMikgLyAyMikgOiAoZGVsYXkgLyAxMCk7CisJCWlmIChhaC0+YWhfYndtb2RlID09IEFSNUtfQldNT0RFXzEwTUhaKQorCQkJZGVsYXkgPSBkZWxheSA8PCAxOworCQlpZiAoYWgtPmFoX2J3bW9kZSA9PSBBUjVLX0JXTU9ERV81TUhaKQorCQkJZGVsYXkgPSBkZWxheSA8PCAyOworCQkvKiBYWFg6IC8yIG9uIHR1cmJvID8gTGV0J3MgYmUgc2FmZQorCQkgKiBmb3Igbm93ICovCisJCXVkZWxheSgxMDAgKyBkZWxheSk7CisJfSBlbHNlIHsKKwkJbWRlbGF5KDEpOworCX0KKworCWlmIChmYXN0KQorCQkvKgorCQkgKiBSZWxlYXNlIFJGIEJ1cyBncmFudAorCQkgKi8KKwkJQVI1S19SRUdfRElTQUJMRV9CSVRTKGFoLCBBUjVLX1BIWV9SRkJVU19SRVEsCisJCQkJICAgIEFSNUtfUEhZX1JGQlVTX1JFUV9SRVFVRVNUKTsKKwllbHNlIHsKKwkJLyoKKwkJICogUGVyZm9ybSBBREMgdGVzdCB0byBzZWUgaWYgYmFzZWJhbmQgaXMgcmVhZHkKKwkJICogU2V0IHR4IGhvbGQgYW5kIGNoZWNrIGFkYyB0ZXN0IHJlZ2lzdGVyCisJCSAqLworCQlwaHlfdHN0MSA9IGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX1BIWV9UU1QxKTsKKwkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBBUjVLX1BIWV9UU1QxX1RYSE9MRCwgQVI1S19QSFlfVFNUMSk7CisJCWZvciAoaSA9IDA7IGkgPD0gMjA7IGkrKykgeworCQkJaWYgKCEoYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfUEhZX0FEQ19URVNUKSAmIDB4MTApKQorCQkJCWJyZWFrOworCQkJdWRlbGF5KDIwMCk7CisJCX0KKwkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBwaHlfdHN0MSwgQVI1S19QSFlfVFNUMSk7CisJfQorCisJLyoKKwkgKiBTdGFydCBhdXRvbWF0aWMgZ2FpbiBjb250cm9sIGNhbGlicmF0aW9uCisJICoKKwkgKiBEdXJpbmcgQUdDIGNhbGlicmF0aW9uIFJYIHBhdGggaXMgcmUtcm91dGVkIHRvCisJICogYSBwb3dlciBkZXRlY3RvciBzbyB3ZSBkb24ndCByZWNlaXZlIGFueXRoaW5nLgorCSAqCisJICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBjYWxpYnJhdGUgc29tZSBzdGF0aWMgb2Zmc2V0cworCSAqIHVzZWQgdG9nZXRoZXIgd2l0aCBvbi10aGUgZmx5IEkvUSBjYWxpYnJhdGlvbiAodGhlCisJICogb25lIHBlcmZvcm1lZCB2aWEgYXRoNWtfaHdfcGh5X2NhbGlicmF0ZSksIHdoaWNoIGRvZXNuJ3QKKwkgKiBpbnRlcnJ1cHQgcnggcGF0aC4KKwkgKgorCSAqIFdoaWxlIHJ4IHBhdGggaXMgcmUtcm91dGVkIHRvIHRoZSBwb3dlciBkZXRlY3RvciB3ZSBhbHNvCisJICogc3RhcnQgYSBub2lzZSBmbG9vciBjYWxpYnJhdGlvbiB0byBtZWFzdXJlIHRoZQorCSAqIGNhcmQncyBub2lzZSBmbG9vciAodGhlIG5vaXNlIHdlIG1lYXN1cmUgd2hlbiB3ZSBhcmUgbm90CisJICogdHJhbnNtaXR0aW5nIG9yIHJlY2VpdmluZyBhbnl0aGluZykuCisJICoKKwkgKiBJZiB3ZSBhcmUgaW4gYSBub2lzeSBlbnZpcm9ubWVudCwgQUdDIGNhbGlicmF0aW9uIG1heSB0aW1lCisJICogb3V0IGFuZC9vciBub2lzZSBmbG9vciBjYWxpYnJhdGlvbiBtaWdodCB0aW1lb3V0LgorCSAqLworCUFSNUtfUkVHX0VOQUJMRV9CSVRTKGFoLCBBUjVLX1BIWV9BR0NDVEwsCisJCQkJQVI1S19QSFlfQUdDQ1RMX0NBTCB8IEFSNUtfUEhZX0FHQ0NUTF9ORik7CisKKwkvKiBBdCB0aGUgc2FtZSB0aW1lIHN0YXJ0IEkvUSBjYWxpYnJhdGlvbiBmb3IgUUFNIGNvbnN0ZWxsYXRpb24KKwkgKiAtbm8gbmVlZCBmb3IgQ0NLLSAqLworCWFoLT5haF9jYWxpYnJhdGlvbiA9IGZhbHNlOworCWlmICghKG1vZGUgPT0gQVI1S19NT0RFXzExQikpIHsKKwkJYWgtPmFoX2NhbGlicmF0aW9uID0gdHJ1ZTsKKwkJQVI1S19SRUdfV1JJVEVfQklUUyhhaCwgQVI1S19QSFlfSVEsCisJCQkJQVI1S19QSFlfSVFfQ0FMX05VTV9MT0dfTUFYLCAxNSk7CisJCUFSNUtfUkVHX0VOQUJMRV9CSVRTKGFoLCBBUjVLX1BIWV9JUSwKKwkJCQlBUjVLX1BIWV9JUV9SVU4pOworCX0KKworCS8qIFdhaXQgZm9yIGdhaW4gY2FsaWJyYXRpb24gdG8gZmluaXNoICh3ZSBjaGVjayBmb3IgSS9RIGNhbGlicmF0aW9uCisJICogZHVyaW5nIGF0aDVrX3BoeV9jYWxpYnJhdGUpICovCisJaWYgKGF0aDVrX2h3X3JlZ2lzdGVyX3RpbWVvdXQoYWgsIEFSNUtfUEhZX0FHQ0NUTCwKKwkJCUFSNUtfUEhZX0FHQ0NUTF9DQUwsIDAsIGZhbHNlKSkgeworCQlBVEg1S19FUlIoYWgtPmFoX3NjLCAiZ2FpbiBjYWxpYnJhdGlvbiB0aW1lb3V0ICgldU1IeilcbiIsCisJCQljaGFubmVsLT5jZW50ZXJfZnJlcSk7CisJfQorCisJLyogUmVzdG9yZSBhbnRlbm5hIG1vZGUgKi8KKwlhdGg1a19od19zZXRfYW50ZW5uYV9tb2RlKGFoLCBhaC0+YWhfYW50X21vZGUpOworCisJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9xY3UuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9xY3UuYwppbmRleCA4NGM3MTdkLi4yYzljOWU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcWN1LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3FjdS5jCkBAIC0yNSwxNCArMjUsNTIgQEAKICNpbmNsdWRlICJkZWJ1Zy5oIgogI2luY2x1ZGUgImJhc2UuaCIKIAorCisvKioqKioqKioqKioqKioqKioqXAorKiBIZWxwZXIgZnVuY3Rpb25zICoKK1wqKioqKioqKioqKioqKioqKiovCisKIC8qCi0gKiBHZXQgcHJvcGVydGllcyBmb3IgYSB0cmFuc21pdCBxdWV1ZQorICogR2V0IG51bWJlciBvZiBwZW5kaW5nIGZyYW1lcworICogZm9yIGEgc3BlY2lmaWMgcXVldWUgWzUyMTErXQogICovCi1pbnQgYXRoNWtfaHdfZ2V0X3R4X3F1ZXVlcHJvcHMoc3RydWN0IGF0aDVrX2h3ICphaCwgaW50IHF1ZXVlLAotCQlzdHJ1Y3QgYXRoNWtfdHhxX2luZm8gKnF1ZXVlX2luZm8pCit1MzIgYXRoNWtfaHdfbnVtX3R4X3BlbmRpbmcoc3RydWN0IGF0aDVrX2h3ICphaCwgdW5zaWduZWQgaW50IHF1ZXVlKQogewotCW1lbWNweShxdWV1ZV9pbmZvLCAmYWgtPmFoX3R4cVtxdWV1ZV0sIHNpemVvZihzdHJ1Y3QgYXRoNWtfdHhxX2luZm8pKTsKLQlyZXR1cm4gMDsKKwl1MzIgcGVuZGluZzsKKwlBUjVLX0FTU0VSVF9FTlRSWShxdWV1ZSwgYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfcXVldWVzLnFfdHhfbnVtKTsKKworCS8qIFJldHVybiBpZiBxdWV1ZSBpcyBkZWNsYXJlZCBpbmFjdGl2ZSAqLworCWlmIChhaC0+YWhfdHhxW3F1ZXVlXS50cWlfdHlwZSA9PSBBUjVLX1RYX1FVRVVFX0lOQUNUSVZFKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBYWFg6IEhvdyBhYm91dCBBUjVLX0NGR19UWENOVCA/ICovCisJaWYgKGFoLT5haF92ZXJzaW9uID09IEFSNUtfQVI1MjEwKQorCQlyZXR1cm4gZmFsc2U7CisKKwlwZW5kaW5nID0gYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfUVVFVUVfU1RBVFVTKHF1ZXVlKSk7CisJcGVuZGluZyAmPSBBUjVLX1FDVV9TVFNfRlJNUEVORENOVDsKKworCS8qIEl0J3MgcG9zc2libGUgdG8gaGF2ZSBubyBmcmFtZXMgcGVuZGluZyBldmVuIGlmIFRYRQorCSAqIGlzIHNldC4gVG8gaW5kaWNhdGUgdGhhdCBxIGhhcyBub3Qgc3RvcHBlZCByZXR1cm4KKwkgKiB0cnVlICovCisJaWYgKCFwZW5kaW5nICYmIEFSNUtfUkVHX1JFQURfUShhaCwgQVI1S19RQ1VfVFhFLCBxdWV1ZSkpCisJCXJldHVybiB0cnVlOworCisJcmV0dXJuIHBlbmRpbmc7Cit9CisKKy8qCisgKiBTZXQgYSB0cmFuc21pdCBxdWV1ZSBpbmFjdGl2ZQorICovCit2b2lkIGF0aDVrX2h3X3JlbGVhc2VfdHhfcXVldWUoc3RydWN0IGF0aDVrX2h3ICphaCwgdW5zaWduZWQgaW50IHF1ZXVlKQoreworCWlmIChXQVJOX09OKHF1ZXVlID49IGFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX3F1ZXVlcy5xX3R4X251bSkpCisJCXJldHVybjsKKworCS8qIFRoaXMgcXVldWUgd2lsbCBiZSBza2lwcGVkIGluIGZ1cnRoZXIgb3BlcmF0aW9ucyAqLworCWFoLT5haF90eHFbcXVldWVdLnRxaV90eXBlID0gQVI1S19UWF9RVUVVRV9JTkFDVElWRTsKKwkvKkZvciBTSU1SIHNldHVwKi8KKwlBUjVLX1FfRElTQUJMRV9CSVRTKGFoLT5haF90eHFfc3RhdHVzLCBxdWV1ZSk7CiB9CiAKIC8qCkBAIC01MCw2ICs4OCwxNiBAQAogfQogCiAvKgorICogR2V0IHByb3BlcnRpZXMgZm9yIGEgdHJhbnNtaXQgcXVldWUKKyAqLworaW50IGF0aDVrX2h3X2dldF90eF9xdWV1ZXByb3BzKHN0cnVjdCBhdGg1a19odyAqYWgsIGludCBxdWV1ZSwKKwkJc3RydWN0IGF0aDVrX3R4cV9pbmZvICpxdWV1ZV9pbmZvKQoreworCW1lbWNweShxdWV1ZV9pbmZvLCAmYWgtPmFoX3R4cVtxdWV1ZV0sIHNpemVvZihzdHJ1Y3QgYXRoNWtfdHhxX2luZm8pKTsKKwlyZXR1cm4gMDsKK30KKworLyoKICAqIFNldCBwcm9wZXJ0aWVzIGZvciBhIHRyYW5zbWl0IHF1ZXVlCiAgKi8KIGludCBhdGg1a19od19zZXRfdHhfcXVldWVwcm9wcyhzdHJ1Y3QgYXRoNWtfaHcgKmFoLCBpbnQgcXVldWUsCkBAIC0xMDQsOCArMTUyLDggQEAKIAkvKgogCSAqIEdldCBxdWV1ZSBieSB0eXBlCiAJICovCi0JLyo1MjEwIG9ubHkgaGFzIDIgcXVldWVzKi8KLQlpZiAoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUyMTApIHsKKwkvKiA1MjEwIG9ubHkgaGFzIDIgcXVldWVzICovCisJaWYgKGFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX3F1ZXVlcy5xX3R4X251bSA9PSAyKSB7CiAJCXN3aXRjaCAocXVldWVfdHlwZSkgewogCQljYXNlIEFSNUtfVFhfUVVFVUVfREFUQToKIAkJCXF1ZXVlID0gQVI1S19UWF9RVUVVRV9JRF9OT1FDVV9EQVRBOwpAQCAtMTcyLDExMyArMjIwLDE4IEBACiAJcmV0dXJuIHF1ZXVlOwogfQogCi0vKgotICogR2V0IG51bWJlciBvZiBwZW5kaW5nIGZyYW1lcwotICogZm9yIGEgc3BlY2lmaWMgcXVldWUgWzUyMTErXQotICovCi11MzIgYXRoNWtfaHdfbnVtX3R4X3BlbmRpbmcoc3RydWN0IGF0aDVrX2h3ICphaCwgdW5zaWduZWQgaW50IHF1ZXVlKQotewotCXUzMiBwZW5kaW5nOwotCUFSNUtfQVNTRVJUX0VOVFJZKHF1ZXVlLCBhaC0+YWhfY2FwYWJpbGl0aWVzLmNhcF9xdWV1ZXMucV90eF9udW0pOwogCi0JLyogUmV0dXJuIGlmIHF1ZXVlIGlzIGRlY2xhcmVkIGluYWN0aXZlICovCi0JaWYgKGFoLT5haF90eHFbcXVldWVdLnRxaV90eXBlID09IEFSNUtfVFhfUVVFVUVfSU5BQ1RJVkUpCi0JCXJldHVybiBmYWxzZTsKLQotCS8qIFhYWDogSG93IGFib3V0IEFSNUtfQ0ZHX1RYQ05UID8gKi8KLQlpZiAoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUyMTApCi0JCXJldHVybiBmYWxzZTsKLQotCXBlbmRpbmcgPSBhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19RVUVVRV9TVEFUVVMocXVldWUpKTsKLQlwZW5kaW5nICY9IEFSNUtfUUNVX1NUU19GUk1QRU5EQ05UOwotCi0JLyogSXQncyBwb3NzaWJsZSB0byBoYXZlIG5vIGZyYW1lcyBwZW5kaW5nIGV2ZW4gaWYgVFhFCi0JICogaXMgc2V0LiBUbyBpbmRpY2F0ZSB0aGF0IHEgaGFzIG5vdCBzdG9wcGVkIHJldHVybgotCSAqIHRydWUgKi8KLQlpZiAoIXBlbmRpbmcgJiYgQVI1S19SRUdfUkVBRF9RKGFoLCBBUjVLX1FDVV9UWEUsIHF1ZXVlKSkKLQkJcmV0dXJuIHRydWU7Ci0KLQlyZXR1cm4gcGVuZGluZzsKLX0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXAorKiBTaW5nbGUgUUNVL0RDVSBpbml0aWFsaXphdGlvbiAqCitcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIFNldCBhIHRyYW5zbWl0IHF1ZXVlIGluYWN0aXZlCisgKiBTZXQgdHggcmV0cnkgbGltaXRzIG9uIERDVQogICovCi12b2lkIGF0aDVrX2h3X3JlbGVhc2VfdHhfcXVldWUoc3RydWN0IGF0aDVrX2h3ICphaCwgdW5zaWduZWQgaW50IHF1ZXVlKQotewotCWlmIChXQVJOX09OKHF1ZXVlID49IGFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX3F1ZXVlcy5xX3R4X251bSkpCi0JCXJldHVybjsKLQotCS8qIFRoaXMgcXVldWUgd2lsbCBiZSBza2lwcGVkIGluIGZ1cnRoZXIgb3BlcmF0aW9ucyAqLwotCWFoLT5haF90eHFbcXVldWVdLnRxaV90eXBlID0gQVI1S19UWF9RVUVVRV9JTkFDVElWRTsKLQkvKkZvciBTSU1SIHNldHVwKi8KLQlBUjVLX1FfRElTQUJMRV9CSVRTKGFoLT5haF90eHFfc3RhdHVzLCBxdWV1ZSk7Ci19Ci0KLS8qCi0gKiBTZXQgREZTIHByb3BlcnRpZXMgZm9yIGEgdHJhbnNtaXQgcXVldWUgb24gRENVCi0gKi8KLWludCBhdGg1a19od19yZXNldF90eF9xdWV1ZShzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1bnNpZ25lZCBpbnQgcXVldWUpCitzdGF0aWMgdm9pZCBhdGg1a19od19zZXRfdHhfcmV0cnlfbGltaXRzKHN0cnVjdCBhdGg1a19odyAqYWgsCisJCQkJCXVuc2lnbmVkIGludCBxdWV1ZSkKIHsKIAl1MzIgcmV0cnlfbGcsIHJldHJ5X3NoOwotCXN0cnVjdCBhdGg1a190eHFfaW5mbyAqdHEgPSAmYWgtPmFoX3R4cVtxdWV1ZV07Ci0KLQlBUjVLX0FTU0VSVF9FTlRSWShxdWV1ZSwgYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfcXVldWVzLnFfdHhfbnVtKTsKLQotCXRxID0gJmFoLT5haF90eHFbcXVldWVdOwotCi0JaWYgKHRxLT50cWlfdHlwZSA9PSBBUjVLX1RYX1FVRVVFX0lOQUNUSVZFKQotCQlyZXR1cm4gMDsKLQotCWlmIChhaC0+YWhfdmVyc2lvbiA9PSBBUjVLX0FSNTIxMCkgewotCQkvKiBPbmx5IGhhbmRsZSBkYXRhIHF1ZXVlcywgb3RoZXJzIHdpbGwgYmUgaWdub3JlZCAqLwotCQlpZiAodHEtPnRxaV90eXBlICE9IEFSNUtfVFhfUVVFVUVfREFUQSkKLQkJCXJldHVybiAwOwotCi0JCS8qIFNldCBTbG90IHRpbWUgKi8KLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBhaC0+YWhfdHVyYm8gPwotCQkJQVI1S19JTklUX1NMT1RfVElNRV9UVVJCTyA6IEFSNUtfSU5JVF9TTE9UX1RJTUUsCi0JCQlBUjVLX1NMT1RfVElNRSk7Ci0JCS8qIFNldCBBQ0tfQ1RTIHRpbWVvdXQgKi8KLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBhaC0+YWhfdHVyYm8gPwotCQkJQVI1S19JTklUX0FDS19DVFNfVElNRU9VVF9UVVJCTyA6Ci0JCQlBUjVLX0lOSVRfQUNLX0NUU19USU1FT1VULCBBUjVLX1NMT1RfVElNRSk7Ci0JCS8qIFNldCBUcmFuc21pdCBMYXRlbmN5ICovCi0JCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgYWgtPmFoX3R1cmJvID8KLQkJCUFSNUtfSU5JVF9UUkFOU01JVF9MQVRFTkNZX1RVUkJPIDoKLQkJCUFSNUtfSU5JVF9UUkFOU01JVF9MQVRFTkNZLCBBUjVLX1VTRUNfNTIxMCk7Ci0KLQkJLyogU2V0IElGUzAgKi8KLQkJaWYgKGFoLT5haF90dXJibykgewotCQkJIGF0aDVrX2h3X3JlZ193cml0ZShhaCwgKChBUjVLX0lOSVRfU0lGU19UVVJCTyArCi0JCQkJdHEtPnRxaV9haWZzICogQVI1S19JTklUX1NMT1RfVElNRV9UVVJCTykgPDwKLQkJCQlBUjVLX0lGUzBfRElGU19TKSB8IEFSNUtfSU5JVF9TSUZTX1RVUkJPLAotCQkJCUFSNUtfSUZTMCk7Ci0JCX0gZWxzZSB7Ci0JCQlhdGg1a19od19yZWdfd3JpdGUoYWgsICgoQVI1S19JTklUX1NJRlMgKwotCQkJCXRxLT50cWlfYWlmcyAqIEFSNUtfSU5JVF9TTE9UX1RJTUUpIDw8Ci0JCQkJQVI1S19JRlMwX0RJRlNfUykgfAotCQkJCUFSNUtfSU5JVF9TSUZTLCBBUjVLX0lGUzApOwotCQl9Ci0KLQkJLyogU2V0IElGUzEgKi8KLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBhaC0+YWhfdHVyYm8gPwotCQkJQVI1S19JTklUX1BST1RPX1RJTUVfQ05UUkxfVFVSQk8gOgotCQkJQVI1S19JTklUX1BST1RPX1RJTUVfQ05UUkwsIEFSNUtfSUZTMSk7Ci0JCS8qIFNldCBBUjVLX1BIWV9TRVRUTElORyAqLwotCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIGFoLT5haF90dXJibyA/Ci0JCQkoYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfUEhZX1NFVFRMSU5HKSAmIH4weDdGKQotCQkJfCAweDM4IDoKLQkJCShhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19QSFlfU0VUVExJTkcpICYgfjB4N0YpCi0JCQl8IDB4MUMsCi0JCQlBUjVLX1BIWV9TRVRUTElORyk7Ci0JCS8qIFNldCBGcmFtZSBDb250cm9sIFJlZ2lzdGVyICovCi0JCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgYWgtPmFoX3R1cmJvID8KLQkJCShBUjVLX1BIWV9GUkFNRV9DVExfSU5JIHwgQVI1S19QSFlfVFVSQk9fTU9ERSB8Ci0JCQlBUjVLX1BIWV9UVVJCT19TSE9SVCB8IDB4MjAyMCkgOgotCQkJKEFSNUtfUEhZX0ZSQU1FX0NUTF9JTkkgfCAweDEwMjApLAotCQkJQVI1S19QSFlfRlJBTUVfQ1RMXzUyMTApOwotCX0KIAogCS8qCiAJICogQ2FsY3VsYXRlIGFuZCBzZXQgcmV0cnkgbGltaXRzCkBAIC0yOTMsOCArMjQ2LDEzIEBACiAJCXJldHJ5X3NoID0gQVI1S19JTklUX1NIX1JFVFJZOwogCX0KIAotCS8qTm8gUUNVL0RDVSBbNTIxMF0qLworCS8qIFNpbmdsZSBkYXRhIHF1ZXVlIG9uIEFSNTIxMCAqLwogCWlmIChhaC0+YWhfdmVyc2lvbiA9PSBBUjVLX0FSNTIxMCkgeworCQlzdHJ1Y3QgYXRoNWtfdHhxX2luZm8gKnRxID0gJmFoLT5haF90eHFbcXVldWVdOworCisJCWlmIChxdWV1ZSA+IDApCisJCQlyZXR1cm47CisKIAkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLAogCQkJKHRxLT50cWlfY3dfbWluIDw8IEFSNUtfTk9EQ1VfUkVUUllfTE1UX0NXX01JTl9TKQogCQkJfCBBUjVLX1JFR19TTShBUjVLX0lOSVRfU0xHX1JFVFJZLApAQCAtMzA0LDggKzI2Miw4IEBACiAJCQl8IEFSNUtfUkVHX1NNKHJldHJ5X2xnLCBBUjVLX05PRENVX1JFVFJZX0xNVF9MR19SRVRSWSkKIAkJCXwgQVI1S19SRUdfU00ocmV0cnlfc2gsIEFSNUtfTk9EQ1VfUkVUUllfTE1UX1NIX1JFVFJZKSwKIAkJCUFSNUtfTk9EQ1VfUkVUUllfTE1UKTsKKwkvKiBEQ1Ugb24gQVI1MjExKyAqLwogCX0gZWxzZSB7Ci0JCS8qUUNVL0RDVSBbNTIxMStdKi8KIAkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLAogCQkJQVI1S19SRUdfU00oQVI1S19JTklUX1NMR19SRVRSWSwKIAkJCQlBUjVLX0RDVV9SRVRSWV9MTVRfU0xHX1JFVFJZKSB8CkBAIC0zMTQsMjE5ICsyNzIsMzkzIEBACiAJCQlBUjVLX1JFR19TTShyZXRyeV9sZywgQVI1S19EQ1VfUkVUUllfTE1UX0xHX1JFVFJZKSB8CiAJCQlBUjVLX1JFR19TTShyZXRyeV9zaCwgQVI1S19EQ1VfUkVUUllfTE1UX1NIX1JFVFJZKSwKIAkJCUFSNUtfUVVFVUVfREZTX1JFVFJZX0xJTUlUKHF1ZXVlKSk7CisJfQorCXJldHVybjsKK30KIAotCS8qPT09UmVzdCBpcyBhbHNvIGZvciBRQ1UvRENVIG9ubHkgWzUyMTErXT09PSovCisvKioKKyAqIGF0aDVrX2h3X3Jlc2V0X3R4X3F1ZXVlIC0gSW5pdGlhbGl6ZSBhIHNpbmdsZSBodyBxdWV1ZQorICoKKyAqIEBhaCBUaGUgJnN0cnVjdCBhdGg1a19odworICogQHF1ZXVlIFRoZSBodyBxdWV1ZSBudW1iZXIKKyAqCisgKiBTZXQgREZTIHByb3BlcnRpZXMgZm9yIHRoZSBnaXZlbiB0cmFuc21pdCBxdWV1ZSBvbiBEQ1UKKyAqIGFuZCBjb25maWd1cmVzIGFsbCBxdWV1ZS1zcGVjaWZpYyBwYXJhbWV0ZXJzLgorICovCitpbnQgYXRoNWtfaHdfcmVzZXRfdHhfcXVldWUoc3RydWN0IGF0aDVrX2h3ICphaCwgdW5zaWduZWQgaW50IHF1ZXVlKQoreworCXN0cnVjdCBhdGg1a190eHFfaW5mbyAqdHEgPSAmYWgtPmFoX3R4cVtxdWV1ZV07CiAKLQkJLyoKLQkJICogU2V0IGNvbnRlbnRpb24gd2luZG93IChjd19taW4vY3dfbWF4KQotCQkgKiBhbmQgYXJiaXRyYXRlZCBpbnRlcmZyYW1lIHNwYWNlIChhaWZzKS4uLgotCQkgKi8KLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLAotCQkJQVI1S19SRUdfU00odHEtPnRxaV9jd19taW4sIEFSNUtfRENVX0xDTF9JRlNfQ1dfTUlOKSB8Ci0JCQlBUjVLX1JFR19TTSh0cS0+dHFpX2N3X21heCwgQVI1S19EQ1VfTENMX0lGU19DV19NQVgpIHwKLQkJCUFSNUtfUkVHX1NNKHRxLT50cWlfYWlmcywgQVI1S19EQ1VfTENMX0lGU19BSUZTKSwKLQkJCUFSNUtfUVVFVUVfREZTX0xPQ0FMX0lGUyhxdWV1ZSkpOworCUFSNUtfQVNTRVJUX0VOVFJZKHF1ZXVlLCBhaC0+YWhfY2FwYWJpbGl0aWVzLmNhcF9xdWV1ZXMucV90eF9udW0pOwogCi0JCS8qCi0JCSAqIFNldCBtaXNjIHJlZ2lzdGVycwotCQkgKi8KLQkJLyogRW5hYmxlIERDVSBlYXJseSB0ZXJtaW5hdGlvbiBmb3IgdGhpcyBxdWV1ZSAqLwotCQlBUjVLX1JFR19FTkFCTEVfQklUUyhhaCwgQVI1S19RVUVVRV9NSVNDKHF1ZXVlKSwKLQkJCQkJQVI1S19RQ1VfTUlTQ19EQ1VfRUFSTFkpOworCXRxID0gJmFoLT5haF90eHFbcXVldWVdOwogCi0JCS8qIEVuYWJsZSBEQ1UgdG8gd2FpdCBmb3IgbmV4dCBmcmFnbWVudCBmcm9tIFFDVSAqLworCS8qIFNraXAgaWYgcXVldWUgaW5hY3RpdmUgb3IgaWYgd2UgYXJlIG9uIEFSNTIxMAorCSAqIHRoYXQgZG9lc24ndCBoYXZlIFFDVS9EQ1UgKi8KKwlpZiAoKGFoLT5haF92ZXJzaW9uID09IEFSNUtfQVI1MjEwKSB8fAorCSh0cS0+dHFpX3R5cGUgPT0gQVI1S19UWF9RVUVVRV9JTkFDVElWRSkpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBTZXQgY29udGVudGlvbiB3aW5kb3cgKGN3X21pbi9jd19tYXgpCisJICogYW5kIGFyYml0cmF0ZWQgaW50ZXJmcmFtZSBzcGFjZSAoYWlmcykuLi4KKwkgKi8KKwlhdGg1a19od19yZWdfd3JpdGUoYWgsCisJCUFSNUtfUkVHX1NNKHRxLT50cWlfY3dfbWluLCBBUjVLX0RDVV9MQ0xfSUZTX0NXX01JTikgfAorCQlBUjVLX1JFR19TTSh0cS0+dHFpX2N3X21heCwgQVI1S19EQ1VfTENMX0lGU19DV19NQVgpIHwKKwkJQVI1S19SRUdfU00odHEtPnRxaV9haWZzLCBBUjVLX0RDVV9MQ0xfSUZTX0FJRlMpLAorCQlBUjVLX1FVRVVFX0RGU19MT0NBTF9JRlMocXVldWUpKTsKKworCS8qCisJICogU2V0IHR4IHJldHJ5IGxpbWl0cyBmb3IgdGhpcyBxdWV1ZQorCSAqLworCWF0aDVrX2h3X3NldF90eF9yZXRyeV9saW1pdHMoYWgsIHF1ZXVlKTsKKworCisJLyoKKwkgKiBTZXQgbWlzYyByZWdpc3RlcnMKKwkgKi8KKworCS8qIEVuYWJsZSBEQ1UgdG8gd2FpdCBmb3IgbmV4dCBmcmFnbWVudCBmcm9tIFFDVSAqLworCUFSNUtfUkVHX0VOQUJMRV9CSVRTKGFoLCBBUjVLX1FVRVVFX0RGU19NSVNDKHF1ZXVlKSwKKwkJCQlBUjVLX0RDVV9NSVNDX0ZSQUdfV0FJVCk7CisKKwkvKiBPbiBNYXVpIGFuZCBTcGlyaXQgdXNlIHRoZSBnbG9iYWwgc2VxbnVtIG9uIERDVSAqLworCWlmIChhaC0+YWhfbWFjX3ZlcnNpb24gPCBBUjVLX1NSRVZfQVI1MjExKQogCQlBUjVLX1JFR19FTkFCTEVfQklUUyhhaCwgQVI1S19RVUVVRV9ERlNfTUlTQyhxdWV1ZSksCi0JCQkJCUFSNUtfRENVX01JU0NfRlJBR19XQUlUKTsKKwkJCQkJQVI1S19EQ1VfTUlTQ19TRVFOVU1fQ1RMKTsKIAotCQkvKiBPbiBNYXVpIGFuZCBTcGlyaXQgdXNlIHRoZSBnbG9iYWwgc2VxbnVtIG9uIERDVSAqLwotCQlpZiAoYWgtPmFoX21hY192ZXJzaW9uIDwgQVI1S19TUkVWX0FSNTIxMSkKLQkJCUFSNUtfUkVHX0VOQUJMRV9CSVRTKGFoLCBBUjVLX1FVRVVFX0RGU19NSVNDKHF1ZXVlKSwKLQkJCQkJCUFSNUtfRENVX01JU0NfU0VRTlVNX0NUTCk7CisJLyogQ29uc3RhbnQgYml0IHJhdGUgcGVyaW9kICovCisJaWYgKHRxLT50cWlfY2JyX3BlcmlvZCkgeworCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIEFSNUtfUkVHX1NNKHRxLT50cWlfY2JyX3BlcmlvZCwKKwkJCQkJQVI1S19RQ1VfQ0JSQ0ZHX0lOVFZBTCkgfAorCQkJCQlBUjVLX1JFR19TTSh0cS0+dHFpX2Nicl9vdmVyZmxvd19saW1pdCwKKwkJCQkJQVI1S19RQ1VfQ0JSQ0ZHX09STl9USFJFUyksCisJCQkJCUFSNUtfUVVFVUVfQ0JSQ0ZHKHF1ZXVlKSk7CiAKLQkJaWYgKHRxLT50cWlfY2JyX3BlcmlvZCkgewotCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBBUjVLX1JFR19TTSh0cS0+dHFpX2Nicl9wZXJpb2QsCi0JCQkJQVI1S19RQ1VfQ0JSQ0ZHX0lOVFZBTCkgfAotCQkJCUFSNUtfUkVHX1NNKHRxLT50cWlfY2JyX292ZXJmbG93X2xpbWl0LAotCQkJCUFSNUtfUUNVX0NCUkNGR19PUk5fVEhSRVMpLAotCQkJCUFSNUtfUVVFVUVfQ0JSQ0ZHKHF1ZXVlKSk7CisJCUFSNUtfUkVHX0VOQUJMRV9CSVRTKGFoLCBBUjVLX1FVRVVFX01JU0MocXVldWUpLAorCQkJCQlBUjVLX1FDVV9NSVNDX0ZSU0hFRF9DQlIpOworCisJCWlmICh0cS0+dHFpX2Nicl9vdmVyZmxvd19saW1pdCkKIAkJCUFSNUtfUkVHX0VOQUJMRV9CSVRTKGFoLCBBUjVLX1FVRVVFX01JU0MocXVldWUpLAotCQkJCUFSNUtfUUNVX01JU0NfRlJTSEVEX0NCUik7Ci0JCQlpZiAodHEtPnRxaV9jYnJfb3ZlcmZsb3dfbGltaXQpCi0JCQkJQVI1S19SRUdfRU5BQkxFX0JJVFMoYWgsCi0JCQkJCUFSNUtfUVVFVUVfTUlTQyhxdWV1ZSksCiAJCQkJCUFSNUtfUUNVX01JU0NfQ0JSX1RIUkVTX0VOQUJMRSk7Ci0JCX0KKwl9CiAKLQkJaWYgKHRxLT50cWlfcmVhZHlfdGltZSAmJgotCQkodHEtPnRxaV90eXBlICE9IEFSNUtfVFhfUVVFVUVfQ0FCKSkKLQkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgQVI1S19SRUdfU00odHEtPnRxaV9yZWFkeV90aW1lLAotCQkJCUFSNUtfUUNVX1JEWVRJTUVDRkdfSU5UVkFMKSB8Ci0JCQkJQVI1S19RQ1VfUkRZVElNRUNGR19FTkFCTEUsCi0JCQkJQVI1S19RVUVVRV9SRFlUSU1FQ0ZHKHF1ZXVlKSk7CisJLyogUmVhZHkgdGltZSBpbnRlcnZhbCAqLworCWlmICh0cS0+dHFpX3JlYWR5X3RpbWUgJiYgKHRxLT50cWlfdHlwZSAhPSBBUjVLX1RYX1FVRVVFX0NBQikpCisJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgQVI1S19SRUdfU00odHEtPnRxaV9yZWFkeV90aW1lLAorCQkJCQlBUjVLX1FDVV9SRFlUSU1FQ0ZHX0lOVFZBTCkgfAorCQkJCQlBUjVLX1FDVV9SRFlUSU1FQ0ZHX0VOQUJMRSwKKwkJCQkJQVI1S19RVUVVRV9SRFlUSU1FQ0ZHKHF1ZXVlKSk7CiAKLQkJaWYgKHRxLT50cWlfYnVyc3RfdGltZSkgewotCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBBUjVLX1JFR19TTSh0cS0+dHFpX2J1cnN0X3RpbWUsCi0JCQkJQVI1S19EQ1VfQ0hBTl9USU1FX0RVUikgfAotCQkJCUFSNUtfRENVX0NIQU5fVElNRV9FTkFCTEUsCi0JCQkJQVI1S19RVUVVRV9ERlNfQ0hBTk5FTF9USU1FKHF1ZXVlKSk7CisJaWYgKHRxLT50cWlfYnVyc3RfdGltZSkgeworCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIEFSNUtfUkVHX1NNKHRxLT50cWlfYnVyc3RfdGltZSwKKwkJCQkJQVI1S19EQ1VfQ0hBTl9USU1FX0RVUikgfAorCQkJCQlBUjVLX0RDVV9DSEFOX1RJTUVfRU5BQkxFLAorCQkJCQlBUjVLX1FVRVVFX0RGU19DSEFOTkVMX1RJTUUocXVldWUpKTsKIAotCQkJaWYgKHRxLT50cWlfZmxhZ3MKLQkJCSYgQVI1S19UWFFfRkxBR19SRFlUSU1FX0VYUF9QT0xJQ1lfRU5BQkxFKQotCQkJCUFSNUtfUkVHX0VOQUJMRV9CSVRTKGFoLAotCQkJCQlBUjVLX1FVRVVFX01JU0MocXVldWUpLAotCQkJCQlBUjVLX1FDVV9NSVNDX1JEWV9WRU9MX1BPTElDWSk7Ci0JCX0KLQotCQlpZiAodHEtPnRxaV9mbGFncyAmIEFSNUtfVFhRX0ZMQUdfQkFDS09GRl9ESVNBQkxFKQotCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBBUjVLX0RDVV9NSVNDX1BPU1RfRlJfQktPRkZfRElTLAotCQkJCUFSNUtfUVVFVUVfREZTX01JU0MocXVldWUpKTsKLQotCQlpZiAodHEtPnRxaV9mbGFncyAmIEFSNUtfVFhRX0ZMQUdfRlJBR19CVVJTVF9CQUNLT0ZGX0VOQUJMRSkKLQkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgQVI1S19EQ1VfTUlTQ19CQUNLT0ZGX0ZSQUcsCi0JCQkJQVI1S19RVUVVRV9ERlNfTUlTQyhxdWV1ZSkpOwotCi0JCS8qCi0JCSAqIFNldCByZWdpc3RlcnMgYnkgcXVldWUgdHlwZQotCQkgKi8KLQkJc3dpdGNoICh0cS0+dHFpX3R5cGUpIHsKLQkJY2FzZSBBUjVLX1RYX1FVRVVFX0JFQUNPTjoKKwkJaWYgKHRxLT50cWlfZmxhZ3MgJiBBUjVLX1RYUV9GTEFHX1JEWVRJTUVfRVhQX1BPTElDWV9FTkFCTEUpCiAJCQlBUjVLX1JFR19FTkFCTEVfQklUUyhhaCwgQVI1S19RVUVVRV9NSVNDKHF1ZXVlKSwKKwkJCQkJQVI1S19RQ1VfTUlTQ19SRFlfVkVPTF9QT0xJQ1kpOworCX0KKworCS8qIEVuYWJsZS9kaXNhYmxlIFBvc3QgZnJhbWUgYmFja29mZiAqLworCWlmICh0cS0+dHFpX2ZsYWdzICYgQVI1S19UWFFfRkxBR19CQUNLT0ZGX0RJU0FCTEUpCisJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgQVI1S19EQ1VfTUlTQ19QT1NUX0ZSX0JLT0ZGX0RJUywKKwkJCQkJQVI1S19RVUVVRV9ERlNfTUlTQyhxdWV1ZSkpOworCisJLyogRW5hYmxlL2Rpc2FibGUgZnJhZ21lbnRhdGlvbiBidXJzdCBiYWNrb2ZmICovCisJaWYgKHRxLT50cWlfZmxhZ3MgJiBBUjVLX1RYUV9GTEFHX0ZSQUdfQlVSU1RfQkFDS09GRl9FTkFCTEUpCisJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgQVI1S19EQ1VfTUlTQ19CQUNLT0ZGX0ZSQUcsCisJCQkJCUFSNUtfUVVFVUVfREZTX01JU0MocXVldWUpKTsKKworCS8qCisJICogU2V0IHJlZ2lzdGVycyBieSBxdWV1ZSB0eXBlCisJICovCisJc3dpdGNoICh0cS0+dHFpX3R5cGUpIHsKKwljYXNlIEFSNUtfVFhfUVVFVUVfQkVBQ09OOgorCQlBUjVLX1JFR19FTkFCTEVfQklUUyhhaCwgQVI1S19RVUVVRV9NSVNDKHF1ZXVlKSwKIAkJCQlBUjVLX1FDVV9NSVNDX0ZSU0hFRF9EQkFfR1QgfAogCQkJCUFSNUtfUUNVX01JU0NfQ0JSRVhQX0JDTl9ESVMgfAogCQkJCUFSNUtfUUNVX01JU0NfQkNOX0VOQUJMRSk7CiAKLQkJCUFSNUtfUkVHX0VOQUJMRV9CSVRTKGFoLCBBUjVLX1FVRVVFX0RGU19NSVNDKHF1ZXVlKSwKKwkJQVI1S19SRUdfRU5BQkxFX0JJVFMoYWgsIEFSNUtfUVVFVUVfREZTX01JU0MocXVldWUpLAogCQkJCShBUjVLX0RDVV9NSVNDX0FSQkxPQ0tfQ1RMX0dMT0JBTCA8PAogCQkJCUFSNUtfRENVX01JU0NfQVJCTE9DS19DVExfUykgfAogCQkJCUFSNUtfRENVX01JU0NfQVJCTE9DS19JR05PUkUgfAogCQkJCUFSNUtfRENVX01JU0NfUE9TVF9GUl9CS09GRl9ESVMgfAogCQkJCUFSNUtfRENVX01JU0NfQkNOX0VOQUJMRSk7Ci0JCQlicmVhazsKKwkJYnJlYWs7CiAKLQkJY2FzZSBBUjVLX1RYX1FVRVVFX0NBQjoKLQkJCS8qIFhYWDogdXNlIEJDTl9TRU5UX0dULCBpZiB3ZSBjYW4gZmlndXJlIG91dCBob3cgKi8KLQkJCUFSNUtfUkVHX0VOQUJMRV9CSVRTKGFoLCBBUjVLX1FVRVVFX01JU0MocXVldWUpLAotCQkJCUFSNUtfUUNVX01JU0NfRlJTSEVEX0RCQV9HVCB8Ci0JCQkJQVI1S19RQ1VfTUlTQ19DQlJFWFBfRElTIHwKLQkJCQlBUjVLX1FDVV9NSVNDX0NCUkVYUF9CQ05fRElTKTsKKwljYXNlIEFSNUtfVFhfUVVFVUVfQ0FCOgorCQkvKiBYWFg6IHVzZSBCQ05fU0VOVF9HVCwgaWYgd2UgY2FuIGZpZ3VyZSBvdXQgaG93ICovCisJCUFSNUtfUkVHX0VOQUJMRV9CSVRTKGFoLCBBUjVLX1FVRVVFX01JU0MocXVldWUpLAorCQkJCQlBUjVLX1FDVV9NSVNDX0ZSU0hFRF9EQkFfR1QgfAorCQkJCQlBUjVLX1FDVV9NSVNDX0NCUkVYUF9ESVMgfAorCQkJCQlBUjVLX1FDVV9NSVNDX0NCUkVYUF9CQ05fRElTKTsKIAotCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAoKHRxLT50cWlfcmVhZHlfdGltZSAtCi0JCQkJKEFSNUtfVFVORV9TV19CRUFDT05fUkVTUCAtCi0JCQkJQVI1S19UVU5FX0RNQV9CRUFDT05fUkVTUCkgLQorCQlhdGg1a19od19yZWdfd3JpdGUoYWgsICgodHEtPnRxaV9yZWFkeV90aW1lIC0KKwkJCQkJKEFSNUtfVFVORV9TV19CRUFDT05fUkVTUCAtCisJCQkJCUFSNUtfVFVORV9ETUFfQkVBQ09OX1JFU1ApIC0KIAkJCQlBUjVLX1RVTkVfQURESVRJT05BTF9TV0JBX0JBQ0tPRkYpICogMTAyNCkgfAotCQkJCUFSNUtfUUNVX1JEWVRJTUVDRkdfRU5BQkxFLAotCQkJCUFSNUtfUVVFVUVfUkRZVElNRUNGRyhxdWV1ZSkpOworCQkJCQlBUjVLX1FDVV9SRFlUSU1FQ0ZHX0VOQUJMRSwKKwkJCQkJQVI1S19RVUVVRV9SRFlUSU1FQ0ZHKHF1ZXVlKSk7CiAKLQkJCUFSNUtfUkVHX0VOQUJMRV9CSVRTKGFoLCBBUjVLX1FVRVVFX0RGU19NSVNDKHF1ZXVlKSwKLQkJCQkoQVI1S19EQ1VfTUlTQ19BUkJMT0NLX0NUTF9HTE9CQUwgPDwKLQkJCQlBUjVLX0RDVV9NSVNDX0FSQkxPQ0tfQ1RMX1MpKTsKKwkJQVI1S19SRUdfRU5BQkxFX0JJVFMoYWgsIEFSNUtfUVVFVUVfREZTX01JU0MocXVldWUpLAorCQkJCQkoQVI1S19EQ1VfTUlTQ19BUkJMT0NLX0NUTF9HTE9CQUwgPDwKKwkJCQkJQVI1S19EQ1VfTUlTQ19BUkJMT0NLX0NUTF9TKSk7CisJCWJyZWFrOworCisJY2FzZSBBUjVLX1RYX1FVRVVFX1VBUFNEOgorCQlBUjVLX1JFR19FTkFCTEVfQklUUyhhaCwgQVI1S19RVUVVRV9NSVNDKHF1ZXVlKSwKKwkJCQkJQVI1S19RQ1VfTUlTQ19DQlJFWFBfRElTKTsKKwkJYnJlYWs7CisKKwljYXNlIEFSNUtfVFhfUVVFVUVfREFUQToKKwlkZWZhdWx0OgogCQkJYnJlYWs7Ci0KLQkJY2FzZSBBUjVLX1RYX1FVRVVFX1VBUFNEOgotCQkJQVI1S19SRUdfRU5BQkxFX0JJVFMoYWgsIEFSNUtfUVVFVUVfTUlTQyhxdWV1ZSksCi0JCQkJQVI1S19RQ1VfTUlTQ19DQlJFWFBfRElTKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgQVI1S19UWF9RVUVVRV9EQVRBOgotCQlkZWZhdWx0OgotCQkJYnJlYWs7Ci0JCX0KLQotCQkvKiBUT0RPOiBIYW5kbGUgZnJhbWUgY29tcHJlc3Npb24gKi8KLQotCQkvKgotCQkgKiBFbmFibGUgaW50ZXJydXB0cyBmb3IgdGhpcyB0eCBxdWV1ZQotCQkgKiBpbiB0aGUgc2Vjb25kYXJ5IGludGVycnVwdCBtYXNrIHJlZ2lzdGVycwotCQkgKi8KLQkJaWYgKHRxLT50cWlfZmxhZ3MgJiBBUjVLX1RYUV9GTEFHX1RYT0tJTlRfRU5BQkxFKQotCQkJQVI1S19RX0VOQUJMRV9CSVRTKGFoLT5haF90eHFfaW1yX3R4b2ssIHF1ZXVlKTsKLQotCQlpZiAodHEtPnRxaV9mbGFncyAmIEFSNUtfVFhRX0ZMQUdfVFhFUlJJTlRfRU5BQkxFKQotCQkJQVI1S19RX0VOQUJMRV9CSVRTKGFoLT5haF90eHFfaW1yX3R4ZXJyLCBxdWV1ZSk7Ci0KLQkJaWYgKHRxLT50cWlfZmxhZ3MgJiBBUjVLX1RYUV9GTEFHX1RYVVJOSU5UX0VOQUJMRSkKLQkJCUFSNUtfUV9FTkFCTEVfQklUUyhhaC0+YWhfdHhxX2ltcl90eHVybiwgcXVldWUpOwotCi0JCWlmICh0cS0+dHFpX2ZsYWdzICYgQVI1S19UWFFfRkxBR19UWERFU0NJTlRfRU5BQkxFKQotCQkJQVI1S19RX0VOQUJMRV9CSVRTKGFoLT5haF90eHFfaW1yX3R4ZGVzYywgcXVldWUpOwotCi0JCWlmICh0cS0+dHFpX2ZsYWdzICYgQVI1S19UWFFfRkxBR19UWEVPTElOVF9FTkFCTEUpCi0JCQlBUjVLX1FfRU5BQkxFX0JJVFMoYWgtPmFoX3R4cV9pbXJfdHhlb2wsIHF1ZXVlKTsKLQotCQlpZiAodHEtPnRxaV9mbGFncyAmIEFSNUtfVFhRX0ZMQUdfQ0JST1JOSU5UX0VOQUJMRSkKLQkJCUFSNUtfUV9FTkFCTEVfQklUUyhhaC0+YWhfdHhxX2ltcl9jYnJvcm4sIHF1ZXVlKTsKLQotCQlpZiAodHEtPnRxaV9mbGFncyAmIEFSNUtfVFhRX0ZMQUdfQ0JSVVJOSU5UX0VOQUJMRSkKLQkJCUFSNUtfUV9FTkFCTEVfQklUUyhhaC0+YWhfdHhxX2ltcl9jYnJ1cm4sIHF1ZXVlKTsKLQotCQlpZiAodHEtPnRxaV9mbGFncyAmIEFSNUtfVFhRX0ZMQUdfUVRSSUdJTlRfRU5BQkxFKQotCQkJQVI1S19RX0VOQUJMRV9CSVRTKGFoLT5haF90eHFfaW1yX3F0cmlnLCBxdWV1ZSk7Ci0KLQkJaWYgKHRxLT50cWlfZmxhZ3MgJiBBUjVLX1RYUV9GTEFHX1RYTk9GUk1JTlRfRU5BQkxFKQotCQkJQVI1S19RX0VOQUJMRV9CSVRTKGFoLT5haF90eHFfaW1yX25vZnJtLCBxdWV1ZSk7Ci0KLQkJLyogVXBkYXRlIHNlY29uZGFyeSBpbnRlcnJ1cHQgbWFzayByZWdpc3RlcnMgKi8KLQotCQkvKiBGaWx0ZXIgb3V0IGluYWN0aXZlIHF1ZXVlcyAqLwotCQlhaC0+YWhfdHhxX2ltcl90eG9rICY9IGFoLT5haF90eHFfc3RhdHVzOwotCQlhaC0+YWhfdHhxX2ltcl90eGVyciAmPSBhaC0+YWhfdHhxX3N0YXR1czsKLQkJYWgtPmFoX3R4cV9pbXJfdHh1cm4gJj0gYWgtPmFoX3R4cV9zdGF0dXM7Ci0JCWFoLT5haF90eHFfaW1yX3R4ZGVzYyAmPSBhaC0+YWhfdHhxX3N0YXR1czsKLQkJYWgtPmFoX3R4cV9pbXJfdHhlb2wgJj0gYWgtPmFoX3R4cV9zdGF0dXM7Ci0JCWFoLT5haF90eHFfaW1yX2Nicm9ybiAmPSBhaC0+YWhfdHhxX3N0YXR1czsKLQkJYWgtPmFoX3R4cV9pbXJfY2JydXJuICY9IGFoLT5haF90eHFfc3RhdHVzOwotCQlhaC0+YWhfdHhxX2ltcl9xdHJpZyAmPSBhaC0+YWhfdHhxX3N0YXR1czsKLQkJYWgtPmFoX3R4cV9pbXJfbm9mcm0gJj0gYWgtPmFoX3R4cV9zdGF0dXM7Ci0KLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBBUjVLX1JFR19TTShhaC0+YWhfdHhxX2ltcl90eG9rLAotCQkJQVI1S19TSU1SMF9RQ1VfVFhPSykgfAotCQkJQVI1S19SRUdfU00oYWgtPmFoX3R4cV9pbXJfdHhkZXNjLAotCQkJQVI1S19TSU1SMF9RQ1VfVFhERVNDKSwgQVI1S19TSU1SMCk7Ci0JCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgQVI1S19SRUdfU00oYWgtPmFoX3R4cV9pbXJfdHhlcnIsCi0JCQlBUjVLX1NJTVIxX1FDVV9UWEVSUikgfAotCQkJQVI1S19SRUdfU00oYWgtPmFoX3R4cV9pbXJfdHhlb2wsCi0JCQlBUjVLX1NJTVIxX1FDVV9UWEVPTCksIEFSNUtfU0lNUjEpOwotCQkvKiBVcGRhdGUgc2ltcjIgYnV0IGRvbid0IG92ZXJ3cml0ZSByZXN0IHNpbXIyIHNldHRpbmdzICovCi0JCUFSNUtfUkVHX0RJU0FCTEVfQklUUyhhaCwgQVI1S19TSU1SMiwgQVI1S19TSU1SMl9RQ1VfVFhVUk4pOwotCQlBUjVLX1JFR19FTkFCTEVfQklUUyhhaCwgQVI1S19TSU1SMiwKLQkJCUFSNUtfUkVHX1NNKGFoLT5haF90eHFfaW1yX3R4dXJuLAotCQkJQVI1S19TSU1SMl9RQ1VfVFhVUk4pKTsKLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBBUjVLX1JFR19TTShhaC0+YWhfdHhxX2ltcl9jYnJvcm4sCi0JCQlBUjVLX1NJTVIzX1FDQlJPUk4pIHwKLQkJCUFSNUtfUkVHX1NNKGFoLT5haF90eHFfaW1yX2NicnVybiwKLQkJCUFSNUtfU0lNUjNfUUNCUlVSTiksIEFSNUtfU0lNUjMpOwotCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIEFSNUtfUkVHX1NNKGFoLT5haF90eHFfaW1yX3F0cmlnLAotCQkJQVI1S19TSU1SNF9RVFJJRyksIEFSNUtfU0lNUjQpOwotCQkvKiBTZXQgVFhOT0ZSTV9RQ1UgZm9yIHRoZSBxdWV1ZXMgd2l0aCBUWE5PRlJNIGVuYWJsZWQgKi8KLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBBUjVLX1JFR19TTShhaC0+YWhfdHhxX2ltcl9ub2ZybSwKLQkJCUFSNUtfVFhOT0ZSTV9RQ1UpLCBBUjVLX1RYTk9GUk0pOwotCQkvKiBObyBxdWV1ZSBoYXMgVFhOT0ZSTSBlbmFibGVkLCBkaXNhYmxlIHRoZSBpbnRlcnJ1cHQKLQkJICogYnkgc2V0dGluZyBBUjVLX1RYTk9GUk0gdG8gemVybyAqLwotCQlpZiAoYWgtPmFoX3R4cV9pbXJfbm9mcm0gPT0gMCkKLQkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMCwgQVI1S19UWE5PRlJNKTsKLQotCQkvKiBTZXQgUUNVIG1hc2sgZm9yIHRoaXMgRENVIHRvIHNhdmUgcG93ZXIgKi8KLQkJQVI1S19SRUdfV1JJVEVfUShhaCwgQVI1S19RVUVVRV9RQ1VNQVNLKHF1ZXVlKSwgcXVldWUpOwogCX0KIAorCS8qIFRPRE86IEhhbmRsZSBmcmFtZSBjb21wcmVzc2lvbiAqLworCisJLyoKKwkgKiBFbmFibGUgaW50ZXJydXB0cyBmb3IgdGhpcyB0eCBxdWV1ZQorCSAqIGluIHRoZSBzZWNvbmRhcnkgaW50ZXJydXB0IG1hc2sgcmVnaXN0ZXJzCisJICovCisJaWYgKHRxLT50cWlfZmxhZ3MgJiBBUjVLX1RYUV9GTEFHX1RYT0tJTlRfRU5BQkxFKQorCQlBUjVLX1FfRU5BQkxFX0JJVFMoYWgtPmFoX3R4cV9pbXJfdHhvaywgcXVldWUpOworCisJaWYgKHRxLT50cWlfZmxhZ3MgJiBBUjVLX1RYUV9GTEFHX1RYRVJSSU5UX0VOQUJMRSkKKwkJQVI1S19RX0VOQUJMRV9CSVRTKGFoLT5haF90eHFfaW1yX3R4ZXJyLCBxdWV1ZSk7CisKKwlpZiAodHEtPnRxaV9mbGFncyAmIEFSNUtfVFhRX0ZMQUdfVFhVUk5JTlRfRU5BQkxFKQorCQlBUjVLX1FfRU5BQkxFX0JJVFMoYWgtPmFoX3R4cV9pbXJfdHh1cm4sIHF1ZXVlKTsKKworCWlmICh0cS0+dHFpX2ZsYWdzICYgQVI1S19UWFFfRkxBR19UWERFU0NJTlRfRU5BQkxFKQorCQlBUjVLX1FfRU5BQkxFX0JJVFMoYWgtPmFoX3R4cV9pbXJfdHhkZXNjLCBxdWV1ZSk7CisKKwlpZiAodHEtPnRxaV9mbGFncyAmIEFSNUtfVFhRX0ZMQUdfVFhFT0xJTlRfRU5BQkxFKQorCQlBUjVLX1FfRU5BQkxFX0JJVFMoYWgtPmFoX3R4cV9pbXJfdHhlb2wsIHF1ZXVlKTsKKworCWlmICh0cS0+dHFpX2ZsYWdzICYgQVI1S19UWFFfRkxBR19DQlJPUk5JTlRfRU5BQkxFKQorCQlBUjVLX1FfRU5BQkxFX0JJVFMoYWgtPmFoX3R4cV9pbXJfY2Jyb3JuLCBxdWV1ZSk7CisKKwlpZiAodHEtPnRxaV9mbGFncyAmIEFSNUtfVFhRX0ZMQUdfQ0JSVVJOSU5UX0VOQUJMRSkKKwkJQVI1S19RX0VOQUJMRV9CSVRTKGFoLT5haF90eHFfaW1yX2NicnVybiwgcXVldWUpOworCisJaWYgKHRxLT50cWlfZmxhZ3MgJiBBUjVLX1RYUV9GTEFHX1FUUklHSU5UX0VOQUJMRSkKKwkJQVI1S19RX0VOQUJMRV9CSVRTKGFoLT5haF90eHFfaW1yX3F0cmlnLCBxdWV1ZSk7CisKKwlpZiAodHEtPnRxaV9mbGFncyAmIEFSNUtfVFhRX0ZMQUdfVFhOT0ZSTUlOVF9FTkFCTEUpCisJCUFSNUtfUV9FTkFCTEVfQklUUyhhaC0+YWhfdHhxX2ltcl9ub2ZybSwgcXVldWUpOworCisJLyogVXBkYXRlIHNlY29uZGFyeSBpbnRlcnJ1cHQgbWFzayByZWdpc3RlcnMgKi8KKworCS8qIEZpbHRlciBvdXQgaW5hY3RpdmUgcXVldWVzICovCisJYWgtPmFoX3R4cV9pbXJfdHhvayAmPSBhaC0+YWhfdHhxX3N0YXR1czsKKwlhaC0+YWhfdHhxX2ltcl90eGVyciAmPSBhaC0+YWhfdHhxX3N0YXR1czsKKwlhaC0+YWhfdHhxX2ltcl90eHVybiAmPSBhaC0+YWhfdHhxX3N0YXR1czsKKwlhaC0+YWhfdHhxX2ltcl90eGRlc2MgJj0gYWgtPmFoX3R4cV9zdGF0dXM7CisJYWgtPmFoX3R4cV9pbXJfdHhlb2wgJj0gYWgtPmFoX3R4cV9zdGF0dXM7CisJYWgtPmFoX3R4cV9pbXJfY2Jyb3JuICY9IGFoLT5haF90eHFfc3RhdHVzOworCWFoLT5haF90eHFfaW1yX2NicnVybiAmPSBhaC0+YWhfdHhxX3N0YXR1czsKKwlhaC0+YWhfdHhxX2ltcl9xdHJpZyAmPSBhaC0+YWhfdHhxX3N0YXR1czsKKwlhaC0+YWhfdHhxX2ltcl9ub2ZybSAmPSBhaC0+YWhfdHhxX3N0YXR1czsKKworCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgQVI1S19SRUdfU00oYWgtPmFoX3R4cV9pbXJfdHhvaywKKwkJCQkJQVI1S19TSU1SMF9RQ1VfVFhPSykgfAorCQkJCQlBUjVLX1JFR19TTShhaC0+YWhfdHhxX2ltcl90eGRlc2MsCisJCQkJCUFSNUtfU0lNUjBfUUNVX1RYREVTQyksCisJCQkJCUFSNUtfU0lNUjApOworCisJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBBUjVLX1JFR19TTShhaC0+YWhfdHhxX2ltcl90eGVyciwKKwkJCQkJQVI1S19TSU1SMV9RQ1VfVFhFUlIpIHwKKwkJCQkJQVI1S19SRUdfU00oYWgtPmFoX3R4cV9pbXJfdHhlb2wsCisJCQkJCUFSNUtfU0lNUjFfUUNVX1RYRU9MKSwKKwkJCQkJQVI1S19TSU1SMSk7CisKKwkvKiBVcGRhdGUgU0lNUjIgYnV0IGRvbid0IG92ZXJ3cml0ZSByZXN0IHNpbXIyIHNldHRpbmdzICovCisJQVI1S19SRUdfRElTQUJMRV9CSVRTKGFoLCBBUjVLX1NJTVIyLCBBUjVLX1NJTVIyX1FDVV9UWFVSTik7CisJQVI1S19SRUdfRU5BQkxFX0JJVFMoYWgsIEFSNUtfU0lNUjIsCisJCQkJQVI1S19SRUdfU00oYWgtPmFoX3R4cV9pbXJfdHh1cm4sCisJCQkJQVI1S19TSU1SMl9RQ1VfVFhVUk4pKTsKKworCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgQVI1S19SRUdfU00oYWgtPmFoX3R4cV9pbXJfY2Jyb3JuLAorCQkJCUFSNUtfU0lNUjNfUUNCUk9STikgfAorCQkJCUFSNUtfUkVHX1NNKGFoLT5haF90eHFfaW1yX2NicnVybiwKKwkJCQlBUjVLX1NJTVIzX1FDQlJVUk4pLAorCQkJCUFSNUtfU0lNUjMpOworCisJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBBUjVLX1JFR19TTShhaC0+YWhfdHhxX2ltcl9xdHJpZywKKwkJCQlBUjVLX1NJTVI0X1FUUklHKSwgQVI1S19TSU1SNCk7CisKKwkvKiBTZXQgVFhOT0ZSTV9RQ1UgZm9yIHRoZSBxdWV1ZXMgd2l0aCBUWE5PRlJNIGVuYWJsZWQgKi8KKwlhdGg1a19od19yZWdfd3JpdGUoYWgsIEFSNUtfUkVHX1NNKGFoLT5haF90eHFfaW1yX25vZnJtLAorCQkJCUFSNUtfVFhOT0ZSTV9RQ1UpLCBBUjVLX1RYTk9GUk0pOworCisJLyogTm8gcXVldWUgaGFzIFRYTk9GUk0gZW5hYmxlZCwgZGlzYWJsZSB0aGUgaW50ZXJydXB0CisJICogYnkgc2V0dGluZyBBUjVLX1RYTk9GUk0gdG8gemVybyAqLworCWlmIChhaC0+YWhfdHhxX2ltcl9ub2ZybSA9PSAwKQorCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDAsIEFSNUtfVFhOT0ZSTSk7CisKKwkvKiBTZXQgUUNVIG1hc2sgZm9yIHRoaXMgRENVIHRvIHNhdmUgcG93ZXIgKi8KKwlBUjVLX1JFR19XUklURV9RKGFoLCBBUjVLX1FVRVVFX1FDVU1BU0socXVldWUpLCBxdWV1ZSk7CisKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIFNldCBzbG90IHRpbWUgb24gRENVCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKlwKKyogR2xvYmFsIFFDVS9EQ1UgZnVuY3Rpb25zICoKK1wqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBhdGg1a19od19zZXRfaWZzX2ludGVydmFscyAgLSBTZXQgZ2xvYmFsIGludGVyLWZyYW1lIHNwYWNlcyBvbiBEQ1UKKyAqCisgKiBAYWggVGhlICZzdHJ1Y3QgYXRoNWtfaHcKKyAqIEBzbG90X3RpbWUgU2xvdCB0aW1lIGluIHVzCisgKgorICogU2V0cyB0aGUgZ2xvYmFsIElGUyBpbnRlcnZhbHMgb24gRENVIChhbHNvIHdvcmtzIG9uIEFSNTIxMCkgZm9yCisgKiB0aGUgZ2l2ZW4gc2xvdCB0aW1lIGFuZCB0aGUgY3VycmVudCBid21vZGUuCiAgKi8KLWludCBhdGg1a19od19zZXRfc2xvdF90aW1lKHN0cnVjdCBhdGg1a19odyAqYWgsIHVuc2lnbmVkIGludCBzbG90X3RpbWUpCitpbnQgYXRoNWtfaHdfc2V0X2lmc19pbnRlcnZhbHMoc3RydWN0IGF0aDVrX2h3ICphaCwgdW5zaWduZWQgaW50IHNsb3RfdGltZSkKIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwgPSBhaC0+YWhfY3VycmVudF9jaGFubmVsOworCXN0cnVjdCBhdGg1a19zb2Z0YyAqc2MgPSBhaC0+YWhfc2M7CisJc3RydWN0IGllZWU4MDIxMV9yYXRlICpyYXRlOworCXUzMiBhY2tfdHhfdGltZSwgZWlmcywgZWlmc19jbG9jaywgc2lmcywgc2lmc19jbG9jazsKIAl1MzIgc2xvdF90aW1lX2Nsb2NrID0gYXRoNWtfaHdfaHRvY2xvY2soYWgsIHNsb3RfdGltZSk7CiAKIAlpZiAoc2xvdF90aW1lIDwgNiB8fCBzbG90X3RpbWVfY2xvY2sgPiBBUjVLX1NMT1RfVElNRV9NQVgpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKGFoLT5haF92ZXJzaW9uID09IEFSNUtfQVI1MjEwKQotCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIHNsb3RfdGltZV9jbG9jaywgQVI1S19TTE9UX1RJTUUpOworCXNpZnMgPSBhdGg1a19od19nZXRfZGVmYXVsdF9zaWZzKGFoKTsKKwlzaWZzX2Nsb2NrID0gYXRoNWtfaHdfaHRvY2xvY2soYWgsIHNpZnMpOworCisJLyogRUlGUworCSAqIFR4dGltZSBvZiBhY2sgYXQgbG93ZXN0IHJhdGUgKyBTSUZTICsgRElGUworCSAqIChESUZTID0gU0lGUyArIDIgKiBTbG90IHRpbWUpCisJICoKKwkgKiBOb3RlOiBIQUwgaGFzIHNvbWUgcHJlZGVmaW5lZCB2YWx1ZXMgZm9yIEVJRlMKKwkgKiBUdXJibzogICAoMzcgKyAyICogNikKKwkgKiBEZWZhdWx0OiAoNzQgKyAyICogOSkKKwkgKiBIYWxmOiAgICAoMTQ5ICsgMiAqIDEzKQorCSAqIFF1YXJ0ZXI6ICgyOTggKyAyICogMjEpCisJICoKKwkgKiAoNzQgKyAyICogNikgZm9yIEFSNTIxMCBkZWZhdWx0IGFuZCB0dXJibyAhCisJICoKKwkgKiBBY2NvcmRpbmcgdG8gdGhlIGZvcm11bGEgd2UgaGF2ZQorCSAqIGFja190eF90aW1lID0gMjUgZm9yIHR1cmJvIGFuZAorCSAqIGFja190eF90aW1lID0gNDIuNSAqIGNsb2NrIG11bHRpcGxpZXIKKwkgKiBmb3IgZGVmYXVsdC9oYWxmL3F1YXJ0ZXIuCisJICoKKwkgKiBUaGlzIGNhbid0IGJlIHJpZ2h0LCA0MiBpcyB3aGF0IHdlIHdvdWxkIGdldAorCSAqIGZyb20gYXRoNWtfaHdfZ2V0X2ZyYW1lX2R1cl9mb3JfYndtb2RlIG9yCisJICogaWVlZTgwMjExX2dlbmVyaWNfZnJhbWVfZHVyYXRpb24gZm9yIHplcm8gZnJhbWUKKwkgKiBsZW5ndGggYW5kIHdpdGhvdXQgU0lGUyAhCisJICoKKwkgKiBBbHNvIHdlIGhhdmUgZGlmZmVyZW50IGxvd2VzdCByYXRlIGZvciA4MDIuMTFhCisJICovCisJaWYgKGNoYW5uZWwtPmh3X3ZhbHVlICYgQ0hBTk5FTF81R0haKQorCQlyYXRlID0gJnNjLT5zYmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0uYml0cmF0ZXNbMF07CiAJZWxzZQotCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIHNsb3RfdGltZV9jbG9jaywgQVI1S19EQ1VfR0JMX0lGU19TTE9UKTsKKwkJcmF0ZSA9ICZzYy0+c2JhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdLmJpdHJhdGVzWzBdOworCisJYWNrX3R4X3RpbWUgPSBhdGg1a19od19nZXRfZnJhbWVfZHVyYXRpb24oYWgsIDEwLCByYXRlKTsKKworCS8qIGFja190eF90aW1lIGluY2x1ZGVzIGFuIFNJRlMgYWxyZWFkeSAqLworCWVpZnMgPSBhY2tfdHhfdGltZSArIHNpZnMgKyAyICogc2xvdF90aW1lOworCWVpZnNfY2xvY2sgPSBhdGg1a19od19odG9jbG9jayhhaCwgZWlmcyk7CisKKwkvKiBTZXQgSUZTIHNldHRpbmdzIG9uIEFSNTIxMCAqLworCWlmIChhaC0+YWhfdmVyc2lvbiA9PSBBUjVLX0FSNTIxMCkgeworCQl1MzIgcGlmcywgcGlmc19jbG9jaywgZGlmcywgZGlmc19jbG9jazsKKworCQkvKiBTZXQgc2xvdCB0aW1lICovCisJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgc2xvdF90aW1lX2Nsb2NrLCBBUjVLX1NMT1RfVElNRSk7CisKKwkJLyogU2V0IEVJRlMgKi8KKwkJZWlmc19jbG9jayA9IEFSNUtfUkVHX1NNKGVpZnNfY2xvY2ssIEFSNUtfSUZTMV9FSUZTKTsKKworCQkvKiBQSUZTID0gU2xvdCB0aW1lICsgU0lGUyAqLworCQlwaWZzID0gc2xvdF90aW1lICsgc2lmczsKKwkJcGlmc19jbG9jayA9IGF0aDVrX2h3X2h0b2Nsb2NrKGFoLCBwaWZzKTsKKwkJcGlmc19jbG9jayA9IEFSNUtfUkVHX1NNKHBpZnNfY2xvY2ssIEFSNUtfSUZTMV9QSUZTKTsKKworCQkvKiBESUZTID0gU0lGUyArIDIgKiBTbG90IHRpbWUgKi8KKwkJZGlmcyA9IHNpZnMgKyAyICogc2xvdF90aW1lOworCQlkaWZzX2Nsb2NrID0gYXRoNWtfaHdfaHRvY2xvY2soYWgsIGRpZnMpOworCisJCS8qIFNldCBTSUZTL0RJRlMgKi8KKwkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAoZGlmc19jbG9jayA8PAorCQkJCUFSNUtfSUZTMF9ESUZTX1MpIHwgc2lmc19jbG9jaywKKwkJCQlBUjVLX0lGUzApOworCisJCS8qIFNldCBQSUZTL0VJRlMgYW5kIHByZXNlcnZlIEFSNUtfSU5JVF9DQVJSX1NFTlNFX0VOICovCisJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgcGlmc19jbG9jayB8IGVpZnNfY2xvY2sgfAorCQkJCShBUjVLX0lOSVRfQ0FSUl9TRU5TRV9FTiA8PCBBUjVLX0lGUzFfQ1NfRU5fUyksCisJCQkJQVI1S19JRlMxKTsKKworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBTZXQgSUZTIHNsb3QgdGltZSAqLworCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgc2xvdF90aW1lX2Nsb2NrLCBBUjVLX0RDVV9HQkxfSUZTX1NMT1QpOworCisJLyogU2V0IEVJRlMgaW50ZXJ2YWwgKi8KKwlhdGg1a19od19yZWdfd3JpdGUoYWgsIGVpZnNfY2xvY2ssIEFSNUtfRENVX0dCTF9JRlNfRUlGUyk7CisKKwkvKiBTZXQgU0lGUyBpbnRlcnZhbCBpbiB1c2VjcyAqLworCUFSNUtfUkVHX1dSSVRFX0JJVFMoYWgsIEFSNUtfRENVX0dCTF9JRlNfTUlTQywKKwkJCQlBUjVLX0RDVV9HQkxfSUZTX01JU0NfU0lGU19EVVJfVVNFQywKKwkJCQlzaWZzKTsKKworCS8qIFNldCBTSUZTIGludGVydmFsIGluIGNsb2NrIGN5Y2xlcyAqLworCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgc2lmc19jbG9jaywgQVI1S19EQ1VfR0JMX0lGU19TSUZTKTsKIAogCXJldHVybiAwOwogfQogCisKK2ludCBhdGg1a19od19pbml0X3F1ZXVlcyhzdHJ1Y3QgYXRoNWtfaHcgKmFoKQoreworCWludCBpLCByZXQ7CisKKwkvKiBUT0RPOiBIVyBDb21wcmVzc2lvbiBzdXBwb3J0IGZvciBkYXRhIHF1ZXVlcyAqLworCS8qIFRPRE86IEJ1cnN0IHByZWZldGNoIGZvciBkYXRhIHF1ZXVlcyAqLworCisJLyoKKwkgKiBSZXNldCBxdWV1ZXMgYW5kIHN0YXJ0IGJlYWNvbiB0aW1lcnMgYXQgdGhlIGVuZCBvZiB0aGUgcmVzZXQgcm91dGluZQorCSAqIFRoaXMgYWxzbyBzZXRzIFFDVSBtYXNrIG9uIGVhY2ggRENVIGZvciAxOjEgcWN1IHRvIGRjdSBtYXBwaW5nCisJICogTm90ZTogSWYgd2Ugd2FudCB3ZSBjYW4gYXNzaWduIG11bHRpcGxlIHFjdXMgb24gb25lIGRjdS4KKwkgKi8KKwlpZiAoYWgtPmFoX3ZlcnNpb24gIT0gQVI1S19BUjUyMTApCisJCWZvciAoaSA9IDA7IGkgPCBhaC0+YWhfY2FwYWJpbGl0aWVzLmNhcF9xdWV1ZXMucV90eF9udW07IGkrKykgeworCQkJcmV0ID0gYXRoNWtfaHdfcmVzZXRfdHhfcXVldWUoYWgsIGkpOworCQkJaWYgKHJldCkgeworCQkJCUFUSDVLX0VSUihhaC0+YWhfc2MsCisJCQkJCSJmYWlsZWQgdG8gcmVzZXQgVFggcXVldWUgIyVkXG4iLCBpKTsKKwkJCQlyZXR1cm4gcmV0OworCQkJfQorCQl9CisJZWxzZQorCQkvKiBObyBRQ1UvRENVIG9uIEFSNTIxMCwganVzdCBzZXQgdHgKKwkJICogcmV0cnkgbGltaXRzLiBXZSBzZXQgSUZTIHBhcmFtZXRlcnMKKwkJICogb24gYXRoNWtfaHdfc2V0X2lmc19pbnRlcnZhbHMgKi8KKwkJYXRoNWtfaHdfc2V0X3R4X3JldHJ5X2xpbWl0cyhhaCwgMCk7CisKKwkvKiBTZXQgdGhlIHR1cmJvIGZsYWcgd2hlbiBvcGVyYXRpbmcgb24gNDBNSHogKi8KKwlpZiAoYWgtPmFoX2J3bW9kZSA9PSBBUjVLX0JXTU9ERV80ME1IWikKKwkJQVI1S19SRUdfRU5BQkxFX0JJVFMoYWgsIEFSNUtfRENVX0dCTF9JRlNfTUlTQywKKwkJCQlBUjVLX0RDVV9HQkxfSUZTX01JU0NfVFVSQk9fTU9ERSk7CisKKwkvKiBJZiB3ZSBkaWRuJ3Qgc2V0IElGUyB0aW1pbmdzIHRocm91Z2gKKwkgKiBhdGg1a19od19zZXRfY292ZXJhZ2VfY2xhc3MgbWFrZSBzdXJlCisJICogd2Ugc2V0IHRoZW0gaGVyZSAqLworCWlmICghYWgtPmFoX2NvdmVyYWdlX2NsYXNzKSB7CisJCXVuc2lnbmVkIGludCBzbG90X3RpbWUgPSBhdGg1a19od19nZXRfZGVmYXVsdF9zbG90dGltZShhaCk7CisJCWF0aDVrX2h3X3NldF9pZnNfaW50ZXJ2YWxzKGFoLCBzbG90X3RpbWUpOworCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3JlZy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3JlZy5oCmluZGV4IGNhNzllY2QuLjdhZDA1ZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9yZWcuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcmVnLmgKQEAgLTc4Nyw2ICs3ODcsNyBAQAogI2RlZmluZQlBUjVLX0RDVV9HQkxfSUZTX01JU0NfTEZTUl9TTElDRQkweDAwMDAwMDA3CS8qIExGU1IgU2xpY2UgU2VsZWN0ICovCiAjZGVmaW5lCUFSNUtfRENVX0dCTF9JRlNfTUlTQ19UVVJCT19NT0RFCTB4MDAwMDAwMDgJLyogVHVyYm8gbW9kZSAqLwogI2RlZmluZQlBUjVLX0RDVV9HQkxfSUZTX01JU0NfU0lGU19EVVJfVVNFQwkweDAwMDAwM2YwCS8qIFNJRlMgRHVyYXRpb24gbWFzayAqLworI2RlZmluZQlBUjVLX0RDVV9HQkxfSUZTX01JU0NfU0lGU19EVVJfVVNFQ19TCTQKICNkZWZpbmUJQVI1S19EQ1VfR0JMX0lGU19NSVNDX1VTRUNfRFVSCQkweDAwMGZmYzAwCS8qIFVTRUMgRHVyYXRpb24gbWFzayAqLwogI2RlZmluZQlBUjVLX0RDVV9HQkxfSUZTX01JU0NfVVNFQ19EVVJfUwkxMAogI2RlZmluZQlBUjVLX0RDVV9HQkxfSUZTX01JU0NfRENVX0FSQl9ERUxBWQkweDAwMzAwMDAwCS8qIERDVSBBcmJpdGVyIGRlbGF5IG1hc2sgKi8KQEAgLTEzMTEsNyArMTMxMiw3IEBACiAjZGVmaW5lIEFSNUtfSUZTMV9FSUZTCQkweDAzZmZmMDAwCiAjZGVmaW5lIEFSNUtfSUZTMV9FSUZTX1MJMTIKICNkZWZpbmUgQVI1S19JRlMxX0NTX0VOCQkweDA0MDAwMDAwCi0KKyNkZWZpbmUgQVI1S19JRlMxX0NTX0VOX1MJMjYKIAogLyoKICAqIENGUCBkdXJhdGlvbiByZWdpc3RlcgpAQCAtMjA1OCw2ICsyMDU5LDcgQEAKIAogI2RlZmluZSBBUjVLX1BIWV9TQ0FMCQkJMHg5ODc4CiAjZGVmaW5lIEFSNUtfUEhZX1NDQUxfMzJNSFoJCTB4MDAwMDAwMGUKKyNkZWZpbmUJQVI1S19QSFlfU0NBTF8zMk1IWl81MzExCTB4MDAwMDAwMDgKICNkZWZpbmUJQVI1S19QSFlfU0NBTF8zMk1IWl8yNDE3CTB4MDAwMDAwMGEKICNkZWZpbmUJQVI1S19QSFlfU0NBTF8zMk1IWl9IQjYzCTB4MDAwMDAwMzIKIApAQCAtMjI0NCw2ICsyMjQ2LDggQEAKICNkZWZpbmUJQVI1S19QSFlfRlJBTUVfQ1RMCQkoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUyMTAgPyBcCiAJCQkJCUFSNUtfUEhZX0ZSQU1FX0NUTF81MjEwIDogQVI1S19QSFlfRlJBTUVfQ1RMXzUyMTEpCiAvKi0tLVs1MTExK10tLS0qLworI2RlZmluZQlBUjVLX1BIWV9GUkFNRV9DVExfV0lOX0xFTgkweDAwMDAwMDAzCS8qIEZvcmNlIHdpbmRvdyBsZW5ndGggKD8pICovCisjZGVmaW5lCUFSNUtfUEhZX0ZSQU1FX0NUTF9XSU5fTEVOX1MJMAogI2RlZmluZQlBUjVLX1BIWV9GUkFNRV9DVExfVFhfQ0xJUAkweDAwMDAwMDM4CS8qIE1hc2sgZm9yIHR4IGNsaXAgKD8pICovCiAjZGVmaW5lCUFSNUtfUEhZX0ZSQU1FX0NUTF9UWF9DTElQX1MJMwogI2RlZmluZQlBUjVLX1BIWV9GUkFNRV9DVExfUFJFUF9DSElORk8JMHgwMDAxMDAwMAkvKiBQcmVwZW5kIGNoYW4gaW5mbyAqLwpAQCAtMjU1OCwzICsyNTYyLDI4IEBACiAgKi8KICNkZWZpbmUgQVI1S19QSFlfUERBRENfVFhQT1dFUl9CQVNFCTB4YTI4MAogI2RlZmluZQlBUjVLX1BIWV9QREFEQ19UWFBPV0VSKF9uKQkoQVI1S19QSFlfUERBRENfVFhQT1dFUl9CQVNFICsgKChfbikgPDwgMikpCisKKy8qCisgKiBQbGF0Zm9ybSByZWdpc3RlcnMgZm9yIFdpU29DCisgKi8KKyNkZWZpbmUgQVI1S19BUjUzMTJfUkVTRVQJCTB4YmMwMDMwMjAKKyNkZWZpbmUgQVI1S19BUjUzMTJfUkVTRVRfQkIwX0NPTEQJMHgwMDAwMDAwNAorI2RlZmluZSBBUjVLX0FSNTMxMl9SRVNFVF9CQjFfQ09MRAkweDAwMDAwMjAwCisjZGVmaW5lIEFSNUtfQVI1MzEyX1JFU0VUX1dNQUMwCQkweDAwMDAyMDAwCisjZGVmaW5lIEFSNUtfQVI1MzEyX1JFU0VUX0JCMF9XQVJNCTB4MDAwMDQwMDAKKyNkZWZpbmUgQVI1S19BUjUzMTJfUkVTRVRfV01BQzEJCTB4MDAwMjAwMDAKKyNkZWZpbmUgQVI1S19BUjUzMTJfUkVTRVRfQkIxX1dBUk0JMHgwMDA0MDAwMAorCisjZGVmaW5lIEFSNUtfQVI1MzEyX0VOQUJMRQkJMHhiYzAwMzA4MAorI2RlZmluZSBBUjVLX0FSNTMxMl9FTkFCTEVfV0xBTjAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBUjVLX0FSNTMxMl9FTkFCTEVfV0xBTjEgICAgMHgwMDAwMDAwOAorCisjZGVmaW5lIEFSNUtfQVIyMzE1X1JFU0VUCQkweGIxMDAwMDA0CisjZGVmaW5lIEFSNUtfQVIyMzE1X1JFU0VUX1dNQUMJCTB4MDAwMDAwMDEKKyNkZWZpbmUgQVI1S19BUjIzMTVfUkVTRVRfQkJfV0FSTQkweDAwMDAwMDAyCisKKyNkZWZpbmUgQVI1S19BUjIzMTVfQUhCX0FSQl9DVEwJCTB4YjEwMDAwMDgKKyNkZWZpbmUgQVI1S19BUjIzMTVfQUhCX0FSQl9DVExfV0xBTgkweDAwMDAwMDAyCisKKyNkZWZpbmUgQVI1S19BUjIzMTVfQllURVNXQVAJMHhiMTAwMDAwYworI2RlZmluZSBBUjVLX0FSMjMxNV9CWVRFU1dBUF9XTUFDCTB4MDAwMDAwMDIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9yZXNldC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3Jlc2V0LmMKaW5kZXggNWIxNzlkMC4uODQyMDY4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3Jlc2V0LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3Jlc2V0LmMKQEAgLTI3LDExICsyNywxNyBAQAogCiAjaW5jbHVkZSA8bGludXgvcGNpLmg+IAkJLyogVG8gZGV0ZXJtaW5lIGlmIGEgY2FyZCBpcyBwY2ktZSAqLwogI2luY2x1ZGUgPGxpbnV4L2xvZzIuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlICJhdGg1ay5oIgogI2luY2x1ZGUgInJlZy5oIgogI2luY2x1ZGUgImJhc2UuaCIKICNpbmNsdWRlICJkZWJ1Zy5oIgogCisKKy8qKioqKioqKioqKioqKioqKipcCisqIEhlbHBlciBmdW5jdGlvbnMgKgorXCoqKioqKioqKioqKioqKioqKi8KKwogLyoKICAqIENoZWNrIGlmIGEgcmVnaXN0ZXIgd3JpdGUgaGFzIGJlZW4gY29tcGxldGVkCiAgKi8KQEAgLTUzLDE0NyArNTksMjY4IEBACiAJcmV0dXJuIChpIDw9IDApID8gLUVBR0FJTiA6IDA7CiB9CiAKKworLyoqKioqKioqKioqKioqKioqKioqKioqKipcCisqIENsb2NrIHJlbGF0ZWQgZnVuY3Rpb25zICoKK1wqKioqKioqKioqKioqKioqKioqKioqKioqLworCiAvKioKLSAqIGF0aDVrX2h3X3dyaXRlX29mZG1fdGltaW5ncyAtIHNldCBPRkRNIHRpbWluZ3Mgb24gQVI1MjEyCisgKiBhdGg1a19od19odG9jbG9jayAtIFRyYW5zbGF0ZSB1c2VjIHRvIGh3IGNsb2NrIHVuaXRzCiAgKgotICogQGFoOiB0aGUgJnN0cnVjdCBhdGg1a19odwotICogQGNoYW5uZWw6IHRoZSBjdXJyZW50bHkgc2V0IGNoYW5uZWwgdXBvbiByZXNldAotICoKLSAqIFdyaXRlIHRoZSBkZWx0YSBzbG9wZSBjb2VmZmljaWVudCAodXNlZCBvbiBwaWxvdCB0cmFja2luZyA/KSBmb3IgT0ZETQotICogb3BlcmF0aW9uIG9uIHRoZSBBUjUyMTIgdXBvbiByZXNldC4gVGhpcyBpcyBhIGhlbHBlciBmb3IgYXRoNWtfaHdfcmVzZXQoKS4KLSAqCi0gKiBTaW5jZSBkZWx0YSBzbG9wZSBpcyBmbG9hdGluZyBwb2ludCB3ZSBzcGxpdCBpdCBvbiBpdHMgZXhwb25lbnQgYW5kCi0gKiBtYW50aXNzYSBhbmQgcHJvdmlkZSB0aGVzZSB2YWx1ZXMgb24gaHcuCi0gKgotICogRm9yIG1vcmUgaW5mb3MgaSB0aGluayB0aGlzIHBhdGVudCBpcyByZWxhdGVkCi0gKiBodHRwOi8vd3d3LmZyZWVwYXRlbnRzb25saW5lLmNvbS83MTg0NDk1Lmh0bWwKKyAqIEBhaDogVGhlICZzdHJ1Y3QgYXRoNWtfaHcKKyAqIEB1c2VjOiB2YWx1ZSBpbiBtaWNyb3NlY29uZHMKICAqLwotc3RhdGljIGlubGluZSBpbnQgYXRoNWtfaHdfd3JpdGVfb2ZkbV90aW1pbmdzKHN0cnVjdCBhdGg1a19odyAqYWgsCi0Jc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsKQordW5zaWduZWQgaW50IGF0aDVrX2h3X2h0b2Nsb2NrKHN0cnVjdCBhdGg1a19odyAqYWgsIHVuc2lnbmVkIGludCB1c2VjKQogewotCS8qIEdldCBleHBvbmVudCBhbmQgbWFudGlzc2EgYW5kIHNldCBpdCAqLwotCXUzMiBjb2VmX3NjYWxlZCwgY29lZl9leHAsIGNvZWZfbWFuLAotCQlkc19jb2VmX2V4cCwgZHNfY29lZl9tYW4sIGNsb2NrOwotCi0JQlVHX09OKCEoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUyMTIpIHx8Ci0JCSEoY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMX09GRE0pKTsKLQotCS8qIEdldCBjb2VmZmljaWVudAotCSAqIEFMR086IGNvZWYgPSAoNSAqIGNsb2NrIC8gY2Fycmllcl9mcmVxKSAvIDIKLQkgKiB3ZSBzY2FsZSBjb2VmIGJ5IHNoaWZ0aW5nIGNsb2NrIHZhbHVlIGJ5IDI0IGZvcgotCSAqIGJldHRlciBwcmVjaXNpb24gc2luY2Ugd2UgdXNlIGludGVnZXJzICovCi0JLyogVE9ETzogSGFsZi9xdWFydGVyIHJhdGUgKi8KLQljbG9jayA9ICAoY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMX1RVUkJPKSA/IDgwIDogNDA7Ci0JY29lZl9zY2FsZWQgPSAoKDUgKiAoY2xvY2sgPDwgMjQpKSAvIDIpIC8gY2hhbm5lbC0+Y2VudGVyX2ZyZXE7Ci0KLQkvKiBHZXQgZXhwb25lbnQKLQkgKiBBTEdPOiBjb2VmX2V4cCA9IDE0IC0gaGlnaGVzdCBzZXQgYml0IHBvc2l0aW9uICovCi0JY29lZl9leHAgPSBpbG9nMihjb2VmX3NjYWxlZCk7Ci0KLQkvKiBEb2Vzbid0IG1ha2Ugc2Vuc2UgaWYgaXQncyB6ZXJvKi8KLQlpZiAoIWNvZWZfc2NhbGVkIHx8ICFjb2VmX2V4cCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkvKiBOb3RlOiB3ZSd2ZSBzaGlmdGVkIGNvZWZfc2NhbGVkIGJ5IDI0ICovCi0JY29lZl9leHAgPSAxNCAtIChjb2VmX2V4cCAtIDI0KTsKLQotCi0JLyogR2V0IG1hbnRpc3NhIChzaWduaWZpY2FudCBkaWdpdHMpCi0JICogQUxHTzogY29lZl9tYW50ID0gZmxvb3IoY29lZl9zY2FsZWQqIDJeY29lZl9leHArMC41KSAqLwotCWNvZWZfbWFuID0gY29lZl9zY2FsZWQgKwotCQkoMSA8PCAoMjQgLSBjb2VmX2V4cCAtIDEpKTsKLQotCS8qIENhbGN1bGF0ZSBkZWx0YSBzbG9wZSBjb2VmZmljaWVudCBleHBvbmVudAotCSAqIGFuZCBtYW50aXNzYSAocmVtb3ZlIHNjYWxpbmcpIGFuZCBzZXQgdGhlbSBvbiBodyAqLwotCWRzX2NvZWZfbWFuID0gY29lZl9tYW4gPj4gKDI0IC0gY29lZl9leHApOwotCWRzX2NvZWZfZXhwID0gY29lZl9leHAgLSAxNjsKLQotCUFSNUtfUkVHX1dSSVRFX0JJVFMoYWgsIEFSNUtfUEhZX1RJTUlOR18zLAotCQlBUjVLX1BIWV9USU1JTkdfM19EU0NfTUFOLCBkc19jb2VmX21hbik7Ci0JQVI1S19SRUdfV1JJVEVfQklUUyhhaCwgQVI1S19QSFlfVElNSU5HXzMsCi0JCUFSNUtfUEhZX1RJTUlOR18zX0RTQ19FWFAsIGRzX2NvZWZfZXhwKTsKLQotCXJldHVybiAwOworCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg1a19od19jb21tb24oYWgpOworCXJldHVybiB1c2VjICogY29tbW9uLT5jbG9ja3JhdGU7CiB9CiAKLQotLyoKLSAqIGluZGV4IGludG8gcmF0ZXMgZm9yIGNvbnRyb2wgcmF0ZXMsIHdlIGNhbiBzZXQgaXQgdXAgbGlrZSB0aGlzIGJlY2F1c2UKLSAqIHRoaXMgaXMgb25seSB1c2VkIGZvciBBUjUyMTIgYW5kIHdlIGtub3cgaXQgc3VwcG9ydHMgRyBtb2RlCisvKioKKyAqIGF0aDVrX2h3X2Nsb2NrdG9oIC0gVHJhbnNsYXRlIGh3IGNsb2NrIHVuaXRzIHRvIHVzZWMKKyAqIEBjbG9jazogdmFsdWUgaW4gaHcgY2xvY2sgdW5pdHMKICAqLwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBjb250cm9sX3JhdGVzW10gPQotCXsgMCwgMSwgMSwgMSwgNCwgNCwgNiwgNiwgOCwgOCwgOCwgOCB9OwordW5zaWduZWQgaW50IGF0aDVrX2h3X2Nsb2NrdG9oKHN0cnVjdCBhdGg1a19odyAqYWgsIHVuc2lnbmVkIGludCBjbG9jaykKK3sKKwlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoNWtfaHdfY29tbW9uKGFoKTsKKwlyZXR1cm4gY2xvY2sgLyBjb21tb24tPmNsb2NrcmF0ZTsKK30KIAogLyoqCi0gKiBhdGg1a19od193cml0ZV9yYXRlX2R1cmF0aW9uIC0gZmlsbCByYXRlIGNvZGUgdG8gZHVyYXRpb24gdGFibGUKKyAqIGF0aDVrX2h3X2luaXRfY29yZV9jbG9jayAtIEluaXRpYWxpemUgY29yZSBjbG9jawogICoKLSAqIEBhaDogdGhlICZzdHJ1Y3QgYXRoNWtfaHcKLSAqIEBtb2RlOiBvbmUgb2YgZW51bSBhdGg1a19kcml2ZXJfbW9kZQorICogQGFoIFRoZSAmc3RydWN0IGF0aDVrX2h3CiAgKgotICogV3JpdGUgdGhlIHJhdGUgY29kZSB0byBkdXJhdGlvbiB0YWJsZSB1cG9uIGh3IHJlc2V0LiBUaGlzIGlzIGEgaGVscGVyIGZvcgotICogYXRoNWtfaHdfcmVzZXQoKS4gSXQgc2VlbXMgYWxsIHRoaXMgaXMgZG9pbmcgaXMgc2V0dGluZyBhbiBBQ0sgdGltZW91dCBvbgotICogdGhlIGhhcmR3YXJlLCBiYXNlZCBvbiBjdXJyZW50IG1vZGUsIGZvciBlYWNoIHJhdGUuIFRoZSByYXRlcyB3aGljaCBhcmUKLSAqIGNhcGFibGUgb2Ygc2hvcnQgcHJlYW1ibGUgKDgwMi4xMWIgcmF0ZXMgMk1icHMsIDUuNU1icHMsIGFuZCAxMU1icHMpIGhhdmUKLSAqIGRpZmZlcmVudCByYXRlIGNvZGUgc28gd2Ugd3JpdGUgdGhlaXIgdmFsdWUgdHdpY2UgKG9uZSBmb3IgbG9uZyBwcmVhbXBsZQotICogYW5kIG9uZSBmb3Igc2hvcnQpLgotICoKLSAqIE5vdGU6IEJhbmQgZG9lc24ndCBtYXR0ZXIgaGVyZSwgaWYgd2Ugc2V0IHRoZSB2YWx1ZXMgZm9yIE9GRE0gaXQgd29ya3MKLSAqIG9uIGJvdGggYSBhbmQgZyBtb2Rlcy4gU28gYWxsIHdlIGhhdmUgdG8gZG8gaXMgc2V0IHZhbHVlcyBmb3IgYWxsIGcgcmF0ZXMKLSAqIHRoYXQgaW5jbHVkZSBhbGwgT0ZETSBhbmQgQ0NLIHJhdGVzLiBJZiB3ZSBvcGVyYXRlIGluIHR1cmJvIG9yIHhyL2hhbGYvCi0gKiBxdWFydGVyIHJhdGUgbW9kZSwgd2UgbmVlZCB0byB1c2UgYW5vdGhlciBzZXQgb2YgYml0cmF0ZXMgKHRoYXQncyB3aHkgd2UKLSAqIG5lZWQgdGhlIG1vZGUgcGFyYW1ldGVyKSBidXQgd2UgZG9uJ3QgaGFuZGxlIHRoZXNlIHByb3ByaWV0YXJ5IG1vZGVzIHlldC4KKyAqIEluaXRpYWxpemUgY29yZSBjbG9jayBwYXJhbWV0ZXJzICh1c2VjLCB1c2VjMzIsIGxhdGVuY2llcyBldGMpLgogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRoNWtfaHdfd3JpdGVfcmF0ZV9kdXJhdGlvbihzdHJ1Y3QgYXRoNWtfaHcgKmFoLAotICAgICAgIHVuc2lnbmVkIGludCBtb2RlKQorc3RhdGljIHZvaWQgYXRoNWtfaHdfaW5pdF9jb3JlX2Nsb2NrKHN0cnVjdCBhdGg1a19odyAqYWgpCiB7Ci0Jc3RydWN0IGF0aDVrX3NvZnRjICpzYyA9IGFoLT5haF9zYzsKLQlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnJhdGU7Ci0JdW5zaWduZWQgaW50IGk7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsID0gYWgtPmFoX2N1cnJlbnRfY2hhbm5lbDsKKwlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoNWtfaHdfY29tbW9uKGFoKTsKKwl1MzIgdXNlY19yZWcsIHR4bGF0LCByeGxhdCwgdXNlYywgY2xvY2ssIHNjbG9jaywgdHhmMnR4czsKIAotCS8qIFdyaXRlIHJhdGUgZHVyYXRpb24gdGFibGUgKi8KLQlmb3IgKGkgPSAwOyBpIDwgc2MtPnNiYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXS5uX2JpdHJhdGVzOyBpKyspIHsKLQkJdTMyIHJlZzsKLQkJdTE2IHR4X3RpbWU7CisJLyoKKwkgKiBTZXQgY29yZSBjbG9jayBmcmVxdWVuY3kKKwkgKi8KKwlpZiAoY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMXzVHSFopCisJCWNsb2NrID0gNDA7IC8qIDgwMi4xMWEgKi8KKwllbHNlIGlmIChjaGFubmVsLT5od192YWx1ZSAmIENIQU5ORUxfQ0NLKQorCQljbG9jayA9IDIyOyAvKiA4MDIuMTFiICovCisJZWxzZQorCQljbG9jayA9IDQ0OyAvKiA4MDIuMTFnICovCiAKLQkJcmF0ZSA9ICZzYy0+c2JhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdLmJpdHJhdGVzW2NvbnRyb2xfcmF0ZXNbaV1dOworCS8qIFVzZSBjbG9jayBtdWx0aXBsaWVyIGZvciBub24tZGVmYXVsdAorCSAqIGJ3bW9kZSAqLworCXN3aXRjaCAoYWgtPmFoX2J3bW9kZSkgeworCWNhc2UgQVI1S19CV01PREVfNDBNSFo6CisJCWNsb2NrICo9IDI7CisJCWJyZWFrOworCWNhc2UgQVI1S19CV01PREVfMTBNSFo6CisJCWNsb2NrIC89IDI7CisJCWJyZWFrOworCWNhc2UgQVI1S19CV01PREVfNU1IWjoKKwkJY2xvY2sgLz0gNDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQogCi0JCS8qIFNldCBBQ0sgdGltZW91dCAqLwotCQlyZWcgPSBBUjVLX1JBVEVfRFVSKHJhdGUtPmh3X3ZhbHVlKTsKKwljb21tb24tPmNsb2NrcmF0ZSA9IGNsb2NrOwogCi0JCS8qIEFuIEFDSyBmcmFtZSBjb25zaXN0cyBvZiAxMCBieXRlcy4gSWYgeW91IGFkZCB0aGUgRkNTLAotCQkgKiB3aGljaCBpZWVlODAyMTFfZ2VuZXJpY19mcmFtZV9kdXJhdGlvbigpIGFkZHMsCi0JCSAqIGl0cyAxNCBieXRlcy4gTm90ZSB3ZSB1c2UgdGhlIGNvbnRyb2wgcmF0ZSBhbmQgbm90IHRoZQotCQkgKiBhY3R1YWwgcmF0ZSBmb3IgdGhpcyByYXRlLiBTZWUgbWFjODAyMTEgdHguYwotCQkgKiBpZWVlODAyMTFfZHVyYXRpb24oKSBmb3IgYSBicmllZiBkZXNjcmlwdGlvbiBvZgotCQkgKiB3aGF0IHJhdGUgd2Ugc2hvdWxkIGNob29zZSB0byBUWCBBQ0tzLiAqLwotCQl0eF90aW1lID0gbGUxNl90b19jcHUoaWVlZTgwMjExX2dlbmVyaWNfZnJhbWVfZHVyYXRpb24oc2MtPmh3LAotCQkJCQkJCU5VTEwsIDEwLCByYXRlKSk7CisJLyoKKwkgKiBTZXQgVVNFQyBwYXJhbWV0ZXJzCisJICovCisJLyogU2V0IFVTRUMgY291bnRlciBvbiBQQ1UqLworCXVzZWMgPSBjbG9jayAtIDE7CisJdXNlYyA9IEFSNUtfUkVHX1NNKHVzZWMsIEFSNUtfVVNFQ18xKTsKIAotCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIHR4X3RpbWUsIHJlZyk7CisJLyogU2V0IHVzZWMgZHVyYXRpb24gb24gRENVICovCisJaWYgKGFoLT5haF92ZXJzaW9uICE9IEFSNUtfQVI1MjEwKQorCQlBUjVLX1JFR19XUklURV9CSVRTKGFoLCBBUjVLX0RDVV9HQkxfSUZTX01JU0MsCisJCQkJCUFSNUtfRENVX0dCTF9JRlNfTUlTQ19VU0VDX0RVUiwKKwkJCQkJY2xvY2spOwogCi0JCWlmICghKHJhdGUtPmZsYWdzICYgSUVFRTgwMjExX1JBVEVfU0hPUlRfUFJFQU1CTEUpKQotCQkJY29udGludWU7CisJLyogU2V0IDMyTUh6IFVTRUMgY291bnRlciAqLworCWlmICgoYWgtPmFoX3JhZGlvID09IEFSNUtfUkY1MTEyKSB8fAorCQkoYWgtPmFoX3JhZGlvID09IEFSNUtfUkY1NDEzKSB8fAorCQkoYWgtPmFoX3JhZGlvID09IEFSNUtfUkYyMzE2KSB8fAorCQkoYWgtPmFoX3JhZGlvID09IEFSNUtfUkYyMzE3KSkKKwkvKiBSZW1haW4gb24gNDBNSHogY2xvY2sgPyAqLworCQlzY2xvY2sgPSA0MCAtIDE7CisJZWxzZQorCQlzY2xvY2sgPSAzMiAtIDE7CisJc2Nsb2NrID0gQVI1S19SRUdfU00oc2Nsb2NrLCBBUjVLX1VTRUNfMzIpOwogCi0JCS8qCi0JCSAqIFdlJ3JlIG5vdCBkaXN0aW5ndWlzaGluZyBzaG9ydCBwcmVhbWJsZSBoZXJlLAotCQkgKiBUaGlzIGlzIHRydWUsIGFsbCB3ZSdsbCBnZXQgaXMgYSBsb25nZXIgdmFsdWUgaGVyZQotCQkgKiB3aGljaCBpcyBub3QgbmVjZXNzYXJpbGx5IGJhZC4gV2UgY291bGQgdXNlCi0JCSAqIGV4cG9ydCBpZWVlODAyMTFfZnJhbWVfZHVyYXRpb24oKSBidXQgdGhhdCBuZWVkcyB0byBiZQotCQkgKiBmaXhlZCBmaXJzdCB0byBiZSBwcm9wZXJseSB1c2VkIGJ5IG1hYzgwMjExMSBkcml2ZXJzOgorCS8qCisJICogU2V0IHR4L3J4IGxhdGVuY2llcworCSAqLworCXVzZWNfcmVnID0gYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfVVNFQ181MjExKTsKKwl0eGxhdCA9IEFSNUtfUkVHX01TKHVzZWNfcmVnLCBBUjVLX1VTRUNfVFhfTEFURU5DWV81MjExKTsKKwlyeGxhdCA9IEFSNUtfUkVHX01TKHVzZWNfcmVnLCBBUjVLX1VTRUNfUlhfTEFURU5DWV81MjExKTsKKworCS8qCisJICogNTIxMCBpbml0dmFscyBkb24ndCBpbmNsdWRlIHVzZWMgc2V0dGluZ3MKKwkgKiBzbyB3ZSBuZWVkIHRvIHVzZSBtYWdpYyB2YWx1ZXMgaGVyZSBmb3IKKwkgKiB0eC9yeCBsYXRlbmNpZXMKKwkgKi8KKwlpZiAoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUyMTApIHsKKwkJLyogc2FtZSBmb3IgdHVyYm8gKi8KKwkJdHhsYXQgPSBBUjVLX0lOSVRfVFhfTEFURU5DWV81MjEwOworCQlyeGxhdCA9IEFSNUtfSU5JVF9SWF9MQVRFTkNZXzUyMTA7CisJfQorCisJaWYgKGFoLT5haF9tYWNfc3JldiA8IEFSNUtfU1JFVl9BUjUyMTEpIHsKKwkJLyogNTMxMSBoYXMgZGlmZmVyZW50IHR4L3J4IGxhdGVuY3kgbWFza3MKKwkJICogZnJvbSA1MjExLCBzaW5jZSB3ZSBkZWFsIDUzMTEgdGhlIHNhbWUKKwkJICogYXMgNTIxMSB3aGVuIHNldHRpbmcgaW5pdHZhbHMsIHNoaWZ0CisJCSAqIHZhbHVlcyBoZXJlIHRvIHRoZWlyIHByb3BlciBsb2NhdGlvbnMKIAkJICoKLQkJICogIC0gcmVtb3ZlIGVycCBzdHVmZiBhbmQgbGV0IHRoZSByb3V0aW5lIGZpZ3VyZSBvZmRtCi0JCSAqICAgIGVycCByYXRlcwotCQkgKiAgLSByZW1vdmUgcGFzc2luZyBhcmd1bWVudCBpZWVlODAyMTFfbG9jYWwgYXMKLQkJICogICAgZHJpdmVycyBkb24ndCBoYXZlIGFjY2VzcyB0byBpdAotCQkgKiAgLSBtb3ZlIGRyaXZlcnMgdXNpbmcgaWVlZTgwMjExX2dlbmVyaWNfZnJhbWVfZHVyYXRpb24oKQotCQkgKiAgICB0byB0aGlzCi0JCSAqLwotCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIHR4X3RpbWUsCi0JCQlyZWcgKyAoQVI1S19TRVRfU0hPUlRfUFJFQU1CTEUgPDwgMikpOworCQkgKiBOb3RlOiBJbml0dmFscyBpbmRpY2F0ZSB0eC9yeC8gbGF0ZW5jaWVzCisJCSAqIGFyZSB0aGUgc2FtZSBmb3IgdHVyYm8gbW9kZSAqLworCQl0eGxhdCA9IEFSNUtfUkVHX1NNKHR4bGF0LCBBUjVLX1VTRUNfVFhfTEFURU5DWV81MjEwKTsKKwkJcnhsYXQgPSBBUjVLX1JFR19TTShyeGxhdCwgQVI1S19VU0VDX1JYX0xBVEVOQ1lfNTIxMCk7CisJfSBlbHNlCisJc3dpdGNoIChhaC0+YWhfYndtb2RlKSB7CisJY2FzZSBBUjVLX0JXTU9ERV8xME1IWjoKKwkJdHhsYXQgPSBBUjVLX1JFR19TTSh0eGxhdCAqIDIsCisJCQkJQVI1S19VU0VDX1RYX0xBVEVOQ1lfNTIxMSk7CisJCXJ4bGF0ID0gQVI1S19SRUdfU00oQVI1S19JTklUX1JYX0xBVF9NQVgsCisJCQkJQVI1S19VU0VDX1JYX0xBVEVOQ1lfNTIxMSk7CisJCXR4ZjJ0eHMgPSBBUjVLX0lOSVRfVFhGMlRYRF9TVEFSVF9ERUxBWV8xME1IWjsKKwkJYnJlYWs7CisJY2FzZSBBUjVLX0JXTU9ERV81TUhaOgorCQl0eGxhdCA9IEFSNUtfUkVHX1NNKHR4bGF0ICogNCwKKwkJCQlBUjVLX1VTRUNfVFhfTEFURU5DWV81MjExKTsKKwkJcnhsYXQgPSBBUjVLX1JFR19TTShBUjVLX0lOSVRfUlhfTEFUX01BWCwKKwkJCQlBUjVLX1VTRUNfUlhfTEFURU5DWV81MjExKTsKKwkJdHhmMnR4cyA9IEFSNUtfSU5JVF9UWEYyVFhEX1NUQVJUX0RFTEFZXzVNSFo7CisJCWJyZWFrOworCWNhc2UgQVI1S19CV01PREVfNDBNSFo6CisJCXR4bGF0ID0gQVI1S19JTklUX1RYX0xBVF9NSU47CisJCXJ4bGF0ID0gQVI1S19SRUdfU00ocnhsYXQgLyAyLAorCQkJCUFSNUtfVVNFQ19SWF9MQVRFTkNZXzUyMTEpOworCQl0eGYydHhzID0gQVI1S19JTklUX1RYRjJUWERfU1RBUlRfREVGQVVMVDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJdXNlY19yZWcgPSAodXNlYyB8IHNjbG9jayB8IHR4bGF0IHwgcnhsYXQpOworCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgdXNlY19yZWcsIEFSNUtfVVNFQyk7CisKKwkvKiBPbiA1MTEyIHNldCB0eCBmcmFuZSB0byB0eCBkYXRhIHN0YXJ0IGRlbGF5ICovCisJaWYgKGFoLT5haF9yYWRpbyA9PSBBUjVLX1JGNTExMikgeworCQlBUjVLX1JFR19XUklURV9CSVRTKGFoLCBBUjVLX1BIWV9SRl9DVEwyLAorCQkJCQlBUjVLX1BIWV9SRl9DVEwyX1RYRjJUWERfU1RBUlQsCisJCQkJCXR4ZjJ0eHMpOwogCX0KIH0KIAogLyoKKyAqIElmIHRoZXJlIGlzIGFuIGV4dGVybmFsIDMyS0h6IGNyeXN0YWwgYXZhaWxhYmxlLCB1c2UgaXQKKyAqIGFzIHJlZi4gY2xvY2sgaW5zdGVhZCBvZiAzMi80ME1IeiBjbG9jayBhbmQgYmFzZWJhbmQgY2xvY2tzCisgKiB0byBzYXZlIHBvd2VyIGR1cmluZyBzbGVlcCBvciByZXN0b3JlIG5vcm1hbCAzMi80ME1IegorICogb3BlcmF0aW9uLgorICoKKyAqIFhYWDogV2hlbiBvcGVyYXRpbmcgb24gMzJLSHogY2VydGFpbiBQSFkgcmVnaXN0ZXJzICgyNyAtIDMxLAorICoJMTIzIC0gMTI3KSByZXF1aXJlIGRlbGF5IG9uIGFjY2Vzcy4KKyAqLworc3RhdGljIHZvaWQgYXRoNWtfaHdfc2V0X3NsZWVwX2Nsb2NrKHN0cnVjdCBhdGg1a19odyAqYWgsIGJvb2wgZW5hYmxlKQoreworCXN0cnVjdCBhdGg1a19lZXByb21faW5mbyAqZWUgPSAmYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfZWVwcm9tOworCXUzMiBzY2FsLCBzcGVuZGluZzsKKworCS8qIE9ubHkgc2V0IDMyS0h6IHNldHRpbmdzIGlmIHdlIGhhdmUgYW4gZXh0ZXJuYWwKKwkgKiAzMktIeiBjcnlzdGFsIHByZXNlbnQgKi8KKwlpZiAoKEFSNUtfRUVQUk9NX0hBUzMyS0haQ1JZU1RBTChlZS0+ZWVfbWlzYzEpIHx8CisJQVI1S19FRVBST01fSEFTMzJLSFpDUllTVEFMX09MRChlZS0+ZWVfbWlzYzEpKSAmJgorCWVuYWJsZSkgeworCisJCS8qIDEgdXNlYy9jeWNsZSAqLworCQlBUjVLX1JFR19XUklURV9CSVRTKGFoLCBBUjVLX1VTRUNfNTIxMSwgQVI1S19VU0VDXzMyLCAxKTsKKwkJLyogU2V0IHVwIHRzZiBpbmNyZW1lbnQgb24gZWFjaCBjeWNsZSAqLworCQlBUjVLX1JFR19XUklURV9CSVRTKGFoLCBBUjVLX1RTRl9QQVJNLCBBUjVLX1RTRl9QQVJNX0lOQywgNjEpOworCisJCS8qIFNldCBiYXNlYmFuZCBzbGVlcCBjb250cm9sIHJlZ2lzdGVycworCQkgKiBhbmQgc2xlZXAgY29udHJvbCByYXRlICovCisJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgxZiwgQVI1S19QSFlfU0NSKTsKKworCQlpZiAoKGFoLT5haF9yYWRpbyA9PSBBUjVLX1JGNTExMikgfHwKKwkJKGFoLT5haF9yYWRpbyA9PSBBUjVLX1JGNTQxMykgfHwKKwkJKGFoLT5haF9yYWRpbyA9PSBBUjVLX1JGMjMxNikgfHwKKwkJKGFoLT5haF9tYWNfdmVyc2lvbiA9PSAoQVI1S19TUkVWX0FSMjQxNyA+PiA0KSkpCisJCQlzcGVuZGluZyA9IDB4MTQ7CisJCWVsc2UKKwkJCXNwZW5kaW5nID0gMHgxODsKKwkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBzcGVuZGluZywgQVI1S19QSFlfU1BFTkRJTkcpOworCisJCWlmICgoYWgtPmFoX3JhZGlvID09IEFSNUtfUkY1MTEyKSB8fAorCQkoYWgtPmFoX3JhZGlvID09IEFSNUtfUkY1NDEzKSB8fAorCQkoYWgtPmFoX21hY192ZXJzaW9uID09IChBUjVLX1NSRVZfQVIyNDE3ID4+IDQpKSkgeworCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDI2LCBBUjVLX1BIWV9TTE1UKTsKKwkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgwZCwgQVI1S19QSFlfU0NBTCk7CisJCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MDcsIEFSNUtfUEhZX1NDTE9DSyk7CisJCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4M2YsIEFSNUtfUEhZX1NERUxBWSk7CisJCQlBUjVLX1JFR19XUklURV9CSVRTKGFoLCBBUjVLX1BDSUNGRywKKwkJCQlBUjVLX1BDSUNGR19TTEVFUF9DTE9DS19SQVRFLCAweDAyKTsKKwkJfSBlbHNlIHsKKwkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgwYSwgQVI1S19QSFlfU0xNVCk7CisJCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MGMsIEFSNUtfUEhZX1NDQUwpOworCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDAzLCBBUjVLX1BIWV9TQ0xPQ0spOworCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDIwLCBBUjVLX1BIWV9TREVMQVkpOworCQkJQVI1S19SRUdfV1JJVEVfQklUUyhhaCwgQVI1S19QQ0lDRkcsCisJCQkJQVI1S19QQ0lDRkdfU0xFRVBfQ0xPQ0tfUkFURSwgMHgwMyk7CisJCX0KKworCQkvKiBFbmFibGUgc2xlZXAgY2xvY2sgb3BlcmF0aW9uICovCisJCUFSNUtfUkVHX0VOQUJMRV9CSVRTKGFoLCBBUjVLX1BDSUNGRywKKwkJCQlBUjVLX1BDSUNGR19TTEVFUF9DTE9DS19FTik7CisKKwl9IGVsc2UgeworCisJCS8qIERpc2FibGUgc2xlZXAgY2xvY2sgb3BlcmF0aW9uIGFuZAorCQkgKiByZXN0b3JlIGRlZmF1bHQgcGFyYW1ldGVycyAqLworCQlBUjVLX1JFR19ESVNBQkxFX0JJVFMoYWgsIEFSNUtfUENJQ0ZHLAorCQkJCUFSNUtfUENJQ0ZHX1NMRUVQX0NMT0NLX0VOKTsKKworCQlBUjVLX1JFR19XUklURV9CSVRTKGFoLCBBUjVLX1BDSUNGRywKKwkJCQlBUjVLX1BDSUNGR19TTEVFUF9DTE9DS19SQVRFLCAwKTsKKworCQkvKiBTZXQgREFDL0FEQyBkZWxheXMgKi8KKwkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDFmLCBBUjVLX1BIWV9TQ1IpOworCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIEFSNUtfUEhZX1NMTVRfMzJNSFosIEFSNUtfUEhZX1NMTVQpOworCisJCWlmIChhaC0+YWhfbWFjX3ZlcnNpb24gPT0gKEFSNUtfU1JFVl9BUjI0MTcgPj4gNCkpCisJCQlzY2FsID0gQVI1S19QSFlfU0NBTF8zMk1IWl8yNDE3OworCQllbHNlIGlmIChlZS0+ZWVfaXNfaGI2MykKKwkJCXNjYWwgPSBBUjVLX1BIWV9TQ0FMXzMyTUhaX0hCNjM7CisJCWVsc2UKKwkJCXNjYWwgPSBBUjVLX1BIWV9TQ0FMXzMyTUhaOworCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIHNjYWwsIEFSNUtfUEhZX1NDQUwpOworCisJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgQVI1S19QSFlfU0NMT0NLXzMyTUhaLCBBUjVLX1BIWV9TQ0xPQ0spOworCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIEFSNUtfUEhZX1NERUxBWV8zMk1IWiwgQVI1S19QSFlfU0RFTEFZKTsKKworCQlpZiAoKGFoLT5haF9yYWRpbyA9PSBBUjVLX1JGNTExMikgfHwKKwkJKGFoLT5haF9yYWRpbyA9PSBBUjVLX1JGNTQxMykgfHwKKwkJKGFoLT5haF9yYWRpbyA9PSBBUjVLX1JGMjMxNikgfHwKKwkJKGFoLT5haF9tYWNfdmVyc2lvbiA9PSAoQVI1S19TUkVWX0FSMjQxNyA+PiA0KSkpCisJCQlzcGVuZGluZyA9IDB4MTQ7CisJCWVsc2UKKwkJCXNwZW5kaW5nID0gMHgxODsKKwkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBzcGVuZGluZywgQVI1S19QSFlfU1BFTkRJTkcpOworCisJCS8qIFNldCB1cCB0c2YgaW5jcmVtZW50IG9uIGVhY2ggY3ljbGUgKi8KKwkJQVI1S19SRUdfV1JJVEVfQklUUyhhaCwgQVI1S19UU0ZfUEFSTSwgQVI1S19UU0ZfUEFSTV9JTkMsIDEpOworCX0KK30KKworCisvKioqKioqKioqKioqKioqKioqKioqXAorKiBSZXNldC9TbGVlcCBjb250cm9sICoKK1wqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCiAgKiBSZXNldCBjaGlwc2V0CiAgKi8KIHN0YXRpYyBpbnQgYXRoNWtfaHdfbmljX3Jlc2V0KHN0cnVjdCBhdGg1a19odyAqYWgsIHUzMiB2YWwpCkBAIC0yMzYsNiArMzYzLDY0IEBACiB9CiAKIC8qCisgKiBSZXNldCBBSEIgY2hpcHNldAorICogQVI1S19SRVNFVF9DVExfUENVIGZsYWcgcmVzZXRzIFdNQUMKKyAqIEFSNUtfUkVTRVRfQ1RMX0JBU0VCQU5EIGZsYWcgcmVzZXRzIFdCQgorICovCitzdGF0aWMgaW50IGF0aDVrX2h3X3dpc29jX3Jlc2V0KHN0cnVjdCBhdGg1a19odyAqYWgsIHUzMiBmbGFncykKK3sKKwl1MzIgbWFzayA9IGZsYWdzID8gZmxhZ3MgOiB+MFU7CisJdm9sYXRpbGUgdTMyICpyZWc7CisJdTMyIHJlZ3ZhbDsKKwl1MzIgdmFsID0gMDsKKworCS8qIGFoLT5haF9tYWNfc3JldiBpcyBub3QgYXZhaWxhYmxlIGF0IHRoaXMgcG9pbnQgeWV0ICovCisJaWYgKGFoLT5haF9zYy0+ZGV2aWQgPj0gQVI1S19TUkVWX0FSMjMxNV9SNikgeworCQlyZWcgPSAodTMyICopIEFSNUtfQVIyMzE1X1JFU0VUOworCQlpZiAobWFzayAmIEFSNUtfUkVTRVRfQ1RMX1BDVSkKKwkJCXZhbCB8PSBBUjVLX0FSMjMxNV9SRVNFVF9XTUFDOworCQlpZiAobWFzayAmIEFSNUtfUkVTRVRfQ1RMX0JBU0VCQU5EKQorCQkJdmFsIHw9IEFSNUtfQVIyMzE1X1JFU0VUX0JCX1dBUk07CisJfSBlbHNlIHsKKwkJcmVnID0gKHUzMiAqKSBBUjVLX0FSNTMxMl9SRVNFVDsKKwkJaWYgKHRvX3BsYXRmb3JtX2RldmljZShhaC0+YWhfc2MtPmRldiktPmlkID09IDApIHsKKwkJCWlmIChtYXNrICYgQVI1S19SRVNFVF9DVExfUENVKQorCQkJCXZhbCB8PSBBUjVLX0FSNTMxMl9SRVNFVF9XTUFDMDsKKwkJCWlmIChtYXNrICYgQVI1S19SRVNFVF9DVExfQkFTRUJBTkQpCisJCQkJdmFsIHw9IEFSNUtfQVI1MzEyX1JFU0VUX0JCMF9DT0xEIHwKKwkJCQkgICAgICAgQVI1S19BUjUzMTJfUkVTRVRfQkIwX1dBUk07CisJCX0gZWxzZSB7CisJCQlpZiAobWFzayAmIEFSNUtfUkVTRVRfQ1RMX1BDVSkKKwkJCQl2YWwgfD0gQVI1S19BUjUzMTJfUkVTRVRfV01BQzE7CisJCQlpZiAobWFzayAmIEFSNUtfUkVTRVRfQ1RMX0JBU0VCQU5EKQorCQkJCXZhbCB8PSBBUjVLX0FSNTMxMl9SRVNFVF9CQjFfQ09MRCB8CisJCQkJICAgICAgIEFSNUtfQVI1MzEyX1JFU0VUX0JCMV9XQVJNOworCQl9CisJfQorCisJLyogUHV0IEJCL01BQyBpbnRvIHJlc2V0ICovCisJcmVndmFsID0gX19yYXdfcmVhZGwocmVnKTsKKwlfX3Jhd193cml0ZWwocmVndmFsIHwgdmFsLCByZWcpOworCXJlZ3ZhbCA9IF9fcmF3X3JlYWRsKHJlZyk7CisJdWRlbGF5KDEwMCk7CisKKwkvKiBCcmluZyBCQi9NQUMgb3V0IG9mIHJlc2V0ICovCisJX19yYXdfd3JpdGVsKHJlZ3ZhbCAmIH52YWwsIHJlZyk7CisJcmVndmFsID0gX19yYXdfcmVhZGwocmVnKTsKKworCS8qCisJICogUmVzZXQgY29uZmlndXJhdGlvbiByZWdpc3RlciAoZm9yIGh3IGJ5dGUtc3dhcCkuIE5vdGUgdGhhdCB0aGlzCisJICogaXMgb25seSBzZXQgZm9yIGJpZyBlbmRpYW4uIFdlIGRvIHRoZSBuZWNlc3NhcnkgbWFnaWMgaW4KKwkgKiBBUjVLX0lOSVRfQ0ZHLgorCSAqLworCWlmICgoZmxhZ3MgJiBBUjVLX1JFU0VUX0NUTF9QQ1UpID09IDApCisJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgQVI1S19JTklUX0NGRywgQVI1S19DRkcpOworCisJcmV0dXJuIDA7Cit9CisKKworLyoKICAqIFNsZWVwIGNvbnRyb2wKICAqLwogc3RhdGljIGludCBhdGg1a19od19zZXRfcG93ZXIoc3RydWN0IGF0aDVrX2h3ICphaCwgZW51bSBhdGg1a19wb3dlcl9tb2RlIG1vZGUsCkBAIC0zMzQsNiArNTE5LDkgQEAKIAl1MzIgYnVzX2ZsYWdzOwogCWludCByZXQ7CiAKKwlpZiAoYXRoNWtfZ2V0X2J1c190eXBlKGFoKSA9PSBBVEhfQUhCKQorCQlyZXR1cm4gMDsKKwogCS8qIE1ha2Ugc3VyZSBkZXZpY2UgaXMgYXdha2UgKi8KIAlyZXQgPSBhdGg1a19od19zZXRfcG93ZXIoYWgsIEFSNUtfUE1fQVdBS0UsIHRydWUsIDApOwogCWlmIChyZXQpIHsKQEAgLTM0OSw3ICs1MzcsNyBAQAogCSAqIHdlIGluZ29yZSB0aGF0IGZsYWcgZm9yIFBDSS1FIGNhcmRzLiBPbiBQQ0kgY2FyZHMKIAkgKiB0aGlzIGZsYWcgZ2V0cyBjbGVhcmVkIGFmdGVyIDY0IFBDSSBjbG9ja3MuCiAJICovCi0JYnVzX2ZsYWdzID0gKHBkZXYtPmlzX3BjaWUpID8gMCA6IEFSNUtfUkVTRVRfQ1RMX1BDSTsKKwlidXNfZmxhZ3MgPSAocGRldiAmJiBwY2lfaXNfcGNpZShwZGV2KSkgPyAwIDogQVI1S19SRVNFVF9DVExfUENJOwogCiAJaWYgKGFoLT5haF92ZXJzaW9uID09IEFSNUtfQVI1MjEwKSB7CiAJCXJldCA9IGF0aDVrX2h3X25pY19yZXNldChhaCwgQVI1S19SRVNFVF9DVExfUENVIHwKQEAgLTM3OCw3ICs1NjYsNiBAQAogCiAvKgogICogQnJpbmcgdXAgTUFDICsgUEhZIENoaXBzIGFuZCBwcm9ncmFtIFBMTAotICogVE9ETzogSGFsZi9RdWFydGVyIHJhdGUgc3VwcG9ydAogICovCiBpbnQgYXRoNWtfaHdfbmljX3dha2V1cChzdHJ1Y3QgYXRoNWtfaHcgKmFoLCBpbnQgZmxhZ3MsIGJvb2wgaW5pdGlhbCkKIHsKQEAgLTM5MCwxMSArNTc3LDEzIEBACiAJbW9kZSA9IDA7CiAJY2xvY2sgPSAwOwogCi0JLyogV2FrZXVwIHRoZSBkZXZpY2UgKi8KLQlyZXQgPSBhdGg1a19od19zZXRfcG93ZXIoYWgsIEFSNUtfUE1fQVdBS0UsIHRydWUsIDApOwotCWlmIChyZXQpIHsKLQkJQVRINUtfRVJSKGFoLT5haF9zYywgImZhaWxlZCB0byB3YWtldXAgdGhlIE1BQyBDaGlwXG4iKTsKLQkJcmV0dXJuIHJldDsKKwlpZiAoKGF0aDVrX2dldF9idXNfdHlwZShhaCkgIT0gQVRIX0FIQikgfHwgIWluaXRpYWwpIHsKKwkJLyogV2FrZXVwIHRoZSBkZXZpY2UgKi8KKwkJcmV0ID0gYXRoNWtfaHdfc2V0X3Bvd2VyKGFoLCBBUjVLX1BNX0FXQUtFLCB0cnVlLCAwKTsKKwkJaWYgKHJldCkgeworCQkJQVRINUtfRVJSKGFoLT5haF9zYywgImZhaWxlZCB0byB3YWtldXAgdGhlIE1BQyBDaGlwXG4iKTsKKwkJCXJldHVybiByZXQ7CisJCX0KIAl9CiAKIAkvKgpAQCAtNDA1LDcgKzU5NCw3IEBACiAJICogd2UgaW5nb3JlIHRoYXQgZmxhZyBmb3IgUENJLUUgY2FyZHMuIE9uIFBDSSBjYXJkcwogCSAqIHRoaXMgZmxhZyBnZXRzIGNsZWFyZWQgYWZ0ZXIgNjQgUENJIGNsb2Nrcy4KIAkgKi8KLQlidXNfZmxhZ3MgPSAocGRldi0+aXNfcGNpZSkgPyAwIDogQVI1S19SRVNFVF9DVExfUENJOworCWJ1c19mbGFncyA9IChwZGV2ICYmIHBjaV9pc19wY2llKHBkZXYpKSA/IDAgOiBBUjVLX1JFU0VUX0NUTF9QQ0k7CiAKIAlpZiAoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUyMTApIHsKIAkJcmV0ID0gYXRoNWtfaHdfbmljX3Jlc2V0KGFoLCBBUjVLX1JFU0VUX0NUTF9QQ1UgfApAQCAtNDEzLDggKzYwMiwxMiBAQAogCQkJQVI1S19SRVNFVF9DVExfUEhZIHwgQVI1S19SRVNFVF9DVExfUENJKTsKIAkJCW1kZWxheSgyKTsKIAl9IGVsc2UgewotCQlyZXQgPSBhdGg1a19od19uaWNfcmVzZXQoYWgsIEFSNUtfUkVTRVRfQ1RMX1BDVSB8Ci0JCQlBUjVLX1JFU0VUX0NUTF9CQVNFQkFORCB8IGJ1c19mbGFncyk7CisJCWlmIChhdGg1a19nZXRfYnVzX3R5cGUoYWgpID09IEFUSF9BSEIpCisJCQlyZXQgPSBhdGg1a19od193aXNvY19yZXNldChhaCwgQVI1S19SRVNFVF9DVExfUENVIHwKKwkJCQlBUjVLX1JFU0VUX0NUTF9CQVNFQkFORCk7CisJCWVsc2UKKwkJCXJldCA9IGF0aDVrX2h3X25pY19yZXNldChhaCwgQVI1S19SRVNFVF9DVExfUENVIHwKKwkJCQlBUjVLX1JFU0VUX0NUTF9CQVNFQkFORCB8IGJ1c19mbGFncyk7CiAJfQogCiAJaWYgKHJldCkgewpAQCAtNDI5LDkgKzYyMiwxNSBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAotCS8qIC4uLmNsZWFyIHJlc2V0IGNvbnRyb2wgcmVnaXN0ZXIgYW5kIHB1bGwgZGV2aWNlIG91dCBvZgotCSAqIHdhcm0gcmVzZXQgKi8KLQlpZiAoYXRoNWtfaHdfbmljX3Jlc2V0KGFoLCAwKSkgeworCS8qIC4uLnJlc2V0IGNvbmZpZ3VyYXRpb24gcmVnaXRlciBvbiBXaXNvYyAuLi4KKwkgKiAuLi5jbGVhciByZXNldCBjb250cm9sIHJlZ2lzdGVyIGFuZCBwdWxsIGRldmljZSBvdXQgb2YKKwkgKiB3YXJtIHJlc2V0IG9uIG90aGVycyAqLworCWlmIChhdGg1a19nZXRfYnVzX3R5cGUoYWgpID09IEFUSF9BSEIpCisJCXJldCA9IGF0aDVrX2h3X3dpc29jX3Jlc2V0KGFoLCAwKTsKKwllbHNlCisJCXJldCA9IGF0aDVrX2h3X25pY19yZXNldChhaCwgMCk7CisKKwlpZiAocmV0KSB7CiAJCUFUSDVLX0VSUihhaC0+YWhfc2MsICJmYWlsZWQgdG8gd2FybSByZXNldCB0aGUgTUFDIENoaXBcbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CkBAIC00NjYsNyArNjY1LDggQEAKIAkJCQkgKiBDQ0sgaGVhZGVycykgb3BlcmF0aW9uLiBXZSBuZWVkIHRvIHRlc3QKIAkJCQkgKiB0aGlzLCA1MjExIG1pZ2h0IHN1cHBvcnQgb2ZkbS1vbmx5IGcgYWZ0ZXIKIAkJCQkgKiBhbGwsIHRoZXJlIGFyZSBhbHNvIGluaXRpYWwgcmVnaXN0ZXIgdmFsdWVzCi0JCQkJICogaW4gdGhlIGNvZGUgZm9yIGcgbW9kZSAoc2VlIGluaXR2YWxzLmMpLiAqLworCQkJCSAqIGluIHRoZSBjb2RlIGZvciBnIG1vZGUgKHNlZSBpbml0dmFscy5jKS4KKwkJCQkgKi8KIAkJCQlpZiAoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUyMTEpCiAJCQkJCW1vZGUgfD0gQVI1S19QSFlfTU9ERV9NT0RfT0ZETTsKIAkJCQllbHNlCkBAIC00NzksNiArNjc5LDcgQEAKIAkJfSBlbHNlIGlmIChmbGFncyAmIENIQU5ORUxfNUdIWikgewogCQkJbW9kZSB8PSBBUjVLX1BIWV9NT0RFX0ZSRVFfNUdIWjsKIAorCQkJLyogRGlmZmVyZW50IFBMTCBzZXR0aW5nIGZvciA1NDEzICovCiAJCQlpZiAoYWgtPmFoX3JhZGlvID09IEFSNUtfUkY1NDEzKQogCQkJCWNsb2NrID0gQVI1S19QSFlfUExMXzQwTUhaXzU0MTM7CiAJCQllbHNlCkBAIC00OTYsMTIgKzY5NywyOSBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAotCQlpZiAoZmxhZ3MgJiBDSEFOTkVMX1RVUkJPKQotCQkJdHVyYm8gPSBBUjVLX1BIWV9UVVJCT19NT0RFIHwgQVI1S19QSFlfVFVSQk9fU0hPUlQ7CisJCS8qWFhYOiBDYW4gYndtb2RlIGJlIHVzZWQgd2l0aCBkeW5hbWljIG1vZGUgPworCQkgKiAoSSBkb24ndCB0aGluayBpdCBzdXBwb3J0cyA0NE1IeikgKi8KKwkJLyogT24gMjQyNSBpbml0dmFscyBUVVJCT19TSE9SVCBpcyBub3QgcHJlc3NlbnQgKi8KKwkJaWYgKGFoLT5haF9id21vZGUgPT0gQVI1S19CV01PREVfNDBNSFopIHsKKwkJCXR1cmJvID0gQVI1S19QSFlfVFVSQk9fTU9ERSB8CisJCQkJKGFoLT5haF9yYWRpbyA9PSBBUjVLX1JGMjQyNSkgPyAwIDoKKwkJCQlBUjVLX1BIWV9UVVJCT19TSE9SVDsKKwkJfSBlbHNlIGlmIChhaC0+YWhfYndtb2RlICE9IEFSNUtfQldNT0RFX0RFRkFVTFQpIHsKKwkJCWlmIChhaC0+YWhfcmFkaW8gPT0gQVI1S19SRjU0MTMpIHsKKwkJCQltb2RlIHw9IChhaC0+YWhfYndtb2RlID09IEFSNUtfQldNT0RFXzEwTUhaKSA/CisJCQkJCUFSNUtfUEhZX01PREVfSEFMRl9SQVRFIDoKKwkJCQkJQVI1S19QSFlfTU9ERV9RVUFSVEVSX1JBVEU7CisJCQl9IGVsc2UgaWYgKGFoLT5haF92ZXJzaW9uID09IEFSNUtfQVI1MjEyKSB7CisJCQkJY2xvY2sgfD0gKGFoLT5haF9id21vZGUgPT0gQVI1S19CV01PREVfMTBNSFopID8KKwkJCQkJQVI1S19QSFlfUExMX0hBTEZfUkFURSA6CisJCQkJCUFSNUtfUEhZX1BMTF9RVUFSVEVSX1JBVEU7CisJCQl9CisJCX0KKwogCX0gZWxzZSB7IC8qIFJlc2V0IHRoZSBkZXZpY2UgKi8KIAogCQkvKiAuLi5lbmFibGUgQXRoZXJvcyB0dXJibyBtb2RlIGlmIHJlcXVlc3RlZCAqLwotCQlpZiAoZmxhZ3MgJiBDSEFOTkVMX1RVUkJPKQorCQlpZiAoYWgtPmFoX2J3bW9kZSA9PSBBUjVLX0JXTU9ERV80ME1IWikKIAkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgQVI1S19QSFlfVFVSQk9fTU9ERSwKIAkJCQkJQVI1S19QSFlfVFVSQk8pOwogCX0KQEAgLTUyMiwxMDcgKzc0MCwxMCBAQAogCXJldHVybiAwOwogfQogCi0vKgotICogSWYgdGhlcmUgaXMgYW4gZXh0ZXJuYWwgMzJLSHogY3J5c3RhbCBhdmFpbGFibGUsIHVzZSBpdAotICogYXMgcmVmLiBjbG9jayBpbnN0ZWFkIG9mIDMyLzQwTUh6IGNsb2NrIGFuZCBiYXNlYmFuZCBjbG9ja3MKLSAqIHRvIHNhdmUgcG93ZXIgZHVyaW5nIHNsZWVwIG9yIHJlc3RvcmUgbm9ybWFsIDMyLzQwTUh6Ci0gKiBvcGVyYXRpb24uCi0gKgotICogWFhYOiBXaGVuIG9wZXJhdGluZyBvbiAzMktIeiBjZXJ0YWluIFBIWSByZWdpc3RlcnMgKDI3IC0gMzEsCi0gKiAJMTIzIC0gMTI3KSByZXF1aXJlIGRlbGF5IG9uIGFjY2Vzcy4KLSAqLwotc3RhdGljIHZvaWQgYXRoNWtfaHdfc2V0X3NsZWVwX2Nsb2NrKHN0cnVjdCBhdGg1a19odyAqYWgsIGJvb2wgZW5hYmxlKQotewotCXN0cnVjdCBhdGg1a19lZXByb21faW5mbyAqZWUgPSAmYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfZWVwcm9tOwotCXUzMiBzY2FsLCBzcGVuZGluZywgdXNlYzMyOwogCi0JLyogT25seSBzZXQgMzJLSHogc2V0dGluZ3MgaWYgd2UgaGF2ZSBhbiBleHRlcm5hbAotCSAqIDMyS0h6IGNyeXN0YWwgcHJlc2VudCAqLwotCWlmICgoQVI1S19FRVBST01fSEFTMzJLSFpDUllTVEFMKGVlLT5lZV9taXNjMSkgfHwKLQlBUjVLX0VFUFJPTV9IQVMzMktIWkNSWVNUQUxfT0xEKGVlLT5lZV9taXNjMSkpICYmCi0JZW5hYmxlKSB7Ci0KLQkJLyogMSB1c2VjL2N5Y2xlICovCi0JCUFSNUtfUkVHX1dSSVRFX0JJVFMoYWgsIEFSNUtfVVNFQ181MjExLCBBUjVLX1VTRUNfMzIsIDEpOwotCQkvKiBTZXQgdXAgdHNmIGluY3JlbWVudCBvbiBlYWNoIGN5Y2xlICovCi0JCUFSNUtfUkVHX1dSSVRFX0JJVFMoYWgsIEFSNUtfVFNGX1BBUk0sIEFSNUtfVFNGX1BBUk1fSU5DLCA2MSk7Ci0KLQkJLyogU2V0IGJhc2ViYW5kIHNsZWVwIGNvbnRyb2wgcmVnaXN0ZXJzCi0JCSAqIGFuZCBzbGVlcCBjb250cm9sIHJhdGUgKi8KLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDFmLCBBUjVLX1BIWV9TQ1IpOwotCi0JCWlmICgoYWgtPmFoX3JhZGlvID09IEFSNUtfUkY1MTEyKSB8fAotCQkoYWgtPmFoX3JhZGlvID09IEFSNUtfUkY1NDEzKSB8fAotCQkoYWgtPmFoX21hY192ZXJzaW9uID09IChBUjVLX1NSRVZfQVIyNDE3ID4+IDQpKSkKLQkJCXNwZW5kaW5nID0gMHgxNDsKLQkJZWxzZQotCQkJc3BlbmRpbmcgPSAweDE4OwotCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIHNwZW5kaW5nLCBBUjVLX1BIWV9TUEVORElORyk7Ci0KLQkJaWYgKChhaC0+YWhfcmFkaW8gPT0gQVI1S19SRjUxMTIpIHx8Ci0JCShhaC0+YWhfcmFkaW8gPT0gQVI1S19SRjU0MTMpIHx8Ci0JCShhaC0+YWhfbWFjX3ZlcnNpb24gPT0gKEFSNUtfU1JFVl9BUjI0MTcgPj4gNCkpKSB7Ci0JCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MjYsIEFSNUtfUEhZX1NMTVQpOwotCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDBkLCBBUjVLX1BIWV9TQ0FMKTsKLQkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgwNywgQVI1S19QSFlfU0NMT0NLKTsKLQkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgzZiwgQVI1S19QSFlfU0RFTEFZKTsKLQkJCUFSNUtfUkVHX1dSSVRFX0JJVFMoYWgsIEFSNUtfUENJQ0ZHLAotCQkJCUFSNUtfUENJQ0ZHX1NMRUVQX0NMT0NLX1JBVEUsIDB4MDIpOwotCQl9IGVsc2UgewotCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDBhLCBBUjVLX1BIWV9TTE1UKTsKLQkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgwYywgQVI1S19QSFlfU0NBTCk7Ci0JCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MDMsIEFSNUtfUEhZX1NDTE9DSyk7Ci0JCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MjAsIEFSNUtfUEhZX1NERUxBWSk7Ci0JCQlBUjVLX1JFR19XUklURV9CSVRTKGFoLCBBUjVLX1BDSUNGRywKLQkJCQlBUjVLX1BDSUNGR19TTEVFUF9DTE9DS19SQVRFLCAweDAzKTsKLQkJfQotCi0JCS8qIEVuYWJsZSBzbGVlcCBjbG9jayBvcGVyYXRpb24gKi8KLQkJQVI1S19SRUdfRU5BQkxFX0JJVFMoYWgsIEFSNUtfUENJQ0ZHLAotCQkJCUFSNUtfUENJQ0ZHX1NMRUVQX0NMT0NLX0VOKTsKLQotCX0gZWxzZSB7Ci0KLQkJLyogRGlzYWJsZSBzbGVlcCBjbG9jayBvcGVyYXRpb24gYW5kCi0JCSAqIHJlc3RvcmUgZGVmYXVsdCBwYXJhbWV0ZXJzICovCi0JCUFSNUtfUkVHX0RJU0FCTEVfQklUUyhhaCwgQVI1S19QQ0lDRkcsCi0JCQkJQVI1S19QQ0lDRkdfU0xFRVBfQ0xPQ0tfRU4pOwotCi0JCUFSNUtfUkVHX1dSSVRFX0JJVFMoYWgsIEFSNUtfUENJQ0ZHLAotCQkJCUFSNUtfUENJQ0ZHX1NMRUVQX0NMT0NLX1JBVEUsIDApOwotCi0JCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgxZiwgQVI1S19QSFlfU0NSKTsKLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBBUjVLX1BIWV9TTE1UXzMyTUhaLCBBUjVLX1BIWV9TTE1UKTsKLQotCQlpZiAoYWgtPmFoX21hY192ZXJzaW9uID09IChBUjVLX1NSRVZfQVIyNDE3ID4+IDQpKQotCQkJc2NhbCA9IEFSNUtfUEhZX1NDQUxfMzJNSFpfMjQxNzsKLQkJZWxzZSBpZiAoZWUtPmVlX2lzX2hiNjMpCi0JCQlzY2FsID0gQVI1S19QSFlfU0NBTF8zMk1IWl9IQjYzOwotCQllbHNlCi0JCQlzY2FsID0gQVI1S19QSFlfU0NBTF8zMk1IWjsKLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBzY2FsLCBBUjVLX1BIWV9TQ0FMKTsKLQotCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIEFSNUtfUEhZX1NDTE9DS18zMk1IWiwgQVI1S19QSFlfU0NMT0NLKTsKLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBBUjVLX1BIWV9TREVMQVlfMzJNSFosIEFSNUtfUEhZX1NERUxBWSk7Ci0KLQkJaWYgKChhaC0+YWhfcmFkaW8gPT0gQVI1S19SRjUxMTIpIHx8Ci0JCShhaC0+YWhfcmFkaW8gPT0gQVI1S19SRjU0MTMpIHx8Ci0JCShhaC0+YWhfbWFjX3ZlcnNpb24gPT0gKEFSNUtfU1JFVl9BUjI0MTcgPj4gNCkpKQotCQkJc3BlbmRpbmcgPSAweDE0OwotCQllbHNlCi0JCQlzcGVuZGluZyA9IDB4MTg7Ci0JCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgc3BlbmRpbmcsIEFSNUtfUEhZX1NQRU5ESU5HKTsKLQotCQlpZiAoKGFoLT5haF9yYWRpbyA9PSBBUjVLX1JGNTExMikgfHwKLQkJKGFoLT5haF9yYWRpbyA9PSBBUjVLX1JGNTQxMykpCi0JCQl1c2VjMzIgPSAzOTsKLQkJZWxzZQotCQkJdXNlYzMyID0gMzE7Ci0JCUFSNUtfUkVHX1dSSVRFX0JJVFMoYWgsIEFSNUtfVVNFQ181MjExLCBBUjVLX1VTRUNfMzIsIHVzZWMzMik7Ci0KLQkJQVI1S19SRUdfV1JJVEVfQklUUyhhaCwgQVI1S19UU0ZfUEFSTSwgQVI1S19UU0ZfUEFSTV9JTkMsIDEpOwotCX0KLX0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKKyogUG9zdC1pbml0dmFscyByZWdpc3RlciBtb2RpZmljYXRpb25zICoKK1wqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyogVE9ETzogSGFsZi9RdWFydGVyIHJhdGUgKi8KIHN0YXRpYyB2b2lkIGF0aDVrX2h3X3R3ZWFrX2luaXR2YWxfc2V0dGluZ3Moc3RydWN0IGF0aDVrX2h3ICphaCwKQEAgLTY2MywyMiArNzg0LDEwIEBACiAJCUFSNUtfUkVHX0RJU0FCTEVfQklUUyhhaCwgQVI1S19UWENGRywKIAkJCQlBUjVLX1RYQ0ZHX0RDVV9EQkxfQlVGX0RJUyk7CiAKLQkvKiBTZXQgREFDL0FEQyBkZWxheXMgKi8KLQlpZiAoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUyMTIpIHsKLQkJdTMyIHNjYWw7Ci0JCXN0cnVjdCBhdGg1a19lZXByb21faW5mbyAqZWUgPSAmYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfZWVwcm9tOwotCQlpZiAoYWgtPmFoX21hY192ZXJzaW9uID09IChBUjVLX1NSRVZfQVIyNDE3ID4+IDQpKQotCQkJc2NhbCA9IEFSNUtfUEhZX1NDQUxfMzJNSFpfMjQxNzsKLQkJZWxzZSBpZiAoZWUtPmVlX2lzX2hiNjMpCi0JCQlzY2FsID0gQVI1S19QSFlfU0NBTF8zMk1IWl9IQjYzOwotCQllbHNlCi0JCQlzY2FsID0gQVI1S19QSFlfU0NBTF8zMk1IWjsKLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBzY2FsLCBBUjVLX1BIWV9TQ0FMKTsKLQl9Ci0KIAkvKiBTZXQgZmFzdCBBREMgKi8KIAlpZiAoKGFoLT5haF9yYWRpbyA9PSBBUjVLX1JGNTQxMykgfHwKLQkoYWgtPmFoX21hY192ZXJzaW9uID09IChBUjVLX1NSRVZfQVIyNDE3ID4+IDQpKSkgeworCQkoYWgtPmFoX3JhZGlvID09IEFSNUtfUkYyMzE3KSB8fAorCQkoYWgtPmFoX21hY192ZXJzaW9uID09IChBUjVLX1NSRVZfQVIyNDE3ID4+IDQpKSkgewogCQl1MzIgZmFzdF9hZGMgPSB0cnVlOwogCiAJCWlmIChjaGFubmVsLT5jZW50ZXJfZnJlcSA9PSAyNDYyIHx8CkBAIC03MDYsMzMgKzgxNSw2OCBAQAogCX0KIAogCWlmIChhaC0+YWhfbWFjX3NyZXYgPCBBUjVLX1NSRVZfQVI1MjExKSB7Ci0JCXUzMiB1c2VjX3JlZzsKLQkJLyogNTMxMSBoYXMgZGlmZmVyZW50IHR4L3J4IGxhdGVuY3kgbWFza3MKLQkJICogZnJvbSA1MjExLCBzaW5jZSB3ZSBkZWFsIDUzMTEgdGhlIHNhbWUKLQkJICogYXMgNTIxMSB3aGVuIHNldHRpbmcgaW5pdHZhbHMsIHNoaWZ0Ci0JCSAqIHZhbHVlcyBoZXJlIHRvIHRoZWlyIHByb3BlciBsb2NhdGlvbnMgKi8KLQkJdXNlY19yZWcgPSBhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19VU0VDXzUyMTEpOwotCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIHVzZWNfcmVnICYgKEFSNUtfVVNFQ18xIHwKLQkJCQlBUjVLX1VTRUNfMzIgfAotCQkJCUFSNUtfVVNFQ19UWF9MQVRFTkNZXzUyMTEgfAotCQkJCUFSNUtfUkVHX1NNKDI5LAotCQkJCUFSNUtfVVNFQ19SWF9MQVRFTkNZXzUyMTApKSwKLQkJCQlBUjVLX1VTRUNfNTIxMSk7CiAJCS8qIENsZWFyIFFDVS9EQ1UgY2xvY2sgZ2F0aW5nIHJlZ2lzdGVyICovCiAJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMCwgQVI1S19RQ1VEQ1VfQ0xLR1QpOwogCQkvKiBTZXQgREFDL0FEQyBkZWxheXMgKi8KLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDA4LCBBUjVLX1BIWV9TQ0FMKTsKKwkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBBUjVLX1BIWV9TQ0FMXzMyTUhaXzUzMTEsCisJCQkJCQlBUjVLX1BIWV9TQ0FMKTsKIAkJLyogRW5hYmxlIFBDVSBGSUZPIGNvcnJ1cHRpb24gRUNPICovCiAJCUFSNUtfUkVHX0VOQUJMRV9CSVRTKGFoLCBBUjVLX0RJQUdfU1dfNTIxMSwKIAkJCQkJQVI1S19ESUFHX1NXX0VDT19FTkFCTEUpOwogCX0KKworCWlmIChhaC0+YWhfYndtb2RlKSB7CisJCS8qIEluY3JlYXNlIFBIWSBzd2l0Y2ggYW5kIEFHQyBzZXR0bGluZyB0aW1lCisJCSAqIG9uIHR1cmJvIG1vZGUgKGF0aDVrX2h3X2NvbW1pdF9lZXByb21fc2V0dGluZ3MKKwkJICogd2lsbCBvdmVycmlkZSBzZXR0bGluZyB0aW1lIGlmIGF2YWlsYWJsZSkgKi8KKwkJaWYgKGFoLT5haF9id21vZGUgPT0gQVI1S19CV01PREVfNDBNSFopIHsKKworCQkJQVI1S19SRUdfV1JJVEVfQklUUyhhaCwgQVI1S19QSFlfU0VUVExJTkcsCisJCQkJCQlBUjVLX1BIWV9TRVRUTElOR19BR0MsCisJCQkJCQlBUjVLX0FHQ19TRVRUTElOR19UVVJCTyk7CisKKwkJCS8qIFhYWDogSW5pdHZhbHMgaW5kaWNhdGUgd2Ugb25seSBpbmNyZWFzZQorCQkJICogc3dpdGNoIHRpbWUgb24gQVI1MjEyLCA1MjExIGFuZCA1MjEwCisJCQkgKiBvbmx5IGNoYW5nZSBhZ2MgdGltZSAoYnVnPykgKi8KKwkJCWlmIChhaC0+YWhfdmVyc2lvbiA9PSBBUjVLX0FSNTIxMikKKwkJCQlBUjVLX1JFR19XUklURV9CSVRTKGFoLCBBUjVLX1BIWV9TRVRUTElORywKKwkJCQkJCUFSNUtfUEhZX1NFVFRMSU5HX1NXSVRDSCwKKwkJCQkJCUFSNUtfU1dJVENIX1NFVFRMSU5HX1RVUkJPKTsKKworCQkJaWYgKGFoLT5haF92ZXJzaW9uID09IEFSNUtfQVI1MjEwKSB7CisJCQkJLyogU2V0IEZyYW1lIENvbnRyb2wgUmVnaXN0ZXIgKi8KKwkJCQlhdGg1a19od19yZWdfd3JpdGUoYWgsCisJCQkJCShBUjVLX1BIWV9GUkFNRV9DVExfSU5JIHwKKwkJCQkJQVI1S19QSFlfVFVSQk9fTU9ERSB8CisJCQkJCUFSNUtfUEhZX1RVUkJPX1NIT1JUIHwgMHgyMDIwKSwKKwkJCQkJQVI1S19QSFlfRlJBTUVfQ1RMXzUyMTApOworCQkJfQorCQkvKiBPbiA1NDEzIFBIWSBmb3JjZSB3aW5kb3cgbGVuZ3RoIGZvciBoYWxmL3F1YXJ0ZXIgcmF0ZSovCisJCX0gZWxzZSBpZiAoKGFoLT5haF9tYWNfc3JldiA+PSBBUjVLX1NSRVZfQVI1NDI0KSAmJgorCQkoYWgtPmFoX21hY19zcmV2IDw9IEFSNUtfU1JFVl9BUjU0MTQpKSB7CisJCQlBUjVLX1JFR19XUklURV9CSVRTKGFoLCBBUjVLX1BIWV9GUkFNRV9DVExfNTIxMSwKKwkJCQkJCUFSNUtfUEhZX0ZSQU1FX0NUTF9XSU5fTEVOLAorCQkJCQkJMyk7CisJCX0KKwl9IGVsc2UgaWYgKGFoLT5haF92ZXJzaW9uID09IEFSNUtfQVI1MjEwKSB7CisJCS8qIFNldCBGcmFtZSBDb250cm9sIFJlZ2lzdGVyIGZvciBub3JtYWwgb3BlcmF0aW9uICovCisJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgKEFSNUtfUEhZX0ZSQU1FX0NUTF9JTkkgfCAweDEwMjApLAorCQkJCQkJQVI1S19QSFlfRlJBTUVfQ1RMXzUyMTApOworCX0KIH0KIAogc3RhdGljIHZvaWQgYXRoNWtfaHdfY29tbWl0X2VlcHJvbV9zZXR0aW5ncyhzdHJ1Y3QgYXRoNWtfaHcgKmFoLAotCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwsIHU4IGVlX21vZGUpCisJCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCkKIHsKIAlzdHJ1Y3QgYXRoNWtfZWVwcm9tX2luZm8gKmVlID0gJmFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX2VlcHJvbTsKIAlzMTYgY2NrX29mZG1fcHdyX2RlbHRhOworCXU4IGVlX21vZGU7CisKKwkvKiBUT0RPOiBBZGQgc3VwcG9ydCBmb3IgQVI1MjEwIEVFUFJPTSAqLworCWlmIChhaC0+YWhfdmVyc2lvbiA9PSBBUjVLX0FSNTIxMCkKKwkJcmV0dXJuOworCisJZWVfbW9kZSA9IGF0aDVrX2VlcHJvbV9tb2RlX2Zyb21fY2hhbm5lbChjaGFubmVsKTsKIAogCS8qIEFkanVzdCBwb3dlciBkZWx0YSBmb3IgY2hhbm5lbCAxNCAqLwogCWlmIChjaGFubmVsLT5jZW50ZXJfZnJlcSA9PSAyNDg0KQpAQCAtNzcyLDcgKzkxNiw3IEBACiAJCUFSNUtfUEhZX05GX1NWQUwoZWUtPmVlX25vaXNlX2Zsb29yX3RocltlZV9tb2RlXSksCiAJCUFSNUtfUEhZX05GVEhSRVMpOwogCi0JaWYgKChjaGFubmVsLT5od192YWx1ZSAmIENIQU5ORUxfVFVSQk8pICYmCisJaWYgKChhaC0+YWhfYndtb2RlID09IEFSNUtfQldNT0RFXzQwTUhaKSAmJgogCShhaC0+YWhfZWVfdmVyc2lvbiA+PSBBUjVLX0VFUFJPTV9WRVJTSU9OXzVfMCkpIHsKIAkJLyogU3dpdGNoIHNldHRsaW5nIHRpbWUgKFR1cmJvKSAqLwogCQlBUjVLX1JFR19XUklURV9CSVRTKGFoLCBBUjVLX1BIWV9TRVRUTElORywKQEAgLTg3MCwxNDMgKzEwMTQsMTcyIEBACiAJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMCwgQVI1S19QSFlfSEVBVllfQ0xJUF9FTkFCTEUpOwogfQogCi0vKgotICogTWFpbiByZXNldCBmdW5jdGlvbgotICovCisKKy8qKioqKioqKioqKioqKioqKioqKipcCisqIE1haW4gcmVzZXQgZnVuY3Rpb24gKgorXCoqKioqKioqKioqKioqKioqKioqKi8KKwogaW50IGF0aDVrX2h3X3Jlc2V0KHN0cnVjdCBhdGg1a19odyAqYWgsIGVudW0gbmw4MDIxMV9pZnR5cGUgb3BfbW9kZSwKLQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwsIGJvb2wgY2hhbmdlX2NoYW5uZWwpCisJCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCwgYm9vbCBmYXN0LCBib29sIHNraXBfcGN1KQogewotCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg1a19od19jb21tb24oYWgpOwotCXUzMiBzX3NlcVsxMF0sIHNfbGVkWzNdLCBzdGFpZDFfZmxhZ3MsIHRzZl91cCwgdHNmX2xvOwotCXUzMiBwaHlfdHN0MTsKLQl1OCBtb2RlLCBmcmVxLCBlZV9tb2RlOworCXUzMiBzX3NlcVsxMF0sIHNfbGVkWzNdLCB0c2ZfdXAsIHRzZl9sbzsKKwl1OCBtb2RlOwogCWludCBpLCByZXQ7CiAKLQllZV9tb2RlID0gMDsKLQlzdGFpZDFfZmxhZ3MgPSAwOwogCXRzZl91cCA9IDA7CiAJdHNmX2xvID0gMDsKLQlmcmVxID0gMDsKIAltb2RlID0gMDsKIAogCS8qCisJICogU2FuaXR5IGNoZWNrIGZvciBmYXN0IGZsYWcKKwkgKiBGYXN0IGNoYW5uZWwgY2hhbmdlIG9ubHkgYXZhaWxhYmxlCisJICogb24gQVIyNDEzL0FSNTQxMy4KKwkgKi8KKwlpZiAoZmFzdCAmJiAoYWgtPmFoX3JhZGlvICE9IEFSNUtfUkYyNDEzKSAmJgorCShhaC0+YWhfcmFkaW8gIT0gQVI1S19SRjU0MTMpKQorCQlmYXN0ID0gMDsKKworCS8qIERpc2FibGUgc2xlZXAgY2xvY2sgb3BlcmF0aW9uCisJICogdG8gYXZvaWQgcmVnaXN0ZXIgYWNjZXNzIGRlbGF5IG9uIGNlcnRhaW4KKwkgKiBQSFkgcmVnaXN0ZXJzICovCisJaWYgKGFoLT5haF92ZXJzaW9uID09IEFSNUtfQVI1MjEyKQorCQlhdGg1a19od19zZXRfc2xlZXBfY2xvY2soYWgsIGZhbHNlKTsKKworCS8qCisJICogU3RvcCBQQ1UKKwkgKi8KKwlhdGg1a19od19zdG9wX3J4X3BjdShhaCk7CisKKwkvKgorCSAqIFN0b3AgRE1BCisJICoKKwkgKiBOb3RlOiBJZiBETUEgZGlkbid0IHN0b3AgY29udGludWUKKwkgKiBzaW5jZSBvbmx5IGEgcmVzZXQgd2lsbCBmaXggaXQuCisJICovCisJcmV0ID0gYXRoNWtfaHdfZG1hX3N0b3AoYWgpOworCisJLyogUkYgQnVzIGdyYW50IHdvbid0IHdvcmsgaWYgd2UgaGF2ZSBwZW5kaW5nCisJICogZnJhbWVzICovCisJaWYgKHJldCAmJiBmYXN0KSB7CisJCUFUSDVLX0RCRyhhaC0+YWhfc2MsIEFUSDVLX0RFQlVHX1JFU0VULAorCQkJIkRNQSBkaWRuJ3Qgc3RvcCwgZmFsbGluZyBiYWNrIHRvIG5vcm1hbCByZXNldFxuIik7CisJCWZhc3QgPSAwOworCQkvKiBOb24gZmF0YWwsIGp1c3QgY29udGludWUgd2l0aAorCQkgKiBub3JtYWwgcmVzZXQgKi8KKwkJcmV0ID0gMDsKKwl9CisKKwlzd2l0Y2ggKGNoYW5uZWwtPmh3X3ZhbHVlICYgQ0hBTk5FTF9NT0RFUykgeworCWNhc2UgQ0hBTk5FTF9BOgorCQltb2RlID0gQVI1S19NT0RFXzExQTsKKwkJYnJlYWs7CisJY2FzZSBDSEFOTkVMX0c6CisKKwkJaWYgKGFoLT5haF92ZXJzaW9uIDw9IEFSNUtfQVI1MjExKSB7CisJCQlBVEg1S19FUlIoYWgtPmFoX3NjLAorCQkJCSJHIG1vZGUgbm90IGF2YWlsYWJsZSBvbiA1MjEwLzUyMTEiKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJbW9kZSA9IEFSNUtfTU9ERV8xMUc7CisJCWJyZWFrOworCWNhc2UgQ0hBTk5FTF9COgorCisJCWlmIChhaC0+YWhfdmVyc2lvbiA8IEFSNUtfQVI1MjExKSB7CisJCQlBVEg1S19FUlIoYWgtPmFoX3NjLAorCQkJCSJCIG1vZGUgbm90IGF2YWlsYWJsZSBvbiA1MjEwIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCW1vZGUgPSBBUjVLX01PREVfMTFCOworCQlicmVhazsKKwljYXNlIENIQU5ORUxfWFI6CisJCWlmIChhaC0+YWhfdmVyc2lvbiA9PSBBUjVLX0FSNTIxMSkgeworCQkJQVRINUtfRVJSKGFoLT5haF9zYywKKwkJCQkiWFIgbW9kZSBub3QgYXZhaWxhYmxlIG9uIDUyMTEiKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCW1vZGUgPSBBUjVLX01PREVfWFI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUFUSDVLX0VSUihhaC0+YWhfc2MsCisJCQkiaW52YWxpZCBjaGFubmVsOiAlZFxuIiwgY2hhbm5lbC0+Y2VudGVyX2ZyZXEpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKgorCSAqIElmIGRyaXZlciByZXF1ZXN0ZWQgZmFzdCBjaGFubmVsIGNoYW5nZSBhbmQgRE1BIGhhcyBzdG9wcGVkCisJICogZ28gb24uIElmIGl0IGZhaWxzIGNvbnRpbnVlIHdpdGggYSBub3JtYWwgcmVzZXQuCisJICovCisJaWYgKGZhc3QpIHsKKwkJcmV0ID0gYXRoNWtfaHdfcGh5X2luaXQoYWgsIGNoYW5uZWwsIG1vZGUsIHRydWUpOworCQlpZiAocmV0KSB7CisJCQlBVEg1S19EQkcoYWgtPmFoX3NjLCBBVEg1S19ERUJVR19SRVNFVCwKKwkJCQkiZmFzdCBjaGFuIGNoYW5nZSBmYWlsZWQsIGZhbGxpbmcgYmFjayB0byBub3JtYWwgcmVzZXRcbiIpOworCQkJLyogTm9uIGZhdGFsLCBjYW4gaGFwcGVuIGVnLgorCQkJICogb24gbW9kZSBjaGFuZ2UgKi8KKwkJCXJldCA9IDA7CisJCX0gZWxzZQorCQkJcmV0dXJuIDA7CisJfQorCisJLyoKIAkgKiBTYXZlIHNvbWUgcmVnaXN0ZXJzIGJlZm9yZSBhIHJlc2V0CiAJICovCi0JLypEQ1UvQW50ZW5uYSBzZWxlY3Rpb24gbm90IGF2YWlsYWJsZSBvbiA1MjEwKi8KIAlpZiAoYWgtPmFoX3ZlcnNpb24gIT0gQVI1S19BUjUyMTApIHsKKwkJLyoKKwkJICogU2F2ZSBmcmFtZSBzZXF1ZW5jZSBjb3VudAorCQkgKiBGb3IgcmV2cy4gYWZ0ZXIgT2FodSwgb25seSBzYXZlCisJCSAqIHNlcSBudW0gZm9yIERDVSAwIChHbG9iYWwgc2VxIG51bSkKKwkJICovCisJCWlmIChhaC0+YWhfbWFjX3NyZXYgPCBBUjVLX1NSRVZfQVI1MjExKSB7CiAKLQkJc3dpdGNoIChjaGFubmVsLT5od192YWx1ZSAmIENIQU5ORUxfTU9ERVMpIHsKLQkJY2FzZSBDSEFOTkVMX0E6Ci0JCQltb2RlID0gQVI1S19NT0RFXzExQTsKLQkJCWZyZXEgPSBBUjVLX0lOSV9SRkdBSU5fNUdIWjsKLQkJCWVlX21vZGUgPSBBUjVLX0VFUFJPTV9NT0RFXzExQTsKLQkJCWJyZWFrOwotCQljYXNlIENIQU5ORUxfRzoKLQkJCW1vZGUgPSBBUjVLX01PREVfMTFHOwotCQkJZnJlcSA9IEFSNUtfSU5JX1JGR0FJTl8yR0haOwotCQkJZWVfbW9kZSA9IEFSNUtfRUVQUk9NX01PREVfMTFHOwotCQkJYnJlYWs7Ci0JCWNhc2UgQ0hBTk5FTF9COgotCQkJbW9kZSA9IEFSNUtfTU9ERV8xMUI7Ci0JCQlmcmVxID0gQVI1S19JTklfUkZHQUlOXzJHSFo7Ci0JCQllZV9tb2RlID0gQVI1S19FRVBST01fTU9ERV8xMUI7Ci0JCQlicmVhazsKLQkJY2FzZSBDSEFOTkVMX1Q6Ci0JCQltb2RlID0gQVI1S19NT0RFXzExQV9UVVJCTzsKLQkJCWZyZXEgPSBBUjVLX0lOSV9SRkdBSU5fNUdIWjsKLQkJCWVlX21vZGUgPSBBUjVLX0VFUFJPTV9NT0RFXzExQTsKLQkJCWJyZWFrOwotCQljYXNlIENIQU5ORUxfVEc6Ci0JCQlpZiAoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUyMTEpIHsKLQkJCQlBVEg1S19FUlIoYWgtPmFoX3NjLAotCQkJCQkiVHVyYm9HIG1vZGUgbm90IGF2YWlsYWJsZSBvbiA1MjExIik7Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl9Ci0JCQltb2RlID0gQVI1S19NT0RFXzExR19UVVJCTzsKLQkJCWZyZXEgPSBBUjVLX0lOSV9SRkdBSU5fMkdIWjsKLQkJCWVlX21vZGUgPSBBUjVLX0VFUFJPTV9NT0RFXzExRzsKLQkJCWJyZWFrOwotCQljYXNlIENIQU5ORUxfWFI6Ci0JCQlpZiAoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUyMTEpIHsKLQkJCQlBVEg1S19FUlIoYWgtPmFoX3NjLAotCQkJCQkiWFIgbW9kZSBub3QgYXZhaWxhYmxlIG9uIDUyMTEiKTsKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KLQkJCW1vZGUgPSBBUjVLX01PREVfWFI7Ci0JCQlmcmVxID0gQVI1S19JTklfUkZHQUlOXzVHSFo7Ci0JCQllZV9tb2RlID0gQVI1S19FRVBST01fTU9ERV8xMUE7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCUFUSDVLX0VSUihhaC0+YWhfc2MsCi0JCQkJImludmFsaWQgY2hhbm5lbDogJWRcbiIsIGNoYW5uZWwtPmNlbnRlcl9mcmVxKTsKLQkJCXJldHVybiAtRUlOVkFMOworCQkJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspCisJCQkJc19zZXFbaV0gPSBhdGg1a19od19yZWdfcmVhZChhaCwKKwkJCQkJQVI1S19RVUVVRV9EQ1VfU0VRTlVNKGkpKTsKKworCQl9IGVsc2UgeworCQkJc19zZXFbMF0gPSBhdGg1a19od19yZWdfcmVhZChhaCwKKwkJCQkJQVI1S19RVUVVRV9EQ1VfU0VRTlVNKDApKTsKIAkJfQogCi0JCWlmIChjaGFuZ2VfY2hhbm5lbCkgewotCQkJLyoKLQkJCSAqIFNhdmUgZnJhbWUgc2VxdWVuY2UgY291bnQKLQkJCSAqIEZvciByZXZzLiBhZnRlciBPYWh1LCBvbmx5IHNhdmUKLQkJCSAqIHNlcSBudW0gZm9yIERDVSAwIChHbG9iYWwgc2VxIG51bSkKLQkJCSAqLwotCQkJaWYgKGFoLT5haF9tYWNfc3JldiA8IEFSNUtfU1JFVl9BUjUyMTEpIHsKLQotCQkJCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKQotCQkJCQlzX3NlcVtpXSA9IGF0aDVrX2h3X3JlZ19yZWFkKGFoLAotCQkJCQkJQVI1S19RVUVVRV9EQ1VfU0VRTlVNKGkpKTsKLQotCQkJfSBlbHNlIHsKLQkJCQlzX3NlcVswXSA9IGF0aDVrX2h3X3JlZ19yZWFkKGFoLAotCQkJCQkJQVI1S19RVUVVRV9EQ1VfU0VRTlVNKDApKTsKLQkJCX0KLQotCQkJLyogVFNGIGFjY2VsZXJhdGVzIG9uIEFSNTIxMSBkdXJpbmcgcmVzZXQKLQkJCSAqIEFzIGEgd29ya2Fyb3VuZCBzYXZlIGl0IGhlcmUgYW5kIHJlc3RvcmUKLQkJCSAqIGl0IGxhdGVyIHNvIHRoYXQgaXQncyBiYWNrIGluIHRpbWUgYWZ0ZXIKLQkJCSAqIHJlc2V0LiBUaGlzIHdheSBpdCdsbCBnZXQgcmUtc3luY2VkIG9uIHRoZQotCQkJICogbmV4dCBiZWFjb24gd2l0aG91dCBicmVha2luZyBhZC1ob2MuCi0JCQkgKgotCQkJICogT24gQVI1MjEyIFRTRiBpcyBhbG1vc3QgcHJlc2VydmVkIGFjcm9zcyBhCi0JCQkgKiByZXNldCBzbyBpdCBzdGF5cyBiYWNrIGluIHRpbWUgYW55d2F5IGFuZAotCQkJICogd2UgZG9uJ3QgaGF2ZSB0byBzYXZlL3Jlc3RvcmUgaXQuCi0JCQkgKgotCQkJICogWFhYOiBTaW5jZSB0aGlzIGJyZWFrcyBwb3dlciBzYXZpbmcgd2UgaGF2ZQotCQkJICogdG8gZGlzYWJsZSBwb3dlciBzYXZpbmcgdW50aWwgd2UgcmVjZWl2ZSB0aGUKLQkJCSAqIG5leHQgYmVhY29uLCBzbyB3ZSBjYW4gcmVzeW5jIGJlYWNvbiB0aW1lcnMgKi8KLQkJCWlmIChhaC0+YWhfdmVyc2lvbiA9PSBBUjVLX0FSNTIxMSkgewotCQkJCXRzZl91cCA9IGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX1RTRl9VMzIpOwotCQkJCXRzZl9sbyA9IGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX1RTRl9MMzIpOwotCQkJfQotCQl9Ci0KLQkJaWYgKGFoLT5haF92ZXJzaW9uID09IEFSNUtfQVI1MjEyKSB7Ci0JCQkvKiBSZXN0b3JlIG5vcm1hbCAzMi80ME1IeiBjbG9jayBvcGVyYXRpb24KLQkJCSAqIHRvIGF2b2lkIHJlZ2lzdGVyIGFjY2VzcyBkZWxheSBvbiBjZXJ0YWluCi0JCQkgKiBQSFkgcmVnaXN0ZXJzICovCi0JCQlhdGg1a19od19zZXRfc2xlZXBfY2xvY2soYWgsIGZhbHNlKTsKLQotCQkJLyogU2luY2Ugd2UgYXJlIGdvaW5nIHRvIHdyaXRlIHJmIGJ1ZmZlcgotCQkJICogY2hlY2sgaWYgd2UgaGF2ZSBhbnkgcGVuZGluZyBnYWluX0YKLQkJCSAqIG9wdGltaXphdGlvbiBzZXR0aW5ncyAqLwotCQkJaWYgKGNoYW5nZV9jaGFubmVsICYmIGFoLT5haF9yZl9iYW5rcyAhPSBOVUxMKQotCQkJCWF0aDVrX2h3X2dhaW5mX2NhbGlicmF0ZShhaCk7CisJCS8qIFRTRiBhY2NlbGVyYXRlcyBvbiBBUjUyMTEgZHVyaW5nIHJlc2V0CisJCSAqIEFzIGEgd29ya2Fyb3VuZCBzYXZlIGl0IGhlcmUgYW5kIHJlc3RvcmUKKwkJICogaXQgbGF0ZXIgc28gdGhhdCBpdCdzIGJhY2sgaW4gdGltZSBhZnRlcgorCQkgKiByZXNldC4gVGhpcyB3YXkgaXQnbGwgZ2V0IHJlLXN5bmNlZCBvbiB0aGUKKwkJICogbmV4dCBiZWFjb24gd2l0aG91dCBicmVha2luZyBhZC1ob2MuCisJCSAqCisJCSAqIE9uIEFSNTIxMiBUU0YgaXMgYWxtb3N0IHByZXNlcnZlZCBhY3Jvc3MgYQorCQkgKiByZXNldCBzbyBpdCBzdGF5cyBiYWNrIGluIHRpbWUgYW55d2F5IGFuZAorCQkgKiB3ZSBkb24ndCBoYXZlIHRvIHNhdmUvcmVzdG9yZSBpdC4KKwkJICoKKwkJICogWFhYOiBTaW5jZSB0aGlzIGJyZWFrcyBwb3dlciBzYXZpbmcgd2UgaGF2ZQorCQkgKiB0byBkaXNhYmxlIHBvd2VyIHNhdmluZyB1bnRpbCB3ZSByZWNlaXZlIHRoZQorCQkgKiBuZXh0IGJlYWNvbiwgc28gd2UgY2FuIHJlc3luYyBiZWFjb24gdGltZXJzICovCisJCWlmIChhaC0+YWhfdmVyc2lvbiA9PSBBUjVLX0FSNTIxMSkgeworCQkJdHNmX3VwID0gYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfVFNGX1UzMik7CisJCQl0c2ZfbG8gPSBhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19UU0ZfTDMyKTsKIAkJfQogCX0KIAorCiAJLypHUElPcyovCiAJc19sZWRbMF0gPSBhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19QQ0lDRkcpICYKIAkJCQkJQVI1S19QQ0lDRkdfTEVEU1RBVEU7CiAJc19sZWRbMV0gPSBhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19HUElPQ1IpOwogCXNfbGVkWzJdID0gYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfR1BJT0RPKTsKIAotCS8qIEFSNUtfU1RBX0lEMSBmbGFncywgb25seSBwcmVzZXJ2ZSBhbnRlbm5hCi0JICogc2V0dGluZ3MgYW5kIGFjay9jdHMgcmF0ZSBtb2RlICovCi0Jc3RhaWQxX2ZsYWdzID0gYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfU1RBX0lEMSkgJgotCQkJKEFSNUtfU1RBX0lEMV9ERUZBVUxUX0FOVEVOTkEgfAotCQkJQVI1S19TVEFfSUQxX0RFU0NfQU5URU5OQSB8Ci0JCQlBUjVLX1NUQV9JRDFfUlRTX0RFRl9BTlRFTk5BIHwKLQkJCUFSNUtfU1RBX0lEMV9BQ0tDVFNfNk1CIHwKLQkJCUFSNUtfU1RBX0lEMV9CQVNFX1JBVEVfMTFCIHwKLQkJCUFSNUtfU1RBX0lEMV9TRUxGR0VOX0RFRl9BTlQpOworCisJLyoKKwkgKiBTaW5jZSB3ZSBhcmUgZ29pbmcgdG8gd3JpdGUgcmYgYnVmZmVyCisJICogY2hlY2sgaWYgd2UgaGF2ZSBhbnkgcGVuZGluZyBnYWluX0YKKwkgKiBvcHRpbWl6YXRpb24gc2V0dGluZ3MKKwkgKi8KKwlpZiAoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUyMTIgJiYKKwkoYWgtPmFoX3JhZGlvIDw9IEFSNUtfUkY1MTEyKSkgeworCQlpZiAoIWZhc3QgJiYgYWgtPmFoX3JmX2JhbmtzICE9IE5VTEwpCisJCQkJYXRoNWtfaHdfZ2FpbmZfY2FsaWJyYXRlKGFoKTsKKwl9CiAKIAkvKiBXYWtldXAgdGhlIGRldmljZSAqLwogCXJldCA9IGF0aDVrX2h3X25pY193YWtldXAoYWgsIGNoYW5uZWwtPmh3X3ZhbHVlLCBmYWxzZSk7CkBAIC0xMDIxLDEyMSArMTE5NCw0MiBAQAogCQkJCQkJCUFSNUtfUEhZKDApKTsKIAogCS8qIFdyaXRlIGluaXRpYWwgc2V0dGluZ3MgKi8KLQlyZXQgPSBhdGg1a19od193cml0ZV9pbml0dmFscyhhaCwgbW9kZSwgY2hhbmdlX2NoYW5uZWwpOworCXJldCA9IGF0aDVrX2h3X3dyaXRlX2luaXR2YWxzKGFoLCBtb2RlLCBza2lwX3BjdSk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAorCS8qIEluaXRpYWxpemUgY29yZSBjbG9jayBzZXR0aW5ncyAqLworCWF0aDVrX2h3X2luaXRfY29yZV9jbG9jayhhaCk7CisKIAkvKgotCSAqIDUyMTEvNTIxMiBTcGVjaWZpYworCSAqIFR3ZWFrIGluaXR2YWwgc2V0dGluZ3MgZm9yIHJldmlzZWQKKwkgKiBjaGlwc2V0cyBhbmQgYWRkIHNvbWUgbW9yZSBjb25maWcKKwkgKiBiaXRzCiAJICovCi0JaWYgKGFoLT5haF92ZXJzaW9uICE9IEFSNUtfQVI1MjEwKSB7CisJYXRoNWtfaHdfdHdlYWtfaW5pdHZhbF9zZXR0aW5ncyhhaCwgY2hhbm5lbCk7CiAKLQkJLyoKLQkJICogV3JpdGUgaW5pdGlhbCBSRiBnYWluIHNldHRpbmdzCi0JCSAqIFRoaXMgc2hvdWxkIHdvcmsgZm9yIGJvdGggNTExMS81MTEyCi0JCSAqLwotCQlyZXQgPSBhdGg1a19od19yZmdhaW5faW5pdChhaCwgZnJlcSk7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OworCS8qIENvbW1pdCB2YWx1ZXMgZnJvbSBFRVBST00gKi8KKwlhdGg1a19od19jb21taXRfZWVwcm9tX3NldHRpbmdzKGFoLCBjaGFubmVsKTsKIAotCQltZGVsYXkoMSk7Ci0KLQkJLyoKLQkJICogVHdlYWsgaW5pdHZhbCBzZXR0aW5ncyBmb3IgcmV2aXNlZAotCQkgKiBjaGlwc2V0cyBhbmQgYWRkIHNvbWUgbW9yZSBjb25maWcKLQkJICogYml0cwotCQkgKi8KLQkJYXRoNWtfaHdfdHdlYWtfaW5pdHZhbF9zZXR0aW5ncyhhaCwgY2hhbm5lbCk7Ci0KLQkJLyoKLQkJICogU2V0IFRYIHBvd2VyCi0JCSAqLwotCQlyZXQgPSBhdGg1a19od190eHBvd2VyKGFoLCBjaGFubmVsLCBlZV9tb2RlLAotCQkJCQlhaC0+YWhfdHhwb3dlci50eHBfbWF4X3B3ciAvIDIpOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsKLQotCQkvKiBXcml0ZSByYXRlIGR1cmF0aW9uIHRhYmxlIG9ubHkgb24gQVI1MjEyIGFuZCBpZgotCQkgKiB2aXJ0dWFsIGludGVyZmFjZSBoYXMgYWxyZWFkeSBiZWVuIGJyb3VnaHQgdXAKLQkJICogWFhYOiByZXRoaW5rIHRoaXMgYWZ0ZXIgbmV3IG1vZGUgY2hhbmdlcyB0bwotCQkgKiBtYWM4MDIxMSBhcmUgaW50ZWdyYXRlZCAqLwotCQlpZiAoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUyMTIgJiYKLQkJCWFoLT5haF9zYy0+bnZpZnMpCi0JCQlhdGg1a19od193cml0ZV9yYXRlX2R1cmF0aW9uKGFoLCBtb2RlKTsKLQotCQkvKgotCQkgKiBXcml0ZSBSRiBidWZmZXIKLQkJICovCi0JCXJldCA9IGF0aDVrX2h3X3JmcmVnc19pbml0KGFoLCBjaGFubmVsLCBtb2RlKTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7Ci0KLQotCQkvKiBXcml0ZSBPRkRNIHRpbWluZ3Mgb24gNTIxMiovCi0JCWlmIChhaC0+YWhfdmVyc2lvbiA9PSBBUjVLX0FSNTIxMiAmJgotCQkJY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMX09GRE0pIHsKLQotCQkJcmV0ID0gYXRoNWtfaHdfd3JpdGVfb2ZkbV90aW1pbmdzKGFoLCBjaGFubmVsKTsKLQkJCWlmIChyZXQpCi0JCQkJcmV0dXJuIHJldDsKLQotCQkJLyogU3B1ciBpbmZvIGlzIGF2YWlsYWJsZSBvbmx5IGZyb20gRUVQUk9NIHZlcnNpb25zCi0JCQkgKiBncmVhdGVyIHRoYW4gNS4zLCBidXQgdGhlIEVFUFJPTSByb3V0aW5lcyB3aWxsIHVzZQotCQkJICogc3RhdGljIHZhbHVlcyBmb3Igb2xkZXIgdmVyc2lvbnMgKi8KLQkJCWlmIChhaC0+YWhfbWFjX3NyZXYgPj0gQVI1S19TUkVWX0FSNTQyNCkKLQkJCQlhdGg1a19od19zZXRfc3B1cl9taXRpZ2F0aW9uX2ZpbHRlcihhaCwKLQkJCQkJCQkJICAgIGNoYW5uZWwpOwotCQl9Ci0KLQkJLypFbmFibGUvZGlzYWJsZSA4MDIuMTFiIG1vZGUgb24gNTExMQotCQkoZW5hYmxlIDIxMTEgZnJlcXVlbmN5IGNvbnZlcnRlciArIENDSykqLwotCQlpZiAoYWgtPmFoX3JhZGlvID09IEFSNUtfUkY1MTExKSB7Ci0JCQlpZiAobW9kZSA9PSBBUjVLX01PREVfMTFCKQotCQkJCUFSNUtfUkVHX0VOQUJMRV9CSVRTKGFoLCBBUjVLX1RYQ0ZHLAotCQkJCSAgICBBUjVLX1RYQ0ZHX0JfTU9ERSk7Ci0JCQllbHNlCi0JCQkJQVI1S19SRUdfRElTQUJMRV9CSVRTKGFoLCBBUjVLX1RYQ0ZHLAotCQkJCSAgICBBUjVLX1RYQ0ZHX0JfTU9ERSk7Ci0JCX0KLQotCQkvKiBDb21taXQgdmFsdWVzIGZyb20gRUVQUk9NICovCi0JCWF0aDVrX2h3X2NvbW1pdF9lZXByb21fc2V0dGluZ3MoYWgsIGNoYW5uZWwsIGVlX21vZGUpOwotCi0JfSBlbHNlIHsKLQkJLyoKLQkJICogRm9yIDUyMTAgd2UgZG8gYWxsIGluaXRpYWxpemF0aW9uIHVzaW5nCi0JCSAqIGluaXR2YWxzLCBzbyB3ZSBkb24ndCBoYXZlIHRvIG1vZGlmeQotCQkgKiBhbnkgc2V0dGluZ3MgKDUyMTAgYWxzbyBvbmx5IHN1cHBvcnRzCi0JCSAqIGEvYXR1cmJvIG1vZGVzKQotCQkgKi8KLQkJbWRlbGF5KDEpOwotCQkvKiBEaXNhYmxlIHBoeSBhbmQgd2FpdCAqLwotCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIEFSNUtfUEhZX0FDVF9ESVNBQkxFLCBBUjVLX1BIWV9BQ1QpOwotCQltZGVsYXkoMSk7Ci0JfQogCiAJLyoKIAkgKiBSZXN0b3JlIHNhdmVkIHZhbHVlcwogCSAqLwogCi0JLypEQ1UvQW50ZW5uYSBzZWxlY3Rpb24gbm90IGF2YWlsYWJsZSBvbiA1MjEwKi8KKwkvKiBTZXFudW0sIFRTRiAqLwogCWlmIChhaC0+YWhfdmVyc2lvbiAhPSBBUjVLX0FSNTIxMCkgeworCQlpZiAoYWgtPmFoX21hY19zcmV2IDwgQVI1S19TUkVWX0FSNTIxMSkgeworCQkJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspCisJCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBzX3NlcVtpXSwKKwkJCQkJQVI1S19RVUVVRV9EQ1VfU0VRTlVNKGkpKTsKKwkJfSBlbHNlIHsKKwkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgc19zZXFbMF0sCisJCQkJQVI1S19RVUVVRV9EQ1VfU0VRTlVNKDApKTsKKwkJfQogCi0JCWlmIChjaGFuZ2VfY2hhbm5lbCkgewotCQkJaWYgKGFoLT5haF9tYWNfc3JldiA8IEFSNUtfU1JFVl9BUjUyMTEpIHsKLQkJCQlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykKLQkJCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBzX3NlcVtpXSwKLQkJCQkJCUFSNUtfUVVFVUVfRENVX1NFUU5VTShpKSk7Ci0JCQl9IGVsc2UgewotCQkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgc19zZXFbMF0sCi0JCQkJCUFSNUtfUVVFVUVfRENVX1NFUU5VTSgwKSk7Ci0JCQl9Ci0KLQotCQkJaWYgKGFoLT5haF92ZXJzaW9uID09IEFSNUtfQVI1MjExKSB7Ci0JCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCB0c2ZfdXAsIEFSNUtfVFNGX1UzMik7Ci0JCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCB0c2ZfbG8sIEFSNUtfVFNGX0wzMik7Ci0JCQl9CisJCWlmIChhaC0+YWhfdmVyc2lvbiA9PSBBUjVLX0FSNTIxMSkgeworCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCB0c2ZfdXAsIEFSNUtfVFNGX1UzMik7CisJCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIHRzZl9sbywgQVI1S19UU0ZfTDMyKTsKIAkJfQogCX0KIApAQCAtMTE0NiwyMDMgKzEyNDAsMzQgQEAKIAlhdGg1a19od19yZWdfd3JpdGUoYWgsIHNfbGVkWzFdLCBBUjVLX0dQSU9DUik7CiAJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBzX2xlZFsyXSwgQVI1S19HUElPRE8pOwogCi0JLyogUmVzdG9yZSBzdGFfaWQgZmxhZ3MgYW5kIHByZXNlcnZlIG91ciBtYWMgYWRkcmVzcyovCi0JYXRoNWtfaHdfcmVnX3dyaXRlKGFoLAotCQkJICAgZ2V0X3VuYWxpZ25lZF9sZTMyKGNvbW1vbi0+bWFjYWRkciksCi0JCQkgICBBUjVLX1NUQV9JRDApOwotCWF0aDVrX2h3X3JlZ193cml0ZShhaCwKLQkJCSAgIHN0YWlkMV9mbGFncyB8IGdldF91bmFsaWduZWRfbGUxNihjb21tb24tPm1hY2FkZHIgKyA0KSwKLQkJCSAgIEFSNUtfU1RBX0lEMSk7Ci0KKwkvKgorCSAqIEluaXRpYWxpemUgUENVCisJICovCisJYXRoNWtfaHdfcGN1X2luaXQoYWgsIG9wX21vZGUsIG1vZGUpOwogCiAJLyoKLQkgKiBDb25maWd1cmUgUENVCisJICogSW5pdGlhbGl6ZSBQSFkKIAkgKi8KLQotCS8qIFJlc3RvcmUgYnNzaWQgYW5kIGJzc2lkIG1hc2sgKi8KLQlhdGg1a19od19zZXRfYnNzaWQoYWgpOwotCi0JLyogU2V0IFBDVSBjb25maWcgKi8KLQlhdGg1a19od19zZXRfb3Btb2RlKGFoLCBvcF9tb2RlKTsKLQotCS8qIENsZWFyIGFueSBwZW5kaW5nIGludGVycnVwdHMKLQkgKiBQSVNSL1NJU1IgTm90IGF2YWlsYWJsZSBvbiA1MjEwICovCi0JaWYgKGFoLT5haF92ZXJzaW9uICE9IEFSNUtfQVI1MjEwKQotCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4ZmZmZmZmZmYsIEFSNUtfUElTUik7Ci0KLQkvKiBTZXQgUlNTSS9CUlNTSSB0aHJlc2hvbGRzCi0JICoKLQkgKiBOb3RlOiBJZiB3ZSBkZWNpZGUgdG8gc2V0IHRoaXMgdmFsdWUKLQkgKiBkeW5hbWljYWxseSwga2VlcCBpbiBtaW5kIHRoYXQgd2hlbiBBUjVLX1JTU0lfVEhSCi0JICogcmVnaXN0ZXIgaXMgcmVhZCwgaXQgbWlnaHQgcmV0dXJuIDB4NDAgaWYgd2UgaGF2ZW4ndAotCSAqIHdyaXR0ZW4gYW55dGhpbmcgdG8gaXQuICBBbHNvLCBCTUlTUyBSU1NJIHRocmVzaG9sZCBpcyB6ZXJvZWQuCi0JICogU28gZG9pbmcgYSBzYXZlL3Jlc3RvcmUgcHJvY2VkdXJlIGhlcmUgaXNuJ3QgdGhlIHJpZ2h0Ci0JICogY2hvaWNlLiBJbnN0ZWFkLCBzdG9yZSBpdCBpbiBhdGg1a19odyAqLwotCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgKEFSNUtfVFVORV9SU1NJX1RIUkVTIHwKLQkJCQlBUjVLX1RVTkVfQk1JU1NfVEhSRVMgPDwKLQkJCQlBUjVLX1JTU0lfVEhSX0JNSVNTX1MpLAotCQkJCUFSNUtfUlNTSV9USFIpOwotCi0JLyogTUlDIFFvUyBzdXBwb3J0ICovCi0JaWYgKGFoLT5haF9tYWNfc3JldiA+PSBBUjVLX1NSRVZfQVIyNDEzKSB7Ci0JCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgwMDAxMDBhYSwgQVI1S19NSUNfUU9TX0NUTCk7Ci0JCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgwMDAwMzIxMCwgQVI1S19NSUNfUU9TX1NFTCk7Ci0JfQotCi0JLyogUW9TIE5PQUNLIFBvbGljeSAqLwotCWlmIChhaC0+YWhfdmVyc2lvbiA9PSBBUjVLX0FSNTIxMikgewotCQlhdGg1a19od19yZWdfd3JpdGUoYWgsCi0JCQlBUjVLX1JFR19TTSgyLCBBUjVLX1FPU19OT0FDS18yQklUX1ZBTFVFUykgfAotCQkJQVI1S19SRUdfU00oNSwgQVI1S19RT1NfTk9BQ0tfQklUX09GRlNFVCkgIHwKLQkJCUFSNUtfUkVHX1NNKDAsIEFSNUtfUU9TX05PQUNLX0JZVEVfT0ZGU0VUKSwKLQkJCUFSNUtfUU9TX05PQUNLKTsKLQl9Ci0KLQotCS8qCi0JICogQ29uZmlndXJlIFBIWQotCSAqLwotCi0JLyogU2V0IGNoYW5uZWwgb24gUEhZICovCi0JcmV0ID0gYXRoNWtfaHdfY2hhbm5lbChhaCwgY2hhbm5lbCk7Ci0JaWYgKHJldCkKKwlyZXQgPSBhdGg1a19od19waHlfaW5pdChhaCwgY2hhbm5lbCwgbW9kZSwgZmFsc2UpOworCWlmIChyZXQpIHsKKwkJQVRINUtfRVJSKGFoLT5haF9zYywKKwkJCSJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBQSFkgKCVpKSAhXG4iLCByZXQpOwogCQlyZXR1cm4gcmV0OwotCi0JLyoKLQkgKiBFbmFibGUgdGhlIFBIWSBhbmQgd2FpdCB1bnRpbCBjb21wbGV0aW9uCi0JICogVGhpcyBpbmNsdWRlcyBCYXNlQmFuZCBhbmQgU3ludGhlc2l6ZXIKLQkgKiBhY3RpdmF0aW9uLgotCSAqLwotCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgQVI1S19QSFlfQUNUX0VOQUJMRSwgQVI1S19QSFlfQUNUKTsKLQotCS8qCi0JICogT24gNTIxMSsgcmVhZCBhY3RpdmF0aW9uIC0+IHJ4IGRlbGF5Ci0JICogYW5kIHVzZSBpdC4KLQkgKgotCSAqIFRPRE86IEhhbGYvcXVhcnRlciByYXRlIHN1cHBvcnQKLQkgKi8KLQlpZiAoYWgtPmFoX3ZlcnNpb24gIT0gQVI1S19BUjUyMTApIHsKLQkJdTMyIGRlbGF5OwotCQlkZWxheSA9IGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX1BIWV9SWF9ERUxBWSkgJgotCQkJQVI1S19QSFlfUlhfREVMQVlfTTsKLQkJZGVsYXkgPSAoY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMX0NDSykgPwotCQkJKChkZWxheSA8PCAyKSAvIDIyKSA6IChkZWxheSAvIDEwKTsKLQotCQl1ZGVsYXkoMTAwICsgKDIgKiBkZWxheSkpOwotCX0gZWxzZSB7Ci0JCW1kZWxheSgxKTsKIAl9CiAKIAkvKgotCSAqIFBlcmZvcm0gQURDIHRlc3QgdG8gc2VlIGlmIGJhc2ViYW5kIGlzIHJlYWR5Ci0JICogU2V0IFRYIGhvbGQgYW5kIGNoZWNrIEFEQyB0ZXN0IHJlZ2lzdGVyCi0JICovCi0JcGh5X3RzdDEgPSBhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19QSFlfVFNUMSk7Ci0JYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBBUjVLX1BIWV9UU1QxX1RYSE9MRCwgQVI1S19QSFlfVFNUMSk7Ci0JZm9yIChpID0gMDsgaSA8PSAyMDsgaSsrKSB7Ci0JCWlmICghKGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX1BIWV9BRENfVEVTVCkgJiAweDEwKSkKLQkJCWJyZWFrOwotCQl1ZGVsYXkoMjAwKTsKLQl9Ci0JYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBwaHlfdHN0MSwgQVI1S19QSFlfVFNUMSk7Ci0KLQkvKgotCSAqIFN0YXJ0IGF1dG9tYXRpYyBnYWluIGNvbnRyb2wgY2FsaWJyYXRpb24KLQkgKgotCSAqIER1cmluZyBBR0MgY2FsaWJyYXRpb24gUlggcGF0aCBpcyByZS1yb3V0ZWQgdG8KLQkgKiBhIHBvd2VyIGRldGVjdG9yIHNvIHdlIGRvbid0IHJlY2VpdmUgYW55dGhpbmcuCi0JICoKLQkgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGNhbGlicmF0ZSBzb21lIHN0YXRpYyBvZmZzZXRzCi0JICogdXNlZCB0b2dldGhlciB3aXRoIG9uLXRoZSBmbHkgSS9RIGNhbGlicmF0aW9uICh0aGUKLQkgKiBvbmUgcGVyZm9ybWVkIHZpYSBhdGg1a19od19waHlfY2FsaWJyYXRlKSwgd2hpY2ggZG9lc24ndAotCSAqIGludGVycnVwdCByeCBwYXRoLgotCSAqCi0JICogV2hpbGUgcnggcGF0aCBpcyByZS1yb3V0ZWQgdG8gdGhlIHBvd2VyIGRldGVjdG9yIHdlIGFsc28KLQkgKiBzdGFydCBhIG5vaXNlIGZsb29yIGNhbGlicmF0aW9uIHRvIG1lYXN1cmUgdGhlCi0JICogY2FyZCdzIG5vaXNlIGZsb29yICh0aGUgbm9pc2Ugd2UgbWVhc3VyZSB3aGVuIHdlIGFyZSBub3QKLQkgKiB0cmFuc21pdHRpbmcgb3IgcmVjZWl2aW5nIGFueXRoaW5nKS4KLQkgKgotCSAqIElmIHdlIGFyZSBpbiBhIG5vaXN5IGVudmlyb25tZW50LCBBR0MgY2FsaWJyYXRpb24gbWF5IHRpbWUKLQkgKiBvdXQgYW5kL29yIG5vaXNlIGZsb29yIGNhbGlicmF0aW9uIG1pZ2h0IHRpbWVvdXQuCi0JICovCi0JQVI1S19SRUdfRU5BQkxFX0JJVFMoYWgsIEFSNUtfUEhZX0FHQ0NUTCwKLQkJCQlBUjVLX1BIWV9BR0NDVExfQ0FMIHwgQVI1S19QSFlfQUdDQ1RMX05GKTsKLQotCS8qIEF0IHRoZSBzYW1lIHRpbWUgc3RhcnQgSS9RIGNhbGlicmF0aW9uIGZvciBRQU0gY29uc3RlbGxhdGlvbgotCSAqIC1ubyBuZWVkIGZvciBDQ0stICovCi0JYWgtPmFoX2NhbGlicmF0aW9uID0gZmFsc2U7Ci0JaWYgKCEobW9kZSA9PSBBUjVLX01PREVfMTFCKSkgewotCQlhaC0+YWhfY2FsaWJyYXRpb24gPSB0cnVlOwotCQlBUjVLX1JFR19XUklURV9CSVRTKGFoLCBBUjVLX1BIWV9JUSwKLQkJCQlBUjVLX1BIWV9JUV9DQUxfTlVNX0xPR19NQVgsIDE1KTsKLQkJQVI1S19SRUdfRU5BQkxFX0JJVFMoYWgsIEFSNUtfUEhZX0lRLAotCQkJCUFSNUtfUEhZX0lRX1JVTik7Ci0JfQotCi0JLyogV2FpdCBmb3IgZ2FpbiBjYWxpYnJhdGlvbiB0byBmaW5pc2ggKHdlIGNoZWNrIGZvciBJL1EgY2FsaWJyYXRpb24KLQkgKiBkdXJpbmcgYXRoNWtfcGh5X2NhbGlicmF0ZSkgKi8KLQlpZiAoYXRoNWtfaHdfcmVnaXN0ZXJfdGltZW91dChhaCwgQVI1S19QSFlfQUdDQ1RMLAotCQkJQVI1S19QSFlfQUdDQ1RMX0NBTCwgMCwgZmFsc2UpKSB7Ci0JCUFUSDVLX0VSUihhaC0+YWhfc2MsICJnYWluIGNhbGlicmF0aW9uIHRpbWVvdXQgKCV1TUh6KVxuIiwKLQkJCWNoYW5uZWwtPmNlbnRlcl9mcmVxKTsKLQl9Ci0KLQkvKiBSZXN0b3JlIGFudGVubmEgbW9kZSAqLwotCWF0aDVrX2h3X3NldF9hbnRlbm5hX21vZGUoYWgsIGFoLT5haF9hbnRfbW9kZSk7Ci0KLQkvKiBSZXN0b3JlIHNsb3QgdGltZSBhbmQgQUNLIHRpbWVvdXRzICovCi0JaWYgKGFoLT5haF9jb3ZlcmFnZV9jbGFzcyA+IDApCi0JCWF0aDVrX2h3X3NldF9jb3ZlcmFnZV9jbGFzcyhhaCwgYWgtPmFoX2NvdmVyYWdlX2NsYXNzKTsKLQotCS8qCiAJICogQ29uZmlndXJlIFFDVXMvRENVcwogCSAqLwotCi0JLyogVE9ETzogSFcgQ29tcHJlc3Npb24gc3VwcG9ydCBmb3IgZGF0YSBxdWV1ZXMgKi8KLQkvKiBUT0RPOiBCdXJzdCBwcmVmZXRjaCBmb3IgZGF0YSBxdWV1ZXMgKi8KLQotCS8qCi0JICogUmVzZXQgcXVldWVzIGFuZCBzdGFydCBiZWFjb24gdGltZXJzIGF0IHRoZSBlbmQgb2YgdGhlIHJlc2V0IHJvdXRpbmUKLQkgKiBUaGlzIGFsc28gc2V0cyBRQ1UgbWFzayBvbiBlYWNoIERDVSBmb3IgMToxIHFjdSB0byBkY3UgbWFwcGluZwotCSAqIE5vdGU6IElmIHdlIHdhbnQgd2UgY2FuIGFzc2lnbiBtdWx0aXBsZSBxY3VzIG9uIG9uZSBkY3UuCi0JICovCi0JZm9yIChpID0gMDsgaSA8IGFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX3F1ZXVlcy5xX3R4X251bTsgaSsrKSB7Ci0JCXJldCA9IGF0aDVrX2h3X3Jlc2V0X3R4X3F1ZXVlKGFoLCBpKTsKLQkJaWYgKHJldCkgewotCQkJQVRINUtfRVJSKGFoLT5haF9zYywKLQkJCQkiZmFpbGVkIHRvIHJlc2V0IFRYIHF1ZXVlICMlZFxuIiwgaSk7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0JfQorCXJldCA9IGF0aDVrX2h3X2luaXRfcXVldWVzKGFoKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwogCiAKIAkvKgotCSAqIENvbmZpZ3VyZSBETUEvSW50ZXJydXB0cworCSAqIEluaXRpYWxpemUgRE1BL0ludGVycnVwdHMKIAkgKi8KKwlhdGg1a19od19kbWFfaW5pdChhaCk7CiAKLQkvKgotCSAqIFNldCBSeC9UeCBETUEgQ29uZmlndXJhdGlvbgotCSAqCi0JICogU2V0IHN0YW5kYXJkIERNQSBzaXplICgxMjgpLiBOb3RlIHRoYXQKLQkgKiBhIERNQSBzaXplIG9mIDUxMiBjYXVzZXMgcnggb3ZlcnJ1bnMgYW5kIHR4IGVycm9ycwotCSAqIG9uIHBjaS1lIGNhcmRzICh0ZXN0ZWQgb24gNTQyNCBidXQgc2luY2Ugcnggb3ZlcnJ1bnMKLQkgKiBhbHNvIG9jY3VyIG9uIDU0MTYvNTQxOCB3aXRoIG1hZHdpZmkgd2Ugc2V0IDEyOAotCSAqIGZvciBhbGwgUENJLUUgY2FyZHMgdG8gYmUgc2FmZSkuCi0JICoKLQkgKiBYWFg6IG5lZWQgdG8gY2hlY2sgNTIxMCBmb3IgdGhpcwotCSAqIFRPRE86IENoZWNrIG91dCB0eCB0cmlnZXIgbGV2ZWwsIGl0J3MgYWx3YXlzIDY0IG9uIGR1bXBzIGJ1dCBJCi0JICogZ3Vlc3Mgd2UgY2FuIHR3ZWFrIGl0IGFuZCBzZWUgaG93IGl0IGdvZXMgOy0pCi0JICovCi0JaWYgKGFoLT5haF92ZXJzaW9uICE9IEFSNUtfQVI1MjEwKSB7Ci0JCUFSNUtfUkVHX1dSSVRFX0JJVFMoYWgsIEFSNUtfVFhDRkcsCi0JCQlBUjVLX1RYQ0ZHX1NETUFNUiwgQVI1S19ETUFTSVpFXzEyOEIpOwotCQlBUjVLX1JFR19XUklURV9CSVRTKGFoLCBBUjVLX1JYQ0ZHLAotCQkJQVI1S19SWENGR19TRE1BTVcsIEFSNUtfRE1BU0laRV8xMjhCKTsKLQl9Ci0KLQkvKiBQcmUtZW5hYmxlIGludGVycnVwdHMgb24gNTIxMS81MjEyKi8KLQlpZiAoYWgtPmFoX3ZlcnNpb24gIT0gQVI1S19BUjUyMTApCi0JCWF0aDVrX2h3X3NldF9pbXIoYWgsIGFoLT5haF9pbXIpOwogCiAJLyogRW5hYmxlIDMyS0h6IGNsb2NrIGZ1bmN0aW9uIGZvciBBUjUyMTIrIGNoaXBzCiAJICogU2V0IGNsb2NrcyB0byAzMktIeiBvcGVyYXRpb24gYW5kIHVzZSBhbgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3JmYnVmZmVyLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcmZidWZmZXIuaAppbmRleCAzYWM0Y2ZmLi4xNmI2N2U4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcmZidWZmZXIuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcmZidWZmZXIuaApAQCAtNTEsNyArNTEsNyBAQAogc3RydWN0IGF0aDVrX2luaV9yZmJ1ZmZlciB7CiAJdTgJcmZiX2Jhbms7CQkvKiBSRiBCYW5rIG51bWJlciAqLwogCXUxNglyZmJfY3RybF9yZWdpc3RlcjsJLyogUkYgQnVmZmVyIGNvbnRyb2wgcmVnaXN0ZXIgKi8KLQl1MzIJcmZiX21vZGVfZGF0YVs1XTsJLyogUkYgQnVmZmVyIGRhdGEgZm9yIGVhY2ggbW9kZSAqLworCXUzMglyZmJfbW9kZV9kYXRhWzNdOwkvKiBSRiBCdWZmZXIgZGF0YSBmb3IgZWFjaCBtb2RlICovCiB9OwogCiAvKgpAQCAtNzksOCArNzksMTAgQEAKICAqIGxpZmUgZWFzaWVyIGJ5IHVzaW5nIGFuIGluZGV4IGZvciBlYWNoIHJlZ2lzdGVyCiAgKiBpbnN0ZWFkIG9mIGEgZnVsbCByZmJfZmllbGQgKi8KIGVudW0gYXRoNWtfcmZfcmVnc19pZHggeworCS8qIEJBTksgMiAqLworCUFSNUtfUkZfVFVSQk8gPSAwLAogCS8qIEJBTksgNiAqLwotCUFSNUtfUkZfT0JfMkdIWiA9IDAsCisJQVI1S19SRl9PQl8yR0haLAogCUFSNUtfUkZfT0JfNUdIWiwKIAlBUjVLX1JGX0RCXzJHSFosCiAJQVI1S19SRl9EQl81R0haLApAQCAtMTM0LDYgKzEzNiw5IEBACiAqIFJGNTExMSAoU29tYnJlcm8pICoKIFwqKioqKioqKioqKioqKioqKioqLwogCisvKiBCQU5LIDIJCQkJbGVuICBwb3MgY29sICovCisjZGVmaW5lCUFSNUtfUkY1MTExX1JGX1RVUkJPCQl7IDEsIDMsICAgMCB9CisKIC8qIEJBTksgNgkJCQlsZW4gIHBvcyBjb2wgKi8KICNkZWZpbmUJQVI1S19SRjUxMTFfT0JfMkdIWgkJeyAzLCAxMTksIDAgfQogI2RlZmluZQlBUjVLX1JGNTExMV9EQl8yR0haCQl7IDMsIDEyMiwgMCB9CkBAIC0xNTgsNiArMTYzLDcgQEAKICNkZWZpbmUJQVI1S19SRjUxMTFfTUFYX1RJTUUJCXsgMiwgNDksICAwIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19yZl9yZWcgcmZfcmVnc181MTExW10gPSB7CisJezIsIEFSNUtfUkZfVFVSQk8sCQlBUjVLX1JGNTExMV9SRl9UVVJCT30sCiAJezYsIEFSNUtfUkZfT0JfMkdIWiwJCUFSNUtfUkY1MTExX09CXzJHSFp9LAogCXs2LCBBUjVLX1JGX0RCXzJHSFosCQlBUjVLX1JGNTExMV9EQl8yR0hafSwKIAl7NiwgQVI1S19SRl9PQl81R0haLAkJQVI1S19SRjUxMTFfT0JfNUdIWn0sCkBAIC0xNzcsOTcgKzE4Myw1MiBAQAogCiAvKiBEZWZhdWx0IG1vZGUgc3BlY2lmaWMgc2V0dGluZ3MgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX3JmYnVmZmVyIHJmYl81MTExW10gPSB7Ci0JeyAwLCAweDk4OWMsCi0JLyogICAgIG1vZGUgYS9YUiAgbW9kZSBhVHVyYm8gICAgbW9kZSBiICAgICBtb2RlIGcgICAgbW9kZSBnVHVyYm8gKi8KLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDAsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDAsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDAsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDAsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDAsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDAsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDAsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDAsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDAsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDAsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDAsIDB4OTg5YywKLQkgICAgeyAweDAwMzgwMDAwLCAweDAwMzgwMDAwLCAweDAwMzgwMDAwLCAweDAwMzgwMDAwLCAweDAwMzgwMDAwIH0gfSwKLQl7IDAsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDAsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDAsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMGMwLCAweDAwMDAwMDgwLCAweDAwMDAwMDgwIH0gfSwKLQl7IDAsIDB4OTg5YywKLQkgICAgeyAweDAwMDQwMGY5LCAweDAwMDQwMGY5LCAweDAwMDQwMGZmLCAweDAwMDQwMGZkLCAweDAwMDQwMGZkIH0gfSwKLQl7IDAsIDB4OThkNCwKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDA0LCAweDAwMDAwMDA0LCAweDAwMDAwMDA0IH0gfSwKLQl7IDEsIDB4OThkNCwKLQkgICAgeyAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwIH0gfSwKLQl7IDIsIDB4OThkNCwKLQkgICAgeyAweDAwMDAwMDEwLCAweDAwMDAwMDE0LCAweDAwMDAwMDEwLCAweDAwMDAwMDEwLCAweDAwMDAwMDE0IH0gfSwKLQl7IDMsIDB4OThkOCwKLQkgICAgeyAweDAwNjAxMDY4LCAweDAwNjAxMDY4LCAweDAwNjAxMDY4LCAweDAwNjAxMDY4LCAweDAwNjAxMDY4IH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDEwMDAwMDAwLCAweDEwMDAwMDAwLCAweDEwMDAwMDAwLCAweDEwMDAwMDAwLCAweDEwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDA0MDAwMDAwLCAweDA0MDAwMDAwLCAweDA0MDAwMDAwLCAweDA0MDAwMDAwLCAweDA0MDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDBhMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMzgwMGMwLCAweDAwMzgwMDgwLCAweDAyMzgwMGMwLCAweDAwMzgwMGMwLCAweDAwMzgwMGMwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDIwMDA2LCAweDAwMDIwMDA2LCAweDAwMDAwMDA2LCAweDAwMDIwMDA2LCAweDAwMDIwMDA2IH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDg5LCAweDAwMDAwMDg5LCAweDAwMDAwMDg5LCAweDAwMDAwMDg5LCAweDAwMDAwMDg5IH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMGEwLCAweDAwMDAwMGEwLCAweDAwMDAwMGEwLCAweDAwMDAwMGEwLCAweDAwMDAwMGEwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDQwMDA3LCAweDAwMDQwMDA3LCAweDAwMDQwMDA3LCAweDAwMDQwMDA3LCAweDAwMDQwMDA3IH0gfSwKLQl7IDYsIDB4OThkNCwKLQkgICAgeyAweDAwMDAwMDFhLCAweDAwMDAwMDFhLCAweDAwMDAwMDFhLCAweDAwMDAwMDFhLCAweDAwMDAwMDFhIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDQwLCAweDAwMDAwMDQ4LCAweDAwMDAwMDQwLCAweDAwMDAwMDQwLCAweDAwMDAwMDQwIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDEwLCAweDAwMDAwMDEwLCAweDAwMDAwMDEwLCAweDAwMDAwMDEwLCAweDAwMDAwMDEwIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDA4LCAweDAwMDAwMDA4LCAweDAwMDAwMDA4LCAweDAwMDAwMDA4LCAweDAwMDAwMDA4IH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDRmLCAweDAwMDAwMDRmLCAweDAwMDAwMDRmLCAweDAwMDAwMDRmLCAweDAwMDAwMDRmIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMGYxLCAweDAwMDAwMGYxLCAweDAwMDAwMDYxLCAweDAwMDAwMGYxLCAweDAwMDAwMGYxIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDA5MDRmLCAweDAwMDA5MDRmLCAweDAwMDA5MDRjLCAweDAwMDA5MDRmLCAweDAwMDA5MDRmIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAxMjVhLCAweDAwMDAxMjVhLCAweDAwMDAxMjlhLCAweDAwMDAxMjVhLCAweDAwMDAxMjVhIH0gfSwKLQl7IDcsIDB4OThjYywKLQkgICAgeyAweDAwMDAwMDBlLCAweDAwMDAwMDBlLCAweDAwMDAwMDBmLCAweDAwMDAwMDBlLCAweDAwMDAwMDBlIH0gfSwKKwkvKiBCQU5LIC8gQy5SLiAgICAgQS9YUiAgICAgICAgIEIgICAgICAgICAgIEcgICAgICAqLworCXsgMCwgMHg5ODljLCB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgMCwgMHg5ODljLCB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgMCwgMHg5ODljLCB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgMCwgMHg5ODljLCB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgMCwgMHg5ODljLCB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgMCwgMHg5ODljLCB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgMCwgMHg5ODljLCB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgMCwgMHg5ODljLCB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgMCwgMHg5ODljLCB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgMCwgMHg5ODljLCB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgMCwgMHg5ODljLCB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgMCwgMHg5ODljLCB7IDB4MDAzODAwMDAsIDB4MDAzODAwMDAsIDB4MDAzODAwMDAgfSB9LAorCXsgMCwgMHg5ODljLCB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgMCwgMHg5ODljLCB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgMCwgMHg5ODljLCB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwYzAsIDB4MDAwMDAwODAgfSB9LAorCXsgMCwgMHg5ODljLCB7IDB4MDAwNDAwZjksIDB4MDAwNDAwZmYsIDB4MDAwNDAwZmQgfSB9LAorCXsgMCwgMHg5OGQ0LCB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDQsIDB4MDAwMDAwMDQgfSB9LAorCXsgMSwgMHg5OGQ0LCB7IDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAgfSB9LAorCXsgMiwgMHg5OGQ0LCB7IDB4MDAwMDAwMTAsIDB4MDAwMDAwMTAsIDB4MDAwMDAwMTAgfSB9LAorCXsgMywgMHg5OGQ4LCB7IDB4MDA2MDEwNjgsIDB4MDA2MDEwNjgsIDB4MDA2MDEwNjggfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MTAwMDAwMDAsIDB4MTAwMDAwMDAsIDB4MTAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDQwMDAwMDAsIDB4MDQwMDAwMDAsIDB4MDQwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDAwMDAwMDAsIDB4MGEwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDAzODAwYzAsIDB4MDIzODAwYzAsIDB4MDAzODAwYzAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDAwMjAwMDYsIDB4MDAwMDAwMDYsIDB4MDAwMjAwMDYgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDAwMDAwODksIDB4MDAwMDAwODksIDB4MDAwMDAwODkgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDAwMDAwYTAsIDB4MDAwMDAwYTAsIDB4MDAwMDAwYTAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDAwNDAwMDcsIDB4MDAwNDAwMDcsIDB4MDAwNDAwMDcgfSB9LAorCXsgNiwgMHg5OGQ0LCB7IDB4MDAwMDAwMWEsIDB4MDAwMDAwMWEsIDB4MDAwMDAwMWEgfSB9LAorCXsgNywgMHg5ODljLCB7IDB4MDAwMDAwNDAsIDB4MDAwMDAwNDAsIDB4MDAwMDAwNDAgfSB9LAorCXsgNywgMHg5ODljLCB7IDB4MDAwMDAwMTAsIDB4MDAwMDAwMTAsIDB4MDAwMDAwMTAgfSB9LAorCXsgNywgMHg5ODljLCB7IDB4MDAwMDAwMDgsIDB4MDAwMDAwMDgsIDB4MDAwMDAwMDggfSB9LAorCXsgNywgMHg5ODljLCB7IDB4MDAwMDAwNGYsIDB4MDAwMDAwNGYsIDB4MDAwMDAwNGYgfSB9LAorCXsgNywgMHg5ODljLCB7IDB4MDAwMDAwZjEsIDB4MDAwMDAwNjEsIDB4MDAwMDAwZjEgfSB9LAorCXsgNywgMHg5ODljLCB7IDB4MDAwMDkwNGYsIDB4MDAwMDkwNGMsIDB4MDAwMDkwNGYgfSB9LAorCXsgNywgMHg5ODljLCB7IDB4MDAwMDEyNWEsIDB4MDAwMDEyOWEsIDB4MDAwMDEyNWEgfSB9LAorCXsgNywgMHg5OGNjLCB7IDB4MDAwMDAwMGUsIDB4MDAwMDAwMGYsIDB4MDAwMDAwMGUgfSB9LAogfTsKIAogCkBAIC0yNzYsNiArMjM3LDkgQEAKICogUkY1MTEyL1JGMjExMiAoRGVyYnkpICoKIFwqKioqKioqKioqKioqKioqKioqKioqKi8KIAorLyogQkFOSyAyIChDb21tb24pCQkJbGVuICBwb3MgY29sICovCisjZGVmaW5lCUFSNUtfUkY1MTEyWF9SRl9UVVJCTwkJeyAxLCAxLCAgIDIgfQorCiAvKiBCQU5LIDcgKENvbW1vbikJCQlsZW4gIHBvcyBjb2wgKi8KICNkZWZpbmUJQVI1S19SRjUxMTJYX0dBSU5fSQkJeyA2LCAxNCwgIDAgfQogI2RlZmluZQlBUjVLX1JGNTExMlhfTUlYVkdBX09WUgkJeyAxLCAzNiwgIDAgfQpAQCAtMzA3LDYgKzI3MSw3IEBACiAjZGVmaW5lIEFSNUtfUkY1MTEyX1BXRChfbikJCXsgMSwgKDMwMiAtIF9uKSwgMyB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfcmZfcmVnIHJmX3JlZ3NfNTExMltdID0geworCXsyLCBBUjVLX1JGX1RVUkJPLAkJQVI1S19SRjUxMTJYX1JGX1RVUkJPfSwKIAl7NiwgQVI1S19SRl9PQl8yR0haLAkJQVI1S19SRjUxMTJfT0JfMkdIWn0sCiAJezYsIEFSNUtfUkZfREJfMkdIWiwJCUFSNUtfUkY1MTEyX0RCXzJHSFp9LAogCXs2LCBBUjVLX1JGX09CXzVHSFosCQlBUjVLX1JGNTExMl9PQl81R0hafSwKQEAgLTMzNSwxMTUgKzMwMCw2MSBAQAogCiAvKiBEZWZhdWx0IG1vZGUgc3BlY2lmaWMgc2V0dGluZ3MgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX3JmYnVmZmVyIHJmYl81MTEyW10gPSB7Ci0JeyAxLCAweDk4ZDQsCi0JLyogICAgIG1vZGUgYS9YUiAgbW9kZSBhVHVyYm8gICAgbW9kZSBiICAgICBtb2RlIGcgICAgbW9kZSBnVHVyYm8gKi8KLQkgICAgeyAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwIH0gfSwKLQl7IDIsIDB4OThkMCwKLQkgICAgeyAweDAzMDYwNDA4LCAweDAzMDcwNDA4LCAweDAzMDYwNDA4LCAweDAzMDYwNDA4LCAweDAzMDcwNDA4IH0gfSwKLQl7IDMsIDB4OThkYywKLQkgICAgeyAweDAwYTBjMGMwLCAweDAwYTBjMGMwLCAweDAwZTBjMGMwLCAweDAwZTBjMGMwLCAweDAwZTBjMGMwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwYTAwMDAwLCAweDAwYTAwMDAwLCAweDAwYTAwMDAwLCAweDAwYTAwMDAwLCAweDAwYTAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMGEwMDAwLCAweDAwMGEwMDAwLCAweDAwMGEwMDAwLCAweDAwMGEwMDAwLCAweDAwMGEwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwNjYwMDAwLCAweDAwNjYwMDAwLCAweDAwNjYwMDAwLCAweDAwNjYwMDAwLCAweDAwNjYwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwZGIwMDAwLCAweDAwZGIwMDAwLCAweDAwZGIwMDAwLCAweDAwZGIwMDAwLCAweDAwZGIwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwZjEwMDAwLCAweDAwZjEwMDAwLCAweDAwZjEwMDAwLCAweDAwZjEwMDAwLCAweDAwZjEwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMTIwMDAwLCAweDAwMTIwMDAwLCAweDAwMTIwMDAwLCAweDAwMTIwMDAwLCAweDAwMTIwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMTIwMDAwLCAweDAwMTIwMDAwLCAweDAwMTIwMDAwLCAweDAwMTIwMDAwLCAweDAwMTIwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwNzMwMDAwLCAweDAwNzMwMDAwLCAweDAwNzMwMDAwLCAweDAwNzMwMDAwLCAweDAwNzMwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMGMwMDAwLCAweDAwMGMwMDAwLCAweDAwMGMwMDAwLCAweDAwMGMwMDAwLCAweDAwMGMwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwOGIwMDAwLCAweDAwOGIwMDAwLCAweDAwOGIwMDAwLCAweDAwOGIwMDAwLCAweDAwOGIwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwNjAwMDAwLCAweDAwNjAwMDAwLCAweDAwNjAwMDAwLCAweDAwNjAwMDAwLCAweDAwNjAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMGMwMDAwLCAweDAwMGMwMDAwLCAweDAwMGMwMDAwLCAweDAwMGMwMDAwLCAweDAwMGMwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwODQwMDAwLCAweDAwODQwMDAwLCAweDAwODQwMDAwLCAweDAwODQwMDAwLCAweDAwODQwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwNjQwMDAwLCAweDAwNjQwMDAwLCAweDAwNjQwMDAwLCAweDAwNjQwMDAwLCAweDAwNjQwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMjAwMDAwLCAweDAwMjAwMDAwLCAweDAwMjAwMDAwLCAweDAwMjAwMDAwLCAweDAwMjAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMjQwMDAwLCAweDAwMjQwMDAwLCAweDAwMjQwMDAwLCAweDAwMjQwMDAwLCAweDAwMjQwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMjUwMDAwLCAweDAwMjUwMDAwLCAweDAwMjUwMDAwLCAweDAwMjUwMDAwLCAweDAwMjUwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMTEwMDAwLCAweDAwMTEwMDAwLCAweDAwMTEwMDAwLCAweDAwMTEwMDAwLCAweDAwMTEwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMTEwMDAwLCAweDAwMTEwMDAwLCAweDAwMTEwMDAwLCAweDAwMTEwMDAwLCAweDAwMTEwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwNTEwMDAwLCAweDAwNTEwMDAwLCAweDAwNTEwMDAwLCAweDAwNTEwMDAwLCAweDAwNTEwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDFjMDQwMDAwLCAweDFjMDQwMDAwLCAweDFjMDQwMDAwLCAweDFjMDQwMDAwLCAweDFjMDQwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMGEwMDAwLCAweDAwMGEwMDAwLCAweDAwMGEwMDAwLCAweDAwMGEwMDAwLCAweDAwMGEwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwYTEwMDAwLCAweDAwYTEwMDAwLCAweDAwYTEwMDAwLCAweDAwYTEwMDAwLCAweDAwYTEwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwNDAwMDAwLCAweDAwNDAwMDAwLCAweDAwNDAwMDAwLCAweDAwNDAwMDAwLCAweDAwNDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAzMDkwMDAwLCAweDAzMDkwMDAwLCAweDAzMDkwMDAwLCAweDAzMDkwMDAwLCAweDAzMDkwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDA2MDAwMDAwLCAweDA2MDAwMDAwLCAweDA2MDAwMDAwLCAweDA2MDAwMDAwLCAweDA2MDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMGIwLCAweDAwMDAwMGIwLCAweDAwMDAwMGE4LCAweDAwMDAwMGE4LCAweDAwMDAwMGE4IH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDJlLCAweDAwMDAwMDJlLCAweDAwMDAwMDJlLCAweDAwMDAwMDJlLCAweDAwMDAwMDJlIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwNmM0YTQxLCAweDAwNmM0YTQxLCAweDAwNmM0YWYxLCAweDAwNmM0YTYxLCAweDAwNmM0YTYxIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwNTA4OTJhLCAweDAwNTA4OTJhLCAweDAwNTA4OTJiLCAweDAwNTA4OTJiLCAweDAwNTA4OTJiIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwODQyNDAwLCAweDAwODQyNDAwLCAweDAwODQyNDAwLCAweDAwODQyNDAwLCAweDAwODQyNDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwYzY5MjAwLCAweDAwYzY5MjAwLCAweDAwYzY5MjAwLCAweDAwYzY5MjAwLCAweDAwYzY5MjAwIH0gfSwKLQl7IDYsIDB4OThkMCwKLQkgICAgeyAweDAwMDIwMDBjLCAweDAwMDIwMDBjLCAweDAwMDIwMDBjLCAweDAwMDIwMDBjLCAweDAwMDIwMDBjIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDk0LCAweDAwMDAwMDk0LCAweDAwMDAwMDk0LCAweDAwMDAwMDk0LCAweDAwMDAwMDk0IH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDkxLCAweDAwMDAwMDkxLCAweDAwMDAwMDkxLCAweDAwMDAwMDkxLCAweDAwMDAwMDkxIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDBhLCAweDAwMDAwMDBhLCAweDAwMDAwMDEyLCAweDAwMDAwMDEyLCAweDAwMDAwMDEyIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDgwLCAweDAwMDAwMDgwLCAweDAwMDAwMDgwLCAweDAwMDAwMDgwLCAweDAwMDAwMDgwIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMGMxLCAweDAwMDAwMGMxLCAweDAwMDAwMGMxLCAweDAwMDAwMGMxLCAweDAwMDAwMGMxIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDYwLCAweDAwMDAwMDYwLCAweDAwMDAwMDYwLCAweDAwMDAwMDYwLCAweDAwMDAwMDYwIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMGYwLCAweDAwMDAwMGYwLCAweDAwMDAwMGYwLCAweDAwMDAwMGYwLCAweDAwMDAwMGYwIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDIyLCAweDAwMDAwMDIyLCAweDAwMDAwMDIyLCAweDAwMDAwMDIyLCAweDAwMDAwMDIyIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDkyLCAweDAwMDAwMDkyLCAweDAwMDAwMDkyLCAweDAwMDAwMDkyLCAweDAwMDAwMDkyIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMGQ0LCAweDAwMDAwMGQ0LCAweDAwMDAwMGQ0LCAweDAwMDAwMGQ0LCAweDAwMDAwMGQ0IH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAxNGNjLCAweDAwMDAxNGNjLCAweDAwMDAxNGNjLCAweDAwMDAxNGNjLCAweDAwMDAxNGNjIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwNDhjLCAweDAwMDAwNDhjLCAweDAwMDAwNDhjLCAweDAwMDAwNDhjLCAweDAwMDAwNDhjIH0gfSwKLQl7IDcsIDB4OThjNCwKLQkgICAgeyAweDAwMDAwMDAzLCAweDAwMDAwMDAzLCAweDAwMDAwMDAzLCAweDAwMDAwMDAzLCAweDAwMDAwMDAzIH0gfSwKKwkvKiBCQU5LIC8gQy5SLiAgICAgQS9YUiAgICAgICAgIEIgICAgICAgICAgIEcgICAgICAqLworCXsgMSwgMHg5OGQ0LCB7IDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAgfSB9LAorCXsgMiwgMHg5OGQwLCB7IDB4MDMwNjA0MDgsIDB4MDMwNjA0MDgsIDB4MDMwNjA0MDggfSB9LAorCXsgMywgMHg5OGRjLCB7IDB4MDBhMGMwYzAsIDB4MDBlMGMwYzAsIDB4MDBlMGMwYzAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDBhMDAwMDAsIDB4MDBhMDAwMDAsIDB4MDBhMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDAwYTAwMDAsIDB4MDAwYTAwMDAsIDB4MDAwYTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDA2NjAwMDAsIDB4MDA2NjAwMDAsIDB4MDA2NjAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDBkYjAwMDAsIDB4MDBkYjAwMDAsIDB4MDBkYjAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDBmMTAwMDAsIDB4MDBmMTAwMDAsIDB4MDBmMTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDA3MzAwMDAsIDB4MDA3MzAwMDAsIDB4MDA3MzAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDAwYzAwMDAsIDB4MDAwYzAwMDAsIDB4MDAwYzAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDA4YjAwMDAsIDB4MDA4YjAwMDAsIDB4MDA4YjAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDA2MDAwMDAsIDB4MDA2MDAwMDAsIDB4MDA2MDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDAwYzAwMDAsIDB4MDAwYzAwMDAsIDB4MDAwYzAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDA4NDAwMDAsIDB4MDA4NDAwMDAsIDB4MDA4NDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDA2NDAwMDAsIDB4MDA2NDAwMDAsIDB4MDA2NDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDAyMDAwMDAsIDB4MDAyMDAwMDAsIDB4MDAyMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDAyNDAwMDAsIDB4MDAyNDAwMDAsIDB4MDAyNDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDAyNTAwMDAsIDB4MDAyNTAwMDAsIDB4MDAyNTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDA1MTAwMDAsIDB4MDA1MTAwMDAsIDB4MDA1MTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MWMwNDAwMDAsIDB4MWMwNDAwMDAsIDB4MWMwNDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDAwYTAwMDAsIDB4MDAwYTAwMDAsIDB4MDAwYTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDBhMTAwMDAsIDB4MDBhMTAwMDAsIDB4MDBhMTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDA0MDAwMDAsIDB4MDA0MDAwMDAsIDB4MDA0MDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDMwOTAwMDAsIDB4MDMwOTAwMDAsIDB4MDMwOTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDYwMDAwMDAsIDB4MDYwMDAwMDAsIDB4MDYwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDAwMDAwYjAsIDB4MDAwMDAwYTgsIDB4MDAwMDAwYTggfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDAwMDAwMmUsIDB4MDAwMDAwMmUsIDB4MDAwMDAwMmUgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDA2YzRhNDEsIDB4MDA2YzRhZjEsIDB4MDA2YzRhNjEgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDA1MDg5MmEsIDB4MDA1MDg5MmIsIDB4MDA1MDg5MmIgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDA4NDI0MDAsIDB4MDA4NDI0MDAsIDB4MDA4NDI0MDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDBjNjkyMDAsIDB4MDBjNjkyMDAsIDB4MDBjNjkyMDAgfSB9LAorCXsgNiwgMHg5OGQwLCB7IDB4MDAwMjAwMGMsIDB4MDAwMjAwMGMsIDB4MDAwMjAwMGMgfSB9LAorCXsgNywgMHg5ODljLCB7IDB4MDAwMDAwOTQsIDB4MDAwMDAwOTQsIDB4MDAwMDAwOTQgfSB9LAorCXsgNywgMHg5ODljLCB7IDB4MDAwMDAwOTEsIDB4MDAwMDAwOTEsIDB4MDAwMDAwOTEgfSB9LAorCXsgNywgMHg5ODljLCB7IDB4MDAwMDAwMGEsIDB4MDAwMDAwMTIsIDB4MDAwMDAwMTIgfSB9LAorCXsgNywgMHg5ODljLCB7IDB4MDAwMDAwODAsIDB4MDAwMDAwODAsIDB4MDAwMDAwODAgfSB9LAorCXsgNywgMHg5ODljLCB7IDB4MDAwMDAwYzEsIDB4MDAwMDAwYzEsIDB4MDAwMDAwYzEgfSB9LAorCXsgNywgMHg5ODljLCB7IDB4MDAwMDAwNjAsIDB4MDAwMDAwNjAsIDB4MDAwMDAwNjAgfSB9LAorCXsgNywgMHg5ODljLCB7IDB4MDAwMDAwZjAsIDB4MDAwMDAwZjAsIDB4MDAwMDAwZjAgfSB9LAorCXsgNywgMHg5ODljLCB7IDB4MDAwMDAwMjIsIDB4MDAwMDAwMjIsIDB4MDAwMDAwMjIgfSB9LAorCXsgNywgMHg5ODljLCB7IDB4MDAwMDAwOTIsIDB4MDAwMDAwOTIsIDB4MDAwMDAwOTIgfSB9LAorCXsgNywgMHg5ODljLCB7IDB4MDAwMDAwZDQsIDB4MDAwMDAwZDQsIDB4MDAwMDAwZDQgfSB9LAorCXsgNywgMHg5ODljLCB7IDB4MDAwMDE0Y2MsIDB4MDAwMDE0Y2MsIDB4MDAwMDE0Y2MgfSB9LAorCXsgNywgMHg5ODljLCB7IDB4MDAwMDA0OGMsIDB4MDAwMDA0OGMsIDB4MDAwMDA0OGMgfSB9LAorCXsgNywgMHg5OGM0LCB7IDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMgfSB9LAogfTsKIAogLyogUkZYMTEyQSAoRGVyYnkgMikgKi8KQEAgLTQ3Nyw2ICszODgsNyBAQAogI2RlZmluZQlBUjVLX1JGNTExMkFfWEI1X0xWTAkJeyAyLCAzLAkgIDMgfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX3JmX3JlZyByZl9yZWdzXzUxMTJhW10gPSB7CisJezIsIEFSNUtfUkZfVFVSQk8sCQlBUjVLX1JGNTExMlhfUkZfVFVSQk99LAogCXs2LCBBUjVLX1JGX09CXzJHSFosCQlBUjVLX1JGNTExMkFfT0JfMkdIWn0sCiAJezYsIEFSNUtfUkZfREJfMkdIWiwJCUFSNUtfUkY1MTEyQV9EQl8yR0hafSwKIAl7NiwgQVI1S19SRl9PQl81R0haLAkJQVI1S19SRjUxMTJBX09CXzVHSFp9LApAQCAtNTE1LDExOSArNDI3LDYzIEBACiAKIC8qIERlZmF1bHQgbW9kZSBzcGVjaWZpYyBzZXR0aW5ncyAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmlfcmZidWZmZXIgcmZiXzUxMTJhW10gPSB7Ci0JeyAxLCAweDk4ZDQsCi0JLyogICAgIG1vZGUgYS9YUiAgbW9kZSBhVHVyYm8gICAgbW9kZSBiICAgICBtb2RlIGcgICAgbW9kZSBnVHVyYm8gKi8KLQkgICAgeyAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwIH0gfSwKLQl7IDIsIDB4OThkMCwKLQkgICAgeyAweDAzMDYwNDA4LCAweDAzMDcwNDA4LCAweDAzMDYwNDA4LCAweDAzMDYwNDA4LCAweDAzMDcwNDA4IH0gfSwKLQl7IDMsIDB4OThkYywKLQkgICAgeyAweDAwYTAyMGMwLCAweDAwYTAyMGMwLCAweDAwZTAyMGMwLCAweDAwZTAyMGMwLCAweDAwZTAyMGMwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDBmMDAwMDAwLCAweDBmMDAwMDAwLCAweDBmMDAwMDAwLCAweDBmMDAwMDAwLCAweDBmMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwODAwMDAwLCAweDAwODAwMDAwLCAweDAwODAwMDAwLCAweDAwODAwMDAwLCAweDAwODAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMmEwMDAwLCAweDAwMmEwMDAwLCAweDAwMmEwMDAwLCAweDAwMmEwMDAwLCAweDAwMmEwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDEwMDAwLCAweDAwMDEwMDAwLCAweDAwMDEwMDAwLCAweDAwMDEwMDAwLCAweDAwMDEwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMTgwMDAwLCAweDAwMTgwMDAwLCAweDAwMTgwMDAwLCAweDAwMTgwMDAwLCAweDAwMTgwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwNjAwMDAwLCAweDAwNjAwMDAwLCAweDAwNmUwMDAwLCAweDAwNmUwMDAwLCAweDAwNmUwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwYzcwMDAwLCAweDAwYzcwMDAwLCAweDAwYzcwMDAwLCAweDAwYzcwMDAwLCAweDAwYzcwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwNGIwMDAwLCAweDAwNGIwMDAwLCAweDAwNGIwMDAwLCAweDAwNGIwMDAwLCAweDAwNGIwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDA0NDgwMDAwLCAweDA0NDgwMDAwLCAweDA0NDgwMDAwLCAweDA0NDgwMDAwLCAweDA0NDgwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwNGMwMDAwLCAweDAwNGMwMDAwLCAweDAwNGMwMDAwLCAweDAwNGMwMDAwLCAweDAwNGMwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwZTQwMDAwLCAweDAwZTQwMDAwLCAweDAwZTQwMDAwLCAweDAwZTQwMDAwLCAweDAwZTQwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwZmMwMDAwLCAweDAwZmMwMDAwLCAweDAwZmMwMDAwLCAweDAwZmMwMDAwLCAweDAwZmMwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDA0M2YwMDAwLCAweDA0M2YwMDAwLCAweDA0M2YwMDAwLCAweDA0M2YwMDAwLCAweDA0M2YwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMGMwMDAwLCAweDAwMGMwMDAwLCAweDAwMGMwMDAwLCAweDAwMGMwMDAwLCAweDAwMGMwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAyMTkwMDAwLCAweDAyMTkwMDAwLCAweDAyMTkwMDAwLCAweDAyMTkwMDAwLCAweDAyMTkwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMjQwMDAwLCAweDAwMjQwMDAwLCAweDAwMjQwMDAwLCAweDAwMjQwMDAwLCAweDAwMjQwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwYjQwMDAwLCAweDAwYjQwMDAwLCAweDAwYjQwMDAwLCAweDAwYjQwMDAwLCAweDAwYjQwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwOTkwMDAwLCAweDAwOTkwMDAwLCAweDAwOTkwMDAwLCAweDAwOTkwMDAwLCAweDAwOTkwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwNTAwMDAwLCAweDAwNTAwMDAwLCAweDAwNTAwMDAwLCAweDAwNTAwMDAwLCAweDAwNTAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMmEwMDAwLCAweDAwMmEwMDAwLCAweDAwMmEwMDAwLCAweDAwMmEwMDAwLCAweDAwMmEwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMTIwMDAwLCAweDAwMTIwMDAwLCAweDAwMTIwMDAwLCAweDAwMTIwMDAwLCAweDAwMTIwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweGMwMzIwMDAwLCAweGMwMzIwMDAwLCAweGMwMzIwMDAwLCAweGMwMzIwMDAwLCAweGMwMzIwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAxNzQwMDAwLCAweDAxNzQwMDAwLCAweDAxNzQwMDAwLCAweDAxNzQwMDAwLCAweDAxNzQwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMTEwMDAwLCAweDAwMTEwMDAwLCAweDAwMTEwMDAwLCAweDAwMTEwMDAwLCAweDAwMTEwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDg2MjgwMDAwLCAweDg2MjgwMDAwLCAweDg2MjgwMDAwLCAweDg2MjgwMDAwLCAweDg2MjgwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDMxODQwMDAwLCAweDMxODQwMDAwLCAweDMxODQwMDAwLCAweDMxODQwMDAwLCAweDMxODQwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwZjIwMDgwLCAweDAwZjIwMDgwLCAweDAwZjIwMDgwLCAweDAwZjIwMDgwLCAweDAwZjIwMDgwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMjcwMDE5LCAweDAwMjcwMDE5LCAweDAwMjcwMDE5LCAweDAwMjcwMDE5LCAweDAwMjcwMDE5IH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAzLCAweDAwMDAwMDAzLCAweDAwMDAwMDAzLCAweDAwMDAwMDAzLCAweDAwMDAwMDAzIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMGIyLCAweDAwMDAwMGIyLCAweDAwMDAwMGIyLCAweDAwMDAwMGIyLCAweDAwMDAwMGIyIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwYjAyMDg0LCAweDAwYjAyMDg0LCAweDAwYjAyMDg0LCAweDAwYjAyMDg0LCAweDAwYjAyMDg0IH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwNDEyNWE0LCAweDAwNDEyNWE0LCAweDAwNDEyNWE0LCAweDAwNDEyNWE0LCAweDAwNDEyNWE0IH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMTE5MjIwLCAweDAwMTE5MjIwLCAweDAwMTE5MjIwLCAweDAwMTE5MjIwLCAweDAwMTE5MjIwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMWE0ODAwLCAweDAwMWE0ODAwLCAweDAwMWE0ODAwLCAweDAwMWE0ODAwLCAweDAwMWE0ODAwIH0gfSwKLQl7IDYsIDB4OThkOCwKLQkgICAgeyAweDAwMGIwMjMwLCAweDAwMGIwMjMwLCAweDAwMGIwMjMwLCAweDAwMGIwMjMwLCAweDAwMGIwMjMwIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDk0LCAweDAwMDAwMDk0LCAweDAwMDAwMDk0LCAweDAwMDAwMDk0LCAweDAwMDAwMDk0IH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDkxLCAweDAwMDAwMDkxLCAweDAwMDAwMDkxLCAweDAwMDAwMDkxLCAweDAwMDAwMDkxIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDEyLCAweDAwMDAwMDEyLCAweDAwMDAwMDEyLCAweDAwMDAwMDEyLCAweDAwMDAwMDEyIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDgwLCAweDAwMDAwMDgwLCAweDAwMDAwMDgwLCAweDAwMDAwMDgwLCAweDAwMDAwMDgwIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMGQ5LCAweDAwMDAwMGQ5LCAweDAwMDAwMGQ5LCAweDAwMDAwMGQ5LCAweDAwMDAwMGQ5IH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDYwLCAweDAwMDAwMDYwLCAweDAwMDAwMDYwLCAweDAwMDAwMDYwLCAweDAwMDAwMDYwIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMGYwLCAweDAwMDAwMGYwLCAweDAwMDAwMGYwLCAweDAwMDAwMGYwLCAweDAwMDAwMGYwIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMGEyLCAweDAwMDAwMGEyLCAweDAwMDAwMGEyLCAweDAwMDAwMGEyLCAweDAwMDAwMGEyIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDUyLCAweDAwMDAwMDUyLCAweDAwMDAwMDUyLCAweDAwMDAwMDUyLCAweDAwMDAwMDUyIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMGQ0LCAweDAwMDAwMGQ0LCAweDAwMDAwMGQ0LCAweDAwMDAwMGQ0LCAweDAwMDAwMGQ0IH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAxNGNjLCAweDAwMDAxNGNjLCAweDAwMDAxNGNjLCAweDAwMDAxNGNjLCAweDAwMDAxNGNjIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwNDhjLCAweDAwMDAwNDhjLCAweDAwMDAwNDhjLCAweDAwMDAwNDhjLCAweDAwMDAwNDhjIH0gfSwKLQl7IDcsIDB4OThjNCwKLQkgICAgeyAweDAwMDAwMDAzLCAweDAwMDAwMDAzLCAweDAwMDAwMDAzLCAweDAwMDAwMDAzLCAweDAwMDAwMDAzIH0gfSwKKwkvKiBCQU5LIC8gQy5SLiAgICAgQS9YUiAgICAgICAgIEIgICAgICAgICAgIEcgICAgICAqLworCXsgMSwgMHg5OGQ0LCB7IDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAgfSB9LAorCXsgMiwgMHg5OGQwLCB7IDB4MDMwNjA0MDgsIDB4MDMwNjA0MDgsIDB4MDMwNjA0MDggfSB9LAorCXsgMywgMHg5OGRjLCB7IDB4MDBhMDIwYzAsIDB4MDBlMDIwYzAsIDB4MDBlMDIwYzAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MGYwMDAwMDAsIDB4MGYwMDAwMDAsIDB4MGYwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDA4MDAwMDAsIDB4MDA4MDAwMDAsIDB4MDA4MDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDAwMTAwMDAsIDB4MDAwMTAwMDAsIDB4MDAwMTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDAxODAwMDAsIDB4MDAxODAwMDAsIDB4MDAxODAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDA2MDAwMDAsIDB4MDA2ZTAwMDAsIDB4MDA2ZTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDBjNzAwMDAsIDB4MDBjNzAwMDAsIDB4MDBjNzAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDA0YjAwMDAsIDB4MDA0YjAwMDAsIDB4MDA0YjAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDQ0ODAwMDAsIDB4MDQ0ODAwMDAsIDB4MDQ0ODAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDA0YzAwMDAsIDB4MDA0YzAwMDAsIDB4MDA0YzAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDBlNDAwMDAsIDB4MDBlNDAwMDAsIDB4MDBlNDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDBmYzAwMDAsIDB4MDBmYzAwMDAsIDB4MDBmYzAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDQzZjAwMDAsIDB4MDQzZjAwMDAsIDB4MDQzZjAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDAwYzAwMDAsIDB4MDAwYzAwMDAsIDB4MDAwYzAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDIxOTAwMDAsIDB4MDIxOTAwMDAsIDB4MDIxOTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDAyNDAwMDAsIDB4MDAyNDAwMDAsIDB4MDAyNDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDBiNDAwMDAsIDB4MDBiNDAwMDAsIDB4MDBiNDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDA5OTAwMDAsIDB4MDA5OTAwMDAsIDB4MDA5OTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDA1MDAwMDAsIDB4MDA1MDAwMDAsIDB4MDA1MDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4YzAzMjAwMDAsIDB4YzAzMjAwMDAsIDB4YzAzMjAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDE3NDAwMDAsIDB4MDE3NDAwMDAsIDB4MDE3NDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4ODYyODAwMDAsIDB4ODYyODAwMDAsIDB4ODYyODAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MzE4NDAwMDAsIDB4MzE4NDAwMDAsIDB4MzE4NDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDBmMjAwODAsIDB4MDBmMjAwODAsIDB4MDBmMjAwODAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDAyNzAwMTksIDB4MDAyNzAwMTksIDB4MDAyNzAwMTkgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDAwMDAwYjIsIDB4MDAwMDAwYjIsIDB4MDAwMDAwYjIgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDBiMDIwODQsIDB4MDBiMDIwODQsIDB4MDBiMDIwODQgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDA0MTI1YTQsIDB4MDA0MTI1YTQsIDB4MDA0MTI1YTQgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDAxMTkyMjAsIDB4MDAxMTkyMjAsIDB4MDAxMTkyMjAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDAxYTQ4MDAsIDB4MDAxYTQ4MDAsIDB4MDAxYTQ4MDAgfSB9LAorCXsgNiwgMHg5OGQ4LCB7IDB4MDAwYjAyMzAsIDB4MDAwYjAyMzAsIDB4MDAwYjAyMzAgfSB9LAorCXsgNywgMHg5ODljLCB7IDB4MDAwMDAwOTQsIDB4MDAwMDAwOTQsIDB4MDAwMDAwOTQgfSB9LAorCXsgNywgMHg5ODljLCB7IDB4MDAwMDAwOTEsIDB4MDAwMDAwOTEsIDB4MDAwMDAwOTEgfSB9LAorCXsgNywgMHg5ODljLCB7IDB4MDAwMDAwMTIsIDB4MDAwMDAwMTIsIDB4MDAwMDAwMTIgfSB9LAorCXsgNywgMHg5ODljLCB7IDB4MDAwMDAwODAsIDB4MDAwMDAwODAsIDB4MDAwMDAwODAgfSB9LAorCXsgNywgMHg5ODljLCB7IDB4MDAwMDAwZDksIDB4MDAwMDAwZDksIDB4MDAwMDAwZDkgfSB9LAorCXsgNywgMHg5ODljLCB7IDB4MDAwMDAwNjAsIDB4MDAwMDAwNjAsIDB4MDAwMDAwNjAgfSB9LAorCXsgNywgMHg5ODljLCB7IDB4MDAwMDAwZjAsIDB4MDAwMDAwZjAsIDB4MDAwMDAwZjAgfSB9LAorCXsgNywgMHg5ODljLCB7IDB4MDAwMDAwYTIsIDB4MDAwMDAwYTIsIDB4MDAwMDAwYTIgfSB9LAorCXsgNywgMHg5ODljLCB7IDB4MDAwMDAwNTIsIDB4MDAwMDAwNTIsIDB4MDAwMDAwNTIgfSB9LAorCXsgNywgMHg5ODljLCB7IDB4MDAwMDAwZDQsIDB4MDAwMDAwZDQsIDB4MDAwMDAwZDQgfSB9LAorCXsgNywgMHg5ODljLCB7IDB4MDAwMDE0Y2MsIDB4MDAwMDE0Y2MsIDB4MDAwMDE0Y2MgfSB9LAorCXsgNywgMHg5ODljLCB7IDB4MDAwMDA0OGMsIDB4MDAwMDA0OGMsIDB4MDAwMDA0OGMgfSB9LAorCXsgNywgMHg5OGM0LCB7IDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMgfSB9LAogfTsKIAogCkBAIC02MzYsMTEgKzQ5MiwxNSBAQAogKiBSRjI0MTMgKEdyaWZmaW4pICoKIFwqKioqKioqKioqKioqKioqKiovCiAKKy8qIEJBTksgMgkJCQlsZW4gIHBvcyBjb2wgKi8KKyNkZWZpbmUgQVI1S19SRjI0MTNfUkZfVFVSQk8JCXsgMSwgMSwgICAyIH0KKwogLyogQkFOSyA2IAkJCQlsZW4gIHBvcyBjb2wgKi8KICNkZWZpbmUJQVI1S19SRjI0MTNfT0JfMkdIWgkJeyAzLCAxNjgsIDAgfQogI2RlZmluZQlBUjVLX1JGMjQxM19EQl8yR0haCQl7IDMsIDE2NSwgMCB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfcmZfcmVnIHJmX3JlZ3NfMjQxM1tdID0geworCXsyLCBBUjVLX1JGX1RVUkJPLAkJQVI1S19SRjI0MTNfUkZfVFVSQk99LAogCXs2LCBBUjVLX1JGX09CXzJHSFosCQlBUjVLX1JGMjQxM19PQl8yR0hafSwKIAl7NiwgQVI1S19SRl9EQl8yR0haLAkJQVI1S19SRjI0MTNfREJfMkdIWn0sCiB9OwpAQCAtNjQ5LDczICs1MDksNDAgQEAKICAqIFhYWDogYS9hVHVyYm8gPz8/CiAgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX3JmYnVmZmVyIHJmYl8yNDEzW10gPSB7Ci0JeyAxLCAweDk4ZDQsCi0JLyogICAgIG1vZGUgYS9YUiAgbW9kZSBhVHVyYm8gICAgbW9kZSBiICAgICBtb2RlIGcgICAgbW9kZSBnVHVyYm8gKi8KLQkgICAgeyAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwIH0gfSwKLQl7IDIsIDB4OThkMCwKLQkgICAgeyAweDAyMDAxNDA4LCAweDAyMDExNDA4LCAweDAyMDAxNDA4LCAweDAyMDAxNDA4LCAweDAyMDExNDA4IH0gfSwKLQl7IDMsIDB4OThkYywKLQkgICAgeyAweDAwYTAyMGMwLCAweDAwYTAyMGMwLCAweDAwZTAyMGMwLCAweDAwZTAyMGMwLCAweDAwZTAyMGMwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweGYwMDAwMDAwLCAweGYwMDAwMDAwLCAweGYwMDAwMDAwLCAweGYwMDAwMDAwLCAweGYwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAzMDAwMDAwLCAweDAzMDAwMDAwLCAweDAzMDAwMDAwLCAweDAzMDAwMDAwLCAweDAzMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDQwNDAwMDAwLCAweDQwNDAwMDAwLCAweDQwNDAwMDAwLCAweDQwNDAwMDAwLCAweDQwNDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDY1MDUwMDAwLCAweDY1MDUwMDAwLCAweDY1MDUwMDAwLCAweDY1MDUwMDAwLCAweDY1MDUwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwNDIwMDAwLCAweDAwNDIwMDAwLCAweDAwNDIwMDAwLCAweDAwNDIwMDAwLCAweDAwNDIwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwYjUwMDAwLCAweDAwYjUwMDAwLCAweDAwYjUwMDAwLCAweDAwYjUwMDAwLCAweDAwYjUwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDMwMDAwLCAweDAwMDMwMDAwLCAweDAwMDMwMDAwLCAweDAwMDMwMDAwLCAweDAwMDMwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwZjcwMDAwLCAweDAwZjcwMDAwLCAweDAwZjcwMDAwLCAweDAwZjcwMDAwLCAweDAwZjcwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwOWQwMDAwLCAweDAwOWQwMDAwLCAweDAwOWQwMDAwLCAweDAwOWQwMDAwLCAweDAwOWQwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMjIwMDAwLCAweDAwMjIwMDAwLCAweDAwMjIwMDAwLCAweDAwMjIwMDAwLCAweDAwMjIwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDA0MjIwMDAwLCAweDA0MjIwMDAwLCAweDA0MjIwMDAwLCAweDA0MjIwMDAwLCAweDA0MjIwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMjMwMDE4LCAweDAwMjMwMDE4LCAweDAwMjMwMDE4LCAweDAwMjMwMDE4LCAweDAwMjMwMDE4IH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMjgwMDAwLCAweDAwMjgwMDAwLCAweDAwMjgwMDYwLCAweDAwMjgwMDYwLCAweDAwMjgwMDYwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwNTAwMGMwLCAweDAwNTAwMGMwLCAweDAwNTAwMGMzLCAweDAwNTAwMGMzLCAweDAwNTAwMGMzIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDQwMDdmLCAweDAwMDQwMDdmLCAweDAwMDQwMDdmLCAweDAwMDQwMDdmLCAweDAwMDQwMDdmIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwNDU4LCAweDAwMDAwNDU4LCAweDAwMDAwNDU4LCAweDAwMDAwNDU4LCAweDAwMDAwNDU4IH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDBjMDAwLCAweDAwMDBjMDAwLCAweDAwMDBjMDAwLCAweDAwMDBjMDAwLCAweDAwMDBjMDAwIH0gfSwKLQl7IDYsIDB4OThkOCwKLQkgICAgeyAweDAwNDAwMjMwLCAweDAwNDAwMjMwLCAweDAwNDAwMjMwLCAweDAwNDAwMjMwLCAweDAwNDAwMjMwIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDA2NDAwLCAweDAwMDA2NDAwLCAweDAwMDA2NDAwLCAweDAwMDA2NDAwLCAweDAwMDA2NDAwIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwODAwLCAweDAwMDAwODAwLCAweDAwMDAwODAwLCAweDAwMDAwODAwLCAweDAwMDAwODAwIH0gfSwKLQl7IDcsIDB4OThjYywKLQkgICAgeyAweDAwMDAwMDBlLCAweDAwMDAwMDBlLCAweDAwMDAwMDBlLCAweDAwMDAwMDBlLCAweDAwMDAwMDBlIH0gfSwKKwkvKiBCQU5LIC8gQy5SLiAgICAgQS9YUiAgICAgICAgIEIgICAgICAgICAgIEcgICAgICAqLworCXsgMSwgMHg5OGQ0LCB7IDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAgfSB9LAorCXsgMiwgMHg5OGQwLCB7IDB4MDIwMDE0MDgsIDB4MDIwMDE0MDgsIDB4MDIwMDE0MDggfSB9LAorCXsgMywgMHg5OGRjLCB7IDB4MDBhMDIwYzAsIDB4MDBlMDIwYzAsIDB4MDBlMDIwYzAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4ZjAwMDAwMDAsIDB4ZjAwMDAwMDAsIDB4ZjAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDMwMDAwMDAsIDB4MDMwMDAwMDAsIDB4MDMwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4NDA0MDAwMDAsIDB4NDA0MDAwMDAsIDB4NDA0MDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4NjUwNTAwMDAsIDB4NjUwNTAwMDAsIDB4NjUwNTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDA0MjAwMDAsIDB4MDA0MjAwMDAsIDB4MDA0MjAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDBiNTAwMDAsIDB4MDBiNTAwMDAsIDB4MDBiNTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDAwMzAwMDAsIDB4MDAwMzAwMDAsIDB4MDAwMzAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDBmNzAwMDAsIDB4MDBmNzAwMDAsIDB4MDBmNzAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDA5ZDAwMDAsIDB4MDA5ZDAwMDAsIDB4MDA5ZDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDAyMjAwMDAsIDB4MDAyMjAwMDAsIDB4MDAyMjAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDQyMjAwMDAsIDB4MDQyMjAwMDAsIDB4MDQyMjAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDAyMzAwMTgsIDB4MDAyMzAwMTgsIDB4MDAyMzAwMTggfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDAyODAwMDAsIDB4MDAyODAwNjAsIDB4MDAyODAwNjAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDA1MDAwYzAsIDB4MDA1MDAwYzMsIDB4MDA1MDAwYzMgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDAwNDAwN2YsIDB4MDAwNDAwN2YsIDB4MDAwNDAwN2YgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDAwMDA0NTgsIDB4MDAwMDA0NTgsIDB4MDAwMDA0NTggfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLCB7IDB4MDAwMGMwMDAsIDB4MDAwMGMwMDAsIDB4MDAwMGMwMDAgfSB9LAorCXsgNiwgMHg5OGQ4LCB7IDB4MDA0MDAyMzAsIDB4MDA0MDAyMzAsIDB4MDA0MDAyMzAgfSB9LAorCXsgNywgMHg5ODljLCB7IDB4MDAwMDY0MDAsIDB4MDAwMDY0MDAsIDB4MDAwMDY0MDAgfSB9LAorCXsgNywgMHg5ODljLCB7IDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAgfSB9LAorCXsgNywgMHg5OGNjLCB7IDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUgfSB9LAogfTsKIAogCkBAIC03MjQsODggKzU1MSw1NyBAQAogKiBSRjIzMTUvUkYyMzE2IChDb2JyYSBTb0MpICoKIFwqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKKy8qIEJBTksgMgkJCQlsZW4gIHBvcyBjb2wgKi8KKyNkZWZpbmUJQVI1S19SRjIzMTZfUkZfVFVSQk8JCXsgMSwgMSwgICAyIH0KKwogLyogQkFOSyA2CQkJCWxlbiAgcG9zIGNvbCAqLwogI2RlZmluZQlBUjVLX1JGMjMxNl9PQl8yR0haCQl7IDMsIDE3OCwgMCB9CiAjZGVmaW5lCUFSNUtfUkYyMzE2X0RCXzJHSFoJCXsgMywgMTc1LCAwIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19yZl9yZWcgcmZfcmVnc18yMzE2W10gPSB7CisJezIsIEFSNUtfUkZfVFVSQk8sCQlBUjVLX1JGMjMxNl9SRl9UVVJCT30sCiAJezYsIEFSNUtfUkZfT0JfMkdIWiwJCUFSNUtfUkYyMzE2X09CXzJHSFp9LAogCXs2LCBBUjVLX1JGX0RCXzJHSFosCQlBUjVLX1JGMjMxNl9EQl8yR0hafSwKIH07CiAKIC8qIERlZmF1bHQgbW9kZSBzcGVjaWZpYyBzZXR0aW5ncyAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmlfcmZidWZmZXIgcmZiXzIzMTZbXSA9IHsKLQl7IDEsIDB4OThkNCwKLQkvKiAgICAgbW9kZSBhL1hSICBtb2RlIGFUdXJibyAgICBtb2RlIGIgICAgIG1vZGUgZyAgICBtb2RlIGdUdXJibyAqLwotCSAgICB7IDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAgfSB9LAotCXsgMiwgMHg5OGQwLAotCSAgICB7IDB4MDIwMDE0MDgsIDB4MDIwMTE0MDgsIDB4MDIwMDE0MDgsIDB4MDIwMDE0MDgsIDB4MDIwMTE0MDggfSB9LAotCXsgMywgMHg5OGRjLAotCSAgICB7IDB4MDBhMDIwYzAsIDB4MDBhMDIwYzAsIDB4MDBlMDIwYzAsIDB4MDBlMDIwYzAsIDB4MDBlMDIwYzAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4YzAwMDAwMDAsIDB4YzAwMDAwMDAsIDB4YzAwMDAwMDAsIDB4YzAwMDAwMDAsIDB4YzAwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MGYwMDAwMDAsIDB4MGYwMDAwMDAsIDB4MGYwMDAwMDAsIDB4MGYwMDAwMDAsIDB4MGYwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDIwMDAwMDAsIDB4MDIwMDAwMDAsIDB4MDIwMDAwMDAsIDB4MDIwMDAwMDAsIDB4MDIwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4ZjgwMDAwMDAsIDB4ZjgwMDAwMDAsIDB4ZjgwMDAwMDAsIDB4ZjgwMDAwMDAsIDB4ZjgwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4OTUxNTAwMDAsIDB4OTUxNTAwMDAsIDB4OTUxNTAwMDAsIDB4OTUxNTAwMDAsIDB4OTUxNTAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4YzEwMDAwMDAsIDB4YzEwMDAwMDAsIDB4YzEwMDAwMDAsIDB4YzEwMDAwMDAsIDB4YzEwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwODAwMDAsIDB4MDAwODAwMDAsIDB4MDAwODAwMDAsIDB4MDAwODAwMDAsIDB4MDAwODAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDBkNTAwMDAsIDB4MDBkNTAwMDAsIDB4MDBkNTAwMDAsIDB4MDBkNTAwMDAsIDB4MDBkNTAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwZTAwMDAsIDB4MDAwZTAwMDAsIDB4MDAwZTAwMDAsIDB4MDAwZTAwMDAsIDB4MDAwZTAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDBkYzAwMDAsIDB4MDBkYzAwMDAsIDB4MDBkYzAwMDAsIDB4MDBkYzAwMDAsIDB4MDBkYzAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA3NzAwMDAsIDB4MDA3NzAwMDAsIDB4MDA3NzAwMDAsIDB4MDA3NzAwMDAsIDB4MDA3NzAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA4YTAwMDAsIDB4MDA4YTAwMDAsIDB4MDA4YTAwMDAsIDB4MDA4YTAwMDAsIDB4MDA4YTAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MTA4ODAwMDAsIDB4MTA4ODAwMDAsIDB4MTA4ODAwMDAsIDB4MTA4ODAwMDAsIDB4MTA4ODAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA4YzAwNjAsIDB4MDA4YzAwNjAsIDB4MDA4YzAwNjAsIDB4MDA4YzAwNjAsIDB4MDA4YzAwNjAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDBhMDAwMDAsIDB4MDBhMDAwMDAsIDB4MDBhMDAwODAsIDB4MDBhMDAwODAsIDB4MDBhMDAwODAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA0MDAwMDAsIDB4MDA0MDAwMDAsIDB4MDA0MDAwMGQsIDB4MDA0MDAwMGQsIDB4MDA0MDAwMGQgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAxMTA0MDAsIDB4MDAxMTA0MDAsIDB4MDAxMTA0MDAsIDB4MDAxMTA0MDAsIDB4MDAxMTA0MDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwNjAsIDB4MDAwMDAwNjAsIDB4MDAwMDAwNjAsIDB4MDAwMDAwNjAsIDB4MDAwMDAwNjAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDBiMDAsIDB4MDAwMDBiMDAsIDB4MDAwMDBiMDAsIDB4MDAwMDBiMDAsIDB4MDAwMDBiMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDBiZTgsIDB4MDAwMDBiZTgsIDB4MDAwMDBiZTgsIDB4MDAwMDBiZTgsIDB4MDAwMDBiZTggfSB9LAotCXsgNiwgMHg5OGMwLAotCSAgICB7IDB4MDAwMTAwMDAsIDB4MDAwMTAwMDAsIDB4MDAwMTAwMDAsIDB4MDAwMTAwMDAsIDB4MDAwMTAwMDAgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDY0MDAsIDB4MDAwMDY0MDAsIDB4MDAwMDY0MDAsIDB4MDAwMDY0MDAsIDB4MDAwMDY0MDAgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAgfSB9LAotCXsgNywgMHg5OGNjLAotCSAgICB7IDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUgfSB9LAorCS8qIEJBTksgLyBDLlIuICAgICBBL1hSICAgICAgICAgQiAgICAgICAgICAgRyAgICAgICovCisJeyAxLCAweDk4ZDQsIHsgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCB9IH0sCisJeyAyLCAweDk4ZDAsIHsgMHgwMjAwMTQwOCwgMHgwMjAwMTQwOCwgMHgwMjAwMTQwOCB9IH0sCisJeyAzLCAweDk4ZGMsIHsgMHgwMGEwMjBjMCwgMHgwMGUwMjBjMCwgMHgwMGUwMjBjMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHhjMDAwMDAwMCwgMHhjMDAwMDAwMCwgMHhjMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwZjAwMDAwMCwgMHgwZjAwMDAwMCwgMHgwZjAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMjAwMDAwMCwgMHgwMjAwMDAwMCwgMHgwMjAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHhmODAwMDAwMCwgMHhmODAwMDAwMCwgMHhmODAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHg5NTE1MDAwMCwgMHg5NTE1MDAwMCwgMHg5NTE1MDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHhjMTAwMDAwMCwgMHhjMTAwMDAwMCwgMHhjMTAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDA4MDAwMCwgMHgwMDA4MDAwMCwgMHgwMDA4MDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMGQ1MDAwMCwgMHgwMGQ1MDAwMCwgMHgwMGQ1MDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDBlMDAwMCwgMHgwMDBlMDAwMCwgMHgwMDBlMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMGRjMDAwMCwgMHgwMGRjMDAwMCwgMHgwMGRjMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDc3MDAwMCwgMHgwMDc3MDAwMCwgMHgwMDc3MDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDhhMDAwMCwgMHgwMDhhMDAwMCwgMHgwMDhhMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgxMDg4MDAwMCwgMHgxMDg4MDAwMCwgMHgxMDg4MDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDhjMDA2MCwgMHgwMDhjMDA2MCwgMHgwMDhjMDA2MCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMGEwMDAwMCwgMHgwMGEwMDA4MCwgMHgwMGEwMDA4MCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDQwMDAwMCwgMHgwMDQwMDAwZCwgMHgwMDQwMDAwZCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDExMDQwMCwgMHgwMDExMDQwMCwgMHgwMDExMDQwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDAwMDA2MCwgMHgwMDAwMDA2MCwgMHgwMDAwMDA2MCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDAwMGIwMCwgMHgwMDAwMGIwMCwgMHgwMDAwMGIwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDAwMGJlOCwgMHgwMDAwMGJlOCwgMHgwMDAwMGJlOCB9IH0sCisJeyA2LCAweDk4YzAsIHsgMHgwMDAxMDAwMCwgMHgwMDAxMDAwMCwgMHgwMDAxMDAwMCB9IH0sCisJeyA3LCAweDk4OWMsIHsgMHgwMDAwNjQwMCwgMHgwMDAwNjQwMCwgMHgwMDAwNjQwMCB9IH0sCisJeyA3LCAweDk4OWMsIHsgMHgwMDAwMDgwMCwgMHgwMDAwMDgwMCwgMHgwMDAwMDgwMCB9IH0sCisJeyA3LCAweDk4Y2MsIHsgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSB9IH0sCiB9OwogCiAKQEAgLTgzNSw5MyArNjMxLDUwIEBACiAKIC8qIERlZmF1bHQgbW9kZSBzcGVjaWZpYyBzZXR0aW5ncyAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmlfcmZidWZmZXIgcmZiXzU0MTNbXSA9IHsKLQl7IDEsIDB4OThkNCwKLQkvKiAgICAgbW9kZSBhL1hSICBtb2RlIGFUdXJibyAgICBtb2RlIGIgICAgIG1vZGUgZyAgICBtb2RlIGdUdXJibyAqLwotCSAgICB7IDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAgfSB9LAotCXsgMiwgMHg5OGQwLAotCSAgICB7IDB4MDAwMDAwMDgsIDB4MDAwMDAwMDgsIDB4MDAwMDAwMDgsIDB4MDAwMDAwMDgsIDB4MDAwMDAwMDggfSB9LAotCXsgMywgMHg5OGRjLAotCSAgICB7IDB4MDBhMDAwYzAsIDB4MDBhMDAwYzAsIDB4MDBlMDAwYzAsIDB4MDBlMDAwYzAsIDB4MDBlMDAwYzAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MzMwMDAwMDAsIDB4MzMwMDAwMDAsIDB4MzMwMDAwMDAsIDB4MzMwMDAwMDAsIDB4MzMwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDEwMDAwMDAsIDB4MDEwMDAwMDAsIDB4MDEwMDAwMDAsIDB4MDEwMDAwMDAsIDB4MDEwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MWYwMDAwMDAsIDB4MWYwMDAwMDAsIDB4MWYwMDAwMDAsIDB4MWYwMDAwMDAsIDB4MWYwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDBiODAwMDAsIDB4MDBiODAwMDAsIDB4MDBiODAwMDAsIDB4MDBiODAwMDAsIDB4MDBiODAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDBiNzAwMDAsIDB4MDBiNzAwMDAsIDB4MDBiNzAwMDAsIDB4MDBiNzAwMDAsIDB4MDBiNzAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA4NDAwMDAsIDB4MDA4NDAwMDAsIDB4MDA4NDAwMDAsIDB4MDA4NDAwMDAsIDB4MDA4NDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA5ODAwMDAsIDB4MDA5ODAwMDAsIDB4MDA5ODAwMDAsIDB4MDA5ODAwMDAsIDB4MDA5ODAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDBjMDAwMDAsIDB4MDBjMDAwMDAsIDB4MDBjMDAwMDAsIDB4MDBjMDAwMDAsIDB4MDBjMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDBkNzAwMDAsIDB4MDBkNzAwMDAsIDB4MDBkNzAwMDAsIDB4MDBkNzAwMDAsIDB4MDBkNzAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA2MTAwMDAsIDB4MDA2MTAwMDAsIDB4MDA2MTAwMDAsIDB4MDA2MTAwMDAsIDB4MDA2MTAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDBmZTAwMDAsIDB4MDBmZTAwMDAsIDB4MDBmZTAwMDAsIDB4MDBmZTAwMDAsIDB4MDBmZTAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDBkZTAwMDAsIDB4MDBkZTAwMDAsIDB4MDBkZTAwMDAsIDB4MDBkZTAwMDAsIDB4MDBkZTAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA3ZjAwMDAsIDB4MDA3ZjAwMDAsIDB4MDA3ZjAwMDAsIDB4MDA3ZjAwMDAsIDB4MDA3ZjAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDQzZDAwMDAsIDB4MDQzZDAwMDAsIDB4MDQzZDAwMDAsIDB4MDQzZDAwMDAsIDB4MDQzZDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA3NzAwMDAsIDB4MDA3NzAwMDAsIDB4MDA3NzAwMDAsIDB4MDA3NzAwMDAsIDB4MDA3NzAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA0NDAwMDAsIDB4MDA0NDAwMDAsIDB4MDA0NDAwMDAsIDB4MDA0NDAwMDAsIDB4MDA0NDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA5ODAwMDAsIDB4MDA5ODAwMDAsIDB4MDA5ODAwMDAsIDB4MDA5ODAwMDAsIDB4MDA5ODAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAxMDAwODAsIDB4MDAxMDAwODAsIDB4MDAxMDAwODAsIDB4MDAxMDAwODAsIDB4MDAxMDAwODAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwNWMwMzQsIDB4MDAwNWMwMzQsIDB4MDAwNWMwMzQsIDB4MDAwNWMwMzQsIDB4MDAwNWMwMzQgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAzMTAwZjAsIDB4MDAzMTAwZjAsIDB4MDAzMTAwZjAsIDB4MDAzMTAwZjAsIDB4MDAzMTAwZjAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwYzAxMWYsIDB4MDAwYzAxMWYsIDB4MDAwYzAxMWYsIDB4MDAwYzAxMWYsIDB4MDAwYzAxMWYgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA1MTAwNDAsIDB4MDA1MTAwNDAsIDB4MDA1MTAwNDAsIDB4MDA1MTAwNDAsIDB4MDA1MTAwNDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA1MDAwZGEsIDB4MDA1MDAwZGEsIDB4MDA1MDAwZGEsIDB4MDA1MDAwZGEsIDB4MDA1MDAwZGEgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDQwNDQsIDB4MDAwMDQwNDQsIDB4MDAwMDQwNDQsIDB4MDAwMDQwNDQsIDB4MDAwMDQwNDQgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDYwYzAsIDB4MDAwMDYwYzAsIDB4MDAwMDYwYzAsIDB4MDAwMDYwYzAsIDB4MDAwMDYwYzAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDJjMDAsIDB4MDAwMDJjMDAsIDB4MDAwMDM2MDAsIDB4MDAwMDM2MDAsIDB4MDAwMDJjMDAgfSB9LAotCXsgNiwgMHg5OGM4LAotCSAgICB7IDB4MDAwMDA0MDMsIDB4MDAwMDA0MDMsIDB4MDAwNDA0MDMsIDB4MDAwNDA0MDMsIDB4MDAwNDA0MDMgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDY0MDAsIDB4MDAwMDY0MDAsIDB4MDAwMDY0MDAsIDB4MDAwMDY0MDAsIDB4MDAwMDY0MDAgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAgfSB9LAotCXsgNywgMHg5OGNjLAotCSAgICB7IDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUgfSB9LAorCS8qIEJBTksgLyBDLlIuICAgICBBL1hSICAgICAgICAgQiAgICAgICAgICAgRyAgICAgICovCisJeyAxLCAweDk4ZDQsIHsgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCB9IH0sCisJeyAyLCAweDk4ZDAsIHsgMHgwMDAwMDAwOCwgMHgwMDAwMDAwOCwgMHgwMDAwMDAwOCB9IH0sCisJeyAzLCAweDk4ZGMsIHsgMHgwMGEwMDBjMCwgMHgwMGUwMDBjMCwgMHgwMGUwMDBjMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgzMzAwMDAwMCwgMHgzMzAwMDAwMCwgMHgzMzAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMTAwMDAwMCwgMHgwMTAwMDAwMCwgMHgwMTAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgxZjAwMDAwMCwgMHgxZjAwMDAwMCwgMHgxZjAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMGI4MDAwMCwgMHgwMGI4MDAwMCwgMHgwMGI4MDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMGI3MDAwMCwgMHgwMGI3MDAwMCwgMHgwMGI3MDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDg0MDAwMCwgMHgwMDg0MDAwMCwgMHgwMDg0MDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDk4MDAwMCwgMHgwMDk4MDAwMCwgMHgwMDk4MDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMGMwMDAwMCwgMHgwMGMwMDAwMCwgMHgwMGMwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMGZmMDAwMCwgMHgwMGZmMDAwMCwgMHgwMGZmMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMGZmMDAwMCwgMHgwMGZmMDAwMCwgMHgwMGZmMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMGZmMDAwMCwgMHgwMGZmMDAwMCwgMHgwMGZmMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMGZmMDAwMCwgMHgwMGZmMDAwMCwgMHgwMGZmMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMGQ3MDAwMCwgMHgwMGQ3MDAwMCwgMHgwMGQ3MDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDYxMDAwMCwgMHgwMDYxMDAwMCwgMHgwMDYxMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMGZlMDAwMCwgMHgwMGZlMDAwMCwgMHgwMGZlMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMGRlMDAwMCwgMHgwMGRlMDAwMCwgMHgwMGRlMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDdmMDAwMCwgMHgwMDdmMDAwMCwgMHgwMDdmMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwNDNkMDAwMCwgMHgwNDNkMDAwMCwgMHgwNDNkMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDc3MDAwMCwgMHgwMDc3MDAwMCwgMHgwMDc3MDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDQ0MDAwMCwgMHgwMDQ0MDAwMCwgMHgwMDQ0MDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDk4MDAwMCwgMHgwMDk4MDAwMCwgMHgwMDk4MDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDEwMDA4MCwgMHgwMDEwMDA4MCwgMHgwMDEwMDA4MCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDA1YzAzNCwgMHgwMDA1YzAzNCwgMHgwMDA1YzAzNCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDMxMDBmMCwgMHgwMDMxMDBmMCwgMHgwMDMxMDBmMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDBjMDExZiwgMHgwMDBjMDExZiwgMHgwMDBjMDExZiB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDUxMDA0MCwgMHgwMDUxMDA0MCwgMHgwMDUxMDA0MCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDUwMDBkYSwgMHgwMDUwMDBkYSwgMHgwMDUwMDBkYSB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDAwNDA0NCwgMHgwMDAwNDA0NCwgMHgwMDAwNDA0NCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDAwNjBjMCwgMHgwMDAwNjBjMCwgMHgwMDAwNjBjMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDAwMmMwMCwgMHgwMDAwMzYwMCwgMHgwMDAwMzYwMCB9IH0sCisJeyA2LCAweDk4YzgsIHsgMHgwMDAwMDQwMywgMHgwMDA0MDQwMywgMHgwMDA0MDQwMyB9IH0sCisJeyA3LCAweDk4OWMsIHsgMHgwMDAwNjQwMCwgMHgwMDAwNjQwMCwgMHgwMDAwNjQwMCB9IH0sCisJeyA3LCAweDk4OWMsIHsgMHgwMDAwMDgwMCwgMHgwMDAwMDgwMCwgMHgwMDAwMDgwMCB9IH0sCisJeyA3LCAweDk4Y2MsIHsgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSB9IH0sCiB9OwogCiAKQEAgLTkzMSw5MiArNjg0LDU5IEBACiAqIEFSMjMxNyAoU3BpZGVyIFNvQykgICAgICAgKgogXCoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorLyogQkFOSyAyCQkJCWxlbiAgcG9zIGNvbCAqLworI2RlZmluZSBBUjVLX1JGMjQyNV9SRl9UVVJCTwkJeyAxLCAxLCAgIDIgfQorCiAvKiBCQU5LIDYJCQkJbGVuICBwb3MgY29sICovCiAjZGVmaW5lCUFSNUtfUkYyNDI1X09CXzJHSFoJCXsgMywgMTkzLCAwIH0KICNkZWZpbmUJQVI1S19SRjI0MjVfREJfMkdIWgkJeyAzLCAxOTAsIDAgfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX3JmX3JlZyByZl9yZWdzXzI0MjVbXSA9IHsKKwl7MiwgQVI1S19SRl9UVVJCTywJCUFSNUtfUkYyNDI1X1JGX1RVUkJPfSwKIAl7NiwgQVI1S19SRl9PQl8yR0haLAkJQVI1S19SRjI0MjVfT0JfMkdIWn0sCiAJezYsIEFSNUtfUkZfREJfMkdIWiwJCUFSNUtfUkYyNDI1X0RCXzJHSFp9LAogfTsKIAogLyogRGVmYXVsdCBtb2RlIHNwZWNpZmljIHNldHRpbmdzCi0gKiBYWFg6IGEvYVR1cmJvID8KICAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmlfcmZidWZmZXIgcmZiXzI0MjVbXSA9IHsKLQl7IDEsIDB4OThkNCwKLQkvKiAgICAgbW9kZSBhL1hSICBtb2RlIGFUdXJibyAgICBtb2RlIGIgICAgIG1vZGUgZyAgICBtb2RlIGdUdXJibyAqLwotCSAgICB7IDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAgfSB9LAotCXsgMiwgMHg5OGQwLAotCSAgICB7IDB4MDIwMDE0MDgsIDB4MDIwMDE0MDgsIDB4MDIwMDE0MDgsIDB4MDIwMDE0MDgsIDB4MDIwMDE0MDggfSB9LAotCXsgMywgMHg5OGRjLAotCSAgICB7IDB4MDBhMDIwYzAsIDB4MDBhMDIwYzAsIDB4MDBlMDIwYzAsIDB4MDBlMDIwYzAsIDB4MDBlMDIwYzAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MTAwMDAwMDAsIDB4MTAwMDAwMDAsIDB4MTAwMDAwMDAsIDB4MTAwMDAwMDAsIDB4MTAwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAxMDAwMDAsIDB4MDAxMDAwMDAsIDB4MDAxMDAwMDAsIDB4MDAxMDAwMDAsIDB4MDAxMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMjAwMDAsIDB4MDAwMjAwMDAsIDB4MDAwMjAwMDAsIDB4MDAwMjAwMDAsIDB4MDAwMjAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA3MzAwMDAsIDB4MDA3MzAwMDAsIDB4MDA3MzAwMDAsIDB4MDA3MzAwMDAsIDB4MDA3MzAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDBmODAwMDAsIDB4MDBmODAwMDAsIDB4MDBmODAwMDAsIDB4MDBmODAwMDAsIDB4MDBmODAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDBlNzAwMDAsIDB4MDBlNzAwMDAsIDB4MDBlNzAwMDAsIDB4MDBlNzAwMDAsIDB4MDBlNzAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAxNDAwMDAsIDB4MDAxNDAwMDAsIDB4MDAxNDAwMDAsIDB4MDAxNDAwMDAsIDB4MDAxNDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA5MTAwNDAsIDB4MDA5MTAwNDAsIDB4MDA5MTAwNDAsIDB4MDA5MTAwNDAsIDB4MDA5MTAwNDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwNzAwMWEsIDB4MDAwNzAwMWEsIDB4MDAwNzAwMWEsIDB4MDAwNzAwMWEsIDB4MDAwNzAwMWEgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA0MTAwMDAsIDB4MDA0MTAwMDAsIDB4MDA0MTAwMDAsIDB4MDA0MTAwMDAsIDB4MDA0MTAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA4MTAwMDAsIDB4MDA4MTAwMDAsIDB4MDA4MTAwNjAsIDB4MDA4MTAwNjAsIDB4MDA4MTAwNjAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMjA4MDAsIDB4MDAwMjA4MDAsIDB4MDAwMjA4MDMsIDB4MDAwMjA4MDMsIDB4MDAwMjA4MDMgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDE2NjAsIDB4MDAwMDE2NjAsIDB4MDAwMDE2NjAsIDB4MDAwMDE2NjAsIDB4MDAwMDE2NjAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDE2ODgsIDB4MDAwMDE2ODgsIDB4MDAwMDE2ODgsIDB4MDAwMDE2ODgsIDB4MDAwMDE2ODggfSB9LAotCXsgNiwgMHg5OGM0LAotCSAgICB7IDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDY0MDAsIDB4MDAwMDY0MDAsIDB4MDAwMDY0MDAsIDB4MDAwMDY0MDAsIDB4MDAwMDY0MDAgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAgfSB9LAotCXsgNywgMHg5OGNjLAotCSAgICB7IDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUgfSB9LAorCS8qIEJBTksgLyBDLlIuICAgICBBL1hSICAgICAgICAgQiAgICAgICAgICAgRyAgICAgICovCisJeyAxLCAweDk4ZDQsIHsgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCB9IH0sCisJeyAyLCAweDk4ZDAsIHsgMHgwMjAwMTQwOCwgMHgwMjAwMTQwOCwgMHgwMjAwMTQwOCB9IH0sCisJeyAzLCAweDk4ZGMsIHsgMHgwMGEwMjBjMCwgMHgwMGUwMjBjMCwgMHgwMGUwMjBjMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgxMDAwMDAwMCwgMHgxMDAwMDAwMCwgMHgxMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDJhMDAwMCwgMHgwMDJhMDAwMCwgMHgwMDJhMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDEwMDAwMCwgMHgwMDEwMDAwMCwgMHgwMDEwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDAyMDAwMCwgMHgwMDAyMDAwMCwgMHgwMDAyMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDczMDAwMCwgMHgwMDczMDAwMCwgMHgwMDczMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMGY4MDAwMCwgMHgwMGY4MDAwMCwgMHgwMGY4MDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMGU3MDAwMCwgMHgwMGU3MDAwMCwgMHgwMGU3MDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDE0MDAwMCwgMHgwMDE0MDAwMCwgMHgwMDE0MDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDkxMDA0MCwgMHgwMDkxMDA0MCwgMHgwMDkxMDA0MCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDA3MDAxYSwgMHgwMDA3MDAxYSwgMHgwMDA3MDAxYSB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDQxMDAwMCwgMHgwMDQxMDAwMCwgMHgwMDQxMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDgxMDAwMCwgMHgwMDgxMDA2MCwgMHgwMDgxMDA2MCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDAyMDgwMCwgMHgwMDAyMDgwMywgMHgwMDAyMDgwMyB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDAwMTY2MCwgMHgwMDAwMTY2MCwgMHgwMDAwMTY2MCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDAwMTY4OCwgMHgwMDAwMTY4OCwgMHgwMDAwMTY4OCB9IH0sCisJeyA2LCAweDk4YzQsIHsgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSB9IH0sCisJeyA3LCAweDk4OWMsIHsgMHgwMDAwNjQwMCwgMHgwMDAwNjQwMCwgMHgwMDAwNjQwMCB9IH0sCisJeyA3LCAweDk4OWMsIHsgMHgwMDAwMDgwMCwgMHgwMDAwMDgwMCwgMHgwMDAwMDgwMCB9IH0sCisJeyA3LCAweDk4Y2MsIHsgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSB9IH0sCiB9OwogCiAvKgpAQCAtMTAyNCwxNTggKzc0NCw4NSBAQAogICogYmFuayBtb2RpZmljYXRpb24gYW5kIGdldCByaWQgb2YgdGhpcwogICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaV9yZmJ1ZmZlciByZmJfMjMxN1tdID0gewotCXsgMSwgMHg5OGQ0LAotCS8qICAgICBtb2RlIGEvWFIgIG1vZGUgYVR1cmJvICAgIG1vZGUgYiAgICAgbW9kZSBnICAgIG1vZGUgZ1R1cmJvICovCi0JICAgIHsgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCB9IH0sCi0JeyAyLCAweDk4ZDAsCi0JICAgIHsgMHgwMjAwMTQwOCwgMHgwMjAxMTQwOCwgMHgwMjAwMTQwOCwgMHgwMjAwMTQwOCwgMHgwMjAxMTQwOCB9IH0sCi0JeyAzLCAweDk4ZGMsCi0JICAgIHsgMHgwMGEwMjBjMCwgMHgwMGEwMjBjMCwgMHgwMGUwMjBjMCwgMHgwMGUwMjBjMCwgMHgwMGUwMjBjMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgxMDAwMDAwMCwgMHgxMDAwMDAwMCwgMHgxMDAwMDAwMCwgMHgxMDAwMDAwMCwgMHgxMDAwMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDJhMDAwMCwgMHgwMDJhMDAwMCwgMHgwMDJhMDAwMCwgMHgwMDJhMDAwMCwgMHgwMDJhMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDEwMDAwMCwgMHgwMDEwMDAwMCwgMHgwMDEwMDAwMCwgMHgwMDEwMDAwMCwgMHgwMDEwMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDAyMDAwMCwgMHgwMDAyMDAwMCwgMHgwMDAyMDAwMCwgMHgwMDAyMDAwMCwgMHgwMDAyMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDczMDAwMCwgMHgwMDczMDAwMCwgMHgwMDczMDAwMCwgMHgwMDczMDAwMCwgMHgwMDczMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMGY4MDAwMCwgMHgwMGY4MDAwMCwgMHgwMGY4MDAwMCwgMHgwMGY4MDAwMCwgMHgwMGY4MDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMGU3MDAwMCwgMHgwMGU3MDAwMCwgMHgwMGU3MDAwMCwgMHgwMGU3MDAwMCwgMHgwMGU3MDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDE0MDEwMCwgMHgwMDE0MDEwMCwgMHgwMDE0MDEwMCwgMHgwMDE0MDEwMCwgMHgwMDE0MDEwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDkxMDA0MCwgMHgwMDkxMDA0MCwgMHgwMDkxMDA0MCwgMHgwMDkxMDA0MCwgMHgwMDkxMDA0MCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDA3MDAxYSwgMHgwMDA3MDAxYSwgMHgwMDA3MDAxYSwgMHgwMDA3MDAxYSwgMHgwMDA3MDAxYSB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDQxMDAwMCwgMHgwMDQxMDAwMCwgMHgwMDQxMDAwMCwgMHgwMDQxMDAwMCwgMHgwMDQxMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDgxMDAwMCwgMHgwMDgxMDAwMCwgMHgwMDgxMDA2MCwgMHgwMDgxMDA2MCwgMHgwMDgxMDA2MCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDAyMDgwMCwgMHgwMDAyMDgwMCwgMHgwMDAyMDgwMywgMHgwMDAyMDgwMywgMHgwMDAyMDgwMyB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMTY2MCwgMHgwMDAwMTY2MCwgMHgwMDAwMTY2MCwgMHgwMDAwMTY2MCwgMHgwMDAwMTY2MCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwOTY4OCwgMHgwMDAwOTY4OCwgMHgwMDAwOTY4OCwgMHgwMDAwOTY4OCwgMHgwMDAwOTY4OCB9IH0sCi0JeyA2LCAweDk4YzQsCi0JICAgIHsgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSB9IH0sCi0JeyA3LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwNjQwMCwgMHgwMDAwNjQwMCwgMHgwMDAwNjQwMCwgMHgwMDAwNjQwMCwgMHgwMDAwNjQwMCB9IH0sCi0JeyA3LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDgwMCwgMHgwMDAwMDgwMCwgMHgwMDAwMDgwMCwgMHgwMDAwMDgwMCwgMHgwMDAwMDgwMCB9IH0sCi0JeyA3LCAweDk4Y2MsCi0JICAgIHsgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSB9IH0sCisJLyogQkFOSyAvIEMuUi4gICAgIEEvWFIgICAgICAgICBCICAgICAgICAgICBHICAgICAgKi8KKwl7IDEsIDB4OThkNCwgeyAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwIH0gfSwKKwl7IDIsIDB4OThkMCwgeyAweDAyMDAxNDA4LCAweDAyMDAxNDA4LCAweDAyMDAxNDA4IH0gfSwKKwl7IDMsIDB4OThkYywgeyAweDAwYTAyMGMwLCAweDAwZTAyMGMwLCAweDAwZTAyMGMwIH0gfSwKKwl7IDYsIDB4OTg5YywgeyAweDEwMDAwMDAwLCAweDEwMDAwMDAwLCAweDEwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywgeyAweDAwMmEwMDAwLCAweDAwMmEwMDAwLCAweDAwMmEwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywgeyAweDAwMTAwMDAwLCAweDAwMTAwMDAwLCAweDAwMTAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywgeyAweDAwMDIwMDAwLCAweDAwMDIwMDAwLCAweDAwMDIwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywgeyAweDAwNzMwMDAwLCAweDAwNzMwMDAwLCAweDAwNzMwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywgeyAweDAwZjgwMDAwLCAweDAwZjgwMDAwLCAweDAwZjgwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywgeyAweDAwZTcwMDAwLCAweDAwZTcwMDAwLCAweDAwZTcwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywgeyAweDAwMTQwMTAwLCAweDAwMTQwMTAwLCAweDAwMTQwMTAwIH0gfSwKKwl7IDYsIDB4OTg5YywgeyAweDAwOTEwMDQwLCAweDAwOTEwMDQwLCAweDAwOTEwMDQwIH0gfSwKKwl7IDYsIDB4OTg5YywgeyAweDAwMDcwMDFhLCAweDAwMDcwMDFhLCAweDAwMDcwMDFhIH0gfSwKKwl7IDYsIDB4OTg5YywgeyAweDAwNDEwMDAwLCAweDAwNDEwMDAwLCAweDAwNDEwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywgeyAweDAwODEwMDAwLCAweDAwODEwMDYwLCAweDAwODEwMDYwIH0gfSwKKwl7IDYsIDB4OTg5YywgeyAweDAwMDIwODAwLCAweDAwMDIwODAzLCAweDAwMDIwODAzIH0gfSwKKwl7IDYsIDB4OTg5YywgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywgeyAweDAwMDAxNjYwLCAweDAwMDAxNjYwLCAweDAwMDAxNjYwIH0gfSwKKwl7IDYsIDB4OTg5YywgeyAweDAwMDA5Njg4LCAweDAwMDA5Njg4LCAweDAwMDA5Njg4IH0gfSwKKwl7IDYsIDB4OThjNCwgeyAweDAwMDAwMDAxLCAweDAwMDAwMDAxLCAweDAwMDAwMDAxIH0gfSwKKwl7IDcsIDB4OTg5YywgeyAweDAwMDA2NDAwLCAweDAwMDA2NDAwLCAweDAwMDA2NDAwIH0gfSwKKwl7IDcsIDB4OTg5YywgeyAweDAwMDAwODAwLCAweDAwMDAwODAwLCAweDAwMDAwODAwIH0gfSwKKwl7IDcsIDB4OThjYywgeyAweDAwMDAwMDBlLCAweDAwMDAwMDBlLCAweDAwMDAwMDBlIH0gfSwKIH07CiAKIC8qCiAgKiBUT0RPOiBIYW5kbGUgdGhlIGZldyBkaWZmZXJlbmNlcyB3aXRoIHN3YW4gZHVyaW5nCiAgKiBiYW5rIG1vZGlmaWNhdGlvbiBhbmQgZ2V0IHJpZCBvZiB0aGlzCi0gKiBYWFg6IGEvYVR1cmJvID8KICAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmlfcmZidWZmZXIgcmZiXzI0MTdbXSA9IHsKLQl7IDEsIDB4OThkNCwKLQkvKiAgICAgbW9kZSBhL1hSICBtb2RlIGFUdXJibyAgICBtb2RlIGIgICAgIG1vZGUgZyAgICBtb2RlIGdUdXJibyAqLwotCSAgICB7IDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAgfSB9LAotCXsgMiwgMHg5OGQwLAotCSAgICB7IDB4MDIwMDE0MDgsIDB4MDIwMDE0MDgsIDB4MDIwMDE0MDgsIDB4MDIwMDE0MDgsIDB4MDIwMDE0MDggfSB9LAotCXsgMywgMHg5OGRjLAotCSAgICB7IDB4MDBhMDIwYzAsIDB4MDBhMDIwYzAsIDB4MDBlMDIwYzAsIDB4MDBlMDIwYzAsIDB4MDBlMDIwYzAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MTAwMDAwMDAsIDB4MTAwMDAwMDAsIDB4MTAwMDAwMDAsIDB4MTAwMDAwMDAsIDB4MTAwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAxMDAwMDAsIDB4MDAxMDAwMDAsIDB4MDAxMDAwMDAsIDB4MDAxMDAwMDAsIDB4MDAxMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMjAwMDAsIDB4MDAwMjAwMDAsIDB4MDAwMjAwMDAsIDB4MDAwMjAwMDAsIDB4MDAwMjAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA3MzAwMDAsIDB4MDA3MzAwMDAsIDB4MDA3MzAwMDAsIDB4MDA3MzAwMDAsIDB4MDA3MzAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDBmODAwMDAsIDB4MDBmODAwMDAsIDB4MDBmODAwMDAsIDB4MDBmODAwMDAsIDB4MDBmODAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDBlNzAwMDAsIDB4MDBlNzAwMDAsIDB4ODBlNzAwMDAsIDB4ODBlNzAwMDAsIDB4MDBlNzAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAxNDAwMDAsIDB4MDAxNDAwMDAsIDB4MDAxNDAwMDAsIDB4MDAxNDAwMDAsIDB4MDAxNDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA5MTAwNDAsIDB4MDA5MTAwNDAsIDB4MDA5MTAwNDAsIDB4MDA5MTAwNDAsIDB4MDA5MTAwNDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwNzAwMWEsIDB4MDAwNzAwMWEsIDB4MDIwNzAwMWEsIDB4MDIwNzAwMWEsIDB4MDAwNzAwMWEgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA0MTAwMDAsIDB4MDA0MTAwMDAsIDB4MDA0MTAwMDAsIDB4MDA0MTAwMDAsIDB4MDA0MTAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDA4MTAwMDAsIDB4MDA4MTAwMDAsIDB4MDA4MTAwNjAsIDB4MDA4MTAwNjAsIDB4MDA4MTAwNjAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMjA4MDAsIDB4MDAwMjA4MDAsIDB4MDAwMjA4MDMsIDB4MDAwMjA4MDMsIDB4MDAwMjA4MDMgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDE2NjAsIDB4MDAwMDE2NjAsIDB4MDAwMDE2NjAsIDB4MDAwMDE2NjAsIDB4MDAwMDE2NjAgfSB9LAotCXsgNiwgMHg5ODljLAotCSAgICB7IDB4MDAwMDE2ODgsIDB4MDAwMDE2ODgsIDB4MDAwMDE2ODgsIDB4MDAwMDE2ODgsIDB4MDAwMDE2ODggfSB9LAotCXsgNiwgMHg5OGM0LAotCSAgICB7IDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDY0MDAsIDB4MDAwMDY0MDAsIDB4MDAwMDY0MDAsIDB4MDAwMDY0MDAsIDB4MDAwMDY0MDAgfSB9LAotCXsgNywgMHg5ODljLAotCSAgICB7IDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAgfSB9LAotCXsgNywgMHg5OGNjLAotCSAgICB7IDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUgfSB9LAorCS8qIEJBTksgLyBDLlIuICAgICBBL1hSICAgICAgICAgQiAgICAgICAgICAgRyAgICAgICovCisJeyAxLCAweDk4ZDQsIHsgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCB9IH0sCisJeyAyLCAweDk4ZDAsIHsgMHgwMjAwMTQwOCwgMHgwMjAwMTQwOCwgMHgwMjAwMTQwOCB9IH0sCisJeyAzLCAweDk4ZGMsIHsgMHgwMGEwMjBjMCwgMHgwMGUwMjBjMCwgMHgwMGUwMjBjMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgxMDAwMDAwMCwgMHgxMDAwMDAwMCwgMHgxMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDJhMDAwMCwgMHgwMDJhMDAwMCwgMHgwMDJhMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDEwMDAwMCwgMHgwMDEwMDAwMCwgMHgwMDEwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDAyMDAwMCwgMHgwMDAyMDAwMCwgMHgwMDAyMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDczMDAwMCwgMHgwMDczMDAwMCwgMHgwMDczMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMGY4MDAwMCwgMHgwMGY4MDAwMCwgMHgwMGY4MDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMGU3MDAwMCwgMHg4MGU3MDAwMCwgMHg4MGU3MDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDE0MDAwMCwgMHgwMDE0MDAwMCwgMHgwMDE0MDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDkxMDA0MCwgMHgwMDkxMDA0MCwgMHgwMDkxMDA0MCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDA3MDAxYSwgMHgwMjA3MDAxYSwgMHgwMjA3MDAxYSB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDQxMDAwMCwgMHgwMDQxMDAwMCwgMHgwMDQxMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDgxMDAwMCwgMHgwMDgxMDA2MCwgMHgwMDgxMDA2MCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDAyMDgwMCwgMHgwMDAyMDgwMywgMHgwMDAyMDgwMyB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDAwMTY2MCwgMHgwMDAwMTY2MCwgMHgwMDAwMTY2MCB9IH0sCisJeyA2LCAweDk4OWMsIHsgMHgwMDAwMTY4OCwgMHgwMDAwMTY4OCwgMHgwMDAwMTY4OCB9IH0sCisJeyA2LCAweDk4YzQsIHsgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSB9IH0sCisJeyA3LCAweDk4OWMsIHsgMHgwMDAwNjQwMCwgMHgwMDAwNjQwMCwgMHgwMDAwNjQwMCB9IH0sCisJeyA3LCAweDk4OWMsIHsgMHgwMDAwMDgwMCwgMHgwMDAwMDgwMCwgMHgwMDAwMDgwMCB9IH0sCisJeyA3LCAweDk4Y2MsIHsgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSB9IH0sCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3N5c2ZzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvc3lzZnMuYwppbmRleCA5MDc1N2RlLi45MjljNjhjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvc3lzZnMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvc3lzZnMuYwpAQCAtOTUsNyArOTUsNyBAQAogaW50CiBhdGg1a19zeXNmc19yZWdpc3RlcihzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKQogewotCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZzYy0+cGRldi0+ZGV2OworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHNjLT5kZXY7CiAJaW50IGVycjsKIAogCWVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmZGV2LT5rb2JqLCAmYXRoNWtfYXR0cmlidXRlX2dyb3VwX2FuaSk7CkBAIC0xMTAsNyArMTEwLDcgQEAKIHZvaWQKIGF0aDVrX3N5c2ZzX3VucmVnaXN0ZXIoc3RydWN0IGF0aDVrX3NvZnRjICpzYykKIHsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmc2MtPnBkZXYtPmRldjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBzYy0+ZGV2OwogCiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZkZXYtPmtvYmosICZhdGg1a19hdHRyaWJ1dGVfZ3JvdXBfYW5pKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9haGIuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9haGIuYwppbmRleCAxYTk4NGIwLi4yNWE2ZTQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYWhiLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FoYi5jCkBAIC0zNSwxMCArMzUsOSBAQAogCiAJcGRhdGEgPSAoc3RydWN0IGF0aDlrX3BsYXRmb3JtX2RhdGEgKikgcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJaWYgKG9mZiA+PSAoQVJSQVlfU0laRShwZGF0YS0+ZWVwcm9tX2RhdGEpKSkgewotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0ZBVEFMLAotCQkJICAiJXM6IGZsYXNoIHJlYWQgZmFpbGVkLCBvZmZzZXQgJTA4eCAiCi0JCQkgICJpcyBvdXQgb2YgcmFuZ2VcbiIsCi0JCQkgIF9fZnVuY19fLCBvZmYpOworCQlhdGhfZXJyKGNvbW1vbiwKKwkJCSIlczogZmxhc2ggcmVhZCBmYWlsZWQsIG9mZnNldCAlMDh4IGlzIG91dCBvZiByYW5nZVxuIiwKKwkJCV9fZnVuY19fLCBvZmYpOwogCQlyZXR1cm4gZmFsc2U7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYW5pLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYW5pLmMKaW5kZXggNjNjY2IzOS4uMmUzMWM3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FuaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hbmkuYwpAQCAtMTM1LDggKzEzNSw4IEBACiAJCWNja19iYXNlID0gQVJfUEhZX0NPVU5UTUFYIC0gYWgtPmNvbmZpZy5jY2tfdHJpZ19oaWdoOwogCX0KIAotCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQU5JLAotCQkgICJXcml0aW5nIG9mZG1iYXNlPSV1ICAgY2NrYmFzZT0ldVxuIiwgb2ZkbV9iYXNlLCBjY2tfYmFzZSk7CisJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQU5JLAorCQkiV3JpdGluZyBvZmRtYmFzZT0ldSAgIGNja2Jhc2U9JXVcbiIsIG9mZG1fYmFzZSwgY2NrX2Jhc2UpOwogCiAJRU5BQkxFX1JFR1dSSVRFX0JVRkZFUihhaCk7CiAKQEAgLTI2NywxMSArMjY3LDExIEBACiAKIAlhbmlTdGF0ZS0+bm9pc2VGbG9vciA9IEJFQUNPTl9SU1NJKGFoKTsKIAotCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQU5JLAotCQkgICIqKioqIG9mZG1sZXZlbCAlZD0+JWQsIHJzc2k9JWRbbG89JWQgaGk9JWRdXG4iLAotCQkgIGFuaVN0YXRlLT5vZmRtTm9pc2VJbW11bml0eUxldmVsLAotCQkgIGltbXVuaXR5TGV2ZWwsIGFuaVN0YXRlLT5ub2lzZUZsb29yLAotCQkgIGFuaVN0YXRlLT5yc3NpVGhyTG93LCBhbmlTdGF0ZS0+cnNzaVRockhpZ2gpOworCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0FOSSwKKwkJIioqKiogb2ZkbWxldmVsICVkPT4lZCwgcnNzaT0lZFtsbz0lZCBoaT0lZF1cbiIsCisJCWFuaVN0YXRlLT5vZmRtTm9pc2VJbW11bml0eUxldmVsLAorCQlpbW11bml0eUxldmVsLCBhbmlTdGF0ZS0+bm9pc2VGbG9vciwKKwkJYW5pU3RhdGUtPnJzc2lUaHJMb3csIGFuaVN0YXRlLT5yc3NpVGhySGlnaCk7CiAKIAlhbmlTdGF0ZS0+b2ZkbU5vaXNlSW1tdW5pdHlMZXZlbCA9IGltbXVuaXR5TGV2ZWw7CiAKQEAgLTMzNCwxMSArMzM0LDExIEBACiAJY29uc3Qgc3RydWN0IGFuaV9jY2tfbGV2ZWxfZW50cnkgKmVudHJ5X2NjazsKIAogCWFuaVN0YXRlLT5ub2lzZUZsb29yID0gQkVBQ09OX1JTU0koYWgpOwotCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQU5JLAotCQkgICIqKioqIGNja2xldmVsICVkPT4lZCwgcnNzaT0lZFtsbz0lZCBoaT0lZF1cbiIsCi0JCSAgYW5pU3RhdGUtPmNja05vaXNlSW1tdW5pdHlMZXZlbCwgaW1tdW5pdHlMZXZlbCwKLQkJICBhbmlTdGF0ZS0+bm9pc2VGbG9vciwgYW5pU3RhdGUtPnJzc2lUaHJMb3csCi0JCSAgYW5pU3RhdGUtPnJzc2lUaHJIaWdoKTsKKwlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19BTkksCisJCSIqKioqIGNja2xldmVsICVkPT4lZCwgcnNzaT0lZFtsbz0lZCBoaT0lZF1cbiIsCisJCWFuaVN0YXRlLT5jY2tOb2lzZUltbXVuaXR5TGV2ZWwsIGltbXVuaXR5TGV2ZWwsCisJCWFuaVN0YXRlLT5ub2lzZUZsb29yLCBhbmlTdGF0ZS0+cnNzaVRockxvdywKKwkJYW5pU3RhdGUtPnJzc2lUaHJIaWdoKTsKIAogCWlmICgoYWgtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OIHx8CiAJICAgICBhaC0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSAmJgpAQCAtMzU4LDcgKzM1OCw3IEBACiAJCQkJICAgICBlbnRyeV9jY2stPmZpcl9zdGVwX2xldmVsKTsKIAogCS8qIFNraXAgTVJDIENDSyBmb3IgcHJlIEFSOTAwMyBmYW1pbGllcyAqLwotCWlmICghQVJfU1JFVl85MzAwXzIwX09SX0xBVEVSKGFoKSkKKwlpZiAoIUFSX1NSRVZfOTMwMF8yMF9PUl9MQVRFUihhaCkgfHwgQVJfU1JFVl85NDg1KGFoKSkKIAkJcmV0dXJuOwogCiAJaWYgKGFuaVN0YXRlLT5tcmNDQ0tPZmYgPT0gZW50cnlfY2NrLT5tcmNfY2NrX29uKQpAQCAtNDc4LDggKzQ3OCw4IEBACiAKIAlpZiAoYWgtPm9wbW9kZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OCiAJICAgICYmIGFoLT5vcG1vZGUgIT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHsKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19BTkksCi0JCQkgICJSZXNldCBBTkkgc3RhdGUgb3Btb2RlICV1XG4iLCBhaC0+b3Btb2RlKTsKKwkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQU5JLAorCQkJIlJlc2V0IEFOSSBzdGF0ZSBvcG1vZGUgJXVcbiIsIGFoLT5vcG1vZGUpOwogCQlhaC0+c3RhdHMuYXN0X2FuaV9yZXNldCsrOwogCiAJCWlmIChhaC0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7CkBAIC01ODQsMTYgKzU4NCwxNCBAQAogCQkgICAgQVRIOUtfQU5JX09GRE1fREVGX0xFVkVMIHx8CiAJCSAgICBhbmlTdGF0ZS0+Y2NrTm9pc2VJbW11bml0eUxldmVsICE9CiAJCSAgICBBVEg5S19BTklfQ0NLX0RFRl9MRVZFTCkgewotCQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19BTkksCi0JCQkJICAiUmVzdG9yZSBkZWZhdWx0czogb3Btb2RlICV1ICIKLQkJCQkgICJjaGFuICVkIE1oei8weCV4IGlzX3NjYW5uaW5nPSVkICIKLQkJCQkgICJvZmRtOiVkIGNjazolZFxuIiwKLQkJCQkgIGFoLT5vcG1vZGUsCi0JCQkJICBjaGFuLT5jaGFubmVsLAotCQkJCSAgY2hhbi0+Y2hhbm5lbEZsYWdzLAotCQkJCSAgaXNfc2Nhbm5pbmcsCi0JCQkJICBhbmlTdGF0ZS0+b2ZkbU5vaXNlSW1tdW5pdHlMZXZlbCwKLQkJCQkgIGFuaVN0YXRlLT5jY2tOb2lzZUltbXVuaXR5TGV2ZWwpOworCQkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQU5JLAorCQkJCSJSZXN0b3JlIGRlZmF1bHRzOiBvcG1vZGUgJXUgY2hhbiAlZCBNaHovMHgleCBpc19zY2FubmluZz0lZCBvZmRtOiVkIGNjazolZFxuIiwKKwkJCQlhaC0+b3Btb2RlLAorCQkJCWNoYW4tPmNoYW5uZWwsCisJCQkJY2hhbi0+Y2hhbm5lbEZsYWdzLAorCQkJCWlzX3NjYW5uaW5nLAorCQkJCWFuaVN0YXRlLT5vZmRtTm9pc2VJbW11bml0eUxldmVsLAorCQkJCWFuaVN0YXRlLT5jY2tOb2lzZUltbXVuaXR5TGV2ZWwpOwogCiAJCQlhdGg5a19od19zZXRfb2ZkbV9uaWwoYWgsIEFUSDlLX0FOSV9PRkRNX0RFRl9MRVZFTCk7CiAJCQlhdGg5a19od19zZXRfY2NrX25pbChhaCwgQVRIOUtfQU5JX0NDS19ERUZfTEVWRUwpOwpAQCAtNjAyLDE2ICs2MDAsMTQgQEAKIAkJLyoKIAkJICogcmVzdG9yZSBoaXN0b3JpY2FsIGxldmVscyBmb3IgdGhpcyBjaGFubmVsCiAJCSAqLwotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0FOSSwKLQkJCSAgIlJlc3RvcmUgaGlzdG9yeTogb3Btb2RlICV1ICIKLQkJCSAgImNoYW4gJWQgTWh6LzB4JXggaXNfc2Nhbm5pbmc9JWQgIgotCQkJICAib2ZkbTolZCBjY2s6JWRcbiIsCi0JCQkgIGFoLT5vcG1vZGUsCi0JCQkgIGNoYW4tPmNoYW5uZWwsCi0JCQkgIGNoYW4tPmNoYW5uZWxGbGFncywKLQkJCSAgaXNfc2Nhbm5pbmcsCi0JCQkgIGFuaVN0YXRlLT5vZmRtTm9pc2VJbW11bml0eUxldmVsLAotCQkJICBhbmlTdGF0ZS0+Y2NrTm9pc2VJbW11bml0eUxldmVsKTsKKwkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQU5JLAorCQkJIlJlc3RvcmUgaGlzdG9yeTogb3Btb2RlICV1IGNoYW4gJWQgTWh6LzB4JXggaXNfc2Nhbm5pbmc9JWQgb2ZkbTolZCBjY2s6JWRcbiIsCisJCQlhaC0+b3Btb2RlLAorCQkJY2hhbi0+Y2hhbm5lbCwKKwkJCWNoYW4tPmNoYW5uZWxGbGFncywKKwkJCWlzX3NjYW5uaW5nLAorCQkJYW5pU3RhdGUtPm9mZG1Ob2lzZUltbXVuaXR5TGV2ZWwsCisJCQlhbmlTdGF0ZS0+Y2NrTm9pc2VJbW11bml0eUxldmVsKTsKIAogCQkJYXRoOWtfaHdfc2V0X29mZG1fbmlsKGFoLAogCQkJCQkgICAgICBhbmlTdGF0ZS0+b2ZkbU5vaXNlSW1tdW5pdHlMZXZlbCk7CkBAIC02NjYsMTkgKzY2MiwxNyBAQAogCiAJaWYgKCF1c2VfbmV3X2FuaShhaCkgJiYgKHBoeUNudDEgPCBvZmRtX2Jhc2UgfHwgcGh5Q250MiA8IGNja19iYXNlKSkgewogCQlpZiAocGh5Q250MSA8IG9mZG1fYmFzZSkgewotCQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19BTkksCi0JCQkJICAicGh5Q250MSAweCV4LCByZXNldHRpbmcgIgotCQkJCSAgImNvdW50ZXIgdmFsdWUgdG8gMHgleFxuIiwKLQkJCQkgIHBoeUNudDEsIG9mZG1fYmFzZSk7CisJCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19BTkksCisJCQkJInBoeUNudDEgMHgleCwgcmVzZXR0aW5nIGNvdW50ZXIgdmFsdWUgdG8gMHgleFxuIiwKKwkJCQlwaHlDbnQxLCBvZmRtX2Jhc2UpOwogCQkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfRVJSXzEsIG9mZG1fYmFzZSk7CiAJCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9FUlJfTUFTS18xLAogCQkJCSAgQVJfUEhZX0VSUl9PRkRNX1RJTUlORyk7CiAJCX0KIAkJaWYgKHBoeUNudDIgPCBjY2tfYmFzZSkgewotCQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19BTkksCi0JCQkJICAicGh5Q250MiAweCV4LCByZXNldHRpbmcgIgotCQkJCSAgImNvdW50ZXIgdmFsdWUgdG8gMHgleFxuIiwKLQkJCQkgIHBoeUNudDIsIGNja19iYXNlKTsKKwkJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0FOSSwKKwkJCQkicGh5Q250MiAweCV4LCByZXNldHRpbmcgY291bnRlciB2YWx1ZSB0byAweCV4XG4iLAorCQkJCXBoeUNudDIsIGNja19iYXNlKTsKIAkJCVJFR19XUklURShhaCwgQVJfUEhZX0VSUl8yLCBjY2tfYmFzZSk7CiAJCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9FUlJfTUFTS18yLAogCQkJCSAgQVJfUEhZX0VSUl9DQ0tfVElNSU5HKTsKQEAgLTcxOSwxMyArNzEzLDEyIEBACiAJY2NrUGh5RXJyUmF0ZSA9ICBhbmlTdGF0ZS0+Y2NrUGh5RXJyQ291bnQgKiAxMDAwIC8KIAkJCSBhbmlTdGF0ZS0+bGlzdGVuVGltZTsKIAotCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQU5JLAotCQkgICJsaXN0ZW5UaW1lPSVkIE9GRE06JWQgZXJycz0lZC9zIENDSzolZCAiCi0JCSAgImVycnM9JWQvcyBvZmRtX3R1cm49JWRcbiIsCi0JCSAgYW5pU3RhdGUtPmxpc3RlblRpbWUsCi0JCSAgYW5pU3RhdGUtPm9mZG1Ob2lzZUltbXVuaXR5TGV2ZWwsCi0JCSAgb2ZkbVBoeUVyclJhdGUsIGFuaVN0YXRlLT5jY2tOb2lzZUltbXVuaXR5TGV2ZWwsCi0JCSAgY2NrUGh5RXJyUmF0ZSwgYW5pU3RhdGUtPm9mZG1zVHVybik7CisJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQU5JLAorCQkibGlzdGVuVGltZT0lZCBPRkRNOiVkIGVycnM9JWQvcyBDQ0s6JWQgZXJycz0lZC9zIG9mZG1fdHVybj0lZFxuIiwKKwkJYW5pU3RhdGUtPmxpc3RlblRpbWUsCisJCWFuaVN0YXRlLT5vZmRtTm9pc2VJbW11bml0eUxldmVsLAorCQlvZmRtUGh5RXJyUmF0ZSwgYW5pU3RhdGUtPmNja05vaXNlSW1tdW5pdHlMZXZlbCwKKwkJY2NrUGh5RXJyUmF0ZSwgYW5pU3RhdGUtPm9mZG1zVHVybik7CiAKIAlpZiAoYW5pU3RhdGUtPmxpc3RlblRpbWUgPiA1ICogYWgtPmFuaXBlcmlvZCkgewogCQlpZiAob2ZkbVBoeUVyclJhdGUgPD0gYWgtPmNvbmZpZy5vZmRtX3RyaWdfbG93ICYmCkBAIC03NTUsNyArNzQ4LDcgQEAKIHsKIAlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKGFoKTsKIAotCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQU5JLCAiRW5hYmxlIE1JQiBjb3VudGVyc1xuIik7CisJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQU5JLCAiRW5hYmxlIE1JQiBjb3VudGVyc1xuIik7CiAKIAlhdGg5a19od191cGRhdGVfbWlic3RhdHMoYWgsICZhaC0+YWhfbWliU3RhdHMpOwogCkBAIC03NzcsNyArNzcwLDcgQEAKIHsKIAlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKGFoKTsKIAotCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQU5JLCAiRGlzYWJsZSBNSUIgY291bnRlcnNcbiIpOworCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0FOSSwgIkRpc2FibGUgTUlCIGNvdW50ZXJzXG4iKTsKIAogCVJFR19XUklURShhaCwgQVJfTUlCQywgQVJfTUlCQ19GTUMpOwogCWF0aDlrX2h3X3VwZGF0ZV9taWJzdGF0cyhhaCwgJmFoLT5haF9taWJTdGF0cyk7CkBAIC04MzQsMTAgKzgyNywxMCBAQAogewogCWludCBpOwogCi0JY29uc3QgaW50IHRvdGFsU2l6ZURlc2lyZWRbXSA9IHsgLTU1LCAtNTUsIC01NSwgLTU1LCAtNjIgfTsKLQljb25zdCBpbnQgY29hcnNlSGlnaFtdID0geyAtMTQsIC0xNCwgLTE0LCAtMTQsIC0xMiB9OwotCWNvbnN0IGludCBjb2Fyc2VMb3dbXSA9IHsgLTY0LCAtNjQsIC02NCwgLTY0LCAtNzAgfTsKLQljb25zdCBpbnQgZmlycHdyW10gPSB7IC03OCwgLTc4LCAtNzgsIC03OCwgLTgwIH07CisJc3RhdGljIGNvbnN0IGludCB0b3RhbFNpemVEZXNpcmVkW10gPSB7IC01NSwgLTU1LCAtNTUsIC01NSwgLTYyIH07CisJc3RhdGljIGNvbnN0IGludCBjb2Fyc2VIaWdoW10gPSB7IC0xNCwgLTE0LCAtMTQsIC0xNCwgLTEyIH07CisJc3RhdGljIGNvbnN0IGludCBjb2Fyc2VMb3dbXSA9IHsgLTY0LCAtNjQsIC02NCwgLTY0LCAtNzAgfTsKKwlzdGF0aWMgY29uc3QgaW50IGZpcnB3cltdID0geyAtNzgsIC03OCwgLTc4LCAtNzgsIC04MCB9OwogCiAJZm9yIChpID0gMDsgaSA8IDU7IGkrKykgewogCQlhaC0+dG90YWxTaXplRGVzaXJlZFtpXSA9IHRvdGFsU2l6ZURlc2lyZWRbaV07CkBAIC04NTIsNyArODQ1LDcgQEAKIAlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKGFoKTsKIAlpbnQgaTsKIAotCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQU5JLCAiSW5pdGlhbGl6ZSBBTklcbiIpOworCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0FOSSwgIkluaXRpYWxpemUgQU5JXG4iKTsKIAogCWlmICh1c2VfbmV3X2FuaShhaCkpIHsKIAkJYWgtPmNvbmZpZy5vZmRtX3RyaWdfaGlnaCA9IEFUSDlLX0FOSV9PRkRNX1RSSUdfSElHSF9ORVc7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI1MDA4X3BoeS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyNTAwOF9waHkuYwppbmRleCBlYTlmNDQ5Li5mZmNmNDRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI1MDA4X3BoeS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjUwMDhfcGh5LmMKQEAgLTEzMCw5ICsxMzAsOCBAQAogCS8qIHByZS1yZXZlcnNlIHRoaXMgZmllbGQgKi8KIAl0bXBfcmVnID0gYXRoOWtfaHdfcmV2ZXJzZV9iaXRzKG5ld19iaWFzLCAzKTsKIAotCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQ09ORklHLAotCQkgICJGb3JjZSByZl9wd2RfaWNzeW5kaXYgdG8gJTFkIG9uICU0ZFxuIiwKLQkJICBuZXdfYmlhcywgc3ludGhfZnJlcSk7CisJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ09ORklHLCAiRm9yY2UgcmZfcHdkX2ljc3luZGl2IHRvICUxZCBvbiAlNGRcbiIsCisJCW5ld19iaWFzLCBzeW50aF9mcmVxKTsKIAogCS8qIHN3aXp6bGUgcmZfcHdkX2ljc3luZGl2ICovCiAJYXI1MDA4X2h3X3BoeV9tb2RpZnlfcnhfYnVmZmVyKGFoLT5hbmFsb2dCYW5rNkRhdGEsIHRtcF9yZWcsIDMsIDE4MSwgMyk7CkBAIC0xNzMsOCArMTcyLDcgQEAKIAkJCWNoYW5uZWxTZWwgPSAoKGZyZXEgLSA3MDQpICogMiAtIDMwNDApIC8gMTA7CiAJCQliTW9kZVN5bnRoID0gMTsKIAkJfSBlbHNlIHsKLQkJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRkFUQUwsCi0JCQkJICAiSW52YWxpZCBjaGFubmVsICV1IE1IelxuIiwgZnJlcSk7CisJCQlhdGhfZXJyKGNvbW1vbiwgIkludmFsaWQgY2hhbm5lbCAldSBNSHpcbiIsIGZyZXEpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIApAQCAtMjA2LDggKzIwNCw3IEBACiAJCWNoYW5uZWxTZWwgPSBhdGg5a19od19yZXZlcnNlX2JpdHMoKGZyZXEgLSA0ODAwKSAvIDUsIDgpOwogCQlhTW9kZVJlZlNlbCA9IGF0aDlrX2h3X3JldmVyc2VfYml0cygxLCAyKTsKIAl9IGVsc2UgewotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0ZBVEFMLAotCQkJICAiSW52YWxpZCBjaGFubmVsICV1IE1IelxuIiwgZnJlcSk7CisJCWF0aF9lcnIoY29tbW9uLCAiSW52YWxpZCBjaGFubmVsICV1IE1IelxuIiwgZnJlcSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMjQ0LDEzICsyNDEsMTUgQEAKIAlpbnQgdXBwZXIsIGxvd2VyLCBjdXJfdml0X21hc2s7CiAJaW50IHRtcCwgbmV3OwogCWludCBpOwotCWludCBwaWxvdF9tYXNrX3JlZ1s0XSA9IHsgQVJfUEhZX1RJTUlORzcsIEFSX1BIWV9USU1JTkc4LAotCQkJICBBUl9QSFlfUElMT1RfTUFTS18wMV8zMCwgQVJfUEhZX1BJTE9UX01BU0tfMzFfNjAKKwlzdGF0aWMgaW50IHBpbG90X21hc2tfcmVnWzRdID0geworCQlBUl9QSFlfVElNSU5HNywgQVJfUEhZX1RJTUlORzgsCisJCUFSX1BIWV9QSUxPVF9NQVNLXzAxXzMwLCBBUl9QSFlfUElMT1RfTUFTS18zMV82MAogCX07Ci0JaW50IGNoYW5fbWFza19yZWdbNF0gPSB7IEFSX1BIWV9USU1JTkc5LCBBUl9QSFlfVElNSU5HMTAsCi0JCQkgQVJfUEhZX0NIQU5ORUxfTUFTS18wMV8zMCwgQVJfUEhZX0NIQU5ORUxfTUFTS18zMV82MAorCXN0YXRpYyBpbnQgY2hhbl9tYXNrX3JlZ1s0XSA9IHsKKwkJQVJfUEhZX1RJTUlORzksIEFSX1BIWV9USU1JTkcxMCwKKwkJQVJfUEhZX0NIQU5ORUxfTUFTS18wMV8zMCwgQVJfUEhZX0NIQU5ORUxfTUFTS18zMV82MAogCX07Ci0JaW50IGluY1s0XSA9IHsgMCwgMTAwLCAwLCAwIH07CisJc3RhdGljIGludCBpbmNbNF0gPSB7IDAsIDEwMCwgMCwgMCB9OwogCiAJaW50OF90IG1hc2tfbVsxMjNdOwogCWludDhfdCBtYXNrX3BbMTIzXTsKQEAgLTQ0Niw4ICs0NDUsNyBAQAogI2RlZmluZSBBVEhfQUxMT0NfQkFOSyhiYW5rLCBzaXplKSBkbyB7IFwKIAkJYmFuayA9IGt6YWxsb2MoKHNpemVvZih1MzIpICogc2l6ZSksIEdGUF9LRVJORUwpOyBcCiAJCWlmICghYmFuaykgeyBcCi0JCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0ZBVEFMLCBcCi0JCQkJICAiQ2Fubm90IGFsbG9jYXRlIFJGIGJhbmtzXG4iKTsgXAorCQkJYXRoX2Vycihjb21tb24sICJDYW5ub3QgYWxsb2NhdGUgUkYgYmFua3NcbiIpOyBcCiAJCQlyZXR1cm4gLUVOT01FTTsgXAogCQl9IFwKIAl9IHdoaWxlICgwKTsKQEAgLTg3MywxMiArODcxLDExIEBACiAJCQkJIGNoYW5uZWwtPm1heF9hbnRlbm5hX2dhaW4gKiAyLAogCQkJCSBjaGFubmVsLT5tYXhfcG93ZXIgKiAyLAogCQkJCSBtaW4oKHUzMikgTUFYX1JBVEVfUE9XRVIsCi0JCQkJICh1MzIpIHJlZ3VsYXRvcnktPnBvd2VyX2xpbWl0KSk7CisJCQkJICh1MzIpIHJlZ3VsYXRvcnktPnBvd2VyX2xpbWl0KSwgZmFsc2UpOwogCiAJLyogV3JpdGUgYW5hbG9nIHJlZ2lzdGVycyAqLwogCWlmICghYXRoOWtfaHdfc2V0X3JmX3JlZ3MoYWgsIGNoYW4sIGZyZXFJbmRleCkpIHsKLQkJYXRoX3ByaW50KGF0aDlrX2h3X2NvbW1vbihhaCksIEFUSF9EQkdfRkFUQUwsCi0JCQkgICJhcjU0MTZTZXRSZlJlZ3MgZmFpbGVkXG4iKTsKKwkJYXRoX2VycihhdGg5a19od19jb21tb24oYWgpLCAiYXI1NDE2U2V0UmZSZWdzIGZhaWxlZFxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtOTY0LDE4ICs5NjEsNiBAQAogCVJFR19XUklURShhaCwgQVJfUEhZX1JGQlVTX1JFUSwgMCk7CiB9CiAKLXN0YXRpYyB2b2lkIGFyNTAwOF9od19lbmFibGVfcmZraWxsKHN0cnVjdCBhdGhfaHcgKmFoKQotewotCVJFR19TRVRfQklUKGFoLCBBUl9HUElPX0lOUFVUX0VOX1ZBTCwKLQkJICAgIEFSX0dQSU9fSU5QVVRfRU5fVkFMX1JGU0lMRU5UX0JCKTsKLQotCVJFR19DTFJfQklUKGFoLCBBUl9HUElPX0lOUFVUX01VWDIsCi0JCSAgICBBUl9HUElPX0lOUFVUX01VWDJfUkZTSUxFTlQpOwotCi0JYXRoOWtfaHdfY2ZnX2dwaW9faW5wdXQoYWgsIGFoLT5yZmtpbGxfZ3Bpbyk7Ci0JUkVHX1NFVF9CSVQoYWgsIEFSX1BIWV9URVNULCBSRlNJTEVOVF9CQik7Ci19Ci0KIHN0YXRpYyB2b2lkIGFyNTAwOF9yZXN0b3JlX2NoYWlubWFzayhzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAlpbnQgcnhfY2hhaW5tYXNrID0gYWgtPnJ4Y2hhaW5tYXNrOwpAQCAtMTA1NiwxMCArMTA0MSw5IEBACiAJCXUzMiBsZXZlbCA9IHBhcmFtOwogCiAJCWlmIChsZXZlbCA+PSBBUlJBWV9TSVpFKGFoLT50b3RhbFNpemVEZXNpcmVkKSkgewotCQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19BTkksCi0JCQkJICAibGV2ZWwgb3V0IG9mIHJhbmdlICgldSA+ICV1KVxuIiwKLQkJCQkgIGxldmVsLAotCQkJCSAgKHVuc2lnbmVkKUFSUkFZX1NJWkUoYWgtPnRvdGFsU2l6ZURlc2lyZWQpKTsKKwkJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0FOSSwKKwkJCQkibGV2ZWwgb3V0IG9mIHJhbmdlICgldSA+ICV6dSlcbiIsCisJCQkJbGV2ZWwsIEFSUkFZX1NJWkUoYWgtPnRvdGFsU2l6ZURlc2lyZWQpKTsKIAkJCXJldHVybiBmYWxzZTsKIAkJfQogCkBAIC0xMDg0LDEyICsxMDY4LDEyIEBACiAJCWJyZWFrOwogCX0KIAljYXNlIEFUSDlLX0FOSV9PRkRNX1dFQUtfU0lHTkFMX0RFVEVDVElPTjp7Ci0JCWNvbnN0IGludCBtMVRocmVzaExvd1tdID0geyAxMjcsIDUwIH07Ci0JCWNvbnN0IGludCBtMlRocmVzaExvd1tdID0geyAxMjcsIDQwIH07Ci0JCWNvbnN0IGludCBtMVRocmVzaFtdID0geyAxMjcsIDB4NGQgfTsKLQkJY29uc3QgaW50IG0yVGhyZXNoW10gPSB7IDEyNywgMHg0MCB9OwotCQljb25zdCBpbnQgbTJDb3VudFRocltdID0geyAzMSwgMTYgfTsKLQkJY29uc3QgaW50IG0yQ291bnRUaHJMb3dbXSA9IHsgNjMsIDQ4IH07CisJCXN0YXRpYyBjb25zdCBpbnQgbTFUaHJlc2hMb3dbXSA9IHsgMTI3LCA1MCB9OworCQlzdGF0aWMgY29uc3QgaW50IG0yVGhyZXNoTG93W10gPSB7IDEyNywgNDAgfTsKKwkJc3RhdGljIGNvbnN0IGludCBtMVRocmVzaFtdID0geyAxMjcsIDB4NGQgfTsKKwkJc3RhdGljIGNvbnN0IGludCBtMlRocmVzaFtdID0geyAxMjcsIDB4NDAgfTsKKwkJc3RhdGljIGNvbnN0IGludCBtMkNvdW50VGhyW10gPSB7IDMxLCAxNiB9OworCQlzdGF0aWMgY29uc3QgaW50IG0yQ291bnRUaHJMb3dbXSA9IHsgNjMsIDQ4IH07CiAJCXUzMiBvbiA9IHBhcmFtID8gMSA6IDA7CiAKIAkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1NGQ09SUl9MT1csCkBAIC0xMTQxLDcgKzExMjUsNyBAQAogCQlicmVhazsKIAl9CiAJY2FzZSBBVEg5S19BTklfQ0NLX1dFQUtfU0lHTkFMX1RIUjp7Ci0JCWNvbnN0IGludCB3ZWFrU2lnVGhyQ2NrW10gPSB7IDgsIDYgfTsKKwkJc3RhdGljIGNvbnN0IGludCB3ZWFrU2lnVGhyQ2NrW10gPSB7IDgsIDYgfTsKIAkJdTMyIGhpZ2ggPSBwYXJhbSA/IDEgOiAwOwogCiAJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9DQ0tfREVURUNULApAQCAtMTE1NywxNCArMTE0MSwxMyBAQAogCQlicmVhazsKIAl9CiAJY2FzZSBBVEg5S19BTklfRklSU1RFUF9MRVZFTDp7Ci0JCWNvbnN0IGludCBmaXJzdGVwW10gPSB7IDAsIDQsIDggfTsKKwkJc3RhdGljIGNvbnN0IGludCBmaXJzdGVwW10gPSB7IDAsIDQsIDggfTsKIAkJdTMyIGxldmVsID0gcGFyYW07CiAKIAkJaWYgKGxldmVsID49IEFSUkFZX1NJWkUoZmlyc3RlcCkpIHsKLQkJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQU5JLAotCQkJCSAgImxldmVsIG91dCBvZiByYW5nZSAoJXUgPiAldSlcbiIsCi0JCQkJICBsZXZlbCwKLQkJCQkgICh1bnNpZ25lZCkgQVJSQVlfU0laRShmaXJzdGVwKSk7CisJCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19BTkksCisJCQkJImxldmVsIG91dCBvZiByYW5nZSAoJXUgPiAlenUpXG4iLAorCQkJCWxldmVsLCBBUlJBWV9TSVpFKGZpcnN0ZXApKTsKIAkJCXJldHVybiBmYWxzZTsKIAkJfQogCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfRklORF9TSUcsCkBAIC0xMTc4LDE0ICsxMTYxLDEzIEBACiAJCWJyZWFrOwogCX0KIAljYXNlIEFUSDlLX0FOSV9TUFVSX0lNTVVOSVRZX0xFVkVMOnsKLQkJY29uc3QgaW50IGN5Y3B3clRocjFbXSA9IHsgMiwgNCwgNiwgOCwgMTAsIDEyLCAxNCwgMTYgfTsKKwkJc3RhdGljIGNvbnN0IGludCBjeWNwd3JUaHIxW10gPSB7IDIsIDQsIDYsIDgsIDEwLCAxMiwgMTQsIDE2IH07CiAJCXUzMiBsZXZlbCA9IHBhcmFtOwogCiAJCWlmIChsZXZlbCA+PSBBUlJBWV9TSVpFKGN5Y3B3clRocjEpKSB7Ci0JCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0FOSSwKLQkJCQkgICJsZXZlbCBvdXQgb2YgcmFuZ2UgKCV1ID4gJXUpXG4iLAotCQkJCSAgbGV2ZWwsCi0JCQkJICAodW5zaWduZWQpIEFSUkFZX1NJWkUoY3ljcHdyVGhyMSkpOworCQkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQU5JLAorCQkJCSJsZXZlbCBvdXQgb2YgcmFuZ2UgKCV1ID4gJXp1KVxuIiwKKwkJCQlsZXZlbCwgQVJSQVlfU0laRShjeWNwd3JUaHIxKSk7CiAJCQlyZXR1cm4gZmFsc2U7CiAJCX0KIAkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1RJTUlORzUsCkBAIC0xMjAxLDI1ICsxMTgzLDIyIEBACiAJY2FzZSBBVEg5S19BTklfUFJFU0VOVDoKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19BTkksCi0JCQkgICJpbnZhbGlkIGNtZCAldVxuIiwgY21kKTsKKwkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQU5JLCAiaW52YWxpZCBjbWQgJXVcbiIsIGNtZCk7CiAJCXJldHVybiBmYWxzZTsKIAl9CiAKLQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0FOSSwgIkFOSSBwYXJhbWV0ZXJzOlxuIik7Ci0JYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19BTkksCi0JCSAgIm5vaXNlSW1tdW5pdHlMZXZlbD0lZCwgc3B1ckltbXVuaXR5TGV2ZWw9JWQsICIKLQkJICAib2ZkbVdlYWtTaWdEZXRlY3RPZmY9JWRcbiIsCi0JCSAgYW5pU3RhdGUtPm5vaXNlSW1tdW5pdHlMZXZlbCwKLQkJICBhbmlTdGF0ZS0+c3B1ckltbXVuaXR5TGV2ZWwsCi0JCSAgIWFuaVN0YXRlLT5vZmRtV2Vha1NpZ0RldGVjdE9mZik7Ci0JYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19BTkksCi0JCSAgImNja1dlYWtTaWdUaHJlc2hvbGQ9JWQsICIKLQkJICAiZmlyc3RlcExldmVsPSVkLCBsaXN0ZW5UaW1lPSVkXG4iLAotCQkgIGFuaVN0YXRlLT5jY2tXZWFrU2lnVGhyZXNob2xkLAotCQkgIGFuaVN0YXRlLT5maXJzdGVwTGV2ZWwsCi0JCSAgYW5pU3RhdGUtPmxpc3RlblRpbWUpOwotCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQU5JLAorCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0FOSSwgIkFOSSBwYXJhbWV0ZXJzOlxuIik7CisJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQU5JLAorCQkibm9pc2VJbW11bml0eUxldmVsPSVkLCBzcHVySW1tdW5pdHlMZXZlbD0lZCwgb2ZkbVdlYWtTaWdEZXRlY3RPZmY9JWRcbiIsCisJCWFuaVN0YXRlLT5ub2lzZUltbXVuaXR5TGV2ZWwsCisJCWFuaVN0YXRlLT5zcHVySW1tdW5pdHlMZXZlbCwKKwkJIWFuaVN0YXRlLT5vZmRtV2Vha1NpZ0RldGVjdE9mZik7CisJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQU5JLAorCQkiY2NrV2Vha1NpZ1RocmVzaG9sZD0lZCwgZmlyc3RlcExldmVsPSVkLCBsaXN0ZW5UaW1lPSVkXG4iLAorCQlhbmlTdGF0ZS0+Y2NrV2Vha1NpZ1RocmVzaG9sZCwKKwkJYW5pU3RhdGUtPmZpcnN0ZXBMZXZlbCwKKwkJYW5pU3RhdGUtPmxpc3RlblRpbWUpOworCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0FOSSwKIAkJIm9mZG1QaHlFcnJDb3VudD0lZCwgY2NrUGh5RXJyQ291bnQ9JWRcblxuIiwKIAkJYW5pU3RhdGUtPm9mZG1QaHlFcnJDb3VudCwKIAkJYW5pU3RhdGUtPmNja1BoeUVyckNvdW50KTsKQEAgLTEzMDQsMTIgKzEyODMsMTIgQEAKIAkJCQkgICAgQVJfUEhZX1NGQ09SUl9MT1dfVVNFX1NFTEZfQ09SUl9MT1cpOwogCiAJCWlmICghb24gIT0gYW5pU3RhdGUtPm9mZG1XZWFrU2lnRGV0ZWN0T2ZmKSB7Ci0JCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0FOSSwKLQkJCQkgICIqKiBjaCAlZDogb2ZkbSB3ZWFrIHNpZ25hbDogJXM9PiVzXG4iLAotCQkJCSAgY2hhbi0+Y2hhbm5lbCwKLQkJCQkgICFhbmlTdGF0ZS0+b2ZkbVdlYWtTaWdEZXRlY3RPZmYgPwotCQkJCQkib24iIDogIm9mZiIsCi0JCQkJICBvbiA/ICJvbiIgOiAib2ZmIik7CisJCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19BTkksCisJCQkJIioqIGNoICVkOiBvZmRtIHdlYWsgc2lnbmFsOiAlcz0+JXNcbiIsCisJCQkJY2hhbi0+Y2hhbm5lbCwKKwkJCQkhYW5pU3RhdGUtPm9mZG1XZWFrU2lnRGV0ZWN0T2ZmID8KKwkJCQkib24iIDogIm9mZiIsCisJCQkJb24gPyAib24iIDogIm9mZiIpOwogCQkJaWYgKG9uKQogCQkJCWFoLT5zdGF0cy5hc3RfYW5pX29mZG1vbisrOwogCQkJZWxzZQpAQCAtMTMyMiwxMSArMTMwMSw5IEBACiAJCXUzMiBsZXZlbCA9IHBhcmFtOwogCiAJCWlmIChsZXZlbCA+PSBBUlJBWV9TSVpFKGZpcnN0ZXBfdGFibGUpKSB7Ci0JCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0FOSSwKLQkJCQkgICJBVEg5S19BTklfRklSU1RFUF9MRVZFTDogbGV2ZWwgIgotCQkJCSAgIm91dCBvZiByYW5nZSAoJXUgPiAldSlcbiIsCi0JCQkJICBsZXZlbCwKLQkJCQkgICh1bnNpZ25lZCkgQVJSQVlfU0laRShmaXJzdGVwX3RhYmxlKSk7CisJCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19BTkksCisJCQkJIkFUSDlLX0FOSV9GSVJTVEVQX0xFVkVMOiBsZXZlbCBvdXQgb2YgcmFuZ2UgKCV1ID4gJXp1KVxuIiwKKwkJCQlsZXZlbCwgQVJSQVlfU0laRShmaXJzdGVwX3RhYmxlKSk7CiAJCQlyZXR1cm4gZmFsc2U7CiAJCX0KIApAQCAtMTM2MSwyNCArMTMzOCwyMiBAQAogCQkJICAgICAgQVJfUEhZX0ZJTkRfU0lHX0ZJUlNURVBfTE9XLCB2YWx1ZTIpOwogCiAJCWlmIChsZXZlbCAhPSBhbmlTdGF0ZS0+Zmlyc3RlcExldmVsKSB7Ci0JCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0FOSSwKLQkJCQkgICIqKiBjaCAlZDogbGV2ZWwgJWQ9PiVkW2RlZjolZF0gIgotCQkJCSAgImZpcnN0ZXBbbGV2ZWxdPSVkIGluaT0lZFxuIiwKLQkJCQkgIGNoYW4tPmNoYW5uZWwsCi0JCQkJICBhbmlTdGF0ZS0+Zmlyc3RlcExldmVsLAotCQkJCSAgbGV2ZWwsCi0JCQkJICBBVEg5S19BTklfRklSU1RFUF9MVkxfTkVXLAotCQkJCSAgdmFsdWUsCi0JCQkJICBhbmlTdGF0ZS0+aW5pRGVmLmZpcnN0ZXApOwotCQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19BTkksCi0JCQkJICAiKiogY2ggJWQ6IGxldmVsICVkPT4lZFtkZWY6JWRdICIKLQkJCQkgICJmaXJzdGVwX2xvd1tsZXZlbF09JWQgaW5pPSVkXG4iLAotCQkJCSAgY2hhbi0+Y2hhbm5lbCwKLQkJCQkgIGFuaVN0YXRlLT5maXJzdGVwTGV2ZWwsCi0JCQkJICBsZXZlbCwKLQkJCQkgIEFUSDlLX0FOSV9GSVJTVEVQX0xWTF9ORVcsCi0JCQkJICB2YWx1ZTIsCi0JCQkJICBhbmlTdGF0ZS0+aW5pRGVmLmZpcnN0ZXBMb3cpOworCQkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQU5JLAorCQkJCSIqKiBjaCAlZDogbGV2ZWwgJWQ9PiVkW2RlZjolZF0gZmlyc3RlcFtsZXZlbF09JWQgaW5pPSVkXG4iLAorCQkJCWNoYW4tPmNoYW5uZWwsCisJCQkJYW5pU3RhdGUtPmZpcnN0ZXBMZXZlbCwKKwkJCQlsZXZlbCwKKwkJCQlBVEg5S19BTklfRklSU1RFUF9MVkxfTkVXLAorCQkJCXZhbHVlLAorCQkJCWFuaVN0YXRlLT5pbmlEZWYuZmlyc3RlcCk7CisJCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19BTkksCisJCQkJIioqIGNoICVkOiBsZXZlbCAlZD0+JWRbZGVmOiVkXSBmaXJzdGVwX2xvd1tsZXZlbF09JWQgaW5pPSVkXG4iLAorCQkJCWNoYW4tPmNoYW5uZWwsCisJCQkJYW5pU3RhdGUtPmZpcnN0ZXBMZXZlbCwKKwkJCQlsZXZlbCwKKwkJCQlBVEg5S19BTklfRklSU1RFUF9MVkxfTkVXLAorCQkJCXZhbHVlMiwKKwkJCQlhbmlTdGF0ZS0+aW5pRGVmLmZpcnN0ZXBMb3cpOwogCQkJaWYgKGxldmVsID4gYW5pU3RhdGUtPmZpcnN0ZXBMZXZlbCkKIAkJCQlhaC0+c3RhdHMuYXN0X2FuaV9zdGVwdXArKzsKIAkJCWVsc2UgaWYgKGxldmVsIDwgYW5pU3RhdGUtPmZpcnN0ZXBMZXZlbCkKQEAgLTEzOTEsMTEgKzEzNjYsOSBAQAogCQl1MzIgbGV2ZWwgPSBwYXJhbTsKIAogCQlpZiAobGV2ZWwgPj0gQVJSQVlfU0laRShjeWNwd3JUaHIxX3RhYmxlKSkgewotCQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19BTkksCi0JCQkJICAiQVRIOUtfQU5JX1NQVVJfSU1NVU5JVFlfTEVWRUw6IGxldmVsICIKLQkJCQkgICJvdXQgb2YgcmFuZ2UgKCV1ID4gJXUpXG4iLAotCQkJCSAgbGV2ZWwsCi0JCQkJICAodW5zaWduZWQpIEFSUkFZX1NJWkUoY3ljcHdyVGhyMV90YWJsZSkpOworCQkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQU5JLAorCQkJCSJBVEg5S19BTklfU1BVUl9JTU1VTklUWV9MRVZFTDogbGV2ZWwgb3V0IG9mIHJhbmdlICgldSA+ICV6dSlcbiIsCisJCQkJbGV2ZWwsIEFSUkFZX1NJWkUoY3ljcHdyVGhyMV90YWJsZSkpOwogCQkJcmV0dXJuIGZhbHNlOwogCQl9CiAJCS8qCkBAIC0xNDI5LDI0ICsxNDAyLDIyIEBACiAJCQkgICAgICBBUl9QSFlfRVhUX1RJTUlORzVfQ1lDUFdSX1RIUjEsIHZhbHVlMik7CiAKIAkJaWYgKGxldmVsICE9IGFuaVN0YXRlLT5zcHVySW1tdW5pdHlMZXZlbCkgewotCQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19BTkksCi0JCQkJICAiKiogY2ggJWQ6IGxldmVsICVkPT4lZFtkZWY6JWRdICIKLQkJCQkgICJjeWNwd3JUaHIxW2xldmVsXT0lZCBpbmk9JWRcbiIsCi0JCQkJICBjaGFuLT5jaGFubmVsLAotCQkJCSAgYW5pU3RhdGUtPnNwdXJJbW11bml0eUxldmVsLAotCQkJCSAgbGV2ZWwsCi0JCQkJICBBVEg5S19BTklfU1BVUl9JTU1VTkVfTFZMX05FVywKLQkJCQkgIHZhbHVlLAotCQkJCSAgYW5pU3RhdGUtPmluaURlZi5jeWNwd3JUaHIxKTsKLQkJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQU5JLAotCQkJCSAgIioqIGNoICVkOiBsZXZlbCAlZD0+JWRbZGVmOiVkXSAiCi0JCQkJICAiY3ljcHdyVGhyMUV4dFtsZXZlbF09JWQgaW5pPSVkXG4iLAotCQkJCSAgY2hhbi0+Y2hhbm5lbCwKLQkJCQkgIGFuaVN0YXRlLT5zcHVySW1tdW5pdHlMZXZlbCwKLQkJCQkgIGxldmVsLAotCQkJCSAgQVRIOUtfQU5JX1NQVVJfSU1NVU5FX0xWTF9ORVcsCi0JCQkJICB2YWx1ZTIsCi0JCQkJICBhbmlTdGF0ZS0+aW5pRGVmLmN5Y3B3clRocjFFeHQpOworCQkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQU5JLAorCQkJCSIqKiBjaCAlZDogbGV2ZWwgJWQ9PiVkW2RlZjolZF0gY3ljcHdyVGhyMVtsZXZlbF09JWQgaW5pPSVkXG4iLAorCQkJCWNoYW4tPmNoYW5uZWwsCisJCQkJYW5pU3RhdGUtPnNwdXJJbW11bml0eUxldmVsLAorCQkJCWxldmVsLAorCQkJCUFUSDlLX0FOSV9TUFVSX0lNTVVORV9MVkxfTkVXLAorCQkJCXZhbHVlLAorCQkJCWFuaVN0YXRlLT5pbmlEZWYuY3ljcHdyVGhyMSk7CisJCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19BTkksCisJCQkJIioqIGNoICVkOiBsZXZlbCAlZD0+JWRbZGVmOiVkXSBjeWNwd3JUaHIxRXh0W2xldmVsXT0lZCBpbmk9JWRcbiIsCisJCQkJY2hhbi0+Y2hhbm5lbCwKKwkJCQlhbmlTdGF0ZS0+c3B1ckltbXVuaXR5TGV2ZWwsCisJCQkJbGV2ZWwsCisJCQkJQVRIOUtfQU5JX1NQVVJfSU1NVU5FX0xWTF9ORVcsCisJCQkJdmFsdWUyLAorCQkJCWFuaVN0YXRlLT5pbmlEZWYuY3ljcHdyVGhyMUV4dCk7CiAJCQlpZiAobGV2ZWwgPiBhbmlTdGF0ZS0+c3B1ckltbXVuaXR5TGV2ZWwpCiAJCQkJYWgtPnN0YXRzLmFzdF9hbmlfc3B1cnVwKys7CiAJCQllbHNlIGlmIChsZXZlbCA8IGFuaVN0YXRlLT5zcHVySW1tdW5pdHlMZXZlbCkKQEAgLTE0NjUsMjIgKzE0MzYsMTkgQEAKIAljYXNlIEFUSDlLX0FOSV9QUkVTRU5UOgogCQlicmVhazsKIAlkZWZhdWx0OgotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0FOSSwKLQkJCSAgImludmFsaWQgY21kICV1XG4iLCBjbWQpOworCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19BTkksICJpbnZhbGlkIGNtZCAldVxuIiwgY21kKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAotCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQU5JLAotCQkgICJBTkkgcGFyYW1ldGVyczogU0k9JWQsIG9mZG1XUz0lcyBGUz0lZCAiCi0JCSAgIk1SQ2Njaz0lcyBsaXN0ZW5UaW1lPSVkICIKLQkJICAib2ZkbUVycnM9JWQgY2NrRXJycz0lZFxuIiwKLQkJICBhbmlTdGF0ZS0+c3B1ckltbXVuaXR5TGV2ZWwsCi0JCSAgIWFuaVN0YXRlLT5vZmRtV2Vha1NpZ0RldGVjdE9mZiA/ICJvbiIgOiAib2ZmIiwKLQkJICBhbmlTdGF0ZS0+Zmlyc3RlcExldmVsLAotCQkgICFhbmlTdGF0ZS0+bXJjQ0NLT2ZmID8gIm9uIiA6ICJvZmYiLAotCQkgIGFuaVN0YXRlLT5saXN0ZW5UaW1lLAotCQkgIGFuaVN0YXRlLT5vZmRtUGh5RXJyQ291bnQsCi0JCSAgYW5pU3RhdGUtPmNja1BoeUVyckNvdW50KTsKKwlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19BTkksCisJCSJBTkkgcGFyYW1ldGVyczogU0k9JWQsIG9mZG1XUz0lcyBGUz0lZCBNUkNjY2s9JXMgbGlzdGVuVGltZT0lZCBvZmRtRXJycz0lZCBjY2tFcnJzPSVkXG4iLAorCQlhbmlTdGF0ZS0+c3B1ckltbXVuaXR5TGV2ZWwsCisJCSFhbmlTdGF0ZS0+b2ZkbVdlYWtTaWdEZXRlY3RPZmYgPyAib24iIDogIm9mZiIsCisJCWFuaVN0YXRlLT5maXJzdGVwTGV2ZWwsCisJCSFhbmlTdGF0ZS0+bXJjQ0NLT2ZmID8gIm9uIiA6ICJvZmYiLAorCQlhbmlTdGF0ZS0+bGlzdGVuVGltZSwKKwkJYW5pU3RhdGUtPm9mZG1QaHlFcnJDb3VudCwKKwkJYW5pU3RhdGUtPmNja1BoeUVyckNvdW50KTsKIAlyZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTQ5MCwyNSArMTQ1OCwyNSBAQAogCWludDE2X3QgbmY7CiAKIAluZiA9IE1TKFJFR19SRUFEKGFoLCBBUl9QSFlfQ0NBKSwgQVJfUEhZX01JTkNDQV9QV1IpOwotCW5mYXJyYXlbMF0gPSBzaWduX2V4dGVuZChuZiwgOSk7CisJbmZhcnJheVswXSA9IHNpZ25fZXh0ZW5kMzIobmYsIDgpOwogCiAJbmYgPSBNUyhSRUdfUkVBRChhaCwgQVJfUEhZX0NIMV9DQ0EpLCBBUl9QSFlfQ0gxX01JTkNDQV9QV1IpOwotCW5mYXJyYXlbMV0gPSBzaWduX2V4dGVuZChuZiwgOSk7CisJbmZhcnJheVsxXSA9IHNpZ25fZXh0ZW5kMzIobmYsIDgpOwogCiAJbmYgPSBNUyhSRUdfUkVBRChhaCwgQVJfUEhZX0NIMl9DQ0EpLCBBUl9QSFlfQ0gyX01JTkNDQV9QV1IpOwotCW5mYXJyYXlbMl0gPSBzaWduX2V4dGVuZChuZiwgOSk7CisJbmZhcnJheVsyXSA9IHNpZ25fZXh0ZW5kMzIobmYsIDgpOwogCiAJaWYgKCFJU19DSEFOX0hUNDAoYWgtPmN1cmNoYW4pKQogCQlyZXR1cm47CiAKIAluZiA9IE1TKFJFR19SRUFEKGFoLCBBUl9QSFlfRVhUX0NDQSksIEFSX1BIWV9FWFRfTUlOQ0NBX1BXUik7Ci0JbmZhcnJheVszXSA9IHNpZ25fZXh0ZW5kKG5mLCA5KTsKKwluZmFycmF5WzNdID0gc2lnbl9leHRlbmQzMihuZiwgOCk7CiAKIAluZiA9IE1TKFJFR19SRUFEKGFoLCBBUl9QSFlfQ0gxX0VYVF9DQ0EpLCBBUl9QSFlfQ0gxX0VYVF9NSU5DQ0FfUFdSKTsKLQluZmFycmF5WzRdID0gc2lnbl9leHRlbmQobmYsIDkpOworCW5mYXJyYXlbNF0gPSBzaWduX2V4dGVuZDMyKG5mLCA4KTsKIAogCW5mID0gTVMoUkVHX1JFQUQoYWgsIEFSX1BIWV9DSDJfRVhUX0NDQSksIEFSX1BIWV9DSDJfRVhUX01JTkNDQV9QV1IpOwotCW5mYXJyYXlbNV0gPSBzaWduX2V4dGVuZChuZiwgOSk7CisJbmZhcnJheVs1XSA9IHNpZ25fZXh0ZW5kMzIobmYsIDgpOwogfQogCiAvKgpAQCAtMTUyNiwxMyArMTQ5NCwxMiBAQAogCiAJaW5pRGVmID0gJmFuaVN0YXRlLT5pbmlEZWY7CiAKLQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0FOSSwKLQkJICAidmVyICVkLiVkIG9wbW9kZSAldSBjaGFuICVkIE1oei8weCV4XG4iLAotCQkgIGFoLT5od192ZXJzaW9uLm1hY1ZlcnNpb24sCi0JCSAgYWgtPmh3X3ZlcnNpb24ubWFjUmV2LAotCQkgIGFoLT5vcG1vZGUsCi0JCSAgY2hhbi0+Y2hhbm5lbCwKLQkJICBjaGFuLT5jaGFubmVsRmxhZ3MpOworCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0FOSSwgInZlciAlZC4lZCBvcG1vZGUgJXUgY2hhbiAlZCBNaHovMHgleFxuIiwKKwkJYWgtPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiwKKwkJYWgtPmh3X3ZlcnNpb24ubWFjUmV2LAorCQlhaC0+b3Btb2RlLAorCQljaGFuLT5jaGFubmVsLAorCQljaGFuLT5jaGFubmVsRmxhZ3MpOwogCiAJdmFsID0gUkVHX1JFQUQoYWgsIEFSX1BIWV9TRkNPUlIpOwogCWluaURlZi0+bTFUaHJlc2ggPSBNUyh2YWwsIEFSX1BIWV9TRkNPUlJfTTFfVEhSRVNIKTsKQEAgLTE1NzksMTAgKzE1NDYsNTUgQEAKIAlhaC0+bmZfNWcubm9taW5hbCA9IEFSX1BIWV9DQ0FfTk9NX1ZBTF81NDE2XzVHSFo7CiB9CiAKK3N0YXRpYyB2b2lkIGFyNTAwOF9od19zZXRfcmFkYXJfcGFyYW1zKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJCSAgICAgICBzdHJ1Y3QgYXRoX2h3X3JhZGFyX2NvbmYgKmNvbmYpCit7CisJdTMyIHJhZGFyXzAgPSAwLCByYWRhcl8xID0gMDsKKworCWlmICghY29uZikgeworCQlSRUdfQ0xSX0JJVChhaCwgQVJfUEhZX1JBREFSXzAsIEFSX1BIWV9SQURBUl8wX0VOQSk7CisJCXJldHVybjsKKwl9CisKKwlyYWRhcl8wIHw9IEFSX1BIWV9SQURBUl8wX0VOQSB8IEFSX1BIWV9SQURBUl8wX0ZGVF9FTkE7CisJcmFkYXJfMCB8PSBTTShjb25mLT5maXJfcG93ZXIsIEFSX1BIWV9SQURBUl8wX0ZJUlBXUik7CisJcmFkYXJfMCB8PSBTTShjb25mLT5yYWRhcl9yc3NpLCBBUl9QSFlfUkFEQVJfMF9SUlNTSSk7CisJcmFkYXJfMCB8PSBTTShjb25mLT5wdWxzZV9oZWlnaHQsIEFSX1BIWV9SQURBUl8wX0hFSUdIVCk7CisJcmFkYXJfMCB8PSBTTShjb25mLT5wdWxzZV9yc3NpLCBBUl9QSFlfUkFEQVJfMF9QUlNTSSk7CisJcmFkYXJfMCB8PSBTTShjb25mLT5wdWxzZV9pbmJhbmQsIEFSX1BIWV9SQURBUl8wX0lOQkFORCk7CisKKwlyYWRhcl8xIHw9IEFSX1BIWV9SQURBUl8xX01BWF9SUlNTSTsKKwlyYWRhcl8xIHw9IEFSX1BIWV9SQURBUl8xX0JMT0NLX0NIRUNLOworCXJhZGFyXzEgfD0gU00oY29uZi0+cHVsc2VfbWF4bGVuLCBBUl9QSFlfUkFEQVJfMV9NQVhMRU4pOworCXJhZGFyXzEgfD0gU00oY29uZi0+cHVsc2VfaW5iYW5kX3N0ZXAsIEFSX1BIWV9SQURBUl8xX1JFTFNURVBfVEhSRVNIKTsKKwlyYWRhcl8xIHw9IFNNKGNvbmYtPnJhZGFyX2luYmFuZCwgQVJfUEhZX1JBREFSXzFfUkVMUFdSX1RIUkVTSCk7CisKKwlSRUdfV1JJVEUoYWgsIEFSX1BIWV9SQURBUl8wLCByYWRhcl8wKTsKKwlSRUdfV1JJVEUoYWgsIEFSX1BIWV9SQURBUl8xLCByYWRhcl8xKTsKKwlpZiAoY29uZi0+ZXh0X2NoYW5uZWwpCisJCVJFR19TRVRfQklUKGFoLCBBUl9QSFlfUkFEQVJfRVhULCBBUl9QSFlfUkFEQVJfRVhUX0VOQSk7CisJZWxzZQorCQlSRUdfQ0xSX0JJVChhaCwgQVJfUEhZX1JBREFSX0VYVCwgQVJfUEhZX1JBREFSX0VYVF9FTkEpOworfQorCitzdGF0aWMgdm9pZCBhcjUwMDhfaHdfc2V0X3JhZGFyX2NvbmYoc3RydWN0IGF0aF9odyAqYWgpCit7CisJc3RydWN0IGF0aF9od19yYWRhcl9jb25mICpjb25mID0gJmFoLT5yYWRhcl9jb25mOworCisJY29uZi0+ZmlyX3Bvd2VyID0gLTMzOworCWNvbmYtPnJhZGFyX3Jzc2kgPSAyMDsKKwljb25mLT5wdWxzZV9oZWlnaHQgPSAxMDsKKwljb25mLT5wdWxzZV9yc3NpID0gMjQ7CisJY29uZi0+cHVsc2VfaW5iYW5kID0gMTU7CisJY29uZi0+cHVsc2VfbWF4bGVuID0gMjU1OworCWNvbmYtPnB1bHNlX2luYmFuZF9zdGVwID0gMTI7CisJY29uZi0+cmFkYXJfaW5iYW5kID0gODsKK30KKwogdm9pZCBhcjUwMDhfaHdfYXR0YWNoX3BoeV9vcHMoc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJc3RydWN0IGF0aF9od19wcml2YXRlX29wcyAqcHJpdl9vcHMgPSBhdGg5a19od19wcml2YXRlX29wcyhhaCk7Ci0JY29uc3QgdTMyIGFyNTQxNl9jY2FfcmVnc1s2XSA9IHsKKwlzdGF0aWMgY29uc3QgdTMyIGFyNTQxNl9jY2FfcmVnc1s2XSA9IHsKIAkJQVJfUEhZX0NDQSwKIAkJQVJfUEhZX0NIMV9DQ0EsCiAJCUFSX1BIWV9DSDJfQ0NBLApAQCAtMTYwNSwxMCArMTYxNywxMCBAQAogCXByaXZfb3BzLT5zZXRfZGVsdGFfc2xvcGUgPSBhcjUwMDhfaHdfc2V0X2RlbHRhX3Nsb3BlOwogCXByaXZfb3BzLT5yZmJ1c19yZXEgPSBhcjUwMDhfaHdfcmZidXNfcmVxOwogCXByaXZfb3BzLT5yZmJ1c19kb25lID0gYXI1MDA4X2h3X3JmYnVzX2RvbmU7Ci0JcHJpdl9vcHMtPmVuYWJsZV9yZmtpbGwgPSBhcjUwMDhfaHdfZW5hYmxlX3Jma2lsbDsKIAlwcml2X29wcy0+cmVzdG9yZV9jaGFpbm1hc2sgPSBhcjUwMDhfcmVzdG9yZV9jaGFpbm1hc2s7CiAJcHJpdl9vcHMtPnNldF9kaXZlcnNpdHkgPSBhcjUwMDhfc2V0X2RpdmVyc2l0eTsKIAlwcml2X29wcy0+ZG9fZ2V0bmYgPSBhcjUwMDhfaHdfZG9fZ2V0bmY7CisJcHJpdl9vcHMtPnNldF9yYWRhcl9wYXJhbXMgPSBhcjUwMDhfaHdfc2V0X3JhZGFyX3BhcmFtczsKIAogCWlmIChtb2RwYXJhbV9mb3JjZV9uZXdfYW5pKSB7CiAJCXByaXZfb3BzLT5hbmlfY29udHJvbCA9IGFyNTAwOF9od19hbmlfY29udHJvbF9uZXc7CkBAIC0xNjI0LDUgKzE2MzYsNiBAQAogCQlwcml2X29wcy0+Y29tcHV0ZV9wbGxfY29udHJvbCA9IGFyNTAwOF9od19jb21wdXRlX3BsbF9jb250cm9sOwogCiAJYXI1MDA4X2h3X3NldF9uZl9saW1pdHMoYWgpOworCWFyNTAwOF9od19zZXRfcmFkYXJfY29uZihhaCk7CiAJbWVtY3B5KGFoLT5uZl9yZWdzLCBhcjU0MTZfY2NhX3JlZ3MsIHNpemVvZihhaC0+bmZfcmVncykpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwMl9jYWxpYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwMl9jYWxpYi5jCmluZGV4IDE1ZjYyY2QuLjAxODgwYWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDJfY2FsaWIuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAyX2NhbGliLmMKQEAgLTM5LDE4ICszOSwxOCBAQAogCXN3aXRjaCAoY3VyckNhbC0+Y2FsRGF0YS0+Y2FsVHlwZSkgewogCWNhc2UgSVFfTUlTTUFUQ0hfQ0FMOgogCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9DQUxNT0RFLCBBUl9QSFlfQ0FMTU9ERV9JUSk7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAotCQkJICAic3RhcnRpbmcgSVEgTWlzbWF0Y2ggQ2FsaWJyYXRpb25cbiIpOworCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCisJCQkic3RhcnRpbmcgSVEgTWlzbWF0Y2ggQ2FsaWJyYXRpb25cbiIpOwogCQlicmVhazsKIAljYXNlIEFEQ19HQUlOX0NBTDoKIAkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfQ0FMTU9ERSwgQVJfUEhZX0NBTE1PREVfQURDX0dBSU4pOwotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwKLQkJCSAgInN0YXJ0aW5nIEFEQyBHYWluIENhbGlicmF0aW9uXG4iKTsKKwkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAorCQkJInN0YXJ0aW5nIEFEQyBHYWluIENhbGlicmF0aW9uXG4iKTsKIAkJYnJlYWs7CiAJY2FzZSBBRENfRENfQ0FMOgogCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9DQUxNT0RFLCBBUl9QSFlfQ0FMTU9ERV9BRENfRENfUEVSKTsKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCi0JCQkgICJzdGFydGluZyBBREMgREMgQ2FsaWJyYXRpb25cbiIpOworCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCisJCQkic3RhcnRpbmcgQURDIERDIENhbGlicmF0aW9uXG4iKTsKIAkJYnJlYWs7CiAJfQogCkBAIC0xMDcsMTEgKzEwNywxMSBAQAogCQkJUkVHX1JFQUQoYWgsIEFSX1BIWV9DQUxfTUVBU18xKGkpKTsKIAkJYWgtPnRvdGFsSXFDb3JyTWVhc1tpXSArPQogCQkJKGludDMyX3QpIFJFR19SRUFEKGFoLCBBUl9QSFlfQ0FMX01FQVNfMihpKSk7Ci0JCWF0aF9wcmludChhdGg5a19od19jb21tb24oYWgpLCBBVEhfREJHX0NBTElCUkFURSwKLQkJCSAgIiVkOiBDaG4gJWQgcG1pPTB4JTA4eDtwbXE9MHglMDh4O2lxY209MHglMDh4O1xuIiwKLQkJCSAgYWgtPmNhbF9zYW1wbGVzLCBpLCBhaC0+dG90YWxQb3dlck1lYXNJW2ldLAotCQkJICBhaC0+dG90YWxQb3dlck1lYXNRW2ldLAotCQkJICBhaC0+dG90YWxJcUNvcnJNZWFzW2ldKTsKKwkJYXRoX2RiZyhhdGg5a19od19jb21tb24oYWgpLCBBVEhfREJHX0NBTElCUkFURSwKKwkJCSIlZDogQ2huICVkIHBtaT0weCUwOHg7cG1xPTB4JTA4eDtpcWNtPTB4JTA4eDtcbiIsCisJCQlhaC0+Y2FsX3NhbXBsZXMsIGksIGFoLT50b3RhbFBvd2VyTWVhc0lbaV0sCisJCQlhaC0+dG90YWxQb3dlck1lYXNRW2ldLAorCQkJYWgtPnRvdGFsSXFDb3JyTWVhc1tpXSk7CiAJfQogfQogCkBAIC0xMjksMTQgKzEyOSwxMyBAQAogCQlhaC0+dG90YWxBZGNRRXZlblBoYXNlW2ldICs9CiAJCQlSRUdfUkVBRChhaCwgQVJfUEhZX0NBTF9NRUFTXzMoaSkpOwogCi0JCWF0aF9wcmludChhdGg5a19od19jb21tb24oYWgpLCBBVEhfREJHX0NBTElCUkFURSwKLQkJCSAgIiVkOiBDaG4gJWQgb2RkaT0weCUwOHg7IGV2ZW5pPTB4JTA4eDsgIgotCQkJICAib2RkcT0weCUwOHg7IGV2ZW5xPTB4JTA4eDtcbiIsCi0JCQkgIGFoLT5jYWxfc2FtcGxlcywgaSwKLQkJCSAgYWgtPnRvdGFsQWRjSU9kZFBoYXNlW2ldLAotCQkJICBhaC0+dG90YWxBZGNJRXZlblBoYXNlW2ldLAotCQkJICBhaC0+dG90YWxBZGNRT2RkUGhhc2VbaV0sCi0JCQkgIGFoLT50b3RhbEFkY1FFdmVuUGhhc2VbaV0pOworCQlhdGhfZGJnKGF0aDlrX2h3X2NvbW1vbihhaCksIEFUSF9EQkdfQ0FMSUJSQVRFLAorCQkJIiVkOiBDaG4gJWQgb2RkaT0weCUwOHg7IGV2ZW5pPTB4JTA4eDsgb2RkcT0weCUwOHg7IGV2ZW5xPTB4JTA4eDtcbiIsCisJCQlhaC0+Y2FsX3NhbXBsZXMsIGksCisJCQlhaC0+dG90YWxBZGNJT2RkUGhhc2VbaV0sCisJCQlhaC0+dG90YWxBZGNJRXZlblBoYXNlW2ldLAorCQkJYWgtPnRvdGFsQWRjUU9kZFBoYXNlW2ldLAorCQkJYWgtPnRvdGFsQWRjUUV2ZW5QaGFzZVtpXSk7CiAJfQogfQogCkBAIC0xNTQsMTQgKzE1MywxMyBAQAogCQlhaC0+dG90YWxBZGNEY09mZnNldFFFdmVuUGhhc2VbaV0gKz0KIAkJCShpbnQzMl90KSBSRUdfUkVBRChhaCwgQVJfUEhZX0NBTF9NRUFTXzMoaSkpOwogCi0JCWF0aF9wcmludChhdGg5a19od19jb21tb24oYWgpLCBBVEhfREJHX0NBTElCUkFURSwKLQkJCSAgIiVkOiBDaG4gJWQgb2RkaT0weCUwOHg7IGV2ZW5pPTB4JTA4eDsgIgotCQkJICAib2RkcT0weCUwOHg7IGV2ZW5xPTB4JTA4eDtcbiIsCi0JCQkgIGFoLT5jYWxfc2FtcGxlcywgaSwKLQkJCSAgYWgtPnRvdGFsQWRjRGNPZmZzZXRJT2RkUGhhc2VbaV0sCi0JCQkgIGFoLT50b3RhbEFkY0RjT2Zmc2V0SUV2ZW5QaGFzZVtpXSwKLQkJCSAgYWgtPnRvdGFsQWRjRGNPZmZzZXRRT2RkUGhhc2VbaV0sCi0JCQkgIGFoLT50b3RhbEFkY0RjT2Zmc2V0UUV2ZW5QaGFzZVtpXSk7CisJCWF0aF9kYmcoYXRoOWtfaHdfY29tbW9uKGFoKSwgQVRIX0RCR19DQUxJQlJBVEUsCisJCQkiJWQ6IENobiAlZCBvZGRpPTB4JTA4eDsgZXZlbmk9MHglMDh4OyBvZGRxPTB4JTA4eDsgZXZlbnE9MHglMDh4O1xuIiwKKwkJCWFoLT5jYWxfc2FtcGxlcywgaSwKKwkJCWFoLT50b3RhbEFkY0RjT2Zmc2V0SU9kZFBoYXNlW2ldLAorCQkJYWgtPnRvdGFsQWRjRGNPZmZzZXRJRXZlblBoYXNlW2ldLAorCQkJYWgtPnRvdGFsQWRjRGNPZmZzZXRRT2RkUGhhc2VbaV0sCisJCQlhaC0+dG90YWxBZGNEY09mZnNldFFFdmVuUGhhc2VbaV0pOwogCX0KIH0KIApAQCAtMTc4LDEzICsxNzYsMTMgQEAKIAkJcG93ZXJNZWFzUSA9IGFoLT50b3RhbFBvd2VyTWVhc1FbaV07CiAJCWlxQ29yck1lYXMgPSBhaC0+dG90YWxJcUNvcnJNZWFzW2ldOwogCi0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAotCQkJICAiU3RhcnRpbmcgSVEgQ2FsIGFuZCBDb3JyZWN0aW9uIGZvciBDaGFpbiAlZFxuIiwKLQkJCSAgaSk7CisJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwKKwkJCSJTdGFydGluZyBJUSBDYWwgYW5kIENvcnJlY3Rpb24gZm9yIENoYWluICVkXG4iLAorCQkJaSk7CiAKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCi0JCQkgICJPcmlnbmFsOiBDaG4gJWRpcV9jb3JyX21lYXMgPSAweCUwOHhcbiIsCi0JCQkgIGksIGFoLT50b3RhbElxQ29yck1lYXNbaV0pOworCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCisJCQkiT3JpZ25hbDogQ2huICVkaXFfY29ycl9tZWFzID0gMHglMDh4XG4iLAorCQkJaSwgYWgtPnRvdGFsSXFDb3JyTWVhc1tpXSk7CiAKIAkJaXFDb3JyTmVnID0gMDsKIApAQCAtMTkzLDEyICsxOTEsMTIgQEAKIAkJCWlxQ29yck5lZyA9IDE7CiAJCX0KIAotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwKLQkJCSAgIkNobiAlZCBwd3JfbWVhc19pID0gMHglMDh4XG4iLCBpLCBwb3dlck1lYXNJKTsKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCi0JCQkgICJDaG4gJWQgcHdyX21lYXNfcSA9IDB4JTA4eFxuIiwgaSwgcG93ZXJNZWFzUSk7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLCAiaXFDb3JyTmVnIGlzIDB4JTA4eFxuIiwKLQkJCSAgaXFDb3JyTmVnKTsKKwkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAorCQkJIkNobiAlZCBwd3JfbWVhc19pID0gMHglMDh4XG4iLCBpLCBwb3dlck1lYXNJKTsKKwkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAorCQkJIkNobiAlZCBwd3JfbWVhc19xID0gMHglMDh4XG4iLCBpLCBwb3dlck1lYXNRKTsKKwkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLCAiaXFDb3JyTmVnIGlzIDB4JTA4eFxuIiwKKwkJCWlxQ29yck5lZyk7CiAKIAkJaUNvZmZEZW5vbSA9IChwb3dlck1lYXNJIC8gMiArIHBvd2VyTWVhc1EgLyAyKSAvIDEyODsKIAkJcUNvZmZEZW5vbSA9IHBvd2VyTWVhc1EgLyA2NDsKQEAgLTIwNywxNCArMjA1LDE0IEBACiAJCSAgICAocUNvZmZEZW5vbSAhPSAwKSkgewogCQkJaUNvZmYgPSBpcUNvcnJNZWFzIC8gaUNvZmZEZW5vbTsKIAkJCXFDb2ZmID0gcG93ZXJNZWFzSSAvIHFDb2ZmRGVub20gLSA2NDsKLQkJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAotCQkJCSAgIkNobiAlZCBpQ29mZiA9IDB4JTA4eFxuIiwgaSwgaUNvZmYpOwotCQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCi0JCQkJICAiQ2huICVkIHFDb2ZmID0gMHglMDh4XG4iLCBpLCBxQ29mZik7CisJCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCisJCQkJIkNobiAlZCBpQ29mZiA9IDB4JTA4eFxuIiwgaSwgaUNvZmYpOworCQkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAorCQkJCSJDaG4gJWQgcUNvZmYgPSAweCUwOHhcbiIsIGksIHFDb2ZmKTsKIAogCQkJaUNvZmYgPSBpQ29mZiAmIDB4M2Y7Ci0JCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwKLQkJCQkgICJOZXc6IENobiAlZCBpQ29mZiA9IDB4JTA4eFxuIiwgaSwgaUNvZmYpOworCQkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAorCQkJCSJOZXc6IENobiAlZCBpQ29mZiA9IDB4JTA4eFxuIiwgaSwgaUNvZmYpOwogCQkJaWYgKGlxQ29yck5lZyA9PSAweDApCiAJCQkJaUNvZmYgPSAweDQwIC0gaUNvZmY7CiAKQEAgLTIyMyw5ICsyMjEsOSBAQAogCQkJZWxzZSBpZiAocUNvZmYgPD0gLTE2KQogCQkJCXFDb2ZmID0gLTE2OwogCi0JCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwKLQkJCQkgICJDaG4gJWQgOiBpQ29mZiA9IDB4JXggIHFDb2ZmID0gMHgleFxuIiwKLQkJCQkgIGksIGlDb2ZmLCBxQ29mZik7CisJCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCisJCQkJIkNobiAlZCA6IGlDb2ZmID0gMHgleCAgcUNvZmYgPSAweCV4XG4iLAorCQkJCWksIGlDb2ZmLCBxQ29mZik7CiAKIAkJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9USU1JTkdfQ1RSTDQoaSksCiAJCQkJICAgICAgQVJfUEhZX1RJTUlOR19DVFJMNF9JUUNPUlJfUV9JX0NPRkYsCkBAIC0yMzMsOSArMjMxLDkgQEAKIAkJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9USU1JTkdfQ1RSTDQoaSksCiAJCQkJICAgICAgQVJfUEhZX1RJTUlOR19DVFJMNF9JUUNPUlJfUV9RX0NPRkYsCiAJCQkJICAgICAgcUNvZmYpOwotCQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCi0JCQkJICAiSVEgQ2FsIGFuZCBDb3JyZWN0aW9uIGRvbmUgZm9yIENoYWluICVkXG4iLAotCQkJCSAgaSk7CisJCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCisJCQkJIklRIENhbCBhbmQgQ29ycmVjdGlvbiBkb25lIGZvciBDaGFpbiAlZFxuIiwKKwkJCQlpKTsKIAkJfQogCX0KIApAQCAtMjU1LDIxICsyNTMsMjEgQEAKIAkJcU9kZE1lYXNPZmZzZXQgPSBhaC0+dG90YWxBZGNRT2RkUGhhc2VbaV07CiAJCXFFdmVuTWVhc09mZnNldCA9IGFoLT50b3RhbEFkY1FFdmVuUGhhc2VbaV07CiAKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCi0JCQkgICJTdGFydGluZyBBREMgR2FpbiBDYWwgZm9yIENoYWluICVkXG4iLCBpKTsKKwkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAorCQkJIlN0YXJ0aW5nIEFEQyBHYWluIENhbCBmb3IgQ2hhaW4gJWRcbiIsIGkpOwogCi0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAotCQkJICAiQ2huICVkIHB3cl9tZWFzX29kZF9pID0gMHglMDh4XG4iLCBpLAotCQkJICBpT2RkTWVhc09mZnNldCk7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAotCQkJICAiQ2huICVkIHB3cl9tZWFzX2V2ZW5faSA9IDB4JTA4eFxuIiwgaSwKLQkJCSAgaUV2ZW5NZWFzT2Zmc2V0KTsKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCi0JCQkgICJDaG4gJWQgcHdyX21lYXNfb2RkX3EgPSAweCUwOHhcbiIsIGksCi0JCQkgIHFPZGRNZWFzT2Zmc2V0KTsKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCi0JCQkgICJDaG4gJWQgcHdyX21lYXNfZXZlbl9xID0gMHglMDh4XG4iLCBpLAotCQkJICBxRXZlbk1lYXNPZmZzZXQpOworCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCisJCQkiQ2huICVkIHB3cl9tZWFzX29kZF9pID0gMHglMDh4XG4iLCBpLAorCQkJaU9kZE1lYXNPZmZzZXQpOworCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCisJCQkiQ2huICVkIHB3cl9tZWFzX2V2ZW5faSA9IDB4JTA4eFxuIiwgaSwKKwkJCWlFdmVuTWVhc09mZnNldCk7CisJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwKKwkJCSJDaG4gJWQgcHdyX21lYXNfb2RkX3EgPSAweCUwOHhcbiIsIGksCisJCQlxT2RkTWVhc09mZnNldCk7CisJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwKKwkJCSJDaG4gJWQgcHdyX21lYXNfZXZlbl9xID0gMHglMDh4XG4iLCBpLAorCQkJcUV2ZW5NZWFzT2Zmc2V0KTsKIAogCQlpZiAoaU9kZE1lYXNPZmZzZXQgIT0gMCAmJiBxRXZlbk1lYXNPZmZzZXQgIT0gMCkgewogCQkJaUdhaW5NaXNtYXRjaCA9CkBAIC0yNzksMjAgKzI3NywyMCBAQAogCQkJCSgocU9kZE1lYXNPZmZzZXQgKiAzMikgLwogCQkJCSBxRXZlbk1lYXNPZmZzZXQpICYgMHgzZjsKIAotCQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCi0JCQkJICAiQ2huICVkIGdhaW5fbWlzbWF0Y2hfaSA9IDB4JTA4eFxuIiwgaSwKLQkJCQkgIGlHYWluTWlzbWF0Y2gpOwotCQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCi0JCQkJICAiQ2huICVkIGdhaW5fbWlzbWF0Y2hfcSA9IDB4JTA4eFxuIiwgaSwKLQkJCQkgIHFHYWluTWlzbWF0Y2gpOworCQkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAorCQkJCSJDaG4gJWQgZ2Fpbl9taXNtYXRjaF9pID0gMHglMDh4XG4iLCBpLAorCQkJCWlHYWluTWlzbWF0Y2gpOworCQkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAorCQkJCSJDaG4gJWQgZ2Fpbl9taXNtYXRjaF9xID0gMHglMDh4XG4iLCBpLAorCQkJCXFHYWluTWlzbWF0Y2gpOwogCiAJCQl2YWwgPSBSRUdfUkVBRChhaCwgQVJfUEhZX05FV19BRENfRENfR0FJTl9DT1JSKGkpKTsKIAkJCXZhbCAmPSAweGZmZmZmMDAwOwogCQkJdmFsIHw9IChxR2Fpbk1pc21hdGNoKSB8IChpR2Fpbk1pc21hdGNoIDw8IDYpOwogCQkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfTkVXX0FEQ19EQ19HQUlOX0NPUlIoaSksIHZhbCk7CiAKLQkJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAotCQkJCSAgIkFEQyBHYWluIENhbCBkb25lIGZvciBDaGFpbiAlZFxuIiwgaSk7CisJCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCisJCQkJIkFEQyBHYWluIENhbCBkb25lIGZvciBDaGFpbiAlZFxuIiwgaSk7CiAJCX0KIAl9CiAKQEAgLTMxNyw0MSArMzE1LDQxIEBACiAJCXFPZGRNZWFzT2Zmc2V0ID0gYWgtPnRvdGFsQWRjRGNPZmZzZXRRT2RkUGhhc2VbaV07CiAJCXFFdmVuTWVhc09mZnNldCA9IGFoLT50b3RhbEFkY0RjT2Zmc2V0UUV2ZW5QaGFzZVtpXTsKIAotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwKLQkJCSAgICJTdGFydGluZyBBREMgREMgT2Zmc2V0IENhbCBmb3IgQ2hhaW4gJWRcbiIsIGkpOworCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCisJCQkiU3RhcnRpbmcgQURDIERDIE9mZnNldCBDYWwgZm9yIENoYWluICVkXG4iLCBpKTsKIAotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwKLQkJCSAgIkNobiAlZCBwd3JfbWVhc19vZGRfaSA9ICVkXG4iLCBpLAotCQkJICBpT2RkTWVhc09mZnNldCk7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAotCQkJICAiQ2huICVkIHB3cl9tZWFzX2V2ZW5faSA9ICVkXG4iLCBpLAotCQkJICBpRXZlbk1lYXNPZmZzZXQpOwotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwKLQkJCSAgIkNobiAlZCBwd3JfbWVhc19vZGRfcSA9ICVkXG4iLCBpLAotCQkJICBxT2RkTWVhc09mZnNldCk7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAotCQkJICAiQ2huICVkIHB3cl9tZWFzX2V2ZW5fcSA9ICVkXG4iLCBpLAotCQkJICBxRXZlbk1lYXNPZmZzZXQpOworCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCisJCQkiQ2huICVkIHB3cl9tZWFzX29kZF9pID0gJWRcbiIsIGksCisJCQlpT2RkTWVhc09mZnNldCk7CisJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwKKwkJCSJDaG4gJWQgcHdyX21lYXNfZXZlbl9pID0gJWRcbiIsIGksCisJCQlpRXZlbk1lYXNPZmZzZXQpOworCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCisJCQkiQ2huICVkIHB3cl9tZWFzX29kZF9xID0gJWRcbiIsIGksCisJCQlxT2RkTWVhc09mZnNldCk7CisJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwKKwkJCSJDaG4gJWQgcHdyX21lYXNfZXZlbl9xID0gJWRcbiIsIGksCisJCQlxRXZlbk1lYXNPZmZzZXQpOwogCiAJCWlEY01pc21hdGNoID0gKCgoaUV2ZW5NZWFzT2Zmc2V0IC0gaU9kZE1lYXNPZmZzZXQpICogMikgLwogCQkJICAgICAgIG51bVNhbXBsZXMpICYgMHgxZmY7CiAJCXFEY01pc21hdGNoID0gKCgocU9kZE1lYXNPZmZzZXQgLSBxRXZlbk1lYXNPZmZzZXQpICogMikgLwogCQkJICAgICAgIG51bVNhbXBsZXMpICYgMHgxZmY7CiAKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCi0JCQkgICJDaG4gJWQgZGNfb2Zmc2V0X21pc21hdGNoX2kgPSAweCUwOHhcbiIsIGksCi0JCQkgIGlEY01pc21hdGNoKTsKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCi0JCQkgICJDaG4gJWQgZGNfb2Zmc2V0X21pc21hdGNoX3EgPSAweCUwOHhcbiIsIGksCi0JCQkgIHFEY01pc21hdGNoKTsKKwkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAorCQkJIkNobiAlZCBkY19vZmZzZXRfbWlzbWF0Y2hfaSA9IDB4JTA4eFxuIiwgaSwKKwkJCWlEY01pc21hdGNoKTsKKwkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAorCQkJIkNobiAlZCBkY19vZmZzZXRfbWlzbWF0Y2hfcSA9IDB4JTA4eFxuIiwgaSwKKwkJCXFEY01pc21hdGNoKTsKIAogCQl2YWwgPSBSRUdfUkVBRChhaCwgQVJfUEhZX05FV19BRENfRENfR0FJTl9DT1JSKGkpKTsKIAkJdmFsICY9IDB4YzAwMDBmZmY7CiAJCXZhbCB8PSAocURjTWlzbWF0Y2ggPDwgMTIpIHwgKGlEY01pc21hdGNoIDw8IDIxKTsKIAkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfTkVXX0FEQ19EQ19HQUlOX0NPUlIoaSksIHZhbCk7CiAKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCi0JCQkgICJBREMgREMgT2Zmc2V0IENhbCBkb25lIGZvciBDaGFpbiAlZFxuIiwgaSk7CisJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwKKwkJCSJBREMgREMgT2Zmc2V0IENhbCBkb25lIGZvciBDaGFpbiAlZFxuIiwgaSk7CiAJfQogCiAJUkVHX1dSSVRFKGFoLCBBUl9QSFlfTkVXX0FEQ19EQ19HQUlOX0NPUlIoMCksCkBAIC01NDAsNyArNTM4LDcgQEAKIAkJeyAweDc4MzgsIDAgfSwKIAl9OwogCi0JYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsICJSdW5uaW5nIFBBIENhbGlicmF0aW9uXG4iKTsKKwlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsICJSdW5uaW5nIFBBIENhbGlicmF0aW9uXG4iKTsKIAogCS8qIFBBIENBTCBpcyBub3QgbmVlZGVkIGZvciBoaWdoIHBvd2VyIHNvbHV0aW9uICovCiAJaWYgKGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tKGFoLCBFRVBfVFhHQUlOX1RZUEUpID09CkBAIC03MjEsOSArNzE5LDggQEAKIAkJUkVHX1NFVF9CSVQoYWgsIEFSX1BIWV9BR0NfQ09OVFJPTCwgQVJfUEhZX0FHQ19DT05UUk9MX0NBTCk7CiAJCWlmICghYXRoOWtfaHdfd2FpdChhaCwgQVJfUEhZX0FHQ19DT05UUk9MLAogCQkJCSAgQVJfUEhZX0FHQ19DT05UUk9MX0NBTCwgMCwgQUhfV0FJVF9USU1FT1VUKSkgewotCQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsICJvZmZzZXQgIgotCQkJCSAgImNhbGlicmF0aW9uIGZhaWxlZCB0byBjb21wbGV0ZSBpbiAiCi0JCQkJICAiMW1zOyBub2lzeSA/P1xuIik7CisJCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCisJCQkJIm9mZnNldCBjYWxpYnJhdGlvbiBmYWlsZWQgdG8gY29tcGxldGUgaW4gMW1zOyBub2lzeSBlbnZpcm9ubWVudD9cbiIpOwogCQkJcmV0dXJuIGZhbHNlOwogCQl9CiAJCVJFR19DTFJfQklUKGFoLCBBUl9QSFlfVFVSQk8sIEFSX1BIWV9GQ19EWU4yMDQwX0VOKTsKQEAgLTczNiw4ICs3MzMsOCBAQAogCVJFR19TRVRfQklUKGFoLCBBUl9QSFlfQUdDX0NPTlRST0wsIEFSX1BIWV9BR0NfQ09OVFJPTF9DQUwpOwogCWlmICghYXRoOWtfaHdfd2FpdChhaCwgQVJfUEhZX0FHQ19DT05UUk9MLCBBUl9QSFlfQUdDX0NPTlRST0xfQ0FMLAogCQkJICAwLCBBSF9XQUlUX1RJTUVPVVQpKSB7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLCAib2Zmc2V0IGNhbGlicmF0aW9uICIKLQkJCSAgImZhaWxlZCB0byBjb21wbGV0ZSBpbiAxbXM7IG5vaXN5ID8/XG4iKTsKKwkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAorCQkJIm9mZnNldCBjYWxpYnJhdGlvbiBmYWlsZWQgdG8gY29tcGxldGUgaW4gMW1zOyBub2lzeSBlbnZpcm9ubWVudD9cbiIpOwogCQlyZXR1cm4gZmFsc2U7CiAJfQogCkBAIC04MjksOSArODI2LDggQEAKIAkJaWYgKCFhdGg5a19od193YWl0KGFoLCBBUl9QSFlfQUdDX0NPTlRST0wsCiAJCQkJICAgQVJfUEhZX0FHQ19DT05UUk9MX0NBTCwKIAkJCQkgICAwLCBBSF9XQUlUX1RJTUVPVVQpKSB7Ci0JCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwKLQkJCQkgICJvZmZzZXQgY2FsaWJyYXRpb24gZmFpbGVkIHRvICIKLQkJCQkgICJjb21wbGV0ZSBpbiAxbXM7IG5vaXN5IGVudmlyb25tZW50P1xuIik7CisJCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCisJCQkJIm9mZnNldCBjYWxpYnJhdGlvbiBmYWlsZWQgdG8gY29tcGxldGUgaW4gMW1zOyBub2lzeSBlbnZpcm9ubWVudD9cbiIpOwogCQkJcmV0dXJuIGZhbHNlOwogCQl9CiAKQEAgLTg2NiwxOSArODYyLDE5IEBACiAKIAkJCUlOSVRfQ0FMKCZhaC0+YWRjZ2Fpbl9jYWxkYXRhKTsKIAkJCUlOU0VSVF9DQUwoYWgsICZhaC0+YWRjZ2Fpbl9jYWxkYXRhKTsKLQkJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAotCQkJCSAgImVuYWJsaW5nIEFEQyBHYWluIENhbGlicmF0aW9uLlxuIik7CisJCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCisJCQkJImVuYWJsaW5nIEFEQyBHYWluIENhbGlicmF0aW9uLlxuIik7CiAKIAkJCUlOSVRfQ0FMKCZhaC0+YWRjZGNfY2FsZGF0YSk7CiAJCQlJTlNFUlRfQ0FMKGFoLCAmYWgtPmFkY2RjX2NhbGRhdGEpOwotCQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCi0JCQkJICAiZW5hYmxpbmcgQURDIERDIENhbGlicmF0aW9uLlxuIik7CisJCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCisJCQkJImVuYWJsaW5nIEFEQyBEQyBDYWxpYnJhdGlvbi5cbiIpOwogCQl9CiAKIAkJSU5JVF9DQUwoJmFoLT5pcV9jYWxkYXRhKTsKIAkJSU5TRVJUX0NBTChhaCwgJmFoLT5pcV9jYWxkYXRhKTsKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCi0JCQkgICJlbmFibGluZyBJUSBDYWxpYnJhdGlvbi5cbiIpOworCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCisJCQkiZW5hYmxpbmcgSVEgQ2FsaWJyYXRpb24uXG4iKTsKIAogCQlhaC0+Y2FsX2xpc3RfY3VyciA9IGFoLT5jYWxfbGlzdDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwMl9ody5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwMl9ody5jCmluZGV4IDQ4MjYxYjcuLmY4YTc3NzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDJfaHcuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAyX2h3LmMKQEAgLTIyLDI4ICsyMiwxMCBAQAogCiBpbnQgbW9kcGFyYW1fZm9yY2VfbmV3X2FuaTsKIG1vZHVsZV9wYXJhbV9uYW1lZChmb3JjZV9uZXdfYW5pLCBtb2RwYXJhbV9mb3JjZV9uZXdfYW5pLCBpbnQsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhub2h3Y3J5cHQsICJGb3JjZSBuZXcgQU5JIGZvciBBUjUwMDgsIEFSOTAwMSwgQVI5MDAyIik7CitNT0RVTEVfUEFSTV9ERVNDKGZvcmNlX25ld19hbmksICJGb3JjZSBuZXcgQU5JIGZvciBBUjUwMDgsIEFSOTAwMSwgQVI5MDAyIik7CiAKIC8qIEdlbmVyYWwgaGFyZHdhcmUgY29kZSBmb3IgdGhlIEE1MDA4L0FSOTAwMS9BUjkwMDIgaGFkd2FyZSBmYW1pbGllcyAqLwogCi1zdGF0aWMgYm9vbCBhcjkwMDJfaHdfbWFjdmVyc2lvbl9zdXBwb3J0ZWQodTMyIG1hY3ZlcnNpb24pCi17Ci0Jc3dpdGNoIChtYWN2ZXJzaW9uKSB7Ci0JY2FzZSBBUl9TUkVWX1ZFUlNJT05fNTQxNl9QQ0k6Ci0JY2FzZSBBUl9TUkVWX1ZFUlNJT05fNTQxNl9QQ0lFOgotCWNhc2UgQVJfU1JFVl9WRVJTSU9OXzkxNjA6Ci0JY2FzZSBBUl9TUkVWX1ZFUlNJT05fOTEwMDoKLQljYXNlIEFSX1NSRVZfVkVSU0lPTl85MjgwOgotCWNhc2UgQVJfU1JFVl9WRVJTSU9OXzkyODU6Ci0JY2FzZSBBUl9TUkVWX1ZFUlNJT05fOTI4NzoKLQljYXNlIEFSX1NSRVZfVkVSU0lPTl85MjcxOgotCQlyZXR1cm4gdHJ1ZTsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0JcmV0dXJuIGZhbHNlOwotfQotCiBzdGF0aWMgdm9pZCBhcjkwMDJfaHdfaW5pdF9tb2RlX3JlZ3Moc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJaWYgKEFSX1NSRVZfOTI3MShhaCkpIHsKQEAgLTQ5NCw5ICs0NzYsOSBAQAogCWNhc2UgQVJfUkFEMjEyMl9TUkVWX01BSk9SOgogCQlicmVhazsKIAlkZWZhdWx0OgotCQlhdGhfcHJpbnQoYXRoOWtfaHdfY29tbW9uKGFoKSwgQVRIX0RCR19GQVRBTCwKLQkJCSAgIlJhZGlvIENoaXAgUmV2IDB4JTAyWCBub3Qgc3VwcG9ydGVkXG4iLAotCQkJICB2YWwgJiBBUl9SQURJT19TUkVWX01BSk9SKTsKKwkJYXRoX2VycihhdGg5a19od19jb21tb24oYWgpLAorCQkJIlJhZGlvIENoaXAgUmV2IDB4JTAyWCBub3Qgc3VwcG9ydGVkXG4iLAorCQkJdmFsICYgQVJfUkFESU9fU1JFVl9NQUpPUik7CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CiAKQEAgLTU2NSw3ICs1NDcsNiBAQAogCiAJcHJpdl9vcHMtPmluaXRfbW9kZV9yZWdzID0gYXI5MDAyX2h3X2luaXRfbW9kZV9yZWdzOwogCXByaXZfb3BzLT5pbml0X21vZGVfZ2Fpbl9yZWdzID0gYXI5MDAyX2h3X2luaXRfbW9kZV9nYWluX3JlZ3M7Ci0JcHJpdl9vcHMtPm1hY3ZlcnNpb25fc3VwcG9ydGVkID0gYXI5MDAyX2h3X21hY3ZlcnNpb25fc3VwcG9ydGVkOwogCiAJb3BzLT5jb25maWdfcGNpX3Bvd2Vyc2F2ZSA9IGFyOTAwMl9od19jb25maWdwY2lwb3dlcnNhdmU7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDJfbWFjLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAyX21hYy5jCmluZGV4IDUwZGRhMzkuLjM5OWFiM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDJfbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwMl9tYWMuYwpAQCAtOTAsMTMgKzkwLDEwIEBACiAKIAkJKm1hc2tlZCA9IGlzciAmIEFUSDlLX0lOVF9DT01NT047CiAKLQkJaWYgKGFoLT5jb25maWcucnhfaW50cl9taXRpZ2F0aW9uKSB7Ci0JCQlpZiAoaXNyICYgKEFSX0lTUl9SWE1JTlRSIHwgQVJfSVNSX1JYSU5UTSkpCi0JCQkJKm1hc2tlZCB8PSBBVEg5S19JTlRfUlg7Ci0JCX0KLQotCQlpZiAoaXNyICYgKEFSX0lTUl9SWE9LIHwgQVJfSVNSX1JYRVJSKSkKKwkJaWYgKGlzciAmIChBUl9JU1JfUlhNSU5UUiB8IEFSX0lTUl9SWElOVE0gfAorCQkJICAgQVJfSVNSX1JYT0sgfCBBUl9JU1JfUlhFUlIpKQogCQkJKm1hc2tlZCB8PSBBVEg5S19JTlRfUlg7CisKIAkJaWYgKGlzciAmCiAJCSAgICAoQVJfSVNSX1RYT0sgfCBBUl9JU1JfVFhERVNDIHwgQVJfSVNSX1RYRVJSIHwKIAkJICAgICBBUl9JU1JfVFhFT0wpKSB7CkBAIC0xMTQsMTYgKzExMSw4IEBACiAJCX0KIAogCQlpZiAoaXNyICYgQVJfSVNSX1JYT1JOKSB7Ci0JCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0lOVEVSUlVQVCwKLQkJCQkgICJyZWNlaXZlIEZJRk8gb3ZlcnJ1biBpbnRlcnJ1cHRcbiIpOwotCQl9Ci0KLQkJaWYgKCFBUl9TUkVWXzkxMDAoYWgpKSB7Ci0JCQlpZiAoIShwQ2FwLT5od19jYXBzICYgQVRIOUtfSFdfQ0FQX0FVVE9TTEVFUCkpIHsKLQkJCQl1MzIgaXNyNSA9IFJFR19SRUFEKGFoLCBBUl9JU1JfUzVfUyk7Ci0JCQkJaWYgKGlzcjUgJiBBUl9JU1JfUzVfVElNX1RJTUVSKQotCQkJCQkqbWFza2VkIHw9IEFUSDlLX0lOVF9USU1fVElNRVI7Ci0JCQl9CisJCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19JTlRFUlJVUFQsCisJCQkJInJlY2VpdmUgRklGTyBvdmVycnVuIGludGVycnVwdFxuIik7CiAJCX0KIAogCQkqbWFza2VkIHw9IG1hc2syOwpAQCAtMTM2LDE3ICsxMjUsMTggQEAKIAkJdTMyIHM1X3M7CiAKIAkJczVfcyA9IFJFR19SRUFEKGFoLCBBUl9JU1JfUzVfUyk7Ci0JCWlmIChpc3IgJiBBUl9JU1JfR0VOVE1SKSB7Ci0JCQlhaC0+aW50cl9nZW5fdGltZXJfdHJpZ2dlciA9CisJCWFoLT5pbnRyX2dlbl90aW1lcl90cmlnZ2VyID0KIAkJCQlNUyhzNV9zLCBBUl9JU1JfUzVfR0VOVElNRVJfVFJJRyk7CiAKLQkJCWFoLT5pbnRyX2dlbl90aW1lcl90aHJlc2ggPQotCQkJCU1TKHM1X3MsIEFSX0lTUl9TNV9HRU5USU1FUl9USFJFU0gpOworCQlhaC0+aW50cl9nZW5fdGltZXJfdGhyZXNoID0KKwkJCU1TKHM1X3MsIEFSX0lTUl9TNV9HRU5USU1FUl9USFJFU0gpOwogCi0JCQlpZiAoYWgtPmludHJfZ2VuX3RpbWVyX3RyaWdnZXIpCi0JCQkJKm1hc2tlZCB8PSBBVEg5S19JTlRfR0VOVElNRVI7CisJCWlmIChhaC0+aW50cl9nZW5fdGltZXJfdHJpZ2dlcikKKwkJCSptYXNrZWQgfD0gQVRIOUtfSU5UX0dFTlRJTUVSOwogCi0JCX0KKwkJaWYgKChzNV9zICYgQVJfSVNSX1M1X1RJTV9USU1FUikgJiYKKwkJICAgICEocENhcC0+aHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9BVVRPU0xFRVApKQorCQkJKm1hc2tlZCB8PSBBVEg5S19JTlRfVElNX1RJTUVSOwogCX0KIAogCWlmIChzeW5jX2NhdXNlKSB7CkBAIC0xNTcsMjUgKzE0NywyNSBAQAogCiAJCWlmIChmYXRhbF9pbnQpIHsKIAkJCWlmIChzeW5jX2NhdXNlICYgQVJfSU5UUl9TWU5DX0hPU1QxX0ZBVEFMKSB7Ci0JCQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19BTlksCi0JCQkJCSAgInJlY2VpdmVkIFBDSSBGQVRBTCBpbnRlcnJ1cHRcbiIpOworCQkJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0FOWSwKKwkJCQkJInJlY2VpdmVkIFBDSSBGQVRBTCBpbnRlcnJ1cHRcbiIpOwogCQkJfQogCQkJaWYgKHN5bmNfY2F1c2UgJiBBUl9JTlRSX1NZTkNfSE9TVDFfUEVSUikgewotCQkJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQU5ZLAotCQkJCQkgICJyZWNlaXZlZCBQQ0kgUEVSUiBpbnRlcnJ1cHRcbiIpOworCQkJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0FOWSwKKwkJCQkJInJlY2VpdmVkIFBDSSBQRVJSIGludGVycnVwdFxuIik7CiAJCQl9CiAJCQkqbWFza2VkIHw9IEFUSDlLX0lOVF9GQVRBTDsKIAkJfQogCQlpZiAoc3luY19jYXVzZSAmIEFSX0lOVFJfU1lOQ19SQURNX0NQTF9USU1FT1VUKSB7Ci0JCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0lOVEVSUlVQVCwKLQkJCQkgICJBUl9JTlRSX1NZTkNfUkFETV9DUExfVElNRU9VVFxuIik7CisJCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19JTlRFUlJVUFQsCisJCQkJIkFSX0lOVFJfU1lOQ19SQURNX0NQTF9USU1FT1VUXG4iKTsKIAkJCVJFR19XUklURShhaCwgQVJfUkMsIEFSX1JDX0hPU1RJRik7CiAJCQlSRUdfV1JJVEUoYWgsIEFSX1JDLCAwKTsKIAkJCSptYXNrZWQgfD0gQVRIOUtfSU5UX0ZBVEFMOwogCQl9CiAJCWlmIChzeW5jX2NhdXNlICYgQVJfSU5UUl9TWU5DX0xPQ0FMX1RJTUVPVVQpIHsKLQkJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfSU5URVJSVVBULAotCQkJCSAgIkFSX0lOVFJfU1lOQ19MT0NBTF9USU1FT1VUXG4iKTsKKwkJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0lOVEVSUlVQVCwKKwkJCQkiQVJfSU5UUl9TWU5DX0xPQ0FMX1RJTUVPVVRcbiIpOwogCQl9CiAKIAkJUkVHX1dSSVRFKGFoLCBBUl9JTlRSX1NZTkNfQ0FVU0VfQ0xSLCBzeW5jX2NhdXNlKTsKQEAgLTIxOCw3NyArMjA4LDcwIEBACiAJCQkJIHN0cnVjdCBhdGhfdHhfc3RhdHVzICp0cykKIHsKIAlzdHJ1Y3QgYXI1NDE2X2Rlc2MgKmFkcyA9IEFSNTQxNkRFU0MoZHMpOworCXUzMiBzdGF0dXM7CiAKLQlpZiAoKGFkcy0+ZHNfdHhzdGF0dXM5ICYgQVJfVHhEb25lKSA9PSAwKQorCXN0YXR1cyA9IEFDQ0VTU19PTkNFKGFkcy0+ZHNfdHhzdGF0dXM5KTsKKwlpZiAoKHN0YXR1cyAmIEFSX1R4RG9uZSkgPT0gMCkKIAkJcmV0dXJuIC1FSU5QUk9HUkVTUzsKIAotCXRzLT50c19zZXFudW0gPSBNUyhhZHMtPmRzX3R4c3RhdHVzOSwgQVJfU2VxTnVtKTsKIAl0cy0+dHNfdHN0YW1wID0gYWRzLT5BUl9TZW5kVGltZXN0YW1wOwogCXRzLT50c19zdGF0dXMgPSAwOwogCXRzLT50c19mbGFncyA9IDA7CiAKLQlpZiAoYWRzLT5kc190eHN0YXR1czEgJiBBUl9Gcm1YbWl0T0spCi0JCXRzLT50c19zdGF0dXMgfD0gQVRIOUtfVFhfQUNLRUQ7Ci0JaWYgKGFkcy0+ZHNfdHhzdGF0dXMxICYgQVJfRXhjZXNzaXZlUmV0cmllcykKLQkJdHMtPnRzX3N0YXR1cyB8PSBBVEg5S19UWEVSUl9YUkVUUlk7Ci0JaWYgKGFkcy0+ZHNfdHhzdGF0dXMxICYgQVJfRmlsdGVyZWQpCi0JCXRzLT50c19zdGF0dXMgfD0gQVRIOUtfVFhFUlJfRklMVDsKLQlpZiAoYWRzLT5kc190eHN0YXR1czEgJiBBUl9GSUZPVW5kZXJydW4pIHsKLQkJdHMtPnRzX3N0YXR1cyB8PSBBVEg5S19UWEVSUl9GSUZPOwotCQlhdGg5a19od191cGRhdGV0eHRyaWdsZXZlbChhaCwgdHJ1ZSk7Ci0JfQotCWlmIChhZHMtPmRzX3R4c3RhdHVzOSAmIEFSX1R4T3BFeGNlZWRlZCkKKwlpZiAoc3RhdHVzICYgQVJfVHhPcEV4Y2VlZGVkKQogCQl0cy0+dHNfc3RhdHVzIHw9IEFUSDlLX1RYRVJSX1hUWE9QOwotCWlmIChhZHMtPmRzX3R4c3RhdHVzMSAmIEFSX1R4VGltZXJFeHBpcmVkKQotCQl0cy0+dHNfc3RhdHVzIHw9IEFUSDlLX1RYRVJSX1RJTUVSX0VYUElSRUQ7CisJdHMtPnRpZCA9IE1TKHN0YXR1cywgQVJfVHhUaWQpOworCXRzLT50c19yYXRlaW5kZXggPSBNUyhzdGF0dXMsIEFSX0ZpbmFsVHhJZHgpOworCXRzLT50c19zZXFudW0gPSBNUyhzdGF0dXMsIEFSX1NlcU51bSk7CiAKLQlpZiAoYWRzLT5kc190eHN0YXR1czEgJiBBUl9EZXNjQ2ZnRXJyKQotCQl0cy0+dHNfZmxhZ3MgfD0gQVRIOUtfVFhfREVTQ19DRkdfRVJSOwotCWlmIChhZHMtPmRzX3R4c3RhdHVzMSAmIEFSX1R4RGF0YVVuZGVycnVuKSB7Ci0JCXRzLT50c19mbGFncyB8PSBBVEg5S19UWF9EQVRBX1VOREVSUlVOOwotCQlhdGg5a19od191cGRhdGV0eHRyaWdsZXZlbChhaCwgdHJ1ZSk7Ci0JfQotCWlmIChhZHMtPmRzX3R4c3RhdHVzMSAmIEFSX1R4RGVsaW1VbmRlcnJ1bikgewotCQl0cy0+dHNfZmxhZ3MgfD0gQVRIOUtfVFhfREVMSU1fVU5ERVJSVU47Ci0JCWF0aDlrX2h3X3VwZGF0ZXR4dHJpZ2xldmVsKGFoLCB0cnVlKTsKLQl9Ci0JaWYgKGFkcy0+ZHNfdHhzdGF0dXMwICYgQVJfVHhCYVN0YXR1cykgeworCXN0YXR1cyA9IEFDQ0VTU19PTkNFKGFkcy0+ZHNfdHhzdGF0dXMwKTsKKwl0cy0+dHNfcnNzaV9jdGwwID0gTVMoc3RhdHVzLCBBUl9UeFJTU0lBbnQwMCk7CisJdHMtPnRzX3Jzc2lfY3RsMSA9IE1TKHN0YXR1cywgQVJfVHhSU1NJQW50MDEpOworCXRzLT50c19yc3NpX2N0bDIgPSBNUyhzdGF0dXMsIEFSX1R4UlNTSUFudDAyKTsKKwlpZiAoc3RhdHVzICYgQVJfVHhCYVN0YXR1cykgewogCQl0cy0+dHNfZmxhZ3MgfD0gQVRIOUtfVFhfQkE7CiAJCXRzLT5iYV9sb3cgPSBhZHMtPkFSX0JhQml0bWFwTG93OwogCQl0cy0+YmFfaGlnaCA9IGFkcy0+QVJfQmFCaXRtYXBIaWdoOwogCX0KIAotCXRzLT50c19yYXRlaW5kZXggPSBNUyhhZHMtPmRzX3R4c3RhdHVzOSwgQVJfRmluYWxUeElkeCk7Ci0Jc3dpdGNoICh0cy0+dHNfcmF0ZWluZGV4KSB7Ci0JY2FzZSAwOgotCQl0cy0+dHNfcmF0ZWNvZGUgPSBNUyhhZHMtPmRzX2N0bDMsIEFSX1htaXRSYXRlMCk7Ci0JCWJyZWFrOwotCWNhc2UgMToKLQkJdHMtPnRzX3JhdGVjb2RlID0gTVMoYWRzLT5kc19jdGwzLCBBUl9YbWl0UmF0ZTEpOwotCQlicmVhazsKLQljYXNlIDI6Ci0JCXRzLT50c19yYXRlY29kZSA9IE1TKGFkcy0+ZHNfY3RsMywgQVJfWG1pdFJhdGUyKTsKLQkJYnJlYWs7Ci0JY2FzZSAzOgotCQl0cy0+dHNfcmF0ZWNvZGUgPSBNUyhhZHMtPmRzX2N0bDMsIEFSX1htaXRSYXRlMyk7Ci0JCWJyZWFrOworCXN0YXR1cyA9IEFDQ0VTU19PTkNFKGFkcy0+ZHNfdHhzdGF0dXMxKTsKKwlpZiAoc3RhdHVzICYgQVJfRnJtWG1pdE9LKQorCQl0cy0+dHNfc3RhdHVzIHw9IEFUSDlLX1RYX0FDS0VEOworCWVsc2UgeworCQlpZiAoc3RhdHVzICYgQVJfRXhjZXNzaXZlUmV0cmllcykKKwkJCXRzLT50c19zdGF0dXMgfD0gQVRIOUtfVFhFUlJfWFJFVFJZOworCQlpZiAoc3RhdHVzICYgQVJfRmlsdGVyZWQpCisJCQl0cy0+dHNfc3RhdHVzIHw9IEFUSDlLX1RYRVJSX0ZJTFQ7CisJCWlmIChzdGF0dXMgJiBBUl9GSUZPVW5kZXJydW4pIHsKKwkJCXRzLT50c19zdGF0dXMgfD0gQVRIOUtfVFhFUlJfRklGTzsKKwkJCWF0aDlrX2h3X3VwZGF0ZXR4dHJpZ2xldmVsKGFoLCB0cnVlKTsKKwkJfQogCX0KKwlpZiAoc3RhdHVzICYgQVJfVHhUaW1lckV4cGlyZWQpCisJCXRzLT50c19zdGF0dXMgfD0gQVRIOUtfVFhFUlJfVElNRVJfRVhQSVJFRDsKKwlpZiAoc3RhdHVzICYgQVJfRGVzY0NmZ0VycikKKwkJdHMtPnRzX2ZsYWdzIHw9IEFUSDlLX1RYX0RFU0NfQ0ZHX0VSUjsKKwlpZiAoc3RhdHVzICYgQVJfVHhEYXRhVW5kZXJydW4pIHsKKwkJdHMtPnRzX2ZsYWdzIHw9IEFUSDlLX1RYX0RBVEFfVU5ERVJSVU47CisJCWF0aDlrX2h3X3VwZGF0ZXR4dHJpZ2xldmVsKGFoLCB0cnVlKTsKKwl9CisJaWYgKHN0YXR1cyAmIEFSX1R4RGVsaW1VbmRlcnJ1bikgeworCQl0cy0+dHNfZmxhZ3MgfD0gQVRIOUtfVFhfREVMSU1fVU5ERVJSVU47CisJCWF0aDlrX2h3X3VwZGF0ZXR4dHJpZ2xldmVsKGFoLCB0cnVlKTsKKwl9CisJdHMtPnRzX3Nob3J0cmV0cnkgPSBNUyhzdGF0dXMsIEFSX1JUU0ZhaWxDbnQpOworCXRzLT50c19sb25ncmV0cnkgPSBNUyhzdGF0dXMsIEFSX0RhdGFGYWlsQ250KTsKKwl0cy0+dHNfdmlydGNvbCA9IE1TKHN0YXR1cywgQVJfVmlydFJldHJ5Q250KTsKIAotCXRzLT50c19yc3NpID0gTVMoYWRzLT5kc190eHN0YXR1czUsIEFSX1R4UlNTSUNvbWJpbmVkKTsKLQl0cy0+dHNfcnNzaV9jdGwwID0gTVMoYWRzLT5kc190eHN0YXR1czAsIEFSX1R4UlNTSUFudDAwKTsKLQl0cy0+dHNfcnNzaV9jdGwxID0gTVMoYWRzLT5kc190eHN0YXR1czAsIEFSX1R4UlNTSUFudDAxKTsKLQl0cy0+dHNfcnNzaV9jdGwyID0gTVMoYWRzLT5kc190eHN0YXR1czAsIEFSX1R4UlNTSUFudDAyKTsKLQl0cy0+dHNfcnNzaV9leHQwID0gTVMoYWRzLT5kc190eHN0YXR1czUsIEFSX1R4UlNTSUFudDEwKTsKLQl0cy0+dHNfcnNzaV9leHQxID0gTVMoYWRzLT5kc190eHN0YXR1czUsIEFSX1R4UlNTSUFudDExKTsKLQl0cy0+dHNfcnNzaV9leHQyID0gTVMoYWRzLT5kc190eHN0YXR1czUsIEFSX1R4UlNTSUFudDEyKTsKKwlzdGF0dXMgPSBBQ0NFU1NfT05DRShhZHMtPmRzX3R4c3RhdHVzNSk7CisJdHMtPnRzX3Jzc2kgPSBNUyhzdGF0dXMsIEFSX1R4UlNTSUNvbWJpbmVkKTsKKwl0cy0+dHNfcnNzaV9leHQwID0gTVMoc3RhdHVzLCBBUl9UeFJTU0lBbnQxMCk7CisJdHMtPnRzX3Jzc2lfZXh0MSA9IE1TKHN0YXR1cywgQVJfVHhSU1NJQW50MTEpOworCXRzLT50c19yc3NpX2V4dDIgPSBNUyhzdGF0dXMsIEFSX1R4UlNTSUFudDEyKTsKKwogCXRzLT5ldm0wID0gYWRzLT5BUl9UeEVWTTA7CiAJdHMtPmV2bTEgPSBhZHMtPkFSX1R4RVZNMTsKIAl0cy0+ZXZtMiA9IGFkcy0+QVJfVHhFVk0yOwotCXRzLT50c19zaG9ydHJldHJ5ID0gTVMoYWRzLT5kc190eHN0YXR1czEsIEFSX1JUU0ZhaWxDbnQpOwotCXRzLT50c19sb25ncmV0cnkgPSBNUyhhZHMtPmRzX3R4c3RhdHVzMSwgQVJfRGF0YUZhaWxDbnQpOwotCXRzLT50c192aXJ0Y29sID0gTVMoYWRzLT5kc190eHN0YXR1czEsIEFSX1ZpcnRSZXRyeUNudCk7Ci0JdHMtPnRpZCA9IE1TKGFkcy0+ZHNfdHhzdGF0dXM5LCBBUl9UeFRpZCk7Ci0JdHMtPnRzX2FudGVubmEgPSAwOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zMDAsNyArMjgzLDYgQEAKIHsKIAlzdHJ1Y3QgYXI1NDE2X2Rlc2MgKmFkcyA9IEFSNTQxNkRFU0MoZHMpOwogCi0JdHhQb3dlciArPSBhaC0+dHhwb3dlcl9pbmRleG9mZnNldDsKIAlpZiAodHhQb3dlciA+IDYzKQogCQl0eFBvd2VyID0gNjM7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDJfcGh5LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAyX3BoeS5jCmluZGV4IGMwMGNkYzYuLjdkNjhkNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDJfcGh5LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwMl9waHkuYwpAQCAtMTc1LDEzICsxNzUsMTUgQEAKIAlpbnQgdXBwZXIsIGxvd2VyLCBjdXJfdml0X21hc2s7CiAJaW50IHRtcCwgbmV3VmFsOwogCWludCBpOwotCWludCBwaWxvdF9tYXNrX3JlZ1s0XSA9IHsgQVJfUEhZX1RJTUlORzcsIEFSX1BIWV9USU1JTkc4LAotCQkJICBBUl9QSFlfUElMT1RfTUFTS18wMV8zMCwgQVJfUEhZX1BJTE9UX01BU0tfMzFfNjAKKwlzdGF0aWMgY29uc3QgaW50IHBpbG90X21hc2tfcmVnWzRdID0geworCQlBUl9QSFlfVElNSU5HNywgQVJfUEhZX1RJTUlORzgsCisJCUFSX1BIWV9QSUxPVF9NQVNLXzAxXzMwLCBBUl9QSFlfUElMT1RfTUFTS18zMV82MAogCX07Ci0JaW50IGNoYW5fbWFza19yZWdbNF0gPSB7IEFSX1BIWV9USU1JTkc5LCBBUl9QSFlfVElNSU5HMTAsCi0JCQkgQVJfUEhZX0NIQU5ORUxfTUFTS18wMV8zMCwgQVJfUEhZX0NIQU5ORUxfTUFTS18zMV82MAorCXN0YXRpYyBjb25zdCBpbnQgY2hhbl9tYXNrX3JlZ1s0XSA9IHsKKwkJQVJfUEhZX1RJTUlORzksIEFSX1BIWV9USU1JTkcxMCwKKwkJQVJfUEhZX0NIQU5ORUxfTUFTS18wMV8zMCwgQVJfUEhZX0NIQU5ORUxfTUFTS18zMV82MAogCX07Ci0JaW50IGluY1s0XSA9IHsgMCwgMTAwLCAwLCAwIH07CisJc3RhdGljIGNvbnN0IGludCBpbmNbNF0gPSB7IDAsIDEwMCwgMCwgMCB9OwogCXN0cnVjdCBjaGFuX2NlbnRlcnMgY2VudGVyczsKIAogCWludDhfdCBtYXNrX21bMTIzXTsKQEAgLTIwMSwxMyArMjAzLDE0IEBACiAJZm9yIChpID0gMDsgaSA8IEFSX0VFUFJPTV9NT0RBTF9TUFVSUzsgaSsrKSB7CiAJCWN1cl9iYl9zcHVyID0gYWgtPmVlcF9vcHMtPmdldF9zcHVyX2NoYW5uZWwoYWgsIGksIGlzMkdIeik7CiAKKwkJaWYgKEFSX05PX1NQVVIgPT0gY3VyX2JiX3NwdXIpCisJCQlicmVhazsKKwogCQlpZiAoaXMyR0h6KQogCQkJY3VyX2JiX3NwdXIgPSAoY3VyX2JiX3NwdXIgLyAxMCkgKyBBUl9CQVNFX0ZSRVFfMkdIWjsKIAkJZWxzZQogCQkJY3VyX2JiX3NwdXIgPSAoY3VyX2JiX3NwdXIgLyAxMCkgKyBBUl9CQVNFX0ZSRVFfNUdIWjsKIAotCQlpZiAoQVJfTk9fU1BVUiA9PSBjdXJfYmJfc3B1cikKLQkJCWJyZWFrOwogCQljdXJfYmJfc3B1ciA9IGN1cl9iYl9zcHVyIC0gZnJlcTsKIAogCQlpZiAoSVNfQ0hBTl9IVDQwKGNoYW4pKSB7CkBAIC00NzMsMjEgKzQ3NiwyMSBAQAogCWludDE2X3QgbmY7CiAKIAluZiA9IE1TKFJFR19SRUFEKGFoLCBBUl9QSFlfQ0NBKSwgQVI5MjgwX1BIWV9NSU5DQ0FfUFdSKTsKLQluZmFycmF5WzBdID0gc2lnbl9leHRlbmQobmYsIDkpOworCW5mYXJyYXlbMF0gPSBzaWduX2V4dGVuZDMyKG5mLCA4KTsKIAogCW5mID0gTVMoUkVHX1JFQUQoYWgsIEFSX1BIWV9FWFRfQ0NBKSwgQVI5MjgwX1BIWV9FWFRfTUlOQ0NBX1BXUik7CiAJaWYgKElTX0NIQU5fSFQ0MChhaC0+Y3VyY2hhbikpCi0JCW5mYXJyYXlbM10gPSBzaWduX2V4dGVuZChuZiwgOSk7CisJCW5mYXJyYXlbM10gPSBzaWduX2V4dGVuZDMyKG5mLCA4KTsKIAogCWlmIChBUl9TUkVWXzkyODUoYWgpIHx8IEFSX1NSRVZfOTI3MShhaCkpCiAJCXJldHVybjsKIAogCW5mID0gTVMoUkVHX1JFQUQoYWgsIEFSX1BIWV9DSDFfQ0NBKSwgQVI5MjgwX1BIWV9DSDFfTUlOQ0NBX1BXUik7Ci0JbmZhcnJheVsxXSA9IHNpZ25fZXh0ZW5kKG5mLCA5KTsKKwluZmFycmF5WzFdID0gc2lnbl9leHRlbmQzMihuZiwgOCk7CiAKIAluZiA9IE1TKFJFR19SRUFEKGFoLCBBUl9QSFlfQ0gxX0VYVF9DQ0EpLCBBUjkyODBfUEhZX0NIMV9FWFRfTUlOQ0NBX1BXUik7CiAJaWYgKElTX0NIQU5fSFQ0MChhaC0+Y3VyY2hhbikpCi0JCW5mYXJyYXlbNF0gPSBzaWduX2V4dGVuZChuZiwgOSk7CisJCW5mYXJyYXlbNF0gPSBzaWduX2V4dGVuZDMyKG5mLCA4KTsKIH0KIAogc3RhdGljIHZvaWQgYXI5MDAyX2h3X3NldF9uZl9saW1pdHMoc3RydWN0IGF0aF9odyAqYWgpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzXzJwMl9pbml0dmFscy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM18ycDJfaW5pdHZhbHMuaAppbmRleCBhMTRhNWU0Li44MWY5Y2YyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzXzJwMl9pbml0dmFscy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfMnAyX2luaXR2YWxzLmgKQEAgLTM0LDkgKzM0LDkgQEAKIAogc3RhdGljIGNvbnN0IHUzMiBhcjkzMDBNb2Rlc19sb3dlc3Rfb2JfZGJfdHhfZ2Fpbl90YWJsZV8ycDJbXVs1XSA9IHsKIAkvKiBBZGRyICAgICAgNUdfSFQyMCAgICAgNUdfSFQ0MCAgICAgMkdfSFQ0MCAgICAgMkdfSFQyMCAgICovCi0JezB4MDAwMGEyZGMsIDB4MDM4MGM3ZmMsIDB4MDM4MGM3ZmMsIDB4MDA2Mzc4MDAsIDB4MDA2Mzc4MDB9LAotCXsweDAwMDBhMmUwLCAweDAwMDBmODAwLCAweDAwMDBmODAwLCAweDAzODM4MDAwLCAweDAzODM4MDAwfSwKLQl7MHgwMDAwYTJlNCwgMHgwM2ZmMDAwMCwgMHgwM2ZmMDAwMCwgMHgwM2ZjMDAwMCwgMHgwM2ZjMDAwMH0sCisJezB4MDAwMGEyZGMsIDB4MDAwMzM4MDAsIDB4MDAwMzM4MDAsIDB4MDA2Mzc4MDAsIDB4MDA2Mzc4MDB9LAorCXsweDAwMDBhMmUwLCAweDAwMDNjMDAwLCAweDAwMDNjMDAwLCAweDAzODM4MDAwLCAweDAzODM4MDAwfSwKKwl7MHgwMDAwYTJlNCwgMHgwM2ZjMDAwMCwgMHgwM2ZjMDAwMCwgMHgwM2ZjMDAwMCwgMHgwM2ZjMDAwMH0sCiAJezB4MDAwMGEyZTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAogCXsweDAwMDBhNDEwLCAweDAwMDA1MGQ5LCAweDAwMDA1MGQ5LCAweDAwMDA1MGQ5LCAweDAwMDA1MGQ5fSwKIAl7MHgwMDAwYTUwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCkBAIC01NiwyMSArNTYsMjEgQEAKIAl7MHgwMDAwYTUzOCwgMHg0NzAyMjQ0YSwgMHg0NzAyMjQ0YSwgMHgzNDAwMGUyNCwgMHgzNDAwMGUyNH0sCiAJezB4MDAwMGE1M2MsIDB4NGIwMjI0NGMsIDB4NGIwMjI0NGMsIDB4MzgwMDE2NDAsIDB4MzgwMDE2NDB9LAogCXsweDAwMDBhNTQwLCAweDRlMDIyNDZjLCAweDRlMDIyNDZjLCAweDNjMDAxNjYwLCAweDNjMDAxNjYwfSwKLQl7MHgwMDAwYTU0NCwgMHg1MzAyMjY2YywgMHg1MzAyMjY2YywgMHgzZjAwMTg2MSwgMHgzZjAwMTg2MX0sCi0JezB4MDAwMGE1NDgsIDB4NTcwMjI4NmMsIDB4NTcwMjI4NmMsIDB4NDMwMDFhODEsIDB4NDMwMDFhODF9LAotCXsweDAwMDBhNTRjLCAweDVjMDI0ODZiLCAweDVjMDI0ODZiLCAweDQ3MDAxYTgzLCAweDQ3MDAxYTgzfSwKLQl7MHgwMDAwYTU1MCwgMHg2MTAyNGE2YywgMHg2MTAyNGE2YywgMHg0YTAwMWM4NCwgMHg0YTAwMWM4NH0sCi0JezB4MDAwMGE1NTQsIDB4NjYwMjZhNmMsIDB4NjYwMjZhNmMsIDB4NGUwMDFjZTMsIDB4NGUwMDFjZTN9LAotCXsweDAwMDBhNTU4LCAweDZiMDI2ZTZjLCAweDZiMDI2ZTZjLCAweDUyMDAxY2U1LCAweDUyMDAxY2U1fSwKLQl7MHgwMDAwYTU1YywgMHg3MDAyNzA4YywgMHg3MDAyNzA4YywgMHg1NjAwMWNlOSwgMHg1NjAwMWNlOX0sCi0JezB4MDAwMGE1NjAsIDB4NzMwMmIwOGEsIDB4NzMwMmIwOGEsIDB4NWEwMDFjZWIsIDB4NWEwMDFjZWJ9LAotCXsweDAwMDBhNTY0LCAweDc3MDJiMDhjLCAweDc3MDJiMDhjLCAweDVkMDAxZWVjLCAweDVkMDAxZWVjfSwKLQl7MHgwMDAwYTU2OCwgMHg3NzAyYjA4YywgMHg3NzAyYjA4YywgMHg1ZDAwMWVlYywgMHg1ZDAwMWVlY30sCi0JezB4MDAwMGE1NmMsIDB4NzcwMmIwOGMsIDB4NzcwMmIwOGMsIDB4NWQwMDFlZWMsIDB4NWQwMDFlZWN9LAotCXsweDAwMDBhNTcwLCAweDc3MDJiMDhjLCAweDc3MDJiMDhjLCAweDVkMDAxZWVjLCAweDVkMDAxZWVjfSwKLQl7MHgwMDAwYTU3NCwgMHg3NzAyYjA4YywgMHg3NzAyYjA4YywgMHg1ZDAwMWVlYywgMHg1ZDAwMWVlY30sCi0JezB4MDAwMGE1NzgsIDB4NzcwMmIwOGMsIDB4NzcwMmIwOGMsIDB4NWQwMDFlZWMsIDB4NWQwMDFlZWN9LAotCXsweDAwMDBhNTdjLCAweDc3MDJiMDhjLCAweDc3MDJiMDhjLCAweDVkMDAxZWVjLCAweDVkMDAxZWVjfSwKKwl7MHgwMDAwYTU0NCwgMHg1MjAyMjQ3MCwgMHg1MjAyMjQ3MCwgMHgzZjAwMTg2MSwgMHgzZjAwMTg2MX0sCisJezB4MDAwMGE1NDgsIDB4NTUwMjI0OTAsIDB4NTUwMjI0OTAsIDB4NDMwMDFhODEsIDB4NDMwMDFhODF9LAorCXsweDAwMDBhNTRjLCAweDU5MDIyNDkyLCAweDU5MDIyNDkyLCAweDQ3MDAxYTgzLCAweDQ3MDAxYTgzfSwKKwl7MHgwMDAwYTU1MCwgMHg1ZDAyMjY5MiwgMHg1ZDAyMjY5MiwgMHg0YTAwMWM4NCwgMHg0YTAwMWM4NH0sCisJezB4MDAwMGE1NTQsIDB4NjEwMjI4OTIsIDB4NjEwMjI4OTIsIDB4NGUwMDFjZTMsIDB4NGUwMDFjZTN9LAorCXsweDAwMDBhNTU4LCAweDY1MDI0ODkwLCAweDY1MDI0ODkwLCAweDUyMDAxY2U1LCAweDUyMDAxY2U1fSwKKwl7MHgwMDAwYTU1YywgMHg2OTAyNDg5MiwgMHg2OTAyNDg5MiwgMHg1NjAwMWNlOSwgMHg1NjAwMWNlOX0sCisJezB4MDAwMGE1NjAsIDB4NmUwMjRjOTIsIDB4NmUwMjRjOTIsIDB4NWEwMDFjZWIsIDB4NWEwMDFjZWJ9LAorCXsweDAwMDBhNTY0LCAweDc0MDI2ZTkyLCAweDc0MDI2ZTkyLCAweDVkMDAxZWVjLCAweDVkMDAxZWVjfSwKKwl7MHgwMDAwYTU2OCwgMHg3NDAyNmU5MiwgMHg3NDAyNmU5MiwgMHg1ZDAwMWVlYywgMHg1ZDAwMWVlY30sCisJezB4MDAwMGE1NmMsIDB4NzQwMjZlOTIsIDB4NzQwMjZlOTIsIDB4NWQwMDFlZWMsIDB4NWQwMDFlZWN9LAorCXsweDAwMDBhNTcwLCAweDc0MDI2ZTkyLCAweDc0MDI2ZTkyLCAweDVkMDAxZWVjLCAweDVkMDAxZWVjfSwKKwl7MHgwMDAwYTU3NCwgMHg3NDAyNmU5MiwgMHg3NDAyNmU5MiwgMHg1ZDAwMWVlYywgMHg1ZDAwMWVlY30sCisJezB4MDAwMGE1NzgsIDB4NzQwMjZlOTIsIDB4NzQwMjZlOTIsIDB4NWQwMDFlZWMsIDB4NWQwMDFlZWN9LAorCXsweDAwMDBhNTdjLCAweDc0MDI2ZTkyLCAweDc0MDI2ZTkyLCAweDVkMDAxZWVjLCAweDVkMDAxZWVjfSwKIAl7MHgwMDAwYTU4MCwgMHgwMDgwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDgwMDAwMH0sCiAJezB4MDAwMGE1ODQsIDB4MDY4MDAwMDMsIDB4MDY4MDAwMDMsIDB4MDQ4MDAwMDIsIDB4MDQ4MDAwMDJ9LAogCXsweDAwMDBhNTg4LCAweDBhODAwMDIwLCAweDBhODAwMDIwLCAweDA4ODAwMDA0LCAweDA4ODAwMDA0fSwKQEAgLTg4LDQ0ICs4OCw0NCBAQAogCXsweDAwMDBhNWI4LCAweDQ3ODIyNDRhLCAweDQ3ODIyNDRhLCAweDM0ODAwZTI0LCAweDM0ODAwZTI0fSwKIAl7MHgwMDAwYTViYywgMHg0YjgyMjQ0YywgMHg0YjgyMjQ0YywgMHgzODgwMTY0MCwgMHgzODgwMTY0MH0sCiAJezB4MDAwMGE1YzAsIDB4NGU4MjI0NmMsIDB4NGU4MjI0NmMsIDB4M2M4MDE2NjAsIDB4M2M4MDE2NjB9LAotCXsweDAwMDBhNWM0LCAweDUzODIyNjZjLCAweDUzODIyNjZjLCAweDNmODAxODYxLCAweDNmODAxODYxfSwKLQl7MHgwMDAwYTVjOCwgMHg1NzgyMjg2YywgMHg1NzgyMjg2YywgMHg0MzgwMWE4MSwgMHg0MzgwMWE4MX0sCi0JezB4MDAwMGE1Y2MsIDB4NWM4MjQ4NmIsIDB4NWM4MjQ4NmIsIDB4NDc4MDFhODMsIDB4NDc4MDFhODN9LAotCXsweDAwMDBhNWQwLCAweDYxODI0YTZjLCAweDYxODI0YTZjLCAweDRhODAxYzg0LCAweDRhODAxYzg0fSwKLQl7MHgwMDAwYTVkNCwgMHg2NjgyNmE2YywgMHg2NjgyNmE2YywgMHg0ZTgwMWNlMywgMHg0ZTgwMWNlM30sCi0JezB4MDAwMGE1ZDgsIDB4NmI4MjZlNmMsIDB4NmI4MjZlNmMsIDB4NTI4MDFjZTUsIDB4NTI4MDFjZTV9LAotCXsweDAwMDBhNWRjLCAweDcwODI3MDhjLCAweDcwODI3MDhjLCAweDU2ODAxY2U5LCAweDU2ODAxY2U5fSwKLQl7MHgwMDAwYTVlMCwgMHg3MzgyYjA4YSwgMHg3MzgyYjA4YSwgMHg1YTgwMWNlYiwgMHg1YTgwMWNlYn0sCi0JezB4MDAwMGE1ZTQsIDB4Nzc4MmIwOGMsIDB4Nzc4MmIwOGMsIDB4NWQ4MDFlZWMsIDB4NWQ4MDFlZWN9LAotCXsweDAwMDBhNWU4LCAweDc3ODJiMDhjLCAweDc3ODJiMDhjLCAweDVkODAxZWVjLCAweDVkODAxZWVjfSwKLQl7MHgwMDAwYTVlYywgMHg3NzgyYjA4YywgMHg3NzgyYjA4YywgMHg1ZDgwMWVlYywgMHg1ZDgwMWVlY30sCi0JezB4MDAwMGE1ZjAsIDB4Nzc4MmIwOGMsIDB4Nzc4MmIwOGMsIDB4NWQ4MDFlZWMsIDB4NWQ4MDFlZWN9LAotCXsweDAwMDBhNWY0LCAweDc3ODJiMDhjLCAweDc3ODJiMDhjLCAweDVkODAxZWVjLCAweDVkODAxZWVjfSwKLQl7MHgwMDAwYTVmOCwgMHg3NzgyYjA4YywgMHg3NzgyYjA4YywgMHg1ZDgwMWVlYywgMHg1ZDgwMWVlY30sCi0JezB4MDAwMGE1ZmMsIDB4Nzc4MmIwOGMsIDB4Nzc4MmIwOGMsIDB4NWQ4MDFlZWMsIDB4NWQ4MDFlZWN9LAorCXsweDAwMDBhNWM0LCAweDUyODIyNDcwLCAweDUyODIyNDcwLCAweDNmODAxODYxLCAweDNmODAxODYxfSwKKwl7MHgwMDAwYTVjOCwgMHg1NTgyMjQ5MCwgMHg1NTgyMjQ5MCwgMHg0MzgwMWE4MSwgMHg0MzgwMWE4MX0sCisJezB4MDAwMGE1Y2MsIDB4NTk4MjI0OTIsIDB4NTk4MjI0OTIsIDB4NDc4MDFhODMsIDB4NDc4MDFhODN9LAorCXsweDAwMDBhNWQwLCAweDVkODIyNjkyLCAweDVkODIyNjkyLCAweDRhODAxYzg0LCAweDRhODAxYzg0fSwKKwl7MHgwMDAwYTVkNCwgMHg2MTgyMjg5MiwgMHg2MTgyMjg5MiwgMHg0ZTgwMWNlMywgMHg0ZTgwMWNlM30sCisJezB4MDAwMGE1ZDgsIDB4NjU4MjQ4OTAsIDB4NjU4MjQ4OTAsIDB4NTI4MDFjZTUsIDB4NTI4MDFjZTV9LAorCXsweDAwMDBhNWRjLCAweDY5ODI0ODkyLCAweDY5ODI0ODkyLCAweDU2ODAxY2U5LCAweDU2ODAxY2U5fSwKKwl7MHgwMDAwYTVlMCwgMHg2ZTgyNGM5MiwgMHg2ZTgyNGM5MiwgMHg1YTgwMWNlYiwgMHg1YTgwMWNlYn0sCisJezB4MDAwMGE1ZTQsIDB4NzQ4MjZlOTIsIDB4NzQ4MjZlOTIsIDB4NWQ4MDFlZWMsIDB4NWQ4MDFlZWN9LAorCXsweDAwMDBhNWU4LCAweDc0ODI2ZTkyLCAweDc0ODI2ZTkyLCAweDVkODAxZWVjLCAweDVkODAxZWVjfSwKKwl7MHgwMDAwYTVlYywgMHg3NDgyNmU5MiwgMHg3NDgyNmU5MiwgMHg1ZDgwMWVlYywgMHg1ZDgwMWVlY30sCisJezB4MDAwMGE1ZjAsIDB4NzQ4MjZlOTIsIDB4NzQ4MjZlOTIsIDB4NWQ4MDFlZWMsIDB4NWQ4MDFlZWN9LAorCXsweDAwMDBhNWY0LCAweDc0ODI2ZTkyLCAweDc0ODI2ZTkyLCAweDVkODAxZWVjLCAweDVkODAxZWVjfSwKKwl7MHgwMDAwYTVmOCwgMHg3NDgyNmU5MiwgMHg3NDgyNmU5MiwgMHg1ZDgwMWVlYywgMHg1ZDgwMWVlY30sCisJezB4MDAwMGE1ZmMsIDB4NzQ4MjZlOTIsIDB4NzQ4MjZlOTIsIDB4NWQ4MDFlZWMsIDB4NWQ4MDFlZWN9LAogCXsweDAwMDBhNjAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKIAl7MHgwMDAwYTYwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCiAJezB4MDAwMGE2MDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAogCXsweDAwMDBhNjBjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKIAl7MHgwMDAwYTYxMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGE2MTQsIDB4MDE0MDQwMDAsIDB4MDE0MDQwMDAsIDB4MDE0MDQwMDAsIDB4MDE0MDQwMDB9LAotCXsweDAwMDBhNjE4LCAweDAxNDA0NTAxLCAweDAxNDA0NTAxLCAweDAxNDA0NTAxLCAweDAxNDA0NTAxfSwKLQl7MHgwMDAwYTYxYywgMHgwMjAwODgwMiwgMHgwMjAwODgwMiwgMHgwMjAwODUwMSwgMHgwMjAwODUwMX0sCi0JezB4MDAwMGE2MjAsIDB4MDMwMGNjMDMsIDB4MDMwMGNjMDMsIDB4MDI4MGNhMDMsIDB4MDI4MGNhMDN9LAotCXsweDAwMDBhNjI0LCAweDAzMDBjYzAzLCAweDAzMDBjYzAzLCAweDAzMDEwYzA0LCAweDAzMDEwYzA0fSwKLQl7MHgwMDAwYTYyOCwgMHgwMzAwY2MwMywgMHgwMzAwY2MwMywgMHgwNDAxNGMwNCwgMHgwNDAxNGMwNH0sCi0JezB4MDAwMGE2MmMsIDB4MDM4MTBjMDMsIDB4MDM4MTBjMDMsIDB4MDQwMTUwMDUsIDB4MDQwMTUwMDV9LAotCXsweDAwMDBhNjMwLCAweDAzODEwZTA0LCAweDAzODEwZTA0LCAweDA0MDE1MDA1LCAweDA0MDE1MDA1fSwKLQl7MHgwMDAwYTYzNCwgMHgwMzgxMGUwNCwgMHgwMzgxMGUwNCwgMHgwNDAxNTAwNSwgMHgwNDAxNTAwNX0sCi0JezB4MDAwMGE2MzgsIDB4MDM4MTBlMDQsIDB4MDM4MTBlMDQsIDB4MDQwMTUwMDUsIDB4MDQwMTUwMDV9LAotCXsweDAwMDBhNjNjLCAweDAzODEwZTA0LCAweDAzODEwZTA0LCAweDA0MDE1MDA1LCAweDA0MDE1MDA1fSwKLQl7MHgwMDAwYjJkYywgMHgwMzgwYzdmYywgMHgwMzgwYzdmYywgMHgwMDYzNzgwMCwgMHgwMDYzNzgwMH0sCi0JezB4MDAwMGIyZTAsIDB4MDAwMGY4MDAsIDB4MDAwMGY4MDAsIDB4MDM4MzgwMDAsIDB4MDM4MzgwMDB9LAotCXsweDAwMDBiMmU0LCAweDAzZmYwMDAwLCAweDAzZmYwMDAwLCAweDAzZmMwMDAwLCAweDAzZmMwMDAwfSwKKwl7MHgwMDAwYTYxNCwgMHgwMjAwNDAwMCwgMHgwMjAwNDAwMCwgMHgwMTQwNDAwMCwgMHgwMTQwNDAwMH0sCisJezB4MDAwMGE2MTgsIDB4MDIwMDQ4MDEsIDB4MDIwMDQ4MDEsIDB4MDE0MDQ1MDEsIDB4MDE0MDQ1MDF9LAorCXsweDAwMDBhNjFjLCAweDAyODA4YTAyLCAweDAyODA4YTAyLCAweDAyMDA4NTAxLCAweDAyMDA4NTAxfSwKKwl7MHgwMDAwYTYyMCwgMHgwMzgwY2UwMywgMHgwMzgwY2UwMywgMHgwMjgwY2EwMywgMHgwMjgwY2EwM30sCisJezB4MDAwMGE2MjQsIDB4MDQ0MTExMDQsIDB4MDQ0MTExMDQsIDB4MDMwMTBjMDQsIDB4MDMwMTBjMDR9LAorCXsweDAwMDBhNjI4LCAweDA0NDExMTA0LCAweDA0NDExMTA0LCAweDA0MDE0YzA0LCAweDA0MDE0YzA0fSwKKwl7MHgwMDAwYTYyYywgMHgwNDQxMTEwNCwgMHgwNDQxMTEwNCwgMHgwNDAxNTAwNSwgMHgwNDAxNTAwNX0sCisJezB4MDAwMGE2MzAsIDB4MDQ0MTExMDQsIDB4MDQ0MTExMDQsIDB4MDQwMTUwMDUsIDB4MDQwMTUwMDV9LAorCXsweDAwMDBhNjM0LCAweDA0NDExMTA0LCAweDA0NDExMTA0LCAweDA0MDE1MDA1LCAweDA0MDE1MDA1fSwKKwl7MHgwMDAwYTYzOCwgMHgwNDQxMTEwNCwgMHgwNDQxMTEwNCwgMHgwNDAxNTAwNSwgMHgwNDAxNTAwNX0sCisJezB4MDAwMGE2M2MsIDB4MDQ0MTExMDQsIDB4MDQ0MTExMDQsIDB4MDQwMTUwMDUsIDB4MDQwMTUwMDV9LAorCXsweDAwMDBiMmRjLCAweDAwMDMzODAwLCAweDAwMDMzODAwLCAweDAwNjM3ODAwLCAweDAwNjM3ODAwfSwKKwl7MHgwMDAwYjJlMCwgMHgwMDAzYzAwMCwgMHgwMDAzYzAwMCwgMHgwMzgzODAwMCwgMHgwMzgzODAwMH0sCisJezB4MDAwMGIyZTQsIDB4MDNmYzAwMDAsIDB4MDNmYzAwMDAsIDB4MDNmYzAwMDAsIDB4MDNmYzAwMDB9LAogCXsweDAwMDBiMmU4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYzJkYywgMHgwMzgwYzdmYywgMHgwMzgwYzdmYywgMHgwMDYzNzgwMCwgMHgwMDYzNzgwMH0sCi0JezB4MDAwMGMyZTAsIDB4MDAwMGY4MDAsIDB4MDAwMGY4MDAsIDB4MDM4MzgwMDAsIDB4MDM4MzgwMDB9LAotCXsweDAwMDBjMmU0LCAweDAzZmYwMDAwLCAweDAzZmYwMDAwLCAweDAzZmMwMDAwLCAweDAzZmMwMDAwfSwKKwl7MHgwMDAwYzJkYywgMHgwMDAzMzgwMCwgMHgwMDAzMzgwMCwgMHgwMDYzNzgwMCwgMHgwMDYzNzgwMH0sCisJezB4MDAwMGMyZTAsIDB4MDAwM2MwMDAsIDB4MDAwM2MwMDAsIDB4MDM4MzgwMDAsIDB4MDM4MzgwMDB9LAorCXsweDAwMDBjMmU0LCAweDAzZmMwMDAwLCAweDAzZmMwMDAwLCAweDAzZmMwMDAwLCAweDAzZmMwMDAwfSwKIAl7MHgwMDAwYzJlOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCiAJezB4MDAwMTYwNDQsIDB4MDEyNDkyZDQsIDB4MDEyNDkyZDQsIDB4MDEyNDkyZDQsIDB4MDEyNDkyZDR9LAogCXsweDAwMDE2MDQ4LCAweDYyNDgwMDAxLCAweDYyNDgwMDAxLCAweDYyNDgwMDAxLCAweDYyNDgwMDAxfSwKQEAgLTYzOCw2ICs2MzgsNyBAQAogCXsweDAwMDA5ZmM4LCAweDAwMDNmMDAwLCAweDAwMDNmMDAwLCAweDAwMDFhMDAwLCAweDAwMDFhMDAwfSwKIAl7MHgwMDAwYTIwNCwgMHgwMDAwMzdjMCwgMHgwMDAwMzdjNCwgMHgwMDAwMzdjNCwgMHgwMDAwMzdjMH0sCiAJezB4MDAwMGEyMDgsIDB4MDAwMDAxMDQsIDB4MDAwMDAxMDQsIDB4MDAwMDAwMDQsIDB4MDAwMDAwMDR9LAorCXsweDAwMDBhMjJjLCAweDAxMDI2YTJmLCAweDAxMDI2YTJmLCAweDAxMDI2YTJmLCAweDAxMDI2YTJmfSwKIAl7MHgwMDAwYTIzMCwgMHgwMDAwMDAwYSwgMHgwMDAwMDAxNCwgMHgwMDAwMDAxNiwgMHgwMDAwMDAwYn0sCiAJezB4MDAwMGEyMzQsIDB4MDAwMDBmZmYsIDB4MTAwMDBmZmYsIDB4MTAwMDBmZmYsIDB4MDAwMDBmZmZ9LAogCXsweDAwMDBhMjM4LCAweGZmYjgxMDE4LCAweGZmYjgxMDE4LCAweGZmYjgxMDE4LCAweGZmYjgxMDE4fSwKQEAgLTY4MCw3ICs2ODEsNyBAQAogCXsweDAwMDA5ODFjLCAweDAwMDIwMDI4fSwKIAl7MHgwMDAwOTgzNCwgMHg2NDAwYTI5MH0sCiAJezB4MDAwMDk4MzgsIDB4MDEwOGVjZmZ9LAotCXsweDAwMDA5ODNjLCAweDE0NzUwNjAwfSwKKwl7MHgwMDAwOTgzYywgMHgwZDAwMDYwMH0sCiAJezB4MDAwMDk4ODAsIDB4MjAxZmZmMDB9LAogCXsweDAwMDA5ODg0LCAweDAwMDAxMDQyfSwKIAl7MHgwMDAwOThhNCwgMHgwMDIwMDQwMH0sCkBAIC03MjIsNyArNzIzLDYgQEAKIAl7MHgwMDAwYTIyMCwgMHgwMDAwMDAwMH0sCiAJezB4MDAwMGEyMjQsIDB4MDAwMDAwMDB9LAogCXsweDAwMDBhMjI4LCAweDEwMDAyMzEwfSwKLQl7MHgwMDAwYTIyYywgMHgwMTAzNmEyN30sCiAJezB4MDAwMGEyM2MsIDB4MDAwMDAwMDB9LAogCXsweDAwMDBhMjQ0LCAweDBjMDAwMDAwfSwKIAl7MHgwMDAwYTJhMCwgMHgwMDAwMDAwMX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX2NhbGliLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX2NhbGliLmMKaW5kZXggOWU2ZWRmZi4uNGE0Y2Q4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19jYWxpYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfY2FsaWIuYwpAQCAtMTgsNiArMTgsMTYgQEAKICNpbmNsdWRlICJody1vcHMuaCIKICNpbmNsdWRlICJhcjkwMDNfcGh5LmgiCiAKKyNkZWZpbmUgTVBBU1MJMworI2RlZmluZSBNQVhfTUVBU1VSRU1FTlQJOAorI2RlZmluZSBNQVhfRElGRkVSRU5DRQkxMAorCitzdHJ1Y3QgY29lZmYgeworCWludCBtYWdfY29lZmZbQVI5MzAwX01BWF9DSEFJTlNdW01BWF9NRUFTVVJFTUVOVF1bTVBBU1NdOworCWludCBwaHNfY29lZmZbQVI5MzAwX01BWF9DSEFJTlNdW01BWF9NRUFTVVJFTUVOVF1bTVBBU1NdOworCWludCBpcWNfY29lZmZbMl07Cit9OworCiBlbnVtIGFyOTAwM19jYWxfdHlwZXMgewogCUlRX01JU01BVENIX0NBTCA9IEJJVCgwKSwKIAlURU1QX0NPTVBfQ0FMID0gQklUKDEpLApAQCAtNDAsOCArNTAsOCBAQAogCQljdXJyQ2FsLT5jYWxEYXRhLT5jYWxDb3VudE1heCk7CiAJCVJFR19XUklURShhaCwgQVJfUEhZX0NBTE1PREUsIEFSX1BIWV9DQUxNT0RFX0lRKTsKIAotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwKLQkJCSAgInN0YXJ0aW5nIElRIE1pc21hdGNoIENhbGlicmF0aW9uXG4iKTsKKwkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAorCQkJInN0YXJ0aW5nIElRIE1pc21hdGNoIENhbGlicmF0aW9uXG4iKTsKIAogCQkvKiBLaWNrLW9mZiBjYWwgKi8KIAkJUkVHX1NFVF9CSVQoYWgsIEFSX1BIWV9USU1JTkc0LCBBUl9QSFlfVElNSU5HNF9ET19DQUwpOwpAQCAtNTIsOCArNjIsOCBAQAogCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfNjVOTV9DSDBfVEhFUk0sCiAJCQkgICAgICBBUl9QSFlfNjVOTV9DSDBfVEhFUk1fU1RBUlQsIDEpOwogCi0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAotCQkJICAic3RhcnRpbmcgVGVtcGVyYXR1cmUgQ29tcGVuc2F0aW9uIENhbGlicmF0aW9uXG4iKTsKKwkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAorCQkJInN0YXJ0aW5nIFRlbXBlcmF0dXJlIENvbXBlbnNhdGlvbiBDYWxpYnJhdGlvblxuIik7CiAJCWJyZWFrOwogCX0KIH0KQEAgLTE4MSwxMSArMTkxLDExIEBACiAJCQlSRUdfUkVBRChhaCwgQVJfUEhZX0NBTF9NRUFTXzEoaSkpOwogCQlhaC0+dG90YWxJcUNvcnJNZWFzW2ldICs9CiAJCQkoaW50MzJfdCkgUkVHX1JFQUQoYWgsIEFSX1BIWV9DQUxfTUVBU18yKGkpKTsKLQkJYXRoX3ByaW50KGF0aDlrX2h3X2NvbW1vbihhaCksIEFUSF9EQkdfQ0FMSUJSQVRFLAotCQkJICAiJWQ6IENobiAlZCBwbWk9MHglMDh4O3BtcT0weCUwOHg7aXFjbT0weCUwOHg7XG4iLAotCQkJICBhaC0+Y2FsX3NhbXBsZXMsIGksIGFoLT50b3RhbFBvd2VyTWVhc0lbaV0sCi0JCQkgIGFoLT50b3RhbFBvd2VyTWVhc1FbaV0sCi0JCQkgIGFoLT50b3RhbElxQ29yck1lYXNbaV0pOworCQlhdGhfZGJnKGF0aDlrX2h3X2NvbW1vbihhaCksIEFUSF9EQkdfQ0FMSUJSQVRFLAorCQkJIiVkOiBDaG4gJWQgcG1pPTB4JTA4eDtwbXE9MHglMDh4O2lxY209MHglMDh4O1xuIiwKKwkJCWFoLT5jYWxfc2FtcGxlcywgaSwgYWgtPnRvdGFsUG93ZXJNZWFzSVtpXSwKKwkJCWFoLT50b3RhbFBvd2VyTWVhc1FbaV0sCisJCQlhaC0+dG90YWxJcUNvcnJNZWFzW2ldKTsKIAl9CiB9CiAKQEAgLTE5Niw3ICsyMDYsNyBAQAogCXUzMiBxQ29mZkRlbm9tLCBpQ29mZkRlbm9tOwogCWludDMyX3QgcUNvZmYsIGlDb2ZmOwogCWludCBpcUNvcnJOZWcsIGk7Ci0JY29uc3QgdV9pbnQzMl90IG9mZnNldF9hcnJheVszXSA9IHsKKwlzdGF0aWMgY29uc3QgdV9pbnQzMl90IG9mZnNldF9hcnJheVszXSA9IHsKIAkJQVJfUEhZX1JYX0lRQ0FMX0NPUlJfQjAsCiAJCUFSX1BIWV9SWF9JUUNBTF9DT1JSX0IxLAogCQlBUl9QSFlfUlhfSVFDQUxfQ09SUl9CMiwKQEAgLTIwNywxMyArMjE3LDEzIEBACiAJCXBvd2VyTWVhc1EgPSBhaC0+dG90YWxQb3dlck1lYXNRW2ldOwogCQlpcUNvcnJNZWFzID0gYWgtPnRvdGFsSXFDb3JyTWVhc1tpXTsKIAotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwKLQkJCSAgIlN0YXJ0aW5nIElRIENhbCBhbmQgQ29ycmVjdGlvbiBmb3IgQ2hhaW4gJWRcbiIsCi0JCQkgIGkpOworCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCisJCQkiU3RhcnRpbmcgSVEgQ2FsIGFuZCBDb3JyZWN0aW9uIGZvciBDaGFpbiAlZFxuIiwKKwkJCWkpOwogCi0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAotCQkJICAiT3JpZ25hbDogQ2huICVkaXFfY29ycl9tZWFzID0gMHglMDh4XG4iLAotCQkJICBpLCBhaC0+dG90YWxJcUNvcnJNZWFzW2ldKTsKKwkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAorCQkJIk9yaWduYWw6IENobiAlZGlxX2NvcnJfbWVhcyA9IDB4JTA4eFxuIiwKKwkJCWksIGFoLT50b3RhbElxQ29yck1lYXNbaV0pOwogCiAJCWlxQ29yck5lZyA9IDA7CiAKQEAgLTIyMiwxMiArMjMyLDEyIEBACiAJCQlpcUNvcnJOZWcgPSAxOwogCQl9CiAKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCi0JCQkgICJDaG4gJWQgcHdyX21lYXNfaSA9IDB4JTA4eFxuIiwgaSwgcG93ZXJNZWFzSSk7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAotCQkJICAiQ2huICVkIHB3cl9tZWFzX3EgPSAweCUwOHhcbiIsIGksIHBvd2VyTWVhc1EpOwotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwgImlxQ29yck5lZyBpcyAweCUwOHhcbiIsCi0JCQkgIGlxQ29yck5lZyk7CisJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwKKwkJCSJDaG4gJWQgcHdyX21lYXNfaSA9IDB4JTA4eFxuIiwgaSwgcG93ZXJNZWFzSSk7CisJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwKKwkJCSJDaG4gJWQgcHdyX21lYXNfcSA9IDB4JTA4eFxuIiwgaSwgcG93ZXJNZWFzUSk7CisJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwgImlxQ29yck5lZyBpcyAweCUwOHhcbiIsCisJCQlpcUNvcnJOZWcpOwogCiAJCWlDb2ZmRGVub20gPSAocG93ZXJNZWFzSSAvIDIgKyBwb3dlck1lYXNRIC8gMikgLyAyNTY7CiAJCXFDb2ZmRGVub20gPSBwb3dlck1lYXNRIC8gNjQ7CkBAIC0yMzUsMTAgKzI0NSwxMCBAQAogCQlpZiAoKGlDb2ZmRGVub20gIT0gMCkgJiYgKHFDb2ZmRGVub20gIT0gMCkpIHsKIAkJCWlDb2ZmID0gaXFDb3JyTWVhcyAvIGlDb2ZmRGVub207CiAJCQlxQ29mZiA9IHBvd2VyTWVhc0kgLyBxQ29mZkRlbm9tIC0gNjQ7Ci0JCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwKLQkJCQkgICJDaG4gJWQgaUNvZmYgPSAweCUwOHhcbiIsIGksIGlDb2ZmKTsKLQkJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAotCQkJCSAgIkNobiAlZCBxQ29mZiA9IDB4JTA4eFxuIiwgaSwgcUNvZmYpOworCQkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAorCQkJCSJDaG4gJWQgaUNvZmYgPSAweCUwOHhcbiIsIGksIGlDb2ZmKTsKKwkJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwKKwkJCQkiQ2huICVkIHFDb2ZmID0gMHglMDh4XG4iLCBpLCBxQ29mZik7CiAKIAkJCS8qIEZvcmNlIGJvdW5kcyBvbiBpQ29mZiAqLwogCQkJaWYgKGlDb2ZmID49IDYzKQpAQCAtMjU5LDE0ICsyNjksMTMgQEAKIAkJCWlDb2ZmID0gaUNvZmYgJiAweDdmOwogCQkJcUNvZmYgPSBxQ29mZiAmIDB4N2Y7CiAKLQkJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAotCQkJCSAgIkNobiAlZCA6IGlDb2ZmID0gMHgleCAgcUNvZmYgPSAweCV4XG4iLAotCQkJCSAgaSwgaUNvZmYsIHFDb2ZmKTsKLQkJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAotCQkJCSAgIlJlZ2lzdGVyIG9mZnNldCAoMHglMDR4KSAiCi0JCQkJICAiYmVmb3JlIHVwZGF0ZSA9IDB4JXhcbiIsCi0JCQkJICBvZmZzZXRfYXJyYXlbaV0sCi0JCQkJICBSRUdfUkVBRChhaCwgb2Zmc2V0X2FycmF5W2ldKSk7CisJCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCisJCQkJIkNobiAlZCA6IGlDb2ZmID0gMHgleCAgcUNvZmYgPSAweCV4XG4iLAorCQkJCWksIGlDb2ZmLCBxQ29mZik7CisJCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCisJCQkJIlJlZ2lzdGVyIG9mZnNldCAoMHglMDR4KSBiZWZvcmUgdXBkYXRlID0gMHgleFxuIiwKKwkJCQlvZmZzZXRfYXJyYXlbaV0sCisJCQkJUkVHX1JFQUQoYWgsIG9mZnNldF9hcnJheVtpXSkpOwogCiAJCQlSRUdfUk1XX0ZJRUxEKGFoLCBvZmZzZXRfYXJyYXlbaV0sCiAJCQkJICAgICAgQVJfUEhZX1JYX0lRQ0FMX0NPUlJfSVFDT1JSX1FfSV9DT0ZGLApAQCAtMjc0LDMzICsyODMsMjkgQEAKIAkJCVJFR19STVdfRklFTEQoYWgsIG9mZnNldF9hcnJheVtpXSwKIAkJCQkgICAgICBBUl9QSFlfUlhfSVFDQUxfQ09SUl9JUUNPUlJfUV9RX0NPRkYsCiAJCQkJICAgICAgcUNvZmYpOwotCQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCi0JCQkJICAiUmVnaXN0ZXIgb2Zmc2V0ICgweCUwNHgpIFFJIENPRkYgIgotCQkJCSAgIihiaXRmaWVsZHMgMHglMDh4KSBhZnRlciB1cGRhdGUgPSAweCV4XG4iLAotCQkJCSAgb2Zmc2V0X2FycmF5W2ldLAotCQkJCSAgQVJfUEhZX1JYX0lRQ0FMX0NPUlJfSVFDT1JSX1FfSV9DT0ZGLAotCQkJCSAgUkVHX1JFQUQoYWgsIG9mZnNldF9hcnJheVtpXSkpOwotCQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCi0JCQkJICAiUmVnaXN0ZXIgb2Zmc2V0ICgweCUwNHgpIFFRIENPRkYgIgotCQkJCSAgIihiaXRmaWVsZHMgMHglMDh4KSBhZnRlciB1cGRhdGUgPSAweCV4XG4iLAotCQkJCSAgb2Zmc2V0X2FycmF5W2ldLAotCQkJCSAgQVJfUEhZX1JYX0lRQ0FMX0NPUlJfSVFDT1JSX1FfUV9DT0ZGLAotCQkJCSAgUkVHX1JFQUQoYWgsIG9mZnNldF9hcnJheVtpXSkpOworCQkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAorCQkJCSJSZWdpc3RlciBvZmZzZXQgKDB4JTA0eCkgUUkgQ09GRiAoYml0ZmllbGRzIDB4JTA4eCkgYWZ0ZXIgdXBkYXRlID0gMHgleFxuIiwKKwkJCQlvZmZzZXRfYXJyYXlbaV0sCisJCQkJQVJfUEhZX1JYX0lRQ0FMX0NPUlJfSVFDT1JSX1FfSV9DT0ZGLAorCQkJCVJFR19SRUFEKGFoLCBvZmZzZXRfYXJyYXlbaV0pKTsKKwkJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwKKwkJCQkiUmVnaXN0ZXIgb2Zmc2V0ICgweCUwNHgpIFFRIENPRkYgKGJpdGZpZWxkcyAweCUwOHgpIGFmdGVyIHVwZGF0ZSA9IDB4JXhcbiIsCisJCQkJb2Zmc2V0X2FycmF5W2ldLAorCQkJCUFSX1BIWV9SWF9JUUNBTF9DT1JSX0lRQ09SUl9RX1FfQ09GRiwKKwkJCQlSRUdfUkVBRChhaCwgb2Zmc2V0X2FycmF5W2ldKSk7CiAKLQkJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAotCQkJCSAgIklRIENhbCBhbmQgQ29ycmVjdGlvbiBkb25lIGZvciBDaGFpbiAlZFxuIiwKLQkJCQkgIGkpOworCQkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAorCQkJCSJJUSBDYWwgYW5kIENvcnJlY3Rpb24gZG9uZSBmb3IgQ2hhaW4gJWRcbiIsIGkpOwogCQl9CiAJfQogCiAJUkVHX1NFVF9CSVQoYWgsIEFSX1BIWV9SWF9JUUNBTF9DT1JSX0IwLAogCQkgICAgQVJfUEhZX1JYX0lRQ0FMX0NPUlJfSVFDT1JSX0VOQUJMRSk7Ci0JYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCi0JCSAgIklRIENhbCBhbmQgQ29ycmVjdGlvbiAob2Zmc2V0IDB4JTA0eCkgZW5hYmxlZCAiCi0JCSAgIihiaXQgcG9zaXRpb24gMHglMDh4KS4gTmV3IFZhbHVlIDB4JTA4eFxuIiwKLQkJICAodW5zaWduZWQpIChBUl9QSFlfUlhfSVFDQUxfQ09SUl9CMCksCi0JCSAgQVJfUEhZX1JYX0lRQ0FMX0NPUlJfSVFDT1JSX0VOQUJMRSwKLQkJICBSRUdfUkVBRChhaCwgQVJfUEhZX1JYX0lRQ0FMX0NPUlJfQjApKTsKKwlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCisJCSJJUSBDYWwgYW5kIENvcnJlY3Rpb24gKG9mZnNldCAweCUwNHgpIGVuYWJsZWQgKGJpdCBwb3NpdGlvbiAweCUwOHgpLiBOZXcgVmFsdWUgMHglMDh4XG4iLAorCQkodW5zaWduZWQpIChBUl9QSFlfUlhfSVFDQUxfQ09SUl9CMCksCisJCUFSX1BIWV9SWF9JUUNBTF9DT1JSX0lRQ09SUl9FTkFCTEUsCisJCVJFR19SRUFEKGFoLCBBUl9QSFlfUlhfSVFDQUxfQ09SUl9CMCkpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDlrX3BlcmNhbF9kYXRhIGlxX2NhbF9zaW5nbGVfc2FtcGxlID0gewpAQCAtMzQwLDcgKzM0NSw3IEBACiAJZjIgPSAoZjEgKiBmMSArIGYzICogZjMpIC8gcmVzdWx0X3NoaWZ0OwogCiAJaWYgKCFmMikgewotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwgIkRpdmlkZSBieSAwXG4iKTsKKwkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLCAiRGl2aWRlIGJ5IDBcbiIpOwogCQlyZXR1cm4gZmFsc2U7CiAJfQogCkBAIC00NjEsMTEgKzQ2NiwxNCBAQAogCiAJaWYgKChpMl9wX3EyX2EwX2QwID09IDApIHx8IChpMl9wX3EyX2EwX2QxID09IDApIHx8CiAJICAgIChpMl9wX3EyX2ExX2QwID09IDApIHx8IChpMl9wX3EyX2ExX2QxID09IDApKSB7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAotCQkJICAiRGl2aWRlIGJ5IDA6XG5hMF9kMD0lZFxuIgotCQkJICAiYTBfZDE9JWRcbmEyX2QwPSVkXG5hMV9kMT0lZFxuIiwKLQkJCSAgaTJfcF9xMl9hMF9kMCwgaTJfcF9xMl9hMF9kMSwKLQkJCSAgaTJfcF9xMl9hMV9kMCwgaTJfcF9xMl9hMV9kMSk7CisJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwKKwkJCSJEaXZpZGUgYnkgMDpcbiIKKwkJCSJhMF9kMD0lZFxuIgorCQkJImEwX2QxPSVkXG4iCisJCQkiYTJfZDA9JWRcbiIKKwkJCSJhMV9kMT0lZFxuIiwKKwkJCWkyX3BfcTJfYTBfZDAsIGkyX3BfcTJfYTBfZDEsCisJCQlpMl9wX3EyX2ExX2QwLCBpMl9wX3EyX2ExX2QxKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KIApAQCAtNDk4LDkgKzUwNiw5IEBACiAJbWFnMiA9IGFyOTAwM19od19maW5kX21hZ19hcHByb3goYWgsIGNvc18ycGhpXzIsIHNpbl8ycGhpXzIpOwogCiAJaWYgKChtYWcxID09IDApIHx8IChtYWcyID09IDApKSB7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAotCQkJICAiRGl2aWRlIGJ5IDA6IG1hZzE9JWQsIG1hZzI9JWRcbiIsCi0JCQkgIG1hZzEsIG1hZzIpOworCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCisJCQkiRGl2aWRlIGJ5IDA6IG1hZzE9JWQsIG1hZzI9JWRcbiIsCisJCQltYWcxLCBtYWcyKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KIApAQCAtNTE3LDggKzUyNSw4IEBACiAJCQkgICAgIG1hZ19hMF9kMCwgcGhzX2EwX2QwLAogCQkJICAgICBtYWdfYTFfZDAsCiAJCQkgICAgIHBoc19hMV9kMCwgc29sdmVkX2VxKSkgewotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwKLQkJCSAgIkNhbGwgdG8gYXI5MDAzX2h3X3NvbHZlX2lxX2NhbCgpIGZhaWxlZC5cbiIpOworCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCisJCQkiQ2FsbCB0byBhcjkwMDNfaHdfc29sdmVfaXFfY2FsKCkgZmFpbGVkLlxuIik7CiAJCXJldHVybiBmYWxzZTsKIAl9CiAKQEAgLTUyNywxNCArNTM1LDE0IEBACiAJbWFnX3J4ID0gc29sdmVkX2VxWzJdOwogCXBoc19yeCA9IHNvbHZlZF9lcVszXTsKIAotCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAotCQkgICJjaGFpbiAlZDogbWFnIG1pc21hdGNoPSVkIHBoYXNlIG1pc21hdGNoPSVkXG4iLAotCQkgIGNoYWluX2lkeCwgbWFnX3R4L3Jlc19zY2FsZSwgcGhzX3R4L3Jlc19zY2FsZSk7CisJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAorCQkiY2hhaW4gJWQ6IG1hZyBtaXNtYXRjaD0lZCBwaGFzZSBtaXNtYXRjaD0lZFxuIiwKKwkJY2hhaW5faWR4LCBtYWdfdHgvcmVzX3NjYWxlLCBwaHNfdHgvcmVzX3NjYWxlKTsKIAogCWlmIChyZXNfc2NhbGUgPT0gbWFnX3R4KSB7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAotCQkJICAiRGl2aWRlIGJ5IDA6IG1hZ190eD0lZCwgcmVzX3NjYWxlPSVkXG4iLAotCQkJICBtYWdfdHgsIHJlc19zY2FsZSk7CisJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwKKwkJCSJEaXZpZGUgYnkgMDogbWFnX3R4PSVkLCByZXNfc2NhbGU9JWRcbiIsCisJCQltYWdfdHgsIHJlc19zY2FsZSk7CiAJCXJldHVybiBmYWxzZTsKIAl9CiAKQEAgLTU0NSw5ICs1NTMsOSBAQAogCXFfcV9jb2ZmID0gKG1hZ19jb3JyX3R4ICogMTI4IC8gcmVzX3NjYWxlKTsKIAlxX2lfY29mZiA9IChwaHNfY29ycl90eCAqIDI1NiAvIHJlc19zY2FsZSk7CiAKLQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwKLQkJICAidHggY2hhaW4gJWQ6IG1hZyBjb3JyPSVkICBwaGFzZSBjb3JyPSVkXG4iLAotCQkgIGNoYWluX2lkeCwgcV9xX2NvZmYsIHFfaV9jb2ZmKTsKKwlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCisJCSJ0eCBjaGFpbiAlZDogbWFnIGNvcnI9JWQgIHBoYXNlIGNvcnI9JWRcbiIsCisJCWNoYWluX2lkeCwgcV9xX2NvZmYsIHFfaV9jb2ZmKTsKIAogCWlmIChxX2lfY29mZiA8IC02MykKIAkJcV9pX2NvZmYgPSAtNjM7CkBAIC01NjAsMTQgKzU2OCwxNCBAQAogCiAJaXFjX2NvZWZmWzBdID0gKHFfcV9jb2ZmICogMTI4KSArIHFfaV9jb2ZmOwogCi0JYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCi0JCSAgInR4IGNoYWluICVkOiBpcSBjb3JyIGNvZWZmPSV4XG4iLAotCQkgIGNoYWluX2lkeCwgaXFjX2NvZWZmWzBdKTsKKwlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCisJCSJ0eCBjaGFpbiAlZDogaXEgY29yciBjb2VmZj0leFxuIiwKKwkJY2hhaW5faWR4LCBpcWNfY29lZmZbMF0pOwogCiAJaWYgKC1tYWdfcnggPT0gcmVzX3NjYWxlKSB7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAotCQkJICAiRGl2aWRlIGJ5IDA6IG1hZ19yeD0lZCwgcmVzX3NjYWxlPSVkXG4iLAotCQkJICBtYWdfcngsIHJlc19zY2FsZSk7CisJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwKKwkJCSJEaXZpZGUgYnkgMDogbWFnX3J4PSVkLCByZXNfc2NhbGU9JWRcbiIsCisJCQltYWdfcngsIHJlc19zY2FsZSk7CiAJCXJldHVybiBmYWxzZTsKIAl9CiAKQEAgLTU3OCw5ICs1ODYsOSBAQAogCXFfcV9jb2ZmID0gKG1hZ19jb3JyX3J4ICogMTI4IC8gcmVzX3NjYWxlKTsKIAlxX2lfY29mZiA9IChwaHNfY29ycl9yeCAqIDI1NiAvIHJlc19zY2FsZSk7CiAKLQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwKLQkJICAicnggY2hhaW4gJWQ6IG1hZyBjb3JyPSVkICBwaGFzZSBjb3JyPSVkXG4iLAotCQkgIGNoYWluX2lkeCwgcV9xX2NvZmYsIHFfaV9jb2ZmKTsKKwlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCisJCSJyeCBjaGFpbiAlZDogbWFnIGNvcnI9JWQgIHBoYXNlIGNvcnI9JWRcbiIsCisJCWNoYWluX2lkeCwgcV9xX2NvZmYsIHFfaV9jb2ZmKTsKIAogCWlmIChxX2lfY29mZiA8IC02MykKIAkJcV9pX2NvZmYgPSAtNjM7CkBAIC01OTMsMTE0ICs2MDEsMTAzIEBACiAKIAlpcWNfY29lZmZbMV0gPSAocV9xX2NvZmYgKiAxMjgpICsgcV9pX2NvZmY7CiAKLQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwKLQkJICAicnggY2hhaW4gJWQ6IGlxIGNvcnIgY29lZmY9JXhcbiIsCi0JCSAgY2hhaW5faWR4LCBpcWNfY29lZmZbMV0pOworCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwKKwkJInJ4IGNoYWluICVkOiBpcSBjb3JyIGNvZWZmPSV4XG4iLAorCQljaGFpbl9pZHgsIGlxY19jb2VmZlsxXSk7CiAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIHZvaWQgYXI5MDAzX2h3X3R4X2lxX2NhbChzdHJ1Y3QgYXRoX2h3ICphaCkKK3N0YXRpYyBib29sIGFyOTAwM19od19jb21wdXRlX2Nsb3Nlc3RfcGFzc19hbmRfYXZnKGludCAqbXBfY29lZmYsIGludCAqbXBfYXZnKQoreworCWludCBkaWZmW01QQVNTXTsKKworCWRpZmZbMF0gPSBhYnMobXBfY29lZmZbMF0gLSBtcF9jb2VmZlsxXSk7CisJZGlmZlsxXSA9IGFicyhtcF9jb2VmZlsxXSAtIG1wX2NvZWZmWzJdKTsKKwlkaWZmWzJdID0gYWJzKG1wX2NvZWZmWzJdIC0gbXBfY29lZmZbMF0pOworCisJaWYgKGRpZmZbMF0gPiBNQVhfRElGRkVSRU5DRSAmJgorCSAgICBkaWZmWzFdID4gTUFYX0RJRkZFUkVOQ0UgJiYKKwkgICAgZGlmZlsyXSA+IE1BWF9ESUZGRVJFTkNFKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoZGlmZlswXSA8PSBkaWZmWzFdICYmIGRpZmZbMF0gPD0gZGlmZlsyXSkKKwkJKm1wX2F2ZyA9IChtcF9jb2VmZlswXSArIG1wX2NvZWZmWzFdKSAvIDI7CisJZWxzZSBpZiAoZGlmZlsxXSA8PSBkaWZmWzJdKQorCQkqbXBfYXZnID0gKG1wX2NvZWZmWzFdICsgbXBfY29lZmZbMl0pIC8gMjsKKwllbHNlCisJCSptcF9hdmcgPSAobXBfY29lZmZbMl0gKyBtcF9jb2VmZlswXSkgLyAyOworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIGFyOTAwM19od190eF9pcWNhbF9sb2FkX2F2Z18yX3Bhc3NlcyhzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQkJCSB1OCBudW1fY2hhaW5zLAorCQkJCQkJIHN0cnVjdCBjb2VmZiAqY29lZmYpCiB7CiAJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihhaCk7Ci0JY29uc3QgdTMyIHR4aXFjYWxfc3RhdHVzW0FSOTMwMF9NQVhfQ0hBSU5TXSA9IHsKLQkJQVJfUEhZX1RYX0lRQ0FMX1NUQVRVU19CMCwKLQkJQVJfUEhZX1RYX0lRQ0FMX1NUQVRVU19CMSwKLQkJQVJfUEhZX1RYX0lRQ0FMX1NUQVRVU19CMiwKLQl9OwotCWNvbnN0IHUzMiB0eF9jb3JyX2NvZWZmW0FSOTMwMF9NQVhfQ0hBSU5TXSA9IHsKLQkJQVJfUEhZX1RYX0lRQ0FMX0NPUlJfQ09FRkZfMDFfQjAsCi0JCUFSX1BIWV9UWF9JUUNBTF9DT1JSX0NPRUZGXzAxX0IxLAotCQlBUl9QSFlfVFhfSVFDQUxfQ09SUl9DT0VGRl8wMV9CMiwKLQl9OwotCWNvbnN0IHUzMiByeF9jb3JyW0FSOTMwMF9NQVhfQ0hBSU5TXSA9IHsKLQkJQVJfUEhZX1JYX0lRQ0FMX0NPUlJfQjAsCi0JCUFSX1BIWV9SWF9JUUNBTF9DT1JSX0IxLAotCQlBUl9QSFlfUlhfSVFDQUxfQ09SUl9CMiwKLQl9OwotCWNvbnN0IHVfaW50MzJfdCBjaGFuX2luZm9fdGFiW10gPSB7Ci0JCUFSX1BIWV9DSEFOX0lORk9fVEFCXzAsCi0JCUFSX1BIWV9DSEFOX0lORk9fVEFCXzEsCi0JCUFSX1BIWV9DSEFOX0lORk9fVEFCXzIsCi0JfTsKLQlzMzIgaXFfcmVzWzZdOwotCXMzMiBpcWNfY29lZmZbMl07Ci0JczMyIGksIGo7Ci0JdTMyIG51bV9jaGFpbnMgPSAwOworCWludCBpLCBpbSwgbm1lYXN1cmVtZW50OworCWludCBtYWduaXR1ZGUsIHBoYXNlOworCXUzMiB0eF9jb3JyX2NvZWZmW01BWF9NRUFTVVJFTUVOVF1bQVI5MzAwX01BWF9DSEFJTlNdOwogCi0JZm9yIChpID0gMDsgaSA8IEFSOTMwMF9NQVhfQ0hBSU5TOyBpKyspIHsKLQkJaWYgKGFoLT50eGNoYWlubWFzayAmICgxIDw8IGkpKQotCQkJbnVtX2NoYWlucysrOworCW1lbXNldCh0eF9jb3JyX2NvZWZmLCAwLCBzaXplb2YodHhfY29ycl9jb2VmZikpOworCWZvciAoaSA9IDA7IGkgPCBNQVhfTUVBU1VSRU1FTlQgLyAyOyBpKyspIHsKKwkJdHhfY29ycl9jb2VmZltpICogMl1bMF0gPSB0eF9jb3JyX2NvZWZmWyhpICogMikgKyAxXVswXSA9CisJCQkJCUFSX1BIWV9UWF9JUUNBTF9DT1JSX0NPRUZGX0IwKGkpOworCQlpZiAoIUFSX1NSRVZfOTQ4NShhaCkpIHsKKwkJCXR4X2NvcnJfY29lZmZbaSAqIDJdWzFdID0KKwkJCXR4X2NvcnJfY29lZmZbKGkgKiAyKSArIDFdWzFdID0KKwkJCQkJQVJfUEhZX1RYX0lRQ0FMX0NPUlJfQ09FRkZfQjEoaSk7CisKKwkJCXR4X2NvcnJfY29lZmZbaSAqIDJdWzJdID0KKwkJCXR4X2NvcnJfY29lZmZbKGkgKiAyKSArIDFdWzJdID0KKwkJCQkJQVJfUEhZX1RYX0lRQ0FMX0NPUlJfQ09FRkZfQjIoaSk7CisJCX0KIAl9CiAKLQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfVFhfSVFDQUxfQ09OVFJPTF8xLAotCQkgICAgICBBUl9QSFlfVFhfSVFDQVFMX0NPTlRST0xfMV9JUUNPUlJfSV9RX0NPRkZfREVMUFQsCi0JCSAgICAgIERFTFBUKTsKLQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfVFhfSVFDQUxfU1RBUlQsCi0JCSAgICAgIEFSX1BIWV9UWF9JUUNBTF9TVEFSVF9ET19DQUwsCi0JCSAgICAgIEFSX1BIWV9UWF9JUUNBTF9TVEFSVF9ET19DQUwpOwotCi0JaWYgKCFhdGg5a19od193YWl0KGFoLCBBUl9QSFlfVFhfSVFDQUxfU1RBUlQsCi0JCQkgICBBUl9QSFlfVFhfSVFDQUxfU1RBUlRfRE9fQ0FMLAotCQkJICAgMCwgQUhfV0FJVF9USU1FT1VUKSkgewotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwKLQkJCSAgIlR4IElRIENhbCBub3QgY29tcGxldGUuXG4iKTsKLQkJZ290byBUWF9JUV9DQUxfRkFJTEVEOwotCX0KLQorCS8qIExvYWQgdGhlIGF2ZXJhZ2Ugb2YgMiBwYXNzZXMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgbnVtX2NoYWluczsgaSsrKSB7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAotCQkJICAiRG9pbmcgVHggSVEgQ2FsIGZvciBjaGFpbiAlZC5cbiIsIGkpOworCQlpZiAoQVJfU1JFVl85NDg1KGFoKSkKKwkJCW5tZWFzdXJlbWVudCA9IFJFR19SRUFEX0ZJRUxEKGFoLAorCQkJCQlBUl9QSFlfVFhfSVFDQUxfU1RBVFVTX0IwXzk0ODUsCisJCQkJCUFSX1BIWV9DQUxJQlJBVEVEX0dBSU5TXzApOworCQllbHNlCisJCQlubWVhc3VyZW1lbnQgPSBSRUdfUkVBRF9GSUVMRChhaCwKKwkJCQkJQVJfUEhZX1RYX0lRQ0FMX1NUQVRVU19CMCwKKwkJCQkJQVJfUEhZX0NBTElCUkFURURfR0FJTlNfMCk7CiAKLQkJaWYgKFJFR19SRUFEKGFoLCB0eGlxY2FsX3N0YXR1c1tpXSkgJgotCQkJICAgICBBUl9QSFlfVFhfSVFDQUxfU1RBVFVTX0ZBSUxFRCkgewotCQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCi0JCQkJICAiVHggSVEgQ2FsIGZhaWxlZCBmb3IgY2hhaW4gJWQuXG4iLCBpKTsKLQkJCWdvdG8gVFhfSVFfQ0FMX0ZBSUxFRDsKKwkJaWYgKG5tZWFzdXJlbWVudCA+IE1BWF9NRUFTVVJFTUVOVCkKKwkJCW5tZWFzdXJlbWVudCA9IE1BWF9NRUFTVVJFTUVOVDsKKworCQlmb3IgKGltID0gMDsgaW0gPCBubWVhc3VyZW1lbnQ7IGltKyspIHsKKwkJCS8qCisJCQkgKiBEZXRlcm1pbmUgd2hpY2ggMiBwYXNzZXMgYXJlIGNsb3Nlc3QgYW5kIGNvbXB1dGUgYXZnCisJCQkgKiBtYWduaXR1ZGUKKwkJCSAqLworCQkJaWYgKCFhcjkwMDNfaHdfY29tcHV0ZV9jbG9zZXN0X3Bhc3NfYW5kX2F2Zyhjb2VmZi0+bWFnX2NvZWZmW2ldW2ltXSwKKwkJCQkJCQkJICAgICZtYWduaXR1ZGUpKQorCQkJCWdvdG8gZGlzYWJsZV90eGlxY2FsOworCisJCQkvKgorCQkJICogRGV0ZXJtaW5lIHdoaWNoIDIgcGFzc2VzIGFyZSBjbG9zZXN0IGFuZCBjb21wdXRlIGF2ZworCQkJICogcGhhc2UKKwkJCSAqLworCQkJaWYgKCFhcjkwMDNfaHdfY29tcHV0ZV9jbG9zZXN0X3Bhc3NfYW5kX2F2Zyhjb2VmZi0+cGhzX2NvZWZmW2ldW2ltXSwKKwkJCQkJCQkJICAgICZwaGFzZSkpCisJCQkJZ290byBkaXNhYmxlX3R4aXFjYWw7CisKKwkJCWNvZWZmLT5pcWNfY29lZmZbMF0gPSAobWFnbml0dWRlICYgMHg3ZikgfAorCQkJCQkgICAgICAoKHBoYXNlICYgMHg3ZikgPDwgNyk7CisKKwkJCWlmICgoaW0gJSAyKSA9PSAwKQorCQkJCVJFR19STVdfRklFTEQoYWgsIHR4X2NvcnJfY29lZmZbaW1dW2ldLAorCQkJCQlBUl9QSFlfVFhfSVFDQUxfQ09SUl9DT0VGRl8wMF9DT0VGRl9UQUJMRSwKKwkJCQkJY29lZmYtPmlxY19jb2VmZlswXSk7CisJCQllbHNlCisJCQkJUkVHX1JNV19GSUVMRChhaCwgdHhfY29ycl9jb2VmZltpbV1baV0sCisJCQkJCUFSX1BIWV9UWF9JUUNBTF9DT1JSX0NPRUZGXzAxX0NPRUZGX1RBQkxFLAorCQkJCQljb2VmZi0+aXFjX2NvZWZmWzBdKTsKIAkJfQotCi0JCWZvciAoaiA9IDA7IGogPCAzOyBqKyspIHsKLQkJCXVfaW50OF90IGlkeCA9IDIgKiBqLAotCQkJb2Zmc2V0ID0gNCAqIGo7Ci0KLQkJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9DSEFOX0lORk9fTUVNT1JZLAotCQkJCSAgICAgIEFSX1BIWV9DSEFOX0lORk9fVEFCX1MyX1JFQUQsIDApOwotCi0JCQkvKiAzMiBiaXRzICovCi0JCQlpcV9yZXNbaWR4XSA9IFJFR19SRUFEKGFoLCBjaGFuX2luZm9fdGFiW2ldICsgb2Zmc2V0KTsKLQotCQkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0NIQU5fSU5GT19NRU1PUlksCi0JCQkJICAgICAgQVJfUEhZX0NIQU5fSU5GT19UQUJfUzJfUkVBRCwgMSk7Ci0KLQkJCS8qIDE2IGJpdHMgKi8KLQkJCWlxX3Jlc1tpZHgrMV0gPSAweGZmZmYgJiBSRUdfUkVBRChhaCwKLQkJCQkJCQkgIGNoYW5faW5mb190YWJbaV0gKwotCQkJCQkJCSAgb2Zmc2V0KTsKLQotCQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCi0JCQkJICAiSVEgUkVTWyVkXT0weCV4IElRX1JFU1slZF09MHgleFxuIiwKLQkJCQkgIGlkeCwgaXFfcmVzW2lkeF0sIGlkeCsxLCBpcV9yZXNbaWR4KzFdKTsKLQkJfQotCi0JCWlmICghYXI5MDAzX2h3X2NhbGNfaXFfY29ycihhaCwgaSwgaXFfcmVzLCBpcWNfY29lZmYpKSB7Ci0JCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwKLQkJCQkgICJGYWlsZWQgaW4gY2FsY3VsYXRpb24gb2YgSVEgY29ycmVjdGlvbi5cbiIpOwotCQkJZ290byBUWF9JUV9DQUxfRkFJTEVEOwotCQl9Ci0KLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCi0JCQkgICJJUV9DT0VGRlswXSA9IDB4JXggSVFfQ09FRkZbMV0gPSAweCV4XG4iLAotCQkJICBpcWNfY29lZmZbMF0sIGlxY19jb2VmZlsxXSk7Ci0KLQkJUkVHX1JNV19GSUVMRChhaCwgdHhfY29ycl9jb2VmZltpXSwKLQkJCSAgICAgIEFSX1BIWV9UWF9JUUNBTF9DT1JSX0NPRUZGXzAxX0NPRUZGX1RBQkxFLAotCQkJICAgICAgaXFjX2NvZWZmWzBdKTsKLQkJUkVHX1JNV19GSUVMRChhaCwgcnhfY29ycltpXSwKLQkJCSAgICAgIEFSX1BIWV9SWF9JUUNBTF9DT1JSX0xPT1BCQUNLX0lRQ09SUl9RX1FfQ09GRiwKLQkJCSAgICAgIGlxY19jb2VmZlsxXSA+PiA3KTsKLQkJUkVHX1JNV19GSUVMRChhaCwgcnhfY29ycltpXSwKLQkJCSAgICAgIEFSX1BIWV9SWF9JUUNBTF9DT1JSX0xPT1BCQUNLX0lRQ09SUl9RX0lfQ09GRiwKLQkJCSAgICAgIGlxY19jb2VmZlsxXSk7CiAJfQogCiAJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1RYX0lRQ0FMX0NPTlRST0xfMywKQEAgLTcxMCwyMyArNzA3LDI2MSBAQAogCiAJcmV0dXJuOwogCi1UWF9JUV9DQUxfRkFJTEVEOgotCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLCAiVHggSVEgQ2FsIGZhaWxlZFxuIik7CitkaXNhYmxlX3R4aXFjYWw6CisJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1RYX0lRQ0FMX0NPTlRST0xfMywKKwkJICAgICAgQVJfUEhZX1RYX0lRQ0FMX0NPTlRST0xfM19JUUNPUlJfRU4sIDB4MCk7CisJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1JYX0lRQ0FMX0NPUlJfQjAsCisJCSAgICAgIEFSX1BIWV9SWF9JUUNBTF9DT1JSX0IwX0xPT1BCQUNLX0lRQ09SUl9FTiwgMHgwKTsKKworCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwgIlRYIElRIENhbCBkaXNhYmxlZFxuIik7CiB9CiAKK3N0YXRpYyB2b2lkIGFyOTAwM19od190eF9pcV9jYWwoc3RydWN0IGF0aF9odyAqYWgpCit7CisJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihhaCk7CisJc3RhdGljIGNvbnN0IHUzMiB0eGlxY2FsX3N0YXR1c1tBUjkzMDBfTUFYX0NIQUlOU10gPSB7CisJCUFSX1BIWV9UWF9JUUNBTF9TVEFUVVNfQjAsCisJCUFSX1BIWV9UWF9JUUNBTF9TVEFUVVNfQjEsCisJCUFSX1BIWV9UWF9JUUNBTF9TVEFUVVNfQjIsCisJfTsKKwlzdGF0aWMgY29uc3QgdTMyIGNoYW5faW5mb190YWJbXSA9IHsKKwkJQVJfUEhZX0NIQU5fSU5GT19UQUJfMCwKKwkJQVJfUEhZX0NIQU5fSU5GT19UQUJfMSwKKwkJQVJfUEhZX0NIQU5fSU5GT19UQUJfMiwKKwl9OworCXN0cnVjdCBjb2VmZiBjb2VmZjsKKwlzMzIgaXFfcmVzWzZdOworCXMzMiBpLCBqLCBpcCwgaW0sIG5tZWFzdXJlbWVudDsKKwl1OCBuY2hhaW5zID0gZ2V0X3N0cmVhbXMoY29tbW9uLT50eF9jaGFpbm1hc2spOworCisJZm9yIChpcCA9IDA7IGlwIDwgTVBBU1M7IGlwKyspIHsKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1RYX0lRQ0FMX0NPTlRST0xfMSwKKwkJCSAgICAgIEFSX1BIWV9UWF9JUUNBUUxfQ09OVFJPTF8xX0lRQ09SUl9JX1FfQ09GRl9ERUxQVCwKKwkJCSAgICAgIERFTFBUKTsKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1RYX0lRQ0FMX1NUQVJULAorCQkJICAgICAgQVJfUEhZX1RYX0lRQ0FMX1NUQVJUX0RPX0NBTCwKKwkJCSAgICAgIEFSX1BIWV9UWF9JUUNBTF9TVEFSVF9ET19DQUwpOworCisJCWlmICghYXRoOWtfaHdfd2FpdChhaCwgQVJfUEhZX1RYX0lRQ0FMX1NUQVJULAorCQkJCSAgIEFSX1BIWV9UWF9JUUNBTF9TVEFSVF9ET19DQUwsCisJCQkJICAgMCwgQUhfV0FJVF9USU1FT1VUKSkgeworCQkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAorCQkJCSJUeCBJUSBDYWwgbm90IGNvbXBsZXRlLlxuIik7CisJCQlnb3RvIFRYX0lRX0NBTF9GQUlMRUQ7CisJCX0KKworCQlubWVhc3VyZW1lbnQgPSBSRUdfUkVBRF9GSUVMRChhaCwgQVJfUEhZX1RYX0lRQ0FMX1NUQVRVU19CMCwKKwkJCQkJICAgICAgQVJfUEhZX0NBTElCUkFURURfR0FJTlNfMCk7CisJCQlpZiAobm1lYXN1cmVtZW50ID4gTUFYX01FQVNVUkVNRU5UKQorCQkJCW5tZWFzdXJlbWVudCA9IE1BWF9NRUFTVVJFTUVOVDsKKworCQlmb3IgKGkgPSAwOyBpIDwgbmNoYWluczsgaSsrKSB7CisJCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCisJCQkJIkRvaW5nIFR4IElRIENhbCBmb3IgY2hhaW4gJWQuXG4iLCBpKTsKKwkJCWZvciAoaW0gPSAwOyBpbSA8IG5tZWFzdXJlbWVudDsgaW0rKykgeworCQkJCWlmIChSRUdfUkVBRChhaCwgdHhpcWNhbF9zdGF0dXNbaV0pICYKKwkJCQkJICAgICBBUl9QSFlfVFhfSVFDQUxfU1RBVFVTX0ZBSUxFRCkgeworCQkJCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCisJCQkJCQkiVHggSVEgQ2FsIGZhaWxlZCBmb3IgY2hhaW4gJWQuXG4iLCBpKTsKKwkJCQkJZ290byBUWF9JUV9DQUxfRkFJTEVEOworCQkJCX0KKworCQkJCWZvciAoaiA9IDA7IGogPCAzOyBqKyspIHsKKwkJCQkJdTggaWR4ID0gMiAqIGosCisJCQkJCSAgIG9mZnNldCA9IDQgKiAoMyAqIGltICsgaik7CisKKwkJCQkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0NIQU5fSU5GT19NRU1PUlksCisJCQkJCQkgICAgICBBUl9QSFlfQ0hBTl9JTkZPX1RBQl9TMl9SRUFELAorCQkJCQkJICAgICAgMCk7CisKKwkJCQkJLyogMzIgYml0cyAqLworCQkJCQlpcV9yZXNbaWR4XSA9IFJFR19SRUFEKGFoLAorCQkJCQkJCWNoYW5faW5mb190YWJbaV0gKworCQkJCQkJCW9mZnNldCk7CisKKwkJCQkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0NIQU5fSU5GT19NRU1PUlksCisJCQkJCQkgICAgICBBUl9QSFlfQ0hBTl9JTkZPX1RBQl9TMl9SRUFELAorCQkJCQkJICAgICAgMSk7CisKKwkJCQkJLyogMTYgYml0cyAqLworCQkJCQlpcV9yZXNbaWR4KzFdID0gMHhmZmZmICYgUkVHX1JFQUQoYWgsCisJCQkJCQkJCWNoYW5faW5mb190YWJbaV0gKworCQkJCQkJCQlvZmZzZXQpOworCisJCQkJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwKKwkJCQkJCSJJUSBSRVNbJWRdPTB4JXggSVFfUkVTWyVkXT0weCV4XG4iLAorCQkJCQkJaWR4LCBpcV9yZXNbaWR4XSwgaWR4KzEsIGlxX3Jlc1tpZHgrMV0pOworCQkJCX0KKworCQkJCWlmICghYXI5MDAzX2h3X2NhbGNfaXFfY29ycihhaCwgaSwgaXFfcmVzLAorCQkJCQkJCSAgICBjb2VmZi5pcWNfY29lZmYpKSB7CisJCQkJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwKKwkJCQkJCSJGYWlsZWQgaW4gY2FsY3VsYXRpb24gb2YgSVEgY29ycmVjdGlvbi5cbiIpOworCQkJCQlnb3RvIFRYX0lRX0NBTF9GQUlMRUQ7CisJCQkJfQorCQkJCWNvZWZmLm1hZ19jb2VmZltpXVtpbV1baXBdID0KKwkJCQkJCWNvZWZmLmlxY19jb2VmZlswXSAmIDB4N2Y7CisJCQkJY29lZmYucGhzX2NvZWZmW2ldW2ltXVtpcF0gPQorCQkJCQkJKGNvZWZmLmlxY19jb2VmZlswXSA+PiA3KSAmIDB4N2Y7CisKKwkJCQlpZiAoY29lZmYubWFnX2NvZWZmW2ldW2ltXVtpcF0gPiA2MykKKwkJCQkJY29lZmYubWFnX2NvZWZmW2ldW2ltXVtpcF0gLT0gMTI4OworCQkJCWlmIChjb2VmZi5waHNfY29lZmZbaV1baW1dW2lwXSA+IDYzKQorCQkJCQljb2VmZi5waHNfY29lZmZbaV1baW1dW2lwXSAtPSAxMjg7CisKKwkJCX0KKwkJfQorCX0KKworCWFyOTAwM19od190eF9pcWNhbF9sb2FkX2F2Z18yX3Bhc3NlcyhhaCwgbmNoYWlucywgJmNvZWZmKTsKKworCXJldHVybjsKKworVFhfSVFfQ0FMX0ZBSUxFRDoKKwlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsICJUeCBJUSBDYWwgZmFpbGVkXG4iKTsKK30KKworc3RhdGljIHZvaWQgYXI5MDAzX2h3X3R4X2lxX2NhbF9ydW4oc3RydWN0IGF0aF9odyAqYWgpCit7CisJdTggdHhfZ2Fpbl9mb3JjZWQ7CisKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfVFhfSVFDQUxfQ09OVFJPTF8xXzk0ODUsCisJCSAgICAgIEFSX1BIWV9UWF9JUUNBUUxfQ09OVFJPTF8xX0lRQ09SUl9JX1FfQ09GRl9ERUxQVCwgREVMUFQpOworCXR4X2dhaW5fZm9yY2VkID0gUkVHX1JFQURfRklFTEQoYWgsIEFSX1BIWV9UWF9GT1JDRURfR0FJTiwKKwkJCQkJQVJfUEhZX1RYR0FJTl9GT1JDRSk7CisJaWYgKHR4X2dhaW5fZm9yY2VkKQorCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfVFhfRk9SQ0VEX0dBSU4sCisJCQkgICAgICBBUl9QSFlfVFhHQUlOX0ZPUkNFLCAwKTsKKworCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9UWF9JUUNBTF9TVEFSVF85NDg1LAorCQkgICAgICBBUl9QSFlfVFhfSVFDQUxfU1RBUlRfRE9fQ0FMXzk0ODUsIDEpOworfQorCitzdGF0aWMgdm9pZCBhcjkwMDNfaHdfdHhfaXFfY2FsX3Bvc3RfcHJvYyhzdHJ1Y3QgYXRoX2h3ICphaCkKK3sKKwlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKGFoKTsKKwljb25zdCB1MzIgdHhpcWNhbF9zdGF0dXNbQVI5MzAwX01BWF9DSEFJTlNdID0geworCQlBUl9QSFlfVFhfSVFDQUxfU1RBVFVTX0IwXzk0ODUsCisJCUFSX1BIWV9UWF9JUUNBTF9TVEFUVVNfQjEsCisJCUFSX1BIWV9UWF9JUUNBTF9TVEFUVVNfQjIsCisJfTsKKwljb25zdCB1X2ludDMyX3QgY2hhbl9pbmZvX3RhYltdID0geworCQlBUl9QSFlfQ0hBTl9JTkZPX1RBQl8wLAorCQlBUl9QSFlfQ0hBTl9JTkZPX1RBQl8xLAorCQlBUl9QSFlfQ0hBTl9JTkZPX1RBQl8yLAorCX07CisJc3RydWN0IGNvZWZmIGNvZWZmOworCXMzMiBpcV9yZXNbNl07CisJdTggbnVtX2NoYWlucyA9IDA7CisJaW50IGksIGlwLCBpbSwgajsKKwlpbnQgbm1lYXN1cmVtZW50OworCisJZm9yIChpID0gMDsgaSA8IEFSOTMwMF9NQVhfQ0hBSU5TOyBpKyspIHsKKwkJaWYgKGFoLT50eGNoYWlubWFzayAmICgxIDw8IGkpKQorCQkJbnVtX2NoYWlucysrOworCX0KKworCWZvciAoaXAgPSAwOyBpcCA8IE1QQVNTOyBpcCsrKSB7CisJCWZvciAoaSA9IDA7IGkgPCBudW1fY2hhaW5zOyBpKyspIHsKKwkJCW5tZWFzdXJlbWVudCA9IFJFR19SRUFEX0ZJRUxEKGFoLAorCQkJCQlBUl9QSFlfVFhfSVFDQUxfU1RBVFVTX0IwXzk0ODUsCisJCQkJCUFSX1BIWV9DQUxJQlJBVEVEX0dBSU5TXzApOworCQkJaWYgKG5tZWFzdXJlbWVudCA+IE1BWF9NRUFTVVJFTUVOVCkKKwkJCQlubWVhc3VyZW1lbnQgPSBNQVhfTUVBU1VSRU1FTlQ7CisKKwkJCWZvciAoaW0gPSAwOyBpbSA8IG5tZWFzdXJlbWVudDsgaW0rKykgeworCQkJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwKKwkJCQkJIkRvaW5nIFR4IElRIENhbCBmb3IgY2hhaW4gJWQuXG4iLCBpKTsKKworCQkJCWlmIChSRUdfUkVBRChhaCwgdHhpcWNhbF9zdGF0dXNbaV0pICYKKwkJCQkgICAgQVJfUEhZX1RYX0lRQ0FMX1NUQVRVU19GQUlMRUQpIHsKKwkJCQkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAorCQkJCQkiVHggSVEgQ2FsIGZhaWxlZCBmb3IgY2hhaW4gJWQuXG4iLCBpKTsKKwkJCQkJZ290byB0eF9pcWNhbF9mYWlsOworCQkJCX0KKworCQkJCWZvciAoaiA9IDA7IGogPCAzOyBqKyspIHsKKwkJCQkJdTMyIGlkeCA9IDIgKiBqLCBvZmZzZXQgPSA0ICogKDMgKiBpbSArIGopOworCisJCQkJCVJFR19STVdfRklFTEQoYWgsCisJCQkJCQlBUl9QSFlfQ0hBTl9JTkZPX01FTU9SWSwKKwkJCQkJCUFSX1BIWV9DSEFOX0lORk9fVEFCX1MyX1JFQUQsCisJCQkJCQkwKTsKKworCQkJCQkvKiAzMiBiaXRzICovCisJCQkJCWlxX3Jlc1tpZHhdID0gUkVHX1JFQUQoYWgsCisJCQkJCQkJY2hhbl9pbmZvX3RhYltpXSArCisJCQkJCQkJb2Zmc2V0KTsKKworCQkJCQlSRUdfUk1XX0ZJRUxEKGFoLAorCQkJCQkJQVJfUEhZX0NIQU5fSU5GT19NRU1PUlksCisJCQkJCQlBUl9QSFlfQ0hBTl9JTkZPX1RBQl9TMl9SRUFELAorCQkJCQkJMSk7CisKKwkJCQkJLyogMTYgYml0cyAqLworCQkJCQlpcV9yZXNbaWR4ICsgMV0gPSAweGZmZmYgJiBSRUdfUkVBRChhaCwKKwkJCQkJCQkgIGNoYW5faW5mb190YWJbaV0gKyBvZmZzZXQpOworCisJCQkJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwKKwkJCQkJCSJJUSBSRVNbJWRdPTB4JXgiCisJCQkJCQkiSVFfUkVTWyVkXT0weCV4XG4iLAorCQkJCQkJaWR4LCBpcV9yZXNbaWR4XSwgaWR4ICsgMSwKKwkJCQkJCWlxX3Jlc1tpZHggKyAxXSk7CisJCQkJfQorCisJCQkJaWYgKCFhcjkwMDNfaHdfY2FsY19pcV9jb3JyKGFoLCBpLCBpcV9yZXMsCisJCQkJCQkJICAgIGNvZWZmLmlxY19jb2VmZikpIHsKKwkJCQkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAorCQkJCQkgIkZhaWxlZCBpbiBjYWxjdWxhdGlvbiBvZiBJUSBjb3JyZWN0aW9uLlxuIik7CisJCQkJCWdvdG8gdHhfaXFjYWxfZmFpbDsKKwkJCQl9CisKKwkJCQljb2VmZi5tYWdfY29lZmZbaV1baW1dW2lwXSA9CisJCQkJCQljb2VmZi5pcWNfY29lZmZbMF0gJiAweDdmOworCQkJCWNvZWZmLnBoc19jb2VmZltpXVtpbV1baXBdID0KKwkJCQkJCShjb2VmZi5pcWNfY29lZmZbMF0gPj4gNykgJiAweDdmOworCisJCQkJaWYgKGNvZWZmLm1hZ19jb2VmZltpXVtpbV1baXBdID4gNjMpCisJCQkJCWNvZWZmLm1hZ19jb2VmZltpXVtpbV1baXBdIC09IDEyODsKKwkJCQlpZiAoY29lZmYucGhzX2NvZWZmW2ldW2ltXVtpcF0gPiA2MykKKwkJCQkJY29lZmYucGhzX2NvZWZmW2ldW2ltXVtpcF0gLT0gMTI4OworCQkJfQorCQl9CisJfQorCWFyOTAwM19od190eF9pcWNhbF9sb2FkX2F2Z18yX3Bhc3NlcyhhaCwgbnVtX2NoYWlucywgJmNvZWZmKTsKKworCXJldHVybjsKKwordHhfaXFjYWxfZmFpbDoKKwlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsICJUeCBJUSBDYWwgZmFpbGVkXG4iKTsKKwlyZXR1cm47Cit9CiBzdGF0aWMgYm9vbCBhcjkwMDNfaHdfaW5pdF9jYWwoc3RydWN0IGF0aF9odyAqYWgsCiAJCQkgICAgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCiB7CiAJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihhaCk7CisJaW50IHZhbDsKIAotCS8qCi0JICogMHg3ID0gMGIxMTEgLCBBUjkwMDMgbmVlZHMgdG8gYmUgY29uZmlndXJlZCBmb3IgMy1jaGFpbiBtb2RlIGJlZm9yZQotCSAqIHJ1bm5pbmcgQUdDL1R4SVEgY2FscwotCSAqLwotCWFyOTAwM19od19zZXRfY2hhaW5fbWFza3MoYWgsIDB4NywgMHg3KTsKKwl2YWwgPSBSRUdfUkVBRChhaCwgQVJfRU5UX09UUCk7CisJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLCAiYXRoOWs6IEFSX0VOVF9PVFAgMHgleFxuIiwgdmFsKTsKKworCWlmIChBUl9TUkVWXzk0ODUoYWgpKQorCQlhcjkwMDNfaHdfc2V0X2NoYWluX21hc2tzKGFoLCAweDEsIDB4MSk7CisJZWxzZSBpZiAodmFsICYgQVJfRU5UX09UUF9DSEFJTjJfRElTQUJMRSkKKwkJYXI5MDAzX2h3X3NldF9jaGFpbl9tYXNrcyhhaCwgMHgzLCAweDMpOworCWVsc2UKKwkJLyoKKwkJICogMHg3ID0gMGIxMTEgLCBBUjkwMDMgbmVlZHMgdG8gYmUgY29uZmlndXJlZCBmb3IgMy1jaGFpbgorCQkgKiBtb2RlIGJlZm9yZSBydW5uaW5nIEFHQy9UeElRIGNhbHMKKwkJICovCisJCWFyOTAwM19od19zZXRfY2hhaW5fbWFza3MoYWgsIDB4NywgMHg3KTsKIAogCS8qIERvIFR4IElRIENhbGlicmF0aW9uICovCi0JYXI5MDAzX2h3X3R4X2lxX2NhbChhaCk7CisJaWYgKEFSX1NSRVZfOTQ4NShhaCkpCisJCWFyOTAwM19od190eF9pcV9jYWxfcnVuKGFoKTsKKwllbHNlCisJCWFyOTAwM19od190eF9pcV9jYWwoYWgpOworCiAJUkVHX1dSSVRFKGFoLCBBUl9QSFlfQUNUSVZFLCBBUl9QSFlfQUNUSVZFX0RJUyk7CiAJdWRlbGF5KDUpOwogCVJFR19XUklURShhaCwgQVJfUEhZX0FDVElWRSwgQVJfUEhZX0FDVElWRV9FTik7CkBAIC03MzksMTIgKzk3NCwxNCBAQAogCS8qIFBvbGwgZm9yIG9mZnNldCBjYWxpYnJhdGlvbiBjb21wbGV0ZSAqLwogCWlmICghYXRoOWtfaHdfd2FpdChhaCwgQVJfUEhZX0FHQ19DT05UUk9MLCBBUl9QSFlfQUdDX0NPTlRST0xfQ0FMLAogCQkJICAgMCwgQUhfV0FJVF9USU1FT1VUKSkgewotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwKLQkJCSAgIm9mZnNldCBjYWxpYnJhdGlvbiBmYWlsZWQgdG8gIgotCQkJICAiY29tcGxldGUgaW4gMW1zOyBub2lzeSBlbnZpcm9ubWVudD9cbiIpOworCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCisJCQkib2Zmc2V0IGNhbGlicmF0aW9uIGZhaWxlZCB0byBjb21wbGV0ZSBpbiAxbXM7IG5vaXN5IGVudmlyb25tZW50P1xuIik7CiAJCXJldHVybiBmYWxzZTsKIAl9CiAKKwlpZiAoQVJfU1JFVl85NDg1KGFoKSkKKwkJYXI5MDAzX2h3X3R4X2lxX2NhbF9wb3N0X3Byb2MoYWgpOworCiAJLyogUmV2ZXJ0IGNoYWlubWFza3MgdG8gdGhlaXIgb3JpZ2luYWwgdmFsdWVzIGJlZm9yZSBORiBjYWwgKi8KIAlhcjkwMDNfaHdfc2V0X2NoYWluX21hc2tzKGFoLCBhaC0+cnhjaGFpbm1hc2ssIGFoLT50eGNoYWlubWFzayk7CiAKQEAgLTc1NywxNSArOTk0LDE1IEBACiAJaWYgKGFoLT5zdXBwX2NhbHMgJiBJUV9NSVNNQVRDSF9DQUwpIHsKIAkJSU5JVF9DQUwoJmFoLT5pcV9jYWxkYXRhKTsKIAkJSU5TRVJUX0NBTChhaCwgJmFoLT5pcV9jYWxkYXRhKTsKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCi0JCQkgICJlbmFibGluZyBJUSBDYWxpYnJhdGlvbi5cbiIpOworCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCisJCQkiZW5hYmxpbmcgSVEgQ2FsaWJyYXRpb24uXG4iKTsKIAl9CiAKIAlpZiAoYWgtPnN1cHBfY2FscyAmIFRFTVBfQ09NUF9DQUwpIHsKIAkJSU5JVF9DQUwoJmFoLT50ZW1wQ29tcENhbERhdGEpOwogCQlJTlNFUlRfQ0FMKGFoLCAmYWgtPnRlbXBDb21wQ2FsRGF0YSk7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAotCQkJICAiZW5hYmxpbmcgVGVtcGVyYXR1cmUgQ29tcGVuc2F0aW9uIENhbGlicmF0aW9uLlxuIik7CisJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwKKwkJCSJlbmFibGluZyBUZW1wZXJhdHVyZSBDb21wZW5zYXRpb24gQ2FsaWJyYXRpb24uXG4iKTsKIAl9CiAKIAkvKiBJbml0aWFsaXplIGN1cnJlbnQgcG9pbnRlciB0byBmaXJzdCBlbGVtZW50IGluIGxpc3QgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfZWVwcm9tLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX2VlcHJvbS5jCmluZGV4IGE3YjgyZjAuLjQ4MTk3NDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfZWVwcm9tLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19lZXByb20uYwpAQCAtMjIsMTIgKzIyLDE0IEBACiAjZGVmaW5lIENPTVBfQ0tTVU1fTEVOIDIKIAogI2RlZmluZSBBUl9DSDBfVE9QICgweDAwMDE2Mjg4KQotI2RlZmluZSBBUl9DSDBfVE9QX1hQQUJJQVNMVkwgKDB4MykKKyNkZWZpbmUgQVJfQ0gwX1RPUF9YUEFCSUFTTFZMICgweDMwMCkKICNkZWZpbmUgQVJfQ0gwX1RPUF9YUEFCSUFTTFZMX1MgKDgpCiAKICNkZWZpbmUgQVJfQ0gwX1RIRVJNICgweDAwMDE2MjkwKQotI2RlZmluZSBBUl9DSDBfVEhFUk1fU1BBUkUgKDB4M2YpCi0jZGVmaW5lIEFSX0NIMF9USEVSTV9TUEFSRV9TICgwKQorI2RlZmluZSBBUl9DSDBfVEhFUk1fWFBBQklBU0xWTF9NU0IgMHgzCisjZGVmaW5lIEFSX0NIMF9USEVSTV9YUEFCSUFTTFZMX01TQl9TIDAKKyNkZWZpbmUgQVJfQ0gwX1RIRVJNX1hQQVNIT1JUMkdORCAweDQKKyNkZWZpbmUgQVJfQ0gwX1RIRVJNX1hQQVNIT1JUMkdORF9TIDIKIAogI2RlZmluZSBBUl9TV0lUQ0hfVEFCTEVfQ09NX0FMTCAoMHhmZmZmKQogI2RlZmluZSBBUl9TV0lUQ0hfVEFCTEVfQ09NX0FMTF9TICgwKQpAQCAtNTcsNiArNTksMTIgQEAKIAogI2RlZmluZSBDVEwoX3Rwb3dlciwgX2ZsYWcpICgoX3Rwb3dlcikgfCAoKF9mbGFnKSA8PCA2KSkKIAorI2RlZmluZSBFRVBST01fREFUQV9MRU5fOTQ4NQkxMDg4CisKK3N0YXRpYyBpbnQgYXI5MDAzX2h3X3Bvd2VyX2ludGVycG9sYXRlKGludDMyX3QgeCwKKwkJCQkgICAgICAgaW50MzJfdCAqcHgsIGludDMyX3QgKnB5LCB1X2ludDE2X3QgbnApOworCisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXI5MzAwX2VlcHJvbSBhcjkzMDBfZGVmYXVsdCA9IHsKIAkuZWVwcm9tVmVyc2lvbiA9IDIsCiAJLnRlbXBsYXRlVmVyc2lvbiA9IDIsCkBAIC02Nyw3ICs3NSw3IEBACiAJCS5yZWdEbW4gPSB7IExFMTYoMCksIExFMTYoMHgxZikgfSwKIAkJLnR4cnhNYXNrID0gIDB4NzcsIC8qIDQgYml0cyB0eCBhbmQgNCBiaXRzIHJ4ICovCiAJCS5vcENhcEZsYWdzID0gewotCQkJLm9wRmxhZ3MgPSBBUjkzMDBfT1BGTEFHU18xMUcgfCBBUjkzMDBfT1BGTEFHU18xMUEsCisJCQkub3BGbGFncyA9IEFSNTQxNl9PUEZMQUdTXzExRyB8IEFSNTQxNl9PUEZMQUdTXzExQSwKIAkJCS5lZXBNaXNjID0gMCwKIAkJfSwKIAkJLnJmU2lsZW50ID0gMCwKQEAgLTE0NiwxMyArMTU0LDE2IEBACiAJCS50eEVuZFRvUnhPbiA9IDB4MiwKIAkJLnR4RnJhbWVUb1hwYU9uID0gMHhlLAogCQkudGhyZXNoNjIgPSAyOCwKLQkJLnBhcGRSYXRlTWFza0h0MjAgPSBMRTMyKDB4ODBjMDgwKSwKLQkJLnBhcGRSYXRlTWFza0h0NDAgPSBMRTMyKDB4ODBjMDgwKSwKKwkJLnBhcGRSYXRlTWFza0h0MjAgPSBMRTMyKDB4MGNmMGUwZTApLAorCQkucGFwZFJhdGVNYXNrSHQ0MCA9IExFMzIoMHg2Y2YwZTBlMCksCiAJCS5mdXR1cmVNb2RhbCA9IHsKLQkJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCi0JCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwCisJCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAogCQl9LAogCSB9LAorCS5iYXNlX2V4dDEgPSB7CisJCS5hbnRfZGl2X2NvbnRyb2wgPSAwLAorCQkuZnV0dXJlID0gezAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9CisJfSwKIAkuY2FsRnJlcVBpZXIyRyA9IHsKIAkJRlJFUTJGQklOKDI0MTIsIDEpLAogCQlGUkVRMkZCSU4oMjQzNywgMSksCkBAIC0yODcsOCArMjk4LDcgQEAKIAkJCS8qIERhdGFbMTFdLmN0bEVkZ2VzWzBdLmJDaGFubmVsICovIEZSRVEyRkJJTigyNDIyLCAxKSwKIAkJCS8qIERhdGFbMTFdLmN0bEVkZ2VzWzFdLmJDaGFubmVsICovIEZSRVEyRkJJTigyNDI3LCAxKSwKIAkJCS8qIERhdGFbMTFdLmN0bEVkZ2VzWzJdLmJDaGFubmVsICovIEZSRVEyRkJJTigyNDQ3LCAxKSwKLQkJCS8qIERhdGFbMTFdLmN0bEVkZ2VzWzNdLmJDaGFubmVsICovCi0JCQlGUkVRMkZCSU4oMjQ2MiwgMSksCisJCQkvKiBEYXRhWzExXS5jdGxFZGdlc1szXS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oMjQ2MiwgMSksCiAJCX0KIAkgfSwKIAkuY3RsUG93ZXJEYXRhXzJHID0gewpAQCAtMzQ2LDEzICszNTYsMjAgQEAKIAkJLnR4RW5kVG9SeE9uID0gMHgyLAogCQkudHhGcmFtZVRvWHBhT24gPSAweGUsCiAJCS50aHJlc2g2MiA9IDI4LAotCQkucGFwZFJhdGVNYXNrSHQyMCA9IExFMzIoMHhmMGUwZTApLAotCQkucGFwZFJhdGVNYXNrSHQ0MCA9IExFMzIoMHhmMGUwZTApLAorCQkucGFwZFJhdGVNYXNrSHQyMCA9IExFMzIoMHgwYzgwYzA4MCksCisJCS5wYXBkUmF0ZU1hc2tIdDQwID0gTEUzMigweDAwODBjMDgwKSwKIAkJLmZ1dHVyZU1vZGFsID0gewotCQkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKLQkJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAKKwkJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCiAJCX0sCiAJIH0sCisJLmJhc2VfZXh0MiA9IHsKKwkJLnRlbXBTbG9wZUxvdyA9IDAsCisJCS50ZW1wU2xvcGVIaWdoID0gMCwKKwkJLnhhdHRlbjFEQkxvdyA9IHswLCAwLCAwfSwKKwkJLnhhdHRlbjFNYXJnaW5Mb3cgPSB7MCwgMCwgMH0sCisJCS54YXR0ZW4xREJIaWdoID0gezAsIDAsIDB9LAorCQkueGF0dGVuMU1hcmdpbkhpZ2ggPSB7MCwgMCwgMH0KKwl9LAogCS5jYWxGcmVxUGllcjVHID0gewogCQlGUkVRMkZCSU4oNTE4MCwgMCksCiAJCUZSRVEyRkJJTig1MjIwLCAwKSwKQEAgLTYyNiw5ICs2NDMsMjM0MSBAQAogCSB9CiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IGFyOTMwMF9lZXByb20gYXI5MzAwX3gxMTMgPSB7CisJLmVlcHJvbVZlcnNpb24gPSAyLAorCS50ZW1wbGF0ZVZlcnNpb24gPSA2LAorCS5tYWNBZGRyID0gezB4MDAsIDB4MDMsIDB4N2YsIDB4MCwgMHgwLCAweDB9LAorCS5jdXN0RGF0YSA9IHsieDExMy0wMjMtZjAwMDAifSwKKwkuYmFzZUVlcEhlYWRlciA9IHsKKwkJLnJlZ0RtbiA9IHsgTEUxNigwKSwgTEUxNigweDFmKSB9LAorCQkudHhyeE1hc2sgPSAgMHg3NywgLyogNCBiaXRzIHR4IGFuZCA0IGJpdHMgcnggKi8KKwkJLm9wQ2FwRmxhZ3MgPSB7CisJCQkub3BGbGFncyA9IEFSNTQxNl9PUEZMQUdTXzExRyB8IEFSNTQxNl9PUEZMQUdTXzExQSwKKwkJCS5lZXBNaXNjID0gMCwKKwkJfSwKKwkJLnJmU2lsZW50ID0gMCwKKwkJLmJsdWVUb290aE9wdGlvbnMgPSAwLAorCQkuZGV2aWNlQ2FwID0gMCwKKwkJLmRldmljZVR5cGUgPSA1LCAvKiB0YWtlcyBsb3dlciBieXRlIGluIGVlcHJvbSBsb2NhdGlvbiAqLworCQkucHdyVGFibGVPZmZzZXQgPSBBUjkzMDBfUFdSX1RBQkxFX09GRlNFVCwKKwkJLnBhcmFtc19mb3JfdHVuaW5nX2NhcHMgPSB7MCwgMH0sCisJCS5mZWF0dXJlRW5hYmxlID0gMHgwZCwKKwkJIC8qCisJCSAgKiBiaXQwIC0gZW5hYmxlIHR4IHRlbXAgY29tcCAtIGRpc2FibGVkCisJCSAgKiBiaXQxIC0gZW5hYmxlIHR4IHZvbHQgY29tcCAtIGRpc2FibGVkCisJCSAgKiBiaXQyIC0gZW5hYmxlIGZhc3RDbG9jayAtIGVuYWJsZWQKKwkJICAqIGJpdDMgLSBlbmFibGUgZG91YmxpbmcgLSBlbmFibGVkCisJCSAgKiBiaXQ0IC0gZW5hYmxlIGludGVybmFsIHJlZ3VsYXRvciAtIGRpc2FibGVkCisJCSAgKiBiaXQ1IC0gZW5hYmxlIHBhIHByZWRpc3RvcnRpb24gLSBkaXNhYmxlZAorCQkgICovCisJCS5taXNjQ29uZmlndXJhdGlvbiA9IDAsIC8qIGJpdDAgLSB0dXJuIGRvd24gZHJpdmVzdHJlbmd0aCAqLworCQkuZWVwcm9tV3JpdGVFbmFibGVHcGlvID0gNiwKKwkJLndsYW5EaXNhYmxlR3BpbyA9IDAsCisJCS53bGFuTGVkR3BpbyA9IDgsCisJCS5yeEJhbmRTZWxlY3RHcGlvID0gMHhmZiwKKwkJLnR4cnhnYWluID0gMHgyMSwKKwkJLnN3cmVnID0gMCwKKwkgfSwKKwkubW9kYWxIZWFkZXIyRyA9IHsKKwkvKiBhcjkzMDBfbW9kYWxfZWVwX2hlYWRlciAgMmcgKi8KKwkJLyogNCBpZGxlLHQxLHQyLGIoNCBiaXRzIHBlciBzZXR0aW5nKSAqLworCQkuYW50Q3RybENvbW1vbiA9IExFMzIoMHgxMTApLAorCQkvKiA0IHJhMWwxLCByYTJsMSwgcmExbDIsIHJhMmwyLCByYTEyICovCisJCS5hbnRDdHJsQ29tbW9uMiA9IExFMzIoMHg0NDQ0NCksCisKKwkJLyoKKwkJICogYW50Q3RybENoYWluW0FSOTMwMF9NQVhfQ0hBSU5TXTsgNiBpZGxlLCB0LCByLAorCQkgKiByeDEsIHJ4MTIsIGIgKDIgYml0cyBlYWNoKQorCQkgKi8KKwkJLmFudEN0cmxDaGFpbiA9IHsgTEUxNigweDE1MCksIExFMTYoMHgxNTApLCBMRTE2KDB4MTUwKSB9LAorCisJCS8qCisJCSAqIHhhdHRlbjFEQltBUjkzMDBfTUFYX0NIQUlOU107ICAzIHhhdHRlbjFfZGIKKwkJICogZm9yIGFyOTI4MCAoMHhhMjBjL2IyMGMgNTowKQorCQkgKi8KKwkJLnhhdHRlbjFEQiA9IHswLCAwLCAwfSwKKworCQkvKgorCQkgKiB4YXR0ZW4xTWFyZ2luW0FSOTMwMF9NQVhfQ0hBSU5TXTsgMyB4YXR0ZW4xX21hcmdpbgorCQkgKiBmb3IgYXI5MjgwICgweGEyMGMvYjIwYyAxNjoxMgorCQkgKi8KKwkJLnhhdHRlbjFNYXJnaW4gPSB7MCwgMCwgMH0sCisJCS50ZW1wU2xvcGUgPSAyNSwKKwkJLnZvbHRTbG9wZSA9IDAsCisKKwkJLyoKKwkJICogc3B1ckNoYW5zW09TUFJFWV9FRVBST01fTU9EQUxfU1BVUlNdOyBzcHVyCisJCSAqIGNoYW5uZWxzIGluIHVzdWFsIGZiaW4gY29kaW5nIGZvcm1hdAorCQkgKi8KKwkJLnNwdXJDaGFucyA9IHtGUkVRMkZCSU4oMjQ2NCwgMSksIDAsIDAsIDAsIDB9LAorCisJCS8qCisJCSAqIG5vaXNlRmxvb3JUaHJlc2hDaFtBUjkzMDBfTUFYX0NIQUlOU107IDMgQ2hlY2sKKwkJICogaWYgdGhlIHJlZ2lzdGVyIGlzIHBlciBjaGFpbgorCQkgKi8KKwkJLm5vaXNlRmxvb3JUaHJlc2hDaCA9IHstMSwgMCwgMH0sCisJCS5vYiA9IHsxLCAxLCAxfSwvKiAzIGNoYWluICovCisJCS5kYl9zdGFnZTIgPSB7MSwgMSwgMX0sIC8qIDMgY2hhaW4gICovCisJCS5kYl9zdGFnZTMgPSB7MCwgMCwgMH0sCisJCS5kYl9zdGFnZTQgPSB7MCwgMCwgMH0sCisJCS54cGFCaWFzTHZsID0gMCwKKwkJLnR4RnJhbWVUb0RhdGFTdGFydCA9IDB4MGUsCisJCS50eEZyYW1lVG9QYU9uID0gMHgwZSwKKwkJLnR4Q2xpcCA9IDMsIC8qIDQgYml0cyB0eF9jbGlwLCA0IGJpdHMgZGFjX3NjYWxlX2NjayAqLworCQkuYW50ZW5uYUdhaW4gPSAwLAorCQkuc3dpdGNoU2V0dGxpbmcgPSAweDJjLAorCQkuYWRjRGVzaXJlZFNpemUgPSAtMzAsCisJCS50eEVuZFRvWHBhT2ZmID0gMCwKKwkJLnR4RW5kVG9SeE9uID0gMHgyLAorCQkudHhGcmFtZVRvWHBhT24gPSAweGUsCisJCS50aHJlc2g2MiA9IDI4LAorCQkucGFwZFJhdGVNYXNrSHQyMCA9IExFMzIoMHgwYzgwYzA4MCksCisJCS5wYXBkUmF0ZU1hc2tIdDQwID0gTEUzMigweDAwODBjMDgwKSwKKwkJLmZ1dHVyZU1vZGFsID0geworCQkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkJfSwKKwkgfSwKKwkgLmJhc2VfZXh0MSA9IHsKKwkJLmFudF9kaXZfY29udHJvbCA9IDAsCisJCS5mdXR1cmUgPSB7MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMH0KKwkgfSwKKwkuY2FsRnJlcVBpZXIyRyA9IHsKKwkJRlJFUTJGQklOKDI0MTIsIDEpLAorCQlGUkVRMkZCSU4oMjQzNywgMSksCisJCUZSRVEyRkJJTigyNDcyLCAxKSwKKwkgfSwKKwkvKiBhcjkzMDBfY2FsX2RhdGFfcGVyX2ZyZXFfb3BfbG9vcCAyZyAqLworCS5jYWxQaWVyRGF0YTJHID0geworCQl7IHswLCAwLCAwLCAwLCAwLCAwfSwgezAsIDAsIDAsIDAsIDAsIDB9LCB7MCwgMCwgMCwgMCwgMCwgMH0gfSwKKwkJeyB7MCwgMCwgMCwgMCwgMCwgMH0sIHswLCAwLCAwLCAwLCAwLCAwfSwgezAsIDAsIDAsIDAsIDAsIDB9IH0sCisJCXsgezAsIDAsIDAsIDAsIDAsIDB9LCB7MCwgMCwgMCwgMCwgMCwgMH0sIHswLCAwLCAwLCAwLCAwLCAwfSB9LAorCSB9LAorCS5jYWxUYXJnZXRfZnJlcWJpbl9DY2sgPSB7CisJCUZSRVEyRkJJTigyNDEyLCAxKSwKKwkJRlJFUTJGQklOKDI0NzIsIDEpLAorCSB9LAorCS5jYWxUYXJnZXRfZnJlcWJpbl8yRyA9IHsKKwkJRlJFUTJGQklOKDI0MTIsIDEpLAorCQlGUkVRMkZCSU4oMjQzNywgMSksCisJCUZSRVEyRkJJTigyNDcyLCAxKQorCSB9LAorCS5jYWxUYXJnZXRfZnJlcWJpbl8yR0hUMjAgPSB7CisJCUZSRVEyRkJJTigyNDEyLCAxKSwKKwkJRlJFUTJGQklOKDI0MzcsIDEpLAorCQlGUkVRMkZCSU4oMjQ3MiwgMSkKKwkgfSwKKwkuY2FsVGFyZ2V0X2ZyZXFiaW5fMkdIVDQwID0geworCQlGUkVRMkZCSU4oMjQxMiwgMSksCisJCUZSRVEyRkJJTigyNDM3LCAxKSwKKwkJRlJFUTJGQklOKDI0NzIsIDEpCisJIH0sCisJLmNhbFRhcmdldFBvd2VyQ2NrID0geworCQkgLyogMUwtNUwsNVMsMTFMLDExUyAqLworCQkgeyB7MzQsIDM0LCAzNCwgMzR9IH0sCisJCSB7IHszNCwgMzQsIDM0LCAzNH0gfSwKKwl9LAorCS5jYWxUYXJnZXRQb3dlcjJHID0geworCQkgLyogNi0yNCwzNiw0OCw1NCAqLworCQkgeyB7MzQsIDM0LCAzMiwgMzJ9IH0sCisJCSB7IHszNCwgMzQsIDMyLCAzMn0gfSwKKwkJIHsgezM0LCAzNCwgMzIsIDMyfSB9LAorCX0sCisJLmNhbFRhcmdldFBvd2VyMkdIVDIwID0geworCQl7IHszMiwgMzIsIDMyLCAzMiwgMzIsIDI4LCAzMiwgMzIsIDMwLCAyOCwgMCwgMCwgMCwgMH0gfSwKKwkJeyB7MzIsIDMyLCAzMiwgMzIsIDMyLCAyOCwgMzIsIDMyLCAzMCwgMjgsIDAsIDAsIDAsIDB9IH0sCisJCXsgezMyLCAzMiwgMzIsIDMyLCAzMiwgMjgsIDMyLCAzMiwgMzAsIDI4LCAwLCAwLCAwLCAwfSB9LAorCX0sCisJLmNhbFRhcmdldFBvd2VyMkdIVDQwID0geworCQl7IHszMCwgMzAsIDMwLCAzMCwgMzAsIDI4LCAzMCwgMzAsIDI4LCAyNiwgMCwgMCwgMCwgMH0gfSwKKwkJeyB7MzAsIDMwLCAzMCwgMzAsIDMwLCAyOCwgMzAsIDMwLCAyOCwgMjYsIDAsIDAsIDAsIDB9IH0sCisJCXsgezMwLCAzMCwgMzAsIDMwLCAzMCwgMjgsIDMwLCAzMCwgMjgsIDI2LCAwLCAwLCAwLCAwfSB9LAorCX0sCisJLmN0bEluZGV4XzJHID0gIHsKKwkJMHgxMSwgMHgxMiwgMHgxNSwgMHgxNywgMHg0MSwgMHg0MiwKKwkJMHg0NSwgMHg0NywgMHgzMSwgMHgzMiwgMHgzNSwgMHgzNywKKwl9LAorCS5jdGxfZnJlcWJpbl8yRyA9IHsKKwkJeworCQkJRlJFUTJGQklOKDI0MTIsIDEpLAorCQkJRlJFUTJGQklOKDI0MTcsIDEpLAorCQkJRlJFUTJGQklOKDI0NTcsIDEpLAorCQkJRlJFUTJGQklOKDI0NjIsIDEpCisJCX0sCisJCXsKKwkJCUZSRVEyRkJJTigyNDEyLCAxKSwKKwkJCUZSRVEyRkJJTigyNDE3LCAxKSwKKwkJCUZSRVEyRkJJTigyNDYyLCAxKSwKKwkJCTB4RkYsCisJCX0sCisKKwkJeworCQkJRlJFUTJGQklOKDI0MTIsIDEpLAorCQkJRlJFUTJGQklOKDI0MTcsIDEpLAorCQkJRlJFUTJGQklOKDI0NjIsIDEpLAorCQkJMHhGRiwKKwkJfSwKKwkJeworCQkJRlJFUTJGQklOKDI0MjIsIDEpLAorCQkJRlJFUTJGQklOKDI0MjcsIDEpLAorCQkJRlJFUTJGQklOKDI0NDcsIDEpLAorCQkJRlJFUTJGQklOKDI0NTIsIDEpCisJCX0sCisKKwkJeworCQkJLyogRGF0YVs0XS5jdGxFZGdlc1swXS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oMjQxMiwgMSksCisJCQkvKiBEYXRhWzRdLmN0bEVkZ2VzWzFdLmJDaGFubmVsICovIEZSRVEyRkJJTigyNDE3LCAxKSwKKwkJCS8qIERhdGFbNF0uY3RsRWRnZXNbMl0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDI0NzIsIDEpLAorCQkJLyogRGF0YVs0XS5jdGxFZGdlc1szXS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oMjQ4NCwgMSksCisJCX0sCisKKwkJeworCQkJLyogRGF0YVs1XS5jdGxFZGdlc1swXS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oMjQxMiwgMSksCisJCQkvKiBEYXRhWzVdLmN0bEVkZ2VzWzFdLmJDaGFubmVsICovIEZSRVEyRkJJTigyNDE3LCAxKSwKKwkJCS8qIERhdGFbNV0uY3RsRWRnZXNbMl0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDI0NzIsIDEpLAorCQkJMCwKKwkJfSwKKworCQl7CisJCQkvKiBEYXRhWzZdLmN0bEVkZ2VzWzBdLmJDaGFubmVsICovIEZSRVEyRkJJTigyNDEyLCAxKSwKKwkJCS8qIERhdGFbNl0uY3RsRWRnZXNbMV0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDI0MTcsIDEpLAorCQkJRlJFUTJGQklOKDI0NzIsIDEpLAorCQkJMCwKKwkJfSwKKworCQl7CisJCQkvKiBEYXRhWzddLmN0bEVkZ2VzWzBdLmJDaGFubmVsICovIEZSRVEyRkJJTigyNDIyLCAxKSwKKwkJCS8qIERhdGFbN10uY3RsRWRnZXNbMV0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDI0MjcsIDEpLAorCQkJLyogRGF0YVs3XS5jdGxFZGdlc1syXS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oMjQ0NywgMSksCisJCQkvKiBEYXRhWzddLmN0bEVkZ2VzWzNdLmJDaGFubmVsICovIEZSRVEyRkJJTigyNDYyLCAxKSwKKwkJfSwKKworCQl7CisJCQkvKiBEYXRhWzhdLmN0bEVkZ2VzWzBdLmJDaGFubmVsICovIEZSRVEyRkJJTigyNDEyLCAxKSwKKwkJCS8qIERhdGFbOF0uY3RsRWRnZXNbMV0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDI0MTcsIDEpLAorCQkJLyogRGF0YVs4XS5jdGxFZGdlc1syXS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oMjQ3MiwgMSksCisJCX0sCisKKwkJeworCQkJLyogRGF0YVs5XS5jdGxFZGdlc1swXS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oMjQxMiwgMSksCisJCQkvKiBEYXRhWzldLmN0bEVkZ2VzWzFdLmJDaGFubmVsICovIEZSRVEyRkJJTigyNDE3LCAxKSwKKwkJCS8qIERhdGFbOV0uY3RsRWRnZXNbMl0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDI0NzIsIDEpLAorCQkJMAorCQl9LAorCisJCXsKKwkJCS8qIERhdGFbMTBdLmN0bEVkZ2VzWzBdLmJDaGFubmVsICovIEZSRVEyRkJJTigyNDEyLCAxKSwKKwkJCS8qIERhdGFbMTBdLmN0bEVkZ2VzWzFdLmJDaGFubmVsICovIEZSRVEyRkJJTigyNDE3LCAxKSwKKwkJCS8qIERhdGFbMTBdLmN0bEVkZ2VzWzJdLmJDaGFubmVsICovIEZSRVEyRkJJTigyNDcyLCAxKSwKKwkJCTAKKwkJfSwKKworCQl7CisJCQkvKiBEYXRhWzExXS5jdGxFZGdlc1swXS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oMjQyMiwgMSksCisJCQkvKiBEYXRhWzExXS5jdGxFZGdlc1sxXS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oMjQyNywgMSksCisJCQkvKiBEYXRhWzExXS5jdGxFZGdlc1syXS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oMjQ0NywgMSksCisJCQkvKiBEYXRhWzExXS5jdGxFZGdlc1szXS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oMjQ2MiwgMSksCisJCX0KKwkgfSwKKwkuY3RsUG93ZXJEYXRhXzJHID0geworCQkgeyB7IENUTCg2MCwgMCksIENUTCg2MCwgMSksIENUTCg2MCwgMCksIENUTCg2MCwgMCkgfSB9LAorCQkgeyB7IENUTCg2MCwgMCksIENUTCg2MCwgMSksIENUTCg2MCwgMCksIENUTCg2MCwgMCkgfSB9LAorCQkgeyB7IENUTCg2MCwgMSksIENUTCg2MCwgMCksIENUTCg2MCwgMCksIENUTCg2MCwgMSkgfSB9LAorCisJCSB7IHsgQ1RMKDYwLCAxKSwgQ1RMKDYwLCAwKSwgQ1RMKDAsIDApLCBDVEwoMCwgMCkgfSB9LAorCQkgeyB7IENUTCg2MCwgMCksIENUTCg2MCwgMSksIENUTCg2MCwgMCksIENUTCg2MCwgMCkgfSB9LAorCQkgeyB7IENUTCg2MCwgMCksIENUTCg2MCwgMSksIENUTCg2MCwgMCksIENUTCg2MCwgMCkgfSB9LAorCisJCSB7IHsgQ1RMKDYwLCAwKSwgQ1RMKDYwLCAxKSwgQ1RMKDYwLCAxKSwgQ1RMKDYwLCAwKSB9IH0sCisJCSB7IHsgQ1RMKDYwLCAwKSwgQ1RMKDYwLCAxKSwgQ1RMKDYwLCAwKSwgQ1RMKDYwLCAwKSB9IH0sCisJCSB7IHsgQ1RMKDYwLCAwKSwgQ1RMKDYwLCAxKSwgQ1RMKDYwLCAwKSwgQ1RMKDYwLCAwKSB9IH0sCisKKwkJIHsgeyBDVEwoNjAsIDApLCBDVEwoNjAsIDEpLCBDVEwoNjAsIDApLCBDVEwoNjAsIDApIH0gfSwKKwkJIHsgeyBDVEwoNjAsIDApLCBDVEwoNjAsIDEpLCBDVEwoNjAsIDEpLCBDVEwoNjAsIDEpIH0gfSwKKwkJIHsgeyBDVEwoNjAsIDApLCBDVEwoNjAsIDEpLCBDVEwoNjAsIDEpLCBDVEwoNjAsIDEpIH0gfSwKKwkgfSwKKwkubW9kYWxIZWFkZXI1RyA9IHsKKwkJLyogNCBpZGxlLHQxLHQyLGIgKDQgYml0cyBwZXIgc2V0dGluZykgKi8KKwkJLmFudEN0cmxDb21tb24gPSBMRTMyKDB4MjIwKSwKKwkJLyogNCByYTFsMSwgcmEybDEsIHJhMWwyLHJhMmwyLHJhMTIgKi8KKwkJLmFudEN0cmxDb21tb24yID0gTEUzMigweDExMTExKSwKKwkJIC8qIGFudEN0cmxDaGFpbiA2IGlkbGUsIHQscixyeDEscngxMixiICgyIGJpdHMgZWFjaCkgKi8KKwkJLmFudEN0cmxDaGFpbiA9IHsKKwkJCUxFMTYoMHgxNTApLCBMRTE2KDB4MTUwKSwgTEUxNigweDE1MCksCisJCX0sCisJCSAvKiB4YXR0ZW4xREIgMyB4YXR0ZW4xX2RiIGZvciBBUjkyODAgKDB4YTIwYy9iMjBjIDU6MCkgKi8KKwkJLnhhdHRlbjFEQiA9IHswLCAwLCAwfSwKKworCQkvKgorCQkgKiB4YXR0ZW4xTWFyZ2luW0FSOTMwMF9NQVhfQ0hBSU5TXTsgMyB4YXR0ZW4xX21hcmdpbgorCQkgKiBmb3IgbWVybGluICgweGEyMGMvYjIwYyAxNjoxMgorCQkgKi8KKwkJLnhhdHRlbjFNYXJnaW4gPSB7MCwgMCwgMH0sCisJCS50ZW1wU2xvcGUgPSA2OCwKKwkJLnZvbHRTbG9wZSA9IDAsCisJCS8qIHNwdXJDaGFucyBzcHVyIGNoYW5uZWxzIGluIHVzdWFsIGZiaW4gY29kaW5nIGZvcm1hdCAqLworCQkuc3B1ckNoYW5zID0ge0ZSRVEyRkJJTig1NTAwLCAwKSwgMCwgMCwgMCwgMH0sCisJCS8qIG5vaXNlRmxvb3JUaHJlc2hDaCBDaGVjayBpZiB0aGUgcmVnaXN0ZXIgaXMgcGVyIGNoYWluICovCisJCS5ub2lzZUZsb29yVGhyZXNoQ2ggPSB7LTEsIDAsIDB9LAorCQkub2IgPSB7MywgMywgM30sIC8qIDMgY2hhaW4gKi8KKwkJLmRiX3N0YWdlMiA9IHszLCAzLCAzfSwgLyogMyBjaGFpbiAqLworCQkuZGJfc3RhZ2UzID0gezMsIDMsIDN9LCAvKiBkb2Vzbid0IGV4aXN0IGZvciAyRyAqLworCQkuZGJfc3RhZ2U0ID0gezMsIDMsIDN9LAkgLyogZG9uJ3QgZXhpc3QgZm9yIDJHICovCisJCS54cGFCaWFzTHZsID0gMCwKKwkJLnR4RnJhbWVUb0RhdGFTdGFydCA9IDB4MGUsCisJCS50eEZyYW1lVG9QYU9uID0gMHgwZSwKKwkJLnR4Q2xpcCA9IDMsIC8qIDQgYml0cyB0eF9jbGlwLCA0IGJpdHMgZGFjX3NjYWxlX2NjayAqLworCQkuYW50ZW5uYUdhaW4gPSAwLAorCQkuc3dpdGNoU2V0dGxpbmcgPSAweDJkLAorCQkuYWRjRGVzaXJlZFNpemUgPSAtMzAsCisJCS50eEVuZFRvWHBhT2ZmID0gMCwKKwkJLnR4RW5kVG9SeE9uID0gMHgyLAorCQkudHhGcmFtZVRvWHBhT24gPSAweGUsCisJCS50aHJlc2g2MiA9IDI4LAorCQkucGFwZFJhdGVNYXNrSHQyMCA9IExFMzIoMHgwY2YwZTBlMCksCisJCS5wYXBkUmF0ZU1hc2tIdDQwID0gTEUzMigweDZjZjBlMGUwKSwKKwkJLmZ1dHVyZU1vZGFsID0geworCQkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkJfSwKKwkgfSwKKwkuYmFzZV9leHQyID0geworCQkudGVtcFNsb3BlTG93ID0gNzIsCisJCS50ZW1wU2xvcGVIaWdoID0gMTA1LAorCQkueGF0dGVuMURCTG93ID0gezAsIDAsIDB9LAorCQkueGF0dGVuMU1hcmdpbkxvdyA9IHswLCAwLCAwfSwKKwkJLnhhdHRlbjFEQkhpZ2ggPSB7MCwgMCwgMH0sCisJCS54YXR0ZW4xTWFyZ2luSGlnaCA9IHswLCAwLCAwfQorCSB9LAorCS5jYWxGcmVxUGllcjVHID0geworCQlGUkVRMkZCSU4oNTE4MCwgMCksCisJCUZSRVEyRkJJTig1MjQwLCAwKSwKKwkJRlJFUTJGQklOKDUzMjAsIDApLAorCQlGUkVRMkZCSU4oNTQwMCwgMCksCisJCUZSRVEyRkJJTig1NTAwLCAwKSwKKwkJRlJFUTJGQklOKDU2MDAsIDApLAorCQlGUkVRMkZCSU4oNTc0NSwgMCksCisJCUZSRVEyRkJJTig1Nzg1LCAwKQorCX0sCisJLmNhbFBpZXJEYXRhNUcgPSB7CisJCQl7CisJCQkJezAsIDAsIDAsIDAsIDB9LAorCQkJCXswLCAwLCAwLCAwLCAwfSwKKwkJCQl7MCwgMCwgMCwgMCwgMH0sCisJCQkJezAsIDAsIDAsIDAsIDB9LAorCQkJCXswLCAwLCAwLCAwLCAwfSwKKwkJCQl7MCwgMCwgMCwgMCwgMH0sCisJCQkJezAsIDAsIDAsIDAsIDB9LAorCQkJCXswLCAwLCAwLCAwLCAwfSwKKwkJCX0sCisJCQl7CisJCQkJezAsIDAsIDAsIDAsIDB9LAorCQkJCXswLCAwLCAwLCAwLCAwfSwKKwkJCQl7MCwgMCwgMCwgMCwgMH0sCisJCQkJezAsIDAsIDAsIDAsIDB9LAorCQkJCXswLCAwLCAwLCAwLCAwfSwKKwkJCQl7MCwgMCwgMCwgMCwgMH0sCisJCQkJezAsIDAsIDAsIDAsIDB9LAorCQkJCXswLCAwLCAwLCAwLCAwfSwKKwkJCX0sCisJCQl7CisJCQkJezAsIDAsIDAsIDAsIDB9LAorCQkJCXswLCAwLCAwLCAwLCAwfSwKKwkJCQl7MCwgMCwgMCwgMCwgMH0sCisJCQkJezAsIDAsIDAsIDAsIDB9LAorCQkJCXswLCAwLCAwLCAwLCAwfSwKKwkJCQl7MCwgMCwgMCwgMCwgMH0sCisJCQkJezAsIDAsIDAsIDAsIDB9LAorCQkJCXswLCAwLCAwLCAwLCAwfSwKKwkJCX0sCisKKwl9LAorCS5jYWxUYXJnZXRfZnJlcWJpbl81RyA9IHsKKwkJRlJFUTJGQklOKDUxODAsIDApLAorCQlGUkVRMkZCSU4oNTIyMCwgMCksCisJCUZSRVEyRkJJTig1MzIwLCAwKSwKKwkJRlJFUTJGQklOKDU0MDAsIDApLAorCQlGUkVRMkZCSU4oNTUwMCwgMCksCisJCUZSRVEyRkJJTig1NjAwLCAwKSwKKwkJRlJFUTJGQklOKDU3NDUsIDApLAorCQlGUkVRMkZCSU4oNTc4NSwgMCkKKwl9LAorCS5jYWxUYXJnZXRfZnJlcWJpbl81R0hUMjAgPSB7CisJCUZSRVEyRkJJTig1MTgwLCAwKSwKKwkJRlJFUTJGQklOKDUyNDAsIDApLAorCQlGUkVRMkZCSU4oNTMyMCwgMCksCisJCUZSRVEyRkJJTig1NDAwLCAwKSwKKwkJRlJFUTJGQklOKDU1MDAsIDApLAorCQlGUkVRMkZCSU4oNTcwMCwgMCksCisJCUZSRVEyRkJJTig1NzQ1LCAwKSwKKwkJRlJFUTJGQklOKDU4MjUsIDApCisJfSwKKwkuY2FsVGFyZ2V0X2ZyZXFiaW5fNUdIVDQwID0geworCQlGUkVRMkZCSU4oNTE5MCwgMCksCisJCUZSRVEyRkJJTig1MjMwLCAwKSwKKwkJRlJFUTJGQklOKDUzMjAsIDApLAorCQlGUkVRMkZCSU4oNTQxMCwgMCksCisJCUZSRVEyRkJJTig1NTEwLCAwKSwKKwkJRlJFUTJGQklOKDU2NzAsIDApLAorCQlGUkVRMkZCSU4oNTc1NSwgMCksCisJCUZSRVEyRkJJTig1ODI1LCAwKQorCSB9LAorCS5jYWxUYXJnZXRQb3dlcjVHID0geworCQkvKiA2LTI0LDM2LDQ4LDU0ICovCisJCXsgezQyLCA0MCwgNDAsIDM0fSB9LAorCQl7IHs0MiwgNDAsIDQwLCAzNH0gfSwKKwkJeyB7NDIsIDQwLCA0MCwgMzR9IH0sCisJCXsgezQyLCA0MCwgNDAsIDM0fSB9LAorCQl7IHs0MiwgNDAsIDQwLCAzNH0gfSwKKwkJeyB7NDIsIDQwLCA0MCwgMzR9IH0sCisJCXsgezQyLCA0MCwgNDAsIDM0fSB9LAorCQl7IHs0MiwgNDAsIDQwLCAzNH0gfSwKKwkgfSwKKwkuY2FsVGFyZ2V0UG93ZXI1R0hUMjAgPSB7CisJCS8qCisJCSAqIDBfOF8xNiwxLTNfOS0xMV8xNy0xOSwKKwkJICogNCw1LDYsNywxMiwxMywxNCwxNSwyMCwyMSwyMiwyMworCQkgKi8KKwkJeyB7NDAsIDQwLCA0MCwgNDAsIDMyLCAyOCwgNDAsIDQwLCAzMiwgMjgsIDQwLCA0MCwgMzIsIDIwfSB9LAorCQl7IHs0MCwgNDAsIDQwLCA0MCwgMzIsIDI4LCA0MCwgNDAsIDMyLCAyOCwgNDAsIDQwLCAzMiwgMjB9IH0sCisJCXsgezQwLCA0MCwgNDAsIDQwLCAzMiwgMjgsIDQwLCA0MCwgMzIsIDI4LCA0MCwgNDAsIDMyLCAyMH0gfSwKKwkJeyB7NDAsIDQwLCA0MCwgNDAsIDMyLCAyOCwgNDAsIDQwLCAzMiwgMjgsIDQwLCA0MCwgMzIsIDIwfSB9LAorCQl7IHs0MCwgNDAsIDQwLCA0MCwgMzIsIDI4LCA0MCwgNDAsIDMyLCAyOCwgNDAsIDQwLCAzMiwgMjB9IH0sCisJCXsgezQwLCA0MCwgNDAsIDQwLCAzMiwgMjgsIDQwLCA0MCwgMzIsIDI4LCA0MCwgNDAsIDMyLCAyMH0gfSwKKwkJeyB7MzgsIDM4LCAzOCwgMzgsIDMyLCAyOCwgMzgsIDM4LCAzMiwgMjgsIDM4LCAzOCwgMzIsIDI2fSB9LAorCQl7IHszNiwgMzYsIDM2LCAzNiwgMzIsIDI4LCAzNiwgMzYsIDMyLCAyOCwgMzYsIDM2LCAzMiwgMjZ9IH0sCisJIH0sCisJLmNhbFRhcmdldFBvd2VyNUdIVDQwID0gIHsKKwkJLyoKKwkJICogMF84XzE2LDEtM185LTExXzE3LTE5LAorCQkgKiA0LDUsNiw3LDEyLDEzLDE0LDE1LDIwLDIxLDIyLDIzCisJCSAqLworCQl7IHs0MCwgNDAsIDQwLCAzOCwgMzAsIDI2LCA0MCwgNDAsIDMwLCAyNiwgNDAsIDQwLCAzMCwgMjR9IH0sCisJCXsgezQwLCA0MCwgNDAsIDM4LCAzMCwgMjYsIDQwLCA0MCwgMzAsIDI2LCA0MCwgNDAsIDMwLCAyNH0gfSwKKwkJeyB7NDAsIDQwLCA0MCwgMzgsIDMwLCAyNiwgNDAsIDQwLCAzMCwgMjYsIDQwLCA0MCwgMzAsIDI0fSB9LAorCQl7IHs0MCwgNDAsIDQwLCAzOCwgMzAsIDI2LCA0MCwgNDAsIDMwLCAyNiwgNDAsIDQwLCAzMCwgMjR9IH0sCisJCXsgezQwLCA0MCwgNDAsIDM4LCAzMCwgMjYsIDQwLCA0MCwgMzAsIDI2LCA0MCwgNDAsIDMwLCAyNH0gfSwKKwkJeyB7NDAsIDQwLCA0MCwgMzgsIDMwLCAyNiwgNDAsIDQwLCAzMCwgMjYsIDQwLCA0MCwgMzAsIDI0fSB9LAorCQl7IHszNiwgMzYsIDM2LCAzNiwgMzAsIDI2LCAzNiwgMzYsIDMwLCAyNiwgMzYsIDM2LCAzMCwgMjR9IH0sCisJCXsgezM0LCAzNCwgMzQsIDM0LCAzMCwgMjYsIDM0LCAzNCwgMzAsIDI2LCAzNCwgMzQsIDMwLCAyNH0gfSwKKwkgfSwKKwkuY3RsSW5kZXhfNUcgPSAgeworCQkweDEwLCAweDE2LCAweDE4LCAweDQwLCAweDQ2LAorCQkweDQ4LCAweDMwLCAweDM2LCAweDM4CisJfSwKKwkuY3RsX2ZyZXFiaW5fNUcgPSAgeworCQl7CisJCQkvKiBEYXRhWzBdLmN0bEVkZ2VzWzBdLmJDaGFubmVsICovIEZSRVEyRkJJTig1MTgwLCAwKSwKKwkJCS8qIERhdGFbMF0uY3RsRWRnZXNbMV0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDUyNjAsIDApLAorCQkJLyogRGF0YVswXS5jdGxFZGdlc1syXS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oNTI4MCwgMCksCisJCQkvKiBEYXRhWzBdLmN0bEVkZ2VzWzNdLmJDaGFubmVsICovIEZSRVEyRkJJTig1NTAwLCAwKSwKKwkJCS8qIERhdGFbMF0uY3RsRWRnZXNbNF0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDU2MDAsIDApLAorCQkJLyogRGF0YVswXS5jdGxFZGdlc1s1XS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oNTcwMCwgMCksCisJCQkvKiBEYXRhWzBdLmN0bEVkZ2VzWzZdLmJDaGFubmVsICovIEZSRVEyRkJJTig1NzQ1LCAwKSwKKwkJCS8qIERhdGFbMF0uY3RsRWRnZXNbN10uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDU4MjUsIDApCisJCX0sCisJCXsKKwkJCS8qIERhdGFbMV0uY3RsRWRnZXNbMF0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDUxODAsIDApLAorCQkJLyogRGF0YVsxXS5jdGxFZGdlc1sxXS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oNTI2MCwgMCksCisJCQkvKiBEYXRhWzFdLmN0bEVkZ2VzWzJdLmJDaGFubmVsICovIEZSRVEyRkJJTig1MjgwLCAwKSwKKwkJCS8qIERhdGFbMV0uY3RsRWRnZXNbM10uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDU1MDAsIDApLAorCQkJLyogRGF0YVsxXS5jdGxFZGdlc1s0XS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oNTUyMCwgMCksCisJCQkvKiBEYXRhWzFdLmN0bEVkZ2VzWzVdLmJDaGFubmVsICovIEZSRVEyRkJJTig1NzAwLCAwKSwKKwkJCS8qIERhdGFbMV0uY3RsRWRnZXNbNl0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDU3NDUsIDApLAorCQkJLyogRGF0YVsxXS5jdGxFZGdlc1s3XS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oNTgyNSwgMCkKKwkJfSwKKworCQl7CisJCQkvKiBEYXRhWzJdLmN0bEVkZ2VzWzBdLmJDaGFubmVsICovIEZSRVEyRkJJTig1MTkwLCAwKSwKKwkJCS8qIERhdGFbMl0uY3RsRWRnZXNbMV0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDUyMzAsIDApLAorCQkJLyogRGF0YVsyXS5jdGxFZGdlc1syXS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oNTI3MCwgMCksCisJCQkvKiBEYXRhWzJdLmN0bEVkZ2VzWzNdLmJDaGFubmVsICovIEZSRVEyRkJJTig1MzEwLCAwKSwKKwkJCS8qIERhdGFbMl0uY3RsRWRnZXNbNF0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDU1MTAsIDApLAorCQkJLyogRGF0YVsyXS5jdGxFZGdlc1s1XS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oNTU1MCwgMCksCisJCQkvKiBEYXRhWzJdLmN0bEVkZ2VzWzZdLmJDaGFubmVsICovIEZSRVEyRkJJTig1NjcwLCAwKSwKKwkJCS8qIERhdGFbMl0uY3RsRWRnZXNbN10uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDU3NTUsIDApCisJCX0sCisKKwkJeworCQkJLyogRGF0YVszXS5jdGxFZGdlc1swXS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oNTE4MCwgMCksCisJCQkvKiBEYXRhWzNdLmN0bEVkZ2VzWzFdLmJDaGFubmVsICovIEZSRVEyRkJJTig1MjAwLCAwKSwKKwkJCS8qIERhdGFbM10uY3RsRWRnZXNbMl0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDUyNjAsIDApLAorCQkJLyogRGF0YVszXS5jdGxFZGdlc1szXS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oNTMyMCwgMCksCisJCQkvKiBEYXRhWzNdLmN0bEVkZ2VzWzRdLmJDaGFubmVsICovIEZSRVEyRkJJTig1NTAwLCAwKSwKKwkJCS8qIERhdGFbM10uY3RsRWRnZXNbNV0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDU3MDAsIDApLAorCQkJLyogRGF0YVszXS5jdGxFZGdlc1s2XS5iQ2hhbm5lbCAqLyAweEZGLAorCQkJLyogRGF0YVszXS5jdGxFZGdlc1s3XS5iQ2hhbm5lbCAqLyAweEZGLAorCQl9LAorCisJCXsKKwkJCS8qIERhdGFbNF0uY3RsRWRnZXNbMF0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDUxODAsIDApLAorCQkJLyogRGF0YVs0XS5jdGxFZGdlc1sxXS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oNTI2MCwgMCksCisJCQkvKiBEYXRhWzRdLmN0bEVkZ2VzWzJdLmJDaGFubmVsICovIEZSRVEyRkJJTig1NTAwLCAwKSwKKwkJCS8qIERhdGFbNF0uY3RsRWRnZXNbM10uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDU3MDAsIDApLAorCQkJLyogRGF0YVs0XS5jdGxFZGdlc1s0XS5iQ2hhbm5lbCAqLyAweEZGLAorCQkJLyogRGF0YVs0XS5jdGxFZGdlc1s1XS5iQ2hhbm5lbCAqLyAweEZGLAorCQkJLyogRGF0YVs0XS5jdGxFZGdlc1s2XS5iQ2hhbm5lbCAqLyAweEZGLAorCQkJLyogRGF0YVs0XS5jdGxFZGdlc1s3XS5iQ2hhbm5lbCAqLyAweEZGLAorCQl9LAorCisJCXsKKwkJCS8qIERhdGFbNV0uY3RsRWRnZXNbMF0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDUxOTAsIDApLAorCQkJLyogRGF0YVs1XS5jdGxFZGdlc1sxXS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oNTI3MCwgMCksCisJCQkvKiBEYXRhWzVdLmN0bEVkZ2VzWzJdLmJDaGFubmVsICovIEZSRVEyRkJJTig1MzEwLCAwKSwKKwkJCS8qIERhdGFbNV0uY3RsRWRnZXNbM10uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDU1MTAsIDApLAorCQkJLyogRGF0YVs1XS5jdGxFZGdlc1s0XS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oNTU5MCwgMCksCisJCQkvKiBEYXRhWzVdLmN0bEVkZ2VzWzVdLmJDaGFubmVsICovIEZSRVEyRkJJTig1NjcwLCAwKSwKKwkJCS8qIERhdGFbNV0uY3RsRWRnZXNbNl0uYkNoYW5uZWwgKi8gMHhGRiwKKwkJCS8qIERhdGFbNV0uY3RsRWRnZXNbN10uYkNoYW5uZWwgKi8gMHhGRgorCQl9LAorCisJCXsKKwkJCS8qIERhdGFbNl0uY3RsRWRnZXNbMF0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDUxODAsIDApLAorCQkJLyogRGF0YVs2XS5jdGxFZGdlc1sxXS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oNTIwMCwgMCksCisJCQkvKiBEYXRhWzZdLmN0bEVkZ2VzWzJdLmJDaGFubmVsICovIEZSRVEyRkJJTig1MjIwLCAwKSwKKwkJCS8qIERhdGFbNl0uY3RsRWRnZXNbM10uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDUyNjAsIDApLAorCQkJLyogRGF0YVs2XS5jdGxFZGdlc1s0XS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oNTUwMCwgMCksCisJCQkvKiBEYXRhWzZdLmN0bEVkZ2VzWzVdLmJDaGFubmVsICovIEZSRVEyRkJJTig1NjAwLCAwKSwKKwkJCS8qIERhdGFbNl0uY3RsRWRnZXNbNl0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDU3MDAsIDApLAorCQkJLyogRGF0YVs2XS5jdGxFZGdlc1s3XS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oNTc0NSwgMCkKKwkJfSwKKworCQl7CisJCQkvKiBEYXRhWzddLmN0bEVkZ2VzWzBdLmJDaGFubmVsICovIEZSRVEyRkJJTig1MTgwLCAwKSwKKwkJCS8qIERhdGFbN10uY3RsRWRnZXNbMV0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDUyNjAsIDApLAorCQkJLyogRGF0YVs3XS5jdGxFZGdlc1syXS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oNTMyMCwgMCksCisJCQkvKiBEYXRhWzddLmN0bEVkZ2VzWzNdLmJDaGFubmVsICovIEZSRVEyRkJJTig1NTAwLCAwKSwKKwkJCS8qIERhdGFbN10uY3RsRWRnZXNbNF0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDU1NjAsIDApLAorCQkJLyogRGF0YVs3XS5jdGxFZGdlc1s1XS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oNTcwMCwgMCksCisJCQkvKiBEYXRhWzddLmN0bEVkZ2VzWzZdLmJDaGFubmVsICovIEZSRVEyRkJJTig1NzQ1LCAwKSwKKwkJCS8qIERhdGFbN10uY3RsRWRnZXNbN10uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDU4MjUsIDApCisJCX0sCisKKwkJeworCQkJLyogRGF0YVs4XS5jdGxFZGdlc1swXS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oNTE5MCwgMCksCisJCQkvKiBEYXRhWzhdLmN0bEVkZ2VzWzFdLmJDaGFubmVsICovIEZSRVEyRkJJTig1MjMwLCAwKSwKKwkJCS8qIERhdGFbOF0uY3RsRWRnZXNbMl0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDUyNzAsIDApLAorCQkJLyogRGF0YVs4XS5jdGxFZGdlc1szXS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oNTUxMCwgMCksCisJCQkvKiBEYXRhWzhdLmN0bEVkZ2VzWzRdLmJDaGFubmVsICovIEZSRVEyRkJJTig1NTUwLCAwKSwKKwkJCS8qIERhdGFbOF0uY3RsRWRnZXNbNV0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDU2NzAsIDApLAorCQkJLyogRGF0YVs4XS5jdGxFZGdlc1s2XS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oNTc1NSwgMCksCisJCQkvKiBEYXRhWzhdLmN0bEVkZ2VzWzddLmJDaGFubmVsICovIEZSRVEyRkJJTig1Nzk1LCAwKQorCQl9CisJIH0sCisJLmN0bFBvd2VyRGF0YV81RyA9IHsKKwkJeworCQkJeworCQkJCUNUTCg2MCwgMSksIENUTCg2MCwgMSksIENUTCg2MCwgMSksIENUTCg2MCwgMSksCisJCQkJQ1RMKDYwLCAxKSwgQ1RMKDYwLCAxKSwgQ1RMKDYwLCAxKSwgQ1RMKDYwLCAwKSwKKwkJCX0KKwkJfSwKKwkJeworCQkJeworCQkJCUNUTCg2MCwgMSksIENUTCg2MCwgMSksIENUTCg2MCwgMSksIENUTCg2MCwgMSksCisJCQkJQ1RMKDYwLCAxKSwgQ1RMKDYwLCAxKSwgQ1RMKDYwLCAxKSwgQ1RMKDYwLCAwKSwKKwkJCX0KKwkJfSwKKwkJeworCQkJeworCQkJCUNUTCg2MCwgMCksIENUTCg2MCwgMSksIENUTCg2MCwgMCksIENUTCg2MCwgMSksCisJCQkJQ1RMKDYwLCAxKSwgQ1RMKDYwLCAxKSwgQ1RMKDYwLCAxKSwgQ1RMKDYwLCAxKSwKKwkJCX0KKwkJfSwKKwkJeworCQkJeworCQkJCUNUTCg2MCwgMCksIENUTCg2MCwgMSksIENUTCg2MCwgMSksIENUTCg2MCwgMCksCisJCQkJQ1RMKDYwLCAxKSwgQ1RMKDYwLCAwKSwgQ1RMKDYwLCAwKSwgQ1RMKDYwLCAwKSwKKwkJCX0KKwkJfSwKKwkJeworCQkJeworCQkJCUNUTCg2MCwgMSksIENUTCg2MCwgMSksIENUTCg2MCwgMSksIENUTCg2MCwgMCksCisJCQkJQ1RMKDYwLCAwKSwgQ1RMKDYwLCAwKSwgQ1RMKDYwLCAwKSwgQ1RMKDYwLCAwKSwKKwkJCX0KKwkJfSwKKwkJeworCQkJeworCQkJCUNUTCg2MCwgMSksIENUTCg2MCwgMSksIENUTCg2MCwgMSksIENUTCg2MCwgMSksCisJCQkJQ1RMKDYwLCAxKSwgQ1RMKDYwLCAwKSwgQ1RMKDYwLCAwKSwgQ1RMKDYwLCAwKSwKKwkJCX0KKwkJfSwKKwkJeworCQkJeworCQkJCUNUTCg2MCwgMSksIENUTCg2MCwgMSksIENUTCg2MCwgMSksIENUTCg2MCwgMSksCisJCQkJQ1RMKDYwLCAxKSwgQ1RMKDYwLCAxKSwgQ1RMKDYwLCAxKSwgQ1RMKDYwLCAxKSwKKwkJCX0KKwkJfSwKKwkJeworCQkJeworCQkJCUNUTCg2MCwgMSksIENUTCg2MCwgMSksIENUTCg2MCwgMCksIENUTCg2MCwgMSksCisJCQkJQ1RMKDYwLCAxKSwgQ1RMKDYwLCAxKSwgQ1RMKDYwLCAxKSwgQ1RMKDYwLCAwKSwKKwkJCX0KKwkJfSwKKwkJeworCQkJeworCQkJCUNUTCg2MCwgMSksIENUTCg2MCwgMCksIENUTCg2MCwgMSksIENUTCg2MCwgMSksCisJCQkJQ1RMKDYwLCAxKSwgQ1RMKDYwLCAxKSwgQ1RMKDYwLCAwKSwgQ1RMKDYwLCAxKSwKKwkJCX0KKwkJfSwKKwkgfQorfTsKKworCitzdGF0aWMgY29uc3Qgc3RydWN0IGFyOTMwMF9lZXByb20gYXI5MzAwX2gxMTIgPSB7CisJLmVlcHJvbVZlcnNpb24gPSAyLAorCS50ZW1wbGF0ZVZlcnNpb24gPSAzLAorCS5tYWNBZGRyID0gezB4MDAsIDB4MDMsIDB4N2YsIDB4MCwgMHgwLCAweDB9LAorCS5jdXN0RGF0YSA9IHsiaDExMi0yNDEtZjAwMDAifSwKKwkuYmFzZUVlcEhlYWRlciA9IHsKKwkJLnJlZ0RtbiA9IHsgTEUxNigwKSwgTEUxNigweDFmKSB9LAorCQkudHhyeE1hc2sgPSAgMHg3NywgLyogNCBiaXRzIHR4IGFuZCA0IGJpdHMgcnggKi8KKwkJLm9wQ2FwRmxhZ3MgPSB7CisJCQkub3BGbGFncyA9IEFSNTQxNl9PUEZMQUdTXzExRyB8IEFSNTQxNl9PUEZMQUdTXzExQSwKKwkJCS5lZXBNaXNjID0gMCwKKwkJfSwKKwkJLnJmU2lsZW50ID0gMCwKKwkJLmJsdWVUb290aE9wdGlvbnMgPSAwLAorCQkuZGV2aWNlQ2FwID0gMCwKKwkJLmRldmljZVR5cGUgPSA1LCAvKiB0YWtlcyBsb3dlciBieXRlIGluIGVlcHJvbSBsb2NhdGlvbiAqLworCQkucHdyVGFibGVPZmZzZXQgPSBBUjkzMDBfUFdSX1RBQkxFX09GRlNFVCwKKwkJLnBhcmFtc19mb3JfdHVuaW5nX2NhcHMgPSB7MCwgMH0sCisJCS5mZWF0dXJlRW5hYmxlID0gMHgwZCwKKwkJLyoKKwkJICogYml0MCAtIGVuYWJsZSB0eCB0ZW1wIGNvbXAgLSBkaXNhYmxlZAorCQkgKiBiaXQxIC0gZW5hYmxlIHR4IHZvbHQgY29tcCAtIGRpc2FibGVkCisJCSAqIGJpdDIgLSBlbmFibGUgZmFzdENsb2NrIC0gZW5hYmxlZAorCQkgKiBiaXQzIC0gZW5hYmxlIGRvdWJsaW5nIC0gZW5hYmxlZAorCQkgKiBiaXQ0IC0gZW5hYmxlIGludGVybmFsIHJlZ3VsYXRvciAtIGRpc2FibGVkCisJCSAqIGJpdDUgLSBlbmFibGUgcGEgcHJlZGlzdG9ydGlvbiAtIGRpc2FibGVkCisJCSAqLworCQkubWlzY0NvbmZpZ3VyYXRpb24gPSAwLCAvKiBiaXQwIC0gdHVybiBkb3duIGRyaXZlc3RyZW5ndGggKi8KKwkJLmVlcHJvbVdyaXRlRW5hYmxlR3BpbyA9IDYsCisJCS53bGFuRGlzYWJsZUdwaW8gPSAwLAorCQkud2xhbkxlZEdwaW8gPSA4LAorCQkucnhCYW5kU2VsZWN0R3BpbyA9IDB4ZmYsCisJCS50eHJ4Z2FpbiA9IDB4MTAsCisJCS5zd3JlZyA9IDAsCisJfSwKKwkubW9kYWxIZWFkZXIyRyA9IHsKKwkJLyogYXI5MzAwX21vZGFsX2VlcF9oZWFkZXIgIDJnICovCisJCS8qIDQgaWRsZSx0MSx0MixiKDQgYml0cyBwZXIgc2V0dGluZykgKi8KKwkJLmFudEN0cmxDb21tb24gPSBMRTMyKDB4MTEwKSwKKwkJLyogNCByYTFsMSwgcmEybDEsIHJhMWwyLCByYTJsMiwgcmExMiAqLworCQkuYW50Q3RybENvbW1vbjIgPSBMRTMyKDB4NDQ0NDQpLAorCisJCS8qCisJCSAqIGFudEN0cmxDaGFpbltBUjkzMDBfTUFYX0NIQUlOU107IDYgaWRsZSwgdCwgciwKKwkJICogcngxLCByeDEyLCBiICgyIGJpdHMgZWFjaCkKKwkJICovCisJCS5hbnRDdHJsQ2hhaW4gPSB7IExFMTYoMHgxNTApLCBMRTE2KDB4MTUwKSwgTEUxNigweDE1MCkgfSwKKworCQkvKgorCQkgKiB4YXR0ZW4xREJbQVI5MzAwX01BWF9DSEFJTlNdOyAgMyB4YXR0ZW4xX2RiCisJCSAqIGZvciBhcjkyODAgKDB4YTIwYy9iMjBjIDU6MCkKKwkJICovCisJCS54YXR0ZW4xREIgPSB7MCwgMCwgMH0sCisKKwkJLyoKKwkJICogeGF0dGVuMU1hcmdpbltBUjkzMDBfTUFYX0NIQUlOU107IDMgeGF0dGVuMV9tYXJnaW4KKwkJICogZm9yIGFyOTI4MCAoMHhhMjBjL2IyMGMgMTY6MTIKKwkJICovCisJCS54YXR0ZW4xTWFyZ2luID0gezAsIDAsIDB9LAorCQkudGVtcFNsb3BlID0gMjUsCisJCS52b2x0U2xvcGUgPSAwLAorCisJCS8qCisJCSAqIHNwdXJDaGFuc1tPU1BSRVlfRUVQUk9NX01PREFMX1NQVVJTXTsgc3B1cgorCQkgKiBjaGFubmVscyBpbiB1c3VhbCBmYmluIGNvZGluZyBmb3JtYXQKKwkJICovCisJCS5zcHVyQ2hhbnMgPSB7RlJFUTJGQklOKDI0NjQsIDEpLCAwLCAwLCAwLCAwfSwKKworCQkvKgorCQkgKiBub2lzZUZsb29yVGhyZXNoQ2hbQVI5MzAwX01BWF9DSEFJTlNdOyAzIENoZWNrCisJCSAqIGlmIHRoZSByZWdpc3RlciBpcyBwZXIgY2hhaW4KKwkJICovCisJCS5ub2lzZUZsb29yVGhyZXNoQ2ggPSB7LTEsIDAsIDB9LAorCQkub2IgPSB7MSwgMSwgMX0sLyogMyBjaGFpbiAqLworCQkuZGJfc3RhZ2UyID0gezEsIDEsIDF9LCAvKiAzIGNoYWluICAqLworCQkuZGJfc3RhZ2UzID0gezAsIDAsIDB9LAorCQkuZGJfc3RhZ2U0ID0gezAsIDAsIDB9LAorCQkueHBhQmlhc0x2bCA9IDAsCisJCS50eEZyYW1lVG9EYXRhU3RhcnQgPSAweDBlLAorCQkudHhGcmFtZVRvUGFPbiA9IDB4MGUsCisJCS50eENsaXAgPSAzLCAvKiA0IGJpdHMgdHhfY2xpcCwgNCBiaXRzIGRhY19zY2FsZV9jY2sgKi8KKwkJLmFudGVubmFHYWluID0gMCwKKwkJLnN3aXRjaFNldHRsaW5nID0gMHgyYywKKwkJLmFkY0Rlc2lyZWRTaXplID0gLTMwLAorCQkudHhFbmRUb1hwYU9mZiA9IDAsCisJCS50eEVuZFRvUnhPbiA9IDB4MiwKKwkJLnR4RnJhbWVUb1hwYU9uID0gMHhlLAorCQkudGhyZXNoNjIgPSAyOCwKKwkJLnBhcGRSYXRlTWFza0h0MjAgPSBMRTMyKDB4ODBjMDgwKSwKKwkJLnBhcGRSYXRlTWFza0h0NDAgPSBMRTMyKDB4ODBjMDgwKSwKKwkJLmZ1dHVyZU1vZGFsID0geworCQkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkJfSwKKwl9LAorCS5iYXNlX2V4dDEgPSB7CisJCS5hbnRfZGl2X2NvbnRyb2wgPSAwLAorCQkuZnV0dXJlID0gezAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9CisJfSwKKwkuY2FsRnJlcVBpZXIyRyA9IHsKKwkJRlJFUTJGQklOKDI0MTIsIDEpLAorCQlGUkVRMkZCSU4oMjQzNywgMSksCisJCUZSRVEyRkJJTigyNDcyLCAxKSwKKwl9LAorCS8qIGFyOTMwMF9jYWxfZGF0YV9wZXJfZnJlcV9vcF9sb29wIDJnICovCisJLmNhbFBpZXJEYXRhMkcgPSB7CisJCXsgezAsIDAsIDAsIDAsIDAsIDB9LCB7MCwgMCwgMCwgMCwgMCwgMH0sIHswLCAwLCAwLCAwLCAwLCAwfSB9LAorCQl7IHswLCAwLCAwLCAwLCAwLCAwfSwgezAsIDAsIDAsIDAsIDAsIDB9LCB7MCwgMCwgMCwgMCwgMCwgMH0gfSwKKwkJeyB7MCwgMCwgMCwgMCwgMCwgMH0sIHswLCAwLCAwLCAwLCAwLCAwfSwgezAsIDAsIDAsIDAsIDAsIDB9IH0sCisJfSwKKwkuY2FsVGFyZ2V0X2ZyZXFiaW5fQ2NrID0geworCQlGUkVRMkZCSU4oMjQxMiwgMSksCisJCUZSRVEyRkJJTigyNDg0LCAxKSwKKwl9LAorCS5jYWxUYXJnZXRfZnJlcWJpbl8yRyA9IHsKKwkJRlJFUTJGQklOKDI0MTIsIDEpLAorCQlGUkVRMkZCSU4oMjQzNywgMSksCisJCUZSRVEyRkJJTigyNDcyLCAxKQorCX0sCisJLmNhbFRhcmdldF9mcmVxYmluXzJHSFQyMCA9IHsKKwkJRlJFUTJGQklOKDI0MTIsIDEpLAorCQlGUkVRMkZCSU4oMjQzNywgMSksCisJCUZSRVEyRkJJTigyNDcyLCAxKQorCX0sCisJLmNhbFRhcmdldF9mcmVxYmluXzJHSFQ0MCA9IHsKKwkJRlJFUTJGQklOKDI0MTIsIDEpLAorCQlGUkVRMkZCSU4oMjQzNywgMSksCisJCUZSRVEyRkJJTigyNDcyLCAxKQorCX0sCisJLmNhbFRhcmdldFBvd2VyQ2NrID0geworCQkvKiAxTC01TCw1UywxMUwsMTFTICovCisJCXsgezM0LCAzNCwgMzQsIDM0fSB9LAorCQl7IHszNCwgMzQsIDM0LCAzNH0gfSwKKwl9LAorCS5jYWxUYXJnZXRQb3dlcjJHID0geworCQkvKiA2LTI0LDM2LDQ4LDU0ICovCisJCXsgezM0LCAzNCwgMzIsIDMyfSB9LAorCQl7IHszNCwgMzQsIDMyLCAzMn0gfSwKKwkJeyB7MzQsIDM0LCAzMiwgMzJ9IH0sCisJfSwKKwkuY2FsVGFyZ2V0UG93ZXIyR0hUMjAgPSB7CisJCXsgezMyLCAzMiwgMzIsIDMyLCAzMiwgMzAsIDMyLCAzMiwgMzAsIDI4LCAyOCwgMjgsIDI4LCAyNH0gfSwKKwkJeyB7MzIsIDMyLCAzMiwgMzIsIDMyLCAzMCwgMzIsIDMyLCAzMCwgMjgsIDI4LCAyOCwgMjgsIDI0fSB9LAorCQl7IHszMiwgMzIsIDMyLCAzMiwgMzIsIDMwLCAzMiwgMzIsIDMwLCAyOCwgMjgsIDI4LCAyOCwgMjR9IH0sCisJfSwKKwkuY2FsVGFyZ2V0UG93ZXIyR0hUNDAgPSB7CisJCXsgezMwLCAzMCwgMzAsIDMwLCAzMCwgMjgsIDMwLCAzMCwgMjgsIDI2LCAyNiwgMjYsIDI2LCAyMn0gfSwKKwkJeyB7MzAsIDMwLCAzMCwgMzAsIDMwLCAyOCwgMzAsIDMwLCAyOCwgMjYsIDI2LCAyNiwgMjYsIDIyfSB9LAorCQl7IHszMCwgMzAsIDMwLCAzMCwgMzAsIDI4LCAzMCwgMzAsIDI4LCAyNiwgMjYsIDI2LCAyNiwgMjJ9IH0sCisJfSwKKwkuY3RsSW5kZXhfMkcgPSAgeworCQkweDExLCAweDEyLCAweDE1LCAweDE3LCAweDQxLCAweDQyLAorCQkweDQ1LCAweDQ3LCAweDMxLCAweDMyLCAweDM1LCAweDM3LAorCX0sCisJLmN0bF9mcmVxYmluXzJHID0geworCQl7CisJCQlGUkVRMkZCSU4oMjQxMiwgMSksCisJCQlGUkVRMkZCSU4oMjQxNywgMSksCisJCQlGUkVRMkZCSU4oMjQ1NywgMSksCisJCQlGUkVRMkZCSU4oMjQ2MiwgMSkKKwkJfSwKKwkJeworCQkJRlJFUTJGQklOKDI0MTIsIDEpLAorCQkJRlJFUTJGQklOKDI0MTcsIDEpLAorCQkJRlJFUTJGQklOKDI0NjIsIDEpLAorCQkJMHhGRiwKKwkJfSwKKworCQl7CisJCQlGUkVRMkZCSU4oMjQxMiwgMSksCisJCQlGUkVRMkZCSU4oMjQxNywgMSksCisJCQlGUkVRMkZCSU4oMjQ2MiwgMSksCisJCQkweEZGLAorCQl9LAorCQl7CisJCQlGUkVRMkZCSU4oMjQyMiwgMSksCisJCQlGUkVRMkZCSU4oMjQyNywgMSksCisJCQlGUkVRMkZCSU4oMjQ0NywgMSksCisJCQlGUkVRMkZCSU4oMjQ1MiwgMSkKKwkJfSwKKworCQl7CisJCQkvKiBEYXRhWzRdLmN0bEVkZ2VzWzBdLmJDaGFubmVsICovIEZSRVEyRkJJTigyNDEyLCAxKSwKKwkJCS8qIERhdGFbNF0uY3RsRWRnZXNbMV0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDI0MTcsIDEpLAorCQkJLyogRGF0YVs0XS5jdGxFZGdlc1syXS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oMjQ3MiwgMSksCisJCQkvKiBEYXRhWzRdLmN0bEVkZ2VzWzNdLmJDaGFubmVsICovIEZSRVEyRkJJTigyNDg0LCAxKSwKKwkJfSwKKworCQl7CisJCQkvKiBEYXRhWzVdLmN0bEVkZ2VzWzBdLmJDaGFubmVsICovIEZSRVEyRkJJTigyNDEyLCAxKSwKKwkJCS8qIERhdGFbNV0uY3RsRWRnZXNbMV0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDI0MTcsIDEpLAorCQkJLyogRGF0YVs1XS5jdGxFZGdlc1syXS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oMjQ3MiwgMSksCisJCQkwLAorCQl9LAorCisJCXsKKwkJCS8qIERhdGFbNl0uY3RsRWRnZXNbMF0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDI0MTIsIDEpLAorCQkJLyogRGF0YVs2XS5jdGxFZGdlc1sxXS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oMjQxNywgMSksCisJCQlGUkVRMkZCSU4oMjQ3MiwgMSksCisJCQkwLAorCQl9LAorCisJCXsKKwkJCS8qIERhdGFbN10uY3RsRWRnZXNbMF0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDI0MjIsIDEpLAorCQkJLyogRGF0YVs3XS5jdGxFZGdlc1sxXS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oMjQyNywgMSksCisJCQkvKiBEYXRhWzddLmN0bEVkZ2VzWzJdLmJDaGFubmVsICovIEZSRVEyRkJJTigyNDQ3LCAxKSwKKwkJCS8qIERhdGFbN10uY3RsRWRnZXNbM10uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDI0NjIsIDEpLAorCQl9LAorCisJCXsKKwkJCS8qIERhdGFbOF0uY3RsRWRnZXNbMF0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDI0MTIsIDEpLAorCQkJLyogRGF0YVs4XS5jdGxFZGdlc1sxXS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oMjQxNywgMSksCisJCQkvKiBEYXRhWzhdLmN0bEVkZ2VzWzJdLmJDaGFubmVsICovIEZSRVEyRkJJTigyNDcyLCAxKSwKKwkJfSwKKworCQl7CisJCQkvKiBEYXRhWzldLmN0bEVkZ2VzWzBdLmJDaGFubmVsICovIEZSRVEyRkJJTigyNDEyLCAxKSwKKwkJCS8qIERhdGFbOV0uY3RsRWRnZXNbMV0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDI0MTcsIDEpLAorCQkJLyogRGF0YVs5XS5jdGxFZGdlc1syXS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oMjQ3MiwgMSksCisJCQkwCisJCX0sCisKKwkJeworCQkJLyogRGF0YVsxMF0uY3RsRWRnZXNbMF0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDI0MTIsIDEpLAorCQkJLyogRGF0YVsxMF0uY3RsRWRnZXNbMV0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDI0MTcsIDEpLAorCQkJLyogRGF0YVsxMF0uY3RsRWRnZXNbMl0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDI0NzIsIDEpLAorCQkJMAorCQl9LAorCisJCXsKKwkJCS8qIERhdGFbMTFdLmN0bEVkZ2VzWzBdLmJDaGFubmVsICovIEZSRVEyRkJJTigyNDIyLCAxKSwKKwkJCS8qIERhdGFbMTFdLmN0bEVkZ2VzWzFdLmJDaGFubmVsICovIEZSRVEyRkJJTigyNDI3LCAxKSwKKwkJCS8qIERhdGFbMTFdLmN0bEVkZ2VzWzJdLmJDaGFubmVsICovIEZSRVEyRkJJTigyNDQ3LCAxKSwKKwkJCS8qIERhdGFbMTFdLmN0bEVkZ2VzWzNdLmJDaGFubmVsICovIEZSRVEyRkJJTigyNDYyLCAxKSwKKwkJfQorCX0sCisJLmN0bFBvd2VyRGF0YV8yRyA9IHsKKwkJeyB7IENUTCg2MCwgMCksIENUTCg2MCwgMSksIENUTCg2MCwgMCksIENUTCg2MCwgMCkgfSB9LAorCQl7IHsgQ1RMKDYwLCAwKSwgQ1RMKDYwLCAxKSwgQ1RMKDYwLCAwKSwgQ1RMKDYwLCAwKSB9IH0sCisJCXsgeyBDVEwoNjAsIDEpLCBDVEwoNjAsIDApLCBDVEwoNjAsIDApLCBDVEwoNjAsIDEpIH0gfSwKKworCQl7IHsgQ1RMKDYwLCAxKSwgQ1RMKDYwLCAwKSwgQ1RMKDAsIDApLCBDVEwoMCwgMCkgfSB9LAorCQl7IHsgQ1RMKDYwLCAwKSwgQ1RMKDYwLCAxKSwgQ1RMKDYwLCAwKSwgQ1RMKDYwLCAwKSB9IH0sCisJCXsgeyBDVEwoNjAsIDApLCBDVEwoNjAsIDEpLCBDVEwoNjAsIDApLCBDVEwoNjAsIDApIH0gfSwKKworCQl7IHsgQ1RMKDYwLCAwKSwgQ1RMKDYwLCAxKSwgQ1RMKDYwLCAxKSwgQ1RMKDYwLCAwKSB9IH0sCisJCXsgeyBDVEwoNjAsIDApLCBDVEwoNjAsIDEpLCBDVEwoNjAsIDApLCBDVEwoNjAsIDApIH0gfSwKKwkJeyB7IENUTCg2MCwgMCksIENUTCg2MCwgMSksIENUTCg2MCwgMCksIENUTCg2MCwgMCkgfSB9LAorCisJCXsgeyBDVEwoNjAsIDApLCBDVEwoNjAsIDEpLCBDVEwoNjAsIDApLCBDVEwoNjAsIDApIH0gfSwKKwkJeyB7IENUTCg2MCwgMCksIENUTCg2MCwgMSksIENUTCg2MCwgMSksIENUTCg2MCwgMSkgfSB9LAorCQl7IHsgQ1RMKDYwLCAwKSwgQ1RMKDYwLCAxKSwgQ1RMKDYwLCAxKSwgQ1RMKDYwLCAxKSB9IH0sCisJfSwKKwkubW9kYWxIZWFkZXI1RyA9IHsKKwkJLyogNCBpZGxlLHQxLHQyLGIgKDQgYml0cyBwZXIgc2V0dGluZykgKi8KKwkJLmFudEN0cmxDb21tb24gPSBMRTMyKDB4MjIwKSwKKwkJLyogNCByYTFsMSwgcmEybDEsIHJhMWwyLHJhMmwyLHJhMTIgKi8KKwkJLmFudEN0cmxDb21tb24yID0gTEUzMigweDQ0NDQ0KSwKKwkJLyogYW50Q3RybENoYWluIDYgaWRsZSwgdCxyLHJ4MSxyeDEyLGIgKDIgYml0cyBlYWNoKSAqLworCQkuYW50Q3RybENoYWluID0geworCQkJTEUxNigweDE1MCksIExFMTYoMHgxNTApLCBMRTE2KDB4MTUwKSwKKwkJfSwKKwkJLyogeGF0dGVuMURCIDMgeGF0dGVuMV9kYiBmb3IgQVI5MjgwICgweGEyMGMvYjIwYyA1OjApICovCisJCS54YXR0ZW4xREIgPSB7MCwgMCwgMH0sCisKKwkJLyoKKwkJICogeGF0dGVuMU1hcmdpbltBUjkzMDBfTUFYX0NIQUlOU107IDMgeGF0dGVuMV9tYXJnaW4KKwkJICogZm9yIG1lcmxpbiAoMHhhMjBjL2IyMGMgMTY6MTIKKwkJICovCisJCS54YXR0ZW4xTWFyZ2luID0gezAsIDAsIDB9LAorCQkudGVtcFNsb3BlID0gNDUsCisJCS52b2x0U2xvcGUgPSAwLAorCQkvKiBzcHVyQ2hhbnMgc3B1ciBjaGFubmVscyBpbiB1c3VhbCBmYmluIGNvZGluZyBmb3JtYXQgKi8KKwkJLnNwdXJDaGFucyA9IHswLCAwLCAwLCAwLCAwfSwKKwkJLyogbm9pc2VGbG9vclRocmVzaENoIENoZWNrIGlmIHRoZSByZWdpc3RlciBpcyBwZXIgY2hhaW4gKi8KKwkJLm5vaXNlRmxvb3JUaHJlc2hDaCA9IHstMSwgMCwgMH0sCisJCS5vYiA9IHszLCAzLCAzfSwgLyogMyBjaGFpbiAqLworCQkuZGJfc3RhZ2UyID0gezMsIDMsIDN9LCAvKiAzIGNoYWluICovCisJCS5kYl9zdGFnZTMgPSB7MywgMywgM30sIC8qIGRvZXNuJ3QgZXhpc3QgZm9yIDJHICovCisJCS5kYl9zdGFnZTQgPSB7MywgMywgM30sCSAvKiBkb24ndCBleGlzdCBmb3IgMkcgKi8KKwkJLnhwYUJpYXNMdmwgPSAwLAorCQkudHhGcmFtZVRvRGF0YVN0YXJ0ID0gMHgwZSwKKwkJLnR4RnJhbWVUb1BhT24gPSAweDBlLAorCQkudHhDbGlwID0gMywgLyogNCBiaXRzIHR4X2NsaXAsIDQgYml0cyBkYWNfc2NhbGVfY2NrICovCisJCS5hbnRlbm5hR2FpbiA9IDAsCisJCS5zd2l0Y2hTZXR0bGluZyA9IDB4MmQsCisJCS5hZGNEZXNpcmVkU2l6ZSA9IC0zMCwKKwkJLnR4RW5kVG9YcGFPZmYgPSAwLAorCQkudHhFbmRUb1J4T24gPSAweDIsCisJCS50eEZyYW1lVG9YcGFPbiA9IDB4ZSwKKwkJLnRocmVzaDYyID0gMjgsCisJCS5wYXBkUmF0ZU1hc2tIdDIwID0gTEUzMigweDBjZjBlMGUwKSwKKwkJLnBhcGRSYXRlTWFza0h0NDAgPSBMRTMyKDB4NmNmMGUwZTApLAorCQkuZnV0dXJlTW9kYWwgPSB7CisJCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCQl9LAorCX0sCisJLmJhc2VfZXh0MiA9IHsKKwkJLnRlbXBTbG9wZUxvdyA9IDQwLAorCQkudGVtcFNsb3BlSGlnaCA9IDUwLAorCQkueGF0dGVuMURCTG93ID0gezAsIDAsIDB9LAorCQkueGF0dGVuMU1hcmdpbkxvdyA9IHswLCAwLCAwfSwKKwkJLnhhdHRlbjFEQkhpZ2ggPSB7MCwgMCwgMH0sCisJCS54YXR0ZW4xTWFyZ2luSGlnaCA9IHswLCAwLCAwfQorCX0sCisJLmNhbEZyZXFQaWVyNUcgPSB7CisJCUZSRVEyRkJJTig1MTgwLCAwKSwKKwkJRlJFUTJGQklOKDUyMjAsIDApLAorCQlGUkVRMkZCSU4oNTMyMCwgMCksCisJCUZSRVEyRkJJTig1NDAwLCAwKSwKKwkJRlJFUTJGQklOKDU1MDAsIDApLAorCQlGUkVRMkZCSU4oNTYwMCwgMCksCisJCUZSRVEyRkJJTig1NzAwLCAwKSwKKwkJRlJFUTJGQklOKDU4MjUsIDApCisJfSwKKwkuY2FsUGllckRhdGE1RyA9IHsKKwkJeworCQkJezAsIDAsIDAsIDAsIDB9LAorCQkJezAsIDAsIDAsIDAsIDB9LAorCQkJezAsIDAsIDAsIDAsIDB9LAorCQkJezAsIDAsIDAsIDAsIDB9LAorCQkJezAsIDAsIDAsIDAsIDB9LAorCQkJezAsIDAsIDAsIDAsIDB9LAorCQkJezAsIDAsIDAsIDAsIDB9LAorCQkJezAsIDAsIDAsIDAsIDB9LAorCQl9LAorCQl7CisJCQl7MCwgMCwgMCwgMCwgMH0sCisJCQl7MCwgMCwgMCwgMCwgMH0sCisJCQl7MCwgMCwgMCwgMCwgMH0sCisJCQl7MCwgMCwgMCwgMCwgMH0sCisJCQl7MCwgMCwgMCwgMCwgMH0sCisJCQl7MCwgMCwgMCwgMCwgMH0sCisJCQl7MCwgMCwgMCwgMCwgMH0sCisJCQl7MCwgMCwgMCwgMCwgMH0sCisJCX0sCisJCXsKKwkJCXswLCAwLCAwLCAwLCAwfSwKKwkJCXswLCAwLCAwLCAwLCAwfSwKKwkJCXswLCAwLCAwLCAwLCAwfSwKKwkJCXswLCAwLCAwLCAwLCAwfSwKKwkJCXswLCAwLCAwLCAwLCAwfSwKKwkJCXswLCAwLCAwLCAwLCAwfSwKKwkJCXswLCAwLCAwLCAwLCAwfSwKKwkJCXswLCAwLCAwLCAwLCAwfSwKKwkJfSwKKworCX0sCisJLmNhbFRhcmdldF9mcmVxYmluXzVHID0geworCQlGUkVRMkZCSU4oNTE4MCwgMCksCisJCUZSRVEyRkJJTig1MjQwLCAwKSwKKwkJRlJFUTJGQklOKDUzMjAsIDApLAorCQlGUkVRMkZCSU4oNTQwMCwgMCksCisJCUZSRVEyRkJJTig1NTAwLCAwKSwKKwkJRlJFUTJGQklOKDU2MDAsIDApLAorCQlGUkVRMkZCSU4oNTcwMCwgMCksCisJCUZSRVEyRkJJTig1ODI1LCAwKQorCX0sCisJLmNhbFRhcmdldF9mcmVxYmluXzVHSFQyMCA9IHsKKwkJRlJFUTJGQklOKDUxODAsIDApLAorCQlGUkVRMkZCSU4oNTI0MCwgMCksCisJCUZSRVEyRkJJTig1MzIwLCAwKSwKKwkJRlJFUTJGQklOKDU0MDAsIDApLAorCQlGUkVRMkZCSU4oNTUwMCwgMCksCisJCUZSRVEyRkJJTig1NzAwLCAwKSwKKwkJRlJFUTJGQklOKDU3NDUsIDApLAorCQlGUkVRMkZCSU4oNTgyNSwgMCkKKwl9LAorCS5jYWxUYXJnZXRfZnJlcWJpbl81R0hUNDAgPSB7CisJCUZSRVEyRkJJTig1MTgwLCAwKSwKKwkJRlJFUTJGQklOKDUyNDAsIDApLAorCQlGUkVRMkZCSU4oNTMyMCwgMCksCisJCUZSRVEyRkJJTig1NDAwLCAwKSwKKwkJRlJFUTJGQklOKDU1MDAsIDApLAorCQlGUkVRMkZCSU4oNTcwMCwgMCksCisJCUZSRVEyRkJJTig1NzQ1LCAwKSwKKwkJRlJFUTJGQklOKDU4MjUsIDApCisJfSwKKwkuY2FsVGFyZ2V0UG93ZXI1RyA9IHsKKwkJLyogNi0yNCwzNiw0OCw1NCAqLworCQl7IHszMCwgMzAsIDI4LCAyNH0gfSwKKwkJeyB7MzAsIDMwLCAyOCwgMjR9IH0sCisJCXsgezMwLCAzMCwgMjgsIDI0fSB9LAorCQl7IHszMCwgMzAsIDI4LCAyNH0gfSwKKwkJeyB7MzAsIDMwLCAyOCwgMjR9IH0sCisJCXsgezMwLCAzMCwgMjgsIDI0fSB9LAorCQl7IHszMCwgMzAsIDI4LCAyNH0gfSwKKwkJeyB7MzAsIDMwLCAyOCwgMjR9IH0sCisJfSwKKwkuY2FsVGFyZ2V0UG93ZXI1R0hUMjAgPSB7CisJCS8qCisJCSAqIDBfOF8xNiwxLTNfOS0xMV8xNy0xOSwKKwkJICogNCw1LDYsNywxMiwxMywxNCwxNSwyMCwyMSwyMiwyMworCQkgKi8KKwkJeyB7MzAsIDMwLCAzMCwgMjgsIDI0LCAyMCwgMzAsIDI4LCAyNCwgMjAsIDIwLCAyMCwgMjAsIDE2fSB9LAorCQl7IHszMCwgMzAsIDMwLCAyOCwgMjQsIDIwLCAzMCwgMjgsIDI0LCAyMCwgMjAsIDIwLCAyMCwgMTZ9IH0sCisJCXsgezMwLCAzMCwgMzAsIDI2LCAyMiwgMTgsIDMwLCAyNiwgMjIsIDE4LCAxOCwgMTgsIDE4LCAxNn0gfSwKKwkJeyB7MzAsIDMwLCAzMCwgMjYsIDIyLCAxOCwgMzAsIDI2LCAyMiwgMTgsIDE4LCAxOCwgMTgsIDE2fSB9LAorCQl7IHszMCwgMzAsIDMwLCAyNCwgMjAsIDE2LCAzMCwgMjQsIDIwLCAxNiwgMTYsIDE2LCAxNiwgMTR9IH0sCisJCXsgezMwLCAzMCwgMzAsIDI0LCAyMCwgMTYsIDMwLCAyNCwgMjAsIDE2LCAxNiwgMTYsIDE2LCAxNH0gfSwKKwkJeyB7MzAsIDMwLCAzMCwgMjIsIDE4LCAxNCwgMzAsIDIyLCAxOCwgMTQsIDE0LCAxNCwgMTQsIDEyfSB9LAorCQl7IHszMCwgMzAsIDMwLCAyMiwgMTgsIDE0LCAzMCwgMjIsIDE4LCAxNCwgMTQsIDE0LCAxNCwgMTJ9IH0sCisJfSwKKwkuY2FsVGFyZ2V0UG93ZXI1R0hUNDAgPSAgeworCQkvKgorCQkgKiAwXzhfMTYsMS0zXzktMTFfMTctMTksCisJCSAqIDQsNSw2LDcsMTIsMTMsMTQsMTUsMjAsMjEsMjIsMjMKKwkJICovCisJCXsgezI4LCAyOCwgMjgsIDI2LCAyMiwgMTgsIDI4LCAyNiwgMjIsIDE4LCAxOCwgMTgsIDE4LCAxNH0gfSwKKwkJeyB7MjgsIDI4LCAyOCwgMjYsIDIyLCAxOCwgMjgsIDI2LCAyMiwgMTgsIDE4LCAxOCwgMTgsIDE0fSB9LAorCQl7IHsyOCwgMjgsIDI4LCAyNCwgMjAsIDE2LCAyOCwgMjQsIDIwLCAxNiwgMTYsIDE2LCAxNiwgMTJ9IH0sCisJCXsgezI4LCAyOCwgMjgsIDI0LCAyMCwgMTYsIDI4LCAyNCwgMjAsIDE2LCAxNiwgMTYsIDE2LCAxMn0gfSwKKwkJeyB7MjgsIDI4LCAyOCwgMjIsIDE4LCAxNCwgMjgsIDIyLCAxOCwgMTQsIDE0LCAxNCwgMTQsIDEwfSB9LAorCQl7IHsyOCwgMjgsIDI4LCAyMiwgMTgsIDE0LCAyOCwgMjIsIDE4LCAxNCwgMTQsIDE0LCAxNCwgMTB9IH0sCisJCXsgezI4LCAyOCwgMjgsIDIwLCAxNiwgMTIsIDI4LCAyMCwgMTYsIDEyLCAxMiwgMTIsIDEyLCA4fSB9LAorCQl7IHsyOCwgMjgsIDI4LCAyMCwgMTYsIDEyLCAyOCwgMjAsIDE2LCAxMiwgMTIsIDEyLCAxMiwgOH0gfSwKKwl9LAorCS5jdGxJbmRleF81RyA9ICB7CisJCTB4MTAsIDB4MTYsIDB4MTgsIDB4NDAsIDB4NDYsCisJCTB4NDgsIDB4MzAsIDB4MzYsIDB4MzgKKwl9LAorCS5jdGxfZnJlcWJpbl81RyA9ICB7CisJCXsKKwkJCS8qIERhdGFbMF0uY3RsRWRnZXNbMF0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDUxODAsIDApLAorCQkJLyogRGF0YVswXS5jdGxFZGdlc1sxXS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oNTI2MCwgMCksCisJCQkvKiBEYXRhWzBdLmN0bEVkZ2VzWzJdLmJDaGFubmVsICovIEZSRVEyRkJJTig1MjgwLCAwKSwKKwkJCS8qIERhdGFbMF0uY3RsRWRnZXNbM10uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDU1MDAsIDApLAorCQkJLyogRGF0YVswXS5jdGxFZGdlc1s0XS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oNTYwMCwgMCksCisJCQkvKiBEYXRhWzBdLmN0bEVkZ2VzWzVdLmJDaGFubmVsICovIEZSRVEyRkJJTig1NzAwLCAwKSwKKwkJCS8qIERhdGFbMF0uY3RsRWRnZXNbNl0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDU3NDUsIDApLAorCQkJLyogRGF0YVswXS5jdGxFZGdlc1s3XS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oNTgyNSwgMCkKKwkJfSwKKwkJeworCQkJLyogRGF0YVsxXS5jdGxFZGdlc1swXS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oNTE4MCwgMCksCisJCQkvKiBEYXRhWzFdLmN0bEVkZ2VzWzFdLmJDaGFubmVsICovIEZSRVEyRkJJTig1MjYwLCAwKSwKKwkJCS8qIERhdGFbMV0uY3RsRWRnZXNbMl0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDUyODAsIDApLAorCQkJLyogRGF0YVsxXS5jdGxFZGdlc1szXS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oNTUwMCwgMCksCisJCQkvKiBEYXRhWzFdLmN0bEVkZ2VzWzRdLmJDaGFubmVsICovIEZSRVEyRkJJTig1NTIwLCAwKSwKKwkJCS8qIERhdGFbMV0uY3RsRWRnZXNbNV0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDU3MDAsIDApLAorCQkJLyogRGF0YVsxXS5jdGxFZGdlc1s2XS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oNTc0NSwgMCksCisJCQkvKiBEYXRhWzFdLmN0bEVkZ2VzWzddLmJDaGFubmVsICovIEZSRVEyRkJJTig1ODI1LCAwKQorCQl9LAorCisJCXsKKwkJCS8qIERhdGFbMl0uY3RsRWRnZXNbMF0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDUxOTAsIDApLAorCQkJLyogRGF0YVsyXS5jdGxFZGdlc1sxXS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oNTIzMCwgMCksCisJCQkvKiBEYXRhWzJdLmN0bEVkZ2VzWzJdLmJDaGFubmVsICovIEZSRVEyRkJJTig1MjcwLCAwKSwKKwkJCS8qIERhdGFbMl0uY3RsRWRnZXNbM10uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDUzMTAsIDApLAorCQkJLyogRGF0YVsyXS5jdGxFZGdlc1s0XS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oNTUxMCwgMCksCisJCQkvKiBEYXRhWzJdLmN0bEVkZ2VzWzVdLmJDaGFubmVsICovIEZSRVEyRkJJTig1NTUwLCAwKSwKKwkJCS8qIERhdGFbMl0uY3RsRWRnZXNbNl0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDU2NzAsIDApLAorCQkJLyogRGF0YVsyXS5jdGxFZGdlc1s3XS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oNTc1NSwgMCkKKwkJfSwKKworCQl7CisJCQkvKiBEYXRhWzNdLmN0bEVkZ2VzWzBdLmJDaGFubmVsICovIEZSRVEyRkJJTig1MTgwLCAwKSwKKwkJCS8qIERhdGFbM10uY3RsRWRnZXNbMV0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDUyMDAsIDApLAorCQkJLyogRGF0YVszXS5jdGxFZGdlc1syXS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oNTI2MCwgMCksCisJCQkvKiBEYXRhWzNdLmN0bEVkZ2VzWzNdLmJDaGFubmVsICovIEZSRVEyRkJJTig1MzIwLCAwKSwKKwkJCS8qIERhdGFbM10uY3RsRWRnZXNbNF0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDU1MDAsIDApLAorCQkJLyogRGF0YVszXS5jdGxFZGdlc1s1XS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oNTcwMCwgMCksCisJCQkvKiBEYXRhWzNdLmN0bEVkZ2VzWzZdLmJDaGFubmVsICovIDB4RkYsCisJCQkvKiBEYXRhWzNdLmN0bEVkZ2VzWzddLmJDaGFubmVsICovIDB4RkYsCisJCX0sCisKKwkJeworCQkJLyogRGF0YVs0XS5jdGxFZGdlc1swXS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oNTE4MCwgMCksCisJCQkvKiBEYXRhWzRdLmN0bEVkZ2VzWzFdLmJDaGFubmVsICovIEZSRVEyRkJJTig1MjYwLCAwKSwKKwkJCS8qIERhdGFbNF0uY3RsRWRnZXNbMl0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDU1MDAsIDApLAorCQkJLyogRGF0YVs0XS5jdGxFZGdlc1szXS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oNTcwMCwgMCksCisJCQkvKiBEYXRhWzRdLmN0bEVkZ2VzWzRdLmJDaGFubmVsICovIDB4RkYsCisJCQkvKiBEYXRhWzRdLmN0bEVkZ2VzWzVdLmJDaGFubmVsICovIDB4RkYsCisJCQkvKiBEYXRhWzRdLmN0bEVkZ2VzWzZdLmJDaGFubmVsICovIDB4RkYsCisJCQkvKiBEYXRhWzRdLmN0bEVkZ2VzWzddLmJDaGFubmVsICovIDB4RkYsCisJCX0sCisKKwkJeworCQkJLyogRGF0YVs1XS5jdGxFZGdlc1swXS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oNTE5MCwgMCksCisJCQkvKiBEYXRhWzVdLmN0bEVkZ2VzWzFdLmJDaGFubmVsICovIEZSRVEyRkJJTig1MjcwLCAwKSwKKwkJCS8qIERhdGFbNV0uY3RsRWRnZXNbMl0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDUzMTAsIDApLAorCQkJLyogRGF0YVs1XS5jdGxFZGdlc1szXS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oNTUxMCwgMCksCisJCQkvKiBEYXRhWzVdLmN0bEVkZ2VzWzRdLmJDaGFubmVsICovIEZSRVEyRkJJTig1NTkwLCAwKSwKKwkJCS8qIERhdGFbNV0uY3RsRWRnZXNbNV0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDU2NzAsIDApLAorCQkJLyogRGF0YVs1XS5jdGxFZGdlc1s2XS5iQ2hhbm5lbCAqLyAweEZGLAorCQkJLyogRGF0YVs1XS5jdGxFZGdlc1s3XS5iQ2hhbm5lbCAqLyAweEZGCisJCX0sCisKKwkJeworCQkJLyogRGF0YVs2XS5jdGxFZGdlc1swXS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oNTE4MCwgMCksCisJCQkvKiBEYXRhWzZdLmN0bEVkZ2VzWzFdLmJDaGFubmVsICovIEZSRVEyRkJJTig1MjAwLCAwKSwKKwkJCS8qIERhdGFbNl0uY3RsRWRnZXNbMl0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDUyMjAsIDApLAorCQkJLyogRGF0YVs2XS5jdGxFZGdlc1szXS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oNTI2MCwgMCksCisJCQkvKiBEYXRhWzZdLmN0bEVkZ2VzWzRdLmJDaGFubmVsICovIEZSRVEyRkJJTig1NTAwLCAwKSwKKwkJCS8qIERhdGFbNl0uY3RsRWRnZXNbNV0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDU2MDAsIDApLAorCQkJLyogRGF0YVs2XS5jdGxFZGdlc1s2XS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oNTcwMCwgMCksCisJCQkvKiBEYXRhWzZdLmN0bEVkZ2VzWzddLmJDaGFubmVsICovIEZSRVEyRkJJTig1NzQ1LCAwKQorCQl9LAorCisJCXsKKwkJCS8qIERhdGFbN10uY3RsRWRnZXNbMF0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDUxODAsIDApLAorCQkJLyogRGF0YVs3XS5jdGxFZGdlc1sxXS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oNTI2MCwgMCksCisJCQkvKiBEYXRhWzddLmN0bEVkZ2VzWzJdLmJDaGFubmVsICovIEZSRVEyRkJJTig1MzIwLCAwKSwKKwkJCS8qIERhdGFbN10uY3RsRWRnZXNbM10uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDU1MDAsIDApLAorCQkJLyogRGF0YVs3XS5jdGxFZGdlc1s0XS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oNTU2MCwgMCksCisJCQkvKiBEYXRhWzddLmN0bEVkZ2VzWzVdLmJDaGFubmVsICovIEZSRVEyRkJJTig1NzAwLCAwKSwKKwkJCS8qIERhdGFbN10uY3RsRWRnZXNbNl0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDU3NDUsIDApLAorCQkJLyogRGF0YVs3XS5jdGxFZGdlc1s3XS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oNTgyNSwgMCkKKwkJfSwKKworCQl7CisJCQkvKiBEYXRhWzhdLmN0bEVkZ2VzWzBdLmJDaGFubmVsICovIEZSRVEyRkJJTig1MTkwLCAwKSwKKwkJCS8qIERhdGFbOF0uY3RsRWRnZXNbMV0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDUyMzAsIDApLAorCQkJLyogRGF0YVs4XS5jdGxFZGdlc1syXS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oNTI3MCwgMCksCisJCQkvKiBEYXRhWzhdLmN0bEVkZ2VzWzNdLmJDaGFubmVsICovIEZSRVEyRkJJTig1NTEwLCAwKSwKKwkJCS8qIERhdGFbOF0uY3RsRWRnZXNbNF0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDU1NTAsIDApLAorCQkJLyogRGF0YVs4XS5jdGxFZGdlc1s1XS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oNTY3MCwgMCksCisJCQkvKiBEYXRhWzhdLmN0bEVkZ2VzWzZdLmJDaGFubmVsICovIEZSRVEyRkJJTig1NzU1LCAwKSwKKwkJCS8qIERhdGFbOF0uY3RsRWRnZXNbN10uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDU3OTUsIDApCisJCX0KKwl9LAorCS5jdGxQb3dlckRhdGFfNUcgPSB7CisJCXsKKwkJCXsKKwkJCQlDVEwoNjAsIDEpLCBDVEwoNjAsIDEpLCBDVEwoNjAsIDEpLCBDVEwoNjAsIDEpLAorCQkJCUNUTCg2MCwgMSksIENUTCg2MCwgMSksIENUTCg2MCwgMSksIENUTCg2MCwgMCksCisJCQl9CisJCX0sCisJCXsKKwkJCXsKKwkJCQlDVEwoNjAsIDEpLCBDVEwoNjAsIDEpLCBDVEwoNjAsIDEpLCBDVEwoNjAsIDEpLAorCQkJCUNUTCg2MCwgMSksIENUTCg2MCwgMSksIENUTCg2MCwgMSksIENUTCg2MCwgMCksCisJCQl9CisJCX0sCisJCXsKKwkJCXsKKwkJCQlDVEwoNjAsIDApLCBDVEwoNjAsIDEpLCBDVEwoNjAsIDApLCBDVEwoNjAsIDEpLAorCQkJCUNUTCg2MCwgMSksIENUTCg2MCwgMSksIENUTCg2MCwgMSksIENUTCg2MCwgMSksCisJCQl9CisJCX0sCisJCXsKKwkJCXsKKwkJCQlDVEwoNjAsIDApLCBDVEwoNjAsIDEpLCBDVEwoNjAsIDEpLCBDVEwoNjAsIDApLAorCQkJCUNUTCg2MCwgMSksIENUTCg2MCwgMCksIENUTCg2MCwgMCksIENUTCg2MCwgMCksCisJCQl9CisJCX0sCisJCXsKKwkJCXsKKwkJCQlDVEwoNjAsIDEpLCBDVEwoNjAsIDEpLCBDVEwoNjAsIDEpLCBDVEwoNjAsIDApLAorCQkJCUNUTCg2MCwgMCksIENUTCg2MCwgMCksIENUTCg2MCwgMCksIENUTCg2MCwgMCksCisJCQl9CisJCX0sCisJCXsKKwkJCXsKKwkJCQlDVEwoNjAsIDEpLCBDVEwoNjAsIDEpLCBDVEwoNjAsIDEpLCBDVEwoNjAsIDEpLAorCQkJCUNUTCg2MCwgMSksIENUTCg2MCwgMCksIENUTCg2MCwgMCksIENUTCg2MCwgMCksCisJCQl9CisJCX0sCisJCXsKKwkJCXsKKwkJCQlDVEwoNjAsIDEpLCBDVEwoNjAsIDEpLCBDVEwoNjAsIDEpLCBDVEwoNjAsIDEpLAorCQkJCUNUTCg2MCwgMSksIENUTCg2MCwgMSksIENUTCg2MCwgMSksIENUTCg2MCwgMSksCisJCQl9CisJCX0sCisJCXsKKwkJCXsKKwkJCQlDVEwoNjAsIDEpLCBDVEwoNjAsIDEpLCBDVEwoNjAsIDApLCBDVEwoNjAsIDEpLAorCQkJCUNUTCg2MCwgMSksIENUTCg2MCwgMSksIENUTCg2MCwgMSksIENUTCg2MCwgMCksCisJCQl9CisJCX0sCisJCXsKKwkJCXsKKwkJCQlDVEwoNjAsIDEpLCBDVEwoNjAsIDApLCBDVEwoNjAsIDEpLCBDVEwoNjAsIDEpLAorCQkJCUNUTCg2MCwgMSksIENUTCg2MCwgMSksIENUTCg2MCwgMCksIENUTCg2MCwgMSksCisJCQl9CisJCX0sCisJfQorfTsKKworCitzdGF0aWMgY29uc3Qgc3RydWN0IGFyOTMwMF9lZXByb20gYXI5MzAwX3gxMTIgPSB7CisJLmVlcHJvbVZlcnNpb24gPSAyLAorCS50ZW1wbGF0ZVZlcnNpb24gPSA1LAorCS5tYWNBZGRyID0gezB4MDAsIDB4MDMsIDB4N2YsIDB4MCwgMHgwLCAweDB9LAorCS5jdXN0RGF0YSA9IHsieDExMi0wNDEtZjAwMDAifSwKKwkuYmFzZUVlcEhlYWRlciA9IHsKKwkJLnJlZ0RtbiA9IHsgTEUxNigwKSwgTEUxNigweDFmKSB9LAorCQkudHhyeE1hc2sgPSAgMHg3NywgLyogNCBiaXRzIHR4IGFuZCA0IGJpdHMgcnggKi8KKwkJLm9wQ2FwRmxhZ3MgPSB7CisJCQkub3BGbGFncyA9IEFSNTQxNl9PUEZMQUdTXzExRyB8IEFSNTQxNl9PUEZMQUdTXzExQSwKKwkJCS5lZXBNaXNjID0gMCwKKwkJfSwKKwkJLnJmU2lsZW50ID0gMCwKKwkJLmJsdWVUb290aE9wdGlvbnMgPSAwLAorCQkuZGV2aWNlQ2FwID0gMCwKKwkJLmRldmljZVR5cGUgPSA1LCAvKiB0YWtlcyBsb3dlciBieXRlIGluIGVlcHJvbSBsb2NhdGlvbiAqLworCQkucHdyVGFibGVPZmZzZXQgPSBBUjkzMDBfUFdSX1RBQkxFX09GRlNFVCwKKwkJLnBhcmFtc19mb3JfdHVuaW5nX2NhcHMgPSB7MCwgMH0sCisJCS5mZWF0dXJlRW5hYmxlID0gMHgwZCwKKwkJLyoKKwkJICogYml0MCAtIGVuYWJsZSB0eCB0ZW1wIGNvbXAgLSBkaXNhYmxlZAorCQkgKiBiaXQxIC0gZW5hYmxlIHR4IHZvbHQgY29tcCAtIGRpc2FibGVkCisJCSAqIGJpdDIgLSBlbmFibGUgZmFzdGNsb2NrIC0gZW5hYmxlZAorCQkgKiBiaXQzIC0gZW5hYmxlIGRvdWJsaW5nIC0gZW5hYmxlZAorCQkgKiBiaXQ0IC0gZW5hYmxlIGludGVybmFsIHJlZ3VsYXRvciAtIGRpc2FibGVkCisJCSAqIGJpdDUgLSBlbmFibGUgcGEgcHJlZGlzdG9ydGlvbiAtIGRpc2FibGVkCisJCSAqLworCQkubWlzY0NvbmZpZ3VyYXRpb24gPSAwLCAvKiBiaXQwIC0gdHVybiBkb3duIGRyaXZlc3RyZW5ndGggKi8KKwkJLmVlcHJvbVdyaXRlRW5hYmxlR3BpbyA9IDYsCisJCS53bGFuRGlzYWJsZUdwaW8gPSAwLAorCQkud2xhbkxlZEdwaW8gPSA4LAorCQkucnhCYW5kU2VsZWN0R3BpbyA9IDB4ZmYsCisJCS50eHJ4Z2FpbiA9IDB4MCwKKwkJLnN3cmVnID0gMCwKKwl9LAorCS5tb2RhbEhlYWRlcjJHID0geworCQkvKiBhcjkzMDBfbW9kYWxfZWVwX2hlYWRlciAgMmcgKi8KKwkJLyogNCBpZGxlLHQxLHQyLGIoNCBiaXRzIHBlciBzZXR0aW5nKSAqLworCQkuYW50Q3RybENvbW1vbiA9IExFMzIoMHgxMTApLAorCQkvKiA0IHJhMWwxLCByYTJsMSwgcmExbDIsIHJhMmwyLCByYTEyICovCisJCS5hbnRDdHJsQ29tbW9uMiA9IExFMzIoMHgyMjIyMiksCisKKwkJLyoKKwkJICogYW50Q3RybENoYWluW2FyOTMwMF9tYXhfY2hhaW5zXTsgNiBpZGxlLCB0LCByLAorCQkgKiByeDEsIHJ4MTIsIGIgKDIgYml0cyBlYWNoKQorCQkgKi8KKwkJLmFudEN0cmxDaGFpbiA9IHsgTEUxNigweDEwKSwgTEUxNigweDEwKSwgTEUxNigweDEwKSB9LAorCisJCS8qCisJCSAqIHhhdHRlbjFEQltBUjkzMDBfbWF4X2NoYWluc107ICAzIHhhdHRlbjFfZGIKKwkJICogZm9yIGFyOTI4MCAoMHhhMjBjL2IyMGMgNTowKQorCQkgKi8KKwkJLnhhdHRlbjFEQiA9IHsweDFiLCAweDFiLCAweDFifSwKKworCQkvKgorCQkgKiB4YXR0ZW4xTWFyZ2luW2FyOTMwMF9tYXhfY2hhaW5zXTsgMyB4YXR0ZW4xX21hcmdpbgorCQkgKiBmb3IgYXI5MjgwICgweGEyMGMvYjIwYyAxNjoxMgorCQkgKi8KKwkJLnhhdHRlbjFNYXJnaW4gPSB7MHgxNSwgMHgxNSwgMHgxNX0sCisJCS50ZW1wU2xvcGUgPSA1MCwKKwkJLnZvbHRTbG9wZSA9IDAsCisKKwkJLyoKKwkJICogc3B1ckNoYW5zW09TUHJleV9lZXByb21fbW9kYWxfc1BVUlNdOyBzcHVyCisJCSAqIGNoYW5uZWxzIGluIHVzdWFsIGZiaW4gY29kaW5nIGZvcm1hdAorCQkgKi8KKwkJLnNwdXJDaGFucyA9IHtGUkVRMkZCSU4oMjQ2NCwgMSksIDAsIDAsIDAsIDB9LAorCisJCS8qCisJCSAqIG5vaXNlRmxvb3JUaHJlc2hjaFthcjkzMDBfbWF4X2NIQUlOU107IDMgQ2hlY2sKKwkJICogaWYgdGhlIHJlZ2lzdGVyIGlzIHBlciBjaGFpbgorCQkgKi8KKwkJLm5vaXNlRmxvb3JUaHJlc2hDaCA9IHstMSwgMCwgMH0sCisJCS5vYiA9IHsxLCAxLCAxfSwvKiAzIGNoYWluICovCisJCS5kYl9zdGFnZTIgPSB7MSwgMSwgMX0sIC8qIDMgY2hhaW4gICovCisJCS5kYl9zdGFnZTMgPSB7MCwgMCwgMH0sCisJCS5kYl9zdGFnZTQgPSB7MCwgMCwgMH0sCisJCS54cGFCaWFzTHZsID0gMCwKKwkJLnR4RnJhbWVUb0RhdGFTdGFydCA9IDB4MGUsCisJCS50eEZyYW1lVG9QYU9uID0gMHgwZSwKKwkJLnR4Q2xpcCA9IDMsIC8qIDQgYml0cyB0eF9jbGlwLCA0IGJpdHMgZGFjX3NjYWxlX2NjayAqLworCQkuYW50ZW5uYUdhaW4gPSAwLAorCQkuc3dpdGNoU2V0dGxpbmcgPSAweDJjLAorCQkuYWRjRGVzaXJlZFNpemUgPSAtMzAsCisJCS50eEVuZFRvWHBhT2ZmID0gMCwKKwkJLnR4RW5kVG9SeE9uID0gMHgyLAorCQkudHhGcmFtZVRvWHBhT24gPSAweGUsCisJCS50aHJlc2g2MiA9IDI4LAorCQkucGFwZFJhdGVNYXNrSHQyMCA9IExFMzIoMHgwYzgwYzA4MCksCisJCS5wYXBkUmF0ZU1hc2tIdDQwID0gTEUzMigweDAwODBjMDgwKSwKKwkJLmZ1dHVyZU1vZGFsID0geworCQkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkJfSwKKwl9LAorCS5iYXNlX2V4dDEgPSB7CisJCS5hbnRfZGl2X2NvbnRyb2wgPSAwLAorCQkuZnV0dXJlID0gezAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9CisJfSwKKwkuY2FsRnJlcVBpZXIyRyA9IHsKKwkJRlJFUTJGQklOKDI0MTIsIDEpLAorCQlGUkVRMkZCSU4oMjQzNywgMSksCisJCUZSRVEyRkJJTigyNDcyLCAxKSwKKwl9LAorCS8qIGFyOTMwMF9jYWxfZGF0YV9wZXJfZnJlcV9vcF9sb29wIDJnICovCisJLmNhbFBpZXJEYXRhMkcgPSB7CisJCXsgezAsIDAsIDAsIDAsIDAsIDB9LCB7MCwgMCwgMCwgMCwgMCwgMH0sIHswLCAwLCAwLCAwLCAwLCAwfSB9LAorCQl7IHswLCAwLCAwLCAwLCAwLCAwfSwgezAsIDAsIDAsIDAsIDAsIDB9LCB7MCwgMCwgMCwgMCwgMCwgMH0gfSwKKwkJeyB7MCwgMCwgMCwgMCwgMCwgMH0sIHswLCAwLCAwLCAwLCAwLCAwfSwgezAsIDAsIDAsIDAsIDAsIDB9IH0sCisJfSwKKwkuY2FsVGFyZ2V0X2ZyZXFiaW5fQ2NrID0geworCQlGUkVRMkZCSU4oMjQxMiwgMSksCisJCUZSRVEyRkJJTigyNDcyLCAxKSwKKwl9LAorCS5jYWxUYXJnZXRfZnJlcWJpbl8yRyA9IHsKKwkJRlJFUTJGQklOKDI0MTIsIDEpLAorCQlGUkVRMkZCSU4oMjQzNywgMSksCisJCUZSRVEyRkJJTigyNDcyLCAxKQorCX0sCisJLmNhbFRhcmdldF9mcmVxYmluXzJHSFQyMCA9IHsKKwkJRlJFUTJGQklOKDI0MTIsIDEpLAorCQlGUkVRMkZCSU4oMjQzNywgMSksCisJCUZSRVEyRkJJTigyNDcyLCAxKQorCX0sCisJLmNhbFRhcmdldF9mcmVxYmluXzJHSFQ0MCA9IHsKKwkJRlJFUTJGQklOKDI0MTIsIDEpLAorCQlGUkVRMkZCSU4oMjQzNywgMSksCisJCUZSRVEyRkJJTigyNDcyLCAxKQorCX0sCisJLmNhbFRhcmdldFBvd2VyQ2NrID0geworCQkvKiAxTC01TCw1UywxMUwsMTFzICovCisJCXsgezM4LCAzOCwgMzgsIDM4fSB9LAorCQl7IHszOCwgMzgsIDM4LCAzOH0gfSwKKwl9LAorCS5jYWxUYXJnZXRQb3dlcjJHID0geworCQkvKiA2LTI0LDM2LDQ4LDU0ICovCisJCXsgezM4LCAzOCwgMzYsIDM0fSB9LAorCQl7IHszOCwgMzgsIDM2LCAzNH0gfSwKKwkJeyB7MzgsIDM4LCAzNCwgMzJ9IH0sCisJfSwKKwkuY2FsVGFyZ2V0UG93ZXIyR0hUMjAgPSB7CisJCXsgezM2LCAzNiwgMzYsIDM2LCAzNiwgMzQsIDM0LCAzMiwgMzAsIDI4LCAyOCwgMjgsIDI4LCAyNn0gfSwKKwkJeyB7MzYsIDM2LCAzNiwgMzYsIDM2LCAzNCwgMzYsIDM0LCAzMiwgMzAsIDMwLCAzMCwgMjgsIDI2fSB9LAorCQl7IHszNiwgMzYsIDM2LCAzNiwgMzYsIDM0LCAzNCwgMzIsIDMwLCAyOCwgMjgsIDI4LCAyOCwgMjZ9IH0sCisJfSwKKwkuY2FsVGFyZ2V0UG93ZXIyR0hUNDAgPSB7CisJCXsgezM2LCAzNiwgMzYsIDM2LCAzNCwgMzIsIDMyLCAzMCwgMjgsIDI2LCAyNiwgMjYsIDI2LCAyNH0gfSwKKwkJeyB7MzYsIDM2LCAzNiwgMzYsIDM0LCAzMiwgMzQsIDMyLCAzMCwgMjgsIDI4LCAyOCwgMjgsIDI0fSB9LAorCQl7IHszNiwgMzYsIDM2LCAzNiwgMzQsIDMyLCAzMiwgMzAsIDI4LCAyNiwgMjYsIDI2LCAyNiwgMjR9IH0sCisJfSwKKwkuY3RsSW5kZXhfMkcgPSAgeworCQkweDExLCAweDEyLCAweDE1LCAweDE3LCAweDQxLCAweDQyLAorCQkweDQ1LCAweDQ3LCAweDMxLCAweDMyLCAweDM1LCAweDM3LAorCX0sCisJLmN0bF9mcmVxYmluXzJHID0geworCQl7CisJCQlGUkVRMkZCSU4oMjQxMiwgMSksCisJCQlGUkVRMkZCSU4oMjQxNywgMSksCisJCQlGUkVRMkZCSU4oMjQ1NywgMSksCisJCQlGUkVRMkZCSU4oMjQ2MiwgMSkKKwkJfSwKKwkJeworCQkJRlJFUTJGQklOKDI0MTIsIDEpLAorCQkJRlJFUTJGQklOKDI0MTcsIDEpLAorCQkJRlJFUTJGQklOKDI0NjIsIDEpLAorCQkJMHhGRiwKKwkJfSwKKworCQl7CisJCQlGUkVRMkZCSU4oMjQxMiwgMSksCisJCQlGUkVRMkZCSU4oMjQxNywgMSksCisJCQlGUkVRMkZCSU4oMjQ2MiwgMSksCisJCQkweEZGLAorCQl9LAorCQl7CisJCQlGUkVRMkZCSU4oMjQyMiwgMSksCisJCQlGUkVRMkZCSU4oMjQyNywgMSksCisJCQlGUkVRMkZCSU4oMjQ0NywgMSksCisJCQlGUkVRMkZCSU4oMjQ1MiwgMSkKKwkJfSwKKworCQl7CisJCQkvKiBEYXRhWzRdLmN0bGVkZ2VzWzBdLmJjaGFubmVsICovIEZSRVEyRkJJTigyNDEyLCAxKSwKKwkJCS8qIERhdGFbNF0uY3RsZWRnZXNbMV0uYmNoYW5uZWwgKi8gRlJFUTJGQklOKDI0MTcsIDEpLAorCQkJLyogRGF0YVs0XS5jdGxlZGdlc1syXS5iY2hhbm5lbCAqLyBGUkVRMkZCSU4oMjQ3MiwgMSksCisJCQkvKiBEYXRhWzRdLmN0bGVkZ2VzWzNdLmJjaGFubmVsICovIEZSRVEyRkJJTigyNDg0LCAxKSwKKwkJfSwKKworCQl7CisJCQkvKiBEYXRhWzVdLmN0bGVkZ2VzWzBdLmJjaGFubmVsICovIEZSRVEyRkJJTigyNDEyLCAxKSwKKwkJCS8qIERhdGFbNV0uY3RsZWRnZXNbMV0uYmNoYW5uZWwgKi8gRlJFUTJGQklOKDI0MTcsIDEpLAorCQkJLyogRGF0YVs1XS5jdGxlZGdlc1syXS5iY2hhbm5lbCAqLyBGUkVRMkZCSU4oMjQ3MiwgMSksCisJCQkwLAorCQl9LAorCisJCXsKKwkJCS8qIERhdGFbNl0uY3RsZWRnZXNbMF0uYmNoYW5uZWwgKi8gRlJFUTJGQklOKDI0MTIsIDEpLAorCQkJLyogRGF0YVs2XS5jdGxlZGdlc1sxXS5iY2hhbm5lbCAqLyBGUkVRMkZCSU4oMjQxNywgMSksCisJCQlGUkVRMkZCSU4oMjQ3MiwgMSksCisJCQkwLAorCQl9LAorCisJCXsKKwkJCS8qIERhdGFbN10uY3RsZWRnZXNbMF0uYmNoYW5uZWwgKi8gRlJFUTJGQklOKDI0MjIsIDEpLAorCQkJLyogRGF0YVs3XS5jdGxlZGdlc1sxXS5iY2hhbm5lbCAqLyBGUkVRMkZCSU4oMjQyNywgMSksCisJCQkvKiBEYXRhWzddLmN0bGVkZ2VzWzJdLmJjaGFubmVsICovIEZSRVEyRkJJTigyNDQ3LCAxKSwKKwkJCS8qIERhdGFbN10uY3RsZWRnZXNbM10uYmNoYW5uZWwgKi8gRlJFUTJGQklOKDI0NjIsIDEpLAorCQl9LAorCisJCXsKKwkJCS8qIERhdGFbOF0uY3RsZWRnZXNbMF0uYmNoYW5uZWwgKi8gRlJFUTJGQklOKDI0MTIsIDEpLAorCQkJLyogRGF0YVs4XS5jdGxlZGdlc1sxXS5iY2hhbm5lbCAqLyBGUkVRMkZCSU4oMjQxNywgMSksCisJCQkvKiBEYXRhWzhdLmN0bGVkZ2VzWzJdLmJjaGFubmVsICovIEZSRVEyRkJJTigyNDcyLCAxKSwKKwkJfSwKKworCQl7CisJCQkvKiBEYXRhWzldLmN0bGVkZ2VzWzBdLmJjaGFubmVsICovIEZSRVEyRkJJTigyNDEyLCAxKSwKKwkJCS8qIERhdGFbOV0uY3RsZWRnZXNbMV0uYmNoYW5uZWwgKi8gRlJFUTJGQklOKDI0MTcsIDEpLAorCQkJLyogRGF0YVs5XS5jdGxlZGdlc1syXS5iY2hhbm5lbCAqLyBGUkVRMkZCSU4oMjQ3MiwgMSksCisJCQkwCisJCX0sCisKKwkJeworCQkJLyogRGF0YVsxMF0uY3RsZWRnZXNbMF0uYmNoYW5uZWwgKi8gRlJFUTJGQklOKDI0MTIsIDEpLAorCQkJLyogRGF0YVsxMF0uY3RsZWRnZXNbMV0uYmNoYW5uZWwgKi8gRlJFUTJGQklOKDI0MTcsIDEpLAorCQkJLyogRGF0YVsxMF0uY3RsZWRnZXNbMl0uYmNoYW5uZWwgKi8gRlJFUTJGQklOKDI0NzIsIDEpLAorCQkJMAorCQl9LAorCisJCXsKKwkJCS8qIERhdGFbMTFdLmN0bGVkZ2VzWzBdLmJjaGFubmVsICovIEZSRVEyRkJJTigyNDIyLCAxKSwKKwkJCS8qIERhdGFbMTFdLmN0bGVkZ2VzWzFdLmJjaGFubmVsICovIEZSRVEyRkJJTigyNDI3LCAxKSwKKwkJCS8qIERhdGFbMTFdLmN0bGVkZ2VzWzJdLmJjaGFubmVsICovIEZSRVEyRkJJTigyNDQ3LCAxKSwKKwkJCS8qIERhdGFbMTFdLmN0bGVkZ2VzWzNdLmJjaGFubmVsICovIEZSRVEyRkJJTigyNDYyLCAxKSwKKwkJfQorCX0sCisJLmN0bFBvd2VyRGF0YV8yRyA9IHsKKwkJeyB7IENUTCg2MCwgMCksIENUTCg2MCwgMSksIENUTCg2MCwgMCksIENUTCg2MCwgMCkgfSB9LAorCQl7IHsgQ1RMKDYwLCAwKSwgQ1RMKDYwLCAxKSwgQ1RMKDYwLCAwKSwgQ1RMKDYwLCAwKSB9IH0sCisJCXsgeyBDVEwoNjAsIDEpLCBDVEwoNjAsIDApLCBDVEwoNjAsIDApLCBDVEwoNjAsIDEpIH0gfSwKKworCQl7IHsgQ1RMKDYwLCAxKSwgQ1RMKDYwLCAwKSwgQ1RMKDAsIDApLCBDVEwoMCwgMCkgfSB9LAorCQl7IHsgQ1RMKDYwLCAwKSwgQ1RMKDYwLCAxKSwgQ1RMKDYwLCAwKSwgQ1RMKDYwLCAwKSB9IH0sCisJCXsgeyBDVEwoNjAsIDApLCBDVEwoNjAsIDEpLCBDVEwoNjAsIDApLCBDVEwoNjAsIDApIH0gfSwKKworCQl7IHsgQ1RMKDYwLCAwKSwgQ1RMKDYwLCAxKSwgQ1RMKDYwLCAxKSwgQ1RMKDYwLCAwKSB9IH0sCisJCXsgeyBDVEwoNjAsIDApLCBDVEwoNjAsIDEpLCBDVEwoNjAsIDApLCBDVEwoNjAsIDApIH0gfSwKKwkJeyB7IENUTCg2MCwgMCksIENUTCg2MCwgMSksIENUTCg2MCwgMCksIENUTCg2MCwgMCkgfSB9LAorCisJCXsgeyBDVEwoNjAsIDApLCBDVEwoNjAsIDEpLCBDVEwoNjAsIDApLCBDVEwoNjAsIDApIH0gfSwKKwkJeyB7IENUTCg2MCwgMCksIENUTCg2MCwgMSksIENUTCg2MCwgMSksIENUTCg2MCwgMSkgfSB9LAorCQl7IHsgQ1RMKDYwLCAwKSwgQ1RMKDYwLCAxKSwgQ1RMKDYwLCAxKSwgQ1RMKDYwLCAxKSB9IH0sCisJfSwKKwkubW9kYWxIZWFkZXI1RyA9IHsKKwkJLyogNCBpZGxlLHQxLHQyLGIgKDQgYml0cyBwZXIgc2V0dGluZykgKi8KKwkJLmFudEN0cmxDb21tb24gPSBMRTMyKDB4MTEwKSwKKwkJLyogNCByYTFsMSwgcmEybDEsIHJhMWwyLHJhMmwyLHJhMTIgKi8KKwkJLmFudEN0cmxDb21tb24yID0gTEUzMigweDIyMjIyKSwKKwkJLyogYW50Q3RybENoYWluIDYgaWRsZSwgdCxyLHJ4MSxyeDEyLGIgKDIgYml0cyBlYWNoKSAqLworCQkuYW50Q3RybENoYWluID0geworCQkJTEUxNigweDApLCBMRTE2KDB4MCksIExFMTYoMHgwKSwKKwkJfSwKKwkJLyogeGF0dGVuMURCIDMgeGF0dGVuMV9kYiBmb3IgYXI5MjgwICgweGEyMGMvYjIwYyA1OjApICovCisJCS54YXR0ZW4xREIgPSB7MHgxMywgMHgxOSwgMHgxN30sCisKKwkJLyoKKwkJICogeGF0dGVuMU1hcmdpblthcjkzMDBfbWF4X2NoYWluc107IDMgeGF0dGVuMV9tYXJnaW4KKwkJICogZm9yIG1lcmxpbiAoMHhhMjBjL2IyMGMgMTY6MTIKKwkJICovCisJCS54YXR0ZW4xTWFyZ2luID0gezB4MTksIDB4MTksIDB4MTl9LAorCQkudGVtcFNsb3BlID0gNzAsCisJCS52b2x0U2xvcGUgPSAxNSwKKwkJLyogc3B1ckNoYW5zIHNwdXIgY2hhbm5lbHMgaW4gdXN1YWwgZmJpbiBjb2RpbmcgZm9ybWF0ICovCisJCS5zcHVyQ2hhbnMgPSB7MCwgMCwgMCwgMCwgMH0sCisJCS8qIG5vaXNlRmxvb3JUaHJlc2hjaCBjaGVjayBpZiB0aGUgcmVnaXN0ZXIgaXMgcGVyIGNoYWluICovCisJCS5ub2lzZUZsb29yVGhyZXNoQ2ggPSB7LTEsIDAsIDB9LAorCQkub2IgPSB7MywgMywgM30sIC8qIDMgY2hhaW4gKi8KKwkJLmRiX3N0YWdlMiA9IHszLCAzLCAzfSwgLyogMyBjaGFpbiAqLworCQkuZGJfc3RhZ2UzID0gezMsIDMsIDN9LCAvKiBkb2Vzbid0IGV4aXN0IGZvciAyRyAqLworCQkuZGJfc3RhZ2U0ID0gezMsIDMsIDN9LAkgLyogZG9uJ3QgZXhpc3QgZm9yIDJHICovCisJCS54cGFCaWFzTHZsID0gMCwKKwkJLnR4RnJhbWVUb0RhdGFTdGFydCA9IDB4MGUsCisJCS50eEZyYW1lVG9QYU9uID0gMHgwZSwKKwkJLnR4Q2xpcCA9IDMsIC8qIDQgYml0cyB0eF9jbGlwLCA0IGJpdHMgZGFjX3NjYWxlX2NjayAqLworCQkuYW50ZW5uYUdhaW4gPSAwLAorCQkuc3dpdGNoU2V0dGxpbmcgPSAweDJkLAorCQkuYWRjRGVzaXJlZFNpemUgPSAtMzAsCisJCS50eEVuZFRvWHBhT2ZmID0gMCwKKwkJLnR4RW5kVG9SeE9uID0gMHgyLAorCQkudHhGcmFtZVRvWHBhT24gPSAweGUsCisJCS50aHJlc2g2MiA9IDI4LAorCQkucGFwZFJhdGVNYXNrSHQyMCA9IExFMzIoMHgwY2YwZTBlMCksCisJCS5wYXBkUmF0ZU1hc2tIdDQwID0gTEUzMigweDZjZjBlMGUwKSwKKwkJLmZ1dHVyZU1vZGFsID0geworCQkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkJfSwKKwl9LAorCS5iYXNlX2V4dDIgPSB7CisJCS50ZW1wU2xvcGVMb3cgPSA3MiwKKwkJLnRlbXBTbG9wZUhpZ2ggPSAxMDUsCisJCS54YXR0ZW4xREJMb3cgPSB7MHgxMCwgMHgxNCwgMHgxMH0sCisJCS54YXR0ZW4xTWFyZ2luTG93ID0gezB4MTksIDB4MTkgLCAweDE5fSwKKwkJLnhhdHRlbjFEQkhpZ2ggPSB7MHgxZCwgMHgyMCwgMHgyNH0sCisJCS54YXR0ZW4xTWFyZ2luSGlnaCA9IHsweDEwLCAweDEwLCAweDEwfQorCX0sCisJLmNhbEZyZXFQaWVyNUcgPSB7CisJCUZSRVEyRkJJTig1MTgwLCAwKSwKKwkJRlJFUTJGQklOKDUyMjAsIDApLAorCQlGUkVRMkZCSU4oNTMyMCwgMCksCisJCUZSRVEyRkJJTig1NDAwLCAwKSwKKwkJRlJFUTJGQklOKDU1MDAsIDApLAorCQlGUkVRMkZCSU4oNTYwMCwgMCksCisJCUZSRVEyRkJJTig1NzAwLCAwKSwKKwkJRlJFUTJGQklOKDU3ODUsIDApCisJfSwKKwkuY2FsUGllckRhdGE1RyA9IHsKKwkJeworCQkJezAsIDAsIDAsIDAsIDB9LAorCQkJezAsIDAsIDAsIDAsIDB9LAorCQkJezAsIDAsIDAsIDAsIDB9LAorCQkJezAsIDAsIDAsIDAsIDB9LAorCQkJezAsIDAsIDAsIDAsIDB9LAorCQkJezAsIDAsIDAsIDAsIDB9LAorCQkJezAsIDAsIDAsIDAsIDB9LAorCQkJezAsIDAsIDAsIDAsIDB9LAorCQl9LAorCQl7CisJCQl7MCwgMCwgMCwgMCwgMH0sCisJCQl7MCwgMCwgMCwgMCwgMH0sCisJCQl7MCwgMCwgMCwgMCwgMH0sCisJCQl7MCwgMCwgMCwgMCwgMH0sCisJCQl7MCwgMCwgMCwgMCwgMH0sCisJCQl7MCwgMCwgMCwgMCwgMH0sCisJCQl7MCwgMCwgMCwgMCwgMH0sCisJCQl7MCwgMCwgMCwgMCwgMH0sCisJCX0sCisJCXsKKwkJCXswLCAwLCAwLCAwLCAwfSwKKwkJCXswLCAwLCAwLCAwLCAwfSwKKwkJCXswLCAwLCAwLCAwLCAwfSwKKwkJCXswLCAwLCAwLCAwLCAwfSwKKwkJCXswLCAwLCAwLCAwLCAwfSwKKwkJCXswLCAwLCAwLCAwLCAwfSwKKwkJCXswLCAwLCAwLCAwLCAwfSwKKwkJCXswLCAwLCAwLCAwLCAwfSwKKwkJfSwKKworCX0sCisJLmNhbFRhcmdldF9mcmVxYmluXzVHID0geworCQlGUkVRMkZCSU4oNTE4MCwgMCksCisJCUZSRVEyRkJJTig1MjIwLCAwKSwKKwkJRlJFUTJGQklOKDUzMjAsIDApLAorCQlGUkVRMkZCSU4oNTQwMCwgMCksCisJCUZSRVEyRkJJTig1NTAwLCAwKSwKKwkJRlJFUTJGQklOKDU2MDAsIDApLAorCQlGUkVRMkZCSU4oNTcyNSwgMCksCisJCUZSRVEyRkJJTig1ODI1LCAwKQorCX0sCisJLmNhbFRhcmdldF9mcmVxYmluXzVHSFQyMCA9IHsKKwkJRlJFUTJGQklOKDUxODAsIDApLAorCQlGUkVRMkZCSU4oNTIyMCwgMCksCisJCUZSRVEyRkJJTig1MzIwLCAwKSwKKwkJRlJFUTJGQklOKDU0MDAsIDApLAorCQlGUkVRMkZCSU4oNTUwMCwgMCksCisJCUZSRVEyRkJJTig1NjAwLCAwKSwKKwkJRlJFUTJGQklOKDU3MjUsIDApLAorCQlGUkVRMkZCSU4oNTgyNSwgMCkKKwl9LAorCS5jYWxUYXJnZXRfZnJlcWJpbl81R0hUNDAgPSB7CisJCUZSRVEyRkJJTig1MTgwLCAwKSwKKwkJRlJFUTJGQklOKDUyMjAsIDApLAorCQlGUkVRMkZCSU4oNTMyMCwgMCksCisJCUZSRVEyRkJJTig1NDAwLCAwKSwKKwkJRlJFUTJGQklOKDU1MDAsIDApLAorCQlGUkVRMkZCSU4oNTYwMCwgMCksCisJCUZSRVEyRkJJTig1NzI1LCAwKSwKKwkJRlJFUTJGQklOKDU4MjUsIDApCisJfSwKKwkuY2FsVGFyZ2V0UG93ZXI1RyA9IHsKKwkJLyogNi0yNCwzNiw0OCw1NCAqLworCQl7IHszMiwgMzIsIDI4LCAyNn0gfSwKKwkJeyB7MzIsIDMyLCAyOCwgMjZ9IH0sCisJCXsgezMyLCAzMiwgMjgsIDI2fSB9LAorCQl7IHszMiwgMzIsIDI2LCAyNH0gfSwKKwkJeyB7MzIsIDMyLCAyNiwgMjR9IH0sCisJCXsgezMyLCAzMiwgMjQsIDIyfSB9LAorCQl7IHszMCwgMzAsIDI0LCAyMn0gfSwKKwkJeyB7MzAsIDMwLCAyNCwgMjJ9IH0sCisJfSwKKwkuY2FsVGFyZ2V0UG93ZXI1R0hUMjAgPSB7CisJCS8qCisJCSAqIDBfOF8xNiwxLTNfOS0xMV8xNy0xOSwKKwkJICogNCw1LDYsNywxMiwxMywxNCwxNSwyMCwyMSwyMiwyMworCQkgKi8KKwkJeyB7MzIsIDMyLCAzMiwgMzIsIDI4LCAyNiwgMzIsIDI4LCAyNiwgMjQsIDI0LCAyNCwgMjIsIDIyfSB9LAorCQl7IHszMiwgMzIsIDMyLCAzMiwgMjgsIDI2LCAzMiwgMjgsIDI2LCAyNCwgMjQsIDI0LCAyMiwgMjJ9IH0sCisJCXsgezMyLCAzMiwgMzIsIDMyLCAyOCwgMjYsIDMyLCAyOCwgMjYsIDI0LCAyNCwgMjQsIDIyLCAyMn0gfSwKKwkJeyB7MzIsIDMyLCAzMiwgMzIsIDI4LCAyNiwgMzIsIDI2LCAyNCwgMjIsIDIyLCAyMiwgMjAsIDIwfSB9LAorCQl7IHszMiwgMzIsIDMyLCAzMiwgMjgsIDI2LCAzMiwgMjYsIDI0LCAyMiwgMjAsIDE4LCAxNiwgMTZ9IH0sCisJCXsgezMyLCAzMiwgMzIsIDMyLCAyOCwgMjYsIDMyLCAyNCwgMjAsIDE2LCAxOCwgMTYsIDE0LCAxNH0gfSwKKwkJeyB7MzAsIDMwLCAzMCwgMzAsIDI4LCAyNiwgMzAsIDI0LCAyMCwgMTYsIDE4LCAxNiwgMTQsIDE0fSB9LAorCQl7IHszMCwgMzAsIDMwLCAzMCwgMjgsIDI2LCAzMCwgMjQsIDIwLCAxNiwgMTgsIDE2LCAxNCwgMTR9IH0sCisJfSwKKwkuY2FsVGFyZ2V0UG93ZXI1R0hUNDAgPSAgeworCQkvKgorCQkgKiAwXzhfMTYsMS0zXzktMTFfMTctMTksCisJCSAqIDQsNSw2LDcsMTIsMTMsMTQsMTUsMjAsMjEsMjIsMjMKKwkJICovCisJCXsgezMyLCAzMiwgMzIsIDMwLCAyOCwgMjYsIDMwLCAyOCwgMjYsIDI0LCAyNCwgMjQsIDIyLCAyMn0gfSwKKwkJeyB7MzIsIDMyLCAzMiwgMzAsIDI4LCAyNiwgMzAsIDI4LCAyNiwgMjQsIDI0LCAyNCwgMjIsIDIyfSB9LAorCQl7IHszMiwgMzIsIDMyLCAzMCwgMjgsIDI2LCAzMCwgMjgsIDI2LCAyNCwgMjQsIDI0LCAyMiwgMjJ9IH0sCisJCXsgezMyLCAzMiwgMzIsIDMwLCAyOCwgMjYsIDMwLCAyNiwgMjQsIDIyLCAyMiwgMjIsIDIwLCAyMH0gfSwKKwkJeyB7MzIsIDMyLCAzMiwgMzAsIDI4LCAyNiwgMzAsIDI2LCAyNCwgMjIsIDIwLCAxOCwgMTYsIDE2fSB9LAorCQl7IHszMiwgMzIsIDMyLCAzMCwgMjgsIDI2LCAzMCwgMjIsIDIwLCAxNiwgMTgsIDE2LCAxNCwgMTR9IH0sCisJCXsgezMwLCAzMCwgMzAsIDMwLCAyOCwgMjYsIDMwLCAyMiwgMjAsIDE2LCAxOCwgMTYsIDE0LCAxNH0gfSwKKwkJeyB7MzAsIDMwLCAzMCwgMzAsIDI4LCAyNiwgMzAsIDIyLCAyMCwgMTYsIDE4LCAxNiwgMTQsIDE0fSB9LAorCX0sCisJLmN0bEluZGV4XzVHID0gIHsKKwkJMHgxMCwgMHgxNiwgMHgxOCwgMHg0MCwgMHg0NiwKKwkJMHg0OCwgMHgzMCwgMHgzNiwgMHgzOAorCX0sCisJLmN0bF9mcmVxYmluXzVHID0gIHsKKwkJeworCQkJLyogRGF0YVswXS5jdGxlZGdlc1swXS5iY2hhbm5lbCAqLyBGUkVRMkZCSU4oNTE4MCwgMCksCisJCQkvKiBEYXRhWzBdLmN0bGVkZ2VzWzFdLmJjaGFubmVsICovIEZSRVEyRkJJTig1MjYwLCAwKSwKKwkJCS8qIERhdGFbMF0uY3RsZWRnZXNbMl0uYmNoYW5uZWwgKi8gRlJFUTJGQklOKDUyODAsIDApLAorCQkJLyogRGF0YVswXS5jdGxlZGdlc1szXS5iY2hhbm5lbCAqLyBGUkVRMkZCSU4oNTUwMCwgMCksCisJCQkvKiBEYXRhWzBdLmN0bGVkZ2VzWzRdLmJjaGFubmVsICovIEZSRVEyRkJJTig1NjAwLCAwKSwKKwkJCS8qIERhdGFbMF0uY3RsZWRnZXNbNV0uYmNoYW5uZWwgKi8gRlJFUTJGQklOKDU3MDAsIDApLAorCQkJLyogRGF0YVswXS5jdGxlZGdlc1s2XS5iY2hhbm5lbCAqLyBGUkVRMkZCSU4oNTc0NSwgMCksCisJCQkvKiBEYXRhWzBdLmN0bGVkZ2VzWzddLmJjaGFubmVsICovIEZSRVEyRkJJTig1ODI1LCAwKQorCQl9LAorCQl7CisJCQkvKiBEYXRhWzFdLmN0bGVkZ2VzWzBdLmJjaGFubmVsICovIEZSRVEyRkJJTig1MTgwLCAwKSwKKwkJCS8qIERhdGFbMV0uY3RsZWRnZXNbMV0uYmNoYW5uZWwgKi8gRlJFUTJGQklOKDUyNjAsIDApLAorCQkJLyogRGF0YVsxXS5jdGxlZGdlc1syXS5iY2hhbm5lbCAqLyBGUkVRMkZCSU4oNTI4MCwgMCksCisJCQkvKiBEYXRhWzFdLmN0bGVkZ2VzWzNdLmJjaGFubmVsICovIEZSRVEyRkJJTig1NTAwLCAwKSwKKwkJCS8qIERhdGFbMV0uY3RsZWRnZXNbNF0uYmNoYW5uZWwgKi8gRlJFUTJGQklOKDU1MjAsIDApLAorCQkJLyogRGF0YVsxXS5jdGxlZGdlc1s1XS5iY2hhbm5lbCAqLyBGUkVRMkZCSU4oNTcwMCwgMCksCisJCQkvKiBEYXRhWzFdLmN0bGVkZ2VzWzZdLmJjaGFubmVsICovIEZSRVEyRkJJTig1NzQ1LCAwKSwKKwkJCS8qIERhdGFbMV0uY3RsZWRnZXNbN10uYmNoYW5uZWwgKi8gRlJFUTJGQklOKDU4MjUsIDApCisJCX0sCisKKwkJeworCQkJLyogRGF0YVsyXS5jdGxlZGdlc1swXS5iY2hhbm5lbCAqLyBGUkVRMkZCSU4oNTE5MCwgMCksCisJCQkvKiBEYXRhWzJdLmN0bGVkZ2VzWzFdLmJjaGFubmVsICovIEZSRVEyRkJJTig1MjMwLCAwKSwKKwkJCS8qIERhdGFbMl0uY3RsZWRnZXNbMl0uYmNoYW5uZWwgKi8gRlJFUTJGQklOKDUyNzAsIDApLAorCQkJLyogRGF0YVsyXS5jdGxlZGdlc1szXS5iY2hhbm5lbCAqLyBGUkVRMkZCSU4oNTMxMCwgMCksCisJCQkvKiBEYXRhWzJdLmN0bGVkZ2VzWzRdLmJjaGFubmVsICovIEZSRVEyRkJJTig1NTEwLCAwKSwKKwkJCS8qIERhdGFbMl0uY3RsZWRnZXNbNV0uYmNoYW5uZWwgKi8gRlJFUTJGQklOKDU1NTAsIDApLAorCQkJLyogRGF0YVsyXS5jdGxlZGdlc1s2XS5iY2hhbm5lbCAqLyBGUkVRMkZCSU4oNTY3MCwgMCksCisJCQkvKiBEYXRhWzJdLmN0bGVkZ2VzWzddLmJjaGFubmVsICovIEZSRVEyRkJJTig1NzU1LCAwKQorCQl9LAorCisJCXsKKwkJCS8qIERhdGFbM10uY3RsZWRnZXNbMF0uYmNoYW5uZWwgKi8gRlJFUTJGQklOKDUxODAsIDApLAorCQkJLyogRGF0YVszXS5jdGxlZGdlc1sxXS5iY2hhbm5lbCAqLyBGUkVRMkZCSU4oNTIwMCwgMCksCisJCQkvKiBEYXRhWzNdLmN0bGVkZ2VzWzJdLmJjaGFubmVsICovIEZSRVEyRkJJTig1MjYwLCAwKSwKKwkJCS8qIERhdGFbM10uY3RsZWRnZXNbM10uYmNoYW5uZWwgKi8gRlJFUTJGQklOKDUzMjAsIDApLAorCQkJLyogRGF0YVszXS5jdGxlZGdlc1s0XS5iY2hhbm5lbCAqLyBGUkVRMkZCSU4oNTUwMCwgMCksCisJCQkvKiBEYXRhWzNdLmN0bGVkZ2VzWzVdLmJjaGFubmVsICovIEZSRVEyRkJJTig1NzAwLCAwKSwKKwkJCS8qIERhdGFbM10uY3RsZWRnZXNbNl0uYmNoYW5uZWwgKi8gMHhGRiwKKwkJCS8qIERhdGFbM10uY3RsZWRnZXNbN10uYmNoYW5uZWwgKi8gMHhGRiwKKwkJfSwKKworCQl7CisJCQkvKiBEYXRhWzRdLmN0bGVkZ2VzWzBdLmJjaGFubmVsICovIEZSRVEyRkJJTig1MTgwLCAwKSwKKwkJCS8qIERhdGFbNF0uY3RsZWRnZXNbMV0uYmNoYW5uZWwgKi8gRlJFUTJGQklOKDUyNjAsIDApLAorCQkJLyogRGF0YVs0XS5jdGxlZGdlc1syXS5iY2hhbm5lbCAqLyBGUkVRMkZCSU4oNTUwMCwgMCksCisJCQkvKiBEYXRhWzRdLmN0bGVkZ2VzWzNdLmJjaGFubmVsICovIEZSRVEyRkJJTig1NzAwLCAwKSwKKwkJCS8qIERhdGFbNF0uY3RsZWRnZXNbNF0uYmNoYW5uZWwgKi8gMHhGRiwKKwkJCS8qIERhdGFbNF0uY3RsZWRnZXNbNV0uYmNoYW5uZWwgKi8gMHhGRiwKKwkJCS8qIERhdGFbNF0uY3RsZWRnZXNbNl0uYmNoYW5uZWwgKi8gMHhGRiwKKwkJCS8qIERhdGFbNF0uY3RsZWRnZXNbN10uYmNoYW5uZWwgKi8gMHhGRiwKKwkJfSwKKworCQl7CisJCQkvKiBEYXRhWzVdLmN0bGVkZ2VzWzBdLmJjaGFubmVsICovIEZSRVEyRkJJTig1MTkwLCAwKSwKKwkJCS8qIERhdGFbNV0uY3RsZWRnZXNbMV0uYmNoYW5uZWwgKi8gRlJFUTJGQklOKDUyNzAsIDApLAorCQkJLyogRGF0YVs1XS5jdGxlZGdlc1syXS5iY2hhbm5lbCAqLyBGUkVRMkZCSU4oNTMxMCwgMCksCisJCQkvKiBEYXRhWzVdLmN0bGVkZ2VzWzNdLmJjaGFubmVsICovIEZSRVEyRkJJTig1NTEwLCAwKSwKKwkJCS8qIERhdGFbNV0uY3RsZWRnZXNbNF0uYmNoYW5uZWwgKi8gRlJFUTJGQklOKDU1OTAsIDApLAorCQkJLyogRGF0YVs1XS5jdGxlZGdlc1s1XS5iY2hhbm5lbCAqLyBGUkVRMkZCSU4oNTY3MCwgMCksCisJCQkvKiBEYXRhWzVdLmN0bGVkZ2VzWzZdLmJjaGFubmVsICovIDB4RkYsCisJCQkvKiBEYXRhWzVdLmN0bGVkZ2VzWzddLmJjaGFubmVsICovIDB4RkYKKwkJfSwKKworCQl7CisJCQkvKiBEYXRhWzZdLmN0bGVkZ2VzWzBdLmJjaGFubmVsICovIEZSRVEyRkJJTig1MTgwLCAwKSwKKwkJCS8qIERhdGFbNl0uY3RsZWRnZXNbMV0uYmNoYW5uZWwgKi8gRlJFUTJGQklOKDUyMDAsIDApLAorCQkJLyogRGF0YVs2XS5jdGxlZGdlc1syXS5iY2hhbm5lbCAqLyBGUkVRMkZCSU4oNTIyMCwgMCksCisJCQkvKiBEYXRhWzZdLmN0bGVkZ2VzWzNdLmJjaGFubmVsICovIEZSRVEyRkJJTig1MjYwLCAwKSwKKwkJCS8qIERhdGFbNl0uY3RsZWRnZXNbNF0uYmNoYW5uZWwgKi8gRlJFUTJGQklOKDU1MDAsIDApLAorCQkJLyogRGF0YVs2XS5jdGxlZGdlc1s1XS5iY2hhbm5lbCAqLyBGUkVRMkZCSU4oNTYwMCwgMCksCisJCQkvKiBEYXRhWzZdLmN0bGVkZ2VzWzZdLmJjaGFubmVsICovIEZSRVEyRkJJTig1NzAwLCAwKSwKKwkJCS8qIERhdGFbNl0uY3RsZWRnZXNbN10uYmNoYW5uZWwgKi8gRlJFUTJGQklOKDU3NDUsIDApCisJCX0sCisKKwkJeworCQkJLyogRGF0YVs3XS5jdGxlZGdlc1swXS5iY2hhbm5lbCAqLyBGUkVRMkZCSU4oNTE4MCwgMCksCisJCQkvKiBEYXRhWzddLmN0bGVkZ2VzWzFdLmJjaGFubmVsICovIEZSRVEyRkJJTig1MjYwLCAwKSwKKwkJCS8qIERhdGFbN10uY3RsZWRnZXNbMl0uYmNoYW5uZWwgKi8gRlJFUTJGQklOKDUzMjAsIDApLAorCQkJLyogRGF0YVs3XS5jdGxlZGdlc1szXS5iY2hhbm5lbCAqLyBGUkVRMkZCSU4oNTUwMCwgMCksCisJCQkvKiBEYXRhWzddLmN0bGVkZ2VzWzRdLmJjaGFubmVsICovIEZSRVEyRkJJTig1NTYwLCAwKSwKKwkJCS8qIERhdGFbN10uY3RsZWRnZXNbNV0uYmNoYW5uZWwgKi8gRlJFUTJGQklOKDU3MDAsIDApLAorCQkJLyogRGF0YVs3XS5jdGxlZGdlc1s2XS5iY2hhbm5lbCAqLyBGUkVRMkZCSU4oNTc0NSwgMCksCisJCQkvKiBEYXRhWzddLmN0bGVkZ2VzWzddLmJjaGFubmVsICovIEZSRVEyRkJJTig1ODI1LCAwKQorCQl9LAorCisJCXsKKwkJCS8qIERhdGFbOF0uY3RsZWRnZXNbMF0uYmNoYW5uZWwgKi8gRlJFUTJGQklOKDUxOTAsIDApLAorCQkJLyogRGF0YVs4XS5jdGxlZGdlc1sxXS5iY2hhbm5lbCAqLyBGUkVRMkZCSU4oNTIzMCwgMCksCisJCQkvKiBEYXRhWzhdLmN0bGVkZ2VzWzJdLmJjaGFubmVsICovIEZSRVEyRkJJTig1MjcwLCAwKSwKKwkJCS8qIERhdGFbOF0uY3RsZWRnZXNbM10uYmNoYW5uZWwgKi8gRlJFUTJGQklOKDU1MTAsIDApLAorCQkJLyogRGF0YVs4XS5jdGxlZGdlc1s0XS5iY2hhbm5lbCAqLyBGUkVRMkZCSU4oNTU1MCwgMCksCisJCQkvKiBEYXRhWzhdLmN0bGVkZ2VzWzVdLmJjaGFubmVsICovIEZSRVEyRkJJTig1NjcwLCAwKSwKKwkJCS8qIERhdGFbOF0uY3RsZWRnZXNbNl0uYmNoYW5uZWwgKi8gRlJFUTJGQklOKDU3NTUsIDApLAorCQkJLyogRGF0YVs4XS5jdGxlZGdlc1s3XS5iY2hhbm5lbCAqLyBGUkVRMkZCSU4oNTc5NSwgMCkKKwkJfQorCX0sCisJLmN0bFBvd2VyRGF0YV81RyA9IHsKKwkJeworCQkJeworCQkJCUNUTCg2MCwgMSksIENUTCg2MCwgMSksIENUTCg2MCwgMSksIENUTCg2MCwgMSksCisJCQkJQ1RMKDYwLCAxKSwgQ1RMKDYwLCAxKSwgQ1RMKDYwLCAxKSwgQ1RMKDYwLCAwKSwKKwkJCX0KKwkJfSwKKwkJeworCQkJeworCQkJCUNUTCg2MCwgMSksIENUTCg2MCwgMSksIENUTCg2MCwgMSksIENUTCg2MCwgMSksCisJCQkJQ1RMKDYwLCAxKSwgQ1RMKDYwLCAxKSwgQ1RMKDYwLCAxKSwgQ1RMKDYwLCAwKSwKKwkJCX0KKwkJfSwKKwkJeworCQkJeworCQkJCUNUTCg2MCwgMCksIENUTCg2MCwgMSksIENUTCg2MCwgMCksIENUTCg2MCwgMSksCisJCQkJQ1RMKDYwLCAxKSwgQ1RMKDYwLCAxKSwgQ1RMKDYwLCAxKSwgQ1RMKDYwLCAxKSwKKwkJCX0KKwkJfSwKKwkJeworCQkJeworCQkJCUNUTCg2MCwgMCksIENUTCg2MCwgMSksIENUTCg2MCwgMSksIENUTCg2MCwgMCksCisJCQkJQ1RMKDYwLCAxKSwgQ1RMKDYwLCAwKSwgQ1RMKDYwLCAwKSwgQ1RMKDYwLCAwKSwKKwkJCX0KKwkJfSwKKwkJeworCQkJeworCQkJCUNUTCg2MCwgMSksIENUTCg2MCwgMSksIENUTCg2MCwgMSksIENUTCg2MCwgMCksCisJCQkJQ1RMKDYwLCAwKSwgQ1RMKDYwLCAwKSwgQ1RMKDYwLCAwKSwgQ1RMKDYwLCAwKSwKKwkJCX0KKwkJfSwKKwkJeworCQkJeworCQkJCUNUTCg2MCwgMSksIENUTCg2MCwgMSksIENUTCg2MCwgMSksIENUTCg2MCwgMSksCisJCQkJQ1RMKDYwLCAxKSwgQ1RMKDYwLCAwKSwgQ1RMKDYwLCAwKSwgQ1RMKDYwLCAwKSwKKwkJCX0KKwkJfSwKKwkJeworCQkJeworCQkJCUNUTCg2MCwgMSksIENUTCg2MCwgMSksIENUTCg2MCwgMSksIENUTCg2MCwgMSksCisJCQkJQ1RMKDYwLCAxKSwgQ1RMKDYwLCAxKSwgQ1RMKDYwLCAxKSwgQ1RMKDYwLCAxKSwKKwkJCX0KKwkJfSwKKwkJeworCQkJeworCQkJCUNUTCg2MCwgMSksIENUTCg2MCwgMSksIENUTCg2MCwgMCksIENUTCg2MCwgMSksCisJCQkJQ1RMKDYwLCAxKSwgQ1RMKDYwLCAxKSwgQ1RMKDYwLCAxKSwgQ1RMKDYwLCAwKSwKKwkJCX0KKwkJfSwKKwkJeworCQkJeworCQkJCUNUTCg2MCwgMSksIENUTCg2MCwgMCksIENUTCg2MCwgMSksIENUTCg2MCwgMSksCisJCQkJQ1RMKDYwLCAxKSwgQ1RMKDYwLCAxKSwgQ1RMKDYwLCAwKSwgQ1RMKDYwLCAxKSwKKwkJCX0KKwkJfSwKKwl9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGFyOTMwMF9lZXByb20gYXI5MzAwX2gxMTYgPSB7CisJLmVlcHJvbVZlcnNpb24gPSAyLAorCS50ZW1wbGF0ZVZlcnNpb24gPSA0LAorCS5tYWNBZGRyID0gezB4MDAsIDB4MDMsIDB4N2YsIDB4MCwgMHgwLCAweDB9LAorCS5jdXN0RGF0YSA9IHsiaDExNi0wNDEtZjAwMDAifSwKKwkuYmFzZUVlcEhlYWRlciA9IHsKKwkJLnJlZ0RtbiA9IHsgTEUxNigwKSwgTEUxNigweDFmKSB9LAorCQkudHhyeE1hc2sgPSAgMHgzMywgLyogNCBiaXRzIHR4IGFuZCA0IGJpdHMgcnggKi8KKwkJLm9wQ2FwRmxhZ3MgPSB7CisJCQkub3BGbGFncyA9IEFSNTQxNl9PUEZMQUdTXzExRyB8IEFSNTQxNl9PUEZMQUdTXzExQSwKKwkJCS5lZXBNaXNjID0gMCwKKwkJfSwKKwkJLnJmU2lsZW50ID0gMCwKKwkJLmJsdWVUb290aE9wdGlvbnMgPSAwLAorCQkuZGV2aWNlQ2FwID0gMCwKKwkJLmRldmljZVR5cGUgPSA1LCAvKiB0YWtlcyBsb3dlciBieXRlIGluIGVlcHJvbSBsb2NhdGlvbiAqLworCQkucHdyVGFibGVPZmZzZXQgPSBBUjkzMDBfUFdSX1RBQkxFX09GRlNFVCwKKwkJLnBhcmFtc19mb3JfdHVuaW5nX2NhcHMgPSB7MCwgMH0sCisJCS5mZWF0dXJlRW5hYmxlID0gMHgwZCwKKwkJIC8qCisJCSAgKiBiaXQwIC0gZW5hYmxlIHR4IHRlbXAgY29tcCAtIGRpc2FibGVkCisJCSAgKiBiaXQxIC0gZW5hYmxlIHR4IHZvbHQgY29tcCAtIGRpc2FibGVkCisJCSAgKiBiaXQyIC0gZW5hYmxlIGZhc3RDbG9jayAtIGVuYWJsZWQKKwkJICAqIGJpdDMgLSBlbmFibGUgZG91YmxpbmcgLSBlbmFibGVkCisJCSAgKiBiaXQ0IC0gZW5hYmxlIGludGVybmFsIHJlZ3VsYXRvciAtIGRpc2FibGVkCisJCSAgKiBiaXQ1IC0gZW5hYmxlIHBhIHByZWRpc3RvcnRpb24gLSBkaXNhYmxlZAorCQkgICovCisJCS5taXNjQ29uZmlndXJhdGlvbiA9IDAsIC8qIGJpdDAgLSB0dXJuIGRvd24gZHJpdmVzdHJlbmd0aCAqLworCQkuZWVwcm9tV3JpdGVFbmFibGVHcGlvID0gNiwKKwkJLndsYW5EaXNhYmxlR3BpbyA9IDAsCisJCS53bGFuTGVkR3BpbyA9IDgsCisJCS5yeEJhbmRTZWxlY3RHcGlvID0gMHhmZiwKKwkJLnR4cnhnYWluID0gMHgxMCwKKwkJLnN3cmVnID0gMCwKKwkgfSwKKwkubW9kYWxIZWFkZXIyRyA9IHsKKwkvKiBhcjkzMDBfbW9kYWxfZWVwX2hlYWRlciAgMmcgKi8KKwkJLyogNCBpZGxlLHQxLHQyLGIoNCBiaXRzIHBlciBzZXR0aW5nKSAqLworCQkuYW50Q3RybENvbW1vbiA9IExFMzIoMHgxMTApLAorCQkvKiA0IHJhMWwxLCByYTJsMSwgcmExbDIsIHJhMmwyLCByYTEyICovCisJCS5hbnRDdHJsQ29tbW9uMiA9IExFMzIoMHg0NDQ0NCksCisKKwkJLyoKKwkJICogYW50Q3RybENoYWluW0FSOTMwMF9NQVhfQ0hBSU5TXTsgNiBpZGxlLCB0LCByLAorCQkgKiByeDEsIHJ4MTIsIGIgKDIgYml0cyBlYWNoKQorCQkgKi8KKwkJLmFudEN0cmxDaGFpbiA9IHsgTEUxNigweDEwKSwgTEUxNigweDEwKSwgTEUxNigweDEwKSB9LAorCisJCS8qCisJCSAqIHhhdHRlbjFEQltBUjkzMDBfTUFYX0NIQUlOU107ICAzIHhhdHRlbjFfZGIKKwkJICogZm9yIGFyOTI4MCAoMHhhMjBjL2IyMGMgNTowKQorCQkgKi8KKwkJLnhhdHRlbjFEQiA9IHsweDFmLCAweDFmLCAweDFmfSwKKworCQkvKgorCQkgKiB4YXR0ZW4xTWFyZ2luW0FSOTMwMF9NQVhfQ0hBSU5TXTsgMyB4YXR0ZW4xX21hcmdpbgorCQkgKiBmb3IgYXI5MjgwICgweGEyMGMvYjIwYyAxNjoxMgorCQkgKi8KKwkJLnhhdHRlbjFNYXJnaW4gPSB7MHgxMiwgMHgxMiwgMHgxMn0sCisJCS50ZW1wU2xvcGUgPSAyNSwKKwkJLnZvbHRTbG9wZSA9IDAsCisKKwkJLyoKKwkJICogc3B1ckNoYW5zW09TUFJFWV9FRVBST01fTU9EQUxfU1BVUlNdOyBzcHVyCisJCSAqIGNoYW5uZWxzIGluIHVzdWFsIGZiaW4gY29kaW5nIGZvcm1hdAorCQkgKi8KKwkJLnNwdXJDaGFucyA9IHtGUkVRMkZCSU4oMjQ2NCwgMSksIDAsIDAsIDAsIDB9LAorCisJCS8qCisJCSAqIG5vaXNlRmxvb3JUaHJlc2hDaFtBUjkzMDBfTUFYX0NIQUlOU107IDMgQ2hlY2sKKwkJICogaWYgdGhlIHJlZ2lzdGVyIGlzIHBlciBjaGFpbgorCQkgKi8KKwkJLm5vaXNlRmxvb3JUaHJlc2hDaCA9IHstMSwgMCwgMH0sCisJCS5vYiA9IHsxLCAxLCAxfSwvKiAzIGNoYWluICovCisJCS5kYl9zdGFnZTIgPSB7MSwgMSwgMX0sIC8qIDMgY2hhaW4gICovCisJCS5kYl9zdGFnZTMgPSB7MCwgMCwgMH0sCisJCS5kYl9zdGFnZTQgPSB7MCwgMCwgMH0sCisJCS54cGFCaWFzTHZsID0gMCwKKwkJLnR4RnJhbWVUb0RhdGFTdGFydCA9IDB4MGUsCisJCS50eEZyYW1lVG9QYU9uID0gMHgwZSwKKwkJLnR4Q2xpcCA9IDMsIC8qIDQgYml0cyB0eF9jbGlwLCA0IGJpdHMgZGFjX3NjYWxlX2NjayAqLworCQkuYW50ZW5uYUdhaW4gPSAwLAorCQkuc3dpdGNoU2V0dGxpbmcgPSAweDJjLAorCQkuYWRjRGVzaXJlZFNpemUgPSAtMzAsCisJCS50eEVuZFRvWHBhT2ZmID0gMCwKKwkJLnR4RW5kVG9SeE9uID0gMHgyLAorCQkudHhGcmFtZVRvWHBhT24gPSAweGUsCisJCS50aHJlc2g2MiA9IDI4LAorCQkucGFwZFJhdGVNYXNrSHQyMCA9IExFMzIoMHgwYzgwQzA4MCksCisJCS5wYXBkUmF0ZU1hc2tIdDQwID0gTEUzMigweDAwODBDMDgwKSwKKwkJLmZ1dHVyZU1vZGFsID0geworCQkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkJfSwKKwkgfSwKKwkgLmJhc2VfZXh0MSA9IHsKKwkJLmFudF9kaXZfY29udHJvbCA9IDAsCisJCS5mdXR1cmUgPSB7MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMH0KKwkgfSwKKwkuY2FsRnJlcVBpZXIyRyA9IHsKKwkJRlJFUTJGQklOKDI0MTIsIDEpLAorCQlGUkVRMkZCSU4oMjQzNywgMSksCisJCUZSRVEyRkJJTigyNDcyLCAxKSwKKwkgfSwKKwkvKiBhcjkzMDBfY2FsX2RhdGFfcGVyX2ZyZXFfb3BfbG9vcCAyZyAqLworCS5jYWxQaWVyRGF0YTJHID0geworCQl7IHswLCAwLCAwLCAwLCAwLCAwfSwgezAsIDAsIDAsIDAsIDAsIDB9LCB7MCwgMCwgMCwgMCwgMCwgMH0gfSwKKwkJeyB7MCwgMCwgMCwgMCwgMCwgMH0sIHswLCAwLCAwLCAwLCAwLCAwfSwgezAsIDAsIDAsIDAsIDAsIDB9IH0sCisJCXsgezAsIDAsIDAsIDAsIDAsIDB9LCB7MCwgMCwgMCwgMCwgMCwgMH0sIHswLCAwLCAwLCAwLCAwLCAwfSB9LAorCSB9LAorCS5jYWxUYXJnZXRfZnJlcWJpbl9DY2sgPSB7CisJCUZSRVEyRkJJTigyNDEyLCAxKSwKKwkJRlJFUTJGQklOKDI0NzIsIDEpLAorCSB9LAorCS5jYWxUYXJnZXRfZnJlcWJpbl8yRyA9IHsKKwkJRlJFUTJGQklOKDI0MTIsIDEpLAorCQlGUkVRMkZCSU4oMjQzNywgMSksCisJCUZSRVEyRkJJTigyNDcyLCAxKQorCSB9LAorCS5jYWxUYXJnZXRfZnJlcWJpbl8yR0hUMjAgPSB7CisJCUZSRVEyRkJJTigyNDEyLCAxKSwKKwkJRlJFUTJGQklOKDI0MzcsIDEpLAorCQlGUkVRMkZCSU4oMjQ3MiwgMSkKKwkgfSwKKwkuY2FsVGFyZ2V0X2ZyZXFiaW5fMkdIVDQwID0geworCQlGUkVRMkZCSU4oMjQxMiwgMSksCisJCUZSRVEyRkJJTigyNDM3LCAxKSwKKwkJRlJFUTJGQklOKDI0NzIsIDEpCisJIH0sCisJLmNhbFRhcmdldFBvd2VyQ2NrID0geworCQkgLyogMUwtNUwsNVMsMTFMLDExUyAqLworCQkgeyB7MzQsIDM0LCAzNCwgMzR9IH0sCisJCSB7IHszNCwgMzQsIDM0LCAzNH0gfSwKKwl9LAorCS5jYWxUYXJnZXRQb3dlcjJHID0geworCQkgLyogNi0yNCwzNiw0OCw1NCAqLworCQkgeyB7MzQsIDM0LCAzMiwgMzJ9IH0sCisJCSB7IHszNCwgMzQsIDMyLCAzMn0gfSwKKwkJIHsgezM0LCAzNCwgMzIsIDMyfSB9LAorCX0sCisJLmNhbFRhcmdldFBvd2VyMkdIVDIwID0geworCQl7IHszMiwgMzIsIDMyLCAzMiwgMzIsIDMwLCAzMiwgMzIsIDMwLCAyOCwgMCwgMCwgMCwgMH0gfSwKKwkJeyB7MzIsIDMyLCAzMiwgMzIsIDMyLCAzMCwgMzIsIDMyLCAzMCwgMjgsIDAsIDAsIDAsIDB9IH0sCisJCXsgezMyLCAzMiwgMzIsIDMyLCAzMiwgMzAsIDMyLCAzMiwgMzAsIDI4LCAwLCAwLCAwLCAwfSB9LAorCX0sCisJLmNhbFRhcmdldFBvd2VyMkdIVDQwID0geworCQl7IHszMCwgMzAsIDMwLCAzMCwgMzAsIDI4LCAzMCwgMzAsIDI4LCAyNiwgMCwgMCwgMCwgMH0gfSwKKwkJeyB7MzAsIDMwLCAzMCwgMzAsIDMwLCAyOCwgMzAsIDMwLCAyOCwgMjYsIDAsIDAsIDAsIDB9IH0sCisJCXsgezMwLCAzMCwgMzAsIDMwLCAzMCwgMjgsIDMwLCAzMCwgMjgsIDI2LCAwLCAwLCAwLCAwfSB9LAorCX0sCisJLmN0bEluZGV4XzJHID0gIHsKKwkJMHgxMSwgMHgxMiwgMHgxNSwgMHgxNywgMHg0MSwgMHg0MiwKKwkJMHg0NSwgMHg0NywgMHgzMSwgMHgzMiwgMHgzNSwgMHgzNywKKwl9LAorCS5jdGxfZnJlcWJpbl8yRyA9IHsKKwkJeworCQkJRlJFUTJGQklOKDI0MTIsIDEpLAorCQkJRlJFUTJGQklOKDI0MTcsIDEpLAorCQkJRlJFUTJGQklOKDI0NTcsIDEpLAorCQkJRlJFUTJGQklOKDI0NjIsIDEpCisJCX0sCisJCXsKKwkJCUZSRVEyRkJJTigyNDEyLCAxKSwKKwkJCUZSRVEyRkJJTigyNDE3LCAxKSwKKwkJCUZSRVEyRkJJTigyNDYyLCAxKSwKKwkJCTB4RkYsCisJCX0sCisKKwkJeworCQkJRlJFUTJGQklOKDI0MTIsIDEpLAorCQkJRlJFUTJGQklOKDI0MTcsIDEpLAorCQkJRlJFUTJGQklOKDI0NjIsIDEpLAorCQkJMHhGRiwKKwkJfSwKKwkJeworCQkJRlJFUTJGQklOKDI0MjIsIDEpLAorCQkJRlJFUTJGQklOKDI0MjcsIDEpLAorCQkJRlJFUTJGQklOKDI0NDcsIDEpLAorCQkJRlJFUTJGQklOKDI0NTIsIDEpCisJCX0sCisKKwkJeworCQkJLyogRGF0YVs0XS5jdGxFZGdlc1swXS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oMjQxMiwgMSksCisJCQkvKiBEYXRhWzRdLmN0bEVkZ2VzWzFdLmJDaGFubmVsICovIEZSRVEyRkJJTigyNDE3LCAxKSwKKwkJCS8qIERhdGFbNF0uY3RsRWRnZXNbMl0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDI0NzIsIDEpLAorCQkJLyogRGF0YVs0XS5jdGxFZGdlc1szXS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oMjQ4NCwgMSksCisJCX0sCisKKwkJeworCQkJLyogRGF0YVs1XS5jdGxFZGdlc1swXS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oMjQxMiwgMSksCisJCQkvKiBEYXRhWzVdLmN0bEVkZ2VzWzFdLmJDaGFubmVsICovIEZSRVEyRkJJTigyNDE3LCAxKSwKKwkJCS8qIERhdGFbNV0uY3RsRWRnZXNbMl0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDI0NzIsIDEpLAorCQkJMCwKKwkJfSwKKworCQl7CisJCQkvKiBEYXRhWzZdLmN0bEVkZ2VzWzBdLmJDaGFubmVsICovIEZSRVEyRkJJTigyNDEyLCAxKSwKKwkJCS8qIERhdGFbNl0uY3RsRWRnZXNbMV0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDI0MTcsIDEpLAorCQkJRlJFUTJGQklOKDI0NzIsIDEpLAorCQkJMCwKKwkJfSwKKworCQl7CisJCQkvKiBEYXRhWzddLmN0bEVkZ2VzWzBdLmJDaGFubmVsICovIEZSRVEyRkJJTigyNDIyLCAxKSwKKwkJCS8qIERhdGFbN10uY3RsRWRnZXNbMV0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDI0MjcsIDEpLAorCQkJLyogRGF0YVs3XS5jdGxFZGdlc1syXS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oMjQ0NywgMSksCisJCQkvKiBEYXRhWzddLmN0bEVkZ2VzWzNdLmJDaGFubmVsICovIEZSRVEyRkJJTigyNDYyLCAxKSwKKwkJfSwKKworCQl7CisJCQkvKiBEYXRhWzhdLmN0bEVkZ2VzWzBdLmJDaGFubmVsICovIEZSRVEyRkJJTigyNDEyLCAxKSwKKwkJCS8qIERhdGFbOF0uY3RsRWRnZXNbMV0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDI0MTcsIDEpLAorCQkJLyogRGF0YVs4XS5jdGxFZGdlc1syXS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oMjQ3MiwgMSksCisJCX0sCisKKwkJeworCQkJLyogRGF0YVs5XS5jdGxFZGdlc1swXS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oMjQxMiwgMSksCisJCQkvKiBEYXRhWzldLmN0bEVkZ2VzWzFdLmJDaGFubmVsICovIEZSRVEyRkJJTigyNDE3LCAxKSwKKwkJCS8qIERhdGFbOV0uY3RsRWRnZXNbMl0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDI0NzIsIDEpLAorCQkJMAorCQl9LAorCisJCXsKKwkJCS8qIERhdGFbMTBdLmN0bEVkZ2VzWzBdLmJDaGFubmVsICovIEZSRVEyRkJJTigyNDEyLCAxKSwKKwkJCS8qIERhdGFbMTBdLmN0bEVkZ2VzWzFdLmJDaGFubmVsICovIEZSRVEyRkJJTigyNDE3LCAxKSwKKwkJCS8qIERhdGFbMTBdLmN0bEVkZ2VzWzJdLmJDaGFubmVsICovIEZSRVEyRkJJTigyNDcyLCAxKSwKKwkJCTAKKwkJfSwKKworCQl7CisJCQkvKiBEYXRhWzExXS5jdGxFZGdlc1swXS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oMjQyMiwgMSksCisJCQkvKiBEYXRhWzExXS5jdGxFZGdlc1sxXS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oMjQyNywgMSksCisJCQkvKiBEYXRhWzExXS5jdGxFZGdlc1syXS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oMjQ0NywgMSksCisJCQkvKiBEYXRhWzExXS5jdGxFZGdlc1szXS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oMjQ2MiwgMSksCisJCX0KKwkgfSwKKwkuY3RsUG93ZXJEYXRhXzJHID0geworCQkgeyB7IENUTCg2MCwgMCksIENUTCg2MCwgMSksIENUTCg2MCwgMCksIENUTCg2MCwgMCkgfSB9LAorCQkgeyB7IENUTCg2MCwgMCksIENUTCg2MCwgMSksIENUTCg2MCwgMCksIENUTCg2MCwgMCkgfSB9LAorCQkgeyB7IENUTCg2MCwgMSksIENUTCg2MCwgMCksIENUTCg2MCwgMCksIENUTCg2MCwgMSkgfSB9LAorCisJCSB7IHsgQ1RMKDYwLCAxKSwgQ1RMKDYwLCAwKSwgQ1RMKDAsIDApLCBDVEwoMCwgMCkgfSB9LAorCQkgeyB7IENUTCg2MCwgMCksIENUTCg2MCwgMSksIENUTCg2MCwgMCksIENUTCg2MCwgMCkgfSB9LAorCQkgeyB7IENUTCg2MCwgMCksIENUTCg2MCwgMSksIENUTCg2MCwgMCksIENUTCg2MCwgMCkgfSB9LAorCisJCSB7IHsgQ1RMKDYwLCAwKSwgQ1RMKDYwLCAxKSwgQ1RMKDYwLCAxKSwgQ1RMKDYwLCAwKSB9IH0sCisJCSB7IHsgQ1RMKDYwLCAwKSwgQ1RMKDYwLCAxKSwgQ1RMKDYwLCAwKSwgQ1RMKDYwLCAwKSB9IH0sCisJCSB7IHsgQ1RMKDYwLCAwKSwgQ1RMKDYwLCAxKSwgQ1RMKDYwLCAwKSwgQ1RMKDYwLCAwKSB9IH0sCisKKwkJIHsgeyBDVEwoNjAsIDApLCBDVEwoNjAsIDEpLCBDVEwoNjAsIDApLCBDVEwoNjAsIDApIH0gfSwKKwkJIHsgeyBDVEwoNjAsIDApLCBDVEwoNjAsIDEpLCBDVEwoNjAsIDEpLCBDVEwoNjAsIDEpIH0gfSwKKwkJIHsgeyBDVEwoNjAsIDApLCBDVEwoNjAsIDEpLCBDVEwoNjAsIDEpLCBDVEwoNjAsIDEpIH0gfSwKKwkgfSwKKwkubW9kYWxIZWFkZXI1RyA9IHsKKwkJLyogNCBpZGxlLHQxLHQyLGIgKDQgYml0cyBwZXIgc2V0dGluZykgKi8KKwkJLmFudEN0cmxDb21tb24gPSBMRTMyKDB4MjIwKSwKKwkJLyogNCByYTFsMSwgcmEybDEsIHJhMWwyLHJhMmwyLHJhMTIgKi8KKwkJLmFudEN0cmxDb21tb24yID0gTEUzMigweDQ0NDQ0KSwKKwkJIC8qIGFudEN0cmxDaGFpbiA2IGlkbGUsIHQscixyeDEscngxMixiICgyIGJpdHMgZWFjaCkgKi8KKwkJLmFudEN0cmxDaGFpbiA9IHsKKwkJCUxFMTYoMHgxNTApLCBMRTE2KDB4MTUwKSwgTEUxNigweDE1MCksCisJCX0sCisJCSAvKiB4YXR0ZW4xREIgMyB4YXR0ZW4xX2RiIGZvciBBUjkyODAgKDB4YTIwYy9iMjBjIDU6MCkgKi8KKwkJLnhhdHRlbjFEQiA9IHsweDE5LCAweDE5LCAweDE5fSwKKworCQkvKgorCQkgKiB4YXR0ZW4xTWFyZ2luW0FSOTMwMF9NQVhfQ0hBSU5TXTsgMyB4YXR0ZW4xX21hcmdpbgorCQkgKiBmb3IgbWVybGluICgweGEyMGMvYjIwYyAxNjoxMgorCQkgKi8KKwkJLnhhdHRlbjFNYXJnaW4gPSB7MHgxNCwgMHgxNCwgMHgxNH0sCisJCS50ZW1wU2xvcGUgPSA3MCwKKwkJLnZvbHRTbG9wZSA9IDAsCisJCS8qIHNwdXJDaGFucyBzcHVyIGNoYW5uZWxzIGluIHVzdWFsIGZiaW4gY29kaW5nIGZvcm1hdCAqLworCQkuc3B1ckNoYW5zID0gezAsIDAsIDAsIDAsIDB9LAorCQkvKiBub2lzZUZsb29yVGhyZXNoQ2ggQ2hlY2sgaWYgdGhlIHJlZ2lzdGVyIGlzIHBlciBjaGFpbiAqLworCQkubm9pc2VGbG9vclRocmVzaENoID0gey0xLCAwLCAwfSwKKwkJLm9iID0gezMsIDMsIDN9LCAvKiAzIGNoYWluICovCisJCS5kYl9zdGFnZTIgPSB7MywgMywgM30sIC8qIDMgY2hhaW4gKi8KKwkJLmRiX3N0YWdlMyA9IHszLCAzLCAzfSwgLyogZG9lc24ndCBleGlzdCBmb3IgMkcgKi8KKwkJLmRiX3N0YWdlNCA9IHszLCAzLCAzfSwJIC8qIGRvbid0IGV4aXN0IGZvciAyRyAqLworCQkueHBhQmlhc0x2bCA9IDAsCisJCS50eEZyYW1lVG9EYXRhU3RhcnQgPSAweDBlLAorCQkudHhGcmFtZVRvUGFPbiA9IDB4MGUsCisJCS50eENsaXAgPSAzLCAvKiA0IGJpdHMgdHhfY2xpcCwgNCBiaXRzIGRhY19zY2FsZV9jY2sgKi8KKwkJLmFudGVubmFHYWluID0gMCwKKwkJLnN3aXRjaFNldHRsaW5nID0gMHgyZCwKKwkJLmFkY0Rlc2lyZWRTaXplID0gLTMwLAorCQkudHhFbmRUb1hwYU9mZiA9IDAsCisJCS50eEVuZFRvUnhPbiA9IDB4MiwKKwkJLnR4RnJhbWVUb1hwYU9uID0gMHhlLAorCQkudGhyZXNoNjIgPSAyOCwKKwkJLnBhcGRSYXRlTWFza0h0MjAgPSBMRTMyKDB4MGNmMGUwZTApLAorCQkucGFwZFJhdGVNYXNrSHQ0MCA9IExFMzIoMHg2Y2YwZTBlMCksCisJCS5mdXR1cmVNb2RhbCA9IHsKKwkJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJCX0sCisJIH0sCisJLmJhc2VfZXh0MiA9IHsKKwkJLnRlbXBTbG9wZUxvdyA9IDM1LAorCQkudGVtcFNsb3BlSGlnaCA9IDUwLAorCQkueGF0dGVuMURCTG93ID0gezAsIDAsIDB9LAorCQkueGF0dGVuMU1hcmdpbkxvdyA9IHswLCAwLCAwfSwKKwkJLnhhdHRlbjFEQkhpZ2ggPSB7MCwgMCwgMH0sCisJCS54YXR0ZW4xTWFyZ2luSGlnaCA9IHswLCAwLCAwfQorCSB9LAorCS5jYWxGcmVxUGllcjVHID0geworCQlGUkVRMkZCSU4oNTE4MCwgMCksCisJCUZSRVEyRkJJTig1MjIwLCAwKSwKKwkJRlJFUTJGQklOKDUzMjAsIDApLAorCQlGUkVRMkZCSU4oNTQwMCwgMCksCisJCUZSRVEyRkJJTig1NTAwLCAwKSwKKwkJRlJFUTJGQklOKDU2MDAsIDApLAorCQlGUkVRMkZCSU4oNTcwMCwgMCksCisJCUZSRVEyRkJJTig1Nzg1LCAwKQorCX0sCisJLmNhbFBpZXJEYXRhNUcgPSB7CisJCQl7CisJCQkJezAsIDAsIDAsIDAsIDB9LAorCQkJCXswLCAwLCAwLCAwLCAwfSwKKwkJCQl7MCwgMCwgMCwgMCwgMH0sCisJCQkJezAsIDAsIDAsIDAsIDB9LAorCQkJCXswLCAwLCAwLCAwLCAwfSwKKwkJCQl7MCwgMCwgMCwgMCwgMH0sCisJCQkJezAsIDAsIDAsIDAsIDB9LAorCQkJCXswLCAwLCAwLCAwLCAwfSwKKwkJCX0sCisJCQl7CisJCQkJezAsIDAsIDAsIDAsIDB9LAorCQkJCXswLCAwLCAwLCAwLCAwfSwKKwkJCQl7MCwgMCwgMCwgMCwgMH0sCisJCQkJezAsIDAsIDAsIDAsIDB9LAorCQkJCXswLCAwLCAwLCAwLCAwfSwKKwkJCQl7MCwgMCwgMCwgMCwgMH0sCisJCQkJezAsIDAsIDAsIDAsIDB9LAorCQkJCXswLCAwLCAwLCAwLCAwfSwKKwkJCX0sCisJCQl7CisJCQkJezAsIDAsIDAsIDAsIDB9LAorCQkJCXswLCAwLCAwLCAwLCAwfSwKKwkJCQl7MCwgMCwgMCwgMCwgMH0sCisJCQkJezAsIDAsIDAsIDAsIDB9LAorCQkJCXswLCAwLCAwLCAwLCAwfSwKKwkJCQl7MCwgMCwgMCwgMCwgMH0sCisJCQkJezAsIDAsIDAsIDAsIDB9LAorCQkJCXswLCAwLCAwLCAwLCAwfSwKKwkJCX0sCisKKwl9LAorCS5jYWxUYXJnZXRfZnJlcWJpbl81RyA9IHsKKwkJRlJFUTJGQklOKDUxODAsIDApLAorCQlGUkVRMkZCSU4oNTI0MCwgMCksCisJCUZSRVEyRkJJTig1MzIwLCAwKSwKKwkJRlJFUTJGQklOKDU0MDAsIDApLAorCQlGUkVRMkZCSU4oNTUwMCwgMCksCisJCUZSRVEyRkJJTig1NjAwLCAwKSwKKwkJRlJFUTJGQklOKDU3MDAsIDApLAorCQlGUkVRMkZCSU4oNTgyNSwgMCkKKwl9LAorCS5jYWxUYXJnZXRfZnJlcWJpbl81R0hUMjAgPSB7CisJCUZSRVEyRkJJTig1MTgwLCAwKSwKKwkJRlJFUTJGQklOKDUyNDAsIDApLAorCQlGUkVRMkZCSU4oNTMyMCwgMCksCisJCUZSRVEyRkJJTig1NDAwLCAwKSwKKwkJRlJFUTJGQklOKDU1MDAsIDApLAorCQlGUkVRMkZCSU4oNTcwMCwgMCksCisJCUZSRVEyRkJJTig1NzQ1LCAwKSwKKwkJRlJFUTJGQklOKDU4MjUsIDApCisJfSwKKwkuY2FsVGFyZ2V0X2ZyZXFiaW5fNUdIVDQwID0geworCQlGUkVRMkZCSU4oNTE4MCwgMCksCisJCUZSRVEyRkJJTig1MjQwLCAwKSwKKwkJRlJFUTJGQklOKDUzMjAsIDApLAorCQlGUkVRMkZCSU4oNTQwMCwgMCksCisJCUZSRVEyRkJJTig1NTAwLCAwKSwKKwkJRlJFUTJGQklOKDU3MDAsIDApLAorCQlGUkVRMkZCSU4oNTc0NSwgMCksCisJCUZSRVEyRkJJTig1ODI1LCAwKQorCSB9LAorCS5jYWxUYXJnZXRQb3dlcjVHID0geworCQkvKiA2LTI0LDM2LDQ4LDU0ICovCisJCXsgezMwLCAzMCwgMjgsIDI0fSB9LAorCQl7IHszMCwgMzAsIDI4LCAyNH0gfSwKKwkJeyB7MzAsIDMwLCAyOCwgMjR9IH0sCisJCXsgezMwLCAzMCwgMjgsIDI0fSB9LAorCQl7IHszMCwgMzAsIDI4LCAyNH0gfSwKKwkJeyB7MzAsIDMwLCAyOCwgMjR9IH0sCisJCXsgezMwLCAzMCwgMjgsIDI0fSB9LAorCQl7IHszMCwgMzAsIDI4LCAyNH0gfSwKKwkgfSwKKwkuY2FsVGFyZ2V0UG93ZXI1R0hUMjAgPSB7CisJCS8qCisJCSAqIDBfOF8xNiwxLTNfOS0xMV8xNy0xOSwKKwkJICogNCw1LDYsNywxMiwxMywxNCwxNSwyMCwyMSwyMiwyMworCQkgKi8KKwkJeyB7MzAsIDMwLCAzMCwgMjgsIDI0LCAyMCwgMzAsIDI4LCAyNCwgMjAsIDAsIDAsIDAsIDB9IH0sCisJCXsgezMwLCAzMCwgMzAsIDI4LCAyNCwgMjAsIDMwLCAyOCwgMjQsIDIwLCAwLCAwLCAwLCAwfSB9LAorCQl7IHszMCwgMzAsIDMwLCAyNiwgMjIsIDE4LCAzMCwgMjYsIDIyLCAxOCwgMCwgMCwgMCwgMH0gfSwKKwkJeyB7MzAsIDMwLCAzMCwgMjYsIDIyLCAxOCwgMzAsIDI2LCAyMiwgMTgsIDAsIDAsIDAsIDB9IH0sCisJCXsgezMwLCAzMCwgMzAsIDI0LCAyMCwgMTYsIDMwLCAyNCwgMjAsIDE2LCAwLCAwLCAwLCAwfSB9LAorCQl7IHszMCwgMzAsIDMwLCAyNCwgMjAsIDE2LCAzMCwgMjQsIDIwLCAxNiwgMCwgMCwgMCwgMH0gfSwKKwkJeyB7MzAsIDMwLCAzMCwgMjIsIDE4LCAxNCwgMzAsIDIyLCAxOCwgMTQsIDAsIDAsIDAsIDB9IH0sCisJCXsgezMwLCAzMCwgMzAsIDIyLCAxOCwgMTQsIDMwLCAyMiwgMTgsIDE0LCAwLCAwLCAwLCAwfSB9LAorCSB9LAorCS5jYWxUYXJnZXRQb3dlcjVHSFQ0MCA9ICB7CisJCS8qCisJCSAqIDBfOF8xNiwxLTNfOS0xMV8xNy0xOSwKKwkJICogNCw1LDYsNywxMiwxMywxNCwxNSwyMCwyMSwyMiwyMworCQkgKi8KKwkJeyB7MjgsIDI4LCAyOCwgMjYsIDIyLCAxOCwgMjgsIDI2LCAyMiwgMTgsIDAsIDAsIDAsIDB9IH0sCisJCXsgezI4LCAyOCwgMjgsIDI2LCAyMiwgMTgsIDI4LCAyNiwgMjIsIDE4LCAwLCAwLCAwLCAwfSB9LAorCQl7IHsyOCwgMjgsIDI4LCAyNCwgMjAsIDE2LCAyOCwgMjQsIDIwLCAxNiwgMCwgMCwgMCwgMH0gfSwKKwkJeyB7MjgsIDI4LCAyOCwgMjQsIDIwLCAxNiwgMjgsIDI0LCAyMCwgMTYsIDAsIDAsIDAsIDB9IH0sCisJCXsgezI4LCAyOCwgMjgsIDIyLCAxOCwgMTQsIDI4LCAyMiwgMTgsIDE0LCAwLCAwLCAwLCAwfSB9LAorCQl7IHsyOCwgMjgsIDI4LCAyMiwgMTgsIDE0LCAyOCwgMjIsIDE4LCAxNCwgMCwgMCwgMCwgMH0gfSwKKwkJeyB7MjgsIDI4LCAyOCwgMjAsIDE2LCAxMiwgMjgsIDIwLCAxNiwgMTIsIDAsIDAsIDAsIDB9IH0sCisJCXsgezI4LCAyOCwgMjgsIDIwLCAxNiwgMTIsIDI4LCAyMCwgMTYsIDEyLCAwLCAwLCAwLCAwfSB9LAorCSB9LAorCS5jdGxJbmRleF81RyA9ICB7CisJCTB4MTAsIDB4MTYsIDB4MTgsIDB4NDAsIDB4NDYsCisJCTB4NDgsIDB4MzAsIDB4MzYsIDB4MzgKKwl9LAorCS5jdGxfZnJlcWJpbl81RyA9ICB7CisJCXsKKwkJCS8qIERhdGFbMF0uY3RsRWRnZXNbMF0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDUxODAsIDApLAorCQkJLyogRGF0YVswXS5jdGxFZGdlc1sxXS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oNTI2MCwgMCksCisJCQkvKiBEYXRhWzBdLmN0bEVkZ2VzWzJdLmJDaGFubmVsICovIEZSRVEyRkJJTig1MjgwLCAwKSwKKwkJCS8qIERhdGFbMF0uY3RsRWRnZXNbM10uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDU1MDAsIDApLAorCQkJLyogRGF0YVswXS5jdGxFZGdlc1s0XS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oNTYwMCwgMCksCisJCQkvKiBEYXRhWzBdLmN0bEVkZ2VzWzVdLmJDaGFubmVsICovIEZSRVEyRkJJTig1NzAwLCAwKSwKKwkJCS8qIERhdGFbMF0uY3RsRWRnZXNbNl0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDU3NDUsIDApLAorCQkJLyogRGF0YVswXS5jdGxFZGdlc1s3XS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oNTgyNSwgMCkKKwkJfSwKKwkJeworCQkJLyogRGF0YVsxXS5jdGxFZGdlc1swXS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oNTE4MCwgMCksCisJCQkvKiBEYXRhWzFdLmN0bEVkZ2VzWzFdLmJDaGFubmVsICovIEZSRVEyRkJJTig1MjYwLCAwKSwKKwkJCS8qIERhdGFbMV0uY3RsRWRnZXNbMl0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDUyODAsIDApLAorCQkJLyogRGF0YVsxXS5jdGxFZGdlc1szXS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oNTUwMCwgMCksCisJCQkvKiBEYXRhWzFdLmN0bEVkZ2VzWzRdLmJDaGFubmVsICovIEZSRVEyRkJJTig1NTIwLCAwKSwKKwkJCS8qIERhdGFbMV0uY3RsRWRnZXNbNV0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDU3MDAsIDApLAorCQkJLyogRGF0YVsxXS5jdGxFZGdlc1s2XS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oNTc0NSwgMCksCisJCQkvKiBEYXRhWzFdLmN0bEVkZ2VzWzddLmJDaGFubmVsICovIEZSRVEyRkJJTig1ODI1LCAwKQorCQl9LAorCisJCXsKKwkJCS8qIERhdGFbMl0uY3RsRWRnZXNbMF0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDUxOTAsIDApLAorCQkJLyogRGF0YVsyXS5jdGxFZGdlc1sxXS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oNTIzMCwgMCksCisJCQkvKiBEYXRhWzJdLmN0bEVkZ2VzWzJdLmJDaGFubmVsICovIEZSRVEyRkJJTig1MjcwLCAwKSwKKwkJCS8qIERhdGFbMl0uY3RsRWRnZXNbM10uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDUzMTAsIDApLAorCQkJLyogRGF0YVsyXS5jdGxFZGdlc1s0XS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oNTUxMCwgMCksCisJCQkvKiBEYXRhWzJdLmN0bEVkZ2VzWzVdLmJDaGFubmVsICovIEZSRVEyRkJJTig1NTUwLCAwKSwKKwkJCS8qIERhdGFbMl0uY3RsRWRnZXNbNl0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDU2NzAsIDApLAorCQkJLyogRGF0YVsyXS5jdGxFZGdlc1s3XS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oNTc1NSwgMCkKKwkJfSwKKworCQl7CisJCQkvKiBEYXRhWzNdLmN0bEVkZ2VzWzBdLmJDaGFubmVsICovIEZSRVEyRkJJTig1MTgwLCAwKSwKKwkJCS8qIERhdGFbM10uY3RsRWRnZXNbMV0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDUyMDAsIDApLAorCQkJLyogRGF0YVszXS5jdGxFZGdlc1syXS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oNTI2MCwgMCksCisJCQkvKiBEYXRhWzNdLmN0bEVkZ2VzWzNdLmJDaGFubmVsICovIEZSRVEyRkJJTig1MzIwLCAwKSwKKwkJCS8qIERhdGFbM10uY3RsRWRnZXNbNF0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDU1MDAsIDApLAorCQkJLyogRGF0YVszXS5jdGxFZGdlc1s1XS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oNTcwMCwgMCksCisJCQkvKiBEYXRhWzNdLmN0bEVkZ2VzWzZdLmJDaGFubmVsICovIDB4RkYsCisJCQkvKiBEYXRhWzNdLmN0bEVkZ2VzWzddLmJDaGFubmVsICovIDB4RkYsCisJCX0sCisKKwkJeworCQkJLyogRGF0YVs0XS5jdGxFZGdlc1swXS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oNTE4MCwgMCksCisJCQkvKiBEYXRhWzRdLmN0bEVkZ2VzWzFdLmJDaGFubmVsICovIEZSRVEyRkJJTig1MjYwLCAwKSwKKwkJCS8qIERhdGFbNF0uY3RsRWRnZXNbMl0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDU1MDAsIDApLAorCQkJLyogRGF0YVs0XS5jdGxFZGdlc1szXS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oNTcwMCwgMCksCisJCQkvKiBEYXRhWzRdLmN0bEVkZ2VzWzRdLmJDaGFubmVsICovIDB4RkYsCisJCQkvKiBEYXRhWzRdLmN0bEVkZ2VzWzVdLmJDaGFubmVsICovIDB4RkYsCisJCQkvKiBEYXRhWzRdLmN0bEVkZ2VzWzZdLmJDaGFubmVsICovIDB4RkYsCisJCQkvKiBEYXRhWzRdLmN0bEVkZ2VzWzddLmJDaGFubmVsICovIDB4RkYsCisJCX0sCisKKwkJeworCQkJLyogRGF0YVs1XS5jdGxFZGdlc1swXS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oNTE5MCwgMCksCisJCQkvKiBEYXRhWzVdLmN0bEVkZ2VzWzFdLmJDaGFubmVsICovIEZSRVEyRkJJTig1MjcwLCAwKSwKKwkJCS8qIERhdGFbNV0uY3RsRWRnZXNbMl0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDUzMTAsIDApLAorCQkJLyogRGF0YVs1XS5jdGxFZGdlc1szXS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oNTUxMCwgMCksCisJCQkvKiBEYXRhWzVdLmN0bEVkZ2VzWzRdLmJDaGFubmVsICovIEZSRVEyRkJJTig1NTkwLCAwKSwKKwkJCS8qIERhdGFbNV0uY3RsRWRnZXNbNV0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDU2NzAsIDApLAorCQkJLyogRGF0YVs1XS5jdGxFZGdlc1s2XS5iQ2hhbm5lbCAqLyAweEZGLAorCQkJLyogRGF0YVs1XS5jdGxFZGdlc1s3XS5iQ2hhbm5lbCAqLyAweEZGCisJCX0sCisKKwkJeworCQkJLyogRGF0YVs2XS5jdGxFZGdlc1swXS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oNTE4MCwgMCksCisJCQkvKiBEYXRhWzZdLmN0bEVkZ2VzWzFdLmJDaGFubmVsICovIEZSRVEyRkJJTig1MjAwLCAwKSwKKwkJCS8qIERhdGFbNl0uY3RsRWRnZXNbMl0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDUyMjAsIDApLAorCQkJLyogRGF0YVs2XS5jdGxFZGdlc1szXS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oNTI2MCwgMCksCisJCQkvKiBEYXRhWzZdLmN0bEVkZ2VzWzRdLmJDaGFubmVsICovIEZSRVEyRkJJTig1NTAwLCAwKSwKKwkJCS8qIERhdGFbNl0uY3RsRWRnZXNbNV0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDU2MDAsIDApLAorCQkJLyogRGF0YVs2XS5jdGxFZGdlc1s2XS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oNTcwMCwgMCksCisJCQkvKiBEYXRhWzZdLmN0bEVkZ2VzWzddLmJDaGFubmVsICovIEZSRVEyRkJJTig1NzQ1LCAwKQorCQl9LAorCisJCXsKKwkJCS8qIERhdGFbN10uY3RsRWRnZXNbMF0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDUxODAsIDApLAorCQkJLyogRGF0YVs3XS5jdGxFZGdlc1sxXS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oNTI2MCwgMCksCisJCQkvKiBEYXRhWzddLmN0bEVkZ2VzWzJdLmJDaGFubmVsICovIEZSRVEyRkJJTig1MzIwLCAwKSwKKwkJCS8qIERhdGFbN10uY3RsRWRnZXNbM10uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDU1MDAsIDApLAorCQkJLyogRGF0YVs3XS5jdGxFZGdlc1s0XS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oNTU2MCwgMCksCisJCQkvKiBEYXRhWzddLmN0bEVkZ2VzWzVdLmJDaGFubmVsICovIEZSRVEyRkJJTig1NzAwLCAwKSwKKwkJCS8qIERhdGFbN10uY3RsRWRnZXNbNl0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDU3NDUsIDApLAorCQkJLyogRGF0YVs3XS5jdGxFZGdlc1s3XS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oNTgyNSwgMCkKKwkJfSwKKworCQl7CisJCQkvKiBEYXRhWzhdLmN0bEVkZ2VzWzBdLmJDaGFubmVsICovIEZSRVEyRkJJTig1MTkwLCAwKSwKKwkJCS8qIERhdGFbOF0uY3RsRWRnZXNbMV0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDUyMzAsIDApLAorCQkJLyogRGF0YVs4XS5jdGxFZGdlc1syXS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oNTI3MCwgMCksCisJCQkvKiBEYXRhWzhdLmN0bEVkZ2VzWzNdLmJDaGFubmVsICovIEZSRVEyRkJJTig1NTEwLCAwKSwKKwkJCS8qIERhdGFbOF0uY3RsRWRnZXNbNF0uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDU1NTAsIDApLAorCQkJLyogRGF0YVs4XS5jdGxFZGdlc1s1XS5iQ2hhbm5lbCAqLyBGUkVRMkZCSU4oNTY3MCwgMCksCisJCQkvKiBEYXRhWzhdLmN0bEVkZ2VzWzZdLmJDaGFubmVsICovIEZSRVEyRkJJTig1NzU1LCAwKSwKKwkJCS8qIERhdGFbOF0uY3RsRWRnZXNbN10uYkNoYW5uZWwgKi8gRlJFUTJGQklOKDU3OTUsIDApCisJCX0KKwkgfSwKKwkuY3RsUG93ZXJEYXRhXzVHID0geworCQl7CisJCQl7CisJCQkJQ1RMKDYwLCAxKSwgQ1RMKDYwLCAxKSwgQ1RMKDYwLCAxKSwgQ1RMKDYwLCAxKSwKKwkJCQlDVEwoNjAsIDEpLCBDVEwoNjAsIDEpLCBDVEwoNjAsIDEpLCBDVEwoNjAsIDApLAorCQkJfQorCQl9LAorCQl7CisJCQl7CisJCQkJQ1RMKDYwLCAxKSwgQ1RMKDYwLCAxKSwgQ1RMKDYwLCAxKSwgQ1RMKDYwLCAxKSwKKwkJCQlDVEwoNjAsIDEpLCBDVEwoNjAsIDEpLCBDVEwoNjAsIDEpLCBDVEwoNjAsIDApLAorCQkJfQorCQl9LAorCQl7CisJCQl7CisJCQkJQ1RMKDYwLCAwKSwgQ1RMKDYwLCAxKSwgQ1RMKDYwLCAwKSwgQ1RMKDYwLCAxKSwKKwkJCQlDVEwoNjAsIDEpLCBDVEwoNjAsIDEpLCBDVEwoNjAsIDEpLCBDVEwoNjAsIDEpLAorCQkJfQorCQl9LAorCQl7CisJCQl7CisJCQkJQ1RMKDYwLCAwKSwgQ1RMKDYwLCAxKSwgQ1RMKDYwLCAxKSwgQ1RMKDYwLCAwKSwKKwkJCQlDVEwoNjAsIDEpLCBDVEwoNjAsIDApLCBDVEwoNjAsIDApLCBDVEwoNjAsIDApLAorCQkJfQorCQl9LAorCQl7CisJCQl7CisJCQkJQ1RMKDYwLCAxKSwgQ1RMKDYwLCAxKSwgQ1RMKDYwLCAxKSwgQ1RMKDYwLCAwKSwKKwkJCQlDVEwoNjAsIDApLCBDVEwoNjAsIDApLCBDVEwoNjAsIDApLCBDVEwoNjAsIDApLAorCQkJfQorCQl9LAorCQl7CisJCQl7CisJCQkJQ1RMKDYwLCAxKSwgQ1RMKDYwLCAxKSwgQ1RMKDYwLCAxKSwgQ1RMKDYwLCAxKSwKKwkJCQlDVEwoNjAsIDEpLCBDVEwoNjAsIDApLCBDVEwoNjAsIDApLCBDVEwoNjAsIDApLAorCQkJfQorCQl9LAorCQl7CisJCQl7CisJCQkJQ1RMKDYwLCAxKSwgQ1RMKDYwLCAxKSwgQ1RMKDYwLCAxKSwgQ1RMKDYwLCAxKSwKKwkJCQlDVEwoNjAsIDEpLCBDVEwoNjAsIDEpLCBDVEwoNjAsIDEpLCBDVEwoNjAsIDEpLAorCQkJfQorCQl9LAorCQl7CisJCQl7CisJCQkJQ1RMKDYwLCAxKSwgQ1RMKDYwLCAxKSwgQ1RMKDYwLCAwKSwgQ1RMKDYwLCAxKSwKKwkJCQlDVEwoNjAsIDEpLCBDVEwoNjAsIDEpLCBDVEwoNjAsIDEpLCBDVEwoNjAsIDApLAorCQkJfQorCQl9LAorCQl7CisJCQl7CisJCQkJQ1RMKDYwLCAxKSwgQ1RMKDYwLCAwKSwgQ1RMKDYwLCAxKSwgQ1RMKDYwLCAxKSwKKwkJCQlDVEwoNjAsIDEpLCBDVEwoNjAsIDEpLCBDVEwoNjAsIDApLCBDVEwoNjAsIDEpLAorCQkJfQorCQl9LAorCSB9Cit9OworCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXI5MzAwX2VlcHJvbSAqYXI5MzAwX2VlcF90ZW1wbGF0ZXNbXSA9IHsKKwkmYXI5MzAwX2RlZmF1bHQsCisJJmFyOTMwMF94MTEyLAorCSZhcjkzMDBfaDExNiwKKwkmYXI5MzAwX2gxMTIsCisJJmFyOTMwMF94MTEzLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhcjkzMDBfZWVwcm9tICphcjkwMDNfZWVwcm9tX3N0cnVjdF9maW5kX2J5X2lkKGludCBpZCkKK3sKKyNkZWZpbmUgTl9MT09QIChzaXplb2YoYXI5MzAwX2VlcF90ZW1wbGF0ZXMpIC8gc2l6ZW9mKGFyOTMwMF9lZXBfdGVtcGxhdGVzWzBdKSkKKwlpbnQgaXQ7CisKKwlmb3IgKGl0ID0gMDsgaXQgPCBOX0xPT1A7IGl0KyspCisJCWlmIChhcjkzMDBfZWVwX3RlbXBsYXRlc1tpdF0tPnRlbXBsYXRlVmVyc2lvbiA9PSBpZCkKKwkJCXJldHVybiBhcjkzMDBfZWVwX3RlbXBsYXRlc1tpdF07CisJcmV0dXJuIE5VTEw7CisjdW5kZWYgTl9MT09QCit9CisKKwogc3RhdGljIHUxNiBhdGg5a19od19mYmluMmZyZXEodTggZmJpbiwgYm9vbCBpczJHSHopCiB7Ci0JaWYgKGZiaW4gPT0gQVI5MzAwX0JDSEFOX1VOVVNFRCkKKwlpZiAoZmJpbiA9PSBBUjU0MTZfQkNIQU5fVU5VU0VEKQogCQlyZXR1cm4gZmJpbjsKIAogCXJldHVybiAodTE2KSAoKGlzMkdIeikgPyAoMjMwMCArIGZiaW4pIDogKDQ4MDAgKyA1ICogZmJpbikpOwpAQCAtNjM5LDYgKzI5ODgsMTYgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBpbnRlcnBvbGF0ZShpbnQgeCwgaW50IHhhLCBpbnQgeGIsIGludCB5YSwgaW50IHliKQoreworCWludCBiZiwgZmFjdG9yLCBwbHVzOworCisJYmYgPSAyICogKHliIC0geWEpICogKHggLSB4YSkgLyAoeGIgLSB4YSk7CisJZmFjdG9yID0gYmYgLyAyOworCXBsdXMgPSBiZiAlIDI7CisJcmV0dXJuIHlhICsgZmFjdG9yICsgcGx1czsKK30KKwogc3RhdGljIHUzMiBhdGg5a19od19hcjkzMDBfZ2V0X2VlcHJvbShzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCQkgICAgICBlbnVtIGVlcHJvbV9wYXJhbSBwYXJhbSkKIHsKQEAgLTY3Niw2ICszMDM1LDEwIEBACiAJCXJldHVybiBsZTMyX3RvX2NwdShwQmFzZS0+c3dyZWcpOwogCWNhc2UgRUVQX1BBUFJEOgogCQlyZXR1cm4gISEocEJhc2UtPmZlYXR1cmVFbmFibGUgJiBCSVQoNSkpOworCWNhc2UgRUVQX0NIQUlOX01BU0tfUkVEVUNFOgorCQlyZXR1cm4gKHBCYXNlLT5taXNjQ29uZmlndXJhdGlvbiA+PiAweDMpICYgMHgxOworCWNhc2UgRUVQX0FOVF9ESVZfQ1RMMToKKwkJcmV0dXJuIGxlMzJfdG9fY3B1KGVlcC0+YmFzZV9leHQxLmFudF9kaXZfY29udHJvbCk7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIDA7CiAJfQpAQCAtNzE0LDggKzMwNzcsOCBAQAogCWludCBpOwogCiAJaWYgKChhZGRyZXNzIDwgMCkgfHwgKChhZGRyZXNzICsgY291bnQpIC8gMiA+IEFSOTMwMF9FRVBST01fU0laRSAtIDEpKSB7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRUVQUk9NLAotCQkJICAiZWVwcm9tIGFkZHJlc3Mgbm90IGluIHJhbmdlXG4iKTsKKwkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfRUVQUk9NLAorCQkJImVlcHJvbSBhZGRyZXNzIG5vdCBpbiByYW5nZVxuIik7CiAJCXJldHVybiBmYWxzZTsKIAl9CiAKQEAgLTc0NiwxMSArMzEwOSw0MSBAQAogCXJldHVybiB0cnVlOwogCiBlcnJvcjoKLQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0VFUFJPTSwKLQkJICAidW5hYmxlIHRvIHJlYWQgZWVwcm9tIHJlZ2lvbiBhdCBvZmZzZXQgJWRcbiIsIGFkZHJlc3MpOworCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0VFUFJPTSwKKwkJInVuYWJsZSB0byByZWFkIGVlcHJvbSByZWdpb24gYXQgb2Zmc2V0ICVkXG4iLCBhZGRyZXNzKTsKIAlyZXR1cm4gZmFsc2U7CiB9CiAKK3N0YXRpYyBib29sIGFyOTMwMF9vdHBfcmVhZF93b3JkKHN0cnVjdCBhdGhfaHcgKmFoLCBpbnQgYWRkciwgdTMyICpkYXRhKQoreworCVJFR19SRUFEKGFoLCBBUjkzMDBfT1RQX0JBU0UgKyAoNCAqIGFkZHIpKTsKKworCWlmICghYXRoOWtfaHdfd2FpdChhaCwgQVI5MzAwX09UUF9TVEFUVVMsIEFSOTMwMF9PVFBfU1RBVFVTX1RZUEUsCisJCQkgICBBUjkzMDBfT1RQX1NUQVRVU19WQUxJRCwgMTAwMCkpCisJCXJldHVybiBmYWxzZTsKKworCSpkYXRhID0gUkVHX1JFQUQoYWgsIEFSOTMwMF9PVFBfUkVBRF9EQVRBKTsKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgYXI5MzAwX3JlYWRfb3RwKHN0cnVjdCBhdGhfaHcgKmFoLCBpbnQgYWRkcmVzcywgdTggKmJ1ZmZlciwKKwkJCSAgICBpbnQgY291bnQpCit7CisJdTMyIGRhdGE7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlpbnQgb2Zmc2V0ID0gOCAqICgoYWRkcmVzcyAtIGkpICUgNCk7CisJCWlmICghYXI5MzAwX290cF9yZWFkX3dvcmQoYWgsIChhZGRyZXNzIC0gaSkgLyA0LCAmZGF0YSkpCisJCQlyZXR1cm4gZmFsc2U7CisKKwkJYnVmZmVyW2ldID0gKGRhdGEgPj4gb2Zmc2V0KSAmIDB4ZmY7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKKwogc3RhdGljIHZvaWQgYXI5MzAwX2NvbXBfaGRyX3VucGFjayh1OCAqYmVzdCwgaW50ICpjb2RlLCBpbnQgKnJlZmVyZW5jZSwKIAkJCQkgICBpbnQgKmxlbmd0aCwgaW50ICptYWpvciwgaW50ICptaW5vcikKIHsKQEAgLTgwMSwxNyArMzE5NCwxNSBAQAogCQlsZW5ndGggJj0gMHhmZjsKIAogCQlpZiAobGVuZ3RoID4gMCAmJiBzcG90ID49IDAgJiYgc3BvdCtsZW5ndGggPD0gbWRhdGFTaXplKSB7Ci0JCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0VFUFJPTSwKLQkJCQkgICJSZXN0b3JlIGF0ICVkOiBzcG90PSVkICIKLQkJCQkgICJvZmZzZXQ9JWQgbGVuZ3RoPSVkXG4iLAotCQkJCSAgIGl0LCBzcG90LCBvZmZzZXQsIGxlbmd0aCk7CisJCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19FRVBST00sCisJCQkJIlJlc3RvcmUgYXQgJWQ6IHNwb3Q9JWQgb2Zmc2V0PSVkIGxlbmd0aD0lZFxuIiwKKwkJCQlpdCwgc3BvdCwgb2Zmc2V0LCBsZW5ndGgpOwogCQkJbWVtY3B5KCZtcHRyW3Nwb3RdLCAmYmxvY2tbaXQrMl0sIGxlbmd0aCk7CiAJCQlzcG90ICs9IGxlbmd0aDsKIAkJfSBlbHNlIGlmIChsZW5ndGggPiAwKSB7Ci0JCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0VFUFJPTSwKLQkJCQkgICJCYWQgcmVzdG9yZSBhdCAlZDogc3BvdD0lZCAiCi0JCQkJICAib2Zmc2V0PSVkIGxlbmd0aD0lZFxuIiwKLQkJCQkgIGl0LCBzcG90LCBvZmZzZXQsIGxlbmd0aCk7CisJCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19FRVBST00sCisJCQkJIkJhZCByZXN0b3JlIGF0ICVkOiBzcG90PSVkIG9mZnNldD0lZCBsZW5ndGg9JWRcbiIsCisJCQkJaXQsIHNwb3QsIG9mZnNldCwgbGVuZ3RoKTsKIAkJCXJldHVybiBmYWxzZTsKIAkJfQogCX0KQEAgLTgyNyw0NSArMzIxOCw4MCBAQAogewogCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOwogCXU4ICpkcHRyOworCWNvbnN0IHN0cnVjdCBhcjkzMDBfZWVwcm9tICplZXAgPSBOVUxMOwogCiAJc3dpdGNoIChjb2RlKSB7CiAJY2FzZSBfQ29tcHJlc3NOb25lOgogCQlpZiAobGVuZ3RoICE9IG1kYXRhX3NpemUpIHsKLQkJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRUVQUk9NLAotCQkJCSAgIkVFUFJPTSBzdHJ1Y3R1cmUgc2l6ZSBtaXNtYXRjaCIKLQkJCQkgICJtZW1vcnk9JWQgZWVwcm9tPSVkXG4iLCBtZGF0YV9zaXplLCBsZW5ndGgpOworCQkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfRUVQUk9NLAorCQkJCSJFRVBST00gc3RydWN0dXJlIHNpemUgbWlzbWF0Y2ggbWVtb3J5PSVkIGVlcHJvbT0lZFxuIiwKKwkJCQltZGF0YV9zaXplLCBsZW5ndGgpOwogCQkJcmV0dXJuIC0xOwogCQl9CiAJCW1lbWNweShtcHRyLCAodTggKikgKHdvcmQgKyBDT01QX0hEUl9MRU4pLCBsZW5ndGgpOwotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0VFUFJPTSwgInJlc3RvcmVkIGVlcHJvbSAlZDoiCi0JCQkgICIgdW5jb21wcmVzc2VkLCBsZW5ndGggJWRcbiIsIGl0LCBsZW5ndGgpOworCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19FRVBST00sCisJCQkicmVzdG9yZWQgZWVwcm9tICVkOiB1bmNvbXByZXNzZWQsIGxlbmd0aCAlZFxuIiwKKwkJCWl0LCBsZW5ndGgpOwogCQlicmVhazsKIAljYXNlIF9Db21wcmVzc0Jsb2NrOgogCQlpZiAocmVmZXJlbmNlID09IDApIHsKIAkJCWRwdHIgPSBtcHRyOwogCQl9IGVsc2UgewotCQkJaWYgKHJlZmVyZW5jZSAhPSAyKSB7Ci0JCQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19FRVBST00sCi0JCQkJCSAgImNhbnQgZmluZCByZWZlcmVuY2UgZWVwcm9tIgotCQkJCQkgICJzdHJ1Y3QgJWRcbiIsIHJlZmVyZW5jZSk7CisJCQllZXAgPSBhcjkwMDNfZWVwcm9tX3N0cnVjdF9maW5kX2J5X2lkKHJlZmVyZW5jZSk7CisJCQlpZiAoZWVwID09IE5VTEwpIHsKKwkJCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19FRVBST00sCisJCQkJCSJjYW50IGZpbmQgcmVmZXJlbmNlIGVlcHJvbSBzdHJ1Y3QgJWRcbiIsCisJCQkJCXJlZmVyZW5jZSk7CiAJCQkJcmV0dXJuIC0xOwogCQkJfQotCQkJbWVtY3B5KG1wdHIsICZhcjkzMDBfZGVmYXVsdCwgbWRhdGFfc2l6ZSk7CisJCQltZW1jcHkobXB0ciwgZWVwLCBtZGF0YV9zaXplKTsKIAkJfQotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0VFUFJPTSwKLQkJCSAgInJlc3RvcmUgZWVwcm9tICVkOiBibG9jaywgcmVmZXJlbmNlICVkLCIKLQkJCSAgIiBsZW5ndGggJWRcbiIsIGl0LCByZWZlcmVuY2UsIGxlbmd0aCk7CisJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0VFUFJPTSwKKwkJCSJyZXN0b3JlIGVlcHJvbSAlZDogYmxvY2ssIHJlZmVyZW5jZSAlZCwgbGVuZ3RoICVkXG4iLAorCQkJaXQsIHJlZmVyZW5jZSwgbGVuZ3RoKTsKIAkJYXI5MzAwX3VuY29tcHJlc3NfYmxvY2soYWgsIG1wdHIsIG1kYXRhX3NpemUsCiAJCQkJCSh1OCAqKSAod29yZCArIENPTVBfSERSX0xFTiksIGxlbmd0aCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRUVQUk9NLCAidW5rbm93biBjb21wcmVzc2lvbiIKLQkJCSAgIiBjb2RlICVkXG4iLCBjb2RlKTsKKwkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfRUVQUk9NLAorCQkJInVua25vd24gY29tcHJlc3Npb24gY29kZSAlZFxuIiwgY29kZSk7CiAJCXJldHVybiAtMTsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKK3R5cGVkZWYgYm9vbCAoKmVlcHJvbV9yZWFkX29wKShzdHJ1Y3QgYXRoX2h3ICphaCwgaW50IGFkZHJlc3MsIHU4ICpidWZmZXIsCisJCQkgICAgICAgaW50IGNvdW50KTsKKworc3RhdGljIGJvb2wgYXI5MzAwX2NoZWNrX2hlYWRlcih2b2lkICpkYXRhKQoreworCXUzMiAqd29yZCA9IGRhdGE7CisJcmV0dXJuICEoKndvcmQgPT0gMCB8fCAqd29yZCA9PSB+MCk7Cit9CisKK3N0YXRpYyBib29sIGFyOTMwMF9jaGVja19lZXByb21faGVhZGVyKHN0cnVjdCBhdGhfaHcgKmFoLCBlZXByb21fcmVhZF9vcCByZWFkLAorCQkJCSAgICAgICBpbnQgYmFzZV9hZGRyKQoreworCXU4IGhlYWRlcls0XTsKKworCWlmICghcmVhZChhaCwgYmFzZV9hZGRyLCBoZWFkZXIsIDQpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gYXI5MzAwX2NoZWNrX2hlYWRlcihoZWFkZXIpOworfQorCitzdGF0aWMgaW50IGFyOTMwMF9lZXByb21fcmVzdG9yZV9mbGFzaChzdHJ1Y3QgYXRoX2h3ICphaCwgdTggKm1wdHIsCisJCQkJICAgICAgIGludCBtZGF0YV9zaXplKQoreworCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOworCXUxNiAqZGF0YSA9ICh1MTYgKikgbXB0cjsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBtZGF0YV9zaXplIC8gMjsgaSsrLCBkYXRhKyspCisJCWF0aDlrX2h3X252cmFtX3JlYWQoY29tbW9uLCBpLCBkYXRhKTsKKworCXJldHVybiAwOworfQogLyoKICAqIFJlYWQgdGhlIGNvbmZpZ3VyYXRpb24gZGF0YSBmcm9tIHRoZSBlZXByb20uCiAgKiBUaGUgZGF0YSBjYW4gYmUgcHV0IGluIGFueSBzcGVjaWZpZWQgbWVtb3J5IGJ1ZmZlci4KQEAgLTg4Niw2ICszMzEyLDEwIEBACiAJaW50IGl0OwogCXUxNiBjaGVja3N1bSwgbWNoZWNrc3VtOwogCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOworCWVlcHJvbV9yZWFkX29wIHJlYWQ7CisKKwlpZiAoYXRoOWtfaHdfdXNlX2ZsYXNoKGFoKSkKKwkJcmV0dXJuIGFyOTMwMF9lZXByb21fcmVzdG9yZV9mbGFzaChhaCwgbXB0ciwgbWRhdGFfc2l6ZSk7CiAKIAl3b3JkID0ga3phbGxvYygyMDQ4LCBHRlBfS0VSTkVMKTsKIAlpZiAoIXdvcmQpCkBAIC04OTMsNDMgKzMzMjMsNzMgQEAKIAogCW1lbWNweShtcHRyLCAmYXI5MzAwX2RlZmF1bHQsIG1kYXRhX3NpemUpOwogCisJcmVhZCA9IGFyOTMwMF9yZWFkX2VlcHJvbTsKKwlpZiAoQVJfU1JFVl85NDg1KGFoKSkKKwkJY3B0ciA9IEFSOTMwMF9CQVNFX0FERFJfNEs7CisJZWxzZQorCQljcHRyID0gQVI5MzAwX0JBU0VfQUREUjsKKwlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19FRVBST00sCisJCSJUcnlpbmcgRUVQUk9NIGFjY2Vzc3MgYXQgQWRkcmVzcyAweCUwNHhcbiIsIGNwdHIpOworCWlmIChhcjkzMDBfY2hlY2tfZWVwcm9tX2hlYWRlcihhaCwgcmVhZCwgY3B0cikpCisJCWdvdG8gZm91bmQ7CisKKwljcHRyID0gQVI5MzAwX0JBU0VfQUREUl81MTI7CisJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfRUVQUk9NLAorCQkiVHJ5aW5nIEVFUFJPTSBhY2Nlc3NzIGF0IEFkZHJlc3MgMHglMDR4XG4iLCBjcHRyKTsKKwlpZiAoYXI5MzAwX2NoZWNrX2VlcHJvbV9oZWFkZXIoYWgsIHJlYWQsIGNwdHIpKQorCQlnb3RvIGZvdW5kOworCisJcmVhZCA9IGFyOTMwMF9yZWFkX290cDsKIAljcHRyID0gQVI5MzAwX0JBU0VfQUREUjsKKwlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19FRVBST00sCisJCSJUcnlpbmcgT1RQIGFjY2Vzc3MgYXQgQWRkcmVzcyAweCUwNHhcbiIsIGNwdHIpOworCWlmIChhcjkzMDBfY2hlY2tfZWVwcm9tX2hlYWRlcihhaCwgcmVhZCwgY3B0cikpCisJCWdvdG8gZm91bmQ7CisKKwljcHRyID0gQVI5MzAwX0JBU0VfQUREUl81MTI7CisJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfRUVQUk9NLAorCQkiVHJ5aW5nIE9UUCBhY2Nlc3NzIGF0IEFkZHJlc3MgMHglMDR4XG4iLCBjcHRyKTsKKwlpZiAoYXI5MzAwX2NoZWNrX2VlcHJvbV9oZWFkZXIoYWgsIHJlYWQsIGNwdHIpKQorCQlnb3RvIGZvdW5kOworCisJZ290byBmYWlsOworCitmb3VuZDoKKwlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19FRVBST00sICJGb3VuZCB2YWxpZCBFRVBST00gZGF0YVxuIik7CisKIAlmb3IgKGl0ID0gMDsgaXQgPCBNU1RBVEU7IGl0KyspIHsKLQkJaWYgKCFhcjkzMDBfcmVhZF9lZXByb20oYWgsIGNwdHIsIHdvcmQsIENPTVBfSERSX0xFTikpCisJCWlmICghcmVhZChhaCwgY3B0ciwgd29yZCwgQ09NUF9IRFJfTEVOKSkKIAkJCWdvdG8gZmFpbDsKIAotCQlpZiAoKHdvcmRbMF0gPT0gMCAmJiB3b3JkWzFdID09IDAgJiYgd29yZFsyXSA9PSAwICYmCi0JCSAgICAgd29yZFszXSA9PSAwKSB8fCAod29yZFswXSA9PSAweGZmICYmIHdvcmRbMV0gPT0gMHhmZgotCQkJCSAgICAgICAmJiB3b3JkWzJdID09IDB4ZmYgJiYgd29yZFszXSA9PSAweGZmKSkKKwkJaWYgKCFhcjkzMDBfY2hlY2tfaGVhZGVyKHdvcmQpKQogCQkJYnJlYWs7CiAKIAkJYXI5MzAwX2NvbXBfaGRyX3VucGFjayh3b3JkLCAmY29kZSwgJnJlZmVyZW5jZSwKIAkJCQkgICAgICAgJmxlbmd0aCwgJm1ham9yLCAmbWlub3IpOwotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0VFUFJPTSwKLQkJCSAgIkZvdW5kIGJsb2NrIGF0ICV4OiBjb2RlPSVkIHJlZj0lZCIKLQkJCSAgImxlbmd0aD0lZCBtYWpvcj0lZCBtaW5vcj0lZFxuIiwgY3B0ciwgY29kZSwKLQkJCSAgcmVmZXJlbmNlLCBsZW5ndGgsIG1ham9yLCBtaW5vcik7Ci0JCWlmIChsZW5ndGggPj0gMTAyNCkgewotCQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19FRVBST00sCi0JCQkJICAiU2tpcHBpbmcgYmFkIGhlYWRlclxuIik7CisJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0VFUFJPTSwKKwkJCSJGb3VuZCBibG9jayBhdCAleDogY29kZT0lZCByZWY9JWQgbGVuZ3RoPSVkIG1ham9yPSVkIG1pbm9yPSVkXG4iLAorCQkJY3B0ciwgY29kZSwgcmVmZXJlbmNlLCBsZW5ndGgsIG1ham9yLCBtaW5vcik7CisJCWlmICgoIUFSX1NSRVZfOTQ4NShhaCkgJiYgbGVuZ3RoID49IDEwMjQpIHx8CisJCSAgICAoQVJfU1JFVl85NDg1KGFoKSAmJiBsZW5ndGggPiBFRVBST01fREFUQV9MRU5fOTQ4NSkpIHsKKwkJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0VFUFJPTSwKKwkJCQkiU2tpcHBpbmcgYmFkIGhlYWRlclxuIik7CiAJCQljcHRyIC09IENPTVBfSERSX0xFTjsKIAkJCWNvbnRpbnVlOwogCQl9CiAKIAkJb3NpemUgPSBsZW5ndGg7Ci0JCWFyOTMwMF9yZWFkX2VlcHJvbShhaCwgY3B0ciwgd29yZCwKLQkJCQkgICBDT01QX0hEUl9MRU4gKyBvc2l6ZSArIENPTVBfQ0tTVU1fTEVOKTsKKwkJcmVhZChhaCwgY3B0ciwgd29yZCwgQ09NUF9IRFJfTEVOICsgb3NpemUgKyBDT01QX0NLU1VNX0xFTik7CiAJCWNoZWNrc3VtID0gYXI5MzAwX2NvbXBfY2tzdW0oJndvcmRbQ09NUF9IRFJfTEVOXSwgbGVuZ3RoKTsKIAkJbWNoZWNrc3VtID0gd29yZFtDT01QX0hEUl9MRU4gKyBvc2l6ZV0gfAogCQkgICAgKHdvcmRbQ09NUF9IRFJfTEVOICsgb3NpemUgKyAxXSA8PCA4KTsKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19FRVBST00sCi0JCQkgICJjaGVja3N1bSAleCAleFxuIiwgY2hlY2tzdW0sIG1jaGVja3N1bSk7CisJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0VFUFJPTSwKKwkJCSJjaGVja3N1bSAleCAleFxuIiwgY2hlY2tzdW0sIG1jaGVja3N1bSk7CiAJCWlmIChjaGVja3N1bSA9PSBtY2hlY2tzdW0pIHsKIAkJCWFyOTMwMF9jb21wcmVzc19kZWNpc2lvbihhaCwgaXQsIGNvZGUsIHJlZmVyZW5jZSwgbXB0ciwKIAkJCQkJCSB3b3JkLCBsZW5ndGgsIG1kYXRhX3NpemUpOwogCQl9IGVsc2UgewotCQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19FRVBST00sCi0JCQkJICAic2tpcHBpbmcgYmxvY2sgd2l0aCBiYWQgY2hlY2tzdW1cbiIpOworCQkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfRUVQUk9NLAorCQkJCSJza2lwcGluZyBibG9jayB3aXRoIGJhZCBjaGVja3N1bVxuIik7CiAJCX0KIAkJY3B0ciAtPSAoQ09NUF9IRFJfTEVOICsgb3NpemUgKyBDT01QX0NLU1VNX0xFTik7CiAJfQpAQCAtOTcwLDE4ICszNDMwLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHU4IGF0aDlrX2h3X2FyOTMwMF9nZXRfbnVtX2FudF9jb25maWcoc3RydWN0IGF0aF9odyAqYWgsCi0JCQkJCSAgICAgZW51bSBhdGg5a19oYWxfZnJlcV9iYW5kIGZyZXFfYmFuZCkKLXsKLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIHUzMiBhdGg5a19od19hcjkzMDBfZ2V0X2VlcHJvbV9hbnRlbm5hX2NmZyhzdHJ1Y3QgYXRoX2h3ICphaCwKLQkJCQkJCSAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCi17Ci0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KIHN0YXRpYyBzMzIgYXI5MDAzX2h3X3hwYV9iaWFzX2xldmVsX2dldChzdHJ1Y3QgYXRoX2h3ICphaCwgYm9vbCBpczJnaHopCiB7CiAJc3RydWN0IGFyOTMwMF9lZXByb20gKmVlcCA9ICZhaC0+ZWVwcm9tLmFyOTMwMF9lZXA7CkBAIC05OTUsOSArMzQ0MywxNSBAQAogc3RhdGljIHZvaWQgYXI5MDAzX2h3X3hwYV9iaWFzX2xldmVsX2FwcGx5KHN0cnVjdCBhdGhfaHcgKmFoLCBib29sIGlzMmdoeikKIHsKIAlpbnQgYmlhcyA9IGFyOTAwM19od194cGFfYmlhc19sZXZlbF9nZXQoYWgsIGlzMmdoeik7Ci0JUkVHX1JNV19GSUVMRChhaCwgQVJfQ0gwX1RPUCwgQVJfQ0gwX1RPUF9YUEFCSUFTTFZMLCAoYmlhcyAmIDB4MykpOwotCVJFR19STVdfRklFTEQoYWgsIEFSX0NIMF9USEVSTSwgQVJfQ0gwX1RIRVJNX1NQQVJFLAotCQkgICAgICAoKGJpYXMgPj4gMikgJiAweDMpKTsKKworCWlmIChBUl9TUkVWXzk0ODUoYWgpKQorCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9DSDBfVE9QMiwgQVJfQ0gwX1RPUDJfWFBBQklBU0xWTCwgYmlhcyk7CisJZWxzZSB7CisJCVJFR19STVdfRklFTEQoYWgsIEFSX0NIMF9UT1AsIEFSX0NIMF9UT1BfWFBBQklBU0xWTCwgYmlhcyk7CisJCVJFR19STVdfRklFTEQoYWgsIEFSX0NIMF9USEVSTSwgQVJfQ0gwX1RIRVJNX1hQQUJJQVNMVkxfTVNCLAorCQkJICAgICAgYmlhcyA+PiAyKTsKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfQ0gwX1RIRVJNLCBBUl9DSDBfVEhFUk1fWFBBU0hPUlQyR05ELCAxKTsKKwl9CiB9CiAKIHN0YXRpYyB1MzIgYXI5MDAzX2h3X2FudF9jdHJsX2NvbW1vbl9nZXQoc3RydWN0IGF0aF9odyAqYWgsIGJvb2wgaXMyZ2h6KQpAQCAtMTA1MiwxMSArMzUwNiwyNSBAQAogCXZhbHVlID0gYXI5MDAzX2h3X2FudF9jdHJsX2NoYWluX2dldChhaCwgMCwgaXMyZ2h6KTsKIAlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfU1dJVENIX0NIQUlOXzAsIEFSX1NXSVRDSF9UQUJMRV9BTEwsIHZhbHVlKTsKIAotCXZhbHVlID0gYXI5MDAzX2h3X2FudF9jdHJsX2NoYWluX2dldChhaCwgMSwgaXMyZ2h6KTsKLQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfU1dJVENIX0NIQUlOXzEsIEFSX1NXSVRDSF9UQUJMRV9BTEwsIHZhbHVlKTsKKwlpZiAoIUFSX1NSRVZfOTQ4NShhaCkpIHsKKwkJdmFsdWUgPSBhcjkwMDNfaHdfYW50X2N0cmxfY2hhaW5fZ2V0KGFoLCAxLCBpczJnaHopOworCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfU1dJVENIX0NIQUlOXzEsIEFSX1NXSVRDSF9UQUJMRV9BTEwsCisJCQkgICAgICB2YWx1ZSk7CiAKLQl2YWx1ZSA9IGFyOTAwM19od19hbnRfY3RybF9jaGFpbl9nZXQoYWgsIDIsIGlzMmdoeik7Ci0JUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1NXSVRDSF9DSEFJTl8yLCBBUl9TV0lUQ0hfVEFCTEVfQUxMLCB2YWx1ZSk7CisJCXZhbHVlID0gYXI5MDAzX2h3X2FudF9jdHJsX2NoYWluX2dldChhaCwgMiwgaXMyZ2h6KTsKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1NXSVRDSF9DSEFJTl8yLCBBUl9TV0lUQ0hfVEFCTEVfQUxMLAorCQkJICAgICAgdmFsdWUpOworCX0KKworCWlmIChBUl9TUkVWXzk0ODUoYWgpKSB7CisJCXZhbHVlID0gYXRoOWtfaHdfYXI5MzAwX2dldF9lZXByb20oYWgsIEVFUF9BTlRfRElWX0NUTDEpOworCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfTUNfR0FJTl9DVFJMLCBBUl9BTlRfRElWX0NUUkxfQUxMLAorCQkJICAgICAgdmFsdWUpOworCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfTUNfR0FJTl9DVFJMLCBBUl9BTlRfRElWX0VOQUJMRSwKKwkJCSAgICAgIHZhbHVlID4+IDYpOworCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfQ0NLX0RFVEVDVCwgQVJfRkFTVF9ESVZfRU5BQkxFLAorCQkJICAgICAgdmFsdWUgPj4gNyk7CisJfQogfQogCiBzdGF0aWMgdm9pZCBhcjkwMDNfaHdfZHJpdmVfc3RyZW5ndGhfYXBwbHkoc3RydWN0IGF0aF9odyAqYWgpCkBAIC0xMTAwLDI4ICszNTY4LDE3NyBAQAogCVJFR19XUklURShhaCwgQVJfUEhZXzY1Tk1fQ0gwX0JJQVM0LCByZWcpOwogfQogCitzdGF0aWMgdTE2IGFyOTAwM19od19hdHRlbl9jaGFpbl9nZXQoc3RydWN0IGF0aF9odyAqYWgsIGludCBjaGFpbiwKKwkJCQkgICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQoreworCWludCBmWzNdLCB0WzNdOworCXUxNiB2YWx1ZTsKKwlzdHJ1Y3QgYXI5MzAwX2VlcHJvbSAqZWVwID0gJmFoLT5lZXByb20uYXI5MzAwX2VlcDsKKworCWlmIChjaGFpbiA+PSAwICYmIGNoYWluIDwgMykgeworCQlpZiAoSVNfQ0hBTl8yR0haKGNoYW4pKQorCQkJcmV0dXJuIGVlcC0+bW9kYWxIZWFkZXIyRy54YXR0ZW4xREJbY2hhaW5dOworCQllbHNlIGlmIChlZXAtPmJhc2VfZXh0Mi54YXR0ZW4xREJMb3dbY2hhaW5dICE9IDApIHsKKwkJCXRbMF0gPSBlZXAtPmJhc2VfZXh0Mi54YXR0ZW4xREJMb3dbY2hhaW5dOworCQkJZlswXSA9IDUxODA7CisJCQl0WzFdID0gZWVwLT5tb2RhbEhlYWRlcjVHLnhhdHRlbjFEQltjaGFpbl07CisJCQlmWzFdID0gNTUwMDsKKwkJCXRbMl0gPSBlZXAtPmJhc2VfZXh0Mi54YXR0ZW4xREJIaWdoW2NoYWluXTsKKwkJCWZbMl0gPSA1Nzg1OworCQkJdmFsdWUgPSBhcjkwMDNfaHdfcG93ZXJfaW50ZXJwb2xhdGUoKHMzMikgY2hhbi0+Y2hhbm5lbCwKKwkJCQkJCQkgICAgZiwgdCwgMyk7CisJCQlyZXR1cm4gdmFsdWU7CisJCX0gZWxzZQorCQkJcmV0dXJuIGVlcC0+bW9kYWxIZWFkZXI1Ry54YXR0ZW4xREJbY2hhaW5dOworCX0KKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyB1MTYgYXI5MDAzX2h3X2F0dGVuX2NoYWluX2dldF9tYXJnaW4oc3RydWN0IGF0aF9odyAqYWgsIGludCBjaGFpbiwKKwkJCQkJICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQoreworCWludCBmWzNdLCB0WzNdOworCXUxNiB2YWx1ZTsKKwlzdHJ1Y3QgYXI5MzAwX2VlcHJvbSAqZWVwID0gJmFoLT5lZXByb20uYXI5MzAwX2VlcDsKKworCWlmIChjaGFpbiA+PSAwICYmIGNoYWluIDwgMykgeworCQlpZiAoSVNfQ0hBTl8yR0haKGNoYW4pKQorCQkJcmV0dXJuIGVlcC0+bW9kYWxIZWFkZXIyRy54YXR0ZW4xTWFyZ2luW2NoYWluXTsKKwkJZWxzZSBpZiAoZWVwLT5iYXNlX2V4dDIueGF0dGVuMU1hcmdpbkxvd1tjaGFpbl0gIT0gMCkgeworCQkJdFswXSA9IGVlcC0+YmFzZV9leHQyLnhhdHRlbjFNYXJnaW5Mb3dbY2hhaW5dOworCQkJZlswXSA9IDUxODA7CisJCQl0WzFdID0gZWVwLT5tb2RhbEhlYWRlcjVHLnhhdHRlbjFNYXJnaW5bY2hhaW5dOworCQkJZlsxXSA9IDU1MDA7CisJCQl0WzJdID0gZWVwLT5iYXNlX2V4dDIueGF0dGVuMU1hcmdpbkhpZ2hbY2hhaW5dOworCQkJZlsyXSA9IDU3ODU7CisJCQl2YWx1ZSA9IGFyOTAwM19od19wb3dlcl9pbnRlcnBvbGF0ZSgoczMyKSBjaGFuLT5jaGFubmVsLAorCQkJCQkJCSAgICBmLCB0LCAzKTsKKwkJCXJldHVybiB2YWx1ZTsKKwkJfSBlbHNlCisJCQlyZXR1cm4gZWVwLT5tb2RhbEhlYWRlcjVHLnhhdHRlbjFNYXJnaW5bY2hhaW5dOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBhcjkwMDNfaHdfYXR0ZW5fYXBwbHkoc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQoreworCWludCBpOworCXUxNiB2YWx1ZTsKKwl1bnNpZ25lZCBsb25nIGV4dF9hdHRlbl9yZWdbM10gPSB7QVJfUEhZX0VYVF9BVFRFTl9DVExfMCwKKwkJCQkJICBBUl9QSFlfRVhUX0FUVEVOX0NUTF8xLAorCQkJCQkgIEFSX1BIWV9FWFRfQVRURU5fQ1RMXzIsCisJCQkJCSB9OworCisJLyogVGVzdCB2YWx1ZS4gaWYgMCB0aGVuIGF0dGVudWF0aW9uIGlzIHVudXNlZC4gRG9uJ3QgbG9hZCBhbnl0aGluZy4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCXZhbHVlID0gYXI5MDAzX2h3X2F0dGVuX2NoYWluX2dldChhaCwgaSwgY2hhbik7CisJCVJFR19STVdfRklFTEQoYWgsIGV4dF9hdHRlbl9yZWdbaV0sCisJCQkgICAgICBBUl9QSFlfRVhUX0FUVEVOX0NUTF9YQVRURU4xX0RCLCB2YWx1ZSk7CisKKwkJdmFsdWUgPSBhcjkwMDNfaHdfYXR0ZW5fY2hhaW5fZ2V0X21hcmdpbihhaCwgaSwgY2hhbik7CisJCVJFR19STVdfRklFTEQoYWgsIGV4dF9hdHRlbl9yZWdbaV0sCisJCQkgICAgICBBUl9QSFlfRVhUX0FUVEVOX0NUTF9YQVRURU4xX01BUkdJTiwgdmFsdWUpOworCX0KK30KKworc3RhdGljIGJvb2wgaXNfcG11X3NldChzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHBtdV9yZWcsIGludCBwbXVfc2V0KQoreworCWludCB0aW1lb3V0ID0gMTAwOworCisJd2hpbGUgKHBtdV9zZXQgIT0gUkVHX1JFQUQoYWgsIHBtdV9yZWcpKSB7CisJCWlmICh0aW1lb3V0LS0gPT0gMCkKKwkJCXJldHVybiBmYWxzZTsKKwkJUkVHX1dSSVRFKGFoLCBwbXVfcmVnLCBwbXVfc2V0KTsKKwkJdWRlbGF5KDEwKTsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKwogc3RhdGljIHZvaWQgYXI5MDAzX2h3X2ludGVybmFsX3JlZ3VsYXRvcl9hcHBseShzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAlpbnQgaW50ZXJuYWxfcmVndWxhdG9yID0KIAkJYXRoOWtfaHdfYXI5MzAwX2dldF9lZXByb20oYWgsIEVFUF9JTlRFUk5BTF9SRUdVTEFUT1IpOwogCiAJaWYgKGludGVybmFsX3JlZ3VsYXRvcikgewotCQkvKiBJbnRlcm5hbCByZWd1bGF0b3IgaXMgT04uIFdyaXRlIHN3cmVnIHJlZ2lzdGVyLiAqLwotCQlpbnQgc3dyZWcgPSBhdGg5a19od19hcjkzMDBfZ2V0X2VlcHJvbShhaCwgRUVQX1NXUkVHKTsKLQkJUkVHX1dSSVRFKGFoLCBBUl9SVENfUkVHX0NPTlRST0wxLAotCQlSRUdfUkVBRChhaCwgQVJfUlRDX1JFR19DT05UUk9MMSkgJgotCQkJICh+QVJfUlRDX1JFR19DT05UUk9MMV9TV1JFR19QUk9HUkFNKSk7Ci0JCVJFR19XUklURShhaCwgQVJfUlRDX1JFR19DT05UUk9MMCwgc3dyZWcpOwotCQkvKiBTZXQgUkVHX0NPTlRST0wxLlNXUkVHX1BST0dSQU0gKi8KLQkJUkVHX1dSSVRFKGFoLCBBUl9SVENfUkVHX0NPTlRST0wxLAotCQkJICBSRUdfUkVBRChhaCwKLQkJCQkgICBBUl9SVENfUkVHX0NPTlRST0wxKSB8Ci0JCQkJICAgQVJfUlRDX1JFR19DT05UUk9MMV9TV1JFR19QUk9HUkFNKTsKKwkJaWYgKEFSX1NSRVZfOTQ4NShhaCkpIHsKKwkJCWludCByZWdfcG11X3NldDsKKworCQkJcmVnX3BtdV9zZXQgPSBSRUdfUkVBRChhaCwgQVJfUEhZX1BNVTIpICYgfkFSX1BIWV9QTVUyX1BHTTsKKwkJCVJFR19XUklURShhaCwgQVJfUEhZX1BNVTIsIHJlZ19wbXVfc2V0KTsKKwkJCWlmICghaXNfcG11X3NldChhaCwgQVJfUEhZX1BNVTIsIHJlZ19wbXVfc2V0KSkKKwkJCQlyZXR1cm47CisKKwkJCXJlZ19wbXVfc2V0ID0gKDUgPDwgMSkgfCAoNyA8PCA0KSB8ICgxIDw8IDgpIHwKKwkJCQkgICAgICAoNyA8PCAxNCkgfCAoNiA8PCAxNykgfCAoMSA8PCAyMCkgfAorCQkJCSAgICAgICgzIDw8IDI0KSB8ICgxIDw8IDI4KTsKKworCQkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE1VMSwgcmVnX3BtdV9zZXQpOworCQkJaWYgKCFpc19wbXVfc2V0KGFoLCBBUl9QSFlfUE1VMSwgcmVnX3BtdV9zZXQpKQorCQkJCXJldHVybjsKKworCQkJcmVnX3BtdV9zZXQgPSAoUkVHX1JFQUQoYWgsIEFSX1BIWV9QTVUyKSAmIH4weEZGQzAwMDAwKQorCQkJCQl8ICg0IDw8IDI2KTsKKwkJCVJFR19XUklURShhaCwgQVJfUEhZX1BNVTIsIHJlZ19wbXVfc2V0KTsKKwkJCWlmICghaXNfcG11X3NldChhaCwgQVJfUEhZX1BNVTIsIHJlZ19wbXVfc2V0KSkKKwkJCQlyZXR1cm47CisKKwkJCXJlZ19wbXVfc2V0ID0gKFJFR19SRUFEKGFoLCBBUl9QSFlfUE1VMikgJiB+MHgwMDIwMDAwMCkKKwkJCQkJfCAoMSA8PCAyMSk7CisJCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QTVUyLCByZWdfcG11X3NldCk7CisJCQlpZiAoIWlzX3BtdV9zZXQoYWgsIEFSX1BIWV9QTVUyLCByZWdfcG11X3NldCkpCisJCQkJcmV0dXJuOworCQl9IGVsc2UgeworCQkJLyogSW50ZXJuYWwgcmVndWxhdG9yIGlzIE9OLiBXcml0ZSBzd3JlZyByZWdpc3Rlci4gKi8KKwkJCWludCBzd3JlZyA9IGF0aDlrX2h3X2FyOTMwMF9nZXRfZWVwcm9tKGFoLCBFRVBfU1dSRUcpOworCQkJUkVHX1dSSVRFKGFoLCBBUl9SVENfUkVHX0NPTlRST0wxLAorCQkJCSAgUkVHX1JFQUQoYWgsIEFSX1JUQ19SRUdfQ09OVFJPTDEpICYKKwkJCQkgICh+QVJfUlRDX1JFR19DT05UUk9MMV9TV1JFR19QUk9HUkFNKSk7CisJCQlSRUdfV1JJVEUoYWgsIEFSX1JUQ19SRUdfQ09OVFJPTDAsIHN3cmVnKTsKKwkJCS8qIFNldCBSRUdfQ09OVFJPTDEuU1dSRUdfUFJPR1JBTSAqLworCQkJUkVHX1dSSVRFKGFoLCBBUl9SVENfUkVHX0NPTlRST0wxLAorCQkJCSAgUkVHX1JFQUQoYWgsCisJCQkJCSAgIEFSX1JUQ19SRUdfQ09OVFJPTDEpIHwKKwkJCQkJICAgQVJfUlRDX1JFR19DT05UUk9MMV9TV1JFR19QUk9HUkFNKTsKKwkJfQogCX0gZWxzZSB7Ci0JCVJFR19XUklURShhaCwgQVJfUlRDX1NMRUVQX0NMSywKLQkJCSAgKFJFR19SRUFEKGFoLAotCQkJCSAgICBBUl9SVENfU0xFRVBfQ0xLKSB8Ci0JCQkJICAgIEFSX1JUQ19GT1JDRV9TV1JFR19QUkQpKTsKKwkJaWYgKEFSX1NSRVZfOTQ4NShhaCkpIHsKKwkJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9QTVUyLCBBUl9QSFlfUE1VMl9QR00sIDApOworCQkJd2hpbGUgKFJFR19SRUFEX0ZJRUxEKGFoLCBBUl9QSFlfUE1VMiwKKwkJCQkJICAgICAgQVJfUEhZX1BNVTJfUEdNKSkKKwkJCQl1ZGVsYXkoMTApOworCisJCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfUE1VMSwgQVJfUEhZX1BNVTFfUFdELCAweDEpOworCQkJd2hpbGUgKCFSRUdfUkVBRF9GSUVMRChhaCwgQVJfUEhZX1BNVTEsCisJCQkJCSAgICAgICBBUl9QSFlfUE1VMV9QV0QpKQorCQkJCXVkZWxheSgxMCk7CisJCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfUE1VMiwgQVJfUEhZX1BNVTJfUEdNLCAweDEpOworCQkJd2hpbGUgKCFSRUdfUkVBRF9GSUVMRChhaCwgQVJfUEhZX1BNVTIsCisJCQkJCSAgICAgIEFSX1BIWV9QTVUyX1BHTSkpCisJCQkJdWRlbGF5KDEwKTsKKwkJfSBlbHNlCisJCQlSRUdfV1JJVEUoYWgsIEFSX1JUQ19TTEVFUF9DTEssCisJCQkJICAoUkVHX1JFQUQoYWgsCisJCQkJICAgQVJfUlRDX1NMRUVQX0NMSykgfAorCQkJCSAgIEFSX1JUQ19GT1JDRV9TV1JFR19QUkQpKTsKKwl9CisKK30KKworc3RhdGljIHZvaWQgYXI5MDAzX2h3X2FwcGx5X3R1bmluZ19jYXBzKHN0cnVjdCBhdGhfaHcgKmFoKQoreworCXN0cnVjdCBhcjkzMDBfZWVwcm9tICplZXAgPSAmYWgtPmVlcHJvbS5hcjkzMDBfZWVwOworCXU4IHR1bmluZ19jYXBzX3BhcmFtID0gZWVwLT5iYXNlRWVwSGVhZGVyLnBhcmFtc19mb3JfdHVuaW5nX2NhcHNbMF07CisKKwlpZiAoZWVwLT5iYXNlRWVwSGVhZGVyLmZlYXR1cmVFbmFibGUgJiAweDQwKSB7CisJCXR1bmluZ19jYXBzX3BhcmFtICY9IDB4N2Y7CisJCVJFR19STVdfRklFTEQoYWgsIEFSX0NIMF9YVEFMLCBBUl9DSDBfWFRBTF9DQVBJTkRBQywKKwkJCSAgICAgIHR1bmluZ19jYXBzX3BhcmFtKTsKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfQ0gwX1hUQUwsIEFSX0NIMF9YVEFMX0NBUE9VVERBQywKKwkJCSAgICAgIHR1bmluZ19jYXBzX3BhcmFtKTsKIAl9CiB9CiAKQEAgLTExMzEsNyArMzc0OCwxMCBAQAogCWFyOTAwM19od194cGFfYmlhc19sZXZlbF9hcHBseShhaCwgSVNfQ0hBTl8yR0haKGNoYW4pKTsKIAlhcjkwMDNfaHdfYW50X2N0cmxfYXBwbHkoYWgsIElTX0NIQU5fMkdIWihjaGFuKSk7CiAJYXI5MDAzX2h3X2RyaXZlX3N0cmVuZ3RoX2FwcGx5KGFoKTsKKwlhcjkwMDNfaHdfYXR0ZW5fYXBwbHkoYWgsIGNoYW4pOwogCWFyOTAwM19od19pbnRlcm5hbF9yZWd1bGF0b3JfYXBwbHkoYWgpOworCWlmIChBUl9TUkVWXzk0ODUoYWgpKQorCQlhcjkwMDNfaHdfYXBwbHlfdHVuaW5nX2NhcHMoYWgpOwogfQogCiBzdGF0aWMgdm9pZCBhdGg5a19od19hcjkzMDBfc2V0X2FkZGFjKHN0cnVjdCBhdGhfaHcgKmFoLApAQCAtMTE5Miw3ICszODEyLDcgQEAKIAkJCWlmIChoeCA9PSBseCkKIAkJCQl5ID0gbHk7CiAJCQllbHNlCS8qIGludGVycG9sYXRlICAqLwotCQkJCXkgPSBseSArICgoKHggLSBseCkgKiAoaHkgLSBseSkpIC8gKGh4IC0gbHgpKTsKKwkJCQl5ID0gaW50ZXJwb2xhdGUoeCwgbHgsIGh4LCBseSwgaHkpOwogCQl9IGVsc2UJCS8qIG9ubHkgbG93IGlzIGdvb2QsIHVzZSBpdCAqLwogCQkJeSA9IGx5OwogCX0gZWxzZSBpZiAoaGhhdmUpCS8qIG9ubHkgaGlnaCBpcyBnb29kLCB1c2UgaXQgKi8KQEAgLTE1NjEsMjIgKzQxODEsOSBAQAogCSAgICBhcjkwMDNfaHdfZWVwcm9tX2dldF9odDQwX3RndF9wd3IoYWgsIEhUX1RBUkdFVF9SQVRFXzIzLCBmcmVxLAogCQkJCQkgICAgICBpczJHSHopICsgaHQ0MFBvd2VySW5jRm9yUGRhZGM7CiAKLQl3aGlsZSAoaSA8IGFyOTMwMFJhdGVTaXplKSB7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRUVQUk9NLAotCQkJICAiVFBDWyUwMmRdIDB4JTA4eCAiLCBpLCB0YXJnZXRQb3dlclZhbFQyW2ldKTsKLQkJaSsrOwotCi0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRUVQUk9NLAotCQkJICAiVFBDWyUwMmRdIDB4JTA4eCAiLCBpLCB0YXJnZXRQb3dlclZhbFQyW2ldKTsKLQkJaSsrOwotCi0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRUVQUk9NLAotCQkJICAiVFBDWyUwMmRdIDB4JTA4eCAiLCBpLCB0YXJnZXRQb3dlclZhbFQyW2ldKTsKLQkJaSsrOwotCi0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRUVQUk9NLAotCQkJICAiVFBDWyUwMmRdIDB4JTA4eFxuIiwgaSwgdGFyZ2V0UG93ZXJWYWxUMltpXSk7Ci0JCWkrKzsKKwlmb3IgKGkgPSAwOyBpIDwgYXI5MzAwUmF0ZVNpemU7IGkrKykgeworCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19FRVBST00sCisJCQkiVFBDWyUwMmRdIDB4JTA4eFxuIiwgaSwgdGFyZ2V0UG93ZXJWYWxUMltpXSk7CiAJfQogfQogCkBAIC0xNTk1LDE4ICs0MjAyLDE3IEBACiAJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihhaCk7CiAKIAlpZiAoaWNoYWluID49IEFSOTMwMF9NQVhfQ0hBSU5TKSB7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRUVQUk9NLAotCQkJICAiSW52YWxpZCBjaGFpbiBpbmRleCwgbXVzdCBiZSBsZXNzIHRoYW4gJWRcbiIsCi0JCQkgIEFSOTMwMF9NQVhfQ0hBSU5TKTsKKwkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfRUVQUk9NLAorCQkJIkludmFsaWQgY2hhaW4gaW5kZXgsIG11c3QgYmUgbGVzcyB0aGFuICVkXG4iLAorCQkJQVI5MzAwX01BWF9DSEFJTlMpOwogCQlyZXR1cm4gLTE7CiAJfQogCiAJaWYgKG1vZGUpIHsJCS8qIDVHSHogKi8KIAkJaWYgKGlwaWVyID49IEFSOTMwMF9OVU1fNUdfQ0FMX1BJRVJTKSB7Ci0JCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0VFUFJPTSwKLQkJCQkgICJJbnZhbGlkIDVHSHogY2FsIHBpZXIgaW5kZXgsIG11c3QgIgotCQkJCSAgImJlIGxlc3MgdGhhbiAlZFxuIiwKLQkJCQkgIEFSOTMwMF9OVU1fNUdfQ0FMX1BJRVJTKTsKKwkJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0VFUFJPTSwKKwkJCQkiSW52YWxpZCA1R0h6IGNhbCBwaWVyIGluZGV4LCBtdXN0IGJlIGxlc3MgdGhhbiAlZFxuIiwKKwkJCQlBUjkzMDBfTlVNXzVHX0NBTF9QSUVSUyk7CiAJCQlyZXR1cm4gLTE7CiAJCX0KIAkJcENhbFBpZXIgPSAmKGVlcC0+Y2FsRnJlcVBpZXI1R1tpcGllcl0pOwpAQCAtMTYxNCw5ICs0MjIwLDkgQEAKIAkJaXMyR0h6ID0gMDsKIAl9IGVsc2UgewogCQlpZiAoaXBpZXIgPj0gQVI5MzAwX05VTV8yR19DQUxfUElFUlMpIHsKLQkJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRUVQUk9NLAotCQkJCSAgIkludmFsaWQgMkdIeiBjYWwgcGllciBpbmRleCwgbXVzdCAiCi0JCQkJICAiYmUgbGVzcyB0aGFuICVkXG4iLCBBUjkzMDBfTlVNXzJHX0NBTF9QSUVSUyk7CisJCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19FRVBST00sCisJCQkJIkludmFsaWQgMkdIeiBjYWwgcGllciBpbmRleCwgbXVzdCBiZSBsZXNzIHRoYW4gJWRcbiIsCisJCQkJQVI5MzAwX05VTV8yR19DQUxfUElFUlMpOwogCQkJcmV0dXJuIC0xOwogCQl9CiAKQEAgLTE2NDAsMjcgKzQyNDYsMzIgQEAKIHsKIAlpbnQgdGVtcFNsb3BlID0gMDsKIAlzdHJ1Y3QgYXI5MzAwX2VlcHJvbSAqZWVwID0gJmFoLT5lZXByb20uYXI5MzAwX2VlcDsKKwlpbnQgZlszXSwgdFszXTsKIAogCVJFR19STVcoYWgsIEFSX1BIWV9UUENfMTFfQjAsCiAJCShjb3JyZWN0aW9uWzBdIDw8IEFSX1BIWV9UUENfT0xQQ19HQUlOX0RFTFRBX1MpLAogCQlBUl9QSFlfVFBDX09MUENfR0FJTl9ERUxUQSk7Ci0JUkVHX1JNVyhhaCwgQVJfUEhZX1RQQ18xMV9CMSwKLQkJKGNvcnJlY3Rpb25bMV0gPDwgQVJfUEhZX1RQQ19PTFBDX0dBSU5fREVMVEFfUyksCi0JCUFSX1BIWV9UUENfT0xQQ19HQUlOX0RFTFRBKTsKLQlSRUdfUk1XKGFoLCBBUl9QSFlfVFBDXzExX0IyLAotCQkoY29ycmVjdGlvblsyXSA8PCBBUl9QSFlfVFBDX09MUENfR0FJTl9ERUxUQV9TKSwKLQkJQVJfUEhZX1RQQ19PTFBDX0dBSU5fREVMVEEpOworCWlmIChhaC0+Y2Fwcy50eF9jaGFpbm1hc2sgJiBCSVQoMSkpCisJCVJFR19STVcoYWgsIEFSX1BIWV9UUENfMTFfQjEsCisJCQkoY29ycmVjdGlvblsxXSA8PCBBUl9QSFlfVFBDX09MUENfR0FJTl9ERUxUQV9TKSwKKwkJCUFSX1BIWV9UUENfT0xQQ19HQUlOX0RFTFRBKTsKKwlpZiAoYWgtPmNhcHMudHhfY2hhaW5tYXNrICYgQklUKDIpKQorCQlSRUdfUk1XKGFoLCBBUl9QSFlfVFBDXzExX0IyLAorCQkJKGNvcnJlY3Rpb25bMl0gPDwgQVJfUEhZX1RQQ19PTFBDX0dBSU5fREVMVEFfUyksCisJCQlBUl9QSFlfVFBDX09MUENfR0FJTl9ERUxUQSk7CiAKIAkvKiBlbmFibGUgb3BlbiBsb29wIHBvd2VyIGNvbnRyb2wgb24gY2hpcCAqLwogCVJFR19STVcoYWgsIEFSX1BIWV9UUENfNl9CMCwKIAkJKDMgPDwgQVJfUEhZX1RQQ182X0VSUk9SX0VTVF9NT0RFX1MpLAogCQlBUl9QSFlfVFBDXzZfRVJST1JfRVNUX01PREUpOwotCVJFR19STVcoYWgsIEFSX1BIWV9UUENfNl9CMSwKLQkJKDMgPDwgQVJfUEhZX1RQQ182X0VSUk9SX0VTVF9NT0RFX1MpLAotCQlBUl9QSFlfVFBDXzZfRVJST1JfRVNUX01PREUpOwotCVJFR19STVcoYWgsIEFSX1BIWV9UUENfNl9CMiwKLQkJKDMgPDwgQVJfUEhZX1RQQ182X0VSUk9SX0VTVF9NT0RFX1MpLAotCQlBUl9QSFlfVFBDXzZfRVJST1JfRVNUX01PREUpOworCWlmIChhaC0+Y2Fwcy50eF9jaGFpbm1hc2sgJiBCSVQoMSkpCisJCVJFR19STVcoYWgsIEFSX1BIWV9UUENfNl9CMSwKKwkJCSgzIDw8IEFSX1BIWV9UUENfNl9FUlJPUl9FU1RfTU9ERV9TKSwKKwkJCUFSX1BIWV9UUENfNl9FUlJPUl9FU1RfTU9ERSk7CisJaWYgKGFoLT5jYXBzLnR4X2NoYWlubWFzayAmIEJJVCgyKSkKKwkJUkVHX1JNVyhhaCwgQVJfUEhZX1RQQ182X0IyLAorCQkJKDMgPDwgQVJfUEhZX1RQQ182X0VSUk9SX0VTVF9NT0RFX1MpLAorCQkJQVJfUEhZX1RQQ182X0VSUk9SX0VTVF9NT0RFKTsKIAogCS8qCiAJICogZW5hYmxlIHRlbXBlcmF0dXJlIGNvbXBlbnNhdGlvbgpAQCAtMTY2OCw3ICs0Mjc5LDE2IEBACiAJICovCiAJaWYgKGZyZXF1ZW5jeSA8IDQwMDApCiAJCXRlbXBTbG9wZSA9IGVlcC0+bW9kYWxIZWFkZXIyRy50ZW1wU2xvcGU7Ci0JZWxzZQorCWVsc2UgaWYgKGVlcC0+YmFzZV9leHQyLnRlbXBTbG9wZUxvdyAhPSAwKSB7CisJCXRbMF0gPSBlZXAtPmJhc2VfZXh0Mi50ZW1wU2xvcGVMb3c7CisJCWZbMF0gPSA1MTgwOworCQl0WzFdID0gZWVwLT5tb2RhbEhlYWRlcjVHLnRlbXBTbG9wZTsKKwkJZlsxXSA9IDU1MDA7CisJCXRbMl0gPSBlZXAtPmJhc2VfZXh0Mi50ZW1wU2xvcGVIaWdoOworCQlmWzJdID0gNTc4NTsKKwkJdGVtcFNsb3BlID0gYXI5MDAzX2h3X3Bvd2VyX2ludGVycG9sYXRlKChzMzIpIGZyZXF1ZW5jeSwKKwkJCQkJCQlmLCB0LCAzKTsKKwl9IGVsc2UKIAkJdGVtcFNsb3BlID0gZWVwLT5tb2RhbEhlYWRlcjVHLnRlbXBTbG9wZTsKIAogCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9UUENfMTksIEFSX1BIWV9UUENfMTlfQUxQSEFfVEhFUk0sIHRlbXBTbG9wZSk7CkBAIC0xNzU2LDExICs0Mzc2LDExIEBACiAKIAkvKiBpbnRlcnBvbGF0ZSAgKi8KIAlmb3IgKGljaGFpbiA9IDA7IGljaGFpbiA8IEFSOTMwMF9NQVhfQ0hBSU5TOyBpY2hhaW4rKykgewotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0VFUFJPTSwKLQkJCSAgImNoPSVkIGY9JWQgbG93PSVkICVkIGg9JWQgJWRcbiIsCi0JCQkgIGljaGFpbiwgZnJlcXVlbmN5LCBsZnJlcXVlbmN5W2ljaGFpbl0sCi0JCQkgIGxjb3JyZWN0aW9uW2ljaGFpbl0sIGhmcmVxdWVuY3lbaWNoYWluXSwKLQkJCSAgaGNvcnJlY3Rpb25baWNoYWluXSk7CisJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0VFUFJPTSwKKwkJCSJjaD0lZCBmPSVkIGxvdz0lZCAlZCBoPSVkICVkXG4iLAorCQkJaWNoYWluLCBmcmVxdWVuY3ksIGxmcmVxdWVuY3lbaWNoYWluXSwKKwkJCWxjb3JyZWN0aW9uW2ljaGFpbl0sIGhmcmVxdWVuY3lbaWNoYWluXSwKKwkJCWhjb3JyZWN0aW9uW2ljaGFpbl0pOwogCQkvKiB0aGV5J3JlIHRoZSBzYW1lLCBzbyBqdXN0IHBpY2sgb25lICovCiAJCWlmIChoZnJlcXVlbmN5W2ljaGFpbl0gPT0gbGZyZXF1ZW5jeVtpY2hhaW5dKSB7CiAJCQljb3JyZWN0aW9uW2ljaGFpbl0gPSBsY29ycmVjdGlvbltpY2hhaW5dOwpAQCAtMTc3MiwyNSArNDM5MiwyMyBAQAogCQkJLyogc28gaXMgdGhlIGhpZ2ggZnJlcXVlbmN5LCBpbnRlcnBvbGF0ZSAqLwogCQkJaWYgKGhmcmVxdWVuY3lbaWNoYWluXSAtIGZyZXF1ZW5jeSA8IDEwMDApIHsKIAotCQkJCWNvcnJlY3Rpb25baWNoYWluXSA9IGxjb3JyZWN0aW9uW2ljaGFpbl0gKwotCQkJCSAgICAoKChmcmVxdWVuY3kgLSBsZnJlcXVlbmN5W2ljaGFpbl0pICoKLQkJCQkgICAgICAoaGNvcnJlY3Rpb25baWNoYWluXSAtCi0JCQkJICAgICAgIGxjb3JyZWN0aW9uW2ljaGFpbl0pKSAvCi0JCQkJICAgICAoaGZyZXF1ZW5jeVtpY2hhaW5dIC0gbGZyZXF1ZW5jeVtpY2hhaW5dKSk7CisJCQkJY29ycmVjdGlvbltpY2hhaW5dID0gaW50ZXJwb2xhdGUoZnJlcXVlbmN5LAorCQkJCQkJbGZyZXF1ZW5jeVtpY2hhaW5dLAorCQkJCQkJaGZyZXF1ZW5jeVtpY2hhaW5dLAorCQkJCQkJbGNvcnJlY3Rpb25baWNoYWluXSwKKwkJCQkJCWhjb3JyZWN0aW9uW2ljaGFpbl0pOwogCi0JCQkJdGVtcGVyYXR1cmVbaWNoYWluXSA9IGx0ZW1wZXJhdHVyZVtpY2hhaW5dICsKLQkJCQkgICAgKCgoZnJlcXVlbmN5IC0gbGZyZXF1ZW5jeVtpY2hhaW5dKSAqCi0JCQkJICAgICAgKGh0ZW1wZXJhdHVyZVtpY2hhaW5dIC0KLQkJCQkgICAgICAgbHRlbXBlcmF0dXJlW2ljaGFpbl0pKSAvCi0JCQkJICAgICAoaGZyZXF1ZW5jeVtpY2hhaW5dIC0gbGZyZXF1ZW5jeVtpY2hhaW5dKSk7CisJCQkJdGVtcGVyYXR1cmVbaWNoYWluXSA9IGludGVycG9sYXRlKGZyZXF1ZW5jeSwKKwkJCQkJCWxmcmVxdWVuY3lbaWNoYWluXSwKKwkJCQkJCWhmcmVxdWVuY3lbaWNoYWluXSwKKwkJCQkJCWx0ZW1wZXJhdHVyZVtpY2hhaW5dLAorCQkJCQkJaHRlbXBlcmF0dXJlW2ljaGFpbl0pOwogCi0JCQkJdm9sdGFnZVtpY2hhaW5dID0KLQkJCQkgICAgbHZvbHRhZ2VbaWNoYWluXSArCi0JCQkJICAgICgoKGZyZXF1ZW5jeSAtCi0JCQkJICAgICAgIGxmcmVxdWVuY3lbaWNoYWluXSkgKiAoaHZvbHRhZ2VbaWNoYWluXSAtCi0JCQkJCQkJICAgICAgbHZvbHRhZ2VbaWNoYWluXSkpCi0JCQkJICAgICAvIChoZnJlcXVlbmN5W2ljaGFpbl0gLQotCQkJCQlsZnJlcXVlbmN5W2ljaGFpbl0pKTsKKwkJCQl2b2x0YWdlW2ljaGFpbl0gPSBpbnRlcnBvbGF0ZShmcmVxdWVuY3ksCisJCQkJCQlsZnJlcXVlbmN5W2ljaGFpbl0sCisJCQkJCQloZnJlcXVlbmN5W2ljaGFpbl0sCisJCQkJCQlsdm9sdGFnZVtpY2hhaW5dLAorCQkJCQkJaHZvbHRhZ2VbaWNoYWluXSk7CiAJCQl9CiAJCQkvKiBvbmx5IGxvdyBpcyBnb29kLCB1c2UgaXQgKi8KIAkJCWVsc2UgewpAQCAtMTgxNCw5ICs0NDMyLDkgQEAKIAlhcjkwMDNfaHdfcG93ZXJfY29udHJvbF9vdmVycmlkZShhaCwgZnJlcXVlbmN5LCBjb3JyZWN0aW9uLCB2b2x0YWdlLAogCQkJCQkgdGVtcGVyYXR1cmUpOwogCi0JYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19FRVBST00sCi0JCSAgImZvciBmcmVxdWVuY3k9JWQsIGNhbGlicmF0aW9uIGNvcnJlY3Rpb24gPSAlZCAlZCAlZFxuIiwKLQkJICBmcmVxdWVuY3ksIGNvcnJlY3Rpb25bMF0sIGNvcnJlY3Rpb25bMV0sIGNvcnJlY3Rpb25bMl0pOworCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0VFUFJPTSwKKwkJImZvciBmcmVxdWVuY3k9JWQsIGNhbGlicmF0aW9uIGNvcnJlY3Rpb24gPSAlZCAlZCAlZFxuIiwKKwkJZnJlcXVlbmN5LCBjb3JyZWN0aW9uWzBdLCBjb3JyZWN0aW9uWzFdLCBjb3JyZWN0aW9uWzJdKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTg1OCw3ICs0NDc2LDcgQEAKIAkJCXJldHVybiBDVExfRURHRV9UUE9XRVIoY3RsXzVnW2lkeF0uY3RsRWRnZXNbZWRnZSAtIDFdKTsKIAl9CiAKLQlyZXR1cm4gQVI5MzAwX01BWF9SQVRFX1BPV0VSOworCXJldHVybiBNQVhfUkFURV9QT1dFUjsKIH0KIAogLyoKQEAgLTE4NjcsNyArNDQ4NSw3IEBACiBzdGF0aWMgdTE2IGFyOTAwM19od19nZXRfbWF4X2VkZ2VfcG93ZXIoc3RydWN0IGFyOTMwMF9lZXByb20gKmVlcCwKIAkJCQkJdTE2IGZyZXEsIGludCBpZHgsIGJvb2wgaXMyR0h6KQogewotCXUxNiB0d2ljZU1heEVkZ2VQb3dlciA9IEFSOTMwMF9NQVhfUkFURV9QT1dFUjsKKwl1MTYgdHdpY2VNYXhFZGdlUG93ZXIgPSBNQVhfUkFURV9QT1dFUjsKIAl1OCAqY3RsX2ZyZXFiaW4gPSBpczJHSHogPwogCQkmZWVwLT5jdGxfZnJlcWJpbl8yR1tpZHhdWzBdIDoKIAkJJmVlcC0+Y3RsX2ZyZXFiaW5fNUdbaWR4XVswXTsKQEAgLTE4NzcsNyArNDQ5NSw3IEBACiAKIAkvKiBHZXQgdGhlIGVkZ2UgcG93ZXIgKi8KIAlmb3IgKGVkZ2UgPSAwOwotCSAgICAgKGVkZ2UgPCBudW1fZWRnZXMpICYmIChjdGxfZnJlcWJpbltlZGdlXSAhPSBBUjkzMDBfQkNIQU5fVU5VU0VEKTsKKwkgICAgIChlZGdlIDwgbnVtX2VkZ2VzKSAmJiAoY3RsX2ZyZXFiaW5bZWRnZV0gIT0gQVI1NDE2X0JDSEFOX1VOVVNFRCk7CiAJICAgICBlZGdlKyspIHsKIAkJLyoKIAkJICogSWYgdGhlcmUncyBhbiBleGFjdCBjaGFubmVsIG1hdGNoIG9yIGFuIGluYmFuZCBmbGFnIHNldApAQCAtMTkxNSwyMSArNDUzMywyMyBAQAogCXN0cnVjdCBhdGhfcmVndWxhdG9yeSAqcmVndWxhdG9yeSA9IGF0aDlrX2h3X3JlZ3VsYXRvcnkoYWgpOwogCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOwogCXN0cnVjdCBhcjkzMDBfZWVwcm9tICpwRWVwRGF0YSA9ICZhaC0+ZWVwcm9tLmFyOTMwMF9lZXA7Ci0JdTE2IHR3aWNlTWF4RWRnZVBvd2VyID0gQVI5MzAwX01BWF9SQVRFX1BPV0VSOworCXUxNiB0d2ljZU1heEVkZ2VQb3dlciA9IE1BWF9SQVRFX1BPV0VSOwogCXN0YXRpYyBjb25zdCB1MTYgdHBTY2FsZVJlZHVjdGlvblRhYmxlWzVdID0gewotCQkwLCAzLCA2LCA5LCBBUjkzMDBfTUFYX1JBVEVfUE9XRVIKKwkJMCwgMywgNiwgOSwgTUFYX1JBVEVfUE9XRVIKIAl9OwogCWludCBpOwogCWludDE2X3QgIHR3aWNlTGFyZ2VzdEFudGVubmE7CiAJdTE2IHNjYWxlZFBvd2VyID0gMCwgbWluQ3RsUG93ZXIsIG1heFJlZ0FsbG93ZWRQb3dlcjsKLQl1MTYgY3RsTW9kZXNGb3IxMWFbXSA9IHsKKwlzdGF0aWMgY29uc3QgdTE2IGN0bE1vZGVzRm9yMTFhW10gPSB7CiAJCUNUTF8xMUEsIENUTF81R0hUMjAsIENUTF8xMUFfRVhULCBDVExfNUdIVDQwCiAJfTsKLQl1MTYgY3RsTW9kZXNGb3IxMWdbXSA9IHsKKwlzdGF0aWMgY29uc3QgdTE2IGN0bE1vZGVzRm9yMTFnW10gPSB7CiAJCUNUTF8xMUIsIENUTF8xMUcsIENUTF8yR0hUMjAsIENUTF8xMUJfRVhULAogCQlDVExfMTFHX0VYVCwgQ1RMXzJHSFQ0MAogCX07Ci0JdTE2IG51bUN0bE1vZGVzLCAqcEN0bE1vZGUsIGN0bE1vZGUsIGZyZXE7CisJdTE2IG51bUN0bE1vZGVzOworCWNvbnN0IHUxNiAqcEN0bE1vZGU7CisJdTE2IGN0bE1vZGUsIGZyZXE7CiAJc3RydWN0IGNoYW5fY2VudGVycyBjZW50ZXJzOwogCXU4ICpjdGxJbmRleDsKIAl1OCBjdGxOdW07CkBAIC0yMDE5LDExICs0NjM5LDEwIEBACiAJCWVsc2UKIAkJCWZyZXEgPSBjZW50ZXJzLmN0bF9jZW50ZXI7CiAKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19SRUdVTEFUT1JZLAotCQkJICAiTE9PUC1Nb2RlIGN0bE1vZGUgJWQgPCAlZCwgaXNIdDQwQ3RsTW9kZSAlZCwgIgotCQkJICAiRVhUX0FERElUSVZFICVkXG4iLAotCQkJICBjdGxNb2RlLCBudW1DdGxNb2RlcywgaXNIdDQwQ3RsTW9kZSwKLQkJCSAgKHBDdGxNb2RlW2N0bE1vZGVdICYgRVhUX0FERElUSVZFKSk7CisJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX1JFR1VMQVRPUlksCisJCQkiTE9PUC1Nb2RlIGN0bE1vZGUgJWQgPCAlZCwgaXNIdDQwQ3RsTW9kZSAlZCwgRVhUX0FERElUSVZFICVkXG4iLAorCQkJY3RsTW9kZSwgbnVtQ3RsTW9kZXMsIGlzSHQ0MEN0bE1vZGUsCisJCQkocEN0bE1vZGVbY3RsTW9kZV0gJiBFWFRfQURESVRJVkUpKTsKIAogCQkvKiB3YWxrIHRocm91Z2ggZWFjaCBDVEwgaW5kZXggc3RvcmVkIGluIEVFUFJPTSAqLwogCQlpZiAoaXMyZ2h6KSB7CkBAIC0yMDM1LDEyICs0NjU0LDEwIEBACiAJCX0KIAogCQlmb3IgKGkgPSAwOyAoaSA8IGN0bE51bSkgJiYgY3RsSW5kZXhbaV07IGkrKykgewotCQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19SRUdVTEFUT1JZLAotCQkJCSAgIkxPT1AtQ3RsaWR4ICVkOiBjZmdDdGwgMHglMi4yeCAiCi0JCQkJICAicEN0bE1vZGUgMHglMi4yeCBjdGxJbmRleCAweCUyLjJ4ICIKLQkJCQkgICJjaGFuICVkbiIsCi0JCQkJICBpLCBjZmdDdGwsIHBDdGxNb2RlW2N0bE1vZGVdLCBjdGxJbmRleFtpXSwKLQkJCQkgIGNoYW4tPmNoYW5uZWwpOworCQkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfUkVHVUxBVE9SWSwKKwkJCQkiTE9PUC1DdGxpZHggJWQ6IGNmZ0N0bCAweCUyLjJ4IHBDdGxNb2RlIDB4JTIuMnggY3RsSW5kZXggMHglMi4yeCBjaGFuICVkXG4iLAorCQkJCWksIGNmZ0N0bCwgcEN0bE1vZGVbY3RsTW9kZV0sIGN0bEluZGV4W2ldLAorCQkJCWNoYW4tPmNoYW5uZWwpOwogCiAJCQkJLyoKIAkJCQkgKiBjb21wYXJlIHRlc3QgZ3JvdXAgZnJvbSByZWd1bGF0b3J5CkBAIC0yMDc5LDExICs0Njk2LDEwIEBACiAKIAkJCW1pbkN0bFBvd2VyID0gKHU4KW1pbih0d2ljZU1heEVkZ2VQb3dlciwgc2NhbGVkUG93ZXIpOwogCi0JCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX1JFR1VMQVRPUlksCi0JCQkJICAiU0VMLU1pbiBjdGxNb2RlICVkIHBDdGxNb2RlICVkIDJ4TWF4RWRnZSAlZCAiCi0JCQkJICAic1AgJWQgbWluQ3RsUHdyICVkXG4iLAotCQkJCSAgY3RsTW9kZSwgcEN0bE1vZGVbY3RsTW9kZV0sIHR3aWNlTWF4RWRnZVBvd2VyLAotCQkJCSAgc2NhbGVkUG93ZXIsIG1pbkN0bFBvd2VyKTsKKwkJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX1JFR1VMQVRPUlksCisJCQkJIlNFTC1NaW4gY3RsTW9kZSAlZCBwQ3RsTW9kZSAlZCAyeE1heEVkZ2UgJWQgc1AgJWQgbWluQ3RsUHdyICVkXG4iLAorCQkJCWN0bE1vZGUsIHBDdGxNb2RlW2N0bE1vZGVdLCB0d2ljZU1heEVkZ2VQb3dlciwKKwkJCQlzY2FsZWRQb3dlciwgbWluQ3RsUG93ZXIpOwogCiAJCQkvKiBBcHBseSBjdGwgbW9kZSB0byBjb3JyZWN0IHRhcmdldCBwb3dlciBzZXQgKi8KIAkJCXN3aXRjaCAocEN0bE1vZGVbY3RsTW9kZV0pIHsKQEAgLTIxMzAsNDAgKzQ3NDYsMTAxIEBACiAJfSAvKiBlbmQgY3RsIG1vZGUgY2hlY2tpbmcgKi8KIH0KIAorc3RhdGljIGlubGluZSB1OCBtY3NpZHhfdG9fdGd0cHdyaWR4KHVuc2lnbmVkIGludCBtY3NfaWR4LCB1OCBiYXNlX3B3cmlkeCkKK3sKKwl1OCBtb2RfaWR4ID0gbWNzX2lkeCAlIDg7CisKKwlpZiAobW9kX2lkeCA8PSAzKQorCQlyZXR1cm4gbW9kX2lkeCA/IChiYXNlX3B3cmlkeCArIDEpIDogYmFzZV9wd3JpZHg7CisJZWxzZQorCQlyZXR1cm4gYmFzZV9wd3JpZHggKyA0ICogKG1jc19pZHggLyA4KSArIG1vZF9pZHggLSAyOworfQorCiBzdGF0aWMgdm9pZCBhdGg5a19od19hcjkzMDBfc2V0X3R4cG93ZXIoc3RydWN0IGF0aF9odyAqYWgsCiAJCQkJCXN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLCB1MTYgY2ZnQ3RsLAogCQkJCQl1OCB0d2ljZUFudGVubmFSZWR1Y3Rpb24sCiAJCQkJCXU4IHR3aWNlTWF4UmVndWxhdG9yeVBvd2VyLAotCQkJCQl1OCBwb3dlckxpbWl0KQorCQkJCQl1OCBwb3dlckxpbWl0LCBib29sIHRlc3QpCiB7CisJc3RydWN0IGF0aF9yZWd1bGF0b3J5ICpyZWd1bGF0b3J5ID0gYXRoOWtfaHdfcmVndWxhdG9yeShhaCk7CiAJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihhaCk7CisJc3RydWN0IGFyOTMwMF9lZXByb20gKmVlcCA9ICZhaC0+ZWVwcm9tLmFyOTMwMF9lZXA7CisJc3RydWN0IGFyOTMwMF9tb2RhbF9lZXBfaGVhZGVyICptb2RhbF9oZHI7CiAJdTggdGFyZ2V0UG93ZXJWYWxUMlthcjkzMDBSYXRlU2l6ZV07Ci0JdW5zaWduZWQgaW50IGkgPSAwOworCXU4IHRhcmdldF9wb3dlcl92YWxfdDJfZWVwW2FyOTMwMFJhdGVTaXplXTsKKwl1bnNpZ25lZCBpbnQgaSA9IDAsIHBhcHJkX3NjYWxlX2ZhY3RvciA9IDA7CisJdTggcHdyX2lkeCwgbWluX3B3cmlkeCA9IDA7CiAKIAlhcjkwMDNfaHdfc2V0X3RhcmdldF9wb3dlcl9lZXByb20oYWgsIGNoYW4tPmNoYW5uZWwsIHRhcmdldFBvd2VyVmFsVDIpOworCisJaWYgKGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tKGFoLCBFRVBfUEFQUkQpKSB7CisJCWlmIChJU19DSEFOXzJHSFooY2hhbikpCisJCQltb2RhbF9oZHIgPSAmZWVwLT5tb2RhbEhlYWRlcjJHOworCQllbHNlCisJCQltb2RhbF9oZHIgPSAmZWVwLT5tb2RhbEhlYWRlcjVHOworCisJCWFoLT5wYXByZF9yYXRlbWFzayA9CisJCQlsZTMyX3RvX2NwdShtb2RhbF9oZHItPnBhcGRSYXRlTWFza0h0MjApICYKKwkJCUFSOTMwMF9QQVBSRF9SQVRFX01BU0s7CisKKwkJYWgtPnBhcHJkX3JhdGVtYXNrX2h0NDAgPQorCQkJbGUzMl90b19jcHUobW9kYWxfaGRyLT5wYXBkUmF0ZU1hc2tIdDQwKSAmCisJCQlBUjkzMDBfUEFQUkRfUkFURV9NQVNLOworCisJCXBhcHJkX3NjYWxlX2ZhY3RvciA9IGFyOTAwM19nZXRfcGFwcmRfc2NhbGVfZmFjdG9yKGFoLCBjaGFuKTsKKwkJbWluX3B3cmlkeCA9IElTX0NIQU5fSFQ0MChjaGFuKSA/IEFMTF9UQVJHRVRfSFQ0MF8wXzhfMTYgOgorCQkJCQkJICBBTExfVEFSR0VUX0hUMjBfMF84XzE2OworCisJCWlmICghYWgtPnBhcHJkX3RhYmxlX3dyaXRlX2RvbmUpIHsKKwkJCW1lbWNweSh0YXJnZXRfcG93ZXJfdmFsX3QyX2VlcCwgdGFyZ2V0UG93ZXJWYWxUMiwKKwkJCSAgICAgICBzaXplb2YodGFyZ2V0UG93ZXJWYWxUMikpOworCQkJZm9yIChpID0gMDsgaSA8IDI0OyBpKyspIHsKKwkJCQlwd3JfaWR4ID0gbWNzaWR4X3RvX3RndHB3cmlkeChpLCBtaW5fcHdyaWR4KTsKKwkJCQlpZiAoYWgtPnBhcHJkX3JhdGVtYXNrICYgKDEgPDwgaSkpIHsKKwkJCQkJaWYgKHRhcmdldFBvd2VyVmFsVDJbcHdyX2lkeF0gJiYKKwkJCQkJICAgIHRhcmdldFBvd2VyVmFsVDJbcHdyX2lkeF0gPT0KKwkJCQkJICAgIHRhcmdldF9wb3dlcl92YWxfdDJfZWVwW3B3cl9pZHhdKQorCQkJCQkJdGFyZ2V0UG93ZXJWYWxUMltwd3JfaWR4XSAtPQorCQkJCQkJCXBhcHJkX3NjYWxlX2ZhY3RvcjsKKwkJCQl9CisJCQl9CisJCX0KKwkJbWVtY3B5KHRhcmdldF9wb3dlcl92YWxfdDJfZWVwLCB0YXJnZXRQb3dlclZhbFQyLAorCQkgICAgICAgc2l6ZW9mKHRhcmdldFBvd2VyVmFsVDIpKTsKKwl9CisKIAlhcjkwMDNfaHdfc2V0X3Bvd2VyX3Blcl9yYXRlX3RhYmxlKGFoLCBjaGFuLAogCQkJCQkgICB0YXJnZXRQb3dlclZhbFQyLCBjZmdDdGwsCiAJCQkJCSAgIHR3aWNlQW50ZW5uYVJlZHVjdGlvbiwKIAkJCQkJICAgdHdpY2VNYXhSZWd1bGF0b3J5UG93ZXIsCiAJCQkJCSAgIHBvd2VyTGltaXQpOwogCi0Jd2hpbGUgKGkgPCBhcjkzMDBSYXRlU2l6ZSkgewotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0VFUFJPTSwKLQkJCSAgIlRQQ1slMDJkXSAweCUwOHggIiwgaSwgdGFyZ2V0UG93ZXJWYWxUMltpXSk7Ci0JCWkrKzsKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19FRVBST00sCi0JCQkgICJUUENbJTAyZF0gMHglMDh4ICIsIGksIHRhcmdldFBvd2VyVmFsVDJbaV0pOwotCQlpKys7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRUVQUk9NLAotCQkJICAiVFBDWyUwMmRdIDB4JTA4eCAiLCBpLCB0YXJnZXRQb3dlclZhbFQyW2ldKTsKLQkJaSsrOwotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0VFUFJPTSwKLQkJCSAgIlRQQ1slMDJkXSAweCUwOHhcblxuIiwgaSwgdGFyZ2V0UG93ZXJWYWxUMltpXSk7Ci0JCWkrKzsKKwlpZiAoYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEVFUF9QQVBSRCkpIHsKKwkJZm9yIChpID0gMDsgaSA8IGFyOTMwMFJhdGVTaXplOyBpKyspIHsKKwkJCWlmICgoYWgtPnBhcHJkX3JhdGVtYXNrICYgKDEgPDwgaSkpICYmCisJCQkgICAgKGFicyh0YXJnZXRQb3dlclZhbFQyW2ldIC0KKwkJCQl0YXJnZXRfcG93ZXJfdmFsX3QyX2VlcFtpXSkgPgorCQkJICAgIHBhcHJkX3NjYWxlX2ZhY3RvcikpIHsKKwkJCQlhaC0+cGFwcmRfcmF0ZW1hc2sgJj0gfigxIDw8IGkpOworCQkJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0VFUFJPTSwKKwkJCQkJInBhcHJkIGRpc2FibGVkIGZvciBtY3MgJWRcbiIsIGkpOworCQkJfQorCQl9CiAJfQogCi0JLyogV3JpdGUgdGFyZ2V0IHBvd2VyIGFycmF5IHRvIHJlZ2lzdGVycyAqLwotCWFyOTAwM19od190eF9wb3dlcl9yZWd3cml0ZShhaCwgdGFyZ2V0UG93ZXJWYWxUMik7CisJcmVndWxhdG9yeS0+bWF4X3Bvd2VyX2xldmVsID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgYXI5MzAwUmF0ZVNpemU7IGkrKykgeworCQlpZiAodGFyZ2V0UG93ZXJWYWxUMltpXSA+IHJlZ3VsYXRvcnktPm1heF9wb3dlcl9sZXZlbCkKKwkJCXJlZ3VsYXRvcnktPm1heF9wb3dlcl9sZXZlbCA9IHRhcmdldFBvd2VyVmFsVDJbaV07CisJfQorCisJaWYgKHRlc3QpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBhcjkzMDBSYXRlU2l6ZTsgaSsrKSB7CisJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0VFUFJPTSwKKwkJCSJUUENbJTAyZF0gMHglMDh4XG4iLCBpLCB0YXJnZXRQb3dlclZhbFQyW2ldKTsKKwl9CiAKIAkvKgogCSAqIFRoaXMgaXMgdGhlIFRYIHBvd2VyIHdlIHNlbmQgYmFjayB0byBkcml2ZXIgY29yZSwKQEAgLTIxODMsOCArNDg2MCwyNCBAQAogCQlpID0gQUxMX1RBUkdFVF9IVDIwXzBfOF8xNjsgLyogaHQyMCAqLwogCiAJYWgtPnR4cG93ZXJfbGltaXQgPSB0YXJnZXRQb3dlclZhbFQyW2ldOworCXJlZ3VsYXRvcnktPm1heF9wb3dlcl9sZXZlbCA9IHRhcmdldFBvd2VyVmFsVDJbaV07CiAKKwkvKiBXcml0ZSB0YXJnZXQgcG93ZXIgYXJyYXkgdG8gcmVnaXN0ZXJzICovCisJYXI5MDAzX2h3X3R4X3Bvd2VyX3JlZ3dyaXRlKGFoLCB0YXJnZXRQb3dlclZhbFQyKTsKIAlhcjkwMDNfaHdfY2FsaWJyYXRpb25fYXBwbHkoYWgsIGNoYW4tPmNoYW5uZWwpOworCisJaWYgKElTX0NIQU5fMkdIWihjaGFuKSkgeworCQlpZiAoSVNfQ0hBTl9IVDQwKGNoYW4pKQorCQkJaSA9IEFMTF9UQVJHRVRfSFQ0MF8wXzhfMTY7CisJCWVsc2UKKwkJCWkgPSBBTExfVEFSR0VUX0hUMjBfMF84XzE2OworCX0gZWxzZSB7CisJCWlmIChJU19DSEFOX0hUNDAoY2hhbikpCisJCQlpID0gQUxMX1RBUkdFVF9IVDQwXzc7CisJCWVsc2UKKwkJCWkgPSBBTExfVEFSR0VUX0hUMjBfNzsKKwl9CisJYWgtPnBhcHJkX3RhcmdldF9wb3dlciA9IHRhcmdldFBvd2VyVmFsVDJbaV07CiB9CiAKIHN0YXRpYyB1MTYgYXRoOWtfaHdfYXI5MzAwX2dldF9zcHVyX2NoYW5uZWwoc3RydWN0IGF0aF9odyAqYWgsCkBAIC0yMjA3LDE0ICs0OTAwLDQzIEBACiAJcmV0dXJuIChlZXAtPmJhc2VFZXBIZWFkZXIudHhyeGdhaW4pICYgMHhmOyAvKiBiaXRzIDM6MCAqLwogfQogCit1OCAqYXI5MDAzX2dldF9zcHVyX2NoYW5fcHRyKHN0cnVjdCBhdGhfaHcgKmFoLCBib29sIGlzXzJnaHopCit7CisJc3RydWN0IGFyOTMwMF9lZXByb20gKmVlcCA9ICZhaC0+ZWVwcm9tLmFyOTMwMF9lZXA7CisKKwlpZiAoaXNfMmdoeikKKwkJcmV0dXJuIGVlcC0+bW9kYWxIZWFkZXIyRy5zcHVyQ2hhbnM7CisJZWxzZQorCQlyZXR1cm4gZWVwLT5tb2RhbEhlYWRlcjVHLnNwdXJDaGFuczsKK30KKwordW5zaWduZWQgaW50IGFyOTAwM19nZXRfcGFwcmRfc2NhbGVfZmFjdG9yKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJCQkgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKK3sKKwlzdHJ1Y3QgYXI5MzAwX2VlcHJvbSAqZWVwID0gJmFoLT5lZXByb20uYXI5MzAwX2VlcDsKKworCWlmIChJU19DSEFOXzJHSFooY2hhbikpCisJCXJldHVybiBNUyhsZTMyX3RvX2NwdShlZXAtPm1vZGFsSGVhZGVyMkcucGFwZFJhdGVNYXNrSHQyMCksCisJCQkgIEFSOTMwMF9QQVBSRF9TQ0FMRV8xKTsKKwllbHNlIHsKKwkJaWYgKGNoYW4tPmNoYW5uZWwgPj0gNTcwMCkKKwkJcmV0dXJuIE1TKGxlMzJfdG9fY3B1KGVlcC0+bW9kYWxIZWFkZXI1Ry5wYXBkUmF0ZU1hc2tIdDIwKSwKKwkJCSAgQVI5MzAwX1BBUFJEX1NDQUxFXzEpOworCQllbHNlIGlmIChjaGFuLT5jaGFubmVsID49IDU0MDApCisJCQlyZXR1cm4gTVMobGUzMl90b19jcHUoZWVwLT5tb2RhbEhlYWRlcjVHLnBhcGRSYXRlTWFza0h0NDApLAorCQkJCSAgIEFSOTMwMF9QQVBSRF9TQ0FMRV8yKTsKKwkJZWxzZQorCQkJcmV0dXJuIE1TKGxlMzJfdG9fY3B1KGVlcC0+bW9kYWxIZWFkZXI1Ry5wYXBkUmF0ZU1hc2tIdDQwKSwKKwkJCQkgIEFSOTMwMF9QQVBSRF9TQ0FMRV8xKTsKKwl9Cit9CisKIGNvbnN0IHN0cnVjdCBlZXByb21fb3BzIGVlcF9hcjkzMDBfb3BzID0gewogCS5jaGVja19lZXByb20gPSBhdGg5a19od19hcjkzMDBfY2hlY2tfZWVwcm9tLAogCS5nZXRfZWVwcm9tID0gYXRoOWtfaHdfYXI5MzAwX2dldF9lZXByb20sCiAJLmZpbGxfZWVwcm9tID0gYXRoOWtfaHdfYXI5MzAwX2ZpbGxfZWVwcm9tLAogCS5nZXRfZWVwcm9tX3ZlciA9IGF0aDlrX2h3X2FyOTMwMF9nZXRfZWVwcm9tX3ZlciwKIAkuZ2V0X2VlcHJvbV9yZXYgPSBhdGg5a19od19hcjkzMDBfZ2V0X2VlcHJvbV9yZXYsCi0JLmdldF9udW1fYW50X2NvbmZpZyA9IGF0aDlrX2h3X2FyOTMwMF9nZXRfbnVtX2FudF9jb25maWcsCi0JLmdldF9lZXByb21fYW50ZW5uYV9jZmcgPSBhdGg5a19od19hcjkzMDBfZ2V0X2VlcHJvbV9hbnRlbm5hX2NmZywKIAkuc2V0X2JvYXJkX3ZhbHVlcyA9IGF0aDlrX2h3X2FyOTMwMF9zZXRfYm9hcmRfdmFsdWVzLAogCS5zZXRfYWRkYWMgPSBhdGg5a19od19hcjkzMDBfc2V0X2FkZGFjLAogCS5zZXRfdHhwb3dlciA9IGF0aDlrX2h3X2FyOTMwMF9zZXRfdHhwb3dlciwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfZWVwcm9tLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX2VlcHJvbS5oCmluZGV4IDY1NWIzMDMuLmFmYjBiNWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfZWVwcm9tLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19lZXByb20uaApAQCAtMjAsNDcgKzIwLDIyIEBACiAvKiAjZGVmaW5lIEFSOTMwMF9OVU1fQ1RMUyAgICAgICAgICAgICAgMjEgKi8KICNkZWZpbmUgQVI5MzAwX05VTV9DVExTXzVHICAgICAgICAgICA5CiAjZGVmaW5lIEFSOTMwMF9OVU1fQ1RMU18yRyAgICAgICAgICAgMTIKLSNkZWZpbmUgQVI5MzAwX0NUTF9NT0RFX00gICAgICAgICAgICAweEYKICNkZWZpbmUgQVI5MzAwX05VTV9CQU5EX0VER0VTXzVHICAgICA4CiAjZGVmaW5lIEFSOTMwMF9OVU1fQkFORF9FREdFU18yRyAgICAgNAotI2RlZmluZSBBUjkzMDBfTlVNX1BEX0dBSU5TICAgICAgICAgIDQKLSNkZWZpbmUgQVI5MzAwX1BEX0dBSU5TX0lOX01BU0sgICAgICA0Ci0jZGVmaW5lIEFSOTMwMF9QRF9HQUlOX0lDRVBUUyAgICAgICAgNQotI2RlZmluZSBBUjkzMDBfRUVQUk9NX01PREFMX1NQVVJTICAgIDUKLSNkZWZpbmUgQVI5MzAwX01BWF9SQVRFX1BPV0VSICAgICAgICA2MwotI2RlZmluZSBBUjkzMDBfTlVNX1BEQURDX1ZBTFVFUyAgICAgIDEyOAotI2RlZmluZSBBUjkzMDBfTlVNX1JBVEVTICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIEFSOTMwMF9CQ0hBTl9VTlVTRUQgICAgICAgICAgMHhGRgotI2RlZmluZSBBUjkzMDBfTUFYX1BXUl9SQU5HRV9JTl9IQUxGX0RCIDY0Ci0jZGVmaW5lIEFSOTMwMF9PUEZMQUdTXzExQSAgICAgICAgICAgMHgwMQotI2RlZmluZSBBUjkzMDBfT1BGTEFHU18xMUcgICAgICAgICAgIDB4MDIKLSNkZWZpbmUgQVI5MzAwX09QRkxBR1NfNUdfSFQ0MCAgICAgICAweDA0Ci0jZGVmaW5lIEFSOTMwMF9PUEZMQUdTXzJHX0hUNDAgICAgICAgMHgwOAotI2RlZmluZSBBUjkzMDBfT1BGTEFHU181R19IVDIwICAgICAgIDB4MTAKLSNkZWZpbmUgQVI5MzAwX09QRkxBR1NfMkdfSFQyMCAgICAgICAweDIwCiAjZGVmaW5lIEFSOTMwMF9FRVBNSVNDX0JJR19FTkRJQU4gICAgMHgwMQogI2RlZmluZSBBUjkzMDBfRUVQTUlTQ19XT1cgICAgICAgICAgIDB4MDIKICNkZWZpbmUgQVI5MzAwX0NVU1RPTUVSX0RBVEFfU0laRSAgICAyMAogCi0jZGVmaW5lIEZSRVEyRkJJTih4LCB5KSAoKHkpID8gKCh4KSAtIDIzMDApIDogKCgoeCkgLSA0ODAwKSAvIDUpKQogI2RlZmluZSBGQklOMkZSRVEoeCwgeSkgKCh5KSA/ICgyMzAwICsgeCkgOiAoNDgwMCArIDUgKiB4KSkKICNkZWZpbmUgQVI5MzAwX01BWF9DSEFJTlMgICAgICAgICAgICAzCiAjZGVmaW5lIEFSOTMwMF9BTlRfMTZTICAgICAgICAgICAgICAgMjUKICNkZWZpbmUgQVI5MzAwX0ZVVFVSRV9NT0RBTF9TWiAgICAgICA2CiAKLSNkZWZpbmUgQVI5MzAwX05VTV9BTlRfQ0hBSU5fRklFTERTICAgICA3Ci0jZGVmaW5lIEFSOTMwMF9OVU1fQU5UX0NPTU1PTl9GSUVMRFMgICAgNAotI2RlZmluZSBBUjkzMDBfU0laRV9BTlRfQ0hBSU5fRklFTEQgICAgIDMKLSNkZWZpbmUgQVI5MzAwX1NJWkVfQU5UX0NPTU1PTl9GSUVMRCAgICA0Ci0jZGVmaW5lIEFSOTMwMF9BTlRfQ0hBSU5fTUFTSyAgICAgICAgICAgMHg3Ci0jZGVmaW5lIEFSOTMwMF9BTlRfQ09NTU9OX01BU0sgICAgICAgICAgMHhmCi0jZGVmaW5lIEFSOTMwMF9DSEFJTl8wX0lEWCAgICAgICAgICAgICAgMAotI2RlZmluZSBBUjkzMDBfQ0hBSU5fMV9JRFggICAgICAgICAgICAgIDEKLSNkZWZpbmUgQVI5MzAwX0NIQUlOXzJfSURYICAgICAgICAgICAgICAyCi0KLSNkZWZpbmUgQVI5MjhYX05VTV9BTlRfQ0hBSU5fRklFTERTICAgICA2Ci0jZGVmaW5lIEFSOTI4WF9TSVpFX0FOVF9DSEFJTl9GSUVMRCAgICAgMgotI2RlZmluZSBBUjkyOFhfQU5UX0NIQUlOX01BU0sgICAgICAgICAgIDB4MworI2RlZmluZSBBUjkzMDBfUEFQUkRfUkFURV9NQVNLCQkweDAxZmZmZmZmCisjZGVmaW5lIEFSOTMwMF9QQVBSRF9TQ0FMRV8xCQkweDBlMDAwMDAwCisjZGVmaW5lIEFSOTMwMF9QQVBSRF9TQ0FMRV8xX1MJCTI1CisjZGVmaW5lIEFSOTMwMF9QQVBSRF9TQ0FMRV8yCQkweDcwMDAwMDAwCisjZGVmaW5lIEFSOTMwMF9QQVBSRF9TQ0FMRV8yX1MJCTI4CiAKIC8qIERlbHRhIGZyb20gd2hpY2ggdG8gc3RhcnQgcG93ZXIgdG8gcGRhZGMgdGFibGUgKi8KIC8qIFRoaXMgb2Zmc2V0IGlzIHVzZWQgaW4gYm90aCBvcGVuIGxvb3AgYW5kIGNsb3NlZCBsb29wIHBvd2VyIGNvbnRyb2wKQEAgLTcxLDE0ICs0NiwyMCBAQAogICovCiAjZGVmaW5lIEFSOTMwMF9QV1JfVEFCTEVfT0ZGU0VUICAwCiAKLS8qIGVuYWJsZSBmbGFncyBmb3Igdm9sdGFnZSBhbmQgdGVtcCBjb21wZW5zYXRpb24gKi8KLSNkZWZpbmUgRU5BQkxFX1RFTVBfQ09NUEVOU0FUSU9OIDB4MDEKLSNkZWZpbmUgRU5BQkxFX1ZPTFRfQ09NUEVOU0FUSU9OIDB4MDIKIC8qIGJ5dGUgYWRkcmVzc2FibGUgKi8KICNkZWZpbmUgQVI5MzAwX0VFUFJPTV9TSVpFICgxNioxMDI0KQotI2RlZmluZSBGSVhFRF9DQ0FfVEhSRVNIT0xEIDE1CiAKKyNkZWZpbmUgQVI5MzAwX0JBU0VfQUREUl80SyAweGZmZgogI2RlZmluZSBBUjkzMDBfQkFTRV9BRERSIDB4M2ZmCisjZGVmaW5lIEFSOTMwMF9CQVNFX0FERFJfNTEyIDB4MWZmCisKKyNkZWZpbmUgQVI5MzAwX09UUF9CQVNFCQkJMHgxNDAwMAorI2RlZmluZSBBUjkzMDBfT1RQX1NUQVRVUwkJMHgxNWYxOAorI2RlZmluZSBBUjkzMDBfT1RQX1NUQVRVU19UWVBFCQkweDcKKyNkZWZpbmUgQVI5MzAwX09UUF9TVEFUVVNfVkFMSUQJCTB4NAorI2RlZmluZSBBUjkzMDBfT1RQX1NUQVRVU19BQ0NFU1NfQlVTWQkweDIKKyNkZWZpbmUgQVI5MzAwX09UUF9TVEFUVVNfU01fQlVTWQkweDEKKyNkZWZpbmUgQVI5MzAwX09UUF9SRUFEX0RBVEEJCTB4MTVmMWMKIAogZW51bSB0YXJnZXRQb3dlckhUUmF0ZXMgewogCUhUX1RBUkdFVF9SQVRFXzBfOF8xNiwKQEAgLTIxNiw3ICsxOTcsNyBAQAogCWludDhfdCB0ZW1wU2xvcGU7CiAJaW50OF90IHZvbHRTbG9wZTsKIAkvKiBzcHVyIGNoYW5uZWxzIGluIHVzdWFsIGZiaW4gY29kaW5nIGZvcm1hdCAqLwotCXU4IHNwdXJDaGFuc1tBUjkzMDBfRUVQUk9NX01PREFMX1NQVVJTXTsKKwl1OCBzcHVyQ2hhbnNbQVJfRUVQUk9NX01PREFMX1NQVVJTXTsKIAkvKiAzICBDaGVjayBpZiB0aGUgcmVnaXN0ZXIgaXMgcGVyIGNoYWluICovCiAJaW50OF90IG5vaXNlRmxvb3JUaHJlc2hDaFtBUjkzMDBfTUFYX0NIQUlOU107CiAJdTggb2JbQVI5MzAwX01BWF9DSEFJTlNdOwpAQCAtMjM2LDcgKzIxNyw3IEBACiAJdTggdGhyZXNoNjI7CiAJX19sZTMyIHBhcGRSYXRlTWFza0h0MjA7CiAJX19sZTMyIHBhcGRSYXRlTWFza0h0NDA7Ci0JdTggZnV0dXJlTW9kYWxbMjRdOworCXU4IGZ1dHVyZU1vZGFsWzEwXTsKIH0gX19wYWNrZWQ7CiAKIHN0cnVjdCBhcjkzMDBfY2FsX2RhdGFfcGVyX2ZyZXFfb3BfbG9vcCB7CkBAIC0yNjksNiArMjUwLDIwIEBACiAJdTggY3RsRWRnZXNbQVI5MzAwX05VTV9CQU5EX0VER0VTXzVHXTsKIH0gX19wYWNrZWQ7CiAKK3N0cnVjdCBhcjkzMDBfQmFzZUV4dGVuc2lvbl8xIHsKKwl1OCBhbnRfZGl2X2NvbnRyb2w7CisJdTggZnV0dXJlWzEzXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBhcjkzMDBfQmFzZUV4dGVuc2lvbl8yIHsKKwlpbnQ4X3QgICAgdGVtcFNsb3BlTG93OworCWludDhfdCAgICB0ZW1wU2xvcGVIaWdoOworCXU4ICAgeGF0dGVuMURCTG93W0FSOTMwMF9NQVhfQ0hBSU5TXTsKKwl1OCAgIHhhdHRlbjFNYXJnaW5Mb3dbQVI5MzAwX01BWF9DSEFJTlNdOworCXU4ICAgeGF0dGVuMURCSGlnaFtBUjkzMDBfTUFYX0NIQUlOU107CisJdTggICB4YXR0ZW4xTWFyZ2luSGlnaFtBUjkzMDBfTUFYX0NIQUlOU107Cit9IF9fcGFja2VkOworCiBzdHJ1Y3QgYXI5MzAwX2VlcHJvbSB7CiAJdTggZWVwcm9tVmVyc2lvbjsKIAl1OCB0ZW1wbGF0ZVZlcnNpb247CkBAIC0yNzgsNiArMjczLDcgQEAKIAlzdHJ1Y3QgYXI5MzAwX2Jhc2VfZWVwX2hkciBiYXNlRWVwSGVhZGVyOwogCiAJc3RydWN0IGFyOTMwMF9tb2RhbF9lZXBfaGVhZGVyIG1vZGFsSGVhZGVyMkc7CisJc3RydWN0IGFyOTMwMF9CYXNlRXh0ZW5zaW9uXzEgYmFzZV9leHQxOwogCXU4IGNhbEZyZXFQaWVyMkdbQVI5MzAwX05VTV8yR19DQUxfUElFUlNdOwogCXN0cnVjdCBhcjkzMDBfY2FsX2RhdGFfcGVyX2ZyZXFfb3BfbG9vcAogCSBjYWxQaWVyRGF0YTJHW0FSOTMwMF9NQVhfQ0hBSU5TXVtBUjkzMDBfTlVNXzJHX0NBTF9QSUVSU107CkBAIC0yOTcsNiArMjkzLDcgQEAKIAl1OCBjdGxfZnJlcWJpbl8yR1tBUjkzMDBfTlVNX0NUTFNfMkddW0FSOTMwMF9OVU1fQkFORF9FREdFU18yR107CiAJc3RydWN0IGNhbF9jdGxfZGF0YV8yZyBjdGxQb3dlckRhdGFfMkdbQVI5MzAwX05VTV9DVExTXzJHXTsKIAlzdHJ1Y3QgYXI5MzAwX21vZGFsX2VlcF9oZWFkZXIgbW9kYWxIZWFkZXI1RzsKKwlzdHJ1Y3QgYXI5MzAwX0Jhc2VFeHRlbnNpb25fMiBiYXNlX2V4dDI7CiAJdTggY2FsRnJlcVBpZXI1R1tBUjkzMDBfTlVNXzVHX0NBTF9QSUVSU107CiAJc3RydWN0IGFyOTMwMF9jYWxfZGF0YV9wZXJfZnJlcV9vcF9sb29wCiAJIGNhbFBpZXJEYXRhNUdbQVI5MzAwX01BWF9DSEFJTlNdW0FSOTMwMF9OVU1fNUdfQ0FMX1BJRVJTXTsKQEAgLTMxNyw0ICszMTQsOCBAQAogczMyIGFyOTAwM19od19nZXRfdHhfZ2Fpbl9pZHgoc3RydWN0IGF0aF9odyAqYWgpOwogczMyIGFyOTAwM19od19nZXRfcnhfZ2Fpbl9pZHgoc3RydWN0IGF0aF9odyAqYWgpOwogCit1OCAqYXI5MDAzX2dldF9zcHVyX2NoYW5fcHRyKHN0cnVjdCBhdGhfaHcgKmFoLCBib29sIGlzXzJnaHopOworCit1bnNpZ25lZCBpbnQgYXI5MDAzX2dldF9wYXByZF9zY2FsZV9mYWN0b3Ioc3RydWN0IGF0aF9odyAqYWgsCisJCQkJCSAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19ody5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19ody5jCmluZGV4IGMyYTA1NzEuLjYxMzc2MzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfaHcuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX2h3LmMKQEAgLTE3LDIwICsxNywxMCBAQAogI2luY2x1ZGUgImh3LmgiCiAjaW5jbHVkZSAiYXI5MDAzX21hYy5oIgogI2luY2x1ZGUgImFyOTAwM18ycDJfaW5pdHZhbHMuaCIKKyNpbmNsdWRlICJhcjk0ODVfaW5pdHZhbHMuaCIKIAogLyogR2VuZXJhbCBoYXJkd2FyZSBjb2RlIGZvciB0aGUgQVI5MDAzIGhhZHdhcmUgZmFtaWx5ICovCiAKLXN0YXRpYyBib29sIGFyOTAwM19od19tYWN2ZXJzaW9uX3N1cHBvcnRlZCh1MzIgbWFjdmVyc2lvbikKLXsKLQlzd2l0Y2ggKG1hY3ZlcnNpb24pIHsKLQljYXNlIEFSX1NSRVZfVkVSU0lPTl85MzAwOgotCQlyZXR1cm4gdHJ1ZTsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0JcmV0dXJuIGZhbHNlOwotfQotCiAvKgogICogVGhlIEFSOTAwMyBmYW1pbHkgdXNlcyBhIG5ldyBJTkkgZm9ybWF0IChwcmUsIGNvcmUsIHBvc3QKICAqIGFycmF5cyBwZXIgc3Vic3lzdGVtKS4gVGhpcyBwcm92aWRlcyBzdXBwb3J0IGZvciB0aGUKQEAgLTM4LDcyICsyOCwxMzQgQEAKICAqLwogc3RhdGljIHZvaWQgYXI5MDAzX2h3X2luaXRfbW9kZV9yZWdzKHN0cnVjdCBhdGhfaHcgKmFoKQogewotCS8qIG1hYyAqLwotCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTWFjW0FUSF9JTklfUFJFXSwgTlVMTCwgMCwgMCk7Ci0JSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNYWNbQVRIX0lOSV9DT1JFXSwKLQkJICAgICAgIGFyOTMwMF8ycDJfbWFjX2NvcmUsCi0JCSAgICAgICBBUlJBWV9TSVpFKGFyOTMwMF8ycDJfbWFjX2NvcmUpLCAyKTsKLQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1hY1tBVEhfSU5JX1BPU1RdLAotCQkgICAgICAgYXI5MzAwXzJwMl9tYWNfcG9zdGFtYmxlLAotCQkgICAgICAgQVJSQVlfU0laRShhcjkzMDBfMnAyX21hY19wb3N0YW1ibGUpLCA1KTsKKwlpZiAoQVJfU1JFVl85NDg1KGFoKSkgeworCQkvKiBtYWMgKi8KKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNYWNbQVRIX0lOSV9QUkVdLCBOVUxMLCAwLCAwKTsKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNYWNbQVRIX0lOSV9DT1JFXSwKKwkJCQlhcjk0ODVfMV8wX21hY19jb3JlLAorCQkJCUFSUkFZX1NJWkUoYXI5NDg1XzFfMF9tYWNfY29yZSksIDIpOworCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1hY1tBVEhfSU5JX1BPU1RdLAorCQkJCWFyOTQ4NV8xXzBfbWFjX3Bvc3RhbWJsZSwKKwkJCQlBUlJBWV9TSVpFKGFyOTQ4NV8xXzBfbWFjX3Bvc3RhbWJsZSksIDUpOwogCi0JLyogYmIgKi8KLQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUJCW0FUSF9JTklfUFJFXSwgTlVMTCwgMCwgMCk7Ci0JSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlCQltBVEhfSU5JX0NPUkVdLAotCQkgICAgICAgYXI5MzAwXzJwMl9iYXNlYmFuZF9jb3JlLAotCQkgICAgICAgQVJSQVlfU0laRShhcjkzMDBfMnAyX2Jhc2ViYW5kX2NvcmUpLCAyKTsKLQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUJCW0FUSF9JTklfUE9TVF0sCi0JCSAgICAgICBhcjkzMDBfMnAyX2Jhc2ViYW5kX3Bvc3RhbWJsZSwKLQkJICAgICAgIEFSUkFZX1NJWkUoYXI5MzAwXzJwMl9iYXNlYmFuZF9wb3N0YW1ibGUpLCA1KTsKKwkJLyogYmIgKi8KKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlCQltBVEhfSU5JX1BSRV0sIGFyOTQ4NV8xXzAsCisJCQkJQVJSQVlfU0laRShhcjk0ODVfMV8wKSwgMik7CisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pQkJbQVRIX0lOSV9DT1JFXSwKKwkJCQlhcjk0ODVfMV8wX2Jhc2ViYW5kX2NvcmUsCisJCQkJQVJSQVlfU0laRShhcjk0ODVfMV8wX2Jhc2ViYW5kX2NvcmUpLCAyKTsKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlCQltBVEhfSU5JX1BPU1RdLAorCQkJCWFyOTQ4NV8xXzBfYmFzZWJhbmRfcG9zdGFtYmxlLAorCQkJCUFSUkFZX1NJWkUoYXI5NDg1XzFfMF9iYXNlYmFuZF9wb3N0YW1ibGUpLCA1KTsKIAotCS8qIHJhZGlvICovCi0JSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlSYWRpb1tBVEhfSU5JX1BSRV0sIE5VTEwsIDAsIDApOwotCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pUmFkaW9bQVRIX0lOSV9DT1JFXSwKLQkJICAgICAgIGFyOTMwMF8ycDJfcmFkaW9fY29yZSwKLQkJICAgICAgIEFSUkFZX1NJWkUoYXI5MzAwXzJwMl9yYWRpb19jb3JlKSwgMik7Ci0JSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlSYWRpb1tBVEhfSU5JX1BPU1RdLAotCQkgICAgICAgYXI5MzAwXzJwMl9yYWRpb19wb3N0YW1ibGUsCi0JCSAgICAgICBBUlJBWV9TSVpFKGFyOTMwMF8ycDJfcmFkaW9fcG9zdGFtYmxlKSwgNSk7CisJCS8qIHJhZGlvICovCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pUmFkaW9bQVRIX0lOSV9QUkVdLCBOVUxMLCAwLCAwKTsKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlSYWRpb1tBVEhfSU5JX0NPUkVdLAorCQkJCWFyOTQ4NV8xXzBfcmFkaW9fY29yZSwKKwkJCQlBUlJBWV9TSVpFKGFyOTQ4NV8xXzBfcmFkaW9fY29yZSksIDIpOworCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaVJhZGlvW0FUSF9JTklfUE9TVF0sCisJCQkJYXI5NDg1XzFfMF9yYWRpb19wb3N0YW1ibGUsCisJCQkJQVJSQVlfU0laRShhcjk0ODVfMV8wX3JhZGlvX3Bvc3RhbWJsZSksIDIpOwogCi0JLyogc29jICovCi0JSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlTT0NbQVRIX0lOSV9QUkVdLAotCQkgICAgICAgYXI5MzAwXzJwMl9zb2NfcHJlYW1ibGUsCi0JCSAgICAgICBBUlJBWV9TSVpFKGFyOTMwMF8ycDJfc29jX3ByZWFtYmxlKSwgMik7Ci0JSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlTT0NbQVRIX0lOSV9DT1JFXSwgTlVMTCwgMCwgMCk7Ci0JSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlTT0NbQVRIX0lOSV9QT1NUXSwKLQkJICAgICAgIGFyOTMwMF8ycDJfc29jX3Bvc3RhbWJsZSwKLQkJICAgICAgIEFSUkFZX1NJWkUoYXI5MzAwXzJwMl9zb2NfcG9zdGFtYmxlKSwgNSk7CisJCS8qIHNvYyAqLworCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaVNPQ1tBVEhfSU5JX1BSRV0sCisJCQkJYXI5NDg1XzFfMF9zb2NfcHJlYW1ibGUsCisJCQkJQVJSQVlfU0laRShhcjk0ODVfMV8wX3NvY19wcmVhbWJsZSksIDIpOworCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaVNPQ1tBVEhfSU5JX0NPUkVdLCBOVUxMLCAwLCAwKTsKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlTT0NbQVRIX0lOSV9QT1NUXSwgTlVMTCwgMCwgMCk7CiAKLQkvKiByeC90eCBnYWluICovCi0JSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNb2Rlc1J4R2FpbiwKLQkJICAgICAgIGFyOTMwMENvbW1vbl9yeF9nYWluX3RhYmxlXzJwMiwKLQkJICAgICAgIEFSUkFZX1NJWkUoYXI5MzAwQ29tbW9uX3J4X2dhaW5fdGFibGVfMnAyKSwgMik7Ci0JSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNb2Rlc1R4R2FpbiwKLQkJICAgICAgIGFyOTMwME1vZGVzX2xvd2VzdF9vYl9kYl90eF9nYWluX3RhYmxlXzJwMiwKLQkJICAgICAgIEFSUkFZX1NJWkUoYXI5MzAwTW9kZXNfbG93ZXN0X29iX2RiX3R4X2dhaW5fdGFibGVfMnAyKSwKLQkJICAgICAgIDUpOworCQkvKiByeC90eCBnYWluICovCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNSeEdhaW4sCisJCQkJYXI5NDg1Q29tbW9uX3J4X2dhaW5fMV8wLAorCQkJCUFSUkFZX1NJWkUoYXI5NDg1Q29tbW9uX3J4X2dhaW5fMV8wKSwgMik7CisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNUeEdhaW4sCisJCQkJYXI5NDg1TW9kZXNfbG93ZXN0X29iX2RiX3R4X2dhaW5fMV8wLAorCQkJCUFSUkFZX1NJWkUoYXI5NDg1TW9kZXNfbG93ZXN0X29iX2RiX3R4X2dhaW5fMV8wKSwKKwkJCQk1KTsKIAotCS8qIExvYWQgUENJRSBTRVJERVMgc2V0dGluZ3MgZnJvbSBJTkkgKi8KKwkJLyogTG9hZCBQQ0lFIFNFUkRFUyBzZXR0aW5ncyBmcm9tIElOSSAqLwogCi0JLyogQXdha2UgU2V0dGluZyAqLworCQkvKiBBd2FrZSBTZXR0aW5nICovCiAKLQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaVBjaWVTZXJkZXMsCi0JCSAgICAgICBhcjkzMDBQY2llUGh5X3BsbF9vbl9jbGtyZXFfZGlzYWJsZV9MMV8ycDIsCi0JCSAgICAgICBBUlJBWV9TSVpFKGFyOTMwMFBjaWVQaHlfcGxsX29uX2Nsa3JlcV9kaXNhYmxlX0wxXzJwMiksCi0JCSAgICAgICAyKTsKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlQY2llU2VyZGVzLAorCQkJCWFyOTQ4NV8xXzBfcGNpZV9waHlfcGxsX29uX2Nsa3JlcV9kaXNhYmxlX0wxLAorCQkJCUFSUkFZX1NJWkUoYXI5NDg1XzFfMF9wY2llX3BoeV9wbGxfb25fY2xrcmVxX2Rpc2FibGVfTDEpLAorCQkJCTIpOwogCi0JLyogU2xlZXAgU2V0dGluZyAqLworCQkvKiBTbGVlcCBTZXR0aW5nICovCiAKLQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaVBjaWVTZXJkZXNMb3dQb3dlciwKLQkJICAgICAgIGFyOTMwMFBjaWVQaHlfY2xrcmVxX2VuYWJsZV9MMV8ycDIsCi0JCSAgICAgICBBUlJBWV9TSVpFKGFyOTMwMFBjaWVQaHlfY2xrcmVxX2VuYWJsZV9MMV8ycDIpLAotCQkgICAgICAgMik7CisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pUGNpZVNlcmRlc0xvd1Bvd2VyLAorCQkJCWFyOTQ4NV8xXzBfcGNpZV9waHlfcGxsX29uX2Nsa3JlcV9lbmFibGVfTDEsCisJCQkJQVJSQVlfU0laRShhcjk0ODVfMV8wX3BjaWVfcGh5X3BsbF9vbl9jbGtyZXFfZW5hYmxlX0wxKSwKKwkJCQkyKTsKKwl9IGVsc2UgeworCQkvKiBtYWMgKi8KKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNYWNbQVRIX0lOSV9QUkVdLCBOVUxMLCAwLCAwKTsKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNYWNbQVRIX0lOSV9DT1JFXSwKKwkJCQlhcjkzMDBfMnAyX21hY19jb3JlLAorCQkJCUFSUkFZX1NJWkUoYXI5MzAwXzJwMl9tYWNfY29yZSksIDIpOworCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1hY1tBVEhfSU5JX1BPU1RdLAorCQkJCWFyOTMwMF8ycDJfbWFjX3Bvc3RhbWJsZSwKKwkJCQlBUlJBWV9TSVpFKGFyOTMwMF8ycDJfbWFjX3Bvc3RhbWJsZSksIDUpOwogCi0JLyogRmFzdCBjbG9jayBtb2RhbCBzZXR0aW5ncyAqLwotCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNBZGRpdGlvbmFsLAotCQkgICAgICAgYXI5MzAwTW9kZXNfZmFzdF9jbG9ja18ycDIsCi0JCSAgICAgICBBUlJBWV9TSVpFKGFyOTMwME1vZGVzX2Zhc3RfY2xvY2tfMnAyKSwKLQkJICAgICAgIDMpOworCQkvKiBiYiAqLworCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUJCW0FUSF9JTklfUFJFXSwgTlVMTCwgMCwgMCk7CisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pQkJbQVRIX0lOSV9DT1JFXSwKKwkJCQlhcjkzMDBfMnAyX2Jhc2ViYW5kX2NvcmUsCisJCQkJQVJSQVlfU0laRShhcjkzMDBfMnAyX2Jhc2ViYW5kX2NvcmUpLCAyKTsKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlCQltBVEhfSU5JX1BPU1RdLAorCQkJCWFyOTMwMF8ycDJfYmFzZWJhbmRfcG9zdGFtYmxlLAorCQkJCUFSUkFZX1NJWkUoYXI5MzAwXzJwMl9iYXNlYmFuZF9wb3N0YW1ibGUpLCA1KTsKKworCQkvKiByYWRpbyAqLworCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaVJhZGlvW0FUSF9JTklfUFJFXSwgTlVMTCwgMCwgMCk7CisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pUmFkaW9bQVRIX0lOSV9DT1JFXSwKKwkJCQlhcjkzMDBfMnAyX3JhZGlvX2NvcmUsCisJCQkJQVJSQVlfU0laRShhcjkzMDBfMnAyX3JhZGlvX2NvcmUpLCAyKTsKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlSYWRpb1tBVEhfSU5JX1BPU1RdLAorCQkJCWFyOTMwMF8ycDJfcmFkaW9fcG9zdGFtYmxlLAorCQkJCUFSUkFZX1NJWkUoYXI5MzAwXzJwMl9yYWRpb19wb3N0YW1ibGUpLCA1KTsKKworCQkvKiBzb2MgKi8KKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlTT0NbQVRIX0lOSV9QUkVdLAorCQkJCWFyOTMwMF8ycDJfc29jX3ByZWFtYmxlLAorCQkJCUFSUkFZX1NJWkUoYXI5MzAwXzJwMl9zb2NfcHJlYW1ibGUpLCAyKTsKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlTT0NbQVRIX0lOSV9DT1JFXSwgTlVMTCwgMCwgMCk7CisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pU09DW0FUSF9JTklfUE9TVF0sCisJCQkJYXI5MzAwXzJwMl9zb2NfcG9zdGFtYmxlLAorCQkJCUFSUkFZX1NJWkUoYXI5MzAwXzJwMl9zb2NfcG9zdGFtYmxlKSwgNSk7CisKKwkJLyogcngvdHggZ2FpbiAqLworCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzUnhHYWluLAorCQkJCWFyOTMwMENvbW1vbl9yeF9nYWluX3RhYmxlXzJwMiwKKwkJCQlBUlJBWV9TSVpFKGFyOTMwMENvbW1vbl9yeF9nYWluX3RhYmxlXzJwMiksIDIpOworCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzVHhHYWluLAorCQkJCWFyOTMwME1vZGVzX2xvd2VzdF9vYl9kYl90eF9nYWluX3RhYmxlXzJwMiwKKwkJCQlBUlJBWV9TSVpFKGFyOTMwME1vZGVzX2xvd2VzdF9vYl9kYl90eF9nYWluX3RhYmxlXzJwMiksCisJCQkJNSk7CisKKwkJLyogTG9hZCBQQ0lFIFNFUkRFUyBzZXR0aW5ncyBmcm9tIElOSSAqLworCisJCS8qIEF3YWtlIFNldHRpbmcgKi8KKworCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaVBjaWVTZXJkZXMsCisJCQkJYXI5MzAwUGNpZVBoeV9wbGxfb25fY2xrcmVxX2Rpc2FibGVfTDFfMnAyLAorCQkJCUFSUkFZX1NJWkUoYXI5MzAwUGNpZVBoeV9wbGxfb25fY2xrcmVxX2Rpc2FibGVfTDFfMnAyKSwKKwkJCQkyKTsKKworCQkvKiBTbGVlcCBTZXR0aW5nICovCisKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlQY2llU2VyZGVzTG93UG93ZXIsCisJCQkJYXI5MzAwUGNpZVBoeV9jbGtyZXFfZW5hYmxlX0wxXzJwMiwKKwkJCQlBUlJBWV9TSVpFKGFyOTMwMFBjaWVQaHlfY2xrcmVxX2VuYWJsZV9MMV8ycDIpLAorCQkJCTIpOworCisJCS8qIEZhc3QgY2xvY2sgbW9kYWwgc2V0dGluZ3MgKi8KKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNb2Rlc0FkZGl0aW9uYWwsCisJCQkJYXI5MzAwTW9kZXNfZmFzdF9jbG9ja18ycDIsCisJCQkJQVJSQVlfU0laRShhcjkzMDBNb2Rlc19mYXN0X2Nsb2NrXzJwMiksCisJCQkJMyk7CisJfQogfQogCiBzdGF0aWMgdm9pZCBhcjkwMDNfdHhfZ2Fpbl90YWJsZV9hcHBseShzdHJ1Y3QgYXRoX2h3ICphaCkKQEAgLTExMSwyMiArMTYzLDUyIEBACiAJc3dpdGNoIChhcjkwMDNfaHdfZ2V0X3R4X2dhaW5faWR4KGFoKSkgewogCWNhc2UgMDoKIAlkZWZhdWx0OgotCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzVHhHYWluLAotCQkJICAgICAgIGFyOTMwME1vZGVzX2xvd2VzdF9vYl9kYl90eF9nYWluX3RhYmxlXzJwMiwKLQkJCSAgICAgICBBUlJBWV9TSVpFKGFyOTMwME1vZGVzX2xvd2VzdF9vYl9kYl90eF9nYWluX3RhYmxlXzJwMiksCi0JCQkgICAgICAgNSk7CisJCWlmIChBUl9TUkVWXzk0ODUoYWgpKQorCQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNb2Rlc1R4R2FpbiwKKwkJCQkgICAgICAgYXI5NDg1TW9kZXNfbG93ZXN0X29iX2RiX3R4X2dhaW5fMV8wLAorCQkJCSAgICAgICBBUlJBWV9TSVpFKGFyOTQ4NU1vZGVzX2xvd2VzdF9vYl9kYl90eF9nYWluXzFfMCksCisJCQkJICAgICAgIDUpOworCQllbHNlCisJCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzVHhHYWluLAorCQkJCSAgICAgICBhcjkzMDBNb2Rlc19sb3dlc3Rfb2JfZGJfdHhfZ2Fpbl90YWJsZV8ycDIsCisJCQkJICAgICAgIEFSUkFZX1NJWkUoYXI5MzAwTW9kZXNfbG93ZXN0X29iX2RiX3R4X2dhaW5fdGFibGVfMnAyKSwKKwkJCQkgICAgICAgNSk7CiAJCWJyZWFrOwogCWNhc2UgMToKLQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNb2Rlc1R4R2FpbiwKLQkJCSAgICAgICBhcjkzMDBNb2Rlc19oaWdoX29iX2RiX3R4X2dhaW5fdGFibGVfMnAyLAotCQkJICAgICAgIEFSUkFZX1NJWkUoYXI5MzAwTW9kZXNfaGlnaF9vYl9kYl90eF9nYWluX3RhYmxlXzJwMiksCi0JCQkgICAgICAgNSk7CisJCWlmIChBUl9TUkVWXzk0ODUoYWgpKQorCQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNb2Rlc1R4R2FpbiwKKwkJCQkgICAgICAgYXI5NDg1TW9kZXNfaGlnaF9vYl9kYl90eF9nYWluXzFfMCwKKwkJCQkgICAgICAgQVJSQVlfU0laRShhcjk0ODVNb2Rlc19sb3dlc3Rfb2JfZGJfdHhfZ2Fpbl8xXzApLAorCQkJCSAgICAgICA1KTsKKwkJZWxzZQorCQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNb2Rlc1R4R2FpbiwKKwkJCQkgICAgICAgYXI5MzAwTW9kZXNfaGlnaF9vYl9kYl90eF9nYWluX3RhYmxlXzJwMiwKKwkJCQkgICAgICAgQVJSQVlfU0laRShhcjkzMDBNb2Rlc19oaWdoX29iX2RiX3R4X2dhaW5fdGFibGVfMnAyKSwKKwkJCQkgICAgICAgNSk7CiAJCWJyZWFrOwogCWNhc2UgMjoKLQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNb2Rlc1R4R2FpbiwKLQkJCSAgICAgICBhcjkzMDBNb2Rlc19sb3dfb2JfZGJfdHhfZ2Fpbl90YWJsZV8ycDIsCi0JCQkgICAgICAgQVJSQVlfU0laRShhcjkzMDBNb2Rlc19sb3dfb2JfZGJfdHhfZ2Fpbl90YWJsZV8ycDIpLAotCQkJICAgICAgIDUpOworCQlpZiAoQVJfU1JFVl85NDg1KGFoKSkKKwkJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNUeEdhaW4sCisJCQkJICAgICAgIGFyOTQ4NU1vZGVzX2xvd19vYl9kYl90eF9nYWluXzFfMCwKKwkJCQkgICAgICAgQVJSQVlfU0laRShhcjk0ODVNb2Rlc19sb3dlc3Rfb2JfZGJfdHhfZ2Fpbl8xXzApLAorCQkJCSAgICAgICA1KTsKKwkJZWxzZQorCQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNb2Rlc1R4R2FpbiwKKwkJCQkgICAgICAgYXI5MzAwTW9kZXNfbG93X29iX2RiX3R4X2dhaW5fdGFibGVfMnAyLAorCQkJCSAgICAgICBBUlJBWV9TSVpFKGFyOTMwME1vZGVzX2xvd19vYl9kYl90eF9nYWluX3RhYmxlXzJwMiksCisJCQkJICAgICAgIDUpOworCQlicmVhazsKKwljYXNlIDM6CisJCWlmIChBUl9TUkVWXzk0ODUoYWgpKQorCQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNb2Rlc1R4R2FpbiwKKwkJCQkgICAgICAgYXI5NDg1TW9kZXNfaGlnaF9wb3dlcl90eF9nYWluXzFfMCwKKwkJCQkgICAgICAgQVJSQVlfU0laRShhcjk0ODVNb2Rlc19oaWdoX3Bvd2VyX3R4X2dhaW5fMV8wKSwKKwkJCQkgICAgICAgNSk7CisJCWVsc2UKKwkJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNUeEdhaW4sCisJCQkJICAgICAgIGFyOTMwME1vZGVzX2hpZ2hfcG93ZXJfdHhfZ2Fpbl90YWJsZV8ycDIsCisJCQkJICAgICAgIEFSUkFZX1NJWkUoYXI5MzAwTW9kZXNfaGlnaF9wb3dlcl90eF9nYWluX3RhYmxlXzJwMiksCisJCQkJICAgICAgIDUpOwogCQlicmVhazsKIAl9CiB9CkBAIC0xMzYsMTYgKzIxOCwyOCBAQAogCXN3aXRjaCAoYXI5MDAzX2h3X2dldF9yeF9nYWluX2lkeChhaCkpIHsKIAljYXNlIDA6CiAJZGVmYXVsdDoKLQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNb2Rlc1J4R2FpbiwKLQkJCSAgICAgICBhcjkzMDBDb21tb25fcnhfZ2Fpbl90YWJsZV8ycDIsCi0JCQkgICAgICAgQVJSQVlfU0laRShhcjkzMDBDb21tb25fcnhfZ2Fpbl90YWJsZV8ycDIpLAotCQkJICAgICAgIDIpOworCQlpZiAoQVJfU1JFVl85NDg1KGFoKSkKKwkJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNSeEdhaW4sCisJCQkJICAgICAgIGFyOTQ4NUNvbW1vbl9yeF9nYWluXzFfMCwKKwkJCQkgICAgICAgQVJSQVlfU0laRShhcjk0ODVDb21tb25fcnhfZ2Fpbl8xXzApLAorCQkJCSAgICAgICAyKTsKKwkJZWxzZQorCQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNb2Rlc1J4R2FpbiwKKwkJCQkgICAgICAgYXI5MzAwQ29tbW9uX3J4X2dhaW5fdGFibGVfMnAyLAorCQkJCSAgICAgICBBUlJBWV9TSVpFKGFyOTMwMENvbW1vbl9yeF9nYWluX3RhYmxlXzJwMiksCisJCQkJICAgICAgIDIpOwogCQlicmVhazsKIAljYXNlIDE6Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNSeEdhaW4sCi0JCQkgICAgICAgYXI5MzAwQ29tbW9uX3dvX3hsbmFfcnhfZ2Fpbl90YWJsZV8ycDIsCi0JCQkgICAgICAgQVJSQVlfU0laRShhcjkzMDBDb21tb25fd29feGxuYV9yeF9nYWluX3RhYmxlXzJwMiksCi0JCQkgICAgICAgMik7CisJCWlmIChBUl9TUkVWXzk0ODUoYWgpKQorCQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNb2Rlc1J4R2FpbiwKKwkJCQkgICAgICAgYXI5NDg1Q29tbW9uX3dvX3hsbmFfcnhfZ2Fpbl8xXzAsCisJCQkJICAgICAgIEFSUkFZX1NJWkUoYXI5NDg1Q29tbW9uX3dvX3hsbmFfcnhfZ2Fpbl8xXzApLAorCQkJCSAgICAgICAyKTsKKwkJZWxzZQorCQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNb2Rlc1J4R2FpbiwKKwkJCQkgICAgICAgYXI5MzAwQ29tbW9uX3dvX3hsbmFfcnhfZ2Fpbl90YWJsZV8ycDIsCisJCQkJICAgICAgIEFSUkFZX1NJWkUoYXI5MzAwQ29tbW9uX3dvX3hsbmFfcnhfZ2Fpbl90YWJsZV8ycDIpLAorCQkJCSAgICAgICAyKTsKIAkJYnJlYWs7CiAJfQogfQpAQCAtMjE2LDcgKzMxMCw2IEBACiAKIAlwcml2X29wcy0+aW5pdF9tb2RlX3JlZ3MgPSBhcjkwMDNfaHdfaW5pdF9tb2RlX3JlZ3M7CiAJcHJpdl9vcHMtPmluaXRfbW9kZV9nYWluX3JlZ3MgPSBhcjkwMDNfaHdfaW5pdF9tb2RlX2dhaW5fcmVnczsKLQlwcml2X29wcy0+bWFjdmVyc2lvbl9zdXBwb3J0ZWQgPSBhcjkwMDNfaHdfbWFjdmVyc2lvbl9zdXBwb3J0ZWQ7CiAKIAlvcHMtPmNvbmZpZ19wY2lfcG93ZXJzYXZlID0gYXI5MDAzX2h3X2NvbmZpZ3BjaXBvd2Vyc2F2ZTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19tYWMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfbWFjLmMKaW5kZXggM2I0MjRjYS4uNGNlZGRiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19tYWMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX21hYy5jCkBAIC0xODIsOCArMTgyLDggQEAKIAkJfQogCiAJCWlmIChzeW5jX2NhdXNlICYgQVJfSU5UUl9TWU5DX0xPQ0FMX1RJTUVPVVQpCi0JCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0lOVEVSUlVQVCwKLQkJCQkgICJBUl9JTlRSX1NZTkNfTE9DQUxfVElNRU9VVFxuIik7CisJCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19JTlRFUlJVUFQsCisJCQkJIkFSX0lOVFJfU1lOQ19MT0NBTF9USU1FT1VUXG4iKTsKIAogCQlSRUdfV1JJVEUoYWgsIEFSX0lOVFJfU1lOQ19DQVVTRV9DTFIsIHN5bmNfY2F1c2UpOwogCQkodm9pZCkgUkVHX1JFQUQoYWgsIEFSX0lOVFJfU1lOQ19DQVVTRV9DTFIpOwpAQCAtMjM3LDczICsyMzcsNzYgQEAKIAkJCQkgc3RydWN0IGF0aF90eF9zdGF0dXMgKnRzKQogewogCXN0cnVjdCBhcjkwMDNfdHhzICphZHM7CisJdTMyIHN0YXR1czsKIAogCWFkcyA9ICZhaC0+dHNfcmluZ1thaC0+dHNfdGFpbF07CiAKLQlpZiAoKGFkcy0+c3RhdHVzOCAmIEFSX1R4RG9uZSkgPT0gMCkKKwlzdGF0dXMgPSBBQ0NFU1NfT05DRShhZHMtPnN0YXR1czgpOworCWlmICgoc3RhdHVzICYgQVJfVHhEb25lKSA9PSAwKQogCQlyZXR1cm4gLUVJTlBST0dSRVNTOwogCiAJYWgtPnRzX3RhaWwgPSAoYWgtPnRzX3RhaWwgKyAxKSAlIGFoLT50c19zaXplOwogCiAJaWYgKChNUyhhZHMtPmRzX2luZm8sIEFSX0Rlc2NJZCkgIT0gQVRIRVJPU19WRU5ET1JfSUQpIHx8CiAJICAgIChNUyhhZHMtPmRzX2luZm8sIEFSX1R4UnhEZXNjKSAhPSAxKSkgewotCQlhdGhfcHJpbnQoYXRoOWtfaHdfY29tbW9uKGFoKSwgQVRIX0RCR19YTUlULAotCQkJICAiVHggRGVzY3JpcHRvciBlcnJvciAleFxuIiwgYWRzLT5kc19pbmZvKTsKKwkJYXRoX2RiZyhhdGg5a19od19jb21tb24oYWgpLCBBVEhfREJHX1hNSVQsCisJCQkiVHggRGVzY3JpcHRvciBlcnJvciAleFxuIiwgYWRzLT5kc19pbmZvKTsKIAkJbWVtc2V0KGFkcywgMCwgc2l6ZW9mKCphZHMpKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCisJaWYgKHN0YXR1cyAmIEFSX1R4T3BFeGNlZWRlZCkKKwkJdHMtPnRzX3N0YXR1cyB8PSBBVEg5S19UWEVSUl9YVFhPUDsKKwl0cy0+dHNfcmF0ZWluZGV4ID0gTVMoc3RhdHVzLCBBUl9GaW5hbFR4SWR4KTsKKwl0cy0+dHNfc2VxbnVtID0gTVMoc3RhdHVzLCBBUl9TZXFOdW0pOworCXRzLT50aWQgPSBNUyhzdGF0dXMsIEFSX1R4VGlkKTsKKwogCXRzLT5xaWQgPSBNUyhhZHMtPmRzX2luZm8sIEFSX1R4UWN1TnVtKTsKIAl0cy0+ZGVzY19pZCA9IE1TKGFkcy0+c3RhdHVzMSwgQVJfVHhEZXNjSWQpOwotCXRzLT50c19zZXFudW0gPSBNUyhhZHMtPnN0YXR1czgsIEFSX1NlcU51bSk7CiAJdHMtPnRzX3RzdGFtcCA9IGFkcy0+c3RhdHVzNDsKIAl0cy0+dHNfc3RhdHVzID0gMDsKIAl0cy0+dHNfZmxhZ3MgID0gMDsKIAotCWlmIChhZHMtPnN0YXR1czMgJiBBUl9FeGNlc3NpdmVSZXRyaWVzKQotCQl0cy0+dHNfc3RhdHVzIHw9IEFUSDlLX1RYRVJSX1hSRVRSWTsKLQlpZiAoYWRzLT5zdGF0dXMzICYgQVJfRmlsdGVyZWQpCi0JCXRzLT50c19zdGF0dXMgfD0gQVRIOUtfVFhFUlJfRklMVDsKLQlpZiAoYWRzLT5zdGF0dXMzICYgQVJfRklGT1VuZGVycnVuKSB7Ci0JCXRzLT50c19zdGF0dXMgfD0gQVRIOUtfVFhFUlJfRklGTzsKLQkJYXRoOWtfaHdfdXBkYXRldHh0cmlnbGV2ZWwoYWgsIHRydWUpOwotCX0KLQlpZiAoYWRzLT5zdGF0dXM4ICYgQVJfVHhPcEV4Y2VlZGVkKQotCQl0cy0+dHNfc3RhdHVzIHw9IEFUSDlLX1RYRVJSX1hUWE9QOwotCWlmIChhZHMtPnN0YXR1czMgJiBBUl9UeFRpbWVyRXhwaXJlZCkKLQkJdHMtPnRzX3N0YXR1cyB8PSBBVEg5S19UWEVSUl9USU1FUl9FWFBJUkVEOwotCi0JaWYgKGFkcy0+c3RhdHVzMyAmIEFSX0Rlc2NDZmdFcnIpCi0JCXRzLT50c19mbGFncyB8PSBBVEg5S19UWF9ERVNDX0NGR19FUlI7Ci0JaWYgKGFkcy0+c3RhdHVzMyAmIEFSX1R4RGF0YVVuZGVycnVuKSB7Ci0JCXRzLT50c19mbGFncyB8PSBBVEg5S19UWF9EQVRBX1VOREVSUlVOOwotCQlhdGg5a19od191cGRhdGV0eHRyaWdsZXZlbChhaCwgdHJ1ZSk7Ci0JfQotCWlmIChhZHMtPnN0YXR1czMgJiBBUl9UeERlbGltVW5kZXJydW4pIHsKLQkJdHMtPnRzX2ZsYWdzIHw9IEFUSDlLX1RYX0RFTElNX1VOREVSUlVOOwotCQlhdGg5a19od191cGRhdGV0eHRyaWdsZXZlbChhaCwgdHJ1ZSk7Ci0JfQotCWlmIChhZHMtPnN0YXR1czIgJiBBUl9UeEJhU3RhdHVzKSB7CisJc3RhdHVzID0gQUNDRVNTX09OQ0UoYWRzLT5zdGF0dXMyKTsKKwl0cy0+dHNfcnNzaV9jdGwwID0gTVMoc3RhdHVzLCBBUl9UeFJTU0lBbnQwMCk7CisJdHMtPnRzX3Jzc2lfY3RsMSA9IE1TKHN0YXR1cywgQVJfVHhSU1NJQW50MDEpOworCXRzLT50c19yc3NpX2N0bDIgPSBNUyhzdGF0dXMsIEFSX1R4UlNTSUFudDAyKTsKKwlpZiAoc3RhdHVzICYgQVJfVHhCYVN0YXR1cykgewogCQl0cy0+dHNfZmxhZ3MgfD0gQVRIOUtfVFhfQkE7CiAJCXRzLT5iYV9sb3cgPSBhZHMtPnN0YXR1czU7CiAJCXRzLT5iYV9oaWdoID0gYWRzLT5zdGF0dXM2OwogCX0KIAotCXRzLT50c19yYXRlaW5kZXggPSBNUyhhZHMtPnN0YXR1czgsIEFSX0ZpbmFsVHhJZHgpOworCXN0YXR1cyA9IEFDQ0VTU19PTkNFKGFkcy0+c3RhdHVzMyk7CisJaWYgKHN0YXR1cyAmIEFSX0V4Y2Vzc2l2ZVJldHJpZXMpCisJCXRzLT50c19zdGF0dXMgfD0gQVRIOUtfVFhFUlJfWFJFVFJZOworCWlmIChzdGF0dXMgJiBBUl9GaWx0ZXJlZCkKKwkJdHMtPnRzX3N0YXR1cyB8PSBBVEg5S19UWEVSUl9GSUxUOworCWlmIChzdGF0dXMgJiBBUl9GSUZPVW5kZXJydW4pIHsKKwkJdHMtPnRzX3N0YXR1cyB8PSBBVEg5S19UWEVSUl9GSUZPOworCQlhdGg5a19od191cGRhdGV0eHRyaWdsZXZlbChhaCwgdHJ1ZSk7CisJfQorCWlmIChzdGF0dXMgJiBBUl9UeFRpbWVyRXhwaXJlZCkKKwkJdHMtPnRzX3N0YXR1cyB8PSBBVEg5S19UWEVSUl9USU1FUl9FWFBJUkVEOworCWlmIChzdGF0dXMgJiBBUl9EZXNjQ2ZnRXJyKQorCQl0cy0+dHNfZmxhZ3MgfD0gQVRIOUtfVFhfREVTQ19DRkdfRVJSOworCWlmIChzdGF0dXMgJiBBUl9UeERhdGFVbmRlcnJ1bikgeworCQl0cy0+dHNfZmxhZ3MgfD0gQVRIOUtfVFhfREFUQV9VTkRFUlJVTjsKKwkJYXRoOWtfaHdfdXBkYXRldHh0cmlnbGV2ZWwoYWgsIHRydWUpOworCX0KKwlpZiAoc3RhdHVzICYgQVJfVHhEZWxpbVVuZGVycnVuKSB7CisJCXRzLT50c19mbGFncyB8PSBBVEg5S19UWF9ERUxJTV9VTkRFUlJVTjsKKwkJYXRoOWtfaHdfdXBkYXRldHh0cmlnbGV2ZWwoYWgsIHRydWUpOworCX0KKwl0cy0+dHNfc2hvcnRyZXRyeSA9IE1TKHN0YXR1cywgQVJfUlRTRmFpbENudCk7CisJdHMtPnRzX2xvbmdyZXRyeSA9IE1TKHN0YXR1cywgQVJfRGF0YUZhaWxDbnQpOworCXRzLT50c192aXJ0Y29sID0gTVMoc3RhdHVzLCBBUl9WaXJ0UmV0cnlDbnQpOwogCi0JdHMtPnRzX3Jzc2kgPSBNUyhhZHMtPnN0YXR1czcsIEFSX1R4UlNTSUNvbWJpbmVkKTsKLQl0cy0+dHNfcnNzaV9jdGwwID0gTVMoYWRzLT5zdGF0dXMyLCBBUl9UeFJTU0lBbnQwMCk7Ci0JdHMtPnRzX3Jzc2lfY3RsMSA9IE1TKGFkcy0+c3RhdHVzMiwgQVJfVHhSU1NJQW50MDEpOwotCXRzLT50c19yc3NpX2N0bDIgPSBNUyhhZHMtPnN0YXR1czIsIEFSX1R4UlNTSUFudDAyKTsKLQl0cy0+dHNfcnNzaV9leHQwID0gTVMoYWRzLT5zdGF0dXM3LCBBUl9UeFJTU0lBbnQxMCk7Ci0JdHMtPnRzX3Jzc2lfZXh0MSA9IE1TKGFkcy0+c3RhdHVzNywgQVJfVHhSU1NJQW50MTEpOwotCXRzLT50c19yc3NpX2V4dDIgPSBNUyhhZHMtPnN0YXR1czcsIEFSX1R4UlNTSUFudDEyKTsKLQl0cy0+dHNfc2hvcnRyZXRyeSA9IE1TKGFkcy0+c3RhdHVzMywgQVJfUlRTRmFpbENudCk7Ci0JdHMtPnRzX2xvbmdyZXRyeSA9IE1TKGFkcy0+c3RhdHVzMywgQVJfRGF0YUZhaWxDbnQpOwotCXRzLT50c192aXJ0Y29sID0gTVMoYWRzLT5zdGF0dXMzLCBBUl9WaXJ0UmV0cnlDbnQpOwotCXRzLT50c19hbnRlbm5hID0gMDsKLQotCXRzLT50aWQgPSBNUyhhZHMtPnN0YXR1czgsIEFSX1R4VGlkKTsKKwlzdGF0dXMgPSBBQ0NFU1NfT05DRShhZHMtPnN0YXR1czcpOworCXRzLT50c19yc3NpID0gTVMoc3RhdHVzLCBBUl9UeFJTU0lDb21iaW5lZCk7CisJdHMtPnRzX3Jzc2lfZXh0MCA9IE1TKHN0YXR1cywgQVJfVHhSU1NJQW50MTApOworCXRzLT50c19yc3NpX2V4dDEgPSBNUyhzdGF0dXMsIEFSX1R4UlNTSUFudDExKTsKKwl0cy0+dHNfcnNzaV9leHQyID0gTVMoc3RhdHVzLCBBUl9UeFJTU0lBbnQxMik7CiAKIAltZW1zZXQoYWRzLCAwLCBzaXplb2YoKmFkcykpOwogCkBAIC0zMTksNyArMzIyLDYgQEAKIAlpZiAodHhwb3dlciA+IGFoLT50eHBvd2VyX2xpbWl0KQogCQl0eHBvd2VyID0gYWgtPnR4cG93ZXJfbGltaXQ7CiAKLQl0eHBvd2VyICs9IGFoLT50eHBvd2VyX2luZGV4b2Zmc2V0OwogCWlmICh0eHBvd2VyID4gNjMpCiAJCXR4cG93ZXIgPSA2MzsKIApAQCAtNDA3LDEyICs0MDksMzYgQEAKIHN0YXRpYyB2b2lkIGFyOTAwM19od19zZXQxMW5fYWdncl9maXJzdChzdHJ1Y3QgYXRoX2h3ICphaCwgdm9pZCAqZHMsCiAJCQkJCXUzMiBhZ2dyTGVuKQogeworI2RlZmluZSBGSVJTVF9ERVNDX05ERUxJTVMgNjAKIAlzdHJ1Y3QgYXI5MDAzX3R4YyAqYWRzID0gKHN0cnVjdCBhcjkwMDNfdHhjICopIGRzOwogCiAJYWRzLT5jdGwxMiB8PSAoQVJfSXNBZ2dyIHwgQVJfTW9yZUFnZ3IpOwogCi0JYWRzLT5jdGwxNyAmPSB+QVJfQWdnckxlbjsKLQlhZHMtPmN0bDE3IHw9IFNNKGFnZ3JMZW4sIEFSX0FnZ3JMZW4pOworCWlmIChhaC0+ZW50X21vZGUgJiBBUl9FTlRfT1RQX01QU0QpIHsKKwkJdTMyIGN0bDE3LCBuZGVsaW07CisJCS8qCisJCSAqIEFkZCBkZWxpbWl0ZXIgd2hlbiB1c2luZyBSVFMvQ1RTIHdpdGggYWdncmVnYXRpb24KKwkJICogYW5kIG5vbiBlbnRlcnByaXNlIEFSOTAwMyBjYXJkCisJCSAqLworCQljdGwxNyA9IGFkcy0+Y3RsMTc7CisJCW5kZWxpbSA9IE1TKGN0bDE3LCBBUl9QYWREZWxpbSk7CisKKwkJaWYgKG5kZWxpbSA8IEZJUlNUX0RFU0NfTkRFTElNUykgeworCQkJYWdnckxlbiArPSAoRklSU1RfREVTQ19OREVMSU1TIC0gbmRlbGltKSAqIDQ7CisJCQluZGVsaW0gPSBGSVJTVF9ERVNDX05ERUxJTVM7CisJCX0KKworCQljdGwxNyAmPSB+QVJfQWdnckxlbjsKKwkJY3RsMTcgfD0gU00oYWdnckxlbiwgQVJfQWdnckxlbik7CisKKwkJY3RsMTcgJj0gfkFSX1BhZERlbGltOworCQljdGwxNyB8PSBTTShuZGVsaW0sIEFSX1BhZERlbGltKTsKKworCQlhZHMtPmN0bDE3ID0gY3RsMTc7CisJfSBlbHNlIHsKKwkJYWRzLT5jdGwxNyAmPSB+QVJfQWdnckxlbjsKKwkJYWRzLT5jdGwxNyB8PSBTTShhZ2dyTGVuLCBBUl9BZ2dyTGVuKTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIGFyOTAwM19od19zZXQxMW5fYWdncl9taWRkbGUoc3RydWN0IGF0aF9odyAqYWgsIHZvaWQgKmRzLApAQCAtNTg3LDkgKzYxMyw5IEBACiAJCSAqIHBvc3NpYmx5IGJlIHJldmlld2luZyB0aGUgbGFzdCBzdWJmcmFtZS4gQVJfQ1JDRXJyCiAJCSAqIGlzIHRoZSBDUkMgb2YgdGhlIGFjdHVhbCBkYXRhLgogCQkgKi8KLQkJaWYgKHJ4c3AtPnN0YXR1czExICYgQVJfQ1JDRXJyKSB7CisJCWlmIChyeHNwLT5zdGF0dXMxMSAmIEFSX0NSQ0VycikKIAkJCXJ4cy0+cnNfc3RhdHVzIHw9IEFUSDlLX1JYRVJSX0NSQzsKLQkJfSBlbHNlIGlmIChyeHNwLT5zdGF0dXMxMSAmIEFSX1BIWUVycikgeworCQlpZiAocnhzcC0+c3RhdHVzMTEgJiBBUl9QSFlFcnIpIHsKIAkJCXBoeWVyciA9IE1TKHJ4c3AtPnN0YXR1czExLCBBUl9QSFlFcnJDb2RlKTsKIAkJCS8qCiAJCQkgKiBJZiB3ZSByZWFjaCBhIHBvaW50IGhlcmUgd2hlcmUgQVJfUG9zdERlbGltQ1JDRXJyIGlzCkBAIC02MTIsMTEgKzYzOCwxMiBAQAogCQkJCXJ4cy0+cnNfcGh5ZXJyID0gcGh5ZXJyOwogCQkJfQogCi0JCX0gZWxzZSBpZiAocnhzcC0+c3RhdHVzMTEgJiBBUl9EZWNyeXB0Q1JDRXJyKSB7CisJCX0KKwkJaWYgKHJ4c3AtPnN0YXR1czExICYgQVJfRGVjcnlwdENSQ0VycikKIAkJCXJ4cy0+cnNfc3RhdHVzIHw9IEFUSDlLX1JYRVJSX0RFQ1JZUFQ7Ci0JCX0gZWxzZSBpZiAocnhzcC0+c3RhdHVzMTEgJiBBUl9NaWNoYWVsRXJyKSB7CisJCWlmIChyeHNwLT5zdGF0dXMxMSAmIEFSX01pY2hhZWxFcnIpCiAJCQlyeHMtPnJzX3N0YXR1cyB8PSBBVEg5S19SWEVSUl9NSUM7Ci0JCX0gZWxzZSBpZiAocnhzcC0+c3RhdHVzMTEgJiBBUl9LZXlNaXNzKQorCQlpZiAocnhzcC0+c3RhdHVzMTEgJiBBUl9LZXlNaXNzKQogCQkJcnhzLT5yc19zdGF0dXMgfD0gQVRIOUtfUlhFUlJfREVDUllQVDsKIAl9CiAKQEAgLTYzMSwxMCArNjU4LDEwIEBACiAJbWVtc2V0KCh2b2lkICopIGFoLT50c19yaW5nLCAwLAogCQlhaC0+dHNfc2l6ZSAqIHNpemVvZihzdHJ1Y3QgYXI5MDAzX3R4cykpOwogCi0JYXRoX3ByaW50KGF0aDlrX2h3X2NvbW1vbihhaCksIEFUSF9EQkdfWE1JVCwKLQkJICAiVFMgU3RhcnQgMHgleCBFbmQgMHgleCBWaXJ0ICVwLCBTaXplICVkXG4iLAotCQkgICBhaC0+dHNfcGFkZHJfc3RhcnQsIGFoLT50c19wYWRkcl9lbmQsCi0JCSAgIGFoLT50c19yaW5nLCBhaC0+dHNfc2l6ZSk7CisJYXRoX2RiZyhhdGg5a19od19jb21tb24oYWgpLCBBVEhfREJHX1hNSVQsCisJCSJUUyBTdGFydCAweCV4IEVuZCAweCV4IFZpcnQgJXAsIFNpemUgJWRcbiIsCisJCWFoLT50c19wYWRkcl9zdGFydCwgYWgtPnRzX3BhZGRyX2VuZCwKKwkJYWgtPnRzX3JpbmcsIGFoLT50c19zaXplKTsKIAogCVJFR19XUklURShhaCwgQVJfUV9TVEFUVVNfUklOR19TVEFSVCwgYWgtPnRzX3BhZGRyX3N0YXJ0KTsKIAlSRUdfV1JJVEUoYWgsIEFSX1FfU1RBVFVTX1JJTkdfRU5ELCBhaC0+dHNfcGFkZHJfZW5kKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfbWFjLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX21hYy5oCmluZGV4IDlmMmNlYTcuLjQ1Y2M3ZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfbWFjLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19tYWMuaApAQCAtNjUsNyArNjUsNyBAQAogCXUzMiBzdGF0dXM5OwogCXUzMiBzdGF0dXMxMDsKIAl1MzIgc3RhdHVzMTE7Ci19IF9fcGFja2VkOworfSBfX3BhY2tlZCBfX2FsaWduZWQoNCk7CiAKIC8qIFRyYW5zbWl0IENvbnRyb2wgRGVzY3JpcHRvciAqLwogc3RydWN0IGFyOTAwM190eGMgewpAQCAtOTMsNyArOTMsNyBAQAogCXUzMiBjdGwyMTsgIC8qIERNQSBjb250cm9sIDIxICovCiAJdTMyIGN0bDIyOyAgLyogRE1BIGNvbnRyb2wgMjIgKi8KIAl1MzIgcGFkWzldOyAvKiBwYWQgdG8gY2FjaGUgbGluZSAoMTI4IGJ5dGVzLzMyIGR3b3JkcykgKi8KLX0gX19wYWNrZWQ7Cit9IF9fcGFja2VkIF9fYWxpZ25lZCg0KTsKIAogc3RydWN0IGFyOTAwM190eHMgewogCXUzMiBkc19pbmZvOwpAQCAtMTA1LDcgKzEwNSw3IEBACiAJdTMyIHN0YXR1czY7CiAJdTMyIHN0YXR1czc7CiAJdTMyIHN0YXR1czg7Ci19IF9fcGFja2VkOworfSBfX3BhY2tlZCBfX2FsaWduZWQoNCk7CiAKIHZvaWQgYXI5MDAzX2h3X2F0dGFjaF9tYWNfb3BzKHN0cnVjdCBhdGhfaHcgKmh3KTsKIHZvaWQgYXRoOWtfaHdfc2V0X3J4X2J1ZnNpemUoc3RydWN0IGF0aF9odyAqYWgsIHUxNiBidWZfc2l6ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX3BhcHJkLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX3BhcHJkLmMKaW5kZXggNzE2ZGI0MS4uMzU2ZDJmZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfcGFwcmQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX3BhcHJkLmMKQEAgLTE5LDQ1ICsxOSwxMjQgQEAKIAogdm9pZCBhcjkwMDNfcGFwcmRfZW5hYmxlKHN0cnVjdCBhdGhfaHcgKmFoLCBib29sIHZhbCkKIHsKKwlzdHJ1Y3QgYXRoX3JlZ3VsYXRvcnkgKnJlZ3VsYXRvcnkgPSBhdGg5a19od19yZWd1bGF0b3J5KGFoKTsKKwlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiA9IGFoLT5jdXJjaGFuOworCisJaWYgKHZhbCkgeworCQlhaC0+cGFwcmRfdGFibGVfd3JpdGVfZG9uZSA9IHRydWU7CisKKwkJYWgtPmVlcF9vcHMtPnNldF90eHBvd2VyKGFoLCBjaGFuLAorCQkJCWF0aDlrX3JlZ2RfZ2V0X2N0bChyZWd1bGF0b3J5LCBjaGFuKSwKKwkJCQljaGFuLT5jaGFuLT5tYXhfYW50ZW5uYV9nYWluICogMiwKKwkJCQljaGFuLT5jaGFuLT5tYXhfcG93ZXIgKiAyLAorCQkJCW1pbigodTMyKSBNQVhfUkFURV9QT1dFUiwKKwkJCQkodTMyKSByZWd1bGF0b3J5LT5wb3dlcl9saW1pdCksIGZhbHNlKTsKKwl9CisKIAlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfUEFQUkRfQ1RSTDBfQjAsCiAJCSAgICAgIEFSX1BIWV9QQVBSRF9DVFJMMF9QQVBSRF9FTkFCTEUsICEhdmFsKTsKLQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfUEFQUkRfQ1RSTDBfQjEsCi0JCSAgICAgIEFSX1BIWV9QQVBSRF9DVFJMMF9QQVBSRF9FTkFCTEUsICEhdmFsKTsKLQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfUEFQUkRfQ1RSTDBfQjIsCi0JCSAgICAgIEFSX1BIWV9QQVBSRF9DVFJMMF9QQVBSRF9FTkFCTEUsICEhdmFsKTsKKwlpZiAoYWgtPmNhcHMudHhfY2hhaW5tYXNrICYgQklUKDEpKQorCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfUEFQUkRfQ1RSTDBfQjEsCisJCQkgICAgICBBUl9QSFlfUEFQUkRfQ1RSTDBfUEFQUkRfRU5BQkxFLCAhIXZhbCk7CisJaWYgKGFoLT5jYXBzLnR4X2NoYWlubWFzayAmIEJJVCgyKSkKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1BBUFJEX0NUUkwwX0IyLAorCQkJICAgICAgQVJfUEhZX1BBUFJEX0NUUkwwX1BBUFJEX0VOQUJMRSwgISF2YWwpOwogfQogRVhQT1JUX1NZTUJPTChhcjkwMDNfcGFwcmRfZW5hYmxlKTsKIAotc3RhdGljIHZvaWQgYXI5MDAzX3BhcHJkX3NldHVwX3NpbmdsZV90YWJsZShzdHJ1Y3QgYXRoX2h3ICphaCkKK3N0YXRpYyBpbnQgYXI5MDAzX2dldF90cmFpbmluZ19wb3dlcl8yZyhzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAlzdHJ1Y3QgYXI5MzAwX2VlcHJvbSAqZWVwID0gJmFoLT5lZXByb20uYXI5MzAwX2VlcDsKLQlzdHJ1Y3QgYXI5MzAwX21vZGFsX2VlcF9oZWFkZXIgKmhkcjsKLQljb25zdCB1MzIgY3RybDBbM10gPSB7CisJc3RydWN0IGFyOTMwMF9tb2RhbF9lZXBfaGVhZGVyICpoZHIgPSAmZWVwLT5tb2RhbEhlYWRlcjJHOworCXVuc2lnbmVkIGludCBwb3dlciwgc2NhbGUsIGRlbHRhOworCisJc2NhbGUgPSBNUyhsZTMyX3RvX2NwdShoZHItPnBhcGRSYXRlTWFza0h0MjApLCBBUjkzMDBfUEFQUkRfU0NBTEVfMSk7CisJcG93ZXIgPSBSRUdfUkVBRF9GSUVMRChhaCwgQVJfUEhZX1BPV0VSVFhfUkFURTUsCisJCQkgICAgICAgQVJfUEhZX1BPV0VSVFhfUkFURTVfUE9XRVJUWEhUMjBfMCk7CisKKwlkZWx0YSA9IGFicygoaW50KSBhaC0+cGFwcmRfdGFyZ2V0X3Bvd2VyIC0gKGludCkgcG93ZXIpOworCWlmIChkZWx0YSA+IHNjYWxlKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoZGVsdGEgPCA0KQorCQlwb3dlciAtPSA0IC0gZGVsdGE7CisKKwlyZXR1cm4gcG93ZXI7Cit9CisKK3N0YXRpYyBpbnQgYXI5MDAzX2dldF90cmFpbmluZ19wb3dlcl81ZyhzdHJ1Y3QgYXRoX2h3ICphaCkKK3sKKwlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKGFoKTsKKwlzdHJ1Y3QgYXI5MzAwX2VlcHJvbSAqZWVwID0gJmFoLT5lZXByb20uYXI5MzAwX2VlcDsKKwlzdHJ1Y3QgYXI5MzAwX21vZGFsX2VlcF9oZWFkZXIgKmhkciA9ICZlZXAtPm1vZGFsSGVhZGVyNUc7CisJc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4gPSBhaC0+Y3VyY2hhbjsKKwl1bnNpZ25lZCBpbnQgcG93ZXIsIHNjYWxlLCBkZWx0YTsKKworCWlmIChjaGFuLT5jaGFubmVsID49IDU3MDApCisJCXNjYWxlID0gTVMobGUzMl90b19jcHUoaGRyLT5wYXBkUmF0ZU1hc2tIdDIwKSwKKwkJCSAgIEFSOTMwMF9QQVBSRF9TQ0FMRV8xKTsKKwllbHNlIGlmIChjaGFuLT5jaGFubmVsID49IDU0MDApCisJCXNjYWxlID0gTVMobGUzMl90b19jcHUoaGRyLT5wYXBkUmF0ZU1hc2tIdDQwKSwKKwkJCSAgIEFSOTMwMF9QQVBSRF9TQ0FMRV8yKTsKKwllbHNlCisJCXNjYWxlID0gTVMobGUzMl90b19jcHUoaGRyLT5wYXBkUmF0ZU1hc2tIdDQwKSwKKwkJCSAgIEFSOTMwMF9QQVBSRF9TQ0FMRV8xKTsKKworCWlmIChJU19DSEFOX0hUNDAoY2hhbikpCisJCXBvd2VyID0gUkVHX1JFQURfRklFTEQoYWgsIEFSX1BIWV9QT1dFUlRYX1JBVEU4LAorCQkJQVJfUEhZX1BPV0VSVFhfUkFURThfUE9XRVJUWEhUNDBfNSk7CisJZWxzZQorCQlwb3dlciA9IFJFR19SRUFEX0ZJRUxEKGFoLCBBUl9QSFlfUE9XRVJUWF9SQVRFNiwKKwkJCUFSX1BIWV9QT1dFUlRYX1JBVEU2X1BPV0VSVFhIVDIwXzUpOworCisJcG93ZXIgKz0gc2NhbGU7CisJZGVsdGEgPSBhYnMoKGludCkgYWgtPnBhcHJkX3RhcmdldF9wb3dlciAtIChpbnQpIHBvd2VyKTsKKwlpZiAoZGVsdGEgPiBzY2FsZSkKKwkJcmV0dXJuIC0xOworCisJcG93ZXIgKz0gMiAqIGdldF9zdHJlYW1zKGNvbW1vbi0+dHhfY2hhaW5tYXNrKTsKKwlyZXR1cm4gcG93ZXI7Cit9CisKK3N0YXRpYyBpbnQgYXI5MDAzX3BhcHJkX3NldHVwX3NpbmdsZV90YWJsZShzdHJ1Y3QgYXRoX2h3ICphaCkKK3sKKwlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKGFoKTsKKwlzdGF0aWMgY29uc3QgdTMyIGN0cmwwWzNdID0gewogCQlBUl9QSFlfUEFQUkRfQ1RSTDBfQjAsCiAJCUFSX1BIWV9QQVBSRF9DVFJMMF9CMSwKIAkJQVJfUEhZX1BBUFJEX0NUUkwwX0IyCiAJfTsKLQljb25zdCB1MzIgY3RybDFbM10gPSB7CisJc3RhdGljIGNvbnN0IHUzMiBjdHJsMVszXSA9IHsKIAkJQVJfUEhZX1BBUFJEX0NUUkwxX0IwLAogCQlBUl9QSFlfUEFQUkRfQ1RSTDFfQjEsCiAJCUFSX1BIWV9QQVBSRF9DVFJMMV9CMgogCX07Ci0JdTMyIGFtX21hc2ssIGh0NDBfbWFzazsKKwlpbnQgdHJhaW5pbmdfcG93ZXI7CiAJaW50IGk7CiAKLQlpZiAoYWgtPmN1cmNoYW4gJiYgSVNfQ0hBTl81R0haKGFoLT5jdXJjaGFuKSkKLQkJaGRyID0gJmVlcC0+bW9kYWxIZWFkZXI1RzsKKwlpZiAoSVNfQ0hBTl8yR0haKGFoLT5jdXJjaGFuKSkKKwkJdHJhaW5pbmdfcG93ZXIgPSBhcjkwMDNfZ2V0X3RyYWluaW5nX3Bvd2VyXzJnKGFoKTsKIAllbHNlCi0JCWhkciA9ICZlZXAtPm1vZGFsSGVhZGVyMkc7CisJCXRyYWluaW5nX3Bvd2VyID0gYXI5MDAzX2dldF90cmFpbmluZ19wb3dlcl81ZyhhaCk7CiAKLQlhbV9tYXNrID0gbGUzMl90b19jcHUoaGRyLT5wYXBkUmF0ZU1hc2tIdDIwKTsKLQlodDQwX21hc2sgPSBsZTMyX3RvX2NwdShoZHItPnBhcGRSYXRlTWFza0h0NDApOworCWlmICh0cmFpbmluZ19wb3dlciA8IDApIHsKKwkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAorCQkJIlBBUFJEIHRhcmdldCBwb3dlciBkZWx0YSBvdXQgb2YgcmFuZ2UiKTsKKwkJcmV0dXJuIC1FUkFOR0U7CisJfQorCWFoLT5wYXByZF90cmFpbmluZ19wb3dlciA9IHRyYWluaW5nX3Bvd2VyOworCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwKKwkJIlRyYWluaW5nIHBvd2VyOiAlZCwgVGFyZ2V0IHBvd2VyOiAlZFxuIiwKKwkJYWgtPnBhcHJkX3RyYWluaW5nX3Bvd2VyLCBhaC0+cGFwcmRfdGFyZ2V0X3Bvd2VyKTsKIAotCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9QQVBSRF9BTTJBTSwgQVJfUEhZX1BBUFJEX0FNMkFNX01BU0ssIGFtX21hc2spOwotCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9QQVBSRF9BTTJQTSwgQVJfUEhZX1BBUFJEX0FNMlBNX01BU0ssIGFtX21hc2spOwotCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9QQVBSRF9IVDQwLCBBUl9QSFlfUEFQUkRfSFQ0MF9NQVNLLCBodDQwX21hc2spOworCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9QQVBSRF9BTTJBTSwgQVJfUEhZX1BBUFJEX0FNMkFNX01BU0ssCisJCSAgICAgIGFoLT5wYXByZF9yYXRlbWFzayk7CisJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1BBUFJEX0FNMlBNLCBBUl9QSFlfUEFQUkRfQU0yUE1fTUFTSywKKwkJICAgICAgYWgtPnBhcHJkX3JhdGVtYXNrKTsKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfUEFQUkRfSFQ0MCwgQVJfUEhZX1BBUFJEX0hUNDBfTUFTSywKKwkJICAgICAgYWgtPnBhcHJkX3JhdGVtYXNrX2h0NDApOwogCi0JZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBhaC0+Y2Fwcy5tYXhfdHhjaGFpbnM7IGkrKykgewogCQlSRUdfUk1XX0ZJRUxEKGFoLCBjdHJsMFtpXSwKIAkJCSAgICAgIEFSX1BIWV9QQVBSRF9DVFJMMF9VU0VfU0lOR0xFX1RBQkxFX01BU0ssIDEpOwogCQlSRUdfUk1XX0ZJRUxEKGFoLCBjdHJsMVtpXSwKQEAgLTEwMiw4ICsxODEsMTQgQEAKIAkJICAgICAgQVJfUEhZX1BBUFJEX1RSQUlORVJfQ05UTDNfQ0ZfUEFQUkRfTlVNX0NPUlJfU1RBR0VTLCA3KTsKIAlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfUEFQUkRfVFJBSU5FUl9DTlRMMywKIAkJICAgICAgQVJfUEhZX1BBUFJEX1RSQUlORVJfQ05UTDNfQ0ZfUEFQUkRfTUlOX0xPT1BCQUNLX0RFTCwgMSk7Ci0JUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1BBUFJEX1RSQUlORVJfQ05UTDMsCi0JCSAgICAgIEFSX1BIWV9QQVBSRF9UUkFJTkVSX0NOVEwzX0NGX1BBUFJEX1FVSUNLX0RST1AsIC02KTsKKwlpZiAoQVJfU1JFVl85NDg1KGFoKSkKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1BBUFJEX1RSQUlORVJfQ05UTDMsCisJCQkgICAgICBBUl9QSFlfUEFQUkRfVFJBSU5FUl9DTlRMM19DRl9QQVBSRF9RVUlDS19EUk9QLAorCQkJICAgICAgLTMpOworCWVsc2UKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1BBUFJEX1RSQUlORVJfQ05UTDMsCisJCQkgICAgICBBUl9QSFlfUEFQUkRfVFJBSU5FUl9DTlRMM19DRl9QQVBSRF9RVUlDS19EUk9QLAorCQkJICAgICAgLTYpOwogCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9QQVBSRF9UUkFJTkVSX0NOVEwzLAogCQkgICAgICBBUl9QSFlfUEFQUkRfVFJBSU5FUl9DTlRMM19DRl9QQVBSRF9BRENfREVTSVJFRF9TSVpFLAogCQkgICAgICAtMTUpOwpAQCAtMTMyLDYgKzIxNyw3IEBACiAJCSAgICAgIEFSX1BIWV9QQVBSRF9QUkVfUE9TVF9TQ0FMSU5HLCAxODU3MDYpOwogCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9QQVBSRF9QUkVfUE9TVF9TQ0FMRV83X0IwLAogCQkgICAgICBBUl9QSFlfUEFQUkRfUFJFX1BPU1RfU0NBTElORywgMTc1NDg3KTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgYXI5MDAzX3BhcHJkX2dldF9nYWluX3RhYmxlKHN0cnVjdCBhdGhfaHcgKmFoKQpAQCAtNTg2LDE1ICs2NzIsMTAgQEAKIHsKIAl1MzIgKnBhcHJkX3RhYmxlX3ZhbCA9IGNhbGRhdGEtPnBhX3RhYmxlW2NoYWluXTsKIAl1MzIgc21hbGxfc2lnbmFsX2dhaW4gPSBjYWxkYXRhLT5zbWFsbF9zaWduYWxfZ2FpbltjaGFpbl07Ci0JdTMyIHRyYWluaW5nX3Bvd2VyOworCXUzMiB0cmFpbmluZ19wb3dlciA9IGFoLT5wYXByZF90cmFpbmluZ19wb3dlcjsKIAl1MzIgcmVnID0gMDsKIAlpbnQgaTsKIAotCXRyYWluaW5nX3Bvd2VyID0KLQkgICAgUkVHX1JFQURfRklFTEQoYWgsIEFSX1BIWV9QT1dFUlRYX1JBVEU1LAotCQkJICAgQVJfUEhZX1BPV0VSVFhfUkFURTVfUE9XRVJUWEhUMjBfMCk7Ci0JdHJhaW5pbmdfcG93ZXIgLT0gNDsKLQogCWlmIChjaGFpbiA9PSAwKQogCQlyZWcgPSBBUl9QSFlfUEFQUkRfTUVNX1RBQl9CMDsKIAllbHNlIGlmIChjaGFpbiA9PSAxKQpAQCAtNjIwLDI2ICs3MDEsMjIgQEAKIAkJICAgICAgQVJfUEhZX1BBUFJEX0NUUkwxX1BBUFJEX1BPV0VSX0FUX0FNMkFNX0NBTCwKIAkJICAgICAgdHJhaW5pbmdfcG93ZXIpOwogCi0JUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1BBUFJEX0NUUkwxX0IxLAotCQkgICAgICBBUl9QSFlfUEFQUkRfQ1RSTDFfUEFQUkRfUE9XRVJfQVRfQU0yQU1fQ0FMLAotCQkgICAgICB0cmFpbmluZ19wb3dlcik7CisJaWYgKGFoLT5jYXBzLnR4X2NoYWlubWFzayAmIEJJVCgxKSkKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1BBUFJEX0NUUkwxX0IxLAorCQkJICAgICAgQVJfUEhZX1BBUFJEX0NUUkwxX1BBUFJEX1BPV0VSX0FUX0FNMkFNX0NBTCwKKwkJCSAgICAgIHRyYWluaW5nX3Bvd2VyKTsKIAotCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9QQVBSRF9DVFJMMV9CMiwKLQkJICAgICAgQVJfUEhZX1BBUFJEX0NUUkwxX1BBUFJEX1BPV0VSX0FUX0FNMkFNX0NBTCwKLQkJICAgICAgdHJhaW5pbmdfcG93ZXIpOworCWlmIChhaC0+Y2Fwcy50eF9jaGFpbm1hc2sgJiBCSVQoMikpCisJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9QQVBSRF9DVFJMMV9CMiwKKwkJCSAgICAgIEFSX1BIWV9QQVBSRF9DVFJMMV9QQVBSRF9QT1dFUl9BVF9BTTJBTV9DQUwsCisJCQkgICAgICB0cmFpbmluZ19wb3dlcik7CiB9CiBFWFBPUlRfU1lNQk9MKGFyOTAwM19wYXByZF9wb3B1bGF0ZV9zaW5nbGVfdGFibGUpOwogCiBpbnQgYXI5MDAzX3BhcHJkX3NldHVwX2dhaW5fdGFibGUoc3RydWN0IGF0aF9odyAqYWgsIGludCBjaGFpbikKIHsKLQogCXVuc2lnbmVkIGludCBpLCBkZXNpcmVkX2dhaW4sIGdhaW5faW5kZXg7Ci0JdW5zaWduZWQgaW50IHRyYWluX3Bvd2VyOwotCi0JdHJhaW5fcG93ZXIgPSBSRUdfUkVBRF9GSUVMRChhaCwgQVJfUEhZX1BPV0VSVFhfUkFURTUsCi0JCQkJICAgICBBUl9QSFlfUE9XRVJUWF9SQVRFNV9QT1dFUlRYSFQyMF8wKTsKLQotCXRyYWluX3Bvd2VyID0gdHJhaW5fcG93ZXIgLSA0OworCXVuc2lnbmVkIGludCB0cmFpbl9wb3dlciA9IGFoLT5wYXByZF90cmFpbmluZ19wb3dlcjsKIAogCWRlc2lyZWRfZ2FpbiA9IGFyOTAwM19nZXRfZGVzaXJlZF9nYWluKGFoLCBjaGFpbiwgdHJhaW5fcG93ZXIpOwogCkBAIC03MDUsNyArNzgyLDEyIEBACiAKIGludCBhcjkwMDNfcGFwcmRfaW5pdF90YWJsZShzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKLQlhcjkwMDNfcGFwcmRfc2V0dXBfc2luZ2xlX3RhYmxlKGFoKTsKKwlpbnQgcmV0OworCisJcmV0ID0gYXI5MDAzX3BhcHJkX3NldHVwX3NpbmdsZV90YWJsZShhaCk7CisJaWYgKHJldCA8IDApCisJICAgIHJldHVybiByZXQ7CisKIAlhcjkwMDNfcGFwcmRfZ2V0X2dhaW5fdGFibGUoYWgpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19waHkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfcGh5LmMKaW5kZXggNjY5Yjc3Ny4uOGQ2MGY0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19waHkuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX3BoeS5jCkBAIC03NSw3ICs3NSwxMCBAQAogCWZyZXEgPSBjZW50ZXJzLnN5bnRoX2NlbnRlcjsKIAogCWlmIChmcmVxIDwgNDgwMCkgeyAgICAgLyogMiBHSHosIGZyYWN0aW9uYWwgbW9kZSAqLwotCQljaGFubmVsU2VsID0gQ0hBTlNFTF8yRyhmcmVxKTsKKwkJaWYgKEFSX1NSRVZfOTQ4NShhaCkpCisJCQljaGFubmVsU2VsID0gQ0hBTlNFTF8yR185NDg1KGZyZXEpOworCQllbHNlCisJCQljaGFubmVsU2VsID0gQ0hBTlNFTF8yRyhmcmVxKTsKIAkJLyogU2V0IHRvIDJHIG1vZGUgKi8KIAkJYk1vZGUgPSAxOwogCX0gZWxzZSB7CkBAIC0xMjgsMjQgKzEzMSw1MyBAQAogc3RhdGljIHZvaWQgYXI5MDAzX2h3X3NwdXJfbWl0aWdhdGVfbXJjX2NjayhzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCQkJICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQogewotCXUzMiBzcHVyX2ZyZXFbNF0gPSB7IDI0MjAsIDI0NDAsIDI0NjQsIDI0ODAgfTsKKwlzdGF0aWMgY29uc3QgdTMyIHNwdXJfZnJlcVs0XSA9IHsgMjQyMCwgMjQ0MCwgMjQ2NCwgMjQ4MCB9OwogCWludCBjdXJfYmJfc3B1ciwgbmVnYXRpdmUgPSAwLCBjY2tfc3B1cl9mcmVxOwogCWludCBpOworCWludCByYW5nZSwgbWF4X3NwdXJfY250cywgc3ludGhfZnJlcTsKKwl1OCAqc3B1cl9mYmluX3B0ciA9IE5VTEw7CiAKIAkvKgogCSAqIE5lZWQgdG8gdmVyaWZ5IHJhbmdlICsvLSAxMCBNSHogaW4gY29udHJvbCBjaGFubmVsLCBvdGhlcndpc2Ugc3B1cgogCSAqIGlzIG91dC1vZi1iYW5kIGFuZCBjYW4gYmUgaWdub3JlZC4KIAkgKi8KIAotCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwlpZiAoQVJfU1JFVl85NDg1KGFoKSkgeworCQlzcHVyX2ZiaW5fcHRyID0gYXI5MDAzX2dldF9zcHVyX2NoYW5fcHRyKGFoLAorCQkJCQkJCSBJU19DSEFOXzJHSFooY2hhbikpOworCQlpZiAoc3B1cl9mYmluX3B0clswXSA9PSAwKSAvKiBObyBzcHVyICovCisJCQlyZXR1cm47CisJCW1heF9zcHVyX2NudHMgPSA1OworCQlpZiAoSVNfQ0hBTl9IVDQwKGNoYW4pKSB7CisJCQlyYW5nZSA9IDE5OworCQkJaWYgKFJFR19SRUFEX0ZJRUxEKGFoLCBBUl9QSFlfR0VOX0NUUkwsCisJCQkJCSAgIEFSX1BIWV9HQ19EWU4yMDQwX1BSSV9DSCkgPT0gMCkKKwkJCQlzeW50aF9mcmVxID0gY2hhbi0+Y2hhbm5lbCArIDEwOworCQkJZWxzZQorCQkJCXN5bnRoX2ZyZXEgPSBjaGFuLT5jaGFubmVsIC0gMTA7CisJCX0gZWxzZSB7CisJCQlyYW5nZSA9IDEwOworCQkJc3ludGhfZnJlcSA9IGNoYW4tPmNoYW5uZWw7CisJCX0KKwl9IGVsc2UgeworCQlyYW5nZSA9IDEwOworCQltYXhfc3B1cl9jbnRzID0gNDsKKwkJc3ludGhfZnJlcSA9IGNoYW4tPmNoYW5uZWw7CisJfQorCisJZm9yIChpID0gMDsgaSA8IG1heF9zcHVyX2NudHM7IGkrKykgewogCQluZWdhdGl2ZSA9IDA7Ci0JCWN1cl9iYl9zcHVyID0gc3B1cl9mcmVxW2ldIC0gY2hhbi0+Y2hhbm5lbDsKKwkJaWYgKEFSX1NSRVZfOTQ4NShhaCkpCisJCQljdXJfYmJfc3B1ciA9IEZCSU4yRlJFUShzcHVyX2ZiaW5fcHRyW2ldLAorCQkJCQlJU19DSEFOXzJHSFooY2hhbikpIC0gc3ludGhfZnJlcTsKKwkJZWxzZQorCQkJY3VyX2JiX3NwdXIgPSBzcHVyX2ZyZXFbaV0gLSBzeW50aF9mcmVxOwogCiAJCWlmIChjdXJfYmJfc3B1ciA8IDApIHsKIAkJCW5lZ2F0aXZlID0gMTsKIAkJCWN1cl9iYl9zcHVyID0gLWN1cl9iYl9zcHVyOwogCQl9Ci0JCWlmIChjdXJfYmJfc3B1ciA8IDEwKSB7CisJCWlmIChjdXJfYmJfc3B1ciA8IHJhbmdlKSB7CiAJCQljY2tfc3B1cl9mcmVxID0gKGludCkoKGN1cl9iYl9zcHVyIDw8IDE5KSAvIDExKTsKIAogCQkJaWYgKG5lZ2F0aXZlID09IDEpCkBAIC00ODcsNyArNTE5LDExIEBACiAJCWJyZWFrOwogCX0KIAotCVJFR19XUklURShhaCwgQVJfU0VMRkdFTl9NQVNLLCB0eCk7CisJaWYgKChhaC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX0FQTSkgJiYgKHR4ID09IDB4NykpCisJCVJFR19XUklURShhaCwgQVJfU0VMRkdFTl9NQVNLLCAweDMpOworCWVsc2UKKwkJUkVHX1dSSVRFKGFoLCBBUl9TRUxGR0VOX01BU0ssIHR4KTsKKwogCWlmICh0eCA9PSAweDUpIHsKIAkJUkVHX1NFVF9CSVQoYWgsIEFSX1BIWV9BTkFMT0dfU1dBUCwKIAkJCSAgICBBUl9QSFlfU1dBUF9BTFRfQ0hBSU4pOwpAQCAtNTQyLDEwICs1NzgsNyBAQAogCQl1MzIgcmVnID0gSU5JX1JBKGluaUFyciwgaSwgMCk7CiAJCXUzMiB2YWwgPSBJTklfUkEoaW5pQXJyLCBpLCBjb2x1bW4pOwogCi0JCWlmIChyZWcgPj0gMHgxNjAwMCAmJiByZWcgPCAweDE3MDAwKQotCQkJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JlZ3dyaXRlKGFoLCByZWcsIHZhbCk7Ci0JCWVsc2UKLQkJCVJFR19XUklURShhaCwgcmVnLCB2YWwpOworCQlSRUdfV1JJVEUoYWgsIHJlZywgdmFsKTsKIAogCQlET19ERUxBWShyZWdXcml0ZXMpOwogCX0KQEAgLTYxNCw3ICs2NDcsNyBAQAogCQkJCSBjaGFubmVsLT5tYXhfYW50ZW5uYV9nYWluICogMiwKIAkJCQkgY2hhbm5lbC0+bWF4X3Bvd2VyICogMiwKIAkJCQkgbWluKCh1MzIpIE1BWF9SQVRFX1BPV0VSLAotCQkJCSAodTMyKSByZWd1bGF0b3J5LT5wb3dlcl9saW1pdCkpOworCQkJCSAodTMyKSByZWd1bGF0b3J5LT5wb3dlcl9saW1pdCksIGZhbHNlKTsKIAogCXJldHVybiAwOwogfQpAQCAtNzEyLDI4ICs3NDUsNiBAQAogCVJFR19XUklURShhaCwgQVJfUEhZX1JGQlVTX1JFUSwgMCk7CiB9CiAKLS8qCi0gKiBTZXQgdGhlIGludGVycnVwdCBhbmQgR1BJTyB2YWx1ZXMgc28gdGhlIElTUiBjYW4gZGlzYWJsZSBSRgotICogb24gYSBzd2l0Y2ggc2lnbmFsLiAgQXNzdW1lcyBHUElPIHBvcnQgYW5kIGludGVycnVwdCBwb2xhcml0eQotICogYXJlIHNldCBwcmlvciB0byBjYWxsLgotICovCi1zdGF0aWMgdm9pZCBhcjkwMDNfaHdfZW5hYmxlX3Jma2lsbChzdHJ1Y3QgYXRoX2h3ICphaCkKLXsKLQkvKiBDb25uZWN0IHJmc2lsZW50X2JiX2wgdG8gYmFzZWJhbmQgKi8KLQlSRUdfU0VUX0JJVChhaCwgQVJfR1BJT19JTlBVVF9FTl9WQUwsCi0JCSAgICBBUl9HUElPX0lOUFVUX0VOX1ZBTF9SRlNJTEVOVF9CQik7Ci0JLyogU2V0IGlucHV0IG11eCBmb3IgcmZzaWxlbnRfYmJfbCB0byBHUElPICMwICovCi0JUkVHX0NMUl9CSVQoYWgsIEFSX0dQSU9fSU5QVVRfTVVYMiwKLQkJICAgIEFSX0dQSU9fSU5QVVRfTVVYMl9SRlNJTEVOVCk7Ci0KLQkvKgotCSAqIENvbmZpZ3VyZSB0aGUgZGVzaXJlZCBHUElPIHBvcnQgZm9yIGlucHV0IGFuZAotCSAqIGVuYWJsZSBiYXNlYmFuZCByZiBzaWxlbmNlLgotCSAqLwotCWF0aDlrX2h3X2NmZ19ncGlvX2lucHV0KGFoLCBhaC0+cmZraWxsX2dwaW8pOwotCVJFR19TRVRfQklUKGFoLCBBUl9QSFlfVEVTVCwgUkZTSUxFTlRfQkIpOwotfQotCiBzdGF0aWMgdm9pZCBhcjkwMDNfaHdfc2V0X2RpdmVyc2l0eShzdHJ1Y3QgYXRoX2h3ICphaCwgYm9vbCB2YWx1ZSkKIHsKIAl1MzIgdiA9IFJFR19SRUFEKGFoLCBBUl9QSFlfQ0NLX0RFVEVDVCk7CkBAIC04MjAsMTIgKzgzMSwxMiBAQAogCQkJCSAgICBBUl9QSFlfU0ZDT1JSX0xPV19VU0VfU0VMRl9DT1JSX0xPVyk7CiAKIAkJaWYgKCFvbiAhPSBhbmlTdGF0ZS0+b2ZkbVdlYWtTaWdEZXRlY3RPZmYpIHsKLQkJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQU5JLAotCQkJCSAgIioqIGNoICVkOiBvZmRtIHdlYWsgc2lnbmFsOiAlcz0+JXNcbiIsCi0JCQkJICBjaGFuLT5jaGFubmVsLAotCQkJCSAgIWFuaVN0YXRlLT5vZmRtV2Vha1NpZ0RldGVjdE9mZiA/Ci0JCQkJCSJvbiIgOiAib2ZmIiwKLQkJCQkgIG9uID8gIm9uIiA6ICJvZmYiKTsKKwkJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0FOSSwKKwkJCQkiKiogY2ggJWQ6IG9mZG0gd2VhayBzaWduYWw6ICVzPT4lc1xuIiwKKwkJCQljaGFuLT5jaGFubmVsLAorCQkJCSFhbmlTdGF0ZS0+b2ZkbVdlYWtTaWdEZXRlY3RPZmYgPworCQkJCSJvbiIgOiAib2ZmIiwKKwkJCQlvbiA/ICJvbiIgOiAib2ZmIik7CiAJCQlpZiAob24pCiAJCQkJYWgtPnN0YXRzLmFzdF9hbmlfb2ZkbW9uKys7CiAJCQllbHNlCkBAIC04MzgsMTEgKzg0OSw5IEBACiAJCXUzMiBsZXZlbCA9IHBhcmFtOwogCiAJCWlmIChsZXZlbCA+PSBBUlJBWV9TSVpFKGZpcnN0ZXBfdGFibGUpKSB7Ci0JCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0FOSSwKLQkJCQkgICJBVEg5S19BTklfRklSU1RFUF9MRVZFTDogbGV2ZWwgIgotCQkJCSAgIm91dCBvZiByYW5nZSAoJXUgPiAldSlcbiIsCi0JCQkJICBsZXZlbCwKLQkJCQkgICh1bnNpZ25lZCkgQVJSQVlfU0laRShmaXJzdGVwX3RhYmxlKSk7CisJCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19BTkksCisJCQkJIkFUSDlLX0FOSV9GSVJTVEVQX0xFVkVMOiBsZXZlbCBvdXQgb2YgcmFuZ2UgKCV1ID4gJXp1KVxuIiwKKwkJCQlsZXZlbCwgQVJSQVlfU0laRShmaXJzdGVwX3RhYmxlKSk7CiAJCQlyZXR1cm4gZmFsc2U7CiAJCX0KIApAQCAtODc3LDI0ICs4ODYsMjIgQEAKIAkJCSAgICAgIEFSX1BIWV9GSU5EX1NJR19MT1dfRklSU1RFUF9MT1csIHZhbHVlMik7CiAKIAkJaWYgKGxldmVsICE9IGFuaVN0YXRlLT5maXJzdGVwTGV2ZWwpIHsKLQkJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQU5JLAotCQkJCSAgIioqIGNoICVkOiBsZXZlbCAlZD0+JWRbZGVmOiVkXSAiCi0JCQkJICAiZmlyc3RlcFtsZXZlbF09JWQgaW5pPSVkXG4iLAotCQkJCSAgY2hhbi0+Y2hhbm5lbCwKLQkJCQkgIGFuaVN0YXRlLT5maXJzdGVwTGV2ZWwsCi0JCQkJICBsZXZlbCwKLQkJCQkgIEFUSDlLX0FOSV9GSVJTVEVQX0xWTF9ORVcsCi0JCQkJICB2YWx1ZSwKLQkJCQkgIGFuaVN0YXRlLT5pbmlEZWYuZmlyc3RlcCk7Ci0JCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0FOSSwKLQkJCQkgICIqKiBjaCAlZDogbGV2ZWwgJWQ9PiVkW2RlZjolZF0gIgotCQkJCSAgImZpcnN0ZXBfbG93W2xldmVsXT0lZCBpbmk9JWRcbiIsCi0JCQkJICBjaGFuLT5jaGFubmVsLAotCQkJCSAgYW5pU3RhdGUtPmZpcnN0ZXBMZXZlbCwKLQkJCQkgIGxldmVsLAotCQkJCSAgQVRIOUtfQU5JX0ZJUlNURVBfTFZMX05FVywKLQkJCQkgIHZhbHVlMiwKLQkJCQkgIGFuaVN0YXRlLT5pbmlEZWYuZmlyc3RlcExvdyk7CisJCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19BTkksCisJCQkJIioqIGNoICVkOiBsZXZlbCAlZD0+JWRbZGVmOiVkXSBmaXJzdGVwW2xldmVsXT0lZCBpbmk9JWRcbiIsCisJCQkJY2hhbi0+Y2hhbm5lbCwKKwkJCQlhbmlTdGF0ZS0+Zmlyc3RlcExldmVsLAorCQkJCWxldmVsLAorCQkJCUFUSDlLX0FOSV9GSVJTVEVQX0xWTF9ORVcsCisJCQkJdmFsdWUsCisJCQkJYW5pU3RhdGUtPmluaURlZi5maXJzdGVwKTsKKwkJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0FOSSwKKwkJCQkiKiogY2ggJWQ6IGxldmVsICVkPT4lZFtkZWY6JWRdIGZpcnN0ZXBfbG93W2xldmVsXT0lZCBpbmk9JWRcbiIsCisJCQkJY2hhbi0+Y2hhbm5lbCwKKwkJCQlhbmlTdGF0ZS0+Zmlyc3RlcExldmVsLAorCQkJCWxldmVsLAorCQkJCUFUSDlLX0FOSV9GSVJTVEVQX0xWTF9ORVcsCisJCQkJdmFsdWUyLAorCQkJCWFuaVN0YXRlLT5pbmlEZWYuZmlyc3RlcExvdyk7CiAJCQlpZiAobGV2ZWwgPiBhbmlTdGF0ZS0+Zmlyc3RlcExldmVsKQogCQkJCWFoLT5zdGF0cy5hc3RfYW5pX3N0ZXB1cCsrOwogCQkJZWxzZSBpZiAobGV2ZWwgPCBhbmlTdGF0ZS0+Zmlyc3RlcExldmVsKQpAQCAtOTA3LDExICs5MTQsOSBAQAogCQl1MzIgbGV2ZWwgPSBwYXJhbTsKIAogCQlpZiAobGV2ZWwgPj0gQVJSQVlfU0laRShjeWNwd3JUaHIxX3RhYmxlKSkgewotCQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19BTkksCi0JCQkJICAiQVRIOUtfQU5JX1NQVVJfSU1NVU5JVFlfTEVWRUw6IGxldmVsICIKLQkJCQkgICJvdXQgb2YgcmFuZ2UgKCV1ID4gJXUpXG4iLAotCQkJCSAgbGV2ZWwsCi0JCQkJICAodW5zaWduZWQpIEFSUkFZX1NJWkUoY3ljcHdyVGhyMV90YWJsZSkpOworCQkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQU5JLAorCQkJCSJBVEg5S19BTklfU1BVUl9JTU1VTklUWV9MRVZFTDogbGV2ZWwgb3V0IG9mIHJhbmdlICgldSA+ICV6dSlcbiIsCisJCQkJbGV2ZWwsIEFSUkFZX1NJWkUoY3ljcHdyVGhyMV90YWJsZSkpOwogCQkJcmV0dXJuIGZhbHNlOwogCQl9CiAJCS8qCkBAIC05NDUsMjQgKzk1MCwyMiBAQAogCQkJICAgICAgQVJfUEhZX0VYVF9DWUNQV1JfVEhSMSwgdmFsdWUyKTsKIAogCQlpZiAobGV2ZWwgIT0gYW5pU3RhdGUtPnNwdXJJbW11bml0eUxldmVsKSB7Ci0JCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0FOSSwKLQkJCQkgICIqKiBjaCAlZDogbGV2ZWwgJWQ9PiVkW2RlZjolZF0gIgotCQkJCSAgImN5Y3B3clRocjFbbGV2ZWxdPSVkIGluaT0lZFxuIiwKLQkJCQkgIGNoYW4tPmNoYW5uZWwsCi0JCQkJICBhbmlTdGF0ZS0+c3B1ckltbXVuaXR5TGV2ZWwsCi0JCQkJICBsZXZlbCwKLQkJCQkgIEFUSDlLX0FOSV9TUFVSX0lNTVVORV9MVkxfTkVXLAotCQkJCSAgdmFsdWUsCi0JCQkJICBhbmlTdGF0ZS0+aW5pRGVmLmN5Y3B3clRocjEpOwotCQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19BTkksCi0JCQkJICAiKiogY2ggJWQ6IGxldmVsICVkPT4lZFtkZWY6JWRdICIKLQkJCQkgICJjeWNwd3JUaHIxRXh0W2xldmVsXT0lZCBpbmk9JWRcbiIsCi0JCQkJICBjaGFuLT5jaGFubmVsLAotCQkJCSAgYW5pU3RhdGUtPnNwdXJJbW11bml0eUxldmVsLAotCQkJCSAgbGV2ZWwsCi0JCQkJICBBVEg5S19BTklfU1BVUl9JTU1VTkVfTFZMX05FVywKLQkJCQkgIHZhbHVlMiwKLQkJCQkgIGFuaVN0YXRlLT5pbmlEZWYuY3ljcHdyVGhyMUV4dCk7CisJCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19BTkksCisJCQkJIioqIGNoICVkOiBsZXZlbCAlZD0+JWRbZGVmOiVkXSBjeWNwd3JUaHIxW2xldmVsXT0lZCBpbmk9JWRcbiIsCisJCQkJY2hhbi0+Y2hhbm5lbCwKKwkJCQlhbmlTdGF0ZS0+c3B1ckltbXVuaXR5TGV2ZWwsCisJCQkJbGV2ZWwsCisJCQkJQVRIOUtfQU5JX1NQVVJfSU1NVU5FX0xWTF9ORVcsCisJCQkJdmFsdWUsCisJCQkJYW5pU3RhdGUtPmluaURlZi5jeWNwd3JUaHIxKTsKKwkJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0FOSSwKKwkJCQkiKiogY2ggJWQ6IGxldmVsICVkPT4lZFtkZWY6JWRdIGN5Y3B3clRocjFFeHRbbGV2ZWxdPSVkIGluaT0lZFxuIiwKKwkJCQljaGFuLT5jaGFubmVsLAorCQkJCWFuaVN0YXRlLT5zcHVySW1tdW5pdHlMZXZlbCwKKwkJCQlsZXZlbCwKKwkJCQlBVEg5S19BTklfU1BVUl9JTU1VTkVfTFZMX05FVywKKwkJCQl2YWx1ZTIsCisJCQkJYW5pU3RhdGUtPmluaURlZi5jeWNwd3JUaHIxRXh0KTsKIAkJCWlmIChsZXZlbCA+IGFuaVN0YXRlLT5zcHVySW1tdW5pdHlMZXZlbCkKIAkJCQlhaC0+c3RhdHMuYXN0X2FuaV9zcHVydXArKzsKIAkJCWVsc2UgaWYgKGxldmVsIDwgYW5pU3RhdGUtPnNwdXJJbW11bml0eUxldmVsKQpAQCAtOTgyLDExICs5ODUsMTEgQEAKIAkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX01SQ19DQ0tfQ1RSTCwKIAkJCSAgICAgIEFSX1BIWV9NUkNfQ0NLX01VWF9SRUcsIGlzX29uKTsKIAkJaWYgKCFpc19vbiAhPSBhbmlTdGF0ZS0+bXJjQ0NLT2ZmKSB7Ci0JCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0FOSSwKLQkJCQkgICIqKiBjaCAlZDogTVJDIENDSzogJXM9PiVzXG4iLAotCQkJCSAgY2hhbi0+Y2hhbm5lbCwKLQkJCQkgICFhbmlTdGF0ZS0+bXJjQ0NLT2ZmID8gIm9uIiA6ICJvZmYiLAotCQkJCSAgaXNfb24gPyAib24iIDogIm9mZiIpOworCQkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQU5JLAorCQkJCSIqKiBjaCAlZDogTVJDIENDSzogJXM9PiVzXG4iLAorCQkJCWNoYW4tPmNoYW5uZWwsCisJCQkJIWFuaVN0YXRlLT5tcmNDQ0tPZmYgPyAib24iIDogIm9mZiIsCisJCQkJaXNfb24gPyAib24iIDogIm9mZiIpOwogCQlpZiAoaXNfb24pCiAJCQlhaC0+c3RhdHMuYXN0X2FuaV9jY2tsb3crKzsKIAkJZWxzZQpAQCAtOTk4LDIyICsxMDAxLDE5IEBACiAJY2FzZSBBVEg5S19BTklfUFJFU0VOVDoKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19BTkksCi0JCQkgICJpbnZhbGlkIGNtZCAldVxuIiwgY21kKTsKKwkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQU5JLCAiaW52YWxpZCBjbWQgJXVcbiIsIGNtZCk7CiAJCXJldHVybiBmYWxzZTsKIAl9CiAKLQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0FOSSwKLQkJICAiQU5JIHBhcmFtZXRlcnM6IFNJPSVkLCBvZmRtV1M9JXMgRlM9JWQgIgotCQkgICJNUkNjY2s9JXMgbGlzdGVuVGltZT0lZCAiCi0JCSAgIm9mZG1FcnJzPSVkIGNja0VycnM9JWRcbiIsCi0JCSAgYW5pU3RhdGUtPnNwdXJJbW11bml0eUxldmVsLAotCQkgICFhbmlTdGF0ZS0+b2ZkbVdlYWtTaWdEZXRlY3RPZmYgPyAib24iIDogIm9mZiIsCi0JCSAgYW5pU3RhdGUtPmZpcnN0ZXBMZXZlbCwKLQkJICAhYW5pU3RhdGUtPm1yY0NDS09mZiA/ICJvbiIgOiAib2ZmIiwKLQkJICBhbmlTdGF0ZS0+bGlzdGVuVGltZSwKLQkJICBhbmlTdGF0ZS0+b2ZkbVBoeUVyckNvdW50LAotCQkgIGFuaVN0YXRlLT5jY2tQaHlFcnJDb3VudCk7CisJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQU5JLAorCQkiQU5JIHBhcmFtZXRlcnM6IFNJPSVkLCBvZmRtV1M9JXMgRlM9JWQgTVJDY2NrPSVzIGxpc3RlblRpbWU9JWQgb2ZkbUVycnM9JWQgY2NrRXJycz0lZFxuIiwKKwkJYW5pU3RhdGUtPnNwdXJJbW11bml0eUxldmVsLAorCQkhYW5pU3RhdGUtPm9mZG1XZWFrU2lnRGV0ZWN0T2ZmID8gIm9uIiA6ICJvZmYiLAorCQlhbmlTdGF0ZS0+Zmlyc3RlcExldmVsLAorCQkhYW5pU3RhdGUtPm1yY0NDS09mZiA/ICJvbiIgOiAib2ZmIiwKKwkJYW5pU3RhdGUtPmxpc3RlblRpbWUsCisJCWFuaVN0YXRlLT5vZmRtUGh5RXJyQ291bnQsCisJCWFuaVN0YXRlLT5jY2tQaHlFcnJDb3VudCk7CiAJcmV0dXJuIHRydWU7CiB9CiAKQEAgLTEwMjMsMjUgKzEwMjMsMjUgQEAKIAlpbnQxNl90IG5mOwogCiAJbmYgPSBNUyhSRUdfUkVBRChhaCwgQVJfUEhZX0NDQV8wKSwgQVJfUEhZX01JTkNDQV9QV1IpOwotCW5mYXJyYXlbMF0gPSBzaWduX2V4dGVuZChuZiwgOSk7CisJbmZhcnJheVswXSA9IHNpZ25fZXh0ZW5kMzIobmYsIDgpOwogCiAJbmYgPSBNUyhSRUdfUkVBRChhaCwgQVJfUEhZX0NDQV8xKSwgQVJfUEhZX0NIMV9NSU5DQ0FfUFdSKTsKLQluZmFycmF5WzFdID0gc2lnbl9leHRlbmQobmYsIDkpOworCW5mYXJyYXlbMV0gPSBzaWduX2V4dGVuZDMyKG5mLCA4KTsKIAogCW5mID0gTVMoUkVHX1JFQUQoYWgsIEFSX1BIWV9DQ0FfMiksIEFSX1BIWV9DSDJfTUlOQ0NBX1BXUik7Ci0JbmZhcnJheVsyXSA9IHNpZ25fZXh0ZW5kKG5mLCA5KTsKKwluZmFycmF5WzJdID0gc2lnbl9leHRlbmQzMihuZiwgOCk7CiAKIAlpZiAoIUlTX0NIQU5fSFQ0MChhaC0+Y3VyY2hhbikpCiAJCXJldHVybjsKIAogCW5mID0gTVMoUkVHX1JFQUQoYWgsIEFSX1BIWV9FWFRfQ0NBKSwgQVJfUEhZX0VYVF9NSU5DQ0FfUFdSKTsKLQluZmFycmF5WzNdID0gc2lnbl9leHRlbmQobmYsIDkpOworCW5mYXJyYXlbM10gPSBzaWduX2V4dGVuZDMyKG5mLCA4KTsKIAogCW5mID0gTVMoUkVHX1JFQUQoYWgsIEFSX1BIWV9FWFRfQ0NBXzEpLCBBUl9QSFlfQ0gxX0VYVF9NSU5DQ0FfUFdSKTsKLQluZmFycmF5WzRdID0gc2lnbl9leHRlbmQobmYsIDkpOworCW5mYXJyYXlbNF0gPSBzaWduX2V4dGVuZDMyKG5mLCA4KTsKIAogCW5mID0gTVMoUkVHX1JFQUQoYWgsIEFSX1BIWV9FWFRfQ0NBXzIpLCBBUl9QSFlfQ0gyX0VYVF9NSU5DQ0FfUFdSKTsKLQluZmFycmF5WzVdID0gc2lnbl9leHRlbmQobmYsIDkpOworCW5mYXJyYXlbNV0gPSBzaWduX2V4dGVuZDMyKG5mLCA4KTsKIH0KIAogc3RhdGljIHZvaWQgYXI5MDAzX2h3X3NldF9uZl9saW1pdHMoc3RydWN0IGF0aF9odyAqYWgpCkBAIC0xMDcwLDEzICsxMDcwLDEzIEBACiAJYW5pU3RhdGUgPSAmYWgtPmN1cmNoYW4tPmFuaTsKIAlpbmlEZWYgPSAmYW5pU3RhdGUtPmluaURlZjsKIAotCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQU5JLAotCQkgICJ2ZXIgJWQuJWQgb3Btb2RlICV1IGNoYW4gJWQgTWh6LzB4JXhcbiIsCi0JCSAgYWgtPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiwKLQkJICBhaC0+aHdfdmVyc2lvbi5tYWNSZXYsCi0JCSAgYWgtPm9wbW9kZSwKLQkJICBjaGFuLT5jaGFubmVsLAotCQkgIGNoYW4tPmNoYW5uZWxGbGFncyk7CisJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQU5JLAorCQkidmVyICVkLiVkIG9wbW9kZSAldSBjaGFuICVkIE1oei8weCV4XG4iLAorCQlhaC0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uLAorCQlhaC0+aHdfdmVyc2lvbi5tYWNSZXYsCisJCWFoLT5vcG1vZGUsCisJCWNoYW4tPmNoYW5uZWwsCisJCWNoYW4tPmNoYW5uZWxGbGFncyk7CiAKIAl2YWwgPSBSRUdfUkVBRChhaCwgQVJfUEhZX1NGQ09SUik7CiAJaW5pRGVmLT5tMVRocmVzaCA9IE1TKHZhbCwgQVJfUEhZX1NGQ09SUl9NMV9USFJFU0gpOwpAQCAtMTExMywxMCArMTExMyw1NSBAQAogCWFuaVN0YXRlLT5tcmNDQ0tPZmYgPSAhQVRIOUtfQU5JX0VOQUJMRV9NUkNfQ0NLOwogfQogCitzdGF0aWMgdm9pZCBhcjkwMDNfaHdfc2V0X3JhZGFyX3BhcmFtcyhzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQkgICAgICAgc3RydWN0IGF0aF9od19yYWRhcl9jb25mICpjb25mKQoreworCXUzMiByYWRhcl8wID0gMCwgcmFkYXJfMSA9IDA7CisKKwlpZiAoIWNvbmYpIHsKKwkJUkVHX0NMUl9CSVQoYWgsIEFSX1BIWV9SQURBUl8wLCBBUl9QSFlfUkFEQVJfMF9FTkEpOworCQlyZXR1cm47CisJfQorCisJcmFkYXJfMCB8PSBBUl9QSFlfUkFEQVJfMF9FTkEgfCBBUl9QSFlfUkFEQVJfMF9GRlRfRU5BOworCXJhZGFyXzAgfD0gU00oY29uZi0+ZmlyX3Bvd2VyLCBBUl9QSFlfUkFEQVJfMF9GSVJQV1IpOworCXJhZGFyXzAgfD0gU00oY29uZi0+cmFkYXJfcnNzaSwgQVJfUEhZX1JBREFSXzBfUlJTU0kpOworCXJhZGFyXzAgfD0gU00oY29uZi0+cHVsc2VfaGVpZ2h0LCBBUl9QSFlfUkFEQVJfMF9IRUlHSFQpOworCXJhZGFyXzAgfD0gU00oY29uZi0+cHVsc2VfcnNzaSwgQVJfUEhZX1JBREFSXzBfUFJTU0kpOworCXJhZGFyXzAgfD0gU00oY29uZi0+cHVsc2VfaW5iYW5kLCBBUl9QSFlfUkFEQVJfMF9JTkJBTkQpOworCisJcmFkYXJfMSB8PSBBUl9QSFlfUkFEQVJfMV9NQVhfUlJTU0k7CisJcmFkYXJfMSB8PSBBUl9QSFlfUkFEQVJfMV9CTE9DS19DSEVDSzsKKwlyYWRhcl8xIHw9IFNNKGNvbmYtPnB1bHNlX21heGxlbiwgQVJfUEhZX1JBREFSXzFfTUFYTEVOKTsKKwlyYWRhcl8xIHw9IFNNKGNvbmYtPnB1bHNlX2luYmFuZF9zdGVwLCBBUl9QSFlfUkFEQVJfMV9SRUxTVEVQX1RIUkVTSCk7CisJcmFkYXJfMSB8PSBTTShjb25mLT5yYWRhcl9pbmJhbmQsIEFSX1BIWV9SQURBUl8xX1JFTFBXUl9USFJFU0gpOworCisJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUkFEQVJfMCwgcmFkYXJfMCk7CisJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUkFEQVJfMSwgcmFkYXJfMSk7CisJaWYgKGNvbmYtPmV4dF9jaGFubmVsKQorCQlSRUdfU0VUX0JJVChhaCwgQVJfUEhZX1JBREFSX0VYVCwgQVJfUEhZX1JBREFSX0VYVF9FTkEpOworCWVsc2UKKwkJUkVHX0NMUl9CSVQoYWgsIEFSX1BIWV9SQURBUl9FWFQsIEFSX1BIWV9SQURBUl9FWFRfRU5BKTsKK30KKworc3RhdGljIHZvaWQgYXI5MDAzX2h3X3NldF9yYWRhcl9jb25mKHN0cnVjdCBhdGhfaHcgKmFoKQoreworCXN0cnVjdCBhdGhfaHdfcmFkYXJfY29uZiAqY29uZiA9ICZhaC0+cmFkYXJfY29uZjsKKworCWNvbmYtPmZpcl9wb3dlciA9IC0yODsKKwljb25mLT5yYWRhcl9yc3NpID0gMDsKKwljb25mLT5wdWxzZV9oZWlnaHQgPSAxMDsKKwljb25mLT5wdWxzZV9yc3NpID0gMjQ7CisJY29uZi0+cHVsc2VfaW5iYW5kID0gODsKKwljb25mLT5wdWxzZV9tYXhsZW4gPSAyNTU7CisJY29uZi0+cHVsc2VfaW5iYW5kX3N0ZXAgPSAxMjsKKwljb25mLT5yYWRhcl9pbmJhbmQgPSA4OworfQorCiB2b2lkIGFyOTAwM19od19hdHRhY2hfcGh5X29wcyhzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAlzdHJ1Y3QgYXRoX2h3X3ByaXZhdGVfb3BzICpwcml2X29wcyA9IGF0aDlrX2h3X3ByaXZhdGVfb3BzKGFoKTsKLQljb25zdCB1MzIgYXI5MzAwX2NjYV9yZWdzWzZdID0geworCXN0YXRpYyBjb25zdCB1MzIgYXI5MzAwX2NjYV9yZWdzWzZdID0gewogCQlBUl9QSFlfQ0NBXzAsCiAJCUFSX1BIWV9DQ0FfMSwKIAkJQVJfUEhZX0NDQV8yLApAQCAtMTEzNiwxMyArMTE4MSwxNCBAQAogCXByaXZfb3BzLT5zZXRfZGVsdGFfc2xvcGUgPSBhcjkwMDNfaHdfc2V0X2RlbHRhX3Nsb3BlOwogCXByaXZfb3BzLT5yZmJ1c19yZXEgPSBhcjkwMDNfaHdfcmZidXNfcmVxOwogCXByaXZfb3BzLT5yZmJ1c19kb25lID0gYXI5MDAzX2h3X3JmYnVzX2RvbmU7Ci0JcHJpdl9vcHMtPmVuYWJsZV9yZmtpbGwgPSBhcjkwMDNfaHdfZW5hYmxlX3Jma2lsbDsKIAlwcml2X29wcy0+c2V0X2RpdmVyc2l0eSA9IGFyOTAwM19od19zZXRfZGl2ZXJzaXR5OwogCXByaXZfb3BzLT5hbmlfY29udHJvbCA9IGFyOTAwM19od19hbmlfY29udHJvbDsKIAlwcml2X29wcy0+ZG9fZ2V0bmYgPSBhcjkwMDNfaHdfZG9fZ2V0bmY7CiAJcHJpdl9vcHMtPmFuaV9jYWNoZV9pbmlfcmVncyA9IGFyOTAwM19od19hbmlfY2FjaGVfaW5pX3JlZ3M7CisJcHJpdl9vcHMtPnNldF9yYWRhcl9wYXJhbXMgPSBhcjkwMDNfaHdfc2V0X3JhZGFyX3BhcmFtczsKIAogCWFyOTAwM19od19zZXRfbmZfbGltaXRzKGFoKTsKKwlhcjkwMDNfaHdfc2V0X3JhZGFyX2NvbmYoYWgpOwogCW1lbWNweShhaC0+bmZfcmVncywgYXI5MzAwX2NjYV9yZWdzLCBzaXplb2YoYWgtPm5mX3JlZ3MpKTsKIH0KIApAQCAtMTE2NSw3ICsxMjExLDcgQEAKIAkJCSAgfihBUl9QSFlfV0FUQ0hET0dfTk9OX0lETEVfRU5BQkxFIHwKIAkJCSAgICBBUl9QSFlfV0FUQ0hET0dfSURMRV9FTkFCTEUpKTsKIAotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX1JFU0VULCAiRGlzYWJsZWQgQkIgV2F0Y2hkb2dcbiIpOworCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19SRVNFVCwgIkRpc2FibGVkIEJCIFdhdGNoZG9nXG4iKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTIwMSw5ICsxMjQ3LDkgQEAKIAkJICBBUl9QSFlfV0FUQ0hET0dfSURMRV9NQVNLIHwKIAkJICAoQVJfUEhZX1dBVENIRE9HX05PTl9JRExFX01BU0sgJiAoaWRsZV9jb3VudCA8PCAyKSkpOwogCi0JYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19SRVNFVCwKLQkJICAiRW5hYmxlZCBCQiBXYXRjaGRvZyB0aW1lb3V0ICgldSBtcylcbiIsCi0JCSAgaWRsZV90bW9fbXMpOworCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX1JFU0VULAorCQkiRW5hYmxlZCBCQiBXYXRjaGRvZyB0aW1lb3V0ICgldSBtcylcbiIsCisJCWlkbGVfdG1vX21zKTsKIH0KIAogdm9pZCBhcjkwMDNfaHdfYmJfd2F0Y2hkb2dfcmVhZChzdHJ1Y3QgYXRoX2h3ICphaCkKQEAgLTEyMzEsMzcgKzEyNzcsMzUgQEAKIAkJcmV0dXJuOwogCiAJc3RhdHVzID0gYWgtPmJiX3dhdGNoZG9nX2xhc3Rfc3RhdHVzOwotCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfUkVTRVQsCi0JCSAgIlxuPT09PSBCQiB1cGRhdGU6IEJCIHN0YXR1cz0weCUwOHggPT09PVxuIiwgc3RhdHVzKTsKLQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX1JFU0VULAotCQkgICIqKiBCQiBzdGF0ZTogd2Q9JXUgZGV0PSV1IHJkYXI9JXUgck9GRE09JWQgIgotCQkgICJyQ0NLPSV1IHRPRkRNPSV1IHRDQ0s9JXUgYWdjPSV1IHNyYz0ldSAqKlxuIiwKLQkJICBNUyhzdGF0dXMsIEFSX1BIWV9XQVRDSERPR19JTkZPKSwKLQkJICBNUyhzdGF0dXMsIEFSX1BIWV9XQVRDSERPR19ERVRfSEFORyksCi0JCSAgTVMoc3RhdHVzLCBBUl9QSFlfV0FUQ0hET0dfUkFEQVJfU00pLAotCQkgIE1TKHN0YXR1cywgQVJfUEhZX1dBVENIRE9HX1JYX09GRE1fU00pLAotCQkgIE1TKHN0YXR1cywgQVJfUEhZX1dBVENIRE9HX1JYX0NDS19TTSksCi0JCSAgTVMoc3RhdHVzLCBBUl9QSFlfV0FUQ0hET0dfVFhfT0ZETV9TTSksCi0JCSAgTVMoc3RhdHVzLCBBUl9QSFlfV0FUQ0hET0dfVFhfQ0NLX1NNKSwKLQkJICBNUyhzdGF0dXMsIEFSX1BIWV9XQVRDSERPR19BR0NfU00pLAotCQkgIE1TKHN0YXR1cyxBUl9QSFlfV0FUQ0hET0dfU1JDSF9TTSkpOworCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX1JFU0VULAorCQkiXG49PT09IEJCIHVwZGF0ZTogQkIgc3RhdHVzPTB4JTA4eCA9PT09XG4iLCBzdGF0dXMpOworCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX1JFU0VULAorCQkiKiogQkIgc3RhdGU6IHdkPSV1IGRldD0ldSByZGFyPSV1IHJPRkRNPSVkIHJDQ0s9JXUgdE9GRE09JXUgdENDSz0ldSBhZ2M9JXUgc3JjPSV1ICoqXG4iLAorCQlNUyhzdGF0dXMsIEFSX1BIWV9XQVRDSERPR19JTkZPKSwKKwkJTVMoc3RhdHVzLCBBUl9QSFlfV0FUQ0hET0dfREVUX0hBTkcpLAorCQlNUyhzdGF0dXMsIEFSX1BIWV9XQVRDSERPR19SQURBUl9TTSksCisJCU1TKHN0YXR1cywgQVJfUEhZX1dBVENIRE9HX1JYX09GRE1fU00pLAorCQlNUyhzdGF0dXMsIEFSX1BIWV9XQVRDSERPR19SWF9DQ0tfU00pLAorCQlNUyhzdGF0dXMsIEFSX1BIWV9XQVRDSERPR19UWF9PRkRNX1NNKSwKKwkJTVMoc3RhdHVzLCBBUl9QSFlfV0FUQ0hET0dfVFhfQ0NLX1NNKSwKKwkJTVMoc3RhdHVzLCBBUl9QSFlfV0FUQ0hET0dfQUdDX1NNKSwKKwkJTVMoc3RhdHVzLCBBUl9QSFlfV0FUQ0hET0dfU1JDSF9TTSkpOwogCi0JYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19SRVNFVCwKLQkJICAiKiogQkIgV0QgY250bDogY250bDE9MHglMDh4IGNudGwyPTB4JTA4eCAqKlxuIiwKLQkJICBSRUdfUkVBRChhaCwgQVJfUEhZX1dBVENIRE9HX0NUTF8xKSwKLQkJICBSRUdfUkVBRChhaCwgQVJfUEhZX1dBVENIRE9HX0NUTF8yKSk7Ci0JYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19SRVNFVCwKLQkJICAiKiogQkIgbW9kZTogQkJfZ2VuX2NvbnRyb2xzPTB4JTA4eCAqKlxuIiwKLQkJICBSRUdfUkVBRChhaCwgQVJfUEhZX0dFTl9DVFJMKSk7CisJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfUkVTRVQsCisJCSIqKiBCQiBXRCBjbnRsOiBjbnRsMT0weCUwOHggY250bDI9MHglMDh4ICoqXG4iLAorCQlSRUdfUkVBRChhaCwgQVJfUEhZX1dBVENIRE9HX0NUTF8xKSwKKwkJUkVHX1JFQUQoYWgsIEFSX1BIWV9XQVRDSERPR19DVExfMikpOworCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX1JFU0VULAorCQkiKiogQkIgbW9kZTogQkJfZ2VuX2NvbnRyb2xzPTB4JTA4eCAqKlxuIiwKKwkJUkVHX1JFQUQoYWgsIEFSX1BIWV9HRU5fQ1RSTCkpOwogCiAjZGVmaW5lIFBDVChfZmllbGQpIChjb21tb24tPmNjX3N1cnZleS5fZmllbGQgKiAxMDAgLyBjb21tb24tPmNjX3N1cnZleS5jeWNsZXMpCiAJaWYgKGNvbW1vbi0+Y2Nfc3VydmV5LmN5Y2xlcykKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19SRVNFVCwKLQkJCSAgIioqIEJCIGJ1c3kgdGltZXM6IHJ4X2NsZWFyPSVkJSUsICIKLQkJCSAgInJ4X2ZyYW1lPSVkJSUsIHR4X2ZyYW1lPSVkJSUgKipcbiIsCi0JCQkgIFBDVChyeF9idXN5KSwgUENUKHJ4X2ZyYW1lKSwgUENUKHR4X2ZyYW1lKSk7CisJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX1JFU0VULAorCQkJIioqIEJCIGJ1c3kgdGltZXM6IHJ4X2NsZWFyPSVkJSUsIHJ4X2ZyYW1lPSVkJSUsIHR4X2ZyYW1lPSVkJSUgKipcbiIsCisJCQlQQ1QocnhfYnVzeSksIFBDVChyeF9mcmFtZSksIFBDVCh0eF9mcmFtZSkpOwogCi0JYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19SRVNFVCwKLQkJICAiPT09PSBCQiB1cGRhdGU6IGRvbmUgPT09PVxuXG4iKTsKKwlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19SRVNFVCwKKwkJIj09PT0gQkIgdXBkYXRlOiBkb25lID09PT1cblxuIik7CiB9CiBFWFBPUlRfU1lNQk9MKGFyOTAwM19od19iYl93YXRjaGRvZ19kYmdfaW5mbyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX3BoeS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19waHkuaAppbmRleCAzMzk0ZGZlLi41OWJhYjZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX3BoeS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfcGh5LmgKQEAgLTI2MCw3ICsyNjAsMTMgQEAKICNkZWZpbmUgQVJfUEhZX0NDQV8wICAgICAgICAgICAgKEFSX0FHQ19CQVNFICsgMHgxYykKICNkZWZpbmUgQVJfUEhZX0VYVF9DQ0EwICAgICAgICAgKEFSX0FHQ19CQVNFICsgMHgyMCkKICNkZWZpbmUgQVJfUEhZX1JFU1RBUlQgICAgICAgICAgKEFSX0FHQ19CQVNFICsgMHgyNCkKKwogI2RlZmluZSBBUl9QSFlfTUNfR0FJTl9DVFJMICAgICAoQVJfQUdDX0JBU0UgKyAweDI4KQorI2RlZmluZSBBUl9BTlRfRElWX0NUUkxfQUxMCTB4N2UwMDAwMDAKKyNkZWZpbmUgQVJfQU5UX0RJVl9DVFJMX0FMTF9TCTI1CisjZGVmaW5lIEFSX0FOVF9ESVZfRU5BQkxFCTB4MTAwMDAwMAorI2RlZmluZSBBUl9BTlRfRElWX0VOQUJMRV9TCTI0CisKICNkZWZpbmUgQVJfUEhZX0VYVENITl9QV1JUSFIxICAgKEFSX0FHQ19CQVNFICsgMHgyYykKICNkZWZpbmUgQVJfUEhZX0VYVF9DSE5fV0lOICAgICAgKEFSX0FHQ19CQVNFICsgMHgzMCkKICNkZWZpbmUgQVJfUEhZXzIwXzQwX0RFVF9USFIgICAgKEFSX0FHQ19CQVNFICsgMHgzNCkKQEAgLTI3MSw3ICsyNzcsMTEgQEAKICNkZWZpbmUgQVJfUEhZX1JYX0dBSU5fQk9VTkRTXzIgKEFSX0FHQ19CQVNFICsgMHg0OCkKICNkZWZpbmUgQVJfUEhZX1JTU0lfMCAgICAgICAgICAgKEFSX0FHQ19CQVNFICsgMHgxODApCiAjZGVmaW5lIEFSX1BIWV9TUFVSX0NDS19SRVAwICAgIChBUl9BR0NfQkFTRSArIDB4MTg0KQorCiAjZGVmaW5lIEFSX1BIWV9DQ0tfREVURUNUICAgICAgIChBUl9BR0NfQkFTRSArIDB4MWMwKQorI2RlZmluZSBBUl9GQVNUX0RJVl9FTkFCTEUJMHgyMDAwCisjZGVmaW5lIEFSX0ZBU1RfRElWX0VOQUJMRV9TCTEzCisKICNkZWZpbmUgQVJfUEhZX0RBR19DVFJMQ0NLICAgICAgKEFSX0FHQ19CQVNFICsgMHgxYzQpCiAjZGVmaW5lIEFSX1BIWV9JUUNPUlJfQ1RSTF9DQ0sgIChBUl9BR0NfQkFTRSArIDB4MWM4KQogCkBAIC01MzYsMTAgKzU0NiwxOCBAQAogCiAjZGVmaW5lIEFSX1BIWV9UWEdBSU5fVEFCTEUgICAgICAoQVJfU01fQkFTRSArIDB4MzAwKQogCisjZGVmaW5lIEFSX1BIWV9UWF9JUUNBTF9TVEFSVF85NDg1CQkoQVJfU01fQkFTRSArIDB4M2M0KQorI2RlZmluZSBBUl9QSFlfVFhfSVFDQUxfU1RBUlRfRE9fQ0FMXzk0ODUJMHg4MDAwMDAwMAorI2RlZmluZSBBUl9QSFlfVFhfSVFDQUxfU1RBUlRfRE9fQ0FMXzk0ODVfUwkzMQorI2RlZmluZSBBUl9QSFlfVFhfSVFDQUxfQ09OVFJPTF8xXzk0ODUJCShBUl9TTV9CQVNFICsgMHgzYzgpCisjZGVmaW5lIEFSX1BIWV9UWF9JUUNBTF9TVEFUVVNfQjBfOTQ4NQkJKEFSX1NNX0JBU0UgKyAweDNmMCkKKwogI2RlZmluZSBBUl9QSFlfVFhfSVFDQUxfQ09OVFJPTF8xICAgKEFSX1NNX0JBU0UgKyAweDQ0OCkKICNkZWZpbmUgQVJfUEhZX1RYX0lRQ0FMX1NUQVJUICAgICAgIChBUl9TTV9CQVNFICsgMHg0NDApCiAjZGVmaW5lIEFSX1BIWV9UWF9JUUNBTF9TVEFUVVNfQjAgICAoQVJfU01fQkFTRSArIDB4NDhjKQotI2RlZmluZSBBUl9QSFlfVFhfSVFDQUxfQ09SUl9DT0VGRl8wMV9CMCAgICAoQVJfU01fQkFTRSArIDB4NDUwKQorI2RlZmluZSBBUl9QSFlfVFhfSVFDQUxfQ09SUl9DT0VGRl9CMChfaSkgICAgKEFSX1NNX0JBU0UgKyBcCisJCQkJCSAgICAgKEFSX1NSRVZfOTQ4NShhaCkgPyBcCisJCQkJCSAgICAgIDB4M2QwIDogMHg0NTApICsgKChfaSkgPDwgMikpCiAKICNkZWZpbmUgQVJfUEhZX1dBVENIRE9HX1NUQVRVUyAgICAgIChBUl9TTV9CQVNFICsgMHg1YzApCiAjZGVmaW5lIEFSX1BIWV9XQVRDSERPR19DVExfMSAgICAgICAoQVJfU01fQkFTRSArIDB4NWM0KQpAQCAtNTY4LDcgKzU4Niw3IEBACiAjZGVmaW5lIEFSX1BIWV82NU5NX0NIMF9CSUFTMiAgICAgICAweDE2MGM0CiAjZGVmaW5lIEFSX1BIWV82NU5NX0NIMF9CSUFTNCAgICAgICAweDE2MGNjCiAjZGVmaW5lIEFSX1BIWV82NU5NX0NIMF9SWFRYNCAgICAgICAweDE2MTBjCi0jZGVmaW5lIEFSX1BIWV82NU5NX0NIMF9USEVSTSAgICAgICAweDE2MjkwCisjZGVmaW5lIEFSX1BIWV82NU5NX0NIMF9USEVSTSAgICAgICAoQVJfU1JFVl85NDg1KGFoKSA/IDB4MTYyOGMgOiAweDE2MjkwKQogCiAjZGVmaW5lIEFSX1BIWV82NU5NX0NIMF9USEVSTV9MT0NBTCAgIDB4ODAwMDAwMDAKICNkZWZpbmUgQVJfUEhZXzY1Tk1fQ0gwX1RIRVJNX0xPQ0FMX1MgMzEKQEAgLTU4NCw2ICs2MDIsMjQgQEAKICNkZWZpbmUgQVJfUEhZXzY1Tk1fQ0gyX1JYVFgxICAgICAgIDB4MTY5MDAKICNkZWZpbmUgQVJfUEhZXzY1Tk1fQ0gyX1JYVFgyICAgICAgIDB4MTY5MDQKIAorI2RlZmluZSBBUl9DSDBfVE9QMiAoQVJfU1JFVl85NDg1KGFoKSA/IDB4MDAwMTYyODQgOiAweDAwMDE2MjhjKQorI2RlZmluZSBBUl9DSDBfVE9QMl9YUEFCSUFTTFZMCQkweGYwMDAKKyNkZWZpbmUgQVJfQ0gwX1RPUDJfWFBBQklBU0xWTF9TCTEyCisKKyNkZWZpbmUgQVJfQ0gwX1hUQUwJCShBUl9TUkVWXzk0ODUoYWgpID8gMHgxNjI5MCA6IDB4MTYyOTQpCisjZGVmaW5lIEFSX0NIMF9YVEFMX0NBUElOREFDCTB4N2YwMDAwMDAKKyNkZWZpbmUgQVJfQ0gwX1hUQUxfQ0FQSU5EQUNfUwkyNAorI2RlZmluZSBBUl9DSDBfWFRBTF9DQVBPVVREQUMJMHgwMGZlMDAwMAorI2RlZmluZSBBUl9DSDBfWFRBTF9DQVBPVVREQUNfUwkxNworCisjZGVmaW5lIEFSX1BIWV9QTVUxCQkweDE2YzQwCisjZGVmaW5lIEFSX1BIWV9QTVUxX1BXRAkJMHgxCisjZGVmaW5lIEFSX1BIWV9QTVUxX1BXRF9TCTAKKworI2RlZmluZSBBUl9QSFlfUE1VMgkJMHgxNmM0NAorI2RlZmluZSBBUl9QSFlfUE1VMl9QR00JCTB4MDAyMDAwMDAKKyNkZWZpbmUgQVJfUEhZX1BNVTJfUEdNX1MJMjEKKwogI2RlZmluZSBBUl9QSFlfUlgxREJfQklRVUFEX0xPTkdfU0hJRlQJCTB4MDAzODAwMDAKICNkZWZpbmUgQVJfUEhZX1JYMURCX0JJUVVBRF9MT05HX1NISUZUX1MJMTkKICNkZWZpbmUgQVJfUEhZX1JYNkRCX0JJUVVBRF9MT05HX1NISUZUCQkweDAwYzAwMDAwCkBAIC02ODMsNiArNzE5LDcgQEAKICNkZWZpbmUgQVJfUEhZX1RQQ0dSMV9GT1JDRURfREFDX0dBSU5fUyAxCiAjZGVmaW5lIEFSX1BIWV9UUENHUjFfRk9SQ0VfREFDX0dBSU4gICAgMHgwMDAwMDAwMQogI2RlZmluZSBBUl9QSFlfVFhHQUlOX0ZPUkNFICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBUl9QSFlfVFhHQUlOX0ZPUkNFX1MJCSAgMAogI2RlZmluZSBBUl9QSFlfVFhHQUlOX0ZPUkNFRF9QQURWR05SQSAgICAgMHgwMDAwM2MwMAogI2RlZmluZSBBUl9QSFlfVFhHQUlOX0ZPUkNFRF9QQURWR05SQV9TICAgMTAKICNkZWZpbmUgQVJfUEhZX1RYR0FJTl9GT1JDRURfUEFEVkdOUkIgICAgIDB4MDAwM2MwMDAKQEAgLTcyNSw4ICs3NjIsMTMgQEAKICNkZWZpbmUgQVJfUEhZX1RYX0lRQ0FMX1NUQVJUX0RPX0NBTF9TICAgICAgMAogCiAjZGVmaW5lIEFSX1BIWV9UWF9JUUNBTF9TVEFUVVNfRkFJTEVEICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgQVJfUEhZX1RYX0lRQ0FMX0NPUlJfQ09FRkZfMDFfQ09FRkZfVEFCTEUgICAgICAweDAwMDAzZmZmCi0jZGVmaW5lIEFSX1BIWV9UWF9JUUNBTF9DT1JSX0NPRUZGXzAxX0NPRUZGX1RBQkxFX1MgICAgMAorI2RlZmluZSBBUl9QSFlfQ0FMSUJSQVRFRF9HQUlOU18wCSAweDNlCisjZGVmaW5lIEFSX1BIWV9DQUxJQlJBVEVEX0dBSU5TXzBfUwkgMQorCisjZGVmaW5lIEFSX1BIWV9UWF9JUUNBTF9DT1JSX0NPRUZGXzAwX0NPRUZGX1RBQkxFICAgICAgMHgwMDAwM2ZmZgorI2RlZmluZSBBUl9QSFlfVFhfSVFDQUxfQ09SUl9DT0VGRl8wMF9DT0VGRl9UQUJMRV9TICAgIDAKKyNkZWZpbmUgQVJfUEhZX1RYX0lRQ0FMX0NPUlJfQ09FRkZfMDFfQ09FRkZfVEFCTEUgICAgICAweDBmZmZjMDAwCisjZGVmaW5lIEFSX1BIWV9UWF9JUUNBTF9DT1JSX0NPRUZGXzAxX0NPRUZGX1RBQkxFX1MgICAgMTQKIAogI2RlZmluZSBBUl9QSFlfNjVOTV9DSDBfUlhUWDRfVEhFUk1fT04gICAgICAgICAgMHgxMDAwMDAwMAogI2RlZmluZSBBUl9QSFlfNjVOTV9DSDBfUlhUWDRfVEhFUk1fT05fUyAgICAgICAgMjgKQEAgLTc4NSw3ICs4MjcsNyBAQAogI2RlZmluZSBBUl9QSFlfVFBDXzExX0IxICAgICAgICAgKEFSX1NNMV9CQVNFICsgMHgyMjApCiAjZGVmaW5lIEFSX1BIWV9QREFEQ19UQUJfMSAgICAgICAoQVJfU00xX0JBU0UgKyAweDI0MCkKICNkZWZpbmUgQVJfUEhZX1RYX0lRQ0FMX1NUQVRVU19CMSAgIChBUl9TTTFfQkFTRSArIDB4NDhjKQotI2RlZmluZSBBUl9QSFlfVFhfSVFDQUxfQ09SUl9DT0VGRl8wMV9CMSAgICAoQVJfU00xX0JBU0UgKyAweDQ1MCkKKyNkZWZpbmUgQVJfUEhZX1RYX0lRQ0FMX0NPUlJfQ09FRkZfQjEoX2kpICAgIChBUl9TTV9CQVNFICsgMHg0NTAgKyAoKF9pKSA8PCAyKSkKIAogLyoKICAqIENoYW5uZWwgMiBSZWdpc3RlciBNYXAKQEAgLTgzOCw3ICs4ODAsNyBAQAogI2RlZmluZSBBUl9QSFlfVFBDXzExX0IyICAgICAgICAgKEFSX1NNMl9CQVNFICsgMHgyMjApCiAjZGVmaW5lIEFSX1BIWV9QREFEQ19UQUJfMiAgICAgICAoQVJfU00yX0JBU0UgKyAweDI0MCkKICNkZWZpbmUgQVJfUEhZX1RYX0lRQ0FMX1NUQVRVU19CMiAgIChBUl9TTTJfQkFTRSArIDB4NDhjKQotI2RlZmluZSBBUl9QSFlfVFhfSVFDQUxfQ09SUl9DT0VGRl8wMV9CMiAgICAoQVJfU00yX0JBU0UgKyAweDQ1MCkKKyNkZWZpbmUgQVJfUEhZX1RYX0lRQ0FMX0NPUlJfQ09FRkZfQjIoX2kpICAgIChBUl9TTTJfQkFTRSArIDB4NDUwICsgKChfaSkgPDwgMikpCiAKICNkZWZpbmUgQVJfUEhZX1RYX0lRQ0FMX1NUQVRVU19CMl9GQUlMRUQgICAgMHgwMDAwMDAwMQogCkBAIC05NDUsNyArOTg3LDkgQEAKICNkZWZpbmUgQVJfUEhZX1BBUFJEX0NUUkwxX1BBUFJEX01BR19TQ0FMRV9GQUNUCQkweDBmZmUwMDAwCiAjZGVmaW5lIEFSX1BIWV9QQVBSRF9DVFJMMV9QQVBSRF9NQUdfU0NBTEVfRkFDVF9TCTE3CiAKLSNkZWZpbmUgQVJfUEhZX1BBUFJEX1RSQUlORVJfQ05UTDEJCQkJKEFSX1NNX0JBU0UgKyAweDQ5MCkKKyNkZWZpbmUgQVJfUEhZX1BBUFJEX1RSQUlORVJfQ05UTDEJCQkJKEFSX1NNX0JBU0UgKyBcCisJCQkJCQkJCSAoQVJfU1JFVl85NDg1KGFoKSA/IFwKKwkJCQkJCQkJICAweDU4MCA6IDB4NDkwKSkKICNkZWZpbmUgQVJfUEhZX1BBUFJEX1RSQUlORVJfQ05UTDFfQ0ZfQ0ZfUEFQUkRfVFJBSU5fRU5BQkxFCTB4MDAwMDAwMDEKICNkZWZpbmUgQVJfUEhZX1BBUFJEX1RSQUlORVJfQ05UTDFfQ0ZfQ0ZfUEFQUkRfVFJBSU5fRU5BQkxFX1MJMAogI2RlZmluZSBBUl9QSFlfUEFQUkRfVFJBSU5FUl9DTlRMMV9DRl9QQVBSRF9BR0MyX1NFVFRMSU5HCTB4MDAwMDAwN2UKQEAgLTk2MSwxMSArMTAwNSwxNSBAQAogI2RlZmluZSBBUl9QSFlfUEFQUkRfVFJBSU5FUl9DTlRMMV9DRl9QQVBSRF9MQl9TS0lQCQkweDAwMDNmMDAwCiAjZGVmaW5lIEFSX1BIWV9QQVBSRF9UUkFJTkVSX0NOVEwxX0NGX1BBUFJEX0xCX1NLSVBfUwkJMTIKIAotI2RlZmluZSBBUl9QSFlfUEFQUkRfVFJBSU5FUl9DTlRMMgkJCQkoQVJfU01fQkFTRSArIDB4NDk0KQorI2RlZmluZSBBUl9QSFlfUEFQUkRfVFJBSU5FUl9DTlRMMgkJCQkoQVJfU01fQkFTRSArIFwKKwkJCQkJCQkJIChBUl9TUkVWXzk0ODUoYWgpID8gXAorCQkJCQkJCQkgIDB4NTg0IDogMHg0OTQpKQogI2RlZmluZSBBUl9QSFlfUEFQUkRfVFJBSU5FUl9DTlRMMl9DRl9QQVBSRF9JTklUX1JYX0JCX0dBSU4JMHhGRkZGRkZGRgogI2RlZmluZSBBUl9QSFlfUEFQUkRfVFJBSU5FUl9DTlRMMl9DRl9QQVBSRF9JTklUX1JYX0JCX0dBSU5fUwkwCiAKLSNkZWZpbmUgQVJfUEhZX1BBUFJEX1RSQUlORVJfQ05UTDMJCQkJKEFSX1NNX0JBU0UgKyAweDQ5OCkKKyNkZWZpbmUgQVJfUEhZX1BBUFJEX1RSQUlORVJfQ05UTDMJCQkJKEFSX1NNX0JBU0UgKyBcCisJCQkJCQkJCSAoQVJfU1JFVl85NDg1KGFoKSA/IFwKKwkJCQkJCQkJICAweDU4OCA6IDB4NDk4KSkKICNkZWZpbmUgQVJfUEhZX1BBUFJEX1RSQUlORVJfQ05UTDNfQ0ZfUEFQUkRfQURDX0RFU0lSRURfU0laRQkweDAwMDAwMDNmCiAjZGVmaW5lIEFSX1BIWV9QQVBSRF9UUkFJTkVSX0NOVEwzX0NGX1BBUFJEX0FEQ19ERVNJUkVEX1NJWkVfUwkwCiAjZGVmaW5lIEFSX1BIWV9QQVBSRF9UUkFJTkVSX0NOVEwzX0NGX1BBUFJEX1FVSUNLX0RST1AJCTB4MDAwMDBmYzAKQEAgLTk4MSw3ICsxMDI5LDkgQEAKICNkZWZpbmUgQVJfUEhZX1BBUFJEX1RSQUlORVJfQ05UTDNfQ0ZfUEFQUkRfQkJUWE1JWF9ESVNBQkxFCTB4MjAwMDAwMDAKICNkZWZpbmUgQVJfUEhZX1BBUFJEX1RSQUlORVJfQ05UTDNfQ0ZfUEFQUkRfQkJUWE1JWF9ESVNBQkxFX1MJMjkKIAotI2RlZmluZSBBUl9QSFlfUEFQUkRfVFJBSU5FUl9DTlRMNAkJCQkoQVJfU01fQkFTRSArIDB4NDljKQorI2RlZmluZSBBUl9QSFlfUEFQUkRfVFJBSU5FUl9DTlRMNAkJCQkoQVJfU01fQkFTRSArIFwKKwkJCQkJCQkJIChBUl9TUkVWXzk0ODUoYWgpID8gXAorCQkJCQkJCQkgIDB4NThjIDogMHg0OWMpKQogI2RlZmluZSBBUl9QSFlfUEFQUkRfVFJBSU5FUl9DTlRMNF9DRl9QQVBSRF9OVU1fVFJBSU5fU0FNUExFUwkweDAzZmYwMDAwCiAjZGVmaW5lIEFSX1BIWV9QQVBSRF9UUkFJTkVSX0NOVEw0X0NGX1BBUFJEX05VTV9UUkFJTl9TQU1QTEVTX1MJMTYKICNkZWZpbmUgQVJfUEhZX1BBUFJEX1RSQUlORVJfQ05UTDRfQ0ZfUEFQUkRfU0FGRVRZX0RFTFRBCTB4MDAwMGYwMDAKQEAgLTEwNDAsNiArMTA5MCwxNCBAQAogI2RlZmluZSBBUl9QSFlfUE9XRVJUWF9SQVRFNV9QT1dFUlRYSFQyMF8wCTB4M0YKICNkZWZpbmUgQVJfUEhZX1BPV0VSVFhfUkFURTVfUE9XRVJUWEhUMjBfMF9TCTAKIAorI2RlZmluZSBBUl9QSFlfUE9XRVJUWF9SQVRFNgkJCShBUl9TTV9CQVNFICsgMHgxZDQpCisjZGVmaW5lIEFSX1BIWV9QT1dFUlRYX1JBVEU2X1BPV0VSVFhIVDIwXzUJMHgzRjAwCisjZGVmaW5lIEFSX1BIWV9QT1dFUlRYX1JBVEU2X1BPV0VSVFhIVDIwXzVfUwk4CisKKyNkZWZpbmUgQVJfUEhZX1BPV0VSVFhfUkFURTgJCQkoQVJfU01fQkFTRSArIDB4MWRjKQorI2RlZmluZSBBUl9QSFlfUE9XRVJUWF9SQVRFOF9QT1dFUlRYSFQ0MF81CTB4M0YwMAorI2RlZmluZSBBUl9QSFlfUE9XRVJUWF9SQVRFOF9QT1dFUlRYSFQ0MF81X1MJOAorCiB2b2lkIGFyOTAwM19od19zZXRfY2hhaW5fbWFza3Moc3RydWN0IGF0aF9odyAqYWgsIHU4IHJ4LCB1OCB0eCk7CiAKICNlbmRpZiAgLyogQVI5MDAzX1BIWV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5NDg1X2luaXR2YWxzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5NDg1X2luaXR2YWxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBkZTNkOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjk0ODVfaW5pdHZhbHMuaApAQCAtMCwwICsxLDk0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVmIElOSVRWQUxTXzk0ODVfSAorI2RlZmluZSBJTklUVkFMU185NDg1X0gKKworc3RhdGljIGNvbnN0IHUzMiBhcjk0ODVDb21tb25fMV8wW11bMl0gPSB7CisJLyogICBBZGRyICAgICBhbGxtb2RlcyAqLworCXsweDAwMDA3MDEwLCAweDAwMDAwMDIyfSwKKwl7MHgwMDAwNzAyMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDcwMzQsIDB4MDAwMDAwMDJ9LAorCXsweDAwMDA3MDM4LCAweDAwMDAwNGMyfSwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgYXI5NDg1XzFfMF9tYWNfcG9zdGFtYmxlW11bNV0gPSB7CisJLyogQWRkciAgICAgNUdfSFQyMCAgICAgNUdfSFQ0MCAgICAgMkdfSFQ0MCAgICAgMkdfSFQyMCAgICAqLworCXsweDAwMDAxMDMwLCAweDAwMDAwMjMwLCAweDAwMDAwNDYwLCAweDAwMDAwMmMwLCAweDAwMDAwMTYwfSwKKwl7MHgwMDAwMTA3MCwgMHgwMDAwMDE2OCwgMHgwMDAwMDJkMCwgMHgwMDAwMDMxOCwgMHgwMDAwMDE4Y30sCisJezB4MDAwMDEwYjAsIDB4MDAwMDBlNjAsIDB4MDAwMDFjYzAsIDB4MDAwMDdjNzAsIDB4MDAwMDNlMzh9LAorCXsweDAwMDA4MDE0LCAweDAzZTgwM2U4LCAweDA3ZDAwN2QwLCAweDEwODAxNjAwLCAweDA4NDAwYjAwfSwKKwl7MHgwMDAwODAxYywgMHgxMjhkODAyNywgMHgxMjhkODA0ZiwgMHgxMmUwMDA1NywgMHgxMmUwMDAyYn0sCisJezB4MDAwMDgxMjAsIDB4MDhmMDQ4MDAsIDB4MDhmMDQ4MDAsIDB4MDhmMDQ4MTAsIDB4MDhmMDQ4MTB9LAorCXsweDAwMDA4MWQwLCAweDAwMDAzMjEwLCAweDAwMDAzMjEwLCAweDAwMDAzMjBhLCAweDAwMDAzMjBhfSwKKwl7MHgwMDAwODMxOCwgMHgwMDAwM2U4MCwgMHgwMDAwN2QwMCwgMHgwMDAwNjg4MCwgMHgwMDAwMzQ0MH0sCit9OworCitzdGF0aWMgY29uc3QgdTMyIGFyOTQ4NV8xXzBfcGNpZV9waHlfcGxsX29uX2Nsa3JlcV9kaXNhYmxlX0wxW11bMl0gPSB7CisJLyogICBBZGRyICAgICBhbGxtb2RlcyAqLworCXsweDAwMDE4YzAwLCAweDEwMjEyZTVlfSwKKwl7MHgwMDAxOGMwNCwgMHgwMDA4MDFkOH0sCisJezB4MDAwMThjMDgsIDB4MDAwMDU4MGN9LAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBhcjk0ODVDb21tb25fd29feGxuYV9yeF9nYWluXzFfMFtdWzJdID0geworCS8qICAgQWRkciAgICAgYWxsbW9kZXMgKi8KKwl7MHgwMDAwYTAwMCwgMHgwMDAxMDAwMH0sCisJezB4MDAwMGEwMDQsIDB4MDAwMzAwMDJ9LAorCXsweDAwMDBhMDA4LCAweDAwMDUwMDA0fSwKKwl7MHgwMDAwYTAwYywgMHgwMDgxMDA4MH0sCisJezB4MDAwMGEwMTAsIDB4MDE4MDAwODJ9LAorCXsweDAwMDBhMDE0LCAweDAxODIwMTgxfSwKKwl7MHgwMDAwYTAxOCwgMHgwMTg0MDE4M30sCisJezB4MDAwMGEwMWMsIDB4MDE4ODAxODV9LAorCXsweDAwMDBhMDIwLCAweDAxOGEwMTg5fSwKKwl7MHgwMDAwYTAyNCwgMHgwMjg1MDI4NH0sCisJezB4MDAwMGEwMjgsIDB4MDI4OTAyODh9LAorCXsweDAwMDBhMDJjLCAweDAzODUwMzg0fSwKKwl7MHgwMDAwYTAzMCwgMHgwMzg5MDM4OH0sCisJezB4MDAwMGEwMzQsIDB4MDM4YjAzOGF9LAorCXsweDAwMDBhMDM4LCAweDAzOGQwMzhjfSwKKwl7MHgwMDAwYTAzYywgMHgwMzkxMDM5MH0sCisJezB4MDAwMGEwNDAsIDB4MDM5MzAzOTJ9LAorCXsweDAwMDBhMDQ0LCAweDAzOTUwMzk0fSwKKwl7MHgwMDAwYTA0OCwgMHgwMDAwMDM5Nn0sCisJezB4MDAwMGEwNGMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMDUwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTA1NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwNTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMDVjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTA2MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwNjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMDY4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTA2YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwNzAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMDc0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTA3OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwN2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMDgwLCAweDI4MjgyODI4fSwKKwl7MHgwMDAwYTA4NCwgMHgyODI4MjgyOH0sCisJezB4MDAwMGEwODgsIDB4MjgyODI4Mjh9LAorCXsweDAwMDBhMDhjLCAweDI4MjgyODI4fSwKKwl7MHgwMDAwYTA5MCwgMHgyODI4MjgyOH0sCisJezB4MDAwMGEwOTQsIDB4MjEyMTIxMjh9LAorCXsweDAwMDBhMDk4LCAweDE3MWMxYzFjfSwKKwl7MHgwMDAwYTA5YywgMHgwMjAyMDIxMn0sCisJezB4MDAwMGEwYTAsIDB4MDAwMDAyMDJ9LAorCXsweDAwMDBhMGE0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTBhOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwYWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMGIwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTBiNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwYjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMGJjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTBjMCwgMHgwMDFmMDAwMH0sCisJezB4MDAwMGEwYzQsIDB4MTExZjExMDB9LAorCXsweDAwMDBhMGM4LCAweDExMWQxMTFlfSwKKwl7MHgwMDAwYTBjYywgMHgxMTFiMTExY30sCisJezB4MDAwMGEwZDAsIDB4MjIwMzIyMDR9LAorCXsweDAwMDBhMGQ0LCAweDIyMDEyMjAyfSwKKwl7MHgwMDAwYTBkOCwgMHgyMjFmMjIwMH0sCisJezB4MDAwMGEwZGMsIDB4MjIxZDIyMWV9LAorCXsweDAwMDBhMGUwLCAweDMzMDEzMzAyfSwKKwl7MHgwMDAwYTBlNCwgMHgzMzFmMzMwMH0sCisJezB4MDAwMGEwZTgsIDB4NDQwMjMzMWV9LAorCXsweDAwMDBhMGVjLCAweDQ0MDA0NDAxfSwKKwl7MHgwMDAwYTBmMCwgMHg0NDFlNDQxZn0sCisJezB4MDAwMGEwZjQsIDB4NTUwMTU1MDJ9LAorCXsweDAwMDBhMGY4LCAweDU1MWY1NTAwfSwKKwl7MHgwMDAwYTBmYywgMHg2NjAyNTUxZX0sCisJezB4MDAwMGExMDAsIDB4NjYwMDY2MDF9LAorCXsweDAwMDBhMTA0LCAweDY2MWU2NjFmfSwKKwl7MHgwMDAwYTEwOCwgMHg3NzAzNjYxZH0sCisJezB4MDAwMGExMGMsIDB4NzcwMTc3MDJ9LAorCXsweDAwMDBhMTEwLCAweDAwMDA3NzAwfSwKKwl7MHgwMDAwYTExNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExMTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMTFjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTEyMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExMjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMTI4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTEyYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExMzAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMTM0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTEzOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExM2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMTQwLCAweDAwMWYwMDAwfSwKKwl7MHgwMDAwYTE0NCwgMHgxMTFmMTEwMH0sCisJezB4MDAwMGExNDgsIDB4MTExZDExMWV9LAorCXsweDAwMDBhMTRjLCAweDExMWIxMTFjfSwKKwl7MHgwMDAwYTE1MCwgMHgyMjAzMjIwNH0sCisJezB4MDAwMGExNTQsIDB4MjIwMTIyMDJ9LAorCXsweDAwMDBhMTU4LCAweDIyMWYyMjAwfSwKKwl7MHgwMDAwYTE1YywgMHgyMjFkMjIxZX0sCisJezB4MDAwMGExNjAsIDB4MzMwMTMzMDJ9LAorCXsweDAwMDBhMTY0LCAweDMzMWYzMzAwfSwKKwl7MHgwMDAwYTE2OCwgMHg0NDAyMzMxZX0sCisJezB4MDAwMGExNmMsIDB4NDQwMDQ0MDF9LAorCXsweDAwMDBhMTcwLCAweDQ0MWU0NDFmfSwKKwl7MHgwMDAwYTE3NCwgMHg1NTAxNTUwMn0sCisJezB4MDAwMGExNzgsIDB4NTUxZjU1MDB9LAorCXsweDAwMDBhMTdjLCAweDY2MDI1NTFlfSwKKwl7MHgwMDAwYTE4MCwgMHg2NjAwNjYwMX0sCisJezB4MDAwMGExODQsIDB4NjYxZTY2MWZ9LAorCXsweDAwMDBhMTg4LCAweDc3MDM2NjFkfSwKKwl7MHgwMDAwYTE4YywgMHg3NzAxNzcwMn0sCisJezB4MDAwMGExOTAsIDB4MDAwMDc3MDB9LAorCXsweDAwMDBhMTk0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTE5OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExOWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWEwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFhNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExYTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWFjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFiMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExYjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWI4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFiYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExYzAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWM0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFjOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExY2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWQwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFkNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExZDgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWRjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFlMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExZTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWU4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFlYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExZjAsIDB4MDAwMDAzOTZ9LAorCXsweDAwMDBhMWY0LCAweDAwMDAwMzk2fSwKKwl7MHgwMDAwYTFmOCwgMHgwMDAwMDM5Nn0sCisJezB4MDAwMGExZmMsIDB4MDAwMDAyOTZ9LAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBhcjk0ODVNb2Rlc19oaWdoX3Bvd2VyX3R4X2dhaW5fMV8wW11bNV0gPSB7CisJLyogICBBZGRyICAgICAgNUdfSFQyMCAgICAgNUdfSFQ0MCAgICAgMkdfSFQ0MCAgICAgMkdfSFQyMCAqLworCXsweDAwMDBhNDEwLCAweDAwMDA1MGQ5LCAweDAwMDA1MGQ5LCAweDAwMDA1MGQ4LCAweDAwMDA1MGQ4fSwKKwl7MHgwMDAwYTUwMCwgMHgwMDAyMjIwMCwgMHgwMDAyMjIwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGE1MDQsIDB4MDUwNjIwMDIsIDB4MDUwNjIwMDIsIDB4MDQwMDAwMDIsIDB4MDQwMDAwMDJ9LAorCXsweDAwMDBhNTA4LCAweDBjMDAyZTAwLCAweDBjMDAyZTAwLCAweDA4MDAwMDA0LCAweDA4MDAwMDA0fSwKKwl7MHgwMDAwYTUwYywgMHgxMTA2MjIwMiwgMHgxMTA2MjIwMiwgMHgwZDAwMDIwMCwgMHgwZDAwMDIwMH0sCisJezB4MDAwMGE1MTAsIDB4MTcwMjJlMDAsIDB4MTcwMjJlMDAsIDB4MTEwMDAyMDIsIDB4MTEwMDAyMDJ9LAorCXsweDAwMDBhNTE0LCAweDFkMDAwZWMyLCAweDFkMDAwZWMyLCAweDE1MDAwNDAwLCAweDE1MDAwNDAwfSwKKwl7MHgwMDAwYTUxOCwgMHgyNTAyMGVjMCwgMHgyNTAyMGVjMCwgMHgxOTAwMDQwMiwgMHgxOTAwMDQwMn0sCisJezB4MDAwMGE1MWMsIDB4MmIwMjBlYzMsIDB4MmIwMjBlYzMsIDB4MWQwMDA0MDQsIDB4MWQwMDA0MDR9LAorCXsweDAwMDBhNTIwLCAweDJmMDAxZjA0LCAweDJmMDAxZjA0LCAweDIxMDAwNjAzLCAweDIxMDAwNjAzfSwKKwl7MHgwMDAwYTUyNCwgMHgzNTAwMWZjNCwgMHgzNTAwMWZjNCwgMHgyNTAwMDYwNSwgMHgyNTAwMDYwNX0sCisJezB4MDAwMGE1MjgsIDB4M2MwMjJmMDQsIDB4M2MwMjJmMDQsIDB4MmEwMDBhMDMsIDB4MmEwMDBhMDN9LAorCXsweDAwMDBhNTJjLCAweDQxMDIzZTg1LCAweDQxMDIzZTg1LCAweDJjMDAwYTA0LCAweDJjMDAwYTA0fSwKKwl7MHgwMDAwYTUzMCwgMHg0ODAyM2VjNiwgMHg0ODAyM2VjNiwgMHgyZTAwMGEyMCwgMHgyZTAwMGEyMH0sCisJezB4MDAwMGE1MzQsIDB4NGQwMjNmMDEsIDB4NGQwMjNmMDEsIDB4MzQwMDBlMjAsIDB4MzQwMDBlMjB9LAorCXsweDAwMDBhNTM4LCAweDUzMDIzZjRiLCAweDUzMDIzZjRiLCAweDM4MDAwZTIyLCAweDM4MDAwZTIyfSwKKwl7MHgwMDAwYTUzYywgMHg1YTAyN2YwOSwgMHg1YTAyN2YwOSwgMHgzYzAwMGUyNCwgMHgzYzAwMGUyNH0sCisJezB4MDAwMGE1NDAsIDB4NWYwMjdmYzksIDB4NWYwMjdmYzksIDB4NDAwMDBlMjYsIDB4NDAwMDBlMjZ9LAorCXsweDAwMDBhNTQ0LCAweDY1MDJmZWNhLCAweDY1MDJmZWNhLCAweDQzMDAxNjQwLCAweDQzMDAxNjQwfSwKKwl7MHgwMDAwYTU0OCwgMHg2YjAyZmY0YSwgMHg2YjAyZmY0YSwgMHg0NjAwMTY2MCwgMHg0NjAwMTY2MH0sCisJezB4MDAwMGE1NGMsIDB4NzIwM2ZlY2EsIDB4NzIwM2ZlY2EsIDB4NDkwMDE4NjEsIDB4NDkwMDE4NjF9LAorCXsweDAwMDBhNTUwLCAweDc3MDNmZjBiLCAweDc3MDNmZjBiLCAweDRjMDAxYTgxLCAweDRjMDAxYTgxfSwKKwl7MHgwMDAwYTU1NCwgMHg3ZDA2ZmZjYiwgMHg3ZDA2ZmZjYiwgMHg0ZjAwMWE4MywgMHg0ZjAwMWE4M30sCisJezB4MDAwMGE1NTgsIDB4ODQwN2ZmMGIsIDB4ODQwN2ZmMGIsIDB4NTQwMDFjODUsIDB4NTQwMDFjODV9LAorCXsweDAwMDBhNTVjLCAweDg5MDdmZmNiLCAweDg5MDdmZmNiLCAweDU4MDAxY2U1LCAweDU4MDAxY2U1fSwKKwl7MHgwMDAwYTU2MCwgMHg5MDBmZmYwYiwgMHg5MDBmZmYwYiwgMHg1YjAwMWNlOSwgMHg1YjAwMWNlOX0sCisJezB4MDAwMGE1NjQsIDB4OTYwZmZmY2IsIDB4OTYwZmZmY2IsIDB4NjAwMDFlZWIsIDB4NjAwMDFlZWJ9LAorCXsweDAwMDBhNTY4LCAweDljMWZmZjBiLCAweDljMWZmZjBiLCAweDYwMDAxZWViLCAweDYwMDAxZWVifSwKKwl7MHgwMDAwYTU2YywgMHg5YzFmZmYwYiwgMHg5YzFmZmYwYiwgMHg2MDAwMWVlYiwgMHg2MDAwMWVlYn0sCisJezB4MDAwMGE1NzAsIDB4OWMxZmZmMGIsIDB4OWMxZmZmMGIsIDB4NjAwMDFlZWIsIDB4NjAwMDFlZWJ9LAorCXsweDAwMDBhNTc0LCAweDljMWZmZjBiLCAweDljMWZmZjBiLCAweDYwMDAxZWViLCAweDYwMDAxZWVifSwKKwl7MHgwMDAwYTU3OCwgMHg5YzFmZmYwYiwgMHg5YzFmZmYwYiwgMHg2MDAwMWVlYiwgMHg2MDAwMWVlYn0sCisJezB4MDAwMGE1N2MsIDB4OWMxZmZmMGIsIDB4OWMxZmZmMGIsIDB4NjAwMDFlZWIsIDB4NjAwMDFlZWJ9LAorCXsweDAwMDE2MDQ0LCAweDA1YjZiMmRiLCAweDA1YjZiMmRiLCAweDA1YjZiMmRiLCAweDA1YjZiMmRifSwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgYXI5NDg1XzFfMFtdWzJdID0geworCS8qICBBZGRyICAgICAgYWxsbW9kZXMgKi8KKwl7MHgwMDAwYTU4MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGE1ODQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhNTg4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTU4YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGE1OTAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhNTk0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTU5OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGE1OWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhNWEwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTVhNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGE1YTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhNWFjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTViMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGE1YjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhNWI4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTViYywgMHgwMDAwMDAwMH0sCit9OworCitzdGF0aWMgY29uc3QgdTMyIGFyOTQ4NV8xXzBfcmFkaW9fY29yZVtdWzJdID0geworCS8qICAgQWRkciAgICAgYWxsbW9kZXMgKi8KKwl7MHgwMDAxNjAwMCwgMHgzNmRiNmRiNn0sCisJezB4MDAwMTYwMDQsIDB4NmRiNmRiNDB9LAorCXsweDAwMDE2MDA4LCAweDczODAwMDAwfSwKKwl7MHgwMDAxNjAwYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMTYwNDAsIDB4N2Y4MGZmZjh9LAorCXsweDAwMDE2MDQ4LCAweDZjOTI0MjZlfSwKKwl7MHgwMDAxNjA0YywgMHgwMDBmMDI3OH0sCisJezB4MDAwMTYwNTAsIDB4NmRiNmRiNmN9LAorCXsweDAwMDE2MDU0LCAweDZkYjYwMDAwfSwKKwl7MHgwMDAxNjA4MCwgMHgwMDA4MDAwMH0sCisJezB4MDAwMTYwODQsIDB4MGU0ODA0OGN9LAorCXsweDAwMDE2MDg4LCAweDE0MjE0NTE0fSwKKwl7MHgwMDAxNjA4YywgMHgxMTlmMDgxZX0sCisJezB4MDAwMTYwOTAsIDB4MjQ5MjY0OTB9LAorCXsweDAwMDE2MDk4LCAweGQyOGIzMzMwfSwKKwl7MHgwMDAxNjBhMCwgMHhjMjEwOGZmZX0sCisJezB4MDAwMTYwYTQsIDB4ODEyZmMzNzB9LAorCXsweDAwMDE2MGE4LCAweDQyM2M4MDAwfSwKKwl7MHgwMDAxNjBiNCwgMHg5MjQ4MDA0MH0sCisJezB4MDAwMTYwYzAsIDB4MDA2ZGI2ZGJ9LAorCXsweDAwMDE2MGM0LCAweDAxODZkYjYwfSwKKwl7MHgwMDAxNjBjOCwgMHg2ZGI2ZGI2Y30sCisJezB4MDAwMTYwY2MsIDB4NmRlNmZiZTB9LAorCXsweDAwMDE2MGQwLCAweGY3ZGZjZjNjfSwKKwl7MHgwMDAxNjEwMCwgMHgwNGNiMDAwMX0sCisJezB4MDAwMTYxMDQsIDB4ZmZmODAwMTV9LAorCXsweDAwMDE2MTA4LCAweDAwMDgwMDEwfSwKKwl7MHgwMDAxNjE0NCwgMHgwMTg4NDA4MH0sCisJezB4MDAwMTYxNDgsIDB4MDAwMDgwNDB9LAorCXsweDAwMDE2MTgwLCAweDA4NDUzMzMzfSwKKwl7MHgwMDAxNjE4NCwgMHgxOGU4MmYwMX0sCisJezB4MDAwMTYxODgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2MThjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNjI0MCwgMHgwODQwMDAwMH0sCisJezB4MDAwMTYyNDQsIDB4MWJmOTBmMDB9LAorCXsweDAwMDE2MjQ4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNjI0YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMTYyODAsIDB4MDEwMDAwMTV9LAorCXsweDAwMDE2Mjg0LCAweDAwZDMwMDAwfSwKKwl7MHgwMDAxNjI4OCwgMHgwMDMxODAwMH0sCisJezB4MDAwMTYyOGMsIDB4NTAwMDAwMDB9LAorCXsweDAwMDE2MjkwLCAweDRiOTYyMTBmfSwKKwl7MHgwMDAxNjM4MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMTYzODQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2Mzg4LCAweDAwODAwNzAwfSwKKwl7MHgwMDAxNjM4YywgMHgwMDgwMDcwMH0sCisJezB4MDAwMTYzOTAsIDB4MDA4MDA3MDB9LAorCXsweDAwMDE2Mzk0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNjM5OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMTYzOWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2M2EwLCAweDAwMDAwMDAxfSwKKwl7MHgwMDAxNjNhNCwgMHgwMDAwMDAwMX0sCisJezB4MDAwMTYzYTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2M2FjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNjNiMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMTYzYjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2M2I4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNjNiYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMTYzYzAsIDB4MDAwMDAwYTB9LAorCXsweDAwMDE2M2M0LCAweDAwMGMwMDAwfSwKKwl7MHgwMDAxNjNjOCwgMHgxNDAyMTQwMn0sCisJezB4MDAwMTYzY2MsIDB4MDAwMDE0MDJ9LAorCXsweDAwMDE2M2QwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNjNkNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMTZjNDAsIDB4MTMxOWMxNzh9LAorCXsweDAwMDE2YzQ0LCAweDEwMDAwMDAwfSwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgYXI5NDg1TW9kZXNfbG93ZXN0X29iX2RiX3R4X2dhaW5fMV8wW11bNV0gPSB7CisJLyogIEFkZHIgICAgICAgNUdfSFQyMCAgICAgNUdfSFQ0MCAgICAgMkdfSFQ0MCAgICAgMkdfSFQyMCAqLworCXsweDAwMDBhNDEwLCAweDAwMDA1MGQ5LCAweDAwMDA1MGQ5LCAweDAwMDA1MGQ4LCAweDAwMDA1MGQ4fSwKKwl7MHgwMDAwYTUwMCwgMHgwMDAyMjIwMCwgMHgwMDAyMjIwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGE1MDQsIDB4MDUwNjIwMDIsIDB4MDUwNjIwMDIsIDB4MDQwMDAwMDIsIDB4MDQwMDAwMDJ9LAorCXsweDAwMDBhNTA4LCAweDBjMDAyZTAwLCAweDBjMDAyZTAwLCAweDA4MDAwMDA0LCAweDA4MDAwMDA0fSwKKwl7MHgwMDAwYTUwYywgMHgxMTA2MjIwMiwgMHgxMTA2MjIwMiwgMHgwZDAwMDIwMCwgMHgwZDAwMDIwMH0sCisJezB4MDAwMGE1MTAsIDB4MTcwMjJlMDAsIDB4MTcwMjJlMDAsIDB4MTEwMDAyMDIsIDB4MTEwMDAyMDJ9LAorCXsweDAwMDBhNTE0LCAweDFkMDAwZWMyLCAweDFkMDAwZWMyLCAweDE1MDAwNDAwLCAweDE1MDAwNDAwfSwKKwl7MHgwMDAwYTUxOCwgMHgyNTAyMGVjMCwgMHgyNTAyMGVjMCwgMHgxOTAwMDQwMiwgMHgxOTAwMDQwMn0sCisJezB4MDAwMGE1MWMsIDB4MmIwMjBlYzMsIDB4MmIwMjBlYzMsIDB4MWQwMDA0MDQsIDB4MWQwMDA0MDR9LAorCXsweDAwMDBhNTIwLCAweDJmMDAxZjA0LCAweDJmMDAxZjA0LCAweDIxMDAwNjAzLCAweDIxMDAwNjAzfSwKKwl7MHgwMDAwYTUyNCwgMHgzNTAwMWZjNCwgMHgzNTAwMWZjNCwgMHgyNTAwMDYwNSwgMHgyNTAwMDYwNX0sCisJezB4MDAwMGE1MjgsIDB4M2MwMjJmMDQsIDB4M2MwMjJmMDQsIDB4MmEwMDBhMDMsIDB4MmEwMDBhMDN9LAorCXsweDAwMDBhNTJjLCAweDQxMDIzZTg1LCAweDQxMDIzZTg1LCAweDJjMDAwYTA0LCAweDJjMDAwYTA0fSwKKwl7MHgwMDAwYTUzMCwgMHg0ODAyM2VjNiwgMHg0ODAyM2VjNiwgMHgyZTAwMGEyMCwgMHgyZTAwMGEyMH0sCisJezB4MDAwMGE1MzQsIDB4NGQwMjNmMDEsIDB4NGQwMjNmMDEsIDB4MzQwMDBlMjAsIDB4MzQwMDBlMjB9LAorCXsweDAwMDBhNTM4LCAweDUzMDIzZjRiLCAweDUzMDIzZjRiLCAweDM4MDAwZTIyLCAweDM4MDAwZTIyfSwKKwl7MHgwMDAwYTUzYywgMHg1YTAyN2YwOSwgMHg1YTAyN2YwOSwgMHgzYzAwMGUyNCwgMHgzYzAwMGUyNH0sCisJezB4MDAwMGE1NDAsIDB4NWYwMjdmYzksIDB4NWYwMjdmYzksIDB4NDAwMDBlMjYsIDB4NDAwMDBlMjZ9LAorCXsweDAwMDBhNTQ0LCAweDY1MDJmZWNhLCAweDY1MDJmZWNhLCAweDQzMDAxNjQwLCAweDQzMDAxNjQwfSwKKwl7MHgwMDAwYTU0OCwgMHg2YjAyZmY0YSwgMHg2YjAyZmY0YSwgMHg0NjAwMTY2MCwgMHg0NjAwMTY2MH0sCisJezB4MDAwMGE1NGMsIDB4NzIwM2ZlY2EsIDB4NzIwM2ZlY2EsIDB4NDkwMDE4NjEsIDB4NDkwMDE4NjF9LAorCXsweDAwMDBhNTUwLCAweDc3MDNmZjBiLCAweDc3MDNmZjBiLCAweDRjMDAxYTgxLCAweDRjMDAxYTgxfSwKKwl7MHgwMDAwYTU1NCwgMHg3ZDA2ZmZjYiwgMHg3ZDA2ZmZjYiwgMHg0ZjAwMWE4MywgMHg0ZjAwMWE4M30sCisJezB4MDAwMGE1NTgsIDB4ODQwN2ZmMGIsIDB4ODQwN2ZmMGIsIDB4NTQwMDFjODUsIDB4NTQwMDFjODV9LAorCXsweDAwMDBhNTVjLCAweDg5MDdmZmNiLCAweDg5MDdmZmNiLCAweDU4MDAxY2U1LCAweDU4MDAxY2U1fSwKKwl7MHgwMDAwYTU2MCwgMHg5MDBmZmYwYiwgMHg5MDBmZmYwYiwgMHg1YjAwMWNlOSwgMHg1YjAwMWNlOX0sCisJezB4MDAwMGE1NjQsIDB4OTYwZmZmY2IsIDB4OTYwZmZmY2IsIDB4NjAwMDFlZWIsIDB4NjAwMDFlZWJ9LAorCXsweDAwMDBhNTY4LCAweDljMWZmZjBiLCAweDljMWZmZjBiLCAweDYwMDAxZWViLCAweDYwMDAxZWVifSwKKwl7MHgwMDAwYTU2YywgMHg5YzFmZmYwYiwgMHg5YzFmZmYwYiwgMHg2MDAwMWVlYiwgMHg2MDAwMWVlYn0sCisJezB4MDAwMGE1NzAsIDB4OWMxZmZmMGIsIDB4OWMxZmZmMGIsIDB4NjAwMDFlZWIsIDB4NjAwMDFlZWJ9LAorCXsweDAwMDBhNTc0LCAweDljMWZmZjBiLCAweDljMWZmZjBiLCAweDYwMDAxZWViLCAweDYwMDAxZWVifSwKKwl7MHgwMDAwYTU3OCwgMHg5YzFmZmYwYiwgMHg5YzFmZmYwYiwgMHg2MDAwMWVlYiwgMHg2MDAwMWVlYn0sCisJezB4MDAwMGE1N2MsIDB4OWMxZmZmMGIsIDB4OWMxZmZmMGIsIDB4NjAwMDFlZWIsIDB4NjAwMDFlZWJ9LAorCXsweDAwMDE2MDQ0LCAweDA1YjZiMmRiLCAweDA1YjZiMmRiLCAweDA1YjZiMmRiLCAweDA1YjZiMmRifSwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgYXI5NDg1XzFfMF9iYXNlYmFuZF9jb3JlW11bMl0gPSB7CisJLyogQWRkciAgICAgIGFsbG1vZGVzICAqLworCXsweDAwMDA5ODAwLCAweGFmZTY4ZTMwfSwKKwl7MHgwMDAwOTgwNCwgMHhmZDE0ZTAwMH0sCisJezB4MDAwMDk4MDgsIDB4OWMwYThmNmJ9LAorCXsweDAwMDA5ODBjLCAweDA0ODAwMDAwfSwKKwl7MHgwMDAwOTgxNCwgMHg5MjgwYzAwYX0sCisJezB4MDAwMDk4MTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5ODFjLCAweDAwMDIwMDI4fSwKKwl7MHgwMDAwOTgzNCwgMHg1ZjNjYTNkZX0sCisJezB4MDAwMDk4MzgsIDB4MDEwOGVjZmZ9LAorCXsweDAwMDA5ODNjLCAweDE0NzUwNjAwfSwKKwl7MHgwMDAwOTg4MCwgMHgyMDFmZmYwMH0sCisJezB4MDAwMDk4ODQsIDB4MDAwMDEwNDJ9LAorCXsweDAwMDA5OGE0LCAweDAwMjAwNDAwfSwKKwl7MHgwMDAwOThiMCwgMHg1MjQ0MGJiZX0sCisJezB4MDAwMDk4YmMsIDB4MDAwMDAwMDJ9LAorCXsweDAwMDA5OGQwLCAweDAwNGI2YThlfSwKKwl7MHgwMDAwOThkNCwgMHgwMDAwMDgyMH0sCisJezB4MDAwMDk4ZGMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5OGYwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOThmNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDljMDQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YzA4LCAweDAzMjAwMDAwfSwKKwl7MHgwMDAwOWMwYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDljMTAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5YzE0LCAweDAwMDQ2Mzg0fSwKKwl7MHgwMDAwOWMxOCwgMHgwNWI2YjQ0MH0sCisJezB4MDAwMDljMWMsIDB4MDBiNmI0NDB9LAorCXsweDAwMDA5ZDAwLCAweGMwODBhMzMzfSwKKwl7MHgwMDAwOWQwNCwgMHg0MDIwNmMxMH0sCisJezB4MDAwMDlkMDgsIDB4MDA5YzQwNjB9LAorCXsweDAwMDA5ZDBjLCAweDE4ODM4MDBhfSwKKwl7MHgwMDAwOWQxMCwgMHgwMTgzNDA2MX0sCisJezB4MDAwMDlkMTQsIDB4MDBjMDA0MDB9LAorCXsweDAwMDA5ZDE4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWQxYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDllMDgsIDB4MDAzODIzM2N9LAorCXsweDAwMDA5ZTI0LCAweDk5MGJiNTE1fSwKKwl7MHgwMDAwOWUyOCwgMHgwYTZmMDAwMH0sCisJezB4MDAwMDllMzAsIDB4MDYzMzZmNzd9LAorCXsweDAwMDA5ZTM0LCAweDZhZjY1MzJmfSwKKwl7MHgwMDAwOWUzOCwgMHgwY2M4MGMwMH0sCisJezB4MDAwMDllNDAsIDB4MGQyNjE4MjB9LAorCXsweDAwMDA5ZTRjLCAweDAwMDAxMDA0fSwKKwl7MHgwMDAwOWU1MCwgMHgwMGZmMDNmMX0sCisJezB4MDAwMDlmYzAsIDB4ODBiZTQ3ODh9LAorCXsweDAwMDA5ZmM0LCAweDAwMDFlZmI1fSwKKwl7MHgwMDAwOWZjYywgMHg0MDAwMDAxNH0sCisJezB4MDAwMGEyMGMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMjEwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTIyMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEyMjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMjI4LCAweDEwMDAyMzEwfSwKKwl7MHgwMDAwYTIzYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEyNDQsIDB4MGMwMDAwMDB9LAorCXsweDAwMDBhMmEwLCAweDAwMDAwMDAxfSwKKwl7MHgwMDAwYTJjMCwgMHgwMDAwMDAwMX0sCisJezB4MDAwMGEyYzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMmNjLCAweDE4YzQzNDMzfSwKKwl7MHgwMDAwYTJkNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEyZGMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMmUwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTJlNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEyZTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMmVjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTJmMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEyZjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMmY4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTM0NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzNGMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMzUwLCAweDAwMDBhMDAwfSwKKwl7MHgwMDAwYTM2NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzNzAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMzkwLCAweDAwMDAwMDAxfSwKKwl7MHgwMDAwYTM5NCwgMHgwMDAwMDQ0NH0sCisJezB4MDAwMGEzOTgsIDB4MDAxZjBlMGZ9LAorCXsweDAwMDBhMzljLCAweDAwNzUzOTNmfSwKKwl7MHgwMDAwYTNhMCwgMHhiNzlmNjQyN30sCisJezB4MDAwMGEzYTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhM2E4LCAweGFhYWFhYWFhfSwKKwl7MHgwMDAwYTNhYywgMHgzYzQ2NjQ3OH0sCisJezB4MDAwMGEzYzAsIDB4MjAyMDIwMjB9LAorCXsweDAwMDBhM2M0LCAweDIyMjIyMjIwfSwKKwl7MHgwMDAwYTNjOCwgMHgyMDIwMDAyMH0sCisJezB4MDAwMGEzY2MsIDB4MjAyMDIwMjB9LAorCXsweDAwMDBhM2QwLCAweDIwMjAyMDIwfSwKKwl7MHgwMDAwYTNkNCwgMHgyMDIwMjAyMH0sCisJezB4MDAwMGEzZDgsIDB4MjAyMDIwMjB9LAorCXsweDAwMDBhM2RjLCAweDIwMjAyMDIwfSwKKwl7MHgwMDAwYTNlMCwgMHgyMDIwMjAyMH0sCisJezB4MDAwMGEzZTQsIDB4MjAyMDIwMjB9LAorCXsweDAwMDBhM2U4LCAweDIwMjAyMDIwfSwKKwl7MHgwMDAwYTNlYywgMHgyMDIwMjAyMH0sCisJezB4MDAwMGEzZjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhM2Y0LCAweDAwMDAwMDA2fSwKKwl7MHgwMDAwYTNmOCwgMHgwY2RiZDM4MH0sCisJezB4MDAwMGEzZmMsIDB4MDAwZjBmMDF9LAorCXsweDAwMDBhNDAwLCAweDhmYTkxZjAxfSwKKwl7MHgwMDAwYTQwNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGE0MDgsIDB4MGU3OWU1YzZ9LAorCXsweDAwMDBhNDBjLCAweDAwODIwODIwfSwKKwl7MHgwMDAwYTQxNCwgMHgxY2U3MzljZX0sCisJezB4MDAwMGE0MTgsIDB4MmQwMDExY2V9LAorCXsweDAwMDBhNDFjLCAweDFjZTczOWNlfSwKKwl7MHgwMDAwYTQyMCwgMHgwMDAwMDFjZX0sCisJezB4MDAwMGE0MjQsIDB4MWNlNzM5Y2V9LAorCXsweDAwMDBhNDI4LCAweDAwMDAwMWNlfSwKKwl7MHgwMDAwYTQyYywgMHgxY2U3MzljZX0sCisJezB4MDAwMGE0MzAsIDB4MWNlNzM5Y2V9LAorCXsweDAwMDBhNDM0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTQzOCwgMHgwMDAwMTgwMX0sCisJezB4MDAwMGE0M2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhNDQwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTQ0NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGE0NDgsIDB4MDQwMDAwMDB9LAorCXsweDAwMDBhNDRjLCAweDAwMDAwMDAxfSwKKwl7MHgwMDAwYTQ1MCwgMHgwMDAxMDAwMH0sCisJezB4MDAwMGE0NTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhNWM0LCAweDNmYWQ5ZDc0fSwKKwl7MHgwMDAwYTVjOCwgMHgwMDQ4MDYwYX0sCisJezB4MDAwMGE1Y2MsIDB4MDAwMDA2Mzd9LAorCXsweDAwMDBhNzYwLCAweDAzMDIwMTAwfSwKKwl7MHgwMDAwYTc2NCwgMHgwOTA4MDUwNH0sCisJezB4MDAwMGE3NjgsIDB4MGQwYzBiMGF9LAorCXsweDAwMDBhNzZjLCAweDEzMTIxMTEwfSwKKwl7MHgwMDAwYTc3MCwgMHgzMTMwMTUxNH0sCisJezB4MDAwMGE3NzQsIDB4MzUzNDMzMzJ9LAorCXsweDAwMDBhNzc4LCAweDAwMDAwMDM2fSwKKwl7MHgwMDAwYTc4MCwgMHgwMDAwMDgzOH0sCisJezB4MDAwMGE3YzAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhN2M0LCAweGZmZmZmZmZjfSwKKwl7MHgwMDAwYTdjOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGE3Y2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhN2QwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTdkNCwgMHgwMDAwMDAwNH0sCisJezB4MDAwMGE3ZGMsIDB4MDAwMDAwMDF9LAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBhcjk0ODVNb2Rlc19oaWdoX29iX2RiX3R4X2dhaW5fMV8wW11bNV0gPSB7CisJLyogQWRkciAgICAgICAgNUdfSFQyMCAgICAgNUdfSFQ0MCAgICAgMkdfSFQ0MCAgICAyR19IVDIwICAqLworCXsweDAwMDBhNDEwLCAweDAwMDA1MGQ5LCAweDAwMDA1MGQ5LCAweDAwMDA1MGQ4LCAweDAwMDA1MGQ4fSwKKwl7MHgwMDAwYTUwMCwgMHgwMDAyMjIwMCwgMHgwMDAyMjIwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGE1MDQsIDB4MDUwNjIwMDIsIDB4MDUwNjIwMDIsIDB4MDQwMDAwMDIsIDB4MDQwMDAwMDJ9LAorCXsweDAwMDBhNTA4LCAweDBjMDAyZTAwLCAweDBjMDAyZTAwLCAweDA4MDAwMDA0LCAweDA4MDAwMDA0fSwKKwl7MHgwMDAwYTUwYywgMHgxMTA2MjIwMiwgMHgxMTA2MjIwMiwgMHgwZDAwMDIwMCwgMHgwZDAwMDIwMH0sCisJezB4MDAwMGE1MTAsIDB4MTcwMjJlMDAsIDB4MTcwMjJlMDAsIDB4MTEwMDAyMDIsIDB4MTEwMDAyMDJ9LAorCXsweDAwMDBhNTE0LCAweDFkMDAwZWMyLCAweDFkMDAwZWMyLCAweDE1MDAwNDAwLCAweDE1MDAwNDAwfSwKKwl7MHgwMDAwYTUxOCwgMHgyNTAyMGVjMCwgMHgyNTAyMGVjMCwgMHgxOTAwMDQwMiwgMHgxOTAwMDQwMn0sCisJezB4MDAwMGE1MWMsIDB4MmIwMjBlYzMsIDB4MmIwMjBlYzMsIDB4MWQwMDA0MDQsIDB4MWQwMDA0MDR9LAorCXsweDAwMDBhNTIwLCAweDJmMDAxZjA0LCAweDJmMDAxZjA0LCAweDIxMDAwNjAzLCAweDIxMDAwNjAzfSwKKwl7MHgwMDAwYTUyNCwgMHgzNTAwMWZjNCwgMHgzNTAwMWZjNCwgMHgyNTAwMDYwNSwgMHgyNTAwMDYwNX0sCisJezB4MDAwMGE1MjgsIDB4M2MwMjJmMDQsIDB4M2MwMjJmMDQsIDB4MmEwMDBhMDMsIDB4MmEwMDBhMDN9LAorCXsweDAwMDBhNTJjLCAweDQxMDIzZTg1LCAweDQxMDIzZTg1LCAweDJjMDAwYTA0LCAweDJjMDAwYTA0fSwKKwl7MHgwMDAwYTUzMCwgMHg0ODAyM2VjNiwgMHg0ODAyM2VjNiwgMHgyZTAwMGEyMCwgMHgyZTAwMGEyMH0sCisJezB4MDAwMGE1MzQsIDB4NGQwMjNmMDEsIDB4NGQwMjNmMDEsIDB4MzQwMDBlMjAsIDB4MzQwMDBlMjB9LAorCXsweDAwMDBhNTM4LCAweDUzMDIzZjRiLCAweDUzMDIzZjRiLCAweDM4MDAwZTIyLCAweDM4MDAwZTIyfSwKKwl7MHgwMDAwYTUzYywgMHg1YTAyN2YwOSwgMHg1YTAyN2YwOSwgMHgzYzAwMGUyNCwgMHgzYzAwMGUyNH0sCisJezB4MDAwMGE1NDAsIDB4NWYwMjdmYzksIDB4NWYwMjdmYzksIDB4NDAwMDBlMjYsIDB4NDAwMDBlMjZ9LAorCXsweDAwMDBhNTQ0LCAweDY1MDJmZWNhLCAweDY1MDJmZWNhLCAweDQzMDAxNjQwLCAweDQzMDAxNjQwfSwKKwl7MHgwMDAwYTU0OCwgMHg2YjAyZmY0YSwgMHg2YjAyZmY0YSwgMHg0NjAwMTY2MCwgMHg0NjAwMTY2MH0sCisJezB4MDAwMGE1NGMsIDB4NzIwM2ZlY2EsIDB4NzIwM2ZlY2EsIDB4NDkwMDE4NjEsIDB4NDkwMDE4NjF9LAorCXsweDAwMDBhNTUwLCAweDc3MDNmZjBiLCAweDc3MDNmZjBiLCAweDRjMDAxYTgxLCAweDRjMDAxYTgxfSwKKwl7MHgwMDAwYTU1NCwgMHg3ZDA2ZmZjYiwgMHg3ZDA2ZmZjYiwgMHg0ZjAwMWE4MywgMHg0ZjAwMWE4M30sCisJezB4MDAwMGE1NTgsIDB4ODQwN2ZmMGIsIDB4ODQwN2ZmMGIsIDB4NTQwMDFjODUsIDB4NTQwMDFjODV9LAorCXsweDAwMDBhNTVjLCAweDg5MDdmZmNiLCAweDg5MDdmZmNiLCAweDU4MDAxY2U1LCAweDU4MDAxY2U1fSwKKwl7MHgwMDAwYTU2MCwgMHg5MDBmZmYwYiwgMHg5MDBmZmYwYiwgMHg1YjAwMWNlOSwgMHg1YjAwMWNlOX0sCisJezB4MDAwMGE1NjQsIDB4OTYwZmZmY2IsIDB4OTYwZmZmY2IsIDB4NjAwMDFlZWIsIDB4NjAwMDFlZWJ9LAorCXsweDAwMDBhNTY4LCAweDljMWZmZjBiLCAweDljMWZmZjBiLCAweDYwMDAxZWViLCAweDYwMDAxZWVifSwKKwl7MHgwMDAwYTU2YywgMHg5YzFmZmYwYiwgMHg5YzFmZmYwYiwgMHg2MDAwMWVlYiwgMHg2MDAwMWVlYn0sCisJezB4MDAwMGE1NzAsIDB4OWMxZmZmMGIsIDB4OWMxZmZmMGIsIDB4NjAwMDFlZWIsIDB4NjAwMDFlZWJ9LAorCXsweDAwMDBhNTc0LCAweDljMWZmZjBiLCAweDljMWZmZjBiLCAweDYwMDAxZWViLCAweDYwMDAxZWVifSwKKwl7MHgwMDAwYTU3OCwgMHg5YzFmZmYwYiwgMHg5YzFmZmYwYiwgMHg2MDAwMWVlYiwgMHg2MDAwMWVlYn0sCisJezB4MDAwMGE1N2MsIDB4OWMxZmZmMGIsIDB4OWMxZmZmMGIsIDB4NjAwMDFlZWIsIDB4NjAwMDFlZWJ9LAorCXsweDAwMDE2MDQ0LCAweDA1YjZiMmRiLCAweDA1YjZiMmRiLCAweDA1YjZiMmRiLCAweDA1YjZiMmRifSwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgYXI5NDg1Q29tbW9uX3J4X2dhaW5fMV8wW11bMl0gPSB7CisJLyogQWRkciAgICAgIGFsbG1vZGVzICAqLworCXsweDAwMDBhMDAwLCAweDAwMDEwMDAwfSwKKwl7MHgwMDAwYTAwNCwgMHgwMDAzMDAwMn0sCisJezB4MDAwMGEwMDgsIDB4MDAwNTAwMDR9LAorCXsweDAwMDBhMDBjLCAweDAwODEwMDgwfSwKKwl7MHgwMDAwYTAxMCwgMHgwMTgwMDA4Mn0sCisJezB4MDAwMGEwMTQsIDB4MDE4MjAxODF9LAorCXsweDAwMDBhMDE4LCAweDAxODQwMTgzfSwKKwl7MHgwMDAwYTAxYywgMHgwMTg4MDE4NX0sCisJezB4MDAwMGEwMjAsIDB4MDE4YTAxODl9LAorCXsweDAwMDBhMDI0LCAweDAyODUwMjg0fSwKKwl7MHgwMDAwYTAyOCwgMHgwMjg5MDI4OH0sCisJezB4MDAwMGEwMmMsIDB4MDM4NTAzODR9LAorCXsweDAwMDBhMDMwLCAweDAzODkwMzg4fSwKKwl7MHgwMDAwYTAzNCwgMHgwMzhiMDM4YX0sCisJezB4MDAwMGEwMzgsIDB4MDM4ZDAzOGN9LAorCXsweDAwMDBhMDNjLCAweDAzOTEwMzkwfSwKKwl7MHgwMDAwYTA0MCwgMHgwMzkzMDM5Mn0sCisJezB4MDAwMGEwNDQsIDB4MDM5NTAzOTR9LAorCXsweDAwMDBhMDQ4LCAweDAwMDAwMzk2fSwKKwl7MHgwMDAwYTA0YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwNTAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMDU0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTA1OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwNWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMDYwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTA2NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwNjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMDZjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTA3MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwNzQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMDc4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTA3YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwODAsIDB4MjgyODI4Mjh9LAorCXsweDAwMDBhMDg0LCAweDI4MjgyODI4fSwKKwl7MHgwMDAwYTA4OCwgMHgyODI4MjgyOH0sCisJezB4MDAwMGEwOGMsIDB4MjgyODI4Mjh9LAorCXsweDAwMDBhMDkwLCAweDI4MjgyODI4fSwKKwl7MHgwMDAwYTA5NCwgMHgyMTIxMjEyOH0sCisJezB4MDAwMGEwOTgsIDB4MTcxYzFjMWN9LAorCXsweDAwMDBhMDljLCAweDAyMDIwMjEyfSwKKwl7MHgwMDAwYTBhMCwgMHgwMDAwMDIwMn0sCisJezB4MDAwMGEwYTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMGE4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTBhYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwYjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMGI0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTBiOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwYmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMGMwLCAweDAwMWYwMDAwfSwKKwl7MHgwMDAwYTBjNCwgMHgxMTFmMTEwMH0sCisJezB4MDAwMGEwYzgsIDB4MTExZDExMWV9LAorCXsweDAwMDBhMGNjLCAweDExMWIxMTFjfSwKKwl7MHgwMDAwYTBkMCwgMHgyMjAzMjIwNH0sCisJezB4MDAwMGEwZDQsIDB4MjIwMTIyMDJ9LAorCXsweDAwMDBhMGQ4LCAweDIyMWYyMjAwfSwKKwl7MHgwMDAwYTBkYywgMHgyMjFkMjIxZX0sCisJezB4MDAwMGEwZTAsIDB4MzMwMTMzMDJ9LAorCXsweDAwMDBhMGU0LCAweDMzMWYzMzAwfSwKKwl7MHgwMDAwYTBlOCwgMHg0NDAyMzMxZX0sCisJezB4MDAwMGEwZWMsIDB4NDQwMDQ0MDF9LAorCXsweDAwMDBhMGYwLCAweDQ0MWU0NDFmfSwKKwl7MHgwMDAwYTBmNCwgMHg1NTAxNTUwMn0sCisJezB4MDAwMGEwZjgsIDB4NTUxZjU1MDB9LAorCXsweDAwMDBhMGZjLCAweDY2MDI1NTFlfSwKKwl7MHgwMDAwYTEwMCwgMHg2NjAwNjYwMX0sCisJezB4MDAwMGExMDQsIDB4NjYxZTY2MWZ9LAorCXsweDAwMDBhMTA4LCAweDc3MDM2NjFkfSwKKwl7MHgwMDAwYTEwYywgMHg3NzAxNzcwMn0sCisJezB4MDAwMGExMTAsIDB4MDAwMDc3MDB9LAorCXsweDAwMDBhMTE0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTExOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExMWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMTIwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTEyNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExMjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMTJjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTEzMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExMzQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMTM4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTEzYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExNDAsIDB4MDAxZjAwMDB9LAorCXsweDAwMDBhMTQ0LCAweDExMWYxMTAwfSwKKwl7MHgwMDAwYTE0OCwgMHgxMTFkMTExZX0sCisJezB4MDAwMGExNGMsIDB4MTExYjExMWN9LAorCXsweDAwMDBhMTUwLCAweDIyMDMyMjA0fSwKKwl7MHgwMDAwYTE1NCwgMHgyMjAxMjIwMn0sCisJezB4MDAwMGExNTgsIDB4MjIxZjIyMDB9LAorCXsweDAwMDBhMTVjLCAweDIyMWQyMjFlfSwKKwl7MHgwMDAwYTE2MCwgMHgzMzAxMzMwMn0sCisJezB4MDAwMGExNjQsIDB4MzMxZjMzMDB9LAorCXsweDAwMDBhMTY4LCAweDQ0MDIzMzFlfSwKKwl7MHgwMDAwYTE2YywgMHg0NDAwNDQwMX0sCisJezB4MDAwMGExNzAsIDB4NDQxZTQ0MWZ9LAorCXsweDAwMDBhMTc0LCAweDU1MDE1NTAyfSwKKwl7MHgwMDAwYTE3OCwgMHg1NTFmNTUwMH0sCisJezB4MDAwMGExN2MsIDB4NjYwMjU1MWV9LAorCXsweDAwMDBhMTgwLCAweDY2MDA2NjAxfSwKKwl7MHgwMDAwYTE4NCwgMHg2NjFlNjYxZn0sCisJezB4MDAwMGExODgsIDB4NzcwMzY2MWR9LAorCXsweDAwMDBhMThjLCAweDc3MDE3NzAyfSwKKwl7MHgwMDAwYTE5MCwgMHgwMDAwNzcwMH0sCisJezB4MDAwMGExOTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMTk4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTE5YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExYTAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWE0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFhOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExYWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWIwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFiNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExYjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWJjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFjMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExYzQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWM4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFjYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExZDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWQ0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFkOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExZGMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWUwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFlNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExZTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWVjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFmMCwgMHgwMDAwMDM5Nn0sCisJezB4MDAwMGExZjQsIDB4MDAwMDAzOTZ9LAorCXsweDAwMDBhMWY4LCAweDAwMDAwMzk2fSwKKwl7MHgwMDAwYTFmYywgMHgwMDAwMDI5Nn0sCit9OworCitzdGF0aWMgY29uc3QgdTMyIGFyOTQ4NV8xXzBfcGNpZV9waHlfcGxsX29uX2Nsa3JlcV9lbmFibGVfTDFbXVsyXSA9IHsKKwkvKiAgIEFkZHIgICAgYWxsbW9kZXMgICovCisJezB4MDAwMThjMDAsIDB4MTAyNTJlNWV9LAorCXsweDAwMDE4YzA0LCAweDAwMDgwMWQ4fSwKKwl7MHgwMDAxOGMwOCwgMHgwMDAwNTgwY30sCit9OworCitzdGF0aWMgY29uc3QgdTMyIGFyOTQ4NV8xXzBfcGNpZV9waHlfY2xrcmVxX2VuYWJsZV9MMVtdWzJdID0geworCS8qICBBZGRyICAgIGFsbG1vZGVzICAgKi8KKwl7MHgwMDAxOGMwMCwgMHgxMDI1M2U1ZX0sCisJezB4MDAwMThjMDQsIDB4MDAwODAxZDh9LAorCXsweDAwMDE4YzA4LCAweDAwMDA1ODBjfSwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgYXI5NDg1XzFfMF9zb2NfcHJlYW1ibGVbXVsyXSA9IHsKKwkvKiAgIEFkZHIgICAgIGFsbG1vZGVzICovCisJezB4MDAwMDQwYTQsIDB4MDBhMGM5Yzl9LAorCXsweDAwMDA3MDQ4LCAweDAwMDAwMDA0fSwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgYXI5NDg1X2Zhc3RfY2xvY2tfMV8wX2Jhc2ViYW5kX3Bvc3RhbWJsZVtdWzNdID0geworCS8qICAgQWRkciAgICAgIDVHX0hUMjAgICAgIDVHX0hUNDAgKi8KKwl7MHgwMDAwOWUwMCwgMHgwMzcyMTgyMSwgMHgwMzcyMTgyMX0sCisJezB4MDAwMGEyMzAsIDB4MDAwMDQwMGIsIDB4MDAwMDQwMTZ9LAorCXsweDAwMDBhMjU0LCAweDAwMDAwODk4LCAweDAwMDAxMTMwfSwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgYXI5NDg1XzFfMF9iYXNlYmFuZF9wb3N0YW1ibGVbXVs1XSA9IHsKKwkvKiBBZGRyICAgICAgICA1R19IVDIwICAgICA1R19IVDQwICAgICAyR19IVDQwICAgICAyR19IVDIwICovCisJezB4MDAwMDk4MTAsIDB4ZDAwYTgwMDUsIDB4ZDAwYTgwMDUsIDB4ZDAwYTgwMDUsIDB4ZDAwYTgwMDV9LAorCXsweDAwMDA5ODIwLCAweDIwNmEwMDJlLCAweDIwNmEwMDJlLCAweDIwNmEwMDJlLCAweDIwNmEwMDJlfSwKKwl7MHgwMDAwOTgyNCwgMHg1YWM2NDBkMCwgMHg1YWM2NDBkMCwgMHg1YWM2NDBkMCwgMHg1YWM2NDBkMH0sCisJezB4MDAwMDk4MjgsIDB4MDY5MDMwODEsIDB4MDY5MDMwODEsIDB4MDY5MDM4ODEsIDB4MDY5MDM4ODF9LAorCXsweDAwMDA5ODJjLCAweDA1ZWVhNmQ0LCAweDA1ZWVhNmQ0LCAweDA1ZWVhNmQ0LCAweDA1ZWVhNmQ0fSwKKwl7MHgwMDAwOTgzMCwgMHgwMDAwMDU5YywgMHgwMDAwMDU5YywgMHgwMDAwMDU5YywgMHgwMDAwMDU5Y30sCisJezB4MDAwMDljMDAsIDB4MDAwMDAwNDQsIDB4MDAwMDAwNDQsIDB4MDAwMDAwNDQsIDB4MDAwMDAwNDR9LAorCXsweDAwMDA5ZTAwLCAweDAzNzIxNjFlLCAweDAzNzIxNjFlLCAweDAzNzIxNmEwLCAweDAzNzIxNmEwfSwKKwl7MHgwMDAwOWUwNCwgMHgwMDE4MjAyMCwgMHgwMDE4MjAyMCwgMHgwMDE4MjAyMCwgMHgwMDE4MjAyMH0sCisJezB4MDAwMDllMGMsIDB4NmM0MDAwZTIsIDB4NmQ0MDAwZTIsIDB4NmQ0MDAwZTIsIDB4NmM0MDAwZTJ9LAorCXsweDAwMDA5ZTEwLCAweDdlYzg4ZDJlLCAweDdlYzg4ZDJlLCAweDdlYzgwZDJlLCAweDdlYzgwZDJlfSwKKwl7MHgwMDAwOWUxNCwgMHgzMTM5NWQ1ZSwgMHgzMTM5NjA1ZSwgMHgzMTM5NjA1ZSwgMHgzMTM5NWQ1ZX0sCisJezB4MDAwMDllMTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5ZTFjLCAweDAwMDFjZjljLCAweDAwMDFjZjljLCAweDAwMDIxZjljLCAweDAwMDIxZjljfSwKKwl7MHgwMDAwOWUyMCwgMHgwMDAwMDNiNSwgMHgwMDAwMDNiNSwgMHgwMDAwMDNjZSwgMHgwMDAwMDNjZX0sCisJezB4MDAwMDllMmMsIDB4MDAwMDAwMWMsIDB4MDAwMDAwMWMsIDB4MDAwMDAwMjEsIDB4MDAwMDAwMjF9LAorCXsweDAwMDA5ZTNjLCAweGNmOTQ2MjIwLCAweGNmOTQ2MjIwLCAweGNmOTQ2MjIyLCAweGNmOTQ2MjIyfSwKKwl7MHgwMDAwOWU0NCwgMHgwMjMyMWUyNywgMHgwMjMyMWUyNywgMHgwMjI4MjMyNCwgMHgwMjI4MjMyNH0sCisJezB4MDAwMDllNDgsIDB4NTAzMDIwMWEsIDB4NTAzMDIwMWEsIDB4NTAzMDIwMTAsIDB4NTAzMDIwMTB9LAorCXsweDAwMDA5ZmM4LCAweDAwMDNmMDAwLCAweDAwMDNmMDAwLCAweDAwMDFhMDAwLCAweDAwMDFhMDAwfSwKKwl7MHgwMDAwYTIwNCwgMHgwMTMwM2ZjMCwgMHgwMTMwM2ZjNCwgMHgwMTMwM2ZjNCwgMHgwMTMwM2ZjMH0sCisJezB4MDAwMGEyMDgsIDB4MDAwMDAxMDQsIDB4MDAwMDAxMDQsIDB4MDAwMDAwMDQsIDB4MDAwMDAwMDR9LAorCXsweDAwMDBhMjMwLCAweDAwMDA0MDBhLCAweDAwMDA0MDE0LCAweDAwMDA0MDE2LCAweDAwMDA0MDBifSwKKwl7MHgwMDAwYTIzNCwgMHgxMDAwMGZmZiwgMHgxMDAwMGZmZiwgMHgxMDAwMGZmZiwgMHgxMDAwMGZmZn0sCisJezB4MDAwMGEyMzgsIDB4ZmZiODEwMTgsIDB4ZmZiODEwMTgsIDB4ZmZiODEwMTgsIDB4ZmZiODEwMTh9LAorCXsweDAwMDBhMjUwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMjEwLCAweDAwMDAwMTA4fSwKKwl7MHgwMDAwYTI1NCwgMHgwMDAwMDdkMCwgMHgwMDAwMGZhMCwgMHgwMDAwMTEzMCwgMHgwMDAwMDg5OH0sCisJezB4MDAwMGEyNTgsIDB4MDIwMjAwMDIsIDB4MDIwMjAwMDIsIDB4MDIwMjAwMDIsIDB4MDIwMjAwMDJ9LAorCXsweDAwMDBhMjVjLCAweDAxMDAwZTBlLCAweDAxMDAwZTBlLCAweDAxMDAwZTBlLCAweDAxMDAwZTBlfSwKKwl7MHgwMDAwYTI2MCwgMHgzYTAyMTUwMSwgMHgzYTAyMTUwMSwgMHgzYTAyMTUwMSwgMHgzYTAyMTUwMX0sCisJezB4MDAwMGEyNjQsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGV9LAorCXsweDAwMDBhMjgwLCAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAweDAwMDAwMDBiLCAweDAwMDAwMDBifSwKKwl7MHgwMDAwYTI4NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDJhMCwgMHgwMDAwMDJhMH0sCisJezB4MDAwMGEyODgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMjhjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTJjNCwgMHgwMDE1OGQxOCwgMHgwMDE1OGQxOCwgMHgwMDE1OGQxOCwgMHgwMDE1OGQxOH0sCisJezB4MDAwMGEyZDAsIDB4MDAwNzE5ODEsIDB4MDAwNzE5ODEsIDB4MDAwNzE5ODEsIDB4MDAwNzE5ODJ9LAorCXsweDAwMDBhMmQ4LCAweGY5OTlhODNhLCAweGY5OTlhODNhLCAweGY5OTlhODNhLCAweGY5OTlhODNhfSwKKwl7MHgwMDAwYTM1OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGJlMDQsIDB4MDA4MDIwMjAsIDB4MDA4MDIwMjAsIDB4MDA4MDIwMjAsIDB4MDA4MDIwMjB9LAorCXsweDAwMDBiZTE4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgYXI5NDg1TW9kZXNfbG93X29iX2RiX3R4X2dhaW5fMV8wW11bNV0gPSB7CisJLyogIEFkZHIgICAgICA1R19IVDIwICAgIDVHX0hUNDAgICAgIDJHX0hUNDAgICAgIDJHX0hUMjAgICAqLworCXsweDAwMDBhNDEwLCAweDAwMDA1MGQ5LCAweDAwMDA1MGQ5LCAweDAwMDA1MGQ4LCAweDAwMDA1MGQ4fSwKKwl7MHgwMDAwYTUwMCwgMHgwMDAyMjIwMCwgMHgwMDAyMjIwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGE1MDQsIDB4MDUwNjIwMDIsIDB4MDUwNjIwMDIsIDB4MDQwMDAwMDIsIDB4MDQwMDAwMDJ9LAorCXsweDAwMDBhNTA4LCAweDBjMDAyZTAwLCAweDBjMDAyZTAwLCAweDA4MDAwMDA0LCAweDA4MDAwMDA0fSwKKwl7MHgwMDAwYTUwYywgMHgxMTA2MjIwMiwgMHgxMTA2MjIwMiwgMHgwZDAwMDIwMCwgMHgwZDAwMDIwMH0sCisJezB4MDAwMGE1MTAsIDB4MTcwMjJlMDAsIDB4MTcwMjJlMDAsIDB4MTEwMDAyMDIsIDB4MTEwMDAyMDJ9LAorCXsweDAwMDBhNTE0LCAweDFkMDAwZWMyLCAweDFkMDAwZWMyLCAweDE1MDAwNDAwLCAweDE1MDAwNDAwfSwKKwl7MHgwMDAwYTUxOCwgMHgyNTAyMGVjMCwgMHgyNTAyMGVjMCwgMHgxOTAwMDQwMiwgMHgxOTAwMDQwMn0sCisJezB4MDAwMGE1MWMsIDB4MmIwMjBlYzMsIDB4MmIwMjBlYzMsIDB4MWQwMDA0MDQsIDB4MWQwMDA0MDR9LAorCXsweDAwMDBhNTIwLCAweDJmMDAxZjA0LCAweDJmMDAxZjA0LCAweDIxMDAwNjAzLCAweDIxMDAwNjAzfSwKKwl7MHgwMDAwYTUyNCwgMHgzNTAwMWZjNCwgMHgzNTAwMWZjNCwgMHgyNTAwMDYwNSwgMHgyNTAwMDYwNX0sCisJezB4MDAwMGE1MjgsIDB4M2MwMjJmMDQsIDB4M2MwMjJmMDQsIDB4MmEwMDBhMDMsIDB4MmEwMDBhMDN9LAorCXsweDAwMDBhNTJjLCAweDQxMDIzZTg1LCAweDQxMDIzZTg1LCAweDJjMDAwYTA0LCAweDJjMDAwYTA0fSwKKwl7MHgwMDAwYTUzMCwgMHg0ODAyM2VjNiwgMHg0ODAyM2VjNiwgMHgyZTAwMGEyMCwgMHgyZTAwMGEyMH0sCisJezB4MDAwMGE1MzQsIDB4NGQwMjNmMDEsIDB4NGQwMjNmMDEsIDB4MzQwMDBlMjAsIDB4MzQwMDBlMjB9LAorCXsweDAwMDBhNTM4LCAweDUzMDIzZjRiLCAweDUzMDIzZjRiLCAweDM4MDAwZTIyLCAweDM4MDAwZTIyfSwKKwl7MHgwMDAwYTUzYywgMHg1YTAyN2YwOSwgMHg1YTAyN2YwOSwgMHgzYzAwMGUyNCwgMHgzYzAwMGUyNH0sCisJezB4MDAwMGE1NDAsIDB4NWYwMjdmYzksIDB4NWYwMjdmYzksIDB4NDAwMDBlMjYsIDB4NDAwMDBlMjZ9LAorCXsweDAwMDBhNTQ0LCAweDY1MDJmZWNhLCAweDY1MDJmZWNhLCAweDQzMDAxNjQwLCAweDQzMDAxNjQwfSwKKwl7MHgwMDAwYTU0OCwgMHg2YjAyZmY0YSwgMHg2YjAyZmY0YSwgMHg0NjAwMTY2MCwgMHg0NjAwMTY2MH0sCisJezB4MDAwMGE1NGMsIDB4NzIwM2ZlY2EsIDB4NzIwM2ZlY2EsIDB4NDkwMDE4NjEsIDB4NDkwMDE4NjF9LAorCXsweDAwMDBhNTUwLCAweDc3MDNmZjBiLCAweDc3MDNmZjBiLCAweDRjMDAxYTgxLCAweDRjMDAxYTgxfSwKKwl7MHgwMDAwYTU1NCwgMHg3ZDA2ZmZjYiwgMHg3ZDA2ZmZjYiwgMHg0ZjAwMWE4MywgMHg0ZjAwMWE4M30sCisJezB4MDAwMGE1NTgsIDB4ODQwN2ZmMGIsIDB4ODQwN2ZmMGIsIDB4NTQwMDFjODUsIDB4NTQwMDFjODV9LAorCXsweDAwMDBhNTVjLCAweDg5MDdmZmNiLCAweDg5MDdmZmNiLCAweDU4MDAxY2U1LCAweDU4MDAxY2U1fSwKKwl7MHgwMDAwYTU2MCwgMHg5MDBmZmYwYiwgMHg5MDBmZmYwYiwgMHg1YjAwMWNlOSwgMHg1YjAwMWNlOX0sCisJezB4MDAwMGE1NjQsIDB4OTYwZmZmY2IsIDB4OTYwZmZmY2IsIDB4NjAwMDFlZWIsIDB4NjAwMDFlZWJ9LAorCXsweDAwMDBhNTY4LCAweDljMWZmZjBiLCAweDljMWZmZjBiLCAweDYwMDAxZWViLCAweDYwMDAxZWVifSwKKwl7MHgwMDAwYTU2YywgMHg5YzFmZmYwYiwgMHg5YzFmZmYwYiwgMHg2MDAwMWVlYiwgMHg2MDAwMWVlYn0sCisJezB4MDAwMGE1NzAsIDB4OWMxZmZmMGIsIDB4OWMxZmZmMGIsIDB4NjAwMDFlZWIsIDB4NjAwMDFlZWJ9LAorCXsweDAwMDBhNTc0LCAweDljMWZmZjBiLCAweDljMWZmZjBiLCAweDYwMDAxZWViLCAweDYwMDAxZWVifSwKKwl7MHgwMDAwYTU3OCwgMHg5YzFmZmYwYiwgMHg5YzFmZmYwYiwgMHg2MDAwMWVlYiwgMHg2MDAwMWVlYn0sCisJezB4MDAwMGE1N2MsIDB4OWMxZmZmMGIsIDB4OWMxZmZmMGIsIDB4NjAwMDFlZWIsIDB4NjAwMDFlZWJ9LAorCXsweDAwMDE2MDQ0LCAweDA1YjZiMmRiLCAweDA1YjZiMmRiLCAweDA1YjZiMmRiLCAweDA1YjZiMmRifSwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgYXI5NDg1XzFfMF9wY2llX3BoeV9jbGtyZXFfZGlzYWJsZV9MMVtdWzJdID0geworCS8qICAgQWRkciAgICAgYWxsbW9kZXMgKi8KKwl7MHgwMDAxOGMwMCwgMHgxMDIxM2U1ZX0sCisJezB4MDAwMThjMDQsIDB4MDAwODAxZDh9LAorCXsweDAwMDE4YzA4LCAweDAwMDA1ODBjfSwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgYXI5NDg1XzFfMF9yYWRpb19wb3N0YW1ibGVbXVsyXSA9IHsKKwkvKiAgIEFkZHIgICAgIGFsbG1vZGVzICovCisJezB4MDAwMTYwOWMsIDB4MGIyODNmMzF9LAorCXsweDAwMDE2MGFjLCAweDI0NjExODAwfSwKKwl7MHgwMDAxNjBiMCwgMHgwMzI4NGYzZX0sCisJezB4MDAwMTYxMGMsIDB4MDAxNzAwMDB9LAorCXsweDAwMDE2MTQwLCAweDEwODA0MDA4fSwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgYXI5NDg1XzFfMF9tYWNfY29yZVtdWzJdID0geworCS8qICBBZGRyICAgICAgYWxsbW9kZXMgKi8KKwl7MHgwMDAwMDAwOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDAwMzAsIDB4MDAwMjAwODV9LAorCXsweDAwMDAwMDM0LCAweDAwMDAwMDA1fSwKKwl7MHgwMDAwMDA0MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDAwNDQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAwMDQ4LCAweDAwMDAwMDA4fSwKKwl7MHgwMDAwMDA0YywgMHgwMDAwMDAxMH0sCisJezB4MDAwMDAwNTAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMDQwLCAweDAwMmZmYzBmfSwKKwl7MHgwMDAwMTA0NCwgMHgwMDJmZmMwZn0sCisJezB4MDAwMDEwNDgsIDB4MDAyZmZjMGZ9LAorCXsweDAwMDAxMDRjLCAweDAwMmZmYzBmfSwKKwl7MHgwMDAwMTA1MCwgMHgwMDJmZmMwZn0sCisJezB4MDAwMDEwNTQsIDB4MDAyZmZjMGZ9LAorCXsweDAwMDAxMDU4LCAweDAwMmZmYzBmfSwKKwl7MHgwMDAwMTA1YywgMHgwMDJmZmMwZn0sCisJezB4MDAwMDEwNjAsIDB4MDAyZmZjMGZ9LAorCXsweDAwMDAxMDY0LCAweDAwMmZmYzBmfSwKKwl7MHgwMDAwMTBmMCwgMHgwMDAwMDEwMH0sCisJezB4MDAwMDEyNzAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMmIwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTJmMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDE0M2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxNDdjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODAwMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwMDQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MDA4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODAwYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwMTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MDIwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODAzOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwM2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MDQwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODA0NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwNDgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MDRjLCAweGZmZmZmZmZmfSwKKwl7MHgwMDAwODA1NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwNTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MDVjLCAweDAwMGZjNzhmfSwKKwl7MHgwMDAwODA2MCwgMHgwMDAwMDAwZn0sCisJezB4MDAwMDgwNjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MDcwLCAweDAwMDAwMzEwfSwKKwl7MHgwMDAwODA3NCwgMHgwMDAwMDAyMH0sCisJezB4MDAwMDgwNzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MDljLCAweDAwMDAwMDBmfSwKKwl7MHgwMDAwODBhMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwYTQsIDB4MDJmZjAwMDB9LAorCXsweDAwMDA4MGE4LCAweDBlMDcwNjA1fSwKKwl7MHgwMDAwODBhYywgMHgwMDAwMDAwZH0sCisJezB4MDAwMDgwYjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MGI0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODBiOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwYmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MGMwLCAweDJhODAwMDAwfSwKKwl7MHgwMDAwODBjNCwgMHgwNjkwMDE2OH0sCisJezB4MDAwMDgwYzgsIDB4MTM4ODFjMjB9LAorCXsweDAwMDA4MGNjLCAweDAxZjQwMDAwfSwKKwl7MHgwMDAwODBkMCwgMHgwMDI1MjUwMH0sCisJezB4MDAwMDgwZDQsIDB4MDBhMDAwMDB9LAorCXsweDAwMDA4MGQ4LCAweDAwNDAwMDAwfSwKKwl7MHgwMDAwODBkYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwZTAsIDB4ZmZmZmZmZmZ9LAorCXsweDAwMDA4MGU0LCAweDAwMDBmZmZmfSwKKwl7MHgwMDAwODBlOCwgMHgzZjNmM2YzZn0sCisJezB4MDAwMDgwZWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MGYwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODBmNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwZmMsIDB4MDAwMjAwMDB9LAorCXsweDAwMDA4MTAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODEwOCwgMHgwMDAwMDA1Mn0sCisJezB4MDAwMDgxMGMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MTEwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODExNCwgMHgwMDAwMDdmZn0sCisJezB4MDAwMDgxMTgsIDB4MDAwMDAwYWF9LAorCXsweDAwMDA4MTFjLCAweDAwMDAzMjEwfSwKKwl7MHgwMDAwODEyNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxMjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MTJjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODEzMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxMzQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MTM4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODEzYywgMHgwMDAwZmZmZn0sCisJezB4MDAwMDgxNDQsIDB4ZmZmZmZmZmZ9LAorCXsweDAwMDA4MTY4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODE2YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxNzAsIDB4MTg0ODYyMDB9LAorCXsweDAwMDA4MTc0LCAweDMzMzMyMjEwfSwKKwl7MHgwMDAwODE3OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxN2MsIDB4MDAwMjAwMDB9LAorCXsweDAwMDA4MWMwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODFjNCwgMHgzMzMzMjIxMH0sCisJezB4MDAwMDgxYzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MWNjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODFkNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxZWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MWYwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODFmNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxZjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MWZjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODI0MCwgMHgwMDEwMDAwMH0sCisJezB4MDAwMDgyNDQsIDB4MDAxMGY0MDB9LAorCXsweDAwMDA4MjQ4LCAweDAwMDAwODAwfSwKKwl7MHgwMDAwODI0YywgMHgwMDAxZTgwMH0sCisJezB4MDAwMDgyNTAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MjU0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODI1OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgyNWMsIDB4NDAwMDAwMDB9LAorCXsweDAwMDA4MjYwLCAweDAwMDgwOTIyfSwKKwl7MHgwMDAwODI2NCwgMHg5Y2EwMDAxMH0sCisJezB4MDAwMDgyNjgsIDB4ZmZmZmZmZmZ9LAorCXsweDAwMDA4MjZjLCAweDAwMDBmZmZmfSwKKwl7MHgwMDAwODI3MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgyNzQsIDB4NDAwMDAwMDB9LAorCXsweDAwMDA4Mjc4LCAweDAwM2U0MTgwfSwKKwl7MHgwMDAwODI3YywgMHgwMDAwMDAwNH0sCisJezB4MDAwMDgyODQsIDB4MDAwMDAwMmN9LAorCXsweDAwMDA4Mjg4LCAweDAwMDAwMDJjfSwKKwl7MHgwMDAwODI4YywgMHgwMDAwMDBmZn0sCisJezB4MDAwMDgyOTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4Mjk4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODI5YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgzMDAsIDB4MDAwMDAxNDB9LAorCXsweDAwMDA4MzE0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODMxYywgMHgwMDAwMDEwZH0sCisJezB4MDAwMDgzMjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MzJjLCAweDAwMDAwMDA3fSwKKwl7MHgwMDAwODMzMCwgMHgwMDAwMDMwMn0sCisJezB4MDAwMDgzMzQsIDB4MDAwMDA3MDB9LAorCXsweDAwMDA4MzM4LCAweDAwZmYwMDAwfSwKKwl7MHgwMDAwODMzYywgMHgwMjQwMDAwMH0sCisJezB4MDAwMDgzNDAsIDB4MDAwMTA3ZmZ9LAorCXsweDAwMDA4MzQ0LCAweGEyNDgxMDVifSwKKwl7MHgwMDAwODM0OCwgMHgwMDhmMDAwMH0sCisJezB4MDAwMDgzNWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MzYwLCAweGZmZmZmZmZmfSwKKwl7MHgwMDAwODM2NCwgMHhmZmZmZmZmZn0sCisJezB4MDAwMDgzNjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MzcwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODM3NCwgMHgwMDAwMDBmZn0sCisJezB4MDAwMDgzNzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MzdjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODM4MCwgMHhmZmZmZmZmZn0sCisJezB4MDAwMDgzODQsIDB4ZmZmZmZmZmZ9LAorCXsweDAwMDA4MzkwLCAweGZmZmZmZmZmfSwKKwl7MHgwMDAwODM5NCwgMHhmZmZmZmZmZn0sCisJezB4MDAwMDgzOTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MzljLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODNhMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgzYTQsIDB4MDAwMGZhMTR9LAorCXsweDAwMDA4M2E4LCAweDAwMGYwYzAwfSwKKwl7MHgwMDAwODNhYywgMHgzMzMzMjIxMH0sCisJezB4MDAwMDgzYjAsIDB4MzMzMzIyMTB9LAorCXsweDAwMDA4M2I0LCAweDMzMzMyMjEwfSwKKwl7MHgwMDAwODNiOCwgMHgzMzMzMjIxMH0sCisJezB4MDAwMDgzYmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4M2MwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODNjNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgzYzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4M2NjLCAweDAwMDAwMjAwfSwKKwl7MHgwMDAwODNkMCwgMHgwMDAzMDFmZn0sCit9OworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXRoOWsuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hdGg5ay5oCmluZGV4IDA5NjMwNzEuLjM2ODFjYWY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXRoOWsuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXRoOWsuaApAQCAtNTcsNiArNTcsOCBAQAogCiAjZGVmaW5lIEFfTUFYKGEsIGIpICgoYSkgPiAoYikgPyAoYSkgOiAoYikpCiAKKyNkZWZpbmUgQVRIOUtfUE1fUU9TX0RFRkFVTFRfVkFMVUUJNTUKKwogI2RlZmluZSBUU0ZfVE9fVFUoX2gsX2wpIFwKIAkoKCgodTMyKShfaCkpIDw8IDIyKSB8ICgoKHUzMikoX2wpKSA+PiAxMCkpCiAKQEAgLTg3LDMzICs4OSwxOSBAQAogLyoqCiAgKiBlbnVtIGJ1ZmZlcl90eXBlIC0gQnVmZmVyIHR5cGUgZmxhZ3MKICAqCi0gKiBAQlVGX0hUOiBTZW5kIHRoaXMgYnVmZmVyIHVzaW5nIEhUIGNhcGFiaWxpdGllcwogICogQEJVRl9BTVBEVTogVGhpcyBidWZmZXIgaXMgYW4gYW1wZHUsIGFzIHBhcnQgb2YgYW4gYWdncmVnYXRlIChkdXJpbmcgVFgpCiAgKiBAQlVGX0FHR1I6IEluZGljYXRlcyB3aGV0aGVyIHRoZSBidWZmZXIgY2FuIGJlIGFnZ3JlZ2F0ZWQKICAqCSh1c2VkIGluIGFnZ3JlZ2F0aW9uIHNjaGVkdWxpbmcpCi0gKiBAQlVGX1JFVFJZOiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgYnVmZmVyIGlzIHJldHJpZWQKICAqIEBCVUZfWFJFVFJZOiBUbyBkZW5vdGUgZXhjZXNzaXZlIHJldHJpZXMgb2YgdGhlIGJ1ZmZlcgogICovCiBlbnVtIGJ1ZmZlcl90eXBlIHsKLQlCVUZfSFQJCQk9IEJJVCgxKSwKIAlCVUZfQU1QRFUJCT0gQklUKDIpLAogCUJVRl9BR0dSCQk9IEJJVCgzKSwKLQlCVUZfUkVUUlkJCT0gQklUKDQpLAogCUJVRl9YUkVUUlkJCT0gQklUKDUpLAogfTsKIAotI2RlZmluZSBiZl9uZnJhbWVzICAgICAgCWJmX3N0YXRlLmJmc19uZnJhbWVzCi0jZGVmaW5lIGJmX2FsICAgICAgICAgICAJYmZfc3RhdGUuYmZzX2FsCi0jZGVmaW5lIGJmX2ZybWxlbiAgICAgICAJYmZfc3RhdGUuYmZzX2ZybWxlbgotI2RlZmluZSBiZl9yZXRyaWVzICAgICAgCWJmX3N0YXRlLmJmc19yZXRyaWVzCi0jZGVmaW5lIGJmX3NlcW5vICAgICAgICAJYmZfc3RhdGUuYmZzX3NlcW5vCi0jZGVmaW5lIGJmX3RpZG5vICAgICAgICAJYmZfc3RhdGUuYmZzX3RpZG5vCi0jZGVmaW5lIGJmX2tleWl4ICAgICAgICAgICAgICAgIGJmX3N0YXRlLmJmc19rZXlpeAotI2RlZmluZSBiZl9rZXl0eXBlICAgICAgCWJmX3N0YXRlLmJmc19rZXl0eXBlCi0jZGVmaW5lIGJmX2lzaHQoYmYpCQkoYmYtPmJmX3N0YXRlLmJmX3R5cGUgJiBCVUZfSFQpCiAjZGVmaW5lIGJmX2lzYW1wZHUoYmYpCQkoYmYtPmJmX3N0YXRlLmJmX3R5cGUgJiBCVUZfQU1QRFUpCiAjZGVmaW5lIGJmX2lzYWdncihiZikJCShiZi0+YmZfc3RhdGUuYmZfdHlwZSAmIEJVRl9BR0dSKQotI2RlZmluZSBiZl9pc3JldHJpZWQoYmYpCShiZi0+YmZfc3RhdGUuYmZfdHlwZSAmIEJVRl9SRVRSWSkKICNkZWZpbmUgYmZfaXN4cmV0cmllZChiZikJKGJmLT5iZl9zdGF0ZS5iZl90eXBlICYgQlVGX1hSRVRSWSkKIAogI2RlZmluZSBBVEhfVFhTVEFUVVNfUklOR19TSVpFIDY0CkBAIC0xNzgsOCArMTY2LDggQEAKIAogLyogcmV0dXJucyBkZWxpbWl0ZXIgcGFkZGluZyByZXF1aXJlZCBnaXZlbiB0aGUgcGFja2V0IGxlbmd0aCAqLwogI2RlZmluZSBBVEhfQUdHUl9HRVRfTkRFTElNKF9sZW4pCQkJCQlcCi0JKCgoKChfbGVuKSArIEFUSF9BR0dSX0RFTElNX1NaKSA8IEFUSF9BR0dSX01JTlBMRU4pID8gICAgICAgICAgIFwKLQkgIChBVEhfQUdHUl9NSU5QTEVOIC0gKF9sZW4pIC0gQVRIX0FHR1JfREVMSU1fU1opIDogMCkgPj4gMikKKyAgICAgICAoKChfbGVuKSA+PSBBVEhfQUdHUl9NSU5QTEVOKSA/IDAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBESVZfUk9VTkRfVVAoQVRIX0FHR1JfTUlOUExFTiAtIChfbGVuKSwgQVRIX0FHR1JfREVMSU1fU1opKQogCiAjZGVmaW5lIEJBV19XSVRISU4oX3N0YXJ0LCBfYmF3c3osIF9zZXFubykgXAogCSgoKChfc2Vxbm8pIC0gKF9zdGFydCkpICYgNDA5NSkgPCAoX2Jhd3N6KSkKQEAgLTE5NiwxMiArMTg0LDEyIEBACiAKICNkZWZpbmUgQVRIX1RYRklGT19ERVBUSCA4CiBzdHJ1Y3QgYXRoX3R4cSB7Ci0JaW50IGF4cV9jbGFzczsKIAl1MzIgYXhxX3FudW07CiAJdTMyICpheHFfbGluazsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGF4cV9xOwogCXNwaW5sb2NrX3QgYXhxX2xvY2s7CiAJdTMyIGF4cV9kZXB0aDsKKwl1MzIgYXhxX2FtcGR1X2RlcHRoOwogCWJvb2wgc3RvcHBlZDsKIAlib29sIGF4cV90eF9pbnByb2dyZXNzOwogCXN0cnVjdCBsaXN0X2hlYWQgYXhxX2FjcTsKQEAgLTIwOSwyNyArMTk3LDI4IEBACiAJc3RydWN0IGxpc3RfaGVhZCB0eHFfZmlmb19wZW5kaW5nOwogCXU4IHR4cV9oZWFkaWR4OwogCXU4IHR4cV90YWlsaWR4OworCWludCBwZW5kaW5nX2ZyYW1lczsKIH07CiAKIHN0cnVjdCBhdGhfYXR4X2FjIHsKKwlzdHJ1Y3QgYXRoX3R4cSAqdHhxOwogCWludCBzY2hlZDsKLQlpbnQgcW51bTsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJc3RydWN0IGxpc3RfaGVhZCB0aWRfcTsKIH07CiAKK3N0cnVjdCBhdGhfZnJhbWVfaW5mbyB7CisJaW50IGZyYW1lbGVuOworCXUzMiBrZXlpeDsKKwllbnVtIGF0aDlrX2tleV90eXBlIGtleXR5cGU7CisJdTggcmV0cmllczsKKwl1MTYgc2Vxbm87Cit9OworCiBzdHJ1Y3QgYXRoX2J1Zl9zdGF0ZSB7Ci0JaW50IGJmc19uZnJhbWVzOwotCXUxNiBiZnNfYWw7Ci0JdTE2IGJmc19mcm1sZW47Ci0JaW50IGJmc19zZXFubzsKLQlpbnQgYmZzX3RpZG5vOwotCWludCBiZnNfcmV0cmllczsKIAl1OCBiZl90eXBlOwogCXU4IGJmc19wYXByZDsKLQl1bnNpZ25lZCBsb25nIGJmc19wYXByZF90aW1lc3RhbXA7Ci0JdTMyIGJmc19rZXlpeDsKLQllbnVtIGF0aDlrX2tleV90eXBlIGJmc19rZXl0eXBlOworCWVudW0gYXRoOWtfaW50ZXJuYWxfZnJhbWVfdHlwZSBiZnNfZnR5cGU7CiB9OwogCiBzdHJ1Y3QgYXRoX2J1ZiB7CkBAIC0yNDIsNyArMjMxLDYgQEAKIAlkbWFfYWRkcl90IGJmX2RhZGRyOwkJLyogcGh5c2ljYWwgYWRkciBvZiBkZXNjICovCiAJZG1hX2FkZHJfdCBiZl9idWZfYWRkcjsJLyogcGh5c2ljYWwgYWRkciBvZiBkYXRhIGJ1ZmZlciwgZm9yIERNQSAqLwogCWJvb2wgYmZfc3RhbGU7Ci0JYm9vbCBiZl90eF9hYm9ydGVkOwogCXUxNiBiZl9mbGFnczsKIAlzdHJ1Y3QgYXRoX2J1Zl9zdGF0ZSBiZl9zdGF0ZTsKIAlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5OwpAQCAtMjcxLDcgKzI1OSw2IEBACiAJc3RydWN0IGF0aF9hdHhfYWMgYWNbV01FX05VTV9BQ107CiAJdTE2IG1heGFtcGR1OwogCXU4IG1wZHVkZW5zaXR5OwotCWludCBsYXN0X3Jzc2k7CiB9OwogCiAjZGVmaW5lIEFHR1JfQ0xFQU5VUCAgICAgICAgIEJJVCgxKQpAQCAtMjgwLDYgKzI2Nyw3IEBACiAKIHN0cnVjdCBhdGhfdHhfY29udHJvbCB7CiAJc3RydWN0IGF0aF90eHEgKnR4cTsKKwlzdHJ1Y3QgYXRoX25vZGUgKmFuOwogCWludCBpZl9pZDsKIAllbnVtIGF0aDlrX2ludGVybmFsX2ZyYW1lX3R5cGUgZnJhbWVfdHlwZTsKIAl1OCBwYXByZDsKQEAgLTI5MiwxMiArMjgwLDExIEBACiBzdHJ1Y3QgYXRoX3R4IHsKIAl1MTYgc2VxX25vOwogCXUzMiB0eHFzZXR1cDsKLQlpbnQgaHdxX21hcFtXTUVfTlVNX0FDXTsKIAlzcGlubG9ja190IHR4YnVmbG9jazsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHR4YnVmOwogCXN0cnVjdCBhdGhfdHhxIHR4cVtBVEg5S19OVU1fVFhfUVVFVUVTXTsKIAlzdHJ1Y3QgYXRoX2Rlc2NkbWEgdHhkbWE7Ci0JaW50IHBlbmRpbmdfZnJhbWVzW1dNRV9OVU1fQUNdOworCXN0cnVjdCBhdGhfdHhxICp0eHFfbWFwW1dNRV9OVU1fQUNdOwogfTsKIAogc3RydWN0IGF0aF9yeF9lZG1hIHsKQEAgLTMxMSw3ICsyOTgsNiBAQAogCXU4IHJ4b3RoZXJhbnQ7CiAJdTMyICpyeGxpbms7CiAJdW5zaWduZWQgaW50IHJ4ZmlsdGVyOwotCXNwaW5sb2NrX3QgcGN1X2xvY2s7CiAJc3BpbmxvY2tfdCByeGJ1ZmxvY2s7CiAJc3RydWN0IGxpc3RfaGVhZCByeGJ1ZjsKIAlzdHJ1Y3QgYXRoX2Rlc2NkbWEgcnhkbWE7CkBAIC0zMjgsNyArMzE0LDYgQEAKIGludCBhdGhfcnhfdGFza2xldChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IGZsdXNoLCBib29sIGhwKTsKIHN0cnVjdCBhdGhfdHhxICphdGhfdHhxX3NldHVwKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgcXR5cGUsIGludCBzdWJ0eXBlKTsKIHZvaWQgYXRoX3R4X2NsZWFudXBxKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX3R4cSAqdHhxKTsKLWludCBhdGhfdHhfc2V0dXAoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBoYWx0eXBlKTsKIGJvb2wgYXRoX2RyYWluX2FsbF90eHEoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGJvb2wgcmV0cnlfdHgpOwogdm9pZCBhdGhfZHJhaW50eHEoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCiAJCSAgICAgc3RydWN0IGF0aF90eHEgKnR4cSwgYm9vbCByZXRyeV90eCk7CkBAIC0zNDMsNyArMzI4LDYgQEAKIAkJIHN0cnVjdCBhdGhfdHhfY29udHJvbCAqdHhjdGwpOwogdm9pZCBhdGhfdHhfdGFza2xldChzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7CiB2b2lkIGF0aF90eF9lZG1hX3Rhc2tsZXQoc3RydWN0IGF0aF9zb2Z0YyAqc2MpOwotdm9pZCBhdGhfdHhfY2FicShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBpbnQgYXRoX3R4X2FnZ3Jfc3RhcnQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCiAJCSAgICAgIHUxNiB0aWQsIHUxNiAqc3NuKTsKIHZvaWQgYXRoX3R4X2FnZ3Jfc3RvcChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdTE2IHRpZCk7CkBAIC01NjQsNiArNTQ4LDcgQEAKICNkZWZpbmUgU0NfT1BfQlRfUFJJT1JJVFlfREVURUNURUQgICBCSVQoMTIpCiAjZGVmaW5lIFNDX09QX0JUX1NDQU4JCSAgICAgQklUKDEzKQogI2RlZmluZSBTQ19PUF9BTklfUlVOCQkgICAgIEJJVCgxNCkKKyNkZWZpbmUgU0NfT1BfRU5BQkxFX0FQTQkgICAgIEJJVCgxNSkKIAogLyogUG93ZXJzYXZlIGZsYWdzICovCiAjZGVmaW5lIFBTX1dBSVRfRk9SX0JFQUNPTiAgICAgICAgQklUKDApCkBAIC02MDEsMTMgKzU4NiwxNCBAQAogCXN0cnVjdCBhdGhfaHcgKnNjX2FoOwogCXZvaWQgX19pb21lbSAqbWVtOwogCWludCBpcnE7Ci0Jc3BpbmxvY2tfdCBzY19yZXNldGxvY2s7CiAJc3BpbmxvY2tfdCBzY19zZXJpYWxfcnc7CiAJc3BpbmxvY2tfdCBzY19wbV9sb2NrOworCXNwaW5sb2NrX3Qgc2NfcGN1X2xvY2s7CiAJc3RydWN0IG11dGV4IG11dGV4OwogCXN0cnVjdCB3b3JrX3N0cnVjdCBwYXByZF93b3JrOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBod19jaGVja193b3JrOwogCXN0cnVjdCBjb21wbGV0aW9uIHBhcHJkX2NvbXBsZXRlOworCWJvb2wgcGFwcmRfcGVuZGluZzsKIAogCXUzMiBpbnRyc3RhdHVzOwogCXUzMiBzY19mbGFnczsgLyogU0NfT1BfKiAqLwpAQCAtNjY1LDExICs2NTEsMTEgQEAKIAlib29sIGlkbGU7CiAJaW50IGNoYW5faWR4OwogCWludCBjaGFuX2lzX2h0OworCWludCBsYXN0X3Jzc2k7CiB9OwogCiB2b2lkIGF0aDlrX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKTsKIGludCBhdGhfcmVzZXQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGJvb2wgcmV0cnlfdHgpOwotaW50IGF0aF9nZXRfbWFjODAyMTFfcW51bSh1MzIgcXVldWUsIHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKIGludCBhdGhfY2FicV91cGRhdGUoc3RydWN0IGF0aF9zb2Z0YyAqKTsKIAogc3RhdGljIGlubGluZSB2b2lkIGF0aF9yZWFkX2NhY2hlc2l6ZShzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uLCBpbnQgKmNzeikKQEAgLTY3OCwxNyArNjY0LDE5IEBACiB9CiAKIGV4dGVybiBzdHJ1Y3QgaWVlZTgwMjExX29wcyBhdGg5a19vcHM7Ci1leHRlcm4gaW50IG1vZHBhcmFtX25vaHdjcnlwdDsKK2V4dGVybiBpbnQgYXRoOWtfbW9kcGFyYW1fbm9od2NyeXB0OwogZXh0ZXJuIGludCBsZWRfYmxpbms7CitleHRlcm4gaW50IGF0aDlrX3BtX3Fvc192YWx1ZTsKK2V4dGVybiBib29sIGlzX2F0aDlrX3VubG9hZGVkOwogCiBpcnFyZXR1cm5fdCBhdGhfaXNyKGludCBpcnEsIHZvaWQgKmRldik7Cit2b2lkIGF0aDlrX2luaXRfY3J5cHRvKHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKIGludCBhdGg5a19pbml0X2RldmljZSh1MTYgZGV2aWQsIHN0cnVjdCBhdGhfc29mdGMgKnNjLCB1MTYgc3Vic3lzaWQsCiAJCSAgICBjb25zdCBzdHJ1Y3QgYXRoX2J1c19vcHMgKmJ1c19vcHMpOwogdm9pZCBhdGg5a19kZWluaXRfZGV2aWNlKHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKIHZvaWQgYXRoOWtfc2V0X2h3X2NhcGFiKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CiB2b2lkIGF0aDlrX3VwZGF0ZV9pY2hhbm5lbChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqaWNoYW4pOwotdm9pZCBhdGhfdXBkYXRlX2NoYWlubWFzayhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IGlzX2h0KTsKIGludCBhdGhfc2V0X2NoYW5uZWwoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmhjaGFuKTsKIApAQCAtNzE1LDEwICs3MDMsMTIgQEAKIHZvaWQgYXRoOWtfcHNfd2FrZXVwKHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKIHZvaWQgYXRoOWtfcHNfcmVzdG9yZShzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7CiAKK3U4IGF0aF90eGNoYWlubWFza19yZWR1Y3Rpb24oc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHU4IGNoYWlubWFzaywgdTMyIHJhdGUpOworCiB2b2lkIGF0aDlrX3NldF9ic3NpZF9tYXNrKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKTsKIGludCBhdGg5a193aXBoeV9hZGQoc3RydWN0IGF0aF9zb2Z0YyAqc2MpOwogaW50IGF0aDlrX3dpcGh5X2RlbChzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5KTsKLXZvaWQgYXRoOWtfdHhfc3RhdHVzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK3ZvaWQgYXRoOWtfdHhfc3RhdHVzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZnR5cGUpOwogaW50IGF0aDlrX3dpcGh5X3BhdXNlKHN0cnVjdCBhdGhfd2lwaHkgKmFwaHkpOwogaW50IGF0aDlrX3dpcGh5X3VucGF1c2Uoc3RydWN0IGF0aF93aXBoeSAqYXBoeSk7CiBpbnQgYXRoOWtfd2lwaHlfc2VsZWN0KHN0cnVjdCBhdGhfd2lwaHkgKmFwaHkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2JlYWNvbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2JlYWNvbi5jCmluZGV4IDE5ODkxZTcuLjM4NWJhMDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9iZWFjb24uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYmVhY29uLmMKQEAgLTI4LDcgKzI4LDcgQEAKIAlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKIAlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKGFoKTsKIAlzdHJ1Y3QgYXRoOWtfdHhfcXVldWVfaW5mbyBxaSwgcWlfYmU7Ci0JaW50IHFudW07CisJc3RydWN0IGF0aF90eHEgKnR4cTsKIAogCWF0aDlrX2h3X2dldF90eHFfcHJvcHMoYWgsIHNjLT5iZWFjb24uYmVhY29ucSwgJnFpKTsKIAlpZiAoc2MtPnNjX2FoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApIHsKQEAgLTM4LDE2ICszOCwxNiBAQAogCQlxaS50cWlfY3dtYXggPSAwOwogCX0gZWxzZSB7CiAJCS8qIEFkaG9jIG1vZGU7IGltcG9ydGFudCB0aGluZyBpcyB0byB1c2UgMnggY3dtaW4uICovCi0JCXFudW0gPSBzYy0+dHguaHdxX21hcFtXTUVfQUNfQkVdOwotCQlhdGg5a19od19nZXRfdHhxX3Byb3BzKGFoLCBxbnVtLCAmcWlfYmUpOworCQl0eHEgPSBzYy0+dHgudHhxX21hcFtXTUVfQUNfQkVdOworCQlhdGg5a19od19nZXRfdHhxX3Byb3BzKGFoLCB0eHEtPmF4cV9xbnVtLCAmcWlfYmUpOwogCQlxaS50cWlfYWlmcyA9IHFpX2JlLnRxaV9haWZzOwogCQlxaS50cWlfY3dtaW4gPSA0KnFpX2JlLnRxaV9jd21pbjsKIAkJcWkudHFpX2N3bWF4ID0gcWlfYmUudHFpX2N3bWF4OwogCX0KIAogCWlmICghYXRoOWtfaHdfc2V0X3R4cV9wcm9wcyhhaCwgc2MtPmJlYWNvbi5iZWFjb25xLCAmcWkpKSB7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRkFUQUwsCi0JCQkgICJVbmFibGUgdG8gdXBkYXRlIGgvdyBiZWFjb24gcXVldWUgcGFyYW1ldGVyc1xuIik7CisJCWF0aF9lcnIoY29tbW9uLAorCQkJIlVuYWJsZSB0byB1cGRhdGUgaC93IGJlYWNvbiBxdWV1ZSBwYXJhbWV0ZXJzXG4iKTsKIAkJcmV0dXJuIDA7CiAJfSBlbHNlIHsKIAkJYXRoOWtfaHdfcmVzZXR0eHF1ZXVlKGFoLCBzYy0+YmVhY29uLmJlYWNvbnEpOwpAQCAtMTAzLDEyICsxMDMsMzIgQEAKIAltZW1zZXQoc2VyaWVzLCAwLCBzaXplb2Yoc3RydWN0IGF0aDlrXzExbl9yYXRlX3NlcmllcykgKiA0KTsKIAlzZXJpZXNbMF0uVHJpZXMgPSAxOwogCXNlcmllc1swXS5SYXRlID0gcmF0ZTsKLQlzZXJpZXNbMF0uQ2hTZWwgPSBjb21tb24tPnR4X2NoYWlubWFzazsKKwlzZXJpZXNbMF0uQ2hTZWwgPSBhdGhfdHhjaGFpbm1hc2tfcmVkdWN0aW9uKHNjLAorCQkJY29tbW9uLT50eF9jaGFpbm1hc2ssIHNlcmllc1swXS5SYXRlKTsKIAlzZXJpZXNbMF0uUmF0ZUZsYWdzID0gKGN0c3JhdGUpID8gQVRIOUtfUkFURVNFUklFU19SVFNfQ1RTIDogMDsKIAlhdGg5a19od19zZXQxMW5fcmF0ZXNjZW5hcmlvKGFoLCBkcywgZHMsIDAsIGN0c3JhdGUsIGN0c2R1cmF0aW9uLAogCQkJCSAgICAgc2VyaWVzLCA0LCAwKTsKIH0KIAorc3RhdGljIHZvaWQgYXRoX3R4X2NhYnEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CisJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihzYy0+c2NfYWgpOworCXN0cnVjdCBhdGhfdHhfY29udHJvbCB0eGN0bDsKKworCW1lbXNldCgmdHhjdGwsIDAsIHNpemVvZihzdHJ1Y3QgYXRoX3R4X2NvbnRyb2wpKTsKKwl0eGN0bC50eHEgPSBzYy0+YmVhY29uLmNhYnE7CisKKwlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19YTUlULAorCQkidHJhbnNtaXR0aW5nIENBQlEgcGFja2V0LCBza2I6ICVwXG4iLCBza2IpOworCisJaWYgKGF0aF90eF9zdGFydChodywgc2tiLCAmdHhjdGwpICE9IDApIHsKKwkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfWE1JVCwgIkNBQlEgVFggZmFpbGVkXG4iKTsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwl9Cit9CisKIHN0YXRpYyBzdHJ1Y3QgYXRoX2J1ZiAqYXRoX2JlYWNvbl9nZW5lcmF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkJICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKIHsKQEAgLTE2OSw4ICsxODksNyBAQAogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQliZi0+YmZfbXBkdSA9IE5VTEw7CiAJCWJmLT5iZl9idWZfYWRkciA9IDA7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRkFUQUwsCi0JCQkgICJkbWFfbWFwcGluZ19lcnJvciBvbiBiZWFjb25pbmdcbiIpOworCQlhdGhfZXJyKGNvbW1vbiwgImRtYV9tYXBwaW5nX2Vycm9yIG9uIGJlYWNvbmluZ1xuIik7CiAJCXJldHVybiBOVUxMOwogCX0KIApAQCAtMTkwLDggKzIwOSw4IEBACiAKIAlpZiAoc2tiICYmIGNhYnFfZGVwdGgpIHsKIAkJaWYgKHNjLT5udmlmcyA+IDEpIHsKLQkJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQkVBQ09OLAotCQkJCSAgIkZsdXNoaW5nIHByZXZpb3VzIGNhYnEgdHJhZmZpY1xuIik7CisJCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19CRUFDT04sCisJCQkJIkZsdXNoaW5nIHByZXZpb3VzIGNhYnEgdHJhZmZpY1xuIik7CiAJCQlhdGhfZHJhaW50eHEoc2MsIGNhYnEsIGZhbHNlKTsKIAkJfQogCX0KQEAgLTI2Myw3ICsyODIsNyBAQAogCS8qIE5COiB0aGUgYmVhY29uIGRhdGEgYnVmZmVyIG11c3QgYmUgMzItYml0IGFsaWduZWQuICovCiAJc2tiID0gaWVlZTgwMjExX2JlYWNvbl9nZXQoc2MtPmh3LCB2aWYpOwogCWlmIChza2IgPT0gTlVMTCkgewotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0JFQUNPTiwgImNhbm5vdCBnZXQgc2tiXG4iKTsKKwkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQkVBQ09OLCAiY2Fubm90IGdldCBza2JcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTI4NywxMCArMzA2LDkgQEAKIAkJdHNmYWRqdXN0ID0gaW50dmFsICogYXZwLT5hdl9ic2xvdCAvIEFUSF9CQ0JVRjsKIAkJYXZwLT50c2ZfYWRqdXN0ID0gY3B1X3RvX2xlNjQoVFVfVE9fVVNFQyh0c2ZhZGp1c3QpKTsKIAotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0JFQUNPTiwKLQkJCSAgInN0YWdnZXIgYmVhY29ucywgYnNsb3QgJWQgaW50dmFsICIKLQkJCSAgIiV1IHRzZmFkanVzdCAlbGx1XG4iLAotCQkJICBhdnAtPmF2X2JzbG90LCBpbnR2YWwsICh1bnNpZ25lZCBsb25nIGxvbmcpdHNmYWRqdXN0KTsKKwkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQkVBQ09OLAorCQkJInN0YWdnZXIgYmVhY29ucywgYnNsb3QgJWQgaW50dmFsICV1IHRzZmFkanVzdCAlbGx1XG4iLAorCQkJYXZwLT5hdl9ic2xvdCwgaW50dmFsLCAodW5zaWduZWQgbG9uZyBsb25nKXRzZmFkanVzdCk7CiAKIAkJKChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKilza2ItPmRhdGEpLT51LmJlYWNvbi50aW1lc3RhbXAgPQogCQkJYXZwLT50c2ZfYWRqdXN0OwpAQCAtMzA0LDggKzMyMiw3IEBACiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCWJmLT5iZl9tcGR1ID0gTlVMTDsKIAkJYmYtPmJmX2J1Zl9hZGRyID0gMDsKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19GQVRBTCwKLQkJCSAgImRtYV9tYXBwaW5nX2Vycm9yIG9uIGJlYWNvbiBhbGxvY1xuIik7CisJCWF0aF9lcnIoY29tbW9uLCAiZG1hX21hcHBpbmdfZXJyb3Igb24gYmVhY29uIGFsbG9jXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC0zNjIsMTMgKzM3OSwxMyBAQAogCQlzYy0+YmVhY29uLmJtaXNzY250Kys7CiAKIAkJaWYgKHNjLT5iZWFjb24uYm1pc3NjbnQgPCBCU1RVQ0tfVEhSRVNIKSB7Ci0JCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0JTVFVDSywKLQkJCQkgICJtaXNzZWQgJXUgY29uc2VjdXRpdmUgYmVhY29uc1xuIiwKLQkJCQkgIHNjLT5iZWFjb24uYm1pc3NjbnQpOworCQkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQlNUVUNLLAorCQkJCSJtaXNzZWQgJXUgY29uc2VjdXRpdmUgYmVhY29uc1xuIiwKKwkJCQlzYy0+YmVhY29uLmJtaXNzY250KTsKIAkJCWF0aDlrX2h3X2JzdHVja19uZmNhbChhaCk7CiAJCX0gZWxzZSBpZiAoc2MtPmJlYWNvbi5ibWlzc2NudCA+PSBCU1RVQ0tfVEhSRVNIKSB7Ci0JCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0JTVFVDSywKLQkJCQkgICJiZWFjb24gaXMgb2ZmaWNpYWxseSBzdHVja1xuIik7CisJCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19CU1RVQ0ssCisJCQkJImJlYWNvbiBpcyBvZmZpY2lhbGx5IHN0dWNrXG4iKTsKIAkJCXNjLT5zY19mbGFncyB8PSBTQ19PUF9UU0ZfUkVTRVQ7CiAJCQlhdGhfcmVzZXQoc2MsIHRydWUpOwogCQl9CkBAIC0zNzcsOSArMzk0LDkgQEAKIAl9CiAKIAlpZiAoc2MtPmJlYWNvbi5ibWlzc2NudCAhPSAwKSB7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQlNUVUNLLAotCQkJICAicmVzdW1lIGJlYWNvbiB4bWl0IGFmdGVyICV1IG1pc3Nlc1xuIiwKLQkJCSAgc2MtPmJlYWNvbi5ibWlzc2NudCk7CisJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0JTVFVDSywKKwkJCSJyZXN1bWUgYmVhY29uIHhtaXQgYWZ0ZXIgJXUgbWlzc2VzXG4iLAorCQkJc2MtPmJlYWNvbi5ibWlzc2NudCk7CiAJCXNjLT5iZWFjb24uYm1pc3NjbnQgPSAwOwogCX0KIApAQCAtNDA1LDkgKzQyMiw5IEBACiAJdmlmID0gc2MtPmJlYWNvbi5ic2xvdFtzbG90XTsKIAlhcGh5ID0gc2MtPmJlYWNvbi5ic2xvdF9hcGh5W3Nsb3RdOwogCi0JYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19CRUFDT04sCi0JCSAgInNsb3QgJWQgW3RzZiAlbGx1IHRzZnR1ICV1IGludHZhbCAldV0gdmlmICVwXG4iLAotCQkgIHNsb3QsIHRzZiwgdHNmdHUsIGludHZhbCwgdmlmKTsKKwlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19CRUFDT04sCisJCSJzbG90ICVkIFt0c2YgJWxsdSB0c2Z0dSAldSBpbnR2YWwgJXVdIHZpZiAlcFxuIiwKKwkJc2xvdCwgdHNmLCB0c2Z0dSwgaW50dmFsLCB2aWYpOwogCiAJYmZhZGRyID0gMDsKIAlpZiAodmlmKSB7CkBAIC00NDksOCArNDY2LDggQEAKIAkJICogYXJlIHN0aWxsIHBlbmRpbmcgb24gdGhlIHF1ZXVlLgogCQkgKi8KIAkJaWYgKCFhdGg5a19od19zdG9wdHhkbWEoYWgsIHNjLT5iZWFjb24uYmVhY29ucSkpIHsKLQkJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRkFUQUwsCi0JCQkJImJlYWNvbiBxdWV1ZSAldSBkaWQgbm90IHN0b3A/XG4iLCBzYy0+YmVhY29uLmJlYWNvbnEpOworCQkJYXRoX2Vycihjb21tb24sICJiZWFjb24gcXVldWUgJXUgZGlkIG5vdCBzdG9wP1xuIiwKKwkJCQlzYy0+YmVhY29uLmJlYWNvbnEpOwogCQl9CiAKIAkJLyogTkI6IGNhYnEgdHJhZmZpYyBzaG91bGQgYWxyZWFkeSBiZSBxdWV1ZWQgYW5kIHByaW1lZCAqLwpAQCAtNTAzLDcgKzUyMCw3IEBACiAKIAkvKiBTZXQgdGhlIGNvbXB1dGVkIEFQIGJlYWNvbiB0aW1lcnMgKi8KIAotCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKGFoLCAwKTsKKwlhdGg5a19od19kaXNhYmxlX2ludGVycnVwdHMoYWgpOwogCWF0aDlrX2JlYWNvbl9pbml0KHNjLCBuZXh0dGJ0dCwgaW50dmFsKTsKIAlzYy0+YmVhY29uLmJtaXNzY250ID0gMDsKIAlhdGg5a19od19zZXRfaW50ZXJydXB0cyhhaCwgYWgtPmltYXNrKTsKQEAgLTUzNiw4ICs1NTMsOCBAQAogCiAJLyogTm8gbmVlZCB0byBjb25maWd1cmUgYmVhY29uIGlmIHdlIGFyZSBub3QgYXNzb2NpYXRlZCAqLwogCWlmICghY29tbW9uLT5jdXJhaWQpIHsKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19CRUFDT04sCi0JCQkgIlNUQSBpcyBub3QgeWV0IGFzc29jaWF0ZWQuLnNraXBwaW5nIGJlYWNvbiBjb25maWdcbiIpOworCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19CRUFDT04sCisJCQkiU1RBIGlzIG5vdCB5ZXQgYXNzb2NpYXRlZC4uc2tpcHBpbmcgYmVhY29uIGNvbmZpZ1xuIik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTU0OSw4ICs1NjYsNiBAQAogCSAqIGxhc3QgYmVhY29uIHdlIHJlY2VpdmVkICh3aGljaCBtYXkgYmUgbm9uZSkuCiAJICovCiAJZHRpbXBlcmlvZCA9IGNvbmYtPmR0aW1fcGVyaW9kOwotCWlmIChkdGltcGVyaW9kIDw9IDApCQkvKiBOQjogMCBpZiBub3Qga25vd24gKi8KLQkJZHRpbXBlcmlvZCA9IDE7CiAJZHRpbWNvdW50ID0gY29uZi0+ZHRpbV9jb3VudDsKIAlpZiAoZHRpbWNvdW50ID49IGR0aW1wZXJpb2QpCS8qIE5COiBzYW5pdHkgY2hlY2sgKi8KIAkJZHRpbWNvdW50ID0gMDsKQEAgLTU1OCw4ICs1NzMsNiBAQAogCWNmcGNvdW50ID0gMDsKIAogCXNsZWVwZHVyYXRpb24gPSBjb25mLT5saXN0ZW5faW50ZXJ2YWwgKiBpbnR2YWw7Ci0JaWYgKHNsZWVwZHVyYXRpb24gPD0gMCkKLQkJc2xlZXBkdXJhdGlvbiA9IGludHZhbDsKIAogCS8qCiAJICogUHVsbCBuZXh0dGJ0dCBmb3J3YXJkIHRvIHJlZmxlY3QgdGhlIGN1cnJlbnQKQEAgLTYzMCwyMyArNjQzLDIyIEBACiAJLyogVFNGIG91dCBvZiByYW5nZSB0aHJlc2hvbGQgZml4ZWQgYXQgMSBzZWNvbmQgKi8KIAlicy5ic190c2Zvb3JfdGhyZXNob2xkID0gQVRIOUtfVFNGT09SX1RIUkVTSE9MRDsKIAotCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQkVBQ09OLCAidHNmOiAlbGx1IHRzZnR1OiAldVxuIiwgdHNmLCB0c2Z0dSk7Ci0JYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19CRUFDT04sCi0JCSAgImJtaXNzOiAldSBzbGVlcDogJXUgY2ZwLXBlcmlvZDogJXUgbWF4ZHVyOiAldSBuZXh0OiAldVxuIiwKLQkJICBicy5ic19ibWlzc3RocmVzaG9sZCwgYnMuYnNfc2xlZXBkdXJhdGlvbiwKLQkJICBicy5ic19jZnBwZXJpb2QsIGJzLmJzX2NmcG1heGR1cmF0aW9uLCBicy5ic19jZnBuZXh0KTsKKwlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19CRUFDT04sICJ0c2Y6ICVsbHUgdHNmdHU6ICV1XG4iLCB0c2YsIHRzZnR1KTsKKwlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19CRUFDT04sCisJCSJibWlzczogJXUgc2xlZXA6ICV1IGNmcC1wZXJpb2Q6ICV1IG1heGR1cjogJXUgbmV4dDogJXVcbiIsCisJCWJzLmJzX2JtaXNzdGhyZXNob2xkLCBicy5ic19zbGVlcGR1cmF0aW9uLAorCQlicy5ic19jZnBwZXJpb2QsIGJzLmJzX2NmcG1heGR1cmF0aW9uLCBicy5ic19jZnBuZXh0KTsKIAogCS8qIFNldCB0aGUgY29tcHV0ZWQgU1RBIGJlYWNvbiB0aW1lcnMgKi8KIAotCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKGFoLCAwKTsKKwlhdGg5a19od19kaXNhYmxlX2ludGVycnVwdHMoYWgpOwogCWF0aDlrX2h3X3NldF9zdGFfYmVhY29uX3RpbWVycyhhaCwgJmJzKTsKIAlhaC0+aW1hc2sgfD0gQVRIOUtfSU5UX0JNSVNTOwogCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKGFoLCBhaC0+aW1hc2spOwogfQogCiBzdGF0aWMgdm9pZCBhdGhfYmVhY29uX2NvbmZpZ19hZGhvYyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywKLQkJCQkgICAgc3RydWN0IGF0aF9iZWFjb25fY29uZmlnICpjb25mLAotCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQorCQkJCSAgICBzdHJ1Y3QgYXRoX2JlYWNvbl9jb25maWcgKmNvbmYpCiB7CiAJc3RydWN0IGF0aF9odyAqYWggPSBzYy0+c2NfYWg7CiAJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihhaCk7CkBAIC02NzAsOSArNjgyLDkgQEAKIAkJbmV4dHRidHQgKz0gaW50dmFsOwogCX0gd2hpbGUgKG5leHR0YnR0IDwgdHNmdHUpOwogCi0JYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19CRUFDT04sCi0JCSAgIklCU1MgbmV4dHRidHQgJXUgaW50dmFsICV1ICgldSlcbiIsCi0JCSAgbmV4dHRidHQsIGludHZhbCwgY29uZi0+YmVhY29uX2ludGVydmFsKTsKKwlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19CRUFDT04sCisJCSJJQlNTIG5leHR0YnR0ICV1IGludHZhbCAldSAoJXUpXG4iLAorCQluZXh0dGJ0dCwgaW50dmFsLCBjb25mLT5iZWFjb25faW50ZXJ2YWwpOwogCiAJLyoKIAkgKiBJbiBJQlNTIG1vZGUgZW5hYmxlIHRoZSBiZWFjb24gdGltZXJzIGJ1dCBvbmx5IGVuYWJsZSBTV0JBIGludGVycnVwdHMKQEAgLTY4Niw3ICs2OTgsNyBAQAogCiAJLyogU2V0IHRoZSBjb21wdXRlZCBBREhPQyBiZWFjb24gdGltZXJzICovCiAKLQlhdGg5a19od19zZXRfaW50ZXJydXB0cyhhaCwgMCk7CisJYXRoOWtfaHdfZGlzYWJsZV9pbnRlcnJ1cHRzKGFoKTsKIAlhdGg5a19iZWFjb25faW5pdChzYywgbmV4dHRidHQsIGludHZhbCk7CiAJc2MtPmJlYWNvbi5ibWlzc2NudCA9IDA7CiAJYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoYWgsIGFoLT5pbWFzayk7CkBAIC03MDEsMTggKzcxMywxNyBAQAogCS8qIFNldHVwIHRoZSBiZWFjb24gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzICovCiAJaWYgKHZpZikgewogCQlzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpic3NfY29uZiA9ICZ2aWYtPmJzc19jb25mOwotCiAJCWlmdHlwZSA9IHZpZi0+dHlwZTsKLQogCQljdXJfY29uZi0+YmVhY29uX2ludGVydmFsID0gYnNzX2NvbmYtPmJlYWNvbl9pbnQ7CiAJCWN1cl9jb25mLT5kdGltX3BlcmlvZCA9IGJzc19jb25mLT5kdGltX3BlcmlvZDsKKwl9IGVsc2UgeworCQlpZnR5cGUgPSBzYy0+c2NfYWgtPm9wbW9kZTsKKwl9CisKIAkJY3VyX2NvbmYtPmxpc3Rlbl9pbnRlcnZhbCA9IDE7CiAJCWN1cl9jb25mLT5kdGltX2NvdW50ID0gMTsKIAkJY3VyX2NvbmYtPmJtaXNzX3RpbWVvdXQgPQogCQkJQVRIX0RFRkFVTFRfQk1JU1NfTElNSVQgKiBjdXJfY29uZi0+YmVhY29uX2ludGVydmFsOwotCX0gZWxzZSB7Ci0JCWlmdHlwZSA9IHNjLT5zY19haC0+b3Btb2RlOwotCX0KIAogCS8qCiAJICogSXQgbG9va3MgbGlrZSBtYWM4MDIxMSBtYXkgZW5kIHVwIHVzaW5nIGJlYWNvbiBpbnRlcnZhbCBvZiB6ZXJvIGluCkBAIC03MjMsMjAgKzczNCwyNyBAQAogCWlmIChjdXJfY29uZi0+YmVhY29uX2ludGVydmFsID09IDApCiAJCWN1cl9jb25mLT5iZWFjb25faW50ZXJ2YWwgPSAxMDA7CiAKKwkvKgorCSAqIFNvbWUgdGltZXMgd2UgZG9udCBwYXJzZSBkdGltIHBlcmlvZCBmcm9tIG1hYzgwMjExLCBpbiB0aGF0IGNhc2UKKwkgKiB1c2UgYSBkZWZhdWx0IHZhbHVlCisJICovCisJaWYgKGN1cl9jb25mLT5kdGltX3BlcmlvZCA9PSAwKQorCQljdXJfY29uZi0+ZHRpbV9wZXJpb2QgPSAxOworCiAJc3dpdGNoIChpZnR5cGUpIHsKIAljYXNlIE5MODAyMTFfSUZUWVBFX0FQOgogCQlhdGhfYmVhY29uX2NvbmZpZ19hcChzYywgY3VyX2NvbmYpOwogCQlicmVhazsKIAljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgogCWNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDoKLQkJYXRoX2JlYWNvbl9jb25maWdfYWRob2Moc2MsIGN1cl9jb25mLCB2aWYpOworCQlhdGhfYmVhY29uX2NvbmZpZ19hZGhvYyhzYywgY3VyX2NvbmYpOwogCQlicmVhazsKIAljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CiAJCWF0aF9iZWFjb25fY29uZmlnX3N0YShzYywgY3VyX2NvbmYpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0NPTkZJRywKLQkJCSAgIlVuc3VwcG9ydGVkIGJlYWNvbmluZyBtb2RlXG4iKTsKKwkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ09ORklHLAorCQkJIlVuc3VwcG9ydGVkIGJlYWNvbmluZyBtb2RlXG4iKTsKIAkJcmV0dXJuOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2J0Y29leC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2J0Y29leC5jCmluZGV4IDZhOTJlNTcuLmQzM2JmMjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9idGNvZXguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYnRjb2V4LmMKQEAgLTM1LDI5ICszNSw2IEBACiAJYm9vbCBidF9ob2xkX3J4X2NsZWFyOwogfTsKIAotc3RhdGljIGNvbnN0IHUxNiBhdGhfc3Vic3lzaWRfdGJsW10gPSB7Ci0JQVI5MjgwX0NPRVgyV0lSRV9TVUJTWVNJRCwKLQlBVDkyODVfQ09FWDNXSVJFX1NBX1NVQlNZU0lELAotCUFUOTI4NV9DT0VYM1dJUkVfREFfU1VCU1lTSUQKLX07Ci0KLS8qCi0gKiBDaGVja3MgdGhlIHN1YnN5c3RlbSBpZCBvZiB0aGUgZGV2aWNlIHRvIHNlZSBpZiBpdAotICogc3VwcG9ydHMgYnRjb2V4Ci0gKi8KLWJvb2wgYXRoOWtfaHdfYnRjb2V4X3N1cHBvcnRlZChzdHJ1Y3QgYXRoX2h3ICphaCkKLXsKLQlpbnQgaTsKLQotCWlmICghYWgtPmh3X3ZlcnNpb24uc3Vic3lzaWQpCi0JCXJldHVybiBmYWxzZTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGF0aF9zdWJzeXNpZF90YmwpOyBpKyspCi0JCWlmIChhaC0+aHdfdmVyc2lvbi5zdWJzeXNpZCA9PSBhdGhfc3Vic3lzaWRfdGJsW2ldKQotCQkJcmV0dXJuIHRydWU7Ci0KLQlyZXR1cm4gZmFsc2U7Ci19CiAKIHZvaWQgYXRoOWtfaHdfaW5pdF9idGNvZXhfaHcoc3RydWN0IGF0aF9odyAqYWgsIGludCBxbnVtKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2J0Y29leC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2J0Y29leC5oCmluZGV4IDFlZTVhMTUuLjU4OGRmZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9idGNvZXguaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYnRjb2V4LmgKQEAgLTQ5LDcgKzQ5LDYgQEAKIAl1MzIgYnRfY29leF9tb2RlMjsgCS8qIFJlZ2lzdGVyIHNldHRpbmcgZm9yIEFSX0JUX0NPRVhfTU9ERTIgKi8KIH07CiAKLWJvb2wgYXRoOWtfaHdfYnRjb2V4X3N1cHBvcnRlZChzdHJ1Y3QgYXRoX2h3ICphaCk7CiB2b2lkIGF0aDlrX2h3X2J0Y29leF9pbml0XzJ3aXJlKHN0cnVjdCBhdGhfaHcgKmFoKTsKIHZvaWQgYXRoOWtfaHdfYnRjb2V4X2luaXRfM3dpcmUoc3RydWN0IGF0aF9odyAqYWgpOwogdm9pZCBhdGg5a19od19pbml0X2J0Y29leF9odyhzdHJ1Y3QgYXRoX2h3ICphaCwgaW50IHFudW0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NhbGliLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY2FsaWIuYwppbmRleCA2ZDUwOTQ4Li5iNjhhMWFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY2FsaWIuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY2FsaWIuYwpAQCAtOTcsMTIgKzk3LDEyIEBACiAJCWlmIChoW2ldLnByaXZORiA+IGxpbWl0LT5tYXgpIHsKIAkJCWhpZ2hfbmZfbWlkID0gdHJ1ZTsKIAotCQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCi0JCQkJICAiTkZtaWRbJWRdICglZCkgPiBNQVggKCVkKSwgJXNcbiIsCi0JCQkJICBpLCBoW2ldLnByaXZORiwgbGltaXQtPm1heCwKLQkJCQkgIChjYWwtPm5mY2FsX2ludGVyZmVyZW5jZSA/Ci0JCQkJICAgIm5vdCBjb3JyZWN0ZWQgKGR1ZSB0byBpbnRlcmZlcmVuY2UpIiA6Ci0JCQkJICAgImNvcnJlY3RpbmcgdG8gTUFYIikpOworCQkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAorCQkJCSJORm1pZFslZF0gKCVkKSA+IE1BWCAoJWQpLCAlc1xuIiwKKwkJCQlpLCBoW2ldLnByaXZORiwgbGltaXQtPm1heCwKKwkJCQkoY2FsLT5uZmNhbF9pbnRlcmZlcmVuY2UgPworCQkJCSAibm90IGNvcnJlY3RlZCAoZHVlIHRvIGludGVyZmVyZW5jZSkiIDoKKwkJCQkgImNvcnJlY3RpbmcgdG8gTUFYIikpOwogCiAJCQkvKgogCQkJICogTm9ybWFsbHkgd2UgbGltaXQgdGhlIGF2ZXJhZ2Ugbm9pc2UgZmxvb3IgYnkgdGhlCkBAIC0xODAsMTggKzE4MCwxOCBAQAogCQlyZXR1cm4gdHJ1ZTsKIAogCWlmIChjdXJyQ2FsLT5jYWxTdGF0ZSAhPSBDQUxfRE9ORSkgewotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwKLQkJCSAgIkNhbGlicmF0aW9uIHN0YXRlIGluY29ycmVjdCwgJWRcbiIsCi0JCQkgIGN1cnJDYWwtPmNhbFN0YXRlKTsKKwkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAorCQkJIkNhbGlicmF0aW9uIHN0YXRlIGluY29ycmVjdCwgJWRcbiIsCisJCQljdXJyQ2FsLT5jYWxTdGF0ZSk7CiAJCXJldHVybiB0cnVlOwogCX0KIAogCWlmICghKGFoLT5zdXBwX2NhbHMgJiBjdXJyQ2FsLT5jYWxEYXRhLT5jYWxUeXBlKSkKIAkJcmV0dXJuIHRydWU7CiAKLQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwKLQkJICAiUmVzZXR0aW5nIENhbCAlZCBzdGF0ZSBmb3IgY2hhbm5lbCAldVxuIiwKLQkJICBjdXJyQ2FsLT5jYWxEYXRhLT5jYWxUeXBlLCBjb25mLT5jaGFubmVsLT5jZW50ZXJfZnJlcSk7CisJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAorCQkiUmVzZXR0aW5nIENhbCAlZCBzdGF0ZSBmb3IgY2hhbm5lbCAldVxuIiwKKwkJY3VyckNhbC0+Y2FsRGF0YS0+Y2FsVHlwZSwgY29uZi0+Y2hhbm5lbC0+Y2VudGVyX2ZyZXEpOwogCiAJYWgtPmNhbGRhdGEtPkNhbFZhbGlkICY9IH5jdXJyQ2FsLT5jYWxEYXRhLT5jYWxUeXBlOwogCWN1cnJDYWwtPmNhbFN0YXRlID0gQ0FMX1dBSVRJTkc7CkBAIC0yNzksOSArMjc5LDkgQEAKIAkgKiBub2lzZWZsb29yIHVudGlsIHRoZSBuZXh0IGNhbGlicmF0aW9uIHRpbWVyLgogCSAqLwogCWlmIChqID09IDEwMDApIHsKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19BTlksICJUaW1lb3V0IHdoaWxlIHdhaXRpbmcgZm9yIG5mICIKLQkJCSAgInRvIGxvYWQ6IEFSX1BIWV9BR0NfQ09OVFJPTD0weCV4XG4iLAotCQkJICBSRUdfUkVBRChhaCwgQVJfUEhZX0FHQ19DT05UUk9MKSk7CisJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0FOWSwKKwkJCSJUaW1lb3V0IHdoaWxlIHdhaXRpbmcgZm9yIG5mIHRvIGxvYWQ6IEFSX1BIWV9BR0NfQ09OVFJPTD0weCV4XG4iLAorCQkJUkVHX1JFQUQoYWgsIEFSX1BIWV9BR0NfQ09OVFJPTCkpOwogCQlyZXR1cm47CiAJfQogCkBAIC0zMTgsMTkgKzMxOCwxOSBAQAogCQlpZiAoIW5mW2ldKQogCQkJY29udGludWU7CiAKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCi0JCQkgICJORiBjYWxpYnJhdGVkIFslc10gW2NoYWluICVkXSBpcyAlZFxuIiwKLQkJCSAgKGkgPj0gMyA/ICJleHQiIDogImN0bCIpLCBpICUgMywgbmZbaV0pOworCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCisJCQkiTkYgY2FsaWJyYXRlZCBbJXNdIFtjaGFpbiAlZF0gaXMgJWRcbiIsCisJCQkoaSA+PSAzID8gImV4dCIgOiAiY3RsIiksIGkgJSAzLCBuZltpXSk7CiAKIAkJaWYgKG5mW2ldID4gQVRIOUtfTkZfVE9PX0hJR0gpIHsKLQkJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAotCQkJCSAgIk5GWyVkXSAoJWQpID4gTUFYICglZCksIGNvcnJlY3RpbmcgdG8gTUFYIiwKLQkJCQkgIGksIG5mW2ldLCBBVEg5S19ORl9UT09fSElHSCk7CisJCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCisJCQkJIk5GWyVkXSAoJWQpID4gTUFYICglZCksIGNvcnJlY3RpbmcgdG8gTUFYXG4iLAorCQkJCWksIG5mW2ldLCBBVEg5S19ORl9UT09fSElHSCk7CiAJCQluZltpXSA9IGxpbWl0LT5tYXg7CiAJCX0gZWxzZSBpZiAobmZbaV0gPCBsaW1pdC0+bWluKSB7Ci0JCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwKLQkJCQkgICJORlslZF0gKCVkKSA8IE1JTiAoJWQpLCBjb3JyZWN0aW5nIHRvIE5PTSIsCi0JCQkJICBpLCBuZltpXSwgbGltaXQtPm1pbik7CisJCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCisJCQkJIk5GWyVkXSAoJWQpIDwgTUlOICglZCksIGNvcnJlY3RpbmcgdG8gTk9NXG4iLAorCQkJCWksIG5mW2ldLCBsaW1pdC0+bWluKTsKIAkJCW5mW2ldID0gbGltaXQtPm5vbWluYWw7CiAJCX0KIAl9CkBAIC0zNDcsOCArMzQ3LDggQEAKIAogCWNoYW4tPmNoYW5uZWxGbGFncyAmPSAofkNIQU5ORUxfQ1dfSU5UKTsKIAlpZiAoUkVHX1JFQUQoYWgsIEFSX1BIWV9BR0NfQ09OVFJPTCkgJiBBUl9QSFlfQUdDX0NPTlRST0xfTkYpIHsKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCi0JCQkgICJORiBkaWQgbm90IGNvbXBsZXRlIGluIGNhbGlicmF0aW9uIHdpbmRvd1xuIik7CisJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwKKwkJCSJORiBkaWQgbm90IGNvbXBsZXRlIGluIGNhbGlicmF0aW9uIHdpbmRvd1xuIik7CiAJCXJldHVybiBmYWxzZTsKIAl9CiAKQEAgLTM1NywxMCArMzU3LDkgQEAKIAluZiA9IG5mYXJyYXlbMF07CiAJaWYgKGF0aDlrX2h3X2dldF9uZl90aHJlc2goYWgsIGMtPmJhbmQsICZuZlRocmVzaCkKIAkgICAgJiYgbmYgPiBuZlRocmVzaCkgewotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwKLQkJCSAgIm5vaXNlIGZsb29yIGZhaWxlZCBkZXRlY3RlZDsgIgotCQkJICAiZGV0ZWN0ZWQgJWQsIHRocmVzaG9sZCAlZFxuIiwKLQkJCSAgbmYsIG5mVGhyZXNoKTsKKwkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAorCQkJIm5vaXNlIGZsb29yIGZhaWxlZCBkZXRlY3RlZDsgZGV0ZWN0ZWQgJWQsIHRocmVzaG9sZCAlZFxuIiwKKwkJCW5mLCBuZlRocmVzaCk7CiAJCWNoYW4tPmNoYW5uZWxGbGFncyB8PSBDSEFOTkVMX0NXX0lOVDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24uYwppbmRleCBmNDNhMmQ5Li5kZjE5OThkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi5jCkBAIC0xMDcsMTIgKzEwNywxMCBAQAogLyoKICAqIFVwZGF0ZSBpbnRlcm5hbCBjaGFubmVsIGZsYWdzLgogICovCi12b2lkIGF0aDlrX2Ntbl91cGRhdGVfaWNoYW5uZWwoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkgICAgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmljaGFuKQordm9pZCBhdGg5a19jbW5fdXBkYXRlX2ljaGFubmVsKHN0cnVjdCBhdGg5a19jaGFubmVsICppY2hhbiwKKwkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4sCisJCQkgICAgICAgZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaGFubmVsX3R5cGUpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuID0gaHctPmNvbmYuY2hhbm5lbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmaHctPmNvbmY7Ci0KIAlpY2hhbi0+Y2hhbm5lbCA9IGNoYW4tPmNlbnRlcl9mcmVxOwogCWljaGFuLT5jaGFuID0gY2hhbjsKIApAQCAtMTI0LDkgKzEyMiw4IEBACiAJCWljaGFuLT5jaGFubmVsRmxhZ3MgPSBDSEFOTkVMXzVHSFogfCBDSEFOTkVMX09GRE07CiAJfQogCi0JaWYgKGNvbmZfaXNfaHQoY29uZikpCi0JCWljaGFuLT5jaGFubW9kZSA9IGF0aDlrX2dldF9leHRjaGFubW9kZShjaGFuLAotCQkJCQkJCWNvbmYtPmNoYW5uZWxfdHlwZSk7CisJaWYgKGNoYW5uZWxfdHlwZSAhPSBOTDgwMjExX0NIQU5fTk9fSFQpCisJCWljaGFuLT5jaGFubW9kZSA9IGF0aDlrX2dldF9leHRjaGFubW9kZShjaGFuLCBjaGFubmVsX3R5cGUpOwogfQogRVhQT1JUX1NZTUJPTChhdGg5a19jbW5fdXBkYXRlX2ljaGFubmVsKTsKIApAQCAtMTQyLDcgKzEzOSw3IEBACiAKIAljaGFuX2lkeCA9IGN1cmNoYW4tPmh3X3ZhbHVlOwogCWNoYW5uZWwgPSAmYWgtPmNoYW5uZWxzW2NoYW5faWR4XTsKLQlhdGg5a19jbW5fdXBkYXRlX2ljaGFubmVsKGh3LCBjaGFubmVsKTsKKwlhdGg5a19jbW5fdXBkYXRlX2ljaGFubmVsKGNoYW5uZWwsIGN1cmNoYW4sIGh3LT5jb25mLmNoYW5uZWxfdHlwZSk7CiAKIAlyZXR1cm4gY2hhbm5lbDsKIH0KQEAgLTE4Myw4ICsxODAsOCBAQAogCQkJCQkgICBBUl9TVE9NUF9OT05FX1dMQU5fV0dIVCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQlRDT0VYLAotCQkJICAiSW52YWxpZCBTdG9tcHR5cGVcbiIpOworCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19CVENPRVgsCisJCQkiSW52YWxpZCBTdG9tcHR5cGVcbiIpOwogCQlicmVhazsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24uaAppbmRleCBmZWEzYjMzLi5hMTI2YmRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi5oCkBAIC0xNyw3ICsxNyw2IEBACiAjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CiAKICNpbmNsdWRlICIuLi9hdGguaCIKLSNpbmNsdWRlICIuLi9kZWJ1Zy5oIgogCiAjaW5jbHVkZSAiaHcuaCIKICNpbmNsdWRlICJody1vcHMuaCIKQEAgLTMxLDEwICszMCwxMSBAQAogI2RlZmluZSBXTUVfTUFYX0JBICAgICAgICAgICAgICBXTUVfQkFfQk1QX1NJWkUKICNkZWZpbmUgQVRIX1RJRF9NQVhfQlVGUyAgICAgICAgKDIgKiBXTUVfTUFYX0JBKQogCi0jZGVmaW5lIFdNRV9BQ19CRSAgIDAKLSNkZWZpbmUgV01FX0FDX0JLICAgMQotI2RlZmluZSBXTUVfQUNfVkkgICAyCi0jZGVmaW5lIFdNRV9BQ19WTyAgIDMKKy8qIFRoZXNlIG11c3QgbWF0Y2ggbWFjODAyMTEgc2tiIHF1ZXVlIG1hcHBpbmcgbnVtYmVycyAqLworI2RlZmluZSBXTUVfQUNfVk8gICAwCisjZGVmaW5lIFdNRV9BQ19WSSAgIDEKKyNkZWZpbmUgV01FX0FDX0JFICAgMgorI2RlZmluZSBXTUVfQUNfQksgICAzCiAjZGVmaW5lIFdNRV9OVU1fQUMgIDQKIAogI2RlZmluZSBBVEhfUlNTSV9EVU1NWV9NQVJLRVIgICAweDEyNwpAQCAtNjIsOCArNjIsOSBAQAogCiBpbnQgYXRoOWtfY21uX3BhZHBvcyhfX2xlMTYgZnJhbWVfY29udHJvbCk7CiBpbnQgYXRoOWtfY21uX2dldF9od19jcnlwdG9fa2V5dHlwZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLXZvaWQgYXRoOWtfY21uX3VwZGF0ZV9pY2hhbm5lbChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCSAgICAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqaWNoYW4pOwordm9pZCBhdGg5a19jbW5fdXBkYXRlX2ljaGFubmVsKHN0cnVjdCBhdGg5a19jaGFubmVsICppY2hhbiwKKwkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4sCisJCQkgICAgICAgZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaGFubmVsX3R5cGUpOwogc3RydWN0IGF0aDlrX2NoYW5uZWwgKmF0aDlrX2Ntbl9nZXRfY3VyY2hhbm5lbChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkJICAgICAgIHN0cnVjdCBhdGhfaHcgKmFoKTsKIGludCBhdGg5a19jbW5fY291bnRfc3RyZWFtcyh1bnNpZ25lZCBpbnQgY2hhaW5tYXNrLCBpbnQgbWF4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9kZWJ1Zy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2RlYnVnLmMKaW5kZXggNDNlNzFhOS4uMzU4NmM0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2RlYnVnLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2RlYnVnLmMKQEAgLTI0LDggKzI0LDYgQEAKICNkZWZpbmUgUkVHX1JFQURfRChfYWgsIF9yZWcpIFwKIAlhdGg5a19od19jb21tb24oX2FoKS0+b3BzLT5yZWFkKChfYWgpLCAoX3JlZykpCiAKLXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICphdGg5a19kZWJ1Z2ZzX3Jvb3Q7Ci0KIHN0YXRpYyBpbnQgYXRoOWtfZGVidWdmc19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewogCWZpbGUtPnByaXZhdGVfZGF0YSA9IGlub2RlLT5pX3ByaXZhdGU7CkBAIC00NjEsMTYgKzQ1OSwxNiBAQAogCiAJLyogUHV0IHZhcmlhYmxlLWxlbmd0aCBzdHVmZiBkb3duIGhlcmUsIGFuZCBjaGVjayBmb3Igb3ZlcmZsb3dzLiAqLwogCWZvciAoaSA9IDA7IGkgPCBzYy0+bnVtX3NlY193aXBoeTsgaSsrKSB7Ci0JCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBzYy0+c2VjX3dpcGh5W2ldOwotCQlpZiAoYXBoeSA9PSBOVUxMKQorCQlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5X3RtcCA9IHNjLT5zZWNfd2lwaHlbaV07CisJCWlmIChhcGh5X3RtcCA9PSBOVUxMKQogCQkJY29udGludWU7Ci0JCWNoYW4gPSBhcGh5LT5ody0+Y29uZi5jaGFubmVsOworCQljaGFuID0gYXBoeV90bXAtPmh3LT5jb25mLmNoYW5uZWw7CiAJCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAogCQkJInNlY29uZGFyeTogJXMgKCVzIGNoYW49JWQgaHQ9JWQpXG4iLAotCQkJd2lwaHlfbmFtZShhcGh5LT5ody0+d2lwaHkpLAotCQkJYXRoX3dpcGh5X3N0YXRlX3N0cihhcGh5LT5zdGF0ZSksCisJCQl3aXBoeV9uYW1lKGFwaHlfdG1wLT5ody0+d2lwaHkpLAorCQkJYXRoX3dpcGh5X3N0YXRlX3N0cihhcGh5X3RtcC0+c3RhdGUpLAogCQkJaWVlZTgwMjExX2ZyZXF1ZW5jeV90b19jaGFubmVsKGNoYW4tPmNlbnRlcl9mcmVxKSwKLQkJCWFwaHktPmNoYW5faXNfaHQpOworCQkJCQkJICAgICAgIGFwaHlfdG1wLT5jaGFuX2lzX2h0KTsKIAl9CiAJaWYgKGxlbiA+IHNpemVvZihidWYpKQogCQlsZW4gPSBzaXplb2YoYnVmKTsKQEAgLTU4NSwxMCArNTgzLDEwIEBACiAJZG8gewkJCQkJCQkJXAogCQlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLAkJCVwKIAkJCQkiJXMlMTN1JTExdSUxMHUlMTB1XG4iLCBzdHIsCQlcCi0JCXNjLT5kZWJ1Zy5zdGF0cy50eHN0YXRzW3NjLT50eC5od3FfbWFwW1dNRV9BQ19CRV1dLmVsZW0sIFwKLQkJc2MtPmRlYnVnLnN0YXRzLnR4c3RhdHNbc2MtPnR4Lmh3cV9tYXBbV01FX0FDX0JLXV0uZWxlbSwgXAotCQlzYy0+ZGVidWcuc3RhdHMudHhzdGF0c1tzYy0+dHguaHdxX21hcFtXTUVfQUNfVkldXS5lbGVtLCBcCi0JCXNjLT5kZWJ1Zy5zdGF0cy50eHN0YXRzW3NjLT50eC5od3FfbWFwW1dNRV9BQ19WT11dLmVsZW0pOyBcCisJCXNjLT5kZWJ1Zy5zdGF0cy50eHN0YXRzW1dNRV9BQ19CRV0uZWxlbSwgXAorCQlzYy0+ZGVidWcuc3RhdHMudHhzdGF0c1tXTUVfQUNfQktdLmVsZW0sIFwKKwkJc2MtPmRlYnVnLnN0YXRzLnR4c3RhdHNbV01FX0FDX1ZJXS5lbGVtLCBcCisJCXNjLT5kZWJ1Zy5zdGF0cy50eHN0YXRzW1dNRV9BQ19WT10uZWxlbSk7IFwKIH0gd2hpbGUoMCkKIAogc3RhdGljIHNzaXplX3QgcmVhZF9maWxlX3htaXQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKQEAgLTYzMCwzMyArNjI4LDM1IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAotdm9pZCBhdGhfZGVidWdfc3RhdF90eChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF90eHEgKnR4cSwKLQkJICAgICAgIHN0cnVjdCBhdGhfYnVmICpiZiwgc3RydWN0IGF0aF90eF9zdGF0dXMgKnRzKQordm9pZCBhdGhfZGVidWdfc3RhdF90eChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9idWYgKmJmLAorCQkgICAgICAgc3RydWN0IGF0aF90eF9zdGF0dXMgKnRzKQogewotCVRYX1NUQVRfSU5DKHR4cS0+YXhxX3FudW0sIHR4X3BrdHNfYWxsKTsKLQlzYy0+ZGVidWcuc3RhdHMudHhzdGF0c1t0eHEtPmF4cV9xbnVtXS50eF9ieXRlc19hbGwgKz0gYmYtPmJmX21wZHUtPmxlbjsKKwlpbnQgcW51bSA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhiZi0+YmZfbXBkdSk7CisKKwlUWF9TVEFUX0lOQyhxbnVtLCB0eF9wa3RzX2FsbCk7CisJc2MtPmRlYnVnLnN0YXRzLnR4c3RhdHNbcW51bV0udHhfYnl0ZXNfYWxsICs9IGJmLT5iZl9tcGR1LT5sZW47CiAKIAlpZiAoYmZfaXNhbXBkdShiZikpIHsKIAkJaWYgKGJmX2lzeHJldHJpZWQoYmYpKQotCQkJVFhfU1RBVF9JTkModHhxLT5heHFfcW51bSwgYV94cmV0cmllcyk7CisJCQlUWF9TVEFUX0lOQyhxbnVtLCBhX3hyZXRyaWVzKTsKIAkJZWxzZQotCQkJVFhfU1RBVF9JTkModHhxLT5heHFfcW51bSwgYV9jb21wbGV0ZWQpOworCQkJVFhfU1RBVF9JTkMocW51bSwgYV9jb21wbGV0ZWQpOwogCX0gZWxzZSB7Ci0JCVRYX1NUQVRfSU5DKHR4cS0+YXhxX3FudW0sIGNvbXBsZXRlZCk7CisJCVRYX1NUQVRfSU5DKHFudW0sIGNvbXBsZXRlZCk7CiAJfQogCiAJaWYgKHRzLT50c19zdGF0dXMgJiBBVEg5S19UWEVSUl9GSUZPKQotCQlUWF9TVEFUX0lOQyh0eHEtPmF4cV9xbnVtLCBmaWZvX3VuZGVycnVuKTsKKwkJVFhfU1RBVF9JTkMocW51bSwgZmlmb191bmRlcnJ1bik7CiAJaWYgKHRzLT50c19zdGF0dXMgJiBBVEg5S19UWEVSUl9YVFhPUCkKLQkJVFhfU1RBVF9JTkModHhxLT5heHFfcW51bSwgeHR4b3ApOworCQlUWF9TVEFUX0lOQyhxbnVtLCB4dHhvcCk7CiAJaWYgKHRzLT50c19zdGF0dXMgJiBBVEg5S19UWEVSUl9USU1FUl9FWFBJUkVEKQotCQlUWF9TVEFUX0lOQyh0eHEtPmF4cV9xbnVtLCB0aW1lcl9leHApOworCQlUWF9TVEFUX0lOQyhxbnVtLCB0aW1lcl9leHApOwogCWlmICh0cy0+dHNfZmxhZ3MgJiBBVEg5S19UWF9ERVNDX0NGR19FUlIpCi0JCVRYX1NUQVRfSU5DKHR4cS0+YXhxX3FudW0sIGRlc2NfY2ZnX2Vycik7CisJCVRYX1NUQVRfSU5DKHFudW0sIGRlc2NfY2ZnX2Vycik7CiAJaWYgKHRzLT50c19mbGFncyAmIEFUSDlLX1RYX0RBVEFfVU5ERVJSVU4pCi0JCVRYX1NUQVRfSU5DKHR4cS0+YXhxX3FudW0sIGRhdGFfdW5kZXJydW4pOworCQlUWF9TVEFUX0lOQyhxbnVtLCBkYXRhX3VuZGVycnVuKTsKIAlpZiAodHMtPnRzX2ZsYWdzICYgQVRIOUtfVFhfREVMSU1fVU5ERVJSVU4pCi0JCVRYX1NUQVRfSU5DKHR4cS0+YXhxX3FudW0sIGRlbGltX3VuZGVycnVuKTsKKwkJVFhfU1RBVF9JTkMocW51bSwgZGVsaW1fdW5kZXJydW4pOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzX3htaXQgPSB7CkBAIC04NzYsMTEgKzg3Niw4IEBACiAJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihhaCk7CiAJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSAoc3RydWN0IGF0aF9zb2Z0YyAqKSBjb21tb24tPnByaXY7CiAKLQlpZiAoIWF0aDlrX2RlYnVnZnNfcm9vdCkKLQkJcmV0dXJuIC1FTk9FTlQ7Ci0KLQlzYy0+ZGVidWcuZGVidWdmc19waHkgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIod2lwaHlfbmFtZShzYy0+aHctPndpcGh5KSwKLQkJCQkJCSAgICAgIGF0aDlrX2RlYnVnZnNfcm9vdCk7CisJc2MtPmRlYnVnLmRlYnVnZnNfcGh5ID0gZGVidWdmc19jcmVhdGVfZGlyKCJhdGg5ayIsCisJCQkJCQkgICBzYy0+aHctPndpcGh5LT5kZWJ1Z2ZzZGlyKTsKIAlpZiAoIXNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTkzMywyOSArOTMwLDcgQEAKIAlzYy0+ZGVidWcucmVnaWR4ID0gMDsKIAlyZXR1cm4gMDsKIGVycjoKLQlhdGg5a19leGl0X2RlYnVnKGFoKTsKLQlyZXR1cm4gLUVOT01FTTsKLX0KLQotdm9pZCBhdGg5a19leGl0X2RlYnVnKHN0cnVjdCBhdGhfaHcgKmFoKQotewotCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOwotCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gKHN0cnVjdCBhdGhfc29mdGMgKikgY29tbW9uLT5wcml2OwotCiAJZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKHNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSk7Ci19Ci0KLWludCBhdGg5a19kZWJ1Z19jcmVhdGVfcm9vdCh2b2lkKQotewotCWF0aDlrX2RlYnVnZnNfcm9vdCA9IGRlYnVnZnNfY3JlYXRlX2RpcihLQlVJTERfTU9ETkFNRSwgTlVMTCk7Ci0JaWYgKCFhdGg5a19kZWJ1Z2ZzX3Jvb3QpCi0JCXJldHVybiAtRU5PRU5UOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgYXRoOWtfZGVidWdfcmVtb3ZlX3Jvb3Qodm9pZCkKLXsKLQlkZWJ1Z2ZzX3JlbW92ZShhdGg5a19kZWJ1Z2ZzX3Jvb3QpOwotCWF0aDlrX2RlYnVnZnNfcm9vdCA9IE5VTEw7CisJc2MtPmRlYnVnLmRlYnVnZnNfcGh5ID0gTlVMTDsKKwlyZXR1cm4gLUVOT01FTTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9kZWJ1Zy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2RlYnVnLmgKaW5kZXggYmIwODIzMi4uMWU1MDc4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2RlYnVnLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2RlYnVnLmgKQEAgLTE2NCwxMyArMTY0LDEwIEBACiB9OwogCiBpbnQgYXRoOWtfaW5pdF9kZWJ1ZyhzdHJ1Y3QgYXRoX2h3ICphaCk7Ci12b2lkIGF0aDlrX2V4aXRfZGVidWcoc3RydWN0IGF0aF9odyAqYWgpOwogCi1pbnQgYXRoOWtfZGVidWdfY3JlYXRlX3Jvb3Qodm9pZCk7Ci12b2lkIGF0aDlrX2RlYnVnX3JlbW92ZV9yb290KHZvaWQpOwogdm9pZCBhdGhfZGVidWdfc3RhdF9pbnRlcnJ1cHQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGVudW0gYXRoOWtfaW50IHN0YXR1cyk7Ci12b2lkIGF0aF9kZWJ1Z19zdGF0X3R4KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX3R4cSAqdHhxLAotCQkgICAgICAgc3RydWN0IGF0aF9idWYgKmJmLCBzdHJ1Y3QgYXRoX3R4X3N0YXR1cyAqdHMpOwordm9pZCBhdGhfZGVidWdfc3RhdF90eChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9idWYgKmJmLAorCQkgICAgICAgc3RydWN0IGF0aF90eF9zdGF0dXMgKnRzKTsKIHZvaWQgYXRoX2RlYnVnX3N0YXRfcngoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfcnhfc3RhdHVzICpycyk7CiAKICNlbHNlCkBAIC0xODAsMjYgKzE3NywxMiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRoOWtfZXhpdF9kZWJ1ZyhzdHJ1Y3QgYXRoX2h3ICphaCkKLXsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgYXRoOWtfZGVidWdfY3JlYXRlX3Jvb3Qodm9pZCkKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGF0aDlrX2RlYnVnX3JlbW92ZV9yb290KHZvaWQpCi17Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCBhdGhfZGVidWdfc3RhdF9pbnRlcnJ1cHQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCiAJCQkJCSAgICBlbnVtIGF0aDlrX2ludCBzdGF0dXMpCiB7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhdGhfZGVidWdfc3RhdF90eChzdHJ1Y3QgYXRoX3NvZnRjICpzYywKLQkJCQkgICAgIHN0cnVjdCBhdGhfdHhxICp0eHEsCiAJCQkJICAgICBzdHJ1Y3QgYXRoX2J1ZiAqYmYsCiAJCQkJICAgICBzdHJ1Y3QgYXRoX3R4X3N0YXR1cyAqdHMpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZWVwcm9tLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZWVwcm9tLmMKaW5kZXggMmJiZjk0ZC4uZDA1MTYzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2VlcHJvbS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9lZXByb20uYwpAQCAtMjM0LDcgKzIzNCw3IEBACiB1MTYgYXRoOWtfaHdfZ2V0X21heF9lZGdlX3Bvd2VyKHUxNiBmcmVxLCBzdHJ1Y3QgY2FsX2N0bF9lZGdlcyAqcFJkRWRnZXNQb3dlciwKIAkJCQlib29sIGlzMkdIeiwgaW50IG51bV9iYW5kX2VkZ2VzKQogewotCXUxNiB0d2ljZU1heEVkZ2VQb3dlciA9IEFSNTQxNl9NQVhfUkFURV9QT1dFUjsKKwl1MTYgdHdpY2VNYXhFZGdlUG93ZXIgPSBNQVhfUkFURV9QT1dFUjsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IChpIDwgbnVtX2JhbmRfZWRnZXMpICYmCkBAIC0yNzMsMTIgKzI3MywyMjUgQEAKIAkJcmVndWxhdG9yeS0+bWF4X3Bvd2VyX2xldmVsICs9IElOQ1JFQVNFX01BWFBPV19CWV9USFJFRV9DSEFJTjsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19FRVBST00sCi0JCQkgICJJbnZhbGlkIGNoYWlubWFzayBjb25maWd1cmF0aW9uXG4iKTsKKwkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfRUVQUk9NLAorCQkJIkludmFsaWQgY2hhaW5tYXNrIGNvbmZpZ3VyYXRpb25cbiIpOwogCQlicmVhazsKIAl9CiB9CiAKK3ZvaWQgYXRoOWtfaHdfZ2V0X2dhaW5fYm91bmRhcmllc19wZGFkY3Moc3RydWN0IGF0aF9odyAqYWgsCisJCQkJc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCisJCQkJdm9pZCAqcFJhd0RhdGFTZXQsCisJCQkJdTggKmJDaGFucywgdTE2IGF2YWlsUGllcnMsCisJCQkJdTE2IHRQZEdhaW5PdmVybGFwLAorCQkJCXUxNiAqcFBkR2FpbkJvdW5kYXJpZXMsIHU4ICpwUERBRENWYWx1ZXMsCisJCQkJdTE2IG51bVhwZEdhaW5zKQoreworCWludCBpLCBqLCBrOworCWludDE2X3Qgc3M7CisJdTE2IGlkeEwgPSAwLCBpZHhSID0gMCwgbnVtUGllcnM7CisJc3RhdGljIHU4IHZwZFRhYmxlTFtBUjU0MTZfTlVNX1BEX0dBSU5TXQorCQlbQVI1NDE2X01BWF9QV1JfUkFOR0VfSU5fSEFMRl9EQl07CisJc3RhdGljIHU4IHZwZFRhYmxlUltBUjU0MTZfTlVNX1BEX0dBSU5TXQorCQlbQVI1NDE2X01BWF9QV1JfUkFOR0VfSU5fSEFMRl9EQl07CisJc3RhdGljIHU4IHZwZFRhYmxlSVtBUjU0MTZfTlVNX1BEX0dBSU5TXQorCQlbQVI1NDE2X01BWF9QV1JfUkFOR0VfSU5fSEFMRl9EQl07CisKKwl1OCAqcFZwZEwsICpwVnBkUiwgKnBQd3JMLCAqcFB3clI7CisJdTggbWluUHdyVDRbQVI1NDE2X05VTV9QRF9HQUlOU107CisJdTggbWF4UHdyVDRbQVI1NDE2X05VTV9QRF9HQUlOU107CisJaW50MTZfdCB2cGRTdGVwOworCWludDE2X3QgdG1wVmFsOworCXUxNiBzaXplQ3VyclZwZFRhYmxlLCBtYXhJbmRleCwgdGd0SW5kZXg7CisJYm9vbCBtYXRjaDsKKwlpbnQxNl90IG1pbkRlbHRhID0gMDsKKwlzdHJ1Y3QgY2hhbl9jZW50ZXJzIGNlbnRlcnM7CisJaW50IHBkZ2Fpbl9ib3VuZGFyeV9kZWZhdWx0OworCXN0cnVjdCBjYWxfZGF0YV9wZXJfZnJlcSAqZGF0YV9kZWYgPSBwUmF3RGF0YVNldDsKKwlzdHJ1Y3QgY2FsX2RhdGFfcGVyX2ZyZXFfNGsgKmRhdGFfNGsgPSBwUmF3RGF0YVNldDsKKwlzdHJ1Y3QgY2FsX2RhdGFfcGVyX2ZyZXFfYXI5Mjg3ICpkYXRhXzkyODcgPSBwUmF3RGF0YVNldDsKKwlib29sIGVlcHJvbV80ayA9IEFSX1NSRVZfOTI4NShhaCkgfHwgQVJfU1JFVl85MjcxKGFoKTsKKwlpbnQgaW50ZXJjZXB0czsKKworCWlmIChBUl9TUkVWXzkyODcoYWgpKQorCQlpbnRlcmNlcHRzID0gQVI5Mjg3X1BEX0dBSU5fSUNFUFRTOworCWVsc2UKKwkJaW50ZXJjZXB0cyA9IEFSNTQxNl9QRF9HQUlOX0lDRVBUUzsKKworCW1lbXNldCgmbWluUHdyVDQsIDAsIEFSNTQxNl9OVU1fUERfR0FJTlMpOworCWF0aDlrX2h3X2dldF9jaGFubmVsX2NlbnRlcnMoYWgsIGNoYW4sICZjZW50ZXJzKTsKKworCWZvciAobnVtUGllcnMgPSAwOyBudW1QaWVycyA8IGF2YWlsUGllcnM7IG51bVBpZXJzKyspIHsKKwkJaWYgKGJDaGFuc1tudW1QaWVyc10gPT0gQVI1NDE2X0JDSEFOX1VOVVNFRCkKKwkJCWJyZWFrOworCX0KKworCW1hdGNoID0gYXRoOWtfaHdfZ2V0X2xvd2VyX3VwcGVyX2luZGV4KCh1OClGUkVRMkZCSU4oY2VudGVycy5zeW50aF9jZW50ZXIsCisJCQkJCQkJICAgICBJU19DSEFOXzJHSFooY2hhbikpLAorCQkJCQkgICAgICAgYkNoYW5zLCBudW1QaWVycywgJmlkeEwsICZpZHhSKTsKKworCWlmIChtYXRjaCkgeworCQlpZiAoQVJfU1JFVl85Mjg3KGFoKSkgeworCQkJLyogRklYTUU6IGFycmF5IG92ZXJydW4/ICovCisJCQlmb3IgKGkgPSAwOyBpIDwgbnVtWHBkR2FpbnM7IGkrKykgeworCQkJCW1pblB3clQ0W2ldID0gZGF0YV85Mjg3W2lkeExdLnB3clBkZ1tpXVswXTsKKwkJCQltYXhQd3JUNFtpXSA9IGRhdGFfOTI4N1tpZHhMXS5wd3JQZGdbaV1bNF07CisJCQkJYXRoOWtfaHdfZmlsbF92cGRfdGFibGUobWluUHdyVDRbaV0sIG1heFB3clQ0W2ldLAorCQkJCQkJZGF0YV85Mjg3W2lkeExdLnB3clBkZ1tpXSwKKwkJCQkJCWRhdGFfOTI4N1tpZHhMXS52cGRQZGdbaV0sCisJCQkJCQlpbnRlcmNlcHRzLAorCQkJCQkJdnBkVGFibGVJW2ldKTsKKwkJCX0KKwkJfSBlbHNlIGlmIChlZXByb21fNGspIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBudW1YcGRHYWluczsgaSsrKSB7CisJCQkJbWluUHdyVDRbaV0gPSBkYXRhXzRrW2lkeExdLnB3clBkZ1tpXVswXTsKKwkJCQltYXhQd3JUNFtpXSA9IGRhdGFfNGtbaWR4TF0ucHdyUGRnW2ldWzRdOworCQkJCWF0aDlrX2h3X2ZpbGxfdnBkX3RhYmxlKG1pblB3clQ0W2ldLCBtYXhQd3JUNFtpXSwKKwkJCQkJCWRhdGFfNGtbaWR4TF0ucHdyUGRnW2ldLAorCQkJCQkJZGF0YV80a1tpZHhMXS52cGRQZGdbaV0sCisJCQkJCQlpbnRlcmNlcHRzLAorCQkJCQkJdnBkVGFibGVJW2ldKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBudW1YcGRHYWluczsgaSsrKSB7CisJCQkJbWluUHdyVDRbaV0gPSBkYXRhX2RlZltpZHhMXS5wd3JQZGdbaV1bMF07CisJCQkJbWF4UHdyVDRbaV0gPSBkYXRhX2RlZltpZHhMXS5wd3JQZGdbaV1bNF07CisJCQkJYXRoOWtfaHdfZmlsbF92cGRfdGFibGUobWluUHdyVDRbaV0sIG1heFB3clQ0W2ldLAorCQkJCQkJZGF0YV9kZWZbaWR4TF0ucHdyUGRnW2ldLAorCQkJCQkJZGF0YV9kZWZbaWR4TF0udnBkUGRnW2ldLAorCQkJCQkJaW50ZXJjZXB0cywKKwkJCQkJCXZwZFRhYmxlSVtpXSk7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQlmb3IgKGkgPSAwOyBpIDwgbnVtWHBkR2FpbnM7IGkrKykgeworCQkJaWYgKEFSX1NSRVZfOTI4NyhhaCkpIHsKKwkJCQlwVnBkTCA9IGRhdGFfOTI4N1tpZHhMXS52cGRQZGdbaV07CisJCQkJcFB3ckwgPSBkYXRhXzkyODdbaWR4TF0ucHdyUGRnW2ldOworCQkJCXBWcGRSID0gZGF0YV85Mjg3W2lkeFJdLnZwZFBkZ1tpXTsKKwkJCQlwUHdyUiA9IGRhdGFfOTI4N1tpZHhSXS5wd3JQZGdbaV07CisJCQl9IGVsc2UgaWYgKGVlcHJvbV80aykgeworCQkJCXBWcGRMID0gZGF0YV80a1tpZHhMXS52cGRQZGdbaV07CisJCQkJcFB3ckwgPSBkYXRhXzRrW2lkeExdLnB3clBkZ1tpXTsKKwkJCQlwVnBkUiA9IGRhdGFfNGtbaWR4Ul0udnBkUGRnW2ldOworCQkJCXBQd3JSID0gZGF0YV80a1tpZHhSXS5wd3JQZGdbaV07CisJCQl9IGVsc2UgeworCQkJCXBWcGRMID0gZGF0YV9kZWZbaWR4TF0udnBkUGRnW2ldOworCQkJCXBQd3JMID0gZGF0YV9kZWZbaWR4TF0ucHdyUGRnW2ldOworCQkJCXBWcGRSID0gZGF0YV9kZWZbaWR4Ul0udnBkUGRnW2ldOworCQkJCXBQd3JSID0gZGF0YV9kZWZbaWR4Ul0ucHdyUGRnW2ldOworCQkJfQorCisJCQltaW5Qd3JUNFtpXSA9IG1heChwUHdyTFswXSwgcFB3clJbMF0pOworCisJCQltYXhQd3JUNFtpXSA9CisJCQkJbWluKHBQd3JMW2ludGVyY2VwdHMgLSAxXSwKKwkJCQkgICAgcFB3clJbaW50ZXJjZXB0cyAtIDFdKTsKKworCisJCQlhdGg5a19od19maWxsX3ZwZF90YWJsZShtaW5Qd3JUNFtpXSwgbWF4UHdyVDRbaV0sCisJCQkJCQlwUHdyTCwgcFZwZEwsCisJCQkJCQlpbnRlcmNlcHRzLAorCQkJCQkJdnBkVGFibGVMW2ldKTsKKwkJCWF0aDlrX2h3X2ZpbGxfdnBkX3RhYmxlKG1pblB3clQ0W2ldLCBtYXhQd3JUNFtpXSwKKwkJCQkJCXBQd3JSLCBwVnBkUiwKKwkJCQkJCWludGVyY2VwdHMsCisJCQkJCQl2cGRUYWJsZVJbaV0pOworCisJCQlmb3IgKGogPSAwOyBqIDw9IChtYXhQd3JUNFtpXSAtIG1pblB3clQ0W2ldKSAvIDI7IGorKykgeworCQkJCXZwZFRhYmxlSVtpXVtqXSA9CisJCQkJCSh1OCkoYXRoOWtfaHdfaW50ZXJwb2xhdGUoKHUxNikKKwkJCQkJICAgICBGUkVRMkZCSU4oY2VudGVycy4KKwkJCQkJCSAgICAgICBzeW50aF9jZW50ZXIsCisJCQkJCQkgICAgICAgSVNfQ0hBTl8yR0haCisJCQkJCQkgICAgICAgKGNoYW4pKSwKKwkJCQkJICAgICBiQ2hhbnNbaWR4TF0sIGJDaGFuc1tpZHhSXSwKKwkJCQkJICAgICB2cGRUYWJsZUxbaV1bal0sIHZwZFRhYmxlUltpXVtqXSkpOworCQkJfQorCQl9CisJfQorCisJayA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtWHBkR2FpbnM7IGkrKykgeworCQlpZiAoaSA9PSAobnVtWHBkR2FpbnMgLSAxKSkKKwkJCXBQZEdhaW5Cb3VuZGFyaWVzW2ldID0KKwkJCQkodTE2KShtYXhQd3JUNFtpXSAvIDIpOworCQllbHNlCisJCQlwUGRHYWluQm91bmRhcmllc1tpXSA9CisJCQkJKHUxNikoKG1heFB3clQ0W2ldICsgbWluUHdyVDRbaSArIDFdKSAvIDQpOworCisJCXBQZEdhaW5Cb3VuZGFyaWVzW2ldID0KKwkJCW1pbigodTE2KU1BWF9SQVRFX1BPV0VSLCBwUGRHYWluQm91bmRhcmllc1tpXSk7CisKKwkJaWYgKChpID09IDApICYmICFBUl9TUkVWXzU0MTZfMjBfT1JfTEFURVIoYWgpKSB7CisJCQltaW5EZWx0YSA9IHBQZEdhaW5Cb3VuZGFyaWVzWzBdIC0gMjM7CisJCQlwUGRHYWluQm91bmRhcmllc1swXSA9IDIzOworCQl9IGVsc2UgeworCQkJbWluRGVsdGEgPSAwOworCQl9CisKKwkJaWYgKGkgPT0gMCkgeworCQkJaWYgKEFSX1NSRVZfOTI4MF8yMF9PUl9MQVRFUihhaCkpCisJCQkJc3MgPSAoaW50MTZfdCkoMCAtIChtaW5Qd3JUNFtpXSAvIDIpKTsKKwkJCWVsc2UKKwkJCQlzcyA9IDA7CisJCX0gZWxzZSB7CisJCQlzcyA9IChpbnQxNl90KSgocFBkR2FpbkJvdW5kYXJpZXNbaSAtIDFdIC0KKwkJCQkJKG1pblB3clQ0W2ldIC8gMikpIC0KKwkJCQkgICAgICAgdFBkR2Fpbk92ZXJsYXAgKyAxICsgbWluRGVsdGEpOworCQl9CisJCXZwZFN0ZXAgPSAoaW50MTZfdCkodnBkVGFibGVJW2ldWzFdIC0gdnBkVGFibGVJW2ldWzBdKTsKKwkJdnBkU3RlcCA9IChpbnQxNl90KSgodnBkU3RlcCA8IDEpID8gMSA6IHZwZFN0ZXApOworCisJCXdoaWxlICgoc3MgPCAwKSAmJiAoayA8IChBUjU0MTZfTlVNX1BEQURDX1ZBTFVFUyAtIDEpKSkgeworCQkJdG1wVmFsID0gKGludDE2X3QpKHZwZFRhYmxlSVtpXVswXSArIHNzICogdnBkU3RlcCk7CisJCQlwUERBRENWYWx1ZXNbaysrXSA9ICh1OCkoKHRtcFZhbCA8IDApID8gMCA6IHRtcFZhbCk7CisJCQlzcysrOworCQl9CisKKwkJc2l6ZUN1cnJWcGRUYWJsZSA9ICh1OCkgKChtYXhQd3JUNFtpXSAtIG1pblB3clQ0W2ldKSAvIDIgKyAxKTsKKwkJdGd0SW5kZXggPSAodTgpKHBQZEdhaW5Cb3VuZGFyaWVzW2ldICsgdFBkR2Fpbk92ZXJsYXAgLQorCQkJCShtaW5Qd3JUNFtpXSAvIDIpKTsKKwkJbWF4SW5kZXggPSAodGd0SW5kZXggPCBzaXplQ3VyclZwZFRhYmxlKSA/CisJCQl0Z3RJbmRleCA6IHNpemVDdXJyVnBkVGFibGU7CisKKwkJd2hpbGUgKChzcyA8IG1heEluZGV4KSAmJiAoayA8IChBUjU0MTZfTlVNX1BEQURDX1ZBTFVFUyAtIDEpKSkgeworCQkJcFBEQURDVmFsdWVzW2srK10gPSB2cGRUYWJsZUlbaV1bc3MrK107CisJCX0KKworCQl2cGRTdGVwID0gKGludDE2X3QpKHZwZFRhYmxlSVtpXVtzaXplQ3VyclZwZFRhYmxlIC0gMV0gLQorCQkJCSAgICB2cGRUYWJsZUlbaV1bc2l6ZUN1cnJWcGRUYWJsZSAtIDJdKTsKKwkJdnBkU3RlcCA9IChpbnQxNl90KSgodnBkU3RlcCA8IDEpID8gMSA6IHZwZFN0ZXApOworCisJCWlmICh0Z3RJbmRleCA+PSBtYXhJbmRleCkgeworCQkJd2hpbGUgKChzcyA8PSB0Z3RJbmRleCkgJiYKKwkJCSAgICAgICAoayA8IChBUjU0MTZfTlVNX1BEQURDX1ZBTFVFUyAtIDEpKSkgeworCQkJCXRtcFZhbCA9IChpbnQxNl90KSgodnBkVGFibGVJW2ldW3NpemVDdXJyVnBkVGFibGUgLSAxXSArCisJCQkJCQkgICAgKHNzIC0gbWF4SW5kZXggKyAxKSAqIHZwZFN0ZXApKTsKKwkJCQlwUERBRENWYWx1ZXNbaysrXSA9ICh1OCkoKHRtcFZhbCA+IDI1NSkgPworCQkJCQkJCSAyNTUgOiB0bXBWYWwpOworCQkJCXNzKys7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoZWVwcm9tXzRrKQorCQlwZGdhaW5fYm91bmRhcnlfZGVmYXVsdCA9IDU4OworCWVsc2UKKwkJcGRnYWluX2JvdW5kYXJ5X2RlZmF1bHQgPSBwUGRHYWluQm91bmRhcmllc1tpIC0gMV07CisKKwl3aGlsZSAoaSA8IEFSNTQxNl9QRF9HQUlOU19JTl9NQVNLKSB7CisJCXBQZEdhaW5Cb3VuZGFyaWVzW2ldID0gcGRnYWluX2JvdW5kYXJ5X2RlZmF1bHQ7CisJCWkrKzsKKwl9CisKKwl3aGlsZSAoayA8IEFSNTQxNl9OVU1fUERBRENfVkFMVUVTKSB7CisJCXBQREFEQ1ZhbHVlc1trXSA9IHBQREFEQ1ZhbHVlc1trIC0gMV07CisJCWsrKzsKKwl9Cit9CisKIGludCBhdGg5a19od19lZXByb21faW5pdChzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAlpbnQgc3RhdHVzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2VlcHJvbS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2VlcHJvbS5oCmluZGV4IGRkNTlmMDkuLjU4ZTJkZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9lZXByb20uaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZWVwcm9tLmgKQEAgLTE3LDEyICsxNywxMiBAQAogI2lmbmRlZiBFRVBST01fSAogI2RlZmluZSBFRVBST01fSAogCisjZGVmaW5lIEFSX0VFUFJPTV9NT0RBTF9TUFVSUyAgIDUKKwogI2luY2x1ZGUgIi4uL2F0aC5oIgogI2luY2x1ZGUgPG5ldC9jZmc4MDIxMS5oPgogI2luY2x1ZGUgImFyOTAwM19lZXByb20uaCIKIAotI2RlZmluZSBBSF9VU0VfRUVQUk9NICAgMHgxCi0KICNpZmRlZiBfX0JJR19FTkRJQU4KICNkZWZpbmUgQVI1NDE2X0VFUFJPTV9NQUdJQyAweDVhYTUKICNlbHNlCkBAIC0xNDksOCArMTQ5LDYgQEAKICNkZWZpbmUgQVI1NDE2X05VTV9QRF9HQUlOUyAgICAgICAgICAgICA0CiAjZGVmaW5lIEFSNTQxNl9QRF9HQUlOU19JTl9NQVNLICAgICAgICAgNAogI2RlZmluZSBBUjU0MTZfUERfR0FJTl9JQ0VQVFMgICAgICAgICAgIDUKLSNkZWZpbmUgQVI1NDE2X0VFUFJPTV9NT0RBTF9TUFVSUyAgICAgICA1Ci0jZGVmaW5lIEFSNTQxNl9NQVhfUkFURV9QT1dFUiAgICAgICAgICAgNjMKICNkZWZpbmUgQVI1NDE2X05VTV9QREFEQ19WQUxVRVMgICAgICAgICAxMjgKICNkZWZpbmUgQVI1NDE2X0JDSEFOX1VOVVNFRCAgICAgICAgICAgICAweEZGCiAjZGVmaW5lIEFSNTQxNl9NQVhfUFdSX1JBTkdFX0lOX0hBTEZfREIgNjQKQEAgLTE3NSw4ICsxNzMsNiBAQAogI2RlZmluZSBBUjU0MTZfRUVQNEtfTlVNX0NUTFMgICAgICAgICAgICAgICAgIDEyCiAjZGVmaW5lIEFSNTQxNl9FRVA0S19OVU1fQkFORF9FREdFUyAgICAgICAgICAgNAogI2RlZmluZSBBUjU0MTZfRUVQNEtfTlVNX1BEX0dBSU5TICAgICAgICAgICAgIDIKLSNkZWZpbmUgQVI1NDE2X0VFUDRLX1BEX0dBSU5TX0lOX01BU0sgICAgICAgICA0Ci0jZGVmaW5lIEFSNTQxNl9FRVA0S19QRF9HQUlOX0lDRVBUUyAgICAgICAgICAgNQogI2RlZmluZSBBUjU0MTZfRUVQNEtfTUFYX0NIQUlOUyAgICAgICAgICAgICAgIDEKIAogI2RlZmluZSBBUjkyODBfVFhfR0FJTl9UQUJMRV9TSVpFIDIyCkBAIC0xOTgsMzUgKzE5NCwxMiBAQAogI2RlZmluZSBBUjkyODdfTlVNXzJHXzQwX1RBUkdFVF9QT1dFUlMgIDMKICNkZWZpbmUgQVI5Mjg3X05VTV9DVExTICAgICAgICAgICAgICAJMTIKICNkZWZpbmUgQVI5Mjg3X05VTV9CQU5EX0VER0VTICAgICAgICAJNAotI2RlZmluZSBBUjkyODdfTlVNX1BEX0dBSU5TICAgICAgICAgICAgIDQKLSNkZWZpbmUgQVI5Mjg3X1BEX0dBSU5TX0lOX01BU0sgICAgICAgICA0CiAjZGVmaW5lIEFSOTI4N19QRF9HQUlOX0lDRVBUUyAgICAgICAgICAgMQotI2RlZmluZSBBUjkyODdfRUVQUk9NX01PREFMX1NQVVJTICAgICAgIDUKLSNkZWZpbmUgQVI5Mjg3X01BWF9SQVRFX1BPV0VSICAgICAgICAgICA2MwotI2RlZmluZSBBUjkyODdfTlVNX1BEQURDX1ZBTFVFUyAgICAgICAgIDEyOAotI2RlZmluZSBBUjkyODdfTlVNX1JBVEVTICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIEFSOTI4N19CQ0hBTl9VTlVTRUQgICAgICAgICAgICAgMHhGRgotI2RlZmluZSBBUjkyODdfTUFYX1BXUl9SQU5HRV9JTl9IQUxGX0RCIDY0Ci0jZGVmaW5lIEFSOTI4N19PUEZMQUdTXzExQSAgICAgICAgICAgICAgMHgwMQotI2RlZmluZSBBUjkyODdfT1BGTEFHU18xMUcgICAgICAgICAgICAgIDB4MDIKLSNkZWZpbmUgQVI5Mjg3X09QRkxBR1NfMkdfSFQ0MCAgICAgICAgICAweDA4Ci0jZGVmaW5lIEFSOTI4N19PUEZMQUdTXzJHX0hUMjAgICAgICAgICAgMHgyMAotI2RlZmluZSBBUjkyODdfT1BGTEFHU181R19IVDQwICAgICAgICAgIDB4MDQKLSNkZWZpbmUgQVI5Mjg3X09QRkxBR1NfNUdfSFQyMCAgICAgICAgICAweDEwCiAjZGVmaW5lIEFSOTI4N19FRVBNSVNDX0JJR19FTkRJQU4gICAgICAgMHgwMQogI2RlZmluZSBBUjkyODdfRUVQTUlTQ19XT1cgICAgICAgICAgICAgIDB4MDIKICNkZWZpbmUgQVI5Mjg3X01BWF9DSEFJTlMgICAgICAgICAgICAgICAyCiAjZGVmaW5lIEFSOTI4N19BTlRfMTZTICAgICAgICAgICAgICAgICAgMzIKLSNkZWZpbmUgQVI5Mjg3X2N1c3RkYXRhc2l6ZSAgICAgICAgICAgICAyMAogCi0jZGVmaW5lIEFSOTI4N19OVU1fQU5UX0NIQUlOX0ZJRUxEUyAgICAgNgotI2RlZmluZSBBUjkyODdfTlVNX0FOVF9DT01NT05fRklFTERTICAgIDQKLSNkZWZpbmUgQVI5Mjg3X1NJWkVfQU5UX0NIQUlOX0ZJRUxEICAgICAyCi0jZGVmaW5lIEFSOTI4N19TSVpFX0FOVF9DT01NT05fRklFTEQgICAgNAotI2RlZmluZSBBUjkyODdfQU5UX0NIQUlOX01BU0sgICAgICAgICAgIDB4MwotI2RlZmluZSBBUjkyODdfQU5UX0NPTU1PTl9NQVNLICAgICAgICAgIDB4ZgotI2RlZmluZSBBUjkyODdfQ0hBSU5fMF9JRFggICAgICAgICAgICAgIDAKLSNkZWZpbmUgQVI5Mjg3X0NIQUlOXzFfSURYICAgICAgICAgICAgICAxCiAjZGVmaW5lIEFSOTI4N19EQVRBX1NaICAgICAgICAgICAgICAgICAgMzIKIAogI2RlZmluZSBBUjkyODdfUFdSX1RBQkxFX09GRlNFVF9EQiAgLTUKQEAgLTI4MCw2ICsyNTMsNyBAQAogCUVFUF9QQVBSRCwKIAlFRVBfTU9EQUxfVkVSLAogCUVFUF9BTlRfRElWX0NUTDEsCisJRUVQX0NIQUlOX01BU0tfUkVEVUNFCiB9OwogCiBlbnVtIGFyNTQxNl9yYXRlcyB7CkBAIC0zOTUsNyArMzY5LDcgQEAKIAl1MTYgeHBhQmlhc0x2bEZyZXFbM107CiAJdTggZnV0dXJlTW9kYWxbNl07CiAKLQlzdHJ1Y3Qgc3B1cl9jaGFuIHNwdXJDaGFuc1tBUjU0MTZfRUVQUk9NX01PREFMX1NQVVJTXTsKKwlzdHJ1Y3Qgc3B1cl9jaGFuIHNwdXJDaGFuc1tBUl9FRVBST01fTU9EQUxfU1BVUlNdOwogfSBfX3BhY2tlZDsKIAogc3RydWN0IGNhbERhdGFQZXJGcmVxT3BMb29wIHsKQEAgLTQ2Myw3ICs0MzcsNyBAQAogCXU4IGRiMl80OjQsIHJlc2VydmVkOjQ7CiAjZW5kaWYKIAl1OCBmdXR1cmVNb2RhbFs0XTsKLQlzdHJ1Y3Qgc3B1cl9jaGFuIHNwdXJDaGFuc1tBUjU0MTZfRUVQUk9NX01PREFMX1NQVVJTXTsKKwlzdHJ1Y3Qgc3B1cl9jaGFuIHNwdXJDaGFuc1tBUl9FRVBST01fTU9EQUxfU1BVUlNdOwogfSBfX3BhY2tlZDsKIAogc3RydWN0IGJhc2VfZWVwX2FyOTI4N19oZWFkZXIgewpAQCAtNTIxLDcgKzQ5NSw3IEBACiAJdTggb2JfcWFtOwogCXU4IG9iX3BhbF9vZmY7CiAJdTggZnV0dXJlTW9kYWxbMzBdOwotCXN0cnVjdCBzcHVyX2NoYW4gc3B1ckNoYW5zW0FSOTI4N19FRVBST01fTU9EQUxfU1BVUlNdOworCXN0cnVjdCBzcHVyX2NoYW4gc3B1ckNoYW5zW0FSX0VFUFJPTV9NT0RBTF9TUFVSU107CiB9IF9fcGFja2VkOwogCiBzdHJ1Y3QgY2FsX2RhdGFfcGVyX2ZyZXEgewpAQCAtNTMwLDggKzUwNCw4IEBACiB9IF9fcGFja2VkOwogCiBzdHJ1Y3QgY2FsX2RhdGFfcGVyX2ZyZXFfNGsgewotCXU4IHB3clBkZ1tBUjU0MTZfRUVQNEtfTlVNX1BEX0dBSU5TXVtBUjU0MTZfRUVQNEtfUERfR0FJTl9JQ0VQVFNdOwotCXU4IHZwZFBkZ1tBUjU0MTZfRUVQNEtfTlVNX1BEX0dBSU5TXVtBUjU0MTZfRUVQNEtfUERfR0FJTl9JQ0VQVFNdOworCXU4IHB3clBkZ1tBUjU0MTZfRUVQNEtfTlVNX1BEX0dBSU5TXVtBUjU0MTZfUERfR0FJTl9JQ0VQVFNdOworCXU4IHZwZFBkZ1tBUjU0MTZfRUVQNEtfTlVNX1BEX0dBSU5TXVtBUjU0MTZfUERfR0FJTl9JQ0VQVFNdOwogfSBfX3BhY2tlZDsKIAogc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfbGVnIHsKQEAgLTU1Nyw4ICs1MzEsOCBAQAogfSBfX3BhY2tlZDsKIAogc3RydWN0IGNhbF9kYXRhX3Blcl9mcmVxX2FyOTI4NyB7Ci0JdTggcHdyUGRnW0FSOTI4N19OVU1fUERfR0FJTlNdW0FSOTI4N19QRF9HQUlOX0lDRVBUU107Ci0JdTggdnBkUGRnW0FSOTI4N19OVU1fUERfR0FJTlNdW0FSOTI4N19QRF9HQUlOX0lDRVBUU107CisJdTggcHdyUGRnW0FSNTQxNl9OVU1fUERfR0FJTlNdW0FSOTI4N19QRF9HQUlOX0lDRVBUU107CisJdTggdnBkUGRnW0FSNTQxNl9OVU1fUERfR0FJTlNdW0FSOTI4N19QRF9HQUlOX0lDRVBUU107CiB9IF9fcGFja2VkOwogCiB1bmlvbiBjYWxfZGF0YV9wZXJfZnJlcV9hcjkyODdfdSB7CkBAIC02NzMsMTUgKzY0NywxMiBAQAogCWJvb2wgKCpmaWxsX2VlcHJvbSkoc3RydWN0IGF0aF9odyAqaHcpOwogCWludCAoKmdldF9lZXByb21fdmVyKShzdHJ1Y3QgYXRoX2h3ICpodyk7CiAJaW50ICgqZ2V0X2VlcHJvbV9yZXYpKHN0cnVjdCBhdGhfaHcgKmh3KTsKLQl1OCAoKmdldF9udW1fYW50X2NvbmZpZykoc3RydWN0IGF0aF9odyAqaHcsCi0JCQkJIGVudW0gYXRoOWtfaGFsX2ZyZXFfYmFuZCBiYW5kKTsKLQl1MzIgKCpnZXRfZWVwcm9tX2FudGVubmFfY2ZnKShzdHJ1Y3QgYXRoX2h3ICpodywKLQkJCQkgICAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbik7CiAJdm9pZCAoKnNldF9ib2FyZF92YWx1ZXMpKHN0cnVjdCBhdGhfaHcgKmh3LCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbik7CiAJdm9pZCAoKnNldF9hZGRhYykoc3RydWN0IGF0aF9odyAqaHcsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKTsKIAl2b2lkICgqc2V0X3R4cG93ZXIpKHN0cnVjdCBhdGhfaHcgKmh3LCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKIAkJCSAgIHUxNiBjZmdDdGwsIHU4IHR3aWNlQW50ZW5uYVJlZHVjdGlvbiwKLQkJCSAgIHU4IHR3aWNlTWF4UmVndWxhdG9yeVBvd2VyLCB1OCBwb3dlckxpbWl0KTsKKwkJCSAgIHU4IHR3aWNlTWF4UmVndWxhdG9yeVBvd2VyLCB1OCBwb3dlckxpbWl0LAorCQkJICAgYm9vbCB0ZXN0KTsKIAl1MTYgKCpnZXRfc3B1cl9jaGFubmVsKShzdHJ1Y3QgYXRoX2h3ICphaCwgdTE2IGksIGJvb2wgaXMyR0h6KTsKIH07CiAKQEAgLTcxNCw2ICs2ODUsMTQgQEAKIHZvaWQgYXRoOWtfaHdfdXBkYXRlX3JlZ3VsYXRvcnlfbWF4cG93ZXIoc3RydWN0IGF0aF9odyAqYWgpOwogaW50IGF0aDlrX2h3X2VlcHJvbV9pbml0KHN0cnVjdCBhdGhfaHcgKmFoKTsKIAordm9pZCBhdGg5a19od19nZXRfZ2Fpbl9ib3VuZGFyaWVzX3BkYWRjcyhzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKKwkJCQl2b2lkICpwUmF3RGF0YVNldCwKKwkJCQl1OCAqYkNoYW5zLCB1MTYgYXZhaWxQaWVycywKKwkJCQl1MTYgdFBkR2Fpbk92ZXJsYXAsCisJCQkJdTE2ICpwUGRHYWluQm91bmRhcmllcywgdTggKnBQREFEQ1ZhbHVlcywKKwkJCQl1MTYgbnVtWHBkR2FpbnMpOworCiAjZGVmaW5lIGFyNTQxNl9nZXRfbnR4Y2hhaW5zKF90eGNoYWlubWFzaykJCQlcCiAJKCgoX3R4Y2hhaW5tYXNrID4+IDIpICYgMSkgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAJICgoX3R4Y2hhaW5tYXNrID4+IDEpICYgMSkgKyAoX3R4Y2hhaW5tYXNrICYgMSkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZWVwcm9tXzRrLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZWVwcm9tXzRrLmMKaW5kZXggNGZhNGQ4ZS4uZmJkZmY3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2VlcHJvbV80ay5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9lZXByb21fNGsuYwpAQCAtMzcsMTQgKzM3LDE0IEBACiAJZWVwX3N0YXJ0X2xvYyA9IDY0OwogCiAJaWYgKCFhdGg5a19od191c2VfZmxhc2goYWgpKSB7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRUVQUk9NLAotCQkJICAiUmVhZGluZyBmcm9tIEVFUFJPTSwgbm90IGZsYXNoXG4iKTsKKwkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfRUVQUk9NLAorCQkJIlJlYWRpbmcgZnJvbSBFRVBST00sIG5vdCBmbGFzaFxuIik7CiAJfQogCiAJZm9yIChhZGRyID0gMDsgYWRkciA8IFNJWkVfRUVQUk9NXzRLOyBhZGRyKyspIHsKIAkJaWYgKCFhdGg5a19od19udnJhbV9yZWFkKGNvbW1vbiwgYWRkciArIGVlcF9zdGFydF9sb2MsIGVlcF9kYXRhKSkgewotCQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19FRVBST00sCi0JCQkJICAiVW5hYmxlIHRvIHJlYWQgZWVwcm9tIHJlZ2lvblxuIik7CisJCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19FRVBST00sCisJCQkJIlVuYWJsZSB0byByZWFkIGVlcHJvbSByZWdpb25cbiIpOwogCQkJcmV0dXJuIGZhbHNlOwogCQl9CiAJCWVlcF9kYXRhKys7CkBAIC02OSwxMyArNjksMTIgQEAKIAlpZiAoIWF0aDlrX2h3X3VzZV9mbGFzaChhaCkpIHsKIAkJaWYgKCFhdGg5a19od19udnJhbV9yZWFkKGNvbW1vbiwgQVI1NDE2X0VFUFJPTV9NQUdJQ19PRkZTRVQsCiAJCQkJCSAmbWFnaWMpKSB7Ci0JCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0ZBVEFMLAotCQkJCSAgIlJlYWRpbmcgTWFnaWMgIyBmYWlsZWRcbiIpOworCQkJYXRoX2Vycihjb21tb24sICJSZWFkaW5nIE1hZ2ljICMgZmFpbGVkXG4iKTsKIAkJCXJldHVybiBmYWxzZTsKIAkJfQogCi0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRUVQUk9NLAotCQkJICAiUmVhZCBNYWdpYyA9IDB4JTA0WFxuIiwgbWFnaWMpOworCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19FRVBST00sCisJCQkiUmVhZCBNYWdpYyA9IDB4JTA0WFxuIiwgbWFnaWMpOwogCiAJCWlmIChtYWdpYyAhPSBBUjU0MTZfRUVQUk9NX01BR0lDKSB7CiAJCQltYWdpYzIgPSBzd2FiMTYobWFnaWMpOwpAQCAtOTAsMTYgKzg5LDE1IEBACiAJCQkJCWVlcGRhdGErKzsKIAkJCQl9CiAJCQl9IGVsc2UgewotCQkJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRkFUQUwsCi0JCQkJCSAgIkludmFsaWQgRUVQUk9NIE1hZ2ljLiAiCi0JCQkJCSAgImVuZGlhbm5lc3MgbWlzbWF0Y2guXG4iKTsKKwkJCQlhdGhfZXJyKGNvbW1vbiwKKwkJCQkJIkludmFsaWQgRUVQUk9NIE1hZ2ljLiBFbmRpYW5uZXNzIG1pc21hdGNoLlxuIik7CiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9CiAJCX0KIAl9CiAKLQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0VFUFJPTSwgIm5lZWRfc3dhcCA9ICVzLlxuIiwKLQkJICBuZWVkX3N3YXAgPyAiVHJ1ZSIgOiAiRmFsc2UiKTsKKwlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19FRVBST00sICJuZWVkX3N3YXAgPSAlcy5cbiIsCisJCW5lZWRfc3dhcCA/ICJUcnVlIiA6ICJGYWxzZSIpOwogCiAJaWYgKG5lZWRfc3dhcCkKIAkJZWwgPSBzd2FiMTYoYWgtPmVlcHJvbS5tYXA0ay5iYXNlRWVwSGVhZGVyLmxlbmd0aCk7CkBAIC0xMjAsOCArMTE4LDggQEAKIAkJdTMyIGludGVnZXI7CiAJCXUxNiB3b3JkOwogCi0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRUVQUk9NLAotCQkJICAiRUVQUk9NIEVuZGlhbm5lc3MgaXMgbm90IG5hdGl2ZS4uIENoYW5naW5nXG4iKTsKKwkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfRUVQUk9NLAorCQkJIkVFUFJPTSBFbmRpYW5uZXNzIGlzIG5vdCBuYXRpdmUuLiBDaGFuZ2luZ1xuIik7CiAKIAkJd29yZCA9IHN3YWIxNihlZXAtPmJhc2VFZXBIZWFkZXIubGVuZ3RoKTsKIAkJZWVwLT5iYXNlRWVwSGVhZGVyLmxlbmd0aCA9IHdvcmQ7CkBAIC0xNTUsNyArMTUzLDcgQEAKIAkJCWVlcC0+bW9kYWxIZWFkZXIuYW50Q3RybENoYWluW2ldID0gaW50ZWdlcjsKIAkJfQogCi0JCWZvciAoaSA9IDA7IGkgPCBBUjU0MTZfRUVQUk9NX01PREFMX1NQVVJTOyBpKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IEFSX0VFUFJPTV9NT0RBTF9TUFVSUzsgaSsrKSB7CiAJCQl3b3JkID0gc3dhYjE2KGVlcC0+bW9kYWxIZWFkZXIuc3B1ckNoYW5zW2ldLnNwdXJDaGFuKTsKIAkJCWVlcC0+bW9kYWxIZWFkZXIuc3B1ckNoYW5zW2ldLnNwdXJDaGFuID0gd29yZDsKIAkJfQpAQCAtMTYzLDkgKzE2MSw4IEBACiAKIAlpZiAoc3VtICE9IDB4ZmZmZiB8fCBhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbV92ZXIoYWgpICE9IEFSNTQxNl9FRVBfVkVSIHx8CiAJICAgIGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tX3JldihhaCkgPCBBUjU0MTZfRUVQX05PX0JBQ0tfVkVSKSB7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRkFUQUwsCi0JCQkgICJCYWQgRUVQUk9NIGNoZWNrc3VtIDB4JXggb3IgcmV2aXNpb24gMHglMDR4XG4iLAotCQkJICBzdW0sIGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tX3ZlcihhaCkpOworCQlhdGhfZXJyKGNvbW1vbiwgIkJhZCBFRVBST00gY2hlY2tzdW0gMHgleCBvciByZXZpc2lvbiAweCUwNHhcbiIsCisJCQlzdW0sIGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tX3ZlcihhaCkpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTIzMCwxNzMgKzIyNyw2IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19od19nZXRfNGtfZ2Fpbl9ib3VuZGFyaWVzX3BkYWRjcyhzdHJ1Y3QgYXRoX2h3ICphaCwKLQkJCQlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKLQkJCQlzdHJ1Y3QgY2FsX2RhdGFfcGVyX2ZyZXFfNGsgKnBSYXdEYXRhU2V0LAotCQkJCXU4ICpiQ2hhbnMsIHUxNiBhdmFpbFBpZXJzLAotCQkJCXUxNiB0UGRHYWluT3ZlcmxhcCwKLQkJCQl1MTYgKnBQZEdhaW5Cb3VuZGFyaWVzLCB1OCAqcFBEQURDVmFsdWVzLAotCQkJCXUxNiBudW1YcGRHYWlucykKLXsKLSNkZWZpbmUgVE1QX1ZBTF9WUERfVEFCTEUgXAotCSgodnBkVGFibGVJW2ldW3NpemVDdXJyVnBkVGFibGUgLSAxXSArIChzcyAtIG1heEluZGV4ICsgMSkgKiB2cGRTdGVwKSk7Ci0JaW50IGksIGosIGs7Ci0JaW50MTZfdCBzczsKLQl1MTYgaWR4TCA9IDAsIGlkeFIgPSAwLCBudW1QaWVyczsKLQlzdGF0aWMgdTggdnBkVGFibGVMW0FSNTQxNl9FRVA0S19OVU1fUERfR0FJTlNdCi0JCVtBUjU0MTZfTUFYX1BXUl9SQU5HRV9JTl9IQUxGX0RCXTsKLQlzdGF0aWMgdTggdnBkVGFibGVSW0FSNTQxNl9FRVA0S19OVU1fUERfR0FJTlNdCi0JCVtBUjU0MTZfTUFYX1BXUl9SQU5HRV9JTl9IQUxGX0RCXTsKLQlzdGF0aWMgdTggdnBkVGFibGVJW0FSNTQxNl9FRVA0S19OVU1fUERfR0FJTlNdCi0JCVtBUjU0MTZfTUFYX1BXUl9SQU5HRV9JTl9IQUxGX0RCXTsKLQotCXU4ICpwVnBkTCwgKnBWcGRSLCAqcFB3ckwsICpwUHdyUjsKLQl1OCBtaW5Qd3JUNFtBUjU0MTZfRUVQNEtfTlVNX1BEX0dBSU5TXTsKLQl1OCBtYXhQd3JUNFtBUjU0MTZfRUVQNEtfTlVNX1BEX0dBSU5TXTsKLQlpbnQxNl90IHZwZFN0ZXA7Ci0JaW50MTZfdCB0bXBWYWw7Ci0JdTE2IHNpemVDdXJyVnBkVGFibGUsIG1heEluZGV4LCB0Z3RJbmRleDsKLQlib29sIG1hdGNoOwotCWludDE2X3QgbWluRGVsdGEgPSAwOwotCXN0cnVjdCBjaGFuX2NlbnRlcnMgY2VudGVyczsKLSNkZWZpbmUgUERfR0FJTl9CT1VOREFSWV9ERUZBVUxUIDU4OwotCi0JbWVtc2V0KCZtaW5Qd3JUNCwgMCwgQVI5Mjg3X05VTV9QRF9HQUlOUyk7Ci0JYXRoOWtfaHdfZ2V0X2NoYW5uZWxfY2VudGVycyhhaCwgY2hhbiwgJmNlbnRlcnMpOwotCi0JZm9yIChudW1QaWVycyA9IDA7IG51bVBpZXJzIDwgYXZhaWxQaWVyczsgbnVtUGllcnMrKykgewotCQlpZiAoYkNoYW5zW251bVBpZXJzXSA9PSBBUjU0MTZfQkNIQU5fVU5VU0VEKQotCQkJYnJlYWs7Ci0JfQotCi0JbWF0Y2ggPSBhdGg5a19od19nZXRfbG93ZXJfdXBwZXJfaW5kZXgoCi0JCQkJCSh1OClGUkVRMkZCSU4oY2VudGVycy5zeW50aF9jZW50ZXIsCi0JCQkJCUlTX0NIQU5fMkdIWihjaGFuKSksIGJDaGFucywgbnVtUGllcnMsCi0JCQkJCSZpZHhMLCAmaWR4Uik7Ci0KLQlpZiAobWF0Y2gpIHsKLQkJZm9yIChpID0gMDsgaSA8IG51bVhwZEdhaW5zOyBpKyspIHsKLQkJCW1pblB3clQ0W2ldID0gcFJhd0RhdGFTZXRbaWR4TF0ucHdyUGRnW2ldWzBdOwotCQkJbWF4UHdyVDRbaV0gPSBwUmF3RGF0YVNldFtpZHhMXS5wd3JQZGdbaV1bNF07Ci0JCQlhdGg5a19od19maWxsX3ZwZF90YWJsZShtaW5Qd3JUNFtpXSwgbWF4UHdyVDRbaV0sCi0JCQkJCXBSYXdEYXRhU2V0W2lkeExdLnB3clBkZ1tpXSwKLQkJCQkJcFJhd0RhdGFTZXRbaWR4TF0udnBkUGRnW2ldLAotCQkJCQlBUjU0MTZfRUVQNEtfUERfR0FJTl9JQ0VQVFMsCi0JCQkJCXZwZFRhYmxlSVtpXSk7Ci0JCX0KLQl9IGVsc2UgewotCQlmb3IgKGkgPSAwOyBpIDwgbnVtWHBkR2FpbnM7IGkrKykgewotCQkJcFZwZEwgPSBwUmF3RGF0YVNldFtpZHhMXS52cGRQZGdbaV07Ci0JCQlwUHdyTCA9IHBSYXdEYXRhU2V0W2lkeExdLnB3clBkZ1tpXTsKLQkJCXBWcGRSID0gcFJhd0RhdGFTZXRbaWR4Ul0udnBkUGRnW2ldOwotCQkJcFB3clIgPSBwUmF3RGF0YVNldFtpZHhSXS5wd3JQZGdbaV07Ci0KLQkJCW1pblB3clQ0W2ldID0gbWF4KHBQd3JMWzBdLCBwUHdyUlswXSk7Ci0KLQkJCW1heFB3clQ0W2ldID0KLQkJCQltaW4ocFB3ckxbQVI1NDE2X0VFUDRLX1BEX0dBSU5fSUNFUFRTIC0gMV0sCi0JCQkJICAgIHBQd3JSW0FSNTQxNl9FRVA0S19QRF9HQUlOX0lDRVBUUyAtIDFdKTsKLQotCi0JCQlhdGg5a19od19maWxsX3ZwZF90YWJsZShtaW5Qd3JUNFtpXSwgbWF4UHdyVDRbaV0sCi0JCQkJCQlwUHdyTCwgcFZwZEwsCi0JCQkJCQlBUjU0MTZfRUVQNEtfUERfR0FJTl9JQ0VQVFMsCi0JCQkJCQl2cGRUYWJsZUxbaV0pOwotCQkJYXRoOWtfaHdfZmlsbF92cGRfdGFibGUobWluUHdyVDRbaV0sIG1heFB3clQ0W2ldLAotCQkJCQkJcFB3clIsIHBWcGRSLAotCQkJCQkJQVI1NDE2X0VFUDRLX1BEX0dBSU5fSUNFUFRTLAotCQkJCQkJdnBkVGFibGVSW2ldKTsKLQotCQkJZm9yIChqID0gMDsgaiA8PSAobWF4UHdyVDRbaV0gLSBtaW5Qd3JUNFtpXSkgLyAyOyBqKyspIHsKLQkJCQl2cGRUYWJsZUlbaV1bal0gPQotCQkJCQkodTgpKGF0aDlrX2h3X2ludGVycG9sYXRlKCh1MTYpCi0JCQkJCSAgICAgRlJFUTJGQklOKGNlbnRlcnMuCi0JCQkJCQkgICAgICAgc3ludGhfY2VudGVyLAotCQkJCQkJICAgICAgIElTX0NIQU5fMkdIWgotCQkJCQkJICAgICAgIChjaGFuKSksCi0JCQkJCSAgICAgYkNoYW5zW2lkeExdLCBiQ2hhbnNbaWR4Ul0sCi0JCQkJCSAgICAgdnBkVGFibGVMW2ldW2pdLCB2cGRUYWJsZVJbaV1bal0pKTsKLQkJCX0KLQkJfQotCX0KLQotCWsgPSAwOwotCi0JZm9yIChpID0gMDsgaSA8IG51bVhwZEdhaW5zOyBpKyspIHsKLQkJaWYgKGkgPT0gKG51bVhwZEdhaW5zIC0gMSkpCi0JCQlwUGRHYWluQm91bmRhcmllc1tpXSA9Ci0JCQkJKHUxNikobWF4UHdyVDRbaV0gLyAyKTsKLQkJZWxzZQotCQkJcFBkR2FpbkJvdW5kYXJpZXNbaV0gPQotCQkJCSh1MTYpKChtYXhQd3JUNFtpXSArIG1pblB3clQ0W2kgKyAxXSkgLyA0KTsKLQotCQlwUGRHYWluQm91bmRhcmllc1tpXSA9Ci0JCQltaW4oKHUxNilBUjU0MTZfTUFYX1JBVEVfUE9XRVIsIHBQZEdhaW5Cb3VuZGFyaWVzW2ldKTsKLQotCQlpZiAoKGkgPT0gMCkgJiYgIUFSX1NSRVZfNTQxNl8yMF9PUl9MQVRFUihhaCkpIHsKLQkJCW1pbkRlbHRhID0gcFBkR2FpbkJvdW5kYXJpZXNbMF0gLSAyMzsKLQkJCXBQZEdhaW5Cb3VuZGFyaWVzWzBdID0gMjM7Ci0JCX0gZWxzZSB7Ci0JCQltaW5EZWx0YSA9IDA7Ci0JCX0KLQotCQlpZiAoaSA9PSAwKSB7Ci0JCQlpZiAoQVJfU1JFVl85MjgwXzIwX09SX0xBVEVSKGFoKSkKLQkJCQlzcyA9IChpbnQxNl90KSgwIC0gKG1pblB3clQ0W2ldIC8gMikpOwotCQkJZWxzZQotCQkJCXNzID0gMDsKLQkJfSBlbHNlIHsKLQkJCXNzID0gKGludDE2X3QpKChwUGRHYWluQm91bmRhcmllc1tpIC0gMV0gLQotCQkJCQkobWluUHdyVDRbaV0gLyAyKSkgLQotCQkJCSAgICAgICB0UGRHYWluT3ZlcmxhcCArIDEgKyBtaW5EZWx0YSk7Ci0JCX0KLQkJdnBkU3RlcCA9IChpbnQxNl90KSh2cGRUYWJsZUlbaV1bMV0gLSB2cGRUYWJsZUlbaV1bMF0pOwotCQl2cGRTdGVwID0gKGludDE2X3QpKCh2cGRTdGVwIDwgMSkgPyAxIDogdnBkU3RlcCk7Ci0KLQkJd2hpbGUgKChzcyA8IDApICYmIChrIDwgKEFSNTQxNl9OVU1fUERBRENfVkFMVUVTIC0gMSkpKSB7Ci0JCQl0bXBWYWwgPSAoaW50MTZfdCkodnBkVGFibGVJW2ldWzBdICsgc3MgKiB2cGRTdGVwKTsKLQkJCXBQREFEQ1ZhbHVlc1trKytdID0gKHU4KSgodG1wVmFsIDwgMCkgPyAwIDogdG1wVmFsKTsKLQkJCXNzKys7Ci0JCX0KLQotCQlzaXplQ3VyclZwZFRhYmxlID0gKHU4KSAoKG1heFB3clQ0W2ldIC0gbWluUHdyVDRbaV0pIC8gMiArIDEpOwotCQl0Z3RJbmRleCA9ICh1OCkocFBkR2FpbkJvdW5kYXJpZXNbaV0gKyB0UGRHYWluT3ZlcmxhcCAtCi0JCQkJKG1pblB3clQ0W2ldIC8gMikpOwotCQltYXhJbmRleCA9ICh0Z3RJbmRleCA8IHNpemVDdXJyVnBkVGFibGUpID8KLQkJCXRndEluZGV4IDogc2l6ZUN1cnJWcGRUYWJsZTsKLQotCQl3aGlsZSAoKHNzIDwgbWF4SW5kZXgpICYmIChrIDwgKEFSNTQxNl9OVU1fUERBRENfVkFMVUVTIC0gMSkpKQotCQkJcFBEQURDVmFsdWVzW2srK10gPSB2cGRUYWJsZUlbaV1bc3MrK107Ci0KLQkJdnBkU3RlcCA9IChpbnQxNl90KSh2cGRUYWJsZUlbaV1bc2l6ZUN1cnJWcGRUYWJsZSAtIDFdIC0KLQkJCQkgICAgdnBkVGFibGVJW2ldW3NpemVDdXJyVnBkVGFibGUgLSAyXSk7Ci0JCXZwZFN0ZXAgPSAoaW50MTZfdCkoKHZwZFN0ZXAgPCAxKSA/IDEgOiB2cGRTdGVwKTsKLQotCQlpZiAodGd0SW5kZXggPj0gbWF4SW5kZXgpIHsKLQkJCXdoaWxlICgoc3MgPD0gdGd0SW5kZXgpICYmCi0JCQkgICAgICAgKGsgPCAoQVI1NDE2X05VTV9QREFEQ19WQUxVRVMgLSAxKSkpIHsKLQkJCQl0bXBWYWwgPSAoaW50MTZfdCkgVE1QX1ZBTF9WUERfVEFCTEU7Ci0JCQkJcFBEQURDVmFsdWVzW2srK10gPSAodTgpKCh0bXBWYWwgPiAyNTUpID8KLQkJCQkJCQkgMjU1IDogdG1wVmFsKTsKLQkJCQlzcysrOwotCQkJfQotCQl9Ci0JfQotCi0Jd2hpbGUgKGkgPCBBUjU0MTZfRUVQNEtfUERfR0FJTlNfSU5fTUFTSykgewotCQlwUGRHYWluQm91bmRhcmllc1tpXSA9IFBEX0dBSU5fQk9VTkRBUllfREVGQVVMVDsKLQkJaSsrOwotCX0KLQotCXdoaWxlIChrIDwgQVI1NDE2X05VTV9QREFEQ19WQUxVRVMpIHsKLQkJcFBEQURDVmFsdWVzW2tdID0gcFBEQURDVmFsdWVzW2sgLSAxXTsKLQkJaysrOwotCX0KLQotCXJldHVybjsKLSN1bmRlZiBUTVBfVkFMX1ZQRF9UQUJMRQotfQotCiBzdGF0aWMgdm9pZCBhdGg5a19od19zZXRfNGtfcG93ZXJfY2FsX3RhYmxlKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJCSAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCiAJCQkJICBpbnQxNl90ICpwVHhQb3dlckluZGV4T2Zmc2V0KQpAQCAtNDA3LDcgKzIzNyw3IEBACiAJdTggKnBDYWxCQ2hhbnMgPSBOVUxMOwogCXUxNiBwZEdhaW5PdmVybGFwX3QyOwogCXN0YXRpYyB1OCBwZGFkY1ZhbHVlc1tBUjU0MTZfTlVNX1BEQURDX1ZBTFVFU107Ci0JdTE2IGdhaW5Cb3VuZGFyaWVzW0FSNTQxNl9FRVA0S19QRF9HQUlOU19JTl9NQVNLXTsKKwl1MTYgZ2FpbkJvdW5kYXJpZXNbQVI1NDE2X1BEX0dBSU5TX0lOX01BU0tdOwogCXUxNiBudW1QaWVycywgaSwgajsKIAl1MTYgbnVtWHBkR2FpbiwgeHBkTWFzazsKIAl1MTYgeHBkR2FpblZhbHVlc1tBUjU0MTZfRUVQNEtfTlVNX1BEX0dBSU5TXSA9IHsgMCwgMCB9OwpAQCAtNDI5LDEyICsyNTksMTIgQEAKIAogCW51bVhwZEdhaW4gPSAwOwogCi0JZm9yIChpID0gMTsgaSA8PSBBUjU0MTZfRUVQNEtfUERfR0FJTlNfSU5fTUFTSzsgaSsrKSB7Ci0JCWlmICgoeHBkTWFzayA+PiAoQVI1NDE2X0VFUDRLX1BEX0dBSU5TX0lOX01BU0sgLSBpKSkgJiAxKSB7CisJZm9yIChpID0gMTsgaSA8PSBBUjU0MTZfUERfR0FJTlNfSU5fTUFTSzsgaSsrKSB7CisJCWlmICgoeHBkTWFzayA+PiAoQVI1NDE2X1BEX0dBSU5TX0lOX01BU0sgLSBpKSkgJiAxKSB7CiAJCQlpZiAobnVtWHBkR2FpbiA+PSBBUjU0MTZfRUVQNEtfTlVNX1BEX0dBSU5TKQogCQkJCWJyZWFrOwogCQkJeHBkR2FpblZhbHVlc1tudW1YcGRHYWluXSA9Ci0JCQkJKHUxNikoQVI1NDE2X0VFUDRLX1BEX0dBSU5TX0lOX01BU0sgLSBpKTsKKwkJCQkodTE2KShBUjU0MTZfUERfR0FJTlNfSU5fTUFTSyAtIGkpOwogCQkJbnVtWHBkR2FpbisrOwogCQl9CiAJfQpAQCAtNDU4LDcgKzI4OCw3IEBACiAJCWlmIChwRWVwRGF0YS0+YmFzZUVlcEhlYWRlci50eE1hc2sgJiAoMSA8PCBpKSkgewogCQkJcFJhd0RhdGFzZXQgPSBwRWVwRGF0YS0+Y2FsUGllckRhdGEyR1tpXTsKIAotCQkJYXRoOWtfaHdfZ2V0XzRrX2dhaW5fYm91bmRhcmllc19wZGFkY3MoYWgsIGNoYW4sCisJCQlhdGg5a19od19nZXRfZ2Fpbl9ib3VuZGFyaWVzX3BkYWRjcyhhaCwgY2hhbiwKIAkJCQkJICAgIHBSYXdEYXRhc2V0LCBwQ2FsQkNoYW5zLAogCQkJCQkgICAgbnVtUGllcnMsIHBkR2Fpbk92ZXJsYXBfdDIsCiAJCQkJCSAgICBnYWluQm91bmRhcmllcywKQEAgLTQ4OCwyMSArMzE4LDIwIEBACiAJCQkJCSgocGRhZGNWYWx1ZXNbNCAqIGogKyAzXSAmIDB4RkYpIDw8IDI0KTsKIAkJCQlSRUdfV1JJVEUoYWgsIHJlZ09mZnNldCwgcmVnMzIpOwogCi0JCQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19FRVBST00sCi0JCQkJCSAgIlBEQURDICglZCwlNHgpOiAlNC40eCAlOC44eFxuIiwKLQkJCQkJICBpLCByZWdDaGFpbk9mZnNldCwgcmVnT2Zmc2V0LAotCQkJCQkgIHJlZzMyKTsKLQkJCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0VFUFJPTSwKLQkJCQkJICAiUERBREM6IENoYWluICVkIHwgIgotCQkJCQkgICJQREFEQyAlM2QgVmFsdWUgJTNkIHwgIgotCQkJCQkgICJQREFEQyAlM2QgVmFsdWUgJTNkIHwgIgotCQkJCQkgICJQREFEQyAlM2QgVmFsdWUgJTNkIHwgIgotCQkJCQkgICJQREFEQyAlM2QgVmFsdWUgJTNkIHxcbiIsCi0JCQkJCSAgaSwgNCAqIGosIHBkYWRjVmFsdWVzWzQgKiBqXSwKLQkJCQkJICA0ICogaiArIDEsIHBkYWRjVmFsdWVzWzQgKiBqICsgMV0sCi0JCQkJCSAgNCAqIGogKyAyLCBwZGFkY1ZhbHVlc1s0ICogaiArIDJdLAotCQkJCQkgIDQgKiBqICsgMywKLQkJCQkJICBwZGFkY1ZhbHVlc1s0ICogaiArIDNdKTsKKwkJCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19FRVBST00sCisJCQkJCSJQREFEQyAoJWQsJTR4KTogJTQuNHggJTguOHhcbiIsCisJCQkJCWksIHJlZ0NoYWluT2Zmc2V0LCByZWdPZmZzZXQsCisJCQkJCXJlZzMyKTsKKwkJCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19FRVBST00sCisJCQkJCSJQREFEQzogQ2hhaW4gJWQgfCAiCisJCQkJCSJQREFEQyAlM2QgVmFsdWUgJTNkIHwgIgorCQkJCQkiUERBREMgJTNkIFZhbHVlICUzZCB8ICIKKwkJCQkJIlBEQURDICUzZCBWYWx1ZSAlM2QgfCAiCisJCQkJCSJQREFEQyAlM2QgVmFsdWUgJTNkIHxcbiIsCisJCQkJCWksIDQgKiBqLCBwZGFkY1ZhbHVlc1s0ICogal0sCisJCQkJCTQgKiBqICsgMSwgcGRhZGNWYWx1ZXNbNCAqIGogKyAxXSwKKwkJCQkJNCAqIGogKyAyLCBwZGFkY1ZhbHVlc1s0ICogaiArIDJdLAorCQkJCQk0ICogaiArIDMsIHBkYWRjVmFsdWVzWzQgKiBqICsgM10pOwogCiAJCQkJcmVnT2Zmc2V0ICs9IDQ7CiAJCQl9CkBAIC01MzIsMTQgKzM2MSwxNiBAQAogCWludCBpOwogCWludDE2X3QgdHdpY2VMYXJnZXN0QW50ZW5uYTsKIAl1MTYgdHdpY2VNaW5FZGdlUG93ZXI7Ci0JdTE2IHR3aWNlTWF4RWRnZVBvd2VyID0gQVI1NDE2X01BWF9SQVRFX1BPV0VSOworCXUxNiB0d2ljZU1heEVkZ2VQb3dlciA9IE1BWF9SQVRFX1BPV0VSOwogCXUxNiBzY2FsZWRQb3dlciA9IDAsIG1pbkN0bFBvd2VyLCBtYXhSZWdBbGxvd2VkUG93ZXI7Ci0JdTE2IG51bUN0bE1vZGVzLCAqcEN0bE1vZGUsIGN0bE1vZGUsIGZyZXE7CisJdTE2IG51bUN0bE1vZGVzOworCWNvbnN0IHUxNiAqcEN0bE1vZGU7CisJdTE2IGN0bE1vZGUsIGZyZXE7CiAJc3RydWN0IGNoYW5fY2VudGVycyBjZW50ZXJzOwogCXN0cnVjdCBjYWxfY3RsX2RhdGFfNGsgKnJlcDsKIAlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80ayAqcEVlcERhdGEgPSAmYWgtPmVlcHJvbS5tYXA0azsKIAlzdGF0aWMgY29uc3QgdTE2IHRwU2NhbGVSZWR1Y3Rpb25UYWJsZVs1XSA9Ci0JCXsgMCwgMywgNiwgOSwgQVI1NDE2X01BWF9SQVRFX1BPV0VSIH07CisJCXsgMCwgMywgNiwgOSwgTUFYX1JBVEVfUE9XRVIgfTsKIAlzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9sZWcgdGFyZ2V0UG93ZXJPZmRtLCB0YXJnZXRQb3dlckNjayA9IHsKIAkJMCwgeyAwLCAwLCAwLCAwfQogCX07CkBAIC01NTAsMTAgKzM4MSwxMCBAQAogCXN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2h0IHRhcmdldFBvd2VySHQyMCwgdGFyZ2V0UG93ZXJIdDQwID0gewogCQkwLCB7MCwgMCwgMCwgMH0KIAl9OwotCXUxNiBjdGxNb2Rlc0ZvcjExZ1tdID0KLQkJeyBDVExfMTFCLCBDVExfMTFHLCBDVExfMkdIVDIwLCBDVExfMTFCX0VYVCwgQ1RMXzExR19FWFQsCi0JCSAgQ1RMXzJHSFQ0MAotCQl9OworCXN0YXRpYyBjb25zdCB1MTYgY3RsTW9kZXNGb3IxMWdbXSA9IHsKKwkJQ1RMXzExQiwgQ1RMXzExRywgQ1RMXzJHSFQyMCwKKwkJQ1RMXzExQl9FWFQsIENUTF8xMUdfRVhULCBDVExfMkdIVDQwCisJfTsKIAogCWF0aDlrX2h3X2dldF9jaGFubmVsX2NlbnRlcnMoYWgsIGNoYW4sICZjZW50ZXJzKTsKIApAQCAtNjE1LDcgKzQ0Niw3IEBACiAKIAkJaWYgKGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tX3ZlcihhaCkgPT0gMTQgJiYKIAkJICAgIGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tX3JldihhaCkgPD0gMikKLQkJCXR3aWNlTWF4RWRnZVBvd2VyID0gQVI1NDE2X01BWF9SQVRFX1BPV0VSOworCQkJdHdpY2VNYXhFZGdlUG93ZXIgPSBNQVhfUkFURV9QT1dFUjsKIAogCQlmb3IgKGkgPSAwOyAoaSA8IEFSNTQxNl9FRVA0S19OVU1fQ1RMUykgJiYKIAkJCSAgICAgcEVlcERhdGEtPmN0bEluZGV4W2ldOyBpKyspIHsKQEAgLTcyNiw3ICs1NTcsNyBAQAogCQkJCSAgICB1MTYgY2ZnQ3RsLAogCQkJCSAgICB1OCB0d2ljZUFudGVubmFSZWR1Y3Rpb24sCiAJCQkJICAgIHU4IHR3aWNlTWF4UmVndWxhdG9yeVBvd2VyLAotCQkJCSAgICB1OCBwb3dlckxpbWl0KQorCQkJCSAgICB1OCBwb3dlckxpbWl0LCBib29sIHRlc3QpCiB7CiAJc3RydWN0IGF0aF9yZWd1bGF0b3J5ICpyZWd1bGF0b3J5ID0gYXRoOWtfaHdfcmVndWxhdG9yeShhaCk7CiAJc3RydWN0IGFyNTQxNl9lZXByb21fNGsgKnBFZXBEYXRhID0gJmFoLT5lZXByb20ubWFwNGs7CkBAIC03NTEsMTUgKzU4MiwyMCBAQAogCiAJYXRoOWtfaHdfc2V0XzRrX3Bvd2VyX2NhbF90YWJsZShhaCwgY2hhbiwgJnR4UG93ZXJJbmRleE9mZnNldCk7CiAKKwlyZWd1bGF0b3J5LT5tYXhfcG93ZXJfbGV2ZWwgPSAwOwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJhdGVzQXJyYXkpOyBpKyspIHsKIAkJcmF0ZXNBcnJheVtpXSA9CShpbnQxNl90KSh0eFBvd2VySW5kZXhPZmZzZXQgKyByYXRlc0FycmF5W2ldKTsKLQkJaWYgKHJhdGVzQXJyYXlbaV0gPiBBUjU0MTZfTUFYX1JBVEVfUE9XRVIpCi0JCQlyYXRlc0FycmF5W2ldID0gQVI1NDE2X01BWF9SQVRFX1BPV0VSOworCQlpZiAocmF0ZXNBcnJheVtpXSA+IE1BWF9SQVRFX1BPV0VSKQorCQkJcmF0ZXNBcnJheVtpXSA9IE1BWF9SQVRFX1BPV0VSOworCisJCWlmIChyYXRlc0FycmF5W2ldID4gcmVndWxhdG9yeS0+bWF4X3Bvd2VyX2xldmVsKQorCQkJcmVndWxhdG9yeS0+bWF4X3Bvd2VyX2xldmVsID0gcmF0ZXNBcnJheVtpXTsKIAl9CiAKKwlpZiAodGVzdCkKKwkgICAgcmV0dXJuOwogCiAJLyogVXBkYXRlIHJlZ3VsYXRvcnkgKi8KLQogCWkgPSByYXRlNm1iOwogCWlmIChJU19DSEFOX0hUNDAoY2hhbikpCiAJCWkgPSByYXRlSHQ0MF8wOwpAQCAtOTM0LDggKzc3MCw3IEBACiAJcE1vZGFsID0gJmVlcC0+bW9kYWxIZWFkZXI7CiAJdHhSeEF0dGVuTG9jYWwgPSAyMzsKIAotCVJFR19XUklURShhaCwgQVJfUEhZX1NXSVRDSF9DT00sCi0JCSAgYWgtPmVlcF9vcHMtPmdldF9lZXByb21fYW50ZW5uYV9jZmcoYWgsIGNoYW4pKTsKKwlSRUdfV1JJVEUoYWgsIEFSX1BIWV9TV0lUQ0hfQ09NLCBwTW9kYWwtPmFudEN0cmxDb21tb24pOwogCiAJLyogU2luZ2xlIGNoYWluIGZvciA0SyBFRVBST00qLwogCWF0aDlrX2h3XzRrX3NldF9nYWluKGFoLCBwTW9kYWwsIGVlcCwgdHhSeEF0dGVuTG9jYWwpOwpAQCAtMTE1MSwyMSArOTg2LDYgQEAKIAl9CiB9CiAKLXN0YXRpYyB1MzIgYXRoOWtfaHdfNGtfZ2V0X2VlcHJvbV9hbnRlbm5hX2NmZyhzdHJ1Y3QgYXRoX2h3ICphaCwKLQkJCQkJICAgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCi17Ci0Jc3RydWN0IGFyNTQxNl9lZXByb21fNGsgKmVlcCA9ICZhaC0+ZWVwcm9tLm1hcDRrOwotCXN0cnVjdCBtb2RhbF9lZXBfNGtfaGVhZGVyICpwTW9kYWwgPSAmZWVwLT5tb2RhbEhlYWRlcjsKLQotCXJldHVybiBwTW9kYWwtPmFudEN0cmxDb21tb247Ci19Ci0KLXN0YXRpYyB1OCBhdGg5a19od180a19nZXRfbnVtX2FudF9jb25maWcoc3RydWN0IGF0aF9odyAqYWgsCi0JCQkJCSBlbnVtIGF0aDlrX2hhbF9mcmVxX2JhbmQgZnJlcV9iYW5kKQotewotCXJldHVybiAxOwotfQotCiBzdGF0aWMgdTE2IGF0aDlrX2h3XzRrX2dldF9zcHVyX2NoYW5uZWwoc3RydWN0IGF0aF9odyAqYWgsIHUxNiBpLCBib29sIGlzMkdIeikKIHsKICNkZWZpbmUgRUVQX01BUDRLX1NQVVJDSEFOIFwKQEAgLTExNzQsMTcgKzk5NCwxNyBAQAogCiAJdTE2IHNwdXJfdmFsID0gQVJfTk9fU1BVUjsKIAotCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQU5JLAotCQkgICJHZXR0aW5nIHNwdXIgaWR4ICVkIGlzMkdoei4gJWQgdmFsICV4XG4iLAotCQkgIGksIGlzMkdIeiwgYWgtPmNvbmZpZy5zcHVyY2hhbnNbaV1baXMyR0h6XSk7CisJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQU5JLAorCQkiR2V0dGluZyBzcHVyIGlkeDolZCBpczJHaHo6JWQgdmFsOiV4XG4iLAorCQlpLCBpczJHSHosIGFoLT5jb25maWcuc3B1cmNoYW5zW2ldW2lzMkdIel0pOwogCiAJc3dpdGNoIChhaC0+Y29uZmlnLnNwdXJtb2RlKSB7CiAJY2FzZSBTUFVSX0RJU0FCTEU6CiAJCWJyZWFrOwogCWNhc2UgU1BVUl9FTkFCTEVfSU9DVEw6CiAJCXNwdXJfdmFsID0gYWgtPmNvbmZpZy5zcHVyY2hhbnNbaV1baXMyR0h6XTsKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19BTkksCi0JCQkgICJHZXR0aW5nIHNwdXIgdmFsIGZyb20gbmV3IGxvYy4gJWRcbiIsIHNwdXJfdmFsKTsKKwkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQU5JLAorCQkJIkdldHRpbmcgc3B1ciB2YWwgZnJvbSBuZXcgbG9jLiAlZFxuIiwgc3B1cl92YWwpOwogCQlicmVhazsKIAljYXNlIFNQVVJfRU5BQkxFX0VFUFJPTToKIAkJc3B1cl92YWwgPSBFRVBfTUFQNEtfU1BVUkNIQU47CkBAIC0xMjAyLDggKzEwMjIsNiBAQAogCS5maWxsX2VlcHJvbQkJPSBhdGg5a19od180a19maWxsX2VlcHJvbSwKIAkuZ2V0X2VlcHJvbV92ZXIJCT0gYXRoOWtfaHdfNGtfZ2V0X2VlcHJvbV92ZXIsCiAJLmdldF9lZXByb21fcmV2CQk9IGF0aDlrX2h3XzRrX2dldF9lZXByb21fcmV2LAotCS5nZXRfbnVtX2FudF9jb25maWcJPSBhdGg5a19od180a19nZXRfbnVtX2FudF9jb25maWcsCi0JLmdldF9lZXByb21fYW50ZW5uYV9jZmcJPSBhdGg5a19od180a19nZXRfZWVwcm9tX2FudGVubmFfY2ZnLAogCS5zZXRfYm9hcmRfdmFsdWVzCT0gYXRoOWtfaHdfNGtfc2V0X2JvYXJkX3ZhbHVlcywKIAkuc2V0X2FkZGFjCQk9IGF0aDlrX2h3XzRrX3NldF9hZGRhYywKIAkuc2V0X3R4cG93ZXIJCT0gYXRoOWtfaHdfNGtfc2V0X3R4cG93ZXIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZWVwcm9tXzkyODcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9lZXByb21fOTI4Ny5jCmluZGV4IDE5NTQwNmQuLjliNmJjOGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9lZXByb21fOTI4Ny5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9lZXByb21fOTI4Ny5jCkBAIC0zNywyMSArMzcsMjEgQEAKIAlpbnQgYWRkciwgZWVwX3N0YXJ0X2xvYzsKIAllZXBfZGF0YSA9ICh1MTYgKillZXA7CiAKLQlpZiAoQVI5Mjg3X0hUQ19ERVZJRChhaCkpCisJaWYgKGNvbW1vbi0+YnVzX29wcy0+YXRoX2J1c190eXBlID09IEFUSF9VU0IpCiAJCWVlcF9zdGFydF9sb2MgPSBBUjkyODdfSFRDX0VFUF9TVEFSVF9MT0M7CiAJZWxzZQogCQllZXBfc3RhcnRfbG9jID0gQVI5Mjg3X0VFUF9TVEFSVF9MT0M7CiAKIAlpZiAoIWF0aDlrX2h3X3VzZV9mbGFzaChhaCkpIHsKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19FRVBST00sCi0JCQkgICJSZWFkaW5nIGZyb20gRUVQUk9NLCBub3QgZmxhc2hcbiIpOworCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19FRVBST00sCisJCQkiUmVhZGluZyBmcm9tIEVFUFJPTSwgbm90IGZsYXNoXG4iKTsKIAl9CiAKIAlmb3IgKGFkZHIgPSAwOyBhZGRyIDwgTlVNX0VFUF9XT1JEUzsgYWRkcisrKSB7CiAJCWlmICghYXRoOWtfaHdfbnZyYW1fcmVhZChjb21tb24sIGFkZHIgKyBlZXBfc3RhcnRfbG9jLAogCQkJCQkgZWVwX2RhdGEpKSB7Ci0JCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0VFUFJPTSwKLQkJCQkgICJVbmFibGUgdG8gcmVhZCBlZXByb20gcmVnaW9uXG4iKTsKKwkJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0VFUFJPTSwKKwkJCQkiVW5hYmxlIHRvIHJlYWQgZWVwcm9tIHJlZ2lvblxuIik7CiAJCQlyZXR1cm4gZmFsc2U7CiAJCX0KIAkJZWVwX2RhdGErKzsKQEAgLTcyLDEzICs3MiwxMiBAQAogCWlmICghYXRoOWtfaHdfdXNlX2ZsYXNoKGFoKSkgewogCQlpZiAoIWF0aDlrX2h3X252cmFtX3JlYWQoY29tbW9uLCBBUjU0MTZfRUVQUk9NX01BR0lDX09GRlNFVCwKIAkJCQkJICZtYWdpYykpIHsKLQkJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRkFUQUwsCi0JCQkJICAiUmVhZGluZyBNYWdpYyAjIGZhaWxlZFxuIik7CisJCQlhdGhfZXJyKGNvbW1vbiwgIlJlYWRpbmcgTWFnaWMgIyBmYWlsZWRcbiIpOwogCQkJcmV0dXJuIGZhbHNlOwogCQl9CiAKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19FRVBST00sCi0JCQkgICJSZWFkIE1hZ2ljID0gMHglMDRYXG4iLCBtYWdpYyk7CisJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0VFUFJPTSwKKwkJCSJSZWFkIE1hZ2ljID0gMHglMDRYXG4iLCBtYWdpYyk7CiAKIAkJaWYgKG1hZ2ljICE9IEFSNTQxNl9FRVBST01fTUFHSUMpIHsKIAkJCW1hZ2ljMiA9IHN3YWIxNihtYWdpYyk7CkBAIC05MywxNiArOTIsMTUgQEAKIAkJCQkJZWVwZGF0YSsrOwogCQkJCX0KIAkJCX0gZWxzZSB7Ci0JCQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19GQVRBTCwKLQkJCQkJICAiSW52YWxpZCBFRVBST00gTWFnaWMuICIKLQkJCQkJICAiRW5kaWFubmVzcyBtaXNtYXRjaC5cbiIpOworCQkJCWF0aF9lcnIoY29tbW9uLAorCQkJCQkiSW52YWxpZCBFRVBST00gTWFnaWMuIEVuZGlhbm5lc3MgbWlzbWF0Y2guXG4iKTsKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KIAkJfQogCX0KIAotCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRUVQUk9NLCAibmVlZF9zd2FwID0gJXMuXG4iLAotCQkgIG5lZWRfc3dhcCA/ICJUcnVlIiA6ICJGYWxzZSIpOworCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0VFUFJPTSwgIm5lZWRfc3dhcCA9ICVzLlxuIiwKKwkJbmVlZF9zd2FwID8gIlRydWUiIDogIkZhbHNlIik7CiAKIAlpZiAobmVlZF9zd2FwKQogCQllbCA9IHN3YWIxNihhaC0+ZWVwcm9tLm1hcDkyODcuYmFzZUVlcEhlYWRlci5sZW5ndGgpOwpAQCAtMTUyLDcgKzE1MCw3IEBACiAJCQllZXAtPm1vZGFsSGVhZGVyLmFudEN0cmxDaGFpbltpXSA9IGludGVnZXI7CiAJCX0KIAotCQlmb3IgKGkgPSAwOyBpIDwgQVI5Mjg3X0VFUFJPTV9NT0RBTF9TUFVSUzsgaSsrKSB7CisJCWZvciAoaSA9IDA7IGkgPCBBUl9FRVBST01fTU9EQUxfU1BVUlM7IGkrKykgewogCQkJd29yZCA9IHN3YWIxNihlZXAtPm1vZGFsSGVhZGVyLnNwdXJDaGFuc1tpXS5zcHVyQ2hhbik7CiAJCQllZXAtPm1vZGFsSGVhZGVyLnNwdXJDaGFuc1tpXS5zcHVyQ2hhbiA9IHdvcmQ7CiAJCX0KQEAgLTE2MCw5ICsxNTgsOCBAQAogCiAJaWYgKHN1bSAhPSAweGZmZmYgfHwgYWgtPmVlcF9vcHMtPmdldF9lZXByb21fdmVyKGFoKSAhPSBBUjkyODdfRUVQX1ZFUgogCSAgICB8fCBhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbV9yZXYoYWgpIDwgQVI1NDE2X0VFUF9OT19CQUNLX1ZFUikgewotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0ZBVEFMLAotCQkJICAiQmFkIEVFUFJPTSBjaGVja3N1bSAweCV4IG9yIHJldmlzaW9uIDB4JTA0eFxuIiwKLQkJCSAgIHN1bSwgYWgtPmVlcF9vcHMtPmdldF9lZXByb21fdmVyKGFoKSk7CisJCWF0aF9lcnIoY29tbW9uLCAiQmFkIEVFUFJPTSBjaGVja3N1bSAweCV4IG9yIHJldmlzaW9uIDB4JTA0eFxuIiwKKwkJCXN1bSwgYWgtPmVlcF9vcHMtPmdldF9lZXByb21fdmVyKGFoKSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMjIzLDE2MyArMjIwLDYgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGF0aDlrX2h3X2dldF9hcjkyODdfZ2Fpbl9ib3VuZGFyaWVzX3BkYWRjcyhzdHJ1Y3QgYXRoX2h3ICphaCwKLQkJCSAgICAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKLQkJCSAgICAgICBzdHJ1Y3QgY2FsX2RhdGFfcGVyX2ZyZXFfYXI5Mjg3ICpwUmF3RGF0YVNldCwKLQkJCSAgICAgICB1OCAqYkNoYW5zLCB1MTYgYXZhaWxQaWVycywKLQkJCSAgICAgICB1MTYgdFBkR2Fpbk92ZXJsYXAsCi0JCQkgICAgICAgdTE2ICpwUGRHYWluQm91bmRhcmllcywKLQkJCSAgICAgICB1OCAqcFBEQURDVmFsdWVzLAotCQkJICAgICAgIHUxNiBudW1YcGRHYWlucykKLXsKLSNkZWZpbmUgVE1QX1ZBTF9WUERfVEFCTEUJCQkJCQlcCi0JKCh2cGRUYWJsZUlbaV1bc2l6ZUN1cnJWcGRUYWJsZSAtIDFdICsgKHNzIC0gbWF4SW5kZXggKyAxKSAqIHZwZFN0ZXApKTsKLQotCWludCBpLCBqLCBrOwotCWludDE2X3Qgc3M7Ci0JdTE2IGlkeEwgPSAwLCBpZHhSID0gMCwgbnVtUGllcnM7Ci0JdTggKnBWcGRMLCAqcFZwZFIsICpwUHdyTCwgKnBQd3JSOwotCXU4IG1pblB3clQ0W0FSOTI4N19OVU1fUERfR0FJTlNdOwotCXU4IG1heFB3clQ0W0FSOTI4N19OVU1fUERfR0FJTlNdOwotCWludDE2X3QgdnBkU3RlcDsKLQlpbnQxNl90IHRtcFZhbDsKLQl1MTYgc2l6ZUN1cnJWcGRUYWJsZSwgbWF4SW5kZXgsIHRndEluZGV4OwotCWJvb2wgbWF0Y2g7Ci0JaW50MTZfdCBtaW5EZWx0YSA9IDA7Ci0Jc3RydWN0IGNoYW5fY2VudGVycyBjZW50ZXJzOwotCXN0YXRpYyB1OCB2cGRUYWJsZUxbQVI1NDE2X0VFUDRLX05VTV9QRF9HQUlOU10KLQkJW0FSNTQxNl9NQVhfUFdSX1JBTkdFX0lOX0hBTEZfREJdOwotCXN0YXRpYyB1OCB2cGRUYWJsZVJbQVI1NDE2X0VFUDRLX05VTV9QRF9HQUlOU10KLQkJW0FSNTQxNl9NQVhfUFdSX1JBTkdFX0lOX0hBTEZfREJdOwotCXN0YXRpYyB1OCB2cGRUYWJsZUlbQVI1NDE2X0VFUDRLX05VTV9QRF9HQUlOU10KLQkJW0FSNTQxNl9NQVhfUFdSX1JBTkdFX0lOX0hBTEZfREJdOwotCi0JbWVtc2V0KCZtaW5Qd3JUNCwgMCwgQVI5Mjg3X05VTV9QRF9HQUlOUyk7Ci0JYXRoOWtfaHdfZ2V0X2NoYW5uZWxfY2VudGVycyhhaCwgY2hhbiwgJmNlbnRlcnMpOwotCi0JZm9yIChudW1QaWVycyA9IDA7IG51bVBpZXJzIDwgYXZhaWxQaWVyczsgbnVtUGllcnMrKykgewotCQlpZiAoYkNoYW5zW251bVBpZXJzXSA9PSBBUjkyODdfQkNIQU5fVU5VU0VEKQotCQkJYnJlYWs7Ci0JfQotCi0JbWF0Y2ggPSBhdGg5a19od19nZXRfbG93ZXJfdXBwZXJfaW5kZXgoCi0JCSh1OClGUkVRMkZCSU4oY2VudGVycy5zeW50aF9jZW50ZXIsIElTX0NIQU5fMkdIWihjaGFuKSksCi0JCWJDaGFucywgbnVtUGllcnMsICZpZHhMLCAmaWR4Uik7Ci0KLQlpZiAobWF0Y2gpIHsKLQkJZm9yIChpID0gMDsgaSA8IG51bVhwZEdhaW5zOyBpKyspIHsKLQkJCW1pblB3clQ0W2ldID0gcFJhd0RhdGFTZXRbaWR4TF0ucHdyUGRnW2ldWzBdOwotCQkJbWF4UHdyVDRbaV0gPSBwUmF3RGF0YVNldFtpZHhMXS5wd3JQZGdbaV1bNF07Ci0JCQlhdGg5a19od19maWxsX3ZwZF90YWJsZShtaW5Qd3JUNFtpXSwgbWF4UHdyVDRbaV0sCi0JCQkJCQlwUmF3RGF0YVNldFtpZHhMXS5wd3JQZGdbaV0sCi0JCQkJCQlwUmF3RGF0YVNldFtpZHhMXS52cGRQZGdbaV0sCi0JCQkJCQlBUjkyODdfUERfR0FJTl9JQ0VQVFMsCi0JCQkJCQl2cGRUYWJsZUlbaV0pOwotCQl9Ci0JfSBlbHNlIHsKLQkJZm9yIChpID0gMDsgaSA8IG51bVhwZEdhaW5zOyBpKyspIHsKLQkJCXBWcGRMID0gcFJhd0RhdGFTZXRbaWR4TF0udnBkUGRnW2ldOwotCQkJcFB3ckwgPSBwUmF3RGF0YVNldFtpZHhMXS5wd3JQZGdbaV07Ci0JCQlwVnBkUiA9IHBSYXdEYXRhU2V0W2lkeFJdLnZwZFBkZ1tpXTsKLQkJCXBQd3JSID0gcFJhd0RhdGFTZXRbaWR4Ul0ucHdyUGRnW2ldOwotCi0JCQltaW5Qd3JUNFtpXSA9IG1heChwUHdyTFswXSwgcFB3clJbMF0pOwotCi0JCQltYXhQd3JUNFtpXSA9IG1pbihwUHdyTFtBUjkyODdfUERfR0FJTl9JQ0VQVFMgLSAxXSwKLQkJCQkJICBwUHdyUltBUjkyODdfUERfR0FJTl9JQ0VQVFMgLSAxXSk7Ci0KLQkJCWF0aDlrX2h3X2ZpbGxfdnBkX3RhYmxlKG1pblB3clQ0W2ldLCBtYXhQd3JUNFtpXSwKLQkJCQkJCXBQd3JMLCBwVnBkTCwKLQkJCQkJCUFSOTI4N19QRF9HQUlOX0lDRVBUUywKLQkJCQkJCXZwZFRhYmxlTFtpXSk7Ci0JCQlhdGg5a19od19maWxsX3ZwZF90YWJsZShtaW5Qd3JUNFtpXSwgbWF4UHdyVDRbaV0sCi0JCQkJCQlwUHdyUiwgcFZwZFIsCi0JCQkJCQlBUjkyODdfUERfR0FJTl9JQ0VQVFMsCi0JCQkJCQl2cGRUYWJsZVJbaV0pOwotCi0JCQlmb3IgKGogPSAwOyBqIDw9IChtYXhQd3JUNFtpXSAtIG1pblB3clQ0W2ldKSAvIDI7IGorKykgewotCQkJCXZwZFRhYmxlSVtpXVtqXSA9ICh1OCkoYXRoOWtfaHdfaW50ZXJwb2xhdGUoCi0JCQkJICAgICAgICh1MTYpRlJFUTJGQklOKGNlbnRlcnMuIHN5bnRoX2NlbnRlciwKLQkJCQkJCSAgICAgIElTX0NIQU5fMkdIWihjaGFuKSksCi0JCQkJICAgICAgIGJDaGFuc1tpZHhMXSwgYkNoYW5zW2lkeFJdLAotCQkJCSAgICAgICB2cGRUYWJsZUxbaV1bal0sIHZwZFRhYmxlUltpXVtqXSkpOwotCQkJfQotCQl9Ci0JfQotCi0JayA9IDA7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnVtWHBkR2FpbnM7IGkrKykgewotCQlpZiAoaSA9PSAobnVtWHBkR2FpbnMgLSAxKSkKLQkJCXBQZEdhaW5Cb3VuZGFyaWVzW2ldID0KLQkJCQkodTE2KShtYXhQd3JUNFtpXSAvIDIpOwotCQllbHNlCi0JCQlwUGRHYWluQm91bmRhcmllc1tpXSA9Ci0JCQkJKHUxNikoKG1heFB3clQ0W2ldICsgbWluUHdyVDRbaSsxXSkgLyA0KTsKLQotCQlwUGRHYWluQm91bmRhcmllc1tpXSA9IG1pbigodTE2KUFSNTQxNl9NQVhfUkFURV9QT1dFUiwKLQkJCQkJICAgcFBkR2FpbkJvdW5kYXJpZXNbaV0pOwotCi0KLQkJbWluRGVsdGEgPSAwOwotCi0JCWlmIChpID09IDApIHsKLQkJCWlmIChBUl9TUkVWXzkyODBfMjBfT1JfTEFURVIoYWgpKQotCQkJCXNzID0gKGludDE2X3QpKDAgLSAobWluUHdyVDRbaV0gLyAyKSk7Ci0JCQllbHNlCi0JCQkJc3MgPSAwOwotCQl9IGVsc2UgewotCQkJc3MgPSAoaW50MTZfdCkoKHBQZEdhaW5Cb3VuZGFyaWVzW2ktMV0gLQotCQkJCQkobWluUHdyVDRbaV0gLyAyKSkgLQotCQkJCSAgICAgICB0UGRHYWluT3ZlcmxhcCArIDEgKyBtaW5EZWx0YSk7Ci0JCX0KLQotCQl2cGRTdGVwID0gKGludDE2X3QpKHZwZFRhYmxlSVtpXVsxXSAtIHZwZFRhYmxlSVtpXVswXSk7Ci0JCXZwZFN0ZXAgPSAoaW50MTZfdCkoKHZwZFN0ZXAgPCAxKSA/IDEgOiB2cGRTdGVwKTsKLQotCQl3aGlsZSAoKHNzIDwgMCkgJiYgKGsgPCAoQVI5Mjg3X05VTV9QREFEQ19WQUxVRVMgLSAxKSkpCXsKLQkJCXRtcFZhbCA9IChpbnQxNl90KSh2cGRUYWJsZUlbaV1bMF0gKyBzcyAqIHZwZFN0ZXApOwotCQkJcFBEQURDVmFsdWVzW2srK10gPSAodTgpKCh0bXBWYWwgPCAwKSA/IDAgOiB0bXBWYWwpOwotCQkJc3MrKzsKLQkJfQotCi0JCXNpemVDdXJyVnBkVGFibGUgPSAodTgpKChtYXhQd3JUNFtpXSAtIG1pblB3clQ0W2ldKSAvIDIgKyAxKTsKLQkJdGd0SW5kZXggPSAodTgpKHBQZEdhaW5Cb3VuZGFyaWVzW2ldICsKLQkJCQl0UGRHYWluT3ZlcmxhcCAtIChtaW5Qd3JUNFtpXSAvIDIpKTsKLQkJbWF4SW5kZXggPSAodGd0SW5kZXggPCBzaXplQ3VyclZwZFRhYmxlKSA/Ci0JCQkgICAgdGd0SW5kZXggOiBzaXplQ3VyclZwZFRhYmxlOwotCi0JCXdoaWxlICgoc3MgPCBtYXhJbmRleCkgJiYgKGsgPCAoQVI5Mjg3X05VTV9QREFEQ19WQUxVRVMgLSAxKSkpCi0JCQlwUERBRENWYWx1ZXNbaysrXSA9IHZwZFRhYmxlSVtpXVtzcysrXTsKLQotCQl2cGRTdGVwID0gKGludDE2X3QpKHZwZFRhYmxlSVtpXVtzaXplQ3VyclZwZFRhYmxlIC0gMV0gLQotCQkJCSAgICB2cGRUYWJsZUlbaV1bc2l6ZUN1cnJWcGRUYWJsZSAtIDJdKTsKLQkJdnBkU3RlcCA9IChpbnQxNl90KSgodnBkU3RlcCA8IDEpID8gMSA6IHZwZFN0ZXApOwotCi0JCWlmICh0Z3RJbmRleCA+IG1heEluZGV4KSB7Ci0JCQl3aGlsZSAoKHNzIDw9IHRndEluZGV4KSAmJgotCQkJCShrIDwgKEFSOTI4N19OVU1fUERBRENfVkFMVUVTIC0gMSkpKSB7Ci0JCQkJdG1wVmFsID0gKGludDE2X3QpIFRNUF9WQUxfVlBEX1RBQkxFOwotCQkJCXBQREFEQ1ZhbHVlc1trKytdID0KLQkJCQkJKHU4KSgodG1wVmFsID4gMjU1KSA/IDI1NSA6IHRtcFZhbCk7Ci0JCQkJc3MrKzsKLQkJCX0KLQkJfQotCX0KLQotCXdoaWxlIChpIDwgQVI5Mjg3X1BEX0dBSU5TX0lOX01BU0spIHsKLQkJcFBkR2FpbkJvdW5kYXJpZXNbaV0gPSBwUGRHYWluQm91bmRhcmllc1tpLTFdOwotCQlpKys7Ci0JfQotCi0Jd2hpbGUgKGsgPCBBUjkyODdfTlVNX1BEQURDX1ZBTFVFUykgewotCQlwUERBRENWYWx1ZXNba10gPSBwUERBRENWYWx1ZXNbay0xXTsKLQkJaysrOwotCX0KLQotI3VuZGVmIFRNUF9WQUxfVlBEX1RBQkxFCi19Ci0KIHN0YXRpYyB2b2lkIGFyOTI4N19lZXByb21fZ2V0X3R4X2dhaW5faW5kZXgoc3RydWN0IGF0aF9odyAqYWgsCiAJCQkgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCiAJCQkgICAgc3RydWN0IGNhbF9kYXRhX29wX2xvb3BfYXI5Mjg3ICpwUmF3RGF0YXNldE9wTG9vcCwKQEAgLTM5Miw3ICsyMzIsNyBAQAogCWF0aDlrX2h3X2dldF9jaGFubmVsX2NlbnRlcnMoYWgsIGNoYW4sICZjZW50ZXJzKTsKIAogCWZvciAobnVtUGllcnMgPSAwOyBudW1QaWVycyA8IGF2YWlsUGllcnM7IG51bVBpZXJzKyspIHsKLQkJaWYgKHBDYWxDaGFuc1tudW1QaWVyc10gPT0gQVI5Mjg3X0JDSEFOX1VOVVNFRCkKKwkJaWYgKHBDYWxDaGFuc1tudW1QaWVyc10gPT0gQVI1NDE2X0JDSEFOX1VOVVNFRCkKIAkJCWJyZWFrOwogCX0KIApAQCAtNDU4LDExICsyOTgsMTEgQEAKIAlzdHJ1Y3QgY2FsX2RhdGFfb3BfbG9vcF9hcjkyODcgKnBSYXdEYXRhc2V0T3Blbkxvb3A7CiAJdTggKnBDYWxCQ2hhbnMgPSBOVUxMOwogCXUxNiBwZEdhaW5PdmVybGFwX3QyOwotCXU4IHBkYWRjVmFsdWVzW0FSOTI4N19OVU1fUERBRENfVkFMVUVTXTsKLQl1MTYgZ2FpbkJvdW5kYXJpZXNbQVI5Mjg3X1BEX0dBSU5TX0lOX01BU0tdOworCXU4IHBkYWRjVmFsdWVzW0FSNTQxNl9OVU1fUERBRENfVkFMVUVTXTsKKwl1MTYgZ2FpbkJvdW5kYXJpZXNbQVI1NDE2X1BEX0dBSU5TX0lOX01BU0tdOwogCXUxNiBudW1QaWVycyA9IDAsIGksIGo7CiAJdTE2IG51bVhwZEdhaW4sIHhwZE1hc2s7Ci0JdTE2IHhwZEdhaW5WYWx1ZXNbQVI5Mjg3X05VTV9QRF9HQUlOU10gPSB7MCwgMCwgMCwgMH07CisJdTE2IHhwZEdhaW5WYWx1ZXNbQVI1NDE2X05VTV9QRF9HQUlOU10gPSB7MCwgMCwgMCwgMH07CiAJdTMyIHJlZzMyLCByZWdPZmZzZXQsIHJlZ0NoYWluT2Zmc2V0LCByZWd2YWw7CiAJaW50MTZfdCBtb2RhbElkeCwgZGlmZiA9IDA7CiAJc3RydWN0IGFyOTI4N19lZXByb20gKnBFZXBEYXRhID0gJmFoLT5lZXByb20ubWFwOTI4NzsKQEAgLTQ5MCwxMiArMzMwLDEyIEBACiAJbnVtWHBkR2FpbiA9IDA7CiAKIAkvKiBDYWxjdWxhdGUgdGhlIHZhbHVlIG9mIHhwZGdhaW5zIGZyb20gdGhlIHhwZEdhaW4gTWFzayAqLwotCWZvciAoaSA9IDE7IGkgPD0gQVI5Mjg3X1BEX0dBSU5TX0lOX01BU0s7IGkrKykgewotCQlpZiAoKHhwZE1hc2sgPj4gKEFSOTI4N19QRF9HQUlOU19JTl9NQVNLIC0gaSkpICYgMSkgewotCQkJaWYgKG51bVhwZEdhaW4gPj0gQVI5Mjg3X05VTV9QRF9HQUlOUykKKwlmb3IgKGkgPSAxOyBpIDw9IEFSNTQxNl9QRF9HQUlOU19JTl9NQVNLOyBpKyspIHsKKwkJaWYgKCh4cGRNYXNrID4+IChBUjU0MTZfUERfR0FJTlNfSU5fTUFTSyAtIGkpKSAmIDEpIHsKKwkJCWlmIChudW1YcGRHYWluID49IEFSNTQxNl9OVU1fUERfR0FJTlMpCiAJCQkJYnJlYWs7CiAJCQl4cGRHYWluVmFsdWVzW251bVhwZEdhaW5dID0KLQkJCQkodTE2KShBUjkyODdfUERfR0FJTlNfSU5fTUFTSy1pKTsKKwkJCQkodTE2KShBUjU0MTZfUERfR0FJTlNfSU5fTUFTSy1pKTsKIAkJCW51bVhwZEdhaW4rKzsKIAkJfQogCX0KQEAgLTUyOCw3ICszNjgsNyBAQAogCQkJCQkoc3RydWN0IGNhbF9kYXRhX3Blcl9mcmVxX2FyOTI4NyAqKQogCQkJCQlwRWVwRGF0YS0+Y2FsUGllckRhdGEyR1tpXTsKIAotCQkJCWF0aDlrX2h3X2dldF9hcjkyODdfZ2Fpbl9ib3VuZGFyaWVzX3BkYWRjcyhhaCwgY2hhbiwKKwkJCQlhdGg5a19od19nZXRfZ2Fpbl9ib3VuZGFyaWVzX3BkYWRjcyhhaCwgY2hhbiwKIAkJCQkJCQkgICBwUmF3RGF0YXNldCwKIAkJCQkJCQkgICBwQ2FsQkNoYW5zLCBudW1QaWVycywKIAkJCQkJCQkgICBwZEdhaW5PdmVybGFwX3QyLApAQCAtNTY0LDEzICs0MDQsMTMgQEAKIAkJCQkJICAgICAoaW50MzJfdClBUjkyODdfUFdSX1RBQkxFX09GRlNFVF9EQik7CiAJCQkJZGlmZiAqPSAyOwogCi0JCQkJZm9yIChqID0gMDsgaiA8ICgodTE2KUFSOTI4N19OVU1fUERBRENfVkFMVUVTLWRpZmYpOyBqKyspCisJCQkJZm9yIChqID0gMDsgaiA8ICgodTE2KUFSNTQxNl9OVU1fUERBRENfVkFMVUVTLWRpZmYpOyBqKyspCiAJCQkJCXBkYWRjVmFsdWVzW2pdID0gcGRhZGNWYWx1ZXNbaitkaWZmXTsKIAotCQkJCWZvciAoaiA9ICh1MTYpKEFSOTI4N19OVU1fUERBRENfVkFMVUVTLWRpZmYpOwotCQkJCSAgICAgaiA8IEFSOTI4N19OVU1fUERBRENfVkFMVUVTOyBqKyspCisJCQkJZm9yIChqID0gKHUxNikoQVI1NDE2X05VTV9QREFEQ19WQUxVRVMtZGlmZik7CisJCQkJICAgICBqIDwgQVI1NDE2X05VTV9QREFEQ19WQUxVRVM7IGorKykKIAkJCQkJcGRhZGNWYWx1ZXNbal0gPQotCQkJCQkgIHBkYWRjVmFsdWVzW0FSOTI4N19OVU1fUERBRENfVkFMVUVTLWRpZmZdOworCQkJCQkgIHBkYWRjVmFsdWVzW0FSNTQxNl9OVU1fUERBRENfVkFMVUVTLWRpZmZdOwogCQkJfQogCiAJCQlpZiAoIWF0aDlrX2h3X2FyOTI4N19nZXRfZWVwcm9tKGFoLCBFRVBfT0xfUFdSQ1RSTCkpIHsKQEAgLTYxMyw5ICs0NTMsOSBAQAogI2RlZmluZSBSRURVQ0VfU0NBTEVEX1BPV0VSX0JZX1RIUkVFX0NIQUlOICAgMTAKIAogCXN0cnVjdCBhdGhfcmVndWxhdG9yeSAqcmVndWxhdG9yeSA9IGF0aDlrX2h3X3JlZ3VsYXRvcnkoYWgpOwotCXUxNiB0d2ljZU1heEVkZ2VQb3dlciA9IEFSNTQxNl9NQVhfUkFURV9QT1dFUjsKKwl1MTYgdHdpY2VNYXhFZGdlUG93ZXIgPSBNQVhfUkFURV9QT1dFUjsKIAlzdGF0aWMgY29uc3QgdTE2IHRwU2NhbGVSZWR1Y3Rpb25UYWJsZVs1XSA9Ci0JCXsgMCwgMywgNiwgOSwgQVI1NDE2X01BWF9SQVRFX1BPV0VSIH07CisJCXsgMCwgMywgNiwgOSwgTUFYX1JBVEVfUE9XRVIgfTsKIAlpbnQgaTsKIAlpbnQxNl90IHR3aWNlTGFyZ2VzdEFudGVubmE7CiAJc3RydWN0IGNhbF9jdGxfZGF0YV9hcjkyODcgKnJlcDsKQEAgLTYyNiwxMyArNDY2LDEzIEBACiAJc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfaHQgdGFyZ2V0UG93ZXJIdDIwLAogCQkJCSAgICB0YXJnZXRQb3dlckh0NDAgPSB7MCwgezAsIDAsIDAsIDB9IH07CiAJdTE2IHNjYWxlZFBvd2VyID0gMCwgbWluQ3RsUG93ZXIsIG1heFJlZ0FsbG93ZWRQb3dlcjsKLQl1MTYgY3RsTW9kZXNGb3IxMWdbXSA9IHtDVExfMTFCLAotCQkJCUNUTF8xMUcsCi0JCQkJQ1RMXzJHSFQyMCwKLQkJCQlDVExfMTFCX0VYVCwKLQkJCQlDVExfMTFHX0VYVCwKLQkJCQlDVExfMkdIVDQwfTsKLQl1MTYgbnVtQ3RsTW9kZXMgPSAwLCAqcEN0bE1vZGUgPSBOVUxMLCBjdGxNb2RlLCBmcmVxOworCXN0YXRpYyBjb25zdCB1MTYgY3RsTW9kZXNGb3IxMWdbXSA9IHsKKwkJQ1RMXzExQiwgQ1RMXzExRywgQ1RMXzJHSFQyMCwKKwkJQ1RMXzExQl9FWFQsIENUTF8xMUdfRVhULCBDVExfMkdIVDQwCisJfTsKKwl1MTYgbnVtQ3RsTW9kZXMgPSAwOworCWNvbnN0IHUxNiAqcEN0bE1vZGUgPSBOVUxMOworCXUxNiBjdGxNb2RlLCBmcmVxOwogCXN0cnVjdCBjaGFuX2NlbnRlcnMgY2VudGVyczsKIAlpbnQgdHhfY2hhaW5tYXNrOwogCXUxNiB0d2ljZU1pbkVkZ2VQb3dlcjsKQEAgLTg1Myw3ICs2OTMsNyBAQAogCQkJCQlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwgdTE2IGNmZ0N0bCwKIAkJCQkJdTggdHdpY2VBbnRlbm5hUmVkdWN0aW9uLAogCQkJCQl1OCB0d2ljZU1heFJlZ3VsYXRvcnlQb3dlciwKLQkJCQkJdTggcG93ZXJMaW1pdCkKKwkJCQkJdTggcG93ZXJMaW1pdCwgYm9vbCB0ZXN0KQogewogCXN0cnVjdCBhdGhfcmVndWxhdG9yeSAqcmVndWxhdG9yeSA9IGF0aDlrX2h3X3JlZ3VsYXRvcnkoYWgpOwogCXN0cnVjdCBhcjkyODdfZWVwcm9tICpwRWVwRGF0YSA9ICZhaC0+ZWVwcm9tLm1hcDkyODc7CkBAIC04NzcsMTIgKzcxNywyNiBAQAogCiAJYXRoOWtfaHdfc2V0X2FyOTI4N19wb3dlcl9jYWxfdGFibGUoYWgsIGNoYW4sICZ0eFBvd2VySW5kZXhPZmZzZXQpOwogCisJcmVndWxhdG9yeS0+bWF4X3Bvd2VyX2xldmVsID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyYXRlc0FycmF5KTsgaSsrKSB7CiAJCXJhdGVzQXJyYXlbaV0gPSAoaW50MTZfdCkodHhQb3dlckluZGV4T2Zmc2V0ICsgcmF0ZXNBcnJheVtpXSk7Ci0JCWlmIChyYXRlc0FycmF5W2ldID4gQVI5Mjg3X01BWF9SQVRFX1BPV0VSKQotCQkJcmF0ZXNBcnJheVtpXSA9IEFSOTI4N19NQVhfUkFURV9QT1dFUjsKKwkJaWYgKHJhdGVzQXJyYXlbaV0gPiBNQVhfUkFURV9QT1dFUikKKwkJCXJhdGVzQXJyYXlbaV0gPSBNQVhfUkFURV9QT1dFUjsKKworCQlpZiAocmF0ZXNBcnJheVtpXSA+IHJlZ3VsYXRvcnktPm1heF9wb3dlcl9sZXZlbCkKKwkJCXJlZ3VsYXRvcnktPm1heF9wb3dlcl9sZXZlbCA9IHJhdGVzQXJyYXlbaV07CiAJfQogCisJaWYgKHRlc3QpCisJCXJldHVybjsKKworCWlmIChJU19DSEFOXzJHSFooY2hhbikpCisJCWkgPSByYXRlMWw7CisJZWxzZQorCQlpID0gcmF0ZTZtYjsKKworCXJlZ3VsYXRvcnktPm1heF9wb3dlcl9sZXZlbCA9IHJhdGVzQXJyYXlbaV07CisKIAlpZiAoQVJfU1JFVl85MjgwXzIwX09SX0xBVEVSKGFoKSkgewogCQlmb3IgKGkgPSAwOyBpIDwgQXI1NDE2UmF0ZVNpemU7IGkrKykKIAkJCXJhdGVzQXJyYXlbaV0gLT0gQVI5Mjg3X1BXUl9UQUJMRV9PRkZTRVRfREIgKiAyOwpAQCAtOTcxLDE3ICs4MjUsNiBAQAogCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVEdXBPZmRtXSwgOCkKIAkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlRHVwQ2NrXSwgMCkpOwogCX0KLQotCWlmIChJU19DSEFOXzJHSFooY2hhbikpCi0JCWkgPSByYXRlMWw7Ci0JZWxzZQotCQlpID0gcmF0ZTZtYjsKLQotCWlmIChBUl9TUkVWXzkyODBfMjBfT1JfTEFURVIoYWgpKQotCQlyZWd1bGF0b3J5LT5tYXhfcG93ZXJfbGV2ZWwgPQotCQkJcmF0ZXNBcnJheVtpXSArIEFSOTI4N19QV1JfVEFCTEVfT0ZGU0VUX0RCICogMjsKLQllbHNlCi0JCXJlZ3VsYXRvcnktPm1heF9wb3dlcl9sZXZlbCA9IHJhdGVzQXJyYXlbaV07CiB9CiAKIHN0YXRpYyB2b2lkIGF0aDlrX2h3X2FyOTI4N19zZXRfYWRkYWMoc3RydWN0IGF0aF9odyAqYWgsCkBAIC0xMDIzLDggKzg2Niw3IEBACiAJCWFudFdyaXRlc1tqKytdID0gKHUxNikocE1vZGFsLT5hbnRDdHJsQ2hhaW5baV0gJiAweDMpOwogCX0KIAotCVJFR19XUklURShhaCwgQVJfUEhZX1NXSVRDSF9DT00sCi0JCSAgYWgtPmVlcF9vcHMtPmdldF9lZXByb21fYW50ZW5uYV9jZmcoYWgsIGNoYW4pKTsKKwlSRUdfV1JJVEUoYWgsIEFSX1BIWV9TV0lUQ0hfQ09NLCBwTW9kYWwtPmFudEN0cmxDb21tb24pOwogCiAJZm9yIChpID0gMDsgaSA8IEFSOTI4N19NQVhfQ0hBSU5TOyBpKyspCXsKIAkJcmVnQ2hhaW5PZmZzZXQgPSBpICogMHgxMDAwOwpAQCAtMTEyNSwyMSArOTY3LDYgQEAKIAkJCQkgIHBNb2RhbC0+eHBhQmlhc0x2bCk7CiB9CiAKLXN0YXRpYyB1OCBhdGg5a19od19hcjkyODdfZ2V0X251bV9hbnRfY29uZmlnKHN0cnVjdCBhdGhfaHcgKmFoLAotCQkJCQkgICAgIGVudW0gYXRoOWtfaGFsX2ZyZXFfYmFuZCBmcmVxX2JhbmQpCi17Ci0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyB1MzIgYXRoOWtfaHdfYXI5Mjg3X2dldF9lZXByb21fYW50ZW5uYV9jZmcoc3RydWN0IGF0aF9odyAqYWgsCi0JCQkJCQkgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQotewotCXN0cnVjdCBhcjkyODdfZWVwcm9tICplZXAgPSAmYWgtPmVlcHJvbS5tYXA5Mjg3OwotCXN0cnVjdCBtb2RhbF9lZXBfYXI5Mjg3X2hlYWRlciAqcE1vZGFsID0gJmVlcC0+bW9kYWxIZWFkZXI7Ci0KLQlyZXR1cm4gcE1vZGFsLT5hbnRDdHJsQ29tbW9uOwotfQotCiBzdGF0aWMgdTE2IGF0aDlrX2h3X2FyOTI4N19nZXRfc3B1cl9jaGFubmVsKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJCQkgICAgdTE2IGksIGJvb2wgaXMyR0h6KQogewpAQCAtMTE0OSwxNyArOTc2LDE3IEBACiAJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihhaCk7CiAJdTE2IHNwdXJfdmFsID0gQVJfTk9fU1BVUjsKIAotCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQU5JLAotCQkgICJHZXR0aW5nIHNwdXIgaWR4ICVkIGlzMkdoei4gJWQgdmFsICV4XG4iLAotCQkgIGksIGlzMkdIeiwgYWgtPmNvbmZpZy5zcHVyY2hhbnNbaV1baXMyR0h6XSk7CisJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQU5JLAorCQkiR2V0dGluZyBzcHVyIGlkeDolZCBpczJHaHo6JWQgdmFsOiV4XG4iLAorCQlpLCBpczJHSHosIGFoLT5jb25maWcuc3B1cmNoYW5zW2ldW2lzMkdIel0pOwogCiAJc3dpdGNoIChhaC0+Y29uZmlnLnNwdXJtb2RlKSB7CiAJY2FzZSBTUFVSX0RJU0FCTEU6CiAJCWJyZWFrOwogCWNhc2UgU1BVUl9FTkFCTEVfSU9DVEw6CiAJCXNwdXJfdmFsID0gYWgtPmNvbmZpZy5zcHVyY2hhbnNbaV1baXMyR0h6XTsKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19BTkksCi0JCQkgICJHZXR0aW5nIHNwdXIgdmFsIGZyb20gbmV3IGxvYy4gJWRcbiIsIHNwdXJfdmFsKTsKKwkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQU5JLAorCQkJIkdldHRpbmcgc3B1ciB2YWwgZnJvbSBuZXcgbG9jLiAlZFxuIiwgc3B1cl92YWwpOwogCQlicmVhazsKIAljYXNlIFNQVVJfRU5BQkxFX0VFUFJPTToKIAkJc3B1cl92YWwgPSBFRVBfTUFQOTI4N19TUFVSQ0hBTjsKQEAgLTExNzcsOCArMTAwNCw2IEBACiAJLmZpbGxfZWVwcm9tCQk9IGF0aDlrX2h3X2FyOTI4N19maWxsX2VlcHJvbSwKIAkuZ2V0X2VlcHJvbV92ZXIJCT0gYXRoOWtfaHdfYXI5Mjg3X2dldF9lZXByb21fdmVyLAogCS5nZXRfZWVwcm9tX3JldgkJPSBhdGg5a19od19hcjkyODdfZ2V0X2VlcHJvbV9yZXYsCi0JLmdldF9udW1fYW50X2NvbmZpZwk9IGF0aDlrX2h3X2FyOTI4N19nZXRfbnVtX2FudF9jb25maWcsCi0JLmdldF9lZXByb21fYW50ZW5uYV9jZmcJPSBhdGg5a19od19hcjkyODdfZ2V0X2VlcHJvbV9hbnRlbm5hX2NmZywKIAkuc2V0X2JvYXJkX3ZhbHVlcwk9IGF0aDlrX2h3X2FyOTI4N19zZXRfYm9hcmRfdmFsdWVzLAogCS5zZXRfYWRkYWMJCT0gYXRoOWtfaHdfYXI5Mjg3X3NldF9hZGRhYywKIAkuc2V0X3R4cG93ZXIJCT0gYXRoOWtfaHdfYXI5Mjg3X3NldF90eHBvd2VyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2VlcHJvbV9kZWYuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9lZXByb21fZGVmLmMKaW5kZXggYTNjY2IxYi4uMDg4ZjE0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2VlcHJvbV9kZWYuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZWVwcm9tX2RlZi5jCkBAIC05Niw4ICs5Niw4IEBACiAJZm9yIChhZGRyID0gMDsgYWRkciA8IFNJWkVfRUVQUk9NX0RFRjsgYWRkcisrKSB7CiAJCWlmICghYXRoOWtfaHdfbnZyYW1fcmVhZChjb21tb24sIGFkZHIgKyBhcjU0MTZfZWVwX3N0YXJ0X2xvYywKIAkJCQkJIGVlcF9kYXRhKSkgewotCQkJYXRoX3ByaW50KGF0aDlrX2h3X2NvbW1vbihhaCksIEFUSF9EQkdfRkFUQUwsCi0JCQkJICAiVW5hYmxlIHRvIHJlYWQgZWVwcm9tIHJlZ2lvblxuIik7CisJCQlhdGhfZXJyKGF0aDlrX2h3X2NvbW1vbihhaCksCisJCQkJIlVuYWJsZSB0byByZWFkIGVlcHJvbSByZWdpb25cbiIpOwogCQkJcmV0dXJuIGZhbHNlOwogCQl9CiAJCWVlcF9kYXRhKys7CkBAIC0xMTcsMTMgKzExNywxMyBAQAogCWludCBpLCBhZGRyLCBzaXplOwogCiAJaWYgKCFhdGg5a19od19udnJhbV9yZWFkKGNvbW1vbiwgQVI1NDE2X0VFUFJPTV9NQUdJQ19PRkZTRVQsICZtYWdpYykpIHsKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19GQVRBTCwgIlJlYWRpbmcgTWFnaWMgIyBmYWlsZWRcbiIpOworCQlhdGhfZXJyKGNvbW1vbiwgIlJlYWRpbmcgTWFnaWMgIyBmYWlsZWRcbiIpOwogCQlyZXR1cm4gZmFsc2U7CiAJfQogCiAJaWYgKCFhdGg5a19od191c2VfZmxhc2goYWgpKSB7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRUVQUk9NLAotCQkJICAiUmVhZCBNYWdpYyA9IDB4JTA0WFxuIiwgbWFnaWMpOworCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19FRVBST00sCisJCQkiUmVhZCBNYWdpYyA9IDB4JTA0WFxuIiwgbWFnaWMpOwogCiAJCWlmIChtYWdpYyAhPSBBUjU0MTZfRUVQUk9NX01BR0lDKSB7CiAJCQltYWdpYzIgPSBzd2FiMTYobWFnaWMpOwpAQCAtMTM5LDE2ICsxMzksMTUgQEAKIAkJCQkJZWVwZGF0YSsrOwogCQkJCX0KIAkJCX0gZWxzZSB7Ci0JCQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19GQVRBTCwKLQkJCQkJICAiSW52YWxpZCBFRVBST00gTWFnaWMuICIKLQkJCQkJICAiRW5kaWFubmVzcyBtaXNtYXRjaC5cbiIpOworCQkJCWF0aF9lcnIoY29tbW9uLAorCQkJCQkiSW52YWxpZCBFRVBST00gTWFnaWMuIEVuZGlhbm5lc3MgbWlzbWF0Y2guXG4iKTsKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KIAkJfQogCX0KIAotCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRUVQUk9NLCAibmVlZF9zd2FwID0gJXMuXG4iLAotCQkgIG5lZWRfc3dhcCA/ICJUcnVlIiA6ICJGYWxzZSIpOworCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0VFUFJPTSwgIm5lZWRfc3dhcCA9ICVzLlxuIiwKKwkJbmVlZF9zd2FwID8gIlRydWUiIDogIkZhbHNlIik7CiAKIAlpZiAobmVlZF9zd2FwKQogCQllbCA9IHN3YWIxNihhaC0+ZWVwcm9tLmRlZi5iYXNlRWVwSGVhZGVyLmxlbmd0aCk7CkBAIC0xNjksOCArMTY4LDggQEAKIAkJdTMyIGludGVnZXIsIGo7CiAJCXUxNiB3b3JkOwogCi0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRUVQUk9NLAotCQkJICAiRUVQUk9NIEVuZGlhbm5lc3MgaXMgbm90IG5hdGl2ZS4uIENoYW5naW5nLlxuIik7CisJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0VFUFJPTSwKKwkJCSJFRVBST00gRW5kaWFubmVzcyBpcyBub3QgbmF0aXZlLi4gQ2hhbmdpbmcuXG4iKTsKIAogCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci5sZW5ndGgpOwogCQllZXAtPmJhc2VFZXBIZWFkZXIubGVuZ3RoID0gd29yZDsKQEAgLTIwNyw3ICsyMDYsNyBAQAogCQkJCXBNb2RhbC0+YW50Q3RybENoYWluW2ldID0gaW50ZWdlcjsKIAkJCX0KIAotCQkJZm9yIChpID0gMDsgaSA8IEFSNTQxNl9FRVBST01fTU9EQUxfU1BVUlM7IGkrKykgeworCQkJZm9yIChpID0gMDsgaSA8IEFSX0VFUFJPTV9NT0RBTF9TUFVSUzsgaSsrKSB7CiAJCQkJd29yZCA9IHN3YWIxNihwTW9kYWwtPnNwdXJDaGFuc1tpXS5zcHVyQ2hhbik7CiAJCQkJcE1vZGFsLT5zcHVyQ2hhbnNbaV0uc3B1ckNoYW4gPSB3b3JkOwogCQkJfQpAQCAtMjE2LDggKzIxNSw3IEBACiAKIAlpZiAoc3VtICE9IDB4ZmZmZiB8fCBhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbV92ZXIoYWgpICE9IEFSNTQxNl9FRVBfVkVSIHx8CiAJICAgIGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tX3JldihhaCkgPCBBUjU0MTZfRUVQX05PX0JBQ0tfVkVSKSB7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRkFUQUwsCi0JCQkgICJCYWQgRUVQUk9NIGNoZWNrc3VtIDB4JXggb3IgcmV2aXNpb24gMHglMDR4XG4iLAorCQlhdGhfZXJyKGNvbW1vbiwgIkJhZCBFRVBST00gY2hlY2tzdW0gMHgleCBvciByZXZpc2lvbiAweCUwNHhcbiIsCiAJCQlzdW0sIGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tX3ZlcihhaCkpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0zNzYsOCArMzc0LDcgQEAKIAlwTW9kYWwgPSAmKGVlcC0+bW9kYWxIZWFkZXJbSVNfQ0hBTl8yR0haKGNoYW4pXSk7CiAJdHhSeEF0dGVuTG9jYWwgPSBJU19DSEFOXzJHSFooY2hhbikgPyAyMyA6IDQ0OwogCi0JUkVHX1dSSVRFKGFoLCBBUl9QSFlfU1dJVENIX0NPTSwKLQkJICBhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbV9hbnRlbm5hX2NmZyhhaCwgY2hhbikpOworCVJFR19XUklURShhaCwgQVJfUEhZX1NXSVRDSF9DT00sIHBNb2RhbC0+YW50Q3RybENvbW1vbiAmIDB4ZmZmZik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVI1NDE2X01BWF9DSEFJTlM7IGkrKykgewogCQlpZiAoQVJfU1JFVl85MjgwKGFoKSkgewpAQCAtNTkwLDE2OCArNTg3LDYgQEAKICN1bmRlZiBYUEFfTFZMX0ZSRVEKIH0KIAotc3RhdGljIHZvaWQgYXRoOWtfaHdfZ2V0X2RlZl9nYWluX2JvdW5kYXJpZXNfcGRhZGNzKHN0cnVjdCBhdGhfaHcgKmFoLAotCQkJCXN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAotCQkJCXN0cnVjdCBjYWxfZGF0YV9wZXJfZnJlcSAqcFJhd0RhdGFTZXQsCi0JCQkJdTggKmJDaGFucywgdTE2IGF2YWlsUGllcnMsCi0JCQkJdTE2IHRQZEdhaW5PdmVybGFwLAotCQkJCXUxNiAqcFBkR2FpbkJvdW5kYXJpZXMsIHU4ICpwUERBRENWYWx1ZXMsCi0JCQkJdTE2IG51bVhwZEdhaW5zKQotewotCWludCBpLCBqLCBrOwotCWludDE2X3Qgc3M7Ci0JdTE2IGlkeEwgPSAwLCBpZHhSID0gMCwgbnVtUGllcnM7Ci0Jc3RhdGljIHU4IHZwZFRhYmxlTFtBUjU0MTZfTlVNX1BEX0dBSU5TXQotCQlbQVI1NDE2X01BWF9QV1JfUkFOR0VfSU5fSEFMRl9EQl07Ci0Jc3RhdGljIHU4IHZwZFRhYmxlUltBUjU0MTZfTlVNX1BEX0dBSU5TXQotCQlbQVI1NDE2X01BWF9QV1JfUkFOR0VfSU5fSEFMRl9EQl07Ci0Jc3RhdGljIHU4IHZwZFRhYmxlSVtBUjU0MTZfTlVNX1BEX0dBSU5TXQotCQlbQVI1NDE2X01BWF9QV1JfUkFOR0VfSU5fSEFMRl9EQl07Ci0KLQl1OCAqcFZwZEwsICpwVnBkUiwgKnBQd3JMLCAqcFB3clI7Ci0JdTggbWluUHdyVDRbQVI1NDE2X05VTV9QRF9HQUlOU107Ci0JdTggbWF4UHdyVDRbQVI1NDE2X05VTV9QRF9HQUlOU107Ci0JaW50MTZfdCB2cGRTdGVwOwotCWludDE2X3QgdG1wVmFsOwotCXUxNiBzaXplQ3VyclZwZFRhYmxlLCBtYXhJbmRleCwgdGd0SW5kZXg7Ci0JYm9vbCBtYXRjaDsKLQlpbnQxNl90IG1pbkRlbHRhID0gMDsKLQlzdHJ1Y3QgY2hhbl9jZW50ZXJzIGNlbnRlcnM7Ci0KLQltZW1zZXQoJm1pblB3clQ0LCAwLCBBUjkyODdfTlVNX1BEX0dBSU5TKTsKLQlhdGg5a19od19nZXRfY2hhbm5lbF9jZW50ZXJzKGFoLCBjaGFuLCAmY2VudGVycyk7Ci0KLQlmb3IgKG51bVBpZXJzID0gMDsgbnVtUGllcnMgPCBhdmFpbFBpZXJzOyBudW1QaWVycysrKSB7Ci0JCWlmIChiQ2hhbnNbbnVtUGllcnNdID09IEFSNTQxNl9CQ0hBTl9VTlVTRUQpCi0JCQlicmVhazsKLQl9Ci0KLQltYXRjaCA9IGF0aDlrX2h3X2dldF9sb3dlcl91cHBlcl9pbmRleCgodTgpRlJFUTJGQklOKGNlbnRlcnMuc3ludGhfY2VudGVyLAotCQkJCQkJCSAgICAgSVNfQ0hBTl8yR0haKGNoYW4pKSwKLQkJCQkJICAgICAgIGJDaGFucywgbnVtUGllcnMsICZpZHhMLCAmaWR4Uik7Ci0KLQlpZiAobWF0Y2gpIHsKLQkJZm9yIChpID0gMDsgaSA8IG51bVhwZEdhaW5zOyBpKyspIHsKLQkJCW1pblB3clQ0W2ldID0gcFJhd0RhdGFTZXRbaWR4TF0ucHdyUGRnW2ldWzBdOwotCQkJbWF4UHdyVDRbaV0gPSBwUmF3RGF0YVNldFtpZHhMXS5wd3JQZGdbaV1bNF07Ci0JCQlhdGg5a19od19maWxsX3ZwZF90YWJsZShtaW5Qd3JUNFtpXSwgbWF4UHdyVDRbaV0sCi0JCQkJCXBSYXdEYXRhU2V0W2lkeExdLnB3clBkZ1tpXSwKLQkJCQkJcFJhd0RhdGFTZXRbaWR4TF0udnBkUGRnW2ldLAotCQkJCQlBUjU0MTZfUERfR0FJTl9JQ0VQVFMsCi0JCQkJCXZwZFRhYmxlSVtpXSk7Ci0JCX0KLQl9IGVsc2UgewotCQlmb3IgKGkgPSAwOyBpIDwgbnVtWHBkR2FpbnM7IGkrKykgewotCQkJcFZwZEwgPSBwUmF3RGF0YVNldFtpZHhMXS52cGRQZGdbaV07Ci0JCQlwUHdyTCA9IHBSYXdEYXRhU2V0W2lkeExdLnB3clBkZ1tpXTsKLQkJCXBWcGRSID0gcFJhd0RhdGFTZXRbaWR4Ul0udnBkUGRnW2ldOwotCQkJcFB3clIgPSBwUmF3RGF0YVNldFtpZHhSXS5wd3JQZGdbaV07Ci0KLQkJCW1pblB3clQ0W2ldID0gbWF4KHBQd3JMWzBdLCBwUHdyUlswXSk7Ci0KLQkJCW1heFB3clQ0W2ldID0KLQkJCQltaW4ocFB3ckxbQVI1NDE2X1BEX0dBSU5fSUNFUFRTIC0gMV0sCi0JCQkJICAgIHBQd3JSW0FSNTQxNl9QRF9HQUlOX0lDRVBUUyAtIDFdKTsKLQotCi0JCQlhdGg5a19od19maWxsX3ZwZF90YWJsZShtaW5Qd3JUNFtpXSwgbWF4UHdyVDRbaV0sCi0JCQkJCQlwUHdyTCwgcFZwZEwsCi0JCQkJCQlBUjU0MTZfUERfR0FJTl9JQ0VQVFMsCi0JCQkJCQl2cGRUYWJsZUxbaV0pOwotCQkJYXRoOWtfaHdfZmlsbF92cGRfdGFibGUobWluUHdyVDRbaV0sIG1heFB3clQ0W2ldLAotCQkJCQkJcFB3clIsIHBWcGRSLAotCQkJCQkJQVI1NDE2X1BEX0dBSU5fSUNFUFRTLAotCQkJCQkJdnBkVGFibGVSW2ldKTsKLQotCQkJZm9yIChqID0gMDsgaiA8PSAobWF4UHdyVDRbaV0gLSBtaW5Qd3JUNFtpXSkgLyAyOyBqKyspIHsKLQkJCQl2cGRUYWJsZUlbaV1bal0gPQotCQkJCQkodTgpKGF0aDlrX2h3X2ludGVycG9sYXRlKCh1MTYpCi0JCQkJCSAgICAgRlJFUTJGQklOKGNlbnRlcnMuCi0JCQkJCQkgICAgICAgc3ludGhfY2VudGVyLAotCQkJCQkJICAgICAgIElTX0NIQU5fMkdIWgotCQkJCQkJICAgICAgIChjaGFuKSksCi0JCQkJCSAgICAgYkNoYW5zW2lkeExdLCBiQ2hhbnNbaWR4Ul0sCi0JCQkJCSAgICAgdnBkVGFibGVMW2ldW2pdLCB2cGRUYWJsZVJbaV1bal0pKTsKLQkJCX0KLQkJfQotCX0KLQotCWsgPSAwOwotCi0JZm9yIChpID0gMDsgaSA8IG51bVhwZEdhaW5zOyBpKyspIHsKLQkJaWYgKGkgPT0gKG51bVhwZEdhaW5zIC0gMSkpCi0JCQlwUGRHYWluQm91bmRhcmllc1tpXSA9Ci0JCQkJKHUxNikobWF4UHdyVDRbaV0gLyAyKTsKLQkJZWxzZQotCQkJcFBkR2FpbkJvdW5kYXJpZXNbaV0gPQotCQkJCSh1MTYpKChtYXhQd3JUNFtpXSArIG1pblB3clQ0W2kgKyAxXSkgLyA0KTsKLQotCQlwUGRHYWluQm91bmRhcmllc1tpXSA9Ci0JCQltaW4oKHUxNilBUjU0MTZfTUFYX1JBVEVfUE9XRVIsIHBQZEdhaW5Cb3VuZGFyaWVzW2ldKTsKLQotCQlpZiAoKGkgPT0gMCkgJiYgIUFSX1NSRVZfNTQxNl8yMF9PUl9MQVRFUihhaCkpIHsKLQkJCW1pbkRlbHRhID0gcFBkR2FpbkJvdW5kYXJpZXNbMF0gLSAyMzsKLQkJCXBQZEdhaW5Cb3VuZGFyaWVzWzBdID0gMjM7Ci0JCX0gZWxzZSB7Ci0JCQltaW5EZWx0YSA9IDA7Ci0JCX0KLQotCQlpZiAoaSA9PSAwKSB7Ci0JCQlpZiAoQVJfU1JFVl85MjgwXzIwX09SX0xBVEVSKGFoKSkKLQkJCQlzcyA9IChpbnQxNl90KSgwIC0gKG1pblB3clQ0W2ldIC8gMikpOwotCQkJZWxzZQotCQkJCXNzID0gMDsKLQkJfSBlbHNlIHsKLQkJCXNzID0gKGludDE2X3QpKChwUGRHYWluQm91bmRhcmllc1tpIC0gMV0gLQotCQkJCQkobWluUHdyVDRbaV0gLyAyKSkgLQotCQkJCSAgICAgICB0UGRHYWluT3ZlcmxhcCArIDEgKyBtaW5EZWx0YSk7Ci0JCX0KLQkJdnBkU3RlcCA9IChpbnQxNl90KSh2cGRUYWJsZUlbaV1bMV0gLSB2cGRUYWJsZUlbaV1bMF0pOwotCQl2cGRTdGVwID0gKGludDE2X3QpKCh2cGRTdGVwIDwgMSkgPyAxIDogdnBkU3RlcCk7Ci0KLQkJd2hpbGUgKChzcyA8IDApICYmIChrIDwgKEFSNTQxNl9OVU1fUERBRENfVkFMVUVTIC0gMSkpKSB7Ci0JCQl0bXBWYWwgPSAoaW50MTZfdCkodnBkVGFibGVJW2ldWzBdICsgc3MgKiB2cGRTdGVwKTsKLQkJCXBQREFEQ1ZhbHVlc1trKytdID0gKHU4KSgodG1wVmFsIDwgMCkgPyAwIDogdG1wVmFsKTsKLQkJCXNzKys7Ci0JCX0KLQotCQlzaXplQ3VyclZwZFRhYmxlID0gKHU4KSAoKG1heFB3clQ0W2ldIC0gbWluUHdyVDRbaV0pIC8gMiArIDEpOwotCQl0Z3RJbmRleCA9ICh1OCkocFBkR2FpbkJvdW5kYXJpZXNbaV0gKyB0UGRHYWluT3ZlcmxhcCAtCi0JCQkJKG1pblB3clQ0W2ldIC8gMikpOwotCQltYXhJbmRleCA9ICh0Z3RJbmRleCA8IHNpemVDdXJyVnBkVGFibGUpID8KLQkJCXRndEluZGV4IDogc2l6ZUN1cnJWcGRUYWJsZTsKLQotCQl3aGlsZSAoKHNzIDwgbWF4SW5kZXgpICYmIChrIDwgKEFSNTQxNl9OVU1fUERBRENfVkFMVUVTIC0gMSkpKSB7Ci0JCQlwUERBRENWYWx1ZXNbaysrXSA9IHZwZFRhYmxlSVtpXVtzcysrXTsKLQkJfQotCi0JCXZwZFN0ZXAgPSAoaW50MTZfdCkodnBkVGFibGVJW2ldW3NpemVDdXJyVnBkVGFibGUgLSAxXSAtCi0JCQkJICAgIHZwZFRhYmxlSVtpXVtzaXplQ3VyclZwZFRhYmxlIC0gMl0pOwotCQl2cGRTdGVwID0gKGludDE2X3QpKCh2cGRTdGVwIDwgMSkgPyAxIDogdnBkU3RlcCk7Ci0KLQkJaWYgKHRndEluZGV4ID49IG1heEluZGV4KSB7Ci0JCQl3aGlsZSAoKHNzIDw9IHRndEluZGV4KSAmJgotCQkJICAgICAgIChrIDwgKEFSNTQxNl9OVU1fUERBRENfVkFMVUVTIC0gMSkpKSB7Ci0JCQkJdG1wVmFsID0gKGludDE2X3QpKCh2cGRUYWJsZUlbaV1bc2l6ZUN1cnJWcGRUYWJsZSAtIDFdICsKLQkJCQkJCSAgICAoc3MgLSBtYXhJbmRleCArIDEpICogdnBkU3RlcCkpOwotCQkJCXBQREFEQ1ZhbHVlc1trKytdID0gKHU4KSgodG1wVmFsID4gMjU1KSA/Ci0JCQkJCQkJIDI1NSA6IHRtcFZhbCk7Ci0JCQkJc3MrKzsKLQkJCX0KLQkJfQotCX0KLQotCXdoaWxlIChpIDwgQVI1NDE2X1BEX0dBSU5TX0lOX01BU0spIHsKLQkJcFBkR2FpbkJvdW5kYXJpZXNbaV0gPSBwUGRHYWluQm91bmRhcmllc1tpIC0gMV07Ci0JCWkrKzsKLQl9Ci0KLQl3aGlsZSAoayA8IEFSNTQxNl9OVU1fUERBRENfVkFMVUVTKSB7Ci0JCXBQREFEQ1ZhbHVlc1trXSA9IHBQREFEQ1ZhbHVlc1trIC0gMV07Ci0JCWsrKzsKLQl9Ci19Ci0KIHN0YXRpYyBpbnQxNl90IGF0aDlrX2NoYW5nZV9nYWluX2JvdW5kYXJ5X3NldHRpbmcoc3RydWN0IGF0aF9odyAqYWgsCiAJCQkJdTE2ICpnYiwKIAkJCQl1MTYgbnVtWHBkR2FpbiwKQEAgLTc4NCw3ICs2MTksNyBAQAogCQkvKiBCZWNhdXNlIG9mIGEgaGFyZHdhcmUgbGltaXRhdGlvbiwgZW5zdXJlIHRoZSBnYWluIGJvdW5kYXJ5CiAJCSAqIGlzIG5vdCBsYXJnZXIgdGhhbiAoNjMgLSBvdmVybGFwKQogCQkgKi8KLQkJZ2JfbGltaXQgPSAodTE2KShBUjU0MTZfTUFYX1JBVEVfUE9XRVIgLSBwZEdhaW5PdmVybGFwX3QyKTsKKwkJZ2JfbGltaXQgPSAodTE2KShNQVhfUkFURV9QT1dFUiAtIHBkR2Fpbk92ZXJsYXBfdDIpOwogCiAJCWZvciAoayA9IDA7IGsgPCBudW1YcGRHYWluOyBrKyspCiAJCQlnYltrXSA9ICh1MTYpbWluKGdiX2xpbWl0LCBnYltrXSk7CkBAIC05MTgsNyArNzUzLDcgQEAKIAkJCQlhdGg5a19vbGNfZ2V0X3BkYWRjcyhhaCwgcGNkYWNJZHgsCiAJCQkJCQkgICAgIHR4UG93ZXIvMiwgcGRhZGNWYWx1ZXMpOwogCQkJfSBlbHNlIHsKLQkJCQlhdGg5a19od19nZXRfZGVmX2dhaW5fYm91bmRhcmllc19wZGFkY3MoYWgsCisJCQkJYXRoOWtfaHdfZ2V0X2dhaW5fYm91bmRhcmllc19wZGFkY3MoYWgsCiAJCQkJCQkJY2hhbiwgcFJhd0RhdGFzZXQsCiAJCQkJCQkJcENhbEJDaGFucywgbnVtUGllcnMsCiAJCQkJCQkJcGRHYWluT3ZlcmxhcF90MiwKQEAgLTk2NiwyMCArODAxLDE5IEBACiAJCQkJCSgocGRhZGNWYWx1ZXNbNCAqIGogKyAzXSAmIDB4RkYpIDw8IDI0KTsKIAkJCQlSRUdfV1JJVEUoYWgsIHJlZ09mZnNldCwgcmVnMzIpOwogCi0JCQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19FRVBST00sCi0JCQkJCSAgIlBEQURDICglZCwlNHgpOiAlNC40eCAlOC44eFxuIiwKLQkJCQkJICBpLCByZWdDaGFpbk9mZnNldCwgcmVnT2Zmc2V0LAotCQkJCQkgIHJlZzMyKTsKLQkJCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0VFUFJPTSwKLQkJCQkJICAiUERBREM6IENoYWluICVkIHwgUERBREMgJTNkICIKLQkJCQkJICAiVmFsdWUgJTNkIHwgUERBREMgJTNkIFZhbHVlICUzZCB8ICIKLQkJCQkJICAiUERBREMgJTNkIFZhbHVlICUzZCB8IFBEQURDICUzZCAiCi0JCQkJCSAgIlZhbHVlICUzZCB8XG4iLAotCQkJCQkgIGksIDQgKiBqLCBwZGFkY1ZhbHVlc1s0ICogal0sCi0JCQkJCSAgNCAqIGogKyAxLCBwZGFkY1ZhbHVlc1s0ICogaiArIDFdLAotCQkJCQkgIDQgKiBqICsgMiwgcGRhZGNWYWx1ZXNbNCAqIGogKyAyXSwKLQkJCQkJICA0ICogaiArIDMsCi0JCQkJCSAgcGRhZGNWYWx1ZXNbNCAqIGogKyAzXSk7CisJCQkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfRUVQUk9NLAorCQkJCQkiUERBREMgKCVkLCU0eCk6ICU0LjR4ICU4Ljh4XG4iLAorCQkJCQlpLCByZWdDaGFpbk9mZnNldCwgcmVnT2Zmc2V0LAorCQkJCQlyZWczMik7CisJCQkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfRUVQUk9NLAorCQkJCQkiUERBREM6IENoYWluICVkIHwgUERBREMgJTNkICIKKwkJCQkJIlZhbHVlICUzZCB8IFBEQURDICUzZCBWYWx1ZSAlM2QgfCAiCisJCQkJCSJQREFEQyAlM2QgVmFsdWUgJTNkIHwgUERBREMgJTNkICIKKwkJCQkJIlZhbHVlICUzZCB8XG4iLAorCQkJCQlpLCA0ICogaiwgcGRhZGNWYWx1ZXNbNCAqIGpdLAorCQkJCQk0ICogaiArIDEsIHBkYWRjVmFsdWVzWzQgKiBqICsgMV0sCisJCQkJCTQgKiBqICsgMiwgcGRhZGNWYWx1ZXNbNCAqIGogKyAyXSwKKwkJCQkJNCAqIGogKyAzLCBwZGFkY1ZhbHVlc1s0ICogaiArIDNdKTsKIAogCQkJCXJlZ09mZnNldCArPSA0OwogCQkJfQpAQCAtMTAwNCw5ICs4MzgsOSBAQAogCiAJc3RydWN0IGF0aF9yZWd1bGF0b3J5ICpyZWd1bGF0b3J5ID0gYXRoOWtfaHdfcmVndWxhdG9yeShhaCk7CiAJc3RydWN0IGFyNTQxNl9lZXByb21fZGVmICpwRWVwRGF0YSA9ICZhaC0+ZWVwcm9tLmRlZjsKLQl1MTYgdHdpY2VNYXhFZGdlUG93ZXIgPSBBUjU0MTZfTUFYX1JBVEVfUE9XRVI7CisJdTE2IHR3aWNlTWF4RWRnZVBvd2VyID0gTUFYX1JBVEVfUE9XRVI7CiAJc3RhdGljIGNvbnN0IHUxNiB0cFNjYWxlUmVkdWN0aW9uVGFibGVbNV0gPQotCQl7IDAsIDMsIDYsIDksIEFSNTQxNl9NQVhfUkFURV9QT1dFUiB9OworCQl7IDAsIDMsIDYsIDksIE1BWF9SQVRFX1BPV0VSIH07CiAKIAlpbnQgaTsKIAlpbnQxNl90IHR3aWNlTGFyZ2VzdEFudGVubmE7CkBAIC0xMDIyLDEzICs4NTYsMTYgQEAKIAkJMCwgezAsIDAsIDAsIDB9CiAJfTsKIAl1MTYgc2NhbGVkUG93ZXIgPSAwLCBtaW5DdGxQb3dlciwgbWF4UmVnQWxsb3dlZFBvd2VyOwotCXUxNiBjdGxNb2Rlc0ZvcjExYVtdID0KLQkJeyBDVExfMTFBLCBDVExfNUdIVDIwLCBDVExfMTFBX0VYVCwgQ1RMXzVHSFQ0MCB9OwotCXUxNiBjdGxNb2Rlc0ZvcjExZ1tdID0KLQkJeyBDVExfMTFCLCBDVExfMTFHLCBDVExfMkdIVDIwLCBDVExfMTFCX0VYVCwgQ1RMXzExR19FWFQsCi0JCSAgQ1RMXzJHSFQ0MAotCQl9OwotCXUxNiBudW1DdGxNb2RlcywgKnBDdGxNb2RlLCBjdGxNb2RlLCBmcmVxOworCXN0YXRpYyBjb25zdCB1MTYgY3RsTW9kZXNGb3IxMWFbXSA9IHsKKwkJQ1RMXzExQSwgQ1RMXzVHSFQyMCwgQ1RMXzExQV9FWFQsIENUTF81R0hUNDAKKwl9OworCXN0YXRpYyBjb25zdCB1MTYgY3RsTW9kZXNGb3IxMWdbXSA9IHsKKwkJQ1RMXzExQiwgQ1RMXzExRywgQ1RMXzJHSFQyMCwKKwkJQ1RMXzExQl9FWFQsIENUTF8xMUdfRVhULCBDVExfMkdIVDQwCisJfTsKKwl1MTYgbnVtQ3RsTW9kZXM7CisJY29uc3QgdTE2ICpwQ3RsTW9kZTsKKwl1MTYgY3RsTW9kZSwgZnJlcTsKIAlzdHJ1Y3QgY2hhbl9jZW50ZXJzIGNlbnRlcnM7CiAJaW50IHR4X2NoYWlubWFzazsKIAl1MTYgdHdpY2VNaW5FZGdlUG93ZXI7CkBAIC0xMTQ4LDcgKzk4NSw3IEBACiAKIAkJaWYgKGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tX3ZlcihhaCkgPT0gMTQgJiYKIAkJICAgIGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tX3JldihhaCkgPD0gMikKLQkJCXR3aWNlTWF4RWRnZVBvd2VyID0gQVI1NDE2X01BWF9SQVRFX1BPV0VSOworCQkJdHdpY2VNYXhFZGdlUG93ZXIgPSBNQVhfUkFURV9QT1dFUjsKIAogCQlmb3IgKGkgPSAwOyAoaSA8IEFSNTQxNl9OVU1fQ1RMUykgJiYgcEVlcERhdGEtPmN0bEluZGV4W2ldOyBpKyspIHsKIAkJCWlmICgoKChjZmdDdGwgJiB+Q1RMX01PREVfTSkgfApAQCAtMTI2Myw3ICsxMTAwLDcgQEAKIAkJCQkgICAgdTE2IGNmZ0N0bCwKIAkJCQkgICAgdTggdHdpY2VBbnRlbm5hUmVkdWN0aW9uLAogCQkJCSAgICB1OCB0d2ljZU1heFJlZ3VsYXRvcnlQb3dlciwKLQkJCQkgICAgdTggcG93ZXJMaW1pdCkKKwkJCQkgICAgdTggcG93ZXJMaW1pdCwgYm9vbCB0ZXN0KQogewogI2RlZmluZSBSVF9BUl9ERUxUQSh4KSAocmF0ZXNBcnJheVt4XSAtIGNja19vZmRtX2RlbHRhKQogCXN0cnVjdCBhdGhfcmVndWxhdG9yeSAqcmVndWxhdG9yeSA9IGF0aDlrX2h3X3JlZ3VsYXRvcnkoYWgpOwpAQCAtMTI5MCwxMiArMTEyNyw0NCBAQAogCiAJYXRoOWtfaHdfc2V0X2RlZl9wb3dlcl9jYWxfdGFibGUoYWgsIGNoYW4sICZ0eFBvd2VySW5kZXhPZmZzZXQpOwogCisJcmVndWxhdG9yeS0+bWF4X3Bvd2VyX2xldmVsID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyYXRlc0FycmF5KTsgaSsrKSB7CiAJCXJhdGVzQXJyYXlbaV0gPQkoaW50MTZfdCkodHhQb3dlckluZGV4T2Zmc2V0ICsgcmF0ZXNBcnJheVtpXSk7Ci0JCWlmIChyYXRlc0FycmF5W2ldID4gQVI1NDE2X01BWF9SQVRFX1BPV0VSKQotCQkJcmF0ZXNBcnJheVtpXSA9IEFSNTQxNl9NQVhfUkFURV9QT1dFUjsKKwkJaWYgKHJhdGVzQXJyYXlbaV0gPiBNQVhfUkFURV9QT1dFUikKKwkJCXJhdGVzQXJyYXlbaV0gPSBNQVhfUkFURV9QT1dFUjsKKwkJaWYgKHJhdGVzQXJyYXlbaV0gPiByZWd1bGF0b3J5LT5tYXhfcG93ZXJfbGV2ZWwpCisJCQlyZWd1bGF0b3J5LT5tYXhfcG93ZXJfbGV2ZWwgPSByYXRlc0FycmF5W2ldOwogCX0KIAorCWlmICghdGVzdCkgeworCQlpID0gcmF0ZTZtYjsKKworCQlpZiAoSVNfQ0hBTl9IVDQwKGNoYW4pKQorCQkJaSA9IHJhdGVIdDQwXzA7CisJCWVsc2UgaWYgKElTX0NIQU5fSFQyMChjaGFuKSkKKwkJCWkgPSByYXRlSHQyMF8wOworCisJCXJlZ3VsYXRvcnktPm1heF9wb3dlcl9sZXZlbCA9IHJhdGVzQXJyYXlbaV07CisJfQorCisJc3dpdGNoKGFyNTQxNl9nZXRfbnR4Y2hhaW5zKGFoLT50eGNoYWlubWFzaykpIHsKKwljYXNlIDE6CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcmVndWxhdG9yeS0+bWF4X3Bvd2VyX2xldmVsICs9IElOQ1JFQVNFX01BWFBPV19CWV9UV09fQ0hBSU47CisJCWJyZWFrOworCWNhc2UgMzoKKwkJcmVndWxhdG9yeS0+bWF4X3Bvd2VyX2xldmVsICs9IElOQ1JFQVNFX01BWFBPV19CWV9USFJFRV9DSEFJTjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYXRoX2RiZyhhdGg5a19od19jb21tb24oYWgpLCBBVEhfREJHX0VFUFJPTSwKKwkJCSJJbnZhbGlkIGNoYWlubWFzayBjb25maWd1cmF0aW9uXG4iKTsKKwkJYnJlYWs7CisJfQorCisJaWYgKHRlc3QpCisJCXJldHVybjsKKwogCWlmIChBUl9TUkVWXzkyODBfMjBfT1JfTEFURVIoYWgpKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBBcjU0MTZSYXRlU2l6ZTsgaSsrKSB7CiAJCQlpbnQ4X3QgcHdyX3RhYmxlX29mZnNldDsKQEAgLTEzOTIsNjIgKzEyNjEsNiBAQAogCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1NVQiwKIAkJICBBVEg5S19QT1dfU00ocE1vZGFsLT5wd3JEZWNyZWFzZUZvcjNDaGFpbiwgNikKIAkJICB8IEFUSDlLX1BPV19TTShwTW9kYWwtPnB3ckRlY3JlYXNlRm9yMkNoYWluLCAwKSk7Ci0KLQlpID0gcmF0ZTZtYjsKLQotCWlmIChJU19DSEFOX0hUNDAoY2hhbikpCi0JCWkgPSByYXRlSHQ0MF8wOwotCWVsc2UgaWYgKElTX0NIQU5fSFQyMChjaGFuKSkKLQkJaSA9IHJhdGVIdDIwXzA7Ci0KLQlpZiAoQVJfU1JFVl85MjgwXzIwX09SX0xBVEVSKGFoKSkKLQkJcmVndWxhdG9yeS0+bWF4X3Bvd2VyX2xldmVsID0KLQkJCXJhdGVzQXJyYXlbaV0gKyBBUjU0MTZfUFdSX1RBQkxFX09GRlNFVF9EQiAqIDI7Ci0JZWxzZQotCQlyZWd1bGF0b3J5LT5tYXhfcG93ZXJfbGV2ZWwgPSByYXRlc0FycmF5W2ldOwotCi0Jc3dpdGNoKGFyNTQxNl9nZXRfbnR4Y2hhaW5zKGFoLT50eGNoYWlubWFzaykpIHsKLQljYXNlIDE6Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJcmVndWxhdG9yeS0+bWF4X3Bvd2VyX2xldmVsICs9IElOQ1JFQVNFX01BWFBPV19CWV9UV09fQ0hBSU47Ci0JCWJyZWFrOwotCWNhc2UgMzoKLQkJcmVndWxhdG9yeS0+bWF4X3Bvd2VyX2xldmVsICs9IElOQ1JFQVNFX01BWFBPV19CWV9USFJFRV9DSEFJTjsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYXRoX3ByaW50KGF0aDlrX2h3X2NvbW1vbihhaCksIEFUSF9EQkdfRUVQUk9NLAotCQkJICAiSW52YWxpZCBjaGFpbm1hc2sgY29uZmlndXJhdGlvblxuIik7Ci0JCWJyZWFrOwotCX0KLX0KLQotc3RhdGljIHU4IGF0aDlrX2h3X2RlZl9nZXRfbnVtX2FudF9jb25maWcoc3RydWN0IGF0aF9odyAqYWgsCi0JCQkJCSAgZW51bSBhdGg5a19oYWxfZnJlcV9iYW5kIGZyZXFfYmFuZCkKLXsKLQlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYgKmVlcCA9ICZhaC0+ZWVwcm9tLmRlZjsKLQlzdHJ1Y3QgbW9kYWxfZWVwX2hlYWRlciAqcE1vZGFsID0KLQkJJihlZXAtPm1vZGFsSGVhZGVyW2ZyZXFfYmFuZF0pOwotCXN0cnVjdCBiYXNlX2VlcF9oZWFkZXIgKnBCYXNlID0gJmVlcC0+YmFzZUVlcEhlYWRlcjsKLQl1OCBudW1fYW50X2NvbmZpZzsKLQotCW51bV9hbnRfY29uZmlnID0gMTsKLQotCWlmIChwQmFzZS0+dmVyc2lvbiA+PSAweDBFMEQgJiYKLQkgICAgKHBNb2RhbC0+bG5hX2N0bCAmIExOQV9DVExfVVNFX0FOVDEpKQotCQludW1fYW50X2NvbmZpZyArPSAxOwotCi0JcmV0dXJuIG51bV9hbnRfY29uZmlnOwotfQotCi1zdGF0aWMgdTMyIGF0aDlrX2h3X2RlZl9nZXRfZWVwcm9tX2FudGVubmFfY2ZnKHN0cnVjdCBhdGhfaHcgKmFoLAotCQkJCQkgICAgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCi17Ci0Jc3RydWN0IGFyNTQxNl9lZXByb21fZGVmICplZXAgPSAmYWgtPmVlcHJvbS5kZWY7Ci0Jc3RydWN0IG1vZGFsX2VlcF9oZWFkZXIgKnBNb2RhbCA9Ci0JCSYoZWVwLT5tb2RhbEhlYWRlcltJU19DSEFOXzJHSFooY2hhbildKTsKLQotCXJldHVybiBwTW9kYWwtPmFudEN0cmxDb21tb247CiB9CiAKIHN0YXRpYyB1MTYgYXRoOWtfaHdfZGVmX2dldF9zcHVyX2NoYW5uZWwoc3RydWN0IGF0aF9odyAqYWgsIHUxNiBpLCBib29sIGlzMkdIeikKQEAgLTE0NTgsMTcgKzEyNzEsMTcgQEAKIAogCXUxNiBzcHVyX3ZhbCA9IEFSX05PX1NQVVI7CiAKLQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0FOSSwKLQkJICAiR2V0dGluZyBzcHVyIGlkeCAlZCBpczJHaHouICVkIHZhbCAleFxuIiwKLQkJICBpLCBpczJHSHosIGFoLT5jb25maWcuc3B1cmNoYW5zW2ldW2lzMkdIel0pOworCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0FOSSwKKwkJIkdldHRpbmcgc3B1ciBpZHg6JWQgaXMyR2h6OiVkIHZhbDoleFxuIiwKKwkJaSwgaXMyR0h6LCBhaC0+Y29uZmlnLnNwdXJjaGFuc1tpXVtpczJHSHpdKTsKIAogCXN3aXRjaCAoYWgtPmNvbmZpZy5zcHVybW9kZSkgewogCWNhc2UgU1BVUl9ESVNBQkxFOgogCQlicmVhazsKIAljYXNlIFNQVVJfRU5BQkxFX0lPQ1RMOgogCQlzcHVyX3ZhbCA9IGFoLT5jb25maWcuc3B1cmNoYW5zW2ldW2lzMkdIel07Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQU5JLAotCQkJICAiR2V0dGluZyBzcHVyIHZhbCBmcm9tIG5ldyBsb2MuICVkXG4iLCBzcHVyX3ZhbCk7CisJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0FOSSwKKwkJCSJHZXR0aW5nIHNwdXIgdmFsIGZyb20gbmV3IGxvYy4gJWRcbiIsIHNwdXJfdmFsKTsKIAkJYnJlYWs7CiAJY2FzZSBTUFVSX0VOQUJMRV9FRVBST006CiAJCXNwdXJfdmFsID0gRUVQX0RFRl9TUFVSQ0hBTjsKQEAgLTE0ODYsOCArMTI5OSw2IEBACiAJLmZpbGxfZWVwcm9tCQk9IGF0aDlrX2h3X2RlZl9maWxsX2VlcHJvbSwKIAkuZ2V0X2VlcHJvbV92ZXIJCT0gYXRoOWtfaHdfZGVmX2dldF9lZXByb21fdmVyLAogCS5nZXRfZWVwcm9tX3JldgkJPSBhdGg5a19od19kZWZfZ2V0X2VlcHJvbV9yZXYsCi0JLmdldF9udW1fYW50X2NvbmZpZwk9IGF0aDlrX2h3X2RlZl9nZXRfbnVtX2FudF9jb25maWcsCi0JLmdldF9lZXByb21fYW50ZW5uYV9jZmcJPSBhdGg5a19od19kZWZfZ2V0X2VlcHJvbV9hbnRlbm5hX2NmZywKIAkuc2V0X2JvYXJkX3ZhbHVlcwk9IGF0aDlrX2h3X2RlZl9zZXRfYm9hcmRfdmFsdWVzLAogCS5zZXRfYWRkYWMJCT0gYXRoOWtfaHdfZGVmX3NldF9hZGRhYywKIAkuc2V0X3R4cG93ZXIJCT0gYXRoOWtfaHdfZGVmX3NldF90eHBvd2VyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2dwaW8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9ncGlvLmMKaW5kZXggNGE5YTY4Yi4uMTMzNzY0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2dwaW8uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZ3Bpby5jCkBAIC0xMDMsOCArMTAzLDggQEAKIAogCXJldCA9IGxlZF9jbGFzc2Rldl9yZWdpc3Rlcih3aXBoeV9kZXYoc2MtPmh3LT53aXBoeSksICZsZWQtPmxlZF9jZGV2KTsKIAlpZiAocmV0KQotCQlhdGhfcHJpbnQoYXRoOWtfaHdfY29tbW9uKHNjLT5zY19haCksIEFUSF9EQkdfRkFUQUwsCi0JCQkgICJGYWlsZWQgdG8gcmVnaXN0ZXIgbGVkOiVzIiwgbGVkLT5uYW1lKTsKKwkJYXRoX2VycihhdGg5a19od19jb21tb24oc2MtPnNjX2FoKSwKKwkJCSJGYWlsZWQgdG8gcmVnaXN0ZXIgbGVkOiVzIiwgbGVkLT5uYW1lKTsKIAllbHNlCiAJCWxlZC0+cmVnaXN0ZXJlZCA9IDE7CiAJcmV0dXJuIHJldDsKQEAgLTIzNiwxMyArMjM2LDEzIEBACiAJCXNjLT5zY19mbGFncyAmPSB+KFNDX09QX0JUX1BSSU9SSVRZX0RFVEVDVEVEIHwgU0NfT1BfQlRfU0NBTik7CiAJCS8qIERldGVjdCBpZiBjb2xvY2F0ZWQgYnQgc3RhcnRlZCBzY2FubmluZyAqLwogCQlpZiAoYnRjb2V4LT5idF9wcmlvcml0eV9jbnQgPj0gQVRIX0JUX0NOVF9TQ0FOX1RIUkVTSE9MRCkgewotCQkJYXRoX3ByaW50KGF0aDlrX2h3X2NvbW1vbihzYy0+c2NfYWgpLCBBVEhfREJHX0JUQ09FWCwKLQkJCQkgICJCVCBzY2FuIGRldGVjdGVkIik7CisJCQlhdGhfZGJnKGF0aDlrX2h3X2NvbW1vbihzYy0+c2NfYWgpLCBBVEhfREJHX0JUQ09FWCwKKwkJCQkiQlQgc2NhbiBkZXRlY3RlZFxuIik7CiAJCQlzYy0+c2NfZmxhZ3MgfD0gKFNDX09QX0JUX1NDQU4gfAogCQkJCQkgU0NfT1BfQlRfUFJJT1JJVFlfREVURUNURUQpOwogCQl9IGVsc2UgaWYgKGJ0Y29leC0+YnRfcHJpb3JpdHlfY250ID49IEFUSF9CVF9DTlRfVEhSRVNIT0xEKSB7Ci0JCQlhdGhfcHJpbnQoYXRoOWtfaHdfY29tbW9uKHNjLT5zY19haCksIEFUSF9EQkdfQlRDT0VYLAotCQkJCSAgIkJUIHByaW9yaXR5IHRyYWZmaWMgZGV0ZWN0ZWQiKTsKKwkJCWF0aF9kYmcoYXRoOWtfaHdfY29tbW9uKHNjLT5zY19haCksIEFUSF9EQkdfQlRDT0VYLAorCQkJCSJCVCBwcmlvcml0eSB0cmFmZmljIGRldGVjdGVkXG4iKTsKIAkJCXNjLT5zY19mbGFncyB8PSBTQ19PUF9CVF9QUklPUklUWV9ERVRFQ1RFRDsKIAkJfQogCkBAIC0yNTksNyArMjU5LDcgQEAKIAlhdGg5a19od19nZW5fdGltZXJfc3RhcnQoYWgsIHRpbWVyLCB0aW1lcl9uZXh0LCB0aW1lcl9wZXJpb2QpOwogCiAJaWYgKChhaC0+aW1hc2sgJiBBVEg5S19JTlRfR0VOVElNRVIpID09IDApIHsKLQkJYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoYWgsIDApOworCQlhdGg5a19od19kaXNhYmxlX2ludGVycnVwdHMoYWgpOwogCQlhaC0+aW1hc2sgfD0gQVRIOUtfSU5UX0dFTlRJTUVSOwogCQlhdGg5a19od19zZXRfaW50ZXJydXB0cyhhaCwgYWgtPmltYXNrKTsKIAl9CkBAIC0yNzMsNyArMjczLDcgQEAKIAogCS8qIGlmIG5vIHRpbWVyIGlzIGVuYWJsZWQsIHR1cm4gb2ZmIGludGVycnVwdCBtYXNrICovCiAJaWYgKHRpbWVyX3RhYmxlLT50aW1lcl9tYXNrLnZhbCA9PSAwKSB7Ci0JCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKGFoLCAwKTsKKwkJYXRoOWtfaHdfZGlzYWJsZV9pbnRlcnJ1cHRzKGFoKTsKIAkJYWgtPmltYXNrICY9IH5BVEg5S19JTlRfR0VOVElNRVI7CiAJCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKGFoLCBhaC0+aW1hc2spOwogCX0KQEAgLTMxMCwxMCArMzEwLDggQEAKIAogCQl0aW1lcl9wZXJpb2QgPSBpc19idHNjYW4gPyBidGNvZXgtPmJ0c2Nhbl9ub19zdG9tcCA6CiAJCQkJCSAgIGJ0Y29leC0+YnRjb2V4X25vX3N0b21wOwotCQlhdGg5a19nZW5fdGltZXJfc3RhcnQoYWgsCi0JCQkJICAgICAgYnRjb2V4LT5ub19zdG9tcF90aW1lciwKLQkJCQkgICAgICAoYXRoOWtfaHdfZ2V0dHNmMzIoYWgpICsKLQkJCQkgICAgICAgdGltZXJfcGVyaW9kKSwgdGltZXJfcGVyaW9kICogMTApOworCQlhdGg5a19nZW5fdGltZXJfc3RhcnQoYWgsIGJ0Y29leC0+bm9fc3RvbXBfdGltZXIsIDAsCisJCQkJICAgICAgdGltZXJfcGVyaW9kICogMTApOwogCQlidGNvZXgtPmh3X3RpbWVyX2VuYWJsZWQgPSB0cnVlOwogCX0KIApAQCAtMzMzLDggKzMzMSw4IEBACiAJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihhaCk7CiAJYm9vbCBpc19idHNjYW4gPSBzYy0+c2NfZmxhZ3MgJiBTQ19PUF9CVF9TQ0FOOwogCi0JYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19CVENPRVgsCi0JCSAgIm5vIHN0b21wIHRpbWVyIHJ1bm5pbmdcbiIpOworCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0JUQ09FWCwKKwkJIm5vIHN0b21wIHRpbWVyIHJ1bm5pbmdcbiIpOwogCiAJc3Bpbl9sb2NrX2JoKCZidGNvZXgtPmJ0Y29leF9sb2NrKTsKIApAQCAtMzgwLDggKzM3OCw4IEBACiAJc3RydWN0IGF0aF9idGNvZXggKmJ0Y29leCA9ICZzYy0+YnRjb2V4OwogCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOwogCi0JYXRoX3ByaW50KGF0aDlrX2h3X2NvbW1vbihhaCksIEFUSF9EQkdfQlRDT0VYLAotCQkgICJTdGFydGluZyBidGNvZXggdGltZXJzIik7CisJYXRoX2RiZyhhdGg5a19od19jb21tb24oYWgpLCBBVEhfREJHX0JUQ09FWCwKKwkJIlN0YXJ0aW5nIGJ0Y29leCB0aW1lcnNcbiIpOwogCiAJLyogbWFrZSBzdXJlIGR1dHkgY3ljbGUgdGltZXIgaXMgYWxzbyBzdG9wcGVkIHdoZW4gcmVzdW1pbmcgKi8KIAlpZiAoYnRjb2V4LT5od190aW1lcl9lbmFibGVkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2hpZl91c2IuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmMKaW5kZXggMGRlM2MzZC4uNWFiMzA4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2hpZl91c2IuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5jCkBAIC0yOCwxMCArMjgsNyBAQAogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGF0aDlrX2hpZl91c2JfaWRzW10gPSB7CiAJeyBVU0JfREVWSUNFKDB4MGNmMywgMHg5MjcxKSB9LCAvKiBBdGhlcm9zICovCiAJeyBVU0JfREVWSUNFKDB4MGNmMywgMHgxMDA2KSB9LCAvKiBBdGhlcm9zICovCi0JeyBVU0JfREVWSUNFKDB4MGNmMywgMHg3MDEwKSB9LCAvKiBBdGhlcm9zICovCi0JeyBVU0JfREVWSUNFKDB4MGNmMywgMHg3MDE1KSB9LCAvKiBBdGhlcm9zICovCiAJeyBVU0JfREVWSUNFKDB4MDg0NiwgMHg5MDMwKSB9LCAvKiBOZXRnZWFyIE4xNTAgKi8KLQl7IFVTQl9ERVZJQ0UoMHgwODQ2LCAweDkwMTgpIH0sIC8qIE5ldGdlYXIgV05EQTMyMDAgKi8KIAl7IFVTQl9ERVZJQ0UoMHgwN0QxLCAweDNBMTApIH0sIC8qIERsaW5rIFdpcmVsZXNzIDE1MCAqLwogCXsgVVNCX0RFVklDRSgweDEzRDMsIDB4MzMyNykgfSwgLyogQXp1cmV3YXZlICovCiAJeyBVU0JfREVWSUNFKDB4MTNEMywgMHgzMzI4KSB9LCAvKiBBenVyZXdhdmUgKi8KQEAgLTQwLDkgKzM3LDIxIEBACiAJeyBVU0JfREVWSUNFKDB4MTNEMywgMHgzMzQ5KSB9LCAvKiBBenVyZXdhdmUgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxM0QzLCAweDMzNTApIH0sIC8qIEF6dXJld2F2ZSAqLwogCXsgVVNCX0RFVklDRSgweDA0Q0EsIDB4NDYwNSkgfSwgLyogTGl0ZW9uICovCi0JeyBVU0JfREVWSUNFKDB4MDgzQSwgMHhBNzA0KSB9LCAvKiBTTUMgTmV0d29ya3MgKi8KIAl7IFVTQl9ERVZJQ0UoMHgwNDBELCAweDM4MDEpIH0sIC8qIFZJQSAqLwotCXsgVVNCX0RFVklDRSgweDE2NjgsIDB4MTIwMCkgfSwgLyogVmVyaXpvbiAqLworCXsgVVNCX0RFVklDRSgweDBjZjMsIDB4YjAwMykgfSwgLyogVWJpcXVpdGkgV2lmaVN0YXRpb24gRXh0ICovCisKKwl7IFVTQl9ERVZJQ0UoMHgwY2YzLCAweDcwMTUpLAorCSAgLmRyaXZlcl9pbmZvID0gQVI5Mjg3X1VTQiB9LCAgLyogQXRoZXJvcyAqLworCXsgVVNCX0RFVklDRSgweDE2NjgsIDB4MTIwMCksCisJICAuZHJpdmVyX2luZm8gPSBBUjkyODdfVVNCIH0sICAvKiBWZXJpem9uICovCisKKwl7IFVTQl9ERVZJQ0UoMHgwY2YzLCAweDcwMTApLAorCSAgLmRyaXZlcl9pbmZvID0gQVI5MjgwX1VTQiB9LCAgLyogQXRoZXJvcyAqLworCXsgVVNCX0RFVklDRSgweDA4NDYsIDB4OTAxOCksCisJICAuZHJpdmVyX2luZm8gPSBBUjkyODBfVVNCIH0sICAvKiBOZXRnZWFyIFdOREEzMjAwICovCisJeyBVU0JfREVWSUNFKDB4MDgzQSwgMHhBNzA0KSwKKwkgIC5kcml2ZXJfaW5mbyA9IEFSOTI4MF9VU0IgfSwgIC8qIFNNQyBOZXR3b3JrcyAqLworCiAJeyB9LAogfTsKIApAQCAtMTQ0LDE2ICsxNTMsMzYgQEAKIAljYXNlIC1FTk9ERVY6CiAJY2FzZSAtRVNIVVRET1dOOgogCQkvKgotCQkgKiBUaGUgVVJCIGhhcyBiZWVuIGtpbGxlZCwgZnJlZSB0aGUgU0tCcwotCQkgKiBhbmQgcmV0dXJuLgorCQkgKiBUaGUgVVJCIGhhcyBiZWVuIGtpbGxlZCwgZnJlZSB0aGUgU0tCcy4KIAkJICovCiAJCWF0aDlrX3NrYl9xdWV1ZV9wdXJnZShoaWZfZGV2LCAmdHhfYnVmLT5za2JfcXVldWUpOwotCQlyZXR1cm47CisKKwkJLyoKKwkJICogSWYgdGhlIFVSQnMgYXJlIGJlaW5nIGZsdXNoZWQsIG5vIG5lZWQgdG8gYWRkIHRoaXMKKwkJICogVVJCIHRvIHRoZSBmcmVlIGxpc3QuCisJCSAqLworCQlzcGluX2xvY2soJmhpZl9kZXYtPnR4LnR4X2xvY2spOworCQlpZiAoaGlmX2Rldi0+dHguZmxhZ3MgJiBISUZfVVNCX1RYX0ZMVVNIKSB7CisJCQlzcGluX3VubG9jaygmaGlmX2Rldi0+dHgudHhfbG9jayk7CisJCQlyZXR1cm47CisJCX0KKwkJc3Bpbl91bmxvY2soJmhpZl9kZXYtPnR4LnR4X2xvY2spOworCisJCS8qCisJCSAqIEluIHRoZSBzdG9wKCkgY2FzZSwgdGhpcyBVUkIgaGFzIHRvIGJlIGFkZGVkIHRvCisJCSAqIHRoZSBmcmVlIGxpc3QuCisJCSAqLworCQlnb3RvIGFkZF9mcmVlOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KIAotCS8qIENoZWNrIGlmIFRYIGhhcyBiZWVuIHN0b3BwZWQgKi8KKwkvKgorCSAqIENoZWNrIGlmIFRYIGhhcyBiZWVuIHN0b3BwZWQsIHRoaXMgaXMgbmVlZGVkIGJlY2F1c2UKKwkgKiB0aGlzIENCIGNvdWxkIGhhdmUgYmVlbiBpbnZva2VkIGp1c3QgYWZ0ZXIgdGhlIFRYIGxvY2sKKwkgKiB3YXMgcmVsZWFzZWQgaW4gaGlmX3N0b3AoKSBhbmQga2lsbF91cmIoKSBoYXNuJ3QgYmVlbgorCSAqIGNhbGxlZCB5ZXQuCisJICovCiAJc3Bpbl9sb2NrKCZoaWZfZGV2LT50eC50eF9sb2NrKTsKIAlpZiAoaGlmX2Rldi0+dHguZmxhZ3MgJiBISUZfVVNCX1RYX1NUT1ApIHsKIAkJc3Bpbl91bmxvY2soJmhpZl9kZXYtPnR4LnR4X2xvY2spOwpAQCAtMzA1LDYgKzMzNCw3IEBACiBzdGF0aWMgdm9pZCBoaWZfdXNiX3N0b3Aodm9pZCAqaGlmX2hhbmRsZSwgdTggcGlwZV9pZCkKIHsKIAlzdHJ1Y3QgaGlmX2RldmljZV91c2IgKmhpZl9kZXYgPSAoc3RydWN0IGhpZl9kZXZpY2VfdXNiICopaGlmX2hhbmRsZTsKKwlzdHJ1Y3QgdHhfYnVmICp0eF9idWYgPSBOVUxMLCAqdHhfYnVmX3RtcCA9IE5VTEw7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZoaWZfZGV2LT50eC50eF9sb2NrLCBmbGFncyk7CkBAIC0zMTIsNiArMzQyLDEyIEBACiAJaGlmX2Rldi0+dHgudHhfc2tiX2NudCA9IDA7CiAJaGlmX2Rldi0+dHguZmxhZ3MgfD0gSElGX1VTQl9UWF9TVE9QOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhpZl9kZXYtPnR4LnR4X2xvY2ssIGZsYWdzKTsKKworCS8qIFRoZSBwZW5kaW5nIFVSQnMgaGF2ZSB0byBiZSBjYW5jZWxlZC4gKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodHhfYnVmLCB0eF9idWZfdG1wLAorCQkJCSAmaGlmX2Rldi0+dHgudHhfcGVuZGluZywgbGlzdCkgeworCQl1c2Jfa2lsbF91cmIodHhfYnVmLT51cmIpOworCX0KIH0KIAogc3RhdGljIGludCBoaWZfdXNiX3NlbmQodm9pZCAqaGlmX2hhbmRsZSwgdTggcGlwZV9pZCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKQEAgLTM1Myw5ICszODksOSBAQAogCQkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBza19idWZmICpuc2tiLCAqc2tiX3Bvb2xbTUFYX1BLVF9OVU1fSU5fVFJBTlNGRVJdOwotCWludCBpbmRleCA9IDAsIGkgPSAwLCBjaGtfaWR4LCBsZW4gPSBza2ItPmxlbjsKLQlpbnQgcnhfcmVtYWluX2xlbiA9IDAsIHJ4X3BrdF9sZW4gPSAwOwotCXUxNiBwa3RfbGVuLCBwa3RfdGFnLCBwb29sX2luZGV4ID0gMDsKKwlpbnQgaW5kZXggPSAwLCBpID0gMCwgbGVuID0gc2tiLT5sZW47CisJaW50IHJ4X3JlbWFpbl9sZW4sIHJ4X3BrdF9sZW47CisJdTE2IHBvb2xfaW5kZXggPSAwOwogCXU4ICpwdHI7CiAKIAlzcGluX2xvY2soJmhpZl9kZXYtPnJ4X2xvY2spOwpAQCAtMzg5LDY1ICs0MjUsNjUgQEAKIAlzcGluX3VubG9jaygmaGlmX2Rldi0+cnhfbG9jayk7CiAKIAl3aGlsZSAoaW5kZXggPCBsZW4pIHsKKwkJdTE2IHBrdF9sZW47CisJCXUxNiBwa3RfdGFnOworCQl1MTYgcGFkX2xlbjsKKwkJaW50IGNoa19pZHg7CisKIAkJcHRyID0gKHU4ICopIHNrYi0+ZGF0YTsKIAogCQlwa3RfbGVuID0gcHRyW2luZGV4XSArIChwdHJbaW5kZXgrMV0gPDwgOCk7CiAJCXBrdF90YWcgPSBwdHJbaW5kZXgrMl0gKyAocHRyW2luZGV4KzNdIDw8IDgpOwogCi0JCWlmIChwa3RfdGFnID09IEFUSF9VU0JfUlhfU1RSRUFNX01PREVfVEFHKSB7Ci0JCQl1MTYgcGFkX2xlbjsKLQotCQkJcGFkX2xlbiA9IDQgLSAocGt0X2xlbiAmIDB4Myk7Ci0JCQlpZiAocGFkX2xlbiA9PSA0KQotCQkJCXBhZF9sZW4gPSAwOwotCi0JCQljaGtfaWR4ID0gaW5kZXg7Ci0JCQlpbmRleCA9IGluZGV4ICsgNCArIHBrdF9sZW4gKyBwYWRfbGVuOwotCi0JCQlpZiAoaW5kZXggPiBNQVhfUlhfQlVGX1NJWkUpIHsKLQkJCQlzcGluX2xvY2soJmhpZl9kZXYtPnJ4X2xvY2spOwotCQkJCWhpZl9kZXYtPnJ4X3JlbWFpbl9sZW4gPSBpbmRleCAtIE1BWF9SWF9CVUZfU0laRTsKLQkJCQloaWZfZGV2LT5yeF90cmFuc2Zlcl9sZW4gPQotCQkJCQlNQVhfUlhfQlVGX1NJWkUgLSBjaGtfaWR4IC0gNDsKLQkJCQloaWZfZGV2LT5yeF9wYWRfbGVuID0gcGFkX2xlbjsKLQotCQkJCW5za2IgPSBfX2Rldl9hbGxvY19za2IocGt0X2xlbiArIDMyLAotCQkJCQkJICAgICAgIEdGUF9BVE9NSUMpOwotCQkJCWlmICghbnNrYikgewotCQkJCQlkZXZfZXJyKCZoaWZfZGV2LT51ZGV2LT5kZXYsCi0JCQkJCSJhdGg5a19odGM6IFJYIG1lbW9yeSBhbGxvY2F0aW9uIgotCQkJCQkiIGVycm9yXG4iKTsKLQkJCQkJc3Bpbl91bmxvY2soJmhpZl9kZXYtPnJ4X2xvY2spOwotCQkJCQlnb3RvIGVycjsKLQkJCQl9Ci0JCQkJc2tiX3Jlc2VydmUobnNrYiwgMzIpOwotCQkJCVJYX1NUQVRfSU5DKHNrYl9hbGxvY2F0ZWQpOwotCi0JCQkJbWVtY3B5KG5za2ItPmRhdGEsICYoc2tiLT5kYXRhW2Noa19pZHgrNF0pLAotCQkJCSAgICAgICBoaWZfZGV2LT5yeF90cmFuc2Zlcl9sZW4pOwotCi0JCQkJLyogUmVjb3JkIHRoZSBidWZmZXIgcG9pbnRlciAqLwotCQkJCWhpZl9kZXYtPnJlbWFpbl9za2IgPSBuc2tiOwotCQkJCXNwaW5fdW5sb2NrKCZoaWZfZGV2LT5yeF9sb2NrKTsKLQkJCX0gZWxzZSB7Ci0JCQkJbnNrYiA9IF9fZGV2X2FsbG9jX3NrYihwa3RfbGVuICsgMzIsIEdGUF9BVE9NSUMpOwotCQkJCWlmICghbnNrYikgewotCQkJCQlkZXZfZXJyKCZoaWZfZGV2LT51ZGV2LT5kZXYsCi0JCQkJCSJhdGg5a19odGM6IFJYIG1lbW9yeSBhbGxvY2F0aW9uIgotCQkJCQkiIGVycm9yXG4iKTsKLQkJCQkJZ290byBlcnI7Ci0JCQkJfQotCQkJCXNrYl9yZXNlcnZlKG5za2IsIDMyKTsKLQkJCQlSWF9TVEFUX0lOQyhza2JfYWxsb2NhdGVkKTsKLQotCQkJCW1lbWNweShuc2tiLT5kYXRhLCAmKHNrYi0+ZGF0YVtjaGtfaWR4KzRdKSwgcGt0X2xlbik7Ci0JCQkJc2tiX3B1dChuc2tiLCBwa3RfbGVuKTsKLQkJCQlza2JfcG9vbFtwb29sX2luZGV4KytdID0gbnNrYjsKLQkJCX0KLQkJfSBlbHNlIHsKKwkJaWYgKHBrdF90YWcgIT0gQVRIX1VTQl9SWF9TVFJFQU1fTU9ERV9UQUcpIHsKIAkJCVJYX1NUQVRfSU5DKHNrYl9kcm9wcGVkKTsKIAkJCXJldHVybjsKIAkJfQorCisJCXBhZF9sZW4gPSA0IC0gKHBrdF9sZW4gJiAweDMpOworCQlpZiAocGFkX2xlbiA9PSA0KQorCQkJcGFkX2xlbiA9IDA7CisKKwkJY2hrX2lkeCA9IGluZGV4OworCQlpbmRleCA9IGluZGV4ICsgNCArIHBrdF9sZW4gKyBwYWRfbGVuOworCisJCWlmIChpbmRleCA+IE1BWF9SWF9CVUZfU0laRSkgeworCQkJc3Bpbl9sb2NrKCZoaWZfZGV2LT5yeF9sb2NrKTsKKwkJCWhpZl9kZXYtPnJ4X3JlbWFpbl9sZW4gPSBpbmRleCAtIE1BWF9SWF9CVUZfU0laRTsKKwkJCWhpZl9kZXYtPnJ4X3RyYW5zZmVyX2xlbiA9CisJCQkJTUFYX1JYX0JVRl9TSVpFIC0gY2hrX2lkeCAtIDQ7CisJCQloaWZfZGV2LT5yeF9wYWRfbGVuID0gcGFkX2xlbjsKKworCQkJbnNrYiA9IF9fZGV2X2FsbG9jX3NrYihwa3RfbGVuICsgMzIsIEdGUF9BVE9NSUMpOworCQkJaWYgKCFuc2tiKSB7CisJCQkJZGV2X2VycigmaGlmX2Rldi0+dWRldi0+ZGV2LAorCQkJCQkiYXRoOWtfaHRjOiBSWCBtZW1vcnkgYWxsb2NhdGlvbiBlcnJvclxuIik7CisJCQkJc3Bpbl91bmxvY2soJmhpZl9kZXYtPnJ4X2xvY2spOworCQkJCWdvdG8gZXJyOworCQkJfQorCQkJc2tiX3Jlc2VydmUobnNrYiwgMzIpOworCQkJUlhfU1RBVF9JTkMoc2tiX2FsbG9jYXRlZCk7CisKKwkJCW1lbWNweShuc2tiLT5kYXRhLCAmKHNrYi0+ZGF0YVtjaGtfaWR4KzRdKSwKKwkJCSAgICAgICBoaWZfZGV2LT5yeF90cmFuc2Zlcl9sZW4pOworCisJCQkvKiBSZWNvcmQgdGhlIGJ1ZmZlciBwb2ludGVyICovCisJCQloaWZfZGV2LT5yZW1haW5fc2tiID0gbnNrYjsKKwkJCXNwaW5fdW5sb2NrKCZoaWZfZGV2LT5yeF9sb2NrKTsKKwkJfSBlbHNlIHsKKwkJCW5za2IgPSBfX2Rldl9hbGxvY19za2IocGt0X2xlbiArIDMyLCBHRlBfQVRPTUlDKTsKKwkJCWlmICghbnNrYikgeworCQkJCWRldl9lcnIoJmhpZl9kZXYtPnVkZXYtPmRldiwKKwkJCQkJImF0aDlrX2h0YzogUlggbWVtb3J5IGFsbG9jYXRpb24gZXJyb3JcbiIpOworCQkJCWdvdG8gZXJyOworCQkJfQorCQkJc2tiX3Jlc2VydmUobnNrYiwgMzIpOworCQkJUlhfU1RBVF9JTkMoc2tiX2FsbG9jYXRlZCk7CisKKwkJCW1lbWNweShuc2tiLT5kYXRhLCAmKHNrYi0+ZGF0YVtjaGtfaWR4KzRdKSwgcGt0X2xlbik7CisJCQlza2JfcHV0KG5za2IsIHBrdF9sZW4pOworCQkJc2tiX3Bvb2xbcG9vbF9pbmRleCsrXSA9IG5za2I7CisJCX0KIAl9CiAKIGVycjoKQEAgLTQ2MSw3ICs0OTcsNyBAQAogc3RhdGljIHZvaWQgYXRoOWtfaGlmX3VzYl9yeF9jYihzdHJ1Y3QgdXJiICp1cmIpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IChzdHJ1Y3Qgc2tfYnVmZiAqKSB1cmItPmNvbnRleHQ7Ci0Jc3RydWN0IGhpZl9kZXZpY2VfdXNiICpoaWZfZGV2ID0gKHN0cnVjdCBoaWZfZGV2aWNlX3VzYiAqKQorCXN0cnVjdCBoaWZfZGV2aWNlX3VzYiAqaGlmX2RldiA9CiAJCXVzYl9nZXRfaW50ZmRhdGEodXNiX2lmbnVtX3RvX2lmKHVyYi0+ZGV2LCAwKSk7CiAJaW50IHJldDsKIApAQCAtNTA4LDcgKzU0NCw3IEBACiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IChzdHJ1Y3Qgc2tfYnVmZiAqKSB1cmItPmNvbnRleHQ7CiAJc3RydWN0IHNrX2J1ZmYgKm5za2I7Ci0Jc3RydWN0IGhpZl9kZXZpY2VfdXNiICpoaWZfZGV2ID0gKHN0cnVjdCBoaWZfZGV2aWNlX3VzYiAqKQorCXN0cnVjdCBoaWZfZGV2aWNlX3VzYiAqaGlmX2RldiA9CiAJCXVzYl9nZXRfaW50ZmRhdGEodXNiX2lmbnVtX3RvX2lmKHVyYi0+ZGV2LCAwKSk7CiAJaW50IHJldDsKIApAQCAtNTc4LDYgKzYxNCw3IEBACiBzdGF0aWMgdm9pZCBhdGg5a19oaWZfdXNiX2RlYWxsb2NfdHhfdXJicyhzdHJ1Y3QgaGlmX2RldmljZV91c2IgKmhpZl9kZXYpCiB7CiAJc3RydWN0IHR4X2J1ZiAqdHhfYnVmID0gTlVMTCwgKnR4X2J1Zl90bXAgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodHhfYnVmLCB0eF9idWZfdG1wLAogCQkJCSAmaGlmX2Rldi0+dHgudHhfYnVmLCBsaXN0KSB7CkBAIC01ODgsNiArNjI1LDEwIEBACiAJCWtmcmVlKHR4X2J1Zik7CiAJfQogCisJc3Bpbl9sb2NrX2lycXNhdmUoJmhpZl9kZXYtPnR4LnR4X2xvY2ssIGZsYWdzKTsKKwloaWZfZGV2LT50eC5mbGFncyB8PSBISUZfVVNCX1RYX0ZMVVNIOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhpZl9kZXYtPnR4LnR4X2xvY2ssIGZsYWdzKTsKKwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh0eF9idWYsIHR4X2J1Zl90bXAsCiAJCQkJICZoaWZfZGV2LT50eC50eF9wZW5kaW5nLCBsaXN0KSB7CiAJCXVzYl9raWxsX3VyYih0eF9idWYtPnVyYik7CkBAIC03NzYsNyArODE3LDggQEAKIAlhdGg5a19oaWZfdXNiX2RlYWxsb2NfcnhfdXJicyhoaWZfZGV2KTsKIH0KIAotc3RhdGljIGludCBhdGg5a19oaWZfdXNiX2Rvd25sb2FkX2Z3KHN0cnVjdCBoaWZfZGV2aWNlX3VzYiAqaGlmX2RldikKK3N0YXRpYyBpbnQgYXRoOWtfaGlmX3VzYl9kb3dubG9hZF9mdyhzdHJ1Y3QgaGlmX2RldmljZV91c2IgKmhpZl9kZXYsCisJCQkJICAgICB1MzIgZHJ2X2luZm8pCiB7CiAJaW50IHRyYW5zZmVyLCBlcnI7CiAJY29uc3Qgdm9pZCAqZGF0YSA9IGhpZl9kZXYtPmZpcm13YXJlLT5kYXRhOwpAQCAtODA3LDE4ICs4NDksMTAgQEAKIAl9CiAJa2ZyZWUoYnVmKTsKIAotCXN3aXRjaCAoaGlmX2Rldi0+ZGV2aWNlX2lkKSB7Ci0JY2FzZSAweDcwMTA6Ci0JY2FzZSAweDcwMTU6Ci0JY2FzZSAweDkwMTg6Ci0JY2FzZSAweEE3MDQ6Ci0JY2FzZSAweDEyMDA6CisJaWYgKElTX0FSNzAxMF9ERVZJQ0UoZHJ2X2luZm8pKQogCQlmaXJtX29mZnNldCA9IEFSNzAxMF9GSVJNV0FSRV9URVhUOwotCQlicmVhazsKLQlkZWZhdWx0OgorCWVsc2UKIAkJZmlybV9vZmZzZXQgPSBBUjkyNzFfRklSTVdBUkVfVEVYVDsKLQkJYnJlYWs7Ci0JfQogCiAJLyoKIAkgKiBJc3N1ZSBGVyBkb3dubG9hZCBjb21wbGV0ZSBjb21tYW5kIHRvIGZpcm13YXJlLgpAQCAtODM2LDcgKzg3MCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYXRoOWtfaGlmX3VzYl9kZXZfaW5pdChzdHJ1Y3QgaGlmX2RldmljZV91c2IgKmhpZl9kZXYpCitzdGF0aWMgaW50IGF0aDlrX2hpZl91c2JfZGV2X2luaXQoc3RydWN0IGhpZl9kZXZpY2VfdXNiICpoaWZfZGV2LCB1MzIgZHJ2X2luZm8pCiB7CiAJaW50IHJldCwgaWR4OwogCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmFsdCA9ICZoaWZfZGV2LT5pbnRlcmZhY2UtPmFsdHNldHRpbmdbMF07CkBAIC04NTIsNyArODg2LDcgQEAKIAl9CiAKIAkvKiBEb3dubG9hZCBmaXJtd2FyZSAqLwotCXJldCA9IGF0aDlrX2hpZl91c2JfZG93bmxvYWRfZncoaGlmX2Rldik7CisJcmV0ID0gYXRoOWtfaGlmX3VzYl9kb3dubG9hZF9mdyhoaWZfZGV2LCBkcnZfaW5mbyk7CiAJaWYgKHJldCkgewogCQlkZXZfZXJyKCZoaWZfZGV2LT51ZGV2LT5kZXYsCiAJCQkiYXRoOWtfaHRjOiBGaXJtd2FyZSAtICVzIGRvd25sb2FkIGZhaWxlZFxuIiwKQEAgLTg4NCw5ICs5MTgsOSBAQAogCiAJcmV0dXJuIDA7CiAKLWVycl9md19kb3dubG9hZDoKLQlhdGg5a19oaWZfdXNiX2RlYWxsb2NfdXJicyhoaWZfZGV2KTsKIGVycl91cmI6CisJYXRoOWtfaGlmX3VzYl9kZWFsbG9jX3VyYnMoaGlmX2Rldik7CitlcnJfZndfZG93bmxvYWQ6CiAJcmVsZWFzZV9maXJtd2FyZShoaWZfZGV2LT5maXJtd2FyZSk7CiBlcnJfZndfcmVxOgogCWhpZl9kZXYtPmZpcm13YXJlID0gTlVMTDsKQEAgLTkzMSwyMyArOTY1LDE1IEBACiAKIAkvKiBGaW5kIG91dCB3aGljaCBmaXJtd2FyZSB0byBsb2FkICovCiAKLQlzd2l0Y2goaGlmX2Rldi0+ZGV2aWNlX2lkKSB7Ci0JY2FzZSAweDcwMTA6Ci0JY2FzZSAweDcwMTU6Ci0JY2FzZSAweDkwMTg6Ci0JY2FzZSAweEE3MDQ6Ci0JY2FzZSAweDEyMDA6CisJaWYgKElTX0FSNzAxMF9ERVZJQ0UoaWQtPmRyaXZlcl9pbmZvKSkKIAkJaWYgKGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKSA9PSAweDAyMDIpCiAJCQloaWZfZGV2LT5md19uYW1lID0gRklSTVdBUkVfQVI3MDEwXzFfMTsKIAkJZWxzZQogCQkJaGlmX2Rldi0+ZndfbmFtZSA9IEZJUk1XQVJFX0FSNzAxMDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKKwllbHNlCiAJCWhpZl9kZXYtPmZ3X25hbWUgPSBGSVJNV0FSRV9BUjkyNzE7Ci0JCWJyZWFrOwotCX0KIAotCXJldCA9IGF0aDlrX2hpZl91c2JfZGV2X2luaXQoaGlmX2Rldik7CisJcmV0ID0gYXRoOWtfaGlmX3VzYl9kZXZfaW5pdChoaWZfZGV2LCBpZC0+ZHJpdmVyX2luZm8pOwogCWlmIChyZXQpIHsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBlcnJfaGlmX2luaXRfdXNiOwpAQCAtOTU1LDcgKzk4MSw3IEBACiAKIAlyZXQgPSBhdGg5a19odGNfaHdfaW5pdChoaWZfZGV2LT5odGNfaGFuZGxlLAogCQkJCSZoaWZfZGV2LT51ZGV2LT5kZXYsIGhpZl9kZXYtPmRldmljZV9pZCwKLQkJCQloaWZfZGV2LT51ZGV2LT5wcm9kdWN0KTsKKwkJCQloaWZfZGV2LT51ZGV2LT5wcm9kdWN0LCBpZC0+ZHJpdmVyX2luZm8pOwogCWlmIChyZXQpIHsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBlcnJfaHRjX2h3X2luaXQ7CkBAIC05OTgsMTggKzEwMjQsMTcgQEAKIHN0YXRpYyB2b2lkIGF0aDlrX2hpZl91c2JfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQogewogCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpOwotCXN0cnVjdCBoaWZfZGV2aWNlX3VzYiAqaGlmX2RldiA9Ci0JCShzdHJ1Y3QgaGlmX2RldmljZV91c2IgKikgdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCXN0cnVjdCBoaWZfZGV2aWNlX3VzYiAqaGlmX2RldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKwlib29sIHVucGx1Z2dlZCA9ICh1ZGV2LT5zdGF0ZSA9PSBVU0JfU1RBVEVfTk9UQVRUQUNIRUQpID8gdHJ1ZSA6IGZhbHNlOwogCiAJaWYgKGhpZl9kZXYpIHsKLQkJYXRoOWtfaHRjX2h3X2RlaW5pdChoaWZfZGV2LT5odGNfaGFuZGxlLAotCQkgICAgKHVkZXYtPnN0YXRlID09IFVTQl9TVEFURV9OT1RBVFRBQ0hFRCkgPyB0cnVlIDogZmFsc2UpOworCQlhdGg5a19odGNfaHdfZGVpbml0KGhpZl9kZXYtPmh0Y19oYW5kbGUsIHVucGx1Z2dlZCk7CiAJCWF0aDlrX2h0Y19od19mcmVlKGhpZl9kZXYtPmh0Y19oYW5kbGUpOwogCQlhdGg5a19oaWZfdXNiX2Rldl9kZWluaXQoaGlmX2Rldik7CiAJCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKIAl9CiAKLQlpZiAoaGlmX2Rldi0+ZmxhZ3MgJiBISUZfVVNCX1NUQVJUKQorCWlmICghdW5wbHVnZ2VkICYmIChoaWZfZGV2LT5mbGFncyAmIEhJRl9VU0JfU1RBUlQpKQogCQlhdGg5a19oaWZfdXNiX3JlYm9vdCh1ZGV2KTsKIAogCWtmcmVlKGhpZl9kZXYpOwpAQCAtMTAyMSw4ICsxMDQ2LDcgQEAKIHN0YXRpYyBpbnQgYXRoOWtfaGlmX3VzYl9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCiAJCQkJIHBtX21lc3NhZ2VfdCBtZXNzYWdlKQogewotCXN0cnVjdCBoaWZfZGV2aWNlX3VzYiAqaGlmX2RldiA9Ci0JCShzdHJ1Y3QgaGlmX2RldmljZV91c2IgKikgdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCXN0cnVjdCBoaWZfZGV2aWNlX3VzYiAqaGlmX2RldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKIAogCS8qCiAJICogVGhlIGRldmljZSBoYXMgdG8gYmUgc2V0IHRvIEZVTExTTEVFUCBtb2RlIGluIGNhc2Ugbm8KQEAgLTEwMzgsOCArMTA2Miw4IEBACiAKIHN0YXRpYyBpbnQgYXRoOWtfaGlmX3VzYl9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKIHsKLQlzdHJ1Y3QgaGlmX2RldmljZV91c2IgKmhpZl9kZXYgPQotCQkoc3RydWN0IGhpZl9kZXZpY2VfdXNiICopIHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKwlzdHJ1Y3QgaGlmX2RldmljZV91c2IgKmhpZl9kZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisJc3RydWN0IGh0Y190YXJnZXQgKmh0Y19oYW5kbGUgPSBoaWZfZGV2LT5odGNfaGFuZGxlOwogCWludCByZXQ7CiAKIAlyZXQgPSBhdGg5a19oaWZfdXNiX2FsbG9jX3VyYnMoaGlmX2Rldik7CkBAIC0xMDQ3LDcgKzEwNzEsOCBAQAogCQlyZXR1cm4gcmV0OwogCiAJaWYgKGhpZl9kZXYtPmZpcm13YXJlKSB7Ci0JCXJldCA9IGF0aDlrX2hpZl91c2JfZG93bmxvYWRfZncoaGlmX2Rldik7CisJCXJldCA9IGF0aDlrX2hpZl91c2JfZG93bmxvYWRfZncoaGlmX2RldiwKKwkJCQlodGNfaGFuZGxlLT5kcnZfcHJpdi0+YWgtPmh3X3ZlcnNpb24udXNiZGV2KTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gZmFpbF9yZXN1bWU7CiAJfSBlbHNlIHsKQEAgLTEwNTcsNyArMTA4Miw3IEBACiAKIAltZGVsYXkoMTAwKTsKIAotCXJldCA9IGF0aDlrX2h0Y19yZXN1bWUoaGlmX2Rldi0+aHRjX2hhbmRsZSk7CisJcmV0ID0gYXRoOWtfaHRjX3Jlc3VtZShodGNfaGFuZGxlKTsKIAogCWlmIChyZXQpCiAJCWdvdG8gZmFpbF9yZXN1bWU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2hpZl91c2IuaAppbmRleCAyZGFmOTdiLi43YjlkODYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmgKQEAgLTE3LDYgKzE3LDggQEAKICNpZm5kZWYgSFRDX1VTQl9ICiAjZGVmaW5lIEhUQ19VU0JfSAogCisjZGVmaW5lIElTX0FSNzAxMF9ERVZJQ0UoX3YpICgoKF92KSA9PSBBUjkyODBfVVNCKSB8fCAoKF92KSA9PSBBUjkyODdfVVNCKSkKKwogI2RlZmluZSBBUjkyNzFfRklSTVdBUkUgICAgICAgMHg1MDEwMDAKICNkZWZpbmUgQVI5MjcxX0ZJUk1XQVJFX1RFWFQgIDB4OTAzMDAwCiAjZGVmaW5lIEFSNzAxMF9GSVJNV0FSRV9URVhUICAweDkwNjAwMApAQCAtNjIsNiArNjQsNyBAQAogfTsKIAogI2RlZmluZSBISUZfVVNCX1RYX1NUT1AgIEJJVCgwKQorI2RlZmluZSBISUZfVVNCX1RYX0ZMVVNIIEJJVCgxKQogCiBzdHJ1Y3QgaGlmX3VzYl90eCB7CiAJdTggZmxhZ3M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmgKaW5kZXggYzNiNTYxZC4uYTA5OWIzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaApAQCAtMzMxLDE3ICszMzEsMTUgQEAKIAogI2RlZmluZSBPUF9JTlZBTElECQkgICBCSVQoMCkKICNkZWZpbmUgT1BfU0NBTk5JTkcJCSAgIEJJVCgxKQotI2RlZmluZSBPUF9GVUxMX1JFU0VUCQkgICBCSVQoMikKLSNkZWZpbmUgT1BfTEVEX0FTU09DSUFURUQJICAgQklUKDMpCi0jZGVmaW5lIE9QX0xFRF9PTgkJICAgQklUKDQpCi0jZGVmaW5lIE9QX1BSRUFNQkxFX1NIT1JUCSAgIEJJVCg1KQotI2RlZmluZSBPUF9QUk9URUNUX0VOQUJMRQkgICBCSVQoNikKLSNkZWZpbmUgT1BfQVNTT0NJQVRFRAkJICAgQklUKDcpCi0jZGVmaW5lIE9QX0VOQUJMRV9CRUFDT04JICAgQklUKDgpCi0jZGVmaW5lIE9QX0xFRF9ERUlOSVQJCSAgIEJJVCg5KQotI2RlZmluZSBPUF9VTlBMVUdHRUQJCSAgIEJJVCgxMCkKLSNkZWZpbmUgT1BfQlRfUFJJT1JJVFlfREVURUNURUQJICAgQklUKDExKQotI2RlZmluZSBPUF9CVF9TQ0FOCQkgICBCSVQoMTIpCisjZGVmaW5lIE9QX0xFRF9BU1NPQ0lBVEVECSAgIEJJVCgyKQorI2RlZmluZSBPUF9MRURfT04JCSAgIEJJVCgzKQorI2RlZmluZSBPUF9QUkVBTUJMRV9TSE9SVAkgICBCSVQoNCkKKyNkZWZpbmUgT1BfUFJPVEVDVF9FTkFCTEUJICAgQklUKDUpCisjZGVmaW5lIE9QX0FTU09DSUFURUQJCSAgIEJJVCg2KQorI2RlZmluZSBPUF9FTkFCTEVfQkVBQ09OCSAgIEJJVCg3KQorI2RlZmluZSBPUF9MRURfREVJTklUCQkgICBCSVQoOCkKKyNkZWZpbmUgT1BfQlRfUFJJT1JJVFlfREVURUNURUQgICAgQklUKDkpCisjZGVmaW5lIE9QX0JUX1NDQU4gICAgICAgICAgICAgICAgIEJJVCgxMCkKIAogc3RydWN0IGF0aDlrX2h0Y19wcml2IHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CkBAIC0zNjgsNyArMzY2LDcgQEAKIAl1MTYgc2VxX25vOwogCXUzMiBibWlzc19jbnQ7CiAKLQlzdHJ1Y3QgYXRoOWtfaHdfY2FsX2RhdGEgY2FsZGF0YVszOF07CisJc3RydWN0IGF0aDlrX2h3X2NhbF9kYXRhIGNhbGRhdGFbQVRIOUtfTlVNX0NIQU5ORUxTXTsKIAogCXNwaW5sb2NrX3QgYmVhY29uX2xvY2s7CiAKQEAgLTM3OCw3ICszNzYsNyBAQAogCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWY7CiAJc3RydWN0IGh0Y19iZWFjb25fY29uZmlnIGN1cl9iZWFjb25fY29uZjsKIAl1bnNpZ25lZCBpbnQgcnhmaWx0ZXI7Ci0Jc3RydWN0IHRhc2tsZXRfc3RydWN0IHdtaV90YXNrbGV0OworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCBzd2JhX3Rhc2tsZXQ7CiAJc3RydWN0IHRhc2tsZXRfc3RydWN0IHJ4X3Rhc2tsZXQ7CiAJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCBzYmFuZHNbSUVFRTgwMjExX05VTV9CQU5EU107CiAJc3RydWN0IGF0aDlrX2h0Y19yeCByeDsKQEAgLTM4Niw2ICszODQsNyBAQAogCXN0cnVjdCBza19idWZmX2hlYWQgdHhfcXVldWU7CiAJc3RydWN0IGRlbGF5ZWRfd29yayBhdGg5a19hbmlfd29yazsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcHNfd29yazsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZmF0YWxfd29yazsKIAogCXN0cnVjdCBtdXRleCBodGNfcG1fbG9jazsKIAl1bnNpZ25lZCBsb25nIHBzX3VzZWNvdW50OwpAQCAtNDIwLDYgKzQxOSw4IEBACiAJY29tbW9uLT5idXNfb3BzLT5yZWFkX2NhY2hlc2l6ZShjb21tb24sIGNzeik7CiB9CiAKK3ZvaWQgYXRoOWtfaHRjX3Jlc2V0KHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdik7CisKIHZvaWQgYXRoOWtfaHRjX2JlYWNvbnFfY29uZmlnKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdik7CiB2b2lkIGF0aDlrX2h0Y19iZWFjb25fY29uZmlnKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiwKIAkJCSAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZik7CkBAIC00MzUsNiArNDM2LDcgQEAKIHZvaWQgYXRoOWtfaHRjX3N0YXRpb25fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogdm9pZCBhdGg5a19odGNfYWdncl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiB2b2lkIGF0aDlrX2FuaV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Owordm9pZCBhdGhfc3RhcnRfYW5pKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdik7CiAKIGludCBhdGg5a190eF9pbml0KHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdik7CiB2b2lkIGF0aDlrX3R4X3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKTsKQEAgLTQ1NywxMyArNDU5LDE4IEBACiB2b2lkIGF0aDlrX3BzX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIGJvb2wgYXRoOWtfaHRjX3NldHBvd2VyKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiwKIAkJCWVudW0gYXRoOWtfcG93ZXJfbW9kZSBtb2RlKTsKK3ZvaWQgYXRoX3VwZGF0ZV90eHBvdyhzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYpOwogCiB2b2lkIGF0aDlrX3N0YXJ0X3Jma2lsbF9wb2xsKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdik7Cit2b2lkIGF0aDlrX2h0Y19yZmtpbGxfcG9sbF9zdGF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Cit2b2lkIGF0aDlrX2h0Y19yYWRpb19lbmFibGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwordm9pZCBhdGg5a19odGNfcmFkaW9fZGlzYWJsZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Cit2b2lkIGF0aDlrX2xlZF9zdG9wX2JyaWdodG5lc3Moc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2KTsKIHZvaWQgYXRoOWtfaW5pdF9sZWRzKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdik7CiB2b2lkIGF0aDlrX2RlaW5pdF9sZWRzKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdik7CiAKIGludCBhdGg5a19odGNfcHJvYmVfZGV2aWNlKHN0cnVjdCBodGNfdGFyZ2V0ICpodGNfaGFuZGxlLCBzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkgICB1MTYgZGV2aWQsIGNoYXIgKnByb2R1Y3QpOworCQkJICAgdTE2IGRldmlkLCBjaGFyICpwcm9kdWN0LCB1MzIgZHJ2X2luZm8pOwogdm9pZCBhdGg5a19odGNfZGlzY29ubmVjdF9kZXZpY2Uoc3RydWN0IGh0Y190YXJnZXQgKmh0Y19oYW5kbGUsIGJvb2wgaG90dW5wbHVnKTsKICNpZmRlZiBDT05GSUdfUE0KIHZvaWQgYXRoOWtfaHRjX3N1c3BlbmQoc3RydWN0IGh0Y190YXJnZXQgKmh0Y19oYW5kbGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfYmVhY29uLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9iZWFjb24uYwppbmRleCAxYjcyYWE0OC4uODdjYzY1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfYmVhY29uLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfYmVhY29uLmMKQEAgLTEyMywxMSArMTIzLDExIEBACiAJLyogVFNGIG91dCBvZiByYW5nZSB0aHJlc2hvbGQgZml4ZWQgYXQgMSBzZWNvbmQgKi8KIAlicy5ic190c2Zvb3JfdGhyZXNob2xkID0gQVRIOUtfVFNGT09SX1RIUkVTSE9MRDsKIAotCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQkVBQ09OLCAidHNmOiAlbGx1IHRzZnR1OiAldVxuIiwgdHNmLCB0c2Z0dSk7Ci0JYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19CRUFDT04sCi0JCSAgImJtaXNzOiAldSBzbGVlcDogJXUgY2ZwLXBlcmlvZDogJXUgbWF4ZHVyOiAldSBuZXh0OiAldVxuIiwKLQkJICBicy5ic19ibWlzc3RocmVzaG9sZCwgYnMuYnNfc2xlZXBkdXJhdGlvbiwKLQkJICBicy5ic19jZnBwZXJpb2QsIGJzLmJzX2NmcG1heGR1cmF0aW9uLCBicy5ic19jZnBuZXh0KTsKKwlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19CRUFDT04sICJ0c2Y6ICVsbHUgdHNmdHU6ICV1XG4iLCB0c2YsIHRzZnR1KTsKKwlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19CRUFDT04sCisJCSJibWlzczogJXUgc2xlZXA6ICV1IGNmcC1wZXJpb2Q6ICV1IG1heGR1cjogJXUgbmV4dDogJXVcbiIsCisJCWJzLmJzX2JtaXNzdGhyZXNob2xkLCBicy5ic19zbGVlcGR1cmF0aW9uLAorCQlicy5ic19jZnBwZXJpb2QsIGJzLmJzX2NmcG1heGR1cmF0aW9uLCBicy5ic19jZnBuZXh0KTsKIAogCS8qIFNldCB0aGUgY29tcHV0ZWQgU1RBIGJlYWNvbiB0aW1lcnMgKi8KIApAQCAtMTU0LDkgKzE1NCw5IEBACiAJaWYgKHByaXYtPm9wX2ZsYWdzICYgT1BfRU5BQkxFX0JFQUNPTikKIAkJaW1hc2sgfD0gQVRIOUtfSU5UX1NXQkE7CiAKLQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0JFQUNPTiwKLQkJICAiSUJTUyBCZWFjb24gY29uZmlnLCBpbnR2YWw6ICVkLCBpbWFzazogMHgleFxuIiwKLQkJICBic3NfY29uZi0+YmVhY29uX2ludGVydmFsLCBpbWFzayk7CisJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQkVBQ09OLAorCQkiSUJTUyBCZWFjb24gY29uZmlnLCBpbnR2YWw6ICVkLCBpbWFzazogMHgleFxuIiwKKwkJYnNzX2NvbmYtPmJlYWNvbl9pbnRlcnZhbCwgaW1hc2spOwogCiAJV01JX0NNRChXTUlfRElTQUJMRV9JTlRSX0NNRElEKTsKIAlhdGg5a19od19iZWFjb25pbml0KHByaXYtPmFoLCBuZXh0dGJ0dCwgaW50dmFsKTsKQEAgLTI0Niw4ICsyNDYsOCBAQAogCXFpLnRxaV9jd21heCA9IHFpX2JlLnRxaV9jd21heDsKIAogCWlmICghYXRoOWtfaHdfc2V0X3R4cV9wcm9wcyhhaCwgcHJpdi0+YmVhY29ucSwgJnFpKSkgewotCQlhdGhfcHJpbnQoYXRoOWtfaHdfY29tbW9uKGFoKSwgQVRIX0RCR19GQVRBTCwKLQkJCSAgIlVuYWJsZSB0byB1cGRhdGUgYmVhY29uIHF1ZXVlICV1IVxuIiwgcW51bSk7CisJCWF0aF9lcnIoYXRoOWtfaHdfY29tbW9uKGFoKSwKKwkJCSJVbmFibGUgdG8gdXBkYXRlIGJlYWNvbiBxdWV1ZSAldSFcbiIsIHFudW0pOwogCX0gZWxzZSB7CiAJCWF0aDlrX2h3X3Jlc2V0dHhxdWV1ZShhaCwgcHJpdi0+YmVhY29ucSk7CiAJfQpAQCAtMjc4LDggKzI3OCw4IEBACiAJCWF0aDlrX2h0Y19iZWFjb25fY29uZmlnX2FkaG9jKHByaXYsIGN1cl9jb25mKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19DT05GSUcsCi0JCQkgICJVbnN1cHBvcnRlZCBiZWFjb25pbmcgbW9kZVxuIik7CisJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NPTkZJRywKKwkJCSJVbnN1cHBvcnRlZCBiZWFjb25pbmcgbW9kZVxuIik7CiAJCXJldHVybjsKIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9ncGlvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9ncGlvLmMKaW5kZXggNTBlZWM5YS4uZmU3MGY2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfZ3Bpby5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2dwaW8uYwpAQCAtMSwzICsxLDE5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEwIEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKICNpbmNsdWRlICJodGMuaCIKIAogLyoqKioqKioqKioqKioqKioqKi8KQEAgLTIwLDEzICszNiwxMyBAQAogCQlwcml2LT5vcF9mbGFncyAmPSB+KE9QX0JUX1BSSU9SSVRZX0RFVEVDVEVEIHwgT1BfQlRfU0NBTik7CiAJCS8qIERldGVjdCBpZiBjb2xvY2F0ZWQgYnQgc3RhcnRlZCBzY2FubmluZyAqLwogCQlpZiAoYnRjb2V4LT5idF9wcmlvcml0eV9jbnQgPj0gQVRIX0JUX0NOVF9TQ0FOX1RIUkVTSE9MRCkgewotCQkJYXRoX3ByaW50KGF0aDlrX2h3X2NvbW1vbihhaCksIEFUSF9EQkdfQlRDT0VYLAotCQkJCSAgIkJUIHNjYW4gZGV0ZWN0ZWQiKTsKKwkJCWF0aF9kYmcoYXRoOWtfaHdfY29tbW9uKGFoKSwgQVRIX0RCR19CVENPRVgsCisJCQkJIkJUIHNjYW4gZGV0ZWN0ZWRcbiIpOwogCQkJcHJpdi0+b3BfZmxhZ3MgfD0gKE9QX0JUX1NDQU4gfAogCQkJCQkgT1BfQlRfUFJJT1JJVFlfREVURUNURUQpOwogCQl9IGVsc2UgaWYgKGJ0Y29leC0+YnRfcHJpb3JpdHlfY250ID49IEFUSF9CVF9DTlRfVEhSRVNIT0xEKSB7Ci0JCQlhdGhfcHJpbnQoYXRoOWtfaHdfY29tbW9uKGFoKSwgQVRIX0RCR19CVENPRVgsCi0JCQkJICAgICJCVCBwcmlvcml0eSB0cmFmZmljIGRldGVjdGVkIik7CisJCQlhdGhfZGJnKGF0aDlrX2h3X2NvbW1vbihhaCksIEFUSF9EQkdfQlRDT0VYLAorCQkJCSJCVCBwcmlvcml0eSB0cmFmZmljIGRldGVjdGVkXG4iKTsKIAkJCXByaXYtPm9wX2ZsYWdzIHw9IE9QX0JUX1BSSU9SSVRZX0RFVEVDVEVEOwogCQl9CiAKQEAgLTgzLDggKzk5LDggQEAKIAlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKGFoKTsKIAlib29sIGlzX2J0c2NhbiA9IHByaXYtPm9wX2ZsYWdzICYgT1BfQlRfU0NBTjsKIAotCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQlRDT0VYLAotCQkgICJ0aW1lIHNsaWNlIHdvcmsgZm9yIGJ0IGFuZCB3bGFuXG4iKTsKKwlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19CVENPRVgsCisJCSJ0aW1lIHNsaWNlIHdvcmsgZm9yIGJ0IGFuZCB3bGFuXG4iKTsKIAogCWlmIChidGNvZXgtPmJ0X3N0b21wX3R5cGUgPT0gQVRIX0JUQ09FWF9TVE9NUF9MT1cgfHwgaXNfYnRzY2FuKQogCQlhdGg5a19jbW5fYnRjb2V4X2J0X3N0b21wKGNvbW1vbiwgQVRIX0JUQ09FWF9TVE9NUF9OT05FKTsKQEAgLTExNCw4ICsxMzAsNyBAQAogCXN0cnVjdCBhdGhfYnRjb2V4ICpidGNvZXggPSAmcHJpdi0+YnRjb2V4OwogCXN0cnVjdCBhdGhfaHcgKmFoID0gcHJpdi0+YWg7CiAKLQlhdGhfcHJpbnQoYXRoOWtfaHdfY29tbW9uKGFoKSwgQVRIX0RCR19CVENPRVgsCi0JCSAgIlN0YXJ0aW5nIGJ0Y29leCB3b3JrIik7CisJYXRoX2RiZyhhdGg5a19od19jb21tb24oYWgpLCBBVEhfREJHX0JUQ09FWCwgIlN0YXJ0aW5nIGJ0Y29leCB3b3JrXG4iKTsKIAogCWJ0Y29leC0+YnRfcHJpb3JpdHlfY250ID0gMDsKIAlidGNvZXgtPmJ0X3ByaW9yaXR5X3RpbWUgPSBqaWZmaWVzOwpAQCAtMTMyLDMgKzE0NywzMTQgQEAKIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnByaXYtPmNvZXhfcGVyaW9kX3dvcmspOwogCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcHJpdi0+ZHV0eV9jeWNsZV93b3JrKTsKIH0KKworLyoqKioqKiovCisvKiBMRUQgKi8KKy8qKioqKioqLworCitzdGF0aWMgdm9pZCBhdGg5a19sZWRfYmxpbmtfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhdGg5a19odGNfcHJpdiwKKwkJCQkJCSAgIGF0aDlrX2xlZF9ibGlua193b3JrLndvcmspOworCisJaWYgKCEocHJpdi0+b3BfZmxhZ3MgJiBPUF9MRURfQVNTT0NJQVRFRCkpCisJCXJldHVybjsKKworCWlmICgocHJpdi0+bGVkX29uX2R1cmF0aW9uID09IEFUSF9MRURfT05fRFVSQVRJT05fSURMRSkgfHwKKwkgICAgKHByaXYtPmxlZF9vZmZfZHVyYXRpb24gPT0gQVRIX0xFRF9PRkZfRFVSQVRJT05fSURMRSkpCisJCWF0aDlrX2h3X3NldF9ncGlvKHByaXYtPmFoLCBwcml2LT5haC0+bGVkX3BpbiwgMCk7CisJZWxzZQorCQlhdGg5a19od19zZXRfZ3Bpbyhwcml2LT5haCwgcHJpdi0+YWgtPmxlZF9waW4sCisJCQkJICAocHJpdi0+b3BfZmxhZ3MgJiBPUF9MRURfT04pID8gMSA6IDApOworCisJaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayhwcml2LT5odywKKwkJCQkgICAgICZwcml2LT5hdGg5a19sZWRfYmxpbmtfd29yaywKKwkJCQkgICAgIChwcml2LT5vcF9mbGFncyAmIE9QX0xFRF9PTikgPworCQkJCSAgICAgbXNlY3NfdG9famlmZmllcyhwcml2LT5sZWRfb2ZmX2R1cmF0aW9uKSA6CisJCQkJICAgICBtc2Vjc190b19qaWZmaWVzKHByaXYtPmxlZF9vbl9kdXJhdGlvbikpOworCisJcHJpdi0+bGVkX29uX2R1cmF0aW9uID0gcHJpdi0+bGVkX29uX2NudCA/CisJCW1heCgoQVRIX0xFRF9PTl9EVVJBVElPTl9JRExFIC0gcHJpdi0+bGVkX29uX2NudCksIDI1KSA6CisJCUFUSF9MRURfT05fRFVSQVRJT05fSURMRTsKKwlwcml2LT5sZWRfb2ZmX2R1cmF0aW9uID0gcHJpdi0+bGVkX29mZl9jbnQgPworCQltYXgoKEFUSF9MRURfT0ZGX0RVUkFUSU9OX0lETEUgLSBwcml2LT5sZWRfb2ZmX2NudCksIDEwKSA6CisJCUFUSF9MRURfT0ZGX0RVUkFUSU9OX0lETEU7CisJcHJpdi0+bGVkX29uX2NudCA9IHByaXYtPmxlZF9vZmZfY250ID0gMDsKKworCWlmIChwcml2LT5vcF9mbGFncyAmIE9QX0xFRF9PTikKKwkJcHJpdi0+b3BfZmxhZ3MgJj0gfk9QX0xFRF9PTjsKKwllbHNlCisJCXByaXYtPm9wX2ZsYWdzIHw9IE9QX0xFRF9PTjsKK30KKworc3RhdGljIHZvaWQgYXRoOWtfbGVkX2JyaWdodG5lc3Nfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGF0aF9sZWQgKmxlZCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYXRoX2xlZCwKKwkJCQkJICAgYnJpZ2h0bmVzc193b3JrLndvcmspOworCXN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiA9IGxlZC0+cHJpdjsKKworCXN3aXRjaCAobGVkLT5icmlnaHRuZXNzKSB7CisJY2FzZSBMRURfT0ZGOgorCQlpZiAobGVkLT5sZWRfdHlwZSA9PSBBVEhfTEVEX0FTU09DIHx8CisJCSAgICBsZWQtPmxlZF90eXBlID09IEFUSF9MRURfUkFESU8pIHsKKwkJCWF0aDlrX2h3X3NldF9ncGlvKHByaXYtPmFoLCBwcml2LT5haC0+bGVkX3BpbiwKKwkJCQkJICAobGVkLT5sZWRfdHlwZSA9PSBBVEhfTEVEX1JBRElPKSk7CisJCQlwcml2LT5vcF9mbGFncyAmPSB+T1BfTEVEX0FTU09DSUFURUQ7CisJCQlpZiAobGVkLT5sZWRfdHlwZSA9PSBBVEhfTEVEX1JBRElPKQorCQkJCXByaXYtPm9wX2ZsYWdzICY9IH5PUF9MRURfT047CisJCX0gZWxzZSB7CisJCQlwcml2LT5sZWRfb2ZmX2NudCsrOworCQl9CisJCWJyZWFrOworCWNhc2UgTEVEX0ZVTEw6CisJCWlmIChsZWQtPmxlZF90eXBlID09IEFUSF9MRURfQVNTT0MpIHsKKwkJCXByaXYtPm9wX2ZsYWdzIHw9IE9QX0xFRF9BU1NPQ0lBVEVEOworCQkJaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayhwcml2LT5odywKKwkJCQkJICAgICAmcHJpdi0+YXRoOWtfbGVkX2JsaW5rX3dvcmssIDApOworCQl9IGVsc2UgaWYgKGxlZC0+bGVkX3R5cGUgPT0gQVRIX0xFRF9SQURJTykgeworCQkJYXRoOWtfaHdfc2V0X2dwaW8ocHJpdi0+YWgsIHByaXYtPmFoLT5sZWRfcGluLCAwKTsKKwkJCXByaXYtPm9wX2ZsYWdzIHw9IE9QX0xFRF9PTjsKKwkJfSBlbHNlIHsKKwkJCXByaXYtPmxlZF9vbl9jbnQrKzsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGF0aDlrX2xlZF9icmlnaHRuZXNzKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LAorCQkJCSBlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpCit7CisJc3RydWN0IGF0aF9sZWQgKmxlZCA9IGNvbnRhaW5lcl9vZihsZWRfY2Rldiwgc3RydWN0IGF0aF9sZWQsIGxlZF9jZGV2KTsKKwlzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYgPSBsZWQtPnByaXY7CisKKwlsZWQtPmJyaWdodG5lc3MgPSBicmlnaHRuZXNzOworCWlmICghKHByaXYtPm9wX2ZsYWdzICYgT1BfTEVEX0RFSU5JVCkpCisJCWllZWU4MDIxMV9xdWV1ZV9kZWxheWVkX3dvcmsocHJpdi0+aHcsCisJCQkJCSAgICAgJmxlZC0+YnJpZ2h0bmVzc193b3JrLCAwKTsKK30KKwordm9pZCBhdGg5a19sZWRfc3RvcF9icmlnaHRuZXNzKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdikKK3sKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnByaXYtPnJhZGlvX2xlZC5icmlnaHRuZXNzX3dvcmspOworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcHJpdi0+YXNzb2NfbGVkLmJyaWdodG5lc3Nfd29yayk7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZwcml2LT50eF9sZWQuYnJpZ2h0bmVzc193b3JrKTsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnByaXYtPnJ4X2xlZC5icmlnaHRuZXNzX3dvcmspOworfQorCitzdGF0aWMgaW50IGF0aDlrX3JlZ2lzdGVyX2xlZChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsIHN0cnVjdCBhdGhfbGVkICpsZWQsCisJCQkgICAgICBjaGFyICp0cmlnZ2VyKQoreworCWludCByZXQ7CisKKwlsZWQtPnByaXYgPSBwcml2OworCWxlZC0+bGVkX2NkZXYubmFtZSA9IGxlZC0+bmFtZTsKKwlsZWQtPmxlZF9jZGV2LmRlZmF1bHRfdHJpZ2dlciA9IHRyaWdnZXI7CisJbGVkLT5sZWRfY2Rldi5icmlnaHRuZXNzX3NldCA9IGF0aDlrX2xlZF9icmlnaHRuZXNzOworCisJcmV0ID0gbGVkX2NsYXNzZGV2X3JlZ2lzdGVyKHdpcGh5X2Rldihwcml2LT5ody0+d2lwaHkpLCAmbGVkLT5sZWRfY2Rldik7CisJaWYgKHJldCkKKwkJYXRoX2VycihhdGg5a19od19jb21tb24ocHJpdi0+YWgpLAorCQkJIkZhaWxlZCB0byByZWdpc3RlciBsZWQ6JXMiLCBsZWQtPm5hbWUpOworCWVsc2UKKwkJbGVkLT5yZWdpc3RlcmVkID0gMTsKKworCUlOSVRfREVMQVlFRF9XT1JLKCZsZWQtPmJyaWdodG5lc3Nfd29yaywgYXRoOWtfbGVkX2JyaWdodG5lc3Nfd29yayk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBhdGg5a191bnJlZ2lzdGVyX2xlZChzdHJ1Y3QgYXRoX2xlZCAqbGVkKQoreworCWlmIChsZWQtPnJlZ2lzdGVyZWQpIHsKKwkJbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoJmxlZC0+bGVkX2NkZXYpOworCQlsZWQtPnJlZ2lzdGVyZWQgPSAwOworCX0KK30KKwordm9pZCBhdGg5a19kZWluaXRfbGVkcyhzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYpCit7CisJcHJpdi0+b3BfZmxhZ3MgfD0gT1BfTEVEX0RFSU5JVDsKKwlhdGg5a191bnJlZ2lzdGVyX2xlZCgmcHJpdi0+YXNzb2NfbGVkKTsKKwlwcml2LT5vcF9mbGFncyAmPSB+T1BfTEVEX0FTU09DSUFURUQ7CisJYXRoOWtfdW5yZWdpc3Rlcl9sZWQoJnByaXYtPnR4X2xlZCk7CisJYXRoOWtfdW5yZWdpc3Rlcl9sZWQoJnByaXYtPnJ4X2xlZCk7CisJYXRoOWtfdW5yZWdpc3Rlcl9sZWQoJnByaXYtPnJhZGlvX2xlZCk7Cit9CisKK3ZvaWQgYXRoOWtfaW5pdF9sZWRzKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdikKK3sKKwljaGFyICp0cmlnZ2VyOworCWludCByZXQ7CisKKwlpZiAoQVJfU1JFVl85Mjg3KHByaXYtPmFoKSkKKwkJcHJpdi0+YWgtPmxlZF9waW4gPSBBVEhfTEVEX1BJTl85Mjg3OworCWVsc2UgaWYgKEFSX1NSRVZfOTI3MShwcml2LT5haCkpCisJCXByaXYtPmFoLT5sZWRfcGluID0gQVRIX0xFRF9QSU5fOTI3MTsKKwllbHNlIGlmIChBUl9ERVZJRF83MDEwKHByaXYtPmFoKSkKKwkJcHJpdi0+YWgtPmxlZF9waW4gPSBBVEhfTEVEX1BJTl83MDEwOworCWVsc2UKKwkJcHJpdi0+YWgtPmxlZF9waW4gPSBBVEhfTEVEX1BJTl9ERUY7CisKKwkvKiBDb25maWd1cmUgZ3BpbyAxIGZvciBvdXRwdXQgKi8KKwlhdGg5a19od19jZmdfb3V0cHV0KHByaXYtPmFoLCBwcml2LT5haC0+bGVkX3BpbiwKKwkJCSAgICBBUl9HUElPX09VVFBVVF9NVVhfQVNfT1VUUFVUKTsKKwkvKiBMRUQgb2ZmLCBhY3RpdmUgbG93ICovCisJYXRoOWtfaHdfc2V0X2dwaW8ocHJpdi0+YWgsIHByaXYtPmFoLT5sZWRfcGluLCAxKTsKKworCUlOSVRfREVMQVlFRF9XT1JLKCZwcml2LT5hdGg5a19sZWRfYmxpbmtfd29yaywgYXRoOWtfbGVkX2JsaW5rX3dvcmspOworCisJdHJpZ2dlciA9IGllZWU4MDIxMV9nZXRfcmFkaW9fbGVkX25hbWUocHJpdi0+aHcpOworCXNucHJpbnRmKHByaXYtPnJhZGlvX2xlZC5uYW1lLCBzaXplb2YocHJpdi0+cmFkaW9fbGVkLm5hbWUpLAorCQkiYXRoOWstJXM6OnJhZGlvIiwgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpKTsKKwlyZXQgPSBhdGg5a19yZWdpc3Rlcl9sZWQocHJpdiwgJnByaXYtPnJhZGlvX2xlZCwgdHJpZ2dlcik7CisJcHJpdi0+cmFkaW9fbGVkLmxlZF90eXBlID0gQVRIX0xFRF9SQURJTzsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWw7CisKKwl0cmlnZ2VyID0gaWVlZTgwMjExX2dldF9hc3NvY19sZWRfbmFtZShwcml2LT5odyk7CisJc25wcmludGYocHJpdi0+YXNzb2NfbGVkLm5hbWUsIHNpemVvZihwcml2LT5hc3NvY19sZWQubmFtZSksCisJCSJhdGg5ay0lczo6YXNzb2MiLCB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSkpOworCXJldCA9IGF0aDlrX3JlZ2lzdGVyX2xlZChwcml2LCAmcHJpdi0+YXNzb2NfbGVkLCB0cmlnZ2VyKTsKKwlwcml2LT5hc3NvY19sZWQubGVkX3R5cGUgPSBBVEhfTEVEX0FTU09DOworCWlmIChyZXQpCisJCWdvdG8gZmFpbDsKKworCXRyaWdnZXIgPSBpZWVlODAyMTFfZ2V0X3R4X2xlZF9uYW1lKHByaXYtPmh3KTsKKwlzbnByaW50Zihwcml2LT50eF9sZWQubmFtZSwgc2l6ZW9mKHByaXYtPnR4X2xlZC5uYW1lKSwKKwkJImF0aDlrLSVzOjp0eCIsIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSk7CisJcmV0ID0gYXRoOWtfcmVnaXN0ZXJfbGVkKHByaXYsICZwcml2LT50eF9sZWQsIHRyaWdnZXIpOworCXByaXYtPnR4X2xlZC5sZWRfdHlwZSA9IEFUSF9MRURfVFg7CisJaWYgKHJldCkKKwkJZ290byBmYWlsOworCisJdHJpZ2dlciA9IGllZWU4MDIxMV9nZXRfcnhfbGVkX25hbWUocHJpdi0+aHcpOworCXNucHJpbnRmKHByaXYtPnJ4X2xlZC5uYW1lLCBzaXplb2YocHJpdi0+cnhfbGVkLm5hbWUpLAorCQkiYXRoOWstJXM6OnJ4Iiwgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpKTsKKwlyZXQgPSBhdGg5a19yZWdpc3Rlcl9sZWQocHJpdiwgJnByaXYtPnJ4X2xlZCwgdHJpZ2dlcik7CisJcHJpdi0+cnhfbGVkLmxlZF90eXBlID0gQVRIX0xFRF9SWDsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWw7CisKKwlwcml2LT5vcF9mbGFncyAmPSB+T1BfTEVEX0RFSU5JVDsKKworCXJldHVybjsKKworZmFpbDoKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnByaXYtPmF0aDlrX2xlZF9ibGlua193b3JrKTsKKwlhdGg5a19kZWluaXRfbGVkcyhwcml2KTsKK30KKworLyoqKioqKioqKioqKioqKioqKiovCisvKglSZmtpbGwJICAgKi8KKy8qKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgYm9vbCBhdGhfaXNfcmZraWxsX3NldChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYpCit7CisJcmV0dXJuIGF0aDlrX2h3X2dwaW9fZ2V0KHByaXYtPmFoLCBwcml2LT5haC0+cmZraWxsX2dwaW8pID09CisJCXByaXYtPmFoLT5yZmtpbGxfcG9sYXJpdHk7Cit9CisKK3ZvaWQgYXRoOWtfaHRjX3Jma2lsbF9wb2xsX3N0YXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCWJvb2wgYmxvY2tlZCA9ICEhYXRoX2lzX3Jma2lsbF9zZXQocHJpdik7CisKKwl3aXBoeV9yZmtpbGxfc2V0X2h3X3N0YXRlKGh3LT53aXBoeSwgYmxvY2tlZCk7Cit9CisKK3ZvaWQgYXRoOWtfc3RhcnRfcmZraWxsX3BvbGwoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2KQoreworCWlmIChwcml2LT5haC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX1JGU0lMRU5UKQorCQl3aXBoeV9yZmtpbGxfc3RhcnRfcG9sbGluZyhwcml2LT5ody0+d2lwaHkpOworfQorCit2b2lkIGF0aDlrX2h0Y19yYWRpb19lbmFibGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9odyAqYWggPSBwcml2LT5haDsKKwlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKGFoKTsKKwlpbnQgcmV0OworCXU4IGNtZF9yc3A7CisKKwlpZiAoIWFoLT5jdXJjaGFuKQorCQlhaC0+Y3VyY2hhbiA9IGF0aDlrX2Ntbl9nZXRfY3VyY2hhbm5lbChodywgYWgpOworCisJLyogUmVzZXQgdGhlIEhXICovCisJcmV0ID0gYXRoOWtfaHdfcmVzZXQoYWgsIGFoLT5jdXJjaGFuLCBhaC0+Y2FsZGF0YSwgZmFsc2UpOworCWlmIChyZXQpIHsKKwkJYXRoX2Vycihjb21tb24sCisJCQkiVW5hYmxlIHRvIHJlc2V0IGhhcmR3YXJlOyByZXNldCBzdGF0dXMgJWQgKGZyZXEgJXUgTUh6KVxuIiwKKwkJCXJldCwgYWgtPmN1cmNoYW4tPmNoYW5uZWwpOworCX0KKworCWF0aF91cGRhdGVfdHhwb3cocHJpdik7CisKKwkvKiBTdGFydCBSWCAqLworCVdNSV9DTUQoV01JX1NUQVJUX1JFQ1ZfQ01ESUQpOworCWF0aDlrX2hvc3RfcnhfaW5pdChwcml2KTsKKworCS8qIFN0YXJ0IFRYICovCisJaHRjX3N0YXJ0KHByaXYtPmh0Yyk7CisJc3Bpbl9sb2NrX2JoKCZwcml2LT50eF9sb2NrKTsKKwlwcml2LT50eF9xdWV1ZXNfc3RvcCA9IGZhbHNlOworCXNwaW5fdW5sb2NrX2JoKCZwcml2LT50eF9sb2NrKTsKKwlpZWVlODAyMTFfd2FrZV9xdWV1ZXMoaHcpOworCisJV01JX0NNRChXTUlfRU5BQkxFX0lOVFJfQ01ESUQpOworCisJLyogRW5hYmxlIExFRCAqLworCWF0aDlrX2h3X2NmZ19vdXRwdXQoYWgsIGFoLT5sZWRfcGluLAorCQkJICAgIEFSX0dQSU9fT1VUUFVUX01VWF9BU19PVVRQVVQpOworCWF0aDlrX2h3X3NldF9ncGlvKGFoLCBhaC0+bGVkX3BpbiwgMCk7Cit9CisKK3ZvaWQgYXRoOWtfaHRjX3JhZGlvX2Rpc2FibGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9odyAqYWggPSBwcml2LT5haDsKKwlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKGFoKTsKKwlpbnQgcmV0OworCXU4IGNtZF9yc3A7CisKKwlhdGg5a19odGNfcHNfd2FrZXVwKHByaXYpOworCisJLyogRGlzYWJsZSBMRUQgKi8KKwlhdGg5a19od19zZXRfZ3BpbyhhaCwgYWgtPmxlZF9waW4sIDEpOworCWF0aDlrX2h3X2NmZ19ncGlvX2lucHV0KGFoLCBhaC0+bGVkX3Bpbik7CisKKwlXTUlfQ01EKFdNSV9ESVNBQkxFX0lOVFJfQ01ESUQpOworCisJLyogU3RvcCBUWCAqLworCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyhodyk7CisJaHRjX3N0b3AocHJpdi0+aHRjKTsKKwlXTUlfQ01EKFdNSV9EUkFJTl9UWFFfQUxMX0NNRElEKTsKKwlza2JfcXVldWVfcHVyZ2UoJnByaXYtPnR4X3F1ZXVlKTsKKworCS8qIFN0b3AgUlggKi8KKwlXTUlfQ01EKFdNSV9TVE9QX1JFQ1ZfQ01ESUQpOworCisJLyoKKwkgKiBUaGUgTUlCIGNvdW50ZXJzIGhhdmUgdG8gYmUgZGlzYWJsZWQgaGVyZSwKKwkgKiBzaW5jZSB0aGUgdGFyZ2V0IGRvZXNuJ3QgZG8gaXQuCisJICovCisJYXRoOWtfaHdfZGlzYWJsZV9taWJfY291bnRlcnMoYWgpOworCisJaWYgKCFhaC0+Y3VyY2hhbikKKwkJYWgtPmN1cmNoYW4gPSBhdGg5a19jbW5fZ2V0X2N1cmNoYW5uZWwoaHcsIGFoKTsKKworCS8qIFJlc2V0IHRoZSBIVyAqLworCXJldCA9IGF0aDlrX2h3X3Jlc2V0KGFoLCBhaC0+Y3VyY2hhbiwgYWgtPmNhbGRhdGEsIGZhbHNlKTsKKwlpZiAocmV0KSB7CisJCWF0aF9lcnIoY29tbW9uLAorCQkJIlVuYWJsZSB0byByZXNldCBoYXJkd2FyZTsgcmVzZXQgc3RhdHVzICVkIChmcmVxICV1IE1IeilcbiIsCisJCQlyZXQsIGFoLT5jdXJjaGFuLT5jaGFubmVsKTsKKwl9CisKKwkvKiBEaXNhYmxlIHRoZSBQSFkgKi8KKwlhdGg5a19od19waHlfZGlzYWJsZShhaCk7CisKKwlhdGg5a19odGNfcHNfcmVzdG9yZShwcml2KTsKKwlhdGg5a19odGNfc2V0cG93ZXIocHJpdiwgQVRIOUtfUE1fRlVMTF9TTEVFUCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9pbml0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9pbml0LmMKaW5kZXggODc3NmY0OS4uMzg0MzNmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfaW5pdC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2luaXQuYwpAQCAtMTQyLDcgKzE0Miw3IEBACiB7CiAJYXRoOWtfaHRjX2V4aXRfZGVidWcocHJpdi0+YWgpOwogCWF0aDlrX2h3X2RlaW5pdChwcml2LT5haCk7Ci0JdGFza2xldF9raWxsKCZwcml2LT53bWlfdGFza2xldCk7CisJdGFza2xldF9raWxsKCZwcml2LT5zd2JhX3Rhc2tsZXQpOwogCXRhc2tsZXRfa2lsbCgmcHJpdi0+cnhfdGFza2xldCk7CiAJdGFza2xldF9raWxsKCZwcml2LT50eF90YXNrbGV0KTsKIAlrZnJlZShwcml2LT5haCk7CkBAIC0xODEsNyArMTgxLDggQEAKIAlyZXR1cm4gaHRjX2Nvbm5lY3Rfc2VydmljZShwcml2LT5odGMsICZyZXEsIGVwX2lkKTsKIH0KIAotc3RhdGljIGludCBhdGg5a19pbml0X2h0Y19zZXJ2aWNlcyhzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsIHUxNiBkZXZpZCkKK3N0YXRpYyBpbnQgYXRoOWtfaW5pdF9odGNfc2VydmljZXMoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LCB1MTYgZGV2aWQsCisJCQkJICAgdTMyIGRydl9pbmZvKQogewogCWludCByZXQ7CiAKQEAgLTI0NSwxNyArMjQ2LDEwIEBACiAJICogdGhlIEhJRiBsYXllciwgc2hvdWxkbid0IG1hdHRlciBtdWNoLgogCSAqLwogCi0Jc3dpdGNoKGRldmlkKSB7Ci0JY2FzZSAweDcwMTA6Ci0JY2FzZSAweDcwMTU6Ci0JY2FzZSAweDkwMTg6Ci0JY2FzZSAweEE3MDQ6Ci0JY2FzZSAweDEyMDA6CisJaWYgKElTX0FSNzAxMF9ERVZJQ0UoZHJ2X2luZm8pKQogCQlwcml2LT5odGMtPmNyZWRpdHMgPSA0NTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKKwllbHNlCiAJCXByaXYtPmh0Yy0+Y3JlZGl0cyA9IDMzOwotCX0KIAogCXJldCA9IGh0Y19pbml0KHByaXYtPmh0Yyk7CiAJaWYgKHJldCkKQEAgLTI5NCw5ICsyODgsOSBAQAogCQkJICAodTggKikgJnZhbCwgc2l6ZW9mKHZhbCksCiAJCQkgIDEwMCk7CiAJaWYgKHVubGlrZWx5KHIpKSB7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfV01JLAotCQkJICAiUkVHSVNURVIgUkVBRCBGQUlMRUQ6ICgweCUwNHgsICVkKVxuIiwKLQkJCSAgIHJlZ19vZmZzZXQsIHIpOworCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19XTUksCisJCQkiUkVHSVNURVIgUkVBRCBGQUlMRUQ6ICgweCUwNHgsICVkKVxuIiwKKwkJCXJlZ19vZmZzZXQsIHIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTMwOCw3ICszMDIsNyBAQAogCXN0cnVjdCBhdGhfaHcgKmFoID0gKHN0cnVjdCBhdGhfaHcgKikgaHdfcHJpdjsKIAlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKGFoKTsKIAlzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYgPSAoc3RydWN0IGF0aDlrX2h0Y19wcml2ICopIGNvbW1vbi0+cHJpdjsKLQlfX2JlMzIgYnVmWzJdID0geworCWNvbnN0IF9fYmUzMiBidWZbMl0gPSB7CiAJCWNwdV90b19iZTMyKHJlZ19vZmZzZXQpLAogCQljcHVfdG9fYmUzMih2YWwpLAogCX07CkBAIC0zMTksOSArMzEzLDkgQEAKIAkJCSAgKHU4ICopICZ2YWwsIHNpemVvZih2YWwpLAogCQkJICAxMDApOwogCWlmICh1bmxpa2VseShyKSkgewotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX1dNSSwKLQkJCSAgIlJFR0lTVEVSIFdSSVRFIEZBSUxFRDooMHglMDR4LCAlZClcbiIsCi0JCQkgIHJlZ19vZmZzZXQsIHIpOworCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19XTUksCisJCQkiUkVHSVNURVIgV1JJVEUgRkFJTEVEOigweCUwNHgsICVkKVxuIiwKKwkJCXJlZ19vZmZzZXQsIHIpOwogCX0KIH0KIApAQCAtMzUxLDkgKzM0NSw5IEBACiAJCQkgICh1OCAqKSAmcnNwX3N0YXR1cywgc2l6ZW9mKHJzcF9zdGF0dXMpLAogCQkJICAxMDApOwogCQlpZiAodW5saWtlbHkocikpIHsKLQkJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfV01JLAotCQkJCSAgIlJFR0lTVEVSIFdSSVRFIEZBSUxFRCwgbXVsdGkgbGVuOiAlZFxuIiwKLQkJCQkgIHByaXYtPndtaS0+bXVsdGlfd3JpdGVfaWR4KTsKKwkJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX1dNSSwKKwkJCQkiUkVHSVNURVIgV1JJVEUgRkFJTEVELCBtdWx0aSBsZW46ICVkXG4iLAorCQkJCXByaXYtPndtaS0+bXVsdGlfd3JpdGVfaWR4KTsKIAkJfQogCQlwcml2LT53bWktPm11bHRpX3dyaXRlX2lkeCA9IDA7CiAJfQpAQCAtNDAxLDkgKzM5NSw5IEBACiAJCQkgICh1OCAqKSAmcnNwX3N0YXR1cywgc2l6ZW9mKHJzcF9zdGF0dXMpLAogCQkJICAxMDApOwogCQlpZiAodW5saWtlbHkocikpIHsKLQkJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfV01JLAotCQkJCSAgIlJFR0lTVEVSIFdSSVRFIEZBSUxFRCwgbXVsdGkgbGVuOiAlZFxuIiwKLQkJCQkgIHByaXYtPndtaS0+bXVsdGlfd3JpdGVfaWR4KTsKKwkJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX1dNSSwKKwkJCQkiUkVHSVNURVIgV1JJVEUgRkFJTEVELCBtdWx0aSBsZW46ICVkXG4iLAorCQkJCXByaXYtPndtaS0+bXVsdGlfd3JpdGVfaWR4KTsKIAkJfQogCQlwcml2LT53bWktPm11bHRpX3dyaXRlX2lkeCA9IDA7CiAJfQpAQCAtNDc1LDkgKzQ2OSw5IEBACiAJdHhfc3RyZWFtcyA9IGF0aDlrX2Ntbl9jb3VudF9zdHJlYW1zKGNvbW1vbi0+dHhfY2hhaW5tYXNrLCAyKTsKIAlyeF9zdHJlYW1zID0gYXRoOWtfY21uX2NvdW50X3N0cmVhbXMoY29tbW9uLT5yeF9jaGFpbm1hc2ssIDIpOwogCi0JYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19DT05GSUcsCi0JCSAgIlRYIHN0cmVhbXMgJWQsIFJYIHN0cmVhbXM6ICVkXG4iLAotCQkgIHR4X3N0cmVhbXMsIHJ4X3N0cmVhbXMpOworCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NPTkZJRywKKwkJIlRYIHN0cmVhbXMgJWQsIFJYIHN0cmVhbXM6ICVkXG4iLAorCQl0eF9zdHJlYW1zLCByeF9zdHJlYW1zKTsKIAogCWlmICh0eF9zdHJlYW1zICE9IHJ4X3N0cmVhbXMpIHsKIAkJaHRfaW5mby0+bWNzLnR4X3BhcmFtcyB8PSBJRUVFODAyMTFfSFRfTUNTX1RYX1JYX0RJRkY7CkBAIC01MDEsMzcgKzQ5NSwzMSBAQAogCiAJcHJpdi0+YmVhY29ucSA9IGF0aDlrX2h3X2JlYWNvbnFfc2V0dXAocHJpdi0+YWgpOwogCWlmIChwcml2LT5iZWFjb25xID09IC0xKSB7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRkFUQUwsCi0JCQkgICJVbmFibGUgdG8gc2V0dXAgQkVBQ09OIHhtaXQgcXVldWVcbiIpOworCQlhdGhfZXJyKGNvbW1vbiwgIlVuYWJsZSB0byBzZXR1cCBCRUFDT04geG1pdCBxdWV1ZVxuIik7CiAJCWdvdG8gZXJyOwogCX0KIAogCXByaXYtPmNhYnEgPSBhdGg5a19odGNfY2FicV9zZXR1cChwcml2KTsKIAlpZiAocHJpdi0+Y2FicSA9PSAtMSkgewotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0ZBVEFMLAotCQkJICAiVW5hYmxlIHRvIHNldHVwIENBQiB4bWl0IHF1ZXVlXG4iKTsKKwkJYXRoX2Vycihjb21tb24sICJVbmFibGUgdG8gc2V0dXAgQ0FCIHhtaXQgcXVldWVcbiIpOwogCQlnb3RvIGVycjsKIAl9CiAKIAlpZiAoIWF0aDlrX2h0Y190eHFfc2V0dXAocHJpdiwgV01FX0FDX0JFKSkgewotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0ZBVEFMLAotCQkJICAiVW5hYmxlIHRvIHNldHVwIHhtaXQgcXVldWUgZm9yIEJFIHRyYWZmaWNcbiIpOworCQlhdGhfZXJyKGNvbW1vbiwgIlVuYWJsZSB0byBzZXR1cCB4bWl0IHF1ZXVlIGZvciBCRSB0cmFmZmljXG4iKTsKIAkJZ290byBlcnI7CiAJfQogCiAJaWYgKCFhdGg5a19odGNfdHhxX3NldHVwKHByaXYsIFdNRV9BQ19CSykpIHsKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19GQVRBTCwKLQkJCSAgIlVuYWJsZSB0byBzZXR1cCB4bWl0IHF1ZXVlIGZvciBCSyB0cmFmZmljXG4iKTsKKwkJYXRoX2Vycihjb21tb24sICJVbmFibGUgdG8gc2V0dXAgeG1pdCBxdWV1ZSBmb3IgQksgdHJhZmZpY1xuIik7CiAJCWdvdG8gZXJyOwogCX0KIAlpZiAoIWF0aDlrX2h0Y190eHFfc2V0dXAocHJpdiwgV01FX0FDX1ZJKSkgewotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0ZBVEFMLAotCQkJICAiVW5hYmxlIHRvIHNldHVwIHhtaXQgcXVldWUgZm9yIFZJIHRyYWZmaWNcbiIpOworCQlhdGhfZXJyKGNvbW1vbiwgIlVuYWJsZSB0byBzZXR1cCB4bWl0IHF1ZXVlIGZvciBWSSB0cmFmZmljXG4iKTsKIAkJZ290byBlcnI7CiAJfQogCWlmICghYXRoOWtfaHRjX3R4cV9zZXR1cChwcml2LCBXTUVfQUNfVk8pKSB7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRkFUQUwsCi0JCQkgICJVbmFibGUgdG8gc2V0dXAgeG1pdCBxdWV1ZSBmb3IgVk8gdHJhZmZpY1xuIik7CisJCWF0aF9lcnIoY29tbW9uLCAiVW5hYmxlIHRvIHNldHVwIHhtaXQgcXVldWUgZm9yIFZPIHRyYWZmaWNcbiIpOwogCQlnb3RvIGVycjsKIAl9CiAKQEAgLTU0OSw5ICs1MzcsOSBAQAogCS8qIEdldCB0aGUgaGFyZHdhcmUga2V5IGNhY2hlIHNpemUuICovCiAJY29tbW9uLT5rZXltYXggPSBwcml2LT5haC0+Y2Fwcy5rZXljYWNoZV9zaXplOwogCWlmIChjb21tb24tPmtleW1heCA+IEFUSF9LRVlNQVgpIHsKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19BTlksCi0JCQkgICJXYXJuaW5nLCB1c2luZyBvbmx5ICV1IGVudHJpZXMgaW4gJXUga2V5IGNhY2hlXG4iLAotCQkJICBBVEhfS0VZTUFYLCBjb21tb24tPmtleW1heCk7CisJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0FOWSwKKwkJCSJXYXJuaW5nLCB1c2luZyBvbmx5ICV1IGVudHJpZXMgaW4gJXUga2V5IGNhY2hlXG4iLAorCQkJQVRIX0tFWU1BWCwgY29tbW9uLT5rZXltYXgpOwogCQljb21tb24tPmtleW1heCA9IEFUSF9LRVlNQVg7CiAJfQogCkBAIC02MjcsNyArNjE1LDggQEAKIH0KIAogc3RhdGljIGludCBhdGg5a19pbml0X3ByaXYoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LAotCQkJICAgdTE2IGRldmlkLCBjaGFyICpwcm9kdWN0KQorCQkJICAgdTE2IGRldmlkLCBjaGFyICpwcm9kdWN0LAorCQkJICAgdTMyIGRydl9pbmZvKQogewogCXN0cnVjdCBhdGhfaHcgKmFoID0gTlVMTDsKIAlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uOwpAQCAtNjQxLDYgKzYzMCw4IEBACiAKIAlhaC0+aHdfdmVyc2lvbi5kZXZpZCA9IGRldmlkOwogCWFoLT5od192ZXJzaW9uLnN1YnN5c2lkID0gMDsgLyogRklYTUUgKi8KKwlhaC0+aHdfdmVyc2lvbi51c2JkZXYgPSBkcnZfaW5mbzsKKwlhaC0+YWhfZmxhZ3MgfD0gQUhfVVNFX0VFUFJPTTsKIAlwcml2LT5haCA9IGFoOwogCiAJY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKGFoKTsKQEAgLTY1NiwxMyArNjQ3LDE1IEBACiAJc3Bpbl9sb2NrX2luaXQoJnByaXYtPnR4X2xvY2spOwogCW11dGV4X2luaXQoJnByaXYtPm11dGV4KTsKIAltdXRleF9pbml0KCZwcml2LT5odGNfcG1fbG9jayk7Ci0JdGFza2xldF9pbml0KCZwcml2LT53bWlfdGFza2xldCwgYXRoOWtfd21pX3Rhc2tsZXQsCisJdGFza2xldF9pbml0KCZwcml2LT5zd2JhX3Rhc2tsZXQsIGF0aDlrX3N3YmFfdGFza2xldCwKIAkJICAgICAodW5zaWduZWQgbG9uZylwcml2KTsKIAl0YXNrbGV0X2luaXQoJnByaXYtPnJ4X3Rhc2tsZXQsIGF0aDlrX3J4X3Rhc2tsZXQsCiAJCSAgICAgKHVuc2lnbmVkIGxvbmcpcHJpdik7Ci0JdGFza2xldF9pbml0KCZwcml2LT50eF90YXNrbGV0LCBhdGg5a190eF90YXNrbGV0LCAodW5zaWduZWQgbG9uZylwcml2KTsKKwl0YXNrbGV0X2luaXQoJnByaXYtPnR4X3Rhc2tsZXQsIGF0aDlrX3R4X3Rhc2tsZXQsCisJCSAgICAgKHVuc2lnbmVkIGxvbmcpcHJpdik7CiAJSU5JVF9ERUxBWUVEX1dPUksoJnByaXYtPmF0aDlrX2FuaV93b3JrLCBhdGg5a19hbmlfd29yayk7CiAJSU5JVF9XT1JLKCZwcml2LT5wc193b3JrLCBhdGg5a19wc193b3JrKTsKKwlJTklUX1dPUksoJnByaXYtPmZhdGFsX3dvcmssIGF0aDlrX2ZhdGFsX3dvcmspOwogCiAJLyoKIAkgKiBDYWNoZSBsaW5lIHNpemUgaXMgdXNlZCB0byBzaXplIGFuZCBhbGlnbiB2YXJpb3VzCkBAIC02NzMsMTYgKzY2NiwxNSBAQAogCiAJcmV0ID0gYXRoOWtfaHdfaW5pdChhaCk7CiAJaWYgKHJldCkgewotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0ZBVEFMLAotCQkJICAiVW5hYmxlIHRvIGluaXRpYWxpemUgaGFyZHdhcmU7ICIKLQkJCSAgImluaXRpYWxpemF0aW9uIHN0YXR1czogJWRcbiIsIHJldCk7CisJCWF0aF9lcnIoY29tbW9uLAorCQkJIlVuYWJsZSB0byBpbml0aWFsaXplIGhhcmR3YXJlOyBpbml0aWFsaXphdGlvbiBzdGF0dXM6ICVkXG4iLAorCQkJcmV0KTsKIAkJZ290byBlcnJfaHc7CiAJfQogCiAJcmV0ID0gYXRoOWtfaHRjX2luaXRfZGVidWcoYWgpOwogCWlmIChyZXQpIHsKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19GQVRBTCwKLQkJCSAgIlVuYWJsZSB0byBjcmVhdGUgZGVidWdmcyBmaWxlc1xuIik7CisJCWF0aF9lcnIoY29tbW9uLCAiVW5hYmxlIHRvIGNyZWF0ZSBkZWJ1Z2ZzIGZpbGVzXG4iKTsKIAkJZ290byBlcnJfZGVidWc7CiAJfQogCkBAIC03NjIsNyArNzU0LDcgQEAKIH0KIAogc3RhdGljIGludCBhdGg5a19pbml0X2RldmljZShzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsCi0JCQkgICAgIHUxNiBkZXZpZCwgY2hhciAqcHJvZHVjdCkKKwkJCSAgICAgdTE2IGRldmlkLCBjaGFyICpwcm9kdWN0LCB1MzIgZHJ2X2luZm8pCiB7CiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBwcml2LT5odzsKIAlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uOwpAQCAtNzcxLDcgKzc2Myw3IEBACiAJc3RydWN0IGF0aF9yZWd1bGF0b3J5ICpyZWc7CiAKIAkvKiBCcmluZyB1cCBkZXZpY2UgKi8KLQllcnJvciA9IGF0aDlrX2luaXRfcHJpdihwcml2LCBkZXZpZCwgcHJvZHVjdCk7CisJZXJyb3IgPSBhdGg5a19pbml0X3ByaXYocHJpdiwgZGV2aWQsIHByb2R1Y3QsIGRydl9pbmZvKTsKIAlpZiAoZXJyb3IgIT0gMCkKIAkJZ290byBlcnJfaW5pdDsKIApAQCAtODI5LDcgKzgyMSw3IEBACiB9CiAKIGludCBhdGg5a19odGNfcHJvYmVfZGV2aWNlKHN0cnVjdCBodGNfdGFyZ2V0ICpodGNfaGFuZGxlLCBzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkgICB1MTYgZGV2aWQsIGNoYXIgKnByb2R1Y3QpCisJCQkgICB1MTYgZGV2aWQsIGNoYXIgKnByb2R1Y3QsIHUzMiBkcnZfaW5mbykKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKIAlzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXY7CkBAIC04NTYsMTQgKzg0OCwxMSBAQAogCQlnb3RvIGVycl9mcmVlOwogCX0KIAotCXJldCA9IGF0aDlrX2luaXRfaHRjX3NlcnZpY2VzKHByaXYsIGRldmlkKTsKKwlyZXQgPSBhdGg5a19pbml0X2h0Y19zZXJ2aWNlcyhwcml2LCBkZXZpZCwgZHJ2X2luZm8pOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyX2luaXQ7CiAKLQkvKiBUaGUgZGV2aWNlIG1heSBoYXZlIGJlZW4gdW5wbHVnZ2VkIGVhcmxpZXIuICovCi0JcHJpdi0+b3BfZmxhZ3MgJj0gfk9QX1VOUExVR0dFRDsKLQotCXJldCA9IGF0aDlrX2luaXRfZGV2aWNlKHByaXYsIGRldmlkLCBwcm9kdWN0KTsKKwlyZXQgPSBhdGg5a19pbml0X2RldmljZShwcml2LCBkZXZpZCwgcHJvZHVjdCwgZHJ2X2luZm8pOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyX2luaXQ7CiAKQEAgLTg4Miw3ICs4NzEsNyBAQAogCiAJCS8qIENoZWNrIGlmIHRoZSBkZXZpY2UgaGFzIGJlZW4geWFua2VkIG91dC4gKi8KIAkJaWYgKGhvdHVucGx1ZykKLQkJCWh0Y19oYW5kbGUtPmRydl9wcml2LT5vcF9mbGFncyB8PSBPUF9VTlBMVUdHRUQ7CisJCQlodGNfaGFuZGxlLT5kcnZfcHJpdi0+YWgtPmFoX2ZsYWdzIHw9IEFIX1VOUExVR0dFRDsKIAogCQlhdGg5a19kZWluaXRfZGV2aWNlKGh0Y19oYW5kbGUtPmRydl9wcml2KTsKIAkJYXRoOWtfZGVpbml0X3dtaShodGNfaGFuZGxlLT5kcnZfcHJpdik7CkBAIC04OTksMTQgKzg4OCwxNSBAQAogCiBpbnQgYXRoOWtfaHRjX3Jlc3VtZShzdHJ1Y3QgaHRjX3RhcmdldCAqaHRjX2hhbmRsZSkKIHsKKwlzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYgPSBodGNfaGFuZGxlLT5kcnZfcHJpdjsKIAlpbnQgcmV0OwogCi0JcmV0ID0gYXRoOWtfaHRjX3dhaXRfZm9yX3RhcmdldChodGNfaGFuZGxlLT5kcnZfcHJpdik7CisJcmV0ID0gYXRoOWtfaHRjX3dhaXRfZm9yX3RhcmdldChwcml2KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gYXRoOWtfaW5pdF9odGNfc2VydmljZXMoaHRjX2hhbmRsZS0+ZHJ2X3ByaXYsCi0JCQkgICAgICBodGNfaGFuZGxlLT5kcnZfcHJpdi0+YWgtPmh3X3ZlcnNpb24uZGV2aWQpOworCXJldCA9IGF0aDlrX2luaXRfaHRjX3NlcnZpY2VzKHByaXYsIHByaXYtPmFoLT5od192ZXJzaW9uLmRldmlkLAorCQkJCSAgICAgIHByaXYtPmFoLT5od192ZXJzaW9uLnVzYmRldik7CiAJcmV0dXJuIHJldDsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jCmluZGV4IDUxOTc3Y2EuLjg0NWI0YzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmMKQEAgLTI0LDEyICsyNCwxMiBAQAogLyogVXRpbGl0aWVzICovCiAvKioqKioqKioqKioqKi8KIAotc3RhdGljIHZvaWQgYXRoX3VwZGF0ZV90eHBvdyhzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYpCit2b2lkIGF0aF91cGRhdGVfdHhwb3coc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2KQogewogCXN0cnVjdCBhdGhfaHcgKmFoID0gcHJpdi0+YWg7CiAKIAlpZiAocHJpdi0+Y3VydHhwb3cgIT0gcHJpdi0+dHhwb3dsaW1pdCkgewotCQlhdGg5a19od19zZXRfdHhwb3dlcmxpbWl0KGFoLCBwcml2LT50eHBvd2xpbWl0KTsKKwkJYXRoOWtfaHdfc2V0X3R4cG93ZXJsaW1pdChhaCwgcHJpdi0+dHhwb3dsaW1pdCwgZmFsc2UpOwogCQkvKiByZWFkIGJhY2sgaW4gY2FzZSB2YWx1ZSBpcyBjbGFtcGVkICovCiAJCXByaXYtPmN1cnR4cG93ID0gYXRoOWtfaHdfcmVndWxhdG9yeShhaCktPnBvd2VyX2xpbWl0OwogCX0KQEAgLTExNiw2ICsxMTYsNjAgQEAKIAlhdGg5a19odGNfc2V0cG93ZXIocHJpdiwgQVRIOUtfUE1fTkVUV09SS19TTEVFUCk7CiB9CiAKK3ZvaWQgYXRoOWtfaHRjX3Jlc2V0KHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdikKK3sKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHByaXYtPmFoOworCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCA9IHByaXYtPmh3LT5jb25mLmNoYW5uZWw7CisJc3RydWN0IGF0aDlrX2h3X2NhbF9kYXRhICpjYWxkYXRhOworCWVudW0gaHRjX3BoeW1vZGUgbW9kZTsKKwlfX2JlMTYgaHRjX21vZGU7CisJdTggY21kX3JzcDsKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOworCWF0aDlrX2h0Y19wc193YWtldXAocHJpdik7CisKKwlpZiAocHJpdi0+b3BfZmxhZ3MgJiBPUF9BU1NPQ0lBVEVEKQorCQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnByaXYtPmF0aDlrX2FuaV93b3JrKTsKKworCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyhwcml2LT5odyk7CisJaHRjX3N0b3AocHJpdi0+aHRjKTsKKwlXTUlfQ01EKFdNSV9ESVNBQkxFX0lOVFJfQ01ESUQpOworCVdNSV9DTUQoV01JX0RSQUlOX1RYUV9BTExfQ01ESUQpOworCVdNSV9DTUQoV01JX1NUT1BfUkVDVl9DTURJRCk7CisKKwljYWxkYXRhID0gJnByaXYtPmNhbGRhdGFbY2hhbm5lbC0+aHdfdmFsdWVdOworCXJldCA9IGF0aDlrX2h3X3Jlc2V0KGFoLCBhaC0+Y3VyY2hhbiwgY2FsZGF0YSwgZmFsc2UpOworCWlmIChyZXQpIHsKKwkJYXRoX2Vycihjb21tb24sCisJCQkiVW5hYmxlIHRvIHJlc2V0IGRldmljZSAoJXUgTWh6KSByZXNldCBzdGF0dXMgJWRcbiIsCisJCQljaGFubmVsLT5jZW50ZXJfZnJlcSwgcmV0KTsKKwl9CisKKwlhdGhfdXBkYXRlX3R4cG93KHByaXYpOworCisJV01JX0NNRChXTUlfU1RBUlRfUkVDVl9DTURJRCk7CisJYXRoOWtfaG9zdF9yeF9pbml0KHByaXYpOworCisJbW9kZSA9IGF0aDlrX2h0Y19nZXRfY3VybW9kZShwcml2LCBhaC0+Y3VyY2hhbik7CisJaHRjX21vZGUgPSBjcHVfdG9fYmUxNihtb2RlKTsKKwlXTUlfQ01EX0JVRihXTUlfU0VUX01PREVfQ01ESUQsICZodGNfbW9kZSk7CisKKwlXTUlfQ01EKFdNSV9FTkFCTEVfSU5UUl9DTURJRCk7CisJaHRjX3N0YXJ0KHByaXYtPmh0Yyk7CisKKwlpZiAocHJpdi0+b3BfZmxhZ3MgJiBPUF9BU1NPQ0lBVEVEKSB7CisJCWF0aDlrX2h0Y19iZWFjb25fY29uZmlnKHByaXYsIHByaXYtPnZpZik7CisJCWF0aF9zdGFydF9hbmkocHJpdik7CisJfQorCisJaWVlZTgwMjExX3dha2VfcXVldWVzKHByaXYtPmh3KTsKKworCWF0aDlrX2h0Y19wc19yZXN0b3JlKHByaXYpOworCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOworfQorCiBzdGF0aWMgaW50IGF0aDlrX2h0Y19zZXRfY2hhbm5lbChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsCiAJCQkJIHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCSBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqaGNoYW4pCkBAIC0xMjMsNyArMTc3LDcgQEAKIAlzdHJ1Y3QgYXRoX2h3ICphaCA9IHByaXYtPmFoOwogCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOwogCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZjb21tb24tPmh3LT5jb25mOwotCWJvb2wgZmFzdGNjID0gdHJ1ZTsKKwlib29sIGZhc3RjYzsKIAlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwgPSBody0+Y29uZi5jaGFubmVsOwogCXN0cnVjdCBhdGg5a19od19jYWxfZGF0YSAqY2FsZGF0YTsKIAllbnVtIGh0Y19waHltb2RlIG1vZGU7CkBAIC0xMzQsOCArMTg4LDcgQEAKIAlpZiAocHJpdi0+b3BfZmxhZ3MgJiBPUF9JTlZBTElEKQogCQlyZXR1cm4gLUVJTzsKIAotCWlmIChwcml2LT5vcF9mbGFncyAmIE9QX0ZVTExfUkVTRVQpCi0JCWZhc3RjYyA9IGZhbHNlOworCWZhc3RjYyA9ICEhKGh3LT5jb25mLmZsYWdzICYgSUVFRTgwMjExX0NPTkZfT0ZGQ0hBTk5FTCk7CiAKIAlhdGg5a19odGNfcHNfd2FrZXVwKHByaXYpOwogCWh0Y19zdG9wKHByaXYtPmh0Yyk7CkBAIC0xNDMsMTggKzE5NiwxOCBAQAogCVdNSV9DTUQoV01JX0RSQUlOX1RYUV9BTExfQ01ESUQpOwogCVdNSV9DTUQoV01JX1NUT1BfUkVDVl9DTURJRCk7CiAKLQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0NPTkZJRywKLQkJICAiKCV1IE1IeikgLT4gKCV1IE1IeiksIEhUOiAlZCwgSFQ0MDogJWQgZmFzdGNjOiAlZFxuIiwKLQkJICBwcml2LT5haC0+Y3VyY2hhbi0+Y2hhbm5lbCwKLQkJICBjaGFubmVsLT5jZW50ZXJfZnJlcSwgY29uZl9pc19odChjb25mKSwgY29uZl9pc19odDQwKGNvbmYpLAotCQkgIGZhc3RjYyk7CisJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ09ORklHLAorCQkiKCV1IE1IeikgLT4gKCV1IE1IeiksIEhUOiAlZCwgSFQ0MDogJWQgZmFzdGNjOiAlZFxuIiwKKwkJcHJpdi0+YWgtPmN1cmNoYW4tPmNoYW5uZWwsCisJCWNoYW5uZWwtPmNlbnRlcl9mcmVxLCBjb25mX2lzX2h0KGNvbmYpLCBjb25mX2lzX2h0NDAoY29uZiksCisJCWZhc3RjYyk7CiAKIAljYWxkYXRhID0gJnByaXYtPmNhbGRhdGFbY2hhbm5lbC0+aHdfdmFsdWVdOwogCXJldCA9IGF0aDlrX2h3X3Jlc2V0KGFoLCBoY2hhbiwgY2FsZGF0YSwgZmFzdGNjKTsKIAlpZiAocmV0KSB7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRkFUQUwsCi0JCQkgICJVbmFibGUgdG8gcmVzZXQgY2hhbm5lbCAoJXUgTWh6KSAiCi0JCQkgICJyZXNldCBzdGF0dXMgJWRcbiIsIGNoYW5uZWwtPmNlbnRlcl9mcmVxLCByZXQpOworCQlhdGhfZXJyKGNvbW1vbiwKKwkJCSJVbmFibGUgdG8gcmVzZXQgY2hhbm5lbCAoJXUgTWh6KSByZXNldCBzdGF0dXMgJWRcbiIsCisJCQljaGFubmVsLT5jZW50ZXJfZnJlcSwgcmV0KTsKIAkJZ290byBlcnI7CiAJfQogCkBAIC0xNzcsMjMgKzIzMCw0MyBAQAogCQlnb3RvIGVycjsKIAogCWh0Y19zdGFydChwcml2LT5odGMpOwotCi0JcHJpdi0+b3BfZmxhZ3MgJj0gfk9QX0ZVTExfUkVTRVQ7CiBlcnI6CiAJYXRoOWtfaHRjX3BzX3Jlc3RvcmUocHJpdik7CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBhdGg5a19odGNfYWRkX21vbml0b3JfaW50ZXJmYWNlKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdikKK3N0YXRpYyB2b2lkIF9fYXRoOWtfaHRjX3JlbW92ZV9tb25pdG9yX2ludGVyZmFjZShzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYpCiB7CiAJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihwcml2LT5haCk7CiAJc3RydWN0IGF0aDlrX2h0Y190YXJnZXRfdmlmIGh2aWY7CiAJaW50IHJldCA9IDA7CiAJdTggY21kX3JzcDsKIAorCW1lbXNldCgmaHZpZiwgMCwgc2l6ZW9mKHN0cnVjdCBhdGg5a19odGNfdGFyZ2V0X3ZpZikpOworCW1lbWNweSgmaHZpZi5teWFkZHIsIGNvbW1vbi0+bWFjYWRkciwgRVRIX0FMRU4pOworCWh2aWYuaW5kZXggPSAwOyAvKiBTaG91bGQgZG8gZm9yIG5vdyAqLworCVdNSV9DTURfQlVGKFdNSV9WQVBfUkVNT1ZFX0NNRElELCAmaHZpZik7CisJcHJpdi0+bnZpZnMtLTsKK30KKworc3RhdGljIGludCBhdGg5a19odGNfYWRkX21vbml0b3JfaW50ZXJmYWNlKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdikKK3sKKwlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKHByaXYtPmFoKTsKKwlzdHJ1Y3QgYXRoOWtfaHRjX3RhcmdldF92aWYgaHZpZjsKKwlzdHJ1Y3QgYXRoOWtfaHRjX3RhcmdldF9zdGEgdHN0YTsKKwlpbnQgcmV0ID0gMDsKKwl1OCBjbWRfcnNwOworCiAJaWYgKHByaXYtPm52aWZzID4gMCkKIAkJcmV0dXJuIC1FTk9CVUZTOwogCisJaWYgKHByaXYtPm5zdGF0aW9ucyA+PSBBVEg5S19IVENfTUFYX1NUQSkKKwkJcmV0dXJuIC1FTk9CVUZTOworCisJLyoKKwkgKiBBZGQgYW4gaW50ZXJmYWNlLgorCSAqLworCiAJbWVtc2V0KCZodmlmLCAwLCBzaXplb2Yoc3RydWN0IGF0aDlrX2h0Y190YXJnZXRfdmlmKSk7CiAJbWVtY3B5KCZodmlmLm15YWRkciwgY29tbW9uLT5tYWNhZGRyLCBFVEhfQUxFTik7CiAKQEAgLTIwNiwyMyArMjc5LDU3IEBACiAJCXJldHVybiByZXQ7CiAKIAlwcml2LT5udmlmcysrOworCisJLyoKKwkgKiBBc3NvY2lhdGUgYSBzdGF0aW9uIHdpdGggdGhlIGludGVyZmFjZSBmb3IgcGFja2V0IGluamVjdGlvbi4KKwkgKi8KKworCW1lbXNldCgmdHN0YSwgMCwgc2l6ZW9mKHN0cnVjdCBhdGg5a19odGNfdGFyZ2V0X3N0YSkpOworCisJbWVtY3B5KCZ0c3RhLm1hY2FkZHIsIGNvbW1vbi0+bWFjYWRkciwgRVRIX0FMRU4pOworCisJdHN0YS5pc192aWZfc3RhID0gMTsKKwl0c3RhLnN0YV9pbmRleCA9IHByaXYtPm5zdGF0aW9uczsKKwl0c3RhLnZpZl9pbmRleCA9IGh2aWYuaW5kZXg7CisJdHN0YS5tYXhhbXBkdSA9IDB4ZmZmZjsKKworCVdNSV9DTURfQlVGKFdNSV9OT0RFX0NSRUFURV9DTURJRCwgJnRzdGEpOworCWlmIChyZXQpIHsKKwkJYXRoX2Vycihjb21tb24sICJVbmFibGUgdG8gYWRkIHN0YXRpb24gZW50cnkgZm9yIG1vbml0b3IgbW9kZVxuIik7CisJCWdvdG8gZXJyX3ZpZjsKKwl9CisKKwlwcml2LT5uc3RhdGlvbnMrKzsKKwogCXJldHVybiAwOworCitlcnJfdmlmOgorCS8qCisJICogUmVtb3ZlIHRoZSBpbnRlcmZhY2UgZnJvbSB0aGUgdGFyZ2V0LgorCSAqLworCV9fYXRoOWtfaHRjX3JlbW92ZV9tb25pdG9yX2ludGVyZmFjZShwcml2KTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGF0aDlrX2h0Y19yZW1vdmVfbW9uaXRvcl9pbnRlcmZhY2Uoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2KQogewogCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24ocHJpdi0+YWgpOwotCXN0cnVjdCBhdGg5a19odGNfdGFyZ2V0X3ZpZiBodmlmOwogCWludCByZXQgPSAwOwotCXU4IGNtZF9yc3A7CisJdTggY21kX3JzcCwgc3RhX2lkeDsKIAotCW1lbXNldCgmaHZpZiwgMCwgc2l6ZW9mKHN0cnVjdCBhdGg5a19odGNfdGFyZ2V0X3ZpZikpOwotCW1lbWNweSgmaHZpZi5teWFkZHIsIGNvbW1vbi0+bWFjYWRkciwgRVRIX0FMRU4pOwotCWh2aWYuaW5kZXggPSAwOyAvKiBTaG91bGQgZG8gZm9yIG5vdyAqLwotCVdNSV9DTURfQlVGKFdNSV9WQVBfUkVNT1ZFX0NNRElELCAmaHZpZik7Ci0JcHJpdi0+bnZpZnMtLTsKKwlfX2F0aDlrX2h0Y19yZW1vdmVfbW9uaXRvcl9pbnRlcmZhY2UocHJpdik7CiAKLQlyZXR1cm4gcmV0OworCXN0YV9pZHggPSAwOyAvKiBPbmx5IHNpbmdsZSBpbnRlcmZhY2UsIGZvciBub3cgKi8KKworCVdNSV9DTURfQlVGKFdNSV9OT0RFX1JFTU9WRV9DTURJRCwgJnN0YV9pZHgpOworCWlmIChyZXQpIHsKKwkJYXRoX2Vycihjb21tb24sICJVbmFibGUgdG8gcmVtb3ZlIHN0YXRpb24gZW50cnkgZm9yIG1vbml0b3IgbW9kZVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcHJpdi0+bnN0YXRpb25zLS07CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBhdGg5a19odGNfYWRkX3N0YXRpb24oc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LApAQCAtMjYzLDE1ICszNzAsMTYgQEAKIAlXTUlfQ01EX0JVRihXTUlfTk9ERV9DUkVBVEVfQ01ESUQsICZ0c3RhKTsKIAlpZiAocmV0KSB7CiAJCWlmIChzdGEpCi0JCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0ZBVEFMLAotCQkJICAiVW5hYmxlIHRvIGFkZCBzdGF0aW9uIGVudHJ5IGZvcjogJXBNXG4iLCBzdGEtPmFkZHIpOworCQkJYXRoX2Vycihjb21tb24sCisJCQkJIlVuYWJsZSB0byBhZGQgc3RhdGlvbiBlbnRyeSBmb3I6ICVwTVxuIiwKKwkJCQlzdGEtPmFkZHIpOwogCQlyZXR1cm4gcmV0OwogCX0KIAogCWlmIChzdGEpCi0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQ09ORklHLAotCQkJICAiQWRkZWQgYSBzdGF0aW9uIGVudHJ5IGZvcjogJXBNIChpZHg6ICVkKVxuIiwKLQkJCSAgc3RhLT5hZGRyLCB0c3RhLnN0YV9pbmRleCk7CisJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NPTkZJRywKKwkJCSJBZGRlZCBhIHN0YXRpb24gZW50cnkgZm9yOiAlcE0gKGlkeDogJWQpXG4iLAorCQkJc3RhLT5hZGRyLCB0c3RhLnN0YV9pbmRleCk7CiAKIAlwcml2LT5uc3RhdGlvbnMrKzsKIAlyZXR1cm4gMDsKQEAgLTI5NiwxNiArNDA0LDE2IEBACiAJV01JX0NNRF9CVUYoV01JX05PREVfUkVNT1ZFX0NNRElELCAmc3RhX2lkeCk7CiAJaWYgKHJldCkgewogCQlpZiAoc3RhKQotCQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19GQVRBTCwKLQkJCSAgIlVuYWJsZSB0byByZW1vdmUgc3RhdGlvbiBlbnRyeSBmb3I6ICVwTVxuIiwKLQkJCSAgc3RhLT5hZGRyKTsKKwkJCWF0aF9lcnIoY29tbW9uLAorCQkJCSJVbmFibGUgdG8gcmVtb3ZlIHN0YXRpb24gZW50cnkgZm9yOiAlcE1cbiIsCisJCQkJc3RhLT5hZGRyKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKIAlpZiAoc3RhKQotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0NPTkZJRywKLQkJCSAgIlJlbW92ZWQgYSBzdGF0aW9uIGVudHJ5IGZvcjogJXBNIChpZHg6ICVkKVxuIiwKLQkJCSAgc3RhLT5hZGRyLCBzdGFfaWR4KTsKKwkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ09ORklHLAorCQkJIlJlbW92ZWQgYSBzdGF0aW9uIGVudHJ5IGZvcjogJXBNIChpZHg6ICVkKVxuIiwKKwkJCXN0YS0+YWRkciwgc3RhX2lkeCk7CiAKIAlwcml2LT5uc3RhdGlvbnMtLTsKIAlyZXR1cm4gMDsKQEAgLTM5MCw4ICs0OTgsOCBAQAogCiAJV01JX0NNRF9CVUYoV01JX1JDX1JBVEVfVVBEQVRFX0NNRElELCB0cmF0ZSk7CiAJaWYgKHJldCkgewotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0ZBVEFMLAotCQkJICAiVW5hYmxlIHRvIGluaXRpYWxpemUgUmF0ZSBpbmZvcm1hdGlvbiBvbiB0YXJnZXRcbiIpOworCQlhdGhfZXJyKGNvbW1vbiwKKwkJCSJVbmFibGUgdG8gaW5pdGlhbGl6ZSBSYXRlIGluZm9ybWF0aW9uIG9uIHRhcmdldFxuIik7CiAJfQogCiAJcmV0dXJuIHJldDsKQEAgLTQwOCw5ICs1MTYsOSBAQAogCWF0aDlrX2h0Y19zZXR1cF9yYXRlKHByaXYsIHN0YSwgJnRyYXRlKTsKIAlyZXQgPSBhdGg5a19odGNfc2VuZF9yYXRlX2NtZChwcml2LCAmdHJhdGUpOwogCWlmICghcmV0KQotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0NPTkZJRywKLQkJCSAgIlVwZGF0ZWQgdGFyZ2V0IHN0YTogJXBNLCByYXRlIGNhcHM6IDB4JVhcbiIsCi0JCQkgIHN0YS0+YWRkciwgYmUzMl90b19jcHUodHJhdGUuY2FwZmxhZ3MpKTsKKwkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ09ORklHLAorCQkJIlVwZGF0ZWQgdGFyZ2V0IHN0YTogJXBNLCByYXRlIGNhcHM6IDB4JVhcbiIsCisJCQlzdGEtPmFkZHIsIGJlMzJfdG9fY3B1KHRyYXRlLmNhcGZsYWdzKSk7CiB9CiAKIHN0YXRpYyB2b2lkIGF0aDlrX2h0Y191cGRhdGVfcmF0ZShzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsCkBAIC00MzUsOSArNTQzLDkgQEAKIAogCXJldCA9IGF0aDlrX2h0Y19zZW5kX3JhdGVfY21kKHByaXYsICZ0cmF0ZSk7CiAJaWYgKCFyZXQpCi0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQ09ORklHLAotCQkJICAiVXBkYXRlZCB0YXJnZXQgc3RhOiAlcE0sIHJhdGUgY2FwczogMHglWFxuIiwKLQkJCSAgYnNzX2NvbmYtPmJzc2lkLCBiZTMyX3RvX2NwdSh0cmF0ZS5jYXBmbGFncykpOworCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19DT05GSUcsCisJCQkiVXBkYXRlZCB0YXJnZXQgc3RhOiAlcE0sIHJhdGUgY2FwczogMHglWFxuIiwKKwkJCWJzc19jb25mLT5ic3NpZCwgYmUzMl90b19jcHUodHJhdGUuY2FwZmxhZ3MpKTsKIH0KIAogc3RhdGljIGludCBhdGg5a19odGNfdHhfYWdncl9vcGVyKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiwKQEAgLTQ2NCwxNCArNTcyLDE0IEBACiAKIAlXTUlfQ01EX0JVRihXTUlfVFhfQUdHUl9FTkFCTEVfQ01ESUQsICZhZ2dyKTsKIAlpZiAocmV0KQotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0NPTkZJRywKLQkJCSAgIlVuYWJsZSB0byAlcyBUWCBhZ2dyZWdhdGlvbiBmb3IgKCVwTSwgJWQpXG4iLAotCQkJICAoYWdnci5hZ2dyX2VuYWJsZSkgPyAic3RhcnQiIDogInN0b3AiLCBzdGEtPmFkZHIsIHRpZCk7CisJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NPTkZJRywKKwkJCSJVbmFibGUgdG8gJXMgVFggYWdncmVnYXRpb24gZm9yICglcE0sICVkKVxuIiwKKwkJCShhZ2dyLmFnZ3JfZW5hYmxlKSA/ICJzdGFydCIgOiAic3RvcCIsIHN0YS0+YWRkciwgdGlkKTsKIAllbHNlCi0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQ09ORklHLAotCQkJICAiJXMgVFggYWdncmVnYXRpb24gZm9yICglcE0sICVkKVxuIiwKLQkJCSAgKGFnZ3IuYWdncl9lbmFibGUpID8gIlN0YXJ0aW5nIiA6ICJTdG9wcGluZyIsCi0JCQkgIHN0YS0+YWRkciwgdGlkKTsKKwkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ09ORklHLAorCQkJIiVzIFRYIGFnZ3JlZ2F0aW9uIGZvciAoJXBNLCAlZClcbiIsCisJCQkoYWdnci5hZ2dyX2VuYWJsZSkgPyAiU3RhcnRpbmciIDogIlN0b3BwaW5nIiwKKwkJCXN0YS0+YWRkciwgdGlkKTsKIAogCXNwaW5fbG9ja19iaCgmcHJpdi0+dHhfbG9jayk7CiAJaXN0YS0+dGlkX3N0YXRlW3RpZF0gPSAoYWdnci5hZ2dyX2VuYWJsZSAmJiAhcmV0KSA/IEFHR1JfU1RBUlQgOiBBR0dSX1NUT1A7CkBAIC02ODksNyArNzk3LDcgQEAKIC8qIEFOSSAqLwogLyoqKioqKiovCiAKLXN0YXRpYyB2b2lkIGF0aF9zdGFydF9hbmkoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2KQordm9pZCBhdGhfc3RhcnRfYW5pKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdikKIHsKIAlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKHByaXYtPmFoKTsKIAl1bnNpZ25lZCBsb25nIHRpbWVzdGFtcCA9IGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyk7CkBAIC03MjQsNyArODMyLDcgQEAKIAkvKiBMb25nIGNhbGlicmF0aW9uIHJ1bnMgaW5kZXBlbmRlbnRseSBvZiBzaG9ydCBjYWxpYnJhdGlvbi4gKi8KIAlpZiAoKHRpbWVzdGFtcCAtIGNvbW1vbi0+YW5pLmxvbmdjYWxfdGltZXIpID49IEFUSF9MT05HX0NBTElOVEVSVkFMKSB7CiAJCWxvbmdjYWwgPSB0cnVlOwotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0FOSSwgImxvbmdjYWwgQCVsdVxuIiwgamlmZmllcyk7CisJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0FOSSwgImxvbmdjYWwgQCVsdVxuIiwgamlmZmllcyk7CiAJCWNvbW1vbi0+YW5pLmxvbmdjYWxfdGltZXIgPSB0aW1lc3RhbXA7CiAJfQogCkBAIC03MzMsOCArODQxLDggQEAKIAkJaWYgKCh0aW1lc3RhbXAgLSBjb21tb24tPmFuaS5zaG9ydGNhbF90aW1lcikgPj0KIAkJICAgIHNob3J0X2NhbF9pbnRlcnZhbCkgewogCQkJc2hvcnRjYWwgPSB0cnVlOwotCQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19BTkksCi0JCQkJICAic2hvcnRjYWwgQCVsdVxuIiwgamlmZmllcyk7CisJCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19BTkksCisJCQkJInNob3J0Y2FsIEAlbHVcbiIsIGppZmZpZXMpOwogCQkJY29tbW9uLT5hbmkuc2hvcnRjYWxfdGltZXIgPSB0aW1lc3RhbXA7CiAJCQljb21tb24tPmFuaS5yZXNldGNhbF90aW1lciA9IHRpbWVzdGFtcDsKIAkJfQpAQCAtNzg4LDMxNyArODk2LDYgQEAKIAkJCQkgICAgIG1zZWNzX3RvX2ppZmZpZXMoY2FsX2ludGVydmFsKSk7CiB9CiAKLS8qKioqKioqLwotLyogTEVEICovCi0vKioqKioqKi8KLQotc3RhdGljIHZvaWQgYXRoOWtfbGVkX2JsaW5rX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYsCi0JCQkJCQkgICBhdGg5a19sZWRfYmxpbmtfd29yay53b3JrKTsKLQotCWlmICghKHByaXYtPm9wX2ZsYWdzICYgT1BfTEVEX0FTU09DSUFURUQpKQotCQlyZXR1cm47Ci0KLQlpZiAoKHByaXYtPmxlZF9vbl9kdXJhdGlvbiA9PSBBVEhfTEVEX09OX0RVUkFUSU9OX0lETEUpIHx8Ci0JICAgIChwcml2LT5sZWRfb2ZmX2R1cmF0aW9uID09IEFUSF9MRURfT0ZGX0RVUkFUSU9OX0lETEUpKQotCQlhdGg5a19od19zZXRfZ3Bpbyhwcml2LT5haCwgcHJpdi0+YWgtPmxlZF9waW4sIDApOwotCWVsc2UKLQkJYXRoOWtfaHdfc2V0X2dwaW8ocHJpdi0+YWgsIHByaXYtPmFoLT5sZWRfcGluLAotCQkJCSAgKHByaXYtPm9wX2ZsYWdzICYgT1BfTEVEX09OKSA/IDEgOiAwKTsKLQotCWllZWU4MDIxMV9xdWV1ZV9kZWxheWVkX3dvcmsocHJpdi0+aHcsCi0JCQkJICAgICAmcHJpdi0+YXRoOWtfbGVkX2JsaW5rX3dvcmssCi0JCQkJICAgICAocHJpdi0+b3BfZmxhZ3MgJiBPUF9MRURfT04pID8KLQkJCQkgICAgIG1zZWNzX3RvX2ppZmZpZXMocHJpdi0+bGVkX29mZl9kdXJhdGlvbikgOgotCQkJCSAgICAgbXNlY3NfdG9famlmZmllcyhwcml2LT5sZWRfb25fZHVyYXRpb24pKTsKLQotCXByaXYtPmxlZF9vbl9kdXJhdGlvbiA9IHByaXYtPmxlZF9vbl9jbnQgPwotCQltYXgoKEFUSF9MRURfT05fRFVSQVRJT05fSURMRSAtIHByaXYtPmxlZF9vbl9jbnQpLCAyNSkgOgotCQlBVEhfTEVEX09OX0RVUkFUSU9OX0lETEU7Ci0JcHJpdi0+bGVkX29mZl9kdXJhdGlvbiA9IHByaXYtPmxlZF9vZmZfY250ID8KLQkJbWF4KChBVEhfTEVEX09GRl9EVVJBVElPTl9JRExFIC0gcHJpdi0+bGVkX29mZl9jbnQpLCAxMCkgOgotCQlBVEhfTEVEX09GRl9EVVJBVElPTl9JRExFOwotCXByaXYtPmxlZF9vbl9jbnQgPSBwcml2LT5sZWRfb2ZmX2NudCA9IDA7Ci0KLQlpZiAocHJpdi0+b3BfZmxhZ3MgJiBPUF9MRURfT04pCi0JCXByaXYtPm9wX2ZsYWdzICY9IH5PUF9MRURfT047Ci0JZWxzZQotCQlwcml2LT5vcF9mbGFncyB8PSBPUF9MRURfT047Ci19Ci0KLXN0YXRpYyB2b2lkIGF0aDlrX2xlZF9icmlnaHRuZXNzX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBhdGhfbGVkICpsZWQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGF0aF9sZWQsCi0JCQkJCSAgIGJyaWdodG5lc3Nfd29yay53b3JrKTsKLQlzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYgPSBsZWQtPnByaXY7Ci0KLQlzd2l0Y2ggKGxlZC0+YnJpZ2h0bmVzcykgewotCWNhc2UgTEVEX09GRjoKLQkJaWYgKGxlZC0+bGVkX3R5cGUgPT0gQVRIX0xFRF9BU1NPQyB8fAotCQkgICAgbGVkLT5sZWRfdHlwZSA9PSBBVEhfTEVEX1JBRElPKSB7Ci0JCQlhdGg5a19od19zZXRfZ3Bpbyhwcml2LT5haCwgcHJpdi0+YWgtPmxlZF9waW4sCi0JCQkJCSAgKGxlZC0+bGVkX3R5cGUgPT0gQVRIX0xFRF9SQURJTykpOwotCQkJcHJpdi0+b3BfZmxhZ3MgJj0gfk9QX0xFRF9BU1NPQ0lBVEVEOwotCQkJaWYgKGxlZC0+bGVkX3R5cGUgPT0gQVRIX0xFRF9SQURJTykKLQkJCQlwcml2LT5vcF9mbGFncyAmPSB+T1BfTEVEX09OOwotCQl9IGVsc2UgewotCQkJcHJpdi0+bGVkX29mZl9jbnQrKzsKLQkJfQotCQlicmVhazsKLQljYXNlIExFRF9GVUxMOgotCQlpZiAobGVkLT5sZWRfdHlwZSA9PSBBVEhfTEVEX0FTU09DKSB7Ci0JCQlwcml2LT5vcF9mbGFncyB8PSBPUF9MRURfQVNTT0NJQVRFRDsKLQkJCWllZWU4MDIxMV9xdWV1ZV9kZWxheWVkX3dvcmsocHJpdi0+aHcsCi0JCQkJCSAgICAgJnByaXYtPmF0aDlrX2xlZF9ibGlua193b3JrLCAwKTsKLQkJfSBlbHNlIGlmIChsZWQtPmxlZF90eXBlID09IEFUSF9MRURfUkFESU8pIHsKLQkJCWF0aDlrX2h3X3NldF9ncGlvKHByaXYtPmFoLCBwcml2LT5haC0+bGVkX3BpbiwgMCk7Ci0JCQlwcml2LT5vcF9mbGFncyB8PSBPUF9MRURfT047Ci0JCX0gZWxzZSB7Ci0JCQlwcml2LT5sZWRfb25fY250Kys7Ci0JCX0KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBhdGg5a19sZWRfYnJpZ2h0bmVzcyhzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwKLQkJCQkgZW51bSBsZWRfYnJpZ2h0bmVzcyBicmlnaHRuZXNzKQotewotCXN0cnVjdCBhdGhfbGVkICpsZWQgPSBjb250YWluZXJfb2YobGVkX2NkZXYsIHN0cnVjdCBhdGhfbGVkLCBsZWRfY2Rldik7Ci0Jc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2ID0gbGVkLT5wcml2OwotCi0JbGVkLT5icmlnaHRuZXNzID0gYnJpZ2h0bmVzczsKLQlpZiAoIShwcml2LT5vcF9mbGFncyAmIE9QX0xFRF9ERUlOSVQpKQotCQlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKHByaXYtPmh3LAotCQkJCQkgICAgICZsZWQtPmJyaWdodG5lc3Nfd29yaywgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGF0aDlrX2xlZF9zdG9wX2JyaWdodG5lc3Moc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2KQotewotCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcHJpdi0+cmFkaW9fbGVkLmJyaWdodG5lc3Nfd29yayk7Ci0JY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZwcml2LT5hc3NvY19sZWQuYnJpZ2h0bmVzc193b3JrKTsKLQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnByaXYtPnR4X2xlZC5icmlnaHRuZXNzX3dvcmspOwotCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcHJpdi0+cnhfbGVkLmJyaWdodG5lc3Nfd29yayk7Ci19Ci0KLXN0YXRpYyBpbnQgYXRoOWtfcmVnaXN0ZXJfbGVkKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiwgc3RydWN0IGF0aF9sZWQgKmxlZCwKLQkJCSAgICAgIGNoYXIgKnRyaWdnZXIpCi17Ci0JaW50IHJldDsKLQotCWxlZC0+cHJpdiA9IHByaXY7Ci0JbGVkLT5sZWRfY2Rldi5uYW1lID0gbGVkLT5uYW1lOwotCWxlZC0+bGVkX2NkZXYuZGVmYXVsdF90cmlnZ2VyID0gdHJpZ2dlcjsKLQlsZWQtPmxlZF9jZGV2LmJyaWdodG5lc3Nfc2V0ID0gYXRoOWtfbGVkX2JyaWdodG5lc3M7Ci0KLQlyZXQgPSBsZWRfY2xhc3NkZXZfcmVnaXN0ZXIod2lwaHlfZGV2KHByaXYtPmh3LT53aXBoeSksICZsZWQtPmxlZF9jZGV2KTsKLQlpZiAocmV0KQotCQlhdGhfcHJpbnQoYXRoOWtfaHdfY29tbW9uKHByaXYtPmFoKSwgQVRIX0RCR19GQVRBTCwKLQkJCSAgIkZhaWxlZCB0byByZWdpc3RlciBsZWQ6JXMiLCBsZWQtPm5hbWUpOwotCWVsc2UKLQkJbGVkLT5yZWdpc3RlcmVkID0gMTsKLQotCUlOSVRfREVMQVlFRF9XT1JLKCZsZWQtPmJyaWdodG5lc3Nfd29yaywgYXRoOWtfbGVkX2JyaWdodG5lc3Nfd29yayk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBhdGg5a191bnJlZ2lzdGVyX2xlZChzdHJ1Y3QgYXRoX2xlZCAqbGVkKQotewotCWlmIChsZWQtPnJlZ2lzdGVyZWQpIHsKLQkJbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoJmxlZC0+bGVkX2NkZXYpOwotCQlsZWQtPnJlZ2lzdGVyZWQgPSAwOwotCX0KLX0KLQotdm9pZCBhdGg5a19kZWluaXRfbGVkcyhzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYpCi17Ci0JcHJpdi0+b3BfZmxhZ3MgfD0gT1BfTEVEX0RFSU5JVDsKLQlhdGg5a191bnJlZ2lzdGVyX2xlZCgmcHJpdi0+YXNzb2NfbGVkKTsKLQlwcml2LT5vcF9mbGFncyAmPSB+T1BfTEVEX0FTU09DSUFURUQ7Ci0JYXRoOWtfdW5yZWdpc3Rlcl9sZWQoJnByaXYtPnR4X2xlZCk7Ci0JYXRoOWtfdW5yZWdpc3Rlcl9sZWQoJnByaXYtPnJ4X2xlZCk7Ci0JYXRoOWtfdW5yZWdpc3Rlcl9sZWQoJnByaXYtPnJhZGlvX2xlZCk7Ci19Ci0KLXZvaWQgYXRoOWtfaW5pdF9sZWRzKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdikKLXsKLQljaGFyICp0cmlnZ2VyOwotCWludCByZXQ7Ci0KLQlpZiAoQVJfU1JFVl85Mjg3KHByaXYtPmFoKSkKLQkJcHJpdi0+YWgtPmxlZF9waW4gPSBBVEhfTEVEX1BJTl85Mjg3OwotCWVsc2UgaWYgKEFSX1NSRVZfOTI3MShwcml2LT5haCkpCi0JCXByaXYtPmFoLT5sZWRfcGluID0gQVRIX0xFRF9QSU5fOTI3MTsKLQllbHNlIGlmIChBUl9ERVZJRF83MDEwKHByaXYtPmFoKSkKLQkJcHJpdi0+YWgtPmxlZF9waW4gPSBBVEhfTEVEX1BJTl83MDEwOwotCWVsc2UKLQkJcHJpdi0+YWgtPmxlZF9waW4gPSBBVEhfTEVEX1BJTl9ERUY7Ci0KLQkvKiBDb25maWd1cmUgZ3BpbyAxIGZvciBvdXRwdXQgKi8KLQlhdGg5a19od19jZmdfb3V0cHV0KHByaXYtPmFoLCBwcml2LT5haC0+bGVkX3BpbiwKLQkJCSAgICBBUl9HUElPX09VVFBVVF9NVVhfQVNfT1VUUFVUKTsKLQkvKiBMRUQgb2ZmLCBhY3RpdmUgbG93ICovCi0JYXRoOWtfaHdfc2V0X2dwaW8ocHJpdi0+YWgsIHByaXYtPmFoLT5sZWRfcGluLCAxKTsKLQotCUlOSVRfREVMQVlFRF9XT1JLKCZwcml2LT5hdGg5a19sZWRfYmxpbmtfd29yaywgYXRoOWtfbGVkX2JsaW5rX3dvcmspOwotCi0JdHJpZ2dlciA9IGllZWU4MDIxMV9nZXRfcmFkaW9fbGVkX25hbWUocHJpdi0+aHcpOwotCXNucHJpbnRmKHByaXYtPnJhZGlvX2xlZC5uYW1lLCBzaXplb2YocHJpdi0+cmFkaW9fbGVkLm5hbWUpLAotCQkiYXRoOWstJXM6OnJhZGlvIiwgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpKTsKLQlyZXQgPSBhdGg5a19yZWdpc3Rlcl9sZWQocHJpdiwgJnByaXYtPnJhZGlvX2xlZCwgdHJpZ2dlcik7Ci0JcHJpdi0+cmFkaW9fbGVkLmxlZF90eXBlID0gQVRIX0xFRF9SQURJTzsKLQlpZiAocmV0KQotCQlnb3RvIGZhaWw7Ci0KLQl0cmlnZ2VyID0gaWVlZTgwMjExX2dldF9hc3NvY19sZWRfbmFtZShwcml2LT5odyk7Ci0Jc25wcmludGYocHJpdi0+YXNzb2NfbGVkLm5hbWUsIHNpemVvZihwcml2LT5hc3NvY19sZWQubmFtZSksCi0JCSJhdGg5ay0lczo6YXNzb2MiLCB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSkpOwotCXJldCA9IGF0aDlrX3JlZ2lzdGVyX2xlZChwcml2LCAmcHJpdi0+YXNzb2NfbGVkLCB0cmlnZ2VyKTsKLQlwcml2LT5hc3NvY19sZWQubGVkX3R5cGUgPSBBVEhfTEVEX0FTU09DOwotCWlmIChyZXQpCi0JCWdvdG8gZmFpbDsKLQotCXRyaWdnZXIgPSBpZWVlODAyMTFfZ2V0X3R4X2xlZF9uYW1lKHByaXYtPmh3KTsKLQlzbnByaW50Zihwcml2LT50eF9sZWQubmFtZSwgc2l6ZW9mKHByaXYtPnR4X2xlZC5uYW1lKSwKLQkJImF0aDlrLSVzOjp0eCIsIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSk7Ci0JcmV0ID0gYXRoOWtfcmVnaXN0ZXJfbGVkKHByaXYsICZwcml2LT50eF9sZWQsIHRyaWdnZXIpOwotCXByaXYtPnR4X2xlZC5sZWRfdHlwZSA9IEFUSF9MRURfVFg7Ci0JaWYgKHJldCkKLQkJZ290byBmYWlsOwotCi0JdHJpZ2dlciA9IGllZWU4MDIxMV9nZXRfcnhfbGVkX25hbWUocHJpdi0+aHcpOwotCXNucHJpbnRmKHByaXYtPnJ4X2xlZC5uYW1lLCBzaXplb2YocHJpdi0+cnhfbGVkLm5hbWUpLAotCQkiYXRoOWstJXM6OnJ4Iiwgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpKTsKLQlyZXQgPSBhdGg5a19yZWdpc3Rlcl9sZWQocHJpdiwgJnByaXYtPnJ4X2xlZCwgdHJpZ2dlcik7Ci0JcHJpdi0+cnhfbGVkLmxlZF90eXBlID0gQVRIX0xFRF9SWDsKLQlpZiAocmV0KQotCQlnb3RvIGZhaWw7Ci0KLQlwcml2LT5vcF9mbGFncyAmPSB+T1BfTEVEX0RFSU5JVDsKLQotCXJldHVybjsKLQotZmFpbDoKLQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnByaXYtPmF0aDlrX2xlZF9ibGlua193b3JrKTsKLQlhdGg5a19kZWluaXRfbGVkcyhwcml2KTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKiovCi0vKglSZmtpbGwJICAgKi8KLS8qKioqKioqKioqKioqKioqKioqLwotCi1zdGF0aWMgYm9vbCBhdGhfaXNfcmZraWxsX3NldChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYpCi17Ci0JcmV0dXJuIGF0aDlrX2h3X2dwaW9fZ2V0KHByaXYtPmFoLCBwcml2LT5haC0+cmZraWxsX2dwaW8pID09Ci0JCXByaXYtPmFoLT5yZmtpbGxfcG9sYXJpdHk7Ci19Ci0KLXN0YXRpYyB2b2lkIGF0aDlrX2h0Y19yZmtpbGxfcG9sbF9zdGF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKLXsKLQlzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYgPSBody0+cHJpdjsKLQlib29sIGJsb2NrZWQgPSAhIWF0aF9pc19yZmtpbGxfc2V0KHByaXYpOwotCi0Jd2lwaHlfcmZraWxsX3NldF9od19zdGF0ZShody0+d2lwaHksIGJsb2NrZWQpOwotfQotCi12b2lkIGF0aDlrX3N0YXJ0X3Jma2lsbF9wb2xsKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdikKLXsKLQlpZiAocHJpdi0+YWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9SRlNJTEVOVCkKLQkJd2lwaHlfcmZraWxsX3N0YXJ0X3BvbGxpbmcocHJpdi0+aHctPndpcGh5KTsKLX0KLQotc3RhdGljIHZvaWQgYXRoOWtfaHRjX3JhZGlvX2VuYWJsZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKLXsKLQlzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYgPSBody0+cHJpdjsKLQlzdHJ1Y3QgYXRoX2h3ICphaCA9IHByaXYtPmFoOwotCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOwotCWludCByZXQ7Ci0JdTggY21kX3JzcDsKLQotCWlmICghYWgtPmN1cmNoYW4pCi0JCWFoLT5jdXJjaGFuID0gYXRoOWtfY21uX2dldF9jdXJjaGFubmVsKGh3LCBhaCk7Ci0KLQkvKiBSZXNldCB0aGUgSFcgKi8KLQlyZXQgPSBhdGg5a19od19yZXNldChhaCwgYWgtPmN1cmNoYW4sIGFoLT5jYWxkYXRhLCBmYWxzZSk7Ci0JaWYgKHJldCkgewotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0ZBVEFMLAotCQkJICAiVW5hYmxlIHRvIHJlc2V0IGhhcmR3YXJlOyByZXNldCBzdGF0dXMgJWQgIgotCQkJICAiKGZyZXEgJXUgTUh6KVxuIiwgcmV0LCBhaC0+Y3VyY2hhbi0+Y2hhbm5lbCk7Ci0JfQotCi0JYXRoX3VwZGF0ZV90eHBvdyhwcml2KTsKLQotCS8qIFN0YXJ0IFJYICovCi0JV01JX0NNRChXTUlfU1RBUlRfUkVDVl9DTURJRCk7Ci0JYXRoOWtfaG9zdF9yeF9pbml0KHByaXYpOwotCi0JLyogU3RhcnQgVFggKi8KLQlodGNfc3RhcnQocHJpdi0+aHRjKTsKLQlzcGluX2xvY2tfYmgoJnByaXYtPnR4X2xvY2spOwotCXByaXYtPnR4X3F1ZXVlc19zdG9wID0gZmFsc2U7Ci0Jc3Bpbl91bmxvY2tfYmgoJnByaXYtPnR4X2xvY2spOwotCWllZWU4MDIxMV93YWtlX3F1ZXVlcyhodyk7Ci0KLQlXTUlfQ01EKFdNSV9FTkFCTEVfSU5UUl9DTURJRCk7Ci0KLQkvKiBFbmFibGUgTEVEICovCi0JYXRoOWtfaHdfY2ZnX291dHB1dChhaCwgYWgtPmxlZF9waW4sCi0JCQkgICAgQVJfR1BJT19PVVRQVVRfTVVYX0FTX09VVFBVVCk7Ci0JYXRoOWtfaHdfc2V0X2dwaW8oYWgsIGFoLT5sZWRfcGluLCAwKTsKLX0KLQotc3RhdGljIHZvaWQgYXRoOWtfaHRjX3JhZGlvX2Rpc2FibGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCi17Ci0Jc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2ID0gaHctPnByaXY7Ci0Jc3RydWN0IGF0aF9odyAqYWggPSBwcml2LT5haDsKLQlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKGFoKTsKLQlpbnQgcmV0OwotCXU4IGNtZF9yc3A7Ci0KLQlhdGg5a19odGNfcHNfd2FrZXVwKHByaXYpOwotCi0JLyogRGlzYWJsZSBMRUQgKi8KLQlhdGg5a19od19zZXRfZ3BpbyhhaCwgYWgtPmxlZF9waW4sIDEpOwotCWF0aDlrX2h3X2NmZ19ncGlvX2lucHV0KGFoLCBhaC0+bGVkX3Bpbik7Ci0KLQlXTUlfQ01EKFdNSV9ESVNBQkxFX0lOVFJfQ01ESUQpOwotCi0JLyogU3RvcCBUWCAqLwotCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyhodyk7Ci0JaHRjX3N0b3AocHJpdi0+aHRjKTsKLQlXTUlfQ01EKFdNSV9EUkFJTl9UWFFfQUxMX0NNRElEKTsKLQlza2JfcXVldWVfcHVyZ2UoJnByaXYtPnR4X3F1ZXVlKTsKLQotCS8qIFN0b3AgUlggKi8KLQlXTUlfQ01EKFdNSV9TVE9QX1JFQ1ZfQ01ESUQpOwotCi0JLyoKLQkgKiBUaGUgTUlCIGNvdW50ZXJzIGhhdmUgdG8gYmUgZGlzYWJsZWQgaGVyZSwKLQkgKiBzaW5jZSB0aGUgdGFyZ2V0IGRvZXNuJ3QgZG8gaXQuCi0JICovCi0JYXRoOWtfaHdfZGlzYWJsZV9taWJfY291bnRlcnMoYWgpOwotCi0JaWYgKCFhaC0+Y3VyY2hhbikKLQkJYWgtPmN1cmNoYW4gPSBhdGg5a19jbW5fZ2V0X2N1cmNoYW5uZWwoaHcsIGFoKTsKLQotCS8qIFJlc2V0IHRoZSBIVyAqLwotCXJldCA9IGF0aDlrX2h3X3Jlc2V0KGFoLCBhaC0+Y3VyY2hhbiwgYWgtPmNhbGRhdGEsIGZhbHNlKTsKLQlpZiAocmV0KSB7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRkFUQUwsCi0JCQkgICJVbmFibGUgdG8gcmVzZXQgaGFyZHdhcmU7IHJlc2V0IHN0YXR1cyAlZCAiCi0JCQkgICIoZnJlcSAldSBNSHopXG4iLCByZXQsIGFoLT5jdXJjaGFuLT5jaGFubmVsKTsKLQl9Ci0KLQkvKiBEaXNhYmxlIHRoZSBQSFkgKi8KLQlhdGg5a19od19waHlfZGlzYWJsZShhaCk7Ci0KLQlhdGg5a19odGNfcHNfcmVzdG9yZShwcml2KTsKLQlhdGg5a19odGNfc2V0cG93ZXIocHJpdiwgQVRIOUtfUE1fRlVMTF9TTEVFUCk7Ci19Ci0KIC8qKioqKioqKioqKioqKioqKioqKioqLwogLyogbWFjODAyMTEgQ2FsbGJhY2tzICovCiAvKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTExMjQsMTUgKzkyMSwxNSBAQAogCXJldCA9IGF0aDlrX2h0Y190eF9zdGFydChwcml2LCBza2IpOwogCWlmIChyZXQgIT0gMCkgewogCQlpZiAocmV0ID09IC1FTk9NRU0pIHsKLQkJCWF0aF9wcmludChhdGg5a19od19jb21tb24ocHJpdi0+YWgpLCBBVEhfREJHX1hNSVQsCi0JCQkJICAiU3RvcHBpbmcgVFggcXVldWVzXG4iKTsKKwkJCWF0aF9kYmcoYXRoOWtfaHdfY29tbW9uKHByaXYtPmFoKSwgQVRIX0RCR19YTUlULAorCQkJCSJTdG9wcGluZyBUWCBxdWV1ZXNcbiIpOwogCQkJaWVlZTgwMjExX3N0b3BfcXVldWVzKGh3KTsKIAkJCXNwaW5fbG9ja19iaCgmcHJpdi0+dHhfbG9jayk7CiAJCQlwcml2LT50eF9xdWV1ZXNfc3RvcCA9IHRydWU7CiAJCQlzcGluX3VubG9ja19iaCgmcHJpdi0+dHhfbG9jayk7CiAJCX0gZWxzZSB7Ci0JCQlhdGhfcHJpbnQoYXRoOWtfaHdfY29tbW9uKHByaXYtPmFoKSwgQVRIX0RCR19YTUlULAotCQkJCSAgIlR4IGZhaWxlZCIpOworCQkJYXRoX2RiZyhhdGg5a19od19jb21tb24ocHJpdi0+YWgpLCBBVEhfREJHX1hNSVQsCisJCQkJIlR4IGZhaWxlZFxuIik7CiAJCX0KIAkJZ290byBmYWlsX3R4OwogCX0KQEAgLTExNTgsOSArOTU1LDkgQEAKIAogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAotCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQ09ORklHLAotCQkgICJTdGFydGluZyBkcml2ZXIgd2l0aCBpbml0aWFsIGNoYW5uZWw6ICVkIE1IelxuIiwKLQkJICBjdXJjaGFuLT5jZW50ZXJfZnJlcSk7CisJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ09ORklHLAorCQkiU3RhcnRpbmcgZHJpdmVyIHdpdGggaW5pdGlhbCBjaGFubmVsOiAlZCBNSHpcbiIsCisJCWN1cmNoYW4tPmNlbnRlcl9mcmVxKTsKIAogCS8qIEVuc3VyZSB0aGF0IEhXIGlzIGF3YWtlIGJlZm9yZSBmbHVzaGluZyBSWCAqLwogCWF0aDlrX2h0Y19zZXRwb3dlcihwcml2LCBBVEg5S19QTV9BV0FLRSk7CkBAIC0xMTY5LDE1ICs5NjYsMTIgQEAKIAkvKiBzZXR1cCBpbml0aWFsIGNoYW5uZWwgKi8KIAlpbml0X2NoYW5uZWwgPSBhdGg5a19jbW5fZ2V0X2N1cmNoYW5uZWwoaHcsIGFoKTsKIAotCS8qIFJlc2V0IFNFUkRFUyByZWdpc3RlcnMgKi8KLQlhdGg5a19od19jb25maWdwY2lwb3dlcnNhdmUoYWgsIDAsIDApOwotCiAJYXRoOWtfaHdfaHRjX3Jlc2V0aW5pdChhaCk7CiAJcmV0ID0gYXRoOWtfaHdfcmVzZXQoYWgsIGluaXRfY2hhbm5lbCwgYWgtPmNhbGRhdGEsIGZhbHNlKTsKIAlpZiAocmV0KSB7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRkFUQUwsCi0JCQkgICJVbmFibGUgdG8gcmVzZXQgaGFyZHdhcmU7IHJlc2V0IHN0YXR1cyAlZCAiCi0JCQkgICIoZnJlcSAldSBNSHopXG4iLCByZXQsIGN1cmNoYW4tPmNlbnRlcl9mcmVxKTsKKwkJYXRoX2Vycihjb21tb24sCisJCQkiVW5hYmxlIHRvIHJlc2V0IGhhcmR3YXJlOyByZXNldCBzdGF0dXMgJWQgKGZyZXEgJXUgTUh6KVxuIiwKKwkJCXJldCwgY3VyY2hhbi0+Y2VudGVyX2ZyZXEpOwogCQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAkJcmV0dXJuIHJldDsKIAl9CkBAIC0xMjIwLDE5ICsxMDE0LDIwIEBACiAJaW50IHJldCA9IDA7CiAJdTggY21kX3JzcDsKIAotCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKLQotCWlmIChwcml2LT5vcF9mbGFncyAmIE9QX0lOVkFMSUQpIHsKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19BTlksICJEZXZpY2Ugbm90IHByZXNlbnRcbiIpOwotCQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKLQkJcmV0dXJuOwotCX0KLQogCS8qIENhbmNlbCBhbGwgdGhlIHJ1bm5pbmcgdGltZXJzL3dvcmsgLi4gKi8KKwljYW5jZWxfd29ya19zeW5jKCZwcml2LT5mYXRhbF93b3JrKTsKIAljYW5jZWxfd29ya19zeW5jKCZwcml2LT5wc193b3JrKTsKIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnByaXYtPmF0aDlrX2xlZF9ibGlua193b3JrKTsKIAlhdGg5a19sZWRfc3RvcF9icmlnaHRuZXNzKHByaXYpOwogCisJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOworCisJaWYgKHByaXYtPm9wX2ZsYWdzICYgT1BfSU5WQUxJRCkgeworCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19BTlksICJEZXZpY2Ugbm90IHByZXNlbnRcbiIpOworCQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKKwkJcmV0dXJuOworCX0KKwogCWF0aDlrX2h0Y19wc193YWtldXAocHJpdik7CiAJaHRjX3N0b3AocHJpdi0+aHRjKTsKIAlXTUlfQ01EKFdNSV9ESVNBQkxFX0lOVFJfQ01ESUQpOwpAQCAtMTI0MywxMSArMTAzOCwxMCBAQAogCS8qIFJlbW92ZSBtb25pdG9yIGludGVyZmFjZSBoZXJlICovCiAJaWYgKGFoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUikgewogCQlpZiAoYXRoOWtfaHRjX3JlbW92ZV9tb25pdG9yX2ludGVyZmFjZShwcml2KSkKLQkJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRkFUQUwsCi0JCQkJICAiVW5hYmxlIHRvIHJlbW92ZSBtb25pdG9yIGludGVyZmFjZVxuIik7CisJCQlhdGhfZXJyKGNvbW1vbiwgIlVuYWJsZSB0byByZW1vdmUgbW9uaXRvciBpbnRlcmZhY2VcbiIpOwogCQllbHNlCi0JCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0NPTkZJRywKLQkJCQkgICJNb25pdG9yIGludGVyZmFjZSByZW1vdmVkXG4iKTsKKwkJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NPTkZJRywKKwkJCQkiTW9uaXRvciBpbnRlcmZhY2UgcmVtb3ZlZFxuIik7CiAJfQogCiAJaWYgKGFoLT5idGNvZXhfaHcuZW5hYmxlZCkgewpAQCAtMTI1OCwxMyArMTA1MiwxMiBAQAogCiAJYXRoOWtfaHdfcGh5X2Rpc2FibGUoYWgpOwogCWF0aDlrX2h3X2Rpc2FibGUoYWgpOwotCWF0aDlrX2h3X2NvbmZpZ3BjaXBvd2Vyc2F2ZShhaCwgMSwgMSk7CiAJYXRoOWtfaHRjX3BzX3Jlc3RvcmUocHJpdik7CiAJYXRoOWtfaHRjX3NldHBvd2VyKHByaXYsIEFUSDlLX1BNX0ZVTExfU0xFRVApOwogCiAJcHJpdi0+b3BfZmxhZ3MgfD0gT1BfSU5WQUxJRDsKIAotCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQ09ORklHLCAiRHJpdmVyIGhhbHRcbiIpOworCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NPTkZJRywgIkRyaXZlciBoYWx0XG4iKTsKIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIH0KIApAQCAtMTI5OCwxNCArMTA5MSwxNCBAQAogCQlodmlmLm9wbW9kZSA9IGNwdV90b19iZTMyKEhUQ19NX0lCU1MpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0ZBVEFMLAorCQlhdGhfZXJyKGNvbW1vbiwKIAkJCSJJbnRlcmZhY2UgdHlwZSAlZCBub3QgeWV0IHN1cHBvcnRlZFxuIiwgdmlmLT50eXBlKTsKIAkJcmV0ID0gLUVPUE5PVFNVUFA7CiAJCWdvdG8gb3V0OwogCX0KIAotCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQ09ORklHLAotCQkgICJBdHRhY2ggYSBWSUYgb2YgdHlwZTogJWRcbiIsIHZpZi0+dHlwZSk7CisJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ09ORklHLAorCQkiQXR0YWNoIGEgVklGIG9mIHR5cGU6ICVkXG4iLCB2aWYtPnR5cGUpOwogCiAJcHJpdi0+YWgtPm9wbW9kZSA9IHZpZi0+dHlwZTsKIApAQCAtMTMyOCw4ICsxMTIxLDggQEAKIAogCXJldCA9IGF0aDlrX2h0Y191cGRhdGVfY2FwX3RhcmdldChwcml2KTsKIAlpZiAocmV0KQotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0NPTkZJRywgIkZhaWxlZCB0byB1cGRhdGUiCi0JCQkgICIgY2FwYWJpbGl0eSBpbiB0YXJnZXQgXG4iKTsKKwkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ09ORklHLAorCQkJIkZhaWxlZCB0byB1cGRhdGUgY2FwYWJpbGl0eSBpbiB0YXJnZXRcbiIpOwogCiAJcHJpdi0+dmlmID0gdmlmOwogb3V0OgpAQCAtMTM0OSw3ICsxMTQyLDcgQEAKIAlpbnQgcmV0ID0gMDsKIAl1OCBjbWRfcnNwOwogCi0JYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19DT05GSUcsICJEZXRhY2ggSW50ZXJmYWNlXG4iKTsKKwlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19DT05GSUcsICJEZXRhY2ggSW50ZXJmYWNlXG4iKTsKIAogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAlhdGg5a19odGNfcHNfd2FrZXVwKHByaXYpOwpAQCAtMTM4Niw4ICsxMTc5LDggQEAKIAkJbXV0ZXhfdW5sb2NrKCZwcml2LT5odGNfcG1fbG9jayk7CiAKIAkJaWYgKGVuYWJsZV9yYWRpbykgewotCQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19DT05GSUcsCi0JCQkJICAibm90LWlkbGU6IGVuYWJsaW5nIHJhZGlvXG4iKTsKKwkJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NPTkZJRywKKwkJCQkibm90LWlkbGU6IGVuYWJsaW5nIHJhZGlvXG4iKTsKIAkJCWF0aDlrX2h0Y19zZXRwb3dlcihwcml2LCBBVEg5S19QTV9BV0FLRSk7CiAJCQlhdGg5a19odGNfcmFkaW9fZW5hYmxlKGh3KTsKIAkJfQpAQCAtMTM5NywxOSArMTE5MCwyMSBAQAogCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmN1cmNoYW4gPSBody0+Y29uZi5jaGFubmVsOwogCQlpbnQgcG9zID0gY3VyY2hhbi0+aHdfdmFsdWU7CiAKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19DT05GSUcsICJTZXQgY2hhbm5lbDogJWQgTUh6XG4iLAotCQkJICBjdXJjaGFuLT5jZW50ZXJfZnJlcSk7CisJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NPTkZJRywgIlNldCBjaGFubmVsOiAlZCBNSHpcbiIsCisJCQljdXJjaGFuLT5jZW50ZXJfZnJlcSk7CiAKLQkJYXRoOWtfY21uX3VwZGF0ZV9pY2hhbm5lbChodywgJnByaXYtPmFoLT5jaGFubmVsc1twb3NdKTsKKwkJYXRoOWtfY21uX3VwZGF0ZV9pY2hhbm5lbCgmcHJpdi0+YWgtPmNoYW5uZWxzW3Bvc10sCisJCQkJCSAgaHctPmNvbmYuY2hhbm5lbCwKKwkJCQkJICBody0+Y29uZi5jaGFubmVsX3R5cGUpOwogCiAJCWlmIChhdGg5a19odGNfc2V0X2NoYW5uZWwocHJpdiwgaHcsICZwcml2LT5haC0+Y2hhbm5lbHNbcG9zXSkgPCAwKSB7Ci0JCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0ZBVEFMLAotCQkJCSAgIlVuYWJsZSB0byBzZXQgY2hhbm5lbFxuIik7CisJCQlhdGhfZXJyKGNvbW1vbiwgIlVuYWJsZSB0byBzZXQgY2hhbm5lbFxuIik7CiAJCQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKIAl9CisKIAlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9QUykgewogCQlpZiAoY29uZi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUykgewogCQkJYXRoOWtfaHRjX3NldHBvd2VyKHByaXYsIEFUSDlLX1BNX05FVFdPUktfU0xFRVApOwpAQCAtMTQyMSwxNCArMTIxNiwxOCBAQAogCQl9CiAJfQogCisJaWYgKGNoYW5nZWQgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUE9XRVIpIHsKKwkJcHJpdi0+dHhwb3dsaW1pdCA9IDIgKiBjb25mLT5wb3dlcl9sZXZlbDsKKwkJYXRoX3VwZGF0ZV90eHBvdyhwcml2KTsKKwl9CisKIAlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9NT05JVE9SKSB7CiAJCWlmIChjb25mLT5mbGFncyAmIElFRUU4MDIxMV9DT05GX01PTklUT1IpIHsKIAkJCWlmIChhdGg5a19odGNfYWRkX21vbml0b3JfaW50ZXJmYWNlKHByaXYpKQotCQkJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRkFUQUwsCi0JCQkJCSAgIkZhaWxlZCB0byBzZXQgbW9uaXRvciBtb2RlXG4iKTsKKwkJCQlhdGhfZXJyKGNvbW1vbiwgIkZhaWxlZCB0byBzZXQgbW9uaXRvciBtb2RlXG4iKTsKIAkJCWVsc2UKLQkJCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0NPTkZJRywKLQkJCQkJICAiSFcgb3Btb2RlIHNldCB0byBNb25pdG9yIG1vZGVcbiIpOworCQkJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NPTkZJRywKKwkJCQkJIkhXIG9wbW9kZSBzZXQgdG8gTW9uaXRvciBtb2RlXG4iKTsKIAkJfQogCX0KIApAQCAtMTQ0MCw4ICsxMjM5LDggQEAKIAkJfQogCQltdXRleF91bmxvY2soJnByaXYtPmh0Y19wbV9sb2NrKTsKIAotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0NPTkZJRywKLQkJCSAgImlkbGU6IGRpc2FibGluZyByYWRpb1xuIik7CisJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NPTkZJRywKKwkJCSJpZGxlOiBkaXNhYmxpbmcgcmFkaW9cbiIpOwogCQlhdGg5a19odGNfcmFkaW9fZGlzYWJsZShodyk7CiAJfQogCkBAIC0xNDc4LDggKzEyNzcsOCBAQAogCXJmaWx0ID0gYXRoOWtfaHRjX2NhbGNyeGZpbHRlcihwcml2KTsKIAlhdGg5a19od19zZXRyeGZpbHRlcihwcml2LT5haCwgcmZpbHQpOwogCi0JYXRoX3ByaW50KGF0aDlrX2h3X2NvbW1vbihwcml2LT5haCksIEFUSF9EQkdfQ09ORklHLAotCQkgICJTZXQgSFcgUlggZmlsdGVyOiAweCV4XG4iLCByZmlsdCk7CisJYXRoX2RiZyhhdGg5a19od19jb21tb24ocHJpdi0+YWgpLCBBVEhfREJHX0NPTkZJRywKKwkJIlNldCBIVyBSWCBmaWx0ZXI6IDB4JXhcbiIsIHJmaWx0KTsKIAogCWF0aDlrX2h0Y19wc19yZXN0b3JlKHByaXYpOwogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwpAQCAtMTU0MiwxNSArMTM0MSwxNCBAQAogCiAJcW51bSA9IGdldF9od19xbnVtKHF1ZXVlLCBwcml2LT5od3FfbWFwKTsKIAotCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQ09ORklHLAotCQkgICJDb25maWd1cmUgdHggW3F1ZXVlL2h3cV0gWyVkLyVkXSwgICIKLQkJICAiYWlmczogJWQsIGN3X21pbjogJWQsIGN3X21heDogJWQsIHR4b3A6ICVkXG4iLAotCQkgIHF1ZXVlLCBxbnVtLCBwYXJhbXMtPmFpZnMsIHBhcmFtcy0+Y3dfbWluLAotCQkgIHBhcmFtcy0+Y3dfbWF4LCBwYXJhbXMtPnR4b3ApOworCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NPTkZJRywKKwkJIkNvbmZpZ3VyZSB0eCBbcXVldWUvaHdxXSBbJWQvJWRdLCAgYWlmczogJWQsIGN3X21pbjogJWQsIGN3X21heDogJWQsIHR4b3A6ICVkXG4iLAorCQlxdWV1ZSwgcW51bSwgcGFyYW1zLT5haWZzLCBwYXJhbXMtPmN3X21pbiwKKwkJcGFyYW1zLT5jd19tYXgsIHBhcmFtcy0+dHhvcCk7CiAKIAlyZXQgPSBhdGhfaHRjX3R4cV91cGRhdGUocHJpdiwgcW51bSwgJnFpKTsKIAlpZiAocmV0KSB7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRkFUQUwsICJUWFEgVXBkYXRlIGZhaWxlZFxuIik7CisJCWF0aF9lcnIoY29tbW9uLCAiVFhRIFVwZGF0ZSBmYWlsZWRcbiIpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTE1NzgsNyArMTM3Niw3IEBACiAJCXJldHVybiAtRU5PU1BDOwogCiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwotCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQ09ORklHLCAiU2V0IEhXIEtleVxuIik7CisJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ09ORklHLCAiU2V0IEhXIEtleVxuIik7CiAJYXRoOWtfaHRjX3BzX3dha2V1cChwcml2KTsKIAogCXN3aXRjaCAoY21kKSB7CkBAIC0xNjI0LDcgKzE0MjIsNyBAQAogCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQVNTT0MpIHsKIAkJY29tbW9uLT5jdXJhaWQgPSBic3NfY29uZi0+YXNzb2MgPwogCQkJCSBic3NfY29uZi0+YWlkIDogMDsKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19DT05GSUcsICJCU1MgQ2hhbmdlZCBBU1NPQyAlZFxuIiwKKwkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ09ORklHLCAiQlNTIENoYW5nZWQgQVNTT0MgJWRcbiIsCiAJCQlic3NfY29uZi0+YXNzb2MpOwogCiAJCWlmIChic3NfY29uZi0+YXNzb2MpIHsKQEAgLTE2NDEsOSArMTQzOSw5IEBACiAJCW1lbWNweShjb21tb24tPmN1cmJzc2lkLCBic3NfY29uZi0+YnNzaWQsIEVUSF9BTEVOKTsKIAkJYXRoOWtfaHdfd3JpdGVfYXNzb2NpZChhaCk7CiAKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19DT05GSUcsCi0JCQkgICJCU1NJRDogJXBNIGFpZDogMHgleFxuIiwKLQkJCSAgY29tbW9uLT5jdXJic3NpZCwgY29tbW9uLT5jdXJhaWQpOworCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19DT05GSUcsCisJCQkiQlNTSUQ6ICVwTSBhaWQ6IDB4JXhcbiIsCisJCQljb21tb24tPmN1cmJzc2lkLCBjb21tb24tPmN1cmFpZCk7CiAJfQogCiAJaWYgKChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQkVBQ09OX0lOVCkgfHwKQEAgLTE2NjEsOCArMTQ1OSw4IEBACiAJfQogCiAJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9FUlBfUFJFQU1CTEUpIHsKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19DT05GSUcsICJCU1MgQ2hhbmdlZCBQUkVBTUJMRSAlZFxuIiwKLQkJCSAgYnNzX2NvbmYtPnVzZV9zaG9ydF9wcmVhbWJsZSk7CisJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NPTkZJRywgIkJTUyBDaGFuZ2VkIFBSRUFNQkxFICVkXG4iLAorCQkJYnNzX2NvbmYtPnVzZV9zaG9ydF9wcmVhbWJsZSk7CiAJCWlmIChic3NfY29uZi0+dXNlX3Nob3J0X3ByZWFtYmxlKQogCQkJcHJpdi0+b3BfZmxhZ3MgfD0gT1BfUFJFQU1CTEVfU0hPUlQ7CiAJCWVsc2UKQEAgLTE2NzAsOCArMTQ2OCw4IEBACiAJfQogCiAJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9FUlBfQ1RTX1BST1QpIHsKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19DT05GSUcsICJCU1MgQ2hhbmdlZCBDVFMgUFJPVCAlZFxuIiwKLQkJCSAgYnNzX2NvbmYtPnVzZV9jdHNfcHJvdCk7CisJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NPTkZJRywgIkJTUyBDaGFuZ2VkIENUUyBQUk9UICVkXG4iLAorCQkJYnNzX2NvbmYtPnVzZV9jdHNfcHJvdCk7CiAJCWlmIChic3NfY29uZi0+dXNlX2N0c19wcm90ICYmCiAJCSAgICBody0+Y29uZi5jaGFubmVsLT5iYW5kICE9IElFRUU4MDIxMV9CQU5EXzVHSFopCiAJCQlwcml2LT5vcF9mbGFncyB8PSBPUF9QUk9URUNUX0VOQUJMRTsKQEAgLTE3NjIsOCArMTU2MCw3IEBACiAJCXNwaW5fdW5sb2NrX2JoKCZwcml2LT50eF9sb2NrKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJYXRoX3ByaW50KGF0aDlrX2h3X2NvbW1vbihwcml2LT5haCksIEFUSF9EQkdfRkFUQUwsCi0JCQkgICJVbmtub3duIEFNUERVIGFjdGlvblxuIik7CisJCWF0aF9lcnIoYXRoOWtfaHdfY29tbW9uKHByaXYtPmFoKSwgIlVua25vd24gQU1QRFUgYWN0aW9uXG4iKTsKIAl9CiAKIAlyZXR1cm4gcmV0OwpAQCAtMTc5Miw3ICsxNTg5LDYgQEAKIAlzcGluX2xvY2tfYmgoJnByaXYtPmJlYWNvbl9sb2NrKTsKIAlwcml2LT5vcF9mbGFncyAmPSB+T1BfU0NBTk5JTkc7CiAJc3Bpbl91bmxvY2tfYmgoJnByaXYtPmJlYWNvbl9sb2NrKTsKLQlwcml2LT5vcF9mbGFncyB8PSBPUF9GVUxMX1JFU0VUOwogCWlmIChwcml2LT5vcF9mbGFncyAmIE9QX0FTU09DSUFURUQpIHsKIAkJYXRoOWtfaHRjX2JlYWNvbl9jb25maWcocHJpdiwgcHJpdi0+dmlmKTsKIAkJYXRoX3N0YXJ0X2FuaShwcml2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYwppbmRleCAyOWQ4MGNhLi4zM2YzNjAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jCkBAIC0yMCw4ICsyMCwxNSBAQAogLyogVFggKi8KIC8qKioqKiovCiAKK3N0YXRpYyBjb25zdCBpbnQgc3VidHlwZV90eHFfdG9faHdxW10gPSB7CisJW1dNRV9BQ19CRV0gPSBBVEhfVFhRX0FDX0JFLAorCVtXTUVfQUNfQktdID0gQVRIX1RYUV9BQ19CSywKKwlbV01FX0FDX1ZJXSA9IEFUSF9UWFFfQUNfVkksCisJW1dNRV9BQ19WT10gPSBBVEhfVFhRX0FDX1ZPLAorfTsKKwogI2RlZmluZSBBVEg5S19IVENfSU5JVF9UWFEoc3VidHlwZSkgZG8gewkJCVwKLQkJcWkudHFpX3N1YnR5cGUgPSBzdWJ0eXBlOwkJCVwKKwkJcWkudHFpX3N1YnR5cGUgPSBzdWJ0eXBlX3R4cV90b19od3Fbc3VidHlwZV07CVwKIAkJcWkudHFpX2FpZnMgPSBBVEg5S19UWFFfVVNFREVGQVVMVDsJCVwKIAkJcWkudHFpX2N3bWluID0gQVRIOUtfVFhRX1VTRURFRkFVTFQ7CQlcCiAJCXFpLnRxaV9jd21heCA9IEFUSDlLX1RYUV9VU0VERUZBVUxUOwkJXApAQCAtNjIsOCArNjksOCBAQAogCXFpLnRxaV9yZWFkeVRpbWUgPSBxaW5mby0+dHFpX3JlYWR5VGltZTsKIAogCWlmICghYXRoOWtfaHdfc2V0X3R4cV9wcm9wcyhhaCwgcW51bSwgJnFpKSkgewotCQlhdGhfcHJpbnQoYXRoOWtfaHdfY29tbW9uKGFoKSwgQVRIX0RCR19GQVRBTCwKLQkJCSAgIlVuYWJsZSB0byB1cGRhdGUgaGFyZHdhcmUgcXVldWUgJXUhXG4iLCBxbnVtKTsKKwkJYXRoX2VycihhdGg5a19od19jb21tb24oYWgpLAorCQkJIlVuYWJsZSB0byB1cGRhdGUgaGFyZHdhcmUgcXVldWUgJXUhXG4iLCBxbnVtKTsKIAkJZXJyb3IgPSAtRUlPOwogCX0gZWxzZSB7CiAJCWF0aDlrX2h3X3Jlc2V0dHhxdWV1ZShhaCwgcW51bSk7CkBAIC0yNDQsNyArMjUxLDcgQEAKIAkJCQlpc3RhID0gKHN0cnVjdCBhdGg5a19odGNfc3RhICopc3RhLT5kcnZfcHJpdjsKIAogCQkJCWlmIChhdGg5a19odGNfY2hlY2tfdHhfYWdncihwcml2LCBpc3RhLCB0aWQpKSB7Ci0JCQkJCWllZWU4MDIxMV9zdGFydF90eF9iYV9zZXNzaW9uKHN0YSwgdGlkKTsKKwkJCQkJaWVlZTgwMjExX3N0YXJ0X3R4X2JhX3Nlc3Npb24oc3RhLCB0aWQsIDApOwogCQkJCQlzcGluX2xvY2tfYmgoJnByaXYtPnR4X2xvY2spOwogCQkJCQlpc3RhLT50aWRfc3RhdGVbdGlkXSA9IEFHR1JfUFJPR1JFU1M7CiAJCQkJCXNwaW5fdW5sb2NrX2JoKCZwcml2LT50eF9sb2NrKTsKQEAgLTI2Myw4ICsyNzAsOCBAQAogCWlmIChwcml2LT50eF9xdWV1ZXNfc3RvcCkgewogCQlwcml2LT50eF9xdWV1ZXNfc3RvcCA9IGZhbHNlOwogCQlzcGluX3VubG9ja19iaCgmcHJpdi0+dHhfbG9jayk7Ci0JCWF0aF9wcmludChhdGg5a19od19jb21tb24ocHJpdi0+YWgpLCBBVEhfREJHX1hNSVQsCi0JCQkgICJXYWtpbmcgdXAgVFggcXVldWVzXG4iKTsKKwkJYXRoX2RiZyhhdGg5a19od19jb21tb24ocHJpdi0+YWgpLCBBVEhfREJHX1hNSVQsCisJCQkiV2FraW5nIHVwIFRYIHF1ZXVlc1xuIik7CiAJCWllZWU4MDIxMV93YWtlX3F1ZXVlcyhwcml2LT5odyk7CiAJCXJldHVybjsKIAl9CkBAIC0yODksOCArMjk2LDcgQEAKIAkJICAgKGVwX2lkID09IHByaXYtPmRhdGFfdm9fZXApKSB7CiAJCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCB0eF9mcmFtZV9oZHIpKTsKIAl9IGVsc2UgewotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0ZBVEFMLAotCQkJICAiVW5zdXBwb3J0ZWQgVFggRVBJRDogJWRcbiIsIGVwX2lkKTsKKwkJYXRoX2Vycihjb21tb24sICJVbnN1cHBvcnRlZCBUWCBFUElEOiAlZFxuIiwgZXBfaWQpOwogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQlyZXR1cm47CiAJfQpAQCAtMzMwLDkgKzMzNiw4IEBACiAJCXJldHVybiBmYWxzZTsKIAogCWlmIChxbnVtID49IEFSUkFZX1NJWkUocHJpdi0+aHdxX21hcCkpIHsKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19GQVRBTCwKLQkJCSAgInFudW0gJXUgb3V0IG9mIHJhbmdlLCBtYXggJXUhXG4iLAotCQkJICBxbnVtLCAodW5zaWduZWQgaW50KUFSUkFZX1NJWkUocHJpdi0+aHdxX21hcCkpOworCQlhdGhfZXJyKGNvbW1vbiwgInFudW0gJXUgb3V0IG9mIHJhbmdlLCBtYXggJXp1IVxuIiwKKwkJCXFudW0sIEFSUkFZX1NJWkUocHJpdi0+aHdxX21hcCkpOwogCQlhdGg5a19od19yZWxlYXNldHhxdWV1ZShhaCwgcW51bSk7CiAJCXJldHVybiBmYWxzZTsKIAl9CkBAIC00ODMsOCArNDg4LDcgQEAKIAlfX2xlMTYgZmM7CiAKIAlpZiAoc2tiLT5sZW4gPD0gSFRDX1JYX0ZSQU1FX0hFQURFUl9TSVpFKSB7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRkFUQUwsCi0JCQkgICJDb3JydXB0ZWQgUlggZnJhbWUsIGRyb3BwaW5nXG4iKTsKKwkJYXRoX2Vycihjb21tb24sICJDb3JydXB0ZWQgUlggZnJhbWUsIGRyb3BwaW5nXG4iKTsKIAkJZ290byByeF9uZXh0OwogCX0KIApAQCAtNDkyLDEwICs0OTYsOSBAQAogCiAJaWYgKGJlMTZfdG9fY3B1KHJ4c3RhdHVzLT5yc19kYXRhbGVuKSAtCiAJICAgIChza2ItPmxlbiAtIEhUQ19SWF9GUkFNRV9IRUFERVJfU0laRSkgIT0gMCkgewotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0ZBVEFMLAotCQkJICAiQ29ycnVwdGVkIFJYIGRhdGEgbGVuLCBkcm9wcGluZyAiCi0JCQkgICIoZGxlbjogJWQsIHNrYmxlbjogJWQpXG4iLAotCQkJICByeHN0YXR1cy0+cnNfZGF0YWxlbiwgc2tiLT5sZW4pOworCQlhdGhfZXJyKGNvbW1vbiwKKwkJCSJDb3JydXB0ZWQgUlggZGF0YSBsZW4sIGRyb3BwaW5nIChkbGVuOiAlZCwgc2tibGVuOiAlZClcbiIsCisJCQlyeHN0YXR1cy0+cnNfZGF0YWxlbiwgc2tiLT5sZW4pOwogCQlnb3RvIHJ4X25leHQ7CiAJfQogCkBAIC02NzgsOCArNjgxLDggQEAKIAlzcGluX3VubG9jaygmcHJpdi0+cngucnhidWZsb2NrKTsKIAogCWlmIChyeGJ1ZiA9PSBOVUxMKSB7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQU5ZLAotCQkJICAiTm8gZnJlZSBSWCBidWZmZXJcbiIpOworCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19BTlksCisJCQkiTm8gZnJlZSBSWCBidWZmZXJcbiIpOwogCQlnb3RvIGVycjsKIAl9CiAKQEAgLTcyMSw4ICs3MjQsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBBVEg5S19IVENfUlhCVUY7IGkrKykgewogCQlyeGJ1ZiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhdGg5a19odGNfcnhidWYpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKHJ4YnVmID09IE5VTEwpIHsKLQkJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRkFUQUwsCi0JCQkJICAiVW5hYmxlIHRvIGFsbG9jYXRlIFJYIGJ1ZmZlcnNcbiIpOworCQkJYXRoX2Vycihjb21tb24sICJVbmFibGUgdG8gYWxsb2NhdGUgUlggYnVmZmVyc1xuIik7CiAJCQlnb3RvIGVycjsKIAkJfQogCQlsaXN0X2FkZF90YWlsKCZyeGJ1Zi0+bGlzdCwgJnByaXYtPnJ4LnJ4YnVmKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfaHN0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2hzdC5jCmluZGV4IDg2MWVjOTIuLmM0MWFiOGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfaHN0LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19oc3QuYwpAQCAtNDYyLDkgKzQ2MiwxMCBAQAogfQogCiBpbnQgYXRoOWtfaHRjX2h3X2luaXQoc3RydWN0IGh0Y190YXJnZXQgKnRhcmdldCwKLQkJICAgICAgc3RydWN0IGRldmljZSAqZGV2LCB1MTYgZGV2aWQsIGNoYXIgKnByb2R1Y3QpCisJCSAgICAgIHN0cnVjdCBkZXZpY2UgKmRldiwgdTE2IGRldmlkLAorCQkgICAgICBjaGFyICpwcm9kdWN0LCB1MzIgZHJ2X2luZm8pCiB7Ci0JaWYgKGF0aDlrX2h0Y19wcm9iZV9kZXZpY2UodGFyZ2V0LCBkZXYsIGRldmlkLCBwcm9kdWN0KSkgeworCWlmIChhdGg5a19odGNfcHJvYmVfZGV2aWNlKHRhcmdldCwgZGV2LCBkZXZpZCwgcHJvZHVjdCwgZHJ2X2luZm8pKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIGluaXRpYWxpemUgdGhlIGRldmljZVxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfaHN0LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2hzdC5oCmluZGV4IDA3YjY1MDkuLmVjZDAxODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfaHN0LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19oc3QuaApAQCAtNzcsMjAgKzc3LDYgQEAKIAl1OCBjcmVkaXRzOwogfSBfX3BhY2tlZDsKIAotc3RydWN0IGh0Y19wYWNrZXQgewotCXZvaWQgKnBrdGNvbnRleHQ7Ci0JdTggKmJ1ZjsKLQl1OCAqYnVmX3BheWxvYWQ7Ci0JdTMyIGJ1ZmxlbjsKLQl1MzIgcGF5bG9hZF9sZW47Ci0KLQlpbnQgZW5kcG9pbnQ7Ci0JaW50IHN0YXR1czsKLQotCXZvaWQgKmNvbnRleHQ7Ci0JdTMyIHJlc2VydmVkOwotfTsKLQogc3RydWN0IGh0Y19lcF9jYWxsYmFja3MgewogCXZvaWQgKnByaXY7CiAJdm9pZCAoKnR4KSAodm9pZCAqLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBlbnVtIGh0Y19lbmRwb2ludF9pZCwgYm9vbCB0eG9rKTsKQEAgLTEyMywxMSArMTA5LDYgQEAKICNkZWZpbmUgSFRDX0NPTlRST0xfQlVGRkVSX1NJWkUJXAogCShIVENfTUFYX0NPTlRST0xfTUVTU0FHRV9MRU5HVEggKyBzaXplb2Yoc3RydWN0IGh0Y19mcmFtZV9oZHIpKQogCi1zdHJ1Y3QgaHRjX2NvbnRyb2xfYnVmIHsKLQlzdHJ1Y3QgaHRjX3BhY2tldCBodGNfcGt0OwotCXU4IGJ1ZltIVENfQ09OVFJPTF9CVUZGRVJfU0laRV07Ci19OwotCiAjZGVmaW5lIEhUQ19PUF9TVEFSVF9XQUlUICAgICAgICAgICBCSVQoMCkKICNkZWZpbmUgSFRDX09QX0NPTkZJR19QSVBFX0NSRURJVFMgIEJJVCgxKQogCkBAIC0yMzksNyArMjIwLDggQEAKIAkJCQkgICAgICBzdHJ1Y3QgZGV2aWNlICpkZXYpOwogdm9pZCBhdGg5a19odGNfaHdfZnJlZShzdHJ1Y3QgaHRjX3RhcmdldCAqaHRjKTsKIGludCBhdGg5a19odGNfaHdfaW5pdChzdHJ1Y3QgaHRjX3RhcmdldCAqdGFyZ2V0LAotCQkgICAgICBzdHJ1Y3QgZGV2aWNlICpkZXYsIHUxNiBkZXZpZCwgY2hhciAqcHJvZHVjdCk7CisJCSAgICAgIHN0cnVjdCBkZXZpY2UgKmRldiwgdTE2IGRldmlkLCBjaGFyICpwcm9kdWN0LAorCQkgICAgICB1MzIgZHJ2X2luZm8pOwogdm9pZCBhdGg5a19odGNfaHdfZGVpbml0KHN0cnVjdCBodGNfdGFyZ2V0ICp0YXJnZXQsIGJvb2wgaG90X3VucGx1Zyk7CiAKICNlbmRpZiAvKiBIVENfSFNUX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9ody1vcHMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9ody1vcHMuaAppbmRleCAwYTRhZDM0Li5jOGYyNTRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHctb3BzLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LW9wcy5oCkBAIC0yMjMsMTEgKzIyMyw2IEBACiAJcmV0dXJuIGF0aDlrX2h3X3ByaXZhdGVfb3BzKGFoKS0+cmZidXNfZG9uZShhaCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBhdGg5a19lbmFibGVfcmZraWxsKHN0cnVjdCBhdGhfaHcgKmFoKQotewotCXJldHVybiBhdGg5a19od19wcml2YXRlX29wcyhhaCktPmVuYWJsZV9yZmtpbGwoYWgpOwotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgYXRoOWtfaHdfcmVzdG9yZV9jaGFpbm1hc2soc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJaWYgKCFhdGg5a19od19wcml2YXRlX29wcyhhaCktPnJlc3RvcmVfY2hhaW5tYXNrKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHcuYwppbmRleCBjN2ZiZTI1Li5mZGU5Nzg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHcuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHcuYwpAQCAtNTQsMTMgKzU0LDYgQEAKIAlhdGg5a19od19wcml2YXRlX29wcyhhaCktPmluaXRfbW9kZV9yZWdzKGFoKTsKIH0KIAotc3RhdGljIGJvb2wgYXRoOWtfaHdfbWFjdmVyc2lvbl9zdXBwb3J0ZWQoc3RydWN0IGF0aF9odyAqYWgpCi17Ci0Jc3RydWN0IGF0aF9od19wcml2YXRlX29wcyAqcHJpdl9vcHMgPSBhdGg5a19od19wcml2YXRlX29wcyhhaCk7Ci0KLQlyZXR1cm4gcHJpdl9vcHMtPm1hY3ZlcnNpb25fc3VwcG9ydGVkKGFoLT5od192ZXJzaW9uLm1hY1ZlcnNpb24pOwotfQotCiBzdGF0aWMgdTMyIGF0aDlrX2h3X2NvbXB1dGVfcGxsX2NvbnRyb2woc3RydWN0IGF0aF9odyAqYWgsCiAJCQkJCXN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQogewpAQCAtMTI5LDkgKzEyMiw5IEBACiAJCXVkZWxheShBSF9USU1FX1FVQU5UVU0pOwogCX0KIAotCWF0aF9wcmludChhdGg5a19od19jb21tb24oYWgpLCBBVEhfREJHX0FOWSwKLQkJICAidGltZW91dCAoJWQgdXMpIG9uIHJlZyAweCV4OiAweCUwOHggJiAweCUwOHggIT0gMHglMDh4XG4iLAotCQkgIHRpbWVvdXQsIHJlZywgUkVHX1JFQUQoYWgsIHJlZyksIG1hc2ssIHZhbCk7CisJYXRoX2RiZyhhdGg5a19od19jb21tb24oYWgpLCBBVEhfREJHX0FOWSwKKwkJInRpbWVvdXQgKCVkIHVzKSBvbiByZWcgMHgleDogMHglMDh4ICYgMHglMDh4ICE9IDB4JTA4eFxuIiwKKwkJdGltZW91dCwgcmVnLCBSRUdfUkVBRChhaCwgcmVnKSwgbWFzaywgdmFsKTsKIAogCXJldHVybiBmYWxzZTsKIH0KQEAgLTIxMSw4ICsyMDQsOCBAQAogCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWF0aF9wcmludChhdGg5a19od19jb21tb24oYWgpLCBBVEhfREJHX0ZBVEFMLAotCQkJICAiVW5rbm93biBwaHkgJXUgKHJhdGUgaXggJXUpXG4iLCBwaHksIHJhdGVpeCk7CisJCWF0aF9lcnIoYXRoOWtfaHdfY29tbW9uKGFoKSwKKwkJCSJVbmtub3duIHBoeSAldSAocmF0ZSBpeCAldSlcbiIsIHBoeSwgcmF0ZWl4KTsKIAkJdHhUaW1lID0gMDsKIAkJYnJlYWs7CiAJfQpAQCAtMjg0LDExICsyNzcsOSBAQAogCiBzdGF0aWMgdm9pZCBhdGg5a19od19kaXNhYmxlcGNpZShzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKLQlpZiAoQVJfU1JFVl85MTAwKGFoKSkKKwlpZiAoIUFSX1NSRVZfNTQxNihhaCkpCiAJCXJldHVybjsKIAotCUVOQUJMRV9SRUdXUklURV9CVUZGRVIoYWgpOwotCiAJUkVHX1dSSVRFKGFoLCBBUl9QQ0lFX1NFUkRFUywgMHg5MjQ4ZmMwMCk7CiAJUkVHX1dSSVRFKGFoLCBBUl9QQ0lFX1NFUkRFUywgMHgyNDkyNDkyNCk7CiAJUkVHX1dSSVRFKGFoLCBBUl9QQ0lFX1NFUkRFUywgMHgyODAwMDAyOSk7CkBAIC0zMDAsOCArMjkxLDYgQEAKIAlSRUdfV1JJVEUoYWgsIEFSX1BDSUVfU0VSREVTLCAweDAwMGUxMDA3KTsKIAogCVJFR19XUklURShhaCwgQVJfUENJRV9TRVJERVMyLCAweDAwMDAwMDAwKTsKLQotCVJFR1dSSVRFX0JVRkZFUl9GTFVTSChhaCk7CiB9CiAKIC8qIFRoaXMgc2hvdWxkIHdvcmsgZm9yIGFsbCBmYW1pbGllcyBpbmNsdWRpbmcgbGVnYWN5ICovCkBAIC0zMTAsMTAgKzI5OSw5IEBACiAJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihhaCk7CiAJdTMyIHJlZ0FkZHJbMl0gPSB7IEFSX1NUQV9JRDAgfTsKIAl1MzIgcmVnSG9sZFsyXTsKLQl1MzIgcGF0dGVybkRhdGFbNF0gPSB7IDB4NTU1NTU1NTUsCi0JCQkgICAgICAgMHhhYWFhYWFhYSwKLQkJCSAgICAgICAweDY2NjY2NjY2LAotCQkJICAgICAgIDB4OTk5OTk5OTkgfTsKKwlzdGF0aWMgY29uc3QgdTMyIHBhdHRlcm5EYXRhWzRdID0geworCQkweDU1NTU1NTU1LCAweGFhYWFhYWFhLCAweDY2NjY2NjY2LCAweDk5OTk5OTk5CisJfTsKIAlpbnQgaSwgaiwgbG9vcF9tYXg7CiAKIAlpZiAoIUFSX1NSRVZfOTMwMF8yMF9PUl9MQVRFUihhaCkpIHsKQEAgLTMzMiwxMSArMzIwLDkgQEAKIAkJCVJFR19XUklURShhaCwgYWRkciwgd3JEYXRhKTsKIAkJCXJkRGF0YSA9IFJFR19SRUFEKGFoLCBhZGRyKTsKIAkJCWlmIChyZERhdGEgIT0gd3JEYXRhKSB7Ci0JCQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19GQVRBTCwKLQkJCQkJICAiYWRkcmVzcyB0ZXN0IGZhaWxlZCAiCi0JCQkJCSAgImFkZHI6IDB4JTA4eCAtIHdyOjB4JTA4eCAhPSAiCi0JCQkJCSAgInJkOjB4JTA4eFxuIiwKLQkJCQkJICBhZGRyLCB3ckRhdGEsIHJkRGF0YSk7CisJCQkJYXRoX2Vycihjb21tb24sCisJCQkJCSJhZGRyZXNzIHRlc3QgZmFpbGVkIGFkZHI6IDB4JTA4eCAtIHdyOjB4JTA4eCAhPSByZDoweCUwOHhcbiIsCisJCQkJCWFkZHIsIHdyRGF0YSwgcmREYXRhKTsKIAkJCQlyZXR1cm4gZmFsc2U7CiAJCQl9CiAJCX0KQEAgLTM0NSwxMSArMzMxLDkgQEAKIAkJCVJFR19XUklURShhaCwgYWRkciwgd3JEYXRhKTsKIAkJCXJkRGF0YSA9IFJFR19SRUFEKGFoLCBhZGRyKTsKIAkJCWlmICh3ckRhdGEgIT0gcmREYXRhKSB7Ci0JCQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19GQVRBTCwKLQkJCQkJICAiYWRkcmVzcyB0ZXN0IGZhaWxlZCAiCi0JCQkJCSAgImFkZHI6IDB4JTA4eCAtIHdyOjB4JTA4eCAhPSAiCi0JCQkJCSAgInJkOjB4JTA4eFxuIiwKLQkJCQkJICBhZGRyLCB3ckRhdGEsIHJkRGF0YSk7CisJCQkJYXRoX2Vycihjb21tb24sCisJCQkJCSJhZGRyZXNzIHRlc3QgZmFpbGVkIGFkZHI6IDB4JTA4eCAtIHdyOjB4JTA4eCAhPSByZDoweCUwOHhcbiIsCisJCQkJCWFkZHIsIHdyRGF0YSwgcmREYXRhKTsKIAkJCQlyZXR1cm4gZmFsc2U7CiAJCQl9CiAJCX0KQEAgLTQxOSwxNyArNDAzLDEyIEBACiAJYWgtPmh3X3ZlcnNpb24ubWFnaWMgPSBBUjU0MTZfTUFHSUM7CiAJYWgtPmh3X3ZlcnNpb24uc3VidmVuZG9yaWQgPSAwOwogCi0JYWgtPmFoX2ZsYWdzID0gMDsKLQlpZiAoIUFSX1NSRVZfOTEwMChhaCkpCi0JCWFoLT5haF9mbGFncyA9IEFIX1VTRV9FRVBST007Ci0KIAlhaC0+YXRpbV93aW5kb3cgPSAwOwogCWFoLT5zdGFfaWQxX2RlZmF1bHRzID0KIAkJQVJfU1RBX0lEMV9DUlBUX01JQ19FTkFCTEUgfAogCQlBUl9TVEFfSUQxX01DQVNUX0tTUkNIOwotCWFoLT5iZWFjb25faW50ZXJ2YWwgPSAxMDA7CiAJYWgtPmVuYWJsZV8zMmtIel9jbG9jayA9IERPTlRfVVNFXzMyS0haOwotCWFoLT5zbG90dGltZSA9ICh1MzIpIC0xOworCWFoLT5zbG90dGltZSA9IDIwOwogCWFoLT5nbG9iYWx0eHRpbWVvdXQgPSAodTMyKSAtMTsKIAlhaC0+cG93ZXJfbW9kZSA9IEFUSDlLX1BNX1VOREVGSU5FRDsKIH0KQEAgLTQ0MCw3ICs0MTksNyBAQAogCXUzMiBzdW07CiAJaW50IGk7CiAJdTE2IGVldmFsOwotCXUzMiBFRVBfTUFDW10gPSB7IEVFUF9NQUNfTFNXLCBFRVBfTUFDX01JRCwgRUVQX01BQ19NU1cgfTsKKwlzdGF0aWMgY29uc3QgdTMyIEVFUF9NQUNbXSA9IHsgRUVQX01BQ19MU1csIEVFUF9NQUNfTUlELCBFRVBfTUFDX01TVyB9OwogCiAJc3VtID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CkBAIC00NzQsMTYgKzQ1MywxNSBAQAogCWlmIChlY29kZSAhPSAwKQogCQlyZXR1cm4gZWNvZGU7CiAKLQlhdGhfcHJpbnQoYXRoOWtfaHdfY29tbW9uKGFoKSwgQVRIX0RCR19DT05GSUcsCi0JCSAgIkVlcHJvbSBWRVI6ICVkLCBSRVY6ICVkXG4iLAotCQkgIGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tX3ZlcihhaCksCi0JCSAgYWgtPmVlcF9vcHMtPmdldF9lZXByb21fcmV2KGFoKSk7CisJYXRoX2RiZyhhdGg5a19od19jb21tb24oYWgpLCBBVEhfREJHX0NPTkZJRywKKwkJIkVlcHJvbSBWRVI6ICVkLCBSRVY6ICVkXG4iLAorCQlhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbV92ZXIoYWgpLAorCQlhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbV9yZXYoYWgpKTsKIAogCWVjb2RlID0gYXRoOWtfaHdfcmZfYWxsb2NfZXh0X2JhbmtzKGFoKTsKIAlpZiAoZWNvZGUpIHsKLQkJYXRoX3ByaW50KGF0aDlrX2h3X2NvbW1vbihhaCksIEFUSF9EQkdfRkFUQUwsCi0JCQkgICJGYWlsZWQgYWxsb2NhdGluZyBiYW5rcyBmb3IgIgotCQkJICAiZXh0ZXJuYWwgcmFkaW9cbiIpOworCQlhdGhfZXJyKGF0aDlrX2h3X2NvbW1vbihhaCksCisJCQkiRmFpbGVkIGFsbG9jYXRpbmcgYmFua3MgZm9yIGV4dGVybmFsIHJhZGlvXG4iKTsKIAkJYXRoOWtfaHdfcmZfZnJlZV9leHRfYmFua3MoYWgpOwogCQlyZXR1cm4gZWNvZGU7CiAJfQpAQCAtNTE0LDggKzQ5Miw3IEBACiAJCWFoLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPSBBUl9TUkVWX1ZFUlNJT05fOTEwMDsKIAogCWlmICghYXRoOWtfaHdfc2V0X3Jlc2V0X3JlZyhhaCwgQVRIOUtfUkVTRVRfUE9XRVJfT04pKSB7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRkFUQUwsCi0JCQkgICJDb3VsZG4ndCByZXNldCBjaGlwXG4iKTsKKwkJYXRoX2Vycihjb21tb24sICJDb3VsZG4ndCByZXNldCBjaGlwXG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC01MjUsNyArNTAyLDcgQEAKIAlhdGg5a19od19hdHRhY2hfb3BzKGFoKTsKIAogCWlmICghYXRoOWtfaHdfc2V0cG93ZXIoYWgsIEFUSDlLX1BNX0FXQUtFKSkgewotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0ZBVEFMLCAiQ291bGRuJ3Qgd2FrZXVwIGNoaXBcbiIpOworCQlhdGhfZXJyKGNvbW1vbiwgIkNvdWxkbid0IHdha2V1cCBjaGlwXG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC01NDEsNyArNTE4LDcgQEAKIAkJfQogCX0KIAotCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfUkVTRVQsICJzZXJpYWxpemVfcmVnbW9kZSBpcyAlZFxuIiwKKwlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19SRVNFVCwgInNlcmlhbGl6ZV9yZWdtb2RlIGlzICVkXG4iLAogCQlhaC0+Y29uZmlnLnNlcmlhbGl6ZV9yZWdtb2RlKTsKIAogCWlmIChBUl9TUkVWXzkyODUoYWgpIHx8IEFSX1NSRVZfOTI3MShhaCkpCkBAIC01NDksMTEgKzUyNiwyMiBAQAogCWVsc2UKIAkJYWgtPmNvbmZpZy5tYXhfdHh0cmlnX2xldmVsID0gTUFYX1RYX0ZJRk9fVEhSRVNIT0xEOwogCi0JaWYgKCFhdGg5a19od19tYWN2ZXJzaW9uX3N1cHBvcnRlZChhaCkpIHsKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19GQVRBTCwKLQkJCSAgIk1hYyBDaGlwIFJldiAweCUwMnguJXggaXMgbm90IHN1cHBvcnRlZCBieSAiCi0JCQkgICJ0aGlzIGRyaXZlclxuIiwgYWgtPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiwKLQkJCSAgYWgtPmh3X3ZlcnNpb24ubWFjUmV2KTsKKwlzd2l0Y2ggKGFoLT5od192ZXJzaW9uLm1hY1ZlcnNpb24pIHsKKwljYXNlIEFSX1NSRVZfVkVSU0lPTl81NDE2X1BDSToKKwljYXNlIEFSX1NSRVZfVkVSU0lPTl81NDE2X1BDSUU6CisJY2FzZSBBUl9TUkVWX1ZFUlNJT05fOTE2MDoKKwljYXNlIEFSX1NSRVZfVkVSU0lPTl85MTAwOgorCWNhc2UgQVJfU1JFVl9WRVJTSU9OXzkyODA6CisJY2FzZSBBUl9TUkVWX1ZFUlNJT05fOTI4NToKKwljYXNlIEFSX1NSRVZfVkVSU0lPTl85Mjg3OgorCWNhc2UgQVJfU1JFVl9WRVJTSU9OXzkyNzE6CisJY2FzZSBBUl9TUkVWX1ZFUlNJT05fOTMwMDoKKwljYXNlIEFSX1NSRVZfVkVSU0lPTl85NDg1OgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlhdGhfZXJyKGNvbW1vbiwKKwkJCSJNYWMgQ2hpcCBSZXYgMHglMDJ4LiV4IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXJcbiIsCisJCQlhaC0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uLCBhaC0+aHdfdmVyc2lvbi5tYWNSZXYpOwogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQogCkBAIC01OTksOCArNTg3LDcgQEAKIAogCXIgPSBhdGg5a19od19pbml0X21hY2FkZHIoYWgpOwogCWlmIChyKSB7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRkFUQUwsCi0JCQkgICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBNQUMgYWRkcmVzc1xuIik7CisJCWF0aF9lcnIoY29tbW9uLCAiRmFpbGVkIHRvIGluaXRpYWxpemUgTUFDIGFkZHJlc3NcbiIpOwogCQlyZXR1cm4gcjsKIAl9CiAKQEAgLTYzNCwyMSArNjIxLDIxIEBACiAJY2FzZSBBUjkyODdfREVWSURfUENJRToKIAljYXNlIEFSMjQyN19ERVZJRF9QQ0lFOgogCWNhc2UgQVI5MzAwX0RFVklEX1BDSUU6CisJY2FzZSBBUjkzMDBfREVWSURfQVI5NDg1X1BDSUU6CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWlmIChjb21tb24tPmJ1c19vcHMtPmF0aF9idXNfdHlwZSA9PSBBVEhfVVNCKQogCQkJYnJlYWs7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRkFUQUwsCi0JCQkgICJIYXJkd2FyZSBkZXZpY2UgSUQgMHglMDR4IG5vdCBzdXBwb3J0ZWRcbiIsCi0JCQkgIGFoLT5od192ZXJzaW9uLmRldmlkKTsKKwkJYXRoX2Vycihjb21tb24sICJIYXJkd2FyZSBkZXZpY2UgSUQgMHglMDR4IG5vdCBzdXBwb3J0ZWRcbiIsCisJCQlhaC0+aHdfdmVyc2lvbi5kZXZpZCk7CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CiAKIAlyZXQgPSBfX2F0aDlrX2h3X2luaXQoYWgpOwogCWlmIChyZXQpIHsKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19GQVRBTCwKLQkJCSAgIlVuYWJsZSB0byBpbml0aWFsaXplIGhhcmR3YXJlOyAiCi0JCQkgICJpbml0aWFsaXphdGlvbiBzdGF0dXM6ICVkXG4iLCByZXQpOworCQlhdGhfZXJyKGNvbW1vbiwKKwkJCSJVbmFibGUgdG8gaW5pdGlhbGl6ZSBoYXJkd2FyZTsgaW5pdGlhbGl6YXRpb24gc3RhdHVzOiAlZFxuIiwKKwkJCXJldCk7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC02ODAsNyArNjY3LDEyIEBACiBzdGF0aWMgdm9pZCBhdGg5a19od19pbml0X3BsbChzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCSAgICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQogewotCXUzMiBwbGwgPSBhdGg5a19od19jb21wdXRlX3BsbF9jb250cm9sKGFoLCBjaGFuKTsKKwl1MzIgcGxsOworCisJaWYgKEFSX1NSRVZfOTQ4NShhaCkpCisJCVJFR19XUklURShhaCwgQVJfUlRDX1BMTF9DT05UUk9MMiwgMHg4ODY2NjYpOworCisJcGxsID0gYXRoOWtfaHdfY29tcHV0ZV9wbGxfY29udHJvbChhaCwgY2hhbik7CiAKIAlSRUdfV1JJVEUoYWgsIEFSX1JUQ19QTExfQ09OVFJPTCwgcGxsKTsKIApAQCAtNzcyLDggKzc2NCw4IEBACiBzdGF0aWMgYm9vbCBhdGg5a19od19zZXRfZ2xvYmFsX3R4dGltZW91dChzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHR1KQogewogCWlmICh0dSA+IDB4RkZGRikgewotCQlhdGhfcHJpbnQoYXRoOWtfaHdfY29tbW9uKGFoKSwgQVRIX0RCR19YTUlULAotCQkJICAiYmFkIGdsb2JhbCB0eCB0aW1lb3V0ICV1XG4iLCB0dSk7CisJCWF0aF9kYmcoYXRoOWtfaHdfY29tbW9uKGFoKSwgQVRIX0RCR19YTUlULAorCQkJImJhZCBnbG9iYWwgdHggdGltZW91dCAldVxuIiwgdHUpOwogCQlhaC0+Z2xvYmFsdHh0aW1lb3V0ID0gKHUzMikgLTE7CiAJCXJldHVybiBmYWxzZTsKIAl9IGVsc2UgewpAQCAtNzkwLDggKzc4Miw4IEBACiAJaW50IHNsb3R0aW1lOwogCWludCBzaWZzdGltZTsKIAotCWF0aF9wcmludChhdGg5a19od19jb21tb24oYWgpLCBBVEhfREJHX1JFU0VULCAiYWgtPm1pc2NfbW9kZSAweCV4XG4iLAotCQkgIGFoLT5taXNjX21vZGUpOworCWF0aF9kYmcoYXRoOWtfaHdfY29tbW9uKGFoKSwgQVRIX0RCR19SRVNFVCwgImFoLT5taXNjX21vZGUgMHgleFxuIiwKKwkJYWgtPm1pc2NfbW9kZSk7CiAKIAlpZiAoYWgtPm1pc2NfbW9kZSAhPSAwKQogCQlSRUdfV1JJVEUoYWgsIEFSX1BDVV9NSVNDLApAQCAtODE2LDcgKzgwOCw3IEBACiAJaWYgKGNvbmYtPmNoYW5uZWwgJiYgY29uZi0+Y2hhbm5lbC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haKQogCQlhY2t0aW1lb3V0ICs9IDY0IC0gc2lmc3RpbWUgLSBhaC0+c2xvdHRpbWU7CiAKLQlhdGg5a19od19zZXRzbG90dGltZShhaCwgc2xvdHRpbWUpOworCWF0aDlrX2h3X3NldHNsb3R0aW1lKGFoLCBhaC0+c2xvdHRpbWUpOwogCWF0aDlrX2h3X3NldF9hY2tfdGltZW91dChhaCwgYWNrdGltZW91dCk7CiAJYXRoOWtfaHdfc2V0X2N0c190aW1lb3V0KGFoLCBhY2t0aW1lb3V0KTsKIAlpZiAoYWgtPmdsb2JhbHR4dGltZW91dCAhPSAodTMyKSAtMSkKQEAgLTEwMzQsOCArMTAyNiw4IEBACiAKIAlSRUdfV1JJVEUoYWgsIEFSX1JUQ19SQywgMCk7CiAJaWYgKCFhdGg5a19od193YWl0KGFoLCBBUl9SVENfUkMsIEFSX1JUQ19SQ19NLCAwLCBBSF9XQUlUX1RJTUVPVVQpKSB7Ci0JCWF0aF9wcmludChhdGg5a19od19jb21tb24oYWgpLCBBVEhfREJHX1JFU0VULAotCQkJICAiUlRDIHN0dWNrIGluIE1BQyByZXNldFxuIik7CisJCWF0aF9kYmcoYXRoOWtfaHdfY29tbW9uKGFoKSwgQVRIX0RCR19SRVNFVCwKKwkJCSJSVEMgc3R1Y2sgaW4gTUFDIHJlc2V0XG4iKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KIApAQCAtMTA4MSw4ICsxMDczLDggQEAKIAkJCSAgIEFSX1JUQ19TVEFUVVNfTSwKIAkJCSAgIEFSX1JUQ19TVEFUVVNfT04sCiAJCQkgICBBSF9XQUlUX1RJTUVPVVQpKSB7Ci0JCWF0aF9wcmludChhdGg5a19od19jb21tb24oYWgpLCBBVEhfREJHX1JFU0VULAotCQkJICAiUlRDIG5vdCB3YWtpbmcgdXBcbiIpOworCQlhdGhfZGJnKGF0aDlrX2h3X2NvbW1vbihhaCksIEFUSF9EQkdfUkVTRVQsCisJCQkiUlRDIG5vdCB3YWtpbmcgdXBcbiIpOwogCQlyZXR1cm4gZmFsc2U7CiAJfQogCkBAIC0xMTQyLDE2ICsxMTM0LDE0IEBACiAKIAlmb3IgKHFudW0gPSAwOyBxbnVtIDwgQVJfTlVNX1FDVTsgcW51bSsrKSB7CiAJCWlmIChhdGg5a19od19udW10eHBlbmRpbmcoYWgsIHFudW0pKSB7Ci0JCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX1FVRVVFLAotCQkJCSAgIlRyYW5zbWl0IGZyYW1lcyBwZW5kaW5nIG9uICIKLQkJCQkgICJxdWV1ZSAlZFxuIiwgcW51bSk7CisJCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19RVUVVRSwKKwkJCQkiVHJhbnNtaXQgZnJhbWVzIHBlbmRpbmcgb24gcXVldWUgJWRcbiIsIHFudW0pOwogCQkJcmV0dXJuIGZhbHNlOwogCQl9CiAJfQogCiAJaWYgKCFhdGg5a19od19yZmJ1c19yZXEoYWgpKSB7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRkFUQUwsCi0JCQkgICJDb3VsZCBub3Qga2lsbCBiYXNlYmFuZCBSWFxuIik7CisJCWF0aF9lcnIoY29tbW9uLCAiQ291bGQgbm90IGtpbGwgYmFzZWJhbmQgUlhcbiIpOwogCQlyZXR1cm4gZmFsc2U7CiAJfQogCkBAIC0xMTU5LDggKzExNDksNyBAQAogCiAJciA9IGF0aDlrX2h3X3JmX3NldF9mcmVxKGFoLCBjaGFuKTsKIAlpZiAocikgewotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0ZBVEFMLAotCQkJICAiRmFpbGVkIHRvIHNldCBjaGFubmVsXG4iKTsKKwkJYXRoX2Vycihjb21tb24sICJGYWlsZWQgdG8gc2V0IGNoYW5uZWxcbiIpOwogCQlyZXR1cm4gZmFsc2U7CiAJfQogCWF0aDlrX2h3X3NldF9jbG9ja3JhdGUoYWgpOwpAQCAtMTE3MCw3ICsxMTU5LDcgQEAKIAkJCSAgICAgY2hhbm5lbC0+bWF4X2FudGVubmFfZ2FpbiAqIDIsCiAJCQkgICAgIGNoYW5uZWwtPm1heF9wb3dlciAqIDIsCiAJCQkgICAgIG1pbigodTMyKSBNQVhfUkFURV9QT1dFUiwKLQkJCSAgICAgKHUzMikgcmVndWxhdG9yeS0+cG93ZXJfbGltaXQpKTsKKwkJCSAgICAgKHUzMikgcmVndWxhdG9yeS0+cG93ZXJfbGltaXQpLCBmYWxzZSk7CiAKIAlhdGg5a19od19yZmJ1c19kb25lKGFoKTsKIApAQCAtMTIyNyw3ICsxMjE2LDcgQEAKIAlpZiAoIWFoLT5jaGlwX2Z1bGxzbGVlcCkgewogCQlhdGg5a19od19hYm9ydHBjdXJlY3YoYWgpOwogCQlpZiAoIWF0aDlrX2h3X3N0b3BkbWFyZWN2KGFoKSkgewotCQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19YTUlULAorCQkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfWE1JVCwKIAkJCQkiRmFpbGVkIHRvIHN0b3AgcmVjZWl2ZSBkbWFcbiIpOwogCQkJYkNoYW5uZWxDaGFuZ2UgPSBmYWxzZTsKIAkJfQpAQCAtMTI4Myw2ICsxMjcyLDggQEAKIAogCWF0aDlrX2h3X21hcmtfcGh5X2luYWN0aXZlKGFoKTsKIAorCWFoLT5wYXByZF90YWJsZV93cml0ZV9kb25lID0gZmFsc2U7CisKIAkvKiBPbmx5IHJlcXVpcmVkIG9uIHRoZSBmaXJzdCByZXNldCAqLwogCWlmIChBUl9TUkVWXzkyNzEoYWgpICYmIGFoLT5odGNfcmVzZXRfaW5pdCkgewogCQlSRUdfV1JJVEUoYWgsCkBAIC0xMjkyLDcgKzEyODMsNyBAQAogCX0KIAogCWlmICghYXRoOWtfaHdfY2hpcF9yZXNldChhaCwgY2hhbikpIHsKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19GQVRBTCwgIkNoaXAgcmVzZXQgZmFpbGVkXG4iKTsKKwkJYXRoX2Vycihjb21tb24sICJDaGlwIHJlc2V0IGZhaWxlZFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMTM5NCw3ICsxMzg1LDcgQEAKIAlhdGg5a19od19pbml0X3FvcyhhaCk7CiAKIAlpZiAoYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9SRlNJTEVOVCkKLQkJYXRoOWtfZW5hYmxlX3Jma2lsbChhaCk7CisJCWF0aDlrX2h3X2NmZ19ncGlvX2lucHV0KGFoLCBhaC0+cmZraWxsX2dwaW8pOwogCiAJYXRoOWtfaHdfaW5pdF9nbG9iYWxfc2V0dGluZ3MoYWgpOwogCkBAIC0xNDM5LDEzICsxNDMwLDEzIEBACiAJCXUzMiBtYXNrOwogCQltYXNrID0gUkVHX1JFQUQoYWgsIEFSX0NGRyk7CiAJCWlmIChtYXNrICYgKEFSX0NGR19TV1JCIHwgQVJfQ0ZHX1NXVEIgfCBBUl9DRkdfU1dSRykpIHsKLQkJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfUkVTRVQsCisJCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19SRVNFVCwKIAkJCQkiQ0ZHIEJ5dGUgU3dhcCBTZXQgMHgleFxuIiwgbWFzayk7CiAJCX0gZWxzZSB7CiAJCQltYXNrID0KIAkJCQlJTklUX0NPTkZJR19TVEFUVVMgfCBBUl9DRkdfU1dSQiB8IEFSX0NGR19TV1RCOwogCQkJUkVHX1dSSVRFKGFoLCBBUl9DRkcsIG1hc2spOwotCQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19SRVNFVCwKKwkJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX1JFU0VULAogCQkJCSJTZXR0aW5nIENGRyAweCV4XG4iLCBSRUdfUkVBRChhaCwgQVJfQ0ZHKSk7CiAJCX0KIAl9IGVsc2UgewpAQCAtMTU3Myw5ICsxNTY0LDkgQEAKIAkJCQkgICAgQVJfUlRDX0ZPUkNFX1dBS0VfRU4pOwogCQl9CiAJCWlmIChpID09IDApIHsKLQkJCWF0aF9wcmludChhdGg5a19od19jb21tb24oYWgpLCBBVEhfREJHX0ZBVEFMLAotCQkJCSAgIkZhaWxlZCB0byB3YWtldXAgaW4gJXV1c1xuIiwKLQkJCQkgIFBPV0VSX1VQX1RJTUUgLyAyMCk7CisJCQlhdGhfZXJyKGF0aDlrX2h3X2NvbW1vbihhaCksCisJCQkJIkZhaWxlZCB0byB3YWtldXAgaW4gJXV1c1xuIiwKKwkJCQlQT1dFUl9VUF9USU1FIC8gMjApOwogCQkJcmV0dXJuIGZhbHNlOwogCQl9CiAJfQpAQCAtMTU5OSw4ICsxNTkwLDggQEAKIAlpZiAoYWgtPnBvd2VyX21vZGUgPT0gbW9kZSkKIAkJcmV0dXJuIHN0YXR1czsKIAotCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfUkVTRVQsICIlcyAtPiAlc1xuIiwKLQkJICBtb2Rlc1thaC0+cG93ZXJfbW9kZV0sIG1vZGVzW21vZGVdKTsKKwlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19SRVNFVCwgIiVzIC0+ICVzXG4iLAorCQltb2Rlc1thaC0+cG93ZXJfbW9kZV0sIG1vZGVzW21vZGVdKTsKIAogCXN3aXRjaCAobW9kZSkgewogCWNhc2UgQVRIOUtfUE1fQVdBS0U6CkBAIC0xNjE0LDEyICsxNjA1LDIwIEBACiAJCWF0aDlrX3NldF9wb3dlcl9uZXR3b3JrX3NsZWVwKGFoLCBzZXRDaGlwKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19GQVRBTCwKLQkJCSAgIlVua25vd24gcG93ZXIgbW9kZSAldVxuIiwgbW9kZSk7CisJCWF0aF9lcnIoY29tbW9uLCAiVW5rbm93biBwb3dlciBtb2RlICV1XG4iLCBtb2RlKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAlhaC0+cG93ZXJfbW9kZSA9IG1vZGU7CiAKKwkvKgorCSAqIFhYWDogSWYgdGhpcyB3YXJuaW5nIG5ldmVyIGNvbWVzIHVwIGFmdGVyIGEgd2hpbGUgdGhlbgorCSAqIHNpbXBseSBrZWVwIHRoZSBBVEhfREJHX1dBUk5fT05fT05DRSgpIGJ1dCBtYWtlCisJICogYXRoOWtfaHdfc2V0cG93ZXIoKSByZXR1cm4gdHlwZSB2b2lkLgorCSAqLworCisJaWYgKCEoYWgtPmFoX2ZsYWdzICYgQUhfVU5QTFVHR0VEKSkKKwkJQVRIX0RCR19XQVJOX09OX09OQ0UoIXN0YXR1cyk7CisKIAlyZXR1cm4gc3RhdHVzOwogfQogRVhQT1JUX1NZTUJPTChhdGg5a19od19zZXRwb3dlcik7CkBAIC0xNjMyLDE3ICsxNjMxLDkgQEAKIHsKIAlpbnQgZmxhZ3MgPSAwOwogCi0JYWgtPmJlYWNvbl9pbnRlcnZhbCA9IGJlYWNvbl9wZXJpb2Q7Ci0KIAlFTkFCTEVfUkVHV1JJVEVfQlVGRkVSKGFoKTsKIAogCXN3aXRjaCAoYWgtPm9wbW9kZSkgewotCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKLQkJUkVHX1dSSVRFKGFoLCBBUl9ORVhUX1RCVFRfVElNRVIsIFRVX1RPX1VTRUMobmV4dF9iZWFjb24pKTsKLQkJUkVHX1dSSVRFKGFoLCBBUl9ORVhUX0RNQV9CRUFDT05fQUxFUlQsIDB4ZmZmZik7Ci0JCVJFR19XUklURShhaCwgQVJfTkVYVF9TV0JBLCAweDdmZmZmKTsKLQkJZmxhZ3MgfD0gQVJfVEJUVF9USU1FUl9FTjsKLQkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKIAljYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6CiAJCVJFR19TRVRfQklUKGFoLCBBUl9UWENGRywKQEAgLTE2NjYsMTcgKzE2NTcsOSBAQAogCQkJQVJfVEJUVF9USU1FUl9FTiB8IEFSX0RCQV9USU1FUl9FTiB8IEFSX1NXQkFfVElNRVJfRU47CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWlmIChhaC0+aXNfbW9uaXRvcmluZykgewotCQkJUkVHX1dSSVRFKGFoLCBBUl9ORVhUX1RCVFRfVElNRVIsCi0JCQkJCVRVX1RPX1VTRUMobmV4dF9iZWFjb24pKTsKLQkJCVJFR19XUklURShhaCwgQVJfTkVYVF9ETUFfQkVBQ09OX0FMRVJULCAweGZmZmYpOwotCQkJUkVHX1dSSVRFKGFoLCBBUl9ORVhUX1NXQkEsIDB4N2ZmZmYpOwotCQkJZmxhZ3MgfD0gQVJfVEJUVF9USU1FUl9FTjsKLQkJCWJyZWFrOwotCQl9Ci0JCWF0aF9wcmludChhdGg5a19od19jb21tb24oYWgpLCBBVEhfREJHX0JFQUNPTiwKLQkJCSAgIiVzOiB1bnN1cHBvcnRlZCBvcG1vZGU6ICVkXG4iLAotCQkJICBfX2Z1bmNfXywgYWgtPm9wbW9kZSk7CisJCWF0aF9kYmcoYXRoOWtfaHdfY29tbW9uKGFoKSwgQVRIX0RCR19CRUFDT04sCisJCQkiJXM6IHVuc3VwcG9ydGVkIG9wbW9kZTogJWRcbiIsCisJCQlfX2Z1bmNfXywgYWgtPm9wbW9kZSk7CiAJCXJldHVybjsKIAkJYnJlYWs7CiAJfQpAQCAtMTczMiwxMCArMTcxNSwxMCBAQAogCWVsc2UKIAkJbmV4dFRidHQgPSBicy0+YnNfbmV4dHRidHQ7CiAKLQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0JFQUNPTiwgIm5leHQgRFRJTSAlZFxuIiwgYnMtPmJzX25leHRkdGltKTsKLQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0JFQUNPTiwgIm5leHQgYmVhY29uICVkXG4iLCBuZXh0VGJ0dCk7Ci0JYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19CRUFDT04sICJiZWFjb24gcGVyaW9kICVkXG4iLCBiZWFjb25pbnR2YWwpOwotCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQkVBQ09OLCAiRFRJTSBwZXJpb2QgJWRcbiIsIGR0aW1wZXJpb2QpOworCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0JFQUNPTiwgIm5leHQgRFRJTSAlZFxuIiwgYnMtPmJzX25leHRkdGltKTsKKwlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19CRUFDT04sICJuZXh0IGJlYWNvbiAlZFxuIiwgbmV4dFRidHQpOworCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0JFQUNPTiwgImJlYWNvbiBwZXJpb2QgJWRcbiIsIGJlYWNvbmludHZhbCk7CisJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQkVBQ09OLCAiRFRJTSBwZXJpb2QgJWRcbiIsIGR0aW1wZXJpb2QpOwogCiAJRU5BQkxFX1JFR1dSSVRFX0JVRkZFUihhaCk7CiAKQEAgLTE3ODEsNyArMTc2NCw3IEBACiAJc3RydWN0IGF0aF9idGNvZXhfaHcgKmJ0Y29leF9odyA9ICZhaC0+YnRjb2V4X2h3OwogCiAJdTE2IGNhcEZpZWxkID0gMCwgZWV2YWw7Ci0JdTggYW50X2Rpdl9jdGwxOworCXU4IGFudF9kaXZfY3RsMSwgdHhfY2hhaW5tYXNrLCByeF9jaGFpbm1hc2s7CiAKIAllZXZhbCA9IGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tKGFoLCBFRVBfUkVHXzApOwogCXJlZ3VsYXRvcnktPmN1cnJlbnRfcmQgPSBlZXZhbDsKQEAgLTE4MDAsMTQgKzE3ODMsMTQgQEAKIAkJCXJlZ3VsYXRvcnktPmN1cnJlbnRfcmQgKz0gNTsKIAkJZWxzZSBpZiAocmVndWxhdG9yeS0+Y3VycmVudF9yZCA9PSAweDQxKQogCQkJcmVndWxhdG9yeS0+Y3VycmVudF9yZCA9IDB4NDM7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfUkVHVUxBVE9SWSwKLQkJCSAgInJlZ2RvbWFpbiBtYXBwZWQgdG8gMHgleFxuIiwgcmVndWxhdG9yeS0+Y3VycmVudF9yZCk7CisJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX1JFR1VMQVRPUlksCisJCQkicmVnZG9tYWluIG1hcHBlZCB0byAweCV4XG4iLCByZWd1bGF0b3J5LT5jdXJyZW50X3JkKTsKIAl9CiAKIAllZXZhbCA9IGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tKGFoLCBFRVBfT1BfTU9ERSk7CiAJaWYgKChlZXZhbCAmIChBUjU0MTZfT1BGTEFHU18xMUcgfCBBUjU0MTZfT1BGTEFHU18xMUEpKSA9PSAwKSB7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRkFUQUwsCi0JCQkgICJubyBiYW5kIGhhcyBiZWVuIG1hcmtlZCBhcyBzdXBwb3J0ZWQgaW4gRUVQUk9NLlxuIik7CisJCWF0aF9lcnIoY29tbW9uLAorCQkJIm5vIGJhbmQgaGFzIGJlZW4gbWFya2VkIGFzIHN1cHBvcnRlZCBpbiBFRVBST01cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTE4MzMsNiArMTgxNiwxMCBAQAogCiAJYWgtPm1pc2NfbW9kZSB8PSBBUl9QQ1VfTUlDX05FV19MT0NfRU5BOwogCisJLyogZW5hYmxlIGtleSBzZWFyY2ggZm9yIGV2ZXJ5IGZyYW1lIGluIGFuIGFnZ3JlZ2F0ZSAqLworCWlmIChBUl9TUkVWXzkzMDBfMjBfT1JfTEFURVIoYWgpKQorCQlhaC0+bWlzY19tb2RlIHw9IEFSX1BDVV9BTFdBWVNfUEVSRk9STV9LRVlTRUFSQ0g7CisKIAlwQ2FwLT5sb3dfMmdoel9jaGFuID0gMjMxMjsKIAlwQ2FwLT5oaWdoXzJnaHpfY2hhbiA9IDI3MzI7CiAKQEAgLTE5MjEsMTMgKzE5MDgsNyBAQAogCSAgICBBUl9TUkVWXzU0MTYoYWgpKQogCQlwQ2FwLT5yZWdfY2FwIHw9IEFSX0VFUFJPTV9FRVJFR0NBUF9FTl9GQ0NfTUlEQkFORDsKIAotCXBDYXAtPm51bV9hbnRjZmdfNWdoeiA9Ci0JCWFoLT5lZXBfb3BzLT5nZXRfbnVtX2FudF9jb25maWcoYWgsIEFUSDlLX0hBTF9GUkVRX0JBTkRfNUdIWik7Ci0JcENhcC0+bnVtX2FudGNmZ18yZ2h6ID0KLQkJYWgtPmVlcF9vcHMtPmdldF9udW1fYW50X2NvbmZpZyhhaCwgQVRIOUtfSEFMX0ZSRVFfQkFORF8yR0haKTsKLQotCWlmIChBUl9TUkVWXzkyODBfMjBfT1JfTEFURVIoYWgpICYmCi0JICAgIGF0aDlrX2h3X2J0Y29leF9zdXBwb3J0ZWQoYWgpKSB7CisJaWYgKEFSX1NSRVZfOTI4MF8yMF9PUl9MQVRFUihhaCkgJiYgY29tbW9uLT5idGNvZXhfZW5hYmxlZCkgewogCQlidGNvZXhfaHctPmJ0YWN0aXZlX2dwaW8gPSBBVEhfQlRBQ1RJVkVfR1BJTzsKIAkJYnRjb2V4X2h3LT53bGFuYWN0aXZlX2dwaW8gPSBBVEhfV0xBTkFDVElWRV9HUElPOwogCkBAIC0xOTQyLDggKzE5MjMsMTAgQEAKIAl9CiAKIAlpZiAoQVJfU1JFVl85MzAwXzIwX09SX0xBVEVSKGFoKSkgewotCQlwQ2FwLT5od19jYXBzIHw9IEFUSDlLX0hXX0NBUF9FRE1BIHwgQVRIOUtfSFdfQ0FQX0xEUEMgfAotCQkJCSBBVEg5S19IV19DQVBfRkFTVENMT0NLOworCQlwQ2FwLT5od19jYXBzIHw9IEFUSDlLX0hXX0NBUF9FRE1BIHwgQVRIOUtfSFdfQ0FQX0ZBU1RDTE9DSzsKKwkJaWYgKCFBUl9TUkVWXzk0ODUoYWgpKQorCQkJcENhcC0+aHdfY2FwcyB8PSBBVEg5S19IV19DQVBfTERQQzsKKwogCQlwQ2FwLT5yeF9ocF9xZGVwdGggPSBBVEg5S19IV19SWF9IUF9RREVQVEg7CiAJCXBDYXAtPnJ4X2xwX3FkZXB0aCA9IEFUSDlLX0hXX1JYX0xQX1FERVBUSDsKIAkJcENhcC0+cnhfc3RhdHVzX2xlbiA9IHNpemVvZihzdHJ1Y3QgYXI5MDAzX3J4cyk7CkBAIC0xOTYzLDYgKzE5NDYsOSBAQAogCWlmIChBUl9TUkVWXzkzMDBfMjBfT1JfTEFURVIoYWgpKQogCQlwQ2FwLT5od19jYXBzIHw9IEFUSDlLX0hXX0NBUF9SQUNfU1VQUE9SVEVEOwogCisJaWYgKEFSX1NSRVZfOTMwMF8yMF9PUl9MQVRFUihhaCkpCisJCWFoLT5lbnRfbW9kZSA9IFJFR19SRUFEKGFoLCBBUl9FTlRfT1RQKTsKKwogCWlmIChBUl9TUkVWXzkyODdfMTFfT1JfTEFURVIoYWgpIHx8IEFSX1NSRVZfOTI3MShhaCkpCiAJCXBDYXAtPmh3X2NhcHMgfD0gQVRIOUtfSFdfQ0FQX1NHSV8yMDsKIApAQCAtMTk3Myw2ICsxOTU5LDI5IEBACiAJCQlpZiAoKGFudF9kaXZfY3RsMSAmIDB4MSkgJiYgKChhbnRfZGl2X2N0bDEgPj4gMykgJiAweDEpKQogCQkJCXBDYXAtPmh3X2NhcHMgfD0gQVRIOUtfSFdfQ0FQX0FOVF9ESVZfQ09NQjsKIAkJfQorCWlmIChBUl9TUkVWXzkzMDBfMjBfT1JfTEFURVIoYWgpKSB7CisJCWlmIChhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbShhaCwgRUVQX0NIQUlOX01BU0tfUkVEVUNFKSkKKwkJCXBDYXAtPmh3X2NhcHMgfD0gQVRIOUtfSFdfQ0FQX0FQTTsKKwl9CisKKworCisJaWYgKEFSX1NSRVZfOTQ4NV8xMChhaCkpIHsKKwkJcENhcC0+cGNpZV9sY3JfZXh0c3luY19lbiA9IHRydWU7CisJCXBDYXAtPnBjaWVfbGNyX29mZnNldCA9IDB4ODA7CisJfQorCisJdHhfY2hhaW5tYXNrID0gcENhcC0+dHhfY2hhaW5tYXNrOworCXJ4X2NoYWlubWFzayA9IHBDYXAtPnJ4X2NoYWlubWFzazsKKwl3aGlsZSAodHhfY2hhaW5tYXNrIHx8IHJ4X2NoYWlubWFzaykgeworCQlpZiAodHhfY2hhaW5tYXNrICYgQklUKDApKQorCQkJcENhcC0+bWF4X3R4Y2hhaW5zKys7CisJCWlmIChyeF9jaGFpbm1hc2sgJiBCSVQoMCkpCisJCQlwQ2FwLT5tYXhfcnhjaGFpbnMrKzsKKworCQl0eF9jaGFpbm1hc2sgPj49IDE7CisJCXJ4X2NoYWlubWFzayA+Pj0gMTsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTIxNzcsNyArMjE4Niw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKGF0aDlrX2h3X2Rpc2FibGUpOwogCi12b2lkIGF0aDlrX2h3X3NldF90eHBvd2VybGltaXQoc3RydWN0IGF0aF9odyAqYWgsIHUzMiBsaW1pdCkKK3ZvaWQgYXRoOWtfaHdfc2V0X3R4cG93ZXJsaW1pdChzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIGxpbWl0LCBib29sIHRlc3QpCiB7CiAJc3RydWN0IGF0aF9yZWd1bGF0b3J5ICpyZWd1bGF0b3J5ID0gYXRoOWtfaHdfcmVndWxhdG9yeShhaCk7CiAJc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4gPSBhaC0+Y3VyY2hhbjsKQEAgLTIxOTAsNyArMjE5OSw3IEBACiAJCQkJIGNoYW5uZWwtPm1heF9hbnRlbm5hX2dhaW4gKiAyLAogCQkJCSBjaGFubmVsLT5tYXhfcG93ZXIgKiAyLAogCQkJCSBtaW4oKHUzMikgTUFYX1JBVEVfUE9XRVIsCi0JCQkJICh1MzIpIHJlZ3VsYXRvcnktPnBvd2VyX2xpbWl0KSk7CisJCQkJICh1MzIpIHJlZ3VsYXRvcnktPnBvd2VyX2xpbWl0KSwgdGVzdCk7CiB9CiBFWFBPUlRfU1lNQk9MKGF0aDlrX2h3X3NldF90eHBvd2VybGltaXQpOwogCkBAIC0yMjUwLDggKzIyNTksOCBAQAogewogCWlmICghYXRoOWtfaHdfd2FpdChhaCwgQVJfU0xQMzJfTU9ERSwgQVJfU0xQMzJfVFNGX1dSSVRFX1NUQVRVUywgMCwKIAkJCSAgIEFIX1RTRl9XUklURV9USU1FT1VUKSkKLQkJYXRoX3ByaW50KGF0aDlrX2h3X2NvbW1vbihhaCksIEFUSF9EQkdfUkVTRVQsCi0JCQkgICJBUl9TTFAzMl9UU0ZfV1JJVEVfU1RBVFVTIGxpbWl0IGV4Y2VlZGVkXG4iKTsKKwkJYXRoX2RiZyhhdGg5a19od19jb21tb24oYWgpLCBBVEhfREJHX1JFU0VULAorCQkJIkFSX1NMUDMyX1RTRl9XUklURV9TVEFUVVMgbGltaXQgZXhjZWVkZWRcbiIpOwogCiAJUkVHX1dSSVRFKGFoLCBBUl9SRVNFVF9UU0YsIEFSX1JFU0VUX1RTRl9PTkNFKTsKIH0KQEAgLTIzMjQsMTEgKzIzMzMsMTAgQEAKIAlyZXR1cm4gdGltZXJfdGFibGUtPmdlbl90aW1lcl9pbmRleFtiXTsKIH0KIAotdTMyIGF0aDlrX2h3X2dldHRzZjMyKHN0cnVjdCBhdGhfaHcgKmFoKQorc3RhdGljIHUzMiBhdGg5a19od19nZXR0c2YzMihzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAlyZXR1cm4gUkVHX1JFQUQoYWgsIEFSX1RTRl9MMzIpOwogfQotRVhQT1JUX1NZTUJPTChhdGg5a19od19nZXR0c2YzMik7CiAKIHN0cnVjdCBhdGhfZ2VuX3RpbWVyICphdGhfZ2VuX3RpbWVyX2FsbG9jKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJCQkgIHZvaWQgKCp0cmlnZ2VyKSh2b2lkICopLApAQCAtMjM0Miw5ICsyMzUwLDkgQEAKIAl0aW1lciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhdGhfZ2VuX3RpbWVyKSwgR0ZQX0tFUk5FTCk7CiAKIAlpZiAodGltZXIgPT0gTlVMTCkgewotCQlhdGhfcHJpbnQoYXRoOWtfaHdfY29tbW9uKGFoKSwgQVRIX0RCR19GQVRBTCwKLQkJCSAgIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkiCi0JCQkgICJmb3IgaHcgdGltZXJbJWRdXG4iLCB0aW1lcl9pbmRleCk7CisJCWF0aF9lcnIoYXRoOWtfaHdfY29tbW9uKGFoKSwKKwkJCSJGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBodyB0aW1lclslZF1cbiIsCisJCQl0aW1lcl9pbmRleCk7CiAJCXJldHVybiBOVUxMOwogCX0KIApAQCAtMjM3Myw5ICsyMzgxLDkgQEAKIAogCXRzZiA9IGF0aDlrX2h3X2dldHRzZjMyKGFoKTsKIAotCWF0aF9wcmludChhdGg5a19od19jb21tb24oYWgpLCBBVEhfREJHX0hXVElNRVIsCi0JCSAgImN1cmVudCB0c2YgJXggcGVyaW9kICV4IgotCQkgICJ0aW1lcl9uZXh0ICV4XG4iLCB0c2YsIHRpbWVyX3BlcmlvZCwgdGltZXJfbmV4dCk7CisJYXRoX2RiZyhhdGg5a19od19jb21tb24oYWgpLCBBVEhfREJHX0hXVElNRVIsCisJCSJjdXJyZW50IHRzZiAleCBwZXJpb2QgJXggdGltZXJfbmV4dCAleFxuIiwKKwkJdHNmLCB0aW1lcl9wZXJpb2QsIHRpbWVyX25leHQpOwogCiAJLyoKIAkgKiBQdWxsIHRpbWVyX25leHQgZm9yd2FyZCBpZiB0aGUgY3VycmVudCBUU0YgYWxyZWFkeSBwYXNzZWQgaXQKQEAgLTI0NTUsOCArMjQ2Myw4IEBACiAJCWluZGV4ID0gcmlnaHRtb3N0X2luZGV4KHRpbWVyX3RhYmxlLCAmdGhyZXNoX21hc2spOwogCQl0aW1lciA9IHRpbWVyX3RhYmxlLT50aW1lcnNbaW5kZXhdOwogCQlCVUdfT04oIXRpbWVyKTsKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19IV1RJTUVSLAotCQkJICAiVFNGIG92ZXJmbG93IGZvciBHZW4gdGltZXIgJWRcbiIsIGluZGV4KTsKKwkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfSFdUSU1FUiwKKwkJCSJUU0Ygb3ZlcmZsb3cgZm9yIEdlbiB0aW1lciAlZFxuIiwgaW5kZXgpOwogCQl0aW1lci0+b3ZlcmZsb3codGltZXItPmFyZyk7CiAJfQogCkBAIC0yNDY0LDggKzI0NzIsOCBAQAogCQlpbmRleCA9IHJpZ2h0bW9zdF9pbmRleCh0aW1lcl90YWJsZSwgJnRyaWdnZXJfbWFzayk7CiAJCXRpbWVyID0gdGltZXJfdGFibGUtPnRpbWVyc1tpbmRleF07CiAJCUJVR19PTighdGltZXIpOwotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0hXVElNRVIsCi0JCQkgICJHZW4gdGltZXJbJWRdIHRyaWdnZXJcbiIsIGluZGV4KTsKKwkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfSFdUSU1FUiwKKwkJCSJHZW4gdGltZXJbJWRdIHRyaWdnZXJcbiIsIGluZGV4KTsKIAkJdGltZXItPnRyaWdnZXIodGltZXItPmFyZyk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHcuaAppbmRleCBkNDdkMWI0Li41YTNkZmVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHcuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHcuaApAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgImJ0Y29leC5oIgogCiAjaW5jbHVkZSAiLi4vcmVnZC5oIgotI2luY2x1ZGUgIi4uL2RlYnVnLmgiCiAKICNkZWZpbmUgQVRIRVJPU19WRU5ET1JfSUQJMHgxNjhjCiAKQEAgLTQ0LDYgKzQzLDcgQEAKICNkZWZpbmUgQVI5Mjg3X0RFVklEX1BDSQkweDAwMmQKICNkZWZpbmUgQVI5Mjg3X0RFVklEX1BDSUUJMHgwMDJlCiAjZGVmaW5lIEFSOTMwMF9ERVZJRF9QQ0lFCTB4MDAzMAorI2RlZmluZSBBUjkzMDBfREVWSURfQVI5NDg1X1BDSUUgMHgwMDMyCiAKICNkZWZpbmUgQVI1NDE2X0FSOTEwMF9ERVZJRAkweDAwMGIKIApAQCAtMTU3LDYgKzE1NywxMyBAQAogI2RlZmluZSBQQVBSRF9HQUlOX1RBQkxFX0VOVFJJRVMgICAgMzIKICNkZWZpbmUgUEFQUkRfVEFCTEVfU1ogICAgICAgICAgICAgIDI0CiAKK2VudW0gYXRoX2h3X3R4cV9zdWJ0eXBlIHsKKwlBVEhfVFhRX0FDX0JFID0gMCwKKwlBVEhfVFhRX0FDX0JLID0gMSwKKwlBVEhfVFhRX0FDX1ZJID0gMiwKKwlBVEhfVFhRX0FDX1ZPID0gMywKK307CisKIGVudW0gYXRoX2luaV9zdWJzeXMgewogCUFUSF9JTklfUFJFID0gMCwKIAlBVEhfSU5JX0NPUkUsCkBAIC0xODAsNiArMTg3LDcgQEAKIAlBVEg5S19IV19DQVBfQU5UX0RJVl9DT01CCQk9IEJJVCgxMiksCiAJQVRIOUtfSFdfQ0FQXzJHSFoJCQk9IEJJVCgxMyksCiAJQVRIOUtfSFdfQ0FQXzVHSFoJCQk9IEJJVCgxNCksCisJQVRIOUtfSFdfQ0FQX0FQTQkJCT0gQklUKDE1KSwKIH07CiAKIHN0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgewpAQCAtMTkxLDE2ICsxOTksMTggQEAKIAl1MTYgcnRzX2FnZ3JfbGltaXQ7CiAJdTggdHhfY2hhaW5tYXNrOwogCXU4IHJ4X2NoYWlubWFzazsKKwl1OCBtYXhfdHhjaGFpbnM7CisJdTggbWF4X3J4Y2hhaW5zOwogCXUxNiB0eF90cmlnbGV2ZWxfbWF4OwogCXUxNiByZWdfY2FwOwogCXU4IG51bV9ncGlvX3BpbnM7Ci0JdTggbnVtX2FudGNmZ18yZ2h6OwotCXU4IG51bV9hbnRjZmdfNWdoejsKIAl1OCByeF9ocF9xZGVwdGg7CiAJdTggcnhfbHBfcWRlcHRoOwogCXU4IHJ4X3N0YXR1c19sZW47CiAJdTggdHhfZGVzY19sZW47CiAJdTggdHhzX2xlbjsKKwl1MTYgcGNpZV9sY3Jfb2Zmc2V0OworCWJvb2wgcGNpZV9sY3JfZXh0c3luY19lbjsKIH07CiAKIHN0cnVjdCBhdGg5a19vcHNfY29uZmlnIHsKQEAgLTIyNiw3ICsyMzYsNiBAQAogI2RlZmluZSBTUFVSX0RJU0FCTEUgICAgICAgIAkwCiAjZGVmaW5lIFNQVVJfRU5BQkxFX0lPQ1RMICAgCTEKICNkZWZpbmUgU1BVUl9FTkFCTEVfRUVQUk9NICAJMgotI2RlZmluZSBBUl9FRVBST01fTU9EQUxfU1BVUlMgICA1CiAjZGVmaW5lIEFSX1NQVVJfNTQxM18xICAgICAgCTE2NDAKICNkZWZpbmUgQVJfU1BVUl81NDEzXzIgICAgICAJMTIwMAogI2RlZmluZSBBUl9OT19TUFVSICAgICAgCTB4ODAwMApAQCAtNDM0LDYgKzQ0Myw3IEBACiAJdTE2IGFuYWxvZzVHaHpSZXY7CiAJdTE2IGFuYWxvZzJHaHpSZXY7CiAJdTE2IHN1YnN5c2lkOworCWVudW0gYXRoX3VzYl9kZXYgdXNiZGV2OwogfTsKIAogLyogR2VuZXJpYyBUU0YgdGltZXIgZGVmaW5pdGlvbnMgKi8KQEAgLTQ3OCw2ICs0ODgsNDAgQEAKIH07CiAKIC8qKgorICogc3RydWN0IGF0aF9od19yYWRhcl9jb25mIC0gcmFkYXIgZGV0ZWN0aW9uIGluaXRpYWxpemF0aW9uIHBhcmFtZXRlcnMKKyAqCisgKiBAcHVsc2VfaW5iYW5kOiB0aHJlc2hvbGQgZm9yIGNoZWNraW5nIHRoZSByYXRpbyBvZiBpbi1iYW5kIHBvd2VyCisgKgl0byB0b3RhbCBwb3dlciBmb3Igc2hvcnQgcmFkYXIgcHVsc2VzIChoYWxmIGRCIHN0ZXBzKQorICogQHB1bHNlX2luYmFuZF9zdGVwOiB0aHJlc2hvbGQgZm9yIGNoZWNraW5nIGFuIGluLWJhbmQgcG93ZXIgdG8gdG90YWwKKyAqCXBvd2VyIHJhdGlvIGluY3JlYXNlIGZvciBzaG9ydCByYWRhciBwdWxzZXMgKGhhbGYgZEIgc3RlcHMpCisgKiBAcHVsc2VfaGVpZ2h0OiB0aHJlc2hvbGQgZm9yIGRldGVjdGluZyB0aGUgYmVnaW5uaW5nIG9mIGEgc2hvcnQKKyAqCXJhZGFyIHB1bHNlIChkQiBzdGVwKQorICogQHB1bHNlX3Jzc2k6IHRocmVzaG9sZCBmb3IgZGV0ZWN0aW5nIGlmIGEgc2hvcnQgcmFkYXIgcHVsc2UgaXMKKyAqCWdvbmUgKGRCIHN0ZXApCisgKiBAcHVsc2VfbWF4bGVuOiBtYXhpbXVtIHB1bHNlIGxlbmd0aCAoMC44IHVzIHN0ZXBzKQorICoKKyAqIEByYWRhcl9yc3NpOiBSU1NJIHRocmVzaG9sZCBmb3Igc3RhcnRpbmcgbG9uZyByYWRhciBkZXRlY3Rpb24gKGRCIHN0ZXBzKQorICogQHJhZGFyX2luYmFuZDogdGhyZXNob2xkIGZvciBjaGVja2luZyB0aGUgcmF0aW8gb2YgaW4tYmFuZCBwb3dlcgorICoJdG8gdG90YWwgcG93ZXIgZm9yIGxvbmcgcmFkYXIgcHVsc2VzIChoYWxmIGRCIHN0ZXBzKQorICogQGZpcl9wb3dlcjogdGhyZXNob2xkIGZvciBkZXRlY3RpbmcgdGhlIGVuZCBvZiBhIGxvbmcgcmFkYXIgcHVsc2UgKGRCKQorICoKKyAqIEBleHRfY2hhbm5lbDogZW5hYmxlIGV4dGVuc2lvbiBjaGFubmVsIHJhZGFyIGRldGVjdGlvbgorICovCitzdHJ1Y3QgYXRoX2h3X3JhZGFyX2NvbmYgeworCXVuc2lnbmVkIGludCBwdWxzZV9pbmJhbmQ7CisJdW5zaWduZWQgaW50IHB1bHNlX2luYmFuZF9zdGVwOworCXVuc2lnbmVkIGludCBwdWxzZV9oZWlnaHQ7CisJdW5zaWduZWQgaW50IHB1bHNlX3Jzc2k7CisJdW5zaWduZWQgaW50IHB1bHNlX21heGxlbjsKKworCXVuc2lnbmVkIGludCByYWRhcl9yc3NpOworCXVuc2lnbmVkIGludCByYWRhcl9pbmJhbmQ7CisJaW50IGZpcl9wb3dlcjsKKworCWJvb2wgZXh0X2NoYW5uZWw7Cit9OworCisvKioKICAqIHN0cnVjdCBhdGhfaHdfcHJpdmF0ZV9vcHMgLSBjYWxsYmFja3MgdXNlZCBpbnRlcm5hbGx5IGJ5IGhhcmR3YXJlIGNvZGUKICAqCiAgKiBUaGlzIHN0cnVjdHVyZSBjb250YWlucyBwcml2YXRlIGNhbGxiYWNrcyBkZXNpZ25lZCB0byBvbmx5IGJlIHVzZWQgaW50ZXJuYWxseQpAQCAtNDg4LDcgKzUzMiw2IEBACiAgKgogICogQGluaXRfbW9kZV9yZWdzOiBJbml0aWFsaXplcyBtb2RlIHJlZ2lzdGVycwogICogQGluaXRfbW9kZV9nYWluX3JlZ3M6IEluaXRpYWxpemUgVFgvUlggZ2FpbiByZWdpc3RlcnMKLSAqIEBtYWN2ZXJzaW9uX3N1cHBvcnRlZDogSWYgdGhpcyBzcGVjaWZpYyBtYWMgcmV2aXNpb24gaXMgc3VwcG9ydGVkCiAgKgogICogQHJmX3NldF9mcmVxOiBjaGFuZ2UgZnJlcXVlbmN5CiAgKiBAc3B1cl9taXRpZ2F0ZV9mcmVxOiBzcHVyIG1pdGlnYXRpb24KQEAgLTUxMCw3ICs1NTMsNiBAQAogCiAJdm9pZCAoKmluaXRfbW9kZV9yZWdzKShzdHJ1Y3QgYXRoX2h3ICphaCk7CiAJdm9pZCAoKmluaXRfbW9kZV9nYWluX3JlZ3MpKHN0cnVjdCBhdGhfaHcgKmFoKTsKLQlib29sICgqbWFjdmVyc2lvbl9zdXBwb3J0ZWQpKHUzMiBtYWN2ZXJzaW9uKTsKIAl2b2lkICgqc2V0dXBfY2FsaWJyYXRpb24pKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJCSAgc3RydWN0IGF0aDlrX2NhbF9saXN0ICpjdXJyQ2FsKTsKIApAQCAtNTM0LDcgKzU3Niw2IEBACiAJdm9pZCAoKnNldF9kZWx0YV9zbG9wZSkoc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKTsKIAlib29sICgqcmZidXNfcmVxKShzdHJ1Y3QgYXRoX2h3ICphaCk7CiAJdm9pZCAoKnJmYnVzX2RvbmUpKHN0cnVjdCBhdGhfaHcgKmFoKTsKLQl2b2lkICgqZW5hYmxlX3Jma2lsbCkoc3RydWN0IGF0aF9odyAqYWgpOwogCXZvaWQgKCpyZXN0b3JlX2NoYWlubWFzaykoc3RydWN0IGF0aF9odyAqYWgpOwogCXZvaWQgKCpzZXRfZGl2ZXJzaXR5KShzdHJ1Y3QgYXRoX2h3ICphaCwgYm9vbCB2YWx1ZSk7CiAJdTMyICgqY29tcHV0ZV9wbGxfY29udHJvbCkoc3RydWN0IGF0aF9odyAqYWgsCkBAIC01NDIsNiArNTgzLDggQEAKIAlib29sICgqYW5pX2NvbnRyb2wpKHN0cnVjdCBhdGhfaHcgKmFoLCBlbnVtIGF0aDlrX2FuaV9jbWQgY21kLAogCQkJICAgIGludCBwYXJhbSk7CiAJdm9pZCAoKmRvX2dldG5mKShzdHJ1Y3QgYXRoX2h3ICphaCwgaW50MTZfdCBuZmFycmF5W05VTV9ORl9SRUFESU5HU10pOworCXZvaWQgKCpzZXRfcmFkYXJfcGFyYW1zKShzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQkgc3RydWN0IGF0aF9od19yYWRhcl9jb25mICpjb25mKTsKIAogCS8qIEFOSSAqLwogCXZvaWQgKCphbmlfY2FjaGVfaW5pX3JlZ3MpKHN0cnVjdCBhdGhfaHcgKmFoKTsKQEAgLTYwMyw2ICs2NDYsMTAgQEAKIAlzMTYgbm9taW5hbDsKIH07CiAKKy8qIGFoX2ZsYWdzICovCisjZGVmaW5lIEFIX1VTRV9FRVBST00gICAweDEKKyNkZWZpbmUgQUhfVU5QTFVHR0VEICAgIDB4MiAvKiBUaGUgY2FyZCBoYXMgYmVlbiBwaHlzaWNhbGx5IHJlbW92ZWQuICovCisKIHN0cnVjdCBhdGhfaHcgewogCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OwogCXN0cnVjdCBhdGhfY29tbW9uIGNvbW1vbjsKQEAgLTcxOCw5ICs3NjUsNyBAQAogCXUzMiAqYmFuazZUZW1wOwogCiAJdTggdHhwb3dlcl9saW1pdDsKLQlpbnQxNl90IHR4cG93ZXJfaW5kZXhvZmZzZXQ7CiAJaW50IGNvdmVyYWdlX2NsYXNzOwotCXUzMiBiZWFjb25faW50ZXJ2YWw7CiAJdTMyIHNsb3R0aW1lOwogCXUzMiBnbG9iYWx0eHRpbWVvdXQ7CiAKQEAgLTc0MCw2ICs3ODUsOCBAQAogCXU4IHR4Y2hhaW5tYXNrOwogCXU4IHJ4Y2hhaW5tYXNrOwogCisJc3RydWN0IGF0aF9od19yYWRhcl9jb25mIHJhZGFyX2NvbmY7CisKIAl1MzIgb3JpZ2luYWxHYWluWzIyXTsKIAlpbnQgaW5pdFBEQURDOwogCWludCBQREFEQ2RlbHRhOwpAQCAtNzg5LDYgKzgzNiwxMSBAQAogCXUzMiBiYl93YXRjaGRvZ19sYXN0X3N0YXR1czsKIAl1MzIgYmJfd2F0Y2hkb2dfdGltZW91dF9tczsgLyogaW4gbXMsIDAgdG8gZGlzYWJsZSAqLwogCisJdW5zaWduZWQgaW50IHBhcHJkX3RhcmdldF9wb3dlcjsKKwl1bnNpZ25lZCBpbnQgcGFwcmRfdHJhaW5pbmdfcG93ZXI7CisJdW5zaWduZWQgaW50IHBhcHJkX3JhdGVtYXNrOworCXVuc2lnbmVkIGludCBwYXByZF9yYXRlbWFza19odDQwOworCWJvb2wgcGFwcmRfdGFibGVfd3JpdGVfZG9uZTsKIAl1MzIgcGFwcmRfZ2Fpbl90YWJsZV9lbnRyaWVzW1BBUFJEX0dBSU5fVEFCTEVfRU5UUklFU107CiAJdTggcGFwcmRfZ2Fpbl90YWJsZV9pbmRleFtQQVBSRF9HQUlOX1RBQkxFX0VOVFJJRVNdOwogCS8qCkBAIC03OTcsNiArODQ5LDkgQEAKIAkgKiB0aGlzIHJlZ2lzdGVyIHdoZW4gaW4gc2xlZXAgc3RhdGVzLgogCSAqLwogCXUzMiBXQVJlZ1ZhbDsKKworCS8qIEVudGVycHJpc2UgbW9kZSBjYXAgKi8KKwl1MzIgZW50X21vZGU7CiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBhdGhfY29tbW9uICphdGg5a19od19jb21tb24oc3RydWN0IGF0aF9odyAqYWgpCkBAIC04MTksMTAgKzg3NCw5IEBACiAJcmV0dXJuICZhaC0+b3BzOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBzaWduX2V4dGVuZChpbnQgdmFsLCBjb25zdCBpbnQgbmJpdHMpCitzdGF0aWMgaW5saW5lIHU4IGdldF9zdHJlYW1zKGludCBtYXNrKQogewotCWludCBvcmRlciA9IEJJVChuYml0cy0xKTsKLQlyZXR1cm4gKHZhbCBeIG9yZGVyKSAtIG9yZGVyOworCXJldHVybiAhIShtYXNrICYgQklUKDApKSArICEhKG1hc2sgJiBCSVQoMSkpICsgISEobWFzayAmIEJJVCgyKSk7CiB9CiAKIC8qIEluaXRpYWxpemF0aW9uLCBEZXRhY2gsIFJlc2V0ICovCkBAIC04NjEsNyArOTE1LDcgQEAKIHZvaWQgYXRoOWtfaHdfc2V0cnhmaWx0ZXIoc3RydWN0IGF0aF9odyAqYWgsIHUzMiBiaXRzKTsKIGJvb2wgYXRoOWtfaHdfcGh5X2Rpc2FibGUoc3RydWN0IGF0aF9odyAqYWgpOwogYm9vbCBhdGg5a19od19kaXNhYmxlKHN0cnVjdCBhdGhfaHcgKmFoKTsKLXZvaWQgYXRoOWtfaHdfc2V0X3R4cG93ZXJsaW1pdChzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIGxpbWl0KTsKK3ZvaWQgYXRoOWtfaHdfc2V0X3R4cG93ZXJsaW1pdChzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIGxpbWl0LCBib29sIHRlc3QpOwogdm9pZCBhdGg5a19od19zZXRvcG1vZGUoc3RydWN0IGF0aF9odyAqYWgpOwogdm9pZCBhdGg5a19od19zZXRtY2FzdGZpbHRlcihzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIGZpbHRlcjAsIHUzMiBmaWx0ZXIxKTsKIHZvaWQgYXRoOWtfaHdfc2V0YnNzaWRtYXNrKHN0cnVjdCBhdGhfaHcgKmFoKTsKQEAgLTg5Myw3ICs5NDcsNiBAQAogCiB2b2lkIGF0aF9nZW5fdGltZXJfZnJlZShzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aF9nZW5fdGltZXIgKnRpbWVyKTsKIHZvaWQgYXRoX2dlbl90aW1lcl9pc3Ioc3RydWN0IGF0aF9odyAqaHcpOwotdTMyIGF0aDlrX2h3X2dldHRzZjMyKHN0cnVjdCBhdGhfaHcgKmFoKTsKIAogdm9pZCBhdGg5a19od19uYW1lKHN0cnVjdCBhdGhfaHcgKmFoLCBjaGFyICpod19uYW1lLCBzaXplX3QgbGVuKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2luaXQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9pbml0LmMKaW5kZXggMTRiOGFiMy4uNzY3ZDhiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2luaXQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaW5pdC5jCkBAIC0yOSwxNyArMjksMjcgQEAKIG1vZHVsZV9wYXJhbV9uYW1lZChkZWJ1ZywgYXRoOWtfZGVidWcsIHVpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnZ2luZyBtYXNrIik7CiAKLWludCBtb2RwYXJhbV9ub2h3Y3J5cHQ7Ci1tb2R1bGVfcGFyYW1fbmFtZWQobm9od2NyeXB0LCBtb2RwYXJhbV9ub2h3Y3J5cHQsIGludCwgMDQ0NCk7CitpbnQgYXRoOWtfbW9kcGFyYW1fbm9od2NyeXB0OworbW9kdWxlX3BhcmFtX25hbWVkKG5vaHdjcnlwdCwgYXRoOWtfbW9kcGFyYW1fbm9od2NyeXB0LCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhub2h3Y3J5cHQsICJEaXNhYmxlIGhhcmR3YXJlIGVuY3J5cHRpb24iKTsKIAogaW50IGxlZF9ibGluazsKIG1vZHVsZV9wYXJhbV9uYW1lZChibGluaywgbGVkX2JsaW5rLCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhibGluaywgIkVuYWJsZSBMRUQgYmxpbmsgb24gYWN0aXZpdHkiKTsKIAorc3RhdGljIGludCBhdGg5a19idGNvZXhfZW5hYmxlOworbW9kdWxlX3BhcmFtX25hbWVkKGJ0Y29leF9lbmFibGUsIGF0aDlrX2J0Y29leF9lbmFibGUsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGJ0Y29leF9lbmFibGUsICJFbmFibGUgd2lmaS1CVCBjb2V4aXN0ZW5jZSIpOworCitpbnQgYXRoOWtfcG1fcW9zX3ZhbHVlID0gQVRIOUtfUE1fUU9TX0RFRkFVTFRfVkFMVUU7Cittb2R1bGVfcGFyYW1fbmFtZWQocG1xb3MsIGF0aDlrX3BtX3Fvc192YWx1ZSwgaW50LCBTX0lSVVNSIHwgU19JUkdSUCB8IFNfSVJPVEgpOworTU9EVUxFX1BBUk1fREVTQyhwbXFvcywgIlVzZXIgc3BlY2lmaWVkIFBNLVFPUyB2YWx1ZSIpOworCitib29sIGlzX2F0aDlrX3VubG9hZGVkOwogLyogV2UgdXNlIHRoZSBod192YWx1ZSBhcyBhbiBpbmRleCBpbnRvIG91ciBwcml2YXRlIGNoYW5uZWwgc3RydWN0dXJlICovCiAKICNkZWZpbmUgQ0hBTjJHKF9mcmVxLCBfaWR4KSAgeyBcCisJLmJhbmQgPSBJRUVFODAyMTFfQkFORF8yR0haLCBcCiAJLmNlbnRlcl9mcmVxID0gKF9mcmVxKSwgXAogCS5od192YWx1ZSA9IChfaWR4KSwgXAogCS5tYXhfcG93ZXIgPSAyMCwgXApAQCAtMjA2LDcgKzIxNiw5IEBACiAJaHRfaW5mby0+YW1wZHVfZmFjdG9yID0gSUVFRTgwMjExX0hUX01BWF9BTVBEVV82NEs7CiAJaHRfaW5mby0+YW1wZHVfZGVuc2l0eSA9IElFRUU4MDIxMV9IVF9NUERVX0RFTlNJVFlfODsKIAotCWlmIChBUl9TUkVWXzkzMDBfMjBfT1JfTEFURVIoYWgpKQorCWlmIChBUl9TUkVWXzk0ODUoYWgpKQorCQltYXhfc3RyZWFtcyA9IDE7CisJZWxzZSBpZiAoQVJfU1JFVl85MzAwXzIwX09SX0xBVEVSKGFoKSkKIAkJbWF4X3N0cmVhbXMgPSAzOwogCWVsc2UKIAkJbWF4X3N0cmVhbXMgPSAyOwpAQCAtMjIyLDkgKzIzNCw5IEBACiAJdHhfc3RyZWFtcyA9IGF0aDlrX2Ntbl9jb3VudF9zdHJlYW1zKGNvbW1vbi0+dHhfY2hhaW5tYXNrLCBtYXhfc3RyZWFtcyk7CiAJcnhfc3RyZWFtcyA9IGF0aDlrX2Ntbl9jb3VudF9zdHJlYW1zKGNvbW1vbi0+cnhfY2hhaW5tYXNrLCBtYXhfc3RyZWFtcyk7CiAKLQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0NPTkZJRywKLQkJICAiVFggc3RyZWFtcyAlZCwgUlggc3RyZWFtczogJWRcbiIsCi0JCSAgdHhfc3RyZWFtcywgcnhfc3RyZWFtcyk7CisJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ09ORklHLAorCQkiVFggc3RyZWFtcyAlZCwgUlggc3RyZWFtczogJWRcbiIsCisJCXR4X3N0cmVhbXMsIHJ4X3N0cmVhbXMpOwogCiAJaWYgKHR4X3N0cmVhbXMgIT0gcnhfc3RyZWFtcykgewogCQlodF9pbmZvLT5tY3MudHhfcGFyYW1zIHw9IElFRUU4MDIxMV9IVF9NQ1NfVFhfUlhfRElGRjsKQEAgLTI2Nyw4ICsyNzksOCBAQAogCXN0cnVjdCBhdGhfYnVmICpiZjsKIAlpbnQgaSwgYnNpemUsIGVycm9yLCBkZXNjX2xlbjsKIAotCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQ09ORklHLCAiJXMgRE1BOiAldSBidWZmZXJzICV1IGRlc2MvYnVmXG4iLAotCQkgIG5hbWUsIG5idWYsIG5kZXNjKTsKKwlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19DT05GSUcsICIlcyBETUE6ICV1IGJ1ZmZlcnMgJXUgZGVzYy9idWZcbiIsCisJCW5hbWUsIG5idWYsIG5kZXNjKTsKIAogCUlOSVRfTElTVF9IRUFEKGhlYWQpOwogCkBAIC0yNzksOCArMjkxLDcgQEAKIAogCS8qIGF0aF9kZXNjIG11c3QgYmUgYSBtdWx0aXBsZSBvZiBEV09SRHMgKi8KIAlpZiAoKGRlc2NfbGVuICUgNCkgIT0gMCkgewotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0ZBVEFMLAotCQkJICAiYXRoX2Rlc2Mgbm90IERXT1JEIGFsaWduZWRcbiIpOworCQlhdGhfZXJyKGNvbW1vbiwgImF0aF9kZXNjIG5vdCBEV09SRCBhbGlnbmVkXG4iKTsKIAkJQlVHX09OKChkZXNjX2xlbiAlIDQpICE9IDApOwogCQllcnJvciA9IC1FTk9NRU07CiAJCWdvdG8gZmFpbDsKQEAgLTMxNCw5ICszMjUsOSBAQAogCQlnb3RvIGZhaWw7CiAJfQogCWRzID0gKHU4ICopIGRkLT5kZF9kZXNjOwotCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQ09ORklHLCAiJXMgRE1BIG1hcDogJXAgKCV1KSAtPiAlbGx4ICgldSlcbiIsCi0JCSAgbmFtZSwgZHMsICh1MzIpIGRkLT5kZF9kZXNjX2xlbiwKLQkJICBpdG82NChkZC0+ZGRfZGVzY19wYWRkciksIC8qWFhYKi8odTMyKSBkZC0+ZGRfZGVzY19sZW4pOworCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NPTkZJRywgIiVzIERNQSBtYXA6ICVwICgldSkgLT4gJWxseCAoJXUpXG4iLAorCQluYW1lLCBkcywgKHUzMikgZGQtPmRkX2Rlc2NfbGVuLAorCQlpdG82NChkZC0+ZGRfZGVzY19wYWRkciksIC8qWFhYKi8odTMyKSBkZC0+ZGRfZGVzY19sZW4pOwogCiAJLyogYWxsb2NhdGUgYnVmZmVycyAqLwogCWJzaXplID0gc2l6ZW9mKHN0cnVjdCBhdGhfYnVmKSAqIG5idWY7CkBAIC0zNjIsNyArMzczLDcgQEAKICN1bmRlZiBEUzJQSFlTCiB9CiAKLXN0YXRpYyB2b2lkIGF0aDlrX2luaXRfY3J5cHRvKHN0cnVjdCBhdGhfc29mdGMgKnNjKQordm9pZCBhdGg5a19pbml0X2NyeXB0byhzdHJ1Y3QgYXRoX3NvZnRjICpzYykKIHsKIAlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKHNjLT5zY19haCk7CiAJaW50IGkgPSAwOwpAQCAtMzcwLDkgKzM4MSw5IEBACiAJLyogR2V0IHRoZSBoYXJkd2FyZSBrZXkgY2FjaGUgc2l6ZS4gKi8KIAljb21tb24tPmtleW1heCA9IHNjLT5zY19haC0+Y2Fwcy5rZXljYWNoZV9zaXplOwogCWlmIChjb21tb24tPmtleW1heCA+IEFUSF9LRVlNQVgpIHsKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19BTlksCi0JCQkgICJXYXJuaW5nLCB1c2luZyBvbmx5ICV1IGVudHJpZXMgaW4gJXUga2V5IGNhY2hlXG4iLAotCQkJICBBVEhfS0VZTUFYLCBjb21tb24tPmtleW1heCk7CisJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0FOWSwKKwkJCSJXYXJuaW5nLCB1c2luZyBvbmx5ICV1IGVudHJpZXMgaW4gJXUga2V5IGNhY2hlXG4iLAorCQkJQVRIX0tFWU1BWCwgY29tbW9uLT5rZXltYXgpOwogCQljb21tb24tPmtleW1heCA9IEFUSF9LRVlNQVg7CiAJfQogCkBAIC0zOTUsNyArNDA2LDggQEAKIAogc3RhdGljIGludCBhdGg5a19pbml0X2J0Y29leChzdHJ1Y3QgYXRoX3NvZnRjICpzYykKIHsKLQlpbnQgciwgcW51bTsKKwlzdHJ1Y3QgYXRoX3R4cSAqdHhxOworCWludCByOwogCiAJc3dpdGNoIChzYy0+c2NfYWgtPmJ0Y29leF9ody5zY2hlbWUpIHsKIAljYXNlIEFUSF9CVENPRVhfQ0ZHX05PTkU6CkBAIC00MDgsOCArNDIwLDggQEAKIAkJciA9IGF0aF9pbml0X2J0Y29leF90aW1lcihzYyk7CiAJCWlmIChyKQogCQkJcmV0dXJuIC0xOwotCQlxbnVtID0gc2MtPnR4Lmh3cV9tYXBbV01FX0FDX0JFXTsKLQkJYXRoOWtfaHdfaW5pdF9idGNvZXhfaHcoc2MtPnNjX2FoLCBxbnVtKTsKKwkJdHhxID0gc2MtPnR4LnR4cV9tYXBbV01FX0FDX0JFXTsKKwkJYXRoOWtfaHdfaW5pdF9idGNvZXhfaHcoc2MtPnNjX2FoLCB0eHEtPmF4cV9xbnVtKTsKIAkJc2MtPmJ0Y29leC5idF9zdG9tcF90eXBlID0gQVRIX0JUQ09FWF9TVE9NUF9MT1c7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC00MjIsNTkgKzQzNCwxOCBAQAogCiBzdGF0aWMgaW50IGF0aDlrX2luaXRfcXVldWVzKHN0cnVjdCBhdGhfc29mdGMgKnNjKQogewotCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oc2MtPnNjX2FoKTsKIAlpbnQgaSA9IDA7CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzYy0+dHguaHdxX21hcCk7IGkrKykKLQkJc2MtPnR4Lmh3cV9tYXBbaV0gPSAtMTsKLQogCXNjLT5iZWFjb24uYmVhY29ucSA9IGF0aDlrX2h3X2JlYWNvbnFfc2V0dXAoc2MtPnNjX2FoKTsKLQlpZiAoc2MtPmJlYWNvbi5iZWFjb25xID09IC0xKSB7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRkFUQUwsCi0JCQkgICJVbmFibGUgdG8gc2V0dXAgYSBiZWFjb24geG1pdCBxdWV1ZVxuIik7Ci0JCWdvdG8gZXJyOwotCX0KLQogCXNjLT5iZWFjb24uY2FicSA9IGF0aF90eHFfc2V0dXAoc2MsIEFUSDlLX1RYX1FVRVVFX0NBQiwgMCk7Ci0JaWYgKHNjLT5iZWFjb24uY2FicSA9PSBOVUxMKSB7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRkFUQUwsCi0JCQkgICJVbmFibGUgdG8gc2V0dXAgQ0FCIHhtaXQgcXVldWVcbiIpOwotCQlnb3RvIGVycjsKLQl9CiAKIAlzYy0+Y29uZmlnLmNhYnFSZWFkeXRpbWUgPSBBVEhfQ0FCUV9SRUFEWV9USU1FOwogCWF0aF9jYWJxX3VwZGF0ZShzYyk7CiAKLQlpZiAoIWF0aF90eF9zZXR1cChzYywgV01FX0FDX0JLKSkgewotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0ZBVEFMLAotCQkJICAiVW5hYmxlIHRvIHNldHVwIHhtaXQgcXVldWUgZm9yIEJLIHRyYWZmaWNcbiIpOwotCQlnb3RvIGVycjsKLQl9Ci0KLQlpZiAoIWF0aF90eF9zZXR1cChzYywgV01FX0FDX0JFKSkgewotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0ZBVEFMLAotCQkJICAiVW5hYmxlIHRvIHNldHVwIHhtaXQgcXVldWUgZm9yIEJFIHRyYWZmaWNcbiIpOwotCQlnb3RvIGVycjsKLQl9Ci0JaWYgKCFhdGhfdHhfc2V0dXAoc2MsIFdNRV9BQ19WSSkpIHsKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19GQVRBTCwKLQkJCSAgIlVuYWJsZSB0byBzZXR1cCB4bWl0IHF1ZXVlIGZvciBWSSB0cmFmZmljXG4iKTsKLQkJZ290byBlcnI7Ci0JfQotCWlmICghYXRoX3R4X3NldHVwKHNjLCBXTUVfQUNfVk8pKSB7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRkFUQUwsCi0JCQkgICJVbmFibGUgdG8gc2V0dXAgeG1pdCBxdWV1ZSBmb3IgVk8gdHJhZmZpY1xuIik7Ci0JCWdvdG8gZXJyOwotCX0KKwlmb3IgKGkgPSAwOyBpIDwgV01FX05VTV9BQzsgaSsrKQorCQlzYy0+dHgudHhxX21hcFtpXSA9IGF0aF90eHFfc2V0dXAoc2MsIEFUSDlLX1RYX1FVRVVFX0RBVEEsIGkpOwogCiAJcmV0dXJuIDA7Ci0KLWVycjoKLQlmb3IgKGkgPSAwOyBpIDwgQVRIOUtfTlVNX1RYX1FVRVVFUzsgaSsrKQotCQlpZiAoQVRIX1RYUV9TRVRVUChzYywgaSkpCi0JCQlhdGhfdHhfY2xlYW51cHEoc2MsICZzYy0+dHgudHhxW2ldKTsKLQotCXJldHVybiAtRUlPOwogfQogCiBzdGF0aWMgaW50IGF0aDlrX2luaXRfY2hhbm5lbHNfcmF0ZXMoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCkBAIC01NzAsNiArNTQxLDkgQEAKIAlhaC0+aHdfdmVyc2lvbi5zdWJzeXNpZCA9IHN1YnN5c2lkOwogCXNjLT5zY19haCA9IGFoOwogCisJaWYgKCFzYy0+ZGV2LT5wbGF0Zm9ybV9kYXRhKQorCQlhaC0+YWhfZmxhZ3MgfD0gQUhfVVNFX0VFUFJPTTsKKwogCWNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihhaCk7CiAJY29tbW9uLT5vcHMgPSAmYXRoOWtfY29tbW9uX29wczsKIAljb21tb24tPmJ1c19vcHMgPSBidXNfb3BzOwpAQCAtNTc3LDEwICs1NTEsMTAgQEAKIAljb21tb24tPmh3ID0gc2MtPmh3OwogCWNvbW1vbi0+cHJpdiA9IHNjOwogCWNvbW1vbi0+ZGVidWdfbWFzayA9IGF0aDlrX2RlYnVnOworCWNvbW1vbi0+YnRjb2V4X2VuYWJsZWQgPSBhdGg5a19idGNvZXhfZW5hYmxlID09IDE7CiAJc3Bpbl9sb2NrX2luaXQoJmNvbW1vbi0+Y2NfbG9jayk7CiAKIAlzcGluX2xvY2tfaW5pdCgmc2MtPndpcGh5X2xvY2spOwotCXNwaW5fbG9ja19pbml0KCZzYy0+c2NfcmVzZXRsb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmc2MtPnNjX3NlcmlhbF9ydyk7CiAJc3Bpbl9sb2NrX2luaXQoJnNjLT5zY19wbV9sb2NrKTsKIAltdXRleF9pbml0KCZzYy0+bXV0ZXgpOwpAQCAtNjAwLDEzICs1NzQsNiBAQAogCWlmIChyZXQpCiAJCWdvdG8gZXJyX2h3OwogCi0JcmV0ID0gYXRoOWtfaW5pdF9kZWJ1ZyhhaCk7Ci0JaWYgKHJldCkgewotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0ZBVEFMLAotCQkJICAiVW5hYmxlIHRvIGNyZWF0ZSBkZWJ1Z2ZzIGZpbGVzXG4iKTsKLQkJZ290byBlcnJfZGVidWc7Ci0JfQotCiAJcmV0ID0gYXRoOWtfaW5pdF9xdWV1ZXMoc2MpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyX3F1ZXVlczsKQEAgLTYyOSw4ICs1OTYsNiBAQAogCQlpZiAoQVRIX1RYUV9TRVRVUChzYywgaSkpCiAJCQlhdGhfdHhfY2xlYW51cHEoc2MsICZzYy0+dHgudHhxW2ldKTsKIGVycl9xdWV1ZXM6Ci0JYXRoOWtfZXhpdF9kZWJ1ZyhhaCk7Ci1lcnJfZGVidWc6CiAJYXRoOWtfaHdfZGVpbml0KGFoKTsKIGVycl9odzoKIAl0YXNrbGV0X2tpbGwoJnNjLT5pbnRyX3RxKTsKQEAgLTY0Miw2ICs2MDcsMzcgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgdm9pZCBhdGg5a19pbml0X2JhbmRfdHhwb3dlcihzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IGJhbmQpCit7CisJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuOworCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOworCXN0cnVjdCBhdGhfcmVndWxhdG9yeSAqcmVnID0gYXRoOWtfaHdfcmVndWxhdG9yeShhaCk7CisJaW50IGk7CisKKwlzYmFuZCA9ICZzYy0+c2JhbmRzW2JhbmRdOworCWZvciAoaSA9IDA7IGkgPCBzYmFuZC0+bl9jaGFubmVsczsgaSsrKSB7CisJCWNoYW4gPSAmc2JhbmQtPmNoYW5uZWxzW2ldOworCQlhaC0+Y3VyY2hhbiA9ICZhaC0+Y2hhbm5lbHNbY2hhbi0+aHdfdmFsdWVdOworCQlhdGg5a19jbW5fdXBkYXRlX2ljaGFubmVsKGFoLT5jdXJjaGFuLCBjaGFuLCBOTDgwMjExX0NIQU5fSFQyMCk7CisJCWF0aDlrX2h3X3NldF90eHBvd2VybGltaXQoYWgsIE1BWF9SQVRFX1BPV0VSLCB0cnVlKTsKKwkJY2hhbi0+bWF4X3Bvd2VyID0gcmVnLT5tYXhfcG93ZXJfbGV2ZWwgLyAyOworCX0KK30KKworc3RhdGljIHZvaWQgYXRoOWtfaW5pdF90eHBvd2VyX2xpbWl0cyhzdHJ1Y3QgYXRoX3NvZnRjICpzYykKK3sKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKKwlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY3VyY2hhbiA9IGFoLT5jdXJjaGFuOworCisJaWYgKGFoLT5jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfMkdIWikKKwkJYXRoOWtfaW5pdF9iYW5kX3R4cG93ZXIoc2MsIElFRUU4MDIxMV9CQU5EXzJHSFopOworCWlmIChhaC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQXzVHSFopCisJCWF0aDlrX2luaXRfYmFuZF90eHBvd2VyKHNjLCBJRUVFODAyMTFfQkFORF81R0haKTsKKworCWFoLT5jdXJjaGFuID0gY3VyY2hhbjsKK30KKwogdm9pZCBhdGg5a19zZXRfaHdfY2FwYWIoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewogCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oc2MtPnNjX2FoKTsKQEAgLTY1Nyw3ICs2NTMsNyBAQAogCWlmIChzYy0+c2NfYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9IVCkKIAkJIGh3LT5mbGFncyB8PSBJRUVFODAyMTFfSFdfQU1QRFVfQUdHUkVHQVRJT047CiAKLQlpZiAoQVJfU1JFVl85MTYwXzEwX09SX0xBVEVSKHNjLT5zY19haCkgfHwgbW9kcGFyYW1fbm9od2NyeXB0KQorCWlmIChBUl9TUkVWXzkxNjBfMTBfT1JfTEFURVIoc2MtPnNjX2FoKSB8fCBhdGg5a19tb2RwYXJhbV9ub2h3Y3J5cHQpCiAJCWh3LT5mbGFncyB8PSBJRUVFODAyMTFfSFdfTUZQX0NBUEFCTEU7CiAKIAlody0+d2lwaHktPmludGVyZmFjZV9tb2RlcyA9CkBAIC03MDUsNiArNzAxLDcgQEAKIAkJICAgIGNvbnN0IHN0cnVjdCBhdGhfYnVzX29wcyAqYnVzX29wcykKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHNjLT5odzsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CiAJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbjsKIAlzdHJ1Y3QgYXRoX2h3ICphaDsKIAlpbnQgZXJyb3IgPSAwOwpAQCAtNzM3LDExICs3MzQsMTkgQEAKIAlpZiAoZXJyb3IgIT0gMCkKIAkJZ290byBlcnJvcl9yeDsKIAorCWF0aDlrX2luaXRfdHhwb3dlcl9saW1pdHMoc2MpOworCiAJLyogUmVnaXN0ZXIgd2l0aCBtYWM4MDIxMSAqLwogCWVycm9yID0gaWVlZTgwMjExX3JlZ2lzdGVyX2h3KGh3KTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gZXJyb3JfcmVnaXN0ZXI7CiAKKwllcnJvciA9IGF0aDlrX2luaXRfZGVidWcoYWgpOworCWlmIChlcnJvcikgeworCQlhdGhfZXJyKGNvbW1vbiwgIlVuYWJsZSB0byBjcmVhdGUgZGVidWdmcyBmaWxlc1xuIik7CisJCWdvdG8gZXJyb3Jfd29ybGQ7CisJfQorCiAJLyogSGFuZGxlIHdvcmxkIHJlZ3VsYXRvcnkgKi8KIAlpZiAoIWF0aF9pc193b3JsZF9yZWdkKHJlZykpIHsKIAkJZXJyb3IgPSByZWd1bGF0b3J5X2hpbnQoaHctPndpcGh5LCByZWctPmFscGhhMik7CkBAIC03NTQsNiArNzU5LDcgQEAKIAlJTklUX1dPUksoJnNjLT5jaGFuX3dvcmssIGF0aDlrX3dpcGh5X2NoYW5fd29yayk7CiAJSU5JVF9ERUxBWUVEX1dPUksoJnNjLT53aXBoeV93b3JrLCBhdGg5a193aXBoeV93b3JrKTsKIAlzYy0+d2lwaHlfc2NoZWR1bGVyX2ludCA9IG1zZWNzX3RvX2ppZmZpZXMoNTAwKTsKKwlhcGh5LT5sYXN0X3Jzc2kgPSBBVEhfUlNTSV9EVU1NWV9NQVJLRVI7CiAKIAlhdGhfaW5pdF9sZWRzKHNjKTsKIAlhdGhfc3RhcnRfcmZraWxsX3BvbGwoc2MpOwpAQCAtNzk5LDcgKzgwNSw2IEBACiAJCWlmIChBVEhfVFhRX1NFVFVQKHNjLCBpKSkKIAkJCWF0aF90eF9jbGVhbnVwcShzYywgJnNjLT50eC50eHFbaV0pOwogCi0JYXRoOWtfZXhpdF9kZWJ1ZyhzYy0+c2NfYWgpOwogCWF0aDlrX2h3X2RlaW5pdChzYy0+c2NfYWgpOwogCiAJdGFza2xldF9raWxsKCZzYy0+aW50cl90cSk7CkBAIC04NjYsMjAgKzg3MSwxMiBAQAogCQlnb3RvIGVycl9vdXQ7CiAJfQogCi0JZXJyb3IgPSBhdGg5a19kZWJ1Z19jcmVhdGVfcm9vdCgpOwotCWlmIChlcnJvcikgewotCQlwcmludGsoS0VSTl9FUlIKLQkJCSJhdGg5azogVW5hYmxlIHRvIGNyZWF0ZSBkZWJ1Z2ZzIHJvb3Q6ICVkXG4iLAotCQkJZXJyb3IpOwotCQlnb3RvIGVycl9yYXRlX3VucmVnaXN0ZXI7Ci0JfQotCiAJZXJyb3IgPSBhdGhfcGNpX2luaXQoKTsKIAlpZiAoZXJyb3IgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUgogCQkJImF0aDlrOiBObyBQQ0kgZGV2aWNlcyBmb3VuZCwgZHJpdmVyIG5vdCBpbnN0YWxsZWQuXG4iKTsKIAkJZXJyb3IgPSAtRU5PREVWOwotCQlnb3RvIGVycl9yZW1vdmVfcm9vdDsKKwkJZ290byBlcnJfcmF0ZV91bnJlZ2lzdGVyOwogCX0KIAogCWVycm9yID0gYXRoX2FoYl9pbml0KCk7CkBAIC04OTMsOCArODkwLDYgQEAKICBlcnJfcGNpX2V4aXQ6CiAJYXRoX3BjaV9leGl0KCk7CiAKLSBlcnJfcmVtb3ZlX3Jvb3Q6Ci0JYXRoOWtfZGVidWdfcmVtb3ZlX3Jvb3QoKTsKICBlcnJfcmF0ZV91bnJlZ2lzdGVyOgogCWF0aF9yYXRlX2NvbnRyb2xfdW5yZWdpc3RlcigpOwogIGVycl9vdXQ6CkBAIC05MDQsOSArODk5LDkgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IGF0aDlrX2V4aXQodm9pZCkKIHsKKwlpc19hdGg5a191bmxvYWRlZCA9IHRydWU7CiAJYXRoX2FoYl9leGl0KCk7CiAJYXRoX3BjaV9leGl0KCk7Ci0JYXRoOWtfZGVidWdfcmVtb3ZlX3Jvb3QoKTsKIAlhdGhfcmF0ZV9jb250cm9sX3VucmVnaXN0ZXIoKTsKIAlwcmludGsoS0VSTl9JTkZPICIlczogRHJpdmVyIHVubG9hZGVkXG4iLCBkZXZfaW5mbyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFjLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFjLmMKaW5kZXggYzk5Njk2My4uMTgwMTcwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21hYy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWMuYwpAQCAtMjAsMTEgKzIwLDExIEBACiBzdGF0aWMgdm9pZCBhdGg5a19od19zZXRfdHhxX2ludGVycnVwdHMoc3RydWN0IGF0aF9odyAqYWgsCiAJCQkJCXN0cnVjdCBhdGg5a190eF9xdWV1ZV9pbmZvICpxaSkKIHsKLQlhdGhfcHJpbnQoYXRoOWtfaHdfY29tbW9uKGFoKSwgQVRIX0RCR19JTlRFUlJVUFQsCi0JCSAgInR4IG9rIDB4JXggZXJyIDB4JXggZGVzYyAweCV4IGVvbCAweCV4IHVybiAweCV4XG4iLAotCQkgIGFoLT50eG9rX2ludGVycnVwdF9tYXNrLCBhaC0+dHhlcnJfaW50ZXJydXB0X21hc2ssCi0JCSAgYWgtPnR4ZGVzY19pbnRlcnJ1cHRfbWFzaywgYWgtPnR4ZW9sX2ludGVycnVwdF9tYXNrLAotCQkgIGFoLT50eHVybl9pbnRlcnJ1cHRfbWFzayk7CisJYXRoX2RiZyhhdGg5a19od19jb21tb24oYWgpLCBBVEhfREJHX0lOVEVSUlVQVCwKKwkJInR4IG9rIDB4JXggZXJyIDB4JXggZGVzYyAweCV4IGVvbCAweCV4IHVybiAweCV4XG4iLAorCQlhaC0+dHhva19pbnRlcnJ1cHRfbWFzaywgYWgtPnR4ZXJyX2ludGVycnVwdF9tYXNrLAorCQlhaC0+dHhkZXNjX2ludGVycnVwdF9tYXNrLCBhaC0+dHhlb2xfaW50ZXJydXB0X21hc2ssCisJCWFoLT50eHVybl9pbnRlcnJ1cHRfbWFzayk7CiAKIAlFTkFCTEVfUkVHV1JJVEVfQlVGRkVSKGFoKTsKIApAQCAtNTYsOCArNTYsOCBAQAogCiB2b2lkIGF0aDlrX2h3X3R4c3RhcnQoc3RydWN0IGF0aF9odyAqYWgsIHUzMiBxKQogewotCWF0aF9wcmludChhdGg5a19od19jb21tb24oYWgpLCBBVEhfREJHX1FVRVVFLAotCQkgICJFbmFibGUgVFhFIG9uIHF1ZXVlOiAldVxuIiwgcSk7CisJYXRoX2RiZyhhdGg5a19od19jb21tb24oYWgpLCBBVEhfREJHX1FVRVVFLAorCQkiRW5hYmxlIFRYRSBvbiBxdWV1ZTogJXVcbiIsIHEpOwogCVJFR19XUklURShhaCwgQVJfUV9UWEUsIDEgPDwgcSk7CiB9CiBFWFBPUlRfU1lNQk9MKGF0aDlrX2h3X3R4c3RhcnQpOwpAQCAtMTE3LDEyICsxMTcsMTEgQEAKIGJvb2wgYXRoOWtfaHdfdXBkYXRldHh0cmlnbGV2ZWwoc3RydWN0IGF0aF9odyAqYWgsIGJvb2wgYkluY1RyaWdMZXZlbCkKIHsKIAl1MzIgdHhjZmcsIGN1ckxldmVsLCBuZXdMZXZlbDsKLQllbnVtIGF0aDlrX2ludCBvbWFzazsKIAogCWlmIChhaC0+dHhfdHJpZ19sZXZlbCA+PSBhaC0+Y29uZmlnLm1heF90eHRyaWdfbGV2ZWwpCiAJCXJldHVybiBmYWxzZTsKIAotCW9tYXNrID0gYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoYWgsIGFoLT5pbWFzayAmIH5BVEg5S19JTlRfR0xPQkFMKTsKKwlhdGg5a19od19kaXNhYmxlX2ludGVycnVwdHMoYWgpOwogCiAJdHhjZmcgPSBSRUdfUkVBRChhaCwgQVJfVFhDRkcpOwogCWN1ckxldmVsID0gTVModHhjZmcsIEFSX0ZUUklHKTsKQEAgLTEzNiw3ICsxMzUsNyBAQAogCQlSRUdfV1JJVEUoYWgsIEFSX1RYQ0ZHLAogCQkJICAodHhjZmcgJiB+QVJfRlRSSUcpIHwgU00obmV3TGV2ZWwsIEFSX0ZUUklHKSk7CiAKLQlhdGg5a19od19zZXRfaW50ZXJydXB0cyhhaCwgb21hc2spOworCWF0aDlrX2h3X2VuYWJsZV9pbnRlcnJ1cHRzKGFoKTsKIAogCWFoLT50eF90cmlnX2xldmVsID0gbmV3TGV2ZWw7CiAKQEAgLTE1NSwxNSArMTU0LDE1IEBACiAJdTMyIHdhaXRfdGltZSA9IEFUSDlLX1RYX1NUT1BfRE1BX1RJTUVPVVQgLyBBVEg5S19USU1FX1FVQU5UVU07CiAKIAlpZiAocSA+PSBwQ2FwLT50b3RhbF9xdWV1ZXMpIHsKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19RVUVVRSwgIlN0b3BwaW5nIFRYIERNQSwgIgotCQkJICAiaW52YWxpZCBxdWV1ZTogJXVcbiIsIHEpOworCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19RVUVVRSwKKwkJCSJTdG9wcGluZyBUWCBETUEsIGludmFsaWQgcXVldWU6ICV1XG4iLCBxKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAogCXFpID0gJmFoLT50eHFbcV07CiAJaWYgKHFpLT50cWlfdHlwZSA9PSBBVEg5S19UWF9RVUVVRV9JTkFDVElWRSkgewotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX1FVRVVFLCAiU3RvcHBpbmcgVFggRE1BLCAiCi0JCQkgICJpbmFjdGl2ZSBxdWV1ZTogJXVcbiIsIHEpOworCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19RVUVVRSwKKwkJCSJTdG9wcGluZyBUWCBETUEsIGluYWN0aXZlIHF1ZXVlOiAldVxuIiwgcSk7CiAJCXJldHVybiBmYWxzZTsKIAl9CiAKQEAgLTE3Niw5ICsxNzUsOSBAQAogCX0KIAogCWlmIChhdGg5a19od19udW10eHBlbmRpbmcoYWgsIHEpKSB7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfUVVFVUUsCi0JCQkgICIlczogTnVtIG9mIHBlbmRpbmcgVFggRnJhbWVzICVkIG9uIFEgJWRcbiIsCi0JCQkgIF9fZnVuY19fLCBhdGg5a19od19udW10eHBlbmRpbmcoYWgsIHEpLCBxKTsKKwkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfUVVFVUUsCisJCQkiJXM6IE51bSBvZiBwZW5kaW5nIFRYIEZyYW1lcyAlZCBvbiBRICVkXG4iLAorCQkJX19mdW5jX18sIGF0aDlrX2h3X251bXR4cGVuZGluZyhhaCwgcSksIHEpOwogCiAJCWZvciAoaiA9IDA7IGogPCAyOyBqKyspIHsKIAkJCXRzZkxvdyA9IFJFR19SRUFEKGFoLCBBUl9UU0ZfTDMyKTsKQEAgLTE5Miw5ICsxOTEsOSBAQAogCQkJaWYgKChSRUdfUkVBRChhaCwgQVJfVFNGX0wzMikgPj4gMTApID09ICh0c2ZMb3cgPj4gMTApKQogCQkJCWJyZWFrOwogCi0JCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX1FVRVVFLAotCQkJCSAgIlRTRiBoYXMgbW92ZWQgd2hpbGUgdHJ5aW5nIHRvIHNldCAiCi0JCQkJICAicXVpZXQgdGltZSBUU0Y6IDB4JTA4eFxuIiwgdHNmTG93KTsKKwkJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX1FVRVVFLAorCQkJCSJUU0YgaGFzIG1vdmVkIHdoaWxlIHRyeWluZyB0byBzZXQgcXVpZXQgdGltZSBUU0Y6IDB4JTA4eFxuIiwKKwkJCQl0c2ZMb3cpOwogCQl9CiAKIAkJUkVHX1NFVF9CSVQoYWgsIEFSX0RJQUdfU1csIEFSX0RJQUdfRk9SQ0VfQ0hfSURMRV9ISUdIKTsKQEAgLTIwNSw5ICsyMDQsOCBAQAogCQl3YWl0ID0gd2FpdF90aW1lOwogCQl3aGlsZSAoYXRoOWtfaHdfbnVtdHhwZW5kaW5nKGFoLCBxKSkgewogCQkJaWYgKCgtLXdhaXQpID09IDApIHsKLQkJCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0ZBVEFMLAotCQkJCQkgICJGYWlsZWQgdG8gc3RvcCBUWCBETUEgaW4gMTAwICIKLQkJCQkJICAibXNlYyBhZnRlciBraWxsaW5nIGxhc3QgZnJhbWVcbiIpOworCQkJCWF0aF9lcnIoY29tbW9uLAorCQkJCQkiRmFpbGVkIHRvIHN0b3AgVFggRE1BIGluIDEwMCBtc2VjIGFmdGVyIGtpbGxpbmcgbGFzdCBmcmFtZVxuIik7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCQl1ZGVsYXkoQVRIOUtfVElNRV9RVUFOVFVNKTsKQEAgLTI0MCwxOSArMjM4LDE5IEBACiAJc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gKnFpOwogCiAJaWYgKHEgPj0gcENhcC0+dG90YWxfcXVldWVzKSB7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfUVVFVUUsICJTZXQgVFhRIHByb3BlcnRpZXMsICIKLQkJCSAgImludmFsaWQgcXVldWU6ICV1XG4iLCBxKTsKKwkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfUVVFVUUsCisJCQkiU2V0IFRYUSBwcm9wZXJ0aWVzLCBpbnZhbGlkIHF1ZXVlOiAldVxuIiwgcSk7CiAJCXJldHVybiBmYWxzZTsKIAl9CiAKIAlxaSA9ICZhaC0+dHhxW3FdOwogCWlmIChxaS0+dHFpX3R5cGUgPT0gQVRIOUtfVFhfUVVFVUVfSU5BQ1RJVkUpIHsKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19RVUVVRSwgIlNldCBUWFEgcHJvcGVydGllcywgIgotCQkJICAiaW5hY3RpdmUgcXVldWU6ICV1XG4iLCBxKTsKKwkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfUVVFVUUsCisJCQkiU2V0IFRYUSBwcm9wZXJ0aWVzLCBpbmFjdGl2ZSBxdWV1ZTogJXVcbiIsIHEpOwogCQlyZXR1cm4gZmFsc2U7CiAJfQogCi0JYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19RVUVVRSwgIlNldCBxdWV1ZSBwcm9wZXJ0aWVzIGZvcjogJXVcbiIsIHEpOworCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX1FVRVVFLCAiU2V0IHF1ZXVlIHByb3BlcnRpZXMgZm9yOiAldVxuIiwgcSk7CiAKIAlxaS0+dHFpX3ZlciA9IHFpbmZvLT50cWlfdmVyOwogCXFpLT50cWlfc3VidHlwZSA9IHFpbmZvLT50cWlfc3VidHlwZTsKQEAgLTMxMSwxNSArMzA5LDE1IEBACiAJc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gKnFpOwogCiAJaWYgKHEgPj0gcENhcC0+dG90YWxfcXVldWVzKSB7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfUVVFVUUsICJHZXQgVFhRIHByb3BlcnRpZXMsICIKLQkJCSAgImludmFsaWQgcXVldWU6ICV1XG4iLCBxKTsKKwkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfUVVFVUUsCisJCQkiR2V0IFRYUSBwcm9wZXJ0aWVzLCBpbnZhbGlkIHF1ZXVlOiAldVxuIiwgcSk7CiAJCXJldHVybiBmYWxzZTsKIAl9CiAKIAlxaSA9ICZhaC0+dHhxW3FdOwogCWlmIChxaS0+dHFpX3R5cGUgPT0gQVRIOUtfVFhfUVVFVUVfSU5BQ1RJVkUpIHsKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19RVUVVRSwgIkdldCBUWFEgcHJvcGVydGllcywgIgotCQkJICAiaW5hY3RpdmUgcXVldWU6ICV1XG4iLCBxKTsKKwkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfUVVFVUUsCisJCQkiR2V0IFRYUSBwcm9wZXJ0aWVzLCBpbmFjdGl2ZSBxdWV1ZTogJXVcbiIsIHEpOwogCQlyZXR1cm4gZmFsc2U7CiAJfQogCkBAIC0zNjksMjMgKzM2NywyMCBAQAogCQkJICAgIEFUSDlLX1RYX1FVRVVFX0lOQUNUSVZFKQogCQkJCWJyZWFrOwogCQlpZiAocSA9PSBwQ2FwLT50b3RhbF9xdWV1ZXMpIHsKLQkJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRkFUQUwsCi0JCQkJICAiTm8gYXZhaWxhYmxlIFRYIHF1ZXVlXG4iKTsKKwkJCWF0aF9lcnIoY29tbW9uLCAiTm8gYXZhaWxhYmxlIFRYIHF1ZXVlXG4iKTsKIAkJCXJldHVybiAtMTsKIAkJfQogCQlicmVhazsKIAlkZWZhdWx0OgotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0ZBVEFMLAotCQkJICAiSW52YWxpZCBUWCBxdWV1ZSB0eXBlOiAldVxuIiwgdHlwZSk7CisJCWF0aF9lcnIoY29tbW9uLCAiSW52YWxpZCBUWCBxdWV1ZSB0eXBlOiAldVxuIiwgdHlwZSk7CiAJCXJldHVybiAtMTsKIAl9CiAKLQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX1FVRVVFLCAiU2V0dXAgVFggcXVldWU6ICV1XG4iLCBxKTsKKwlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19RVUVVRSwgIlNldHVwIFRYIHF1ZXVlOiAldVxuIiwgcSk7CiAKIAlxaSA9ICZhaC0+dHhxW3FdOwogCWlmIChxaS0+dHFpX3R5cGUgIT0gQVRIOUtfVFhfUVVFVUVfSU5BQ1RJVkUpIHsKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19GQVRBTCwKLQkJCSAgIlRYIHF1ZXVlOiAldSBhbHJlYWR5IGFjdGl2ZVxuIiwgcSk7CisJCWF0aF9lcnIoY29tbW9uLCAiVFggcXVldWU6ICV1IGFscmVhZHkgYWN0aXZlXG4iLCBxKTsKIAkJcmV0dXJuIC0xOwogCX0KIAltZW1zZXQocWksIDAsIHNpemVvZihzdHJ1Y3QgYXRoOWtfdHhfcXVldWVfaW5mbykpOwpAQCAtNDE3LDE4ICs0MTIsMTggQEAKIAlzdHJ1Y3QgYXRoOWtfdHhfcXVldWVfaW5mbyAqcWk7CiAKIAlpZiAocSA+PSBwQ2FwLT50b3RhbF9xdWV1ZXMpIHsKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19RVUVVRSwgIlJlbGVhc2UgVFhRLCAiCi0JCQkgICJpbnZhbGlkIHF1ZXVlOiAldVxuIiwgcSk7CisJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX1FVRVVFLAorCQkJIlJlbGVhc2UgVFhRLCBpbnZhbGlkIHF1ZXVlOiAldVxuIiwgcSk7CiAJCXJldHVybiBmYWxzZTsKIAl9CiAJcWkgPSAmYWgtPnR4cVtxXTsKIAlpZiAocWktPnRxaV90eXBlID09IEFUSDlLX1RYX1FVRVVFX0lOQUNUSVZFKSB7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfUVVFVUUsICJSZWxlYXNlIFRYUSwgIgotCQkJICAiaW5hY3RpdmUgcXVldWU6ICV1XG4iLCBxKTsKKwkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfUVVFVUUsCisJCQkiUmVsZWFzZSBUWFEsIGluYWN0aXZlIHF1ZXVlOiAldVxuIiwgcSk7CiAJCXJldHVybiBmYWxzZTsKIAl9CiAKLQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX1FVRVVFLCAiUmVsZWFzZSBUWCBxdWV1ZTogJXVcbiIsIHEpOworCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX1FVRVVFLCAiUmVsZWFzZSBUWCBxdWV1ZTogJXVcbiIsIHEpOwogCiAJcWktPnRxaV90eXBlID0gQVRIOUtfVFhfUVVFVUVfSU5BQ1RJVkU7CiAJYWgtPnR4b2tfaW50ZXJydXB0X21hc2sgJj0gfigxIDw8IHEpOwpAQCAtNDUxLDE5ICs0NDYsMTkgQEAKIAl1MzIgY3dNaW4sIGNoYW5Dd01pbiwgdmFsdWU7CiAKIAlpZiAocSA+PSBwQ2FwLT50b3RhbF9xdWV1ZXMpIHsKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19RVUVVRSwgIlJlc2V0IFRYUSwgIgotCQkJICAiaW52YWxpZCBxdWV1ZTogJXVcbiIsIHEpOworCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19RVUVVRSwKKwkJCSJSZXNldCBUWFEsIGludmFsaWQgcXVldWU6ICV1XG4iLCBxKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAogCXFpID0gJmFoLT50eHFbcV07CiAJaWYgKHFpLT50cWlfdHlwZSA9PSBBVEg5S19UWF9RVUVVRV9JTkFDVElWRSkgewotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX1FVRVVFLCAiUmVzZXQgVFhRLCAiCi0JCQkgICJpbmFjdGl2ZSBxdWV1ZTogJXVcbiIsIHEpOworCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19RVUVVRSwKKwkJCSJSZXNldCBUWFEsIGluYWN0aXZlIHF1ZXVlOiAldVxuIiwgcSk7CiAJCXJldHVybiB0cnVlOwogCX0KIAotCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfUVVFVUUsICJSZXNldCBUWCBxdWV1ZTogJXVcbiIsIHEpOworCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX1FVRVVFLCAiUmVzZXQgVFggcXVldWU6ICV1XG4iLCBxKTsKIAogCWlmIChxaS0+dHFpX2N3bWluID09IEFUSDlLX1RYUV9VU0VERUZBVUxUKSB7CiAJCWlmIChjaGFuICYmIElTX0NIQU5fQihjaGFuKSkKQEAgLTY5NywxNSArNjkyLDE2IEBACiAJaWYgKChhZHMuZHNfcnhzdGF0dXM4ICYgQVJfUnhGcmFtZU9LKSA9PSAwKSB7CiAJCWlmIChhZHMuZHNfcnhzdGF0dXM4ICYgQVJfQ1JDRXJyKQogCQkJcnMtPnJzX3N0YXR1cyB8PSBBVEg5S19SWEVSUl9DUkM7Ci0JCWVsc2UgaWYgKGFkcy5kc19yeHN0YXR1czggJiBBUl9QSFlFcnIpIHsKKwkJaWYgKGFkcy5kc19yeHN0YXR1czggJiBBUl9QSFlFcnIpIHsKIAkJCXJzLT5yc19zdGF0dXMgfD0gQVRIOUtfUlhFUlJfUEhZOwogCQkJcGh5ZXJyID0gTVMoYWRzLmRzX3J4c3RhdHVzOCwgQVJfUEhZRXJyQ29kZSk7CiAJCQlycy0+cnNfcGh5ZXJyID0gcGh5ZXJyOwotCQl9IGVsc2UgaWYgKGFkcy5kc19yeHN0YXR1czggJiBBUl9EZWNyeXB0Q1JDRXJyKQorCQl9CisJCWlmIChhZHMuZHNfcnhzdGF0dXM4ICYgQVJfRGVjcnlwdENSQ0VycikKIAkJCXJzLT5yc19zdGF0dXMgfD0gQVRIOUtfUlhFUlJfREVDUllQVDsKLQkJZWxzZSBpZiAoYWRzLmRzX3J4c3RhdHVzOCAmIEFSX01pY2hhZWxFcnIpCisJCWlmIChhZHMuZHNfcnhzdGF0dXM4ICYgQVJfTWljaGFlbEVycikKIAkJCXJzLT5yc19zdGF0dXMgfD0gQVRIOUtfUlhFUlJfTUlDOwotCQllbHNlIGlmIChhZHMuZHNfcnhzdGF0dXM4ICYgQVJfS2V5TWlzcykKKwkJaWYgKGFkcy5kc19yeHN0YXR1czggJiBBUl9LZXlNaXNzKQogCQkJcnMtPnJzX3N0YXR1cyB8PSBBVEg5S19SWEVSUl9ERUNSWVBUOwogCX0KIApAQCAtNzM1LDkgKzczMSw5IEBACiAJCQkJICAgICBBUl9ESUFHX1JYX0FCT1JUKSk7CiAKIAkJCXJlZyA9IFJFR19SRUFEKGFoLCBBUl9PQlNfQlVTXzEpOwotCQkJYXRoX3ByaW50KGF0aDlrX2h3X2NvbW1vbihhaCksIEFUSF9EQkdfRkFUQUwsCi0JCQkJICAiUlggZmFpbGVkIHRvIGdvIGlkbGUgaW4gMTAgbXMgUlhTTT0weCV4XG4iLAotCQkJCSAgcmVnKTsKKwkJCWF0aF9lcnIoYXRoOWtfaHdfY29tbW9uKGFoKSwKKwkJCQkiUlggZmFpbGVkIHRvIGdvIGlkbGUgaW4gMTAgbXMgUlhTTT0weCV4XG4iLAorCQkJCXJlZyk7CiAKIAkJCXJldHVybiBmYWxzZTsKIAkJfQpAQCAtNzY2LDE0ICs3NjIsNiBAQAogfQogRVhQT1JUX1NZTUJPTChhdGg5a19od19zdGFydHBjdXJlY2VpdmUpOwogCi12b2lkIGF0aDlrX2h3X3N0b3BwY3VyZWN2KHN0cnVjdCBhdGhfaHcgKmFoKQotewotCVJFR19TRVRfQklUKGFoLCBBUl9ESUFHX1NXLCBBUl9ESUFHX1JYX0RJUyk7Ci0KLQlhdGg5a19od19kaXNhYmxlX21pYl9jb3VudGVycyhhaCk7Ci19Ci1FWFBPUlRfU1lNQk9MKGF0aDlrX2h3X3N0b3BwY3VyZWN2KTsKLQogdm9pZCBhdGg5a19od19hYm9ydHBjdXJlY3Yoc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJUkVHX1NFVF9CSVQoYWgsIEFSX0RJQUdfU1csIEFSX0RJQUdfUlhfQUJPUlQgfCBBUl9ESUFHX1JYX0RJUyk7CkBAIC03OTksMTIgKzc4NywxMSBAQAogCX0KIAogCWlmIChpID09IDApIHsKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19GQVRBTCwKLQkJCSAgIkRNQSBmYWlsZWQgdG8gc3RvcCBpbiAlZCBtcyAiCi0JCQkgICJBUl9DUj0weCUwOHggQVJfRElBR19TVz0weCUwOHhcbiIsCi0JCQkgIEFIX1JYX1NUT1BfRE1BX1RJTUVPVVQgLyAxMDAwLAotCQkJICBSRUdfUkVBRChhaCwgQVJfQ1IpLAotCQkJICBSRUdfUkVBRChhaCwgQVJfRElBR19TVykpOworCQlhdGhfZXJyKGNvbW1vbiwKKwkJCSJETUEgZmFpbGVkIHRvIHN0b3AgaW4gJWQgbXMgQVJfQ1I9MHglMDh4IEFSX0RJQUdfU1c9MHglMDh4XG4iLAorCQkJQUhfUlhfU1RPUF9ETUFfVElNRU9VVCAvIDEwMDAsCisJCQlSRUdfUkVBRChhaCwgQVJfQ1IpLAorCQkJUkVHX1JFQUQoYWgsIEFSX0RJQUdfU1cpKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0gZWxzZSB7CiAJCXJldHVybiB0cnVlOwpAQCAtODQ4LDI4ICs4MzUsNTkgQEAKIH0KIEVYUE9SVF9TWU1CT0woYXRoOWtfaHdfaW50cnBlbmQpOwogCi1lbnVtIGF0aDlrX2ludCBhdGg5a19od19zZXRfaW50ZXJydXB0cyhzdHJ1Y3QgYXRoX2h3ICphaCwKLQkJCQkJICAgICAgZW51bSBhdGg5a19pbnQgaW50cykKK3ZvaWQgYXRoOWtfaHdfZGlzYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCBhdGhfaHcgKmFoKQoreworCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOworCisJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfSU5URVJSVVBULCAiZGlzYWJsZSBJRVJcbiIpOworCVJFR19XUklURShhaCwgQVJfSUVSLCBBUl9JRVJfRElTQUJMRSk7CisJKHZvaWQpIFJFR19SRUFEKGFoLCBBUl9JRVIpOworCWlmICghQVJfU1JFVl85MTAwKGFoKSkgeworCQlSRUdfV1JJVEUoYWgsIEFSX0lOVFJfQVNZTkNfRU5BQkxFLCAwKTsKKwkJKHZvaWQpIFJFR19SRUFEKGFoLCBBUl9JTlRSX0FTWU5DX0VOQUJMRSk7CisKKwkJUkVHX1dSSVRFKGFoLCBBUl9JTlRSX1NZTkNfRU5BQkxFLCAwKTsKKwkJKHZvaWQpIFJFR19SRUFEKGFoLCBBUl9JTlRSX1NZTkNfRU5BQkxFKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKGF0aDlrX2h3X2Rpc2FibGVfaW50ZXJydXB0cyk7CisKK3ZvaWQgYXRoOWtfaHdfZW5hYmxlX2ludGVycnVwdHMoc3RydWN0IGF0aF9odyAqYWgpCit7CisJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihhaCk7CisKKwlpZiAoIShhaC0+aW1hc2sgJiBBVEg5S19JTlRfR0xPQkFMKSkKKwkJcmV0dXJuOworCisJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfSU5URVJSVVBULCAiZW5hYmxlIElFUlxuIik7CisJUkVHX1dSSVRFKGFoLCBBUl9JRVIsIEFSX0lFUl9FTkFCTEUpOworCWlmICghQVJfU1JFVl85MTAwKGFoKSkgeworCQlSRUdfV1JJVEUoYWgsIEFSX0lOVFJfQVNZTkNfRU5BQkxFLAorCQkJICBBUl9JTlRSX01BQ19JUlEpOworCQlSRUdfV1JJVEUoYWgsIEFSX0lOVFJfQVNZTkNfTUFTSywgQVJfSU5UUl9NQUNfSVJRKTsKKworCisJCVJFR19XUklURShhaCwgQVJfSU5UUl9TWU5DX0VOQUJMRSwKKwkJCSAgQVJfSU5UUl9TWU5DX0RFRkFVTFQpOworCQlSRUdfV1JJVEUoYWgsIEFSX0lOVFJfU1lOQ19NQVNLLAorCQkJICBBUl9JTlRSX1NZTkNfREVGQVVMVCk7CisJfQorCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0lOVEVSUlVQVCwgIkFSX0lNUiAweCV4IElFUiAweCV4XG4iLAorCQlSRUdfUkVBRChhaCwgQVJfSU1SKSwgUkVHX1JFQUQoYWgsIEFSX0lFUikpOworfQorRVhQT1JUX1NZTUJPTChhdGg5a19od19lbmFibGVfaW50ZXJydXB0cyk7CisKK3ZvaWQgYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoc3RydWN0IGF0aF9odyAqYWgsIGVudW0gYXRoOWtfaW50IGludHMpCiB7CiAJZW51bSBhdGg5a19pbnQgb21hc2sgPSBhaC0+aW1hc2s7CiAJdTMyIG1hc2ssIG1hc2syOwogCXN0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgKnBDYXAgPSAmYWgtPmNhcHM7CiAJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihhaCk7CiAKLQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0lOVEVSUlVQVCwgIjB4JXggPT4gMHgleFxuIiwgb21hc2ssIGludHMpOworCWlmICghKGludHMgJiBBVEg5S19JTlRfR0xPQkFMKSkKKwkJYXRoOWtfaHdfZW5hYmxlX2ludGVycnVwdHMoYWgpOwogCi0JaWYgKG9tYXNrICYgQVRIOUtfSU5UX0dMT0JBTCkgewotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0lOVEVSUlVQVCwgImRpc2FibGUgSUVSXG4iKTsKLQkJUkVHX1dSSVRFKGFoLCBBUl9JRVIsIEFSX0lFUl9ESVNBQkxFKTsKLQkJKHZvaWQpIFJFR19SRUFEKGFoLCBBUl9JRVIpOwotCQlpZiAoIUFSX1NSRVZfOTEwMChhaCkpIHsKLQkJCVJFR19XUklURShhaCwgQVJfSU5UUl9BU1lOQ19FTkFCTEUsIDApOwotCQkJKHZvaWQpIFJFR19SRUFEKGFoLCBBUl9JTlRSX0FTWU5DX0VOQUJMRSk7Ci0KLQkJCVJFR19XUklURShhaCwgQVJfSU5UUl9TWU5DX0VOQUJMRSwgMCk7Ci0JCQkodm9pZCkgUkVHX1JFQUQoYWgsIEFSX0lOVFJfU1lOQ19FTkFCTEUpOwotCQl9Ci0JfQorCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0lOVEVSUlVQVCwgIjB4JXggPT4gMHgleFxuIiwgb21hc2ssIGludHMpOwogCiAJLyogVE9ETzogZ2xvYmFsIGludCBSZWYgY291bnQgKi8KIAltYXNrID0gaW50cyAmIEFUSDlLX0lOVF9DT01NT047CkBAIC05MzAsNyArOTQ4LDcgQEAKIAkJCW1hc2syIHw9IEFSX0lNUl9TMl9DU1Q7CiAJfQogCi0JYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19JTlRFUlJVUFQsICJuZXcgSU1SIDB4JXhcbiIsIG1hc2spOworCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0lOVEVSUlVQVCwgIm5ldyBJTVIgMHgleFxuIiwgbWFzayk7CiAJUkVHX1dSSVRFKGFoLCBBUl9JTVIsIG1hc2spOwogCWFoLT5pbXJzMl9yZWcgJj0gfihBUl9JTVJfUzJfVElNIHwgQVJfSU1SX1MyX0RUSU0gfCBBUl9JTVJfUzJfRFRJTVNZTkMgfAogCQkJICAgQVJfSU1SX1MyX0NBQkVORCB8IEFSX0lNUl9TMl9DQUJUTyB8CkBAIC05NDUsMjQgKzk2Myw4IEBACiAJCQlSRUdfQ0xSX0JJVChhaCwgQVJfSU1SX1M1LCBBUl9JTVJfUzVfVElNX1RJTUVSKTsKIAl9CiAKLQlpZiAoaW50cyAmIEFUSDlLX0lOVF9HTE9CQUwpIHsKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19JTlRFUlJVUFQsICJlbmFibGUgSUVSXG4iKTsKLQkJUkVHX1dSSVRFKGFoLCBBUl9JRVIsIEFSX0lFUl9FTkFCTEUpOwotCQlpZiAoIUFSX1NSRVZfOTEwMChhaCkpIHsKLQkJCVJFR19XUklURShhaCwgQVJfSU5UUl9BU1lOQ19FTkFCTEUsCi0JCQkJICBBUl9JTlRSX01BQ19JUlEpOwotCQkJUkVHX1dSSVRFKGFoLCBBUl9JTlRSX0FTWU5DX01BU0ssIEFSX0lOVFJfTUFDX0lSUSk7CisJYXRoOWtfaHdfZW5hYmxlX2ludGVycnVwdHMoYWgpOwogCi0KLQkJCVJFR19XUklURShhaCwgQVJfSU5UUl9TWU5DX0VOQUJMRSwKLQkJCQkgIEFSX0lOVFJfU1lOQ19ERUZBVUxUKTsKLQkJCVJFR19XUklURShhaCwgQVJfSU5UUl9TWU5DX01BU0ssCi0JCQkJICBBUl9JTlRSX1NZTkNfREVGQVVMVCk7Ci0JCX0KLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19JTlRFUlJVUFQsICJBUl9JTVIgMHgleCBJRVIgMHgleFxuIiwKLQkJCSAgUkVHX1JFQUQoYWgsIEFSX0lNUiksIFJFR19SRUFEKGFoLCBBUl9JRVIpKTsKLQl9Ci0KLQlyZXR1cm4gb21hc2s7CisJcmV0dXJuOwogfQogRVhQT1JUX1NZTUJPTChhdGg5a19od19zZXRfaW50ZXJydXB0cyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFjLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFjLmgKaW5kZXggN2MxYTM0ZC4uNzUxMmY5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21hYy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWMuaApAQCAtMTA0LDEzICsxMDQsMTEgQEAKIAl1MzIgdHNfdHN0YW1wOwogCXUxNiB0c19zZXFudW07CiAJdTggdHNfc3RhdHVzOwotCXU4IHRzX3JhdGVjb2RlOwogCXU4IHRzX3JhdGVpbmRleDsKIAlpbnQ4X3QgdHNfcnNzaTsKIAl1OCB0c19zaG9ydHJldHJ5OwogCXU4IHRzX2xvbmdyZXRyeTsKIAl1OCB0c192aXJ0Y29sOwotCXU4IHRzX2FudGVubmE7CiAJdTggdHNfZmxhZ3M7CiAJaW50OF90IHRzX3Jzc2lfY3RsMDsKIAlpbnQ4X3QgdHNfcnNzaV9jdGwxOwpAQCAtMTIxLDcgKzExOSw2IEBACiAJdTggcWlkOwogCXUxNiBkZXNjX2lkOwogCXU4IHRpZDsKLQl1OCBwYWRbMl07CiAJdTMyIGJhX2xvdzsKIAl1MzIgYmFfaGlnaDsKIAl1MzIgZXZtMDsKQEAgLTI0MCw3ICsyMzcsNyBAQAogCXUzMiBkc19jdGwxOwogCXUzMiBkc19od1syMF07CiAJdm9pZCAqZHNfdmRhdGE7Ci19IF9fcGFja2VkOworfSBfX3BhY2tlZCBfX2FsaWduZWQoNCk7CiAKICNkZWZpbmUgQVRIOUtfVFhERVNDX0NMUkRNQVNLCQkweDAwMDEKICNkZWZpbmUgQVRIOUtfVFhERVNDX05PQUNLCQkweDAwMDIKQEAgLTMxMCw3ICszMDcsNyBAQAogCQkJdTMyIHN0YXR1czg7CiAJCX0gcng7CiAJfSB1OwotfSBfX3BhY2tlZDsKK30gX19wYWNrZWQgX19hbGlnbmVkKDQpOwogCiAjZGVmaW5lIEFSNTQxNkRFU0MoX2RzKSAgICAgICAgICgoc3RydWN0IGFyNTQxNl9kZXNjICopKF9kcykpCiAjZGVmaW5lIEFSNTQxNkRFU0NfQ09OU1QoX2RzKSAgICgoY29uc3Qgc3RydWN0IGFyNTQxNl9kZXNjICopKF9kcykpCkBAIC02NjksNiArNjY2LDcgQEAKIAogc3RydWN0IGF0aF9odzsKIHN0cnVjdCBhdGg5a19jaGFubmVsOworZW51bSBhdGg5a19pbnQ7CiAKIHUzMiBhdGg5a19od19nZXR0eGJ1ZihzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHEpOwogdm9pZCBhdGg5a19od19wdXR0eGJ1ZihzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHEsIHUzMiB0eGRwKTsKQEAgLTY5MywxNSArNjkxLDE1IEBACiBib29sIGF0aDlrX2h3X3NldHJ4YWJvcnQoc3RydWN0IGF0aF9odyAqYWgsIGJvb2wgc2V0KTsKIHZvaWQgYXRoOWtfaHdfcHV0cnhidWYoc3RydWN0IGF0aF9odyAqYWgsIHUzMiByeGRwKTsKIHZvaWQgYXRoOWtfaHdfc3RhcnRwY3VyZWNlaXZlKHN0cnVjdCBhdGhfaHcgKmFoLCBib29sIGlzX3NjYW5uaW5nKTsKLXZvaWQgYXRoOWtfaHdfc3RvcHBjdXJlY3Yoc3RydWN0IGF0aF9odyAqYWgpOwogdm9pZCBhdGg5a19od19hYm9ydHBjdXJlY3Yoc3RydWN0IGF0aF9odyAqYWgpOwogYm9vbCBhdGg5a19od19zdG9wZG1hcmVjdihzdHJ1Y3QgYXRoX2h3ICphaCk7CiBpbnQgYXRoOWtfaHdfYmVhY29ucV9zZXR1cChzdHJ1Y3QgYXRoX2h3ICphaCk7CiAKIC8qIEludGVycnVwdCBIYW5kbGluZyAqLwogYm9vbCBhdGg5a19od19pbnRycGVuZChzdHJ1Y3QgYXRoX2h3ICphaCk7Ci1lbnVtIGF0aDlrX2ludCBhdGg5a19od19zZXRfaW50ZXJydXB0cyhzdHJ1Y3QgYXRoX2h3ICphaCwKLQkJCQkgICAgICAgZW51bSBhdGg5a19pbnQgaW50cyk7Cit2b2lkIGF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKHN0cnVjdCBhdGhfaHcgKmFoLCBlbnVtIGF0aDlrX2ludCBpbnRzKTsKK3ZvaWQgYXRoOWtfaHdfZW5hYmxlX2ludGVycnVwdHMoc3RydWN0IGF0aF9odyAqYWgpOwordm9pZCBhdGg5a19od19kaXNhYmxlX2ludGVycnVwdHMoc3RydWN0IGF0aF9odyAqYWgpOwogCiB2b2lkIGFyOTAwMl9od19hdHRhY2hfbWFjX29wcyhzdHJ1Y3QgYXRoX2h3ICphaCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFpbi5jCmluZGV4IGMwYzM0NjQuLmY5MGE2Y2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21haW4uYwpAQCAtMjMsNyArMjMsNyBAQAogCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOwogCiAJaWYgKHNjLT5jdXJ0eHBvdyAhPSBzYy0+Y29uZmlnLnR4cG93bGltaXQpIHsKLQkJYXRoOWtfaHdfc2V0X3R4cG93ZXJsaW1pdChhaCwgc2MtPmNvbmZpZy50eHBvd2xpbWl0KTsKKwkJYXRoOWtfaHdfc2V0X3R4cG93ZXJsaW1pdChhaCwgc2MtPmNvbmZpZy50eHBvd2xpbWl0LCBmYWxzZSk7CiAJCS8qIHJlYWQgYmFjayBpbiBjYXNlIHZhbHVlIGlzIGNsYW1wZWQgKi8KIAkJc2MtPmN1cnR4cG93ID0gYXRoOWtfaHdfcmVndWxhdG9yeShhaCktPnBvd2VyX2xpbWl0OwogCX0KQEAgLTIzNCw2ICsyMzQsOCBAQAogCiAJYXRoOWtfcHNfd2FrZXVwKHNjKTsKIAorCXNwaW5fbG9ja19iaCgmc2MtPnNjX3BjdV9sb2NrKTsKKwogCS8qCiAJICogVGhpcyBpcyBvbmx5IHBlcmZvcm1lZCBpZiB0aGUgY2hhbm5lbCBzZXR0aW5ncyBoYXZlCiAJICogYWN0dWFsbHkgY2hhbmdlZC4KQEAgLTI0MywxMSArMjQ1LDkgQEAKIAkgKiBoYXJkd2FyZSBhdCB0aGUgbmV3IGZyZXF1ZW5jeSwgYW5kIHRoZW4gcmUtZW5hYmxlCiAJICogdGhlIHJlbGV2YW50IGJpdHMgb2YgdGhlIGgvdy4KIAkgKi8KLQlhdGg5a19od19zZXRfaW50ZXJydXB0cyhhaCwgMCk7CisJYXRoOWtfaHdfZGlzYWJsZV9pbnRlcnJ1cHRzKGFoKTsKIAlzdG9wcGVkID0gYXRoX2RyYWluX2FsbF90eHEoc2MsIGZhbHNlKTsKIAotCXNwaW5fbG9ja19iaCgmc2MtPnJ4LnBjdV9sb2NrKTsKLQogCWlmICghYXRoX3N0b3ByZWN2KHNjKSkKIAkJc3RvcHBlZCA9IGZhbHNlOwogCkBAIC0yNjEsNDYgKzI2MSwzOSBAQAogCWlmICghKHNjLT5zY19mbGFncyAmIFNDX09QX09GRkNIQU5ORUwpKQogCQljYWxkYXRhID0gJmFwaHktPmNhbGRhdGE7CiAKLQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0NPTkZJRywKLQkJICAiKCV1IE1IeikgLT4gKCV1IE1IeiksIGNvbmZfaXNfaHQ0MDogJWQgZmFzdGNjOiAlZFxuIiwKLQkJICBzYy0+c2NfYWgtPmN1cmNoYW4tPmNoYW5uZWwsCi0JCSAgY2hhbm5lbC0+Y2VudGVyX2ZyZXEsIGNvbmZfaXNfaHQ0MChjb25mKSwKLQkJICBmYXN0Y2MpOwotCi0Jc3Bpbl9sb2NrX2JoKCZzYy0+c2NfcmVzZXRsb2NrKTsKKwlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19DT05GSUcsCisJCSIoJXUgTUh6KSAtPiAoJXUgTUh6KSwgY29uZl9pc19odDQwOiAlZCBmYXN0Y2M6ICVkXG4iLAorCQlzYy0+c2NfYWgtPmN1cmNoYW4tPmNoYW5uZWwsCisJCWNoYW5uZWwtPmNlbnRlcl9mcmVxLCBjb25mX2lzX2h0NDAoY29uZiksCisJCWZhc3RjYyk7CiAKIAlyID0gYXRoOWtfaHdfcmVzZXQoYWgsIGhjaGFuLCBjYWxkYXRhLCBmYXN0Y2MpOwogCWlmIChyKSB7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRkFUQUwsCi0JCQkgICJVbmFibGUgdG8gcmVzZXQgY2hhbm5lbCAoJXUgTUh6KSwgIgotCQkJICAicmVzZXQgc3RhdHVzICVkXG4iLAotCQkJICBjaGFubmVsLT5jZW50ZXJfZnJlcSwgcik7Ci0JCXNwaW5fdW5sb2NrX2JoKCZzYy0+c2NfcmVzZXRsb2NrKTsKLQkJc3Bpbl91bmxvY2tfYmgoJnNjLT5yeC5wY3VfbG9jayk7CisJCWF0aF9lcnIoY29tbW9uLAorCQkJIlVuYWJsZSB0byByZXNldCBjaGFubmVsICgldSBNSHopLCByZXNldCBzdGF0dXMgJWRcbiIsCisJCQljaGFubmVsLT5jZW50ZXJfZnJlcSwgcik7CiAJCWdvdG8gcHNfcmVzdG9yZTsKIAl9Ci0Jc3Bpbl91bmxvY2tfYmgoJnNjLT5zY19yZXNldGxvY2spOwogCiAJaWYgKGF0aF9zdGFydHJlY3Yoc2MpICE9IDApIHsKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19GQVRBTCwKLQkJCSAgIlVuYWJsZSB0byByZXN0YXJ0IHJlY3YgbG9naWNcbiIpOworCQlhdGhfZXJyKGNvbW1vbiwgIlVuYWJsZSB0byByZXN0YXJ0IHJlY3YgbG9naWNcbiIpOwogCQlyID0gLUVJTzsKLQkJc3Bpbl91bmxvY2tfYmgoJnNjLT5yeC5wY3VfbG9jayk7CiAJCWdvdG8gcHNfcmVzdG9yZTsKIAl9CiAKLQlzcGluX3VubG9ja19iaCgmc2MtPnJ4LnBjdV9sb2NrKTsKLQogCWF0aF91cGRhdGVfdHhwb3coc2MpOwogCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKGFoLCBhaC0+aW1hc2spOwogCiAJaWYgKCEoc2MtPnNjX2ZsYWdzICYgKFNDX09QX09GRkNIQU5ORUwpKSkgewotCQlhdGhfYmVhY29uX2NvbmZpZyhzYywgTlVMTCk7CisJCWlmIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9CRUFDT05TKQorCQkJYXRoX2JlYWNvbl9jb25maWcoc2MsIE5VTEwpOwogCQlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKHNjLT5odywgJnNjLT50eF9jb21wbGV0ZV93b3JrLCAwKTsKIAkJYXRoX3N0YXJ0X2FuaShjb21tb24pOwogCX0KIAogIHBzX3Jlc3RvcmU6CisJc3Bpbl91bmxvY2tfYmgoJnNjLT5zY19wY3VfbG9jayk7CisKIAlhdGg5a19wc19yZXN0b3JlKHNjKTsKIAlyZXR1cm4gcjsKIH0KQEAgLTMyOCw2ICszMjEsNDIgQEAKIAlhdGg5a19wc19yZXN0b3JlKHNjKTsKIH0KIAorc3RhdGljIGJvb2wgYXRoX3BhcHJkX3NlbmRfZnJhbWUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBza19idWZmICpza2IsIGludCBjaGFpbikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHNjLT5odzsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJc3RydWN0IGF0aF90eF9jb250cm9sIHR4Y3RsOworCWludCB0aW1lX2xlZnQ7CisKKwltZW1zZXQoJnR4Y3RsLCAwLCBzaXplb2YodHhjdGwpKTsKKwl0eGN0bC50eHEgPSBzYy0+dHgudHhxX21hcFtXTUVfQUNfQkVdOworCisJbWVtc2V0KHR4X2luZm8sIDAsIHNpemVvZigqdHhfaW5mbykpOworCXR4X2luZm8tPmJhbmQgPSBody0+Y29uZi5jaGFubmVsLT5iYW5kOworCXR4X2luZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9DVExfTk9fQUNLOworCXR4X2luZm8tPmNvbnRyb2wucmF0ZXNbMF0uaWR4ID0gMDsKKwl0eF9pbmZvLT5jb250cm9sLnJhdGVzWzBdLmNvdW50ID0gMTsKKwl0eF9pbmZvLT5jb250cm9sLnJhdGVzWzBdLmZsYWdzID0gSUVFRTgwMjExX1RYX1JDX01DUzsKKwl0eF9pbmZvLT5jb250cm9sLnJhdGVzWzFdLmlkeCA9IC0xOworCisJaW5pdF9jb21wbGV0aW9uKCZzYy0+cGFwcmRfY29tcGxldGUpOworCXNjLT5wYXByZF9wZW5kaW5nID0gdHJ1ZTsKKwl0eGN0bC5wYXByZCA9IEJJVChjaGFpbik7CisJaWYgKGF0aF90eF9zdGFydChodywgc2tiLCAmdHhjdGwpICE9IDApCisJCXJldHVybiBmYWxzZTsKKworCXRpbWVfbGVmdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmc2MtPnBhcHJkX2NvbXBsZXRlLAorCQkJbXNlY3NfdG9famlmZmllcyhBVEhfUEFQUkRfVElNRU9VVCkpOworCXNjLT5wYXByZF9wZW5kaW5nID0gZmFsc2U7CisKKwlpZiAoIXRpbWVfbGVmdCkKKwkJYXRoX2RiZyhhdGg5a19od19jb21tb24oc2MtPnNjX2FoKSwgQVRIX0RCR19DQUxJQlJBVEUsCisJCQkiVGltZW91dCB3YWl0aW5nIGZvciBwYXByZCB0cmFpbmluZyBvbiBUWCBjaGFpbiAlZFxuIiwKKwkJCWNoYWluKTsKKworCXJldHVybiAhIXRpbWVfbGVmdDsKK30KKwogdm9pZCBhdGhfcGFwcmRfY2FsaWJyYXRlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYXRoX3NvZnRjLCBwYXByZF93b3JrKTsKQEAgLTMzNSwyOCArMzY0LDIzIEBACiAJc3RydWN0IGF0aF9odyAqYWggPSBzYy0+c2NfYWg7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm87Ci0JaW50IGJhbmQgPSBody0+Y29uZi5jaGFubmVsLT5iYW5kOwotCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kID0gJnNjLT5zYmFuZHNbYmFuZF07Ci0Jc3RydWN0IGF0aF90eF9jb250cm9sIHR4Y3RsOwogCXN0cnVjdCBhdGg5a19od19jYWxfZGF0YSAqY2FsZGF0YSA9IGFoLT5jYWxkYXRhOwogCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOwotCWludCBxbnVtLCBmdHlwZTsKKwlpbnQgZnR5cGU7CiAJaW50IGNoYWluX29rID0gMDsKIAlpbnQgY2hhaW47CiAJaW50IGxlbiA9IDE4MDA7Ci0JaW50IHRpbWVfbGVmdDsKLQlpbnQgaTsKIAogCWlmICghY2FsZGF0YSkKIAkJcmV0dXJuOwogCisJaWYgKGFyOTAwM19wYXByZF9pbml0X3RhYmxlKGFoKSA8IDApCisJCXJldHVybjsKKwogCXNrYiA9IGFsbG9jX3NrYihsZW4sIEdGUF9LRVJORUwpOwogCWlmICghc2tiKQogCQlyZXR1cm47CiAKLQl0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwotCiAJc2tiX3B1dChza2IsIGxlbik7CiAJbWVtc2V0KHNrYi0+ZGF0YSwgMCwgbGVuKTsKIAloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CkBAIC0zNjcsNDAgKzM5MSwyNSBAQAogCW1lbWNweShoZHItPmFkZHIyLCBody0+d2lwaHktPnBlcm1fYWRkciwgRVRIX0FMRU4pOwogCW1lbWNweShoZHItPmFkZHIzLCBody0+d2lwaHktPnBlcm1fYWRkciwgRVRIX0FMRU4pOwogCi0JbWVtc2V0KCZ0eGN0bCwgMCwgc2l6ZW9mKHR4Y3RsKSk7Ci0JcW51bSA9IHNjLT50eC5od3FfbWFwW1dNRV9BQ19CRV07Ci0JdHhjdGwudHhxID0gJnNjLT50eC50eHFbcW51bV07Ci0KIAlhdGg5a19wc193YWtldXAoc2MpOwotCWFyOTAwM19wYXByZF9pbml0X3RhYmxlKGFoKTsKIAlmb3IgKGNoYWluID0gMDsgY2hhaW4gPCBBUjkzMDBfTUFYX0NIQUlOUzsgY2hhaW4rKykgewogCQlpZiAoIShjb21tb24tPnR4X2NoYWlubWFzayAmIEJJVChjaGFpbikpKQogCQkJY29udGludWU7CiAKIAkJY2hhaW5fb2sgPSAwOwotCQltZW1zZXQodHhfaW5mbywgMCwgc2l6ZW9mKCp0eF9pbmZvKSk7Ci0JCXR4X2luZm8tPmJhbmQgPSBiYW5kOwogCi0JCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLQkJCXR4X2luZm8tPmNvbnRyb2wucmF0ZXNbaV0uaWR4ID0gc2JhbmQtPm5fYml0cmF0ZXMgLSAxOwotCQkJdHhfaW5mby0+Y29udHJvbC5yYXRlc1tpXS5jb3VudCA9IDY7Ci0JCX0KLQotCQlpbml0X2NvbXBsZXRpb24oJnNjLT5wYXByZF9jb21wbGV0ZSk7Ci0JCWFyOTAwM19wYXByZF9zZXR1cF9nYWluX3RhYmxlKGFoLCBjaGFpbik7Ci0JCXR4Y3RsLnBhcHJkID0gQklUKGNoYWluKTsKLQkJaWYgKGF0aF90eF9zdGFydChodywgc2tiLCAmdHhjdGwpICE9IDApCi0JCQlicmVhazsKLQotCQl0aW1lX2xlZnQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJnNjLT5wYXByZF9jb21wbGV0ZSwKLQkJCQltc2Vjc190b19qaWZmaWVzKEFUSF9QQVBSRF9USU1FT1VUKSk7Ci0JCWlmICghdGltZV9sZWZ0KSB7Ci0JCQlhdGhfcHJpbnQoYXRoOWtfaHdfY29tbW9uKGFoKSwgQVRIX0RCR19DQUxJQlJBVEUsCi0JCQkJICAiVGltZW91dCB3YWl0aW5nIGZvciBwYXByZCB0cmFpbmluZyBvbiAiCi0JCQkJICAiVFggY2hhaW4gJWRcbiIsCi0JCQkJICBjaGFpbik7CisJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwKKwkJCSJTZW5kaW5nIFBBUFJEIGZyYW1lIGZvciB0aGVybWFsIG1lYXN1cmVtZW50ICIKKwkJCSJvbiBjaGFpbiAlZFxuIiwgY2hhaW4pOworCQlpZiAoIWF0aF9wYXByZF9zZW5kX2ZyYW1lKHNjLCBza2IsIGNoYWluKSkKIAkJCWdvdG8gZmFpbF9wYXByZDsKLQkJfQorCisJCWFyOTAwM19wYXByZF9zZXR1cF9nYWluX3RhYmxlKGFoLCBjaGFpbik7CisKKwkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAorCQkJIlNlbmRpbmcgUEFQUkQgdHJhaW5pbmcgZnJhbWUgb24gY2hhaW4gJWRcbiIsIGNoYWluKTsKKwkJaWYgKCFhdGhfcGFwcmRfc2VuZF9mcmFtZShzYywgc2tiLCBjaGFpbikpCisJCQlnb3RvIGZhaWxfcGFwcmQ7CiAKIAkJaWYgKCFhcjkwMDNfcGFwcmRfaXNfZG9uZShhaCkpCiAJCQlicmVhazsKQEAgLTQ1Nyw3ICs0NjYsNyBAQAogCS8qIExvbmcgY2FsaWJyYXRpb24gcnVucyBpbmRlcGVuZGVudGx5IG9mIHNob3J0IGNhbGlicmF0aW9uLiAqLwogCWlmICgodGltZXN0YW1wIC0gY29tbW9uLT5hbmkubG9uZ2NhbF90aW1lcikgPj0gbG9uZ19jYWxfaW50ZXJ2YWwpIHsKIAkJbG9uZ2NhbCA9IHRydWU7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQU5JLCAibG9uZ2NhbCBAJWx1XG4iLCBqaWZmaWVzKTsKKwkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQU5JLCAibG9uZ2NhbCBAJWx1XG4iLCBqaWZmaWVzKTsKIAkJY29tbW9uLT5hbmkubG9uZ2NhbF90aW1lciA9IHRpbWVzdGFtcDsKIAl9CiAKQEAgLTQ2NSw4ICs0NzQsOCBAQAogCWlmICghY29tbW9uLT5hbmkuY2FsZG9uZSkgewogCQlpZiAoKHRpbWVzdGFtcCAtIGNvbW1vbi0+YW5pLnNob3J0Y2FsX3RpbWVyKSA+PSBzaG9ydF9jYWxfaW50ZXJ2YWwpIHsKIAkJCXNob3J0Y2FsID0gdHJ1ZTsKLQkJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQU5JLAotCQkJCSAgInNob3J0Y2FsIEAlbHVcbiIsIGppZmZpZXMpOworCQkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQU5JLAorCQkJCSJzaG9ydGNhbCBAJWx1XG4iLCBqaWZmaWVzKTsKIAkJCWNvbW1vbi0+YW5pLnNob3J0Y2FsX3RpbWVyID0gdGltZXN0YW1wOwogCQkJY29tbW9uLT5hbmkucmVzZXRjYWxfdGltZXIgPSB0aW1lc3RhbXA7CiAJCX0KQEAgLTUyNSw0OSArNTM0LDI1IEBACiAJaWYgKChzYy0+c2NfYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9QQVBSRCkgJiYgYWgtPmNhbGRhdGEpIHsKIAkJaWYgKCFhaC0+Y2FsZGF0YS0+cGFwcmRfZG9uZSkKIAkJCWllZWU4MDIxMV9xdWV1ZV93b3JrKHNjLT5odywgJnNjLT5wYXByZF93b3JrKTsKLQkJZWxzZQorCQllbHNlIGlmICghYWgtPnBhcHJkX3RhYmxlX3dyaXRlX2RvbmUpCiAJCQlhdGhfcGFwcmRfYWN0aXZhdGUoc2MpOwogCX0KIH0KIAotLyoKLSAqIFVwZGF0ZSB0eC9yeCBjaGFpbm1hc2suIEZvciBsZWdhY3kgYXNzb2NpYXRpb24sCi0gKiBoYXJkIGNvZGUgY2hhaW5tYXNrIHRvIDF4MSwgZm9yIDExbiBhc3NvY2lhdGlvbiwgdXNlCi0gKiB0aGUgY2hhaW5tYXNrIGNvbmZpZ3VyYXRpb24sIGZvciBidCBjb2V4aXN0ZW5jZSwgdXNlCi0gKiB0aGUgY2hhaW5tYXNrIGNvbmZpZ3VyYXRpb24gZXZlbiBpbiBsZWdhY3kgbW9kZS4KLSAqLwotdm9pZCBhdGhfdXBkYXRlX2NoYWlubWFzayhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IGlzX2h0KQotewotCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOwotCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOwotCi0JaWYgKChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9PRkZDSEFOTkVMKSB8fCBpc19odCB8fAotCSAgICAoYWgtPmJ0Y29leF9ody5zY2hlbWUgIT0gQVRIX0JUQ09FWF9DRkdfTk9ORSkpIHsKLQkJY29tbW9uLT50eF9jaGFpbm1hc2sgPSBhaC0+Y2Fwcy50eF9jaGFpbm1hc2s7Ci0JCWNvbW1vbi0+cnhfY2hhaW5tYXNrID0gYWgtPmNhcHMucnhfY2hhaW5tYXNrOwotCX0gZWxzZSB7Ci0JCWNvbW1vbi0+dHhfY2hhaW5tYXNrID0gMTsKLQkJY29tbW9uLT5yeF9jaGFpbm1hc2sgPSAxOwotCX0KLQotCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQ09ORklHLAotCQkgICJ0eCBjaG1hc2s6ICVkLCByeCBjaG1hc2s6ICVkXG4iLAotCQkgIGNvbW1vbi0+dHhfY2hhaW5tYXNrLAotCQkgIGNvbW1vbi0+cnhfY2hhaW5tYXNrKTsKLX0KLQogc3RhdGljIHZvaWQgYXRoX25vZGVfYXR0YWNoKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKQogewogCXN0cnVjdCBhdGhfbm9kZSAqYW47Ci0KKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKIAlhbiA9IChzdHJ1Y3QgYXRoX25vZGUgKilzdGEtPmRydl9wcml2OwogCisJaWYgKChhaC0+Y2Fwcy5od19jYXBzKSAmIEFUSDlLX0hXX0NBUF9BUE0pCisJCXNjLT5zY19mbGFncyB8PSBTQ19PUF9FTkFCTEVfQVBNOworCiAJaWYgKHNjLT5zY19mbGFncyAmIFNDX09QX1RYQUdHUikgewogCQlhdGhfdHhfbm9kZV9pbml0KHNjLCBhbik7CiAJCWFuLT5tYXhhbXBkdSA9IDEgPDwgKElFRUU4MDIxMV9IVF9NQVhfQU1QRFVfRkFDVE9SICsKIAkJCQkgICAgIHN0YS0+aHRfY2FwLmFtcGR1X2ZhY3Rvcik7CiAJCWFuLT5tcGR1ZGVuc2l0eSA9IHBhcnNlX21wZHVkZW5zaXR5KHN0YS0+aHRfY2FwLmFtcGR1X2RlbnNpdHkpOwotCQlhbi0+bGFzdF9yc3NpID0gQVRIX1JTU0lfRFVNTVlfTUFSS0VSOwogCX0KIH0KIApAQCAtNjE1LDYgKzYwMCw4IEBACiAJCXJldHVybjsKIAl9CiAKKwlzcGluX2xvY2soJnNjLT5zY19wY3VfbG9jayk7CisKIAlpZiAoIWF0aDlrX2h3X2NoZWNrX2FsaXZlKGFoKSkKIAkJaWVlZTgwMjExX3F1ZXVlX3dvcmsoc2MtPmh3LCAmc2MtPmh3X2NoZWNrX3dvcmspOwogCkBAIC02MjUsMTUgKzYxMiwxMiBAQAogCQlyeG1hc2sgPSAoQVRIOUtfSU5UX1JYIHwgQVRIOUtfSU5UX1JYRU9MIHwgQVRIOUtfSU5UX1JYT1JOKTsKIAogCWlmIChzdGF0dXMgJiByeG1hc2spIHsKLQkJc3Bpbl9sb2NrX2JoKCZzYy0+cngucGN1X2xvY2spOwotCiAJCS8qIENoZWNrIGZvciBoaWdoIHByaW9yaXR5IFJ4IGZpcnN0ICovCiAJCWlmICgoYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9FRE1BKSAmJgogCQkgICAgKHN0YXR1cyAmIEFUSDlLX0lOVF9SWEhQKSkKIAkJCWF0aF9yeF90YXNrbGV0KHNjLCAwLCB0cnVlKTsKIAogCQlhdGhfcnhfdGFza2xldChzYywgMCwgZmFsc2UpOwotCQlzcGluX3VubG9ja19iaCgmc2MtPnJ4LnBjdV9sb2NrKTsKIAl9CiAKIAlpZiAoc3RhdHVzICYgQVRIOUtfSU5UX1RYKSB7CkBAIC02NDgsOCArNjMyLDggQEAKIAkJICogVFNGIHN5bmMgZG9lcyBub3QgbG9vayBjb3JyZWN0OyByZW1haW4gYXdha2UgdG8gc3luYyB3aXRoCiAJCSAqIHRoZSBuZXh0IEJlYWNvbi4KIAkJICovCi0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfUFMsCi0JCQkgICJUU0ZPT1IgLSBTeW5jIHdpdGggbmV4dCBCZWFjb25cbiIpOworCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19QUywKKwkJCSJUU0ZPT1IgLSBTeW5jIHdpdGggbmV4dCBCZWFjb25cbiIpOwogCQlzYy0+cHNfZmxhZ3MgfD0gUFNfV0FJVF9GT1JfQkVBQ09OIHwgUFNfQkVBQ09OX1NZTkM7CiAJfQogCkBAIC02NTgsNyArNjQyLDkgQEAKIAkJCWF0aF9nZW5fdGltZXJfaXNyKHNjLT5zY19haCk7CiAKIAkvKiByZS1lbmFibGUgaGFyZHdhcmUgaW50ZXJydXB0ICovCi0JYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoYWgsIGFoLT5pbWFzayk7CisJYXRoOWtfaHdfZW5hYmxlX2ludGVycnVwdHMoYWgpOworCisJc3Bpbl91bmxvY2soJnNjLT5zY19wY3VfbG9jayk7CiAJYXRoOWtfcHNfcmVzdG9yZShzYyk7CiB9CiAKQEAgLTc1Nyw3ICs3NDMsNyBAQAogCQkgKiBpbnRlcnJ1cHQ7IG90aGVyd2lzZSBpdCB3aWxsIGNvbnRpbnVlIHRvCiAJCSAqIGZpcmUuCiAJCSAqLwotCQlhdGg5a19od19zZXRfaW50ZXJydXB0cyhhaCwgMCk7CisJCWF0aDlrX2h3X2Rpc2FibGVfaW50ZXJydXB0cyhhaCk7CiAJCS8qCiAJCSAqIExldCB0aGUgaGFsIGhhbmRsZSB0aGUgZXZlbnQuIFdlIGFzc3VtZQogCQkgKiBpdCB3aWxsIGNsZWFyIHdoYXRldmVyIGNvbmRpdGlvbiBjYXVzZWQKQEAgLTc2NiwxMSArNzUyLDEzIEBACiAJCXNwaW5fbG9jaygmY29tbW9uLT5jY19sb2NrKTsKIAkJYXRoOWtfaHdfcHJvY19taWJfZXZlbnQoYWgpOwogCQlzcGluX3VubG9jaygmY29tbW9uLT5jY19sb2NrKTsKLQkJYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoYWgsIGFoLT5pbWFzayk7CisJCWF0aDlrX2h3X2VuYWJsZV9pbnRlcnJ1cHRzKGFoKTsKIAl9CiAKIAlpZiAoIShhaC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX0FVVE9TTEVFUCkpCiAJCWlmIChzdGF0dXMgJiBBVEg5S19JTlRfVElNX1RJTUVSKSB7CisJCQlpZiAoQVRIX0RCR19XQVJOX09OX09OQ0Uoc2MtPnBzX2lkbGUpKQorCQkJCWdvdG8gY2hpcF9yZXNldDsKIAkJCS8qIENsZWFyIFJ4QWJvcnQgYml0IHNvIHRoYXQgd2UgY2FuCiAJCQkgKiByZWNlaXZlIGZyYW1lcyAqLwogCQkJYXRoOWtfc2V0cG93ZXIoc2MsIEFUSDlLX1BNX0FXQUtFKTsKQEAgLTc4Myw4ICs3NzEsOCBAQAogCWF0aF9kZWJ1Z19zdGF0X2ludGVycnVwdChzYywgc3RhdHVzKTsKIAogCWlmIChzY2hlZCkgewotCQkvKiB0dXJuIG9mZiBldmVyeSBpbnRlcnJ1cHQgZXhjZXB0IFNXQkEgKi8KLQkJYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoYWgsIChhaC0+aW1hc2sgJiBBVEg5S19JTlRfU1dCQSkpOworCQkvKiB0dXJuIG9mZiBldmVyeSBpbnRlcnJ1cHQgKi8KKwkJYXRoOWtfaHdfZGlzYWJsZV9pbnRlcnJ1cHRzKGFoKTsKIAkJdGFza2xldF9zY2hlZHVsZSgmc2MtPmludHJfdHEpOwogCX0KIApAQCAtODM2LDE2ICs4MjQsMTggQEAKIH0KIAogc3RhdGljIHZvaWQgYXRoOWtfYnNzX2Fzc29jX2luZm8oc3RydWN0IGF0aF9zb2Z0YyAqc2MsCisJCQkJIHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAogCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpic3NfY29uZikKIHsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CiAJc3RydWN0IGF0aF9odyAqYWggPSBzYy0+c2NfYWg7CiAJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihhaCk7CiAKIAlpZiAoYnNzX2NvbmYtPmFzc29jKSB7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQ09ORklHLAotCQkJICAiQnNzIEluZm8gQVNTT0MgJWQsIGJzc2lkOiAlcE1cbiIsCi0JCQkgICBic3NfY29uZi0+YWlkLCBjb21tb24tPmN1cmJzc2lkKTsKKwkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ09ORklHLAorCQkJIkJzcyBJbmZvIEFTU09DICVkLCBic3NpZDogJXBNXG4iLAorCQkJYnNzX2NvbmYtPmFpZCwgY29tbW9uLT5jdXJic3NpZCk7CiAKIAkJLyogTmV3IGFzc29jaWF0aW9uLCBzdG9yZSBhaWQgKi8KIAkJY29tbW9uLT5jdXJhaWQgPSBic3NfY29uZi0+YWlkOwpAQCAtODYyLDEyICs4NTIsMTMgQEAKIAkJYXRoX2JlYWNvbl9jb25maWcoc2MsIHZpZik7CiAKIAkJLyogUmVzZXQgcnNzaSBzdGF0cyAqLworCQlhcGh5LT5sYXN0X3Jzc2kgPSBBVEhfUlNTSV9EVU1NWV9NQVJLRVI7CiAJCXNjLT5zY19haC0+c3RhdHMuYXZnYnJzc2kgPSBBVEhfUlNTSV9EVU1NWV9NQVJLRVI7CiAKIAkJc2MtPnNjX2ZsYWdzIHw9IFNDX09QX0FOSV9SVU47CiAJCWF0aF9zdGFydF9hbmkoY29tbW9uKTsKIAl9IGVsc2UgewotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0NPTkZJRywgIkJzcyBJbmZvIERJU0FTU09DXG4iKTsKKwkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ09ORklHLCAiQnNzIEluZm8gRElTQVNTT0NcbiIpOwogCQljb21tb24tPmN1cmFpZCA9IDA7CiAJCS8qIFN0b3AgQU5JICovCiAJCXNjLT5zY19mbGFncyAmPSB+U0NfT1BfQU5JX1JVTjsKQEAgLTg4MywzMSArODc0LDI1IEBACiAJaW50IHI7CiAKIAlhdGg5a19wc193YWtldXAoc2MpOworCXNwaW5fbG9ja19iaCgmc2MtPnNjX3BjdV9sb2NrKTsKKwogCWF0aDlrX2h3X2NvbmZpZ3BjaXBvd2Vyc2F2ZShhaCwgMCwgMCk7CiAKIAlpZiAoIWFoLT5jdXJjaGFuKQogCQlhaC0+Y3VyY2hhbiA9IGF0aF9nZXRfY3VyY2hhbm5lbChzYywgc2MtPmh3KTsKIAotCXNwaW5fbG9ja19iaCgmc2MtPnJ4LnBjdV9sb2NrKTsKLQlzcGluX2xvY2tfYmgoJnNjLT5zY19yZXNldGxvY2spOwogCXIgPSBhdGg5a19od19yZXNldChhaCwgYWgtPmN1cmNoYW4sIGFoLT5jYWxkYXRhLCBmYWxzZSk7CiAJaWYgKHIpIHsKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19GQVRBTCwKLQkJCSAgIlVuYWJsZSB0byByZXNldCBjaGFubmVsICgldSBNSHopLCAiCi0JCQkgICJyZXNldCBzdGF0dXMgJWRcbiIsCi0JCQkgIGNoYW5uZWwtPmNlbnRlcl9mcmVxLCByKTsKKwkJYXRoX2Vycihjb21tb24sCisJCQkiVW5hYmxlIHRvIHJlc2V0IGNoYW5uZWwgKCV1IE1IeiksIHJlc2V0IHN0YXR1cyAlZFxuIiwKKwkJCWNoYW5uZWwtPmNlbnRlcl9mcmVxLCByKTsKIAl9Ci0Jc3Bpbl91bmxvY2tfYmgoJnNjLT5zY19yZXNldGxvY2spOwogCiAJYXRoX3VwZGF0ZV90eHBvdyhzYyk7CiAJaWYgKGF0aF9zdGFydHJlY3Yoc2MpICE9IDApIHsKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19GQVRBTCwKLQkJCSAgIlVuYWJsZSB0byByZXN0YXJ0IHJlY3YgbG9naWNcbiIpOwotCQlzcGluX3VubG9ja19iaCgmc2MtPnJ4LnBjdV9sb2NrKTsKLQkJcmV0dXJuOworCQlhdGhfZXJyKGNvbW1vbiwgIlVuYWJsZSB0byByZXN0YXJ0IHJlY3YgbG9naWNcbiIpOworCQlnb3RvIG91dDsKIAl9Ci0Jc3Bpbl91bmxvY2tfYmgoJnNjLT5yeC5wY3VfbG9jayk7Ci0KIAlpZiAoc2MtPnNjX2ZsYWdzICYgU0NfT1BfQkVBQ09OUykKIAkJYXRoX2JlYWNvbl9jb25maWcoc2MsIE5VTEwpOwkvKiByZXN0YXJ0IGJlYWNvbnMgKi8KIApAQCAtOTIwLDYgKzkwNSw5IEBACiAJYXRoOWtfaHdfc2V0X2dwaW8oYWgsIGFoLT5sZWRfcGluLCAwKTsKIAogCWllZWU4MDIxMV93YWtlX3F1ZXVlcyhodyk7CitvdXQ6CisJc3Bpbl91bmxvY2tfYmgoJnNjLT5zY19wY3VfbG9jayk7CisKIAlhdGg5a19wc19yZXN0b3JlKHNjKTsKIH0KIApAQCAtOTMwLDYgKzkxOCw4IEBACiAJaW50IHI7CiAKIAlhdGg5a19wc193YWtldXAoc2MpOworCXNwaW5fbG9ja19iaCgmc2MtPnNjX3BjdV9sb2NrKTsKKwogCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyhodyk7CiAKIAkvKgpAQCAtOTQyLDM0ICs5MzIsMzAgQEAKIAl9CiAKIAkvKiBEaXNhYmxlIGludGVycnVwdHMgKi8KLQlhdGg5a19od19zZXRfaW50ZXJydXB0cyhhaCwgMCk7CisJYXRoOWtfaHdfZGlzYWJsZV9pbnRlcnJ1cHRzKGFoKTsKIAogCWF0aF9kcmFpbl9hbGxfdHhxKHNjLCBmYWxzZSk7CS8qIGNsZWFyIHBlbmRpbmcgdHggZnJhbWVzICovCiAKLQlzcGluX2xvY2tfYmgoJnNjLT5yeC5wY3VfbG9jayk7Ci0KIAlhdGhfc3RvcHJlY3Yoc2MpOwkJLyogdHVybiBvZmYgZnJhbWUgcmVjdiAqLwogCWF0aF9mbHVzaHJlY3Yoc2MpOwkJLyogZmx1c2ggcmVjdiBxdWV1ZSAqLwogCiAJaWYgKCFhaC0+Y3VyY2hhbikKIAkJYWgtPmN1cmNoYW4gPSBhdGhfZ2V0X2N1cmNoYW5uZWwoc2MsIGh3KTsKIAotCXNwaW5fbG9ja19iaCgmc2MtPnNjX3Jlc2V0bG9jayk7CiAJciA9IGF0aDlrX2h3X3Jlc2V0KGFoLCBhaC0+Y3VyY2hhbiwgYWgtPmNhbGRhdGEsIGZhbHNlKTsKIAlpZiAocikgewotCQlhdGhfcHJpbnQoYXRoOWtfaHdfY29tbW9uKHNjLT5zY19haCksIEFUSF9EQkdfRkFUQUwsCi0JCQkgICJVbmFibGUgdG8gcmVzZXQgY2hhbm5lbCAoJXUgTUh6KSwgIgotCQkJICAicmVzZXQgc3RhdHVzICVkXG4iLAotCQkJICBjaGFubmVsLT5jZW50ZXJfZnJlcSwgcik7CisJCWF0aF9lcnIoYXRoOWtfaHdfY29tbW9uKHNjLT5zY19haCksCisJCQkiVW5hYmxlIHRvIHJlc2V0IGNoYW5uZWwgKCV1IE1IeiksIHJlc2V0IHN0YXR1cyAlZFxuIiwKKwkJCWNoYW5uZWwtPmNlbnRlcl9mcmVxLCByKTsKIAl9Ci0Jc3Bpbl91bmxvY2tfYmgoJnNjLT5zY19yZXNldGxvY2spOwogCiAJYXRoOWtfaHdfcGh5X2Rpc2FibGUoYWgpOwogCi0Jc3Bpbl91bmxvY2tfYmgoJnNjLT5yeC5wY3VfbG9jayk7Ci0KIAlhdGg5a19od19jb25maWdwY2lwb3dlcnNhdmUoYWgsIDEsIDEpOworCisJc3Bpbl91bmxvY2tfYmgoJnNjLT5zY19wY3VfbG9jayk7CiAJYXRoOWtfcHNfcmVzdG9yZShzYyk7CisKIAlhdGg5a19zZXRwb3dlcihzYywgQVRIOUtfUE1fRlVMTF9TTEVFUCk7CiB9CiAKQEAgLTk4MywyOCArOTY5LDIzIEBACiAJLyogU3RvcCBBTkkgKi8KIAlkZWxfdGltZXJfc3luYygmY29tbW9uLT5hbmkudGltZXIpOwogCisJc3Bpbl9sb2NrX2JoKCZzYy0+c2NfcGN1X2xvY2spOworCiAJaWVlZTgwMjExX3N0b3BfcXVldWVzKGh3KTsKIAotCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKGFoLCAwKTsKKwlhdGg5a19od19kaXNhYmxlX2ludGVycnVwdHMoYWgpOwogCWF0aF9kcmFpbl9hbGxfdHhxKHNjLCByZXRyeV90eCk7CiAKLQlzcGluX2xvY2tfYmgoJnNjLT5yeC5wY3VfbG9jayk7Ci0KIAlhdGhfc3RvcHJlY3Yoc2MpOwogCWF0aF9mbHVzaHJlY3Yoc2MpOwogCi0Jc3Bpbl9sb2NrX2JoKCZzYy0+c2NfcmVzZXRsb2NrKTsKIAlyID0gYXRoOWtfaHdfcmVzZXQoYWgsIHNjLT5zY19haC0+Y3VyY2hhbiwgYWgtPmNhbGRhdGEsIGZhbHNlKTsKIAlpZiAocikKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19GQVRBTCwKLQkJCSAgIlVuYWJsZSB0byByZXNldCBoYXJkd2FyZTsgcmVzZXQgc3RhdHVzICVkXG4iLCByKTsKLQlzcGluX3VubG9ja19iaCgmc2MtPnNjX3Jlc2V0bG9jayk7CisJCWF0aF9lcnIoY29tbW9uLAorCQkJIlVuYWJsZSB0byByZXNldCBoYXJkd2FyZTsgcmVzZXQgc3RhdHVzICVkXG4iLCByKTsKIAogCWlmIChhdGhfc3RhcnRyZWN2KHNjKSAhPSAwKQotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0ZBVEFMLAotCQkJICAiVW5hYmxlIHRvIHN0YXJ0IHJlY3YgbG9naWNcbiIpOwotCi0Jc3Bpbl91bmxvY2tfYmgoJnNjLT5yeC5wY3VfbG9jayk7CisJCWF0aF9lcnIoY29tbW9uLCAiVW5hYmxlIHRvIHN0YXJ0IHJlY3YgbG9naWNcbiIpOwogCiAJLyoKIAkgKiBXZSBtYXkgYmUgZG9pbmcgYSByZXNldCBpbiByZXNwb25zZSB0byBhIHJlcXVlc3QKQEAgLTEwMzAsNiArMTAxMSw3IEBACiAJfQogCiAJaWVlZTgwMjExX3dha2VfcXVldWVzKGh3KTsKKwlzcGluX3VubG9ja19iaCgmc2MtPnNjX3BjdV9sb2NrKTsKIAogCS8qIFN0YXJ0IEFOSSAqLwogCWF0aF9zdGFydF9hbmkoY29tbW9uKTsKQEAgLTEwMzcsNTYgKzEwMTksNiBAQAogCXJldHVybiByOwogfQogCi1zdGF0aWMgaW50IGF0aF9nZXRfaGFsX3FudW0odTE2IHF1ZXVlLCBzdHJ1Y3QgYXRoX3NvZnRjICpzYykKLXsKLQlpbnQgcW51bTsKLQotCXN3aXRjaCAocXVldWUpIHsKLQljYXNlIDA6Ci0JCXFudW0gPSBzYy0+dHguaHdxX21hcFtXTUVfQUNfVk9dOwotCQlicmVhazsKLQljYXNlIDE6Ci0JCXFudW0gPSBzYy0+dHguaHdxX21hcFtXTUVfQUNfVkldOwotCQlicmVhazsKLQljYXNlIDI6Ci0JCXFudW0gPSBzYy0+dHguaHdxX21hcFtXTUVfQUNfQkVdOwotCQlicmVhazsKLQljYXNlIDM6Ci0JCXFudW0gPSBzYy0+dHguaHdxX21hcFtXTUVfQUNfQktdOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlxbnVtID0gc2MtPnR4Lmh3cV9tYXBbV01FX0FDX0JFXTsKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIHFudW07Ci19Ci0KLWludCBhdGhfZ2V0X21hYzgwMjExX3FudW0odTMyIHF1ZXVlLCBzdHJ1Y3QgYXRoX3NvZnRjICpzYykKLXsKLQlpbnQgcW51bTsKLQotCXN3aXRjaCAocXVldWUpIHsKLQljYXNlIFdNRV9BQ19WTzoKLQkJcW51bSA9IDA7Ci0JCWJyZWFrOwotCWNhc2UgV01FX0FDX1ZJOgotCQlxbnVtID0gMTsKLQkJYnJlYWs7Ci0JY2FzZSBXTUVfQUNfQkU6Ci0JCXFudW0gPSAyOwotCQlicmVhazsKLQljYXNlIFdNRV9BQ19CSzoKLQkJcW51bSA9IDM7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXFudW0gPSAtMTsKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIHFudW07Ci19Ci0KIC8qIFhYWDogUmVtb3ZlIG1lIG9uY2Ugd2UgZG9uJ3QgZGVwZW5kIG9uIGF0aDlrX2NoYW5uZWwgZm9yIGFsbAogICogdGhpcyByZWR1bmRhbnQgZGF0YSAqLwogdm9pZCBhdGg5a191cGRhdGVfaWNoYW5uZWwoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LApAQCAtMTEyNSw5ICsxMDU3LDkgQEAKIAlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqaW5pdF9jaGFubmVsOwogCWludCByOwogCi0JYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19DT05GSUcsCi0JCSAgIlN0YXJ0aW5nIGRyaXZlciB3aXRoIGluaXRpYWwgY2hhbm5lbDogJWQgTUh6XG4iLAotCQkgIGN1cmNoYW4tPmNlbnRlcl9mcmVxKTsKKwlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19DT05GSUcsCisJCSJTdGFydGluZyBkcml2ZXIgd2l0aCBpbml0aWFsIGNoYW5uZWw6ICVkIE1IelxuIiwKKwkJY3VyY2hhbi0+Y2VudGVyX2ZyZXEpOwogCiAJbXV0ZXhfbG9jaygmc2MtPm11dGV4KTsKIApAQCAtMTE2OCwxOSArMTEwMCwxNSBAQAogCSAqIGJlIGZvbGxvd2VkIGJ5IGluaXRpYWxpemF0aW9uIG9mIHRoZSBhcHByb3ByaWF0ZSBiaXRzCiAJICogYW5kIHRoZW4gc2V0dXAgb2YgdGhlIGludGVycnVwdCBtYXNrLgogCSAqLwotCXNwaW5fbG9ja19iaCgmc2MtPnJ4LnBjdV9sb2NrKTsKLQlzcGluX2xvY2tfYmgoJnNjLT5zY19yZXNldGxvY2spOworCXNwaW5fbG9ja19iaCgmc2MtPnNjX3BjdV9sb2NrKTsKIAlyID0gYXRoOWtfaHdfcmVzZXQoYWgsIGluaXRfY2hhbm5lbCwgYWgtPmNhbGRhdGEsIGZhbHNlKTsKIAlpZiAocikgewotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0ZBVEFMLAotCQkJICAiVW5hYmxlIHRvIHJlc2V0IGhhcmR3YXJlOyByZXNldCBzdGF0dXMgJWQgIgotCQkJICAiKGZyZXEgJXUgTUh6KVxuIiwgciwKLQkJCSAgY3VyY2hhbi0+Y2VudGVyX2ZyZXEpOwotCQlzcGluX3VubG9ja19iaCgmc2MtPnNjX3Jlc2V0bG9jayk7Ci0JCXNwaW5fdW5sb2NrX2JoKCZzYy0+cngucGN1X2xvY2spOworCQlhdGhfZXJyKGNvbW1vbiwKKwkJCSJVbmFibGUgdG8gcmVzZXQgaGFyZHdhcmU7IHJlc2V0IHN0YXR1cyAlZCAoZnJlcSAldSBNSHopXG4iLAorCQkJciwgY3VyY2hhbi0+Y2VudGVyX2ZyZXEpOworCQlzcGluX3VubG9ja19iaCgmc2MtPnNjX3BjdV9sb2NrKTsKIAkJZ290byBtdXRleF91bmxvY2s7CiAJfQotCXNwaW5fdW5sb2NrX2JoKCZzYy0+c2NfcmVzZXRsb2NrKTsKIAogCS8qCiAJICogVGhpcyBpcyBuZWVkZWQgb25seSB0byBzZXR1cCBpbml0aWFsIHN0YXRlCkBAIC0xMTk2LDEzICsxMTI0LDEyIEBACiAJICogaGVyZSBleGNlcHQgc2V0dXAgdGhlIGludGVycnVwdCBtYXNrLgogCSAqLwogCWlmIChhdGhfc3RhcnRyZWN2KHNjKSAhPSAwKSB7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRkFUQUwsCi0JCQkgICJVbmFibGUgdG8gc3RhcnQgcmVjdiBsb2dpY1xuIik7CisJCWF0aF9lcnIoY29tbW9uLCAiVW5hYmxlIHRvIHN0YXJ0IHJlY3YgbG9naWNcbiIpOwogCQlyID0gLUVJTzsKLQkJc3Bpbl91bmxvY2tfYmgoJnNjLT5yeC5wY3VfbG9jayk7CisJCXNwaW5fdW5sb2NrX2JoKCZzYy0+c2NfcGN1X2xvY2spOwogCQlnb3RvIG11dGV4X3VubG9jazsKIAl9Ci0Jc3Bpbl91bmxvY2tfYmgoJnNjLT5yeC5wY3VfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJnNjLT5zY19wY3VfbG9jayk7CiAKIAkvKiBTZXR1cCBvdXIgaW50ciBtYXNrLiAqLwogCWFoLT5pbWFzayA9IEFUSDlLX0lOVF9UWCB8IEFUSDlLX0lOVF9SWEVPTCB8CkBAIC0xMjQ0LDcgKzExNzEsMTQgQEAKIAkJCWF0aDlrX2J0Y29leF90aW1lcl9yZXN1bWUoc2MpOwogCX0KIAotCXBtX3Fvc191cGRhdGVfcmVxdWVzdCgmc2MtPnBtX3Fvc19yZXEsIDU1KTsKKwkvKiBVc2VyIGhhcyB0aGUgb3B0aW9uIHRvIHByb3ZpZGUgcG0tcW9zIHZhbHVlIGFzIGEgbW9kdWxlCisJICogcGFyYW1ldGVyIHJhdGhlciB0aGFuIHVzaW5nIHRoZSBkZWZhdWx0IHZhbHVlIG9mCisJICogJ0FUSDlLX1BNX1FPU19ERUZBVUxUX1ZBTFVFJy4KKwkgKi8KKwlwbV9xb3NfdXBkYXRlX3JlcXVlc3QoJnNjLT5wbV9xb3NfcmVxLCBhdGg5a19wbV9xb3NfdmFsdWUpOworCisJaWYgKGFoLT5jYXBzLnBjaWVfbGNyX2V4dHN5bmNfZW4gJiYgY29tbW9uLT5idXNfb3BzLT5leHRuX3N5bmNoX2VuKQorCQljb21tb24tPmJ1c19vcHMtPmV4dG5fc3luY2hfZW4oY29tbW9uKTsKIAogbXV0ZXhfdW5sb2NrOgogCW11dGV4X3VubG9jaygmc2MtPm11dGV4KTsKQEAgLTEyNTUsMTkgKzExODksMTYgQEAKIHN0YXRpYyBpbnQgYXRoOWtfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKIAlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CiAJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKIAlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKHNjLT5zY19haCk7CiAJc3RydWN0IGF0aF90eF9jb250cm9sIHR4Y3RsOwotCWludCBwYWRwb3MsIHBhZHNpemU7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7Ci0JaW50IHFudW07CiAKIAlpZiAoYXBoeS0+c3RhdGUgIT0gQVRIX1dJUEhZX0FDVElWRSAmJiBhcGh5LT5zdGF0ZSAhPSBBVEhfV0lQSFlfU0NBTikgewotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX1hNSVQsCi0JCQkgICJhdGg5azogJXM6IFRYIGluIHVuZXhwZWN0ZWQgd2lwaHkgc3RhdGUgIgotCQkJICAiJWRcbiIsIHdpcGh5X25hbWUoaHctPndpcGh5KSwgYXBoeS0+c3RhdGUpOworCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19YTUlULAorCQkJImF0aDlrOiAlczogVFggaW4gdW5leHBlY3RlZCB3aXBoeSBzdGF0ZSAlZFxuIiwKKwkJCXdpcGh5X25hbWUoaHctPndpcGh5KSwgYXBoeS0+c3RhdGUpOwogCQlnb3RvIGV4aXQ7CiAJfQogCkBAIC0xMjc5LDggKzEyMTAsOCBAQAogCQlpZiAoaWVlZTgwMjExX2lzX2RhdGEoaGRyLT5mcmFtZV9jb250cm9sKSAmJgogCQkgICAgIWllZWU4MDIxMV9pc19udWxsZnVuYyhoZHItPmZyYW1lX2NvbnRyb2wpICYmCiAJCSAgICAhaWVlZTgwMjExX2hhc19wbShoZHItPmZyYW1lX2NvbnRyb2wpKSB7Ci0JCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX1BTLCAiQWRkIFBNPTEgZm9yIGEgVFggZnJhbWUgIgotCQkJCSAgIndoaWxlIGluIFBTIG1vZGVcbiIpOworCQkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfUFMsCisJCQkJIkFkZCBQTT0xIGZvciBhIFRYIGZyYW1lIHdoaWxlIGluIFBTIG1vZGVcbiIpOwogCQkJaGRyLT5mcmFtZV9jb250cm9sIHw9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX1BNKTsKIAkJfQogCX0KQEAgLTEyOTUsMTIgKzEyMjYsMTIgQEAKIAkJaWYgKCEoc2MtPnNjX2FoLT5jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfQVVUT1NMRUVQKSkKIAkJCWF0aDlrX2h3X3NldHJ4YWJvcnQoc2MtPnNjX2FoLCAwKTsKIAkJaWYgKGllZWU4MDIxMV9pc19wc3BvbGwoaGRyLT5mcmFtZV9jb250cm9sKSkgewotCQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19QUywKLQkJCQkgICJTZW5kaW5nIFBTLVBvbGwgdG8gcGljayBhIGJ1ZmZlcmVkIGZyYW1lXG4iKTsKKwkJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX1BTLAorCQkJCSJTZW5kaW5nIFBTLVBvbGwgdG8gcGljayBhIGJ1ZmZlcmVkIGZyYW1lXG4iKTsKIAkJCXNjLT5wc19mbGFncyB8PSBQU19XQUlUX0ZPUl9QU1BPTExfREFUQTsKIAkJfSBlbHNlIHsKLQkJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfUFMsCi0JCQkJICAiV2FrZSB1cCB0byBjb21wbGV0ZSBUWFxuIik7CisJCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19QUywKKwkJCQkiV2FrZSB1cCB0byBjb21wbGV0ZSBUWFxuIik7CiAJCQlzYy0+cHNfZmxhZ3MgfD0gUFNfV0FJVF9GT1JfVFhfQUNLOwogCQl9CiAJCS8qCkBAIC0xMzEyLDM2ICsxMjQzLDEyIEBACiAJfQogCiAJbWVtc2V0KCZ0eGN0bCwgMCwgc2l6ZW9mKHN0cnVjdCBhdGhfdHhfY29udHJvbCkpOworCXR4Y3RsLnR4cSA9IHNjLT50eC50eHFfbWFwW3NrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpXTsKIAotCS8qCi0JICogQXMgYSB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCwgYXNzaWduIHNlcSMgaGVyZTsgdGhpcyB3aWxsIGxpa2VseSBuZWVkCi0JICogdG8gYmUgY2xlYW5lZCB1cCB0byB3b3JrIGJldHRlciB3aXRoIEJlYWNvbiB0cmFuc21pc3Npb24gYW5kIHZpcnR1YWwKLQkgKiBCU1Nlcy4KLQkgKi8KLQlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FTU0lHTl9TRVEpIHsKLQkJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9GSVJTVF9GUkFHTUVOVCkKLQkJCXNjLT50eC5zZXFfbm8gKz0gMHgxMDsKLQkJaGRyLT5zZXFfY3RybCAmPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfU0NUTF9GUkFHKTsKLQkJaGRyLT5zZXFfY3RybCB8PSBjcHVfdG9fbGUxNihzYy0+dHguc2VxX25vKTsKLQl9Ci0KLQkvKiBBZGQgdGhlIHBhZGRpbmcgYWZ0ZXIgdGhlIGhlYWRlciBpZiB0aGlzIGlzIG5vdCBhbHJlYWR5IGRvbmUgKi8KLQlwYWRwb3MgPSBhdGg5a19jbW5fcGFkcG9zKGhkci0+ZnJhbWVfY29udHJvbCk7Ci0JcGFkc2l6ZSA9IHBhZHBvcyAmIDM7Ci0JaWYgKHBhZHNpemUgJiYgc2tiLT5sZW4+cGFkcG9zKSB7Ci0JCWlmIChza2JfaGVhZHJvb20oc2tiKSA8IHBhZHNpemUpCi0JCQlyZXR1cm4gLTE7Ci0JCXNrYl9wdXNoKHNrYiwgcGFkc2l6ZSk7Ci0JCW1lbW1vdmUoc2tiLT5kYXRhLCBza2ItPmRhdGEgKyBwYWRzaXplLCBwYWRwb3MpOwotCX0KLQotCXFudW0gPSBhdGhfZ2V0X2hhbF9xbnVtKHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpLCBzYyk7Ci0JdHhjdGwudHhxID0gJnNjLT50eC50eHFbcW51bV07Ci0KLQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX1hNSVQsICJ0cmFuc21pdHRpbmcgcGFja2V0LCBza2I6ICVwXG4iLCBza2IpOworCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX1hNSVQsICJ0cmFuc21pdHRpbmcgcGFja2V0LCBza2I6ICVwXG4iLCBza2IpOwogCiAJaWYgKGF0aF90eF9zdGFydChodywgc2tiLCAmdHhjdGwpICE9IDApIHsKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19YTUlULCAiVFggZmFpbGVkXG4iKTsKKwkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfWE1JVCwgIlRYIGZhaWxlZFxuIik7CiAJCWdvdG8gZXhpdDsKIAl9CiAKQEAgLTEzODEsNyArMTI4OCw3IEBACiAJfQogCiAJaWYgKHNjLT5zY19mbGFncyAmIFNDX09QX0lOVkFMSUQpIHsKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19BTlksICJEZXZpY2Ugbm90IHByZXNlbnRcbiIpOworCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19BTlksICJEZXZpY2Ugbm90IHByZXNlbnRcbiIpOwogCQltdXRleF91bmxvY2soJnNjLT5tdXRleCk7CiAJCXJldHVybjsKIAl9CkBAIC0xNDAwLDI2ICsxMzA3LDMwIEBACiAJCQlhdGg5a19idGNvZXhfdGltZXJfcGF1c2Uoc2MpOwogCX0KIAorCXNwaW5fbG9ja19iaCgmc2MtPnNjX3BjdV9sb2NrKTsKKwogCS8qIG1ha2Ugc3VyZSBoL3cgd2lsbCBub3QgZ2VuZXJhdGUgYW55IGludGVycnVwdAogCSAqIGJlZm9yZSBzZXR0aW5nIHRoZSBpbnZhbGlkIGZsYWcuICovCi0JYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoYWgsIDApOworCWF0aDlrX2h3X2Rpc2FibGVfaW50ZXJydXB0cyhhaCk7CiAKLQlzcGluX2xvY2tfYmgoJnNjLT5yeC5wY3VfbG9jayk7CiAJaWYgKCEoc2MtPnNjX2ZsYWdzICYgU0NfT1BfSU5WQUxJRCkpIHsKIAkJYXRoX2RyYWluX2FsbF90eHEoc2MsIGZhbHNlKTsKIAkJYXRoX3N0b3ByZWN2KHNjKTsKIAkJYXRoOWtfaHdfcGh5X2Rpc2FibGUoYWgpOwogCX0gZWxzZQogCQlzYy0+cngucnhsaW5rID0gTlVMTDsKLQlzcGluX3VubG9ja19iaCgmc2MtPnJ4LnBjdV9sb2NrKTsKIAogCS8qIGRpc2FibGUgSEFMIGFuZCBwdXQgaC93IHRvIHNsZWVwICovCiAJYXRoOWtfaHdfZGlzYWJsZShhaCk7CiAJYXRoOWtfaHdfY29uZmlncGNpcG93ZXJzYXZlKGFoLCAxLCAxKTsKKworCXNwaW5fdW5sb2NrX2JoKCZzYy0+c2NfcGN1X2xvY2spOworCiAJYXRoOWtfcHNfcmVzdG9yZShzYyk7CiAKLQkvKiBGaW5hbGx5LCBwdXQgdGhlIGNoaXAgaW4gRlVMTCBTTEVFUCBtb2RlICovCi0JYXRoOWtfc2V0cG93ZXIoc2MsIEFUSDlLX1BNX0ZVTExfU0xFRVApOworCXNjLT5wc19pZGxlID0gdHJ1ZTsKKwlhdGg5a19zZXRfd2lwaHlfaWRsZShhcGh5LCB0cnVlKTsKKwlhdGhfcmFkaW9fZGlzYWJsZShzYywgaHcpOwogCiAJc2MtPnNjX2ZsYWdzIHw9IFNDX09QX0lOVkFMSUQ7CiAKQEAgLTE0MjcsNyArMTMzOCw3IEBACiAKIAltdXRleF91bmxvY2soJnNjLT5tdXRleCk7CiAKLQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0NPTkZJRywgIkRyaXZlciBoYWx0XG4iKTsKKwlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19DT05GSUcsICJEcml2ZXIgaGFsdFxuIik7CiB9CiAKIHN0YXRpYyBpbnQgYXRoOWtfYWRkX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKQEAgLTE0NjAsMTQgKzEzNzEsMTQgQEAKIAkJaWNfb3Btb2RlID0gdmlmLT50eXBlOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0ZBVEFMLAotCQkJIkludGVyZmFjZSB0eXBlICVkIG5vdCB5ZXQgc3VwcG9ydGVkXG4iLCB2aWYtPnR5cGUpOworCQlhdGhfZXJyKGNvbW1vbiwgIkludGVyZmFjZSB0eXBlICVkIG5vdCB5ZXQgc3VwcG9ydGVkXG4iLAorCQkJdmlmLT50eXBlKTsKIAkJcmV0ID0gLUVPUE5PVFNVUFA7CiAJCWdvdG8gb3V0OwogCX0KIAotCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQ09ORklHLAotCQkgICJBdHRhY2ggYSBWSUYgb2YgdHlwZTogJWRcbiIsIGljX29wbW9kZSk7CisJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ09ORklHLAorCQkiQXR0YWNoIGEgVklGIG9mIHR5cGU6ICVkXG4iLCBpY19vcG1vZGUpOwogCiAJLyogU2V0IHRoZSBWSUYgb3Btb2RlICovCiAJYXZwLT5hdl9vcG1vZGUgPSBpY19vcG1vZGU7CkBAIC0xNTEzLDE1ICsxNDI0LDgzIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIHZvaWQgYXRoOWtfcmVjbGFpbV9iZWFjb24oc3RydWN0IGF0aF9zb2Z0YyAqc2MsCisJCQkJIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCit7CisJc3RydWN0IGF0aF92aWYgKmF2cCA9ICh2b2lkICopdmlmLT5kcnZfcHJpdjsKKworCS8qIERpc2FibGUgU1dCQSBpbnRlcnJ1cHQgKi8KKwlzYy0+c2NfYWgtPmltYXNrICY9IH5BVEg5S19JTlRfU1dCQTsKKwlhdGg5a19wc193YWtldXAoc2MpOworCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKHNjLT5zY19haCwgc2MtPnNjX2FoLT5pbWFzayk7CisJYXRoOWtfaHdfc3RvcHR4ZG1hKHNjLT5zY19haCwgc2MtPmJlYWNvbi5iZWFjb25xKTsKKwl0YXNrbGV0X2tpbGwoJnNjLT5iY29uX3Rhc2tsZXQpOworCWF0aDlrX3BzX3Jlc3RvcmUoc2MpOworCisJYXRoX2JlYWNvbl9yZXR1cm4oc2MsIGF2cCk7CisJc2MtPnNjX2ZsYWdzICY9IH5TQ19PUF9CRUFDT05TOworCisJaWYgKHNjLT5uYmNudmlmcyA+IDApIHsKKwkJLyogUmUtZW5hYmxlIGJlYWNvbmluZyAqLworCQlzYy0+c2NfYWgtPmltYXNrIHw9IEFUSDlLX0lOVF9TV0JBOworCQlhdGg5a19wc193YWtldXAoc2MpOworCQlhdGg5a19od19zZXRfaW50ZXJydXB0cyhzYy0+c2NfYWgsIHNjLT5zY19haC0+aW1hc2spOworCQlhdGg5a19wc19yZXN0b3JlKHNjKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgYXRoOWtfY2hhbmdlX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkJICBlbnVtIG5sODAyMTFfaWZ0eXBlIG5ld190eXBlLAorCQkJCSAgYm9vbCBwMnApCit7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CisJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihzYy0+c2NfYWgpOworCWludCByZXQgPSAwOworCisJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ09ORklHLCAiQ2hhbmdlIEludGVyZmFjZVxuIik7CisJbXV0ZXhfbG9jaygmc2MtPm11dGV4KTsKKworCXN3aXRjaCAobmV3X3R5cGUpIHsKKwljYXNlIE5MODAyMTFfSUZUWVBFX0FQOgorCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CisJCWlmIChzYy0+bmJjbnZpZnMgPj0gQVRIX0JDQlVGKSB7CisJCQlhdGhfZXJyKGNvbW1vbiwgIk5vIGJlYWNvbiBzbG90IGF2YWlsYWJsZVxuIik7CisJCQlyZXQgPSAtRU5PQlVGUzsKKwkJCWdvdG8gb3V0OworCQl9CisJCWJyZWFrOworCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKKwkJLyogU3RvcCBBTkkgKi8KKwkJc2MtPnNjX2ZsYWdzICY9IH5TQ19PUF9BTklfUlVOOworCQlkZWxfdGltZXJfc3luYygmY29tbW9uLT5hbmkudGltZXIpOworCQlpZiAoKHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkgfHwKKwkJICAgICh2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpKQorCQkJYXRoOWtfcmVjbGFpbV9iZWFjb24oc2MsIHZpZik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWF0aF9lcnIoY29tbW9uLCAiSW50ZXJmYWNlIHR5cGUgJWQgbm90IHlldCBzdXBwb3J0ZWRcbiIsCisJCQkJdmlmLT50eXBlKTsKKwkJcmV0ID0gLUVOT1RTVVBQOworCQlnb3RvIG91dDsKKwl9CisJdmlmLT50eXBlID0gbmV3X3R5cGU7CisJdmlmLT5wMnAgPSBwMnA7CisKK291dDoKKwltdXRleF91bmxvY2soJnNjLT5tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIHZvaWQgYXRoOWtfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogewogCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKIAlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOwogCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oc2MtPnNjX2FoKTsKLQlzdHJ1Y3QgYXRoX3ZpZiAqYXZwID0gKHZvaWQgKil2aWYtPmRydl9wcml2OwogCi0JYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19DT05GSUcsICJEZXRhY2ggSW50ZXJmYWNlXG4iKTsKKwlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19DT05GSUcsICJEZXRhY2ggSW50ZXJmYWNlXG4iKTsKIAogCW11dGV4X2xvY2soJnNjLT5tdXRleCk7CiAKQEAgLTE1MzIsMjYgKzE1MTEsOCBAQAogCS8qIFJlY2xhaW0gYmVhY29uIHJlc291cmNlcyAqLwogCWlmICgoc2MtPnNjX2FoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApIHx8CiAJICAgIChzYy0+c2NfYWgtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgfHwKLQkgICAgKHNjLT5zY19haC0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpKSB7Ci0JCS8qIERpc2FibGUgU1dCQSBpbnRlcnJ1cHQgKi8KLQkJc2MtPnNjX2FoLT5pbWFzayAmPSB+QVRIOUtfSU5UX1NXQkE7Ci0JCWF0aDlrX3BzX3dha2V1cChzYyk7Ci0JCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKHNjLT5zY19haCwgc2MtPnNjX2FoLT5pbWFzayk7Ci0JCWF0aDlrX2h3X3N0b3B0eGRtYShzYy0+c2NfYWgsIHNjLT5iZWFjb24uYmVhY29ucSk7Ci0JCWF0aDlrX3BzX3Jlc3RvcmUoc2MpOwotCQl0YXNrbGV0X2tpbGwoJnNjLT5iY29uX3Rhc2tsZXQpOwotCX0KLQotCWF0aF9iZWFjb25fcmV0dXJuKHNjLCBhdnApOwotCXNjLT5zY19mbGFncyAmPSB+U0NfT1BfQkVBQ09OUzsKLQotCWlmIChzYy0+bmJjbnZpZnMpIHsKLQkJLyogUmUtZW5hYmxlIFNXQkEgaW50ZXJydXB0ICovCi0JCXNjLT5zY19haC0+aW1hc2sgfD0gQVRIOUtfSU5UX1NXQkE7Ci0JCWF0aDlrX3BzX3dha2V1cChzYyk7Ci0JCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKHNjLT5zY19haCwgc2MtPnNjX2FoLT5pbWFzayk7Ci0JCWF0aDlrX3BzX3Jlc3RvcmUoc2MpOwotCX0KKwkgICAgKHNjLT5zY19haC0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpKQorCQlhdGg5a19yZWNsYWltX2JlYWNvbihzYywgdmlmKTsKIAogCXNjLT5udmlmcy0tOwogCkBAIC0xNjMxLDggKzE1OTIsOCBAQAogCQlpZiAoZW5hYmxlX3JhZGlvKSB7CiAJCQlzYy0+cHNfaWRsZSA9IGZhbHNlOwogCQkJYXRoX3JhZGlvX2VuYWJsZShzYywgaHcpOwotCQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19DT05GSUcsCi0JCQkJICAibm90LWlkbGU6IGVuYWJsaW5nIHJhZGlvXG4iKTsKKwkJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NPTkZJRywKKwkJCQkibm90LWlkbGU6IGVuYWJsaW5nIHJhZGlvXG4iKTsKIAkJfQogCX0KIApAQCAtMTY1NCwxMiArMTYxNSwxMiBAQAogCiAJaWYgKGNoYW5nZWQgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfTU9OSVRPUikgewogCQlpZiAoY29uZi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9NT05JVE9SKSB7Ci0JCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0NPTkZJRywKLQkJCQkgICJNb25pdG9yIG1vZGUgaXMgZW5hYmxlZFxuIik7CisJCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19DT05GSUcsCisJCQkJIk1vbml0b3IgbW9kZSBpcyBlbmFibGVkXG4iKTsKIAkJCXNjLT5zY19haC0+aXNfbW9uaXRvcmluZyA9IHRydWU7CiAJCX0gZWxzZSB7Ci0JCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0NPTkZJRywKLQkJCQkgICJNb25pdG9yIG1vZGUgaXMgZGlzYWJsZWRcbiIpOworCQkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ09ORklHLAorCQkJCSJNb25pdG9yIG1vZGUgaXMgZGlzYWJsZWRcbiIpOwogCQkJc2MtPnNjX2FoLT5pc19tb25pdG9yaW5nID0gZmFsc2U7CiAJCX0KIAl9CkBAIC0xNjkxLDE0ICsxNjUyLDEyIEBACiAJCQlnb3RvIHNraXBfY2hhbl9jaGFuZ2U7CiAJCX0KIAotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0NPTkZJRywgIlNldCBjaGFubmVsOiAlZCBNSHpcbiIsCi0JCQkgIGN1cmNoYW4tPmNlbnRlcl9mcmVxKTsKKwkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ09ORklHLCAiU2V0IGNoYW5uZWw6ICVkIE1IelxuIiwKKwkJCWN1cmNoYW4tPmNlbnRlcl9mcmVxKTsKIAogCQkvKiBYWFg6IHJlbW92ZSBtZSBldmVudHVhbHkgKi8KIAkJYXRoOWtfdXBkYXRlX2ljaGFubmVsKHNjLCBodywgJnNjLT5zY19haC0+Y2hhbm5lbHNbcG9zXSk7CiAKLQkJYXRoX3VwZGF0ZV9jaGFpbm1hc2soc2MsIGNvbmZfaXNfaHQoY29uZikpOwotCiAJCS8qIHVwZGF0ZSBzdXJ2ZXkgc3RhdHMgZm9yIHRoZSBvbGQgY2hhbm5lbCBiZWZvcmUgc3dpdGNoaW5nICovCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZjb21tb24tPmNjX2xvY2ssIGZsYWdzKTsKIAkJYXRoX3VwZGF0ZV9zdXJ2ZXlfc3RhdHMoc2MpOwpAQCAtMTcyNSw4ICsxNjg0LDcgQEAKIAkJfQogCiAJCWlmIChhdGhfc2V0X2NoYW5uZWwoc2MsIGh3LCAmc2MtPnNjX2FoLT5jaGFubmVsc1twb3NdKSA8IDApIHsKLQkJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRkFUQUwsCi0JCQkJICAiVW5hYmxlIHRvIHNldCBjaGFubmVsXG4iKTsKKwkJCWF0aF9lcnIoY29tbW9uLCAiVW5hYmxlIHRvIHNldCBjaGFubmVsXG4iKTsKIAkJCW11dGV4X3VubG9jaygmc2MtPm11dGV4KTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CkBAIC0xNzUxLDcgKzE3MDksNyBAQAogCXNwaW5fdW5sb2NrX2JoKCZzYy0+d2lwaHlfbG9jayk7CiAKIAlpZiAoZGlzYWJsZV9yYWRpbykgewotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0NPTkZJRywgImlkbGU6IGRpc2FibGluZyByYWRpb1xuIik7CisJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NPTkZJRywgImlkbGU6IGRpc2FibGluZyByYWRpb1xuIik7CiAJCXNjLT5wc19pZGxlID0gdHJ1ZTsKIAkJYXRoX3JhZGlvX2Rpc2FibGUoc2MsIGh3KTsKIAl9CkBAIC0xNzkwLDggKzE3NDgsOCBAQAogCWF0aDlrX2h3X3NldHJ4ZmlsdGVyKHNjLT5zY19haCwgcmZpbHQpOwogCWF0aDlrX3BzX3Jlc3RvcmUoc2MpOwogCi0JYXRoX3ByaW50KGF0aDlrX2h3X2NvbW1vbihzYy0+c2NfYWgpLCBBVEhfREJHX0NPTkZJRywKLQkJICAiU2V0IEhXIFJYIGZpbHRlcjogMHgleFxuIiwgcmZpbHQpOworCWF0aF9kYmcoYXRoOWtfaHdfY29tbW9uKHNjLT5zY19haCksIEFUSF9EQkdfQ09ORklHLAorCQkiU2V0IEhXIFJYIGZpbHRlcjogMHgleFxuIiwgcmZpbHQpOwogfQogCiBzdGF0aWMgaW50IGF0aDlrX3N0YV9hZGQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCkBAIC0xODI0LDEyICsxNzgyLDE1IEBACiAJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OwogCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CiAJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihzYy0+c2NfYWgpOworCXN0cnVjdCBhdGhfdHhxICp0eHE7CiAJc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gcWk7Ci0JaW50IHJldCA9IDAsIHFudW07CisJaW50IHJldCA9IDA7CiAKIAlpZiAocXVldWUgPj0gV01FX05VTV9BQykKIAkJcmV0dXJuIDA7CiAKKwl0eHEgPSBzYy0+dHgudHhxX21hcFtxdWV1ZV07CisKIAltdXRleF9sb2NrKCZzYy0+bXV0ZXgpOwogCiAJbWVtc2V0KCZxaSwgMCwgc2l6ZW9mKHN0cnVjdCBhdGg5a190eF9xdWV1ZV9pbmZvKSk7CkBAIC0xODM4LDIwICsxNzk5LDE4IEBACiAJcWkudHFpX2N3bWluID0gcGFyYW1zLT5jd19taW47CiAJcWkudHFpX2N3bWF4ID0gcGFyYW1zLT5jd19tYXg7CiAJcWkudHFpX2J1cnN0VGltZSA9IHBhcmFtcy0+dHhvcDsKLQlxbnVtID0gYXRoX2dldF9oYWxfcW51bShxdWV1ZSwgc2MpOwogCi0JYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19DT05GSUcsCi0JCSAgIkNvbmZpZ3VyZSB0eCBbcXVldWUvaGFscV0gWyVkLyVkXSwgICIKLQkJICAiYWlmczogJWQsIGN3X21pbjogJWQsIGN3X21heDogJWQsIHR4b3A6ICVkXG4iLAotCQkgIHF1ZXVlLCBxbnVtLCBwYXJhbXMtPmFpZnMsIHBhcmFtcy0+Y3dfbWluLAotCQkgIHBhcmFtcy0+Y3dfbWF4LCBwYXJhbXMtPnR4b3ApOworCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NPTkZJRywKKwkJIkNvbmZpZ3VyZSB0eCBbcXVldWUvaGFscV0gWyVkLyVkXSwgYWlmczogJWQsIGN3X21pbjogJWQsIGN3X21heDogJWQsIHR4b3A6ICVkXG4iLAorCQlxdWV1ZSwgdHhxLT5heHFfcW51bSwgcGFyYW1zLT5haWZzLCBwYXJhbXMtPmN3X21pbiwKKwkJcGFyYW1zLT5jd19tYXgsIHBhcmFtcy0+dHhvcCk7CiAKLQlyZXQgPSBhdGhfdHhxX3VwZGF0ZShzYywgcW51bSwgJnFpKTsKKwlyZXQgPSBhdGhfdHhxX3VwZGF0ZShzYywgdHhxLT5heHFfcW51bSwgJnFpKTsKIAlpZiAocmV0KQotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0ZBVEFMLCAiVFhRIFVwZGF0ZSBmYWlsZWRcbiIpOworCQlhdGhfZXJyKGNvbW1vbiwgIlRYUSBVcGRhdGUgZmFpbGVkXG4iKTsKIAogCWlmIChzYy0+c2NfYWgtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKLQkJaWYgKChxbnVtID09IHNjLT50eC5od3FfbWFwW1dNRV9BQ19CRV0pICYmICFyZXQpCisJCWlmIChxdWV1ZSA9PSBXTUVfQUNfQkUgJiYgIXJldCkKIAkJCWF0aF9iZWFjb25xX2NvbmZpZyhzYyk7CiAKIAltdXRleF91bmxvY2soJnNjLT5tdXRleCk7CkBAIC0xODcwLDEyICsxODI5LDEyIEBACiAJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihzYy0+c2NfYWgpOwogCWludCByZXQgPSAwOwogCi0JaWYgKG1vZHBhcmFtX25vaHdjcnlwdCkKKwlpZiAoYXRoOWtfbW9kcGFyYW1fbm9od2NyeXB0KQogCQlyZXR1cm4gLUVOT1NQQzsKIAogCW11dGV4X2xvY2soJnNjLT5tdXRleCk7CiAJYXRoOWtfcHNfd2FrZXVwKHNjKTsKLQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0NPTkZJRywgIlNldCBIVyBLZXlcbiIpOworCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NPTkZJRywgIlNldCBIVyBLZXlcbiIpOwogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFNFVF9LRVk6CkBAIC0xOTMwLDEzICsxODg5LDggQEAKIAkJLyogU2V0IGFnZ3JlZ2F0aW9uIHByb3RlY3Rpb24gbW9kZSBwYXJhbWV0ZXJzICovCiAJCXNjLT5jb25maWcuYXRoX2FnZ3JfcHJvdCA9IDA7CiAKLQkJLyogT25seSBsZWdhY3kgSUJTUyBmb3Igbm93ICovCi0JCWlmICh2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCi0JCQlhdGhfdXBkYXRlX2NoYWlubWFzayhzYywgMCk7Ci0KLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19DT05GSUcsCi0JCQkgICJCU1NJRDogJXBNIGFpZDogMHgleFxuIiwKLQkJCSAgY29tbW9uLT5jdXJic3NpZCwgY29tbW9uLT5jdXJhaWQpOworCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19DT05GSUcsICJCU1NJRDogJXBNIGFpZDogMHgleFxuIiwKKwkJCWNvbW1vbi0+Y3VyYnNzaWQsIGNvbW1vbi0+Y3VyYWlkKTsKIAogCQkvKiBuZWVkIHRvIHJlY29uZmlndXJlIHRoZSBiZWFjb24gKi8KIAkJc2MtPnNjX2ZsYWdzICY9IH5TQ19PUF9CRUFDT05TIDsKQEAgLTE5OTIsOCArMTk0Niw4IEBACiAJfQogCiAJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9FUlBfUFJFQU1CTEUpIHsKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19DT05GSUcsICJCU1MgQ2hhbmdlZCBQUkVBTUJMRSAlZFxuIiwKLQkJCSAgYnNzX2NvbmYtPnVzZV9zaG9ydF9wcmVhbWJsZSk7CisJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NPTkZJRywgIkJTUyBDaGFuZ2VkIFBSRUFNQkxFICVkXG4iLAorCQkJYnNzX2NvbmYtPnVzZV9zaG9ydF9wcmVhbWJsZSk7CiAJCWlmIChic3NfY29uZi0+dXNlX3Nob3J0X3ByZWFtYmxlKQogCQkJc2MtPnNjX2ZsYWdzIHw9IFNDX09QX1BSRUFNQkxFX1NIT1JUOwogCQllbHNlCkBAIC0yMDAxLDggKzE5NTUsOCBAQAogCX0KIAogCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfRVJQX0NUU19QUk9UKSB7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQ09ORklHLCAiQlNTIENoYW5nZWQgQ1RTIFBST1QgJWRcbiIsCi0JCQkgIGJzc19jb25mLT51c2VfY3RzX3Byb3QpOworCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19DT05GSUcsICJCU1MgQ2hhbmdlZCBDVFMgUFJPVCAlZFxuIiwKKwkJCWJzc19jb25mLT51c2VfY3RzX3Byb3QpOwogCQlpZiAoYnNzX2NvbmYtPnVzZV9jdHNfcHJvdCAmJgogCQkgICAgaHctPmNvbmYuY2hhbm5lbC0+YmFuZCAhPSBJRUVFODAyMTFfQkFORF81R0haKQogCQkJc2MtPnNjX2ZsYWdzIHw9IFNDX09QX1BST1RFQ1RfRU5BQkxFOwpAQCAtMjAxMSw5ICsxOTY1LDkgQEAKIAl9CiAKIAlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0FTU09DKSB7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQ09ORklHLCAiQlNTIENoYW5nZWQgQVNTT0MgJWRcbiIsCisJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NPTkZJRywgIkJTUyBDaGFuZ2VkIEFTU09DICVkXG4iLAogCQkJYnNzX2NvbmYtPmFzc29jKTsKLQkJYXRoOWtfYnNzX2Fzc29jX2luZm8oc2MsIHZpZiwgYnNzX2NvbmYpOworCQlhdGg5a19ic3NfYXNzb2NfaW5mbyhzYywgaHcsIHZpZiwgYnNzX2NvbmYpOwogCX0KIAogCW11dGV4X3VubG9jaygmc2MtPm11dGV4KTsKQEAgLTIwMjYsNyArMTk4MCw5IEBACiAJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKIAogCW11dGV4X2xvY2soJnNjLT5tdXRleCk7CisJYXRoOWtfcHNfd2FrZXVwKHNjKTsKIAl0c2YgPSBhdGg5a19od19nZXR0c2Y2NChzYy0+c2NfYWgpOworCWF0aDlrX3BzX3Jlc3RvcmUoc2MpOwogCW11dGV4X3VubG9jaygmc2MtPm11dGV4KTsKIAogCXJldHVybiB0c2Y7CkBAIC0yMDM4LDcgKzE5OTQsOSBAQAogCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CiAKIAltdXRleF9sb2NrKCZzYy0+bXV0ZXgpOworCWF0aDlrX3BzX3dha2V1cChzYyk7CiAJYXRoOWtfaHdfc2V0dHNmNjQoc2MtPnNjX2FoLCB0c2YpOworCWF0aDlrX3BzX3Jlc3RvcmUoc2MpOwogCW11dGV4X3VubG9jaygmc2MtPm11dGV4KTsKIH0KIApAQCAtMjA3Niw2ICsyMDM0LDkgQEAKIAljYXNlIElFRUU4MDIxMV9BTVBEVV9SWF9TVE9QOgogCQlicmVhazsKIAljYXNlIElFRUU4MDIxMV9BTVBEVV9UWF9TVEFSVDoKKwkJaWYgKCEoc2MtPnNjX2ZsYWdzICYgU0NfT1BfVFhBR0dSKSkKKwkJCXJldHVybiAtRU9QTk9UU1VQUDsKKwogCQlhdGg5a19wc193YWtldXAoc2MpOwogCQlyZXQgPSBhdGhfdHhfYWdncl9zdGFydChzYywgc3RhLCB0aWQsIHNzbik7CiAJCWlmICghcmV0KQpAQCAtMjA5NCw4ICsyMDU1LDcgQEAKIAkJYXRoOWtfcHNfcmVzdG9yZShzYyk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWF0aF9wcmludChhdGg5a19od19jb21tb24oc2MtPnNjX2FoKSwgQVRIX0RCR19GQVRBTCwKLQkJCSAgIlVua25vd24gQU1QRFUgYWN0aW9uXG4iKTsKKwkJYXRoX2VycihhdGg5a19od19jb21tb24oc2MtPnNjX2FoKSwgIlVua25vd24gQU1QRFUgYWN0aW9uXG4iKTsKIAl9CiAKIAlsb2NhbF9iaF9lbmFibGUoKTsKQEAgLTIxOTUsNiArMjE1NSw3IEBACiAJLnN0YXJ0IAkJICAgID0gYXRoOWtfc3RhcnQsCiAJLnN0b3AgCQkgICAgPSBhdGg5a19zdG9wLAogCS5hZGRfaW50ZXJmYWNlIAkgICAgPSBhdGg5a19hZGRfaW50ZXJmYWNlLAorCS5jaGFuZ2VfaW50ZXJmYWNlICAgPSBhdGg5a19jaGFuZ2VfaW50ZXJmYWNlLAogCS5yZW1vdmVfaW50ZXJmYWNlICAgPSBhdGg5a19yZW1vdmVfaW50ZXJmYWNlLAogCS5jb25maWcgCSAgICA9IGF0aDlrX2NvbmZpZywKIAkuY29uZmlndXJlX2ZpbHRlciAgID0gYXRoOWtfY29uZmlndXJlX2ZpbHRlciwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9wY2kuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9wY2kuYwppbmRleCBiNWI2NTE0Li43OGVmMWYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcGNpLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3BjaS5jCkBAIC0xNiw2ICsxNiw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9ubDgwMjExLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvYXRoOWtfcGxhdGZvcm0uaD4KICNpbmNsdWRlICJhdGg5ay5oIgogCiBzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoYXRoX3BjaV9pZF90YWJsZSkgPSB7CkBAIC0yOSw2ICszMCw3IEBACiAJeyBQQ0lfVkRFVklDRShBVEhFUk9TLCAweDAwMkQpIH0sIC8qIFBDSSAgICovCiAJeyBQQ0lfVkRFVklDRShBVEhFUk9TLCAweDAwMkUpIH0sIC8qIFBDSS1FICovCiAJeyBQQ0lfVkRFVklDRShBVEhFUk9TLCAweDAwMzApIH0sIC8qIFBDSS1FICBBUjkzMDAgKi8KKwl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDAzMikgfSwgLyogUENJLUUgIEFSOTQ4NSAqLwogCXsgMCB9CiB9OwogCkBAIC01MywyMSArNTUsMzUgQEAKIAogc3RhdGljIGJvb2wgYXRoX3BjaV9lZXByb21fcmVhZChzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uLCB1MzIgb2ZmLCB1MTYgKmRhdGEpCiB7Ci0Jc3RydWN0IGF0aF9odyAqYWggPSAoc3RydWN0IGF0aF9odyAqKSBjb21tb24tPmFoOworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gKHN0cnVjdCBhdGhfc29mdGMgKikgY29tbW9uLT5wcml2OworCXN0cnVjdCBhdGg5a19wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHNjLT5kZXYtPnBsYXRmb3JtX2RhdGE7CiAKLQljb21tb24tPm9wcy0+cmVhZChhaCwgQVI1NDE2X0VFUFJPTV9PRkZTRVQgKyAob2ZmIDw8IEFSNTQxNl9FRVBST01fUykpOworCWlmIChwZGF0YSkgeworCQlpZiAob2ZmID49IChBUlJBWV9TSVpFKHBkYXRhLT5lZXByb21fZGF0YSkpKSB7CisJCQlhdGhfZXJyKGNvbW1vbiwKKwkJCQkiJXM6IGVlcHJvbSByZWFkIGZhaWxlZCwgb2Zmc2V0ICUwOHggaXMgb3V0IG9mIHJhbmdlXG4iLAorCQkJCV9fZnVuY19fLCBvZmYpOworCQl9CiAKLQlpZiAoIWF0aDlrX2h3X3dhaXQoYWgsCi0JCQkgICBBUl9FRVBST01fU1RBVFVTX0RBVEEsCi0JCQkgICBBUl9FRVBST01fU1RBVFVTX0RBVEFfQlVTWSB8Ci0JCQkgICBBUl9FRVBST01fU1RBVFVTX0RBVEFfUFJPVF9BQ0NFU1MsIDAsCi0JCQkgICBBSF9XQUlUX1RJTUVPVVQpKSB7Ci0JCXJldHVybiBmYWxzZTsKKwkJKmRhdGEgPSBwZGF0YS0+ZWVwcm9tX2RhdGFbb2ZmXTsKKwl9IGVsc2UgeworCQlzdHJ1Y3QgYXRoX2h3ICphaCA9IChzdHJ1Y3QgYXRoX2h3ICopIGNvbW1vbi0+YWg7CisKKwkJY29tbW9uLT5vcHMtPnJlYWQoYWgsIEFSNTQxNl9FRVBST01fT0ZGU0VUICsKKwkJCQkgICAgICAob2ZmIDw8IEFSNTQxNl9FRVBST01fUykpOworCisJCWlmICghYXRoOWtfaHdfd2FpdChhaCwKKwkJCQkgICBBUl9FRVBST01fU1RBVFVTX0RBVEEsCisJCQkJICAgQVJfRUVQUk9NX1NUQVRVU19EQVRBX0JVU1kgfAorCQkJCSAgIEFSX0VFUFJPTV9TVEFUVVNfREFUQV9QUk9UX0FDQ0VTUywgMCwKKwkJCQkgICBBSF9XQUlUX1RJTUVPVVQpKSB7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKworCQkqZGF0YSA9IE1TKGNvbW1vbi0+b3BzLT5yZWFkKGFoLCBBUl9FRVBST01fU1RBVFVTX0RBVEEpLAorCQkJICAgQVJfRUVQUk9NX1NUQVRVU19EQVRBX1ZBTCk7CiAJfQogCi0JKmRhdGEgPSBNUyhjb21tb24tPm9wcy0+cmVhZChhaCwgQVJfRUVQUk9NX1NUQVRVU19EQVRBKSwKLQkJICAgQVJfRUVQUk9NX1NUQVRVU19EQVRBX1ZBTCk7Ci0KIAlyZXR1cm4gdHJ1ZTsKIH0KIApAQCAtODAsNyArOTYsNyBAQAogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihzYy0+ZGV2KTsKIAl1OCBhc3BtOwogCi0JaWYgKCFwZGV2LT5pc19wY2llKQorCWlmICghcGNpX2lzX3BjaWUocGRldikpCiAJCXJldHVybjsKIAogCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIEFUSF9QQ0lFX0NBUF9MSU5LX0NUUkwsICZhc3BtKTsKQEAgLTg4LDExICsxMDQsMjMgQEAKIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgQVRIX1BDSUVfQ0FQX0xJTktfQ1RSTCwgYXNwbSk7CiB9CiAKK3N0YXRpYyB2b2lkIGF0aF9wY2lfZXh0bl9zeW5jaF9lbmFibGUoc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbikKK3sKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IChzdHJ1Y3QgYXRoX3NvZnRjICopIGNvbW1vbi0+cHJpdjsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoc2MtPmRldik7CisJdTggbG5rY3RsOworCisJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgc2MtPnNjX2FoLT5jYXBzLnBjaWVfbGNyX29mZnNldCwgJmxua2N0bCk7CisJbG5rY3RsIHw9IFBDSV9FWFBfTE5LQ1RMX0VTOworCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBzYy0+c2NfYWgtPmNhcHMucGNpZV9sY3Jfb2Zmc2V0LCBsbmtjdGwpOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0aF9idXNfb3BzIGF0aF9wY2lfYnVzX29wcyA9IHsKIAkuYXRoX2J1c190eXBlID0gQVRIX1BDSSwKIAkucmVhZF9jYWNoZXNpemUgPSBhdGhfcGNpX3JlYWRfY2FjaGVzaXplLAogCS5lZXByb21fcmVhZCA9IGF0aF9wY2lfZWVwcm9tX3JlYWQsCiAJLmJ0X2NvZXhfcHJlcCA9IGF0aF9wY2lfYnRfY29leF9wcmVwLAorCS5leHRuX3N5bmNoX2VuID0gYXRoX3BjaV9leHRuX3N5bmNoX2VuYWJsZSwKIH07CiAKIHN0YXRpYyBpbnQgYXRoX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQpAQCAtMjM2LDYgKzI2NCw4IEBACiAJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKIAl2b2lkIF9faW9tZW0gKm1lbSA9IHNjLT5tZW07CiAKKwlpZiAoIWlzX2F0aDlrX3VubG9hZGVkKQorCQlzYy0+c2NfYWgtPmFoX2ZsYWdzIHw9IEFIX1VOUExVR0dFRDsKIAlhdGg5a19kZWluaXRfZGV2aWNlKHNjKTsKIAlmcmVlX2lycShzYy0+aXJxLCBzYyk7CiAJaWVlZTgwMjExX2ZyZWVfaHcoc2MtPmh3KTsKQEAgLTI0NywzNCArMjc3LDI1IEBACiAKICNpZmRlZiBDT05GSUdfUE0KIAotc3RhdGljIGludCBhdGhfcGNpX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgYXRoX3BjaV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKIHsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZGV2aWNlKTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CiAJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKIAogCWF0aDlrX2h3X3NldF9ncGlvKHNjLT5zY19haCwgc2MtPnNjX2FoLT5sZWRfcGluLCAxKTsKIAotCXBjaV9zYXZlX3N0YXRlKHBkZXYpOwotCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKLQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EM2hvdCk7Ci0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBhdGhfcGNpX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3N0YXRpYyBpbnQgYXRoX3BjaV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2aWNlKQogeworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXZpY2UpOwogCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKIAlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOwogCXUzMiB2YWw7Ci0JaW50IGVycjsKLQotCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOwotCi0JZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKIAogCS8qCiAJICogU3VzcGVuZC9SZXN1bWUgcmVzZXRzIHRoZSBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSwgc28gd2UgaGF2ZSB0bwpAQCAtMjkwLDEwICszMTEsMzggQEAKIAkJCSAgICBBUl9HUElPX09VVFBVVF9NVVhfQVNfT1VUUFVUKTsKIAlhdGg5a19od19zZXRfZ3BpbyhzYy0+c2NfYWgsIHNjLT5zY19haC0+bGVkX3BpbiwgMSk7CiAKKwkgIC8qCisJICAgKiBSZXNldCBrZXkgY2FjaGUgdG8gc2FuZSBkZWZhdWx0cyAoYWxsIGVudHJpZXMgY2xlYXJlZCkgaW5zdGVhZCBvZgorCSAgICogc2VtaS1yYW5kb20gdmFsdWVzIGFmdGVyIHN1c3BlbmQvcmVzdW1lLgorCSAgICovCisJYXRoOWtfcHNfd2FrZXVwKHNjKTsKKwlhdGg5a19pbml0X2NyeXB0byhzYyk7CisJYXRoOWtfcHNfcmVzdG9yZShzYyk7CisKKwlzYy0+cHNfaWRsZSA9IHRydWU7CisJYXRoOWtfc2V0X3dpcGh5X2lkbGUoYXBoeSwgdHJ1ZSk7CisJYXRoX3JhZGlvX2Rpc2FibGUoc2MsIGh3KTsKKwogCXJldHVybiAwOwogfQogCi0jZW5kaWYgLyogQ09ORklHX1BNICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgYXRoOWtfcG1fb3BzID0geworCS5zdXNwZW5kID0gYXRoX3BjaV9zdXNwZW5kLAorCS5yZXN1bWUgPSBhdGhfcGNpX3Jlc3VtZSwKKwkuZnJlZXplID0gYXRoX3BjaV9zdXNwZW5kLAorCS50aGF3ID0gYXRoX3BjaV9yZXN1bWUsCisJLnBvd2Vyb2ZmID0gYXRoX3BjaV9zdXNwZW5kLAorCS5yZXN0b3JlID0gYXRoX3BjaV9yZXN1bWUsCit9OworCisjZGVmaW5lIEFUSDlLX1BNX09QUwkoJmF0aDlrX3BtX29wcykKKworI2Vsc2UgLyogIUNPTkZJR19QTSAqLworCisjZGVmaW5lIEFUSDlLX1BNX09QUwlOVUxMCisKKyNlbmRpZiAvKiAhQ09ORklHX1BNICovCisKIAogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGF0aF9wY2lfaWRfdGFibGUpOwogCkBAIC0zMDIsMTAgKzM1MSw3IEBACiAJLmlkX3RhYmxlICAgPSBhdGhfcGNpX2lkX3RhYmxlLAogCS5wcm9iZSAgICAgID0gYXRoX3BjaV9wcm9iZSwKIAkucmVtb3ZlICAgICA9IGF0aF9wY2lfcmVtb3ZlLAotI2lmZGVmIENPTkZJR19QTQotCS5zdXNwZW5kICAgID0gYXRoX3BjaV9zdXNwZW5kLAotCS5yZXN1bWUgICAgID0gYXRoX3BjaV9yZXN1bWUsCi0jZW5kaWYgLyogQ09ORklHX1BNICovCisJLmRyaXZlci5wbSAgPSBBVEg5S19QTV9PUFMsCiB9OwogCiBpbnQgYXRoX3BjaV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcGh5LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcGh5LmgKaW5kZXggMTc5NjlhZi4uNWUzZDc0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3BoeS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9waHkuaApAQCAtMTksNiArMTksNyBAQAogCiAjZGVmaW5lIENIQU5TRUxfRElWCQkxNQogI2RlZmluZSBDSEFOU0VMXzJHKF9mcmVxKQkoKChfZnJlcSkgKiAweDEwMDAwKSAvIENIQU5TRUxfRElWKQorI2RlZmluZSBDSEFOU0VMXzJHXzk0ODUoX2ZyZXEpCSgoKChfZnJlcSkgKiAweDEwMDAwKSAtIDIxNSkgLyBDSEFOU0VMX0RJVikKICNkZWZpbmUgQ0hBTlNFTF81RyhfZnJlcSkJKCgoX2ZyZXEpICogMHg4MDAwKSAvIENIQU5TRUxfRElWKQogCiAjZGVmaW5lIEFSX1BIWV9CQVNFICAgICAweDk4MDAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JjLmMKaW5kZXggODk5NzhkNy4uZTQ1MTQ3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JjLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JjLmMKQEAgLTM4MSwyNSArMzgxLDYgQEAKIHN0YXRpYyBpbnQgYXRoX3JjX2dldF9yYXRlaW5kZXgoY29uc3Qgc3RydWN0IGF0aF9yYXRlX3RhYmxlICpyYXRlX3RhYmxlLAogCQkJCXN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZSAqcmF0ZSk7CiAKLXN0YXRpYyBpbmxpbmUgaW50OF90IG1lZGlhbihpbnQ4X3QgYSwgaW50OF90IGIsIGludDhfdCBjKQotewotCWlmIChhID49IGIpIHsKLQkJaWYgKGIgPj0gYykKLQkJCXJldHVybiBiOwotCQllbHNlIGlmIChhID4gYykKLQkJCXJldHVybiBjOwotCQllbHNlCi0JCQlyZXR1cm4gYTsKLQl9IGVsc2UgewotCQlpZiAoYSA+PSBjKQotCQkJcmV0dXJuIGE7Ci0JCWVsc2UgaWYgKGIgPj0gYykKLQkJCXJldHVybiBjOwotCQllbHNlCi0JCQlyZXR1cm4gYjsKLQl9Ci19Ci0KIHN0YXRpYyB2b2lkIGF0aF9yY19zb3J0X3ZhbGlkcmF0ZXMoY29uc3Qgc3RydWN0IGF0aF9yYXRlX3RhYmxlICpyYXRlX3RhYmxlLAogCQkJCSAgIHN0cnVjdCBhdGhfcmF0ZV9wcml2ICphdGhfcmNfcHJpdikKIHsKQEAgLTQxOSw3ICs0MDAsNyBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgYXRoX3JjX2luaXRfdmFsaWRfdHhtYXNrKHN0cnVjdCBhdGhfcmF0ZV9wcml2ICphdGhfcmNfcHJpdikKK3N0YXRpYyB2b2lkIGF0aF9yY19pbml0X3ZhbGlkX3JhdGVfaWR4KHN0cnVjdCBhdGhfcmF0ZV9wcml2ICphdGhfcmNfcHJpdikKIHsKIAl1OCBpOwogCkBAIC00MjcsNyArNDA4LDcgQEAKIAkJYXRoX3JjX3ByaXYtPnZhbGlkX3JhdGVfaW5kZXhbaV0gPSAwOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRoX3JjX3NldF92YWxpZF90eG1hc2soc3RydWN0IGF0aF9yYXRlX3ByaXYgKmF0aF9yY19wcml2LAorc3RhdGljIGlubGluZSB2b2lkIGF0aF9yY19zZXRfdmFsaWRfcmF0ZV9pZHgoc3RydWN0IGF0aF9yYXRlX3ByaXYgKmF0aF9yY19wcml2LAogCQkJCQkgICB1OCBpbmRleCwgaW50IHZhbGlkX3R4X3JhdGUpCiB7CiAJQlVHX09OKGluZGV4ID4gYXRoX3JjX3ByaXYtPnJhdGVfdGFibGVfc2l6ZSk7CkBAIC01MDgsNyArNDg5LDcgQEAKIAogCQkJYXRoX3JjX3ByaXYtPnZhbGlkX3BoeV9yYXRlaWR4W3BoeV1bdmFsaWRfcmF0ZV9jb3VudF0gPSBpOwogCQkJYXRoX3JjX3ByaXYtPnZhbGlkX3BoeV9yYXRlY250W3BoeV0gKz0gMTsKLQkJCWF0aF9yY19zZXRfdmFsaWRfdHhtYXNrKGF0aF9yY19wcml2LCBpLCAxKTsKKwkJCWF0aF9yY19zZXRfdmFsaWRfcmF0ZV9pZHgoYXRoX3JjX3ByaXYsIGksIDEpOwogCQkJaGkgPSBpOwogCQl9CiAJfQpAQCAtNTUxLDcgKzUzMiw3IEBACiAJCQkJYXRoX3JjX3ByaXYtPnZhbGlkX3BoeV9yYXRlaWR4W3BoeV0KIAkJCQkJW3ZhbGlkX3JhdGVfY291bnRdID0gajsKIAkJCQlhdGhfcmNfcHJpdi0+dmFsaWRfcGh5X3JhdGVjbnRbcGh5XSArPSAxOwotCQkJCWF0aF9yY19zZXRfdmFsaWRfdHhtYXNrKGF0aF9yY19wcml2LCBqLCAxKTsKKwkJCQlhdGhfcmNfc2V0X3ZhbGlkX3JhdGVfaWR4KGF0aF9yY19wcml2LCBqLCAxKTsKIAkJCQloaSA9IEFfTUFYKGhpLCBqKTsKIAkJCX0KIAkJfQpAQCAtNTg3LDcgKzU2OCw3IEBACiAJCQlhdGhfcmNfcHJpdi0+dmFsaWRfcGh5X3JhdGVpZHhbcGh5XQogCQkJCVthdGhfcmNfcHJpdi0+dmFsaWRfcGh5X3JhdGVjbnRbcGh5XV0gPSBqOwogCQkJYXRoX3JjX3ByaXYtPnZhbGlkX3BoeV9yYXRlY250W3BoeV0gKz0gMTsKLQkJCWF0aF9yY19zZXRfdmFsaWRfdHhtYXNrKGF0aF9yY19wcml2LCBqLCAxKTsKKwkJCWF0aF9yY19zZXRfdmFsaWRfcmF0ZV9pZHgoYXRoX3JjX3ByaXYsIGosIDEpOwogCQkJaGkgPSBBX01BWChoaSwgaik7CiAJCX0KIAl9CkBAIC04ODMsNyArODY0LDcgQEAKIAlib29sIHN0YXRlX2NoYW5nZSA9IGZhbHNlOwogCWludCBjb3VudCwgbl9iYWRfZnJhbWVzOwogCXU4IGxhc3RfcGVyOwotCXN0YXRpYyB1MzIgbnJldHJ5X3RvX3Blcl9sb29rdXBbMTBdID0geworCXN0YXRpYyBjb25zdCB1MzIgbnJldHJ5X3RvX3Blcl9sb29rdXBbMTBdID0gewogCQkxMDAgKiAwIC8gMSwKIAkJMTAwICogMSAvIDQsCiAJCTEwMCAqIDEgLyAyLApAQCAtMTEwNiwxMyArMTA4NywxMyBAQAogCQkJCXN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZSAqcmF0ZSkKIHsKIAlpbnQgcml4ID0gMCwgaSA9IDA7Ci0JaW50IG1jc19yaXhfb2ZmW10gPSB7IDcsIDE1LCAyMCwgMjEsIDIyLCAyMyB9OworCXN0YXRpYyBjb25zdCBpbnQgbWNzX3JpeF9vZmZbXSA9IHsgNywgMTUsIDIwLCAyMSwgMjIsIDIzIH07CiAKIAlpZiAoIShyYXRlLT5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19NQ1MpKQogCQlyZXR1cm4gcmF0ZS0+aWR4OwogCiAJd2hpbGUgKHJhdGUtPmlkeCA+IG1jc19yaXhfb2ZmW2ldICYmCi0JICAgICAgaSA8IHNpemVvZihtY3Nfcml4X29mZikvc2l6ZW9mKGludCkpIHsKKwkgICAgICAgaSA8IEFSUkFZX1NJWkUobWNzX3JpeF9vZmYpKSB7CiAJCXJpeCsrOyBpKys7CiAJfQogCkBAIC0xMjAzLDcgKzExODQsNyBAQAogCQkJcmV0dXJuICZhcjU0MTZfMTFuYV9yYXRldGFibGU7CiAJCXJldHVybiAmYXI1NDE2XzExYV9yYXRldGFibGU7CiAJZGVmYXVsdDoKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19DT05GSUcsICJJbnZhbGlkIGJhbmRcbiIpOworCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19DT05GSUcsICJJbnZhbGlkIGJhbmRcbiIpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiB9CkBAIC0xMjI5LDcgKzEyMTAsNyBAQAogCX0KIAogCS8qIERldGVybWluZSB0aGUgdmFsaWQgcmF0ZXMgKi8KLQlhdGhfcmNfaW5pdF92YWxpZF90eG1hc2soYXRoX3JjX3ByaXYpOworCWF0aF9yY19pbml0X3ZhbGlkX3JhdGVfaWR4KGF0aF9yY19wcml2KTsKIAogCWZvciAoaSA9IDA7IGkgPCBXTEFOX1JDX1BIWV9NQVg7IGkrKykgewogCQlmb3IgKGogPSAwOyBqIDwgTUFYX1RYX1JBVEVfUEhZOyBqKyspCkBAIC0xMjc4LDkgKzEyNTksOSBAQAogCWF0aF9yY19wcml2LT5yYXRlX21heF9waHkgPSBhdGhfcmNfcHJpdi0+dmFsaWRfcmF0ZV9pbmRleFtrLTRdOwogCWF0aF9yY19wcml2LT5yYXRlX3RhYmxlID0gcmF0ZV90YWJsZTsKIAotCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQ09ORklHLAotCQkgICJSQyBJbml0aWFsaXplZCB3aXRoIGNhcGFiaWxpdGllczogMHgleFxuIiwKLQkJICBhdGhfcmNfcHJpdi0+aHRfY2FwKTsKKwlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19DT05GSUcsCisJCSJSQyBJbml0aWFsaXplZCB3aXRoIGNhcGFiaWxpdGllczogMHgleFxuIiwKKwkJYXRoX3JjX3ByaXYtPmh0X2NhcCk7CiB9CiAKIHN0YXRpYyB1OCBhdGhfcmNfYnVpbGRfaHRfY2FwcyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKQEAgLTEzNDAsNyArMTMyMSw3IEBACiAJc3RydWN0IGF0aF9yYXRlX3ByaXYgKmF0aF9yY19wcml2ID0gcHJpdl9zdGE7CiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7Ci0JaW50IGZpbmFsX3RzX2lkeCA9IDAsIHR4X3N0YXR1cyA9IDAsIGlzX3VuZGVycnVuID0gMDsKKwlpbnQgZmluYWxfdHNfaWR4ID0gMCwgdHhfc3RhdHVzID0gMDsKIAlpbnQgbG9uZ19yZXRyeSA9IDA7CiAJX19sZTE2IGZjOwogCWludCBpOwpAQCAtMTM3MywzMiArMTM1NCwxNyBAQAogCQl0eF9pbmZvLT5zdGF0dXMuYW1wZHVfbGVuID0gMTsKIAl9CiAKLQkvKgotCSAqIElmIGFuIHVuZGVycnVuIGVycm9yIGlzIHNlZW4gYXNzdW1lIGl0IGFzIGFuIGV4Y2Vzc2l2ZSByZXRyeSBvbmx5Ci0JICogaWYgbWF4IGZyYW1lIHRyaWdnZXIgbGV2ZWwgaGFzIGJlZW4gcmVhY2hlZCAoMiBLQiBmb3Igc2luZ2VsIHN0cmVhbSwKLQkgKiBhbmQgNCBLQiBmb3IgZHVhbCBzdHJlYW0pLiBBZGp1c3QgdGhlIGxvbmcgcmV0cnkgYXMgaWYgdGhlIGZyYW1lIHdhcwotCSAqIHRyaWVkIGh3LT5tYXhfcmF0ZV90cmllcyB0aW1lcyB0byBhZmZlY3QgaG93IHJhdGVjdHJsIHVwZGF0ZXMgUEVSIGZvcgotCSAqIHRoZSBmYWlsZWQgcmF0ZS4gSW4gY2FzZSBvZiBjb25nZXN0aW9uIG9uIHRoZSBidXMgcGVuYWxpemluZyB0aGVzZQotCSAqIHR5cGUgb2YgdW5kZXJydW5zIHNob3VsZCBoZWxwIGhhcmR3YXJlIGFjdHVhbGx5IHRyYW5zbWl0IG5ldyBmcmFtZXMKLQkgKiBzdWNjZXNzZnVsbHkgYnkgZXZlbnR1YWxseSBwcmVmZXJyaW5nIHNsb3dlciByYXRlcy4gVGhpcyBpdHNlbGYKLQkgKiBzaG91bGQgYWxzbyBhbGxldmlhdGUgY29uZ2VzdGlvbiBvbiB0aGUgYnVzLgotCSAqLwotCWlmICgodHhfaW5mby0+cGFkWzBdICYgQVRIX1RYX0lORk9fVU5ERVJSVU4pICYmCi0JICAgIChzYy0+c2NfYWgtPnR4X3RyaWdfbGV2ZWwgPj0gYXRoX3JjX3ByaXYtPnR4X3RyaWdsZXZlbF9tYXgpKSB7Ci0JCXR4X3N0YXR1cyA9IDE7Ci0JCWlzX3VuZGVycnVuID0gMTsKLQl9Ci0KLQlpZiAodHhfaW5mby0+cGFkWzBdICYgQVRIX1RYX0lORk9fWFJFVFJZKQorCWlmICghKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX1NUQVRfQUNLKSkKIAkJdHhfc3RhdHVzID0gMTsKIAogCWF0aF9yY190eF9zdGF0dXMoc2MsIGF0aF9yY19wcml2LCB0eF9pbmZvLCBmaW5hbF90c19pZHgsIHR4X3N0YXR1cywKLQkJCSAoaXNfdW5kZXJydW4pID8gc2MtPmh3LT5tYXhfcmF0ZV90cmllcyA6IGxvbmdfcmV0cnkpOworCQkJIGxvbmdfcmV0cnkpOwogCiAJLyogQ2hlY2sgaWYgYWdncmVnYXRpb24gaGFzIHRvIGJlIGVuYWJsZWQgZm9yIHRoaXMgdGlkICovCiAJaWYgKGNvbmZfaXNfaHQoJnNjLT5ody0+Y29uZikgJiYKIAkgICAgIShza2ItPnByb3RvY29sID09IGNwdV90b19iZTE2KEVUSF9QX1BBRSkpKSB7Ci0JCWlmIChpZWVlODAyMTFfaXNfZGF0YV9xb3MoZmMpKSB7CisJCWlmIChpZWVlODAyMTFfaXNfZGF0YV9xb3MoZmMpICYmCisJCSAgICBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKSAhPSBJRUVFODAyMTFfQUNfVk8pIHsKIAkJCXU4ICpxYywgdGlkOwogCQkJc3RydWN0IGF0aF9ub2RlICphbjsKIApAQCAtMTQwNyw3ICsxMzczLDcgQEAKIAkJCWFuID0gKHN0cnVjdCBhdGhfbm9kZSAqKXN0YS0+ZHJ2X3ByaXY7CiAKIAkJCWlmKGF0aF90eF9hZ2dyX2NoZWNrKHNjLCBhbiwgdGlkKSkKLQkJCQlpZWVlODAyMTFfc3RhcnRfdHhfYmFfc2Vzc2lvbihzdGEsIHRpZCk7CisJCQkJaWVlZTgwMjExX3N0YXJ0X3R4X2JhX3Nlc3Npb24oc3RhLCB0aWQsIDApOwogCQl9CiAJfQogCkBAIC0xNDQ0LDEyICsxNDEwLDEyIEBACiAJCWF0aF9yY19wcml2LT5uZWdfaHRfcmF0ZXMucnNfbnJhdGVzID0gajsKIAl9CiAKLQlpc19jdzQwID0gc3RhLT5odF9jYXAuY2FwICYgSUVFRTgwMjExX0hUX0NBUF9TVVBfV0lEVEhfMjBfNDA7CisJaXNfY3c0MCA9ICEhKHN0YS0+aHRfY2FwLmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfU1VQX1dJRFRIXzIwXzQwKTsKIAogCWlmIChpc19jdzQwKQotCQlpc19zZ2kgPSBzdGEtPmh0X2NhcC5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX1NHSV80MDsKKwkJaXNfc2dpID0gISEoc3RhLT5odF9jYXAuY2FwICYgSUVFRTgwMjExX0hUX0NBUF9TR0lfNDApOwogCWVsc2UgaWYgKHNjLT5zY19haC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX1NHSV8yMCkKLQkJaXNfc2dpID0gc3RhLT5odF9jYXAuY2FwICYgSUVFRTgwMjExX0hUX0NBUF9TR0lfMjA7CisJCWlzX3NnaSA9ICEhKHN0YS0+aHRfY2FwLmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfU0dJXzIwKTsKIAogCS8qIENob29zZSByYXRlIHRhYmxlIGZpcnN0ICovCiAKQEAgLTE0NjgsMTAgKzE0MzQsOCBAQAogCXN0cnVjdCBhdGhfcmF0ZV9wcml2ICphdGhfcmNfcHJpdiA9IHByaXZfc3RhOwogCWNvbnN0IHN0cnVjdCBhdGhfcmF0ZV90YWJsZSAqcmF0ZV90YWJsZSA9IE5VTEw7CiAJYm9vbCBvcGVyX2N3NDAgPSBmYWxzZSwgb3Blcl9zZ2k7Ci0JYm9vbCBsb2NhbF9jdzQwID0gKGF0aF9yY19wcml2LT5odF9jYXAgJiBXTEFOX1JDXzQwX0ZMQUcpID8KLQkJdHJ1ZSA6IGZhbHNlOwotCWJvb2wgbG9jYWxfc2dpID0gKGF0aF9yY19wcml2LT5odF9jYXAgJiBXTEFOX1JDX1NHSV9GTEFHKSA/Ci0JCXRydWUgOiBmYWxzZTsKKwlib29sIGxvY2FsX2N3NDAgPSAhIShhdGhfcmNfcHJpdi0+aHRfY2FwICYgV0xBTl9SQ180MF9GTEFHKTsKKwlib29sIGxvY2FsX3NnaSA9ICEhKGF0aF9yY19wcml2LT5odF9jYXAgJiBXTEFOX1JDX1NHSV9GTEFHKTsKIAogCS8qIEZJWE1FOiBIYW5kbGUgQVAgbW9kZSBsYXRlciB3aGVuIHdlIHN1cHBvcnQgQ1dNICovCiAKQEAgLTE0OTksOSArMTQ2Myw5IEBACiAJCQkJCQkgICBvcGVyX2N3NDAsIG9wZXJfc2dpKTsKIAkJCWF0aF9yY19pbml0KHNjLCBwcml2X3N0YSwgc2JhbmQsIHN0YSwgcmF0ZV90YWJsZSk7CiAKLQkJCWF0aF9wcmludChhdGg5a19od19jb21tb24oc2MtPnNjX2FoKSwgQVRIX0RCR19DT05GSUcsCi0JCQkJICAiT3BlcmF0aW5nIEhUIEJhbmR3aWR0aCBjaGFuZ2VkIHRvOiAlZFxuIiwKLQkJCQkgIHNjLT5ody0+Y29uZi5jaGFubmVsX3R5cGUpOworCQkJYXRoX2RiZyhhdGg5a19od19jb21tb24oc2MtPnNjX2FoKSwgQVRIX0RCR19DT05GSUcsCisJCQkJIk9wZXJhdGluZyBIVCBCYW5kd2lkdGggY2hhbmdlZCB0bzogJWRcbiIsCisJCQkJc2MtPmh3LT5jb25mLmNoYW5uZWxfdHlwZSk7CiAJCX0KIAl9CiB9CkBAIC0xNjEyLDEzICsxNTc2LDExIEBACiAKIAlyYXRlX3ByaXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYXRoX3JhdGVfcHJpdiksIGdmcCk7CiAJaWYgKCFyYXRlX3ByaXYpIHsKLQkJYXRoX3ByaW50KGF0aDlrX2h3X2NvbW1vbihzYy0+c2NfYWgpLCBBVEhfREJHX0ZBVEFMLAotCQkJICAiVW5hYmxlIHRvIGFsbG9jYXRlIHByaXZhdGUgcmMgc3RydWN0dXJlXG4iKTsKKwkJYXRoX2VycihhdGg5a19od19jb21tb24oc2MtPnNjX2FoKSwKKwkJCSJVbmFibGUgdG8gYWxsb2NhdGUgcHJpdmF0ZSByYyBzdHJ1Y3R1cmVcbiIpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQlyYXRlX3ByaXYtPnR4X3RyaWdsZXZlbF9tYXggPSBzYy0+c2NfYWgtPmNhcHMudHhfdHJpZ2xldmVsX21heDsKLQogCXJldHVybiByYXRlX3ByaXY7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yYy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JjLmgKaW5kZXggMmY0NmEyMi4uNWQ5ODRiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JjLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JjLmgKQEAgLTE5NSw3ICsxOTUsNiBAQAogICogQHJhdGVfbWF4X3BoeTogcGh5IGluZGV4IGZvciB0aGUgbWF4IHJhdGUKICAqIEBwZXI6IFBFUiBmb3IgZXZlcnkgdmFsaWQgcmF0ZSBpbiAlCiAgKiBAcHJvYmVfaW50ZXJ2YWw6IGludGVydmFsIGZvciByYXRlY3RybCB0byBwcm9iZSBmb3Igb3RoZXIgcmF0ZXMKLSAqIEBwcmV2X2RhdGFfcml4OiByYXRlIGlkeCBvZiBsYXN0IGRhdGEgZnJhbWUKICAqIEBodF9jYXA6IEhUIGNhcGFiaWxpdGllcwogICogQG5lZ19yYXRlczogTmVnb3RhdGllZCByYXRlcwogICogQG5lZ19odF9yYXRlczogTmVnb3RpYXRlZCBIVCByYXRlcwpAQCAtMjE0LDIyICsyMTMsMTQgQEAKIAl1MzIgcHJvYmVfdGltZTsKIAl1MzIgcGVyX2Rvd25fdGltZTsKIAl1MzIgcHJvYmVfaW50ZXJ2YWw7Ci0JdTMyIHByZXZfZGF0YV9yaXg7Ci0JdTMyIHR4X3RyaWdsZXZlbF9tYXg7CiAJc3RydWN0IGF0aF9yYXRlc2V0IG5lZ19yYXRlczsKIAlzdHJ1Y3QgYXRoX3JhdGVzZXQgbmVnX2h0X3JhdGVzOwotCXN0cnVjdCBhdGhfcmF0ZV9zb2Z0YyAqYXNjOwogCWNvbnN0IHN0cnVjdCBhdGhfcmF0ZV90YWJsZSAqcmF0ZV90YWJsZTsKIAogCXN0cnVjdCBkZW50cnkgKmRlYnVnZnNfcmNzdGF0czsKIAlzdHJ1Y3QgYXRoX3JjX3N0YXRzIHJjc3RhdHNbUkFURV9UQUJMRV9TSVpFXTsKIH07CiAKLSNkZWZpbmUgQVRIX1RYX0lORk9fRlJBTUVfVFlQRV9JTlRFUk5BTAkoMSA8PCAwKQotI2RlZmluZSBBVEhfVFhfSU5GT19GUkFNRV9UWVBFX1BBVVNFCSgxIDw8IDEpCi0jZGVmaW5lIEFUSF9UWF9JTkZPX1hSRVRSWQkJKDEgPDwgMykKLSNkZWZpbmUgQVRIX1RYX0lORk9fVU5ERVJSVU4JCSgxIDw8IDQpCi0KIGVudW0gYXRoOWtfaW50ZXJuYWxfZnJhbWVfdHlwZSB7CiAJQVRIOUtfSUZUX05PVF9JTlRFUk5BTCwKIAlBVEg5S19JRlRfUEFVU0UsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmVjdi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JlY3YuYwppbmRleCBmZGMyZWM1Li5iMjQ5N2I4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmVjdi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yZWN2LmMKQEAgLTE2NSw3ICsxNjUsNyBAQAogCXUzMiBuYnVmID0gMDsKIAogCWlmIChsaXN0X2VtcHR5KCZzYy0+cngucnhidWYpKSB7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfUVVFVUUsICJObyBmcmVlIHJ4IGJ1ZiBhdmFpbGFibGVcbiIpOworCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19RVUVVRSwgIk5vIGZyZWUgcnggYnVmIGF2YWlsYWJsZVxuIik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTI2OSw3ICsyNjksNyBAQAogCQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCQkJYmYtPmJmX21wZHUgPSBOVUxMOwogCQkJCWJmLT5iZl9idWZfYWRkciA9IDA7Ci0JCQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19GQVRBTCwKKwkJCQlhdGhfZXJyKGNvbW1vbiwKIAkJCQkJImRtYV9tYXBwaW5nX2Vycm9yKCkgb24gUlggaW5pdFxuIik7CiAJCQkJZXJyb3IgPSAtRU5PTUVNOwogCQkJCWdvdG8gcnhfaW5pdF9mYWlsOwpAQCAtMzE3LDcgKzMxNyw3IEBACiAJc3RydWN0IGF0aF9idWYgKmJmOwogCWludCBlcnJvciA9IDA7CiAKLQlzcGluX2xvY2tfaW5pdCgmc2MtPnJ4LnBjdV9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmc2MtPnNjX3BjdV9sb2NrKTsKIAlzYy0+c2NfZmxhZ3MgJj0gflNDX09QX1JYRkxVU0g7CiAJc3Bpbl9sb2NrX2luaXQoJnNjLT5yeC5yeGJ1ZmxvY2spOwogCkBAIC0zMjcsMTcgKzMyNywxNyBAQAogCQljb21tb24tPnJ4X2J1ZnNpemUgPSByb3VuZHVwKElFRUU4MDIxMV9NQVhfTVBEVV9MRU4sCiAJCQkJbWluKGNvbW1vbi0+Y2FjaGVsc3osICh1MTYpNjQpKTsKIAotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0NPTkZJRywgImNhY2hlbHN6ICV1IHJ4YnVmc2l6ZSAldVxuIiwKLQkJCQljb21tb24tPmNhY2hlbHN6LCBjb21tb24tPnJ4X2J1ZnNpemUpOworCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19DT05GSUcsICJjYWNoZWxzeiAldSByeGJ1ZnNpemUgJXVcbiIsCisJCQljb21tb24tPmNhY2hlbHN6LCBjb21tb24tPnJ4X2J1ZnNpemUpOwogCiAJCS8qIEluaXRpYWxpemUgcnggZGVzY3JpcHRvcnMgKi8KIAogCQllcnJvciA9IGF0aF9kZXNjZG1hX3NldHVwKHNjLCAmc2MtPnJ4LnJ4ZG1hLCAmc2MtPnJ4LnJ4YnVmLAogCQkJCSJyeCIsIG5idWZzLCAxLCAwKTsKIAkJaWYgKGVycm9yICE9IDApIHsKLQkJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRkFUQUwsCi0JCQkJICAiZmFpbGVkIHRvIGFsbG9jYXRlIHJ4IGRlc2NyaXB0b3JzOiAlZFxuIiwKLQkJCQkgIGVycm9yKTsKKwkJCWF0aF9lcnIoY29tbW9uLAorCQkJCSJmYWlsZWQgdG8gYWxsb2NhdGUgcnggZGVzY3JpcHRvcnM6ICVkXG4iLAorCQkJCWVycm9yKTsKIAkJCWdvdG8gZXJyOwogCQl9CiAKQEAgLTM1OCw4ICszNTgsOCBAQAogCQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCQkJYmYtPmJmX21wZHUgPSBOVUxMOwogCQkJCWJmLT5iZl9idWZfYWRkciA9IDA7Ci0JCQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19GQVRBTCwKLQkJCQkJICAiZG1hX21hcHBpbmdfZXJyb3IoKSBvbiBSWCBpbml0XG4iKTsKKwkJCQlhdGhfZXJyKGNvbW1vbiwKKwkJCQkJImRtYV9tYXBwaW5nX2Vycm9yKCkgb24gUlggaW5pdFxuIik7CiAJCQkJZXJyb3IgPSAtRU5PTUVNOwogCQkJCWdvdG8gZXJyOwogCQkJfQpAQCAtNTI4LDYgKzUyOCwxMyBAQAogCQlzYy0+cngucnhsaW5rID0gTlVMTDsKIAlzcGluX3VubG9ja19iaCgmc2MtPnJ4LnJ4YnVmbG9jayk7CiAKKwlpZiAoIShhaC0+YWhfZmxhZ3MgJiBBSF9VTlBMVUdHRUQpICYmCisJICAgIHVubGlrZWx5KCFzdG9wcGVkKSkgeworCQlhdGhfZXJyKGF0aDlrX2h3X2NvbW1vbihzYy0+c2NfYWgpLAorCQkJIkNvdWxkIG5vdCBzdG9wIFJYLCB3ZSBjb3VsZCBiZSAiCisJCQkiY29uZnVzaW5nIHRoZSBETUEgZW5naW5lIHdoZW4gd2Ugc3RhcnQgUlggdXBcbiIpOworCQlBVEhfREJHX1dBUk5fT05fT05DRSghc3RvcHBlZCk7CisJfQogCXJldHVybiBzdG9wcGVkOwogfQogCkBAIC01ODgsOSArNTk1LDggQEAKIAogCWlmIChzYy0+cHNfZmxhZ3MgJiBQU19CRUFDT05fU1lOQykgewogCQlzYy0+cHNfZmxhZ3MgJj0gflBTX0JFQUNPTl9TWU5DOwotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX1BTLAotCQkJICAiUmVjb25maWd1cmUgQmVhY29uIHRpbWVycyBiYXNlZCBvbiAiCi0JCQkgICJ0aW1lc3RhbXAgZnJvbSB0aGUgQVBcbiIpOworCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19QUywKKwkJCSJSZWNvbmZpZ3VyZSBCZWFjb24gdGltZXJzIGJhc2VkIG9uIHRpbWVzdGFtcCBmcm9tIHRoZSBBUFxuIik7CiAJCWF0aF9iZWFjb25fY29uZmlnKHNjLCBOVUxMKTsKIAl9CiAKQEAgLTYwMiw4ICs2MDgsOCBAQAogCQkgKiBhIGJhY2t1cCB0cmlnZ2VyIGZvciByZXR1cm5pbmcgaW50byBORVRXT1JLIFNMRUVQIHN0YXRlLAogCQkgKiBzbyB3ZSBhcmUgd2FpdGluZyBmb3IgaXQgYXMgd2VsbC4KIAkJICovCi0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfUFMsICJSZWNlaXZlZCBEVElNIGJlYWNvbiBpbmRpY2F0aW5nICIKLQkJCSAgImJ1ZmZlcmVkIGJyb2FkY2FzdC9tdWx0aWNhc3QgZnJhbWUocylcbiIpOworCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19QUywKKwkJCSJSZWNlaXZlZCBEVElNIGJlYWNvbiBpbmRpY2F0aW5nIGJ1ZmZlcmVkIGJyb2FkY2FzdC9tdWx0aWNhc3QgZnJhbWUocylcbiIpOwogCQlzYy0+cHNfZmxhZ3MgfD0gUFNfV0FJVF9GT1JfQ0FCIHwgUFNfV0FJVF9GT1JfQkVBQ09OOwogCQlyZXR1cm47CiAJfQpAQCAtNjE1LDggKzYyMSw4IEBACiAJCSAqIGJlZW4gZGVsaXZlcmVkLgogCQkgKi8KIAkJc2MtPnBzX2ZsYWdzICY9IH5QU19XQUlUX0ZPUl9DQUI7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfUFMsCi0JCQkgICJQUyB3YWl0IGZvciBDQUIgZnJhbWVzIHRpbWVkIG91dFxuIik7CisJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX1BTLAorCQkJIlBTIHdhaXQgZm9yIENBQiBmcmFtZXMgdGltZWQgb3V0XG4iKTsKIAl9CiB9CiAKQEAgLTY0MSwxNSArNjQ3LDE0IEBACiAJCSAqIHBvaW50LgogCQkgKi8KIAkJc2MtPnBzX2ZsYWdzICY9IH4oUFNfV0FJVF9GT1JfQ0FCIHwgUFNfV0FJVF9GT1JfQkVBQ09OKTsKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19QUywKLQkJCSAgIkFsbCBQUyBDQUIgZnJhbWVzIHJlY2VpdmVkLCBiYWNrIHRvIHNsZWVwXG4iKTsKKwkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfUFMsCisJCQkiQWxsIFBTIENBQiBmcmFtZXMgcmVjZWl2ZWQsIGJhY2sgdG8gc2xlZXBcbiIpOwogCX0gZWxzZSBpZiAoKHNjLT5wc19mbGFncyAmIFBTX1dBSVRfRk9SX1BTUE9MTF9EQVRBKSAmJgogCQkgICAhaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSkgJiYKIAkJICAgIWllZWU4MDIxMV9oYXNfbW9yZWZyYWdzKGhkci0+ZnJhbWVfY29udHJvbCkpIHsKIAkJc2MtPnBzX2ZsYWdzICY9IH5QU19XQUlUX0ZPUl9QU1BPTExfREFUQTsKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19QUywKLQkJCSAgIkdvaW5nIGJhY2sgdG8gc2xlZXAgYWZ0ZXIgaGF2aW5nIHJlY2VpdmVkICIKLQkJCSAgIlBTLVBvbGwgZGF0YSAoMHglbHgpXG4iLAorCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19QUywKKwkJCSJHb2luZyBiYWNrIHRvIHNsZWVwIGFmdGVyIGhhdmluZyByZWNlaXZlZCBQUy1Qb2xsIGRhdGEgKDB4JWx4KVxuIiwKIAkJCXNjLT5wc19mbGFncyAmIChQU19XQUlUX0ZPUl9CRUFDT04gfAogCQkJCQlQU19XQUlUX0ZPUl9DQUIgfAogCQkJCQlQU19XQUlUX0ZPUl9QU1BPTExfREFUQSB8CkBAIC02NTgsOCArNjYzLDcgQEAKIH0KIAogc3RhdGljIHZvaWQgYXRoX3J4X3NlbmRfdG9fbWFjODAyMTEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJICAgIHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhzKQorCQkJCSAgICBzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwogCkBAIC05NTgsOCArOTYyLDkgQEAKIAkgKiBObyB2YWxpZCBoYXJkd2FyZSBiaXRyYXRlIGZvdW5kIC0tIHdlIHNob3VsZCBub3QgZ2V0IGhlcmUKIAkgKiBiZWNhdXNlIGhhcmR3YXJlIGhhcyBhbHJlYWR5IHZhbGlkYXRlZCB0aGlzIGZyYW1lIGFzIE9LLgogCSAqLwotCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfWE1JVCwgInVuc3VwcG9ydGVkIGh3IGJpdHJhdGUgZGV0ZWN0ZWQgIgotCQkgICIweCUwMnggdXNpbmcgMSBNYml0XG4iLCByeF9zdGF0cy0+cnNfcmF0ZSk7CisJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfWE1JVCwKKwkJInVuc3VwcG9ydGVkIGh3IGJpdHJhdGUgZGV0ZWN0ZWQgMHglMDJ4IHVzaW5nIDEgTWJpdFxuIiwKKwkJcnhfc3RhdHMtPnJzX3JhdGUpOwogCiAJcmV0dXJuIC1FSU5WQUw7CiB9CkBAIC05NjksMzYgKzk3NCwyMyBAQAogCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsCiAJCQkgICAgICAgc3RydWN0IGF0aF9yeF9zdGF0dXMgKnJ4X3N0YXRzKQogeworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKIAlzdHJ1Y3QgYXRoX2h3ICphaCA9IGNvbW1vbi0+YWg7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YTsKLQlzdHJ1Y3QgYXRoX25vZGUgKmFuOwotCWludCBsYXN0X3Jzc2kgPSBBVEhfUlNTSV9EVU1NWV9NQVJLRVI7CisJaW50IGxhc3RfcnNzaTsKIAlfX2xlMTYgZmM7CiAKKwlpZiAoYWgtPm9wbW9kZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQorCQlyZXR1cm47CisKIAlmYyA9IGhkci0+ZnJhbWVfY29udHJvbDsKKwlpZiAoIWllZWU4MDIxMV9pc19iZWFjb24oZmMpIHx8CisJICAgIGNvbXBhcmVfZXRoZXJfYWRkcihoZHItPmFkZHIzLCBjb21tb24tPmN1cmJzc2lkKSkKKwkJcmV0dXJuOwogCi0JcmN1X3JlYWRfbG9jaygpOwotCS8qCi0JICogWFhYOiB1c2UgaWVlZTgwMjExX2ZpbmRfc3RhISBUaGlzIHJlcXVpcmVzIHF1aXRlIGEgYml0IG9mIHdvcmsKLQkgKiB1bmRlciB0aGUgY3VycmVudCBhdGg5ayB2aXJ0dWFsIHdpcGh5IGltcGxlbWVudGF0aW9uIGFzIHdlIGhhdmUKLQkgKiBubyB3YXkgb2YgdHlpbmcgYSB2aWYgdG8gd2lwaHkuIFR5cGljYWxseSB2aWZzIGFyZSBhdHRhY2hlZCB0bwotCSAqIGF0IGxlYXN0IG9uZSBzZGF0YSBvZiBhIHdpcGh5IG9uIG1hYzgwMjExIGJ1dCB3aXRoIGF0aDlrIHZpcnR1YWwKLQkgKiB3aXBoeSB5b3UnZCBoYXZlIHRvIGl0ZXJhdGUgb3ZlciBldmVyeSB3aXBoeSBhbmQgZWFjaCBzZGF0YS4KLQkgKi8KLQlpZiAoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSkpCi0JCXN0YSA9IGllZWU4MDIxMV9maW5kX3N0YV9ieV9pZmFkZHIoaHcsIGhkci0+YWRkcjIsIE5VTEwpOwotCWVsc2UKLQkJc3RhID0gaWVlZTgwMjExX2ZpbmRfc3RhX2J5X2lmYWRkcihodywgaGRyLT5hZGRyMiwgaGRyLT5hZGRyMSk7CisJaWYgKHJ4X3N0YXRzLT5yc19yc3NpICE9IEFUSDlLX1JTU0lfQkFEICYmICFyeF9zdGF0cy0+cnNfbW9yZWFnZ3IpCisJCUFUSF9SU1NJX0xQRihhcGh5LT5sYXN0X3Jzc2ksIHJ4X3N0YXRzLT5yc19yc3NpKTsKIAotCWlmIChzdGEpIHsKLQkJYW4gPSAoc3RydWN0IGF0aF9ub2RlICopIHN0YS0+ZHJ2X3ByaXY7Ci0JCWlmIChyeF9zdGF0cy0+cnNfcnNzaSAhPSBBVEg5S19SU1NJX0JBRCAmJgotCQkgICAhcnhfc3RhdHMtPnJzX21vcmVhZ2dyKQotCQkJQVRIX1JTU0lfTFBGKGFuLT5sYXN0X3Jzc2ksIHJ4X3N0YXRzLT5yc19yc3NpKTsKLQkJbGFzdF9yc3NpID0gYW4tPmxhc3RfcnNzaTsKLQl9Ci0JcmN1X3JlYWRfdW5sb2NrKCk7Ci0KKwlsYXN0X3Jzc2kgPSBhcGh5LT5sYXN0X3Jzc2k7CiAJaWYgKGxpa2VseShsYXN0X3Jzc2kgIT0gQVRIX1JTU0lfRFVNTVlfTUFSS0VSKSkKIAkJcnhfc3RhdHMtPnJzX3Jzc2kgPSBBVEhfRVBfUk5EKGxhc3RfcnNzaSwKIAkJCQkJICAgICAgQVRIX1JTU0lfRVBfTVVMVElQTElFUik7CkBAIC0xMDA2LDggKzk5OCw3IEBACiAJCXJ4X3N0YXRzLT5yc19yc3NpID0gMDsKIAogCS8qIFVwZGF0ZSBCZWFjb24gUlNTSSwgdGhpcyBpcyB1c2VkIGJ5IEFOSS4gKi8KLQlpZiAoaWVlZTgwMjExX2lzX2JlYWNvbihmYykpCi0JCWFoLT5zdGF0cy5hdmdicnNzaSA9IHJ4X3N0YXRzLT5yc19yc3NpOworCWFoLT5zdGF0cy5hdmdicnNzaSA9IHJ4X3N0YXRzLT5yc19yc3NpOwogfQogCiAvKgpAQCAtMTYzNyw3ICsxNjI4LDcgQEAKIAlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKIAlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKGFoKTsKIAkvKgotCSAqIFRoZSBodyBjYW4gdGVjaG5jaWNhbGx5IGRpZmZlciBmcm9tIGNvbW1vbi0+aHcgd2hlbiB1c2luZyBhdGg5aworCSAqIFRoZSBodyBjYW4gdGVjaG5pY2FsbHkgZGlmZmVyIGZyb20gY29tbW9uLT5odyB3aGVuIHVzaW5nIGF0aDlrCiAJICogdmlydHVhbCB3aXBoeSBzbyB0byBhY2NvdW50IGZvciB0aGF0IHdlIGl0ZXJhdGUgb3ZlciB0aGUgYWN0aXZlCiAJICogd2lwaHlzIGFuZCBmaW5kIHRoZSBhcHByb3ByaWF0ZSB3aXBoeSBhbmQgdGhlcmVmb3JlIGh3LgogCSAqLwpAQCAtMTc0NCw5ICsxNzM1LDggQEAKIAkJCWRldl9rZnJlZV9za2JfYW55KHJlcXVldWVfc2tiKTsKIAkJCWJmLT5iZl9tcGR1ID0gTlVMTDsKIAkJCWJmLT5iZl9idWZfYWRkciA9IDA7Ci0JCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0ZBVEFMLAotCQkJCSAgImRtYV9tYXBwaW5nX2Vycm9yKCkgb24gUlhcbiIpOwotCQkJYXRoX3J4X3NlbmRfdG9fbWFjODAyMTEoaHcsIHNjLCBza2IsIHJ4cyk7CisJCQlhdGhfZXJyKGNvbW1vbiwgImRtYV9tYXBwaW5nX2Vycm9yKCkgb24gUlhcbiIpOworCQkJYXRoX3J4X3NlbmRfdG9fbWFjODAyMTEoaHcsIHNjLCBza2IpOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtMTc2MiwxNyArMTc1MiwxOCBAQAogCQl9CiAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnNjLT5zY19wbV9sb2NrLCBmbGFncyk7Ci0JCWlmICh1bmxpa2VseShhdGg5a19jaGVja19hdXRvX3NsZWVwKHNjKSB8fAotCQkJICAgICAoc2MtPnBzX2ZsYWdzICYgKFBTX1dBSVRfRk9SX0JFQUNPTiB8CisKKwkJaWYgKChzYy0+cHNfZmxhZ3MgJiAoUFNfV0FJVF9GT1JfQkVBQ09OIHwKIAkJCQkJICAgICAgUFNfV0FJVF9GT1JfQ0FCIHwKLQkJCQkJICAgICAgUFNfV0FJVF9GT1JfUFNQT0xMX0RBVEEpKSkpCisJCQkJCSAgICAgIFBTX1dBSVRfRk9SX1BTUE9MTF9EQVRBKSkgfHwKKwkJCQkJdW5saWtlbHkoYXRoOWtfY2hlY2tfYXV0b19zbGVlcChzYykpKQogCQkJYXRoX3J4X3BzKHNjLCBza2IpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYy0+c2NfcG1fbG9jaywgZmxhZ3MpOwogCiAJCWlmIChhaC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX0FOVF9ESVZfQ09NQikKIAkJCWF0aF9hbnRfY29tYl9zY2FuKHNjLCAmcnMpOwogCi0JCWF0aF9yeF9zZW5kX3RvX21hYzgwMjExKGh3LCBzYywgc2tiLCByeHMpOworCQlhdGhfcnhfc2VuZF90b19tYWM4MDIxMShodywgc2MsIHNrYik7CiAKIHJlcXVldWU6CiAJCWlmIChlZG1hKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmVnLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmVnLmgKaW5kZXggMmM2YTIyZi4uNGRmNTY1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JlZy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yZWcuaApAQCAtNzg3LDYgKzc4Nyw4IEBACiAjZGVmaW5lIEFSX1NSRVZfUkVWSVNJT05fOTI3MV8xMQkxCiAjZGVmaW5lIEFSX1NSRVZfVkVSU0lPTl85MzAwCQkweDFjMAogI2RlZmluZSBBUl9TUkVWX1JFVklTSU9OXzkzMDBfMjAJMiAvKiAyLjAgYW5kIDIuMSAqLworI2RlZmluZSBBUl9TUkVWX1ZFUlNJT05fOTQ4NQkJMHgyNDAKKyNkZWZpbmUgQVJfU1JFVl9SRVZJU0lPTl85NDg1XzEwCTAKIAogI2RlZmluZSBBUl9TUkVWXzU0MTYoX2FoKSBcCiAJKCgoX2FoKS0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uID09IEFSX1NSRVZfVkVSU0lPTl81NDE2X1BDSSkgfHwgXApAQCAtODU5LDIwICs4NjEsMjQgQEAKIAkgKCgoX2FoKS0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uID09IEFSX1NSRVZfVkVSU0lPTl85MzAwKSAmJiBcCiAJICAoKF9haCktPmh3X3ZlcnNpb24ubWFjUmV2ID49IEFSX1NSRVZfUkVWSVNJT05fOTMwMF8yMCkpKQogCisjZGVmaW5lIEFSX1NSRVZfOTQ4NShfYWgpIFwKKwkoKChfYWgpLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPT0gQVJfU1JFVl9WRVJTSU9OXzk0ODUpKQorI2RlZmluZSBBUl9TUkVWXzk0ODVfMTAoX2FoKSBcCisJKEFSX1NSRVZfOTQ4NShfYWgpICYmIFwKKwkgKChfYWgpLT5od192ZXJzaW9uLm1hY1JldiA9PSBBUl9TUkVWX1JFVklTSU9OXzk0ODVfMTApKQorCiAjZGVmaW5lIEFSX1NSRVZfOTI4NUVfMjAoX2FoKSBcCiAgICAgKEFSX1NSRVZfOTI4NV8xMl9PUl9MQVRFUihfYWgpICYmIFwKICAgICAgKChSRUdfUkVBRChfYWgsIEFSX0FOX1NZTlRIOSkgJiAweDcpID09IDB4MSkpCiAKLSNkZWZpbmUgQVJfREVWSURfNzAxMChfYWgpIFwKLQkoKChfYWgpLT5od192ZXJzaW9uLmRldmlkID09IDB4NzAxMCkgfHwgXAotCSAoKF9haCktPmh3X3ZlcnNpb24uZGV2aWQgPT0gMHg3MDE1KSB8fCBcCi0JICgoX2FoKS0+aHdfdmVyc2lvbi5kZXZpZCA9PSAweDkwMTgpIHx8IFwKLQkgKChfYWgpLT5od192ZXJzaW9uLmRldmlkID09IDB4QTcwNCkgfHwgXAotCSAoKF9haCktPmh3X3ZlcnNpb24uZGV2aWQgPT0gMHgxMjAwKSkKK2VudW0gYXRoX3VzYl9kZXYgeworCUFSOTI4MF9VU0IgPSAxLCAvKiBBUjcwMTAgKyBBUjkyODAsIFVCOTQgKi8KKwlBUjkyODdfVVNCID0gMiwgLyogQVI3MDEwICsgQVI5Mjg3LCBVQjk1ICovCit9OwogCi0jZGVmaW5lIEFSOTI4N19IVENfREVWSUQoX2FoKSBcCi0JKCgoX2FoKS0+aHdfdmVyc2lvbi5kZXZpZCA9PSAweDcwMTUpIHx8IFwKLQkgKChfYWgpLT5od192ZXJzaW9uLmRldmlkID09IDB4MTIwMCkpCisjZGVmaW5lIEFSX0RFVklEXzcwMTAoX2FoKSBcCisJKCgoX2FoKS0+aHdfdmVyc2lvbi51c2JkZXYgPT0gQVI5MjgwX1VTQikgfHwgXAorCSAoKF9haCktPmh3X3ZlcnNpb24udXNiZGV2ID09IEFSOTI4N19VU0IpKQogCiAjZGVmaW5lIEFSX1JBRElPX1NSRVZfTUFKT1IgICAgICAgICAgICAgICAgICAgMHhmMAogI2RlZmluZSBBUl9SQUQ1MTMzX1NSRVZfTUFKT1IgICAgICAgICAgICAgICAgIDB4YzAKQEAgLTEwNzQsNiArMTA4MCw5IEBACiAjZGVmaW5lIEFSX0lOVFJfUFJJT19BU1lOQ19NQVNLICAgMHg0MGM4CiAjZGVmaW5lIEFSX0lOVFJfUFJJT19TWU5DX01BU0sgICAgMHg0MGNjCiAjZGVmaW5lIEFSX0lOVFJfUFJJT19BU1lOQ19FTkFCTEUgMHg0MGQ0CisjZGVmaW5lIEFSX0VOVF9PVFAJCSAgMHg0MGQ4CisjZGVmaW5lIEFSX0VOVF9PVFBfQ0hBSU4yX0RJU0FCTEUgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIEFSX0VOVF9PVFBfTVBTRAkJMHgwMDgwMDAwMAogCiAjZGVmaW5lIEFSX1JUQ185MzAwX1BMTF9ESVYgICAgICAgICAgMHgwMDAwMDNmZgogI2RlZmluZSBBUl9SVENfOTMwMF9QTExfRElWX1MgICAgICAgIDAKQEAgLTExMTEsNiArMTEyMCw4IEBACiAjZGVmaW5lIEFSX1JUQ19QTExfQ09OVFJPTCBcCiAJKChBUl9TUkVWXzkxMDAoYWgpKSA/IChBUl9SVENfQkFTRSArIDB4MDAxNCkgOiAweDcwMTQpCiAKKyNkZWZpbmUgQVJfUlRDX1BMTF9DT05UUk9MMgkweDcwM2MKKwogI2RlZmluZSBBUl9SVENfUExMX0RJViAgICAgICAgICAweDAwMDAwMDFmCiAjZGVmaW5lIEFSX1JUQ19QTExfRElWX1MgICAgICAgIDAKICNkZWZpbmUgQVJfUlRDX1BMTF9ESVYyICAgICAgICAgMHgwMDAwMDAyMApAQCAtMTU3NCw2ICsxNTg1LDcgQEAKICNkZWZpbmUgQVJfUENVX1RCVFRfUFJPVEVDVCAgICAgICAgMHgwMDIwMDAwMAogI2RlZmluZSBBUl9QQ1VfQ0xFQVJfVk1GICAgICAgICAgICAweDAxMDAwMDAwCiAjZGVmaW5lIEFSX1BDVV9DTEVBUl9CQV9WQUxJRCAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgQVJfUENVX0FMV0FZU19QRVJGT1JNX0tFWVNFQVJDSCAweDEwMDAwMDAwCiAKICNkZWZpbmUgQVJfUENVX0JUX0FOVF9QUkVWRU5UX1JYICAgMHgwMDEwMDAwMAogI2RlZmluZSBBUl9QQ1VfQlRfQU5UX1BSRVZFTlRfUlhfUyAyMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3ZpcnR1YWwuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay92aXJ0dWFsLmMKaW5kZXggZWM3Y2Y1ZS4uMmRjNzA5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3ZpcnR1YWwuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvdmlydHVhbC5jCkBAIC0xMDcsNiArMTA3LDcgQEAKIAlhcGh5LT5zYyA9IHNjOwogCWFwaHktPmh3ID0gaHc7CiAJc2MtPnNlY193aXBoeVtpXSA9IGFwaHk7CisJYXBoeS0+bGFzdF9yc3NpID0gQVRIX1JTU0lfRFVNTVlfTUFSS0VSOwogCXNwaW5fdW5sb2NrX2JoKCZzYy0+d2lwaHlfbG9jayk7CiAKIAltZW1jcHkoYWRkciwgY29tbW9uLT5tYWNhZGRyLCBFVEhfQUxFTik7CkBAIC0xODYsNyArMTg3LDcgQEAKIAlpbmZvLT5jb250cm9sLnJhdGVzWzFdLmlkeCA9IC0xOwogCiAJbWVtc2V0KCZ0eGN0bCwgMCwgc2l6ZW9mKHN0cnVjdCBhdGhfdHhfY29udHJvbCkpOwotCXR4Y3RsLnR4cSA9ICZzYy0+dHgudHhxW3NjLT50eC5od3FfbWFwW1dNRV9BQ19WT11dOworCXR4Y3RsLnR4cSA9IHNjLT50eC50eHFfbWFwW1dNRV9BQ19WT107CiAJdHhjdGwuZnJhbWVfdHlwZSA9IHBzID8gQVRIOUtfSUZUX1BBVVNFIDogQVRIOUtfSUZUX1VOUEFVU0U7CiAKIAlpZiAoYXRoX3R4X3N0YXJ0KGFwaHktPmh3LCBza2IsICZ0eGN0bCkgIT0gMCkKQEAgLTI4Nyw3ICsyODgsNiBAQAogCS8qIHN5bmMgaHcgY29uZmlndXJhdGlvbiBmb3IgaHcgY29kZSAqLwogCWNvbW1vbi0+aHcgPSBhcGh5LT5odzsKIAotCWF0aF91cGRhdGVfY2hhaW5tYXNrKHNjLCBzYy0+Y2hhbl9pc19odCk7CiAJaWYgKGF0aF9zZXRfY2hhbm5lbChzYywgYXBoeS0+aHcsCiAJCQkgICAgJnNjLT5zY19haC0+Y2hhbm5lbHNbc2MtPmNoYW5faWR4XSkgPCAwKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICJhdGg5azogRmFpbGVkIHRvIHNldCBjaGFubmVsIGZvciBuZXcgIgpAQCAtMzA0LDEzICszMDQsMTIgQEAKICAqIGF0aDlrIHZlcnNpb24gb2YgaWVlZTgwMjExX3R4X3N0YXR1cygpIGZvciBUWCBmcmFtZXMgdGhhdCBhcmUgZ2VuZXJhdGVkCiAgKiBpbnRlcm5hbGx5IGluIHRoZSBkcml2ZXIuCiAgKi8KLXZvaWQgYXRoOWtfdHhfc3RhdHVzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQordm9pZCBhdGg5a190eF9zdGF0dXMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IsIGludCBmdHlwZSkKIHsKIAlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwogCi0JaWYgKCh0eF9pbmZvLT5wYWRbMF0gJiBBVEhfVFhfSU5GT19GUkFNRV9UWVBFX1BBVVNFKSAmJgotCSAgICBhcGh5LT5zdGF0ZSA9PSBBVEhfV0lQSFlfUEFVU0lORykgeworCWlmIChmdHlwZSA9PSBBVEg5S19JRlRfUEFVU0UgJiYgYXBoeS0+c3RhdGUgPT0gQVRIX1dJUEhZX1BBVVNJTkcpIHsKIAkJaWYgKCEodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfU1RBVF9BQ0spKSB7CiAJCQlwcmludGsoS0VSTl9ERUJVRyAiYXRoOWs6ICVzOiBubyBBQ0sgZm9yIHBhdXNlICIKIAkJCSAgICAgICAiZnJhbWVcbiIsIHdpcGh5X25hbWUoaHctPndpcGh5KSk7CkBAIC02NTYsMTAgKzY1NSw5IEBACiAJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKIAogCWFwaHktPmlkbGUgPSBpZGxlOwotCWF0aF9wcmludChhdGg5a19od19jb21tb24oc2MtPnNjX2FoKSwgQVRIX0RCR19DT05GSUcsCi0JCSAgIk1hcmtpbmcgJXMgYXMgJXNcbiIsCi0JCSAgd2lwaHlfbmFtZShhcGh5LT5ody0+d2lwaHkpLAotCQkgIGlkbGUgPyAiaWRsZSIgOiAibm90LWlkbGUiKTsKKwlhdGhfZGJnKGF0aDlrX2h3X2NvbW1vbihzYy0+c2NfYWgpLCBBVEhfREJHX0NPTkZJRywKKwkJIk1hcmtpbmcgJXMgYXMgJXNpZGxlXG4iLAorCQl3aXBoeV9uYW1lKGFwaHktPmh3LT53aXBoeSksIGlkbGUgPyAiIiA6ICJub3QtIik7CiB9CiAvKiBPbmx5IGJvdGhlciBzdGFydGluZyBhIHF1ZXVlIG9uIGFuIGFjdGl2ZSB2aXJ0dWFsIHdpcGh5ICovCiBib29sIGF0aF9tYWM4MDIxMV9zdGFydF9xdWV1ZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgdTE2IHNrYl9xdWV1ZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay93bWkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay93bWkuYwppbmRleCA5M2E4YmRhLi5kYzg2MmY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvd21pLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3dtaS5jCkBAIC0xMjAsMTcgKzEyMCwyNyBAQAogCWtmcmVlKHByaXYtPndtaSk7CiB9CiAKLXZvaWQgYXRoOWtfd21pX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQordm9pZCBhdGg5a19zd2JhX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKilkYXRhOwogCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24ocHJpdi0+YWgpOwogCi0JYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19XTUksICJTV0JBIEV2ZW50IHJlY2VpdmVkXG4iKTsKKwlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19XTUksICJTV0JBIEV2ZW50IHJlY2VpdmVkXG4iKTsKIAogCWF0aDlrX2h0Y19zd2JhKHByaXYsIHByaXYtPndtaS0+YmVhY29uX3BlbmRpbmcpOwogCiB9CiAKK3ZvaWQgYXRoOWtfZmF0YWxfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhdGg5a19odGNfcHJpdiwKKwkJCQkJCSAgIGZhdGFsX3dvcmspOworCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24ocHJpdi0+YWgpOworCisJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfRkFUQUwsICJGQVRBTCBFdmVudCByZWNlaXZlZCwgcmVzZXR0aW5nIGRldmljZVxuIik7CisJYXRoOWtfaHRjX3Jlc2V0KHByaXYpOworfQorCiBzdGF0aWMgdm9pZCBhdGg5a193bWlfcnNwX2NhbGxiYWNrKHN0cnVjdCB3bWkgKndtaSwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlza2JfcHVsbChza2IsIHNpemVvZihzdHJ1Y3Qgd21pX2NtZF9oZHIpKTsKQEAgLTE2Myw3ICsxNzMsMTEgQEAKIAkJc3dpdGNoIChjbWRfaWQpIHsKIAkJY2FzZSBXTUlfU1dCQV9FVkVOVElEOgogCQkJd21pLT5iZWFjb25fcGVuZGluZyA9ICoodTggKil3bWlfZXZlbnQ7Ci0JCQl0YXNrbGV0X3NjaGVkdWxlKCZ3bWktPmRydl9wcml2LT53bWlfdGFza2xldCk7CisJCQl0YXNrbGV0X3NjaGVkdWxlKCZ3bWktPmRydl9wcml2LT5zd2JhX3Rhc2tsZXQpOworCQkJYnJlYWs7CisJCWNhc2UgV01JX0ZBVEFMX0VWRU5USUQ6CisJCQlpZWVlODAyMTFfcXVldWVfd29yayh3bWktPmRydl9wcml2LT5odywKKwkJCQkJICAgICAmd21pLT5kcnZfcHJpdi0+ZmF0YWxfd29yayk7CiAJCQlicmVhazsKIAkJY2FzZSBXTUlfVFhSQVRFX0VWRU5USUQ6CiAjaWZkZWYgQ09ORklHX0FUSDlLX0hUQ19ERUJVR0ZTCkBAIC0yNTAsNyArMjY0LDcgQEAKIAlpbnQgdGltZV9sZWZ0LCByZXQgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAod21pLT5kcnZfcHJpdi0+b3BfZmxhZ3MgJiBPUF9VTlBMVUdHRUQpCisJaWYgKGFoLT5haF9mbGFncyAmIEFIX1VOUExVR0dFRCkKIAkJcmV0dXJuIDA7CiAKIAlza2IgPSBhbGxvY19za2IoaGVhZHJvb20gKyBjbWRfbGVuLCBHRlBfQVRPTUlDKTsKQEAgLTI4Niw5ICszMDAsOSBAQAogCiAJdGltZV9sZWZ0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZ3bWktPmNtZF93YWl0LCB0aW1lb3V0KTsKIAlpZiAoIXRpbWVfbGVmdCkgewotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX1dNSSwKLQkJCSAgIlRpbWVvdXQgd2FpdGluZyBmb3IgV01JIGNvbW1hbmQ6ICVzXG4iLAotCQkJICB3bWlfY21kX3RvX25hbWUoY21kX2lkKSk7CisJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX1dNSSwKKwkJCSJUaW1lb3V0IHdhaXRpbmcgZm9yIFdNSSBjb21tYW5kOiAlc1xuIiwKKwkJCXdtaV9jbWRfdG9fbmFtZShjbWRfaWQpKTsKIAkJbXV0ZXhfdW5sb2NrKCZ3bWktPm9wX211dGV4KTsKIAkJcmV0dXJuIC1FVElNRURPVVQ7CiAJfQpAQCAtMjk4LDggKzMxMiw4IEBACiAJcmV0dXJuIDA7CiAKIG91dDoKLQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX1dNSSwKLQkJICAiV01JIGZhaWx1cmUgZm9yOiAlc1xuIiwgd21pX2NtZF90b19uYW1lKGNtZF9pZCkpOworCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX1dNSSwKKwkJIldNSSBmYWlsdXJlIGZvcjogJXNcbiIsIHdtaV9jbWRfdG9fbmFtZShjbWRfaWQpKTsKIAltdXRleF91bmxvY2soJndtaS0+b3BfbXV0ZXgpOwogCWtmcmVlX3NrYihza2IpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvd21pLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvd21pLmgKaW5kZXggYWM2MTA3NGEuLjQyMDg0MjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay93bWkuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvd21pLmgKQEAgLTExNyw3ICsxMTcsOCBAQAogCQkgIHU4ICpjbWRfYnVmLCB1MzIgY21kX2xlbiwKIAkJICB1OCAqcnNwX2J1ZiwgdTMyIHJzcF9sZW4sCiAJCSAgdTMyIHRpbWVvdXQpOwotdm9pZCBhdGg5a193bWlfdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpOwordm9pZCBhdGg5a19zd2JhX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKTsKK3ZvaWQgYXRoOWtfZmF0YWxfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogCiAjZGVmaW5lIFdNSV9DTUQoX3dtaV9jbWQpCQkJCQkJXAogCWRvIHsJCQkJCQkJCVwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay94bWl0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsveG1pdC5jCmluZGV4IGFmZjA0NzguLjMzMmQxZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay94bWl0LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3htaXQuYwpAQCAtNDgsMTkgKzQ4LDE3IEBACiAKICNkZWZpbmUgSVNfSFRfUkFURShfcmF0ZSkgICAgICgoX3JhdGUpICYgMHg4MCkKIAotc3RhdGljIHZvaWQgYXRoX3R4X3NlbmRfaHRfbm9ybWFsKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX3R4cSAqdHhxLAotCQkJCSAgc3RydWN0IGF0aF9hdHhfdGlkICp0aWQsCi0JCQkJICBzdHJ1Y3QgbGlzdF9oZWFkICpiZl9oZWFkKTsKK3N0YXRpYyB2b2lkIGF0aF90eF9zZW5kX25vcm1hbChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF90eHEgKnR4cSwKKwkJCSAgICAgICBzdHJ1Y3QgYXRoX2F0eF90aWQgKnRpZCwKKwkJCSAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpiZl9oZWFkKTsKIHN0YXRpYyB2b2lkIGF0aF90eF9jb21wbGV0ZV9idWYoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfYnVmICpiZiwKIAkJCQlzdHJ1Y3QgYXRoX3R4cSAqdHhxLCBzdHJ1Y3QgbGlzdF9oZWFkICpiZl9xLAogCQkJCXN0cnVjdCBhdGhfdHhfc3RhdHVzICp0cywgaW50IHR4b2ssIGludCBzZW5kYmFyKTsKIHN0YXRpYyB2b2lkIGF0aF90eF90eHFhZGRidWYoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfdHhxICp0eHEsCiAJCQkgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpOwotc3RhdGljIHZvaWQgYXRoX2J1Zl9zZXRfcmF0ZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9idWYgKmJmKTsKLXN0YXRpYyBpbnQgYXRoX3R4X251bV9iYWRmcm1zKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX2J1ZiAqYmYsCi0JCQkgICAgICBzdHJ1Y3QgYXRoX3R4X3N0YXR1cyAqdHMsIGludCB0eG9rKTsKK3N0YXRpYyB2b2lkIGF0aF9idWZfc2V0X3JhdGUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfYnVmICpiZiwgaW50IGxlbik7CiBzdGF0aWMgdm9pZCBhdGhfdHhfcmNfc3RhdHVzKHN0cnVjdCBhdGhfYnVmICpiZiwgc3RydWN0IGF0aF90eF9zdGF0dXMgKnRzLAotCQkJICAgICBpbnQgbmJhZCwgaW50IHR4b2ssIGJvb2wgdXBkYXRlX3JjKTsKKwkJCSAgICAgaW50IG5mcmFtZXMsIGludCBuYmFkLCBpbnQgdHhvaywgYm9vbCB1cGRhdGVfcmMpOwogc3RhdGljIHZvaWQgYXRoX3R4X3VwZGF0ZV9iYXcoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkLAogCQkJICAgICAgaW50IHNlcW5vKTsKIApAQCAtMTI0LDcgKzEyMiw3IEBACiAKIHN0YXRpYyB2b2lkIGF0aF90eF9yZXN1bWVfdGlkKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX2F0eF90aWQgKnRpZCkKIHsKLQlzdHJ1Y3QgYXRoX3R4cSAqdHhxID0gJnNjLT50eC50eHFbdGlkLT5hYy0+cW51bV07CisJc3RydWN0IGF0aF90eHEgKnR4cSA9IHRpZC0+YWMtPnR4cTsKIAogCVdBUk5fT04oIXRpZC0+cGF1c2VkKTsKIApAQCAtMTQwLDEyICsxMzgsMjEgQEAKIAlzcGluX3VubG9ja19iaCgmdHhxLT5heHFfbG9jayk7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgYXRoX2ZyYW1lX2luZm8gKmdldF9mcmFtZV9pbmZvKHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IGF0aF9mcmFtZV9pbmZvKSA+CisJCSAgICAgc2l6ZW9mKHR4X2luZm8tPnJhdGVfZHJpdmVyX2RhdGEpKTsKKwlyZXR1cm4gKHN0cnVjdCBhdGhfZnJhbWVfaW5mbyAqKSAmdHhfaW5mby0+cmF0ZV9kcml2ZXJfZGF0YVswXTsKK30KKwogc3RhdGljIHZvaWQgYXRoX3R4X2ZsdXNoX3RpZChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9hdHhfdGlkICp0aWQpCiB7Ci0Jc3RydWN0IGF0aF90eHEgKnR4cSA9ICZzYy0+dHgudHhxW3RpZC0+YWMtPnFudW1dOworCXN0cnVjdCBhdGhfdHhxICp0eHEgPSB0aWQtPmFjLT50eHE7CiAJc3RydWN0IGF0aF9idWYgKmJmOwogCXN0cnVjdCBsaXN0X2hlYWQgYmZfaGVhZDsKIAlzdHJ1Y3QgYXRoX3R4X3N0YXR1cyB0czsKKwlzdHJ1Y3QgYXRoX2ZyYW1lX2luZm8gKmZpOwogCiAJSU5JVF9MSVNUX0hFQUQoJmJmX2hlYWQpOwogCkBAIC0xNTYsMTIgKzE2MywxNSBAQAogCQliZiA9IGxpc3RfZmlyc3RfZW50cnkoJnRpZC0+YnVmX3EsIHN0cnVjdCBhdGhfYnVmLCBsaXN0KTsKIAkJbGlzdF9tb3ZlX3RhaWwoJmJmLT5saXN0LCAmYmZfaGVhZCk7CiAKLQkJaWYgKGJmX2lzcmV0cmllZChiZikpIHsKLQkJCWF0aF90eF91cGRhdGVfYmF3KHNjLCB0aWQsIGJmLT5iZl9zZXFubyk7CisJCXNwaW5fdW5sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKKwkJZmkgPSBnZXRfZnJhbWVfaW5mbyhiZi0+YmZfbXBkdSk7CisJCWlmIChmaS0+cmV0cmllcykgeworCQkJYXRoX3R4X3VwZGF0ZV9iYXcoc2MsIHRpZCwgZmktPnNlcW5vKTsKIAkJCWF0aF90eF9jb21wbGV0ZV9idWYoc2MsIGJmLCB0eHEsICZiZl9oZWFkLCAmdHMsIDAsIDApOwogCQl9IGVsc2UgewotCQkJYXRoX3R4X3NlbmRfaHRfbm9ybWFsKHNjLCB0eHEsIHRpZCwgJmJmX2hlYWQpOworCQkJYXRoX3R4X3NlbmRfbm9ybWFsKHNjLCB0eHEsIHRpZCwgJmJmX2hlYWQpOwogCQl9CisJCXNwaW5fbG9ja19iaCgmdHhxLT5heHFfbG9jayk7CiAJfQogCiAJc3Bpbl91bmxvY2tfYmgoJnR4cS0+YXhxX2xvY2spOwpAQCAtMTg0LDE0ICsxOTQsMTEgQEAKIH0KIAogc3RhdGljIHZvaWQgYXRoX3R4X2FkZHRvX2JhdyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9hdHhfdGlkICp0aWQsCi0JCQkgICAgIHN0cnVjdCBhdGhfYnVmICpiZikKKwkJCSAgICAgdTE2IHNlcW5vKQogewogCWludCBpbmRleCwgY2luZGV4OwogCi0JaWYgKGJmX2lzcmV0cmllZChiZikpCi0JCXJldHVybjsKLQotCWluZGV4ICA9IEFUSF9CQV9JTkRFWCh0aWQtPnNlcV9zdGFydCwgYmYtPmJmX3NlcW5vKTsKKwlpbmRleCAgPSBBVEhfQkFfSU5ERVgodGlkLT5zZXFfc3RhcnQsIHNlcW5vKTsKIAljaW5kZXggPSAodGlkLT5iYXdfaGVhZCArIGluZGV4KSAmIChBVEhfVElEX01BWF9CVUZTIC0gMSk7CiAJX19zZXRfYml0KGNpbmRleCwgdGlkLT50eF9idWYpOwogCkBAIC0yMTUsNiArMjIyLDcgQEAKIAlzdHJ1Y3QgYXRoX2J1ZiAqYmY7CiAJc3RydWN0IGxpc3RfaGVhZCBiZl9oZWFkOwogCXN0cnVjdCBhdGhfdHhfc3RhdHVzIHRzOworCXN0cnVjdCBhdGhfZnJhbWVfaW5mbyAqZmk7CiAKIAltZW1zZXQoJnRzLCAwLCBzaXplb2YodHMpKTsKIAlJTklUX0xJU1RfSEVBRCgmYmZfaGVhZCk7CkBAIC0yMjYsOCArMjM0LDkgQEAKIAkJYmYgPSBsaXN0X2ZpcnN0X2VudHJ5KCZ0aWQtPmJ1Zl9xLCBzdHJ1Y3QgYXRoX2J1ZiwgbGlzdCk7CiAJCWxpc3RfbW92ZV90YWlsKCZiZi0+bGlzdCwgJmJmX2hlYWQpOwogCi0JCWlmIChiZl9pc3JldHJpZWQoYmYpKQotCQkJYXRoX3R4X3VwZGF0ZV9iYXcoc2MsIHRpZCwgYmYtPmJmX3NlcW5vKTsKKwkJZmkgPSBnZXRfZnJhbWVfaW5mbyhiZi0+YmZfbXBkdSk7CisJCWlmIChmaS0+cmV0cmllcykKKwkJCWF0aF90eF91cGRhdGVfYmF3KHNjLCB0aWQsIGZpLT5zZXFubyk7CiAKIAkJc3Bpbl91bmxvY2soJnR4cS0+YXhxX2xvY2spOwogCQlhdGhfdHhfY29tcGxldGVfYnVmKHNjLCBiZiwgdHhxLCAmYmZfaGVhZCwgJnRzLCAwLCAwKTsKQEAgLTIzOSwxNiArMjQ4LDE1IEBACiB9CiAKIHN0YXRpYyB2b2lkIGF0aF90eF9zZXRfcmV0cnkoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfdHhxICp0eHEsCi0JCQkgICAgIHN0cnVjdCBhdGhfYnVmICpiZikKKwkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBhdGhfZnJhbWVfaW5mbyAqZmkgPSBnZXRfZnJhbWVfaW5mbyhza2IpOwogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CiAKLQliZi0+YmZfc3RhdGUuYmZfdHlwZSB8PSBCVUZfUkVUUlk7Ci0JYmYtPmJmX3JldHJpZXMrKzsKIAlUWF9TVEFUX0lOQyh0eHEtPmF4cV9xbnVtLCBhX3JldHJpZXMpOworCWlmIChmaS0+cmV0cmllcysrID4gMCkKKwkJcmV0dXJuOwogCi0Jc2tiID0gYmYtPmJmX21wZHU7CiAJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwogCWhkci0+ZnJhbWVfY29udHJvbCB8PSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9SRVRSWSk7CiB9CkBAIC0yOTgsOSArMzA2LDQxIEBACiAJcmV0dXJuIHRiZjsKIH0KIAorc3RhdGljIHZvaWQgYXRoX3R4X2NvdW50X2ZyYW1lcyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9idWYgKmJmLAorCQkJICAgICAgICBzdHJ1Y3QgYXRoX3R4X3N0YXR1cyAqdHMsIGludCB0eG9rLAorCQkJICAgICAgICBpbnQgKm5mcmFtZXMsIGludCAqbmJhZCkKK3sKKwlzdHJ1Y3QgYXRoX2ZyYW1lX2luZm8gKmZpOworCXUxNiBzZXFfc3QgPSAwOworCXUzMiBiYVtXTUVfQkFfQk1QX1NJWkUgPj4gNV07CisJaW50IGJhX2luZGV4OworCWludCBpc2FnZ3IgPSAwOworCisJKm5iYWQgPSAwOworCSpuZnJhbWVzID0gMDsKKworCWlzYWdnciA9IGJmX2lzYWdncihiZik7CisJaWYgKGlzYWdncikgeworCQlzZXFfc3QgPSB0cy0+dHNfc2VxbnVtOworCQltZW1jcHkoYmEsICZ0cy0+YmFfbG93LCBXTUVfQkFfQk1QX1NJWkUgPj4gMyk7CisJfQorCisJd2hpbGUgKGJmKSB7CisJCWZpID0gZ2V0X2ZyYW1lX2luZm8oYmYtPmJmX21wZHUpOworCQliYV9pbmRleCA9IEFUSF9CQV9JTkRFWChzZXFfc3QsIGZpLT5zZXFubyk7CisKKwkJKCpuZnJhbWVzKSsrOworCQlpZiAoIXR4b2sgfHwgKGlzYWdnciAmJiAhQVRIX0JBX0lTU0VUKGJhLCBiYV9pbmRleCkpKQorCQkJKCpuYmFkKSsrOworCisJCWJmID0gYmYtPmJmX25leHQ7CisJfQorfQorCisKIHN0YXRpYyB2b2lkIGF0aF90eF9jb21wbGV0ZV9hZ2dyKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX3R4cSAqdHhxLAogCQkJCSBzdHJ1Y3QgYXRoX2J1ZiAqYmYsIHN0cnVjdCBsaXN0X2hlYWQgKmJmX3EsCi0JCQkJIHN0cnVjdCBhdGhfdHhfc3RhdHVzICp0cywgaW50IHR4b2spCisJCQkJIHN0cnVjdCBhdGhfdHhfc3RhdHVzICp0cywgaW50IHR4b2ssIGJvb2wgcmV0cnkpCiB7CiAJc3RydWN0IGF0aF9ub2RlICphbiA9IE5VTEw7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKQEAgLTMxNiw3ICszNTYsOSBAQAogCWludCBpc2FnZ3IsIHR4ZmFpbCwgdHhwZW5kaW5nLCBzZW5kYmFyID0gMCwgbmVlZHJlc2V0ID0gMCwgbmJhZCA9IDA7CiAJYm9vbCByY191cGRhdGUgPSB0cnVlOwogCXN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZSByYXRlc1s0XTsKKwlzdHJ1Y3QgYXRoX2ZyYW1lX2luZm8gKmZpOwogCWludCBuZnJhbWVzOworCXU4IHRpZG5vOwogCiAJc2tiID0gYmYtPmJmX21wZHU7CiAJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwpAQCAtMzI1LDcgKzM2Nyw2IEBACiAJaHcgPSBiZi0+YXBoeS0+aHc7CiAKIAltZW1jcHkocmF0ZXMsIHR4X2luZm8tPmNvbnRyb2wucmF0ZXMsIHNpemVvZihyYXRlcykpOwotCW5mcmFtZXMgPSBiZi0+YmZfbmZyYW1lczsKIAogCXJjdV9yZWFkX2xvY2soKTsKIApAQCAtMzQyLDcgKzM4Myw3IEBACiAJCQkgICAgIWJmLT5iZl9zdGFsZSB8fCBiZl9uZXh0ICE9IE5VTEwpCiAJCQkJbGlzdF9tb3ZlX3RhaWwoJmJmLT5saXN0LCAmYmZfaGVhZCk7CiAKLQkJCWF0aF90eF9yY19zdGF0dXMoYmYsIHRzLCAxLCAwLCBmYWxzZSk7CisJCQlhdGhfdHhfcmNfc3RhdHVzKGJmLCB0cywgMSwgMSwgMCwgZmFsc2UpOwogCQkJYXRoX3R4X2NvbXBsZXRlX2J1ZihzYywgYmYsIHR4cSwgJmJmX2hlYWQsIHRzLAogCQkJCTAsIDApOwogCkBAIC0zNTIsMTQgKzM5MywxNSBAQAogCX0KIAogCWFuID0gKHN0cnVjdCBhdGhfbm9kZSAqKXN0YS0+ZHJ2X3ByaXY7Ci0JdGlkID0gQVRIX0FOXzJfVElEKGFuLCBiZi0+YmZfdGlkbm8pOworCXRpZG5vID0gaWVlZTgwMjExX2dldF9xb3NfY3RsKGhkcilbMF0gJiBJRUVFODAyMTFfUU9TX0NUTF9USURfTUFTSzsKKwl0aWQgPSBBVEhfQU5fMl9USUQoYW4sIHRpZG5vKTsKIAogCS8qCiAJICogVGhlIGhhcmR3YXJlIG9jY2FzaW9uYWxseSBzZW5kcyBhIHR4IHN0YXR1cyBmb3IgdGhlIHdyb25nIFRJRC4KIAkgKiBJbiB0aGlzIGNhc2UsIHRoZSBCQSBzdGF0dXMgY2Fubm90IGJlIGNvbnNpZGVyZWQgdmFsaWQgYW5kIGFsbAogCSAqIHN1YmZyYW1lcyBuZWVkIHRvIGJlIHJldHJhbnNtaXR0ZWQKIAkgKi8KLQlpZiAoYmYtPmJmX3RpZG5vICE9IHRzLT50aWQpCisJaWYgKHRpZG5vICE9IHRzLT50aWQpCiAJCXR4b2sgPSBmYWxzZTsKIAogCWlzYWdnciA9IGJmX2lzYWdncihiZik7CkBAIC0zODUsMTUgKzQyNywxNiBAQAogCUlOSVRfTElTVF9IRUFEKCZiZl9wZW5kaW5nKTsKIAlJTklUX0xJU1RfSEVBRCgmYmZfaGVhZCk7CiAKLQluYmFkID0gYXRoX3R4X251bV9iYWRmcm1zKHNjLCBiZiwgdHMsIHR4b2spOworCWF0aF90eF9jb3VudF9mcmFtZXMoc2MsIGJmLCB0cywgdHhvaywgJm5mcmFtZXMsICZuYmFkKTsKIAl3aGlsZSAoYmYpIHsKIAkJdHhmYWlsID0gdHhwZW5kaW5nID0gMDsKIAkJYmZfbmV4dCA9IGJmLT5iZl9uZXh0OwogCiAJCXNrYiA9IGJmLT5iZl9tcGR1OwogCQl0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCQlmaSA9IGdldF9mcmFtZV9pbmZvKHNrYik7CiAKLQkJaWYgKEFUSF9CQV9JU1NFVChiYSwgQVRIX0JBX0lOREVYKHNlcV9zdCwgYmYtPmJmX3NlcW5vKSkpIHsKKwkJaWYgKEFUSF9CQV9JU1NFVChiYSwgQVRIX0JBX0lOREVYKHNlcV9zdCwgZmktPnNlcW5vKSkpIHsKIAkJCS8qIHRyYW5zbWl0IGNvbXBsZXRpb24sIHN1YmZyYW1lIGlzCiAJCQkgKiBhY2tlZCBieSBibG9jayBhY2sgKi8KIAkJCWFja2VkX2NudCsrOwpAQCAtNDAxLDEwICs0NDQsOSBAQAogCQkJLyogdHJhbnNtaXQgY29tcGxldGlvbiAqLwogCQkJYWNrZWRfY250Kys7CiAJCX0gZWxzZSB7Ci0JCQlpZiAoISh0aWQtPnN0YXRlICYgQUdHUl9DTEVBTlVQKSAmJgotCQkJICAgICFiZl9sYXN0LT5iZl90eF9hYm9ydGVkKSB7Ci0JCQkJaWYgKGJmLT5iZl9yZXRyaWVzIDwgQVRIX01BWF9TV19SRVRSSUVTKSB7Ci0JCQkJCWF0aF90eF9zZXRfcmV0cnkoc2MsIHR4cSwgYmYpOworCQkJaWYgKCEodGlkLT5zdGF0ZSAmIEFHR1JfQ0xFQU5VUCkgJiYgcmV0cnkpIHsKKwkJCQlpZiAoZmktPnJldHJpZXMgPCBBVEhfTUFYX1NXX1JFVFJJRVMpIHsKKwkJCQkJYXRoX3R4X3NldF9yZXRyeShzYywgdHhxLCBiZi0+YmZfbXBkdSk7CiAJCQkJCXR4cGVuZGluZyA9IDE7CiAJCQkJfSBlbHNlIHsKIAkJCQkJYmYtPmJmX3N0YXRlLmJmX3R5cGUgfD0gQlVGX1hSRVRSWTsKQEAgLTQ0MiwxNiArNDg0LDE1IEBACiAJCQkgKiBibG9jay1hY2sgd2luZG93CiAJCQkgKi8KIAkJCXNwaW5fbG9ja19iaCgmdHhxLT5heHFfbG9jayk7Ci0JCQlhdGhfdHhfdXBkYXRlX2JhdyhzYywgdGlkLCBiZi0+YmZfc2Vxbm8pOworCQkJYXRoX3R4X3VwZGF0ZV9iYXcoc2MsIHRpZCwgZmktPnNlcW5vKTsKIAkJCXNwaW5fdW5sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKIAogCQkJaWYgKHJjX3VwZGF0ZSAmJiAoYWNrZWRfY250ID09IDEgfHwgdHhmYWlsX2NudCA9PSAxKSkgewogCQkJCW1lbWNweSh0eF9pbmZvLT5jb250cm9sLnJhdGVzLCByYXRlcywgc2l6ZW9mKHJhdGVzKSk7Ci0JCQkJYmYtPmJmX25mcmFtZXMgPSBuZnJhbWVzOwotCQkJCWF0aF90eF9yY19zdGF0dXMoYmYsIHRzLCBuYmFkLCB0eG9rLCB0cnVlKTsKKwkJCQlhdGhfdHhfcmNfc3RhdHVzKGJmLCB0cywgbmZyYW1lcywgbmJhZCwgdHhvaywgdHJ1ZSk7CiAJCQkJcmNfdXBkYXRlID0gZmFsc2U7CiAJCQl9IGVsc2UgewotCQkJCWF0aF90eF9yY19zdGF0dXMoYmYsIHRzLCBuYmFkLCB0eG9rLCBmYWxzZSk7CisJCQkJYXRoX3R4X3JjX3N0YXR1cyhiZiwgdHMsIG5mcmFtZXMsIG5iYWQsIHR4b2ssIGZhbHNlKTsKIAkJCX0KIAogCQkJYXRoX3R4X2NvbXBsZXRlX2J1ZihzYywgYmYsIHR4cSwgJmJmX2hlYWQsIHRzLApAQCAtNDcwLDE0ICs1MTEsMTMgQEAKIAkJCQkJICovCiAJCQkJCWlmICghdGJmKSB7CiAJCQkJCQlzcGluX2xvY2tfYmgoJnR4cS0+YXhxX2xvY2spOwotCQkJCQkJYXRoX3R4X3VwZGF0ZV9iYXcoc2MsIHRpZCwKLQkJCQkJCQkJYmYtPmJmX3NlcW5vKTsKKwkJCQkJCWF0aF90eF91cGRhdGVfYmF3KHNjLCB0aWQsIGZpLT5zZXFubyk7CiAJCQkJCQlzcGluX3VubG9ja19iaCgmdHhxLT5heHFfbG9jayk7CiAKIAkJCQkJCWJmLT5iZl9zdGF0ZS5iZl90eXBlIHw9CiAJCQkJCQkJQlVGX1hSRVRSWTsKLQkJCQkJCWF0aF90eF9yY19zdGF0dXMoYmYsIHRzLCBuYmFkLAotCQkJCQkJCQkwLCBmYWxzZSk7CisJCQkJCQlhdGhfdHhfcmNfc3RhdHVzKGJmLCB0cywgbmZyYW1lcywKKwkJCQkJCQkJbmJhZCwgMCwgZmFsc2UpOwogCQkJCQkJYXRoX3R4X2NvbXBsZXRlX2J1ZihzYywgYmYsIHR4cSwKIAkJCQkJCQkJICAgICZiZl9oZWFkLAogCQkJCQkJCQkgICAgdHMsIDAsIDApOwpAQCAtNjExLDYgKzY1MSw3IEBACiAJdTE2IG1pbmxlbjsKIAl1OCBmbGFncywgcml4OwogCWludCB3aWR0aCwgc3RyZWFtcywgaGFsZl9naSwgbmRlbGltLCBtaW5kZWxpbTsKKwlzdHJ1Y3QgYXRoX2ZyYW1lX2luZm8gKmZpID0gZ2V0X2ZyYW1lX2luZm8oYmYtPmJmX21wZHUpOwogCiAJLyogU2VsZWN0IHN0YW5kYXJkIG51bWJlciBvZiBkZWxpbWl0ZXJzIGJhc2VkIG9uIGZyYW1lIGxlbmd0aCBhbG9uZSAqLwogCW5kZWxpbSA9IEFUSF9BR0dSX0dFVF9OREVMSU0oZnJtbGVuKTsKQEAgLTYyMSw3ICs2NjIsNyBAQAogCSAqIFRPRE8gLSB0aGlzIGNvdWxkIGJlIGltcHJvdmVkIHRvIGJlIGRlcGVuZGVudCBvbiB0aGUgcmF0ZS4KIAkgKiAgICAgIFRoZSBoYXJkd2FyZSBjYW4ga2VlcCB1cCBhdCBsb3dlciByYXRlcywgYnV0IG5vdCBoaWdoZXIgcmF0ZXMKIAkgKi8KLQlpZiAoYmYtPmJmX2tleXR5cGUgIT0gQVRIOUtfS0VZX1RZUEVfQ0xFQVIpCisJaWYgKGZpLT5rZXlpeCAhPSBBVEg5S19UWEtFWUlYX0lOVkFMSUQpCiAJCW5kZWxpbSArPSBBVEhfQUdHUl9FTkNSWVBUREVMSU07CiAKIAkvKgpAQCAtNjY1LDcgKzcwNiw4IEBACiBzdGF0aWMgZW51bSBBVEhfQUdHUl9TVEFUVVMgYXRoX3R4X2Zvcm1fYWdncihzdHJ1Y3QgYXRoX3NvZnRjICpzYywKIAkJCQkJICAgICBzdHJ1Y3QgYXRoX3R4cSAqdHhxLAogCQkJCQkgICAgIHN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkLAotCQkJCQkgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmJmX3EpCisJCQkJCSAgICAgc3RydWN0IGxpc3RfaGVhZCAqYmZfcSwKKwkJCQkJICAgICBpbnQgKmFnZ3JfbGVuKQogewogI2RlZmluZSBQQURCWVRFUyhfbGVuKSAoKDQgLSAoKF9sZW4pICUgNCkpICUgNCkKIAlzdHJ1Y3QgYXRoX2J1ZiAqYmYsICpiZl9maXJzdCwgKmJmX3ByZXYgPSBOVUxMOwpAQCAtNjc0LDE0ICs3MTYsMTYgQEAKIAkJYWxfZGVsdGEsIGhfYmF3ID0gdGlkLT5iYXdfc2l6ZSAvIDI7CiAJZW51bSBBVEhfQUdHUl9TVEFUVVMgc3RhdHVzID0gQVRIX0FHR1JfRE9ORTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm87CisJc3RydWN0IGF0aF9mcmFtZV9pbmZvICpmaTsKIAogCWJmX2ZpcnN0ID0gbGlzdF9maXJzdF9lbnRyeSgmdGlkLT5idWZfcSwgc3RydWN0IGF0aF9idWYsIGxpc3QpOwogCiAJZG8gewogCQliZiA9IGxpc3RfZmlyc3RfZW50cnkoJnRpZC0+YnVmX3EsIHN0cnVjdCBhdGhfYnVmLCBsaXN0KTsKKwkJZmkgPSBnZXRfZnJhbWVfaW5mbyhiZi0+YmZfbXBkdSk7CiAKIAkJLyogZG8gbm90IHN0ZXAgb3ZlciBibG9jay1hY2sgd2luZG93ICovCi0JCWlmICghQkFXX1dJVEhJTih0aWQtPnNlcV9zdGFydCwgdGlkLT5iYXdfc2l6ZSwgYmYtPmJmX3NlcW5vKSkgeworCQlpZiAoIUJBV19XSVRISU4odGlkLT5zZXFfc3RhcnQsIHRpZC0+YmF3X3NpemUsIGZpLT5zZXFubykpIHsKIAkJCXN0YXR1cyA9IEFUSF9BR0dSX0JBV19DTE9TRUQ7CiAJCQlicmVhazsKIAkJfQpAQCAtNjkyLDcgKzczNiw3IEBACiAJCX0KIAogCQkvKiBkbyBub3QgZXhjZWVkIGFnZ3JlZ2F0aW9uIGxpbWl0ICovCi0JCWFsX2RlbHRhID0gQVRIX0FHR1JfREVMSU1fU1ogKyBiZi0+YmZfZnJtbGVuOworCQlhbF9kZWx0YSA9IEFUSF9BR0dSX0RFTElNX1NaICsgZmktPmZyYW1lbGVuOwogCiAJCWlmIChuZnJhbWVzICYmCiAJCSAgICAoYWdncl9saW1pdCA8IChhbCArIGJwYWQgKyBhbF9kZWx0YSArIHByZXZfYWwpKSkgewpAQCAtNzE5LDE0ICs3NjMsMTUgQEAKIAkJICogR2V0IHRoZSBkZWxpbWl0ZXJzIG5lZWRlZCB0byBtZWV0IHRoZSBNUERVCiAJCSAqIGRlbnNpdHkgZm9yIHRoaXMgbm9kZS4KIAkJICovCi0JCW5kZWxpbSA9IGF0aF9jb21wdXRlX251bV9kZWxpbXMoc2MsIHRpZCwgYmZfZmlyc3QsIGJmLT5iZl9mcm1sZW4pOworCQluZGVsaW0gPSBhdGhfY29tcHV0ZV9udW1fZGVsaW1zKHNjLCB0aWQsIGJmX2ZpcnN0LCBmaS0+ZnJhbWVsZW4pOwogCQlicGFkID0gUEFEQllURVMoYWxfZGVsdGEpICsgKG5kZWxpbSA8PCAyKTsKIAogCQliZi0+YmZfbmV4dCA9IE5VTEw7CiAJCWF0aDlrX2h3X3NldF9kZXNjX2xpbmsoc2MtPnNjX2FoLCBiZi0+YmZfZGVzYywgMCk7CiAKIAkJLyogbGluayBidWZmZXJzIG9mIHRoaXMgZnJhbWUgdG8gdGhlIGFnZ3JlZ2F0ZSAqLwotCQlhdGhfdHhfYWRkdG9fYmF3KHNjLCB0aWQsIGJmKTsKKwkJaWYgKCFmaS0+cmV0cmllcykKKwkJCWF0aF90eF9hZGR0b19iYXcoc2MsIHRpZCwgZmktPnNlcW5vKTsKIAkJYXRoOWtfaHdfc2V0MTFuX2FnZ3JfbWlkZGxlKHNjLT5zY19haCwgYmYtPmJmX2Rlc2MsIG5kZWxpbSk7CiAJCWxpc3RfbW92ZV90YWlsKCZiZi0+bGlzdCwgYmZfcSk7CiAJCWlmIChiZl9wcmV2KSB7CkBAIC03MzgsOCArNzgzLDcgQEAKIAogCX0gd2hpbGUgKCFsaXN0X2VtcHR5KCZ0aWQtPmJ1Zl9xKSk7CiAKLQliZl9maXJzdC0+YmZfYWwgPSBhbDsKLQliZl9maXJzdC0+YmZfbmZyYW1lcyA9IG5mcmFtZXM7CisJKmFnZ3JfbGVuID0gYWw7CiAKIAlyZXR1cm4gc3RhdHVzOwogI3VuZGVmIFBBREJZVEVTCkBAIC03NTAsNyArNzk0LDkgQEAKIHsKIAlzdHJ1Y3QgYXRoX2J1ZiAqYmY7CiAJZW51bSBBVEhfQUdHUl9TVEFUVVMgc3RhdHVzOworCXN0cnVjdCBhdGhfZnJhbWVfaW5mbyAqZmk7CiAJc3RydWN0IGxpc3RfaGVhZCBiZl9xOworCWludCBhZ2dyX2xlbjsKIAogCWRvIHsKIAkJaWYgKGxpc3RfZW1wdHkoJnRpZC0+YnVmX3EpKQpAQCAtNzU4LDcgKzgwNCw3IEBACiAKIAkJSU5JVF9MSVNUX0hFQUQoJmJmX3EpOwogCi0JCXN0YXR1cyA9IGF0aF90eF9mb3JtX2FnZ3Ioc2MsIHR4cSwgdGlkLCAmYmZfcSk7CisJCXN0YXR1cyA9IGF0aF90eF9mb3JtX2FnZ3Ioc2MsIHR4cSwgdGlkLCAmYmZfcSwgJmFnZ3JfbGVuKTsKIAogCQkvKgogCQkgKiBubyBmcmFtZXMgcGlja2VkIHVwIHRvIGJlIGFnZ3JlZ2F0ZWQ7CkBAIC03NzEsMTggKzgxNywyMCBAQAogCQliZi0+YmZfbGFzdGJmID0gbGlzdF9lbnRyeShiZl9xLnByZXYsIHN0cnVjdCBhdGhfYnVmLCBsaXN0KTsKIAogCQkvKiBpZiBvbmx5IG9uZSBmcmFtZSwgc2VuZCBhcyBub24tYWdncmVnYXRlICovCi0JCWlmIChiZi0+YmZfbmZyYW1lcyA9PSAxKSB7CisJCWlmIChiZiA9PSBiZi0+YmZfbGFzdGJmKSB7CisJCQlmaSA9IGdldF9mcmFtZV9pbmZvKGJmLT5iZl9tcGR1KTsKKwogCQkJYmYtPmJmX3N0YXRlLmJmX3R5cGUgJj0gfkJVRl9BR0dSOwogCQkJYXRoOWtfaHdfY2xyMTFuX2FnZ3Ioc2MtPnNjX2FoLCBiZi0+YmZfZGVzYyk7Ci0JCQlhdGhfYnVmX3NldF9yYXRlKHNjLCBiZik7CisJCQlhdGhfYnVmX3NldF9yYXRlKHNjLCBiZiwgZmktPmZyYW1lbGVuKTsKIAkJCWF0aF90eF90eHFhZGRidWYoc2MsIHR4cSwgJmJmX3EpOwogCQkJY29udGludWU7CiAJCX0KIAogCQkvKiBzZXR1cCBmaXJzdCBkZXNjIG9mIGFnZ3JlZ2F0ZSAqLwogCQliZi0+YmZfc3RhdGUuYmZfdHlwZSB8PSBCVUZfQUdHUjsKLQkJYXRoX2J1Zl9zZXRfcmF0ZShzYywgYmYpOwotCQlhdGg5a19od19zZXQxMW5fYWdncl9maXJzdChzYy0+c2NfYWgsIGJmLT5iZl9kZXNjLCBiZi0+YmZfYWwpOworCQlhdGhfYnVmX3NldF9yYXRlKHNjLCBiZiwgYWdncl9sZW4pOworCQlhdGg5a19od19zZXQxMW5fYWdncl9maXJzdChzYy0+c2NfYWgsIGJmLT5iZl9kZXNjLCBhZ2dyX2xlbik7CiAKIAkJLyogYW5jaG9yIGxhc3QgZGVzYyBvZiBhZ2dyZWdhdGUgKi8KIAkJYXRoOWtfaHdfc2V0MTFuX2FnZ3JfbGFzdChzYy0+c2NfYWgsIGJmLT5iZl9sYXN0YmYtPmJmX2Rlc2MpOwpAQCAtNzkwLDcgKzgzOCw3IEBACiAJCWF0aF90eF90eHFhZGRidWYoc2MsIHR4cSwgJmJmX3EpOwogCQlUWF9TVEFUX0lOQyh0eHEtPmF4cV9xbnVtLCBhX2FnZ3IpOwogCi0JfSB3aGlsZSAodHhxLT5heHFfZGVwdGggPCBBVEhfQUdHUl9NSU5fUURFUFRIICYmCisJfSB3aGlsZSAodHhxLT5heHFfYW1wZHVfZGVwdGggPCBBVEhfQUdHUl9NSU5fUURFUFRIICYmCiAJCSBzdGF0dXMgIT0gQVRIX0FHR1JfQkFXX0NMT1NFRCk7CiB9CiAKQEAgLTgxNyw3ICs4NjUsNyBAQAogewogCXN0cnVjdCBhdGhfbm9kZSAqYW4gPSAoc3RydWN0IGF0aF9ub2RlICopc3RhLT5kcnZfcHJpdjsKIAlzdHJ1Y3QgYXRoX2F0eF90aWQgKnR4dGlkID0gQVRIX0FOXzJfVElEKGFuLCB0aWQpOwotCXN0cnVjdCBhdGhfdHhxICp0eHEgPSAmc2MtPnR4LnR4cVt0eHRpZC0+YWMtPnFudW1dOworCXN0cnVjdCBhdGhfdHhxICp0eHEgPSB0eHRpZC0+YWMtPnR4cTsKIAogCWlmICh0eHRpZC0+c3RhdGUgJiBBR0dSX0NMRUFOVVApCiAJCXJldHVybjsKQEAgLTg4OCwxMCArOTM2LDE2IEBACiAJc3RydWN0IGF0aF9odyAqYWggPSBzYy0+c2NfYWg7CiAJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihhaCk7CiAJc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gcWk7CisJc3RhdGljIGNvbnN0IGludCBzdWJ0eXBlX3R4cV90b19od3FbXSA9IHsKKwkJW1dNRV9BQ19CRV0gPSBBVEhfVFhRX0FDX0JFLAorCQlbV01FX0FDX0JLXSA9IEFUSF9UWFFfQUNfQkssCisJCVtXTUVfQUNfVkldID0gQVRIX1RYUV9BQ19WSSwKKwkJW1dNRV9BQ19WT10gPSBBVEhfVFhRX0FDX1ZPLAorCX07CiAJaW50IHFudW0sIGk7CiAKIAltZW1zZXQoJnFpLCAwLCBzaXplb2YocWkpKTsKLQlxaS50cWlfc3VidHlwZSA9IHN1YnR5cGU7CisJcWkudHFpX3N1YnR5cGUgPSBzdWJ0eXBlX3R4cV90b19od3Fbc3VidHlwZV07CiAJcWkudHFpX2FpZnMgPSBBVEg5S19UWFFfVVNFREVGQVVMVDsKIAlxaS50cWlfY3dtaW4gPSBBVEg5S19UWFFfVVNFREVGQVVMVDsKIAlxaS50cWlfY3dtYXggPSBBVEg5S19UWFFfVVNFREVGQVVMVDsKQEAgLTkzMSwyMiArOTg1LDIxIEBACiAJCXJldHVybiBOVUxMOwogCX0KIAlpZiAocW51bSA+PSBBUlJBWV9TSVpFKHNjLT50eC50eHEpKSB7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRkFUQUwsCi0JCQkgICJxbnVtICV1IG91dCBvZiByYW5nZSwgbWF4ICV1IVxuIiwKLQkJCSAgcW51bSwgKHVuc2lnbmVkIGludClBUlJBWV9TSVpFKHNjLT50eC50eHEpKTsKKwkJYXRoX2Vycihjb21tb24sICJxbnVtICV1IG91dCBvZiByYW5nZSwgbWF4ICV6dSFcbiIsCisJCQlxbnVtLCBBUlJBWV9TSVpFKHNjLT50eC50eHEpKTsKIAkJYXRoOWtfaHdfcmVsZWFzZXR4cXVldWUoYWgsIHFudW0pOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAJaWYgKCFBVEhfVFhRX1NFVFVQKHNjLCBxbnVtKSkgewogCQlzdHJ1Y3QgYXRoX3R4cSAqdHhxID0gJnNjLT50eC50eHFbcW51bV07CiAKLQkJdHhxLT5heHFfY2xhc3MgPSBzdWJ0eXBlOwogCQl0eHEtPmF4cV9xbnVtID0gcW51bTsKIAkJdHhxLT5heHFfbGluayA9IE5VTEw7CiAJCUlOSVRfTElTVF9IRUFEKCZ0eHEtPmF4cV9xKTsKIAkJSU5JVF9MSVNUX0hFQUQoJnR4cS0+YXhxX2FjcSk7CiAJCXNwaW5fbG9ja19pbml0KCZ0eHEtPmF4cV9sb2NrKTsKIAkJdHhxLT5heHFfZGVwdGggPSAwOworCQl0eHEtPmF4cV9hbXBkdV9kZXB0aCA9IDA7CiAJCXR4cS0+YXhxX3R4X2lucHJvZ3Jlc3MgPSBmYWxzZTsKIAkJc2MtPnR4LnR4cXNldHVwIHw9IDE8PHFudW07CiAKQEAgLTk4NSw4ICsxMDM4LDggQEAKIAlxaS50cWlfcmVhZHlUaW1lID0gcWluZm8tPnRxaV9yZWFkeVRpbWU7CiAKIAlpZiAoIWF0aDlrX2h3X3NldF90eHFfcHJvcHMoYWgsIHFudW0sICZxaSkpIHsKLQkJYXRoX3ByaW50KGF0aDlrX2h3X2NvbW1vbihzYy0+c2NfYWgpLCBBVEhfREJHX0ZBVEFMLAotCQkJICAiVW5hYmxlIHRvIHVwZGF0ZSBoYXJkd2FyZSBxdWV1ZSAldSFcbiIsIHFudW0pOworCQlhdGhfZXJyKGF0aDlrX2h3X2NvbW1vbihzYy0+c2NfYWgpLAorCQkJIlVuYWJsZSB0byB1cGRhdGUgaGFyZHdhcmUgcXVldWUgJXUhXG4iLCBxbnVtKTsKIAkJZXJyb3IgPSAtRUlPOwogCX0gZWxzZSB7CiAJCWF0aDlrX2h3X3Jlc2V0dHhxdWV1ZShhaCwgcW51bSk7CkBAIC0xMDE2LDYgKzEwNjksMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGJvb2wgYmZfaXNfYW1wZHVfbm90X3Byb2Jpbmcoc3RydWN0IGF0aF9idWYgKmJmKQoreworICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IoYmYtPmJmX21wZHUpOworICAgIHJldHVybiBiZl9pc2FtcGR1KGJmKSAmJiAhKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9SQVRFX0NUUkxfUFJPQkUpOworfQorCiAvKgogICogRHJhaW4gYSBnaXZlbiBUWCBxdWV1ZSAoY291bGQgYmUgQmVhY29uIG9yIERhdGEpCiAgKgpAQCAtMTA2Miw4ICsxMTIxLDYgQEAKIAkJfQogCiAJCWxhc3RiZiA9IGJmLT5iZl9sYXN0YmY7Ci0JCWlmICghcmV0cnlfdHgpCi0JCQlsYXN0YmYtPmJmX3R4X2Fib3J0ZWQgPSB0cnVlOwogCiAJCWlmIChzYy0+c2NfYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9FRE1BKSB7CiAJCQlsaXN0X2N1dF9wb3NpdGlvbigmYmZfaGVhZCwKQEAgLTEwNzYsMTEgKzExMzMsMTMgQEAKIAkJfQogCiAJCXR4cS0+YXhxX2RlcHRoLS07Ci0KKwkJaWYgKGJmX2lzX2FtcGR1X25vdF9wcm9iaW5nKGJmKSkKKwkJCXR4cS0+YXhxX2FtcGR1X2RlcHRoLS07CiAJCXNwaW5fdW5sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKIAogCQlpZiAoYmZfaXNhbXBkdShiZikpCi0JCQlhdGhfdHhfY29tcGxldGVfYWdncihzYywgdHhxLCBiZiwgJmJmX2hlYWQsICZ0cywgMCk7CisJCQlhdGhfdHhfY29tcGxldGVfYWdncihzYywgdHhxLCBiZiwgJmJmX2hlYWQsICZ0cywgMCwKKwkJCQkJICAgICByZXRyeV90eCk7CiAJCWVsc2UKIAkJCWF0aF90eF9jb21wbGV0ZV9idWYoc2MsIGJmLCB0eHEsICZiZl9oZWFkLCAmdHMsIDAsIDApOwogCX0KQEAgLTExMDEsNyArMTE2MCw3IEBACiAKIAkJCWlmIChiZl9pc2FtcGR1KGJmKSkKIAkJCQlhdGhfdHhfY29tcGxldGVfYWdncihzYywgdHhxLCBiZiwgJmJmX2hlYWQsCi0JCQkJCQkgICAgICZ0cywgMCk7CisJCQkJCQkgICAgICZ0cywgMCwgcmV0cnlfdHgpOwogCQkJZWxzZQogCQkJCWF0aF90eF9jb21wbGV0ZV9idWYoc2MsIGJmLCB0eHEsICZiZl9oZWFkLAogCQkJCQkJICAgICZ0cywgMCwgMCk7CkBAIC0xMTQzLDcgKzEyMDIsNyBAQAogCX0KIAogCWlmIChucGVuZCkKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19GQVRBTCwgIkZhaWxlZCB0byBzdG9wIFRYIERNQSFcbiIpOworCQlhdGhfZXJyKGNvbW1vbiwgIkZhaWxlZCB0byBzdG9wIFRYIERNQSFcbiIpOwogCiAJZm9yIChpID0gMDsgaSA8IEFUSDlLX05VTV9UWF9RVUVVRVM7IGkrKykgewogCQlpZiAoQVRIX1RYUV9TRVRVUChzYywgaSkpCkBAIC0xMjAyLDI0ICsxMjYxLDYgQEAKIAl9CiB9CiAKLWludCBhdGhfdHhfc2V0dXAoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBoYWx0eXBlKQotewotCXN0cnVjdCBhdGhfdHhxICp0eHE7Ci0KLQlpZiAoaGFsdHlwZSA+PSBBUlJBWV9TSVpFKHNjLT50eC5od3FfbWFwKSkgewotCQlhdGhfcHJpbnQoYXRoOWtfaHdfY29tbW9uKHNjLT5zY19haCksIEFUSF9EQkdfRkFUQUwsCi0JCQkgICJIQUwgQUMgJXUgb3V0IG9mIHJhbmdlLCBtYXggJXp1IVxuIiwKLQkJCSBoYWx0eXBlLCBBUlJBWV9TSVpFKHNjLT50eC5od3FfbWFwKSk7Ci0JCXJldHVybiAwOwotCX0KLQl0eHEgPSBhdGhfdHhxX3NldHVwKHNjLCBBVEg5S19UWF9RVUVVRV9EQVRBLCBoYWx0eXBlKTsKLQlpZiAodHhxICE9IE5VTEwpIHsKLQkJc2MtPnR4Lmh3cV9tYXBbaGFsdHlwZV0gPSB0eHEtPmF4cV9xbnVtOwotCQlyZXR1cm4gMTsKLQl9IGVsc2UKLQkJcmV0dXJuIDA7Ci19Ci0KIC8qKioqKioqKioqKi8KIC8qIFRYLCBETUEgKi8KIC8qKioqKioqKioqKi8KQEAgLTEyNDUsOCArMTI4Niw4IEBACiAKIAliZiA9IGxpc3RfZmlyc3RfZW50cnkoaGVhZCwgc3RydWN0IGF0aF9idWYsIGxpc3QpOwogCi0JYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19RVUVVRSwKLQkJICAicW51bTogJWQsIHR4cSBkZXB0aDogJWRcbiIsIHR4cS0+YXhxX3FudW0sIHR4cS0+YXhxX2RlcHRoKTsKKwlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19RVUVVRSwKKwkJInFudW06ICVkLCB0eHEgZGVwdGg6ICVkXG4iLCB0eHEtPmF4cV9xbnVtLCB0eHEtPmF4cV9kZXB0aCk7CiAKIAlpZiAoc2MtPnNjX2FoLT5jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfRURNQSkgewogCQlpZiAodHhxLT5heHFfZGVwdGggPj0gQVRIX1RYRklGT19ERVBUSCkgewpAQCAtMTI1NCw0NyArMTI5NSw0NSBAQAogCQkJcmV0dXJuOwogCQl9CiAJCWlmICghbGlzdF9lbXB0eSgmdHhxLT50eHFfZmlmb1t0eHEtPnR4cV9oZWFkaWR4XSkpCi0JCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX1hNSVQsCi0JCQkJICAiSW5pdGlhbGl6aW5nIHR4IGZpZm8gJWQgd2hpY2ggIgotCQkJCSAgImlzIG5vbi1lbXB0eVxuIiwKLQkJCQkgIHR4cS0+dHhxX2hlYWRpZHgpOworCQkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfWE1JVCwKKwkJCQkiSW5pdGlhbGl6aW5nIHR4IGZpZm8gJWQgd2hpY2ggaXMgbm9uLWVtcHR5XG4iLAorCQkJCXR4cS0+dHhxX2hlYWRpZHgpOwogCQlJTklUX0xJU1RfSEVBRCgmdHhxLT50eHFfZmlmb1t0eHEtPnR4cV9oZWFkaWR4XSk7CiAJCWxpc3Rfc3BsaWNlX2luaXQoaGVhZCwgJnR4cS0+dHhxX2ZpZm9bdHhxLT50eHFfaGVhZGlkeF0pOwogCQlJTkNSKHR4cS0+dHhxX2hlYWRpZHgsIEFUSF9UWEZJRk9fREVQVEgpOwogCQlhdGg5a19od19wdXR0eGJ1ZihhaCwgdHhxLT5heHFfcW51bSwgYmYtPmJmX2RhZGRyKTsKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19YTUlULAotCQkJICAiVFhEUFsldV0gPSAlbGx4ICglcClcbiIsCi0JCQkgIHR4cS0+YXhxX3FudW0sIGl0bzY0KGJmLT5iZl9kYWRkciksIGJmLT5iZl9kZXNjKTsKKwkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfWE1JVCwgIlRYRFBbJXVdID0gJWxseCAoJXApXG4iLAorCQkJdHhxLT5heHFfcW51bSwgaXRvNjQoYmYtPmJmX2RhZGRyKSwgYmYtPmJmX2Rlc2MpOwogCX0gZWxzZSB7CiAJCWxpc3Rfc3BsaWNlX3RhaWxfaW5pdChoZWFkLCAmdHhxLT5heHFfcSk7CiAKIAkJaWYgKHR4cS0+YXhxX2xpbmsgPT0gTlVMTCkgewogCQkJYXRoOWtfaHdfcHV0dHhidWYoYWgsIHR4cS0+YXhxX3FudW0sIGJmLT5iZl9kYWRkcik7Ci0JCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX1hNSVQsCi0JCQkJCSJUWERQWyV1XSA9ICVsbHggKCVwKVxuIiwKLQkJCQkJdHhxLT5heHFfcW51bSwgaXRvNjQoYmYtPmJmX2RhZGRyKSwKLQkJCQkJYmYtPmJmX2Rlc2MpOworCQkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfWE1JVCwgIlRYRFBbJXVdID0gJWxseCAoJXApXG4iLAorCQkJCXR4cS0+YXhxX3FudW0sIGl0bzY0KGJmLT5iZl9kYWRkciksCisJCQkJYmYtPmJmX2Rlc2MpOwogCQl9IGVsc2UgewogCQkJKnR4cS0+YXhxX2xpbmsgPSBiZi0+YmZfZGFkZHI7Ci0JCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX1hNSVQsCi0JCQkJCSJsaW5rWyV1XSAoJXApPSVsbHggKCVwKVxuIiwKLQkJCQkJdHhxLT5heHFfcW51bSwgdHhxLT5heHFfbGluaywKLQkJCQkJaXRvNjQoYmYtPmJmX2RhZGRyKSwgYmYtPmJmX2Rlc2MpOworCQkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfWE1JVCwKKwkJCQkibGlua1sldV0gKCVwKT0lbGx4ICglcClcbiIsCisJCQkJdHhxLT5heHFfcW51bSwgdHhxLT5heHFfbGluaywKKwkJCQlpdG82NChiZi0+YmZfZGFkZHIpLCBiZi0+YmZfZGVzYyk7CiAJCX0KIAkJYXRoOWtfaHdfZ2V0X2Rlc2NfbGluayhhaCwgYmYtPmJmX2xhc3RiZi0+YmZfZGVzYywKIAkJCQkgICAgICAgJnR4cS0+YXhxX2xpbmspOwogCQlhdGg5a19od190eHN0YXJ0KGFoLCB0eHEtPmF4cV9xbnVtKTsKIAl9CiAJdHhxLT5heHFfZGVwdGgrKzsKKwlpZiAoYmZfaXNfYW1wZHVfbm90X3Byb2JpbmcoYmYpKQorCQl0eHEtPmF4cV9hbXBkdV9kZXB0aCsrOwogfQogCiBzdGF0aWMgdm9pZCBhdGhfdHhfc2VuZF9hbXBkdShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9hdHhfdGlkICp0aWQsCi0JCQkgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpiZl9oZWFkLAotCQkJICAgICAgc3RydWN0IGF0aF90eF9jb250cm9sICp0eGN0bCkKKwkJCSAgICAgIHN0cnVjdCBhdGhfYnVmICpiZiwgc3RydWN0IGF0aF90eF9jb250cm9sICp0eGN0bCkKIHsKLQlzdHJ1Y3QgYXRoX2J1ZiAqYmY7CisJc3RydWN0IGF0aF9mcmFtZV9pbmZvICpmaSA9IGdldF9mcmFtZV9pbmZvKGJmLT5iZl9tcGR1KTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGJmX2hlYWQ7CiAKLQliZiA9IGxpc3RfZmlyc3RfZW50cnkoYmZfaGVhZCwgc3RydWN0IGF0aF9idWYsIGxpc3QpOwogCWJmLT5iZl9zdGF0ZS5iZl90eXBlIHw9IEJVRl9BTVBEVTsKIAlUWF9TVEFUX0lOQyh0eGN0bC0+dHhxLT5heHFfcW51bSwgYV9xdWV1ZWQpOwogCkBAIC0xMzA2LDU2ICsxMzQ1LDQ3IEBACiAJICogLSBoL3cgcXVldWUgZGVwdGggZXhjZWVkcyBsb3cgd2F0ZXIgbWFyawogCSAqLwogCWlmICghbGlzdF9lbXB0eSgmdGlkLT5idWZfcSkgfHwgdGlkLT5wYXVzZWQgfHwKLQkgICAgIUJBV19XSVRISU4odGlkLT5zZXFfc3RhcnQsIHRpZC0+YmF3X3NpemUsIGJmLT5iZl9zZXFubykgfHwKLQkgICAgdHhjdGwtPnR4cS0+YXhxX2RlcHRoID49IEFUSF9BR0dSX01JTl9RREVQVEgpIHsKKwkgICAgIUJBV19XSVRISU4odGlkLT5zZXFfc3RhcnQsIHRpZC0+YmF3X3NpemUsIGZpLT5zZXFubykgfHwKKwkgICAgdHhjdGwtPnR4cS0+YXhxX2FtcGR1X2RlcHRoID49IEFUSF9BR0dSX01JTl9RREVQVEgpIHsKIAkJLyoKIAkJICogQWRkIHRoaXMgZnJhbWUgdG8gc29mdHdhcmUgcXVldWUgZm9yIHNjaGVkdWxpbmcgbGF0ZXIKIAkJICogZm9yIGFnZ3JlZ2F0aW9uLgogCQkgKi8KLQkJbGlzdF9tb3ZlX3RhaWwoJmJmLT5saXN0LCAmdGlkLT5idWZfcSk7CisJCWxpc3RfYWRkX3RhaWwoJmJmLT5saXN0LCAmdGlkLT5idWZfcSk7CiAJCWF0aF90eF9xdWV1ZV90aWQodHhjdGwtPnR4cSwgdGlkKTsKIAkJcmV0dXJuOwogCX0KIAorCUlOSVRfTElTVF9IRUFEKCZiZl9oZWFkKTsKKwlsaXN0X2FkZCgmYmYtPmxpc3QsICZiZl9oZWFkKTsKKwogCS8qIEFkZCBzdWItZnJhbWUgdG8gQkFXICovCi0JYXRoX3R4X2FkZHRvX2JhdyhzYywgdGlkLCBiZik7CisJaWYgKCFmaS0+cmV0cmllcykKKwkJYXRoX3R4X2FkZHRvX2JhdyhzYywgdGlkLCBmaS0+c2Vxbm8pOwogCiAJLyogUXVldWUgdG8gaC93IHdpdGhvdXQgYWdncmVnYXRpb24gKi8KLQliZi0+YmZfbmZyYW1lcyA9IDE7CiAJYmYtPmJmX2xhc3RiZiA9IGJmOwotCWF0aF9idWZfc2V0X3JhdGUoc2MsIGJmKTsKLQlhdGhfdHhfdHhxYWRkYnVmKHNjLCB0eGN0bC0+dHhxLCBiZl9oZWFkKTsKKwlhdGhfYnVmX3NldF9yYXRlKHNjLCBiZiwgZmktPmZyYW1lbGVuKTsKKwlhdGhfdHhfdHhxYWRkYnVmKHNjLCB0eGN0bC0+dHhxLCAmYmZfaGVhZCk7CiB9CiAKLXN0YXRpYyB2b2lkIGF0aF90eF9zZW5kX2h0X25vcm1hbChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF90eHEgKnR4cSwKLQkJCQkgIHN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkLAotCQkJCSAgc3RydWN0IGxpc3RfaGVhZCAqYmZfaGVhZCkKK3N0YXRpYyB2b2lkIGF0aF90eF9zZW5kX25vcm1hbChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF90eHEgKnR4cSwKKwkJCSAgICAgICBzdHJ1Y3QgYXRoX2F0eF90aWQgKnRpZCwKKwkJCSAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpiZl9oZWFkKQogeworCXN0cnVjdCBhdGhfZnJhbWVfaW5mbyAqZmk7CiAJc3RydWN0IGF0aF9idWYgKmJmOwogCiAJYmYgPSBsaXN0X2ZpcnN0X2VudHJ5KGJmX2hlYWQsIHN0cnVjdCBhdGhfYnVmLCBsaXN0KTsKIAliZi0+YmZfc3RhdGUuYmZfdHlwZSAmPSB+QlVGX0FNUERVOwogCiAJLyogdXBkYXRlIHN0YXJ0aW5nIHNlcXVlbmNlIG51bWJlciBmb3Igc3Vic2VxdWVudCBBRERCQSByZXF1ZXN0ICovCi0JSU5DUih0aWQtPnNlcV9zdGFydCwgSUVFRTgwMjExX1NFUV9NQVgpOwotCi0JYmYtPmJmX25mcmFtZXMgPSAxOwotCWJmLT5iZl9sYXN0YmYgPSBiZjsKLQlhdGhfYnVmX3NldF9yYXRlKHNjLCBiZik7Ci0JYXRoX3R4X3R4cWFkZGJ1ZihzYywgdHhxLCBiZl9oZWFkKTsKLQlUWF9TVEFUX0lOQyh0eHEtPmF4cV9xbnVtLCBxdWV1ZWQpOwotfQotCi1zdGF0aWMgdm9pZCBhdGhfdHhfc2VuZF9ub3JtYWwoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfdHhxICp0eHEsCi0JCQkgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqYmZfaGVhZCkKLXsKLQlzdHJ1Y3QgYXRoX2J1ZiAqYmY7Ci0KLQliZiA9IGxpc3RfZmlyc3RfZW50cnkoYmZfaGVhZCwgc3RydWN0IGF0aF9idWYsIGxpc3QpOworCWlmICh0aWQpCisJCUlOQ1IodGlkLT5zZXFfc3RhcnQsIElFRUU4MDIxMV9TRVFfTUFYKTsKIAogCWJmLT5iZl9sYXN0YmYgPSBiZjsKLQliZi0+YmZfbmZyYW1lcyA9IDE7Ci0JYXRoX2J1Zl9zZXRfcmF0ZShzYywgYmYpOworCWZpID0gZ2V0X2ZyYW1lX2luZm8oYmYtPmJmX21wZHUpOworCWF0aF9idWZfc2V0X3JhdGUoc2MsIGJmLCBmaS0+ZnJhbWVsZW4pOwogCWF0aF90eF90eHFhZGRidWYoc2MsIHR4cSwgYmZfaGVhZCk7CiAJVFhfU1RBVF9JTkModHhxLT5heHFfcW51bSwgcXVldWVkKTsKIH0KQEAgLTEzODMsNDAgKzE0MTMsNTIgQEAKIAlyZXR1cm4gaHR5cGU7CiB9CiAKLXN0YXRpYyB2b2lkIGFzc2lnbl9hZ2dyX3RpZF9zZXFubyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCSAgc3RydWN0IGF0aF9idWYgKmJmKQorc3RhdGljIHZvaWQgc2V0dXBfZnJhbWVfaW5mbyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgICAgaW50IGZyYW1lbGVuKQogeworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOwogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhID0gdHhfaW5mby0+Y29udHJvbC5zdGE7CisJc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqaHdfa2V5ID0gdHhfaW5mby0+Y29udHJvbC5od19rZXk7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKKwlzdHJ1Y3QgYXRoX2ZyYW1lX2luZm8gKmZpID0gZ2V0X2ZyYW1lX2luZm8oc2tiKTsKIAlzdHJ1Y3QgYXRoX25vZGUgKmFuOwogCXN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkOwotCV9fbGUxNiBmYzsKLQl1OCAqcWM7CisJZW51bSBhdGg5a19rZXlfdHlwZSBrZXl0eXBlOworCXUxNiBzZXFubyA9IDA7CisJdTggdGlkbm87CiAKLQlpZiAoIXR4X2luZm8tPmNvbnRyb2wuc3RhKQotCQlyZXR1cm47CisJa2V5dHlwZSA9IGF0aDlrX2Ntbl9nZXRfaHdfY3J5cHRvX2tleXR5cGUoc2tiKTsKIAotCWFuID0gKHN0cnVjdCBhdGhfbm9kZSAqKXR4X2luZm8tPmNvbnRyb2wuc3RhLT5kcnZfcHJpdjsKIAloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7Ci0JZmMgPSBoZHItPmZyYW1lX2NvbnRyb2w7CisJaWYgKHN0YSAmJiBpZWVlODAyMTFfaXNfZGF0YV9xb3MoaGRyLT5mcmFtZV9jb250cm9sKSAmJgorCQljb25mX2lzX2h0KCZody0+Y29uZikgJiYgKHNjLT5zY19mbGFncyAmIFNDX09QX1RYQUdHUikpIHsKIAotCWlmIChpZWVlODAyMTFfaXNfZGF0YV9xb3MoZmMpKSB7Ci0JCXFjID0gaWVlZTgwMjExX2dldF9xb3NfY3RsKGhkcik7Ci0JCWJmLT5iZl90aWRubyA9IHFjWzBdICYgMHhmOworCQlhbiA9IChzdHJ1Y3QgYXRoX25vZGUgKikgc3RhLT5kcnZfcHJpdjsKKwkJdGlkbm8gPSBpZWVlODAyMTFfZ2V0X3Fvc19jdGwoaGRyKVswXSAmIElFRUU4MDIxMV9RT1NfQ1RMX1RJRF9NQVNLOworCisJCS8qCisJCSAqIE92ZXJyaWRlIHNlcW5vIHNldCBieSB1cHBlciBsYXllciB3aXRoIHRoZSBvbmUKKwkJICogaW4gdHggYWdncmVnYXRpb24gc3RhdGUuCisJCSAqLworCQl0aWQgPSBBVEhfQU5fMl9USUQoYW4sIHRpZG5vKTsKKwkJc2Vxbm8gPSB0aWQtPnNlcV9uZXh0OworCQloZHItPnNlcV9jdHJsID0gY3B1X3RvX2xlMTYoc2Vxbm8gPDwgSUVFRTgwMjExX1NFUV9TRVFfU0hJRlQpOworCQlJTkNSKHRpZC0+c2VxX25leHQsIElFRUU4MDIxMV9TRVFfTUFYKTsKIAl9CiAKLQkvKgotCSAqIEZvciBIVCBjYXBhYmxlIHN0YXRpb25zLCB3ZSBzYXZlIHRpZG5vIGZvciBsYXRlciB1c2UuCi0JICogV2UgYWxzbyBvdmVycmlkZSBzZXFubyBzZXQgYnkgdXBwZXIgbGF5ZXIgd2l0aCB0aGUgb25lCi0JICogaW4gdHggYWdncmVnYXRpb24gc3RhdGUuCi0JICovCi0JdGlkID0gQVRIX0FOXzJfVElEKGFuLCBiZi0+YmZfdGlkbm8pOwotCWhkci0+c2VxX2N0cmwgPSBjcHVfdG9fbGUxNih0aWQtPnNlcV9uZXh0IDw8IElFRUU4MDIxMV9TRVFfU0VRX1NISUZUKTsKLQliZi0+YmZfc2Vxbm8gPSB0aWQtPnNlcV9uZXh0OwotCUlOQ1IodGlkLT5zZXFfbmV4dCwgSUVFRTgwMjExX1NFUV9NQVgpOworCW1lbXNldChmaSwgMCwgc2l6ZW9mKCpmaSkpOworCWlmIChod19rZXkpCisJCWZpLT5rZXlpeCA9IGh3X2tleS0+aHdfa2V5X2lkeDsKKwllbHNlCisJCWZpLT5rZXlpeCA9IEFUSDlLX1RYS0VZSVhfSU5WQUxJRDsKKwlmaS0+a2V5dHlwZSA9IGtleXR5cGU7CisJZmktPmZyYW1lbGVuID0gZnJhbWVsZW47CisJZmktPnNlcW5vID0gc2Vxbm87CiB9CiAKLXN0YXRpYyBpbnQgc2V0dXBfdHhfZmxhZ3Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCB1c2VfbGRwYykKK3N0YXRpYyBpbnQgc2V0dXBfdHhfZmxhZ3Moc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiAJaW50IGZsYWdzID0gMDsKQEAgLTE0MjcsNyArMTQ2OSw3IEBACiAJaWYgKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9OT19BQ0spCiAJCWZsYWdzIHw9IEFUSDlLX1RYREVTQ19OT0FDSzsKIAotCWlmICh1c2VfbGRwYykKKwlpZiAodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0xEUEMpCiAJCWZsYWdzIHw9IEFUSDlLX1RYREVTQ19MRFBDOwogCiAJcmV0dXJuIGZsYWdzOwpAQCAtMTQzOSwxMyArMTQ4MSwxMSBAQAogICogd2lkdGggIC0gMCBmb3IgMjAgTUh6LCAxIGZvciA0MCBNSHoKICAqIGhhbGZfZ2kgLSB0byB1c2UgNHVzIHYvcyAzLjYgdXMgZm9yIHN5bWJvbCB0aW1lCiAgKi8KLXN0YXRpYyB1MzIgYXRoX3BrdF9kdXJhdGlvbihzdHJ1Y3QgYXRoX3NvZnRjICpzYywgdTggcml4LCBzdHJ1Y3QgYXRoX2J1ZiAqYmYsCitzdGF0aWMgdTMyIGF0aF9wa3RfZHVyYXRpb24oc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHU4IHJpeCwgaW50IHBrdGxlbiwKIAkJCSAgICBpbnQgd2lkdGgsIGludCBoYWxmX2dpLCBib29sIHNob3J0UHJlYW1ibGUpCiB7CiAJdTMyIG5iaXRzLCBuc3ltYml0cywgZHVyYXRpb24sIG5zeW1ib2xzOwotCWludCBzdHJlYW1zLCBwa3RsZW47Ci0KLQlwa3RsZW4gPSBiZl9pc2FnZ3IoYmYpID8gYmYtPmJmX2FsIDogYmYtPmJmX2ZybWxlbjsKKwlpbnQgc3RyZWFtczsKIAogCS8qIGZpbmQgbnVtYmVyIG9mIHN5bWJvbHM6IFBMQ1AgKyBkYXRhICovCiAJc3RyZWFtcyA9IEhUX1JDXzJfU1RSRUFNUyhyaXgpOwpAQCAtMTQ2NCw3ICsxNTA0LDE5IEBACiAJcmV0dXJuIGR1cmF0aW9uOwogfQogCi1zdGF0aWMgdm9pZCBhdGhfYnVmX3NldF9yYXRlKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX2J1ZiAqYmYpCit1OCBhdGhfdHhjaGFpbm1hc2tfcmVkdWN0aW9uKHN0cnVjdCBhdGhfc29mdGMgKnNjLCB1OCBjaGFpbm1hc2ssIHUzMiByYXRlKQoreworCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOworCXN0cnVjdCBhdGg5a19jaGFubmVsICpjdXJjaGFuID0gYWgtPmN1cmNoYW47CisJaWYgKChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9FTkFCTEVfQVBNKSAmJgorCQkJKGN1cmNoYW4tPmNoYW5uZWxGbGFncyAmIENIQU5ORUxfNUdIWikgJiYKKwkJCShjaGFpbm1hc2sgPT0gMHg3KSAmJiAocmF0ZSA8IDB4OTApKQorCQlyZXR1cm4gMHgzOworCWVsc2UKKwkJcmV0dXJuIGNoYWlubWFzazsKK30KKworc3RhdGljIHZvaWQgYXRoX2J1Zl9zZXRfcmF0ZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9idWYgKmJmLCBpbnQgbGVuKQogewogCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oc2MtPnNjX2FoKTsKIAlzdHJ1Y3QgYXRoOWtfMTFuX3JhdGVfc2VyaWVzIHNlcmllc1s0XTsKQEAgLTE1MDQsNyArMTU1Niw2IEBACiAKIAkJcml4ID0gcmF0ZXNbaV0uaWR4OwogCQlzZXJpZXNbaV0uVHJpZXMgPSByYXRlc1tpXS5jb3VudDsKLQkJc2VyaWVzW2ldLkNoU2VsID0gY29tbW9uLT50eF9jaGFpbm1hc2s7CiAKIAkJaWYgKChzYy0+Y29uZmlnLmF0aF9hZ2dyX3Byb3QgJiYgYmZfaXNhZ2dyKGJmKSkgfHwKIAkJICAgIChyYXRlc1tpXS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19VU0VfUlRTX0NUUykpIHsKQEAgLTE1MjcsMTQgKzE1NzgsMTYgQEAKIAkJaWYgKHJhdGVzW2ldLmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX01DUykgewogCQkJLyogTUNTIHJhdGVzICovCiAJCQlzZXJpZXNbaV0uUmF0ZSA9IHJpeCB8IDB4ODA7Ci0JCQlzZXJpZXNbaV0uUGt0RHVyYXRpb24gPSBhdGhfcGt0X2R1cmF0aW9uKHNjLCByaXgsIGJmLAorCQkJc2VyaWVzW2ldLkNoU2VsID0gYXRoX3R4Y2hhaW5tYXNrX3JlZHVjdGlvbihzYywKKwkJCQkJY29tbW9uLT50eF9jaGFpbm1hc2ssIHNlcmllc1tpXS5SYXRlKTsKKwkJCXNlcmllc1tpXS5Qa3REdXJhdGlvbiA9IGF0aF9wa3RfZHVyYXRpb24oc2MsIHJpeCwgbGVuLAogCQkJCSBpc180MCwgaXNfc2dpLCBpc19zcCk7CiAJCQlpZiAocml4IDwgOCAmJiAodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX1NUQkMpKQogCQkJCXNlcmllc1tpXS5SYXRlRmxhZ3MgfD0gQVRIOUtfUkFURVNFUklFU19TVEJDOwogCQkJY29udGludWU7CiAJCX0KIAotCQkvKiBsZWdjYXkgcmF0ZXMgKi8KKwkJLyogbGVnYWN5IHJhdGVzICovCiAJCWlmICgodHhfaW5mby0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haKSAmJgogCQkgICAgIShyYXRlLT5mbGFncyAmIElFRUU4MDIxMV9SQVRFX0VSUF9HKSkKIAkJCXBoeSA9IFdMQU5fUkNfUEhZX0NDSzsKQEAgLTE1NTAsMTIgKzE2MDMsMTggQEAKIAkJCWlzX3NwID0gZmFsc2U7CiAJCX0KIAorCQlpZiAoYmYtPmJmX3N0YXRlLmJmc19wYXByZCkKKwkJCXNlcmllc1tpXS5DaFNlbCA9IGNvbW1vbi0+dHhfY2hhaW5tYXNrOworCQllbHNlCisJCQlzZXJpZXNbaV0uQ2hTZWwgPSBhdGhfdHhjaGFpbm1hc2tfcmVkdWN0aW9uKHNjLAorCQkJCQljb21tb24tPnR4X2NoYWlubWFzaywgc2VyaWVzW2ldLlJhdGUpOworCiAJCXNlcmllc1tpXS5Qa3REdXJhdGlvbiA9IGF0aDlrX2h3X2NvbXB1dGV0eHRpbWUoc2MtPnNjX2FoLAotCQkJcGh5LCByYXRlLT5iaXRyYXRlICogMTAwLCBiZi0+YmZfZnJtbGVuLCByaXgsIGlzX3NwKTsKKwkJCXBoeSwgcmF0ZS0+Yml0cmF0ZSAqIDEwMCwgbGVuLCByaXgsIGlzX3NwKTsKIAl9CiAKIAkvKiBGb3IgQVI1NDE2IC0gUlRTIGNhbm5vdCBiZSBmb2xsb3dlZCBieSBhIGZyYW1lIGxhcmdlciB0aGFuIDhLICovCi0JaWYgKGJmX2lzYWdncihiZikgJiYgKGJmLT5iZl9hbCA+IHNjLT5zY19haC0+Y2Fwcy5ydHNfYWdncl9saW1pdCkpCisJaWYgKGJmX2lzYWdncihiZikgJiYgKGxlbiA+IHNjLT5zY19haC0+Y2Fwcy5ydHNfYWdncl9saW1pdCkpCiAJCWZsYWdzICY9IH5BVEg5S19UWERFU0NfUlRTRU5BOwogCiAJLyogQVRIOUtfVFhERVNDX1JUU0VOQSBhbmQgQVRIOUtfVFhERVNDX0NUU0VOQSBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiAqLwpAQCAtMTU3Miw2NyArMTYzMSwyOSBAQAogCQlhdGg5a19od19zZXQxMW5fYnVyc3RkdXJhdGlvbihzYy0+c2NfYWgsIGJmLT5iZl9kZXNjLCA4MTkyKTsKIH0KIAotc3RhdGljIGludCBhdGhfdHhfc2V0dXBfYnVmZmVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgYXRoX2J1ZiAqYmYsCi0JCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQlzdHJ1Y3QgYXRoX3R4X2NvbnRyb2wgKnR4Y3RsKQorc3RhdGljIHN0cnVjdCBhdGhfYnVmICphdGhfdHhfc2V0dXBfYnVmZmVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQkgICBzdHJ1Y3QgYXRoX3R4cSAqdHhxLAorCQkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKIAlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOwotCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwotCWludCBoZHJsZW47Ci0JX19sZTE2IGZjOwotCWludCBwYWRwb3MsIHBhZHNpemU7Ci0JYm9vbCB1c2VfbGRwYyA9IGZhbHNlOworCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOworCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oc2MtPnNjX2FoKTsKKwlzdHJ1Y3QgYXRoX2ZyYW1lX2luZm8gKmZpID0gZ2V0X2ZyYW1lX2luZm8oc2tiKTsKKwlzdHJ1Y3QgYXRoX2J1ZiAqYmY7CisJc3RydWN0IGF0aF9kZXNjICpkczsKKwlpbnQgZnJtX3R5cGU7CiAKLQl0eF9pbmZvLT5wYWRbMF0gPSAwOwotCXN3aXRjaCAodHhjdGwtPmZyYW1lX3R5cGUpIHsKLQljYXNlIEFUSDlLX0lGVF9OT1RfSU5URVJOQUw6Ci0JCWJyZWFrOwotCWNhc2UgQVRIOUtfSUZUX1BBVVNFOgotCQl0eF9pbmZvLT5wYWRbMF0gfD0gQVRIX1RYX0lORk9fRlJBTUVfVFlQRV9QQVVTRTsKLQkJLyogZmFsbCB0aHJvdWdoICovCi0JY2FzZSBBVEg5S19JRlRfVU5QQVVTRToKLQkJdHhfaW5mby0+cGFkWzBdIHw9IEFUSF9UWF9JTkZPX0ZSQU1FX1RZUEVfSU5URVJOQUw7Ci0JCWJyZWFrOworCWJmID0gYXRoX3R4X2dldF9idWZmZXIoc2MpOworCWlmICghYmYpIHsKKwkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfWE1JVCwgIlRYIGJ1ZmZlcnMgYXJlIGZ1bGxcbiIpOworCQlyZXR1cm4gTlVMTDsKIAl9Ci0JaGRybGVuID0gaWVlZTgwMjExX2dldF9oZHJsZW5fZnJvbV9za2Ioc2tiKTsKLQlmYyA9IGhkci0+ZnJhbWVfY29udHJvbDsKIAogCUFUSF9UWEJVRl9SRVNFVChiZik7CiAKIAliZi0+YXBoeSA9IGFwaHk7Ci0JYmYtPmJmX2ZybWxlbiA9IHNrYi0+bGVuICsgRkNTX0xFTjsKLQkvKiBSZW1vdmUgdGhlIHBhZGRpbmcgc2l6ZSBmcm9tIGJmX2ZybWxlbiwgaWYgYW55ICovCi0JcGFkcG9zID0gYXRoOWtfY21uX3BhZHBvcyhoZHItPmZyYW1lX2NvbnRyb2wpOwotCXBhZHNpemUgPSBwYWRwb3MgJiAzOwotCWlmIChwYWRzaXplICYmIHNrYi0+bGVuPnBhZHBvcytwYWRzaXplKSB7Ci0JCWJmLT5iZl9mcm1sZW4gLT0gcGFkc2l6ZTsKLQl9Ci0KLQlpZiAoIXR4Y3RsLT5wYXByZCAmJiBjb25mX2lzX2h0KCZody0+Y29uZikpIHsKLQkJYmYtPmJmX3N0YXRlLmJmX3R5cGUgfD0gQlVGX0hUOwotCQlpZiAodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0xEUEMpCi0JCQl1c2VfbGRwYyA9IHRydWU7Ci0JfQotCi0JYmYtPmJmX3N0YXRlLmJmc19wYXByZCA9IHR4Y3RsLT5wYXByZDsKLQlpZiAodHhjdGwtPnBhcHJkKQotCQliZi0+YmZfc3RhdGUuYmZzX3BhcHJkX3RpbWVzdGFtcCA9IGppZmZpZXM7Ci0JYmYtPmJmX2ZsYWdzID0gc2V0dXBfdHhfZmxhZ3Moc2tiLCB1c2VfbGRwYyk7Ci0KLQliZi0+YmZfa2V5dHlwZSA9IGF0aDlrX2Ntbl9nZXRfaHdfY3J5cHRvX2tleXR5cGUoc2tiKTsKLQlpZiAoYmYtPmJmX2tleXR5cGUgIT0gQVRIOUtfS0VZX1RZUEVfQ0xFQVIpIHsKLQkJYmYtPmJmX2ZybWxlbiArPSB0eF9pbmZvLT5jb250cm9sLmh3X2tleS0+aWN2X2xlbjsKLQkJYmYtPmJmX2tleWl4ID0gdHhfaW5mby0+Y29udHJvbC5od19rZXktPmh3X2tleV9pZHg7Ci0JfSBlbHNlIHsKLQkJYmYtPmJmX2tleWl4ID0gQVRIOUtfVFhLRVlJWF9JTlZBTElEOwotCX0KLQotCWlmIChpZWVlODAyMTFfaXNfZGF0YV9xb3MoZmMpICYmIGJmX2lzaHQoYmYpICYmCi0JICAgIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9UWEFHR1IpKQotCQlhc3NpZ25fYWdncl90aWRfc2Vxbm8oc2tiLCBiZik7Ci0KKwliZi0+YmZfZmxhZ3MgPSBzZXR1cF90eF9mbGFncyhza2IpOwogCWJmLT5iZl9tcGR1ID0gc2tiOwogCiAJYmYtPmJmX2J1Zl9hZGRyID0gZG1hX21hcF9zaW5nbGUoc2MtPmRldiwgc2tiLT5kYXRhLApAQCAtMTY0MCw0MiArMTY2MSwxOSBAQAogCWlmICh1bmxpa2VseShkbWFfbWFwcGluZ19lcnJvcihzYy0+ZGV2LCBiZi0+YmZfYnVmX2FkZHIpKSkgewogCQliZi0+YmZfbXBkdSA9IE5VTEw7CiAJCWJmLT5iZl9idWZfYWRkciA9IDA7Ci0JCWF0aF9wcmludChhdGg5a19od19jb21tb24oc2MtPnNjX2FoKSwgQVRIX0RCR19GQVRBTCwKLQkJCSAgImRtYV9tYXBwaW5nX2Vycm9yKCkgb24gVFhcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJYXRoX2VycihhdGg5a19od19jb21tb24oc2MtPnNjX2FoKSwKKwkJCSJkbWFfbWFwcGluZ19lcnJvcigpIG9uIFRYXG4iKTsKKwkJYXRoX3R4X3JldHVybl9idWZmZXIoc2MsIGJmKTsKKwkJcmV0dXJuIE5VTEw7CiAJfQogCi0JYmYtPmJmX3R4X2Fib3J0ZWQgPSBmYWxzZTsKLQotCXJldHVybiAwOwotfQotCi0vKiBGSVhNRTogdHggcG93ZXIgKi8KLXN0YXRpYyB2b2lkIGF0aF90eF9zdGFydF9kbWEoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfYnVmICpiZiwKLQkJCSAgICAgc3RydWN0IGF0aF90eF9jb250cm9sICp0eGN0bCkKLXsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gYmYtPmJmX21wZHU7Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvID0gIElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwotCXN0cnVjdCBhdGhfbm9kZSAqYW4gPSBOVUxMOwotCXN0cnVjdCBsaXN0X2hlYWQgYmZfaGVhZDsKLQlzdHJ1Y3QgYXRoX2Rlc2MgKmRzOwotCXN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkOwotCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOwotCWludCBmcm1fdHlwZTsKLQlfX2xlMTYgZmM7Ci0KIAlmcm1fdHlwZSA9IGdldF9od19wYWNrZXRfdHlwZShza2IpOwotCWZjID0gaGRyLT5mcmFtZV9jb250cm9sOwotCi0JSU5JVF9MSVNUX0hFQUQoJmJmX2hlYWQpOwotCWxpc3RfYWRkX3RhaWwoJmJmLT5saXN0LCAmYmZfaGVhZCk7CiAKIAlkcyA9IGJmLT5iZl9kZXNjOwogCWF0aDlrX2h3X3NldF9kZXNjX2xpbmsoYWgsIGRzLCAwKTsKIAotCWF0aDlrX2h3X3NldDExbl90eGRlc2MoYWgsIGRzLCBiZi0+YmZfZnJtbGVuLCBmcm1fdHlwZSwgTUFYX1JBVEVfUE9XRVIsCi0JCQkgICAgICAgYmYtPmJmX2tleWl4LCBiZi0+YmZfa2V5dHlwZSwgYmYtPmJmX2ZsYWdzKTsKKwlhdGg5a19od19zZXQxMW5fdHhkZXNjKGFoLCBkcywgZmktPmZyYW1lbGVuLCBmcm1fdHlwZSwgTUFYX1JBVEVfUE9XRVIsCisJCQkgICAgICAgZmktPmtleWl4LCBmaS0+a2V5dHlwZSwgYmYtPmJmX2ZsYWdzKTsKIAogCWF0aDlrX2h3X2ZpbGx0eGRlc2MoYWgsIGRzLAogCQkJICAgIHNrYi0+bGVuLAkvKiBzZWdtZW50IGxlbmd0aCAqLwpAQCAtMTY4Myw0MiArMTY4MSw1MyBAQAogCQkJICAgIHRydWUsCS8qIGxhc3Qgc2VnbWVudCAqLwogCQkJICAgIGRzLAkJLyogZmlyc3QgZGVzY3JpcHRvciAqLwogCQkJICAgIGJmLT5iZl9idWZfYWRkciwKLQkJCSAgICB0eGN0bC0+dHhxLT5heHFfcW51bSk7CisJCQkgICAgdHhxLT5heHFfcW51bSk7CiAKLQlpZiAoYmYtPmJmX3N0YXRlLmJmc19wYXByZCkKLQkJYXI5MDAzX2h3X3NldF9wYXByZF90eGRlc2MoYWgsIGRzLCBiZi0+YmZfc3RhdGUuYmZzX3BhcHJkKTsKKworCXJldHVybiBiZjsKK30KKworLyogRklYTUU6IHR4IHBvd2VyICovCitzdGF0aWMgdm9pZCBhdGhfdHhfc3RhcnRfZG1hKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX2J1ZiAqYmYsCisJCQkgICAgIHN0cnVjdCBhdGhfdHhfY29udHJvbCAqdHhjdGwpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGJmLT5iZl9tcGR1OworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOworCXN0cnVjdCBsaXN0X2hlYWQgYmZfaGVhZDsKKwlzdHJ1Y3QgYXRoX2F0eF90aWQgKnRpZCA9IE5VTEw7CisJdTggdGlkbm87CiAKIAlzcGluX2xvY2tfYmgoJnR4Y3RsLT50eHEtPmF4cV9sb2NrKTsKIAotCWlmIChiZl9pc2h0KGJmKSAmJiAoc2MtPnNjX2ZsYWdzICYgU0NfT1BfVFhBR0dSKSAmJgotCSAgICB0eF9pbmZvLT5jb250cm9sLnN0YSkgewotCQlhbiA9IChzdHJ1Y3QgYXRoX25vZGUgKil0eF9pbmZvLT5jb250cm9sLnN0YS0+ZHJ2X3ByaXY7Ci0JCXRpZCA9IEFUSF9BTl8yX1RJRChhbiwgYmYtPmJmX3RpZG5vKTsKKwlpZiAoaWVlZTgwMjExX2lzX2RhdGFfcW9zKGhkci0+ZnJhbWVfY29udHJvbCkgJiYgdHhjdGwtPmFuKSB7CisJCXRpZG5vID0gaWVlZTgwMjExX2dldF9xb3NfY3RsKGhkcilbMF0gJgorCQkJSUVFRTgwMjExX1FPU19DVExfVElEX01BU0s7CisJCXRpZCA9IEFUSF9BTl8yX1RJRCh0eGN0bC0+YW4sIHRpZG5vKTsKIAotCQlpZiAoIWllZWU4MDIxMV9pc19kYXRhX3FvcyhmYykpIHsKLQkJCWF0aF90eF9zZW5kX25vcm1hbChzYywgdHhjdGwtPnR4cSwgJmJmX2hlYWQpOwotCQkJZ290byB0eF9kb25lOwotCQl9Ci0KLQkJaWYgKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BTVBEVSkgewotCQkJLyoKLQkJCSAqIFRyeSBhZ2dyZWdhdGlvbiBpZiBpdCdzIGEgdW5pY2FzdCBkYXRhIGZyYW1lCi0JCQkgKiBhbmQgdGhlIGRlc3RpbmF0aW9uIGlzIEhUIGNhcGFibGUuCi0JCQkgKi8KLQkJCWF0aF90eF9zZW5kX2FtcGR1KHNjLCB0aWQsICZiZl9oZWFkLCB0eGN0bCk7Ci0JCX0gZWxzZSB7Ci0JCQkvKgotCQkJICogU2VuZCB0aGlzIGZyYW1lIGFzIHJlZ3VsYXIgd2hlbiBBRERCQQotCQkJICogZXhjaGFuZ2UgaXMgbmVpdGhlciBjb21wbGV0ZSBub3IgcGVuZGluZy4KLQkJCSAqLwotCQkJYXRoX3R4X3NlbmRfaHRfbm9ybWFsKHNjLCB0eGN0bC0+dHhxLAotCQkJCQkgICAgICB0aWQsICZiZl9oZWFkKTsKLQkJfQotCX0gZWxzZSB7Ci0JCWF0aF90eF9zZW5kX25vcm1hbChzYywgdHhjdGwtPnR4cSwgJmJmX2hlYWQpOworCQlXQVJOX09OKHRpZC0+YWMtPnR4cSAhPSB0eGN0bC0+dHhxKTsKIAl9CiAKLXR4X2RvbmU6CisJaWYgKCh0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQU1QRFUpICYmIHRpZCkgeworCQkvKgorCQkgKiBUcnkgYWdncmVnYXRpb24gaWYgaXQncyBhIHVuaWNhc3QgZGF0YSBmcmFtZQorCQkgKiBhbmQgdGhlIGRlc3RpbmF0aW9uIGlzIEhUIGNhcGFibGUuCisJCSAqLworCQlhdGhfdHhfc2VuZF9hbXBkdShzYywgdGlkLCBiZiwgdHhjdGwpOworCX0gZWxzZSB7CisJCUlOSVRfTElTVF9IRUFEKCZiZl9oZWFkKTsKKwkJbGlzdF9hZGRfdGFpbCgmYmYtPmxpc3QsICZiZl9oZWFkKTsKKworCQliZi0+YmZfc3RhdGUuYmZzX2Z0eXBlID0gdHhjdGwtPmZyYW1lX3R5cGU7CisJCWJmLT5iZl9zdGF0ZS5iZnNfcGFwcmQgPSB0eGN0bC0+cGFwcmQ7CisKKwkJaWYgKGJmLT5iZl9zdGF0ZS5iZnNfcGFwcmQpCisJCQlhcjkwMDNfaHdfc2V0X3BhcHJkX3R4ZGVzYyhzYy0+c2NfYWgsIGJmLT5iZl9kZXNjLAorCQkJCQkJICAgYmYtPmJmX3N0YXRlLmJmc19wYXByZCk7CisKKwkJYXRoX3R4X3NlbmRfbm9ybWFsKHNjLCB0eGN0bC0+dHhxLCB0aWQsICZiZl9oZWFkKTsKKwl9CisKIAlzcGluX3VubG9ja19iaCgmdHhjdGwtPnR4cS0+YXhxX2xvY2spOwogfQogCkBAIC0xNzI2LDY2ICsxNzM1LDIzIEBACiBpbnQgYXRoX3R4X3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkgc3RydWN0IGF0aF90eF9jb250cm9sICp0eGN0bCkKIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSA9IGluZm8tPmNvbnRyb2wuc3RhOwogCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKIAlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOwotCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oc2MtPnNjX2FoKTsKIAlzdHJ1Y3QgYXRoX3R4cSAqdHhxID0gdHhjdGwtPnR4cTsKIAlzdHJ1Y3QgYXRoX2J1ZiAqYmY7Ci0JaW50IHEsIHI7Ci0KLQliZiA9IGF0aF90eF9nZXRfYnVmZmVyKHNjKTsKLQlpZiAoIWJmKSB7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfWE1JVCwgIlRYIGJ1ZmZlcnMgYXJlIGZ1bGxcbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JciA9IGF0aF90eF9zZXR1cF9idWZmZXIoaHcsIGJmLCBza2IsIHR4Y3RsKTsKLQlpZiAodW5saWtlbHkocikpIHsKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19GQVRBTCwgIlRYIG1lbSBhbGxvYyBmYWlsdXJlXG4iKTsKLQotCQkvKiB1cG9uIGF0aF90eF9wcm9jZXNzcSgpIHRoaXMgVFggcXVldWUgd2lsbCBiZSByZXN1bWVkLCB3ZQotCQkgKiBndWFyYW50ZWUgdGhpcyB3aWxsIGhhcHBlbiBieSBrbm93aW5nIGJlZm9yZWhhbmQgdGhhdAotCQkgKiB3ZSB3aWxsIGF0IGxlYXN0IGhhdmUgdG8gcnVuIFRYIGNvbXBsZXRpb25vbiBvbmUgYnVmZmVyCi0JCSAqIG9uIHRoZSBxdWV1ZSAqLwotCQlzcGluX2xvY2tfYmgoJnR4cS0+YXhxX2xvY2spOwotCQlpZiAoIXR4cS0+c3RvcHBlZCAmJiB0eHEtPmF4cV9kZXB0aCA+IDEpIHsKLQkJCWF0aF9tYWM4MDIxMV9zdG9wX3F1ZXVlKHNjLCBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKSk7Ci0JCQl0eHEtPnN0b3BwZWQgPSAxOwotCQl9Ci0JCXNwaW5fdW5sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKLQotCQlhdGhfdHhfcmV0dXJuX2J1ZmZlcihzYywgYmYpOwotCi0JCXJldHVybiByOwotCX0KLQotCXEgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTsKLQlpZiAocSA+PSA0KQotCQlxID0gMDsKLQotCXNwaW5fbG9ja19iaCgmdHhxLT5heHFfbG9jayk7Ci0JaWYgKCsrc2MtPnR4LnBlbmRpbmdfZnJhbWVzW3FdID4gQVRIX01BWF9RREVQVEggJiYgIXR4cS0+c3RvcHBlZCkgewotCQlhdGhfbWFjODAyMTFfc3RvcF9xdWV1ZShzYywgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpOwotCQl0eHEtPnN0b3BwZWQgPSAxOwotCX0KLQlzcGluX3VubG9ja19iaCgmdHhxLT5heHFfbG9jayk7Ci0KLQlhdGhfdHhfc3RhcnRfZG1hKHNjLCBiZiwgdHhjdGwpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgYXRoX3R4X2NhYnEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IpCi17Ci0Jc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OwotCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7Ci0Jc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihzYy0+c2NfYWgpOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOwogCWludCBwYWRwb3MsIHBhZHNpemU7Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwotCXN0cnVjdCBhdGhfdHhfY29udHJvbCB0eGN0bDsKKwlpbnQgZnJtbGVuID0gc2tiLT5sZW4gKyBGQ1NfTEVOOworCWludCBxOwogCi0JbWVtc2V0KCZ0eGN0bCwgMCwgc2l6ZW9mKHN0cnVjdCBhdGhfdHhfY29udHJvbCkpOworCS8qIE5PVEU6ICBzdGEgY2FuIGJlIE5VTEwgYWNjb3JkaW5nIHRvIG5ldC9tYWM4MDIxMS5oICovCisJaWYgKHN0YSkKKwkJdHhjdGwtPmFuID0gKHN0cnVjdCBhdGhfbm9kZSAqKXN0YS0+ZHJ2X3ByaXY7CisKKwlpZiAoaW5mby0+Y29udHJvbC5od19rZXkpCisJCWZybWxlbiArPSBpbmZvLT5jb250cm9sLmh3X2tleS0+aWN2X2xlbjsKIAogCS8qCiAJICogQXMgYSB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCwgYXNzaWduIHNlcSMgaGVyZTsgdGhpcyB3aWxsIGxpa2VseSBuZWVkCkBAIC0xODAyLDMwICsxNzY4LDM3IEBACiAJLyogQWRkIHRoZSBwYWRkaW5nIGFmdGVyIHRoZSBoZWFkZXIgaWYgdGhpcyBpcyBub3QgYWxyZWFkeSBkb25lICovCiAJcGFkcG9zID0gYXRoOWtfY21uX3BhZHBvcyhoZHItPmZyYW1lX2NvbnRyb2wpOwogCXBhZHNpemUgPSBwYWRwb3MgJiAzOwotCWlmIChwYWRzaXplICYmIHNrYi0+bGVuPnBhZHBvcykgewotCQlpZiAoc2tiX2hlYWRyb29tKHNrYikgPCBwYWRzaXplKSB7Ci0JCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX1hNSVQsCi0JCQkJICAiVFggQ0FCUSBwYWRkaW5nIGZhaWxlZFxuIik7Ci0JCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCQkJcmV0dXJuOwotCQl9CisJaWYgKHBhZHNpemUgJiYgc2tiLT5sZW4gPiBwYWRwb3MpIHsKKwkJaWYgKHNrYl9oZWFkcm9vbShza2IpIDwgcGFkc2l6ZSkKKwkJCXJldHVybiAtRU5PTUVNOworCiAJCXNrYl9wdXNoKHNrYiwgcGFkc2l6ZSk7CiAJCW1lbW1vdmUoc2tiLT5kYXRhLCBza2ItPmRhdGEgKyBwYWRzaXplLCBwYWRwb3MpOwogCX0KIAotCXR4Y3RsLnR4cSA9IHNjLT5iZWFjb24uY2FicTsKKwlzZXR1cF9mcmFtZV9pbmZvKGh3LCBza2IsIGZybWxlbik7CiAKLQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX1hNSVQsCi0JCSAgInRyYW5zbWl0dGluZyBDQUJRIHBhY2tldCwgc2tiOiAlcFxuIiwgc2tiKTsKKwkvKgorCSAqIEF0IHRoaXMgcG9pbnQsIHRoZSB2aWYsIGh3X2tleSBhbmQgc3RhIHBvaW50ZXJzIGluIHRoZSB0eCBjb250cm9sCisJICogaW5mbyBhcmUgbm8gbG9uZ2VyIHZhbGlkIChvdmVyd3JpdHRlbiBieSB0aGUgYXRoX2ZyYW1lX2luZm8gZGF0YS4KKwkgKi8KIAotCWlmIChhdGhfdHhfc3RhcnQoaHcsIHNrYiwgJnR4Y3RsKSAhPSAwKSB7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfWE1JVCwgIkNBQlEgVFggZmFpbGVkXG4iKTsKLQkJZ290byBleGl0OworCWJmID0gYXRoX3R4X3NldHVwX2J1ZmZlcihodywgdHhjdGwtPnR4cSwgc2tiKTsKKwlpZiAodW5saWtlbHkoIWJmKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlxID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7CisJc3Bpbl9sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKKwlpZiAodHhxID09IHNjLT50eC50eHFfbWFwW3FdICYmCisJICAgICsrdHhxLT5wZW5kaW5nX2ZyYW1lcyA+IEFUSF9NQVhfUURFUFRIICYmICF0eHEtPnN0b3BwZWQpIHsKKwkJYXRoX21hYzgwMjExX3N0b3BfcXVldWUoc2MsIHEpOworCQl0eHEtPnN0b3BwZWQgPSAxOwogCX0KKwlzcGluX3VubG9ja19iaCgmdHhxLT5heHFfbG9jayk7CiAKLQlyZXR1cm47Ci1leGl0OgotCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJYXRoX3R4X3N0YXJ0X2RtYShzYywgYmYsIHR4Y3RsKTsKKworCXJldHVybiAwOwogfQogCiAvKioqKioqKioqKioqKioqKiovCkBAIC0xODMzLDcgKzE4MDYsOCBAQAogLyoqKioqKioqKioqKioqKioqLwogCiBzdGF0aWMgdm9pZCBhdGhfdHhfY29tcGxldGUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgICAgc3RydWN0IGF0aF93aXBoeSAqYXBoeSwgaW50IHR4X2ZsYWdzKQorCQkJICAgIHN0cnVjdCBhdGhfd2lwaHkgKmFwaHksIGludCB0eF9mbGFncywgaW50IGZ0eXBlLAorCQkJICAgIHN0cnVjdCBhdGhfdHhxICp0eHEpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBzYy0+aHc7CiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwpAQCAtMTg0MSw3ICsxODE1LDcgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqIGhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKIAlpbnQgcSwgcGFkcG9zLCBwYWRzaXplOwogCi0JYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19YTUlULCAiVFggY29tcGxldGU6IHNrYjogJXBcbiIsIHNrYik7CisJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfWE1JVCwgIlRYIGNvbXBsZXRlOiBza2I6ICVwXG4iLCBza2IpOwogCiAJaWYgKGFwaHkpCiAJCWh3ID0gYXBoeS0+aHc7CkBAIC0xODY3LDI0ICsxODQxLDI0IEBACiAKIAlpZiAoc2MtPnBzX2ZsYWdzICYgUFNfV0FJVF9GT1JfVFhfQUNLKSB7CiAJCXNjLT5wc19mbGFncyAmPSB+UFNfV0FJVF9GT1JfVFhfQUNLOwotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX1BTLAotCQkJICAiR29pbmcgYmFjayB0byBzbGVlcCBhZnRlciBoYXZpbmcgIgotCQkJICAicmVjZWl2ZWQgVFggc3RhdHVzICgweCVseClcbiIsCisJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX1BTLAorCQkJIkdvaW5nIGJhY2sgdG8gc2xlZXAgYWZ0ZXIgaGF2aW5nIHJlY2VpdmVkIFRYIHN0YXR1cyAoMHglbHgpXG4iLAogCQkJc2MtPnBzX2ZsYWdzICYgKFBTX1dBSVRfRk9SX0JFQUNPTiB8CiAJCQkJCVBTX1dBSVRfRk9SX0NBQiB8CiAJCQkJCVBTX1dBSVRfRk9SX1BTUE9MTF9EQVRBIHwKIAkJCQkJUFNfV0FJVF9GT1JfVFhfQUNLKSk7CiAJfQogCi0JaWYgKHVubGlrZWx5KHR4X2luZm8tPnBhZFswXSAmIEFUSF9UWF9JTkZPX0ZSQU1FX1RZUEVfSU5URVJOQUwpKQotCQlhdGg5a190eF9zdGF0dXMoaHcsIHNrYik7CisJaWYgKHVubGlrZWx5KGZ0eXBlKSkKKwkJYXRoOWtfdHhfc3RhdHVzKGh3LCBza2IsIGZ0eXBlKTsKIAllbHNlIHsKIAkJcSA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpOwotCQlpZiAocSA+PSA0KQotCQkJcSA9IDA7Ci0KLQkJaWYgKC0tc2MtPnR4LnBlbmRpbmdfZnJhbWVzW3FdIDwgMCkKLQkJCXNjLT50eC5wZW5kaW5nX2ZyYW1lc1txXSA9IDA7CisJCWlmICh0eHEgPT0gc2MtPnR4LnR4cV9tYXBbcV0pIHsKKwkJCXNwaW5fbG9ja19iaCgmdHhxLT5heHFfbG9jayk7CisJCQlpZiAoV0FSTl9PTigtLXR4cS0+cGVuZGluZ19mcmFtZXMgPCAwKSkKKwkJCQl0eHEtPnBlbmRpbmdfZnJhbWVzID0gMDsKKwkJCXNwaW5fdW5sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKKwkJfQogCiAJCWllZWU4MDIxMV90eF9zdGF0dXMoaHcsIHNrYik7CiAJfQpAQCAtMTkxMiwxNSArMTg4NiwxNCBAQAogCWJmLT5iZl9idWZfYWRkciA9IDA7CiAKIAlpZiAoYmYtPmJmX3N0YXRlLmJmc19wYXByZCkgewotCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLAotCQkJICAgICAgIGJmLT5iZl9zdGF0ZS5iZnNfcGFwcmRfdGltZXN0YW1wICsKLQkJCSAgICAgICBtc2Vjc190b19qaWZmaWVzKEFUSF9QQVBSRF9USU1FT1VUKSkpCisJCWlmICghc2MtPnBhcHJkX3BlbmRpbmcpCiAJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQllbHNlCiAJCQljb21wbGV0ZSgmc2MtPnBhcHJkX2NvbXBsZXRlKTsKIAl9IGVsc2UgewotCQlhdGhfZGVidWdfc3RhdF90eChzYywgdHhxLCBiZiwgdHMpOwotCQlhdGhfdHhfY29tcGxldGUoc2MsIHNrYiwgYmYtPmFwaHksIHR4X2ZsYWdzKTsKKwkJYXRoX2RlYnVnX3N0YXRfdHgoc2MsIGJmLCB0cyk7CisJCWF0aF90eF9jb21wbGV0ZShzYywgc2tiLCBiZi0+YXBoeSwgdHhfZmxhZ3MsCisJCQkJYmYtPmJmX3N0YXRlLmJmc19mdHlwZSwgdHhxKTsKIAl9CiAJLyogQXQgdGhpcyBwb2ludCwgc2tiIChiZi0+YmZfbXBkdSkgaXMgY29uc3VtZWQuLi5tYWtlIHN1cmUgd2UgZG9uJ3QKIAkgKiBhY2NpZGVudGFsbHkgcmVmZXJlbmNlIGl0IGxhdGVyLgpAQCAtMTkzNSw0MiArMTkwOCwxNSBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNjLT50eC50eGJ1ZmxvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIGludCBhdGhfdHhfbnVtX2JhZGZybXMoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfYnVmICpiZiwKLQkJCSAgICAgIHN0cnVjdCBhdGhfdHhfc3RhdHVzICp0cywgaW50IHR4b2spCi17Ci0JdTE2IHNlcV9zdCA9IDA7Ci0JdTMyIGJhW1dNRV9CQV9CTVBfU0laRSA+PiA1XTsKLQlpbnQgYmFfaW5kZXg7Ci0JaW50IG5iYWQgPSAwOwotCWludCBpc2FnZ3IgPSAwOwotCi0JaWYgKGJmLT5iZl9sYXN0YmYtPmJmX3R4X2Fib3J0ZWQpCi0JCXJldHVybiAwOwotCi0JaXNhZ2dyID0gYmZfaXNhZ2dyKGJmKTsKLQlpZiAoaXNhZ2dyKSB7Ci0JCXNlcV9zdCA9IHRzLT50c19zZXFudW07Ci0JCW1lbWNweShiYSwgJnRzLT5iYV9sb3csIFdNRV9CQV9CTVBfU0laRSA+PiAzKTsKLQl9Ci0KLQl3aGlsZSAoYmYpIHsKLQkJYmFfaW5kZXggPSBBVEhfQkFfSU5ERVgoc2VxX3N0LCBiZi0+YmZfc2Vxbm8pOwotCQlpZiAoIXR4b2sgfHwgKGlzYWdnciAmJiAhQVRIX0JBX0lTU0VUKGJhLCBiYV9pbmRleCkpKQotCQkJbmJhZCsrOwotCi0JCWJmID0gYmYtPmJmX25leHQ7Ci0JfQotCi0JcmV0dXJuIG5iYWQ7Ci19Ci0KIHN0YXRpYyB2b2lkIGF0aF90eF9yY19zdGF0dXMoc3RydWN0IGF0aF9idWYgKmJmLCBzdHJ1Y3QgYXRoX3R4X3N0YXR1cyAqdHMsCi0JCQkgICAgIGludCBuYmFkLCBpbnQgdHhvaywgYm9vbCB1cGRhdGVfcmMpCisJCQkgICAgIGludCBuZnJhbWVzLCBpbnQgbmJhZCwgaW50IHR4b2ssIGJvb2wgdXBkYXRlX3JjKQogewogCXN0cnVjdCBza19idWZmICpza2IgPSBiZi0+YmZfbXBkdTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IGJmLT5hcGh5LT5odzsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGJmLT5hcGh5LT5zYzsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKIAl1OCBpLCB0eF9yYXRlaW5kZXg7CiAKIAlpZiAodHhvaykKQEAgLTE5ODQsMjIgKzE5MzAsMzIgQEAKIAlpZiAoKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BTVBEVSkgJiYgdXBkYXRlX3JjKSB7CiAJCXR4X2luZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUX0FNUERVOwogCi0JCUJVR19PTihuYmFkID4gYmYtPmJmX25mcmFtZXMpOworCQlCVUdfT04obmJhZCA+IG5mcmFtZXMpOwogCi0JCXR4X2luZm8tPnN0YXR1cy5hbXBkdV9sZW4gPSBiZi0+YmZfbmZyYW1lczsKLQkJdHhfaW5mby0+c3RhdHVzLmFtcGR1X2Fja19sZW4gPSBiZi0+YmZfbmZyYW1lcyAtIG5iYWQ7CisJCXR4X2luZm8tPnN0YXR1cy5hbXBkdV9sZW4gPSBuZnJhbWVzOworCQl0eF9pbmZvLT5zdGF0dXMuYW1wZHVfYWNrX2xlbiA9IG5mcmFtZXMgLSBuYmFkOwogCX0KIAogCWlmICgodHMtPnRzX3N0YXR1cyAmIEFUSDlLX1RYRVJSX0ZJTFQpID09IDAgJiYKIAkgICAgKGJmLT5iZl9mbGFncyAmIEFUSDlLX1RYREVTQ19OT0FDSykgPT0gMCAmJiB1cGRhdGVfcmMpIHsKLQkJaWYgKGllZWU4MDIxMV9pc19kYXRhKGhkci0+ZnJhbWVfY29udHJvbCkpIHsKLQkJCWlmICh0cy0+dHNfZmxhZ3MgJgotCQkJICAgIChBVEg5S19UWF9EQVRBX1VOREVSUlVOIHwgQVRIOUtfVFhfREVMSU1fVU5ERVJSVU4pKQotCQkJCXR4X2luZm8tPnBhZFswXSB8PSBBVEhfVFhfSU5GT19VTkRFUlJVTjsKLQkJCWlmICgodHMtPnRzX3N0YXR1cyAmIEFUSDlLX1RYRVJSX1hSRVRSWSkgfHwKLQkJCSAgICAodHMtPnRzX3N0YXR1cyAmIEFUSDlLX1RYRVJSX0ZJRk8pKQotCQkJCXR4X2luZm8tPnBhZFswXSB8PSBBVEhfVFhfSU5GT19YUkVUUlk7Ci0JCX0KKwkJLyoKKwkJICogSWYgYW4gdW5kZXJydW4gZXJyb3IgaXMgc2VlbiBhc3N1bWUgaXQgYXMgYW4gZXhjZXNzaXZlCisJCSAqIHJldHJ5IG9ubHkgaWYgbWF4IGZyYW1lIHRyaWdnZXIgbGV2ZWwgaGFzIGJlZW4gcmVhY2hlZAorCQkgKiAoMiBLQiBmb3Igc2luZ2xlIHN0cmVhbSwgYW5kIDQgS0IgZm9yIGR1YWwgc3RyZWFtKS4KKwkJICogQWRqdXN0IHRoZSBsb25nIHJldHJ5IGFzIGlmIHRoZSBmcmFtZSB3YXMgdHJpZWQKKwkJICogaHctPm1heF9yYXRlX3RyaWVzIHRpbWVzIHRvIGFmZmVjdCBob3cgcmF0ZSBjb250cm9sIHVwZGF0ZXMKKwkJICogUEVSIGZvciB0aGUgZmFpbGVkIHJhdGUuCisJCSAqIEluIGNhc2Ugb2YgY29uZ2VzdGlvbiBvbiB0aGUgYnVzIHBlbmFsaXppbmcgdGhpcyB0eXBlIG9mCisJCSAqIHVuZGVycnVucyBzaG91bGQgaGVscCBoYXJkd2FyZSBhY3R1YWxseSB0cmFuc21pdCBuZXcgZnJhbWVzCisJCSAqIHN1Y2Nlc3NmdWxseSBieSBldmVudHVhbGx5IHByZWZlcnJpbmcgc2xvd2VyIHJhdGVzLgorCQkgKiBUaGlzIGl0c2VsZiBzaG91bGQgYWxzbyBhbGxldmlhdGUgY29uZ2VzdGlvbiBvbiB0aGUgYnVzLgorCQkgKi8KKwkJaWYgKGllZWU4MDIxMV9pc19kYXRhKGhkci0+ZnJhbWVfY29udHJvbCkgJiYKKwkJICAgICh0cy0+dHNfZmxhZ3MgJiAoQVRIOUtfVFhfREFUQV9VTkRFUlJVTiB8CisJCSAgICAgICAgICAgICAgICAgICAgIEFUSDlLX1RYX0RFTElNX1VOREVSUlVOKSkgJiYKKwkJICAgIGFoLT50eF90cmlnX2xldmVsID49IHNjLT5zY19haC0+Y2Fwcy50eF90cmlnbGV2ZWxfbWF4KQorCQkJdHhfaW5mby0+c3RhdHVzLnJhdGVzW3R4X3JhdGVpbmRleF0uY291bnQgPQorCQkJCWh3LT5tYXhfcmF0ZV90cmllczsKIAl9CiAKIAlmb3IgKGkgPSB0eF9yYXRlaW5kZXggKyAxOyBpIDwgaHctPm1heF9yYXRlczsgaSsrKSB7CkBAIC0yMDEwLDE2ICsxOTY2LDEzIEBACiAJdHhfaW5mby0+c3RhdHVzLnJhdGVzW3R4X3JhdGVpbmRleF0uY291bnQgPSB0cy0+dHNfbG9uZ3JldHJ5ICsgMTsKIH0KIAotc3RhdGljIHZvaWQgYXRoX3dha2VfbWFjODAyMTFfcXVldWUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfdHhxICp0eHEpCitzdGF0aWMgdm9pZCBhdGhfd2FrZV9tYWM4MDIxMV9xdWV1ZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IHFudW0pCiB7Ci0JaW50IHFudW07CisJc3RydWN0IGF0aF90eHEgKnR4cTsKIAotCXFudW0gPSBhdGhfZ2V0X21hYzgwMjExX3FudW0odHhxLT5heHFfY2xhc3MsIHNjKTsKLQlpZiAocW51bSA9PSAtMSkKLQkJcmV0dXJuOwotCisJdHhxID0gc2MtPnR4LnR4cV9tYXBbcW51bV07CiAJc3Bpbl9sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKLQlpZiAodHhxLT5zdG9wcGVkICYmIHNjLT50eC5wZW5kaW5nX2ZyYW1lc1txbnVtXSA8IEFUSF9NQVhfUURFUFRIKSB7CisJaWYgKHR4cS0+c3RvcHBlZCAmJiB0eHEtPnBlbmRpbmdfZnJhbWVzIDwgQVRIX01BWF9RREVQVEgpIHsKIAkJaWYgKGF0aF9tYWM4MDIxMV9zdGFydF9xdWV1ZShzYywgcW51bSkpCiAJCQl0eHEtPnN0b3BwZWQgPSAwOwogCX0KQEAgLTIwMzYsMTAgKzE5ODksMTEgQEAKIAlzdHJ1Y3QgYXRoX3R4X3N0YXR1cyB0czsKIAlpbnQgdHhvazsKIAlpbnQgc3RhdHVzOworCWludCBxbnVtOwogCi0JYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19RVUVVRSwgInR4IHF1ZXVlICVkICgleCksIGxpbmsgJXBcbiIsCi0JCSAgdHhxLT5heHFfcW51bSwgYXRoOWtfaHdfZ2V0dHhidWYoc2MtPnNjX2FoLCB0eHEtPmF4cV9xbnVtKSwKLQkJICB0eHEtPmF4cV9saW5rKTsKKwlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19RVUVVRSwgInR4IHF1ZXVlICVkICgleCksIGxpbmsgJXBcbiIsCisJCXR4cS0+YXhxX3FudW0sIGF0aDlrX2h3X2dldHR4YnVmKHNjLT5zY19haCwgdHhxLT5heHFfcW51bSksCisJCXR4cS0+YXhxX2xpbmspOwogCiAJZm9yICg7OykgewogCQlzcGluX2xvY2tfYmgoJnR4cS0+YXhxX2xvY2spOwpAQCAtMjA5Niw2ICsyMDUwLDkgQEAKIAkJdHhxLT5heHFfdHhfaW5wcm9ncmVzcyA9IGZhbHNlOwogCQlpZiAoYmZfaGVsZCkKIAkJCWxpc3RfZGVsKCZiZl9oZWxkLT5saXN0KTsKKworCQlpZiAoYmZfaXNfYW1wZHVfbm90X3Byb2JpbmcoYmYpKQorCQkJdHhxLT5heHFfYW1wZHVfZGVwdGgtLTsKIAkJc3Bpbl91bmxvY2tfYmgoJnR4cS0+YXhxX2xvY2spOwogCiAJCWlmIChiZl9oZWxkKQpAQCAtMjEwOCwxNSArMjA2NSwxOSBAQAogCQkJICovCiAJCQlpZiAodHMudHNfc3RhdHVzICYgQVRIOUtfVFhFUlJfWFJFVFJZKQogCQkJCWJmLT5iZl9zdGF0ZS5iZl90eXBlIHw9IEJVRl9YUkVUUlk7Ci0JCQlhdGhfdHhfcmNfc3RhdHVzKGJmLCAmdHMsIHR4b2sgPyAwIDogMSwgdHhvaywgdHJ1ZSk7CisJCQlhdGhfdHhfcmNfc3RhdHVzKGJmLCAmdHMsIDEsIHR4b2sgPyAwIDogMSwgdHhvaywgdHJ1ZSk7CiAJCX0KIAorCQlxbnVtID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKGJmLT5iZl9tcGR1KTsKKwogCQlpZiAoYmZfaXNhbXBkdShiZikpCi0JCQlhdGhfdHhfY29tcGxldGVfYWdncihzYywgdHhxLCBiZiwgJmJmX2hlYWQsICZ0cywgdHhvayk7CisJCQlhdGhfdHhfY29tcGxldGVfYWdncihzYywgdHhxLCBiZiwgJmJmX2hlYWQsICZ0cywgdHhvaywKKwkJCQkJICAgICB0cnVlKTsKIAkJZWxzZQogCQkJYXRoX3R4X2NvbXBsZXRlX2J1ZihzYywgYmYsIHR4cSwgJmJmX2hlYWQsICZ0cywgdHhvaywgMCk7CiAKLQkJYXRoX3dha2VfbWFjODAyMTFfcXVldWUoc2MsIHR4cSk7CisJCWlmICh0eHEgPT0gc2MtPnR4LnR4cV9tYXBbcW51bV0pCisJCQlhdGhfd2FrZV9tYWM4MDIxMV9xdWV1ZShzYywgcW51bSk7CiAKIAkJc3Bpbl9sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKIAkJaWYgKHNjLT5zY19mbGFncyAmIFNDX09QX1RYQUdHUikKQEAgLTIxNTAsOCArMjExMSw4IEBACiAJCX0KIAogCWlmIChuZWVkcmVzZXQpIHsKLQkJYXRoX3ByaW50KGF0aDlrX2h3X2NvbW1vbihzYy0+c2NfYWgpLCBBVEhfREJHX1JFU0VULAotCQkJICAidHggaHVuZywgcmVzZXR0aW5nIHRoZSBjaGlwXG4iKTsKKwkJYXRoX2RiZyhhdGg5a19od19jb21tb24oc2MtPnNjX2FoKSwgQVRIX0RCR19SRVNFVCwKKwkJCSJ0eCBodW5nLCByZXNldHRpbmcgdGhlIGNoaXBcbiIpOwogCQlhdGg5a19wc193YWtldXAoc2MpOwogCQlhdGhfcmVzZXQoc2MsIHRydWUpOwogCQlhdGg5a19wc19yZXN0b3JlKHNjKTsKQEAgLTIxODYsMTQgKzIxNDcsMTUgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGJmX2hlYWQ7CiAJaW50IHN0YXR1czsKIAlpbnQgdHhvazsKKwlpbnQgcW51bTsKIAogCWZvciAoOzspIHsKIAkJc3RhdHVzID0gYXRoOWtfaHdfdHhwcm9jZGVzYyhhaCwgTlVMTCwgKHZvaWQgKikmdHhzKTsKIAkJaWYgKHN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpCiAJCQlicmVhazsKIAkJaWYgKHN0YXR1cyA9PSAtRUlPKSB7Ci0JCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX1hNSVQsCi0JCQkJICAiRXJyb3IgcHJvY2Vzc2luZyB0eCBzdGF0dXNcbiIpOworCQkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfWE1JVCwKKwkJCQkiRXJyb3IgcHJvY2Vzc2luZyB0eCBzdGF0dXNcbiIpOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtMjIxOSw2ICsyMTgxLDggQEAKIAkJSU5DUih0eHEtPnR4cV90YWlsaWR4LCBBVEhfVFhGSUZPX0RFUFRIKTsKIAkJdHhxLT5heHFfZGVwdGgtLTsKIAkJdHhxLT5heHFfdHhfaW5wcm9ncmVzcyA9IGZhbHNlOworCQlpZiAoYmZfaXNfYW1wZHVfbm90X3Byb2JpbmcoYmYpKQorCQkJdHhxLT5heHFfYW1wZHVfZGVwdGgtLTsKIAkJc3Bpbl91bmxvY2tfYmgoJnR4cS0+YXhxX2xvY2spOwogCiAJCXR4b2sgPSAhKHR4cy50c19zdGF0dXMgJiBBVEg5S19UWEVSUl9NQVNLKTsKQEAgLTIyMjYsMTYgKzIxOTAsMjAgQEAKIAkJaWYgKCFiZl9pc2FtcGR1KGJmKSkgewogCQkJaWYgKHR4cy50c19zdGF0dXMgJiBBVEg5S19UWEVSUl9YUkVUUlkpCiAJCQkJYmYtPmJmX3N0YXRlLmJmX3R5cGUgfD0gQlVGX1hSRVRSWTsKLQkJCWF0aF90eF9yY19zdGF0dXMoYmYsICZ0eHMsIHR4b2sgPyAwIDogMSwgdHhvaywgdHJ1ZSk7CisJCQlhdGhfdHhfcmNfc3RhdHVzKGJmLCAmdHhzLCAxLCB0eG9rID8gMCA6IDEsIHR4b2ssIHRydWUpOwogCQl9CiAKKwkJcW51bSA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhiZi0+YmZfbXBkdSk7CisKIAkJaWYgKGJmX2lzYW1wZHUoYmYpKQotCQkJYXRoX3R4X2NvbXBsZXRlX2FnZ3Ioc2MsIHR4cSwgYmYsICZiZl9oZWFkLCAmdHhzLCB0eG9rKTsKKwkJCWF0aF90eF9jb21wbGV0ZV9hZ2dyKHNjLCB0eHEsIGJmLCAmYmZfaGVhZCwgJnR4cywKKwkJCQkJICAgICB0eG9rLCB0cnVlKTsKIAkJZWxzZQogCQkJYXRoX3R4X2NvbXBsZXRlX2J1ZihzYywgYmYsIHR4cSwgJmJmX2hlYWQsCiAJCQkJCSAgICAmdHhzLCB0eG9rLCAwKTsKIAotCQlhdGhfd2FrZV9tYWM4MDIxMV9xdWV1ZShzYywgdHhxKTsKKwkJaWYgKHR4cSA9PSBzYy0+dHgudHhxX21hcFtxbnVtXSkKKwkJCWF0aF93YWtlX21hYzgwMjExX3F1ZXVlKHNjLCBxbnVtKTsKIAogCQlzcGluX2xvY2tfYmgoJnR4cS0+YXhxX2xvY2spOwogCQlpZiAoIWxpc3RfZW1wdHkoJnR4cS0+dHhxX2ZpZm9fcGVuZGluZykpIHsKQEAgLTIzMDAsMTYgKzIyNjgsMTYgQEAKIAllcnJvciA9IGF0aF9kZXNjZG1hX3NldHVwKHNjLCAmc2MtPnR4LnR4ZG1hLCAmc2MtPnR4LnR4YnVmLAogCQkJCSAgInR4IiwgbmJ1ZnMsIDEsIDEpOwogCWlmIChlcnJvciAhPSAwKSB7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRkFUQUwsCi0JCQkgICJGYWlsZWQgdG8gYWxsb2NhdGUgdHggZGVzY3JpcHRvcnM6ICVkXG4iLCBlcnJvcik7CisJCWF0aF9lcnIoY29tbW9uLAorCQkJIkZhaWxlZCB0byBhbGxvY2F0ZSB0eCBkZXNjcmlwdG9yczogJWRcbiIsIGVycm9yKTsKIAkJZ290byBlcnI7CiAJfQogCiAJZXJyb3IgPSBhdGhfZGVzY2RtYV9zZXR1cChzYywgJnNjLT5iZWFjb24uYmRtYSwgJnNjLT5iZWFjb24uYmJ1ZiwKIAkJCQkgICJiZWFjb24iLCBBVEhfQkNCVUYsIDEsIDEpOwogCWlmIChlcnJvciAhPSAwKSB7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRkFUQUwsCi0JCQkgICJGYWlsZWQgdG8gYWxsb2NhdGUgYmVhY29uIGRlc2NyaXB0b3JzOiAlZFxuIiwgZXJyb3IpOworCQlhdGhfZXJyKGNvbW1vbiwKKwkJCSJGYWlsZWQgdG8gYWxsb2NhdGUgYmVhY29uIGRlc2NyaXB0b3JzOiAlZFxuIiwgZXJyb3IpOwogCQlnb3RvIGVycjsKIAl9CiAKQEAgLTIzNjcsNyArMjMzNSw3IEBACiAJZm9yIChhY25vID0gMCwgYWMgPSAmYW4tPmFjW2Fjbm9dOwogCSAgICAgYWNubyA8IFdNRV9OVU1fQUM7IGFjbm8rKywgYWMrKykgewogCQlhYy0+c2NoZWQgICAgPSBmYWxzZTsKLQkJYWMtPnFudW0gPSBzYy0+dHguaHdxX21hcFthY25vXTsKKwkJYWMtPnR4cSA9IHNjLT50eC50eHFfbWFwW2Fjbm9dOwogCQlJTklUX0xJU1RfSEVBRCgmYWMtPnRpZF9xKTsKIAl9CiB9CkBAIC0yMzc3LDE3ICsyMzQ1LDEzIEBACiAJc3RydWN0IGF0aF9hdHhfYWMgKmFjOwogCXN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkOwogCXN0cnVjdCBhdGhfdHhxICp0eHE7Ci0JaW50IGksIHRpZG5vOworCWludCB0aWRubzsKIAogCWZvciAodGlkbm8gPSAwLCB0aWQgPSAmYW4tPnRpZFt0aWRub107CiAJICAgICB0aWRubyA8IFdNRV9OVU1fVElEOyB0aWRubysrLCB0aWQrKykgewotCQlpID0gdGlkLT5hYy0+cW51bTsKIAotCQlpZiAoIUFUSF9UWFFfU0VUVVAoc2MsIGkpKQotCQkJY29udGludWU7Ci0KLQkJdHhxID0gJnNjLT50eC50eHFbaV07CiAJCWFjID0gdGlkLT5hYzsKKwkJdHhxID0gYWMtPnR4cTsKIAogCQlzcGluX2xvY2tfYmgoJnR4cS0+YXhxX2xvY2spOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvY2FybDkxNzAvY2FybDkxNzAuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC9jYXJsOTE3MC5oCmluZGV4IDZjZjBjOWUuLmQwN2ZmN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC9jYXJsOTE3MC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC9jYXJsOTE3MC5oCkBAIC00OCw3ICs0OCw3IEBACiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaWZkZWYgQ09ORklHX0NBUkw5MTcwX0xFRFMKICNpbmNsdWRlIDxsaW51eC9sZWRzLmg+Ci0jZW5kaWYgLyogQ09ORklHX0NBUkwxNzBfTEVEUyAqLworI2VuZGlmIC8qIENPTkZJR19DQVJMOTE3MF9MRURTICovCiAjaWZkZWYgQ09ORklHX0NBUkw5MTcwX1dQQwogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjZW5kaWYgLyogQ09ORklHX0NBUkw5MTcwX1dQQyAqLwpAQCAtMjE1LDcgKzIxNSw3IEBACiAJQ0FSTDkxNzBfUlJfVE9PX01BTllfRklSTVdBUkVfRVJST1JTLAogCUNBUkw5MTcwX1JSX1dBVENIRE9HLAogCUNBUkw5MTcwX1JSX1NUVUNLX1RYLAotCUNBUkw5MTcwX1JSX1NMT1dfU1lTVEVNLAorCUNBUkw5MTcwX1JSX1VOUkVTUE9OU0lWRV9ERVZJQ0UsCiAJQ0FSTDkxNzBfUlJfQ09NTUFORF9USU1FT1VULAogCUNBUkw5MTcwX1JSX1RPT19NQU5ZX1BIWV9FUlJPUlMsCiAJQ0FSTDkxNzBfUlJfTE9TVF9SU1AsCkBAIC0yODcsNiArMjg3LDcgQEAKIAogCS8qIHJlc2V0IC8gc3R1Y2sgZnJhbWVzL3F1ZXVlIGRldGVjdGlvbiAqLwogCXN0cnVjdCB3b3JrX3N0cnVjdCByZXN0YXJ0X3dvcms7CisJc3RydWN0IHdvcmtfc3RydWN0IHBpbmdfd29yazsKIAl1bnNpZ25lZCBpbnQgcmVzdGFydF9jb3VudGVyOwogCXVuc2lnbmVkIGxvbmcgcXVldWVfc3RvcF90aW1lb3V0W19fQVI5MTcwX05VTV9UWFFdOwogCXVuc2lnbmVkIGxvbmcgbWF4X3F1ZXVlX3N0b3BfdGltZW91dFtfX0FSOTE3MF9OVU1fVFhRXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC9jbWQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC9jbWQuYwppbmRleCBjMjFmMzM2Li5jZGZjOTRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvY2FybDkxNzAvY21kLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2Nhcmw5MTcwL2NtZC5jCkBAIC00MSw3ICs0MSw3IEBACiAKIGludCBjYXJsOTE3MF93cml0ZV9yZWcoc3RydWN0IGFyOTE3MCAqYXIsIGNvbnN0IHUzMiByZWcsIGNvbnN0IHUzMiB2YWwpCiB7Ci0JX19sZTMyIGJ1ZlsyXSA9IHsKKwljb25zdCBfX2xlMzIgYnVmWzJdID0gewogCQljcHVfdG9fbGUzMihyZWcpLAogCQljcHVfdG9fbGUzMih2YWwpLAogCX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvY2FybDkxNzAvZndjbWQuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC9md2NtZC5oCmluZGV4IGQ1NTIxNjYuLjM2ODBkZmM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvY2FybDkxNzAvZndjbWQuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvY2FybDkxNzAvZndjbWQuaApAQCAtOTcsMTMgKzk3LDEzIEBACiAJX19sZTE2CQl0eXBlOwogCXU4CQltYWNBZGRyWzZdOwogCXUzMgkJa2V5WzRdOwotfSBfX3BhY2tlZDsKK30gX19wYWNrZWQgX19hbGlnbmVkKDQpOwogI2RlZmluZSBDQVJMOTE3MF9TRVRfS0VZX0NNRF9TSVpFCQkyOAogCiBzdHJ1Y3QgY2FybDkxNzBfZGlzYWJsZV9rZXlfY21kIHsKIAlfX2xlMTYJCXVzZXI7CiAJX19sZTE2CQlwYWRkaW5nOwotfSBfX3BhY2tlZDsKK30gX19wYWNrZWQgX19hbGlnbmVkKDQpOwogI2RlZmluZSBDQVJMOTE3MF9ESVNBQkxFX0tFWV9DTURfU0laRQkJNAogCiBzdHJ1Y3QgY2FybDkxNzBfdTMyX2xpc3QgewpAQCAtMjA2LDcgKzIwNiw3IEBACiAJCXN0cnVjdCBjYXJsOTE3MF9yeF9maWx0ZXJfY21kCXJ4X2ZpbHRlcjsKIAkJdTggZGF0YVtDQVJMOTE3MF9NQVhfQ01EX1BBWUxPQURfTEVOXTsKIAl9IF9fcGFja2VkOwotfSBfX3BhY2tlZDsKK30gX19wYWNrZWQgX19hbGlnbmVkKDQpOwogCiAjZGVmaW5lCUNBUkw5MTcwX1RYX1NUQVRVU19RVUVVRQkzCiAjZGVmaW5lCUNBUkw5MTcwX1RYX1NUQVRVU19RVUVVRV9TCTAKQEAgLTIxNiw2ICsyMTYsNyBAQAogI2RlZmluZQlDQVJMOTE3MF9UWF9TVEFUVVNfVFJJRVMJKDcgPDwgQ0FSTDkxNzBfVFhfU1RBVFVTX1RSSUVTX1MpCiAjZGVmaW5lCUNBUkw5MTcwX1RYX1NUQVRVU19TVUNDRVNTCTB4ODAKIAorI2lmZGVmIF9fQ0FSTDkxNzBGV19fCiAvKgogICogTk9URToKICAqIEJvdGggc3RydWN0cyBbY2FybDkxNzBfdHhfc3RhdHVzIGFuZCBfY2FybDkxNzBfdHhfc3RhdHVzXQpAQCAtMjMyLDYgKzIzMyw4IEBACiAJdTggdHJpZXM6MzsKIAl1OCBzdWNjZXNzOjE7CiB9IF9fcGFja2VkOworI2VuZGlmIC8qIF9fQ0FSTDkxNzBGV19fICovCisKIHN0cnVjdCBfY2FybDkxNzBfdHhfc3RhdHVzIHsKIAkvKgogCSAqIFRoaXMgdmVyc2lvbiBzaG91bGQgYmUgaW1tdW5lIHRvIGFsbCBhbGlnbm1lbnQgYnVncy4KQEAgLTI3MiwxMyArMjc1LDE1IEBACiAJCXN0cnVjdCBjYXJsOTE3MF9yZl9pbml0X3Jlc3VsdAlyZl9pbml0X3JlczsKIAkJc3RydWN0IGNhcmw5MTcwX3UzMl9saXN0CXJyZWdfcmVzOwogCQlzdHJ1Y3QgY2FybDkxNzBfdTMyX2xpc3QJZWNobzsKKyNpZmRlZiBfX0NBUkw5MTcwRldfXwogCQlzdHJ1Y3QgY2FybDkxNzBfdHhfc3RhdHVzCXR4X3N0YXR1c1swXTsKKyNlbmRpZiAvKiBfX0NBUkw5MTcwRldfXyAqLwogCQlzdHJ1Y3QgX2Nhcmw5MTcwX3R4X3N0YXR1cwlfdHhfc3RhdHVzWzBdOwogCQlzdHJ1Y3QgY2FybDkxNzBfZ3BpbwkJZ3BpbzsKIAkJc3RydWN0IGNhcmw5MTcwX3RzZl9yc3AJCXRzZjsKIAkJc3RydWN0IGNhcmw5MTcwX3BzbQkJcHNtOwogCQl1OCBkYXRhW0NBUkw5MTcwX01BWF9DTURfUEFZTE9BRF9MRU5dOwogCX0gX19wYWNrZWQ7Ci19IF9fcGFja2VkOworfSBfX3BhY2tlZCBfX2FsaWduZWQoNCk7CiAKICNlbmRpZiAvKiBfX0NBUkw5MTcwX1NIQVJFRF9GV0NNRF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvY2FybDkxNzAvaHcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC9ody5oCmluZGV4IDJmNDcxYjMuLmU4NWRmNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC9ody5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC9ody5oCkBAIC03MTIsNyArNzEyLDggQEAKIAlfX2xlMTYgdGFnOwogCiAJdTggcGF5bG9hZFswXTsKLX07Cit9IF9fcGFja2VkIF9fYWxpZ25lZCg0KTsKKyNkZWZpbmUgQVI5MTcwX1NUUkVBTV9MRU4JCQkJNAogCiAjZGVmaW5lIEFSOTE3MF9NQVhfQUNLVEFCTEVfRU5UUklFUwkJCTgKICNkZWZpbmUgQVI5MTcwX01BWF9WSVJUVUFMX01BQwkJCQk3CkBAIC03MzYsNCArNzM3LDggQEAKIAogI2RlZmluZSBNT0RfVkFMKHJlZywgdmFsdWUsIG5ld3ZhbHVlKQkJCQkJXAogCSgoKHZhbHVlKSAmIH5yZWcpIHwgKCgobmV3dmFsdWUpIDw8IHJlZyMjX1MpICYgcmVnKSkKKworI2RlZmluZSBHRVRfVkFMKHJlZywgdmFsdWUpCQkJCQkJXAorCSgoKHZhbHVlKSAmIHJlZykgPj4gcmVnIyNfUykKKwogI2VuZGlmCS8qIF9fQ0FSTDkxNzBfU0hBUkVEX0hXX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC9tYWMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC9tYWMuYwppbmRleCAyMzA1YmMyLi4zODVjZjUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvY2FybDkxNzAvbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2Nhcmw5MTcwL21hYy5jCkBAIC0yMDUsOCArMjA1LDggQEAKIAljYXJsOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19CQUNLT0ZGX1BST1RFQ1QsIDB4MTA1KTsKIAogCS8qIEFnZ3JlZ2F0aW9uIE1BWCBudW1iZXIgYW5kIHRpbWVvdXQgKi8KLQljYXJsOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19BTVBEVV9GQUNUT1IsIDB4YSk7Ci0JY2FybDkxNzBfcmVnd3JpdGUoQVI5MTcwX01BQ19SRUdfQU1QRFVfREVOU0lUWSwgMHgxNDBhMDApOworCWNhcmw5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX0FNUERVX0ZBQ1RPUiwgMHg4MDAwYSk7CisJY2FybDkxNzBfcmVnd3JpdGUoQVI5MTcwX01BQ19SRUdfQU1QRFVfREVOU0lUWSwgMHgxNDBhMDcpOwogCiAJY2FybDkxNzBfcmVnd3JpdGUoQVI5MTcwX01BQ19SRUdfRlJBTUVUWVBFX0ZJTFRFUiwKIAkJCSAgQVI5MTcwX01BQ19GVEZfREVGQVVMVFMpOwpAQCAtNDU3LDggKzQ1Nyw5IEBACiAKIGludCBjYXJsOTE3MF91cGRhdGVfYmVhY29uKHN0cnVjdCBhcjkxNzAgKmFyLCBjb25zdCBib29sIHN1Ym1pdCkKIHsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOwogCXN0cnVjdCBjYXJsOTE3MF92aWZfaW5mbyAqY3ZpZjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4aW5mbzsKIAlfX2xlMzIgKmRhdGEsICpvbGQgPSBOVUxMOwogCXUzMiB3b3JkLCBvZmYsIGFkZHIsIGxlbjsKIAlpbnQgaSA9IDAsIGVyciA9IDA7CkBAIC00ODcsNyArNDg4LDEzIEBACiAKIAlpZiAoIXNrYikgewogCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIG91dF91bmxvY2s7CisJCWdvdG8gZXJyX2ZyZWU7CisJfQorCisJdHhpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCWlmICh0eGluZm8tPmNvbnRyb2wucmF0ZXNbMF0uZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfTUNTKSB7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gZXJyX2ZyZWU7CiAJfQogCiAJc3Bpbl9sb2NrX2JoKCZhci0+YmVhY29uX2xvY2spOwpAQCAtNTA0LDExICs1MTEsOCBAQAogCQkJd2lwaHlfZXJyKGFyLT5ody0+d2lwaHksICJiZWFjb24gZG9lcyBub3QgIgogCQkJCSAgImZpdCBpbnRvIGRldmljZSBtZW1vcnkhXG4iKTsKIAkJfQotCi0JCXNwaW5fdW5sb2NrX2JoKCZhci0+YmVhY29uX2xvY2spOwotCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQllcnIgPSAtRUlOVkFMOwotCQlnb3RvIG91dF91bmxvY2s7CisJCWdvdG8gZXJyX3VubG9jazsKIAl9CiAKIAlpZiAobGVuID4gQVI5MTcwX01BQ19CQ05fTEVOR1RIX01BWCkgewpAQCAtNTE4LDIyICs1MjIsMjIgQEAKIAkJCQkgQVI5MTcwX01BQ19CQ05fTEVOR1RIX01BWCwgbGVuKTsKIAkJfQogCi0JCXNwaW5fdW5sb2NrX2JoKCZhci0+YmVhY29uX2xvY2spOwotCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQllcnIgPSAtRU1TR1NJWkU7Ci0JCWdvdG8gb3V0X3VubG9jazsKKwkJZ290byBlcnJfdW5sb2NrOwogCX0KIAorCWkgPSB0eGluZm8tPmNvbnRyb2wucmF0ZXNbMF0uaWR4OworCWlmICh0eGluZm8tPmJhbmQgIT0gSUVFRTgwMjExX0JBTkRfMkdIWikKKwkJaSArPSA0OworCisJd29yZCA9IF9fY2FybDkxNzBfcmF0ZXRhYmxlW2ldLmh3X3ZhbHVlICYgMHhmOworCWlmIChpIDwgNCkKKwkJd29yZCB8PSAoKHNrYi0+bGVuICsgRkNTX0xFTikgPDwgKDMgKyAxNikpICsgMHgwNDAwOworCWVsc2UKKwkJd29yZCB8PSAoKHNrYi0+bGVuICsgRkNTX0xFTikgPDwgMTYpICsgMHgwMDEwOworCiAJY2FybDkxNzBfYXN5bmNfcmVnd3JpdGVfYmVnaW4oYXIpOwotCi0JLyogWFhYOiB1c2Ugc2tiLT5jYiBpbmZvICovCi0JaWYgKGFyLT5ody0+Y29uZi5jaGFubmVsLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFopIHsKLQkJY2FybDkxNzBfYXN5bmNfcmVnd3JpdGUoQVI5MTcwX01BQ19SRUdfQkNOX1BMQ1AsCi0JCQkJKChza2ItPmxlbiArIEZDU19MRU4pIDw8ICgzICsgMTYpKSArIDB4MDQwMCk7Ci0JfSBlbHNlIHsKLQkJY2FybDkxNzBfYXN5bmNfcmVnd3JpdGUoQVI5MTcwX01BQ19SRUdfQkNOX1BMQ1AsCi0JCQkJKChza2ItPmxlbiArIEZDU19MRU4pIDw8IDE2KSArIDB4MDAxYik7Ci0JfQorCWNhcmw5MTcwX2FzeW5jX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX0JDTl9QTENQLCB3b3JkKTsKIAogCWZvciAoaSA9IDA7IGkgPCBESVZfUk9VTkRfVVAoc2tiLT5sZW4sIDQpOyBpKyspIHsKIAkJLyoKQEAgLTU1Nyw3ICs1NjEsNyBAQAogCQljdmlmLT5iZWFjb24gPSBza2I7CiAJc3Bpbl91bmxvY2tfYmgoJmFyLT5iZWFjb25fbG9jayk7CiAJaWYgKGVycikKLQkJZ290byBvdXRfdW5sb2NrOworCQlnb3RvIGVycl9mcmVlOwogCiAJaWYgKHN1Ym1pdCkgewogCQllcnIgPSBjYXJsOTE3MF9iY25fY3RybChhciwgY3ZpZi0+aWQsCkBAIC01NjUsMTAgKzU2OSwxOCBAQAogCQkJCQlhZGRyLCBza2ItPmxlbiArIEZDU19MRU4pOwogCiAJCWlmIChlcnIpCi0JCQlnb3RvIG91dF91bmxvY2s7CisJCQlnb3RvIGVycl9mcmVlOwogCX0KIG91dF91bmxvY2s6CiAJcmN1X3JlYWRfdW5sb2NrKCk7CisJcmV0dXJuIDA7CisKK2Vycl91bmxvY2s6CisJc3Bpbl91bmxvY2tfYmgoJmFyLT5iZWFjb25fbG9jayk7CisKK2Vycl9mcmVlOgorCXJjdV9yZWFkX3VubG9jaygpOworCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJcmV0dXJuIGVycjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2Nhcmw5MTcwL21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC9tYWluLmMKaW5kZXggZGM3YjMwYi4uODcwZGY4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2Nhcmw5MTcwL21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvY2FybDkxNzAvbWFpbi5jCkBAIC00MjgsNiArNDI4LDcgQEAKIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmFyLT5sZWRfd29yayk7CiAjZW5kaWYgLyogQ09ORklHX0NBUkw5MTcwX0xFRFMgKi8KIAljYW5jZWxfd29ya19zeW5jKCZhci0+cHNfd29yayk7CisJY2FuY2VsX3dvcmtfc3luYygmYXItPnBpbmdfd29yayk7CiAJY2FuY2VsX3dvcmtfc3luYygmYXItPmFtcGR1X3dvcmspOwogfQogCkBAIC01MzMsNiArNTM0LDIxIEBACiAJICovCiB9CiAKK3N0YXRpYyB2b2lkIGNhcmw5MTcwX3Bpbmdfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGFyOTE3MCAqYXIgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGFyOTE3MCwgcGluZ193b3JrKTsKKwlpbnQgZXJyOworCisJaWYgKCFJU19TVEFSVEVEKGFyKSkKKwkJcmV0dXJuOworCisJbXV0ZXhfbG9jaygmYXItPm11dGV4KTsKKwllcnIgPSBjYXJsOTE3MF9lY2hvX3Rlc3QoYXIsIDB4ZGVhZGJlZWYpOworCWlmIChlcnIpCisJCWNhcmw5MTcwX3Jlc3RhcnQoYXIsIENBUkw5MTcwX1JSX1VOUkVTUE9OU0lWRV9ERVZJQ0UpOworCW11dGV4X3VubG9jaygmYXItPm11dGV4KTsKK30KKwogc3RhdGljIGludCBjYXJsOTE3MF9pbml0X2ludGVyZmFjZShzdHJ1Y3QgYXI5MTcwICphciwKIAkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogewpAQCAtMTYxNCw2ICsxNjMwLDcgQEAKIAkJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmYXItPnR4X3BlbmRpbmdbaV0pOwogCX0KIAlJTklUX1dPUksoJmFyLT5wc193b3JrLCBjYXJsOTE3MF9wc193b3JrKTsKKwlJTklUX1dPUksoJmFyLT5waW5nX3dvcmssIGNhcmw5MTcwX3Bpbmdfd29yayk7CiAJSU5JVF9XT1JLKCZhci0+cmVzdGFydF93b3JrLCBjYXJsOTE3MF9yZXN0YXJ0X3dvcmspOwogCUlOSVRfV09SSygmYXItPmFtcGR1X3dvcmssIGNhcmw5MTcwX2FtcGR1X3dvcmspOwogCUlOSVRfREVMQVlFRF9XT1JLKCZhci0+dHhfamFuaXRvciwgY2FybDkxNzBfdHhfamFuaXRvcik7CkBAIC0xODI5LDcgKzE4NDYsNyBAQAogCWVyciA9IGNhcmw5MTcwX2xlZF9yZWdpc3Rlcihhcik7CiAJaWYgKGVycikKIAkJZ290byBlcnJfdW5yZWc7Ci0jZW5kaWYgLyogQ09ORklHX0NBUjlMMTcwX0xFRFMgKi8KKyNlbmRpZiAvKiBDT05GSUdfQ0FSTDkxNzBfTEVEUyAqLwogCiAjaWZkZWYgQ09ORklHX0NBUkw5MTcwX1dQQwogCWVyciA9IGNhcmw5MTcwX3JlZ2lzdGVyX3dwc19idXR0b24oYXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2Nhcmw5MTcwL3BoeS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2Nhcmw5MTcwL3BoeS5jCmluZGV4IDg5ZGVjYTMuLmI2YjBkZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC9waHkuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvY2FybDkxNzAvcGh5LmMKQEAgLTEwMjksOCArMTAyOSw2IEBACiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCW1zbGVlcCgyMCk7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMTU1NCwxNSArMTU1Miw2IEBACiAJcmV0dXJuIGNhcmw5MTcwX3JlZ3dyaXRlX3Jlc3VsdCgpOwogfQogCi0vKiBUT0RPOiByZXBsYWNlIHRoaXMgd2l0aCBzaWduX2V4dGVuZDMyKG5vaXNlLCA4KSAqLwotc3RhdGljIGludCBjYXJsOTE3MF9jYWxjX25vaXNlX2RibSh1MzIgcmF3X25vaXNlKQotewotCWlmIChyYXdfbm9pc2UgJiAweDEwMCkKLQkJcmV0dXJuIH4weDFmZiB8IHJhd19ub2lzZTsKLQllbHNlCi0JCXJldHVybiByYXdfbm9pc2U7Ci19Ci0KIGludCBjYXJsOTE3MF9nZXRfbm9pc2VmbG9vcihzdHJ1Y3QgYXI5MTcwICphcikKIHsKIAlzdGF0aWMgY29uc3QgdTMyIHBoeV9yZWdzW10gPSB7CkBAIC0xNTc4LDExICsxNTY3LDExIEBACiAJCXJldHVybiBlcnI7CiAKIAlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7Ci0JCWFyLT5ub2lzZVtpXSA9IGNhcmw5MTcwX2NhbGNfbm9pc2VfZGJtKAotCQkJKHBoeV9yZXNbaV0gPj4gMTkpICYgMHgxZmYpOworCQlhci0+bm9pc2VbaV0gPSBzaWduX2V4dGVuZDMyKEdFVF9WQUwoCisJCQlBUjkxNzBfUEhZX0NDQV9NSU5fUFdSLCBwaHlfcmVzW2ldKSwgOCk7CiAKLQkJYXItPm5vaXNlW2kgKyAyXSA9IGNhcmw5MTcwX2NhbGNfbm9pc2VfZGJtKAotCQkJKHBoeV9yZXNbaSArIDJdID4+IDIzKSAmIDB4MWZmKTsKKwkJYXItPm5vaXNlW2kgKyAyXSA9IHNpZ25fZXh0ZW5kMzIoR0VUX1ZBTCgKKwkJCUFSOTE3MF9QSFlfRVhUX0NDQV9NSU5fUFdSLCBwaHlfcmVzW2kgKyAyXSksIDgpOwogCX0KIAogCXJldHVybiAwOwpAQCAtMTY2OSwxMiArMTY1OCw2IEBACiAJCQlyZXR1cm4gZXJyOwogCiAJCWNtZCA9IENBUkw5MTcwX0NNRF9SRl9JTklUOwotCi0JCW1zbGVlcCgxMDApOwotCi0JCWVyciA9IGNhcmw5MTcwX2VjaG9fdGVzdChhciwgMHhhYWJiY2NkZCk7Ci0JCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOwogCX0gZWxzZSB7CiAJCWNtZCA9IENBUkw5MTcwX0NNRF9GUkVRVUVOQ1k7CiAJfQpAQCAtMTY4NSw2ICsxNjY4LDggQEAKIAogCWVyciA9IGNhcmw5MTcwX3dyaXRlX3JlZyhhciwgQVI5MTcwX1BIWV9SRUdfSEVBVllfQ0xJUF9FTkFCTEUsCiAJCQkJIDB4MjAwKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOwogCiAJZXJyID0gY2FybDkxNzBfaW5pdF9yZl9iYW5rNF9wd3IoYXIsCiAJCWNoYW5uZWwtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC9waHkuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC9waHkuaAppbmRleCAwMmMzNGViLi4wMjRmYjQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvY2FybDkxNzAvcGh5LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2Nhcmw5MTcwL3BoeS5oCkBAIC0xMzksOCArMTM5LDggQEAKICNkZWZpbmUJCUFSOTE3MF9QSFlfQUdDX0NPTlRST0xfTk9fVVBEQVRFX05GCTB4MDAwMjAwMDAKIAogI2RlZmluZQlBUjkxNzBfUEhZX1JFR19DQ0EJCQkoQVI5MTcwX1BIWV9SRUdfQkFTRSArIDB4MDA2NCkKLSNkZWZpbmUJCUFSOTE3MF9QSFlfQ0NBX01JTkNDQV9QV1IJCTB4MGZmODAwMDAKLSNkZWZpbmUJCUFSOTE3MF9QSFlfQ0NBX01JTkNDQV9QV1JfUwkJMTkKKyNkZWZpbmUJCUFSOTE3MF9QSFlfQ0NBX01JTl9QV1IJCQkweDBmZjgwMDAwCisjZGVmaW5lCQlBUjkxNzBfUEhZX0NDQV9NSU5fUFdSX1MJCTE5CiAjZGVmaW5lCQlBUjkxNzBfUEhZX0NDQV9USFJFU0g2MgkJCTB4MDAwN2YwMDAKICNkZWZpbmUJCUFSOTE3MF9QSFlfQ0NBX1RIUkVTSDYyX1MJCTEyCiAKQEAgLTMzOCw4ICszMzgsOCBAQAogI2RlZmluZQkJQVI5MTcwX1BIWV9FWFRfQ0NBX0NZQ1BXUl9USFIxX1MJOQogI2RlZmluZQkJQVI5MTcwX1BIWV9FWFRfQ0NBX1RIUkVTSDYyCQkweDAwN2YwMDAwCiAjZGVmaW5lCQlBUjkxNzBfUEhZX0VYVF9DQ0FfVEhSRVNINjJfUwkJMTYKLSNkZWZpbmUJCUFSOTE3MF9QSFlfRVhUX01JTkNDQV9QV1IJCTB4ZmY4MDAwMDAKLSNkZWZpbmUJCUFSOTE3MF9QSFlfRVhUX01JTkNDQV9QV1JfUwkJMjMKKyNkZWZpbmUJCUFSOTE3MF9QSFlfRVhUX0NDQV9NSU5fUFdSCQkweGZmODAwMDAwCisjZGVmaW5lCQlBUjkxNzBfUEhZX0VYVF9DQ0FfTUlOX1BXUl9TCQkyMwogCiAjZGVmaW5lCUFSOTE3MF9QSFlfUkVHX1NGQ09SUl9FWFQJCShBUjkxNzBfUEhZX1JFR19CQVNFICsgMHgwMWMwKQogI2RlZmluZQkJQVI5MTcwX1BIWV9TRkNPUlJfRVhUX00xX1RIUkVTSAkJMHgwMDAwMDA3ZgpAQCAtNTQ2LDE5ICs1NDYsMTkgQEAKICNkZWZpbmUJCUFSOTE3MF9QSFlfRk9SQ0VfWFBBX0NGR19TCQkwCiAKICNkZWZpbmUJQVI5MTcwX1BIWV9SRUdfQ0gxX0NDQQkJCShBUjkxNzBfUEhZX1JFR19CQVNFICsgMHgxMDY0KQotI2RlZmluZQkJQVI5MTcwX1BIWV9DSDFfTUlOQ0NBX1BXUgkJMHgwZmY4MDAwMAotI2RlZmluZQkJQVI5MTcwX1BIWV9DSDFfTUlOQ0NBX1BXUl9TCQkxOQorI2RlZmluZQkJQVI5MTcwX1BIWV9DSDFfQ0NBX01JTl9QV1IJCTB4MGZmODAwMDAKKyNkZWZpbmUJCUFSOTE3MF9QSFlfQ0gxX0NDQV9NSU5fUFdSX1MJCTE5CiAKICNkZWZpbmUJQVI5MTcwX1BIWV9SRUdfQ0gyX0NDQQkJCShBUjkxNzBfUEhZX1JFR19CQVNFICsgMHgyMDY0KQotI2RlZmluZQkJQVI5MTcwX1BIWV9DSDJfTUlOQ0NBX1BXUgkJMHgwZmY4MDAwMAotI2RlZmluZQkJQVI5MTcwX1BIWV9DSDJfTUlOQ0NBX1BXUl9TCQkxOQorI2RlZmluZQkJQVI5MTcwX1BIWV9DSDJfQ0NBX01JTl9QV1IJCTB4MGZmODAwMDAKKyNkZWZpbmUJCUFSOTE3MF9QSFlfQ0gyX0NDQV9NSU5fUFdSX1MJCTE5CiAKICNkZWZpbmUJQVI5MTcwX1BIWV9SRUdfQ0gxX0VYVF9DQ0EJCShBUjkxNzBfUEhZX1JFR19CQVNFICsgMHgxMWJjKQotI2RlZmluZQkJQVI5MTcwX1BIWV9DSDFfRVhUX01JTkNDQV9QV1IJCTB4ZmY4MDAwMDAKLSNkZWZpbmUJCUFSOTE3MF9QSFlfQ0gxX0VYVF9NSU5DQ0FfUFdSX1MJCTIzCisjZGVmaW5lCQlBUjkxNzBfUEhZX0NIMV9FWFRfQ0NBX01JTl9QV1IJCTB4ZmY4MDAwMDAKKyNkZWZpbmUJCUFSOTE3MF9QSFlfQ0gxX0VYVF9DQ0FfTUlOX1BXUl9TCTIzCiAKICNkZWZpbmUJQVI5MTcwX1BIWV9SRUdfQ0gyX0VYVF9DQ0EJCShBUjkxNzBfUEhZX1JFR19CQVNFICsgMHgyMWJjKQotI2RlZmluZQkJQVI5MTcwX1BIWV9DSDJfRVhUX01JTkNDQV9QV1IJCTB4ZmY4MDAwMDAKLSNkZWZpbmUJCUFSOTE3MF9QSFlfQ0gyX0VYVF9NSU5DQ0FfUFdSX1MJCTIzCisjZGVmaW5lCQlBUjkxNzBfUEhZX0NIMl9FWFRfQ0NBX01JTl9QV1IJCTB4ZmY4MDAwMDAKKyNkZWZpbmUJCUFSOTE3MF9QSFlfQ0gyX0VYVF9DQ0FfTUlOX1BXUl9TCTIzCiAKICNlbmRpZgkvKiBfX0NBUkw5MTcwX1NIQVJFRF9QSFlfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2Nhcmw5MTcwL3R4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvY2FybDkxNzAvdHguYwppbmRleCA3ZTY1MDZhLi42Y2M1OGUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvY2FybDkxNzAvdHguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvY2FybDkxNzAvdHguYwpAQCAtMjQyLDkgKzI0MiwxMSBAQAogCQkJYXItPnR4X2FtcGR1X3NjaGVkdWxlID0gdHJ1ZTsKIAogCQlpZiAodHhpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9TVEFUX0FNUERVKSB7Ci0JCQl0eGluZm8tPnN0YXR1cy5hbXBkdV9sZW4gPSB0eGluZm8tPnBhZFswXTsKLQkJCXR4aW5mby0+c3RhdHVzLmFtcGR1X2Fja19sZW4gPSB0eGluZm8tPnBhZFsxXTsKLQkJCXR4aW5mby0+cGFkWzBdID0gdHhpbmZvLT5wYWRbMV0gPSAwOworCQkJc3RydWN0IF9jYXJsOTE3MF90eF9zdXBlcmZyYW1lICpzdXBlcjsKKworCQkJc3VwZXIgPSAodm9pZCAqKXNrYi0+ZGF0YTsKKwkJCXR4aW5mby0+c3RhdHVzLmFtcGR1X2xlbiA9IHN1cGVyLT5zLnJpeDsKKwkJCXR4aW5mby0+c3RhdHVzLmFtcGR1X2Fja19sZW4gPSBzdXBlci0+cy5jbnQ7CiAJCX0gZWxzZSBpZiAodHhpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9TVEFUX0FDSykgewogCQkJLyoKIAkJCSAqIGRyb3AgcmVkdW5kYW50IHR4X3N0YXR1cyByZXBvcnRzOgpAQCAtMzM3LDcgKzMzOSw4IEBACiAJdTggdGlkOwogCiAJaWYgKCEodHhpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQU1QRFUpIHx8Ci0JICAgIHR4aW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0lOSkVDVEVEKQorCSAgICB0eGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9JTkpFQ1RFRCB8fAorCSAgICghKHN1cGVyLT5mLm1hY19jb250cm9sICYgY3B1X3RvX2xlMTYoQVI5MTcwX1RYX01BQ19BR0dSKSkpKQogCQlyZXR1cm47CiAKIAl0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwpAQCAtMzg5LDggKzM5Miw4IEBACiAJCXN0YV9pbmZvLT5zdGF0c1t0aWRdLmFtcGR1X2Fja19sZW4rKzsKIAogCWlmIChzdXBlci0+Zi5tYWNfY29udHJvbCAmIGNwdV90b19sZTE2KEFSOTE3MF9UWF9NQUNfSU1NX0JBKSkgewotCQl0eGluZm8tPnBhZFswXSA9IHN0YV9pbmZvLT5zdGF0c1t0aWRdLmFtcGR1X2xlbjsKLQkJdHhpbmZvLT5wYWRbMV0gPSBzdGFfaW5mby0+c3RhdHNbdGlkXS5hbXBkdV9hY2tfbGVuOworCQlzdXBlci0+cy5yaXggPSBzdGFfaW5mby0+c3RhdHNbdGlkXS5hbXBkdV9sZW47CisJCXN1cGVyLT5zLmNudCA9IHN0YV9pbmZvLT5zdGF0c1t0aWRdLmFtcGR1X2Fja19sZW47CiAJCXR4aW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRfQU1QRFU7CiAJCXN0YV9pbmZvLT5zdGF0c1t0aWRdLmNsZWFyID0gdHJ1ZTsKIAl9CkBAIC01MjQsNiArNTI3LDU5IEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBjYXJsOTE3MF90eF9hbXBkdV90aW1lb3V0KHN0cnVjdCBhcjkxNzAgKmFyKQoreworCXN0cnVjdCBjYXJsOTE3MF9zdGFfdGlkICppdGVyOworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eGluZm87CisJc3RydWN0IGNhcmw5MTcwX3R4X2luZm8gKmFyaW5mbzsKKwlzdHJ1Y3QgX2Nhcmw5MTcwX3R4X3N1cGVyZnJhbWUgKnN1cGVyOworCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGE7CisJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOworCXVuc2lnbmVkIGludCB2aWZfaWQ7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoaXRlciwgJmFyLT50eF9hbXBkdV9saXN0LCBsaXN0KSB7CisJCWlmIChpdGVyLT5zdGF0ZSA8IENBUkw5MTcwX1RJRF9TVEFURV9JRExFKQorCQkJY29udGludWU7CisKKwkJc3Bpbl9sb2NrX2JoKCZpdGVyLT5sb2NrKTsKKwkJc2tiID0gc2tiX3BlZWsoJml0ZXItPnF1ZXVlKTsKKwkJaWYgKCFza2IpCisJCQlnb3RvIHVubG9jazsKKworCQl0eGluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJCWFyaW5mbyA9ICh2b2lkICopdHhpbmZvLT5yYXRlX2RyaXZlcl9kYXRhOworCQlpZiAodGltZV9pc19hZnRlcl9qaWZmaWVzKGFyaW5mby0+dGltZW91dCArCisJCSAgICBtc2Vjc190b19qaWZmaWVzKENBUkw5MTcwX1FVRVVFX1RJTUVPVVQpKSkKKwkJCWdvdG8gdW5sb2NrOworCisJCXN1cGVyID0gKHZvaWQgKikgc2tiLT5kYXRhOworCQloZHIgPSAodm9pZCAqKSBzdXBlci0+ZnJhbWVfZGF0YTsKKworCQl2aWZfaWQgPSAoc3VwZXItPnMubWlzYyAmIENBUkw5MTcwX1RYX1NVUEVSX01JU0NfVklGX0lEKSA+PgorCQkJIENBUkw5MTcwX1RYX1NVUEVSX01JU0NfVklGX0lEX1M7CisKKwkJaWYgKFdBUk5fT04odmlmX2lkID49IEFSOTE3MF9NQVhfVklSVFVBTF9NQUMpKQorCQkJZ290byB1bmxvY2s7CisKKwkJdmlmID0gcmN1X2RlcmVmZXJlbmNlKGFyLT52aWZfcHJpdlt2aWZfaWRdLnZpZik7CisJCWlmIChXQVJOX09OKCF2aWYpKQorCQkJZ290byB1bmxvY2s7CisKKwkJc3RhID0gaWVlZTgwMjExX2ZpbmRfc3RhKHZpZiwgaGRyLT5hZGRyMSk7CisJCWlmIChXQVJOX09OKCFzdGEpKQorCQkJZ290byB1bmxvY2s7CisKKwkJaWVlZTgwMjExX3N0b3BfdHhfYmFfc2Vzc2lvbihzdGEsIGl0ZXItPnRpZCk7Cit1bmxvY2s6CisJCXNwaW5fdW5sb2NrX2JoKCZpdGVyLT5sb2NrKTsKKworCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKK30KKwogdm9pZCBjYXJsOTE3MF90eF9qYW5pdG9yKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgYXI5MTcwICphciA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYXI5MTcwLApAQCAtNTM0LDYgKzU5MCw3IEBACiAJYXItPnR4X2phbml0b3JfbGFzdF9ydW4gPSBqaWZmaWVzOwogCiAJY2FybDkxNzBfY2hlY2tfcXVldWVfc3RvcF90aW1lb3V0KGFyKTsKKwljYXJsOTE3MF90eF9hbXBkdV90aW1lb3V0KGFyKTsKIAogCWlmICghYXRvbWljX3JlYWQoJmFyLT50eF90b3RhbF9xdWV1ZWQpKQogCQlyZXR1cm47CkBAIC04NDIsMTAgKzg5OSw4IEBACiAJCWlmICh1bmxpa2VseSghc3RhIHx8ICFjdmlmKSkKIAkJCWdvdG8gZXJyX291dDsKIAotCQlmYWN0b3IgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIDF1LAotCQkJIGluZm8tPmNvbnRyb2wuc3RhLT5odF9jYXAuYW1wZHVfZmFjdG9yKTsKLQotCQlkZW5zaXR5ID0gaW5mby0+Y29udHJvbC5zdGEtPmh0X2NhcC5hbXBkdV9kZW5zaXR5OworCQlmYWN0b3IgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIDF1LCBzdGEtPmh0X2NhcC5hbXBkdV9mYWN0b3IpOworCQlkZW5zaXR5ID0gc3RhLT5odF9jYXAuYW1wZHVfZGVuc2l0eTsKIAogCQlpZiAoZGVuc2l0eSkgewogCQkJLyoKQEAgLTEyMDYsNiArMTI2MSw3IEBACiBzdGF0aWMgYm9vbCBjYXJsOTE3MF90eF9hbXBkdV9xdWV1ZShzdHJ1Y3QgYXI5MTcwICphciwKIAlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogeworCXN0cnVjdCBfY2FybDkxNzBfdHhfc3VwZXJmcmFtZSAqc3VwZXIgPSAodm9pZCAqKSBza2ItPmRhdGE7CiAJc3RydWN0IGNhcmw5MTcwX3N0YV9pbmZvICpzdGFfaW5mbzsKIAlzdHJ1Y3QgY2FybDkxNzBfc3RhX3RpZCAqYWdnOwogCXN0cnVjdCBza19idWZmICppdGVyOwpAQCAtMTI3NCw2ICsxMzMwLDcgQEAKIAogZXJyX3VubG9ja19yY3U6CiAJcmN1X3JlYWRfdW5sb2NrKCk7CisJc3VwZXItPmYubWFjX2NvbnRyb2wgJj0gfmNwdV90b19sZTE2KEFSOTE3MF9UWF9NQUNfQUdHUik7CiAJY2FybDkxNzBfdHhfc3RhdHVzKGFyLCBza2IsIGZhbHNlKTsKIAlhci0+dHhfZHJvcHBlZCsrOwogCXJldHVybiBmYWxzZTsKQEAgLTEzMDIsOSArMTM1OSw2IEBACiAJICovCiAKIAlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FNUERVKSB7Ci0JCWlmIChXQVJOX09OX09OQ0UoIXN0YSkpCi0JCQlnb3RvIGVycl9mcmVlOwotCiAJCXJ1biA9IGNhcmw5MTcwX3R4X2FtcGR1X3F1ZXVlKGFyLCBzdGEsIHNrYik7CiAJCWlmIChydW4pCiAJCQljYXJsOTE3MF90eF9hbXBkdShhcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvY2FybDkxNzAvdXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvY2FybDkxNzAvdXNiLmMKaW5kZXggNzUwNGVkMS4uNTM3NzMyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2Nhcmw5MTcwL3VzYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC91c2IuYwpAQCAtMTYwLDggKzE2MCw3IEBACiAKIHN0YXRpYyB2b2lkIGNhcmw5MTcwX3VzYl90eF9kYXRhX2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYikKIHsKLQlzdHJ1Y3QgYXI5MTcwICphciA9IChzdHJ1Y3QgYXI5MTcwICopCi0JICAgICAgdXNiX2dldF9pbnRmZGF0YSh1c2JfaWZudW1fdG9faWYodXJiLT5kZXYsIDApKTsKKwlzdHJ1Y3QgYXI5MTcwICphciA9IHVzYl9nZXRfaW50ZmRhdGEodXNiX2lmbnVtX3RvX2lmKHVyYi0+ZGV2LCAwKSk7CiAKIAlpZiAoV0FSTl9PTl9PTkNFKCFhcikpIHsKIAkJZGV2X2tmcmVlX3NrYl9pcnEodXJiLT5jb250ZXh0KTsKQEAgLTQzMyw3ICs0MzIsNyBAQAogCQkJICogZGV2aWNlLgogCQkJICovCiAKLQkJCWNhcmw5MTcwX3Jlc3RhcnQoYXIsIENBUkw5MTcwX1JSX1NMT1dfU1lTVEVNKTsKKwkJCWllZWU4MDIxMV9xdWV1ZV93b3JrKGFyLT5odywgJmFyLT5waW5nX3dvcmspOwogCQl9CiAJfSBlbHNlIHsKIAkJLyoKQEAgLTgzNSw3ICs4MzQsNyBAQAogCWlmIChlcnIpCiAJCWdvdG8gZXJyX291dDsKIAotCS8qIGZpcm13YXJlIHJlc3RhcnRzIGNtZCBjb3VudGVyICovCisJLyogbm93LCBzdGFydCB0aGUgY29tbWFuZCByZXNwb25zZSBjb3VudGVyICovCiAJYXItPmNtZF9zZXEgPSAtMTsKIAogCXJldHVybiAwOwpAQCAtODUyLDcgKzg1MSwxMiBAQAogCWlmIChhci0+aW50Zi0+Y29uZGl0aW9uICE9IFVTQl9JTlRFUkZBQ0VfQk9VTkQpCiAJCXJldHVybiAwOwogCi0JLyogRGlzYWJsZSBjb21tYW5kIHJlc3BvbnNlIHNlcXVlbmNlIGNvdW50ZXIuICovCisJLyoKKwkgKiBEaXNhYmxlIHRoZSBjb21tYW5kIHJlc3BvbnNlIHNlcXVlbmNlIGNvdW50ZXIgY2hlY2suCisJICogV2UgYWxyZWFkeSBrbm93IHRoYXQgdGhlIGRldmljZS9maXJtd2FyZSBpcyBpbiBhIGJhZCBzdGF0ZS4KKwkgKiBTbywgbm8gZXh0cmEgcG9pbnRzIGFyZSBhd2FyZGVkIHRvIGFueW9uZSB3aG8gcmVtaW5kcyB0aGUKKwkgKiBkcml2ZXIgYWJvdXQgdGhhdC4KKwkgKi8KIAlhci0+Y21kX3NlcSA9IC0yOwogCiAJZXJyID0gY2FybDkxNzBfcmVib290KGFyKTsKQEAgLTkwNCw2ICs5MDgsMTUgQEAKIHsKIAlpbnQgZXJyOwogCisJLyoKKwkgKiBUaGUgY2FybDkxNzAgZmlybXdhcmUgbGV0J3MgdGhlIGRyaXZlciBrbm93IHdoZW4gaXQncworCSAqIHJlYWR5IGZvciBhY3Rpb24uIEJ1dCB3ZSBoYXZlIHRvIGJlIHByZXBhcmVkIHRvIGdyYWNlZnVsbHkKKwkgKiBoYW5kbGUgYWxsIHNwdXJpb3VzIFtmbHVzaGVkXSBtZXNzYWdlcyBhZnRlciBlYWNoIChyZS0pYm9vdC4KKwkgKiBUaHVzIHRoZSBjb21tYW5kIHJlc3BvbnNlIGNvdW50ZXIgcmVtYWlucyBkaXNhYmxlZCB1bnRpbCBpdAorCSAqIGNhbiBiZSBzYWZlbHkgc3luY2hyb25pemVkLgorCSAqLworCWFyLT5jbWRfc2VxID0gLTI7CisKIAllcnIgPSBjYXJsOTE3MF91c2Jfc2VuZF9yeF9pcnFfdXJiKGFyKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9vdXQ7CkBAIC05MTIsMTQgKzkyNSwyMSBAQAogCWlmIChlcnIpCiAJCWdvdG8gZXJyX3Vucng7CiAKKwllcnIgPSBjYXJsOTE3MF91c2Jfb3Blbihhcik7CisJaWYgKGVycikKKwkJZ290byBlcnJfdW5yeDsKKwogCW11dGV4X2xvY2soJmFyLT5tdXRleCk7CiAJZXJyID0gY2FybDkxNzBfdXNiX2xvYWRfZmlybXdhcmUoYXIpOwogCW11dGV4X3VubG9jaygmYXItPm11dGV4KTsKIAlpZiAoZXJyKQotCQlnb3RvIGVycl91bnJ4OworCQlnb3RvIGVycl9zdG9wOwogCiAJcmV0dXJuIDA7CiAKK2Vycl9zdG9wOgorCWNhcmw5MTcwX3VzYl9zdG9wKGFyKTsKKwogZXJyX3Vucng6CiAJY2FybDkxNzBfdXNiX2NhbmNlbF91cmJzKGFyKTsKIApAQCAtOTY1LDEwICs5ODUsNiBAQAogCWlmIChlcnIpCiAJCWdvdG8gZXJyX2ZyZWVmdzsKIAotCWVyciA9IGNhcmw5MTcwX3VzYl9vcGVuKGFyKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl91bnJ4OwotCiAJZXJyID0gY2FybDkxNzBfcmVnaXN0ZXIoYXIpOwogCiAJY2FybDkxNzBfdXNiX3N0b3AoYXIpOwpAQCAtMTA0NCw3ICsxMDYwLDYgQEAKIAlhdG9taWNfc2V0KCZhci0+cnhfd29ya191cmJzLCAwKTsKIAlhdG9taWNfc2V0KCZhci0+cnhfYW5jaF91cmJzLCAwKTsKIAlhdG9taWNfc2V0KCZhci0+cnhfcG9vbF91cmJzLCAwKTsKLQlhci0+Y21kX3NlcSA9IC0yOwogCiAJdXNiX2dldF9kZXYoYXItPnVkZXYpOwogCkBAIC0xMDkxLDEwICsxMTA2LDYgQEAKIAogCWNhcmw5MTcwX3VzYl9jYW5jZWxfdXJicyhhcik7CiAKLQkvKgotCSAqIGZpcm13YXJlIGF1dG9tYXRpY2FsbHkgcmVib290cyBmb3IgdXNiIHN1c3BlbmQuCi0JICovCi0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMTEwNywxNSArMTExOCwyMyBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAogCXVzYl91bnBvaXNvbl9hbmNob3JlZF91cmJzKCZhci0+cnhfYW5jaCk7CisJY2FybDkxNzBfc2V0X3N0YXRlKGFyLCBDQVJMOTE3MF9TVE9QUEVEKTsKKworCS8qCisJICogVGhlIFVTQiBkb2N1bWVudGF0aW9uIGRlbWFuZHMgdGhhdCBbZm9yIHN1c3BlbmRdIGFsbCB0cmFmZmljCisJICogdG8gYW5kIGZyb20gdGhlIGRldmljZSBoYXMgdG8gc3RvcC4gVGhpcyB3b3VsZCBiZSBmaW5lLCBidXQKKwkgKiB0aGVyZSdzIGEgY2F0Y2g6IHRoZSBkZXZpY2VbdXNiIHBoeV0gZG9lcyBub3QgY29tZSBiYWNrLgorCSAqCisJICogVXBvbiByZXN1bWUgdGhlIGZpcm13YXJlIHdpbGwgImtpbGwiIGl0c2VsZiBhbmQgdGhlCisJICogYm9vdC1jb2RlIHNvcnRzIG91dCB0aGUgbWFnaWMgdm9vZG9vLgorCSAqIE5vdCB2ZXJ5IG5pY2UsIGJ1dCB0aGVyZSdzIG5vdCBtdWNoIHdoYXQgY291bGQgZ28gd3JvbmcuCisJICovCisJbXNsZWVwKDExMDApOwogCiAJZXJyID0gY2FybDkxNzBfdXNiX2luaXRfZGV2aWNlKGFyKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl91bnJ4OwogCi0JZXJyID0gY2FybDkxNzBfdXNiX29wZW4oYXIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX3Vucng7Ci0KIAlyZXR1cm4gMDsKIAogZXJyX3Vucng6CkBAIC0xMTM0LDYgKzExNTMsNyBAQAogI2lmZGVmIENPTkZJR19QTQogCS5zdXNwZW5kID0gY2FybDkxNzBfdXNiX3N1c3BlbmQsCiAJLnJlc3VtZSA9IGNhcmw5MTcwX3VzYl9yZXN1bWUsCisJLnJlc2V0X3Jlc3VtZSA9IGNhcmw5MTcwX3VzYl9yZXN1bWUsCiAjZW5kaWYgLyogQ09ORklHX1BNICovCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvY2FybDkxNzAvdmVyc2lvbi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2Nhcmw5MTcwL3ZlcnNpb24uaAppbmRleCBmZjUzZjA3Li5lZTBmODRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvY2FybDkxNzAvdmVyc2lvbi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC92ZXJzaW9uLmgKQEAgLTEsNyArMSw3IEBACiAjaWZuZGVmIF9fQ0FSTDkxNzBfU0hBUkVEX1ZFUlNJT05fSAogI2RlZmluZSBfX0NBUkw5MTcwX1NIQVJFRF9WRVJTSU9OX0gKICNkZWZpbmUgQ0FSTDkxNzBGV19WRVJTSU9OX1lFQVIgMTAKLSNkZWZpbmUgQ0FSTDkxNzBGV19WRVJTSU9OX01PTlRIIDkKLSNkZWZpbmUgQ0FSTDkxNzBGV19WRVJTSU9OX0RBWSAyOAotI2RlZmluZSBDQVJMOTE3MEZXX1ZFUlNJT05fR0lUICIxLjguOC4zIgorI2RlZmluZSBDQVJMOTE3MEZXX1ZFUlNJT05fTU9OVEggMTAKKyNkZWZpbmUgQ0FSTDkxNzBGV19WRVJTSU9OX0RBWSAyOQorI2RlZmluZSBDQVJMOTE3MEZXX1ZFUlNJT05fR0lUICIxLjkuMCIKICNlbmRpZiAvKiBfX0NBUkw5MTcwX1NIQVJFRF9WRVJTSU9OX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9kZWJ1Zy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2RlYnVnLmMKaW5kZXggZGFjZmIyMy4uNTM2N2IxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2RlYnVnLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2RlYnVnLmMKQEAgLTE1LDIxICsxNSw2IEBACiAgKi8KIAogI2luY2x1ZGUgImF0aC5oIgotI2luY2x1ZGUgImRlYnVnLmgiCi0KLXZvaWQgYXRoX3ByaW50KHN0cnVjdCBhdGhfY29tbW9uICpjb21tb24sIGludCBkYmdfbWFzaywgY29uc3QgY2hhciAqZm10LCAuLi4pCi17Ci0JdmFfbGlzdCBhcmdzOwotCi0JaWYgKGxpa2VseSghKGNvbW1vbi0+ZGVidWdfbWFzayAmIGRiZ19tYXNrKSkpCi0JCXJldHVybjsKLQotCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgImF0aDogIik7Ci0JdnByaW50ayhmbXQsIGFyZ3MpOwotCXZhX2VuZChhcmdzKTsKLX0KLUVYUE9SVF9TWU1CT0woYXRoX3ByaW50KTsKIAogY29uc3QgY2hhciAqYXRoX29wbW9kZV90b19zdHJpbmcoZW51bSBubDgwMjExX2lmdHlwZSBvcG1vZGUpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvZGVidWcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9kZWJ1Zy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NGU0YWYyLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9kZWJ1Zy5oCisrKyAvZGV2L251bGwKQEAgLTEsOTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgotICoKLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQotICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKLSAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCi0gKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCi0gKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KLSAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCi0gKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotICovCi0KLSNpZm5kZWYgQVRIX0RFQlVHX0gKLSNkZWZpbmUgQVRIX0RFQlVHX0gKLQotI2luY2x1ZGUgImF0aC5oIgotCi0vKioKLSAqIGVudW0gYXRoX2RlYnVnX2xldmVsIC0gYXRoZXJvcyB3aXJlbGVzcyBkZWJ1ZyBsZXZlbAotICoKLSAqIEBBVEhfREJHX1JFU0VUOiByZXNldCBwcm9jZXNzaW5nCi0gKiBAQVRIX0RCR19RVUVVRTogaGFyZHdhcmUgcXVldWUgbWFuYWdlbWVudAotICogQEFUSF9EQkdfRUVQUk9NOiBlZXByb20gcHJvY2Vzc2luZwotICogQEFUSF9EQkdfQ0FMSUJSQVRFOiBwZXJpb2RpYyBjYWxpYnJhdGlvbgotICogQEFUSF9EQkdfSU5URVJSVVBUOiBpbnRlcnJ1cHQgcHJvY2Vzc2luZwotICogQEFUSF9EQkdfUkVHVUxBVE9SWTogcmVndWxhdG9yeSBwcm9jZXNzaW5nCi0gKiBAQVRIX0RCR19BTkk6IGFkYXB0aXZlIG5vaXNlIGltbXVuaXRpdmUgcHJvY2Vzc2luZwotICogQEFUSF9EQkdfWE1JVDogYmFzaWMgeG1pdCBvcGVyYXRpb24KLSAqIEBBVEhfREJHX0JFQUNPTjogYmVhY29uIGhhbmRsaW5nCi0gKiBAQVRIX0RCR19DT05GSUc6IGNvbmZpZ3VyYXRpb24gb2YgdGhlIGhhcmR3YXJlCi0gKiBAQVRIX0RCR19GQVRBTDogZmF0YWwgZXJyb3JzLCB0aGlzIGlzIHRoZSBkZWZhdWx0LCBEQkdfREVGQVVMVAotICogQEFUSF9EQkdfUFM6IHBvd2VyIHNhdmUgcHJvY2Vzc2luZwotICogQEFUSF9EQkdfSFdUSU1FUjogaGFyZHdhcmUgdGltZXIgaGFuZGxpbmcKLSAqIEBBVEhfREJHX0JUQ09FWDogYmx1ZXRvb3RoIGNvZXhpc3RhbmNlCi0gKiBAQVRIX0RCR19CU1RVQ0s6IHN0dWNrIGJlYWNvbnMKLSAqIEBBVEhfREJHX0FOWTogZW5hYmxlIGFsbCBkZWJ1Z2dpbmcKLSAqCi0gKiBUaGUgZGVidWcgbGV2ZWwgaXMgdXNlZCB0byBjb250cm9sIHRoZSBhbW91bnQgYW5kIHR5cGUgb2YgZGVidWdnaW5nIG91dHB1dAotICogd2Ugd2FudCB0byBzZWUuIEVhY2ggZHJpdmVyIGhhcyBpdHMgb3duIG1ldGhvZCBmb3IgZW5hYmxpbmcgZGVidWdnaW5nIGFuZAotICogbW9kaWZ5aW5nIGRlYnVnIGxldmVsIHN0YXRlcyAtLSBidXQgdGhpcyBpcyB0eXBpY2FsbHkgZG9uZSB0aHJvdWdoIGEKLSAqIG1vZHVsZSBwYXJhbWV0ZXIgJ2RlYnVnJyBhbG9uZyB3aXRoIGEgcmVzcGVjdGl2ZSAnZGVidWcnIGRlYnVnZnMgZmlsZQotICogZW50cnkuCi0gKi8KLWVudW0gQVRIX0RFQlVHIHsKLQlBVEhfREJHX1JFU0VUCQk9IDB4MDAwMDAwMDEsCi0JQVRIX0RCR19RVUVVRQkJPSAweDAwMDAwMDAyLAotCUFUSF9EQkdfRUVQUk9NCQk9IDB4MDAwMDAwMDQsCi0JQVRIX0RCR19DQUxJQlJBVEUJPSAweDAwMDAwMDA4LAotCUFUSF9EQkdfSU5URVJSVVBUCT0gMHgwMDAwMDAxMCwKLQlBVEhfREJHX1JFR1VMQVRPUlkJPSAweDAwMDAwMDIwLAotCUFUSF9EQkdfQU5JCQk9IDB4MDAwMDAwNDAsCi0JQVRIX0RCR19YTUlUCQk9IDB4MDAwMDAwODAsCi0JQVRIX0RCR19CRUFDT04JCT0gMHgwMDAwMDEwMCwKLQlBVEhfREJHX0NPTkZJRwkJPSAweDAwMDAwMjAwLAotCUFUSF9EQkdfRkFUQUwJCT0gMHgwMDAwMDQwMCwKLQlBVEhfREJHX1BTCQk9IDB4MDAwMDA4MDAsCi0JQVRIX0RCR19IV1RJTUVSCQk9IDB4MDAwMDEwMDAsCi0JQVRIX0RCR19CVENPRVgJCT0gMHgwMDAwMjAwMCwKLQlBVEhfREJHX1dNSQkJPSAweDAwMDA0MDAwLAotCUFUSF9EQkdfQlNUVUNLCQk9IDB4MDAwMDgwMDAsCi0JQVRIX0RCR19BTlkJCT0gMHhmZmZmZmZmZgotfTsKLQotI2RlZmluZSBBVEhfREJHX0RFRkFVTFQgKEFUSF9EQkdfRkFUQUwpCi0KLSNpZmRlZiBDT05GSUdfQVRIX0RFQlVHCi12b2lkIGF0aF9wcmludChzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uLCBpbnQgZGJnX21hc2ssIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQotCV9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMywgNCkpKTsKLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAzLCA0KSkpCi1hdGhfcHJpbnQoc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiwgaW50IGRiZ19tYXNrLCBjb25zdCBjaGFyICpmbXQsIC4uLikKLXsKLX0KLSNlbmRpZiAvKiBDT05GSUdfQVRIX0RFQlVHICovCi0KLS8qKiBSZXR1cm5zIHN0cmluZyBkZXNjcmliaW5nIG9wbW9kZSwgb3IgTlVMTCBpZiB1bmtub3duIG1vZGUuICovCi0jaWZkZWYgQ09ORklHX0FUSF9ERUJVRwotY29uc3QgY2hhciAqYXRoX29wbW9kZV90b19zdHJpbmcoZW51bSBubDgwMjExX2lmdHlwZSBvcG1vZGUpOwotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqYXRoX29wbW9kZV90b19zdHJpbmcoZW51bSBubDgwMjExX2lmdHlwZSBvcG1vZGUpCi17Ci0JcmV0dXJuICJVTktOT1dOIjsKLX0KLSNlbmRpZgotCi0jZW5kaWYgLyogQVRIX0RFQlVHX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9rZXkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9rZXkuYwppbmRleCBiZDIxYTRkLi41ZDQ2NWU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgva2V5LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2tleS5jCkBAIC0yMCw3ICsyMCw2IEBACiAKICNpbmNsdWRlICJhdGguaCIKICNpbmNsdWRlICJyZWcuaCIKLSNpbmNsdWRlICJkZWJ1Zy5oIgogCiAjZGVmaW5lIFJFR19SRUFECQkJKGNvbW1vbi0+b3BzLT5yZWFkKQogI2RlZmluZSBSRUdfV1JJVEUoX2FoLCBfcmVnLCBfdmFsKQkoY29tbW9uLT5vcHMtPndyaXRlKShfYWgsIF92YWwsIF9yZWcpCkBAIC0zNyw4ICszNiw3IEBACiAJdm9pZCAqYWggPSBjb21tb24tPmFoOwogCiAJaWYgKGVudHJ5ID49IGNvbW1vbi0+a2V5bWF4KSB7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRkFUQUwsCi0JCQkgICJrZXljaGFjaGUgZW50cnkgJXUgb3V0IG9mIHJhbmdlXG4iLCBlbnRyeSk7CisJCWF0aF9lcnIoY29tbW9uLCAia2V5Y2FjaGUgZW50cnkgJXUgb3V0IG9mIHJhbmdlXG4iLCBlbnRyeSk7CiAJCXJldHVybiBmYWxzZTsKIAl9CiAKQEAgLTYwLDYgKzU4LDggQEAKIAkJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9LRVkxKG1pY2VudHJ5KSwgMCk7CiAJCVJFR19XUklURShhaCwgQVJfS0VZVEFCTEVfS0VZMihtaWNlbnRyeSksIDApOwogCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX0tFWTMobWljZW50cnkpLCAwKTsKKwkJaWYgKGNvbW1vbi0+Y3J5cHRfY2FwcyAmIEFUSF9DUllQVF9DQVBfTUlDX0NPTUJJTkVEKQorCQkJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9LRVk0KG1pY2VudHJ5KSwgMCk7CiAKIAl9CiAKQEAgLTY3LDE1ICs2NywxNSBAQAogfQogRVhQT1JUX1NZTUJPTChhdGhfaHdfa2V5cmVzZXQpOwogCi1ib29sIGF0aF9od19rZXlzZXRtYWMoc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiwgdTE2IGVudHJ5LCBjb25zdCB1OCAqbWFjKQorc3RhdGljIGJvb2wgYXRoX2h3X2tleXNldG1hYyhzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uLAorCQkJICAgICB1MTYgZW50cnksIGNvbnN0IHU4ICptYWMpCiB7CiAJdTMyIG1hY0hpLCBtYWNMbzsKIAl1MzIgdW5pY2FzdF9mbGFnID0gQVJfS0VZVEFCTEVfVkFMSUQ7CiAJdm9pZCAqYWggPSBjb21tb24tPmFoOwogCiAJaWYgKGVudHJ5ID49IGNvbW1vbi0+a2V5bWF4KSB7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRkFUQUwsCi0JCQkgICJrZXljaGFjaGUgZW50cnkgJXUgb3V0IG9mIHJhbmdlXG4iLCBlbnRyeSk7CisJCWF0aF9lcnIoY29tbW9uLCAia2V5Y2FjaGUgZW50cnkgJXUgb3V0IG9mIHJhbmdlXG4iLCBlbnRyeSk7CiAJCXJldHVybiBmYWxzZTsKIAl9CiAKQEAgLTEwNywxNyArMTA3LDE2IEBACiAJcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgYXRoX2h3X3NldF9rZXljYWNoZV9lbnRyeShzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uLCB1MTYgZW50cnksCi0JCQkJIGNvbnN0IHN0cnVjdCBhdGhfa2V5dmFsICprLAotCQkJCSBjb25zdCB1OCAqbWFjKQorc3RhdGljIGJvb2wgYXRoX2h3X3NldF9rZXljYWNoZV9lbnRyeShzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uLCB1MTYgZW50cnksCisJCQkJICAgICAgY29uc3Qgc3RydWN0IGF0aF9rZXl2YWwgKmssCisJCQkJICAgICAgY29uc3QgdTggKm1hYykKIHsKIAl2b2lkICphaCA9IGNvbW1vbi0+YWg7CiAJdTMyIGtleTAsIGtleTEsIGtleTIsIGtleTMsIGtleTQ7CiAJdTMyIGtleVR5cGU7CiAKIAlpZiAoZW50cnkgPj0gY29tbW9uLT5rZXltYXgpIHsKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19GQVRBTCwKLQkJCSAgImtleWNhY2hlIGVudHJ5ICV1IG91dCBvZiByYW5nZVxuIiwgZW50cnkpOworCQlhdGhfZXJyKGNvbW1vbiwgImtleWNhY2hlIGVudHJ5ICV1IG91dCBvZiByYW5nZVxuIiwgZW50cnkpOwogCQlyZXR1cm4gZmFsc2U7CiAJfQogCkBAIC0xMjcsOCArMTI2LDggQEAKIAkJYnJlYWs7CiAJY2FzZSBBVEhfQ0lQSEVSX0FFU19DQ006CiAJCWlmICghKGNvbW1vbi0+Y3J5cHRfY2FwcyAmIEFUSF9DUllQVF9DQVBfQ0lQSEVSX0FFU0NDTSkpIHsKLQkJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQU5ZLAotCQkJCSAgIkFFUy1DQ00gbm90IHN1cHBvcnRlZCBieSB0aGlzIG1hYyByZXZcbiIpOworCQkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQU5ZLAorCQkJCSJBRVMtQ0NNIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBtYWMgcmV2XG4iKTsKIAkJCXJldHVybiBmYWxzZTsKIAkJfQogCQlrZXlUeXBlID0gQVJfS0VZVEFCTEVfVFlQRV9DQ007CkBAIC0xMzYsMTUgKzEzNSwxNSBAQAogCWNhc2UgQVRIX0NJUEhFUl9US0lQOgogCQlrZXlUeXBlID0gQVJfS0VZVEFCTEVfVFlQRV9US0lQOwogCQlpZiAoZW50cnkgKyA2NCA+PSBjb21tb24tPmtleW1heCkgewotCQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19BTlksCi0JCQkJICAiZW50cnkgJXUgaW5hcHByb3ByaWF0ZSBmb3IgVEtJUFxuIiwgZW50cnkpOworCQkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQU5ZLAorCQkJCSJlbnRyeSAldSBpbmFwcHJvcHJpYXRlIGZvciBUS0lQXG4iLCBlbnRyeSk7CiAJCQlyZXR1cm4gZmFsc2U7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBBVEhfQ0lQSEVSX1dFUDoKIAkJaWYgKGstPmt2X2xlbiA8IFdMQU5fS0VZX0xFTl9XRVA0MCkgewotCQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19BTlksCi0JCQkJICAiV0VQIGtleSBsZW5ndGggJXUgdG9vIHNtYWxsXG4iLCBrLT5rdl9sZW4pOworCQkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQU5ZLAorCQkJCSJXRVAga2V5IGxlbmd0aCAldSB0b28gc21hbGxcbiIsIGstPmt2X2xlbik7CiAJCQlyZXR1cm4gZmFsc2U7CiAJCX0KIAkJaWYgKGstPmt2X2xlbiA8PSBXTEFOX0tFWV9MRU5fV0VQNDApCkBAIC0xNTgsOCArMTU3LDcgQEAKIAkJa2V5VHlwZSA9IEFSX0tFWVRBQkxFX1RZUEVfQ0xSOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0ZBVEFMLAotCQkJICAiY2lwaGVyICV1IG5vdCBzdXBwb3J0ZWRcbiIsIGstPmt2X3R5cGUpOworCQlhdGhfZXJyKGNvbW1vbiwgImNpcGhlciAldSBub3Qgc3VwcG9ydGVkXG4iLCBrLT5rdl90eXBlKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KIApAQCAtMzQwLDggKzMzOCw3IEBACiAJbWVtY3B5KGhrLT5rdl9taWMsIGtleV90eG1pYywgc2l6ZW9mKGhrLT5rdl9taWMpKTsKIAlpZiAoIWF0aF9od19zZXRfa2V5Y2FjaGVfZW50cnkoY29tbW9uLCBrZXlpeCwgaGssIE5VTEwpKSB7CiAJCS8qIFRYIE1JQyBlbnRyeSBmYWlsZWQuIE5vIG5lZWQgdG8gcHJvY2VlZCBmdXJ0aGVyICovCi0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRkFUQUwsCi0JCQkgICJTZXR0aW5nIFRYIE1JQyBLZXkgRmFpbGVkXG4iKTsKKwkJYXRoX2Vycihjb21tb24sICJTZXR0aW5nIFRYIE1JQyBLZXkgRmFpbGVkXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL21haW4uYwppbmRleCA0ODcxOTNmLi5jMzI1MjAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9tYWluLmMKQEAgLTU2LDMgKzU2LDIzIEBACiAJcmV0dXJuIHNrYjsKIH0KIEVYUE9SVF9TWU1CT0woYXRoX3J4YnVmX2FsbG9jKTsKKworaW50IGF0aF9wcmludGsoY29uc3QgY2hhciAqbGV2ZWwsIHN0cnVjdCBhdGhfY29tbW9uICpjb21tb24sCisJICAgICAgIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXN0cnVjdCB2YV9mb3JtYXQgdmFmOworCXZhX2xpc3QgYXJnczsKKwlpbnQgcnRuOworCisJdmFfc3RhcnQoYXJncywgZm10KTsKKworCXZhZi5mbXQgPSBmbXQ7CisJdmFmLnZhID0gJmFyZ3M7CisKKwlydG4gPSBwcmludGsoIiVzYXRoOiAlcFYiLCBsZXZlbCwgJnZhZik7CisKKwl2YV9lbmQoYXJncyk7CisKKwlyZXR1cm4gcnRuOworfQorRVhQT1JUX1NZTUJPTChhdGhfcHJpbnRrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9yZWdkLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvcmVnZC5jCmluZGV4IDNmNDI0NGYuLjJiMTQ3NzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9yZWdkLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3JlZ2QuYwpAQCAtMzQyLDYgKzM0MiwxNCBAQAogCS8qIFdlIGFsd2F5cyBhcHBseSB0aGlzICovCiAJYXRoX3JlZ19hcHBseV9yYWRhcl9mbGFncyh3aXBoeSk7CiAKKwkvKgorCSAqIFRoaXMgd291bGQgaGFwcGVuIHdoZW4gd2UgaGF2ZSBzZW50IGEgY3VzdG9tIHJlZ3VsYXRvcnkgcmVxdWVzdAorCSAqIGEgd29ybGQgcmVndWxhdG9yeSBkb21haW4gYW5kIHRoZSBzY2hlZHVsZXIgaGFzbid0IHlldCBwcm9jZXNzZWQKKwkgKiBhbnkgcGVuZGluZyByZXF1ZXN0cyBpbiB0aGUgcXVldWUuCisJICovCisJaWYgKCFyZXF1ZXN0KQorCQlyZXR1cm4gMDsKKwogCXN3aXRjaCAocmVxdWVzdC0+aW5pdGlhdG9yKSB7CiAJY2FzZSBOTDgwMjExX1JFR0RPTV9TRVRfQllfRFJJVkVSOgogCWNhc2UgTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPUkU6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWwuYwppbmRleCBjOGY3MDkwLi40NmUzODJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsLmMKQEAgLTExNjEsNyArMTE2MSw3IEBACiAJc3RydWN0IGF0bWVsX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXU4IGlzcjsKIAlpbnQgaSA9IC0xOwotCXN0YXRpYyB1OCBpcnFfb3JkZXJbXSA9IHsKKwlzdGF0aWMgY29uc3QgdTggaXJxX29yZGVyW10gPSB7CiAJCUlTUl9PVVRfT0ZfUkFOR0UsCiAJCUlTUl9SeENPTVBMRVRFLAogCQlJU1JfVHhDT01QTEVURSwKQEAgLTM3NzEsNyArMzc3MSw5IEBACiAKIAlpZiAocmMpIHsKIAkJaWYgKGRldi0+ZGV2X2FkZHJbMF0gPT0gMHhGRikgewotCQkJdTggZGVmYXVsdF9tYWNbXSA9IHsweDAwLCAweDA0LCAweDI1LCAweDAwLCAweDAwLCAweDAwfTsKKwkJCXN0YXRpYyBjb25zdCB1OCBkZWZhdWx0X21hY1tdID0geworCQkJCTB4MDAsIDB4MDQsIDB4MjUsIDB4MDAsIDB4MDAsIDB4MDAKKwkJCX07CiAJCQlwcmludGsoS0VSTl9BTEVSVCAiJXM6ICoqKiBJbnZhbGlkIE1BQyBhZGRyZXNzLiBVUEdSQURFIEZpcm13YXJlICoqKipcbiIsIGRldi0+bmFtZSk7CiAJCQltZW1jcHkoZGV2LT5kZXZfYWRkciwgZGVmYXVsdF9tYWMsIDYpOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9LY29uZmlnCmluZGV4IDBhMDBkNDIuLjQ3MDMzZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9LY29uZmlnCkBAIC04NiwxNSArODYsMTYgQEAKIAlzZWxlY3QgU1NCX0JMT0NLSU8KIAlkZWZhdWx0IHkKIAotY29uZmlnIEI0M19OUEhZCi0JYm9vbCAiUHJlIElFRUUgODAyLjExbiBzdXBwb3J0IChCUk9LRU4pIgotCWRlcGVuZHMgb24gQjQzICYmIEVYUEVSSU1FTlRBTCAmJiBCUk9LRU4KK2NvbmZpZyBCNDNfUEhZX04KKwlib29sICJTdXBwb3J0IGZvciA4MDIuMTFuIChOLVBIWSkgZGV2aWNlcyAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIEI0MyAmJiBFWFBFUklNRU5UQUwKIAktLS1oZWxwLS0tCi0JICBTdXBwb3J0IGZvciB0aGUgSUVFRSA4MDIuMTFuIGRyYWZ0LgorCSAgU3VwcG9ydCBmb3IgdGhlIE4tUEhZLgogCi0JICBUSElTIElTIEJST0tFTiBBTkQgRE9FUyBOT1QgV09SSyBZRVQuCisJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgZGV2aWNlcyB3aXRoIE4tUEhZIHJldmlzaW9uIHVwIHRvIDIuCiAKLQkgIFNBWSBOLgorCSAgU2F5IE4gaWYgeW91IGV4cGVjdCBoaWdoIHN0YWJpbGl0eSBhbmQgcGVyZm9ybWFuY2UuIFNheWluZyBZIHdpbGwgbm90CisJICBhZmZlY3Qgb3RoZXIgZGV2aWNlcyBzdXBwb3J0IGFuZCBtYXkgcHJvdmlkZSBzdXBwb3J0IGZvciBiYXNpYyBuZWVkcy4KIAogY29uZmlnIEI0M19QSFlfTFAKIAlib29sICJTdXBwb3J0IGZvciBsb3ctcG93ZXIgKExQLVBIWSkgZGV2aWNlcyAoRVhQRVJJTUVOVEFMKSIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9NYWtlZmlsZQppbmRleCA2OWQ0YWYwLi5jZWYzMzRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL01ha2VmaWxlCkBAIC0xLDEyICsxLDEyIEBACiBiNDMteQkJCQkrPSBtYWluLm8KIGI0My15CQkJCSs9IHRhYmxlcy5vCi1iNDMtJChDT05GSUdfQjQzX05QSFkpCQkrPSB0YWJsZXNfbnBoeS5vCi1iNDMtJChDT05GSUdfQjQzX05QSFkpCQkrPSByYWRpb18yMDU1Lm8KLWI0My0kKENPTkZJR19CNDNfTlBIWSkJCSs9IHJhZGlvXzIwNTYubworYjQzLSQoQ09ORklHX0I0M19QSFlfTikJCSs9IHRhYmxlc19ucGh5Lm8KK2I0My0kKENPTkZJR19CNDNfUEhZX04pCQkrPSByYWRpb18yMDU1Lm8KK2I0My0kKENPTkZJR19CNDNfUEhZX04pCQkrPSByYWRpb18yMDU2Lm8KIGI0My15CQkJCSs9IHBoeV9jb21tb24ubwogYjQzLXkJCQkJKz0gcGh5X2cubwogYjQzLXkJCQkJKz0gcGh5X2EubwotYjQzLSQoQ09ORklHX0I0M19OUEhZKQkJKz0gcGh5X24ubworYjQzLSQoQ09ORklHX0I0M19QSFlfTikJCSs9IHBoeV9uLm8KIGI0My0kKENPTkZJR19CNDNfUEhZX0xQKQkrPSBwaHlfbHAubwogYjQzLSQoQ09ORklHX0I0M19QSFlfTFApCSs9IHRhYmxlc19scHBoeS5vCiBiNDMteQkJCQkrPSBzeXNmcy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvYjQzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvYjQzLmgKaW5kZXggNzI4MjFjNC4uYmQ0Y2I3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2I0My5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9iNDMuaApAQCAtMTUzLDYgKzE1MywxOSBAQAogI2RlZmluZSBCNDNfQkZIX0ZFTV9CVAkJCTB4MDA0MAkvKiBoYXMgRkVNIGFuZCBzd2l0Y2ggdG8gc2hhcmUgYW50ZW5uYQogCQkJCQkJICogd2l0aCBibHVldG9vdGggKi8KIAorLyogU1BST00gYm9hcmRmbGFnczJfbG8gdmFsdWVzICovCisjZGVmaW5lIEI0M19CRkwyX1JYQkJfSU5UX1JFR19ESVMJMHgwMDAxCS8qIGV4dGVybmFsIFJYIEJCIHJlZ3VsYXRvciBwcmVzZW50ICovCisjZGVmaW5lIEI0M19CRkwyX0FQTExfV0FSCQkweDAwMDIJLyogYWx0ZXJuYXRpdmUgQS1iYW5kIFBMTCBzZXR0aW5ncyBpbXBsZW1lbnRlZCAqLworI2RlZmluZSBCNDNfQkZMMl9UWFBXUkNUUkxfRU4gCQkweDAwMDQJLyogcGVybWl0cyBlbmFibGluZyBUWCBQb3dlciBDb250cm9sICovCisjZGVmaW5lIEI0M19CRkwyXzJYNF9ESVYJCTB4MDAwOAkvKiAyeDQgZGl2ZXJzaXR5IHN3aXRjaCAqLworI2RlZmluZSBCNDNfQkZMMl81R19QV1JHQUlOCQkweDAwMTAJLyogc3VwcG9ydHMgNUcgYmFuZCBwb3dlciBnYWluICovCisjZGVmaW5lIEI0M19CRkwyX1BDSUVXQVJfT1ZSCQkweDAwMjAJLyogb3ZlcnJpZGVzIEFTUE0gYW5kIENsa3JlcSBzZXR0aW5ncyAqLworI2RlZmluZSBCNDNfQkZMMl9DQUVTRVJTX0JSRAkJMHgwMDQwCS8qIGlzIENhZXNlcnMgYm9hcmQgKHVudXNlZCkgKi8KKyNkZWZpbmUgQjQzX0JGTDJfQlRDM1dJUkUJCTB4MDA4MAkvKiB1c2VkIDMtd2lyZSBibHVldG9vdGggY29leGlzdCAqLworI2RlZmluZSBCNDNfQkZMMl9TS1dSS0ZFTV9CUkQJCTB4MDEwMAkvKiA0MzIxbWNtOTMgdXNlcyBTa3l3b3JrcyBGRU0gKi8KKyNkZWZpbmUgQjQzX0JGTDJfU1BVUl9XQVIJCTB4MDIwMAkvKiBoYXMgYSB3b3JrYXJvdW5kIGZvciBjbG9jay1oYXJtb25pYyBzcHVycyAqLworI2RlZmluZSBCNDNfQkZMMl9HUExMX1dBUgkJMHgwNDAwCS8qIGFsdGVuYXRpdmUgRy1iYW5kIFBMTCBzZXR0aW5ncyBpbXBsZW1lbnRlZCAqLworCiAvKiBHUElPIHJlZ2lzdGVyIG9mZnNldCwgaW4gYm90aCBDaGlwQ29tbW9uIGFuZCBQQ0kgY29yZS4gKi8KICNkZWZpbmUgQjQzX0dQSU9fQ09OVFJPTAkJMHg2YwogCkBAIC00MDMsMTAgKzQxNiwxMCBAQAogCiAvKiA4MDIuMTEgY29yZSBzcGVjaWZpYyBUTSBTdGF0ZSBMb3cgKFNTQl9UTVNMT1cpIGZsYWdzICovCiAjZGVmaW5lIEI0M19UTVNMT1dfR01PREUJCTB4MjAwMDAwMDAJLyogRyBNb2RlIEVuYWJsZSAqLwotI2RlZmluZSBCNDNfVE1TTE9XX1BIWUNMS1NQRUVECQkweDAwQzAwMDAwCS8qIFBIWSBjbG9jayBzcGVlZCBtYXNrIChOLVBIWSBvbmx5KSAqLwotI2RlZmluZSAgQjQzX1RNU0xPV19QSFlDTEtTUEVFRF80ME1IWgkweDAwMDAwMDAwCS8qIDQwIE1IeiBQSFkgKi8KLSNkZWZpbmUgIEI0M19UTVNMT1dfUEhZQ0xLU1BFRURfODBNSFoJMHgwMDQwMDAwMAkvKiA4MCBNSHogUEhZICovCi0jZGVmaW5lICBCNDNfVE1TTE9XX1BIWUNMS1NQRUVEXzE2ME1IWgkweDAwODAwMDAwCS8qIDE2MCBNSHogUEhZICovCisjZGVmaW5lIEI0M19UTVNMT1dfUEhZX0JBTkRXSURUSAkweDAwQzAwMDAwCS8qIFBIWSBiYW5kIHdpZHRoIGFuZCBjbG9jayBzcGVlZCBtYXNrIChOLVBIWSBvbmx5KSAqLworI2RlZmluZSAgQjQzX1RNU0xPV19QSFlfQkFORFdJRFRIXzEwTUhaCTB4MDAwMDAwMDAJLyogMTAgTUh6IGJhbmR3aWR0aCwgNDAgTUh6IFBIWSAqLworI2RlZmluZSAgQjQzX1RNU0xPV19QSFlfQkFORFdJRFRIXzIwTUhaCTB4MDA0MDAwMDAJLyogMjAgTUh6IGJhbmR3aWR0aCwgODAgTUh6IFBIWSAqLworI2RlZmluZSAgQjQzX1RNU0xPV19QSFlfQkFORFdJRFRIXzQwTUhaCTB4MDA4MDAwMDAJLyogNDAgTUh6IGJhbmR3aWR0aCwgMTYwIE1IeiBQSFkgKi8KICNkZWZpbmUgQjQzX1RNU0xPV19QTExSRUZTRUwJCTB4MDAyMDAwMDAJLyogUExMIEZyZXF1ZW5jeSBSZWZlcmVuY2UgU2VsZWN0IChyZXYgPj0gNSkgKi8KICNkZWZpbmUgQjQzX1RNU0xPV19NQUNQSFlDTEtFTgkJMHgwMDEwMDAwMAkvKiBNQUMgUEhZIENsb2NrIENvbnRyb2wgRW5hYmxlIChyZXYgPj0gNSkgKi8KICNkZWZpbmUgQjQzX1RNU0xPV19QSFlSRVNFVAkJMHgwMDA4MDAwMAkvKiBQSFkgUmVzZXQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kbWEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kbWEuYwppbmRleCAxMGQwYWFmLi4zZDU1NjZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZG1hLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RtYS5jCkBAIC00MTUsMTEgKzQxNSw2IEBACiAKIHN0YXRpYyB2b2lkIGZyZWVfcmluZ21lbW9yeShzdHJ1Y3QgYjQzX2RtYXJpbmcgKnJpbmcpCiB7Ci0JZ2ZwX3QgZmxhZ3MgPSBHRlBfS0VSTkVMOwotCi0JaWYgKHJpbmctPnR5cGUgPT0gQjQzX0RNQV82NEJJVCkKLQkJZmxhZ3MgfD0gR0ZQX0RNQTsKLQogCWRtYV9mcmVlX2NvaGVyZW50KHJpbmctPmRldi0+ZGV2LT5kbWFfZGV2LCBCNDNfRE1BX1JJTkdNRU1TSVpFLAogCQkJICByaW5nLT5kZXNjYmFzZSwgcmluZy0+ZG1hYmFzZSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL21haW4uYwppbmRleCBhMTE4NjUyLi4yMmJjOWYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9tYWluLmMKQEAgLTMyMiw1OSArMzIyLDgzIEBACiAKIHZvaWQgYjQzaW5mbyhzdHJ1Y3QgYjQzX3dsICp3bCwgY29uc3QgY2hhciAqZm10LCAuLi4pCiB7CisJc3RydWN0IHZhX2Zvcm1hdCB2YWY7CiAJdmFfbGlzdCBhcmdzOwogCiAJaWYgKGI0M19tb2RwYXJhbV92ZXJib3NlIDwgQjQzX1ZFUkJPU0lUWV9JTkZPKQogCQlyZXR1cm47CiAJaWYgKCFiNDNfcmF0ZWxpbWl0KHdsKSkKIAkJcmV0dXJuOworCiAJdmFfc3RhcnQoYXJncywgZm10KTsKLQlwcmludGsoS0VSTl9JTkZPICJiNDMtJXM6ICIsCi0JICAgICAgICh3bCAmJiB3bC0+aHcpID8gd2lwaHlfbmFtZSh3bC0+aHctPndpcGh5KSA6ICJ3bGFuIik7Ci0JdnByaW50ayhmbXQsIGFyZ3MpOworCisJdmFmLmZtdCA9IGZtdDsKKwl2YWYudmEgPSAmYXJnczsKKworCXByaW50ayhLRVJOX0lORk8gImI0My0lczogJXBWIiwKKwkgICAgICAgKHdsICYmIHdsLT5odykgPyB3aXBoeV9uYW1lKHdsLT5ody0+d2lwaHkpIDogIndsYW4iLCAmdmFmKTsKKwogCXZhX2VuZChhcmdzKTsKIH0KIAogdm9pZCBiNDNlcnIoc3RydWN0IGI0M193bCAqd2wsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogeworCXN0cnVjdCB2YV9mb3JtYXQgdmFmOwogCXZhX2xpc3QgYXJnczsKIAogCWlmIChiNDNfbW9kcGFyYW1fdmVyYm9zZSA8IEI0M19WRVJCT1NJVFlfRVJST1IpCiAJCXJldHVybjsKIAlpZiAoIWI0M19yYXRlbGltaXQod2wpKQogCQlyZXR1cm47CisKIAl2YV9zdGFydChhcmdzLCBmbXQpOwotCXByaW50ayhLRVJOX0VSUiAiYjQzLSVzIEVSUk9SOiAiLAotCSAgICAgICAod2wgJiYgd2wtPmh3KSA/IHdpcGh5X25hbWUod2wtPmh3LT53aXBoeSkgOiAid2xhbiIpOwotCXZwcmludGsoZm10LCBhcmdzKTsKKworCXZhZi5mbXQgPSBmbXQ7CisJdmFmLnZhID0gJmFyZ3M7CisKKwlwcmludGsoS0VSTl9FUlIgImI0My0lcyBFUlJPUjogJXBWIiwKKwkgICAgICAgKHdsICYmIHdsLT5odykgPyB3aXBoeV9uYW1lKHdsLT5ody0+d2lwaHkpIDogIndsYW4iLCAmdmFmKTsKKwogCXZhX2VuZChhcmdzKTsKIH0KIAogdm9pZCBiNDN3YXJuKHN0cnVjdCBiNDNfd2wgKndsLCBjb25zdCBjaGFyICpmbXQsIC4uLikKIHsKKwlzdHJ1Y3QgdmFfZm9ybWF0IHZhZjsKIAl2YV9saXN0IGFyZ3M7CiAKIAlpZiAoYjQzX21vZHBhcmFtX3ZlcmJvc2UgPCBCNDNfVkVSQk9TSVRZX1dBUk4pCiAJCXJldHVybjsKIAlpZiAoIWI0M19yYXRlbGltaXQod2wpKQogCQlyZXR1cm47CisKIAl2YV9zdGFydChhcmdzLCBmbXQpOwotCXByaW50ayhLRVJOX1dBUk5JTkcgImI0My0lcyB3YXJuaW5nOiAiLAotCSAgICAgICAod2wgJiYgd2wtPmh3KSA/IHdpcGh5X25hbWUod2wtPmh3LT53aXBoeSkgOiAid2xhbiIpOwotCXZwcmludGsoZm10LCBhcmdzKTsKKworCXZhZi5mbXQgPSBmbXQ7CisJdmFmLnZhID0gJmFyZ3M7CisKKwlwcmludGsoS0VSTl9XQVJOSU5HICJiNDMtJXMgd2FybmluZzogJXBWIiwKKwkgICAgICAgKHdsICYmIHdsLT5odykgPyB3aXBoeV9uYW1lKHdsLT5ody0+d2lwaHkpIDogIndsYW4iLCAmdmFmKTsKKwogCXZhX2VuZChhcmdzKTsKIH0KIAogdm9pZCBiNDNkYmcoc3RydWN0IGI0M193bCAqd2wsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogeworCXN0cnVjdCB2YV9mb3JtYXQgdmFmOwogCXZhX2xpc3QgYXJnczsKIAogCWlmIChiNDNfbW9kcGFyYW1fdmVyYm9zZSA8IEI0M19WRVJCT1NJVFlfREVCVUcpCiAJCXJldHVybjsKKwogCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgImI0My0lcyBkZWJ1ZzogIiwKLQkgICAgICAgKHdsICYmIHdsLT5odykgPyB3aXBoeV9uYW1lKHdsLT5ody0+d2lwaHkpIDogIndsYW4iKTsKLQl2cHJpbnRrKGZtdCwgYXJncyk7CisKKwl2YWYuZm10ID0gZm10OworCXZhZi52YSA9ICZhcmdzOworCisJcHJpbnRrKEtFUk5fREVCVUcgImI0My0lcyBkZWJ1ZzogJXBWIiwKKwkgICAgICAgKHdsICYmIHdsLT5odykgPyB3aXBoeV9uYW1lKHdsLT5ody0+d2lwaHkpIDogIndsYW4iLCAmdmFmKTsKKwogCXZhX2VuZChhcmdzKTsKIH0KIApAQCAtMTEyNiw2ICsxMTUwLDggQEAKIAogCWZsYWdzIHw9IEI0M19UTVNMT1dfUEhZQ0xLRU47CiAJZmxhZ3MgfD0gQjQzX1RNU0xPV19QSFlSRVNFVDsKKwlpZiAoZGV2LT5waHkudHlwZSA9PSBCNDNfUEhZVFlQRV9OKQorCQlmbGFncyB8PSBCNDNfVE1TTE9XX1BIWV9CQU5EV0lEVEhfMjBNSFo7IC8qIE1ha2UgMjAgTUh6IGRlZiAqLwogCXNzYl9kZXZpY2VfZW5hYmxlKGRldi0+ZGV2LCBmbGFncyk7CiAJbXNsZWVwKDIpOwkJLyogV2FpdCBmb3IgdGhlIFBMTCB0byB0dXJuIG9uLiAqLwogCkBAIC0yMDk1LDggKzIxMjEsMTAgQEAKIAkJZmlsZW5hbWUgPSAidWNvZGUxMyI7CiAJZWxzZSBpZiAocmV2ID09IDE0KQogCQlmaWxlbmFtZSA9ICJ1Y29kZTE0IjsKLQllbHNlIGlmIChyZXYgPj0gMTUpCisJZWxzZSBpZiAocmV2ID09IDE1KQogCQlmaWxlbmFtZSA9ICJ1Y29kZTE1IjsKKwllbHNlIGlmICgocmV2ID49IDE2KSAmJiAocmV2IDw9IDIwKSkKKwkJZmlsZW5hbWUgPSAidWNvZGUxNl9taW1vIjsKIAllbHNlCiAJCWdvdG8gZXJyX25vX3Vjb2RlOwogCWVyciA9IGI0M19kb19yZXF1ZXN0X2Z3KGN0eCwgZmlsZW5hbWUsICZmdy0+dWNvZGUpOwpAQCAtMjEzOSw3ICsyMTY3LDkgQEAKIAkJCWdvdG8gZXJyX25vX2luaXR2YWxzOwogCQlicmVhazsKIAljYXNlIEI0M19QSFlUWVBFX046Ci0JCWlmICgocmV2ID49IDExKSAmJiAocmV2IDw9IDEyKSkKKwkJaWYgKHJldiA+PSAxNikKKwkJCWZpbGVuYW1lID0gIm4waW5pdHZhbHMxNiI7CisJCWVsc2UgaWYgKChyZXYgPj0gMTEpICYmIChyZXYgPD0gMTIpKQogCQkJZmlsZW5hbWUgPSAibjBpbml0dmFsczExIjsKIAkJZWxzZQogCQkJZ290byBlcnJfbm9faW5pdHZhbHM7CkBAIC0yMTgzLDcgKzIyMTMsOSBAQAogCQkJZ290byBlcnJfbm9faW5pdHZhbHM7CiAJCWJyZWFrOwogCWNhc2UgQjQzX1BIWVRZUEVfTjoKLQkJaWYgKChyZXYgPj0gMTEpICYmIChyZXYgPD0gMTIpKQorCQlpZiAocmV2ID49IDE2KQorCQkJZmlsZW5hbWUgPSAibjBic2luaXR2YWxzMTYiOworCQllbHNlIGlmICgocmV2ID49IDExKSAmJiAocmV2IDw9IDEyKSkKIAkJCWZpbGVuYW1lID0gIm4wYnNpbml0dmFsczExIjsKIAkJZWxzZQogCQkJZ290byBlcnJfbm9faW5pdHZhbHM7CkBAIC00MDIyLDkgKzQwNTQsOSBAQAogCQlpZiAocGh5X3JldiA+IDkpCiAJCQl1bnN1cHBvcnRlZCA9IDE7CiAJCWJyZWFrOwotI2lmZGVmIENPTkZJR19CNDNfTlBIWQorI2lmZGVmIENPTkZJR19CNDNfUEhZX04KIAljYXNlIEI0M19QSFlUWVBFX046Ci0JCWlmIChwaHlfcmV2ID4gNCkKKwkJaWYgKHBoeV9yZXYgPiA5KQogCQkJdW5zdXBwb3J0ZWQgPSAxOwogCQlicmVhazsKICNlbmRpZgpAQCAtNTA2Nyw3ICs1MDk5LDcgQEAKICNpZmRlZiBDT05GSUdfQjQzX1BDTUNJQQogCWZlYXRfcGNtY2lhID0gIk0iOwogI2VuZGlmCi0jaWZkZWYgQ09ORklHX0I0M19OUEhZCisjaWZkZWYgQ09ORklHX0I0M19QSFlfTgogCWZlYXRfbnBoeSA9ICJOIjsKICNlbmRpZgogI2lmZGVmIENPTkZJR19CNDNfTEVEUwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9jb21tb24uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfY29tbW9uLmMKaW5kZXggN2IyZWE2Ny4uYjVjNWNlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9jb21tb24uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2NvbW1vbi5jCkBAIC01MCw3ICs1MCw3IEBACiAJCXBoeS0+b3BzID0gJmI0M19waHlvcHNfZzsKIAkJYnJlYWs7CiAJY2FzZSBCNDNfUEhZVFlQRV9OOgotI2lmZGVmIENPTkZJR19CNDNfTlBIWQorI2lmZGVmIENPTkZJR19CNDNfUEhZX04KIAkJcGh5LT5vcHMgPSAmYjQzX3BoeW9wc19uOwogI2VuZGlmCiAJCWJyZWFrOwpAQCAtMjMxLDYgKzIzMSw3IEBACiB1MTYgYjQzX3BoeV9yZWFkKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTE2IHJlZykKIHsKIAlhc3NlcnRfbWFjX3N1c3BlbmRlZChkZXYpOworCWRldi0+cGh5LndyaXRlc19jb3VudGVyID0gMDsKIAlyZXR1cm4gZGV2LT5waHkub3BzLT5waHlfcmVhZChkZXYsIHJlZyk7CiB9CiAKQEAgLTIzOCw2ICsyMzksMTAgQEAKIHsKIAlhc3NlcnRfbWFjX3N1c3BlbmRlZChkZXYpOwogCWRldi0+cGh5Lm9wcy0+cGh5X3dyaXRlKGRldiwgcmVnLCB2YWx1ZSk7CisJaWYgKCsrZGV2LT5waHkud3JpdGVzX2NvdW50ZXIgPT0gQjQzX01BWF9XUklURVNfSU5fUk9XKSB7CisJCWI0M19yZWFkMTYoZGV2LCBCNDNfTU1JT19QSFlfVkVSKTsKKwkJZGV2LT5waHkud3JpdGVzX2NvdW50ZXIgPSAwOworCX0KIH0KIAogdm9pZCBiNDNfcGh5X2NvcHkoc3RydWN0IGI0M193bGRldiAqZGV2LCB1MTYgZGVzdHJlZywgdTE2IHNyY3JlZykKQEAgLTQyNCwxMiArNDI5LDIxIEBACiAJYjQzX3dyaXRlMTYoZGV2LCBCNDNfTU1JT19QSFkwLCBvbiA/IDAgOiAweEY0KTsKIH0KIAorCitib29sIGI0M19jaGFubmVsX3R5cGVfaXNfNDBtaHooZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaGFubmVsX3R5cGUpCit7CisJcmV0dXJuIChjaGFubmVsX3R5cGUgPT0gTkw4MDIxMV9DSEFOX0hUNDBNSU5VUyB8fAorCQljaGFubmVsX3R5cGUgPT0gTkw4MDIxMV9DSEFOX0hUNDBQTFVTKTsKK30KKwogLyogaHR0cDovL2JjbS12NC5zaXBzb2x1dGlvbnMubmV0LzgwMi4xMS9QSFkvQ29yZGljICovCiBzdHJ1Y3QgYjQzX2MzMiBiNDNfY29yZGljKGludCB0aGV0YSkKIHsKLQl1MzIgYXJjdGdbXSA9IHsgMjk0OTEyMCwgMTc0MDk2NywgOTE5ODc5LCA0NjY5NDUsIDIzNDM3OSwgMTE3MzA0LAotCQkgICAgICA1ODY2NiwgMjkzMzUsIDE0NjY4LCA3MzM0LCAzNjY3LCAxODMzLCA5MTcsIDQ1OCwKLQkJICAgICAgMjI5LCAxMTUsIDU3LCAyOSwgfTsKKwlzdGF0aWMgY29uc3QgdTMyIGFyY3RnW10gPSB7CisJCTI5NDkxMjAsIDE3NDA5NjcsIDkxOTg3OSwgNDY2OTQ1LCAyMzQzNzksIDExNzMwNCwKKwkJICA1ODY2NiwgICAyOTMzNSwgIDE0NjY4LCAgIDczMzQsICAgMzY2NywgICAxODMzLAorCQkgICAgOTE3LCAgICAgNDU4LCAgICAyMjksICAgIDExNSwgICAgIDU3LCAgICAgMjksCisJfTsKIAl1OCBpOwogCXMzMiB0bXA7CiAJczggc2lnbnggPSAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9jb21tb24uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfY29tbW9uLmgKaW5kZXggMGU2MTk0Mi4uMjQwMWJlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9jb21tb24uaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2NvbW1vbi5oCkBAIC0zOSw2ICszOSw5IEBACiAjZGVmaW5lIEI0M19QSFlWRVJfVFlQRV9TSElGVAkJOAogI2RlZmluZSBCNDNfUEhZVkVSX1ZFUlNJT04JCTB4MDBGRgogCisvKiBQSFkgd3JpdGVzIG5lZWQgdG8gYmUgZmx1c2hlZCBpZiB3ZSByZWFjaCBsaW1pdCAqLworI2RlZmluZSBCNDNfTUFYX1dSSVRFU19JTl9ST1cJCTI0CisKIC8qKgogICogZW51bSBiNDNfaW50ZXJmZXJlbmNlX21pdGlnYXRpb24gLSBJbnRlcmZlcmVuY2UgTWl0aWdhdGlvbiBtb2RlCiAgKgpAQCAtMjMyLDYgKzIzNSw5IEBACiAJLyogUEhZIHJldmlzaW9uIG51bWJlci4gKi8KIAl1OCByZXY7CiAKKwkvKiBDb3VudCB3cml0ZXMgc2luY2UgbGFzdCByZWFkICovCisJdTggd3JpdGVzX2NvdW50ZXI7CisKIAkvKiBSYWRpbyB2ZXJzaW9uaW5nICovCiAJdTE2IHJhZGlvX21hbnVmOwkvKiBSYWRpbyBtYW51ZmFjdHVyZXIgKi8KIAl1MTYgcmFkaW9fdmVyOwkJLyogUmFkaW8gdmVyc2lvbiAqLwpAQCAtNDMwLDYgKzQzNiw4IEBACiAgKi8KIHZvaWQgYjQzX3BoeW9wX3N3aXRjaF9hbmFsb2dfZ2VuZXJpYyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIGJvb2wgb24pOwogCitib29sIGI0M19jaGFubmVsX3R5cGVfaXNfNDBtaHooZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaGFubmVsX3R5cGUpOworCiBzdHJ1Y3QgYjQzX2MzMiBiNDNfY29yZGljKGludCB0aGV0YSk7CiAKICNlbmRpZiAvKiBMSU5VWF9CNDNfUEhZX0NPTU1PTl9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9uLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X24uYwppbmRleCBlMGYyZDEyLi5hYjgxZWQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X24uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X24uYwpAQCAtNjcsNiArNjcsMTggQEAKIAlCNDNfUkZTRVFfVVBEQVRFX0dBSU5VLAogfTsKIAorZW51bSBiNDNfbnBoeV9yc3NpX3R5cGUgeworCUI0M19OUEhZX1JTU0lfWCA9IDAsCisJQjQzX05QSFlfUlNTSV9ZLAorCUI0M19OUEhZX1JTU0lfWiwKKwlCNDNfTlBIWV9SU1NJX1BXUkRFVCwKKwlCNDNfTlBIWV9SU1NJX1RTU0lfSSwKKwlCNDNfTlBIWV9SU1NJX1RTU0lfUSwKKwlCNDNfTlBIWV9SU1NJX1RCRCwKK307CisKK3N0YXRpYyB2b2lkIGI0M19ucGh5X3N0YXlfaW5fY2Fycmllcl9zZWFyY2goc3RydWN0IGI0M193bGRldiAqZGV2LAorCQkJCQkJYm9vbCBlbmFibGUpOwogc3RhdGljIHZvaWQgYjQzX25waHlfc2V0X3JmX3NlcXVlbmNlKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTggY21kLAogCQkJCQl1OCAqZXZlbnRzLCB1OCAqZGVsYXlzLCB1OCBsZW5ndGgpOwogc3RhdGljIHZvaWQgYjQzX25waHlfZm9yY2VfcmZfc2VxdWVuY2Uoc3RydWN0IGI0M193bGRldiAqZGV2LApAQCAtNzYsMTMgKzg4LDYgQEAKIHN0YXRpYyB2b2lkIGI0M19ucGh5X3JmX2NvbnRyb2xfaW50Y19vdmVycmlkZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHU4IGZpZWxkLAogCQkJCQkJdTE2IHZhbHVlLCB1OCBjb3JlKTsKIAotc3RhdGljIGlubGluZSBib29sIGI0M19jaGFubmVsX3R5cGVfaXNfNDBtaHooCi0JCQkJCWVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgY2hhbm5lbF90eXBlKQotewotCXJldHVybiAoY2hhbm5lbF90eXBlID09IE5MODAyMTFfQ0hBTl9IVDQwTUlOVVMgfHwKLQkJY2hhbm5lbF90eXBlID09IE5MODAyMTFfQ0hBTl9IVDQwUExVUyk7Ci19Ci0KIHZvaWQgYjQzX25waHlfc2V0X3J4YW50ZW5uYShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIGludCBhbnRlbm5hKQogey8vVE9ETwogfQpAQCAtMTM0LDYgKzEzOSw5OSBAQAogCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDU1X0MyX1RYX01YQkdUUklNLCBlLT5yYWRpb19jMl90eF9teGJndHJpbSk7CiB9CiAKK3N0YXRpYyB2b2lkIGI0M19jaGFudGFiX3JhZGlvXzIwNTZfdXBsb2FkKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKKwkJCQljb25zdCBzdHJ1Y3QgYjQzX25waHlfY2hhbm5lbHRhYl9lbnRyeV9yZXYzICplKQoreworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDU2X1NZTl9QTExfVkNPQ0FMMSwgZS0+cmFkaW9fc3luX3BsbF92Y29jYWwxKTsKKwliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA1Nl9TWU5fUExMX1ZDT0NBTDIsIGUtPnJhZGlvX3N5bl9wbGxfdmNvY2FsMik7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNTZfU1lOX1BMTF9SRUZESVYsIGUtPnJhZGlvX3N5bl9wbGxfcmVmZGl2KTsKKwliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA1Nl9TWU5fUExMX01NRDIsIGUtPnJhZGlvX3N5bl9wbGxfbW1kMik7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNTZfU1lOX1BMTF9NTUQxLCBlLT5yYWRpb19zeW5fcGxsX21tZDEpOworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDU2X1NZTl9QTExfTE9PUEZJTFRFUjEsCisJCQkJCWUtPnJhZGlvX3N5bl9wbGxfbG9vcGZpbHRlcjEpOworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDU2X1NZTl9QTExfTE9PUEZJTFRFUjIsCisJCQkJCWUtPnJhZGlvX3N5bl9wbGxfbG9vcGZpbHRlcjIpOworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDU2X1NZTl9QTExfTE9PUEZJTFRFUjMsCisJCQkJCWUtPnJhZGlvX3N5bl9wbGxfbG9vcGZpbHRlcjMpOworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDU2X1NZTl9QTExfTE9PUEZJTFRFUjQsCisJCQkJCWUtPnJhZGlvX3N5bl9wbGxfbG9vcGZpbHRlcjQpOworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDU2X1NZTl9QTExfTE9PUEZJTFRFUjUsCisJCQkJCWUtPnJhZGlvX3N5bl9wbGxfbG9vcGZpbHRlcjUpOworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDU2X1NZTl9SRVNFUlZFRF9BRERSMjcsCisJCQkJCWUtPnJhZGlvX3N5bl9yZXNlcnZlZF9hZGRyMjcpOworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDU2X1NZTl9SRVNFUlZFRF9BRERSMjgsCisJCQkJCWUtPnJhZGlvX3N5bl9yZXNlcnZlZF9hZGRyMjgpOworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDU2X1NZTl9SRVNFUlZFRF9BRERSMjksCisJCQkJCWUtPnJhZGlvX3N5bl9yZXNlcnZlZF9hZGRyMjkpOworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDU2X1NZTl9MT0dFTl9WQ09CVUYxLAorCQkJCQllLT5yYWRpb19zeW5fbG9nZW5fdmNvYnVmMSk7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNTZfU1lOX0xPR0VOX01JWEVSMiwgZS0+cmFkaW9fc3luX2xvZ2VuX21peGVyMik7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNTZfU1lOX0xPR0VOX0JVRjMsIGUtPnJhZGlvX3N5bl9sb2dlbl9idWYzKTsKKwliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA1Nl9TWU5fTE9HRU5fQlVGNCwgZS0+cmFkaW9fc3luX2xvZ2VuX2J1ZjQpOworCisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNTZfUlgwIHwgQjIwNTZfUlhfTE5BQV9UVU5FLAorCQkJCQllLT5yYWRpb19yeDBfbG5hYV90dW5lKTsKKwliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA1Nl9SWDAgfCBCMjA1Nl9SWF9MTkFHX1RVTkUsCisJCQkJCWUtPnJhZGlvX3J4MF9sbmFnX3R1bmUpOworCisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNTZfVFgwIHwgQjIwNTZfVFhfSU5UUEFBX0JPT1NUX1RVTkUsCisJCQkJCWUtPnJhZGlvX3R4MF9pbnRwYWFfYm9vc3RfdHVuZSk7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNTZfVFgwIHwgQjIwNTZfVFhfSU5UUEFHX0JPT1NUX1RVTkUsCisJCQkJCWUtPnJhZGlvX3R4MF9pbnRwYWdfYm9vc3RfdHVuZSk7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNTZfVFgwIHwgQjIwNTZfVFhfUEFEQV9CT09TVF9UVU5FLAorCQkJCQllLT5yYWRpb190eDBfcGFkYV9ib29zdF90dW5lKTsKKwliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA1Nl9UWDAgfCBCMjA1Nl9UWF9QQURHX0JPT1NUX1RVTkUsCisJCQkJCWUtPnJhZGlvX3R4MF9wYWRnX2Jvb3N0X3R1bmUpOworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDU2X1RYMCB8IEIyMDU2X1RYX1BHQUFfQk9PU1RfVFVORSwKKwkJCQkJZS0+cmFkaW9fdHgwX3BnYWFfYm9vc3RfdHVuZSk7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNTZfVFgwIHwgQjIwNTZfVFhfUEdBR19CT09TVF9UVU5FLAorCQkJCQllLT5yYWRpb190eDBfcGdhZ19ib29zdF90dW5lKTsKKwliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA1Nl9UWDAgfCBCMjA1Nl9UWF9NSVhBX0JPT1NUX1RVTkUsCisJCQkJCWUtPnJhZGlvX3R4MF9taXhhX2Jvb3N0X3R1bmUpOworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDU2X1RYMCB8IEIyMDU2X1RYX01JWEdfQk9PU1RfVFVORSwKKwkJCQkJZS0+cmFkaW9fdHgwX21peGdfYm9vc3RfdHVuZSk7CisKKwliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA1Nl9SWDEgfCBCMjA1Nl9SWF9MTkFBX1RVTkUsCisJCQkJCWUtPnJhZGlvX3J4MV9sbmFhX3R1bmUpOworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDU2X1JYMSB8IEIyMDU2X1JYX0xOQUdfVFVORSwKKwkJCQkJZS0+cmFkaW9fcngxX2xuYWdfdHVuZSk7CisKKwliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA1Nl9UWDEgfCBCMjA1Nl9UWF9JTlRQQUFfQk9PU1RfVFVORSwKKwkJCQkJZS0+cmFkaW9fdHgxX2ludHBhYV9ib29zdF90dW5lKTsKKwliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA1Nl9UWDEgfCBCMjA1Nl9UWF9JTlRQQUdfQk9PU1RfVFVORSwKKwkJCQkJZS0+cmFkaW9fdHgxX2ludHBhZ19ib29zdF90dW5lKTsKKwliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA1Nl9UWDEgfCBCMjA1Nl9UWF9QQURBX0JPT1NUX1RVTkUsCisJCQkJCWUtPnJhZGlvX3R4MV9wYWRhX2Jvb3N0X3R1bmUpOworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDU2X1RYMSB8IEIyMDU2X1RYX1BBREdfQk9PU1RfVFVORSwKKwkJCQkJZS0+cmFkaW9fdHgxX3BhZGdfYm9vc3RfdHVuZSk7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNTZfVFgxIHwgQjIwNTZfVFhfUEdBQV9CT09TVF9UVU5FLAorCQkJCQllLT5yYWRpb190eDFfcGdhYV9ib29zdF90dW5lKTsKKwliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA1Nl9UWDEgfCBCMjA1Nl9UWF9QR0FHX0JPT1NUX1RVTkUsCisJCQkJCWUtPnJhZGlvX3R4MV9wZ2FnX2Jvb3N0X3R1bmUpOworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDU2X1RYMSB8IEIyMDU2X1RYX01JWEFfQk9PU1RfVFVORSwKKwkJCQkJZS0+cmFkaW9fdHgxX21peGFfYm9vc3RfdHVuZSk7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNTZfVFgxIHwgQjIwNTZfVFhfTUlYR19CT09TVF9UVU5FLAorCQkJCQllLT5yYWRpb190eDFfbWl4Z19ib29zdF90dW5lKTsKK30KKworLyogaHR0cDovL2JjbS12NC5zaXBzb2x1dGlvbnMubmV0LzgwMi4xMS9QSFkvUmFkaW8vMjA1NlNldHVwICovCitzdGF0aWMgdm9pZCBiNDNfcmFkaW9fMjA1Nl9zZXR1cChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCisJCQkJY29uc3Qgc3RydWN0IGI0M19ucGh5X2NoYW5uZWx0YWJfZW50cnlfcmV2MyAqZSkKK3sKKwlCNDNfV0FSTl9PTihkZXYtPnBoeS5yZXYgPCAzKTsKKworCWI0M19jaGFudGFiX3JhZGlvXzIwNTZfdXBsb2FkKGRldiwgZSk7CisJLyogVE9ETyAqLworCXVkZWxheSg1MCk7CisJLyogVkNPIGNhbGlicmF0aW9uICovCisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNTZfU1lOX1BMTF9WQ09DQUwxMiwgMHgwMCk7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNTZfVFhfSU5UUEFBX1BBX01JU0MsIDB4MzgpOworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDU2X1RYX0lOVFBBQV9QQV9NSVNDLCAweDE4KTsKKwliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA1Nl9UWF9JTlRQQUFfUEFfTUlTQywgMHgzOCk7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNTZfVFhfSU5UUEFBX1BBX01JU0MsIDB4MzkpOworCXVkZWxheSgzMDApOworfQorCiBzdGF0aWMgdm9pZCBiNDNfY2hhbnRhYl9waHlfdXBsb2FkKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKIAkJCQkgICBjb25zdCBzdHJ1Y3QgYjQzX3BoeV9uX3Nmb19jZmcgKmUpCiB7CkBAIC0xNDUsOSArMjQzLDE1NCBAQAogCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9CVzYsIGUtPnBoeV9idzYpOwogfQogCisvKiBodHRwOi8vYmNtLXY0LnNpcHNvbHV0aW9ucy5uZXQvODAyLjExL1BIWS9OL1R4UHdyQ3RybEVuYWJsZSAqLworc3RhdGljIHZvaWQgYjQzX25waHlfdHhfcG93ZXJfY3RybChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIGJvb2wgZW5hYmxlKQoreworCXN0cnVjdCBiNDNfcGh5X24gKm5waHkgPSBkZXYtPnBoeS5uOworCXU4IGk7CisJdTE2IHRtcDsKKworCWlmIChucGh5LT5oYW5nX2F2b2lkKQorCQliNDNfbnBoeV9zdGF5X2luX2NhcnJpZXJfc2VhcmNoKGRldiwgMSk7CisKKwlucGh5LT50eHB3cmN0cmwgPSBlbmFibGU7CisJaWYgKCFlbmFibGUpIHsKKwkJaWYgKGRldi0+cGh5LnJldiA+PSAzKQorCQkJOyAvKiBUT0RPICovCisKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RBQkxFX0FERFIsIDB4Njg0MCk7CisJCWZvciAoaSA9IDA7IGkgPCA4NDsgaSsrKQorCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RBQkxFX0RBVEFMTywgMCk7CisKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RBQkxFX0FERFIsIDB4NkM0MCk7CisJCWZvciAoaSA9IDA7IGkgPCA4NDsgaSsrKQorCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RBQkxFX0RBVEFMTywgMCk7CisKKwkJdG1wID0gQjQzX05QSFlfVFhQQ1RMX0NNRF9DT0VGRiB8IEI0M19OUEhZX1RYUENUTF9DTURfSFdQQ1RMRU47CisJCWlmIChkZXYtPnBoeS5yZXYgPj0gMykKKwkJCXRtcCB8PSBCNDNfTlBIWV9UWFBDVExfQ01EX1BDVExFTjsKKwkJYjQzX3BoeV9tYXNrKGRldiwgQjQzX05QSFlfVFhQQ1RMX0NNRCwgfnRtcCk7CisKKwkJaWYgKGRldi0+cGh5LnJldiA+PSAzKSB7CisJCQliNDNfcGh5X3NldChkZXYsIEI0M19OUEhZX0FGRUNUTF9PVkVSMSwgMHgwMTAwKTsKKwkJCWI0M19waHlfc2V0KGRldiwgQjQzX05QSFlfQUZFQ1RMX09WRVIsIDB4MDEwMCk7CisJCX0gZWxzZSB7CisJCQliNDNfcGh5X3NldChkZXYsIEI0M19OUEhZX0FGRUNUTF9PVkVSLCAweDQwMDApOworCQl9CisKKwkJaWYgKGRldi0+cGh5LnJldiA9PSAyKQorCQkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX05QSFlfQlBIWV9DVEwzLAorCQkJCX5CNDNfTlBIWV9CUEhZX0NUTDNfU0NBTEUsIDB4NTMpOworCQllbHNlIGlmIChkZXYtPnBoeS5yZXYgPCAyKQorCQkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX05QSFlfQlBIWV9DVEwzLAorCQkJCX5CNDNfTlBIWV9CUEhZX0NUTDNfU0NBTEUsIDB4NUEpOworCisJCWlmIChkZXYtPnBoeS5yZXYgPCAyICYmIDApCisJCQk7IC8qIFRPRE8gKi8KKwl9IGVsc2UgeworCQliNDNlcnIoZGV2LT53bCwgImVuYWJsaW5nIHR4IHB3ciBjdHJsIG5vdCBpbXBsZW1lbnRlZCB5ZXRcbiIpOworCX0KKworCWlmIChucGh5LT5oYW5nX2F2b2lkKQorCQliNDNfbnBoeV9zdGF5X2luX2NhcnJpZXJfc2VhcmNoKGRldiwgMCk7Cit9CisKKy8qIGh0dHA6Ly9iY20tdjQuc2lwc29sdXRpb25zLm5ldC84MDIuMTEvUEhZL04vVHhQd3JGaXggKi8KIHN0YXRpYyB2b2lkIGI0M19ucGh5X3R4X3Bvd2VyX2ZpeChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCiB7Ci0JLy9UT0RPCisJc3RydWN0IGI0M19waHlfbiAqbnBoeSA9IGRldi0+cGh5Lm47CisJc3RydWN0IHNzYl9zcHJvbSAqc3Byb20gPSAmKGRldi0+ZGV2LT5idXMtPnNwcm9tKTsKKworCXU4IHR4cGlbMl0sIGJibXVsdCwgaTsKKwl1MTYgdG1wLCByYWRpb19nYWluLCBkYWNfZ2FpbjsKKwl1MTYgZnJlcSA9IGRldi0+cGh5LmNoYW5uZWxfZnJlcTsKKwl1MzIgdHhnYWluOworCS8qIHUzMiBnYWludGJsOyByZXYzKyAqLworCisJaWYgKG5waHktPmhhbmdfYXZvaWQpCisJCWI0M19ucGh5X3N0YXlfaW5fY2Fycmllcl9zZWFyY2goZGV2LCAxKTsKKworCWlmIChkZXYtPnBoeS5yZXYgPj0gMykgeworCQl0eHBpWzBdID0gNDA7CisJCXR4cGlbMV0gPSA0MDsKKwl9IGVsc2UgaWYgKHNwcm9tLT5yZXZpc2lvbiA8IDQpIHsKKwkJdHhwaVswXSA9IDcyOworCQl0eHBpWzFdID0gNzI7CisJfSBlbHNlIHsKKwkJaWYgKGI0M19jdXJyZW50X2JhbmQoZGV2LT53bCkgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikgeworCQkJdHhwaVswXSA9IHNwcm9tLT50eHBpZDJnWzBdOworCQkJdHhwaVsxXSA9IHNwcm9tLT50eHBpZDJnWzFdOworCQl9IGVsc2UgaWYgKGZyZXEgPj0gNDkwMCAmJiBmcmVxIDwgNTEwMCkgeworCQkJdHhwaVswXSA9IHNwcm9tLT50eHBpZDVnbFswXTsKKwkJCXR4cGlbMV0gPSBzcHJvbS0+dHhwaWQ1Z2xbMV07CisJCX0gZWxzZSBpZiAoZnJlcSA+PSA1MTAwICYmIGZyZXEgPCA1NTAwKSB7CisJCQl0eHBpWzBdID0gc3Byb20tPnR4cGlkNWdbMF07CisJCQl0eHBpWzFdID0gc3Byb20tPnR4cGlkNWdbMV07CisJCX0gZWxzZSBpZiAoZnJlcSA+PSA1NTAwKSB7CisJCQl0eHBpWzBdID0gc3Byb20tPnR4cGlkNWdoWzBdOworCQkJdHhwaVsxXSA9IHNwcm9tLT50eHBpZDVnaFsxXTsKKwkJfSBlbHNlIHsKKwkJCXR4cGlbMF0gPSA5MTsKKwkJCXR4cGlbMV0gPSA5MTsKKwkJfQorCX0KKworCS8qCisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQlucGh5LT50eHB3cmluZGV4W2ldLmluZGV4X2ludGVybmFsID0gdHhwaVtpXTsKKwkJbnBoeS0+dHhwd3JpbmRleFtpXS5pbmRleF9pbnRlcm5hbF9zYXZlID0gdHhwaVtpXTsKKwl9CisJKi8KKworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJaWYgKGRldi0+cGh5LnJldiA+PSAzKSB7CisJCQkvKiBGSVhNRTogc3VwcG9ydCA1R0h6ICovCisJCQl0eGdhaW4gPSBiNDNfbnRhYl90eF9nYWluX3JldjNwbHVzXzJnaHpbdHhwaVtpXV07CisJCQlyYWRpb19nYWluID0gKHR4Z2FpbiA+PiAxNikgJiAweDFGRkZGOworCQl9IGVsc2UgeworCQkJdHhnYWluID0gYjQzX250YWJfdHhfZ2Fpbl9yZXYwXzFfMlt0eHBpW2ldXTsKKwkJCXJhZGlvX2dhaW4gPSAodHhnYWluID4+IDE2KSAmIDB4MUZGRjsKKwkJfQorCisJCWRhY19nYWluID0gKHR4Z2FpbiA+PiA4KSAmIDB4M0Y7CisJCWJibXVsdCA9IHR4Z2FpbiAmIDB4RkY7CisKKwkJaWYgKGRldi0+cGh5LnJldiA+PSAzKSB7CisJCQlpZiAoaSA9PSAwKQorCQkJCWI0M19waHlfc2V0KGRldiwgQjQzX05QSFlfQUZFQ1RMX09WRVIxLCAweDAxMDApOworCQkJZWxzZQorCQkJCWI0M19waHlfc2V0KGRldiwgQjQzX05QSFlfQUZFQ1RMX09WRVIsIDB4MDEwMCk7CisJCX0gZWxzZSB7CisJCQliNDNfcGh5X3NldChkZXYsIEI0M19OUEhZX0FGRUNUTF9PVkVSLCAweDQwMDApOworCQl9CisKKwkJaWYgKGkgPT0gMCkKKwkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9BRkVDVExfREFDR0FJTjEsIGRhY19nYWluKTsKKwkJZWxzZQorCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX0FGRUNUTF9EQUNHQUlOMiwgZGFjX2dhaW4pOworCisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9UQUJMRV9BRERSLCAweDFEMTAgKyBpKTsKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RBQkxFX0RBVEFMTywgcmFkaW9fZ2Fpbik7CisKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RBQkxFX0FERFIsIDB4M0M1Nyk7CisJCXRtcCA9IGI0M19waHlfcmVhZChkZXYsIEI0M19OUEhZX1RBQkxFX0RBVEFMTyk7CisKKwkJaWYgKGkgPT0gMCkKKwkJCXRtcCA9ICh0bXAgJiAweDAwRkYpIHwgKGJibXVsdCA8PCA4KTsKKwkJZWxzZQorCQkJdG1wID0gKHRtcCAmIDB4RkYwMCkgfCBiYm11bHQ7CisKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RBQkxFX0FERFIsIDB4M0M1Nyk7CisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9UQUJMRV9EQVRBTE8sIHRtcCk7CisKKwkJaWYgKDApCisJCQk7IC8qIFRPRE8gKi8KKwl9CisKKwliNDNfcGh5X21hc2soZGV2LCBCNDNfTlBIWV9CUEhZX0NUTDIsIH5CNDNfTlBIWV9CUEhZX0NUTDJfTFVUKTsKKworCWlmIChucGh5LT5oYW5nX2F2b2lkKQorCQliNDNfbnBoeV9zdGF5X2luX2NhcnJpZXJfc2VhcmNoKGRldiwgMCk7CiB9CiAKIApAQCAtMTkxLDcgKzQzNCw4IEBACiAJCQkJYmluZm8tPnR5cGUgIT0gMHg0NkQgfHwKIAkJCQliaW5mby0+cmV2IDwgMHg0MSk7CiAJZWxzZQotCQl3b3JrYXJvdW5kID0gKChzcHJvbS0+Ym9hcmRmbGFnc19oaSAmIEI0M19CRkhfTk9QQSkgPT0gMCk7CisJCXdvcmthcm91bmQgPQorCQkJIShzcHJvbS0+Ym9hcmRmbGFnczJfbG8gJiBCNDNfQkZMMl9SWEJCX0lOVF9SRUdfRElTKTsKIAogCWI0M19yYWRpb19tYXNrKGRldiwgQjIwNTVfTUFTVEVSMSwgMHhGRkYzKTsKIAlpZiAod29ya2Fyb3VuZCkgewpAQCAtMjQwLDIzICs0ODQsNTUgQEAKIHN0YXRpYyB2b2lkIGI0M19yYWRpb19pbml0MjA1NShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCiB7CiAJYjQzX3JhZGlvX2luaXQyMDU1X3ByZShkZXYpOwotCWlmIChiNDNfc3RhdHVzKGRldikgPCBCNDNfU1RBVF9JTklUSUFMSVpFRCkKLQkJYjIwNTVfdXBsb2FkX2luaXR0YWIoZGV2LCAwLCAxKTsKLQllbHNlCi0JCWIyMDU1X3VwbG9hZF9pbml0dGFiKGRldiwgMC8qRklYTUUgb24gNWdoeiBiYW5kKi8sIDApOworCWlmIChiNDNfc3RhdHVzKGRldikgPCBCNDNfU1RBVF9JTklUSUFMSVpFRCkgeworCQkvKiBGb2xsb3cgd2wsIG5vdCBzcGVjcy4gRG8gbm90IGZvcmNlIHVwbG9hZGluZyBhbGwgcmVncyAqLworCQliMjA1NV91cGxvYWRfaW5pdHRhYihkZXYsIDAsIDApOworCX0gZWxzZSB7CisJCWJvb2wgZ2h6NSA9IGI0M19jdXJyZW50X2JhbmQoZGV2LT53bCkgPT0gSUVFRTgwMjExX0JBTkRfNUdIWjsKKwkJYjIwNTVfdXBsb2FkX2luaXR0YWIoZGV2LCBnaHo1LCAwKTsKKwl9CiAJYjQzX3JhZGlvX2luaXQyMDU1X3Bvc3QoZGV2KTsKIH0KIAorc3RhdGljIHZvaWQgYjQzX3JhZGlvX2luaXQyMDU2X3ByZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCit7CisJYjQzX3BoeV9tYXNrKGRldiwgQjQzX05QSFlfUkZDVExfQ01ELAorCQkgICAgIH5CNDNfTlBIWV9SRkNUTF9DTURfQ0hJUDBQVSk7CisJLyogTWF5YmUgd2wgbWVhbnQgdG8gcmVzZXQgYW5kIHNldCAob3JkZXI/KSBSRkNUTF9DTURfT0VQT1JGT1JDRT8gKi8KKwliNDNfcGh5X21hc2soZGV2LCBCNDNfTlBIWV9SRkNUTF9DTUQsCisJCSAgICAgQjQzX05QSFlfUkZDVExfQ01EX09FUE9SRk9SQ0UpOworCWI0M19waHlfc2V0KGRldiwgQjQzX05QSFlfUkZDVExfQ01ELAorCQkgICAgfkI0M19OUEhZX1JGQ1RMX0NNRF9PRVBPUkZPUkNFKTsKKwliNDNfcGh5X3NldChkZXYsIEI0M19OUEhZX1JGQ1RMX0NNRCwKKwkJICAgIEI0M19OUEhZX1JGQ1RMX0NNRF9DSElQMFBVKTsKK30KKworc3RhdGljIHZvaWQgYjQzX3JhZGlvX2luaXQyMDU2X3Bvc3Qoc3RydWN0IGI0M193bGRldiAqZGV2KQoreworCWI0M19yYWRpb19zZXQoZGV2LCBCMjA1Nl9TWU5fQ09NX0NUUkwsIDB4Qik7CisJYjQzX3JhZGlvX3NldChkZXYsIEIyMDU2X1NZTl9DT01fUFUsIDB4Mik7CisJYjQzX3JhZGlvX3NldChkZXYsIEIyMDU2X1NZTl9DT01fUkVTRVQsIDB4Mik7CisJbXNsZWVwKDEpOworCWI0M19yYWRpb19tYXNrKGRldiwgQjIwNTZfU1lOX0NPTV9SRVNFVCwgfjB4Mik7CisJYjQzX3JhZGlvX21hc2soZGV2LCBCMjA1Nl9TWU5fUExMX01BU1QyLCB+MHhGQyk7CisJYjQzX3JhZGlvX21hc2soZGV2LCBCMjA1Nl9TWU5fUkNDQUxfQ1RSTDAsIH4weDEpOworCS8qCisJaWYgKG5waHktPmluaXRfcG9yKQorCQlDYWxsIFJhZGlvIDIwNTYgUmVjYWxpYnJhdGUKKwkqLworfQorCiAvKgogICogSW5pdGlhbGl6ZSBhIEJyb2FkY29tIDIwNTYgTi1yYWRpbwogICogaHR0cDovL2JjbS12NC5zaXBzb2x1dGlvbnMubmV0LzgwMi4xMS9SYWRpby8yMDU2L0luaXQKICAqLwogc3RhdGljIHZvaWQgYjQzX3JhZGlvX2luaXQyMDU2KHN0cnVjdCBiNDNfd2xkZXYgKmRldikKIHsKLQkvKiBUT0RPICovCisJYjQzX3JhZGlvX2luaXQyMDU2X3ByZShkZXYpOworCWIyMDU2X3VwbG9hZF9pbml0dGFicyhkZXYsIDAsIDApOworCWI0M19yYWRpb19pbml0MjA1Nl9wb3N0KGRldik7CiB9CiAKLQogLyoKICAqIFVwbG9hZCB0aGUgTi1QSFkgdGFibGVzLgogICogaHR0cDovL2JjbS12NC5zaXBzb2x1dGlvbnMubmV0LzgwMi4xMS9QSFkvTi9Jbml0VGFibGVzCkBAIC00NTMsNiArNzI5LDggQEAKIAl9CiB9CiAKKyNpZiAwCisvKiBSZWFkeSBidXQgbm90IHVzZWQgYW55d2hlcmUgKi8KIC8qIGh0dHA6Ly9iY20tdjQuc2lwc29sdXRpb25zLm5ldC84MDIuMTEvUEhZL04vUnhDYWxQaHlDbGVhbnVwICovCiBzdGF0aWMgdm9pZCBiNDNfbnBoeV9yeF9jYWxfcGh5X2NsZWFudXAoc3RydWN0IGI0M193bGRldiAqZGV2LCB1OCBjb3JlKQogewpAQCAtNTM0LDYgKzgxMiw3IEBACiAJYjQzX25waHlfcmZfY29udHJvbF9pbnRjX292ZXJyaWRlKGRldiwgMSwgcnh2YWwsIChjb3JlICsgMSkpOwogCWI0M19ucGh5X3JmX2NvbnRyb2xfaW50Y19vdmVycmlkZShkZXYsIDEsIHR4dmFsLCAoMiAtIGNvcmUpKTsKIH0KKyNlbmRpZgogCiAvKiBodHRwOi8vYmNtLXY0LnNpcHNvbHV0aW9ucy5uZXQvODAyLjExL1BIWS9OL0NhbGNSeElxQ29tcCAqLwogc3RhdGljIHZvaWQgYjQzX25waHlfY2FsY19yeF9pcV9jb21wKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTggbWFzaykKQEAgLTU2OSw3ICs4NDgsNiBAQAogCQkJaWkgPSBlc3QuaTFfcHdyOwogCQkJcXEgPSBlc3QucTFfcHdyOwogCQl9IGVsc2UgewotCQkJQjQzX1dBUk5fT04oMSk7CiAJCQljb250aW51ZTsKIAkJfQogCkBAIC02NTEsNyArOTI5LDggQEAKIH0KIAogLyogaHR0cDovL2JjbS12NC5zaXBzb2x1dGlvbnMubmV0LzgwMi4xMS9QSFkvTi9jbGlwLWRldGVjdGlvbiAqLwotc3RhdGljIHZvaWQgYjQzX25waHlfd3JpdGVfY2xpcF9kZXRlY3Rpb24oc3RydWN0IGI0M193bGRldiAqZGV2LCB1MTYgKmNsaXBfc3QpCitzdGF0aWMgdm9pZCBiNDNfbnBoeV93cml0ZV9jbGlwX2RldGVjdGlvbihzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCisJCQkJCSAgY29uc3QgdTE2ICpjbGlwX3N0KQogewogCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9DMV9DTElQMVRIUkVTLCBjbGlwX3N0WzBdKTsKIAliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfQzJfQ0xJUDFUSFJFUywgY2xpcF9zdFsxXSk7CkBAIC03MjcsNyArMTAwNiw3IEBACiAJc3RydWN0IGI0M19waHlfbiAqbnBoeSA9IHBoeS0+bjsKIAogCWlmIChlbmFibGUpIHsKLQkJdTE2IGNsaXBbXSA9IHsgMHhGRkZGLCAweEZGRkYgfTsKKwkJc3RhdGljIGNvbnN0IHUxNiBjbGlwW10gPSB7IDB4RkZGRiwgMHhGRkZGIH07CiAJCWlmIChucGh5LT5kZWFmX2NvdW50KysgPT0gMCkgewogCQkJbnBoeS0+Y2xhc3NpZmllcl9zdGF0ZSA9IGI0M19ucGh5X2NsYXNzaWZpZXIoZGV2LCAwLCAwKTsKIAkJCWI0M19ucGh5X2NsYXNzaWZpZXIoZGV2LCAweDcsIDApOwpAQCAtODM5LDcgKzExMTgsNyBAQAogCXUxNiBkYXRhWzRdOwogCXMxNiBnYWluWzJdOwogCXUxNiBtaW5tYXhbMl07Ci0JdTE2IGxuYV9nYWluWzRdID0geyAtMiwgMTAsIDE5LCAyNSB9OworCXN0YXRpYyBjb25zdCB1MTYgbG5hX2dhaW5bNF0gPSB7IC0yLCAxMCwgMTksIDI1IH07CiAKIAlpZiAobnBoeS0+aGFuZ19hdm9pZCkKIAkJYjQzX25waHlfc3RheV9pbl9jYXJyaWVyX3NlYXJjaChkZXYsIDEpOwpAQCAtODcxLDcgKzExNTAsNyBAQAogCQkJZGF0YVsyXSA9IGxuYV9nYWluWzJdICsgZ2FpbltpXTsKIAkJCWRhdGFbM10gPSBsbmFfZ2FpblszXSArIGdhaW5baV07CiAJCX0KLQkJYjQzX250YWJfd3JpdGVfYnVsayhkZXYsIEI0M19OVEFCMTYoMTAsIDgpLCA0LCBkYXRhKTsKKwkJYjQzX250YWJfd3JpdGVfYnVsayhkZXYsIEI0M19OVEFCMTYoaSwgOCksIDQsIGRhdGEpOwogCiAJCW1pbm1heFtpXSA9IDIzICsgZ2FpbltpXTsKIAl9CkBAIC04OTEsNiArMTE3MCw3IEBACiAJc3RydWN0IGI0M19waHlfbiAqbnBoeSA9IGRldi0+cGh5Lm47CiAJdTggaSwgajsKIAl1OCBjb2RlOworCXUxNiB0bXA7CiAKIAkvKiBUT0RPOiBmb3IgUEhZID49IDMKIAlzOCAqbG5hMV9nYWluLCAqbG5hMl9nYWluOwpAQCAtOTEzLDE1ICsxMTkzLDE1IEBACiAJCQkJQjQzX05QSFlfQzJfQ0dBSU5JX0NMMkRFVEVDVCk7CiAKIAkJLyogU2V0IG5hcnJvd2JhbmQgY2xpcCB0aHJlc2hvbGQgKi8KLQkJYjQzX3BoeV9zZXQoZGV2LCBCNDNfTlBIWV9DMV9OQkNMSVBUSFJFUywgMHg4NCk7Ci0JCWI0M19waHlfc2V0KGRldiwgQjQzX05QSFlfQzJfTkJDTElQVEhSRVMsIDB4ODQpOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfQzFfTkJDTElQVEhSRVMsIDB4ODQpOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfQzJfTkJDTElQVEhSRVMsIDB4ODQpOwogCiAJCWlmICghZGV2LT5waHkuaXNfNDBtaHopIHsKIAkJCS8qIFNldCBkd2VsbCBsZW5ndGhzICovCi0JCQliNDNfcGh5X3NldChkZXYsIEI0M19OUEhZX0NMSVAxX05CRFdFTExfTEVOLCAweDAwMkIpOwotCQkJYjQzX3BoeV9zZXQoZGV2LCBCNDNfTlBIWV9DTElQMl9OQkRXRUxMX0xFTiwgMHgwMDJCKTsKLQkJCWI0M19waHlfc2V0KGRldiwgQjQzX05QSFlfVzFDTElQMV9EV0VMTF9MRU4sIDB4MDAwOSk7Ci0JCQliNDNfcGh5X3NldChkZXYsIEI0M19OUEhZX1cxQ0xJUDJfRFdFTExfTEVOLCAweDAwMDkpOworCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX0NMSVAxX05CRFdFTExfTEVOLCAweDAwMkIpOworCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX0NMSVAyX05CRFdFTExfTEVOLCAweDAwMkIpOworCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1cxQ0xJUDFfRFdFTExfTEVOLCAweDAwMDkpOworCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1cxQ0xJUDJfRFdFTExfTEVOLCAweDAwMDkpOwogCQl9CiAKIAkJLyogU2V0IHdpZGViYW5kIGNsaXAgMiB0aHJlc2hvbGQgKi8KQEAgLTk0Myw3ICsxMjIzLDcgQEAKIAkJCQl+QjQzX05QSFlfQzJfQ0NLX0NHQUlOSV9HQUlOQktPRkYsIDB4MSk7CiAJCX0KIAotCQliNDNfcGh5X3NldChkZXYsIEI0M19OUEhZX0NDS19TSElGVEJfUkVGLCAweDgwOUMpOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfQ0NLX1NISUZUQl9SRUYsIDB4ODA5Qyk7CiAKIAkJaWYgKG5waHktPmdhaW5fYm9vc3QpIHsKIAkJCWlmIChiNDNfY3VycmVudF9iYW5kKGRldi0+d2wpID09IElFRUU4MDIxMV9CQU5EXzJHSFogJiYKQEAgLTk2NCwxMCArMTI0NCwxMCBAQAogCQkJCWNvZGUgPDwgQjQzX05QSFlfQzJfSU5JVEdBSU5fSFBWR0EyX1NISUZUKTsKIAogCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfVEFCTEVfQUREUiwgMHgxRDA2KTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RBQkxFX0RBVEFMTywKLQkJCQkJKGNvZGUgPDwgOCB8IDB4N0MpKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RBQkxFX0RBVEFMTywKLQkJCQkJKGNvZGUgPDwgOCB8IDB4N0MpKTsKKwkJLyogc3BlY3Mgc2F5IGFib3V0IDIgbG9vcHMsIGJ1dCB3bCBkb2VzIDQgKi8KKwkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKwkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9UQUJMRV9EQVRBTE8sCisJCQkJCQkJKGNvZGUgPDwgOCB8IDB4N0MpKTsKIAogCQliNDNfbnBoeV9hZGp1c3RfbG5hX2dhaW5fdGFibGUoZGV2KTsKIApAQCAtOTg1LDE5ICsxMjY1LDIxIEBACiAJCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfVEFCTEVfREFUQUxPLCAweDEpOwogCiAJCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfVEFCTEVfQUREUiwgMHgxRDA2KTsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9UQUJMRV9EQVRBTE8sCi0JCQkJCShjb2RlIDw8IDggfCAweDc0KSk7Ci0JCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfVEFCTEVfREFUQUxPLAotCQkJCQkoY29kZSA8PCA4IHwgMHg3NCkpOworCQkJLyogc3BlY3Mgc2F5IGFib3V0IDIgbG9vcHMsIGJ1dCB3bCBkb2VzIDQgKi8KKwkJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RBQkxFX0RBVEFMTywKKwkJCQkJCQkoY29kZSA8PCA4IHwgMHg3NCkpOwogCQl9CiAKIAkJaWYgKGRldi0+cGh5LnJldiA9PSAyKSB7CiAJCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CiAJCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RBQkxFX0FERFIsCiAJCQkJCQkoMHgwNDAwICogaSkgKyAweDAwMjApOwotCQkJCWZvciAoaiA9IDA7IGogPCAyMTsgaisrKQorCQkJCWZvciAoaiA9IDA7IGogPCAyMTsgaisrKSB7CisJCQkJCXRtcCA9IGogKiAoaSA8IDIgPyAzIDogMSk7CiAJCQkJCWI0M19waHlfd3JpdGUoZGV2LAotCQkJCQkJQjQzX05QSFlfVEFCTEVfREFUQUxPLCAzICogaik7CisJCQkJCQlCNDNfTlBIWV9UQUJMRV9EQVRBTE8sIHRtcCk7CisJCQkJfQogCQkJfQogCiAJCQliNDNfbnBoeV9zZXRfcmZfc2VxdWVuY2UoZGV2LCA1LApAQCAtMTAyNiw3ICsxMzA4LDcgQEAKIAl1OCBldmVudHMyWzddID0geyAweDAsIDB4MywgMHg1LCAweDQsIDB4MiwgMHgxLCAweDggfTsKIAl1OCBkZWxheXMyWzddID0geyAweDgsIDB4NiwgMHgyLCAweDQsIDB4NCwgMHg2LCAweDEgfTsKIAotCWlmIChiNDNfY3VycmVudF9iYW5kKGRldi0+d2wpID09IElFRUU4MDIxMV9CQU5EXzJHSFopCisJaWYgKGI0M19jdXJyZW50X2JhbmQoZGV2LT53bCkgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikKIAkJYjQzX25waHlfY2xhc3NpZmllcihkZXYsIDEsIDApOwogCWVsc2UKIAkJYjQzX25waHlfY2xhc3NpZmllcihkZXYsIDEsIDEpOwpAQCAtMTA0OSwyOSArMTMzMSwxOCBAQAogCQkJYjQzX3JhZGlvX3NldChkZXYsIEIyMDU1X0MyX1RYX1JGX1NQQVJFLCAweDgpOwogCQl9CiAKLQkJLyogVE9ETzogY29udmVydCB0byBiNDNfbnRhYl93cml0ZT8gKi8KLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RBQkxFX0FERFIsIDB4MjAwMCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9UQUJMRV9EQVRBTE8sIDB4MDAwQSk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9UQUJMRV9BRERSLCAweDIwMTApOwotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfVEFCTEVfREFUQUxPLCAweDAwMEEpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfVEFCTEVfQUREUiwgMHgyMDAyKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RBQkxFX0RBVEFMTywgMHhDREFBKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RBQkxFX0FERFIsIDB4MjAxMik7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9UQUJMRV9EQVRBTE8sIDB4Q0RBQSk7CisJCWI0M19udGFiX3dyaXRlKGRldiwgQjQzX05UQUIxNig4LCAweDAwKSwgMHgwMDBBKTsKKwkJYjQzX250YWJfd3JpdGUoZGV2LCBCNDNfTlRBQjE2KDgsIDB4MTApLCAweDAwMEEpOworCQliNDNfbnRhYl93cml0ZShkZXYsIEI0M19OVEFCMTYoOCwgMHgwMiksIDB4Q0RBQSk7CisJCWI0M19udGFiX3dyaXRlKGRldiwgQjQzX05UQUIxNig4LCAweDEyKSwgMHhDREFBKTsKIAogCQlpZiAoZGV2LT5waHkucmV2IDwgMikgewotCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RBQkxFX0FERFIsIDB4MjAwOCk7Ci0JCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfVEFCTEVfREFUQUxPLCAweDAwMDApOwotCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RBQkxFX0FERFIsIDB4MjAxOCk7Ci0JCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfVEFCTEVfREFUQUxPLCAweDAwMDApOwotCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RBQkxFX0FERFIsIDB4MjAwNyk7Ci0JCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfVEFCTEVfREFUQUxPLCAweDdBQUIpOwotCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RBQkxFX0FERFIsIDB4MjAxNyk7Ci0JCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfVEFCTEVfREFUQUxPLCAweDdBQUIpOwotCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RBQkxFX0FERFIsIDB4MjAwNik7Ci0JCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfVEFCTEVfREFUQUxPLCAweDA4MDApOwotCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RBQkxFX0FERFIsIDB4MjAxNik7Ci0JCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfVEFCTEVfREFUQUxPLCAweDA4MDApOworCQkJYjQzX250YWJfd3JpdGUoZGV2LCBCNDNfTlRBQjE2KDgsIDB4MDgpLCAweDAwMDApOworCQkJYjQzX250YWJfd3JpdGUoZGV2LCBCNDNfTlRBQjE2KDgsIDB4MTgpLCAweDAwMDApOworCQkJYjQzX250YWJfd3JpdGUoZGV2LCBCNDNfTlRBQjE2KDgsIDB4MDcpLCAweDdBQUIpOworCQkJYjQzX250YWJfd3JpdGUoZGV2LCBCNDNfTlRBQjE2KDgsIDB4MTcpLCAweDdBQUIpOworCQkJYjQzX250YWJfd3JpdGUoZGV2LCBCNDNfTlRBQjE2KDgsIDB4MDYpLCAweDA4MDApOworCQkJYjQzX250YWJfd3JpdGUoZGV2LCBCNDNfTlRBQjE2KDgsIDB4MTYpLCAweDA4MDApOwogCQl9CiAKIAkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1JGQ1RMX0xVVF9UUlNXX0xPMSwgMHgyRDgpOwpAQCAtMTU2NSwxOSArMTgzNiwyMCBAQAogCX0KIH0KIAorLyogaHR0cDovL2JjbS12NC5zaXBzb2x1dGlvbnMubmV0LzgwMi4xMS9QSFkvTi9CUEhZSW5pdCAqLwogc3RhdGljIHZvaWQgYjQzX25waHlfYnBoeV9pbml0KHN0cnVjdCBiNDNfd2xkZXYgKmRldikKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIAl1MTYgdmFsOwogCiAJdmFsID0gMHgxRTFGOwotCWZvciAoaSA9IDA7IGkgPCAxNDsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKIAkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfTl9CTU9ERSgweDg4ICsgaSksIHZhbCk7CiAJCXZhbCAtPSAweDIwMjsKIAl9CiAJdmFsID0gMHgzRTNGOwogCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX05fQk1PREUoMHg5NyArIGkpLCB2YWwpOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9OX0JNT0RFKDB4OTggKyBpKSwgdmFsKTsKIAkJdmFsIC09IDB4MjAyOwogCX0KIAliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9OX0JNT0RFKDB4MzgpLCAweDY2OCk7CkBAIC0xNTg1LDcgKzE4NTcsOCBAQAogCiAvKiBodHRwOi8vYmNtLXY0LnNpcHNvbHV0aW9ucy5uZXQvODAyLjExL1BIWS9OL1NjYWxlT2Zmc2V0UnNzaSAqLwogc3RhdGljIHZvaWQgYjQzX25waHlfc2NhbGVfb2Zmc2V0X3Jzc2koc3RydWN0IGI0M193bGRldiAqZGV2LCB1MTYgc2NhbGUsCi0JCQkJICAgICAgIHM4IG9mZnNldCwgdTggY29yZSwgdTggcmFpbCwgdTggdHlwZSkKKwkJCQkJczggb2Zmc2V0LCB1OCBjb3JlLCB1OCByYWlsLAorCQkJCQllbnVtIGI0M19ucGh5X3Jzc2lfdHlwZSB0eXBlKQogewogCXUxNiB0bXA7CiAJYm9vbCBjb3JlMW9yNSA9IChjb3JlID09IDEpIHx8IChjb3JlID09IDUpOwpAQCAtMTU5NCw1MyArMTg2Nyw1OSBAQAogCW9mZnNldCA9IGNsYW1wX3ZhbChvZmZzZXQsIC0zMiwgMzEpOwogCXRtcCA9ICgoc2NhbGUgJiAweDNGKSA8PCA4KSB8IChvZmZzZXQgJiAweDNGKTsKIAotCWlmIChjb3JlMW9yNSAmJiAocmFpbCA9PSAwKSAmJiAodHlwZSA9PSAyKSkKKwlpZiAoY29yZTFvcjUgJiYgKHJhaWwgPT0gMCkgJiYgKHR5cGUgPT0gQjQzX05QSFlfUlNTSV9aKSkKIAkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1JTU0lNQ18wSV9SU1NJX1osIHRtcCk7Ci0JaWYgKGNvcmUxb3I1ICYmIChyYWlsID09IDEpICYmICh0eXBlID09IDIpKQorCWlmIChjb3JlMW9yNSAmJiAocmFpbCA9PSAxKSAmJiAodHlwZSA9PSBCNDNfTlBIWV9SU1NJX1opKQogCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUlNTSU1DXzBRX1JTU0lfWiwgdG1wKTsKLQlpZiAoY29yZTJvcjUgJiYgKHJhaWwgPT0gMCkgJiYgKHR5cGUgPT0gMikpCisJaWYgKGNvcmUyb3I1ICYmIChyYWlsID09IDApICYmICh0eXBlID09IEI0M19OUEhZX1JTU0lfWikpCiAJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9SU1NJTUNfMUlfUlNTSV9aLCB0bXApOwotCWlmIChjb3JlMm9yNSAmJiAocmFpbCA9PSAxKSAmJiAodHlwZSA9PSAyKSkKKwlpZiAoY29yZTJvcjUgJiYgKHJhaWwgPT0gMSkgJiYgKHR5cGUgPT0gQjQzX05QSFlfUlNTSV9aKSkKIAkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1JTU0lNQ18xUV9SU1NJX1osIHRtcCk7Ci0JaWYgKGNvcmUxb3I1ICYmIChyYWlsID09IDApICYmICh0eXBlID09IDApKQorCisJaWYgKGNvcmUxb3I1ICYmIChyYWlsID09IDApICYmICh0eXBlID09IEI0M19OUEhZX1JTU0lfWCkpCiAJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9SU1NJTUNfMElfUlNTSV9YLCB0bXApOwotCWlmIChjb3JlMW9yNSAmJiAocmFpbCA9PSAxKSAmJiAodHlwZSA9PSAwKSkKKwlpZiAoY29yZTFvcjUgJiYgKHJhaWwgPT0gMSkgJiYgKHR5cGUgPT0gQjQzX05QSFlfUlNTSV9YKSkKIAkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1JTU0lNQ18wUV9SU1NJX1gsIHRtcCk7Ci0JaWYgKGNvcmUyb3I1ICYmIChyYWlsID09IDApICYmICh0eXBlID09IDApKQorCWlmIChjb3JlMm9yNSAmJiAocmFpbCA9PSAwKSAmJiAodHlwZSA9PSBCNDNfTlBIWV9SU1NJX1gpKQogCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUlNTSU1DXzFJX1JTU0lfWCwgdG1wKTsKLQlpZiAoY29yZTJvcjUgJiYgKHJhaWwgPT0gMSkgJiYgKHR5cGUgPT0gMCkpCisJaWYgKGNvcmUyb3I1ICYmIChyYWlsID09IDEpICYmICh0eXBlID09IEI0M19OUEhZX1JTU0lfWCkpCiAJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9SU1NJTUNfMVFfUlNTSV9YLCB0bXApOwotCWlmIChjb3JlMW9yNSAmJiAocmFpbCA9PSAwKSAmJiAodHlwZSA9PSAxKSkKKworCWlmIChjb3JlMW9yNSAmJiAocmFpbCA9PSAwKSAmJiAodHlwZSA9PSBCNDNfTlBIWV9SU1NJX1kpKQogCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUlNTSU1DXzBJX1JTU0lfWSwgdG1wKTsKLQlpZiAoY29yZTFvcjUgJiYgKHJhaWwgPT0gMSkgJiYgKHR5cGUgPT0gMSkpCisJaWYgKGNvcmUxb3I1ICYmIChyYWlsID09IDEpICYmICh0eXBlID09IEI0M19OUEhZX1JTU0lfWSkpCiAJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9SU1NJTUNfMFFfUlNTSV9ZLCB0bXApOwotCWlmIChjb3JlMm9yNSAmJiAocmFpbCA9PSAwKSAmJiAodHlwZSA9PSAxKSkKKwlpZiAoY29yZTJvcjUgJiYgKHJhaWwgPT0gMCkgJiYgKHR5cGUgPT0gQjQzX05QSFlfUlNTSV9ZKSkKIAkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1JTU0lNQ18xSV9SU1NJX1ksIHRtcCk7Ci0JaWYgKGNvcmUyb3I1ICYmIChyYWlsID09IDEpICYmICh0eXBlID09IDEpKQorCWlmIChjb3JlMm9yNSAmJiAocmFpbCA9PSAxKSAmJiAodHlwZSA9PSBCNDNfTlBIWV9SU1NJX1kpKQogCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUlNTSU1DXzFRX1JTU0lfWSwgdG1wKTsKLQlpZiAoY29yZTFvcjUgJiYgKHJhaWwgPT0gMCkgJiYgKHR5cGUgPT0gNikpCisKKwlpZiAoY29yZTFvcjUgJiYgKHJhaWwgPT0gMCkgJiYgKHR5cGUgPT0gQjQzX05QSFlfUlNTSV9UQkQpKQogCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUlNTSU1DXzBJX1RCRCwgdG1wKTsKLQlpZiAoY29yZTFvcjUgJiYgKHJhaWwgPT0gMSkgJiYgKHR5cGUgPT0gNikpCisJaWYgKGNvcmUxb3I1ICYmIChyYWlsID09IDEpICYmICh0eXBlID09IEI0M19OUEhZX1JTU0lfVEJEKSkKIAkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1JTU0lNQ18wUV9UQkQsIHRtcCk7Ci0JaWYgKGNvcmUyb3I1ICYmIChyYWlsID09IDApICYmICh0eXBlID09IDYpKQorCWlmIChjb3JlMm9yNSAmJiAocmFpbCA9PSAwKSAmJiAodHlwZSA9PSBCNDNfTlBIWV9SU1NJX1RCRCkpCiAJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9SU1NJTUNfMUlfVEJELCB0bXApOwotCWlmIChjb3JlMm9yNSAmJiAocmFpbCA9PSAxKSAmJiAodHlwZSA9PSA2KSkKKwlpZiAoY29yZTJvcjUgJiYgKHJhaWwgPT0gMSkgJiYgKHR5cGUgPT0gQjQzX05QSFlfUlNTSV9UQkQpKQogCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUlNTSU1DXzFRX1RCRCwgdG1wKTsKLQlpZiAoY29yZTFvcjUgJiYgKHJhaWwgPT0gMCkgJiYgKHR5cGUgPT0gMykpCisKKwlpZiAoY29yZTFvcjUgJiYgKHJhaWwgPT0gMCkgJiYgKHR5cGUgPT0gQjQzX05QSFlfUlNTSV9QV1JERVQpKQogCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUlNTSU1DXzBJX1BXUkRFVCwgdG1wKTsKLQlpZiAoY29yZTFvcjUgJiYgKHJhaWwgPT0gMSkgJiYgKHR5cGUgPT0gMykpCisJaWYgKGNvcmUxb3I1ICYmIChyYWlsID09IDEpICYmICh0eXBlID09IEI0M19OUEhZX1JTU0lfUFdSREVUKSkKIAkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1JTU0lNQ18wUV9QV1JERVQsIHRtcCk7Ci0JaWYgKGNvcmUyb3I1ICYmIChyYWlsID09IDApICYmICh0eXBlID09IDMpKQorCWlmIChjb3JlMm9yNSAmJiAocmFpbCA9PSAwKSAmJiAodHlwZSA9PSBCNDNfTlBIWV9SU1NJX1BXUkRFVCkpCiAJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9SU1NJTUNfMUlfUFdSREVULCB0bXApOwotCWlmIChjb3JlMm9yNSAmJiAocmFpbCA9PSAxKSAmJiAodHlwZSA9PSAzKSkKKwlpZiAoY29yZTJvcjUgJiYgKHJhaWwgPT0gMSkgJiYgKHR5cGUgPT0gQjQzX05QSFlfUlNTSV9QV1JERVQpKQogCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUlNTSU1DXzFRX1BXUkRFVCwgdG1wKTsKLQlpZiAoY29yZTFvcjUgJiYgKHR5cGUgPT0gNCkpCisKKwlpZiAoY29yZTFvcjUgJiYgKHR5cGUgPT0gQjQzX05QSFlfUlNTSV9UU1NJX0kpKQogCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUlNTSU1DXzBJX1RTU0ksIHRtcCk7Ci0JaWYgKGNvcmUyb3I1ICYmICh0eXBlID09IDQpKQorCWlmIChjb3JlMm9yNSAmJiAodHlwZSA9PSBCNDNfTlBIWV9SU1NJX1RTU0lfSSkpCiAJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9SU1NJTUNfMUlfVFNTSSwgdG1wKTsKLQlpZiAoY29yZTFvcjUgJiYgKHR5cGUgPT0gNSkpCisKKwlpZiAoY29yZTFvcjUgJiYgKHR5cGUgPT0gQjQzX05QSFlfUlNTSV9UU1NJX1EpKQogCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUlNTSU1DXzBRX1RTU0ksIHRtcCk7Ci0JaWYgKGNvcmUyb3I1ICYmICh0eXBlID09IDUpKQorCWlmIChjb3JlMm9yNSAmJiAodHlwZSA9PSBCNDNfTlBIWV9SU1NJX1RTU0lfUSkpCiAJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9SU1NJTUNfMVFfVFNTSSwgdG1wKTsKIH0KIApAQCAtMTY2OCwyNyArMTk0NywzOSBAQAogCQkJCSh0eXBlICsgMSkgPDwgNCk7CiAJfQogCi0JLyogVE9ETyB1c2Ugc29tZSBkZWZpbml0aW9ucyAqLwogCWlmIChjb2RlID09IDApIHsKLQkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX05QSFlfQUZFQ1RMX09WRVIsIDB4Q0ZGRiwgMCk7CisJCWI0M19waHlfbWFzayhkZXYsIEI0M19OUEhZX0FGRUNUTF9PVkVSLCB+MHgzMDAwKTsKIAkJaWYgKHR5cGUgPCAzKSB7Ci0JCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTlBIWV9SRkNUTF9DTUQsIDB4RkVDNywgMCk7Ci0JCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTlBIWV9SRkNUTF9PVkVSLCAweEVGREMsIDApOwotCQkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX05QSFlfUkZDVExfQ01ELCAweEZGRkUsIDApOworCQkJYjQzX3BoeV9tYXNrKGRldiwgQjQzX05QSFlfUkZDVExfQ01ELAorCQkJCX4oQjQzX05QSFlfUkZDVExfQ01EX1JYRU4gfAorCQkJCSAgQjQzX05QSFlfUkZDVExfQ01EX0NPUkVTRUwpKTsKKwkJCWI0M19waHlfbWFzayhkZXYsIEI0M19OUEhZX1JGQ1RMX09WRVIsCisJCQkJfigweDEgPDwgMTIgfAorCQkJCSAgMHgxIDw8IDUgfAorCQkJCSAgMHgxIDw8IDEgfAorCQkJCSAgMHgxKSk7CisJCQliNDNfcGh5X21hc2soZGV2LCBCNDNfTlBIWV9SRkNUTF9DTUQsCisJCQkJfkI0M19OUEhZX1JGQ1RMX0NNRF9TVEFSVCk7CiAJCQl1ZGVsYXkoMjApOwotCQkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX05QSFlfUkZDVExfT1ZFUiwgMHhGRkZFLCAwKTsKKwkJCWI0M19waHlfbWFzayhkZXYsIEI0M19OUEhZX1JGQ1RMX09WRVIsIH4weDEpOwogCQl9CiAJfSBlbHNlIHsKLQkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX05QSFlfQUZFQ1RMX09WRVIsIDB4Q0ZGRiwKLQkJCQkweDMwMDApOworCQliNDNfcGh5X3NldChkZXYsIEI0M19OUEhZX0FGRUNUTF9PVkVSLCAweDMwMDApOwogCQlpZiAodHlwZSA8IDMpIHsKIAkJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19OUEhZX1JGQ1RMX0NNRCwKLQkJCQkJMHhGRUM3LCAweDAxODApOwotCQkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX05QSFlfUkZDVExfT1ZFUiwKLQkJCQkJMHhFRkRDLCAoY29kZSA8PCAxIHwgMHgxMDIxKSk7Ci0JCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTlBIWV9SRkNUTF9DTUQsIDB4RkZGRSwgMHgxKTsKKwkJCQl+KEI0M19OUEhZX1JGQ1RMX0NNRF9SWEVOIHwKKwkJCQkgIEI0M19OUEhZX1JGQ1RMX0NNRF9DT1JFU0VMKSwKKwkJCQkoQjQzX05QSFlfUkZDVExfQ01EX1JYRU4gfAorCQkJCSBjb2RlIDw8IEI0M19OUEhZX1JGQ1RMX0NNRF9DT1JFU0VMX1NISUZUKSk7CisJCQliNDNfcGh5X3NldChkZXYsIEI0M19OUEhZX1JGQ1RMX09WRVIsCisJCQkJKDB4MSA8PCAxMiB8CisJCQkJICAweDEgPDwgNSB8CisJCQkJICAweDEgPDwgMSB8CisJCQkJICAweDEpKTsKKwkJCWI0M19waHlfc2V0KGRldiwgQjQzX05QSFlfUkZDVExfQ01ELAorCQkJCUI0M19OUEhZX1JGQ1RMX0NNRF9TVEFSVCk7CiAJCQl1ZGVsYXkoMjApOwotCQkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX05QSFlfUkZDVExfT1ZFUiwgMHhGRkZFLCAwKTsKKwkJCWI0M19waHlfbWFzayhkZXYsIEI0M19OUEhZX1JGQ1RMX09WRVIsIH4weDEpOwogCQl9CiAJfQogfQpAQCAtMTgzNyw2ICsyMTI4LDE0IEBACiAJCXNhdmVfcmVnc19waHlbNV0gPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTlBIWV9BRkVDVExfT1ZFUik7CiAJCXNhdmVfcmVnc19waHlbNl0gPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTlBIWV9UWEZfNDBDT19CMVMwKTsKIAkJc2F2ZV9yZWdzX3BoeVs3XSA9IGI0M19waHlfcmVhZChkZXYsIEI0M19OUEhZX1RYRl80MENPX0IzMlMxKTsKKwl9IGVsc2UgaWYgKGRldi0+cGh5LnJldiA9PSAyKSB7CisJCXNhdmVfcmVnc19waHlbMF0gPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTlBIWV9BRkVDVExfQzEpOworCQlzYXZlX3JlZ3NfcGh5WzFdID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX05QSFlfQUZFQ1RMX0MyKTsKKwkJc2F2ZV9yZWdzX3BoeVsyXSA9IGI0M19waHlfcmVhZChkZXYsIEI0M19OUEhZX0FGRUNUTF9PVkVSKTsKKwkJc2F2ZV9yZWdzX3BoeVszXSA9IGI0M19waHlfcmVhZChkZXYsIEI0M19OUEhZX1JGQ1RMX0NNRCk7CisJCXNhdmVfcmVnc19waHlbNF0gPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTlBIWV9SRkNUTF9PVkVSKTsKKwkJc2F2ZV9yZWdzX3BoeVs1XSA9IGI0M19waHlfcmVhZChkZXYsIEI0M19OUEhZX1JGQ1RMX1JTU0lPMSk7CisJCXNhdmVfcmVnc19waHlbNl0gPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTlBIWV9SRkNUTF9SU1NJTzIpOwogCX0KIAogCWI0M19ucGh5X3Jzc2lfc2VsZWN0KGRldiwgNSwgdHlwZSk7CkBAIC0xODgwLDYgKzIxNzksMTQgQEAKIAkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX0FGRUNUTF9PVkVSLCBzYXZlX3JlZ3NfcGh5WzVdKTsKIAkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RYRl80MENPX0IxUzAsIHNhdmVfcmVnc19waHlbNl0pOwogCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfVFhGXzQwQ09fQjMyUzEsIHNhdmVfcmVnc19waHlbN10pOworCX0gZWxzZSBpZiAoZGV2LT5waHkucmV2ID09IDIpIHsKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX0FGRUNUTF9DMSwgc2F2ZV9yZWdzX3BoeVswXSk7CisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9BRkVDVExfQzIsIHNhdmVfcmVnc19waHlbMV0pOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfQUZFQ1RMX09WRVIsIHNhdmVfcmVnc19waHlbMl0pOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUkZDVExfQ01ELCBzYXZlX3JlZ3NfcGh5WzNdKTsKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1JGQ1RMX09WRVIsIHNhdmVfcmVnc19waHlbNF0pOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUkZDVExfUlNTSU8xLCBzYXZlX3JlZ3NfcGh5WzVdKTsKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1JGQ1RMX1JTU0lPMiwgc2F2ZV9yZWdzX3BoeVs2XSk7CiAJfQogCiAJcmV0dXJuIG91dDsKQEAgLTE4OTQsNyArMjIwMSwxMCBAQAogCXUxNiBjbGFzcywgb3ZlcnJpZGU7CiAJdTggcmVnc19zYXZlX3JhZGlvWzJdOwogCXUxNiByZWdzX3NhdmVfcGh5WzJdOworCiAJczggb2Zmc2V0WzRdOworCXU4IGNvcmU7CisJdTggcmFpbDsKIAogCXUxNiBjbGlwX3N0YXRlWzJdOwogCXUxNiBjbGlwX29mZlsyXSA9IHsgMHhGRkZGLCAweEZGRkYgfTsKQEAgLTE5OTUsMTYgKzIzMDUsMTUgQEAKIAkJaWYgKHJlc3VsdHNfbWluW2ldID09IDI0OCkKIAkJCW9mZnNldFtpXSA9IGNvZGUgLSAzMjsKIAotCQlpZiAoaSAlIDIgPT0gMCkKLQkJCWI0M19ucGh5X3NjYWxlX29mZnNldF9yc3NpKGRldiwgMCwgb2Zmc2V0W2ldLCAxLCAwLAotCQkJCQkJCXR5cGUpOwotCQllbHNlCi0JCQliNDNfbnBoeV9zY2FsZV9vZmZzZXRfcnNzaShkZXYsIDAsIG9mZnNldFtpXSwgMiwgMSwKLQkJCQkJCQl0eXBlKTsKKwkJY29yZSA9IChpIC8gMikgPyAyIDogMTsKKwkJcmFpbCA9IChpICUgMikgPyAxIDogMDsKKworCQliNDNfbnBoeV9zY2FsZV9vZmZzZXRfcnNzaShkZXYsIDAsIG9mZnNldFtpXSwgY29yZSwgcmFpbCwKKwkJCQkJCXR5cGUpOwogCX0KIAogCWI0M19yYWRpb19tYXNrc2V0KGRldiwgQjIwNTVfQzFfUERfUlNTSU1JU0MsIDB4RjgsIHN0YXRlWzBdKTsKLQliNDNfcmFkaW9fbWFza3NldChkZXYsIEIyMDU1X0MxX1BEX1JTU0lNSVNDLCAweEY4LCBzdGF0ZVsxXSk7CisJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCBCMjA1NV9DMl9QRF9SU1NJTUlTQywgMHhGOCwgc3RhdGVbMV0pOwogCiAJc3dpdGNoIChzdGF0ZVsyXSkgewogCWNhc2UgMToKQEAgLTIwNDIsNiArMjM1MSw5IEBACiAKIAliNDNfbnBoeV9jbGFzc2lmaWVyKGRldiwgNywgY2xhc3MpOwogCWI0M19ucGh5X3dyaXRlX2NsaXBfZGV0ZWN0aW9uKGRldiwgY2xpcF9zdGF0ZSk7CisJLyogU3BlY3MgZG9uJ3Qgc2F5IGFib3V0IHJlc2V0IGhlcmUsIGJ1dCBpdCBtYWtlcyB3bCBhbmQgYjQzIGR1bXBzCisJICAgaWRlbnRpY2FsLCBpdCByZWFsbHkgc2VlbXMgd2wgcGVyZm9ybXMgdGhpcyAqLworCWI0M19ucGh5X3Jlc2V0X2NjYShkZXYpOwogfQogCiAvKiBodHRwOi8vYmNtLXY0LnNpcHNvbHV0aW9ucy5uZXQvODAyLjExL1BIWS9OL1JTU0lDYWxSZXYzICovCkBAIC0yMDU5LDkgKzIzNzEsOSBAQAogCWlmIChkZXYtPnBoeS5yZXYgPj0gMykgewogCQliNDNfbnBoeV9yZXYzX3Jzc2lfY2FsKGRldik7CiAJfSBlbHNlIHsKLQkJYjQzX25waHlfcmV2Ml9yc3NpX2NhbChkZXYsIDIpOwotCQliNDNfbnBoeV9yZXYyX3Jzc2lfY2FsKGRldiwgMCk7Ci0JCWI0M19ucGh5X3JldjJfcnNzaV9jYWwoZGV2LCAxKTsKKwkJYjQzX25waHlfcmV2Ml9yc3NpX2NhbChkZXYsIEI0M19OUEhZX1JTU0lfWik7CisJCWI0M19ucGh5X3JldjJfcnNzaV9jYWwoZGV2LCBCNDNfTlBIWV9SU1NJX1gpOworCQliNDNfbnBoeV9yZXYyX3Jzc2lfY2FsKGRldiwgQjQzX05QSFlfUlNTSV9ZKTsKIAl9CiB9CiAKQEAgLTIyOTUsNyArMjYwNyw3IEBACiB7CiAJaW50IGksIGo7CiAJLyogQjQzX05QSFlfVFhGXzIwQ09fUzBBMSwgQjQzX05QSFlfVFhGXzQwQ09fUzBBMSwgdW5rbm93biAqLwotCXUxNiBvZmZzZXRbXSA9IHsgMHgxODYsIDB4MTk1LCAweDJDNSB9OworCXN0YXRpYyBjb25zdCB1MTYgb2Zmc2V0W10gPSB7IDB4MTg2LCAweDE5NSwgMHgyQzUgfTsKIAogCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCiAJCWZvciAoaiA9IDA7IGogPCAxNTsgaisrKQpAQCAtMjMyNyw3ICsyNjM5LDcgQEAKIAlzdHJ1Y3QgbnBoeV90eGdhaW5zIHRhcmdldDsKIAljb25zdCB1MzIgKnRhYmxlID0gTlVMTDsKIAotCWlmIChucGh5LT50eHB3cmN0cmwgPT0gMCkgeworCWlmICghbnBoeS0+dHhwd3JjdHJsKSB7CiAJCWludCBpOwogCiAJCWlmIChucGh5LT5oYW5nX2F2b2lkKQpAQCAtMjg4NCw3ICszMTk2LDcgQEAKIAl1OCByZmN0bFsyXTsKIAl1OCBhZmVjdGxfY29yZTsKIAl1MTYgdG1wWzZdOwotCXUxNiBjdXJfaHBmMSwgY3VyX2hwZjIsIGN1cl9sbmE7CisJdTE2IHVuaW5pdGlhbGl6ZWRfdmFyKGN1cl9ocGYxKSwgdW5pbml0aWFsaXplZF92YXIoY3VyX2hwZjIpLCBjdXJfbG5hOwogCXUzMiByZWFsLCBpbWFnOwogCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZDsKIApAQCAtMzA3Nyw5ICszMzg5LDkgQEAKIHsKIAl1MzIgdG1zbG93ID0gc3NiX3JlYWQzMihkZXYtPmRldiwgU1NCX1RNU0xPVyk7CiAJaWYgKG9uKQotCQl0bXNsb3cgfD0gU1NCX1RNU0xPV19QSFlDTEs7CisJCXRtc2xvdyB8PSBCNDNfVE1TTE9XX01BQ1BIWUNMS0VOOwogCWVsc2UKLQkJdG1zbG93ICY9IH5TU0JfVE1TTE9XX1BIWUNMSzsKKwkJdG1zbG93ICY9IH5CNDNfVE1TTE9XX01BQ1BIWUNMS0VOOwogCXNzYl93cml0ZTMyKGRldi0+ZGV2LCBTU0JfVE1TTE9XLCB0bXNsb3cpOwogfQogCkBAIC0zMDg4LDcgKzM0MDAsNyBAQAogewogCXN0cnVjdCBiNDNfcGh5ICpwaHkgPSAmZGV2LT5waHk7CiAJc3RydWN0IGI0M19waHlfbiAqbnBoeSA9IHBoeS0+bjsKLQl1MTYgYnVmWzE2XTsKKwkvKiB1MTYgYnVmWzE2XTsgaXQncyByZXYzKyAqLwogCiAJbnBoeS0+cGh5cnhjaGFpbiA9IG1hc2s7CiAKQEAgLTMyMzIsMTAgKzM1NDQsMTIgQEAKIAogCWI0M19ucGh5X2NsYXNzaWZpZXIoZGV2LCAwLCAwKTsKIAliNDNfbnBoeV9yZWFkX2NsaXBfZGV0ZWN0aW9uKGRldiwgY2xpcCk7CisJaWYgKGI0M19jdXJyZW50X2JhbmQoZGV2LT53bCkgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikKKwkJYjQzX25waHlfYnBoeV9pbml0KGRldik7CisKIAl0eF9wd3Jfc3RhdGUgPSBucGh5LT50eHB3cmN0cmw7Ci0JLyogVE9ETyBOIFBIWSBUWCBwb3dlciBjb250cm9sIHdpdGggYXJndW1lbnQgMAotCQkodHVybmluZyBvZmYgcG93ZXIgY29udHJvbCkgKi8KLQkvKiBUT0RPIEZpeCB0aGUgVFggUG93ZXIgU2V0dGluZ3MgKi8KKwliNDNfbnBoeV90eF9wb3dlcl9jdHJsKGRldiwgZmFsc2UpOworCWI0M19ucGh5X3R4X3Bvd2VyX2ZpeChkZXYpOwogCS8qIFRPRE8gTiBQSFkgVFggUG93ZXIgQ29udHJvbCBJZGxlIFRTU0kgKi8KIAkvKiBUT0RPIE4gUEhZIFRYIFBvd2VyIENvbnRyb2wgU2V0dXAgKi8KIApAQCAtMzI5MiwyMSArMzYwNiwxOCBAQAogCQkJCQkvKiBUT0RPIE4gUEhZIFByZSBDYWxpYnJhdGUgVFggR2FpbiAqLwogCQkJCQl0YXJnZXQgPSBiNDNfbnBoeV9nZXRfdHhfZ2FpbnMoZGV2KTsKIAkJCQl9Ci0JCQl9CisJCQkJaWYgKCFiNDNfbnBoeV9jYWxfdHhfaXFfbG8oZGV2LCB0YXJnZXQsIHRydWUsIGZhbHNlKSkKKwkJCQkJaWYgKGI0M19ucGh5X2NhbF9yeF9pcShkZXYsIHRhcmdldCwgMiwgMCkgPT0gMCkKKwkJCQkJCWI0M19ucGh5X3NhdmVfY2FsKGRldik7CisJCQl9IGVsc2UgaWYgKG5waHktPm1waGFzZV9jYWxfcGhhc2VfaWQgPT0gMCkKKwkJCQk7LyogTiBQSFkgUGVyaW9kaWMgQ2FsaWJyYXRpb24gd2l0aCBhcmcgMyAqLworCQl9IGVsc2UgeworCQkJYjQzX25waHlfcmVzdG9yZV9jYWwoZGV2KTsKIAkJfQogCX0KIAotCWlmICghYjQzX25waHlfY2FsX3R4X2lxX2xvKGRldiwgdGFyZ2V0LCB0cnVlLCBmYWxzZSkpIHsKLQkJaWYgKGI0M19ucGh5X2NhbF9yeF9pcShkZXYsIHRhcmdldCwgMiwgMCkgPT0gMCkKLQkJCWI0M19ucGh5X3NhdmVfY2FsKGRldik7Ci0JCWVsc2UgaWYgKG5waHktPm1waGFzZV9jYWxfcGhhc2VfaWQgPT0gMCkKLQkJCTsvKiBOIFBIWSBQZXJpb2RpYyBDYWxpYnJhdGlvbiB3aXRoIGFyZ3VtZW50IDMgKi8KLQl9IGVsc2UgewotCQliNDNfbnBoeV9yZXN0b3JlX2NhbChkZXYpOwotCX0KLQogCWI0M19ucGh5X3R4X3B3cl9jdHJsX2NvZWZfc2V0dXAoZGV2KTsKLQkvKiBUT0RPIE4gUEhZIFRYIFBvd2VyIENvbnRyb2wgRW5hYmxlIHdpdGggYXJndW1lbnQgdHhfcHdyX3N0YXRlICovCisJYjQzX25waHlfdHhfcG93ZXJfY3RybChkZXYsIHR4X3B3cl9zdGF0ZSk7CiAJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RYTUFDSUZfSE9MRE9GRiwgMHgwMDE1KTsKIAliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfVFhNQUNERUxBWSwgMHgwMzIwKTsKIAlpZiAocGh5LT5yZXYgPj0gMyAmJiBwaHktPnJldiA8PSA2KQpAQCAtMzMxNSw3ICszNjI2LDYgQEAKIAlpZiAocGh5LT5yZXYgPj0gMykKIAkJYjQzX25waHlfc3B1cl93b3JrYXJvdW5kKGRldik7CiAKLQliNDNlcnIoZGV2LT53bCwgIklFRUUgODAyLjExbiBkZXZpY2VzIGFyZSBub3Qgc3VwcG9ydGVkLCB5ZXQuXG4iKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzM1Nyw3ICszNjY3LDcgQEAKIAkJCWI0M19waHlfbWFzayhkZXYsIEI0M19QSFlfQl9URVNULCB+MHg4NDApOwogCX0KIAotCWlmIChucGh5LT50eHB3cmN0cmwpCisJaWYgKCFucGh5LT50eHB3cmN0cmwpCiAJCWI0M19ucGh5X3R4X3Bvd2VyX2ZpeChkZXYpOwogCiAJaWYgKGRldi0+cGh5LnJldiA8IDMpCkBAIC0zMzgxLDcgKzM2OTEsNiBAQAogCQkJCWVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgY2hhbm5lbF90eXBlKQogewogCXN0cnVjdCBiNDNfcGh5ICpwaHkgPSAmZGV2LT5waHk7Ci0Jc3RydWN0IGI0M19waHlfbiAqbnBoeSA9IGRldi0+cGh5Lm47CiAKIAljb25zdCBzdHJ1Y3QgYjQzX25waHlfY2hhbm5lbHRhYl9lbnRyeV9yZXYyICp0YWJlbnRfcjI7CiAJY29uc3Qgc3RydWN0IGI0M19ucGh5X2NoYW5uZWx0YWJfZW50cnlfcmV2MyAqdGFiZW50X3IzOwpAQCAtMzM5MSw3ICszNzAwLDYgQEAKIAlpZiAoZGV2LT5waHkucmV2ID49IDMpIHsKIAkJdGFiZW50X3IzID0gYjQzX25waHlfZ2V0X2NoYW50YWJlbnRfcmV2MyhkZXYsCiAJCQkJCQkJY2hhbm5lbC0+Y2VudGVyX2ZyZXEpOwotCQl0YWJlbnRfcjMgPSBOVUxMOwogCQlpZiAoIXRhYmVudF9yMykKIAkJCXJldHVybiAtRVNSQ0g7CiAJfSBlbHNlIHsKQEAgLTM0MjAsNyArMzcyOCw3IEBACiAJaWYgKGRldi0+cGh5LnJldiA+PSAzKSB7CiAJCXRtcCA9IChjaGFubmVsLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopID8gNCA6IDA7CiAJCWI0M19yYWRpb19tYXNrc2V0KGRldiwgMHgwOCwgMHhGRkZCLCB0bXApOwotCQkvKiBUT0RPOiBQSFkgUmFkaW8yMDU2IFNldHVwIChkZXYsIHRhYmVudF9yMyk7ICovCisJCWI0M19yYWRpb18yMDU2X3NldHVwKGRldiwgdGFiZW50X3IzKTsKIAkJYjQzX25waHlfY2hhbm5lbF9zZXR1cChkZXYsICYodGFiZW50X3IzLT5waHlfcmVncyksIGNoYW5uZWwpOwogCX0gZWxzZSB7CiAJCXRtcCA9IChjaGFubmVsLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopID8gMHgwMDIwIDogMHgwMDUwOwpAQCAtMzQ1MSw3ICszNzU5LDExIEBACiAKIAltZW1zZXQobnBoeSwgMCwgc2l6ZW9mKCpucGh5KSk7CiAKLQkvL1RPRE8gaW5pdCBzdHJ1Y3QgYjQzX3BoeV9uCisJbnBoeS0+aGFuZ19hdm9pZCA9IChwaHktPnJldiA9PSAzIHx8IHBoeS0+cmV2ID09IDQpOworCW5waHktPmdhaW5fYm9vc3QgPSB0cnVlOyAvKiB0aGlzIHdheSB3ZSBmb2xsb3cgd2wsIGFzc3VtZSBpdCBpcyB0cnVlICovCisJbnBoeS0+dHhyeF9jaGFpbiA9IDI7IC8qIHN0aCBkaWZmZXJlbnQgdGhhbiAwIGFuZCAxIGZvciBub3cgKi8KKwlucGh5LT5waHlyeGNoYWluID0gMzsgLyogdG8gYXZvaWQgYjQzX25waHlfc2V0X3J4X2NvcmVfc3RhdGUgbGlrZSB3bCAqLworCW5waHktPnBlcmljYWwgPSAyOyAvKiBhdm9pZCBhZGRpdGlvbmFsIHJzc2kgY2FsIG9uIGluaXQgKGxpa2Ugd2wpICovCiB9CiAKIHN0YXRpYyB2b2lkIGI0M19ucGh5X29wX2ZyZWUoc3RydWN0IGI0M193bGRldiAqZGV2KQpAQCAtMzUwMCw2ICszODEyLDE1IEBACiAJYjQzX3dyaXRlMTYoZGV2LCBCNDNfTU1JT19QSFlfREFUQSwgdmFsdWUpOwogfQogCitzdGF0aWMgdm9pZCBiNDNfbnBoeV9vcF9tYXNrc2V0KHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTE2IHJlZywgdTE2IG1hc2ssCisJCQkJIHUxNiBzZXQpCit7CisJY2hlY2tfcGh5cmVnKGRldiwgcmVnKTsKKwliNDNfd3JpdGUxNihkZXYsIEI0M19NTUlPX1BIWV9DT05UUk9MLCByZWcpOworCWI0M193cml0ZTE2KGRldiwgQjQzX01NSU9fUEhZX0RBVEEsCisJCSAgICAoYjQzX3JlYWQxNihkZXYsIEI0M19NTUlPX1BIWV9EQVRBKSAmIG1hc2spIHwgc2V0KTsKK30KKwogc3RhdGljIHUxNiBiNDNfbnBoeV9vcF9yYWRpb19yZWFkKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTE2IHJlZykKIHsKIAkvKiBSZWdpc3RlciAxIGlzIGEgMzItYml0IHJlZ2lzdGVyLiAqLwpAQCAtMzUyNCw4ICszODQ1LDYgQEAKIHN0YXRpYyB2b2lkIGI0M19ucGh5X29wX3NvZnR3YXJlX3Jma2lsbChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCiAJCQkJCWJvb2wgYmxvY2tlZCkKIHsKLQlzdHJ1Y3QgYjQzX3BoeV9uICpucGh5ID0gZGV2LT5waHkubjsKLQogCWlmIChiNDNfcmVhZDMyKGRldiwgQjQzX01NSU9fTUFDQ1RMKSAmIEI0M19NQUNDVExfRU5BQkxFRCkKIAkJYjQzZXJyKGRldi0+d2wsICJNQUMgbm90IHN1c3BlbmRlZFxuIik7CiAKQEAgLTM1OTYsNiArMzkxNSw3IEBACiAJLmluaXQJCQk9IGI0M19ucGh5X29wX2luaXQsCiAJLnBoeV9yZWFkCQk9IGI0M19ucGh5X29wX3JlYWQsCiAJLnBoeV93cml0ZQkJPSBiNDNfbnBoeV9vcF93cml0ZSwKKwkucGh5X21hc2tzZXQJCT0gYjQzX25waHlfb3BfbWFza3NldCwKIAkucmFkaW9fcmVhZAkJPSBiNDNfbnBoeV9vcF9yYWRpb19yZWFkLAogCS5yYWRpb193cml0ZQkJPSBiNDNfbnBoeV9vcF9yYWRpb193cml0ZSwKIAkuc29mdHdhcmVfcmZraWxsCT0gYjQzX25waHlfb3Bfc29mdHdhcmVfcmZraWxsLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9uLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X24uaAppbmRleCBjMTQ0ZTU5Li4wMDFlODQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X24uaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X24uaApAQCAtNzgyLDcgKzc4Miw3IEBACiAJdTE2IG1waGFzZV90eGNhbF9udW1jbWRzOwogCXUxNiBtcGhhc2VfdHhjYWxfYmVzdGNvZWZmc1sxMV07CiAKLQl1OCB0eHB3cmN0cmw7CisJYm9vbCB0eHB3cmN0cmw7CiAJdTE2IHR4Y2FsX2JibXVsdDsKIAl1MTYgdHhpcWxvY2FsX2Jlc3RjWzExXTsKIAlib29sIHR4aXFsb2NhbF9jb2VmZnN2YWxpZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9yYWRpb18yMDU1LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcmFkaW9fMjA1NS5jCmluZGV4IDFiNTMxNjUuLjQ0YzZkZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9yYWRpb18yMDU1LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3JhZGlvXzIwNTUuYwpAQCAtMjQ0LDcgKzI0NCw3IEBACiAgIFsweENCXQkJCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAogICBbMHhDQ10JCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKICAgW0IyMDU1X0MxX0xOQV9HQUlOQlNUXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKLSAgWzB4Q0VdCQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisgIFsweENFXQkJCT0geyAuZ2h6NSA9IDB4MDAwNiwgLmdoejIgPSAweDAwMDYsIE5PVVBMT0FELCB9LAogICBbMHhDRl0JCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKICAgWzB4RDBdCQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCiAgIFsweEQxXQkJCT0geyAuZ2h6NSA9IDB4MDAxOCwgLmdoejIgPSAweDAwMTgsIE5PVVBMT0FELCB9LApAQCAtMjU2LDcgKzI1Niw3IEBACiAgIFsweEQ3XQkJCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAogICBbMHhEOF0JCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKICAgW0IyMDU1X0MyX0xOQV9HQUlOQlNUXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKLSAgWzB4REFdCQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisgIFsweERBXQkJCT0geyAuZ2h6NSA9IDB4MDAwNiwgLmdoejIgPSAweDAwMDYsIE5PVVBMT0FELCB9LAogICBbMHhEQl0JCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKICAgWzB4RENdCQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCiAgIFsweEREXQkJCT0geyAuZ2h6NSA9IDB4MDAxOCwgLmdoejIgPSAweDAwMTgsIE5PVVBMT0FELCB9LApAQCAtMzA0LDE3OCArMzA0LDE3OCBAQAogICB7CS5jaGFubmVsCQk9IDE4NCwKIAkuZnJlcQkJCT0gNDkyMCwgLyogTUh6ICovCiAJLnVuazIJCQk9IDMyODAsCi0JUkFESU9SRUdTKDB4NzEsIDB4MDEsIDB4RUMsIDB4MEYsIDB4RkYsIDB4MDEsIDB4MDQsIDB4MEEsCisJUkFESU9SRUdTKDB4NzEsIDB4RUMsIDB4MDEsIDB4MEYsIDB4RkYsIDB4MDEsIDB4MDQsIDB4MEEsCiAJCSAgMHgwMCwgMHg4RiwgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMCwgMHgwRiwgMHgwRiwKIAkJICAweDhGLCAweEZGLCAweDAwLCAweDBGLCAweDBGLCAweDhGKSwKLQlQSFlSRUdTKDB4QjQwNywgMHhCMDA3LCAweEFDMDcsIDB4MTQwMiwgMHgxNTAyLCAweDE2MDIpLAorCVBIWVJFR1MoMHgwN0I0LCAweDA3QjAsIDB4MDdBQywgMHgwMjE0LCAweDAyMTUsIDB4MDIxNiksCiAgIH0sCiAgIHsJLmNoYW5uZWwJCT0gMTg2LAogCS5mcmVxCQkJPSA0OTMwLCAvKiBNSHogKi8KIAkudW5rMgkJCT0gMzI4NywKLQlSQURJT1JFR1MoMHg3MSwgMHgwMSwgMHhFRCwgMHgwRiwgMHhGRiwgMHgwMSwgMHgwNCwgMHgwQSwKKwlSQURJT1JFR1MoMHg3MSwgMHhFRCwgMHgwMSwgMHgwRiwgMHhGRiwgMHgwMSwgMHgwNCwgMHgwQSwKIAkJICAweDAwLCAweDhGLCAweEZGLCAweEZGLCAweEZGLCAweDAwLCAweDBGLCAweDBGLAogCQkgIDB4OEYsIDB4RkYsIDB4MDAsIDB4MEYsIDB4MEYsIDB4OEYpLAotCVBIWVJFR1MoMHhCODA3LCAweEI0MDcsIDB4QjAwNywgMHgxMzAyLCAweDE0MDIsIDB4MTUwMiksCisJUEhZUkVHUygweDA3QjgsIDB4MDdCNCwgMHgwN0IwLCAweDAyMTMsIDB4MDIxNCwgMHgwMjE1KSwKICAgfSwKICAgewkuY2hhbm5lbAkJPSAxODgsCiAJLmZyZXEJCQk9IDQ5NDAsIC8qIE1IeiAqLwogCS51bmsyCQkJPSAzMjkzLAotCVJBRElPUkVHUygweDcxLCAweDAxLCAweEVFLCAweDBGLCAweEZGLCAweDAxLCAweDA0LCAweDBBLAorCVJBRElPUkVHUygweDcxLCAweEVFLCAweDAxLCAweDBGLCAweEZGLCAweDAxLCAweDA0LCAweDBBLAogCQkgIDB4MDAsIDB4OEYsIDB4RUUsIDB4RUUsIDB4RkYsIDB4MDAsIDB4MEYsIDB4MEYsCiAJCSAgMHg4RiwgMHhGRiwgMHgwMCwgMHgwRiwgMHgwRiwgMHg4RiksCi0JUEhZUkVHUygweEJDMDcsIDB4QjgwNywgMHhCNDA3LCAweDEyMDIsIDB4MTMwMiwgMHgxNDAyKSwKKwlQSFlSRUdTKDB4MDdCQywgMHgwN0I4LCAweDA3QjQsIDB4MDIxMiwgMHgwMjEzLCAweDAyMTQpLAogICB9LAogICB7CS5jaGFubmVsCQk9IDE5MCwKIAkuZnJlcQkJCT0gNDk1MCwgLyogTUh6ICovCiAJLnVuazIJCQk9IDMzMDAsCi0JUkFESU9SRUdTKDB4NzEsIDB4MDEsIDB4RUYsIDB4MEYsIDB4RkYsIDB4MDEsIDB4MDQsIDB4MEEsCisJUkFESU9SRUdTKDB4NzEsIDB4RUYsIDB4MDEsIDB4MEYsIDB4RkYsIDB4MDEsIDB4MDQsIDB4MEEsCiAJCSAgMHgwMCwgMHg4RiwgMHhFRSwgMHhFRSwgMHhGRiwgMHgwMCwgMHgwRiwgMHgwRiwKIAkJICAweDhGLCAweEZGLCAweDAwLCAweDBGLCAweDBGLCAweDhGKSwKLQlQSFlSRUdTKDB4QzAwNywgMHhCQzA3LCAweEI4MDcsIDB4MTEwMiwgMHgxMjAyLCAweDEzMDIpLAorCVBIWVJFR1MoMHgwN0MwLCAweDA3QkMsIDB4MDdCOCwgMHgwMjExLCAweDAyMTIsIDB4MDIxMyksCiAgIH0sCiAgIHsJLmNoYW5uZWwJCT0gMTkyLAogCS5mcmVxCQkJPSA0OTYwLCAvKiBNSHogKi8KIAkudW5rMgkJCT0gMzMwNywKLQlSQURJT1JFR1MoMHg3MSwgMHgwMSwgMHhGMCwgMHgwRiwgMHhGRiwgMHgwMSwgMHgwNCwgMHgwQSwKKwlSQURJT1JFR1MoMHg3MSwgMHhGMCwgMHgwMSwgMHgwRiwgMHhGRiwgMHgwMSwgMHgwNCwgMHgwQSwKIAkJICAweDAwLCAweDhGLCAweEVFLCAweEVFLCAweEZGLCAweDAwLCAweDBGLCAweDBGLAogCQkgIDB4OEYsIDB4RkYsIDB4MDAsIDB4MEYsIDB4MEYsIDB4OEYpLAotCVBIWVJFR1MoMHhDNDA3LCAweEMwMDcsIDB4QkMwNywgMHgwRjAyLCAweDExMDIsIDB4MTIwMiksCisJUEhZUkVHUygweDA3QzQsIDB4MDdDMCwgMHgwN0JDLCAweDAyMEYsIDB4MDIxMSwgMHgwMjEyKSwKICAgfSwKICAgewkuY2hhbm5lbAkJPSAxOTQsCiAJLmZyZXEJCQk9IDQ5NzAsIC8qIE1IeiAqLwogCS51bmsyCQkJPSAzMzEzLAotCVJBRElPUkVHUygweDcxLCAweDAxLCAweEYxLCAweDBGLCAweEZGLCAweDAxLCAweDA0LCAweDBBLAorCVJBRElPUkVHUygweDcxLCAweEYxLCAweDAxLCAweDBGLCAweEZGLCAweDAxLCAweDA0LCAweDBBLAogCQkgIDB4MDAsIDB4OEYsIDB4RUUsIDB4RUUsIDB4RkYsIDB4MDAsIDB4MEYsIDB4MEYsCiAJCSAgMHg4RiwgMHhGRiwgMHgwMCwgMHgwRiwgMHgwRiwgMHg4RiksCi0JUEhZUkVHUygweEM4MDcsIDB4QzQwNywgMHhDMDA3LCAweDBFMDIsIDB4MEYwMiwgMHgxMTAyKSwKKwlQSFlSRUdTKDB4MDdDOCwgMHgwN0M0LCAweDA3QzAsIDB4MDIwRSwgMHgwMjBGLCAweDAyMTEpLAogICB9LAogICB7CS5jaGFubmVsCQk9IDE5NiwKIAkuZnJlcQkJCT0gNDk4MCwgLyogTUh6ICovCiAJLnVuazIJCQk9IDMzMjAsCi0JUkFESU9SRUdTKDB4NzEsIDB4MDEsIDB4RjIsIDB4MEUsIDB4RkYsIDB4MDEsIDB4MDQsIDB4MEEsCisJUkFESU9SRUdTKDB4NzEsIDB4RjIsIDB4MDEsIDB4MEUsIDB4RkYsIDB4MDEsIDB4MDQsIDB4MEEsCiAJCSAgMHgwMCwgMHg4RiwgMHhERCwgMHhERCwgMHhGRiwgMHgwMCwgMHgwRiwgMHgwRiwKIAkJICAweDhGLCAweEZGLCAweDAwLCAweDBGLCAweDBGLCAweDhGKSwKLQlQSFlSRUdTKDB4Q0MwNywgMHhDODA3LCAweEM0MDcsIDB4MEQwMiwgMHgwRTAyLCAweDBGMDIpLAorCVBIWVJFR1MoMHgwN0NDLCAweDA3QzgsIDB4MDdDNCwgMHgwMjBELCAweDAyMEUsIDB4MDIwRiksCiAgIH0sCiAgIHsJLmNoYW5uZWwJCT0gMTk4LAogCS5mcmVxCQkJPSA0OTkwLCAvKiBNSHogKi8KIAkudW5rMgkJCT0gMzMyNywKLQlSQURJT1JFR1MoMHg3MSwgMHgwMSwgMHhGMywgMHgwRSwgMHhGRiwgMHgwMSwgMHgwNCwgMHgwQSwKKwlSQURJT1JFR1MoMHg3MSwgMHhGMywgMHgwMSwgMHgwRSwgMHhGRiwgMHgwMSwgMHgwNCwgMHgwQSwKIAkJICAweDAwLCAweDhGLCAweERELCAweERELCAweEZGLCAweDAwLCAweDBGLCAweDBGLAogCQkgIDB4OEYsIDB4RkYsIDB4MDAsIDB4MEYsIDB4MEYsIDB4OEYpLAotCVBIWVJFR1MoMHhEMDA3LCAweENDMDcsIDB4QzgwNywgMHgwQzAyLCAweDBEMDIsIDB4MEUwMiksCisJUEhZUkVHUygweDA3RDAsIDB4MDdDQywgMHgwN0M4LCAweDAyMEMsIDB4MDIwRCwgMHgwMjBFKSwKICAgfSwKICAgewkuY2hhbm5lbAkJPSAyMDAsCiAJLmZyZXEJCQk9IDUwMDAsIC8qIE1IeiAqLwogCS51bmsyCQkJPSAzMzMzLAotCVJBRElPUkVHUygweDcxLCAweDAxLCAweEY0LCAweDBFLCAweEZGLCAweDAxLCAweDA0LCAweDBBLAorCVJBRElPUkVHUygweDcxLCAweEY0LCAweDAxLCAweDBFLCAweEZGLCAweDAxLCAweDA0LCAweDBBLAogCQkgIDB4MDAsIDB4OEYsIDB4REQsIDB4REQsIDB4RkYsIDB4MDAsIDB4MEYsIDB4MEYsCiAJCSAgMHg4RiwgMHhGRiwgMHgwMCwgMHgwRiwgMHgwRiwgMHg4RiksCi0JUEhZUkVHUygweEQ0MDcsIDB4RDAwNywgMHhDQzA3LCAweDBCMDIsIDB4MEMwMiwgMHgwRDAyKSwKKwlQSFlSRUdTKDB4MDdENCwgMHgwN0QwLCAweDA3Q0MsIDB4MDIwQiwgMHgwMjBDLCAweDAyMEQpLAogICB9LAogICB7CS5jaGFubmVsCQk9IDIwMiwKIAkuZnJlcQkJCT0gNTAxMCwgLyogTUh6ICovCiAJLnVuazIJCQk9IDMzNDAsCi0JUkFESU9SRUdTKDB4NzEsIDB4MDEsIDB4RjUsIDB4MEUsIDB4RkYsIDB4MDEsIDB4MDQsIDB4MEEsCisJUkFESU9SRUdTKDB4NzEsIDB4RjUsIDB4MDEsIDB4MEUsIDB4RkYsIDB4MDEsIDB4MDQsIDB4MEEsCiAJCSAgMHgwMCwgMHg4RiwgMHhERCwgMHhERCwgMHhGRiwgMHgwMCwgMHgwRiwgMHgwRiwKIAkJICAweDhGLCAweEZGLCAweDAwLCAweDBGLCAweDBGLCAweDhGKSwKLQlQSFlSRUdTKDB4RDgwNywgMHhENDA3LCAweEQwMDcsIDB4MEEwMiwgMHgwQjAyLCAweDBDMDIpLAorCVBIWVJFR1MoMHgwN0Q4LCAweDA3RDQsIDB4MDdEMCwgMHgwMjBBLCAweDAyMEIsIDB4MDIwQyksCiAgIH0sCiAgIHsJLmNoYW5uZWwJCT0gMjA0LAogCS5mcmVxCQkJPSA1MDIwLCAvKiBNSHogKi8KIAkudW5rMgkJCT0gMzM0NywKLQlSQURJT1JFR1MoMHg3MSwgMHgwMSwgMHhGNiwgMHgwRSwgMHhGNywgMHgwMSwgMHgwNCwgMHgwQSwKKwlSQURJT1JFR1MoMHg3MSwgMHhGNiwgMHgwMSwgMHgwRSwgMHhGNywgMHgwMSwgMHgwNCwgMHgwQSwKIAkJICAweDAwLCAweDhGLCAweENDLCAweENDLCAweEZGLCAweDAwLCAweDBGLCAweDBGLAogCQkgIDB4OEYsIDB4RkYsIDB4MDAsIDB4MEYsIDB4MEYsIDB4OEYpLAotCVBIWVJFR1MoMHhEQzA3LCAweEQ4MDcsIDB4RDQwNywgMHgwOTAyLCAweDBBMDIsIDB4MEIwMiksCisJUEhZUkVHUygweDA3REMsIDB4MDdEOCwgMHgwN0Q0LCAweDAyMDksIDB4MDIwQSwgMHgwMjBCKSwKICAgfSwKICAgewkuY2hhbm5lbAkJPSAyMDYsCiAJLmZyZXEJCQk9IDUwMzAsIC8qIE1IeiAqLwogCS51bmsyCQkJPSAzMzUzLAotCVJBRElPUkVHUygweDcxLCAweDAxLCAweEY3LCAweDBFLCAweEY3LCAweDAxLCAweDA0LCAweDBBLAorCVJBRElPUkVHUygweDcxLCAweEY3LCAweDAxLCAweDBFLCAweEY3LCAweDAxLCAweDA0LCAweDBBLAogCQkgIDB4MDAsIDB4OEYsIDB4Q0MsIDB4Q0MsIDB4RkYsIDB4MDAsIDB4MEYsIDB4MEYsCiAJCSAgMHg4RiwgMHhGRiwgMHgwMCwgMHgwRiwgMHgwRiwgMHg4RiksCi0JUEhZUkVHUygweEUwMDcsIDB4REMwNywgMHhEODA3LCAweDA4MDIsIDB4MDkwMiwgMHgwQTAyKSwKKwlQSFlSRUdTKDB4MDdFMCwgMHgwN0RDLCAweDA3RDgsIDB4MDIwOCwgMHgwMjA5LCAweDAyMEEpLAogICB9LAogICB7CS5jaGFubmVsCQk9IDIwOCwKIAkuZnJlcQkJCT0gNTA0MCwgLyogTUh6ICovCiAJLnVuazIJCQk9IDMzNjAsCi0JUkFESU9SRUdTKDB4NzEsIDB4MDEsIDB4RjgsIDB4MEQsIDB4RUYsIDB4MDEsIDB4MDQsIDB4MEEsCisJUkFESU9SRUdTKDB4NzEsIDB4RjgsIDB4MDEsIDB4MEQsIDB4RUYsIDB4MDEsIDB4MDQsIDB4MEEsCiAJCSAgMHgwMCwgMHg4RiwgMHhDQywgMHhDQywgMHhGRiwgMHgwMCwgMHgwRiwgMHgwRiwKIAkJICAweDhGLCAweEZGLCAweDAwLCAweDBGLCAweDBGLCAweDhGKSwKLQlQSFlSRUdTKDB4RTQwNywgMHhFMDA3LCAweERDMDcsIDB4MDcwMiwgMHgwODAyLCAweDA5MDIpLAorCVBIWVJFR1MoMHgwN0U0LCAweDA3RTAsIDB4MDdEQywgMHgwMjA3LCAweDAyMDgsIDB4MDIwOSksCiAgIH0sCiAgIHsJLmNoYW5uZWwJCT0gMjEwLAogCS5mcmVxCQkJPSA1MDUwLCAvKiBNSHogKi8KIAkudW5rMgkJCT0gMzM2NywKLQlSQURJT1JFR1MoMHg3MSwgMHgwMSwgMHhGOSwgMHgwRCwgMHhFRiwgMHgwMSwgMHgwNCwgMHgwQSwKKwlSQURJT1JFR1MoMHg3MSwgMHhGOSwgMHgwMSwgMHgwRCwgMHhFRiwgMHgwMSwgMHgwNCwgMHgwQSwKIAkJICAweDAwLCAweDhGLCAweENDLCAweENDLCAweEZGLCAweDAwLCAweDBGLCAweDBGLAogCQkgIDB4OEYsIDB4RkYsIDB4MDAsIDB4MEYsIDB4MEYsIDB4OEYpLAotCVBIWVJFR1MoMHhFODA3LCAweEU0MDcsIDB4RTAwNywgMHgwNjAyLCAweDA3MDIsIDB4MDgwMiksCisJUEhZUkVHUygweDA3RTgsIDB4MDdFNCwgMHgwN0UwLCAweDAyMDYsIDB4MDIwNywgMHgwMjA4KSwKICAgfSwKICAgewkuY2hhbm5lbAkJPSAyMTIsCiAJLmZyZXEJCQk9IDUwNjAsIC8qIE1IeiAqLwogCS51bmsyCQkJPSAzMzczLAotCVJBRElPUkVHUygweDcxLCAweDAxLCAweEZBLCAweDBELCAweEU2LCAweDAxLCAweDA0LCAweDBBLAorCVJBRElPUkVHUygweDcxLCAweEZBLCAweDAxLCAweDBELCAweEU2LCAweDAxLCAweDA0LCAweDBBLAogCQkgIDB4MDAsIDB4OEYsIDB4QkIsIDB4QkIsIDB4RkYsIDB4MDAsIDB4MEUsIDB4MEYsCiAJCSAgMHg4RSwgMHhGRiwgMHgwMCwgMHgwRSwgMHgwRiwgMHg4RSksCi0JUEhZUkVHUygweEVDMDcsIDB4RTgwNywgMHhFNDA3LCAweDA1MDIsIDB4MDYwMiwgMHgwNzAyKSwKKwlQSFlSRUdTKDB4MDdFQywgMHgwN0U4LCAweDA3RTQsIDB4MDIwNSwgMHgwMjA2LCAweDAyMDcpLAogICB9LAogICB7CS5jaGFubmVsCQk9IDIxNCwKIAkuZnJlcQkJCT0gNTA3MCwgLyogTUh6ICovCiAJLnVuazIJCQk9IDMzODAsCi0JUkFESU9SRUdTKDB4NzEsIDB4MDEsIDB4RkIsIDB4MEQsIDB4RTYsIDB4MDEsIDB4MDQsIDB4MEEsCisJUkFESU9SRUdTKDB4NzEsIDB4RkIsIDB4MDEsIDB4MEQsIDB4RTYsIDB4MDEsIDB4MDQsIDB4MEEsCiAJCSAgMHgwMCwgMHg4RiwgMHhCQiwgMHhCQiwgMHhGRiwgMHgwMCwgMHgwRSwgMHgwRiwKIAkJICAweDhFLCAweEZGLCAweDAwLCAweDBFLCAweDBGLCAweDhFKSwKLQlQSFlSRUdTKDB4RjAwNywgMHhFQzA3LCAweEU4MDcsIDB4MDQwMiwgMHgwNTAyLCAweDA2MDIpLAorCVBIWVJFR1MoMHgwN0YwLCAweDA3RUMsIDB4MDdFOCwgMHgwMjA0LCAweDAyMDUsIDB4MDIwNiksCiAgIH0sCiAgIHsJLmNoYW5uZWwJCT0gMjE2LAogCS5mcmVxCQkJPSA1MDgwLCAvKiBNSHogKi8KIAkudW5rMgkJCT0gMzM4NywKLQlSQURJT1JFR1MoMHg3MSwgMHgwMSwgMHhGQywgMHgwRCwgMHhERSwgMHgwMSwgMHgwNCwgMHgwQSwKKwlSQURJT1JFR1MoMHg3MSwgMHhGQywgMHgwMSwgMHgwRCwgMHhERSwgMHgwMSwgMHgwNCwgMHgwQSwKIAkJICAweDAwLCAweDhFLCAweEJCLCAweEJCLCAweEVFLCAweDAwLCAweDBFLCAweDBGLAogCQkgIDB4OEQsIDB4RUUsIDB4MDAsIDB4MEUsIDB4MEYsIDB4OEQpLAotCVBIWVJFR1MoMHhGNDA3LCAweEYwMDcsIDB4RUMwNywgMHgwMzAyLCAweDA0MDIsIDB4MDUwMiksCisJUEhZUkVHUygweDA3RjQsIDB4MDdGMCwgMHgwN0VDLCAweDAyMDMsIDB4MDIwNCwgMHgwMjA1KSwKICAgfSwKICAgewkuY2hhbm5lbAkJPSAyMTgsCiAJLmZyZXEJCQk9IDUwOTAsIC8qIE1IeiAqLwogCS51bmsyCQkJPSAzMzkzLAotCVJBRElPUkVHUygweDcxLCAweDAxLCAweEZELCAweDBELCAweERFLCAweDAxLCAweDA0LCAweDBBLAorCVJBRElPUkVHUygweDcxLCAweEZELCAweDAxLCAweDBELCAweERFLCAweDAxLCAweDA0LCAweDBBLAogCQkgIDB4MDAsIDB4OEUsIDB4QkIsIDB4QkIsIDB4RUUsIDB4MDAsIDB4MEUsIDB4MEYsCiAJCSAgMHg4RCwgMHhFRSwgMHgwMCwgMHgwRSwgMHgwRiwgMHg4RCksCi0JUEhZUkVHUygweEY4MDcsIDB4RjQwNywgMHhGMDA3LCAweDAyMDIsIDB4MDMwMiwgMHgwNDAyKSwKKwlQSFlSRUdTKDB4MDdGOCwgMHgwN0Y0LCAweDA3RjAsIDB4MDIwMiwgMHgwMjAzLCAweDAyMDQpLAogICB9LAogICB7CS5jaGFubmVsCQk9IDIyMCwKIAkuZnJlcQkJCT0gNTEwMCwgLyogTUh6ICovCiAJLnVuazIJCQk9IDM0MDAsCi0JUkFESU9SRUdTKDB4NzEsIDB4MDEsIDB4RkUsIDB4MEMsIDB4RDYsIDB4MDEsIDB4MDQsIDB4MEEsCisJUkFESU9SRUdTKDB4NzEsIDB4RkUsIDB4MDEsIDB4MEMsIDB4RDYsIDB4MDEsIDB4MDQsIDB4MEEsCiAJCSAgMHgwMCwgMHg4RSwgMHhBQSwgMHhBQSwgMHhFRSwgMHgwMCwgMHgwRCwgMHgwRiwKIAkJICAweDhELCAweEVFLCAweDAwLCAweDBELCAweDBGLCAweDhEKSwKLQlQSFlSRUdTKDB4RkMwNywgMHhGODA3LCAweEY0MDcsIDB4MDEwMiwgMHgwMjAyLCAweDAzMDIpLAorCVBIWVJFR1MoMHgwN0ZDLCAweDA3RjgsIDB4MDdGNCwgMHgwMjAxLCAweDAyMDIsIDB4MDIwMyksCiAgIH0sCiAgIHsJLmNoYW5uZWwJCT0gMjIyLAogCS5mcmVxCQkJPSA1MTEwLCAvKiBNSHogKi8KIAkudW5rMgkJCT0gMzQwNywKLQlSQURJT1JFR1MoMHg3MSwgMHgwMSwgMHhGRiwgMHgwQywgMHhENiwgMHgwMSwgMHgwNCwgMHgwQSwKKwlSQURJT1JFR1MoMHg3MSwgMHhGRiwgMHgwMSwgMHgwQywgMHhENiwgMHgwMSwgMHgwNCwgMHgwQSwKIAkJICAweDAwLCAweDhFLCAweEFBLCAweEFBLCAweEVFLCAweDAwLCAweDBELCAweDBGLAogCQkgIDB4OEQsIDB4RUUsIDB4MDAsIDB4MEQsIDB4MEYsIDB4OEQpLAotCVBIWVJFR1MoMHgwMDA4LCAweEZDMDcsIDB4RjgwNywgMHgwMDAyLCAweDAxMDIsIDB4MDIwMiksCisJUEhZUkVHUygweDA4MDAsIDB4MDdGQywgMHgwN0Y4LCAweDAyMDAsIDB4MDIwMSwgMHgwMjAyKSwKICAgfSwKICAgewkuY2hhbm5lbAkJPSAyMjQsCiAJLmZyZXEJCQk9IDUxMjAsIC8qIE1IeiAqLwogCS51bmsyCQkJPSAzNDEzLAotCVJBRElPUkVHUygweDcxLCAweDAyLCAweDAwLCAweDBDLCAweENFLCAweDAxLCAweDA0LCAweDBBLAorCVJBRElPUkVHUygweDcxLCAweDAwLCAweDAyLCAweDBDLCAweENFLCAweDAxLCAweDA0LCAweDBBLAogCQkgIDB4MDAsIDB4OEQsIDB4QUEsIDB4QUEsIDB4REQsIDB4MDAsIDB4MEQsIDB4MEYsCiAJCSAgMHg4QywgMHhERCwgMHgwMCwgMHgwRCwgMHgwRiwgMHg4QyksCi0JUEhZUkVHUygweDA0MDgsIDB4MDAwOCwgMHhGQzA3LCAweEZGMDEsIDB4MDAwMiwgMHgwMTAyKSwKKwlQSFlSRUdTKDB4MDgwNCwgMHgwODAwLCAweDA3RkMsIDB4MDFGRiwgMHgwMjAwLCAweDAyMDEpLAogICB9LAogICB7CS5jaGFubmVsCQk9IDIyNiwKIAkuZnJlcQkJCT0gNTEzMCwgLyogTUh6ICovCiAJLnVuazIJCQk9IDM0MjAsCi0JUkFESU9SRUdTKDB4NzEsIDB4MDIsIDB4MDEsIDB4MEMsIDB4Q0UsIDB4MDEsIDB4MDQsIDB4MEEsCisJUkFESU9SRUdTKDB4NzEsIDB4MDEsIDB4MDIsIDB4MEMsIDB4Q0UsIDB4MDEsIDB4MDQsIDB4MEEsCiAJCSAgMHgwMCwgMHg4RCwgMHhBQSwgMHhBQSwgMHhERCwgMHgwMCwgMHgwRCwgMHgwRiwKIAkJICAweDhDLCAweERELCAweDAwLCAweDBELCAweDBGLCAweDhDKSwKLQlQSFlSRUdTKDB4MDgwOCwgMHgwNDA4LCAweDAwMDgsIDB4RkUwMSwgMHhGRjAxLCAweDAwMDIpLAorCVBIWVJFR1MoMHgwODA4LCAweDA4MDQsIDB4MDgwMCwgMHgwMUZFLCAweDAxRkYsIDB4MDIwMCksCiAgIH0sCiAgIHsJLmNoYW5uZWwJCT0gMjI4LAogCS5mcmVxCQkJPSA1MTQwLCAvKiBNSHogKi8KQEAgLTQ4Myw4MTUgKzQ4Myw4MTUgQEAKIAlSQURJT1JFR1MoMHg3MSwgMHgwMiwgMHgwMiwgMHgwQywgMHhDNiwgMHgwMSwgMHgwNCwgMHgwQSwKIAkJICAweDAwLCAweDhELCAweDk5LCAweDk5LCAweERELCAweDAwLCAweDBDLCAweDBFLAogCQkgIDB4OEIsIDB4REQsIDB4MDAsIDB4MEMsIDB4MEUsIDB4OEIpLAotCVBIWVJFR1MoMHgwQzA4LCAweDA4MDgsIDB4MDQwOCwgMHhGRDAxLCAweEZFMDEsIDB4RkYwMSksCisJUEhZUkVHUygweDA4MEMsIDB4MDgwOCwgMHgwODA0LCAweDAxRkQsIDB4MDFGRSwgMHgwMUZGKSwKICAgfSwKICAgewkuY2hhbm5lbAkJPSAzMiwKIAkuZnJlcQkJCT0gNTE2MCwgLyogTUh6ICovCiAJLnVuazIJCQk9IDM0NDAsCi0JUkFESU9SRUdTKDB4NzEsIDB4MDIsIDB4MDQsIDB4MEIsIDB4QkUsIDB4MDEsIDB4MDQsIDB4MEEsCisJUkFESU9SRUdTKDB4NzEsIDB4MDQsIDB4MDIsIDB4MEIsIDB4QkUsIDB4MDEsIDB4MDQsIDB4MEEsCiAJCSAgMHgwMCwgMHg4QywgMHg5OSwgMHg5OSwgMHhDQywgMHgwMCwgMHgwQiwgMHgwRCwKIAkJICAweDhBLCAweENDLCAweDAwLCAweDBCLCAweDBELCAweDhBKSwKLQlQSFlSRUdTKDB4MTQwOCwgMHgxMDA4LCAweDBDMDgsIDB4RkIwMSwgMHhGQzAxLCAweEZEMDEpLAorCVBIWVJFR1MoMHgwODE0LCAweDA4MTAsIDB4MDgwQywgMHgwMUZCLCAweDAxRkMsIDB4MDFGRCksCiAgIH0sCiAgIHsJLmNoYW5uZWwJCT0gMzQsCiAJLmZyZXEJCQk9IDUxNzAsIC8qIE1IeiAqLwogCS51bmsyCQkJPSAzNDQ3LAotCVJBRElPUkVHUygweDcxLCAweDAyLCAweDA1LCAweDBCLCAweEJFLCAweDAxLCAweDA0LCAweDBBLAorCVJBRElPUkVHUygweDcxLCAweDA1LCAweDAyLCAweDBCLCAweEJFLCAweDAxLCAweDA0LCAweDBBLAogCQkgIDB4MDAsIDB4OEMsIDB4OTksIDB4OTksIDB4Q0MsIDB4MDAsIDB4MEIsIDB4MEQsCiAJCSAgMHg4QSwgMHhDQywgMHgwMCwgMHgwQiwgMHgwRCwgMHg4QSksCi0JUEhZUkVHUygweDE4MDgsIDB4MTQwOCwgMHgxMDA4LCAweEZBMDEsIDB4RkIwMSwgMHhGQzAxKSwKKwlQSFlSRUdTKDB4MDgxOCwgMHgwODE0LCAweDA4MTAsIDB4MDFGQSwgMHgwMUZCLCAweDAxRkMpLAogICB9LAogICB7CS5jaGFubmVsCQk9IDM2LAogCS5mcmVxCQkJPSA1MTgwLCAvKiBNSHogKi8KIAkudW5rMgkJCT0gMzQ1MywKLQlSQURJT1JFR1MoMHg3MSwgMHgwMiwgMHgwNiwgMHgwQiwgMHhCNiwgMHgwMSwgMHgwNCwgMHgwQSwKKwlSQURJT1JFR1MoMHg3MSwgMHgwNiwgMHgwMiwgMHgwQiwgMHhCNiwgMHgwMSwgMHgwNCwgMHgwQSwKIAkJICAweDAwLCAweDhDLCAweDg4LCAweDg4LCAweENDLCAweDAwLCAweDBCLCAweDBDLAogCQkgIDB4ODksIDB4Q0MsIDB4MDAsIDB4MEIsIDB4MEMsIDB4ODkpLAotCVBIWVJFR1MoMHgxQzA4LCAweDE4MDgsIDB4MTQwOCwgMHhGOTAxLCAweEZBMDEsIDB4RkIwMSksCisJUEhZUkVHUygweDA4MUMsIDB4MDgxOCwgMHgwODE0LCAweDAxRjksIDB4MDFGQSwgMHgwMUZCKSwKICAgfSwKICAgewkuY2hhbm5lbAkJPSAzOCwKIAkuZnJlcQkJCT0gNTE5MCwgLyogTUh6ICovCiAJLnVuazIJCQk9IDM0NjAsCi0JUkFESU9SRUdTKDB4NzEsIDB4MDIsIDB4MDcsIDB4MEIsIDB4QjYsIDB4MDEsIDB4MDQsIDB4MEEsCisJUkFESU9SRUdTKDB4NzEsIDB4MDcsIDB4MDIsIDB4MEIsIDB4QjYsIDB4MDEsIDB4MDQsIDB4MEEsCiAJCSAgMHgwMCwgMHg4QywgMHg4OCwgMHg4OCwgMHhDQywgMHgwMCwgMHgwQiwgMHgwQywKIAkJICAweDg5LCAweENDLCAweDAwLCAweDBCLCAweDBDLCAweDg5KSwKLQlQSFlSRUdTKDB4MjAwOCwgMHgxQzA4LCAweDE4MDgsIDB4RjgwMSwgMHhGOTAxLCAweEZBMDEpLAorCVBIWVJFR1MoMHgwODIwLCAweDA4MUMsIDB4MDgxOCwgMHgwMUY4LCAweDAxRjksIDB4MDFGQSksCiAgIH0sCiAgIHsJLmNoYW5uZWwJCT0gNDAsCiAJLmZyZXEJCQk9IDUyMDAsIC8qIE1IeiAqLwogCS51bmsyCQkJPSAzNDY3LAotCVJBRElPUkVHUygweDcxLCAweDAyLCAweDA4LCAweDBCLCAweEFGLCAweDAxLCAweDA0LCAweDBBLAorCVJBRElPUkVHUygweDcxLCAweDA4LCAweDAyLCAweDBCLCAweEFGLCAweDAxLCAweDA0LCAweDBBLAogCQkgIDB4MDAsIDB4OEIsIDB4ODgsIDB4ODgsIDB4QkIsIDB4MDAsIDB4MEEsIDB4MEIsCiAJCSAgMHg4OSwgMHhCQiwgMHgwMCwgMHgwQSwgMHgwQiwgMHg4OSksCi0JUEhZUkVHUygweDI0MDgsIDB4MjAwOCwgMHgxQzA4LCAweEY3MDEsIDB4RjgwMSwgMHhGOTAxKSwKKwlQSFlSRUdTKDB4MDgyNCwgMHgwODIwLCAweDA4MUMsIDB4MDFGNywgMHgwMUY4LCAweDAxRjkpLAogICB9LAogICB7CS5jaGFubmVsCQk9IDQyLAogCS5mcmVxCQkJPSA1MjEwLCAvKiBNSHogKi8KIAkudW5rMgkJCT0gMzQ3MywKLQlSQURJT1JFR1MoMHg3MSwgMHgwMiwgMHgwOSwgMHgwQiwgMHhBRiwgMHgwMSwgMHgwNCwgMHgwQSwKKwlSQURJT1JFR1MoMHg3MSwgMHgwOSwgMHgwMiwgMHgwQiwgMHhBRiwgMHgwMSwgMHgwNCwgMHgwQSwKIAkJICAweDAwLCAweDhCLCAweDg4LCAweDg4LCAweEJCLCAweDAwLCAweDBBLCAweDBCLAogCQkgIDB4ODksIDB4QkIsIDB4MDAsIDB4MEEsIDB4MEIsIDB4ODkpLAotCVBIWVJFR1MoMHgyODA4LCAweDI0MDgsIDB4MjAwOCwgMHhGNjAxLCAweEY3MDEsIDB4RjgwMSksCisJUEhZUkVHUygweDA4MjgsIDB4MDgyNCwgMHgwODIwLCAweDAxRjYsIDB4MDFGNywgMHgwMUY4KSwKICAgfSwKICAgewkuY2hhbm5lbAkJPSA0NCwKIAkuZnJlcQkJCT0gNTIyMCwgLyogTUh6ICovCiAJLnVuazIJCQk9IDM0ODAsCi0JUkFESU9SRUdTKDB4NzEsIDB4MDIsIDB4MEEsIDB4MEEsIDB4QTcsIDB4MDEsIDB4MDQsIDB4MEEsCisJUkFESU9SRUdTKDB4NzEsIDB4MEEsIDB4MDIsIDB4MEEsIDB4QTcsIDB4MDEsIDB4MDQsIDB4MEEsCiAJCSAgMHgwMCwgMHg4QiwgMHg3NywgMHg3NywgMHhCQiwgMHgwMCwgMHgwOSwgMHgwQSwKIAkJICAweDg4LCAweEJCLCAweDAwLCAweDA5LCAweDBBLCAweDg4KSwKLQlQSFlSRUdTKDB4MkMwOCwgMHgyODA4LCAweDI0MDgsIDB4RjUwMSwgMHhGNjAxLCAweEY3MDEpLAorCVBIWVJFR1MoMHgwODJDLCAweDA4MjgsIDB4MDgyNCwgMHgwMUY1LCAweDAxRjYsIDB4MDFGNyksCiAgIH0sCiAgIHsJLmNoYW5uZWwJCT0gNDYsCiAJLmZyZXEJCQk9IDUyMzAsIC8qIE1IeiAqLwogCS51bmsyCQkJPSAzNDg3LAotCVJBRElPUkVHUygweDcxLCAweDAyLCAweDBCLCAweDBBLCAweEE3LCAweDAxLCAweDA0LCAweDBBLAorCVJBRElPUkVHUygweDcxLCAweDBCLCAweDAyLCAweDBBLCAweEE3LCAweDAxLCAweDA0LCAweDBBLAogCQkgIDB4MDAsIDB4OEIsIDB4NzcsIDB4NzcsIDB4QkIsIDB4MDAsIDB4MDksIDB4MEEsCiAJCSAgMHg4OCwgMHhCQiwgMHgwMCwgMHgwOSwgMHgwQSwgMHg4OCksCi0JUEhZUkVHUygweDMwMDgsIDB4MkMwOCwgMHgyODA4LCAweEY0MDEsIDB4RjUwMSwgMHhGNjAxKSwKKwlQSFlSRUdTKDB4MDgzMCwgMHgwODJDLCAweDA4MjgsIDB4MDFGNCwgMHgwMUY1LCAweDAxRjYpLAogICB9LAogICB7CS5jaGFubmVsCQk9IDQ4LAogCS5mcmVxCQkJPSA1MjQwLCAvKiBNSHogKi8KIAkudW5rMgkJCT0gMzQ5MywKLQlSQURJT1JFR1MoMHg3MSwgMHgwMiwgMHgwQywgMHgwQSwgMHhBMCwgMHgwMSwgMHgwNCwgMHgwQSwKKwlSQURJT1JFR1MoMHg3MSwgMHgwQywgMHgwMiwgMHgwQSwgMHhBMCwgMHgwMSwgMHgwNCwgMHgwQSwKIAkJICAweDAwLCAweDhBLCAweDc3LCAweDc3LCAweEFBLCAweDAwLCAweDA5LCAweDBBLAogCQkgIDB4ODcsIDB4QUEsIDB4MDAsIDB4MDksIDB4MEEsIDB4ODcpLAotCVBIWVJFR1MoMHgzNDA4LCAweDMwMDgsIDB4MkMwOCwgMHhGMzAxLCAweEY0MDEsIDB4RjUwMSksCisJUEhZUkVHUygweDA4MzQsIDB4MDgzMCwgMHgwODJDLCAweDAxRjMsIDB4MDFGNCwgMHgwMUY1KSwKICAgfSwKICAgewkuY2hhbm5lbAkJPSA1MCwKIAkuZnJlcQkJCT0gNTI1MCwgLyogTUh6ICovCiAJLnVuazIJCQk9IDM1MDAsCi0JUkFESU9SRUdTKDB4NzEsIDB4MDIsIDB4MEQsIDB4MEEsIDB4QTAsIDB4MDEsIDB4MDQsIDB4MEEsCisJUkFESU9SRUdTKDB4NzEsIDB4MEQsIDB4MDIsIDB4MEEsIDB4QTAsIDB4MDEsIDB4MDQsIDB4MEEsCiAJCSAgMHgwMCwgMHg4QSwgMHg3NywgMHg3NywgMHhBQSwgMHgwMCwgMHgwOSwgMHgwQSwKIAkJICAweDg3LCAweEFBLCAweDAwLCAweDA5LCAweDBBLCAweDg3KSwKLQlQSFlSRUdTKDB4MzgwOCwgMHgzNDA4LCAweDMwMDgsIDB4RjIwMSwgMHhGMzAxLCAweEY0MDEpLAorCVBIWVJFR1MoMHgwODM4LCAweDA4MzQsIDB4MDgzMCwgMHgwMUYyLCAweDAxRjMsIDB4MDFGNCksCiAgIH0sCiAgIHsJLmNoYW5uZWwJCT0gNTIsCiAJLmZyZXEJCQk9IDUyNjAsIC8qIE1IeiAqLwogCS51bmsyCQkJPSAzNTA3LAotCVJBRElPUkVHUygweDcxLCAweDAyLCAweDBFLCAweDBBLCAweDk4LCAweDAxLCAweDA0LCAweDBBLAorCVJBRElPUkVHUygweDcxLCAweDBFLCAweDAyLCAweDBBLCAweDk4LCAweDAxLCAweDA0LCAweDBBLAogCQkgIDB4MDAsIDB4OEEsIDB4NjYsIDB4NjYsIDB4QUEsIDB4MDAsIDB4MDgsIDB4MDksCiAJCSAgMHg4NywgMHhBQSwgMHgwMCwgMHgwOCwgMHgwOSwgMHg4NyksCi0JUEhZUkVHUygweDNDMDgsIDB4MzgwOCwgMHgzNDA4LCAweEYxMDEsIDB4RjIwMSwgMHhGMzAxKSwKKwlQSFlSRUdTKDB4MDgzQywgMHgwODM4LCAweDA4MzQsIDB4MDFGMSwgMHgwMUYyLCAweDAxRjMpLAogICB9LAogICB7CS5jaGFubmVsCQk9IDU0LAogCS5mcmVxCQkJPSA1MjcwLCAvKiBNSHogKi8KIAkudW5rMgkJCT0gMzUxMywKLQlSQURJT1JFR1MoMHg3MSwgMHgwMiwgMHgwRiwgMHgwQSwgMHg5OCwgMHgwMSwgMHgwNCwgMHgwQSwKKwlSQURJT1JFR1MoMHg3MSwgMHgwRiwgMHgwMiwgMHgwQSwgMHg5OCwgMHgwMSwgMHgwNCwgMHgwQSwKIAkJICAweDAwLCAweDhBLCAweDY2LCAweDY2LCAweEFBLCAweDAwLCAweDA4LCAweDA5LAogCQkgIDB4ODcsIDB4QUEsIDB4MDAsIDB4MDgsIDB4MDksIDB4ODcpLAotCVBIWVJFR1MoMHg0MDA4LCAweDNDMDgsIDB4MzgwOCwgMHhGMDAxLCAweEYxMDEsIDB4RjIwMSksCisJUEhZUkVHUygweDA4NDAsIDB4MDgzQywgMHgwODM4LCAweDAxRjAsIDB4MDFGMSwgMHgwMUYyKSwKICAgfSwKICAgewkuY2hhbm5lbAkJPSA1NiwKIAkuZnJlcQkJCT0gNTI4MCwgLyogTUh6ICovCiAJLnVuazIJCQk9IDM1MjAsCi0JUkFESU9SRUdTKDB4NzEsIDB4MDIsIDB4MTAsIDB4MDksIDB4OTEsIDB4MDEsIDB4MDQsIDB4MEEsCisJUkFESU9SRUdTKDB4NzEsIDB4MTAsIDB4MDIsIDB4MDksIDB4OTEsIDB4MDEsIDB4MDQsIDB4MEEsCiAJCSAgMHgwMCwgMHg4OSwgMHg2NiwgMHg2NiwgMHg5OSwgMHgwMCwgMHgwOCwgMHgwOCwKIAkJICAweDg2LCAweDk5LCAweDAwLCAweDA4LCAweDA4LCAweDg2KSwKLQlQSFlSRUdTKDB4NDQwOCwgMHg0MDA4LCAweDNDMDgsIDB4RjAwMSwgMHhGMDAxLCAweEYxMDEpLAorCVBIWVJFR1MoMHgwODQ0LCAweDA4NDAsIDB4MDgzQywgMHgwMUYwLCAweDAxRjAsIDB4MDFGMSksCiAgIH0sCiAgIHsJLmNoYW5uZWwJCT0gNTgsCiAJLmZyZXEJCQk9IDUyOTAsIC8qIE1IeiAqLwogCS51bmsyCQkJPSAzNTI3LAotCVJBRElPUkVHUygweDcxLCAweDAyLCAweDExLCAweDA5LCAweDkxLCAweDAxLCAweDA0LCAweDBBLAorCVJBRElPUkVHUygweDcxLCAweDExLCAweDAyLCAweDA5LCAweDkxLCAweDAxLCAweDA0LCAweDBBLAogCQkgIDB4MDAsIDB4ODksIDB4NjYsIDB4NjYsIDB4OTksIDB4MDAsIDB4MDgsIDB4MDgsCiAJCSAgMHg4NiwgMHg5OSwgMHgwMCwgMHgwOCwgMHgwOCwgMHg4NiksCi0JUEhZUkVHUygweDQ4MDgsIDB4NDQwOCwgMHg0MDA4LCAweEVGMDEsIDB4RjAwMSwgMHhGMDAxKSwKKwlQSFlSRUdTKDB4MDg0OCwgMHgwODQ0LCAweDA4NDAsIDB4MDFFRiwgMHgwMUYwLCAweDAxRjApLAogICB9LAogICB7CS5jaGFubmVsCQk9IDYwLAogCS5mcmVxCQkJPSA1MzAwLCAvKiBNSHogKi8KIAkudW5rMgkJCT0gMzUzMywKLQlSQURJT1JFR1MoMHg3MSwgMHgwMiwgMHgxMiwgMHgwOSwgMHg4QSwgMHgwMSwgMHgwNCwgMHgwQSwKKwlSQURJT1JFR1MoMHg3MSwgMHgxMiwgMHgwMiwgMHgwOSwgMHg4QSwgMHgwMSwgMHgwNCwgMHgwQSwKIAkJICAweDAwLCAweDg5LCAweDU1LCAweDU1LCAweDk5LCAweDAwLCAweDA4LCAweDA3LAogCQkgIDB4ODUsIDB4OTksIDB4MDAsIDB4MDgsIDB4MDcsIDB4ODUpLAotCVBIWVJFR1MoMHg0QzA4LCAweDQ4MDgsIDB4NDQwOCwgMHhFRTAxLCAweEVGMDEsIDB4RjAwMSksCisJUEhZUkVHUygweDA4NEMsIDB4MDg0OCwgMHgwODQ0LCAweDAxRUUsIDB4MDFFRiwgMHgwMUYwKSwKICAgfSwKICAgewkuY2hhbm5lbAkJPSA2MiwKIAkuZnJlcQkJCT0gNTMxMCwgLyogTUh6ICovCiAJLnVuazIJCQk9IDM1NDAsCi0JUkFESU9SRUdTKDB4NzEsIDB4MDIsIDB4MTMsIDB4MDksIDB4OEEsIDB4MDEsIDB4MDQsIDB4MEEsCisJUkFESU9SRUdTKDB4NzEsIDB4MTMsIDB4MDIsIDB4MDksIDB4OEEsIDB4MDEsIDB4MDQsIDB4MEEsCiAJCSAgMHgwMCwgMHg4OSwgMHg1NSwgMHg1NSwgMHg5OSwgMHgwMCwgMHgwOCwgMHgwNywKIAkJICAweDg1LCAweDk5LCAweDAwLCAweDA4LCAweDA3LCAweDg1KSwKLQlQSFlSRUdTKDB4NTAwOCwgMHg0QzA4LCAweDQ4MDgsIDB4RUQwMSwgMHhFRTAxLCAweEVGMDEpLAorCVBIWVJFR1MoMHgwODUwLCAweDA4NEMsIDB4MDg0OCwgMHgwMUVELCAweDAxRUUsIDB4MDFFRiksCiAgIH0sCiAgIHsJLmNoYW5uZWwJCT0gNjQsCiAJLmZyZXEJCQk9IDUzMjAsIC8qIE1IeiAqLwogCS51bmsyCQkJPSAzNTQ3LAotCVJBRElPUkVHUygweDcxLCAweDAyLCAweDE0LCAweDA5LCAweDgzLCAweDAxLCAweDA0LCAweDBBLAorCVJBRElPUkVHUygweDcxLCAweDE0LCAweDAyLCAweDA5LCAweDgzLCAweDAxLCAweDA0LCAweDBBLAogCQkgIDB4MDAsIDB4ODgsIDB4NTUsIDB4NTUsIDB4ODgsIDB4MDAsIDB4MDcsIDB4MDcsCiAJCSAgMHg4NCwgMHg4OCwgMHgwMCwgMHgwNywgMHgwNywgMHg4NCksCi0JUEhZUkVHUygweDU0MDgsIDB4NTAwOCwgMHg0QzA4LCAweEVDMDEsIDB4RUQwMSwgMHhFRTAxKSwKKwlQSFlSRUdTKDB4MDg1NCwgMHgwODUwLCAweDA4NEMsIDB4MDFFQywgMHgwMUVELCAweDAxRUUpLAogICB9LAogICB7CS5jaGFubmVsCQk9IDY2LAogCS5mcmVxCQkJPSA1MzMwLCAvKiBNSHogKi8KIAkudW5rMgkJCT0gMzU1MywKLQlSQURJT1JFR1MoMHg3MSwgMHgwMiwgMHgxNSwgMHgwOSwgMHg4MywgMHgwMSwgMHgwNCwgMHgwQSwKKwlSQURJT1JFR1MoMHg3MSwgMHgxNSwgMHgwMiwgMHgwOSwgMHg4MywgMHgwMSwgMHgwNCwgMHgwQSwKIAkJICAweDAwLCAweDg4LCAweDU1LCAweDU1LCAweDg4LCAweDAwLCAweDA3LCAweDA3LAogCQkgIDB4ODQsIDB4ODgsIDB4MDAsIDB4MDcsIDB4MDcsIDB4ODQpLAotCVBIWVJFR1MoMHg1ODA4LCAweDU0MDgsIDB4NTAwOCwgMHhFQjAxLCAweEVDMDEsIDB4RUQwMSksCisJUEhZUkVHUygweDA4NTgsIDB4MDg1NCwgMHgwODUwLCAweDAxRUIsIDB4MDFFQywgMHgwMUVEKSwKICAgfSwKICAgewkuY2hhbm5lbAkJPSA2OCwKIAkuZnJlcQkJCT0gNTM0MCwgLyogTUh6ICovCiAJLnVuazIJCQk9IDM1NjAsCi0JUkFESU9SRUdTKDB4NzEsIDB4MDIsIDB4MTYsIDB4MDgsIDB4N0MsIDB4MDEsIDB4MDQsIDB4MEEsCisJUkFESU9SRUdTKDB4NzEsIDB4MTYsIDB4MDIsIDB4MDgsIDB4N0MsIDB4MDEsIDB4MDQsIDB4MEEsCiAJCSAgMHgwMCwgMHg4OCwgMHg0NCwgMHg0NCwgMHg4OCwgMHgwMCwgMHgwNywgMHgwNiwKIAkJICAweDg0LCAweDg4LCAweDAwLCAweDA3LCAweDA2LCAweDg0KSwKLQlQSFlSRUdTKDB4NUMwOCwgMHg1ODA4LCAweDU0MDgsIDB4RUEwMSwgMHhFQjAxLCAweEVDMDEpLAorCVBIWVJFR1MoMHgwODVDLCAweDA4NTgsIDB4MDg1NCwgMHgwMUVBLCAweDAxRUIsIDB4MDFFQyksCiAgIH0sCiAgIHsJLmNoYW5uZWwJCT0gNzAsCiAJLmZyZXEJCQk9IDUzNTAsIC8qIE1IeiAqLwogCS51bmsyCQkJPSAzNTY3LAotCVJBRElPUkVHUygweDcxLCAweDAyLCAweDE3LCAweDA4LCAweDdDLCAweDAxLCAweDA0LCAweDBBLAorCVJBRElPUkVHUygweDcxLCAweDE3LCAweDAyLCAweDA4LCAweDdDLCAweDAxLCAweDA0LCAweDBBLAogCQkgIDB4MDAsIDB4ODgsIDB4NDQsIDB4NDQsIDB4ODgsIDB4MDAsIDB4MDcsIDB4MDYsCiAJCSAgMHg4NCwgMHg4OCwgMHgwMCwgMHgwNywgMHgwNiwgMHg4NCksCi0JUEhZUkVHUygweDYwMDgsIDB4NUMwOCwgMHg1ODA4LCAweEU5MDEsIDB4RUEwMSwgMHhFQjAxKSwKKwlQSFlSRUdTKDB4MDg2MCwgMHgwODVDLCAweDA4NTgsIDB4MDFFOSwgMHgwMUVBLCAweDAxRUIpLAogICB9LAogICB7CS5jaGFubmVsCQk9IDcyLAogCS5mcmVxCQkJPSA1MzYwLCAvKiBNSHogKi8KIAkudW5rMgkJCT0gMzU3MywKLQlSQURJT1JFR1MoMHg3MSwgMHgwMiwgMHgxOCwgMHgwOCwgMHg3NSwgMHgwMSwgMHgwNCwgMHgwQSwKKwlSQURJT1JFR1MoMHg3MSwgMHgxOCwgMHgwMiwgMHgwOCwgMHg3NSwgMHgwMSwgMHgwNCwgMHgwQSwKIAkJICAweDAwLCAweDg3LCAweDQ0LCAweDQ0LCAweDc3LCAweDAwLCAweDA2LCAweDA1LAogCQkgIDB4ODMsIDB4NzcsIDB4MDAsIDB4MDYsIDB4MDUsIDB4ODMpLAotCVBIWVJFR1MoMHg2NDA4LCAweDYwMDgsIDB4NUMwOCwgMHhFODAxLCAweEU5MDEsIDB4RUEwMSksCisJUEhZUkVHUygweDA4NjQsIDB4MDg2MCwgMHgwODVDLCAweDAxRTgsIDB4MDFFOSwgMHgwMUVBKSwKICAgfSwKICAgewkuY2hhbm5lbAkJPSA3NCwKIAkuZnJlcQkJCT0gNTM3MCwgLyogTUh6ICovCiAJLnVuazIJCQk9IDM1ODAsCi0JUkFESU9SRUdTKDB4NzEsIDB4MDIsIDB4MTksIDB4MDgsIDB4NzUsIDB4MDEsIDB4MDQsIDB4MEEsCisJUkFESU9SRUdTKDB4NzEsIDB4MTksIDB4MDIsIDB4MDgsIDB4NzUsIDB4MDEsIDB4MDQsIDB4MEEsCiAJCSAgMHgwMCwgMHg4NywgMHg0NCwgMHg0NCwgMHg3NywgMHgwMCwgMHgwNiwgMHgwNSwKIAkJICAweDgzLCAweDc3LCAweDAwLCAweDA2LCAweDA1LCAweDgzKSwKLQlQSFlSRUdTKDB4NjgwOCwgMHg2NDA4LCAweDYwMDgsIDB4RTcwMSwgMHhFODAxLCAweEU5MDEpLAorCVBIWVJFR1MoMHgwODY4LCAweDA4NjQsIDB4MDg2MCwgMHgwMUU3LCAweDAxRTgsIDB4MDFFOSksCiAgIH0sCiAgIHsJLmNoYW5uZWwJCT0gNzYsCiAJLmZyZXEJCQk9IDUzODAsIC8qIE1IeiAqLwogCS51bmsyCQkJPSAzNTg3LAotCVJBRElPUkVHUygweDcxLCAweDAyLCAweDFBLCAweDA4LCAweDZFLCAweDAxLCAweDA0LCAweDBBLAorCVJBRElPUkVHUygweDcxLCAweDFBLCAweDAyLCAweDA4LCAweDZFLCAweDAxLCAweDA0LCAweDBBLAogCQkgIDB4MDAsIDB4ODcsIDB4MzMsIDB4MzMsIDB4NzcsIDB4MDAsIDB4MDYsIDB4MDQsCiAJCSAgMHg4MiwgMHg3NywgMHgwMCwgMHgwNiwgMHgwNCwgMHg4MiksCi0JUEhZUkVHUygweDZDMDgsIDB4NjgwOCwgMHg2NDA4LCAweEU2MDEsIDB4RTcwMSwgMHhFODAxKSwKKwlQSFlSRUdTKDB4MDg2QywgMHgwODY4LCAweDA4NjQsIDB4MDFFNiwgMHgwMUU3LCAweDAxRTgpLAogICB9LAogICB7CS5jaGFubmVsCQk9IDc4LAogCS5mcmVxCQkJPSA1MzkwLCAvKiBNSHogKi8KIAkudW5rMgkJCT0gMzU5MywKLQlSQURJT1JFR1MoMHg3MSwgMHgwMiwgMHgxQiwgMHgwOCwgMHg2RSwgMHgwMSwgMHgwNCwgMHgwQSwKKwlSQURJT1JFR1MoMHg3MSwgMHgxQiwgMHgwMiwgMHgwOCwgMHg2RSwgMHgwMSwgMHgwNCwgMHgwQSwKIAkJICAweDAwLCAweDg3LCAweDMzLCAweDMzLCAweDc3LCAweDAwLCAweDA2LCAweDA0LAogCQkgIDB4ODIsIDB4NzcsIDB4MDAsIDB4MDYsIDB4MDQsIDB4ODIpLAotCVBIWVJFR1MoMHg3MDA4LCAweDZDMDgsIDB4NjgwOCwgMHhFNTAxLCAweEU2MDEsIDB4RTcwMSksCisJUEhZUkVHUygweDA4NzAsIDB4MDg2QywgMHgwODY4LCAweDAxRTUsIDB4MDFFNiwgMHgwMUU3KSwKICAgfSwKICAgewkuY2hhbm5lbAkJPSA4MCwKIAkuZnJlcQkJCT0gNTQwMCwgLyogTUh6ICovCiAJLnVuazIJCQk9IDM2MDAsCi0JUkFESU9SRUdTKDB4NzEsIDB4MDIsIDB4MUMsIDB4MDcsIDB4NjcsIDB4MDEsIDB4MDQsIDB4MEEsCisJUkFESU9SRUdTKDB4NzEsIDB4MUMsIDB4MDIsIDB4MDcsIDB4NjcsIDB4MDEsIDB4MDQsIDB4MEEsCiAJCSAgMHgwMCwgMHg4NiwgMHgzMywgMHgzMywgMHg2NiwgMHgwMCwgMHgwNSwgMHgwNCwKIAkJICAweDgxLCAweDY2LCAweDAwLCAweDA1LCAweDA0LCAweDgxKSwKLQlQSFlSRUdTKDB4NzQwOCwgMHg3MDA4LCAweDZDMDgsIDB4RTUwMSwgMHhFNTAxLCAweEU2MDEpLAorCVBIWVJFR1MoMHgwODc0LCAweDA4NzAsIDB4MDg2QywgMHgwMUU1LCAweDAxRTUsIDB4MDFFNiksCiAgIH0sCiAgIHsJLmNoYW5uZWwJCT0gODIsCiAJLmZyZXEJCQk9IDU0MTAsIC8qIE1IeiAqLwogCS51bmsyCQkJPSAzNjA3LAotCVJBRElPUkVHUygweDcxLCAweDAyLCAweDFELCAweDA3LCAweDY3LCAweDAxLCAweDA0LCAweDBBLAorCVJBRElPUkVHUygweDcxLCAweDFELCAweDAyLCAweDA3LCAweDY3LCAweDAxLCAweDA0LCAweDBBLAogCQkgIDB4MDAsIDB4ODYsIDB4MzMsIDB4MzMsIDB4NjYsIDB4MDAsIDB4MDUsIDB4MDQsCiAJCSAgMHg4MSwgMHg2NiwgMHgwMCwgMHgwNSwgMHgwNCwgMHg4MSksCi0JUEhZUkVHUygweDc4MDgsIDB4NzQwOCwgMHg3MDA4LCAweEU0MDEsIDB4RTUwMSwgMHhFNTAxKSwKKwlQSFlSRUdTKDB4MDg3OCwgMHgwODc0LCAweDA4NzAsIDB4MDFFNCwgMHgwMUU1LCAweDAxRTUpLAogICB9LAogICB7CS5jaGFubmVsCQk9IDg0LAogCS5mcmVxCQkJPSA1NDIwLCAvKiBNSHogKi8KIAkudW5rMgkJCT0gMzYxMywKLQlSQURJT1JFR1MoMHg3MSwgMHgwMiwgMHgxRSwgMHgwNywgMHg2MSwgMHgwMSwgMHgwNCwgMHgwQSwKKwlSQURJT1JFR1MoMHg3MSwgMHgxRSwgMHgwMiwgMHgwNywgMHg2MSwgMHgwMSwgMHgwNCwgMHgwQSwKIAkJICAweDAwLCAweDg2LCAweDIyLCAweDIyLCAweDY2LCAweDAwLCAweDA1LCAweDAzLAogCQkgIDB4ODAsIDB4NjYsIDB4MDAsIDB4MDUsIDB4MDMsIDB4ODApLAotCVBIWVJFR1MoMHg3QzA4LCAweDc4MDgsIDB4NzQwOCwgMHhFMzAxLCAweEU0MDEsIDB4RTUwMSksCisJUEhZUkVHUygweDA4N0MsIDB4MDg3OCwgMHgwODc0LCAweDAxRTMsIDB4MDFFNCwgMHgwMUU1KSwKICAgfSwKICAgewkuY2hhbm5lbAkJPSA4NiwKIAkuZnJlcQkJCT0gNTQzMCwgLyogTUh6ICovCiAJLnVuazIJCQk9IDM2MjAsCi0JUkFESU9SRUdTKDB4NzEsIDB4MDIsIDB4MUYsIDB4MDcsIDB4NjEsIDB4MDEsIDB4MDQsIDB4MEEsCisJUkFESU9SRUdTKDB4NzEsIDB4MUYsIDB4MDIsIDB4MDcsIDB4NjEsIDB4MDEsIDB4MDQsIDB4MEEsCiAJCSAgMHgwMCwgMHg4NiwgMHgyMiwgMHgyMiwgMHg2NiwgMHgwMCwgMHgwNSwgMHgwMywKIAkJICAweDgwLCAweDY2LCAweDAwLCAweDA1LCAweDAzLCAweDgwKSwKLQlQSFlSRUdTKDB4ODAwOCwgMHg3QzA4LCAweDc4MDgsIDB4RTIwMSwgMHhFMzAxLCAweEU0MDEpLAorCVBIWVJFR1MoMHgwODgwLCAweDA4N0MsIDB4MDg3OCwgMHgwMUUyLCAweDAxRTMsIDB4MDFFNCksCiAgIH0sCiAgIHsJLmNoYW5uZWwJCT0gODgsCiAJLmZyZXEJCQk9IDU0NDAsIC8qIE1IeiAqLwogCS51bmsyCQkJPSAzNjI3LAotCVJBRElPUkVHUygweDcxLCAweDAyLCAweDIwLCAweDA3LCAweDVBLCAweDAxLCAweDA0LCAweDBBLAorCVJBRElPUkVHUygweDcxLCAweDIwLCAweDAyLCAweDA3LCAweDVBLCAweDAxLCAweDA0LCAweDBBLAogCQkgIDB4MDAsIDB4ODUsIDB4MjIsIDB4MjIsIDB4NTUsIDB4MDAsIDB4MDQsIDB4MDIsCiAJCSAgMHg4MCwgMHg1NSwgMHgwMCwgMHgwNCwgMHgwMiwgMHg4MCksCi0JUEhZUkVHUygweDg0MDgsIDB4ODAwOCwgMHg3QzA4LCAweEUxMDEsIDB4RTIwMSwgMHhFMzAxKSwKKwlQSFlSRUdTKDB4MDg4NCwgMHgwODgwLCAweDA4N0MsIDB4MDFFMSwgMHgwMUUyLCAweDAxRTMpLAogICB9LAogICB7CS5jaGFubmVsCQk9IDkwLAogCS5mcmVxCQkJPSA1NDUwLCAvKiBNSHogKi8KIAkudW5rMgkJCT0gMzYzMywKLQlSQURJT1JFR1MoMHg3MSwgMHgwMiwgMHgyMSwgMHgwNywgMHg1QSwgMHgwMSwgMHgwNCwgMHgwQSwKKwlSQURJT1JFR1MoMHg3MSwgMHgyMSwgMHgwMiwgMHgwNywgMHg1QSwgMHgwMSwgMHgwNCwgMHgwQSwKIAkJICAweDAwLCAweDg1LCAweDIyLCAweDIyLCAweDU1LCAweDAwLCAweDA0LCAweDAyLAogCQkgIDB4ODAsIDB4NTUsIDB4MDAsIDB4MDQsIDB4MDIsIDB4ODApLAotCVBIWVJFR1MoMHg4ODA4LCAweDg0MDgsIDB4ODAwOCwgMHhFMDAxLCAweEUxMDEsIDB4RTIwMSksCisJUEhZUkVHUygweDA4ODgsIDB4MDg4NCwgMHgwODgwLCAweDAxRTAsIDB4MDFFMSwgMHgwMUUyKSwKICAgfSwKICAgewkuY2hhbm5lbAkJPSA5MiwKIAkuZnJlcQkJCT0gNTQ2MCwgLyogTUh6ICovCiAJLnVuazIJCQk9IDM2NDAsCi0JUkFESU9SRUdTKDB4NzEsIDB4MDIsIDB4MjIsIDB4MDYsIDB4NTMsIDB4MDEsIDB4MDQsIDB4MEEsCisJUkFESU9SRUdTKDB4NzEsIDB4MjIsIDB4MDIsIDB4MDYsIDB4NTMsIDB4MDEsIDB4MDQsIDB4MEEsCiAJCSAgMHgwMCwgMHg4NSwgMHgxMSwgMHgxMSwgMHg1NSwgMHgwMCwgMHgwNCwgMHgwMSwKIAkJICAweDgwLCAweDU1LCAweDAwLCAweDA0LCAweDAxLCAweDgwKSwKLQlQSFlSRUdTKDB4OEMwOCwgMHg4ODA4LCAweDg0MDgsIDB4REYwMSwgMHhFMDAxLCAweEUxMDEpLAorCVBIWVJFR1MoMHgwODhDLCAweDA4ODgsIDB4MDg4NCwgMHgwMURGLCAweDAxRTAsIDB4MDFFMSksCiAgIH0sCiAgIHsJLmNoYW5uZWwJCT0gOTQsCiAJLmZyZXEJCQk9IDU0NzAsIC8qIE1IeiAqLwogCS51bmsyCQkJPSAzNjQ3LAotCVJBRElPUkVHUygweDcxLCAweDAyLCAweDIzLCAweDA2LCAweDUzLCAweDAxLCAweDA0LCAweDBBLAorCVJBRElPUkVHUygweDcxLCAweDIzLCAweDAyLCAweDA2LCAweDUzLCAweDAxLCAweDA0LCAweDBBLAogCQkgIDB4MDAsIDB4ODUsIDB4MTEsIDB4MTEsIDB4NTUsIDB4MDAsIDB4MDQsIDB4MDEsCiAJCSAgMHg4MCwgMHg1NSwgMHgwMCwgMHgwNCwgMHgwMSwgMHg4MCksCi0JUEhZUkVHUygweDkwMDgsIDB4OEMwOCwgMHg4ODA4LCAweERFMDEsIDB4REYwMSwgMHhFMDAxKSwKKwlQSFlSRUdTKDB4MDg5MCwgMHgwODhDLCAweDA4ODgsIDB4MDFERSwgMHgwMURGLCAweDAxRTApLAogICB9LAogICB7CS5jaGFubmVsCQk9IDk2LAogCS5mcmVxCQkJPSA1NDgwLCAvKiBNSHogKi8KIAkudW5rMgkJCT0gMzY1MywKLQlSQURJT1JFR1MoMHg3MSwgMHgwMiwgMHgyNCwgMHgwNiwgMHg0RCwgMHgwMSwgMHgwNCwgMHgwQSwKKwlSQURJT1JFR1MoMHg3MSwgMHgyNCwgMHgwMiwgMHgwNiwgMHg0RCwgMHgwMSwgMHgwNCwgMHgwQSwKIAkJICAweDAwLCAweDg0LCAweDExLCAweDExLCAweDQ0LCAweDAwLCAweDAzLCAweDAwLAogCQkgIDB4ODAsIDB4NDQsIDB4MDAsIDB4MDMsIDB4MDAsIDB4ODApLAotCVBIWVJFR1MoMHg5NDA4LCAweDkwMDgsIDB4OEMwOCwgMHhERDAxLCAweERFMDEsIDB4REYwMSksCisJUEhZUkVHUygweDA4OTQsIDB4MDg5MCwgMHgwODhDLCAweDAxREQsIDB4MDFERSwgMHgwMURGKSwKICAgfSwKICAgewkuY2hhbm5lbAkJPSA5OCwKIAkuZnJlcQkJCT0gNTQ5MCwgLyogTUh6ICovCiAJLnVuazIJCQk9IDM2NjAsCi0JUkFESU9SRUdTKDB4NzEsIDB4MDIsIDB4MjUsIDB4MDYsIDB4NEQsIDB4MDEsIDB4MDQsIDB4MEEsCisJUkFESU9SRUdTKDB4NzEsIDB4MjUsIDB4MDIsIDB4MDYsIDB4NEQsIDB4MDEsIDB4MDQsIDB4MEEsCiAJCSAgMHgwMCwgMHg4NCwgMHgxMSwgMHgxMSwgMHg0NCwgMHgwMCwgMHgwMywgMHgwMCwKIAkJICAweDgwLCAweDQ0LCAweDAwLCAweDAzLCAweDAwLCAweDgwKSwKLQlQSFlSRUdTKDB4OTgwOCwgMHg5NDA4LCAweDkwMDgsIDB4REQwMSwgMHhERDAxLCAweERFMDEpLAorCVBIWVJFR1MoMHgwODk4LCAweDA4OTQsIDB4MDg5MCwgMHgwMURELCAweDAxREQsIDB4MDFERSksCiAgIH0sCiAgIHsJLmNoYW5uZWwJCT0gMTAwLAogCS5mcmVxCQkJPSA1NTAwLCAvKiBNSHogKi8KIAkudW5rMgkJCT0gMzY2NywKLQlSQURJT1JFR1MoMHg3MSwgMHgwMiwgMHgyNiwgMHgwNiwgMHg0NywgMHgwMSwgMHgwNCwgMHgwQSwKKwlSQURJT1JFR1MoMHg3MSwgMHgyNiwgMHgwMiwgMHgwNiwgMHg0NywgMHgwMSwgMHgwNCwgMHgwQSwKIAkJICAweDAwLCAweDg0LCAweDAwLCAweDAwLCAweDQ0LCAweDAwLCAweDAzLCAweDAwLAogCQkgIDB4ODAsIDB4NDQsIDB4MDAsIDB4MDMsIDB4MDAsIDB4ODApLAotCVBIWVJFR1MoMHg5QzA4LCAweDk4MDgsIDB4OTQwOCwgMHhEQzAxLCAweEREMDEsIDB4REQwMSksCisJUEhZUkVHUygweDA4OUMsIDB4MDg5OCwgMHgwODk0LCAweDAxREMsIDB4MDFERCwgMHgwMUREKSwKICAgfSwKICAgewkuY2hhbm5lbAkJPSAxMDIsCiAJLmZyZXEJCQk9IDU1MTAsIC8qIE1IeiAqLwogCS51bmsyCQkJPSAzNjczLAotCVJBRElPUkVHUygweDcxLCAweDAyLCAweDI3LCAweDA2LCAweDQ3LCAweDAxLCAweDA0LCAweDBBLAorCVJBRElPUkVHUygweDcxLCAweDI3LCAweDAyLCAweDA2LCAweDQ3LCAweDAxLCAweDA0LCAweDBBLAogCQkgIDB4MDAsIDB4ODQsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MDAsIDB4MDMsIDB4MDAsCiAJCSAgMHg4MCwgMHg0NCwgMHgwMCwgMHgwMywgMHgwMCwgMHg4MCksCi0JUEhZUkVHUygweEEwMDgsIDB4OUMwOCwgMHg5ODA4LCAweERCMDEsIDB4REMwMSwgMHhERDAxKSwKKwlQSFlSRUdTKDB4MDhBMCwgMHgwODlDLCAweDA4OTgsIDB4MDFEQiwgMHgwMURDLCAweDAxREQpLAogICB9LAogICB7CS5jaGFubmVsCQk9IDEwNCwKIAkuZnJlcQkJCT0gNTUyMCwgLyogTUh6ICovCiAJLnVuazIJCQk9IDM2ODAsCi0JUkFESU9SRUdTKDB4NzEsIDB4MDIsIDB4MjgsIDB4MDUsIDB4NDAsIDB4MDEsIDB4MDQsIDB4MEEsCisJUkFESU9SRUdTKDB4NzEsIDB4MjgsIDB4MDIsIDB4MDUsIDB4NDAsIDB4MDEsIDB4MDQsIDB4MEEsCiAJCSAgMHgwMCwgMHg4MywgMHgwMCwgMHgwMCwgMHgzMywgMHgwMCwgMHgwMiwgMHgwMCwKIAkJICAweDgwLCAweDMzLCAweDAwLCAweDAyLCAweDAwLCAweDgwKSwKLQlQSFlSRUdTKDB4QTQwOCwgMHhBMDA4LCAweDlDMDgsIDB4REEwMSwgMHhEQjAxLCAweERDMDEpLAorCVBIWVJFR1MoMHgwOEE0LCAweDA4QTAsIDB4MDg5QywgMHgwMURBLCAweDAxREIsIDB4MDFEQyksCiAgIH0sCiAgIHsJLmNoYW5uZWwJCT0gMTA2LAogCS5mcmVxCQkJPSA1NTMwLCAvKiBNSHogKi8KIAkudW5rMgkJCT0gMzY4NywKLQlSQURJT1JFR1MoMHg3MSwgMHgwMiwgMHgyOSwgMHgwNSwgMHg0MCwgMHgwMSwgMHgwNCwgMHgwQSwKKwlSQURJT1JFR1MoMHg3MSwgMHgyOSwgMHgwMiwgMHgwNSwgMHg0MCwgMHgwMSwgMHgwNCwgMHgwQSwKIAkJICAweDAwLCAweDgzLCAweDAwLCAweDAwLCAweDMzLCAweDAwLCAweDAyLCAweDAwLAogCQkgIDB4ODAsIDB4MzMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4ODApLAotCVBIWVJFR1MoMHhBODA4LCAweEE0MDgsIDB4QTAwOCwgMHhEOTAxLCAweERBMDEsIDB4REIwMSksCisJUEhZUkVHUygweDA4QTgsIDB4MDhBNCwgMHgwOEEwLCAweDAxRDksIDB4MDFEQSwgMHgwMURCKSwKICAgfSwKICAgewkuY2hhbm5lbAkJPSAxMDgsCiAJLmZyZXEJCQk9IDU1NDAsIC8qIE1IeiAqLwogCS51bmsyCQkJPSAzNjkzLAotCVJBRElPUkVHUygweDcxLCAweDAyLCAweDJBLCAweDA1LCAweDNBLCAweDAxLCAweDA0LCAweDBBLAorCVJBRElPUkVHUygweDcxLCAweDJBLCAweDAyLCAweDA1LCAweDNBLCAweDAxLCAweDA0LCAweDBBLAogCQkgIDB4MDAsIDB4ODMsIDB4MDAsIDB4MDAsIDB4MzMsIDB4MDAsIDB4MDIsIDB4MDAsCiAJCSAgMHg4MCwgMHgzMywgMHgwMCwgMHgwMiwgMHgwMCwgMHg4MCksCi0JUEhZUkVHUygweEFDMDgsIDB4QTgwOCwgMHhBNDA4LCAweEQ4MDEsIDB4RDkwMSwgMHhEQTAxKSwKKwlQSFlSRUdTKDB4MDhBQywgMHgwOEE4LCAweDA4QTQsIDB4MDFEOCwgMHgwMUQ5LCAweDAxREEpLAogICB9LAogICB7CS5jaGFubmVsCQk9IDExMCwKIAkuZnJlcQkJCT0gNTU1MCwgLyogTUh6ICovCiAJLnVuazIJCQk9IDM3MDAsCi0JUkFESU9SRUdTKDB4NzEsIDB4MDIsIDB4MkIsIDB4MDUsIDB4M0EsIDB4MDEsIDB4MDQsIDB4MEEsCisJUkFESU9SRUdTKDB4NzEsIDB4MkIsIDB4MDIsIDB4MDUsIDB4M0EsIDB4MDEsIDB4MDQsIDB4MEEsCiAJCSAgMHgwMCwgMHg4MywgMHgwMCwgMHgwMCwgMHgzMywgMHgwMCwgMHgwMiwgMHgwMCwKIAkJICAweDgwLCAweDMzLCAweDAwLCAweDAyLCAweDAwLCAweDgwKSwKLQlQSFlSRUdTKDB4QjAwOCwgMHhBQzA4LCAweEE4MDgsIDB4RDcwMSwgMHhEODAxLCAweEQ5MDEpLAorCVBIWVJFR1MoMHgwOEIwLCAweDA4QUMsIDB4MDhBOCwgMHgwMUQ3LCAweDAxRDgsIDB4MDFEOSksCiAgIH0sCiAgIHsJLmNoYW5uZWwJCT0gMTEyLAogCS5mcmVxCQkJPSA1NTYwLCAvKiBNSHogKi8KIAkudW5rMgkJCT0gMzcwNywKLQlSQURJT1JFR1MoMHg3MSwgMHgwMiwgMHgyQywgMHgwNSwgMHgzNCwgMHgwMSwgMHgwNCwgMHgwQSwKKwlSQURJT1JFR1MoMHg3MSwgMHgyQywgMHgwMiwgMHgwNSwgMHgzNCwgMHgwMSwgMHgwNCwgMHgwQSwKIAkJICAweDAwLCAweDgyLCAweDAwLCAweDAwLCAweDIyLCAweDAwLCAweDAxLCAweDAwLAogCQkgIDB4ODAsIDB4MjIsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODApLAotCVBIWVJFR1MoMHhCNDA4LCAweEIwMDgsIDB4QUMwOCwgMHhENzAxLCAweEQ3MDEsIDB4RDgwMSksCisJUEhZUkVHUygweDA4QjQsIDB4MDhCMCwgMHgwOEFDLCAweDAxRDcsIDB4MDFENywgMHgwMUQ4KSwKICAgfSwKICAgewkuY2hhbm5lbAkJPSAxMTQsCiAJLmZyZXEJCQk9IDU1NzAsIC8qIE1IeiAqLwogCS51bmsyCQkJPSAzNzEzLAotCVJBRElPUkVHUygweDcxLCAweDAyLCAweDJELCAweDA1LCAweDM0LCAweDAxLCAweDA0LCAweDBBLAorCVJBRElPUkVHUygweDcxLCAweDJELCAweDAyLCAweDA1LCAweDM0LCAweDAxLCAweDA0LCAweDBBLAogCQkgIDB4MDAsIDB4ODIsIDB4MDAsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MDEsIDB4MDAsCiAJCSAgMHg4MCwgMHgyMiwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4MCksCi0JUEhZUkVHUygweEI4MDgsIDB4QjQwOCwgMHhCMDA4LCAweEQ2MDEsIDB4RDcwMSwgMHhENzAxKSwKKwlQSFlSRUdTKDB4MDhCOCwgMHgwOEI0LCAweDA4QjAsIDB4MDFENiwgMHgwMUQ3LCAweDAxRDcpLAogICB9LAogICB7CS5jaGFubmVsCQk9IDExNiwKIAkuZnJlcQkJCT0gNTU4MCwgLyogTUh6ICovCiAJLnVuazIJCQk9IDM3MjAsCi0JUkFESU9SRUdTKDB4NzEsIDB4MDIsIDB4MkUsIDB4MDQsIDB4MkUsIDB4MDEsIDB4MDQsIDB4MEEsCisJUkFESU9SRUdTKDB4NzEsIDB4MkUsIDB4MDIsIDB4MDQsIDB4MkUsIDB4MDEsIDB4MDQsIDB4MEEsCiAJCSAgMHgwMCwgMHg4MiwgMHgwMCwgMHgwMCwgMHgyMiwgMHgwMCwgMHgwMSwgMHgwMCwKIAkJICAweDgwLCAweDIyLCAweDAwLCAweDAxLCAweDAwLCAweDgwKSwKLQlQSFlSRUdTKDB4QkMwOCwgMHhCODA4LCAweEI0MDgsIDB4RDUwMSwgMHhENjAxLCAweEQ3MDEpLAorCVBIWVJFR1MoMHgwOEJDLCAweDA4QjgsIDB4MDhCNCwgMHgwMUQ1LCAweDAxRDYsIDB4MDFENyksCiAgIH0sCiAgIHsJLmNoYW5uZWwJCT0gMTE4LAogCS5mcmVxCQkJPSA1NTkwLCAvKiBNSHogKi8KIAkudW5rMgkJCT0gMzcyNywKLQlSQURJT1JFR1MoMHg3MSwgMHgwMiwgMHgyRiwgMHgwNCwgMHgyRSwgMHgwMSwgMHgwNCwgMHgwQSwKKwlSQURJT1JFR1MoMHg3MSwgMHgyRiwgMHgwMiwgMHgwNCwgMHgyRSwgMHgwMSwgMHgwNCwgMHgwQSwKIAkJICAweDAwLCAweDgyLCAweDAwLCAweDAwLCAweDIyLCAweDAwLCAweDAxLCAweDAwLAogCQkgIDB4ODAsIDB4MjIsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODApLAotCVBIWVJFR1MoMHhDMDA4LCAweEJDMDgsIDB4QjgwOCwgMHhENDAxLCAweEQ1MDEsIDB4RDYwMSksCisJUEhZUkVHUygweDA4QzAsIDB4MDhCQywgMHgwOEI4LCAweDAxRDQsIDB4MDFENSwgMHgwMUQ2KSwKICAgfSwKICAgewkuY2hhbm5lbAkJPSAxMjAsCiAJLmZyZXEJCQk9IDU2MDAsIC8qIE1IeiAqLwogCS51bmsyCQkJPSAzNzMzLAotCVJBRElPUkVHUygweDcxLCAweDAyLCAweDMwLCAweDA0LCAweDI4LCAweDAxLCAweDA0LCAweDBBLAorCVJBRElPUkVHUygweDcxLCAweDMwLCAweDAyLCAweDA0LCAweDI4LCAweDAxLCAweDA0LCAweDBBLAogCQkgIDB4MDAsIDB4ODEsIDB4MDAsIDB4MDAsIDB4MTEsIDB4MDAsIDB4MDEsIDB4MDAsCiAJCSAgMHg4MCwgMHgxMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4MCksCi0JUEhZUkVHUygweEM0MDgsIDB4QzAwOCwgMHhCQzA4LCAweEQzMDEsIDB4RDQwMSwgMHhENTAxKSwKKwlQSFlSRUdTKDB4MDhDNCwgMHgwOEMwLCAweDA4QkMsIDB4MDFEMywgMHgwMUQ0LCAweDAxRDUpLAogICB9LAogICB7CS5jaGFubmVsCQk9IDEyMiwKIAkuZnJlcQkJCT0gNTYxMCwgLyogTUh6ICovCiAJLnVuazIJCQk9IDM3NDAsCi0JUkFESU9SRUdTKDB4NzEsIDB4MDIsIDB4MzEsIDB4MDQsIDB4MjgsIDB4MDEsIDB4MDQsIDB4MEEsCisJUkFESU9SRUdTKDB4NzEsIDB4MzEsIDB4MDIsIDB4MDQsIDB4MjgsIDB4MDEsIDB4MDQsIDB4MEEsCiAJCSAgMHgwMCwgMHg4MSwgMHgwMCwgMHgwMCwgMHgxMSwgMHgwMCwgMHgwMSwgMHgwMCwKIAkJICAweDgwLCAweDExLCAweDAwLCAweDAxLCAweDAwLCAweDgwKSwKLQlQSFlSRUdTKDB4QzgwOCwgMHhDNDA4LCAweEMwMDgsIDB4RDIwMSwgMHhEMzAxLCAweEQ0MDEpLAorCVBIWVJFR1MoMHgwOEM4LCAweDA4QzQsIDB4MDhDMCwgMHgwMUQyLCAweDAxRDMsIDB4MDFENCksCiAgIH0sCiAgIHsJLmNoYW5uZWwJCT0gMTI0LAogCS5mcmVxCQkJPSA1NjIwLCAvKiBNSHogKi8KIAkudW5rMgkJCT0gMzc0NywKLQlSQURJT1JFR1MoMHg3MSwgMHgwMiwgMHgzMiwgMHgwNCwgMHgyMSwgMHgwMSwgMHgwNCwgMHgwQSwKKwlSQURJT1JFR1MoMHg3MSwgMHgzMiwgMHgwMiwgMHgwNCwgMHgyMSwgMHgwMSwgMHgwNCwgMHgwQSwKIAkJICAweDAwLCAweDgxLCAweDAwLCAweDAwLCAweDExLCAweDAwLCAweDAwLCAweDAwLAogCQkgIDB4ODAsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODApLAotCVBIWVJFR1MoMHhDQzA4LCAweEM4MDgsIDB4QzQwOCwgMHhEMjAxLCAweEQyMDEsIDB4RDMwMSksCisJUEhZUkVHUygweDA4Q0MsIDB4MDhDOCwgMHgwOEM0LCAweDAxRDIsIDB4MDFEMiwgMHgwMUQzKSwKICAgfSwKICAgewkuY2hhbm5lbAkJPSAxMjYsCiAJLmZyZXEJCQk9IDU2MzAsIC8qIE1IeiAqLwogCS51bmsyCQkJPSAzNzUzLAotCVJBRElPUkVHUygweDcxLCAweDAyLCAweDMzLCAweDA0LCAweDIxLCAweDAxLCAweDA0LCAweDBBLAorCVJBRElPUkVHUygweDcxLCAweDMzLCAweDAyLCAweDA0LCAweDIxLCAweDAxLCAweDA0LCAweDBBLAogCQkgIDB4MDAsIDB4ODEsIDB4MDAsIDB4MDAsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsCiAJCSAgMHg4MCwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCksCi0JUEhZUkVHUygweEQwMDgsIDB4Q0MwOCwgMHhDODA4LCAweEQxMDEsIDB4RDIwMSwgMHhEMjAxKSwKKwlQSFlSRUdTKDB4MDhEMCwgMHgwOENDLCAweDA4QzgsIDB4MDFEMSwgMHgwMUQyLCAweDAxRDIpLAogICB9LAogICB7CS5jaGFubmVsCQk9IDEyOCwKIAkuZnJlcQkJCT0gNTY0MCwgLyogTUh6ICovCiAJLnVuazIJCQk9IDM3NjAsCi0JUkFESU9SRUdTKDB4NzEsIDB4MDIsIDB4MzQsIDB4MDMsIDB4MUMsIDB4MDEsIDB4MDQsIDB4MEEsCisJUkFESU9SRUdTKDB4NzEsIDB4MzQsIDB4MDIsIDB4MDMsIDB4MUMsIDB4MDEsIDB4MDQsIDB4MEEsCiAJCSAgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKIAkJICAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwKSwKLQlQSFlSRUdTKDB4RDQwOCwgMHhEMDA4LCAweENDMDgsIDB4RDAwMSwgMHhEMTAxLCAweEQyMDEpLAorCVBIWVJFR1MoMHgwOEQ0LCAweDA4RDAsIDB4MDhDQywgMHgwMUQwLCAweDAxRDEsIDB4MDFEMiksCiAgIH0sCiAgIHsJLmNoYW5uZWwJCT0gMTMwLAogCS5mcmVxCQkJPSA1NjUwLCAvKiBNSHogKi8KIAkudW5rMgkJCT0gMzc2NywKLQlSQURJT1JFR1MoMHg3MSwgMHgwMiwgMHgzNSwgMHgwMywgMHgxQywgMHgwMSwgMHgwNCwgMHgwQSwKKwlSQURJT1JFR1MoMHg3MSwgMHgzNSwgMHgwMiwgMHgwMywgMHgxQywgMHgwMSwgMHgwNCwgMHgwQSwKIAkJICAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAogCQkgIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODApLAotCVBIWVJFR1MoMHhEODA4LCAweEQ0MDgsIDB4RDAwOCwgMHhDRjAxLCAweEQwMDEsIDB4RDEwMSksCisJUEhZUkVHUygweDA4RDgsIDB4MDhENCwgMHgwOEQwLCAweDAxQ0YsIDB4MDFEMCwgMHgwMUQxKSwKICAgfSwKICAgewkuY2hhbm5lbAkJPSAxMzIsCiAJLmZyZXEJCQk9IDU2NjAsIC8qIE1IeiAqLwogCS51bmsyCQkJPSAzNzczLAotCVJBRElPUkVHUygweDcxLCAweDAyLCAweDM2LCAweDAzLCAweDE2LCAweDAxLCAweDA0LCAweDBBLAorCVJBRElPUkVHUygweDcxLCAweDM2LCAweDAyLCAweDAzLCAweDE2LCAweDAxLCAweDA0LCAweDBBLAogCQkgIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCiAJCSAgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCksCi0JUEhZUkVHUygweERDMDgsIDB4RDgwOCwgMHhENDA4LCAweENFMDEsIDB4Q0YwMSwgMHhEMDAxKSwKKwlQSFlSRUdTKDB4MDhEQywgMHgwOEQ4LCAweDA4RDQsIDB4MDFDRSwgMHgwMUNGLCAweDAxRDApLAogICB9LAogICB7CS5jaGFubmVsCQk9IDEzNCwKIAkuZnJlcQkJCT0gNTY3MCwgLyogTUh6ICovCiAJLnVuazIJCQk9IDM3ODAsCi0JUkFESU9SRUdTKDB4NzEsIDB4MDIsIDB4MzcsIDB4MDMsIDB4MTYsIDB4MDEsIDB4MDQsIDB4MEEsCisJUkFESU9SRUdTKDB4NzEsIDB4MzcsIDB4MDIsIDB4MDMsIDB4MTYsIDB4MDEsIDB4MDQsIDB4MEEsCiAJCSAgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKIAkJICAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwKSwKLQlQSFlSRUdTKDB4RTAwOCwgMHhEQzA4LCAweEQ4MDgsIDB4Q0UwMSwgMHhDRTAxLCAweENGMDEpLAorCVBIWVJFR1MoMHgwOEUwLCAweDA4REMsIDB4MDhEOCwgMHgwMUNFLCAweDAxQ0UsIDB4MDFDRiksCiAgIH0sCiAgIHsJLmNoYW5uZWwJCT0gMTM2LAogCS5mcmVxCQkJPSA1NjgwLCAvKiBNSHogKi8KIAkudW5rMgkJCT0gMzc4NywKLQlSQURJT1JFR1MoMHg3MSwgMHgwMiwgMHgzOCwgMHgwMywgMHgxMCwgMHgwMSwgMHgwNCwgMHgwQSwKKwlSQURJT1JFR1MoMHg3MSwgMHgzOCwgMHgwMiwgMHgwMywgMHgxMCwgMHgwMSwgMHgwNCwgMHgwQSwKIAkJICAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAogCQkgIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODApLAotCVBIWVJFR1MoMHhFNDA4LCAweEUwMDgsIDB4REMwOCwgMHhDRDAxLCAweENFMDEsIDB4Q0UwMSksCisJUEhZUkVHUygweDA4RTQsIDB4MDhFMCwgMHgwOERDLCAweDAxQ0QsIDB4MDFDRSwgMHgwMUNFKSwKICAgfSwKICAgewkuY2hhbm5lbAkJPSAxMzgsCiAJLmZyZXEJCQk9IDU2OTAsIC8qIE1IeiAqLwogCS51bmsyCQkJPSAzNzkzLAotCVJBRElPUkVHUygweDcxLCAweDAyLCAweDM5LCAweDAzLCAweDEwLCAweDAxLCAweDA0LCAweDBBLAorCVJBRElPUkVHUygweDcxLCAweDM5LCAweDAyLCAweDAzLCAweDEwLCAweDAxLCAweDA0LCAweDBBLAogCQkgIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCiAJCSAgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCksCi0JUEhZUkVHUygweEU4MDgsIDB4RTQwOCwgMHhFMDA4LCAweENDMDEsIDB4Q0QwMSwgMHhDRTAxKSwKKwlQSFlSRUdTKDB4MDhFOCwgMHgwOEU0LCAweDA4RTAsIDB4MDFDQywgMHgwMUNELCAweDAxQ0UpLAogICB9LAogICB7CS5jaGFubmVsCQk9IDE0MCwKIAkuZnJlcQkJCT0gNTcwMCwgLyogTUh6ICovCiAJLnVuazIJCQk9IDM4MDAsCi0JUkFESU9SRUdTKDB4NzEsIDB4MDIsIDB4M0EsIDB4MDIsIDB4MEEsIDB4MDEsIDB4MDQsIDB4MEEsCisJUkFESU9SRUdTKDB4NzEsIDB4M0EsIDB4MDIsIDB4MDIsIDB4MEEsIDB4MDEsIDB4MDQsIDB4MEEsCiAJCSAgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKIAkJICAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwKSwKLQlQSFlSRUdTKDB4RUMwOCwgMHhFODA4LCAweEU0MDgsIDB4Q0IwMSwgMHhDQzAxLCAweENEMDEpLAorCVBIWVJFR1MoMHgwOEVDLCAweDA4RTgsIDB4MDhFNCwgMHgwMUNCLCAweDAxQ0MsIDB4MDFDRCksCiAgIH0sCiAgIHsJLmNoYW5uZWwJCT0gMTQyLAogCS5mcmVxCQkJPSA1NzEwLCAvKiBNSHogKi8KIAkudW5rMgkJCT0gMzgwNywKLQlSQURJT1JFR1MoMHg3MSwgMHgwMiwgMHgzQiwgMHgwMiwgMHgwQSwgMHgwMSwgMHgwNCwgMHgwQSwKKwlSQURJT1JFR1MoMHg3MSwgMHgzQiwgMHgwMiwgMHgwMiwgMHgwQSwgMHgwMSwgMHgwNCwgMHgwQSwKIAkJICAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAogCQkgIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODApLAotCVBIWVJFR1MoMHhGMDA4LCAweEVDMDgsIDB4RTgwOCwgMHhDQTAxLCAweENCMDEsIDB4Q0MwMSksCisJUEhZUkVHUygweDA4RjAsIDB4MDhFQywgMHgwOEU4LCAweDAxQ0EsIDB4MDFDQiwgMHgwMUNDKSwKICAgfSwKICAgewkuY2hhbm5lbAkJPSAxNDQsCiAJLmZyZXEJCQk9IDU3MjAsIC8qIE1IeiAqLwogCS51bmsyCQkJPSAzODEzLAotCVJBRElPUkVHUygweDcxLCAweDAyLCAweDNDLCAweDAyLCAweDBBLCAweDAxLCAweDA0LCAweDBBLAorCVJBRElPUkVHUygweDcxLCAweDNDLCAweDAyLCAweDAyLCAweDBBLCAweDAxLCAweDA0LCAweDBBLAogCQkgIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCiAJCSAgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCksCi0JUEhZUkVHUygweEY0MDgsIDB4RjAwOCwgMHhFQzA4LCAweEM5MDEsIDB4Q0EwMSwgMHhDQjAxKSwKKwlQSFlSRUdTKDB4MDhGNCwgMHgwOEYwLCAweDA4RUMsIDB4MDFDOSwgMHgwMUNBLCAweDAxQ0IpLAogICB9LAogICB7CS5jaGFubmVsCQk9IDE0NSwKIAkuZnJlcQkJCT0gNTcyNSwgLyogTUh6ICovCiAJLnVuazIJCQk9IDM4MTcsCi0JUkFESU9SRUdTKDB4NzIsIDB4MDQsIDB4NzksIDB4MDIsIDB4MDMsIDB4MDEsIDB4MDMsIDB4MTQsCisJUkFESU9SRUdTKDB4NzIsIDB4NzksIDB4MDQsIDB4MDIsIDB4MDMsIDB4MDEsIDB4MDMsIDB4MTQsCiAJCSAgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKIAkJICAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwKSwKLQlQSFlSRUdTKDB4RjYwOCwgMHhGMjA4LCAweEVFMDgsIDB4QzkwMSwgMHhDQTAxLCAweENCMDEpLAorCVBIWVJFR1MoMHgwOEY2LCAweDA4RjIsIDB4MDhFRSwgMHgwMUM5LCAweDAxQ0EsIDB4MDFDQiksCiAgIH0sCiAgIHsJLmNoYW5uZWwJCT0gMTQ2LAogCS5mcmVxCQkJPSA1NzMwLCAvKiBNSHogKi8KIAkudW5rMgkJCT0gMzgyMCwKLQlSQURJT1JFR1MoMHg3MSwgMHgwMiwgMHgzRCwgMHgwMiwgMHgwQSwgMHgwMSwgMHgwNCwgMHgwQSwKKwlSQURJT1JFR1MoMHg3MSwgMHgzRCwgMHgwMiwgMHgwMiwgMHgwQSwgMHgwMSwgMHgwNCwgMHgwQSwKIAkJICAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAogCQkgIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODApLAotCVBIWVJFR1MoMHhGODA4LCAweEY0MDgsIDB4RjAwOCwgMHhDOTAxLCAweEM5MDEsIDB4Q0EwMSksCisJUEhZUkVHUygweDA4RjgsIDB4MDhGNCwgMHgwOEYwLCAweDAxQzksIDB4MDFDOSwgMHgwMUNBKSwKICAgfSwKICAgewkuY2hhbm5lbAkJPSAxNDcsCiAJLmZyZXEJCQk9IDU3MzUsIC8qIE1IeiAqLwogCS51bmsyCQkJPSAzODIzLAotCVJBRElPUkVHUygweDcyLCAweDA0LCAweDdCLCAweDAyLCAweDAzLCAweDAxLCAweDAzLCAweDE0LAorCVJBRElPUkVHUygweDcyLCAweDdCLCAweDA0LCAweDAyLCAweDAzLCAweDAxLCAweDAzLCAweDE0LAogCQkgIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCiAJCSAgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCksCi0JUEhZUkVHUygweEZBMDgsIDB4RjYwOCwgMHhGMjA4LCAweEM4MDEsIDB4QzkwMSwgMHhDQTAxKSwKKwlQSFlSRUdTKDB4MDhGQSwgMHgwOEY2LCAweDA4RjIsIDB4MDFDOCwgMHgwMUM5LCAweDAxQ0EpLAogICB9LAogICB7CS5jaGFubmVsCQk9IDE0OCwKIAkuZnJlcQkJCT0gNTc0MCwgLyogTUh6ICovCiAJLnVuazIJCQk9IDM4MjcsCi0JUkFESU9SRUdTKDB4NzEsIDB4MDIsIDB4M0UsIDB4MDIsIDB4MEEsIDB4MDEsIDB4MDQsIDB4MEEsCisJUkFESU9SRUdTKDB4NzEsIDB4M0UsIDB4MDIsIDB4MDIsIDB4MEEsIDB4MDEsIDB4MDQsIDB4MEEsCiAJCSAgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKIAkJICAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwKSwKLQlQSFlSRUdTKDB4RkMwOCwgMHhGODA4LCAweEY0MDgsIDB4QzgwMSwgMHhDOTAxLCAweEM5MDEpLAorCVBIWVJFR1MoMHgwOEZDLCAweDA4RjgsIDB4MDhGNCwgMHgwMUM4LCAweDAxQzksIDB4MDFDOSksCiAgIH0sCiAgIHsJLmNoYW5uZWwJCT0gMTQ5LAogCS5mcmVxCQkJPSA1NzQ1LCAvKiBNSHogKi8KIAkudW5rMgkJCT0gMzgzMCwKLQlSQURJT1JFR1MoMHg3MiwgMHgwNCwgMHg3RCwgMHgwMiwgMHhGRSwgMHgwMCwgMHgwMywgMHgxNCwKKwlSQURJT1JFR1MoMHg3MiwgMHg3RCwgMHgwNCwgMHgwMiwgMHhGRSwgMHgwMCwgMHgwMywgMHgxNCwKIAkJICAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAogCQkgIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODApLAotCVBIWVJFR1MoMHhGRTA4LCAweEZBMDgsIDB4RjYwOCwgMHhDODAxLCAweEM4MDEsIDB4QzkwMSksCisJUEhZUkVHUygweDA4RkUsIDB4MDhGQSwgMHgwOEY2LCAweDAxQzgsIDB4MDFDOCwgMHgwMUM5KSwKICAgfSwKICAgewkuY2hhbm5lbAkJPSAxNTAsCiAJLmZyZXEJCQk9IDU3NTAsIC8qIE1IeiAqLwogCS51bmsyCQkJPSAzODMzLAotCVJBRElPUkVHUygweDcxLCAweDAyLCAweDNGLCAweDAyLCAweDBBLCAweDAxLCAweDA0LCAweDBBLAorCVJBRElPUkVHUygweDcxLCAweDNGLCAweDAyLCAweDAyLCAweDBBLCAweDAxLCAweDA0LCAweDBBLAogCQkgIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCiAJCSAgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCksCi0JUEhZUkVHUygweDAwMDksIDB4RkMwOCwgMHhGODA4LCAweEM3MDEsIDB4QzgwMSwgMHhDOTAxKSwKKwlQSFlSRUdTKDB4MDkwMCwgMHgwOEZDLCAweDA4RjgsIDB4MDFDNywgMHgwMUM4LCAweDAxQzkpLAogICB9LAogICB7CS5jaGFubmVsCQk9IDE1MSwKIAkuZnJlcQkJCT0gNTc1NSwgLyogTUh6ICovCiAJLnVuazIJCQk9IDM4MzcsCi0JUkFESU9SRUdTKDB4NzIsIDB4MDQsIDB4N0YsIDB4MDIsIDB4RkUsIDB4MDAsIDB4MDMsIDB4MTQsCisJUkFESU9SRUdTKDB4NzIsIDB4N0YsIDB4MDQsIDB4MDIsIDB4RkUsIDB4MDAsIDB4MDMsIDB4MTQsCiAJCSAgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKIAkJICAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwKSwKLQlQSFlSRUdTKDB4MDIwOSwgMHhGRTA4LCAweEZBMDgsIDB4QzcwMSwgMHhDODAxLCAweEM4MDEpLAorCVBIWVJFR1MoMHgwOTAyLCAweDA4RkUsIDB4MDhGQSwgMHgwMUM3LCAweDAxQzgsIDB4MDFDOCksCiAgIH0sCiAgIHsJLmNoYW5uZWwJCT0gMTUyLAogCS5mcmVxCQkJPSA1NzYwLCAvKiBNSHogKi8KIAkudW5rMgkJCT0gMzg0MCwKLQlSQURJT1JFR1MoMHg3MSwgMHgwMiwgMHg0MCwgMHgwMiwgMHgwQSwgMHgwMSwgMHgwNCwgMHgwQSwKKwlSQURJT1JFR1MoMHg3MSwgMHg0MCwgMHgwMiwgMHgwMiwgMHgwQSwgMHgwMSwgMHgwNCwgMHgwQSwKIAkJICAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAogCQkgIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODApLAotCVBIWVJFR1MoMHgwNDA5LCAweDAwMDksIDB4RkMwOCwgMHhDNjAxLCAweEM3MDEsIDB4QzgwMSksCisJUEhZUkVHUygweDA5MDQsIDB4MDkwMCwgMHgwOEZDLCAweDAxQzYsIDB4MDFDNywgMHgwMUM4KSwKICAgfSwKICAgewkuY2hhbm5lbAkJPSAxNTMsCiAJLmZyZXEJCQk9IDU3NjUsIC8qIE1IeiAqLwogCS51bmsyCQkJPSAzODQzLAotCVJBRElPUkVHUygweDcyLCAweDA0LCAweDgxLCAweDAyLCAweEY4LCAweDAwLCAweDAzLCAweDE0LAorCVJBRElPUkVHUygweDcyLCAweDgxLCAweDA0LCAweDAyLCAweEY4LCAweDAwLCAweDAzLCAweDE0LAogCQkgIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCiAJCSAgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCksCi0JUEhZUkVHUygweDA2MDksIDB4MDIwOSwgMHhGRTA4LCAweEM2MDEsIDB4QzcwMSwgMHhDODAxKSwKKwlQSFlSRUdTKDB4MDkwNiwgMHgwOTAyLCAweDA4RkUsIDB4MDFDNiwgMHgwMUM3LCAweDAxQzgpLAogICB9LAogICB7CS5jaGFubmVsCQk9IDE1NCwKIAkuZnJlcQkJCT0gNTc3MCwgLyogTUh6ICovCiAJLnVuazIJCQk9IDM4NDcsCi0JUkFESU9SRUdTKDB4NzEsIDB4MDIsIDB4NDEsIDB4MDIsIDB4MEEsIDB4MDEsIDB4MDQsIDB4MEEsCisJUkFESU9SRUdTKDB4NzEsIDB4NDEsIDB4MDIsIDB4MDIsIDB4MEEsIDB4MDEsIDB4MDQsIDB4MEEsCiAJCSAgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKIAkJICAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwKSwKLQlQSFlSRUdTKDB4MDgwOSwgMHgwNDA5LCAweDAwMDksIDB4QzYwMSwgMHhDNjAxLCAweEM3MDEpLAorCVBIWVJFR1MoMHgwOTA4LCAweDA5MDQsIDB4MDkwMCwgMHgwMUM2LCAweDAxQzYsIDB4MDFDNyksCiAgIH0sCiAgIHsJLmNoYW5uZWwJCT0gMTU1LAogCS5mcmVxCQkJPSA1Nzc1LCAvKiBNSHogKi8KIAkudW5rMgkJCT0gMzg1MCwKLQlSQURJT1JFR1MoMHg3MiwgMHgwNCwgMHg4MywgMHgwMiwgMHhGOCwgMHgwMCwgMHgwMywgMHgxNCwKKwlSQURJT1JFR1MoMHg3MiwgMHg4MywgMHgwNCwgMHgwMiwgMHhGOCwgMHgwMCwgMHgwMywgMHgxNCwKIAkJICAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAogCQkgIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODApLAotCVBIWVJFR1MoMHgwQTA5LCAweDA2MDksIDB4MDIwOSwgMHhDNTAxLCAweEM2MDEsIDB4QzcwMSksCisJUEhZUkVHUygweDA5MEEsIDB4MDkwNiwgMHgwOTAyLCAweDAxQzUsIDB4MDFDNiwgMHgwMUM3KSwKICAgfSwKICAgewkuY2hhbm5lbAkJPSAxNTYsCiAJLmZyZXEJCQk9IDU3ODAsIC8qIE1IeiAqLwogCS51bmsyCQkJPSAzODUzLAotCVJBRElPUkVHUygweDcxLCAweDAyLCAweDQyLCAweDAyLCAweDBBLCAweDAxLCAweDA0LCAweDBBLAorCVJBRElPUkVHUygweDcxLCAweDQyLCAweDAyLCAweDAyLCAweDBBLCAweDAxLCAweDA0LCAweDBBLAogCQkgIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCiAJCSAgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCksCi0JUEhZUkVHUygweDBDMDksIDB4MDgwOSwgMHgwNDA5LCAweEM1MDEsIDB4QzYwMSwgMHhDNjAxKSwKKwlQSFlSRUdTKDB4MDkwQywgMHgwOTA4LCAweDA5MDQsIDB4MDFDNSwgMHgwMUM2LCAweDAxQzYpLAogICB9LAogICB7CS5jaGFubmVsCQk9IDE1NywKIAkuZnJlcQkJCT0gNTc4NSwgLyogTUh6ICovCiAJLnVuazIJCQk9IDM4NTcsCi0JUkFESU9SRUdTKDB4NzIsIDB4MDQsIDB4ODUsIDB4MDIsIDB4RjIsIDB4MDAsIDB4MDMsIDB4MTQsCisJUkFESU9SRUdTKDB4NzIsIDB4ODUsIDB4MDQsIDB4MDIsIDB4RjIsIDB4MDAsIDB4MDMsIDB4MTQsCiAJCSAgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKIAkJICAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwKSwKLQlQSFlSRUdTKDB4MEUwOSwgMHgwQTA5LCAweDA2MDksIDB4QzQwMSwgMHhDNTAxLCAweEM2MDEpLAorCVBIWVJFR1MoMHgwOTBFLCAweDA5MEEsIDB4MDkwNiwgMHgwMUM0LCAweDAxQzUsIDB4MDFDNiksCiAgIH0sCiAgIHsJLmNoYW5uZWwJCT0gMTU4LAogCS5mcmVxCQkJPSA1NzkwLCAvKiBNSHogKi8KIAkudW5rMgkJCT0gMzg2MCwKLQlSQURJT1JFR1MoMHg3MSwgMHgwMiwgMHg0MywgMHgwMiwgMHgwQSwgMHgwMSwgMHgwNCwgMHgwQSwKKwlSQURJT1JFR1MoMHg3MSwgMHg0MywgMHgwMiwgMHgwMiwgMHgwQSwgMHgwMSwgMHgwNCwgMHgwQSwKIAkJICAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAogCQkgIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODApLAotCVBIWVJFR1MoMHgxMDA5LCAweDBDMDksIDB4MDgwOSwgMHhDNDAxLCAweEM1MDEsIDB4QzYwMSksCisJUEhZUkVHUygweDA5MTAsIDB4MDkwQywgMHgwOTA4LCAweDAxQzQsIDB4MDFDNSwgMHgwMUM2KSwKICAgfSwKICAgewkuY2hhbm5lbAkJPSAxNTksCiAJLmZyZXEJCQk9IDU3OTUsIC8qIE1IeiAqLwogCS51bmsyCQkJPSAzODYzLAotCVJBRElPUkVHUygweDcyLCAweDA0LCAweDg3LCAweDAyLCAweEYyLCAweDAwLCAweDAzLCAweDE0LAorCVJBRElPUkVHUygweDcyLCAweDg3LCAweDA0LCAweDAyLCAweEYyLCAweDAwLCAweDAzLCAweDE0LAogCQkgIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCiAJCSAgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCksCi0JUEhZUkVHUygweDEyMDksIDB4MEUwOSwgMHgwQTA5LCAweEM0MDEsIDB4QzQwMSwgMHhDNTAxKSwKKwlQSFlSRUdTKDB4MDkxMiwgMHgwOTBFLCAweDA5MEEsIDB4MDFDNCwgMHgwMUM0LCAweDAxQzUpLAogICB9LAogICB7CS5jaGFubmVsCQk9IDE2MCwKIAkuZnJlcQkJCT0gNTgwMCwgLyogTUh6ICovCiAJLnVuazIJCQk9IDM4NjcsCi0JUkFESU9SRUdTKDB4NzEsIDB4MDIsIDB4NDQsIDB4MDEsIDB4MEEsIDB4MDEsIDB4MDQsIDB4MEEsCisJUkFESU9SRUdTKDB4NzEsIDB4NDQsIDB4MDIsIDB4MDEsIDB4MEEsIDB4MDEsIDB4MDQsIDB4MEEsCiAJCSAgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKIAkJICAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwKSwKLQlQSFlSRUdTKDB4MTQwOSwgMHgxMDA5LCAweDBDMDksIDB4QzMwMSwgMHhDNDAxLCAweEM1MDEpLAorCVBIWVJFR1MoMHgwOTE0LCAweDA5MTAsIDB4MDkwQywgMHgwMUMzLCAweDAxQzQsIDB4MDFDNSksCiAgIH0sCiAgIHsJLmNoYW5uZWwJCT0gMTYxLAogCS5mcmVxCQkJPSA1ODA1LCAvKiBNSHogKi8KIAkudW5rMgkJCT0gMzg3MCwKLQlSQURJT1JFR1MoMHg3MiwgMHgwNCwgMHg4OSwgMHgwMSwgMHhFRCwgMHgwMCwgMHgwMywgMHgxNCwKKwlSQURJT1JFR1MoMHg3MiwgMHg4OSwgMHgwNCwgMHgwMSwgMHhFRCwgMHgwMCwgMHgwMywgMHgxNCwKIAkJICAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAogCQkgIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODApLAotCVBIWVJFR1MoMHgxNjA5LCAweDEyMDksIDB4MEUwOSwgMHhDMzAxLCAweEM0MDEsIDB4QzQwMSksCisJUEhZUkVHUygweDA5MTYsIDB4MDkxMiwgMHgwOTBFLCAweDAxQzMsIDB4MDFDNCwgMHgwMUM0KSwKICAgfSwKICAgewkuY2hhbm5lbAkJPSAxNjIsCiAJLmZyZXEJCQk9IDU4MTAsIC8qIE1IeiAqLwogCS51bmsyCQkJPSAzODczLAotCVJBRElPUkVHUygweDcxLCAweDAyLCAweDQ1LCAweDAxLCAweDBBLCAweDAxLCAweDA0LCAweDBBLAorCVJBRElPUkVHUygweDcxLCAweDQ1LCAweDAyLCAweDAxLCAweDBBLCAweDAxLCAweDA0LCAweDBBLAogCQkgIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCiAJCSAgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCksCi0JUEhZUkVHUygweDE4MDksIDB4MTQwOSwgMHgxMDA5LCAweEMyMDEsIDB4QzMwMSwgMHhDNDAxKSwKKwlQSFlSRUdTKDB4MDkxOCwgMHgwOTE0LCAweDA5MTAsIDB4MDFDMiwgMHgwMUMzLCAweDAxQzQpLAogICB9LAogICB7CS5jaGFubmVsCQk9IDE2MywKIAkuZnJlcQkJCT0gNTgxNSwgLyogTUh6ICovCiAJLnVuazIJCQk9IDM4NzcsCi0JUkFESU9SRUdTKDB4NzIsIDB4MDQsIDB4OEIsIDB4MDEsIDB4RUQsIDB4MDAsIDB4MDMsIDB4MTQsCisJUkFESU9SRUdTKDB4NzIsIDB4OEIsIDB4MDQsIDB4MDEsIDB4RUQsIDB4MDAsIDB4MDMsIDB4MTQsCiAJCSAgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKIAkJICAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwKSwKLQlQSFlSRUdTKDB4MUEwOSwgMHgxNjA5LCAweDEyMDksIDB4QzIwMSwgMHhDMzAxLCAweEM0MDEpLAorCVBIWVJFR1MoMHgwOTFBLCAweDA5MTYsIDB4MDkxMiwgMHgwMUMyLCAweDAxQzMsIDB4MDFDNCksCiAgIH0sCiAgIHsJLmNoYW5uZWwJCT0gMTY0LAogCS5mcmVxCQkJPSA1ODIwLCAvKiBNSHogKi8KIAkudW5rMgkJCT0gMzg4MCwKLQlSQURJT1JFR1MoMHg3MSwgMHgwMiwgMHg0NiwgMHgwMSwgMHgwQSwgMHgwMSwgMHgwNCwgMHgwQSwKKwlSQURJT1JFR1MoMHg3MSwgMHg0NiwgMHgwMiwgMHgwMSwgMHgwQSwgMHgwMSwgMHgwNCwgMHgwQSwKIAkJICAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAogCQkgIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODApLAotCVBIWVJFR1MoMHgxQzA5LCAweDE4MDksIDB4MTQwOSwgMHhDMjAxLCAweEMyMDEsIDB4QzMwMSksCisJUEhZUkVHUygweDA5MUMsIDB4MDkxOCwgMHgwOTE0LCAweDAxQzIsIDB4MDFDMiwgMHgwMUMzKSwKICAgfSwKICAgewkuY2hhbm5lbAkJPSAxNjUsCiAJLmZyZXEJCQk9IDU4MjUsIC8qIE1IeiAqLwogCS51bmsyCQkJPSAzODgzLAotCVJBRElPUkVHUygweDcyLCAweDA0LCAweDhELCAweDAxLCAweEVELCAweDAwLCAweDAzLCAweDE0LAorCVJBRElPUkVHUygweDcyLCAweDhELCAweDA0LCAweDAxLCAweEVELCAweDAwLCAweDAzLCAweDE0LAogCQkgIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCiAJCSAgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCksCi0JUEhZUkVHUygweDFFMDksIDB4MUEwOSwgMHgxNjA5LCAweEMxMDEsIDB4QzIwMSwgMHhDMzAxKSwKKwlQSFlSRUdTKDB4MDkxRSwgMHgwOTFBLCAweDA5MTYsIDB4MDFDMSwgMHgwMUMyLCAweDAxQzMpLAogICB9LAogICB7CS5jaGFubmVsCQk9IDE2NiwKIAkuZnJlcQkJCT0gNTgzMCwgLyogTUh6ICovCiAJLnVuazIJCQk9IDM4ODcsCi0JUkFESU9SRUdTKDB4NzEsIDB4MDIsIDB4NDcsIDB4MDEsIDB4MEEsIDB4MDEsIDB4MDQsIDB4MEEsCisJUkFESU9SRUdTKDB4NzEsIDB4NDcsIDB4MDIsIDB4MDEsIDB4MEEsIDB4MDEsIDB4MDQsIDB4MEEsCiAJCSAgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKIAkJICAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwKSwKLQlQSFlSRUdTKDB4MjAwOSwgMHgxQzA5LCAweDE4MDksIDB4QzEwMSwgMHhDMjAxLCAweEMyMDEpLAorCVBIWVJFR1MoMHgwOTIwLCAweDA5MUMsIDB4MDkxOCwgMHgwMUMxLCAweDAxQzIsIDB4MDFDMiksCiAgIH0sCiAgIHsJLmNoYW5uZWwJCT0gMTY4LAogCS5mcmVxCQkJPSA1ODQwLCAvKiBNSHogKi8KIAkudW5rMgkJCT0gMzg5MywKLQlSQURJT1JFR1MoMHg3MSwgMHgwMiwgMHg0OCwgMHgwMSwgMHgwQSwgMHgwMSwgMHgwNCwgMHgwQSwKKwlSQURJT1JFR1MoMHg3MSwgMHg0OCwgMHgwMiwgMHgwMSwgMHgwQSwgMHgwMSwgMHgwNCwgMHgwQSwKIAkJICAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAogCQkgIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODApLAotCVBIWVJFR1MoMHgyNDA5LCAweDIwMDksIDB4MUMwOSwgMHhDMDAxLCAweEMxMDEsIDB4QzIwMSksCisJUEhZUkVHUygweDA5MjQsIDB4MDkyMCwgMHgwOTFDLCAweDAxQzAsIDB4MDFDMSwgMHgwMUMyKSwKICAgfSwKICAgewkuY2hhbm5lbAkJPSAxNzAsCiAJLmZyZXEJCQk9IDU4NTAsIC8qIE1IeiAqLwogCS51bmsyCQkJPSAzOTAwLAotCVJBRElPUkVHUygweDcxLCAweDAyLCAweDQ5LCAweDAxLCAweEUwLCAweDAwLCAweDA0LCAweDBBLAorCVJBRElPUkVHUygweDcxLCAweDQ5LCAweDAyLCAweDAxLCAweEUwLCAweDAwLCAweDA0LCAweDBBLAogCQkgIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCiAJCSAgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCksCi0JUEhZUkVHUygweDI4MDksIDB4MjQwOSwgMHgyMDA5LCAweEJGMDEsIDB4QzAwMSwgMHhDMTAxKSwKKwlQSFlSRUdTKDB4MDkyOCwgMHgwOTI0LCAweDA5MjAsIDB4MDFCRiwgMHgwMUMwLCAweDAxQzEpLAogICB9LAogICB7CS5jaGFubmVsCQk9IDE3MiwKIAkuZnJlcQkJCT0gNTg2MCwgLyogTUh6ICovCiAJLnVuazIJCQk9IDM5MDcsCi0JUkFESU9SRUdTKDB4NzEsIDB4MDIsIDB4NEEsIDB4MDEsIDB4REUsIDB4MDAsIDB4MDQsIDB4MEEsCisJUkFESU9SRUdTKDB4NzEsIDB4NEEsIDB4MDIsIDB4MDEsIDB4REUsIDB4MDAsIDB4MDQsIDB4MEEsCiAJCSAgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKIAkJICAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwKSwKLQlQSFlSRUdTKDB4MkMwOSwgMHgyODA5LCAweDI0MDksIDB4QkYwMSwgMHhCRjAxLCAweEMwMDEpLAorCVBIWVJFR1MoMHgwOTJDLCAweDA5MjgsIDB4MDkyNCwgMHgwMUJGLCAweDAxQkYsIDB4MDFDMCksCiAgIH0sCiAgIHsJLmNoYW5uZWwJCT0gMTc0LAogCS5mcmVxCQkJPSA1ODcwLCAvKiBNSHogKi8KIAkudW5rMgkJCT0gMzkxMywKLQlSQURJT1JFR1MoMHg3MSwgMHgwMiwgMHg0QiwgMHgwMCwgMHhEQiwgMHgwMCwgMHgwNCwgMHgwQSwKKwlSQURJT1JFR1MoMHg3MSwgMHg0QiwgMHgwMiwgMHgwMCwgMHhEQiwgMHgwMCwgMHgwNCwgMHgwQSwKIAkJICAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAogCQkgIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODApLAotCVBIWVJFR1MoMHgzMDA5LCAweDJDMDksIDB4MjgwOSwgMHhCRTAxLCAweEJGMDEsIDB4QkYwMSksCisJUEhZUkVHUygweDA5MzAsIDB4MDkyQywgMHgwOTI4LCAweDAxQkUsIDB4MDFCRiwgMHgwMUJGKSwKICAgfSwKICAgewkuY2hhbm5lbAkJPSAxNzYsCiAJLmZyZXEJCQk9IDU4ODAsIC8qIE1IeiAqLwogCS51bmsyCQkJPSAzOTIwLAotCVJBRElPUkVHUygweDcxLCAweDAyLCAweDRDLCAweDAwLCAweEQ4LCAweDAwLCAweDA0LCAweDBBLAorCVJBRElPUkVHUygweDcxLCAweDRDLCAweDAyLCAweDAwLCAweEQ4LCAweDAwLCAweDA0LCAweDBBLAogCQkgIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCiAJCSAgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCksCi0JUEhZUkVHUygweDM0MDksIDB4MzAwOSwgMHgyQzA5LCAweEJEMDEsIDB4QkUwMSwgMHhCRjAxKSwKKwlQSFlSRUdTKDB4MDkzNCwgMHgwOTMwLCAweDA5MkMsIDB4MDFCRCwgMHgwMUJFLCAweDAxQkYpLAogICB9LAogICB7CS5jaGFubmVsCQk9IDE3OCwKIAkuZnJlcQkJCT0gNTg5MCwgLyogTUh6ICovCiAJLnVuazIJCQk9IDM5MjcsCi0JUkFESU9SRUdTKDB4NzEsIDB4MDIsIDB4NEQsIDB4MDAsIDB4RDYsIDB4MDAsIDB4MDQsIDB4MEEsCisJUkFESU9SRUdTKDB4NzEsIDB4NEQsIDB4MDIsIDB4MDAsIDB4RDYsIDB4MDAsIDB4MDQsIDB4MEEsCiAJCSAgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKIAkJICAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwKSwKLQlQSFlSRUdTKDB4MzgwOSwgMHgzNDA5LCAweDMwMDksIDB4QkMwMSwgMHhCRDAxLCAweEJFMDEpLAorCVBIWVJFR1MoMHgwOTM4LCAweDA5MzQsIDB4MDkzMCwgMHgwMUJDLCAweDAxQkQsIDB4MDFCRSksCiAgIH0sCiAgIHsJLmNoYW5uZWwJCT0gMTgwLAogCS5mcmVxCQkJPSA1OTAwLCAvKiBNSHogKi8KIAkudW5rMgkJCT0gMzkzMywKLQlSQURJT1JFR1MoMHg3MSwgMHgwMiwgMHg0RSwgMHgwMCwgMHhEMywgMHgwMCwgMHgwNCwgMHgwQSwKKwlSQURJT1JFR1MoMHg3MSwgMHg0RSwgMHgwMiwgMHgwMCwgMHhEMywgMHgwMCwgMHgwNCwgMHgwQSwKIAkJICAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAogCQkgIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODApLAotCVBIWVJFR1MoMHgzQzA5LCAweDM4MDksIDB4MzQwOSwgMHhCQzAxLCAweEJDMDEsIDB4QkQwMSksCisJUEhZUkVHUygweDA5M0MsIDB4MDkzOCwgMHgwOTM0LCAweDAxQkMsIDB4MDFCQywgMHgwMUJEKSwKICAgfSwKICAgewkuY2hhbm5lbAkJPSAxODIsCiAJLmZyZXEJCQk9IDU5MTAsIC8qIE1IeiAqLwogCS51bmsyCQkJPSAzOTQwLAotCVJBRElPUkVHUygweDcxLCAweDAyLCAweDRGLCAweDAwLCAweEQ2LCAweDAwLCAweDA0LCAweDBBLAorCVJBRElPUkVHUygweDcxLCAweDRGLCAweDAyLCAweDAwLCAweEQ2LCAweDAwLCAweDA0LCAweDBBLAogCQkgIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCiAJCSAgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCksCi0JUEhZUkVHUygweDQwMDksIDB4M0MwOSwgMHgzODA5LCAweEJCMDEsIDB4QkMwMSwgMHhCQzAxKSwKKwlQSFlSRUdTKDB4MDk0MCwgMHgwOTNDLCAweDA5MzgsIDB4MDFCQiwgMHgwMUJDLCAweDAxQkMpLAogICB9LAogICB7CS5jaGFubmVsCQk9IDEsCiAJLmZyZXEJCQk9IDI0MTIsIC8qIE1IeiAqLwogCS51bmsyCQkJPSAzMjE2LAotCVJBRElPUkVHUygweDczLCAweDA5LCAweDZDLCAweDBGLCAweDAwLCAweDAxLCAweDA3LCAweDE1LAorCVJBRElPUkVHUygweDczLCAweDZDLCAweDA5LCAweDBGLCAweDAwLCAweDAxLCAweDA3LCAweDE1LAogCQkgIDB4MDEsIDB4OEYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4ODgsIDB4MEQsIDB4MEMsCiAJCSAgMHg4MCwgMHhGRiwgMHg4OCwgMHgwRCwgMHgwQywgMHg4MCksCi0JUEhZUkVHUygweEM5MDMsIDB4QzUwMywgMHhDMTAzLCAweDNBMDQsIDB4M0YwNCwgMHg0MzA0KSwKKwlQSFlSRUdTKDB4MDNDOSwgMHgwM0M1LCAweDAzQzEsIDB4MDQzQSwgMHgwNDNGLCAweDA0NDMpLAogICB9LAogICB7CS5jaGFubmVsCQk9IDIsCiAJLmZyZXEJCQk9IDI0MTcsIC8qIE1IeiAqLwogCS51bmsyCQkJPSAzMjIzLAotCVJBRElPUkVHUygweDczLCAweDA5LCAweDcxLCAweDBGLCAweDAwLCAweDAxLCAweDA3LCAweDE1LAorCVJBRElPUkVHUygweDczLCAweDcxLCAweDA5LCAweDBGLCAweDAwLCAweDAxLCAweDA3LCAweDE1LAogCQkgIDB4MDEsIDB4OEYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4ODgsIDB4MEMsIDB4MEIsCiAJCSAgMHg4MCwgMHhGRiwgMHg4OCwgMHgwQywgMHgwQiwgMHg4MCksCi0JUEhZUkVHUygweENCMDMsIDB4QzcwMywgMHhDMzAzLCAweDM4MDQsIDB4M0QwNCwgMHg0MTA0KSwKKwlQSFlSRUdTKDB4MDNDQiwgMHgwM0M3LCAweDAzQzMsIDB4MDQzOCwgMHgwNDNELCAweDA0NDEpLAogICB9LAogICB7CS5jaGFubmVsCQk9IDMsCiAJLmZyZXEJCQk9IDI0MjIsIC8qIE1IeiAqLwogCS51bmsyCQkJPSAzMjI5LAotCVJBRElPUkVHUygweDczLCAweDA5LCAweDc2LCAweDBGLCAweDAwLCAweDAxLCAweDA3LCAweDE1LAorCVJBRElPUkVHUygweDczLCAweDc2LCAweDA5LCAweDBGLCAweDAwLCAweDAxLCAweDA3LCAweDE1LAogCQkgIDB4MDEsIDB4OEYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4ODgsIDB4MEMsIDB4MEEsCiAJCSAgMHg4MCwgMHhGRiwgMHg4OCwgMHgwQywgMHgwQSwgMHg4MCksCi0JUEhZUkVHUygweENEMDMsIDB4QzkwMywgMHhDNTAzLCAweDM2MDQsIDB4M0EwNCwgMHgzRjA0KSwKKwlQSFlSRUdTKDB4MDNDRCwgMHgwM0M5LCAweDAzQzUsIDB4MDQzNiwgMHgwNDNBLCAweDA0M0YpLAogICB9LAogICB7CS5jaGFubmVsCQk9IDQsCiAJLmZyZXEJCQk9IDI0MjcsIC8qIE1IeiAqLwogCS51bmsyCQkJPSAzMjM2LAotCVJBRElPUkVHUygweDczLCAweDA5LCAweDdCLCAweDBGLCAweDAwLCAweDAxLCAweDA3LCAweDE1LAorCVJBRElPUkVHUygweDczLCAweDdCLCAweDA5LCAweDBGLCAweDAwLCAweDAxLCAweDA3LCAweDE1LAogCQkgIDB4MDEsIDB4OEYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4ODgsIDB4MEMsIDB4MEEsCiAJCSAgMHg4MCwgMHhGRiwgMHg4OCwgMHgwQywgMHgwQSwgMHg4MCksCi0JUEhZUkVHUygweENGMDMsIDB4Q0IwMywgMHhDNzAzLCAweDM0MDQsIDB4MzgwNCwgMHgzRDA0KSwKKwlQSFlSRUdTKDB4MDNDRiwgMHgwM0NCLCAweDAzQzcsIDB4MDQzNCwgMHgwNDM4LCAweDA0M0QpLAogICB9LAogICB7CS5jaGFubmVsCQk9IDUsCiAJLmZyZXEJCQk9IDI0MzIsIC8qIE1IeiAqLwogCS51bmsyCQkJPSAzMjQzLAotCVJBRElPUkVHUygweDczLCAweDA5LCAweDgwLCAweDBGLCAweDAwLCAweDAxLCAweDA3LCAweDE1LAorCVJBRElPUkVHUygweDczLCAweDgwLCAweDA5LCAweDBGLCAweDAwLCAweDAxLCAweDA3LCAweDE1LAogCQkgIDB4MDEsIDB4OEYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4ODgsIDB4MEMsIDB4MDksCiAJCSAgMHg4MCwgMHhGRiwgMHg4OCwgMHgwQywgMHgwOSwgMHg4MCksCi0JUEhZUkVHUygweEQxMDMsIDB4Q0QwMywgMHhDOTAzLCAweDMxMDQsIDB4MzYwNCwgMHgzQTA0KSwKKwlQSFlSRUdTKDB4MDNEMSwgMHgwM0NELCAweDAzQzksIDB4MDQzMSwgMHgwNDM2LCAweDA0M0EpLAogICB9LAogICB7CS5jaGFubmVsCQk9IDYsCiAJLmZyZXEJCQk9IDI0MzcsIC8qIE1IeiAqLwogCS51bmsyCQkJPSAzMjQ5LAotCVJBRElPUkVHUygweDczLCAweDA5LCAweDg1LCAweDBGLCAweDAwLCAweDAxLCAweDA3LCAweDE1LAorCVJBRElPUkVHUygweDczLCAweDg1LCAweDA5LCAweDBGLCAweDAwLCAweDAxLCAweDA3LCAweDE1LAogCQkgIDB4MDEsIDB4OEYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4ODgsIDB4MEIsIDB4MDgsCiAJCSAgMHg4MCwgMHhGRiwgMHg4OCwgMHgwQiwgMHgwOCwgMHg4MCksCi0JUEhZUkVHUygweEQzMDMsIDB4Q0YwMywgMHhDQjAzLCAweDJGMDQsIDB4MzQwNCwgMHgzODA0KSwKKwlQSFlSRUdTKDB4MDNEMywgMHgwM0NGLCAweDAzQ0IsIDB4MDQyRiwgMHgwNDM0LCAweDA0MzgpLAogICB9LAogICB7CS5jaGFubmVsCQk9IDcsCiAJLmZyZXEJCQk9IDI0NDIsIC8qIE1IeiAqLwogCS51bmsyCQkJPSAzMjU2LAotCVJBRElPUkVHUygweDczLCAweDA5LCAweDhBLCAweDBGLCAweDAwLCAweDAxLCAweDA3LCAweDE1LAorCVJBRElPUkVHUygweDczLCAweDhBLCAweDA5LCAweDBGLCAweDAwLCAweDAxLCAweDA3LCAweDE1LAogCQkgIDB4MDEsIDB4OEYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4ODgsIDB4MEEsIDB4MDcsCiAJCSAgMHg4MCwgMHhGRiwgMHg4OCwgMHgwQSwgMHgwNywgMHg4MCksCi0JUEhZUkVHUygweEQ1MDMsIDB4RDEwMywgMHhDRDAzLCAweDJEMDQsIDB4MzEwNCwgMHgzNjA0KSwKKwlQSFlSRUdTKDB4MDNENSwgMHgwM0QxLCAweDAzQ0QsIDB4MDQyRCwgMHgwNDMxLCAweDA0MzYpLAogICB9LAogICB7CS5jaGFubmVsCQk9IDgsCiAJLmZyZXEJCQk9IDI0NDcsIC8qIE1IeiAqLwogCS51bmsyCQkJPSAzMjYzLAotCVJBRElPUkVHUygweDczLCAweDA5LCAweDhGLCAweDBGLCAweDAwLCAweDAxLCAweDA3LCAweDE1LAorCVJBRElPUkVHUygweDczLCAweDhGLCAweDA5LCAweDBGLCAweDAwLCAweDAxLCAweDA3LCAweDE1LAogCQkgIDB4MDEsIDB4OEYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4ODgsIDB4MEEsIDB4MDYsCiAJCSAgMHg4MCwgMHhGRiwgMHg4OCwgMHgwQSwgMHgwNiwgMHg4MCksCi0JUEhZUkVHUygweEQ3MDMsIDB4RDMwMywgMHhDRjAzLCAweDJCMDQsIDB4MkYwNCwgMHgzNDA0KSwKKwlQSFlSRUdTKDB4MDNENywgMHgwM0QzLCAweDAzQ0YsIDB4MDQyQiwgMHgwNDJGLCAweDA0MzQpLAogICB9LAogICB7CS5jaGFubmVsCQk9IDksCiAJLmZyZXEJCQk9IDI0NTIsIC8qIE1IeiAqLwogCS51bmsyCQkJPSAzMjY5LAotCVJBRElPUkVHUygweDczLCAweDA5LCAweDk0LCAweDBGLCAweDAwLCAweDAxLCAweDA3LCAweDE1LAorCVJBRElPUkVHUygweDczLCAweDk0LCAweDA5LCAweDBGLCAweDAwLCAweDAxLCAweDA3LCAweDE1LAogCQkgIDB4MDEsIDB4OEYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4ODgsIDB4MDksIDB4MDYsCiAJCSAgMHg4MCwgMHhGRiwgMHg4OCwgMHgwOSwgMHgwNiwgMHg4MCksCi0JUEhZUkVHUygweEQ5MDMsIDB4RDUwMywgMHhEMTAzLCAweDI5MDQsIDB4MkQwNCwgMHgzMTA0KSwKKwlQSFlSRUdTKDB4MDNEOSwgMHgwM0Q1LCAweDAzRDEsIDB4MDQyOSwgMHgwNDJELCAweDA0MzEpLAogICB9LAogICB7CS5jaGFubmVsCQk9IDEwLAogCS5mcmVxCQkJPSAyNDU3LCAvKiBNSHogKi8KIAkudW5rMgkJCT0gMzI3NiwKLQlSQURJT1JFR1MoMHg3MywgMHgwOSwgMHg5OSwgMHgwRiwgMHgwMCwgMHgwMSwgMHgwNywgMHgxNSwKKwlSQURJT1JFR1MoMHg3MywgMHg5OSwgMHgwOSwgMHgwRiwgMHgwMCwgMHgwMSwgMHgwNywgMHgxNSwKIAkJICAweDAxLCAweDhGLCAweEZGLCAweEZGLCAweEZGLCAweDg4LCAweDA4LCAweDA1LAogCQkgIDB4ODAsIDB4RkYsIDB4ODgsIDB4MDgsIDB4MDUsIDB4ODApLAotCVBIWVJFR1MoMHhEQjAzLCAweEQ3MDMsIDB4RDMwMywgMHgyNzA0LCAweDJCMDQsIDB4MkYwNCksCisJUEhZUkVHUygweDAzREIsIDB4MDNENywgMHgwM0QzLCAweDA0MjcsIDB4MDQyQiwgMHgwNDJGKSwKICAgfSwKICAgewkuY2hhbm5lbAkJPSAxMSwKIAkuZnJlcQkJCT0gMjQ2MiwgLyogTUh6ICovCiAJLnVuazIJCQk9IDMyODMsCi0JUkFESU9SRUdTKDB4NzMsIDB4MDksIDB4OUUsIDB4MEYsIDB4MDAsIDB4MDEsIDB4MDcsIDB4MTUsCisJUkFESU9SRUdTKDB4NzMsIDB4OUUsIDB4MDksIDB4MEYsIDB4MDAsIDB4MDEsIDB4MDcsIDB4MTUsCiAJCSAgMHgwMSwgMHg4RiwgMHhGRiwgMHhGRiwgMHhGRiwgMHg4OCwgMHgwOCwgMHgwNCwKIAkJICAweDgwLCAweEZGLCAweDg4LCAweDA4LCAweDA0LCAweDgwKSwKLQlQSFlSRUdTKDB4REQwMywgMHhEOTAzLCAweEQ1MDMsIDB4MjQwNCwgMHgyOTA0LCAweDJEMDQpLAorCVBIWVJFR1MoMHgwM0RELCAweDAzRDksIDB4MDNENSwgMHgwNDI0LCAweDA0MjksIDB4MDQyRCksCiAgIH0sCiAgIHsJLmNoYW5uZWwJCT0gMTIsCiAJLmZyZXEJCQk9IDI0NjcsIC8qIE1IeiAqLwogCS51bmsyCQkJPSAzMjg5LAotCVJBRElPUkVHUygweDczLCAweDA5LCAweEEzLCAweDBGLCAweDAwLCAweDAxLCAweDA3LCAweDE1LAorCVJBRElPUkVHUygweDczLCAweEEzLCAweDA5LCAweDBGLCAweDAwLCAweDAxLCAweDA3LCAweDE1LAogCQkgIDB4MDEsIDB4OEYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4ODgsIDB4MDgsIDB4MDMsCiAJCSAgMHg4MCwgMHhGRiwgMHg4OCwgMHgwOCwgMHgwMywgMHg4MCksCi0JUEhZUkVHUygweERGMDMsIDB4REIwMywgMHhENzAzLCAweDIyMDQsIDB4MjcwNCwgMHgyQjA0KSwKKwlQSFlSRUdTKDB4MDNERiwgMHgwM0RCLCAweDAzRDcsIDB4MDQyMiwgMHgwNDI3LCAweDA0MkIpLAogICB9LAogICB7CS5jaGFubmVsCQk9IDEzLAogCS5mcmVxCQkJPSAyNDcyLCAvKiBNSHogKi8KIAkudW5rMgkJCT0gMzI5NiwKLQlSQURJT1JFR1MoMHg3MywgMHgwOSwgMHhBOCwgMHgwRiwgMHgwMCwgMHgwMSwgMHgwNywgMHgxNSwKKwlSQURJT1JFR1MoMHg3MywgMHhBOCwgMHgwOSwgMHgwRiwgMHgwMCwgMHgwMSwgMHgwNywgMHgxNSwKIAkJICAweDAxLCAweDhGLCAweEZGLCAweEZGLCAweEZGLCAweDg4LCAweDA3LCAweDAzLAogCQkgIDB4ODAsIDB4RkYsIDB4ODgsIDB4MDcsIDB4MDMsIDB4ODApLAotCVBIWVJFR1MoMHhFMTAzLCAweEREMDMsIDB4RDkwMywgMHgyMDA0LCAweDI0MDQsIDB4MjkwNCksCisJUEhZUkVHUygweDAzRTEsIDB4MDNERCwgMHgwM0Q5LCAweDA0MjAsIDB4MDQyNCwgMHgwNDI5KSwKICAgfSwKICAgewkuY2hhbm5lbAkJPSAxNCwKIAkuZnJlcQkJCT0gMjQ4NCwgLyogTUh6ICovCiAJLnVuazIJCQk9IDMzMTIsCi0JUkFESU9SRUdTKDB4NzMsIDB4MDksIDB4QjQsIDB4MEYsIDB4RkYsIDB4MDEsIDB4MDcsIDB4MTUsCisJUkFESU9SRUdTKDB4NzMsIDB4QjQsIDB4MDksIDB4MEYsIDB4RkYsIDB4MDEsIDB4MDcsIDB4MTUsCiAJCSAgMHgwMSwgMHg4RiwgMHhGRiwgMHhGRiwgMHhGRiwgMHg4OCwgMHgwNywgMHgwMSwKIAkJICAweDgwLCAweEZGLCAweDg4LCAweDA3LCAweDAxLCAweDgwKSwKLQlQSFlSRUdTKDB4RTYwMywgMHhFMjAzLCAweERFMDMsIDB4MUIwNCwgMHgxRjA0LCAweDI0MDQpLAorCVBIWVJFR1MoMHgwM0U2LCAweDAzRTIsIDB4MDNERSwgMHgwNDFCLCAweDA0MUYsIDB4MDQyNCksCiAgIH0sCiB9OwogCkBAIC0xMjk5LDcgKzEyOTksNyBAQAogCQkJICBib29sIGdoejUsIGJvb2wgaWdub3JlX3VwbG9hZGZsYWcpCiB7CiAJY29uc3Qgc3RydWN0IGIyMDU1X2luaXR0YWJfZW50cnkgKmU7Ci0JdW5zaWduZWQgaW50IGk7CisJdW5zaWduZWQgaW50IGksIHdyaXRlcyA9IDA7CiAJdTE2IHZhbHVlOwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYjIwNTVfaW5pdHRhYik7IGkrKykgewpAQCAtMTMxMiw2ICsxMzEyLDggQEAKIAkJCWVsc2UKIAkJCQl2YWx1ZSA9IGUtPmdoejI7CiAJCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIGksIHZhbHVlKTsKKwkJCWlmICgrK3dyaXRlcyAlIDQgPT0gMCkKKwkJCQliNDNfcmVhZDMyKGRldiwgQjQzX01NSU9fTUFDQ1RMKTsgLyogZmx1c2ggKi8KIAkJfQogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9yYWRpb18yMDU2LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcmFkaW9fMjA1Ni5jCmluZGV4IGQ4NTYzMTkuLjg4OTBkZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9yYWRpb18yMDU2LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3JhZGlvXzIwNTYuYwpAQCAtMjQsMTcgKzI0LDkwNzMgQEAKICNpbmNsdWRlICJyYWRpb18yMDU2LmgiCiAjaW5jbHVkZSAicGh5X2NvbW1vbi5oIgogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGI0M19ucGh5X2NoYW5uZWx0YWJfZW50cnlfcmV2MyBiNDNfbnBoeV9jaGFubmVsdGFiX3JldjNbXSA9IHsKK3N0cnVjdCBiMjA1Nl9pbml0dGFiX2VudHJ5IHsKKwkvKiBWYWx1ZSB0byB3cml0ZSBpZiB3ZSB1c2UgdGhlIDVHSHogYmFuZC4gKi8KKwl1MTYgZ2h6NTsKKwkvKiBWYWx1ZSB0byB3cml0ZSBpZiB3ZSB1c2UgdGhlIDIuNEdIeiBiYW5kLiAqLworCXUxNiBnaHoyOworCS8qIEZsYWdzICovCisJdTggZmxhZ3M7CiB9OworI2RlZmluZSBCMjA1Nl9JTklUVEFCX0VOVFJZX09LCTB4MDEKKyNkZWZpbmUgQjIwNTZfSU5JVFRBQl9VUExPQUQJMHgwMgorI2RlZmluZSBVUExPQUQJCS5mbGFncyA9IEIyMDU2X0lOSVRUQUJfRU5UUllfT0sgfCBCMjA1Nl9JTklUVEFCX1VQTE9BRAorI2RlZmluZSBOT1VQTE9BRAkuZmxhZ3MgPSBCMjA1Nl9JTklUVEFCX0VOVFJZX09LCisKK3N0cnVjdCBiMjA1Nl9pbml0dGFic19wdHMgeworCWNvbnN0IHN0cnVjdCBiMjA1Nl9pbml0dGFiX2VudHJ5ICpzeW47CisJdW5zaWduZWQgaW50IHN5bl9sZW5ndGg7CisJY29uc3Qgc3RydWN0IGIyMDU2X2luaXR0YWJfZW50cnkgKnR4OworCXVuc2lnbmVkIGludCB0eF9sZW5ndGg7CisJY29uc3Qgc3RydWN0IGIyMDU2X2luaXR0YWJfZW50cnkgKnJ4OworCXVuc2lnbmVkIGludCByeF9sZW5ndGg7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGIyMDU2X2luaXR0YWJfZW50cnkgYjIwNTZfaW5pdHRhYl9yZXYzX3N5bltdID0geworCVtCMjA1Nl9TWU5fUkVTRVJWRURfQUREUjJdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkVTRVJWRURfQUREUjNdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkVTRVJWRURfQUREUjRdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkVTRVJWRURfQUREUjVdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkVTRVJWRURfQUREUjZdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkVTRVJWRURfQUREUjddCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fQ09NX0NUUkxdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0NPTV9QVV0JCT0geyAuZ2h6NSA9IDB4MDAwMSwgLmdoejIgPSAweDAwMDEsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fQ09NX09WUl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fQ09NX1JFU0VUXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9DT01fUkNBTF0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fQ09NX1JDX1JYTFBGXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0NPTV9SQ19UWExQRl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9DT01fUkNfUlhIUEZdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkVTRVJWRURfQUREUjE2XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1JFU0VSVkVEX0FERFIxN10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9SRVNFUlZFRF9BRERSMThdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkVTRVJWRURfQUREUjE5XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1JFU0VSVkVEX0FERFIyMF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9SRVNFUlZFRF9BRERSMjFdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkVTRVJWRURfQUREUjIyXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1JFU0VSVkVEX0FERFIyM10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9SRVNFUlZFRF9BRERSMjRdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkVTRVJWRURfQUREUjI1XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1JFU0VSVkVEX0FERFIyNl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9SRVNFUlZFRF9BRERSMjddCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkVTRVJWRURfQUREUjI4XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1JFU0VSVkVEX0FERFIyOV0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9SRVNFUlZFRF9BRERSMzBdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkVTRVJWRURfQUREUjMxXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0dQSU9fTUFTVEVSMV0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9HUElPX01BU1RFUjJdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fVE9QQklBU19NQVNURVJdCT0geyAuZ2h6NSA9IDB4MDA2MCwgLmdoejIgPSAweDAwNjAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fVE9QQklBU19SQ0FMXQk9IHsgLmdoejUgPSAweDAwMDYsIC5naHoyID0gMHgwMDA2LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0FGRVJFR10JCT0geyAuZ2h6NSA9IDB4MDAwYywgLmdoejIgPSAweDAwMGMsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fVEVNUFBST0NTRU5TRV0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9URU1QUFJPQ1NFTlNFSURBQ10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9URU1QUFJPQ1NFTlNFUkNBTF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MUE9dCQkJPSB7IC5naHo1ID0gMHgwMDAxLCAuZ2h6MiA9IDB4MDAwMSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9WRERDQUxfTUFTVEVSXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1ZERENBTF9JREFDXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9WRERDQUxfU1RBVFVTXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1JDQUxfTUFTVEVSXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9SQ0FMX0NPREVfT1VUXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1JDQ0FMX0NUUkwwXQkJPSB7IC5naHo1ID0gMHgwMDBkLCAuZ2h6MiA9IDB4MDAwZCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9SQ0NBTF9DVFJMMV0JCT0geyAuZ2h6NSA9IDB4MDAxZiwgLmdoejIgPSAweDAwMWYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkNDQUxfQ1RSTDJdCQk9IHsgLmdoejUgPSAweDAwMTUsIC5naHoyID0gMHgwMDE1LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1JDQ0FMX0NUUkwzXQkJPSB7IC5naHo1ID0gMHgwMDBmLCAuZ2h6MiA9IDB4MDAwZiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9SQ0NBTF9DVFJMNF0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkNDQUxfQ1RSTDVdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1JDQ0FMX0NUUkw2XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9SQ0NBTF9DVFJMN10JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkNDQUxfQ1RSTDhdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1JDQ0FMX0NUUkw5XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9SQ0NBTF9DVFJMMTBdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkNDQUxfQ1RSTDExXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1pDQUxfU1BBUkUxXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9aQ0FMX1NQQVJFMl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX01BU1QxXQkJPSB7IC5naHo1ID0gMHgwMDEzLCAuZ2h6MiA9IDB4MDAxMywgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfTUFTVDJdCQk9IHsgLmdoejUgPSAweDAwMGYsIC5naHoyID0gMHgwMDBmLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9NQVNUM10JCT0geyAuZ2h6NSA9IDB4MDAxOCwgLmdoejIgPSAweDAwMTgsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX0JJQVNfUkVTRVRdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX1hUQUwwXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfWFRBTDFdCQk9IHsgLmdoejUgPSAweDAwMjAsIC5naHoyID0gMHgwMDIwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9YVEFMM10JCT0geyAuZ2h6NSA9IDB4MDAyMCwgLmdoejIgPSAweDAwMjAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX1hUQUw0XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfWFRBTDVdCQk9IHsgLmdoejUgPSAweDAwNzcsIC5naHoyID0gMHgwMDc3LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9YVEFMNl0JCT0geyAuZ2h6NSA9IDB4MDAwNywgLmdoejIgPSAweDAwMDcsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX1JFRkRJVl0JCT0geyAuZ2h6NSA9IDB4MDAwMSwgLmdoejIgPSAweDAwMDEsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX1BGRF0JCT0geyAuZ2h6NSA9IDB4MDAwNCwgLmdoejIgPSAweDAwMDQsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX0NQMV0JCT0geyAuZ2h6NSA9IDB4MDAwZiwgLmdoejIgPSAweDAwMGYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX0NQMl0JCT0geyAuZ2h6NSA9IDB4MDAzMCwgLmdoejIgPSAweDAwMzAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX0NQM10JCT0geyAuZ2h6NSA9IDB4MDAzMiwgLmdoejIgPSAweDAwMzIsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX0xPT1BGSUxURVIxXQk9IHsgLmdoejUgPSAweDAwMGQsIC5naHoyID0gMHgwMDBkLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9MT09QRklMVEVSMl0JPSB7IC5naHo1ID0gMHgwMDBkLCAuZ2h6MiA9IDB4MDAwZCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfTE9PUEZJTFRFUjNdCT0geyAuZ2h6NSA9IDB4MDAwNCwgLmdoejIgPSAweDAwMDQsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX0xPT1BGSUxURVI0XQk9IHsgLmdoejUgPSAweDAwMDYsIC5naHoyID0gMHgwMDA2LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9MT09QRklMVEVSNV0JPSB7IC5naHo1ID0gMHgwMDAxLCAuZ2h6MiA9IDB4MDAwMSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfTU1EMV0JCT0geyAuZ2h6NSA9IDB4MDAxYywgLmdoejIgPSAweDAwMWMsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX01NRDJdCQk9IHsgLmdoejUgPSAweDAwMDIsIC5naHoyID0gMHgwMDAyLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9WQ08xXQkJPSB7IC5naHo1ID0gMHgwMDAyLCAuZ2h6MiA9IDB4MDAwMiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfVkNPMl0JCT0geyAuZ2h6NSA9IDB4MDBmNywgLmdoejIgPSAweDAwZjcsIFVQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9NT05JVE9SMV0JPSB7IC5naHo1ID0gMHgwMGI0LCAuZ2h6MiA9IDB4MDBiNCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfTU9OSVRPUjJdCT0geyAuZ2h6NSA9IDB4MDBkMiwgLmdoejIgPSAweDAwZDIsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX1ZDT0NBTDFdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9WQ09DQUwyXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfVkNPQ0FMNF0JCT0geyAuZ2h6NSA9IDB4MDAwNCwgLmdoejIgPSAweDAwMDQsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX1ZDT0NBTDVdCQk9IHsgLmdoejUgPSAweDAwOTYsIC5naHoyID0gMHgwMDk2LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9WQ09DQUw2XQkJPSB7IC5naHo1ID0gMHgwMDNlLCAuZ2h6MiA9IDB4MDAzZSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfVkNPQ0FMN10JCT0geyAuZ2h6NSA9IDB4MDAzZSwgLmdoejIgPSAweDAwM2UsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX1ZDT0NBTDhdCQk9IHsgLmdoejUgPSAweDAwMTMsIC5naHoyID0gMHgwMDEzLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9WQ09DQUw5XQkJPSB7IC5naHo1ID0gMHgwMDAyLCAuZ2h6MiA9IDB4MDAwMiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfVkNPQ0FMMTBdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX1ZDT0NBTDExXQk9IHsgLmdoejUgPSAweDAwMDcsIC5naHoyID0gMHgwMDA3LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9WQ09DQUwxMl0JPSB7IC5naHo1ID0gMHgwMDA3LCAuZ2h6MiA9IDB4MDAwNywgVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX1ZDT0NBTDEzXQk9IHsgLmdoejUgPSAweDAwMDgsIC5naHoyID0gMHgwMDA4LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9WUkVHXQkJPSB7IC5naHo1ID0gMHgwMDAzLCAuZ2h6MiA9IDB4MDAwMywgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfU1RBVFVTMV0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX1NUQVRVUzJdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9TVEFUVVMzXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9QVTBdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX1BVMV0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fUFUyXQkJPSB7IC5naHo1ID0gMHgwMDQwLCAuZ2h6MiA9IDB4MDA0MCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9QVTNdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX1BVNV0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fUFU2XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9QVTddCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX1BVOF0JCT0geyAuZ2h6NSA9IDB4MDAwMSwgLmdoejIgPSAweDAwMDEsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQklBU19SRVNFVF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9SQ0NSMV0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fVkNPQlVGMV0JPSB7IC5naHo1ID0gMHgwMDYwLCAuZ2h6MiA9IDB4MDA2MCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9NSVhFUjFdCT0geyAuZ2h6NSA9IDB4MDA2NiwgLmdoejIgPSAweDAwNjYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fTUlYRVIyXQk9IHsgLmdoejUgPSAweDAwMGMsIC5naHoyID0gMHgwMDBjLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0JVRjFdCQk9IHsgLmdoejUgPSAweDAwNjYsIC5naHoyID0gMHgwMDY2LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOQlVGMl0JCT0geyAuZ2h6NSA9IDB4MDA4ZiwgLmdoejIgPSAweDAwOGYsIFVQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0JVRjNdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0JVRjRdCQk9IHsgLmdoejUgPSAweDAwY2MsIC5naHoyID0gMHgwMGNjLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0RJVjFdCQk9IHsgLmdoejUgPSAweDAwMDEsIC5naHoyID0gMHgwMDAxLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0RJVjJdCQk9IHsgLmdoejUgPSAweDAwNjYsIC5naHoyID0gMHgwMDY2LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0RJVjNdCQk9IHsgLmdoejUgPSAweDAwNjYsIC5naHoyID0gMHgwMDY2LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0FDTDFdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0FDTDJdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0FDTDNdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0FDTDRdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0FDTDVdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0FDTDZdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0FDTE9VVF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9BQ0xDQUwxXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0FDTENBTDJdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQUNMQ0FMM10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9DQUxFTl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fUEVBS0RFVDFdCT0geyAuZ2h6NSA9IDB4MDBmZiwgLmdoejIgPSAweDAwZmYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQ09SRV9BQ0xfT1ZSXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX1JYX0RJRkZfQUNMX09WUl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9UWF9ESUZGX0FDTF9PVlJdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fUlhfQ01PU19BQ0xfT1ZSXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX1RYX0NNT1NfQUNMX09WUl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9WQ09CVUYyXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX01JWEVSM10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9CVUY1XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9CVUY2XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9DQlVGUlgxXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0NCVUZSWDJdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQ0JVRlJYM10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9DQlVGUlg0XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0NCVUZUWDFdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQ0JVRlRYMl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9DQlVGVFgzXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0NCVUZUWDRdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQ01PU1JYMV0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9DTU9TUlgyXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0NNT1NSWDNdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQ01PU1JYNF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9DTU9TVFgxXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0NNT1NUWDJdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQ01PU1RYM10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9DTU9TVFg0XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX1ZDT0JVRjJfT1ZSVkFMXT0geyAuZ2h6NSA9IDB4MDAwNiwgLmdoejIgPSAweDAwMDYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fTUlYRVIzX09WUlZBTF0JPSB7IC5naHo1ID0gMHgwMDY2LCAuZ2h6MiA9IDB4MDA2NiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9CVUY1X09WUlZBTF0JPSB7IC5naHo1ID0gMHgwMDY2LCAuZ2h6MiA9IDB4MDA2NiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9CVUY2X09WUlZBTF0JPSB7IC5naHo1ID0gMHgwMDY2LCAuZ2h6MiA9IDB4MDA2NiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9DQlVGUlgxX09WUlZBTF09IHsgLmdoejUgPSAweDAwNjYsIC5naHoyID0gMHgwMDY2LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0NCVUZSWDJfT1ZSVkFMXT0geyAuZ2h6NSA9IDB4MDA2NiwgLmdoejIgPSAweDAwNjYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQ0JVRlJYM19PVlJWQUxdPSB7IC5naHo1ID0gMHgwMDY2LCAuZ2h6MiA9IDB4MDA2NiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9DQlVGUlg0X09WUlZBTF09IHsgLmdoejUgPSAweDAwNjYsIC5naHoyID0gMHgwMDY2LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0NCVUZUWDFfT1ZSVkFMXT0geyAuZ2h6NSA9IDB4MDA2NiwgLmdoejIgPSAweDAwNjYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQ0JVRlRYMl9PVlJWQUxdPSB7IC5naHo1ID0gMHgwMDY2LCAuZ2h6MiA9IDB4MDA2NiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9DQlVGVFgzX09WUlZBTF09IHsgLmdoejUgPSAweDAwNjYsIC5naHoyID0gMHgwMDY2LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0NCVUZUWDRfT1ZSVkFMXT0geyAuZ2h6NSA9IDB4MDA2NiwgLmdoejIgPSAweDAwNjYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQ01PU1JYMV9PVlJWQUxdPSB7IC5naHo1ID0gMHgwMDY2LCAuZ2h6MiA9IDB4MDA2NiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9DTU9TUlgyX09WUlZBTF09IHsgLmdoejUgPSAweDAwNjYsIC5naHoyID0gMHgwMDY2LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0NNT1NSWDNfT1ZSVkFMXT0geyAuZ2h6NSA9IDB4MDA2NiwgLmdoejIgPSAweDAwNjYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQ01PU1JYNF9PVlJWQUxdPSB7IC5naHo1ID0gMHgwMDY2LCAuZ2h6MiA9IDB4MDA2NiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9DTU9TVFgxX09WUlZBTF09IHsgLmdoejUgPSAweDAwNjYsIC5naHoyID0gMHgwMDY2LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0NNT1NUWDJfT1ZSVkFMXT0geyAuZ2h6NSA9IDB4MDA2NiwgLmdoejIgPSAweDAwNjYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQ01PU1RYM19PVlJWQUxdPSB7IC5naHo1ID0gMHgwMDY2LCAuZ2h6MiA9IDB4MDA2NiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9DTU9TVFg0X09WUlZBTF09IHsgLmdoejUgPSAweDAwNjYsIC5naHoyID0gMHgwMDY2LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0FDTF9XQUlUQ05UXQk9IHsgLmdoejUgPSAweDAwMGEsIC5naHoyID0gMHgwMDBhLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0NPUkVfQ0FMVkFMSURdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fUlhfQ01PU19DQUxWQUxJRF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9UWF9DTU9TX1ZBTElEXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYjIwNTZfaW5pdHRhYl9lbnRyeSBiMjA1Nl9pbml0dGFiX3JldjNfdHhbXSA9IHsKKwlbQjIwNTZfVFhfUkVTRVJWRURfQUREUjJdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9SRVNFUlZFRF9BRERSM10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFI0XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfUkVTRVJWRURfQUREUjVdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9SRVNFUlZFRF9BRERSNl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFI3XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfQ09NX0NUUkxdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfQ09NX1BVXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0NPTV9PVlJdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfQ09NX1JFU0VUXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0NPTV9SQ0FMXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0NPTV9SQ19SWExQRl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9DT01fUkNfVFhMUEZdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfQ09NX1JDX1JYSFBGXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFIxNl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFIxN10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFIxOF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFIxOV0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFIyMF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFIyMV0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFIyMl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFIyM10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFIyNF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFIyNV0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFIyNl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFIyN10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFIyOF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFIyOV0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFIzMF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFIzMV0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0lRQ0FMX0dBSU5fQlddCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9MT0ZUX0ZJTkVfSV0JCT0geyAuZ2h6NSA9IDB4MDA4OCwgLmdoejIgPSAweDAwODgsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9MT0ZUX0ZJTkVfUV0JCT0geyAuZ2h6NSA9IDB4MDA4OCwgLmdoejIgPSAweDAwODgsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9MT0ZUX0NPQVJTRV9JXQk9IHsgLmdoejUgPSAweDAwODgsIC5naHoyID0gMHgwMDg4LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfTE9GVF9DT0FSU0VfUV0JPSB7IC5naHo1ID0gMHgwMDg4LCAuZ2h6MiA9IDB4MDA4OCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYX0NPTV9NQVNURVIxXQk9IHsgLmdoejUgPSAweDAwMGMsIC5naHoyID0gMHgwMDBjLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhfQ09NX01BU1RFUjJdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9SWElRQ0FMX1RYTVVYXQk9IHsgLmdoejUgPSAweDAwMDMsIC5naHoyID0gMHgwMDAzLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhfU1NJX01BU1RFUl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0lRQ0FMX1ZDTV9IR10JCT0geyAuZ2h6NSA9IDB4MDAwMywgLmdoejIgPSAweDAwMDMsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9JUUNBTF9JREFDXQkJPSB7IC5naHo1ID0gMHgwMDM3LCAuZ2h6MiA9IDB4MDAzNywgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RTU0lfVkNNXQkJPSB7IC5naHo1ID0gMHgwMDAzLCAuZ2h6MiA9IDB4MDAwMywgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYX0FNUF9ERVRdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhfU1NJX01VWF0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UU1NJQV0JCT0geyAuZ2h6NSA9IDB4MDAwMSwgLmdoejIgPSAweDAwMDEsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UU1NJR10JCT0geyAuZ2h6NSA9IDB4MDAwMSwgLmdoejIgPSAweDAwMDEsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UU1NJX01JU0MxXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RTU0lfTUlTQzJdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFNTSV9NSVNDM10JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QQV9TUEFSRTFdCQk9IHsgLmdoejUgPSAweDAwMTEsIC5naHoyID0gMHgwMDExLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfUEFfU1BBUkUyXQkJPSB7IC5naHo1ID0gMHgwMDExLCAuZ2h6MiA9IDB4MDAxMSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0lOVFBBQV9NQVNURVJdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9JTlRQQUFfR0FJTl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9JTlRQQUFfQk9PU1RfVFVORV0JPSB7IC5naHo1ID0gMHgwMDAzLCAuZ2h6MiA9IDB4MDAwMywgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0lOVFBBQV9JQVVYX1NUQVRdCT0geyAuZ2h6NSA9IDB4MDAwZiwgLmdoejIgPSAweDAwMGYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9JTlRQQUFfSUFVWF9EWU5dCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9JTlRQQUFfSU1BSU5fU1RBVF0JPSB7IC5naHo1ID0gMHgwMDJkLCAuZ2h6MiA9IDB4MDAyZCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0lOVFBBQV9JTUFJTl9EWU5dCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9JTlRQQUFfQ0FTQ0JJQVNdCT0geyAuZ2h6NSA9IDB4MDA2ZSwgLmdoejIgPSAweDAwNmUsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9JTlRQQUFfUEFTTE9QRV0JPSB7IC5naHo1ID0gMHgwMGYwLCAuZ2h6MiA9IDB4MDBmMCwgVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9JTlRQQUFfUEFfTUlTQ10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0lOVFBBR19NQVNURVJdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9JTlRQQUdfR0FJTl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9JTlRQQUdfQk9PU1RfVFVORV0JPSB7IC5naHo1ID0gMHgwMDAzLCAuZ2h6MiA9IDB4MDAwMywgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0lOVFBBR19JQVVYX1NUQVRdCT0geyAuZ2h6NSA9IDB4MDAwMywgLmdoejIgPSAweDAwMDMsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9JTlRQQUdfSUFVWF9EWU5dCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9JTlRQQUdfSU1BSU5fU1RBVF0JPSB7IC5naHo1ID0gMHgwMDFlLCAuZ2h6MiA9IDB4MDAxZSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0lOVFBBR19JTUFJTl9EWU5dCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9JTlRQQUdfQ0FTQ0JJQVNdCT0geyAuZ2h6NSA9IDB4MDA2ZSwgLmdoejIgPSAweDAwNmUsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9JTlRQQUdfUEFTTE9QRV0JPSB7IC5naHo1ID0gMHgwMGYwLCAuZ2h6MiA9IDB4MDBmMCwgVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9JTlRQQUdfUEFfTUlTQ10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1BBREFfTUFTVEVSXQkJPSB7IC5naHo1ID0gMHgwMDAyLCAuZ2h6MiA9IDB4MDAwMiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1BBREFfSURBQ10JCT0geyAuZ2h6NSA9IDB4MDBmZiwgLmdoejIgPSAweDAwZmYsIFVQTE9BRCwgfSwKKwlbQjIwNTZfVFhfUEFEQV9DQVNDQklBU10JPSB7IC5naHo1ID0gMHgwMDBjLCAuZ2h6MiA9IDB4MDAwYywgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1BBREFfR0FJTl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QQURBX0JPT1NUX1RVTkVdCT0geyAuZ2h6NSA9IDB4MDAzOCwgLmdoejIgPSAweDAwMzgsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QQURBX1NMT1BFXQkJPSB7IC5naHo1ID0gMHgwMDcwLCAuZ2h6MiA9IDB4MDA3MCwgVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QQURHX01BU1RFUl0JCT0geyAuZ2h6NSA9IDB4MDAwMiwgLmdoejIgPSAweDAwMDIsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QQURHX0lEQUNdCQk9IHsgLmdoejUgPSAweDAwODgsIC5naHoyID0gMHgwMDg4LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfUEFER19DQVNDQklBU10JPSB7IC5naHo1ID0gMHgwMDBjLCAuZ2h6MiA9IDB4MDAwYywgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1BBREdfR0FJTl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QQURHX0JPT1NUX1RVTkVdCT0geyAuZ2h6NSA9IDB4MDAwOCwgLmdoejIgPSAweDAwMDgsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QQURHX1NMT1BFXQkJPSB7IC5naHo1ID0gMHgwMDcwLCAuZ2h6MiA9IDB4MDA3MCwgVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QR0FBX01BU1RFUl0JCT0geyAuZ2h6NSA9IDB4MDAwMiwgLmdoejIgPSAweDAwMDIsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QR0FBX0lEQUNdCQk9IHsgLmdoejUgPSAweDAwZmYsIC5naHoyID0gMHgwMGZmLCBVUExPQUQsIH0sCisJW0IyMDU2X1RYX1BHQUFfR0FJTl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QR0FBX0JPT1NUX1RVTkVdCT0geyAuZ2h6NSA9IDB4MDA4MywgLmdoejIgPSAweDAwODMsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QR0FBX1NMT1BFXQkJPSB7IC5naHo1ID0gMHgwMDc3LCAuZ2h6MiA9IDB4MDA3NywgVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QR0FBX01JU0NdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfUEdBR19NQVNURVJdCQk9IHsgLmdoejUgPSAweDAwMDIsIC5naHoyID0gMHgwMDAyLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfUEdBR19JREFDXQkJPSB7IC5naHo1ID0gMHgwMDg4LCAuZ2h6MiA9IDB4MDA4OCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1BHQUdfR0FJTl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QR0FHX0JPT1NUX1RVTkVdCT0geyAuZ2h6NSA9IDB4MDAwOCwgLmdoejIgPSAweDAwMDgsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QR0FHX1NMT1BFXQkJPSB7IC5naHo1ID0gMHgwMDc3LCAuZ2h6MiA9IDB4MDA3NywgVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QR0FHX01JU0NdCQk9IHsgLmdoejUgPSAweDAwMDEsIC5naHoyID0gMHgwMDAxLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfTUlYQV9NQVNURVJdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfTUlYQV9CT09TVF9UVU5FXQk9IHsgLmdoejUgPSAweDAwMDcsIC5naHoyID0gMHgwMDA3LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfTUlYR10JCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfTUlYR19CT09TVF9UVU5FXQk9IHsgLmdoejUgPSAweDAwMDcsIC5naHoyID0gMHgwMDA3LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfQkJfR01fTUFTVEVSXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0dNQkJfR01dCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfR01CQl9JREFDXQkJPSB7IC5naHo1ID0gMHgwMDc0LCAuZ2h6MiA9IDB4MDA3NCwgVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWExQRl9NQVNURVJdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhMUEZfUkNDQUxdCQk9IHsgLmdoejUgPSAweDAwMGEsIC5naHoyID0gMHgwMDBhLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhMUEZfUkNDQUxfT0ZGMF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYTFBGX1JDQ0FMX09GRjFdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWExQRl9SQ0NBTF9PRkYyXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhMUEZfUkNDQUxfT0ZGM10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYTFBGX1JDQ0FMX09GRjRdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWExQRl9SQ0NBTF9PRkY1XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhMUEZfUkNDQUxfT0ZGNl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYTFBGX0JXXQkJPSB7IC5naHo1ID0gMHgwMDAyLCAuZ2h6MiA9IDB4MDAwMiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYTFBGX0dBSU5dCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhMUEZfSURBQ10JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWExQRl9JREFDXzBdCQk9IHsgLmdoejUgPSAweDAwMGUsIC5naHoyID0gMHgwMDBlLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhMUEZfSURBQ18xXQkJPSB7IC5naHo1ID0gMHgwMDBlLCAuZ2h6MiA9IDB4MDAwZSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYTFBGX0lEQUNfMl0JCT0geyAuZ2h6NSA9IDB4MDAwZSwgLmdoejIgPSAweDAwMGUsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWExQRl9JREFDXzNdCQk9IHsgLmdoejUgPSAweDAwMTMsIC5naHoyID0gMHgwMDEzLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhMUEZfSURBQ180XQkJPSB7IC5naHo1ID0gMHgwMDEzLCAuZ2h6MiA9IDB4MDAxMywgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYTFBGX0lEQUNfNV0JCT0geyAuZ2h6NSA9IDB4MDAxYiwgLmdoejIgPSAweDAwMWIsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWExQRl9JREFDXzZdCQk9IHsgLmdoejUgPSAweDAwMWIsIC5naHoyID0gMHgwMDFiLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhMUEZfT1BBTVBfSURBQ10JPSB7IC5naHo1ID0gMHgwMDU1LCAuZ2h6MiA9IDB4MDA1NSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYTFBGX01JU0NdCQk9IHsgLmdoejUgPSAweDAwNWIsIC5naHoyID0gMHgwMDViLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhTUEFSRTFdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhTUEFSRTJdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhTUEFSRTNdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhTUEFSRTRdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhTUEFSRTVdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhTUEFSRTZdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhTUEFSRTddCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhTUEFSRThdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhTUEFSRTldCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhTUEFSRTEwXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYU1BBUkUxMV0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWFNQQVJFMTJdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhTUEFSRTEzXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYU1BBUkUxNF0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWFNQQVJFMTVdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhTUEFSRTE2XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1NUQVRVU19JTlRQQV9HQUlOXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfU1RBVFVTX1BBRF9HQUlOXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfU1RBVFVTX1BHQV9HQUlOXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfU1RBVFVTX0dNX1RYTFBGX0dBSU5dCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9TVEFUVVNfVFhMUEZfQlddCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9TVEFUVVNfVFhMUEZfUkNdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBiMjA1Nl9pbml0dGFiX2VudHJ5IGIyMDU2X2luaXR0YWJfcmV2M19yeFtdID0geworCVtCMjA1Nl9SWF9SRVNFUlZFRF9BRERSMl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JFU0VSVkVEX0FERFIzXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUkVTRVJWRURfQUREUjRdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SRVNFUlZFRF9BRERSNV0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JFU0VSVkVEX0FERFI2XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUkVTRVJWRURfQUREUjddCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9DT01fQ1RSTF0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9DT01fUFVdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfQ09NX09WUl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9DT01fUkVTRVRdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfQ09NX1JDQUxdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfQ09NX1JDX1JYTFBGXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX0NPTV9SQ19UWExQRl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9DT01fUkNfUlhIUEZdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUkVTRVJWRURfQUREUjE2XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUkVTRVJWRURfQUREUjE3XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUkVTRVJWRURfQUREUjE4XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUkVTRVJWRURfQUREUjE5XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUkVTRVJWRURfQUREUjIwXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUkVTRVJWRURfQUREUjIxXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUkVTRVJWRURfQUREUjIyXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUkVTRVJWRURfQUREUjIzXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUkVTRVJWRURfQUREUjI0XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUkVTRVJWRURfQUREUjI1XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUkVTRVJWRURfQUREUjI2XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUkVTRVJWRURfQUREUjI3XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUkVTRVJWRURfQUREUjI4XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUkVTRVJWRURfQUREUjI5XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUkVTRVJWRURfQUREUjMwXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUkVTRVJWRURfQUREUjMxXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhJUUNBTF9SWE1VWF0JPSB7IC5naHo1ID0gMHgwMDAzLCAuZ2h6MiA9IDB4MDAwMywgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JTU0lfUFVdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlNTSV9TRUxdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlNTSV9HQUlOXQkJPSB7IC5naHo1ID0gMHgwMDkwLCAuZ2h6MiA9IDB4MDA5MCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JTU0lfTkJfSURBQ10JCT0geyAuZ2h6NSA9IDB4MDA1NSwgLmdoejIgPSAweDAwNTUsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SU1NJX1dCMklfSURBQ18xXQk9IHsgLmdoejUgPSAweDAwMTUsIC5naHoyID0gMHgwMDE1LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlNTSV9XQjJJX0lEQUNfMl0JPSB7IC5naHo1ID0gMHgwMDA1LCAuZ2h6MiA9IDB4MDAwNSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JTU0lfV0IyUV9JREFDXzFdCT0geyAuZ2h6NSA9IDB4MDAxNSwgLmdoejIgPSAweDAwMTUsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SU1NJX1dCMlFfSURBQ18yXQk9IHsgLmdoejUgPSAweDAwMDUsIC5naHoyID0gMHgwMDA1LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlNTSV9QT0xFXQkJPSB7IC5naHo1ID0gMHgwMDIwLCAuZ2h6MiA9IDB4MDAyMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JTU0lfV0IxX0lEQUNdCT0geyAuZ2h6NSA9IDB4MDAxMSwgLmdoejIgPSAweDAwMTEsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SU1NJX01JU0NdCQk9IHsgLmdoejUgPSAweDAwOTAsIC5naHoyID0gMHgwMDkwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfTE5BQV9NQVNURVJdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfTE5BQV9UVU5FXQkJPSB7IC5naHo1ID0gMHgwMDg4LCAuZ2h6MiA9IDB4MDA4OCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX0xOQUFfR0FJTl0JCT0geyAuZ2h6NSA9IDB4MDAzMiwgLmdoejIgPSAweDAwMzIsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9MTkFfQV9TTE9QRV0JCT0geyAuZ2h6NSA9IDB4MDA3NywgLmdoejIgPSAweDAwNzcsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9CSUFTUE9MRV9MTkFBMV9JREFDXQk9IHsgLmdoejUgPSAweDAwMTcsIC5naHoyID0gMHgwMDE3LCBVUExPQUQsIH0sCisJW0IyMDU2X1JYX0xOQUEyX0lEQUNdCQk9IHsgLmdoejUgPSAweDAwZmYsIC5naHoyID0gMHgwMGZmLCBVUExPQUQsIH0sCisJW0IyMDU2X1JYX0xOQTFBX01JU0NdCQk9IHsgLmdoejUgPSAweDAwMjAsIC5naHoyID0gMHgwMDIwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfTE5BR19NQVNURVJdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfTE5BR19UVU5FXQkJPSB7IC5naHo1ID0gMHgwMDg4LCAuZ2h6MiA9IDB4MDA4OCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX0xOQUdfR0FJTl0JCT0geyAuZ2h6NSA9IDB4MDAzMiwgLmdoejIgPSAweDAwMzIsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9MTkFfR19TTE9QRV0JCT0geyAuZ2h6NSA9IDB4MDA3NywgLmdoejIgPSAweDAwNzcsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9CSUFTUE9MRV9MTkFHMV9JREFDXQk9IHsgLmdoejUgPSAweDAwMTcsIC5naHoyID0gMHgwMDE3LCBVUExPQUQsIH0sCisJW0IyMDU2X1JYX0xOQUcyX0lEQUNdCQk9IHsgLmdoejUgPSAweDAwZjAsIC5naHoyID0gMHgwMGYwLCBVUExPQUQsIH0sCisJW0IyMDU2X1JYX0xOQTFHX01JU0NdCQk9IHsgLmdoejUgPSAweDAwMjAsIC5naHoyID0gMHgwMDIwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfTUlYQV9NQVNURVJdCQk9IHsgLmdoejUgPSAweDAwMDgsIC5naHoyID0gMHgwMDA4LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfTUlYQV9WQ01dCQk9IHsgLmdoejUgPSAweDAwOTksIC5naHoyID0gMHgwMDk5LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfTUlYQV9DVFJMUFRBVF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX01JWEFfTE9CX0JJQVNdCT0geyAuZ2h6NSA9IDB4MDA0NCwgLmdoejIgPSAweDAwNDQsIFVQTE9BRCwgfSwKKwlbQjIwNTZfUlhfTUlYQV9DT1JFX0lEQUNdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9NSVhBX0NNRkJfSURBQ10JPSB7IC5naHo1ID0gMHgwMDQ0LCAuZ2h6MiA9IDB4MDA0NCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX01JWEFfQklBU19BVVhdCT0geyAuZ2h6NSA9IDB4MDAwZiwgLmdoejIgPSAweDAwMGYsIFVQTE9BRCwgfSwKKwlbQjIwNTZfUlhfTUlYQV9CSUFTX01BSU5dCT0geyAuZ2h6NSA9IDB4MDAwNiwgLmdoejIgPSAweDAwMDYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9NSVhBX0JJQVNfTUlTQ10JPSB7IC5naHo1ID0gMHgwMDA0LCAuZ2h6MiA9IDB4MDAwNCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX01JWEFfTUFTVF9CSUFTXQk9IHsgLmdoejUgPSAweDAwNTAsIC5naHoyID0gMHgwMDUwLCBVUExPQUQsIH0sCisJW0IyMDU2X1JYX01JWEdfTUFTVEVSXQkJPSB7IC5naHo1ID0gMHgwMDA4LCAuZ2h6MiA9IDB4MDAwOCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX01JWEdfVkNNXQkJPSB7IC5naHo1ID0gMHgwMDk5LCAuZ2h6MiA9IDB4MDA5OSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX01JWEdfQ1RSTFBUQVRdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9NSVhHX0xPQl9CSUFTXQk9IHsgLmdoejUgPSAweDAwMTEsIC5naHoyID0gMHgwMDExLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfTUlYR19DT1JFX0lEQUNdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9NSVhHX0NNRkJfSURBQ10JPSB7IC5naHo1ID0gMHgwMDQ0LCAuZ2h6MiA9IDB4MDA0NCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX01JWEdfQklBU19BVVhdCT0geyAuZ2h6NSA9IDB4MDAwNywgLmdoejIgPSAweDAwMDcsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9NSVhHX0JJQVNfTUFJTl0JPSB7IC5naHo1ID0gMHgwMDA2LCAuZ2h6MiA9IDB4MDAwNiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX01JWEdfQklBU19NSVNDXQk9IHsgLmdoejUgPSAweDAwMDQsIC5naHoyID0gMHgwMDA0LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfTUlYR19NQVNUX0JJQVNdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9USUFfTUFTVEVSXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1RJQV9JT1BBTVBdCQk9IHsgLmdoejUgPSAweDAwNjYsIC5naHoyID0gMHgwMDY2LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfVElBX1FPUEFNUF0JCT0geyAuZ2h6NSA9IDB4MDA2NiwgLmdoejIgPSAweDAwNjYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9USUFfSU1JU0NdCQk9IHsgLmdoejUgPSAweDAwNTcsIC5naHoyID0gMHgwMDU3LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfVElBX1FNSVNDXQkJPSB7IC5naHo1ID0gMHgwMDU3LCAuZ2h6MiA9IDB4MDA1NywgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1RJQV9HQUlOXQkJPSB7IC5naHo1ID0gMHgwMDQ0LCAuZ2h6MiA9IDB4MDA0NCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1RJQV9TUEFSRTFdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfVElBX1NQQVJFMl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9CQl9MUEZfTUFTVEVSXQk9IHsgLmdoejUgPSAweDAwMDgsIC5naHoyID0gMHgwMDA4LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfQUFDSV9NQVNURVJdCQk9IHsgLmdoejUgPSAweDAwMDgsIC5naHoyID0gMHgwMDA4LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhMUEZfSURBQ10JCT0geyAuZ2h6NSA9IDB4MDAwNywgLmdoejIgPSAweDAwMDcsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWExQRl9PUEFNUEJJQVNfTE9XUV0JPSB7IC5naHo1ID0gMHgwMDIyLCAuZ2h6MiA9IDB4MDAyMiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYTFBGX09QQU1QQklBU19ISUdIUV09IHsgLmdoejUgPSAweDAwMjIsIC5naHoyID0gMHgwMDIyLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhMUEZfQklBU19EQ0NBTkNFTF0JPSB7IC5naHo1ID0gMHgwMDAyLCAuZ2h6MiA9IDB4MDAwMiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYTFBGX09VVFZDTV0JCT0geyAuZ2h6NSA9IDB4MDAyMywgLmdoejIgPSAweDAwMjMsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWExQRl9JTlZDTV9CT0RZXQk9IHsgLmdoejUgPSAweDAwMDcsIC5naHoyID0gMHgwMDA3LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhMUEZfQ0NfT1BdCQk9IHsgLmdoejUgPSAweDAwNTUsIC5naHoyID0gMHgwMDU1LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhMUEZfR0FJTl0JCT0geyAuZ2h6NSA9IDB4MDAyMywgLmdoejIgPSAweDAwMjMsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWExQRl9RX0JXXQkJPSB7IC5naHo1ID0gMHgwMDQxLCAuZ2h6MiA9IDB4MDA0MSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYTFBGX0hQX0NPUk5FUl9CV10JPSB7IC5naHo1ID0gMHgwMDAxLCAuZ2h6MiA9IDB4MDAwMSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYTFBGX1JDQ0FMX0hQQ10JPSB7IC5naHo1ID0gMHgwMDBhLCAuZ2h6MiA9IDB4MDAwYSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYSFBGX09GRjBdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhIUEZfT0ZGMV0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWEhQRl9PRkYyXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYSFBGX09GRjNdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhIUEZfT0ZGNF0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWEhQRl9PRkY1XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYSFBGX09GRjZdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhIUEZfT0ZGN10JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWExQRl9SQ0NBTF9MUENdCT0geyAuZ2h6NSA9IDB4MDAwYywgLmdoejIgPSAweDAwMGMsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWExQRl9PRkZfMF0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWExQRl9PRkZfMV0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWExQRl9PRkZfMl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWExQRl9PRkZfM10JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWExQRl9PRkZfNF0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9VTlVTRURdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfVkdBX01BU1RFUl0JCT0geyAuZ2h6NSA9IDB4MDAyMiwgLmdoejIgPSAweDAwMjIsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9WR0FfQklBU10JCT0geyAuZ2h6NSA9IDB4MDAyMiwgLmdoejIgPSAweDAwMjIsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9WR0FfQklBU19EQ0NBTkNFTF0JPSB7IC5naHo1ID0gMHgwMDAyLCAuZ2h6MiA9IDB4MDAwMiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1ZHQV9HQUlOXQkJPSB7IC5naHo1ID0gMHgwMDBhLCAuZ2h6MiA9IDB4MDAwYSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1ZHQV9IUF9DT1JORVJfQlddCT0geyAuZ2h6NSA9IDB4MDAwMSwgLmdoejIgPSAweDAwMDEsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9WR0FCVUZfQklBU10JCT0geyAuZ2h6NSA9IDB4MDAyMiwgLmdoejIgPSAweDAwMjIsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9WR0FCVUZfR0FJTl9CV10JPSB7IC5naHo1ID0gMHgwMDMwLCAuZ2h6MiA9IDB4MDAzMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1RYRkJNSVhfQV0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9UWEZCTUlYX0ddCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhTUEFSRTFdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhTUEFSRTJdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhTUEFSRTNdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhTUEFSRTRdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhTUEFSRTVdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhTUEFSRTZdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhTUEFSRTddCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhTUEFSRThdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhTUEFSRTldCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhTUEFSRTEwXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYU1BBUkUxMV0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWFNQQVJFMTJdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhTUEFSRTEzXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYU1BBUkUxNF0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWFNQQVJFMTVdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhTUEFSRTE2XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1NUQVRVU19MTkFBX0dBSU5dCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9TVEFUVVNfTE5BR19HQUlOXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfU1RBVFVTX01JWFRJQV9HQUlOXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfU1RBVFVTX1JYTFBGX0dBSU5dCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9TVEFUVVNfVkdBX0JVRl9HQUlOXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfU1RBVFVTX1JYTFBGX1FdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9TVEFUVVNfUlhMUEZfQlVGX0JXXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfU1RBVFVTX1JYTFBGX1ZHQV9IUENdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9TVEFUVVNfUlhMUEZfUkNdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9TVEFUVVNfSFBDX1JDXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYjIwNTZfaW5pdHRhYl9lbnRyeSBiMjA1Nl9pbml0dGFiX3JldjRfc3luW10gPSB7CisJW0IyMDU2X1NZTl9SRVNFUlZFRF9BRERSMl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9SRVNFUlZFRF9BRERSM10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9SRVNFUlZFRF9BRERSNF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9SRVNFUlZFRF9BRERSNV0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9SRVNFUlZFRF9BRERSNl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9SRVNFUlZFRF9BRERSN10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9DT01fQ1RSTF0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fQ09NX1BVXQkJPSB7IC5naHo1ID0gMHgwMDAxLCAuZ2h6MiA9IDB4MDAwMSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9DT01fT1ZSXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9DT01fUkVTRVRdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0NPTV9SQ0FMXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9DT01fUkNfUlhMUEZdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fQ09NX1JDX1RYTFBGXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0NPTV9SQ19SWEhQRl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9SRVNFUlZFRF9BRERSMTZdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkVTRVJWRURfQUREUjE3XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1JFU0VSVkVEX0FERFIxOF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9SRVNFUlZFRF9BRERSMTldCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkVTRVJWRURfQUREUjIwXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1JFU0VSVkVEX0FERFIyMV0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9SRVNFUlZFRF9BRERSMjJdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkVTRVJWRURfQUREUjIzXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1JFU0VSVkVEX0FERFIyNF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9SRVNFUlZFRF9BRERSMjVdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkVTRVJWRURfQUREUjI2XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1JFU0VSVkVEX0FERFIyN10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9SRVNFUlZFRF9BRERSMjhdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkVTRVJWRURfQUREUjI5XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1JFU0VSVkVEX0FERFIzMF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9SRVNFUlZFRF9BRERSMzFdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fR1BJT19NQVNURVIxXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0dQSU9fTUFTVEVSMl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9UT1BCSUFTX01BU1RFUl0JPSB7IC5naHo1ID0gMHgwMDYwLCAuZ2h6MiA9IDB4MDA2MCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9UT1BCSUFTX1JDQUxdCT0geyAuZ2h6NSA9IDB4MDAwNiwgLmdoejIgPSAweDAwMDYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fQUZFUkVHXQkJPSB7IC5naHo1ID0gMHgwMDBjLCAuZ2h6MiA9IDB4MDAwYywgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9URU1QUFJPQ1NFTlNFXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1RFTVBQUk9DU0VOU0VJREFDXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1RFTVBQUk9DU0VOU0VSQ0FMXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xQT10JCQk9IHsgLmdoejUgPSAweDAwMDEsIC5naHoyID0gMHgwMDAxLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1ZERENBTF9NQVNURVJdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fVkREQ0FMX0lEQUNdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1ZERENBTF9TVEFUVVNdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkNBTF9NQVNURVJdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1JDQUxfQ09ERV9PVVRdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkNDQUxfQ1RSTDBdCQk9IHsgLmdoejUgPSAweDAwMGQsIC5naHoyID0gMHgwMDBkLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1JDQ0FMX0NUUkwxXQkJPSB7IC5naHo1ID0gMHgwMDFmLCAuZ2h6MiA9IDB4MDAxZiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9SQ0NBTF9DVFJMMl0JCT0geyAuZ2h6NSA9IDB4MDAxNSwgLmdoejIgPSAweDAwMTUsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkNDQUxfQ1RSTDNdCQk9IHsgLmdoejUgPSAweDAwMGYsIC5naHoyID0gMHgwMDBmLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1JDQ0FMX0NUUkw0XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9SQ0NBTF9DVFJMNV0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkNDQUxfQ1RSTDZdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1JDQ0FMX0NUUkw3XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9SQ0NBTF9DVFJMOF0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkNDQUxfQ1RSTDldCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1JDQ0FMX0NUUkwxMF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9SQ0NBTF9DVFJMMTFdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fWkNBTF9TUEFSRTFdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1pDQUxfU1BBUkUyXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfTUFTVDFdCQk9IHsgLmdoejUgPSAweDAwMTMsIC5naHoyID0gMHgwMDEzLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9NQVNUMl0JCT0geyAuZ2h6NSA9IDB4MDAwZiwgLmdoejIgPSAweDAwMGYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX01BU1QzXQkJPSB7IC5naHo1ID0gMHgwMDE4LCAuZ2h6MiA9IDB4MDAxOCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfQklBU19SRVNFVF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfWFRBTDBdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9YVEFMMV0JCT0geyAuZ2h6NSA9IDB4MDAyMCwgLmdoejIgPSAweDAwMjAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX1hUQUwzXQkJPSB7IC5naHo1ID0gMHgwMDIwLCAuZ2h6MiA9IDB4MDAyMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfWFRBTDRdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9YVEFMNV0JCT0geyAuZ2h6NSA9IDB4MDA3NywgLmdoejIgPSAweDAwNzcsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX1hUQUw2XQkJPSB7IC5naHo1ID0gMHgwMDA3LCAuZ2h6MiA9IDB4MDAwNywgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfUkVGRElWXQkJPSB7IC5naHo1ID0gMHgwMDAxLCAuZ2h6MiA9IDB4MDAwMSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfUEZEXQkJPSB7IC5naHo1ID0gMHgwMDA0LCAuZ2h6MiA9IDB4MDAwNCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfQ1AxXQkJPSB7IC5naHo1ID0gMHgwMDBmLCAuZ2h6MiA9IDB4MDAwZiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfQ1AyXQkJPSB7IC5naHo1ID0gMHgwMDMwLCAuZ2h6MiA9IDB4MDAzMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfQ1AzXQkJPSB7IC5naHo1ID0gMHgwMDMyLCAuZ2h6MiA9IDB4MDAzMiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfTE9PUEZJTFRFUjFdCT0geyAuZ2h6NSA9IDB4MDAwZCwgLmdoejIgPSAweDAwMGQsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX0xPT1BGSUxURVIyXQk9IHsgLmdoejUgPSAweDAwMGQsIC5naHoyID0gMHgwMDBkLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9MT09QRklMVEVSM10JPSB7IC5naHo1ID0gMHgwMDA0LCAuZ2h6MiA9IDB4MDAwNCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfTE9PUEZJTFRFUjRdCT0geyAuZ2h6NSA9IDB4MDAwNiwgLmdoejIgPSAweDAwMDYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX0xPT1BGSUxURVI1XQk9IHsgLmdoejUgPSAweDAwMDEsIC5naHoyID0gMHgwMDAxLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9NTUQxXQkJPSB7IC5naHo1ID0gMHgwMDFjLCAuZ2h6MiA9IDB4MDAxYywgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfTU1EMl0JCT0geyAuZ2h6NSA9IDB4MDAwMiwgLmdoejIgPSAweDAwMDIsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX1ZDTzFdCQk9IHsgLmdoejUgPSAweDAwMDIsIC5naHoyID0gMHgwMDAyLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9WQ08yXQkJPSB7IC5naHo1ID0gMHgwMGY3LCAuZ2h6MiA9IDB4MDBmNywgVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX01PTklUT1IxXQk9IHsgLmdoejUgPSAweDAwYjQsIC5naHoyID0gMHgwMGI0LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9NT05JVE9SMl0JPSB7IC5naHo1ID0gMHgwMGQyLCAuZ2h6MiA9IDB4MDBkMiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfVkNPQ0FMMV0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX1ZDT0NBTDJdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9WQ09DQUw0XQkJPSB7IC5naHo1ID0gMHgwMDA0LCAuZ2h6MiA9IDB4MDAwNCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfVkNPQ0FMNV0JCT0geyAuZ2h6NSA9IDB4MDA5NiwgLmdoejIgPSAweDAwOTYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX1ZDT0NBTDZdCQk9IHsgLmdoejUgPSAweDAwM2UsIC5naHoyID0gMHgwMDNlLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9WQ09DQUw3XQkJPSB7IC5naHo1ID0gMHgwMDNlLCAuZ2h6MiA9IDB4MDAzZSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfVkNPQ0FMOF0JCT0geyAuZ2h6NSA9IDB4MDAxMywgLmdoejIgPSAweDAwMTMsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX1ZDT0NBTDldCQk9IHsgLmdoejUgPSAweDAwMDIsIC5naHoyID0gMHgwMDAyLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9WQ09DQUwxMF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfVkNPQ0FMMTFdCT0geyAuZ2h6NSA9IDB4MDAwNywgLmdoejIgPSAweDAwMDcsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX1ZDT0NBTDEyXQk9IHsgLmdoejUgPSAweDAwMDcsIC5naHoyID0gMHgwMDA3LCBVUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfVkNPQ0FMMTNdCT0geyAuZ2h6NSA9IDB4MDAwOCwgLmdoejIgPSAweDAwMDgsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX1ZSRUddCQk9IHsgLmdoejUgPSAweDAwMDMsIC5naHoyID0gMHgwMDAzLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9TVEFUVVMxXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfU1RBVFVTMl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX1NUQVRVUzNdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX1BVMF0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fUFUxXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9QVTJdCQk9IHsgLmdoejUgPSAweDAwNDAsIC5naHoyID0gMHgwMDQwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX1BVM10JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fUFU1XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9QVTZdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX1BVN10JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fUFU4XQkJPSB7IC5naHo1ID0gMHgwMDAxLCAuZ2h6MiA9IDB4MDAwMSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9CSUFTX1JFU0VUXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX1JDQ1IxXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9WQ09CVUYxXQk9IHsgLmdoejUgPSAweDAwNjAsIC5naHoyID0gMHgwMDYwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX01JWEVSMV0JPSB7IC5naHo1ID0gMHgwMDY2LCAuZ2h6MiA9IDB4MDA2NiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9NSVhFUjJdCT0geyAuZ2h6NSA9IDB4MDAwYywgLmdoejIgPSAweDAwMGMsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQlVGMV0JCT0geyAuZ2h6NSA9IDB4MDA2NiwgLmdoejIgPSAweDAwNjYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5CVUYyXQkJPSB7IC5naHo1ID0gMHgwMDhmLCAuZ2h6MiA9IDB4MDA4ZiwgVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQlVGM10JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQlVGNF0JCT0geyAuZ2h6NSA9IDB4MDBjYywgLmdoejIgPSAweDAwY2MsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fRElWMV0JCT0geyAuZ2h6NSA9IDB4MDAwMSwgLmdoejIgPSAweDAwMDEsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fRElWMl0JCT0geyAuZ2h6NSA9IDB4MDA2NiwgLmdoejIgPSAweDAwNjYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fRElWM10JCT0geyAuZ2h6NSA9IDB4MDA2NiwgLmdoejIgPSAweDAwNjYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQUNMMV0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQUNMMl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQUNMM10JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQUNMNF0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQUNMNV0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQUNMNl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQUNMT1VUXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0FDTENBTDFdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQUNMQ0FMMl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9BQ0xDQUwzXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0NBTEVOXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9QRUFLREVUMV0JPSB7IC5naHo1ID0gMHgwMGZmLCAuZ2h6MiA9IDB4MDBmZiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9DT1JFX0FDTF9PVlJdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fUlhfRElGRl9BQ0xfT1ZSXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX1RYX0RJRkZfQUNMX09WUl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9SWF9DTU9TX0FDTF9PVlJdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fVFhfQ01PU19BQ0xfT1ZSXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX1ZDT0JVRjJdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fTUlYRVIzXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0JVRjVdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0JVRjZdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0NCVUZSWDFdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQ0JVRlJYMl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9DQlVGUlgzXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0NCVUZSWDRdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQ0JVRlRYMV0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9DQlVGVFgyXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0NCVUZUWDNdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQ0JVRlRYNF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9DTU9TUlgxXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0NNT1NSWDJdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQ01PU1JYM10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9DTU9TUlg0XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0NNT1NUWDFdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQ01PU1RYMl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9DTU9TVFgzXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0NNT1NUWDRdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fVkNPQlVGMl9PVlJWQUxdPSB7IC5naHo1ID0gMHgwMDA2LCAuZ2h6MiA9IDB4MDAwNiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9NSVhFUjNfT1ZSVkFMXQk9IHsgLmdoejUgPSAweDAwNjYsIC5naHoyID0gMHgwMDY2LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0JVRjVfT1ZSVkFMXQk9IHsgLmdoejUgPSAweDAwNjYsIC5naHoyID0gMHgwMDY2LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0JVRjZfT1ZSVkFMXQk9IHsgLmdoejUgPSAweDAwNjYsIC5naHoyID0gMHgwMDY2LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0NCVUZSWDFfT1ZSVkFMXT0geyAuZ2h6NSA9IDB4MDA2NiwgLmdoejIgPSAweDAwNjYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQ0JVRlJYMl9PVlJWQUxdPSB7IC5naHo1ID0gMHgwMDY2LCAuZ2h6MiA9IDB4MDA2NiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9DQlVGUlgzX09WUlZBTF09IHsgLmdoejUgPSAweDAwNjYsIC5naHoyID0gMHgwMDY2LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0NCVUZSWDRfT1ZSVkFMXT0geyAuZ2h6NSA9IDB4MDA2NiwgLmdoejIgPSAweDAwNjYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQ0JVRlRYMV9PVlJWQUxdPSB7IC5naHo1ID0gMHgwMDY2LCAuZ2h6MiA9IDB4MDA2NiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9DQlVGVFgyX09WUlZBTF09IHsgLmdoejUgPSAweDAwNjYsIC5naHoyID0gMHgwMDY2LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0NCVUZUWDNfT1ZSVkFMXT0geyAuZ2h6NSA9IDB4MDA2NiwgLmdoejIgPSAweDAwNjYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQ0JVRlRYNF9PVlJWQUxdPSB7IC5naHo1ID0gMHgwMDY2LCAuZ2h6MiA9IDB4MDA2NiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9DTU9TUlgxX09WUlZBTF09IHsgLmdoejUgPSAweDAwNjYsIC5naHoyID0gMHgwMDY2LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0NNT1NSWDJfT1ZSVkFMXT0geyAuZ2h6NSA9IDB4MDA2NiwgLmdoejIgPSAweDAwNjYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQ01PU1JYM19PVlJWQUxdPSB7IC5naHo1ID0gMHgwMDY2LCAuZ2h6MiA9IDB4MDA2NiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9DTU9TUlg0X09WUlZBTF09IHsgLmdoejUgPSAweDAwNjYsIC5naHoyID0gMHgwMDY2LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0NNT1NUWDFfT1ZSVkFMXT0geyAuZ2h6NSA9IDB4MDA2NiwgLmdoejIgPSAweDAwNjYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQ01PU1RYMl9PVlJWQUxdPSB7IC5naHo1ID0gMHgwMDY2LCAuZ2h6MiA9IDB4MDA2NiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9DTU9TVFgzX09WUlZBTF09IHsgLmdoejUgPSAweDAwNjYsIC5naHoyID0gMHgwMDY2LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0NNT1NUWDRfT1ZSVkFMXT0geyAuZ2h6NSA9IDB4MDA2NiwgLmdoejIgPSAweDAwNjYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQUNMX1dBSVRDTlRdCT0geyAuZ2h6NSA9IDB4MDAwYSwgLmdoejIgPSAweDAwMGEsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQ09SRV9DQUxWQUxJRF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9SWF9DTU9TX0NBTFZBTElEXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX1RYX0NNT1NfVkFMSURdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBiMjA1Nl9pbml0dGFiX2VudHJ5IGIyMDU2X2luaXR0YWJfcmV2NF90eFtdID0geworCVtCMjA1Nl9UWF9SRVNFUlZFRF9BRERSMl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFIzXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfUkVTRVJWRURfQUREUjRdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9SRVNFUlZFRF9BRERSNV0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFI2XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfUkVTRVJWRURfQUREUjddCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9DT01fQ1RSTF0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9DT01fUFVdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfQ09NX09WUl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9DT01fUkVTRVRdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfQ09NX1JDQUxdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfQ09NX1JDX1JYTFBGXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0NPTV9SQ19UWExQRl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9DT01fUkNfUlhIUEZdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfUkVTRVJWRURfQUREUjE2XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfUkVTRVJWRURfQUREUjE3XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfUkVTRVJWRURfQUREUjE4XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfUkVTRVJWRURfQUREUjE5XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfUkVTRVJWRURfQUREUjIwXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfUkVTRVJWRURfQUREUjIxXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfUkVTRVJWRURfQUREUjIyXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfUkVTRVJWRURfQUREUjIzXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfUkVTRVJWRURfQUREUjI0XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfUkVTRVJWRURfQUREUjI1XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfUkVTRVJWRURfQUREUjI2XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfUkVTRVJWRURfQUREUjI3XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfUkVTRVJWRURfQUREUjI4XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfUkVTRVJWRURfQUREUjI5XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfUkVTRVJWRURfQUREUjMwXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfUkVTRVJWRURfQUREUjMxXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfSVFDQUxfR0FJTl9CV10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0xPRlRfRklORV9JXQkJPSB7IC5naHo1ID0gMHgwMDg4LCAuZ2h6MiA9IDB4MDA4OCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0xPRlRfRklORV9RXQkJPSB7IC5naHo1ID0gMHgwMDg4LCAuZ2h6MiA9IDB4MDA4OCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0xPRlRfQ09BUlNFX0ldCT0geyAuZ2h6NSA9IDB4MDA4OCwgLmdoejIgPSAweDAwODgsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9MT0ZUX0NPQVJTRV9RXQk9IHsgLmdoejUgPSAweDAwODgsIC5naHoyID0gMHgwMDg4LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhfQ09NX01BU1RFUjFdCT0geyAuZ2h6NSA9IDB4MDAwYywgLmdoejIgPSAweDAwMGMsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWF9DT01fTUFTVEVSMl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JYSVFDQUxfVFhNVVhdCT0geyAuZ2h6NSA9IDB4MDAwMywgLmdoejIgPSAweDAwMDMsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWF9TU0lfTUFTVEVSXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfSVFDQUxfVkNNX0hHXQkJPSB7IC5naHo1ID0gMHgwMDAzLCAuZ2h6MiA9IDB4MDAwMywgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0lRQ0FMX0lEQUNdCQk9IHsgLmdoejUgPSAweDAwMzcsIC5naHoyID0gMHgwMDM3LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFNTSV9WQ01dCQk9IHsgLmdoejUgPSAweDAwMDMsIC5naHoyID0gMHgwMDAzLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhfQU1QX0RFVF0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWF9TU0lfTVVYXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RTU0lBXQkJPSB7IC5naHo1ID0gMHgwMDAxLCAuZ2h6MiA9IDB4MDAwMSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RTU0lHXQkJPSB7IC5naHo1ID0gMHgwMDAxLCAuZ2h6MiA9IDB4MDAwMSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RTU0lfTUlTQzFdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFNTSV9NSVNDMl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UU1NJX01JU0MzXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1BBX1NQQVJFMV0JCT0geyAuZ2h6NSA9IDB4MDAxMSwgLmdoejIgPSAweDAwMTEsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QQV9TUEFSRTJdCQk9IHsgLmdoejUgPSAweDAwMTEsIC5naHoyID0gMHgwMDExLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfSU5UUEFBX01BU1RFUl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0lOVFBBQV9HQUlOXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0lOVFBBQV9CT09TVF9UVU5FXQk9IHsgLmdoejUgPSAweDAwMDMsIC5naHoyID0gMHgwMDAzLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfSU5UUEFBX0lBVVhfU1RBVF0JPSB7IC5naHo1ID0gMHgwMDBmLCAuZ2h6MiA9IDB4MDAwZiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0lOVFBBQV9JQVVYX0RZTl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0lOVFBBQV9JTUFJTl9TVEFUXQk9IHsgLmdoejUgPSAweDAwMmQsIC5naHoyID0gMHgwMDJkLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfSU5UUEFBX0lNQUlOX0RZTl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0lOVFBBQV9DQVNDQklBU10JPSB7IC5naHo1ID0gMHgwMDZlLCAuZ2h6MiA9IDB4MDA2ZSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0lOVFBBQV9QQVNMT1BFXQk9IHsgLmdoejUgPSAweDAwZjAsIC5naHoyID0gMHgwMGYwLCBVUExPQUQsIH0sCisJW0IyMDU2X1RYX0lOVFBBQV9QQV9NSVNDXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfSU5UUEFHX01BU1RFUl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0lOVFBBR19HQUlOXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0lOVFBBR19CT09TVF9UVU5FXQk9IHsgLmdoejUgPSAweDAwMDMsIC5naHoyID0gMHgwMDAzLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfSU5UUEFHX0lBVVhfU1RBVF0JPSB7IC5naHo1ID0gMHgwMDAzLCAuZ2h6MiA9IDB4MDAwMywgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0lOVFBBR19JQVVYX0RZTl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0lOVFBBR19JTUFJTl9TVEFUXQk9IHsgLmdoejUgPSAweDAwMWUsIC5naHoyID0gMHgwMDFlLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfSU5UUEFHX0lNQUlOX0RZTl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0lOVFBBR19DQVNDQklBU10JPSB7IC5naHo1ID0gMHgwMDZlLCAuZ2h6MiA9IDB4MDA2ZSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0lOVFBBR19QQVNMT1BFXQk9IHsgLmdoejUgPSAweDAwZjAsIC5naHoyID0gMHgwMGYwLCBVUExPQUQsIH0sCisJW0IyMDU2X1RYX0lOVFBBR19QQV9NSVNDXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfUEFEQV9NQVNURVJdCQk9IHsgLmdoejUgPSAweDAwMDIsIC5naHoyID0gMHgwMDAyLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfUEFEQV9JREFDXQkJPSB7IC5naHo1ID0gMHgwMGZmLCAuZ2h6MiA9IDB4MDBmZiwgVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QQURBX0NBU0NCSUFTXQk9IHsgLmdoejUgPSAweDAwMGMsIC5naHoyID0gMHgwMDBjLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfUEFEQV9HQUlOXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1BBREFfQk9PU1RfVFVORV0JPSB7IC5naHo1ID0gMHgwMDM4LCAuZ2h6MiA9IDB4MDAzOCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1BBREFfU0xPUEVdCQk9IHsgLmdoejUgPSAweDAwNzAsIC5naHoyID0gMHgwMDcwLCBVUExPQUQsIH0sCisJW0IyMDU2X1RYX1BBREdfTUFTVEVSXQkJPSB7IC5naHo1ID0gMHgwMDAyLCAuZ2h6MiA9IDB4MDAwMiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1BBREdfSURBQ10JCT0geyAuZ2h6NSA9IDB4MDA4OCwgLmdoejIgPSAweDAwODgsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QQURHX0NBU0NCSUFTXQk9IHsgLmdoejUgPSAweDAwMGMsIC5naHoyID0gMHgwMDBjLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfUEFER19HQUlOXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1BBREdfQk9PU1RfVFVORV0JPSB7IC5naHo1ID0gMHgwMDA4LCAuZ2h6MiA9IDB4MDAwOCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1BBREdfU0xPUEVdCQk9IHsgLmdoejUgPSAweDAwNzAsIC5naHoyID0gMHgwMDcwLCBVUExPQUQsIH0sCisJW0IyMDU2X1RYX1BHQUFfTUFTVEVSXQkJPSB7IC5naHo1ID0gMHgwMDAyLCAuZ2h6MiA9IDB4MDAwMiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1BHQUFfSURBQ10JCT0geyAuZ2h6NSA9IDB4MDBmZiwgLmdoejIgPSAweDAwZmYsIFVQTE9BRCwgfSwKKwlbQjIwNTZfVFhfUEdBQV9HQUlOXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1BHQUFfQk9PU1RfVFVORV0JPSB7IC5naHo1ID0gMHgwMDgzLCAuZ2h6MiA9IDB4MDA4MywgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1BHQUFfU0xPUEVdCQk9IHsgLmdoejUgPSAweDAwNzcsIC5naHoyID0gMHgwMDc3LCBVUExPQUQsIH0sCisJW0IyMDU2X1RYX1BHQUFfTUlTQ10JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QR0FHX01BU1RFUl0JCT0geyAuZ2h6NSA9IDB4MDAwMiwgLmdoejIgPSAweDAwMDIsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QR0FHX0lEQUNdCQk9IHsgLmdoejUgPSAweDAwODgsIC5naHoyID0gMHgwMDg4LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfUEdBR19HQUlOXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1BHQUdfQk9PU1RfVFVORV0JPSB7IC5naHo1ID0gMHgwMDA4LCAuZ2h6MiA9IDB4MDAwOCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1BHQUdfU0xPUEVdCQk9IHsgLmdoejUgPSAweDAwNzcsIC5naHoyID0gMHgwMDc3LCBVUExPQUQsIH0sCisJW0IyMDU2X1RYX1BHQUdfTUlTQ10JCT0geyAuZ2h6NSA9IDB4MDAwMSwgLmdoejIgPSAweDAwMDEsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9NSVhBX01BU1RFUl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9NSVhBX0JPT1NUX1RVTkVdCT0geyAuZ2h6NSA9IDB4MDAwNywgLmdoejIgPSAweDAwMDcsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9NSVhHXQkJCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9NSVhHX0JPT1NUX1RVTkVdCT0geyAuZ2h6NSA9IDB4MDAwNywgLmdoejIgPSAweDAwMDcsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9CQl9HTV9NQVNURVJdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfR01CQl9HTV0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9HTUJCX0lEQUNdCQk9IHsgLmdoejUgPSAweDAwNzIsIC5naHoyID0gMHgwMDcyLCBVUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYTFBGX01BU1RFUl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWExQRl9SQ0NBTF0JCT0geyAuZ2h6NSA9IDB4MDAwYSwgLmdoejIgPSAweDAwMGEsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWExQRl9SQ0NBTF9PRkYwXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhMUEZfUkNDQUxfT0ZGMV0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYTFBGX1JDQ0FMX09GRjJdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWExQRl9SQ0NBTF9PRkYzXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhMUEZfUkNDQUxfT0ZGNF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYTFBGX1JDQ0FMX09GRjVdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWExQRl9SQ0NBTF9PRkY2XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhMUEZfQlddCQk9IHsgLmdoejUgPSAweDAwMDIsIC5naHoyID0gMHgwMDAyLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhMUEZfR0FJTl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWExQRl9JREFDXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYTFBGX0lEQUNfMF0JCT0geyAuZ2h6NSA9IDB4MDAwZSwgLmdoejIgPSAweDAwMGUsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWExQRl9JREFDXzFdCQk9IHsgLmdoejUgPSAweDAwMGUsIC5naHoyID0gMHgwMDBlLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhMUEZfSURBQ18yXQkJPSB7IC5naHo1ID0gMHgwMDBlLCAuZ2h6MiA9IDB4MDAwZSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYTFBGX0lEQUNfM10JCT0geyAuZ2h6NSA9IDB4MDAxMywgLmdoejIgPSAweDAwMTMsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWExQRl9JREFDXzRdCQk9IHsgLmdoejUgPSAweDAwMTMsIC5naHoyID0gMHgwMDEzLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhMUEZfSURBQ181XQkJPSB7IC5naHo1ID0gMHgwMDFiLCAuZ2h6MiA9IDB4MDAxYiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYTFBGX0lEQUNfNl0JCT0geyAuZ2h6NSA9IDB4MDAxYiwgLmdoejIgPSAweDAwMWIsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWExQRl9PUEFNUF9JREFDXQk9IHsgLmdoejUgPSAweDAwNTUsIC5naHoyID0gMHgwMDU1LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhMUEZfTUlTQ10JCT0geyAuZ2h6NSA9IDB4MDA1YiwgLmdoejIgPSAweDAwNWIsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWFNQQVJFMV0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWFNQQVJFMl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWFNQQVJFM10JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWFNQQVJFNF0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWFNQQVJFNV0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWFNQQVJFNl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWFNQQVJFN10JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWFNQQVJFOF0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWFNQQVJFOV0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWFNQQVJFMTBdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhTUEFSRTExXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYU1BBUkUxMl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWFNQQVJFMTNdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhTUEFSRTE0XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYU1BBUkUxNV0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWFNQQVJFMTZdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfU1RBVFVTX0lOVFBBX0dBSU5dCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9TVEFUVVNfUEFEX0dBSU5dCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9TVEFUVVNfUEdBX0dBSU5dCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9TVEFUVVNfR01fVFhMUEZfR0FJTl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1NUQVRVU19UWExQRl9CV10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1NUQVRVU19UWExQRl9SQ10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGIyMDU2X2luaXR0YWJfZW50cnkgYjIwNTZfaW5pdHRhYl9yZXY0X3J4W10gPSB7CisJW0IyMDU2X1JYX1JFU0VSVkVEX0FERFIyXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUkVTRVJWRURfQUREUjNdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SRVNFUlZFRF9BRERSNF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JFU0VSVkVEX0FERFI1XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUkVTRVJWRURfQUREUjZdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SRVNFUlZFRF9BRERSN10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX0NPTV9DVFJMXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX0NPTV9QVV0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9DT01fT1ZSXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX0NPTV9SRVNFVF0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9DT01fUkNBTF0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9DT01fUkNfUlhMUEZdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfQ09NX1JDX1RYTFBGXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX0NPTV9SQ19SWEhQRl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SRVNFUlZFRF9BRERSMTZdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SRVNFUlZFRF9BRERSMTddCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SRVNFUlZFRF9BRERSMThdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SRVNFUlZFRF9BRERSMTldCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SRVNFUlZFRF9BRERSMjBdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SRVNFUlZFRF9BRERSMjFdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SRVNFUlZFRF9BRERSMjJdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SRVNFUlZFRF9BRERSMjNdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SRVNFUlZFRF9BRERSMjRdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SRVNFUlZFRF9BRERSMjVdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SRVNFUlZFRF9BRERSMjZdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SRVNFUlZFRF9BRERSMjddCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SRVNFUlZFRF9BRERSMjhdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SRVNFUlZFRF9BRERSMjldCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SRVNFUlZFRF9BRERSMzBdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SRVNFUlZFRF9BRERSMzFdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWElRQ0FMX1JYTVVYXQk9IHsgLmdoejUgPSAweDAwMDMsIC5naHoyID0gMHgwMDAzLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlNTSV9QVV0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SU1NJX1NFTF0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SU1NJX0dBSU5dCQk9IHsgLmdoejUgPSAweDAwOTAsIC5naHoyID0gMHgwMDkwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlNTSV9OQl9JREFDXQkJPSB7IC5naHo1ID0gMHgwMDU1LCAuZ2h6MiA9IDB4MDA1NSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JTU0lfV0IySV9JREFDXzFdCT0geyAuZ2h6NSA9IDB4MDAxNSwgLmdoejIgPSAweDAwMTUsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SU1NJX1dCMklfSURBQ18yXQk9IHsgLmdoejUgPSAweDAwMDUsIC5naHoyID0gMHgwMDA1LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlNTSV9XQjJRX0lEQUNfMV0JPSB7IC5naHo1ID0gMHgwMDE1LCAuZ2h6MiA9IDB4MDAxNSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JTU0lfV0IyUV9JREFDXzJdCT0geyAuZ2h6NSA9IDB4MDAwNSwgLmdoejIgPSAweDAwMDUsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SU1NJX1BPTEVdCQk9IHsgLmdoejUgPSAweDAwMjAsIC5naHoyID0gMHgwMDIwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlNTSV9XQjFfSURBQ10JPSB7IC5naHo1ID0gMHgwMDExLCAuZ2h6MiA9IDB4MDAxMSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JTU0lfTUlTQ10JCT0geyAuZ2h6NSA9IDB4MDA5MCwgLmdoejIgPSAweDAwOTAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9MTkFBX01BU1RFUl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9MTkFBX1RVTkVdCQk9IHsgLmdoejUgPSAweDAwODgsIC5naHoyID0gMHgwMDg4LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfTE5BQV9HQUlOXQkJPSB7IC5naHo1ID0gMHgwMDMyLCAuZ2h6MiA9IDB4MDAzMiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX0xOQV9BX1NMT1BFXQkJPSB7IC5naHo1ID0gMHgwMDc3LCAuZ2h6MiA9IDB4MDA3NywgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX0JJQVNQT0xFX0xOQUExX0lEQUNdCT0geyAuZ2h6NSA9IDB4MDAxNywgLmdoejIgPSAweDAwMTcsIFVQTE9BRCwgfSwKKwlbQjIwNTZfUlhfTE5BQTJfSURBQ10JCT0geyAuZ2h6NSA9IDB4MDBmZiwgLmdoejIgPSAweDAwZmYsIFVQTE9BRCwgfSwKKwlbQjIwNTZfUlhfTE5BMUFfTUlTQ10JCT0geyAuZ2h6NSA9IDB4MDAyMCwgLmdoejIgPSAweDAwMjAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9MTkFHX01BU1RFUl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9MTkFHX1RVTkVdCQk9IHsgLmdoejUgPSAweDAwODgsIC5naHoyID0gMHgwMDg4LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfTE5BR19HQUlOXQkJPSB7IC5naHo1ID0gMHgwMDMyLCAuZ2h6MiA9IDB4MDAzMiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX0xOQV9HX1NMT1BFXQkJPSB7IC5naHo1ID0gMHgwMDc3LCAuZ2h6MiA9IDB4MDA3NywgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX0JJQVNQT0xFX0xOQUcxX0lEQUNdCT0geyAuZ2h6NSA9IDB4MDAxNywgLmdoejIgPSAweDAwMTcsIFVQTE9BRCwgfSwKKwlbQjIwNTZfUlhfTE5BRzJfSURBQ10JCT0geyAuZ2h6NSA9IDB4MDBmMCwgLmdoejIgPSAweDAwZjAsIFVQTE9BRCwgfSwKKwlbQjIwNTZfUlhfTE5BMUdfTUlTQ10JCT0geyAuZ2h6NSA9IDB4MDAyMCwgLmdoejIgPSAweDAwMjAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9NSVhBX01BU1RFUl0JCT0geyAuZ2h6NSA9IDB4MDAwOCwgLmdoejIgPSAweDAwMDgsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9NSVhBX1ZDTV0JCT0geyAuZ2h6NSA9IDB4MDA1NSwgLmdoejIgPSAweDAwNTUsIFVQTE9BRCwgfSwKKwlbQjIwNTZfUlhfTUlYQV9DVFJMUFRBVF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX01JWEFfTE9CX0JJQVNdCT0geyAuZ2h6NSA9IDB4MDA0NCwgLmdoejIgPSAweDAwNDQsIFVQTE9BRCwgfSwKKwlbQjIwNTZfUlhfTUlYQV9DT1JFX0lEQUNdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9NSVhBX0NNRkJfSURBQ10JPSB7IC5naHo1ID0gMHgwMDQ0LCAuZ2h6MiA9IDB4MDA0NCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX01JWEFfQklBU19BVVhdCT0geyAuZ2h6NSA9IDB4MDAwZiwgLmdoejIgPSAweDAwMGYsIFVQTE9BRCwgfSwKKwlbQjIwNTZfUlhfTUlYQV9CSUFTX01BSU5dCT0geyAuZ2h6NSA9IDB4MDAwNiwgLmdoejIgPSAweDAwMDYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9NSVhBX0JJQVNfTUlTQ10JPSB7IC5naHo1ID0gMHgwMDA0LCAuZ2h6MiA9IDB4MDAwNCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX01JWEFfTUFTVF9CSUFTXQk9IHsgLmdoejUgPSAweDAwNTAsIC5naHoyID0gMHgwMDUwLCBVUExPQUQsIH0sCisJW0IyMDU2X1JYX01JWEdfTUFTVEVSXQkJPSB7IC5naHo1ID0gMHgwMDA4LCAuZ2h6MiA9IDB4MDAwOCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX01JWEdfVkNNXQkJPSB7IC5naHo1ID0gMHgwMDU1LCAuZ2h6MiA9IDB4MDA1NSwgVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9NSVhHX0NUUkxQVEFUXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfTUlYR19MT0JfQklBU10JPSB7IC5naHo1ID0gMHgwMDExLCAuZ2h6MiA9IDB4MDAxMSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX01JWEdfQ09SRV9JREFDXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfTUlYR19DTUZCX0lEQUNdCT0geyAuZ2h6NSA9IDB4MDA0NCwgLmdoejIgPSAweDAwNDQsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9NSVhHX0JJQVNfQVVYXQk9IHsgLmdoejUgPSAweDAwMDcsIC5naHoyID0gMHgwMDA3LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfTUlYR19CSUFTX01BSU5dCT0geyAuZ2h6NSA9IDB4MDAwNiwgLmdoejIgPSAweDAwMDYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9NSVhHX0JJQVNfTUlTQ10JPSB7IC5naHo1ID0gMHgwMDA0LCAuZ2h6MiA9IDB4MDAwNCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX01JWEdfTUFTVF9CSUFTXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfVElBX01BU1RFUl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9USUFfSU9QQU1QXQkJPSB7IC5naHo1ID0gMHgwMDI2LCAuZ2h6MiA9IDB4MDAyNiwgVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9USUFfUU9QQU1QXQkJPSB7IC5naHo1ID0gMHgwMDI2LCAuZ2h6MiA9IDB4MDAyNiwgVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9USUFfSU1JU0NdCQk9IHsgLmdoejUgPSAweDAwMGYsIC5naHoyID0gMHgwMDBmLCBVUExPQUQsIH0sCisJW0IyMDU2X1JYX1RJQV9RTUlTQ10JCT0geyAuZ2h6NSA9IDB4MDAwZiwgLmdoejIgPSAweDAwMGYsIFVQTE9BRCwgfSwKKwlbQjIwNTZfUlhfVElBX0dBSU5dCQk9IHsgLmdoejUgPSAweDAwNDQsIC5naHoyID0gMHgwMDQ0LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfVElBX1NQQVJFMV0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9USUFfU1BBUkUyXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX0JCX0xQRl9NQVNURVJdCT0geyAuZ2h6NSA9IDB4MDAwOCwgLmdoejIgPSAweDAwMDgsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9BQUNJX01BU1RFUl0JCT0geyAuZ2h6NSA9IDB4MDAwOCwgLmdoejIgPSAweDAwMDgsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWExQRl9JREFDXQkJPSB7IC5naHo1ID0gMHgwMDA3LCAuZ2h6MiA9IDB4MDAwNywgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYTFBGX09QQU1QQklBU19MT1dRXQk9IHsgLmdoejUgPSAweDAwMjIsIC5naHoyID0gMHgwMDIyLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhMUEZfT1BBTVBCSUFTX0hJR0hRXT0geyAuZ2h6NSA9IDB4MDAyMiwgLmdoejIgPSAweDAwMjIsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWExQRl9CSUFTX0RDQ0FOQ0VMXQk9IHsgLmdoejUgPSAweDAwMDIsIC5naHoyID0gMHgwMDAyLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhMUEZfT1VUVkNNXQkJPSB7IC5naHo1ID0gMHgwMDJmLCAuZ2h6MiA9IDB4MDAyZiwgVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWExQRl9JTlZDTV9CT0RZXQk9IHsgLmdoejUgPSAweDAwMDcsIC5naHoyID0gMHgwMDA3LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhMUEZfQ0NfT1BdCQk9IHsgLmdoejUgPSAweDAwNTUsIC5naHoyID0gMHgwMDU1LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhMUEZfR0FJTl0JCT0geyAuZ2h6NSA9IDB4MDAyMywgLmdoejIgPSAweDAwMjMsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWExQRl9RX0JXXQkJPSB7IC5naHo1ID0gMHgwMDQxLCAuZ2h6MiA9IDB4MDA0MSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYTFBGX0hQX0NPUk5FUl9CV10JPSB7IC5naHo1ID0gMHgwMDAxLCAuZ2h6MiA9IDB4MDAwMSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYTFBGX1JDQ0FMX0hQQ10JPSB7IC5naHo1ID0gMHgwMDBhLCAuZ2h6MiA9IDB4MDAwYSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYSFBGX09GRjBdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhIUEZfT0ZGMV0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWEhQRl9PRkYyXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYSFBGX09GRjNdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhIUEZfT0ZGNF0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWEhQRl9PRkY1XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYSFBGX09GRjZdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhIUEZfT0ZGN10JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWExQRl9SQ0NBTF9MUENdCT0geyAuZ2h6NSA9IDB4MDAwYywgLmdoejIgPSAweDAwMGMsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWExQRl9PRkZfMF0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWExQRl9PRkZfMV0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWExQRl9PRkZfMl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWExQRl9PRkZfM10JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWExQRl9PRkZfNF0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9VTlVTRURdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfVkdBX01BU1RFUl0JCT0geyAuZ2h6NSA9IDB4MDAyMiwgLmdoejIgPSAweDAwMjIsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9WR0FfQklBU10JCT0geyAuZ2h6NSA9IDB4MDAyMiwgLmdoejIgPSAweDAwMjIsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9WR0FfQklBU19EQ0NBTkNFTF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9WR0FfR0FJTl0JCT0geyAuZ2h6NSA9IDB4MDAwYSwgLmdoejIgPSAweDAwMGEsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9WR0FfSFBfQ09STkVSX0JXXQk9IHsgLmdoejUgPSAweDAwMDEsIC5naHoyID0gMHgwMDAxLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfVkdBQlVGX0JJQVNdCQk9IHsgLmdoejUgPSAweDAwMjIsIC5naHoyID0gMHgwMDIyLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfVkdBQlVGX0dBSU5fQlddCT0geyAuZ2h6NSA9IDB4MDAzMCwgLmdoejIgPSAweDAwMzAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9UWEZCTUlYX0FdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfVFhGQk1JWF9HXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYU1BBUkUxXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYU1BBUkUyXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYU1BBUkUzXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYU1BBUkU0XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYU1BBUkU1XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYU1BBUkU2XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYU1BBUkU3XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYU1BBUkU4XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYU1BBUkU5XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYU1BBUkUxMF0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWFNQQVJFMTFdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhTUEFSRTEyXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYU1BBUkUxM10JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWFNQQVJFMTRdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhTUEFSRTE1XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYU1BBUkUxNl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9TVEFUVVNfTE5BQV9HQUlOXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfU1RBVFVTX0xOQUdfR0FJTl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1NUQVRVU19NSVhUSUFfR0FJTl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1NUQVRVU19SWExQRl9HQUlOXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfU1RBVFVTX1ZHQV9CVUZfR0FJTl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1NUQVRVU19SWExQRl9RXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfU1RBVFVTX1JYTFBGX0JVRl9CV10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1NUQVRVU19SWExQRl9WR0FfSFBDXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfU1RBVFVTX1JYTFBGX1JDXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfU1RBVFVTX0hQQ19SQ10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGIyMDU2X2luaXR0YWJfZW50cnkgYjIwNTZfaW5pdHRhYl9yZXY1X3N5bltdID0geworCVtCMjA1Nl9TWU5fUkVTRVJWRURfQUREUjJdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkVTRVJWRURfQUREUjNdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkVTRVJWRURfQUREUjRdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkVTRVJWRURfQUREUjVdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkVTRVJWRURfQUREUjZdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkVTRVJWRURfQUREUjddCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fQ09NX0NUUkxdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0NPTV9QVV0JCT0geyAuZ2h6NSA9IDB4MDAwMSwgLmdoejIgPSAweDAwMDEsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fQ09NX09WUl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fQ09NX1JFU0VUXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9DT01fUkNBTF0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fQ09NX1JDX1JYTFBGXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0NPTV9SQ19UWExQRl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9DT01fUkNfUlhIUEZdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkVTRVJWRURfQUREUjE2XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1JFU0VSVkVEX0FERFIxN10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9SRVNFUlZFRF9BRERSMThdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkVTRVJWRURfQUREUjE5XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1JFU0VSVkVEX0FERFIyMF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9SRVNFUlZFRF9BRERSMjFdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkVTRVJWRURfQUREUjIyXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1JFU0VSVkVEX0FERFIyM10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9SRVNFUlZFRF9BRERSMjRdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkVTRVJWRURfQUREUjI1XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1JFU0VSVkVEX0FERFIyNl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9SRVNFUlZFRF9BRERSMjddCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkVTRVJWRURfQUREUjI4XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1JFU0VSVkVEX0FERFIyOV0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9SRVNFUlZFRF9BRERSMzBdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkVTRVJWRURfQUREUjMxXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0dQSU9fTUFTVEVSMV0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9HUElPX01BU1RFUjJdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fVE9QQklBU19NQVNURVJdCT0geyAuZ2h6NSA9IDB4MDA2MCwgLmdoejIgPSAweDAwNjAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fVE9QQklBU19SQ0FMXQk9IHsgLmdoejUgPSAweDAwMDYsIC5naHoyID0gMHgwMDA2LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0FGRVJFR10JCT0geyAuZ2h6NSA9IDB4MDAwYywgLmdoejIgPSAweDAwMGMsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fVEVNUFBST0NTRU5TRV0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9URU1QUFJPQ1NFTlNFSURBQ10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9URU1QUFJPQ1NFTlNFUkNBTF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MUE9dCQkJPSB7IC5naHo1ID0gMHgwMDAxLCAuZ2h6MiA9IDB4MDAwMSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9WRERDQUxfTUFTVEVSXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1ZERENBTF9JREFDXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9WRERDQUxfU1RBVFVTXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1JDQUxfTUFTVEVSXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9SQ0FMX0NPREVfT1VUXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1JDQ0FMX0NUUkwwXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9SQ0NBTF9DVFJMMV0JCT0geyAuZ2h6NSA9IDB4MDAxZiwgLmdoejIgPSAweDAwMWYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkNDQUxfQ1RSTDJdCQk9IHsgLmdoejUgPSAweDAwMTUsIC5naHoyID0gMHgwMDE1LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1JDQ0FMX0NUUkwzXQkJPSB7IC5naHo1ID0gMHgwMDBmLCAuZ2h6MiA9IDB4MDAwZiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9SQ0NBTF9DVFJMNF0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkNDQUxfQ1RSTDVdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1JDQ0FMX0NUUkw2XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9SQ0NBTF9DVFJMN10JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkNDQUxfQ1RSTDhdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1JDQ0FMX0NUUkw5XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9SQ0NBTF9DVFJMMTBdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkNDQUxfQ1RSTDExXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1pDQUxfU1BBUkUxXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9aQ0FMX1NQQVJFMl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX01BU1QxXQkJPSB7IC5naHo1ID0gMHgwMDEzLCAuZ2h6MiA9IDB4MDAxMywgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfTUFTVDJdCQk9IHsgLmdoejUgPSAweDAwMGYsIC5naHoyID0gMHgwMDBmLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9NQVNUM10JCT0geyAuZ2h6NSA9IDB4MDAxOCwgLmdoejIgPSAweDAwMTgsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX0JJQVNfUkVTRVRdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX1hUQUwwXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfWFRBTDFdCQk9IHsgLmdoejUgPSAweDAwMjAsIC5naHoyID0gMHgwMDIwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9YVEFMM10JCT0geyAuZ2h6NSA9IDB4MDAyMCwgLmdoejIgPSAweDAwMjAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX1hUQUw0XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfWFRBTDVdCQk9IHsgLmdoejUgPSAweDAwNzcsIC5naHoyID0gMHgwMDc3LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9YVEFMNl0JCT0geyAuZ2h6NSA9IDB4MDAwNywgLmdoejIgPSAweDAwMDcsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX1JFRkRJVl0JCT0geyAuZ2h6NSA9IDB4MDAwMSwgLmdoejIgPSAweDAwMDEsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX1BGRF0JCT0geyAuZ2h6NSA9IDB4MDAwNCwgLmdoejIgPSAweDAwMDQsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX0NQMV0JCT0geyAuZ2h6NSA9IDB4MDAwZiwgLmdoejIgPSAweDAwMGYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX0NQMl0JCT0geyAuZ2h6NSA9IDB4MDAzMCwgLmdoejIgPSAweDAwMzAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX0NQM10JCT0geyAuZ2h6NSA9IDB4MDAzMiwgLmdoejIgPSAweDAwMzIsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX0xPT1BGSUxURVIxXQk9IHsgLmdoejUgPSAweDAwMGQsIC5naHoyID0gMHgwMDBkLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9MT09QRklMVEVSMl0JPSB7IC5naHo1ID0gMHgwMDBkLCAuZ2h6MiA9IDB4MDAwZCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfTE9PUEZJTFRFUjNdCT0geyAuZ2h6NSA9IDB4MDAwNCwgLmdoejIgPSAweDAwMDQsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX0xPT1BGSUxURVI0XQk9IHsgLmdoejUgPSAweDAwMDYsIC5naHoyID0gMHgwMDA2LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9MT09QRklMVEVSNV0JPSB7IC5naHo1ID0gMHgwMDAxLCAuZ2h6MiA9IDB4MDAwMSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfTU1EMV0JCT0geyAuZ2h6NSA9IDB4MDAxYywgLmdoejIgPSAweDAwMWMsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX01NRDJdCQk9IHsgLmdoejUgPSAweDAwMDIsIC5naHoyID0gMHgwMDAyLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9WQ08xXQkJPSB7IC5naHo1ID0gMHgwMDAyLCAuZ2h6MiA9IDB4MDAwMiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfVkNPMl0JCT0geyAuZ2h6NSA9IDB4MDBmNywgLmdoejIgPSAweDAwZjcsIFVQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9NT05JVE9SMV0JPSB7IC5naHo1ID0gMHgwMGI0LCAuZ2h6MiA9IDB4MDBiNCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfTU9OSVRPUjJdCT0geyAuZ2h6NSA9IDB4MDBkMiwgLmdoejIgPSAweDAwZDIsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX1ZDT0NBTDFdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9WQ09DQUwyXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfVkNPQ0FMNF0JCT0geyAuZ2h6NSA9IDB4MDAwNCwgLmdoejIgPSAweDAwMDQsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX1ZDT0NBTDVdCQk9IHsgLmdoejUgPSAweDAwOTYsIC5naHoyID0gMHgwMDk2LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9WQ09DQUw2XQkJPSB7IC5naHo1ID0gMHgwMDNlLCAuZ2h6MiA9IDB4MDAzZSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfVkNPQ0FMN10JCT0geyAuZ2h6NSA9IDB4MDAzZSwgLmdoejIgPSAweDAwM2UsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX1ZDT0NBTDhdCQk9IHsgLmdoejUgPSAweDAwMTMsIC5naHoyID0gMHgwMDEzLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9WQ09DQUw5XQkJPSB7IC5naHo1ID0gMHgwMDAyLCAuZ2h6MiA9IDB4MDAwMiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfVkNPQ0FMMTBdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX1ZDT0NBTDExXQk9IHsgLmdoejUgPSAweDAwMDcsIC5naHoyID0gMHgwMDA3LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9WQ09DQUwxMl0JPSB7IC5naHo1ID0gMHgwMDA3LCAuZ2h6MiA9IDB4MDAwNywgVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX1ZDT0NBTDEzXQk9IHsgLmdoejUgPSAweDAwMDgsIC5naHoyID0gMHgwMDA4LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9WUkVHXQkJPSB7IC5naHo1ID0gMHgwMDAzLCAuZ2h6MiA9IDB4MDAwMywgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfU1RBVFVTMV0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX1NUQVRVUzJdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9TVEFUVVMzXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9QVTBdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX1BVMV0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fUFUyXQkJPSB7IC5naHo1ID0gMHgwMDQwLCAuZ2h6MiA9IDB4MDA0MCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9QVTNdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX1BVNV0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fUFU2XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9QVTddCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX1BVOF0JCT0geyAuZ2h6NSA9IDB4MDAwMSwgLmdoejIgPSAweDAwMDEsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQklBU19SRVNFVF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9SQ0NSMV0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fVkNPQlVGMV0JPSB7IC5naHo1ID0gMHgwMDYwLCAuZ2h6MiA9IDB4MDA2MCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9NSVhFUjFdCT0geyAuZ2h6NSA9IDB4MDA2NiwgLmdoejIgPSAweDAwNjYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fTUlYRVIyXQk9IHsgLmdoejUgPSAweDAwMGMsIC5naHoyID0gMHgwMDBjLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0JVRjFdCQk9IHsgLmdoejUgPSAweDAwNjYsIC5naHoyID0gMHgwMDY2LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOQlVGMl0JCT0geyAuZ2h6NSA9IDB4MDA4ZiwgLmdoejIgPSAweDAwOGYsIFVQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0JVRjNdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0JVRjRdCQk9IHsgLmdoejUgPSAweDAwY2MsIC5naHoyID0gMHgwMGNjLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0RJVjFdCQk9IHsgLmdoejUgPSAweDAwMDEsIC5naHoyID0gMHgwMDAxLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0RJVjJdCQk9IHsgLmdoejUgPSAweDAwNjYsIC5naHoyID0gMHgwMDY2LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0RJVjNdCQk9IHsgLmdoejUgPSAweDAwNjYsIC5naHoyID0gMHgwMDY2LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0FDTDFdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0FDTDJdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0FDTDNdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0FDTDRdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0FDTDVdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0FDTDZdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0FDTE9VVF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9BQ0xDQUwxXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0FDTENBTDJdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQUNMQ0FMM10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9DQUxFTl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fUEVBS0RFVDFdCT0geyAuZ2h6NSA9IDB4MDBmZiwgLmdoejIgPSAweDAwZmYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQ09SRV9BQ0xfT1ZSXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX1JYX0RJRkZfQUNMX09WUl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9UWF9ESUZGX0FDTF9PVlJdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fUlhfQ01PU19BQ0xfT1ZSXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX1RYX0NNT1NfQUNMX09WUl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9WQ09CVUYyXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX01JWEVSM10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9CVUY1XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9CVUY2XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9DQlVGUlgxXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0NCVUZSWDJdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQ0JVRlJYM10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9DQlVGUlg0XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0NCVUZUWDFdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQ0JVRlRYMl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9DQlVGVFgzXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0NCVUZUWDRdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQ01PU1JYMV0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9DTU9TUlgyXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0NNT1NSWDNdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQ01PU1JYNF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9DTU9TVFgxXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0NNT1NUWDJdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQ01PU1RYM10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9DTU9TVFg0XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX1ZDT0JVRjJfT1ZSVkFMXT0geyAuZ2h6NSA9IDB4MDAwNiwgLmdoejIgPSAweDAwMDYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fTUlYRVIzX09WUlZBTF0JPSB7IC5naHo1ID0gMHgwMDY2LCAuZ2h6MiA9IDB4MDA2NiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9CVUY1X09WUlZBTF0JPSB7IC5naHo1ID0gMHgwMDY2LCAuZ2h6MiA9IDB4MDA2NiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9CVUY2X09WUlZBTF0JPSB7IC5naHo1ID0gMHgwMDY2LCAuZ2h6MiA9IDB4MDA2NiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9DQlVGUlgxX09WUlZBTF09IHsgLmdoejUgPSAweDAwNjYsIC5naHoyID0gMHgwMDY2LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0NCVUZSWDJfT1ZSVkFMXT0geyAuZ2h6NSA9IDB4MDA2NiwgLmdoejIgPSAweDAwNjYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQ0JVRlJYM19PVlJWQUxdPSB7IC5naHo1ID0gMHgwMDY2LCAuZ2h6MiA9IDB4MDA2NiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9DQlVGUlg0X09WUlZBTF09IHsgLmdoejUgPSAweDAwNjYsIC5naHoyID0gMHgwMDY2LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0NCVUZUWDFfT1ZSVkFMXT0geyAuZ2h6NSA9IDB4MDA2NiwgLmdoejIgPSAweDAwNjYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQ0JVRlRYMl9PVlJWQUxdPSB7IC5naHo1ID0gMHgwMDY2LCAuZ2h6MiA9IDB4MDA2NiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9DQlVGVFgzX09WUlZBTF09IHsgLmdoejUgPSAweDAwNjYsIC5naHoyID0gMHgwMDY2LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0NCVUZUWDRfT1ZSVkFMXT0geyAuZ2h6NSA9IDB4MDA2NiwgLmdoejIgPSAweDAwNjYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQ01PU1JYMV9PVlJWQUxdPSB7IC5naHo1ID0gMHgwMDY2LCAuZ2h6MiA9IDB4MDA2NiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9DTU9TUlgyX09WUlZBTF09IHsgLmdoejUgPSAweDAwNjYsIC5naHoyID0gMHgwMDY2LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0NNT1NSWDNfT1ZSVkFMXT0geyAuZ2h6NSA9IDB4MDA2NiwgLmdoejIgPSAweDAwNjYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQ01PU1JYNF9PVlJWQUxdPSB7IC5naHo1ID0gMHgwMDY2LCAuZ2h6MiA9IDB4MDA2NiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9DTU9TVFgxX09WUlZBTF09IHsgLmdoejUgPSAweDAwNjYsIC5naHoyID0gMHgwMDY2LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0NNT1NUWDJfT1ZSVkFMXT0geyAuZ2h6NSA9IDB4MDA2NiwgLmdoejIgPSAweDAwNjYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQ01PU1RYM19PVlJWQUxdPSB7IC5naHo1ID0gMHgwMDY2LCAuZ2h6MiA9IDB4MDA2NiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9DTU9TVFg0X09WUlZBTF09IHsgLmdoejUgPSAweDAwNjYsIC5naHoyID0gMHgwMDY2LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0FDTF9XQUlUQ05UXQk9IHsgLmdoejUgPSAweDAwMGEsIC5naHoyID0gMHgwMDBhLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0NPUkVfQ0FMVkFMSURdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fUlhfQ01PU19DQUxWQUxJRF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9UWF9DTU9TX1ZBTElEXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYjIwNTZfaW5pdHRhYl9lbnRyeSBiMjA1Nl9pbml0dGFiX3JldjVfdHhbXSA9IHsKKwlbQjIwNTZfVFhfUkVTRVJWRURfQUREUjJdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9SRVNFUlZFRF9BRERSM10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFI0XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfUkVTRVJWRURfQUREUjVdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9SRVNFUlZFRF9BRERSNl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFI3XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfQ09NX0NUUkxdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfQ09NX1BVXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0NPTV9PVlJdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfQ09NX1JFU0VUXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0NPTV9SQ0FMXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0NPTV9SQ19SWExQRl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9DT01fUkNfVFhMUEZdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfQ09NX1JDX1JYSFBGXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFIxNl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFIxN10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFIxOF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFIxOV0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFIyMF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFIyMV0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFIyMl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFIyM10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFIyNF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFIyNV0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFIyNl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFIyN10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFIyOF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFIyOV0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFIzMF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFIzMV0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0lRQ0FMX0dBSU5fQlddCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9MT0ZUX0ZJTkVfSV0JCT0geyAuZ2h6NSA9IDB4MDA4OCwgLmdoejIgPSAweDAwODgsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9MT0ZUX0ZJTkVfUV0JCT0geyAuZ2h6NSA9IDB4MDA4OCwgLmdoejIgPSAweDAwODgsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9MT0ZUX0NPQVJTRV9JXQk9IHsgLmdoejUgPSAweDAwODgsIC5naHoyID0gMHgwMDg4LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfTE9GVF9DT0FSU0VfUV0JPSB7IC5naHo1ID0gMHgwMDg4LCAuZ2h6MiA9IDB4MDA4OCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYX0NPTV9NQVNURVIxXQk9IHsgLmdoejUgPSAweDAwMGMsIC5naHoyID0gMHgwMDBjLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhfQ09NX01BU1RFUjJdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9SWElRQ0FMX1RYTVVYXQk9IHsgLmdoejUgPSAweDAwMDMsIC5naHoyID0gMHgwMDAzLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhfU1NJX01BU1RFUl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0lRQ0FMX1ZDTV9IR10JCT0geyAuZ2h6NSA9IDB4MDAwMywgLmdoejIgPSAweDAwMDMsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9JUUNBTF9JREFDXQkJPSB7IC5naHo1ID0gMHgwMDM3LCAuZ2h6MiA9IDB4MDAzNywgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RTU0lfVkNNXQkJPSB7IC5naHo1ID0gMHgwMDAzLCAuZ2h6MiA9IDB4MDAwMywgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYX0FNUF9ERVRdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhfU1NJX01VWF0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UU1NJQV0JCT0geyAuZ2h6NSA9IDB4MDAwMSwgLmdoejIgPSAweDAwMDEsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UU1NJR10JCT0geyAuZ2h6NSA9IDB4MDAwMSwgLmdoejIgPSAweDAwMDEsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UU1NJX01JU0MxXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RTU0lfTUlTQzJdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFNTSV9NSVNDM10JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QQV9TUEFSRTFdCQk9IHsgLmdoejUgPSAweDAwMTEsIC5naHoyID0gMHgwMDExLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfUEFfU1BBUkUyXQkJPSB7IC5naHo1ID0gMHgwMDExLCAuZ2h6MiA9IDB4MDAxMSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0lOVFBBQV9NQVNURVJdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9JTlRQQUFfR0FJTl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9JTlRQQUFfQk9PU1RfVFVORV0JPSB7IC5naHo1ID0gMHgwMDAzLCAuZ2h6MiA9IDB4MDAwMywgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0lOVFBBQV9JQVVYX1NUQVRdCT0geyAuZ2h6NSA9IDB4MDAwZiwgLmdoejIgPSAweDAwMGYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9JTlRQQUFfSUFVWF9EWU5dCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9JTlRQQUFfSU1BSU5fU1RBVF0JPSB7IC5naHo1ID0gMHgwMDJkLCAuZ2h6MiA9IDB4MDAyZCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0lOVFBBQV9JTUFJTl9EWU5dCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9JTlRQQUFfQ0FTQ0JJQVNdCT0geyAuZ2h6NSA9IDB4MDA2ZSwgLmdoejIgPSAweDAwNmUsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9JTlRQQUFfUEFTTE9QRV0JPSB7IC5naHo1ID0gMHgwMGYwLCAuZ2h6MiA9IDB4MDBmMCwgVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9JTlRQQUFfUEFfTUlTQ10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0lOVFBBR19NQVNURVJdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9JTlRQQUdfR0FJTl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9JTlRQQUdfQk9PU1RfVFVORV0JPSB7IC5naHo1ID0gMHgwMDAzLCAuZ2h6MiA9IDB4MDAwMywgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0lOVFBBR19JQVVYX1NUQVRdCT0geyAuZ2h6NSA9IDB4MDAwMywgLmdoejIgPSAweDAwMDMsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9JTlRQQUdfSUFVWF9EWU5dCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9JTlRQQUdfSU1BSU5fU1RBVF0JPSB7IC5naHo1ID0gMHgwMDFlLCAuZ2h6MiA9IDB4MDAxZSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0lOVFBBR19JTUFJTl9EWU5dCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9JTlRQQUdfQ0FTQ0JJQVNdCT0geyAuZ2h6NSA9IDB4MDA2ZSwgLmdoejIgPSAweDAwNmUsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9JTlRQQUdfUEFTTE9QRV0JPSB7IC5naHo1ID0gMHgwMGYwLCAuZ2h6MiA9IDB4MDBmMCwgVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9JTlRQQUdfUEFfTUlTQ10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1BBREFfTUFTVEVSXQkJPSB7IC5naHo1ID0gMHgwMDAyLCAuZ2h6MiA9IDB4MDAwMiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1BBREFfSURBQ10JCT0geyAuZ2h6NSA9IDB4MDBmZiwgLmdoejIgPSAweDAwZmYsIFVQTE9BRCwgfSwKKwlbQjIwNTZfVFhfUEFEQV9DQVNDQklBU10JPSB7IC5naHo1ID0gMHgwMDBjLCAuZ2h6MiA9IDB4MDAwYywgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1BBREFfR0FJTl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QQURBX0JPT1NUX1RVTkVdCT0geyAuZ2h6NSA9IDB4MDAzOCwgLmdoejIgPSAweDAwMzgsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QQURBX1NMT1BFXQkJPSB7IC5naHo1ID0gMHgwMDcwLCAuZ2h6MiA9IDB4MDA3MCwgVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QQURHX01BU1RFUl0JCT0geyAuZ2h6NSA9IDB4MDAwMiwgLmdoejIgPSAweDAwMDIsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QQURHX0lEQUNdCQk9IHsgLmdoejUgPSAweDAwODgsIC5naHoyID0gMHgwMDg4LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfUEFER19DQVNDQklBU10JPSB7IC5naHo1ID0gMHgwMDBjLCAuZ2h6MiA9IDB4MDAwYywgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1BBREdfR0FJTl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QQURHX0JPT1NUX1RVTkVdCT0geyAuZ2h6NSA9IDB4MDAwOCwgLmdoejIgPSAweDAwMDgsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QQURHX1NMT1BFXQkJPSB7IC5naHo1ID0gMHgwMDcwLCAuZ2h6MiA9IDB4MDA3MCwgVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QR0FBX01BU1RFUl0JCT0geyAuZ2h6NSA9IDB4MDAwMiwgLmdoejIgPSAweDAwMDIsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QR0FBX0lEQUNdCQk9IHsgLmdoejUgPSAweDAwZmYsIC5naHoyID0gMHgwMGZmLCBVUExPQUQsIH0sCisJW0IyMDU2X1RYX1BHQUFfR0FJTl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QR0FBX0JPT1NUX1RVTkVdCT0geyAuZ2h6NSA9IDB4MDA4MywgLmdoejIgPSAweDAwODMsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QR0FBX1NMT1BFXQkJPSB7IC5naHo1ID0gMHgwMDc3LCAuZ2h6MiA9IDB4MDA3NywgVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QR0FBX01JU0NdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfUEdBR19NQVNURVJdCQk9IHsgLmdoejUgPSAweDAwMDIsIC5naHoyID0gMHgwMDAyLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfUEdBR19JREFDXQkJPSB7IC5naHo1ID0gMHgwMDg4LCAuZ2h6MiA9IDB4MDA4OCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1BHQUdfR0FJTl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QR0FHX0JPT1NUX1RVTkVdCT0geyAuZ2h6NSA9IDB4MDAwOCwgLmdoejIgPSAweDAwMDgsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QR0FHX1NMT1BFXQkJPSB7IC5naHo1ID0gMHgwMDc3LCAuZ2h6MiA9IDB4MDA3NywgVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QR0FHX01JU0NdCQk9IHsgLmdoejUgPSAweDAwMDEsIC5naHoyID0gMHgwMDAxLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfTUlYQV9NQVNURVJdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfTUlYQV9CT09TVF9UVU5FXQk9IHsgLmdoejUgPSAweDAwMDcsIC5naHoyID0gMHgwMDA3LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfTUlYR10JCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfTUlYR19CT09TVF9UVU5FXQk9IHsgLmdoejUgPSAweDAwMDcsIC5naHoyID0gMHgwMDA3LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfQkJfR01fTUFTVEVSXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0dNQkJfR01dCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfR01CQl9JREFDXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWExQRl9NQVNURVJdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhMUEZfUkNDQUxdCQk9IHsgLmdoejUgPSAweDAwMGEsIC5naHoyID0gMHgwMDBhLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhMUEZfUkNDQUxfT0ZGMF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYTFBGX1JDQ0FMX09GRjFdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWExQRl9SQ0NBTF9PRkYyXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhMUEZfUkNDQUxfT0ZGM10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYTFBGX1JDQ0FMX09GRjRdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWExQRl9SQ0NBTF9PRkY1XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhMUEZfUkNDQUxfT0ZGNl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYTFBGX0JXXQkJPSB7IC5naHo1ID0gMHgwMDAyLCAuZ2h6MiA9IDB4MDAwMiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYTFBGX0dBSU5dCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhMUEZfSURBQ10JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWExQRl9JREFDXzBdCQk9IHsgLmdoejUgPSAweDAwMGUsIC5naHoyID0gMHgwMDBlLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhMUEZfSURBQ18xXQkJPSB7IC5naHo1ID0gMHgwMDBlLCAuZ2h6MiA9IDB4MDAwZSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYTFBGX0lEQUNfMl0JCT0geyAuZ2h6NSA9IDB4MDAwZSwgLmdoejIgPSAweDAwMGUsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWExQRl9JREFDXzNdCQk9IHsgLmdoejUgPSAweDAwMTMsIC5naHoyID0gMHgwMDEzLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhMUEZfSURBQ180XQkJPSB7IC5naHo1ID0gMHgwMDEzLCAuZ2h6MiA9IDB4MDAxMywgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYTFBGX0lEQUNfNV0JCT0geyAuZ2h6NSA9IDB4MDAxYiwgLmdoejIgPSAweDAwMWIsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWExQRl9JREFDXzZdCQk9IHsgLmdoejUgPSAweDAwMWIsIC5naHoyID0gMHgwMDFiLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhMUEZfT1BBTVBfSURBQ10JPSB7IC5naHo1ID0gMHgwMDU1LCAuZ2h6MiA9IDB4MDA1NSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYTFBGX01JU0NdCQk9IHsgLmdoejUgPSAweDAwNWIsIC5naHoyID0gMHgwMDViLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhTUEFSRTFdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhTUEFSRTJdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhTUEFSRTNdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhTUEFSRTRdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhTUEFSRTVdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhTUEFSRTZdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhTUEFSRTddCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhTUEFSRThdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhTUEFSRTldCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhTUEFSRTEwXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYU1BBUkUxMV0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWFNQQVJFMTJdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhTUEFSRTEzXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYU1BBUkUxNF0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWFNQQVJFMTVdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhTUEFSRTE2XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1NUQVRVU19JTlRQQV9HQUlOXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfU1RBVFVTX1BBRF9HQUlOXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfU1RBVFVTX1BHQV9HQUlOXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfU1RBVFVTX0dNX1RYTFBGX0dBSU5dCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9TVEFUVVNfVFhMUEZfQlddCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9TVEFUVVNfVFhMUEZfUkNdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9HTUJCX0lEQUMwXQkJPSB7IC5naHo1ID0gMHgwMDcwLCAuZ2h6MiA9IDB4MDA3MCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0dNQkJfSURBQzFdCQk9IHsgLmdoejUgPSAweDAwNzAsIC5naHoyID0gMHgwMDcwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfR01CQl9JREFDMl0JCT0geyAuZ2h6NSA9IDB4MDA3MSwgLmdoejIgPSAweDAwNzEsIFVQTE9BRCwgfSwKKwlbQjIwNTZfVFhfR01CQl9JREFDM10JCT0geyAuZ2h6NSA9IDB4MDA3MSwgLmdoejIgPSAweDAwNzEsIFVQTE9BRCwgfSwKKwlbQjIwNTZfVFhfR01CQl9JREFDNF0JCT0geyAuZ2h6NSA9IDB4MDA3MiwgLmdoejIgPSAweDAwNzIsIFVQTE9BRCwgfSwKKwlbQjIwNTZfVFhfR01CQl9JREFDNV0JCT0geyAuZ2h6NSA9IDB4MDA3MywgLmdoejIgPSAweDAwNzMsIFVQTE9BRCwgfSwKKwlbQjIwNTZfVFhfR01CQl9JREFDNl0JCT0geyAuZ2h6NSA9IDB4MDA3NCwgLmdoejIgPSAweDAwNzQsIFVQTE9BRCwgfSwKKwlbQjIwNTZfVFhfR01CQl9JREFDN10JCT0geyAuZ2h6NSA9IDB4MDA3NSwgLmdoejIgPSAweDAwNzUsIFVQTE9BRCwgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYjIwNTZfaW5pdHRhYl9lbnRyeSBiMjA1Nl9pbml0dGFiX3JldjVfcnhbXSA9IHsKKwlbQjIwNTZfUlhfUkVTRVJWRURfQUREUjJdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SRVNFUlZFRF9BRERSM10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JFU0VSVkVEX0FERFI0XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUkVTRVJWRURfQUREUjVdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SRVNFUlZFRF9BRERSNl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JFU0VSVkVEX0FERFI3XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfQ09NX0NUUkxdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfQ09NX1BVXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX0NPTV9PVlJdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfQ09NX1JFU0VUXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX0NPTV9SQ0FMXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX0NPTV9SQ19SWExQRl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9DT01fUkNfVFhMUEZdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfQ09NX1JDX1JYSFBGXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JFU0VSVkVEX0FERFIxNl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JFU0VSVkVEX0FERFIxN10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JFU0VSVkVEX0FERFIxOF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JFU0VSVkVEX0FERFIxOV0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JFU0VSVkVEX0FERFIyMF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JFU0VSVkVEX0FERFIyMV0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JFU0VSVkVEX0FERFIyMl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JFU0VSVkVEX0FERFIyM10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JFU0VSVkVEX0FERFIyNF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JFU0VSVkVEX0FERFIyNV0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JFU0VSVkVEX0FERFIyNl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JFU0VSVkVEX0FERFIyN10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JFU0VSVkVEX0FERFIyOF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JFU0VSVkVEX0FERFIyOV0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JFU0VSVkVEX0FERFIzMF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JFU0VSVkVEX0FERFIzMV0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYSVFDQUxfUlhNVVhdCT0geyAuZ2h6NSA9IDB4MDAwMywgLmdoejIgPSAweDAwMDMsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SU1NJX1BVXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JTU0lfU0VMXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JTU0lfR0FJTl0JCT0geyAuZ2h6NSA9IDB4MDA5MCwgLmdoejIgPSAweDAwOTAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SU1NJX05CX0lEQUNdCQk9IHsgLmdoejUgPSAweDAwNTUsIC5naHoyID0gMHgwMDU1LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlNTSV9XQjJJX0lEQUNfMV0JPSB7IC5naHo1ID0gMHgwMDE1LCAuZ2h6MiA9IDB4MDAxNSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JTU0lfV0IySV9JREFDXzJdCT0geyAuZ2h6NSA9IDB4MDAwNSwgLmdoejIgPSAweDAwMDUsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SU1NJX1dCMlFfSURBQ18xXQk9IHsgLmdoejUgPSAweDAwMTUsIC5naHoyID0gMHgwMDE1LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlNTSV9XQjJRX0lEQUNfMl0JPSB7IC5naHo1ID0gMHgwMDA1LCAuZ2h6MiA9IDB4MDAwNSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JTU0lfUE9MRV0JCT0geyAuZ2h6NSA9IDB4MDAyMCwgLmdoejIgPSAweDAwMjAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SU1NJX1dCMV9JREFDXQk9IHsgLmdoejUgPSAweDAwMTEsIC5naHoyID0gMHgwMDExLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlNTSV9NSVNDXQkJPSB7IC5naHo1ID0gMHgwMDkwLCAuZ2h6MiA9IDB4MDA5MCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX0xOQUFfTUFTVEVSXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX0xOQUFfVFVORV0JCT0geyAuZ2h6NSA9IDB4MDA4OCwgLmdoejIgPSAweDAwODgsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9MTkFBX0dBSU5dCQk9IHsgLmdoejUgPSAweDAwMzIsIC5naHoyID0gMHgwMDMyLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfTE5BX0FfU0xPUEVdCQk9IHsgLmdoejUgPSAweDAwNzcsIC5naHoyID0gMHgwMDc3LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfQklBU1BPTEVfTE5BQTFfSURBQ10JPSB7IC5naHo1ID0gMHgwMDE3LCAuZ2h6MiA9IDB4MDAxNywgVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9MTkFBMl9JREFDXQkJPSB7IC5naHo1ID0gMHgwMGZmLCAuZ2h6MiA9IDB4MDBmZiwgVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9MTkExQV9NSVNDXQkJPSB7IC5naHo1ID0gMHgwMDIwLCAuZ2h6MiA9IDB4MDAyMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX0xOQUdfTUFTVEVSXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX0xOQUdfVFVORV0JCT0geyAuZ2h6NSA9IDB4MDA4OCwgLmdoejIgPSAweDAwODgsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9MTkFHX0dBSU5dCQk9IHsgLmdoejUgPSAweDAwMzIsIC5naHoyID0gMHgwMDMyLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfTE5BX0dfU0xPUEVdCQk9IHsgLmdoejUgPSAweDAwNzcsIC5naHoyID0gMHgwMDc3LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfQklBU1BPTEVfTE5BRzFfSURBQ10JPSB7IC5naHo1ID0gMHgwMDE3LCAuZ2h6MiA9IDB4MDAxNywgVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9MTkFHMl9JREFDXQkJPSB7IC5naHo1ID0gMHgwMGYwLCAuZ2h6MiA9IDB4MDBmMCwgVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9MTkExR19NSVNDXQkJPSB7IC5naHo1ID0gMHgwMDIwLCAuZ2h6MiA9IDB4MDAyMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX01JWEFfTUFTVEVSXQkJPSB7IC5naHo1ID0gMHgwMDA4LCAuZ2h6MiA9IDB4MDAwOCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX01JWEFfVkNNXQkJPSB7IC5naHo1ID0gMHgwMDU1LCAuZ2h6MiA9IDB4MDA1NSwgVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9NSVhBX0NUUkxQVEFUXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfTUlYQV9MT0JfQklBU10JPSB7IC5naHo1ID0gMHgwMDg4LCAuZ2h6MiA9IDB4MDA4OCwgVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9NSVhBX0NPUkVfSURBQ10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX01JWEFfQ01GQl9JREFDXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBVUExPQUQsIH0sCisJW0IyMDU2X1JYX01JWEFfQklBU19BVVhdCT0geyAuZ2h6NSA9IDB4MDAwNywgLmdoejIgPSAweDAwMDcsIFVQTE9BRCwgfSwKKwlbQjIwNTZfUlhfTUlYQV9CSUFTX01BSU5dCT0geyAuZ2h6NSA9IDB4MDAwNiwgLmdoejIgPSAweDAwMDYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9NSVhBX0JJQVNfTUlTQ10JPSB7IC5naHo1ID0gMHgwMDA0LCAuZ2h6MiA9IDB4MDAwNCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX01JWEFfTUFTVF9CSUFTXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfTUlYR19NQVNURVJdCQk9IHsgLmdoejUgPSAweDAwMDgsIC5naHoyID0gMHgwMDA4LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfTUlYR19WQ01dCQk9IHsgLmdoejUgPSAweDAwNTUsIC5naHoyID0gMHgwMDU1LCBVUExPQUQsIH0sCisJW0IyMDU2X1JYX01JWEdfQ1RSTFBUQVRdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9NSVhHX0xPQl9CSUFTXQk9IHsgLmdoejUgPSAweDAwMTEsIC5naHoyID0gMHgwMDExLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfTUlYR19DT1JFX0lEQUNdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9NSVhHX0NNRkJfSURBQ10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9NSVhHX0JJQVNfQVVYXQk9IHsgLmdoejUgPSAweDAwMDcsIC5naHoyID0gMHgwMDA3LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfTUlYR19CSUFTX01BSU5dCT0geyAuZ2h6NSA9IDB4MDAwNiwgLmdoejIgPSAweDAwMDYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9NSVhHX0JJQVNfTUlTQ10JPSB7IC5naHo1ID0gMHgwMDA0LCAuZ2h6MiA9IDB4MDAwNCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX01JWEdfTUFTVF9CSUFTXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfVElBX01BU1RFUl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9USUFfSU9QQU1QXQkJPSB7IC5naHo1ID0gMHgwMDI2LCAuZ2h6MiA9IDB4MDAyNiwgVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9USUFfUU9QQU1QXQkJPSB7IC5naHo1ID0gMHgwMDI2LCAuZ2h6MiA9IDB4MDAyNiwgVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9USUFfSU1JU0NdCQk9IHsgLmdoejUgPSAweDAwMGYsIC5naHoyID0gMHgwMDBmLCBVUExPQUQsIH0sCisJW0IyMDU2X1JYX1RJQV9RTUlTQ10JCT0geyAuZ2h6NSA9IDB4MDAwZiwgLmdoejIgPSAweDAwMGYsIFVQTE9BRCwgfSwKKwlbQjIwNTZfUlhfVElBX0dBSU5dCQk9IHsgLmdoejUgPSAweDAwNDQsIC5naHoyID0gMHgwMDQ0LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfVElBX1NQQVJFMV0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9USUFfU1BBUkUyXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX0JCX0xQRl9NQVNURVJdCT0geyAuZ2h6NSA9IDB4MDAwOCwgLmdoejIgPSAweDAwMDgsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9BQUNJX01BU1RFUl0JCT0geyAuZ2h6NSA9IDB4MDAwOCwgLmdoejIgPSAweDAwMDgsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWExQRl9JREFDXQkJPSB7IC5naHo1ID0gMHgwMDA3LCAuZ2h6MiA9IDB4MDAwNywgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYTFBGX09QQU1QQklBU19MT1dRXQk9IHsgLmdoejUgPSAweDAwMjIsIC5naHoyID0gMHgwMDIyLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhMUEZfT1BBTVBCSUFTX0hJR0hRXT0geyAuZ2h6NSA9IDB4MDAyMiwgLmdoejIgPSAweDAwMjIsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWExQRl9CSUFTX0RDQ0FOQ0VMXQk9IHsgLmdoejUgPSAweDAwMDIsIC5naHoyID0gMHgwMDAyLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhMUEZfT1VUVkNNXQkJPSB7IC5naHo1ID0gMHgwMDA0LCAuZ2h6MiA9IDB4MDAwNCwgVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWExQRl9JTlZDTV9CT0RZXQk9IHsgLmdoejUgPSAweDAwMDcsIC5naHoyID0gMHgwMDA3LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhMUEZfQ0NfT1BdCQk9IHsgLmdoejUgPSAweDAwNTUsIC5naHoyID0gMHgwMDU1LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhMUEZfR0FJTl0JCT0geyAuZ2h6NSA9IDB4MDAyMywgLmdoejIgPSAweDAwMjMsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWExQRl9RX0JXXQkJPSB7IC5naHo1ID0gMHgwMDQxLCAuZ2h6MiA9IDB4MDA0MSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYTFBGX0hQX0NPUk5FUl9CV10JPSB7IC5naHo1ID0gMHgwMDAxLCAuZ2h6MiA9IDB4MDAwMSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYTFBGX1JDQ0FMX0hQQ10JPSB7IC5naHo1ID0gMHgwMDBhLCAuZ2h6MiA9IDB4MDAwYSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYSFBGX09GRjBdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhIUEZfT0ZGMV0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWEhQRl9PRkYyXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYSFBGX09GRjNdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhIUEZfT0ZGNF0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWEhQRl9PRkY1XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYSFBGX09GRjZdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhIUEZfT0ZGN10JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWExQRl9SQ0NBTF9MUENdCT0geyAuZ2h6NSA9IDB4MDAwYywgLmdoejIgPSAweDAwMGMsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWExQRl9PRkZfMF0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWExQRl9PRkZfMV0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWExQRl9PRkZfMl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWExQRl9PRkZfM10JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWExQRl9PRkZfNF0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9VTlVTRURdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfVkdBX01BU1RFUl0JCT0geyAuZ2h6NSA9IDB4MDAyMiwgLmdoejIgPSAweDAwMjIsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9WR0FfQklBU10JCT0geyAuZ2h6NSA9IDB4MDAyMiwgLmdoejIgPSAweDAwMjIsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9WR0FfQklBU19EQ0NBTkNFTF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9WR0FfR0FJTl0JCT0geyAuZ2h6NSA9IDB4MDAwYSwgLmdoejIgPSAweDAwMGEsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9WR0FfSFBfQ09STkVSX0JXXQk9IHsgLmdoejUgPSAweDAwMDEsIC5naHoyID0gMHgwMDAxLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfVkdBQlVGX0JJQVNdCQk9IHsgLmdoejUgPSAweDAwMjIsIC5naHoyID0gMHgwMDIyLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfVkdBQlVGX0dBSU5fQlddCT0geyAuZ2h6NSA9IDB4MDAzMCwgLmdoejIgPSAweDAwMzAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9UWEZCTUlYX0FdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfVFhGQk1JWF9HXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYU1BBUkUxXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYU1BBUkUyXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYU1BBUkUzXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYU1BBUkU0XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYU1BBUkU1XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYU1BBUkU2XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYU1BBUkU3XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYU1BBUkU4XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYU1BBUkU5XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYU1BBUkUxMF0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWFNQQVJFMTFdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhTUEFSRTEyXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYU1BBUkUxM10JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWFNQQVJFMTRdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhTUEFSRTE1XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYU1BBUkUxNl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9TVEFUVVNfTE5BQV9HQUlOXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfU1RBVFVTX0xOQUdfR0FJTl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1NUQVRVU19NSVhUSUFfR0FJTl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1NUQVRVU19SWExQRl9HQUlOXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfU1RBVFVTX1ZHQV9CVUZfR0FJTl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1NUQVRVU19SWExQRl9RXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfU1RBVFVTX1JYTFBGX0JVRl9CV10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1NUQVRVU19SWExQRl9WR0FfSFBDXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfU1RBVFVTX1JYTFBGX1JDXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfU1RBVFVTX0hQQ19SQ10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGIyMDU2X2luaXR0YWJfZW50cnkgYjIwNTZfaW5pdHRhYl9yZXY2X3N5bltdID0geworCVtCMjA1Nl9TWU5fUkVTRVJWRURfQUREUjJdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkVTRVJWRURfQUREUjNdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkVTRVJWRURfQUREUjRdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkVTRVJWRURfQUREUjVdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkVTRVJWRURfQUREUjZdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkVTRVJWRURfQUREUjddCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fQ09NX0NUUkxdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0NPTV9QVV0JCT0geyAuZ2h6NSA9IDB4MDAwMSwgLmdoejIgPSAweDAwMDEsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fQ09NX09WUl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fQ09NX1JFU0VUXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9DT01fUkNBTF0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fQ09NX1JDX1JYTFBGXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0NPTV9SQ19UWExQRl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9DT01fUkNfUlhIUEZdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkVTRVJWRURfQUREUjE2XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1JFU0VSVkVEX0FERFIxN10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9SRVNFUlZFRF9BRERSMThdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkVTRVJWRURfQUREUjE5XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1JFU0VSVkVEX0FERFIyMF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9SRVNFUlZFRF9BRERSMjFdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkVTRVJWRURfQUREUjIyXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1JFU0VSVkVEX0FERFIyM10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9SRVNFUlZFRF9BRERSMjRdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkVTRVJWRURfQUREUjI1XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1JFU0VSVkVEX0FERFIyNl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9SRVNFUlZFRF9BRERSMjddCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkVTRVJWRURfQUREUjI4XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1JFU0VSVkVEX0FERFIyOV0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9SRVNFUlZFRF9BRERSMzBdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkVTRVJWRURfQUREUjMxXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0dQSU9fTUFTVEVSMV0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9HUElPX01BU1RFUjJdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fVE9QQklBU19NQVNURVJdCT0geyAuZ2h6NSA9IDB4MDA2MCwgLmdoejIgPSAweDAwNjAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fVE9QQklBU19SQ0FMXQk9IHsgLmdoejUgPSAweDAwMDYsIC5naHoyID0gMHgwMDA2LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0FGRVJFR10JCT0geyAuZ2h6NSA9IDB4MDAwYywgLmdoejIgPSAweDAwMGMsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fVEVNUFBST0NTRU5TRV0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9URU1QUFJPQ1NFTlNFSURBQ10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9URU1QUFJPQ1NFTlNFUkNBTF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MUE9dCQkJPSB7IC5naHo1ID0gMHgwMDAxLCAuZ2h6MiA9IDB4MDAwMSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9WRERDQUxfTUFTVEVSXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1ZERENBTF9JREFDXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9WRERDQUxfU1RBVFVTXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1JDQUxfTUFTVEVSXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9SQ0FMX0NPREVfT1VUXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1JDQ0FMX0NUUkwwXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9SQ0NBTF9DVFJMMV0JCT0geyAuZ2h6NSA9IDB4MDAxZiwgLmdoejIgPSAweDAwMWYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkNDQUxfQ1RSTDJdCQk9IHsgLmdoejUgPSAweDAwMTUsIC5naHoyID0gMHgwMDE1LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1JDQ0FMX0NUUkwzXQkJPSB7IC5naHo1ID0gMHgwMDBmLCAuZ2h6MiA9IDB4MDAwZiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9SQ0NBTF9DVFJMNF0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkNDQUxfQ1RSTDVdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1JDQ0FMX0NUUkw2XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9SQ0NBTF9DVFJMN10JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkNDQUxfQ1RSTDhdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1JDQ0FMX0NUUkw5XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9SQ0NBTF9DVFJMMTBdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkNDQUxfQ1RSTDExXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1pDQUxfU1BBUkUxXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9aQ0FMX1NQQVJFMl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX01BU1QxXQkJPSB7IC5naHo1ID0gMHgwMDEzLCAuZ2h6MiA9IDB4MDAxMywgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfTUFTVDJdCQk9IHsgLmdoejUgPSAweDAwMGYsIC5naHoyID0gMHgwMDBmLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9NQVNUM10JCT0geyAuZ2h6NSA9IDB4MDAxOCwgLmdoejIgPSAweDAwMTgsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX0JJQVNfUkVTRVRdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX1hUQUwwXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfWFRBTDFdCQk9IHsgLmdoejUgPSAweDAwMjAsIC5naHoyID0gMHgwMDIwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9YVEFMM10JCT0geyAuZ2h6NSA9IDB4MDAyMCwgLmdoejIgPSAweDAwMjAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX1hUQUw0XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfWFRBTDVdCQk9IHsgLmdoejUgPSAweDAwNzcsIC5naHoyID0gMHgwMDc3LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9YVEFMNl0JCT0geyAuZ2h6NSA9IDB4MDAwNywgLmdoejIgPSAweDAwMDcsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX1JFRkRJVl0JCT0geyAuZ2h6NSA9IDB4MDAwMSwgLmdoejIgPSAweDAwMDEsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX1BGRF0JCT0geyAuZ2h6NSA9IDB4MDAwNCwgLmdoejIgPSAweDAwMDQsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX0NQMV0JCT0geyAuZ2h6NSA9IDB4MDAwZiwgLmdoejIgPSAweDAwMGYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX0NQMl0JCT0geyAuZ2h6NSA9IDB4MDAzMCwgLmdoejIgPSAweDAwMzAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX0NQM10JCT0geyAuZ2h6NSA9IDB4MDAzMiwgLmdoejIgPSAweDAwMzIsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX0xPT1BGSUxURVIxXQk9IHsgLmdoejUgPSAweDAwMGQsIC5naHoyID0gMHgwMDBkLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9MT09QRklMVEVSMl0JPSB7IC5naHo1ID0gMHgwMDBkLCAuZ2h6MiA9IDB4MDAwZCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfTE9PUEZJTFRFUjNdCT0geyAuZ2h6NSA9IDB4MDAwNCwgLmdoejIgPSAweDAwMDQsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX0xPT1BGSUxURVI0XQk9IHsgLmdoejUgPSAweDAwMDYsIC5naHoyID0gMHgwMDA2LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9MT09QRklMVEVSNV0JPSB7IC5naHo1ID0gMHgwMDAxLCAuZ2h6MiA9IDB4MDAwMSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfTU1EMV0JCT0geyAuZ2h6NSA9IDB4MDAxYywgLmdoejIgPSAweDAwMWMsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX01NRDJdCQk9IHsgLmdoejUgPSAweDAwMDIsIC5naHoyID0gMHgwMDAyLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9WQ08xXQkJPSB7IC5naHo1ID0gMHgwMDAyLCAuZ2h6MiA9IDB4MDAwMiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfVkNPMl0JCT0geyAuZ2h6NSA9IDB4MDBmNywgLmdoejIgPSAweDAwZjcsIFVQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9NT05JVE9SMV0JPSB7IC5naHo1ID0gMHgwMGI0LCAuZ2h6MiA9IDB4MDBiNCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfTU9OSVRPUjJdCT0geyAuZ2h6NSA9IDB4MDBkMiwgLmdoejIgPSAweDAwZDIsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX1ZDT0NBTDFdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9WQ09DQUwyXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfVkNPQ0FMNF0JCT0geyAuZ2h6NSA9IDB4MDAwNCwgLmdoejIgPSAweDAwMDQsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX1ZDT0NBTDVdCQk9IHsgLmdoejUgPSAweDAwOTYsIC5naHoyID0gMHgwMDk2LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9WQ09DQUw2XQkJPSB7IC5naHo1ID0gMHgwMDNlLCAuZ2h6MiA9IDB4MDAzZSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfVkNPQ0FMN10JCT0geyAuZ2h6NSA9IDB4MDAzZSwgLmdoejIgPSAweDAwM2UsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX1ZDT0NBTDhdCQk9IHsgLmdoejUgPSAweDAwMTMsIC5naHoyID0gMHgwMDEzLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9WQ09DQUw5XQkJPSB7IC5naHo1ID0gMHgwMDAyLCAuZ2h6MiA9IDB4MDAwMiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfVkNPQ0FMMTBdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX1ZDT0NBTDExXQk9IHsgLmdoejUgPSAweDAwMDcsIC5naHoyID0gMHgwMDA3LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9WQ09DQUwxMl0JPSB7IC5naHo1ID0gMHgwMDA3LCAuZ2h6MiA9IDB4MDAwNywgVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX1ZDT0NBTDEzXQk9IHsgLmdoejUgPSAweDAwMDgsIC5naHoyID0gMHgwMDA4LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9WUkVHXQkJPSB7IC5naHo1ID0gMHgwMDAzLCAuZ2h6MiA9IDB4MDAwMywgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfU1RBVFVTMV0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX1NUQVRVUzJdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9TVEFUVVMzXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9QVTBdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX1BVMV0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fUFUyXQkJPSB7IC5naHo1ID0gMHgwMDQwLCAuZ2h6MiA9IDB4MDA0MCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9QVTNdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX1BVNV0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fUFU2XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9QVTddCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX1BVOF0JCT0geyAuZ2h6NSA9IDB4MDAwMSwgLmdoejIgPSAweDAwMDEsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQklBU19SRVNFVF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9SQ0NSMV0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fVkNPQlVGMV0JPSB7IC5naHo1ID0gMHgwMDYwLCAuZ2h6MiA9IDB4MDA2MCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9NSVhFUjFdCT0geyAuZ2h6NSA9IDB4MDA2NiwgLmdoejIgPSAweDAwNjYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fTUlYRVIyXQk9IHsgLmdoejUgPSAweDAwMGMsIC5naHoyID0gMHgwMDBjLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0JVRjFdCQk9IHsgLmdoejUgPSAweDAwNjYsIC5naHoyID0gMHgwMDY2LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOQlVGMl0JCT0geyAuZ2h6NSA9IDB4MDA4ZiwgLmdoejIgPSAweDAwOGYsIFVQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0JVRjNdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0JVRjRdCQk9IHsgLmdoejUgPSAweDAwY2MsIC5naHoyID0gMHgwMGNjLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0RJVjFdCQk9IHsgLmdoejUgPSAweDAwMDEsIC5naHoyID0gMHgwMDAxLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0RJVjJdCQk9IHsgLmdoejUgPSAweDAwNjYsIC5naHoyID0gMHgwMDY2LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0RJVjNdCQk9IHsgLmdoejUgPSAweDAwNjYsIC5naHoyID0gMHgwMDY2LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0FDTDFdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0FDTDJdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0FDTDNdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0FDTDRdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0FDTDVdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0FDTDZdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0FDTE9VVF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9BQ0xDQUwxXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0FDTENBTDJdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQUNMQ0FMM10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9DQUxFTl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fUEVBS0RFVDFdCT0geyAuZ2h6NSA9IDB4MDBmZiwgLmdoejIgPSAweDAwZmYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQ09SRV9BQ0xfT1ZSXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX1JYX0RJRkZfQUNMX09WUl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9UWF9ESUZGX0FDTF9PVlJdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fUlhfQ01PU19BQ0xfT1ZSXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX1RYX0NNT1NfQUNMX09WUl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9WQ09CVUYyXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX01JWEVSM10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9CVUY1XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9CVUY2XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9DQlVGUlgxXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0NCVUZSWDJdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQ0JVRlJYM10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9DQlVGUlg0XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0NCVUZUWDFdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQ0JVRlRYMl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9DQlVGVFgzXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0NCVUZUWDRdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQ01PU1JYMV0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9DTU9TUlgyXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0NNT1NSWDNdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQ01PU1JYNF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9DTU9TVFgxXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0NNT1NUWDJdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQ01PU1RYM10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9DTU9TVFg0XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX1ZDT0JVRjJfT1ZSVkFMXT0geyAuZ2h6NSA9IDB4MDAwNiwgLmdoejIgPSAweDAwMDYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fTUlYRVIzX09WUlZBTF0JPSB7IC5naHo1ID0gMHgwMDY2LCAuZ2h6MiA9IDB4MDA2NiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9CVUY1X09WUlZBTF0JPSB7IC5naHo1ID0gMHgwMDY2LCAuZ2h6MiA9IDB4MDA2NiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9CVUY2X09WUlZBTF0JPSB7IC5naHo1ID0gMHgwMDY2LCAuZ2h6MiA9IDB4MDA2NiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9DQlVGUlgxX09WUlZBTF09IHsgLmdoejUgPSAweDAwNjYsIC5naHoyID0gMHgwMDY2LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0NCVUZSWDJfT1ZSVkFMXT0geyAuZ2h6NSA9IDB4MDA2NiwgLmdoejIgPSAweDAwNjYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQ0JVRlJYM19PVlJWQUxdPSB7IC5naHo1ID0gMHgwMDY2LCAuZ2h6MiA9IDB4MDA2NiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9DQlVGUlg0X09WUlZBTF09IHsgLmdoejUgPSAweDAwNjYsIC5naHoyID0gMHgwMDY2LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0NCVUZUWDFfT1ZSVkFMXT0geyAuZ2h6NSA9IDB4MDA2NiwgLmdoejIgPSAweDAwNjYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQ0JVRlRYMl9PVlJWQUxdPSB7IC5naHo1ID0gMHgwMDY2LCAuZ2h6MiA9IDB4MDA2NiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9DQlVGVFgzX09WUlZBTF09IHsgLmdoejUgPSAweDAwNjYsIC5naHoyID0gMHgwMDY2LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0NCVUZUWDRfT1ZSVkFMXT0geyAuZ2h6NSA9IDB4MDA2NiwgLmdoejIgPSAweDAwNjYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQ01PU1JYMV9PVlJWQUxdPSB7IC5naHo1ID0gMHgwMDY2LCAuZ2h6MiA9IDB4MDA2NiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9DTU9TUlgyX09WUlZBTF09IHsgLmdoejUgPSAweDAwNjYsIC5naHoyID0gMHgwMDY2LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0NNT1NSWDNfT1ZSVkFMXT0geyAuZ2h6NSA9IDB4MDA2NiwgLmdoejIgPSAweDAwNjYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQ01PU1JYNF9PVlJWQUxdPSB7IC5naHo1ID0gMHgwMDY2LCAuZ2h6MiA9IDB4MDA2NiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9DTU9TVFgxX09WUlZBTF09IHsgLmdoejUgPSAweDAwNjYsIC5naHoyID0gMHgwMDY2LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0NNT1NUWDJfT1ZSVkFMXT0geyAuZ2h6NSA9IDB4MDA2NiwgLmdoejIgPSAweDAwNjYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQ01PU1RYM19PVlJWQUxdPSB7IC5naHo1ID0gMHgwMDY2LCAuZ2h6MiA9IDB4MDA2NiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9DTU9TVFg0X09WUlZBTF09IHsgLmdoejUgPSAweDAwNjYsIC5naHoyID0gMHgwMDY2LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0FDTF9XQUlUQ05UXQk9IHsgLmdoejUgPSAweDAwMGEsIC5naHoyID0gMHgwMDBhLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0NPUkVfQ0FMVkFMSURdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fUlhfQ01PU19DQUxWQUxJRF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9UWF9DTU9TX1ZBTElEXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYjIwNTZfaW5pdHRhYl9lbnRyeSBiMjA1Nl9pbml0dGFiX3JldjZfdHhbXSA9IHsKKwlbQjIwNTZfVFhfUkVTRVJWRURfQUREUjJdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9SRVNFUlZFRF9BRERSM10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFI0XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfUkVTRVJWRURfQUREUjVdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9SRVNFUlZFRF9BRERSNl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFI3XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfQ09NX0NUUkxdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfQ09NX1BVXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0NPTV9PVlJdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfQ09NX1JFU0VUXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0NPTV9SQ0FMXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0NPTV9SQ19SWExQRl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9DT01fUkNfVFhMUEZdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfQ09NX1JDX1JYSFBGXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFIxNl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFIxN10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFIxOF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFIxOV0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFIyMF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFIyMV0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFIyMl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFIyM10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFIyNF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFIyNV0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFIyNl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFIyN10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFIyOF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFIyOV0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFIzMF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFIzMV0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0lRQ0FMX0dBSU5fQlddCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9MT0ZUX0ZJTkVfSV0JCT0geyAuZ2h6NSA9IDB4MDA4OCwgLmdoejIgPSAweDAwODgsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9MT0ZUX0ZJTkVfUV0JCT0geyAuZ2h6NSA9IDB4MDA4OCwgLmdoejIgPSAweDAwODgsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9MT0ZUX0NPQVJTRV9JXQk9IHsgLmdoejUgPSAweDAwODgsIC5naHoyID0gMHgwMDg4LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfTE9GVF9DT0FSU0VfUV0JPSB7IC5naHo1ID0gMHgwMDg4LCAuZ2h6MiA9IDB4MDA4OCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYX0NPTV9NQVNURVIxXQk9IHsgLmdoejUgPSAweDAwMGMsIC5naHoyID0gMHgwMDBjLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhfQ09NX01BU1RFUjJdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9SWElRQ0FMX1RYTVVYXQk9IHsgLmdoejUgPSAweDAwMDMsIC5naHoyID0gMHgwMDAzLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhfU1NJX01BU1RFUl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0lRQ0FMX1ZDTV9IR10JCT0geyAuZ2h6NSA9IDB4MDAwMywgLmdoejIgPSAweDAwMDMsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9JUUNBTF9JREFDXQkJPSB7IC5naHo1ID0gMHgwMDM3LCAuZ2h6MiA9IDB4MDAzNywgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RTU0lfVkNNXQkJPSB7IC5naHo1ID0gMHgwMDAzLCAuZ2h6MiA9IDB4MDAwMywgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYX0FNUF9ERVRdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhfU1NJX01VWF0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UU1NJQV0JCT0geyAuZ2h6NSA9IDB4MDAwMSwgLmdoejIgPSAweDAwMDEsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UU1NJR10JCT0geyAuZ2h6NSA9IDB4MDAwMSwgLmdoejIgPSAweDAwMDEsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UU1NJX01JU0MxXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RTU0lfTUlTQzJdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFNTSV9NSVNDM10JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QQV9TUEFSRTFdCQk9IHsgLmdoejUgPSAweDAwMTEsIC5naHoyID0gMHgwMDExLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfUEFfU1BBUkUyXQkJPSB7IC5naHo1ID0gMHgwMGVlLCAuZ2h6MiA9IDB4MDBlZSwgVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9JTlRQQUFfTUFTVEVSXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfSU5UUEFBX0dBSU5dCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfSU5UUEFBX0JPT1NUX1RVTkVdCT0geyAuZ2h6NSA9IDB4MDAwMywgLmdoejIgPSAweDAwMDMsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9JTlRQQUFfSUFVWF9TVEFUXQk9IHsgLmdoejUgPSAweDAwNTAsIC5naHoyID0gMHgwMDUwLCBVUExPQUQsIH0sCisJW0IyMDU2X1RYX0lOVFBBQV9JQVVYX0RZTl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0lOVFBBQV9JTUFJTl9TVEFUXQk9IHsgLmdoejUgPSAweDAwNTAsIC5naHoyID0gMHgwMDUwLCBVUExPQUQsIH0sCisJW0IyMDU2X1RYX0lOVFBBQV9JTUFJTl9EWU5dCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9JTlRQQUFfQ0FTQ0JJQVNdCT0geyAuZ2h6NSA9IDB4MDA2ZSwgLmdoejIgPSAweDAwNmUsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9JTlRQQUFfUEFTTE9QRV0JPSB7IC5naHo1ID0gMHgwMGYwLCAuZ2h6MiA9IDB4MDBmMCwgVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9JTlRQQUFfUEFfTUlTQ10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0lOVFBBR19NQVNURVJdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9JTlRQQUdfR0FJTl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9JTlRQQUdfQk9PU1RfVFVORV0JPSB7IC5naHo1ID0gMHgwMDAzLCAuZ2h6MiA9IDB4MDAwMywgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0lOVFBBR19JQVVYX1NUQVRdCT0geyAuZ2h6NSA9IDB4MDAwMywgLmdoejIgPSAweDAwMDMsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9JTlRQQUdfSUFVWF9EWU5dCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9JTlRQQUdfSU1BSU5fU1RBVF0JPSB7IC5naHo1ID0gMHgwMDFlLCAuZ2h6MiA9IDB4MDAxZSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0lOVFBBR19JTUFJTl9EWU5dCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9JTlRQQUdfQ0FTQ0JJQVNdCT0geyAuZ2h6NSA9IDB4MDA2ZSwgLmdoejIgPSAweDAwNmUsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9JTlRQQUdfUEFTTE9QRV0JPSB7IC5naHo1ID0gMHgwMGYwLCAuZ2h6MiA9IDB4MDBmMCwgVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9JTlRQQUdfUEFfTUlTQ10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1BBREFfTUFTVEVSXQkJPSB7IC5naHo1ID0gMHgwMDAyLCAuZ2h6MiA9IDB4MDAwMiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1BBREFfSURBQ10JCT0geyAuZ2h6NSA9IDB4MDBmZiwgLmdoejIgPSAweDAwZmYsIFVQTE9BRCwgfSwKKwlbQjIwNTZfVFhfUEFEQV9DQVNDQklBU10JPSB7IC5naHo1ID0gMHgwMDBjLCAuZ2h6MiA9IDB4MDAwYywgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1BBREFfR0FJTl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QQURBX0JPT1NUX1RVTkVdCT0geyAuZ2h6NSA9IDB4MDAzOCwgLmdoejIgPSAweDAwMzgsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QQURBX1NMT1BFXQkJPSB7IC5naHo1ID0gMHgwMDcwLCAuZ2h6MiA9IDB4MDA3MCwgVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QQURHX01BU1RFUl0JCT0geyAuZ2h6NSA9IDB4MDAwMiwgLmdoejIgPSAweDAwMDIsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QQURHX0lEQUNdCQk9IHsgLmdoejUgPSAweDAwODgsIC5naHoyID0gMHgwMDg4LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfUEFER19DQVNDQklBU10JPSB7IC5naHo1ID0gMHgwMDBjLCAuZ2h6MiA9IDB4MDAwYywgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1BBREdfR0FJTl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QQURHX0JPT1NUX1RVTkVdCT0geyAuZ2h6NSA9IDB4MDAwOCwgLmdoejIgPSAweDAwMDgsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QQURHX1NMT1BFXQkJPSB7IC5naHo1ID0gMHgwMDcwLCAuZ2h6MiA9IDB4MDA3MCwgVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QR0FBX01BU1RFUl0JCT0geyAuZ2h6NSA9IDB4MDAwMiwgLmdoejIgPSAweDAwMDIsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QR0FBX0lEQUNdCQk9IHsgLmdoejUgPSAweDAwZmYsIC5naHoyID0gMHgwMGZmLCBVUExPQUQsIH0sCisJW0IyMDU2X1RYX1BHQUFfR0FJTl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QR0FBX0JPT1NUX1RVTkVdCT0geyAuZ2h6NSA9IDB4MDA4MywgLmdoejIgPSAweDAwODMsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QR0FBX1NMT1BFXQkJPSB7IC5naHo1ID0gMHgwMDc3LCAuZ2h6MiA9IDB4MDA3NywgVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QR0FBX01JU0NdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfUEdBR19NQVNURVJdCQk9IHsgLmdoejUgPSAweDAwMDIsIC5naHoyID0gMHgwMDAyLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfUEdBR19JREFDXQkJPSB7IC5naHo1ID0gMHgwMDg4LCAuZ2h6MiA9IDB4MDA4OCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1BHQUdfR0FJTl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QR0FHX0JPT1NUX1RVTkVdCT0geyAuZ2h6NSA9IDB4MDAwOCwgLmdoejIgPSAweDAwMDgsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QR0FHX1NMT1BFXQkJPSB7IC5naHo1ID0gMHgwMDc3LCAuZ2h6MiA9IDB4MDA3NywgVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QR0FHX01JU0NdCQk9IHsgLmdoejUgPSAweDAwMDEsIC5naHoyID0gMHgwMDAxLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfTUlYQV9NQVNURVJdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfTUlYQV9CT09TVF9UVU5FXQk9IHsgLmdoejUgPSAweDAwMDcsIC5naHoyID0gMHgwMDA3LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfTUlYR10JCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfTUlYR19CT09TVF9UVU5FXQk9IHsgLmdoejUgPSAweDAwMDcsIC5naHoyID0gMHgwMDA3LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfQkJfR01fTUFTVEVSXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0dNQkJfR01dCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfR01CQl9JREFDXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWExQRl9NQVNURVJdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhMUEZfUkNDQUxdCQk9IHsgLmdoejUgPSAweDAwMGEsIC5naHoyID0gMHgwMDBhLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhMUEZfUkNDQUxfT0ZGMF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYTFBGX1JDQ0FMX09GRjFdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWExQRl9SQ0NBTF9PRkYyXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhMUEZfUkNDQUxfT0ZGM10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYTFBGX1JDQ0FMX09GRjRdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWExQRl9SQ0NBTF9PRkY1XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhMUEZfUkNDQUxfT0ZGNl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYTFBGX0JXXQkJPSB7IC5naHo1ID0gMHgwMDAyLCAuZ2h6MiA9IDB4MDAwMiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYTFBGX0dBSU5dCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhMUEZfSURBQ10JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWExQRl9JREFDXzBdCQk9IHsgLmdoejUgPSAweDAwMGUsIC5naHoyID0gMHgwMDBlLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhMUEZfSURBQ18xXQkJPSB7IC5naHo1ID0gMHgwMDBlLCAuZ2h6MiA9IDB4MDAwZSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYTFBGX0lEQUNfMl0JCT0geyAuZ2h6NSA9IDB4MDAwZSwgLmdoejIgPSAweDAwMGUsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWExQRl9JREFDXzNdCQk9IHsgLmdoejUgPSAweDAwMTMsIC5naHoyID0gMHgwMDEzLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhMUEZfSURBQ180XQkJPSB7IC5naHo1ID0gMHgwMDEzLCAuZ2h6MiA9IDB4MDAxMywgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYTFBGX0lEQUNfNV0JCT0geyAuZ2h6NSA9IDB4MDAxYiwgLmdoejIgPSAweDAwMWIsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWExQRl9JREFDXzZdCQk9IHsgLmdoejUgPSAweDAwMWIsIC5naHoyID0gMHgwMDFiLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhMUEZfT1BBTVBfSURBQ10JPSB7IC5naHo1ID0gMHgwMDU1LCAuZ2h6MiA9IDB4MDA1NSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYTFBGX01JU0NdCQk9IHsgLmdoejUgPSAweDAwNWIsIC5naHoyID0gMHgwMDViLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhTUEFSRTFdCQk9IHsgLmdoejUgPSAweDAwMzAsIC5naHoyID0gMHgwMDMwLCBVUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYU1BBUkUyXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYU1BBUkUzXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYU1BBUkU0XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYU1BBUkU1XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYU1BBUkU2XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYU1BBUkU3XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYU1BBUkU4XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYU1BBUkU5XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYU1BBUkUxMF0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWFNQQVJFMTFdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhTUEFSRTEyXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYU1BBUkUxM10JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWFNQQVJFMTRdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhTUEFSRTE1XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYU1BBUkUxNl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9TVEFUVVNfSU5UUEFfR0FJTl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1NUQVRVU19QQURfR0FJTl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1NUQVRVU19QR0FfR0FJTl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1NUQVRVU19HTV9UWExQRl9HQUlOXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfU1RBVFVTX1RYTFBGX0JXXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfU1RBVFVTX1RYTFBGX1JDXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfR01CQl9JREFDMF0JCT0geyAuZ2h6NSA9IDB4MDA3MCwgLmdoejIgPSAweDAwNzAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9HTUJCX0lEQUMxXQkJPSB7IC5naHo1ID0gMHgwMDcwLCAuZ2h6MiA9IDB4MDA3MCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0dNQkJfSURBQzJdCQk9IHsgLmdoejUgPSAweDAwNzAsIC5naHoyID0gMHgwMDcwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfR01CQl9JREFDM10JCT0geyAuZ2h6NSA9IDB4MDA3MCwgLmdoejIgPSAweDAwNzAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9HTUJCX0lEQUM0XQkJPSB7IC5naHo1ID0gMHgwMDcwLCAuZ2h6MiA9IDB4MDA3MCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0dNQkJfSURBQzVdCQk9IHsgLmdoejUgPSAweDAwNzAsIC5naHoyID0gMHgwMDcwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfR01CQl9JREFDNl0JCT0geyAuZ2h6NSA9IDB4MDA3MCwgLmdoejIgPSAweDAwNzAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9HTUJCX0lEQUM3XQkJPSB7IC5naHo1ID0gMHgwMDcwLCAuZ2h6MiA9IDB4MDA3MCwgTk9VUExPQUQsIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGIyMDU2X2luaXR0YWJfZW50cnkgYjIwNTZfaW5pdHRhYl9yZXY2X3J4W10gPSB7CisJW0IyMDU2X1JYX1JFU0VSVkVEX0FERFIyXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUkVTRVJWRURfQUREUjNdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SRVNFUlZFRF9BRERSNF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JFU0VSVkVEX0FERFI1XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUkVTRVJWRURfQUREUjZdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SRVNFUlZFRF9BRERSN10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX0NPTV9DVFJMXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX0NPTV9QVV0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9DT01fT1ZSXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX0NPTV9SRVNFVF0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9DT01fUkNBTF0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9DT01fUkNfUlhMUEZdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfQ09NX1JDX1RYTFBGXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX0NPTV9SQ19SWEhQRl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SRVNFUlZFRF9BRERSMTZdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SRVNFUlZFRF9BRERSMTddCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SRVNFUlZFRF9BRERSMThdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SRVNFUlZFRF9BRERSMTldCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SRVNFUlZFRF9BRERSMjBdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SRVNFUlZFRF9BRERSMjFdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SRVNFUlZFRF9BRERSMjJdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SRVNFUlZFRF9BRERSMjNdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SRVNFUlZFRF9BRERSMjRdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SRVNFUlZFRF9BRERSMjVdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SRVNFUlZFRF9BRERSMjZdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SRVNFUlZFRF9BRERSMjddCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SRVNFUlZFRF9BRERSMjhdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SRVNFUlZFRF9BRERSMjldCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SRVNFUlZFRF9BRERSMzBdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SRVNFUlZFRF9BRERSMzFdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWElRQ0FMX1JYTVVYXQk9IHsgLmdoejUgPSAweDAwMDMsIC5naHoyID0gMHgwMDAzLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlNTSV9QVV0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SU1NJX1NFTF0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SU1NJX0dBSU5dCQk9IHsgLmdoejUgPSAweDAwOTAsIC5naHoyID0gMHgwMDkwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlNTSV9OQl9JREFDXQkJPSB7IC5naHo1ID0gMHgwMDU1LCAuZ2h6MiA9IDB4MDA1NSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JTU0lfV0IySV9JREFDXzFdCT0geyAuZ2h6NSA9IDB4MDAxNSwgLmdoejIgPSAweDAwMTUsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SU1NJX1dCMklfSURBQ18yXQk9IHsgLmdoejUgPSAweDAwMDUsIC5naHoyID0gMHgwMDA1LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlNTSV9XQjJRX0lEQUNfMV0JPSB7IC5naHo1ID0gMHgwMDE1LCAuZ2h6MiA9IDB4MDAxNSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JTU0lfV0IyUV9JREFDXzJdCT0geyAuZ2h6NSA9IDB4MDAwNSwgLmdoejIgPSAweDAwMDUsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SU1NJX1BPTEVdCQk9IHsgLmdoejUgPSAweDAwMjAsIC5naHoyID0gMHgwMDIwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlNTSV9XQjFfSURBQ10JPSB7IC5naHo1ID0gMHgwMDExLCAuZ2h6MiA9IDB4MDAxMSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JTU0lfTUlTQ10JCT0geyAuZ2h6NSA9IDB4MDA5MCwgLmdoejIgPSAweDAwOTAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9MTkFBX01BU1RFUl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9MTkFBX1RVTkVdCQk9IHsgLmdoejUgPSAweDAwODgsIC5naHoyID0gMHgwMDg4LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfTE5BQV9HQUlOXQkJPSB7IC5naHo1ID0gMHgwMDMyLCAuZ2h6MiA9IDB4MDAzMiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX0xOQV9BX1NMT1BFXQkJPSB7IC5naHo1ID0gMHgwMDc3LCAuZ2h6MiA9IDB4MDA3NywgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX0JJQVNQT0xFX0xOQUExX0lEQUNdCT0geyAuZ2h6NSA9IDB4MDAxNywgLmdoejIgPSAweDAwMTcsIFVQTE9BRCwgfSwKKwlbQjIwNTZfUlhfTE5BQTJfSURBQ10JCT0geyAuZ2h6NSA9IDB4MDBmZiwgLmdoejIgPSAweDAwZmYsIFVQTE9BRCwgfSwKKwlbQjIwNTZfUlhfTE5BMUFfTUlTQ10JCT0geyAuZ2h6NSA9IDB4MDAyMCwgLmdoejIgPSAweDAwMjAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9MTkFHX01BU1RFUl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9MTkFHX1RVTkVdCQk9IHsgLmdoejUgPSAweDAwODgsIC5naHoyID0gMHgwMDg4LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfTE5BR19HQUlOXQkJPSB7IC5naHo1ID0gMHgwMDMyLCAuZ2h6MiA9IDB4MDAzMiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX0xOQV9HX1NMT1BFXQkJPSB7IC5naHo1ID0gMHgwMDc3LCAuZ2h6MiA9IDB4MDA3NywgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX0JJQVNQT0xFX0xOQUcxX0lEQUNdCT0geyAuZ2h6NSA9IDB4MDAxNywgLmdoejIgPSAweDAwMTcsIFVQTE9BRCwgfSwKKwlbQjIwNTZfUlhfTE5BRzJfSURBQ10JCT0geyAuZ2h6NSA9IDB4MDBmMCwgLmdoejIgPSAweDAwZjAsIFVQTE9BRCwgfSwKKwlbQjIwNTZfUlhfTE5BMUdfTUlTQ10JCT0geyAuZ2h6NSA9IDB4MDAyMCwgLmdoejIgPSAweDAwMjAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9NSVhBX01BU1RFUl0JCT0geyAuZ2h6NSA9IDB4MDAwOCwgLmdoejIgPSAweDAwMDgsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9NSVhBX1ZDTV0JCT0geyAuZ2h6NSA9IDB4MDA1NSwgLmdoejIgPSAweDAwNTUsIFVQTE9BRCwgfSwKKwlbQjIwNTZfUlhfTUlYQV9DVFJMUFRBVF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX01JWEFfTE9CX0JJQVNdCT0geyAuZ2h6NSA9IDB4MDA4OCwgLmdoejIgPSAweDAwODgsIFVQTE9BRCwgfSwKKwlbQjIwNTZfUlhfTUlYQV9DT1JFX0lEQUNdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9NSVhBX0NNRkJfSURBQ10JPSB7IC5naHo1ID0gMHgwMDQ0LCAuZ2h6MiA9IDB4MDA0NCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX01JWEFfQklBU19BVVhdCT0geyAuZ2h6NSA9IDB4MDAwNywgLmdoejIgPSAweDAwMDcsIFVQTE9BRCwgfSwKKwlbQjIwNTZfUlhfTUlYQV9CSUFTX01BSU5dCT0geyAuZ2h6NSA9IDB4MDAwNiwgLmdoejIgPSAweDAwMDYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9NSVhBX0JJQVNfTUlTQ10JPSB7IC5naHo1ID0gMHgwMDA0LCAuZ2h6MiA9IDB4MDAwNCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX01JWEFfTUFTVF9CSUFTXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfTUlYR19NQVNURVJdCQk9IHsgLmdoejUgPSAweDAwMDgsIC5naHoyID0gMHgwMDA4LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfTUlYR19WQ01dCQk9IHsgLmdoejUgPSAweDAwNTUsIC5naHoyID0gMHgwMDU1LCBVUExPQUQsIH0sCisJW0IyMDU2X1JYX01JWEdfQ1RSTFBUQVRdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9NSVhHX0xPQl9CSUFTXQk9IHsgLmdoejUgPSAweDAwMTEsIC5naHoyID0gMHgwMDExLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfTUlYR19DT1JFX0lEQUNdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9NSVhHX0NNRkJfSURBQ10JPSB7IC5naHo1ID0gMHgwMDQ0LCAuZ2h6MiA9IDB4MDA0NCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX01JWEdfQklBU19BVVhdCT0geyAuZ2h6NSA9IDB4MDAwNywgLmdoejIgPSAweDAwMDcsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9NSVhHX0JJQVNfTUFJTl0JPSB7IC5naHo1ID0gMHgwMDA2LCAuZ2h6MiA9IDB4MDAwNiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX01JWEdfQklBU19NSVNDXQk9IHsgLmdoejUgPSAweDAwMDQsIC5naHoyID0gMHgwMDA0LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfTUlYR19NQVNUX0JJQVNdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9USUFfTUFTVEVSXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1RJQV9JT1BBTVBdCQk9IHsgLmdoejUgPSAweDAwMjYsIC5naHoyID0gMHgwMDI2LCBVUExPQUQsIH0sCisJW0IyMDU2X1JYX1RJQV9RT1BBTVBdCQk9IHsgLmdoejUgPSAweDAwMjYsIC5naHoyID0gMHgwMDI2LCBVUExPQUQsIH0sCisJW0IyMDU2X1JYX1RJQV9JTUlTQ10JCT0geyAuZ2h6NSA9IDB4MDAwZiwgLmdoejIgPSAweDAwMGYsIFVQTE9BRCwgfSwKKwlbQjIwNTZfUlhfVElBX1FNSVNDXQkJPSB7IC5naHo1ID0gMHgwMDBmLCAuZ2h6MiA9IDB4MDAwZiwgVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9USUFfR0FJTl0JCT0geyAuZ2h6NSA9IDB4MDA0NCwgLmdoejIgPSAweDAwNDQsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9USUFfU1BBUkUxXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1RJQV9TUEFSRTJdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfQkJfTFBGX01BU1RFUl0JPSB7IC5naHo1ID0gMHgwMDA4LCAuZ2h6MiA9IDB4MDAwOCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX0FBQ0lfTUFTVEVSXQkJPSB7IC5naHo1ID0gMHgwMDA4LCAuZ2h6MiA9IDB4MDAwOCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYTFBGX0lEQUNdCQk9IHsgLmdoejUgPSAweDAwMDcsIC5naHoyID0gMHgwMDA3LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhMUEZfT1BBTVBCSUFTX0xPV1FdCT0geyAuZ2h6NSA9IDB4MDAyMiwgLmdoejIgPSAweDAwMjIsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWExQRl9PUEFNUEJJQVNfSElHSFFdPSB7IC5naHo1ID0gMHgwMDIyLCAuZ2h6MiA9IDB4MDAyMiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYTFBGX0JJQVNfRENDQU5DRUxdCT0geyAuZ2h6NSA9IDB4MDAwMiwgLmdoejIgPSAweDAwMDIsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWExQRl9PVVRWQ01dCQk9IHsgLmdoejUgPSAweDAwMDQsIC5naHoyID0gMHgwMDA0LCBVUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYTFBGX0lOVkNNX0JPRFldCT0geyAuZ2h6NSA9IDB4MDAwNywgLmdoejIgPSAweDAwMDcsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWExQRl9DQ19PUF0JCT0geyAuZ2h6NSA9IDB4MDA1NSwgLmdoejIgPSAweDAwNTUsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWExQRl9HQUlOXQkJPSB7IC5naHo1ID0gMHgwMDIzLCAuZ2h6MiA9IDB4MDAyMywgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYTFBGX1FfQlddCQk9IHsgLmdoejUgPSAweDAwNDEsIC5naHoyID0gMHgwMDQxLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhMUEZfSFBfQ09STkVSX0JXXQk9IHsgLmdoejUgPSAweDAwMDEsIC5naHoyID0gMHgwMDAxLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhMUEZfUkNDQUxfSFBDXQk9IHsgLmdoejUgPSAweDAwMGEsIC5naHoyID0gMHgwMDBhLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhIUEZfT0ZGMF0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWEhQRl9PRkYxXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYSFBGX09GRjJdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhIUEZfT0ZGM10JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWEhQRl9PRkY0XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYSFBGX09GRjVdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhIUEZfT0ZGNl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWEhQRl9PRkY3XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYTFBGX1JDQ0FMX0xQQ10JPSB7IC5naHo1ID0gMHgwMDBjLCAuZ2h6MiA9IDB4MDAwYywgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYTFBGX09GRl8wXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYTFBGX09GRl8xXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYTFBGX09GRl8yXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYTFBGX09GRl8zXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYTFBGX09GRl80XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1VOVVNFRF0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9WR0FfTUFTVEVSXQkJPSB7IC5naHo1ID0gMHgwMDIyLCAuZ2h6MiA9IDB4MDAyMiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1ZHQV9CSUFTXQkJPSB7IC5naHo1ID0gMHgwMDIyLCAuZ2h6MiA9IDB4MDAyMiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1ZHQV9CSUFTX0RDQ0FOQ0VMXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBVUExPQUQsIH0sCisJW0IyMDU2X1JYX1ZHQV9HQUlOXQkJPSB7IC5naHo1ID0gMHgwMDBhLCAuZ2h6MiA9IDB4MDAwYSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1ZHQV9IUF9DT1JORVJfQlddCT0geyAuZ2h6NSA9IDB4MDAwMSwgLmdoejIgPSAweDAwMDEsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9WR0FCVUZfQklBU10JCT0geyAuZ2h6NSA9IDB4MDAyMiwgLmdoejIgPSAweDAwMjIsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9WR0FCVUZfR0FJTl9CV10JPSB7IC5naHo1ID0gMHgwMDMwLCAuZ2h6MiA9IDB4MDAzMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1RYRkJNSVhfQV0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9UWEZCTUlYX0ddCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhTUEFSRTFdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhTUEFSRTJdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhTUEFSRTNdCQk9IHsgLmdoejUgPSAweDAwMDUsIC5naHoyID0gMHgwMDA1LCBVUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYU1BBUkU0XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYU1BBUkU1XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYU1BBUkU2XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYU1BBUkU3XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYU1BBUkU4XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYU1BBUkU5XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYU1BBUkUxMF0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWFNQQVJFMTFdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhTUEFSRTEyXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYU1BBUkUxM10JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWFNQQVJFMTRdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhTUEFSRTE1XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYU1BBUkUxNl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9TVEFUVVNfTE5BQV9HQUlOXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfU1RBVFVTX0xOQUdfR0FJTl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1NUQVRVU19NSVhUSUFfR0FJTl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1NUQVRVU19SWExQRl9HQUlOXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfU1RBVFVTX1ZHQV9CVUZfR0FJTl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1NUQVRVU19SWExQRl9RXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfU1RBVFVTX1JYTFBGX0JVRl9CV10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1NUQVRVU19SWExQRl9WR0FfSFBDXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfU1RBVFVTX1JYTFBGX1JDXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfU1RBVFVTX0hQQ19SQ10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGIyMDU2X2luaXR0YWJfZW50cnkgYjIwNTZfaW5pdHRhYl9yZXY3X3N5bltdID0geworCVtCMjA1Nl9TWU5fUkVTRVJWRURfQUREUjJdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkVTRVJWRURfQUREUjNdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkVTRVJWRURfQUREUjRdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkVTRVJWRURfQUREUjVdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkVTRVJWRURfQUREUjZdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkVTRVJWRURfQUREUjddCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fQ09NX0NUUkxdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0NPTV9QVV0JCT0geyAuZ2h6NSA9IDB4MDAwMSwgLmdoejIgPSAweDAwMDEsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fQ09NX09WUl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fQ09NX1JFU0VUXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9DT01fUkNBTF0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fQ09NX1JDX1JYTFBGXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0NPTV9SQ19UWExQRl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9DT01fUkNfUlhIUEZdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkVTRVJWRURfQUREUjE2XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1JFU0VSVkVEX0FERFIxN10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9SRVNFUlZFRF9BRERSMThdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkVTRVJWRURfQUREUjE5XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1JFU0VSVkVEX0FERFIyMF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9SRVNFUlZFRF9BRERSMjFdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkVTRVJWRURfQUREUjIyXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1JFU0VSVkVEX0FERFIyM10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9SRVNFUlZFRF9BRERSMjRdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkVTRVJWRURfQUREUjI1XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1JFU0VSVkVEX0FERFIyNl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9SRVNFUlZFRF9BRERSMjddCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkVTRVJWRURfQUREUjI4XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1JFU0VSVkVEX0FERFIyOV0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9SRVNFUlZFRF9BRERSMzBdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkVTRVJWRURfQUREUjMxXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0dQSU9fTUFTVEVSMV0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9HUElPX01BU1RFUjJdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fVE9QQklBU19NQVNURVJdCT0geyAuZ2h6NSA9IDB4MDA2MCwgLmdoejIgPSAweDAwNjAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fVE9QQklBU19SQ0FMXQk9IHsgLmdoejUgPSAweDAwMDYsIC5naHoyID0gMHgwMDA2LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0FGRVJFR10JCT0geyAuZ2h6NSA9IDB4MDAwYywgLmdoejIgPSAweDAwMGMsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fVEVNUFBST0NTRU5TRV0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9URU1QUFJPQ1NFTlNFSURBQ10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9URU1QUFJPQ1NFTlNFUkNBTF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MUE9dCQkJPSB7IC5naHo1ID0gMHgwMDAxLCAuZ2h6MiA9IDB4MDAwMSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9WRERDQUxfTUFTVEVSXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1ZERENBTF9JREFDXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9WRERDQUxfU1RBVFVTXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1JDQUxfTUFTVEVSXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9SQ0FMX0NPREVfT1VUXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1JDQ0FMX0NUUkwwXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9SQ0NBTF9DVFJMMV0JCT0geyAuZ2h6NSA9IDB4MDAxZiwgLmdoejIgPSAweDAwMWYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkNDQUxfQ1RSTDJdCQk9IHsgLmdoejUgPSAweDAwMTUsIC5naHoyID0gMHgwMDE1LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1JDQ0FMX0NUUkwzXQkJPSB7IC5naHo1ID0gMHgwMDBmLCAuZ2h6MiA9IDB4MDAwZiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9SQ0NBTF9DVFJMNF0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkNDQUxfQ1RSTDVdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1JDQ0FMX0NUUkw2XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9SQ0NBTF9DVFJMN10JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkNDQUxfQ1RSTDhdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1JDQ0FMX0NUUkw5XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9SQ0NBTF9DVFJMMTBdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkNDQUxfQ1RSTDExXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1pDQUxfU1BBUkUxXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9aQ0FMX1NQQVJFMl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX01BU1QxXQkJPSB7IC5naHo1ID0gMHgwMDEzLCAuZ2h6MiA9IDB4MDAxMywgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfTUFTVDJdCQk9IHsgLmdoejUgPSAweDAwMGYsIC5naHoyID0gMHgwMDBmLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9NQVNUM10JCT0geyAuZ2h6NSA9IDB4MDAxOCwgLmdoejIgPSAweDAwMTgsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX0JJQVNfUkVTRVRdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX1hUQUwwXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfWFRBTDFdCQk9IHsgLmdoejUgPSAweDAwMjAsIC5naHoyID0gMHgwMDIwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9YVEFMM10JCT0geyAuZ2h6NSA9IDB4MDAyMCwgLmdoejIgPSAweDAwMjAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX1hUQUw0XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfWFRBTDVdCQk9IHsgLmdoejUgPSAweDAwNzcsIC5naHoyID0gMHgwMDc3LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9YVEFMNl0JCT0geyAuZ2h6NSA9IDB4MDAwNywgLmdoejIgPSAweDAwMDcsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX1JFRkRJVl0JCT0geyAuZ2h6NSA9IDB4MDAwMSwgLmdoejIgPSAweDAwMDEsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX1BGRF0JCT0geyAuZ2h6NSA9IDB4MDAwNCwgLmdoejIgPSAweDAwMDQsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX0NQMV0JCT0geyAuZ2h6NSA9IDB4MDAwZiwgLmdoejIgPSAweDAwMGYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX0NQMl0JCT0geyAuZ2h6NSA9IDB4MDAzMCwgLmdoejIgPSAweDAwMzAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX0NQM10JCT0geyAuZ2h6NSA9IDB4MDAzMiwgLmdoejIgPSAweDAwMzIsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX0xPT1BGSUxURVIxXQk9IHsgLmdoejUgPSAweDAwMGQsIC5naHoyID0gMHgwMDBkLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9MT09QRklMVEVSMl0JPSB7IC5naHo1ID0gMHgwMDBkLCAuZ2h6MiA9IDB4MDAwZCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfTE9PUEZJTFRFUjNdCT0geyAuZ2h6NSA9IDB4MDAwNCwgLmdoejIgPSAweDAwMDQsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX0xPT1BGSUxURVI0XQk9IHsgLmdoejUgPSAweDAwMDYsIC5naHoyID0gMHgwMDA2LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9MT09QRklMVEVSNV0JPSB7IC5naHo1ID0gMHgwMDAxLCAuZ2h6MiA9IDB4MDAwMSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfTU1EMV0JCT0geyAuZ2h6NSA9IDB4MDAxYywgLmdoejIgPSAweDAwMWMsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX01NRDJdCQk9IHsgLmdoejUgPSAweDAwMDIsIC5naHoyID0gMHgwMDAyLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9WQ08xXQkJPSB7IC5naHo1ID0gMHgwMDAyLCAuZ2h6MiA9IDB4MDAwMiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfVkNPMl0JCT0geyAuZ2h6NSA9IDB4MDBmNywgLmdoejIgPSAweDAwZjcsIFVQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9NT05JVE9SMV0JPSB7IC5naHo1ID0gMHgwMGI0LCAuZ2h6MiA9IDB4MDBiNCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfTU9OSVRPUjJdCT0geyAuZ2h6NSA9IDB4MDBkMiwgLmdoejIgPSAweDAwZDIsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX1ZDT0NBTDFdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9WQ09DQUwyXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfVkNPQ0FMNF0JCT0geyAuZ2h6NSA9IDB4MDAwNCwgLmdoejIgPSAweDAwMDQsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX1ZDT0NBTDVdCQk9IHsgLmdoejUgPSAweDAwOTYsIC5naHoyID0gMHgwMDk2LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9WQ09DQUw2XQkJPSB7IC5naHo1ID0gMHgwMDNlLCAuZ2h6MiA9IDB4MDAzZSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfVkNPQ0FMN10JCT0geyAuZ2h6NSA9IDB4MDAzZSwgLmdoejIgPSAweDAwM2UsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX1ZDT0NBTDhdCQk9IHsgLmdoejUgPSAweDAwMTMsIC5naHoyID0gMHgwMDEzLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9WQ09DQUw5XQkJPSB7IC5naHo1ID0gMHgwMDAyLCAuZ2h6MiA9IDB4MDAwMiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfVkNPQ0FMMTBdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX1ZDT0NBTDExXQk9IHsgLmdoejUgPSAweDAwMDcsIC5naHoyID0gMHgwMDA3LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9WQ09DQUwxMl0JPSB7IC5naHo1ID0gMHgwMDA3LCAuZ2h6MiA9IDB4MDAwNywgVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX1ZDT0NBTDEzXQk9IHsgLmdoejUgPSAweDAwMDgsIC5naHoyID0gMHgwMDA4LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9WUkVHXQkJPSB7IC5naHo1ID0gMHgwMDAzLCAuZ2h6MiA9IDB4MDAwMywgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfU1RBVFVTMV0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX1NUQVRVUzJdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9TVEFUVVMzXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9QVTBdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX1BVMV0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fUFUyXQkJPSB7IC5naHo1ID0gMHgwMDQwLCAuZ2h6MiA9IDB4MDA0MCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9QVTNdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX1BVNV0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fUFU2XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9QVTddCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX1BVOF0JCT0geyAuZ2h6NSA9IDB4MDAwMSwgLmdoejIgPSAweDAwMDEsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQklBU19SRVNFVF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9SQ0NSMV0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fVkNPQlVGMV0JPSB7IC5naHo1ID0gMHgwMDYwLCAuZ2h6MiA9IDB4MDA2MCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9NSVhFUjFdCT0geyAuZ2h6NSA9IDB4MDA2NiwgLmdoejIgPSAweDAwNjYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fTUlYRVIyXQk9IHsgLmdoejUgPSAweDAwMGMsIC5naHoyID0gMHgwMDBjLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0JVRjFdCQk9IHsgLmdoejUgPSAweDAwNjYsIC5naHoyID0gMHgwMDY2LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOQlVGMl0JCT0geyAuZ2h6NSA9IDB4MDA4ZiwgLmdoejIgPSAweDAwOGYsIFVQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0JVRjNdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0JVRjRdCQk9IHsgLmdoejUgPSAweDAwY2MsIC5naHoyID0gMHgwMGNjLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0RJVjFdCQk9IHsgLmdoejUgPSAweDAwMDEsIC5naHoyID0gMHgwMDAxLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0RJVjJdCQk9IHsgLmdoejUgPSAweDAwNjYsIC5naHoyID0gMHgwMDY2LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0RJVjNdCQk9IHsgLmdoejUgPSAweDAwNjYsIC5naHoyID0gMHgwMDY2LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0FDTDFdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0FDTDJdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0FDTDNdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0FDTDRdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0FDTDVdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0FDTDZdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0FDTE9VVF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9BQ0xDQUwxXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0FDTENBTDJdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQUNMQ0FMM10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9DQUxFTl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fUEVBS0RFVDFdCT0geyAuZ2h6NSA9IDB4MDBmZiwgLmdoejIgPSAweDAwZmYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQ09SRV9BQ0xfT1ZSXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX1JYX0RJRkZfQUNMX09WUl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9UWF9ESUZGX0FDTF9PVlJdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fUlhfQ01PU19BQ0xfT1ZSXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX1RYX0NNT1NfQUNMX09WUl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9WQ09CVUYyXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX01JWEVSM10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9CVUY1XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9CVUY2XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9DQlVGUlgxXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0NCVUZSWDJdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQ0JVRlJYM10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9DQlVGUlg0XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0NCVUZUWDFdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQ0JVRlRYMl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9DQlVGVFgzXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0NCVUZUWDRdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQ01PU1JYMV0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9DTU9TUlgyXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0NNT1NSWDNdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQ01PU1JYNF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9DTU9TVFgxXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0NNT1NUWDJdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQ01PU1RYM10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9DTU9TVFg0XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX1ZDT0JVRjJfT1ZSVkFMXT0geyAuZ2h6NSA9IDB4MDAwNiwgLmdoejIgPSAweDAwMDYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fTUlYRVIzX09WUlZBTF0JPSB7IC5naHo1ID0gMHgwMDY2LCAuZ2h6MiA9IDB4MDA2NiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9CVUY1X09WUlZBTF0JPSB7IC5naHo1ID0gMHgwMDY2LCAuZ2h6MiA9IDB4MDA2NiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9CVUY2X09WUlZBTF0JPSB7IC5naHo1ID0gMHgwMDY2LCAuZ2h6MiA9IDB4MDA2NiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9DQlVGUlgxX09WUlZBTF09IHsgLmdoejUgPSAweDAwNjYsIC5naHoyID0gMHgwMDY2LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0NCVUZSWDJfT1ZSVkFMXT0geyAuZ2h6NSA9IDB4MDA2NiwgLmdoejIgPSAweDAwNjYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQ0JVRlJYM19PVlJWQUxdPSB7IC5naHo1ID0gMHgwMDY2LCAuZ2h6MiA9IDB4MDA2NiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9DQlVGUlg0X09WUlZBTF09IHsgLmdoejUgPSAweDAwNjYsIC5naHoyID0gMHgwMDY2LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0NCVUZUWDFfT1ZSVkFMXT0geyAuZ2h6NSA9IDB4MDA2NiwgLmdoejIgPSAweDAwNjYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQ0JVRlRYMl9PVlJWQUxdPSB7IC5naHo1ID0gMHgwMDY2LCAuZ2h6MiA9IDB4MDA2NiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9DQlVGVFgzX09WUlZBTF09IHsgLmdoejUgPSAweDAwNjYsIC5naHoyID0gMHgwMDY2LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0NCVUZUWDRfT1ZSVkFMXT0geyAuZ2h6NSA9IDB4MDA2NiwgLmdoejIgPSAweDAwNjYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQ01PU1JYMV9PVlJWQUxdPSB7IC5naHo1ID0gMHgwMDY2LCAuZ2h6MiA9IDB4MDA2NiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9DTU9TUlgyX09WUlZBTF09IHsgLmdoejUgPSAweDAwNjYsIC5naHoyID0gMHgwMDY2LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0NNT1NSWDNfT1ZSVkFMXT0geyAuZ2h6NSA9IDB4MDA2NiwgLmdoejIgPSAweDAwNjYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQ01PU1JYNF9PVlJWQUxdPSB7IC5naHo1ID0gMHgwMDY2LCAuZ2h6MiA9IDB4MDA2NiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9DTU9TVFgxX09WUlZBTF09IHsgLmdoejUgPSAweDAwNjYsIC5naHoyID0gMHgwMDY2LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0NNT1NUWDJfT1ZSVkFMXT0geyAuZ2h6NSA9IDB4MDA2NiwgLmdoejIgPSAweDAwNjYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQ01PU1RYM19PVlJWQUxdPSB7IC5naHo1ID0gMHgwMDY2LCAuZ2h6MiA9IDB4MDA2NiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9DTU9TVFg0X09WUlZBTF09IHsgLmdoejUgPSAweDAwNjYsIC5naHoyID0gMHgwMDY2LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0FDTF9XQUlUQ05UXQk9IHsgLmdoejUgPSAweDAwMGEsIC5naHoyID0gMHgwMDBhLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0NPUkVfQ0FMVkFMSURdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fUlhfQ01PU19DQUxWQUxJRF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9UWF9DTU9TX1ZBTElEXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYjIwNTZfaW5pdHRhYl9lbnRyeSBiMjA1Nl9pbml0dGFiX3JldjdfdHhbXSA9IHsKKwlbQjIwNTZfVFhfUkVTRVJWRURfQUREUjJdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9SRVNFUlZFRF9BRERSM10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFI0XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfUkVTRVJWRURfQUREUjVdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9SRVNFUlZFRF9BRERSNl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFI3XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfQ09NX0NUUkxdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfQ09NX1BVXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0NPTV9PVlJdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfQ09NX1JFU0VUXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0NPTV9SQ0FMXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0NPTV9SQ19SWExQRl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9DT01fUkNfVFhMUEZdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfQ09NX1JDX1JYSFBGXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFIxNl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFIxN10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFIxOF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFIxOV0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFIyMF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFIyMV0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFIyMl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFIyM10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFIyNF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFIyNV0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFIyNl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFIyN10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFIyOF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFIyOV0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFIzMF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFIzMV0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0lRQ0FMX0dBSU5fQlddCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9MT0ZUX0ZJTkVfSV0JCT0geyAuZ2h6NSA9IDB4MDA4OCwgLmdoejIgPSAweDAwODgsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9MT0ZUX0ZJTkVfUV0JCT0geyAuZ2h6NSA9IDB4MDA4OCwgLmdoejIgPSAweDAwODgsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9MT0ZUX0NPQVJTRV9JXQk9IHsgLmdoejUgPSAweDAwODgsIC5naHoyID0gMHgwMDg4LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfTE9GVF9DT0FSU0VfUV0JPSB7IC5naHo1ID0gMHgwMDg4LCAuZ2h6MiA9IDB4MDA4OCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYX0NPTV9NQVNURVIxXQk9IHsgLmdoejUgPSAweDAwMGMsIC5naHoyID0gMHgwMDBjLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhfQ09NX01BU1RFUjJdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9SWElRQ0FMX1RYTVVYXQk9IHsgLmdoejUgPSAweDAwMDMsIC5naHoyID0gMHgwMDAzLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhfU1NJX01BU1RFUl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0lRQ0FMX1ZDTV9IR10JCT0geyAuZ2h6NSA9IDB4MDAwMywgLmdoejIgPSAweDAwMDMsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9JUUNBTF9JREFDXQkJPSB7IC5naHo1ID0gMHgwMDM3LCAuZ2h6MiA9IDB4MDAzNywgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RTU0lfVkNNXQkJPSB7IC5naHo1ID0gMHgwMDAzLCAuZ2h6MiA9IDB4MDAwMywgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYX0FNUF9ERVRdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhfU1NJX01VWF0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UU1NJQV0JCT0geyAuZ2h6NSA9IDB4MDAwMSwgLmdoejIgPSAweDAwMDEsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UU1NJR10JCT0geyAuZ2h6NSA9IDB4MDAwMSwgLmdoejIgPSAweDAwMDEsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UU1NJX01JU0MxXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RTU0lfTUlTQzJdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFNTSV9NSVNDM10JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QQV9TUEFSRTFdCQk9IHsgLmdoejUgPSAweDAwMTEsIC5naHoyID0gMHgwMDExLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfUEFfU1BBUkUyXQkJPSB7IC5naHo1ID0gMHgwMGVlLCAuZ2h6MiA9IDB4MDBlZSwgVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9JTlRQQUFfTUFTVEVSXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfSU5UUEFBX0dBSU5dCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfSU5UUEFBX0JPT1NUX1RVTkVdCT0geyAuZ2h6NSA9IDB4MDAwMywgLmdoejIgPSAweDAwMDMsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9JTlRQQUFfSUFVWF9TVEFUXQk9IHsgLmdoejUgPSAweDAwNTAsIC5naHoyID0gMHgwMDUwLCBVUExPQUQsIH0sCisJW0IyMDU2X1RYX0lOVFBBQV9JQVVYX0RZTl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0lOVFBBQV9JTUFJTl9TVEFUXQk9IHsgLmdoejUgPSAweDAwNTAsIC5naHoyID0gMHgwMDUwLCBVUExPQUQsIH0sCisJW0IyMDU2X1RYX0lOVFBBQV9JTUFJTl9EWU5dCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9JTlRQQUFfQ0FTQ0JJQVNdCT0geyAuZ2h6NSA9IDB4MDA2ZSwgLmdoejIgPSAweDAwNmUsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9JTlRQQUFfUEFTTE9QRV0JPSB7IC5naHo1ID0gMHgwMGYwLCAuZ2h6MiA9IDB4MDBmMCwgVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9JTlRQQUFfUEFfTUlTQ10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0lOVFBBR19NQVNURVJdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9JTlRQQUdfR0FJTl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9JTlRQQUdfQk9PU1RfVFVORV0JPSB7IC5naHo1ID0gMHgwMDAzLCAuZ2h6MiA9IDB4MDAwMywgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0lOVFBBR19JQVVYX1NUQVRdCT0geyAuZ2h6NSA9IDB4MDAwMywgLmdoejIgPSAweDAwMDMsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9JTlRQQUdfSUFVWF9EWU5dCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9JTlRQQUdfSU1BSU5fU1RBVF0JPSB7IC5naHo1ID0gMHgwMDFlLCAuZ2h6MiA9IDB4MDAxZSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0lOVFBBR19JTUFJTl9EWU5dCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9JTlRQQUdfQ0FTQ0JJQVNdCT0geyAuZ2h6NSA9IDB4MDA2ZSwgLmdoejIgPSAweDAwNmUsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9JTlRQQUdfUEFTTE9QRV0JPSB7IC5naHo1ID0gMHgwMGYwLCAuZ2h6MiA9IDB4MDBmMCwgVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9JTlRQQUdfUEFfTUlTQ10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1BBREFfTUFTVEVSXQkJPSB7IC5naHo1ID0gMHgwMDAyLCAuZ2h6MiA9IDB4MDAwMiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1BBREFfSURBQ10JCT0geyAuZ2h6NSA9IDB4MDBmZiwgLmdoejIgPSAweDAwZmYsIFVQTE9BRCwgfSwKKwlbQjIwNTZfVFhfUEFEQV9DQVNDQklBU10JPSB7IC5naHo1ID0gMHgwMDBjLCAuZ2h6MiA9IDB4MDAwYywgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1BBREFfR0FJTl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QQURBX0JPT1NUX1RVTkVdCT0geyAuZ2h6NSA9IDB4MDAzOCwgLmdoejIgPSAweDAwMzgsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QQURBX1NMT1BFXQkJPSB7IC5naHo1ID0gMHgwMDcwLCAuZ2h6MiA9IDB4MDA3MCwgVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QQURHX01BU1RFUl0JCT0geyAuZ2h6NSA9IDB4MDAwMiwgLmdoejIgPSAweDAwMDIsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QQURHX0lEQUNdCQk9IHsgLmdoejUgPSAweDAwODgsIC5naHoyID0gMHgwMDg4LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfUEFER19DQVNDQklBU10JPSB7IC5naHo1ID0gMHgwMDBjLCAuZ2h6MiA9IDB4MDAwYywgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1BBREdfR0FJTl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QQURHX0JPT1NUX1RVTkVdCT0geyAuZ2h6NSA9IDB4MDAwOCwgLmdoejIgPSAweDAwMDgsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QQURHX1NMT1BFXQkJPSB7IC5naHo1ID0gMHgwMDcwLCAuZ2h6MiA9IDB4MDA3MCwgVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QR0FBX01BU1RFUl0JCT0geyAuZ2h6NSA9IDB4MDAwMiwgLmdoejIgPSAweDAwMDIsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QR0FBX0lEQUNdCQk9IHsgLmdoejUgPSAweDAwZmYsIC5naHoyID0gMHgwMGZmLCBVUExPQUQsIH0sCisJW0IyMDU2X1RYX1BHQUFfR0FJTl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QR0FBX0JPT1NUX1RVTkVdCT0geyAuZ2h6NSA9IDB4MDA4MywgLmdoejIgPSAweDAwODMsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QR0FBX1NMT1BFXQkJPSB7IC5naHo1ID0gMHgwMDc3LCAuZ2h6MiA9IDB4MDA3NywgVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QR0FBX01JU0NdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfUEdBR19NQVNURVJdCQk9IHsgLmdoejUgPSAweDAwMDIsIC5naHoyID0gMHgwMDAyLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfUEdBR19JREFDXQkJPSB7IC5naHo1ID0gMHgwMDg4LCAuZ2h6MiA9IDB4MDA4OCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1BHQUdfR0FJTl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QR0FHX0JPT1NUX1RVTkVdCT0geyAuZ2h6NSA9IDB4MDAwOCwgLmdoejIgPSAweDAwMDgsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QR0FHX1NMT1BFXQkJPSB7IC5naHo1ID0gMHgwMDc3LCAuZ2h6MiA9IDB4MDA3NywgVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QR0FHX01JU0NdCQk9IHsgLmdoejUgPSAweDAwMDEsIC5naHoyID0gMHgwMDAxLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfTUlYQV9NQVNURVJdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfTUlYQV9CT09TVF9UVU5FXQk9IHsgLmdoejUgPSAweDAwMDcsIC5naHoyID0gMHgwMDA3LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfTUlYR10JCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfTUlYR19CT09TVF9UVU5FXQk9IHsgLmdoejUgPSAweDAwMDcsIC5naHoyID0gMHgwMDA3LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfQkJfR01fTUFTVEVSXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0dNQkJfR01dCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfR01CQl9JREFDXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWExQRl9NQVNURVJdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhMUEZfUkNDQUxdCQk9IHsgLmdoejUgPSAweDAwMGEsIC5naHoyID0gMHgwMDBhLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhMUEZfUkNDQUxfT0ZGMF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYTFBGX1JDQ0FMX09GRjFdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWExQRl9SQ0NBTF9PRkYyXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhMUEZfUkNDQUxfT0ZGM10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYTFBGX1JDQ0FMX09GRjRdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWExQRl9SQ0NBTF9PRkY1XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhMUEZfUkNDQUxfT0ZGNl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYTFBGX0JXXQkJPSB7IC5naHo1ID0gMHgwMDAyLCAuZ2h6MiA9IDB4MDAwMiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYTFBGX0dBSU5dCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhMUEZfSURBQ10JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWExQRl9JREFDXzBdCQk9IHsgLmdoejUgPSAweDAwMGUsIC5naHoyID0gMHgwMDBlLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhMUEZfSURBQ18xXQkJPSB7IC5naHo1ID0gMHgwMDBlLCAuZ2h6MiA9IDB4MDAwZSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYTFBGX0lEQUNfMl0JCT0geyAuZ2h6NSA9IDB4MDAwZSwgLmdoejIgPSAweDAwMGUsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWExQRl9JREFDXzNdCQk9IHsgLmdoejUgPSAweDAwMTMsIC5naHoyID0gMHgwMDEzLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhMUEZfSURBQ180XQkJPSB7IC5naHo1ID0gMHgwMDEzLCAuZ2h6MiA9IDB4MDAxMywgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYTFBGX0lEQUNfNV0JCT0geyAuZ2h6NSA9IDB4MDAxYiwgLmdoejIgPSAweDAwMWIsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWExQRl9JREFDXzZdCQk9IHsgLmdoejUgPSAweDAwMWIsIC5naHoyID0gMHgwMDFiLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhMUEZfT1BBTVBfSURBQ10JPSB7IC5naHo1ID0gMHgwMDU1LCAuZ2h6MiA9IDB4MDA1NSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYTFBGX01JU0NdCQk9IHsgLmdoejUgPSAweDAwNWIsIC5naHoyID0gMHgwMDViLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhTUEFSRTFdCQk9IHsgLmdoejUgPSAweDAwMzAsIC5naHoyID0gMHgwMDMwLCBVUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYU1BBUkUyXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYU1BBUkUzXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYU1BBUkU0XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYU1BBUkU1XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYU1BBUkU2XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYU1BBUkU3XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYU1BBUkU4XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYU1BBUkU5XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYU1BBUkUxMF0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWFNQQVJFMTFdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhTUEFSRTEyXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYU1BBUkUxM10JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWFNQQVJFMTRdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhTUEFSRTE1XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYU1BBUkUxNl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9TVEFUVVNfSU5UUEFfR0FJTl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1NUQVRVU19QQURfR0FJTl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1NUQVRVU19QR0FfR0FJTl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1NUQVRVU19HTV9UWExQRl9HQUlOXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfU1RBVFVTX1RYTFBGX0JXXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfU1RBVFVTX1RYTFBGX1JDXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfR01CQl9JREFDMF0JCT0geyAuZ2h6NSA9IDB4MDA3MCwgLmdoejIgPSAweDAwNzAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9HTUJCX0lEQUMxXQkJPSB7IC5naHo1ID0gMHgwMDcwLCAuZ2h6MiA9IDB4MDA3MCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0dNQkJfSURBQzJdCQk9IHsgLmdoejUgPSAweDAwNzEsIC5naHoyID0gMHgwMDcxLCBVUExPQUQsIH0sCisJW0IyMDU2X1RYX0dNQkJfSURBQzNdCQk9IHsgLmdoejUgPSAweDAwNzEsIC5naHoyID0gMHgwMDcxLCBVUExPQUQsIH0sCisJW0IyMDU2X1RYX0dNQkJfSURBQzRdCQk9IHsgLmdoejUgPSAweDAwNzIsIC5naHoyID0gMHgwMDcyLCBVUExPQUQsIH0sCisJW0IyMDU2X1RYX0dNQkJfSURBQzVdCQk9IHsgLmdoejUgPSAweDAwNzMsIC5naHoyID0gMHgwMDczLCBVUExPQUQsIH0sCisJW0IyMDU2X1RYX0dNQkJfSURBQzZdCQk9IHsgLmdoejUgPSAweDAwNzQsIC5naHoyID0gMHgwMDc0LCBVUExPQUQsIH0sCisJW0IyMDU2X1RYX0dNQkJfSURBQzddCQk9IHsgLmdoejUgPSAweDAwNzUsIC5naHoyID0gMHgwMDc1LCBVUExPQUQsIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGIyMDU2X2luaXR0YWJfZW50cnkgYjIwNTZfaW5pdHRhYl9yZXY3X3J4W10gPSB7CisJW0IyMDU2X1JYX1JFU0VSVkVEX0FERFIyXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUkVTRVJWRURfQUREUjNdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SRVNFUlZFRF9BRERSNF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JFU0VSVkVEX0FERFI1XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUkVTRVJWRURfQUREUjZdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SRVNFUlZFRF9BRERSN10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX0NPTV9DVFJMXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX0NPTV9QVV0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9DT01fT1ZSXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX0NPTV9SRVNFVF0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9DT01fUkNBTF0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9DT01fUkNfUlhMUEZdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfQ09NX1JDX1RYTFBGXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX0NPTV9SQ19SWEhQRl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SRVNFUlZFRF9BRERSMTZdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SRVNFUlZFRF9BRERSMTddCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SRVNFUlZFRF9BRERSMThdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SRVNFUlZFRF9BRERSMTldCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SRVNFUlZFRF9BRERSMjBdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SRVNFUlZFRF9BRERSMjFdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SRVNFUlZFRF9BRERSMjJdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SRVNFUlZFRF9BRERSMjNdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SRVNFUlZFRF9BRERSMjRdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SRVNFUlZFRF9BRERSMjVdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SRVNFUlZFRF9BRERSMjZdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SRVNFUlZFRF9BRERSMjddCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SRVNFUlZFRF9BRERSMjhdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SRVNFUlZFRF9BRERSMjldCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SRVNFUlZFRF9BRERSMzBdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SRVNFUlZFRF9BRERSMzFdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWElRQ0FMX1JYTVVYXQk9IHsgLmdoejUgPSAweDAwMDMsIC5naHoyID0gMHgwMDAzLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlNTSV9QVV0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SU1NJX1NFTF0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SU1NJX0dBSU5dCQk9IHsgLmdoejUgPSAweDAwOTAsIC5naHoyID0gMHgwMDkwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlNTSV9OQl9JREFDXQkJPSB7IC5naHo1ID0gMHgwMDU1LCAuZ2h6MiA9IDB4MDA1NSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JTU0lfV0IySV9JREFDXzFdCT0geyAuZ2h6NSA9IDB4MDAxNSwgLmdoejIgPSAweDAwMTUsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SU1NJX1dCMklfSURBQ18yXQk9IHsgLmdoejUgPSAweDAwMDUsIC5naHoyID0gMHgwMDA1LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlNTSV9XQjJRX0lEQUNfMV0JPSB7IC5naHo1ID0gMHgwMDE1LCAuZ2h6MiA9IDB4MDAxNSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JTU0lfV0IyUV9JREFDXzJdCT0geyAuZ2h6NSA9IDB4MDAwNSwgLmdoejIgPSAweDAwMDUsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SU1NJX1BPTEVdCQk9IHsgLmdoejUgPSAweDAwMjAsIC5naHoyID0gMHgwMDIwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlNTSV9XQjFfSURBQ10JPSB7IC5naHo1ID0gMHgwMDExLCAuZ2h6MiA9IDB4MDAxMSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JTU0lfTUlTQ10JCT0geyAuZ2h6NSA9IDB4MDA5MCwgLmdoejIgPSAweDAwOTAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9MTkFBX01BU1RFUl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9MTkFBX1RVTkVdCQk9IHsgLmdoejUgPSAweDAwODgsIC5naHoyID0gMHgwMDg4LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfTE5BQV9HQUlOXQkJPSB7IC5naHo1ID0gMHgwMDMyLCAuZ2h6MiA9IDB4MDAzMiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX0xOQV9BX1NMT1BFXQkJPSB7IC5naHo1ID0gMHgwMDc3LCAuZ2h6MiA9IDB4MDA3NywgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX0JJQVNQT0xFX0xOQUExX0lEQUNdCT0geyAuZ2h6NSA9IDB4MDAxNywgLmdoejIgPSAweDAwMTcsIFVQTE9BRCwgfSwKKwlbQjIwNTZfUlhfTE5BQTJfSURBQ10JCT0geyAuZ2h6NSA9IDB4MDBmZiwgLmdoejIgPSAweDAwZmYsIFVQTE9BRCwgfSwKKwlbQjIwNTZfUlhfTE5BMUFfTUlTQ10JCT0geyAuZ2h6NSA9IDB4MDAyMCwgLmdoejIgPSAweDAwMjAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9MTkFHX01BU1RFUl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9MTkFHX1RVTkVdCQk9IHsgLmdoejUgPSAweDAwODgsIC5naHoyID0gMHgwMDg4LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfTE5BR19HQUlOXQkJPSB7IC5naHo1ID0gMHgwMDMyLCAuZ2h6MiA9IDB4MDAzMiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX0xOQV9HX1NMT1BFXQkJPSB7IC5naHo1ID0gMHgwMDc3LCAuZ2h6MiA9IDB4MDA3NywgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX0JJQVNQT0xFX0xOQUcxX0lEQUNdCT0geyAuZ2h6NSA9IDB4MDAxNywgLmdoejIgPSAweDAwMTcsIFVQTE9BRCwgfSwKKwlbQjIwNTZfUlhfTE5BRzJfSURBQ10JCT0geyAuZ2h6NSA9IDB4MDBmMCwgLmdoejIgPSAweDAwZjAsIFVQTE9BRCwgfSwKKwlbQjIwNTZfUlhfTE5BMUdfTUlTQ10JCT0geyAuZ2h6NSA9IDB4MDAyMCwgLmdoejIgPSAweDAwMjAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9NSVhBX01BU1RFUl0JCT0geyAuZ2h6NSA9IDB4MDAwOCwgLmdoejIgPSAweDAwMDgsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9NSVhBX1ZDTV0JCT0geyAuZ2h6NSA9IDB4MDA1NSwgLmdoejIgPSAweDAwNTUsIFVQTE9BRCwgfSwKKwlbQjIwNTZfUlhfTUlYQV9DVFJMUFRBVF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX01JWEFfTE9CX0JJQVNdCT0geyAuZ2h6NSA9IDB4MDA4OCwgLmdoejIgPSAweDAwODgsIFVQTE9BRCwgfSwKKwlbQjIwNTZfUlhfTUlYQV9DT1JFX0lEQUNdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9NSVhBX0NNRkJfSURBQ10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9NSVhBX0JJQVNfQVVYXQk9IHsgLmdoejUgPSAweDAwMDcsIC5naHoyID0gMHgwMDA3LCBVUExPQUQsIH0sCisJW0IyMDU2X1JYX01JWEFfQklBU19NQUlOXQk9IHsgLmdoejUgPSAweDAwMDYsIC5naHoyID0gMHgwMDA2LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfTUlYQV9CSUFTX01JU0NdCT0geyAuZ2h6NSA9IDB4MDAwNCwgLmdoejIgPSAweDAwMDQsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9NSVhBX01BU1RfQklBU10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX01JWEdfTUFTVEVSXQkJPSB7IC5naHo1ID0gMHgwMDA4LCAuZ2h6MiA9IDB4MDAwOCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX01JWEdfVkNNXQkJPSB7IC5naHo1ID0gMHgwMDU1LCAuZ2h6MiA9IDB4MDA1NSwgVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9NSVhHX0NUUkxQVEFUXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfTUlYR19MT0JfQklBU10JPSB7IC5naHo1ID0gMHgwMDExLCAuZ2h6MiA9IDB4MDAxMSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX01JWEdfQ09SRV9JREFDXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfTUlYR19DTUZCX0lEQUNdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIFVQTE9BRCwgfSwKKwlbQjIwNTZfUlhfTUlYR19CSUFTX0FVWF0JPSB7IC5naHo1ID0gMHgwMDA3LCAuZ2h6MiA9IDB4MDAwNywgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX01JWEdfQklBU19NQUlOXQk9IHsgLmdoejUgPSAweDAwMDYsIC5naHoyID0gMHgwMDA2LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfTUlYR19CSUFTX01JU0NdCT0geyAuZ2h6NSA9IDB4MDAwNCwgLmdoejIgPSAweDAwMDQsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9NSVhHX01BU1RfQklBU10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1RJQV9NQVNURVJdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfVElBX0lPUEFNUF0JCT0geyAuZ2h6NSA9IDB4MDAyNiwgLmdoejIgPSAweDAwMjYsIFVQTE9BRCwgfSwKKwlbQjIwNTZfUlhfVElBX1FPUEFNUF0JCT0geyAuZ2h6NSA9IDB4MDAyNiwgLmdoejIgPSAweDAwMjYsIFVQTE9BRCwgfSwKKwlbQjIwNTZfUlhfVElBX0lNSVNDXQkJPSB7IC5naHo1ID0gMHgwMDBmLCAuZ2h6MiA9IDB4MDAwZiwgVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9USUFfUU1JU0NdCQk9IHsgLmdoejUgPSAweDAwMGYsIC5naHoyID0gMHgwMDBmLCBVUExPQUQsIH0sCisJW0IyMDU2X1JYX1RJQV9HQUlOXQkJPSB7IC5naHo1ID0gMHgwMDQ0LCAuZ2h6MiA9IDB4MDA0NCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1RJQV9TUEFSRTFdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfVElBX1NQQVJFMl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9CQl9MUEZfTUFTVEVSXQk9IHsgLmdoejUgPSAweDAwMDgsIC5naHoyID0gMHgwMDA4LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfQUFDSV9NQVNURVJdCQk9IHsgLmdoejUgPSAweDAwMDgsIC5naHoyID0gMHgwMDA4LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhMUEZfSURBQ10JCT0geyAuZ2h6NSA9IDB4MDAwNywgLmdoejIgPSAweDAwMDcsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWExQRl9PUEFNUEJJQVNfTE9XUV0JPSB7IC5naHo1ID0gMHgwMDIyLCAuZ2h6MiA9IDB4MDAyMiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYTFBGX09QQU1QQklBU19ISUdIUV09IHsgLmdoejUgPSAweDAwMjIsIC5naHoyID0gMHgwMDIyLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhMUEZfQklBU19EQ0NBTkNFTF0JPSB7IC5naHo1ID0gMHgwMDAyLCAuZ2h6MiA9IDB4MDAwMiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYTFBGX09VVFZDTV0JCT0geyAuZ2h6NSA9IDB4MDAwNCwgLmdoejIgPSAweDAwMDQsIFVQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhMUEZfSU5WQ01fQk9EWV0JPSB7IC5naHo1ID0gMHgwMDA3LCAuZ2h6MiA9IDB4MDAwNywgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYTFBGX0NDX09QXQkJPSB7IC5naHo1ID0gMHgwMDU1LCAuZ2h6MiA9IDB4MDA1NSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYTFBGX0dBSU5dCQk9IHsgLmdoejUgPSAweDAwMjMsIC5naHoyID0gMHgwMDIzLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhMUEZfUV9CV10JCT0geyAuZ2h6NSA9IDB4MDA0MSwgLmdoejIgPSAweDAwNDEsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWExQRl9IUF9DT1JORVJfQlddCT0geyAuZ2h6NSA9IDB4MDAwMSwgLmdoejIgPSAweDAwMDEsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWExQRl9SQ0NBTF9IUENdCT0geyAuZ2h6NSA9IDB4MDAwYSwgLmdoejIgPSAweDAwMGEsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWEhQRl9PRkYwXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYSFBGX09GRjFdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhIUEZfT0ZGMl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWEhQRl9PRkYzXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYSFBGX09GRjRdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhIUEZfT0ZGNV0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWEhQRl9PRkY2XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYSFBGX09GRjddCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhMUEZfUkNDQUxfTFBDXQk9IHsgLmdoejUgPSAweDAwMGMsIC5naHoyID0gMHgwMDBjLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhMUEZfT0ZGXzBdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhMUEZfT0ZGXzFdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhMUEZfT0ZGXzJdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhMUEZfT0ZGXzNdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhMUEZfT0ZGXzRdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfVU5VU0VEXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1ZHQV9NQVNURVJdCQk9IHsgLmdoejUgPSAweDAwMjIsIC5naHoyID0gMHgwMDIyLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfVkdBX0JJQVNdCQk9IHsgLmdoejUgPSAweDAwMjIsIC5naHoyID0gMHgwMDIyLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfVkdBX0JJQVNfRENDQU5DRUxdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIFVQTE9BRCwgfSwKKwlbQjIwNTZfUlhfVkdBX0dBSU5dCQk9IHsgLmdoejUgPSAweDAwMGEsIC5naHoyID0gMHgwMDBhLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfVkdBX0hQX0NPUk5FUl9CV10JPSB7IC5naHo1ID0gMHgwMDAxLCAuZ2h6MiA9IDB4MDAwMSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1ZHQUJVRl9CSUFTXQkJPSB7IC5naHo1ID0gMHgwMDIyLCAuZ2h6MiA9IDB4MDAyMiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1ZHQUJVRl9HQUlOX0JXXQk9IHsgLmdoejUgPSAweDAwMzAsIC5naHoyID0gMHgwMDMwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfVFhGQk1JWF9BXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1RYRkJNSVhfR10JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWFNQQVJFMV0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWFNQQVJFMl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWFNQQVJFM10JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWFNQQVJFNF0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWFNQQVJFNV0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWFNQQVJFNl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWFNQQVJFN10JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWFNQQVJFOF0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWFNQQVJFOV0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWFNQQVJFMTBdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhTUEFSRTExXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYU1BBUkUxMl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWFNQQVJFMTNdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhTUEFSRTE0XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYU1BBUkUxNV0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWFNQQVJFMTZdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfU1RBVFVTX0xOQUFfR0FJTl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1NUQVRVU19MTkFHX0dBSU5dCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9TVEFUVVNfTUlYVElBX0dBSU5dCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9TVEFUVVNfUlhMUEZfR0FJTl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1NUQVRVU19WR0FfQlVGX0dBSU5dCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9TVEFUVVNfUlhMUEZfUV0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1NUQVRVU19SWExQRl9CVUZfQlddCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9TVEFUVVNfUlhMUEZfVkdBX0hQQ10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1NUQVRVU19SWExQRl9SQ10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1NUQVRVU19IUENfUkNdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBiMjA1Nl9pbml0dGFiX2VudHJ5IGIyMDU2X2luaXR0YWJfcmV2OF9zeW5bXSA9IHsKKwlbQjIwNTZfU1lOX1JFU0VSVkVEX0FERFIyXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1JFU0VSVkVEX0FERFIzXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1JFU0VSVkVEX0FERFI0XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1JFU0VSVkVEX0FERFI1XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1JFU0VSVkVEX0FERFI2XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1JFU0VSVkVEX0FERFI3XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0NPTV9DVFJMXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9DT01fUFVdCQk9IHsgLmdoejUgPSAweDAwMDEsIC5naHoyID0gMHgwMDAxLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0NPTV9PVlJdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0NPTV9SRVNFVF0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fQ09NX1JDQUxdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0NPTV9SQ19SWExQRl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9DT01fUkNfVFhMUEZdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fQ09NX1JDX1JYSFBGXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1JFU0VSVkVEX0FERFIxNl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9SRVNFUlZFRF9BRERSMTddCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkVTRVJWRURfQUREUjE4XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1JFU0VSVkVEX0FERFIxOV0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9SRVNFUlZFRF9BRERSMjBdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkVTRVJWRURfQUREUjIxXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1JFU0VSVkVEX0FERFIyMl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9SRVNFUlZFRF9BRERSMjNdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkVTRVJWRURfQUREUjI0XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1JFU0VSVkVEX0FERFIyNV0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9SRVNFUlZFRF9BRERSMjZdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkVTRVJWRURfQUREUjI3XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1JFU0VSVkVEX0FERFIyOF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9SRVNFUlZFRF9BRERSMjldCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkVTRVJWRURfQUREUjMwXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1JFU0VSVkVEX0FERFIzMV0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9HUElPX01BU1RFUjFdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fR1BJT19NQVNURVIyXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1RPUEJJQVNfTUFTVEVSXQk9IHsgLmdoejUgPSAweDAwNjAsIC5naHoyID0gMHgwMDYwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1RPUEJJQVNfUkNBTF0JPSB7IC5naHo1ID0gMHgwMDA2LCAuZ2h6MiA9IDB4MDAwNiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9BRkVSRUddCQk9IHsgLmdoejUgPSAweDAwMGMsIC5naHoyID0gMHgwMDBjLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1RFTVBQUk9DU0VOU0VdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fVEVNUFBST0NTRU5TRUlEQUNdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fVEVNUFBST0NTRU5TRVJDQUxdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTFBPXQkJCT0geyAuZ2h6NSA9IDB4MDAwMSwgLmdoejIgPSAweDAwMDEsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fVkREQ0FMX01BU1RFUl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9WRERDQUxfSURBQ10JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fVkREQ0FMX1NUQVRVU10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9SQ0FMX01BU1RFUl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkNBTF9DT0RFX09VVF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9SQ0NBTF9DVFJMMF0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkNDQUxfQ1RSTDFdCQk9IHsgLmdoejUgPSAweDAwMWYsIC5naHoyID0gMHgwMDFmLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1JDQ0FMX0NUUkwyXQkJPSB7IC5naHo1ID0gMHgwMDE1LCAuZ2h6MiA9IDB4MDAxNSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9SQ0NBTF9DVFJMM10JCT0geyAuZ2h6NSA9IDB4MDAwZiwgLmdoejIgPSAweDAwMGYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkNDQUxfQ1RSTDRdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1JDQ0FMX0NUUkw1XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9SQ0NBTF9DVFJMNl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkNDQUxfQ1RSTDddCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1JDQ0FMX0NUUkw4XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9SQ0NBTF9DVFJMOV0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUkNDQUxfQ1RSTDEwXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1JDQ0FMX0NUUkwxMV0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9aQ0FMX1NQQVJFMV0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fWkNBTF9TUEFSRTJdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9NQVNUMV0JCT0geyAuZ2h6NSA9IDB4MDAxMywgLmdoejIgPSAweDAwMTMsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX01BU1QyXQkJPSB7IC5naHo1ID0gMHgwMDBmLCAuZ2h6MiA9IDB4MDAwZiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfTUFTVDNdCQk9IHsgLmdoejUgPSAweDAwMTgsIC5naHoyID0gMHgwMDE4LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9CSUFTX1JFU0VUXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9YVEFMMF0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX1hUQUwxXQkJPSB7IC5naHo1ID0gMHgwMDIwLCAuZ2h6MiA9IDB4MDAyMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfWFRBTDNdCQk9IHsgLmdoejUgPSAweDAwMjAsIC5naHoyID0gMHgwMDIwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9YVEFMNF0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX1hUQUw1XQkJPSB7IC5naHo1ID0gMHgwMDc3LCAuZ2h6MiA9IDB4MDA3NywgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfWFRBTDZdCQk9IHsgLmdoejUgPSAweDAwMDcsIC5naHoyID0gMHgwMDA3LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9SRUZESVZdCQk9IHsgLmdoejUgPSAweDAwMDEsIC5naHoyID0gMHgwMDAxLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9QRkRdCQk9IHsgLmdoejUgPSAweDAwMDQsIC5naHoyID0gMHgwMDA0LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9DUDFdCQk9IHsgLmdoejUgPSAweDAwMGYsIC5naHoyID0gMHgwMDBmLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9DUDJdCQk9IHsgLmdoejUgPSAweDAwMzAsIC5naHoyID0gMHgwMDMwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9DUDNdCQk9IHsgLmdoejUgPSAweDAwMzIsIC5naHoyID0gMHgwMDMyLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9MT09QRklMVEVSMV0JPSB7IC5naHo1ID0gMHgwMDBkLCAuZ2h6MiA9IDB4MDAwZCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfTE9PUEZJTFRFUjJdCT0geyAuZ2h6NSA9IDB4MDAwZCwgLmdoejIgPSAweDAwMGQsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX0xPT1BGSUxURVIzXQk9IHsgLmdoejUgPSAweDAwMDQsIC5naHoyID0gMHgwMDA0LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9MT09QRklMVEVSNF0JPSB7IC5naHo1ID0gMHgwMDA2LCAuZ2h6MiA9IDB4MDAwNiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfTE9PUEZJTFRFUjVdCT0geyAuZ2h6NSA9IDB4MDAwMSwgLmdoejIgPSAweDAwMDEsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX01NRDFdCQk9IHsgLmdoejUgPSAweDAwMWMsIC5naHoyID0gMHgwMDFjLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9NTUQyXQkJPSB7IC5naHo1ID0gMHgwMDAyLCAuZ2h6MiA9IDB4MDAwMiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfVkNPMV0JCT0geyAuZ2h6NSA9IDB4MDAwMiwgLmdoejIgPSAweDAwMDIsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX1ZDTzJdCQk9IHsgLmdoejUgPSAweDAwZjcsIC5naHoyID0gMHgwMGY3LCBVUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfTU9OSVRPUjFdCT0geyAuZ2h6NSA9IDB4MDBiNCwgLmdoejIgPSAweDAwYjQsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX01PTklUT1IyXQk9IHsgLmdoejUgPSAweDAwZDIsIC5naHoyID0gMHgwMGQyLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9WQ09DQUwxXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfVkNPQ0FMMl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX1ZDT0NBTDRdCQk9IHsgLmdoejUgPSAweDAwMDQsIC5naHoyID0gMHgwMDA0LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9WQ09DQUw1XQkJPSB7IC5naHo1ID0gMHgwMDk2LCAuZ2h6MiA9IDB4MDA5NiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfVkNPQ0FMNl0JCT0geyAuZ2h6NSA9IDB4MDAzZSwgLmdoejIgPSAweDAwM2UsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX1ZDT0NBTDddCQk9IHsgLmdoejUgPSAweDAwM2UsIC5naHoyID0gMHgwMDNlLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9WQ09DQUw4XQkJPSB7IC5naHo1ID0gMHgwMDEzLCAuZ2h6MiA9IDB4MDAxMywgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfVkNPQ0FMOV0JCT0geyAuZ2h6NSA9IDB4MDAwMiwgLmdoejIgPSAweDAwMDIsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX1ZDT0NBTDEwXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9WQ09DQUwxMV0JPSB7IC5naHo1ID0gMHgwMDA3LCAuZ2h6MiA9IDB4MDAwNywgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfVkNPQ0FMMTJdCT0geyAuZ2h6NSA9IDB4MDAwNywgLmdoejIgPSAweDAwMDcsIFVQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9WQ09DQUwxM10JPSB7IC5naHo1ID0gMHgwMDA4LCAuZ2h6MiA9IDB4MDAwOCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfVlJFR10JCT0geyAuZ2h6NSA9IDB4MDAwMywgLmdoejIgPSAweDAwMDMsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fUExMX1NUQVRVUzFdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX1BMTF9TVEFUVVMyXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9QTExfU1RBVFVTM10JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fUFUwXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9QVTFdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX1BVMl0JCT0geyAuZ2h6NSA9IDB4MDA0MCwgLmdoejIgPSAweDAwNDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fUFUzXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9QVTVdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX1BVNl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fUFU3XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9QVThdCQk9IHsgLmdoejUgPSAweDAwMDEsIC5naHoyID0gMHgwMDAxLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0JJQVNfUkVTRVRdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fUkNDUjFdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX1ZDT0JVRjFdCT0geyAuZ2h6NSA9IDB4MDA2MCwgLmdoejIgPSAweDAwNjAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fTUlYRVIxXQk9IHsgLmdoejUgPSAweDAwNjYsIC5naHoyID0gMHgwMDY2LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX01JWEVSMl0JPSB7IC5naHo1ID0gMHgwMDBjLCAuZ2h6MiA9IDB4MDAwYywgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9CVUYxXQkJPSB7IC5naHo1ID0gMHgwMDY2LCAuZ2h6MiA9IDB4MDA2NiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTkJVRjJdCQk9IHsgLmdoejUgPSAweDAwOGYsIC5naHoyID0gMHgwMDhmLCBVUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9CVUYzXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9CVUY0XQkJPSB7IC5naHo1ID0gMHgwMGNjLCAuZ2h6MiA9IDB4MDBjYywgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9ESVYxXQkJPSB7IC5naHo1ID0gMHgwMDAxLCAuZ2h6MiA9IDB4MDAwMSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9ESVYyXQkJPSB7IC5naHo1ID0gMHgwMDY2LCAuZ2h6MiA9IDB4MDA2NiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9ESVYzXQkJPSB7IC5naHo1ID0gMHgwMDY2LCAuZ2h6MiA9IDB4MDA2NiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9BQ0wxXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9BQ0wyXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9BQ0wzXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9BQ0w0XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9BQ0w1XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9BQ0w2XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9BQ0xPVVRdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQUNMQ0FMMV0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9BQ0xDQUwyXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0FDTENBTDNdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fQ0FMRU5dCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX1BFQUtERVQxXQk9IHsgLmdoejUgPSAweDAwZmYsIC5naHoyID0gMHgwMGZmLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0NPUkVfQUNMX09WUl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9SWF9ESUZGX0FDTF9PVlJdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fVFhfRElGRl9BQ0xfT1ZSXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX1JYX0NNT1NfQUNMX09WUl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9UWF9DTU9TX0FDTF9PVlJdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fVkNPQlVGMl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9NSVhFUjNdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQlVGNV0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQlVGNl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQ0JVRlJYMV0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9DQlVGUlgyXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0NCVUZSWDNdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQ0JVRlJYNF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9DQlVGVFgxXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0NCVUZUWDJdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQ0JVRlRYM10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9DQlVGVFg0XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0NNT1NSWDFdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQ01PU1JYMl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9DTU9TUlgzXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0NNT1NSWDRdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQ01PU1RYMV0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9DTU9TVFgyXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0NNT1NUWDNdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQ01PU1RYNF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9WQ09CVUYyX09WUlZBTF09IHsgLmdoejUgPSAweDAwMDYsIC5naHoyID0gMHgwMDA2LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX01JWEVSM19PVlJWQUxdCT0geyAuZ2h6NSA9IDB4MDA2NiwgLmdoejIgPSAweDAwNjYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQlVGNV9PVlJWQUxdCT0geyAuZ2h6NSA9IDB4MDA2NiwgLmdoejIgPSAweDAwNjYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQlVGNl9PVlJWQUxdCT0geyAuZ2h6NSA9IDB4MDA2NiwgLmdoejIgPSAweDAwNjYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQ0JVRlJYMV9PVlJWQUxdPSB7IC5naHo1ID0gMHgwMDY2LCAuZ2h6MiA9IDB4MDA2NiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9DQlVGUlgyX09WUlZBTF09IHsgLmdoejUgPSAweDAwNjYsIC5naHoyID0gMHgwMDY2LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0NCVUZSWDNfT1ZSVkFMXT0geyAuZ2h6NSA9IDB4MDA2NiwgLmdoejIgPSAweDAwNjYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQ0JVRlJYNF9PVlJWQUxdPSB7IC5naHo1ID0gMHgwMDY2LCAuZ2h6MiA9IDB4MDA2NiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9DQlVGVFgxX09WUlZBTF09IHsgLmdoejUgPSAweDAwNjYsIC5naHoyID0gMHgwMDY2LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0NCVUZUWDJfT1ZSVkFMXT0geyAuZ2h6NSA9IDB4MDA2NiwgLmdoejIgPSAweDAwNjYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQ0JVRlRYM19PVlJWQUxdPSB7IC5naHo1ID0gMHgwMDY2LCAuZ2h6MiA9IDB4MDA2NiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9DQlVGVFg0X09WUlZBTF09IHsgLmdoejUgPSAweDAwNjYsIC5naHoyID0gMHgwMDY2LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0NNT1NSWDFfT1ZSVkFMXT0geyAuZ2h6NSA9IDB4MDA2NiwgLmdoejIgPSAweDAwNjYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQ01PU1JYMl9PVlJWQUxdPSB7IC5naHo1ID0gMHgwMDY2LCAuZ2h6MiA9IDB4MDA2NiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9DTU9TUlgzX09WUlZBTF09IHsgLmdoejUgPSAweDAwNjYsIC5naHoyID0gMHgwMDY2LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0NNT1NSWDRfT1ZSVkFMXT0geyAuZ2h6NSA9IDB4MDA2NiwgLmdoejIgPSAweDAwNjYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQ01PU1RYMV9PVlJWQUxdPSB7IC5naHo1ID0gMHgwMDY2LCAuZ2h6MiA9IDB4MDA2NiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9DTU9TVFgyX09WUlZBTF09IHsgLmdoejUgPSAweDAwNjYsIC5naHoyID0gMHgwMDY2LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX0NNT1NUWDNfT1ZSVkFMXT0geyAuZ2h6NSA9IDB4MDA2NiwgLmdoejIgPSAweDAwNjYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fQ01PU1RYNF9PVlJWQUxdPSB7IC5naHo1ID0gMHgwMDY2LCAuZ2h6MiA9IDB4MDA2NiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9BQ0xfV0FJVENOVF0JPSB7IC5naHo1ID0gMHgwMDBhLCAuZ2h6MiA9IDB4MDAwYSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1NZTl9MT0dFTl9DT1JFX0NBTFZBTElEXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfU1lOX0xPR0VOX1JYX0NNT1NfQ0FMVkFMSURdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9TWU5fTE9HRU5fVFhfQ01PU19WQUxJRF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGIyMDU2X2luaXR0YWJfZW50cnkgYjIwNTZfaW5pdHRhYl9yZXY4X3R4W10gPSB7CisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFIyXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfUkVTRVJWRURfQUREUjNdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9SRVNFUlZFRF9BRERSNF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1JFU0VSVkVEX0FERFI1XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfUkVTRVJWRURfQUREUjZdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9SRVNFUlZFRF9BRERSN10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0NPTV9DVFJMXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0NPTV9QVV0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9DT01fT1ZSXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0NPTV9SRVNFVF0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9DT01fUkNBTF0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9DT01fUkNfUlhMUEZdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfQ09NX1JDX1RYTFBGXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0NPTV9SQ19SWEhQRl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9SRVNFUlZFRF9BRERSMTZdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9SRVNFUlZFRF9BRERSMTddCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9SRVNFUlZFRF9BRERSMThdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9SRVNFUlZFRF9BRERSMTldCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9SRVNFUlZFRF9BRERSMjBdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9SRVNFUlZFRF9BRERSMjFdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9SRVNFUlZFRF9BRERSMjJdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9SRVNFUlZFRF9BRERSMjNdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9SRVNFUlZFRF9BRERSMjRdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9SRVNFUlZFRF9BRERSMjVdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9SRVNFUlZFRF9BRERSMjZdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9SRVNFUlZFRF9BRERSMjddCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9SRVNFUlZFRF9BRERSMjhdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9SRVNFUlZFRF9BRERSMjldCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9SRVNFUlZFRF9BRERSMzBdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9SRVNFUlZFRF9BRERSMzFdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9JUUNBTF9HQUlOX0JXXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfTE9GVF9GSU5FX0ldCQk9IHsgLmdoejUgPSAweDAwODgsIC5naHoyID0gMHgwMDg4LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfTE9GVF9GSU5FX1FdCQk9IHsgLmdoejUgPSAweDAwODgsIC5naHoyID0gMHgwMDg4LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfTE9GVF9DT0FSU0VfSV0JPSB7IC5naHo1ID0gMHgwMDg4LCAuZ2h6MiA9IDB4MDA4OCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0xPRlRfQ09BUlNFX1FdCT0geyAuZ2h6NSA9IDB4MDA4OCwgLmdoejIgPSAweDAwODgsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWF9DT01fTUFTVEVSMV0JPSB7IC5naHo1ID0gMHgwMDBjLCAuZ2h6MiA9IDB4MDAwYywgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYX0NPTV9NQVNURVIyXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfUlhJUUNBTF9UWE1VWF0JPSB7IC5naHo1ID0gMHgwMDAzLCAuZ2h6MiA9IDB4MDAwMywgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYX1NTSV9NQVNURVJdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9JUUNBTF9WQ01fSEddCQk9IHsgLmdoejUgPSAweDAwMDMsIC5naHoyID0gMHgwMDAzLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfSVFDQUxfSURBQ10JCT0geyAuZ2h6NSA9IDB4MDAzNywgLmdoejIgPSAweDAwMzcsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UU1NJX1ZDTV0JCT0geyAuZ2h6NSA9IDB4MDAwMywgLmdoejIgPSAweDAwMDMsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWF9BTVBfREVUXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYX1NTSV9NVVhdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFNTSUFdCQk9IHsgLmdoejUgPSAweDAwMDEsIC5naHoyID0gMHgwMDAxLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFNTSUddCQk9IHsgLmdoejUgPSAweDAwMDEsIC5naHoyID0gMHgwMDAxLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFNTSV9NSVNDMV0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UU1NJX01JU0MyXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RTU0lfTUlTQzNdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfUEFfU1BBUkUxXQkJPSB7IC5naHo1ID0gMHgwMDExLCAuZ2h6MiA9IDB4MDAxMSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1BBX1NQQVJFMl0JCT0geyAuZ2h6NSA9IDB4MDBlZSwgLmdoejIgPSAweDAwZWUsIFVQTE9BRCwgfSwKKwlbQjIwNTZfVFhfSU5UUEFBX01BU1RFUl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0lOVFBBQV9HQUlOXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0lOVFBBQV9CT09TVF9UVU5FXQk9IHsgLmdoejUgPSAweDAwMDMsIC5naHoyID0gMHgwMDAzLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfSU5UUEFBX0lBVVhfU1RBVF0JPSB7IC5naHo1ID0gMHgwMDUwLCAuZ2h6MiA9IDB4MDA1MCwgVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9JTlRQQUFfSUFVWF9EWU5dCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9JTlRQQUFfSU1BSU5fU1RBVF0JPSB7IC5naHo1ID0gMHgwMDUwLCAuZ2h6MiA9IDB4MDA1MCwgVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9JTlRQQUFfSU1BSU5fRFlOXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfSU5UUEFBX0NBU0NCSUFTXQk9IHsgLmdoejUgPSAweDAwNmUsIC5naHoyID0gMHgwMDZlLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfSU5UUEFBX1BBU0xPUEVdCT0geyAuZ2h6NSA9IDB4MDBmMCwgLmdoejIgPSAweDAwZjAsIFVQTE9BRCwgfSwKKwlbQjIwNTZfVFhfSU5UUEFBX1BBX01JU0NdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9JTlRQQUdfTUFTVEVSXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfSU5UUEFHX0dBSU5dCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfSU5UUEFHX0JPT1NUX1RVTkVdCT0geyAuZ2h6NSA9IDB4MDAwMywgLmdoejIgPSAweDAwMDMsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9JTlRQQUdfSUFVWF9TVEFUXQk9IHsgLmdoejUgPSAweDAwMDMsIC5naHoyID0gMHgwMDAzLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfSU5UUEFHX0lBVVhfRFlOXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfSU5UUEFHX0lNQUlOX1NUQVRdCT0geyAuZ2h6NSA9IDB4MDAxZSwgLmdoejIgPSAweDAwMWUsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9JTlRQQUdfSU1BSU5fRFlOXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfSU5UUEFHX0NBU0NCSUFTXQk9IHsgLmdoejUgPSAweDAwNmUsIC5naHoyID0gMHgwMDZlLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfSU5UUEFHX1BBU0xPUEVdCT0geyAuZ2h6NSA9IDB4MDBmMCwgLmdoejIgPSAweDAwZjAsIFVQTE9BRCwgfSwKKwlbQjIwNTZfVFhfSU5UUEFHX1BBX01JU0NdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QQURBX01BU1RFUl0JCT0geyAuZ2h6NSA9IDB4MDAwMiwgLmdoejIgPSAweDAwMDIsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QQURBX0lEQUNdCQk9IHsgLmdoejUgPSAweDAwZmYsIC5naHoyID0gMHgwMGZmLCBVUExPQUQsIH0sCisJW0IyMDU2X1RYX1BBREFfQ0FTQ0JJQVNdCT0geyAuZ2h6NSA9IDB4MDAwYywgLmdoejIgPSAweDAwMGMsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QQURBX0dBSU5dCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfUEFEQV9CT09TVF9UVU5FXQk9IHsgLmdoejUgPSAweDAwMzgsIC5naHoyID0gMHgwMDM4LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfUEFEQV9TTE9QRV0JCT0geyAuZ2h6NSA9IDB4MDA3MCwgLmdoejIgPSAweDAwNzAsIFVQTE9BRCwgfSwKKwlbQjIwNTZfVFhfUEFER19NQVNURVJdCQk9IHsgLmdoejUgPSAweDAwMDIsIC5naHoyID0gMHgwMDAyLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfUEFER19JREFDXQkJPSB7IC5naHo1ID0gMHgwMDg4LCAuZ2h6MiA9IDB4MDA4OCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1BBREdfQ0FTQ0JJQVNdCT0geyAuZ2h6NSA9IDB4MDAwYywgLmdoejIgPSAweDAwMGMsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QQURHX0dBSU5dCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfUEFER19CT09TVF9UVU5FXQk9IHsgLmdoejUgPSAweDAwMDgsIC5naHoyID0gMHgwMDA4LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfUEFER19TTE9QRV0JCT0geyAuZ2h6NSA9IDB4MDA3MCwgLmdoejIgPSAweDAwNzAsIFVQTE9BRCwgfSwKKwlbQjIwNTZfVFhfUEdBQV9NQVNURVJdCQk9IHsgLmdoejUgPSAweDAwMDIsIC5naHoyID0gMHgwMDAyLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfUEdBQV9JREFDXQkJPSB7IC5naHo1ID0gMHgwMGZmLCAuZ2h6MiA9IDB4MDBmZiwgVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QR0FBX0dBSU5dCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfUEdBQV9CT09TVF9UVU5FXQk9IHsgLmdoejUgPSAweDAwODMsIC5naHoyID0gMHgwMDgzLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfUEdBQV9TTE9QRV0JCT0geyAuZ2h6NSA9IDB4MDA3NywgLmdoejIgPSAweDAwNzcsIFVQTE9BRCwgfSwKKwlbQjIwNTZfVFhfUEdBQV9NSVNDXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1BHQUdfTUFTVEVSXQkJPSB7IC5naHo1ID0gMHgwMDAyLCAuZ2h6MiA9IDB4MDAwMiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1BHQUdfSURBQ10JCT0geyAuZ2h6NSA9IDB4MDA4OCwgLmdoejIgPSAweDAwODgsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9QR0FHX0dBSU5dCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfUEdBR19CT09TVF9UVU5FXQk9IHsgLmdoejUgPSAweDAwMDgsIC5naHoyID0gMHgwMDA4LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfUEdBR19TTE9QRV0JCT0geyAuZ2h6NSA9IDB4MDA3NywgLmdoejIgPSAweDAwNzcsIFVQTE9BRCwgfSwKKwlbQjIwNTZfVFhfUEdBR19NSVNDXQkJPSB7IC5naHo1ID0gMHgwMDAxLCAuZ2h6MiA9IDB4MDAwMSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX01JWEFfTUFTVEVSXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX01JWEFfQk9PU1RfVFVORV0JPSB7IC5naHo1ID0gMHgwMDA3LCAuZ2h6MiA9IDB4MDAwNywgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX01JWEddCQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX01JWEdfQk9PU1RfVFVORV0JPSB7IC5naHo1ID0gMHgwMDA3LCAuZ2h6MiA9IDB4MDAwNywgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0JCX0dNX01BU1RFUl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9HTUJCX0dNXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0dNQkJfSURBQ10JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIFVQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhMUEZfTUFTVEVSXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYTFBGX1JDQ0FMXQkJPSB7IC5naHo1ID0gMHgwMDBhLCAuZ2h6MiA9IDB4MDAwYSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYTFBGX1JDQ0FMX09GRjBdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWExQRl9SQ0NBTF9PRkYxXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhMUEZfUkNDQUxfT0ZGMl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYTFBGX1JDQ0FMX09GRjNdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWExQRl9SQ0NBTF9PRkY0XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhMUEZfUkNDQUxfT0ZGNV0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYTFBGX1JDQ0FMX09GRjZdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWExQRl9CV10JCT0geyAuZ2h6NSA9IDB4MDAwMiwgLmdoejIgPSAweDAwMDIsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWExQRl9HQUlOXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYTFBGX0lEQUNdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhMUEZfSURBQ18wXQkJPSB7IC5naHo1ID0gMHgwMDBlLCAuZ2h6MiA9IDB4MDAwZSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYTFBGX0lEQUNfMV0JCT0geyAuZ2h6NSA9IDB4MDAwZSwgLmdoejIgPSAweDAwMGUsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWExQRl9JREFDXzJdCQk9IHsgLmdoejUgPSAweDAwMGUsIC5naHoyID0gMHgwMDBlLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhMUEZfSURBQ18zXQkJPSB7IC5naHo1ID0gMHgwMDEzLCAuZ2h6MiA9IDB4MDAxMywgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYTFBGX0lEQUNfNF0JCT0geyAuZ2h6NSA9IDB4MDAxMywgLmdoejIgPSAweDAwMTMsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWExQRl9JREFDXzVdCQk9IHsgLmdoejUgPSAweDAwMWIsIC5naHoyID0gMHgwMDFiLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhMUEZfSURBQ182XQkJPSB7IC5naHo1ID0gMHgwMDFiLCAuZ2h6MiA9IDB4MDAxYiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYTFBGX09QQU1QX0lEQUNdCT0geyAuZ2h6NSA9IDB4MDA1NSwgLmdoejIgPSAweDAwNTUsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWExQRl9NSVNDXQkJPSB7IC5naHo1ID0gMHgwMDViLCAuZ2h6MiA9IDB4MDA1YiwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYU1BBUkUxXQkJPSB7IC5naHo1ID0gMHgwMDMwLCAuZ2h6MiA9IDB4MDAzMCwgVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWFNQQVJFMl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWFNQQVJFM10JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWFNQQVJFNF0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWFNQQVJFNV0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWFNQQVJFNl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWFNQQVJFN10JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWFNQQVJFOF0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWFNQQVJFOV0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWFNQQVJFMTBdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhTUEFSRTExXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYU1BBUkUxMl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWFNQQVJFMTNdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfVFhTUEFSRTE0XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1RYU1BBUkUxNV0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9UWFNQQVJFMTZdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfU1RBVFVTX0lOVFBBX0dBSU5dCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9TVEFUVVNfUEFEX0dBSU5dCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9TVEFUVVNfUEdBX0dBSU5dCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9TVEFUVVNfR01fVFhMUEZfR0FJTl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1NUQVRVU19UWExQRl9CV10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX1NUQVRVU19UWExQRl9SQ10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0dNQkJfSURBQzBdCQk9IHsgLmdoejUgPSAweDAwNzAsIC5naHoyID0gMHgwMDcwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfR01CQl9JREFDMV0JCT0geyAuZ2h6NSA9IDB4MDA3MCwgLmdoejIgPSAweDAwNzAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9HTUJCX0lEQUMyXQkJPSB7IC5naHo1ID0gMHgwMDcwLCAuZ2h6MiA9IDB4MDA3MCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0dNQkJfSURBQzNdCQk9IHsgLmdoejUgPSAweDAwNzAsIC5naHoyID0gMHgwMDcwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfR01CQl9JREFDNF0JCT0geyAuZ2h6NSA9IDB4MDA3MCwgLmdoejIgPSAweDAwNzAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9UWF9HTUJCX0lEQUM1XQkJPSB7IC5naHo1ID0gMHgwMDcwLCAuZ2h6MiA9IDB4MDA3MCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1RYX0dNQkJfSURBQzZdCQk9IHsgLmdoejUgPSAweDAwNzAsIC5naHoyID0gMHgwMDcwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfVFhfR01CQl9JREFDN10JCT0geyAuZ2h6NSA9IDB4MDA3MCwgLmdoejIgPSAweDAwNzAsIE5PVVBMT0FELCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBiMjA1Nl9pbml0dGFiX2VudHJ5IGIyMDU2X2luaXR0YWJfcmV2OF9yeFtdID0geworCVtCMjA1Nl9SWF9SRVNFUlZFRF9BRERSMl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JFU0VSVkVEX0FERFIzXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUkVTRVJWRURfQUREUjRdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SRVNFUlZFRF9BRERSNV0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JFU0VSVkVEX0FERFI2XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUkVTRVJWRURfQUREUjddCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9DT01fQ1RSTF0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9DT01fUFVdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfQ09NX09WUl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9DT01fUkVTRVRdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfQ09NX1JDQUxdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfQ09NX1JDX1JYTFBGXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX0NPTV9SQ19UWExQRl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9DT01fUkNfUlhIUEZdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUkVTRVJWRURfQUREUjE2XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUkVTRVJWRURfQUREUjE3XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUkVTRVJWRURfQUREUjE4XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUkVTRVJWRURfQUREUjE5XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUkVTRVJWRURfQUREUjIwXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUkVTRVJWRURfQUREUjIxXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUkVTRVJWRURfQUREUjIyXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUkVTRVJWRURfQUREUjIzXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUkVTRVJWRURfQUREUjI0XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUkVTRVJWRURfQUREUjI1XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUkVTRVJWRURfQUREUjI2XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUkVTRVJWRURfQUREUjI3XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUkVTRVJWRURfQUREUjI4XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUkVTRVJWRURfQUREUjI5XQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUkVTRVJWRURfQUREUjMwXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUkVTRVJWRURfQUREUjMxXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhJUUNBTF9SWE1VWF0JPSB7IC5naHo1ID0gMHgwMDAzLCAuZ2h6MiA9IDB4MDAwMywgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JTU0lfUFVdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlNTSV9TRUxdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlNTSV9HQUlOXQkJPSB7IC5naHo1ID0gMHgwMDkwLCAuZ2h6MiA9IDB4MDA5MCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JTU0lfTkJfSURBQ10JCT0geyAuZ2h6NSA9IDB4MDA1NSwgLmdoejIgPSAweDAwNTUsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SU1NJX1dCMklfSURBQ18xXQk9IHsgLmdoejUgPSAweDAwMTUsIC5naHoyID0gMHgwMDE1LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlNTSV9XQjJJX0lEQUNfMl0JPSB7IC5naHo1ID0gMHgwMDA1LCAuZ2h6MiA9IDB4MDAwNSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JTU0lfV0IyUV9JREFDXzFdCT0geyAuZ2h6NSA9IDB4MDAxNSwgLmdoejIgPSAweDAwMTUsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SU1NJX1dCMlFfSURBQ18yXQk9IHsgLmdoejUgPSAweDAwMDUsIC5naHoyID0gMHgwMDA1LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlNTSV9QT0xFXQkJPSB7IC5naHo1ID0gMHgwMDIwLCAuZ2h6MiA9IDB4MDAyMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JTU0lfV0IxX0lEQUNdCT0geyAuZ2h6NSA9IDB4MDAxMSwgLmdoejIgPSAweDAwMTEsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SU1NJX01JU0NdCQk9IHsgLmdoejUgPSAweDAwOTAsIC5naHoyID0gMHgwMDkwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfTE5BQV9NQVNURVJdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfTE5BQV9UVU5FXQkJPSB7IC5naHo1ID0gMHgwMDg4LCAuZ2h6MiA9IDB4MDA4OCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX0xOQUFfR0FJTl0JCT0geyAuZ2h6NSA9IDB4MDAzMiwgLmdoejIgPSAweDAwMzIsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9MTkFfQV9TTE9QRV0JCT0geyAuZ2h6NSA9IDB4MDA3NywgLmdoejIgPSAweDAwNzcsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9CSUFTUE9MRV9MTkFBMV9JREFDXQk9IHsgLmdoejUgPSAweDAwMTcsIC5naHoyID0gMHgwMDE3LCBVUExPQUQsIH0sCisJW0IyMDU2X1JYX0xOQUEyX0lEQUNdCQk9IHsgLmdoejUgPSAweDAwZmYsIC5naHoyID0gMHgwMGZmLCBVUExPQUQsIH0sCisJW0IyMDU2X1JYX0xOQTFBX01JU0NdCQk9IHsgLmdoejUgPSAweDAwMjAsIC5naHoyID0gMHgwMDIwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfTE5BR19NQVNURVJdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfTE5BR19UVU5FXQkJPSB7IC5naHo1ID0gMHgwMDg4LCAuZ2h6MiA9IDB4MDA4OCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX0xOQUdfR0FJTl0JCT0geyAuZ2h6NSA9IDB4MDAzMiwgLmdoejIgPSAweDAwMzIsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9MTkFfR19TTE9QRV0JCT0geyAuZ2h6NSA9IDB4MDA3NywgLmdoejIgPSAweDAwNzcsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9CSUFTUE9MRV9MTkFHMV9JREFDXQk9IHsgLmdoejUgPSAweDAwMTcsIC5naHoyID0gMHgwMDE3LCBVUExPQUQsIH0sCisJW0IyMDU2X1JYX0xOQUcyX0lEQUNdCQk9IHsgLmdoejUgPSAweDAwZjAsIC5naHoyID0gMHgwMGYwLCBVUExPQUQsIH0sCisJW0IyMDU2X1JYX0xOQTFHX01JU0NdCQk9IHsgLmdoejUgPSAweDAwMjAsIC5naHoyID0gMHgwMDIwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfTUlYQV9NQVNURVJdCQk9IHsgLmdoejUgPSAweDAwMDgsIC5naHoyID0gMHgwMDA4LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfTUlYQV9WQ01dCQk9IHsgLmdoejUgPSAweDAwNTUsIC5naHoyID0gMHgwMDU1LCBVUExPQUQsIH0sCisJW0IyMDU2X1JYX01JWEFfQ1RSTFBUQVRdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9NSVhBX0xPQl9CSUFTXQk9IHsgLmdoejUgPSAweDAwODgsIC5naHoyID0gMHgwMDg4LCBVUExPQUQsIH0sCisJW0IyMDU2X1JYX01JWEFfQ09SRV9JREFDXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfTUlYQV9DTUZCX0lEQUNdCT0geyAuZ2h6NSA9IDB4MDA0NCwgLmdoejIgPSAweDAwNDQsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9NSVhBX0JJQVNfQVVYXQk9IHsgLmdoejUgPSAweDAwMDcsIC5naHoyID0gMHgwMDA3LCBVUExPQUQsIH0sCisJW0IyMDU2X1JYX01JWEFfQklBU19NQUlOXQk9IHsgLmdoejUgPSAweDAwMDYsIC5naHoyID0gMHgwMDA2LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfTUlYQV9CSUFTX01JU0NdCT0geyAuZ2h6NSA9IDB4MDAwNCwgLmdoejIgPSAweDAwMDQsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9NSVhBX01BU1RfQklBU10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX01JWEdfTUFTVEVSXQkJPSB7IC5naHo1ID0gMHgwMDA4LCAuZ2h6MiA9IDB4MDAwOCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX01JWEdfVkNNXQkJPSB7IC5naHo1ID0gMHgwMDU1LCAuZ2h6MiA9IDB4MDA1NSwgVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9NSVhHX0NUUkxQVEFUXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfTUlYR19MT0JfQklBU10JPSB7IC5naHo1ID0gMHgwMDExLCAuZ2h6MiA9IDB4MDAxMSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX01JWEdfQ09SRV9JREFDXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfTUlYR19DTUZCX0lEQUNdCT0geyAuZ2h6NSA9IDB4MDA0NCwgLmdoejIgPSAweDAwNDQsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9NSVhHX0JJQVNfQVVYXQk9IHsgLmdoejUgPSAweDAwMDcsIC5naHoyID0gMHgwMDA3LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfTUlYR19CSUFTX01BSU5dCT0geyAuZ2h6NSA9IDB4MDAwNiwgLmdoejIgPSAweDAwMDYsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9NSVhHX0JJQVNfTUlTQ10JPSB7IC5naHo1ID0gMHgwMDA0LCAuZ2h6MiA9IDB4MDAwNCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX01JWEdfTUFTVF9CSUFTXQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfVElBX01BU1RFUl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9USUFfSU9QQU1QXQkJPSB7IC5naHo1ID0gMHgwMDI2LCAuZ2h6MiA9IDB4MDAyNiwgVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9USUFfUU9QQU1QXQkJPSB7IC5naHo1ID0gMHgwMDI2LCAuZ2h6MiA9IDB4MDAyNiwgVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9USUFfSU1JU0NdCQk9IHsgLmdoejUgPSAweDAwMGYsIC5naHoyID0gMHgwMDBmLCBVUExPQUQsIH0sCisJW0IyMDU2X1JYX1RJQV9RTUlTQ10JCT0geyAuZ2h6NSA9IDB4MDAwZiwgLmdoejIgPSAweDAwMGYsIFVQTE9BRCwgfSwKKwlbQjIwNTZfUlhfVElBX0dBSU5dCQk9IHsgLmdoejUgPSAweDAwNDQsIC5naHoyID0gMHgwMDQ0LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfVElBX1NQQVJFMV0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9USUFfU1BBUkUyXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX0JCX0xQRl9NQVNURVJdCT0geyAuZ2h6NSA9IDB4MDAwOCwgLmdoejIgPSAweDAwMDgsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9BQUNJX01BU1RFUl0JCT0geyAuZ2h6NSA9IDB4MDAwOCwgLmdoejIgPSAweDAwMDgsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWExQRl9JREFDXQkJPSB7IC5naHo1ID0gMHgwMDA3LCAuZ2h6MiA9IDB4MDAwNywgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYTFBGX09QQU1QQklBU19MT1dRXQk9IHsgLmdoejUgPSAweDAwMjIsIC5naHoyID0gMHgwMDIyLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhMUEZfT1BBTVBCSUFTX0hJR0hRXT0geyAuZ2h6NSA9IDB4MDAyMiwgLmdoejIgPSAweDAwMjIsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWExQRl9CSUFTX0RDQ0FOQ0VMXQk9IHsgLmdoejUgPSAweDAwMDIsIC5naHoyID0gMHgwMDAyLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhMUEZfT1VUVkNNXQkJPSB7IC5naHo1ID0gMHgwMDA0LCAuZ2h6MiA9IDB4MDAwNCwgVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWExQRl9JTlZDTV9CT0RZXQk9IHsgLmdoejUgPSAweDAwMDcsIC5naHoyID0gMHgwMDA3LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhMUEZfQ0NfT1BdCQk9IHsgLmdoejUgPSAweDAwNTUsIC5naHoyID0gMHgwMDU1LCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhMUEZfR0FJTl0JCT0geyAuZ2h6NSA9IDB4MDAyMywgLmdoejIgPSAweDAwMjMsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWExQRl9RX0JXXQkJPSB7IC5naHo1ID0gMHgwMDQxLCAuZ2h6MiA9IDB4MDA0MSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYTFBGX0hQX0NPUk5FUl9CV10JPSB7IC5naHo1ID0gMHgwMDAxLCAuZ2h6MiA9IDB4MDAwMSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYTFBGX1JDQ0FMX0hQQ10JPSB7IC5naHo1ID0gMHgwMDBhLCAuZ2h6MiA9IDB4MDAwYSwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYSFBGX09GRjBdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhIUEZfT0ZGMV0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWEhQRl9PRkYyXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYSFBGX09GRjNdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhIUEZfT0ZGNF0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWEhQRl9PRkY1XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYSFBGX09GRjZdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhIUEZfT0ZGN10JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWExQRl9SQ0NBTF9MUENdCT0geyAuZ2h6NSA9IDB4MDAwYywgLmdoejIgPSAweDAwMGMsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWExQRl9PRkZfMF0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWExQRl9PRkZfMV0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWExQRl9PRkZfMl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWExQRl9PRkZfM10JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWExQRl9PRkZfNF0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9VTlVTRURdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfVkdBX01BU1RFUl0JCT0geyAuZ2h6NSA9IDB4MDAyMiwgLmdoejIgPSAweDAwMjIsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9WR0FfQklBU10JCT0geyAuZ2h6NSA9IDB4MDAyMiwgLmdoejIgPSAweDAwMjIsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9WR0FfQklBU19EQ0NBTkNFTF0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9WR0FfR0FJTl0JCT0geyAuZ2h6NSA9IDB4MDAwYSwgLmdoejIgPSAweDAwMGEsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9WR0FfSFBfQ09STkVSX0JXXQk9IHsgLmdoejUgPSAweDAwMDEsIC5naHoyID0gMHgwMDAxLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfVkdBQlVGX0JJQVNdCQk9IHsgLmdoejUgPSAweDAwMjIsIC5naHoyID0gMHgwMDIyLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfVkdBQlVGX0dBSU5fQlddCT0geyAuZ2h6NSA9IDB4MDAzMCwgLmdoejIgPSAweDAwMzAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9UWEZCTUlYX0FdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfVFhGQk1JWF9HXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYU1BBUkUxXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYU1BBUkUyXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYU1BBUkUzXQkJPSB7IC5naHo1ID0gMHgwMDA1LCAuZ2h6MiA9IDB4MDAwNSwgVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWFNQQVJFNF0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWFNQQVJFNV0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWFNQQVJFNl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWFNQQVJFN10JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWFNQQVJFOF0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWFNQQVJFOV0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWFNQQVJFMTBdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhTUEFSRTExXQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYU1BBUkUxMl0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWFNQQVJFMTNdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfUlhTUEFSRTE0XQkJPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1JYU1BBUkUxNV0JCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9SWFNQQVJFMTZdCQk9IHsgLmdoejUgPSAweDAwMDAsIC5naHoyID0gMHgwMDAwLCBOT1VQTE9BRCwgfSwKKwlbQjIwNTZfUlhfU1RBVFVTX0xOQUFfR0FJTl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1NUQVRVU19MTkFHX0dBSU5dCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9TVEFUVVNfTUlYVElBX0dBSU5dCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9TVEFUVVNfUlhMUEZfR0FJTl0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1NUQVRVU19WR0FfQlVGX0dBSU5dCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9TVEFUVVNfUlhMUEZfUV0JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1NUQVRVU19SWExQRl9CVUZfQlddCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorCVtCMjA1Nl9SWF9TVEFUVVNfUlhMUEZfVkdBX0hQQ10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1NUQVRVU19SWExQRl9SQ10JPSB7IC5naHo1ID0gMHgwMDAwLCAuZ2h6MiA9IDB4MDAwMCwgTk9VUExPQUQsIH0sCisJW0IyMDU2X1JYX1NUQVRVU19IUENfUkNdCT0geyAuZ2h6NSA9IDB4MDAwMCwgLmdoejIgPSAweDAwMDAsIE5PVVBMT0FELCB9LAorfTsKKworI2RlZmluZSBJTklUVEFCU1BUUyhwcmVmaXgpIFwKKwkuc3luCQk9IHByZWZpeCMjX3N5biwJCQlcCisJLnN5bl9sZW5ndGgJPSBBUlJBWV9TSVpFKHByZWZpeCMjX3N5biksCVwKKwkudHgJCT0gcHJlZml4IyNfdHgsCQkJXAorCS50eF9sZW5ndGgJPSBBUlJBWV9TSVpFKHByZWZpeCMjX3R4KSwJXAorCS5yeAkJPSBwcmVmaXgjI19yeCwJCQlcCisJLnJ4X2xlbmd0aAk9IEFSUkFZX1NJWkUocHJlZml4IyNfcngpCisKK3N0cnVjdCBiMjA1Nl9pbml0dGFic19wdHMgYjIwNTZfaW5pdHRhYnNbXSA9IHsKKwlbM10gPSB7IElOSVRUQUJTUFRTKGIyMDU2X2luaXR0YWJfcmV2MykgfSwKKwlbNF0gPSB7IElOSVRUQUJTUFRTKGIyMDU2X2luaXR0YWJfcmV2NCkgfSwKKwlbNV0gPSB7IElOSVRUQUJTUFRTKGIyMDU2X2luaXR0YWJfcmV2NSkgfSwKKwlbNl0gPSB7IElOSVRUQUJTUFRTKGIyMDU2X2luaXR0YWJfcmV2NikgfSwKKwlbN10gPSB7IElOSVRUQUJTUFRTKGIyMDU2X2luaXR0YWJfcmV2NykgfSwKKwlbOF0gPSB7IElOSVRUQUJTUFRTKGIyMDU2X2luaXR0YWJfcmV2OCkgfSwKKwlbOV0gPSB7IElOSVRUQUJTUFRTKGIyMDU2X2luaXR0YWJfcmV2NykgfSwKK307CisKKyNkZWZpbmUgUkFESU9SRUdTMyhyMDAsIHIwMSwgcjAyLCByMDMsIHIwNCwgcjA1LCByMDYsIHIwNywgcjA4LCByMDksIFwKKwkJICAgcjEwLCByMTEsIHIxMiwgcjEzLCByMTQsIHIxNSwgcjE2LCByMTcsIHIxOCwgcjE5LCBcCisJCSAgIHIyMCwgcjIxLCByMjIsIHIyMywgcjI0LCByMjUsIHIyNiwgcjI3LCByMjgsIHIyOSwgXAorCQkgICByMzAsIHIzMSwgcjMyLCByMzMsIHIzNCwgcjM1LCByMzYpIFwKKwkucmFkaW9fc3luX3BsbF92Y29jYWwxCQk9IHIwMCwJXAorCS5yYWRpb19zeW5fcGxsX3Zjb2NhbDIJCT0gcjAxLAlcCisJLnJhZGlvX3N5bl9wbGxfcmVmZGl2CQk9IHIwMiwJXAorCS5yYWRpb19zeW5fcGxsX21tZDIJCT0gcjAzLAlcCisJLnJhZGlvX3N5bl9wbGxfbW1kMQkJPSByMDQsCVwKKwkucmFkaW9fc3luX3BsbF9sb29wZmlsdGVyMQk9IHIwNSwJXAorCS5yYWRpb19zeW5fcGxsX2xvb3BmaWx0ZXIyCT0gcjA2LAlcCisJLnJhZGlvX3N5bl9wbGxfbG9vcGZpbHRlcjMJPSByMDcsCVwKKwkucmFkaW9fc3luX3BsbF9sb29wZmlsdGVyNAk9IHIwOCwJXAorCS5yYWRpb19zeW5fcGxsX2xvb3BmaWx0ZXI1CT0gcjA5LAlcCisJLnJhZGlvX3N5bl9yZXNlcnZlZF9hZGRyMjcJPSByMTAsCVwKKwkucmFkaW9fc3luX3Jlc2VydmVkX2FkZHIyOAk9IHIxMSwJXAorCS5yYWRpb19zeW5fcmVzZXJ2ZWRfYWRkcjI5CT0gcjEyLAlcCisJLnJhZGlvX3N5bl9sb2dlbl92Y29idWYxCT0gcjEzLAlcCisJLnJhZGlvX3N5bl9sb2dlbl9taXhlcjIJCT0gcjE0LAlcCisJLnJhZGlvX3N5bl9sb2dlbl9idWYzCQk9IHIxNSwJXAorCS5yYWRpb19zeW5fbG9nZW5fYnVmNAkJPSByMTYsCVwKKwkucmFkaW9fcngwX2xuYWFfdHVuZQkJPSByMTcsCVwKKwkucmFkaW9fcngwX2xuYWdfdHVuZQkJPSByMTgsCVwKKwkucmFkaW9fdHgwX2ludHBhYV9ib29zdF90dW5lCT0gcjE5LAlcCisJLnJhZGlvX3R4MF9pbnRwYWdfYm9vc3RfdHVuZQk9IHIyMCwJXAorCS5yYWRpb190eDBfcGFkYV9ib29zdF90dW5lCT0gcjIxLAlcCisJLnJhZGlvX3R4MF9wYWRnX2Jvb3N0X3R1bmUJPSByMjIsCVwKKwkucmFkaW9fdHgwX3BnYWFfYm9vc3RfdHVuZQk9IHIyMywJXAorCS5yYWRpb190eDBfcGdhZ19ib29zdF90dW5lCT0gcjI0LAlcCisJLnJhZGlvX3R4MF9taXhhX2Jvb3N0X3R1bmUJPSByMjUsCVwKKwkucmFkaW9fdHgwX21peGdfYm9vc3RfdHVuZQk9IHIyNiwJXAorCS5yYWRpb19yeDFfbG5hYV90dW5lCQk9IHIyNywJXAorCS5yYWRpb19yeDFfbG5hZ190dW5lCQk9IHIyOCwJXAorCS5yYWRpb190eDFfaW50cGFhX2Jvb3N0X3R1bmUJPSByMjksCVwKKwkucmFkaW9fdHgxX2ludHBhZ19ib29zdF90dW5lCT0gcjMwLAlcCisJLnJhZGlvX3R4MV9wYWRhX2Jvb3N0X3R1bmUJPSByMzEsCVwKKwkucmFkaW9fdHgxX3BhZGdfYm9vc3RfdHVuZQk9IHIzMiwJXAorCS5yYWRpb190eDFfcGdhYV9ib29zdF90dW5lCT0gcjMzLAlcCisJLnJhZGlvX3R4MV9wZ2FnX2Jvb3N0X3R1bmUJPSByMzQsCVwKKwkucmFkaW9fdHgxX21peGFfYm9vc3RfdHVuZQk9IHIzNSwJXAorCS5yYWRpb190eDFfbWl4Z19ib29zdF90dW5lCT0gcjM2CisKKyNkZWZpbmUgUEhZUkVHUyhyMCwgcjEsIHIyLCByMywgcjQsIHI1KQlcCisJLnBoeV9yZWdzLnBoeV9idzFhCT0gcjAsCVwKKwkucGh5X3JlZ3MucGh5X2J3Mgk9IHIxLAlcCisJLnBoeV9yZWdzLnBoeV9idzMJPSByMiwJXAorCS5waHlfcmVncy5waHlfYnc0CT0gcjMsCVwKKwkucGh5X3JlZ3MucGh5X2J3NQk9IHI0LAlcCisJLnBoeV9yZWdzLnBoeV9idzYJPSByNQorCisvKiBodHRwOi8vYmNtLXY0LnNpcHNvbHV0aW9ucy5uZXQvODAyLjExL1JhZGlvLzIwNTYvQ2hhbm5lbFRhYmxlICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGI0M19ucGh5X2NoYW5uZWx0YWJfZW50cnlfcmV2MyBiNDNfbnBoeV9jaGFubmVsdGFiX3JldjNbXSA9IHsKKyAgewkuZnJlcQkJCT0gNDkyMCwKKwlSQURJT1JFR1MzKDB4ZmYsIDB4MDEsIDB4MDEsIDB4MDEsIDB4ZWMsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OGYsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDgsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MGIsCisJCSAgIDB4MDAsIDB4ZmYsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDgsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MGIsIDB4MDAsIDB4ZmYsIDB4MDApLAorCVBIWVJFR1MoMHgwN2I0LCAweDA3YjAsIDB4MDdhYywgMHgwMjE0LCAweDAyMTUsIDB4MDIxNiksCisgIH0sCisgIHsJLmZyZXEJCQk9IDQ5MzAsCisJUkFESU9SRUdTMygweGZmLCAweDAxLCAweDAxLCAweDAxLCAweGVkLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDhmLCAweDBmLCAweDAwLAorCQkgICAweGZmLCAweGZmLCAweDAwLCAweDA4LCAweDAwLCAweDdmLCAweDAwLCAweDBiLAorCQkgICAweDAwLCAweGZmLCAweDAwLCAweGZmLCAweDAwLCAweDA4LCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDBiLCAweDAwLCAweGZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDdiOCwgMHgwN2I0LCAweDA3YjAsIDB4MDIxMywgMHgwMjE0LCAweDAyMTUpLAorICB9LAorICB7CS5mcmVxCQkJPSA0OTQwLAorCVJBRElPUkVHUzMoMHhmZiwgMHgwMSwgMHgwMSwgMHgwMSwgMHhlZSwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4ZiwgMHgwZiwgMHgwMCwKKwkJICAgMHhmZiwgMHhmZiwgMHgwMCwgMHgwOCwgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwYiwKKwkJICAgMHgwMCwgMHhmZiwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwOCwgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwYiwgMHgwMCwgMHhmZiwgMHgwMCksCisJUEhZUkVHUygweDA3YmMsIDB4MDdiOCwgMHgwN2I0LCAweDAyMTIsIDB4MDIxMywgMHgwMjE0KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNDk1MCwKKwlSQURJT1JFR1MzKDB4ZmYsIDB4MDEsIDB4MDEsIDB4MDEsIDB4ZWYsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OGYsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDgsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MGIsCisJCSAgIDB4MDAsIDB4ZmYsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDgsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MGIsIDB4MDAsIDB4ZmYsIDB4MDApLAorCVBIWVJFR1MoMHgwN2MwLCAweDA3YmMsIDB4MDdiOCwgMHgwMjExLCAweDAyMTIsIDB4MDIxMyksCisgIH0sCisgIHsJLmZyZXEJCQk9IDQ5NjAsCisJUkFESU9SRUdTMygweGZmLCAweDAxLCAweDAxLCAweDAxLCAweGYwLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDhmLCAweDBmLCAweDAwLAorCQkgICAweGZmLCAweGZmLCAweDAwLCAweDA4LCAweDAwLCAweDdmLCAweDAwLCAweDBiLAorCQkgICAweDAwLCAweGZmLCAweDAwLCAweGZmLCAweDAwLCAweDA4LCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDBiLCAweDAwLCAweGZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDdjNCwgMHgwN2MwLCAweDA3YmMsIDB4MDIwZiwgMHgwMjExLCAweDAyMTIpLAorICB9LAorICB7CS5mcmVxCQkJPSA0OTcwLAorCVJBRElPUkVHUzMoMHhmZiwgMHgwMSwgMHgwMSwgMHgwMSwgMHhmMSwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHg4ZiwgMHgwZiwgMHgwMCwKKwkJICAgMHhmZiwgMHhmZiwgMHgwMCwgMHgwOCwgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwYiwKKwkJICAgMHgwMCwgMHhmZiwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwOCwgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwYiwgMHgwMCwgMHhmZiwgMHgwMCksCisJUEhZUkVHUygweDA3YzgsIDB4MDdjNCwgMHgwN2MwLCAweDAyMGUsIDB4MDIwZiwgMHgwMjExKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNDk4MCwKKwlSQURJT1JFR1MzKDB4ZmYsIDB4MDEsIDB4MDEsIDB4MDEsIDB4ZjIsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4OGYsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDgsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MGIsCisJCSAgIDB4MDAsIDB4ZmYsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDgsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MGIsIDB4MDAsIDB4ZmYsIDB4MDApLAorCVBIWVJFR1MoMHgwN2NjLCAweDA3YzgsIDB4MDdjNCwgMHgwMjBkLCAweDAyMGUsIDB4MDIwZiksCisgIH0sCisgIHsJLmZyZXEJCQk9IDQ5OTAsCisJUkFESU9SRUdTMygweGZmLCAweDAxLCAweDAxLCAweDAxLCAweGYzLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDhmLCAweDBmLCAweDAwLAorCQkgICAweGZmLCAweGZmLCAweDAwLCAweDA4LCAweDAwLCAweDdmLCAweDAwLCAweDBiLAorCQkgICAweDAwLCAweGZmLCAweDAwLCAweGZmLCAweDAwLCAweDA4LCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDBiLCAweDAwLCAweGZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDdkMCwgMHgwN2NjLCAweDA3YzgsIDB4MDIwYywgMHgwMjBkLCAweDAyMGUpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MDAwLAorCVJBRElPUkVHUzMoMHhmZiwgMHgwMSwgMHgwMSwgMHgwMSwgMHhmNCwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHg4ZiwgMHgwZiwgMHgwMCwKKwkJICAgMHhmZiwgMHhmZiwgMHgwMCwgMHgwNywgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwYiwKKwkJICAgMHgwMCwgMHhmZiwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwNywgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwYiwgMHgwMCwgMHhmZiwgMHgwMCksCisJUEhZUkVHUygweDA3ZDQsIDB4MDdkMCwgMHgwN2NjLCAweDAyMGIsIDB4MDIwYywgMHgwMjBkKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTAxMCwKKwlSQURJT1JFR1MzKDB4ZmYsIDB4MDEsIDB4MDEsIDB4MDEsIDB4ZjUsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4OGYsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDcsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MGIsCisJCSAgIDB4MDAsIDB4ZmYsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDcsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MGIsIDB4MDAsIDB4ZmYsIDB4MDApLAorCVBIWVJFR1MoMHgwN2Q4LCAweDA3ZDQsIDB4MDdkMCwgMHgwMjBhLCAweDAyMGIsIDB4MDIwYyksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUwMjAsCisJUkFESU9SRUdTMygweGY3LCAweDAxLCAweDAxLCAweDAxLCAweGY2LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDhmLCAweDBmLCAweDAwLAorCQkgICAweGZmLCAweGZmLCAweDAwLCAweDA3LCAweDAwLCAweDdmLCAweDAwLCAweDBiLAorCQkgICAweDAwLCAweGZmLCAweDAwLCAweGZmLCAweDAwLCAweDA3LCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDBiLCAweDAwLCAweGZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDdkYywgMHgwN2Q4LCAweDA3ZDQsIDB4MDIwOSwgMHgwMjBhLCAweDAyMGIpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MDMwLAorCVJBRElPUkVHUzMoMHhmNywgMHgwMSwgMHgwMSwgMHgwMSwgMHhmNywgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHg4ZiwgMHgwZiwgMHgwMCwKKwkJICAgMHhmZiwgMHhmZiwgMHgwMCwgMHgwNywgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwYiwKKwkJICAgMHgwMCwgMHhmZiwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwNywgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwYiwgMHgwMCwgMHhmZiwgMHgwMCksCisJUEhZUkVHUygweDA3ZTAsIDB4MDdkYywgMHgwN2Q4LCAweDAyMDgsIDB4MDIwOSwgMHgwMjBhKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTA0MCwKKwlSQURJT1JFR1MzKDB4ZWYsIDB4MDEsIDB4MDEsIDB4MDEsIDB4ZjgsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4OGYsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDcsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MGIsCisJCSAgIDB4MDAsIDB4ZmYsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDcsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MGIsIDB4MDAsIDB4ZmYsIDB4MDApLAorCVBIWVJFR1MoMHgwN2U0LCAweDA3ZTAsIDB4MDdkYywgMHgwMjA3LCAweDAyMDgsIDB4MDIwOSksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUwNTAsCisJUkFESU9SRUdTMygweGVmLCAweDAxLCAweDAxLCAweDAxLCAweGY5LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDhmLCAweDBmLCAweDAwLAorCQkgICAweGZmLCAweGZmLCAweDAwLCAweDA3LCAweDAwLCAweDdmLCAweDAwLCAweDBiLAorCQkgICAweDAwLCAweGZmLCAweDAwLCAweGZmLCAweDAwLCAweDA3LCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDBiLCAweDAwLCAweGZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDdlOCwgMHgwN2U0LCAweDA3ZTAsIDB4MDIwNiwgMHgwMjA3LCAweDAyMDgpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MDYwLAorCVJBRElPUkVHUzMoMHhlNiwgMHgwMSwgMHgwMSwgMHgwMSwgMHhmYSwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHg4ZiwgMHgwZiwgMHgwMCwKKwkJICAgMHhmZiwgMHhmZiwgMHgwMCwgMHgwNywgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwYiwKKwkJICAgMHgwMCwgMHhmZiwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwNywgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwYiwgMHgwMCwgMHhmZiwgMHgwMCksCisJUEhZUkVHUygweDA3ZWMsIDB4MDdlOCwgMHgwN2U0LCAweDAyMDUsIDB4MDIwNiwgMHgwMjA3KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTA3MCwKKwlSQURJT1JFR1MzKDB4ZTYsIDB4MDEsIDB4MDEsIDB4MDEsIDB4ZmIsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4OGYsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDcsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MGIsCisJCSAgIDB4MDAsIDB4ZmYsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDcsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MGIsIDB4MDAsIDB4ZmYsIDB4MDApLAorCVBIWVJFR1MoMHgwN2YwLCAweDA3ZWMsIDB4MDdlOCwgMHgwMjA0LCAweDAyMDUsIDB4MDIwNiksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUwODAsCisJUkFESU9SRUdTMygweGRlLCAweDAxLCAweDAxLCAweDAxLCAweGZjLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDhmLCAweDBmLCAweDAwLAorCQkgICAweGZmLCAweGZmLCAweDAwLCAweDA3LCAweDAwLCAweDdmLCAweDAwLCAweDBiLAorCQkgICAweDAwLCAweGZmLCAweDAwLCAweGZmLCAweDAwLCAweDA3LCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDBiLCAweDAwLCAweGZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDdmNCwgMHgwN2YwLCAweDA3ZWMsIDB4MDIwMywgMHgwMjA0LCAweDAyMDUpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MDkwLAorCVJBRElPUkVHUzMoMHhkZSwgMHgwMSwgMHgwMSwgMHgwMSwgMHhmZCwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHg4ZiwgMHgwZiwgMHgwMCwKKwkJICAgMHhmZiwgMHhmZiwgMHgwMCwgMHgwNywgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwYiwKKwkJICAgMHgwMCwgMHhmZiwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwNywgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwYiwgMHgwMCwgMHhmZiwgMHgwMCksCisJUEhZUkVHUygweDA3ZjgsIDB4MDdmNCwgMHgwN2YwLCAweDAyMDIsIDB4MDIwMywgMHgwMjA0KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTEwMCwKKwlSQURJT1JFR1MzKDB4ZDYsIDB4MDEsIDB4MDEsIDB4MDEsIDB4ZmUsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDIsIDB4MDIsIDB4MDIsIDB4OGYsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDcsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MGIsCisJCSAgIDB4MDAsIDB4ZmYsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDcsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MGIsIDB4MDAsIDB4ZmYsIDB4MDApLAorCVBIWVJFR1MoMHgwN2ZjLCAweDA3ZjgsIDB4MDdmNCwgMHgwMjAxLCAweDAyMDIsIDB4MDIwMyksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUxMTAsCisJUkFESU9SRUdTMygweGQ2LCAweDAxLCAweDAxLCAweDAxLCAweGZmLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAyLCAweDAyLCAweDAyLCAweDhmLCAweDBmLCAweDAwLAorCQkgICAweGZmLCAweGZmLCAweDAwLCAweDA3LCAweDAwLCAweDdmLCAweDAwLCAweDBiLAorCQkgICAweDAwLCAweGZjLCAweDAwLCAweGZmLCAweDAwLCAweDA3LCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDBiLCAweDAwLCAweGZjLCAweDAwKSwKKwlQSFlSRUdTKDB4MDgwMCwgMHgwN2ZjLCAweDA3ZjgsIDB4MDIwMCwgMHgwMjAxLCAweDAyMDIpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MTIwLAorCVJBRElPUkVHUzMoMHhjZSwgMHgwMSwgMHgwMSwgMHgwMiwgMHgwMCwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMiwgMHgwMiwgMHgwMiwgMHg4ZiwgMHgwZiwgMHgwMCwKKwkJICAgMHhmZiwgMHhmZiwgMHgwMCwgMHgwNywgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwYiwKKwkJICAgMHgwMCwgMHhmYywgMHgwMCwgMHhmZiwgMHgwMCwgMHgwNywgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwYiwgMHgwMCwgMHhmYywgMHgwMCksCisJUEhZUkVHUygweDA4MDQsIDB4MDgwMCwgMHgwN2ZjLCAweDAxZmYsIDB4MDIwMCwgMHgwMjAxKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTEzMCwKKwlSQURJT1JFR1MzKDB4Y2UsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDIsIDB4MDIsIDB4MDIsIDB4OGYsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDcsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MGIsCisJCSAgIDB4MDAsIDB4ZmMsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDcsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MGIsIDB4MDAsIDB4ZmMsIDB4MDApLAorCVBIWVJFR1MoMHgwODA4LCAweDA4MDQsIDB4MDgwMCwgMHgwMWZlLCAweDAxZmYsIDB4MDIwMCksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUxNDAsCisJUkFESU9SRUdTMygweGM2LCAweDAxLCAweDAxLCAweDAyLCAweDAyLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAyLCAweDAyLCAweDAyLCAweDhmLCAweDBmLCAweDAwLAorCQkgICAweGZmLCAweGZmLCAweDAwLCAweDA3LCAweDAwLCAweDdmLCAweDAwLCAweDBiLAorCQkgICAweDAwLCAweGZjLCAweDAwLCAweGZmLCAweDAwLCAweDA3LCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDBiLCAweDAwLCAweGZjLCAweDAwKSwKKwlQSFlSRUdTKDB4MDgwYywgMHgwODA4LCAweDA4MDQsIDB4MDFmZCwgMHgwMWZlLCAweDAxZmYpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MTYwLAorCVJBRElPUkVHUzMoMHhiZSwgMHgwMSwgMHgwMSwgMHgwMiwgMHgwNCwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMiwgMHgwMiwgMHgwMiwgMHg4ZiwgMHgwZiwgMHgwMCwKKwkJICAgMHhmZiwgMHhmZiwgMHgwMCwgMHgwNywgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwYiwKKwkJICAgMHgwMCwgMHhmYywgMHgwMCwgMHhmZiwgMHgwMCwgMHgwNywgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwYiwgMHgwMCwgMHhmYywgMHgwMCksCisJUEhZUkVHUygweDA4MTQsIDB4MDgxMCwgMHgwODBjLCAweDAxZmIsIDB4MDFmYywgMHgwMWZkKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTE3MCwKKwlSQURJT1JFR1MzKDB4YmUsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MDUsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDIsIDB4MDIsIDB4MDIsIDB4OGYsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDcsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MGIsCisJCSAgIDB4MDAsIDB4ZmMsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDcsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MGIsIDB4MDAsIDB4ZmMsIDB4MDApLAorCVBIWVJFR1MoMHgwODE4LCAweDA4MTQsIDB4MDgxMCwgMHgwMWZhLCAweDAxZmIsIDB4MDFmYyksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUxODAsCisJUkFESU9SRUdTMygweGI2LCAweDAxLCAweDAxLCAweDAyLCAweDA2LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAyLCAweDAyLCAweDAyLCAweDhmLCAweDBmLCAweDAwLAorCQkgICAweGZmLCAweGVmLCAweDAwLCAweDA3LCAweDAwLCAweDdmLCAweDAwLCAweDBiLAorCQkgICAweDAwLCAweGZjLCAweDAwLCAweGVmLCAweDAwLCAweDA3LCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDBiLCAweDAwLCAweGZjLCAweDAwKSwKKwlQSFlSRUdTKDB4MDgxYywgMHgwODE4LCAweDA4MTQsIDB4MDFmOSwgMHgwMWZhLCAweDAxZmIpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MTkwLAorCVJBRElPUkVHUzMoMHhiNiwgMHgwMSwgMHgwMSwgMHgwMiwgMHgwNywgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMiwgMHgwMiwgMHgwMiwgMHg4ZiwgMHgwZiwgMHgwMCwKKwkJICAgMHhmZiwgMHhlZiwgMHgwMCwgMHgwNywgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwYiwKKwkJICAgMHgwMCwgMHhmYywgMHgwMCwgMHhlZiwgMHgwMCwgMHgwNywgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwYiwgMHgwMCwgMHhmYywgMHgwMCksCisJUEhZUkVHUygweDA4MjAsIDB4MDgxYywgMHgwODE4LCAweDAxZjgsIDB4MDFmOSwgMHgwMWZhKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTIwMCwKKwlSQURJT1JFR1MzKDB4YWYsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MDgsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDIsIDB4MDIsIDB4MDIsIDB4OGYsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZmYsIDB4ZWYsIDB4MDAsIDB4MDYsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MGEsCisJCSAgIDB4MDAsIDB4ZmMsIDB4MDAsIDB4ZWYsIDB4MDAsIDB4MDYsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MGEsIDB4MDAsIDB4ZmMsIDB4MDApLAorCVBIWVJFR1MoMHgwODI0LCAweDA4MjAsIDB4MDgxYywgMHgwMWY3LCAweDAxZjgsIDB4MDFmOSksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUyMTAsCisJUkFESU9SRUdTMygweGFmLCAweDAxLCAweDAxLCAweDAyLCAweDA5LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAyLCAweDAyLCAweDAyLCAweDhmLCAweDBmLCAweDAwLAorCQkgICAweGZmLCAweGRmLCAweDAwLCAweDA2LCAweDAwLCAweDdmLCAweDAwLCAweDBhLAorCQkgICAweDAwLCAweGZjLCAweDAwLCAweGRmLCAweDAwLCAweDA2LCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDBhLCAweDAwLCAweGZjLCAweDAwKSwKKwlQSFlSRUdTKDB4MDgyOCwgMHgwODI0LCAweDA4MjAsIDB4MDFmNiwgMHgwMWY3LCAweDAxZjgpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MjIwLAorCVJBRElPUkVHUzMoMHhhNywgMHgwMSwgMHgwMSwgMHgwMiwgMHgwYSwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMiwgMHgwMiwgMHgwMiwgMHg4ZiwgMHgwZiwgMHgwMCwKKwkJICAgMHhmZiwgMHhkZiwgMHgwMCwgMHgwNiwgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwYSwKKwkJICAgMHgwMCwgMHhmYywgMHgwMCwgMHhkZiwgMHgwMCwgMHgwNiwgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwYSwgMHgwMCwgMHhmYywgMHgwMCksCisJUEhZUkVHUygweDA4MmMsIDB4MDgyOCwgMHgwODI0LCAweDAxZjUsIDB4MDFmNiwgMHgwMWY3KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTIzMCwKKwlSQURJT1JFR1MzKDB4YTcsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MGIsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDIsIDB4MDIsIDB4MDIsIDB4OGYsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZmYsIDB4ZGYsIDB4MDAsIDB4MDYsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MGEsCisJCSAgIDB4MDAsIDB4ZmMsIDB4MDAsIDB4ZGYsIDB4MDAsIDB4MDYsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MGEsIDB4MDAsIDB4ZmMsIDB4MDApLAorCVBIWVJFR1MoMHgwODMwLCAweDA4MmMsIDB4MDgyOCwgMHgwMWY0LCAweDAxZjUsIDB4MDFmNiksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUyNDAsCisJUkFESU9SRUdTMygweGEwLCAweDAxLCAweDAxLCAweDAyLCAweDBjLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAyLCAweDAyLCAweDAyLCAweDhmLCAweDBmLCAweDAwLAorCQkgICAweGZmLCAweGNmLCAweDAwLCAweDA2LCAweDAwLCAweDdmLCAweDAwLCAweDBhLAorCQkgICAweDAwLCAweGZjLCAweDAwLCAweGNmLCAweDAwLCAweDA2LCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDBhLCAweDAwLCAweGZjLCAweDAwKSwKKwlQSFlSRUdTKDB4MDgzNCwgMHgwODMwLCAweDA4MmMsIDB4MDFmMywgMHgwMWY0LCAweDAxZjUpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MjUwLAorCVJBRElPUkVHUzMoMHhhMCwgMHgwMSwgMHgwMSwgMHgwMiwgMHgwZCwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMiwgMHgwMiwgMHgwMiwgMHg4ZiwgMHgwZiwgMHgwMCwKKwkJICAgMHhmZiwgMHhjZiwgMHgwMCwgMHgwNiwgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwYSwKKwkJICAgMHgwMCwgMHhmYywgMHgwMCwgMHhjZiwgMHgwMCwgMHgwNiwgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwYSwgMHgwMCwgMHhmYywgMHgwMCksCisJUEhZUkVHUygweDA4MzgsIDB4MDgzNCwgMHgwODMwLCAweDAxZjIsIDB4MDFmMywgMHgwMWY0KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTI2MCwKKwlSQURJT1JFR1MzKDB4OTgsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MGUsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDIsIDB4MDIsIDB4MDIsIDB4OGYsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZmYsIDB4Y2YsIDB4MDAsIDB4MDYsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MGEsCisJCSAgIDB4MDAsIDB4ZmMsIDB4MDAsIDB4Y2YsIDB4MDAsIDB4MDYsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MGEsIDB4MDAsIDB4ZmMsIDB4MDApLAorCVBIWVJFR1MoMHgwODNjLCAweDA4MzgsIDB4MDgzNCwgMHgwMWYxLCAweDAxZjIsIDB4MDFmMyksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUyNzAsCisJUkFESU9SRUdTMygweDk4LCAweDAxLCAweDAxLCAweDAyLCAweDBmLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAzLCAweDAzLCAweDAzLCAweDhmLCAweDBmLCAweDAwLAorCQkgICAweGZmLCAweGNmLCAweDAwLCAweDA2LCAweDAwLCAweDdmLCAweDAwLCAweDBhLAorCQkgICAweDAwLCAweGZjLCAweDAwLCAweGNmLCAweDAwLCAweDA2LCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDBhLCAweDAwLCAweGZjLCAweDAwKSwKKwlQSFlSRUdTKDB4MDg0MCwgMHgwODNjLCAweDA4MzgsIDB4MDFmMCwgMHgwMWYxLCAweDAxZjIpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MjgwLAorCVJBRElPUkVHUzMoMHg5MSwgMHgwMSwgMHgwMSwgMHgwMiwgMHgxMCwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMywgMHgwMywgMHgwMywgMHg4ZiwgMHgwZiwgMHgwMCwKKwkJICAgMHhmZiwgMHhiZiwgMHgwMCwgMHgwNiwgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwYSwKKwkJICAgMHgwMCwgMHhmYywgMHgwMCwgMHhiZiwgMHgwMCwgMHgwNiwgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwYSwgMHgwMCwgMHhmYywgMHgwMCksCisJUEhZUkVHUygweDA4NDQsIDB4MDg0MCwgMHgwODNjLCAweDAxZjAsIDB4MDFmMCwgMHgwMWYxKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTI5MCwKKwlSQURJT1JFR1MzKDB4OTEsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MTEsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDMsIDB4MDMsIDB4MDMsIDB4OGYsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZmYsIDB4YmYsIDB4MDAsIDB4MDYsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MGEsCisJCSAgIDB4MDAsIDB4ZmMsIDB4MDAsIDB4YmYsIDB4MDAsIDB4MDYsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MGEsIDB4MDAsIDB4ZmMsIDB4MDApLAorCVBIWVJFR1MoMHgwODQ4LCAweDA4NDQsIDB4MDg0MCwgMHgwMWVmLCAweDAxZjAsIDB4MDFmMCksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUzMDAsCisJUkFESU9SRUdTMygweDhhLCAweDAxLCAweDAxLCAweDAyLCAweDEyLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAzLCAweDAzLCAweDAzLCAweDhmLCAweDBlLCAweDAwLAorCQkgICAweGZmLCAweGJmLCAweDAwLCAweDA1LCAweDAwLCAweDdmLCAweDAwLCAweDA5LAorCQkgICAweDAwLCAweGZjLCAweDAwLCAweGJmLCAweDAwLCAweDA1LCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDA5LCAweDAwLCAweGZjLCAweDAwKSwKKwlQSFlSRUdTKDB4MDg0YywgMHgwODQ4LCAweDA4NDQsIDB4MDFlZSwgMHgwMWVmLCAweDAxZjApLAorICB9LAorICB7CS5mcmVxCQkJPSA1MzEwLAorCVJBRElPUkVHUzMoMHg4YSwgMHgwMSwgMHgwMSwgMHgwMiwgMHgxMywgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMywgMHgwMywgMHgwMywgMHg4ZiwgMHgwZSwgMHgwMCwKKwkJICAgMHhmZiwgMHhiZiwgMHgwMCwgMHgwNSwgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwOSwKKwkJICAgMHgwMCwgMHhmYSwgMHgwMCwgMHhiZiwgMHgwMCwgMHgwNSwgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwOSwgMHgwMCwgMHhmYSwgMHgwMCksCisJUEhZUkVHUygweDA4NTAsIDB4MDg0YywgMHgwODQ4LCAweDAxZWQsIDB4MDFlZSwgMHgwMWVmKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTMyMCwKKwlSQURJT1JFR1MzKDB4ODMsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MTQsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDMsIDB4MDMsIDB4MDMsIDB4OGYsIDB4MGUsIDB4MDAsCisJCSAgIDB4ZmYsIDB4YmYsIDB4MDAsIDB4MDUsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MDksCisJCSAgIDB4MDAsIDB4ZmEsIDB4MDAsIDB4YmYsIDB4MDAsIDB4MDUsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MDksIDB4MDAsIDB4ZmEsIDB4MDApLAorCVBIWVJFR1MoMHgwODU0LCAweDA4NTAsIDB4MDg0YywgMHgwMWVjLCAweDAxZWQsIDB4MDFlZSksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUzMzAsCisJUkFESU9SRUdTMygweDgzLCAweDAxLCAweDAxLCAweDAyLCAweDE1LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAzLCAweDAzLCAweDAzLCAweDhmLCAweDBlLCAweDAwLAorCQkgICAweGZmLCAweGFmLCAweDAwLCAweDA1LCAweDAwLCAweDdmLCAweDAwLCAweDA5LAorCQkgICAweDAwLCAweGZhLCAweDAwLCAweGFmLCAweDAwLCAweDA1LCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDA5LCAweDAwLCAweGZhLCAweDAwKSwKKwlQSFlSRUdTKDB4MDg1OCwgMHgwODU0LCAweDA4NTAsIDB4MDFlYiwgMHgwMWVjLCAweDAxZWQpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MzQwLAorCVJBRElPUkVHUzMoMHg3YywgMHgwMSwgMHgwMSwgMHgwMiwgMHgxNiwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMywgMHgwMywgMHgwMywgMHg4ZiwgMHgwZSwgMHgwMCwKKwkJICAgMHhmZiwgMHhhZiwgMHgwMCwgMHgwNSwgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwOSwKKwkJICAgMHgwMCwgMHhmYSwgMHgwMCwgMHhhZiwgMHgwMCwgMHgwNSwgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwOSwgMHgwMCwgMHhmYSwgMHgwMCksCisJUEhZUkVHUygweDA4NWMsIDB4MDg1OCwgMHgwODU0LCAweDAxZWEsIDB4MDFlYiwgMHgwMWVjKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTM1MCwKKwlSQURJT1JFR1MzKDB4N2MsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MTcsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDMsIDB4MDMsIDB4MDMsIDB4OGYsIDB4MGUsIDB4MDAsCisJCSAgIDB4ZmYsIDB4OWYsIDB4MDAsIDB4MDUsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MDksCisJCSAgIDB4MDAsIDB4ZmEsIDB4MDAsIDB4OWYsIDB4MDAsIDB4MDUsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MDksIDB4MDAsIDB4ZmEsIDB4MDApLAorCVBIWVJFR1MoMHgwODYwLCAweDA4NWMsIDB4MDg1OCwgMHgwMWU5LCAweDAxZWEsIDB4MDFlYiksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUzNjAsCisJUkFESU9SRUdTMygweDc1LCAweDAxLCAweDAxLCAweDAyLCAweDE4LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAzLCAweDAzLCAweDAzLCAweDhmLCAweDBlLCAweDAwLAorCQkgICAweGZmLCAweDlmLCAweDAwLCAweDA1LCAweDAwLCAweDdmLCAweDAwLCAweDA5LAorCQkgICAweDAwLCAweGZhLCAweDAwLCAweDlmLCAweDAwLCAweDA1LCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDA5LCAweDAwLCAweGZhLCAweDAwKSwKKwlQSFlSRUdTKDB4MDg2NCwgMHgwODYwLCAweDA4NWMsIDB4MDFlOCwgMHgwMWU5LCAweDAxZWEpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MzcwLAorCVJBRElPUkVHUzMoMHg3NSwgMHgwMSwgMHgwMSwgMHgwMiwgMHgxOSwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMywgMHgwMywgMHgwMywgMHg4ZiwgMHgwZSwgMHgwMCwKKwkJICAgMHhmZiwgMHg5ZiwgMHgwMCwgMHgwNSwgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwOSwKKwkJICAgMHgwMCwgMHhmYSwgMHgwMCwgMHg5ZiwgMHgwMCwgMHgwNSwgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwOSwgMHgwMCwgMHhmYSwgMHgwMCksCisJUEhZUkVHUygweDA4NjgsIDB4MDg2NCwgMHgwODYwLCAweDAxZTcsIDB4MDFlOCwgMHgwMWU5KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTM4MCwKKwlSQURJT1JFR1MzKDB4NmUsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MWEsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDMsIDB4MDMsIDB4MDMsIDB4OGYsIDB4MGUsIDB4MDAsCisJCSAgIDB4ZmYsIDB4OWYsIDB4MDAsIDB4MDUsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MDksCisJCSAgIDB4MDAsIDB4ZmEsIDB4MDAsIDB4OWYsIDB4MDAsIDB4MDUsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MDksIDB4MDAsIDB4ZmEsIDB4MDApLAorCVBIWVJFR1MoMHgwODZjLCAweDA4NjgsIDB4MDg2NCwgMHgwMWU2LCAweDAxZTcsIDB4MDFlOCksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUzOTAsCisJUkFESU9SRUdTMygweDZlLCAweDAxLCAweDAxLCAweDAyLCAweDFiLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAzLCAweDAzLCAweDAzLCAweDhmLCAweDBlLCAweDAwLAorCQkgICAweGZmLCAweDhmLCAweDAwLCAweDA1LCAweDAwLCAweDdmLCAweDAwLCAweDA5LAorCQkgICAweDAwLCAweGZhLCAweDAwLCAweDhmLCAweDAwLCAweDA1LCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDA5LCAweDAwLCAweGZhLCAweDAwKSwKKwlQSFlSRUdTKDB4MDg3MCwgMHgwODZjLCAweDA4NjgsIDB4MDFlNSwgMHgwMWU2LCAweDAxZTcpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NDAwLAorCVJBRElPUkVHUzMoMHg2NywgMHgwMSwgMHgwMSwgMHgwMiwgMHgxYywgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMywgMHgwMywgMHgwMywgMHg4ZCwgMHgwZCwgMHgwMCwKKwkJICAgMHhjOCwgMHg4ZiwgMHgwMCwgMHgwNCwgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwOCwKKwkJICAgMHgwMCwgMHhmYSwgMHgwMCwgMHg4ZiwgMHgwMCwgMHgwNCwgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwOCwgMHgwMCwgMHhmYSwgMHgwMCksCisJUEhZUkVHUygweDA4NzQsIDB4MDg3MCwgMHgwODZjLCAweDAxZTUsIDB4MDFlNSwgMHgwMWU2KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTQxMCwKKwlSQURJT1JFR1MzKDB4NjcsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MWQsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDMsIDB4MDMsIDB4MDMsIDB4OGQsIDB4MGQsIDB4MDAsCisJCSAgIDB4YzgsIDB4OGYsIDB4MDAsIDB4MDQsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MDgsCisJCSAgIDB4MDAsIDB4ZmEsIDB4MDAsIDB4OGYsIDB4MDAsIDB4MDQsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MDgsIDB4MDAsIDB4ZmEsIDB4MDApLAorCVBIWVJFR1MoMHgwODc4LCAweDA4NzQsIDB4MDg3MCwgMHgwMWU0LCAweDAxZTUsIDB4MDFlNSksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU0MjAsCisJUkFESU9SRUdTMygweDYxLCAweDAxLCAweDAxLCAweDAyLCAweDFlLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAzLCAweDAzLCAweDAzLCAweDhkLCAweDBkLCAweDAwLAorCQkgICAweGM4LCAweDhlLCAweDAwLCAweDA0LCAweDAwLCAweDdmLCAweDAwLCAweDA4LAorCQkgICAweDAwLCAweGZhLCAweDAwLCAweDhlLCAweDAwLCAweDA0LCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDA4LCAweDAwLCAweGZhLCAweDAwKSwKKwlQSFlSRUdTKDB4MDg3YywgMHgwODc4LCAweDA4NzQsIDB4MDFlMywgMHgwMWU0LCAweDAxZTUpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NDMwLAorCVJBRElPUkVHUzMoMHg2MSwgMHgwMSwgMHgwMSwgMHgwMiwgMHgxZiwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMywgMHgwMywgMHgwMywgMHg4ZCwgMHgwZCwgMHgwMCwKKwkJICAgMHhjOCwgMHg4ZSwgMHgwMCwgMHgwNCwgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwOCwKKwkJICAgMHgwMCwgMHhmYSwgMHgwMCwgMHg4ZSwgMHgwMCwgMHgwNCwgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwOCwgMHgwMCwgMHhmYSwgMHgwMCksCisJUEhZUkVHUygweDA4ODAsIDB4MDg3YywgMHgwODc4LCAweDAxZTIsIDB4MDFlMywgMHgwMWU0KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTQ0MCwKKwlSQURJT1JFR1MzKDB4NWEsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MjAsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDQsIDB4MDQsIDB4MDQsIDB4OGQsIDB4MGQsIDB4MDAsCisJCSAgIDB4YzgsIDB4N2UsIDB4MDAsIDB4MDQsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MDgsCisJCSAgIDB4MDAsIDB4ZmEsIDB4MDAsIDB4N2UsIDB4MDAsIDB4MDQsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MDgsIDB4MDAsIDB4ZmEsIDB4MDApLAorCVBIWVJFR1MoMHgwODg0LCAweDA4ODAsIDB4MDg3YywgMHgwMWUxLCAweDAxZTIsIDB4MDFlMyksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU0NTAsCisJUkFESU9SRUdTMygweDVhLCAweDAxLCAweDAxLCAweDAyLCAweDIxLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA0LCAweDA0LCAweDA0LCAweDhkLCAweDBkLCAweDAwLAorCQkgICAweGM4LCAweDdkLCAweDAwLCAweDA0LCAweDAwLCAweDdmLCAweDAwLCAweDA4LAorCQkgICAweDAwLCAweGZhLCAweDAwLCAweDdkLCAweDAwLCAweDA0LCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDA4LCAweDAwLCAweGZhLCAweDAwKSwKKwlQSFlSRUdTKDB4MDg4OCwgMHgwODg0LCAweDA4ODAsIDB4MDFlMCwgMHgwMWUxLCAweDAxZTIpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NDYwLAorCVJBRElPUkVHUzMoMHg1MywgMHgwMSwgMHgwMSwgMHgwMiwgMHgyMiwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNCwgMHgwNCwgMHgwNCwgMHg4ZCwgMHgwZCwgMHgwMCwKKwkJICAgMHhjOCwgMHg2ZCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwOCwKKwkJICAgMHgwMCwgMHhmOCwgMHgwMCwgMHg2ZCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwOCwgMHgwMCwgMHhmOCwgMHgwMCksCisJUEhZUkVHUygweDA4OGMsIDB4MDg4OCwgMHgwODg0LCAweDAxZGYsIDB4MDFlMCwgMHgwMWUxKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTQ3MCwKKwlSQURJT1JFR1MzKDB4NTMsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MjMsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDQsIDB4MDQsIDB4MDQsIDB4OGQsIDB4MGQsIDB4MDAsCisJCSAgIDB4YzgsIDB4NmQsIDB4MDAsIDB4MDQsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MDgsCisJCSAgIDB4MDAsIDB4ZjgsIDB4MDAsIDB4NmQsIDB4MDAsIDB4MDQsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MDgsIDB4MDAsIDB4ZjgsIDB4MDApLAorCVBIWVJFR1MoMHgwODkwLCAweDA4OGMsIDB4MDg4OCwgMHgwMWRlLCAweDAxZGYsIDB4MDFlMCksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU0ODAsCisJUkFESU9SRUdTMygweDRkLCAweDAxLCAweDAxLCAweDAyLCAweDI0LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA0LCAweDA0LCAweDA0LCAweDhkLCAweDBkLCAweDAwLAorCQkgICAweGM4LCAweDVkLCAweDAwLCAweDA0LCAweDAwLCAweDdmLCAweDAwLCAweDA4LAorCQkgICAweDAwLCAweGY4LCAweDAwLCAweDVkLCAweDAwLCAweDA0LCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDA4LCAweDAwLCAweGY4LCAweDAwKSwKKwlQSFlSRUdTKDB4MDg5NCwgMHgwODkwLCAweDA4OGMsIDB4MDFkZCwgMHgwMWRlLCAweDAxZGYpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NDkwLAorCVJBRElPUkVHUzMoMHg0ZCwgMHgwMSwgMHgwMSwgMHgwMiwgMHgyNSwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNCwgMHgwNCwgMHgwNCwgMHg4ZCwgMHgwZCwgMHgwMCwKKwkJICAgMHhjOCwgMHg1YywgMHgwMCwgMHgwNCwgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwOCwKKwkJICAgMHgwMCwgMHhmOCwgMHgwMCwgMHg1YywgMHgwMCwgMHgwNCwgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwOCwgMHgwMCwgMHhmOCwgMHgwMCksCisJUEhZUkVHUygweDA4OTgsIDB4MDg5NCwgMHgwODkwLCAweDAxZGQsIDB4MDFkZCwgMHgwMWRlKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTUwMCwKKwlSQURJT1JFR1MzKDB4NDcsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MjYsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDQsIDB4MDQsIDB4MDQsIDB4OGQsIDB4MGIsIDB4MDAsCisJCSAgIDB4ODQsIDB4NWMsIDB4MDAsIDB4MDMsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MDcsCisJCSAgIDB4MDAsIDB4ZjgsIDB4MDAsIDB4NWMsIDB4MDAsIDB4MDMsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MDcsIDB4MDAsIDB4ZjgsIDB4MDApLAorCVBIWVJFR1MoMHgwODljLCAweDA4OTgsIDB4MDg5NCwgMHgwMWRjLCAweDAxZGQsIDB4MDFkZCksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU1MTAsCisJUkFESU9SRUdTMygweDQ3LCAweDAxLCAweDAxLCAweDAyLCAweDI3LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA0LCAweDA0LCAweDA0LCAweDhkLCAweDBiLCAweDAwLAorCQkgICAweDg0LCAweDRjLCAweDAwLCAweDAzLCAweDAwLCAweDdmLCAweDAwLCAweDA3LAorCQkgICAweDAwLCAweGY4LCAweDAwLCAweDRjLCAweDAwLCAweDAzLCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDA3LCAweDAwLCAweGY4LCAweDAwKSwKKwlQSFlSRUdTKDB4MDhhMCwgMHgwODljLCAweDA4OTgsIDB4MDFkYiwgMHgwMWRjLCAweDAxZGQpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NTIwLAorCVJBRElPUkVHUzMoMHg0MCwgMHgwMSwgMHgwMSwgMHgwMiwgMHgyOCwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNCwgMHgwNCwgMHgwNCwgMHg4ZCwgMHgwYiwgMHgwMCwKKwkJICAgMHg4NCwgMHg0YywgMHgwMCwgMHgwMywgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwNywKKwkJICAgMHgwMCwgMHhmOCwgMHgwMCwgMHg0YywgMHgwMCwgMHgwMywgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwNywgMHgwMCwgMHhmOCwgMHgwMCksCisJUEhZUkVHUygweDA4YTQsIDB4MDhhMCwgMHgwODljLCAweDAxZGEsIDB4MDFkYiwgMHgwMWRjKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTUzMCwKKwlSQURJT1JFR1MzKDB4NDAsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MjksIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDQsIDB4MDQsIDB4MDQsIDB4OGQsIDB4MGIsIDB4MDAsCisJCSAgIDB4ODQsIDB4M2IsIDB4MDAsIDB4MDMsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MDcsCisJCSAgIDB4MDAsIDB4ZjgsIDB4MDAsIDB4M2IsIDB4MDAsIDB4MDMsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MDcsIDB4MDAsIDB4ZjgsIDB4MDApLAorCVBIWVJFR1MoMHgwOGE4LCAweDA4YTQsIDB4MDhhMCwgMHgwMWQ5LCAweDAxZGEsIDB4MDFkYiksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU1NDAsCisJUkFESU9SRUdTMygweDNhLCAweDAxLCAweDAxLCAweDAyLCAweDJhLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA0LCAweDA0LCAweDA0LCAweDhkLCAweDBiLCAweDAwLAorCQkgICAweDg0LCAweDNiLCAweDAwLCAweDAzLCAweDAwLCAweDdmLCAweDAwLCAweDA3LAorCQkgICAweDAwLCAweGY4LCAweDAwLCAweDNiLCAweDAwLCAweDAzLCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDA3LCAweDAwLCAweGY4LCAweDAwKSwKKwlQSFlSRUdTKDB4MDhhYywgMHgwOGE4LCAweDA4YTQsIDB4MDFkOCwgMHgwMWQ5LCAweDAxZGEpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NTUwLAorCVJBRElPUkVHUzMoMHgzYSwgMHgwMSwgMHgwMSwgMHgwMiwgMHgyYiwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNCwgMHgwNCwgMHgwNCwgMHg4ZCwgMHgwYiwgMHgwMCwKKwkJICAgMHg4NCwgMHgzYiwgMHgwMCwgMHgwMywgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwNywKKwkJICAgMHgwMCwgMHhmOCwgMHgwMCwgMHgzYiwgMHgwMCwgMHgwMywgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwNywgMHgwMCwgMHhmOCwgMHgwMCksCisJUEhZUkVHUygweDA4YjAsIDB4MDhhYywgMHgwOGE4LCAweDAxZDcsIDB4MDFkOCwgMHgwMWQ5KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTU2MCwKKwlSQURJT1JFR1MzKDB4MzQsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MmMsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDQsIDB4MDQsIDB4MDQsIDB4OGQsIDB4MGIsIDB4MDAsCisJCSAgIDB4ODQsIDB4MmIsIDB4MDAsIDB4MDMsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MDcsCisJCSAgIDB4MDAsIDB4ZjgsIDB4MDAsIDB4MmIsIDB4MDAsIDB4MDMsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MDcsIDB4MDAsIDB4ZjgsIDB4MDApLAorCVBIWVJFR1MoMHgwOGI0LCAweDA4YjAsIDB4MDhhYywgMHgwMWQ3LCAweDAxZDcsIDB4MDFkOCksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU1NzAsCisJUkFESU9SRUdTMygweDM0LCAweDAxLCAweDAxLCAweDAyLCAweDJkLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA0LCAweDA0LCAweDA0LCAweDhkLCAweDBiLCAweDAwLAorCQkgICAweDg0LCAweDJhLCAweDAwLCAweDAzLCAweDAwLCAweDdmLCAweDAwLCAweDA3LAorCQkgICAweDAwLCAweGY4LCAweDAwLCAweDJhLCAweDAwLCAweDAzLCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDA3LCAweDAwLCAweGY4LCAweDAwKSwKKwlQSFlSRUdTKDB4MDhiOCwgMHgwOGI0LCAweDA4YjAsIDB4MDFkNiwgMHgwMWQ3LCAweDAxZDcpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NTgwLAorCVJBRElPUkVHUzMoMHgyZSwgMHgwMSwgMHgwMSwgMHgwMiwgMHgyZSwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNCwgMHgwNCwgMHgwNCwgMHg4ZCwgMHgwYiwgMHgwMCwKKwkJICAgMHg4NCwgMHgxYSwgMHgwMCwgMHgwMywgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwNywKKwkJICAgMHgwMCwgMHhmOCwgMHgwMCwgMHgxYSwgMHgwMCwgMHgwMywgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwNywgMHgwMCwgMHhmOCwgMHgwMCksCisJUEhZUkVHUygweDA4YmMsIDB4MDhiOCwgMHgwOGI0LCAweDAxZDUsIDB4MDFkNiwgMHgwMWQ3KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTU5MCwKKwlSQURJT1JFR1MzKDB4MmUsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MmYsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDQsIDB4MDQsIDB4MDQsIDB4OGQsIDB4MGIsIDB4MDAsCisJCSAgIDB4ODQsIDB4MWEsIDB4MDAsIDB4MDMsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MDcsCisJCSAgIDB4MDAsIDB4ZjgsIDB4MDAsIDB4MWEsIDB4MDAsIDB4MDMsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MDcsIDB4MDAsIDB4ZjgsIDB4MDApLAorCVBIWVJFR1MoMHgwOGMwLCAweDA4YmMsIDB4MDhiOCwgMHgwMWQ0LCAweDAxZDUsIDB4MDFkNiksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU2MDAsCisJUkFESU9SRUdTMygweDI4LCAweDAxLCAweDAxLCAweDAyLCAweDMwLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA1LCAweDA1LCAweDA1LCAweDhiLCAweDA5LCAweDAwLAorCQkgICAweDcwLCAweDFhLCAweDAwLCAweDAzLCAweDAwLCAweDdmLCAweDAwLCAweDA3LAorCQkgICAweDAwLCAweGY4LCAweDAwLCAweDFhLCAweDAwLCAweDAzLCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDA3LCAweDAwLCAweGY4LCAweDAwKSwKKwlQSFlSRUdTKDB4MDhjNCwgMHgwOGMwLCAweDA4YmMsIDB4MDFkMywgMHgwMWQ0LCAweDAxZDUpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NjEwLAorCVJBRElPUkVHUzMoMHgyOCwgMHgwMSwgMHgwMSwgMHgwMiwgMHgzMSwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNSwgMHgwNSwgMHgwNSwgMHg4YiwgMHgwOSwgMHgwMCwKKwkJICAgMHg3MCwgMHgxOSwgMHgwMCwgMHgwMywgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwNywKKwkJICAgMHgwMCwgMHhmOCwgMHgwMCwgMHgxOSwgMHgwMCwgMHgwMywgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwNywgMHgwMCwgMHhmOCwgMHgwMCksCisJUEhZUkVHUygweDA4YzgsIDB4MDhjNCwgMHgwOGMwLCAweDAxZDIsIDB4MDFkMywgMHgwMWQ0KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTYyMCwKKwlSQURJT1JFR1MzKDB4MjEsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MzIsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDUsIDB4OGIsIDB4MDksIDB4MDAsCisJCSAgIDB4NzAsIDB4MTksIDB4MDAsIDB4MDMsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MDcsCisJCSAgIDB4MDAsIDB4ZjgsIDB4MDAsIDB4MTksIDB4MDAsIDB4MDMsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MDcsIDB4MDAsIDB4ZjgsIDB4MDApLAorCVBIWVJFR1MoMHgwOGNjLCAweDA4YzgsIDB4MDhjNCwgMHgwMWQyLCAweDAxZDIsIDB4MDFkMyksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU2MzAsCisJUkFESU9SRUdTMygweDIxLCAweDAxLCAweDAxLCAweDAyLCAweDMzLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA1LCAweDA1LCAweDA1LCAweDhiLCAweDA5LCAweDAwLAorCQkgICAweDcwLCAweDA5LCAweDAwLCAweDAzLCAweDAwLCAweDdmLCAweDAwLCAweDA3LAorCQkgICAweDAwLCAweGY4LCAweDAwLCAweDA5LCAweDAwLCAweDAzLCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDA3LCAweDAwLCAweGY4LCAweDAwKSwKKwlQSFlSRUdTKDB4MDhkMCwgMHgwOGNjLCAweDA4YzgsIDB4MDFkMSwgMHgwMWQyLCAweDAxZDIpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NjQwLAorCVJBRElPUkVHUzMoMHgxYywgMHgwMSwgMHgwMSwgMHgwMiwgMHgzNCwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNSwgMHgwNSwgMHgwNSwgMHg4YiwgMHgwOSwgMHgwMCwKKwkJICAgMHg3MCwgMHgwOSwgMHgwMCwgMHgwMywgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwNywKKwkJICAgMHgwMCwgMHhmOCwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMywgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwNywgMHgwMCwgMHhmOCwgMHgwMCksCisJUEhZUkVHUygweDA4ZDQsIDB4MDhkMCwgMHgwOGNjLCAweDAxZDAsIDB4MDFkMSwgMHgwMWQyKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTY1MCwKKwlSQURJT1JFR1MzKDB4MWMsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MzUsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDUsIDB4OGIsIDB4MDksIDB4MDAsCisJCSAgIDB4NzAsIDB4MDgsIDB4MDAsIDB4MDMsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MDcsCisJCSAgIDB4MDAsIDB4ZjgsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDMsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MDcsIDB4MDAsIDB4ZjgsIDB4MDApLAorCVBIWVJFR1MoMHgwOGQ4LCAweDA4ZDQsIDB4MDhkMCwgMHgwMWNmLCAweDAxZDAsIDB4MDFkMSksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU2NjAsCisJUkFESU9SRUdTMygweDE2LCAweDAxLCAweDAxLCAweDAyLCAweDM2LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA1LCAweDA1LCAweDA1LCAweDhiLCAweDA5LCAweDAwLAorCQkgICAweDcwLCAweDA4LCAweDAwLCAweDAzLCAweDAwLCAweDdmLCAweDAwLCAweDA3LAorCQkgICAweDAwLCAweGY2LCAweDAwLCAweDA4LCAweDAwLCAweDAzLCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDA3LCAweDAwLCAweGY2LCAweDAwKSwKKwlQSFlSRUdTKDB4MDhkYywgMHgwOGQ4LCAweDA4ZDQsIDB4MDFjZSwgMHgwMWNmLCAweDAxZDApLAorICB9LAorICB7CS5mcmVxCQkJPSA1NjcwLAorCVJBRElPUkVHUzMoMHgxNiwgMHgwMSwgMHgwMSwgMHgwMiwgMHgzNywgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNSwgMHgwNSwgMHgwNSwgMHg4YiwgMHgwOSwgMHgwMCwKKwkJICAgMHg3MCwgMHgwOCwgMHgwMCwgMHgwMywgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwNywKKwkJICAgMHgwMCwgMHhmNiwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMywgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwNywgMHgwMCwgMHhmNiwgMHgwMCksCisJUEhZUkVHUygweDA4ZTAsIDB4MDhkYywgMHgwOGQ4LCAweDAxY2UsIDB4MDFjZSwgMHgwMWNmKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTY4MCwKKwlSQURJT1JFR1MzKDB4MTAsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MzgsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDUsIDB4OGIsIDB4MDksIDB4MDAsCisJCSAgIDB4NzAsIDB4MDgsIDB4MDAsIDB4MDMsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MDcsCisJCSAgIDB4MDAsIDB4ZjYsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDMsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MDcsIDB4MDAsIDB4ZjYsIDB4MDApLAorCVBIWVJFR1MoMHgwOGU0LCAweDA4ZTAsIDB4MDhkYywgMHgwMWNkLCAweDAxY2UsIDB4MDFjZSksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU2OTAsCisJUkFESU9SRUdTMygweDEwLCAweDAxLCAweDAxLCAweDAyLCAweDM5LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA1LCAweDA1LCAweDA1LCAweDhiLCAweDA5LCAweDAwLAorCQkgICAweDcwLCAweDA3LCAweDAwLCAweDAzLCAweDAwLCAweDdmLCAweDAwLCAweDA3LAorCQkgICAweDAwLCAweGY2LCAweDAwLCAweDA3LCAweDAwLCAweDAzLCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDA3LCAweDAwLCAweGY2LCAweDAwKSwKKwlQSFlSRUdTKDB4MDhlOCwgMHgwOGU0LCAweDA4ZTAsIDB4MDFjYywgMHgwMWNkLCAweDAxY2UpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NzAwLAorCVJBRElPUkVHUzMoMHgwYSwgMHgwMSwgMHgwMSwgMHgwMiwgMHgzYSwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNSwgMHgwNSwgMHgwNSwgMHg4YSwgMHgwNiwgMHgwMCwKKwkJICAgMHg0MCwgMHgwNywgMHgwMCwgMHgwMiwgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwNiwKKwkJICAgMHgwMCwgMHhmNiwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMiwgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwNiwgMHgwMCwgMHhmNiwgMHgwMCksCisJUEhZUkVHUygweDA4ZWMsIDB4MDhlOCwgMHgwOGU0LCAweDAxY2IsIDB4MDFjYywgMHgwMWNkKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTcxMCwKKwlSQURJT1JFR1MzKDB4MGEsIDB4MDEsIDB4MDEsIDB4MDIsIDB4M2IsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDUsIDB4OGEsIDB4MDYsIDB4MDAsCisJCSAgIDB4NDAsIDB4MDcsIDB4MDAsIDB4MDIsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MDYsCisJCSAgIDB4MDAsIDB4ZjQsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDIsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MDYsIDB4MDAsIDB4ZjQsIDB4MDApLAorCVBIWVJFR1MoMHgwOGYwLCAweDA4ZWMsIDB4MDhlOCwgMHgwMWNhLCAweDAxY2IsIDB4MDFjYyksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU3MjAsCisJUkFESU9SRUdTMygweDBhLCAweDAxLCAweDAxLCAweDAyLCAweDNjLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA1LCAweDA1LCAweDA1LCAweDhhLCAweDA2LCAweDAwLAorCQkgICAweDQwLCAweDA3LCAweDAwLCAweDAyLCAweDAwLCAweDdmLCAweDAwLCAweDA2LAorCQkgICAweDAwLCAweGY0LCAweDAwLCAweDA3LCAweDAwLCAweDAyLCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDA2LCAweDAwLCAweGY0LCAweDAwKSwKKwlQSFlSRUdTKDB4MDhmNCwgMHgwOGYwLCAweDA4ZWMsIDB4MDFjOSwgMHgwMWNhLCAweDAxY2IpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NzI1LAorCVJBRElPUkVHUzMoMHgwMywgMHgwMSwgMHgwMiwgMHgwNCwgMHg3OSwgMHgwNywgMHgwNywgMHgwNCwKKwkJICAgMHgxMCwgMHgwMSwgMHgwNSwgMHgwNSwgMHgwNSwgMHg4YSwgMHgwNiwgMHgwMCwKKwkJICAgMHg0MCwgMHgwNiwgMHgwMCwgMHgwMiwgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwNiwKKwkJICAgMHgwMCwgMHhmNCwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMiwgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwNiwgMHgwMCwgMHhmNCwgMHgwMCksCisJUEhZUkVHUygweDA4ZjYsIDB4MDhmMiwgMHgwOGVlLCAweDAxYzksIDB4MDFjYSwgMHgwMWNiKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTczMCwKKwlSQURJT1JFR1MzKDB4MGEsIDB4MDEsIDB4MDEsIDB4MDIsIDB4M2QsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDUsIDB4OGEsIDB4MDYsIDB4MDAsCisJCSAgIDB4NDAsIDB4MDYsIDB4MDAsIDB4MDIsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MDYsCisJCSAgIDB4MDAsIDB4ZjQsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDIsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MDYsIDB4MDAsIDB4ZjQsIDB4MDApLAorCVBIWVJFR1MoMHgwOGY4LCAweDA4ZjQsIDB4MDhmMCwgMHgwMWM5LCAweDAxYzksIDB4MDFjYSksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU3MzUsCisJUkFESU9SRUdTMygweDAzLCAweDAxLCAweDAyLCAweDA0LCAweDdiLCAweDA3LCAweDA3LCAweDA0LAorCQkgICAweDEwLCAweDAxLCAweDA1LCAweDA1LCAweDA1LCAweDhhLCAweDA2LCAweDAwLAorCQkgICAweDQwLCAweDA2LCAweDAwLCAweDAyLCAweDAwLCAweDdmLCAweDAwLCAweDA2LAorCQkgICAweDAwLCAweGY0LCAweDAwLCAweDA2LCAweDAwLCAweDAyLCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDA2LCAweDAwLCAweGY0LCAweDAwKSwKKwlQSFlSRUdTKDB4MDhmYSwgMHgwOGY2LCAweDA4ZjIsIDB4MDFjOCwgMHgwMWM5LCAweDAxY2EpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NzQwLAorCVJBRElPUkVHUzMoMHgwYSwgMHgwMSwgMHgwMSwgMHgwMiwgMHgzZSwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNSwgMHgwNSwgMHgwNSwgMHg4YSwgMHgwNiwgMHgwMCwKKwkJICAgMHg0MCwgMHgwNiwgMHgwMCwgMHgwMiwgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwNiwKKwkJICAgMHgwMCwgMHhmNCwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMiwgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwNiwgMHgwMCwgMHhmNCwgMHgwMCksCisJUEhZUkVHUygweDA4ZmMsIDB4MDhmOCwgMHgwOGY0LCAweDAxYzgsIDB4MDFjOSwgMHgwMWM5KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTc0NSwKKwlSQURJT1JFR1MzKDB4ZmUsIDB4MDAsIDB4MDIsIDB4MDQsIDB4N2QsIDB4MDcsIDB4MDcsIDB4MDQsCisJCSAgIDB4MTAsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDUsIDB4OGEsIDB4MDYsIDB4MDAsCisJCSAgIDB4NDAsIDB4MDYsIDB4MDAsIDB4MDIsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MDYsCisJCSAgIDB4MDAsIDB4ZjQsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDIsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MDYsIDB4MDAsIDB4ZjQsIDB4MDApLAorCVBIWVJFR1MoMHgwOGZlLCAweDA4ZmEsIDB4MDhmNiwgMHgwMWM4LCAweDAxYzgsIDB4MDFjOSksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU3NTAsCisJUkFESU9SRUdTMygweDBhLCAweDAxLCAweDAxLCAweDAyLCAweDNmLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA1LCAweDA1LCAweDA1LCAweDhhLCAweDA2LCAweDAwLAorCQkgICAweDQwLCAweDA2LCAweDAwLCAweDAyLCAweDAwLCAweDdmLCAweDAwLCAweDA2LAorCQkgICAweDAwLCAweGY0LCAweDAwLCAweDA2LCAweDAwLCAweDAyLCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDA2LCAweDAwLCAweGY0LCAweDAwKSwKKwlQSFlSRUdTKDB4MDkwMCwgMHgwOGZjLCAweDA4ZjgsIDB4MDFjNywgMHgwMWM4LCAweDAxYzkpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NzU1LAorCVJBRElPUkVHUzMoMHhmZSwgMHgwMCwgMHgwMiwgMHgwNCwgMHg3ZiwgMHgwNywgMHgwNywgMHgwNCwKKwkJICAgMHgxMCwgMHgwMSwgMHgwNSwgMHgwNSwgMHgwNSwgMHg4YSwgMHgwNiwgMHgwMCwKKwkJICAgMHg0MCwgMHgwNSwgMHgwMCwgMHgwMiwgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwNiwKKwkJICAgMHgwMCwgMHhmNCwgMHgwMCwgMHgwNSwgMHgwMCwgMHgwMiwgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwNiwgMHgwMCwgMHhmNCwgMHgwMCksCisJUEhZUkVHUygweDA5MDIsIDB4MDhmZSwgMHgwOGZhLCAweDAxYzcsIDB4MDFjOCwgMHgwMWM4KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTc2MCwKKwlSQURJT1JFR1MzKDB4MGEsIDB4MDEsIDB4MDEsIDB4MDIsIDB4NDAsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDUsIDB4OGEsIDB4MDYsIDB4MDAsCisJCSAgIDB4NDAsIDB4MDUsIDB4MDAsIDB4MDIsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MDYsCisJCSAgIDB4MDAsIDB4ZjQsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MDIsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MDYsIDB4MDAsIDB4ZjQsIDB4MDApLAorCVBIWVJFR1MoMHgwOTA0LCAweDA5MDAsIDB4MDhmYywgMHgwMWM2LCAweDAxYzcsIDB4MDFjOCksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU3NjUsCisJUkFESU9SRUdTMygweGY4LCAweDAwLCAweDAyLCAweDA0LCAweDgxLCAweDA3LCAweDA3LCAweDA0LAorCQkgICAweDEwLCAweDAxLCAweDA1LCAweDA1LCAweDA1LCAweDhhLCAweDA2LCAweDAwLAorCQkgICAweDQwLCAweDA1LCAweDAwLCAweDAyLCAweDAwLCAweDdmLCAweDAwLCAweDA2LAorCQkgICAweDAwLCAweGY0LCAweDAwLCAweDA1LCAweDAwLCAweDAyLCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDA2LCAweDAwLCAweGY0LCAweDAwKSwKKwlQSFlSRUdTKDB4MDkwNiwgMHgwOTAyLCAweDA4ZmUsIDB4MDFjNiwgMHgwMWM3LCAweDAxYzgpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NzcwLAorCVJBRElPUkVHUzMoMHgwYSwgMHgwMSwgMHgwMSwgMHgwMiwgMHg0MSwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNSwgMHgwNSwgMHgwNSwgMHg4YSwgMHgwNiwgMHgwMCwKKwkJICAgMHg0MCwgMHgwNSwgMHgwMCwgMHgwMiwgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwNiwKKwkJICAgMHgwMCwgMHhmNCwgMHgwMCwgMHgwNSwgMHgwMCwgMHgwMiwgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwNiwgMHgwMCwgMHhmNCwgMHgwMCksCisJUEhZUkVHUygweDA5MDgsIDB4MDkwNCwgMHgwOTAwLCAweDAxYzYsIDB4MDFjNiwgMHgwMWM3KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTc3NSwKKwlSQURJT1JFR1MzKDB4ZjgsIDB4MDAsIDB4MDIsIDB4MDQsIDB4ODMsIDB4MDcsIDB4MDcsIDB4MDQsCisJCSAgIDB4MTAsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDUsIDB4OGEsIDB4MDYsIDB4MDAsCisJCSAgIDB4NDAsIDB4MDUsIDB4MDAsIDB4MDIsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MDYsCisJCSAgIDB4MDAsIDB4ZjQsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MDIsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MDYsIDB4MDAsIDB4ZjQsIDB4MDApLAorCVBIWVJFR1MoMHgwOTBhLCAweDA5MDYsIDB4MDkwMiwgMHgwMWM1LCAweDAxYzYsIDB4MDFjNyksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU3ODAsCisJUkFESU9SRUdTMygweDBhLCAweDAxLCAweDAxLCAweDAyLCAweDQyLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA1LCAweDA1LCAweDA1LCAweDhhLCAweDA2LCAweDAwLAorCQkgICAweDQwLCAweDA1LCAweDAwLCAweDAyLCAweDAwLCAweDdmLCAweDAwLCAweDA2LAorCQkgICAweDAwLCAweGY0LCAweDAwLCAweDA1LCAweDAwLCAweDAyLCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDA2LCAweDAwLCAweGY0LCAweDAwKSwKKwlQSFlSRUdTKDB4MDkwYywgMHgwOTA4LCAweDA5MDQsIDB4MDFjNSwgMHgwMWM2LCAweDAxYzYpLAorICB9LAorICB7CS5mcmVxCQkJPSA1Nzg1LAorCVJBRElPUkVHUzMoMHhmMiwgMHgwMCwgMHgwMiwgMHgwNCwgMHg4NSwgMHgwNywgMHgwNywgMHgwNCwKKwkJICAgMHgxMCwgMHgwMSwgMHgwNiwgMHgwNiwgMHgwNiwgMHg4YSwgMHgwNiwgMHgwMCwKKwkJICAgMHg0MCwgMHgwNCwgMHgwMCwgMHgwMiwgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwNiwKKwkJICAgMHgwMCwgMHhmNCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMiwgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwNiwgMHgwMCwgMHhmNCwgMHgwMCksCisJUEhZUkVHUygweDA5MGUsIDB4MDkwYSwgMHgwOTA2LCAweDAxYzQsIDB4MDFjNSwgMHgwMWM2KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTc5MCwKKwlSQURJT1JFR1MzKDB4MGEsIDB4MDEsIDB4MDEsIDB4MDIsIDB4NDMsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDYsIDB4MDYsIDB4MDYsIDB4OGEsIDB4MDYsIDB4MDAsCisJCSAgIDB4NDAsIDB4MDQsIDB4MDAsIDB4MDIsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MDYsCisJCSAgIDB4MDAsIDB4ZjQsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDIsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MDYsIDB4MDAsIDB4ZjQsIDB4MDApLAorCVBIWVJFR1MoMHgwOTEwLCAweDA5MGMsIDB4MDkwOCwgMHgwMWM0LCAweDAxYzUsIDB4MDFjNiksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU3OTUsCisJUkFESU9SRUdTMygweGYyLCAweDAwLCAweDAyLCAweDA0LCAweDg3LCAweDA3LCAweDA3LCAweDA0LAorCQkgICAweDEwLCAweDAxLCAweDA2LCAweDA2LCAweDA2LCAweDhhLCAweDA2LCAweDAwLAorCQkgICAweDQwLCAweDA0LCAweDAwLCAweDAyLCAweDAwLCAweDdmLCAweDAwLCAweDA2LAorCQkgICAweDAwLCAweGY0LCAweDAwLCAweDA0LCAweDAwLCAweDAyLCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDA2LCAweDAwLCAweGY0LCAweDAwKSwKKwlQSFlSRUdTKDB4MDkxMiwgMHgwOTBlLCAweDA5MGEsIDB4MDFjNCwgMHgwMWM0LCAweDAxYzUpLAorICB9LAorICB7CS5mcmVxCQkJPSA1ODAwLAorCVJBRElPUkVHUzMoMHgwYSwgMHgwMSwgMHgwMSwgMHgwMiwgMHg0NCwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNiwgMHgwNiwgMHgwNiwgMHg4OCwgMHgwNCwgMHgwMCwKKwkJICAgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwNiwKKwkJICAgMHgwMCwgMHhmNCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwNiwgMHgwMCwgMHhmNCwgMHgwMCksCisJUEhZUkVHUygweDA5MTQsIDB4MDkxMCwgMHgwOTBjLCAweDAxYzMsIDB4MDFjNCwgMHgwMWM1KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTgwNSwKKwlSQURJT1JFR1MzKDB4ZWQsIDB4MDAsIDB4MDIsIDB4MDQsIDB4ODksIDB4MDcsIDB4MDcsIDB4MDQsCisJCSAgIDB4MTAsIDB4MDEsIDB4MDYsIDB4MDYsIDB4MDYsIDB4ODgsIDB4MDQsIDB4MDAsCisJCSAgIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MDYsCisJCSAgIDB4MDAsIDB4ZjQsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MDYsIDB4MDAsIDB4ZjQsIDB4MDApLAorCVBIWVJFR1MoMHgwOTE2LCAweDA5MTIsIDB4MDkwZSwgMHgwMWMzLCAweDAxYzQsIDB4MDFjNCksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU4MTAsCisJUkFESU9SRUdTMygweDBhLCAweDAxLCAweDAxLCAweDAyLCAweDQ1LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA2LCAweDA2LCAweDA2LCAweDg4LCAweDA0LCAweDAwLAorCQkgICAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDdmLCAweDAwLCAweDA2LAorCQkgICAweDAwLCAweGY0LCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDA2LCAweDAwLCAweGY0LCAweDAwKSwKKwlQSFlSRUdTKDB4MDkxOCwgMHgwOTE0LCAweDA5MTAsIDB4MDFjMiwgMHgwMWMzLCAweDAxYzQpLAorICB9LAorICB7CS5mcmVxCQkJPSA1ODE1LAorCVJBRElPUkVHUzMoMHhlZCwgMHgwMCwgMHgwMiwgMHgwNCwgMHg4YiwgMHgwNywgMHgwNywgMHgwNCwKKwkJICAgMHgxMCwgMHgwMSwgMHgwNiwgMHgwNiwgMHgwNiwgMHg4OCwgMHgwNCwgMHgwMCwKKwkJICAgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwNiwKKwkJICAgMHgwMCwgMHhmNCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwNiwgMHgwMCwgMHhmNCwgMHgwMCksCisJUEhZUkVHUygweDA5MWEsIDB4MDkxNiwgMHgwOTEyLCAweDAxYzIsIDB4MDFjMywgMHgwMWM0KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTgyMCwKKwlSQURJT1JFR1MzKDB4MGEsIDB4MDEsIDB4MDEsIDB4MDIsIDB4NDYsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDYsIDB4MDYsIDB4MDYsIDB4ODgsIDB4MDQsIDB4MDAsCisJCSAgIDB4MjAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MDYsCisJCSAgIDB4MDAsIDB4ZjQsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MDYsIDB4MDAsIDB4ZjQsIDB4MDApLAorCVBIWVJFR1MoMHgwOTFjLCAweDA5MTgsIDB4MDkxNCwgMHgwMWMyLCAweDAxYzIsIDB4MDFjMyksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU4MjUsCisJUkFESU9SRUdTMygweGVkLCAweDAwLCAweDAyLCAweDA0LCAweDhkLCAweDA3LCAweDA3LCAweDA0LAorCQkgICAweDEwLCAweDAxLCAweDA2LCAweDA2LCAweDA2LCAweDg4LCAweDA0LCAweDAwLAorCQkgICAweDIwLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDdmLCAweDAwLCAweDA2LAorCQkgICAweDAwLCAweGY0LCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDA2LCAweDAwLCAweGY0LCAweDAwKSwKKwlQSFlSRUdTKDB4MDkxZSwgMHgwOTFhLCAweDA5MTYsIDB4MDFjMSwgMHgwMWMyLCAweDAxYzMpLAorICB9LAorICB7CS5mcmVxCQkJPSA1ODMwLAorCVJBRElPUkVHUzMoMHgwYSwgMHgwMSwgMHgwMSwgMHgwMiwgMHg0NywgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNiwgMHgwNiwgMHgwNiwgMHg4OCwgMHgwNCwgMHgwMCwKKwkJICAgMHgyMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwNiwKKwkJICAgMHgwMCwgMHhmNCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwNiwgMHgwMCwgMHhmNCwgMHgwMCksCisJUEhZUkVHUygweDA5MjAsIDB4MDkxYywgMHgwOTE4LCAweDAxYzEsIDB4MDFjMiwgMHgwMWMyKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTg0MCwKKwlSQURJT1JFR1MzKDB4MGEsIDB4MDEsIDB4MDEsIDB4MDIsIDB4NDgsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDYsIDB4MDYsIDB4MDYsIDB4ODgsIDB4MDQsIDB4MDAsCisJCSAgIDB4MjAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MDYsCisJCSAgIDB4MDAsIDB4ZjQsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MDYsIDB4MDAsIDB4ZjQsIDB4MDApLAorCVBIWVJFR1MoMHgwOTI0LCAweDA5MjAsIDB4MDkxYywgMHgwMWMwLCAweDAxYzEsIDB4MDFjMiksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU4NTAsCisJUkFESU9SRUdTMygweGUwLCAweDAwLCAweDAxLCAweDAyLCAweDQ5LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA2LCAweDA2LCAweDA2LCAweDg4LCAweDA0LCAweDAwLAorCQkgICAweDIwLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDdmLCAweDAwLCAweDA2LAorCQkgICAweDAwLCAweGY0LCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDA2LCAweDAwLCAweGY0LCAweDAwKSwKKwlQSFlSRUdTKDB4MDkyOCwgMHgwOTI0LCAweDA5MjAsIDB4MDFiZiwgMHgwMWMwLCAweDAxYzEpLAorICB9LAorICB7CS5mcmVxCQkJPSA1ODYwLAorCVJBRElPUkVHUzMoMHhkZSwgMHgwMCwgMHgwMSwgMHgwMiwgMHg0YSwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNiwgMHgwNiwgMHgwNiwgMHg4OCwgMHgwNCwgMHgwMCwKKwkJICAgMHgyMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwNiwKKwkJICAgMHgwMCwgMHhmMiwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwNiwgMHgwMCwgMHhmMiwgMHgwMCksCisJUEhZUkVHUygweDA5MmMsIDB4MDkyOCwgMHgwOTI0LCAweDAxYmYsIDB4MDFiZiwgMHgwMWMwKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTg3MCwKKwlSQURJT1JFR1MzKDB4ZGIsIDB4MDAsIDB4MDEsIDB4MDIsIDB4NGIsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDYsIDB4MDYsIDB4MDYsIDB4ODgsIDB4MDQsIDB4MDAsCisJCSAgIDB4MjAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MDYsCisJCSAgIDB4MDAsIDB4ZjIsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MDYsIDB4MDAsIDB4ZjIsIDB4MDApLAorCVBIWVJFR1MoMHgwOTMwLCAweDA5MmMsIDB4MDkyOCwgMHgwMWJlLCAweDAxYmYsIDB4MDFiZiksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU4ODAsCisJUkFESU9SRUdTMygweGQ4LCAweDAwLCAweDAxLCAweDAyLCAweDRjLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA2LCAweDA2LCAweDA2LCAweDg4LCAweDA0LCAweDAwLAorCQkgICAweDIwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDdmLCAweDAwLCAweDA2LAorCQkgICAweDAwLCAweGYyLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDA2LCAweDAwLCAweGYyLCAweDAwKSwKKwlQSFlSRUdTKDB4MDkzNCwgMHgwOTMwLCAweDA5MmMsIDB4MDFiZCwgMHgwMWJlLCAweDAxYmYpLAorICB9LAorICB7CS5mcmVxCQkJPSA1ODkwLAorCVJBRElPUkVHUzMoMHhkNiwgMHgwMCwgMHgwMSwgMHgwMiwgMHg0ZCwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNiwgMHgwNiwgMHgwNiwgMHg4OCwgMHgwNCwgMHgwMCwKKwkJICAgMHgyMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwNiwKKwkJICAgMHgwMCwgMHhmMiwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwNiwgMHgwMCwgMHhmMiwgMHgwMCksCisJUEhZUkVHUygweDA5MzgsIDB4MDkzNCwgMHgwOTMwLCAweDAxYmMsIDB4MDFiZCwgMHgwMWJlKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTkwMCwKKwlSQURJT1JFR1MzKDB4ZDMsIDB4MDAsIDB4MDEsIDB4MDIsIDB4NGUsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDYsIDB4MDYsIDB4MDYsIDB4ODcsIDB4MDMsIDB4MDAsCisJCSAgIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MDUsCisJCSAgIDB4MDAsIDB4ZjIsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MDUsIDB4MDAsIDB4ZjIsIDB4MDApLAorCVBIWVJFR1MoMHgwOTNjLCAweDA5MzgsIDB4MDkzNCwgMHgwMWJjLCAweDAxYmMsIDB4MDFiZCksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU5MTAsCisJUkFESU9SRUdTMygweGQ2LCAweDAwLCAweDAxLCAweDAyLCAweDRmLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA2LCAweDA2LCAweDA2LCAweDg3LCAweDAzLCAweDAwLAorCQkgICAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDdmLCAweDAwLCAweDA1LAorCQkgICAweDAwLCAweGYyLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDA1LCAweDAwLCAweGYyLCAweDAwKSwKKwlQSFlSRUdTKDB4MDk0MCwgMHgwOTNjLCAweDA5MzgsIDB4MDFiYiwgMHgwMWJjLCAweDAxYmMpLAorICB9LAorICB7CS5mcmVxCQkJPSAyNDEyLAorCVJBRElPUkVHUzMoMHgwMCwgMHgwMSwgMHgwMywgMHgwOSwgMHg2YywgMHgwOCwgMHgwOCwgMHgwNCwKKwkJICAgMHgxNiwgMHgwMSwgMHgwNCwgMHgwNCwgMHgwNCwgMHg4ZiwgMHgzMCwgMHgwMCwKKwkJICAgMHgwMCwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwNSwgMHgwMCwgMHg3MCwgMHgwMCwKKwkJICAgMHgwZiwgMHgwMCwgMHgwZiwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwNSwgMHgwMCwKKwkJICAgMHg3MCwgMHgwMCwgMHgwZiwgMHgwMCwgMHgwZiksCisJUEhZUkVHUygweDAzYzksIDB4MDNjNSwgMHgwM2MxLCAweDA0M2EsIDB4MDQzZiwgMHgwNDQzKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gMjQxNywKKwlSQURJT1JFR1MzKDB4MDAsIDB4MDEsIDB4MDMsIDB4MDksIDB4NzEsIDB4MDgsIDB4MDgsIDB4MDQsCisJCSAgIDB4MTYsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDUsIDB4OGYsIDB4MzAsIDB4MDAsCisJCSAgIDB4MDAsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDUsIDB4MDAsIDB4NzAsIDB4MDAsCisJCSAgIDB4MGYsIDB4MDAsIDB4MGYsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDUsIDB4MDAsCisJCSAgIDB4NzAsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MGYpLAorCVBIWVJFR1MoMHgwM2NiLCAweDAzYzcsIDB4MDNjMywgMHgwNDM4LCAweDA0M2QsIDB4MDQ0MSksCisgIH0sCisgIHsJLmZyZXEJCQk9IDI0MjIsCisJUkFESU9SRUdTMygweDAwLCAweDAxLCAweDAzLCAweDA5LCAweDc2LCAweDA4LCAweDA4LCAweDA0LAorCQkgICAweDE2LCAweDAxLCAweDA1LCAweDA1LCAweDA1LCAweDhmLCAweDMwLCAweDAwLAorCQkgICAweDAwLCAweDAwLCAweGZmLCAweDAwLCAweDA1LCAweDAwLCAweDcwLCAweDAwLAorCQkgICAweDBmLCAweDAwLCAweDBmLCAweDAwLCAweGZmLCAweDAwLCAweDA1LCAweDAwLAorCQkgICAweDcwLCAweDAwLCAweDBmLCAweDAwLCAweDBmKSwKKwlQSFlSRUdTKDB4MDNjZCwgMHgwM2M5LCAweDAzYzUsIDB4MDQzNiwgMHgwNDNhLCAweDA0M2YpLAorICB9LAorICB7CS5mcmVxCQkJPSAyNDI3LAorCVJBRElPUkVHUzMoMHgwMCwgMHgwMSwgMHgwMywgMHgwOSwgMHg3YiwgMHgwOCwgMHgwOCwgMHgwNCwKKwkJICAgMHgxNiwgMHgwMSwgMHgwNSwgMHgwNSwgMHgwNSwgMHg4ZiwgMHgzMCwgMHgwMCwKKwkJICAgMHgwMCwgMHgwMCwgMHhmZCwgMHgwMCwgMHgwNSwgMHgwMCwgMHg3MCwgMHgwMCwKKwkJICAgMHgwZiwgMHgwMCwgMHgwZiwgMHgwMCwgMHhmZCwgMHgwMCwgMHgwNSwgMHgwMCwKKwkJICAgMHg3MCwgMHgwMCwgMHgwZiwgMHgwMCwgMHgwZiksCisJUEhZUkVHUygweDAzY2YsIDB4MDNjYiwgMHgwM2M3LCAweDA0MzQsIDB4MDQzOCwgMHgwNDNkKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gMjQzMiwKKwlSQURJT1JFR1MzKDB4MDAsIDB4MDEsIDB4MDMsIDB4MDksIDB4ODAsIDB4MDgsIDB4MDgsIDB4MDQsCisJCSAgIDB4MTYsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDUsIDB4OGYsIDB4MzAsIDB4MDAsCisJCSAgIDB4MDAsIDB4MDAsIDB4ZmIsIDB4MDAsIDB4MDUsIDB4MDAsIDB4NzAsIDB4MDAsCisJCSAgIDB4MGYsIDB4MDAsIDB4MGYsIDB4MDAsIDB4ZmIsIDB4MDAsIDB4MDUsIDB4MDAsCisJCSAgIDB4NzAsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MGYpLAorCVBIWVJFR1MoMHgwM2QxLCAweDAzY2QsIDB4MDNjOSwgMHgwNDMxLCAweDA0MzYsIDB4MDQzYSksCisgIH0sCisgIHsJLmZyZXEJCQk9IDI0MzcsCisJUkFESU9SRUdTMygweDAwLCAweDAxLCAweDAzLCAweDA5LCAweDg1LCAweDA4LCAweDA4LCAweDA0LAorCQkgICAweDE2LCAweDAxLCAweDA1LCAweDA1LCAweDA1LCAweDhmLCAweDMwLCAweDAwLAorCQkgICAweDAwLCAweDAwLCAweGZhLCAweDAwLCAweDA1LCAweDAwLCAweDcwLCAweDAwLAorCQkgICAweDBmLCAweDAwLCAweDBmLCAweDAwLCAweGZhLCAweDAwLCAweDA1LCAweDAwLAorCQkgICAweDcwLCAweDAwLCAweDBmLCAweDAwLCAweDBmKSwKKwlQSFlSRUdTKDB4MDNkMywgMHgwM2NmLCAweDAzY2IsIDB4MDQyZiwgMHgwNDM0LCAweDA0MzgpLAorICB9LAorICB7CS5mcmVxCQkJPSAyNDQyLAorCVJBRElPUkVHUzMoMHgwMCwgMHgwMSwgMHgwMywgMHgwOSwgMHg4YSwgMHgwOCwgMHgwOCwgMHgwNCwKKwkJICAgMHgxNiwgMHgwMSwgMHgwNSwgMHgwNSwgMHgwNSwgMHg4ZiwgMHgzMCwgMHgwMCwKKwkJICAgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMCwgMHgwNSwgMHgwMCwgMHg3MCwgMHgwMCwKKwkJICAgMHgwZiwgMHgwMCwgMHgwZiwgMHgwMCwgMHhmOCwgMHgwMCwgMHgwNSwgMHgwMCwKKwkJICAgMHg3MCwgMHgwMCwgMHgwZiwgMHgwMCwgMHgwZiksCisJUEhZUkVHUygweDAzZDUsIDB4MDNkMSwgMHgwM2NkLCAweDA0MmQsIDB4MDQzMSwgMHgwNDM2KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gMjQ0NywKKwlSQURJT1JFR1MzKDB4MDAsIDB4MDEsIDB4MDMsIDB4MDksIDB4OGYsIDB4MDgsIDB4MDgsIDB4MDQsCisJCSAgIDB4MTYsIDB4MDEsIDB4MDYsIDB4MDYsIDB4MDYsIDB4OGYsIDB4MzAsIDB4MDAsCisJCSAgIDB4MDAsIDB4MDAsIDB4ZjcsIDB4MDAsIDB4MDUsIDB4MDAsIDB4NzAsIDB4MDAsCisJCSAgIDB4MGYsIDB4MDAsIDB4MGYsIDB4MDAsIDB4ZjcsIDB4MDAsIDB4MDUsIDB4MDAsCisJCSAgIDB4NzAsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MGYpLAorCVBIWVJFR1MoMHgwM2Q3LCAweDAzZDMsIDB4MDNjZiwgMHgwNDJiLCAweDA0MmYsIDB4MDQzNCksCisgIH0sCisgIHsJLmZyZXEJCQk9IDI0NTIsCisJUkFESU9SRUdTMygweDAwLCAweDAxLCAweDAzLCAweDA5LCAweDk0LCAweDA4LCAweDA4LCAweDA0LAorCQkgICAweDE2LCAweDAxLCAweDA2LCAweDA2LCAweDA2LCAweDhmLCAweDMwLCAweDAwLAorCQkgICAweDAwLCAweDAwLCAweGY2LCAweDAwLCAweDA1LCAweDAwLCAweDcwLCAweDAwLAorCQkgICAweDBmLCAweDAwLCAweDBmLCAweDAwLCAweGY2LCAweDAwLCAweDA1LCAweDAwLAorCQkgICAweDcwLCAweDAwLCAweDBmLCAweDAwLCAweDBmKSwKKwlQSFlSRUdTKDB4MDNkOSwgMHgwM2Q1LCAweDAzZDEsIDB4MDQyOSwgMHgwNDJkLCAweDA0MzEpLAorICB9LAorICB7CS5mcmVxCQkJPSAyNDU3LAorCVJBRElPUkVHUzMoMHgwMCwgMHgwMSwgMHgwMywgMHgwOSwgMHg5OSwgMHgwOCwgMHgwOCwgMHgwNCwKKwkJICAgMHgxNiwgMHgwMSwgMHgwNiwgMHgwNiwgMHgwNiwgMHg4ZiwgMHgzMCwgMHgwMCwKKwkJICAgMHgwMCwgMHgwMCwgMHhmNSwgMHgwMCwgMHgwNSwgMHgwMCwgMHg3MCwgMHgwMCwKKwkJICAgMHgwZiwgMHgwMCwgMHgwZCwgMHgwMCwgMHhmNSwgMHgwMCwgMHgwNSwgMHgwMCwKKwkJICAgMHg3MCwgMHgwMCwgMHgwZiwgMHgwMCwgMHgwZCksCisJUEhZUkVHUygweDAzZGIsIDB4MDNkNywgMHgwM2QzLCAweDA0MjcsIDB4MDQyYiwgMHgwNDJmKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gMjQ2MiwKKwlSQURJT1JFR1MzKDB4MDAsIDB4MDEsIDB4MDMsIDB4MDksIDB4OWUsIDB4MDgsIDB4MDgsIDB4MDQsCisJCSAgIDB4MTYsIDB4MDEsIDB4MDYsIDB4MDYsIDB4MDYsIDB4OGYsIDB4MzAsIDB4MDAsCisJCSAgIDB4MDAsIDB4MDAsIDB4ZjQsIDB4MDAsIDB4MDUsIDB4MDAsIDB4NzAsIDB4MDAsCisJCSAgIDB4MGYsIDB4MDAsIDB4MGQsIDB4MDAsIDB4ZjQsIDB4MDAsIDB4MDUsIDB4MDAsCisJCSAgIDB4NzAsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MGQpLAorCVBIWVJFR1MoMHgwM2RkLCAweDAzZDksIDB4MDNkNSwgMHgwNDI0LCAweDA0MjksIDB4MDQyZCksCisgIH0sCisgIHsJLmZyZXEJCQk9IDI0NjcsCisJUkFESU9SRUdTMygweDAwLCAweDAxLCAweDAzLCAweDA5LCAweGEzLCAweDA4LCAweDA4LCAweDA0LAorCQkgICAweDE2LCAweDAxLCAweDA2LCAweDA2LCAweDA2LCAweDhmLCAweDMwLCAweDAwLAorCQkgICAweDAwLCAweDAwLCAweGYzLCAweDAwLCAweDA1LCAweDAwLCAweDcwLCAweDAwLAorCQkgICAweDBmLCAweDAwLCAweDBkLCAweDAwLCAweGYzLCAweDAwLCAweDA1LCAweDAwLAorCQkgICAweDcwLCAweDAwLCAweDBmLCAweDAwLCAweDBkKSwKKwlQSFlSRUdTKDB4MDNkZiwgMHgwM2RiLCAweDAzZDcsIDB4MDQyMiwgMHgwNDI3LCAweDA0MmIpLAorICB9LAorICB7CS5mcmVxCQkJPSAyNDcyLAorCVJBRElPUkVHUzMoMHgwMCwgMHgwMSwgMHgwMywgMHgwOSwgMHhhOCwgMHgwOCwgMHgwOCwgMHgwNCwKKwkJICAgMHgxNiwgMHgwMSwgMHgwNywgMHgwNywgMHgwNywgMHg4ZiwgMHgzMCwgMHgwMCwKKwkJICAgMHgwMCwgMHgwMCwgMHhmMiwgMHgwMCwgMHgwNSwgMHgwMCwgMHg3MCwgMHgwMCwKKwkJICAgMHgwZiwgMHgwMCwgMHgwZCwgMHgwMCwgMHhmMiwgMHgwMCwgMHgwNSwgMHgwMCwKKwkJICAgMHg3MCwgMHgwMCwgMHgwZiwgMHgwMCwgMHgwZCksCisJUEhZUkVHUygweDAzZTEsIDB4MDNkZCwgMHgwM2Q5LCAweDA0MjAsIDB4MDQyNCwgMHgwNDI5KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gMjQ4NCwKKwlSQURJT1JFR1MzKDB4ZmYsIDB4MDEsIDB4MDMsIDB4MDksIDB4YjQsIDB4MDgsIDB4MDgsIDB4MDQsCisJCSAgIDB4MTYsIDB4MDEsIDB4MDcsIDB4MDcsIDB4MDcsIDB4OGYsIDB4MzAsIDB4MDAsCisJCSAgIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4MDUsIDB4MDAsIDB4NzAsIDB4MDAsCisJCSAgIDB4MGYsIDB4MDAsIDB4MGQsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4MDUsIDB4MDAsCisJCSAgIDB4NzAsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MGQpLAorCVBIWVJFR1MoMHgwM2U2LCAweDAzZTIsIDB4MDNkZSwgMHgwNDFiLCAweDA0MWYsIDB4MDQyNCksCisgIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGI0M19ucGh5X2NoYW5uZWx0YWJfZW50cnlfcmV2MyBiNDNfbnBoeV9jaGFubmVsdGFiX3JldjRbXSA9IHsKKyAgewkuZnJlcQkJCT0gNDkyMCwKKwlSQURJT1JFR1MzKDB4ZmYsIDB4MDEsIDB4MDEsIDB4MDEsIDB4ZWMsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OGYsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MGUsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MGYsCisJCSAgIDB4MDAsIDB4ZmYsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MGUsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MGYsIDB4MDAsIDB4ZmYsIDB4MDApLAorCVBIWVJFR1MoMHgwN2I0LCAweDA3YjAsIDB4MDdhYywgMHgwMjE0LCAweDAyMTUsIDB4MDIxNiksCisgIH0sCisgIHsJLmZyZXEJCQk9IDQ5MzAsCisJUkFESU9SRUdTMygweGZmLCAweDAxLCAweDAxLCAweDAxLCAweGVkLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDhmLCAweDBmLCAweDAwLAorCQkgICAweGZmLCAweGZmLCAweDAwLCAweDBlLCAweDAwLCAweDdmLCAweDAwLCAweDBmLAorCQkgICAweDAwLCAweGZmLCAweDAwLCAweGZmLCAweDAwLCAweDBlLCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDBmLCAweDAwLCAweGZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDdiOCwgMHgwN2I0LCAweDA3YjAsIDB4MDIxMywgMHgwMjE0LCAweDAyMTUpLAorICB9LAorICB7CS5mcmVxCQkJPSA0OTQwLAorCVJBRElPUkVHUzMoMHhmZiwgMHgwMSwgMHgwMSwgMHgwMSwgMHhlZSwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4ZiwgMHgwZiwgMHgwMCwKKwkJICAgMHhmZiwgMHhmZiwgMHgwMCwgMHgwZSwgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwZiwKKwkJICAgMHgwMCwgMHhmZiwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwZSwgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwZiwgMHgwMCwgMHhmZiwgMHgwMCksCisJUEhZUkVHUygweDA3YmMsIDB4MDdiOCwgMHgwN2I0LCAweDAyMTIsIDB4MDIxMywgMHgwMjE0KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNDk1MCwKKwlSQURJT1JFR1MzKDB4ZmYsIDB4MDEsIDB4MDEsIDB4MDEsIDB4ZWYsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OGYsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MGUsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MGYsCisJCSAgIDB4MDAsIDB4ZmYsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MGUsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MGYsIDB4MDAsIDB4ZmYsIDB4MDApLAorCVBIWVJFR1MoMHgwN2MwLCAweDA3YmMsIDB4MDdiOCwgMHgwMjExLCAweDAyMTIsIDB4MDIxMyksCisgIH0sCisgIHsJLmZyZXEJCQk9IDQ5NjAsCisJUkFESU9SRUdTMygweGZmLCAweDAxLCAweDAxLCAweDAxLCAweGYwLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDhmLCAweDBmLCAweDAwLAorCQkgICAweGZmLCAweGZmLCAweDAwLCAweDBlLCAweDAwLCAweDdmLCAweDAwLCAweDBmLAorCQkgICAweDAwLCAweGZmLCAweDAwLCAweGZmLCAweDAwLCAweDBlLCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDBmLCAweDAwLCAweGZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDdjNCwgMHgwN2MwLCAweDA3YmMsIDB4MDIwZiwgMHgwMjExLCAweDAyMTIpLAorICB9LAorICB7CS5mcmVxCQkJPSA0OTcwLAorCVJBRElPUkVHUzMoMHhmZiwgMHgwMSwgMHgwMSwgMHgwMSwgMHhmMSwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHg4ZiwgMHgwZiwgMHgwMCwKKwkJICAgMHhmZiwgMHhmZiwgMHgwMCwgMHgwZSwgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwZiwKKwkJICAgMHgwMCwgMHhmZiwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwZSwgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwZiwgMHgwMCwgMHhmZiwgMHgwMCksCisJUEhZUkVHUygweDA3YzgsIDB4MDdjNCwgMHgwN2MwLCAweDAyMGUsIDB4MDIwZiwgMHgwMjExKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNDk4MCwKKwlSQURJT1JFR1MzKDB4ZmYsIDB4MDEsIDB4MDEsIDB4MDEsIDB4ZjIsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4OGYsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MGUsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MGYsCisJCSAgIDB4MDAsIDB4ZmYsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MGUsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MGYsIDB4MDAsIDB4ZmYsIDB4MDApLAorCVBIWVJFR1MoMHgwN2NjLCAweDA3YzgsIDB4MDdjNCwgMHgwMjBkLCAweDAyMGUsIDB4MDIwZiksCisgIH0sCisgIHsJLmZyZXEJCQk9IDQ5OTAsCisJUkFESU9SRUdTMygweGZmLCAweDAxLCAweDAxLCAweDAxLCAweGYzLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDhmLCAweDBmLCAweDAwLAorCQkgICAweGZmLCAweGZmLCAweDAwLCAweDBlLCAweDAwLCAweDdmLCAweDAwLCAweDBmLAorCQkgICAweDAwLCAweGZmLCAweDAwLCAweGZmLCAweDAwLCAweDBlLCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDBmLCAweDAwLCAweGZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDdkMCwgMHgwN2NjLCAweDA3YzgsIDB4MDIwYywgMHgwMjBkLCAweDAyMGUpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MDAwLAorCVJBRElPUkVHUzMoMHhmZiwgMHgwMSwgMHgwMSwgMHgwMSwgMHhmNCwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHg4ZiwgMHgwZiwgMHgwMCwKKwkJICAgMHhmZiwgMHhmZiwgMHgwMCwgMHgwZCwgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwZiwKKwkJICAgMHgwMCwgMHhmZiwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwZCwgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwZiwgMHgwMCwgMHhmZiwgMHgwMCksCisJUEhZUkVHUygweDA3ZDQsIDB4MDdkMCwgMHgwN2NjLCAweDAyMGIsIDB4MDIwYywgMHgwMjBkKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTAxMCwKKwlSQURJT1JFR1MzKDB4ZmYsIDB4MDEsIDB4MDEsIDB4MDEsIDB4ZjUsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4OGYsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MGQsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MGYsCisJCSAgIDB4MDAsIDB4ZmYsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MGQsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MGYsIDB4MDAsIDB4ZmYsIDB4MDApLAorCVBIWVJFR1MoMHgwN2Q4LCAweDA3ZDQsIDB4MDdkMCwgMHgwMjBhLCAweDAyMGIsIDB4MDIwYyksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUwMjAsCisJUkFESU9SRUdTMygweGY3LCAweDAxLCAweDAxLCAweDAxLCAweGY2LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDhmLCAweDBmLCAweDAwLAorCQkgICAweGZmLCAweGZmLCAweDAwLCAweDBkLCAweDAwLCAweDdmLCAweDAwLCAweDBmLAorCQkgICAweDAwLCAweGZmLCAweDAwLCAweGZmLCAweDAwLCAweDBkLCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDBmLCAweDAwLCAweGZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDdkYywgMHgwN2Q4LCAweDA3ZDQsIDB4MDIwOSwgMHgwMjBhLCAweDAyMGIpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MDMwLAorCVJBRElPUkVHUzMoMHhmNywgMHgwMSwgMHgwMSwgMHgwMSwgMHhmNywgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHg4ZiwgMHgwZiwgMHgwMCwKKwkJICAgMHhmZiwgMHhmZiwgMHgwMCwgMHgwZCwgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwZiwKKwkJICAgMHgwMCwgMHhmZiwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwZCwgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwZiwgMHgwMCwgMHhmZiwgMHgwMCksCisJUEhZUkVHUygweDA3ZTAsIDB4MDdkYywgMHgwN2Q4LCAweDAyMDgsIDB4MDIwOSwgMHgwMjBhKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTA0MCwKKwlSQURJT1JFR1MzKDB4ZWYsIDB4MDEsIDB4MDEsIDB4MDEsIDB4ZjgsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4OGYsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MGQsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MGYsCisJCSAgIDB4MDAsIDB4ZmYsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MGQsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MGYsIDB4MDAsIDB4ZmYsIDB4MDApLAorCVBIWVJFR1MoMHgwN2U0LCAweDA3ZTAsIDB4MDdkYywgMHgwMjA3LCAweDAyMDgsIDB4MDIwOSksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUwNTAsCisJUkFESU9SRUdTMygweGVmLCAweDAxLCAweDAxLCAweDAxLCAweGY5LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDhmLCAweDBmLCAweDAwLAorCQkgICAweGZmLCAweGZmLCAweDAwLCAweDBkLCAweDAwLCAweDdmLCAweDAwLCAweDBmLAorCQkgICAweDAwLCAweGZmLCAweDAwLCAweGZmLCAweDAwLCAweDBkLCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDBmLCAweDAwLCAweGZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDdlOCwgMHgwN2U0LCAweDA3ZTAsIDB4MDIwNiwgMHgwMjA3LCAweDAyMDgpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MDYwLAorCVJBRElPUkVHUzMoMHhlNiwgMHgwMSwgMHgwMSwgMHgwMSwgMHhmYSwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHg4ZiwgMHgwZiwgMHgwMCwKKwkJICAgMHhmZiwgMHhmZiwgMHgwMCwgMHgwZCwgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwZiwKKwkJICAgMHgwMCwgMHhmZiwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwZCwgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwZiwgMHgwMCwgMHhmZiwgMHgwMCksCisJUEhZUkVHUygweDA3ZWMsIDB4MDdlOCwgMHgwN2U0LCAweDAyMDUsIDB4MDIwNiwgMHgwMjA3KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTA3MCwKKwlSQURJT1JFR1MzKDB4ZTYsIDB4MDEsIDB4MDEsIDB4MDEsIDB4ZmIsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4OGYsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MGQsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MGYsCisJCSAgIDB4MDAsIDB4ZmYsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MGQsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MGYsIDB4MDAsIDB4ZmYsIDB4MDApLAorCVBIWVJFR1MoMHgwN2YwLCAweDA3ZWMsIDB4MDdlOCwgMHgwMjA0LCAweDAyMDUsIDB4MDIwNiksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUwODAsCisJUkFESU9SRUdTMygweGRlLCAweDAxLCAweDAxLCAweDAxLCAweGZjLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDhmLCAweDBmLCAweDAwLAorCQkgICAweGZmLCAweGZmLCAweDAwLCAweDBkLCAweDAwLCAweDdmLCAweDAwLCAweDBmLAorCQkgICAweDAwLCAweGZmLCAweDAwLCAweGZmLCAweDAwLCAweDBkLCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDBmLCAweDAwLCAweGZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDdmNCwgMHgwN2YwLCAweDA3ZWMsIDB4MDIwMywgMHgwMjA0LCAweDAyMDUpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MDkwLAorCVJBRElPUkVHUzMoMHhkZSwgMHgwMSwgMHgwMSwgMHgwMSwgMHhmZCwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHg4ZiwgMHgwZiwgMHgwMCwKKwkJICAgMHhmZiwgMHhmZiwgMHgwMCwgMHgwZCwgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwZiwKKwkJICAgMHgwMCwgMHhmZiwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwZCwgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwZiwgMHgwMCwgMHhmZiwgMHgwMCksCisJUEhZUkVHUygweDA3ZjgsIDB4MDdmNCwgMHgwN2YwLCAweDAyMDIsIDB4MDIwMywgMHgwMjA0KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTEwMCwKKwlSQURJT1JFR1MzKDB4ZDYsIDB4MDEsIDB4MDEsIDB4MDEsIDB4ZmUsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDIsIDB4MDIsIDB4MDIsIDB4OGYsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MGMsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MGYsCisJCSAgIDB4MDAsIDB4ZmUsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MGMsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MGYsIDB4MDAsIDB4ZmUsIDB4MDApLAorCVBIWVJFR1MoMHgwN2ZjLCAweDA3ZjgsIDB4MDdmNCwgMHgwMjAxLCAweDAyMDIsIDB4MDIwMyksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUxMTAsCisJUkFESU9SRUdTMygweGQ2LCAweDAxLCAweDAxLCAweDAxLCAweGZmLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAyLCAweDAyLCAweDAyLCAweDhmLCAweDBmLCAweDAwLAorCQkgICAweGZmLCAweGZmLCAweDAwLCAweDBjLCAweDAwLCAweDdmLCAweDAwLCAweDBmLAorCQkgICAweDAwLCAweGZlLCAweDAwLCAweGZmLCAweDAwLCAweDBjLCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDBmLCAweDAwLCAweGZlLCAweDAwKSwKKwlQSFlSRUdTKDB4MDgwMCwgMHgwN2ZjLCAweDA3ZjgsIDB4MDIwMCwgMHgwMjAxLCAweDAyMDIpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MTIwLAorCVJBRElPUkVHUzMoMHhjZSwgMHgwMSwgMHgwMSwgMHgwMiwgMHgwMCwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMiwgMHgwMiwgMHgwMiwgMHg4ZiwgMHgwZiwgMHgwMCwKKwkJICAgMHhmZiwgMHhmZiwgMHgwMCwgMHgwYywgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwZiwKKwkJICAgMHgwMCwgMHhmZSwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwYywgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwZiwgMHgwMCwgMHhmZSwgMHgwMCksCisJUEhZUkVHUygweDA4MDQsIDB4MDgwMCwgMHgwN2ZjLCAweDAxZmYsIDB4MDIwMCwgMHgwMjAxKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTEzMCwKKwlSQURJT1JFR1MzKDB4Y2UsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDIsIDB4MDIsIDB4MDIsIDB4OGYsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MGMsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MGYsCisJCSAgIDB4MDAsIDB4ZmUsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MGMsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MGYsIDB4MDAsIDB4ZmUsIDB4MDApLAorCVBIWVJFR1MoMHgwODA4LCAweDA4MDQsIDB4MDgwMCwgMHgwMWZlLCAweDAxZmYsIDB4MDIwMCksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUxNDAsCisJUkFESU9SRUdTMygweGM2LCAweDAxLCAweDAxLCAweDAyLCAweDAyLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAyLCAweDAyLCAweDAyLCAweDhmLCAweDBmLCAweDAwLAorCQkgICAweGZmLCAweGZmLCAweDAwLCAweDBjLCAweDAwLCAweDdmLCAweDAwLCAweDBmLAorCQkgICAweDAwLCAweGZlLCAweDAwLCAweGZmLCAweDAwLCAweDBjLCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDBmLCAweDAwLCAweGZlLCAweDAwKSwKKwlQSFlSRUdTKDB4MDgwYywgMHgwODA4LCAweDA4MDQsIDB4MDFmZCwgMHgwMWZlLCAweDAxZmYpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MTYwLAorCVJBRElPUkVHUzMoMHhiZSwgMHgwMSwgMHgwMSwgMHgwMiwgMHgwNCwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMiwgMHgwMiwgMHgwMiwgMHg4ZiwgMHgwZiwgMHgwMCwKKwkJICAgMHhmZiwgMHhmZiwgMHgwMCwgMHgwYywgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwZiwKKwkJICAgMHgwMCwgMHhmZSwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwYywgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwZiwgMHgwMCwgMHhmZSwgMHgwMCksCisJUEhZUkVHUygweDA4MTQsIDB4MDgxMCwgMHgwODBjLCAweDAxZmIsIDB4MDFmYywgMHgwMWZkKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTE3MCwKKwlSQURJT1JFR1MzKDB4YmUsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MDUsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDIsIDB4MDIsIDB4MDIsIDB4OGYsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MGMsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MGYsCisJCSAgIDB4MDAsIDB4ZmUsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MGMsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MGYsIDB4MDAsIDB4ZmUsIDB4MDApLAorCVBIWVJFR1MoMHgwODE4LCAweDA4MTQsIDB4MDgxMCwgMHgwMWZhLCAweDAxZmIsIDB4MDFmYyksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUxODAsCisJUkFESU9SRUdTMygweGI2LCAweDAxLCAweDAxLCAweDAyLCAweDA2LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAyLCAweDAyLCAweDAyLCAweDhmLCAweDBmLCAweDAwLAorCQkgICAweGZmLCAweGVmLCAweDAwLCAweDBjLCAweDAwLCAweDdmLCAweDAwLCAweDBmLAorCQkgICAweDAwLCAweGZlLCAweDAwLCAweGVmLCAweDAwLCAweDBjLCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDBmLCAweDAwLCAweGZlLCAweDAwKSwKKwlQSFlSRUdTKDB4MDgxYywgMHgwODE4LCAweDA4MTQsIDB4MDFmOSwgMHgwMWZhLCAweDAxZmIpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MTkwLAorCVJBRElPUkVHUzMoMHhiNiwgMHgwMSwgMHgwMSwgMHgwMiwgMHgwNywgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMiwgMHgwMiwgMHgwMiwgMHg4ZiwgMHgwZiwgMHgwMCwKKwkJICAgMHhmZiwgMHhlZiwgMHgwMCwgMHgwYywgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwZiwKKwkJICAgMHgwMCwgMHhmZSwgMHgwMCwgMHhlZiwgMHgwMCwgMHgwYywgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwZiwgMHgwMCwgMHhmZSwgMHgwMCksCisJUEhZUkVHUygweDA4MjAsIDB4MDgxYywgMHgwODE4LCAweDAxZjgsIDB4MDFmOSwgMHgwMWZhKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTIwMCwKKwlSQURJT1JFR1MzKDB4YWYsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MDgsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDIsIDB4MDIsIDB4MDIsIDB4OGYsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZmYsIDB4ZWYsIDB4MDAsIDB4MGEsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MGYsCisJCSAgIDB4MDAsIDB4ZmMsIDB4MDAsIDB4ZWYsIDB4MDAsIDB4MGEsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MGYsIDB4MDAsIDB4ZmMsIDB4MDApLAorCVBIWVJFR1MoMHgwODI0LCAweDA4MjAsIDB4MDgxYywgMHgwMWY3LCAweDAxZjgsIDB4MDFmOSksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUyMTAsCisJUkFESU9SRUdTMygweGFmLCAweDAxLCAweDAxLCAweDAyLCAweDA5LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAyLCAweDAyLCAweDAyLCAweDhmLCAweDBmLCAweDAwLAorCQkgICAweGZmLCAweGRmLCAweDAwLCAweDBhLCAweDAwLCAweDdmLCAweDAwLCAweDBmLAorCQkgICAweDAwLCAweGZjLCAweDAwLCAweGRmLCAweDAwLCAweDBhLCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDBmLCAweDAwLCAweGZjLCAweDAwKSwKKwlQSFlSRUdTKDB4MDgyOCwgMHgwODI0LCAweDA4MjAsIDB4MDFmNiwgMHgwMWY3LCAweDAxZjgpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MjIwLAorCVJBRElPUkVHUzMoMHhhNywgMHgwMSwgMHgwMSwgMHgwMiwgMHgwYSwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMiwgMHgwMiwgMHgwMiwgMHg4ZiwgMHgwZiwgMHgwMCwKKwkJICAgMHhmZiwgMHhkZiwgMHgwMCwgMHgwYSwgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwZiwKKwkJICAgMHgwMCwgMHhmYywgMHgwMCwgMHhkZiwgMHgwMCwgMHgwYSwgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwZiwgMHgwMCwgMHhmYywgMHgwMCksCisJUEhZUkVHUygweDA4MmMsIDB4MDgyOCwgMHgwODI0LCAweDAxZjUsIDB4MDFmNiwgMHgwMWY3KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTIzMCwKKwlSQURJT1JFR1MzKDB4YTcsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MGIsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDIsIDB4MDIsIDB4MDIsIDB4OGYsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZmYsIDB4ZGYsIDB4MDAsIDB4MGEsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MGYsCisJCSAgIDB4MDAsIDB4ZmMsIDB4MDAsIDB4ZGYsIDB4MDAsIDB4MGEsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MGYsIDB4MDAsIDB4ZmMsIDB4MDApLAorCVBIWVJFR1MoMHgwODMwLCAweDA4MmMsIDB4MDgyOCwgMHgwMWY0LCAweDAxZjUsIDB4MDFmNiksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUyNDAsCisJUkFESU9SRUdTMygweGEwLCAweDAxLCAweDAxLCAweDAyLCAweDBjLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAyLCAweDAyLCAweDAyLCAweDhmLCAweDBmLCAweDAwLAorCQkgICAweGZmLCAweGNmLCAweDAwLCAweDBhLCAweDAwLCAweDdmLCAweDAwLCAweDBmLAorCQkgICAweDAwLCAweGZjLCAweDAwLCAweGNmLCAweDAwLCAweDBhLCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDBmLCAweDAwLCAweGZjLCAweDAwKSwKKwlQSFlSRUdTKDB4MDgzNCwgMHgwODMwLCAweDA4MmMsIDB4MDFmMywgMHgwMWY0LCAweDAxZjUpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MjUwLAorCVJBRElPUkVHUzMoMHhhMCwgMHgwMSwgMHgwMSwgMHgwMiwgMHgwZCwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMiwgMHgwMiwgMHgwMiwgMHg4ZiwgMHgwZiwgMHgwMCwKKwkJICAgMHhmZiwgMHhjZiwgMHgwMCwgMHgwYSwgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwZiwKKwkJICAgMHgwMCwgMHhmYywgMHgwMCwgMHhjZiwgMHgwMCwgMHgwYSwgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwZiwgMHgwMCwgMHhmYywgMHgwMCksCisJUEhZUkVHUygweDA4MzgsIDB4MDgzNCwgMHgwODMwLCAweDAxZjIsIDB4MDFmMywgMHgwMWY0KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTI2MCwKKwlSQURJT1JFR1MzKDB4OTgsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MGUsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDIsIDB4MDIsIDB4MDIsIDB4OGYsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZmYsIDB4Y2YsIDB4MDAsIDB4MGEsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MGYsCisJCSAgIDB4MDAsIDB4ZmMsIDB4MDAsIDB4Y2YsIDB4MDAsIDB4MGEsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MGYsIDB4MDAsIDB4ZmMsIDB4MDApLAorCVBIWVJFR1MoMHgwODNjLCAweDA4MzgsIDB4MDgzNCwgMHgwMWYxLCAweDAxZjIsIDB4MDFmMyksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUyNzAsCisJUkFESU9SRUdTMygweDk4LCAweDAxLCAweDAxLCAweDAyLCAweDBmLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAzLCAweDAzLCAweDAzLCAweDhmLCAweDBmLCAweDAwLAorCQkgICAweGZmLCAweGNmLCAweDAwLCAweDBhLCAweDAwLCAweDdmLCAweDAwLCAweDBmLAorCQkgICAweDAwLCAweGZjLCAweDAwLCAweGNmLCAweDAwLCAweDBhLCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDBmLCAweDAwLCAweGZjLCAweDAwKSwKKwlQSFlSRUdTKDB4MDg0MCwgMHgwODNjLCAweDA4MzgsIDB4MDFmMCwgMHgwMWYxLCAweDAxZjIpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MjgwLAorCVJBRElPUkVHUzMoMHg5MSwgMHgwMSwgMHgwMSwgMHgwMiwgMHgxMCwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMywgMHgwMywgMHgwMywgMHg4ZiwgMHgwZiwgMHgwMCwKKwkJICAgMHhmZiwgMHhiZiwgMHgwMCwgMHgwYSwgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwZiwKKwkJICAgMHgwMCwgMHhmYywgMHgwMCwgMHhiZiwgMHgwMCwgMHgwYSwgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwZiwgMHgwMCwgMHhmYywgMHgwMCksCisJUEhZUkVHUygweDA4NDQsIDB4MDg0MCwgMHgwODNjLCAweDAxZjAsIDB4MDFmMCwgMHgwMWYxKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTI5MCwKKwlSQURJT1JFR1MzKDB4OTEsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MTEsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDMsIDB4MDMsIDB4MDMsIDB4OGYsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZmYsIDB4YmYsIDB4MDAsIDB4MGEsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MGYsCisJCSAgIDB4MDAsIDB4ZmMsIDB4MDAsIDB4YmYsIDB4MDAsIDB4MGEsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MGYsIDB4MDAsIDB4ZmMsIDB4MDApLAorCVBIWVJFR1MoMHgwODQ4LCAweDA4NDQsIDB4MDg0MCwgMHgwMWVmLCAweDAxZjAsIDB4MDFmMCksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUzMDAsCisJUkFESU9SRUdTMygweDhhLCAweDAxLCAweDAxLCAweDAyLCAweDEyLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAzLCAweDAzLCAweDAzLCAweDhmLCAweDBlLCAweDAwLAorCQkgICAweGZmLCAweGJmLCAweDAwLCAweDA4LCAweDAwLCAweDdmLCAweDAwLCAweDBmLAorCQkgICAweDAwLCAweGZhLCAweDAwLCAweGJmLCAweDAwLCAweDA4LCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDBmLCAweDAwLCAweGZhLCAweDAwKSwKKwlQSFlSRUdTKDB4MDg0YywgMHgwODQ4LCAweDA4NDQsIDB4MDFlZSwgMHgwMWVmLCAweDAxZjApLAorICB9LAorICB7CS5mcmVxCQkJPSA1MzEwLAorCVJBRElPUkVHUzMoMHg4YSwgMHgwMSwgMHgwMSwgMHgwMiwgMHgxMywgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMywgMHgwMywgMHgwMywgMHg4ZiwgMHgwZSwgMHgwMCwKKwkJICAgMHhmZiwgMHhiZiwgMHgwMCwgMHgwOCwgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwZiwKKwkJICAgMHgwMCwgMHhmYSwgMHgwMCwgMHhiZiwgMHgwMCwgMHgwOCwgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwZiwgMHgwMCwgMHhmYSwgMHgwMCksCisJUEhZUkVHUygweDA4NTAsIDB4MDg0YywgMHgwODQ4LCAweDAxZWQsIDB4MDFlZSwgMHgwMWVmKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTMyMCwKKwlSQURJT1JFR1MzKDB4ODMsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MTQsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDMsIDB4MDMsIDB4MDMsIDB4OGYsIDB4MGUsIDB4MDAsCisJCSAgIDB4ZmYsIDB4YmYsIDB4MDAsIDB4MDgsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MGYsCisJCSAgIDB4MDAsIDB4ZmEsIDB4MDAsIDB4YmYsIDB4MDAsIDB4MDgsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MGYsIDB4MDAsIDB4ZmEsIDB4MDApLAorCVBIWVJFR1MoMHgwODU0LCAweDA4NTAsIDB4MDg0YywgMHgwMWVjLCAweDAxZWQsIDB4MDFlZSksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUzMzAsCisJUkFESU9SRUdTMygweDgzLCAweDAxLCAweDAxLCAweDAyLCAweDE1LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAzLCAweDAzLCAweDAzLCAweDhmLCAweDBlLCAweDAwLAorCQkgICAweGZmLCAweGFmLCAweDAwLCAweDA4LCAweDAwLCAweDdmLCAweDAwLCAweDBmLAorCQkgICAweDAwLCAweGZhLCAweDAwLCAweGFmLCAweDAwLCAweDA4LCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDBmLCAweDAwLCAweGZhLCAweDAwKSwKKwlQSFlSRUdTKDB4MDg1OCwgMHgwODU0LCAweDA4NTAsIDB4MDFlYiwgMHgwMWVjLCAweDAxZWQpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MzQwLAorCVJBRElPUkVHUzMoMHg3YywgMHgwMSwgMHgwMSwgMHgwMiwgMHgxNiwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMywgMHgwMywgMHgwMywgMHg4ZiwgMHgwZSwgMHgwMCwKKwkJICAgMHhmZiwgMHhhZiwgMHgwMCwgMHgwOCwgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwZiwKKwkJICAgMHgwMCwgMHhmYSwgMHgwMCwgMHhhZiwgMHgwMCwgMHgwOCwgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwZiwgMHgwMCwgMHhmYSwgMHgwMCksCisJUEhZUkVHUygweDA4NWMsIDB4MDg1OCwgMHgwODU0LCAweDAxZWEsIDB4MDFlYiwgMHgwMWVjKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTM1MCwKKwlSQURJT1JFR1MzKDB4N2MsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MTcsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDMsIDB4MDMsIDB4MDMsIDB4OGYsIDB4MGUsIDB4MDAsCisJCSAgIDB4ZmYsIDB4OWYsIDB4MDAsIDB4MDgsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MGYsCisJCSAgIDB4MDAsIDB4ZmEsIDB4MDAsIDB4OWYsIDB4MDAsIDB4MDgsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MGYsIDB4MDAsIDB4ZmEsIDB4MDApLAorCVBIWVJFR1MoMHgwODYwLCAweDA4NWMsIDB4MDg1OCwgMHgwMWU5LCAweDAxZWEsIDB4MDFlYiksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUzNjAsCisJUkFESU9SRUdTMygweDc1LCAweDAxLCAweDAxLCAweDAyLCAweDE4LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAzLCAweDAzLCAweDAzLCAweDhmLCAweDBlLCAweDAwLAorCQkgICAweGZmLCAweDlmLCAweDAwLCAweDA4LCAweDAwLCAweDdmLCAweDAwLCAweDBmLAorCQkgICAweDAwLCAweGZhLCAweDAwLCAweDlmLCAweDAwLCAweDA4LCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDBmLCAweDAwLCAweGZhLCAweDAwKSwKKwlQSFlSRUdTKDB4MDg2NCwgMHgwODYwLCAweDA4NWMsIDB4MDFlOCwgMHgwMWU5LCAweDAxZWEpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MzcwLAorCVJBRElPUkVHUzMoMHg3NSwgMHgwMSwgMHgwMSwgMHgwMiwgMHgxOSwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMywgMHgwMywgMHgwMywgMHg4ZiwgMHgwZSwgMHgwMCwKKwkJICAgMHhmZiwgMHg5ZiwgMHgwMCwgMHgwOCwgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwZiwKKwkJICAgMHgwMCwgMHhmYSwgMHgwMCwgMHg5ZiwgMHgwMCwgMHgwOCwgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwZiwgMHgwMCwgMHhmYSwgMHgwMCksCisJUEhZUkVHUygweDA4NjgsIDB4MDg2NCwgMHgwODYwLCAweDAxZTcsIDB4MDFlOCwgMHgwMWU5KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTM4MCwKKwlSQURJT1JFR1MzKDB4NmUsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MWEsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDMsIDB4MDMsIDB4MDMsIDB4OGYsIDB4MGUsIDB4MDAsCisJCSAgIDB4ZmYsIDB4OWYsIDB4MDAsIDB4MDgsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MGYsCisJCSAgIDB4MDAsIDB4ZmEsIDB4MDAsIDB4OWYsIDB4MDAsIDB4MDgsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MGYsIDB4MDAsIDB4ZmEsIDB4MDApLAorCVBIWVJFR1MoMHgwODZjLCAweDA4NjgsIDB4MDg2NCwgMHgwMWU2LCAweDAxZTcsIDB4MDFlOCksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUzOTAsCisJUkFESU9SRUdTMygweDZlLCAweDAxLCAweDAxLCAweDAyLCAweDFiLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAzLCAweDAzLCAweDAzLCAweDhmLCAweDBlLCAweDAwLAorCQkgICAweGZmLCAweDhmLCAweDAwLCAweDA4LCAweDAwLCAweDdmLCAweDAwLCAweDBmLAorCQkgICAweDAwLCAweGZhLCAweDAwLCAweDhmLCAweDAwLCAweDA4LCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDBmLCAweDAwLCAweGZhLCAweDAwKSwKKwlQSFlSRUdTKDB4MDg3MCwgMHgwODZjLCAweDA4NjgsIDB4MDFlNSwgMHgwMWU2LCAweDAxZTcpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NDAwLAorCVJBRElPUkVHUzMoMHg2NywgMHgwMSwgMHgwMSwgMHgwMiwgMHgxYywgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMywgMHgwMywgMHgwMywgMHg4ZCwgMHgwZCwgMHgwMCwKKwkJICAgMHhjOCwgMHg4ZiwgMHgwMCwgMHgwNywgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwZiwKKwkJICAgMHgwMCwgMHhmOCwgMHgwMCwgMHg4ZiwgMHgwMCwgMHgwNywgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwZiwgMHgwMCwgMHhmOCwgMHgwMCksCisJUEhZUkVHUygweDA4NzQsIDB4MDg3MCwgMHgwODZjLCAweDAxZTUsIDB4MDFlNSwgMHgwMWU2KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTQxMCwKKwlSQURJT1JFR1MzKDB4NjcsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MWQsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDMsIDB4MDMsIDB4MDMsIDB4OGQsIDB4MGQsIDB4MDAsCisJCSAgIDB4YzgsIDB4OGYsIDB4MDAsIDB4MDcsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MGYsCisJCSAgIDB4MDAsIDB4ZjgsIDB4MDAsIDB4OGYsIDB4MDAsIDB4MDcsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MGYsIDB4MDAsIDB4ZjgsIDB4MDApLAorCVBIWVJFR1MoMHgwODc4LCAweDA4NzQsIDB4MDg3MCwgMHgwMWU0LCAweDAxZTUsIDB4MDFlNSksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU0MjAsCisJUkFESU9SRUdTMygweDYxLCAweDAxLCAweDAxLCAweDAyLCAweDFlLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAzLCAweDAzLCAweDAzLCAweDhkLCAweDBkLCAweDAwLAorCQkgICAweGM4LCAweDhlLCAweDAwLCAweDA3LCAweDAwLCAweDdmLCAweDAwLCAweDBmLAorCQkgICAweDAwLCAweGY4LCAweDAwLCAweDhlLCAweDAwLCAweDA3LCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDBmLCAweDAwLCAweGY4LCAweDAwKSwKKwlQSFlSRUdTKDB4MDg3YywgMHgwODc4LCAweDA4NzQsIDB4MDFlMywgMHgwMWU0LCAweDAxZTUpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NDMwLAorCVJBRElPUkVHUzMoMHg2MSwgMHgwMSwgMHgwMSwgMHgwMiwgMHgxZiwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMywgMHgwMywgMHgwMywgMHg4ZCwgMHgwZCwgMHgwMCwKKwkJICAgMHhjOCwgMHg4ZSwgMHgwMCwgMHgwNywgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwZiwKKwkJICAgMHgwMCwgMHhmOCwgMHgwMCwgMHg4ZSwgMHgwMCwgMHgwNywgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwZiwgMHgwMCwgMHhmOCwgMHgwMCksCisJUEhZUkVHUygweDA4ODAsIDB4MDg3YywgMHgwODc4LCAweDAxZTIsIDB4MDFlMywgMHgwMWU0KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTQ0MCwKKwlSQURJT1JFR1MzKDB4NWEsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MjAsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDQsIDB4MDQsIDB4MDQsIDB4OGQsIDB4MGQsIDB4MDAsCisJCSAgIDB4YzgsIDB4N2UsIDB4MDAsIDB4MDcsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MGYsCisJCSAgIDB4MDAsIDB4ZjgsIDB4MDAsIDB4N2UsIDB4MDAsIDB4MDcsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MGYsIDB4MDAsIDB4ZjgsIDB4MDApLAorCVBIWVJFR1MoMHgwODg0LCAweDA4ODAsIDB4MDg3YywgMHgwMWUxLCAweDAxZTIsIDB4MDFlMyksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU0NTAsCisJUkFESU9SRUdTMygweDVhLCAweDAxLCAweDAxLCAweDAyLCAweDIxLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA0LCAweDA0LCAweDA0LCAweDhkLCAweDBkLCAweDAwLAorCQkgICAweGM4LCAweDdkLCAweDAwLCAweDA3LCAweDAwLCAweDdmLCAweDAwLCAweDBmLAorCQkgICAweDAwLCAweGY4LCAweDAwLCAweDdkLCAweDAwLCAweDA3LCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDBmLCAweDAwLCAweGY4LCAweDAwKSwKKwlQSFlSRUdTKDB4MDg4OCwgMHgwODg0LCAweDA4ODAsIDB4MDFlMCwgMHgwMWUxLCAweDAxZTIpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NDYwLAorCVJBRElPUkVHUzMoMHg1MywgMHgwMSwgMHgwMSwgMHgwMiwgMHgyMiwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNCwgMHgwNCwgMHgwNCwgMHg4ZCwgMHgwZCwgMHgwMCwKKwkJICAgMHhjOCwgMHg2ZCwgMHgwMCwgMHgwNywgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwZiwKKwkJICAgMHgwMCwgMHhmOCwgMHgwMCwgMHg2ZCwgMHgwMCwgMHgwNywgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwZiwgMHgwMCwgMHhmOCwgMHgwMCksCisJUEhZUkVHUygweDA4OGMsIDB4MDg4OCwgMHgwODg0LCAweDAxZGYsIDB4MDFlMCwgMHgwMWUxKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTQ3MCwKKwlSQURJT1JFR1MzKDB4NTMsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MjMsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDQsIDB4MDQsIDB4MDQsIDB4OGQsIDB4MGQsIDB4MDAsCisJCSAgIDB4YzgsIDB4NmQsIDB4MDAsIDB4MDcsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MGYsCisJCSAgIDB4MDAsIDB4ZjgsIDB4MDAsIDB4NmQsIDB4MDAsIDB4MDcsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MGYsIDB4MDAsIDB4ZjgsIDB4MDApLAorCVBIWVJFR1MoMHgwODkwLCAweDA4OGMsIDB4MDg4OCwgMHgwMWRlLCAweDAxZGYsIDB4MDFlMCksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU0ODAsCisJUkFESU9SRUdTMygweDRkLCAweDAxLCAweDAxLCAweDAyLCAweDI0LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA0LCAweDA0LCAweDA0LCAweDhkLCAweDBkLCAweDAwLAorCQkgICAweGM4LCAweDVkLCAweDAwLCAweDA3LCAweDAwLCAweDdmLCAweDAwLCAweDBmLAorCQkgICAweDAwLCAweGY4LCAweDAwLCAweDVkLCAweDAwLCAweDA3LCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDBmLCAweDAwLCAweGY4LCAweDAwKSwKKwlQSFlSRUdTKDB4MDg5NCwgMHgwODkwLCAweDA4OGMsIDB4MDFkZCwgMHgwMWRlLCAweDAxZGYpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NDkwLAorCVJBRElPUkVHUzMoMHg0ZCwgMHgwMSwgMHgwMSwgMHgwMiwgMHgyNSwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNCwgMHgwNCwgMHgwNCwgMHg4ZCwgMHgwZCwgMHgwMCwKKwkJICAgMHhjOCwgMHg1YywgMHgwMCwgMHgwNywgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwZiwKKwkJICAgMHgwMCwgMHhmOCwgMHgwMCwgMHg1YywgMHgwMCwgMHgwNywgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwZiwgMHgwMCwgMHhmOCwgMHgwMCksCisJUEhZUkVHUygweDA4OTgsIDB4MDg5NCwgMHgwODkwLCAweDAxZGQsIDB4MDFkZCwgMHgwMWRlKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTUwMCwKKwlSQURJT1JFR1MzKDB4NDcsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MjYsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDQsIDB4MDQsIDB4MDQsIDB4OGQsIDB4MGIsIDB4MDAsCisJCSAgIDB4ODQsIDB4NWMsIDB4MDAsIDB4MDYsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MGQsCisJCSAgIDB4MDAsIDB4ZjYsIDB4MDAsIDB4NWMsIDB4MDAsIDB4MDYsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MGQsIDB4MDAsIDB4ZjYsIDB4MDApLAorCVBIWVJFR1MoMHgwODljLCAweDA4OTgsIDB4MDg5NCwgMHgwMWRjLCAweDAxZGQsIDB4MDFkZCksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU1MTAsCisJUkFESU9SRUdTMygweDQ3LCAweDAxLCAweDAxLCAweDAyLCAweDI3LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA0LCAweDA0LCAweDA0LCAweDhkLCAweDBiLCAweDAwLAorCQkgICAweDg0LCAweDRjLCAweDAwLCAweDA2LCAweDAwLCAweDdmLCAweDAwLCAweDBkLAorCQkgICAweDAwLCAweGY2LCAweDAwLCAweDRjLCAweDAwLCAweDA2LCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDBkLCAweDAwLCAweGY2LCAweDAwKSwKKwlQSFlSRUdTKDB4MDhhMCwgMHgwODljLCAweDA4OTgsIDB4MDFkYiwgMHgwMWRjLCAweDAxZGQpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NTIwLAorCVJBRElPUkVHUzMoMHg0MCwgMHgwMSwgMHgwMSwgMHgwMiwgMHgyOCwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNCwgMHgwNCwgMHgwNCwgMHg4ZCwgMHgwYiwgMHgwMCwKKwkJICAgMHg4NCwgMHg0YywgMHgwMCwgMHgwNiwgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwZCwKKwkJICAgMHgwMCwgMHhmNiwgMHgwMCwgMHg0YywgMHgwMCwgMHgwNiwgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwZCwgMHgwMCwgMHhmNiwgMHgwMCksCisJUEhZUkVHUygweDA4YTQsIDB4MDhhMCwgMHgwODljLCAweDAxZGEsIDB4MDFkYiwgMHgwMWRjKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTUzMCwKKwlSQURJT1JFR1MzKDB4NDAsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MjksIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDQsIDB4MDQsIDB4MDQsIDB4OGQsIDB4MGIsIDB4MDAsCisJCSAgIDB4ODQsIDB4M2IsIDB4MDAsIDB4MDYsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MGQsCisJCSAgIDB4MDAsIDB4ZjYsIDB4MDAsIDB4M2IsIDB4MDAsIDB4MDYsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MGQsIDB4MDAsIDB4ZjYsIDB4MDApLAorCVBIWVJFR1MoMHgwOGE4LCAweDA4YTQsIDB4MDhhMCwgMHgwMWQ5LCAweDAxZGEsIDB4MDFkYiksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU1NDAsCisJUkFESU9SRUdTMygweDNhLCAweDAxLCAweDAxLCAweDAyLCAweDJhLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA0LCAweDA0LCAweDA0LCAweDhkLCAweDBiLCAweDAwLAorCQkgICAweDg0LCAweDNiLCAweDAwLCAweDA2LCAweDAwLCAweDdmLCAweDAwLCAweDBkLAorCQkgICAweDAwLCAweGY2LCAweDAwLCAweDNiLCAweDAwLCAweDA2LCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDBkLCAweDAwLCAweGY2LCAweDAwKSwKKwlQSFlSRUdTKDB4MDhhYywgMHgwOGE4LCAweDA4YTQsIDB4MDFkOCwgMHgwMWQ5LCAweDAxZGEpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NTUwLAorCVJBRElPUkVHUzMoMHgzYSwgMHgwMSwgMHgwMSwgMHgwMiwgMHgyYiwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNCwgMHgwNCwgMHgwNCwgMHg4ZCwgMHgwYiwgMHgwMCwKKwkJICAgMHg4NCwgMHgzYiwgMHgwMCwgMHgwNiwgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwZCwKKwkJICAgMHgwMCwgMHhmNiwgMHgwMCwgMHgzYiwgMHgwMCwgMHgwNiwgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwZCwgMHgwMCwgMHhmNiwgMHgwMCksCisJUEhZUkVHUygweDA4YjAsIDB4MDhhYywgMHgwOGE4LCAweDAxZDcsIDB4MDFkOCwgMHgwMWQ5KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTU2MCwKKwlSQURJT1JFR1MzKDB4MzQsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MmMsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDQsIDB4MDQsIDB4MDQsIDB4OGQsIDB4MGIsIDB4MDAsCisJCSAgIDB4ODQsIDB4MmIsIDB4MDAsIDB4MDYsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MGQsCisJCSAgIDB4MDAsIDB4ZjYsIDB4MDAsIDB4MmIsIDB4MDAsIDB4MDYsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MGQsIDB4MDAsIDB4ZjYsIDB4MDApLAorCVBIWVJFR1MoMHgwOGI0LCAweDA4YjAsIDB4MDhhYywgMHgwMWQ3LCAweDAxZDcsIDB4MDFkOCksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU1NzAsCisJUkFESU9SRUdTMygweDM0LCAweDAxLCAweDAxLCAweDAyLCAweDJkLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA0LCAweDA0LCAweDA0LCAweDhkLCAweDBiLCAweDAwLAorCQkgICAweDg0LCAweDJhLCAweDAwLCAweDA2LCAweDAwLCAweDdmLCAweDAwLCAweDBkLAorCQkgICAweDAwLCAweGY2LCAweDAwLCAweDJhLCAweDAwLCAweDA2LCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDBkLCAweDAwLCAweGY2LCAweDAwKSwKKwlQSFlSRUdTKDB4MDhiOCwgMHgwOGI0LCAweDA4YjAsIDB4MDFkNiwgMHgwMWQ3LCAweDAxZDcpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NTgwLAorCVJBRElPUkVHUzMoMHgyZSwgMHgwMSwgMHgwMSwgMHgwMiwgMHgyZSwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNCwgMHgwNCwgMHgwNCwgMHg4ZCwgMHgwYiwgMHgwMCwKKwkJICAgMHg4NCwgMHgxYSwgMHgwMCwgMHgwNiwgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwZCwKKwkJICAgMHgwMCwgMHhmNiwgMHgwMCwgMHgxYSwgMHgwMCwgMHgwNiwgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwZCwgMHgwMCwgMHhmNiwgMHgwMCksCisJUEhZUkVHUygweDA4YmMsIDB4MDhiOCwgMHgwOGI0LCAweDAxZDUsIDB4MDFkNiwgMHgwMWQ3KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTU5MCwKKwlSQURJT1JFR1MzKDB4MmUsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MmYsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDQsIDB4MDQsIDB4MDQsIDB4OGQsIDB4MGIsIDB4MDAsCisJCSAgIDB4ODQsIDB4MWEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MGQsCisJCSAgIDB4MDAsIDB4ZjYsIDB4MDAsIDB4MWEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MGQsIDB4MDAsIDB4ZjYsIDB4MDApLAorCVBIWVJFR1MoMHgwOGMwLCAweDA4YmMsIDB4MDhiOCwgMHgwMWQ0LCAweDAxZDUsIDB4MDFkNiksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU2MDAsCisJUkFESU9SRUdTMygweDI4LCAweDAxLCAweDAxLCAweDAyLCAweDMwLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA1LCAweDA1LCAweDA1LCAweDhiLCAweDA5LCAweDAwLAorCQkgICAweDcwLCAweDFhLCAweDAwLCAweDA0LCAweDAwLCAweDdmLCAweDAwLCAweDBiLAorCQkgICAweDAwLCAweGY0LCAweDAwLCAweDFhLCAweDAwLCAweDA0LCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDBiLCAweDAwLCAweGY0LCAweDAwKSwKKwlQSFlSRUdTKDB4MDhjNCwgMHgwOGMwLCAweDA4YmMsIDB4MDFkMywgMHgwMWQ0LCAweDAxZDUpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NjEwLAorCVJBRElPUkVHUzMoMHgyOCwgMHgwMSwgMHgwMSwgMHgwMiwgMHgzMSwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNSwgMHgwNSwgMHgwNSwgMHg4YiwgMHgwOSwgMHgwMCwKKwkJICAgMHg3MCwgMHgxOSwgMHgwMCwgMHgwNCwgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwYiwKKwkJICAgMHgwMCwgMHhmNCwgMHgwMCwgMHgxOSwgMHgwMCwgMHgwNCwgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwYiwgMHgwMCwgMHhmNCwgMHgwMCksCisJUEhZUkVHUygweDA4YzgsIDB4MDhjNCwgMHgwOGMwLCAweDAxZDIsIDB4MDFkMywgMHgwMWQ0KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTYyMCwKKwlSQURJT1JFR1MzKDB4MjEsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MzIsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDUsIDB4OGIsIDB4MDksIDB4MDAsCisJCSAgIDB4NzAsIDB4MTksIDB4MDAsIDB4MDQsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MGIsCisJCSAgIDB4MDAsIDB4ZjQsIDB4MDAsIDB4MTksIDB4MDAsIDB4MDQsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MGIsIDB4MDAsIDB4ZjQsIDB4MDApLAorCVBIWVJFR1MoMHgwOGNjLCAweDA4YzgsIDB4MDhjNCwgMHgwMWQyLCAweDAxZDIsIDB4MDFkMyksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU2MzAsCisJUkFESU9SRUdTMygweDIxLCAweDAxLCAweDAxLCAweDAyLCAweDMzLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA1LCAweDA1LCAweDA1LCAweDhiLCAweDA5LCAweDAwLAorCQkgICAweDcwLCAweDA5LCAweDAwLCAweDA0LCAweDAwLCAweDdmLCAweDAwLCAweDBiLAorCQkgICAweDAwLCAweGY0LCAweDAwLCAweDA5LCAweDAwLCAweDA0LCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDBiLCAweDAwLCAweGY0LCAweDAwKSwKKwlQSFlSRUdTKDB4MDhkMCwgMHgwOGNjLCAweDA4YzgsIDB4MDFkMSwgMHgwMWQyLCAweDAxZDIpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NjQwLAorCVJBRElPUkVHUzMoMHgxYywgMHgwMSwgMHgwMSwgMHgwMiwgMHgzNCwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNSwgMHgwNSwgMHgwNSwgMHg4YiwgMHgwOSwgMHgwMCwKKwkJICAgMHg3MCwgMHgwOSwgMHgwMCwgMHgwNCwgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwYiwKKwkJICAgMHgwMCwgMHhmNCwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwNCwgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwYiwgMHgwMCwgMHhmNCwgMHgwMCksCisJUEhZUkVHUygweDA4ZDQsIDB4MDhkMCwgMHgwOGNjLCAweDAxZDAsIDB4MDFkMSwgMHgwMWQyKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTY1MCwKKwlSQURJT1JFR1MzKDB4MWMsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MzUsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDUsIDB4OGIsIDB4MDksIDB4MDAsCisJCSAgIDB4NzAsIDB4MDgsIDB4MDAsIDB4MDQsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MGIsCisJCSAgIDB4MDAsIDB4ZjQsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDQsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MGIsIDB4MDAsIDB4ZjQsIDB4MDApLAorCVBIWVJFR1MoMHgwOGQ4LCAweDA4ZDQsIDB4MDhkMCwgMHgwMWNmLCAweDAxZDAsIDB4MDFkMSksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU2NjAsCisJUkFESU9SRUdTMygweDE2LCAweDAxLCAweDAxLCAweDAyLCAweDM2LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA1LCAweDA1LCAweDA1LCAweDhiLCAweDA5LCAweDAwLAorCQkgICAweDcwLCAweDA4LCAweDAwLCAweDA0LCAweDAwLCAweDdmLCAweDAwLCAweDBiLAorCQkgICAweDAwLCAweGY0LCAweDAwLCAweDA4LCAweDAwLCAweDA0LCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDBiLCAweDAwLCAweGY0LCAweDAwKSwKKwlQSFlSRUdTKDB4MDhkYywgMHgwOGQ4LCAweDA4ZDQsIDB4MDFjZSwgMHgwMWNmLCAweDAxZDApLAorICB9LAorICB7CS5mcmVxCQkJPSA1NjcwLAorCVJBRElPUkVHUzMoMHgxNiwgMHgwMSwgMHgwMSwgMHgwMiwgMHgzNywgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNSwgMHgwNSwgMHgwNSwgMHg4YiwgMHgwOSwgMHgwMCwKKwkJICAgMHg3MCwgMHgwOCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwYiwKKwkJICAgMHgwMCwgMHhmNCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwYiwgMHgwMCwgMHhmNCwgMHgwMCksCisJUEhZUkVHUygweDA4ZTAsIDB4MDhkYywgMHgwOGQ4LCAweDAxY2UsIDB4MDFjZSwgMHgwMWNmKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTY4MCwKKwlSQURJT1JFR1MzKDB4MTAsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MzgsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDUsIDB4OGIsIDB4MDksIDB4MDAsCisJCSAgIDB4NzAsIDB4MDgsIDB4MDAsIDB4MDQsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MGIsCisJCSAgIDB4MDAsIDB4ZjQsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDQsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MGIsIDB4MDAsIDB4ZjQsIDB4MDApLAorCVBIWVJFR1MoMHgwOGU0LCAweDA4ZTAsIDB4MDhkYywgMHgwMWNkLCAweDAxY2UsIDB4MDFjZSksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU2OTAsCisJUkFESU9SRUdTMygweDEwLCAweDAxLCAweDAxLCAweDAyLCAweDM5LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA1LCAweDA1LCAweDA1LCAweDhiLCAweDA5LCAweDAwLAorCQkgICAweDcwLCAweDA3LCAweDAwLCAweDA0LCAweDAwLCAweDdmLCAweDAwLCAweDBiLAorCQkgICAweDAwLCAweGY0LCAweDAwLCAweDA3LCAweDAwLCAweDA0LCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDBiLCAweDAwLCAweGY0LCAweDAwKSwKKwlQSFlSRUdTKDB4MDhlOCwgMHgwOGU0LCAweDA4ZTAsIDB4MDFjYywgMHgwMWNkLCAweDAxY2UpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NzAwLAorCVJBRElPUkVHUzMoMHgwYSwgMHgwMSwgMHgwMSwgMHgwMiwgMHgzYSwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNSwgMHgwNSwgMHgwNSwgMHg4YSwgMHgwNiwgMHgwMCwKKwkJICAgMHg0MCwgMHgwNywgMHgwMCwgMHgwMywgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwYSwKKwkJICAgMHgwMCwgMHhmMiwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMywgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwYSwgMHgwMCwgMHhmMiwgMHgwMCksCisJUEhZUkVHUygweDA4ZWMsIDB4MDhlOCwgMHgwOGU0LCAweDAxY2IsIDB4MDFjYywgMHgwMWNkKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTcxMCwKKwlSQURJT1JFR1MzKDB4MGEsIDB4MDEsIDB4MDEsIDB4MDIsIDB4M2IsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDUsIDB4OGEsIDB4MDYsIDB4MDAsCisJCSAgIDB4NDAsIDB4MDcsIDB4MDAsIDB4MDMsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MGEsCisJCSAgIDB4MDAsIDB4ZjIsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDMsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MGEsIDB4MDAsIDB4ZjIsIDB4MDApLAorCVBIWVJFR1MoMHgwOGYwLCAweDA4ZWMsIDB4MDhlOCwgMHgwMWNhLCAweDAxY2IsIDB4MDFjYyksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU3MjAsCisJUkFESU9SRUdTMygweDBhLCAweDAxLCAweDAxLCAweDAyLCAweDNjLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA1LCAweDA1LCAweDA1LCAweDhhLCAweDA2LCAweDAwLAorCQkgICAweDQwLCAweDA3LCAweDAwLCAweDAzLCAweDAwLCAweDdmLCAweDAwLCAweDBhLAorCQkgICAweDAwLCAweGYyLCAweDAwLCAweDA3LCAweDAwLCAweDAzLCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDBhLCAweDAwLCAweGYyLCAweDAwKSwKKwlQSFlSRUdTKDB4MDhmNCwgMHgwOGYwLCAweDA4ZWMsIDB4MDFjOSwgMHgwMWNhLCAweDAxY2IpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NzI1LAorCVJBRElPUkVHUzMoMHgwMywgMHgwMSwgMHgwMiwgMHgwNCwgMHg3OSwgMHgwNywgMHgwNywgMHgwNCwKKwkJICAgMHgxMCwgMHgwMSwgMHgwNSwgMHgwNSwgMHgwNSwgMHg4YSwgMHgwNiwgMHgwMCwKKwkJICAgMHg0MCwgMHgwNiwgMHgwMCwgMHgwMywgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwYSwKKwkJICAgMHgwMCwgMHhmMiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMywgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwYSwgMHgwMCwgMHhmMiwgMHgwMCksCisJUEhZUkVHUygweDA4ZjYsIDB4MDhmMiwgMHgwOGVlLCAweDAxYzksIDB4MDFjYSwgMHgwMWNiKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTczMCwKKwlSQURJT1JFR1MzKDB4MGEsIDB4MDEsIDB4MDEsIDB4MDIsIDB4M2QsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDUsIDB4OGEsIDB4MDYsIDB4MDAsCisJCSAgIDB4NDAsIDB4MDYsIDB4MDAsIDB4MDMsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MGEsCisJCSAgIDB4MDAsIDB4ZjIsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDMsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MGEsIDB4MDAsIDB4ZjIsIDB4MDApLAorCVBIWVJFR1MoMHgwOGY4LCAweDA4ZjQsIDB4MDhmMCwgMHgwMWM5LCAweDAxYzksIDB4MDFjYSksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU3MzUsCisJUkFESU9SRUdTMygweDAzLCAweDAxLCAweDAyLCAweDA0LCAweDdiLCAweDA3LCAweDA3LCAweDA0LAorCQkgICAweDEwLCAweDAxLCAweDA1LCAweDA1LCAweDA1LCAweDhhLCAweDA2LCAweDAwLAorCQkgICAweDQwLCAweDA2LCAweDAwLCAweDAzLCAweDAwLCAweDdmLCAweDAwLCAweDBhLAorCQkgICAweDAwLCAweGYyLCAweDAwLCAweDA2LCAweDAwLCAweDAzLCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDBhLCAweDAwLCAweGYyLCAweDAwKSwKKwlQSFlSRUdTKDB4MDhmYSwgMHgwOGY2LCAweDA4ZjIsIDB4MDFjOCwgMHgwMWM5LCAweDAxY2EpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NzQwLAorCVJBRElPUkVHUzMoMHgwYSwgMHgwMSwgMHgwMSwgMHgwMiwgMHgzZSwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNSwgMHgwNSwgMHgwNSwgMHg4YSwgMHgwNiwgMHgwMCwKKwkJICAgMHg0MCwgMHgwNiwgMHgwMCwgMHgwMywgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwYSwKKwkJICAgMHgwMCwgMHhmMiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMywgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwYSwgMHgwMCwgMHhmMiwgMHgwMCksCisJUEhZUkVHUygweDA4ZmMsIDB4MDhmOCwgMHgwOGY0LCAweDAxYzgsIDB4MDFjOSwgMHgwMWM5KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTc0NSwKKwlSQURJT1JFR1MzKDB4ZmUsIDB4MDAsIDB4MDIsIDB4MDQsIDB4N2QsIDB4MDcsIDB4MDcsIDB4MDQsCisJCSAgIDB4MTAsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDUsIDB4OGEsIDB4MDYsIDB4MDAsCisJCSAgIDB4NDAsIDB4MDYsIDB4MDAsIDB4MDMsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MGEsCisJCSAgIDB4MDAsIDB4ZjIsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDMsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MGEsIDB4MDAsIDB4ZjIsIDB4MDApLAorCVBIWVJFR1MoMHgwOGZlLCAweDA4ZmEsIDB4MDhmNiwgMHgwMWM4LCAweDAxYzgsIDB4MDFjOSksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU3NTAsCisJUkFESU9SRUdTMygweDBhLCAweDAxLCAweDAxLCAweDAyLCAweDNmLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA1LCAweDA1LCAweDA1LCAweDhhLCAweDA2LCAweDAwLAorCQkgICAweDQwLCAweDA2LCAweDAwLCAweDAzLCAweDAwLCAweDdmLCAweDAwLCAweDBhLAorCQkgICAweDAwLCAweGYyLCAweDAwLCAweDA2LCAweDAwLCAweDAzLCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDBhLCAweDAwLCAweGYyLCAweDAwKSwKKwlQSFlSRUdTKDB4MDkwMCwgMHgwOGZjLCAweDA4ZjgsIDB4MDFjNywgMHgwMWM4LCAweDAxYzkpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NzU1LAorCVJBRElPUkVHUzMoMHhmZSwgMHgwMCwgMHgwMiwgMHgwNCwgMHg3ZiwgMHgwNywgMHgwNywgMHgwNCwKKwkJICAgMHgxMCwgMHgwMSwgMHgwNSwgMHgwNSwgMHgwNSwgMHg4YSwgMHgwNiwgMHgwMCwKKwkJICAgMHg0MCwgMHgwNSwgMHgwMCwgMHgwMywgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwYSwKKwkJICAgMHgwMCwgMHhmMiwgMHgwMCwgMHgwNSwgMHgwMCwgMHgwMywgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwYSwgMHgwMCwgMHhmMiwgMHgwMCksCisJUEhZUkVHUygweDA5MDIsIDB4MDhmZSwgMHgwOGZhLCAweDAxYzcsIDB4MDFjOCwgMHgwMWM4KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTc2MCwKKwlSQURJT1JFR1MzKDB4MGEsIDB4MDEsIDB4MDEsIDB4MDIsIDB4NDAsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDUsIDB4OGEsIDB4MDYsIDB4MDAsCisJCSAgIDB4NDAsIDB4MDUsIDB4MDAsIDB4MDMsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MGEsCisJCSAgIDB4MDAsIDB4ZjIsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MDMsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MGEsIDB4MDAsIDB4ZjIsIDB4MDApLAorCVBIWVJFR1MoMHgwOTA0LCAweDA5MDAsIDB4MDhmYywgMHgwMWM2LCAweDAxYzcsIDB4MDFjOCksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU3NjUsCisJUkFESU9SRUdTMygweGY4LCAweDAwLCAweDAyLCAweDA0LCAweDgxLCAweDA3LCAweDA3LCAweDA0LAorCQkgICAweDEwLCAweDAxLCAweDA1LCAweDA1LCAweDA1LCAweDhhLCAweDA2LCAweDAwLAorCQkgICAweDQwLCAweDA1LCAweDAwLCAweDAzLCAweDAwLCAweDdmLCAweDAwLCAweDBhLAorCQkgICAweDAwLCAweGYyLCAweDAwLCAweDA1LCAweDAwLCAweDAzLCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDBhLCAweDAwLCAweGYyLCAweDAwKSwKKwlQSFlSRUdTKDB4MDkwNiwgMHgwOTAyLCAweDA4ZmUsIDB4MDFjNiwgMHgwMWM3LCAweDAxYzgpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NzcwLAorCVJBRElPUkVHUzMoMHgwYSwgMHgwMSwgMHgwMSwgMHgwMiwgMHg0MSwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNSwgMHgwNSwgMHgwNSwgMHg4YSwgMHgwNiwgMHgwMCwKKwkJICAgMHg0MCwgMHgwNSwgMHgwMCwgMHgwMywgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwYSwKKwkJICAgMHgwMCwgMHhmMiwgMHgwMCwgMHgwNSwgMHgwMCwgMHgwMywgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwYSwgMHgwMCwgMHhmMiwgMHgwMCksCisJUEhZUkVHUygweDA5MDgsIDB4MDkwNCwgMHgwOTAwLCAweDAxYzYsIDB4MDFjNiwgMHgwMWM3KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTc3NSwKKwlSQURJT1JFR1MzKDB4ZjgsIDB4MDAsIDB4MDIsIDB4MDQsIDB4ODMsIDB4MDcsIDB4MDcsIDB4MDQsCisJCSAgIDB4MTAsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDUsIDB4OGEsIDB4MDYsIDB4MDAsCisJCSAgIDB4NDAsIDB4MDUsIDB4MDAsIDB4MDMsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MGEsCisJCSAgIDB4MDAsIDB4ZjIsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MDMsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MGEsIDB4MDAsIDB4ZjIsIDB4MDApLAorCVBIWVJFR1MoMHgwOTBhLCAweDA5MDYsIDB4MDkwMiwgMHgwMWM1LCAweDAxYzYsIDB4MDFjNyksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU3ODAsCisJUkFESU9SRUdTMygweDBhLCAweDAxLCAweDAxLCAweDAyLCAweDQyLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA1LCAweDA1LCAweDA1LCAweDhhLCAweDA2LCAweDAwLAorCQkgICAweDQwLCAweDA1LCAweDAwLCAweDAzLCAweDAwLCAweDdmLCAweDAwLCAweDBhLAorCQkgICAweDAwLCAweGYyLCAweDAwLCAweDA1LCAweDAwLCAweDAzLCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDBhLCAweDAwLCAweGYyLCAweDAwKSwKKwlQSFlSRUdTKDB4MDkwYywgMHgwOTA4LCAweDA5MDQsIDB4MDFjNSwgMHgwMWM2LCAweDAxYzYpLAorICB9LAorICB7CS5mcmVxCQkJPSA1Nzg1LAorCVJBRElPUkVHUzMoMHhmMiwgMHgwMCwgMHgwMiwgMHgwNCwgMHg4NSwgMHgwNywgMHgwNywgMHgwNCwKKwkJICAgMHgxMCwgMHgwMSwgMHgwNiwgMHgwNiwgMHgwNiwgMHg4YSwgMHgwNiwgMHgwMCwKKwkJICAgMHg0MCwgMHgwNCwgMHgwMCwgMHgwMywgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwYSwKKwkJICAgMHgwMCwgMHhmMiwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMywgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwYSwgMHgwMCwgMHhmMiwgMHgwMCksCisJUEhZUkVHUygweDA5MGUsIDB4MDkwYSwgMHgwOTA2LCAweDAxYzQsIDB4MDFjNSwgMHgwMWM2KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTc5MCwKKwlSQURJT1JFR1MzKDB4MGEsIDB4MDEsIDB4MDEsIDB4MDIsIDB4NDMsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDYsIDB4MDYsIDB4MDYsIDB4OGEsIDB4MDYsIDB4MDAsCisJCSAgIDB4NDAsIDB4MDQsIDB4MDAsIDB4MDMsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MGEsCisJCSAgIDB4MDAsIDB4ZjIsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDMsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MGEsIDB4MDAsIDB4ZjIsIDB4MDApLAorCVBIWVJFR1MoMHgwOTEwLCAweDA5MGMsIDB4MDkwOCwgMHgwMWM0LCAweDAxYzUsIDB4MDFjNiksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU3OTUsCisJUkFESU9SRUdTMygweGYyLCAweDAwLCAweDAyLCAweDA0LCAweDg3LCAweDA3LCAweDA3LCAweDA0LAorCQkgICAweDEwLCAweDAxLCAweDA2LCAweDA2LCAweDA2LCAweDhhLCAweDA2LCAweDAwLAorCQkgICAweDQwLCAweDA0LCAweDAwLCAweDAzLCAweDAwLCAweDdmLCAweDAwLCAweDBhLAorCQkgICAweDAwLCAweGYyLCAweDAwLCAweDA0LCAweDAwLCAweDAzLCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDBhLCAweDAwLCAweGYyLCAweDAwKSwKKwlQSFlSRUdTKDB4MDkxMiwgMHgwOTBlLCAweDA5MGEsIDB4MDFjNCwgMHgwMWM0LCAweDAxYzUpLAorICB9LAorICB7CS5mcmVxCQkJPSA1ODAwLAorCVJBRElPUkVHUzMoMHgwYSwgMHgwMSwgMHgwMSwgMHgwMiwgMHg0NCwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNiwgMHgwNiwgMHgwNiwgMHg4OCwgMHgwNCwgMHgwMCwKKwkJICAgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMiwgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwOSwKKwkJICAgMHgwMCwgMHhmMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMiwgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwOSwgMHgwMCwgMHhmMCwgMHgwMCksCisJUEhZUkVHUygweDA5MTQsIDB4MDkxMCwgMHgwOTBjLCAweDAxYzMsIDB4MDFjNCwgMHgwMWM1KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTgwNSwKKwlSQURJT1JFR1MzKDB4ZWQsIDB4MDAsIDB4MDIsIDB4MDQsIDB4ODksIDB4MDcsIDB4MDcsIDB4MDQsCisJCSAgIDB4MTAsIDB4MDEsIDB4MDYsIDB4MDYsIDB4MDYsIDB4ODgsIDB4MDQsIDB4MDAsCisJCSAgIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDIsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MDksCisJCSAgIDB4MDAsIDB4ZjAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDIsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MDksIDB4MDAsIDB4ZjAsIDB4MDApLAorCVBIWVJFR1MoMHgwOTE2LCAweDA5MTIsIDB4MDkwZSwgMHgwMWMzLCAweDAxYzQsIDB4MDFjNCksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU4MTAsCisJUkFESU9SRUdTMygweDBhLCAweDAxLCAweDAxLCAweDAyLCAweDQ1LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA2LCAweDA2LCAweDA2LCAweDg4LCAweDA0LCAweDAwLAorCQkgICAweDIwLCAweDA0LCAweDAwLCAweDAyLCAweDAwLCAweDdmLCAweDAwLCAweDA5LAorCQkgICAweDAwLCAweGYwLCAweDAwLCAweDA0LCAweDAwLCAweDAyLCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDA5LCAweDAwLCAweGYwLCAweDAwKSwKKwlQSFlSRUdTKDB4MDkxOCwgMHgwOTE0LCAweDA5MTAsIDB4MDFjMiwgMHgwMWMzLCAweDAxYzQpLAorICB9LAorICB7CS5mcmVxCQkJPSA1ODE1LAorCVJBRElPUkVHUzMoMHhlZCwgMHgwMCwgMHgwMiwgMHgwNCwgMHg4YiwgMHgwNywgMHgwNywgMHgwNCwKKwkJICAgMHgxMCwgMHgwMSwgMHgwNiwgMHgwNiwgMHgwNiwgMHg4OCwgMHgwNCwgMHgwMCwKKwkJICAgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMiwgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwOSwKKwkJICAgMHgwMCwgMHhmMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMiwgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwOSwgMHgwMCwgMHhmMCwgMHgwMCksCisJUEhZUkVHUygweDA5MWEsIDB4MDkxNiwgMHgwOTEyLCAweDAxYzIsIDB4MDFjMywgMHgwMWM0KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTgyMCwKKwlSQURJT1JFR1MzKDB4MGEsIDB4MDEsIDB4MDEsIDB4MDIsIDB4NDYsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDYsIDB4MDYsIDB4MDYsIDB4ODgsIDB4MDQsIDB4MDAsCisJCSAgIDB4MjAsIDB4MDMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MDksCisJCSAgIDB4MDAsIDB4ZjAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MDksIDB4MDAsIDB4ZjAsIDB4MDApLAorCVBIWVJFR1MoMHgwOTFjLCAweDA5MTgsIDB4MDkxNCwgMHgwMWMyLCAweDAxYzIsIDB4MDFjMyksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU4MjUsCisJUkFESU9SRUdTMygweGVkLCAweDAwLCAweDAyLCAweDA0LCAweDhkLCAweDA3LCAweDA3LCAweDA0LAorCQkgICAweDEwLCAweDAxLCAweDA2LCAweDA2LCAweDA2LCAweDg4LCAweDA0LCAweDAwLAorCQkgICAweDIwLCAweDAzLCAweDAwLCAweDAyLCAweDAwLCAweDdmLCAweDAwLCAweDA5LAorCQkgICAweDAwLCAweGYwLCAweDAwLCAweDAzLCAweDAwLCAweDAyLCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDA5LCAweDAwLCAweGYwLCAweDAwKSwKKwlQSFlSRUdTKDB4MDkxZSwgMHgwOTFhLCAweDA5MTYsIDB4MDFjMSwgMHgwMWMyLCAweDAxYzMpLAorICB9LAorICB7CS5mcmVxCQkJPSA1ODMwLAorCVJBRElPUkVHUzMoMHgwYSwgMHgwMSwgMHgwMSwgMHgwMiwgMHg0NywgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNiwgMHgwNiwgMHgwNiwgMHg4OCwgMHgwNCwgMHgwMCwKKwkJICAgMHgyMCwgMHgwMywgMHgwMCwgMHgwMiwgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwOSwKKwkJICAgMHgwMCwgMHhmMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMiwgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwOSwgMHgwMCwgMHhmMCwgMHgwMCksCisJUEhZUkVHUygweDA5MjAsIDB4MDkxYywgMHgwOTE4LCAweDAxYzEsIDB4MDFjMiwgMHgwMWMyKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTg0MCwKKwlSQURJT1JFR1MzKDB4MGEsIDB4MDEsIDB4MDEsIDB4MDIsIDB4NDgsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDYsIDB4MDYsIDB4MDYsIDB4ODgsIDB4MDQsIDB4MDAsCisJCSAgIDB4MjAsIDB4MDMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MDksCisJCSAgIDB4MDAsIDB4ZjAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MDksIDB4MDAsIDB4ZjAsIDB4MDApLAorCVBIWVJFR1MoMHgwOTI0LCAweDA5MjAsIDB4MDkxYywgMHgwMWMwLCAweDAxYzEsIDB4MDFjMiksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU4NTAsCisJUkFESU9SRUdTMygweGUwLCAweDAwLCAweDAxLCAweDAyLCAweDQ5LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA2LCAweDA2LCAweDA2LCAweDg4LCAweDA0LCAweDAwLAorCQkgICAweDIwLCAweDAzLCAweDAwLCAweDAyLCAweDAwLCAweDdmLCAweDAwLCAweDA5LAorCQkgICAweDAwLCAweGYwLCAweDAwLCAweDAzLCAweDAwLCAweDAyLCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDA5LCAweDAwLCAweGYwLCAweDAwKSwKKwlQSFlSRUdTKDB4MDkyOCwgMHgwOTI0LCAweDA5MjAsIDB4MDFiZiwgMHgwMWMwLCAweDAxYzEpLAorICB9LAorICB7CS5mcmVxCQkJPSA1ODYwLAorCVJBRElPUkVHUzMoMHhkZSwgMHgwMCwgMHgwMSwgMHgwMiwgMHg0YSwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNiwgMHgwNiwgMHgwNiwgMHg4OCwgMHgwNCwgMHgwMCwKKwkJICAgMHgyMCwgMHgwMywgMHgwMCwgMHgwMiwgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwOSwKKwkJICAgMHgwMCwgMHhmMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMiwgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwOSwgMHgwMCwgMHhmMCwgMHgwMCksCisJUEhZUkVHUygweDA5MmMsIDB4MDkyOCwgMHgwOTI0LCAweDAxYmYsIDB4MDFiZiwgMHgwMWMwKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTg3MCwKKwlSQURJT1JFR1MzKDB4ZGIsIDB4MDAsIDB4MDEsIDB4MDIsIDB4NGIsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDYsIDB4MDYsIDB4MDYsIDB4ODgsIDB4MDQsIDB4MDAsCisJCSAgIDB4MjAsIDB4MDIsIDB4MDAsIDB4MDIsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MDksCisJCSAgIDB4MDAsIDB4ZjAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDIsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MDksIDB4MDAsIDB4ZjAsIDB4MDApLAorCVBIWVJFR1MoMHgwOTMwLCAweDA5MmMsIDB4MDkyOCwgMHgwMWJlLCAweDAxYmYsIDB4MDFiZiksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU4ODAsCisJUkFESU9SRUdTMygweGQ4LCAweDAwLCAweDAxLCAweDAyLCAweDRjLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA2LCAweDA2LCAweDA2LCAweDg4LCAweDA0LCAweDAwLAorCQkgICAweDIwLCAweDAyLCAweDAwLCAweDAyLCAweDAwLCAweDdmLCAweDAwLCAweDA5LAorCQkgICAweDAwLCAweGYwLCAweDAwLCAweDAyLCAweDAwLCAweDAyLCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDA5LCAweDAwLCAweGYwLCAweDAwKSwKKwlQSFlSRUdTKDB4MDkzNCwgMHgwOTMwLCAweDA5MmMsIDB4MDFiZCwgMHgwMWJlLCAweDAxYmYpLAorICB9LAorICB7CS5mcmVxCQkJPSA1ODkwLAorCVJBRElPUkVHUzMoMHhkNiwgMHgwMCwgMHgwMSwgMHgwMiwgMHg0ZCwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNiwgMHgwNiwgMHgwNiwgMHg4OCwgMHgwNCwgMHgwMCwKKwkJICAgMHgyMCwgMHgwMiwgMHgwMCwgMHgwMiwgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwOSwKKwkJICAgMHgwMCwgMHhmMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMiwgMHgwMCwgMHg3ZiwKKwkJICAgMHgwMCwgMHgwOSwgMHgwMCwgMHhmMCwgMHgwMCksCisJUEhZUkVHUygweDA5MzgsIDB4MDkzNCwgMHgwOTMwLCAweDAxYmMsIDB4MDFiZCwgMHgwMWJlKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTkwMCwKKwlSQURJT1JFR1MzKDB4ZDMsIDB4MDAsIDB4MDEsIDB4MDIsIDB4NGUsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDYsIDB4MDYsIDB4MDYsIDB4ODcsIDB4MDMsIDB4MDAsCisJCSAgIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MDcsCisJCSAgIDB4MDAsIDB4ZjAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4N2YsCisJCSAgIDB4MDAsIDB4MDcsIDB4MDAsIDB4ZjAsIDB4MDApLAorCVBIWVJFR1MoMHgwOTNjLCAweDA5MzgsIDB4MDkzNCwgMHgwMWJjLCAweDAxYmMsIDB4MDFiZCksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU5MTAsCisJUkFESU9SRUdTMygweGQ2LCAweDAwLCAweDAxLCAweDAyLCAweDRmLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA2LCAweDA2LCAweDA2LCAweDg3LCAweDAzLCAweDAwLAorCQkgICAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDdmLCAweDAwLCAweDA3LAorCQkgICAweDAwLCAweGYwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDdmLAorCQkgICAweDAwLCAweDA3LCAweDAwLCAweGYwLCAweDAwKSwKKwlQSFlSRUdTKDB4MDk0MCwgMHgwOTNjLCAweDA5MzgsIDB4MDFiYiwgMHgwMWJjLCAweDAxYmMpLAorICB9LAorICB7CS5mcmVxCQkJPSAyNDEyLAorCVJBRElPUkVHUzMoMHgwMCwgMHgwMSwgMHgwMywgMHgwOSwgMHg2YywgMHgwOCwgMHgwOCwgMHgwNCwKKwkJICAgMHgxNiwgMHgwMSwgMHgwNCwgMHgwNCwgMHgwNCwgMHg4ZiwgMHgzMCwgMHgwMCwKKwkJICAgMHgwMCwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwNCwgMHgwMCwgMHg3MCwgMHgwMCwKKwkJICAgMHgwZiwgMHgwMCwgMHgwZSwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwNCwgMHgwMCwKKwkJICAgMHg3MCwgMHgwMCwgMHgwZiwgMHgwMCwgMHgwZSksCisJUEhZUkVHUygweDAzYzksIDB4MDNjNSwgMHgwM2MxLCAweDA0M2EsIDB4MDQzZiwgMHgwNDQzKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gMjQxNywKKwlSQURJT1JFR1MzKDB4MDAsIDB4MDEsIDB4MDMsIDB4MDksIDB4NzEsIDB4MDgsIDB4MDgsIDB4MDQsCisJCSAgIDB4MTYsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDUsIDB4OGYsIDB4MzAsIDB4MDAsCisJCSAgIDB4MDAsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NzAsIDB4MDAsCisJCSAgIDB4MGYsIDB4MDAsIDB4MGUsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDQsIDB4MDAsCisJCSAgIDB4NzAsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MGUpLAorCVBIWVJFR1MoMHgwM2NiLCAweDAzYzcsIDB4MDNjMywgMHgwNDM4LCAweDA0M2QsIDB4MDQ0MSksCisgIH0sCisgIHsJLmZyZXEJCQk9IDI0MjIsCisJUkFESU9SRUdTMygweDAwLCAweDAxLCAweDAzLCAweDA5LCAweDc2LCAweDA4LCAweDA4LCAweDA0LAorCQkgICAweDE2LCAweDAxLCAweDA1LCAweDA1LCAweDA1LCAweDhmLCAweDMwLCAweDAwLAorCQkgICAweDAwLCAweDAwLCAweGZmLCAweDAwLCAweDA0LCAweDAwLCAweDcwLCAweDAwLAorCQkgICAweDBmLCAweDAwLCAweDBlLCAweDAwLCAweGZmLCAweDAwLCAweDA0LCAweDAwLAorCQkgICAweDcwLCAweDAwLCAweDBmLCAweDAwLCAweDBlKSwKKwlQSFlSRUdTKDB4MDNjZCwgMHgwM2M5LCAweDAzYzUsIDB4MDQzNiwgMHgwNDNhLCAweDA0M2YpLAorICB9LAorICB7CS5mcmVxCQkJPSAyNDI3LAorCVJBRElPUkVHUzMoMHgwMCwgMHgwMSwgMHgwMywgMHgwOSwgMHg3YiwgMHgwOCwgMHgwOCwgMHgwNCwKKwkJICAgMHgxNiwgMHgwMSwgMHgwNSwgMHgwNSwgMHgwNSwgMHg4ZiwgMHgzMCwgMHgwMCwKKwkJICAgMHgwMCwgMHgwMCwgMHhmZCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg3MCwgMHgwMCwKKwkJICAgMHgwZiwgMHgwMCwgMHgwZSwgMHgwMCwgMHhmZCwgMHgwMCwgMHgwNCwgMHgwMCwKKwkJICAgMHg3MCwgMHgwMCwgMHgwZiwgMHgwMCwgMHgwZSksCisJUEhZUkVHUygweDAzY2YsIDB4MDNjYiwgMHgwM2M3LCAweDA0MzQsIDB4MDQzOCwgMHgwNDNkKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gMjQzMiwKKwlSQURJT1JFR1MzKDB4MDAsIDB4MDEsIDB4MDMsIDB4MDksIDB4ODAsIDB4MDgsIDB4MDgsIDB4MDQsCisJCSAgIDB4MTYsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDUsIDB4OGYsIDB4MzAsIDB4MDAsCisJCSAgIDB4MDAsIDB4MDAsIDB4ZmIsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NzAsIDB4MDAsCisJCSAgIDB4MGYsIDB4MDAsIDB4MGUsIDB4MDAsIDB4ZmIsIDB4MDAsIDB4MDQsIDB4MDAsCisJCSAgIDB4NzAsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MGUpLAorCVBIWVJFR1MoMHgwM2QxLCAweDAzY2QsIDB4MDNjOSwgMHgwNDMxLCAweDA0MzYsIDB4MDQzYSksCisgIH0sCisgIHsJLmZyZXEJCQk9IDI0MzcsCisJUkFESU9SRUdTMygweDAwLCAweDAxLCAweDAzLCAweDA5LCAweDg1LCAweDA4LCAweDA4LCAweDA0LAorCQkgICAweDE2LCAweDAxLCAweDA1LCAweDA1LCAweDA1LCAweDhmLCAweDMwLCAweDAwLAorCQkgICAweDAwLCAweDAwLCAweGZhLCAweDAwLCAweDA0LCAweDAwLCAweDcwLCAweDAwLAorCQkgICAweDBmLCAweDAwLCAweDBlLCAweDAwLCAweGZhLCAweDAwLCAweDA0LCAweDAwLAorCQkgICAweDcwLCAweDAwLCAweDBmLCAweDAwLCAweDBlKSwKKwlQSFlSRUdTKDB4MDNkMywgMHgwM2NmLCAweDAzY2IsIDB4MDQyZiwgMHgwNDM0LCAweDA0MzgpLAorICB9LAorICB7CS5mcmVxCQkJPSAyNDQyLAorCVJBRElPUkVHUzMoMHgwMCwgMHgwMSwgMHgwMywgMHgwOSwgMHg4YSwgMHgwOCwgMHgwOCwgMHgwNCwKKwkJICAgMHgxNiwgMHgwMSwgMHgwNSwgMHgwNSwgMHgwNSwgMHg4ZiwgMHgzMCwgMHgwMCwKKwkJICAgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg3MCwgMHgwMCwKKwkJICAgMHgwZiwgMHgwMCwgMHgwZSwgMHgwMCwgMHhmOCwgMHgwMCwgMHgwNCwgMHgwMCwKKwkJICAgMHg3MCwgMHgwMCwgMHgwZiwgMHgwMCwgMHgwZSksCisJUEhZUkVHUygweDAzZDUsIDB4MDNkMSwgMHgwM2NkLCAweDA0MmQsIDB4MDQzMSwgMHgwNDM2KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gMjQ0NywKKwlSQURJT1JFR1MzKDB4MDAsIDB4MDEsIDB4MDMsIDB4MDksIDB4OGYsIDB4MDgsIDB4MDgsIDB4MDQsCisJCSAgIDB4MTYsIDB4MDEsIDB4MDYsIDB4MDYsIDB4MDYsIDB4OGYsIDB4MzAsIDB4MDAsCisJCSAgIDB4MDAsIDB4MDAsIDB4ZjcsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NzAsIDB4MDAsCisJCSAgIDB4MGYsIDB4MDAsIDB4MGUsIDB4MDAsIDB4ZjcsIDB4MDAsIDB4MDQsIDB4MDAsCisJCSAgIDB4NzAsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MGUpLAorCVBIWVJFR1MoMHgwM2Q3LCAweDAzZDMsIDB4MDNjZiwgMHgwNDJiLCAweDA0MmYsIDB4MDQzNCksCisgIH0sCisgIHsJLmZyZXEJCQk9IDI0NTIsCisJUkFESU9SRUdTMygweDAwLCAweDAxLCAweDAzLCAweDA5LCAweDk0LCAweDA4LCAweDA4LCAweDA0LAorCQkgICAweDE2LCAweDAxLCAweDA2LCAweDA2LCAweDA2LCAweDhmLCAweDMwLCAweDAwLAorCQkgICAweDAwLCAweDAwLCAweGY2LCAweDAwLCAweDA0LCAweDAwLCAweDcwLCAweDAwLAorCQkgICAweDBmLCAweDAwLCAweDBlLCAweDAwLCAweGY2LCAweDAwLCAweDA0LCAweDAwLAorCQkgICAweDcwLCAweDAwLCAweDBmLCAweDAwLCAweDBlKSwKKwlQSFlSRUdTKDB4MDNkOSwgMHgwM2Q1LCAweDAzZDEsIDB4MDQyOSwgMHgwNDJkLCAweDA0MzEpLAorICB9LAorICB7CS5mcmVxCQkJPSAyNDU3LAorCVJBRElPUkVHUzMoMHgwMCwgMHgwMSwgMHgwMywgMHgwOSwgMHg5OSwgMHgwOCwgMHgwOCwgMHgwNCwKKwkJICAgMHgxNiwgMHgwMSwgMHgwNiwgMHgwNiwgMHgwNiwgMHg4ZiwgMHgzMCwgMHgwMCwKKwkJICAgMHgwMCwgMHgwMCwgMHhmNSwgMHgwMCwgMHgwNCwgMHgwMCwgMHg3MCwgMHgwMCwKKwkJICAgMHgwZiwgMHgwMCwgMHgwZSwgMHgwMCwgMHhmNSwgMHgwMCwgMHgwNCwgMHgwMCwKKwkJICAgMHg3MCwgMHgwMCwgMHgwZiwgMHgwMCwgMHgwZSksCisJUEhZUkVHUygweDAzZGIsIDB4MDNkNywgMHgwM2QzLCAweDA0MjcsIDB4MDQyYiwgMHgwNDJmKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gMjQ2MiwKKwlSQURJT1JFR1MzKDB4MDAsIDB4MDEsIDB4MDMsIDB4MDksIDB4OWUsIDB4MDgsIDB4MDgsIDB4MDQsCisJCSAgIDB4MTYsIDB4MDEsIDB4MDYsIDB4MDYsIDB4MDYsIDB4OGYsIDB4MzAsIDB4MDAsCisJCSAgIDB4MDAsIDB4MDAsIDB4ZjQsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NzAsIDB4MDAsCisJCSAgIDB4MGYsIDB4MDAsIDB4MGUsIDB4MDAsIDB4ZjQsIDB4MDAsIDB4MDQsIDB4MDAsCisJCSAgIDB4NzAsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MGUpLAorCVBIWVJFR1MoMHgwM2RkLCAweDAzZDksIDB4MDNkNSwgMHgwNDI0LCAweDA0MjksIDB4MDQyZCksCisgIH0sCisgIHsJLmZyZXEJCQk9IDI0NjcsCisJUkFESU9SRUdTMygweDAwLCAweDAxLCAweDAzLCAweDA5LCAweGEzLCAweDA4LCAweDA4LCAweDA0LAorCQkgICAweDE2LCAweDAxLCAweDA2LCAweDA2LCAweDA2LCAweDhmLCAweDMwLCAweDAwLAorCQkgICAweDAwLCAweDAwLCAweGYzLCAweDAwLCAweDA0LCAweDAwLCAweDcwLCAweDAwLAorCQkgICAweDBmLCAweDAwLCAweDBlLCAweDAwLCAweGYzLCAweDAwLCAweDA0LCAweDAwLAorCQkgICAweDcwLCAweDAwLCAweDBmLCAweDAwLCAweDBlKSwKKwlQSFlSRUdTKDB4MDNkZiwgMHgwM2RiLCAweDAzZDcsIDB4MDQyMiwgMHgwNDI3LCAweDA0MmIpLAorICB9LAorICB7CS5mcmVxCQkJPSAyNDcyLAorCVJBRElPUkVHUzMoMHgwMCwgMHgwMSwgMHgwMywgMHgwOSwgMHhhOCwgMHgwOCwgMHgwOCwgMHgwNCwKKwkJICAgMHgxNiwgMHgwMSwgMHgwNywgMHgwNywgMHgwNywgMHg4ZiwgMHgzMCwgMHgwMCwKKwkJICAgMHgwMCwgMHgwMCwgMHhmMiwgMHgwMCwgMHgwNCwgMHgwMCwgMHg3MCwgMHgwMCwKKwkJICAgMHgwZiwgMHgwMCwgMHgwZSwgMHgwMCwgMHhmMiwgMHgwMCwgMHgwNCwgMHgwMCwKKwkJICAgMHg3MCwgMHgwMCwgMHgwZiwgMHgwMCwgMHgwZSksCisJUEhZUkVHUygweDAzZTEsIDB4MDNkZCwgMHgwM2Q5LCAweDA0MjAsIDB4MDQyNCwgMHgwNDI5KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gMjQ4NCwKKwlSQURJT1JFR1MzKDB4ZmYsIDB4MDEsIDB4MDMsIDB4MDksIDB4YjQsIDB4MDgsIDB4MDgsIDB4MDQsCisJCSAgIDB4MTYsIDB4MDEsIDB4MDcsIDB4MDcsIDB4MDcsIDB4OGYsIDB4MzAsIDB4MDAsCisJCSAgIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NzAsIDB4MDAsCisJCSAgIDB4MGYsIDB4MDAsIDB4MGUsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4MDQsIDB4MDAsCisJCSAgIDB4NzAsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MGUpLAorCVBIWVJFR1MoMHgwM2U2LCAweDAzZTIsIDB4MDNkZSwgMHgwNDFiLCAweDA0MWYsIDB4MDQyNCksCisgIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGI0M19ucGh5X2NoYW5uZWx0YWJfZW50cnlfcmV2MyBiNDNfbnBoeV9jaGFubmVsdGFiX3JldjVbXSA9IHsKKyAgewkuZnJlcQkJCT0gNDkyMCwKKwlSQURJT1JFR1MzKDB4ZmYsIDB4MDEsIDB4MDEsIDB4MDEsIDB4ZWMsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OGYsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MGIsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MGYsCisJCSAgIDB4MDAsIDB4OWYsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MGIsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MGYsIDB4MDAsIDB4NmYsIDB4MDApLAorCVBIWVJFR1MoMHgwN2I0LCAweDA3YjAsIDB4MDdhYywgMHgwMjE0LCAweDAyMTUsIDB4MDIxNiksCisgIH0sCisgIHsJLmZyZXEJCQk9IDQ5MzAsCisJUkFESU9SRUdTMygweGZmLCAweDAxLCAweDAxLCAweDAxLCAweGVkLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDhmLCAweDBmLCAweDAwLAorCQkgICAweGZmLCAweGZmLCAweDAwLCAweDBiLCAweDAwLCAweDcwLCAweDAwLCAweDBlLAorCQkgICAweDAwLCAweDlmLCAweDAwLCAweGZmLCAweDAwLCAweDBiLCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDBlLCAweDAwLCAweDZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDdiOCwgMHgwN2I0LCAweDA3YjAsIDB4MDIxMywgMHgwMjE0LCAweDAyMTUpLAorICB9LAorICB7CS5mcmVxCQkJPSA0OTQwLAorCVJBRElPUkVHUzMoMHhmZiwgMHgwMSwgMHgwMSwgMHgwMSwgMHhlZSwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4ZiwgMHgwZiwgMHgwMCwKKwkJICAgMHhmZiwgMHhmZiwgMHgwMCwgMHgwYiwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwZSwKKwkJICAgMHgwMCwgMHg5ZiwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwYiwgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwZSwgMHgwMCwgMHg2ZiwgMHgwMCksCisJUEhZUkVHUygweDA3YmMsIDB4MDdiOCwgMHgwN2I0LCAweDAyMTIsIDB4MDIxMywgMHgwMjE0KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNDk1MCwKKwlSQURJT1JFR1MzKDB4ZmYsIDB4MDEsIDB4MDEsIDB4MDEsIDB4ZWYsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OGYsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MGIsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MGUsCisJCSAgIDB4MDAsIDB4OWYsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MGIsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MGUsIDB4MDAsIDB4NmYsIDB4MDApLAorCVBIWVJFR1MoMHgwN2MwLCAweDA3YmMsIDB4MDdiOCwgMHgwMjExLCAweDAyMTIsIDB4MDIxMyksCisgIH0sCisgIHsJLmZyZXEJCQk9IDQ5NjAsCisJUkFESU9SRUdTMygweGZmLCAweDAxLCAweDAxLCAweDAxLCAweGYwLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDhmLCAweDBmLCAweDAwLAorCQkgICAweGZmLCAweGZmLCAweDAwLCAweDBhLCAweDAwLCAweDcwLCAweDAwLCAweDBlLAorCQkgICAweDAwLCAweDlmLCAweDAwLCAweGZmLCAweDAwLCAweDBhLCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDBlLCAweDAwLCAweDZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDdjNCwgMHgwN2MwLCAweDA3YmMsIDB4MDIwZiwgMHgwMjExLCAweDAyMTIpLAorICB9LAorICB7CS5mcmVxCQkJPSA0OTcwLAorCVJBRElPUkVHUzMoMHhmZiwgMHgwMSwgMHgwMSwgMHgwMSwgMHhmMSwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHg4ZiwgMHgwZiwgMHgwMCwKKwkJICAgMHhmZiwgMHhmZiwgMHgwMCwgMHgwYSwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwZCwKKwkJICAgMHgwMCwgMHg5ZiwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwYSwgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwZCwgMHgwMCwgMHg2ZiwgMHgwMCksCisJUEhZUkVHUygweDA3YzgsIDB4MDdjNCwgMHgwN2MwLCAweDAyMGUsIDB4MDIwZiwgMHgwMjExKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNDk4MCwKKwlSQURJT1JFR1MzKDB4ZmYsIDB4MDEsIDB4MDEsIDB4MDEsIDB4ZjIsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4OGYsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MGEsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MGQsCisJCSAgIDB4MDAsIDB4OWYsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MGEsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MGQsIDB4MDAsIDB4NmYsIDB4MDApLAorCVBIWVJFR1MoMHgwN2NjLCAweDA3YzgsIDB4MDdjNCwgMHgwMjBkLCAweDAyMGUsIDB4MDIwZiksCisgIH0sCisgIHsJLmZyZXEJCQk9IDQ5OTAsCisJUkFESU9SRUdTMygweGZmLCAweDAxLCAweDAxLCAweDAxLCAweGYzLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDhmLCAweDBmLCAweDAwLAorCQkgICAweGZmLCAweGZmLCAweDAwLCAweDBhLCAweDAwLCAweDcwLCAweDAwLCAweDBkLAorCQkgICAweDAwLCAweDlmLCAweDAwLCAweGZmLCAweDAwLCAweDBhLCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDBkLCAweDAwLCAweDZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDdkMCwgMHgwN2NjLCAweDA3YzgsIDB4MDIwYywgMHgwMjBkLCAweDAyMGUpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MDAwLAorCVJBRElPUkVHUzMoMHhmZiwgMHgwMSwgMHgwMSwgMHgwMSwgMHhmNCwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHg4ZiwgMHgwZiwgMHgwMCwKKwkJICAgMHhmZiwgMHhmZiwgMHgwMCwgMHgwYSwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwZCwKKwkJICAgMHgwMCwgMHg5ZiwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwYSwgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwZCwgMHgwMCwgMHg2ZiwgMHgwMCksCisJUEhZUkVHUygweDA3ZDQsIDB4MDdkMCwgMHgwN2NjLCAweDAyMGIsIDB4MDIwYywgMHgwMjBkKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTAxMCwKKwlSQURJT1JFR1MzKDB4ZmYsIDB4MDEsIDB4MDEsIDB4MDEsIDB4ZjUsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4OGYsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MGEsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MGQsCisJCSAgIDB4MDAsIDB4OWYsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MGEsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MGQsIDB4MDAsIDB4NmYsIDB4MDApLAorCVBIWVJFR1MoMHgwN2Q4LCAweDA3ZDQsIDB4MDdkMCwgMHgwMjBhLCAweDAyMGIsIDB4MDIwYyksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUwMjAsCisJUkFESU9SRUdTMygweGY3LCAweDAxLCAweDAxLCAweDAxLCAweGY2LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDhmLCAweDBmLCAweDAwLAorCQkgICAweGZmLCAweGZmLCAweDAwLCAweDA5LCAweDAwLCAweDcwLCAweDAwLCAweDBkLAorCQkgICAweDAwLCAweDlmLCAweDAwLCAweGZmLCAweDAwLCAweDA5LCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDBkLCAweDAwLCAweDZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDdkYywgMHgwN2Q4LCAweDA3ZDQsIDB4MDIwOSwgMHgwMjBhLCAweDAyMGIpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MDMwLAorCVJBRElPUkVHUzMoMHhmNywgMHgwMSwgMHgwMSwgMHgwMSwgMHhmNywgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHg4ZiwgMHgwZiwgMHgwMCwKKwkJICAgMHhmZiwgMHhmZiwgMHgwMCwgMHgwOSwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwYywKKwkJICAgMHgwMCwgMHg5ZiwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwOSwgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwYywgMHgwMCwgMHg2ZiwgMHgwMCksCisJUEhZUkVHUygweDA3ZTAsIDB4MDdkYywgMHgwN2Q4LCAweDAyMDgsIDB4MDIwOSwgMHgwMjBhKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTA0MCwKKwlSQURJT1JFR1MzKDB4ZWYsIDB4MDEsIDB4MDEsIDB4MDEsIDB4ZjgsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4OGYsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZmYsIDB4ZmUsIDB4MDAsIDB4MDksIDB4MDAsIDB4NzAsIDB4MDAsIDB4MGMsCisJCSAgIDB4MDAsIDB4OWYsIDB4MDAsIDB4ZmUsIDB4MDAsIDB4MDksIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MGMsIDB4MDAsIDB4NmYsIDB4MDApLAorCVBIWVJFR1MoMHgwN2U0LCAweDA3ZTAsIDB4MDdkYywgMHgwMjA3LCAweDAyMDgsIDB4MDIwOSksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUwNTAsCisJUkFESU9SRUdTMygweGVmLCAweDAxLCAweDAxLCAweDAxLCAweGY5LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDhmLCAweDBmLCAweDAwLAorCQkgICAweGZmLCAweGZlLCAweDAwLCAweDA5LCAweDAwLCAweDcwLCAweDAwLCAweDBjLAorCQkgICAweDAwLCAweDlmLCAweDAwLCAweGZlLCAweDAwLCAweDA5LCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDBjLCAweDAwLCAweDZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDdlOCwgMHgwN2U0LCAweDA3ZTAsIDB4MDIwNiwgMHgwMjA3LCAweDAyMDgpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MDYwLAorCVJBRElPUkVHUzMoMHhlNiwgMHgwMSwgMHgwMSwgMHgwMSwgMHhmYSwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHg4ZiwgMHgwZiwgMHgwMCwKKwkJICAgMHhmZiwgMHhmZCwgMHgwMCwgMHgwOSwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwYywKKwkJICAgMHgwMCwgMHg5ZiwgMHgwMCwgMHhmZCwgMHgwMCwgMHgwOSwgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwYywgMHgwMCwgMHg2ZiwgMHgwMCksCisJUEhZUkVHUygweDA3ZWMsIDB4MDdlOCwgMHgwN2U0LCAweDAyMDUsIDB4MDIwNiwgMHgwMjA3KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTA3MCwKKwlSQURJT1JFR1MzKDB4ZTYsIDB4MDEsIDB4MDEsIDB4MDEsIDB4ZmIsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4OGYsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZmYsIDB4ZmQsIDB4MDAsIDB4MDgsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MGIsCisJCSAgIDB4MDAsIDB4OWYsIDB4MDAsIDB4ZmQsIDB4MDAsIDB4MDgsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MGIsIDB4MDAsIDB4NmYsIDB4MDApLAorCVBIWVJFR1MoMHgwN2YwLCAweDA3ZWMsIDB4MDdlOCwgMHgwMjA0LCAweDAyMDUsIDB4MDIwNiksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUwODAsCisJUkFESU9SRUdTMygweGRlLCAweDAxLCAweDAxLCAweDAxLCAweGZjLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDhmLCAweDBmLCAweDAwLAorCQkgICAweGZmLCAweGZjLCAweDAwLCAweDA4LCAweDAwLCAweDcwLCAweDAwLCAweDBiLAorCQkgICAweDAwLCAweDlmLCAweDAwLCAweGZjLCAweDAwLCAweDA4LCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDBiLCAweDAwLCAweDZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDdmNCwgMHgwN2YwLCAweDA3ZWMsIDB4MDIwMywgMHgwMjA0LCAweDAyMDUpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MDkwLAorCVJBRElPUkVHUzMoMHhkZSwgMHgwMSwgMHgwMSwgMHgwMSwgMHhmZCwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHg4ZiwgMHgwZiwgMHgwMCwKKwkJICAgMHhmZiwgMHhmYywgMHgwMCwgMHgwOCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwYiwKKwkJICAgMHgwMCwgMHg5ZiwgMHgwMCwgMHhmYywgMHgwMCwgMHgwOCwgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwYiwgMHgwMCwgMHg2ZiwgMHgwMCksCisJUEhZUkVHUygweDA3ZjgsIDB4MDdmNCwgMHgwN2YwLCAweDAyMDIsIDB4MDIwMywgMHgwMjA0KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTEwMCwKKwlSQURJT1JFR1MzKDB4ZDYsIDB4MDEsIDB4MDEsIDB4MDEsIDB4ZmUsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDIsIDB4MDIsIDB4MDIsIDB4OGYsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZmYsIDB4ZmMsIDB4MDAsIDB4MDgsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MGIsCisJCSAgIDB4MDAsIDB4OWYsIDB4MDAsIDB4ZmMsIDB4MDAsIDB4MDgsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MGIsIDB4MDAsIDB4NmYsIDB4MDApLAorCVBIWVJFR1MoMHgwN2ZjLCAweDA3ZjgsIDB4MDdmNCwgMHgwMjAxLCAweDAyMDIsIDB4MDIwMyksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUxMTAsCisJUkFESU9SRUdTMygweGQ2LCAweDAxLCAweDAxLCAweDAxLCAweGZmLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAyLCAweDAyLCAweDAyLCAweDhmLCAweDBmLCAweDAwLAorCQkgICAweGZmLCAweGZjLCAweDAwLCAweDA4LCAweDAwLCAweDcwLCAweDAwLCAweDBiLAorCQkgICAweDAwLCAweDlmLCAweDAwLCAweGZjLCAweDAwLCAweDA4LCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDBiLCAweDAwLCAweDZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDgwMCwgMHgwN2ZjLCAweDA3ZjgsIDB4MDIwMCwgMHgwMjAxLCAweDAyMDIpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MTIwLAorCVJBRElPUkVHUzMoMHhjZSwgMHgwMSwgMHgwMSwgMHgwMiwgMHgwMCwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMiwgMHgwMiwgMHgwMiwgMHg4ZiwgMHgwZiwgMHgwMCwKKwkJICAgMHhmZiwgMHhmYywgMHgwMCwgMHgwOCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwYiwKKwkJICAgMHgwMCwgMHg5ZiwgMHgwMCwgMHhmYywgMHgwMCwgMHgwOCwgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwYiwgMHgwMCwgMHg2ZiwgMHgwMCksCisJUEhZUkVHUygweDA4MDQsIDB4MDgwMCwgMHgwN2ZjLCAweDAxZmYsIDB4MDIwMCwgMHgwMjAxKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTEzMCwKKwlSQURJT1JFR1MzKDB4Y2UsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDIsIDB4MDIsIDB4MDIsIDB4OGYsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZmYsIDB4ZmIsIDB4MDAsIDB4MDgsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MGEsCisJCSAgIDB4MDAsIDB4OWYsIDB4MDAsIDB4ZmIsIDB4MDAsIDB4MDgsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MGEsIDB4MDAsIDB4NmYsIDB4MDApLAorCVBIWVJFR1MoMHgwODA4LCAweDA4MDQsIDB4MDgwMCwgMHgwMWZlLCAweDAxZmYsIDB4MDIwMCksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUxNDAsCisJUkFESU9SRUdTMygweGM2LCAweDAxLCAweDAxLCAweDAyLCAweDAyLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAyLCAweDAyLCAweDAyLCAweDhmLCAweDBmLCAweDAwLAorCQkgICAweGZmLCAweGZiLCAweDAwLCAweDA3LCAweDAwLCAweDcwLCAweDAwLCAweDBhLAorCQkgICAweDAwLCAweDlmLCAweDAwLCAweGZiLCAweDAwLCAweDA3LCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDBhLCAweDAwLCAweDZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDgwYywgMHgwODA4LCAweDA4MDQsIDB4MDFmZCwgMHgwMWZlLCAweDAxZmYpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MTYwLAorCVJBRElPUkVHUzMoMHhiZSwgMHgwMSwgMHgwMSwgMHgwMiwgMHgwNCwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMiwgMHgwMiwgMHgwMiwgMHg4ZiwgMHgwZiwgMHgwMCwKKwkJICAgMHhmZiwgMHhmYiwgMHgwMCwgMHgwNywgMHgwMCwgMHg3MCwgMHgwMCwgMHgwOSwKKwkJICAgMHgwMCwgMHg5ZSwgMHgwMCwgMHhmYiwgMHgwMCwgMHgwNywgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHgwMCksCisJUEhZUkVHUygweDA4MTQsIDB4MDgxMCwgMHgwODBjLCAweDAxZmIsIDB4MDFmYywgMHgwMWZkKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTE3MCwKKwlSQURJT1JFR1MzKDB4YmUsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MDUsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDIsIDB4MDIsIDB4MDIsIDB4OGYsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZmYsIDB4ZmIsIDB4MDAsIDB4MDYsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDksCisJCSAgIDB4MDAsIDB4OWUsIDB4MDAsIDB4ZmIsIDB4MDAsIDB4MDYsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MDksIDB4MDAsIDB4NmUsIDB4MDApLAorCVBIWVJFR1MoMHgwODE4LCAweDA4MTQsIDB4MDgxMCwgMHgwMWZhLCAweDAxZmIsIDB4MDFmYyksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUxODAsCisJUkFESU9SRUdTMygweGI2LCAweDAxLCAweDAxLCAweDAyLCAweDA2LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAyLCAweDAyLCAweDAyLCAweDhmLCAweDBmLCAweDAwLAorCQkgICAweGZmLCAweGZhLCAweDAwLCAweDA2LCAweDAwLCAweDcwLCAweDAwLCAweDA5LAorCQkgICAweDAwLCAweDllLCAweDAwLCAweGZhLCAweDAwLCAweDA2LCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDA5LCAweDAwLCAweDZlLCAweDAwKSwKKwlQSFlSRUdTKDB4MDgxYywgMHgwODE4LCAweDA4MTQsIDB4MDFmOSwgMHgwMWZhLCAweDAxZmIpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MTkwLAorCVJBRElPUkVHUzMoMHhiNiwgMHgwMSwgMHgwMSwgMHgwMiwgMHgwNywgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMiwgMHgwMiwgMHgwMiwgMHg4ZiwgMHgwZiwgMHgwMCwKKwkJICAgMHhmZiwgMHhmYSwgMHgwMCwgMHgwNiwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwOSwKKwkJICAgMHgwMCwgMHg5ZSwgMHgwMCwgMHhmYSwgMHgwMCwgMHgwNiwgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHgwMCksCisJUEhZUkVHUygweDA4MjAsIDB4MDgxYywgMHgwODE4LCAweDAxZjgsIDB4MDFmOSwgMHgwMWZhKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTIwMCwKKwlSQURJT1JFR1MzKDB4YWYsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MDgsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDIsIDB4MDIsIDB4MDIsIDB4OGYsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZmYsIDB4ZmEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDksCisJCSAgIDB4MDAsIDB4OWUsIDB4MDAsIDB4ZmEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MDksIDB4MDAsIDB4NmUsIDB4MDApLAorCVBIWVJFR1MoMHgwODI0LCAweDA4MjAsIDB4MDgxYywgMHgwMWY3LCAweDAxZjgsIDB4MDFmOSksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUyMTAsCisJUkFESU9SRUdTMygweGFmLCAweDAxLCAweDAxLCAweDAyLCAweDA5LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAyLCAweDAyLCAweDAyLCAweDhmLCAweDBmLCAweDAwLAorCQkgICAweGZmLCAweGZhLCAweDAwLCAweDA2LCAweDAwLCAweDcwLCAweDAwLCAweDA5LAorCQkgICAweDAwLCAweDllLCAweDAwLCAweGZhLCAweDAwLCAweDA2LCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDA5LCAweDAwLCAweDZlLCAweDAwKSwKKwlQSFlSRUdTKDB4MDgyOCwgMHgwODI0LCAweDA4MjAsIDB4MDFmNiwgMHgwMWY3LCAweDAxZjgpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MjIwLAorCVJBRElPUkVHUzMoMHhhNywgMHgwMSwgMHgwMSwgMHgwMiwgMHgwYSwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMiwgMHgwMiwgMHgwMiwgMHg4ZiwgMHgwZiwgMHgwMCwKKwkJICAgMHhmZiwgMHhmYSwgMHgwMCwgMHgwNiwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwOSwKKwkJICAgMHgwMCwgMHg5ZSwgMHgwMCwgMHhmYSwgMHgwMCwgMHgwNiwgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHgwMCksCisJUEhZUkVHUygweDA4MmMsIDB4MDgyOCwgMHgwODI0LCAweDAxZjUsIDB4MDFmNiwgMHgwMWY3KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTIzMCwKKwlSQURJT1JFR1MzKDB4YTcsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MGIsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDIsIDB4MDIsIDB4MDIsIDB4OGYsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZmYsIDB4ZWEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDgsCisJCSAgIDB4MDAsIDB4OWUsIDB4MDAsIDB4ZWEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MDgsIDB4MDAsIDB4NmUsIDB4MDApLAorCVBIWVJFR1MoMHgwODMwLCAweDA4MmMsIDB4MDgyOCwgMHgwMWY0LCAweDAxZjUsIDB4MDFmNiksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUyNDAsCisJUkFESU9SRUdTMygweGEwLCAweDAxLCAweDAxLCAweDAyLCAweDBjLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAyLCAweDAyLCAweDAyLCAweDhmLCAweDBmLCAweDAwLAorCQkgICAweGZmLCAweGU5LCAweDAwLCAweDA1LCAweDAwLCAweDcwLCAweDAwLCAweDA4LAorCQkgICAweDAwLCAweDlkLCAweDAwLCAweGU5LCAweDAwLCAweDA1LCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDA4LCAweDAwLCAweDZkLCAweDAwKSwKKwlQSFlSRUdTKDB4MDgzNCwgMHgwODMwLCAweDA4MmMsIDB4MDFmMywgMHgwMWY0LCAweDAxZjUpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MjUwLAorCVJBRElPUkVHUzMoMHhhMCwgMHgwMSwgMHgwMSwgMHgwMiwgMHgwZCwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMiwgMHgwMiwgMHgwMiwgMHg4ZiwgMHgwZiwgMHgwMCwKKwkJICAgMHhmZiwgMHhlOSwgMHgwMCwgMHgwNSwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwOCwKKwkJICAgMHgwMCwgMHg5ZCwgMHgwMCwgMHhlOSwgMHgwMCwgMHgwNSwgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwOCwgMHgwMCwgMHg2ZCwgMHgwMCksCisJUEhZUkVHUygweDA4MzgsIDB4MDgzNCwgMHgwODMwLCAweDAxZjIsIDB4MDFmMywgMHgwMWY0KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTI2MCwKKwlSQURJT1JFR1MzKDB4OTgsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MGUsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDIsIDB4MDIsIDB4MDIsIDB4OGYsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZmYsIDB4ZDksIDB4MDAsIDB4MDUsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDgsCisJCSAgIDB4MDAsIDB4OWQsIDB4MDAsIDB4ZDksIDB4MDAsIDB4MDUsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MDgsIDB4MDAsIDB4NmQsIDB4MDApLAorCVBIWVJFR1MoMHgwODNjLCAweDA4MzgsIDB4MDgzNCwgMHgwMWYxLCAweDAxZjIsIDB4MDFmMyksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUyNzAsCisJUkFESU9SRUdTMygweDk4LCAweDAxLCAweDAxLCAweDAyLCAweDBmLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAzLCAweDAzLCAweDAzLCAweDhmLCAweDBmLCAweDAwLAorCQkgICAweGZmLCAweGQ4LCAweDAwLCAweDA0LCAweDAwLCAweDcwLCAweDAwLCAweDA3LAorCQkgICAweDAwLCAweDljLCAweDAwLCAweGQ4LCAweDAwLCAweDA0LCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDA3LCAweDAwLCAweDZjLCAweDAwKSwKKwlQSFlSRUdTKDB4MDg0MCwgMHgwODNjLCAweDA4MzgsIDB4MDFmMCwgMHgwMWYxLCAweDAxZjIpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MjgwLAorCVJBRElPUkVHUzMoMHg5MSwgMHgwMSwgMHgwMSwgMHgwMiwgMHgxMCwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMywgMHgwMywgMHgwMywgMHg4ZiwgMHgwZiwgMHgwMCwKKwkJICAgMHhmZiwgMHhjOCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwNywKKwkJICAgMHgwMCwgMHg5YywgMHgwMCwgMHhjOCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwNywgMHgwMCwgMHg2YywgMHgwMCksCisJUEhZUkVHUygweDA4NDQsIDB4MDg0MCwgMHgwODNjLCAweDAxZjAsIDB4MDFmMCwgMHgwMWYxKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTI5MCwKKwlSQURJT1JFR1MzKDB4OTEsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MTEsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDMsIDB4MDMsIDB4MDMsIDB4OGYsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZmYsIDB4YzgsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDcsCisJCSAgIDB4MDAsIDB4OWMsIDB4MDAsIDB4YzgsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MDcsIDB4MDAsIDB4NmMsIDB4MDApLAorCVBIWVJFR1MoMHgwODQ4LCAweDA4NDQsIDB4MDg0MCwgMHgwMWVmLCAweDAxZjAsIDB4MDFmMCksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUzMDAsCisJUkFESU9SRUdTMygweDhhLCAweDAxLCAweDAxLCAweDAyLCAweDEyLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAzLCAweDAzLCAweDAzLCAweDhmLCAweDBlLCAweDAwLAorCQkgICAweGZmLCAweGM4LCAweDAwLCAweDA0LCAweDAwLCAweDcwLCAweDAwLCAweDA3LAorCQkgICAweDAwLCAweDljLCAweDAwLCAweGM4LCAweDAwLCAweDA0LCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDA3LCAweDAwLCAweDZjLCAweDAwKSwKKwlQSFlSRUdTKDB4MDg0YywgMHgwODQ4LCAweDA4NDQsIDB4MDFlZSwgMHgwMWVmLCAweDAxZjApLAorICB9LAorICB7CS5mcmVxCQkJPSA1MzEwLAorCVJBRElPUkVHUzMoMHg4YSwgMHgwMSwgMHgwMSwgMHgwMiwgMHgxMywgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMywgMHgwMywgMHgwMywgMHg4ZiwgMHgwZSwgMHgwMCwKKwkJICAgMHhmZiwgMHhjOCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwNywKKwkJICAgMHgwMCwgMHg5YywgMHgwMCwgMHhjOCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwNywgMHgwMCwgMHg2YywgMHgwMCksCisJUEhZUkVHUygweDA4NTAsIDB4MDg0YywgMHgwODQ4LCAweDAxZWQsIDB4MDFlZSwgMHgwMWVmKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTMyMCwKKwlSQURJT1JFR1MzKDB4ODMsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MTQsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDMsIDB4MDMsIDB4MDMsIDB4OGYsIDB4MGUsIDB4MDAsCisJCSAgIDB4ZmYsIDB4YjgsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDcsCisJCSAgIDB4MDAsIDB4OWMsIDB4MDAsIDB4YjgsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MDcsIDB4MDAsIDB4NmMsIDB4MDApLAorCVBIWVJFR1MoMHgwODU0LCAweDA4NTAsIDB4MDg0YywgMHgwMWVjLCAweDAxZWQsIDB4MDFlZSksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUzMzAsCisJUkFESU9SRUdTMygweDgzLCAweDAxLCAweDAxLCAweDAyLCAweDE1LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAzLCAweDAzLCAweDAzLCAweDhmLCAweDBlLCAweDAwLAorCQkgICAweGZmLCAweGI3LCAweDAwLCAweDA0LCAweDAwLCAweDcwLCAweDAwLCAweDA3LAorCQkgICAweDAwLCAweDliLCAweDAwLCAweGI3LCAweDAwLCAweDA0LCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDA3LCAweDAwLCAweDZiLCAweDAwKSwKKwlQSFlSRUdTKDB4MDg1OCwgMHgwODU0LCAweDA4NTAsIDB4MDFlYiwgMHgwMWVjLCAweDAxZWQpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MzQwLAorCVJBRElPUkVHUzMoMHg3YywgMHgwMSwgMHgwMSwgMHgwMiwgMHgxNiwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMywgMHgwMywgMHgwMywgMHg4ZiwgMHgwZSwgMHgwMCwKKwkJICAgMHhmZiwgMHhiNywgMHgwMCwgMHgwMywgMHgwMCwgMHg3MCwgMHgwMCwgMHgwNywKKwkJICAgMHgwMCwgMHg5YiwgMHgwMCwgMHhiNywgMHgwMCwgMHgwMywgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwNywgMHgwMCwgMHg2YiwgMHgwMCksCisJUEhZUkVHUygweDA4NWMsIDB4MDg1OCwgMHgwODU0LCAweDAxZWEsIDB4MDFlYiwgMHgwMWVjKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTM1MCwKKwlSQURJT1JFR1MzKDB4N2MsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MTcsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDMsIDB4MDMsIDB4MDMsIDB4OGYsIDB4MGUsIDB4MDAsCisJCSAgIDB4ZmYsIDB4YTcsIDB4MDAsIDB4MDMsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDYsCisJCSAgIDB4MDAsIDB4OWIsIDB4MDAsIDB4YTcsIDB4MDAsIDB4MDMsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MDYsIDB4MDAsIDB4NmIsIDB4MDApLAorCVBIWVJFR1MoMHgwODYwLCAweDA4NWMsIDB4MDg1OCwgMHgwMWU5LCAweDAxZWEsIDB4MDFlYiksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUzNjAsCisJUkFESU9SRUdTMygweDc1LCAweDAxLCAweDAxLCAweDAyLCAweDE4LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAzLCAweDAzLCAweDAzLCAweDhmLCAweDBlLCAweDAwLAorCQkgICAweGZmLCAweGE2LCAweDAwLCAweDAzLCAweDAwLCAweDcwLCAweDAwLCAweDA2LAorCQkgICAweDAwLCAweDliLCAweDAwLCAweGE2LCAweDAwLCAweDAzLCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDA2LCAweDAwLCAweDZiLCAweDAwKSwKKwlQSFlSRUdTKDB4MDg2NCwgMHgwODYwLCAweDA4NWMsIDB4MDFlOCwgMHgwMWU5LCAweDAxZWEpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MzcwLAorCVJBRElPUkVHUzMoMHg3NSwgMHgwMSwgMHgwMSwgMHgwMiwgMHgxOSwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMywgMHgwMywgMHgwMywgMHg4ZiwgMHgwZSwgMHgwMCwKKwkJICAgMHhmZiwgMHhhNiwgMHgwMCwgMHgwMywgMHgwMCwgMHg3MCwgMHgwMCwgMHgwNiwKKwkJICAgMHgwMCwgMHg5YiwgMHgwMCwgMHhhNiwgMHgwMCwgMHgwMywgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwNiwgMHgwMCwgMHg1YiwgMHgwMCksCisJUEhZUkVHUygweDA4NjgsIDB4MDg2NCwgMHgwODYwLCAweDAxZTcsIDB4MDFlOCwgMHgwMWU5KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTM4MCwKKwlSQURJT1JFR1MzKDB4NmUsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MWEsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDMsIDB4MDMsIDB4MDMsIDB4OGYsIDB4MGUsIDB4MDAsCisJCSAgIDB4ZmYsIDB4OTYsIDB4MDAsIDB4MDMsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDYsCisJCSAgIDB4MDAsIDB4OWEsIDB4MDAsIDB4OTYsIDB4MDAsIDB4MDMsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MDYsIDB4MDAsIDB4NWEsIDB4MDApLAorCVBIWVJFR1MoMHgwODZjLCAweDA4NjgsIDB4MDg2NCwgMHgwMWU2LCAweDAxZTcsIDB4MDFlOCksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUzOTAsCisJUkFESU9SRUdTMygweDZlLCAweDAxLCAweDAxLCAweDAyLCAweDFiLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAzLCAweDAzLCAweDAzLCAweDhmLCAweDBlLCAweDAwLAorCQkgICAweGZmLCAweDk1LCAweDAwLCAweDAzLCAweDAwLCAweDcwLCAweDAwLCAweDA2LAorCQkgICAweDAwLCAweDlhLCAweDAwLCAweDk1LCAweDAwLCAweDAzLCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDA2LCAweDAwLCAweDVhLCAweDAwKSwKKwlQSFlSRUdTKDB4MDg3MCwgMHgwODZjLCAweDA4NjgsIDB4MDFlNSwgMHgwMWU2LCAweDAxZTcpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NDAwLAorCVJBRElPUkVHUzMoMHg2NywgMHgwMSwgMHgwMSwgMHgwMiwgMHgxYywgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMywgMHgwMywgMHgwMywgMHg4ZCwgMHgwZCwgMHgwMCwKKwkJICAgMHhjOCwgMHg5NSwgMHgwMCwgMHgwMywgMHgwMCwgMHg3MCwgMHgwMCwgMHgwNiwKKwkJICAgMHgwMCwgMHg5YSwgMHgwMCwgMHg5NSwgMHgwMCwgMHgwMywgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwNiwgMHgwMCwgMHg1YSwgMHgwMCksCisJUEhZUkVHUygweDA4NzQsIDB4MDg3MCwgMHgwODZjLCAweDAxZTUsIDB4MDFlNSwgMHgwMWU2KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTQxMCwKKwlSQURJT1JFR1MzKDB4NjcsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MWQsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDMsIDB4MDMsIDB4MDMsIDB4OGQsIDB4MGQsIDB4MDAsCisJCSAgIDB4YzgsIDB4OTUsIDB4MDAsIDB4MDMsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDUsCisJCSAgIDB4MDAsIDB4OWEsIDB4MDAsIDB4OTUsIDB4MDAsIDB4MDMsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MDUsIDB4MDAsIDB4NWEsIDB4MDApLAorCVBIWVJFR1MoMHgwODc4LCAweDA4NzQsIDB4MDg3MCwgMHgwMWU0LCAweDAxZTUsIDB4MDFlNSksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU0MjAsCisJUkFESU9SRUdTMygweDYxLCAweDAxLCAweDAxLCAweDAyLCAweDFlLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAzLCAweDAzLCAweDAzLCAweDhkLCAweDBkLCAweDAwLAorCQkgICAweGM4LCAweDk1LCAweDAwLCAweDAzLCAweDAwLCAweDcwLCAweDAwLCAweDA1LAorCQkgICAweDAwLCAweDlhLCAweDAwLCAweDk1LCAweDAwLCAweDAzLCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDA1LCAweDAwLCAweDVhLCAweDAwKSwKKwlQSFlSRUdTKDB4MDg3YywgMHgwODc4LCAweDA4NzQsIDB4MDFlMywgMHgwMWU0LCAweDAxZTUpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NDMwLAorCVJBRElPUkVHUzMoMHg2MSwgMHgwMSwgMHgwMSwgMHgwMiwgMHgxZiwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMywgMHgwMywgMHgwMywgMHg4ZCwgMHgwZCwgMHgwMCwKKwkJICAgMHhjOCwgMHg4NSwgMHgwMCwgMHgwMiwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwNSwKKwkJICAgMHgwMCwgMHg5OSwgMHgwMCwgMHg4NSwgMHgwMCwgMHgwMiwgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwNSwgMHgwMCwgMHg1OSwgMHgwMCksCisJUEhZUkVHUygweDA4ODAsIDB4MDg3YywgMHgwODc4LCAweDAxZTIsIDB4MDFlMywgMHgwMWU0KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTQ0MCwKKwlSQURJT1JFR1MzKDB4NWEsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MjAsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDQsIDB4MDQsIDB4MDQsIDB4OGQsIDB4MGQsIDB4MDAsCisJCSAgIDB4YzgsIDB4ODQsIDB4MDAsIDB4MDIsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDUsCisJCSAgIDB4MDAsIDB4OTksIDB4MDAsIDB4ODQsIDB4MDAsIDB4MDIsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MDUsIDB4MDAsIDB4NTksIDB4MDApLAorCVBIWVJFR1MoMHgwODg0LCAweDA4ODAsIDB4MDg3YywgMHgwMWUxLCAweDAxZTIsIDB4MDFlMyksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU0NTAsCisJUkFESU9SRUdTMygweDVhLCAweDAxLCAweDAxLCAweDAyLCAweDIxLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA0LCAweDA0LCAweDA0LCAweDhkLCAweDBkLCAweDAwLAorCQkgICAweGM4LCAweDg0LCAweDAwLCAweDAyLCAweDAwLCAweDcwLCAweDAwLCAweDA1LAorCQkgICAweDAwLCAweDk5LCAweDAwLCAweDg0LCAweDAwLCAweDAyLCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDA1LCAweDAwLCAweDU5LCAweDAwKSwKKwlQSFlSRUdTKDB4MDg4OCwgMHgwODg0LCAweDA4ODAsIDB4MDFlMCwgMHgwMWUxLCAweDAxZTIpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NDYwLAorCVJBRElPUkVHUzMoMHg1MywgMHgwMSwgMHgwMSwgMHgwMiwgMHgyMiwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNCwgMHgwNCwgMHgwNCwgMHg4ZCwgMHgwZCwgMHgwMCwKKwkJICAgMHhjOCwgMHg4NCwgMHgwMCwgMHgwMiwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwNCwKKwkJICAgMHgwMCwgMHg5OSwgMHgwMCwgMHg4NCwgMHgwMCwgMHgwMiwgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwNCwgMHgwMCwgMHg2OSwgMHgwMCksCisJUEhZUkVHUygweDA4OGMsIDB4MDg4OCwgMHgwODg0LCAweDAxZGYsIDB4MDFlMCwgMHgwMWUxKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTQ3MCwKKwlSQURJT1JFR1MzKDB4NTMsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MjMsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDQsIDB4MDQsIDB4MDQsIDB4OGQsIDB4MGQsIDB4MDAsCisJCSAgIDB4YzgsIDB4NzQsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDQsCisJCSAgIDB4MDAsIDB4OTksIDB4MDAsIDB4NzQsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MDQsIDB4MDAsIDB4NjksIDB4MDApLAorCVBIWVJFR1MoMHgwODkwLCAweDA4OGMsIDB4MDg4OCwgMHgwMWRlLCAweDAxZGYsIDB4MDFlMCksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU0ODAsCisJUkFESU9SRUdTMygweDRkLCAweDAxLCAweDAxLCAweDAyLCAweDI0LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA0LCAweDA0LCAweDA0LCAweDhkLCAweDBkLCAweDAwLAorCQkgICAweGM4LCAweDczLCAweDAwLCAweDAxLCAweDAwLCAweDcwLCAweDAwLCAweDA0LAorCQkgICAweDAwLCAweDk4LCAweDAwLCAweDczLCAweDAwLCAweDAxLCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDA0LCAweDAwLCAweDY4LCAweDAwKSwKKwlQSFlSRUdTKDB4MDg5NCwgMHgwODkwLCAweDA4OGMsIDB4MDFkZCwgMHgwMWRlLCAweDAxZGYpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NDkwLAorCVJBRElPUkVHUzMoMHg0ZCwgMHgwMSwgMHgwMSwgMHgwMiwgMHgyNSwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNCwgMHgwNCwgMHgwNCwgMHg4ZCwgMHgwZCwgMHgwMCwKKwkJICAgMHhjOCwgMHg3MywgMHgwMCwgMHgwMSwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwNCwKKwkJICAgMHgwMCwgMHg5OCwgMHgwMCwgMHg3MywgMHgwMCwgMHgwMSwgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwNCwgMHgwMCwgMHg2OCwgMHgwMCksCisJUEhZUkVHUygweDA4OTgsIDB4MDg5NCwgMHgwODkwLCAweDAxZGQsIDB4MDFkZCwgMHgwMWRlKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTUwMCwKKwlSQURJT1JFR1MzKDB4NDcsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MjYsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDQsIDB4MDQsIDB4MDQsIDB4OGQsIDB4MGIsIDB4MDAsCisJCSAgIDB4ODQsIDB4NzMsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDQsCisJCSAgIDB4MDAsIDB4OTgsIDB4MDAsIDB4NzMsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MDQsIDB4MDAsIDB4NzgsIDB4MDApLAorCVBIWVJFR1MoMHgwODljLCAweDA4OTgsIDB4MDg5NCwgMHgwMWRjLCAweDAxZGQsIDB4MDFkZCksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU1MTAsCisJUkFESU9SRUdTMygweDQ3LCAweDAxLCAweDAxLCAweDAyLCAweDI3LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA0LCAweDA0LCAweDA0LCAweDhkLCAweDBiLCAweDAwLAorCQkgICAweDg0LCAweDczLCAweDAwLCAweDAxLCAweDAwLCAweDcwLCAweDAwLCAweDA0LAorCQkgICAweDAwLCAweDk4LCAweDAwLCAweDczLCAweDAwLCAweDAxLCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDA0LCAweDAwLCAweDc4LCAweDAwKSwKKwlQSFlSRUdTKDB4MDhhMCwgMHgwODljLCAweDA4OTgsIDB4MDFkYiwgMHgwMWRjLCAweDAxZGQpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NTIwLAorCVJBRElPUkVHUzMoMHg0MCwgMHgwMSwgMHgwMSwgMHgwMiwgMHgyOCwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNCwgMHgwNCwgMHgwNCwgMHg4ZCwgMHgwYiwgMHgwMCwKKwkJICAgMHg4NCwgMHg3MywgMHgwMCwgMHgwMSwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwNCwKKwkJICAgMHgwMCwgMHg5OCwgMHgwMCwgMHg3MywgMHgwMCwgMHgwMSwgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwNCwgMHgwMCwgMHg3OCwgMHgwMCksCisJUEhZUkVHUygweDA4YTQsIDB4MDhhMCwgMHgwODljLCAweDAxZGEsIDB4MDFkYiwgMHgwMWRjKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTUzMCwKKwlSQURJT1JFR1MzKDB4NDAsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MjksIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDQsIDB4MDQsIDB4MDQsIDB4OGQsIDB4MGIsIDB4MDAsCisJCSAgIDB4ODQsIDB4NjMsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDMsCisJCSAgIDB4MDAsIDB4OTgsIDB4MDAsIDB4NjMsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MDMsIDB4MDAsIDB4NzgsIDB4MDApLAorCVBIWVJFR1MoMHgwOGE4LCAweDA4YTQsIDB4MDhhMCwgMHgwMWQ5LCAweDAxZGEsIDB4MDFkYiksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU1NDAsCisJUkFESU9SRUdTMygweDNhLCAweDAxLCAweDAxLCAweDAyLCAweDJhLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA0LCAweDA0LCAweDA0LCAweDhkLCAweDBiLCAweDAwLAorCQkgICAweDg0LCAweDYyLCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweDAwLCAweDAzLAorCQkgICAweDAwLCAweDk3LCAweDAwLCAweDYyLCAweDAwLCAweDAwLCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDAzLCAweDAwLCAweDc3LCAweDAwKSwKKwlQSFlSRUdTKDB4MDhhYywgMHgwOGE4LCAweDA4YTQsIDB4MDFkOCwgMHgwMWQ5LCAweDAxZGEpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NTUwLAorCVJBRElPUkVHUzMoMHgzYSwgMHgwMSwgMHgwMSwgMHgwMiwgMHgyYiwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNCwgMHgwNCwgMHgwNCwgMHg4ZCwgMHgwYiwgMHgwMCwKKwkJICAgMHg4NCwgMHg2MiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMywKKwkJICAgMHgwMCwgMHg5NywgMHgwMCwgMHg2MiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwMywgMHgwMCwgMHg3NywgMHgwMCksCisJUEhZUkVHUygweDA4YjAsIDB4MDhhYywgMHgwOGE4LCAweDAxZDcsIDB4MDFkOCwgMHgwMWQ5KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTU2MCwKKwlSQURJT1JFR1MzKDB4MzQsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MmMsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDQsIDB4MDQsIDB4MDQsIDB4OGQsIDB4MGIsIDB4MDAsCisJCSAgIDB4ODQsIDB4NjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDMsCisJCSAgIDB4MDAsIDB4OTcsIDB4MDAsIDB4NjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MDMsIDB4MDAsIDB4NzcsIDB4MDApLAorCVBIWVJFR1MoMHgwOGI0LCAweDA4YjAsIDB4MDhhYywgMHgwMWQ3LCAweDAxZDcsIDB4MDFkOCksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU1NzAsCisJUkFESU9SRUdTMygweDM0LCAweDAxLCAweDAxLCAweDAyLCAweDJkLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA0LCAweDA0LCAweDA0LCAweDhkLCAweDBiLCAweDAwLAorCQkgICAweDg0LCAweDUyLCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweDAwLCAweDAyLAorCQkgICAweDAwLCAweDk2LCAweDAwLCAweDUyLCAweDAwLCAweDAwLCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDAyLCAweDAwLCAweDc2LCAweDAwKSwKKwlQSFlSRUdTKDB4MDhiOCwgMHgwOGI0LCAweDA4YjAsIDB4MDFkNiwgMHgwMWQ3LCAweDAxZDcpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NTgwLAorCVJBRElPUkVHUzMoMHgyZSwgMHgwMSwgMHgwMSwgMHgwMiwgMHgyZSwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNCwgMHgwNCwgMHgwNCwgMHg4ZCwgMHgwYiwgMHgwMCwKKwkJICAgMHg4NCwgMHg1MiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMiwKKwkJICAgMHgwMCwgMHg5NiwgMHgwMCwgMHg1MiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwMiwgMHgwMCwgMHg3NiwgMHgwMCksCisJUEhZUkVHUygweDA4YmMsIDB4MDhiOCwgMHgwOGI0LCAweDAxZDUsIDB4MDFkNiwgMHgwMWQ3KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTU5MCwKKwlSQURJT1JFR1MzKDB4MmUsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MmYsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDQsIDB4MDQsIDB4MDQsIDB4OGQsIDB4MGIsIDB4MDAsCisJCSAgIDB4ODQsIDB4NTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDIsCisJCSAgIDB4MDAsIDB4OTYsIDB4MDAsIDB4NTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MDIsIDB4MDAsIDB4NzYsIDB4MDApLAorCVBIWVJFR1MoMHgwOGMwLCAweDA4YmMsIDB4MDhiOCwgMHgwMWQ0LCAweDAxZDUsIDB4MDFkNiksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU2MDAsCisJUkFESU9SRUdTMygweDI4LCAweDAxLCAweDAxLCAweDAyLCAweDMwLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA1LCAweDA1LCAweDA1LCAweDhiLCAweDA5LCAweDAwLAorCQkgICAweDcwLCAweDUxLCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweDAwLCAweDAyLAorCQkgICAweDAwLCAweDk2LCAweDAwLCAweDUxLCAweDAwLCAweDAwLCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDAyLCAweDAwLCAweDc2LCAweDAwKSwKKwlQSFlSRUdTKDB4MDhjNCwgMHgwOGMwLCAweDA4YmMsIDB4MDFkMywgMHgwMWQ0LCAweDAxZDUpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NjEwLAorCVJBRElPUkVHUzMoMHgyOCwgMHgwMSwgMHgwMSwgMHgwMiwgMHgzMSwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNSwgMHgwNSwgMHgwNSwgMHg4YiwgMHgwOSwgMHgwMCwKKwkJICAgMHg3MCwgMHg1MSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMiwKKwkJICAgMHgwMCwgMHg5NiwgMHgwMCwgMHg1MSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwMiwgMHgwMCwgMHg3NiwgMHgwMCksCisJUEhZUkVHUygweDA4YzgsIDB4MDhjNCwgMHgwOGMwLCAweDAxZDIsIDB4MDFkMywgMHgwMWQ0KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTYyMCwKKwlSQURJT1JFR1MzKDB4MjEsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MzIsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDUsIDB4OGIsIDB4MDksIDB4MDAsCisJCSAgIDB4NzAsIDB4NTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDIsCisJCSAgIDB4MDAsIDB4OTYsIDB4MDAsIDB4NTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MDIsIDB4MDAsIDB4NzYsIDB4MDApLAorCVBIWVJFR1MoMHgwOGNjLCAweDA4YzgsIDB4MDhjNCwgMHgwMWQyLCAweDAxZDIsIDB4MDFkMyksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU2MzAsCisJUkFESU9SRUdTMygweDIxLCAweDAxLCAweDAxLCAweDAyLCAweDMzLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA1LCAweDA1LCAweDA1LCAweDhiLCAweDA5LCAweDAwLAorCQkgICAweDcwLCAweDUxLCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweDAwLCAweDAyLAorCQkgICAweDAwLCAweDk2LCAweDAwLCAweDUxLCAweDAwLCAweDAwLCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDAyLCAweDAwLCAweDc2LCAweDAwKSwKKwlQSFlSRUdTKDB4MDhkMCwgMHgwOGNjLCAweDA4YzgsIDB4MDFkMSwgMHgwMWQyLCAweDAxZDIpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NjQwLAorCVJBRElPUkVHUzMoMHgxYywgMHgwMSwgMHgwMSwgMHgwMiwgMHgzNCwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNSwgMHgwNSwgMHgwNSwgMHg4YiwgMHgwOSwgMHgwMCwKKwkJICAgMHg3MCwgMHg1MSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMiwKKwkJICAgMHgwMCwgMHg5NSwgMHgwMCwgMHg1MSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwMiwgMHgwMCwgMHg3NSwgMHgwMCksCisJUEhZUkVHUygweDA4ZDQsIDB4MDhkMCwgMHgwOGNjLCAweDAxZDAsIDB4MDFkMSwgMHgwMWQyKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTY1MCwKKwlSQURJT1JFR1MzKDB4MWMsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MzUsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDUsIDB4OGIsIDB4MDksIDB4MDAsCisJCSAgIDB4NzAsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDEsCisJCSAgIDB4MDAsIDB4OTUsIDB4MDAsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MDEsIDB4MDAsIDB4NzUsIDB4MDApLAorCVBIWVJFR1MoMHgwOGQ4LCAweDA4ZDQsIDB4MDhkMCwgMHgwMWNmLCAweDAxZDAsIDB4MDFkMSksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU2NjAsCisJUkFESU9SRUdTMygweDE2LCAweDAxLCAweDAxLCAweDAyLCAweDM2LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA1LCAweDA1LCAweDA1LCAweDhiLCAweDA5LCAweDAwLAorCQkgICAweDcwLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweDAwLCAweDAxLAorCQkgICAweDAwLCAweDk1LCAweDAwLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDAxLCAweDAwLCAweDc1LCAweDAwKSwKKwlQSFlSRUdTKDB4MDhkYywgMHgwOGQ4LCAweDA4ZDQsIDB4MDFjZSwgMHgwMWNmLCAweDAxZDApLAorICB9LAorICB7CS5mcmVxCQkJPSA1NjcwLAorCVJBRElPUkVHUzMoMHgxNiwgMHgwMSwgMHgwMSwgMHgwMiwgMHgzNywgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNSwgMHgwNSwgMHgwNSwgMHg4YiwgMHgwOSwgMHgwMCwKKwkJICAgMHg3MCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMSwKKwkJICAgMHgwMCwgMHg5NCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwMSwgMHgwMCwgMHg3NCwgMHgwMCksCisJUEhZUkVHUygweDA4ZTAsIDB4MDhkYywgMHgwOGQ4LCAweDAxY2UsIDB4MDFjZSwgMHgwMWNmKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTY4MCwKKwlSQURJT1JFR1MzKDB4MTAsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MzgsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDUsIDB4OGIsIDB4MDksIDB4MDAsCisJCSAgIDB4NzAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDEsCisJCSAgIDB4MDAsIDB4OTQsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MDEsIDB4MDAsIDB4NzQsIDB4MDApLAorCVBIWVJFR1MoMHgwOGU0LCAweDA4ZTAsIDB4MDhkYywgMHgwMWNkLCAweDAxY2UsIDB4MDFjZSksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU2OTAsCisJUkFESU9SRUdTMygweDEwLCAweDAxLCAweDAxLCAweDAyLCAweDM5LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA1LCAweDA1LCAweDA1LCAweDhiLCAweDA5LCAweDAwLAorCQkgICAweDcwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweDAwLCAweDAxLAorCQkgICAweDAwLCAweDk0LCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDAxLCAweDAwLCAweDc0LCAweDAwKSwKKwlQSFlSRUdTKDB4MDhlOCwgMHgwOGU0LCAweDA4ZTAsIDB4MDFjYywgMHgwMWNkLCAweDAxY2UpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NzAwLAorCVJBRElPUkVHUzMoMHgwYSwgMHgwMSwgMHgwMSwgMHgwMiwgMHgzYSwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNSwgMHgwNSwgMHgwNSwgMHg4YSwgMHgwNiwgMHgwMCwKKwkJICAgMHg0MCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMSwKKwkJICAgMHgwMCwgMHg5NCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwMSwgMHgwMCwgMHg3NCwgMHgwMCksCisJUEhZUkVHUygweDA4ZWMsIDB4MDhlOCwgMHgwOGU0LCAweDAxY2IsIDB4MDFjYywgMHgwMWNkKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTcxMCwKKwlSQURJT1JFR1MzKDB4MGEsIDB4MDEsIDB4MDEsIDB4MDIsIDB4M2IsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDUsIDB4OGEsIDB4MDYsIDB4MDAsCisJCSAgIDB4NDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDEsCisJCSAgIDB4MDAsIDB4OTQsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MDEsIDB4MDAsIDB4NzQsIDB4MDApLAorCVBIWVJFR1MoMHgwOGYwLCAweDA4ZWMsIDB4MDhlOCwgMHgwMWNhLCAweDAxY2IsIDB4MDFjYyksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU3MjAsCisJUkFESU9SRUdTMygweDBhLCAweDAxLCAweDAxLCAweDAyLCAweDNjLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA1LCAweDA1LCAweDA1LCAweDhhLCAweDA2LCAweDAwLAorCQkgICAweDQwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweDAwLCAweDAxLAorCQkgICAweDAwLCAweDk0LCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDAxLCAweDAwLCAweDc0LCAweDAwKSwKKwlQSFlSRUdTKDB4MDhmNCwgMHgwOGYwLCAweDA4ZWMsIDB4MDFjOSwgMHgwMWNhLCAweDAxY2IpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NzI1LAorCVJBRElPUkVHUzMoMHgwMywgMHgwMSwgMHgwMiwgMHgwNCwgMHg3OSwgMHgwNywgMHgwNywgMHgwNCwKKwkJICAgMHgxMCwgMHgwMSwgMHgwNSwgMHgwNSwgMHgwNSwgMHg4YSwgMHgwNiwgMHgwMCwKKwkJICAgMHg0MCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMSwKKwkJICAgMHgwMCwgMHg5NCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwMSwgMHgwMCwgMHg3NCwgMHgwMCksCisJUEhZUkVHUygweDA4ZjYsIDB4MDhmMiwgMHgwOGVlLCAweDAxYzksIDB4MDFjYSwgMHgwMWNiKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTczMCwKKwlSQURJT1JFR1MzKDB4MGEsIDB4MDEsIDB4MDEsIDB4MDIsIDB4M2QsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDUsIDB4OGEsIDB4MDYsIDB4MDAsCisJCSAgIDB4NDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDEsCisJCSAgIDB4MDAsIDB4OTQsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODQsIDB4MDApLAorCVBIWVJFR1MoMHgwOGY4LCAweDA4ZjQsIDB4MDhmMCwgMHgwMWM5LCAweDAxYzksIDB4MDFjYSksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU3MzUsCisJUkFESU9SRUdTMygweDAzLCAweDAxLCAweDAyLCAweDA0LCAweDdiLCAweDA3LCAweDA3LCAweDA0LAorCQkgICAweDEwLCAweDAxLCAweDA1LCAweDA1LCAweDA1LCAweDhhLCAweDA2LCAweDAwLAorCQkgICAweDQwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweDAwLCAweDAwLAorCQkgICAweDAwLCAweDkzLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDAwLCAweDAwLCAweDgzLCAweDAwKSwKKwlQSFlSRUdTKDB4MDhmYSwgMHgwOGY2LCAweDA4ZjIsIDB4MDFjOCwgMHgwMWM5LCAweDAxY2EpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NzQwLAorCVJBRElPUkVHUzMoMHgwYSwgMHgwMSwgMHgwMSwgMHgwMiwgMHgzZSwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNSwgMHgwNSwgMHgwNSwgMHg4YSwgMHgwNiwgMHgwMCwKKwkJICAgMHg0MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMCwKKwkJICAgMHgwMCwgMHg5MywgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MywgMHgwMCksCisJUEhZUkVHUygweDA4ZmMsIDB4MDhmOCwgMHgwOGY0LCAweDAxYzgsIDB4MDFjOSwgMHgwMWM5KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTc0NSwKKwlSQURJT1JFR1MzKDB4ZmUsIDB4MDAsIDB4MDIsIDB4MDQsIDB4N2QsIDB4MDcsIDB4MDcsIDB4MDQsCisJCSAgIDB4MTAsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDUsIDB4OGEsIDB4MDYsIDB4MDAsCisJCSAgIDB4NDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDAsCisJCSAgIDB4MDAsIDB4OTMsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODMsIDB4MDApLAorCVBIWVJFR1MoMHgwOGZlLCAweDA4ZmEsIDB4MDhmNiwgMHgwMWM4LCAweDAxYzgsIDB4MDFjOSksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU3NTAsCisJUkFESU9SRUdTMygweDBhLCAweDAxLCAweDAxLCAweDAyLCAweDNmLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA1LCAweDA1LCAweDA1LCAweDhhLCAweDA2LCAweDAwLAorCQkgICAweDQwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweDAwLCAweDAwLAorCQkgICAweDAwLCAweDkzLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDAwLCAweDAwLCAweDgzLCAweDAwKSwKKwlQSFlSRUdTKDB4MDkwMCwgMHgwOGZjLCAweDA4ZjgsIDB4MDFjNywgMHgwMWM4LCAweDAxYzkpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NzU1LAorCVJBRElPUkVHUzMoMHhmZSwgMHgwMCwgMHgwMiwgMHgwNCwgMHg3ZiwgMHgwNywgMHgwNywgMHgwNCwKKwkJICAgMHgxMCwgMHgwMSwgMHgwNSwgMHgwNSwgMHgwNSwgMHg4YSwgMHgwNiwgMHgwMCwKKwkJICAgMHg0MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMCwKKwkJICAgMHgwMCwgMHg5MywgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MywgMHgwMCksCisJUEhZUkVHUygweDA5MDIsIDB4MDhmZSwgMHgwOGZhLCAweDAxYzcsIDB4MDFjOCwgMHgwMWM4KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTc2MCwKKwlSQURJT1JFR1MzKDB4MGEsIDB4MDEsIDB4MDEsIDB4MDIsIDB4NDAsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDUsIDB4OGEsIDB4MDYsIDB4MDAsCisJCSAgIDB4NDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDAsCisJCSAgIDB4MDAsIDB4OTMsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODMsIDB4MDApLAorCVBIWVJFR1MoMHgwOTA0LCAweDA5MDAsIDB4MDhmYywgMHgwMWM2LCAweDAxYzcsIDB4MDFjOCksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU3NjUsCisJUkFESU9SRUdTMygweGY4LCAweDAwLCAweDAyLCAweDA0LCAweDgxLCAweDA3LCAweDA3LCAweDA0LAorCQkgICAweDEwLCAweDAxLCAweDA1LCAweDA1LCAweDA1LCAweDhhLCAweDA2LCAweDAwLAorCQkgICAweDQwLCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweDAwLCAweDAwLAorCQkgICAweDAwLCAweDkyLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDAwLCAweDAwLCAweDgyLCAweDAwKSwKKwlQSFlSRUdTKDB4MDkwNiwgMHgwOTAyLCAweDA4ZmUsIDB4MDFjNiwgMHgwMWM3LCAweDAxYzgpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NzcwLAorCVJBRElPUkVHUzMoMHgwYSwgMHgwMSwgMHgwMSwgMHgwMiwgMHg0MSwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNSwgMHgwNSwgMHgwNSwgMHg4YSwgMHgwNiwgMHgwMCwKKwkJICAgMHg0MCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMCwKKwkJICAgMHgwMCwgMHg5MiwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MiwgMHgwMCksCisJUEhZUkVHUygweDA5MDgsIDB4MDkwNCwgMHgwOTAwLCAweDAxYzYsIDB4MDFjNiwgMHgwMWM3KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTc3NSwKKwlSQURJT1JFR1MzKDB4ZjgsIDB4MDAsIDB4MDIsIDB4MDQsIDB4ODMsIDB4MDcsIDB4MDcsIDB4MDQsCisJCSAgIDB4MTAsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDUsIDB4OGEsIDB4MDYsIDB4MDAsCisJCSAgIDB4NDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDAsCisJCSAgIDB4MDAsIDB4OTIsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDApLAorCVBIWVJFR1MoMHgwOTBhLCAweDA5MDYsIDB4MDkwMiwgMHgwMWM1LCAweDAxYzYsIDB4MDFjNyksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU3ODAsCisJUkFESU9SRUdTMygweDBhLCAweDAxLCAweDAxLCAweDAyLCAweDQyLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA1LCAweDA1LCAweDA1LCAweDhhLCAweDA2LCAweDAwLAorCQkgICAweDQwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweDAwLCAweDAwLAorCQkgICAweDAwLCAweDkyLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDAwLCAweDAwLCAweDgyLCAweDAwKSwKKwlQSFlSRUdTKDB4MDkwYywgMHgwOTA4LCAweDA5MDQsIDB4MDFjNSwgMHgwMWM2LCAweDAxYzYpLAorICB9LAorICB7CS5mcmVxCQkJPSA1Nzg1LAorCVJBRElPUkVHUzMoMHhmMiwgMHgwMCwgMHgwMiwgMHgwNCwgMHg4NSwgMHgwNywgMHgwNywgMHgwNCwKKwkJICAgMHgxMCwgMHgwMSwgMHgwNiwgMHgwNiwgMHgwNiwgMHg4YSwgMHgwNiwgMHgwMCwKKwkJICAgMHg0MCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMCwKKwkJICAgMHgwMCwgMHg5MiwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MiwgMHgwMCksCisJUEhZUkVHUygweDA5MGUsIDB4MDkwYSwgMHgwOTA2LCAweDAxYzQsIDB4MDFjNSwgMHgwMWM2KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTc5MCwKKwlSQURJT1JFR1MzKDB4MGEsIDB4MDEsIDB4MDEsIDB4MDIsIDB4NDMsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDYsIDB4MDYsIDB4MDYsIDB4OGEsIDB4MDYsIDB4MDAsCisJCSAgIDB4NDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDAsCisJCSAgIDB4MDAsIDB4OTIsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDApLAorCVBIWVJFR1MoMHgwOTEwLCAweDA5MGMsIDB4MDkwOCwgMHgwMWM0LCAweDAxYzUsIDB4MDFjNiksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU3OTUsCisJUkFESU9SRUdTMygweGYyLCAweDAwLCAweDAyLCAweDA0LCAweDg3LCAweDA3LCAweDA3LCAweDA0LAorCQkgICAweDEwLCAweDAxLCAweDA2LCAweDA2LCAweDA2LCAweDhhLCAweDA2LCAweDAwLAorCQkgICAweDQwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweDAwLCAweDAwLAorCQkgICAweDAwLCAweDkyLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDAwLCAweDAwLCAweDgyLCAweDAwKSwKKwlQSFlSRUdTKDB4MDkxMiwgMHgwOTBlLCAweDA5MGEsIDB4MDFjNCwgMHgwMWM0LCAweDAxYzUpLAorICB9LAorICB7CS5mcmVxCQkJPSA1ODAwLAorCVJBRElPUkVHUzMoMHgwYSwgMHgwMSwgMHgwMSwgMHgwMiwgMHg0NCwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNiwgMHgwNiwgMHgwNiwgMHg4OCwgMHgwNCwgMHgwMCwKKwkJICAgMHgyMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMCwKKwkJICAgMHgwMCwgMHg5MiwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MiwgMHgwMCksCisJUEhZUkVHUygweDA5MTQsIDB4MDkxMCwgMHgwOTBjLCAweDAxYzMsIDB4MDFjNCwgMHgwMWM1KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTgwNSwKKwlSQURJT1JFR1MzKDB4ZWQsIDB4MDAsIDB4MDIsIDB4MDQsIDB4ODksIDB4MDcsIDB4MDcsIDB4MDQsCisJCSAgIDB4MTAsIDB4MDEsIDB4MDYsIDB4MDYsIDB4MDYsIDB4ODgsIDB4MDQsIDB4MDAsCisJCSAgIDB4MjAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDAsCisJCSAgIDB4MDAsIDB4OTIsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDApLAorCVBIWVJFR1MoMHgwOTE2LCAweDA5MTIsIDB4MDkwZSwgMHgwMWMzLCAweDAxYzQsIDB4MDFjNCksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU4MTAsCisJUkFESU9SRUdTMygweDBhLCAweDAxLCAweDAxLCAweDAyLCAweDQ1LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA2LCAweDA2LCAweDA2LCAweDg4LCAweDA0LCAweDAwLAorCQkgICAweDIwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweDAwLCAweDAwLAorCQkgICAweDAwLCAweDkyLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDAwLCAweDAwLCAweDgyLCAweDAwKSwKKwlQSFlSRUdTKDB4MDkxOCwgMHgwOTE0LCAweDA5MTAsIDB4MDFjMiwgMHgwMWMzLCAweDAxYzQpLAorICB9LAorICB7CS5mcmVxCQkJPSA1ODE1LAorCVJBRElPUkVHUzMoMHhlZCwgMHgwMCwgMHgwMiwgMHgwNCwgMHg4YiwgMHgwNywgMHgwNywgMHgwNCwKKwkJICAgMHgxMCwgMHgwMSwgMHgwNiwgMHgwNiwgMHgwNiwgMHg4OCwgMHgwNCwgMHgwMCwKKwkJICAgMHgyMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMCwKKwkJICAgMHgwMCwgMHg5MiwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MiwgMHgwMCksCisJUEhZUkVHUygweDA5MWEsIDB4MDkxNiwgMHgwOTEyLCAweDAxYzIsIDB4MDFjMywgMHgwMWM0KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTgyMCwKKwlSQURJT1JFR1MzKDB4MGEsIDB4MDEsIDB4MDEsIDB4MDIsIDB4NDYsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDYsIDB4MDYsIDB4MDYsIDB4ODgsIDB4MDQsIDB4MDAsCisJCSAgIDB4MjAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDAsCisJCSAgIDB4MDAsIDB4OTIsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDApLAorCVBIWVJFR1MoMHgwOTFjLCAweDA5MTgsIDB4MDkxNCwgMHgwMWMyLCAweDAxYzIsIDB4MDFjMyksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU4MjUsCisJUkFESU9SRUdTMygweGVkLCAweDAwLCAweDAyLCAweDA0LCAweDhkLCAweDA3LCAweDA3LCAweDA0LAorCQkgICAweDEwLCAweDAxLCAweDA2LCAweDA2LCAweDA2LCAweDg4LCAweDA0LCAweDAwLAorCQkgICAweDIwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweDAwLCAweDAwLAorCQkgICAweDAwLCAweDkyLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDAwLCAweDAwLCAweDgyLCAweDAwKSwKKwlQSFlSRUdTKDB4MDkxZSwgMHgwOTFhLCAweDA5MTYsIDB4MDFjMSwgMHgwMWMyLCAweDAxYzMpLAorICB9LAorICB7CS5mcmVxCQkJPSA1ODMwLAorCVJBRElPUkVHUzMoMHgwYSwgMHgwMSwgMHgwMSwgMHgwMiwgMHg0NywgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNiwgMHgwNiwgMHgwNiwgMHg4OCwgMHgwNCwgMHgwMCwKKwkJICAgMHgyMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMCwKKwkJICAgMHgwMCwgMHg5MiwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MiwgMHgwMCksCisJUEhZUkVHUygweDA5MjAsIDB4MDkxYywgMHgwOTE4LCAweDAxYzEsIDB4MDFjMiwgMHgwMWMyKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTg0MCwKKwlSQURJT1JFR1MzKDB4MGEsIDB4MDEsIDB4MDEsIDB4MDIsIDB4NDgsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDYsIDB4MDYsIDB4MDYsIDB4ODgsIDB4MDQsIDB4MDAsCisJCSAgIDB4MjAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDAsCisJCSAgIDB4MDAsIDB4OTIsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzIsIDB4MDApLAorCVBIWVJFR1MoMHgwOTI0LCAweDA5MjAsIDB4MDkxYywgMHgwMWMwLCAweDAxYzEsIDB4MDFjMiksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU4NTAsCisJUkFESU9SRUdTMygweGUwLCAweDAwLCAweDAxLCAweDAyLCAweDQ5LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA2LCAweDA2LCAweDA2LCAweDg4LCAweDA0LCAweDAwLAorCQkgICAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweDAwLCAweDAwLAorCQkgICAweDAwLCAweDkyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDAwLCAweDAwLCAweDcyLCAweDAwKSwKKwlQSFlSRUdTKDB4MDkyOCwgMHgwOTI0LCAweDA5MjAsIDB4MDFiZiwgMHgwMWMwLCAweDAxYzEpLAorICB9LAorICB7CS5mcmVxCQkJPSA1ODYwLAorCVJBRElPUkVHUzMoMHhkZSwgMHgwMCwgMHgwMSwgMHgwMiwgMHg0YSwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNiwgMHgwNiwgMHgwNiwgMHg4OCwgMHgwNCwgMHgwMCwKKwkJICAgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMCwKKwkJICAgMHgwMCwgMHg5MiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MiwgMHgwMCksCisJUEhZUkVHUygweDA5MmMsIDB4MDkyOCwgMHgwOTI0LCAweDAxYmYsIDB4MDFiZiwgMHgwMWMwKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTg3MCwKKwlSQURJT1JFR1MzKDB4ZGIsIDB4MDAsIDB4MDEsIDB4MDIsIDB4NGIsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDYsIDB4MDYsIDB4MDYsIDB4ODgsIDB4MDQsIDB4MDAsCisJCSAgIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDAsCisJCSAgIDB4MDAsIDB4OTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzEsIDB4MDApLAorCVBIWVJFR1MoMHgwOTMwLCAweDA5MmMsIDB4MDkyOCwgMHgwMWJlLCAweDAxYmYsIDB4MDFiZiksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU4ODAsCisJUkFESU9SRUdTMygweGQ4LCAweDAwLCAweDAxLCAweDAyLCAweDRjLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA2LCAweDA2LCAweDA2LCAweDg4LCAweDA0LCAweDAwLAorCQkgICAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweDAwLCAweDAwLAorCQkgICAweDAwLCAweDkxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDAwLCAweDAwLCAweDcxLCAweDAwKSwKKwlQSFlSRUdTKDB4MDkzNCwgMHgwOTMwLCAweDA5MmMsIDB4MDFiZCwgMHgwMWJlLCAweDAxYmYpLAorICB9LAorICB7CS5mcmVxCQkJPSA1ODkwLAorCVJBRElPUkVHUzMoMHhkNiwgMHgwMCwgMHgwMSwgMHgwMiwgMHg0ZCwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNiwgMHgwNiwgMHgwNiwgMHg4OCwgMHgwNCwgMHgwMCwKKwkJICAgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMCwKKwkJICAgMHgwMCwgMHg5MSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MSwgMHgwMCksCisJUEhZUkVHUygweDA5MzgsIDB4MDkzNCwgMHgwOTMwLCAweDAxYmMsIDB4MDFiZCwgMHgwMWJlKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTkwMCwKKwlSQURJT1JFR1MzKDB4ZDMsIDB4MDAsIDB4MDEsIDB4MDIsIDB4NGUsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDYsIDB4MDYsIDB4MDYsIDB4ODcsIDB4MDMsIDB4MDAsCisJCSAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDAsCisJCSAgIDB4MDAsIDB4OTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzEsIDB4MDApLAorCVBIWVJFR1MoMHgwOTNjLCAweDA5MzgsIDB4MDkzNCwgMHgwMWJjLCAweDAxYmMsIDB4MDFiZCksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU5MTAsCisJUkFESU9SRUdTMygweGQ2LCAweDAwLCAweDAxLCAweDAyLCAweDRmLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA2LCAweDA2LCAweDA2LCAweDg3LCAweDAzLCAweDAwLAorCQkgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweDAwLCAweDAwLAorCQkgICAweDAwLCAweDkxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDAwLCAweDAwLCAweDcxLCAweDAwKSwKKwlQSFlSRUdTKDB4MDk0MCwgMHgwOTNjLCAweDA5MzgsIDB4MDFiYiwgMHgwMWJjLCAweDAxYmMpLAorICB9LAorICB7CS5mcmVxCQkJPSAyNDEyLAorCVJBRElPUkVHUzMoMHgwMCwgMHgwMSwgMHgwMywgMHgwOSwgMHg2YywgMHgwOCwgMHgwOCwgMHgwNCwKKwkJICAgMHgxNiwgMHgwMSwgMHgwNCwgMHgwNCwgMHgwNCwgMHg4ZiwgMHgzMCwgMHgwMCwKKwkJICAgMHgwMCwgMHgwMCwgMHgxZiwgMHgwMCwgMHgwMywgMHgwMCwgMHg3MCwgMHgwMCwKKwkJICAgMHgwZiwgMHgwMCwgMHgwYiwgMHgwMCwgMHgxZiwgMHgwMCwgMHgwMywgMHgwMCwKKwkJICAgMHg3MCwgMHgwMCwgMHgwZiwgMHgwMCwgMHgwYiksCisJUEhZUkVHUygweDAzYzksIDB4MDNjNSwgMHgwM2MxLCAweDA0M2EsIDB4MDQzZiwgMHgwNDQzKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gMjQxNywKKwlSQURJT1JFR1MzKDB4MDAsIDB4MDEsIDB4MDMsIDB4MDksIDB4NzEsIDB4MDgsIDB4MDgsIDB4MDQsCisJCSAgIDB4MTYsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDUsIDB4OGYsIDB4MzAsIDB4MDAsCisJCSAgIDB4MDAsIDB4MDAsIDB4MWYsIDB4MDAsIDB4MDMsIDB4MDAsIDB4NzAsIDB4MDAsCisJCSAgIDB4MGYsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MWYsIDB4MDAsIDB4MDMsIDB4MDAsCisJCSAgIDB4NzAsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MGEpLAorCVBIWVJFR1MoMHgwM2NiLCAweDAzYzcsIDB4MDNjMywgMHgwNDM4LCAweDA0M2QsIDB4MDQ0MSksCisgIH0sCisgIHsJLmZyZXEJCQk9IDI0MjIsCisJUkFESU9SRUdTMygweDAwLCAweDAxLCAweDAzLCAweDA5LCAweDc2LCAweDA4LCAweDA4LCAweDA0LAorCQkgICAweDE2LCAweDAxLCAweDA1LCAweDA1LCAweDA1LCAweDhmLCAweDMwLCAweDAwLAorCQkgICAweDAwLCAweDAwLCAweDBlLCAweDAwLCAweDAzLCAweDAwLCAweDcwLCAweDAwLAorCQkgICAweDBmLCAweDAwLCAweDBhLCAweDAwLCAweDBlLCAweDAwLCAweDAzLCAweDAwLAorCQkgICAweDcwLCAweDAwLCAweDBmLCAweDAwLCAweDBhKSwKKwlQSFlSRUdTKDB4MDNjZCwgMHgwM2M5LCAweDAzYzUsIDB4MDQzNiwgMHgwNDNhLCAweDA0M2YpLAorICB9LAorICB7CS5mcmVxCQkJPSAyNDI3LAorCVJBRElPUkVHUzMoMHgwMCwgMHgwMSwgMHgwMywgMHgwOSwgMHg3YiwgMHgwOCwgMHgwOCwgMHgwNCwKKwkJICAgMHgxNiwgMHgwMSwgMHgwNSwgMHgwNSwgMHgwNSwgMHg4ZiwgMHgzMCwgMHgwMCwKKwkJICAgMHgwMCwgMHgwMCwgMHgwZCwgMHgwMCwgMHgwMywgMHgwMCwgMHg3MCwgMHgwMCwKKwkJICAgMHgwZSwgMHgwMCwgMHgwYSwgMHgwMCwgMHgwZCwgMHgwMCwgMHgwMywgMHgwMCwKKwkJICAgMHg3MCwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwYSksCisJUEhZUkVHUygweDAzY2YsIDB4MDNjYiwgMHgwM2M3LCAweDA0MzQsIDB4MDQzOCwgMHgwNDNkKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gMjQzMiwKKwlSQURJT1JFR1MzKDB4MDAsIDB4MDEsIDB4MDMsIDB4MDksIDB4ODAsIDB4MDgsIDB4MDgsIDB4MDQsCisJCSAgIDB4MTYsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDUsIDB4OGYsIDB4MzAsIDB4MDAsCisJCSAgIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDMsIDB4MDAsIDB4NzAsIDB4MDAsCisJCSAgIDB4MGUsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDMsIDB4MDAsCisJCSAgIDB4NzAsIDB4MDAsIDB4MGUsIDB4MDAsIDB4MGEpLAorCVBIWVJFR1MoMHgwM2QxLCAweDAzY2QsIDB4MDNjOSwgMHgwNDMxLCAweDA0MzYsIDB4MDQzYSksCisgIH0sCisgIHsJLmZyZXEJCQk9IDI0MzcsCisJUkFESU9SRUdTMygweDAwLCAweDAxLCAweDAzLCAweDA5LCAweDg1LCAweDA4LCAweDA4LCAweDA0LAorCQkgICAweDE2LCAweDAxLCAweDA1LCAweDA1LCAweDA1LCAweDhmLCAweDMwLCAweDAwLAorCQkgICAweDAwLCAweDAwLCAweDBiLCAweDAwLCAweDAzLCAweDAwLCAweDcwLCAweDAwLAorCQkgICAweDBlLCAweDAwLCAweDBhLCAweDAwLCAweDBiLCAweDAwLCAweDAzLCAweDAwLAorCQkgICAweDcwLCAweDAwLCAweDBlLCAweDAwLCAweDBhKSwKKwlQSFlSRUdTKDB4MDNkMywgMHgwM2NmLCAweDAzY2IsIDB4MDQyZiwgMHgwNDM0LCAweDA0MzgpLAorICB9LAorICB7CS5mcmVxCQkJPSAyNDQyLAorCVJBRElPUkVHUzMoMHgwMCwgMHgwMSwgMHgwMywgMHgwOSwgMHg4YSwgMHgwOCwgMHgwOCwgMHgwNCwKKwkJICAgMHgxNiwgMHgwMSwgMHgwNSwgMHgwNSwgMHgwNSwgMHg4ZiwgMHgzMCwgMHgwMCwKKwkJICAgMHgwMCwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMywgMHgwMCwgMHg3MCwgMHgwMCwKKwkJICAgMHgwZSwgMHgwMCwgMHgwYSwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMywgMHgwMCwKKwkJICAgMHg3MCwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwYSksCisJUEhZUkVHUygweDAzZDUsIDB4MDNkMSwgMHgwM2NkLCAweDA0MmQsIDB4MDQzMSwgMHgwNDM2KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gMjQ0NywKKwlSQURJT1JFR1MzKDB4MDAsIDB4MDEsIDB4MDMsIDB4MDksIDB4OGYsIDB4MDgsIDB4MDgsIDB4MDQsCisJCSAgIDB4MTYsIDB4MDEsIDB4MDYsIDB4MDYsIDB4MDYsIDB4OGYsIDB4MzAsIDB4MDAsCisJCSAgIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDIsIDB4MDAsIDB4NzAsIDB4MDAsCisJCSAgIDB4MGUsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDIsIDB4MDAsCisJCSAgIDB4NzAsIDB4MDAsIDB4MGUsIDB4MDAsIDB4MDkpLAorCVBIWVJFR1MoMHgwM2Q3LCAweDAzZDMsIDB4MDNjZiwgMHgwNDJiLCAweDA0MmYsIDB4MDQzNCksCisgIH0sCisgIHsJLmZyZXEJCQk9IDI0NTIsCisJUkFESU9SRUdTMygweDAwLCAweDAxLCAweDAzLCAweDA5LCAweDk0LCAweDA4LCAweDA4LCAweDA0LAorCQkgICAweDE2LCAweDAxLCAweDA2LCAweDA2LCAweDA2LCAweDhmLCAweDMwLCAweDAwLAorCQkgICAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDAyLCAweDAwLCAweDcwLCAweDAwLAorCQkgICAweDBlLCAweDAwLCAweDA5LCAweDAwLCAweDA3LCAweDAwLCAweDAyLCAweDAwLAorCQkgICAweDcwLCAweDAwLCAweDBlLCAweDAwLCAweDA5KSwKKwlQSFlSRUdTKDB4MDNkOSwgMHgwM2Q1LCAweDAzZDEsIDB4MDQyOSwgMHgwNDJkLCAweDA0MzEpLAorICB9LAorICB7CS5mcmVxCQkJPSAyNDU3LAorCVJBRElPUkVHUzMoMHgwMCwgMHgwMSwgMHgwMywgMHgwOSwgMHg5OSwgMHgwOCwgMHgwOCwgMHgwNCwKKwkJICAgMHgxNiwgMHgwMSwgMHgwNiwgMHgwNiwgMHgwNiwgMHg4ZiwgMHgzMCwgMHgwMCwKKwkJICAgMHgwMCwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMiwgMHgwMCwgMHg3MCwgMHgwMCwKKwkJICAgMHgwZCwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMiwgMHgwMCwKKwkJICAgMHg3MCwgMHgwMCwgMHgwZCwgMHgwMCwgMHgwOSksCisJUEhZUkVHUygweDAzZGIsIDB4MDNkNywgMHgwM2QzLCAweDA0MjcsIDB4MDQyYiwgMHgwNDJmKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gMjQ2MiwKKwlSQURJT1JFR1MzKDB4MDAsIDB4MDEsIDB4MDMsIDB4MDksIDB4OWUsIDB4MDgsIDB4MDgsIDB4MDQsCisJCSAgIDB4MTYsIDB4MDEsIDB4MDYsIDB4MDYsIDB4MDYsIDB4OGYsIDB4MzAsIDB4MDAsCisJCSAgIDB4MDAsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MDIsIDB4MDAsIDB4NzAsIDB4MDAsCisJCSAgIDB4MGQsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDUsIDB4MDAsIDB4MDIsIDB4MDAsCisJCSAgIDB4NzAsIDB4MDAsIDB4MGQsIDB4MDAsIDB4MDkpLAorCVBIWVJFR1MoMHgwM2RkLCAweDAzZDksIDB4MDNkNSwgMHgwNDI0LCAweDA0MjksIDB4MDQyZCksCisgIH0sCisgIHsJLmZyZXEJCQk9IDI0NjcsCisJUkFESU9SRUdTMygweDAwLCAweDAxLCAweDAzLCAweDA5LCAweGEzLCAweDA4LCAweDA4LCAweDA0LAorCQkgICAweDE2LCAweDAxLCAweDA2LCAweDA2LCAweDA2LCAweDhmLCAweDMwLCAweDAwLAorCQkgICAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAyLCAweDAwLCAweDcwLCAweDAwLAorCQkgICAweDBkLCAweDAwLCAweDA4LCAweDAwLCAweDA0LCAweDAwLCAweDAyLCAweDAwLAorCQkgICAweDcwLCAweDAwLCAweDBkLCAweDAwLCAweDA4KSwKKwlQSFlSRUdTKDB4MDNkZiwgMHgwM2RiLCAweDAzZDcsIDB4MDQyMiwgMHgwNDI3LCAweDA0MmIpLAorICB9LAorICB7CS5mcmVxCQkJPSAyNDcyLAorCVJBRElPUkVHUzMoMHgwMCwgMHgwMSwgMHgwMywgMHgwOSwgMHhhOCwgMHgwOCwgMHgwOCwgMHgwNCwKKwkJICAgMHgxNiwgMHgwMSwgMHgwNywgMHgwNywgMHgwNywgMHg4ZiwgMHgzMCwgMHgwMCwKKwkJICAgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMiwgMHgwMCwgMHg3MCwgMHgwMCwKKwkJICAgMHgwZCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMiwgMHgwMCwKKwkJICAgMHg3MCwgMHgwMCwgMHgwZCwgMHgwMCwgMHgwOCksCisJUEhZUkVHUygweDAzZTEsIDB4MDNkZCwgMHgwM2Q5LCAweDA0MjAsIDB4MDQyNCwgMHgwNDI5KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gMjQ4NCwKKwlSQURJT1JFR1MzKDB4ZmYsIDB4MDEsIDB4MDMsIDB4MDksIDB4YjQsIDB4MDgsIDB4MDgsIDB4MDQsCisJCSAgIDB4MTYsIDB4MDEsIDB4MDcsIDB4MDcsIDB4MDcsIDB4OGYsIDB4MzAsIDB4MDAsCisJCSAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4NzAsIDB4MDAsCisJCSAgIDB4MGQsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsCisJCSAgIDB4NzAsIDB4MDAsIDB4MGQsIDB4MDAsIDB4MDgpLAorCVBIWVJFR1MoMHgwM2U2LCAweDAzZTIsIDB4MDNkZSwgMHgwNDFiLCAweDA0MWYsIDB4MDQyNCksCisgIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGI0M19ucGh5X2NoYW5uZWx0YWJfZW50cnlfcmV2MyBiNDNfbnBoeV9jaGFubmVsdGFiX3JldjZbXSA9IHsKKyAgewkuZnJlcQkJCT0gNDkyMCwKKwlSQURJT1JFR1MzKDB4ZmYsIDB4MDEsIDB4MDEsIDB4MDEsIDB4ZWMsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OGYsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZmYsIDB4ZmUsIDB4MDAsIDB4MDksIDB4MDAsIDB4NzcsIDB4MDAsIDB4MGYsCisJCSAgIDB4MDAsIDB4NmYsIDB4MDAsIDB4ZmUsIDB4MDAsIDB4MDksIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MGYsIDB4MDAsIDB4NmYsIDB4MDApLAorCVBIWVJFR1MoMHgwN2I0LCAweDA3YjAsIDB4MDdhYywgMHgwMjE0LCAweDAyMTUsIDB4MDIxNiksCisgIH0sCisgIHsJLmZyZXEJCQk9IDQ5MzAsCisJUkFESU9SRUdTMygweGZmLCAweDAxLCAweDAxLCAweDAxLCAweGVkLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDhmLCAweDBmLCAweDAwLAorCQkgICAweGZmLCAweGZlLCAweDAwLCAweDA5LCAweDAwLCAweDc3LCAweDAwLCAweDBmLAorCQkgICAweDAwLCAweDZmLCAweDAwLCAweGZlLCAweDAwLCAweDA5LCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDBmLCAweDAwLCAweDZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDdiOCwgMHgwN2I0LCAweDA3YjAsIDB4MDIxMywgMHgwMjE0LCAweDAyMTUpLAorICB9LAorICB7CS5mcmVxCQkJPSA0OTQwLAorCVJBRElPUkVHUzMoMHhmZiwgMHgwMSwgMHgwMSwgMHgwMSwgMHhlZSwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4ZiwgMHgwZiwgMHgwMCwKKwkJICAgMHhmZiwgMHhmZSwgMHgwMCwgMHgwOSwgMHgwMCwgMHg3NywgMHgwMCwgMHgwZiwKKwkJICAgMHgwMCwgMHg2ZiwgMHgwMCwgMHhmZSwgMHgwMCwgMHgwOSwgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwZiwgMHgwMCwgMHg2ZiwgMHgwMCksCisJUEhZUkVHUygweDA3YmMsIDB4MDdiOCwgMHgwN2I0LCAweDAyMTIsIDB4MDIxMywgMHgwMjE0KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNDk1MCwKKwlSQURJT1JFR1MzKDB4ZmYsIDB4MDEsIDB4MDEsIDB4MDEsIDB4ZWYsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OGYsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZmYsIDB4ZmUsIDB4MDAsIDB4MDksIDB4MDAsIDB4NzcsIDB4MDAsIDB4MGYsCisJCSAgIDB4MDAsIDB4NmYsIDB4MDAsIDB4ZmUsIDB4MDAsIDB4MDksIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MGYsIDB4MDAsIDB4NmYsIDB4MDApLAorCVBIWVJFR1MoMHgwN2MwLCAweDA3YmMsIDB4MDdiOCwgMHgwMjExLCAweDAyMTIsIDB4MDIxMyksCisgIH0sCisgIHsJLmZyZXEJCQk9IDQ5NjAsCisJUkFESU9SRUdTMygweGZmLCAweDAxLCAweDAxLCAweDAxLCAweGYwLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDhmLCAweDBmLCAweDAwLAorCQkgICAweGZmLCAweGZlLCAweDAwLCAweDA5LCAweDAwLCAweDc3LCAweDAwLCAweDBmLAorCQkgICAweDAwLCAweDZmLCAweDAwLCAweGZlLCAweDAwLCAweDA5LCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDBmLCAweDAwLCAweDZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDdjNCwgMHgwN2MwLCAweDA3YmMsIDB4MDIwZiwgMHgwMjExLCAweDAyMTIpLAorICB9LAorICB7CS5mcmVxCQkJPSA0OTcwLAorCVJBRElPUkVHUzMoMHhmZiwgMHgwMSwgMHgwMSwgMHgwMSwgMHhmMSwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHg4ZiwgMHgwZiwgMHgwMCwKKwkJICAgMHhmZiwgMHhmZSwgMHgwMCwgMHgwOSwgMHgwMCwgMHg3NywgMHgwMCwgMHgwZiwKKwkJICAgMHgwMCwgMHg2ZiwgMHgwMCwgMHhmZSwgMHgwMCwgMHgwOSwgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwZiwgMHgwMCwgMHg2ZiwgMHgwMCksCisJUEhZUkVHUygweDA3YzgsIDB4MDdjNCwgMHgwN2MwLCAweDAyMGUsIDB4MDIwZiwgMHgwMjExKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNDk4MCwKKwlSQURJT1JFR1MzKDB4ZmYsIDB4MDEsIDB4MDEsIDB4MDEsIDB4ZjIsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4OGYsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZmYsIDB4ZmUsIDB4MDAsIDB4MDksIDB4MDAsIDB4NzcsIDB4MDAsIDB4MGYsCisJCSAgIDB4MDAsIDB4NmYsIDB4MDAsIDB4ZmUsIDB4MDAsIDB4MDksIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MGYsIDB4MDAsIDB4NmYsIDB4MDApLAorCVBIWVJFR1MoMHgwN2NjLCAweDA3YzgsIDB4MDdjNCwgMHgwMjBkLCAweDAyMGUsIDB4MDIwZiksCisgIH0sCisgIHsJLmZyZXEJCQk9IDQ5OTAsCisJUkFESU9SRUdTMygweGZmLCAweDAxLCAweDAxLCAweDAxLCAweGYzLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDhmLCAweDBmLCAweDAwLAorCQkgICAweGZmLCAweGZlLCAweDAwLCAweDA5LCAweDAwLCAweDc3LCAweDAwLCAweDBmLAorCQkgICAweDAwLCAweDZmLCAweDAwLCAweGZlLCAweDAwLCAweDA5LCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDBmLCAweDAwLCAweDZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDdkMCwgMHgwN2NjLCAweDA3YzgsIDB4MDIwYywgMHgwMjBkLCAweDAyMGUpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MDAwLAorCVJBRElPUkVHUzMoMHhmZiwgMHgwMSwgMHgwMSwgMHgwMSwgMHhmNCwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHg4ZiwgMHgwZiwgMHgwMCwKKwkJICAgMHhmZiwgMHhmZSwgMHgwMCwgMHgwOSwgMHgwMCwgMHg3NywgMHgwMCwgMHgwZiwKKwkJICAgMHgwMCwgMHg2ZiwgMHgwMCwgMHhmZSwgMHgwMCwgMHgwOSwgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwZiwgMHgwMCwgMHg2ZiwgMHgwMCksCisJUEhZUkVHUygweDA3ZDQsIDB4MDdkMCwgMHgwN2NjLCAweDAyMGIsIDB4MDIwYywgMHgwMjBkKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTAxMCwKKwlSQURJT1JFR1MzKDB4ZmYsIDB4MDEsIDB4MDEsIDB4MDEsIDB4ZjUsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4OGYsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZmYsIDB4ZmUsIDB4MDAsIDB4MDksIDB4MDAsIDB4NzcsIDB4MDAsIDB4MGYsCisJCSAgIDB4MDAsIDB4NmYsIDB4MDAsIDB4ZmUsIDB4MDAsIDB4MDksIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MGYsIDB4MDAsIDB4NmYsIDB4MDApLAorCVBIWVJFR1MoMHgwN2Q4LCAweDA3ZDQsIDB4MDdkMCwgMHgwMjBhLCAweDAyMGIsIDB4MDIwYyksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUwMjAsCisJUkFESU9SRUdTMygweGY3LCAweDAxLCAweDAxLCAweDAxLCAweGY2LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDhmLCAweDBmLCAweDAwLAorCQkgICAweGZmLCAweGZlLCAweDAwLCAweDA5LCAweDAwLCAweDc3LCAweDAwLCAweDBmLAorCQkgICAweDAwLCAweDZmLCAweDAwLCAweGZlLCAweDAwLCAweDA5LCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDBmLCAweDAwLCAweDZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDdkYywgMHgwN2Q4LCAweDA3ZDQsIDB4MDIwOSwgMHgwMjBhLCAweDAyMGIpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MDMwLAorCVJBRElPUkVHUzMoMHhmNywgMHgwMSwgMHgwMSwgMHgwMSwgMHhmNywgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHg4ZiwgMHgwZiwgMHgwMCwKKwkJICAgMHhmZiwgMHhmZSwgMHgwMCwgMHgwOSwgMHgwMCwgMHg3NywgMHgwMCwgMHgwZiwKKwkJICAgMHgwMCwgMHg2ZiwgMHgwMCwgMHhmZSwgMHgwMCwgMHgwOSwgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwZiwgMHgwMCwgMHg2ZiwgMHgwMCksCisJUEhZUkVHUygweDA3ZTAsIDB4MDdkYywgMHgwN2Q4LCAweDAyMDgsIDB4MDIwOSwgMHgwMjBhKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTA0MCwKKwlSQURJT1JFR1MzKDB4ZWYsIDB4MDEsIDB4MDEsIDB4MDEsIDB4ZjgsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4OGYsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZmYsIDB4ZmUsIDB4MDAsIDB4MDksIDB4MDAsIDB4NzcsIDB4MDAsIDB4MGYsCisJCSAgIDB4MDAsIDB4NmYsIDB4MDAsIDB4ZmUsIDB4MDAsIDB4MDksIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MGYsIDB4MDAsIDB4NmYsIDB4MDApLAorCVBIWVJFR1MoMHgwN2U0LCAweDA3ZTAsIDB4MDdkYywgMHgwMjA3LCAweDAyMDgsIDB4MDIwOSksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUwNTAsCisJUkFESU9SRUdTMygweGVmLCAweDAxLCAweDAxLCAweDAxLCAweGY5LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDhmLCAweDBmLCAweDAwLAorCQkgICAweGZmLCAweGZlLCAweDAwLCAweDA5LCAweDAwLCAweDc3LCAweDAwLCAweDBmLAorCQkgICAweDAwLCAweDZmLCAweDAwLCAweGZlLCAweDAwLCAweDA5LCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDBmLCAweDAwLCAweDZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDdlOCwgMHgwN2U0LCAweDA3ZTAsIDB4MDIwNiwgMHgwMjA3LCAweDAyMDgpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MDYwLAorCVJBRElPUkVHUzMoMHhlNiwgMHgwMSwgMHgwMSwgMHgwMSwgMHhmYSwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHg4ZiwgMHgwZiwgMHgwMCwKKwkJICAgMHhmZiwgMHhmZSwgMHgwMCwgMHgwOSwgMHgwMCwgMHg3NywgMHgwMCwgMHgwZiwKKwkJICAgMHgwMCwgMHg2ZiwgMHgwMCwgMHhmZSwgMHgwMCwgMHgwOSwgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwZiwgMHgwMCwgMHg2ZiwgMHgwMCksCisJUEhZUkVHUygweDA3ZWMsIDB4MDdlOCwgMHgwN2U0LCAweDAyMDUsIDB4MDIwNiwgMHgwMjA3KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTA3MCwKKwlSQURJT1JFR1MzKDB4ZTYsIDB4MDEsIDB4MDEsIDB4MDEsIDB4ZmIsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4OGYsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZmYsIDB4ZmQsIDB4MDAsIDB4MDksIDB4MDAsIDB4NzcsIDB4MDAsIDB4MGYsCisJCSAgIDB4MDAsIDB4NmYsIDB4MDAsIDB4ZmQsIDB4MDAsIDB4MDksIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MGYsIDB4MDAsIDB4NmYsIDB4MDApLAorCVBIWVJFR1MoMHgwN2YwLCAweDA3ZWMsIDB4MDdlOCwgMHgwMjA0LCAweDAyMDUsIDB4MDIwNiksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUwODAsCisJUkFESU9SRUdTMygweGRlLCAweDAxLCAweDAxLCAweDAxLCAweGZjLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDhmLCAweDBmLCAweDAwLAorCQkgICAweGZmLCAweGZkLCAweDAwLCAweDA5LCAweDAwLCAweDc3LCAweDAwLCAweDBmLAorCQkgICAweDAwLCAweDZmLCAweDAwLCAweGZkLCAweDAwLCAweDA5LCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDBmLCAweDAwLCAweDZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDdmNCwgMHgwN2YwLCAweDA3ZWMsIDB4MDIwMywgMHgwMjA0LCAweDAyMDUpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MDkwLAorCVJBRElPUkVHUzMoMHhkZSwgMHgwMSwgMHgwMSwgMHgwMSwgMHhmZCwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHg4ZiwgMHgwZiwgMHgwMCwKKwkJICAgMHhmZiwgMHhmZCwgMHgwMCwgMHgwOSwgMHgwMCwgMHg3NywgMHgwMCwgMHgwZiwKKwkJICAgMHgwMCwgMHg2ZiwgMHgwMCwgMHhmZCwgMHgwMCwgMHgwOSwgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwZiwgMHgwMCwgMHg2ZiwgMHgwMCksCisJUEhZUkVHUygweDA3ZjgsIDB4MDdmNCwgMHgwN2YwLCAweDAyMDIsIDB4MDIwMywgMHgwMjA0KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTEwMCwKKwlSQURJT1JFR1MzKDB4ZDYsIDB4MDEsIDB4MDEsIDB4MDEsIDB4ZmUsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDIsIDB4MDIsIDB4MDIsIDB4OGYsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZmYsIDB4ZmQsIDB4MDAsIDB4MDgsIDB4MDAsIDB4NzcsIDB4MDAsIDB4MGYsCisJCSAgIDB4MDAsIDB4NmYsIDB4MDAsIDB4ZmQsIDB4MDAsIDB4MDgsIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MGYsIDB4MDAsIDB4NmYsIDB4MDApLAorCVBIWVJFR1MoMHgwN2ZjLCAweDA3ZjgsIDB4MDdmNCwgMHgwMjAxLCAweDAyMDIsIDB4MDIwMyksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUxMTAsCisJUkFESU9SRUdTMygweGQ2LCAweDAxLCAweDAxLCAweDAxLCAweGZmLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAyLCAweDAyLCAweDAyLCAweDhmLCAweDBmLCAweDAwLAorCQkgICAweGZmLCAweGZjLCAweDAwLCAweDA4LCAweDAwLCAweDc3LCAweDAwLCAweDBmLAorCQkgICAweDAwLCAweDZmLCAweDAwLCAweGZjLCAweDAwLCAweDA4LCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDBmLCAweDAwLCAweDZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDgwMCwgMHgwN2ZjLCAweDA3ZjgsIDB4MDIwMCwgMHgwMjAxLCAweDAyMDIpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MTIwLAorCVJBRElPUkVHUzMoMHhjZSwgMHgwMSwgMHgwMSwgMHgwMiwgMHgwMCwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMiwgMHgwMiwgMHgwMiwgMHg4ZiwgMHgwZiwgMHgwMCwKKwkJICAgMHhmZiwgMHhmYywgMHgwMCwgMHgwOCwgMHgwMCwgMHg3NywgMHgwMCwgMHgwZiwKKwkJICAgMHgwMCwgMHg2ZiwgMHgwMCwgMHhmYywgMHgwMCwgMHgwOCwgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwZiwgMHgwMCwgMHg2ZiwgMHgwMCksCisJUEhZUkVHUygweDA4MDQsIDB4MDgwMCwgMHgwN2ZjLCAweDAxZmYsIDB4MDIwMCwgMHgwMjAxKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTEzMCwKKwlSQURJT1JFR1MzKDB4Y2UsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDIsIDB4MDIsIDB4MDIsIDB4OGYsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZmYsIDB4ZmMsIDB4MDAsIDB4MDgsIDB4MDAsIDB4NzcsIDB4MDAsIDB4MGYsCisJCSAgIDB4MDAsIDB4NmYsIDB4MDAsIDB4ZmMsIDB4MDAsIDB4MDgsIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MGYsIDB4MDAsIDB4NmYsIDB4MDApLAorCVBIWVJFR1MoMHgwODA4LCAweDA4MDQsIDB4MDgwMCwgMHgwMWZlLCAweDAxZmYsIDB4MDIwMCksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUxNDAsCisJUkFESU9SRUdTMygweGM2LCAweDAxLCAweDAxLCAweDAyLCAweDAyLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAyLCAweDAyLCAweDAyLCAweDhmLCAweDBmLCAweDAwLAorCQkgICAweGZmLCAweGZiLCAweDAwLCAweDA4LCAweDAwLCAweDc3LCAweDAwLCAweDBmLAorCQkgICAweDAwLCAweDZmLCAweDAwLCAweGZiLCAweDAwLCAweDA4LCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDBmLCAweDAwLCAweDZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDgwYywgMHgwODA4LCAweDA4MDQsIDB4MDFmZCwgMHgwMWZlLCAweDAxZmYpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MTYwLAorCVJBRElPUkVHUzMoMHhiZSwgMHgwMSwgMHgwMSwgMHgwMiwgMHgwNCwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMiwgMHgwMiwgMHgwMiwgMHg4ZiwgMHgwZiwgMHgwMCwKKwkJICAgMHhmZiwgMHhmYSwgMHgwMCwgMHgwNywgMHgwMCwgMHg3NywgMHgwMCwgMHgwZSwKKwkJICAgMHgwMCwgMHg2ZiwgMHgwMCwgMHhmYSwgMHgwMCwgMHgwNywgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwZSwgMHgwMCwgMHg2ZiwgMHgwMCksCisJUEhZUkVHUygweDA4MTQsIDB4MDgxMCwgMHgwODBjLCAweDAxZmIsIDB4MDFmYywgMHgwMWZkKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTE3MCwKKwlSQURJT1JFR1MzKDB4YmUsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MDUsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDIsIDB4MDIsIDB4MDIsIDB4OGYsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZmYsIDB4ZmEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4NzcsIDB4MDAsIDB4MGUsCisJCSAgIDB4MDAsIDB4NmYsIDB4MDAsIDB4ZmEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MGUsIDB4MDAsIDB4NmYsIDB4MDApLAorCVBIWVJFR1MoMHgwODE4LCAweDA4MTQsIDB4MDgxMCwgMHgwMWZhLCAweDAxZmIsIDB4MDFmYyksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUxODAsCisJUkFESU9SRUdTMygweGI2LCAweDAxLCAweDAxLCAweDAyLCAweDA2LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAyLCAweDAyLCAweDAyLCAweDhmLCAweDBmLCAweDAwLAorCQkgICAweGZmLCAweGY5LCAweDAwLCAweDA2LCAweDAwLCAweDc3LCAweDAwLCAweDBlLAorCQkgICAweDAwLCAweDZmLCAweDAwLCAweGY5LCAweDAwLCAweDA2LCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDBlLCAweDAwLCAweDZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDgxYywgMHgwODE4LCAweDA4MTQsIDB4MDFmOSwgMHgwMWZhLCAweDAxZmIpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MTkwLAorCVJBRElPUkVHUzMoMHhiNiwgMHgwMSwgMHgwMSwgMHgwMiwgMHgwNywgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMiwgMHgwMiwgMHgwMiwgMHg4ZiwgMHgwZiwgMHgwMCwKKwkJICAgMHhmZiwgMHhmOSwgMHgwMCwgMHgwNiwgMHgwMCwgMHg3NywgMHgwMCwgMHgwZCwKKwkJICAgMHgwMCwgMHg2ZiwgMHgwMCwgMHhmOSwgMHgwMCwgMHgwNiwgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwZCwgMHgwMCwgMHg2ZiwgMHgwMCksCisJUEhZUkVHUygweDA4MjAsIDB4MDgxYywgMHgwODE4LCAweDAxZjgsIDB4MDFmOSwgMHgwMWZhKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTIwMCwKKwlSQURJT1JFR1MzKDB4YWYsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MDgsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDIsIDB4MDIsIDB4MDIsIDB4OGYsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZmYsIDB4ZjksIDB4MDAsIDB4MDUsIDB4MDAsIDB4NzcsIDB4MDAsIDB4MGQsCisJCSAgIDB4MDAsIDB4NmYsIDB4MDAsIDB4ZjksIDB4MDAsIDB4MDUsIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MGQsIDB4MDAsIDB4NmYsIDB4MDApLAorCVBIWVJFR1MoMHgwODI0LCAweDA4MjAsIDB4MDgxYywgMHgwMWY3LCAweDAxZjgsIDB4MDFmOSksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUyMTAsCisJUkFESU9SRUdTMygweGFmLCAweDAxLCAweDAxLCAweDAyLCAweDA5LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAyLCAweDAyLCAweDAyLCAweDhmLCAweDBmLCAweDAwLAorCQkgICAweGZmLCAweGY5LCAweDAwLCAweDA1LCAweDAwLCAweDc3LCAweDAwLCAweDBkLAorCQkgICAweDAwLCAweDZmLCAweDAwLCAweGY5LCAweDAwLCAweDA1LCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDBkLCAweDAwLCAweDZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDgyOCwgMHgwODI0LCAweDA4MjAsIDB4MDFmNiwgMHgwMWY3LCAweDAxZjgpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MjIwLAorCVJBRElPUkVHUzMoMHhhNywgMHgwMSwgMHgwMSwgMHgwMiwgMHgwYSwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMiwgMHgwMiwgMHgwMiwgMHg4ZSwgMHgwZiwgMHgwMCwKKwkJICAgMHhmZSwgMHhkOCwgMHgwMCwgMHgwNSwgMHgwMCwgMHg3NywgMHgwMCwgMHgwZCwKKwkJICAgMHgwMCwgMHg2ZiwgMHgwMCwgMHhkOCwgMHgwMCwgMHgwNSwgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwZCwgMHgwMCwgMHg2ZiwgMHgwMCksCisJUEhZUkVHUygweDA4MmMsIDB4MDgyOCwgMHgwODI0LCAweDAxZjUsIDB4MDFmNiwgMHgwMWY3KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTIzMCwKKwlSQURJT1JFR1MzKDB4YTcsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MGIsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDIsIDB4MDIsIDB4MDIsIDB4OGUsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZWUsIDB4ZDgsIDB4MDAsIDB4MDUsIDB4MDAsIDB4NzcsIDB4MDAsIDB4MGQsCisJCSAgIDB4MDAsIDB4NmYsIDB4MDAsIDB4ZDgsIDB4MDAsIDB4MDUsIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MGQsIDB4MDAsIDB4NmYsIDB4MDApLAorCVBIWVJFR1MoMHgwODMwLCAweDA4MmMsIDB4MDgyOCwgMHgwMWY0LCAweDAxZjUsIDB4MDFmNiksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUyNDAsCisJUkFESU9SRUdTMygweGEwLCAweDAxLCAweDAxLCAweDAyLCAweDBjLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAyLCAweDAyLCAweDAyLCAweDhlLCAweDBmLCAweDAwLAorCQkgICAweGVlLCAweGM4LCAweDAwLCAweDA1LCAweDAwLCAweDc3LCAweDAwLCAweDBkLAorCQkgICAweDAwLCAweDZmLCAweDAwLCAweGM4LCAweDAwLCAweDA1LCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDBkLCAweDAwLCAweDZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDgzNCwgMHgwODMwLCAweDA4MmMsIDB4MDFmMywgMHgwMWY0LCAweDAxZjUpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MjUwLAorCVJBRElPUkVHUzMoMHhhMCwgMHgwMSwgMHgwMSwgMHgwMiwgMHgwZCwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMiwgMHgwMiwgMHgwMiwgMHg4ZSwgMHgwZiwgMHgwMCwKKwkJICAgMHhlZCwgMHhjNywgMHgwMCwgMHgwNSwgMHgwMCwgMHg3NywgMHgwMCwgMHgwZCwKKwkJICAgMHgwMCwgMHg2ZiwgMHgwMCwgMHhjNywgMHgwMCwgMHgwNSwgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwZCwgMHgwMCwgMHg2ZiwgMHgwMCksCisJUEhZUkVHUygweDA4MzgsIDB4MDgzNCwgMHgwODMwLCAweDAxZjIsIDB4MDFmMywgMHgwMWY0KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTI2MCwKKwlSQURJT1JFR1MzKDB4OTgsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MGUsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDIsIDB4MDIsIDB4MDIsIDB4OGUsIDB4MGUsIDB4MDAsCisJCSAgIDB4ZWQsIDB4YzcsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NzcsIDB4MDAsIDB4MGQsCisJCSAgIDB4MDAsIDB4NmYsIDB4MDAsIDB4YzcsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MGQsIDB4MDAsIDB4NmYsIDB4MDApLAorCVBIWVJFR1MoMHgwODNjLCAweDA4MzgsIDB4MDgzNCwgMHgwMWYxLCAweDAxZjIsIDB4MDFmMyksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUyNzAsCisJUkFESU9SRUdTMygweDk4LCAweDAxLCAweDAxLCAweDAyLCAweDBmLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAzLCAweDAzLCAweDAzLCAweDhlLCAweDBlLCAweDAwLAorCQkgICAweGVkLCAweGM3LCAweDAwLCAweDA0LCAweDAwLCAweDc3LCAweDAwLCAweDBjLAorCQkgICAweDAwLCAweDZmLCAweDAwLCAweGM3LCAweDAwLCAweDA0LCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDBjLCAweDAwLCAweDZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDg0MCwgMHgwODNjLCAweDA4MzgsIDB4MDFmMCwgMHgwMWYxLCAweDAxZjIpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MjgwLAorCVJBRElPUkVHUzMoMHg5MSwgMHgwMSwgMHgwMSwgMHgwMiwgMHgxMCwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMywgMHgwMywgMHgwMywgMHg4ZCwgMHgwZSwgMHgwMCwKKwkJICAgMHhkYywgMHhiNywgMHgwMCwgMHgwMywgMHgwMCwgMHg3NywgMHgwMCwgMHgwYywKKwkJICAgMHgwMCwgMHg2ZiwgMHgwMCwgMHhiNywgMHgwMCwgMHgwMywgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwYywgMHgwMCwgMHg2ZiwgMHgwMCksCisJUEhZUkVHUygweDA4NDQsIDB4MDg0MCwgMHgwODNjLCAweDAxZjAsIDB4MDFmMCwgMHgwMWYxKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTI5MCwKKwlSQURJT1JFR1MzKDB4OTEsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MTEsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDMsIDB4MDMsIDB4MDMsIDB4OGQsIDB4MGUsIDB4MDAsCisJCSAgIDB4ZGMsIDB4YjcsIDB4MDAsIDB4MDMsIDB4MDAsIDB4NzcsIDB4MDAsIDB4MGMsCisJCSAgIDB4MDAsIDB4NmYsIDB4MDAsIDB4YjcsIDB4MDAsIDB4MDMsIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MGMsIDB4MDAsIDB4NmYsIDB4MDApLAorCVBIWVJFR1MoMHgwODQ4LCAweDA4NDQsIDB4MDg0MCwgMHgwMWVmLCAweDAxZjAsIDB4MDFmMCksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUzMDAsCisJUkFESU9SRUdTMygweDhhLCAweDAxLCAweDAxLCAweDAyLCAweDEyLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAzLCAweDAzLCAweDAzLCAweDhkLCAweDBlLCAweDAwLAorCQkgICAweGRjLCAweGI3LCAweDAwLCAweDAzLCAweDAwLCAweDc3LCAweDAwLCAweDBjLAorCQkgICAweDAwLCAweDZmLCAweDAwLCAweGI3LCAweDAwLCAweDAzLCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDBjLCAweDAwLCAweDZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDg0YywgMHgwODQ4LCAweDA4NDQsIDB4MDFlZSwgMHgwMWVmLCAweDAxZjApLAorICB9LAorICB7CS5mcmVxCQkJPSA1MzEwLAorCVJBRElPUkVHUzMoMHg4YSwgMHgwMSwgMHgwMSwgMHgwMiwgMHgxMywgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMywgMHgwMywgMHgwMywgMHg4ZCwgMHgwZSwgMHgwMCwKKwkJICAgMHhkYywgMHhiNywgMHgwMCwgMHgwMywgMHgwMCwgMHg3NywgMHgwMCwgMHgwYywKKwkJICAgMHgwMCwgMHg2ZiwgMHgwMCwgMHhiNywgMHgwMCwgMHgwMywgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwYywgMHgwMCwgMHg2ZiwgMHgwMCksCisJUEhZUkVHUygweDA4NTAsIDB4MDg0YywgMHgwODQ4LCAweDAxZWQsIDB4MDFlZSwgMHgwMWVmKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTMyMCwKKwlSQURJT1JFR1MzKDB4ODMsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MTQsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDMsIDB4MDMsIDB4MDMsIDB4OGQsIDB4MGUsIDB4MDAsCisJCSAgIDB4ZGIsIDB4YjcsIDB4MDAsIDB4MDMsIDB4MDAsIDB4NzcsIDB4MDAsIDB4MGMsCisJCSAgIDB4MDAsIDB4NmYsIDB4MDAsIDB4YjcsIDB4MDAsIDB4MDMsIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MGMsIDB4MDAsIDB4NmYsIDB4MDApLAorCVBIWVJFR1MoMHgwODU0LCAweDA4NTAsIDB4MDg0YywgMHgwMWVjLCAweDAxZWQsIDB4MDFlZSksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUzMzAsCisJUkFESU9SRUdTMygweDgzLCAweDAxLCAweDAxLCAweDAyLCAweDE1LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAzLCAweDAzLCAweDAzLCAweDhkLCAweDBkLCAweDAwLAorCQkgICAweGNiLCAweGE2LCAweDAwLCAweDAzLCAweDAwLCAweDc3LCAweDAwLCAweDBiLAorCQkgICAweDAwLCAweDZmLCAweDAwLCAweGE2LCAweDAwLCAweDAzLCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDBiLCAweDAwLCAweDZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDg1OCwgMHgwODU0LCAweDA4NTAsIDB4MDFlYiwgMHgwMWVjLCAweDAxZWQpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MzQwLAorCVJBRElPUkVHUzMoMHg3YywgMHgwMSwgMHgwMSwgMHgwMiwgMHgxNiwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMywgMHgwMywgMHgwMywgMHg4ZCwgMHgwZCwgMHgwMCwKKwkJICAgMHhjYSwgMHhhNiwgMHgwMCwgMHgwMywgMHgwMCwgMHg3NywgMHgwMCwgMHgwYiwKKwkJICAgMHgwMCwgMHg2ZiwgMHgwMCwgMHhhNiwgMHgwMCwgMHgwMywgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwYiwgMHgwMCwgMHg2ZiwgMHgwMCksCisJUEhZUkVHUygweDA4NWMsIDB4MDg1OCwgMHgwODU0LCAweDAxZWEsIDB4MDFlYiwgMHgwMWVjKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTM1MCwKKwlSQURJT1JFR1MzKDB4N2MsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MTcsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDMsIDB4MDMsIDB4MDMsIDB4OGMsIDB4MGQsIDB4MDAsCisJCSAgIDB4Y2EsIDB4YTYsIDB4MDAsIDB4MDMsIDB4MDAsIDB4NzcsIDB4MDAsIDB4MGIsCisJCSAgIDB4MDAsIDB4NmYsIDB4MDAsIDB4YTYsIDB4MDAsIDB4MDMsIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MGIsIDB4MDAsIDB4NmYsIDB4MDApLAorCVBIWVJFR1MoMHgwODYwLCAweDA4NWMsIDB4MDg1OCwgMHgwMWU5LCAweDAxZWEsIDB4MDFlYiksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUzNjAsCisJUkFESU9SRUdTMygweDc1LCAweDAxLCAweDAxLCAweDAyLCAweDE4LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAzLCAweDAzLCAweDAzLCAweDhjLCAweDBkLCAweDAwLAorCQkgICAweGM5LCAweDk1LCAweDAwLCAweDAzLCAweDAwLCAweDc3LCAweDAwLCAweDBhLAorCQkgICAweDAwLCAweDZmLCAweDAwLCAweDk1LCAweDAwLCAweDAzLCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDBhLCAweDAwLCAweDZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDg2NCwgMHgwODYwLCAweDA4NWMsIDB4MDFlOCwgMHgwMWU5LCAweDAxZWEpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MzcwLAorCVJBRElPUkVHUzMoMHg3NSwgMHgwMSwgMHgwMSwgMHgwMiwgMHgxOSwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMywgMHgwMywgMHgwMywgMHg4YywgMHgwZCwgMHgwMCwKKwkJICAgMHhjOSwgMHg5NSwgMHgwMCwgMHgwMywgMHgwMCwgMHg3NywgMHgwMCwgMHgwYSwKKwkJICAgMHgwMCwgMHg2ZiwgMHgwMCwgMHg5NSwgMHgwMCwgMHgwMywgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwYSwgMHgwMCwgMHg2ZiwgMHgwMCksCisJUEhZUkVHUygweDA4NjgsIDB4MDg2NCwgMHgwODYwLCAweDAxZTcsIDB4MDFlOCwgMHgwMWU5KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTM4MCwKKwlSQURJT1JFR1MzKDB4NmUsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MWEsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDMsIDB4MDMsIDB4MDMsIDB4OGMsIDB4MGMsIDB4MDAsCisJCSAgIDB4YjgsIDB4OTUsIDB4MDAsIDB4MDMsIDB4MDAsIDB4NzcsIDB4MDAsIDB4MGEsCisJCSAgIDB4MDAsIDB4NmYsIDB4MDAsIDB4OTUsIDB4MDAsIDB4MDMsIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MGEsIDB4MDAsIDB4NmYsIDB4MDApLAorCVBIWVJFR1MoMHgwODZjLCAweDA4NjgsIDB4MDg2NCwgMHgwMWU2LCAweDAxZTcsIDB4MDFlOCksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUzOTAsCisJUkFESU9SRUdTMygweDZlLCAweDAxLCAweDAxLCAweDAyLCAweDFiLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAzLCAweDAzLCAweDAzLCAweDhjLCAweDBjLCAweDAwLAorCQkgICAweGI4LCAweDg0LCAweDAwLCAweDAzLCAweDAwLCAweDc3LCAweDAwLCAweDBhLAorCQkgICAweDAwLCAweDZmLCAweDAwLCAweDg0LCAweDAwLCAweDAzLCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDBhLCAweDAwLCAweDZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDg3MCwgMHgwODZjLCAweDA4NjgsIDB4MDFlNSwgMHgwMWU2LCAweDAxZTcpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NDAwLAorCVJBRElPUkVHUzMoMHg2NywgMHgwMSwgMHgwMSwgMHgwMiwgMHgxYywgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMywgMHgwMywgMHgwMywgMHg4YywgMHgwYywgMHgwMCwKKwkJICAgMHhiOCwgMHg4NCwgMHgwMCwgMHgwMywgMHgwMCwgMHg3NywgMHgwMCwgMHgwYSwKKwkJICAgMHgwMCwgMHg2ZiwgMHgwMCwgMHg4NCwgMHgwMCwgMHgwMywgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwYSwgMHgwMCwgMHg2ZiwgMHgwMCksCisJUEhZUkVHUygweDA4NzQsIDB4MDg3MCwgMHgwODZjLCAweDAxZTUsIDB4MDFlNSwgMHgwMWU2KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTQxMCwKKwlSQURJT1JFR1MzKDB4NjcsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MWQsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDMsIDB4MDMsIDB4MDMsIDB4OGMsIDB4MGMsIDB4MDAsCisJCSAgIDB4YjcsIDB4ODQsIDB4MDAsIDB4MDIsIDB4MDAsIDB4NzcsIDB4MDAsIDB4MGEsCisJCSAgIDB4MDAsIDB4NmYsIDB4MDAsIDB4ODQsIDB4MDAsIDB4MDIsIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MGEsIDB4MDAsIDB4NmYsIDB4MDApLAorCVBIWVJFR1MoMHgwODc4LCAweDA4NzQsIDB4MDg3MCwgMHgwMWU0LCAweDAxZTUsIDB4MDFlNSksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU0MjAsCisJUkFESU9SRUdTMygweDYxLCAweDAxLCAweDAxLCAweDAyLCAweDFlLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAzLCAweDAzLCAweDAzLCAweDhjLCAweDBjLCAweDAwLAorCQkgICAweGE3LCAweDg0LCAweDAwLCAweDAyLCAweDAwLCAweDc3LCAweDAwLCAweDBhLAorCQkgICAweDAwLCAweDZmLCAweDAwLCAweDg0LCAweDAwLCAweDAyLCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDBhLCAweDAwLCAweDZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDg3YywgMHgwODc4LCAweDA4NzQsIDB4MDFlMywgMHgwMWU0LCAweDAxZTUpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NDMwLAorCVJBRElPUkVHUzMoMHg2MSwgMHgwMSwgMHgwMSwgMHgwMiwgMHgxZiwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMywgMHgwMywgMHgwMywgMHg4YywgMHgwYiwgMHgwMCwKKwkJICAgMHhhNiwgMHg4NCwgMHgwMCwgMHgwMiwgMHgwMCwgMHg3NywgMHgwMCwgMHgwYSwKKwkJICAgMHgwMCwgMHg2ZiwgMHgwMCwgMHg4NCwgMHgwMCwgMHgwMiwgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwYSwgMHgwMCwgMHg2ZiwgMHgwMCksCisJUEhZUkVHUygweDA4ODAsIDB4MDg3YywgMHgwODc4LCAweDAxZTIsIDB4MDFlMywgMHgwMWU0KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTQ0MCwKKwlSQURJT1JFR1MzKDB4NWEsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MjAsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDQsIDB4MDQsIDB4MDQsIDB4OGIsIDB4MGIsIDB4MDAsCisJCSAgIDB4YTYsIDB4ODQsIDB4MDAsIDB4MDIsIDB4MDAsIDB4NzcsIDB4MDAsIDB4MDksCisJCSAgIDB4MDAsIDB4NmYsIDB4MDAsIDB4ODQsIDB4MDAsIDB4MDIsIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MDksIDB4MDAsIDB4NmYsIDB4MDApLAorCVBIWVJFR1MoMHgwODg0LCAweDA4ODAsIDB4MDg3YywgMHgwMWUxLCAweDAxZTIsIDB4MDFlMyksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU0NTAsCisJUkFESU9SRUdTMygweDVhLCAweDAxLCAweDAxLCAweDAyLCAweDIxLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA0LCAweDA0LCAweDA0LCAweDhiLCAweDBiLCAweDAwLAorCQkgICAweDk1LCAweDg0LCAweDAwLCAweDAxLCAweDAwLCAweDc3LCAweDAwLCAweDA5LAorCQkgICAweDAwLCAweDZmLCAweDAwLCAweDg0LCAweDAwLCAweDAxLCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDA5LCAweDAwLCAweDZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDg4OCwgMHgwODg0LCAweDA4ODAsIDB4MDFlMCwgMHgwMWUxLCAweDAxZTIpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NDYwLAorCVJBRElPUkVHUzMoMHg1MywgMHgwMSwgMHgwMSwgMHgwMiwgMHgyMiwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNCwgMHgwNCwgMHgwNCwgMHg4YiwgMHgwYiwgMHgwMCwKKwkJICAgMHg5NSwgMHg4NCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg3NywgMHgwMCwgMHgwOSwKKwkJICAgMHgwMCwgMHg2ZiwgMHgwMCwgMHg4NCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwOSwgMHgwMCwgMHg2ZiwgMHgwMCksCisJUEhZUkVHUygweDA4OGMsIDB4MDg4OCwgMHgwODg0LCAweDAxZGYsIDB4MDFlMCwgMHgwMWUxKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTQ3MCwKKwlSQURJT1JFR1MzKDB4NTMsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MjMsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDQsIDB4MDQsIDB4MDQsIDB4OGIsIDB4MGIsIDB4MDAsCisJCSAgIDB4OTQsIDB4NzMsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NzcsIDB4MDAsIDB4MDksCisJCSAgIDB4MDAsIDB4NmYsIDB4MDAsIDB4NzMsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MDksIDB4MDAsIDB4NmYsIDB4MDApLAorCVBIWVJFR1MoMHgwODkwLCAweDA4OGMsIDB4MDg4OCwgMHgwMWRlLCAweDAxZGYsIDB4MDFlMCksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU0ODAsCisJUkFESU9SRUdTMygweDRkLCAweDAxLCAweDAxLCAweDAyLCAweDI0LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA0LCAweDA0LCAweDA0LCAweDhhLCAweDBhLCAweDAwLAorCQkgICAweDg0LCAweDczLCAweDAwLCAweDAwLCAweDAwLCAweDc3LCAweDAwLCAweDA5LAorCQkgICAweDAwLCAweDZmLCAweDAwLCAweDczLCAweDAwLCAweDAwLCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDA5LCAweDAwLCAweDZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDg5NCwgMHgwODkwLCAweDA4OGMsIDB4MDFkZCwgMHgwMWRlLCAweDAxZGYpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NDkwLAorCVJBRElPUkVHUzMoMHg0ZCwgMHgwMSwgMHgwMSwgMHgwMiwgMHgyNSwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNCwgMHgwNCwgMHgwNCwgMHg4YSwgMHgwYSwgMHgwMCwKKwkJICAgMHg4MywgMHg3MywgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywgMHgwMCwgMHgwOSwKKwkJICAgMHgwMCwgMHg2ZiwgMHgwMCwgMHg3MywgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwOSwgMHgwMCwgMHg2ZiwgMHgwMCksCisJUEhZUkVHUygweDA4OTgsIDB4MDg5NCwgMHgwODkwLCAweDAxZGQsIDB4MDFkZCwgMHgwMWRlKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTUwMCwKKwlSQURJT1JFR1MzKDB4NDcsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MjYsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDQsIDB4MDQsIDB4MDQsIDB4OGEsIDB4MGEsIDB4MDAsCisJCSAgIDB4ODIsIDB4NzMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4MDAsIDB4MDksCisJCSAgIDB4MDAsIDB4NmYsIDB4MDAsIDB4NzMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MDksIDB4MDAsIDB4NmYsIDB4MDApLAorCVBIWVJFR1MoMHgwODljLCAweDA4OTgsIDB4MDg5NCwgMHgwMWRjLCAweDAxZGQsIDB4MDFkZCksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU1MTAsCisJUkFESU9SRUdTMygweDQ3LCAweDAxLCAweDAxLCAweDAyLCAweDI3LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA0LCAweDA0LCAweDA0LCAweDhhLCAweDBhLCAweDAwLAorCQkgICAweDgyLCAweDczLCAweDAwLCAweDAwLCAweDAwLCAweDc3LCAweDAwLCAweDA5LAorCQkgICAweDAwLCAweDZmLCAweDAwLCAweDczLCAweDAwLCAweDAwLCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDA5LCAweDAwLCAweDZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDhhMCwgMHgwODljLCAweDA4OTgsIDB4MDFkYiwgMHgwMWRjLCAweDAxZGQpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NTIwLAorCVJBRElPUkVHUzMoMHg0MCwgMHgwMSwgMHgwMSwgMHgwMiwgMHgyOCwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNCwgMHgwNCwgMHgwNCwgMHg4YSwgMHgwYSwgMHgwMCwKKwkJICAgMHg3MiwgMHg3MywgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywgMHgwMCwgMHgwOSwKKwkJICAgMHgwMCwgMHg2ZiwgMHgwMCwgMHg3MywgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwOSwgMHgwMCwgMHg2ZiwgMHgwMCksCisJUEhZUkVHUygweDA4YTQsIDB4MDhhMCwgMHgwODljLCAweDAxZGEsIDB4MDFkYiwgMHgwMWRjKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTUzMCwKKwlSQURJT1JFR1MzKDB4NDAsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MjksIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDQsIDB4MDQsIDB4MDQsIDB4OGEsIDB4MDksIDB4MDAsCisJCSAgIDB4NzIsIDB4NzMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4MDAsIDB4MDksCisJCSAgIDB4MDAsIDB4NmYsIDB4MDAsIDB4NzMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MDksIDB4MDAsIDB4NmYsIDB4MDApLAorCVBIWVJFR1MoMHgwOGE4LCAweDA4YTQsIDB4MDhhMCwgMHgwMWQ5LCAweDAxZGEsIDB4MDFkYiksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU1NDAsCisJUkFESU9SRUdTMygweDNhLCAweDAxLCAweDAxLCAweDAyLCAweDJhLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA0LCAweDA0LCAweDA0LCAweDhhLCAweDA5LCAweDAwLAorCQkgICAweDcxLCAweDczLCAweDAwLCAweDAwLCAweDAwLCAweDc3LCAweDAwLCAweDA5LAorCQkgICAweDAwLCAweDZmLCAweDAwLCAweDczLCAweDAwLCAweDAwLCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDA5LCAweDAwLCAweDZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDhhYywgMHgwOGE4LCAweDA4YTQsIDB4MDFkOCwgMHgwMWQ5LCAweDAxZGEpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NTUwLAorCVJBRElPUkVHUzMoMHgzYSwgMHgwMSwgMHgwMSwgMHgwMiwgMHgyYiwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNCwgMHgwNCwgMHgwNCwgMHg4OSwgMHgwOSwgMHgwMCwKKwkJICAgMHg2MSwgMHg3MywgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywgMHgwMCwgMHgwOSwKKwkJICAgMHgwMCwgMHg2ZiwgMHgwMCwgMHg3MywgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwOSwgMHgwMCwgMHg2ZiwgMHgwMCksCisJUEhZUkVHUygweDA4YjAsIDB4MDhhYywgMHgwOGE4LCAweDAxZDcsIDB4MDFkOCwgMHgwMWQ5KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTU2MCwKKwlSQURJT1JFR1MzKDB4MzQsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MmMsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDQsIDB4MDQsIDB4MDQsIDB4ODksIDB4MDksIDB4MDAsCisJCSAgIDB4NjEsIDB4NzMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4MDAsIDB4MDksCisJCSAgIDB4MDAsIDB4NmYsIDB4MDAsIDB4NzMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MDksIDB4MDAsIDB4NmYsIDB4MDApLAorCVBIWVJFR1MoMHgwOGI0LCAweDA4YjAsIDB4MDhhYywgMHgwMWQ3LCAweDAxZDcsIDB4MDFkOCksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU1NzAsCisJUkFESU9SRUdTMygweDM0LCAweDAxLCAweDAxLCAweDAyLCAweDJkLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA0LCAweDA0LCAweDA0LCAweDg5LCAweDA5LCAweDAwLAorCQkgICAweDYxLCAweDYyLCAweDAwLCAweDAwLCAweDAwLCAweDc3LCAweDAwLCAweDA5LAorCQkgICAweDAwLCAweDZmLCAweDAwLCAweDYyLCAweDAwLCAweDAwLCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDA5LCAweDAwLCAweDZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDhiOCwgMHgwOGI0LCAweDA4YjAsIDB4MDFkNiwgMHgwMWQ3LCAweDAxZDcpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NTgwLAorCVJBRElPUkVHUzMoMHgyZSwgMHgwMSwgMHgwMSwgMHgwMiwgMHgyZSwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNCwgMHgwNCwgMHgwNCwgMHg4OSwgMHgwOCwgMHgwMCwKKwkJICAgMHg2MCwgMHg2MiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywgMHgwMCwgMHgwOCwKKwkJICAgMHgwMCwgMHg2ZiwgMHgwMCwgMHg2MiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwOCwgMHgwMCwgMHg2ZiwgMHgwMCksCisJUEhZUkVHUygweDA4YmMsIDB4MDhiOCwgMHgwOGI0LCAweDAxZDUsIDB4MDFkNiwgMHgwMWQ3KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTU5MCwKKwlSQURJT1JFR1MzKDB4MmUsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MmYsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDQsIDB4MDQsIDB4MDQsIDB4ODksIDB4MDgsIDB4MDAsCisJCSAgIDB4NTAsIDB4NjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4MDAsIDB4MDgsCisJCSAgIDB4MDAsIDB4NmYsIDB4MDAsIDB4NjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MDgsIDB4MDAsIDB4NmYsIDB4MDApLAorCVBIWVJFR1MoMHgwOGMwLCAweDA4YmMsIDB4MDhiOCwgMHgwMWQ0LCAweDAxZDUsIDB4MDFkNiksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU2MDAsCisJUkFESU9SRUdTMygweDI4LCAweDAxLCAweDAxLCAweDAyLCAweDMwLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA1LCAweDA1LCAweDA1LCAweDg5LCAweDA4LCAweDAwLAorCQkgICAweDUwLCAweDUxLCAweDAwLCAweDAwLCAweDAwLCAweDc3LCAweDAwLCAweDA4LAorCQkgICAweDAwLCAweDZmLCAweDAwLCAweDUxLCAweDAwLCAweDAwLCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDA4LCAweDAwLCAweDZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDhjNCwgMHgwOGMwLCAweDA4YmMsIDB4MDFkMywgMHgwMWQ0LCAweDAxZDUpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NjEwLAorCVJBRElPUkVHUzMoMHgyOCwgMHgwMSwgMHgwMSwgMHgwMiwgMHgzMSwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNSwgMHgwNSwgMHgwNSwgMHg4OSwgMHgwOCwgMHgwMCwKKwkJICAgMHg1MCwgMHg1MSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywgMHgwMCwgMHgwOCwKKwkJICAgMHgwMCwgMHg2ZiwgMHgwMCwgMHg1MSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwOCwgMHgwMCwgMHg2ZiwgMHgwMCksCisJUEhZUkVHUygweDA4YzgsIDB4MDhjNCwgMHgwOGMwLCAweDAxZDIsIDB4MDFkMywgMHgwMWQ0KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTYyMCwKKwlSQURJT1JFR1MzKDB4MjEsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MzIsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDUsIDB4ODksIDB4MDgsIDB4MDAsCisJCSAgIDB4NTAsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4MDAsIDB4MDcsCisJCSAgIDB4MDAsIDB4NmYsIDB4MDAsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MDcsIDB4MDAsIDB4NmYsIDB4MDApLAorCVBIWVJFR1MoMHgwOGNjLCAweDA4YzgsIDB4MDhjNCwgMHgwMWQyLCAweDAxZDIsIDB4MDFkMyksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU2MzAsCisJUkFESU9SRUdTMygweDIxLCAweDAxLCAweDAxLCAweDAyLCAweDMzLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA1LCAweDA1LCAweDA1LCAweDg4LCAweDA3LCAweDAwLAorCQkgICAweDUwLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LCAweDAwLCAweDA3LAorCQkgICAweDAwLCAweDZmLCAweDAwLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDA3LCAweDAwLCAweDZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDhkMCwgMHgwOGNjLCAweDA4YzgsIDB4MDFkMSwgMHgwMWQyLCAweDAxZDIpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NjQwLAorCVJBRElPUkVHUzMoMHgxYywgMHgwMSwgMHgwMSwgMHgwMiwgMHgzNCwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNSwgMHgwNSwgMHgwNSwgMHg4OCwgMHgwNywgMHgwMCwKKwkJICAgMHg0MCwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywgMHgwMCwgMHgwNywKKwkJICAgMHgwMCwgMHg2ZiwgMHgwMCwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwNywgMHgwMCwgMHg2ZiwgMHgwMCksCisJUEhZUkVHUygweDA4ZDQsIDB4MDhkMCwgMHgwOGNjLCAweDAxZDAsIDB4MDFkMSwgMHgwMWQyKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTY1MCwKKwlSQURJT1JFR1MzKDB4MWMsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MzUsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDUsIDB4ODgsIDB4MDcsIDB4MDAsCisJCSAgIDB4NDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4MDAsIDB4MDcsCisJCSAgIDB4MDAsIDB4NmYsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MDcsIDB4MDAsIDB4NmYsIDB4MDApLAorCVBIWVJFR1MoMHgwOGQ4LCAweDA4ZDQsIDB4MDhkMCwgMHgwMWNmLCAweDAxZDAsIDB4MDFkMSksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU2NjAsCisJUkFESU9SRUdTMygweDE2LCAweDAxLCAweDAxLCAweDAyLCAweDM2LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA1LCAweDA1LCAweDA1LCAweDg4LCAweDA3LCAweDAwLAorCQkgICAweDQwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LCAweDAwLCAweDA2LAorCQkgICAweDAwLCAweDZmLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDA2LCAweDAwLCAweDZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDhkYywgMHgwOGQ4LCAweDA4ZDQsIDB4MDFjZSwgMHgwMWNmLCAweDAxZDApLAorICB9LAorICB7CS5mcmVxCQkJPSA1NjcwLAorCVJBRElPUkVHUzMoMHgxNiwgMHgwMSwgMHgwMSwgMHgwMiwgMHgzNywgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNSwgMHgwNSwgMHgwNSwgMHg4OCwgMHgwNywgMHgwMCwKKwkJICAgMHg0MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywgMHgwMCwgMHgwNiwKKwkJICAgMHgwMCwgMHg2ZiwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwNiwgMHgwMCwgMHg2ZiwgMHgwMCksCisJUEhZUkVHUygweDA4ZTAsIDB4MDhkYywgMHgwOGQ4LCAweDAxY2UsIDB4MDFjZSwgMHgwMWNmKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTY4MCwKKwlSQURJT1JFR1MzKDB4MTAsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MzgsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDUsIDB4ODcsIDB4MDYsIDB4MDAsCisJCSAgIDB4MzAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4MDAsIDB4MDYsCisJCSAgIDB4MDAsIDB4NmYsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MDYsIDB4MDAsIDB4NmYsIDB4MDApLAorCVBIWVJFR1MoMHgwOGU0LCAweDA4ZTAsIDB4MDhkYywgMHgwMWNkLCAweDAxY2UsIDB4MDFjZSksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU2OTAsCisJUkFESU9SRUdTMygweDEwLCAweDAxLCAweDAxLCAweDAyLCAweDM5LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA1LCAweDA1LCAweDA1LCAweDg3LCAweDA2LCAweDAwLAorCQkgICAweDMwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LCAweDAwLCAweDA2LAorCQkgICAweDAwLCAweDZmLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDA2LCAweDAwLCAweDZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDhlOCwgMHgwOGU0LCAweDA4ZTAsIDB4MDFjYywgMHgwMWNkLCAweDAxY2UpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NzAwLAorCVJBRElPUkVHUzMoMHgwYSwgMHgwMSwgMHgwMSwgMHgwMiwgMHgzYSwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNSwgMHgwNSwgMHgwNSwgMHg4NywgMHgwNiwgMHgwMCwKKwkJICAgMHgzMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywgMHgwMCwgMHgwNiwKKwkJICAgMHgwMCwgMHg2ZSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwNiwgMHgwMCwgMHg2ZSwgMHgwMCksCisJUEhZUkVHUygweDA4ZWMsIDB4MDhlOCwgMHgwOGU0LCAweDAxY2IsIDB4MDFjYywgMHgwMWNkKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTcxMCwKKwlSQURJT1JFR1MzKDB4MGEsIDB4MDEsIDB4MDEsIDB4MDIsIDB4M2IsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDUsIDB4ODcsIDB4MDYsIDB4MDAsCisJCSAgIDB4MzAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4MDAsIDB4MDYsCisJCSAgIDB4MDAsIDB4NmUsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MDYsIDB4MDAsIDB4NmUsIDB4MDApLAorCVBIWVJFR1MoMHgwOGYwLCAweDA4ZWMsIDB4MDhlOCwgMHgwMWNhLCAweDAxY2IsIDB4MDFjYyksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU3MjAsCisJUkFESU9SRUdTMygweDBhLCAweDAxLCAweDAxLCAweDAyLCAweDNjLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA1LCAweDA1LCAweDA1LCAweDg3LCAweDA2LCAweDAwLAorCQkgICAweDMwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LCAweDAwLCAweDA2LAorCQkgICAweDAwLCAweDZlLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDA2LCAweDAwLCAweDZlLCAweDAwKSwKKwlQSFlSRUdTKDB4MDhmNCwgMHgwOGYwLCAweDA4ZWMsIDB4MDFjOSwgMHgwMWNhLCAweDAxY2IpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NzI1LAorCVJBRElPUkVHUzMoMHgwMywgMHgwMSwgMHgwMiwgMHgwNCwgMHg3OSwgMHgwNywgMHgwNywgMHgwNCwKKwkJICAgMHgxMCwgMHgwMSwgMHgwNSwgMHgwNSwgMHgwNSwgMHg4NywgMHgwNiwgMHgwMCwKKwkJICAgMHgzMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywgMHgwMCwgMHgwNiwKKwkJICAgMHgwMCwgMHg2ZSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwNiwgMHgwMCwgMHg2ZSwgMHgwMCksCisJUEhZUkVHUygweDA4ZjYsIDB4MDhmMiwgMHgwOGVlLCAweDAxYzksIDB4MDFjYSwgMHgwMWNiKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTczMCwKKwlSQURJT1JFR1MzKDB4MGEsIDB4MDEsIDB4MDEsIDB4MDIsIDB4M2QsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDUsIDB4ODcsIDB4MDUsIDB4MDAsCisJCSAgIDB4MjAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4MDAsIDB4MDYsCisJCSAgIDB4MDAsIDB4NmUsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MDYsIDB4MDAsIDB4NmUsIDB4MDApLAorCVBIWVJFR1MoMHgwOGY4LCAweDA4ZjQsIDB4MDhmMCwgMHgwMWM5LCAweDAxYzksIDB4MDFjYSksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU3MzUsCisJUkFESU9SRUdTMygweDAzLCAweDAxLCAweDAyLCAweDA0LCAweDdiLCAweDA3LCAweDA3LCAweDA0LAorCQkgICAweDEwLCAweDAxLCAweDA1LCAweDA1LCAweDA1LCAweDg3LCAweDA1LCAweDAwLAorCQkgICAweDIwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LCAweDAwLCAweDA2LAorCQkgICAweDAwLCAweDZkLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDA2LCAweDAwLCAweDZkLCAweDAwKSwKKwlQSFlSRUdTKDB4MDhmYSwgMHgwOGY2LCAweDA4ZjIsIDB4MDFjOCwgMHgwMWM5LCAweDAxY2EpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NzQwLAorCVJBRElPUkVHUzMoMHgwYSwgMHgwMSwgMHgwMSwgMHgwMiwgMHgzZSwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNSwgMHgwNSwgMHgwNSwgMHg4NywgMHgwNSwgMHgwMCwKKwkJICAgMHgyMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywgMHgwMCwgMHgwNiwKKwkJICAgMHgwMCwgMHg2ZCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwNiwgMHgwMCwgMHg2ZCwgMHgwMCksCisJUEhZUkVHUygweDA4ZmMsIDB4MDhmOCwgMHgwOGY0LCAweDAxYzgsIDB4MDFjOSwgMHgwMWM5KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTc0NSwKKwlSQURJT1JFR1MzKDB4ZmUsIDB4MDAsIDB4MDIsIDB4MDQsIDB4N2QsIDB4MDcsIDB4MDcsIDB4MDQsCisJCSAgIDB4MTAsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDUsIDB4ODcsIDB4MDUsIDB4MDAsCisJCSAgIDB4MjAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4MDAsIDB4MDYsCisJCSAgIDB4MDAsIDB4NmQsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MDYsIDB4MDAsIDB4NmQsIDB4MDApLAorCVBIWVJFR1MoMHgwOGZlLCAweDA4ZmEsIDB4MDhmNiwgMHgwMWM4LCAweDAxYzgsIDB4MDFjOSksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU3NTAsCisJUkFESU9SRUdTMygweDBhLCAweDAxLCAweDAxLCAweDAyLCAweDNmLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA1LCAweDA1LCAweDA1LCAweDg3LCAweDA1LCAweDAwLAorCQkgICAweDIwLCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LCAweDAwLCAweDA1LAorCQkgICAweDAwLCAweDZkLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDA1LCAweDAwLCAweDZkLCAweDAwKSwKKwlQSFlSRUdTKDB4MDkwMCwgMHgwOGZjLCAweDA4ZjgsIDB4MDFjNywgMHgwMWM4LCAweDAxYzkpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NzU1LAorCVJBRElPUkVHUzMoMHhmZSwgMHgwMCwgMHgwMiwgMHgwNCwgMHg3ZiwgMHgwNywgMHgwNywgMHgwNCwKKwkJICAgMHgxMCwgMHgwMSwgMHgwNSwgMHgwNSwgMHgwNSwgMHg4NywgMHgwNSwgMHgwMCwKKwkJICAgMHgxMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywgMHgwMCwgMHgwNSwKKwkJICAgMHgwMCwgMHg2YywgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwNSwgMHgwMCwgMHg2YywgMHgwMCksCisJUEhZUkVHUygweDA5MDIsIDB4MDhmZSwgMHgwOGZhLCAweDAxYzcsIDB4MDFjOCwgMHgwMWM4KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTc2MCwKKwlSQURJT1JFR1MzKDB4MGEsIDB4MDEsIDB4MDEsIDB4MDIsIDB4NDAsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDUsIDB4ODYsIDB4MDUsIDB4MDAsCisJCSAgIDB4MTAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4MDAsIDB4MDUsCisJCSAgIDB4MDAsIDB4NmMsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MDUsIDB4MDAsIDB4NmMsIDB4MDApLAorCVBIWVJFR1MoMHgwOTA0LCAweDA5MDAsIDB4MDhmYywgMHgwMWM2LCAweDAxYzcsIDB4MDFjOCksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU3NjUsCisJUkFESU9SRUdTMygweGY4LCAweDAwLCAweDAyLCAweDA0LCAweDgxLCAweDA3LCAweDA3LCAweDA0LAorCQkgICAweDEwLCAweDAxLCAweDA1LCAweDA1LCAweDA1LCAweDg2LCAweDA1LCAweDAwLAorCQkgICAweDEwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LCAweDAwLCAweDA1LAorCQkgICAweDAwLCAweDZjLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDA1LCAweDAwLCAweDZjLCAweDAwKSwKKwlQSFlSRUdTKDB4MDkwNiwgMHgwOTAyLCAweDA4ZmUsIDB4MDFjNiwgMHgwMWM3LCAweDAxYzgpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NzcwLAorCVJBRElPUkVHUzMoMHgwYSwgMHgwMSwgMHgwMSwgMHgwMiwgMHg0MSwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNSwgMHgwNSwgMHgwNSwgMHg4NiwgMHgwNCwgMHgwMCwKKwkJICAgMHgxMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywgMHgwMCwgMHgwNSwKKwkJICAgMHgwMCwgMHg2YiwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwNSwgMHgwMCwgMHg2YiwgMHgwMCksCisJUEhZUkVHUygweDA5MDgsIDB4MDkwNCwgMHgwOTAwLCAweDAxYzYsIDB4MDFjNiwgMHgwMWM3KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTc3NSwKKwlSQURJT1JFR1MzKDB4ZjgsIDB4MDAsIDB4MDIsIDB4MDQsIDB4ODMsIDB4MDcsIDB4MDcsIDB4MDQsCisJCSAgIDB4MTAsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDUsIDB4ODYsIDB4MDQsIDB4MDAsCisJCSAgIDB4MTAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4MDAsIDB4MDUsCisJCSAgIDB4MDAsIDB4NmIsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MDUsIDB4MDAsIDB4NmIsIDB4MDApLAorCVBIWVJFR1MoMHgwOTBhLCAweDA5MDYsIDB4MDkwMiwgMHgwMWM1LCAweDAxYzYsIDB4MDFjNyksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU3ODAsCisJUkFESU9SRUdTMygweDBhLCAweDAxLCAweDAxLCAweDAyLCAweDQyLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA1LCAweDA1LCAweDA1LCAweDg2LCAweDA0LCAweDAwLAorCQkgICAweDEwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LCAweDAwLCAweDA1LAorCQkgICAweDAwLCAweDZiLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDA1LCAweDAwLCAweDZiLCAweDAwKSwKKwlQSFlSRUdTKDB4MDkwYywgMHgwOTA4LCAweDA5MDQsIDB4MDFjNSwgMHgwMWM2LCAweDAxYzYpLAorICB9LAorICB7CS5mcmVxCQkJPSA1Nzg1LAorCVJBRElPUkVHUzMoMHhmMiwgMHgwMCwgMHgwMiwgMHgwNCwgMHg4NSwgMHgwNywgMHgwNywgMHgwNCwKKwkJICAgMHgxMCwgMHgwMSwgMHgwNiwgMHgwNiwgMHgwNiwgMHg4NiwgMHgwNCwgMHgwMCwKKwkJICAgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywgMHgwMCwgMHgwNSwKKwkJICAgMHgwMCwgMHg2YiwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwNSwgMHgwMCwgMHg2YiwgMHgwMCksCisJUEhZUkVHUygweDA5MGUsIDB4MDkwYSwgMHgwOTA2LCAweDAxYzQsIDB4MDFjNSwgMHgwMWM2KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTc5MCwKKwlSQURJT1JFR1MzKDB4MGEsIDB4MDEsIDB4MDEsIDB4MDIsIDB4NDMsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDYsIDB4MDYsIDB4MDYsIDB4ODYsIDB4MDQsIDB4MDAsCisJCSAgIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4MDAsIDB4MDUsCisJCSAgIDB4MDAsIDB4NmIsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MDUsIDB4MDAsIDB4NmIsIDB4MDApLAorCVBIWVJFR1MoMHgwOTEwLCAweDA5MGMsIDB4MDkwOCwgMHgwMWM0LCAweDAxYzUsIDB4MDFjNiksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU3OTUsCisJUkFESU9SRUdTMygweGYyLCAweDAwLCAweDAyLCAweDA0LCAweDg3LCAweDA3LCAweDA3LCAweDA0LAorCQkgICAweDEwLCAweDAxLCAweDA2LCAweDA2LCAweDA2LCAweDg2LCAweDA0LCAweDAwLAorCQkgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LCAweDAwLCAweDA1LAorCQkgICAweDAwLCAweDZiLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDA1LCAweDAwLCAweDZiLCAweDAwKSwKKwlQSFlSRUdTKDB4MDkxMiwgMHgwOTBlLCAweDA5MGEsIDB4MDFjNCwgMHgwMWM0LCAweDAxYzUpLAorICB9LAorICB7CS5mcmVxCQkJPSA1ODAwLAorCVJBRElPUkVHUzMoMHgwYSwgMHgwMSwgMHgwMSwgMHgwMiwgMHg0NCwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNiwgMHgwNiwgMHgwNiwgMHg4NiwgMHgwNCwgMHgwMCwKKwkJICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywgMHgwMCwgMHgwNSwKKwkJICAgMHgwMCwgMHg2YiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwNSwgMHgwMCwgMHg2YiwgMHgwMCksCisJUEhZUkVHUygweDA5MTQsIDB4MDkxMCwgMHgwOTBjLCAweDAxYzMsIDB4MDFjNCwgMHgwMWM1KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTgwNSwKKwlSQURJT1JFR1MzKDB4ZWQsIDB4MDAsIDB4MDIsIDB4MDQsIDB4ODksIDB4MDcsIDB4MDcsIDB4MDQsCisJCSAgIDB4MTAsIDB4MDEsIDB4MDYsIDB4MDYsIDB4MDYsIDB4ODYsIDB4MDQsIDB4MDAsCisJCSAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4MDAsIDB4MDUsCisJCSAgIDB4MDAsIDB4NmEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MDUsIDB4MDAsIDB4NmEsIDB4MDApLAorCVBIWVJFR1MoMHgwOTE2LCAweDA5MTIsIDB4MDkwZSwgMHgwMWMzLCAweDAxYzQsIDB4MDFjNCksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU4MTAsCisJUkFESU9SRUdTMygweDBhLCAweDAxLCAweDAxLCAweDAyLCAweDQ1LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA2LCAweDA2LCAweDA2LCAweDg2LCAweDA0LCAweDAwLAorCQkgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LCAweDAwLCAweDA1LAorCQkgICAweDAwLCAweDZhLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDA1LCAweDAwLCAweDZhLCAweDAwKSwKKwlQSFlSRUdTKDB4MDkxOCwgMHgwOTE0LCAweDA5MTAsIDB4MDFjMiwgMHgwMWMzLCAweDAxYzQpLAorICB9LAorICB7CS5mcmVxCQkJPSA1ODE1LAorCVJBRElPUkVHUzMoMHhlZCwgMHgwMCwgMHgwMiwgMHgwNCwgMHg4YiwgMHgwNywgMHgwNywgMHgwNCwKKwkJICAgMHgxMCwgMHgwMSwgMHgwNiwgMHgwNiwgMHgwNiwgMHg4NiwgMHgwNCwgMHgwMCwKKwkJICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywgMHgwMCwgMHgwNSwKKwkJICAgMHgwMCwgMHg2YSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwNSwgMHgwMCwgMHg2YSwgMHgwMCksCisJUEhZUkVHUygweDA5MWEsIDB4MDkxNiwgMHgwOTEyLCAweDAxYzIsIDB4MDFjMywgMHgwMWM0KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTgyMCwKKwlSQURJT1JFR1MzKDB4MGEsIDB4MDEsIDB4MDEsIDB4MDIsIDB4NDYsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDYsIDB4MDYsIDB4MDYsIDB4ODYsIDB4MDQsIDB4MDAsCisJCSAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4MDAsIDB4MDUsCisJCSAgIDB4MDAsIDB4NmEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MDUsIDB4MDAsIDB4NmEsIDB4MDApLAorCVBIWVJFR1MoMHgwOTFjLCAweDA5MTgsIDB4MDkxNCwgMHgwMWMyLCAweDAxYzIsIDB4MDFjMyksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU4MjUsCisJUkFESU9SRUdTMygweGVkLCAweDAwLCAweDAyLCAweDA0LCAweDhkLCAweDA3LCAweDA3LCAweDA0LAorCQkgICAweDEwLCAweDAxLCAweDA2LCAweDA2LCAweDA2LCAweDg2LCAweDA0LCAweDAwLAorCQkgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LCAweDAwLCAweDA1LAorCQkgICAweDAwLCAweDY5LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDA1LCAweDAwLCAweDY5LCAweDAwKSwKKwlQSFlSRUdTKDB4MDkxZSwgMHgwOTFhLCAweDA5MTYsIDB4MDFjMSwgMHgwMWMyLCAweDAxYzMpLAorICB9LAorICB7CS5mcmVxCQkJPSA1ODMwLAorCVJBRElPUkVHUzMoMHgwYSwgMHgwMSwgMHgwMSwgMHgwMiwgMHg0NywgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNiwgMHgwNiwgMHgwNiwgMHg4NiwgMHgwNCwgMHgwMCwKKwkJICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywgMHgwMCwgMHgwNSwKKwkJICAgMHgwMCwgMHg2OSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwNSwgMHgwMCwgMHg2OSwgMHgwMCksCisJUEhZUkVHUygweDA5MjAsIDB4MDkxYywgMHgwOTE4LCAweDAxYzEsIDB4MDFjMiwgMHgwMWMyKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTg0MCwKKwlSQURJT1JFR1MzKDB4MGEsIDB4MDEsIDB4MDEsIDB4MDIsIDB4NDgsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDYsIDB4MDYsIDB4MDYsIDB4ODYsIDB4MDQsIDB4MDAsCisJCSAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4MDAsIDB4MDQsCisJCSAgIDB4MDAsIDB4NjksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MDQsIDB4MDAsIDB4NjksIDB4MDApLAorCVBIWVJFR1MoMHgwOTI0LCAweDA5MjAsIDB4MDkxYywgMHgwMWMwLCAweDAxYzEsIDB4MDFjMiksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU4NTAsCisJUkFESU9SRUdTMygweGUwLCAweDAwLCAweDAxLCAweDAyLCAweDQ5LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA2LCAweDA2LCAweDA2LCAweDg1LCAweDAzLCAweDAwLAorCQkgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LCAweDAwLCAweDA0LAorCQkgICAweDAwLCAweDY5LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDA0LCAweDAwLCAweDY5LCAweDAwKSwKKwlQSFlSRUdTKDB4MDkyOCwgMHgwOTI0LCAweDA5MjAsIDB4MDFiZiwgMHgwMWMwLCAweDAxYzEpLAorICB9LAorICB7CS5mcmVxCQkJPSA1ODYwLAorCVJBRElPUkVHUzMoMHhkZSwgMHgwMCwgMHgwMSwgMHgwMiwgMHg0YSwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNiwgMHgwNiwgMHgwNiwgMHg4NSwgMHgwMywgMHgwMCwKKwkJICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywgMHgwMCwgMHgwNCwKKwkJICAgMHgwMCwgMHg2OSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwNCwgMHgwMCwgMHg2OSwgMHgwMCksCisJUEhZUkVHUygweDA5MmMsIDB4MDkyOCwgMHgwOTI0LCAweDAxYmYsIDB4MDFiZiwgMHgwMWMwKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTg3MCwKKwlSQURJT1JFR1MzKDB4ZGIsIDB4MDAsIDB4MDEsIDB4MDIsIDB4NGIsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDYsIDB4MDYsIDB4MDYsIDB4ODUsIDB4MDMsIDB4MDAsCisJCSAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4MDAsIDB4MDQsCisJCSAgIDB4MDAsIDB4NjgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MDQsIDB4MDAsIDB4NjgsIDB4MDApLAorCVBIWVJFR1MoMHgwOTMwLCAweDA5MmMsIDB4MDkyOCwgMHgwMWJlLCAweDAxYmYsIDB4MDFiZiksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU4ODAsCisJUkFESU9SRUdTMygweGQ4LCAweDAwLCAweDAxLCAweDAyLCAweDRjLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA2LCAweDA2LCAweDA2LCAweDg1LCAweDAzLCAweDAwLAorCQkgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LCAweDAwLCAweDA0LAorCQkgICAweDAwLCAweDY4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDA0LCAweDAwLCAweDY4LCAweDAwKSwKKwlQSFlSRUdTKDB4MDkzNCwgMHgwOTMwLCAweDA5MmMsIDB4MDFiZCwgMHgwMWJlLCAweDAxYmYpLAorICB9LAorICB7CS5mcmVxCQkJPSA1ODkwLAorCVJBRElPUkVHUzMoMHhkNiwgMHgwMCwgMHgwMSwgMHgwMiwgMHg0ZCwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNiwgMHgwNiwgMHgwNiwgMHg4NSwgMHgwMywgMHgwMCwKKwkJICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywgMHgwMCwgMHgwNCwKKwkJICAgMHgwMCwgMHg2OCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwNCwgMHgwMCwgMHg2OCwgMHgwMCksCisJUEhZUkVHUygweDA5MzgsIDB4MDkzNCwgMHgwOTMwLCAweDAxYmMsIDB4MDFiZCwgMHgwMWJlKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTkwMCwKKwlSQURJT1JFR1MzKDB4ZDMsIDB4MDAsIDB4MDEsIDB4MDIsIDB4NGUsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDYsIDB4MDYsIDB4MDYsIDB4ODUsIDB4MDMsIDB4MDAsCisJCSAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4MDAsIDB4MDQsCisJCSAgIDB4MDAsIDB4NjgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MDQsIDB4MDAsIDB4NjgsIDB4MDApLAorCVBIWVJFR1MoMHgwOTNjLCAweDA5MzgsIDB4MDkzNCwgMHgwMWJjLCAweDAxYmMsIDB4MDFiZCksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU5MTAsCisJUkFESU9SRUdTMygweGQ2LCAweDAwLCAweDAxLCAweDAyLCAweDRmLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA2LCAweDA2LCAweDA2LCAweDg1LCAweDAzLCAweDAwLAorCQkgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LCAweDAwLCAweDA0LAorCQkgICAweDAwLCAweDY4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDA0LCAweDAwLCAweDY4LCAweDAwKSwKKwlQSFlSRUdTKDB4MDk0MCwgMHgwOTNjLCAweDA5MzgsIDB4MDFiYiwgMHgwMWJjLCAweDAxYmMpLAorICB9LAorICB7CS5mcmVxCQkJPSAyNDEyLAorCVJBRElPUkVHUzMoMHgwMCwgMHgwMSwgMHgwMywgMHgwOSwgMHg2YywgMHgwOCwgMHgwOCwgMHgwNCwKKwkJICAgMHgxNiwgMHgwMSwgMHgwNCwgMHgwNCwgMHgwNCwgMHg4ZiwgMHgzMCwgMHgwMCwKKwkJICAgMHgwMCwgMHgwMCwgMHg3OCwgMHgwMCwgMHgwMywgMHgwMCwgMHg3MCwgMHgwMCwKKwkJICAgMHgwYiwgMHgwMCwgMHgwYSwgMHgwMCwgMHg3OCwgMHgwMCwgMHgwMywgMHgwMCwKKwkJICAgMHg3MCwgMHgwMCwgMHgwYiwgMHgwMCwgMHgwYSksCisJUEhZUkVHUygweDAzYzksIDB4MDNjNSwgMHgwM2MxLCAweDA0M2EsIDB4MDQzZiwgMHgwNDQzKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gMjQxNywKKwlSQURJT1JFR1MzKDB4MDAsIDB4MDEsIDB4MDMsIDB4MDksIDB4NzEsIDB4MDgsIDB4MDgsIDB4MDQsCisJCSAgIDB4MTYsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDUsIDB4OGYsIDB4MzAsIDB4MDAsCisJCSAgIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDAsIDB4MDMsIDB4MDAsIDB4NzAsIDB4MDAsCisJCSAgIDB4MGIsIDB4MDAsIDB4MGEsIDB4MDAsIDB4NzgsIDB4MDAsIDB4MDMsIDB4MDAsCisJCSAgIDB4NzAsIDB4MDAsIDB4MGIsIDB4MDAsIDB4MGEpLAorCVBIWVJFR1MoMHgwM2NiLCAweDAzYzcsIDB4MDNjMywgMHgwNDM4LCAweDA0M2QsIDB4MDQ0MSksCisgIH0sCisgIHsJLmZyZXEJCQk9IDI0MjIsCisJUkFESU9SRUdTMygweDAwLCAweDAxLCAweDAzLCAweDA5LCAweDc2LCAweDA4LCAweDA4LCAweDA0LAorCQkgICAweDE2LCAweDAxLCAweDA1LCAweDA1LCAweDA1LCAweDhmLCAweDMwLCAweDAwLAorCQkgICAweDAwLCAweDAwLCAweDY3LCAweDAwLCAweDAzLCAweDAwLCAweDcwLCAweDAwLAorCQkgICAweDBiLCAweDAwLCAweDBhLCAweDAwLCAweDY3LCAweDAwLCAweDAzLCAweDAwLAorCQkgICAweDcwLCAweDAwLCAweDBiLCAweDAwLCAweDBhKSwKKwlQSFlSRUdTKDB4MDNjZCwgMHgwM2M5LCAweDAzYzUsIDB4MDQzNiwgMHgwNDNhLCAweDA0M2YpLAorICB9LAorICB7CS5mcmVxCQkJPSAyNDI3LAorCVJBRElPUkVHUzMoMHgwMCwgMHgwMSwgMHgwMywgMHgwOSwgMHg3YiwgMHgwOCwgMHgwOCwgMHgwNCwKKwkJICAgMHgxNiwgMHgwMSwgMHgwNSwgMHgwNSwgMHgwNSwgMHg4ZiwgMHgzMCwgMHgwMCwKKwkJICAgMHgwMCwgMHgwMCwgMHg1NywgMHgwMCwgMHgwMywgMHgwMCwgMHg3MCwgMHgwMCwKKwkJICAgMHgwYSwgMHgwMCwgMHgwYSwgMHgwMCwgMHg1NywgMHgwMCwgMHgwMywgMHgwMCwKKwkJICAgMHg3MCwgMHgwMCwgMHgwYSwgMHgwMCwgMHgwYSksCisJUEhZUkVHUygweDAzY2YsIDB4MDNjYiwgMHgwM2M3LCAweDA0MzQsIDB4MDQzOCwgMHgwNDNkKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gMjQzMiwKKwlSQURJT1JFR1MzKDB4MDAsIDB4MDEsIDB4MDMsIDB4MDksIDB4ODAsIDB4MDgsIDB4MDgsIDB4MDQsCisJCSAgIDB4MTYsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDUsIDB4OGYsIDB4MzAsIDB4MDAsCisJCSAgIDB4MDAsIDB4MDAsIDB4NTYsIDB4MDAsIDB4MDMsIDB4MDAsIDB4NzAsIDB4MDAsCisJCSAgIDB4MGEsIDB4MDAsIDB4MGEsIDB4MDAsIDB4NTYsIDB4MDAsIDB4MDMsIDB4MDAsCisJCSAgIDB4NzAsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MGEpLAorCVBIWVJFR1MoMHgwM2QxLCAweDAzY2QsIDB4MDNjOSwgMHgwNDMxLCAweDA0MzYsIDB4MDQzYSksCisgIH0sCisgIHsJLmZyZXEJCQk9IDI0MzcsCisJUkFESU9SRUdTMygweDAwLCAweDAxLCAweDAzLCAweDA5LCAweDg1LCAweDA4LCAweDA4LCAweDA0LAorCQkgICAweDE2LCAweDAxLCAweDA1LCAweDA1LCAweDA1LCAweDhmLCAweDMwLCAweDAwLAorCQkgICAweDAwLCAweDAwLCAweDQ2LCAweDAwLCAweDAzLCAweDAwLCAweDcwLCAweDAwLAorCQkgICAweDBhLCAweDAwLCAweDBhLCAweDAwLCAweDQ2LCAweDAwLCAweDAzLCAweDAwLAorCQkgICAweDcwLCAweDAwLCAweDBhLCAweDAwLCAweDBhKSwKKwlQSFlSRUdTKDB4MDNkMywgMHgwM2NmLCAweDAzY2IsIDB4MDQyZiwgMHgwNDM0LCAweDA0MzgpLAorICB9LAorICB7CS5mcmVxCQkJPSAyNDQyLAorCVJBRElPUkVHUzMoMHgwMCwgMHgwMSwgMHgwMywgMHgwOSwgMHg4YSwgMHgwOCwgMHgwOCwgMHgwNCwKKwkJICAgMHgxNiwgMHgwMSwgMHgwNSwgMHgwNSwgMHgwNSwgMHg4ZiwgMHgzMCwgMHgwMCwKKwkJICAgMHgwMCwgMHgwMCwgMHg0NSwgMHgwMCwgMHgwMiwgMHgwMCwgMHg3MCwgMHgwMCwKKwkJICAgMHgwYSwgMHgwMCwgMHgwYSwgMHgwMCwgMHg0NSwgMHgwMCwgMHgwMiwgMHgwMCwKKwkJICAgMHg3MCwgMHgwMCwgMHgwYSwgMHgwMCwgMHgwYSksCisJUEhZUkVHUygweDAzZDUsIDB4MDNkMSwgMHgwM2NkLCAweDA0MmQsIDB4MDQzMSwgMHgwNDM2KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gMjQ0NywKKwlSQURJT1JFR1MzKDB4MDAsIDB4MDEsIDB4MDMsIDB4MDksIDB4OGYsIDB4MDgsIDB4MDgsIDB4MDQsCisJCSAgIDB4MTYsIDB4MDEsIDB4MDYsIDB4MDYsIDB4MDYsIDB4OGYsIDB4MzAsIDB4MDAsCisJCSAgIDB4MDAsIDB4MDAsIDB4MzQsIDB4MDAsIDB4MDIsIDB4MDAsIDB4NzAsIDB4MDAsCisJCSAgIDB4MGEsIDB4MDAsIDB4MDksIDB4MDAsIDB4MzQsIDB4MDAsIDB4MDIsIDB4MDAsCisJCSAgIDB4NzAsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MDkpLAorCVBIWVJFR1MoMHgwM2Q3LCAweDAzZDMsIDB4MDNjZiwgMHgwNDJiLCAweDA0MmYsIDB4MDQzNCksCisgIH0sCisgIHsJLmZyZXEJCQk9IDI0NTIsCisJUkFESU9SRUdTMygweDAwLCAweDAxLCAweDAzLCAweDA5LCAweDk0LCAweDA4LCAweDA4LCAweDA0LAorCQkgICAweDE2LCAweDAxLCAweDA2LCAweDA2LCAweDA2LCAweDhmLCAweDMwLCAweDAwLAorCQkgICAweDAwLCAweDAwLCAweDIzLCAweDAwLCAweDAyLCAweDAwLCAweDcwLCAweDAwLAorCQkgICAweDBhLCAweDAwLCAweDA5LCAweDAwLCAweDIzLCAweDAwLCAweDAyLCAweDAwLAorCQkgICAweDcwLCAweDAwLCAweDBhLCAweDAwLCAweDA5KSwKKwlQSFlSRUdTKDB4MDNkOSwgMHgwM2Q1LCAweDAzZDEsIDB4MDQyOSwgMHgwNDJkLCAweDA0MzEpLAorICB9LAorICB7CS5mcmVxCQkJPSAyNDU3LAorCVJBRElPUkVHUzMoMHgwMCwgMHgwMSwgMHgwMywgMHgwOSwgMHg5OSwgMHgwOCwgMHgwOCwgMHgwNCwKKwkJICAgMHgxNiwgMHgwMSwgMHgwNiwgMHgwNiwgMHgwNiwgMHg4ZiwgMHgzMCwgMHgwMCwKKwkJICAgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwMiwgMHgwMCwgMHg3MCwgMHgwMCwKKwkJICAgMHgwYSwgMHgwMCwgMHgwOSwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwMiwgMHgwMCwKKwkJICAgMHg3MCwgMHgwMCwgMHgwYSwgMHgwMCwgMHgwOSksCisJUEhZUkVHUygweDAzZGIsIDB4MDNkNywgMHgwM2QzLCAweDA0MjcsIDB4MDQyYiwgMHgwNDJmKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gMjQ2MiwKKwlSQURJT1JFR1MzKDB4MDAsIDB4MDEsIDB4MDMsIDB4MDksIDB4OWUsIDB4MDgsIDB4MDgsIDB4MDQsCisJCSAgIDB4MTYsIDB4MDEsIDB4MDYsIDB4MDYsIDB4MDYsIDB4OGYsIDB4MzAsIDB4MDAsCisJCSAgIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDIsIDB4MDAsIDB4NzAsIDB4MDAsCisJCSAgIDB4MDksIDB4MDAsIDB4MDksIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDIsIDB4MDAsCisJCSAgIDB4NzAsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDkpLAorCVBIWVJFR1MoMHgwM2RkLCAweDAzZDksIDB4MDNkNSwgMHgwNDI0LCAweDA0MjksIDB4MDQyZCksCisgIH0sCisgIHsJLmZyZXEJCQk9IDI0NjcsCisJUkFESU9SRUdTMygweDAwLCAweDAxLCAweDAzLCAweDA5LCAweGEzLCAweDA4LCAweDA4LCAweDA0LAorCQkgICAweDE2LCAweDAxLCAweDA2LCAweDA2LCAweDA2LCAweDhmLCAweDMwLCAweDAwLAorCQkgICAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDcwLCAweDAwLAorCQkgICAweDA5LCAweDAwLCAweDA5LCAweDAwLCAweDAxLCAweDAwLCAweDAyLCAweDAwLAorCQkgICAweDcwLCAweDAwLCAweDA5LCAweDAwLCAweDA5KSwKKwlQSFlSRUdTKDB4MDNkZiwgMHgwM2RiLCAweDAzZDcsIDB4MDQyMiwgMHgwNDI3LCAweDA0MmIpLAorICB9LAorICB7CS5mcmVxCQkJPSAyNDcyLAorCVJBRElPUkVHUzMoMHgwMCwgMHgwMSwgMHgwMywgMHgwOSwgMHhhOCwgMHgwOCwgMHgwOCwgMHgwNCwKKwkJICAgMHgxNiwgMHgwMSwgMHgwNywgMHgwNywgMHgwNywgMHg4ZiwgMHgzMCwgMHgwMCwKKwkJICAgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHg3MCwgMHgwMCwKKwkJICAgMHgwOSwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwKKwkJICAgMHg3MCwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwOSksCisJUEhZUkVHUygweDAzZTEsIDB4MDNkZCwgMHgwM2Q5LCAweDA0MjAsIDB4MDQyNCwgMHgwNDI5KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gMjQ4NCwKKwlSQURJT1JFR1MzKDB4ZmYsIDB4MDEsIDB4MDMsIDB4MDksIDB4YjQsIDB4MDgsIDB4MDgsIDB4MDQsCisJCSAgIDB4MTYsIDB4MDEsIDB4MDcsIDB4MDcsIDB4MDcsIDB4OGYsIDB4MjAsIDB4MDAsCisJCSAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4NzAsIDB4MDAsCisJCSAgIDB4MDksIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsCisJCSAgIDB4NzAsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDkpLAorCVBIWVJFR1MoMHgwM2U2LCAweDAzZTIsIDB4MDNkZSwgMHgwNDFiLCAweDA0MWYsIDB4MDQyNCksCisgIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGI0M19ucGh5X2NoYW5uZWx0YWJfZW50cnlfcmV2MyBiNDNfbnBoeV9jaGFubmVsdGFiX3JldjdfOVtdID0geworICB7CS5mcmVxCQkJPSA0OTIwLAorCVJBRElPUkVHUzMoMHhmZiwgMHgwMSwgMHgwMSwgMHgwMSwgMHhlYywgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4ZiwgMHgwZiwgMHgwMCwKKwkJICAgMHhmZiwgMHhmZiwgMHgwMCwgMHgwYiwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwZiwKKwkJICAgMHgwMCwgMHg5ZiwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwYiwgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwZiwgMHgwMCwgMHg2ZiwgMHgwMCksCisJUEhZUkVHUygweDA3YjQsIDB4MDdiMCwgMHgwN2FjLCAweDAyMTQsIDB4MDIxNSwgMHgwMjE2KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNDkzMCwKKwlSQURJT1JFR1MzKDB4ZmYsIDB4MDEsIDB4MDEsIDB4MDEsIDB4ZWQsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OGYsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MGIsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MGUsCisJCSAgIDB4MDAsIDB4OWYsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MGIsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MGUsIDB4MDAsIDB4NmYsIDB4MDApLAorCVBIWVJFR1MoMHgwN2I4LCAweDA3YjQsIDB4MDdiMCwgMHgwMjEzLCAweDAyMTQsIDB4MDIxNSksCisgIH0sCisgIHsJLmZyZXEJCQk9IDQ5NDAsCisJUkFESU9SRUdTMygweGZmLCAweDAxLCAweDAxLCAweDAxLCAweGVlLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDhmLCAweDBmLCAweDAwLAorCQkgICAweGZmLCAweGZmLCAweDAwLCAweDBiLCAweDAwLCAweDcwLCAweDAwLCAweDBlLAorCQkgICAweDAwLCAweDlmLCAweDAwLCAweGZmLCAweDAwLCAweDBiLCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDBlLCAweDAwLCAweDZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDdiYywgMHgwN2I4LCAweDA3YjQsIDB4MDIxMiwgMHgwMjEzLCAweDAyMTQpLAorICB9LAorICB7CS5mcmVxCQkJPSA0OTUwLAorCVJBRElPUkVHUzMoMHhmZiwgMHgwMSwgMHgwMSwgMHgwMSwgMHhlZiwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4ZiwgMHgwZiwgMHgwMCwKKwkJICAgMHhmZiwgMHhmZiwgMHgwMCwgMHgwYiwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwZSwKKwkJICAgMHgwMCwgMHg5ZiwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwYiwgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwZSwgMHgwMCwgMHg2ZiwgMHgwMCksCisJUEhZUkVHUygweDA3YzAsIDB4MDdiYywgMHgwN2I4LCAweDAyMTEsIDB4MDIxMiwgMHgwMjEzKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNDk2MCwKKwlSQURJT1JFR1MzKDB4ZmYsIDB4MDEsIDB4MDEsIDB4MDEsIDB4ZjAsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4OGYsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MGEsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MGUsCisJCSAgIDB4MDAsIDB4OWYsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MGEsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MGUsIDB4MDAsIDB4NmYsIDB4MDApLAorCVBIWVJFR1MoMHgwN2M0LCAweDA3YzAsIDB4MDdiYywgMHgwMjBmLCAweDAyMTEsIDB4MDIxMiksCisgIH0sCisgIHsJLmZyZXEJCQk9IDQ5NzAsCisJUkFESU9SRUdTMygweGZmLCAweDAxLCAweDAxLCAweDAxLCAweGYxLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDhmLCAweDBmLCAweDAwLAorCQkgICAweGZmLCAweGZmLCAweDAwLCAweDBhLCAweDAwLCAweDcwLCAweDAwLCAweDBkLAorCQkgICAweDAwLCAweDlmLCAweDAwLCAweGZmLCAweDAwLCAweDBhLCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDBkLCAweDAwLCAweDZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDdjOCwgMHgwN2M0LCAweDA3YzAsIDB4MDIwZSwgMHgwMjBmLCAweDAyMTEpLAorICB9LAorICB7CS5mcmVxCQkJPSA0OTgwLAorCVJBRElPUkVHUzMoMHhmZiwgMHgwMSwgMHgwMSwgMHgwMSwgMHhmMiwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHg4ZiwgMHgwZiwgMHgwMCwKKwkJICAgMHhmZiwgMHhmZiwgMHgwMCwgMHgwYSwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwZCwKKwkJICAgMHgwMCwgMHg5ZiwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwYSwgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwZCwgMHgwMCwgMHg2ZiwgMHgwMCksCisJUEhZUkVHUygweDA3Y2MsIDB4MDdjOCwgMHgwN2M0LCAweDAyMGQsIDB4MDIwZSwgMHgwMjBmKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNDk5MCwKKwlSQURJT1JFR1MzKDB4ZmYsIDB4MDEsIDB4MDEsIDB4MDEsIDB4ZjMsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4OGYsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MGEsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MGQsCisJCSAgIDB4MDAsIDB4OWYsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MGEsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MGQsIDB4MDAsIDB4NmYsIDB4MDApLAorCVBIWVJFR1MoMHgwN2QwLCAweDA3Y2MsIDB4MDdjOCwgMHgwMjBjLCAweDAyMGQsIDB4MDIwZSksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUwMDAsCisJUkFESU9SRUdTMygweGZmLCAweDAxLCAweDAxLCAweDAxLCAweGY0LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDhmLCAweDBmLCAweDAwLAorCQkgICAweGZmLCAweGZmLCAweDAwLCAweDBhLCAweDAwLCAweDcwLCAweDAwLCAweDBkLAorCQkgICAweDAwLCAweDlmLCAweDAwLCAweGZmLCAweDAwLCAweDBhLCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDBkLCAweDAwLCAweDZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDdkNCwgMHgwN2QwLCAweDA3Y2MsIDB4MDIwYiwgMHgwMjBjLCAweDAyMGQpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MDEwLAorCVJBRElPUkVHUzMoMHhmZiwgMHgwMSwgMHgwMSwgMHgwMSwgMHhmNSwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHg4ZiwgMHgwZiwgMHgwMCwKKwkJICAgMHhmZiwgMHhmZiwgMHgwMCwgMHgwYSwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwZCwKKwkJICAgMHgwMCwgMHg5ZiwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwYSwgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwZCwgMHgwMCwgMHg2ZiwgMHgwMCksCisJUEhZUkVHUygweDA3ZDgsIDB4MDdkNCwgMHgwN2QwLCAweDAyMGEsIDB4MDIwYiwgMHgwMjBjKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTAyMCwKKwlSQURJT1JFR1MzKDB4ZjcsIDB4MDEsIDB4MDEsIDB4MDEsIDB4ZjYsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4OGYsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDksIDB4MDAsIDB4NzAsIDB4MDAsIDB4MGQsCisJCSAgIDB4MDAsIDB4OWYsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDksIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MGQsIDB4MDAsIDB4NmYsIDB4MDApLAorCVBIWVJFR1MoMHgwN2RjLCAweDA3ZDgsIDB4MDdkNCwgMHgwMjA5LCAweDAyMGEsIDB4MDIwYiksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUwMzAsCisJUkFESU9SRUdTMygweGY3LCAweDAxLCAweDAxLCAweDAxLCAweGY3LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDhmLCAweDBmLCAweDAwLAorCQkgICAweGZmLCAweGZmLCAweDAwLCAweDA5LCAweDAwLCAweDcwLCAweDAwLCAweDBjLAorCQkgICAweDAwLCAweDlmLCAweDAwLCAweGZmLCAweDAwLCAweDA5LCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDBjLCAweDAwLCAweDZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDdlMCwgMHgwN2RjLCAweDA3ZDgsIDB4MDIwOCwgMHgwMjA5LCAweDAyMGEpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MDQwLAorCVJBRElPUkVHUzMoMHhlZiwgMHgwMSwgMHgwMSwgMHgwMSwgMHhmOCwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHg4ZiwgMHgwZiwgMHgwMCwKKwkJICAgMHhmZiwgMHhmZSwgMHgwMCwgMHgwOSwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwYywKKwkJICAgMHgwMCwgMHg5ZiwgMHgwMCwgMHhmZSwgMHgwMCwgMHgwOSwgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwYywgMHgwMCwgMHg2ZiwgMHgwMCksCisJUEhZUkVHUygweDA3ZTQsIDB4MDdlMCwgMHgwN2RjLCAweDAyMDcsIDB4MDIwOCwgMHgwMjA5KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTA1MCwKKwlSQURJT1JFR1MzKDB4ZWYsIDB4MDEsIDB4MDEsIDB4MDEsIDB4ZjksIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4OGYsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZmYsIDB4ZmUsIDB4MDAsIDB4MDksIDB4MDAsIDB4NzAsIDB4MDAsIDB4MGMsCisJCSAgIDB4MDAsIDB4OWYsIDB4MDAsIDB4ZmUsIDB4MDAsIDB4MDksIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MGMsIDB4MDAsIDB4NmYsIDB4MDApLAorCVBIWVJFR1MoMHgwN2U4LCAweDA3ZTQsIDB4MDdlMCwgMHgwMjA2LCAweDAyMDcsIDB4MDIwOCksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUwNjAsCisJUkFESU9SRUdTMygweGU2LCAweDAxLCAweDAxLCAweDAxLCAweGZhLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDhmLCAweDBmLCAweDAwLAorCQkgICAweGZmLCAweGZkLCAweDAwLCAweDA5LCAweDAwLCAweDcwLCAweDAwLCAweDBjLAorCQkgICAweDAwLCAweDlmLCAweDAwLCAweGZkLCAweDAwLCAweDA5LCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDBjLCAweDAwLCAweDZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDdlYywgMHgwN2U4LCAweDA3ZTQsIDB4MDIwNSwgMHgwMjA2LCAweDAyMDcpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MDcwLAorCVJBRElPUkVHUzMoMHhlNiwgMHgwMSwgMHgwMSwgMHgwMSwgMHhmYiwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHg4ZiwgMHgwZiwgMHgwMCwKKwkJICAgMHhmZiwgMHhmZCwgMHgwMCwgMHgwOCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwYiwKKwkJICAgMHgwMCwgMHg5ZiwgMHgwMCwgMHhmZCwgMHgwMCwgMHgwOCwgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwYiwgMHgwMCwgMHg2ZiwgMHgwMCksCisJUEhZUkVHUygweDA3ZjAsIDB4MDdlYywgMHgwN2U4LCAweDAyMDQsIDB4MDIwNSwgMHgwMjA2KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTA4MCwKKwlSQURJT1JFR1MzKDB4ZGUsIDB4MDEsIDB4MDEsIDB4MDEsIDB4ZmMsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4OGYsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZmYsIDB4ZmMsIDB4MDAsIDB4MDgsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MGIsCisJCSAgIDB4MDAsIDB4OWYsIDB4MDAsIDB4ZmMsIDB4MDAsIDB4MDgsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MGIsIDB4MDAsIDB4NmYsIDB4MDApLAorCVBIWVJFR1MoMHgwN2Y0LCAweDA3ZjAsIDB4MDdlYywgMHgwMjAzLCAweDAyMDQsIDB4MDIwNSksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUwOTAsCisJUkFESU9SRUdTMygweGRlLCAweDAxLCAweDAxLCAweDAxLCAweGZkLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDhmLCAweDBmLCAweDAwLAorCQkgICAweGZmLCAweGZjLCAweDAwLCAweDA4LCAweDAwLCAweDcwLCAweDAwLCAweDBiLAorCQkgICAweDAwLCAweDlmLCAweDAwLCAweGZjLCAweDAwLCAweDA4LCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDBiLCAweDAwLCAweDZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDdmOCwgMHgwN2Y0LCAweDA3ZjAsIDB4MDIwMiwgMHgwMjAzLCAweDAyMDQpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MTAwLAorCVJBRElPUkVHUzMoMHhkNiwgMHgwMSwgMHgwMSwgMHgwMSwgMHhmZSwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMiwgMHgwMiwgMHgwMiwgMHg4ZiwgMHgwZiwgMHgwMCwKKwkJICAgMHhmZiwgMHhmYywgMHgwMCwgMHgwOCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwYiwKKwkJICAgMHgwMCwgMHg5ZiwgMHgwMCwgMHhmYywgMHgwMCwgMHgwOCwgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwYiwgMHgwMCwgMHg2ZiwgMHgwMCksCisJUEhZUkVHUygweDA3ZmMsIDB4MDdmOCwgMHgwN2Y0LCAweDAyMDEsIDB4MDIwMiwgMHgwMjAzKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTExMCwKKwlSQURJT1JFR1MzKDB4ZDYsIDB4MDEsIDB4MDEsIDB4MDEsIDB4ZmYsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDIsIDB4MDIsIDB4MDIsIDB4OGYsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZmYsIDB4ZmMsIDB4MDAsIDB4MDgsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MGIsCisJCSAgIDB4MDAsIDB4OWYsIDB4MDAsIDB4ZmMsIDB4MDAsIDB4MDgsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MGIsIDB4MDAsIDB4NmYsIDB4MDApLAorCVBIWVJFR1MoMHgwODAwLCAweDA3ZmMsIDB4MDdmOCwgMHgwMjAwLCAweDAyMDEsIDB4MDIwMiksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUxMjAsCisJUkFESU9SRUdTMygweGNlLCAweDAxLCAweDAxLCAweDAyLCAweDAwLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAyLCAweDAyLCAweDAyLCAweDhmLCAweDBmLCAweDAwLAorCQkgICAweGZmLCAweGZjLCAweDAwLCAweDA4LCAweDAwLCAweDcwLCAweDAwLCAweDBiLAorCQkgICAweDAwLCAweDlmLCAweDAwLCAweGZjLCAweDAwLCAweDA4LCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDBiLCAweDAwLCAweDZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDgwNCwgMHgwODAwLCAweDA3ZmMsIDB4MDFmZiwgMHgwMjAwLCAweDAyMDEpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MTMwLAorCVJBRElPUkVHUzMoMHhjZSwgMHgwMSwgMHgwMSwgMHgwMiwgMHgwMSwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMiwgMHgwMiwgMHgwMiwgMHg4ZiwgMHgwZiwgMHgwMCwKKwkJICAgMHhmZiwgMHhmYiwgMHgwMCwgMHgwOCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwYSwKKwkJICAgMHgwMCwgMHg5ZiwgMHgwMCwgMHhmYiwgMHgwMCwgMHgwOCwgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwYSwgMHgwMCwgMHg2ZiwgMHgwMCksCisJUEhZUkVHUygweDA4MDgsIDB4MDgwNCwgMHgwODAwLCAweDAxZmUsIDB4MDFmZiwgMHgwMjAwKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTE0MCwKKwlSQURJT1JFR1MzKDB4YzYsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MDIsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDIsIDB4MDIsIDB4MDIsIDB4OGYsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZmYsIDB4ZmIsIDB4MDAsIDB4MDcsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MGEsCisJCSAgIDB4MDAsIDB4OWYsIDB4MDAsIDB4ZmIsIDB4MDAsIDB4MDcsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MGEsIDB4MDAsIDB4NmYsIDB4MDApLAorCVBIWVJFR1MoMHgwODBjLCAweDA4MDgsIDB4MDgwNCwgMHgwMWZkLCAweDAxZmUsIDB4MDFmZiksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUxNjAsCisJUkFESU9SRUdTMygweGJlLCAweDAxLCAweDAxLCAweDAyLCAweDA0LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAyLCAweDAyLCAweDAyLCAweDhmLCAweDBmLCAweDAwLAorCQkgICAweGZmLCAweGZiLCAweDAwLCAweDA3LCAweDAwLCAweDcwLCAweDAwLCAweDA5LAorCQkgICAweDAwLCAweDllLCAweDAwLCAweGZiLCAweDAwLCAweDA3LCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDA5LCAweDAwLCAweDZlLCAweDAwKSwKKwlQSFlSRUdTKDB4MDgxNCwgMHgwODEwLCAweDA4MGMsIDB4MDFmYiwgMHgwMWZjLCAweDAxZmQpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MTcwLAorCVJBRElPUkVHUzMoMHhiZSwgMHgwMSwgMHgwMSwgMHgwMiwgMHgwNSwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMiwgMHgwMiwgMHgwMiwgMHg4ZiwgMHgwZiwgMHgwMCwKKwkJICAgMHhmZiwgMHhmYiwgMHgwMCwgMHgwNiwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwOSwKKwkJICAgMHgwMCwgMHg5ZSwgMHgwMCwgMHhmYiwgMHgwMCwgMHgwNiwgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHgwMCksCisJUEhZUkVHUygweDA4MTgsIDB4MDgxNCwgMHgwODEwLCAweDAxZmEsIDB4MDFmYiwgMHgwMWZjKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTE4MCwKKwlSQURJT1JFR1MzKDB4YjYsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MDYsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDIsIDB4MDIsIDB4MDIsIDB4OGYsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZmYsIDB4ZmEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDksCisJCSAgIDB4MDAsIDB4OWUsIDB4MDAsIDB4ZmEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MDksIDB4MDAsIDB4NmUsIDB4MDApLAorCVBIWVJFR1MoMHgwODFjLCAweDA4MTgsIDB4MDgxNCwgMHgwMWY5LCAweDAxZmEsIDB4MDFmYiksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUxOTAsCisJUkFESU9SRUdTMygweGI2LCAweDAxLCAweDAxLCAweDAyLCAweDA3LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAyLCAweDAyLCAweDAyLCAweDhmLCAweDBmLCAweDAwLAorCQkgICAweGZmLCAweGZhLCAweDAwLCAweDA2LCAweDAwLCAweDcwLCAweDAwLCAweDA5LAorCQkgICAweDAwLCAweDllLCAweDAwLCAweGZhLCAweDAwLCAweDA2LCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDA5LCAweDAwLCAweDZlLCAweDAwKSwKKwlQSFlSRUdTKDB4MDgyMCwgMHgwODFjLCAweDA4MTgsIDB4MDFmOCwgMHgwMWY5LCAweDAxZmEpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MjAwLAorCVJBRElPUkVHUzMoMHhhZiwgMHgwMSwgMHgwMSwgMHgwMiwgMHgwOCwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMiwgMHgwMiwgMHgwMiwgMHg4ZiwgMHgwZiwgMHgwMCwKKwkJICAgMHhmZiwgMHhmYSwgMHgwMCwgMHgwNiwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwOSwKKwkJICAgMHgwMCwgMHg5ZSwgMHgwMCwgMHhmYSwgMHgwMCwgMHgwNiwgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHgwMCksCisJUEhZUkVHUygweDA4MjQsIDB4MDgyMCwgMHgwODFjLCAweDAxZjcsIDB4MDFmOCwgMHgwMWY5KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTIxMCwKKwlSQURJT1JFR1MzKDB4YWYsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MDksIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDIsIDB4MDIsIDB4MDIsIDB4OGYsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZmYsIDB4ZmEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDksCisJCSAgIDB4MDAsIDB4OWUsIDB4MDAsIDB4ZmEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MDksIDB4MDAsIDB4NmUsIDB4MDApLAorCVBIWVJFR1MoMHgwODI4LCAweDA4MjQsIDB4MDgyMCwgMHgwMWY2LCAweDAxZjcsIDB4MDFmOCksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUyMjAsCisJUkFESU9SRUdTMygweGE3LCAweDAxLCAweDAxLCAweDAyLCAweDBhLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAyLCAweDAyLCAweDAyLCAweDhlLCAweDBmLCAweDAwLAorCQkgICAweGZlLCAweGZhLCAweDAwLCAweDA2LCAweDAwLCAweDcwLCAweDAwLCAweDA5LAorCQkgICAweDAwLCAweDllLCAweDAwLCAweGZhLCAweDAwLCAweDA2LCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDA5LCAweDAwLCAweDZlLCAweDAwKSwKKwlQSFlSRUdTKDB4MDgyYywgMHgwODI4LCAweDA4MjQsIDB4MDFmNSwgMHgwMWY2LCAweDAxZjcpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MjMwLAorCVJBRElPUkVHUzMoMHhhNywgMHgwMSwgMHgwMSwgMHgwMiwgMHgwYiwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMiwgMHgwMiwgMHgwMiwgMHg4ZSwgMHgwZiwgMHgwMCwKKwkJICAgMHhlZSwgMHhlYSwgMHgwMCwgMHgwNiwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwOCwKKwkJICAgMHgwMCwgMHg5ZSwgMHgwMCwgMHhlYSwgMHgwMCwgMHgwNiwgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHgwMCksCisJUEhZUkVHUygweDA4MzAsIDB4MDgyYywgMHgwODI4LCAweDAxZjQsIDB4MDFmNSwgMHgwMWY2KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTI0MCwKKwlSQURJT1JFR1MzKDB4YTAsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MGMsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDIsIDB4MDIsIDB4MDIsIDB4OGUsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZWUsIDB4ZTksIDB4MDAsIDB4MDUsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDgsCisJCSAgIDB4MDAsIDB4OWQsIDB4MDAsIDB4ZTksIDB4MDAsIDB4MDUsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MDgsIDB4MDAsIDB4NmQsIDB4MDApLAorCVBIWVJFR1MoMHgwODM0LCAweDA4MzAsIDB4MDgyYywgMHgwMWYzLCAweDAxZjQsIDB4MDFmNSksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUyNTAsCisJUkFESU9SRUdTMygweGEwLCAweDAxLCAweDAxLCAweDAyLCAweDBkLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAyLCAweDAyLCAweDAyLCAweDhlLCAweDBmLCAweDAwLAorCQkgICAweGVkLCAweGU5LCAweDAwLCAweDA1LCAweDAwLCAweDcwLCAweDAwLCAweDA4LAorCQkgICAweDAwLCAweDlkLCAweDAwLCAweGU5LCAweDAwLCAweDA1LCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDA4LCAweDAwLCAweDZkLCAweDAwKSwKKwlQSFlSRUdTKDB4MDgzOCwgMHgwODM0LCAweDA4MzAsIDB4MDFmMiwgMHgwMWYzLCAweDAxZjQpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MjYwLAorCVJBRElPUkVHUzMoMHg5OCwgMHgwMSwgMHgwMSwgMHgwMiwgMHgwZSwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMiwgMHgwMiwgMHgwMiwgMHg4ZSwgMHgwZSwgMHgwMCwKKwkJICAgMHhlZCwgMHhkOSwgMHgwMCwgMHgwNSwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwOCwKKwkJICAgMHgwMCwgMHg5ZCwgMHgwMCwgMHhkOSwgMHgwMCwgMHgwNSwgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwOCwgMHgwMCwgMHg2ZCwgMHgwMCksCisJUEhZUkVHUygweDA4M2MsIDB4MDgzOCwgMHgwODM0LCAweDAxZjEsIDB4MDFmMiwgMHgwMWYzKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTI3MCwKKwlSQURJT1JFR1MzKDB4OTgsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MGYsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDMsIDB4MDMsIDB4MDMsIDB4OGUsIDB4MGUsIDB4MDAsCisJCSAgIDB4ZWQsIDB4ZDgsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDcsCisJCSAgIDB4MDAsIDB4OWMsIDB4MDAsIDB4ZDgsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MDcsIDB4MDAsIDB4NmMsIDB4MDApLAorCVBIWVJFR1MoMHgwODQwLCAweDA4M2MsIDB4MDgzOCwgMHgwMWYwLCAweDAxZjEsIDB4MDFmMiksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUyODAsCisJUkFESU9SRUdTMygweDkxLCAweDAxLCAweDAxLCAweDAyLCAweDEwLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAzLCAweDAzLCAweDAzLCAweDhkLCAweDBlLCAweDAwLAorCQkgICAweGRjLCAweGM4LCAweDAwLCAweDA0LCAweDAwLCAweDcwLCAweDAwLCAweDA3LAorCQkgICAweDAwLCAweDljLCAweDAwLCAweGM4LCAweDAwLCAweDA0LCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDA3LCAweDAwLCAweDZjLCAweDAwKSwKKwlQSFlSRUdTKDB4MDg0NCwgMHgwODQwLCAweDA4M2MsIDB4MDFmMCwgMHgwMWYwLCAweDAxZjEpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MjkwLAorCVJBRElPUkVHUzMoMHg5MSwgMHgwMSwgMHgwMSwgMHgwMiwgMHgxMSwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMywgMHgwMywgMHgwMywgMHg4ZCwgMHgwZSwgMHgwMCwKKwkJICAgMHhkYywgMHhjOCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwNywKKwkJICAgMHgwMCwgMHg5YywgMHgwMCwgMHhjOCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwNywgMHgwMCwgMHg2YywgMHgwMCksCisJUEhZUkVHUygweDA4NDgsIDB4MDg0NCwgMHgwODQwLCAweDAxZWYsIDB4MDFmMCwgMHgwMWYwKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTMwMCwKKwlSQURJT1JFR1MzKDB4OGEsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MTIsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDMsIDB4MDMsIDB4MDMsIDB4OGQsIDB4MGUsIDB4MDAsCisJCSAgIDB4ZGMsIDB4YzgsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDcsCisJCSAgIDB4MDAsIDB4OWMsIDB4MDAsIDB4YzgsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MDcsIDB4MDAsIDB4NmMsIDB4MDApLAorCVBIWVJFR1MoMHgwODRjLCAweDA4NDgsIDB4MDg0NCwgMHgwMWVlLCAweDAxZWYsIDB4MDFmMCksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUzMTAsCisJUkFESU9SRUdTMygweDhhLCAweDAxLCAweDAxLCAweDAyLCAweDEzLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAzLCAweDAzLCAweDAzLCAweDhkLCAweDBlLCAweDAwLAorCQkgICAweGRjLCAweGM4LCAweDAwLCAweDA0LCAweDAwLCAweDcwLCAweDAwLCAweDA3LAorCQkgICAweDAwLCAweDljLCAweDAwLCAweGM4LCAweDAwLCAweDA0LCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDA3LCAweDAwLCAweDZjLCAweDAwKSwKKwlQSFlSRUdTKDB4MDg1MCwgMHgwODRjLCAweDA4NDgsIDB4MDFlZCwgMHgwMWVlLCAweDAxZWYpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MzIwLAorCVJBRElPUkVHUzMoMHg4MywgMHgwMSwgMHgwMSwgMHgwMiwgMHgxNCwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMywgMHgwMywgMHgwMywgMHg4ZCwgMHgwZSwgMHgwMCwKKwkJICAgMHhkYiwgMHhiOCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwNywKKwkJICAgMHgwMCwgMHg5YywgMHgwMCwgMHhiOCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwNywgMHgwMCwgMHg2YywgMHgwMCksCisJUEhZUkVHUygweDA4NTQsIDB4MDg1MCwgMHgwODRjLCAweDAxZWMsIDB4MDFlZCwgMHgwMWVlKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTMzMCwKKwlSQURJT1JFR1MzKDB4ODMsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MTUsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDMsIDB4MDMsIDB4MDMsIDB4OGQsIDB4MGQsIDB4MDAsCisJCSAgIDB4Y2IsIDB4YjcsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDcsCisJCSAgIDB4MDAsIDB4OWIsIDB4MDAsIDB4YjcsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MDcsIDB4MDAsIDB4NmIsIDB4MDApLAorCVBIWVJFR1MoMHgwODU4LCAweDA4NTQsIDB4MDg1MCwgMHgwMWViLCAweDAxZWMsIDB4MDFlZCksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUzNDAsCisJUkFESU9SRUdTMygweDdjLCAweDAxLCAweDAxLCAweDAyLCAweDE2LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAzLCAweDAzLCAweDAzLCAweDhkLCAweDBkLCAweDAwLAorCQkgICAweGNhLCAweGI3LCAweDAwLCAweDAzLCAweDAwLCAweDcwLCAweDAwLCAweDA3LAorCQkgICAweDAwLCAweDliLCAweDAwLCAweGI3LCAweDAwLCAweDAzLCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDA3LCAweDAwLCAweDZiLCAweDAwKSwKKwlQSFlSRUdTKDB4MDg1YywgMHgwODU4LCAweDA4NTQsIDB4MDFlYSwgMHgwMWViLCAweDAxZWMpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MzUwLAorCVJBRElPUkVHUzMoMHg3YywgMHgwMSwgMHgwMSwgMHgwMiwgMHgxNywgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMywgMHgwMywgMHgwMywgMHg4YywgMHgwZCwgMHgwMCwKKwkJICAgMHhjYSwgMHhhNywgMHgwMCwgMHgwMywgMHgwMCwgMHg3MCwgMHgwMCwgMHgwNiwKKwkJICAgMHgwMCwgMHg5YiwgMHgwMCwgMHhhNywgMHgwMCwgMHgwMywgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwNiwgMHgwMCwgMHg2YiwgMHgwMCksCisJUEhZUkVHUygweDA4NjAsIDB4MDg1YywgMHgwODU4LCAweDAxZTksIDB4MDFlYSwgMHgwMWViKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTM2MCwKKwlSQURJT1JFR1MzKDB4NzUsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MTgsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDMsIDB4MDMsIDB4MDMsIDB4OGMsIDB4MGQsIDB4MDAsCisJCSAgIDB4YzksIDB4YTYsIDB4MDAsIDB4MDMsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDYsCisJCSAgIDB4MDAsIDB4OWIsIDB4MDAsIDB4YTYsIDB4MDAsIDB4MDMsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MDYsIDB4MDAsIDB4NmIsIDB4MDApLAorCVBIWVJFR1MoMHgwODY0LCAweDA4NjAsIDB4MDg1YywgMHgwMWU4LCAweDAxZTksIDB4MDFlYSksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUzNzAsCisJUkFESU9SRUdTMygweDc1LCAweDAxLCAweDAxLCAweDAyLCAweDE5LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAzLCAweDAzLCAweDAzLCAweDhjLCAweDBkLCAweDAwLAorCQkgICAweGM5LCAweGE2LCAweDAwLCAweDAzLCAweDAwLCAweDcwLCAweDAwLCAweDA2LAorCQkgICAweDAwLCAweDliLCAweDAwLCAweGE2LCAweDAwLCAweDAzLCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDA2LCAweDAwLCAweDdiLCAweDAwKSwKKwlQSFlSRUdTKDB4MDg2OCwgMHgwODY0LCAweDA4NjAsIDB4MDFlNywgMHgwMWU4LCAweDAxZTkpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MzgwLAorCVJBRElPUkVHUzMoMHg2ZSwgMHgwMSwgMHgwMSwgMHgwMiwgMHgxYSwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMywgMHgwMywgMHgwMywgMHg4YywgMHgwYywgMHgwMCwKKwkJICAgMHhiOCwgMHg5NiwgMHgwMCwgMHgwMywgMHgwMCwgMHg3MCwgMHgwMCwgMHgwNiwKKwkJICAgMHgwMCwgMHg5YSwgMHgwMCwgMHg5NiwgMHgwMCwgMHgwMywgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwNiwgMHgwMCwgMHg3YSwgMHgwMCksCisJUEhZUkVHUygweDA4NmMsIDB4MDg2OCwgMHgwODY0LCAweDAxZTYsIDB4MDFlNywgMHgwMWU4KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTM5MCwKKwlSQURJT1JFR1MzKDB4NmUsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MWIsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDMsIDB4MDMsIDB4MDMsIDB4OGMsIDB4MGMsIDB4MDAsCisJCSAgIDB4YjgsIDB4OTUsIDB4MDAsIDB4MDMsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDYsCisJCSAgIDB4MDAsIDB4OWEsIDB4MDAsIDB4OTUsIDB4MDAsIDB4MDMsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MDYsIDB4MDAsIDB4N2EsIDB4MDApLAorCVBIWVJFR1MoMHgwODcwLCAweDA4NmMsIDB4MDg2OCwgMHgwMWU1LCAweDAxZTYsIDB4MDFlNyksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU0MDAsCisJUkFESU9SRUdTMygweDY3LCAweDAxLCAweDAxLCAweDAyLCAweDFjLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAzLCAweDAzLCAweDAzLCAweDhjLCAweDBjLCAweDAwLAorCQkgICAweGI4LCAweDk1LCAweDAwLCAweDAzLCAweDAwLCAweDcwLCAweDAwLCAweDA2LAorCQkgICAweDAwLCAweDlhLCAweDAwLCAweDk1LCAweDAwLCAweDAzLCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDA2LCAweDAwLCAweDdhLCAweDAwKSwKKwlQSFlSRUdTKDB4MDg3NCwgMHgwODcwLCAweDA4NmMsIDB4MDFlNSwgMHgwMWU1LCAweDAxZTYpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NDEwLAorCVJBRElPUkVHUzMoMHg2NywgMHgwMSwgMHgwMSwgMHgwMiwgMHgxZCwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMywgMHgwMywgMHgwMywgMHg4YywgMHgwYywgMHgwMCwKKwkJICAgMHhiNywgMHg5NSwgMHgwMCwgMHgwMywgMHgwMCwgMHg3MCwgMHgwMCwgMHgwNSwKKwkJICAgMHgwMCwgMHg5YSwgMHgwMCwgMHg5NSwgMHgwMCwgMHgwMywgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwNSwgMHgwMCwgMHg3YSwgMHgwMCksCisJUEhZUkVHUygweDA4NzgsIDB4MDg3NCwgMHgwODcwLCAweDAxZTQsIDB4MDFlNSwgMHgwMWU1KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTQyMCwKKwlSQURJT1JFR1MzKDB4NjEsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MWUsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDMsIDB4MDMsIDB4MDMsIDB4OGMsIDB4MGMsIDB4MDAsCisJCSAgIDB4YTcsIDB4OTUsIDB4MDAsIDB4MDMsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDUsCisJCSAgIDB4MDAsIDB4OWEsIDB4MDAsIDB4OTUsIDB4MDAsIDB4MDMsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MDUsIDB4MDAsIDB4N2EsIDB4MDApLAorCVBIWVJFR1MoMHgwODdjLCAweDA4NzgsIDB4MDg3NCwgMHgwMWUzLCAweDAxZTQsIDB4MDFlNSksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU0MzAsCisJUkFESU9SRUdTMygweDYxLCAweDAxLCAweDAxLCAweDAyLCAweDFmLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAzLCAweDAzLCAweDAzLCAweDhjLCAweDBiLCAweDAwLAorCQkgICAweGE2LCAweDg1LCAweDAwLCAweDAyLCAweDAwLCAweDcwLCAweDAwLCAweDA1LAorCQkgICAweDAwLCAweDk5LCAweDAwLCAweDg1LCAweDAwLCAweDAyLCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDA1LCAweDAwLCAweDc5LCAweDAwKSwKKwlQSFlSRUdTKDB4MDg4MCwgMHgwODdjLCAweDA4NzgsIDB4MDFlMiwgMHgwMWUzLCAweDAxZTQpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NDQwLAorCVJBRElPUkVHUzMoMHg1YSwgMHgwMSwgMHgwMSwgMHgwMiwgMHgyMCwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNCwgMHgwNCwgMHgwNCwgMHg4YiwgMHgwYiwgMHgwMCwKKwkJICAgMHhhNiwgMHg4NCwgMHgwMCwgMHgwMiwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwNSwKKwkJICAgMHgwMCwgMHg5OSwgMHgwMCwgMHg4NCwgMHgwMCwgMHgwMiwgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwNSwgMHgwMCwgMHg3OSwgMHgwMCksCisJUEhZUkVHUygweDA4ODQsIDB4MDg4MCwgMHgwODdjLCAweDAxZTEsIDB4MDFlMiwgMHgwMWUzKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTQ1MCwKKwlSQURJT1JFR1MzKDB4NWEsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MjEsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDQsIDB4MDQsIDB4MDQsIDB4OGIsIDB4MGIsIDB4MDAsCisJCSAgIDB4OTUsIDB4ODQsIDB4MDAsIDB4MDIsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDUsCisJCSAgIDB4MDAsIDB4OTksIDB4MDAsIDB4ODQsIDB4MDAsIDB4MDIsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MDUsIDB4MDAsIDB4NzksIDB4MDApLAorCVBIWVJFR1MoMHgwODg4LCAweDA4ODQsIDB4MDg4MCwgMHgwMWUwLCAweDAxZTEsIDB4MDFlMiksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU0NjAsCisJUkFESU9SRUdTMygweDUzLCAweDAxLCAweDAxLCAweDAyLCAweDIyLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA0LCAweDA0LCAweDA0LCAweDhiLCAweDBiLCAweDAwLAorCQkgICAweDk1LCAweDg0LCAweDAwLCAweDAyLCAweDAwLCAweDcwLCAweDAwLCAweDA0LAorCQkgICAweDAwLCAweDk5LCAweDAwLCAweDg0LCAweDAwLCAweDAyLCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDA0LCAweDAwLCAweDc5LCAweDAwKSwKKwlQSFlSRUdTKDB4MDg4YywgMHgwODg4LCAweDA4ODQsIDB4MDFkZiwgMHgwMWUwLCAweDAxZTEpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NDcwLAorCVJBRElPUkVHUzMoMHg1MywgMHgwMSwgMHgwMSwgMHgwMiwgMHgyMywgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNCwgMHgwNCwgMHgwNCwgMHg4YiwgMHgwYiwgMHgwMCwKKwkJICAgMHg5NCwgMHg3NCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwNCwKKwkJICAgMHgwMCwgMHg5OSwgMHgwMCwgMHg3NCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwNCwgMHgwMCwgMHg3OSwgMHgwMCksCisJUEhZUkVHUygweDA4OTAsIDB4MDg4YywgMHgwODg4LCAweDAxZGUsIDB4MDFkZiwgMHgwMWUwKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTQ4MCwKKwlSQURJT1JFR1MzKDB4NGQsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MjQsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDQsIDB4MDQsIDB4MDQsIDB4OGEsIDB4MGEsIDB4MDAsCisJCSAgIDB4ODQsIDB4NzMsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDQsCisJCSAgIDB4MDAsIDB4OTgsIDB4MDAsIDB4NzMsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MDQsIDB4MDAsIDB4NzgsIDB4MDApLAorCVBIWVJFR1MoMHgwODk0LCAweDA4OTAsIDB4MDg4YywgMHgwMWRkLCAweDAxZGUsIDB4MDFkZiksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU0OTAsCisJUkFESU9SRUdTMygweDRkLCAweDAxLCAweDAxLCAweDAyLCAweDI1LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA0LCAweDA0LCAweDA0LCAweDhhLCAweDBhLCAweDAwLAorCQkgICAweDgzLCAweDczLCAweDAwLCAweDAxLCAweDAwLCAweDcwLCAweDAwLCAweDA0LAorCQkgICAweDAwLCAweDk4LCAweDAwLCAweDczLCAweDAwLCAweDAxLCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDA0LCAweDAwLCAweDc4LCAweDAwKSwKKwlQSFlSRUdTKDB4MDg5OCwgMHgwODk0LCAweDA4OTAsIDB4MDFkZCwgMHgwMWRkLCAweDAxZGUpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NTAwLAorCVJBRElPUkVHUzMoMHg0NywgMHgwMSwgMHgwMSwgMHgwMiwgMHgyNiwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNCwgMHgwNCwgMHgwNCwgMHg4YSwgMHgwYSwgMHgwMCwKKwkJICAgMHg4MiwgMHg3MywgMHgwMCwgMHgwMSwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwNCwKKwkJICAgMHgwMCwgMHg5OCwgMHgwMCwgMHg3MywgMHgwMCwgMHgwMSwgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwNCwgMHgwMCwgMHg3OCwgMHgwMCksCisJUEhZUkVHUygweDA4OWMsIDB4MDg5OCwgMHgwODk0LCAweDAxZGMsIDB4MDFkZCwgMHgwMWRkKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTUxMCwKKwlSQURJT1JFR1MzKDB4NDcsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MjcsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDQsIDB4MDQsIDB4MDQsIDB4OGEsIDB4MGEsIDB4MDAsCisJCSAgIDB4ODIsIDB4NzMsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDQsCisJCSAgIDB4MDAsIDB4OTgsIDB4MDAsIDB4NzMsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MDQsIDB4MDAsIDB4NzgsIDB4MDApLAorCVBIWVJFR1MoMHgwOGEwLCAweDA4OWMsIDB4MDg5OCwgMHgwMWRiLCAweDAxZGMsIDB4MDFkZCksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU1MjAsCisJUkFESU9SRUdTMygweDQwLCAweDAxLCAweDAxLCAweDAyLCAweDI4LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA0LCAweDA0LCAweDA0LCAweDhhLCAweDBhLCAweDAwLAorCQkgICAweDcyLCAweDczLCAweDAwLCAweDAxLCAweDAwLCAweDcwLCAweDAwLCAweDA0LAorCQkgICAweDAwLCAweDk4LCAweDAwLCAweDczLCAweDAwLCAweDAxLCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDA0LCAweDAwLCAweDc4LCAweDAwKSwKKwlQSFlSRUdTKDB4MDhhNCwgMHgwOGEwLCAweDA4OWMsIDB4MDFkYSwgMHgwMWRiLCAweDAxZGMpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NTMwLAorCVJBRElPUkVHUzMoMHg0MCwgMHgwMSwgMHgwMSwgMHgwMiwgMHgyOSwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNCwgMHgwNCwgMHgwNCwgMHg4YSwgMHgwOSwgMHgwMCwKKwkJICAgMHg3MiwgMHg2MywgMHgwMCwgMHgwMSwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMywKKwkJICAgMHgwMCwgMHg5OCwgMHgwMCwgMHg2MywgMHgwMCwgMHgwMSwgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwMywgMHgwMCwgMHg3OCwgMHgwMCksCisJUEhZUkVHUygweDA4YTgsIDB4MDhhNCwgMHgwOGEwLCAweDAxZDksIDB4MDFkYSwgMHgwMWRiKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTU0MCwKKwlSQURJT1JFR1MzKDB4M2EsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MmEsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDQsIDB4MDQsIDB4MDQsIDB4OGEsIDB4MDksIDB4MDAsCisJCSAgIDB4NzEsIDB4NjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDMsCisJCSAgIDB4MDAsIDB4OTcsIDB4MDAsIDB4NjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MDMsIDB4MDAsIDB4NzcsIDB4MDApLAorCVBIWVJFR1MoMHgwOGFjLCAweDA4YTgsIDB4MDhhNCwgMHgwMWQ4LCAweDAxZDksIDB4MDFkYSksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU1NTAsCisJUkFESU9SRUdTMygweDNhLCAweDAxLCAweDAxLCAweDAyLCAweDJiLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA0LCAweDA0LCAweDA0LCAweDg5LCAweDA5LCAweDAwLAorCQkgICAweDYxLCAweDYyLCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweDAwLCAweDAzLAorCQkgICAweDAwLCAweDk3LCAweDAwLCAweDYyLCAweDAwLCAweDAwLCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDAzLCAweDAwLCAweDc3LCAweDAwKSwKKwlQSFlSRUdTKDB4MDhiMCwgMHgwOGFjLCAweDA4YTgsIDB4MDFkNywgMHgwMWQ4LCAweDAxZDkpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NTYwLAorCVJBRElPUkVHUzMoMHgzNCwgMHgwMSwgMHgwMSwgMHgwMiwgMHgyYywgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNCwgMHgwNCwgMHgwNCwgMHg4OSwgMHgwOSwgMHgwMCwKKwkJICAgMHg2MSwgMHg2MiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMywKKwkJICAgMHgwMCwgMHg5NywgMHgwMCwgMHg2MiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwMywgMHgwMCwgMHg3NywgMHgwMCksCisJUEhZUkVHUygweDA4YjQsIDB4MDhiMCwgMHgwOGFjLCAweDAxZDcsIDB4MDFkNywgMHgwMWQ4KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTU3MCwKKwlSQURJT1JFR1MzKDB4MzQsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MmQsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDQsIDB4MDQsIDB4MDQsIDB4ODksIDB4MDksIDB4MDAsCisJCSAgIDB4NjEsIDB4NTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDIsCisJCSAgIDB4MDAsIDB4OTYsIDB4MDAsIDB4NTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MDIsIDB4MDAsIDB4NzYsIDB4MDApLAorCVBIWVJFR1MoMHgwOGI4LCAweDA4YjQsIDB4MDhiMCwgMHgwMWQ2LCAweDAxZDcsIDB4MDFkNyksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU1ODAsCisJUkFESU9SRUdTMygweDJlLCAweDAxLCAweDAxLCAweDAyLCAweDJlLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA0LCAweDA0LCAweDA0LCAweDg5LCAweDA4LCAweDAwLAorCQkgICAweDYwLCAweDUyLCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweDAwLCAweDAyLAorCQkgICAweDAwLCAweDk2LCAweDAwLCAweDUyLCAweDAwLCAweDAwLCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDAyLCAweDAwLCAweDg2LCAweDAwKSwKKwlQSFlSRUdTKDB4MDhiYywgMHgwOGI4LCAweDA4YjQsIDB4MDFkNSwgMHgwMWQ2LCAweDAxZDcpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NTkwLAorCVJBRElPUkVHUzMoMHgyZSwgMHgwMSwgMHgwMSwgMHgwMiwgMHgyZiwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNCwgMHgwNCwgMHgwNCwgMHg4OSwgMHgwOCwgMHgwMCwKKwkJICAgMHg1MCwgMHg1MSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMiwKKwkJICAgMHgwMCwgMHg5NiwgMHgwMCwgMHg1MSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwMiwgMHgwMCwgMHg4NiwgMHgwMCksCisJUEhZUkVHUygweDA4YzAsIDB4MDhiYywgMHgwOGI4LCAweDAxZDQsIDB4MDFkNSwgMHgwMWQ2KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTYwMCwKKwlSQURJT1JFR1MzKDB4MjgsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MzAsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDUsIDB4ODksIDB4MDgsIDB4MDAsCisJCSAgIDB4NTAsIDB4NTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDIsCisJCSAgIDB4MDAsIDB4OTYsIDB4MDAsIDB4NTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MDIsIDB4MDAsIDB4ODYsIDB4MDApLAorCVBIWVJFR1MoMHgwOGM0LCAweDA4YzAsIDB4MDhiYywgMHgwMWQzLCAweDAxZDQsIDB4MDFkNSksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU2MTAsCisJUkFESU9SRUdTMygweDI4LCAweDAxLCAweDAxLCAweDAyLCAweDMxLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA1LCAweDA1LCAweDA1LCAweDg5LCAweDA4LCAweDAwLAorCQkgICAweDUwLCAweDUxLCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweDAwLCAweDAyLAorCQkgICAweDAwLCAweDk2LCAweDAwLCAweDUxLCAweDAwLCAweDAwLCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDAyLCAweDAwLCAweDg2LCAweDAwKSwKKwlQSFlSRUdTKDB4MDhjOCwgMHgwOGM0LCAweDA4YzAsIDB4MDFkMiwgMHgwMWQzLCAweDAxZDQpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NjIwLAorCVJBRElPUkVHUzMoMHgyMSwgMHgwMSwgMHgwMSwgMHgwMiwgMHgzMiwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNSwgMHgwNSwgMHgwNSwgMHg4OSwgMHgwOCwgMHgwMCwKKwkJICAgMHg1MCwgMHg1MSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMiwKKwkJICAgMHgwMCwgMHg5NiwgMHgwMCwgMHg1MSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwMiwgMHgwMCwgMHg4NiwgMHgwMCksCisJUEhZUkVHUygweDA4Y2MsIDB4MDhjOCwgMHgwOGM0LCAweDAxZDIsIDB4MDFkMiwgMHgwMWQzKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTYzMCwKKwlSQURJT1JFR1MzKDB4MjEsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MzMsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDUsIDB4ODgsIDB4MDcsIDB4MDAsCisJCSAgIDB4NTAsIDB4NTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDIsCisJCSAgIDB4MDAsIDB4OTYsIDB4MDAsIDB4NTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MDIsIDB4MDAsIDB4ODYsIDB4MDApLAorCVBIWVJFR1MoMHgwOGQwLCAweDA4Y2MsIDB4MDhjOCwgMHgwMWQxLCAweDAxZDIsIDB4MDFkMiksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU2NDAsCisJUkFESU9SRUdTMygweDFjLCAweDAxLCAweDAxLCAweDAyLCAweDM0LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA1LCAweDA1LCAweDA1LCAweDg4LCAweDA3LCAweDAwLAorCQkgICAweDQwLCAweDUxLCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweDAwLCAweDAyLAorCQkgICAweDAwLCAweDk1LCAweDAwLCAweDUxLCAweDAwLCAweDAwLCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDAyLCAweDAwLCAweDg1LCAweDAwKSwKKwlQSFlSRUdTKDB4MDhkNCwgMHgwOGQwLCAweDA4Y2MsIDB4MDFkMCwgMHgwMWQxLCAweDAxZDIpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NjUwLAorCVJBRElPUkVHUzMoMHgxYywgMHgwMSwgMHgwMSwgMHgwMiwgMHgzNSwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNSwgMHgwNSwgMHgwNSwgMHg4OCwgMHgwNywgMHgwMCwKKwkJICAgMHg0MCwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMSwKKwkJICAgMHgwMCwgMHg5NSwgMHgwMCwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwMSwgMHgwMCwgMHg4NSwgMHgwMCksCisJUEhZUkVHUygweDA4ZDgsIDB4MDhkNCwgMHgwOGQwLCAweDAxY2YsIDB4MDFkMCwgMHgwMWQxKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTY2MCwKKwlSQURJT1JFR1MzKDB4MTYsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MzYsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDUsIDB4ODgsIDB4MDcsIDB4MDAsCisJCSAgIDB4NDAsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDEsCisJCSAgIDB4MDAsIDB4OTUsIDB4MDAsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODUsIDB4MDApLAorCVBIWVJFR1MoMHgwOGRjLCAweDA4ZDgsIDB4MDhkNCwgMHgwMWNlLCAweDAxY2YsIDB4MDFkMCksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU2NzAsCisJUkFESU9SRUdTMygweDE2LCAweDAxLCAweDAxLCAweDAyLCAweDM3LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA1LCAweDA1LCAweDA1LCAweDg4LCAweDA3LCAweDAwLAorCQkgICAweDQwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweDAwLCAweDAxLAorCQkgICAweDAwLCAweDk0LCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDAxLCAweDAwLCAweDg0LCAweDAwKSwKKwlQSFlSRUdTKDB4MDhlMCwgMHgwOGRjLCAweDA4ZDgsIDB4MDFjZSwgMHgwMWNlLCAweDAxY2YpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NjgwLAorCVJBRElPUkVHUzMoMHgxMCwgMHgwMSwgMHgwMSwgMHgwMiwgMHgzOCwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNSwgMHgwNSwgMHgwNSwgMHg4NywgMHgwNiwgMHgwMCwKKwkJICAgMHgzMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMSwKKwkJICAgMHgwMCwgMHg5NCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwMSwgMHgwMCwgMHg4NCwgMHgwMCksCisJUEhZUkVHUygweDA4ZTQsIDB4MDhlMCwgMHgwOGRjLCAweDAxY2QsIDB4MDFjZSwgMHgwMWNlKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTY5MCwKKwlSQURJT1JFR1MzKDB4MTAsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MzksIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDUsIDB4ODcsIDB4MDYsIDB4MDAsCisJCSAgIDB4MzAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDEsCisJCSAgIDB4MDAsIDB4OTQsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MDEsIDB4MDAsIDB4OTQsIDB4MDApLAorCVBIWVJFR1MoMHgwOGU4LCAweDA4ZTQsIDB4MDhlMCwgMHgwMWNjLCAweDAxY2QsIDB4MDFjZSksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU3MDAsCisJUkFESU9SRUdTMygweDBhLCAweDAxLCAweDAxLCAweDAyLCAweDNhLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA1LCAweDA1LCAweDA1LCAweDg3LCAweDA2LCAweDAwLAorCQkgICAweDMwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweDAwLCAweDAxLAorCQkgICAweDAwLCAweDk0LCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDAxLCAweDAwLCAweDk0LCAweDAwKSwKKwlQSFlSRUdTKDB4MDhlYywgMHgwOGU4LCAweDA4ZTQsIDB4MDFjYiwgMHgwMWNjLCAweDAxY2QpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NzEwLAorCVJBRElPUkVHUzMoMHgwYSwgMHgwMSwgMHgwMSwgMHgwMiwgMHgzYiwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNSwgMHgwNSwgMHgwNSwgMHg4NywgMHgwNiwgMHgwMCwKKwkJICAgMHgzMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMSwKKwkJICAgMHgwMCwgMHg5NCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwMSwgMHgwMCwgMHg5NCwgMHgwMCksCisJUEhZUkVHUygweDA4ZjAsIDB4MDhlYywgMHgwOGU4LCAweDAxY2EsIDB4MDFjYiwgMHgwMWNjKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTcyMCwKKwlSQURJT1JFR1MzKDB4MGEsIDB4MDEsIDB4MDEsIDB4MDIsIDB4M2MsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDUsIDB4ODcsIDB4MDYsIDB4MDAsCisJCSAgIDB4MzAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDEsCisJCSAgIDB4MDAsIDB4OTQsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MDEsIDB4MDAsIDB4OTQsIDB4MDApLAorCVBIWVJFR1MoMHgwOGY0LCAweDA4ZjAsIDB4MDhlYywgMHgwMWM5LCAweDAxY2EsIDB4MDFjYiksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU3MjUsCisJUkFESU9SRUdTMygweDAzLCAweDAxLCAweDAyLCAweDA0LCAweDc5LCAweDA3LCAweDA3LCAweDA0LAorCQkgICAweDEwLCAweDAxLCAweDA1LCAweDA1LCAweDA1LCAweDg3LCAweDA2LCAweDAwLAorCQkgICAweDMwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweDAwLCAweDAxLAorCQkgICAweDAwLCAweDk0LCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDAxLCAweDAwLCAweDk0LCAweDAwKSwKKwlQSFlSRUdTKDB4MDhmNiwgMHgwOGYyLCAweDA4ZWUsIDB4MDFjOSwgMHgwMWNhLCAweDAxY2IpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NzMwLAorCVJBRElPUkVHUzMoMHgwYSwgMHgwMSwgMHgwMSwgMHgwMiwgMHgzZCwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNSwgMHgwNSwgMHgwNSwgMHg4NywgMHgwNSwgMHgwMCwKKwkJICAgMHgyMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMSwKKwkJICAgMHgwMCwgMHg5NCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwMSwgMHgwMCwgMHg5NCwgMHgwMCksCisJUEhZUkVHUygweDA4ZjgsIDB4MDhmNCwgMHgwOGYwLCAweDAxYzksIDB4MDFjOSwgMHgwMWNhKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTczNSwKKwlSQURJT1JFR1MzKDB4MDMsIDB4MDEsIDB4MDIsIDB4MDQsIDB4N2IsIDB4MDcsIDB4MDcsIDB4MDQsCisJCSAgIDB4MTAsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDUsIDB4ODcsIDB4MDUsIDB4MDAsCisJCSAgIDB4MjAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDAsCisJCSAgIDB4MDAsIDB4OTMsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTMsIDB4MDApLAorCVBIWVJFR1MoMHgwOGZhLCAweDA4ZjYsIDB4MDhmMiwgMHgwMWM4LCAweDAxYzksIDB4MDFjYSksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU3NDAsCisJUkFESU9SRUdTMygweDBhLCAweDAxLCAweDAxLCAweDAyLCAweDNlLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA1LCAweDA1LCAweDA1LCAweDg3LCAweDA1LCAweDAwLAorCQkgICAweDIwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweDAwLCAweDAwLAorCQkgICAweDAwLCAweDkzLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDAwLCAweDAwLCAweDkzLCAweDAwKSwKKwlQSFlSRUdTKDB4MDhmYywgMHgwOGY4LCAweDA4ZjQsIDB4MDFjOCwgMHgwMWM5LCAweDAxYzkpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NzQ1LAorCVJBRElPUkVHUzMoMHhmZSwgMHgwMCwgMHgwMiwgMHgwNCwgMHg3ZCwgMHgwNywgMHgwNywgMHgwNCwKKwkJICAgMHgxMCwgMHgwMSwgMHgwNSwgMHgwNSwgMHgwNSwgMHg4NywgMHgwNSwgMHgwMCwKKwkJICAgMHgyMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMCwKKwkJICAgMHgwMCwgMHg5MywgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MywgMHgwMCksCisJUEhZUkVHUygweDA4ZmUsIDB4MDhmYSwgMHgwOGY2LCAweDAxYzgsIDB4MDFjOCwgMHgwMWM5KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTc1MCwKKwlSQURJT1JFR1MzKDB4MGEsIDB4MDEsIDB4MDEsIDB4MDIsIDB4M2YsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDUsIDB4ODcsIDB4MDUsIDB4MDAsCisJCSAgIDB4MjAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDAsCisJCSAgIDB4MDAsIDB4OTMsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTMsIDB4MDApLAorCVBIWVJFR1MoMHgwOTAwLCAweDA4ZmMsIDB4MDhmOCwgMHgwMWM3LCAweDAxYzgsIDB4MDFjOSksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU3NTUsCisJUkFESU9SRUdTMygweGZlLCAweDAwLCAweDAyLCAweDA0LCAweDdmLCAweDA3LCAweDA3LCAweDA0LAorCQkgICAweDEwLCAweDAxLCAweDA1LCAweDA1LCAweDA1LCAweDg3LCAweDA1LCAweDAwLAorCQkgICAweDEwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweDAwLCAweDAwLAorCQkgICAweDAwLCAweDkzLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDAwLCAweDAwLCAweDkzLCAweDAwKSwKKwlQSFlSRUdTKDB4MDkwMiwgMHgwOGZlLCAweDA4ZmEsIDB4MDFjNywgMHgwMWM4LCAweDAxYzgpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NzYwLAorCVJBRElPUkVHUzMoMHgwYSwgMHgwMSwgMHgwMSwgMHgwMiwgMHg0MCwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNSwgMHgwNSwgMHgwNSwgMHg4NiwgMHgwNSwgMHgwMCwKKwkJICAgMHgxMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMCwKKwkJICAgMHgwMCwgMHg5MywgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MywgMHgwMCksCisJUEhZUkVHUygweDA5MDQsIDB4MDkwMCwgMHgwOGZjLCAweDAxYzYsIDB4MDFjNywgMHgwMWM4KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTc2NSwKKwlSQURJT1JFR1MzKDB4ZjgsIDB4MDAsIDB4MDIsIDB4MDQsIDB4ODEsIDB4MDcsIDB4MDcsIDB4MDQsCisJCSAgIDB4MTAsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDUsIDB4ODYsIDB4MDUsIDB4MDAsCisJCSAgIDB4MTAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDAsCisJCSAgIDB4MDAsIDB4OTIsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTIsIDB4MDApLAorCVBIWVJFR1MoMHgwOTA2LCAweDA5MDIsIDB4MDhmZSwgMHgwMWM2LCAweDAxYzcsIDB4MDFjOCksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU3NzAsCisJUkFESU9SRUdTMygweDBhLCAweDAxLCAweDAxLCAweDAyLCAweDQxLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA1LCAweDA1LCAweDA1LCAweDg2LCAweDA0LCAweDAwLAorCQkgICAweDEwLCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweDAwLCAweDAwLAorCQkgICAweDAwLCAweDkyLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDAwLCAweDAwLCAweDkyLCAweDAwKSwKKwlQSFlSRUdTKDB4MDkwOCwgMHgwOTA0LCAweDA5MDAsIDB4MDFjNiwgMHgwMWM2LCAweDAxYzcpLAorICB9LAorICB7CS5mcmVxCQkJPSA1Nzc1LAorCVJBRElPUkVHUzMoMHhmOCwgMHgwMCwgMHgwMiwgMHgwNCwgMHg4MywgMHgwNywgMHgwNywgMHgwNCwKKwkJICAgMHgxMCwgMHgwMSwgMHgwNSwgMHgwNSwgMHgwNSwgMHg4NiwgMHgwNCwgMHgwMCwKKwkJICAgMHgxMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMCwKKwkJICAgMHgwMCwgMHg5MiwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MiwgMHgwMCksCisJUEhZUkVHUygweDA5MGEsIDB4MDkwNiwgMHgwOTAyLCAweDAxYzUsIDB4MDFjNiwgMHgwMWM3KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTc4MCwKKwlSQURJT1JFR1MzKDB4MGEsIDB4MDEsIDB4MDEsIDB4MDIsIDB4NDIsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDUsIDB4ODYsIDB4MDQsIDB4MDAsCisJCSAgIDB4MTAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDAsCisJCSAgIDB4MDAsIDB4OTIsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTIsIDB4MDApLAorCVBIWVJFR1MoMHgwOTBjLCAweDA5MDgsIDB4MDkwNCwgMHgwMWM1LCAweDAxYzYsIDB4MDFjNiksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU3ODUsCisJUkFESU9SRUdTMygweGYyLCAweDAwLCAweDAyLCAweDA0LCAweDg1LCAweDA3LCAweDA3LCAweDA0LAorCQkgICAweDEwLCAweDAxLCAweDA2LCAweDA2LCAweDA2LCAweDg2LCAweDA0LCAweDAwLAorCQkgICAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweDAwLCAweDAwLAorCQkgICAweDAwLCAweDkyLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDAwLCAweDAwLCAweDkyLCAweDAwKSwKKwlQSFlSRUdTKDB4MDkwZSwgMHgwOTBhLCAweDA5MDYsIDB4MDFjNCwgMHgwMWM1LCAweDAxYzYpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NzkwLAorCVJBRElPUkVHUzMoMHgwYSwgMHgwMSwgMHgwMSwgMHgwMiwgMHg0MywgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNiwgMHgwNiwgMHgwNiwgMHg4NiwgMHgwNCwgMHgwMCwKKwkJICAgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMCwKKwkJICAgMHgwMCwgMHg5MiwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MiwgMHgwMCksCisJUEhZUkVHUygweDA5MTAsIDB4MDkwYywgMHgwOTA4LCAweDAxYzQsIDB4MDFjNSwgMHgwMWM2KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTc5NSwKKwlSQURJT1JFR1MzKDB4ZjIsIDB4MDAsIDB4MDIsIDB4MDQsIDB4ODcsIDB4MDcsIDB4MDcsIDB4MDQsCisJCSAgIDB4MTAsIDB4MDEsIDB4MDYsIDB4MDYsIDB4MDYsIDB4ODYsIDB4MDQsIDB4MDAsCisJCSAgIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDAsCisJCSAgIDB4MDAsIDB4OTIsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTIsIDB4MDApLAorCVBIWVJFR1MoMHgwOTEyLCAweDA5MGUsIDB4MDkwYSwgMHgwMWM0LCAweDAxYzQsIDB4MDFjNSksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU4MDAsCisJUkFESU9SRUdTMygweDBhLCAweDAxLCAweDAxLCAweDAyLCAweDQ0LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA2LCAweDA2LCAweDA2LCAweDg2LCAweDA0LCAweDAwLAorCQkgICAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweDAwLCAweDAwLAorCQkgICAweDAwLCAweDkyLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDAwLCAweDAwLCAweDkyLCAweDAwKSwKKwlQSFlSRUdTKDB4MDkxNCwgMHgwOTEwLCAweDA5MGMsIDB4MDFjMywgMHgwMWM0LCAweDAxYzUpLAorICB9LAorICB7CS5mcmVxCQkJPSA1ODA1LAorCVJBRElPUkVHUzMoMHhlZCwgMHgwMCwgMHgwMiwgMHgwNCwgMHg4OSwgMHgwNywgMHgwNywgMHgwNCwKKwkJICAgMHgxMCwgMHgwMSwgMHgwNiwgMHgwNiwgMHgwNiwgMHg4NiwgMHgwNCwgMHgwMCwKKwkJICAgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMCwKKwkJICAgMHgwMCwgMHg5MiwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MiwgMHgwMCksCisJUEhZUkVHUygweDA5MTYsIDB4MDkxMiwgMHgwOTBlLCAweDAxYzMsIDB4MDFjNCwgMHgwMWM0KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTgxMCwKKwlSQURJT1JFR1MzKDB4MGEsIDB4MDEsIDB4MDEsIDB4MDIsIDB4NDUsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDYsIDB4MDYsIDB4MDYsIDB4ODYsIDB4MDQsIDB4MDAsCisJCSAgIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDAsCisJCSAgIDB4MDAsIDB4OTIsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTIsIDB4MDApLAorCVBIWVJFR1MoMHgwOTE4LCAweDA5MTQsIDB4MDkxMCwgMHgwMWMyLCAweDAxYzMsIDB4MDFjNCksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU4MTUsCisJUkFESU9SRUdTMygweGVkLCAweDAwLCAweDAyLCAweDA0LCAweDhiLCAweDA3LCAweDA3LCAweDA0LAorCQkgICAweDEwLCAweDAxLCAweDA2LCAweDA2LCAweDA2LCAweDg2LCAweDA0LCAweDAwLAorCQkgICAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweDAwLCAweDAwLAorCQkgICAweDAwLCAweDkyLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDAwLCAweDAwLCAweDkyLCAweDAwKSwKKwlQSFlSRUdTKDB4MDkxYSwgMHgwOTE2LCAweDA5MTIsIDB4MDFjMiwgMHgwMWMzLCAweDAxYzQpLAorICB9LAorICB7CS5mcmVxCQkJPSA1ODIwLAorCVJBRElPUkVHUzMoMHgwYSwgMHgwMSwgMHgwMSwgMHgwMiwgMHg0NiwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNiwgMHgwNiwgMHgwNiwgMHg4NiwgMHgwNCwgMHgwMCwKKwkJICAgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMCwKKwkJICAgMHgwMCwgMHg5MiwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MiwgMHgwMCksCisJUEhZUkVHUygweDA5MWMsIDB4MDkxOCwgMHgwOTE0LCAweDAxYzIsIDB4MDFjMiwgMHgwMWMzKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTgyNSwKKwlSQURJT1JFR1MzKDB4ZWQsIDB4MDAsIDB4MDIsIDB4MDQsIDB4OGQsIDB4MDcsIDB4MDcsIDB4MDQsCisJCSAgIDB4MTAsIDB4MDEsIDB4MDYsIDB4MDYsIDB4MDYsIDB4ODYsIDB4MDQsIDB4MDAsCisJCSAgIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDAsCisJCSAgIDB4MDAsIDB4OTIsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTIsIDB4MDApLAorCVBIWVJFR1MoMHgwOTFlLCAweDA5MWEsIDB4MDkxNiwgMHgwMWMxLCAweDAxYzIsIDB4MDFjMyksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU4MzAsCisJUkFESU9SRUdTMygweDBhLCAweDAxLCAweDAxLCAweDAyLCAweDQ3LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA2LCAweDA2LCAweDA2LCAweDg2LCAweDA0LCAweDAwLAorCQkgICAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweDAwLCAweDAwLAorCQkgICAweDAwLCAweDkyLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDAwLCAweDAwLCAweDkyLCAweDAwKSwKKwlQSFlSRUdTKDB4MDkyMCwgMHgwOTFjLCAweDA5MTgsIDB4MDFjMSwgMHgwMWMyLCAweDAxYzIpLAorICB9LAorICB7CS5mcmVxCQkJPSA1ODQwLAorCVJBRElPUkVHUzMoMHgwYSwgMHgwMSwgMHgwMSwgMHgwMiwgMHg0OCwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNiwgMHgwNiwgMHgwNiwgMHg4NiwgMHgwNCwgMHgwMCwKKwkJICAgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMCwKKwkJICAgMHgwMCwgMHg5MiwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MiwgMHgwMCksCisJUEhZUkVHUygweDA5MjQsIDB4MDkyMCwgMHgwOTFjLCAweDAxYzAsIDB4MDFjMSwgMHgwMWMyKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTg1MCwKKwlSQURJT1JFR1MzKDB4ZTAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4NDksIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDYsIDB4MDYsIDB4MDYsIDB4ODUsIDB4MDMsIDB4MDAsCisJCSAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDAsCisJCSAgIDB4MDAsIDB4OTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTIsIDB4MDApLAorCVBIWVJFR1MoMHgwOTI4LCAweDA5MjQsIDB4MDkyMCwgMHgwMWJmLCAweDAxYzAsIDB4MDFjMSksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU4NjAsCisJUkFESU9SRUdTMygweGRlLCAweDAwLCAweDAxLCAweDAyLCAweDRhLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA2LCAweDA2LCAweDA2LCAweDg1LCAweDAzLCAweDAwLAorCQkgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweDAwLCAweDAwLAorCQkgICAweDAwLCAweDkyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDAwLCAweDAwLCAweDkyLCAweDAwKSwKKwlQSFlSRUdTKDB4MDkyYywgMHgwOTI4LCAweDA5MjQsIDB4MDFiZiwgMHgwMWJmLCAweDAxYzApLAorICB9LAorICB7CS5mcmVxCQkJPSA1ODcwLAorCVJBRElPUkVHUzMoMHhkYiwgMHgwMCwgMHgwMSwgMHgwMiwgMHg0YiwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNiwgMHgwNiwgMHgwNiwgMHg4NSwgMHgwMywgMHgwMCwKKwkJICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMCwKKwkJICAgMHgwMCwgMHg5MSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MSwgMHgwMCksCisJUEhZUkVHUygweDA5MzAsIDB4MDkyYywgMHgwOTI4LCAweDAxYmUsIDB4MDFiZiwgMHgwMWJmKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTg4MCwKKwlSQURJT1JFR1MzKDB4ZDgsIDB4MDAsIDB4MDEsIDB4MDIsIDB4NGMsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDYsIDB4MDYsIDB4MDYsIDB4ODUsIDB4MDMsIDB4MDAsCisJCSAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDAsCisJCSAgIDB4MDAsIDB4OTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTEsIDB4MDApLAorCVBIWVJFR1MoMHgwOTM0LCAweDA5MzAsIDB4MDkyYywgMHgwMWJkLCAweDAxYmUsIDB4MDFiZiksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU4OTAsCisJUkFESU9SRUdTMygweGQ2LCAweDAwLCAweDAxLCAweDAyLCAweDRkLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA2LCAweDA2LCAweDA2LCAweDg1LCAweDAzLCAweDAwLAorCQkgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweDAwLCAweDAwLAorCQkgICAweDAwLCAweDkxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLAorCQkgICAweDAwLCAweDAwLCAweDAwLCAweDkxLCAweDAwKSwKKwlQSFlSRUdTKDB4MDkzOCwgMHgwOTM0LCAweDA5MzAsIDB4MDFiYywgMHgwMWJkLCAweDAxYmUpLAorICB9LAorICB7CS5mcmVxCQkJPSA1OTAwLAorCVJBRElPUkVHUzMoMHhkMywgMHgwMCwgMHgwMSwgMHgwMiwgMHg0ZSwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNiwgMHgwNiwgMHgwNiwgMHg4NSwgMHgwMywgMHgwMCwKKwkJICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMCwKKwkJICAgMHgwMCwgMHg5MSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwKKwkJICAgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MSwgMHgwMCksCisJUEhZUkVHUygweDA5M2MsIDB4MDkzOCwgMHgwOTM0LCAweDAxYmMsIDB4MDFiYywgMHgwMWJkKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTkxMCwKKwlSQURJT1JFR1MzKDB4ZDYsIDB4MDAsIDB4MDEsIDB4MDIsIDB4NGYsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDYsIDB4MDYsIDB4MDYsIDB4ODUsIDB4MDMsIDB4MDAsCisJCSAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDAsCisJCSAgIDB4MDAsIDB4OTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsCisJCSAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTEsIDB4MDApLAorCVBIWVJFR1MoMHgwOTQwLCAweDA5M2MsIDB4MDkzOCwgMHgwMWJiLCAweDAxYmMsIDB4MDFiYyksCisgIH0sCisgIHsJLmZyZXEJCQk9IDI0MTIsCisJUkFESU9SRUdTMygweDAwLCAweDAxLCAweDAzLCAweDA5LCAweDZjLCAweDA4LCAweDA4LCAweDA0LAorCQkgICAweDE2LCAweDAxLCAweDA0LCAweDA0LCAweDA0LCAweDhmLCAweDMwLCAweDAwLAorCQkgICAweDAwLCAweDAwLCAweDg5LCAweDAwLCAweDAzLCAweDAwLCAweDcwLCAweDAwLAorCQkgICAweDBmLCAweDAwLCAweDBiLCAweDAwLCAweDg5LCAweDAwLCAweDAzLCAweDAwLAorCQkgICAweDcwLCAweDAwLCAweDBmLCAweDAwLCAweDBiKSwKKwlQSFlSRUdTKDB4MDNjOSwgMHgwM2M1LCAweDAzYzEsIDB4MDQzYSwgMHgwNDNmLCAweDA0NDMpLAorICB9LAorICB7CS5mcmVxCQkJPSAyNDE3LAorCVJBRElPUkVHUzMoMHgwMCwgMHgwMSwgMHgwMywgMHgwOSwgMHg3MSwgMHgwOCwgMHgwOCwgMHgwNCwKKwkJICAgMHgxNiwgMHgwMSwgMHgwNSwgMHgwNSwgMHgwNSwgMHg4ZiwgMHgzMCwgMHgwMCwKKwkJICAgMHgwMCwgMHgwMCwgMHg4OSwgMHgwMCwgMHgwMywgMHgwMCwgMHg3MCwgMHgwMCwKKwkJICAgMHgwZiwgMHgwMCwgMHgwYSwgMHgwMCwgMHg4OSwgMHgwMCwgMHgwMywgMHgwMCwKKwkJICAgMHg3MCwgMHgwMCwgMHgwZiwgMHgwMCwgMHgwYSksCisJUEhZUkVHUygweDAzY2IsIDB4MDNjNywgMHgwM2MzLCAweDA0MzgsIDB4MDQzZCwgMHgwNDQxKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gMjQyMiwKKwlSQURJT1JFR1MzKDB4MDAsIDB4MDEsIDB4MDMsIDB4MDksIDB4NzYsIDB4MDgsIDB4MDgsIDB4MDQsCisJCSAgIDB4MTYsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDUsIDB4OGYsIDB4MzAsIDB4MDAsCisJCSAgIDB4MDAsIDB4MDAsIDB4ODksIDB4MDAsIDB4MDMsIDB4MDAsIDB4NzAsIDB4MDAsCisJCSAgIDB4MGYsIDB4MDAsIDB4MGEsIDB4MDAsIDB4ODksIDB4MDAsIDB4MDMsIDB4MDAsCisJCSAgIDB4NzAsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MGEpLAorCVBIWVJFR1MoMHgwM2NkLCAweDAzYzksIDB4MDNjNSwgMHgwNDM2LCAweDA0M2EsIDB4MDQzZiksCisgIH0sCisgIHsJLmZyZXEJCQk9IDI0MjcsCisJUkFESU9SRUdTMygweDAwLCAweDAxLCAweDAzLCAweDA5LCAweDdiLCAweDA4LCAweDA4LCAweDA0LAorCQkgICAweDE2LCAweDAxLCAweDA1LCAweDA1LCAweDA1LCAweDhmLCAweDMwLCAweDAwLAorCQkgICAweDAwLCAweDAwLCAweDc4LCAweDAwLCAweDAzLCAweDAwLCAweDcwLCAweDAwLAorCQkgICAweDBlLCAweDAwLCAweDBhLCAweDAwLCAweDc4LCAweDAwLCAweDAzLCAweDAwLAorCQkgICAweDcwLCAweDAwLCAweDBlLCAweDAwLCAweDBhKSwKKwlQSFlSRUdTKDB4MDNjZiwgMHgwM2NiLCAweDAzYzcsIDB4MDQzNCwgMHgwNDM4LCAweDA0M2QpLAorICB9LAorICB7CS5mcmVxCQkJPSAyNDMyLAorCVJBRElPUkVHUzMoMHgwMCwgMHgwMSwgMHgwMywgMHgwOSwgMHg4MCwgMHgwOCwgMHgwOCwgMHgwNCwKKwkJICAgMHgxNiwgMHgwMSwgMHgwNSwgMHgwNSwgMHgwNSwgMHg4ZiwgMHgzMCwgMHgwMCwKKwkJICAgMHgwMCwgMHgwMCwgMHg3NywgMHgwMCwgMHgwMywgMHgwMCwgMHg3MCwgMHgwMCwKKwkJICAgMHgwZSwgMHgwMCwgMHgwYSwgMHgwMCwgMHg3NywgMHgwMCwgMHgwMywgMHgwMCwKKwkJICAgMHg3MCwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwYSksCisJUEhZUkVHUygweDAzZDEsIDB4MDNjZCwgMHgwM2M5LCAweDA0MzEsIDB4MDQzNiwgMHgwNDNhKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gMjQzNywKKwlSQURJT1JFR1MzKDB4MDAsIDB4MDEsIDB4MDMsIDB4MDksIDB4ODUsIDB4MDgsIDB4MDgsIDB4MDQsCisJCSAgIDB4MTYsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDUsIDB4OGYsIDB4MzAsIDB4MDAsCisJCSAgIDB4MDAsIDB4MDAsIDB4NzYsIDB4MDAsIDB4MDMsIDB4MDAsIDB4NzAsIDB4MDAsCisJCSAgIDB4MGUsIDB4MDAsIDB4MGEsIDB4MDAsIDB4NzYsIDB4MDAsIDB4MDMsIDB4MDAsCisJCSAgIDB4NzAsIDB4MDAsIDB4MGUsIDB4MDAsIDB4MGEpLAorCVBIWVJFR1MoMHgwM2QzLCAweDAzY2YsIDB4MDNjYiwgMHgwNDJmLCAweDA0MzQsIDB4MDQzOCksCisgIH0sCisgIHsJLmZyZXEJCQk9IDI0NDIsCisJUkFESU9SRUdTMygweDAwLCAweDAxLCAweDAzLCAweDA5LCAweDhhLCAweDA4LCAweDA4LCAweDA0LAorCQkgICAweDE2LCAweDAxLCAweDA1LCAweDA1LCAweDA1LCAweDhmLCAweDMwLCAweDAwLAorCQkgICAweDAwLCAweDAwLCAweDY2LCAweDAwLCAweDAzLCAweDAwLCAweDcwLCAweDAwLAorCQkgICAweDBlLCAweDAwLCAweDBhLCAweDAwLCAweDY2LCAweDAwLCAweDAzLCAweDAwLAorCQkgICAweDcwLCAweDAwLCAweDBlLCAweDAwLCAweDBhKSwKKwlQSFlSRUdTKDB4MDNkNSwgMHgwM2QxLCAweDAzY2QsIDB4MDQyZCwgMHgwNDMxLCAweDA0MzYpLAorICB9LAorICB7CS5mcmVxCQkJPSAyNDQ3LAorCVJBRElPUkVHUzMoMHgwMCwgMHgwMSwgMHgwMywgMHgwOSwgMHg4ZiwgMHgwOCwgMHgwOCwgMHgwNCwKKwkJICAgMHgxNiwgMHgwMSwgMHgwNiwgMHgwNiwgMHgwNiwgMHg4ZiwgMHgzMCwgMHgwMCwKKwkJICAgMHgwMCwgMHgwMCwgMHg1NSwgMHgwMCwgMHgwMiwgMHgwMCwgMHg3MCwgMHgwMCwKKwkJICAgMHgwZSwgMHgwMCwgMHgwOSwgMHgwMCwgMHg1NSwgMHgwMCwgMHgwMiwgMHgwMCwKKwkJICAgMHg3MCwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwOSksCisJUEhZUkVHUygweDAzZDcsIDB4MDNkMywgMHgwM2NmLCAweDA0MmIsIDB4MDQyZiwgMHgwNDM0KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gMjQ1MiwKKwlSQURJT1JFR1MzKDB4MDAsIDB4MDEsIDB4MDMsIDB4MDksIDB4OTQsIDB4MDgsIDB4MDgsIDB4MDQsCisJCSAgIDB4MTYsIDB4MDEsIDB4MDYsIDB4MDYsIDB4MDYsIDB4OGYsIDB4MzAsIDB4MDAsCisJCSAgIDB4MDAsIDB4MDAsIDB4NDUsIDB4MDAsIDB4MDIsIDB4MDAsIDB4NzAsIDB4MDAsCisJCSAgIDB4MGUsIDB4MDAsIDB4MDksIDB4MDAsIDB4NDUsIDB4MDAsIDB4MDIsIDB4MDAsCisJCSAgIDB4NzAsIDB4MDAsIDB4MGUsIDB4MDAsIDB4MDkpLAorCVBIWVJFR1MoMHgwM2Q5LCAweDAzZDUsIDB4MDNkMSwgMHgwNDI5LCAweDA0MmQsIDB4MDQzMSksCisgIH0sCisgIHsJLmZyZXEJCQk9IDI0NTcsCisJUkFESU9SRUdTMygweDAwLCAweDAxLCAweDAzLCAweDA5LCAweDk5LCAweDA4LCAweDA4LCAweDA0LAorCQkgICAweDE2LCAweDAxLCAweDA2LCAweDA2LCAweDA2LCAweDhmLCAweDMwLCAweDAwLAorCQkgICAweDAwLCAweDAwLCAweDM0LCAweDAwLCAweDAyLCAweDAwLCAweDcwLCAweDAwLAorCQkgICAweDBkLCAweDAwLCAweDA5LCAweDAwLCAweDM0LCAweDAwLCAweDAyLCAweDAwLAorCQkgICAweDcwLCAweDAwLCAweDBkLCAweDAwLCAweDA5KSwKKwlQSFlSRUdTKDB4MDNkYiwgMHgwM2Q3LCAweDAzZDMsIDB4MDQyNywgMHgwNDJiLCAweDA0MmYpLAorICB9LAorICB7CS5mcmVxCQkJPSAyNDYyLAorCVJBRElPUkVHUzMoMHgwMCwgMHgwMSwgMHgwMywgMHgwOSwgMHg5ZSwgMHgwOCwgMHgwOCwgMHgwNCwKKwkJICAgMHgxNiwgMHgwMSwgMHgwNiwgMHgwNiwgMHgwNiwgMHg4ZiwgMHgzMCwgMHgwMCwKKwkJICAgMHgwMCwgMHgwMCwgMHgzMywgMHgwMCwgMHgwMiwgMHgwMCwgMHg3MCwgMHgwMCwKKwkJICAgMHgwZCwgMHgwMCwgMHgwOSwgMHgwMCwgMHgzMywgMHgwMCwgMHgwMiwgMHgwMCwKKwkJICAgMHg3MCwgMHgwMCwgMHgwZCwgMHgwMCwgMHgwOSksCisJUEhZUkVHUygweDAzZGQsIDB4MDNkOSwgMHgwM2Q1LCAweDA0MjQsIDB4MDQyOSwgMHgwNDJkKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gMjQ2NywKKwlSQURJT1JFR1MzKDB4MDAsIDB4MDEsIDB4MDMsIDB4MDksIDB4YTMsIDB4MDgsIDB4MDgsIDB4MDQsCisJCSAgIDB4MTYsIDB4MDEsIDB4MDYsIDB4MDYsIDB4MDYsIDB4OGYsIDB4MzAsIDB4MDAsCisJCSAgIDB4MDAsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MDIsIDB4MDAsIDB4NzAsIDB4MDAsCisJCSAgIDB4MGQsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MDIsIDB4MDAsCisJCSAgIDB4NzAsIDB4MDAsIDB4MGQsIDB4MDAsIDB4MDgpLAorCVBIWVJFR1MoMHgwM2RmLCAweDAzZGIsIDB4MDNkNywgMHgwNDIyLCAweDA0MjcsIDB4MDQyYiksCisgIH0sCisgIHsJLmZyZXEJCQk9IDI0NzIsCisJUkFESU9SRUdTMygweDAwLCAweDAxLCAweDAzLCAweDA5LCAweGE4LCAweDA4LCAweDA4LCAweDA0LAorCQkgICAweDE2LCAweDAxLCAweDA3LCAweDA3LCAweDA3LCAweDhmLCAweDMwLCAweDAwLAorCQkgICAweDAwLCAweDAwLCAweDExLCAweDAwLCAweDAyLCAweDAwLCAweDcwLCAweDAwLAorCQkgICAweDBkLCAweDAwLCAweDA4LCAweDAwLCAweDExLCAweDAwLCAweDAyLCAweDAwLAorCQkgICAweDcwLCAweDAwLCAweDBkLCAweDAwLCAweDA4KSwKKwlQSFlSRUdTKDB4MDNlMSwgMHgwM2RkLCAweDAzZDksIDB4MDQyMCwgMHgwNDI0LCAweDA0MjkpLAorICB9LAorICB7CS5mcmVxCQkJPSAyNDg0LAorCVJBRElPUkVHUzMoMHhmZiwgMHgwMSwgMHgwMywgMHgwOSwgMHhiNCwgMHgwOCwgMHgwOCwgMHgwNCwKKwkJICAgMHgxNiwgMHgwMSwgMHgwNywgMHgwNywgMHgwNywgMHg4ZiwgMHgyMCwgMHgwMCwKKwkJICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHg3MCwgMHgwMCwKKwkJICAgMHgwZCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwKKwkJICAgMHg3MCwgMHgwMCwgMHgwZCwgMHgwMCwgMHgwOCksCisJUEhZUkVHUygweDAzZTYsIDB4MDNlMiwgMHgwM2RlLCAweDA0MWIsIDB4MDQxZiwgMHgwNDI0KSwKKyAgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYjQzX25waHlfY2hhbm5lbHRhYl9lbnRyeV9yZXYzIGI0M19ucGh5X2NoYW5uZWx0YWJfcmV2OFtdID0geworICB7CS5mcmVxCQkJPSA0OTIwLAorCVJBRElPUkVHUzMoMHhmZiwgMHgwMSwgMHgwMSwgMHgwMSwgMHhlYywgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4ZiwgMHgwZiwgMHgwMCwKKwkJICAgMHhmZiwgMHhmZSwgMHgwMCwgMHgwOSwgMHgwMCwgMHg3NywgMHgwMCwgMHgwZiwKKwkJICAgMHgwMCwgMHg2ZiwgMHgwMCwgMHhmZSwgMHgwMCwgMHgwOSwgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwZiwgMHgwMCwgMHg2ZiwgMHgwMCksCisJUEhZUkVHUygweDA3YjQsIDB4MDdiMCwgMHgwN2FjLCAweDAyMTQsIDB4MDIxNSwgMHgwMjE2KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNDkzMCwKKwlSQURJT1JFR1MzKDB4ZmYsIDB4MDEsIDB4MDEsIDB4MDEsIDB4ZWQsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OGYsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZmYsIDB4ZmUsIDB4MDAsIDB4MDksIDB4MDAsIDB4NzcsIDB4MDAsIDB4MGYsCisJCSAgIDB4MDAsIDB4NmYsIDB4MDAsIDB4ZmUsIDB4MDAsIDB4MDksIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MGYsIDB4MDAsIDB4NmYsIDB4MDApLAorCVBIWVJFR1MoMHgwN2I4LCAweDA3YjQsIDB4MDdiMCwgMHgwMjEzLCAweDAyMTQsIDB4MDIxNSksCisgIH0sCisgIHsJLmZyZXEJCQk9IDQ5NDAsCisJUkFESU9SRUdTMygweGZmLCAweDAxLCAweDAxLCAweDAxLCAweGVlLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDhmLCAweDBmLCAweDAwLAorCQkgICAweGZmLCAweGZlLCAweDAwLCAweDA5LCAweDAwLCAweDc3LCAweDAwLCAweDBmLAorCQkgICAweDAwLCAweDZmLCAweDAwLCAweGZlLCAweDAwLCAweDA5LCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDBmLCAweDAwLCAweDZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDdiYywgMHgwN2I4LCAweDA3YjQsIDB4MDIxMiwgMHgwMjEzLCAweDAyMTQpLAorICB9LAorICB7CS5mcmVxCQkJPSA0OTUwLAorCVJBRElPUkVHUzMoMHhmZiwgMHgwMSwgMHgwMSwgMHgwMSwgMHhlZiwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4ZiwgMHgwZiwgMHgwMCwKKwkJICAgMHhmZiwgMHhmZSwgMHgwMCwgMHgwOSwgMHgwMCwgMHg3NywgMHgwMCwgMHgwZiwKKwkJICAgMHgwMCwgMHg2ZiwgMHgwMCwgMHhmZSwgMHgwMCwgMHgwOSwgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwZiwgMHgwMCwgMHg2ZiwgMHgwMCksCisJUEhZUkVHUygweDA3YzAsIDB4MDdiYywgMHgwN2I4LCAweDAyMTEsIDB4MDIxMiwgMHgwMjEzKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNDk2MCwKKwlSQURJT1JFR1MzKDB4ZmYsIDB4MDEsIDB4MDEsIDB4MDEsIDB4ZjAsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4OGYsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZmYsIDB4ZmUsIDB4MDAsIDB4MDksIDB4MDAsIDB4NzcsIDB4MDAsIDB4MGYsCisJCSAgIDB4MDAsIDB4NmYsIDB4MDAsIDB4ZmUsIDB4MDAsIDB4MDksIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MGYsIDB4MDAsIDB4NmYsIDB4MDApLAorCVBIWVJFR1MoMHgwN2M0LCAweDA3YzAsIDB4MDdiYywgMHgwMjBmLCAweDAyMTEsIDB4MDIxMiksCisgIH0sCisgIHsJLmZyZXEJCQk9IDQ5NzAsCisJUkFESU9SRUdTMygweGZmLCAweDAxLCAweDAxLCAweDAxLCAweGYxLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDhmLCAweDBmLCAweDAwLAorCQkgICAweGZmLCAweGZlLCAweDAwLCAweDA5LCAweDAwLCAweDc3LCAweDAwLCAweDBmLAorCQkgICAweDAwLCAweDZmLCAweDAwLCAweGZlLCAweDAwLCAweDA5LCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDBmLCAweDAwLCAweDZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDdjOCwgMHgwN2M0LCAweDA3YzAsIDB4MDIwZSwgMHgwMjBmLCAweDAyMTEpLAorICB9LAorICB7CS5mcmVxCQkJPSA0OTgwLAorCVJBRElPUkVHUzMoMHhmZiwgMHgwMSwgMHgwMSwgMHgwMSwgMHhmMiwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHg4ZiwgMHgwZiwgMHgwMCwKKwkJICAgMHhmZiwgMHhmZSwgMHgwMCwgMHgwOSwgMHgwMCwgMHg3NywgMHgwMCwgMHgwZiwKKwkJICAgMHgwMCwgMHg2ZiwgMHgwMCwgMHhmZSwgMHgwMCwgMHgwOSwgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwZiwgMHgwMCwgMHg2ZiwgMHgwMCksCisJUEhZUkVHUygweDA3Y2MsIDB4MDdjOCwgMHgwN2M0LCAweDAyMGQsIDB4MDIwZSwgMHgwMjBmKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNDk5MCwKKwlSQURJT1JFR1MzKDB4ZmYsIDB4MDEsIDB4MDEsIDB4MDEsIDB4ZjMsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4OGYsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZmYsIDB4ZmUsIDB4MDAsIDB4MDksIDB4MDAsIDB4NzcsIDB4MDAsIDB4MGYsCisJCSAgIDB4MDAsIDB4NmYsIDB4MDAsIDB4ZmUsIDB4MDAsIDB4MDksIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MGYsIDB4MDAsIDB4NmYsIDB4MDApLAorCVBIWVJFR1MoMHgwN2QwLCAweDA3Y2MsIDB4MDdjOCwgMHgwMjBjLCAweDAyMGQsIDB4MDIwZSksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUwMDAsCisJUkFESU9SRUdTMygweGZmLCAweDAxLCAweDAxLCAweDAxLCAweGY0LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDhmLCAweDBmLCAweDAwLAorCQkgICAweGZmLCAweGZlLCAweDAwLCAweDA5LCAweDAwLCAweDc3LCAweDAwLCAweDBmLAorCQkgICAweDAwLCAweDZmLCAweDAwLCAweGZlLCAweDAwLCAweDA5LCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDBmLCAweDAwLCAweDZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDdkNCwgMHgwN2QwLCAweDA3Y2MsIDB4MDIwYiwgMHgwMjBjLCAweDAyMGQpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MDEwLAorCVJBRElPUkVHUzMoMHhmZiwgMHgwMSwgMHgwMSwgMHgwMSwgMHhmNSwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHg4ZiwgMHgwZiwgMHgwMCwKKwkJICAgMHhmZiwgMHhmZSwgMHgwMCwgMHgwOSwgMHgwMCwgMHg3NywgMHgwMCwgMHgwZiwKKwkJICAgMHgwMCwgMHg2ZiwgMHgwMCwgMHhmZSwgMHgwMCwgMHgwOSwgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwZiwgMHgwMCwgMHg2ZiwgMHgwMCksCisJUEhZUkVHUygweDA3ZDgsIDB4MDdkNCwgMHgwN2QwLCAweDAyMGEsIDB4MDIwYiwgMHgwMjBjKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTAyMCwKKwlSQURJT1JFR1MzKDB4ZjcsIDB4MDEsIDB4MDEsIDB4MDEsIDB4ZjYsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4OGYsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZmYsIDB4ZmUsIDB4MDAsIDB4MDksIDB4MDAsIDB4NzcsIDB4MDAsIDB4MGYsCisJCSAgIDB4MDAsIDB4NmYsIDB4MDAsIDB4ZmUsIDB4MDAsIDB4MDksIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MGYsIDB4MDAsIDB4NmYsIDB4MDApLAorCVBIWVJFR1MoMHgwN2RjLCAweDA3ZDgsIDB4MDdkNCwgMHgwMjA5LCAweDAyMGEsIDB4MDIwYiksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUwMzAsCisJUkFESU9SRUdTMygweGY3LCAweDAxLCAweDAxLCAweDAxLCAweGY3LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDhmLCAweDBmLCAweDAwLAorCQkgICAweGZmLCAweGZlLCAweDAwLCAweDA5LCAweDAwLCAweDc3LCAweDAwLCAweDBmLAorCQkgICAweDAwLCAweDZmLCAweDAwLCAweGZlLCAweDAwLCAweDA5LCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDBmLCAweDAwLCAweDZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDdlMCwgMHgwN2RjLCAweDA3ZDgsIDB4MDIwOCwgMHgwMjA5LCAweDAyMGEpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MDQwLAorCVJBRElPUkVHUzMoMHhlZiwgMHgwMSwgMHgwMSwgMHgwMSwgMHhmOCwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHg4ZiwgMHgwZiwgMHgwMCwKKwkJICAgMHhmZiwgMHhmZSwgMHgwMCwgMHgwOSwgMHgwMCwgMHg3NywgMHgwMCwgMHgwZiwKKwkJICAgMHgwMCwgMHg2ZiwgMHgwMCwgMHhmZSwgMHgwMCwgMHgwOSwgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwZiwgMHgwMCwgMHg2ZiwgMHgwMCksCisJUEhZUkVHUygweDA3ZTQsIDB4MDdlMCwgMHgwN2RjLCAweDAyMDcsIDB4MDIwOCwgMHgwMjA5KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTA1MCwKKwlSQURJT1JFR1MzKDB4ZWYsIDB4MDEsIDB4MDEsIDB4MDEsIDB4ZjksIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4OGYsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZmYsIDB4ZmUsIDB4MDAsIDB4MDksIDB4MDAsIDB4NzcsIDB4MDAsIDB4MGYsCisJCSAgIDB4MDAsIDB4NmYsIDB4MDAsIDB4ZmUsIDB4MDAsIDB4MDksIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MGYsIDB4MDAsIDB4NmYsIDB4MDApLAorCVBIWVJFR1MoMHgwN2U4LCAweDA3ZTQsIDB4MDdlMCwgMHgwMjA2LCAweDAyMDcsIDB4MDIwOCksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUwNjAsCisJUkFESU9SRUdTMygweGU2LCAweDAxLCAweDAxLCAweDAxLCAweGZhLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDhmLCAweDBmLCAweDAwLAorCQkgICAweGZmLCAweGZlLCAweDAwLCAweDA5LCAweDAwLCAweDc3LCAweDAwLCAweDBmLAorCQkgICAweDAwLCAweDZmLCAweDAwLCAweGZlLCAweDAwLCAweDA5LCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDBmLCAweDAwLCAweDZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDdlYywgMHgwN2U4LCAweDA3ZTQsIDB4MDIwNSwgMHgwMjA2LCAweDAyMDcpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MDcwLAorCVJBRElPUkVHUzMoMHhlNiwgMHgwMSwgMHgwMSwgMHgwMSwgMHhmYiwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHg4ZiwgMHgwZiwgMHgwMCwKKwkJICAgMHhmZiwgMHhmZCwgMHgwMCwgMHgwOSwgMHgwMCwgMHg3NywgMHgwMCwgMHgwZiwKKwkJICAgMHgwMCwgMHg2ZiwgMHgwMCwgMHhmZCwgMHgwMCwgMHgwOSwgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwZiwgMHgwMCwgMHg2ZiwgMHgwMCksCisJUEhZUkVHUygweDA3ZjAsIDB4MDdlYywgMHgwN2U4LCAweDAyMDQsIDB4MDIwNSwgMHgwMjA2KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTA4MCwKKwlSQURJT1JFR1MzKDB4ZGUsIDB4MDEsIDB4MDEsIDB4MDEsIDB4ZmMsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4OGYsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZmYsIDB4ZmQsIDB4MDAsIDB4MDksIDB4MDAsIDB4NzcsIDB4MDAsIDB4MGYsCisJCSAgIDB4MDAsIDB4NmYsIDB4MDAsIDB4ZmQsIDB4MDAsIDB4MDksIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MGYsIDB4MDAsIDB4NmYsIDB4MDApLAorCVBIWVJFR1MoMHgwN2Y0LCAweDA3ZjAsIDB4MDdlYywgMHgwMjAzLCAweDAyMDQsIDB4MDIwNSksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUwOTAsCisJUkFESU9SRUdTMygweGRlLCAweDAxLCAweDAxLCAweDAxLCAweGZkLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDhmLCAweDBmLCAweDAwLAorCQkgICAweGZmLCAweGZkLCAweDAwLCAweDA5LCAweDAwLCAweDc3LCAweDAwLCAweDBmLAorCQkgICAweDAwLCAweDZmLCAweDAwLCAweGZkLCAweDAwLCAweDA5LCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDBmLCAweDAwLCAweDZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDdmOCwgMHgwN2Y0LCAweDA3ZjAsIDB4MDIwMiwgMHgwMjAzLCAweDAyMDQpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MTAwLAorCVJBRElPUkVHUzMoMHhkNiwgMHgwMSwgMHgwMSwgMHgwMSwgMHhmZSwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMiwgMHgwMiwgMHgwMiwgMHg4ZiwgMHgwZiwgMHgwMCwKKwkJICAgMHhmZiwgMHhmZCwgMHgwMCwgMHgwOCwgMHgwMCwgMHg3NywgMHgwMCwgMHgwZiwKKwkJICAgMHgwMCwgMHg2ZiwgMHgwMCwgMHhmZCwgMHgwMCwgMHgwOCwgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwZiwgMHgwMCwgMHg2ZiwgMHgwMCksCisJUEhZUkVHUygweDA3ZmMsIDB4MDdmOCwgMHgwN2Y0LCAweDAyMDEsIDB4MDIwMiwgMHgwMjAzKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTExMCwKKwlSQURJT1JFR1MzKDB4ZDYsIDB4MDEsIDB4MDEsIDB4MDEsIDB4ZmYsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDIsIDB4MDIsIDB4MDIsIDB4OGYsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZmYsIDB4ZmMsIDB4MDAsIDB4MDgsIDB4MDAsIDB4NzcsIDB4MDAsIDB4MGYsCisJCSAgIDB4MDAsIDB4NmYsIDB4MDAsIDB4ZmMsIDB4MDAsIDB4MDgsIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MGYsIDB4MDAsIDB4NmYsIDB4MDApLAorCVBIWVJFR1MoMHgwODAwLCAweDA3ZmMsIDB4MDdmOCwgMHgwMjAwLCAweDAyMDEsIDB4MDIwMiksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUxMjAsCisJUkFESU9SRUdTMygweGNlLCAweDAxLCAweDAxLCAweDAyLCAweDAwLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAyLCAweDAyLCAweDAyLCAweDhmLCAweDBmLCAweDAwLAorCQkgICAweGZmLCAweGZjLCAweDAwLCAweDA4LCAweDAwLCAweDc3LCAweDAwLCAweDBmLAorCQkgICAweDAwLCAweDZmLCAweDAwLCAweGZjLCAweDAwLCAweDA4LCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDBmLCAweDAwLCAweDZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDgwNCwgMHgwODAwLCAweDA3ZmMsIDB4MDFmZiwgMHgwMjAwLCAweDAyMDEpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MTMwLAorCVJBRElPUkVHUzMoMHhjZSwgMHgwMSwgMHgwMSwgMHgwMiwgMHgwMSwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMiwgMHgwMiwgMHgwMiwgMHg4ZiwgMHgwZiwgMHgwMCwKKwkJICAgMHhmZiwgMHhmYywgMHgwMCwgMHgwOCwgMHgwMCwgMHg3NywgMHgwMCwgMHgwZiwKKwkJICAgMHgwMCwgMHg2ZiwgMHgwMCwgMHhmYywgMHgwMCwgMHgwOCwgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwZiwgMHgwMCwgMHg2ZiwgMHgwMCksCisJUEhZUkVHUygweDA4MDgsIDB4MDgwNCwgMHgwODAwLCAweDAxZmUsIDB4MDFmZiwgMHgwMjAwKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTE0MCwKKwlSQURJT1JFR1MzKDB4YzYsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MDIsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDIsIDB4MDIsIDB4MDIsIDB4OGYsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZmYsIDB4ZmIsIDB4MDAsIDB4MDgsIDB4MDAsIDB4NzcsIDB4MDAsIDB4MGYsCisJCSAgIDB4MDAsIDB4NmYsIDB4MDAsIDB4ZmIsIDB4MDAsIDB4MDgsIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MGYsIDB4MDAsIDB4NmYsIDB4MDApLAorCVBIWVJFR1MoMHgwODBjLCAweDA4MDgsIDB4MDgwNCwgMHgwMWZkLCAweDAxZmUsIDB4MDFmZiksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUxNjAsCisJUkFESU9SRUdTMygweGJlLCAweDAxLCAweDAxLCAweDAyLCAweDA0LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAyLCAweDAyLCAweDAyLCAweDhmLCAweDBmLCAweDAwLAorCQkgICAweGZmLCAweGZhLCAweDAwLCAweDA3LCAweDAwLCAweDc3LCAweDAwLCAweDBlLAorCQkgICAweDAwLCAweDZmLCAweDAwLCAweGZhLCAweDAwLCAweDA3LCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDBlLCAweDAwLCAweDZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDgxNCwgMHgwODEwLCAweDA4MGMsIDB4MDFmYiwgMHgwMWZjLCAweDAxZmQpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MTcwLAorCVJBRElPUkVHUzMoMHhiZSwgMHgwMSwgMHgwMSwgMHgwMiwgMHgwNSwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMiwgMHgwMiwgMHgwMiwgMHg4ZiwgMHgwZiwgMHgwMCwKKwkJICAgMHhmZiwgMHhmYSwgMHgwMCwgMHgwNywgMHgwMCwgMHg3NywgMHgwMCwgMHgwZSwKKwkJICAgMHgwMCwgMHg2ZiwgMHgwMCwgMHhmYSwgMHgwMCwgMHgwNywgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwZSwgMHgwMCwgMHg2ZiwgMHgwMCksCisJUEhZUkVHUygweDA4MTgsIDB4MDgxNCwgMHgwODEwLCAweDAxZmEsIDB4MDFmYiwgMHgwMWZjKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTE4MCwKKwlSQURJT1JFR1MzKDB4YjYsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MDYsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDIsIDB4MDIsIDB4MDIsIDB4OGYsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZmYsIDB4ZjksIDB4MDAsIDB4MDYsIDB4MDAsIDB4NzcsIDB4MDAsIDB4MGUsCisJCSAgIDB4MDAsIDB4NmYsIDB4MDAsIDB4ZjksIDB4MDAsIDB4MDYsIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MGUsIDB4MDAsIDB4NmYsIDB4MDApLAorCVBIWVJFR1MoMHgwODFjLCAweDA4MTgsIDB4MDgxNCwgMHgwMWY5LCAweDAxZmEsIDB4MDFmYiksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUxOTAsCisJUkFESU9SRUdTMygweGI2LCAweDAxLCAweDAxLCAweDAyLCAweDA3LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAyLCAweDAyLCAweDAyLCAweDhmLCAweDBmLCAweDAwLAorCQkgICAweGZmLCAweGY5LCAweDAwLCAweDA2LCAweDAwLCAweDc3LCAweDAwLCAweDBkLAorCQkgICAweDAwLCAweDZmLCAweDAwLCAweGY5LCAweDAwLCAweDA2LCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDBkLCAweDAwLCAweDZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDgyMCwgMHgwODFjLCAweDA4MTgsIDB4MDFmOCwgMHgwMWY5LCAweDAxZmEpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MjAwLAorCVJBRElPUkVHUzMoMHhhZiwgMHgwMSwgMHgwMSwgMHgwMiwgMHgwOCwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMiwgMHgwMiwgMHgwMiwgMHg4ZiwgMHgwZiwgMHgwMCwKKwkJICAgMHhmZiwgMHhmOSwgMHgwMCwgMHgwNSwgMHgwMCwgMHg3NywgMHgwMCwgMHgwZCwKKwkJICAgMHgwMCwgMHg2ZiwgMHgwMCwgMHhmOSwgMHgwMCwgMHgwNSwgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwZCwgMHgwMCwgMHg2ZiwgMHgwMCksCisJUEhZUkVHUygweDA4MjQsIDB4MDgyMCwgMHgwODFjLCAweDAxZjcsIDB4MDFmOCwgMHgwMWY5KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTIxMCwKKwlSQURJT1JFR1MzKDB4YWYsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MDksIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDIsIDB4MDIsIDB4MDIsIDB4OGYsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZmYsIDB4ZjksIDB4MDAsIDB4MDUsIDB4MDAsIDB4NzcsIDB4MDAsIDB4MGQsCisJCSAgIDB4MDAsIDB4NmYsIDB4MDAsIDB4ZjksIDB4MDAsIDB4MDUsIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MGQsIDB4MDAsIDB4NmYsIDB4MDApLAorCVBIWVJFR1MoMHgwODI4LCAweDA4MjQsIDB4MDgyMCwgMHgwMWY2LCAweDAxZjcsIDB4MDFmOCksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUyMjAsCisJUkFESU9SRUdTMygweGE3LCAweDAxLCAweDAxLCAweDAyLCAweDBhLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAyLCAweDAyLCAweDAyLCAweDhlLCAweDBmLCAweDAwLAorCQkgICAweGZlLCAweGQ4LCAweDAwLCAweDA1LCAweDAwLCAweDc3LCAweDAwLCAweDBkLAorCQkgICAweDAwLCAweDZmLCAweDAwLCAweGQ4LCAweDAwLCAweDA1LCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDBkLCAweDAwLCAweDZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDgyYywgMHgwODI4LCAweDA4MjQsIDB4MDFmNSwgMHgwMWY2LCAweDAxZjcpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MjMwLAorCVJBRElPUkVHUzMoMHhhNywgMHgwMSwgMHgwMSwgMHgwMiwgMHgwYiwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMiwgMHgwMiwgMHgwMiwgMHg4ZSwgMHgwZiwgMHgwMCwKKwkJICAgMHhlZSwgMHhkOCwgMHgwMCwgMHgwNSwgMHgwMCwgMHg3NywgMHgwMCwgMHgwZCwKKwkJICAgMHgwMCwgMHg2ZiwgMHgwMCwgMHhkOCwgMHgwMCwgMHgwNSwgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwZCwgMHgwMCwgMHg2ZiwgMHgwMCksCisJUEhZUkVHUygweDA4MzAsIDB4MDgyYywgMHgwODI4LCAweDAxZjQsIDB4MDFmNSwgMHgwMWY2KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTI0MCwKKwlSQURJT1JFR1MzKDB4YTAsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MGMsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDIsIDB4MDIsIDB4MDIsIDB4OGUsIDB4MGYsIDB4MDAsCisJCSAgIDB4ZWUsIDB4YzgsIDB4MDAsIDB4MDUsIDB4MDAsIDB4NzcsIDB4MDAsIDB4MGQsCisJCSAgIDB4MDAsIDB4NmYsIDB4MDAsIDB4YzgsIDB4MDAsIDB4MDUsIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MGQsIDB4MDAsIDB4NmYsIDB4MDApLAorCVBIWVJFR1MoMHgwODM0LCAweDA4MzAsIDB4MDgyYywgMHgwMWYzLCAweDAxZjQsIDB4MDFmNSksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUyNTAsCisJUkFESU9SRUdTMygweGEwLCAweDAxLCAweDAxLCAweDAyLCAweDBkLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAyLCAweDAyLCAweDAyLCAweDhlLCAweDBmLCAweDAwLAorCQkgICAweGVkLCAweGM3LCAweDAwLCAweDA1LCAweDAwLCAweDc3LCAweDAwLCAweDBkLAorCQkgICAweDAwLCAweDZmLCAweDAwLCAweGM3LCAweDAwLCAweDA1LCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDBkLCAweDAwLCAweDZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDgzOCwgMHgwODM0LCAweDA4MzAsIDB4MDFmMiwgMHgwMWYzLCAweDAxZjQpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MjYwLAorCVJBRElPUkVHUzMoMHg5OCwgMHgwMSwgMHgwMSwgMHgwMiwgMHgwZSwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMiwgMHgwMiwgMHgwMiwgMHg4ZSwgMHgwZSwgMHgwMCwKKwkJICAgMHhlZCwgMHhjNywgMHgwMCwgMHgwNCwgMHgwMCwgMHg3NywgMHgwMCwgMHgwZCwKKwkJICAgMHgwMCwgMHg2ZiwgMHgwMCwgMHhjNywgMHgwMCwgMHgwNCwgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwZCwgMHgwMCwgMHg2ZiwgMHgwMCksCisJUEhZUkVHUygweDA4M2MsIDB4MDgzOCwgMHgwODM0LCAweDAxZjEsIDB4MDFmMiwgMHgwMWYzKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTI3MCwKKwlSQURJT1JFR1MzKDB4OTgsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MGYsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDMsIDB4MDMsIDB4MDMsIDB4OGUsIDB4MGUsIDB4MDAsCisJCSAgIDB4ZWQsIDB4YzcsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NzcsIDB4MDAsIDB4MGMsCisJCSAgIDB4MDAsIDB4NmYsIDB4MDAsIDB4YzcsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MGMsIDB4MDAsIDB4NmYsIDB4MDApLAorCVBIWVJFR1MoMHgwODQwLCAweDA4M2MsIDB4MDgzOCwgMHgwMWYwLCAweDAxZjEsIDB4MDFmMiksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUyODAsCisJUkFESU9SRUdTMygweDkxLCAweDAxLCAweDAxLCAweDAyLCAweDEwLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAzLCAweDAzLCAweDAzLCAweDhkLCAweDBlLCAweDAwLAorCQkgICAweGRjLCAweGI3LCAweDAwLCAweDAzLCAweDAwLCAweDc3LCAweDAwLCAweDBjLAorCQkgICAweDAwLCAweDZmLCAweDAwLCAweGI3LCAweDAwLCAweDAzLCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDBjLCAweDAwLCAweDZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDg0NCwgMHgwODQwLCAweDA4M2MsIDB4MDFmMCwgMHgwMWYwLCAweDAxZjEpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MjkwLAorCVJBRElPUkVHUzMoMHg5MSwgMHgwMSwgMHgwMSwgMHgwMiwgMHgxMSwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMywgMHgwMywgMHgwMywgMHg4ZCwgMHgwZSwgMHgwMCwKKwkJICAgMHhkYywgMHhiNywgMHgwMCwgMHgwMywgMHgwMCwgMHg3NywgMHgwMCwgMHgwYywKKwkJICAgMHgwMCwgMHg2ZiwgMHgwMCwgMHhiNywgMHgwMCwgMHgwMywgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwYywgMHgwMCwgMHg2ZiwgMHgwMCksCisJUEhZUkVHUygweDA4NDgsIDB4MDg0NCwgMHgwODQwLCAweDAxZWYsIDB4MDFmMCwgMHgwMWYwKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTMwMCwKKwlSQURJT1JFR1MzKDB4OGEsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MTIsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDMsIDB4MDMsIDB4MDMsIDB4OGQsIDB4MGUsIDB4MDAsCisJCSAgIDB4ZGMsIDB4YjcsIDB4MDAsIDB4MDMsIDB4MDAsIDB4NzcsIDB4MDAsIDB4MGMsCisJCSAgIDB4MDAsIDB4NmYsIDB4MDAsIDB4YjcsIDB4MDAsIDB4MDMsIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MGMsIDB4MDAsIDB4NmYsIDB4MDApLAorCVBIWVJFR1MoMHgwODRjLCAweDA4NDgsIDB4MDg0NCwgMHgwMWVlLCAweDAxZWYsIDB4MDFmMCksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUzMTAsCisJUkFESU9SRUdTMygweDhhLCAweDAxLCAweDAxLCAweDAyLCAweDEzLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAzLCAweDAzLCAweDAzLCAweDhkLCAweDBlLCAweDAwLAorCQkgICAweGRjLCAweGI3LCAweDAwLCAweDAzLCAweDAwLCAweDc3LCAweDAwLCAweDBjLAorCQkgICAweDAwLCAweDZmLCAweDAwLCAweGI3LCAweDAwLCAweDAzLCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDBjLCAweDAwLCAweDZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDg1MCwgMHgwODRjLCAweDA4NDgsIDB4MDFlZCwgMHgwMWVlLCAweDAxZWYpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MzIwLAorCVJBRElPUkVHUzMoMHg4MywgMHgwMSwgMHgwMSwgMHgwMiwgMHgxNCwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMywgMHgwMywgMHgwMywgMHg4ZCwgMHgwZSwgMHgwMCwKKwkJICAgMHhkYiwgMHhiNywgMHgwMCwgMHgwMywgMHgwMCwgMHg3NywgMHgwMCwgMHgwYywKKwkJICAgMHgwMCwgMHg2ZiwgMHgwMCwgMHhiNywgMHgwMCwgMHgwMywgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwYywgMHgwMCwgMHg2ZiwgMHgwMCksCisJUEhZUkVHUygweDA4NTQsIDB4MDg1MCwgMHgwODRjLCAweDAxZWMsIDB4MDFlZCwgMHgwMWVlKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTMzMCwKKwlSQURJT1JFR1MzKDB4ODMsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MTUsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDMsIDB4MDMsIDB4MDMsIDB4OGQsIDB4MGQsIDB4MDAsCisJCSAgIDB4Y2IsIDB4YTYsIDB4MDAsIDB4MDMsIDB4MDAsIDB4NzcsIDB4MDAsIDB4MGIsCisJCSAgIDB4MDAsIDB4NmYsIDB4MDAsIDB4YTYsIDB4MDAsIDB4MDMsIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MGIsIDB4MDAsIDB4NmYsIDB4MDApLAorCVBIWVJFR1MoMHgwODU4LCAweDA4NTQsIDB4MDg1MCwgMHgwMWViLCAweDAxZWMsIDB4MDFlZCksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUzNDAsCisJUkFESU9SRUdTMygweDdjLCAweDAxLCAweDAxLCAweDAyLCAweDE2LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAzLCAweDAzLCAweDAzLCAweDhkLCAweDBkLCAweDAwLAorCQkgICAweGNhLCAweGE2LCAweDAwLCAweDAzLCAweDAwLCAweDc3LCAweDAwLCAweDBiLAorCQkgICAweDAwLCAweDZmLCAweDAwLCAweGE2LCAweDAwLCAweDAzLCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDBiLCAweDAwLCAweDZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDg1YywgMHgwODU4LCAweDA4NTQsIDB4MDFlYSwgMHgwMWViLCAweDAxZWMpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MzUwLAorCVJBRElPUkVHUzMoMHg3YywgMHgwMSwgMHgwMSwgMHgwMiwgMHgxNywgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMywgMHgwMywgMHgwMywgMHg4YywgMHgwZCwgMHgwMCwKKwkJICAgMHhjYSwgMHhhNiwgMHgwMCwgMHgwMywgMHgwMCwgMHg3NywgMHgwMCwgMHgwYiwKKwkJICAgMHgwMCwgMHg2ZiwgMHgwMCwgMHhhNiwgMHgwMCwgMHgwMywgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwYiwgMHgwMCwgMHg2ZiwgMHgwMCksCisJUEhZUkVHUygweDA4NjAsIDB4MDg1YywgMHgwODU4LCAweDAxZTksIDB4MDFlYSwgMHgwMWViKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTM2MCwKKwlSQURJT1JFR1MzKDB4NzUsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MTgsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDMsIDB4MDMsIDB4MDMsIDB4OGMsIDB4MGQsIDB4MDAsCisJCSAgIDB4YzksIDB4OTUsIDB4MDAsIDB4MDMsIDB4MDAsIDB4NzcsIDB4MDAsIDB4MGEsCisJCSAgIDB4MDAsIDB4NmYsIDB4MDAsIDB4OTUsIDB4MDAsIDB4MDMsIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MGEsIDB4MDAsIDB4NmYsIDB4MDApLAorCVBIWVJFR1MoMHgwODY0LCAweDA4NjAsIDB4MDg1YywgMHgwMWU4LCAweDAxZTksIDB4MDFlYSksCisgIH0sCisgIHsJLmZyZXEJCQk9IDUzNzAsCisJUkFESU9SRUdTMygweDc1LCAweDAxLCAweDAxLCAweDAyLCAweDE5LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAzLCAweDAzLCAweDAzLCAweDhjLCAweDBkLCAweDAwLAorCQkgICAweGM5LCAweDk1LCAweDAwLCAweDAzLCAweDAwLCAweDc3LCAweDAwLCAweDBhLAorCQkgICAweDAwLCAweDZmLCAweDAwLCAweDk1LCAweDAwLCAweDAzLCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDBhLCAweDAwLCAweDZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDg2OCwgMHgwODY0LCAweDA4NjAsIDB4MDFlNywgMHgwMWU4LCAweDAxZTkpLAorICB9LAorICB7CS5mcmVxCQkJPSA1MzgwLAorCVJBRElPUkVHUzMoMHg2ZSwgMHgwMSwgMHgwMSwgMHgwMiwgMHgxYSwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMywgMHgwMywgMHgwMywgMHg4YywgMHgwYywgMHgwMCwKKwkJICAgMHhiOCwgMHg5NSwgMHgwMCwgMHgwMywgMHgwMCwgMHg3NywgMHgwMCwgMHgwYSwKKwkJICAgMHgwMCwgMHg2ZiwgMHgwMCwgMHg5NSwgMHgwMCwgMHgwMywgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwYSwgMHgwMCwgMHg2ZiwgMHgwMCksCisJUEhZUkVHUygweDA4NmMsIDB4MDg2OCwgMHgwODY0LCAweDAxZTYsIDB4MDFlNywgMHgwMWU4KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTM5MCwKKwlSQURJT1JFR1MzKDB4NmUsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MWIsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDMsIDB4MDMsIDB4MDMsIDB4OGMsIDB4MGMsIDB4MDAsCisJCSAgIDB4YjgsIDB4ODQsIDB4MDAsIDB4MDMsIDB4MDAsIDB4NzcsIDB4MDAsIDB4MGEsCisJCSAgIDB4MDAsIDB4NmYsIDB4MDAsIDB4ODQsIDB4MDAsIDB4MDMsIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MGEsIDB4MDAsIDB4NmYsIDB4MDApLAorCVBIWVJFR1MoMHgwODcwLCAweDA4NmMsIDB4MDg2OCwgMHgwMWU1LCAweDAxZTYsIDB4MDFlNyksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU0MDAsCisJUkFESU9SRUdTMygweDY3LCAweDAxLCAweDAxLCAweDAyLCAweDFjLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAzLCAweDAzLCAweDAzLCAweDhjLCAweDBjLCAweDAwLAorCQkgICAweGI4LCAweDg0LCAweDAwLCAweDAzLCAweDAwLCAweDc3LCAweDAwLCAweDBhLAorCQkgICAweDAwLCAweDZmLCAweDAwLCAweDg0LCAweDAwLCAweDAzLCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDBhLCAweDAwLCAweDZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDg3NCwgMHgwODcwLCAweDA4NmMsIDB4MDFlNSwgMHgwMWU1LCAweDAxZTYpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NDEwLAorCVJBRElPUkVHUzMoMHg2NywgMHgwMSwgMHgwMSwgMHgwMiwgMHgxZCwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwMywgMHgwMywgMHgwMywgMHg4YywgMHgwYywgMHgwMCwKKwkJICAgMHhiNywgMHg4NCwgMHgwMCwgMHgwMiwgMHgwMCwgMHg3NywgMHgwMCwgMHgwYSwKKwkJICAgMHgwMCwgMHg2ZiwgMHgwMCwgMHg4NCwgMHgwMCwgMHgwMiwgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwYSwgMHgwMCwgMHg2ZiwgMHgwMCksCisJUEhZUkVHUygweDA4NzgsIDB4MDg3NCwgMHgwODcwLCAweDAxZTQsIDB4MDFlNSwgMHgwMWU1KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTQyMCwKKwlSQURJT1JFR1MzKDB4NjEsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MWUsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDMsIDB4MDMsIDB4MDMsIDB4OGMsIDB4MGMsIDB4MDAsCisJCSAgIDB4YTcsIDB4ODQsIDB4MDAsIDB4MDIsIDB4MDAsIDB4NzcsIDB4MDAsIDB4MGEsCisJCSAgIDB4MDAsIDB4NmYsIDB4MDAsIDB4ODQsIDB4MDAsIDB4MDIsIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MGEsIDB4MDAsIDB4NmYsIDB4MDApLAorCVBIWVJFR1MoMHgwODdjLCAweDA4NzgsIDB4MDg3NCwgMHgwMWUzLCAweDAxZTQsIDB4MDFlNSksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU0MzAsCisJUkFESU9SRUdTMygweDYxLCAweDAxLCAweDAxLCAweDAyLCAweDFmLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDAzLCAweDAzLCAweDAzLCAweDhjLCAweDBiLCAweDAwLAorCQkgICAweGE2LCAweDg0LCAweDAwLCAweDAyLCAweDAwLCAweDc3LCAweDAwLCAweDBhLAorCQkgICAweDAwLCAweDZmLCAweDAwLCAweDg0LCAweDAwLCAweDAyLCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDBhLCAweDAwLCAweDZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDg4MCwgMHgwODdjLCAweDA4NzgsIDB4MDFlMiwgMHgwMWUzLCAweDAxZTQpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NDQwLAorCVJBRElPUkVHUzMoMHg1YSwgMHgwMSwgMHgwMSwgMHgwMiwgMHgyMCwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNCwgMHgwNCwgMHgwNCwgMHg4YiwgMHgwYiwgMHgwMCwKKwkJICAgMHhhNiwgMHg4NCwgMHgwMCwgMHgwMiwgMHgwMCwgMHg3NywgMHgwMCwgMHgwOSwKKwkJICAgMHgwMCwgMHg2ZiwgMHgwMCwgMHg4NCwgMHgwMCwgMHgwMiwgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwOSwgMHgwMCwgMHg2ZiwgMHgwMCksCisJUEhZUkVHUygweDA4ODQsIDB4MDg4MCwgMHgwODdjLCAweDAxZTEsIDB4MDFlMiwgMHgwMWUzKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTQ1MCwKKwlSQURJT1JFR1MzKDB4NWEsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MjEsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDQsIDB4MDQsIDB4MDQsIDB4OGIsIDB4MGIsIDB4MDAsCisJCSAgIDB4OTUsIDB4ODQsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NzcsIDB4MDAsIDB4MDksCisJCSAgIDB4MDAsIDB4NmYsIDB4MDAsIDB4ODQsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MDksIDB4MDAsIDB4NmYsIDB4MDApLAorCVBIWVJFR1MoMHgwODg4LCAweDA4ODQsIDB4MDg4MCwgMHgwMWUwLCAweDAxZTEsIDB4MDFlMiksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU0NjAsCisJUkFESU9SRUdTMygweDUzLCAweDAxLCAweDAxLCAweDAyLCAweDIyLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA0LCAweDA0LCAweDA0LCAweDhiLCAweDBiLCAweDAwLAorCQkgICAweDk1LCAweDg0LCAweDAwLCAweDAxLCAweDAwLCAweDc3LCAweDAwLCAweDA5LAorCQkgICAweDAwLCAweDZmLCAweDAwLCAweDg0LCAweDAwLCAweDAxLCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDA5LCAweDAwLCAweDZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDg4YywgMHgwODg4LCAweDA4ODQsIDB4MDFkZiwgMHgwMWUwLCAweDAxZTEpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NDcwLAorCVJBRElPUkVHUzMoMHg1MywgMHgwMSwgMHgwMSwgMHgwMiwgMHgyMywgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNCwgMHgwNCwgMHgwNCwgMHg4YiwgMHgwYiwgMHgwMCwKKwkJICAgMHg5NCwgMHg3MywgMHgwMCwgMHgwMSwgMHgwMCwgMHg3NywgMHgwMCwgMHgwOSwKKwkJICAgMHgwMCwgMHg2ZiwgMHgwMCwgMHg3MywgMHgwMCwgMHgwMSwgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwOSwgMHgwMCwgMHg2ZiwgMHgwMCksCisJUEhZUkVHUygweDA4OTAsIDB4MDg4YywgMHgwODg4LCAweDAxZGUsIDB4MDFkZiwgMHgwMWUwKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTQ4MCwKKwlSQURJT1JFR1MzKDB4NGQsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MjQsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDQsIDB4MDQsIDB4MDQsIDB4OGEsIDB4MGEsIDB4MDAsCisJCSAgIDB4ODQsIDB4NzMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4MDAsIDB4MDksCisJCSAgIDB4MDAsIDB4NmYsIDB4MDAsIDB4NzMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MDksIDB4MDAsIDB4NmYsIDB4MDApLAorCVBIWVJFR1MoMHgwODk0LCAweDA4OTAsIDB4MDg4YywgMHgwMWRkLCAweDAxZGUsIDB4MDFkZiksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU0OTAsCisJUkFESU9SRUdTMygweDRkLCAweDAxLCAweDAxLCAweDAyLCAweDI1LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA0LCAweDA0LCAweDA0LCAweDhhLCAweDBhLCAweDAwLAorCQkgICAweDgzLCAweDczLCAweDAwLCAweDAwLCAweDAwLCAweDc3LCAweDAwLCAweDA5LAorCQkgICAweDAwLCAweDZmLCAweDAwLCAweDczLCAweDAwLCAweDAwLCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDA5LCAweDAwLCAweDZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDg5OCwgMHgwODk0LCAweDA4OTAsIDB4MDFkZCwgMHgwMWRkLCAweDAxZGUpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NTAwLAorCVJBRElPUkVHUzMoMHg0NywgMHgwMSwgMHgwMSwgMHgwMiwgMHgyNiwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNCwgMHgwNCwgMHgwNCwgMHg4YSwgMHgwYSwgMHgwMCwKKwkJICAgMHg4MiwgMHg3MywgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywgMHgwMCwgMHgwOSwKKwkJICAgMHgwMCwgMHg2ZiwgMHgwMCwgMHg3MywgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwOSwgMHgwMCwgMHg2ZiwgMHgwMCksCisJUEhZUkVHUygweDA4OWMsIDB4MDg5OCwgMHgwODk0LCAweDAxZGMsIDB4MDFkZCwgMHgwMWRkKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTUxMCwKKwlSQURJT1JFR1MzKDB4NDcsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MjcsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDQsIDB4MDQsIDB4MDQsIDB4OGEsIDB4MGEsIDB4MDAsCisJCSAgIDB4ODIsIDB4NzMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4MDAsIDB4MDksCisJCSAgIDB4MDAsIDB4NmYsIDB4MDAsIDB4NzMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MDksIDB4MDAsIDB4NmYsIDB4MDApLAorCVBIWVJFR1MoMHgwOGEwLCAweDA4OWMsIDB4MDg5OCwgMHgwMWRiLCAweDAxZGMsIDB4MDFkZCksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU1MjAsCisJUkFESU9SRUdTMygweDQwLCAweDAxLCAweDAxLCAweDAyLCAweDI4LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA0LCAweDA0LCAweDA0LCAweDhhLCAweDBhLCAweDAwLAorCQkgICAweDcyLCAweDczLCAweDAwLCAweDAwLCAweDAwLCAweDc3LCAweDAwLCAweDA5LAorCQkgICAweDAwLCAweDZmLCAweDAwLCAweDczLCAweDAwLCAweDAwLCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDA5LCAweDAwLCAweDZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDhhNCwgMHgwOGEwLCAweDA4OWMsIDB4MDFkYSwgMHgwMWRiLCAweDAxZGMpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NTMwLAorCVJBRElPUkVHUzMoMHg0MCwgMHgwMSwgMHgwMSwgMHgwMiwgMHgyOSwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNCwgMHgwNCwgMHgwNCwgMHg4YSwgMHgwOSwgMHgwMCwKKwkJICAgMHg3MiwgMHg3MywgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywgMHgwMCwgMHgwOSwKKwkJICAgMHgwMCwgMHg2ZiwgMHgwMCwgMHg3MywgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwOSwgMHgwMCwgMHg2ZiwgMHgwMCksCisJUEhZUkVHUygweDA4YTgsIDB4MDhhNCwgMHgwOGEwLCAweDAxZDksIDB4MDFkYSwgMHgwMWRiKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTU0MCwKKwlSQURJT1JFR1MzKDB4M2EsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MmEsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDQsIDB4MDQsIDB4MDQsIDB4OGEsIDB4MDksIDB4MDAsCisJCSAgIDB4NzEsIDB4NzMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4MDAsIDB4MDksCisJCSAgIDB4MDAsIDB4NmYsIDB4MDAsIDB4NzMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MDksIDB4MDAsIDB4NmYsIDB4MDApLAorCVBIWVJFR1MoMHgwOGFjLCAweDA4YTgsIDB4MDhhNCwgMHgwMWQ4LCAweDAxZDksIDB4MDFkYSksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU1NTAsCisJUkFESU9SRUdTMygweDNhLCAweDAxLCAweDAxLCAweDAyLCAweDJiLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA0LCAweDA0LCAweDA0LCAweDg5LCAweDA5LCAweDAwLAorCQkgICAweDYxLCAweDczLCAweDAwLCAweDAwLCAweDAwLCAweDc3LCAweDAwLCAweDA5LAorCQkgICAweDAwLCAweDZmLCAweDAwLCAweDczLCAweDAwLCAweDAwLCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDA5LCAweDAwLCAweDZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDhiMCwgMHgwOGFjLCAweDA4YTgsIDB4MDFkNywgMHgwMWQ4LCAweDAxZDkpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NTYwLAorCVJBRElPUkVHUzMoMHgzNCwgMHgwMSwgMHgwMSwgMHgwMiwgMHgyYywgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNCwgMHgwNCwgMHgwNCwgMHg4OSwgMHgwOSwgMHgwMCwKKwkJICAgMHg2MSwgMHg3MywgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywgMHgwMCwgMHgwOSwKKwkJICAgMHgwMCwgMHg2ZiwgMHgwMCwgMHg3MywgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwOSwgMHgwMCwgMHg2ZiwgMHgwMCksCisJUEhZUkVHUygweDA4YjQsIDB4MDhiMCwgMHgwOGFjLCAweDAxZDcsIDB4MDFkNywgMHgwMWQ4KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTU3MCwKKwlSQURJT1JFR1MzKDB4MzQsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MmQsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDQsIDB4MDQsIDB4MDQsIDB4ODksIDB4MDksIDB4MDAsCisJCSAgIDB4NjEsIDB4NjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4MDAsIDB4MDksCisJCSAgIDB4MDAsIDB4NmYsIDB4MDAsIDB4NjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MDksIDB4MDAsIDB4NmYsIDB4MDApLAorCVBIWVJFR1MoMHgwOGI4LCAweDA4YjQsIDB4MDhiMCwgMHgwMWQ2LCAweDAxZDcsIDB4MDFkNyksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU1ODAsCisJUkFESU9SRUdTMygweDJlLCAweDAxLCAweDAxLCAweDAyLCAweDJlLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA0LCAweDA0LCAweDA0LCAweDg5LCAweDA4LCAweDAwLAorCQkgICAweDYwLCAweDYyLCAweDAwLCAweDAwLCAweDAwLCAweDc3LCAweDAwLCAweDA4LAorCQkgICAweDAwLCAweDZmLCAweDAwLCAweDYyLCAweDAwLCAweDAwLCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDA4LCAweDAwLCAweDZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDhiYywgMHgwOGI4LCAweDA4YjQsIDB4MDFkNSwgMHgwMWQ2LCAweDAxZDcpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NTkwLAorCVJBRElPUkVHUzMoMHgyZSwgMHgwMSwgMHgwMSwgMHgwMiwgMHgyZiwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNCwgMHgwNCwgMHgwNCwgMHg4OSwgMHgwOCwgMHgwMCwKKwkJICAgMHg1MCwgMHg2MSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywgMHgwMCwgMHgwOCwKKwkJICAgMHgwMCwgMHg2ZiwgMHgwMCwgMHg2MSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwOCwgMHgwMCwgMHg2ZiwgMHgwMCksCisJUEhZUkVHUygweDA4YzAsIDB4MDhiYywgMHgwOGI4LCAweDAxZDQsIDB4MDFkNSwgMHgwMWQ2KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTYwMCwKKwlSQURJT1JFR1MzKDB4MjgsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MzAsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDUsIDB4ODksIDB4MDgsIDB4MDAsCisJCSAgIDB4NTAsIDB4NTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4MDAsIDB4MDgsCisJCSAgIDB4MDAsIDB4NmYsIDB4MDAsIDB4NTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MDgsIDB4MDAsIDB4NmYsIDB4MDApLAorCVBIWVJFR1MoMHgwOGM0LCAweDA4YzAsIDB4MDhiYywgMHgwMWQzLCAweDAxZDQsIDB4MDFkNSksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU2MTAsCisJUkFESU9SRUdTMygweDI4LCAweDAxLCAweDAxLCAweDAyLCAweDMxLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA1LCAweDA1LCAweDA1LCAweDg5LCAweDA4LCAweDAwLAorCQkgICAweDUwLCAweDUxLCAweDAwLCAweDAwLCAweDAwLCAweDc3LCAweDAwLCAweDA4LAorCQkgICAweDAwLCAweDZmLCAweDAwLCAweDUxLCAweDAwLCAweDAwLCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDA4LCAweDAwLCAweDZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDhjOCwgMHgwOGM0LCAweDA4YzAsIDB4MDFkMiwgMHgwMWQzLCAweDAxZDQpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NjIwLAorCVJBRElPUkVHUzMoMHgyMSwgMHgwMSwgMHgwMSwgMHgwMiwgMHgzMiwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNSwgMHgwNSwgMHgwNSwgMHg4OSwgMHgwOCwgMHgwMCwKKwkJICAgMHg1MCwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywgMHgwMCwgMHgwNywKKwkJICAgMHgwMCwgMHg2ZiwgMHgwMCwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwNywgMHgwMCwgMHg2ZiwgMHgwMCksCisJUEhZUkVHUygweDA4Y2MsIDB4MDhjOCwgMHgwOGM0LCAweDAxZDIsIDB4MDFkMiwgMHgwMWQzKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTYzMCwKKwlSQURJT1JFR1MzKDB4MjEsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MzMsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDUsIDB4ODgsIDB4MDcsIDB4MDAsCisJCSAgIDB4NTAsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4MDAsIDB4MDcsCisJCSAgIDB4MDAsIDB4NmYsIDB4MDAsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MDcsIDB4MDAsIDB4NmYsIDB4MDApLAorCVBIWVJFR1MoMHgwOGQwLCAweDA4Y2MsIDB4MDhjOCwgMHgwMWQxLCAweDAxZDIsIDB4MDFkMiksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU2NDAsCisJUkFESU9SRUdTMygweDFjLCAweDAxLCAweDAxLCAweDAyLCAweDM0LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA1LCAweDA1LCAweDA1LCAweDg4LCAweDA3LCAweDAwLAorCQkgICAweDQwLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LCAweDAwLCAweDA3LAorCQkgICAweDAwLCAweDZmLCAweDAwLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDA3LCAweDAwLCAweDZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDhkNCwgMHgwOGQwLCAweDA4Y2MsIDB4MDFkMCwgMHgwMWQxLCAweDAxZDIpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NjUwLAorCVJBRElPUkVHUzMoMHgxYywgMHgwMSwgMHgwMSwgMHgwMiwgMHgzNSwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNSwgMHgwNSwgMHgwNSwgMHg4OCwgMHgwNywgMHgwMCwKKwkJICAgMHg0MCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywgMHgwMCwgMHgwNywKKwkJICAgMHgwMCwgMHg2ZiwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwNywgMHgwMCwgMHg2ZiwgMHgwMCksCisJUEhZUkVHUygweDA4ZDgsIDB4MDhkNCwgMHgwOGQwLCAweDAxY2YsIDB4MDFkMCwgMHgwMWQxKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTY2MCwKKwlSQURJT1JFR1MzKDB4MTYsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MzYsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDUsIDB4ODgsIDB4MDcsIDB4MDAsCisJCSAgIDB4NDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4MDAsIDB4MDYsCisJCSAgIDB4MDAsIDB4NmYsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MDYsIDB4MDAsIDB4NmYsIDB4MDApLAorCVBIWVJFR1MoMHgwOGRjLCAweDA4ZDgsIDB4MDhkNCwgMHgwMWNlLCAweDAxY2YsIDB4MDFkMCksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU2NzAsCisJUkFESU9SRUdTMygweDE2LCAweDAxLCAweDAxLCAweDAyLCAweDM3LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA1LCAweDA1LCAweDA1LCAweDg4LCAweDA3LCAweDAwLAorCQkgICAweDQwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LCAweDAwLCAweDA2LAorCQkgICAweDAwLCAweDZmLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDA2LCAweDAwLCAweDZmLCAweDAwKSwKKwlQSFlSRUdTKDB4MDhlMCwgMHgwOGRjLCAweDA4ZDgsIDB4MDFjZSwgMHgwMWNlLCAweDAxY2YpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NjgwLAorCVJBRElPUkVHUzMoMHgxMCwgMHgwMSwgMHgwMSwgMHgwMiwgMHgzOCwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNSwgMHgwNSwgMHgwNSwgMHg4NywgMHgwNiwgMHgwMCwKKwkJICAgMHgzMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywgMHgwMCwgMHgwNiwKKwkJICAgMHgwMCwgMHg2ZiwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwNiwgMHgwMCwgMHg2ZiwgMHgwMCksCisJUEhZUkVHUygweDA4ZTQsIDB4MDhlMCwgMHgwOGRjLCAweDAxY2QsIDB4MDFjZSwgMHgwMWNlKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTY5MCwKKwlSQURJT1JFR1MzKDB4MTAsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MzksIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDUsIDB4ODcsIDB4MDYsIDB4MDAsCisJCSAgIDB4MzAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4MDAsIDB4MDYsCisJCSAgIDB4MDAsIDB4NmYsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MDYsIDB4MDAsIDB4NmYsIDB4MDApLAorCVBIWVJFR1MoMHgwOGU4LCAweDA4ZTQsIDB4MDhlMCwgMHgwMWNjLCAweDAxY2QsIDB4MDFjZSksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU3MDAsCisJUkFESU9SRUdTMygweDBhLCAweDAxLCAweDAxLCAweDAyLCAweDNhLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA1LCAweDA1LCAweDA1LCAweDg3LCAweDA2LCAweDAwLAorCQkgICAweDMwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LCAweDAwLCAweDA2LAorCQkgICAweDAwLCAweDZlLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDA2LCAweDAwLCAweDZlLCAweDAwKSwKKwlQSFlSRUdTKDB4MDhlYywgMHgwOGU4LCAweDA4ZTQsIDB4MDFjYiwgMHgwMWNjLCAweDAxY2QpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NzEwLAorCVJBRElPUkVHUzMoMHgwYSwgMHgwMSwgMHgwMSwgMHgwMiwgMHgzYiwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNSwgMHgwNSwgMHgwNSwgMHg4NywgMHgwNiwgMHgwMCwKKwkJICAgMHgzMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywgMHgwMCwgMHgwNiwKKwkJICAgMHgwMCwgMHg2ZSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwNiwgMHgwMCwgMHg2ZSwgMHgwMCksCisJUEhZUkVHUygweDA4ZjAsIDB4MDhlYywgMHgwOGU4LCAweDAxY2EsIDB4MDFjYiwgMHgwMWNjKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTcyMCwKKwlSQURJT1JFR1MzKDB4MGEsIDB4MDEsIDB4MDEsIDB4MDIsIDB4M2MsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDUsIDB4ODcsIDB4MDYsIDB4MDAsCisJCSAgIDB4MzAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4MDAsIDB4MDYsCisJCSAgIDB4MDAsIDB4NmUsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MDYsIDB4MDAsIDB4NmUsIDB4MDApLAorCVBIWVJFR1MoMHgwOGY0LCAweDA4ZjAsIDB4MDhlYywgMHgwMWM5LCAweDAxY2EsIDB4MDFjYiksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU3MjUsCisJUkFESU9SRUdTMygweDAzLCAweDAxLCAweDAyLCAweDA0LCAweDc5LCAweDA3LCAweDA3LCAweDA0LAorCQkgICAweDEwLCAweDAxLCAweDA1LCAweDA1LCAweDA1LCAweDg3LCAweDA2LCAweDAwLAorCQkgICAweDMwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LCAweDAwLCAweDA2LAorCQkgICAweDAwLCAweDZlLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDA2LCAweDAwLCAweDZlLCAweDAwKSwKKwlQSFlSRUdTKDB4MDhmNiwgMHgwOGYyLCAweDA4ZWUsIDB4MDFjOSwgMHgwMWNhLCAweDAxY2IpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NzMwLAorCVJBRElPUkVHUzMoMHgwYSwgMHgwMSwgMHgwMSwgMHgwMiwgMHgzZCwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNSwgMHgwNSwgMHgwNSwgMHg4NywgMHgwNSwgMHgwMCwKKwkJICAgMHgyMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywgMHgwMCwgMHgwNiwKKwkJICAgMHgwMCwgMHg2ZSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwNiwgMHgwMCwgMHg2ZSwgMHgwMCksCisJUEhZUkVHUygweDA4ZjgsIDB4MDhmNCwgMHgwOGYwLCAweDAxYzksIDB4MDFjOSwgMHgwMWNhKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTczNSwKKwlSQURJT1JFR1MzKDB4MDMsIDB4MDEsIDB4MDIsIDB4MDQsIDB4N2IsIDB4MDcsIDB4MDcsIDB4MDQsCisJCSAgIDB4MTAsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDUsIDB4ODcsIDB4MDUsIDB4MDAsCisJCSAgIDB4MjAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4MDAsIDB4MDYsCisJCSAgIDB4MDAsIDB4NmQsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MDYsIDB4MDAsIDB4NmQsIDB4MDApLAorCVBIWVJFR1MoMHgwOGZhLCAweDA4ZjYsIDB4MDhmMiwgMHgwMWM4LCAweDAxYzksIDB4MDFjYSksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU3NDAsCisJUkFESU9SRUdTMygweDBhLCAweDAxLCAweDAxLCAweDAyLCAweDNlLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA1LCAweDA1LCAweDA1LCAweDg3LCAweDA1LCAweDAwLAorCQkgICAweDIwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LCAweDAwLCAweDA2LAorCQkgICAweDAwLCAweDZkLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDA2LCAweDAwLCAweDZkLCAweDAwKSwKKwlQSFlSRUdTKDB4MDhmYywgMHgwOGY4LCAweDA4ZjQsIDB4MDFjOCwgMHgwMWM5LCAweDAxYzkpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NzQ1LAorCVJBRElPUkVHUzMoMHhmZSwgMHgwMCwgMHgwMiwgMHgwNCwgMHg3ZCwgMHgwNywgMHgwNywgMHgwNCwKKwkJICAgMHgxMCwgMHgwMSwgMHgwNSwgMHgwNSwgMHgwNSwgMHg4NywgMHgwNSwgMHgwMCwKKwkJICAgMHgyMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywgMHgwMCwgMHgwNiwKKwkJICAgMHgwMCwgMHg2ZCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwNiwgMHgwMCwgMHg2ZCwgMHgwMCksCisJUEhZUkVHUygweDA4ZmUsIDB4MDhmYSwgMHgwOGY2LCAweDAxYzgsIDB4MDFjOCwgMHgwMWM5KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTc1MCwKKwlSQURJT1JFR1MzKDB4MGEsIDB4MDEsIDB4MDEsIDB4MDIsIDB4M2YsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDUsIDB4ODcsIDB4MDUsIDB4MDAsCisJCSAgIDB4MjAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4MDAsIDB4MDUsCisJCSAgIDB4MDAsIDB4NmQsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MDUsIDB4MDAsIDB4NmQsIDB4MDApLAorCVBIWVJFR1MoMHgwOTAwLCAweDA4ZmMsIDB4MDhmOCwgMHgwMWM3LCAweDAxYzgsIDB4MDFjOSksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU3NTUsCisJUkFESU9SRUdTMygweGZlLCAweDAwLCAweDAyLCAweDA0LCAweDdmLCAweDA3LCAweDA3LCAweDA0LAorCQkgICAweDEwLCAweDAxLCAweDA1LCAweDA1LCAweDA1LCAweDg3LCAweDA1LCAweDAwLAorCQkgICAweDEwLCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LCAweDAwLCAweDA1LAorCQkgICAweDAwLCAweDZjLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDA1LCAweDAwLCAweDZjLCAweDAwKSwKKwlQSFlSRUdTKDB4MDkwMiwgMHgwOGZlLCAweDA4ZmEsIDB4MDFjNywgMHgwMWM4LCAweDAxYzgpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NzYwLAorCVJBRElPUkVHUzMoMHgwYSwgMHgwMSwgMHgwMSwgMHgwMiwgMHg0MCwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNSwgMHgwNSwgMHgwNSwgMHg4NiwgMHgwNSwgMHgwMCwKKwkJICAgMHgxMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywgMHgwMCwgMHgwNSwKKwkJICAgMHgwMCwgMHg2YywgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwNSwgMHgwMCwgMHg2YywgMHgwMCksCisJUEhZUkVHUygweDA5MDQsIDB4MDkwMCwgMHgwOGZjLCAweDAxYzYsIDB4MDFjNywgMHgwMWM4KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTc2NSwKKwlSQURJT1JFR1MzKDB4ZjgsIDB4MDAsIDB4MDIsIDB4MDQsIDB4ODEsIDB4MDcsIDB4MDcsIDB4MDQsCisJCSAgIDB4MTAsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDUsIDB4ODYsIDB4MDUsIDB4MDAsCisJCSAgIDB4MTAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4MDAsIDB4MDUsCisJCSAgIDB4MDAsIDB4NmMsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MDUsIDB4MDAsIDB4NmMsIDB4MDApLAorCVBIWVJFR1MoMHgwOTA2LCAweDA5MDIsIDB4MDhmZSwgMHgwMWM2LCAweDAxYzcsIDB4MDFjOCksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU3NzAsCisJUkFESU9SRUdTMygweDBhLCAweDAxLCAweDAxLCAweDAyLCAweDQxLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA1LCAweDA1LCAweDA1LCAweDg2LCAweDA0LCAweDAwLAorCQkgICAweDEwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LCAweDAwLCAweDA1LAorCQkgICAweDAwLCAweDZiLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDA1LCAweDAwLCAweDZiLCAweDAwKSwKKwlQSFlSRUdTKDB4MDkwOCwgMHgwOTA0LCAweDA5MDAsIDB4MDFjNiwgMHgwMWM2LCAweDAxYzcpLAorICB9LAorICB7CS5mcmVxCQkJPSA1Nzc1LAorCVJBRElPUkVHUzMoMHhmOCwgMHgwMCwgMHgwMiwgMHgwNCwgMHg4MywgMHgwNywgMHgwNywgMHgwNCwKKwkJICAgMHgxMCwgMHgwMSwgMHgwNSwgMHgwNSwgMHgwNSwgMHg4NiwgMHgwNCwgMHgwMCwKKwkJICAgMHgxMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywgMHgwMCwgMHgwNSwKKwkJICAgMHgwMCwgMHg2YiwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwNSwgMHgwMCwgMHg2YiwgMHgwMCksCisJUEhZUkVHUygweDA5MGEsIDB4MDkwNiwgMHgwOTAyLCAweDAxYzUsIDB4MDFjNiwgMHgwMWM3KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTc4MCwKKwlSQURJT1JFR1MzKDB4MGEsIDB4MDEsIDB4MDEsIDB4MDIsIDB4NDIsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDUsIDB4ODYsIDB4MDQsIDB4MDAsCisJCSAgIDB4MTAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4MDAsIDB4MDUsCisJCSAgIDB4MDAsIDB4NmIsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MDUsIDB4MDAsIDB4NmIsIDB4MDApLAorCVBIWVJFR1MoMHgwOTBjLCAweDA5MDgsIDB4MDkwNCwgMHgwMWM1LCAweDAxYzYsIDB4MDFjNiksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU3ODUsCisJUkFESU9SRUdTMygweGYyLCAweDAwLCAweDAyLCAweDA0LCAweDg1LCAweDA3LCAweDA3LCAweDA0LAorCQkgICAweDEwLCAweDAxLCAweDA2LCAweDA2LCAweDA2LCAweDg2LCAweDA0LCAweDAwLAorCQkgICAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LCAweDAwLCAweDA1LAorCQkgICAweDAwLCAweDZiLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDA1LCAweDAwLCAweDZiLCAweDAwKSwKKwlQSFlSRUdTKDB4MDkwZSwgMHgwOTBhLCAweDA5MDYsIDB4MDFjNCwgMHgwMWM1LCAweDAxYzYpLAorICB9LAorICB7CS5mcmVxCQkJPSA1NzkwLAorCVJBRElPUkVHUzMoMHgwYSwgMHgwMSwgMHgwMSwgMHgwMiwgMHg0MywgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNiwgMHgwNiwgMHgwNiwgMHg4NiwgMHgwNCwgMHgwMCwKKwkJICAgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywgMHgwMCwgMHgwNSwKKwkJICAgMHgwMCwgMHg2YiwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwNSwgMHgwMCwgMHg2YiwgMHgwMCksCisJUEhZUkVHUygweDA5MTAsIDB4MDkwYywgMHgwOTA4LCAweDAxYzQsIDB4MDFjNSwgMHgwMWM2KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTc5NSwKKwlSQURJT1JFR1MzKDB4ZjIsIDB4MDAsIDB4MDIsIDB4MDQsIDB4ODcsIDB4MDcsIDB4MDcsIDB4MDQsCisJCSAgIDB4MTAsIDB4MDEsIDB4MDYsIDB4MDYsIDB4MDYsIDB4ODYsIDB4MDQsIDB4MDAsCisJCSAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4MDAsIDB4MDUsCisJCSAgIDB4MDAsIDB4NmIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MDUsIDB4MDAsIDB4NmIsIDB4MDApLAorCVBIWVJFR1MoMHgwOTEyLCAweDA5MGUsIDB4MDkwYSwgMHgwMWM0LCAweDAxYzQsIDB4MDFjNSksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU4MDAsCisJUkFESU9SRUdTMygweDBhLCAweDAxLCAweDAxLCAweDAyLCAweDQ0LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA2LCAweDA2LCAweDA2LCAweDg2LCAweDA0LCAweDAwLAorCQkgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LCAweDAwLCAweDA1LAorCQkgICAweDAwLCAweDZiLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDA1LCAweDAwLCAweDZiLCAweDAwKSwKKwlQSFlSRUdTKDB4MDkxNCwgMHgwOTEwLCAweDA5MGMsIDB4MDFjMywgMHgwMWM0LCAweDAxYzUpLAorICB9LAorICB7CS5mcmVxCQkJPSA1ODA1LAorCVJBRElPUkVHUzMoMHhlZCwgMHgwMCwgMHgwMiwgMHgwNCwgMHg4OSwgMHgwNywgMHgwNywgMHgwNCwKKwkJICAgMHgxMCwgMHgwMSwgMHgwNiwgMHgwNiwgMHgwNiwgMHg4NiwgMHgwNCwgMHgwMCwKKwkJICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywgMHgwMCwgMHgwNSwKKwkJICAgMHgwMCwgMHg2YSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwNSwgMHgwMCwgMHg2YSwgMHgwMCksCisJUEhZUkVHUygweDA5MTYsIDB4MDkxMiwgMHgwOTBlLCAweDAxYzMsIDB4MDFjNCwgMHgwMWM0KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTgxMCwKKwlSQURJT1JFR1MzKDB4MGEsIDB4MDEsIDB4MDEsIDB4MDIsIDB4NDUsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDYsIDB4MDYsIDB4MDYsIDB4ODYsIDB4MDQsIDB4MDAsCisJCSAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4MDAsIDB4MDUsCisJCSAgIDB4MDAsIDB4NmEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MDUsIDB4MDAsIDB4NmEsIDB4MDApLAorCVBIWVJFR1MoMHgwOTE4LCAweDA5MTQsIDB4MDkxMCwgMHgwMWMyLCAweDAxYzMsIDB4MDFjNCksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU4MTUsCisJUkFESU9SRUdTMygweGVkLCAweDAwLCAweDAyLCAweDA0LCAweDhiLCAweDA3LCAweDA3LCAweDA0LAorCQkgICAweDEwLCAweDAxLCAweDA2LCAweDA2LCAweDA2LCAweDg2LCAweDA0LCAweDAwLAorCQkgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LCAweDAwLCAweDA1LAorCQkgICAweDAwLCAweDZhLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDA1LCAweDAwLCAweDZhLCAweDAwKSwKKwlQSFlSRUdTKDB4MDkxYSwgMHgwOTE2LCAweDA5MTIsIDB4MDFjMiwgMHgwMWMzLCAweDAxYzQpLAorICB9LAorICB7CS5mcmVxCQkJPSA1ODIwLAorCVJBRElPUkVHUzMoMHgwYSwgMHgwMSwgMHgwMSwgMHgwMiwgMHg0NiwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNiwgMHgwNiwgMHgwNiwgMHg4NiwgMHgwNCwgMHgwMCwKKwkJICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywgMHgwMCwgMHgwNSwKKwkJICAgMHgwMCwgMHg2YSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwNSwgMHgwMCwgMHg2YSwgMHgwMCksCisJUEhZUkVHUygweDA5MWMsIDB4MDkxOCwgMHgwOTE0LCAweDAxYzIsIDB4MDFjMiwgMHgwMWMzKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTgyNSwKKwlSQURJT1JFR1MzKDB4ZWQsIDB4MDAsIDB4MDIsIDB4MDQsIDB4OGQsIDB4MDcsIDB4MDcsIDB4MDQsCisJCSAgIDB4MTAsIDB4MDEsIDB4MDYsIDB4MDYsIDB4MDYsIDB4ODYsIDB4MDQsIDB4MDAsCisJCSAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4MDAsIDB4MDUsCisJCSAgIDB4MDAsIDB4NjksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MDUsIDB4MDAsIDB4NjksIDB4MDApLAorCVBIWVJFR1MoMHgwOTFlLCAweDA5MWEsIDB4MDkxNiwgMHgwMWMxLCAweDAxYzIsIDB4MDFjMyksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU4MzAsCisJUkFESU9SRUdTMygweDBhLCAweDAxLCAweDAxLCAweDAyLCAweDQ3LCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA2LCAweDA2LCAweDA2LCAweDg2LCAweDA0LCAweDAwLAorCQkgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LCAweDAwLCAweDA1LAorCQkgICAweDAwLCAweDY5LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDA1LCAweDAwLCAweDY5LCAweDAwKSwKKwlQSFlSRUdTKDB4MDkyMCwgMHgwOTFjLCAweDA5MTgsIDB4MDFjMSwgMHgwMWMyLCAweDAxYzIpLAorICB9LAorICB7CS5mcmVxCQkJPSA1ODQwLAorCVJBRElPUkVHUzMoMHgwYSwgMHgwMSwgMHgwMSwgMHgwMiwgMHg0OCwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNiwgMHgwNiwgMHgwNiwgMHg4NiwgMHgwNCwgMHgwMCwKKwkJICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywgMHgwMCwgMHgwNCwKKwkJICAgMHgwMCwgMHg2OSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwNCwgMHgwMCwgMHg2OSwgMHgwMCksCisJUEhZUkVHUygweDA5MjQsIDB4MDkyMCwgMHgwOTFjLCAweDAxYzAsIDB4MDFjMSwgMHgwMWMyKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTg1MCwKKwlSQURJT1JFR1MzKDB4ZTAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4NDksIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDYsIDB4MDYsIDB4MDYsIDB4ODUsIDB4MDMsIDB4MDAsCisJCSAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4MDAsIDB4MDQsCisJCSAgIDB4MDAsIDB4NjksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MDQsIDB4MDAsIDB4NjksIDB4MDApLAorCVBIWVJFR1MoMHgwOTI4LCAweDA5MjQsIDB4MDkyMCwgMHgwMWJmLCAweDAxYzAsIDB4MDFjMSksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU4NjAsCisJUkFESU9SRUdTMygweGRlLCAweDAwLCAweDAxLCAweDAyLCAweDRhLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA2LCAweDA2LCAweDA2LCAweDg1LCAweDAzLCAweDAwLAorCQkgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LCAweDAwLCAweDA0LAorCQkgICAweDAwLCAweDY5LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDA0LCAweDAwLCAweDY5LCAweDAwKSwKKwlQSFlSRUdTKDB4MDkyYywgMHgwOTI4LCAweDA5MjQsIDB4MDFiZiwgMHgwMWJmLCAweDAxYzApLAorICB9LAorICB7CS5mcmVxCQkJPSA1ODcwLAorCVJBRElPUkVHUzMoMHhkYiwgMHgwMCwgMHgwMSwgMHgwMiwgMHg0YiwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNiwgMHgwNiwgMHgwNiwgMHg4NSwgMHgwMywgMHgwMCwKKwkJICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywgMHgwMCwgMHgwNCwKKwkJICAgMHgwMCwgMHg2OCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwNCwgMHgwMCwgMHg2OCwgMHgwMCksCisJUEhZUkVHUygweDA5MzAsIDB4MDkyYywgMHgwOTI4LCAweDAxYmUsIDB4MDFiZiwgMHgwMWJmKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTg4MCwKKwlSQURJT1JFR1MzKDB4ZDgsIDB4MDAsIDB4MDEsIDB4MDIsIDB4NGMsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDYsIDB4MDYsIDB4MDYsIDB4ODUsIDB4MDMsIDB4MDAsCisJCSAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4MDAsIDB4MDQsCisJCSAgIDB4MDAsIDB4NjgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MDQsIDB4MDAsIDB4NjgsIDB4MDApLAorCVBIWVJFR1MoMHgwOTM0LCAweDA5MzAsIDB4MDkyYywgMHgwMWJkLCAweDAxYmUsIDB4MDFiZiksCisgIH0sCisgIHsJLmZyZXEJCQk9IDU4OTAsCisJUkFESU9SRUdTMygweGQ2LCAweDAwLCAweDAxLCAweDAyLCAweDRkLCAweDA1LCAweDA1LCAweDA0LAorCQkgICAweDBjLCAweDAxLCAweDA2LCAweDA2LCAweDA2LCAweDg1LCAweDAzLCAweDAwLAorCQkgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LCAweDAwLCAweDA0LAorCQkgICAweDAwLCAweDY4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LAorCQkgICAweDAwLCAweDA0LCAweDAwLCAweDY4LCAweDAwKSwKKwlQSFlSRUdTKDB4MDkzOCwgMHgwOTM0LCAweDA5MzAsIDB4MDFiYywgMHgwMWJkLCAweDAxYmUpLAorICB9LAorICB7CS5mcmVxCQkJPSA1OTAwLAorCVJBRElPUkVHUzMoMHhkMywgMHgwMCwgMHgwMSwgMHgwMiwgMHg0ZSwgMHgwNSwgMHgwNSwgMHgwNCwKKwkJICAgMHgwYywgMHgwMSwgMHgwNiwgMHgwNiwgMHgwNiwgMHg4NSwgMHgwMywgMHgwMCwKKwkJICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywgMHgwMCwgMHgwNCwKKwkJICAgMHgwMCwgMHg2OCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywKKwkJICAgMHgwMCwgMHgwNCwgMHgwMCwgMHg2OCwgMHgwMCksCisJUEhZUkVHUygweDA5M2MsIDB4MDkzOCwgMHgwOTM0LCAweDAxYmMsIDB4MDFiYywgMHgwMWJkKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gNTkxMCwKKwlSQURJT1JFR1MzKDB4ZDYsIDB4MDAsIDB4MDEsIDB4MDIsIDB4NGYsIDB4MDUsIDB4MDUsIDB4MDQsCisJCSAgIDB4MGMsIDB4MDEsIDB4MDYsIDB4MDYsIDB4MDYsIDB4ODUsIDB4MDMsIDB4MDAsCisJCSAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4MDAsIDB4MDQsCisJCSAgIDB4MDAsIDB4NjgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsCisJCSAgIDB4MDAsIDB4MDQsIDB4MDAsIDB4NjgsIDB4MDApLAorCVBIWVJFR1MoMHgwOTQwLCAweDA5M2MsIDB4MDkzOCwgMHgwMWJiLCAweDAxYmMsIDB4MDFiYyksCisgIH0sCisgIHsJLmZyZXEJCQk9IDI0MTIsCisJUkFESU9SRUdTMygweDAwLCAweDAxLCAweDAzLCAweDA5LCAweDZjLCAweDA4LCAweDA4LCAweDA0LAorCQkgICAweDE2LCAweDAxLCAweDA0LCAweDA0LCAweDA0LCAweDhmLCAweDMwLCAweDAwLAorCQkgICAweDAwLCAweDAwLCAweDc4LCAweDAwLCAweDAzLCAweDAwLCAweDcwLCAweDAwLAorCQkgICAweDBiLCAweDAwLCAweDBhLCAweDAwLCAweDg5LCAweDAwLCAweDAzLCAweDAwLAorCQkgICAweDcwLCAweDAwLCAweDBiLCAweDAwLCAweDBhKSwKKwlQSFlSRUdTKDB4MDNjOSwgMHgwM2M1LCAweDAzYzEsIDB4MDQzYSwgMHgwNDNmLCAweDA0NDMpLAorICB9LAorICB7CS5mcmVxCQkJPSAyNDE3LAorCVJBRElPUkVHUzMoMHgwMCwgMHgwMSwgMHgwMywgMHgwOSwgMHg3MSwgMHgwOCwgMHgwOCwgMHgwNCwKKwkJICAgMHgxNiwgMHgwMSwgMHgwNSwgMHgwNSwgMHgwNSwgMHg4ZiwgMHgzMCwgMHgwMCwKKwkJICAgMHgwMCwgMHgwMCwgMHg3OCwgMHgwMCwgMHgwMywgMHgwMCwgMHg3MCwgMHgwMCwKKwkJICAgMHgwYiwgMHgwMCwgMHgwYSwgMHgwMCwgMHg4OSwgMHgwMCwgMHgwMywgMHgwMCwKKwkJICAgMHg3MCwgMHgwMCwgMHgwYiwgMHgwMCwgMHgwYSksCisJUEhZUkVHUygweDAzY2IsIDB4MDNjNywgMHgwM2MzLCAweDA0MzgsIDB4MDQzZCwgMHgwNDQxKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gMjQyMiwKKwlSQURJT1JFR1MzKDB4MDAsIDB4MDEsIDB4MDMsIDB4MDksIDB4NzYsIDB4MDgsIDB4MDgsIDB4MDQsCisJCSAgIDB4MTYsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDUsIDB4OGYsIDB4MzAsIDB4MDAsCisJCSAgIDB4MDAsIDB4MDAsIDB4NjcsIDB4MDAsIDB4MDMsIDB4MDAsIDB4NzAsIDB4MDAsCisJCSAgIDB4MGIsIDB4MDAsIDB4MGEsIDB4MDAsIDB4ODksIDB4MDAsIDB4MDMsIDB4MDAsCisJCSAgIDB4NzAsIDB4MDAsIDB4MGIsIDB4MDAsIDB4MGEpLAorCVBIWVJFR1MoMHgwM2NkLCAweDAzYzksIDB4MDNjNSwgMHgwNDM2LCAweDA0M2EsIDB4MDQzZiksCisgIH0sCisgIHsJLmZyZXEJCQk9IDI0MjcsCisJUkFESU9SRUdTMygweDAwLCAweDAxLCAweDAzLCAweDA5LCAweDdiLCAweDA4LCAweDA4LCAweDA0LAorCQkgICAweDE2LCAweDAxLCAweDA1LCAweDA1LCAweDA1LCAweDhmLCAweDMwLCAweDAwLAorCQkgICAweDAwLCAweDAwLCAweDU3LCAweDAwLCAweDAzLCAweDAwLCAweDcwLCAweDAwLAorCQkgICAweDBhLCAweDAwLCAweDBhLCAweDAwLCAweDc4LCAweDAwLCAweDAzLCAweDAwLAorCQkgICAweDcwLCAweDAwLCAweDBhLCAweDAwLCAweDBhKSwKKwlQSFlSRUdTKDB4MDNjZiwgMHgwM2NiLCAweDAzYzcsIDB4MDQzNCwgMHgwNDM4LCAweDA0M2QpLAorICB9LAorICB7CS5mcmVxCQkJPSAyNDMyLAorCVJBRElPUkVHUzMoMHgwMCwgMHgwMSwgMHgwMywgMHgwOSwgMHg4MCwgMHgwOCwgMHgwOCwgMHgwNCwKKwkJICAgMHgxNiwgMHgwMSwgMHgwNSwgMHgwNSwgMHgwNSwgMHg4ZiwgMHgzMCwgMHgwMCwKKwkJICAgMHgwMCwgMHgwMCwgMHg1NiwgMHgwMCwgMHgwMywgMHgwMCwgMHg3MCwgMHgwMCwKKwkJICAgMHgwYSwgMHgwMCwgMHgwYSwgMHgwMCwgMHg3NywgMHgwMCwgMHgwMywgMHgwMCwKKwkJICAgMHg3MCwgMHgwMCwgMHgwYSwgMHgwMCwgMHgwYSksCisJUEhZUkVHUygweDAzZDEsIDB4MDNjZCwgMHgwM2M5LCAweDA0MzEsIDB4MDQzNiwgMHgwNDNhKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gMjQzNywKKwlSQURJT1JFR1MzKDB4MDAsIDB4MDEsIDB4MDMsIDB4MDksIDB4ODUsIDB4MDgsIDB4MDgsIDB4MDQsCisJCSAgIDB4MTYsIDB4MDEsIDB4MDUsIDB4MDUsIDB4MDUsIDB4OGYsIDB4MzAsIDB4MDAsCisJCSAgIDB4MDAsIDB4MDAsIDB4NDYsIDB4MDAsIDB4MDMsIDB4MDAsIDB4NzAsIDB4MDAsCisJCSAgIDB4MGEsIDB4MDAsIDB4MGEsIDB4MDAsIDB4NzYsIDB4MDAsIDB4MDMsIDB4MDAsCisJCSAgIDB4NzAsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MGEpLAorCVBIWVJFR1MoMHgwM2QzLCAweDAzY2YsIDB4MDNjYiwgMHgwNDJmLCAweDA0MzQsIDB4MDQzOCksCisgIH0sCisgIHsJLmZyZXEJCQk9IDI0NDIsCisJUkFESU9SRUdTMygweDAwLCAweDAxLCAweDAzLCAweDA5LCAweDhhLCAweDA4LCAweDA4LCAweDA0LAorCQkgICAweDE2LCAweDAxLCAweDA1LCAweDA1LCAweDA1LCAweDhmLCAweDMwLCAweDAwLAorCQkgICAweDAwLCAweDAwLCAweDQ1LCAweDAwLCAweDAyLCAweDAwLCAweDcwLCAweDAwLAorCQkgICAweDBhLCAweDAwLCAweDBhLCAweDAwLCAweDY2LCAweDAwLCAweDAyLCAweDAwLAorCQkgICAweDcwLCAweDAwLCAweDBhLCAweDAwLCAweDBhKSwKKwlQSFlSRUdTKDB4MDNkNSwgMHgwM2QxLCAweDAzY2QsIDB4MDQyZCwgMHgwNDMxLCAweDA0MzYpLAorICB9LAorICB7CS5mcmVxCQkJPSAyNDQ3LAorCVJBRElPUkVHUzMoMHgwMCwgMHgwMSwgMHgwMywgMHgwOSwgMHg4ZiwgMHgwOCwgMHgwOCwgMHgwNCwKKwkJICAgMHgxNiwgMHgwMSwgMHgwNiwgMHgwNiwgMHgwNiwgMHg4ZiwgMHgzMCwgMHgwMCwKKwkJICAgMHgwMCwgMHgwMCwgMHgzNCwgMHgwMCwgMHgwMiwgMHgwMCwgMHg3MCwgMHgwMCwKKwkJICAgMHgwYSwgMHgwMCwgMHgwOSwgMHgwMCwgMHg1NSwgMHgwMCwgMHgwMiwgMHgwMCwKKwkJICAgMHg3MCwgMHgwMCwgMHgwYSwgMHgwMCwgMHgwOSksCisJUEhZUkVHUygweDAzZDcsIDB4MDNkMywgMHgwM2NmLCAweDA0MmIsIDB4MDQyZiwgMHgwNDM0KSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gMjQ1MiwKKwlSQURJT1JFR1MzKDB4MDAsIDB4MDEsIDB4MDMsIDB4MDksIDB4OTQsIDB4MDgsIDB4MDgsIDB4MDQsCisJCSAgIDB4MTYsIDB4MDEsIDB4MDYsIDB4MDYsIDB4MDYsIDB4OGYsIDB4MzAsIDB4MDAsCisJCSAgIDB4MDAsIDB4MDAsIDB4MjMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4NzAsIDB4MDAsCisJCSAgIDB4MGEsIDB4MDAsIDB4MDksIDB4MDAsIDB4NDUsIDB4MDAsIDB4MDIsIDB4MDAsCisJCSAgIDB4NzAsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MDkpLAorCVBIWVJFR1MoMHgwM2Q5LCAweDAzZDUsIDB4MDNkMSwgMHgwNDI5LCAweDA0MmQsIDB4MDQzMSksCisgIH0sCisgIHsJLmZyZXEJCQk9IDI0NTcsCisJUkFESU9SRUdTMygweDAwLCAweDAxLCAweDAzLCAweDA5LCAweDk5LCAweDA4LCAweDA4LCAweDA0LAorCQkgICAweDE2LCAweDAxLCAweDA2LCAweDA2LCAweDA2LCAweDhmLCAweDMwLCAweDAwLAorCQkgICAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDAyLCAweDAwLCAweDcwLCAweDAwLAorCQkgICAweDBhLCAweDAwLCAweDA5LCAweDAwLCAweDM0LCAweDAwLCAweDAyLCAweDAwLAorCQkgICAweDcwLCAweDAwLCAweDBhLCAweDAwLCAweDA5KSwKKwlQSFlSRUdTKDB4MDNkYiwgMHgwM2Q3LCAweDAzZDMsIDB4MDQyNywgMHgwNDJiLCAweDA0MmYpLAorICB9LAorICB7CS5mcmVxCQkJPSAyNDYyLAorCVJBRElPUkVHUzMoMHgwMCwgMHgwMSwgMHgwMywgMHgwOSwgMHg5ZSwgMHgwOCwgMHgwOCwgMHgwNCwKKwkJICAgMHgxNiwgMHgwMSwgMHgwNiwgMHgwNiwgMHgwNiwgMHg4ZiwgMHgzMCwgMHgwMCwKKwkJICAgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMiwgMHgwMCwgMHg3MCwgMHgwMCwKKwkJICAgMHgwOSwgMHgwMCwgMHgwOSwgMHgwMCwgMHgzMywgMHgwMCwgMHgwMiwgMHgwMCwKKwkJICAgMHg3MCwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwOSksCisJUEhZUkVHUygweDAzZGQsIDB4MDNkOSwgMHgwM2Q1LCAweDA0MjQsIDB4MDQyOSwgMHgwNDJkKSwKKyAgfSwKKyAgewkuZnJlcQkJCT0gMjQ2NywKKwlSQURJT1JFR1MzKDB4MDAsIDB4MDEsIDB4MDMsIDB4MDksIDB4YTMsIDB4MDgsIDB4MDgsIDB4MDQsCisJCSAgIDB4MTYsIDB4MDEsIDB4MDYsIDB4MDYsIDB4MDYsIDB4OGYsIDB4MzAsIDB4MDAsCisJCSAgIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4NzAsIDB4MDAsCisJCSAgIDB4MDksIDB4MDAsIDB4MDksIDB4MDAsIDB4MjIsIDB4MDAsIDB4MDIsIDB4MDAsCisJCSAgIDB4NzAsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDkpLAorCVBIWVJFR1MoMHgwM2RmLCAweDAzZGIsIDB4MDNkNywgMHgwNDIyLCAweDA0MjcsIDB4MDQyYiksCisgIH0sCisgIHsJLmZyZXEJCQk9IDI0NzIsCisJUkFESU9SRUdTMygweDAwLCAweDAxLCAweDAzLCAweDA5LCAweGE4LCAweDA4LCAweDA4LCAweDA0LAorCQkgICAweDE2LCAweDAxLCAweDA3LCAweDA3LCAweDA3LCAweDhmLCAweDMwLCAweDAwLAorCQkgICAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDcwLCAweDAwLAorCQkgICAweDA5LCAweDAwLCAweDA5LCAweDAwLCAweDExLCAweDAwLCAweDAyLCAweDAwLAorCQkgICAweDcwLCAweDAwLCAweDA5LCAweDAwLCAweDA5KSwKKwlQSFlSRUdTKDB4MDNlMSwgMHgwM2RkLCAweDAzZDksIDB4MDQyMCwgMHgwNDI0LCAweDA0MjkpLAorICB9LAorICB7CS5mcmVxCQkJPSAyNDg0LAorCVJBRElPUkVHUzMoMHhmZiwgMHgwMSwgMHgwMywgMHgwOSwgMHhiNCwgMHgwOCwgMHgwOCwgMHgwNCwKKwkJICAgMHgxNiwgMHgwMSwgMHgwNywgMHgwNywgMHgwNywgMHg4ZiwgMHgyMCwgMHgwMCwKKwkJICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHg3MCwgMHgwMCwKKwkJICAgMHgwOSwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwKKwkJICAgMHg3MCwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwOSksCisJUEhZUkVHUygweDAzZTYsIDB4MDNlMiwgMHgwM2RlLCAweDA0MWIsIDB4MDQxZiwgMHgwNDI0KSwKKyAgfSwKK307CisKK3N0YXRpYyB2b2lkIGIyMDU2X3VwbG9hZF9pbml0dGFiKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgYm9vbCBnaHo1LAorCQkJCSBib29sIGlnbm9yZV91cGxvYWRmbGFnLCB1MTYgcm91dGluZywKKwkJCQkgY29uc3Qgc3RydWN0IGIyMDU2X2luaXR0YWJfZW50cnkgKmUsCisJCQkJIHVuc2lnbmVkIGludCBsZW5ndGgpCit7CisJdW5zaWduZWQgaW50IGk7CisJdTE2IHZhbHVlOworCisJZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrLCBlKyspIHsKKwkJaWYgKCEoZS0+ZmxhZ3MgJiBCMjA1Nl9JTklUVEFCX0VOVFJZX09LKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoKGUtPmZsYWdzICYgQjIwNTZfSU5JVFRBQl9VUExPQUQpIHx8IGlnbm9yZV91cGxvYWRmbGFnKSB7CisJCQlpZiAoZ2h6NSkKKwkJCQl2YWx1ZSA9IGUtPmdoejU7CisJCQllbHNlCisJCQkJdmFsdWUgPSBlLT5naHoyOworCQkJYjQzX3JhZGlvX3dyaXRlKGRldiwgcm91dGluZyB8IGksIHZhbHVlKTsKKwkJfQorCX0KK30KKwordm9pZCBiMjA1Nl91cGxvYWRfaW5pdHRhYnMoc3RydWN0IGI0M193bGRldiAqZGV2LAorCQkJICAgYm9vbCBnaHo1LCBib29sIGlnbm9yZV91cGxvYWRmbGFnKQoreworCXN0cnVjdCBiMjA1Nl9pbml0dGFic19wdHMgKnB0czsKKworCWlmIChkZXYtPnBoeS5yZXYgPj0gQVJSQVlfU0laRShiMjA1Nl9pbml0dGFicykpIHsKKwkJQjQzX1dBUk5fT04oMSk7CisJCXJldHVybjsKKwl9CisJcHRzID0gJmIyMDU2X2luaXR0YWJzW2Rldi0+cGh5LnJldl07CisKKwliMjA1Nl91cGxvYWRfaW5pdHRhYihkZXYsIGdoejUsIGlnbm9yZV91cGxvYWRmbGFnLAorCQkJCUIyMDU2X1NZTiwgcHRzLT5zeW4sIHB0cy0+c3luX2xlbmd0aCk7CisJYjIwNTZfdXBsb2FkX2luaXR0YWIoZGV2LCBnaHo1LCBpZ25vcmVfdXBsb2FkZmxhZywKKwkJCQlCMjA1Nl9UWDAsIHB0cy0+dHgsIHB0cy0+dHhfbGVuZ3RoKTsKKwliMjA1Nl91cGxvYWRfaW5pdHRhYihkZXYsIGdoejUsIGlnbm9yZV91cGxvYWRmbGFnLAorCQkJCUIyMDU2X1RYMSwgcHRzLT50eCwgcHRzLT50eF9sZW5ndGgpOworCWIyMDU2X3VwbG9hZF9pbml0dGFiKGRldiwgZ2h6NSwgaWdub3JlX3VwbG9hZGZsYWcsCisJCQkJQjIwNTZfUlgwLCBwdHMtPnJ4LCBwdHMtPnJ4X2xlbmd0aCk7CisJYjIwNTZfdXBsb2FkX2luaXR0YWIoZGV2LCBnaHo1LCBpZ25vcmVfdXBsb2FkZmxhZywKKwkJCQlCMjA1Nl9SWDEsIHB0cy0+cngsIHB0cy0+cnhfbGVuZ3RoKTsKK30KIAogY29uc3Qgc3RydWN0IGI0M19ucGh5X2NoYW5uZWx0YWJfZW50cnlfcmV2MyAqCiBiNDNfbnBoeV9nZXRfY2hhbnRhYmVudF9yZXYzKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTE2IGZyZXEpCiB7CiAJY29uc3Qgc3RydWN0IGI0M19ucGh5X2NoYW5uZWx0YWJfZW50cnlfcmV2MyAqZTsKLQl1bnNpZ25lZCBpbnQgaTsKKwl1bnNpZ25lZCBpbnQgbGVuZ3RoLCBpOwogCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYjQzX25waHlfY2hhbm5lbHRhYl9yZXYzKTsgaSsrKSB7Ci0JCWUgPSAmKGI0M19ucGh5X2NoYW5uZWx0YWJfcmV2M1tpXSk7CisJc3dpdGNoIChkZXYtPnBoeS5yZXYpIHsKKwljYXNlIDM6CisJCWUgPSBiNDNfbnBoeV9jaGFubmVsdGFiX3JldjM7CisJCWxlbmd0aCA9IEFSUkFZX1NJWkUoYjQzX25waHlfY2hhbm5lbHRhYl9yZXYzKTsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQllID0gYjQzX25waHlfY2hhbm5lbHRhYl9yZXY0OworCQlsZW5ndGggPSBBUlJBWV9TSVpFKGI0M19ucGh5X2NoYW5uZWx0YWJfcmV2NCk7CisJCWJyZWFrOworCWNhc2UgNToKKwkJZSA9IGI0M19ucGh5X2NoYW5uZWx0YWJfcmV2NTsKKwkJbGVuZ3RoID0gQVJSQVlfU0laRShiNDNfbnBoeV9jaGFubmVsdGFiX3JldjUpOworCQlicmVhazsKKwljYXNlIDY6CisJCWUgPSBiNDNfbnBoeV9jaGFubmVsdGFiX3JldjY7CisJCWxlbmd0aCA9IEFSUkFZX1NJWkUoYjQzX25waHlfY2hhbm5lbHRhYl9yZXY2KTsKKwkJYnJlYWs7CisJY2FzZSA3OgorCWNhc2UgOToKKwkJZSA9IGI0M19ucGh5X2NoYW5uZWx0YWJfcmV2N185OworCQlsZW5ndGggPSBBUlJBWV9TSVpFKGI0M19ucGh5X2NoYW5uZWx0YWJfcmV2N185KTsKKwkJYnJlYWs7CisJY2FzZSA4OgorCQllID0gYjQzX25waHlfY2hhbm5lbHRhYl9yZXY4OworCQlsZW5ndGggPSBBUlJBWV9TSVpFKGI0M19ucGh5X2NoYW5uZWx0YWJfcmV2OCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUI0M19XQVJOX09OKDEpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyssIGUrKykgewogCQlpZiAoZS0+ZnJlcSA9PSBmcmVxKQogCQkJcmV0dXJuIGU7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3JhZGlvXzIwNTYuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9yYWRpb18yMDU2LmgKaW5kZXggZmRhNmRhZi4uZDYwMWY2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3JhZGlvXzIwNTYuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcmFkaW9fMjA1Ni5oCkBAIC00LDYgKzQsOSBAQAogCiAgIENvcHlyaWdodCAoYykgMjAxMCBSYWZhxYIgTWnFgmVja2kgPHphamVjNUBnbWFpbC5jb20+CiAKKyAgU29tZSBwYXJ0cyBvZiB0aGUgY29kZSBpbiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSB0aGUgYnJjbTgwMjExCisgIGRyaXZlciAgQ29weXJpZ2h0IChjKSAyMDEwIEJyb2FkY29tIENvcnBvcmF0aW9uCisKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKQEAgLTI4LDE1ICszMSwxMDkwIEBACiAKICNpbmNsdWRlICJ0YWJsZXNfbnBoeS5oIgogCisjZGVmaW5lIEIyMDU2X1NZTgkJCSgweDAgPDwgMTIpCisjZGVmaW5lIEIyMDU2X1RYMAkJCSgweDIgPDwgMTIpCisjZGVmaW5lIEIyMDU2X1RYMQkJCSgweDMgPDwgMTIpCisjZGVmaW5lIEIyMDU2X1JYMAkJCSgweDYgPDwgMTIpCisjZGVmaW5lIEIyMDU2X1JYMQkJCSgweDcgPDwgMTIpCisjZGVmaW5lIEIyMDU2X0FMTFRYCQkJKDB4RSA8PCAxMikKKyNkZWZpbmUgQjIwNTZfQUxMUlgJCQkoMHhGIDw8IDEyKQorCisjZGVmaW5lIEIyMDU2X1NZTl9SRVNFUlZFRF9BRERSMAkweDAwCisjZGVmaW5lIEIyMDU2X1NZTl9JRENPREUJCTB4MDEKKyNkZWZpbmUgQjIwNTZfU1lOX1JFU0VSVkVEX0FERFIyCTB4MDIKKyNkZWZpbmUgQjIwNTZfU1lOX1JFU0VSVkVEX0FERFIzCTB4MDMKKyNkZWZpbmUgQjIwNTZfU1lOX1JFU0VSVkVEX0FERFI0CTB4MDQKKyNkZWZpbmUgQjIwNTZfU1lOX1JFU0VSVkVEX0FERFI1CTB4MDUKKyNkZWZpbmUgQjIwNTZfU1lOX1JFU0VSVkVEX0FERFI2CTB4MDYKKyNkZWZpbmUgQjIwNTZfU1lOX1JFU0VSVkVEX0FERFI3CTB4MDcKKyNkZWZpbmUgQjIwNTZfU1lOX0NPTV9DVFJMCQkweDA4CisjZGVmaW5lIEIyMDU2X1NZTl9DT01fUFUJCTB4MDkKKyNkZWZpbmUgQjIwNTZfU1lOX0NPTV9PVlIJCTB4MEEKKyNkZWZpbmUgQjIwNTZfU1lOX0NPTV9SRVNFVAkJMHgwQgorI2RlZmluZSBCMjA1Nl9TWU5fQ09NX1JDQUwJCTB4MEMKKyNkZWZpbmUgQjIwNTZfU1lOX0NPTV9SQ19SWExQRgkJMHgwRAorI2RlZmluZSBCMjA1Nl9TWU5fQ09NX1JDX1RYTFBGCQkweDBFCisjZGVmaW5lIEIyMDU2X1NZTl9DT01fUkNfUlhIUEYJCTB4MEYKKyNkZWZpbmUgQjIwNTZfU1lOX1JFU0VSVkVEX0FERFIxNgkweDEwCisjZGVmaW5lIEIyMDU2X1NZTl9SRVNFUlZFRF9BRERSMTcJMHgxMQorI2RlZmluZSBCMjA1Nl9TWU5fUkVTRVJWRURfQUREUjE4CTB4MTIKKyNkZWZpbmUgQjIwNTZfU1lOX1JFU0VSVkVEX0FERFIxOQkweDEzCisjZGVmaW5lIEIyMDU2X1NZTl9SRVNFUlZFRF9BRERSMjAJMHgxNAorI2RlZmluZSBCMjA1Nl9TWU5fUkVTRVJWRURfQUREUjIxCTB4MTUKKyNkZWZpbmUgQjIwNTZfU1lOX1JFU0VSVkVEX0FERFIyMgkweDE2CisjZGVmaW5lIEIyMDU2X1NZTl9SRVNFUlZFRF9BRERSMjMJMHgxNworI2RlZmluZSBCMjA1Nl9TWU5fUkVTRVJWRURfQUREUjI0CTB4MTgKKyNkZWZpbmUgQjIwNTZfU1lOX1JFU0VSVkVEX0FERFIyNQkweDE5CisjZGVmaW5lIEIyMDU2X1NZTl9SRVNFUlZFRF9BRERSMjYJMHgxQQorI2RlZmluZSBCMjA1Nl9TWU5fUkVTRVJWRURfQUREUjI3CTB4MUIKKyNkZWZpbmUgQjIwNTZfU1lOX1JFU0VSVkVEX0FERFIyOAkweDFDCisjZGVmaW5lIEIyMDU2X1NZTl9SRVNFUlZFRF9BRERSMjkJMHgxRAorI2RlZmluZSBCMjA1Nl9TWU5fUkVTRVJWRURfQUREUjMwCTB4MUUKKyNkZWZpbmUgQjIwNTZfU1lOX1JFU0VSVkVEX0FERFIzMQkweDFGCisjZGVmaW5lIEIyMDU2X1NZTl9HUElPX01BU1RFUjEJCTB4MjAKKyNkZWZpbmUgQjIwNTZfU1lOX0dQSU9fTUFTVEVSMgkJMHgyMQorI2RlZmluZSBCMjA1Nl9TWU5fVE9QQklBU19NQVNURVIJMHgyMgorI2RlZmluZSBCMjA1Nl9TWU5fVE9QQklBU19SQ0FMCQkweDIzCisjZGVmaW5lIEIyMDU2X1NZTl9BRkVSRUcJCTB4MjQKKyNkZWZpbmUgQjIwNTZfU1lOX1RFTVBQUk9DU0VOU0UJCTB4MjUKKyNkZWZpbmUgQjIwNTZfU1lOX1RFTVBQUk9DU0VOU0VJREFDCTB4MjYKKyNkZWZpbmUgQjIwNTZfU1lOX1RFTVBQUk9DU0VOU0VSQ0FMCTB4MjcKKyNkZWZpbmUgQjIwNTZfU1lOX0xQTwkJCTB4MjgKKyNkZWZpbmUgQjIwNTZfU1lOX1ZERENBTF9NQVNURVIJCTB4MjkKKyNkZWZpbmUgQjIwNTZfU1lOX1ZERENBTF9JREFDCQkweDJBCisjZGVmaW5lIEIyMDU2X1NZTl9WRERDQUxfU1RBVFVTCQkweDJCCisjZGVmaW5lIEIyMDU2X1NZTl9SQ0FMX01BU1RFUgkJMHgyQworI2RlZmluZSBCMjA1Nl9TWU5fUkNBTF9DT0RFX09VVAkJMHgyRAorI2RlZmluZSBCMjA1Nl9TWU5fUkNDQUxfQ1RSTDAJCTB4MkUKKyNkZWZpbmUgQjIwNTZfU1lOX1JDQ0FMX0NUUkwxCQkweDJGCisjZGVmaW5lIEIyMDU2X1NZTl9SQ0NBTF9DVFJMMgkJMHgzMAorI2RlZmluZSBCMjA1Nl9TWU5fUkNDQUxfQ1RSTDMJCTB4MzEKKyNkZWZpbmUgQjIwNTZfU1lOX1JDQ0FMX0NUUkw0CQkweDMyCisjZGVmaW5lIEIyMDU2X1NZTl9SQ0NBTF9DVFJMNQkJMHgzMworI2RlZmluZSBCMjA1Nl9TWU5fUkNDQUxfQ1RSTDYJCTB4MzQKKyNkZWZpbmUgQjIwNTZfU1lOX1JDQ0FMX0NUUkw3CQkweDM1CisjZGVmaW5lIEIyMDU2X1NZTl9SQ0NBTF9DVFJMOAkJMHgzNgorI2RlZmluZSBCMjA1Nl9TWU5fUkNDQUxfQ1RSTDkJCTB4MzcKKyNkZWZpbmUgQjIwNTZfU1lOX1JDQ0FMX0NUUkwxMAkJMHgzOAorI2RlZmluZSBCMjA1Nl9TWU5fUkNDQUxfQ1RSTDExCQkweDM5CisjZGVmaW5lIEIyMDU2X1NZTl9aQ0FMX1NQQVJFMQkJMHgzQQorI2RlZmluZSBCMjA1Nl9TWU5fWkNBTF9TUEFSRTIJCTB4M0IKKyNkZWZpbmUgQjIwNTZfU1lOX1BMTF9NQVNUMQkJMHgzQworI2RlZmluZSBCMjA1Nl9TWU5fUExMX01BU1QyCQkweDNECisjZGVmaW5lIEIyMDU2X1NZTl9QTExfTUFTVDMJCTB4M0UKKyNkZWZpbmUgQjIwNTZfU1lOX1BMTF9CSUFTX1JFU0VUCTB4M0YKKyNkZWZpbmUgQjIwNTZfU1lOX1BMTF9YVEFMMAkJMHg0MAorI2RlZmluZSBCMjA1Nl9TWU5fUExMX1hUQUwxCQkweDQxCisjZGVmaW5lIEIyMDU2X1NZTl9QTExfWFRBTDMJCTB4NDIKKyNkZWZpbmUgQjIwNTZfU1lOX1BMTF9YVEFMNAkJMHg0MworI2RlZmluZSBCMjA1Nl9TWU5fUExMX1hUQUw1CQkweDQ0CisjZGVmaW5lIEIyMDU2X1NZTl9QTExfWFRBTDYJCTB4NDUKKyNkZWZpbmUgQjIwNTZfU1lOX1BMTF9SRUZESVYJCTB4NDYKKyNkZWZpbmUgQjIwNTZfU1lOX1BMTF9QRkQJCTB4NDcKKyNkZWZpbmUgQjIwNTZfU1lOX1BMTF9DUDEJCTB4NDgKKyNkZWZpbmUgQjIwNTZfU1lOX1BMTF9DUDIJCTB4NDkKKyNkZWZpbmUgQjIwNTZfU1lOX1BMTF9DUDMJCTB4NEEKKyNkZWZpbmUgQjIwNTZfU1lOX1BMTF9MT09QRklMVEVSMQkweDRCCisjZGVmaW5lIEIyMDU2X1NZTl9QTExfTE9PUEZJTFRFUjIJMHg0QworI2RlZmluZSBCMjA1Nl9TWU5fUExMX0xPT1BGSUxURVIzCTB4NEQKKyNkZWZpbmUgQjIwNTZfU1lOX1BMTF9MT09QRklMVEVSNAkweDRFCisjZGVmaW5lIEIyMDU2X1NZTl9QTExfTE9PUEZJTFRFUjUJMHg0RgorI2RlZmluZSBCMjA1Nl9TWU5fUExMX01NRDEJCTB4NTAKKyNkZWZpbmUgQjIwNTZfU1lOX1BMTF9NTUQyCQkweDUxCisjZGVmaW5lIEIyMDU2X1NZTl9QTExfVkNPMQkJMHg1MgorI2RlZmluZSBCMjA1Nl9TWU5fUExMX1ZDTzIJCTB4NTMKKyNkZWZpbmUgQjIwNTZfU1lOX1BMTF9NT05JVE9SMQkJMHg1NAorI2RlZmluZSBCMjA1Nl9TWU5fUExMX01PTklUT1IyCQkweDU1CisjZGVmaW5lIEIyMDU2X1NZTl9QTExfVkNPQ0FMMQkJMHg1NgorI2RlZmluZSBCMjA1Nl9TWU5fUExMX1ZDT0NBTDIJCTB4NTcKKyNkZWZpbmUgQjIwNTZfU1lOX1BMTF9WQ09DQUw0CQkweDU4CisjZGVmaW5lIEIyMDU2X1NZTl9QTExfVkNPQ0FMNQkJMHg1OQorI2RlZmluZSBCMjA1Nl9TWU5fUExMX1ZDT0NBTDYJCTB4NUEKKyNkZWZpbmUgQjIwNTZfU1lOX1BMTF9WQ09DQUw3CQkweDVCCisjZGVmaW5lIEIyMDU2X1NZTl9QTExfVkNPQ0FMOAkJMHg1QworI2RlZmluZSBCMjA1Nl9TWU5fUExMX1ZDT0NBTDkJCTB4NUQKKyNkZWZpbmUgQjIwNTZfU1lOX1BMTF9WQ09DQUwxMAkJMHg1RQorI2RlZmluZSBCMjA1Nl9TWU5fUExMX1ZDT0NBTDExCQkweDVGCisjZGVmaW5lIEIyMDU2X1NZTl9QTExfVkNPQ0FMMTIJCTB4NjAKKyNkZWZpbmUgQjIwNTZfU1lOX1BMTF9WQ09DQUwxMwkJMHg2MQorI2RlZmluZSBCMjA1Nl9TWU5fUExMX1ZSRUcJCTB4NjIKKyNkZWZpbmUgQjIwNTZfU1lOX1BMTF9TVEFUVVMxCQkweDYzCisjZGVmaW5lIEIyMDU2X1NZTl9QTExfU1RBVFVTMgkJMHg2NAorI2RlZmluZSBCMjA1Nl9TWU5fUExMX1NUQVRVUzMJCTB4NjUKKyNkZWZpbmUgQjIwNTZfU1lOX0xPR0VOX1BVMAkJMHg2NgorI2RlZmluZSBCMjA1Nl9TWU5fTE9HRU5fUFUxCQkweDY3CisjZGVmaW5lIEIyMDU2X1NZTl9MT0dFTl9QVTIJCTB4NjgKKyNkZWZpbmUgQjIwNTZfU1lOX0xPR0VOX1BVMwkJMHg2OQorI2RlZmluZSBCMjA1Nl9TWU5fTE9HRU5fUFU1CQkweDZBCisjZGVmaW5lIEIyMDU2X1NZTl9MT0dFTl9QVTYJCTB4NkIKKyNkZWZpbmUgQjIwNTZfU1lOX0xPR0VOX1BVNwkJMHg2QworI2RlZmluZSBCMjA1Nl9TWU5fTE9HRU5fUFU4CQkweDZECisjZGVmaW5lIEIyMDU2X1NZTl9MT0dFTl9CSUFTX1JFU0VUCTB4NkUKKyNkZWZpbmUgQjIwNTZfU1lOX0xPR0VOX1JDQ1IxCQkweDZGCisjZGVmaW5lIEIyMDU2X1NZTl9MT0dFTl9WQ09CVUYxCQkweDcwCisjZGVmaW5lIEIyMDU2X1NZTl9MT0dFTl9NSVhFUjEJCTB4NzEKKyNkZWZpbmUgQjIwNTZfU1lOX0xPR0VOX01JWEVSMgkJMHg3MgorI2RlZmluZSBCMjA1Nl9TWU5fTE9HRU5fQlVGMQkJMHg3MworI2RlZmluZSBCMjA1Nl9TWU5fTE9HRU5CVUYyCQkweDc0CisjZGVmaW5lIEIyMDU2X1NZTl9MT0dFTl9CVUYzCQkweDc1CisjZGVmaW5lIEIyMDU2X1NZTl9MT0dFTl9CVUY0CQkweDc2CisjZGVmaW5lIEIyMDU2X1NZTl9MT0dFTl9ESVYxCQkweDc3CisjZGVmaW5lIEIyMDU2X1NZTl9MT0dFTl9ESVYyCQkweDc4CisjZGVmaW5lIEIyMDU2X1NZTl9MT0dFTl9ESVYzCQkweDc5CisjZGVmaW5lIEIyMDU2X1NZTl9MT0dFTl9BQ0wxCQkweDdBCisjZGVmaW5lIEIyMDU2X1NZTl9MT0dFTl9BQ0wyCQkweDdCCisjZGVmaW5lIEIyMDU2X1NZTl9MT0dFTl9BQ0wzCQkweDdDCisjZGVmaW5lIEIyMDU2X1NZTl9MT0dFTl9BQ0w0CQkweDdECisjZGVmaW5lIEIyMDU2X1NZTl9MT0dFTl9BQ0w1CQkweDdFCisjZGVmaW5lIEIyMDU2X1NZTl9MT0dFTl9BQ0w2CQkweDdGCisjZGVmaW5lIEIyMDU2X1NZTl9MT0dFTl9BQ0xPVVQJCTB4ODAKKyNkZWZpbmUgQjIwNTZfU1lOX0xPR0VOX0FDTENBTDEJCTB4ODEKKyNkZWZpbmUgQjIwNTZfU1lOX0xPR0VOX0FDTENBTDIJCTB4ODIKKyNkZWZpbmUgQjIwNTZfU1lOX0xPR0VOX0FDTENBTDMJCTB4ODMKKyNkZWZpbmUgQjIwNTZfU1lOX0NBTEVOCQkJMHg4NAorI2RlZmluZSBCMjA1Nl9TWU5fTE9HRU5fUEVBS0RFVDEJMHg4NQorI2RlZmluZSBCMjA1Nl9TWU5fTE9HRU5fQ09SRV9BQ0xfT1ZSCTB4ODYKKyNkZWZpbmUgQjIwNTZfU1lOX0xPR0VOX1JYX0RJRkZfQUNMX09WUgkweDg3CisjZGVmaW5lIEIyMDU2X1NZTl9MT0dFTl9UWF9ESUZGX0FDTF9PVlIJMHg4OAorI2RlZmluZSBCMjA1Nl9TWU5fTE9HRU5fUlhfQ01PU19BQ0xfT1ZSCTB4ODkKKyNkZWZpbmUgQjIwNTZfU1lOX0xPR0VOX1RYX0NNT1NfQUNMX09WUgkweDhBCisjZGVmaW5lIEIyMDU2X1NZTl9MT0dFTl9WQ09CVUYyCQkweDhCCisjZGVmaW5lIEIyMDU2X1NZTl9MT0dFTl9NSVhFUjMJCTB4OEMKKyNkZWZpbmUgQjIwNTZfU1lOX0xPR0VOX0JVRjUJCTB4OEQKKyNkZWZpbmUgQjIwNTZfU1lOX0xPR0VOX0JVRjYJCTB4OEUKKyNkZWZpbmUgQjIwNTZfU1lOX0xPR0VOX0NCVUZSWDEJCTB4OEYKKyNkZWZpbmUgQjIwNTZfU1lOX0xPR0VOX0NCVUZSWDIJCTB4OTAKKyNkZWZpbmUgQjIwNTZfU1lOX0xPR0VOX0NCVUZSWDMJCTB4OTEKKyNkZWZpbmUgQjIwNTZfU1lOX0xPR0VOX0NCVUZSWDQJCTB4OTIKKyNkZWZpbmUgQjIwNTZfU1lOX0xPR0VOX0NCVUZUWDEJCTB4OTMKKyNkZWZpbmUgQjIwNTZfU1lOX0xPR0VOX0NCVUZUWDIJCTB4OTQKKyNkZWZpbmUgQjIwNTZfU1lOX0xPR0VOX0NCVUZUWDMJCTB4OTUKKyNkZWZpbmUgQjIwNTZfU1lOX0xPR0VOX0NCVUZUWDQJCTB4OTYKKyNkZWZpbmUgQjIwNTZfU1lOX0xPR0VOX0NNT1NSWDEJCTB4OTcKKyNkZWZpbmUgQjIwNTZfU1lOX0xPR0VOX0NNT1NSWDIJCTB4OTgKKyNkZWZpbmUgQjIwNTZfU1lOX0xPR0VOX0NNT1NSWDMJCTB4OTkKKyNkZWZpbmUgQjIwNTZfU1lOX0xPR0VOX0NNT1NSWDQJCTB4OUEKKyNkZWZpbmUgQjIwNTZfU1lOX0xPR0VOX0NNT1NUWDEJCTB4OUIKKyNkZWZpbmUgQjIwNTZfU1lOX0xPR0VOX0NNT1NUWDIJCTB4OUMKKyNkZWZpbmUgQjIwNTZfU1lOX0xPR0VOX0NNT1NUWDMJCTB4OUQKKyNkZWZpbmUgQjIwNTZfU1lOX0xPR0VOX0NNT1NUWDQJCTB4OUUKKyNkZWZpbmUgQjIwNTZfU1lOX0xPR0VOX1ZDT0JVRjJfT1ZSVkFMCTB4OUYKKyNkZWZpbmUgQjIwNTZfU1lOX0xPR0VOX01JWEVSM19PVlJWQUwJMHhBMAorI2RlZmluZSBCMjA1Nl9TWU5fTE9HRU5fQlVGNV9PVlJWQUwJMHhBMQorI2RlZmluZSBCMjA1Nl9TWU5fTE9HRU5fQlVGNl9PVlJWQUwJMHhBMgorI2RlZmluZSBCMjA1Nl9TWU5fTE9HRU5fQ0JVRlJYMV9PVlJWQUwJMHhBMworI2RlZmluZSBCMjA1Nl9TWU5fTE9HRU5fQ0JVRlJYMl9PVlJWQUwJMHhBNAorI2RlZmluZSBCMjA1Nl9TWU5fTE9HRU5fQ0JVRlJYM19PVlJWQUwJMHhBNQorI2RlZmluZSBCMjA1Nl9TWU5fTE9HRU5fQ0JVRlJYNF9PVlJWQUwJMHhBNgorI2RlZmluZSBCMjA1Nl9TWU5fTE9HRU5fQ0JVRlRYMV9PVlJWQUwJMHhBNworI2RlZmluZSBCMjA1Nl9TWU5fTE9HRU5fQ0JVRlRYMl9PVlJWQUwJMHhBOAorI2RlZmluZSBCMjA1Nl9TWU5fTE9HRU5fQ0JVRlRYM19PVlJWQUwJMHhBOQorI2RlZmluZSBCMjA1Nl9TWU5fTE9HRU5fQ0JVRlRYNF9PVlJWQUwJMHhBQQorI2RlZmluZSBCMjA1Nl9TWU5fTE9HRU5fQ01PU1JYMV9PVlJWQUwJMHhBQgorI2RlZmluZSBCMjA1Nl9TWU5fTE9HRU5fQ01PU1JYMl9PVlJWQUwJMHhBQworI2RlZmluZSBCMjA1Nl9TWU5fTE9HRU5fQ01PU1JYM19PVlJWQUwJMHhBRAorI2RlZmluZSBCMjA1Nl9TWU5fTE9HRU5fQ01PU1JYNF9PVlJWQUwJMHhBRQorI2RlZmluZSBCMjA1Nl9TWU5fTE9HRU5fQ01PU1RYMV9PVlJWQUwJMHhBRgorI2RlZmluZSBCMjA1Nl9TWU5fTE9HRU5fQ01PU1RYMl9PVlJWQUwJMHhCMAorI2RlZmluZSBCMjA1Nl9TWU5fTE9HRU5fQ01PU1RYM19PVlJWQUwJMHhCMQorI2RlZmluZSBCMjA1Nl9TWU5fTE9HRU5fQ01PU1RYNF9PVlJWQUwJMHhCMgorI2RlZmluZSBCMjA1Nl9TWU5fTE9HRU5fQUNMX1dBSVRDTlQJMHhCMworI2RlZmluZSBCMjA1Nl9TWU5fTE9HRU5fQ09SRV9DQUxWQUxJRAkweEI0CisjZGVmaW5lIEIyMDU2X1NZTl9MT0dFTl9SWF9DTU9TX0NBTFZBTElECTB4QjUKKyNkZWZpbmUgQjIwNTZfU1lOX0xPR0VOX1RYX0NNT1NfVkFMSUQJMHhCNgorCisjZGVmaW5lIEIyMDU2X1RYX1JFU0VSVkVEX0FERFIwCQkweDAwCisjZGVmaW5lIEIyMDU2X1RYX0lEQ09ERQkJCTB4MDEKKyNkZWZpbmUgQjIwNTZfVFhfUkVTRVJWRURfQUREUjIJCTB4MDIKKyNkZWZpbmUgQjIwNTZfVFhfUkVTRVJWRURfQUREUjMJCTB4MDMKKyNkZWZpbmUgQjIwNTZfVFhfUkVTRVJWRURfQUREUjQJCTB4MDQKKyNkZWZpbmUgQjIwNTZfVFhfUkVTRVJWRURfQUREUjUJCTB4MDUKKyNkZWZpbmUgQjIwNTZfVFhfUkVTRVJWRURfQUREUjYJCTB4MDYKKyNkZWZpbmUgQjIwNTZfVFhfUkVTRVJWRURfQUREUjcJCTB4MDcKKyNkZWZpbmUgQjIwNTZfVFhfQ09NX0NUUkwJCTB4MDgKKyNkZWZpbmUgQjIwNTZfVFhfQ09NX1BVCQkJMHgwOQorI2RlZmluZSBCMjA1Nl9UWF9DT01fT1ZSCQkweDBBCisjZGVmaW5lIEIyMDU2X1RYX0NPTV9SRVNFVAkJMHgwQgorI2RlZmluZSBCMjA1Nl9UWF9DT01fUkNBTAkJMHgwQworI2RlZmluZSBCMjA1Nl9UWF9DT01fUkNfUlhMUEYJCTB4MEQKKyNkZWZpbmUgQjIwNTZfVFhfQ09NX1JDX1RYTFBGCQkweDBFCisjZGVmaW5lIEIyMDU2X1RYX0NPTV9SQ19SWEhQRgkJMHgwRgorI2RlZmluZSBCMjA1Nl9UWF9SRVNFUlZFRF9BRERSMTYJMHgxMAorI2RlZmluZSBCMjA1Nl9UWF9SRVNFUlZFRF9BRERSMTcJMHgxMQorI2RlZmluZSBCMjA1Nl9UWF9SRVNFUlZFRF9BRERSMTgJMHgxMgorI2RlZmluZSBCMjA1Nl9UWF9SRVNFUlZFRF9BRERSMTkJMHgxMworI2RlZmluZSBCMjA1Nl9UWF9SRVNFUlZFRF9BRERSMjAJMHgxNAorI2RlZmluZSBCMjA1Nl9UWF9SRVNFUlZFRF9BRERSMjEJMHgxNQorI2RlZmluZSBCMjA1Nl9UWF9SRVNFUlZFRF9BRERSMjIJMHgxNgorI2RlZmluZSBCMjA1Nl9UWF9SRVNFUlZFRF9BRERSMjMJMHgxNworI2RlZmluZSBCMjA1Nl9UWF9SRVNFUlZFRF9BRERSMjQJMHgxOAorI2RlZmluZSBCMjA1Nl9UWF9SRVNFUlZFRF9BRERSMjUJMHgxOQorI2RlZmluZSBCMjA1Nl9UWF9SRVNFUlZFRF9BRERSMjYJMHgxQQorI2RlZmluZSBCMjA1Nl9UWF9SRVNFUlZFRF9BRERSMjcJMHgxQgorI2RlZmluZSBCMjA1Nl9UWF9SRVNFUlZFRF9BRERSMjgJMHgxQworI2RlZmluZSBCMjA1Nl9UWF9SRVNFUlZFRF9BRERSMjkJMHgxRAorI2RlZmluZSBCMjA1Nl9UWF9SRVNFUlZFRF9BRERSMzAJMHgxRQorI2RlZmluZSBCMjA1Nl9UWF9SRVNFUlZFRF9BRERSMzEJMHgxRgorI2RlZmluZSBCMjA1Nl9UWF9JUUNBTF9HQUlOX0JXCQkweDIwCisjZGVmaW5lIEIyMDU2X1RYX0xPRlRfRklORV9JCQkweDIxCisjZGVmaW5lIEIyMDU2X1RYX0xPRlRfRklORV9RCQkweDIyCisjZGVmaW5lIEIyMDU2X1RYX0xPRlRfQ09BUlNFX0kJCTB4MjMKKyNkZWZpbmUgQjIwNTZfVFhfTE9GVF9DT0FSU0VfUQkJMHgyNAorI2RlZmluZSBCMjA1Nl9UWF9UWF9DT01fTUFTVEVSMQkJMHgyNQorI2RlZmluZSBCMjA1Nl9UWF9UWF9DT01fTUFTVEVSMgkJMHgyNgorI2RlZmluZSBCMjA1Nl9UWF9SWElRQ0FMX1RYTVVYCQkweDI3CisjZGVmaW5lIEIyMDU2X1RYX1RYX1NTSV9NQVNURVIJCTB4MjgKKyNkZWZpbmUgQjIwNTZfVFhfSVFDQUxfVkNNX0hHCQkweDI5CisjZGVmaW5lIEIyMDU2X1RYX0lRQ0FMX0lEQUMJCTB4MkEKKyNkZWZpbmUgQjIwNTZfVFhfVFNTSV9WQ00JCTB4MkIKKyNkZWZpbmUgQjIwNTZfVFhfVFhfQU1QX0RFVAkJMHgyQworI2RlZmluZSBCMjA1Nl9UWF9UWF9TU0lfTVVYCQkweDJECisjZGVmaW5lIEIyMDU2X1RYX1RTU0lBCQkJMHgyRQorI2RlZmluZSBCMjA1Nl9UWF9UU1NJRwkJCTB4MkYKKyNkZWZpbmUgQjIwNTZfVFhfVFNTSV9NSVNDMQkJMHgzMAorI2RlZmluZSBCMjA1Nl9UWF9UU1NJX01JU0MyCQkweDMxCisjZGVmaW5lIEIyMDU2X1RYX1RTU0lfTUlTQzMJCTB4MzIKKyNkZWZpbmUgQjIwNTZfVFhfUEFfU1BBUkUxCQkweDMzCisjZGVmaW5lIEIyMDU2X1RYX1BBX1NQQVJFMgkJMHgzNAorI2RlZmluZSBCMjA1Nl9UWF9JTlRQQUFfTUFTVEVSCQkweDM1CisjZGVmaW5lIEIyMDU2X1RYX0lOVFBBQV9HQUlOCQkweDM2CisjZGVmaW5lIEIyMDU2X1RYX0lOVFBBQV9CT09TVF9UVU5FCTB4MzcKKyNkZWZpbmUgQjIwNTZfVFhfSU5UUEFBX0lBVVhfU1RBVAkweDM4CisjZGVmaW5lIEIyMDU2X1RYX0lOVFBBQV9JQVVYX0RZTgkweDM5CisjZGVmaW5lIEIyMDU2X1RYX0lOVFBBQV9JTUFJTl9TVEFUCTB4M0EKKyNkZWZpbmUgQjIwNTZfVFhfSU5UUEFBX0lNQUlOX0RZTgkweDNCCisjZGVmaW5lIEIyMDU2X1RYX0lOVFBBQV9DQVNDQklBUwkweDNDCisjZGVmaW5lIEIyMDU2X1RYX0lOVFBBQV9QQVNMT1BFCQkweDNECisjZGVmaW5lIEIyMDU2X1RYX0lOVFBBQV9QQV9NSVNDCQkweDNFCisjZGVmaW5lIEIyMDU2X1RYX0lOVFBBR19NQVNURVIJCTB4M0YKKyNkZWZpbmUgQjIwNTZfVFhfSU5UUEFHX0dBSU4JCTB4NDAKKyNkZWZpbmUgQjIwNTZfVFhfSU5UUEFHX0JPT1NUX1RVTkUJMHg0MQorI2RlZmluZSBCMjA1Nl9UWF9JTlRQQUdfSUFVWF9TVEFUCTB4NDIKKyNkZWZpbmUgQjIwNTZfVFhfSU5UUEFHX0lBVVhfRFlOCTB4NDMKKyNkZWZpbmUgQjIwNTZfVFhfSU5UUEFHX0lNQUlOX1NUQVQJMHg0NAorI2RlZmluZSBCMjA1Nl9UWF9JTlRQQUdfSU1BSU5fRFlOCTB4NDUKKyNkZWZpbmUgQjIwNTZfVFhfSU5UUEFHX0NBU0NCSUFTCTB4NDYKKyNkZWZpbmUgQjIwNTZfVFhfSU5UUEFHX1BBU0xPUEUJCTB4NDcKKyNkZWZpbmUgQjIwNTZfVFhfSU5UUEFHX1BBX01JU0MJCTB4NDgKKyNkZWZpbmUgQjIwNTZfVFhfUEFEQV9NQVNURVIJCTB4NDkKKyNkZWZpbmUgQjIwNTZfVFhfUEFEQV9JREFDCQkweDRBCisjZGVmaW5lIEIyMDU2X1RYX1BBREFfQ0FTQ0JJQVMJCTB4NEIKKyNkZWZpbmUgQjIwNTZfVFhfUEFEQV9HQUlOCQkweDRDCisjZGVmaW5lIEIyMDU2X1RYX1BBREFfQk9PU1RfVFVORQkweDRECisjZGVmaW5lIEIyMDU2X1RYX1BBREFfU0xPUEUJCTB4NEUKKyNkZWZpbmUgQjIwNTZfVFhfUEFER19NQVNURVIJCTB4NEYKKyNkZWZpbmUgQjIwNTZfVFhfUEFER19JREFDCQkweDUwCisjZGVmaW5lIEIyMDU2X1RYX1BBREdfQ0FTQ0JJQVMJCTB4NTEKKyNkZWZpbmUgQjIwNTZfVFhfUEFER19HQUlOCQkweDUyCisjZGVmaW5lIEIyMDU2X1RYX1BBREdfQk9PU1RfVFVORQkweDUzCisjZGVmaW5lIEIyMDU2X1RYX1BBREdfU0xPUEUJCTB4NTQKKyNkZWZpbmUgQjIwNTZfVFhfUEdBQV9NQVNURVIJCTB4NTUKKyNkZWZpbmUgQjIwNTZfVFhfUEdBQV9JREFDCQkweDU2CisjZGVmaW5lIEIyMDU2X1RYX1BHQUFfR0FJTgkJMHg1NworI2RlZmluZSBCMjA1Nl9UWF9QR0FBX0JPT1NUX1RVTkUJMHg1OAorI2RlZmluZSBCMjA1Nl9UWF9QR0FBX1NMT1BFCQkweDU5CisjZGVmaW5lIEIyMDU2X1RYX1BHQUFfTUlTQwkJMHg1QQorI2RlZmluZSBCMjA1Nl9UWF9QR0FHX01BU1RFUgkJMHg1QgorI2RlZmluZSBCMjA1Nl9UWF9QR0FHX0lEQUMJCTB4NUMKKyNkZWZpbmUgQjIwNTZfVFhfUEdBR19HQUlOCQkweDVECisjZGVmaW5lIEIyMDU2X1RYX1BHQUdfQk9PU1RfVFVORQkweDVFCisjZGVmaW5lIEIyMDU2X1RYX1BHQUdfU0xPUEUJCTB4NUYKKyNkZWZpbmUgQjIwNTZfVFhfUEdBR19NSVNDCQkweDYwCisjZGVmaW5lIEIyMDU2X1RYX01JWEFfTUFTVEVSCQkweDYxCisjZGVmaW5lIEIyMDU2X1RYX01JWEFfQk9PU1RfVFVORQkweDYyCisjZGVmaW5lIEIyMDU2X1RYX01JWEcJCQkweDYzCisjZGVmaW5lIEIyMDU2X1RYX01JWEdfQk9PU1RfVFVORQkweDY0CisjZGVmaW5lIEIyMDU2X1RYX0JCX0dNX01BU1RFUgkJMHg2NQorI2RlZmluZSBCMjA1Nl9UWF9HTUJCX0dNCQkweDY2CisjZGVmaW5lIEIyMDU2X1RYX0dNQkJfSURBQwkJMHg2NworI2RlZmluZSBCMjA1Nl9UWF9UWExQRl9NQVNURVIJCTB4NjgKKyNkZWZpbmUgQjIwNTZfVFhfVFhMUEZfUkNDQUwJCTB4NjkKKyNkZWZpbmUgQjIwNTZfVFhfVFhMUEZfUkNDQUxfT0ZGMAkweDZBCisjZGVmaW5lIEIyMDU2X1RYX1RYTFBGX1JDQ0FMX09GRjEJMHg2QgorI2RlZmluZSBCMjA1Nl9UWF9UWExQRl9SQ0NBTF9PRkYyCTB4NkMKKyNkZWZpbmUgQjIwNTZfVFhfVFhMUEZfUkNDQUxfT0ZGMwkweDZECisjZGVmaW5lIEIyMDU2X1RYX1RYTFBGX1JDQ0FMX09GRjQJMHg2RQorI2RlZmluZSBCMjA1Nl9UWF9UWExQRl9SQ0NBTF9PRkY1CTB4NkYKKyNkZWZpbmUgQjIwNTZfVFhfVFhMUEZfUkNDQUxfT0ZGNgkweDcwCisjZGVmaW5lIEIyMDU2X1RYX1RYTFBGX0JXCQkweDcxCisjZGVmaW5lIEIyMDU2X1RYX1RYTFBGX0dBSU4JCTB4NzIKKyNkZWZpbmUgQjIwNTZfVFhfVFhMUEZfSURBQwkJMHg3MworI2RlZmluZSBCMjA1Nl9UWF9UWExQRl9JREFDXzAJCTB4NzQKKyNkZWZpbmUgQjIwNTZfVFhfVFhMUEZfSURBQ18xCQkweDc1CisjZGVmaW5lIEIyMDU2X1RYX1RYTFBGX0lEQUNfMgkJMHg3NgorI2RlZmluZSBCMjA1Nl9UWF9UWExQRl9JREFDXzMJCTB4NzcKKyNkZWZpbmUgQjIwNTZfVFhfVFhMUEZfSURBQ180CQkweDc4CisjZGVmaW5lIEIyMDU2X1RYX1RYTFBGX0lEQUNfNQkJMHg3OQorI2RlZmluZSBCMjA1Nl9UWF9UWExQRl9JREFDXzYJCTB4N0EKKyNkZWZpbmUgQjIwNTZfVFhfVFhMUEZfT1BBTVBfSURBQwkweDdCCisjZGVmaW5lIEIyMDU2X1RYX1RYTFBGX01JU0MJCTB4N0MKKyNkZWZpbmUgQjIwNTZfVFhfVFhTUEFSRTEJCTB4N0QKKyNkZWZpbmUgQjIwNTZfVFhfVFhTUEFSRTIJCTB4N0UKKyNkZWZpbmUgQjIwNTZfVFhfVFhTUEFSRTMJCTB4N0YKKyNkZWZpbmUgQjIwNTZfVFhfVFhTUEFSRTQJCTB4ODAKKyNkZWZpbmUgQjIwNTZfVFhfVFhTUEFSRTUJCTB4ODEKKyNkZWZpbmUgQjIwNTZfVFhfVFhTUEFSRTYJCTB4ODIKKyNkZWZpbmUgQjIwNTZfVFhfVFhTUEFSRTcJCTB4ODMKKyNkZWZpbmUgQjIwNTZfVFhfVFhTUEFSRTgJCTB4ODQKKyNkZWZpbmUgQjIwNTZfVFhfVFhTUEFSRTkJCTB4ODUKKyNkZWZpbmUgQjIwNTZfVFhfVFhTUEFSRTEwCQkweDg2CisjZGVmaW5lIEIyMDU2X1RYX1RYU1BBUkUxMQkJMHg4NworI2RlZmluZSBCMjA1Nl9UWF9UWFNQQVJFMTIJCTB4ODgKKyNkZWZpbmUgQjIwNTZfVFhfVFhTUEFSRTEzCQkweDg5CisjZGVmaW5lIEIyMDU2X1RYX1RYU1BBUkUxNAkJMHg4QQorI2RlZmluZSBCMjA1Nl9UWF9UWFNQQVJFMTUJCTB4OEIKKyNkZWZpbmUgQjIwNTZfVFhfVFhTUEFSRTE2CQkweDhDCisjZGVmaW5lIEIyMDU2X1RYX1NUQVRVU19JTlRQQV9HQUlOCTB4OEQKKyNkZWZpbmUgQjIwNTZfVFhfU1RBVFVTX1BBRF9HQUlOCTB4OEUKKyNkZWZpbmUgQjIwNTZfVFhfU1RBVFVTX1BHQV9HQUlOCTB4OEYKKyNkZWZpbmUgQjIwNTZfVFhfU1RBVFVTX0dNX1RYTFBGX0dBSU4JMHg5MAorI2RlZmluZSBCMjA1Nl9UWF9TVEFUVVNfVFhMUEZfQlcJMHg5MQorI2RlZmluZSBCMjA1Nl9UWF9TVEFUVVNfVFhMUEZfUkMJMHg5MgorI2RlZmluZSBCMjA1Nl9UWF9HTUJCX0lEQUMwCQkweDkzCisjZGVmaW5lIEIyMDU2X1RYX0dNQkJfSURBQzEJCTB4OTQKKyNkZWZpbmUgQjIwNTZfVFhfR01CQl9JREFDMgkJMHg5NQorI2RlZmluZSBCMjA1Nl9UWF9HTUJCX0lEQUMzCQkweDk2CisjZGVmaW5lIEIyMDU2X1RYX0dNQkJfSURBQzQJCTB4OTcKKyNkZWZpbmUgQjIwNTZfVFhfR01CQl9JREFDNQkJMHg5OAorI2RlZmluZSBCMjA1Nl9UWF9HTUJCX0lEQUM2CQkweDk5CisjZGVmaW5lIEIyMDU2X1RYX0dNQkJfSURBQzcJCTB4OUEKKworI2RlZmluZSBCMjA1Nl9SWF9SRVNFUlZFRF9BRERSMAkJMHgwMAorI2RlZmluZSBCMjA1Nl9SWF9JRENPREUJCQkweDAxCisjZGVmaW5lIEIyMDU2X1JYX1JFU0VSVkVEX0FERFIyCQkweDAyCisjZGVmaW5lIEIyMDU2X1JYX1JFU0VSVkVEX0FERFIzCQkweDAzCisjZGVmaW5lIEIyMDU2X1JYX1JFU0VSVkVEX0FERFI0CQkweDA0CisjZGVmaW5lIEIyMDU2X1JYX1JFU0VSVkVEX0FERFI1CQkweDA1CisjZGVmaW5lIEIyMDU2X1JYX1JFU0VSVkVEX0FERFI2CQkweDA2CisjZGVmaW5lIEIyMDU2X1JYX1JFU0VSVkVEX0FERFI3CQkweDA3CisjZGVmaW5lIEIyMDU2X1JYX0NPTV9DVFJMCQkweDA4CisjZGVmaW5lIEIyMDU2X1JYX0NPTV9QVQkJCTB4MDkKKyNkZWZpbmUgQjIwNTZfUlhfQ09NX09WUgkJMHgwQQorI2RlZmluZSBCMjA1Nl9SWF9DT01fUkVTRVQJCTB4MEIKKyNkZWZpbmUgQjIwNTZfUlhfQ09NX1JDQUwJCTB4MEMKKyNkZWZpbmUgQjIwNTZfUlhfQ09NX1JDX1JYTFBGCQkweDBECisjZGVmaW5lIEIyMDU2X1JYX0NPTV9SQ19UWExQRgkJMHgwRQorI2RlZmluZSBCMjA1Nl9SWF9DT01fUkNfUlhIUEYJCTB4MEYKKyNkZWZpbmUgQjIwNTZfUlhfUkVTRVJWRURfQUREUjE2CTB4MTAKKyNkZWZpbmUgQjIwNTZfUlhfUkVTRVJWRURfQUREUjE3CTB4MTEKKyNkZWZpbmUgQjIwNTZfUlhfUkVTRVJWRURfQUREUjE4CTB4MTIKKyNkZWZpbmUgQjIwNTZfUlhfUkVTRVJWRURfQUREUjE5CTB4MTMKKyNkZWZpbmUgQjIwNTZfUlhfUkVTRVJWRURfQUREUjIwCTB4MTQKKyNkZWZpbmUgQjIwNTZfUlhfUkVTRVJWRURfQUREUjIxCTB4MTUKKyNkZWZpbmUgQjIwNTZfUlhfUkVTRVJWRURfQUREUjIyCTB4MTYKKyNkZWZpbmUgQjIwNTZfUlhfUkVTRVJWRURfQUREUjIzCTB4MTcKKyNkZWZpbmUgQjIwNTZfUlhfUkVTRVJWRURfQUREUjI0CTB4MTgKKyNkZWZpbmUgQjIwNTZfUlhfUkVTRVJWRURfQUREUjI1CTB4MTkKKyNkZWZpbmUgQjIwNTZfUlhfUkVTRVJWRURfQUREUjI2CTB4MUEKKyNkZWZpbmUgQjIwNTZfUlhfUkVTRVJWRURfQUREUjI3CTB4MUIKKyNkZWZpbmUgQjIwNTZfUlhfUkVTRVJWRURfQUREUjI4CTB4MUMKKyNkZWZpbmUgQjIwNTZfUlhfUkVTRVJWRURfQUREUjI5CTB4MUQKKyNkZWZpbmUgQjIwNTZfUlhfUkVTRVJWRURfQUREUjMwCTB4MUUKKyNkZWZpbmUgQjIwNTZfUlhfUkVTRVJWRURfQUREUjMxCTB4MUYKKyNkZWZpbmUgQjIwNTZfUlhfUlhJUUNBTF9SWE1VWAkJMHgyMAorI2RlZmluZSBCMjA1Nl9SWF9SU1NJX1BVCQkweDIxCisjZGVmaW5lIEIyMDU2X1JYX1JTU0lfU0VMCQkweDIyCisjZGVmaW5lIEIyMDU2X1JYX1JTU0lfR0FJTgkJMHgyMworI2RlZmluZSBCMjA1Nl9SWF9SU1NJX05CX0lEQUMJCTB4MjQKKyNkZWZpbmUgQjIwNTZfUlhfUlNTSV9XQjJJX0lEQUNfMQkweDI1CisjZGVmaW5lIEIyMDU2X1JYX1JTU0lfV0IySV9JREFDXzIJMHgyNgorI2RlZmluZSBCMjA1Nl9SWF9SU1NJX1dCMlFfSURBQ18xCTB4MjcKKyNkZWZpbmUgQjIwNTZfUlhfUlNTSV9XQjJRX0lEQUNfMgkweDI4CisjZGVmaW5lIEIyMDU2X1JYX1JTU0lfUE9MRQkJMHgyOQorI2RlZmluZSBCMjA1Nl9SWF9SU1NJX1dCMV9JREFDCQkweDJBCisjZGVmaW5lIEIyMDU2X1JYX1JTU0lfTUlTQwkJMHgyQgorI2RlZmluZSBCMjA1Nl9SWF9MTkFBX01BU1RFUgkJMHgyQworI2RlZmluZSBCMjA1Nl9SWF9MTkFBX1RVTkUJCTB4MkQKKyNkZWZpbmUgQjIwNTZfUlhfTE5BQV9HQUlOCQkweDJFCisjZGVmaW5lIEIyMDU2X1JYX0xOQV9BX1NMT1BFCQkweDJGCisjZGVmaW5lIEIyMDU2X1JYX0JJQVNQT0xFX0xOQUExX0lEQUMJMHgzMAorI2RlZmluZSBCMjA1Nl9SWF9MTkFBMl9JREFDCQkweDMxCisjZGVmaW5lIEIyMDU2X1JYX0xOQTFBX01JU0MJCTB4MzIKKyNkZWZpbmUgQjIwNTZfUlhfTE5BR19NQVNURVIJCTB4MzMKKyNkZWZpbmUgQjIwNTZfUlhfTE5BR19UVU5FCQkweDM0CisjZGVmaW5lIEIyMDU2X1JYX0xOQUdfR0FJTgkJMHgzNQorI2RlZmluZSBCMjA1Nl9SWF9MTkFfR19TTE9QRQkJMHgzNgorI2RlZmluZSBCMjA1Nl9SWF9CSUFTUE9MRV9MTkFHMV9JREFDCTB4MzcKKyNkZWZpbmUgQjIwNTZfUlhfTE5BRzJfSURBQwkJMHgzOAorI2RlZmluZSBCMjA1Nl9SWF9MTkExR19NSVNDCQkweDM5CisjZGVmaW5lIEIyMDU2X1JYX01JWEFfTUFTVEVSCQkweDNBCisjZGVmaW5lIEIyMDU2X1JYX01JWEFfVkNNCQkweDNCCisjZGVmaW5lIEIyMDU2X1JYX01JWEFfQ1RSTFBUQVQJCTB4M0MKKyNkZWZpbmUgQjIwNTZfUlhfTUlYQV9MT0JfQklBUwkJMHgzRAorI2RlZmluZSBCMjA1Nl9SWF9NSVhBX0NPUkVfSURBQwkJMHgzRQorI2RlZmluZSBCMjA1Nl9SWF9NSVhBX0NNRkJfSURBQwkJMHgzRgorI2RlZmluZSBCMjA1Nl9SWF9NSVhBX0JJQVNfQVVYCQkweDQwCisjZGVmaW5lIEIyMDU2X1JYX01JWEFfQklBU19NQUlOCQkweDQxCisjZGVmaW5lIEIyMDU2X1JYX01JWEFfQklBU19NSVNDCQkweDQyCisjZGVmaW5lIEIyMDU2X1JYX01JWEFfTUFTVF9CSUFTCQkweDQzCisjZGVmaW5lIEIyMDU2X1JYX01JWEdfTUFTVEVSCQkweDQ0CisjZGVmaW5lIEIyMDU2X1JYX01JWEdfVkNNCQkweDQ1CisjZGVmaW5lIEIyMDU2X1JYX01JWEdfQ1RSTFBUQVQJCTB4NDYKKyNkZWZpbmUgQjIwNTZfUlhfTUlYR19MT0JfQklBUwkJMHg0NworI2RlZmluZSBCMjA1Nl9SWF9NSVhHX0NPUkVfSURBQwkJMHg0OAorI2RlZmluZSBCMjA1Nl9SWF9NSVhHX0NNRkJfSURBQwkJMHg0OQorI2RlZmluZSBCMjA1Nl9SWF9NSVhHX0JJQVNfQVVYCQkweDRBCisjZGVmaW5lIEIyMDU2X1JYX01JWEdfQklBU19NQUlOCQkweDRCCisjZGVmaW5lIEIyMDU2X1JYX01JWEdfQklBU19NSVNDCQkweDRDCisjZGVmaW5lIEIyMDU2X1JYX01JWEdfTUFTVF9CSUFTCQkweDRECisjZGVmaW5lIEIyMDU2X1JYX1RJQV9NQVNURVIJCTB4NEUKKyNkZWZpbmUgQjIwNTZfUlhfVElBX0lPUEFNUAkJMHg0RgorI2RlZmluZSBCMjA1Nl9SWF9USUFfUU9QQU1QCQkweDUwCisjZGVmaW5lIEIyMDU2X1JYX1RJQV9JTUlTQwkJMHg1MQorI2RlZmluZSBCMjA1Nl9SWF9USUFfUU1JU0MJCTB4NTIKKyNkZWZpbmUgQjIwNTZfUlhfVElBX0dBSU4JCTB4NTMKKyNkZWZpbmUgQjIwNTZfUlhfVElBX1NQQVJFMQkJMHg1NAorI2RlZmluZSBCMjA1Nl9SWF9USUFfU1BBUkUyCQkweDU1CisjZGVmaW5lIEIyMDU2X1JYX0JCX0xQRl9NQVNURVIJCTB4NTYKKyNkZWZpbmUgQjIwNTZfUlhfQUFDSV9NQVNURVIJCTB4NTcKKyNkZWZpbmUgQjIwNTZfUlhfUlhMUEZfSURBQwkJMHg1OAorI2RlZmluZSBCMjA1Nl9SWF9SWExQRl9PUEFNUEJJQVNfTE9XUQkweDU5CisjZGVmaW5lIEIyMDU2X1JYX1JYTFBGX09QQU1QQklBU19ISUdIUQkweDVBCisjZGVmaW5lIEIyMDU2X1JYX1JYTFBGX0JJQVNfRENDQU5DRUwJMHg1QgorI2RlZmluZSBCMjA1Nl9SWF9SWExQRl9PVVRWQ00JCTB4NUMKKyNkZWZpbmUgQjIwNTZfUlhfUlhMUEZfSU5WQ01fQk9EWQkweDVECisjZGVmaW5lIEIyMDU2X1JYX1JYTFBGX0NDX09QCQkweDVFCisjZGVmaW5lIEIyMDU2X1JYX1JYTFBGX0dBSU4JCTB4NUYKKyNkZWZpbmUgQjIwNTZfUlhfUlhMUEZfUV9CVwkJMHg2MAorI2RlZmluZSBCMjA1Nl9SWF9SWExQRl9IUF9DT1JORVJfQlcJMHg2MQorI2RlZmluZSBCMjA1Nl9SWF9SWExQRl9SQ0NBTF9IUEMJMHg2MgorI2RlZmluZSBCMjA1Nl9SWF9SWEhQRl9PRkYwCQkweDYzCisjZGVmaW5lIEIyMDU2X1JYX1JYSFBGX09GRjEJCTB4NjQKKyNkZWZpbmUgQjIwNTZfUlhfUlhIUEZfT0ZGMgkJMHg2NQorI2RlZmluZSBCMjA1Nl9SWF9SWEhQRl9PRkYzCQkweDY2CisjZGVmaW5lIEIyMDU2X1JYX1JYSFBGX09GRjQJCTB4NjcKKyNkZWZpbmUgQjIwNTZfUlhfUlhIUEZfT0ZGNQkJMHg2OAorI2RlZmluZSBCMjA1Nl9SWF9SWEhQRl9PRkY2CQkweDY5CisjZGVmaW5lIEIyMDU2X1JYX1JYSFBGX09GRjcJCTB4NkEKKyNkZWZpbmUgQjIwNTZfUlhfUlhMUEZfUkNDQUxfTFBDCTB4NkIKKyNkZWZpbmUgQjIwNTZfUlhfUlhMUEZfT0ZGXzAJCTB4NkMKKyNkZWZpbmUgQjIwNTZfUlhfUlhMUEZfT0ZGXzEJCTB4NkQKKyNkZWZpbmUgQjIwNTZfUlhfUlhMUEZfT0ZGXzIJCTB4NkUKKyNkZWZpbmUgQjIwNTZfUlhfUlhMUEZfT0ZGXzMJCTB4NkYKKyNkZWZpbmUgQjIwNTZfUlhfUlhMUEZfT0ZGXzQJCTB4NzAKKyNkZWZpbmUgQjIwNTZfUlhfVU5VU0VECQkJMHg3MQorI2RlZmluZSBCMjA1Nl9SWF9WR0FfTUFTVEVSCQkweDcyCisjZGVmaW5lIEIyMDU2X1JYX1ZHQV9CSUFTCQkweDczCisjZGVmaW5lIEIyMDU2X1JYX1ZHQV9CSUFTX0RDQ0FOQ0VMCTB4NzQKKyNkZWZpbmUgQjIwNTZfUlhfVkdBX0dBSU4JCTB4NzUKKyNkZWZpbmUgQjIwNTZfUlhfVkdBX0hQX0NPUk5FUl9CVwkweDc2CisjZGVmaW5lIEIyMDU2X1JYX1ZHQUJVRl9CSUFTCQkweDc3CisjZGVmaW5lIEIyMDU2X1JYX1ZHQUJVRl9HQUlOX0JXCQkweDc4CisjZGVmaW5lIEIyMDU2X1JYX1RYRkJNSVhfQQkJMHg3OQorI2RlZmluZSBCMjA1Nl9SWF9UWEZCTUlYX0cJCTB4N0EKKyNkZWZpbmUgQjIwNTZfUlhfUlhTUEFSRTEJCTB4N0IKKyNkZWZpbmUgQjIwNTZfUlhfUlhTUEFSRTIJCTB4N0MKKyNkZWZpbmUgQjIwNTZfUlhfUlhTUEFSRTMJCTB4N0QKKyNkZWZpbmUgQjIwNTZfUlhfUlhTUEFSRTQJCTB4N0UKKyNkZWZpbmUgQjIwNTZfUlhfUlhTUEFSRTUJCTB4N0YKKyNkZWZpbmUgQjIwNTZfUlhfUlhTUEFSRTYJCTB4ODAKKyNkZWZpbmUgQjIwNTZfUlhfUlhTUEFSRTcJCTB4ODEKKyNkZWZpbmUgQjIwNTZfUlhfUlhTUEFSRTgJCTB4ODIKKyNkZWZpbmUgQjIwNTZfUlhfUlhTUEFSRTkJCTB4ODMKKyNkZWZpbmUgQjIwNTZfUlhfUlhTUEFSRTEwCQkweDg0CisjZGVmaW5lIEIyMDU2X1JYX1JYU1BBUkUxMQkJMHg4NQorI2RlZmluZSBCMjA1Nl9SWF9SWFNQQVJFMTIJCTB4ODYKKyNkZWZpbmUgQjIwNTZfUlhfUlhTUEFSRTEzCQkweDg3CisjZGVmaW5lIEIyMDU2X1JYX1JYU1BBUkUxNAkJMHg4OAorI2RlZmluZSBCMjA1Nl9SWF9SWFNQQVJFMTUJCTB4ODkKKyNkZWZpbmUgQjIwNTZfUlhfUlhTUEFSRTE2CQkweDhBCisjZGVmaW5lIEIyMDU2X1JYX1NUQVRVU19MTkFBX0dBSU4JMHg4QgorI2RlZmluZSBCMjA1Nl9SWF9TVEFUVVNfTE5BR19HQUlOCTB4OEMKKyNkZWZpbmUgQjIwNTZfUlhfU1RBVFVTX01JWFRJQV9HQUlOCTB4OEQKKyNkZWZpbmUgQjIwNTZfUlhfU1RBVFVTX1JYTFBGX0dBSU4JMHg4RQorI2RlZmluZSBCMjA1Nl9SWF9TVEFUVVNfVkdBX0JVRl9HQUlOCTB4OEYKKyNkZWZpbmUgQjIwNTZfUlhfU1RBVFVTX1JYTFBGX1EJCTB4OTAKKyNkZWZpbmUgQjIwNTZfUlhfU1RBVFVTX1JYTFBGX0JVRl9CVwkweDkxCisjZGVmaW5lIEIyMDU2X1JYX1NUQVRVU19SWExQRl9WR0FfSFBDCTB4OTIKKyNkZWZpbmUgQjIwNTZfUlhfU1RBVFVTX1JYTFBGX1JDCTB4OTMKKyNkZWZpbmUgQjIwNTZfUlhfU1RBVFVTX0hQQ19SQwkJMHg5NAorCisjZGVmaW5lIEIyMDU2X0xOQTFfQV9QVQkJCTB4MDEKKyNkZWZpbmUgQjIwNTZfTE5BMl9BX1BVCQkJMHgwMgorI2RlZmluZSBCMjA1Nl9MTkExX0dfUFUJCQkweDAxCisjZGVmaW5lIEIyMDU2X0xOQTJfR19QVQkJCTB4MDIKKyNkZWZpbmUgQjIwNTZfTUlYQV9QVV9JCQkJMHgwMQorI2RlZmluZSBCMjA1Nl9NSVhBX1BVX1EJCQkweDAyCisjZGVmaW5lIEIyMDU2X01JWEFfUFVfR00JCTB4MTAKKyNkZWZpbmUgQjIwNTZfTUlYR19QVV9JCQkJMHgwMQorI2RlZmluZSBCMjA1Nl9NSVhHX1BVX1EJCQkweDAyCisjZGVmaW5lIEIyMDU2X01JWEdfUFVfR00JCTB4MTAKKyNkZWZpbmUgQjIwNTZfVElBX1BVCQkJMHgwMQorI2RlZmluZSBCMjA1Nl9CQl9MUEZfUFUJCQkweDIwCisjZGVmaW5lIEIyMDU2X1cxX1BVCQkJMHgwMgorI2RlZmluZSBCMjA1Nl9XMl9QVQkJCTB4MDQKKyNkZWZpbmUgQjIwNTZfTkJfUFUJCQkweDA4CisjZGVmaW5lIEIyMDU2X1JTU0lfVzFfU0VMCQkweDAyCisjZGVmaW5lIEIyMDU2X1JTU0lfVzJfU0VMCQkweDA0CisjZGVmaW5lIEIyMDU2X1JTU0lfTkJfU0VMCQkweDA4CisjZGVmaW5lIEIyMDU2X1ZDTV9NQVNLCQkJMHgxQworI2RlZmluZSBCMjA1Nl9SU1NJX1ZDTV9TSElGVAkJMHgwMgorCisjZGVmaW5lIEIyMDU2X1NZTgkJCSgweDAgPDwgMTIpCisjZGVmaW5lIEIyMDU2X1RYMAkJCSgweDIgPDwgMTIpCisjZGVmaW5lIEIyMDU2X1RYMQkJCSgweDMgPDwgMTIpCisjZGVmaW5lIEIyMDU2X1JYMAkJCSgweDYgPDwgMTIpCisjZGVmaW5lIEIyMDU2X1JYMQkJCSgweDcgPDwgMTIpCisjZGVmaW5lIEIyMDU2X0FMTFRYCQkJKDB4RSA8PCAxMikKKyNkZWZpbmUgQjIwNTZfQUxMUlgJCQkoMHhGIDw8IDEyKQorCisjZGVmaW5lIEIyMDU2X1NZTl9SRVNFUlZFRF9BRERSMAkweDAwCisjZGVmaW5lIEIyMDU2X1NZTl9JRENPREUJCTB4MDEKKyNkZWZpbmUgQjIwNTZfU1lOX1JFU0VSVkVEX0FERFIyCTB4MDIKKyNkZWZpbmUgQjIwNTZfU1lOX1JFU0VSVkVEX0FERFIzCTB4MDMKKyNkZWZpbmUgQjIwNTZfU1lOX1JFU0VSVkVEX0FERFI0CTB4MDQKKyNkZWZpbmUgQjIwNTZfU1lOX1JFU0VSVkVEX0FERFI1CTB4MDUKKyNkZWZpbmUgQjIwNTZfU1lOX1JFU0VSVkVEX0FERFI2CTB4MDYKKyNkZWZpbmUgQjIwNTZfU1lOX1JFU0VSVkVEX0FERFI3CTB4MDcKKyNkZWZpbmUgQjIwNTZfU1lOX0NPTV9DVFJMCQkweDA4CisjZGVmaW5lIEIyMDU2X1NZTl9DT01fUFUJCTB4MDkKKyNkZWZpbmUgQjIwNTZfU1lOX0NPTV9PVlIJCTB4MEEKKyNkZWZpbmUgQjIwNTZfU1lOX0NPTV9SRVNFVAkJMHgwQgorI2RlZmluZSBCMjA1Nl9TWU5fQ09NX1JDQUwJCTB4MEMKKyNkZWZpbmUgQjIwNTZfU1lOX0NPTV9SQ19SWExQRgkJMHgwRAorI2RlZmluZSBCMjA1Nl9TWU5fQ09NX1JDX1RYTFBGCQkweDBFCisjZGVmaW5lIEIyMDU2X1NZTl9DT01fUkNfUlhIUEYJCTB4MEYKKyNkZWZpbmUgQjIwNTZfU1lOX1JFU0VSVkVEX0FERFIxNgkweDEwCisjZGVmaW5lIEIyMDU2X1NZTl9SRVNFUlZFRF9BRERSMTcJMHgxMQorI2RlZmluZSBCMjA1Nl9TWU5fUkVTRVJWRURfQUREUjE4CTB4MTIKKyNkZWZpbmUgQjIwNTZfU1lOX1JFU0VSVkVEX0FERFIxOQkweDEzCisjZGVmaW5lIEIyMDU2X1NZTl9SRVNFUlZFRF9BRERSMjAJMHgxNAorI2RlZmluZSBCMjA1Nl9TWU5fUkVTRVJWRURfQUREUjIxCTB4MTUKKyNkZWZpbmUgQjIwNTZfU1lOX1JFU0VSVkVEX0FERFIyMgkweDE2CisjZGVmaW5lIEIyMDU2X1NZTl9SRVNFUlZFRF9BRERSMjMJMHgxNworI2RlZmluZSBCMjA1Nl9TWU5fUkVTRVJWRURfQUREUjI0CTB4MTgKKyNkZWZpbmUgQjIwNTZfU1lOX1JFU0VSVkVEX0FERFIyNQkweDE5CisjZGVmaW5lIEIyMDU2X1NZTl9SRVNFUlZFRF9BRERSMjYJMHgxQQorI2RlZmluZSBCMjA1Nl9TWU5fUkVTRVJWRURfQUREUjI3CTB4MUIKKyNkZWZpbmUgQjIwNTZfU1lOX1JFU0VSVkVEX0FERFIyOAkweDFDCisjZGVmaW5lIEIyMDU2X1NZTl9SRVNFUlZFRF9BRERSMjkJMHgxRAorI2RlZmluZSBCMjA1Nl9TWU5fUkVTRVJWRURfQUREUjMwCTB4MUUKKyNkZWZpbmUgQjIwNTZfU1lOX1JFU0VSVkVEX0FERFIzMQkweDFGCisjZGVmaW5lIEIyMDU2X1NZTl9HUElPX01BU1RFUjEJCTB4MjAKKyNkZWZpbmUgQjIwNTZfU1lOX0dQSU9fTUFTVEVSMgkJMHgyMQorI2RlZmluZSBCMjA1Nl9TWU5fVE9QQklBU19NQVNURVIJMHgyMgorI2RlZmluZSBCMjA1Nl9TWU5fVE9QQklBU19SQ0FMCQkweDIzCisjZGVmaW5lIEIyMDU2X1NZTl9BRkVSRUcJCTB4MjQKKyNkZWZpbmUgQjIwNTZfU1lOX1RFTVBQUk9DU0VOU0UJCTB4MjUKKyNkZWZpbmUgQjIwNTZfU1lOX1RFTVBQUk9DU0VOU0VJREFDCTB4MjYKKyNkZWZpbmUgQjIwNTZfU1lOX1RFTVBQUk9DU0VOU0VSQ0FMCTB4MjcKKyNkZWZpbmUgQjIwNTZfU1lOX0xQTwkJCTB4MjgKKyNkZWZpbmUgQjIwNTZfU1lOX1ZERENBTF9NQVNURVIJCTB4MjkKKyNkZWZpbmUgQjIwNTZfU1lOX1ZERENBTF9JREFDCQkweDJBCisjZGVmaW5lIEIyMDU2X1NZTl9WRERDQUxfU1RBVFVTCQkweDJCCisjZGVmaW5lIEIyMDU2X1NZTl9SQ0FMX01BU1RFUgkJMHgyQworI2RlZmluZSBCMjA1Nl9TWU5fUkNBTF9DT0RFX09VVAkJMHgyRAorI2RlZmluZSBCMjA1Nl9TWU5fUkNDQUxfQ1RSTDAJCTB4MkUKKyNkZWZpbmUgQjIwNTZfU1lOX1JDQ0FMX0NUUkwxCQkweDJGCisjZGVmaW5lIEIyMDU2X1NZTl9SQ0NBTF9DVFJMMgkJMHgzMAorI2RlZmluZSBCMjA1Nl9TWU5fUkNDQUxfQ1RSTDMJCTB4MzEKKyNkZWZpbmUgQjIwNTZfU1lOX1JDQ0FMX0NUUkw0CQkweDMyCisjZGVmaW5lIEIyMDU2X1NZTl9SQ0NBTF9DVFJMNQkJMHgzMworI2RlZmluZSBCMjA1Nl9TWU5fUkNDQUxfQ1RSTDYJCTB4MzQKKyNkZWZpbmUgQjIwNTZfU1lOX1JDQ0FMX0NUUkw3CQkweDM1CisjZGVmaW5lIEIyMDU2X1NZTl9SQ0NBTF9DVFJMOAkJMHgzNgorI2RlZmluZSBCMjA1Nl9TWU5fUkNDQUxfQ1RSTDkJCTB4MzcKKyNkZWZpbmUgQjIwNTZfU1lOX1JDQ0FMX0NUUkwxMAkJMHgzOAorI2RlZmluZSBCMjA1Nl9TWU5fUkNDQUxfQ1RSTDExCQkweDM5CisjZGVmaW5lIEIyMDU2X1NZTl9aQ0FMX1NQQVJFMQkJMHgzQQorI2RlZmluZSBCMjA1Nl9TWU5fWkNBTF9TUEFSRTIJCTB4M0IKKyNkZWZpbmUgQjIwNTZfU1lOX1BMTF9NQVNUMQkJMHgzQworI2RlZmluZSBCMjA1Nl9TWU5fUExMX01BU1QyCQkweDNECisjZGVmaW5lIEIyMDU2X1NZTl9QTExfTUFTVDMJCTB4M0UKKyNkZWZpbmUgQjIwNTZfU1lOX1BMTF9CSUFTX1JFU0VUCTB4M0YKKyNkZWZpbmUgQjIwNTZfU1lOX1BMTF9YVEFMMAkJMHg0MAorI2RlZmluZSBCMjA1Nl9TWU5fUExMX1hUQUwxCQkweDQxCisjZGVmaW5lIEIyMDU2X1NZTl9QTExfWFRBTDMJCTB4NDIKKyNkZWZpbmUgQjIwNTZfU1lOX1BMTF9YVEFMNAkJMHg0MworI2RlZmluZSBCMjA1Nl9TWU5fUExMX1hUQUw1CQkweDQ0CisjZGVmaW5lIEIyMDU2X1NZTl9QTExfWFRBTDYJCTB4NDUKKyNkZWZpbmUgQjIwNTZfU1lOX1BMTF9SRUZESVYJCTB4NDYKKyNkZWZpbmUgQjIwNTZfU1lOX1BMTF9QRkQJCTB4NDcKKyNkZWZpbmUgQjIwNTZfU1lOX1BMTF9DUDEJCTB4NDgKKyNkZWZpbmUgQjIwNTZfU1lOX1BMTF9DUDIJCTB4NDkKKyNkZWZpbmUgQjIwNTZfU1lOX1BMTF9DUDMJCTB4NEEKKyNkZWZpbmUgQjIwNTZfU1lOX1BMTF9MT09QRklMVEVSMQkweDRCCisjZGVmaW5lIEIyMDU2X1NZTl9QTExfTE9PUEZJTFRFUjIJMHg0QworI2RlZmluZSBCMjA1Nl9TWU5fUExMX0xPT1BGSUxURVIzCTB4NEQKKyNkZWZpbmUgQjIwNTZfU1lOX1BMTF9MT09QRklMVEVSNAkweDRFCisjZGVmaW5lIEIyMDU2X1NZTl9QTExfTE9PUEZJTFRFUjUJMHg0RgorI2RlZmluZSBCMjA1Nl9TWU5fUExMX01NRDEJCTB4NTAKKyNkZWZpbmUgQjIwNTZfU1lOX1BMTF9NTUQyCQkweDUxCisjZGVmaW5lIEIyMDU2X1NZTl9QTExfVkNPMQkJMHg1MgorI2RlZmluZSBCMjA1Nl9TWU5fUExMX1ZDTzIJCTB4NTMKKyNkZWZpbmUgQjIwNTZfU1lOX1BMTF9NT05JVE9SMQkJMHg1NAorI2RlZmluZSBCMjA1Nl9TWU5fUExMX01PTklUT1IyCQkweDU1CisjZGVmaW5lIEIyMDU2X1NZTl9QTExfVkNPQ0FMMQkJMHg1NgorI2RlZmluZSBCMjA1Nl9TWU5fUExMX1ZDT0NBTDIJCTB4NTcKKyNkZWZpbmUgQjIwNTZfU1lOX1BMTF9WQ09DQUw0CQkweDU4CisjZGVmaW5lIEIyMDU2X1NZTl9QTExfVkNPQ0FMNQkJMHg1OQorI2RlZmluZSBCMjA1Nl9TWU5fUExMX1ZDT0NBTDYJCTB4NUEKKyNkZWZpbmUgQjIwNTZfU1lOX1BMTF9WQ09DQUw3CQkweDVCCisjZGVmaW5lIEIyMDU2X1NZTl9QTExfVkNPQ0FMOAkJMHg1QworI2RlZmluZSBCMjA1Nl9TWU5fUExMX1ZDT0NBTDkJCTB4NUQKKyNkZWZpbmUgQjIwNTZfU1lOX1BMTF9WQ09DQUwxMAkJMHg1RQorI2RlZmluZSBCMjA1Nl9TWU5fUExMX1ZDT0NBTDExCQkweDVGCisjZGVmaW5lIEIyMDU2X1NZTl9QTExfVkNPQ0FMMTIJCTB4NjAKKyNkZWZpbmUgQjIwNTZfU1lOX1BMTF9WQ09DQUwxMwkJMHg2MQorI2RlZmluZSBCMjA1Nl9TWU5fUExMX1ZSRUcJCTB4NjIKKyNkZWZpbmUgQjIwNTZfU1lOX1BMTF9TVEFUVVMxCQkweDYzCisjZGVmaW5lIEIyMDU2X1NZTl9QTExfU1RBVFVTMgkJMHg2NAorI2RlZmluZSBCMjA1Nl9TWU5fUExMX1NUQVRVUzMJCTB4NjUKKyNkZWZpbmUgQjIwNTZfU1lOX0xPR0VOX1BVMAkJMHg2NgorI2RlZmluZSBCMjA1Nl9TWU5fTE9HRU5fUFUxCQkweDY3CisjZGVmaW5lIEIyMDU2X1NZTl9MT0dFTl9QVTIJCTB4NjgKKyNkZWZpbmUgQjIwNTZfU1lOX0xPR0VOX1BVMwkJMHg2OQorI2RlZmluZSBCMjA1Nl9TWU5fTE9HRU5fUFU1CQkweDZBCisjZGVmaW5lIEIyMDU2X1NZTl9MT0dFTl9QVTYJCTB4NkIKKyNkZWZpbmUgQjIwNTZfU1lOX0xPR0VOX1BVNwkJMHg2QworI2RlZmluZSBCMjA1Nl9TWU5fTE9HRU5fUFU4CQkweDZECisjZGVmaW5lIEIyMDU2X1NZTl9MT0dFTl9CSUFTX1JFU0VUCTB4NkUKKyNkZWZpbmUgQjIwNTZfU1lOX0xPR0VOX1JDQ1IxCQkweDZGCisjZGVmaW5lIEIyMDU2X1NZTl9MT0dFTl9WQ09CVUYxCQkweDcwCisjZGVmaW5lIEIyMDU2X1NZTl9MT0dFTl9NSVhFUjEJCTB4NzEKKyNkZWZpbmUgQjIwNTZfU1lOX0xPR0VOX01JWEVSMgkJMHg3MgorI2RlZmluZSBCMjA1Nl9TWU5fTE9HRU5fQlVGMQkJMHg3MworI2RlZmluZSBCMjA1Nl9TWU5fTE9HRU5CVUYyCQkweDc0CisjZGVmaW5lIEIyMDU2X1NZTl9MT0dFTl9CVUYzCQkweDc1CisjZGVmaW5lIEIyMDU2X1NZTl9MT0dFTl9CVUY0CQkweDc2CisjZGVmaW5lIEIyMDU2X1NZTl9MT0dFTl9ESVYxCQkweDc3CisjZGVmaW5lIEIyMDU2X1NZTl9MT0dFTl9ESVYyCQkweDc4CisjZGVmaW5lIEIyMDU2X1NZTl9MT0dFTl9ESVYzCQkweDc5CisjZGVmaW5lIEIyMDU2X1NZTl9MT0dFTl9BQ0wxCQkweDdBCisjZGVmaW5lIEIyMDU2X1NZTl9MT0dFTl9BQ0wyCQkweDdCCisjZGVmaW5lIEIyMDU2X1NZTl9MT0dFTl9BQ0wzCQkweDdDCisjZGVmaW5lIEIyMDU2X1NZTl9MT0dFTl9BQ0w0CQkweDdECisjZGVmaW5lIEIyMDU2X1NZTl9MT0dFTl9BQ0w1CQkweDdFCisjZGVmaW5lIEIyMDU2X1NZTl9MT0dFTl9BQ0w2CQkweDdGCisjZGVmaW5lIEIyMDU2X1NZTl9MT0dFTl9BQ0xPVVQJCTB4ODAKKyNkZWZpbmUgQjIwNTZfU1lOX0xPR0VOX0FDTENBTDEJCTB4ODEKKyNkZWZpbmUgQjIwNTZfU1lOX0xPR0VOX0FDTENBTDIJCTB4ODIKKyNkZWZpbmUgQjIwNTZfU1lOX0xPR0VOX0FDTENBTDMJCTB4ODMKKyNkZWZpbmUgQjIwNTZfU1lOX0NBTEVOCQkJMHg4NAorI2RlZmluZSBCMjA1Nl9TWU5fTE9HRU5fUEVBS0RFVDEJMHg4NQorI2RlZmluZSBCMjA1Nl9TWU5fTE9HRU5fQ09SRV9BQ0xfT1ZSCTB4ODYKKyNkZWZpbmUgQjIwNTZfU1lOX0xPR0VOX1JYX0RJRkZfQUNMX09WUgkweDg3CisjZGVmaW5lIEIyMDU2X1NZTl9MT0dFTl9UWF9ESUZGX0FDTF9PVlIJMHg4OAorI2RlZmluZSBCMjA1Nl9TWU5fTE9HRU5fUlhfQ01PU19BQ0xfT1ZSCTB4ODkKKyNkZWZpbmUgQjIwNTZfU1lOX0xPR0VOX1RYX0NNT1NfQUNMX09WUgkweDhBCisjZGVmaW5lIEIyMDU2X1NZTl9MT0dFTl9WQ09CVUYyCQkweDhCCisjZGVmaW5lIEIyMDU2X1NZTl9MT0dFTl9NSVhFUjMJCTB4OEMKKyNkZWZpbmUgQjIwNTZfU1lOX0xPR0VOX0JVRjUJCTB4OEQKKyNkZWZpbmUgQjIwNTZfU1lOX0xPR0VOX0JVRjYJCTB4OEUKKyNkZWZpbmUgQjIwNTZfU1lOX0xPR0VOX0NCVUZSWDEJCTB4OEYKKyNkZWZpbmUgQjIwNTZfU1lOX0xPR0VOX0NCVUZSWDIJCTB4OTAKKyNkZWZpbmUgQjIwNTZfU1lOX0xPR0VOX0NCVUZSWDMJCTB4OTEKKyNkZWZpbmUgQjIwNTZfU1lOX0xPR0VOX0NCVUZSWDQJCTB4OTIKKyNkZWZpbmUgQjIwNTZfU1lOX0xPR0VOX0NCVUZUWDEJCTB4OTMKKyNkZWZpbmUgQjIwNTZfU1lOX0xPR0VOX0NCVUZUWDIJCTB4OTQKKyNkZWZpbmUgQjIwNTZfU1lOX0xPR0VOX0NCVUZUWDMJCTB4OTUKKyNkZWZpbmUgQjIwNTZfU1lOX0xPR0VOX0NCVUZUWDQJCTB4OTYKKyNkZWZpbmUgQjIwNTZfU1lOX0xPR0VOX0NNT1NSWDEJCTB4OTcKKyNkZWZpbmUgQjIwNTZfU1lOX0xPR0VOX0NNT1NSWDIJCTB4OTgKKyNkZWZpbmUgQjIwNTZfU1lOX0xPR0VOX0NNT1NSWDMJCTB4OTkKKyNkZWZpbmUgQjIwNTZfU1lOX0xPR0VOX0NNT1NSWDQJCTB4OUEKKyNkZWZpbmUgQjIwNTZfU1lOX0xPR0VOX0NNT1NUWDEJCTB4OUIKKyNkZWZpbmUgQjIwNTZfU1lOX0xPR0VOX0NNT1NUWDIJCTB4OUMKKyNkZWZpbmUgQjIwNTZfU1lOX0xPR0VOX0NNT1NUWDMJCTB4OUQKKyNkZWZpbmUgQjIwNTZfU1lOX0xPR0VOX0NNT1NUWDQJCTB4OUUKKyNkZWZpbmUgQjIwNTZfU1lOX0xPR0VOX1ZDT0JVRjJfT1ZSVkFMCTB4OUYKKyNkZWZpbmUgQjIwNTZfU1lOX0xPR0VOX01JWEVSM19PVlJWQUwJMHhBMAorI2RlZmluZSBCMjA1Nl9TWU5fTE9HRU5fQlVGNV9PVlJWQUwJMHhBMQorI2RlZmluZSBCMjA1Nl9TWU5fTE9HRU5fQlVGNl9PVlJWQUwJMHhBMgorI2RlZmluZSBCMjA1Nl9TWU5fTE9HRU5fQ0JVRlJYMV9PVlJWQUwJMHhBMworI2RlZmluZSBCMjA1Nl9TWU5fTE9HRU5fQ0JVRlJYMl9PVlJWQUwJMHhBNAorI2RlZmluZSBCMjA1Nl9TWU5fTE9HRU5fQ0JVRlJYM19PVlJWQUwJMHhBNQorI2RlZmluZSBCMjA1Nl9TWU5fTE9HRU5fQ0JVRlJYNF9PVlJWQUwJMHhBNgorI2RlZmluZSBCMjA1Nl9TWU5fTE9HRU5fQ0JVRlRYMV9PVlJWQUwJMHhBNworI2RlZmluZSBCMjA1Nl9TWU5fTE9HRU5fQ0JVRlRYMl9PVlJWQUwJMHhBOAorI2RlZmluZSBCMjA1Nl9TWU5fTE9HRU5fQ0JVRlRYM19PVlJWQUwJMHhBOQorI2RlZmluZSBCMjA1Nl9TWU5fTE9HRU5fQ0JVRlRYNF9PVlJWQUwJMHhBQQorI2RlZmluZSBCMjA1Nl9TWU5fTE9HRU5fQ01PU1JYMV9PVlJWQUwJMHhBQgorI2RlZmluZSBCMjA1Nl9TWU5fTE9HRU5fQ01PU1JYMl9PVlJWQUwJMHhBQworI2RlZmluZSBCMjA1Nl9TWU5fTE9HRU5fQ01PU1JYM19PVlJWQUwJMHhBRAorI2RlZmluZSBCMjA1Nl9TWU5fTE9HRU5fQ01PU1JYNF9PVlJWQUwJMHhBRQorI2RlZmluZSBCMjA1Nl9TWU5fTE9HRU5fQ01PU1RYMV9PVlJWQUwJMHhBRgorI2RlZmluZSBCMjA1Nl9TWU5fTE9HRU5fQ01PU1RYMl9PVlJWQUwJMHhCMAorI2RlZmluZSBCMjA1Nl9TWU5fTE9HRU5fQ01PU1RYM19PVlJWQUwJMHhCMQorI2RlZmluZSBCMjA1Nl9TWU5fTE9HRU5fQ01PU1RYNF9PVlJWQUwJMHhCMgorI2RlZmluZSBCMjA1Nl9TWU5fTE9HRU5fQUNMX1dBSVRDTlQJMHhCMworI2RlZmluZSBCMjA1Nl9TWU5fTE9HRU5fQ09SRV9DQUxWQUxJRAkweEI0CisjZGVmaW5lIEIyMDU2X1NZTl9MT0dFTl9SWF9DTU9TX0NBTFZBTElECTB4QjUKKyNkZWZpbmUgQjIwNTZfU1lOX0xPR0VOX1RYX0NNT1NfVkFMSUQJMHhCNgorCisjZGVmaW5lIEIyMDU2X1RYX1JFU0VSVkVEX0FERFIwCQkweDAwCisjZGVmaW5lIEIyMDU2X1RYX0lEQ09ERQkJCTB4MDEKKyNkZWZpbmUgQjIwNTZfVFhfUkVTRVJWRURfQUREUjIJCTB4MDIKKyNkZWZpbmUgQjIwNTZfVFhfUkVTRVJWRURfQUREUjMJCTB4MDMKKyNkZWZpbmUgQjIwNTZfVFhfUkVTRVJWRURfQUREUjQJCTB4MDQKKyNkZWZpbmUgQjIwNTZfVFhfUkVTRVJWRURfQUREUjUJCTB4MDUKKyNkZWZpbmUgQjIwNTZfVFhfUkVTRVJWRURfQUREUjYJCTB4MDYKKyNkZWZpbmUgQjIwNTZfVFhfUkVTRVJWRURfQUREUjcJCTB4MDcKKyNkZWZpbmUgQjIwNTZfVFhfQ09NX0NUUkwJCTB4MDgKKyNkZWZpbmUgQjIwNTZfVFhfQ09NX1BVCQkJMHgwOQorI2RlZmluZSBCMjA1Nl9UWF9DT01fT1ZSCQkweDBBCisjZGVmaW5lIEIyMDU2X1RYX0NPTV9SRVNFVAkJMHgwQgorI2RlZmluZSBCMjA1Nl9UWF9DT01fUkNBTAkJMHgwQworI2RlZmluZSBCMjA1Nl9UWF9DT01fUkNfUlhMUEYJCTB4MEQKKyNkZWZpbmUgQjIwNTZfVFhfQ09NX1JDX1RYTFBGCQkweDBFCisjZGVmaW5lIEIyMDU2X1RYX0NPTV9SQ19SWEhQRgkJMHgwRgorI2RlZmluZSBCMjA1Nl9UWF9SRVNFUlZFRF9BRERSMTYJMHgxMAorI2RlZmluZSBCMjA1Nl9UWF9SRVNFUlZFRF9BRERSMTcJMHgxMQorI2RlZmluZSBCMjA1Nl9UWF9SRVNFUlZFRF9BRERSMTgJMHgxMgorI2RlZmluZSBCMjA1Nl9UWF9SRVNFUlZFRF9BRERSMTkJMHgxMworI2RlZmluZSBCMjA1Nl9UWF9SRVNFUlZFRF9BRERSMjAJMHgxNAorI2RlZmluZSBCMjA1Nl9UWF9SRVNFUlZFRF9BRERSMjEJMHgxNQorI2RlZmluZSBCMjA1Nl9UWF9SRVNFUlZFRF9BRERSMjIJMHgxNgorI2RlZmluZSBCMjA1Nl9UWF9SRVNFUlZFRF9BRERSMjMJMHgxNworI2RlZmluZSBCMjA1Nl9UWF9SRVNFUlZFRF9BRERSMjQJMHgxOAorI2RlZmluZSBCMjA1Nl9UWF9SRVNFUlZFRF9BRERSMjUJMHgxOQorI2RlZmluZSBCMjA1Nl9UWF9SRVNFUlZFRF9BRERSMjYJMHgxQQorI2RlZmluZSBCMjA1Nl9UWF9SRVNFUlZFRF9BRERSMjcJMHgxQgorI2RlZmluZSBCMjA1Nl9UWF9SRVNFUlZFRF9BRERSMjgJMHgxQworI2RlZmluZSBCMjA1Nl9UWF9SRVNFUlZFRF9BRERSMjkJMHgxRAorI2RlZmluZSBCMjA1Nl9UWF9SRVNFUlZFRF9BRERSMzAJMHgxRQorI2RlZmluZSBCMjA1Nl9UWF9SRVNFUlZFRF9BRERSMzEJMHgxRgorI2RlZmluZSBCMjA1Nl9UWF9JUUNBTF9HQUlOX0JXCQkweDIwCisjZGVmaW5lIEIyMDU2X1RYX0xPRlRfRklORV9JCQkweDIxCisjZGVmaW5lIEIyMDU2X1RYX0xPRlRfRklORV9RCQkweDIyCisjZGVmaW5lIEIyMDU2X1RYX0xPRlRfQ09BUlNFX0kJCTB4MjMKKyNkZWZpbmUgQjIwNTZfVFhfTE9GVF9DT0FSU0VfUQkJMHgyNAorI2RlZmluZSBCMjA1Nl9UWF9UWF9DT01fTUFTVEVSMQkJMHgyNQorI2RlZmluZSBCMjA1Nl9UWF9UWF9DT01fTUFTVEVSMgkJMHgyNgorI2RlZmluZSBCMjA1Nl9UWF9SWElRQ0FMX1RYTVVYCQkweDI3CisjZGVmaW5lIEIyMDU2X1RYX1RYX1NTSV9NQVNURVIJCTB4MjgKKyNkZWZpbmUgQjIwNTZfVFhfSVFDQUxfVkNNX0hHCQkweDI5CisjZGVmaW5lIEIyMDU2X1RYX0lRQ0FMX0lEQUMJCTB4MkEKKyNkZWZpbmUgQjIwNTZfVFhfVFNTSV9WQ00JCTB4MkIKKyNkZWZpbmUgQjIwNTZfVFhfVFhfQU1QX0RFVAkJMHgyQworI2RlZmluZSBCMjA1Nl9UWF9UWF9TU0lfTVVYCQkweDJECisjZGVmaW5lIEIyMDU2X1RYX1RTU0lBCQkJMHgyRQorI2RlZmluZSBCMjA1Nl9UWF9UU1NJRwkJCTB4MkYKKyNkZWZpbmUgQjIwNTZfVFhfVFNTSV9NSVNDMQkJMHgzMAorI2RlZmluZSBCMjA1Nl9UWF9UU1NJX01JU0MyCQkweDMxCisjZGVmaW5lIEIyMDU2X1RYX1RTU0lfTUlTQzMJCTB4MzIKKyNkZWZpbmUgQjIwNTZfVFhfUEFfU1BBUkUxCQkweDMzCisjZGVmaW5lIEIyMDU2X1RYX1BBX1NQQVJFMgkJMHgzNAorI2RlZmluZSBCMjA1Nl9UWF9JTlRQQUFfTUFTVEVSCQkweDM1CisjZGVmaW5lIEIyMDU2X1RYX0lOVFBBQV9HQUlOCQkweDM2CisjZGVmaW5lIEIyMDU2X1RYX0lOVFBBQV9CT09TVF9UVU5FCTB4MzcKKyNkZWZpbmUgQjIwNTZfVFhfSU5UUEFBX0lBVVhfU1RBVAkweDM4CisjZGVmaW5lIEIyMDU2X1RYX0lOVFBBQV9JQVVYX0RZTgkweDM5CisjZGVmaW5lIEIyMDU2X1RYX0lOVFBBQV9JTUFJTl9TVEFUCTB4M0EKKyNkZWZpbmUgQjIwNTZfVFhfSU5UUEFBX0lNQUlOX0RZTgkweDNCCisjZGVmaW5lIEIyMDU2X1RYX0lOVFBBQV9DQVNDQklBUwkweDNDCisjZGVmaW5lIEIyMDU2X1RYX0lOVFBBQV9QQVNMT1BFCQkweDNECisjZGVmaW5lIEIyMDU2X1RYX0lOVFBBQV9QQV9NSVNDCQkweDNFCisjZGVmaW5lIEIyMDU2X1RYX0lOVFBBR19NQVNURVIJCTB4M0YKKyNkZWZpbmUgQjIwNTZfVFhfSU5UUEFHX0dBSU4JCTB4NDAKKyNkZWZpbmUgQjIwNTZfVFhfSU5UUEFHX0JPT1NUX1RVTkUJMHg0MQorI2RlZmluZSBCMjA1Nl9UWF9JTlRQQUdfSUFVWF9TVEFUCTB4NDIKKyNkZWZpbmUgQjIwNTZfVFhfSU5UUEFHX0lBVVhfRFlOCTB4NDMKKyNkZWZpbmUgQjIwNTZfVFhfSU5UUEFHX0lNQUlOX1NUQVQJMHg0NAorI2RlZmluZSBCMjA1Nl9UWF9JTlRQQUdfSU1BSU5fRFlOCTB4NDUKKyNkZWZpbmUgQjIwNTZfVFhfSU5UUEFHX0NBU0NCSUFTCTB4NDYKKyNkZWZpbmUgQjIwNTZfVFhfSU5UUEFHX1BBU0xPUEUJCTB4NDcKKyNkZWZpbmUgQjIwNTZfVFhfSU5UUEFHX1BBX01JU0MJCTB4NDgKKyNkZWZpbmUgQjIwNTZfVFhfUEFEQV9NQVNURVIJCTB4NDkKKyNkZWZpbmUgQjIwNTZfVFhfUEFEQV9JREFDCQkweDRBCisjZGVmaW5lIEIyMDU2X1RYX1BBREFfQ0FTQ0JJQVMJCTB4NEIKKyNkZWZpbmUgQjIwNTZfVFhfUEFEQV9HQUlOCQkweDRDCisjZGVmaW5lIEIyMDU2X1RYX1BBREFfQk9PU1RfVFVORQkweDRECisjZGVmaW5lIEIyMDU2X1RYX1BBREFfU0xPUEUJCTB4NEUKKyNkZWZpbmUgQjIwNTZfVFhfUEFER19NQVNURVIJCTB4NEYKKyNkZWZpbmUgQjIwNTZfVFhfUEFER19JREFDCQkweDUwCisjZGVmaW5lIEIyMDU2X1RYX1BBREdfQ0FTQ0JJQVMJCTB4NTEKKyNkZWZpbmUgQjIwNTZfVFhfUEFER19HQUlOCQkweDUyCisjZGVmaW5lIEIyMDU2X1RYX1BBREdfQk9PU1RfVFVORQkweDUzCisjZGVmaW5lIEIyMDU2X1RYX1BBREdfU0xPUEUJCTB4NTQKKyNkZWZpbmUgQjIwNTZfVFhfUEdBQV9NQVNURVIJCTB4NTUKKyNkZWZpbmUgQjIwNTZfVFhfUEdBQV9JREFDCQkweDU2CisjZGVmaW5lIEIyMDU2X1RYX1BHQUFfR0FJTgkJMHg1NworI2RlZmluZSBCMjA1Nl9UWF9QR0FBX0JPT1NUX1RVTkUJMHg1OAorI2RlZmluZSBCMjA1Nl9UWF9QR0FBX1NMT1BFCQkweDU5CisjZGVmaW5lIEIyMDU2X1RYX1BHQUFfTUlTQwkJMHg1QQorI2RlZmluZSBCMjA1Nl9UWF9QR0FHX01BU1RFUgkJMHg1QgorI2RlZmluZSBCMjA1Nl9UWF9QR0FHX0lEQUMJCTB4NUMKKyNkZWZpbmUgQjIwNTZfVFhfUEdBR19HQUlOCQkweDVECisjZGVmaW5lIEIyMDU2X1RYX1BHQUdfQk9PU1RfVFVORQkweDVFCisjZGVmaW5lIEIyMDU2X1RYX1BHQUdfU0xPUEUJCTB4NUYKKyNkZWZpbmUgQjIwNTZfVFhfUEdBR19NSVNDCQkweDYwCisjZGVmaW5lIEIyMDU2X1RYX01JWEFfTUFTVEVSCQkweDYxCisjZGVmaW5lIEIyMDU2X1RYX01JWEFfQk9PU1RfVFVORQkweDYyCisjZGVmaW5lIEIyMDU2X1RYX01JWEcJCQkweDYzCisjZGVmaW5lIEIyMDU2X1RYX01JWEdfQk9PU1RfVFVORQkweDY0CisjZGVmaW5lIEIyMDU2X1RYX0JCX0dNX01BU1RFUgkJMHg2NQorI2RlZmluZSBCMjA1Nl9UWF9HTUJCX0dNCQkweDY2CisjZGVmaW5lIEIyMDU2X1RYX0dNQkJfSURBQwkJMHg2NworI2RlZmluZSBCMjA1Nl9UWF9UWExQRl9NQVNURVIJCTB4NjgKKyNkZWZpbmUgQjIwNTZfVFhfVFhMUEZfUkNDQUwJCTB4NjkKKyNkZWZpbmUgQjIwNTZfVFhfVFhMUEZfUkNDQUxfT0ZGMAkweDZBCisjZGVmaW5lIEIyMDU2X1RYX1RYTFBGX1JDQ0FMX09GRjEJMHg2QgorI2RlZmluZSBCMjA1Nl9UWF9UWExQRl9SQ0NBTF9PRkYyCTB4NkMKKyNkZWZpbmUgQjIwNTZfVFhfVFhMUEZfUkNDQUxfT0ZGMwkweDZECisjZGVmaW5lIEIyMDU2X1RYX1RYTFBGX1JDQ0FMX09GRjQJMHg2RQorI2RlZmluZSBCMjA1Nl9UWF9UWExQRl9SQ0NBTF9PRkY1CTB4NkYKKyNkZWZpbmUgQjIwNTZfVFhfVFhMUEZfUkNDQUxfT0ZGNgkweDcwCisjZGVmaW5lIEIyMDU2X1RYX1RYTFBGX0JXCQkweDcxCisjZGVmaW5lIEIyMDU2X1RYX1RYTFBGX0dBSU4JCTB4NzIKKyNkZWZpbmUgQjIwNTZfVFhfVFhMUEZfSURBQwkJMHg3MworI2RlZmluZSBCMjA1Nl9UWF9UWExQRl9JREFDXzAJCTB4NzQKKyNkZWZpbmUgQjIwNTZfVFhfVFhMUEZfSURBQ18xCQkweDc1CisjZGVmaW5lIEIyMDU2X1RYX1RYTFBGX0lEQUNfMgkJMHg3NgorI2RlZmluZSBCMjA1Nl9UWF9UWExQRl9JREFDXzMJCTB4NzcKKyNkZWZpbmUgQjIwNTZfVFhfVFhMUEZfSURBQ180CQkweDc4CisjZGVmaW5lIEIyMDU2X1RYX1RYTFBGX0lEQUNfNQkJMHg3OQorI2RlZmluZSBCMjA1Nl9UWF9UWExQRl9JREFDXzYJCTB4N0EKKyNkZWZpbmUgQjIwNTZfVFhfVFhMUEZfT1BBTVBfSURBQwkweDdCCisjZGVmaW5lIEIyMDU2X1RYX1RYTFBGX01JU0MJCTB4N0MKKyNkZWZpbmUgQjIwNTZfVFhfVFhTUEFSRTEJCTB4N0QKKyNkZWZpbmUgQjIwNTZfVFhfVFhTUEFSRTIJCTB4N0UKKyNkZWZpbmUgQjIwNTZfVFhfVFhTUEFSRTMJCTB4N0YKKyNkZWZpbmUgQjIwNTZfVFhfVFhTUEFSRTQJCTB4ODAKKyNkZWZpbmUgQjIwNTZfVFhfVFhTUEFSRTUJCTB4ODEKKyNkZWZpbmUgQjIwNTZfVFhfVFhTUEFSRTYJCTB4ODIKKyNkZWZpbmUgQjIwNTZfVFhfVFhTUEFSRTcJCTB4ODMKKyNkZWZpbmUgQjIwNTZfVFhfVFhTUEFSRTgJCTB4ODQKKyNkZWZpbmUgQjIwNTZfVFhfVFhTUEFSRTkJCTB4ODUKKyNkZWZpbmUgQjIwNTZfVFhfVFhTUEFSRTEwCQkweDg2CisjZGVmaW5lIEIyMDU2X1RYX1RYU1BBUkUxMQkJMHg4NworI2RlZmluZSBCMjA1Nl9UWF9UWFNQQVJFMTIJCTB4ODgKKyNkZWZpbmUgQjIwNTZfVFhfVFhTUEFSRTEzCQkweDg5CisjZGVmaW5lIEIyMDU2X1RYX1RYU1BBUkUxNAkJMHg4QQorI2RlZmluZSBCMjA1Nl9UWF9UWFNQQVJFMTUJCTB4OEIKKyNkZWZpbmUgQjIwNTZfVFhfVFhTUEFSRTE2CQkweDhDCisjZGVmaW5lIEIyMDU2X1RYX1NUQVRVU19JTlRQQV9HQUlOCTB4OEQKKyNkZWZpbmUgQjIwNTZfVFhfU1RBVFVTX1BBRF9HQUlOCTB4OEUKKyNkZWZpbmUgQjIwNTZfVFhfU1RBVFVTX1BHQV9HQUlOCTB4OEYKKyNkZWZpbmUgQjIwNTZfVFhfU1RBVFVTX0dNX1RYTFBGX0dBSU4JMHg5MAorI2RlZmluZSBCMjA1Nl9UWF9TVEFUVVNfVFhMUEZfQlcJMHg5MQorI2RlZmluZSBCMjA1Nl9UWF9TVEFUVVNfVFhMUEZfUkMJMHg5MgorI2RlZmluZSBCMjA1Nl9UWF9HTUJCX0lEQUMwCQkweDkzCisjZGVmaW5lIEIyMDU2X1RYX0dNQkJfSURBQzEJCTB4OTQKKyNkZWZpbmUgQjIwNTZfVFhfR01CQl9JREFDMgkJMHg5NQorI2RlZmluZSBCMjA1Nl9UWF9HTUJCX0lEQUMzCQkweDk2CisjZGVmaW5lIEIyMDU2X1RYX0dNQkJfSURBQzQJCTB4OTcKKyNkZWZpbmUgQjIwNTZfVFhfR01CQl9JREFDNQkJMHg5OAorI2RlZmluZSBCMjA1Nl9UWF9HTUJCX0lEQUM2CQkweDk5CisjZGVmaW5lIEIyMDU2X1RYX0dNQkJfSURBQzcJCTB4OUEKKworI2RlZmluZSBCMjA1Nl9SWF9SRVNFUlZFRF9BRERSMAkJMHgwMAorI2RlZmluZSBCMjA1Nl9SWF9JRENPREUJCQkweDAxCisjZGVmaW5lIEIyMDU2X1JYX1JFU0VSVkVEX0FERFIyCQkweDAyCisjZGVmaW5lIEIyMDU2X1JYX1JFU0VSVkVEX0FERFIzCQkweDAzCisjZGVmaW5lIEIyMDU2X1JYX1JFU0VSVkVEX0FERFI0CQkweDA0CisjZGVmaW5lIEIyMDU2X1JYX1JFU0VSVkVEX0FERFI1CQkweDA1CisjZGVmaW5lIEIyMDU2X1JYX1JFU0VSVkVEX0FERFI2CQkweDA2CisjZGVmaW5lIEIyMDU2X1JYX1JFU0VSVkVEX0FERFI3CQkweDA3CisjZGVmaW5lIEIyMDU2X1JYX0NPTV9DVFJMCQkweDA4CisjZGVmaW5lIEIyMDU2X1JYX0NPTV9QVQkJCTB4MDkKKyNkZWZpbmUgQjIwNTZfUlhfQ09NX09WUgkJMHgwQQorI2RlZmluZSBCMjA1Nl9SWF9DT01fUkVTRVQJCTB4MEIKKyNkZWZpbmUgQjIwNTZfUlhfQ09NX1JDQUwJCTB4MEMKKyNkZWZpbmUgQjIwNTZfUlhfQ09NX1JDX1JYTFBGCQkweDBECisjZGVmaW5lIEIyMDU2X1JYX0NPTV9SQ19UWExQRgkJMHgwRQorI2RlZmluZSBCMjA1Nl9SWF9DT01fUkNfUlhIUEYJCTB4MEYKKyNkZWZpbmUgQjIwNTZfUlhfUkVTRVJWRURfQUREUjE2CTB4MTAKKyNkZWZpbmUgQjIwNTZfUlhfUkVTRVJWRURfQUREUjE3CTB4MTEKKyNkZWZpbmUgQjIwNTZfUlhfUkVTRVJWRURfQUREUjE4CTB4MTIKKyNkZWZpbmUgQjIwNTZfUlhfUkVTRVJWRURfQUREUjE5CTB4MTMKKyNkZWZpbmUgQjIwNTZfUlhfUkVTRVJWRURfQUREUjIwCTB4MTQKKyNkZWZpbmUgQjIwNTZfUlhfUkVTRVJWRURfQUREUjIxCTB4MTUKKyNkZWZpbmUgQjIwNTZfUlhfUkVTRVJWRURfQUREUjIyCTB4MTYKKyNkZWZpbmUgQjIwNTZfUlhfUkVTRVJWRURfQUREUjIzCTB4MTcKKyNkZWZpbmUgQjIwNTZfUlhfUkVTRVJWRURfQUREUjI0CTB4MTgKKyNkZWZpbmUgQjIwNTZfUlhfUkVTRVJWRURfQUREUjI1CTB4MTkKKyNkZWZpbmUgQjIwNTZfUlhfUkVTRVJWRURfQUREUjI2CTB4MUEKKyNkZWZpbmUgQjIwNTZfUlhfUkVTRVJWRURfQUREUjI3CTB4MUIKKyNkZWZpbmUgQjIwNTZfUlhfUkVTRVJWRURfQUREUjI4CTB4MUMKKyNkZWZpbmUgQjIwNTZfUlhfUkVTRVJWRURfQUREUjI5CTB4MUQKKyNkZWZpbmUgQjIwNTZfUlhfUkVTRVJWRURfQUREUjMwCTB4MUUKKyNkZWZpbmUgQjIwNTZfUlhfUkVTRVJWRURfQUREUjMxCTB4MUYKKyNkZWZpbmUgQjIwNTZfUlhfUlhJUUNBTF9SWE1VWAkJMHgyMAorI2RlZmluZSBCMjA1Nl9SWF9SU1NJX1BVCQkweDIxCisjZGVmaW5lIEIyMDU2X1JYX1JTU0lfU0VMCQkweDIyCisjZGVmaW5lIEIyMDU2X1JYX1JTU0lfR0FJTgkJMHgyMworI2RlZmluZSBCMjA1Nl9SWF9SU1NJX05CX0lEQUMJCTB4MjQKKyNkZWZpbmUgQjIwNTZfUlhfUlNTSV9XQjJJX0lEQUNfMQkweDI1CisjZGVmaW5lIEIyMDU2X1JYX1JTU0lfV0IySV9JREFDXzIJMHgyNgorI2RlZmluZSBCMjA1Nl9SWF9SU1NJX1dCMlFfSURBQ18xCTB4MjcKKyNkZWZpbmUgQjIwNTZfUlhfUlNTSV9XQjJRX0lEQUNfMgkweDI4CisjZGVmaW5lIEIyMDU2X1JYX1JTU0lfUE9MRQkJMHgyOQorI2RlZmluZSBCMjA1Nl9SWF9SU1NJX1dCMV9JREFDCQkweDJBCisjZGVmaW5lIEIyMDU2X1JYX1JTU0lfTUlTQwkJMHgyQgorI2RlZmluZSBCMjA1Nl9SWF9MTkFBX01BU1RFUgkJMHgyQworI2RlZmluZSBCMjA1Nl9SWF9MTkFBX1RVTkUJCTB4MkQKKyNkZWZpbmUgQjIwNTZfUlhfTE5BQV9HQUlOCQkweDJFCisjZGVmaW5lIEIyMDU2X1JYX0xOQV9BX1NMT1BFCQkweDJGCisjZGVmaW5lIEIyMDU2X1JYX0JJQVNQT0xFX0xOQUExX0lEQUMJMHgzMAorI2RlZmluZSBCMjA1Nl9SWF9MTkFBMl9JREFDCQkweDMxCisjZGVmaW5lIEIyMDU2X1JYX0xOQTFBX01JU0MJCTB4MzIKKyNkZWZpbmUgQjIwNTZfUlhfTE5BR19NQVNURVIJCTB4MzMKKyNkZWZpbmUgQjIwNTZfUlhfTE5BR19UVU5FCQkweDM0CisjZGVmaW5lIEIyMDU2X1JYX0xOQUdfR0FJTgkJMHgzNQorI2RlZmluZSBCMjA1Nl9SWF9MTkFfR19TTE9QRQkJMHgzNgorI2RlZmluZSBCMjA1Nl9SWF9CSUFTUE9MRV9MTkFHMV9JREFDCTB4MzcKKyNkZWZpbmUgQjIwNTZfUlhfTE5BRzJfSURBQwkJMHgzOAorI2RlZmluZSBCMjA1Nl9SWF9MTkExR19NSVNDCQkweDM5CisjZGVmaW5lIEIyMDU2X1JYX01JWEFfTUFTVEVSCQkweDNBCisjZGVmaW5lIEIyMDU2X1JYX01JWEFfVkNNCQkweDNCCisjZGVmaW5lIEIyMDU2X1JYX01JWEFfQ1RSTFBUQVQJCTB4M0MKKyNkZWZpbmUgQjIwNTZfUlhfTUlYQV9MT0JfQklBUwkJMHgzRAorI2RlZmluZSBCMjA1Nl9SWF9NSVhBX0NPUkVfSURBQwkJMHgzRQorI2RlZmluZSBCMjA1Nl9SWF9NSVhBX0NNRkJfSURBQwkJMHgzRgorI2RlZmluZSBCMjA1Nl9SWF9NSVhBX0JJQVNfQVVYCQkweDQwCisjZGVmaW5lIEIyMDU2X1JYX01JWEFfQklBU19NQUlOCQkweDQxCisjZGVmaW5lIEIyMDU2X1JYX01JWEFfQklBU19NSVNDCQkweDQyCisjZGVmaW5lIEIyMDU2X1JYX01JWEFfTUFTVF9CSUFTCQkweDQzCisjZGVmaW5lIEIyMDU2X1JYX01JWEdfTUFTVEVSCQkweDQ0CisjZGVmaW5lIEIyMDU2X1JYX01JWEdfVkNNCQkweDQ1CisjZGVmaW5lIEIyMDU2X1JYX01JWEdfQ1RSTFBUQVQJCTB4NDYKKyNkZWZpbmUgQjIwNTZfUlhfTUlYR19MT0JfQklBUwkJMHg0NworI2RlZmluZSBCMjA1Nl9SWF9NSVhHX0NPUkVfSURBQwkJMHg0OAorI2RlZmluZSBCMjA1Nl9SWF9NSVhHX0NNRkJfSURBQwkJMHg0OQorI2RlZmluZSBCMjA1Nl9SWF9NSVhHX0JJQVNfQVVYCQkweDRBCisjZGVmaW5lIEIyMDU2X1JYX01JWEdfQklBU19NQUlOCQkweDRCCisjZGVmaW5lIEIyMDU2X1JYX01JWEdfQklBU19NSVNDCQkweDRDCisjZGVmaW5lIEIyMDU2X1JYX01JWEdfTUFTVF9CSUFTCQkweDRECisjZGVmaW5lIEIyMDU2X1JYX1RJQV9NQVNURVIJCTB4NEUKKyNkZWZpbmUgQjIwNTZfUlhfVElBX0lPUEFNUAkJMHg0RgorI2RlZmluZSBCMjA1Nl9SWF9USUFfUU9QQU1QCQkweDUwCisjZGVmaW5lIEIyMDU2X1JYX1RJQV9JTUlTQwkJMHg1MQorI2RlZmluZSBCMjA1Nl9SWF9USUFfUU1JU0MJCTB4NTIKKyNkZWZpbmUgQjIwNTZfUlhfVElBX0dBSU4JCTB4NTMKKyNkZWZpbmUgQjIwNTZfUlhfVElBX1NQQVJFMQkJMHg1NAorI2RlZmluZSBCMjA1Nl9SWF9USUFfU1BBUkUyCQkweDU1CisjZGVmaW5lIEIyMDU2X1JYX0JCX0xQRl9NQVNURVIJCTB4NTYKKyNkZWZpbmUgQjIwNTZfUlhfQUFDSV9NQVNURVIJCTB4NTcKKyNkZWZpbmUgQjIwNTZfUlhfUlhMUEZfSURBQwkJMHg1OAorI2RlZmluZSBCMjA1Nl9SWF9SWExQRl9PUEFNUEJJQVNfTE9XUQkweDU5CisjZGVmaW5lIEIyMDU2X1JYX1JYTFBGX09QQU1QQklBU19ISUdIUQkweDVBCisjZGVmaW5lIEIyMDU2X1JYX1JYTFBGX0JJQVNfRENDQU5DRUwJMHg1QgorI2RlZmluZSBCMjA1Nl9SWF9SWExQRl9PVVRWQ00JCTB4NUMKKyNkZWZpbmUgQjIwNTZfUlhfUlhMUEZfSU5WQ01fQk9EWQkweDVECisjZGVmaW5lIEIyMDU2X1JYX1JYTFBGX0NDX09QCQkweDVFCisjZGVmaW5lIEIyMDU2X1JYX1JYTFBGX0dBSU4JCTB4NUYKKyNkZWZpbmUgQjIwNTZfUlhfUlhMUEZfUV9CVwkJMHg2MAorI2RlZmluZSBCMjA1Nl9SWF9SWExQRl9IUF9DT1JORVJfQlcJMHg2MQorI2RlZmluZSBCMjA1Nl9SWF9SWExQRl9SQ0NBTF9IUEMJMHg2MgorI2RlZmluZSBCMjA1Nl9SWF9SWEhQRl9PRkYwCQkweDYzCisjZGVmaW5lIEIyMDU2X1JYX1JYSFBGX09GRjEJCTB4NjQKKyNkZWZpbmUgQjIwNTZfUlhfUlhIUEZfT0ZGMgkJMHg2NQorI2RlZmluZSBCMjA1Nl9SWF9SWEhQRl9PRkYzCQkweDY2CisjZGVmaW5lIEIyMDU2X1JYX1JYSFBGX09GRjQJCTB4NjcKKyNkZWZpbmUgQjIwNTZfUlhfUlhIUEZfT0ZGNQkJMHg2OAorI2RlZmluZSBCMjA1Nl9SWF9SWEhQRl9PRkY2CQkweDY5CisjZGVmaW5lIEIyMDU2X1JYX1JYSFBGX09GRjcJCTB4NkEKKyNkZWZpbmUgQjIwNTZfUlhfUlhMUEZfUkNDQUxfTFBDCTB4NkIKKyNkZWZpbmUgQjIwNTZfUlhfUlhMUEZfT0ZGXzAJCTB4NkMKKyNkZWZpbmUgQjIwNTZfUlhfUlhMUEZfT0ZGXzEJCTB4NkQKKyNkZWZpbmUgQjIwNTZfUlhfUlhMUEZfT0ZGXzIJCTB4NkUKKyNkZWZpbmUgQjIwNTZfUlhfUlhMUEZfT0ZGXzMJCTB4NkYKKyNkZWZpbmUgQjIwNTZfUlhfUlhMUEZfT0ZGXzQJCTB4NzAKKyNkZWZpbmUgQjIwNTZfUlhfVU5VU0VECQkJMHg3MQorI2RlZmluZSBCMjA1Nl9SWF9WR0FfTUFTVEVSCQkweDcyCisjZGVmaW5lIEIyMDU2X1JYX1ZHQV9CSUFTCQkweDczCisjZGVmaW5lIEIyMDU2X1JYX1ZHQV9CSUFTX0RDQ0FOQ0VMCTB4NzQKKyNkZWZpbmUgQjIwNTZfUlhfVkdBX0dBSU4JCTB4NzUKKyNkZWZpbmUgQjIwNTZfUlhfVkdBX0hQX0NPUk5FUl9CVwkweDc2CisjZGVmaW5lIEIyMDU2X1JYX1ZHQUJVRl9CSUFTCQkweDc3CisjZGVmaW5lIEIyMDU2X1JYX1ZHQUJVRl9HQUlOX0JXCQkweDc4CisjZGVmaW5lIEIyMDU2X1JYX1RYRkJNSVhfQQkJMHg3OQorI2RlZmluZSBCMjA1Nl9SWF9UWEZCTUlYX0cJCTB4N0EKKyNkZWZpbmUgQjIwNTZfUlhfUlhTUEFSRTEJCTB4N0IKKyNkZWZpbmUgQjIwNTZfUlhfUlhTUEFSRTIJCTB4N0MKKyNkZWZpbmUgQjIwNTZfUlhfUlhTUEFSRTMJCTB4N0QKKyNkZWZpbmUgQjIwNTZfUlhfUlhTUEFSRTQJCTB4N0UKKyNkZWZpbmUgQjIwNTZfUlhfUlhTUEFSRTUJCTB4N0YKKyNkZWZpbmUgQjIwNTZfUlhfUlhTUEFSRTYJCTB4ODAKKyNkZWZpbmUgQjIwNTZfUlhfUlhTUEFSRTcJCTB4ODEKKyNkZWZpbmUgQjIwNTZfUlhfUlhTUEFSRTgJCTB4ODIKKyNkZWZpbmUgQjIwNTZfUlhfUlhTUEFSRTkJCTB4ODMKKyNkZWZpbmUgQjIwNTZfUlhfUlhTUEFSRTEwCQkweDg0CisjZGVmaW5lIEIyMDU2X1JYX1JYU1BBUkUxMQkJMHg4NQorI2RlZmluZSBCMjA1Nl9SWF9SWFNQQVJFMTIJCTB4ODYKKyNkZWZpbmUgQjIwNTZfUlhfUlhTUEFSRTEzCQkweDg3CisjZGVmaW5lIEIyMDU2X1JYX1JYU1BBUkUxNAkJMHg4OAorI2RlZmluZSBCMjA1Nl9SWF9SWFNQQVJFMTUJCTB4ODkKKyNkZWZpbmUgQjIwNTZfUlhfUlhTUEFSRTE2CQkweDhBCisjZGVmaW5lIEIyMDU2X1JYX1NUQVRVU19MTkFBX0dBSU4JMHg4QgorI2RlZmluZSBCMjA1Nl9SWF9TVEFUVVNfTE5BR19HQUlOCTB4OEMKKyNkZWZpbmUgQjIwNTZfUlhfU1RBVFVTX01JWFRJQV9HQUlOCTB4OEQKKyNkZWZpbmUgQjIwNTZfUlhfU1RBVFVTX1JYTFBGX0dBSU4JMHg4RQorI2RlZmluZSBCMjA1Nl9SWF9TVEFUVVNfVkdBX0JVRl9HQUlOCTB4OEYKKyNkZWZpbmUgQjIwNTZfUlhfU1RBVFVTX1JYTFBGX1EJCTB4OTAKKyNkZWZpbmUgQjIwNTZfUlhfU1RBVFVTX1JYTFBGX0JVRl9CVwkweDkxCisjZGVmaW5lIEIyMDU2X1JYX1NUQVRVU19SWExQRl9WR0FfSFBDCTB4OTIKKyNkZWZpbmUgQjIwNTZfUlhfU1RBVFVTX1JYTFBGX1JDCTB4OTMKKyNkZWZpbmUgQjIwNTZfUlhfU1RBVFVTX0hQQ19SQwkJMHg5NAorCisjZGVmaW5lIEIyMDU2X0xOQTFfQV9QVQkJCTB4MDEKKyNkZWZpbmUgQjIwNTZfTE5BMl9BX1BVCQkJMHgwMgorI2RlZmluZSBCMjA1Nl9MTkExX0dfUFUJCQkweDAxCisjZGVmaW5lIEIyMDU2X0xOQTJfR19QVQkJCTB4MDIKKyNkZWZpbmUgQjIwNTZfTUlYQV9QVV9JCQkJMHgwMQorI2RlZmluZSBCMjA1Nl9NSVhBX1BVX1EJCQkweDAyCisjZGVmaW5lIEIyMDU2X01JWEFfUFVfR00JCTB4MTAKKyNkZWZpbmUgQjIwNTZfTUlYR19QVV9JCQkJMHgwMQorI2RlZmluZSBCMjA1Nl9NSVhHX1BVX1EJCQkweDAyCisjZGVmaW5lIEIyMDU2X01JWEdfUFVfR00JCTB4MTAKKyNkZWZpbmUgQjIwNTZfVElBX1BVCQkJMHgwMQorI2RlZmluZSBCMjA1Nl9CQl9MUEZfUFUJCQkweDIwCisjZGVmaW5lIEIyMDU2X1cxX1BVCQkJMHgwMgorI2RlZmluZSBCMjA1Nl9XMl9QVQkJCTB4MDQKKyNkZWZpbmUgQjIwNTZfTkJfUFUJCQkweDA4CisjZGVmaW5lIEIyMDU2X1JTU0lfVzFfU0VMCQkweDAyCisjZGVmaW5lIEIyMDU2X1JTU0lfVzJfU0VMCQkweDA0CisjZGVmaW5lIEIyMDU2X1JTU0lfTkJfU0VMCQkweDA4CisjZGVmaW5lIEIyMDU2X1ZDTV9NQVNLCQkJMHgxQworI2RlZmluZSBCMjA1Nl9SU1NJX1ZDTV9TSElGVAkJMHgwMgorCiBzdHJ1Y3QgYjQzX25waHlfY2hhbm5lbHRhYl9lbnRyeV9yZXYzIHsKLQkvKiBUaGUgY2hhbm5lbCBudW1iZXIgKi8KLQl1OCBjaGFubmVsOwogCS8qIFRoZSBjaGFubmVsIGZyZXF1ZW5jeSBpbiBNSHogKi8KIAl1MTYgZnJlcTsKIAkvKiBSYWRpbyByZWdpc3RlciB2YWx1ZXMgb24gY2hhbm5lbHN3aXRjaCAqLwotCS8qIFRPRE8gKi8KKwl1OCByYWRpb19zeW5fcGxsX3Zjb2NhbDE7CisJdTggcmFkaW9fc3luX3BsbF92Y29jYWwyOworCXU4IHJhZGlvX3N5bl9wbGxfcmVmZGl2OworCXU4IHJhZGlvX3N5bl9wbGxfbW1kMjsKKwl1OCByYWRpb19zeW5fcGxsX21tZDE7CisJdTggcmFkaW9fc3luX3BsbF9sb29wZmlsdGVyMTsKKwl1OCByYWRpb19zeW5fcGxsX2xvb3BmaWx0ZXIyOworCXU4IHJhZGlvX3N5bl9wbGxfbG9vcGZpbHRlcjM7CisJdTggcmFkaW9fc3luX3BsbF9sb29wZmlsdGVyNDsKKwl1OCByYWRpb19zeW5fcGxsX2xvb3BmaWx0ZXI1OworCXU4IHJhZGlvX3N5bl9yZXNlcnZlZF9hZGRyMjc7CisJdTggcmFkaW9fc3luX3Jlc2VydmVkX2FkZHIyODsKKwl1OCByYWRpb19zeW5fcmVzZXJ2ZWRfYWRkcjI5OworCXU4IHJhZGlvX3N5bl9sb2dlbl92Y29idWYxOworCXU4IHJhZGlvX3N5bl9sb2dlbl9taXhlcjI7CisJdTggcmFkaW9fc3luX2xvZ2VuX2J1ZjM7CisJdTggcmFkaW9fc3luX2xvZ2VuX2J1ZjQ7CisJdTggcmFkaW9fcngwX2xuYWFfdHVuZTsKKwl1OCByYWRpb19yeDBfbG5hZ190dW5lOworCXU4IHJhZGlvX3R4MF9pbnRwYWFfYm9vc3RfdHVuZTsKKwl1OCByYWRpb190eDBfaW50cGFnX2Jvb3N0X3R1bmU7CisJdTggcmFkaW9fdHgwX3BhZGFfYm9vc3RfdHVuZTsKKwl1OCByYWRpb190eDBfcGFkZ19ib29zdF90dW5lOworCXU4IHJhZGlvX3R4MF9wZ2FhX2Jvb3N0X3R1bmU7CisJdTggcmFkaW9fdHgwX3BnYWdfYm9vc3RfdHVuZTsKKwl1OCByYWRpb190eDBfbWl4YV9ib29zdF90dW5lOworCXU4IHJhZGlvX3R4MF9taXhnX2Jvb3N0X3R1bmU7CisJdTggcmFkaW9fcngxX2xuYWFfdHVuZTsKKwl1OCByYWRpb19yeDFfbG5hZ190dW5lOworCXU4IHJhZGlvX3R4MV9pbnRwYWFfYm9vc3RfdHVuZTsKKwl1OCByYWRpb190eDFfaW50cGFnX2Jvb3N0X3R1bmU7CisJdTggcmFkaW9fdHgxX3BhZGFfYm9vc3RfdHVuZTsKKwl1OCByYWRpb190eDFfcGFkZ19ib29zdF90dW5lOworCXU4IHJhZGlvX3R4MV9wZ2FhX2Jvb3N0X3R1bmU7CisJdTggcmFkaW9fdHgxX3BnYWdfYm9vc3RfdHVuZTsKKwl1OCByYWRpb190eDFfbWl4YV9ib29zdF90dW5lOworCXU4IHJhZGlvX3R4MV9taXhnX2Jvb3N0X3R1bmU7CiAJLyogUEhZIHJlZ2lzdGVyIHZhbHVlcyBvbiBjaGFubmVsc3dpdGNoICovCiAJc3RydWN0IGI0M19waHlfbl9zZm9fY2ZnIHBoeV9yZWdzOwogfTsKIAordm9pZCBiMjA1Nl91cGxvYWRfaW5pdHRhYnMoc3RydWN0IGI0M193bGRldiAqZGV2LAorCQkJICAgYm9vbCBnaHo1LCBib29sIGlnbm9yZV91cGxvYWRmbGFnKTsKKwogI2VuZGlmIC8qIEI0M19SQURJT18yMDU2X0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcmZraWxsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcmZraWxsLmMKaW5kZXggNzgwMTZhZS4uODZiYzBhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3Jma2lsbC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9yZmtpbGwuYwpAQCAtMjgsMjMgKzI4LDggQEAKIC8qIFJldHVybnMgVFJVRSwgaWYgdGhlIHJhZGlvIGlzIGVuYWJsZWQgaW4gaGFyZHdhcmUuICovCiBib29sIGI0M19pc19od19yYWRpb19lbmFibGVkKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKIHsKLQlpZiAoZGV2LT5waHkucmV2ID49IDMgfHwgZGV2LT5waHkudHlwZSA9PSBCNDNfUEhZVFlQRV9MUCkgewotCQlpZiAoIShiNDNfcmVhZDMyKGRldiwgQjQzX01NSU9fUkFESU9fSFdFTkFCTEVEX0hJKQotCQkgICAgICAmIEI0M19NTUlPX1JBRElPX0hXRU5BQkxFRF9ISV9NQVNLKSkKLQkJCXJldHVybiAxOwotCX0gZWxzZSB7Ci0JCS8qIFRvIHByZXZlbnQgQ1BVIGZhdWx0IG9uIFBQQywgZG8gbm90IHJlYWQgYSByZWdpc3RlcgotCQkgKiB1bmxlc3MgdGhlIGludGVyZmFjZSBpcyBzdGFydGVkOyBob3dldmVyLCBvbiByZXN1bWUKLQkJICogZm9yIGhpYmVybmF0aW9uLCB0aGlzIHJvdXRpbmUgaXMgZW50ZXJlZCBlYXJseS4gV2hlbgotCQkgKiB0aGF0IGhhcHBlbnMsIHVuY29uZGl0aW9uYWxseSByZXR1cm4gVFJVRS4KLQkJICovCi0JCWlmIChiNDNfc3RhdHVzKGRldikgPCBCNDNfU1RBVF9TVEFSVEVEKQotCQkJcmV0dXJuIDE7Ci0JCWlmIChiNDNfcmVhZDE2KGRldiwgQjQzX01NSU9fUkFESU9fSFdFTkFCTEVEX0xPKQotCQkgICAgJiBCNDNfTU1JT19SQURJT19IV0VOQUJMRURfTE9fTUFTSykKLQkJCXJldHVybiAxOwotCX0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gIShiNDNfcmVhZDMyKGRldiwgQjQzX01NSU9fUkFESU9fSFdFTkFCTEVEX0hJKQorCQkmIEI0M19NTUlPX1JBRElPX0hXRU5BQkxFRF9ISV9NQVNLKTsKIH0KIAogLyogVGhlIHBvbGwgY2FsbGJhY2sgZm9yIHRoZSBoYXJkd2FyZSBidXR0b24uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvdGFibGVzX25waHkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My90YWJsZXNfbnBoeS5jCmluZGV4IGQ2MGRiMDcuLmRjOGVmMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My90YWJsZXNfbnBoeS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My90YWJsZXNfbnBoeS5jCkBAIC0yOCw0MSArMjgsNDEgQEAKICNpbmNsdWRlICJwaHlfbi5oIgogCiBzdGF0aWMgY29uc3QgdTggYjQzX250YWJfYWRqdXN0cG93ZXIwW10gPSB7Ci0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwKLQkweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAzLCAweDAzLCAweDAzLCAweDAzLAotCTB4MDQsIDB4MDQsIDB4MDQsIDB4MDQsIDB4MDUsIDB4MDUsIDB4MDUsIDB4MDUsCi0JMHgwNiwgMHgwNiwgMHgwNiwgMHgwNiwgMHgwNywgMHgwNywgMHgwNywgMHgwNywKLQkweDA4LCAweDA4LCAweDA4LCAweDA4LCAweDA5LCAweDA5LCAweDA5LCAweDA5LAotCTB4MEEsIDB4MEEsIDB4MEEsIDB4MEEsIDB4MEIsIDB4MEIsIDB4MEIsIDB4MEIsCi0JMHgwQywgMHgwQywgMHgwQywgMHgwQywgMHgwRCwgMHgwRCwgMHgwRCwgMHgwRCwKLQkweDBFLCAweDBFLCAweDBFLCAweDBFLCAweDBGLCAweDBGLCAweDBGLCAweDBGLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTEsIDB4MTEsIDB4MTEsIDB4MTEsCi0JMHgxMiwgMHgxMiwgMHgxMiwgMHgxMiwgMHgxMywgMHgxMywgMHgxMywgMHgxMywKLQkweDE0LCAweDE0LCAweDE0LCAweDE0LCAweDE1LCAweDE1LCAweDE1LCAweDE1LAotCTB4MTYsIDB4MTYsIDB4MTYsIDB4MTYsIDB4MTcsIDB4MTcsIDB4MTcsIDB4MTcsCi0JMHgxOCwgMHgxOCwgMHgxOCwgMHgxOCwgMHgxOSwgMHgxOSwgMHgxOSwgMHgxOSwKLQkweDFBLCAweDFBLCAweDFBLCAweDFBLCAweDFCLCAweDFCLCAweDFCLCAweDFCLAotCTB4MUMsIDB4MUMsIDB4MUMsIDB4MUMsIDB4MUQsIDB4MUQsIDB4MUQsIDB4MUQsCi0JMHgxRSwgMHgxRSwgMHgxRSwgMHgxRSwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAogfTsKIAogc3RhdGljIGNvbnN0IHU4IGI0M19udGFiX2FkanVzdHBvd2VyMVtdID0gewotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsCi0JMHgwMiwgMHgwMiwgMHgwMiwgMHgwMiwgMHgwMywgMHgwMywgMHgwMywgMHgwMywKLQkweDA0LCAweDA0LCAweDA0LCAweDA0LCAweDA1LCAweDA1LCAweDA1LCAweDA1LAotCTB4MDYsIDB4MDYsIDB4MDYsIDB4MDYsIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDcsCi0JMHgwOCwgMHgwOCwgMHgwOCwgMHgwOCwgMHgwOSwgMHgwOSwgMHgwOSwgMHgwOSwKLQkweDBBLCAweDBBLCAweDBBLCAweDBBLCAweDBCLCAweDBCLCAweDBCLCAweDBCLAotCTB4MEMsIDB4MEMsIDB4MEMsIDB4MEMsIDB4MEQsIDB4MEQsIDB4MEQsIDB4MEQsCi0JMHgwRSwgMHgwRSwgMHgwRSwgMHgwRSwgMHgwRiwgMHgwRiwgMHgwRiwgMHgwRiwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDExLCAweDExLCAweDExLCAweDExLAotCTB4MTIsIDB4MTIsIDB4MTIsIDB4MTIsIDB4MTMsIDB4MTMsIDB4MTMsIDB4MTMsCi0JMHgxNCwgMHgxNCwgMHgxNCwgMHgxNCwgMHgxNSwgMHgxNSwgMHgxNSwgMHgxNSwKLQkweDE2LCAweDE2LCAweDE2LCAweDE2LCAweDE3LCAweDE3LCAweDE3LCAweDE3LAotCTB4MTgsIDB4MTgsIDB4MTgsIDB4MTgsIDB4MTksIDB4MTksIDB4MTksIDB4MTksCi0JMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQiwgMHgxQiwgMHgxQiwgMHgxQiwKLQkweDFDLCAweDFDLCAweDFDLCAweDFDLCAweDFELCAweDFELCAweDFELCAweDFELAotCTB4MUUsIDB4MUUsIDB4MUUsIDB4MUUsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKIH07CiAKIHN0YXRpYyBjb25zdCB1MTYgYjQzX250YWJfYmRpW10gPSB7CkBAIC0xMzAsOCArMTMwLDggQEAKIAkweDA5ODA0NTA2LCAweDAwMTAwMDMwLCAweDA5ODA0NTA3LCAweDAwMTAwMDMwLAogCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCiAJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDA4MDA0QTBDLCAweDAwMTAwMDA4LCAweDAxMDAwQTBELCAweDAwMTAwMDI4LAotCTB4MDk4MDQ1MEUsIDB4MDAxMDAwMzgsIDB4MDk4MDQ1MEYsIDB4MDAxMDAwMzgsCisJMHgwODAwNEEwQywgMHgwMDEwMDAwNCwgMHgwMTAwMEEwRCwgMHgwMDEwMDAyNCwKKwkweDA5ODA0NTBFLCAweDAwMTAwMDM0LCAweDA5ODA0NTBGLCAweDAwMTAwMDM0LAogCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCiAJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKIAkweDAwMDAwQTA0LCAweDAwMTAwMDAwLCAweDExMDA4QTA1LCAweDAwMTAwMDIwLApAQCAtMjAyLDEzICsyMDIsMTMgQEAKIAkweDUzMDI4QTA2LCAweDAxOTAwMDYwLCAweDUzMDI4QTA3LCAweDAxOTAwMDYwLAogCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCiAJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDQwMDIxNDBDLCAweDAwMEY0ODEwLCAweDYyMDMxNDBELCAweDAwMTAwMDUwLAotCTB4NTMwMjhBMEUsIDB4MDE5MDAwNzAsIDB4NTMwMjhBMEYsIDB4MDE5MDAwNzAsCisJMHg0MDAyMTQwQywgMHgwMDBGNDgwOCwgMHg2MjAzMTQwRCwgMHgwMDEwMDA0OCwKKwkweDUzMDI4QTBFLCAweDAxOTAwMDY4LCAweDUzMDI4QTBGLCAweDAxOTAwMDY4LAogCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCiAJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKLQkweDAwMDAwQTBDLCAweDAwMTAwMDA4LCAweDExMDA4QTBELCAweDAwMTAwMDI4LAotCTB4MTk4MEM1MEUsIDB4MDAxMDAwMzgsIDB4MjE4MTA1MEUsIDB4MDAxMDAwMzgsCi0JMHgyMTgxMDUwRSwgMHgwMDEwMDAzOCwgMHgwMTgwMDUwQywgMHgwMDEwMDAzOCwKKwkweDAwMDAwQTBDLCAweDAwMTAwMDA0LCAweDExMDA4QTBELCAweDAwMTAwMDI0LAorCTB4MTk4MEM1MEUsIDB4MDAxMDAwMzQsIDB4MjE4MTA1MEUsIDB4MDAxMDAwMzQsCisJMHgyMTgxMDUwRSwgMHgwMDEwMDAzNCwgMHgwMTgwMDUwQywgMHgwMDEwMDAzOCwKIAkweDExODA4NTBELCAweDAwMTAwMDM4LCAweDExODE4NTBELCAweDAwMTAwMDM4LAogCTB4Mjk4MTQ1MEYsIDB4MDExMDAwMzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCiAJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKQEAgLTIzOCw5ICsyMzgsOSBAQAogCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCiAJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKIAkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4NDAwMjE0MEMsIDB4MDAxMDAwMTAsIDB4MDIwMDE0MEQsIDB4MDAxMDAwNTAsCi0JMHgwQjAwNEEwRSwgMHgwMTkwMDA3MCwgMHgxMzAwOEEwRSwgMHgwMTkwMDA3MCwKLQkweDEzMDA4QTBFLCAweDAxOTAwMDcwLCAweDQzMDIwQTBDLCAweDAwMTAwMDcwLAorCTB4NDAwMjE0MEMsIDB4MDAxMDAwMDgsIDB4MDIwMDE0MEQsIDB4MDAxMDAwNDgsCisJMHgwQjAwNEEwRSwgMHgwMTkwMDA2OCwgMHgxMzAwOEEwRSwgMHgwMTkwMDA2OCwKKwkweDEzMDA4QTBFLCAweDAxOTAwMDY4LCAweDQzMDIwQTBDLCAweDAwMTAwMDcwLAogCTB4MUIwMENBMEQsIDB4MDAxMDAwNzAsIDB4MUIwMTRBMEQsIDB4MDAxMDAwNzAsCiAJMHgyMzAxMEEwRiwgMHgwMTUwMDA3MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKIAkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLApAQCAtMzM3LDczICszMzcsNzMgQEAKIH07CiAKIHN0YXRpYyBjb25zdCB1MzIgYjQzX250YWJfZ2FpbmN0bDBbXSA9IHsKLQkweDAwN0YwMDNGLCAweDAwN0UwMTNGLCAweDAwN0QwMjNFLCAweDAwN0MwMzNFLAotCTB4MDA3QjA0M0QsIDB4MDA3QTA1M0QsIDB4MDA3OTA2M0MsIDB4MDA3ODA3M0MsCi0JMHgwMDc3MDgzQiwgMHgwMDc2MDkzQiwgMHgwMDc1MEEzQSwgMHgwMDc0MEIzQSwKLQkweDAwNzMwQzM5LCAweDAwNzIwRDM5LCAweDAwNzEwRTM4LCAweDAwNzAwRjM4LAotCTB4MDA2RjAwMzcsIDB4MDA2RTAxMzcsIDB4MDA2RDAyMzYsIDB4MDA2QzAzMzYsCi0JMHgwMDZCMDQzNSwgMHgwMDZBMDUzNSwgMHgwMDY5MDYzNCwgMHgwMDY4MDczNCwKLQkweDAwNjcwODMzLCAweDAwNjYwOTMzLCAweDAwNjUwQTMyLCAweDAwNjQwQjMyLAotCTB4MDA2MzBDMzEsIDB4MDA2MjBEMzEsIDB4MDA2MTBFMzAsIDB4MDA2MDBGMzAsCi0JMHgwMDVGMDAyRiwgMHgwMDVFMDEyRiwgMHgwMDVEMDIyRSwgMHgwMDVDMDMyRSwKLQkweDAwNUIwNDJELCAweDAwNUEwNTJELCAweDAwNTkwNjJDLCAweDAwNTgwNzJDLAotCTB4MDA1NzA4MkIsIDB4MDA1NjA5MkIsIDB4MDA1NTBBMkEsIDB4MDA1NDBCMkEsCi0JMHgwMDUzMEMyOSwgMHgwMDUyMEQyOSwgMHgwMDUxMEUyOCwgMHgwMDUwMEYyOCwKLQkweDAwNEYwMDI3LCAweDAwNEUwMTI3LCAweDAwNEQwMjI2LCAweDAwNEMwMzI2LAotCTB4MDA0QjA0MjUsIDB4MDA0QTA1MjUsIDB4MDA0OTA2MjQsIDB4MDA0ODA3MjQsCi0JMHgwMDQ3MDgyMywgMHgwMDQ2MDkyMywgMHgwMDQ1MEEyMiwgMHgwMDQ0MEIyMiwKLQkweDAwNDMwQzIxLCAweDAwNDIwRDIxLCAweDAwNDEwRTIwLCAweDAwNDAwRjIwLAotCTB4MDAzRjAwMUYsIDB4MDAzRTAxMUYsIDB4MDAzRDAyMUUsIDB4MDAzQzAzMUUsCi0JMHgwMDNCMDQxRCwgMHgwMDNBMDUxRCwgMHgwMDM5MDYxQywgMHgwMDM4MDcxQywKLQkweDAwMzcwODFCLCAweDAwMzYwOTFCLCAweDAwMzUwQTFBLCAweDAwMzQwQjFBLAotCTB4MDAzMzBDMTksIDB4MDAzMjBEMTksIDB4MDAzMTBFMTgsIDB4MDAzMDBGMTgsCi0JMHgwMDJGMDAxNywgMHgwMDJFMDExNywgMHgwMDJEMDIxNiwgMHgwMDJDMDMxNiwKLQkweDAwMkIwNDE1LCAweDAwMkEwNTE1LCAweDAwMjkwNjE0LCAweDAwMjgwNzE0LAotCTB4MDAyNzA4MTMsIDB4MDAyNjA5MTMsIDB4MDAyNTBBMTIsIDB4MDAyNDBCMTIsCi0JMHgwMDIzMEMxMSwgMHgwMDIyMEQxMSwgMHgwMDIxMEUxMCwgMHgwMDIwMEYxMCwKLQkweDAwMUYwMDBGLCAweDAwMUUwMTBGLCAweDAwMUQwMjBFLCAweDAwMUMwMzBFLAotCTB4MDAxQjA0MEQsIDB4MDAxQTA1MEQsIDB4MDAxOTA2MEMsIDB4MDAxODA3MEMsCi0JMHgwMDE3MDgwQiwgMHgwMDE2MDkwQiwgMHgwMDE1MEEwQSwgMHgwMDE0MEIwQSwKLQkweDAwMTMwQzA5LCAweDAwMTIwRDA5LCAweDAwMTEwRTA4LCAweDAwMTAwRjA4LAotCTB4MDAwRjAwMDcsIDB4MDAwRTAxMDcsIDB4MDAwRDAyMDYsIDB4MDAwQzAzMDYsCi0JMHgwMDBCMDQwNSwgMHgwMDBBMDUwNSwgMHgwMDA5MDYwNCwgMHgwMDA4MDcwNCwKLQkweDAwMDcwODAzLCAweDAwMDYwOTAzLCAweDAwMDUwQTAyLCAweDAwMDQwQjAyLAotCTB4MDAwMzBDMDEsIDB4MDAwMjBEMDEsIDB4MDAwMTBFMDAsIDB4MDAwMDBGMDAsCisJMHgwM0NDMkI0NCwgMHgwM0NDMkI0MiwgMHgwM0NDMkI0MCwgMHgwM0NDMkIzRSwKKwkweDAzQ0MyQjNELCAweDAzQ0MyQjNCLCAweDAzQzgyQjQ0LCAweDAzQzgyQjQyLAorCTB4MDNDODJCNDAsIDB4MDNDODJCM0UsIDB4MDNDODJCM0QsIDB4MDNDODJCM0IsCisJMHgwM0M4MkIzOSwgMHgwM0M4MkIzOCwgMHgwM0M4MkIzNiwgMHgwM0M4MkIzNCwKKwkweDAzQzQyQjQ0LCAweDAzQzQyQjQyLCAweDAzQzQyQjQwLCAweDAzQzQyQjNFLAorCTB4MDNDNDJCM0QsIDB4MDNDNDJCM0IsIDB4MDNDNDJCMzksIDB4MDNDNDJCMzgsCisJMHgwM0M0MkIzNiwgMHgwM0M0MkIzNCwgMHgwM0M0MkIzMywgMHgwM0M0MkIzMiwKKwkweDAzQzQyQjMwLCAweDAzQzQyQjJGLCAweDAzQzQyQjJELCAweDAzQzAyQjQ0LAorCTB4MDNDMDJCNDIsIDB4MDNDMDJCNDAsIDB4MDNDMDJCM0UsIDB4MDNDMDJCM0QsCisJMHgwM0MwMkIzQiwgMHgwM0MwMkIzOSwgMHgwM0MwMkIzOCwgMHgwM0MwMkIzNiwKKwkweDAzQzAyQjM0LCAweDAzQjAyQjQ0LCAweDAzQjAyQjQyLCAweDAzQjAyQjQwLAorCTB4MDNCMDJCM0UsIDB4MDNCMDJCM0QsIDB4MDNCMDJCM0IsIDB4MDNCMDJCMzksCisJMHgwM0IwMkIzOCwgMHgwM0IwMkIzNiwgMHgwM0IwMkIzNCwgMHgwM0IwMkIzMywKKwkweDAzQjAyQjMyLCAweDAzQjAyQjMwLCAweDAzQjAyQjJGLCAweDAzQjAyQjJELAorCTB4MDNBMDJCNDQsIDB4MDNBMDJCNDIsIDB4MDNBMDJCNDAsIDB4MDNBMDJCM0UsCisJMHgwM0EwMkIzRCwgMHgwM0EwMkIzQiwgMHgwM0EwMkIzOSwgMHgwM0EwMkIzOCwKKwkweDAzQTAyQjM2LCAweDAzQTAyQjM0LCAweDAzOTAyQjQ0LCAweDAzOTAyQjQyLAorCTB4MDM5MDJCNDAsIDB4MDM5MDJCM0UsIDB4MDM5MDJCM0QsIDB4MDM5MDJCM0IsCisJMHgwMzkwMkIzOSwgMHgwMzkwMkIzOCwgMHgwMzkwMkIzNiwgMHgwMzkwMkIzNCwKKwkweDAzOTAyQjMzLCAweDAzOTAyQjMyLCAweDAzOTAyQjMwLCAweDAzODAyQjQ0LAorCTB4MDM4MDJCNDIsIDB4MDM4MDJCNDAsIDB4MDM4MDJCM0UsIDB4MDM4MDJCM0QsCisJMHgwMzgwMkIzQiwgMHgwMzgwMkIzOSwgMHgwMzgwMkIzOCwgMHgwMzgwMkIzNiwKKwkweDAzODAyQjM0LCAweDAzODAyQjMzLCAweDAzODAyQjMyLCAweDAzODAyQjMwLAorCTB4MDM4MDJCMkYsIDB4MDM4MDJCMkQsIDB4MDM4MDJCMkMsIDB4MDM4MDJCMkIsCisJMHgwMzgwMkIyQSwgMHgwMzgwMkIyOSwgMHgwMzgwMkIyNywgMHgwMzgwMkIyNiwKKwkweDAzODAyQjI1LCAweDAzODAyQjI0LCAweDAzODAyQjIzLCAweDAzODAyQjIyLAorCTB4MDM4MDJCMjEsIDB4MDM4MDJCMjAsIDB4MDM4MDJCMUYsIDB4MDM4MDJCMUUsCisJMHgwMzgwMkIxRSwgMHgwMzgwMkIxRCwgMHgwMzgwMkIxQywgMHgwMzgwMkIxQiwKKwkweDAzODAyQjFBLCAweDAzODAyQjFBLCAweDAzODAyQjE5LCAweDAzODAyQjE4LAorCTB4MDM4MDJCMTgsIDB4MDM4MDJCMTgsIDB4MDM4MDJCMTgsIDB4MDM4MDJCMTgsCisJMHgwMzgwMkIxOCwgMHgwMzgwMkIxOCwgMHgwMzgwMkIxOCwgMHgwMzgwMkIxOCwKKwkweDAzODAyQjE4LCAweDAzODAyQjE4LCAweDAzODAyQjE4LCAweDAwMDAyQjAwLAogfTsKIAogc3RhdGljIGNvbnN0IHUzMiBiNDNfbnRhYl9nYWluY3RsMVtdID0gewotCTB4MDA3RjAwM0YsIDB4MDA3RTAxM0YsIDB4MDA3RDAyM0UsIDB4MDA3QzAzM0UsCi0JMHgwMDdCMDQzRCwgMHgwMDdBMDUzRCwgMHgwMDc5MDYzQywgMHgwMDc4MDczQywKLQkweDAwNzcwODNCLCAweDAwNzYwOTNCLCAweDAwNzUwQTNBLCAweDAwNzQwQjNBLAotCTB4MDA3MzBDMzksIDB4MDA3MjBEMzksIDB4MDA3MTBFMzgsIDB4MDA3MDBGMzgsCi0JMHgwMDZGMDAzNywgMHgwMDZFMDEzNywgMHgwMDZEMDIzNiwgMHgwMDZDMDMzNiwKLQkweDAwNkIwNDM1LCAweDAwNkEwNTM1LCAweDAwNjkwNjM0LCAweDAwNjgwNzM0LAotCTB4MDA2NzA4MzMsIDB4MDA2NjA5MzMsIDB4MDA2NTBBMzIsIDB4MDA2NDBCMzIsCi0JMHgwMDYzMEMzMSwgMHgwMDYyMEQzMSwgMHgwMDYxMEUzMCwgMHgwMDYwMEYzMCwKLQkweDAwNUYwMDJGLCAweDAwNUUwMTJGLCAweDAwNUQwMjJFLCAweDAwNUMwMzJFLAotCTB4MDA1QjA0MkQsIDB4MDA1QTA1MkQsIDB4MDA1OTA2MkMsIDB4MDA1ODA3MkMsCi0JMHgwMDU3MDgyQiwgMHgwMDU2MDkyQiwgMHgwMDU1MEEyQSwgMHgwMDU0MEIyQSwKLQkweDAwNTMwQzI5LCAweDAwNTIwRDI5LCAweDAwNTEwRTI4LCAweDAwNTAwRjI4LAotCTB4MDA0RjAwMjcsIDB4MDA0RTAxMjcsIDB4MDA0RDAyMjYsIDB4MDA0QzAzMjYsCi0JMHgwMDRCMDQyNSwgMHgwMDRBMDUyNSwgMHgwMDQ5MDYyNCwgMHgwMDQ4MDcyNCwKLQkweDAwNDcwODIzLCAweDAwNDYwOTIzLCAweDAwNDUwQTIyLCAweDAwNDQwQjIyLAotCTB4MDA0MzBDMjEsIDB4MDA0MjBEMjEsIDB4MDA0MTBFMjAsIDB4MDA0MDBGMjAsCi0JMHgwMDNGMDAxRiwgMHgwMDNFMDExRiwgMHgwMDNEMDIxRSwgMHgwMDNDMDMxRSwKLQkweDAwM0IwNDFELCAweDAwM0EwNTFELCAweDAwMzkwNjFDLCAweDAwMzgwNzFDLAotCTB4MDAzNzA4MUIsIDB4MDAzNjA5MUIsIDB4MDAzNTBBMUEsIDB4MDAzNDBCMUEsCi0JMHgwMDMzMEMxOSwgMHgwMDMyMEQxOSwgMHgwMDMxMEUxOCwgMHgwMDMwMEYxOCwKLQkweDAwMkYwMDE3LCAweDAwMkUwMTE3LCAweDAwMkQwMjE2LCAweDAwMkMwMzE2LAotCTB4MDAyQjA0MTUsIDB4MDAyQTA1MTUsIDB4MDAyOTA2MTQsIDB4MDAyODA3MTQsCi0JMHgwMDI3MDgxMywgMHgwMDI2MDkxMywgMHgwMDI1MEExMiwgMHgwMDI0MEIxMiwKLQkweDAwMjMwQzExLCAweDAwMjIwRDExLCAweDAwMjEwRTEwLCAweDAwMjAwRjEwLAotCTB4MDAxRjAwMEYsIDB4MDAxRTAxMEYsIDB4MDAxRDAyMEUsIDB4MDAxQzAzMEUsCi0JMHgwMDFCMDQwRCwgMHgwMDFBMDUwRCwgMHgwMDE5MDYwQywgMHgwMDE4MDcwQywKLQkweDAwMTcwODBCLCAweDAwMTYwOTBCLCAweDAwMTUwQTBBLCAweDAwMTQwQjBBLAotCTB4MDAxMzBDMDksIDB4MDAxMjBEMDksIDB4MDAxMTBFMDgsIDB4MDAxMDBGMDgsCi0JMHgwMDBGMDAwNywgMHgwMDBFMDEwNywgMHgwMDBEMDIwNiwgMHgwMDBDMDMwNiwKLQkweDAwMEIwNDA1LCAweDAwMEEwNTA1LCAweDAwMDkwNjA0LCAweDAwMDgwNzA0LAotCTB4MDAwNzA4MDMsIDB4MDAwNjA5MDMsIDB4MDAwNTBBMDIsIDB4MDAwNDBCMDIsCi0JMHgwMDAzMEMwMSwgMHgwMDAyMEQwMSwgMHgwMDAxMEUwMCwgMHgwMDAwMEYwMCwKKwkweDAzQ0MyQjQ0LCAweDAzQ0MyQjQyLCAweDAzQ0MyQjQwLCAweDAzQ0MyQjNFLAorCTB4MDNDQzJCM0QsIDB4MDNDQzJCM0IsIDB4MDNDODJCNDQsIDB4MDNDODJCNDIsCisJMHgwM0M4MkI0MCwgMHgwM0M4MkIzRSwgMHgwM0M4MkIzRCwgMHgwM0M4MkIzQiwKKwkweDAzQzgyQjM5LCAweDAzQzgyQjM4LCAweDAzQzgyQjM2LCAweDAzQzgyQjM0LAorCTB4MDNDNDJCNDQsIDB4MDNDNDJCNDIsIDB4MDNDNDJCNDAsIDB4MDNDNDJCM0UsCisJMHgwM0M0MkIzRCwgMHgwM0M0MkIzQiwgMHgwM0M0MkIzOSwgMHgwM0M0MkIzOCwKKwkweDAzQzQyQjM2LCAweDAzQzQyQjM0LCAweDAzQzQyQjMzLCAweDAzQzQyQjMyLAorCTB4MDNDNDJCMzAsIDB4MDNDNDJCMkYsIDB4MDNDNDJCMkQsIDB4MDNDMDJCNDQsCisJMHgwM0MwMkI0MiwgMHgwM0MwMkI0MCwgMHgwM0MwMkIzRSwgMHgwM0MwMkIzRCwKKwkweDAzQzAyQjNCLCAweDAzQzAyQjM5LCAweDAzQzAyQjM4LCAweDAzQzAyQjM2LAorCTB4MDNDMDJCMzQsIDB4MDNCMDJCNDQsIDB4MDNCMDJCNDIsIDB4MDNCMDJCNDAsCisJMHgwM0IwMkIzRSwgMHgwM0IwMkIzRCwgMHgwM0IwMkIzQiwgMHgwM0IwMkIzOSwKKwkweDAzQjAyQjM4LCAweDAzQjAyQjM2LCAweDAzQjAyQjM0LCAweDAzQjAyQjMzLAorCTB4MDNCMDJCMzIsIDB4MDNCMDJCMzAsIDB4MDNCMDJCMkYsIDB4MDNCMDJCMkQsCisJMHgwM0EwMkI0NCwgMHgwM0EwMkI0MiwgMHgwM0EwMkI0MCwgMHgwM0EwMkIzRSwKKwkweDAzQTAyQjNELCAweDAzQTAyQjNCLCAweDAzQTAyQjM5LCAweDAzQTAyQjM4LAorCTB4MDNBMDJCMzYsIDB4MDNBMDJCMzQsIDB4MDM5MDJCNDQsIDB4MDM5MDJCNDIsCisJMHgwMzkwMkI0MCwgMHgwMzkwMkIzRSwgMHgwMzkwMkIzRCwgMHgwMzkwMkIzQiwKKwkweDAzOTAyQjM5LCAweDAzOTAyQjM4LCAweDAzOTAyQjM2LCAweDAzOTAyQjM0LAorCTB4MDM5MDJCMzMsIDB4MDM5MDJCMzIsIDB4MDM5MDJCMzAsIDB4MDM4MDJCNDQsCisJMHgwMzgwMkI0MiwgMHgwMzgwMkI0MCwgMHgwMzgwMkIzRSwgMHgwMzgwMkIzRCwKKwkweDAzODAyQjNCLCAweDAzODAyQjM5LCAweDAzODAyQjM4LCAweDAzODAyQjM2LAorCTB4MDM4MDJCMzQsIDB4MDM4MDJCMzMsIDB4MDM4MDJCMzIsIDB4MDM4MDJCMzAsCisJMHgwMzgwMkIyRiwgMHgwMzgwMkIyRCwgMHgwMzgwMkIyQywgMHgwMzgwMkIyQiwKKwkweDAzODAyQjJBLCAweDAzODAyQjI5LCAweDAzODAyQjI3LCAweDAzODAyQjI2LAorCTB4MDM4MDJCMjUsIDB4MDM4MDJCMjQsIDB4MDM4MDJCMjMsIDB4MDM4MDJCMjIsCisJMHgwMzgwMkIyMSwgMHgwMzgwMkIyMCwgMHgwMzgwMkIxRiwgMHgwMzgwMkIxRSwKKwkweDAzODAyQjFFLCAweDAzODAyQjFELCAweDAzODAyQjFDLCAweDAzODAyQjFCLAorCTB4MDM4MDJCMUEsIDB4MDM4MDJCMUEsIDB4MDM4MDJCMTksIDB4MDM4MDJCMTgsCisJMHgwMzgwMkIxOCwgMHgwMzgwMkIxOCwgMHgwMzgwMkIxOCwgMHgwMzgwMkIxOCwKKwkweDAzODAyQjE4LCAweDAzODAyQjE4LCAweDAzODAyQjE4LCAweDAzODAyQjE4LAorCTB4MDM4MDJCMTgsIDB4MDM4MDJCMTgsIDB4MDM4MDJCMTgsIDB4MDAwMDJCMDAsCiB9OwogCiBzdGF0aWMgY29uc3QgdTMyIGI0M19udGFiX2ludGxldmVsW10gPSB7CkBAIC0xODExLDkgKzE4MTEsNyBAQAogfQogCiAjZGVmaW5lIG50YWJfdXBsb2FkKGRldiwgb2Zmc2V0LCBkYXRhKSBkbyB7IFwKLQkJdW5zaWduZWQgaW50IGk7CQkJCQkJXAotCQlmb3IgKGkgPSAwOyBpIDwgKG9mZnNldCMjX1NJWkUpOyBpKyspCQkJXAotCQkJYjQzX250YWJfd3JpdGUoZGV2LCAob2Zmc2V0KSArIGksIChkYXRhKVtpXSk7CVwKKwkJYjQzX250YWJfd3JpdGVfYnVsayhkZXYsIG9mZnNldCwgb2Zmc2V0IyNfU0laRSwgZGF0YSk7CVwKIAl9IHdoaWxlICgwKQogCiB2b2lkIGI0M19ucGh5X3JldjBfMV8yX3RhYmxlc19pbml0KHN0cnVjdCBiNDNfd2xkZXYgKmRldikKQEAgLTE4MjUsMjQgKzE4MjMsMjQgQEAKIAludGFiX3VwbG9hZChkZXYsIEI0M19OVEFCX1REVFJOLCBiNDNfbnRhYl90ZHRybik7CiAJbnRhYl91cGxvYWQoZGV2LCBCNDNfTlRBQl9JTlRMRVZFTCwgYjQzX250YWJfaW50bGV2ZWwpOwogCW50YWJfdXBsb2FkKGRldiwgQjQzX05UQUJfUElMT1QsIGI0M19udGFiX3BpbG90KTsKLQludGFiX3VwbG9hZChkZXYsIEI0M19OVEFCX1BJTE9UTFQsIGI0M19udGFiX3BpbG90bHQpOwogCW50YWJfdXBsb2FkKGRldiwgQjQzX05UQUJfVERJMjBBMCwgYjQzX250YWJfdGRpMjBhMCk7CiAJbnRhYl91cGxvYWQoZGV2LCBCNDNfTlRBQl9UREkyMEExLCBiNDNfbnRhYl90ZGkyMGExKTsKIAludGFiX3VwbG9hZChkZXYsIEI0M19OVEFCX1RESTQwQTAsIGI0M19udGFiX3RkaTQwYTApOwogCW50YWJfdXBsb2FkKGRldiwgQjQzX05UQUJfVERJNDBBMSwgYjQzX250YWJfdGRpNDBhMSk7Ci0JbnRhYl91cGxvYWQoZGV2LCBCNDNfTlRBQl9CREksIGI0M19udGFiX2JkaSk7CiAJbnRhYl91cGxvYWQoZGV2LCBCNDNfTlRBQl9DSEFORVNULCBiNDNfbnRhYl9jaGFubmVsZXN0KTsKIAludGFiX3VwbG9hZChkZXYsIEI0M19OVEFCX01DUywgYjQzX250YWJfbWNzKTsKLQotCS8qIFZvbGF0aWxlIHRhYmxlcyAqLwogCW50YWJfdXBsb2FkKGRldiwgQjQzX05UQUJfTk9JU0VWQVIxMCwgYjQzX250YWJfbm9pc2V2YXIxMCk7CiAJbnRhYl91cGxvYWQoZGV2LCBCNDNfTlRBQl9OT0lTRVZBUjExLCBiNDNfbnRhYl9ub2lzZXZhcjExKTsKKworCS8qIFZvbGF0aWxlIHRhYmxlcyAqLworCW50YWJfdXBsb2FkKGRldiwgQjQzX05UQUJfQkRJLCBiNDNfbnRhYl9iZGkpOworCW50YWJfdXBsb2FkKGRldiwgQjQzX05UQUJfUElMT1RMVCwgYjQzX250YWJfcGlsb3RsdCk7CisJbnRhYl91cGxvYWQoZGV2LCBCNDNfTlRBQl9DMF9HQUlOQ1RMLCBiNDNfbnRhYl9nYWluY3RsMCk7CisJbnRhYl91cGxvYWQoZGV2LCBCNDNfTlRBQl9DMV9HQUlOQ1RMLCBiNDNfbnRhYl9nYWluY3RsMSk7CiAJbnRhYl91cGxvYWQoZGV2LCBCNDNfTlRBQl9DMF9FU1RQTFQsIGI0M19udGFiX2VzdGltYXRlcG93ZXJsdDApOwogCW50YWJfdXBsb2FkKGRldiwgQjQzX05UQUJfQzFfRVNUUExULCBiNDNfbnRhYl9lc3RpbWF0ZXBvd2VybHQxKTsKIAludGFiX3VwbG9hZChkZXYsIEI0M19OVEFCX0MwX0FESlBMVCwgYjQzX250YWJfYWRqdXN0cG93ZXIwKTsKIAludGFiX3VwbG9hZChkZXYsIEI0M19OVEFCX0MxX0FESlBMVCwgYjQzX250YWJfYWRqdXN0cG93ZXIxKTsKLQludGFiX3VwbG9hZChkZXYsIEI0M19OVEFCX0MwX0dBSU5DVEwsIGI0M19udGFiX2dhaW5jdGwwKTsKLQludGFiX3VwbG9hZChkZXYsIEI0M19OVEFCX0MxX0dBSU5DVEwsIGI0M19udGFiX2dhaW5jdGwxKTsKIAludGFiX3VwbG9hZChkZXYsIEI0M19OVEFCX0MwX0lRTFQsIGI0M19udGFiX2lxbHQwKTsKIAludGFiX3VwbG9hZChkZXYsIEI0M19OVEFCX0MxX0lRTFQsIGI0M19udGFiX2lxbHQxKTsKIAludGFiX3VwbG9hZChkZXYsIEI0M19OVEFCX0MwX0xPRkVFRFRILCBiNDNfbnRhYl9sb2Z0bHQwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvbWFpbi5jCmluZGV4IDY3ZjE4ZWMuLjFmMTFlMTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L21haW4uYwpAQCAtMTgxLDUyICsxODEsNzUgQEAKIAogdm9pZCBiNDNsZWdhY3lpbmZvKHN0cnVjdCBiNDNsZWdhY3lfd2wgKndsLCBjb25zdCBjaGFyICpmbXQsIC4uLikKIHsKKwlzdHJ1Y3QgdmFfZm9ybWF0IHZhZjsKIAl2YV9saXN0IGFyZ3M7CiAKIAlpZiAoIWI0M2xlZ2FjeV9yYXRlbGltaXQod2wpKQogCQlyZXR1cm47CisKIAl2YV9zdGFydChhcmdzLCBmbXQpOwotCXByaW50ayhLRVJOX0lORk8gImI0M2xlZ2FjeS0lczogIiwKLQkgICAgICAgKHdsICYmIHdsLT5odykgPyB3aXBoeV9uYW1lKHdsLT5ody0+d2lwaHkpIDogIndsYW4iKTsKLQl2cHJpbnRrKGZtdCwgYXJncyk7CisKKwl2YWYuZm10ID0gZm10OworCXZhZi52YSA9ICZhcmdzOworCisJcHJpbnRrKEtFUk5fSU5GTyAiYjQzbGVnYWN5LSVzOiAlcFYiLAorCSAgICAgICAod2wgJiYgd2wtPmh3KSA/IHdpcGh5X25hbWUod2wtPmh3LT53aXBoeSkgOiAid2xhbiIsICZ2YWYpOworCiAJdmFfZW5kKGFyZ3MpOwogfQogCiB2b2lkIGI0M2xlZ2FjeWVycihzdHJ1Y3QgYjQzbGVnYWN5X3dsICp3bCwgY29uc3QgY2hhciAqZm10LCAuLi4pCiB7CisJc3RydWN0IHZhX2Zvcm1hdCB2YWY7CiAJdmFfbGlzdCBhcmdzOwogCiAJaWYgKCFiNDNsZWdhY3lfcmF0ZWxpbWl0KHdsKSkKIAkJcmV0dXJuOworCiAJdmFfc3RhcnQoYXJncywgZm10KTsKLQlwcmludGsoS0VSTl9FUlIgImI0M2xlZ2FjeS0lcyBFUlJPUjogIiwKLQkgICAgICAgKHdsICYmIHdsLT5odykgPyB3aXBoeV9uYW1lKHdsLT5ody0+d2lwaHkpIDogIndsYW4iKTsKLQl2cHJpbnRrKGZtdCwgYXJncyk7CisKKwl2YWYuZm10ID0gZm10OworCXZhZi52YSA9ICZhcmdzOworCisJcHJpbnRrKEtFUk5fRVJSICJiNDNsZWdhY3ktJXMgRVJST1I6ICVwViIsCisJICAgICAgICh3bCAmJiB3bC0+aHcpID8gd2lwaHlfbmFtZSh3bC0+aHctPndpcGh5KSA6ICJ3bGFuIiwgJnZhZik7CisKIAl2YV9lbmQoYXJncyk7CiB9CiAKIHZvaWQgYjQzbGVnYWN5d2FybihzdHJ1Y3QgYjQzbGVnYWN5X3dsICp3bCwgY29uc3QgY2hhciAqZm10LCAuLi4pCiB7CisJc3RydWN0IHZhX2Zvcm1hdCB2YWY7CiAJdmFfbGlzdCBhcmdzOwogCiAJaWYgKCFiNDNsZWdhY3lfcmF0ZWxpbWl0KHdsKSkKIAkJcmV0dXJuOworCiAJdmFfc3RhcnQoYXJncywgZm10KTsKLQlwcmludGsoS0VSTl9XQVJOSU5HICJiNDNsZWdhY3ktJXMgd2FybmluZzogIiwKLQkgICAgICAgKHdsICYmIHdsLT5odykgPyB3aXBoeV9uYW1lKHdsLT5ody0+d2lwaHkpIDogIndsYW4iKTsKLQl2cHJpbnRrKGZtdCwgYXJncyk7CisKKwl2YWYuZm10ID0gZm10OworCXZhZi52YSA9ICZhcmdzOworCisJcHJpbnRrKEtFUk5fV0FSTklORyAiYjQzbGVnYWN5LSVzIHdhcm5pbmc6ICVwViIsCisJICAgICAgICh3bCAmJiB3bC0+aHcpID8gd2lwaHlfbmFtZSh3bC0+aHctPndpcGh5KSA6ICJ3bGFuIiwgJnZhZik7CisKIAl2YV9lbmQoYXJncyk7CiB9CiAKICNpZiBCNDNsZWdhY3lfREVCVUcKIHZvaWQgYjQzbGVnYWN5ZGJnKHN0cnVjdCBiNDNsZWdhY3lfd2wgKndsLCBjb25zdCBjaGFyICpmbXQsIC4uLikKIHsKKwlzdHJ1Y3QgdmFfZm9ybWF0IHZhZjsKIAl2YV9saXN0IGFyZ3M7CiAKIAl2YV9zdGFydChhcmdzLCBmbXQpOwotCXByaW50ayhLRVJOX0RFQlVHICJiNDNsZWdhY3ktJXMgZGVidWc6ICIsCi0JICAgICAgICh3bCAmJiB3bC0+aHcpID8gd2lwaHlfbmFtZSh3bC0+aHctPndpcGh5KSA6ICJ3bGFuIik7Ci0JdnByaW50ayhmbXQsIGFyZ3MpOworCisJdmFmLmZtdCA9IGZtdDsKKwl2YWYudmEgPSAmYXJnczsKKworCXByaW50ayhLRVJOX0RFQlVHICJiNDNsZWdhY3ktJXMgZGVidWc6ICVwViIsCisJICAgICAgICh3bCAmJiB3bC0+aHcpID8gd2lwaHlfbmFtZSh3bC0+aHctPndpcGh5KSA6ICJ3bGFuIiwgJnZhZik7CisKIAl2YV9lbmQoYXJncyk7CiB9CiAjZW5kaWYgLyogREVCVUcgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9yZmtpbGwuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9yZmtpbGwuYwppbmRleCBkNTc5ZGY3Li5iOTBmMjIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvcmZraWxsLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L3Jma2lsbC5jCkBAIC0yOSw3ICsyOSw3IEBACiAvKiBSZXR1cm5zIFRSVUUsIGlmIHRoZSByYWRpbyBpcyBlbmFibGVkIGluIGhhcmR3YXJlLiAqLwogYm9vbCBiNDNsZWdhY3lfaXNfaHdfcmFkaW9fZW5hYmxlZChzdHJ1Y3QgYjQzbGVnYWN5X3dsZGV2ICpkZXYpCiB7Ci0JaWYgKGRldi0+cGh5LnJldiA+PSAzKSB7CisJaWYgKGRldi0+ZGV2LT5pZC5yZXZpc2lvbiA+PSAzKSB7CiAJCWlmICghKGI0M2xlZ2FjeV9yZWFkMzIoZGV2LCBCNDNsZWdhY3lfTU1JT19SQURJT19IV0VOQUJMRURfSEkpCiAJCSAgICAgICYgQjQzbGVnYWN5X01NSU9fUkFESU9fSFdFTkFCTEVEX0hJX01BU0spKQogCQkJcmV0dXJuIDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2FwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2FwLmMKaW5kZXggZGJiOTg2OS4uMThkNjNmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9hcC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfYXAuYwpAQCAtODU4LDcgKzg1OCwxMCBAQAogCQlyZXR1cm47CiAJfQogCisJZmx1c2hfd29ya19zeW5jKCZhcC0+YWRkX3N0YV9wcm9jX3F1ZXVlKTsKKwogI2lmbmRlZiBQUklTTTJfTk9fS0VSTkVMX0lFRUU4MDIxMV9NR01UCisJZmx1c2hfd29ya19zeW5jKCZhcC0+d2RzX29wZXJfcXVldWUpOwogCWlmIChhcC0+Y3J5cHQpCiAJCWFwLT5jcnlwdC0+ZGVpbml0KGFwLT5jcnlwdF9wcml2KTsKIAlhcC0+Y3J5cHQgPSBhcC0+Y3J5cHRfcHJpdiA9IE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2h3LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2h3LmMKaW5kZXggYjdjYjE2NS4uYThiZGRkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9ody5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfaHcuYwpAQCAtMzMxNyw3ICszMzE3LDEzIEBACiAKIAl1bnJlZ2lzdGVyX25ldGRldihsb2NhbC0+ZGV2KTsKIAotCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisJZmx1c2hfd29ya19zeW5jKCZsb2NhbC0+cmVzZXRfcXVldWUpOworCWZsdXNoX3dvcmtfc3luYygmbG9jYWwtPnNldF9tdWx0aWNhc3RfbGlzdF9xdWV1ZSk7CisJZmx1c2hfd29ya19zeW5jKCZsb2NhbC0+c2V0X3RpbV9xdWV1ZSk7CisjaWZuZGVmIFBSSVNNMl9OT19TVEFUSU9OX01PREVTCisJZmx1c2hfd29ya19zeW5jKCZsb2NhbC0+aW5mb19xdWV1ZSk7CisjZW5kaWYKKwlmbHVzaF93b3JrX3N5bmMoJmxvY2FsLT5jb21tc19xdWFsX3VwZGF0ZSk7CiAKIAlsaWI4MDIxMV9jcnlwdF9pbmZvX2ZyZWUoJmxvY2FsLT5jcnlwdF9pbmZvKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9LY29uZmlnIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9LY29uZmlnCmluZGV4IGI4MjM2NDIuLmVkNDI0NTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL0tjb25maWcKQEAgLTEwNiw2ICsxMDYsOSBAQAogCQlJbnRlbCBXaUZpIExpbmsgMTAwMEJHTgogCQlJbnRlbCBXaXJlbGVzcyBXaUZpIDUxNTBBR04KIAkJSW50ZWwgV2lyZWxlc3MgV2lGaSA1MTAwQUdOLCA1MzAwQUdOLCBhbmQgNTM1MEFHTgorCQlJbnRlbCA2MDAwIEdlbiAyIFNlcmllcyBXaS1GaSBBZGFwdGVycyAoNjAwMEcyQSBhbmQgNjAwMEcyQikKKwkJSW50ZWwgV0lyZWxlc3MgV2lGaSBMaW5rIDYwNTBCR04gR2VuIDIgQWRhcHRlcgorCQlJbnRlbCAxMDAgU2VyaWVzIFdpLUZpIEFkYXB0ZXJzICgxMDBCR04gYW5kIDEzMEJHTikKIAogY29uZmlnIElXTDM5NDUKIAl0cmlzdGF0ZSAiSW50ZWwgUFJPL1dpcmVsZXNzIDM5NDVBQkcvQkcgTmV0d29yayBDb25uZWN0aW9uIChpd2wzOTQ1KSIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL01ha2VmaWxlCmluZGV4IDYzZWRiZTIuLjkzMzgwZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9NYWtlZmlsZQpAQCAtMiwyMCArMiwyNyBAQAogaXdsY29yZS1vYmpzIAkJOj0gaXdsLWNvcmUubyBpd2wtZWVwcm9tLm8gaXdsLWhjbWQubyBpd2wtcG93ZXIubwogaXdsY29yZS1vYmpzIAkJKz0gaXdsLXJ4Lm8gaXdsLXR4Lm8gaXdsLXN0YS5vCiBpd2xjb3JlLW9ianMgCQkrPSBpd2wtc2Nhbi5vIGl3bC1sZWQubworaXdsY29yZS0kKENPTkZJR19JV0wzOTQ1KSArPSBpd2wtbGVnYWN5Lm8KK2l3bGNvcmUtJChDT05GSUdfSVdMNDk2NSkgKz0gaXdsLWxlZ2FjeS5vCiBpd2xjb3JlLSQoQ09ORklHX0lXTFdJRklfREVCVUdGUykgKz0gaXdsLWRlYnVnZnMubwogaXdsY29yZS0kKENPTkZJR19JV0xXSUZJX0RFVklDRV9UUkFDSU5HKSArPSBpd2wtZGV2dHJhY2UubwogCisjIElmIDM5NDUgaXMgc2VsZWN0ZWQgb25seSwgaXdsLWxlZ2FjeS5vIHdpbGwgYmUgYWRkZWQKKyMgdG8gaXdsY29yZS1tIGFib3ZlLCBidXQgaXQgbmVlZHMgdG8gYmUgYnVpbHQgaW4uCitpd2xjb3JlLW9ianMgKz0gJChpd2xjb3JlLW0pCisKIENGTEFHU19pd2wtZGV2dHJhY2UubyA6PSAtSSQoc3JjKQogCiAjIEFHTgogb2JqLSQoQ09ORklHX0lXTEFHTikJKz0gaXdsYWduLm8KLWl3bGFnbi1vYmpzCQk6PSBpd2wtYWduLm8gaXdsLWFnbi1ycy5vIGl3bC1hZ24tbGVkLm8gaXdsLWFnbi1pY3QubwotaXdsYWduLW9ianMJCSs9IGl3bC1hZ24tdWNvZGUubyBpd2wtYWduLWhjbWQubyBpd2wtYWduLXR4Lm8KK2l3bGFnbi1vYmpzCQk6PSBpd2wtYWduLm8gaXdsLWFnbi1ycy5vIGl3bC1hZ24tbGVkLm8KK2l3bGFnbi1vYmpzCQkrPSBpd2wtYWduLXVjb2RlLm8gaXdsLWFnbi10eC5vCiBpd2xhZ24tb2JqcwkJKz0gaXdsLWFnbi1saWIubyBpd2wtYWduLXJ4Lm8gaXdsLWFnbi1jYWxpYi5vCiBpd2xhZ24tb2JqcwkJKz0gaXdsLWFnbi10dC5vIGl3bC1hZ24tc3RhLm8gaXdsLWFnbi1lZXByb20ubwogaXdsYWduLSQoQ09ORklHX0lXTFdJRklfREVCVUdGUykgKz0gaXdsLWFnbi1kZWJ1Z2ZzLm8KIAogaXdsYWduLSQoQ09ORklHX0lXTDQ5NjUpICs9IGl3bC00OTY1Lm8KK2l3bGFnbi0kKENPTkZJR19JV0w1MDAwKSArPSBpd2wtYWduLXJ4b24ubyBpd2wtYWduLWhjbWQubyBpd2wtYWduLWljdC5vCiBpd2xhZ24tJChDT05GSUdfSVdMNTAwMCkgKz0gaXdsLTUwMDAubwogaXdsYWduLSQoQ09ORklHX0lXTDUwMDApICs9IGl3bC02MDAwLm8KIGl3bGFnbi0kKENPTkZJR19JV0w1MDAwKSArPSBpd2wtMTAwMC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0xMDAwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0xMDAwLmMKaW5kZXggMGUwMjdmNy4uYmE3OGJjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMTAwMC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTEwMDAuYwpAQCAtMTQ3LDcgKzE0NywxMSBAQAogCXByaXYtPmh3X3BhcmFtcy5yeF93cnRfcHRyX3JlZyA9IEZIX1JTQ1NSX0NITkwwX1dQVFI7CiAKIAlwcml2LT5od19wYXJhbXMudHhfY2hhaW5zX251bSA9IG51bV9vZl9hbnQocHJpdi0+Y2ZnLT52YWxpZF90eF9hbnQpOwotCXByaXYtPmh3X3BhcmFtcy5yeF9jaGFpbnNfbnVtID0gbnVtX29mX2FudChwcml2LT5jZmctPnZhbGlkX3J4X2FudCk7CisJaWYgKHByaXYtPmNmZy0+cnhfd2l0aF9zaXNvX2RpdmVyc2l0eSkKKwkJcHJpdi0+aHdfcGFyYW1zLnJ4X2NoYWluc19udW0gPSAxOworCWVsc2UKKwkJcHJpdi0+aHdfcGFyYW1zLnJ4X2NoYWluc19udW0gPQorCQkJbnVtX29mX2FudChwcml2LT5jZmctPnZhbGlkX3J4X2FudCk7CiAJcHJpdi0+aHdfcGFyYW1zLnZhbGlkX3R4X2FudCA9IHByaXYtPmNmZy0+dmFsaWRfdHhfYW50OwogCXByaXYtPmh3X3BhcmFtcy52YWxpZF9yeF9hbnQgPSBwcml2LT5jZmctPnZhbGlkX3J4X2FudDsKIApAQCAtMjExLDE0ICsyMTUsMTYgQEAKIAkJLmNhbGliX3ZlcnNpb24JPSBpd2xhZ25fZWVwcm9tX2NhbGliX3ZlcnNpb24sCiAJCS5xdWVyeV9hZGRyID0gaXdsYWduX2VlcHJvbV9xdWVyeV9hZGRyLAogCX0sCi0JLnBvc3RfYXNzb2NpYXRlID0gaXdsX3Bvc3RfYXNzb2NpYXRlLAotCS5pc3IgPSBpd2xfaXNyX2ljdCwKLQkuY29uZmlnX2FwID0gaXdsX2NvbmZpZ19hcCwKKwkuaXNyX29wcyA9IHsKKwkJLmlzciA9IGl3bF9pc3JfaWN0LAorCQkuZnJlZSA9IGl3bF9mcmVlX2lzcl9pY3QsCisJCS5hbGxvYyA9IGl3bF9hbGxvY19pc3JfaWN0LAorCQkucmVzZXQgPSBpd2xfcmVzZXRfaWN0LAorCQkuZGlzYWJsZSA9IGl3bF9kaXNhYmxlX2ljdCwKKwl9LAogCS50ZW1wX29wcyA9IHsKIAkJLnRlbXBlcmF0dXJlID0gaXdsYWduX3RlbXBlcmF0dXJlLAogCSB9LAotCS5tYW5hZ2VfaWJzc19zdGF0aW9uID0gaXdsYWduX21hbmFnZV9pYnNzX3N0YXRpb24sCi0JLnVwZGF0ZV9iY2FzdF9zdGF0aW9ucyA9IGl3bF91cGRhdGVfYmNhc3Rfc3RhdGlvbnMsCiAJLmRlYnVnZnNfb3BzID0gewogCQkucnhfc3RhdHNfcmVhZCA9IGl3bF91Y29kZV9yeF9zdGF0c19yZWFkLAogCQkudHhfc3RhdHNfcmVhZCA9IGl3bF91Y29kZV90eF9zdGF0c19yZWFkLApAQCAtMjI2LDcgKzIzMiw2IEBACiAJCS5idF9zdGF0c19yZWFkID0gaXdsX3Vjb2RlX2J0X3N0YXRzX3JlYWQsCiAJCS5yZXBseV90eF9lcnJvciA9IGl3bF9yZXBseV90eF9lcnJvcl9yZWFkLAogCX0sCi0JLnJlY292ZXJfZnJvbV90eF9zdGFsbCA9IGl3bF9iZ19tb25pdG9yX3JlY292ZXIsCiAJLmNoZWNrX3BsY3BfaGVhbHRoID0gaXdsX2dvb2RfcGxjcF9oZWFsdGgsCiAJLmNoZWNrX2Fja19oZWFsdGggPSBpd2xfZ29vZF9hY2tfaGVhbHRoLAogCS50eGZpZm9fZmx1c2ggPSBpd2xhZ25fdHhmaWZvX2ZsdXNoLApAQCAtMjQzLDYgKzI0OCw3IEBACiAJLmhjbWQgPSAmaXdsYWduX2hjbWQsCiAJLnV0aWxzID0gJml3bGFnbl9oY21kX3V0aWxzLAogCS5sZWQgPSAmaXdsYWduX2xlZF9vcHMsCisJLmllZWU4MDIxMV9vcHMgPSAmaXdsYWduX2h3X29wcywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaXdsX2Jhc2VfcGFyYW1zIGl3bDEwMDBfYmFzZV9wYXJhbXMgPSB7CkBAIC0yNTksNyArMjY1LDcgQEAKIAkuc3VwcG9ydF9jdF9raWxsX2V4aXQgPSB0cnVlLAogCS5wbGNwX2RlbHRhX3RocmVzaG9sZCA9IElXTF9NQVhfUExDUF9FUlJfRVhUX0xPTkdfVEhSRVNIT0xEX0RFRiwKIAkuY2hhaW5fbm9pc2Vfc2NhbGUgPSAxMDAwLAotCS5tb25pdG9yX3JlY292ZXJfcGVyaW9kID0gSVdMX0RFRl9NT05JVE9SSU5HX1BFUklPRCwKKwkud2RfdGltZW91dCA9IElXTF9ERUZfV0RfVElNRU9VVCwKIAkubWF4X2V2ZW50X2xvZ19zaXplID0gMTI4LAogCS51Y29kZV90cmFjaW5nID0gdHJ1ZSwKIAkuc2Vuc2l0aXZpdHlfY2FsaWJfYnlfZHJpdmVyID0gdHJ1ZSwKQEAgLTI3MCw2OCArMjc2LDQ5IEBACiAJLnVzZV9ydHNfZm9yX2FnZ3JlZ2F0aW9uID0gdHJ1ZSwgLyogdXNlIHJ0cy9jdHMgcHJvdGVjdGlvbiAqLwogfTsKIAorI2RlZmluZSBJV0xfREVWSUNFXzEwMDAJCQkJCQlcCisJLmZ3X25hbWVfcHJlID0gSVdMMTAwMF9GV19QUkUsCQkJCVwKKwkudWNvZGVfYXBpX21heCA9IElXTDEwMDBfVUNPREVfQVBJX01BWCwJCQlcCisJLnVjb2RlX2FwaV9taW4gPSBJV0wxMDAwX1VDT0RFX0FQSV9NSU4sCQkJXAorCS5lZXByb21fdmVyID0gRUVQUk9NXzEwMDBfRUVQUk9NX1ZFUlNJT04sCQlcCisJLmVlcHJvbV9jYWxpYl92ZXIgPSBFRVBST01fMTAwMF9UWF9QT1dFUl9WRVJTSU9OLAlcCisJLm9wcyA9ICZpd2wxMDAwX29wcywJCQkJCVwKKwkubW9kX3BhcmFtcyA9ICZpd2xhZ25fbW9kX3BhcmFtcywJCQlcCisJLmJhc2VfcGFyYW1zID0gJml3bDEwMDBfYmFzZV9wYXJhbXMsCQkJXAorCS5sZWRfbW9kZSA9IElXTF9MRURfQkxJTksKKwogc3RydWN0IGl3bF9jZmcgaXdsMTAwMF9iZ25fY2ZnID0gewogCS5uYW1lID0gIkludGVsKFIpIENlbnRyaW5vKFIpIFdpcmVsZXNzLU4gMTAwMCBCR04iLAotCS5md19uYW1lX3ByZSA9IElXTDEwMDBfRldfUFJFLAotCS51Y29kZV9hcGlfbWF4ID0gSVdMMTAwMF9VQ09ERV9BUElfTUFYLAotCS51Y29kZV9hcGlfbWluID0gSVdMMTAwMF9VQ09ERV9BUElfTUlOLAotCS5za3UgPSBJV0xfU0tVX0d8SVdMX1NLVV9OLAotCS52YWxpZF90eF9hbnQgPSBBTlRfQSwKLQkudmFsaWRfcnhfYW50ID0gQU5UX0FCLAotCS5lZXByb21fdmVyID0gRUVQUk9NXzEwMDBfRUVQUk9NX1ZFUlNJT04sCi0JLmVlcHJvbV9jYWxpYl92ZXIgPSBFRVBST01fMTAwMF9UWF9QT1dFUl9WRVJTSU9OLAotCS5vcHMgPSAmaXdsMTAwMF9vcHMsCi0JLm1vZF9wYXJhbXMgPSAmaXdsYWduX21vZF9wYXJhbXMsCi0JLmJhc2VfcGFyYW1zID0gJml3bDEwMDBfYmFzZV9wYXJhbXMsCisJSVdMX0RFVklDRV8xMDAwLAogCS5odF9wYXJhbXMgPSAmaXdsMTAwMF9odF9wYXJhbXMsCiB9OwogCiBzdHJ1Y3QgaXdsX2NmZyBpd2wxMDAwX2JnX2NmZyA9IHsKIAkubmFtZSA9ICJJbnRlbChSKSBDZW50cmlubyhSKSBXaXJlbGVzcy1OIDEwMDAgQkciLAotCS5md19uYW1lX3ByZSA9IElXTDEwMDBfRldfUFJFLAotCS51Y29kZV9hcGlfbWF4ID0gSVdMMTAwMF9VQ09ERV9BUElfTUFYLAotCS51Y29kZV9hcGlfbWluID0gSVdMMTAwMF9VQ09ERV9BUElfTUlOLAotCS5za3UgPSBJV0xfU0tVX0csCi0JLnZhbGlkX3R4X2FudCA9IEFOVF9BLAotCS52YWxpZF9yeF9hbnQgPSBBTlRfQUIsCi0JLmVlcHJvbV92ZXIgPSBFRVBST01fMTAwMF9FRVBST01fVkVSU0lPTiwKLQkuZWVwcm9tX2NhbGliX3ZlciA9IEVFUFJPTV8xMDAwX1RYX1BPV0VSX1ZFUlNJT04sCi0JLm9wcyA9ICZpd2wxMDAwX29wcywKLQkubW9kX3BhcmFtcyA9ICZpd2xhZ25fbW9kX3BhcmFtcywKLQkuYmFzZV9wYXJhbXMgPSAmaXdsMTAwMF9iYXNlX3BhcmFtcywKKwlJV0xfREVWSUNFXzEwMDAsCiB9OwogCisjZGVmaW5lIElXTF9ERVZJQ0VfMTAwCQkJCQkJXAorCS5md19uYW1lX3ByZSA9IElXTDEwMF9GV19QUkUsCQkJCVwKKwkudWNvZGVfYXBpX21heCA9IElXTDEwMF9VQ09ERV9BUElfTUFYLAkJCVwKKwkudWNvZGVfYXBpX21pbiA9IElXTDEwMF9VQ09ERV9BUElfTUlOLAkJCVwKKwkuZWVwcm9tX3ZlciA9IEVFUFJPTV8xMDAwX0VFUFJPTV9WRVJTSU9OLAkJXAorCS5lZXByb21fY2FsaWJfdmVyID0gRUVQUk9NXzEwMDBfVFhfUE9XRVJfVkVSU0lPTiwJXAorCS5vcHMgPSAmaXdsMTAwMF9vcHMsCQkJCQlcCisJLm1vZF9wYXJhbXMgPSAmaXdsYWduX21vZF9wYXJhbXMsCQkJXAorCS5iYXNlX3BhcmFtcyA9ICZpd2wxMDAwX2Jhc2VfcGFyYW1zLAkJCVwKKwkubGVkX21vZGUgPSBJV0xfTEVEX1JGX1NUQVRFLAkJCQlcCisJLnJ4X3dpdGhfc2lzb19kaXZlcnNpdHkgPSB0cnVlCisKIHN0cnVjdCBpd2xfY2ZnIGl3bDEwMF9iZ25fY2ZnID0gewotCS5uYW1lID0gIkludGVsKFIpIDEwMCBTZXJpZXMgMXgxIEJHTiIsCi0JLmZ3X25hbWVfcHJlID0gSVdMMTAwX0ZXX1BSRSwKLQkudWNvZGVfYXBpX21heCA9IElXTDEwMF9VQ09ERV9BUElfTUFYLAotCS51Y29kZV9hcGlfbWluID0gSVdMMTAwX1VDT0RFX0FQSV9NSU4sCi0JLnNrdSA9IElXTF9TS1VfR3xJV0xfU0tVX04sCi0JLnZhbGlkX3R4X2FudCA9IEFOVF9BLAotCS52YWxpZF9yeF9hbnQgPSBBTlRfQSwKLQkuZWVwcm9tX3ZlciA9IEVFUFJPTV8xMDAwX0VFUFJPTV9WRVJTSU9OLAotCS5lZXByb21fY2FsaWJfdmVyID0gRUVQUk9NXzEwMDBfVFhfUE9XRVJfVkVSU0lPTiwKLQkub3BzID0gJml3bDEwMDBfb3BzLAotCS5tb2RfcGFyYW1zID0gJml3bGFnbl9tb2RfcGFyYW1zLAotCS5iYXNlX3BhcmFtcyA9ICZpd2wxMDAwX2Jhc2VfcGFyYW1zLAorCS5uYW1lID0gIkludGVsKFIpIENlbnRyaW5vKFIpIFdpcmVsZXNzLU4gMTAwIEJHTiIsCisJSVdMX0RFVklDRV8xMDAsCiAJLmh0X3BhcmFtcyA9ICZpd2wxMDAwX2h0X3BhcmFtcywKLQkudXNlX25ld19lZXByb21fcmVhZGluZyA9IHRydWUsCiB9OwogCiBzdHJ1Y3QgaXdsX2NmZyBpd2wxMDBfYmdfY2ZnID0gewotCS5uYW1lID0gIkludGVsKFIpIDEwMCBTZXJpZXMgMXgxIEJHIiwKLQkuZndfbmFtZV9wcmUgPSBJV0wxMDBfRldfUFJFLAotCS51Y29kZV9hcGlfbWF4ID0gSVdMMTAwX1VDT0RFX0FQSV9NQVgsCi0JLnVjb2RlX2FwaV9taW4gPSBJV0wxMDBfVUNPREVfQVBJX01JTiwKLQkuc2t1ID0gSVdMX1NLVV9HLAotCS52YWxpZF90eF9hbnQgPSBBTlRfQSwKLQkudmFsaWRfcnhfYW50ID0gQU5UX0EsCi0JLmVlcHJvbV92ZXIgPSBFRVBST01fMTAwMF9FRVBST01fVkVSU0lPTiwKLQkuZWVwcm9tX2NhbGliX3ZlciA9IEVFUFJPTV8xMDAwX1RYX1BPV0VSX1ZFUlNJT04sCi0JLm9wcyA9ICZpd2wxMDAwX29wcywKLQkubW9kX3BhcmFtcyA9ICZpd2xhZ25fbW9kX3BhcmFtcywKLQkuYmFzZV9wYXJhbXMgPSAmaXdsMTAwMF9iYXNlX3BhcmFtcywKLQkudXNlX25ld19lZXByb21fcmVhZGluZyA9IHRydWUsCisJLm5hbWUgPSAiSW50ZWwoUikgQ2VudHJpbm8oUikgV2lyZWxlc3MtTiAxMDAgQkciLAorCUlXTF9ERVZJQ0VfMTAwLAogfTsKIAogTU9EVUxFX0ZJUk1XQVJFKElXTDEwMDBfTU9EVUxFX0ZJUk1XQVJFKElXTDEwMDBfVUNPREVfQVBJX01BWCkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5jCmluZGV4IDE3NmU1MjUuLmE5Yjg1MmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LmMKQEAgLTUxLDYgKzUxLDcgQEAKICNpbmNsdWRlICJpd2wtbGVkLmgiCiAjaW5jbHVkZSAiaXdsLTM5NDUtbGVkLmgiCiAjaW5jbHVkZSAiaXdsLTM5NDUtZGVidWdmcy5oIgorI2luY2x1ZGUgIml3bC1sZWdhY3kuaCIKIAogI2RlZmluZSBJV0xfREVDTEFSRV9SQVRFX0lORk8ociwgaXAsIGluLCBycCwgcm4sIHBwLCBucCkgICAgXAogCVtJV0xfUkFURV8jI3IjI01fSU5ERVhdID0geyBJV0xfUkFURV8jI3IjI01fUExDUCwgICBcCkBAIC0xMTUsNyArMTE2LDcgQEAKIAl1MzIgYmFzZTsJCS8qIFNSQU0gYWRkcmVzcyBvZiBldmVudCBsb2cgaGVhZGVyICovCiAJdTMyIGRpc2FibGVfcHRyOwkvKiBTUkFNIGFkZHJlc3Mgb2YgZXZlbnQtZGlzYWJsZSBiaXRtYXAgYXJyYXkgKi8KIAl1MzIgYXJyYXlfc2l6ZTsJCS8qICMgb2YgdTMyIGVudHJpZXMgaW4gYXJyYXkgKi8KLQl1MzIgZXZ0X2Rpc2FibGVbSVdMX0VWVF9ESVNBQkxFX1NJWkVdID0geworCXN0YXRpYyBjb25zdCB1MzIgZXZ0X2Rpc2FibGVbSVdMX0VWVF9ESVNBQkxFX1NJWkVdID0gewogCQkweDAwMDAwMDAwLAkvKiAgIDMxIC0gICAgMCAgRXZlbnQgaWQgbnVtYmVycyAqLwogCQkweDAwMDAwMDAwLAkvKiAgIDYzIC0gICAzMiAqLwogCQkweDAwMDAwMDAwLAkvKiAgIDk1IC0gICA2NCAqLwpAQCAtMjk2LDcgKzI5Nyw3IEBACiAJaWYgKGl3bF9xdWV1ZV9zcGFjZShxKSA+IHEtPmxvd19tYXJrICYmICh0eHFfaWQgPj0gMCkgJiYKIAkJCSh0eHFfaWQgIT0gSVdMMzlfQ01EX1FVRVVFX05VTSkgJiYKIAkJCXByaXYtPm1hYzgwMjExX3JlZ2lzdGVyZWQpCi0JCWl3bF93YWtlX3F1ZXVlKHByaXYsIHR4cV9pZCk7CisJCWl3bF93YWtlX3F1ZXVlKHByaXYsIHR4cSk7CiB9CiAKIC8qKgpAQCAtMzI0LDYgKzMyNSw3IEBACiAJCXJldHVybjsKIAl9CiAKKwl0eHEtPnRpbWVfc3RhbXAgPSBqaWZmaWVzOwogCWluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHR4cS0+dHhiW3R4cS0+cS5yZWFkX3B0cl0uc2tiKTsKIAlpZWVlODAyMTFfdHhfaW5mb19jbGVhcl9zdGF0dXMoaW5mbyk7CiAKQEAgLTE0NTEsNiArMTQ1MywxMCBAQAogCX07CiAJdTE2IGNoYW47CiAKKwlpZiAoV0FSTl9PTkNFKHRlc3RfYml0KFNUQVRVU19TQ0FOX0hXLCAmcHJpdi0+c3RhdHVzKSwKKwkJICAgICAgIlRYIFBvd2VyIHJlcXVlc3RlZCB3aGlsZSBzY2FubmluZyFcbiIpKQorCQlyZXR1cm4gLUVBR0FJTjsKKwogCWNoYW4gPSBsZTE2X3RvX2NwdShwcml2LT5jb250ZXh0c1tJV0xfUlhPTl9DVFhfQlNTXS5hY3RpdmUuY2hhbm5lbCk7CiAKIAl0eHBvd2VyLmJhbmQgPSAocHJpdi0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKSA/IDAgOiAxOwpAQCAtMTc3OSw2ICsxNzg1LDkgQEAKIAlpbnQgcmMgPSAwOwogCWJvb2wgbmV3X2Fzc29jID0gISEoc3RhZ2luZ19yeG9uLT5maWx0ZXJfZmxhZ3MgJiBSWE9OX0ZJTFRFUl9BU1NPQ19NU0spOwogCisJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCWlmICghaXdsX2lzX2FsaXZlKHByaXYpKQogCQlyZXR1cm4gLTE7CiAKQEAgLTI3MjIsMTEgKzI3MzEsOSBAQAogCX0sCiAJLnNlbmRfdHhfcG93ZXIJPSBpd2wzOTQ1X3NlbmRfdHhfcG93ZXIsCiAJLmlzX3ZhbGlkX3J0Y19kYXRhX2FkZHIgPSBpd2wzOTQ1X2h3X3ZhbGlkX3J0Y19kYXRhX2FkZHIsCi0JLnBvc3RfYXNzb2NpYXRlID0gaXdsMzk0NV9wb3N0X2Fzc29jaWF0ZSwKLQkuaXNyID0gaXdsX2lzcl9sZWdhY3ksCi0JLmNvbmZpZ19hcCA9IGl3bDM5NDVfY29uZmlnX2FwLAotCS5tYW5hZ2VfaWJzc19zdGF0aW9uID0gaXdsMzk0NV9tYW5hZ2VfaWJzc19zdGF0aW9uLAotCS5yZWNvdmVyX2Zyb21fdHhfc3RhbGwgPSBpd2xfYmdfbW9uaXRvcl9yZWNvdmVyLAorCS5pc3Jfb3BzID0geworCQkuaXNyID0gaXdsX2lzcl9sZWdhY3ksCisJfSwKIAkuY2hlY2tfcGxjcF9oZWFsdGggPSBpd2wzOTQ1X2dvb2RfcGxjcF9oZWFsdGgsCiAKIAkuZGVidWdmc19vcHMgPSB7CkBAIC0yNzM2LDEwICsyNzQzLDE2IEBACiAJfSwKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaXdsX2xlZ2FjeV9vcHMgaXdsMzk0NV9sZWdhY3lfb3BzID0geworCS5wb3N0X2Fzc29jaWF0ZSA9IGl3bDM5NDVfcG9zdF9hc3NvY2lhdGUsCisJLmNvbmZpZ19hcCA9IGl3bDM5NDVfY29uZmlnX2FwLAorCS5tYW5hZ2VfaWJzc19zdGF0aW9uID0gaXdsMzk0NV9tYW5hZ2VfaWJzc19zdGF0aW9uLAorfTsKKwogc3RhdGljIHN0cnVjdCBpd2xfaGNtZF91dGlsc19vcHMgaXdsMzk0NV9oY21kX3V0aWxzID0gewogCS5nZXRfaGNtZF9zaXplID0gaXdsMzk0NV9nZXRfaGNtZF9zaXplLAogCS5idWlsZF9hZGRzdGFfaGNtZCA9IGl3bDM5NDVfYnVpbGRfYWRkc3RhX2hjbWQsCi0JLnR4X2NtZF9wcm90ZWN0aW9uID0gaXdsY29yZV90eF9jbWRfcHJvdGVjdGlvbiwKKwkudHhfY21kX3Byb3RlY3Rpb24gPSBpd2xfbGVnYWN5X3R4X2NtZF9wcm90ZWN0aW9uLAogCS5yZXF1ZXN0X3NjYW4gPSBpd2wzOTQ1X3JlcXVlc3Rfc2NhbiwKIAkucG9zdF9zY2FuID0gaXdsMzk0NV9wb3N0X3NjYW4sCiB9OwpAQCAtMjc0OSw2ICsyNzYyLDggQEAKIAkuaGNtZCA9ICZpd2wzOTQ1X2hjbWQsCiAJLnV0aWxzID0gJml3bDM5NDVfaGNtZF91dGlscywKIAkubGVkID0gJml3bDM5NDVfbGVkX29wcywKKwkubGVnYWN5ID0gJml3bDM5NDVfbGVnYWN5X29wcywKKwkuaWVlZTgwMjExX29wcyA9ICZpd2wzOTQ1X2h3X29wcywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaXdsX2Jhc2VfcGFyYW1zIGl3bDM5NDVfYmFzZV9wYXJhbXMgPSB7CkBAIC0yNzYxLDcgKzI3NzYsNyBAQAogCS5sZWRfY29tcGVuc2F0aW9uID0gNjQsCiAJLmJyb2tlbl9wb3dlcnNhdmUgPSB0cnVlLAogCS5wbGNwX2RlbHRhX3RocmVzaG9sZCA9IElXTF9NQVhfUExDUF9FUlJfTE9OR19USFJFU0hPTERfREVGLAotCS5tb25pdG9yX3JlY292ZXJfcGVyaW9kID0gSVdMX0RFRl9NT05JVE9SSU5HX1BFUklPRCwKKwkud2RfdGltZW91dCA9IElXTF9ERUZfV0RfVElNRU9VVCwKIAkubWF4X2V2ZW50X2xvZ19zaXplID0gNTEyLAogCS50eF9wb3dlcl9ieV9kcml2ZXIgPSB0cnVlLAogfTsKQEAgLTI3NzYsNiArMjc5MSw3IEBACiAJLm9wcyA9ICZpd2wzOTQ1X29wcywKIAkubW9kX3BhcmFtcyA9ICZpd2wzOTQ1X21vZF9wYXJhbXMsCiAJLmJhc2VfcGFyYW1zID0gJml3bDM5NDVfYmFzZV9wYXJhbXMsCisJLmxlZF9tb2RlID0gSVdMX0xFRF9CTElOSywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaXdsX2NmZyBpd2wzOTQ1X2FiZ19jZmcgPSB7CkBAIC0yNzg4LDYgKzI4MDQsNyBAQAogCS5vcHMgPSAmaXdsMzk0NV9vcHMsCiAJLm1vZF9wYXJhbXMgPSAmaXdsMzk0NV9tb2RfcGFyYW1zLAogCS5iYXNlX3BhcmFtcyA9ICZpd2wzOTQ1X2Jhc2VfcGFyYW1zLAorCS5sZWRfbW9kZSA9IElXTF9MRURfQkxJTkssCiB9OwogCiBERUZJTkVfUENJX0RFVklDRV9UQUJMRShpd2wzOTQ1X2h3X2NhcmRfaWRzKSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUuaAppbmRleCAwOTM5MWYwLi4zZWVmMWViIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5oCkBAIC0yNjQsMTAgKzI2NCw4IEBACiAJCQkgICAgICBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4Yik7CiBleHRlcm4gdm9pZCBpd2wzOTQ1X2Rpc2FibGVfZXZlbnRzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiBleHRlcm4gaW50IGl3bDQ5NjVfZ2V0X3RlbXBlcmF0dXJlKGNvbnN0IHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Ci1leHRlcm4gdm9pZCBpd2wzOTQ1X3Bvc3RfYXNzb2NpYXRlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKTsKLWV4dGVybiB2b2lkIGl3bDM5NDVfY29uZmlnX2FwKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpOworZXh0ZXJuIHZvaWQgaXdsMzk0NV9wb3N0X2Fzc29jaWF0ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworZXh0ZXJuIHZvaWQgaXdsMzk0NV9jb25maWdfYXAoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIAogZXh0ZXJuIGludCBpd2wzOTQ1X2NvbW1pdF9yeG9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCSAgICAgICBzdHJ1Y3QgaXdsX3J4b25fY29udGV4dCAqY3R4KTsKQEAgLTI4Miw2ICsyODAsOCBAQAogICovCiBleHRlcm4gdTggaXdsMzk0NV9od19maW5kX3N0YXRpb24oc3RydWN0IGl3bF9wcml2ICpwcml2LCBjb25zdCB1OCAqYnNzaWQpOwogCitleHRlcm4gc3RydWN0IGllZWU4MDIxMV9vcHMgaXdsMzk0NV9od19vcHM7CisKIC8qCiAgKiBGb3J3YXJkIGRlY2xhcmUgaXdsLTM5NDUuYyBmdW5jdGlvbnMgZm9yIGl3bC1iYXNlLmMKICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS5jCmluZGV4IGIyMDdlM2UuLjNmMWU1ZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTQ5NjUuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC00OTY1LmMKQEAgLTQ4LDYgKzQ4LDcgQEAKICNpbmNsdWRlICJpd2wtYWduLWxlZC5oIgogI2luY2x1ZGUgIml3bC1hZ24uaCIKICNpbmNsdWRlICJpd2wtYWduLWRlYnVnZnMuaCIKKyNpbmNsdWRlICJpd2wtbGVnYWN5LmgiCiAKIHN0YXRpYyBpbnQgaXdsNDk2NV9zZW5kX3R4X3Bvd2VyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiBzdGF0aWMgaW50IGl3bDQ5NjVfaHdfZ2V0X3RlbXBlcmF0dXJlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CkBAIC0xMzc3LDEzICsxMzc4LDkgQEAKIAl1OCBjdHJsX2NoYW5faGlnaCA9IDA7CiAJc3RydWN0IGl3bF9yeG9uX2NvbnRleHQgKmN0eCA9ICZwcml2LT5jb250ZXh0c1tJV0xfUlhPTl9DVFhfQlNTXTsKIAotCWlmICh0ZXN0X2JpdChTVEFUVVNfU0NBTk5JTkcsICZwcml2LT5zdGF0dXMpKSB7Ci0JCS8qIElmIHRoaXMgZ2V0cyBoaXQgYSBsb3QsIHN3aXRjaCBpdCB0byBhIEJVRygpIGFuZCBjYXRjaAotCQkgKiB0aGUgc3RhY2sgdHJhY2UgdG8gZmluZCBvdXQgd2hvIGlzIGNhbGxpbmcgdGhpcyBkdXJpbmcKLQkJICogYSBzY2FuLiAqLwotCQlJV0xfV0FSTihwcml2LCAiVFggUG93ZXIgcmVxdWVzdGVkIHdoaWxlIHNjYW5uaW5nIVxuIik7CisJaWYgKFdBUk5fT05DRSh0ZXN0X2JpdChTVEFUVVNfU0NBTl9IVywgJnByaXYtPnN0YXR1cyksCisJCSAgICAgICJUWCBQb3dlciByZXF1ZXN0ZWQgd2hpbGUgc2Nhbm5pbmchXG4iKSkKIAkJcmV0dXJuIC1FQUdBSU47Ci0JfQogCiAJYmFuZCA9IHByaXYtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWjsKIApAQCAtMTQ0Nyw2ICsxNDQ0LDE0MiBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgaXdsNDk2NV9jb21taXRfcnhvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfcnhvbl9jb250ZXh0ICpjdHgpCit7CisJLyogY2FzdCBhd2F5IHRoZSBjb25zdCBmb3IgYWN0aXZlX3J4b24gaW4gdGhpcyBmdW5jdGlvbiAqLworCXN0cnVjdCBpd2xfcnhvbl9jbWQgKmFjdGl2ZV9yeG9uID0gKHZvaWQgKikmY3R4LT5hY3RpdmU7CisJaW50IHJldDsKKwlib29sIG5ld19hc3NvYyA9CisJCSEhKGN0eC0+c3RhZ2luZy5maWx0ZXJfZmxhZ3MgJiBSWE9OX0ZJTFRFUl9BU1NPQ19NU0spOworCisJaWYgKCFpd2xfaXNfYWxpdmUocHJpdikpCisJCXJldHVybiAtRUJVU1k7CisKKwlpZiAoIWN0eC0+aXNfYWN0aXZlKQorCQlyZXR1cm4gMDsKKworCS8qIGFsd2F5cyBnZXQgdGltZXN0YW1wIHdpdGggUnggZnJhbWUgKi8KKwljdHgtPnN0YWdpbmcuZmxhZ3MgfD0gUlhPTl9GTEdfVFNGMkhPU1RfTVNLOworCisJcmV0ID0gaXdsX2NoZWNrX3J4b25fY21kKHByaXYsIGN0eCk7CisJaWYgKHJldCkgeworCQlJV0xfRVJSKHByaXYsICJJbnZhbGlkIFJYT04gY29uZmlndXJhdGlvbi4gIE5vdCBjb21taXR0aW5nLlxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qCisJICogcmVjZWl2ZSBjb21taXRfcnhvbiByZXF1ZXN0CisJICogYWJvcnQgYW55IHByZXZpb3VzIGNoYW5uZWwgc3dpdGNoIGlmIHN0aWxsIGluIHByb2Nlc3MKKwkgKi8KKwlpZiAocHJpdi0+c3dpdGNoX3J4b24uc3dpdGNoX2luX3Byb2dyZXNzICYmCisJICAgIChwcml2LT5zd2l0Y2hfcnhvbi5jaGFubmVsICE9IGN0eC0+c3RhZ2luZy5jaGFubmVsKSkgeworCQlJV0xfREVCVUdfMTFIKHByaXYsICJhYm9ydCBjaGFubmVsIHN3aXRjaCBvbiAlZFxuIiwKKwkJICAgICAgbGUxNl90b19jcHUocHJpdi0+c3dpdGNoX3J4b24uY2hhbm5lbCkpOworCQlpd2xfY2hzd2l0Y2hfZG9uZShwcml2LCBmYWxzZSk7CisJfQorCisJLyogSWYgd2UgZG9uJ3QgbmVlZCB0byBzZW5kIGEgZnVsbCBSWE9OLCB3ZSBjYW4gdXNlCisJICogaXdsX3J4b25fYXNzb2NfY21kIHdoaWNoIGlzIHVzZWQgdG8gcmVjb25maWd1cmUgZmlsdGVyCisJICogYW5kIG90aGVyIGZsYWdzIGZvciB0aGUgY3VycmVudCByYWRpbyBjb25maWd1cmF0aW9uLiAqLworCWlmICghaXdsX2Z1bGxfcnhvbl9yZXF1aXJlZChwcml2LCBjdHgpKSB7CisJCXJldCA9IGl3bF9zZW5kX3J4b25fYXNzb2MocHJpdiwgY3R4KTsKKwkJaWYgKHJldCkgeworCQkJSVdMX0VSUihwcml2LCAiRXJyb3Igc2V0dGluZyBSWE9OX0FTU09DICglZClcbiIsIHJldCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJbWVtY3B5KGFjdGl2ZV9yeG9uLCAmY3R4LT5zdGFnaW5nLCBzaXplb2YoKmFjdGl2ZV9yeG9uKSk7CisJCWl3bF9wcmludF9yeF9jb25maWdfY21kKHByaXYsIGN0eCk7CisJCXJldHVybiAwOworCX0KKworCS8qIElmIHdlIGFyZSBjdXJyZW50bHkgYXNzb2NpYXRlZCBhbmQgdGhlIG5ldyBjb25maWcgcmVxdWlyZXMKKwkgKiBhbiBSWE9OX0FTU09DIGFuZCB0aGUgbmV3IGNvbmZpZyB3YW50cyB0aGUgYXNzb2NpYXRlZCBtYXNrIGVuYWJsZWQsCisJICogd2UgbXVzdCBjbGVhciB0aGUgYXNzb2NpYXRlZCBmcm9tIHRoZSBhY3RpdmUgY29uZmlndXJhdGlvbgorCSAqIGJlZm9yZSB3ZSBhcHBseSB0aGUgbmV3IGNvbmZpZyAqLworCWlmIChpd2xfaXNfYXNzb2NpYXRlZF9jdHgoY3R4KSAmJiBuZXdfYXNzb2MpIHsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlRvZ2dsaW5nIGFzc29jaWF0ZWQgYml0IG9uIGN1cnJlbnQgUlhPTlxuIik7CisJCWFjdGl2ZV9yeG9uLT5maWx0ZXJfZmxhZ3MgJj0gflJYT05fRklMVEVSX0FTU09DX01TSzsKKworCQlyZXQgPSBpd2xfc2VuZF9jbWRfcGR1KHByaXYsIGN0eC0+cnhvbl9jbWQsCisJCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgaXdsX3J4b25fY21kKSwKKwkJCQkgICAgICAgYWN0aXZlX3J4b24pOworCisJCS8qIElmIHRoZSBtYXNrIGNsZWFyaW5nIGZhaWxlZCB0aGVuIHdlIHNldAorCQkgKiBhY3RpdmVfcnhvbiBiYWNrIHRvIHdoYXQgaXQgd2FzIHByZXZpb3VzbHkgKi8KKwkJaWYgKHJldCkgeworCQkJYWN0aXZlX3J4b24tPmZpbHRlcl9mbGFncyB8PSBSWE9OX0ZJTFRFUl9BU1NPQ19NU0s7CisJCQlJV0xfRVJSKHByaXYsICJFcnJvciBjbGVhcmluZyBBU1NPQ19NU0sgKCVkKVxuIiwgcmV0KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwkJaXdsX2NsZWFyX3Vjb2RlX3N0YXRpb25zKHByaXYsIGN0eCk7CisJCWl3bF9yZXN0b3JlX3N0YXRpb25zKHByaXYsIGN0eCk7CisJCXJldCA9IGl3bF9yZXN0b3JlX2RlZmF1bHRfd2VwX2tleXMocHJpdiwgY3R4KTsKKwkJaWYgKHJldCkgeworCQkJSVdMX0VSUihwcml2LCAiRmFpbGVkIHRvIHJlc3RvcmUgV0VQIGtleXMgKCVkKVxuIiwgcmV0KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiU2VuZGluZyBSWE9OXG4iCisJCSAgICAgICAiKiB3aXRoJXMgUlhPTl9GSUxURVJfQVNTT0NfTVNLXG4iCisJCSAgICAgICAiKiBjaGFubmVsID0gJWRcbiIKKwkJICAgICAgICIqIGJzc2lkID0gJXBNXG4iLAorCQkgICAgICAgKG5ld19hc3NvYyA/ICIiIDogIm91dCIpLAorCQkgICAgICAgbGUxNl90b19jcHUoY3R4LT5zdGFnaW5nLmNoYW5uZWwpLAorCQkgICAgICAgY3R4LT5zdGFnaW5nLmJzc2lkX2FkZHIpOworCisJaXdsX3NldF9yeG9uX2h3Y3J5cHRvKHByaXYsIGN0eCwgIXByaXYtPmNmZy0+bW9kX3BhcmFtcy0+c3dfY3J5cHRvKTsKKworCS8qIEFwcGx5IHRoZSBuZXcgY29uZmlndXJhdGlvbgorCSAqIFJYT04gdW5hc3NvYyBjbGVhcnMgdGhlIHN0YXRpb24gdGFibGUgaW4gdUNvZGUgc28gcmVzdG9yYXRpb24gb2YKKwkgKiBzdGF0aW9ucyBpcyBuZWVkZWQgYWZ0ZXIgaXQgKHRoZSBSWE9OIGNvbW1hbmQpIGNvbXBsZXRlcworCSAqLworCWlmICghbmV3X2Fzc29jKSB7CisJCXJldCA9IGl3bF9zZW5kX2NtZF9wZHUocHJpdiwgY3R4LT5yeG9uX2NtZCwKKwkJCSAgICAgIHNpemVvZihzdHJ1Y3QgaXdsX3J4b25fY21kKSwgJmN0eC0+c3RhZ2luZyk7CisJCWlmIChyZXQpIHsKKwkJCUlXTF9FUlIocHJpdiwgIkVycm9yIHNldHRpbmcgbmV3IFJYT04gKCVkKVxuIiwgcmV0KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlJldHVybiBmcm9tICFuZXdfYXNzb2MgUlhPTi5cbiIpOworCQltZW1jcHkoYWN0aXZlX3J4b24sICZjdHgtPnN0YWdpbmcsIHNpemVvZigqYWN0aXZlX3J4b24pKTsKKwkJaXdsX2NsZWFyX3Vjb2RlX3N0YXRpb25zKHByaXYsIGN0eCk7CisJCWl3bF9yZXN0b3JlX3N0YXRpb25zKHByaXYsIGN0eCk7CisJCXJldCA9IGl3bF9yZXN0b3JlX2RlZmF1bHRfd2VwX2tleXMocHJpdiwgY3R4KTsKKwkJaWYgKHJldCkgeworCQkJSVdMX0VSUihwcml2LCAiRmFpbGVkIHRvIHJlc3RvcmUgV0VQIGtleXMgKCVkKVxuIiwgcmV0KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisJaWYgKG5ld19hc3NvYykgeworCQlwcml2LT5zdGFydF9jYWxpYiA9IDA7CisJCS8qIEFwcGx5IHRoZSBuZXcgY29uZmlndXJhdGlvbgorCQkgKiBSWE9OIGFzc29jIGRvZXNuJ3QgY2xlYXIgdGhlIHN0YXRpb24gdGFibGUgaW4gdUNvZGUsCisJCSAqLworCQlyZXQgPSBpd2xfc2VuZF9jbWRfcGR1KHByaXYsIGN0eC0+cnhvbl9jbWQsCisJCQkgICAgICBzaXplb2Yoc3RydWN0IGl3bF9yeG9uX2NtZCksICZjdHgtPnN0YWdpbmcpOworCQlpZiAocmV0KSB7CisJCQlJV0xfRVJSKHByaXYsICJFcnJvciBzZXR0aW5nIG5ldyBSWE9OICglZClcbiIsIHJldCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJCW1lbWNweShhY3RpdmVfcnhvbiwgJmN0eC0+c3RhZ2luZywgc2l6ZW9mKCphY3RpdmVfcnhvbikpOworCX0KKwlpd2xfcHJpbnRfcnhfY29uZmlnX2NtZChwcml2LCBjdHgpOworCisJaXdsX2luaXRfc2Vuc2l0aXZpdHkocHJpdik7CisKKwkvKiBJZiB3ZSBpc3N1ZSBhIG5ldyBSWE9OIGNvbW1hbmQgd2hpY2ggcmVxdWlyZWQgYSB0dW5lIHRoZW4gd2UgbXVzdAorCSAqIHNlbmQgYSBuZXcgVFhQT1dFUiBjb21tYW5kIG9yIHdlIHdvbid0IGJlIGFibGUgdG8gVHggYW55IGZyYW1lcyAqLworCXJldCA9IGl3bF9zZXRfdHhfcG93ZXIocHJpdiwgcHJpdi0+dHhfcG93ZXJfdXNlcl9sbXQsIHRydWUpOworCWlmIChyZXQpIHsKKwkJSVdMX0VSUihwcml2LCAiRXJyb3Igc2VuZGluZyBUWCBwb3dlciAoJWQpXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGl3bDQ5NjVfaHdfY2hhbm5lbF9zd2l0Y2goc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsX3N3aXRjaCAqY2hfc3dpdGNoKQogewpAQCAtMTU1NCwyMiArMTY4Nyw2IEBACiB9CiAKIC8qKgotICogc2lnbl9leHRlbmQgLSBTaWduIGV4dGVuZCBhIHZhbHVlIHVzaW5nIHNwZWNpZmllZCBiaXQgYXMgc2lnbi1iaXQKLSAqCi0gKiBFeGFtcGxlOiBzaWduX2V4dGVuZCg5LCAzKSB3b3VsZCByZXR1cm4gLTcgYXMgYml0MyBvZiAxMDAxYiBpcyAxCi0gKiBhbmQgYml0MC4uMiBpcyAwMDFiIHdoaWNoIHdoZW4gc2lnbiBleHRlbmRlZCB0byAxMTExMTExMTExMTExMDAxYiBpcyAtNy4KLSAqCi0gKiBAcGFyYW0gb3BlciB2YWx1ZSB0byBzaWduIGV4dGVuZAotICogQHBhcmFtIGluZGV4IDAgYmFzZWQgYml0IGluZGV4ICgwPD1pbmRleDwzMikgdG8gc2lnbiBiaXQKLSAqLwotc3RhdGljIHMzMiBzaWduX2V4dGVuZCh1MzIgb3BlciwgaW50IGluZGV4KQotewotCXU4IHNoaWZ0ID0gMzEgLSBpbmRleDsKLQotCXJldHVybiAoczMyKShvcGVyIDw8IHNoaWZ0KSA+PiBzaGlmdDsKLX0KLQotLyoqCiAgKiBpd2w0OTY1X2h3X2dldF90ZW1wZXJhdHVyZSAtIHJldHVybiB0aGUgY2FsaWJyYXRlZCB0ZW1wZXJhdHVyZSAoaW4gS2VsdmluKQogICogQHN0YXRpc3RpY3M6IFByb3ZpZGVzIHRoZSB0ZW1wZXJhdHVyZSByZWFkaW5nIGZyb20gdGhlIHVDb2RlCiAgKgpAQCAtMTYwNiw5ICsxNzIzLDkgQEAKIAkgKiAiaW5pdGlhbGl6ZSIgQUxJVkUgcmVzcG9uc2UuCiAJICovCiAJaWYgKCF0ZXN0X2JpdChTVEFUVVNfVEVNUEVSQVRVUkUsICZwcml2LT5zdGF0dXMpKQotCQl2dCA9IHNpZ25fZXh0ZW5kKFI0LCAyMyk7CisJCXZ0ID0gc2lnbl9leHRlbmQzMihSNCwgMjMpOwogCWVsc2UKLQkJdnQgPSBzaWduX2V4dGVuZChsZTMyX3RvX2NwdShwcml2LT5fYWduLnN0YXRpc3RpY3MuCisJCXZ0ID0gc2lnbl9leHRlbmQzMihsZTMyX3RvX2NwdShwcml2LT5fYWduLnN0YXRpc3RpY3MuCiAJCQkJIGdlbmVyYWwuY29tbW9uLnRlbXBlcmF0dXJlKSwgMjMpOwogCiAJSVdMX0RFQlVHX1RFTVAocHJpdiwgIkNhbGliIHZhbHVlcyBSWzEtM106ICVkICVkICVkIFI0OiAlZFxuIiwgUjEsIFIyLCBSMywgdnQpOwpAQCAtMjA4MSw2ICsyMTk4LDcgQEAKIAkJcmV0dXJuOwogCX0KIAorCXR4cS0+dGltZV9zdGFtcCA9IGppZmZpZXM7CiAJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IodHhxLT50eGJbdHhxLT5xLnJlYWRfcHRyXS5za2IpOwogCW1lbXNldCgmaW5mby0+c3RhdHVzLCAwLCBzaXplb2YoaW5mby0+c3RhdHVzKSk7CiAKQEAgLTIxMjEsMTIgKzIyMzksOCBAQAogCiAJCQlpZiAocHJpdi0+bWFjODAyMTFfcmVnaXN0ZXJlZCAmJgogCQkJICAgIChpd2xfcXVldWVfc3BhY2UoJnR4cS0+cSkgPiB0eHEtPnEubG93X21hcmspICYmCi0JCQkgICAgKGFnZy0+c3RhdGUgIT0gSVdMX0VNUFRZSU5HX0hXX1FVRVVFX0RFTEJBKSkgewotCQkJCWlmIChhZ2ctPnN0YXRlID09IElXTF9BR0dfT0ZGKQotCQkJCQlpd2xfd2FrZV9xdWV1ZShwcml2LCB0eHFfaWQpOwotCQkJCWVsc2UKLQkJCQkJaXdsX3dha2VfcXVldWUocHJpdiwgdHhxLT5zd3FfaWQpOwotCQkJfQorCQkJICAgIChhZ2ctPnN0YXRlICE9IElXTF9FTVBUWUlOR19IV19RVUVVRV9ERUxCQSkpCisJCQkJaXdsX3dha2VfcXVldWUocHJpdiwgdHhxKTsKIAkJfQogCX0gZWxzZSB7CiAJCWluZm8tPnN0YXR1cy5yYXRlc1swXS5jb3VudCA9IHR4X3Jlc3AtPmZhaWx1cmVfZnJhbWUgKyAxOwpAQCAtMjE1MCw3ICsyMjY0LDcgQEAKIAogCQlpZiAocHJpdi0+bWFjODAyMTFfcmVnaXN0ZXJlZCAmJgogCQkgICAgKGl3bF9xdWV1ZV9zcGFjZSgmdHhxLT5xKSA+IHR4cS0+cS5sb3dfbWFyaykpCi0JCQlpd2xfd2FrZV9xdWV1ZShwcml2LCB0eHFfaWQpOworCQkJaXdsX3dha2VfcXVldWUocHJpdiwgdHhxKTsKIAl9CiAJaWYgKHFjICYmIGxpa2VseShzdGFfaWQgIT0gSVdMX0lOVkFMSURfU1RBVElPTikpCiAJCWl3bGFnbl90eHFfY2hlY2tfZW1wdHkocHJpdiwgc3RhX2lkLCB0aWQsIHR4cV9pZCk7CkBAIC0yMjE2LDcgKzIzMzAsNyBAQAogCiBzdGF0aWMgc3RydWN0IGl3bF9oY21kX29wcyBpd2w0OTY1X2hjbWQgPSB7CiAJLnJ4b25fYXNzb2MgPSBpd2w0OTY1X3NlbmRfcnhvbl9hc3NvYywKLQkuY29tbWl0X3J4b24gPSBpd2xhZ25fY29tbWl0X3J4b24sCisJLmNvbW1pdF9yeG9uID0gaXdsNDk2NV9jb21taXRfcnhvbiwKIAkuc2V0X3J4b25fY2hhaW4gPSBpd2xhZ25fc2V0X3J4b25fY2hhaW4sCiAJLnNlbmRfYnRfY29uZmlnID0gaXdsX3NlbmRfYnRfY29uZmlnLAogfTsKQEAgLTIyMzMsMTIgKzIzNDcsMTU1IEBACiAJCWl3bGNvcmVfY29tbWl0X3J4b24ocHJpdiwgY3R4KTsKIH0KIAorc3RhdGljIHZvaWQgaXdsNDk2NV9wb3N0X2Fzc29jaWF0ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJc3RydWN0IGl3bF9yeG9uX2NvbnRleHQgKmN0eCA9ICZwcml2LT5jb250ZXh0c1tJV0xfUlhPTl9DVFhfQlNTXTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmID0gY3R4LT52aWY7CisJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gTlVMTDsKKwlpbnQgcmV0ID0gMDsKKworCWlmICghdmlmIHx8ICFwcml2LT5pc19vcGVuKQorCQlyZXR1cm47CisKKwlpZiAodmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7CisJCUlXTF9FUlIocHJpdiwgIiVzIFNob3VsZCBub3QgYmUgY2FsbGVkIGluIEFQIG1vZGVcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuOworCX0KKworCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKKwkJcmV0dXJuOworCisJaXdsX3NjYW5fY2FuY2VsX3RpbWVvdXQocHJpdiwgMjAwKTsKKworCWNvbmYgPSBpZWVlODAyMTFfZ2V0X2h3X2NvbmYocHJpdi0+aHcpOworCisJY3R4LT5zdGFnaW5nLmZpbHRlcl9mbGFncyAmPSB+UlhPTl9GSUxURVJfQVNTT0NfTVNLOworCWl3bGNvcmVfY29tbWl0X3J4b24ocHJpdiwgY3R4KTsKKworCXJldCA9IGl3bF9zZW5kX3J4b25fdGltaW5nKHByaXYsIGN0eCk7CisJaWYgKHJldCkKKwkJSVdMX1dBUk4ocHJpdiwgIlJYT04gdGltaW5nIC0gIgorCQkJICAgICJBdHRlbXB0aW5nIHRvIGNvbnRpbnVlLlxuIik7CisKKwljdHgtPnN0YWdpbmcuZmlsdGVyX2ZsYWdzIHw9IFJYT05fRklMVEVSX0FTU09DX01TSzsKKworCWl3bF9zZXRfcnhvbl9odChwcml2LCAmcHJpdi0+Y3VycmVudF9odF9jb25maWcpOworCisJaWYgKHByaXYtPmNmZy0+b3BzLT5oY21kLT5zZXRfcnhvbl9jaGFpbikKKwkJcHJpdi0+Y2ZnLT5vcHMtPmhjbWQtPnNldF9yeG9uX2NoYWluKHByaXYsIGN0eCk7CisKKwljdHgtPnN0YWdpbmcuYXNzb2NfaWQgPSBjcHVfdG9fbGUxNih2aWYtPmJzc19jb25mLmFpZCk7CisKKwlJV0xfREVCVUdfQVNTT0MocHJpdiwgImFzc29jIGlkICVkIGJlYWNvbiBpbnRlcnZhbCAlZFxuIiwKKwkJCXZpZi0+YnNzX2NvbmYuYWlkLCB2aWYtPmJzc19jb25mLmJlYWNvbl9pbnQpOworCisJaWYgKHZpZi0+YnNzX2NvbmYudXNlX3Nob3J0X3ByZWFtYmxlKQorCQljdHgtPnN0YWdpbmcuZmxhZ3MgfD0gUlhPTl9GTEdfU0hPUlRfUFJFQU1CTEVfTVNLOworCWVsc2UKKwkJY3R4LT5zdGFnaW5nLmZsYWdzICY9IH5SWE9OX0ZMR19TSE9SVF9QUkVBTUJMRV9NU0s7CisKKwlpZiAoY3R4LT5zdGFnaW5nLmZsYWdzICYgUlhPTl9GTEdfQkFORF8yNEdfTVNLKSB7CisJCWlmICh2aWYtPmJzc19jb25mLnVzZV9zaG9ydF9zbG90KQorCQkJY3R4LT5zdGFnaW5nLmZsYWdzIHw9IFJYT05fRkxHX1NIT1JUX1NMT1RfTVNLOworCQllbHNlCisJCQljdHgtPnN0YWdpbmcuZmxhZ3MgJj0gflJYT05fRkxHX1NIT1JUX1NMT1RfTVNLOworCX0KKworCWl3bGNvcmVfY29tbWl0X3J4b24ocHJpdiwgY3R4KTsKKworCUlXTF9ERUJVR19BU1NPQyhwcml2LCAiQXNzb2NpYXRlZCBhcyAlZCB0bzogJXBNXG4iLAorCQkJdmlmLT5ic3NfY29uZi5haWQsIGN0eC0+YWN0aXZlLmJzc2lkX2FkZHIpOworCisJc3dpdGNoICh2aWYtPnR5cGUpIHsKKwljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CisJCWJyZWFrOworCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CisJCWl3bGFnbl9zZW5kX2JlYWNvbl9jbWQocHJpdik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUlXTF9FUlIocHJpdiwgIiVzIFNob3VsZCBub3QgYmUgY2FsbGVkIGluICVkIG1vZGVcbiIsCisJCQkgIF9fZnVuY19fLCB2aWYtPnR5cGUpOworCQlicmVhazsKKwl9CisKKwkvKiB0aGUgY2hhaW4gbm9pc2UgY2FsaWJyYXRpb24gd2lsbCBlbmFibGVkIFBNIHVwb24gY29tcGxldGlvbgorCSAqIElmIGNoYWluIG5vaXNlIGhhcyBhbHJlYWR5IGJlZW4gcnVuLCB0aGVuIHdlIG5lZWQgdG8gZW5hYmxlCisJICogcG93ZXIgbWFuYWdlbWVudCBoZXJlICovCisJaWYgKHByaXYtPmNoYWluX25vaXNlX2RhdGEuc3RhdGUgPT0gSVdMX0NIQUlOX05PSVNFX0RPTkUpCisJCWl3bF9wb3dlcl91cGRhdGVfbW9kZShwcml2LCBmYWxzZSk7CisKKwkvKiBFbmFibGUgUnggZGlmZmVyZW50aWFsIGdhaW4gYW5kIHNlbnNpdGl2aXR5IGNhbGlicmF0aW9ucyAqLworCWl3bF9jaGFpbl9ub2lzZV9yZXNldChwcml2KTsKKwlwcml2LT5zdGFydF9jYWxpYiA9IDE7Cit9CisKK3N0YXRpYyB2b2lkIGl3bDQ5NjVfY29uZmlnX2FwKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwlzdHJ1Y3QgaXdsX3J4b25fY29udGV4dCAqY3R4ID0gJnByaXYtPmNvbnRleHRzW0lXTF9SWE9OX0NUWF9CU1NdOworCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYgPSBjdHgtPnZpZjsKKwlpbnQgcmV0ID0gMDsKKworCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJnByaXYtPm11dGV4KTsKKworCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKKwkJcmV0dXJuOworCisJLyogVGhlIGZvbGxvd2luZyBzaG91bGQgYmUgZG9uZSBvbmx5IGF0IEFQIGJyaW5nIHVwICovCisJaWYgKCFpd2xfaXNfYXNzb2NpYXRlZF9jdHgoY3R4KSkgeworCisJCS8qIFJYT04gLSB1bmFzc29jICh0byBzZXQgdGltaW5nIGNvbW1hbmQpICovCisJCWN0eC0+c3RhZ2luZy5maWx0ZXJfZmxhZ3MgJj0gflJYT05fRklMVEVSX0FTU09DX01TSzsKKwkJaXdsY29yZV9jb21taXRfcnhvbihwcml2LCBjdHgpOworCisJCS8qIFJYT04gVGltaW5nICovCisJCXJldCA9IGl3bF9zZW5kX3J4b25fdGltaW5nKHByaXYsIGN0eCk7CisJCWlmIChyZXQpCisJCQlJV0xfV0FSTihwcml2LCAiUlhPTiB0aW1pbmcgZmFpbGVkIC0gIgorCQkJCQkiQXR0ZW1wdGluZyB0byBjb250aW51ZS5cbiIpOworCisJCS8qIEFQIGhhcyBhbGwgYW50ZW5uYXMgKi8KKwkJcHJpdi0+Y2hhaW5fbm9pc2VfZGF0YS5hY3RpdmVfY2hhaW5zID0KKwkJCXByaXYtPmh3X3BhcmFtcy52YWxpZF9yeF9hbnQ7CisJCWl3bF9zZXRfcnhvbl9odChwcml2LCAmcHJpdi0+Y3VycmVudF9odF9jb25maWcpOworCQlpZiAocHJpdi0+Y2ZnLT5vcHMtPmhjbWQtPnNldF9yeG9uX2NoYWluKQorCQkJcHJpdi0+Y2ZnLT5vcHMtPmhjbWQtPnNldF9yeG9uX2NoYWluKHByaXYsIGN0eCk7CisKKwkJY3R4LT5zdGFnaW5nLmFzc29jX2lkID0gMDsKKworCQlpZiAodmlmLT5ic3NfY29uZi51c2Vfc2hvcnRfcHJlYW1ibGUpCisJCQljdHgtPnN0YWdpbmcuZmxhZ3MgfD0KKwkJCQlSWE9OX0ZMR19TSE9SVF9QUkVBTUJMRV9NU0s7CisJCWVsc2UKKwkJCWN0eC0+c3RhZ2luZy5mbGFncyAmPQorCQkJCX5SWE9OX0ZMR19TSE9SVF9QUkVBTUJMRV9NU0s7CisKKwkJaWYgKGN0eC0+c3RhZ2luZy5mbGFncyAmIFJYT05fRkxHX0JBTkRfMjRHX01TSykgeworCQkJaWYgKHZpZi0+YnNzX2NvbmYudXNlX3Nob3J0X3Nsb3QpCisJCQkJY3R4LT5zdGFnaW5nLmZsYWdzIHw9CisJCQkJCVJYT05fRkxHX1NIT1JUX1NMT1RfTVNLOworCQkJZWxzZQorCQkJCWN0eC0+c3RhZ2luZy5mbGFncyAmPQorCQkJCQl+UlhPTl9GTEdfU0hPUlRfU0xPVF9NU0s7CisJCX0KKwkJLyogbmVlZCB0byBzZW5kIGJlYWNvbiBjbWQgYmVmb3JlIGNvbW1pdHRpbmcgYXNzb2MgUlhPTiEgKi8KKwkJaXdsYWduX3NlbmRfYmVhY29uX2NtZChwcml2KTsKKwkJLyogcmVzdG9yZSBSWE9OIGFzc29jICovCisJCWN0eC0+c3RhZ2luZy5maWx0ZXJfZmxhZ3MgfD0gUlhPTl9GSUxURVJfQVNTT0NfTVNLOworCQlpd2xjb3JlX2NvbW1pdF9yeG9uKHByaXYsIGN0eCk7CisJfQorCWl3bGFnbl9zZW5kX2JlYWNvbl9jbWQocHJpdik7CisKKwkvKiBGSVhNRSAtIHdlIG5lZWQgdG8gYWRkIGNvZGUgaGVyZSB0byBkZXRlY3QgYSB0b3RhbGx5IG5ldworCSAqIGNvbmZpZ3VyYXRpb24sIHJlc2V0IHRoZSBBUCwgdW5hc3NvYywgcnhvbiB0aW1pbmcsIGFzc29jLAorCSAqIGNsZWFyIHN0YSB0YWJsZSwgYWRkIEJDQVNUIHN0YS4uLiAqLworfQorCiBzdGF0aWMgc3RydWN0IGl3bF9oY21kX3V0aWxzX29wcyBpd2w0OTY1X2hjbWRfdXRpbHMgPSB7CiAJLmdldF9oY21kX3NpemUgPSBpd2w0OTY1X2dldF9oY21kX3NpemUsCiAJLmJ1aWxkX2FkZHN0YV9oY21kID0gaXdsNDk2NV9idWlsZF9hZGRzdGFfaGNtZCwKIAkuY2hhaW5fbm9pc2VfcmVzZXQgPSBpd2w0OTY1X2NoYWluX25vaXNlX3Jlc2V0LAogCS5nYWluX2NvbXB1dGF0aW9uID0gaXdsNDk2NV9nYWluX2NvbXB1dGF0aW9uLAotCS50eF9jbWRfcHJvdGVjdGlvbiA9IGl3bGNvcmVfdHhfY21kX3Byb3RlY3Rpb24sCisJLnR4X2NtZF9wcm90ZWN0aW9uID0gaXdsX2xlZ2FjeV90eF9jbWRfcHJvdGVjdGlvbiwKIAkuY2FsY19yc3NpID0gaXdsNDk2NV9jYWxjX3Jzc2ksCiAJLnJlcXVlc3Rfc2NhbiA9IGl3bGFnbl9yZXF1ZXN0X3NjYW4sCiAJLnBvc3Rfc2NhbiA9IGl3bDQ5NjVfcG9zdF9zY2FuLApAQCAtMjI4NSwxNCArMjU0MiwxMiBAQAogCX0sCiAJLnNlbmRfdHhfcG93ZXIJPSBpd2w0OTY1X3NlbmRfdHhfcG93ZXIsCiAJLnVwZGF0ZV9jaGFpbl9mbGFncyA9IGl3bF91cGRhdGVfY2hhaW5fZmxhZ3MsCi0JLnBvc3RfYXNzb2NpYXRlID0gaXdsX3Bvc3RfYXNzb2NpYXRlLAotCS5jb25maWdfYXAgPSBpd2xfY29uZmlnX2FwLAotCS5pc3IgPSBpd2xfaXNyX2xlZ2FjeSwKKwkuaXNyX29wcyA9IHsKKwkJLmlzciA9IGl3bF9pc3JfbGVnYWN5LAorCX0sCiAJLnRlbXBfb3BzID0gewogCQkudGVtcGVyYXR1cmUgPSBpd2w0OTY1X3RlbXBlcmF0dXJlX2NhbGliLAogCX0sCi0JLm1hbmFnZV9pYnNzX3N0YXRpb24gPSBpd2xhZ25fbWFuYWdlX2lic3Nfc3RhdGlvbiwKLQkudXBkYXRlX2JjYXN0X3N0YXRpb25zID0gaXdsX3VwZGF0ZV9iY2FzdF9zdGF0aW9ucywKIAkuZGVidWdmc19vcHMgPSB7CiAJCS5yeF9zdGF0c19yZWFkID0gaXdsX3Vjb2RlX3J4X3N0YXRzX3JlYWQsCiAJCS50eF9zdGF0c19yZWFkID0gaXdsX3Vjb2RlX3R4X3N0YXRzX3JlYWQsCkBAIC0yMzAwLDE1ICsyNTU1LDQ2IEBACiAJCS5idF9zdGF0c19yZWFkID0gaXdsX3Vjb2RlX2J0X3N0YXRzX3JlYWQsCiAJCS5yZXBseV90eF9lcnJvciA9IGl3bF9yZXBseV90eF9lcnJvcl9yZWFkLAogCX0sCi0JLnJlY292ZXJfZnJvbV90eF9zdGFsbCA9IGl3bF9iZ19tb25pdG9yX3JlY292ZXIsCiAJLmNoZWNrX3BsY3BfaGVhbHRoID0gaXdsX2dvb2RfcGxjcF9oZWFsdGgsCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IGl3bF9sZWdhY3lfb3BzIGl3bDQ5NjVfbGVnYWN5X29wcyA9IHsKKwkucG9zdF9hc3NvY2lhdGUgPSBpd2w0OTY1X3Bvc3RfYXNzb2NpYXRlLAorCS5jb25maWdfYXAgPSBpd2w0OTY1X2NvbmZpZ19hcCwKKwkubWFuYWdlX2lic3Nfc3RhdGlvbiA9IGl3bGFnbl9tYW5hZ2VfaWJzc19zdGF0aW9uLAorCS51cGRhdGVfYmNhc3Rfc3RhdGlvbnMgPSBpd2xfdXBkYXRlX2JjYXN0X3N0YXRpb25zLAorfTsKKworc3RydWN0IGllZWU4MDIxMV9vcHMgaXdsNDk2NV9od19vcHMgPSB7CisJLnR4ID0gaXdsYWduX21hY190eCwKKwkuc3RhcnQgPSBpd2xhZ25fbWFjX3N0YXJ0LAorCS5zdG9wID0gaXdsYWduX21hY19zdG9wLAorCS5hZGRfaW50ZXJmYWNlID0gaXdsX21hY19hZGRfaW50ZXJmYWNlLAorCS5yZW1vdmVfaW50ZXJmYWNlID0gaXdsX21hY19yZW1vdmVfaW50ZXJmYWNlLAorCS5jaGFuZ2VfaW50ZXJmYWNlID0gaXdsX21hY19jaGFuZ2VfaW50ZXJmYWNlLAorCS5jb25maWcgPSBpd2xfbGVnYWN5X21hY19jb25maWcsCisJLmNvbmZpZ3VyZV9maWx0ZXIgPSBpd2xhZ25fY29uZmlndXJlX2ZpbHRlciwKKwkuc2V0X2tleSA9IGl3bGFnbl9tYWNfc2V0X2tleSwKKwkudXBkYXRlX3RraXBfa2V5ID0gaXdsYWduX21hY191cGRhdGVfdGtpcF9rZXksCisJLmNvbmZfdHggPSBpd2xfbWFjX2NvbmZfdHgsCisJLnJlc2V0X3RzZiA9IGl3bF9sZWdhY3lfbWFjX3Jlc2V0X3RzZiwKKwkuYnNzX2luZm9fY2hhbmdlZCA9IGl3bF9sZWdhY3lfbWFjX2Jzc19pbmZvX2NoYW5nZWQsCisJLmFtcGR1X2FjdGlvbiA9IGl3bGFnbl9tYWNfYW1wZHVfYWN0aW9uLAorCS5od19zY2FuID0gaXdsX21hY19od19zY2FuLAorCS5zdGFfYWRkID0gaXdsYWduX21hY19zdGFfYWRkLAorCS5zdGFfcmVtb3ZlID0gaXdsX21hY19zdGFfcmVtb3ZlLAorCS5jaGFubmVsX3N3aXRjaCA9IGl3bGFnbl9tYWNfY2hhbm5lbF9zd2l0Y2gsCisJLmZsdXNoID0gaXdsYWduX21hY19mbHVzaCwKKwkudHhfbGFzdF9iZWFjb24gPSBpd2xfbWFjX3R4X2xhc3RfYmVhY29uLAorfTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBpd2xfb3BzIGl3bDQ5NjVfb3BzID0gewogCS5saWIgPSAmaXdsNDk2NV9saWIsCiAJLmhjbWQgPSAmaXdsNDk2NV9oY21kLAogCS51dGlscyA9ICZpd2w0OTY1X2hjbWRfdXRpbHMsCiAJLmxlZCA9ICZpd2xhZ25fbGVkX29wcywKKwkubGVnYWN5ID0gJml3bDQ5NjVfbGVnYWN5X29wcywKKwkuaWVlZTgwMjExX29wcyA9ICZpd2w0OTY1X2h3X29wcywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaXdsX2Jhc2VfcGFyYW1zIGl3bDQ5NjVfYmFzZV9wYXJhbXMgPSB7CkBAIC0yMzIzLDEzICsyNjA5LDE0IEBACiAJLmxlZF9jb21wZW5zYXRpb24gPSA2MSwKIAkuY2hhaW5fbm9pc2VfbnVtX2JlYWNvbnMgPSBJV0w0OTY1X0NBTF9OVU1fQkVBQ09OUywKIAkucGxjcF9kZWx0YV90aHJlc2hvbGQgPSBJV0xfTUFYX1BMQ1BfRVJSX1RIUkVTSE9MRF9ERUYsCi0JLm1vbml0b3JfcmVjb3Zlcl9wZXJpb2QgPSBJV0xfREVGX01PTklUT1JJTkdfUEVSSU9ELAorCS53ZF90aW1lb3V0ID0gSVdMX0RFRl9XRF9USU1FT1VULAogCS50ZW1wZXJhdHVyZV9rZWx2aW4gPSB0cnVlLAogCS5tYXhfZXZlbnRfbG9nX3NpemUgPSA1MTIsCiAJLnR4X3Bvd2VyX2J5X2RyaXZlciA9IHRydWUsCiAJLnVjb2RlX3RyYWNpbmcgPSB0cnVlLAogCS5zZW5zaXRpdml0eV9jYWxpYl9ieV9kcml2ZXIgPSB0cnVlLAogCS5jaGFpbl9ub2lzZV9jYWxpYl9ieV9kcml2ZXIgPSB0cnVlLAorCS5ub19hZ2dfZnJhbWVjbnRfaW5mbyA9IHRydWUsCiB9OwogCiBzdHJ1Y3QgaXdsX2NmZyBpd2w0OTY1X2Fnbl9jZmcgPSB7CkBAIC0yMzM3LDcgKzI2MjQsNiBAQAogCS5md19uYW1lX3ByZSA9IElXTDQ5NjVfRldfUFJFLAogCS51Y29kZV9hcGlfbWF4ID0gSVdMNDk2NV9VQ09ERV9BUElfTUFYLAogCS51Y29kZV9hcGlfbWluID0gSVdMNDk2NV9VQ09ERV9BUElfTUlOLAotCS5za3UgPSBJV0xfU0tVX0F8SVdMX1NLVV9HfElXTF9TS1VfTiwKIAkudmFsaWRfdHhfYW50ID0gQU5UX0FCLAogCS52YWxpZF9yeF9hbnQgPSBBTlRfQUJDLAogCS5lZXByb21fdmVyID0gRUVQUk9NXzQ5NjVfRUVQUk9NX1ZFUlNJT04sCkBAIC0yMzQ1LDYgKzI2MzEsNyBAQAogCS5vcHMgPSAmaXdsNDk2NV9vcHMsCiAJLm1vZF9wYXJhbXMgPSAmaXdsYWduX21vZF9wYXJhbXMsCiAJLmJhc2VfcGFyYW1zID0gJml3bDQ5NjVfYmFzZV9wYXJhbXMsCisJLmxlZF9tb2RlID0gSVdMX0xFRF9CTElOSywKIAkvKgogCSAqIEZvcmNlIHVzZSBvZiBjaGFpbnMgQiBhbmQgQyBmb3Igc2NhbiBSWCBvbiA1IEdIeiBiYW5kCiAJICogYmVjYXVzZSB0aGUgZGV2aWNlIGhhcyBvZmYtY2hhbm5lbCByZWNlcHRpb24gb24gY2hhaW4gQS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTUwMDAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTUwMDAuYwppbmRleCBmZDlmYmM5Li43OWFiMGE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC5jCkBAIC0zODUsMTQgKzM4NSwxNiBAQAogCQkuY2FsaWJfdmVyc2lvbgk9IGl3bGFnbl9lZXByb21fY2FsaWJfdmVyc2lvbiwKIAkJLnF1ZXJ5X2FkZHIgPSBpd2xhZ25fZWVwcm9tX3F1ZXJ5X2FkZHIsCiAJfSwKLQkucG9zdF9hc3NvY2lhdGUgPSBpd2xfcG9zdF9hc3NvY2lhdGUsCi0JLmlzciA9IGl3bF9pc3JfaWN0LAotCS5jb25maWdfYXAgPSBpd2xfY29uZmlnX2FwLAorCS5pc3Jfb3BzID0geworCQkuaXNyID0gaXdsX2lzcl9pY3QsCisJCS5mcmVlID0gaXdsX2ZyZWVfaXNyX2ljdCwKKwkJLmFsbG9jID0gaXdsX2FsbG9jX2lzcl9pY3QsCisJCS5yZXNldCA9IGl3bF9yZXNldF9pY3QsCisJCS5kaXNhYmxlID0gaXdsX2Rpc2FibGVfaWN0LAorCX0sCiAJLnRlbXBfb3BzID0gewogCQkudGVtcGVyYXR1cmUgPSBpd2xhZ25fdGVtcGVyYXR1cmUsCiAJIH0sCi0JLm1hbmFnZV9pYnNzX3N0YXRpb24gPSBpd2xhZ25fbWFuYWdlX2lic3Nfc3RhdGlvbiwKLQkudXBkYXRlX2JjYXN0X3N0YXRpb25zID0gaXdsX3VwZGF0ZV9iY2FzdF9zdGF0aW9ucywKIAkuZGVidWdmc19vcHMgPSB7CiAJCS5yeF9zdGF0c19yZWFkID0gaXdsX3Vjb2RlX3J4X3N0YXRzX3JlYWQsCiAJCS50eF9zdGF0c19yZWFkID0gaXdsX3Vjb2RlX3R4X3N0YXRzX3JlYWQsCkBAIC00MDAsNyArNDAyLDYgQEAKIAkJLmJ0X3N0YXRzX3JlYWQgPSBpd2xfdWNvZGVfYnRfc3RhdHNfcmVhZCwKIAkJLnJlcGx5X3R4X2Vycm9yID0gaXdsX3JlcGx5X3R4X2Vycm9yX3JlYWQsCiAJfSwKLQkucmVjb3Zlcl9mcm9tX3R4X3N0YWxsID0gaXdsX2JnX21vbml0b3JfcmVjb3ZlciwKIAkuY2hlY2tfcGxjcF9oZWFsdGggPSBpd2xfZ29vZF9wbGNwX2hlYWx0aCwKIAkuY2hlY2tfYWNrX2hlYWx0aCA9IGl3bF9nb29kX2Fja19oZWFsdGgsCiAJLnR4Zmlmb19mbHVzaCA9IGl3bGFnbl90eGZpZm9fZmx1c2gsCkBAIC00NTMsMTQgKzQ1NCwxNiBAQAogCQkuY2FsaWJfdmVyc2lvbgk9IGl3bGFnbl9lZXByb21fY2FsaWJfdmVyc2lvbiwKIAkJLnF1ZXJ5X2FkZHIgPSBpd2xhZ25fZWVwcm9tX3F1ZXJ5X2FkZHIsCiAJfSwKLQkucG9zdF9hc3NvY2lhdGUgPSBpd2xfcG9zdF9hc3NvY2lhdGUsCi0JLmlzciA9IGl3bF9pc3JfaWN0LAotCS5jb25maWdfYXAgPSBpd2xfY29uZmlnX2FwLAorCS5pc3Jfb3BzID0geworCQkuaXNyID0gaXdsX2lzcl9pY3QsCisJCS5mcmVlID0gaXdsX2ZyZWVfaXNyX2ljdCwKKwkJLmFsbG9jID0gaXdsX2FsbG9jX2lzcl9pY3QsCisJCS5yZXNldCA9IGl3bF9yZXNldF9pY3QsCisJCS5kaXNhYmxlID0gaXdsX2Rpc2FibGVfaWN0LAorCX0sCiAJLnRlbXBfb3BzID0gewogCQkudGVtcGVyYXR1cmUgPSBpd2w1MTUwX3RlbXBlcmF0dXJlLAogCSB9LAotCS5tYW5hZ2VfaWJzc19zdGF0aW9uID0gaXdsYWduX21hbmFnZV9pYnNzX3N0YXRpb24sCi0JLnVwZGF0ZV9iY2FzdF9zdGF0aW9ucyA9IGl3bF91cGRhdGVfYmNhc3Rfc3RhdGlvbnMsCiAJLmRlYnVnZnNfb3BzID0gewogCQkucnhfc3RhdHNfcmVhZCA9IGl3bF91Y29kZV9yeF9zdGF0c19yZWFkLAogCQkudHhfc3RhdHNfcmVhZCA9IGl3bF91Y29kZV90eF9zdGF0c19yZWFkLApAQCAtNDY4LDcgKzQ3MSw2IEBACiAJCS5idF9zdGF0c19yZWFkID0gaXdsX3Vjb2RlX2J0X3N0YXRzX3JlYWQsCiAJCS5yZXBseV90eF9lcnJvciA9IGl3bF9yZXBseV90eF9lcnJvcl9yZWFkLAogCX0sCi0JLnJlY292ZXJfZnJvbV90eF9zdGFsbCA9IGl3bF9iZ19tb25pdG9yX3JlY292ZXIsCiAJLmNoZWNrX3BsY3BfaGVhbHRoID0gaXdsX2dvb2RfcGxjcF9oZWFsdGgsCiAJLmNoZWNrX2Fja19oZWFsdGggPSBpd2xfZ29vZF9hY2tfaGVhbHRoLAogCS50eGZpZm9fZmx1c2ggPSBpd2xhZ25fdHhmaWZvX2ZsdXNoLApAQCAtNDg1LDYgKzQ4Nyw3IEBACiAJLmhjbWQgPSAmaXdsYWduX2hjbWQsCiAJLnV0aWxzID0gJml3bGFnbl9oY21kX3V0aWxzLAogCS5sZWQgPSAmaXdsYWduX2xlZF9vcHMsCisJLmllZWU4MDIxMV9vcHMgPSAmaXdsYWduX2h3X29wcywKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaXdsX29wcyBpd2w1MTUwX29wcyA9IHsKQEAgLTQ5Miw2ICs0OTUsNyBAQAogCS5oY21kID0gJml3bGFnbl9oY21kLAogCS51dGlscyA9ICZpd2xhZ25faGNtZF91dGlscywKIAkubGVkID0gJml3bGFnbl9sZWRfb3BzLAorCS5pZWVlODAyMTFfb3BzID0gJml3bGFnbl9od19vcHMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGl3bF9iYXNlX3BhcmFtcyBpd2w1MDAwX2Jhc2VfcGFyYW1zID0gewpAQCAtNTA1LDcgKzUwOSw3IEBACiAJLmNoYWluX25vaXNlX251bV9iZWFjb25zID0gSVdMX0NBTF9OVU1fQkVBQ09OUywKIAkucGxjcF9kZWx0YV90aHJlc2hvbGQgPSBJV0xfTUFYX1BMQ1BfRVJSX0xPTkdfVEhSRVNIT0xEX0RFRiwKIAkuY2hhaW5fbm9pc2Vfc2NhbGUgPSAxMDAwLAotCS5tb25pdG9yX3JlY292ZXJfcGVyaW9kID0gSVdMX0xPTkdfTU9OSVRPUklOR19QRVJJT0QsCisJLndkX3RpbWVvdXQgPSBJV0xfTE9OR19XRF9USU1FT1VULAogCS5tYXhfZXZlbnRfbG9nX3NpemUgPSA1MTIsCiAJLnVjb2RlX3RyYWNpbmcgPSB0cnVlLAogCS5zZW5zaXRpdml0eV9jYWxpYl9ieV9kcml2ZXIgPSB0cnVlLApAQCAtNTE2LDY2ICs1MjAsNDMgQEAKIAkudXNlX3J0c19mb3JfYWdncmVnYXRpb24gPSB0cnVlLCAvKiB1c2UgcnRzL2N0cyBwcm90ZWN0aW9uICovCiB9OwogCisjZGVmaW5lIElXTF9ERVZJQ0VfNTAwMAkJCQkJCVwKKwkuZndfbmFtZV9wcmUgPSBJV0w1MDAwX0ZXX1BSRSwJCQkJXAorCS51Y29kZV9hcGlfbWF4ID0gSVdMNTAwMF9VQ09ERV9BUElfTUFYLAkJCVwKKwkudWNvZGVfYXBpX21pbiA9IElXTDUwMDBfVUNPREVfQVBJX01JTiwJCQlcCisJLmVlcHJvbV92ZXIgPSBFRVBST01fNTAwMF9FRVBST01fVkVSU0lPTiwJCVwKKwkuZWVwcm9tX2NhbGliX3ZlciA9IEVFUFJPTV81MDAwX1RYX1BPV0VSX1ZFUlNJT04sCVwKKwkub3BzID0gJml3bDUwMDBfb3BzLAkJCQkJXAorCS5tb2RfcGFyYW1zID0gJml3bGFnbl9tb2RfcGFyYW1zLAkJCVwKKwkuYmFzZV9wYXJhbXMgPSAmaXdsNTAwMF9iYXNlX3BhcmFtcywJCQlcCisJLmxlZF9tb2RlID0gSVdMX0xFRF9CTElOSworCiBzdHJ1Y3QgaXdsX2NmZyBpd2w1MzAwX2Fnbl9jZmcgPSB7CiAJLm5hbWUgPSAiSW50ZWwoUikgVWx0aW1hdGUgTiBXaUZpIExpbmsgNTMwMCBBR04iLAotCS5md19uYW1lX3ByZSA9IElXTDUwMDBfRldfUFJFLAotCS51Y29kZV9hcGlfbWF4ID0gSVdMNTAwMF9VQ09ERV9BUElfTUFYLAotCS51Y29kZV9hcGlfbWluID0gSVdMNTAwMF9VQ09ERV9BUElfTUlOLAotCS5za3UgPSBJV0xfU0tVX0F8SVdMX1NLVV9HfElXTF9TS1VfTiwKLQkudmFsaWRfdHhfYW50ID0gQU5UX0FCQywKLQkudmFsaWRfcnhfYW50ID0gQU5UX0FCQywKLQkuZWVwcm9tX3ZlciA9IEVFUFJPTV81MDAwX0VFUFJPTV9WRVJTSU9OLAotCS5lZXByb21fY2FsaWJfdmVyID0gRUVQUk9NXzUwMDBfVFhfUE9XRVJfVkVSU0lPTiwKLQkub3BzID0gJml3bDUwMDBfb3BzLAotCS5tb2RfcGFyYW1zID0gJml3bGFnbl9tb2RfcGFyYW1zLAotCS5iYXNlX3BhcmFtcyA9ICZpd2w1MDAwX2Jhc2VfcGFyYW1zLAorCUlXTF9ERVZJQ0VfNTAwMCwKIAkuaHRfcGFyYW1zID0gJml3bDUwMDBfaHRfcGFyYW1zLAogfTsKIAogc3RydWN0IGl3bF9jZmcgaXdsNTEwMF9iZ25fY2ZnID0gewogCS5uYW1lID0gIkludGVsKFIpIFdpRmkgTGluayA1MTAwIEJHTiIsCi0JLmZ3X25hbWVfcHJlID0gSVdMNTAwMF9GV19QUkUsCi0JLnVjb2RlX2FwaV9tYXggPSBJV0w1MDAwX1VDT0RFX0FQSV9NQVgsCi0JLnVjb2RlX2FwaV9taW4gPSBJV0w1MDAwX1VDT0RFX0FQSV9NSU4sCi0JLnNrdSA9IElXTF9TS1VfR3xJV0xfU0tVX04sCi0JLnZhbGlkX3R4X2FudCA9IEFOVF9CLAotCS52YWxpZF9yeF9hbnQgPSBBTlRfQUIsCi0JLmVlcHJvbV92ZXIgPSBFRVBST01fNTAwMF9FRVBST01fVkVSU0lPTiwKLQkuZWVwcm9tX2NhbGliX3ZlciA9IEVFUFJPTV81MDAwX1RYX1BPV0VSX1ZFUlNJT04sCi0JLm9wcyA9ICZpd2w1MDAwX29wcywKLQkubW9kX3BhcmFtcyA9ICZpd2xhZ25fbW9kX3BhcmFtcywKLQkuYmFzZV9wYXJhbXMgPSAmaXdsNTAwMF9iYXNlX3BhcmFtcywKKwlJV0xfREVWSUNFXzUwMDAsCisJLnZhbGlkX3R4X2FudCA9IEFOVF9CLAkJLyogLmNmZyBvdmVyd3JpdGUgKi8KKwkudmFsaWRfcnhfYW50ID0gQU5UX0FCLAkJLyogLmNmZyBvdmVyd3JpdGUgKi8KIAkuaHRfcGFyYW1zID0gJml3bDUwMDBfaHRfcGFyYW1zLAogfTsKIAogc3RydWN0IGl3bF9jZmcgaXdsNTEwMF9hYmdfY2ZnID0gewogCS5uYW1lID0gIkludGVsKFIpIFdpRmkgTGluayA1MTAwIEFCRyIsCi0JLmZ3X25hbWVfcHJlID0gSVdMNTAwMF9GV19QUkUsCi0JLnVjb2RlX2FwaV9tYXggPSBJV0w1MDAwX1VDT0RFX0FQSV9NQVgsCi0JLnVjb2RlX2FwaV9taW4gPSBJV0w1MDAwX1VDT0RFX0FQSV9NSU4sCi0JLnNrdSA9IElXTF9TS1VfQXxJV0xfU0tVX0csCi0JLnZhbGlkX3R4X2FudCA9IEFOVF9CLAotCS52YWxpZF9yeF9hbnQgPSBBTlRfQUIsCi0JLmVlcHJvbV92ZXIgPSBFRVBST01fNTAwMF9FRVBST01fVkVSU0lPTiwKLQkuZWVwcm9tX2NhbGliX3ZlciA9IEVFUFJPTV81MDAwX1RYX1BPV0VSX1ZFUlNJT04sCi0JLm9wcyA9ICZpd2w1MDAwX29wcywKLQkubW9kX3BhcmFtcyA9ICZpd2xhZ25fbW9kX3BhcmFtcywKLQkuYmFzZV9wYXJhbXMgPSAmaXdsNTAwMF9iYXNlX3BhcmFtcywKKwlJV0xfREVWSUNFXzUwMDAsCisJLnZhbGlkX3R4X2FudCA9IEFOVF9CLAkJLyogLmNmZyBvdmVyd3JpdGUgKi8KKwkudmFsaWRfcnhfYW50ID0gQU5UX0FCLAkJLyogLmNmZyBvdmVyd3JpdGUgKi8KIH07CiAKIHN0cnVjdCBpd2xfY2ZnIGl3bDUxMDBfYWduX2NmZyA9IHsKIAkubmFtZSA9ICJJbnRlbChSKSBXaUZpIExpbmsgNTEwMCBBR04iLAotCS5md19uYW1lX3ByZSA9IElXTDUwMDBfRldfUFJFLAotCS51Y29kZV9hcGlfbWF4ID0gSVdMNTAwMF9VQ09ERV9BUElfTUFYLAotCS51Y29kZV9hcGlfbWluID0gSVdMNTAwMF9VQ09ERV9BUElfTUlOLAotCS5za3UgPSBJV0xfU0tVX0F8SVdMX1NLVV9HfElXTF9TS1VfTiwKLQkudmFsaWRfdHhfYW50ID0gQU5UX0IsCi0JLnZhbGlkX3J4X2FudCA9IEFOVF9BQiwKLQkuZWVwcm9tX3ZlciA9IEVFUFJPTV81MDAwX0VFUFJPTV9WRVJTSU9OLAotCS5lZXByb21fY2FsaWJfdmVyID0gRUVQUk9NXzUwMDBfVFhfUE9XRVJfVkVSU0lPTiwKLQkub3BzID0gJml3bDUwMDBfb3BzLAotCS5tb2RfcGFyYW1zID0gJml3bGFnbl9tb2RfcGFyYW1zLAotCS5iYXNlX3BhcmFtcyA9ICZpd2w1MDAwX2Jhc2VfcGFyYW1zLAorCUlXTF9ERVZJQ0VfNTAwMCwKKwkudmFsaWRfdHhfYW50ID0gQU5UX0IsCQkvKiAuY2ZnIG92ZXJ3cml0ZSAqLworCS52YWxpZF9yeF9hbnQgPSBBTlRfQUIsCQkvKiAuY2ZnIG92ZXJ3cml0ZSAqLwogCS5odF9wYXJhbXMgPSAmaXdsNTAwMF9odF9wYXJhbXMsCiB9OwogCkBAIC01ODQsNDggKzU2NSwzOSBAQAogCS5md19uYW1lX3ByZSA9IElXTDUwMDBfRldfUFJFLAogCS51Y29kZV9hcGlfbWF4ID0gSVdMNTAwMF9VQ09ERV9BUElfTUFYLAogCS51Y29kZV9hcGlfbWluID0gSVdMNTAwMF9VQ09ERV9BUElfTUlOLAotCS5za3UgPSBJV0xfU0tVX0F8SVdMX1NLVV9HfElXTF9TS1VfTiwKLQkudmFsaWRfdHhfYW50ID0gQU5UX0FCQywKLQkudmFsaWRfcnhfYW50ID0gQU5UX0FCQywKIAkuZWVwcm9tX3ZlciA9IEVFUFJPTV81MDUwX0VFUFJPTV9WRVJTSU9OLAogCS5lZXByb21fY2FsaWJfdmVyID0gRUVQUk9NXzUwNTBfVFhfUE9XRVJfVkVSU0lPTiwKIAkub3BzID0gJml3bDUwMDBfb3BzLAogCS5tb2RfcGFyYW1zID0gJml3bGFnbl9tb2RfcGFyYW1zLAogCS5iYXNlX3BhcmFtcyA9ICZpd2w1MDAwX2Jhc2VfcGFyYW1zLAogCS5odF9wYXJhbXMgPSAmaXdsNTAwMF9odF9wYXJhbXMsCisJLmxlZF9tb2RlID0gSVdMX0xFRF9CTElOSywKKwkuaW50ZXJuYWxfd2ltYXhfY29leCA9IHRydWUsCiB9OwogCisjZGVmaW5lIElXTF9ERVZJQ0VfNTE1MAkJCQkJCVwKKwkuZndfbmFtZV9wcmUgPSBJV0w1MTUwX0ZXX1BSRSwJCQkJXAorCS51Y29kZV9hcGlfbWF4ID0gSVdMNTE1MF9VQ09ERV9BUElfTUFYLAkJCVwKKwkudWNvZGVfYXBpX21pbiA9IElXTDUxNTBfVUNPREVfQVBJX01JTiwJCQlcCisJLmVlcHJvbV92ZXIgPSBFRVBST01fNTA1MF9FRVBST01fVkVSU0lPTiwJCVwKKwkuZWVwcm9tX2NhbGliX3ZlciA9IEVFUFJPTV81MDUwX1RYX1BPV0VSX1ZFUlNJT04sCVwKKwkub3BzID0gJml3bDUxNTBfb3BzLAkJCQkJXAorCS5tb2RfcGFyYW1zID0gJml3bGFnbl9tb2RfcGFyYW1zLAkJCVwKKwkuYmFzZV9wYXJhbXMgPSAmaXdsNTAwMF9iYXNlX3BhcmFtcywJCQlcCisJLm5lZWRfZGNfY2FsaWIgPSB0cnVlLAkJCQkJXAorCS5sZWRfbW9kZSA9IElXTF9MRURfQkxJTkssCQkJCVwKKwkuaW50ZXJuYWxfd2ltYXhfY29leCA9IHRydWUKKwogc3RydWN0IGl3bF9jZmcgaXdsNTE1MF9hZ25fY2ZnID0gewogCS5uYW1lID0gIkludGVsKFIpIFdpTUFYL1dpRmkgTGluayA1MTUwIEFHTiIsCi0JLmZ3X25hbWVfcHJlID0gSVdMNTE1MF9GV19QUkUsCi0JLnVjb2RlX2FwaV9tYXggPSBJV0w1MTUwX1VDT0RFX0FQSV9NQVgsCi0JLnVjb2RlX2FwaV9taW4gPSBJV0w1MTUwX1VDT0RFX0FQSV9NSU4sCi0JLnNrdSA9IElXTF9TS1VfQXxJV0xfU0tVX0d8SVdMX1NLVV9OLAotCS52YWxpZF90eF9hbnQgPSBBTlRfQSwKLQkudmFsaWRfcnhfYW50ID0gQU5UX0FCLAotCS5lZXByb21fdmVyID0gRUVQUk9NXzUwNTBfRUVQUk9NX1ZFUlNJT04sCi0JLmVlcHJvbV9jYWxpYl92ZXIgPSBFRVBST01fNTA1MF9UWF9QT1dFUl9WRVJTSU9OLAotCS5vcHMgPSAmaXdsNTE1MF9vcHMsCi0JLm1vZF9wYXJhbXMgPSAmaXdsYWduX21vZF9wYXJhbXMsCi0JLmJhc2VfcGFyYW1zID0gJml3bDUwMDBfYmFzZV9wYXJhbXMsCisJSVdMX0RFVklDRV81MTUwLAogCS5odF9wYXJhbXMgPSAmaXdsNTAwMF9odF9wYXJhbXMsCi0JLm5lZWRfZGNfY2FsaWIgPSB0cnVlLAorCiB9OwogCiBzdHJ1Y3QgaXdsX2NmZyBpd2w1MTUwX2FiZ19jZmcgPSB7CiAJLm5hbWUgPSAiSW50ZWwoUikgV2lNQVgvV2lGaSBMaW5rIDUxNTAgQUJHIiwKLQkuZndfbmFtZV9wcmUgPSBJV0w1MTUwX0ZXX1BSRSwKLQkudWNvZGVfYXBpX21heCA9IElXTDUxNTBfVUNPREVfQVBJX01BWCwKLQkudWNvZGVfYXBpX21pbiA9IElXTDUxNTBfVUNPREVfQVBJX01JTiwKLQkuc2t1ID0gSVdMX1NLVV9BfElXTF9TS1VfRywKLQkudmFsaWRfdHhfYW50ID0gQU5UX0EsCi0JLnZhbGlkX3J4X2FudCA9IEFOVF9BQiwKLQkuZWVwcm9tX3ZlciA9IEVFUFJPTV81MDUwX0VFUFJPTV9WRVJTSU9OLAotCS5lZXByb21fY2FsaWJfdmVyID0gRUVQUk9NXzUwNTBfVFhfUE9XRVJfVkVSU0lPTiwKLQkub3BzID0gJml3bDUxNTBfb3BzLAotCS5tb2RfcGFyYW1zID0gJml3bGFnbl9tb2RfcGFyYW1zLAotCS5iYXNlX3BhcmFtcyA9ICZpd2w1MDAwX2Jhc2VfcGFyYW1zLAotCS5uZWVkX2RjX2NhbGliID0gdHJ1ZSwKKwlJV0xfREVWSUNFXzUxNTAsCiB9OwogCiBNT0RVTEVfRklSTVdBUkUoSVdMNTAwMF9NT0RVTEVfRklSTVdBUkUoSVdMNTAwMF9VQ09ERV9BUElfTUFYKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC02MDAwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC02MDAwLmMKaW5kZXggMGNlZWFhYy4uYWY1MDViYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNjAwMC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTYwMDAuYwpAQCAtNTMsMTMgKzUzLDExIEBACiAjZGVmaW5lIElXTDYwMDBfVUNPREVfQVBJX01BWCA0CiAjZGVmaW5lIElXTDYwNTBfVUNPREVfQVBJX01BWCA1CiAjZGVmaW5lIElXTDYwMDBHMl9VQ09ERV9BUElfTUFYIDUKLSNkZWZpbmUgSVdMMTMwX1VDT0RFX0FQSV9NQVggNQogCiAvKiBMb3dlc3QgZmlybXdhcmUgQVBJIHZlcnNpb24gc3VwcG9ydGVkICovCiAjZGVmaW5lIElXTDYwMDBfVUNPREVfQVBJX01JTiA0CiAjZGVmaW5lIElXTDYwNTBfVUNPREVfQVBJX01JTiA0CiAjZGVmaW5lIElXTDYwMDBHMl9VQ09ERV9BUElfTUlOIDQKLSNkZWZpbmUgSVdMMTMwX1VDT0RFX0FQSV9NSU4gNQogCiAjZGVmaW5lIElXTDYwMDBfRldfUFJFICJpd2x3aWZpLTYwMDAtIgogI2RlZmluZSBfSVdMNjAwMF9NT0RVTEVfRklSTVdBUkUoYXBpKSBJV0w2MDAwX0ZXX1BSRSAjYXBpICIudWNvZGUiCkBAIC03NywxMCArNzUsNiBAQAogI2RlZmluZSBfSVdMNjAwMEcyQl9NT0RVTEVfRklSTVdBUkUoYXBpKSBJV0w2MDAwRzJCX0ZXX1BSRSAjYXBpICIudWNvZGUiCiAjZGVmaW5lIElXTDYwMDBHMkJfTU9EVUxFX0ZJUk1XQVJFKGFwaSkgX0lXTDYwMDBHMkJfTU9EVUxFX0ZJUk1XQVJFKGFwaSkKIAotI2RlZmluZSBJV0wxMzBfRldfUFJFICJpd2x3aWZpLTEzMC0iCi0jZGVmaW5lIF9JV0wxMzBfTU9EVUxFX0ZJUk1XQVJFKGFwaSkgSVdMMTMwX0ZXX1BSRSAjYXBpICIudWNvZGUiCi0jZGVmaW5lIElXTDEzMF9NT0RVTEVfRklSTVdBUkUoYXBpKSBfSVdMMTMwX01PRFVMRV9GSVJNV0FSRShhcGkpCi0KIHN0YXRpYyB2b2lkIGl3bDYwMDBfc2V0X2N0X3RocmVzaG9sZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJLyogd2FudCBDZWxzaXVzICovCkBAIC0xODgsNyArMTgyLDExIEBACiAJcHJpdi0+aHdfcGFyYW1zLnJ4X3dydF9wdHJfcmVnID0gRkhfUlNDU1JfQ0hOTDBfV1BUUjsKIAogCXByaXYtPmh3X3BhcmFtcy50eF9jaGFpbnNfbnVtID0gbnVtX29mX2FudChwcml2LT5jZmctPnZhbGlkX3R4X2FudCk7Ci0JcHJpdi0+aHdfcGFyYW1zLnJ4X2NoYWluc19udW0gPSBudW1fb2ZfYW50KHByaXYtPmNmZy0+dmFsaWRfcnhfYW50KTsKKwlpZiAocHJpdi0+Y2ZnLT5yeF93aXRoX3Npc29fZGl2ZXJzaXR5KQorCQlwcml2LT5od19wYXJhbXMucnhfY2hhaW5zX251bSA9IDE7CisJZWxzZQorCQlwcml2LT5od19wYXJhbXMucnhfY2hhaW5zX251bSA9CisJCQludW1fb2ZfYW50KHByaXYtPmNmZy0+dmFsaWRfcnhfYW50KTsKIAlwcml2LT5od19wYXJhbXMudmFsaWRfdHhfYW50ID0gcHJpdi0+Y2ZnLT52YWxpZF90eF9hbnQ7CiAJcHJpdi0+aHdfcGFyYW1zLnZhbGlkX3J4X2FudCA9IHByaXYtPmNmZy0+dmFsaWRfcnhfYW50OwogCkBAIC0zMjgsMTQgKzMyNiwxNiBAQAogCQkucXVlcnlfYWRkciA9IGl3bGFnbl9lZXByb21fcXVlcnlfYWRkciwKIAkJLnVwZGF0ZV9lbmhhbmNlZF90eHBvd2VyID0gaXdsY29yZV9lZXByb21fZW5oYW5jZWRfdHhwb3dlciwKIAl9LAotCS5wb3N0X2Fzc29jaWF0ZSA9IGl3bF9wb3N0X2Fzc29jaWF0ZSwKLQkuaXNyID0gaXdsX2lzcl9pY3QsCi0JLmNvbmZpZ19hcCA9IGl3bF9jb25maWdfYXAsCisJLmlzcl9vcHMgPSB7CisJCS5pc3IgPSBpd2xfaXNyX2ljdCwKKwkJLmZyZWUgPSBpd2xfZnJlZV9pc3JfaWN0LAorCQkuYWxsb2MgPSBpd2xfYWxsb2NfaXNyX2ljdCwKKwkJLnJlc2V0ID0gaXdsX3Jlc2V0X2ljdCwKKwkJLmRpc2FibGUgPSBpd2xfZGlzYWJsZV9pY3QsCisJfSwKIAkudGVtcF9vcHMgPSB7CiAJCS50ZW1wZXJhdHVyZSA9IGl3bGFnbl90ZW1wZXJhdHVyZSwKIAkgfSwKLQkubWFuYWdlX2lic3Nfc3RhdGlvbiA9IGl3bGFnbl9tYW5hZ2VfaWJzc19zdGF0aW9uLAotCS51cGRhdGVfYmNhc3Rfc3RhdGlvbnMgPSBpd2xfdXBkYXRlX2JjYXN0X3N0YXRpb25zLAogCS5kZWJ1Z2ZzX29wcyA9IHsKIAkJLnJ4X3N0YXRzX3JlYWQgPSBpd2xfdWNvZGVfcnhfc3RhdHNfcmVhZCwKIAkJLnR4X3N0YXRzX3JlYWQgPSBpd2xfdWNvZGVfdHhfc3RhdHNfcmVhZCwKQEAgLTM0Myw3ICszNDMsNiBAQAogCQkuYnRfc3RhdHNfcmVhZCA9IGl3bF91Y29kZV9idF9zdGF0c19yZWFkLAogCQkucmVwbHlfdHhfZXJyb3IgPSBpd2xfcmVwbHlfdHhfZXJyb3JfcmVhZCwKIAl9LAotCS5yZWNvdmVyX2Zyb21fdHhfc3RhbGwgPSBpd2xfYmdfbW9uaXRvcl9yZWNvdmVyLAogCS5jaGVja19wbGNwX2hlYWx0aCA9IGl3bF9nb29kX3BsY3BfaGVhbHRoLAogCS5jaGVja19hY2tfaGVhbHRoID0gaXdsX2dvb2RfYWNrX2hlYWx0aCwKIAkudHhmaWZvX2ZsdXNoID0gaXdsYWduX3R4Zmlmb19mbHVzaCwKQEAgLTM5OSwxNCArMzk4LDE2IEBACiAJCS5xdWVyeV9hZGRyID0gaXdsYWduX2VlcHJvbV9xdWVyeV9hZGRyLAogCQkudXBkYXRlX2VuaGFuY2VkX3R4cG93ZXIgPSBpd2xjb3JlX2VlcHJvbV9lbmhhbmNlZF90eHBvd2VyLAogCX0sCi0JLnBvc3RfYXNzb2NpYXRlID0gaXdsX3Bvc3RfYXNzb2NpYXRlLAotCS5pc3IgPSBpd2xfaXNyX2ljdCwKLQkuY29uZmlnX2FwID0gaXdsX2NvbmZpZ19hcCwKKwkuaXNyX29wcyA9IHsKKwkJLmlzciA9IGl3bF9pc3JfaWN0LAorCQkuZnJlZSA9IGl3bF9mcmVlX2lzcl9pY3QsCisJCS5hbGxvYyA9IGl3bF9hbGxvY19pc3JfaWN0LAorCQkucmVzZXQgPSBpd2xfcmVzZXRfaWN0LAorCQkuZGlzYWJsZSA9IGl3bF9kaXNhYmxlX2ljdCwKKwl9LAogCS50ZW1wX29wcyA9IHsKIAkJLnRlbXBlcmF0dXJlID0gaXdsYWduX3RlbXBlcmF0dXJlLAogCSB9LAotCS5tYW5hZ2VfaWJzc19zdGF0aW9uID0gaXdsYWduX21hbmFnZV9pYnNzX3N0YXRpb24sCi0JLnVwZGF0ZV9iY2FzdF9zdGF0aW9ucyA9IGl3bF91cGRhdGVfYmNhc3Rfc3RhdGlvbnMsCiAJLmRlYnVnZnNfb3BzID0gewogCQkucnhfc3RhdHNfcmVhZCA9IGl3bF91Y29kZV9yeF9zdGF0c19yZWFkLAogCQkudHhfc3RhdHNfcmVhZCA9IGl3bF91Y29kZV90eF9zdGF0c19yZWFkLApAQCAtNDE0LDcgKzQxNSw2IEBACiAJCS5idF9zdGF0c19yZWFkID0gaXdsX3Vjb2RlX2J0X3N0YXRzX3JlYWQsCiAJCS5yZXBseV90eF9lcnJvciA9IGl3bF9yZXBseV90eF9lcnJvcl9yZWFkLAogCX0sCi0JLnJlY292ZXJfZnJvbV90eF9zdGFsbCA9IGl3bF9iZ19tb25pdG9yX3JlY292ZXIsCiAJLmNoZWNrX3BsY3BfaGVhbHRoID0gaXdsX2dvb2RfcGxjcF9oZWFsdGgsCiAJLmNoZWNrX2Fja19oZWFsdGggPSBpd2xfZ29vZF9hY2tfaGVhbHRoLAogCS50eGZpZm9fZmx1c2ggPSBpd2xhZ25fdHhmaWZvX2ZsdXNoLApAQCAtNDM5LDYgKzQzOSw3IEBACiAJLmhjbWQgPSAmaXdsYWduX2hjbWQsCiAJLnV0aWxzID0gJml3bGFnbl9oY21kX3V0aWxzLAogCS5sZWQgPSAmaXdsYWduX2xlZF9vcHMsCisJLmllZWU4MDIxMV9vcHMgPSAmaXdsYWduX2h3X29wcywKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaXdsX29wcyBpd2w2MDUwX29wcyA9IHsKQEAgLTQ0Nyw2ICs0NDgsNyBAQAogCS51dGlscyA9ICZpd2xhZ25faGNtZF91dGlscywKIAkubGVkID0gJml3bGFnbl9sZWRfb3BzLAogCS5uaWMgPSAmaXdsNjA1MF9uaWNfb3BzLAorCS5pZWVlODAyMTFfb3BzID0gJml3bGFnbl9od19vcHMsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGl3bF9vcHMgaXdsNjA1MGcyX29wcyA9IHsKQEAgLTQ1NSw2ICs0NTcsNyBAQAogCS51dGlscyA9ICZpd2xhZ25faGNtZF91dGlscywKIAkubGVkID0gJml3bGFnbl9sZWRfb3BzLAogCS5uaWMgPSAmaXdsNjA1MGcyX25pY19vcHMsCisJLmllZWU4MDIxMV9vcHMgPSAmaXdsYWduX2h3X29wcywKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaXdsX29wcyBpd2w2MDAwZzJiX29wcyA9IHsKQEAgLTQ2Miw2ICs0NjUsNyBAQAogCS5oY21kID0gJml3bGFnbl9idF9oY21kLAogCS51dGlscyA9ICZpd2xhZ25faGNtZF91dGlscywKIAkubGVkID0gJml3bGFnbl9sZWRfb3BzLAorCS5pZWVlODAyMTFfb3BzID0gJml3bGFnbl9od19vcHMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGl3bF9iYXNlX3BhcmFtcyBpd2w2MDAwX2Jhc2VfcGFyYW1zID0gewpAQCAtNDgwLDExICs0ODQsMTIgQEAKIAkuc3VwcG9ydF9jdF9raWxsX2V4aXQgPSB0cnVlLAogCS5wbGNwX2RlbHRhX3RocmVzaG9sZCA9IElXTF9NQVhfUExDUF9FUlJfVEhSRVNIT0xEX0RFRiwKIAkuY2hhaW5fbm9pc2Vfc2NhbGUgPSAxMDAwLAotCS5tb25pdG9yX3JlY292ZXJfcGVyaW9kID0gSVdMX0RFRl9NT05JVE9SSU5HX1BFUklPRCwKKwkud2RfdGltZW91dCA9IElXTF9ERUZfV0RfVElNRU9VVCwKIAkubWF4X2V2ZW50X2xvZ19zaXplID0gNTEyLAogCS51Y29kZV90cmFjaW5nID0gdHJ1ZSwKIAkuc2Vuc2l0aXZpdHlfY2FsaWJfYnlfZHJpdmVyID0gdHJ1ZSwKIAkuY2hhaW5fbm9pc2VfY2FsaWJfYnlfZHJpdmVyID0gdHJ1ZSwKKwkuc2hhZG93X3JlZ19lbmFibGUgPSB0cnVlLAogfTsKIAogc3RhdGljIHN0cnVjdCBpd2xfYmFzZV9wYXJhbXMgaXdsNjA1MF9iYXNlX3BhcmFtcyA9IHsKQEAgLTUwMywxMyArNTA4LDE0IEBACiAJLnN1cHBvcnRfY3Rfa2lsbF9leGl0ID0gdHJ1ZSwKIAkucGxjcF9kZWx0YV90aHJlc2hvbGQgPSBJV0xfTUFYX1BMQ1BfRVJSX1RIUkVTSE9MRF9ERUYsCiAJLmNoYWluX25vaXNlX3NjYWxlID0gMTUwMCwKLQkubW9uaXRvcl9yZWNvdmVyX3BlcmlvZCA9IElXTF9ERUZfTU9OSVRPUklOR19QRVJJT0QsCisJLndkX3RpbWVvdXQgPSBJV0xfREVGX1dEX1RJTUVPVVQsCiAJLm1heF9ldmVudF9sb2dfc2l6ZSA9IDEwMjQsCiAJLnVjb2RlX3RyYWNpbmcgPSB0cnVlLAogCS5zZW5zaXRpdml0eV9jYWxpYl9ieV9kcml2ZXIgPSB0cnVlLAogCS5jaGFpbl9ub2lzZV9jYWxpYl9ieV9kcml2ZXIgPSB0cnVlLAorCS5zaGFkb3dfcmVnX2VuYWJsZSA9IHRydWUsCiB9Owotc3RhdGljIHN0cnVjdCBpd2xfYmFzZV9wYXJhbXMgaXdsNjAwMF9jb2V4X2Jhc2VfcGFyYW1zID0geworc3RhdGljIHN0cnVjdCBpd2xfYmFzZV9wYXJhbXMgaXdsNjAwMF9nMl9iYXNlX3BhcmFtcyA9IHsKIAkuZWVwcm9tX3NpemUgPSBPVFBfTE9XX0lNQUdFX1NJWkUsCiAJLm51bV9vZl9xdWV1ZXMgPSBJV0xBR05fTlVNX1FVRVVFUywKIAkubnVtX29mX2FtcGR1X3F1ZXVlcyA9IElXTEFHTl9OVU1fQU1QRFVfUVVFVUVTLApAQCAtNTE4LDE4ICs1MjQsMTkgQEAKIAkudXNlX2JzbSA9IGZhbHNlLAogCS5tYXhfbGxfaXRlbXMgPSBPVFBfTUFYX0xMX0lURU1TXzZ4MDAsCiAJLnNoYWRvd19yYW1fc3VwcG9ydCA9IHRydWUsCi0JLmxlZF9jb21wZW5zYXRpb24gPSA1MSwKKwkubGVkX2NvbXBlbnNhdGlvbiA9IDU3LAogCS5jaGFpbl9ub2lzZV9udW1fYmVhY29ucyA9IElXTF9DQUxfTlVNX0JFQUNPTlMsCiAJLnN1cHBvcnRzX2lkbGUgPSB0cnVlLAogCS5hZHZfdGhlcm1hbF90aHJvdHRsZSA9IHRydWUsCiAJLnN1cHBvcnRfY3Rfa2lsbF9leGl0ID0gdHJ1ZSwKIAkucGxjcF9kZWx0YV90aHJlc2hvbGQgPSBJV0xfTUFYX1BMQ1BfRVJSX1RIUkVTSE9MRF9ERUYsCiAJLmNoYWluX25vaXNlX3NjYWxlID0gMTAwMCwKLQkubW9uaXRvcl9yZWNvdmVyX3BlcmlvZCA9IElXTF9MT05HX01PTklUT1JJTkdfUEVSSU9ELAorCS53ZF90aW1lb3V0ID0gSVdMX0xPTkdfV0RfVElNRU9VVCwKIAkubWF4X2V2ZW50X2xvZ19zaXplID0gNTEyLAogCS51Y29kZV90cmFjaW5nID0gdHJ1ZSwKIAkuc2Vuc2l0aXZpdHlfY2FsaWJfYnlfZHJpdmVyID0gdHJ1ZSwKIAkuY2hhaW5fbm9pc2VfY2FsaWJfYnlfZHJpdmVyID0gdHJ1ZSwKKwkuc2hhZG93X3JlZ19lbmFibGUgPSB0cnVlLAogfTsKIAogc3RhdGljIHN0cnVjdCBpd2xfaHRfcGFyYW1zIGl3bDYwMDBfaHRfcGFyYW1zID0gewpAQCAtNTQxLDI3MSArNTQ4LDE2NCBAQAogCS5idF9zdGF0aXN0aWNzID0gdHJ1ZSwKIAkvKiBEdWUgdG8gYmx1ZXRvb3RoLCB3ZSB0cmFuc21pdCAyLjQgR0h6IHByb2JlcyBvbmx5IG9uIGFudGVubmEgQSAqLwogCS5hZHZhbmNlZF9idF9jb2V4aXN0ID0gdHJ1ZSwKKwkuYWdnX3RpbWVfbGltaXQgPSBCVF9BR0dfVEhSRVNIT0xEX0RFRiwKIAkuYnRfaW5pdF90cmFmZmljX2xvYWQgPSBJV0xfQlRfQ09FWF9UUkFGRklDX0xPQURfTk9ORSwKIAkuYnRfcHJpb19ib29zdCA9IElXTEFHTl9CVF9QUklPX0JPT1NUX0RFRkFVTFQsCisJLmJ0X3Njb19kaXNhYmxlID0gdHJ1ZSwKIH07CiAKLXN0cnVjdCBpd2xfY2ZnIGl3bDYwMDBnMmFfMmFnbl9jZmcgPSB7Ci0JLm5hbWUgPSAiNjAwMCBTZXJpZXMgMngyIEFHTiBHZW4yYSIsCi0JLmZ3X25hbWVfcHJlID0gSVdMNjAwMEcyQV9GV19QUkUsCi0JLnVjb2RlX2FwaV9tYXggPSBJV0w2MDAwRzJfVUNPREVfQVBJX01BWCwKLQkudWNvZGVfYXBpX21pbiA9IElXTDYwMDBHMl9VQ09ERV9BUElfTUlOLAotCS5za3UgPSBJV0xfU0tVX0F8SVdMX1NLVV9HfElXTF9TS1VfTiwKLQkudmFsaWRfdHhfYW50ID0gQU5UX0FCLAotCS52YWxpZF9yeF9hbnQgPSBBTlRfQUIsCi0JLmVlcHJvbV92ZXIgPSBFRVBST01fNjAwMEcyX0VFUFJPTV9WRVJTSU9OLAotCS5lZXByb21fY2FsaWJfdmVyID0gRUVQUk9NXzYwMDBHMl9UWF9QT1dFUl9WRVJTSU9OLAotCS5vcHMgPSAmaXdsNjAwMF9vcHMsCi0JLm1vZF9wYXJhbXMgPSAmaXdsYWduX21vZF9wYXJhbXMsCi0JLmJhc2VfcGFyYW1zID0gJml3bDYwMDBfYmFzZV9wYXJhbXMsCisjZGVmaW5lIElXTF9ERVZJQ0VfNjAwNQkJCQkJCVwKKwkuZndfbmFtZV9wcmUgPSBJV0w2MDAwRzJBX0ZXX1BSRSwJCQlcCisJLnVjb2RlX2FwaV9tYXggPSBJV0w2MDAwRzJfVUNPREVfQVBJX01BWCwJCVwKKwkudWNvZGVfYXBpX21pbiA9IElXTDYwMDBHMl9VQ09ERV9BUElfTUlOLAkJXAorCS5lZXByb21fdmVyID0gRUVQUk9NXzYwMDBHMl9FRVBST01fVkVSU0lPTiwJCVwKKwkuZWVwcm9tX2NhbGliX3ZlciA9IEVFUFJPTV82MDAwRzJfVFhfUE9XRVJfVkVSU0lPTiwJXAorCS5vcHMgPSAmaXdsNjAwMF9vcHMsCQkJCQlcCisJLm1vZF9wYXJhbXMgPSAmaXdsYWduX21vZF9wYXJhbXMsCQkJXAorCS5iYXNlX3BhcmFtcyA9ICZpd2w2MDAwX2cyX2Jhc2VfcGFyYW1zLAkJCVwKKwkubmVlZF9kY19jYWxpYiA9IHRydWUsCQkJCQlcCisJLm5lZWRfdGVtcF9vZmZzZXRfY2FsaWIgPSB0cnVlLAkJCQlcCisJLmxlZF9tb2RlID0gSVdMX0xFRF9SRl9TVEFURQorCitzdHJ1Y3QgaXdsX2NmZyBpd2w2MDA1XzJhZ25fY2ZnID0geworCS5uYW1lID0gIkludGVsKFIpIENlbnRyaW5vKFIpIEFkdmFuY2VkLU4gNjIwNSBBR04iLAorCUlXTF9ERVZJQ0VfNjAwNSwKIAkuaHRfcGFyYW1zID0gJml3bDYwMDBfaHRfcGFyYW1zLAotCS5uZWVkX2RjX2NhbGliID0gdHJ1ZSwKLQkubmVlZF90ZW1wX29mZnNldF9jYWxpYiA9IHRydWUsCi0JLnVzZV9uZXdfZWVwcm9tX3JlYWRpbmcgPSB0cnVlLAogfTsKIAotc3RydWN0IGl3bF9jZmcgaXdsNjAwMGcyYV8yYWJnX2NmZyA9IHsKLQkubmFtZSA9ICI2MDAwIFNlcmllcyAyeDIgQUJHIEdlbjJhIiwKLQkuZndfbmFtZV9wcmUgPSBJV0w2MDAwRzJBX0ZXX1BSRSwKLQkudWNvZGVfYXBpX21heCA9IElXTDYwMDBHMl9VQ09ERV9BUElfTUFYLAotCS51Y29kZV9hcGlfbWluID0gSVdMNjAwMEcyX1VDT0RFX0FQSV9NSU4sCi0JLnNrdSA9IElXTF9TS1VfQXxJV0xfU0tVX0csCi0JLnZhbGlkX3R4X2FudCA9IEFOVF9BQiwKLQkudmFsaWRfcnhfYW50ID0gQU5UX0FCLAotCS5lZXByb21fdmVyID0gRUVQUk9NXzYwMDBHMl9FRVBST01fVkVSU0lPTiwKLQkuZWVwcm9tX2NhbGliX3ZlciA9IEVFUFJPTV82MDAwRzJfVFhfUE9XRVJfVkVSU0lPTiwKLQkub3BzID0gJml3bDYwMDBfb3BzLAotCS5tb2RfcGFyYW1zID0gJml3bGFnbl9tb2RfcGFyYW1zLAotCS5iYXNlX3BhcmFtcyA9ICZpd2w2MDAwX2Jhc2VfcGFyYW1zLAotCS5uZWVkX2RjX2NhbGliID0gdHJ1ZSwKLQkubmVlZF90ZW1wX29mZnNldF9jYWxpYiA9IHRydWUsCi0JLnVzZV9uZXdfZWVwcm9tX3JlYWRpbmcgPSB0cnVlLAorc3RydWN0IGl3bF9jZmcgaXdsNjAwNV8yYWJnX2NmZyA9IHsKKwkubmFtZSA9ICJJbnRlbChSKSBDZW50cmlubyhSKSBBZHZhbmNlZC1OIDYyMDUgQUJHIiwKKwlJV0xfREVWSUNFXzYwMDUsCiB9OwogCi1zdHJ1Y3QgaXdsX2NmZyBpd2w2MDAwZzJhXzJiZ19jZmcgPSB7Ci0JLm5hbWUgPSAiNjAwMCBTZXJpZXMgMngyIEJHIEdlbjJhIiwKLQkuZndfbmFtZV9wcmUgPSBJV0w2MDAwRzJBX0ZXX1BSRSwKLQkudWNvZGVfYXBpX21heCA9IElXTDYwMDBHMl9VQ09ERV9BUElfTUFYLAotCS51Y29kZV9hcGlfbWluID0gSVdMNjAwMEcyX1VDT0RFX0FQSV9NSU4sCi0JLnNrdSA9IElXTF9TS1VfRywKLQkudmFsaWRfdHhfYW50ID0gQU5UX0FCLAotCS52YWxpZF9yeF9hbnQgPSBBTlRfQUIsCi0JLmVlcHJvbV92ZXIgPSBFRVBST01fNjAwMEcyX0VFUFJPTV9WRVJTSU9OLAotCS5lZXByb21fY2FsaWJfdmVyID0gRUVQUk9NXzYwMDBHMl9UWF9QT1dFUl9WRVJTSU9OLAotCS5vcHMgPSAmaXdsNjAwMF9vcHMsCi0JLm1vZF9wYXJhbXMgPSAmaXdsYWduX21vZF9wYXJhbXMsCi0JLmJhc2VfcGFyYW1zID0gJml3bDYwMDBfYmFzZV9wYXJhbXMsCi0JLm5lZWRfZGNfY2FsaWIgPSB0cnVlLAotCS5uZWVkX3RlbXBfb2Zmc2V0X2NhbGliID0gdHJ1ZSwKLQkudXNlX25ld19lZXByb21fcmVhZGluZyA9IHRydWUsCitzdHJ1Y3QgaXdsX2NmZyBpd2w2MDA1XzJiZ19jZmcgPSB7CisJLm5hbWUgPSAiSW50ZWwoUikgQ2VudHJpbm8oUikgQWR2YW5jZWQtTiA2MjA1IEJHIiwKKwlJV0xfREVWSUNFXzYwMDUsCiB9OwogCi1zdHJ1Y3QgaXdsX2NmZyBpd2w2MDAwZzJiXzJhZ25fY2ZnID0gewotCS5uYW1lID0gIjYwMDAgU2VyaWVzIDJ4MiBBR04gR2VuMmIiLAotCS5md19uYW1lX3ByZSA9IElXTDYwMDBHMkJfRldfUFJFLAotCS51Y29kZV9hcGlfbWF4ID0gSVdMNjAwMEcyX1VDT0RFX0FQSV9NQVgsCi0JLnVjb2RlX2FwaV9taW4gPSBJV0w2MDAwRzJfVUNPREVfQVBJX01JTiwKLQkuc2t1ID0gSVdMX1NLVV9BfElXTF9TS1VfR3xJV0xfU0tVX04sCi0JLnZhbGlkX3R4X2FudCA9IEFOVF9BQiwKLQkudmFsaWRfcnhfYW50ID0gQU5UX0FCLAotCS5lZXByb21fdmVyID0gRUVQUk9NXzYwMDBHMl9FRVBST01fVkVSU0lPTiwKLQkuZWVwcm9tX2NhbGliX3ZlciA9IEVFUFJPTV82MDAwRzJfVFhfUE9XRVJfVkVSU0lPTiwKLQkub3BzID0gJml3bDYwMDBnMmJfb3BzLAotCS5tb2RfcGFyYW1zID0gJml3bGFnbl9tb2RfcGFyYW1zLAotCS5iYXNlX3BhcmFtcyA9ICZpd2w2MDAwX2NvZXhfYmFzZV9wYXJhbXMsCi0JLmJ0X3BhcmFtcyA9ICZpd2w2MDAwX2J0X3BhcmFtcywKKyNkZWZpbmUgSVdMX0RFVklDRV82MDMwCQkJCQkJXAorCS5md19uYW1lX3ByZSA9IElXTDYwMDBHMkJfRldfUFJFLAkJCVwKKwkudWNvZGVfYXBpX21heCA9IElXTDYwMDBHMl9VQ09ERV9BUElfTUFYLAkJXAorCS51Y29kZV9hcGlfbWluID0gSVdMNjAwMEcyX1VDT0RFX0FQSV9NSU4sCQlcCisJLmVlcHJvbV92ZXIgPSBFRVBST01fNjAwMEcyX0VFUFJPTV9WRVJTSU9OLAkJXAorCS5lZXByb21fY2FsaWJfdmVyID0gRUVQUk9NXzYwMDBHMl9UWF9QT1dFUl9WRVJTSU9OLAlcCisJLm9wcyA9ICZpd2w2MDAwZzJiX29wcywJCQkJCVwKKwkubW9kX3BhcmFtcyA9ICZpd2xhZ25fbW9kX3BhcmFtcywJCQlcCisJLmJhc2VfcGFyYW1zID0gJml3bDYwMDBfZzJfYmFzZV9wYXJhbXMsCQkJXAorCS5idF9wYXJhbXMgPSAmaXdsNjAwMF9idF9wYXJhbXMsCQkJXAorCS5uZWVkX2RjX2NhbGliID0gdHJ1ZSwJCQkJCVwKKwkubmVlZF90ZW1wX29mZnNldF9jYWxpYiA9IHRydWUsCQkJCVwKKwkubGVkX21vZGUgPSBJV0xfTEVEX1JGX1NUQVRFLAkJCQlcCisJLmFkdl9wbSA9IHRydWUJCQkJCQlcCisKK3N0cnVjdCBpd2xfY2ZnIGl3bDYwMzBfMmFnbl9jZmcgPSB7CisJLm5hbWUgPSAiSW50ZWwoUikgQ2VudHJpbm8oUikgQWR2YW5jZWQtTiA2MjMwIEFHTiIsCisJSVdMX0RFVklDRV82MDMwLAogCS5odF9wYXJhbXMgPSAmaXdsNjAwMF9odF9wYXJhbXMsCi0JLm5lZWRfZGNfY2FsaWIgPSB0cnVlLAotCS5uZWVkX3RlbXBfb2Zmc2V0X2NhbGliID0gdHJ1ZSwKLQkvKiBEdWUgdG8gYmx1ZXRvb3RoLCB3ZSB0cmFuc21pdCAyLjQgR0h6IHByb2JlcyBvbmx5IG9uIGFudGVubmEgQSAqLwotCS5zY2FuX3R4X2FudGVubmFzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0gQU5UX0EsCi0JLnVzZV9uZXdfZWVwcm9tX3JlYWRpbmcgPSB0cnVlLAogfTsKIAotc3RydWN0IGl3bF9jZmcgaXdsNjAwMGcyYl8yYWJnX2NmZyA9IHsKLQkubmFtZSA9ICI2MDAwIFNlcmllcyAyeDIgQUJHIEdlbjJiIiwKLQkuZndfbmFtZV9wcmUgPSBJV0w2MDAwRzJCX0ZXX1BSRSwKLQkudWNvZGVfYXBpX21heCA9IElXTDYwMDBHMl9VQ09ERV9BUElfTUFYLAotCS51Y29kZV9hcGlfbWluID0gSVdMNjAwMEcyX1VDT0RFX0FQSV9NSU4sCi0JLnNrdSA9IElXTF9TS1VfQXxJV0xfU0tVX0csCi0JLnZhbGlkX3R4X2FudCA9IEFOVF9BQiwKLQkudmFsaWRfcnhfYW50ID0gQU5UX0FCLAotCS5lZXByb21fdmVyID0gRUVQUk9NXzYwMDBHMl9FRVBST01fVkVSU0lPTiwKLQkuZWVwcm9tX2NhbGliX3ZlciA9IEVFUFJPTV82MDAwRzJfVFhfUE9XRVJfVkVSU0lPTiwKLQkub3BzID0gJml3bDYwMDBnMmJfb3BzLAotCS5tb2RfcGFyYW1zID0gJml3bGFnbl9tb2RfcGFyYW1zLAotCS5iYXNlX3BhcmFtcyA9ICZpd2w2MDAwX2NvZXhfYmFzZV9wYXJhbXMsCi0JLmJ0X3BhcmFtcyA9ICZpd2w2MDAwX2J0X3BhcmFtcywKLQkubmVlZF9kY19jYWxpYiA9IHRydWUsCi0JLm5lZWRfdGVtcF9vZmZzZXRfY2FsaWIgPSB0cnVlLAotCS8qIER1ZSB0byBibHVldG9vdGgsIHdlIHRyYW5zbWl0IDIuNCBHSHogcHJvYmVzIG9ubHkgb24gYW50ZW5uYSBBICovCi0JLnNjYW5fdHhfYW50ZW5uYXNbSUVFRTgwMjExX0JBTkRfMkdIWl0gPSBBTlRfQSwKLQkudXNlX25ld19lZXByb21fcmVhZGluZyA9IHRydWUsCitzdHJ1Y3QgaXdsX2NmZyBpd2w2MDMwXzJhYmdfY2ZnID0geworCS5uYW1lID0gIkludGVsKFIpIENlbnRyaW5vKFIpIEFkdmFuY2VkLU4gNjIzMCBBQkciLAorCUlXTF9ERVZJQ0VfNjAzMCwKIH07CiAKLXN0cnVjdCBpd2xfY2ZnIGl3bDYwMDBnMmJfMmJnbl9jZmcgPSB7Ci0JLm5hbWUgPSAiNjAwMCBTZXJpZXMgMngyIEJHTiBHZW4yYiIsCi0JLmZ3X25hbWVfcHJlID0gSVdMNjAwMEcyQl9GV19QUkUsCi0JLnVjb2RlX2FwaV9tYXggPSBJV0w2MDAwRzJfVUNPREVfQVBJX01BWCwKLQkudWNvZGVfYXBpX21pbiA9IElXTDYwMDBHMl9VQ09ERV9BUElfTUlOLAotCS5za3UgPSBJV0xfU0tVX0d8SVdMX1NLVV9OLAotCS52YWxpZF90eF9hbnQgPSBBTlRfQUIsCi0JLnZhbGlkX3J4X2FudCA9IEFOVF9BQiwKLQkuZWVwcm9tX3ZlciA9IEVFUFJPTV82MDAwRzJfRUVQUk9NX1ZFUlNJT04sCi0JLmVlcHJvbV9jYWxpYl92ZXIgPSBFRVBST01fNjAwMEcyX1RYX1BPV0VSX1ZFUlNJT04sCi0JLm9wcyA9ICZpd2w2MDAwZzJiX29wcywKLQkubW9kX3BhcmFtcyA9ICZpd2xhZ25fbW9kX3BhcmFtcywKLQkuYmFzZV9wYXJhbXMgPSAmaXdsNjAwMF9jb2V4X2Jhc2VfcGFyYW1zLAotCS5idF9wYXJhbXMgPSAmaXdsNjAwMF9idF9wYXJhbXMsCitzdHJ1Y3QgaXdsX2NmZyBpd2w2MDMwXzJiZ25fY2ZnID0geworCS5uYW1lID0gIkludGVsKFIpIENlbnRyaW5vKFIpIEFkdmFuY2VkLU4gNjIzMCBCR04iLAorCUlXTF9ERVZJQ0VfNjAzMCwKIAkuaHRfcGFyYW1zID0gJml3bDYwMDBfaHRfcGFyYW1zLAotCS5uZWVkX2RjX2NhbGliID0gdHJ1ZSwKLQkubmVlZF90ZW1wX29mZnNldF9jYWxpYiA9IHRydWUsCi0JLyogRHVlIHRvIGJsdWV0b290aCwgd2UgdHJhbnNtaXQgMi40IEdIeiBwcm9iZXMgb25seSBvbiBhbnRlbm5hIEEgKi8KLQkuc2Nhbl90eF9hbnRlbm5hc1tJRUVFODAyMTFfQkFORF8yR0haXSA9IEFOVF9BLAotCS51c2VfbmV3X2VlcHJvbV9yZWFkaW5nID0gdHJ1ZSwKIH07CiAKLXN0cnVjdCBpd2xfY2ZnIGl3bDYwMDBnMmJfMmJnX2NmZyA9IHsKLQkubmFtZSA9ICI2MDAwIFNlcmllcyAyeDIgQkcgR2VuMmIiLAotCS5md19uYW1lX3ByZSA9IElXTDYwMDBHMkJfRldfUFJFLAotCS51Y29kZV9hcGlfbWF4ID0gSVdMNjAwMEcyX1VDT0RFX0FQSV9NQVgsCi0JLnVjb2RlX2FwaV9taW4gPSBJV0w2MDAwRzJfVUNPREVfQVBJX01JTiwKLQkuc2t1ID0gSVdMX1NLVV9HLAotCS52YWxpZF90eF9hbnQgPSBBTlRfQUIsCi0JLnZhbGlkX3J4X2FudCA9IEFOVF9BQiwKLQkuZWVwcm9tX3ZlciA9IEVFUFJPTV82MDAwRzJfRUVQUk9NX1ZFUlNJT04sCi0JLmVlcHJvbV9jYWxpYl92ZXIgPSBFRVBST01fNjAwMEcyX1RYX1BPV0VSX1ZFUlNJT04sCi0JLm9wcyA9ICZpd2w2MDAwZzJiX29wcywKLQkubW9kX3BhcmFtcyA9ICZpd2xhZ25fbW9kX3BhcmFtcywKLQkuYmFzZV9wYXJhbXMgPSAmaXdsNjAwMF9jb2V4X2Jhc2VfcGFyYW1zLAotCS5idF9wYXJhbXMgPSAmaXdsNjAwMF9idF9wYXJhbXMsCi0JLm5lZWRfZGNfY2FsaWIgPSB0cnVlLAotCS5uZWVkX3RlbXBfb2Zmc2V0X2NhbGliID0gdHJ1ZSwKLQkvKiBEdWUgdG8gYmx1ZXRvb3RoLCB3ZSB0cmFuc21pdCAyLjQgR0h6IHByb2JlcyBvbmx5IG9uIGFudGVubmEgQSAqLwotCS5zY2FuX3R4X2FudGVubmFzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0gQU5UX0EsCi0JLnVzZV9uZXdfZWVwcm9tX3JlYWRpbmcgPSB0cnVlLAorc3RydWN0IGl3bF9jZmcgaXdsNjAzMF8yYmdfY2ZnID0geworCS5uYW1lID0gIkludGVsKFIpIENlbnRyaW5vKFIpIEFkdmFuY2VkLU4gNjIzMCBCRyIsCisJSVdMX0RFVklDRV82MDMwLAogfTsKIAotc3RydWN0IGl3bF9jZmcgaXdsNjAwMGcyYl9iZ25fY2ZnID0gewotCS5uYW1lID0gIjYwMDAgU2VyaWVzIDF4MiBCR04gR2VuMmIiLAotCS5md19uYW1lX3ByZSA9IElXTDYwMDBHMkJfRldfUFJFLAotCS51Y29kZV9hcGlfbWF4ID0gSVdMNjAwMEcyX1VDT0RFX0FQSV9NQVgsCi0JLnVjb2RlX2FwaV9taW4gPSBJV0w2MDAwRzJfVUNPREVfQVBJX01JTiwKLQkuc2t1ID0gSVdMX1NLVV9HfElXTF9TS1VfTiwKLQkudmFsaWRfdHhfYW50ID0gQU5UX0EsCi0JLnZhbGlkX3J4X2FudCA9IEFOVF9BQiwKLQkuZWVwcm9tX3ZlciA9IEVFUFJPTV82MDAwRzJfRUVQUk9NX1ZFUlNJT04sCi0JLmVlcHJvbV9jYWxpYl92ZXIgPSBFRVBST01fNjAwMEcyX1RYX1BPV0VSX1ZFUlNJT04sCi0JLm9wcyA9ICZpd2w2MDAwZzJiX29wcywKLQkubW9kX3BhcmFtcyA9ICZpd2xhZ25fbW9kX3BhcmFtcywKLQkuYmFzZV9wYXJhbXMgPSAmaXdsNjAwMF9jb2V4X2Jhc2VfcGFyYW1zLAotCS5idF9wYXJhbXMgPSAmaXdsNjAwMF9idF9wYXJhbXMsCitzdHJ1Y3QgaXdsX2NmZyBpd2wxMDMwX2Jnbl9jZmcgPSB7CisJLm5hbWUgPSAiSW50ZWwoUikgQ2VudHJpbm8oUikgV2lyZWxlc3MtTiAxMDMwIEJHTiIsCisJSVdMX0RFVklDRV82MDMwLAogCS5odF9wYXJhbXMgPSAmaXdsNjAwMF9odF9wYXJhbXMsCi0JLm5lZWRfZGNfY2FsaWIgPSB0cnVlLAotCS5uZWVkX3RlbXBfb2Zmc2V0X2NhbGliID0gdHJ1ZSwKLQkvKiBEdWUgdG8gYmx1ZXRvb3RoLCB3ZSB0cmFuc21pdCAyLjQgR0h6IHByb2JlcyBvbmx5IG9uIGFudGVubmEgQSAqLwotCS5zY2FuX3R4X2FudGVubmFzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0gQU5UX0EsCi0JLnVzZV9uZXdfZWVwcm9tX3JlYWRpbmcgPSB0cnVlLAogfTsKIAotc3RydWN0IGl3bF9jZmcgaXdsNjAwMGcyYl9iZ19jZmcgPSB7Ci0JLm5hbWUgPSAiNjAwMCBTZXJpZXMgMXgyIEJHIEdlbjJiIiwKLQkuZndfbmFtZV9wcmUgPSBJV0w2MDAwRzJCX0ZXX1BSRSwKLQkudWNvZGVfYXBpX21heCA9IElXTDYwMDBHMl9VQ09ERV9BUElfTUFYLAotCS51Y29kZV9hcGlfbWluID0gSVdMNjAwMEcyX1VDT0RFX0FQSV9NSU4sCi0JLnNrdSA9IElXTF9TS1VfRywKLQkudmFsaWRfdHhfYW50ID0gQU5UX0EsCi0JLnZhbGlkX3J4X2FudCA9IEFOVF9BQiwKLQkuZWVwcm9tX3ZlciA9IEVFUFJPTV82MDAwRzJfRUVQUk9NX1ZFUlNJT04sCi0JLmVlcHJvbV9jYWxpYl92ZXIgPSBFRVBST01fNjAwMEcyX1RYX1BPV0VSX1ZFUlNJT04sCi0JLm9wcyA9ICZpd2w2MDAwZzJiX29wcywKLQkubW9kX3BhcmFtcyA9ICZpd2xhZ25fbW9kX3BhcmFtcywKLQkuYmFzZV9wYXJhbXMgPSAmaXdsNjAwMF9jb2V4X2Jhc2VfcGFyYW1zLAotCS5idF9wYXJhbXMgPSAmaXdsNjAwMF9idF9wYXJhbXMsCi0JLm5lZWRfZGNfY2FsaWIgPSB0cnVlLAotCS5uZWVkX3RlbXBfb2Zmc2V0X2NhbGliID0gdHJ1ZSwKLQkvKiBEdWUgdG8gYmx1ZXRvb3RoLCB3ZSB0cmFuc21pdCAyLjQgR0h6IHByb2JlcyBvbmx5IG9uIGFudGVubmEgQSAqLwotCS5zY2FuX3R4X2FudGVubmFzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0gQU5UX0EsCi0JLnVzZV9uZXdfZWVwcm9tX3JlYWRpbmcgPSB0cnVlLAorc3RydWN0IGl3bF9jZmcgaXdsMTAzMF9iZ19jZmcgPSB7CisJLm5hbWUgPSAiSW50ZWwoUikgQ2VudHJpbm8oUikgV2lyZWxlc3MtTiAxMDMwIEJHIiwKKwlJV0xfREVWSUNFXzYwMzAsCit9OworCitzdHJ1Y3QgaXdsX2NmZyBpd2wxMzBfYmduX2NmZyA9IHsKKwkubmFtZSA9ICJJbnRlbChSKSBDZW50cmlubyhSKSBXaXJlbGVzcy1OIDEzMCBCR04iLAorCUlXTF9ERVZJQ0VfNjAzMCwKKwkuaHRfcGFyYW1zID0gJml3bDYwMDBfaHRfcGFyYW1zLAorCS5yeF93aXRoX3Npc29fZGl2ZXJzaXR5ID0gdHJ1ZSwKK307CisKK3N0cnVjdCBpd2xfY2ZnIGl3bDEzMF9iZ19jZmcgPSB7CisJLm5hbWUgPSAiSW50ZWwoUikgQ2VudHJpbm8oUikgV2lyZWxlc3MtTiAxMzAgQkciLAorCUlXTF9ERVZJQ0VfNjAzMCwKKwkucnhfd2l0aF9zaXNvX2RpdmVyc2l0eSA9IHRydWUsCiB9OwogCiAvKgogICogImkiOiBJbnRlcm5hbCBjb25maWd1cmF0aW9uLCB1c2UgaW50ZXJuYWwgUG93ZXIgQW1wbGlmaWVyCiAgKi8KKyNkZWZpbmUgSVdMX0RFVklDRV82MDAwaQkJCQkJXAorCS5md19uYW1lX3ByZSA9IElXTDYwMDBfRldfUFJFLAkJCQlcCisJLnVjb2RlX2FwaV9tYXggPSBJV0w2MDAwX1VDT0RFX0FQSV9NQVgsCQkJXAorCS51Y29kZV9hcGlfbWluID0gSVdMNjAwMF9VQ09ERV9BUElfTUlOLAkJCVwKKwkudmFsaWRfdHhfYW50ID0gQU5UX0JDLAkJLyogLmNmZyBvdmVyd3JpdGUgKi8JXAorCS52YWxpZF9yeF9hbnQgPSBBTlRfQkMsCQkvKiAuY2ZnIG92ZXJ3cml0ZSAqLwlcCisJLmVlcHJvbV92ZXIgPSBFRVBST01fNjAwMF9FRVBST01fVkVSU0lPTiwJCVwKKwkuZWVwcm9tX2NhbGliX3ZlciA9IEVFUFJPTV82MDAwX1RYX1BPV0VSX1ZFUlNJT04sCVwKKwkub3BzID0gJml3bDYwMDBfb3BzLAkJCQkJXAorCS5tb2RfcGFyYW1zID0gJml3bGFnbl9tb2RfcGFyYW1zLAkJCVwKKwkuYmFzZV9wYXJhbXMgPSAmaXdsNjAwMF9iYXNlX3BhcmFtcywJCQlcCisJLnBhX3R5cGUgPSBJV0xfUEFfSU5URVJOQUwsCQkJCVwKKwkubGVkX21vZGUgPSBJV0xfTEVEX0JMSU5LCisKIHN0cnVjdCBpd2xfY2ZnIGl3bDYwMDBpXzJhZ25fY2ZnID0gewogCS5uYW1lID0gIkludGVsKFIpIENlbnRyaW5vKFIpIEFkdmFuY2VkLU4gNjIwMCBBR04iLAotCS5md19uYW1lX3ByZSA9IElXTDYwMDBfRldfUFJFLAotCS51Y29kZV9hcGlfbWF4ID0gSVdMNjAwMF9VQ09ERV9BUElfTUFYLAotCS51Y29kZV9hcGlfbWluID0gSVdMNjAwMF9VQ09ERV9BUElfTUlOLAotCS5za3UgPSBJV0xfU0tVX0F8SVdMX1NLVV9HfElXTF9TS1VfTiwKLQkudmFsaWRfdHhfYW50ID0gQU5UX0JDLAotCS52YWxpZF9yeF9hbnQgPSBBTlRfQkMsCi0JLmVlcHJvbV92ZXIgPSBFRVBST01fNjAwMF9FRVBST01fVkVSU0lPTiwKLQkuZWVwcm9tX2NhbGliX3ZlciA9IEVFUFJPTV82MDAwX1RYX1BPV0VSX1ZFUlNJT04sCi0JLm9wcyA9ICZpd2w2MDAwX29wcywKLQkubW9kX3BhcmFtcyA9ICZpd2xhZ25fbW9kX3BhcmFtcywKLQkuYmFzZV9wYXJhbXMgPSAmaXdsNjAwMF9iYXNlX3BhcmFtcywKKwlJV0xfREVWSUNFXzYwMDBpLAogCS5odF9wYXJhbXMgPSAmaXdsNjAwMF9odF9wYXJhbXMsCi0JLnBhX3R5cGUgPSBJV0xfUEFfSU5URVJOQUwsCiB9OwogCiBzdHJ1Y3QgaXdsX2NmZyBpd2w2MDAwaV8yYWJnX2NmZyA9IHsKIAkubmFtZSA9ICJJbnRlbChSKSBDZW50cmlubyhSKSBBZHZhbmNlZC1OIDYyMDAgQUJHIiwKLQkuZndfbmFtZV9wcmUgPSBJV0w2MDAwX0ZXX1BSRSwKLQkudWNvZGVfYXBpX21heCA9IElXTDYwMDBfVUNPREVfQVBJX01BWCwKLQkudWNvZGVfYXBpX21pbiA9IElXTDYwMDBfVUNPREVfQVBJX01JTiwKLQkuc2t1ID0gSVdMX1NLVV9BfElXTF9TS1VfRywKLQkudmFsaWRfdHhfYW50ID0gQU5UX0JDLAotCS52YWxpZF9yeF9hbnQgPSBBTlRfQkMsCi0JLmVlcHJvbV92ZXIgPSBFRVBST01fNjAwMF9FRVBST01fVkVSU0lPTiwKLQkuZWVwcm9tX2NhbGliX3ZlciA9IEVFUFJPTV82MDAwX1RYX1BPV0VSX1ZFUlNJT04sCi0JLm9wcyA9ICZpd2w2MDAwX29wcywKLQkubW9kX3BhcmFtcyA9ICZpd2xhZ25fbW9kX3BhcmFtcywKLQkuYmFzZV9wYXJhbXMgPSAmaXdsNjAwMF9iYXNlX3BhcmFtcywKLQkucGFfdHlwZSA9IElXTF9QQV9JTlRFUk5BTCwKKwlJV0xfREVWSUNFXzYwMDBpLAogfTsKIAogc3RydWN0IGl3bF9jZmcgaXdsNjAwMGlfMmJnX2NmZyA9IHsKIAkubmFtZSA9ICJJbnRlbChSKSBDZW50cmlubyhSKSBBZHZhbmNlZC1OIDYyMDAgQkciLAotCS5md19uYW1lX3ByZSA9IElXTDYwMDBfRldfUFJFLAotCS51Y29kZV9hcGlfbWF4ID0gSVdMNjAwMF9VQ09ERV9BUElfTUFYLAotCS51Y29kZV9hcGlfbWluID0gSVdMNjAwMF9VQ09ERV9BUElfTUlOLAotCS5za3UgPSBJV0xfU0tVX0csCi0JLnZhbGlkX3R4X2FudCA9IEFOVF9CQywKLQkudmFsaWRfcnhfYW50ID0gQU5UX0JDLAotCS5lZXByb21fdmVyID0gRUVQUk9NXzYwMDBfRUVQUk9NX1ZFUlNJT04sCi0JLmVlcHJvbV9jYWxpYl92ZXIgPSBFRVBST01fNjAwMF9UWF9QT1dFUl9WRVJTSU9OLAotCS5vcHMgPSAmaXdsNjAwMF9vcHMsCi0JLm1vZF9wYXJhbXMgPSAmaXdsYWduX21vZF9wYXJhbXMsCi0JLmJhc2VfcGFyYW1zID0gJml3bDYwMDBfYmFzZV9wYXJhbXMsCi0JLnBhX3R5cGUgPSBJV0xfUEFfSU5URVJOQUwsCisJSVdMX0RFVklDRV82MDAwaSwKIH07CiAKKyNkZWZpbmUgSVdMX0RFVklDRV82MDUwCQkJCQkJXAorCS5md19uYW1lX3ByZSA9IElXTDYwNTBfRldfUFJFLAkJCQlcCisJLnVjb2RlX2FwaV9tYXggPSBJV0w2MDUwX1VDT0RFX0FQSV9NQVgsCQkJXAorCS51Y29kZV9hcGlfbWluID0gSVdMNjA1MF9VQ09ERV9BUElfTUlOLAkJCVwKKwkub3BzID0gJml3bDYwNTBfb3BzLAkJCQkJXAorCS5lZXByb21fdmVyID0gRUVQUk9NXzYwNTBfRUVQUk9NX1ZFUlNJT04sCQlcCisJLmVlcHJvbV9jYWxpYl92ZXIgPSBFRVBST01fNjA1MF9UWF9QT1dFUl9WRVJTSU9OLAlcCisJLm1vZF9wYXJhbXMgPSAmaXdsYWduX21vZF9wYXJhbXMsCQkJXAorCS5iYXNlX3BhcmFtcyA9ICZpd2w2MDUwX2Jhc2VfcGFyYW1zLAkJCVwKKwkubmVlZF9kY19jYWxpYiA9IHRydWUsCQkJCQlcCisJLmxlZF9tb2RlID0gSVdMX0xFRF9CTElOSywJCQkJXAorCS5pbnRlcm5hbF93aW1heF9jb2V4ID0gdHJ1ZQorCiBzdHJ1Y3QgaXdsX2NmZyBpd2w2MDUwXzJhZ25fY2ZnID0gewogCS5uYW1lID0gIkludGVsKFIpIENlbnRyaW5vKFIpIEFkdmFuY2VkLU4gKyBXaU1BWCA2MjUwIEFHTiIsCi0JLmZ3X25hbWVfcHJlID0gSVdMNjA1MF9GV19QUkUsCi0JLnVjb2RlX2FwaV9tYXggPSBJV0w2MDUwX1VDT0RFX0FQSV9NQVgsCi0JLnVjb2RlX2FwaV9taW4gPSBJV0w2MDUwX1VDT0RFX0FQSV9NSU4sCi0JLnNrdSA9IElXTF9TS1VfQXxJV0xfU0tVX0d8SVdMX1NLVV9OLAotCS52YWxpZF90eF9hbnQgPSBBTlRfQUIsCi0JLnZhbGlkX3J4X2FudCA9IEFOVF9BQiwKLQkub3BzID0gJml3bDYwNTBfb3BzLAotCS5lZXByb21fdmVyID0gRUVQUk9NXzYwNTBfRUVQUk9NX1ZFUlNJT04sCi0JLmVlcHJvbV9jYWxpYl92ZXIgPSBFRVBST01fNjA1MF9UWF9QT1dFUl9WRVJTSU9OLAotCS5tb2RfcGFyYW1zID0gJml3bGFnbl9tb2RfcGFyYW1zLAotCS5iYXNlX3BhcmFtcyA9ICZpd2w2MDUwX2Jhc2VfcGFyYW1zLAorCUlXTF9ERVZJQ0VfNjA1MCwKIAkuaHRfcGFyYW1zID0gJml3bDYwMDBfaHRfcGFyYW1zLAotCS5uZWVkX2RjX2NhbGliID0gdHJ1ZSwKIH07CiAKLXN0cnVjdCBpd2xfY2ZnIGl3bDYwNTBnMl9iZ25fY2ZnID0gewotCS5uYW1lID0gIjYwNTAgU2VyaWVzIDF4MiBCR04gR2VuMiIsCitzdHJ1Y3QgaXdsX2NmZyBpd2w2MDUwXzJhYmdfY2ZnID0geworCS5uYW1lID0gIkludGVsKFIpIENlbnRyaW5vKFIpIEFkdmFuY2VkLU4gKyBXaU1BWCA2MjUwIEFCRyIsCisJSVdMX0RFVklDRV82MDUwLAorfTsKKworc3RydWN0IGl3bF9jZmcgaXdsNjE1MF9iZ25fY2ZnID0geworCS5uYW1lID0gIkludGVsKFIpIENlbnRyaW5vKFIpIFdpcmVsZXNzLU4gKyBXaU1BWCA2MTUwIEJHTiIsCiAJLmZ3X25hbWVfcHJlID0gSVdMNjA1MF9GV19QUkUsCiAJLnVjb2RlX2FwaV9tYXggPSBJV0w2MDUwX1VDT0RFX0FQSV9NQVgsCiAJLnVjb2RlX2FwaV9taW4gPSBJV0w2MDUwX1VDT0RFX0FQSV9NSU4sCi0JLnNrdSA9IElXTF9TS1VfR3xJV0xfU0tVX04sCi0JLnZhbGlkX3R4X2FudCA9IEFOVF9BLAotCS52YWxpZF9yeF9hbnQgPSBBTlRfQUIsCiAJLmVlcHJvbV92ZXIgPSBFRVBST01fNjA1MEcyX0VFUFJPTV9WRVJTSU9OLAogCS5lZXByb21fY2FsaWJfdmVyID0gRUVQUk9NXzYwNTBHMl9UWF9QT1dFUl9WRVJTSU9OLAogCS5vcHMgPSAmaXdsNjA1MGcyX29wcywKQEAgLTgxMywyMyArNzEzLDggQEAKIAkuYmFzZV9wYXJhbXMgPSAmaXdsNjA1MF9iYXNlX3BhcmFtcywKIAkuaHRfcGFyYW1zID0gJml3bDYwMDBfaHRfcGFyYW1zLAogCS5uZWVkX2RjX2NhbGliID0gdHJ1ZSwKLQkudXNlX25ld19lZXByb21fcmVhZGluZyA9IHRydWUsCi19OwotCi1zdHJ1Y3QgaXdsX2NmZyBpd2w2MDUwXzJhYmdfY2ZnID0gewotCS5uYW1lID0gIkludGVsKFIpIENlbnRyaW5vKFIpIEFkdmFuY2VkLU4gKyBXaU1BWCA2MjUwIEFCRyIsCi0JLmZ3X25hbWVfcHJlID0gSVdMNjA1MF9GV19QUkUsCi0JLnVjb2RlX2FwaV9tYXggPSBJV0w2MDUwX1VDT0RFX0FQSV9NQVgsCi0JLnVjb2RlX2FwaV9taW4gPSBJV0w2MDUwX1VDT0RFX0FQSV9NSU4sCi0JLnNrdSA9IElXTF9TS1VfQXxJV0xfU0tVX0csCi0JLnZhbGlkX3R4X2FudCA9IEFOVF9BQiwKLQkudmFsaWRfcnhfYW50ID0gQU5UX0FCLAotCS5lZXByb21fdmVyID0gRUVQUk9NXzYwNTBfRUVQUk9NX1ZFUlNJT04sCi0JLmVlcHJvbV9jYWxpYl92ZXIgPSBFRVBST01fNjA1MF9UWF9QT1dFUl9WRVJTSU9OLAotCS5vcHMgPSAmaXdsNjA1MF9vcHMsCi0JLm1vZF9wYXJhbXMgPSAmaXdsYWduX21vZF9wYXJhbXMsCi0JLmJhc2VfcGFyYW1zID0gJml3bDYwNTBfYmFzZV9wYXJhbXMsCi0JLm5lZWRfZGNfY2FsaWIgPSB0cnVlLAorCS5sZWRfbW9kZSA9IElXTF9MRURfUkZfU1RBVEUsCisJLmludGVybmFsX3dpbWF4X2NvZXggPSB0cnVlLAogfTsKIAogc3RydWN0IGl3bF9jZmcgaXdsNjAwMF8zYWduX2NmZyA9IHsKQEAgLTgzNyw5ICs3MjIsNiBAQAogCS5md19uYW1lX3ByZSA9IElXTDYwMDBfRldfUFJFLAogCS51Y29kZV9hcGlfbWF4ID0gSVdMNjAwMF9VQ09ERV9BUElfTUFYLAogCS51Y29kZV9hcGlfbWluID0gSVdMNjAwMF9VQ09ERV9BUElfTUlOLAotCS5za3UgPSBJV0xfU0tVX0F8SVdMX1NLVV9HfElXTF9TS1VfTiwKLQkudmFsaWRfdHhfYW50ID0gQU5UX0FCQywKLQkudmFsaWRfcnhfYW50ID0gQU5UX0FCQywKIAkuZWVwcm9tX3ZlciA9IEVFUFJPTV82MDAwX0VFUFJPTV9WRVJTSU9OLAogCS5lZXByb21fY2FsaWJfdmVyID0gRUVQUk9NXzYwMDBfVFhfUE9XRVJfVkVSU0lPTiwKIAkub3BzID0gJml3bDYwMDBfb3BzLApAQCAtODQ3LDUxICs3MjksMTAgQEAKIAkuYmFzZV9wYXJhbXMgPSAmaXdsNjAwMF9iYXNlX3BhcmFtcywKIAkuaHRfcGFyYW1zID0gJml3bDYwMDBfaHRfcGFyYW1zLAogCS5uZWVkX2RjX2NhbGliID0gdHJ1ZSwKLX07Ci0KLXN0cnVjdCBpd2xfY2ZnIGl3bDEzMF9iZ25fY2ZnID0gewotCS5uYW1lID0gIkludGVsKFIpIDEzMCBTZXJpZXMgMXgxIEJHTiIsCi0JLmZ3X25hbWVfcHJlID0gSVdMNjAwMEcyQl9GV19QUkUsCi0JLnVjb2RlX2FwaV9tYXggPSBJV0wxMzBfVUNPREVfQVBJX01BWCwKLQkudWNvZGVfYXBpX21pbiA9IElXTDEzMF9VQ09ERV9BUElfTUlOLAotCS5za3UgPSBJV0xfU0tVX0d8SVdMX1NLVV9OLAotCS52YWxpZF90eF9hbnQgPSBBTlRfQSwKLQkudmFsaWRfcnhfYW50ID0gQU5UX0EsCi0JLmVlcHJvbV92ZXIgPSBFRVBST01fNjAwMEcyX0VFUFJPTV9WRVJTSU9OLAotCS5lZXByb21fY2FsaWJfdmVyID0gRUVQUk9NXzYwMDBHMl9UWF9QT1dFUl9WRVJTSU9OLAotCS5vcHMgPSAmaXdsNjAwMGcyYl9vcHMsCi0JLm1vZF9wYXJhbXMgPSAmaXdsYWduX21vZF9wYXJhbXMsCi0JLmJhc2VfcGFyYW1zID0gJml3bDYwMDBfY29leF9iYXNlX3BhcmFtcywKLQkuYnRfcGFyYW1zID0gJml3bDYwMDBfYnRfcGFyYW1zLAotCS5odF9wYXJhbXMgPSAmaXdsNjAwMF9odF9wYXJhbXMsCi0JLm5lZWRfZGNfY2FsaWIgPSB0cnVlLAotCS8qIER1ZSB0byBibHVldG9vdGgsIHdlIHRyYW5zbWl0IDIuNCBHSHogcHJvYmVzIG9ubHkgb24gYW50ZW5uYSBBICovCi0JLnNjYW5fdHhfYW50ZW5uYXNbSUVFRTgwMjExX0JBTkRfMkdIWl0gPSBBTlRfQSwKLQkudXNlX25ld19lZXByb21fcmVhZGluZyA9IHRydWUsCi19OwotCi1zdHJ1Y3QgaXdsX2NmZyBpd2wxMzBfYmdfY2ZnID0gewotCS5uYW1lID0gIkludGVsKFIpIDEzMCBTZXJpZXMgMXgyIEJHIiwKLQkuZndfbmFtZV9wcmUgPSBJV0w2MDAwRzJCX0ZXX1BSRSwKLQkudWNvZGVfYXBpX21heCA9IElXTDEzMF9VQ09ERV9BUElfTUFYLAotCS51Y29kZV9hcGlfbWluID0gSVdMMTMwX1VDT0RFX0FQSV9NSU4sCi0JLnNrdSA9IElXTF9TS1VfRywKLQkudmFsaWRfdHhfYW50ID0gQU5UX0EsCi0JLnZhbGlkX3J4X2FudCA9IEFOVF9BLAotCS5lZXByb21fdmVyID0gRUVQUk9NXzYwMDBHMl9FRVBST01fVkVSU0lPTiwKLQkuZWVwcm9tX2NhbGliX3ZlciA9IEVFUFJPTV82MDAwRzJfVFhfUE9XRVJfVkVSU0lPTiwKLQkub3BzID0gJml3bDYwMDBnMmJfb3BzLAotCS5tb2RfcGFyYW1zID0gJml3bGFnbl9tb2RfcGFyYW1zLAotCS5iYXNlX3BhcmFtcyA9ICZpd2w2MDAwX2NvZXhfYmFzZV9wYXJhbXMsCi0JLmJ0X3BhcmFtcyA9ICZpd2w2MDAwX2J0X3BhcmFtcywKLQkubmVlZF9kY19jYWxpYiA9IHRydWUsCi0JLyogRHVlIHRvIGJsdWV0b290aCwgd2UgdHJhbnNtaXQgMi40IEdIeiBwcm9iZXMgb25seSBvbiBhbnRlbm5hIEEgKi8KLQkuc2Nhbl90eF9hbnRlbm5hc1tJRUVFODAyMTFfQkFORF8yR0haXSA9IEFOVF9BLAotCS51c2VfbmV3X2VlcHJvbV9yZWFkaW5nID0gdHJ1ZSwKKwkubGVkX21vZGUgPSBJV0xfTEVEX0JMSU5LLAogfTsKIAogTU9EVUxFX0ZJUk1XQVJFKElXTDYwMDBfTU9EVUxFX0ZJUk1XQVJFKElXTDYwMDBfVUNPREVfQVBJX01BWCkpOwogTU9EVUxFX0ZJUk1XQVJFKElXTDYwNTBfTU9EVUxFX0ZJUk1XQVJFKElXTDYwNTBfVUNPREVfQVBJX01BWCkpOwogTU9EVUxFX0ZJUk1XQVJFKElXTDYwMDBHMkFfTU9EVUxFX0ZJUk1XQVJFKElXTDYwMDBHMl9VQ09ERV9BUElfTUFYKSk7CiBNT0RVTEVfRklSTVdBUkUoSVdMNjAwMEcyQl9NT0RVTEVfRklSTVdBUkUoSVdMNjAwMEcyX1VDT0RFX0FQSV9NQVgpKTsKLU1PRFVMRV9GSVJNV0FSRShJV0wxMzBfTU9EVUxFX0ZJUk1XQVJFKElXTDEzMF9VQ09ERV9BUElfTUFYKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tY2FsaWIuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1jYWxpYi5jCmluZGV4IGUyMDE5ZTcuLmQxNmJiNWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1jYWxpYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1jYWxpYi5jCkBAIC03MzIsOCArNzMyLDEyMiBAQAogCXJldHVybiBDSEFJTl9DOwogfQogCisvKioKKyAqIFJ1biBkaXNjb25uZWN0ZWQgYW50ZW5uYSBhbGdvcml0aG0gdG8gZmluZCBvdXQgd2hpY2ggYW50ZW5uYXMgYXJlCisgKiBkaXNjb25uZWN0ZWQuCisgKi8KK3N0YXRpYyB2b2lkIGl3bF9maW5kX2Rpc2Nvbm5fYW50ZW5uYShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiogYXZlcmFnZV9zaWcsCisJCQkJICAgICBzdHJ1Y3QgaXdsX2NoYWluX25vaXNlX2RhdGEgKmRhdGEpCit7CisJdTMyIGFjdGl2ZV9jaGFpbnMgPSAwOworCXUzMiBtYXhfYXZlcmFnZV9zaWc7CisJdTE2IG1heF9hdmVyYWdlX3NpZ19hbnRlbm5hX2k7CisJdTggbnVtX3R4X2NoYWluczsKKwl1OCBmaXJzdF9jaGFpbjsKKwl1MTYgaSA9IDA7CisKKwlhdmVyYWdlX3NpZ1swXSA9IGRhdGEtPmNoYWluX3NpZ25hbF9hIC8KKwkJCSBwcml2LT5jZmctPmJhc2VfcGFyYW1zLT5jaGFpbl9ub2lzZV9udW1fYmVhY29uczsKKwlhdmVyYWdlX3NpZ1sxXSA9IGRhdGEtPmNoYWluX3NpZ25hbF9iIC8KKwkJCSBwcml2LT5jZmctPmJhc2VfcGFyYW1zLT5jaGFpbl9ub2lzZV9udW1fYmVhY29uczsKKwlhdmVyYWdlX3NpZ1syXSA9IGRhdGEtPmNoYWluX3NpZ25hbF9jIC8KKwkJCSBwcml2LT5jZmctPmJhc2VfcGFyYW1zLT5jaGFpbl9ub2lzZV9udW1fYmVhY29uczsKKworCWlmIChhdmVyYWdlX3NpZ1swXSA+PSBhdmVyYWdlX3NpZ1sxXSkgeworCQltYXhfYXZlcmFnZV9zaWcgPSBhdmVyYWdlX3NpZ1swXTsKKwkJbWF4X2F2ZXJhZ2Vfc2lnX2FudGVubmFfaSA9IDA7CisJCWFjdGl2ZV9jaGFpbnMgPSAoMSA8PCBtYXhfYXZlcmFnZV9zaWdfYW50ZW5uYV9pKTsKKwl9IGVsc2UgeworCQltYXhfYXZlcmFnZV9zaWcgPSBhdmVyYWdlX3NpZ1sxXTsKKwkJbWF4X2F2ZXJhZ2Vfc2lnX2FudGVubmFfaSA9IDE7CisJCWFjdGl2ZV9jaGFpbnMgPSAoMSA8PCBtYXhfYXZlcmFnZV9zaWdfYW50ZW5uYV9pKTsKKwl9CisKKwlpZiAoYXZlcmFnZV9zaWdbMl0gPj0gbWF4X2F2ZXJhZ2Vfc2lnKSB7CisJCW1heF9hdmVyYWdlX3NpZyA9IGF2ZXJhZ2Vfc2lnWzJdOworCQltYXhfYXZlcmFnZV9zaWdfYW50ZW5uYV9pID0gMjsKKwkJYWN0aXZlX2NoYWlucyA9ICgxIDw8IG1heF9hdmVyYWdlX3NpZ19hbnRlbm5hX2kpOworCX0KKworCUlXTF9ERUJVR19DQUxJQihwcml2LCAiYXZlcmFnZV9zaWc6IGEgJWQgYiAlZCBjICVkXG4iLAorCQkgICAgIGF2ZXJhZ2Vfc2lnWzBdLCBhdmVyYWdlX3NpZ1sxXSwgYXZlcmFnZV9zaWdbMl0pOworCUlXTF9ERUJVR19DQUxJQihwcml2LCAibWF4X2F2ZXJhZ2Vfc2lnID0gJWQsIGFudGVubmEgJWRcbiIsCisJCSAgICAgbWF4X2F2ZXJhZ2Vfc2lnLCBtYXhfYXZlcmFnZV9zaWdfYW50ZW5uYV9pKTsKKworCS8qIENvbXBhcmUgc2lnbmFsIHN0cmVuZ3RocyBmb3IgYWxsIDMgcmVjZWl2ZXJzLiAqLworCWZvciAoaSA9IDA7IGkgPCBOVU1fUlhfQ0hBSU5TOyBpKyspIHsKKwkJaWYgKGkgIT0gbWF4X2F2ZXJhZ2Vfc2lnX2FudGVubmFfaSkgeworCQkJczMyIHJzc2lfZGVsdGEgPSAobWF4X2F2ZXJhZ2Vfc2lnIC0gYXZlcmFnZV9zaWdbaV0pOworCisJCQkvKiBJZiBzaWduYWwgaXMgdmVyeSB3ZWFrLCBjb21wYXJlZCB3aXRoCisJCQkgKiBzdHJvbmdlc3QsIG1hcmsgaXQgYXMgZGlzY29ubmVjdGVkLiAqLworCQkJaWYgKHJzc2lfZGVsdGEgPiBNQVhJTVVNX0FMTE9XRURfUEFUSExPU1MpCisJCQkJZGF0YS0+ZGlzY29ubl9hcnJheVtpXSA9IDE7CisJCQllbHNlCisJCQkJYWN0aXZlX2NoYWlucyB8PSAoMSA8PCBpKTsKKwkJCUlXTF9ERUJVR19DQUxJQihwcml2LCAiaSA9ICVkICByc3NpRGVsdGEgPSAlZCAgIgorCQkJICAgICAiZGlzY29ubl9hcnJheVtpXSA9ICVkXG4iLAorCQkJICAgICBpLCByc3NpX2RlbHRhLCBkYXRhLT5kaXNjb25uX2FycmF5W2ldKTsKKwkJfQorCX0KKworCS8qCisJICogVGhlIGFib3ZlIGFsZ29yaXRobSBzb21ldGltZXMgZmFpbHMgd2hlbiB0aGUgdWNvZGUKKwkgKiByZXBvcnRzIDAgZm9yIGFsbCBjaGFpbnMuIEl0J3Mgbm90IGNsZWFyIHdoeSB0aGF0CisJICogaGFwcGVucyB0byBzdGFydCB3aXRoLCBidXQgaXQgaXMgdGhlbiBjYXVzaW5nIHRyb3VibGUKKwkgKiBiZWNhdXNlIHRoaXMgY2FuIG1ha2UgdXMgZW5hYmxlIG1vcmUgY2hhaW5zIHRoYW4gdGhlCisJICogaGFyZHdhcmUgcmVhbGx5IGhhcy4KKwkgKgorCSAqIFRvIGJlIHNhZmUsIHNpbXBseSBtYXNrIG91dCBhbnkgY2hhaW5zIHRoYXQgd2Uga25vdworCSAqIGFyZSBub3Qgb24gdGhlIGRldmljZS4KKwkgKi8KKwlhY3RpdmVfY2hhaW5zICY9IHByaXYtPmh3X3BhcmFtcy52YWxpZF9yeF9hbnQ7CisKKwludW1fdHhfY2hhaW5zID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX1JYX0NIQUlOUzsgaSsrKSB7CisJCS8qIGxvb3BzIG9uIGFsbCB0aGUgYml0cyBvZgorCQkgKiBwcml2LT5od19zZXR0aW5nLnZhbGlkX3R4X2FudCAqLworCQl1OCBhbnRfbXNrID0gKDEgPDwgaSk7CisJCWlmICghKHByaXYtPmh3X3BhcmFtcy52YWxpZF90eF9hbnQgJiBhbnRfbXNrKSkKKwkJCWNvbnRpbnVlOworCisJCW51bV90eF9jaGFpbnMrKzsKKwkJaWYgKGRhdGEtPmRpc2Nvbm5fYXJyYXlbaV0gPT0gMCkKKwkJCS8qIHRoZXJlIGlzIGEgVHggYW50ZW5uYSBjb25uZWN0ZWQgKi8KKwkJCWJyZWFrOworCQlpZiAobnVtX3R4X2NoYWlucyA9PSBwcml2LT5od19wYXJhbXMudHhfY2hhaW5zX251bSAmJgorCQkgICAgZGF0YS0+ZGlzY29ubl9hcnJheVtpXSkgeworCQkJLyoKKwkJCSAqIElmIGFsbCBjaGFpbnMgYXJlIGRpc2Nvbm5lY3RlZAorCQkJICogY29ubmVjdCB0aGUgZmlyc3QgdmFsaWQgdHggY2hhaW4KKwkJCSAqLworCQkJZmlyc3RfY2hhaW4gPQorCQkJCWZpbmRfZmlyc3RfY2hhaW4ocHJpdi0+Y2ZnLT52YWxpZF90eF9hbnQpOworCQkJZGF0YS0+ZGlzY29ubl9hcnJheVtmaXJzdF9jaGFpbl0gPSAwOworCQkJYWN0aXZlX2NoYWlucyB8PSBCSVQoZmlyc3RfY2hhaW4pOworCQkJSVdMX0RFQlVHX0NBTElCKHByaXYsICJBbGwgVHggY2hhaW5zIGFyZSBkaXNjb25uZWN0ZWQgXAorCQkJCQlXL0EgLSBkZWNsYXJlICVkIGFzIGNvbm5lY3RlZFxuIiwKKwkJCQkJZmlyc3RfY2hhaW4pOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoYWN0aXZlX2NoYWlucyAhPSBwcml2LT5od19wYXJhbXMudmFsaWRfcnhfYW50ICYmCisJICAgIGFjdGl2ZV9jaGFpbnMgIT0gcHJpdi0+Y2hhaW5fbm9pc2VfZGF0YS5hY3RpdmVfY2hhaW5zKQorCQlJV0xfREVCVUdfQ0FMSUIocHJpdiwKKwkJCQkiRGV0ZWN0ZWQgdGhhdCBub3QgYWxsIGFudGVubmFzIGFyZSBjb25uZWN0ZWQhICIKKwkJCQkiQ29ubmVjdGVkOiAlI3gsIHZhbGlkOiAlI3guXG4iLAorCQkJCWFjdGl2ZV9jaGFpbnMsIHByaXYtPmh3X3BhcmFtcy52YWxpZF9yeF9hbnQpOworCisJLyogU2F2ZSBmb3IgdXNlIHdpdGhpbiBSWE9OLCBUWCwgU0NBTiBjb21tYW5kcywgZXRjLiAqLworCWRhdGEtPmFjdGl2ZV9jaGFpbnMgPSBhY3RpdmVfY2hhaW5zOworCUlXTF9ERUJVR19DQUxJQihwcml2LCAiYWN0aXZlX2NoYWlucyAoYml0d2lzZSkgPSAweCV4XG4iLAorCQkJYWN0aXZlX2NoYWlucyk7Cit9CisKKwogLyoKLSAqIEFjY3VtdWxhdGUgMjAgYmVhY29ucyBvZiBzaWduYWwgYW5kIG5vaXNlIHN0YXRpc3RpY3MgZm9yIGVhY2ggb2YKKyAqIEFjY3VtdWxhdGUgMTYgYmVhY29ucyBvZiBzaWduYWwgYW5kIG5vaXNlIHN0YXRpc3RpY3MgZm9yIGVhY2ggb2YKICAqICAgMyByZWNlaXZlcnMvYW50ZW5uYXMvcngtY2hhaW5zLCB0aGVuIGZpZ3VyZSBvdXQ6CiAgKiAxKSAgV2hpY2ggYW50ZW5uYXMgYXJlIGNvbm5lY3RlZC4KICAqIDIpICBEaWZmZXJlbnRpYWwgcnggZ2FpbiBzZXR0aW5ncyB0byBiYWxhbmNlIHRoZSAzIHJlY2VpdmVycy4KQEAgLTc1MCw4ICs4NjQsNiBAQAogCXUzMiBjaGFpbl9zaWdfYzsKIAl1MzIgYXZlcmFnZV9zaWdbTlVNX1JYX0NIQUlOU10gPSB7SU5JVElBTElaQVRJT05fVkFMVUV9OwogCXUzMiBhdmVyYWdlX25vaXNlW05VTV9SWF9DSEFJTlNdID0ge0lOSVRJQUxJWkFUSU9OX1ZBTFVFfTsKLQl1MzIgbWF4X2F2ZXJhZ2Vfc2lnOwotCXUxNiBtYXhfYXZlcmFnZV9zaWdfYW50ZW5uYV9pOwogCXUzMiBtaW5fYXZlcmFnZV9ub2lzZSA9IE1JTl9BVkVSQUdFX05PSVNFX01BWF9WQUxVRTsKIAl1MTYgbWluX2F2ZXJhZ2Vfbm9pc2VfYW50ZW5uYV9pID0gSU5JVElBTElaQVRJT05fVkFMVUU7CiAJdTE2IGkgPSAwOwpAQCAtNzU5LDExICs4NzEsOSBAQAogCXUxNiBzdGF0X2NobnVtID0gSU5JVElBTElaQVRJT05fVkFMVUU7CiAJdTggcnhvbl9iYW5kMjQ7CiAJdTggc3RhdF9iYW5kMjQ7Ci0JdTMyIGFjdGl2ZV9jaGFpbnMgPSAwOwotCXU4IG51bV90eF9jaGFpbnM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3Qgc3RhdGlzdGljc19yeF9ub25fcGh5ICpyeF9pbmZvOwotCXU4IGZpcnN0X2NoYWluOworCiAJLyoKIAkgKiBNVUxUSS1GSVhNRToKIAkgKiBXaGVuIHdlIHN1cHBvcnQgbXVsdGlwbGUgaW50ZXJmYWNlcyBvbiBkaWZmZXJlbnQgY2hhbm5lbHMsCkBAIC04NjksMTA4ICs5NzksMTYgQEAKIAkJcmV0dXJuOwogCiAJLyogQW5hbHl6ZSBzaWduYWwgZm9yIGRpc2Nvbm5lY3RlZCBhbnRlbm5hICovCi0JYXZlcmFnZV9zaWdbMF0gPSBkYXRhLT5jaGFpbl9zaWduYWxfYSAvCi0JCQkgcHJpdi0+Y2ZnLT5iYXNlX3BhcmFtcy0+Y2hhaW5fbm9pc2VfbnVtX2JlYWNvbnM7Ci0JYXZlcmFnZV9zaWdbMV0gPSBkYXRhLT5jaGFpbl9zaWduYWxfYiAvCi0JCQkgcHJpdi0+Y2ZnLT5iYXNlX3BhcmFtcy0+Y2hhaW5fbm9pc2VfbnVtX2JlYWNvbnM7Ci0JYXZlcmFnZV9zaWdbMl0gPSBkYXRhLT5jaGFpbl9zaWduYWxfYyAvCi0JCQkgcHJpdi0+Y2ZnLT5iYXNlX3BhcmFtcy0+Y2hhaW5fbm9pc2VfbnVtX2JlYWNvbnM7Ci0KLQlpZiAoYXZlcmFnZV9zaWdbMF0gPj0gYXZlcmFnZV9zaWdbMV0pIHsKLQkJbWF4X2F2ZXJhZ2Vfc2lnID0gYXZlcmFnZV9zaWdbMF07Ci0JCW1heF9hdmVyYWdlX3NpZ19hbnRlbm5hX2kgPSAwOwotCQlhY3RpdmVfY2hhaW5zID0gKDEgPDwgbWF4X2F2ZXJhZ2Vfc2lnX2FudGVubmFfaSk7Ci0JfSBlbHNlIHsKLQkJbWF4X2F2ZXJhZ2Vfc2lnID0gYXZlcmFnZV9zaWdbMV07Ci0JCW1heF9hdmVyYWdlX3NpZ19hbnRlbm5hX2kgPSAxOwotCQlhY3RpdmVfY2hhaW5zID0gKDEgPDwgbWF4X2F2ZXJhZ2Vfc2lnX2FudGVubmFfaSk7Ci0JfQotCi0JaWYgKGF2ZXJhZ2Vfc2lnWzJdID49IG1heF9hdmVyYWdlX3NpZykgewotCQltYXhfYXZlcmFnZV9zaWcgPSBhdmVyYWdlX3NpZ1syXTsKLQkJbWF4X2F2ZXJhZ2Vfc2lnX2FudGVubmFfaSA9IDI7Ci0JCWFjdGl2ZV9jaGFpbnMgPSAoMSA8PCBtYXhfYXZlcmFnZV9zaWdfYW50ZW5uYV9pKTsKLQl9Ci0KLQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgImF2ZXJhZ2Vfc2lnOiBhICVkIGIgJWQgYyAlZFxuIiwKLQkJICAgICBhdmVyYWdlX3NpZ1swXSwgYXZlcmFnZV9zaWdbMV0sIGF2ZXJhZ2Vfc2lnWzJdKTsKLQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgIm1heF9hdmVyYWdlX3NpZyA9ICVkLCBhbnRlbm5hICVkXG4iLAotCQkgICAgIG1heF9hdmVyYWdlX3NpZywgbWF4X2F2ZXJhZ2Vfc2lnX2FudGVubmFfaSk7Ci0KLQkvKiBDb21wYXJlIHNpZ25hbCBzdHJlbmd0aHMgZm9yIGFsbCAzIHJlY2VpdmVycy4gKi8KLQlmb3IgKGkgPSAwOyBpIDwgTlVNX1JYX0NIQUlOUzsgaSsrKSB7Ci0JCWlmIChpICE9IG1heF9hdmVyYWdlX3NpZ19hbnRlbm5hX2kpIHsKLQkJCXMzMiByc3NpX2RlbHRhID0gKG1heF9hdmVyYWdlX3NpZyAtIGF2ZXJhZ2Vfc2lnW2ldKTsKLQotCQkJLyogSWYgc2lnbmFsIGlzIHZlcnkgd2VhaywgY29tcGFyZWQgd2l0aAotCQkJICogc3Ryb25nZXN0LCBtYXJrIGl0IGFzIGRpc2Nvbm5lY3RlZC4gKi8KLQkJCWlmIChyc3NpX2RlbHRhID4gTUFYSU1VTV9BTExPV0VEX1BBVEhMT1NTKQotCQkJCWRhdGEtPmRpc2Nvbm5fYXJyYXlbaV0gPSAxOwotCQkJZWxzZQotCQkJCWFjdGl2ZV9jaGFpbnMgfD0gKDEgPDwgaSk7Ci0JCQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgImkgPSAlZCAgcnNzaURlbHRhID0gJWQgICIKLQkJCSAgICAgImRpc2Nvbm5fYXJyYXlbaV0gPSAlZFxuIiwKLQkJCSAgICAgaSwgcnNzaV9kZWx0YSwgZGF0YS0+ZGlzY29ubl9hcnJheVtpXSk7Ci0JCX0KLQl9Ci0KLQkvKgotCSAqIFRoZSBhYm92ZSBhbGdvcml0aG0gc29tZXRpbWVzIGZhaWxzIHdoZW4gdGhlIHVjb2RlCi0JICogcmVwb3J0cyAwIGZvciBhbGwgY2hhaW5zLiBJdCdzIG5vdCBjbGVhciB3aHkgdGhhdAotCSAqIGhhcHBlbnMgdG8gc3RhcnQgd2l0aCwgYnV0IGl0IGlzIHRoZW4gY2F1c2luZyB0cm91YmxlCi0JICogYmVjYXVzZSB0aGlzIGNhbiBtYWtlIHVzIGVuYWJsZSBtb3JlIGNoYWlucyB0aGFuIHRoZQotCSAqIGhhcmR3YXJlIHJlYWxseSBoYXMuCi0JICoKLQkgKiBUbyBiZSBzYWZlLCBzaW1wbHkgbWFzayBvdXQgYW55IGNoYWlucyB0aGF0IHdlIGtub3cKLQkgKiBhcmUgbm90IG9uIHRoZSBkZXZpY2UuCi0JICovCiAJaWYgKHByaXYtPmNmZy0+YnRfcGFyYW1zICYmCi0JICAgIHByaXYtPmNmZy0+YnRfcGFyYW1zLT5hZHZhbmNlZF9idF9jb2V4aXN0ICYmCi0JICAgIHByaXYtPmJ0X2Z1bGxfY29uY3VycmVudCkgewotCQkvKiBvcGVyYXRlZCBhcyAxeDEgaW4gZnVsbCBjb25jdXJyZW5jeSBtb2RlICovCi0JCWFjdGl2ZV9jaGFpbnMgJj0gZmlyc3RfYW50ZW5uYShwcml2LT5od19wYXJhbXMudmFsaWRfcnhfYW50KTsKKwkgICAgcHJpdi0+Y2ZnLT5idF9wYXJhbXMtPmFkdmFuY2VkX2J0X2NvZXhpc3QpIHsKKwkJLyogRGlzYWJsZSBkaXNjb25uZWN0ZWQgYW50ZW5uYSBhbGdvcml0aG0gZm9yIGFkdmFuY2VkCisJCSAgIGJ0IGNvZXgsIGFzc3VtaW5nIHZhbGlkIGFudGVubmFzIGFyZSBjb25uZWN0ZWQgKi8KKwkJZGF0YS0+YWN0aXZlX2NoYWlucyA9IHByaXYtPmh3X3BhcmFtcy52YWxpZF9yeF9hbnQ7CisJCWZvciAoaSA9IDA7IGkgPCBOVU1fUlhfQ0hBSU5TOyBpKyspCisJCQlpZiAoIShkYXRhLT5hY3RpdmVfY2hhaW5zICYgKDE8PGkpKSkKKwkJCQlkYXRhLT5kaXNjb25uX2FycmF5W2ldID0gMTsKIAl9IGVsc2UKLQkJYWN0aXZlX2NoYWlucyAmPSBwcml2LT5od19wYXJhbXMudmFsaWRfcnhfYW50OwotCi0JbnVtX3R4X2NoYWlucyA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IE5VTV9SWF9DSEFJTlM7IGkrKykgewotCQkvKiBsb29wcyBvbiBhbGwgdGhlIGJpdHMgb2YKLQkJICogcHJpdi0+aHdfc2V0dGluZy52YWxpZF90eF9hbnQgKi8KLQkJdTggYW50X21zayA9ICgxIDw8IGkpOwotCQlpZiAoIShwcml2LT5od19wYXJhbXMudmFsaWRfdHhfYW50ICYgYW50X21zaykpCi0JCQljb250aW51ZTsKLQotCQludW1fdHhfY2hhaW5zKys7Ci0JCWlmIChkYXRhLT5kaXNjb25uX2FycmF5W2ldID09IDApCi0JCQkvKiB0aGVyZSBpcyBhIFR4IGFudGVubmEgY29ubmVjdGVkICovCi0JCQlicmVhazsKLQkJaWYgKG51bV90eF9jaGFpbnMgPT0gcHJpdi0+aHdfcGFyYW1zLnR4X2NoYWluc19udW0gJiYKLQkJICAgIGRhdGEtPmRpc2Nvbm5fYXJyYXlbaV0pIHsKLQkJCS8qCi0JCQkgKiBJZiBhbGwgY2hhaW5zIGFyZSBkaXNjb25uZWN0ZWQKLQkJCSAqIGNvbm5lY3QgdGhlIGZpcnN0IHZhbGlkIHR4IGNoYWluCi0JCQkgKi8KLQkJCWZpcnN0X2NoYWluID0KLQkJCQlmaW5kX2ZpcnN0X2NoYWluKHByaXYtPmNmZy0+dmFsaWRfdHhfYW50KTsKLQkJCWRhdGEtPmRpc2Nvbm5fYXJyYXlbZmlyc3RfY2hhaW5dID0gMDsKLQkJCWFjdGl2ZV9jaGFpbnMgfD0gQklUKGZpcnN0X2NoYWluKTsKLQkJCUlXTF9ERUJVR19DQUxJQihwcml2LCAiQWxsIFR4IGNoYWlucyBhcmUgZGlzY29ubmVjdGVkIFcvQSAtIGRlY2xhcmUgJWQgYXMgY29ubmVjdGVkXG4iLAotCQkJCQlmaXJzdF9jaGFpbik7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCWlmIChhY3RpdmVfY2hhaW5zICE9IHByaXYtPmh3X3BhcmFtcy52YWxpZF9yeF9hbnQgJiYKLQkgICAgYWN0aXZlX2NoYWlucyAhPSBwcml2LT5jaGFpbl9ub2lzZV9kYXRhLmFjdGl2ZV9jaGFpbnMpCi0JCUlXTF9ERUJVR19DQUxJQihwcml2LAotCQkJCSJEZXRlY3RlZCB0aGF0IG5vdCBhbGwgYW50ZW5uYXMgYXJlIGNvbm5lY3RlZCEgIgotCQkJCSJDb25uZWN0ZWQ6ICUjeCwgdmFsaWQ6ICUjeC5cbiIsCi0JCQkJYWN0aXZlX2NoYWlucywgcHJpdi0+aHdfcGFyYW1zLnZhbGlkX3J4X2FudCk7Ci0KLQkvKiBTYXZlIGZvciB1c2Ugd2l0aGluIFJYT04sIFRYLCBTQ0FOIGNvbW1hbmRzLCBldGMuICovCi0JcHJpdi0+Y2hhaW5fbm9pc2VfZGF0YS5hY3RpdmVfY2hhaW5zID0gYWN0aXZlX2NoYWluczsKLQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgImFjdGl2ZV9jaGFpbnMgKGJpdHdpc2UpID0gMHgleFxuIiwKLQkJCWFjdGl2ZV9jaGFpbnMpOworCQlpd2xfZmluZF9kaXNjb25uX2FudGVubmEocHJpdiwgYXZlcmFnZV9zaWcsIGRhdGEpOwogCiAJLyogQW5hbHl6ZSBub2lzZSBmb3IgcnggYmFsYW5jZSAqLwogCWF2ZXJhZ2Vfbm9pc2VbMF0gPSBkYXRhLT5jaGFpbl9ub2lzZV9hIC8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tZGVidWdmcy5jCmluZGV4IGEzNThkNDMuLmE2ZGJkODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1kZWJ1Z2ZzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLWRlYnVnZnMuYwpAQCAtODU2LDYgKzg1Niw5IEBACiAJaWYgKCFpd2xfaXNfYWxpdmUocHJpdikpCiAJCXJldHVybiAtRUFHQUlOOwogCisJaWYgKCFwcml2LT5idF9lbmFibGVfZmxhZykKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAkvKiBtYWtlIHJlcXVlc3QgdG8gdUNvZGUgdG8gcmV0cmlldmUgc3RhdGlzdGljcyBpbmZvcm1hdGlvbiAqLwogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAlyZXQgPSBpd2xfc2VuZF9zdGF0aXN0aWNzX3JlcXVlc3QocHJpdiwgQ01EX1NZTkMsIGZhbHNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1lZXByb20uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1lZXByb20uYwppbmRleCA5ZWVlZGExLi45NzkwNmRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tZWVwcm9tLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLWVlcHJvbS5jCkBAIC03NSwxMDkgKzc1LDYgQEAKICNpbmNsdWRlICJpd2wtYWduLmgiCiAjaW5jbHVkZSAiaXdsLWlvLmgiCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKiBFRVBST00gQkFORFMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIFRoZSBpd2xfZWVwcm9tX2JhbmQgZGVmaW5pdGlvbnMgYmVsb3cgcHJvdmlkZSB0aGUgbWFwcGluZyBmcm9tIHRoZQotICogRUVQUk9NIGNvbnRlbnRzIHRvIHRoZSBzcGVjaWZpYyBjaGFubmVsIG51bWJlciBzdXBwb3J0ZWQgZm9yIGVhY2gKLSAqIGJhbmQuCi0gKgotICogRm9yIGV4YW1wbGUsIGl3bF9wcml2LT5lZXByb20uYmFuZF8zX2NoYW5uZWxzWzRdIGZyb20gdGhlIGJhbmRfMwotICogZGVmaW5pdGlvbiBiZWxvdyBtYXBzIHRvIHBoeXNpY2FsIGNoYW5uZWwgNDIgaW4gdGhlIDUuMkdIeiBzcGVjdHJ1bS4KLSAqIFRoZSBzcGVjaWZpYyBnZW9ncmFwaHkgYW5kIGNhbGlicmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGF0IGNoYW5uZWwKLSAqIGlzIGNvbnRhaW5lZCBpbiB0aGUgZWVwcm9tIG1hcCBpdHNlbGYuCi0gKgotICogRHVyaW5nIGluaXQsIHdlIGNvcHkgdGhlIGVlcHJvbSBpbmZvcm1hdGlvbiBhbmQgY2hhbm5lbCBtYXAKLSAqIGluZm9ybWF0aW9uIGludG8gcHJpdi0+Y2hhbm5lbF9pbmZvXzI0LzUyIGFuZCBwcml2LT5jaGFubmVsX21hcF8yNC81MgotICoKLSAqIGNoYW5uZWxfbWFwXzI0LzUyIHByb3ZpZGVzIHRoZSBpbmRleCBpbiB0aGUgY2hhbm5lbF9pbmZvIGFycmF5IGZvciBhCi0gKiBnaXZlbiBjaGFubmVsLiAgV2UgaGF2ZSB0byBoYXZlIHR3byBzZXBhcmF0ZSBtYXBzIGFzIHRoZXJlIGlzIGNoYW5uZWwKLSAqIG92ZXJsYXAgd2l0aCB0aGUgMi40R0h6IGFuZCA1LjJHSHogc3BlY3RydW0gYXMgc2VlbiBpbiBiYW5kXzEgYW5kCi0gKiBiYW5kXzIKLSAqCi0gKiBBIHZhbHVlIG9mIDB4ZmYgc3RvcmVkIGluIHRoZSBjaGFubmVsX21hcCBpbmRpY2F0ZXMgdGhhdCB0aGUgY2hhbm5lbAotICogaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgaGFyZHdhcmUgYXQgYWxsLgotICoKLSAqIEEgdmFsdWUgb2YgMHhmZSBpbiB0aGUgY2hhbm5lbF9tYXAgaW5kaWNhdGVzIHRoYXQgdGhlIGNoYW5uZWwgaXMgbm90Ci0gKiB2YWxpZCBmb3IgVHggd2l0aCB0aGUgY3VycmVudCBoYXJkd2FyZS4gIFRoaXMgbWVhbnMgdGhhdAotICogd2hpbGUgdGhlIHN5c3RlbSBjYW4gdHVuZSBhbmQgcmVjZWl2ZSBvbiBhIGdpdmVuIGNoYW5uZWwsIGl0IG1heSBub3QKLSAqIGJlIGFibGUgdG8gYXNzb2NpYXRlIG9yIHRyYW5zbWl0IGFueSBmcmFtZXMgb24gdGhhdAotICogY2hhbm5lbC4gIFRoZXJlIGlzIG5vIGNvcnJlc3BvbmRpbmcgY2hhbm5lbCBpbmZvcm1hdGlvbiBmb3IgdGhhdAotICogZW50cnkuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoqCi0gKiBzdHJ1Y3QgaXdsX3R4cHdyX3NlY3Rpb246IGVlcHJvbSBzZWN0aW9uIGluZm9ybWF0aW9uCi0gKiBAb2Zmc2V0OiBpbmRpcmVjdCBhZGRyZXNzIGludG8gZWVwcm9tIGltYWdlCi0gKiBAY291bnQ6IG51bWJlciBvZiAic3RydWN0IGl3bF9lZXByb21fZW5oYW5jZWRfdHhwd3IiIGluIHRoaXMgc2VjdGlvbgotICogQGJhbmQ6IGJhbmQgdHlwZSBmb3IgdGhlIHNlY3Rpb24KLSAqIEBpc19jb21tb24gLSB0cnVlOiBjb21tb24gc2VjdGlvbiwgZmFsc2U6IGNoYW5uZWwgc2VjdGlvbgotICogQGlzX2NjayAtIHRydWU6IGNjayBzZWN0aW9uLCBmYWxzZTogbm90IGNjayBzZWN0aW9uCi0gKiBAaXNfaHRfNDAgLSB0cnVlOiBhbGwgY2hhbm5lbCBpbiB0aGUgc2VjdGlvbiBhcmUgSFQ0MCBjaGFubmVsLAotICoJICAgICAgIGZhbHNlOiBsZWdhY3kgb3IgSFQgMjAgTUh6Ci0gKgkgICAgICAgaWdub3JlIGlmIGl0IGlzIGNvbW1vbiBzZWN0aW9uCi0gKiBAaXdsX2VlcHJvbV9zZWN0aW9uX2NoYW5uZWw6IGNoYW5uZWwgYXJyYXkgaW4gdGhlIHNlY3Rpb24sCi0gKgkgICAgICAgaWdub3JlIGlmIGNvbW1vbiBzZWN0aW9uCi0gKi8KLXN0cnVjdCBpd2xfdHhwd3Jfc2VjdGlvbiB7Ci0JdTMyIG9mZnNldDsKLQl1OCBjb3VudDsKLQllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQ7Ci0JYm9vbCBpc19jb21tb247Ci0JYm9vbCBpc19jY2s7Ci0JYm9vbCBpc19odDQwOwotCXU4IGl3bF9lZXByb21fc2VjdGlvbl9jaGFubmVsW0VFUFJPTV9NQVhfVFhQT1dFUl9TRUNUSU9OX0VMRU1FTlRTXTsKLX07Ci0KLS8qKgotICogc2VjdGlvbiAxIC0gMyBhcmUgcmVndWxhdG9yeSB0eCBwb3dlciBhcHBseSB0byBhbGwgY2hhbm5lbHMgYmFzZWQgb24KLSAqICAgIG1vZHVsYXRpb246IENDSywgT0ZETQotICogICAgQmFuZDogMi40R0h6LCA1LjJHSHoKLSAqIHNlY3Rpb24gNCAtIDEwIGFyZSByZWd1bGF0b3J5IHR4IHBvd2VyIGFwcGx5IHRvIHNwZWNpZmllZCBjaGFubmVscwotICogICAgRm9yIGV4YW1wbGU6Ci0gKgkxTCAtIENoYW5uZWwgMSBMZWdhY3kKLSAqCTFIVCAtIENoYW5uZWwgMSBIVAotICoJKDEsKzEpIC0gQ2hhbm5lbCAxIEhUNDAgIl9hYm92ZV8iCi0gKgotICogU2VjdGlvbiAxOiBhbGwgQ0NLIGNoYW5uZWxzCi0gKiBTZWN0aW9uIDI6IGFsbCAyLjQgR0h6IE9GRE0gKExlZ2FjeSwgSFQgYW5kIEhUNDApIGNoYW5uZWxzCi0gKiBTZWN0aW9uIDM6IGFsbCA1LjIgR0h6IE9GRE0gKExlZ2FjeSwgSFQgYW5kIEhUNDApIGNoYW5uZWxzCi0gKiBTZWN0aW9uIDQ6IDIuNCBHSHogMjBNSHogY2hhbm5lbHM6IDFMLCAxSFQsIDJMLCAySFQsIDEwTCwgMTBIVCwgMTFMLCAxMUhUCi0gKiBTZWN0aW9uIDU6IDIuNCBHSHogNDBNSHogY2hhbm5lbHM6ICgxLCsxKSAoMiwrMSkgKDYsKzEpICg3LCsxKSAoOSwrMSkKLSAqIFNlY3Rpb24gNjogNS4yIEdIeiAyME1IeiBjaGFubmVsczogMzZMLCA2NEwsIDEwMEwsIDM2SFQsIDY0SFQsIDEwMEhUCi0gKiBTZWN0aW9uIDc6IDUuMiBHSHogNDBNSHogY2hhbm5lbHM6ICgzNiwrMSkgKDYwLCsxKSAoMTAwLCsxKQotICogU2VjdGlvbiA4OiAyLjQgR0h6IGNoYW5uZWw6IDEzTCwgMTNIVAotICogU2VjdGlvbiA5OiAyLjQgR0h6IGNoYW5uZWw6IDE0MEwsIDE0MEhUCi0gKiBTZWN0aW9uIDEwOiAyLjQgR0h6IDQwTUh6IGNoYW5uZWxzOiAoMTMyLCsxKSAgKDQ0LCsxKQotICoKLSAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBpd2xfdHhwd3Jfc2VjdGlvbiBlbmhpbmZvW10gPSB7Ci0JeyBFRVBST01fTEJfQ0NLXzIwX0NPTU1PTiwgMSwgSUVFRTgwMjExX0JBTkRfMkdIWiwgdHJ1ZSwgdHJ1ZSwgZmFsc2UgfSwKLQl7IEVFUFJPTV9MQl9PRkRNX0NPTU1PTiwgMywgSUVFRTgwMjExX0JBTkRfMkdIWiwgdHJ1ZSwgZmFsc2UsIGZhbHNlIH0sCi0JeyBFRVBST01fSEJfT0ZETV9DT01NT04sIDMsIElFRUU4MDIxMV9CQU5EXzVHSFosIHRydWUsIGZhbHNlLCBmYWxzZSB9LAotCXsgRUVQUk9NX0xCX09GRE1fMjBfQkFORCwgOCwgSUVFRTgwMjExX0JBTkRfMkdIWiwKLQkJZmFsc2UsIGZhbHNlLCBmYWxzZSwKLQkJezEsIDEsIDIsIDIsIDEwLCAxMCwgMTEsIDExIH0gfSwKLQl7IEVFUFJPTV9MQl9PRkRNX0hUNDBfQkFORCwgNSwgSUVFRTgwMjExX0JBTkRfMkdIWiwKLQkJZmFsc2UsIGZhbHNlLCB0cnVlLAotCQl7IDEsIDIsIDYsIDcsIDkgfSB9LAotCXsgRUVQUk9NX0hCX09GRE1fMjBfQkFORCwgNiwgSUVFRTgwMjExX0JBTkRfNUdIWiwKLQkJZmFsc2UsIGZhbHNlLCBmYWxzZSwKLQkJeyAzNiwgNjQsIDEwMCwgMzYsIDY0LCAxMDAgfSB9LAotCXsgRUVQUk9NX0hCX09GRE1fSFQ0MF9CQU5ELCAzLCBJRUVFODAyMTFfQkFORF81R0haLAotCQlmYWxzZSwgZmFsc2UsIHRydWUsCi0JCXsgMzYsIDYwLCAxMDAgfSB9LAotCXsgRUVQUk9NX0xCX09GRE1fMjBfQ0hBTk5FTF8xMywgMiwgSUVFRTgwMjExX0JBTkRfMkdIWiwKLQkJZmFsc2UsIGZhbHNlLCBmYWxzZSwKLQkJeyAxMywgMTMgfSB9LAotCXsgRUVQUk9NX0hCX09GRE1fMjBfQ0hBTk5FTF8xNDAsIDIsIElFRUU4MDIxMV9CQU5EXzVHSFosCi0JCWZhbHNlLCBmYWxzZSwgZmFsc2UsCi0JCXsgMTQwLCAxNDAgfSB9LAotCXsgRUVQUk9NX0hCX09GRE1fSFQ0MF9CQU5EXzEsIDIsIElFRUU4MDIxMV9CQU5EXzVHSFosCi0JCWZhbHNlLCBmYWxzZSwgdHJ1ZSwKLQkJeyAxMzIsIDQ0IH0gfSwKLX07Ci0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBFRVBST00gcmVsYXRlZCBmdW5jdGlvbnMKQEAgLTI0OCw2ICsxNDUsNDcgQEAKIAogfQogCitpbnQgaXdsX2VlcHJvbV9jaGVja19za3Uoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCXUxNiBlZXByb21fc2t1OworCXUxNiByYWRpb19jZmc7CisKKwllZXByb21fc2t1ID0gaXdsX2VlcHJvbV9xdWVyeTE2KHByaXYsIEVFUFJPTV9TS1VfQ0FQKTsKKworCXByaXYtPmNmZy0+c2t1ID0gKChlZXByb21fc2t1ICYgRUVQUk9NX1NLVV9DQVBfQkFORF9TRUxFQ1RJT04pID4+CisJCQlFRVBST01fU0tVX0NBUF9CQU5EX1BPUyk7CisJaWYgKGVlcHJvbV9za3UgJiBFRVBST01fU0tVX0NBUF8xMU5fRU5BQkxFKQorCQlwcml2LT5jZmctPnNrdSB8PSBJV0xfU0tVX047CisKKwlpZiAoIXByaXYtPmNmZy0+c2t1KSB7CisJCUlXTF9FUlIocHJpdiwgIkludmFsaWQgZGV2aWNlIHNrdVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCUlXTF9JTkZPKHByaXYsICJEZXZpY2UgU0tVOiAwWCV4XG4iLCBwcml2LT5jZmctPnNrdSk7CisKKwlpZiAoIXByaXYtPmNmZy0+dmFsaWRfdHhfYW50ICYmICFwcml2LT5jZmctPnZhbGlkX3J4X2FudCkgeworCQkvKiBub3QgdXNpbmcgLmNmZyBvdmVyd3JpdGUgKi8KKwkJcmFkaW9fY2ZnID0gaXdsX2VlcHJvbV9xdWVyeTE2KHByaXYsIEVFUFJPTV9SQURJT19DT05GSUcpOworCQlwcml2LT5jZmctPnZhbGlkX3R4X2FudCA9IEVFUFJPTV9SRl9DRkdfVFhfQU5UX01TSyhyYWRpb19jZmcpOworCQlwcml2LT5jZmctPnZhbGlkX3J4X2FudCA9IEVFUFJPTV9SRl9DRkdfVFhfQU5UX01TSyhyYWRpb19jZmcpOworCQlpZiAoIXByaXYtPmNmZy0+dmFsaWRfdHhfYW50IHx8ICFwcml2LT5jZmctPnZhbGlkX3J4X2FudCkgeworCQkJSVdMX0VSUihwcml2LCAiSW52YWxpZCBjaGFpbiAoMFgleCwgMFgleClcbiIsCisJCQkJcHJpdi0+Y2ZnLT52YWxpZF90eF9hbnQsCisJCQkJcHJpdi0+Y2ZnLT52YWxpZF9yeF9hbnQpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJSVdMX0lORk8ocHJpdiwgIlZhbGlkIFR4IGFudDogMFgleCwgVmFsaWQgUnggYW50OiAwWCV4XG4iLAorCQkJIHByaXYtPmNmZy0+dmFsaWRfdHhfYW50LCBwcml2LT5jZmctPnZhbGlkX3J4X2FudCk7CisJfQorCS8qCisJICogZm9yIHNvbWUgc3BlY2lhbCBjYXNlcywKKwkgKiBFRVBST00gZGlkIG5vdCByZWZsZWN0IHRoZSBjb3JyZWN0IGFudGVubmEgc2V0dGluZworCSAqIHNvIG92ZXJ3cml0ZSB0aGUgdmFsaWQgdHgvcnggYW50ZW5uYSBmcm9tIC5jZmcKKwkgKi8KKwlyZXR1cm4gMDsKK30KKwogdm9pZCBpd2xfZWVwcm9tX2dldF9tYWMoY29uc3Qgc3RydWN0IGl3bF9wcml2ICpwcml2LCB1OCAqbWFjKQogewogCWNvbnN0IHU4ICphZGRyID0gcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+ZWVwcm9tX29wcy5xdWVyeV9hZGRyKHByaXYsCkBAIC0yNjUsMTUgKzIwMyw2IEBACiB7CiAJczggbWF4X3R4cG93ZXJfYXZnID0gMDsgLyogKGRCbSkgKi8KIAotCUlXTF9ERUJVR19JTkZPKHByaXYsICIlZCAtICIKLQkJCSJjaGFpbl9hOiAlZCBkQiBjaGFpbl9iOiAlZCBkQiAiCi0JCQkiY2hhaW5fYzogJWQgZEIgbWltbzI6ICVkIGRCIG1pbW8zOiAlZCBkQlxuIiwKLQkJCWVsZW1lbnQsCi0JCQllbmhhbmNlZF90eHBvd2VyW2VsZW1lbnRdLmNoYWluX2FfbWF4ID4+IDEsCi0JCQllbmhhbmNlZF90eHBvd2VyW2VsZW1lbnRdLmNoYWluX2JfbWF4ID4+IDEsCi0JCQllbmhhbmNlZF90eHBvd2VyW2VsZW1lbnRdLmNoYWluX2NfbWF4ID4+IDEsCi0JCQllbmhhbmNlZF90eHBvd2VyW2VsZW1lbnRdLm1pbW8yX21heCA+PiAxLAotCQkJZW5oYW5jZWRfdHhwb3dlcltlbGVtZW50XS5taW1vM19tYXggPj4gMSk7CiAJLyogVGFrZSB0aGUgaGlnaGVzdCB0eCBwb3dlciBmcm9tIGFueSB2YWxpZCBjaGFpbnMgKi8KIAlpZiAoKHByaXYtPmNmZy0+dmFsaWRfdHhfYW50ICYgQU5UX0EpICYmCiAJICAgIChlbmhhbmNlZF90eHBvd2VyW2VsZW1lbnRdLmNoYWluX2FfbWF4ID4gbWF4X3R4cG93ZXJfYXZnKSkKQEAgLTMwMywxNTcgKzIzMiw2IEBACiAJcmV0dXJuIChtYXhfdHhwb3dlcl9hdmcgJiAweDAxKSArIChtYXhfdHhwb3dlcl9hdmcgPj4gMSk7CiB9CiAKLS8qKgotICogaXdsX3VwZGF0ZV9jb21tb25fdHhwb3dlcjogdXBkYXRlIGNoYW5uZWwgdHggcG93ZXIKLSAqICAgICB1cGRhdGUgdHggcG93ZXIgcGVyIGJhbmQgYmFzZWQgb24gRUVQUk9NIGVuaGFuY2VkIHR4IHBvd2VyIGluZm8uCi0gKi8KLXN0YXRpYyBzOCBpd2xfdXBkYXRlX2NvbW1vbl90eHBvd2VyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJc3RydWN0IGl3bF9lZXByb21fZW5oYW5jZWRfdHhwd3IgKmVuaGFuY2VkX3R4cG93ZXIsCi0JCWludCBzZWN0aW9uLCBpbnQgZWxlbWVudCwgczggKm1heF90eHBvd2VyX2luX2hhbGZfZGJtKQotewotCXN0cnVjdCBpd2xfY2hhbm5lbF9pbmZvICpjaF9pbmZvOwotCWludCBjaDsKLQlib29sIGlzX2h0NDAgPSBmYWxzZTsKLQlzOCBtYXhfdHhwb3dlcl9hdmc7IC8qIChkQm0pICovCi0KLQkvKiBpdCBpcyBjb21tb24gc2VjdGlvbiwgY29udGFpbiBhbGwgdHlwZSAoTGVnYWN5LCBIVCBhbmQgSFQ0MCkKLQkgKiBiYXNlZCBvbiB0aGUgZWxlbWVudCBpbiB0aGUgc2VjdGlvbiB0byBkZXRlcm1pbmUKLQkgKiBpcyBpdCBIVCA0MCBvciBub3QKLQkgKi8KLQlpZiAoZWxlbWVudCA9PSBFRVBST01fVFhQT1dFUl9DT01NT05fSFQ0MF9JTkRFWCkKLQkJaXNfaHQ0MCA9IHRydWU7Ci0JbWF4X3R4cG93ZXJfYXZnID0KLQkJaXdsX2dldF9tYXhfdHhwb3dlcl9hdmcocHJpdiwgZW5oYW5jZWRfdHhwb3dlciwKLQkJCQkJZWxlbWVudCwgbWF4X3R4cG93ZXJfaW5faGFsZl9kYm0pOwotCi0JY2hfaW5mbyA9IHByaXYtPmNoYW5uZWxfaW5mbzsKLQotCWZvciAoY2ggPSAwOyBjaCA8IHByaXYtPmNoYW5uZWxfY291bnQ7IGNoKyspIHsKLQkJLyogZmluZCBtYXRjaGluZyBiYW5kIGFuZCB1cGRhdGUgdHggcG93ZXIgaWYgbmVlZGVkICovCi0JCWlmICgoY2hfaW5mby0+YmFuZCA9PSBlbmhpbmZvW3NlY3Rpb25dLmJhbmQpICYmCi0JCSAgICAoY2hfaW5mby0+bWF4X3Bvd2VyX2F2ZyA8IG1heF90eHBvd2VyX2F2ZykgJiYKLQkJICAgICghaXNfaHQ0MCkpIHsKLQkJCS8qIFVwZGF0ZSByZWd1bGF0b3J5LWJhc2VkIHJ1bi10aW1lIGRhdGEgKi8KLQkJCWNoX2luZm8tPm1heF9wb3dlcl9hdmcgPSBjaF9pbmZvLT5jdXJyX3R4cG93ID0KLQkJCQltYXhfdHhwb3dlcl9hdmc7Ci0JCQljaF9pbmZvLT5zY2FuX3Bvd2VyID0gbWF4X3R4cG93ZXJfYXZnOwotCQl9Ci0JCWlmICgoY2hfaW5mby0+YmFuZCA9PSBlbmhpbmZvW3NlY3Rpb25dLmJhbmQpICYmIGlzX2h0NDAgJiYKLQkJICAgIChjaF9pbmZvLT5odDQwX21heF9wb3dlcl9hdmcgPCBtYXhfdHhwb3dlcl9hdmcpKSB7Ci0JCQkvKiBVcGRhdGUgcmVndWxhdG9yeS1iYXNlZCBydW4tdGltZSBkYXRhICovCi0JCQljaF9pbmZvLT5odDQwX21heF9wb3dlcl9hdmcgPSBtYXhfdHhwb3dlcl9hdmc7Ci0JCX0KLQkJY2hfaW5mbysrOwotCX0KLQlyZXR1cm4gbWF4X3R4cG93ZXJfYXZnOwotfQotCi0vKioKLSAqIGl3bF91cGRhdGVfY2hhbm5lbF90eHBvd2VyOiB1cGRhdGUgY2hhbm5lbCB0eCBwb3dlcgotICogICAgICB1cGRhdGUgY2hhbm5lbCB0eCBwb3dlciBiYXNlZCBvbiBFRVBST00gZW5oYW5jZWQgdHggcG93ZXIgaW5mby4KLSAqLwotc3RhdGljIHM4IGl3bF91cGRhdGVfY2hhbm5lbF90eHBvd2VyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJc3RydWN0IGl3bF9lZXByb21fZW5oYW5jZWRfdHhwd3IgKmVuaGFuY2VkX3R4cG93ZXIsCi0JCWludCBzZWN0aW9uLCBpbnQgZWxlbWVudCwgczggKm1heF90eHBvd2VyX2luX2hhbGZfZGJtKQotewotCXN0cnVjdCBpd2xfY2hhbm5lbF9pbmZvICpjaF9pbmZvOwotCWludCBjaDsKLQl1OCBjaGFubmVsOwotCXM4IG1heF90eHBvd2VyX2F2ZzsgLyogKGRCbSkgKi8KLQotCWNoYW5uZWwgPSBlbmhpbmZvW3NlY3Rpb25dLml3bF9lZXByb21fc2VjdGlvbl9jaGFubmVsW2VsZW1lbnRdOwotCW1heF90eHBvd2VyX2F2ZyA9Ci0JCWl3bF9nZXRfbWF4X3R4cG93ZXJfYXZnKHByaXYsIGVuaGFuY2VkX3R4cG93ZXIsCi0JCQkJCWVsZW1lbnQsIG1heF90eHBvd2VyX2luX2hhbGZfZGJtKTsKLQotCWNoX2luZm8gPSBwcml2LT5jaGFubmVsX2luZm87Ci0JZm9yIChjaCA9IDA7IGNoIDwgcHJpdi0+Y2hhbm5lbF9jb3VudDsgY2grKykgewotCQkvKiBmaW5kIG1hdGNoaW5nIGNoYW5uZWwgYW5kIHVwZGF0ZSB0eCBwb3dlciBpZiBuZWVkZWQgKi8KLQkJaWYgKGNoX2luZm8tPmNoYW5uZWwgPT0gY2hhbm5lbCkgewotCQkJaWYgKChjaF9pbmZvLT5tYXhfcG93ZXJfYXZnIDwgbWF4X3R4cG93ZXJfYXZnKSAmJgotCQkJICAgICghZW5oaW5mb1tzZWN0aW9uXS5pc19odDQwKSkgewotCQkJCS8qIFVwZGF0ZSByZWd1bGF0b3J5LWJhc2VkIHJ1bi10aW1lIGRhdGEgKi8KLQkJCQljaF9pbmZvLT5tYXhfcG93ZXJfYXZnID0gbWF4X3R4cG93ZXJfYXZnOwotCQkJCWNoX2luZm8tPmN1cnJfdHhwb3cgPSBtYXhfdHhwb3dlcl9hdmc7Ci0JCQkJY2hfaW5mby0+c2Nhbl9wb3dlciA9IG1heF90eHBvd2VyX2F2ZzsKLQkJCX0KLQkJCWlmICgoZW5oaW5mb1tzZWN0aW9uXS5pc19odDQwKSAmJgotCQkJICAgIChjaF9pbmZvLT5odDQwX21heF9wb3dlcl9hdmcgPCBtYXhfdHhwb3dlcl9hdmcpKSB7Ci0JCQkJLyogVXBkYXRlIHJlZ3VsYXRvcnktYmFzZWQgcnVuLXRpbWUgZGF0YSAqLwotCQkJCWNoX2luZm8tPmh0NDBfbWF4X3Bvd2VyX2F2ZyA9IG1heF90eHBvd2VyX2F2ZzsKLQkJCX0KLQkJCWJyZWFrOwotCQl9Ci0JCWNoX2luZm8rKzsKLQl9Ci0JcmV0dXJuIG1heF90eHBvd2VyX2F2ZzsKLX0KLQotLyoqCi0gKiBpd2xjb3JlX2VlcHJvbV9lbmhhbmNlZF90eHBvd2VyOiBwcm9jZXNzIGVuaGFuY2VkIHR4IHBvd2VyIGluZm8KLSAqLwotc3RhdGljIHZvaWQgaXdsY29yZV9lZXByb21fZW5oYW5jZWRfdHhwb3dlcl9vbGQoc3RydWN0IGl3bF9wcml2ICpwcml2KQotewotCWludCBlZXByb21fc2VjdGlvbl9jb3VudCA9IDA7Ci0JaW50IHNlY3Rpb24sIGVsZW1lbnQ7Ci0Jc3RydWN0IGl3bF9lZXByb21fZW5oYW5jZWRfdHhwd3IgKmVuaGFuY2VkX3R4cG93ZXI7Ci0JdTMyIG9mZnNldDsKLQlzOCBtYXhfdHhwb3dlcl9hdmc7IC8qIChkQm0pICovCi0JczggbWF4X3R4cG93ZXJfaW5faGFsZl9kYm07IC8qIChoYWxmLWRCbSkgKi8KLQotCS8qIExvb3AgdGhyb3VnaCBhbGwgdGhlIHNlY3Rpb25zCi0JICogYWRqdXN0IGJhbmRzIGFuZCBjaGFubmVsJ3MgbWF4IHR4IHBvd2VyCi0JICogU2V0IHRoZSB0eF9wb3dlcl91c2VyX2xtdCB0byB0aGUgaGlnaGVzdCBwb3dlcgotCSAqIHN1cHBvcnRlZCBieSBhbnkgY2hhbm5lbHMgYW5kIGNoYWlucwotCSAqLwotCWZvciAoc2VjdGlvbiA9IDA7IHNlY3Rpb24gPCBBUlJBWV9TSVpFKGVuaGluZm8pOyBzZWN0aW9uKyspIHsKLQkJZWVwcm9tX3NlY3Rpb25fY291bnQgPSBlbmhpbmZvW3NlY3Rpb25dLmNvdW50OwotCQlvZmZzZXQgPSBlbmhpbmZvW3NlY3Rpb25dLm9mZnNldDsKLQkJZW5oYW5jZWRfdHhwb3dlciA9IChzdHJ1Y3QgaXdsX2VlcHJvbV9lbmhhbmNlZF90eHB3ciAqKQotCQkJCWl3bF9lZXByb21fcXVlcnlfYWRkcihwcml2LCBvZmZzZXQpOwotCi0JCS8qCi0JCSAqIGNoZWNrIGZvciB2YWxpZCBlbnRyeSAtCi0JCSAqIGRpZmZlcmVudCB2ZXJzaW9uIG9mIEVFUFJPTSBtaWdodCBjb250YWluIGRpZmZlcmVudCBzZXQKLQkJICogb2YgZW5oYW5jZWQgdHggcG93ZXIgdGFibGUKLQkJICogYWx3YXlzIGNoZWNrIGZvciB2YWxpZCBlbnRyeSBiZWZvcmUgcHJvY2VzcwotCQkgKiB0aGUgaW5mb3JtYXRpb24KLQkJICovCi0JCWlmICghKGVuaGFuY2VkX3R4cG93ZXItPmZsYWdzIHx8IGVuaGFuY2VkX3R4cG93ZXItPmNoYW5uZWwpIHx8Ci0JCSAgICBlbmhhbmNlZF90eHBvd2VyLT5kZWx0YV8yMF9pbl80MCkKLQkJCWNvbnRpbnVlOwotCi0JCWZvciAoZWxlbWVudCA9IDA7IGVsZW1lbnQgPCBlZXByb21fc2VjdGlvbl9jb3VudDsgZWxlbWVudCsrKSB7Ci0JCQlpZiAoZW5oaW5mb1tzZWN0aW9uXS5pc19jb21tb24pCi0JCQkJbWF4X3R4cG93ZXJfYXZnID0KLQkJCQkJaXdsX3VwZGF0ZV9jb21tb25fdHhwb3dlcihwcml2LAotCQkJCQkJZW5oYW5jZWRfdHhwb3dlciwgc2VjdGlvbiwKLQkJCQkJCWVsZW1lbnQsCi0JCQkJCQkmbWF4X3R4cG93ZXJfaW5faGFsZl9kYm0pOwotCQkJZWxzZQotCQkJCW1heF90eHBvd2VyX2F2ZyA9Ci0JCQkJCWl3bF91cGRhdGVfY2hhbm5lbF90eHBvd2VyKHByaXYsCi0JCQkJCQllbmhhbmNlZF90eHBvd2VyLCBzZWN0aW9uLAotCQkJCQkJZWxlbWVudCwKLQkJCQkJCSZtYXhfdHhwb3dlcl9pbl9oYWxmX2RibSk7Ci0KLQkJCS8qIFVwZGF0ZSB0aGUgdHhfcG93ZXJfdXNlcl9sbXQgdG8gdGhlIGhpZ2hlc3QgcG93ZXIKLQkJCSAqIHN1cHBvcnRlZCBieSBhbnkgY2hhbm5lbCAqLwotCQkJaWYgKG1heF90eHBvd2VyX2F2ZyA+IHByaXYtPnR4X3Bvd2VyX3VzZXJfbG10KQotCQkJCXByaXYtPnR4X3Bvd2VyX3VzZXJfbG10ID0gbWF4X3R4cG93ZXJfYXZnOwotCi0JCQkvKgotCQkJICogVXBkYXRlIHRoZSB0eF9wb3dlcl9sbXRfaW5faGFsZl9kYm0gdG8KLQkJCSAqIHRoZSBoaWdoZXN0IHBvd2VyIHN1cHBvcnRlZCBieSBhbnkgY2hhbm5lbAotCQkJICovCi0JCQlpZiAobWF4X3R4cG93ZXJfaW5faGFsZl9kYm0gPgotCQkJICAgIHByaXYtPnR4X3Bvd2VyX2xtdF9pbl9oYWxmX2RibSkKLQkJCQlwcml2LT50eF9wb3dlcl9sbXRfaW5faGFsZl9kYm0gPQotCQkJCQltYXhfdHhwb3dlcl9pbl9oYWxmX2RibTsKLQkJfQotCX0KLX0KLQogc3RhdGljIHZvaWQKIGl3bGNvcmVfZWVwcm9tX2VuaF90eHBfcmVhZF9lbGVtZW50KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQkgICAgc3RydWN0IGl3bF9lZXByb21fZW5oYW5jZWRfdHhwd3IgKnR4cCwKQEAgLTQ5Miw3ICsyNzAsMTAgQEAKICNkZWZpbmUgRUVQUk9NX1RYUF9FTlRSWV9MRU4gc2l6ZW9mKHN0cnVjdCBpd2xfZWVwcm9tX2VuaGFuY2VkX3R4cHdyKQogI2RlZmluZSBFRVBST01fVFhQX1NaX09GRlMgKDB4MDAgfCBJTkRJUkVDVF9BRERSRVNTIHwgSU5ESVJFQ1RfVFhQX0xJTUlUX1NJWkUpCiAKLXN0YXRpYyB2b2lkIGl3bGNvcmVfZWVwcm9tX2VuaGFuY2VkX3R4cG93ZXJfbmV3KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKKyNkZWZpbmUgVFhQX0NIRUNLX0FORF9QUklOVCh4KSAoKHR4cC0+ZmxhZ3MgJiBJV0xfRUVQUk9NX0VOSF9UWFBfRkxfIyN4KSBcCisJCQkgICAgPyAjIHggIiAiIDogIiIpCisKK3ZvaWQgaXdsY29yZV9lZXByb21fZW5oYW5jZWRfdHhwb3dlcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJc3RydWN0IGl3bF9lZXByb21fZW5oYW5jZWRfdHhwd3IgKnR4cF9hcnJheSwgKnR4cDsKIAlpbnQgaWR4LCBlbnRyaWVzOwpAQCAtNTA2LDEzICsyODcsMzkgQEAKIAllbnRyaWVzID0gbGUxNl90b19jcHVwKHR4cF9sZW4pICogMiAvIEVFUFJPTV9UWFBfRU5UUllfTEVOOwogCiAJdHhwX2FycmF5ID0gKHZvaWQgKikgaXdsYWduX2VlcHJvbV9xdWVyeV9hZGRyKHByaXYsIEVFUFJPTV9UWFBfT0ZGUyk7CisKIAlmb3IgKGlkeCA9IDA7IGlkeCA8IGVudHJpZXM7IGlkeCsrKSB7CiAJCXR4cCA9ICZ0eHBfYXJyYXlbaWR4XTsKLQogCQkvKiBza2lwIGludmFsaWQgZW50cmllcyAqLwogCQlpZiAoISh0eHAtPmZsYWdzICYgSVdMX0VFUFJPTV9FTkhfVFhQX0ZMX1ZBTElEKSkKIAkJCWNvbnRpbnVlOwogCisJCUlXTF9ERUJVR19FRVBST00ocHJpdiwgIiVzICVkOlx0ICVzJXMlcyVzJXMlcyVzJXMgKDB4JTAyeClcbiIsCisJCQkJICh0eHAtPmNoYW5uZWwgJiYgKHR4cC0+ZmxhZ3MgJgorCQkJCQlJV0xfRUVQUk9NX0VOSF9UWFBfRkxfQ09NTU9OX1RZUEUpKSA/CisJCQkJCSJDb21tb24gIiA6ICh0eHAtPmNoYW5uZWwpID8KKwkJCQkJIkNoYW5uZWwiIDogIkNvbW1vbiIsCisJCQkJICh0eHAtPmNoYW5uZWwpLAorCQkJCSBUWFBfQ0hFQ0tfQU5EX1BSSU5UKFZBTElEKSwKKwkJCQkgVFhQX0NIRUNLX0FORF9QUklOVChCQU5EXzUyRyksCisJCQkJIFRYUF9DSEVDS19BTkRfUFJJTlQoT0ZETSksCisJCQkJIFRYUF9DSEVDS19BTkRfUFJJTlQoNDBNSFopLAorCQkJCSBUWFBfQ0hFQ0tfQU5EX1BSSU5UKEhUX0FQKSwKKwkJCQkgVFhQX0NIRUNLX0FORF9QUklOVChSRVMxKSwKKwkJCQkgVFhQX0NIRUNLX0FORF9QUklOVChSRVMyKSwKKwkJCQkgVFhQX0NIRUNLX0FORF9QUklOVChDT01NT05fVFlQRSksCisJCQkJIHR4cC0+ZmxhZ3MpOworCQlJV0xfREVCVUdfRUVQUk9NKHByaXYsICJcdFx0IGNoYWluX0E6IDB4JTAyeCAiCisJCQkJICJjaGFpbl9COiAwWCUwMnggY2hhaW5fQzogMFglMDJ4XG4iLAorCQkJCSB0eHAtPmNoYWluX2FfbWF4LCB0eHAtPmNoYWluX2JfbWF4LAorCQkJCSB0eHAtPmNoYWluX2NfbWF4KTsKKwkJSVdMX0RFQlVHX0VFUFJPTShwcml2LCAiXHRcdCBNSU1PMjogMHglMDJ4ICIKKwkJCQkgIk1JTU8zOiAweCUwMnggSGlnaCAyMF9vbl80MDogMHglMDJ4ICIKKwkJCQkgIkxvdyAyMF9vbl80MDogMHglMDJ4XG4iLAorCQkJCSB0eHAtPm1pbW8yX21heCwgdHhwLT5taW1vM19tYXgsCisJCQkJICgodHhwLT5kZWx0YV8yMF9pbl80MCAmIDB4ZjApID4+IDQpLAorCQkJCSAodHhwLT5kZWx0YV8yMF9pbl80MCAmIDB4MGYpKTsKKwogCQltYXhfdHhwX2F2ZyA9IGl3bF9nZXRfbWF4X3R4cG93ZXJfYXZnKHByaXYsIHR4cF9hcnJheSwgaWR4LAogCQkJCQkJICAgICAgJm1heF90eHBfYXZnX2hhbGZkYm0pOwogCkBAIC01MjgsMTEgKzMzNSwzIEBACiAJCWl3bGNvcmVfZWVwcm9tX2VuaF90eHBfcmVhZF9lbGVtZW50KHByaXYsIHR4cCwgbWF4X3R4cF9hdmcpOwogCX0KIH0KLQotdm9pZCBpd2xjb3JlX2VlcHJvbV9lbmhhbmNlZF90eHBvd2VyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKLXsKLQlpZiAocHJpdi0+Y2ZnLT51c2VfbmV3X2VlcHJvbV9yZWFkaW5nKQotCQlpd2xjb3JlX2VlcHJvbV9lbmhhbmNlZF90eHBvd2VyX25ldyhwcml2KTsKLQllbHNlCi0JCWl3bGNvcmVfZWVwcm9tX2VuaGFuY2VkX3R4cG93ZXJfb2xkKHByaXYpOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLWhjbWQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1oY21kLmMKaW5kZXggZmZiMmY0MS4uMzY2MzQwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLWhjbWQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24taGNtZC5jCkBAIC0zMDcsNiArMzA3LDcgQEAKIAogCWlmIChjdHhfYnNzLT52aWYgJiYgY3R4X3Bhbi0+dmlmKSB7CiAJCWludCBiY25pbnQgPSBjdHhfcGFuLT52aWYtPmJzc19jb25mLmJlYWNvbl9pbnQ7CisJCWludCBkdGltID0gY3R4X3Bhbi0+dmlmLT5ic3NfY29uZi5kdGltX3BlcmlvZCA/OiAxOwogCiAJCS8qIHNob3VsZCBiZSBzZXQsIGJ1dCBzZWVtcyB1bnVzZWQ/PyAqLwogCQljbWQuZmxhZ3MgfD0gY3B1X3RvX2xlMTYoSVdMX1dJUEFOX1BBUkFNU19GTEdfU0xPVFRFRF9NT0RFKTsKQEAgLTMyOSwxMCArMzMwLDEwIEBACiAJCWlmICh0ZXN0X2JpdChTVEFUVVNfU0NBTl9IVywgJnByaXYtPnN0YXR1cykgfHwKIAkJICAgICghY3R4X2Jzcy0+dmlmLT5ic3NfY29uZi5pZGxlICYmCiAJCSAgICAgIWN0eF9ic3MtPnZpZi0+YnNzX2NvbmYuYXNzb2MpKSB7Ci0JCQlzbG90MCA9IGJjbmludCAqIDMgLSAyMDsKKwkJCXNsb3QwID0gZHRpbSAqIGJjbmludCAqIDMgLSAyMDsKIAkJCXNsb3QxID0gMjA7CiAJCX0gZWxzZSBpZiAoIWN0eF9wYW4tPnZpZi0+YnNzX2NvbmYuaWRsZSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIWN0eF9wYW4tPnZpZi0+YnNzX2NvbmYuYXNzb2MpIHsKKwkJCSAgICFjdHhfcGFuLT52aWYtPmJzc19jb25mLmFzc29jKSB7CiAJCQlzbG90MSA9IGJjbmludCAqIDMgLSAyMDsKIAkJCXNsb3QwID0gMjA7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1saWIuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1saWIuYwppbmRleCA1NTRhZmI3Li4zZGVlODdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tbGliLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLWxpYi5jCkBAIC00MDUsNiArNDA1LDcgQEAKIAkJcmV0dXJuOwogCX0KIAorCXR4cS0+dGltZV9zdGFtcCA9IGppZmZpZXM7CiAJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IodHhxLT50eGJbdHhxLT5xLnJlYWRfcHRyXS5za2IpOwogCW1lbXNldCgmaW5mby0+c3RhdHVzLCAwLCBzaXplb2YoaW5mby0+c3RhdHVzKSk7CiAKQEAgLTQ0NSwyMiArNDQ2LDE3IEBACiAKIAkJCWlmIChwcml2LT5tYWM4MDIxMV9yZWdpc3RlcmVkICYmCiAJCQkgICAgKGl3bF9xdWV1ZV9zcGFjZSgmdHhxLT5xKSA+IHR4cS0+cS5sb3dfbWFyaykgJiYKLQkJCSAgICAoYWdnLT5zdGF0ZSAhPSBJV0xfRU1QVFlJTkdfSFdfUVVFVUVfREVMQkEpKSB7Ci0JCQkJaWYgKGFnZy0+c3RhdGUgPT0gSVdMX0FHR19PRkYpCi0JCQkJCWl3bF93YWtlX3F1ZXVlKHByaXYsIHR4cV9pZCk7Ci0JCQkJZWxzZQotCQkJCQlpd2xfd2FrZV9xdWV1ZShwcml2LCB0eHEtPnN3cV9pZCk7Ci0JCQl9CisJCQkgICAgKGFnZy0+c3RhdGUgIT0gSVdMX0VNUFRZSU5HX0hXX1FVRVVFX0RFTEJBKSkKKwkJCQlpd2xfd2FrZV9xdWV1ZShwcml2LCB0eHEpOwogCQl9CiAJfSBlbHNlIHsKLQkJQlVHX09OKHR4cV9pZCAhPSB0eHEtPnN3cV9pZCk7CiAJCWl3bGFnbl9zZXRfdHhfc3RhdHVzKHByaXYsIGluZm8sIHR4X3Jlc3AsIHR4cV9pZCwgZmFsc2UpOwogCQlmcmVlZCA9IGl3bGFnbl90eF9xdWV1ZV9yZWNsYWltKHByaXYsIHR4cV9pZCwgaW5kZXgpOwogCQlpd2xfZnJlZV90ZmRzX2luX3F1ZXVlKHByaXYsIHN0YV9pZCwgdGlkLCBmcmVlZCk7CiAKIAkJaWYgKHByaXYtPm1hYzgwMjExX3JlZ2lzdGVyZWQgJiYKIAkJICAgIChpd2xfcXVldWVfc3BhY2UoJnR4cS0+cSkgPiB0eHEtPnEubG93X21hcmspKQotCQkJaXdsX3dha2VfcXVldWUocHJpdiwgdHhxX2lkKTsKKwkJCWl3bF93YWtlX3F1ZXVlKHByaXYsIHR4cSk7CiAJfQogCiAJaXdsYWduX3R4cV9jaGVja19lbXB0eShwcml2LCBzdGFfaWQsIHRpZCwgdHhxX2lkKTsKQEAgLTQ5Niw2ICs0OTIsMTAgQEAKIAlzdHJ1Y3QgaXdsYWduX3R4X3Bvd2VyX2RibV9jbWQgdHhfcG93ZXJfY21kOwogCXU4IHR4X2FudF9jZmdfY21kOwogCisJaWYgKFdBUk5fT05DRSh0ZXN0X2JpdChTVEFUVVNfU0NBTl9IVywgJnByaXYtPnN0YXR1cyksCisJCSAgICAgICJUWCBQb3dlciByZXF1ZXN0ZWQgd2hpbGUgc2Nhbm5pbmchXG4iKSkKKwkJcmV0dXJuIC1FQUdBSU47CisKIAkvKiBoYWxmIGRCbSBuZWVkIHRvIG11bHRpcGx5ICovCiAJdHhfcG93ZXJfY21kLmdsb2JhbF9sbXQgPSAoczgpKDIgKiBwcml2LT50eF9wb3dlcl91c2VyX2xtdCk7CiAKQEAgLTUyMiw5ICs1MjIsOCBAQAogCWVsc2UKIAkJdHhfYW50X2NmZ19jbWQgPSBSRVBMWV9UWF9QT1dFUl9EQk1fQ01EOwogCi0JcmV0dXJuICBpd2xfc2VuZF9jbWRfcGR1X2FzeW5jKHByaXYsIHR4X2FudF9jZmdfY21kLAotCQkJCSAgICAgICBzaXplb2YodHhfcG93ZXJfY21kKSwgJnR4X3Bvd2VyX2NtZCwKLQkJCQkgICAgICAgTlVMTCk7CisJcmV0dXJuIGl3bF9zZW5kX2NtZF9wZHUocHJpdiwgdHhfYW50X2NmZ19jbWQsIHNpemVvZih0eF9wb3dlcl9jbWQpLAorCQkJCSZ0eF9wb3dlcl9jbWQpOwogfQogCiB2b2lkIGl3bGFnbl90ZW1wZXJhdHVyZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCkBAIC03NTYsNiArNzU1LDEyIEBACiAJfSBlbHNlCiAJCWl3bGFnbl90eHFfY3R4X3Jlc2V0KHByaXYpOwogCisJaWYgKHByaXYtPmNmZy0+YmFzZV9wYXJhbXMtPnNoYWRvd19yZWdfZW5hYmxlKSB7CisJCS8qIGVuYWJsZSBzaGFkb3cgcmVncyBpbiBIVyAqLworCQlpd2xfc2V0X2JpdChwcml2LCBDU1JfTUFDX1NIQURPV19SRUdfQ1RSTCwKKwkJCTB4ODAwRkZGRkYpOworCX0KKwogCXNldF9iaXQoU1RBVFVTX0lOSVQsICZwcml2LT5zdGF0dXMpOwogCiAJcmV0dXJuIDA7CkBAIC0xNDg3LDE1ICsxNDkyLDExIEBACiAJaWYgKHByaXYtPmNmZy0+c2Nhbl9yeF9hbnRlbm5hc1tiYW5kXSkKIAkJcnhfYW50ID0gcHJpdi0+Y2ZnLT5zY2FuX3J4X2FudGVubmFzW2JhbmRdOwogCi0JaWYgKHByaXYtPmNmZy0+c2Nhbl90eF9hbnRlbm5hc1tiYW5kXSkKLQkJc2Nhbl90eF9hbnRlbm5hcyA9IHByaXYtPmNmZy0+c2Nhbl90eF9hbnRlbm5hc1tiYW5kXTsKLQotCWlmIChwcml2LT5jZmctPmJ0X3BhcmFtcyAmJgotCSAgICBwcml2LT5jZmctPmJ0X3BhcmFtcy0+YWR2YW5jZWRfYnRfY29leGlzdCAmJgotCSAgICBwcml2LT5idF9mdWxsX2NvbmN1cnJlbnQpIHsKLQkJLyogb3BlcmF0ZWQgYXMgMXgxIGluIGZ1bGwgY29uY3VycmVuY3kgbW9kZSAqLwotCQlzY2FuX3R4X2FudGVubmFzID0gZmlyc3RfYW50ZW5uYSgKLQkJCXByaXYtPmNmZy0+c2Nhbl90eF9hbnRlbm5hc1tiYW5kXSk7CisJaWYgKGJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWiAmJgorCSAgICBwcml2LT5jZmctPmJ0X3BhcmFtcyAmJgorCSAgICBwcml2LT5jZmctPmJ0X3BhcmFtcy0+YWR2YW5jZWRfYnRfY29leGlzdCkgeworCQkvKiB0cmFuc21pdCAyLjQgR0h6IHByb2JlcyBvbmx5IG9uIGZpcnN0IGFudGVubmEgKi8KKwkJc2Nhbl90eF9hbnRlbm5hcyA9IGZpcnN0X2FudGVubmEoc2Nhbl90eF9hbnRlbm5hcyk7CiAJfQogCiAJcHJpdi0+c2Nhbl90eF9hbnRbYmFuZF0gPSBpd2xfdG9nZ2xlX3R4X2FudChwcml2LCBwcml2LT5zY2FuX3R4X2FudFtiYW5kXSwKQEAgLTE1OTAsMjIgKzE1OTEsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLXZvaWQgaXdsYWduX3Bvc3Rfc2NhbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCi17Ci0Jc3RydWN0IGl3bF9yeG9uX2NvbnRleHQgKmN0eDsKLQotCS8qCi0JICogU2luY2Ugc2V0dGluZyB0aGUgUlhPTiBtYXkgaGF2ZSBiZWVuIGRlZmVycmVkIHdoaWxlCi0JICogcGVyZm9ybWluZyB0aGUgc2NhbiwgZmlyZSBvbmUgb2ZmIGlmIG5lZWRlZAotCSAqLwotCWZvcl9lYWNoX2NvbnRleHQocHJpdiwgY3R4KQotCQlpZiAobWVtY21wKCZjdHgtPnN0YWdpbmcsICZjdHgtPmFjdGl2ZSwgc2l6ZW9mKGN0eC0+c3RhZ2luZykpKQotCQkJaXdsYWduX2NvbW1pdF9yeG9uKHByaXYsIGN0eCk7Ci0KLQlpZiAocHJpdi0+Y2ZnLT5vcHMtPmhjbWQtPnNldF9wYW5fcGFyYW1zKQotCQlwcml2LT5jZmctPm9wcy0+aGNtZC0+c2V0X3Bhbl9wYXJhbXMocHJpdik7Ci19Ci0KIGludCBpd2xhZ25fbWFuYWdlX2lic3Nfc3RhdGlvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwgYm9vbCBhZGQpCiB7CkBAIC0xNzk2LDcgKzE3ODEsNyBAQAogCWNwdV90b19sZTMyKDB4YzAwMDQwMDApLAogCWNwdV90b19sZTMyKDB4MDAwMDQwMDApLAogCWNwdV90b19sZTMyKDB4ZjAwMDUwMDApLAotCWNwdV90b19sZTMyKDB4ZjAwMDQwMDApLAorCWNwdV90b19sZTMyKDB4ZjAwMDUwMDApLAogfTsKIAogc3RhdGljIGNvbnN0IF9fbGUzMiBpd2xhZ25fY29uY3VycmVudF9sb29rdXBbMTJdID0gewpAQCAtMTgzMiw2ICsxODE3LDcgQEAKIAkJYnRfY21kLnByaW9fYm9vc3QgPSAwOwogCWJ0X2NtZC5raWxsX2Fja19tYXNrID0gcHJpdi0+a2lsbF9hY2tfbWFzazsKIAlidF9jbWQua2lsbF9jdHNfbWFzayA9IHByaXYtPmtpbGxfY3RzX21hc2s7CisKIAlidF9jbWQudmFsaWQgPSBwcml2LT5idF92YWxpZDsKIAlidF9jbWQudHhfcHJpb19ib29zdCA9IDA7CiAJYnRfY21kLnJ4X3ByaW9fYm9vc3QgPSAwOwpAQCAtMTg0NywxMCArMTgzMywxNSBAQAogCX0gZWxzZSB7CiAJCWJ0X2NtZC5mbGFncyA9IElXTEFHTl9CVF9GTEFHX0NPRVhfTU9ERV8zVyA8PAogCQkJCQlJV0xBR05fQlRfRkxBR19DT0VYX01PREVfU0hJRlQ7CisJCWlmIChwcml2LT5jZmctPmJ0X3BhcmFtcyAmJgorCQkgICAgcHJpdi0+Y2ZnLT5idF9wYXJhbXMtPmJ0X3Njb19kaXNhYmxlKQorCQkJYnRfY21kLmZsYWdzIHw9IElXTEFHTl9CVF9GTEFHX1NZTkNfMl9CVF9ESVNBQkxFOworCiAJCWlmIChwcml2LT5idF9jaF9hbm5vdW5jZSkKIAkJCWJ0X2NtZC5mbGFncyB8PSBJV0xBR05fQlRfRkxBR19DSEFOTkVMX0lOSElCSVRJT047CiAJCUlXTF9ERUJVR19JTkZPKHByaXYsICJCVCBjb2V4IGZsYWc6IDBYJXhcbiIsIGJ0X2NtZC5mbGFncyk7CiAJfQorCXByaXYtPmJ0X2VuYWJsZV9mbGFnID0gYnRfY21kLmZsYWdzOwogCWlmIChwcml2LT5idF9mdWxsX2NvbmN1cnJlbnQpCiAJCW1lbWNweShidF9jbWQuYnQzX2xvb2t1cF90YWJsZSwgaXdsYWduX2NvbmN1cnJlbnRfbG9va3VwLAogCQkJc2l6ZW9mKGl3bGFnbl9jb25jdXJyZW50X2xvb2t1cCkpOwpAQCAtMTg5MCwxMiArMTg4MSwyMCBAQAogCXN0cnVjdCBpd2xfcnhvbl9jb250ZXh0ICpjdHg7CiAJaW50IHNtcHNfcmVxdWVzdCA9IC0xOwogCisJLyoKKwkgKiBOb3RlOiBidF90cmFmZmljX2xvYWQgY2FuIGJlIG92ZXJyaWRkZW4gYnkgc2NhbiBjb21wbGV0ZSBhbmQKKwkgKiBjb2V4IHByb2ZpbGUgbm90aWZpY2F0aW9ucy4gSWdub3JlIHRoYXQgc2luY2Ugb25seSBiYWQgY29uc2VxdWVuY2UKKwkgKiBjYW4gYmUgbm90IG1hdGNoaW5nIGRlYnVnIHByaW50IHdpdGggYWN0dWFsIHN0YXRlLgorCSAqLwogCUlXTF9ERUJVR19JTkZPKHByaXYsICJCVCB0cmFmZmljIGxvYWQgY2hhbmdlczogJWRcbiIsCiAJCSAgICAgICBwcml2LT5idF90cmFmZmljX2xvYWQpOwogCiAJc3dpdGNoIChwcml2LT5idF90cmFmZmljX2xvYWQpIHsKIAljYXNlIElXTF9CVF9DT0VYX1RSQUZGSUNfTE9BRF9OT05FOgotCQlzbXBzX3JlcXVlc3QgPSBJRUVFODAyMTFfU01QU19BVVRPTUFUSUM7CisJCWlmIChwcml2LT5idF9zdGF0dXMpCisJCQlzbXBzX3JlcXVlc3QgPSBJRUVFODAyMTFfU01QU19EWU5BTUlDOworCQllbHNlCisJCQlzbXBzX3JlcXVlc3QgPSBJRUVFODAyMTFfU01QU19BVVRPTUFUSUM7CiAJCWJyZWFrOwogCWNhc2UgSVdMX0JUX0NPRVhfVFJBRkZJQ19MT0FEX0xPVzoKIAkJc21wc19yZXF1ZXN0ID0gSUVFRTgwMjExX1NNUFNfRFlOQU1JQzsKQEAgLTE5MTIsNiArMTkxMSwxNiBAQAogCiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCisJLyoKKwkgKiBXZSBjYW4gbm90IHNlbmQgY29tbWFuZCB0byBmaXJtd2FyZSB3aGlsZSBzY2FubmluZy4gV2hlbiB0aGUgc2NhbgorCSAqIGNvbXBsZXRlIHdlIHdpbGwgc2NoZWR1bGUgdGhpcyB3b3JrIGFnYWluLiBXZSBkbyBjaGVjayB3aXRoIG11dGV4CisJICogbG9ja2VkIHRvIHByZXZlbnQgbmV3IHNjYW4gcmVxdWVzdCB0byBhcnJpdmUuIFdlIGRvIG5vdCBjaGVjaworCSAqIFNUQVRVU19TQ0FOTklORyB0byBhdm9pZCByYWNlIHdoZW4gcXVldWVfd29yayB0d28gdGltZXMgZnJvbQorCSAqIGRpZmZlcmVudCBub3RpZmljYXRpb25zLCBidXQgcXVpdCBhbmQgbm90IHBlcmZvcm0gYW55IHdvcmsgYXQgYWxsLgorCSAqLworCWlmICh0ZXN0X2JpdChTVEFUVVNfU0NBTl9IVywgJnByaXYtPnN0YXR1cykpCisJCWdvdG8gb3V0OworCiAJaWYgKHByaXYtPmNmZy0+b3BzLT5saWItPnVwZGF0ZV9jaGFpbl9mbGFncykKIAkJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+dXBkYXRlX2NoYWluX2ZsYWdzKHByaXYpOwogCkBAIC0xOTIxLDcgKzE5MzAsNyBAQAogCQkJCWllZWU4MDIxMV9yZXF1ZXN0X3NtcHMoY3R4LT52aWYsIHNtcHNfcmVxdWVzdCk7CiAJCX0KIAl9Ci0KK291dDoKIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIH0KIApAQCAtMTk5MiwyNCArMjAwMSwyOSBAQAogCQkJQlRfVUFSVF9NU0dfRlJBTUU3Q09OTkVDVEFCTEVfUE9TKTsKIH0KIAotc3RhdGljIHZvaWQgaXdsYWduX3NldF9raWxsX2Fja19tc2soc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCSAgICAgc3RydWN0IGl3bF9idF91YXJ0X21zZyAqdWFydF9tc2cpCitzdGF0aWMgdm9pZCBpd2xhZ25fc2V0X2tpbGxfbXNrKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQlzdHJ1Y3QgaXdsX2J0X3VhcnRfbXNnICp1YXJ0X21zZykKIHsKLQl1OCBraWxsX2Fja19tc2s7Ci0JX19sZTMyIGJ0X2tpbGxfYWNrX21zZ1syXSA9IHsKLQkJCWNwdV90b19sZTMyKDB4RkZGRkZGRiksIGNwdV90b19sZTMyKDB4RkZGRkZDMDApIH07CisJdTgga2lsbF9tc2s7CisJc3RhdGljIGNvbnN0IF9fbGUzMiBidF9raWxsX2Fja19tc2dbMl0gPSB7CisJCUlXTEFHTl9CVF9LSUxMX0FDS19NQVNLX0RFRkFVTFQsCisJCUlXTEFHTl9CVF9LSUxMX0FDS19DVFNfTUFTS19TQ08gfTsKKwlzdGF0aWMgY29uc3QgX19sZTMyIGJ0X2tpbGxfY3RzX21zZ1syXSA9IHsKKwkJSVdMQUdOX0JUX0tJTExfQ1RTX01BU0tfREVGQVVMVCwKKwkJSVdMQUdOX0JUX0tJTExfQUNLX0NUU19NQVNLX1NDTyB9OwogCi0Ja2lsbF9hY2tfbXNrID0gKCgoQlRfVUFSVF9NU0dfRlJBTUUzQTJEUF9NU0sgfAotCQkJQlRfVUFSVF9NU0dfRlJBTUUzU05JRkZfTVNLIHwKLQkJCUJUX1VBUlRfTVNHX0ZSQU1FM1NDT0VTQ09fTVNLKSAmCi0JCQl1YXJ0X21zZy0+ZnJhbWUzKSA9PSAwKSA/IDEgOiAwOwotCWlmIChwcml2LT5raWxsX2Fja19tYXNrICE9IGJ0X2tpbGxfYWNrX21zZ1traWxsX2Fja19tc2tdKSB7CisJa2lsbF9tc2sgPSAoQlRfVUFSVF9NU0dfRlJBTUUzU0NPRVNDT19NU0sgJiB1YXJ0X21zZy0+ZnJhbWUzKQorCQk/IDEgOiAwOworCWlmIChwcml2LT5raWxsX2Fja19tYXNrICE9IGJ0X2tpbGxfYWNrX21zZ1traWxsX21za10gfHwKKwkgICAgcHJpdi0+a2lsbF9jdHNfbWFzayAhPSBidF9raWxsX2N0c19tc2dba2lsbF9tc2tdKSB7CiAJCXByaXYtPmJ0X3ZhbGlkIHw9IElXTEFHTl9CVF9WQUxJRF9LSUxMX0FDS19NQVNLOwotCQlwcml2LT5raWxsX2Fja19tYXNrID0gYnRfa2lsbF9hY2tfbXNnW2tpbGxfYWNrX21za107CisJCXByaXYtPmtpbGxfYWNrX21hc2sgPSBidF9raWxsX2Fja19tc2dba2lsbF9tc2tdOworCQlwcml2LT5idF92YWxpZCB8PSBJV0xBR05fQlRfVkFMSURfS0lMTF9DVFNfTUFTSzsKKwkJcHJpdi0+a2lsbF9jdHNfbWFzayA9IGJ0X2tpbGxfY3RzX21zZ1traWxsX21za107CisKIAkJLyogc2NoZWR1bGUgdG8gc2VuZCBydW50aW1lIGJ0X2NvbmZpZyAqLwogCQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPmJ0X3J1bnRpbWVfY29uZmlnKTsKIAl9Ci0KIH0KIAogdm9pZCBpd2xhZ25fYnRfY29leF9wcm9maWxlX25vdGlmKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKQEAgLTIwMjAsNyArMjAzNCw2IEBACiAJc3RydWN0IGl3bF9idF9jb2V4X3Byb2ZpbGVfbm90aWYgKmNvZXggPSAmcGt0LT51LmJ0X2NvZXhfcHJvZmlsZV9ub3RpZjsKIAlzdHJ1Y3QgaXdsYWduX2J0X3Njb19jbWQgc2NvX2NtZCA9IHsgLmZsYWdzID0gMCB9OwogCXN0cnVjdCBpd2xfYnRfdWFydF9tc2cgKnVhcnRfbXNnID0gJmNvZXgtPmxhc3RfYnRfdWFydF9tc2c7Ci0JdTggbGFzdF90cmFmZmljX2xvYWQ7CiAKIAlJV0xfREVCVUdfTk9USUYocHJpdiwgIkJUIENvZXggbm90aWZpY2F0aW9uOlxuIik7CiAJSVdMX0RFQlVHX05PVElGKHByaXYsICIgICAgc3RhdHVzOiAlZFxuIiwgY29leC0+YnRfc3RhdHVzKTsKQEAgLTIwMjksMTEgKzIwNDIsMTAgQEAKIAkJCWNvZXgtPmJ0X2NpX2NvbXBsaWFuY2UpOwogCWl3bGFnbl9wcmludF91YXJ0bXNnKHByaXYsIHVhcnRfbXNnKTsKIAotCWxhc3RfdHJhZmZpY19sb2FkID0gcHJpdi0+bm90aWZfYnRfdHJhZmZpY19sb2FkOwotCXByaXYtPm5vdGlmX2J0X3RyYWZmaWNfbG9hZCA9IGNvZXgtPmJ0X3RyYWZmaWNfbG9hZDsKKwlwcml2LT5sYXN0X2J0X3RyYWZmaWNfbG9hZCA9IHByaXYtPmJ0X3RyYWZmaWNfbG9hZDsKIAlpZiAocHJpdi0+aXdfbW9kZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQykgewogCQlpZiAocHJpdi0+YnRfc3RhdHVzICE9IGNvZXgtPmJ0X3N0YXR1cyB8fAotCQkgICAgbGFzdF90cmFmZmljX2xvYWQgIT0gY29leC0+YnRfdHJhZmZpY19sb2FkKSB7CisJCSAgICBwcml2LT5sYXN0X2J0X3RyYWZmaWNfbG9hZCAhPSBjb2V4LT5idF90cmFmZmljX2xvYWQpIHsKIAkJCWlmIChjb2V4LT5idF9zdGF0dXMpIHsKIAkJCQkvKiBCVCBvbiAqLwogCQkJCWlmICghcHJpdi0+YnRfY2hfYW5ub3VuY2UpCkBAIC0yMDYyLDcgKzIwNzQsNyBAQAogCQl9CiAJfQogCi0JaXdsYWduX3NldF9raWxsX2Fja19tc2socHJpdiwgdWFydF9tc2cpOworCWl3bGFnbl9zZXRfa2lsbF9tc2socHJpdiwgdWFydF9tc2cpOwogCiAJLyogRklYTUU6IGJhc2VkIG9uIG5vdGlmaWNhdGlvbiwgYWRqdXN0IHRoZSBwcmlvX2Jvb3N0ICovCiAKQEAgLTIyODIsNyArMjI5NCw3IEBACiB2b2lkIGl3bF9kdW1wX2NzcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJaW50IGk7Ci0JdTMyIGNzcl90YmxbXSA9IHsKKwlzdGF0aWMgY29uc3QgdTMyIGNzcl90YmxbXSA9IHsKIAkJQ1NSX0hXX0lGX0NPTkZJR19SRUcsCiAJCUNTUl9JTlRfQ09BTEVTQ0lORywKIAkJQ1NSX0lOVCwKQEAgLTIzNDEsNyArMjM1Myw3IEBACiAJaW50IHBvcyA9IDA7CiAJc2l6ZV90IGJ1ZnN6ID0gMDsKICNlbmRpZgotCXUzMiBmaF90YmxbXSA9IHsKKwlzdGF0aWMgY29uc3QgdTMyIGZoX3RibFtdID0gewogCQlGSF9SU0NTUl9DSE5MMF9TVFRTX1dQVFJfUkVHLAogCQlGSF9SU0NTUl9DSE5MMF9SQkRDQl9CQVNFX1JFRywKIAkJRkhfUlNDU1JfQ0hOTDBfV1BUUiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1ycy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXJzLmMKaW5kZXggMDY1NTUzNi4uNzVmY2QzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXJzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXJzLmMKQEAgLTM4Nyw3ICszODcsNyBAQAogCWlmIChsb2FkID4gSVdMX0FHR19MT0FEX1RIUkVTSE9MRCkgewogCQlJV0xfREVCVUdfSFQocHJpdiwgIlN0YXJ0aW5nIFR4IGFnZzogU1RBOiAlcE0gdGlkOiAlZFxuIiwKIAkJCQlzdGEtPmFkZHIsIHRpZCk7Ci0JCXJldCA9IGllZWU4MDIxMV9zdGFydF90eF9iYV9zZXNzaW9uKHN0YSwgdGlkKTsKKwkJcmV0ID0gaWVlZTgwMjExX3N0YXJ0X3R4X2JhX3Nlc3Npb24oc3RhLCB0aWQsIDUwMDApOwogCQlpZiAocmV0ID09IC1FQUdBSU4pIHsKIAkJCS8qCiAJCQkgKiBkcml2ZXIgYW5kIG1hYzgwMjExIGlzIG91dCBvZiBzeW5jCkBAIC04MzMsMTcgKzgzMywyMyBAQAogCQkJICAgIHN0cnVjdCBpd2xfbHFfc3RhICpscV9zdGEpCiB7CiAJc3RydWN0IGl3bF9zY2FsZV90YmxfaW5mbyAqdGJsOwotCWJvb2wgZnVsbF9jb25jdXJyZW50OworCWJvb2wgZnVsbF9jb25jdXJyZW50ID0gcHJpdi0+YnRfZnVsbF9jb25jdXJyZW50OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCWlmIChwcml2LT5idF9jaV9jb21wbGlhbmNlICYmIHByaXYtPmJ0X2FudF9jb3VwbGVfb2spCi0JCWZ1bGxfY29uY3VycmVudCA9IHRydWU7Ci0JZWxzZQotCQlmdWxsX2NvbmN1cnJlbnQgPSBmYWxzZTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0KLQlpZiAocHJpdi0+YnRfZnVsbF9jb25jdXJyZW50ICE9IGZ1bGxfY29uY3VycmVudCkgeworCWlmIChwcml2LT5idF9hbnRfY291cGxlX29rKSB7CisJCS8qCisJCSAqIElzIHRoZXJlIGEgbmVlZCB0byBzd2l0Y2ggYmV0d2VlbgorCQkgKiBmdWxsIGNvbmN1cnJlbmN5IGFuZCAzLXdpcmU/CisJCSAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQlpZiAocHJpdi0+YnRfY2lfY29tcGxpYW5jZSAmJiBwcml2LT5idF9hbnRfY291cGxlX29rKQorCQkJZnVsbF9jb25jdXJyZW50ID0gdHJ1ZTsKKwkJZWxzZQorCQkJZnVsbF9jb25jdXJyZW50ID0gZmFsc2U7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwl9CisJaWYgKChwcml2LT5idF90cmFmZmljX2xvYWQgIT0gcHJpdi0+bGFzdF9idF90cmFmZmljX2xvYWQpIHx8CisJICAgIChwcml2LT5idF9mdWxsX2NvbmN1cnJlbnQgIT0gZnVsbF9jb25jdXJyZW50KSkgewogCQlwcml2LT5idF9mdWxsX2NvbmN1cnJlbnQgPSBmdWxsX2NvbmN1cnJlbnQ7CiAKIAkJLyogVXBkYXRlIHVDb2RlJ3MgcmF0ZSB0YWJsZS4gKi8KQEAgLTEwNDAsOCArMTA0Niw3IEBACiAJaWYgKHN0YSAmJiBzdGEtPnN1cHBfcmF0ZXNbc2JhbmQtPmJhbmRdKQogCQlyc19yYXRlX3NjYWxlX3BlcmZvcm0ocHJpdiwgc2tiLCBzdGEsIGxxX3N0YSk7CiAKLQkvKiBJcyB0aGVyZSBhIG5lZWQgdG8gc3dpdGNoIGJldHdlZW4gZnVsbCBjb25jdXJyZW5jeSBhbmQgMy13aXJlPyAqLwotCWlmIChwcml2LT5idF9hbnRfY291cGxlX29rKQorCWlmIChwcml2LT5jZmctPmJ0X3BhcmFtcyAmJiBwcml2LT5jZmctPmJ0X3BhcmFtcy0+YWR2YW5jZWRfYnRfY29leGlzdCkKIAkJcnNfYnRfdXBkYXRlX2xxKHByaXYsIGN0eCwgbHFfc3RhKTsKIH0KIApAQCAtMjg2OCw2ICsyODczLDEwIEBACiAJCWxxX3N0YS0+bGFzdF90eHJhdGVfaWR4ICs9IElXTF9GSVJTVF9PRkRNX1JBVEU7CiAJbHFfc3RhLT5pc19hZ2cgPSAwOwogCisjaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlMKKwlscV9zdGEtPmRiZ19maXhlZF9yYXRlID0gMDsKKyNlbmRpZgorCiAJcnNfaW5pdGlhbGl6ZV9scShwcml2LCBjb25mLCBzdGEsIGxxX3N0YSk7CiB9CiAKQEAgLTMwMTAsMTAgKzMwMTksNyBAQAogCSAqLwogCWlmIChwcml2ICYmIHByaXYtPmNmZy0+YnRfcGFyYW1zICYmCiAJICAgIHByaXYtPmNmZy0+YnRfcGFyYW1zLT5hZ2dfdGltZV9saW1pdCAmJgotCSAgICBwcml2LT5jZmctPmJ0X3BhcmFtcy0+YWdnX3RpbWVfbGltaXQgPj0KLQkJTElOS19RVUFMX0FHR19USU1FX0xJTUlUX01JTiAmJgotCSAgICBwcml2LT5jZmctPmJ0X3BhcmFtcy0+YWdnX3RpbWVfbGltaXQgPD0KLQkJIExJTktfUVVBTF9BR0dfVElNRV9MSU1JVF9NQVgpCisJICAgIHByaXYtPmJ0X3RyYWZmaWNfbG9hZCA+PSBJV0xfQlRfQ09FWF9UUkFGRklDX0xPQURfSElHSCkKIAkJbHFfY21kLT5hZ2dfcGFyYW1zLmFnZ190aW1lX2xpbWl0ID0KIAkJCWNwdV90b19sZTE2KHByaXYtPmNmZy0+YnRfcGFyYW1zLT5hZ2dfdGltZV9saW1pdCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tcnhvbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXJ4b24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDE0MGJkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXJ4b24uYwpAQCAtMCwwICsxLDY0MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLCBVU0EKKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIEludGVsIExpbnV4IFdpcmVsZXNzIDxpbHdAbGludXguaW50ZWwuY29tPgorICogSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgIml3bC1kZXYuaCIKKyNpbmNsdWRlICJpd2wtYWduLmgiCisjaW5jbHVkZSAiaXdsLXN0YS5oIgorI2luY2x1ZGUgIml3bC1jb3JlLmgiCisjaW5jbHVkZSAiaXdsLWFnbi1jYWxpYi5oIgorCitzdGF0aWMgaW50IGl3bGFnbl9kaXNhYmxlX2JzcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkgICAgICBzdHJ1Y3QgaXdsX3J4b25fY29udGV4dCAqY3R4LAorCQkJICAgICAgc3RydWN0IGl3bF9yeG9uX2NtZCAqc2VuZCkKK3sKKwlfX2xlMzIgb2xkX2ZpbHRlciA9IHNlbmQtPmZpbHRlcl9mbGFnczsKKwlpbnQgcmV0OworCisJc2VuZC0+ZmlsdGVyX2ZsYWdzICY9IH5SWE9OX0ZJTFRFUl9BU1NPQ19NU0s7CisJcmV0ID0gaXdsX3NlbmRfY21kX3BkdShwcml2LCBjdHgtPnJ4b25fY21kLCBzaXplb2YoKnNlbmQpLCBzZW5kKTsKKworCXNlbmQtPmZpbHRlcl9mbGFncyA9IG9sZF9maWx0ZXI7CisKKwlpZiAocmV0KQorCQlJV0xfRVJSKHByaXYsICJFcnJvciBjbGVhcmluZyBBU1NPQ19NU0sgb24gQlNTICglZClcbiIsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGl3bGFnbl9kaXNhYmxlX3BhbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkgICAgICBzdHJ1Y3QgaXdsX3J4b25fY29udGV4dCAqY3R4LAorCQkJICAgICAgc3RydWN0IGl3bF9yeG9uX2NtZCAqc2VuZCkKK3sKKwlfX2xlMzIgb2xkX2ZpbHRlciA9IHNlbmQtPmZpbHRlcl9mbGFnczsKKwl1OCBvbGRfZGV2X3R5cGUgPSBzZW5kLT5kZXZfdHlwZTsKKwlpbnQgcmV0OworCisJc2VuZC0+ZmlsdGVyX2ZsYWdzICY9IH5SWE9OX0ZJTFRFUl9BU1NPQ19NU0s7CisJc2VuZC0+ZGV2X3R5cGUgPSBSWE9OX0RFVl9UWVBFX1AyUDsKKwlyZXQgPSBpd2xfc2VuZF9jbWRfcGR1KHByaXYsIGN0eC0+cnhvbl9jbWQsIHNpemVvZigqc2VuZCksIHNlbmQpOworCisJc2VuZC0+ZmlsdGVyX2ZsYWdzID0gb2xkX2ZpbHRlcjsKKwlzZW5kLT5kZXZfdHlwZSA9IG9sZF9kZXZfdHlwZTsKKworCWlmIChyZXQpCisJCUlXTF9FUlIocHJpdiwgIkVycm9yIGRpc2FibGluZyBQQU4gKCVkKVxuIiwgcmV0KTsKKworCS8qIEZJWE1FOiBXQUlUIEZPUiBQQU4gRElTQUJMRSAqLworCW1zbGVlcCgzMDApOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgaXdsYWduX3VwZGF0ZV9xb3Moc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJICAgICAgc3RydWN0IGl3bF9yeG9uX2NvbnRleHQgKmN0eCkKK3sKKwlpbnQgcmV0OworCisJaWYgKCFjdHgtPmlzX2FjdGl2ZSkKKwkJcmV0dXJuOworCisJY3R4LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0ucW9zX2ZsYWdzID0gMDsKKworCWlmIChjdHgtPnFvc19kYXRhLnFvc19hY3RpdmUpCisJCWN0eC0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLnFvc19mbGFncyB8PQorCQkJUU9TX1BBUkFNX0ZMR19VUERBVEVfRURDQV9NU0s7CisKKwlpZiAoY3R4LT5odC5lbmFibGVkKQorCQljdHgtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5xb3NfZmxhZ3MgfD0gUU9TX1BBUkFNX0ZMR19UR05fTVNLOworCisJSVdMX0RFQlVHX1FPUyhwcml2LCAic2VuZCBRb1MgY21kIHdpdGggUW9zIGFjdGl2ZT0lZCBGTEFHUz0weCVYXG4iLAorCQkgICAgICBjdHgtPnFvc19kYXRhLnFvc19hY3RpdmUsCisJCSAgICAgIGN0eC0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLnFvc19mbGFncyk7CisKKwlyZXQgPSBpd2xfc2VuZF9jbWRfcGR1KHByaXYsIGN0eC0+cW9zX2NtZCwKKwkJCSAgICAgICBzaXplb2Yoc3RydWN0IGl3bF9xb3NwYXJhbV9jbWQpLAorCQkJICAgICAgICZjdHgtPnFvc19kYXRhLmRlZl9xb3NfcGFybSk7CisJaWYgKHJldCkKKwkJSVdMX0VSUihwcml2LCAiRmFpbGVkIHRvIHVwZGF0ZSBRb1NcbiIpOworfQorCitzdGF0aWMgaW50IGl3bGFnbl91cGRhdGVfYmVhY29uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQoreworCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJnByaXYtPm11dGV4KTsKKworCWRldl9rZnJlZV9za2IocHJpdi0+YmVhY29uX3NrYik7CisJcHJpdi0+YmVhY29uX3NrYiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KHByaXYtPmh3LCB2aWYpOworCWlmICghcHJpdi0+YmVhY29uX3NrYikKKwkJcmV0dXJuIC1FTk9NRU07CisJcmV0dXJuIGl3bGFnbl9zZW5kX2JlYWNvbl9jbWQocHJpdik7Cit9CisKKy8qKgorICogaXdsYWduX2NvbW1pdF9yeG9uIC0gY29tbWl0IHN0YWdpbmdfcnhvbiB0byBoYXJkd2FyZQorICoKKyAqIFRoZSBSWE9OIGNvbW1hbmQgaW4gc3RhZ2luZ19yeG9uIGlzIGNvbW1pdHRlZCB0byB0aGUgaGFyZHdhcmUgYW5kCisgKiB0aGUgYWN0aXZlX3J4b24gc3RydWN0dXJlIGlzIHVwZGF0ZWQgd2l0aCB0aGUgbmV3IGRhdGEuICBUaGlzCisgKiBmdW5jdGlvbiBjb3JyZWN0bHkgdHJhbnNpdGlvbnMgb3V0IG9mIHRoZSBSWE9OX0FTU09DX01TSyBzdGF0ZSBpZgorICogYSBIVyB0dW5lIGlzIHJlcXVpcmVkIGJhc2VkIG9uIHRoZSBSWE9OIHN0cnVjdHVyZSBjaGFuZ2VzLgorICovCitpbnQgaXdsYWduX2NvbW1pdF9yeG9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF9yeG9uX2NvbnRleHQgKmN0eCkKK3sKKwkvKiBjYXN0IGF3YXkgdGhlIGNvbnN0IGZvciBhY3RpdmVfcnhvbiBpbiB0aGlzIGZ1bmN0aW9uICovCisJc3RydWN0IGl3bF9yeG9uX2NtZCAqYWN0aXZlID0gKHZvaWQgKikmY3R4LT5hY3RpdmU7CisJYm9vbCBuZXdfYXNzb2MgPSAhIShjdHgtPnN0YWdpbmcuZmlsdGVyX2ZsYWdzICYgUlhPTl9GSUxURVJfQVNTT0NfTVNLKTsKKwlib29sIG9sZF9hc3NvYyA9ICEhKGN0eC0+YWN0aXZlLmZpbHRlcl9mbGFncyAmIFJYT05fRklMVEVSX0FTU09DX01TSyk7CisJaW50IHJldDsKKworCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJnByaXYtPm11dGV4KTsKKworCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIWl3bF9pc19hbGl2ZShwcml2KSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCS8qIFRoaXMgZnVuY3Rpb24gaGFyZGNvZGVzIGEgYnVuY2ggb2YgZHVhbC1tb2RlIGFzc3VtcHRpb25zICovCisJQlVJTERfQlVHX09OKE5VTV9JV0xfUlhPTl9DVFggIT0gMik7CisKKwlpZiAoIWN0eC0+aXNfYWN0aXZlKQorCQlyZXR1cm4gMDsKKworCS8qIGFsd2F5cyBnZXQgdGltZXN0YW1wIHdpdGggUnggZnJhbWUgKi8KKwljdHgtPnN0YWdpbmcuZmxhZ3MgfD0gUlhPTl9GTEdfVFNGMkhPU1RfTVNLOworCisJaWYgKChjdHgtPnZpZiAmJiBjdHgtPnZpZi0+YnNzX2NvbmYudXNlX3Nob3J0X3Nsb3QpIHx8CisJICAgICEoY3R4LT5zdGFnaW5nLmZsYWdzICYgUlhPTl9GTEdfQkFORF8yNEdfTVNLKSkKKwkJY3R4LT5zdGFnaW5nLmZsYWdzIHw9IFJYT05fRkxHX1NIT1JUX1NMT1RfTVNLOworCWVsc2UKKwkJY3R4LT5zdGFnaW5nLmZsYWdzICY9IH5SWE9OX0ZMR19TSE9SVF9TTE9UX01TSzsKKworCXJldCA9IGl3bF9jaGVja19yeG9uX2NtZChwcml2LCBjdHgpOworCWlmIChyZXQpIHsKKwkJSVdMX0VSUihwcml2LCAiSW52YWxpZCBSWE9OIGNvbmZpZ3VyYXRpb24uIE5vdCBjb21taXR0aW5nLlxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qCisJICogcmVjZWl2ZSBjb21taXRfcnhvbiByZXF1ZXN0CisJICogYWJvcnQgYW55IHByZXZpb3VzIGNoYW5uZWwgc3dpdGNoIGlmIHN0aWxsIGluIHByb2Nlc3MKKwkgKi8KKwlpZiAocHJpdi0+c3dpdGNoX3J4b24uc3dpdGNoX2luX3Byb2dyZXNzICYmCisJICAgIChwcml2LT5zd2l0Y2hfcnhvbi5jaGFubmVsICE9IGN0eC0+c3RhZ2luZy5jaGFubmVsKSkgeworCQlJV0xfREVCVUdfMTFIKHByaXYsICJhYm9ydCBjaGFubmVsIHN3aXRjaCBvbiAlZFxuIiwKKwkJICAgICAgbGUxNl90b19jcHUocHJpdi0+c3dpdGNoX3J4b24uY2hhbm5lbCkpOworCQlpd2xfY2hzd2l0Y2hfZG9uZShwcml2LCBmYWxzZSk7CisJfQorCisJLyoKKwkgKiBJZiB3ZSBkb24ndCBuZWVkIHRvIHNlbmQgYSBmdWxsIFJYT04sIHdlIGNhbiB1c2UKKwkgKiBpd2xfcnhvbl9hc3NvY19jbWQgd2hpY2ggaXMgdXNlZCB0byByZWNvbmZpZ3VyZSBmaWx0ZXIKKwkgKiBhbmQgb3RoZXIgZmxhZ3MgZm9yIHRoZSBjdXJyZW50IHJhZGlvIGNvbmZpZ3VyYXRpb24uCisJICovCisJaWYgKCFpd2xfZnVsbF9yeG9uX3JlcXVpcmVkKHByaXYsIGN0eCkpIHsKKwkJcmV0ID0gaXdsX3NlbmRfcnhvbl9hc3NvYyhwcml2LCBjdHgpOworCQlpZiAocmV0KSB7CisJCQlJV0xfRVJSKHByaXYsICJFcnJvciBzZXR0aW5nIFJYT05fQVNTT0MgKCVkKVxuIiwgcmV0KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQltZW1jcHkoYWN0aXZlLCAmY3R4LT5zdGFnaW5nLCBzaXplb2YoKmFjdGl2ZSkpOworCQlpd2xfcHJpbnRfcnhfY29uZmlnX2NtZChwcml2LCBjdHgpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAocHJpdi0+Y2ZnLT5vcHMtPmhjbWQtPnNldF9wYW5fcGFyYW1zKSB7CisJCXJldCA9IHByaXYtPmNmZy0+b3BzLT5oY21kLT5zZXRfcGFuX3BhcmFtcyhwcml2KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJaXdsX3NldF9yeG9uX2h3Y3J5cHRvKHByaXYsIGN0eCwgIXByaXYtPmNmZy0+bW9kX3BhcmFtcy0+c3dfY3J5cHRvKTsKKworCUlXTF9ERUJVR19JTkZPKHByaXYsCisJCSAgICAgICAiR29pbmcgdG8gY29tbWl0IFJYT05cbiIKKwkJICAgICAgICIgICogd2l0aCVzIFJYT05fRklMVEVSX0FTU09DX01TS1xuIgorCQkgICAgICAgIiAgKiBjaGFubmVsID0gJWRcbiIKKwkJICAgICAgICIgICogYnNzaWQgPSAlcE1cbiIsCisJCSAgICAgICAobmV3X2Fzc29jID8gIiIgOiAib3V0IiksCisJCSAgICAgICBsZTE2X3RvX2NwdShjdHgtPnN0YWdpbmcuY2hhbm5lbCksCisJCSAgICAgICBjdHgtPnN0YWdpbmcuYnNzaWRfYWRkcik7CisKKwkvKgorCSAqIEFsd2F5cyBjbGVhciBhc3NvY2lhdGVkIGZpcnN0LCBidXQgd2l0aCB0aGUgY29ycmVjdCBjb25maWcuCisJICogVGhpcyBpcyByZXF1aXJlZCBhcyBmb3IgZXhhbXBsZSBzdGF0aW9uIGFkZGl0aW9uIGZvciB0aGUKKwkgKiBBUCBzdGF0aW9uIG11c3QgYmUgZG9uZSBhZnRlciB0aGUgQlNTSUQgaXMgc2V0IHRvIGNvcnJlY3RseQorCSAqIHNldCB1cCBmaWx0ZXJzIGluIHRoZSBkZXZpY2UuCisJICovCisJaWYgKChvbGRfYXNzb2MgJiYgbmV3X2Fzc29jKSB8fCAhbmV3X2Fzc29jKSB7CisJCWlmIChjdHgtPmN0eGlkID09IElXTF9SWE9OX0NUWF9CU1MpCisJCQlyZXQgPSBpd2xhZ25fZGlzYWJsZV9ic3MocHJpdiwgY3R4LCAmY3R4LT5zdGFnaW5nKTsKKwkJZWxzZQorCQkJcmV0ID0gaXdsYWduX2Rpc2FibGVfcGFuKHByaXYsIGN0eCwgJmN0eC0+c3RhZ2luZyk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCW1lbWNweShhY3RpdmUsICZjdHgtPnN0YWdpbmcsIHNpemVvZigqYWN0aXZlKSk7CisKKwkJLyoKKwkJICogVW4tYXNzb2MgUlhPTiBjbGVhcnMgdGhlIHN0YXRpb24gdGFibGUgYW5kIFdFUAorCQkgKiBrZXlzLCBzbyB3ZSBoYXZlIHRvIHJlc3RvcmUgdGhvc2UgYWZ0ZXJ3YXJkcy4KKwkJICovCisJCWl3bF9jbGVhcl91Y29kZV9zdGF0aW9ucyhwcml2LCBjdHgpOworCQlpd2xfcmVzdG9yZV9zdGF0aW9ucyhwcml2LCBjdHgpOworCQlyZXQgPSBpd2xfcmVzdG9yZV9kZWZhdWx0X3dlcF9rZXlzKHByaXYsIGN0eCk7CisJCWlmIChyZXQpIHsKKwkJCUlXTF9FUlIocHJpdiwgIkZhaWxlZCB0byByZXN0b3JlIFdFUCBrZXlzICglZClcbiIsIHJldCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJLyogUlhPTiB0aW1pbmcgbXVzdCBiZSBiZWZvcmUgYXNzb2NpYXRlZCBSWE9OICovCisJcmV0ID0gaXdsX3NlbmRfcnhvbl90aW1pbmcocHJpdiwgY3R4KTsKKwlpZiAocmV0KSB7CisJCUlXTF9FUlIocHJpdiwgIkZhaWxlZCB0byBzZW5kIHRpbWluZyAoJWQpIVxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlpZiAobmV3X2Fzc29jKSB7CisJCS8qIFFvUyBpbmZvIG1heSBiZSBjbGVhcmVkIGJ5IHByZXZpb3VzIHVuLWFzc29jIFJYT04gKi8KKwkJaXdsYWduX3VwZGF0ZV9xb3MocHJpdiwgY3R4KTsKKworCQkvKgorCQkgKiBXZSdsbCBydW4gaW50byB0aGlzIGNvZGUgcGF0aCB3aGVuIGJlYWNvbmluZyBpcworCQkgKiBlbmFibGVkLCBidXQgdGhlbiB3ZSBhbHNvIG5lZWQgdG8gc2VuZCB0aGUgYmVhY29uCisJCSAqIHRvIHRoZSBkZXZpY2UuCisJCSAqLworCQlpZiAoY3R4LT52aWYgJiYgKGN0eC0+dmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKSkgeworCQkJcmV0ID0gaXdsYWduX3VwZGF0ZV9iZWFjb24ocHJpdiwgY3R4LT52aWYpOworCQkJaWYgKHJldCkgeworCQkJCUlXTF9FUlIocHJpdiwKKwkJCQkJIkVycm9yIHNlbmRpbmcgcmVxdWlyZWQgYmVhY29uICglZCkhXG4iLAorCQkJCQlyZXQpOworCQkJCXJldHVybiByZXQ7CisJCQl9CisJCX0KKworCQlwcml2LT5zdGFydF9jYWxpYiA9IDA7CisJCS8qCisJCSAqIEFwcGx5IHRoZSBuZXcgY29uZmlndXJhdGlvbi4KKwkJICoKKwkJICogQXNzb2NpYXRlZCBSWE9OIGRvZXNuJ3QgY2xlYXIgdGhlIHN0YXRpb24gdGFibGUgaW4gdUNvZGUsCisJCSAqIHNvIHdlIGRvbid0IG5lZWQgdG8gcmVzdG9yZSBzdGF0aW9ucyBldGMuIGFmdGVyIHRoaXMuCisJCSAqLworCQlyZXQgPSBpd2xfc2VuZF9jbWRfcGR1KHByaXYsIGN0eC0+cnhvbl9jbWQsCisJCQkgICAgICBzaXplb2Yoc3RydWN0IGl3bF9yeG9uX2NtZCksICZjdHgtPnN0YWdpbmcpOworCQlpZiAocmV0KSB7CisJCQlJV0xfRVJSKHByaXYsICJFcnJvciBzZXR0aW5nIG5ldyBSWE9OICglZClcbiIsIHJldCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJCW1lbWNweShhY3RpdmUsICZjdHgtPnN0YWdpbmcsIHNpemVvZigqYWN0aXZlKSk7CisKKwkJaXdsX3JlcHJvZ3JhbV9hcF9zdGEocHJpdiwgY3R4KTsKKworCQkvKiBJQlNTIGJlYWNvbiBuZWVkcyB0byBiZSBzZW50IGFmdGVyIHNldHRpbmcgYXNzb2MgKi8KKwkJaWYgKGN0eC0+dmlmICYmIChjdHgtPnZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykpCisJCQlpZiAoaXdsYWduX3VwZGF0ZV9iZWFjb24ocHJpdiwgY3R4LT52aWYpKQorCQkJCUlXTF9FUlIocHJpdiwgIkVycm9yIHNlbmRpbmcgSUJTUyBiZWFjb25cbiIpOworCX0KKworCWl3bF9wcmludF9yeF9jb25maWdfY21kKHByaXYsIGN0eCk7CisKKwlpd2xfaW5pdF9zZW5zaXRpdml0eShwcml2KTsKKworCS8qCisJICogSWYgd2UgaXNzdWUgYSBuZXcgUlhPTiBjb21tYW5kIHdoaWNoIHJlcXVpcmVkIGEgdHVuZSB0aGVuIHdlIG11c3QKKwkgKiBzZW5kIGEgbmV3IFRYUE9XRVIgY29tbWFuZCBvciB3ZSB3b24ndCBiZSBhYmxlIHRvIFR4IGFueSBmcmFtZXMuCisJICoKKwkgKiBGSVhNRTogd2hpY2ggUlhPTiByZXF1aXJlcyBhIHR1bmU/IENhbiB3ZSBvcHRpbWlzZSB0aGlzIG91dCBpbgorCSAqICAgICAgICBzb21lIGNhc2VzPworCSAqLworCXJldCA9IGl3bF9zZXRfdHhfcG93ZXIocHJpdiwgcHJpdi0+dHhfcG93ZXJfdXNlcl9sbXQsIHRydWUpOworCWlmIChyZXQpIHsKKwkJSVdMX0VSUihwcml2LCAiRXJyb3Igc2VuZGluZyBUWCBwb3dlciAoJWQpXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitpbnQgaXdsYWduX21hY19jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiBjaGFuZ2VkKQoreworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCXN0cnVjdCBpd2xfcnhvbl9jb250ZXh0ICpjdHg7CisJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmh3LT5jb25mOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCA9IGNvbmYtPmNoYW5uZWw7CisJY29uc3Qgc3RydWN0IGl3bF9jaGFubmVsX2luZm8gKmNoX2luZm87CisJaW50IHJldCA9IDA7CisJYm9vbCBodF9jaGFuZ2VkW05VTV9JV0xfUlhPTl9DVFhdID0ge307CisKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImNoYW5nZWQgJSN4IiwgY2hhbmdlZCk7CisKKwltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CisKKwlpZiAodW5saWtlbHkodGVzdF9iaXQoU1RBVFVTX1NDQU5OSU5HLCAmcHJpdi0+c3RhdHVzKSkpIHsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIHNjYW5uaW5nXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKCFpd2xfaXNfcmVhZHkocHJpdikpIHsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIG5vdCByZWFkeVxuIik7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChjaGFuZ2VkICYgKElFRUU4MDIxMV9DT05GX0NIQU5HRV9TTVBTIHwKKwkJICAgICAgIElFRUU4MDIxMV9DT05GX0NIQU5HRV9DSEFOTkVMKSkgeworCQkvKiBtYWM4MDIxMSB1c2VzIHN0YXRpYyBmb3Igbm9uLUhUIHdoaWNoIGlzIHdoYXQgd2Ugd2FudCAqLworCQlwcml2LT5jdXJyZW50X2h0X2NvbmZpZy5zbXBzID0gY29uZi0+c21wc19tb2RlOworCisJCS8qCisJCSAqIFJlY2FsY3VsYXRlIGNoYWluIGNvdW50cy4KKwkJICoKKwkJICogSWYgbW9uaXRvciBtb2RlIGlzIGVuYWJsZWQgdGhlbiBtYWM4MDIxMSB3aWxsCisJCSAqIHNldCB1cCB0aGUgU00gUFMgbW9kZSB0byBPRkYgaWYgYW4gSFQgY2hhbm5lbCBpcworCQkgKiBjb25maWd1cmVkLgorCQkgKi8KKwkJaWYgKHByaXYtPmNmZy0+b3BzLT5oY21kLT5zZXRfcnhvbl9jaGFpbikKKwkJCWZvcl9lYWNoX2NvbnRleHQocHJpdiwgY3R4KQorCQkJCXByaXYtPmNmZy0+b3BzLT5oY21kLT5zZXRfcnhvbl9jaGFpbihwcml2LCBjdHgpOworCX0KKworCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0NIQU5ORUwpIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCQljaF9pbmZvID0gaXdsX2dldF9jaGFubmVsX2luZm8ocHJpdiwgY2hhbm5lbC0+YmFuZCwKKwkJCQkJICAgICAgIGNoYW5uZWwtPmh3X3ZhbHVlKTsKKwkJaWYgKCFpc19jaGFubmVsX3ZhbGlkKGNoX2luZm8pKSB7CisJCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlIC0gaW52YWxpZCBjaGFubmVsXG4iKTsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwkJZm9yX2VhY2hfY29udGV4dChwcml2LCBjdHgpIHsKKwkJCS8qIENvbmZpZ3VyZSBIVDQwIGNoYW5uZWxzICovCisJCQlpZiAoY3R4LT5odC5lbmFibGVkICE9IGNvbmZfaXNfaHQoY29uZikpIHsKKwkJCQljdHgtPmh0LmVuYWJsZWQgPSBjb25mX2lzX2h0KGNvbmYpOworCQkJCWh0X2NoYW5nZWRbY3R4LT5jdHhpZF0gPSB0cnVlOworCQkJfQorCisJCQlpZiAoY3R4LT5odC5lbmFibGVkKSB7CisJCQkJaWYgKGNvbmZfaXNfaHQ0MF9taW51cyhjb25mKSkgeworCQkJCQljdHgtPmh0LmV4dGVuc2lvbl9jaGFuX29mZnNldCA9CisJCQkJCQlJRUVFODAyMTFfSFRfUEFSQU1fQ0hBX1NFQ19CRUxPVzsKKwkJCQkJY3R4LT5odC5pc180MG1oeiA9IHRydWU7CisJCQkJfSBlbHNlIGlmIChjb25mX2lzX2h0NDBfcGx1cyhjb25mKSkgeworCQkJCQljdHgtPmh0LmV4dGVuc2lvbl9jaGFuX29mZnNldCA9CisJCQkJCQlJRUVFODAyMTFfSFRfUEFSQU1fQ0hBX1NFQ19BQk9WRTsKKwkJCQkJY3R4LT5odC5pc180MG1oeiA9IHRydWU7CisJCQkJfSBlbHNlIHsKKwkJCQkJY3R4LT5odC5leHRlbnNpb25fY2hhbl9vZmZzZXQgPQorCQkJCQkJSUVFRTgwMjExX0hUX1BBUkFNX0NIQV9TRUNfTk9ORTsKKwkJCQkJY3R4LT5odC5pc180MG1oeiA9IGZhbHNlOworCQkJCX0KKwkJCX0gZWxzZQorCQkJCWN0eC0+aHQuaXNfNDBtaHogPSBmYWxzZTsKKworCQkJLyoKKwkJCSAqIERlZmF1bHQgdG8gbm8gcHJvdGVjdGlvbi4gUHJvdGVjdGlvbiBtb2RlIHdpbGwKKwkJCSAqIGxhdGVyIGJlIHNldCBmcm9tIEJTUyBjb25maWcgaW4gaXdsX2h0X2NvbmYKKwkJCSAqLworCQkJY3R4LT5odC5wcm90ZWN0aW9uID0gSUVFRTgwMjExX0hUX09QX01PREVfUFJPVEVDVElPTl9OT05FOworCisJCQkvKiBpZiB3ZSBhcmUgc3dpdGNoaW5nIGZyb20gaHQgdG8gMi40IGNsZWFyIGZsYWdzCisJCQkgKiBmcm9tIGFueSBodCByZWxhdGVkIGluZm8gc2luY2UgMi40IGRvZXMgbm90CisJCQkgKiBzdXBwb3J0IGh0ICovCisJCQlpZiAobGUxNl90b19jcHUoY3R4LT5zdGFnaW5nLmNoYW5uZWwpICE9CisJCQkgICAgY2hhbm5lbC0+aHdfdmFsdWUpCisJCQkJY3R4LT5zdGFnaW5nLmZsYWdzID0gMDsKKworCQkJaXdsX3NldF9yeG9uX2NoYW5uZWwocHJpdiwgY2hhbm5lbCwgY3R4KTsKKwkJCWl3bF9zZXRfcnhvbl9odChwcml2LCAmcHJpdi0+Y3VycmVudF9odF9jb25maWcpOworCisJCQlpd2xfc2V0X2ZsYWdzX2Zvcl9iYW5kKHByaXYsIGN0eCwgY2hhbm5lbC0+YmFuZCwKKwkJCQkJICAgICAgIGN0eC0+dmlmKTsKKwkJfQorCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCQlpd2xfdXBkYXRlX2JjYXN0X3N0YXRpb25zKHByaXYpOworCisJCS8qCisJCSAqIFRoZSBsaXN0IG9mIHN1cHBvcnRlZCByYXRlcyBhbmQgcmF0ZSBtYXNrIGNhbiBiZSBkaWZmZXJlbnQKKwkJICogZm9yIGVhY2ggYmFuZDsgc2luY2UgdGhlIGJhbmQgbWF5IGhhdmUgY2hhbmdlZCwgcmVzZXQKKwkJICogdGhlIHJhdGUgbWFzayB0byB3aGF0IG1hYzgwMjExIGxpc3RzLgorCQkgKi8KKwkJaXdsX3NldF9yYXRlKHByaXYpOworCX0KKworCWlmIChjaGFuZ2VkICYgKElFRUU4MDIxMV9DT05GX0NIQU5HRV9QUyB8CisJCQlJRUVFODAyMTFfQ09ORl9DSEFOR0VfSURMRSkpIHsKKwkJcmV0ID0gaXdsX3Bvd2VyX3VwZGF0ZV9tb2RlKHByaXYsIGZhbHNlKTsKKwkJaWYgKHJldCkKKwkJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiRXJyb3Igc2V0dGluZyBzbGVlcCBsZXZlbFxuIik7CisJfQorCisJaWYgKGNoYW5nZWQgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUE9XRVIpIHsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJUWCBQb3dlciBvbGQ9JWQgbmV3PSVkXG4iLAorCQkJcHJpdi0+dHhfcG93ZXJfdXNlcl9sbXQsIGNvbmYtPnBvd2VyX2xldmVsKTsKKworCQlpd2xfc2V0X3R4X3Bvd2VyKHByaXYsIGNvbmYtPnBvd2VyX2xldmVsLCBmYWxzZSk7CisJfQorCisJZm9yX2VhY2hfY29udGV4dChwcml2LCBjdHgpIHsKKwkJaWYgKCFtZW1jbXAoJmN0eC0+c3RhZ2luZywgJmN0eC0+YWN0aXZlLCBzaXplb2YoY3R4LT5zdGFnaW5nKSkpCisJCQljb250aW51ZTsKKwkJaXdsYWduX2NvbW1pdF9yeG9uKHByaXYsIGN0eCk7CisJCWlmIChodF9jaGFuZ2VkW2N0eC0+Y3R4aWRdKQorCQkJaXdsYWduX3VwZGF0ZV9xb3MocHJpdiwgY3R4KTsKKwl9Cisgb3V0OgorCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGl3bGFnbl9jaGVja19uZWVkZWRfY2hhaW5zKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkgICAgICAgc3RydWN0IGl3bF9yeG9uX2NvbnRleHQgKmN0eCwKKwkJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqYnNzX2NvbmYpCit7CisJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiA9IGN0eC0+dmlmOworCXN0cnVjdCBpd2xfcnhvbl9jb250ZXh0ICp0bXA7CisJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YTsKKwlzdHJ1Y3QgaXdsX2h0X2NvbmZpZyAqaHRfY29uZiA9ICZwcml2LT5jdXJyZW50X2h0X2NvbmZpZzsKKwlib29sIG5lZWRfbXVsdGlwbGU7CisKKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZwcml2LT5tdXRleCk7CisKKwlzd2l0Y2ggKHZpZi0+dHlwZSkgeworCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKKwkJcmN1X3JlYWRfbG9jaygpOworCQlzdGEgPSBpZWVlODAyMTFfZmluZF9zdGEodmlmLCBic3NfY29uZi0+YnNzaWQpOworCQlpZiAoc3RhKSB7CisJCQlzdHJ1Y3QgaWVlZTgwMjExX3N0YV9odF9jYXAgKmh0X2NhcCA9ICZzdGEtPmh0X2NhcDsKKwkJCWludCBtYXhzdHJlYW1zOworCisJCQltYXhzdHJlYW1zID0gKGh0X2NhcC0+bWNzLnR4X3BhcmFtcyAmCisJCQkJICAgICAgSUVFRTgwMjExX0hUX01DU19UWF9NQVhfU1RSRUFNU19NQVNLKQorCQkJCQk+PiBJRUVFODAyMTFfSFRfTUNTX1RYX01BWF9TVFJFQU1TX1NISUZUOworCQkJbWF4c3RyZWFtcyArPSAxOworCisJCQluZWVkX211bHRpcGxlID0gdHJ1ZTsKKworCQkJaWYgKChodF9jYXAtPm1jcy5yeF9tYXNrWzFdID09IDApICYmCisJCQkgICAgKGh0X2NhcC0+bWNzLnJ4X21hc2tbMl0gPT0gMCkpCisJCQkJbmVlZF9tdWx0aXBsZSA9IGZhbHNlOworCQkJaWYgKG1heHN0cmVhbXMgPD0gMSkKKwkJCQluZWVkX211bHRpcGxlID0gZmFsc2U7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogSWYgYXQgYWxsLCB0aGlzIGNhbiBvbmx5IGhhcHBlbiB0aHJvdWdoIGEgcmFjZQorCQkJICogd2hlbiB0aGUgQVAgZGlzY29ubmVjdHMgdXMgd2hpbGUgd2UncmUgc3RpbGwKKwkJCSAqIHNldHRpbmcgdXAgdGhlIGNvbm5lY3Rpb24sIGluIHRoYXQgY2FzZSBtYWM4MDIxMQorCQkJICogd2lsbCBzb29uIHRlbGwgdXMgYWJvdXQgdGhhdC4KKwkJCSAqLworCQkJbmVlZF9tdWx0aXBsZSA9IGZhbHNlOworCQl9CisJCXJjdV9yZWFkX3VubG9jaygpOworCQlicmVhazsKKwljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgorCQkvKiBjdXJyZW50bHkgKi8KKwkJbmVlZF9tdWx0aXBsZSA9IGZhbHNlOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBvbmx5IEFQIHJlYWxseSAqLworCQluZWVkX211bHRpcGxlID0gdHJ1ZTsKKwkJYnJlYWs7CisJfQorCisJY3R4LT5odF9uZWVkX211bHRpcGxlX2NoYWlucyA9IG5lZWRfbXVsdGlwbGU7CisKKwlpZiAoIW5lZWRfbXVsdGlwbGUpIHsKKwkJLyogY2hlY2sgYWxsIGNvbnRleHRzICovCisJCWZvcl9lYWNoX2NvbnRleHQocHJpdiwgdG1wKSB7CisJCQlpZiAoIXRtcC0+dmlmKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKHRtcC0+aHRfbmVlZF9tdWx0aXBsZV9jaGFpbnMpIHsKKwkJCQluZWVkX211bHRpcGxlID0gdHJ1ZTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCWh0X2NvbmYtPnNpbmdsZV9jaGFpbl9zdWZmaWNpZW50ID0gIW5lZWRfbXVsdGlwbGU7Cit9CisKK3ZvaWQgaXdsYWduX2Jzc19pbmZvX2NoYW5nZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmJzc19jb25mLAorCQkJICAgICB1MzIgY2hhbmdlcykKK3sKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgaXdsX3J4b25fY29udGV4dCAqY3R4ID0gaXdsX3J4b25fY3R4X2Zyb21fdmlmKHZpZik7CisJaW50IHJldDsKKwlib29sIGZvcmNlID0gZmFsc2U7CisKKwltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CisKKwlpZiAodW5saWtlbHkoIWl3bF9pc19yZWFkeShwcml2KSkpIHsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIG5vdCByZWFkeVxuIik7CisJCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOworCQlyZXR1cm47CisgICAgICAgIH0KKworCWlmICh1bmxpa2VseSghY3R4LT52aWYpKSB7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSB2aWYgaXMgTlVMTFxuIik7CisJCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOworCQlyZXR1cm47CisJfQorCisJaWYgKGNoYW5nZXMgJiBCU1NfQ0hBTkdFRF9CRUFDT05fSU5UKQorCQlmb3JjZSA9IHRydWU7CisKKwlpZiAoY2hhbmdlcyAmIEJTU19DSEFOR0VEX1FPUykgeworCQljdHgtPnFvc19kYXRhLnFvc19hY3RpdmUgPSBic3NfY29uZi0+cW9zOworCQlpd2xhZ25fdXBkYXRlX3Fvcyhwcml2LCBjdHgpOworCX0KKworCWN0eC0+c3RhZ2luZy5hc3NvY19pZCA9IGNwdV90b19sZTE2KHZpZi0+YnNzX2NvbmYuYWlkKTsKKwlpZiAodmlmLT5ic3NfY29uZi51c2Vfc2hvcnRfcHJlYW1ibGUpCisJCWN0eC0+c3RhZ2luZy5mbGFncyB8PSBSWE9OX0ZMR19TSE9SVF9QUkVBTUJMRV9NU0s7CisJZWxzZQorCQljdHgtPnN0YWdpbmcuZmxhZ3MgJj0gflJYT05fRkxHX1NIT1JUX1BSRUFNQkxFX01TSzsKKworCWlmIChjaGFuZ2VzICYgQlNTX0NIQU5HRURfQVNTT0MpIHsKKwkJaWYgKGJzc19jb25mLT5hc3NvYykgeworCQkJaXdsX2xlZF9hc3NvY2lhdGUocHJpdik7CisJCQlwcml2LT50aW1lc3RhbXAgPSBic3NfY29uZi0+dGltZXN0YW1wOworCQkJY3R4LT5zdGFnaW5nLmZpbHRlcl9mbGFncyB8PSBSWE9OX0ZJTFRFUl9BU1NPQ19NU0s7CisJCX0gZWxzZSB7CisJCQljdHgtPnN0YWdpbmcuZmlsdGVyX2ZsYWdzICY9IH5SWE9OX0ZJTFRFUl9BU1NPQ19NU0s7CisJCQlpd2xfbGVkX2Rpc2Fzc29jaWF0ZShwcml2KTsKKwkJfQorCX0KKworCWlmIChjdHgtPmh0LmVuYWJsZWQpIHsKKwkJY3R4LT5odC5wcm90ZWN0aW9uID0gYnNzX2NvbmYtPmh0X29wZXJhdGlvbl9tb2RlICYKKwkJCQkJSUVFRTgwMjExX0hUX09QX01PREVfUFJPVEVDVElPTjsKKwkJY3R4LT5odC5ub25fZ2Zfc3RhX3ByZXNlbnQgPSAhIShic3NfY29uZi0+aHRfb3BlcmF0aW9uX21vZGUgJgorCQkJCQlJRUVFODAyMTFfSFRfT1BfTU9ERV9OT05fR0ZfU1RBX1BSU05UKTsKKwkJaXdsYWduX2NoZWNrX25lZWRlZF9jaGFpbnMocHJpdiwgY3R4LCBic3NfY29uZik7CisJCWl3bF9zZXRfcnhvbl9odChwcml2LCAmcHJpdi0+Y3VycmVudF9odF9jb25maWcpOworCX0KKworCWlmIChwcml2LT5jZmctPm9wcy0+aGNtZC0+c2V0X3J4b25fY2hhaW4pCisJCXByaXYtPmNmZy0+b3BzLT5oY21kLT5zZXRfcnhvbl9jaGFpbihwcml2LCBjdHgpOworCisJaWYgKGJzc19jb25mLT51c2VfY3RzX3Byb3QgJiYgKHByaXYtPmJhbmQgIT0gSUVFRTgwMjExX0JBTkRfNUdIWikpCisJCWN0eC0+c3RhZ2luZy5mbGFncyB8PSBSWE9OX0ZMR19UR0dfUFJPVEVDVF9NU0s7CisJZWxzZQorCQljdHgtPnN0YWdpbmcuZmxhZ3MgJj0gflJYT05fRkxHX1RHR19QUk9URUNUX01TSzsKKworCWlmIChic3NfY29uZi0+dXNlX2N0c19wcm90KQorCQljdHgtPnN0YWdpbmcuZmxhZ3MgfD0gUlhPTl9GTEdfU0VMRl9DVFNfRU47CisJZWxzZQorCQljdHgtPnN0YWdpbmcuZmxhZ3MgJj0gflJYT05fRkxHX1NFTEZfQ1RTX0VOOworCisJbWVtY3B5KGN0eC0+c3RhZ2luZy5ic3NpZF9hZGRyLCBic3NfY29uZi0+YnNzaWQsIEVUSF9BTEVOKTsKKworCWlmICh2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVAgfHwKKwkgICAgdmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7CisJCWlmICh2aWYtPmJzc19jb25mLmVuYWJsZV9iZWFjb24pIHsKKwkJCWN0eC0+c3RhZ2luZy5maWx0ZXJfZmxhZ3MgfD0gUlhPTl9GSUxURVJfQVNTT0NfTVNLOworCQkJcHJpdi0+YmVhY29uX2N0eCA9IGN0eDsKKwkJfSBlbHNlIHsKKwkJCWN0eC0+c3RhZ2luZy5maWx0ZXJfZmxhZ3MgJj0gflJYT05fRklMVEVSX0FTU09DX01TSzsKKwkJCXByaXYtPmJlYWNvbl9jdHggPSBOVUxMOworCQl9CisJfQorCisJaWYgKGZvcmNlIHx8IG1lbWNtcCgmY3R4LT5zdGFnaW5nLCAmY3R4LT5hY3RpdmUsIHNpemVvZihjdHgtPnN0YWdpbmcpKSkKKwkJaXdsYWduX2NvbW1pdF9yeG9uKHByaXYsIGN0eCk7CisKKwlpZiAoY2hhbmdlcyAmIEJTU19DSEFOR0VEX0FTU09DICYmIGJzc19jb25mLT5hc3NvYykgeworCQkvKgorCQkgKiBUaGUgY2hhaW4gbm9pc2UgY2FsaWJyYXRpb24gd2lsbCBlbmFibGUgUE0gdXBvbgorCQkgKiBjb21wbGV0aW9uLiBJZiBjYWxpYnJhdGlvbiBoYXMgYWxyZWFkeSBiZWVuIHJ1bgorCQkgKiB0aGVuIHdlIG5lZWQgdG8gZW5hYmxlIHBvd2VyIG1hbmFnZW1lbnQgaGVyZS4KKwkJICovCisJCWlmIChwcml2LT5jaGFpbl9ub2lzZV9kYXRhLnN0YXRlID09IElXTF9DSEFJTl9OT0lTRV9ET05FKQorCQkJaXdsX3Bvd2VyX3VwZGF0ZV9tb2RlKHByaXYsIGZhbHNlKTsKKworCQkvKiBFbmFibGUgUlggZGlmZmVyZW50aWFsIGdhaW4gYW5kIHNlbnNpdGl2aXR5IGNhbGlicmF0aW9ucyAqLworCQlpd2xfY2hhaW5fbm9pc2VfcmVzZXQocHJpdik7CisJCXByaXYtPnN0YXJ0X2NhbGliID0gMTsKKwl9CisKKwlpZiAoY2hhbmdlcyAmIEJTU19DSEFOR0VEX0lCU1MpIHsKKwkJcmV0ID0gaXdsYWduX21hbmFnZV9pYnNzX3N0YXRpb24ocHJpdiwgdmlmLAorCQkJCQkJIGJzc19jb25mLT5pYnNzX2pvaW5lZCk7CisJCWlmIChyZXQpCisJCQlJV0xfRVJSKHByaXYsICJmYWlsZWQgdG8gJXMgSUJTUyBzdGF0aW9uICVwTVxuIiwKKwkJCQlic3NfY29uZi0+aWJzc19qb2luZWQgPyAiYWRkIiA6ICJyZW1vdmUiLAorCQkJCWJzc19jb25mLT5ic3NpZCk7CisJfQorCisJaWYgKGNoYW5nZXMgJiBCU1NfQ0hBTkdFRF9CRUFDT04gJiYgdmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DICYmCisJICAgIHByaXYtPmJlYWNvbl9jdHgpIHsKKwkJaWYgKGl3bGFnbl91cGRhdGVfYmVhY29uKHByaXYsIHZpZikpCisJCQlJV0xfRVJSKHByaXYsICJFcnJvciBzZW5kaW5nIElCU1MgYmVhY29uXG4iKTsKKwl9CisKKwltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKK30KKwordm9pZCBpd2xhZ25fcG9zdF9zY2FuKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwlzdHJ1Y3QgaXdsX3J4b25fY29udGV4dCAqY3R4OworCisJLyoKKwkgKiBTaW5jZSBzZXR0aW5nIHRoZSBSWE9OIG1heSBoYXZlIGJlZW4gZGVmZXJyZWQgd2hpbGUKKwkgKiBwZXJmb3JtaW5nIHRoZSBzY2FuLCBmaXJlIG9uZSBvZmYgaWYgbmVlZGVkCisJICovCisJZm9yX2VhY2hfY29udGV4dChwcml2LCBjdHgpCisJCWlmIChtZW1jbXAoJmN0eC0+c3RhZ2luZywgJmN0eC0+YWN0aXZlLCBzaXplb2YoY3R4LT5zdGFnaW5nKSkpCisJCQlpd2xhZ25fY29tbWl0X3J4b24ocHJpdiwgY3R4KTsKKworCWlmIChwcml2LT5jZmctPm9wcy0+aGNtZC0+c2V0X3Bhbl9wYXJhbXMpCisJCXByaXYtPmNmZy0+b3BzLT5oY21kLT5zZXRfcGFuX3BhcmFtcyhwcml2KTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1zdGEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1zdGEuYwppbmRleCAzNWEzMGQyLi4zNWYwODVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tc3RhLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXN0YS5jCkBAIC02ODQsNyArNjg0LDcgQEAKIAlyZXR1cm4gaXdsX3NlbmRfYWRkX3N0YShwcml2LCAmc3RhX2NtZCwgQ01EX1NZTkMpOwogfQogCi12b2lkIGl3bF9zdGFfbW9kaWZ5X3BzX3dha2Uoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgc3RhX2lkKQorc3RhdGljIHZvaWQgaXdsX3N0YV9tb2RpZnlfcHNfd2FrZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCBzdGFfaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtNzE0LDMgKzcxNCwzMyBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnN0YV9sb2NrLCBmbGFncyk7CiAKIH0KKwordm9pZCBpd2xhZ25fbWFjX3N0YV9ub3RpZnkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJICAgZW51bSBzdGFfbm90aWZ5X2NtZCBjbWQsCisJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKQoreworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCXN0cnVjdCBpd2xfc3RhdGlvbl9wcml2ICpzdGFfcHJpdiA9ICh2b2lkICopc3RhLT5kcnZfcHJpdjsKKwlpbnQgc3RhX2lkOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNUQV9OT1RJRllfU0xFRVA6CisJCVdBUk5fT04oIXN0YV9wcml2LT5jbGllbnQpOworCQlzdGFfcHJpdi0+YXNsZWVwID0gdHJ1ZTsKKwkJaWYgKGF0b21pY19yZWFkKCZzdGFfcHJpdi0+cGVuZGluZ19mcmFtZXMpID4gMCkKKwkJCWllZWU4MDIxMV9zdGFfYmxvY2tfYXdha2UoaHcsIHN0YSwgdHJ1ZSk7CisJCWJyZWFrOworCWNhc2UgU1RBX05PVElGWV9BV0FLRToKKwkJV0FSTl9PTighc3RhX3ByaXYtPmNsaWVudCk7CisJCWlmICghc3RhX3ByaXYtPmFzbGVlcCkKKwkJCWJyZWFrOworCQlzdGFfcHJpdi0+YXNsZWVwID0gZmFsc2U7CisJCXN0YV9pZCA9IGl3bF9zdGFfaWQoc3RhKTsKKwkJaWYgKHN0YV9pZCAhPSBJV0xfSU5WQUxJRF9TVEFUSU9OKQorCQkJaXdsX3N0YV9tb2RpZnlfcHNfd2FrZShwcml2LCBzdGFfaWQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tdHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi10eC5jCmluZGV4IDJiMDc4YTkuLjI0YTExYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi10eC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi10eC5jCkBAIC02Nyw4ICs2NywxNCBAQAogICovCiAKIHN0YXRpYyBjb25zdCB1OCB0aWRfdG9fYWNbXSA9IHsKLQkvKiB0aGlzIG1hdGNoZXMgdGhlIG1hYzgwMjExIG51bWJlcnMgKi8KLQkyLCAzLCAzLCAyLCAxLCAxLCAwLCAwCisJSUVFRTgwMjExX0FDX0JFLAorCUlFRUU4MDIxMV9BQ19CSywKKwlJRUVFODAyMTFfQUNfQkssCisJSUVFRTgwMjExX0FDX0JFLAorCUlFRUU4MDIxMV9BQ19WSSwKKwlJRUVFODAyMTFfQUNfVkksCisJSUVFRTgwMjExX0FDX1ZPLAorCUlFRUU4MDIxMV9BQ19WTwogfTsKIAogc3RhdGljIGlubGluZSBpbnQgZ2V0X2FjX2Zyb21fdGlkKHUxNiB0aWQpCkBAIC01MTgsMTEgKzUyNCwxMSBAQAogCXN0cnVjdCBpd2xfY21kX21ldGEgKm91dF9tZXRhOwogCXN0cnVjdCBpd2xfdHhfY21kICp0eF9jbWQ7CiAJc3RydWN0IGl3bF9yeG9uX2NvbnRleHQgKmN0eCA9ICZwcml2LT5jb250ZXh0c1tJV0xfUlhPTl9DVFhfQlNTXTsKLQlpbnQgc3dxX2lkLCB0eHFfaWQ7CisJaW50IHR4cV9pZDsKIAlkbWFfYWRkcl90IHBoeXNfYWRkcjsKIAlkbWFfYWRkcl90IHR4Y21kX3BoeXM7CiAJZG1hX2FkZHJfdCBzY3JhdGNoX3BoeXM7Ci0JdTE2IGxlbiwgbGVuX29yZywgZmlyc3RsZW4sIHNlY29uZGxlbjsKKwl1MTYgbGVuLCBmaXJzdGxlbiwgc2Vjb25kbGVuOwogCXUxNiBzZXFfbnVtYmVyID0gMDsKIAlfX2xlMTYgZmM7CiAJdTggaGRyX2xlbjsKQEAgLTUzMSw2ICs1MzcsNyBAQAogCXU4IHRpZCA9IDA7CiAJdTggKnFjID0gTlVMTDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCWJvb2wgaXNfYWdnID0gZmFsc2U7CiAKIAlpZiAoaW5mby0+Y29udHJvbC52aWYpCiAJCWN0eCA9IGl3bF9yeG9uX2N0eF9mcm9tX3ZpZihpbmZvLT5jb250cm9sLnZpZik7CkBAIC01NjcsOCArNTc0LDggQEAKIAlpZiAoc3RhKQogCQlzdGFfcHJpdiA9ICh2b2lkICopc3RhLT5kcnZfcHJpdjsKIAotCWlmIChzdGFfcHJpdiAmJiBzdGFfcHJpdi0+YXNsZWVwKSB7Ci0JCVdBUk5fT04oIShpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfUFNQT0xMX1JFU1BPTlNFKSk7CisJaWYgKHN0YV9wcml2ICYmIHN0YV9wcml2LT5hc2xlZXAgJiYKKwkgICAgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9QU1BPTExfUkVTUE9OU0UpKSB7CiAJCS8qCiAJCSAqIFRoaXMgc2VuZHMgYW4gYXN5bmNocm9ub3VzIGNvbW1hbmQgdG8gdGhlIGRldmljZSwKIAkJICogYnV0IHdlIGNhbiByZWx5IG9uIGl0IGJlaW5nIHByb2Nlc3NlZCBiZWZvcmUgdGhlCkBAIC02MTYsMTEgKzYyMywxMSBAQAogCQlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FNUERVICYmCiAJCSAgICBwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnRpZFt0aWRdLmFnZy5zdGF0ZSA9PSBJV0xfQUdHX09OKSB7CiAJCQl0eHFfaWQgPSBwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnRpZFt0aWRdLmFnZy50eHFfaWQ7CisJCQlpc19hZ2cgPSB0cnVlOwogCQl9CiAJfQogCiAJdHhxID0gJnByaXYtPnR4cVt0eHFfaWRdOwotCXN3cV9pZCA9IHR4cS0+c3dxX2lkOwogCXEgPSAmdHhxLT5xOwogCiAJaWYgKHVubGlrZWx5KGl3bF9xdWV1ZV9zcGFjZShxKSA8IHEtPmhpZ2hfbWFyaykpIHsKQEAgLTY4NywzMCArNjk0LDIzIEBACiAJICovCiAJbGVuID0gc2l6ZW9mKHN0cnVjdCBpd2xfdHhfY21kKSArCiAJCXNpemVvZihzdHJ1Y3QgaXdsX2NtZF9oZWFkZXIpICsgaGRyX2xlbjsKLQotCWxlbl9vcmcgPSBsZW47Ci0JZmlyc3RsZW4gPSBsZW4gPSAobGVuICsgMykgJiB+MzsKLQotCWlmIChsZW5fb3JnICE9IGxlbikKLQkJbGVuX29yZyA9IDE7Ci0JZWxzZQotCQlsZW5fb3JnID0gMDsKKwlmaXJzdGxlbiA9IChsZW4gKyAzKSAmIH4zOwogCiAJLyogVGVsbCBOSUMgYWJvdXQgYW55IDItYnl0ZSBwYWRkaW5nIGFmdGVyIE1BQyBoZWFkZXIgKi8KLQlpZiAobGVuX29yZykKKwlpZiAoZmlyc3RsZW4gIT0gbGVuKQogCQl0eF9jbWQtPnR4X2ZsYWdzIHw9IFRYX0NNRF9GTEdfTUhfUEFEX01TSzsKIAogCS8qIFBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhpcyBUeCBjb21tYW5kJ3MgaGVhZGVyIChub3QgTUFDIGhlYWRlciEpLAogCSAqIHdpdGhpbiBjb21tYW5kIGJ1ZmZlciBhcnJheS4gKi8KIAl0eGNtZF9waHlzID0gcGNpX21hcF9zaW5nbGUocHJpdi0+cGNpX2RldiwKLQkJCQkgICAgJm91dF9jbWQtPmhkciwgbGVuLAorCQkJCSAgICAmb3V0X2NtZC0+aGRyLCBmaXJzdGxlbiwKIAkJCQkgICAgUENJX0RNQV9CSURJUkVDVElPTkFMKTsKIAlkbWFfdW5tYXBfYWRkcl9zZXQob3V0X21ldGEsIG1hcHBpbmcsIHR4Y21kX3BoeXMpOwotCWRtYV91bm1hcF9sZW5fc2V0KG91dF9tZXRhLCBsZW4sIGxlbik7CisJZG1hX3VubWFwX2xlbl9zZXQob3V0X21ldGEsIGxlbiwgZmlyc3RsZW4pOwogCS8qIEFkZCBidWZmZXIgY29udGFpbmluZyBUeCBjb21tYW5kIGFuZCBNQUMoISkgaGVhZGVyIHRvIFRGRCdzCiAJICogZmlyc3QgZW50cnkgKi8KIAlwcml2LT5jZmctPm9wcy0+bGliLT50eHFfYXR0YWNoX2J1Zl90b190ZmQocHJpdiwgdHhxLAotCQkJCQkJICAgdHhjbWRfcGh5cywgbGVuLCAxLCAwKTsKKwkJCQkJCSAgIHR4Y21kX3BoeXMsIGZpcnN0bGVuLCAxLCAwKTsKIAogCWlmICghaWVlZTgwMjExX2hhc19tb3JlZnJhZ3MoaGRyLT5mcmFtZV9jb250cm9sKSkgewogCQl0eHEtPm5lZWRfdXBkYXRlID0gMTsKQEAgLTcyMSwyMyArNzIxLDIxIEBACiAKIAkvKiBTZXQgdXAgVEZEJ3MgMm5kIGVudHJ5IHRvIHBvaW50IGRpcmVjdGx5IHRvIHJlbWFpbmRlciBvZiBza2IsCiAJICogaWYgYW55ICg4MDIuMTEgbnVsbCBmcmFtZXMgaGF2ZSBubyBwYXlsb2FkKS4gKi8KLQlzZWNvbmRsZW4gPSBsZW4gPSBza2ItPmxlbiAtIGhkcl9sZW47Ci0JaWYgKGxlbikgeworCXNlY29uZGxlbiA9IHNrYi0+bGVuIC0gaGRyX2xlbjsKKwlpZiAoc2Vjb25kbGVuID4gMCkgewogCQlwaHlzX2FkZHIgPSBwY2lfbWFwX3NpbmdsZShwcml2LT5wY2lfZGV2LCBza2ItPmRhdGEgKyBoZHJfbGVuLAotCQkJCQkgICBsZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOworCQkJCQkgICBzZWNvbmRsZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOwogCQlwcml2LT5jZmctPm9wcy0+bGliLT50eHFfYXR0YWNoX2J1Zl90b190ZmQocHJpdiwgdHhxLAotCQkJCQkJCSAgIHBoeXNfYWRkciwgbGVuLAorCQkJCQkJCSAgIHBoeXNfYWRkciwgc2Vjb25kbGVuLAogCQkJCQkJCSAgIDAsIDApOwogCX0KIAogCXNjcmF0Y2hfcGh5cyA9IHR4Y21kX3BoeXMgKyBzaXplb2Yoc3RydWN0IGl3bF9jbWRfaGVhZGVyKSArCiAJCQkJb2Zmc2V0b2Yoc3RydWN0IGl3bF90eF9jbWQsIHNjcmF0Y2gpOwogCi0JbGVuID0gc2l6ZW9mKHN0cnVjdCBpd2xfdHhfY21kKSArCi0JCXNpemVvZihzdHJ1Y3QgaXdsX2NtZF9oZWFkZXIpICsgaGRyX2xlbjsKIAkvKiB0YWtlIGJhY2sgb3duZXJzaGlwIG9mIERNQSBidWZmZXIgdG8gZW5hYmxlIHVwZGF0ZSAqLwogCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdShwcml2LT5wY2lfZGV2LCB0eGNtZF9waHlzLAotCQkJCSAgICBsZW4sIFBDSV9ETUFfQklESVJFQ1RJT05BTCk7CisJCQkJICAgIGZpcnN0bGVuLCBQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOwogCXR4X2NtZC0+ZHJhbV9sc2JfcHRyID0gY3B1X3RvX2xlMzIoc2NyYXRjaF9waHlzKTsKIAl0eF9jbWQtPmRyYW1fbXNiX3B0ciA9IGl3bF9nZXRfZG1hX2hpX2FkZHIoc2NyYXRjaF9waHlzKTsKIApAQCAtNzUzLDcgKzc1MSw3IEBACiAJCQkJCQkgICAgIGxlMTZfdG9fY3B1KHR4X2NtZC0+bGVuKSk7CiAKIAlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UocHJpdi0+cGNpX2RldiwgdHhjbWRfcGh5cywKLQkJCQkgICAgICAgbGVuLCBQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOworCQkJCSAgICAgICBmaXJzdGxlbiwgUENJX0RNQV9CSURJUkVDVElPTkFMKTsKIAogCXRyYWNlX2l3bHdpZmlfZGV2X3R4KHByaXYsCiAJCQkgICAgICYoKHN0cnVjdCBpd2xfdGZkICopdHhxLT50ZmRzKVt0eHEtPnEud3JpdGVfcHRyXSwKQEAgLTc3Myw4ICs3NzEsMTQgQEAKIAkgKiB3aGV0aGVyIG9yIG5vdCB3ZSBzaG91bGQgdXBkYXRlIHRoZSB3cml0ZSBwb2ludGVyLgogCSAqLwogCi0JLyogYXZvaWQgYXRvbWljIG9wcyBpZiBpdCBpc24ndCBhbiBhc3NvY2lhdGVkIGNsaWVudCAqLwotCWlmIChzdGFfcHJpdiAmJiBzdGFfcHJpdi0+Y2xpZW50KQorCS8qCisJICogQXZvaWQgYXRvbWljIG9wcyBpZiBpdCBpc24ndCBhbiBhc3NvY2lhdGVkIGNsaWVudC4KKwkgKiBBbHNvLCBpZiB0aGlzIGlzIGEgcGFja2V0IGZvciBhZ2dyZWdhdGlvbiwgZG9uJ3QKKwkgKiBpbmNyZWFzZSB0aGUgY291bnRlciBiZWNhdXNlIHRoZSB1Y29kZSB3aWxsIHN0b3AKKwkgKiBhZ2dyZWdhdGlvbiBxdWV1ZXMgd2hlbiB0aGVpciByZXNwZWN0aXZlIHN0YXRpb24KKwkgKiBnb2VzIHRvIHNsZWVwLgorCSAqLworCWlmIChzdGFfcHJpdiAmJiBzdGFfcHJpdi0+Y2xpZW50ICYmICFpc19hZ2cpCiAJCWF0b21pY19pbmMoJnN0YV9wcml2LT5wZW5kaW5nX2ZyYW1lcyk7CiAKIAlpZiAoKGl3bF9xdWV1ZV9zcGFjZShxKSA8IHEtPmhpZ2hfbWFyaykgJiYgcHJpdi0+bWFjODAyMTFfcmVnaXN0ZXJlZCkgewpAQCAtNzg0LDcgKzc4OCw3IEBACiAJCQlpd2xfdHhxX3VwZGF0ZV93cml0ZV9wdHIocHJpdiwgdHhxKTsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAkJfSBlbHNlIHsKLQkJCWl3bF9zdG9wX3F1ZXVlKHByaXYsIHR4cS0+c3dxX2lkKTsKKwkJCWl3bF9zdG9wX3F1ZXVlKHByaXYsIHR4cSk7CiAJCX0KIAl9CiAKQEAgLTEwMTMsNyArMTAxNyw3IEBACiAJdGlkX2RhdGEgPSAmcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS50aWRbdGlkXTsKIAkqc3NuID0gU0VRX1RPX1NOKHRpZF9kYXRhLT5zZXFfbnVtYmVyKTsKIAl0aWRfZGF0YS0+YWdnLnR4cV9pZCA9IHR4cV9pZDsKLQlwcml2LT50eHFbdHhxX2lkXS5zd3FfaWQgPSBpd2xfdmlydHVhbF9hZ2dfcXVldWVfbnVtKGdldF9hY19mcm9tX3RpZCh0aWQpLCB0eHFfaWQpOworCWl3bF9zZXRfc3dxX2lkKCZwcml2LT50eHFbdHhxX2lkXSwgZ2V0X2FjX2Zyb21fdGlkKHRpZCksIHR4cV9pZCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKIAogCXJldCA9IHByaXYtPmNmZy0+b3BzLT5saWItPnR4cV9hZ2dfZW5hYmxlKHByaXYsIHR4cV9pZCwgdHhfZmlmbywKQEAgLTExNTMsMTQgKzExNTcsMTUgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgaXdsYWduX3R4X3N0YXR1cyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfdHhfaW5mbyAqdHhfaW5mbykKK3N0YXRpYyB2b2lkIGl3bGFnbl9ub25fYWdnX3R4X3N0YXR1cyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJICAgICBzdHJ1Y3QgaXdsX3J4b25fY29udGV4dCAqY3R4LAorCQkJCSAgICAgY29uc3QgdTggKmFkZHIxKQogewotCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgdHhfaW5mby0+c2tiLT5kYXRhOwogCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGE7CiAJc3RydWN0IGl3bF9zdGF0aW9uX3ByaXYgKnN0YV9wcml2OwogCiAJcmN1X3JlYWRfbG9jaygpOwotCXN0YSA9IGllZWU4MDIxMV9maW5kX3N0YSh0eF9pbmZvLT5jdHgtPnZpZiwgaGRyLT5hZGRyMSk7CisJc3RhID0gaWVlZTgwMjExX2ZpbmRfc3RhKGN0eC0+dmlmLCBhZGRyMSk7CiAJaWYgKHN0YSkgewogCQlzdGFfcHJpdiA9ICh2b2lkICopc3RhLT5kcnZfcHJpdjsKIAkJLyogYXZvaWQgYXRvbWljIG9wcyBpZiB0aGlzIGlzbid0IGEgY2xpZW50ICovCkBAIC0xMTY5LDYgKzExNzQsMTUgQEAKIAkJCWllZWU4MDIxMV9zdGFfYmxvY2tfYXdha2UocHJpdi0+aHcsIHN0YSwgZmFsc2UpOwogCX0KIAlyY3VfcmVhZF91bmxvY2soKTsKK30KKworc3RhdGljIHZvaWQgaXdsYWduX3R4X3N0YXR1cyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfdHhfaW5mbyAqdHhfaW5mbywKKwkJCSAgICAgYm9vbCBpc19hZ2cpCit7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSB0eF9pbmZvLT5za2ItPmRhdGE7CisKKwlpZiAoIWlzX2FnZykKKwkJaXdsYWduX25vbl9hZ2dfdHhfc3RhdHVzKHByaXYsIHR4X2luZm8tPmN0eCwgaGRyLT5hZGRyMSk7CiAKIAlpZWVlODAyMTFfdHhfc3RhdHVzX2lycXNhZmUocHJpdi0+aHcsIHR4X2luZm8tPnNrYik7CiB9CkBAIC0xMTkzLDcgKzEyMDcsOCBAQAogCSAgICAgcS0+cmVhZF9wdHIgPSBpd2xfcXVldWVfaW5jX3dyYXAocS0+cmVhZF9wdHIsIHEtPm5fYmQpKSB7CiAKIAkJdHhfaW5mbyA9ICZ0eHEtPnR4Ylt0eHEtPnEucmVhZF9wdHJdOwotCQlpd2xhZ25fdHhfc3RhdHVzKHByaXYsIHR4X2luZm8pOworCQlpd2xhZ25fdHhfc3RhdHVzKHByaXYsIHR4X2luZm8sCisJCQkJIHR4cV9pZCA+PSBJV0xBR05fRklSU1RfQU1QRFVfUVVFVUUpOwogCiAJCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXR4X2luZm8tPnNrYi0+ZGF0YTsKIAkJaWYgKGhkciAmJiBpZWVlODAyMTFfaXNfZGF0YV9xb3MoaGRyLT5mcmFtZV9jb250cm9sKSkKQEAgLTEyMjIsNyArMTIzNyw2IEBACiAJaW50IGksIHNoLCBhY2s7CiAJdTE2IHNlcV9jdGwgPSBsZTE2X3RvX2NwdShiYV9yZXNwLT5zZXFfY3RsKTsKIAl1MTYgc2NkX2Zsb3cgPSBsZTE2X3RvX2NwdShiYV9yZXNwLT5zY2RfZmxvdyk7Ci0JdTY0IGJpdG1hcCwgc2VudF9iaXRtYXA7CiAJaW50IHN1Y2Nlc3NlcyA9IDA7CiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOwogCkBAIC0xMjQxLDQwICsxMjU1LDY4IEBACiAJaWYgKHNoIDwgMCkgLyogdGJ3IHNvbWV0aGluZyBpcyB3cm9uZyB3aXRoIGluZGljZXMgKi8KIAkJc2ggKz0gMHgxMDA7CiAKLQkvKiBkb24ndCB1c2UgNjQtYml0IHZhbHVlcyBmb3Igbm93ICovCi0JYml0bWFwID0gbGU2NF90b19jcHUoYmFfcmVzcC0+Yml0bWFwKSA+PiBzaDsKLQogCWlmIChhZ2ctPmZyYW1lX2NvdW50ID4gKDY0IC0gc2gpKSB7CiAJCUlXTF9ERUJVR19UWF9SRVBMWShwcml2LCAibW9yZSBmcmFtZXMgdGhhbiBiaXRtYXAgc2l6ZSIpOwogCQlyZXR1cm4gLTE7CiAJfQorCWlmICghcHJpdi0+Y2ZnLT5iYXNlX3BhcmFtcy0+bm9fYWdnX2ZyYW1lY250X2luZm8gJiYgYmFfcmVzcC0+dHhlZCkgeworCQkvKgorCQkgKiBzZW50IGFuZCBhY2sgaW5mb3JtYXRpb24gcHJvdmlkZWQgYnkgdUNvZGUKKwkJICogdXNlIGl0IGluc3RlYWQgb2YgZmlndXJlIG91dCBvdXJzZWxmCisJCSAqLworCQlpZiAoYmFfcmVzcC0+dHhlZF8yX2RvbmUgPiBiYV9yZXNwLT50eGVkKSB7CisJCQlJV0xfREVCVUdfVFhfUkVQTFkocHJpdiwKKwkJCQkiYm9ndXMgc2VudCglZCkgYW5kIGFjayglZCkgY291bnRcbiIsCisJCQkJYmFfcmVzcC0+dHhlZCwgYmFfcmVzcC0+dHhlZF8yX2RvbmUpOworCQkJLyoKKwkJCSAqIHNldCB0eGVkXzJfZG9uZSA9IHR4ZWQsCisJCQkgKiBzbyBpdCB3b24ndCBpbXBhY3QgcmF0ZSBzY2FsZQorCQkJICovCisJCQliYV9yZXNwLT50eGVkID0gYmFfcmVzcC0+dHhlZF8yX2RvbmU7CisJCX0KKwkJSVdMX0RFQlVHX0hUKHByaXYsICJhZ2cgZnJhbWVzIHNlbnQ6JWQsIGFja2VkOiVkXG4iLAorCQkJCWJhX3Jlc3AtPnR4ZWQsIGJhX3Jlc3AtPnR4ZWRfMl9kb25lKTsKKwl9IGVsc2UgeworCQl1NjQgYml0bWFwLCBzZW50X2JpdG1hcDsKIAotCS8qIGNoZWNrIGZvciBzdWNjZXNzIG9yIGZhaWx1cmUgYWNjb3JkaW5nIHRvIHRoZQotCSAqIHRyYW5zbWl0dGVkIGJpdG1hcCBhbmQgYmxvY2stYWNrIGJpdG1hcCAqLwotCXNlbnRfYml0bWFwID0gYml0bWFwICYgYWdnLT5iaXRtYXA7CisJCS8qIGRvbid0IHVzZSA2NC1iaXQgdmFsdWVzIGZvciBub3cgKi8KKwkJYml0bWFwID0gbGU2NF90b19jcHUoYmFfcmVzcC0+Yml0bWFwKSA+PiBzaDsKIAotCS8qIEZvciBlYWNoIGZyYW1lIGF0dGVtcHRlZCBpbiBhZ2dyZWdhdGlvbiwKLQkgKiB1cGRhdGUgZHJpdmVyJ3MgcmVjb3JkIG9mIHR4IGZyYW1lJ3Mgc3RhdHVzLiAqLwotCWkgPSAwOwotCXdoaWxlIChzZW50X2JpdG1hcCkgewotCQlhY2sgPSBzZW50X2JpdG1hcCAmIDFVTEw7Ci0JCXN1Y2Nlc3NlcyArPSBhY2s7Ci0JCUlXTF9ERUJVR19UWF9SRVBMWShwcml2LCAiJXMgT04gaT0lZCBpZHg9JWQgcmF3PSVkXG4iLAotCQkJYWNrID8gIkFDSyIgOiAiTkFDSyIsIGksIChhZ2ctPnN0YXJ0X2lkeCArIGkpICYgMHhmZiwKLQkJCWFnZy0+c3RhcnRfaWR4ICsgaSk7Ci0JCXNlbnRfYml0bWFwID4+PSAxOwotCQkrK2k7CisJCS8qIGNoZWNrIGZvciBzdWNjZXNzIG9yIGZhaWx1cmUgYWNjb3JkaW5nIHRvIHRoZQorCQkgKiB0cmFuc21pdHRlZCBiaXRtYXAgYW5kIGJsb2NrLWFjayBiaXRtYXAgKi8KKwkJc2VudF9iaXRtYXAgPSBiaXRtYXAgJiBhZ2ctPmJpdG1hcDsKKworCQkvKiBGb3IgZWFjaCBmcmFtZSBhdHRlbXB0ZWQgaW4gYWdncmVnYXRpb24sCisJCSAqIHVwZGF0ZSBkcml2ZXIncyByZWNvcmQgb2YgdHggZnJhbWUncyBzdGF0dXMuICovCisJCWkgPSAwOworCQl3aGlsZSAoc2VudF9iaXRtYXApIHsKKwkJCWFjayA9IHNlbnRfYml0bWFwICYgMVVMTDsKKwkJCXN1Y2Nlc3NlcyArPSBhY2s7CisJCQlJV0xfREVCVUdfVFhfUkVQTFkocHJpdiwgIiVzIE9OIGk9JWQgaWR4PSVkIHJhdz0lZFxuIiwKKwkJCQlhY2sgPyAiQUNLIiA6ICJOQUNLIiwgaSwKKwkJCQkoYWdnLT5zdGFydF9pZHggKyBpKSAmIDB4ZmYsCisJCQkJYWdnLT5zdGFydF9pZHggKyBpKTsKKwkJCXNlbnRfYml0bWFwID4+PSAxOworCQkJKytpOworCQl9CisKKwkJSVdMX0RFQlVHX1RYX1JFUExZKHByaXYsICJCaXRtYXAgJWxseFxuIiwKKwkJCQkgICAodW5zaWduZWQgbG9uZyBsb25nKWJpdG1hcCk7CiAJfQogCiAJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IocHJpdi0+dHhxW3NjZF9mbG93XS50eGJbYWdnLT5zdGFydF9pZHhdLnNrYik7CiAJbWVtc2V0KCZpbmZvLT5zdGF0dXMsIDAsIHNpemVvZihpbmZvLT5zdGF0dXMpKTsKIAlpbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9BQ0s7CiAJaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRfQU1QRFU7Ci0JaW5mby0+c3RhdHVzLmFtcGR1X2Fja19sZW4gPSBzdWNjZXNzZXM7Ci0JaW5mby0+c3RhdHVzLmFtcGR1X2xlbiA9IGFnZy0+ZnJhbWVfY291bnQ7Ci0JaXdsYWduX2h3cmF0ZV90b190eF9jb250cm9sKHByaXYsIGFnZy0+cmF0ZV9uX2ZsYWdzLCBpbmZvKTsKKwlpZiAoIXByaXYtPmNmZy0+YmFzZV9wYXJhbXMtPm5vX2FnZ19mcmFtZWNudF9pbmZvICYmIGJhX3Jlc3AtPnR4ZWQpIHsKKwkJaW5mby0+c3RhdHVzLmFtcGR1X2Fja19sZW4gPSBiYV9yZXNwLT50eGVkXzJfZG9uZTsKKwkJaW5mby0+c3RhdHVzLmFtcGR1X2xlbiA9IGJhX3Jlc3AtPnR4ZWQ7CiAKLQlJV0xfREVCVUdfVFhfUkVQTFkocHJpdiwgIkJpdG1hcCAlbGx4XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKWJpdG1hcCk7CisJfSBlbHNlIHsKKwkJaW5mby0+c3RhdHVzLmFtcGR1X2Fja19sZW4gPSBzdWNjZXNzZXM7CisJCWluZm8tPnN0YXR1cy5hbXBkdV9sZW4gPSBhZ2ctPmZyYW1lX2NvdW50OworCX0KKwlpd2xhZ25faHdyYXRlX3RvX3R4X2NvbnRyb2wocHJpdiwgYWdnLT5yYXRlX25fZmxhZ3MsIGluZm8pOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMzg1LDcgKzE0MjcsNyBAQAogCQlpZiAoKGl3bF9xdWV1ZV9zcGFjZSgmdHhxLT5xKSA+IHR4cS0+cS5sb3dfbWFyaykgJiYKIAkJICAgIHByaXYtPm1hYzgwMjExX3JlZ2lzdGVyZWQgJiYKIAkJICAgIChhZ2ctPnN0YXRlICE9IElXTF9FTVBUWUlOR19IV19RVUVVRV9ERUxCQSkpCi0JCQlpd2xfd2FrZV9xdWV1ZShwcml2LCB0eHEtPnN3cV9pZCk7CisJCQlpd2xfd2FrZV9xdWV1ZShwcml2LCB0eHEpOwogCiAJCWl3bGFnbl90eHFfY2hlY2tfZW1wdHkocHJpdiwgc3RhX2lkLCB0aWQsIHNjZF9mbG93KTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tdWNvZGUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi11Y29kZS5jCmluZGV4IDcwMzYyMTEuLjI0ZGFiY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi11Y29kZS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi11Y29kZS5jCkBAIC00MCwzMCArNDAsMzYgQEAKICNpbmNsdWRlICJpd2wtYWduLmgiCiAjaW5jbHVkZSAiaXdsLWFnbi1jYWxpYi5oIgogCi1zdGF0aWMgY29uc3QgczggaXdsYWduX2RlZmF1bHRfcXVldWVfdG9fdHhfZmlmb1tdID0gewotCUlXTF9UWF9GSUZPX1ZPLAotCUlXTF9UWF9GSUZPX1ZJLAotCUlXTF9UWF9GSUZPX0JFLAotCUlXTF9UWF9GSUZPX0JLLAotCUlXTEFHTl9DTURfRklGT19OVU0sCi0JSVdMX1RYX0ZJRk9fVU5VU0VELAotCUlXTF9UWF9GSUZPX1VOVVNFRCwKLQlJV0xfVFhfRklGT19VTlVTRUQsCi0JSVdMX1RYX0ZJRk9fVU5VU0VELAotCUlXTF9UWF9GSUZPX1VOVVNFRCwKKyNkZWZpbmUgSVdMX0FDX1VOU0VUIC0xCisKK3N0cnVjdCBxdWV1ZV90b19maWZvX2FjIHsKKwlzOCBmaWZvLCBhYzsKIH07CiAKLXN0YXRpYyBjb25zdCBzOCBpd2xhZ25faXBhbl9xdWV1ZV90b190eF9maWZvW10gPSB7Ci0JSVdMX1RYX0ZJRk9fVk8sCi0JSVdMX1RYX0ZJRk9fVkksCi0JSVdMX1RYX0ZJRk9fQkUsCi0JSVdMX1RYX0ZJRk9fQkssCi0JSVdMX1RYX0ZJRk9fQktfSVBBTiwKLQlJV0xfVFhfRklGT19CRV9JUEFOLAotCUlXTF9UWF9GSUZPX1ZJX0lQQU4sCi0JSVdMX1RYX0ZJRk9fVk9fSVBBTiwKLQlJV0xfVFhfRklGT19CRV9JUEFOLAotCUlXTEFHTl9DTURfRklGT19OVU0sCitzdGF0aWMgY29uc3Qgc3RydWN0IHF1ZXVlX3RvX2ZpZm9fYWMgaXdsYWduX2RlZmF1bHRfcXVldWVfdG9fdHhfZmlmb1tdID0geworCXsgSVdMX1RYX0ZJRk9fVk8sIElFRUU4MDIxMV9BQ19WTywgfSwKKwl7IElXTF9UWF9GSUZPX1ZJLCBJRUVFODAyMTFfQUNfVkksIH0sCisJeyBJV0xfVFhfRklGT19CRSwgSUVFRTgwMjExX0FDX0JFLCB9LAorCXsgSVdMX1RYX0ZJRk9fQkssIElFRUU4MDIxMV9BQ19CSywgfSwKKwl7IElXTEFHTl9DTURfRklGT19OVU0sIElXTF9BQ19VTlNFVCwgfSwKKwl7IElXTF9UWF9GSUZPX1VOVVNFRCwgSVdMX0FDX1VOU0VULCB9LAorCXsgSVdMX1RYX0ZJRk9fVU5VU0VELCBJV0xfQUNfVU5TRVQsIH0sCisJeyBJV0xfVFhfRklGT19VTlVTRUQsIElXTF9BQ19VTlNFVCwgfSwKKwl7IElXTF9UWF9GSUZPX1VOVVNFRCwgSVdMX0FDX1VOU0VULCB9LAorCXsgSVdMX1RYX0ZJRk9fVU5VU0VELCBJV0xfQUNfVU5TRVQsIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHF1ZXVlX3RvX2ZpZm9fYWMgaXdsYWduX2lwYW5fcXVldWVfdG9fdHhfZmlmb1tdID0geworCXsgSVdMX1RYX0ZJRk9fVk8sIElFRUU4MDIxMV9BQ19WTywgfSwKKwl7IElXTF9UWF9GSUZPX1ZJLCBJRUVFODAyMTFfQUNfVkksIH0sCisJeyBJV0xfVFhfRklGT19CRSwgSUVFRTgwMjExX0FDX0JFLCB9LAorCXsgSVdMX1RYX0ZJRk9fQkssIElFRUU4MDIxMV9BQ19CSywgfSwKKwl7IElXTF9UWF9GSUZPX0JLX0lQQU4sIElFRUU4MDIxMV9BQ19CSywgfSwKKwl7IElXTF9UWF9GSUZPX0JFX0lQQU4sIElFRUU4MDIxMV9BQ19CRSwgfSwKKwl7IElXTF9UWF9GSUZPX1ZJX0lQQU4sIElFRUU4MDIxMV9BQ19WSSwgfSwKKwl7IElXTF9UWF9GSUZPX1ZPX0lQQU4sIElFRUU4MDIxMV9BQ19WTywgfSwKKwl7IElXTF9UWF9GSUZPX0JFX0lQQU4sIDIsIH0sCisJeyBJV0xBR05fQ01EX0ZJRk9fTlVNLCBJV0xfQUNfVU5TRVQsIH0sCiB9OwogCiBzdGF0aWMgc3RydWN0IGl3bF93aW1heF9jb2V4X2V2ZW50X2VudHJ5IGN1X3ByaW9yaXRpZXNbQ09FWF9OVU1fT0ZfRVZFTlRTXSA9IHsKQEAgLTQyOSw3ICs0MzUsNyBAQAogCiBpbnQgaXdsYWduX2FsaXZlX25vdGlmeShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7Ci0JY29uc3QgczggKnF1ZXVlczsKKwljb25zdCBzdHJ1Y3QgcXVldWVfdG9fZmlmb19hYyAqcXVldWVfdG9fZmlmbzsKIAl1MzIgYTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBpLCBjaGFuOwpAQCAtNDkyLDkgKzQ5OCw5IEBACiAKIAkvKiBtYXAgcXVldWVzIHRvIEZJRk9zICovCiAJaWYgKHByaXYtPnZhbGlkX2NvbnRleHRzICE9IEJJVChJV0xfUlhPTl9DVFhfQlNTKSkKLQkJcXVldWVzID0gaXdsYWduX2lwYW5fcXVldWVfdG9fdHhfZmlmbzsKKwkJcXVldWVfdG9fZmlmbyA9IGl3bGFnbl9pcGFuX3F1ZXVlX3RvX3R4X2ZpZm87CiAJZWxzZQotCQlxdWV1ZXMgPSBpd2xhZ25fZGVmYXVsdF9xdWV1ZV90b190eF9maWZvOworCQlxdWV1ZV90b19maWZvID0gaXdsYWduX2RlZmF1bHRfcXVldWVfdG9fdHhfZmlmbzsKIAogCWl3bGFnbl9zZXRfd3JfcHRycyhwcml2LCBwcml2LT5jbWRfcXVldWUsIDApOwogCkBAIC01MTAsMTggKzUxNiwyNSBAQAogCUJVSUxEX0JVR19PTihBUlJBWV9TSVpFKGl3bGFnbl9pcGFuX3F1ZXVlX3RvX3R4X2ZpZm8pICE9IDEwKTsKIAogCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7Ci0JCWludCBhYyA9IHF1ZXVlc1tpXTsKKwkJaW50IGZpZm8gPSBxdWV1ZV90b19maWZvW2ldLmZpZm87CisJCWludCBhYyA9IHF1ZXVlX3RvX2ZpZm9baV0uYWM7CiAKIAkJaXdsX3R4cV9jdHhfYWN0aXZhdGUocHJpdiwgaSk7CiAKLQkJaWYgKGFjID09IElXTF9UWF9GSUZPX1VOVVNFRCkKKwkJaWYgKGZpZm8gPT0gSVdMX1RYX0ZJRk9fVU5VU0VEKQogCQkJY29udGludWU7CiAKLQkJaXdsYWduX3R4X3F1ZXVlX3NldF9zdGF0dXMocHJpdiwgJnByaXYtPnR4cVtpXSwgYWMsIDApOworCQlpZiAoYWMgIT0gSVdMX0FDX1VOU0VUKQorCQkJaXdsX3NldF9zd3FfaWQoJnByaXYtPnR4cVtpXSwgYWMsIGkpOworCQlpd2xhZ25fdHhfcXVldWVfc2V0X3N0YXR1cyhwcml2LCAmcHJpdi0+dHhxW2ldLCBmaWZvLCAwKTsKIAl9CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKKwkvKiBFbmFibGUgTDEtQWN0aXZlICovCisJaXdsX2NsZWFyX2JpdHNfcHJwaChwcml2LCBBUE1HX1BDSURFVl9TVFRfUkVHLAorCQkJICBBUE1HX1BDSURFVl9TVFRfVkFMX0wxX0FDVF9ESVMpOworCiAJaXdsYWduX3NlbmRfd2ltYXhfY29leChwcml2KTsKIAogCWl3bGFnbl9zZXRfWHRhbF9jYWxpYihwcml2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLmMKaW5kZXggYzI2MzZhNy4uZjEzYTgzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLmMKQEAgLTkwLDE3MCArOTAsNiBAQAogc3RhdGljIGludCBpd2xhZ25fYW50X2NvdXBsaW5nOwogc3RhdGljIGJvb2wgaXdsYWduX2J0X2NoX2Fubm91bmNlID0gMTsKIAotLyoqCi0gKiBpd2xhZ25fY29tbWl0X3J4b24gLSBjb21taXQgc3RhZ2luZ19yeG9uIHRvIGhhcmR3YXJlCi0gKgotICogVGhlIFJYT04gY29tbWFuZCBpbiBzdGFnaW5nX3J4b24gaXMgY29tbWl0dGVkIHRvIHRoZSBoYXJkd2FyZSBhbmQKLSAqIHRoZSBhY3RpdmVfcnhvbiBzdHJ1Y3R1cmUgaXMgdXBkYXRlZCB3aXRoIHRoZSBuZXcgZGF0YS4gIFRoaXMKLSAqIGZ1bmN0aW9uIGNvcnJlY3RseSB0cmFuc2l0aW9ucyBvdXQgb2YgdGhlIFJYT05fQVNTT0NfTVNLIHN0YXRlIGlmCi0gKiBhIEhXIHR1bmUgaXMgcmVxdWlyZWQgYmFzZWQgb24gdGhlIFJYT04gc3RydWN0dXJlIGNoYW5nZXMuCi0gKi8KLWludCBpd2xhZ25fY29tbWl0X3J4b24oc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX3J4b25fY29udGV4dCAqY3R4KQotewotCS8qIGNhc3QgYXdheSB0aGUgY29uc3QgZm9yIGFjdGl2ZV9yeG9uIGluIHRoaXMgZnVuY3Rpb24gKi8KLQlzdHJ1Y3QgaXdsX3J4b25fY21kICphY3RpdmVfcnhvbiA9ICh2b2lkICopJmN0eC0+YWN0aXZlOwotCWludCByZXQ7Ci0JYm9vbCBuZXdfYXNzb2MgPQotCQkhIShjdHgtPnN0YWdpbmcuZmlsdGVyX2ZsYWdzICYgUlhPTl9GSUxURVJfQVNTT0NfTVNLKTsKLQlib29sIG9sZF9hc3NvYyA9ICEhKGN0eC0+YWN0aXZlLmZpbHRlcl9mbGFncyAmIFJYT05fRklMVEVSX0FTU09DX01TSyk7Ci0KLQlpZiAoIWl3bF9pc19hbGl2ZShwcml2KSkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCWlmICghY3R4LT5pc19hY3RpdmUpCi0JCXJldHVybiAwOwotCi0JLyogYWx3YXlzIGdldCB0aW1lc3RhbXAgd2l0aCBSeCBmcmFtZSAqLwotCWN0eC0+c3RhZ2luZy5mbGFncyB8PSBSWE9OX0ZMR19UU0YySE9TVF9NU0s7Ci0KLQlyZXQgPSBpd2xfY2hlY2tfcnhvbl9jbWQocHJpdiwgY3R4KTsKLQlpZiAocmV0KSB7Ci0JCUlXTF9FUlIocHJpdiwgIkludmFsaWQgUlhPTiBjb25maWd1cmF0aW9uLiAgTm90IGNvbW1pdHRpbmcuXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyoKLQkgKiByZWNlaXZlIGNvbW1pdF9yeG9uIHJlcXVlc3QKLQkgKiBhYm9ydCBhbnkgcHJldmlvdXMgY2hhbm5lbCBzd2l0Y2ggaWYgc3RpbGwgaW4gcHJvY2VzcwotCSAqLwotCWlmIChwcml2LT5zd2l0Y2hfcnhvbi5zd2l0Y2hfaW5fcHJvZ3Jlc3MgJiYKLQkgICAgKHByaXYtPnN3aXRjaF9yeG9uLmNoYW5uZWwgIT0gY3R4LT5zdGFnaW5nLmNoYW5uZWwpKSB7Ci0JCUlXTF9ERUJVR18xMUgocHJpdiwgImFib3J0IGNoYW5uZWwgc3dpdGNoIG9uICVkXG4iLAotCQkgICAgICBsZTE2X3RvX2NwdShwcml2LT5zd2l0Y2hfcnhvbi5jaGFubmVsKSk7Ci0JCWl3bF9jaHN3aXRjaF9kb25lKHByaXYsIGZhbHNlKTsKLQl9Ci0KLQkvKiBJZiB3ZSBkb24ndCBuZWVkIHRvIHNlbmQgYSBmdWxsIFJYT04sIHdlIGNhbiB1c2UKLQkgKiBpd2xfcnhvbl9hc3NvY19jbWQgd2hpY2ggaXMgdXNlZCB0byByZWNvbmZpZ3VyZSBmaWx0ZXIKLQkgKiBhbmQgb3RoZXIgZmxhZ3MgZm9yIHRoZSBjdXJyZW50IHJhZGlvIGNvbmZpZ3VyYXRpb24uICovCi0JaWYgKCFpd2xfZnVsbF9yeG9uX3JlcXVpcmVkKHByaXYsIGN0eCkpIHsKLQkJcmV0ID0gaXdsX3NlbmRfcnhvbl9hc3NvYyhwcml2LCBjdHgpOwotCQlpZiAocmV0KSB7Ci0JCQlJV0xfRVJSKHByaXYsICJFcnJvciBzZXR0aW5nIFJYT05fQVNTT0MgKCVkKVxuIiwgcmV0KTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KLQotCQltZW1jcHkoYWN0aXZlX3J4b24sICZjdHgtPnN0YWdpbmcsIHNpemVvZigqYWN0aXZlX3J4b24pKTsKLQkJaXdsX3ByaW50X3J4X2NvbmZpZ19jbWQocHJpdiwgY3R4KTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyogSWYgd2UgYXJlIGN1cnJlbnRseSBhc3NvY2lhdGVkIGFuZCB0aGUgbmV3IGNvbmZpZyByZXF1aXJlcwotCSAqIGFuIFJYT05fQVNTT0MgYW5kIHRoZSBuZXcgY29uZmlnIHdhbnRzIHRoZSBhc3NvY2lhdGVkIG1hc2sgZW5hYmxlZCwKLQkgKiB3ZSBtdXN0IGNsZWFyIHRoZSBhc3NvY2lhdGVkIGZyb20gdGhlIGFjdGl2ZSBjb25maWd1cmF0aW9uCi0JICogYmVmb3JlIHdlIGFwcGx5IHRoZSBuZXcgY29uZmlnICovCi0JaWYgKGl3bF9pc19hc3NvY2lhdGVkX2N0eChjdHgpICYmIG5ld19hc3NvYykgewotCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiVG9nZ2xpbmcgYXNzb2NpYXRlZCBiaXQgb24gY3VycmVudCBSWE9OXG4iKTsKLQkJYWN0aXZlX3J4b24tPmZpbHRlcl9mbGFncyAmPSB+UlhPTl9GSUxURVJfQVNTT0NfTVNLOwotCi0JCXJldCA9IGl3bF9zZW5kX2NtZF9wZHUocHJpdiwgY3R4LT5yeG9uX2NtZCwKLQkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpd2xfcnhvbl9jbWQpLAotCQkJCSAgICAgICBhY3RpdmVfcnhvbik7Ci0KLQkJLyogSWYgdGhlIG1hc2sgY2xlYXJpbmcgZmFpbGVkIHRoZW4gd2Ugc2V0Ci0JCSAqIGFjdGl2ZV9yeG9uIGJhY2sgdG8gd2hhdCBpdCB3YXMgcHJldmlvdXNseSAqLwotCQlpZiAocmV0KSB7Ci0JCQlhY3RpdmVfcnhvbi0+ZmlsdGVyX2ZsYWdzIHw9IFJYT05fRklMVEVSX0FTU09DX01TSzsKLQkJCUlXTF9FUlIocHJpdiwgIkVycm9yIGNsZWFyaW5nIEFTU09DX01TSyAoJWQpXG4iLCByZXQpOwotCQkJcmV0dXJuIHJldDsKLQkJfQotCQlpd2xfY2xlYXJfdWNvZGVfc3RhdGlvbnMocHJpdiwgY3R4KTsKLQkJaXdsX3Jlc3RvcmVfc3RhdGlvbnMocHJpdiwgY3R4KTsKLQkJcmV0ID0gaXdsX3Jlc3RvcmVfZGVmYXVsdF93ZXBfa2V5cyhwcml2LCBjdHgpOwotCQlpZiAocmV0KSB7Ci0JCQlJV0xfRVJSKHByaXYsICJGYWlsZWQgdG8gcmVzdG9yZSBXRVAga2V5cyAoJWQpXG4iLCByZXQpOwotCQkJcmV0dXJuIHJldDsKLQkJfQotCX0KLQotCUlXTF9ERUJVR19JTkZPKHByaXYsICJTZW5kaW5nIFJYT05cbiIKLQkJICAgICAgICIqIHdpdGglcyBSWE9OX0ZJTFRFUl9BU1NPQ19NU0tcbiIKLQkJICAgICAgICIqIGNoYW5uZWwgPSAlZFxuIgotCQkgICAgICAgIiogYnNzaWQgPSAlcE1cbiIsCi0JCSAgICAgICAobmV3X2Fzc29jID8gIiIgOiAib3V0IiksCi0JCSAgICAgICBsZTE2X3RvX2NwdShjdHgtPnN0YWdpbmcuY2hhbm5lbCksCi0JCSAgICAgICBjdHgtPnN0YWdpbmcuYnNzaWRfYWRkcik7Ci0KLQlpd2xfc2V0X3J4b25faHdjcnlwdG8ocHJpdiwgY3R4LCAhcHJpdi0+Y2ZnLT5tb2RfcGFyYW1zLT5zd19jcnlwdG8pOwotCi0JaWYgKCFvbGRfYXNzb2MpIHsKLQkJLyoKLQkJICogRmlyc3Qgb2YgYWxsLCBiZWZvcmUgc2V0dGluZyBhc3NvY2lhdGVkLCB3ZSBuZWVkIHRvCi0JCSAqIHNlbmQgUlhPTiB0aW1pbmcgc28gdGhlIGRldmljZSBrbm93cyBhYm91dCB0aGUgRFRJTQotCQkgKiBwZXJpb2QgYW5kIG90aGVyIHRpbWluZyB2YWx1ZXMKLQkJICovCi0JCXJldCA9IGl3bF9zZW5kX3J4b25fdGltaW5nKHByaXYsIGN0eCk7Ci0JCWlmIChyZXQpIHsKLQkJCUlXTF9FUlIocHJpdiwgIkVycm9yIHNldHRpbmcgUlhPTiB0aW1pbmchXG4iKTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KLQl9Ci0KLQlpZiAocHJpdi0+Y2ZnLT5vcHMtPmhjbWQtPnNldF9wYW5fcGFyYW1zKSB7Ci0JCXJldCA9IHByaXYtPmNmZy0+b3BzLT5oY21kLT5zZXRfcGFuX3BhcmFtcyhwcml2KTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7Ci0JfQotCi0JLyogQXBwbHkgdGhlIG5ldyBjb25maWd1cmF0aW9uCi0JICogUlhPTiB1bmFzc29jIGNsZWFycyB0aGUgc3RhdGlvbiB0YWJsZSBpbiB1Q29kZSBzbyByZXN0b3JhdGlvbiBvZgotCSAqIHN0YXRpb25zIGlzIG5lZWRlZCBhZnRlciBpdCAodGhlIFJYT04gY29tbWFuZCkgY29tcGxldGVzCi0JICovCi0JaWYgKCFuZXdfYXNzb2MpIHsKLQkJcmV0ID0gaXdsX3NlbmRfY21kX3BkdShwcml2LCBjdHgtPnJ4b25fY21kLAotCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBpd2xfcnhvbl9jbWQpLCAmY3R4LT5zdGFnaW5nKTsKLQkJaWYgKHJldCkgewotCQkJSVdMX0VSUihwcml2LCAiRXJyb3Igc2V0dGluZyBuZXcgUlhPTiAoJWQpXG4iLCByZXQpOwotCQkJcmV0dXJuIHJldDsKLQkJfQotCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiUmV0dXJuIGZyb20gIW5ld19hc3NvYyBSWE9OLlxuIik7Ci0JCW1lbWNweShhY3RpdmVfcnhvbiwgJmN0eC0+c3RhZ2luZywgc2l6ZW9mKCphY3RpdmVfcnhvbikpOwotCQlpd2xfY2xlYXJfdWNvZGVfc3RhdGlvbnMocHJpdiwgY3R4KTsKLQkJaXdsX3Jlc3RvcmVfc3RhdGlvbnMocHJpdiwgY3R4KTsKLQkJcmV0ID0gaXdsX3Jlc3RvcmVfZGVmYXVsdF93ZXBfa2V5cyhwcml2LCBjdHgpOwotCQlpZiAocmV0KSB7Ci0JCQlJV0xfRVJSKHByaXYsICJGYWlsZWQgdG8gcmVzdG9yZSBXRVAga2V5cyAoJWQpXG4iLCByZXQpOwotCQkJcmV0dXJuIHJldDsKLQkJfQotCX0KLQlpZiAobmV3X2Fzc29jKSB7Ci0JCXByaXYtPnN0YXJ0X2NhbGliID0gMDsKLQkJLyogQXBwbHkgdGhlIG5ldyBjb25maWd1cmF0aW9uCi0JCSAqIFJYT04gYXNzb2MgZG9lc24ndCBjbGVhciB0aGUgc3RhdGlvbiB0YWJsZSBpbiB1Q29kZSwKLQkJICovCi0JCXJldCA9IGl3bF9zZW5kX2NtZF9wZHUocHJpdiwgY3R4LT5yeG9uX2NtZCwKLQkJCSAgICAgIHNpemVvZihzdHJ1Y3QgaXdsX3J4b25fY21kKSwgJmN0eC0+c3RhZ2luZyk7Ci0JCWlmIChyZXQpIHsKLQkJCUlXTF9FUlIocHJpdiwgIkVycm9yIHNldHRpbmcgbmV3IFJYT04gKCVkKVxuIiwgcmV0KTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KLQkJbWVtY3B5KGFjdGl2ZV9yeG9uLCAmY3R4LT5zdGFnaW5nLCBzaXplb2YoKmFjdGl2ZV9yeG9uKSk7Ci0JfQotCWl3bF9wcmludF9yeF9jb25maWdfY21kKHByaXYsIGN0eCk7Ci0KLQlpd2xfaW5pdF9zZW5zaXRpdml0eShwcml2KTsKLQotCS8qIElmIHdlIGlzc3VlIGEgbmV3IFJYT04gY29tbWFuZCB3aGljaCByZXF1aXJlZCBhIHR1bmUgdGhlbiB3ZSBtdXN0Ci0JICogc2VuZCBhIG5ldyBUWFBPV0VSIGNvbW1hbmQgb3Igd2Ugd29uJ3QgYmUgYWJsZSB0byBUeCBhbnkgZnJhbWVzICovCi0JcmV0ID0gaXdsX3NldF90eF9wb3dlcihwcml2LCBwcml2LT50eF9wb3dlcl91c2VyX2xtdCwgdHJ1ZSk7Ci0JaWYgKHJldCkgewotCQlJV0xfRVJSKHByaXYsICJFcnJvciBzZW5kaW5nIFRYIHBvd2VyICglZClcbiIsIHJldCk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KIHZvaWQgaXdsX3VwZGF0ZV9jaGFpbl9mbGFncyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJc3RydWN0IGl3bF9yeG9uX2NvbnRleHQgKmN0eDsKQEAgLTI2MSw3ICs5Nyw4IEBACiAJaWYgKHByaXYtPmNmZy0+b3BzLT5oY21kLT5zZXRfcnhvbl9jaGFpbikgewogCQlmb3JfZWFjaF9jb250ZXh0KHByaXYsIGN0eCkgewogCQkJcHJpdi0+Y2ZnLT5vcHMtPmhjbWQtPnNldF9yeG9uX2NoYWluKHByaXYsIGN0eCk7Ci0JCQlpd2xjb3JlX2NvbW1pdF9yeG9uKHByaXYsIGN0eCk7CisJCQlpZiAoY3R4LT5hY3RpdmUucnhfY2hhaW4gIT0gY3R4LT5zdGFnaW5nLnJ4X2NoYWluKQorCQkJCWl3bGNvcmVfY29tbWl0X3J4b24ocHJpdiwgY3R4KTsKIAkJfQogCX0KIH0KQEAgLTQxMSw3ICsyNDgsOCBAQAogCiAJcmV0dXJuIHNpemVvZigqdHhfYmVhY29uX2NtZCkgKyBmcmFtZV9zaXplOwogfQotc3RhdGljIGludCBpd2xfc2VuZF9iZWFjb25fY21kKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKKworaW50IGl3bGFnbl9zZW5kX2JlYWNvbl9jbWQoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXN0cnVjdCBpd2xfZnJhbWUgKmZyYW1lOwogCXVuc2lnbmVkIGludCBmcmFtZV9zaXplOwpAQCAtNjYxLDcgKzQ5OSw3IEBACiAKIAlwcml2LT5iZWFjb25fc2tiID0gYmVhY29uOwogCi0JaXdsX3NlbmRfYmVhY29uX2NtZChwcml2KTsKKwlpd2xhZ25fc2VuZF9iZWFjb25fY21kKHByaXYpOwogIG91dDoKIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIH0KQEAgLTI2NjQsNyArMjUwMiw3IEBACiAJCXJldHVybiBwb3M7CiAJfQogCi0JLyogZW5hYmxlL2Rpc2FibGUgYnQgY2hhbm5lbCBhbm5vdW5jZW1lbnQgKi8KKwkvKiBlbmFibGUvZGlzYWJsZSBidCBjaGFubmVsIGluaGliaXRpb24gKi8KIAlwcml2LT5idF9jaF9hbm5vdW5jZSA9IGl3bGFnbl9idF9jaF9hbm5vdW5jZTsKIAogI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCkBAIC0yODE2LDEzICsyNjU0LDggQEAKIAkvKiBBZnRlciB0aGUgQUxJVkUgcmVzcG9uc2UsIHdlIGNhbiBzZW5kIGhvc3QgY29tbWFuZHMgdG8gdGhlIHVDb2RlICovCiAJc2V0X2JpdChTVEFUVVNfQUxJVkUsICZwcml2LT5zdGF0dXMpOwogCi0JaWYgKHByaXYtPmNmZy0+b3BzLT5saWItPnJlY292ZXJfZnJvbV90eF9zdGFsbCkgewotCQkvKiBFbmFibGUgdGltZXIgdG8gbW9uaXRvciB0aGUgZHJpdmVyIHF1ZXVlcyAqLwotCQltb2RfdGltZXIoJnByaXYtPm1vbml0b3JfcmVjb3ZlciwKLQkJCWppZmZpZXMgKwotCQkJbXNlY3NfdG9famlmZmllcygKLQkJCSAgcHJpdi0+Y2ZnLT5iYXNlX3BhcmFtcy0+bW9uaXRvcl9yZWNvdmVyX3BlcmlvZCkpOwotCX0KKwkvKiBFbmFibGUgd2F0Y2hkb2cgdG8gbW9uaXRvciB0aGUgZHJpdmVyIHR4IHF1ZXVlcyAqLworCWl3bF9zZXR1cF93YXRjaGRvZyhwcml2KTsKIAogCWlmIChpd2xfaXNfcmZraWxsKHByaXYpKQogCQlyZXR1cm47CkBAIC0yODc5LDYgKzI3MTIsOCBAQAogCiAJaXdsX3Jlc2V0X3J1bl90aW1lX2NhbGliKHByaXYpOwogCisJc2V0X2JpdChTVEFUVVNfUkVBRFksICZwcml2LT5zdGF0dXMpOworCiAJLyogQ29uZmlndXJlIHRoZSBhZGFwdGVyIGZvciB1bmFzc29jaWF0ZWQgb3BlcmF0aW9uICovCiAJaXdsY29yZV9jb21taXRfcnhvbihwcml2LCBjdHgpOwogCkBAIC0yODg4LDcgKzI3MjMsNiBAQAogCWl3bF9sZWRzX2luaXQocHJpdik7CiAKIAlJV0xfREVCVUdfSU5GTyhwcml2LCAiQUxJVkUgcHJvY2Vzc2luZyBjb21wbGV0ZS5cbiIpOwotCXNldF9iaXQoU1RBVFVTX1JFQURZLCAmcHJpdi0+c3RhdHVzKTsKIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPndhaXRfY29tbWFuZF9xdWV1ZSk7CiAKIAlpd2xfcG93ZXJfdXBkYXRlX21vZGUocHJpdiwgdHJ1ZSk7CkBAIC0yOTE2LDggKzI3NTAsNyBAQAogCiAJLyogU3RvcCBUWCBxdWV1ZXMgd2F0Y2hkb2cuIFdlIG5lZWQgdG8gaGF2ZSBTVEFUVVNfRVhJVF9QRU5ESU5HIGJpdCBzZXQKIAkgKiB0byBwcmV2ZW50IHJlYXJtIHRpbWVyICovCi0JaWYgKHByaXYtPmNmZy0+b3BzLT5saWItPnJlY292ZXJfZnJvbV90eF9zdGFsbCkKLQkJZGVsX3RpbWVyX3N5bmMoJnByaXYtPm1vbml0b3JfcmVjb3Zlcik7CisJZGVsX3RpbWVyX3N5bmMoJnByaXYtPndhdGNoZG9nKTsKIAogCWl3bF9jbGVhcl91Y29kZV9zdGF0aW9ucyhwcml2LCBOVUxMKTsKIAlpd2xfZGVhbGxvY19iY2FzdF9zdGF0aW9ucyhwcml2KTsKQEAgLTI5NzgsNyArMjgxMSw4IEBACiAJCQkJU1RBVFVTX0VYSVRfUEVORElORzsKIAogCS8qIGRldmljZSBnb2luZyBkb3duLCBTdG9wIHVzaW5nIElDVCB0YWJsZSAqLwotCWl3bF9kaXNhYmxlX2ljdChwcml2KTsKKwlpZiAocHJpdi0+Y2ZnLT5vcHMtPmxpYi0+aXNyX29wcy5kaXNhYmxlKQorCQlwcml2LT5jZmctPm9wcy0+bGliLT5pc3Jfb3BzLmRpc2FibGUocHJpdik7CiAKIAlpd2xhZ25fdHhxX2N0eF9zdG9wKHByaXYpOwogCWl3bGFnbl9yeHFfc3RvcChwcml2KTsKQEAgLTMyMDEsNyArMzAzNSw4IEBACiAJCXJldHVybjsKIAogCS8qIGVuYWJsZSBkcmFtIGludGVycnVwdCAqLwotCWl3bF9yZXNldF9pY3QocHJpdik7CisJaWYgKHByaXYtPmNmZy0+b3BzLT5saWItPmlzcl9vcHMucmVzZXQpCisJCXByaXYtPmNmZy0+b3BzLT5saWItPmlzcl9vcHMucmVzZXQocHJpdik7CiAKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAJaXdsX2FsaXZlX3N0YXJ0KHByaXYpOwpAQCAtMzMwOSw5MiArMzE0NCw2IEBACiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiB9CiAKLSNkZWZpbmUgSVdMX0RFTEFZX05FWFRfU0NBTiAoSFoqMikKLQotdm9pZCBpd2xfcG9zdF9hc3NvY2lhdGUoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQotewotCXN0cnVjdCBpd2xfcnhvbl9jb250ZXh0ICpjdHg7Ci0Jc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gTlVMTDsKLQlpbnQgcmV0ID0gMDsKLQotCWlmICghdmlmIHx8ICFwcml2LT5pc19vcGVuKQotCQlyZXR1cm47Ci0KLQljdHggPSBpd2xfcnhvbl9jdHhfZnJvbV92aWYodmlmKTsKLQotCWlmICh2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApIHsKLQkJSVdMX0VSUihwcml2LCAiJXMgU2hvdWxkIG5vdCBiZSBjYWxsZWQgaW4gQVAgbW9kZVxuIiwgX19mdW5jX18pOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQotCQlyZXR1cm47Ci0KLQlpd2xfc2Nhbl9jYW5jZWxfdGltZW91dChwcml2LCAyMDApOwotCi0JY29uZiA9IGllZWU4MDIxMV9nZXRfaHdfY29uZihwcml2LT5odyk7Ci0KLQljdHgtPnN0YWdpbmcuZmlsdGVyX2ZsYWdzICY9IH5SWE9OX0ZJTFRFUl9BU1NPQ19NU0s7Ci0JaXdsY29yZV9jb21taXRfcnhvbihwcml2LCBjdHgpOwotCi0JcmV0ID0gaXdsX3NlbmRfcnhvbl90aW1pbmcocHJpdiwgY3R4KTsKLQlpZiAocmV0KQotCQlJV0xfV0FSTihwcml2LCAiUlhPTiB0aW1pbmcgLSAiCi0JCQkgICAgIkF0dGVtcHRpbmcgdG8gY29udGludWUuXG4iKTsKLQotCWN0eC0+c3RhZ2luZy5maWx0ZXJfZmxhZ3MgfD0gUlhPTl9GSUxURVJfQVNTT0NfTVNLOwotCi0JaXdsX3NldF9yeG9uX2h0KHByaXYsICZwcml2LT5jdXJyZW50X2h0X2NvbmZpZyk7Ci0KLQlpZiAocHJpdi0+Y2ZnLT5vcHMtPmhjbWQtPnNldF9yeG9uX2NoYWluKQotCQlwcml2LT5jZmctPm9wcy0+aGNtZC0+c2V0X3J4b25fY2hhaW4ocHJpdiwgY3R4KTsKLQotCWN0eC0+c3RhZ2luZy5hc3NvY19pZCA9IGNwdV90b19sZTE2KHZpZi0+YnNzX2NvbmYuYWlkKTsKLQotCUlXTF9ERUJVR19BU1NPQyhwcml2LCAiYXNzb2MgaWQgJWQgYmVhY29uIGludGVydmFsICVkXG4iLAotCQkJdmlmLT5ic3NfY29uZi5haWQsIHZpZi0+YnNzX2NvbmYuYmVhY29uX2ludCk7Ci0KLQlpZiAodmlmLT5ic3NfY29uZi51c2Vfc2hvcnRfcHJlYW1ibGUpCi0JCWN0eC0+c3RhZ2luZy5mbGFncyB8PSBSWE9OX0ZMR19TSE9SVF9QUkVBTUJMRV9NU0s7Ci0JZWxzZQotCQljdHgtPnN0YWdpbmcuZmxhZ3MgJj0gflJYT05fRkxHX1NIT1JUX1BSRUFNQkxFX01TSzsKLQotCWlmIChjdHgtPnN0YWdpbmcuZmxhZ3MgJiBSWE9OX0ZMR19CQU5EXzI0R19NU0spIHsKLQkJaWYgKHZpZi0+YnNzX2NvbmYudXNlX3Nob3J0X3Nsb3QpCi0JCQljdHgtPnN0YWdpbmcuZmxhZ3MgfD0gUlhPTl9GTEdfU0hPUlRfU0xPVF9NU0s7Ci0JCWVsc2UKLQkJCWN0eC0+c3RhZ2luZy5mbGFncyAmPSB+UlhPTl9GTEdfU0hPUlRfU0xPVF9NU0s7Ci0JfQotCi0JaXdsY29yZV9jb21taXRfcnhvbihwcml2LCBjdHgpOwotCi0JSVdMX0RFQlVHX0FTU09DKHByaXYsICJBc3NvY2lhdGVkIGFzICVkIHRvOiAlcE1cbiIsCi0JCQl2aWYtPmJzc19jb25mLmFpZCwgY3R4LT5hY3RpdmUuYnNzaWRfYWRkcik7Ci0KLQlzd2l0Y2ggKHZpZi0+dHlwZSkgewotCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKLQkJYnJlYWs7Ci0JY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKLQkJaXdsX3NlbmRfYmVhY29uX2NtZChwcml2KTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJSVdMX0VSUihwcml2LCAiJXMgU2hvdWxkIG5vdCBiZSBjYWxsZWQgaW4gJWQgbW9kZVxuIiwKLQkJCSAgX19mdW5jX18sIHZpZi0+dHlwZSk7Ci0JCWJyZWFrOwotCX0KLQotCS8qIHRoZSBjaGFpbiBub2lzZSBjYWxpYnJhdGlvbiB3aWxsIGVuYWJsZWQgUE0gdXBvbiBjb21wbGV0aW9uCi0JICogSWYgY2hhaW4gbm9pc2UgaGFzIGFscmVhZHkgYmVlbiBydW4sIHRoZW4gd2UgbmVlZCB0byBlbmFibGUKLQkgKiBwb3dlciBtYW5hZ2VtZW50IGhlcmUgKi8KLQlpZiAocHJpdi0+Y2hhaW5fbm9pc2VfZGF0YS5zdGF0ZSA9PSBJV0xfQ0hBSU5fTk9JU0VfRE9ORSkKLQkJaXdsX3Bvd2VyX3VwZGF0ZV9tb2RlKHByaXYsIGZhbHNlKTsKLQotCS8qIEVuYWJsZSBSeCBkaWZmZXJlbnRpYWwgZ2FpbiBhbmQgc2Vuc2l0aXZpdHkgY2FsaWJyYXRpb25zICovCi0JaXdsX2NoYWluX25vaXNlX3Jlc2V0KHByaXYpOwotCXByaXYtPnN0YXJ0X2NhbGliID0gMTsKLQotfQotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBtYWM4MDIxMSBlbnRyeSBwb2ludCBmdW5jdGlvbnMKQEAgLTM0MjAsNyArMzE2OSw4IEBACiAJaHctPmZsYWdzID0gSUVFRTgwMjExX0hXX1NJR05BTF9EQk0gfAogCQkgICAgSUVFRTgwMjExX0hXX0FNUERVX0FHR1JFR0FUSU9OIHwKIAkJICAgIElFRUU4MDIxMV9IV19ORUVEX0RUSU1fUEVSSU9EIHwKLQkJICAgIElFRUU4MDIxMV9IV19TUEVDVFJVTV9NR01UOworCQkgICAgSUVFRTgwMjExX0hXX1NQRUNUUlVNX01HTVQgfAorCQkgICAgSUVFRTgwMjExX0hXX1JFUE9SVFNfVFhfQUNLX1NUQVRVUzsKIAogCWlmICghcHJpdi0+Y2ZnLT5iYXNlX3BhcmFtcy0+YnJva2VuX3Bvd2Vyc2F2ZSkKIAkJaHctPmZsYWdzIHw9IElFRUU4MDIxMV9IV19TVVBQT1JUU19QUyB8CkBAIC0zNDc0LDcgKzMyMjQsNyBAQAogfQogCiAKLXN0YXRpYyBpbnQgaXdsX21hY19zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK2ludCBpd2xhZ25fbWFjX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwogCWludCByZXQ7CkBAIC0zNTE1LDcgKzMyNjUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBpd2xfbWFjX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit2b2lkIGl3bGFnbl9tYWNfc3RvcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKIApAQCAtMzUzMCwxNCArMzI4MCwxNSBAQAogCiAJZmx1c2hfd29ya3F1ZXVlKHByaXYtPndvcmtxdWV1ZSk7CiAKLQkvKiBlbmFibGUgaW50ZXJydXB0cyBhZ2FpbiBpbiBvcmRlciB0byByZWNlaXZlIHJma2lsbCBjaGFuZ2VzICovCisJLyogVXNlciBzcGFjZSBzb2Z0d2FyZSBtYXkgZXhwZWN0IGdldHRpbmcgcmZraWxsIGNoYW5nZXMKKwkgKiBldmVuIGlmIGludGVyZmFjZSBpcyBkb3duICovCiAJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX0lOVCwgMHhGRkZGRkZGRik7Ci0JaXdsX2VuYWJsZV9pbnRlcnJ1cHRzKHByaXYpOworCWl3bF9lbmFibGVfcmZraWxsX2ludChwcml2KTsKIAogCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmVcbiIpOwogfQogCi1zdGF0aWMgaW50IGl3bF9tYWNfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IpCitpbnQgaXdsYWduX21hY190eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKIApAQCAtMzU1Myw3MyArMzMwNCwxMiBAQAogCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKLXZvaWQgaXdsX2NvbmZpZ19hcChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCit2b2lkIGl3bGFnbl9tYWNfdXBkYXRlX3RraXBfa2V5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkJc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5Y29uZiwKKwkJCQlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAorCQkJCXUzMiBpdjMyLCB1MTYgKnBoYXNlMWtleSkKIHsKLQlzdHJ1Y3QgaXdsX3J4b25fY29udGV4dCAqY3R4ID0gaXdsX3J4b25fY3R4X2Zyb21fdmlmKHZpZik7Ci0JaW50IHJldCA9IDA7Ci0KLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZwcml2LT5tdXRleCk7Ci0KLQlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCi0JCXJldHVybjsKLQotCS8qIFRoZSBmb2xsb3dpbmcgc2hvdWxkIGJlIGRvbmUgb25seSBhdCBBUCBicmluZyB1cCAqLwotCWlmICghaXdsX2lzX2Fzc29jaWF0ZWRfY3R4KGN0eCkpIHsKLQotCQkvKiBSWE9OIC0gdW5hc3NvYyAodG8gc2V0IHRpbWluZyBjb21tYW5kKSAqLwotCQljdHgtPnN0YWdpbmcuZmlsdGVyX2ZsYWdzICY9IH5SWE9OX0ZJTFRFUl9BU1NPQ19NU0s7Ci0JCWl3bGNvcmVfY29tbWl0X3J4b24ocHJpdiwgY3R4KTsKLQotCQkvKiBSWE9OIFRpbWluZyAqLwotCQlyZXQgPSBpd2xfc2VuZF9yeG9uX3RpbWluZyhwcml2LCBjdHgpOwotCQlpZiAocmV0KQotCQkJSVdMX1dBUk4ocHJpdiwgIlJYT04gdGltaW5nIGZhaWxlZCAtICIKLQkJCQkJIkF0dGVtcHRpbmcgdG8gY29udGludWUuXG4iKTsKLQotCQkvKiBBUCBoYXMgYWxsIGFudGVubmFzICovCi0JCXByaXYtPmNoYWluX25vaXNlX2RhdGEuYWN0aXZlX2NoYWlucyA9Ci0JCQlwcml2LT5od19wYXJhbXMudmFsaWRfcnhfYW50OwotCQlpd2xfc2V0X3J4b25faHQocHJpdiwgJnByaXYtPmN1cnJlbnRfaHRfY29uZmlnKTsKLQkJaWYgKHByaXYtPmNmZy0+b3BzLT5oY21kLT5zZXRfcnhvbl9jaGFpbikKLQkJCXByaXYtPmNmZy0+b3BzLT5oY21kLT5zZXRfcnhvbl9jaGFpbihwcml2LCBjdHgpOwotCi0JCWN0eC0+c3RhZ2luZy5hc3NvY19pZCA9IDA7Ci0KLQkJaWYgKHZpZi0+YnNzX2NvbmYudXNlX3Nob3J0X3ByZWFtYmxlKQotCQkJY3R4LT5zdGFnaW5nLmZsYWdzIHw9Ci0JCQkJUlhPTl9GTEdfU0hPUlRfUFJFQU1CTEVfTVNLOwotCQllbHNlCi0JCQljdHgtPnN0YWdpbmcuZmxhZ3MgJj0KLQkJCQl+UlhPTl9GTEdfU0hPUlRfUFJFQU1CTEVfTVNLOwotCi0JCWlmIChjdHgtPnN0YWdpbmcuZmxhZ3MgJiBSWE9OX0ZMR19CQU5EXzI0R19NU0spIHsKLQkJCWlmICh2aWYtPmJzc19jb25mLnVzZV9zaG9ydF9zbG90KQotCQkJCWN0eC0+c3RhZ2luZy5mbGFncyB8PQotCQkJCQlSWE9OX0ZMR19TSE9SVF9TTE9UX01TSzsKLQkJCWVsc2UKLQkJCQljdHgtPnN0YWdpbmcuZmxhZ3MgJj0KLQkJCQkJflJYT05fRkxHX1NIT1JUX1NMT1RfTVNLOwotCQl9Ci0JCS8qIG5lZWQgdG8gc2VuZCBiZWFjb24gY21kIGJlZm9yZSBjb21taXR0aW5nIGFzc29jIFJYT04hICovCi0JCWl3bF9zZW5kX2JlYWNvbl9jbWQocHJpdik7Ci0JCS8qIHJlc3RvcmUgUlhPTiBhc3NvYyAqLwotCQljdHgtPnN0YWdpbmcuZmlsdGVyX2ZsYWdzIHw9IFJYT05fRklMVEVSX0FTU09DX01TSzsKLQkJaXdsY29yZV9jb21taXRfcnhvbihwcml2LCBjdHgpOwotCX0KLQlpd2xfc2VuZF9iZWFjb25fY21kKHByaXYpOwotCi0JLyogRklYTUUgLSB3ZSBuZWVkIHRvIGFkZCBjb2RlIGhlcmUgdG8gZGV0ZWN0IGEgdG90YWxseSBuZXcKLQkgKiBjb25maWd1cmF0aW9uLCByZXNldCB0aGUgQVAsIHVuYXNzb2MsIHJ4b24gdGltaW5nLCBhc3NvYywKLQkgKiBjbGVhciBzdGEgdGFibGUsIGFkZCBCQ0FTVCBzdGEuLi4gKi8KLX0KLQotc3RhdGljIHZvaWQgaXdsX21hY191cGRhdGVfdGtpcF9rZXkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCi0JCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleWNvbmYsCi0JCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCi0JCQkJICAgIHUzMiBpdjMyLCB1MTYgKnBoYXNlMWtleSkKLXsKLQogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwogCXN0cnVjdCBpd2xfdmlmX3ByaXYgKnZpZl9wcml2ID0gKHZvaWQgKil2aWYtPmRydl9wcml2OwogCkBAIC0zNjMxLDEwICszMzIxLDkgQEAKIAlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlXG4iKTsKIH0KIAotc3RhdGljIGludCBpd2xfbWFjX3NldF9rZXkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGVudW0gc2V0X2tleV9jbWQgY21kLAotCQkJICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKLQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCi0JCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXkpCitpbnQgaXdsYWduX21hY19zZXRfa2V5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBlbnVtIHNldF9rZXlfY21kIGNtZCwKKwkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCisJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXkpCiB7CiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CiAJc3RydWN0IGl3bF92aWZfcHJpdiAqdmlmX3ByaXYgPSAodm9pZCAqKXZpZi0+ZHJ2X3ByaXY7CkBAIC0zNzAxLDEwICszMzkwLDEwIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBpd2xfbWFjX2FtcGR1X2FjdGlvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAotCQkJCWVudW0gaWVlZTgwMjExX2FtcGR1X21sbWVfYWN0aW9uIGFjdGlvbiwKLQkJCQlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1MTYgdGlkLCB1MTYgKnNzbikKK2ludCBpd2xhZ25fbWFjX2FtcGR1X2FjdGlvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJICAgIGVudW0gaWVlZTgwMjExX2FtcGR1X21sbWVfYWN0aW9uIGFjdGlvbiwKKwkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1MTYgdGlkLCB1MTYgKnNzbikKIHsKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKIAlpbnQgcmV0ID0gLUVJTlZBTDsKQEAgLTM3ODUsMzkgKzM0NzQsOSBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIGl3bF9tYWNfc3RhX25vdGlmeShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAotCQkJICAgICAgIGVudW0gc3RhX25vdGlmeV9jbWQgY21kLAotCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpCi17Ci0Jc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7Ci0Jc3RydWN0IGl3bF9zdGF0aW9uX3ByaXYgKnN0YV9wcml2ID0gKHZvaWQgKilzdGEtPmRydl9wcml2OwotCWludCBzdGFfaWQ7Ci0KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgU1RBX05PVElGWV9TTEVFUDoKLQkJV0FSTl9PTighc3RhX3ByaXYtPmNsaWVudCk7Ci0JCXN0YV9wcml2LT5hc2xlZXAgPSB0cnVlOwotCQlpZiAoYXRvbWljX3JlYWQoJnN0YV9wcml2LT5wZW5kaW5nX2ZyYW1lcykgPiAwKQotCQkJaWVlZTgwMjExX3N0YV9ibG9ja19hd2FrZShodywgc3RhLCB0cnVlKTsKLQkJYnJlYWs7Ci0JY2FzZSBTVEFfTk9USUZZX0FXQUtFOgotCQlXQVJOX09OKCFzdGFfcHJpdi0+Y2xpZW50KTsKLQkJaWYgKCFzdGFfcHJpdi0+YXNsZWVwKQotCQkJYnJlYWs7Ci0JCXN0YV9wcml2LT5hc2xlZXAgPSBmYWxzZTsKLQkJc3RhX2lkID0gaXdsX3N0YV9pZChzdGEpOwotCQlpZiAoc3RhX2lkICE9IElXTF9JTlZBTElEX1NUQVRJT04pCi0JCQlpd2xfc3RhX21vZGlmeV9wc193YWtlKHByaXYsIHN0YV9pZCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLX0KLQotc3RhdGljIGludCBpd2xhZ25fbWFjX3N0YV9hZGQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAotCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkKK2ludCBpd2xhZ25fbWFjX3N0YV9hZGQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkKIHsKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKIAlzdHJ1Y3QgaXdsX3N0YXRpb25fcHJpdiAqc3RhX3ByaXYgPSAodm9pZCAqKXN0YS0+ZHJ2X3ByaXY7CkBAIC0zODU4LDggKzM1MTcsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBpd2xfbWFjX2NoYW5uZWxfc3dpdGNoKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbF9zd2l0Y2ggKmNoX3N3aXRjaCkKK3ZvaWQgaXdsYWduX21hY19jaGFubmVsX3N3aXRjaChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWxfc3dpdGNoICpjaF9zd2l0Y2gpCiB7CiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CiAJY29uc3Qgc3RydWN0IGl3bF9jaGFubmVsX2luZm8gKmNoX2luZm87CkBAIC0zOTU2LDEwICszNjE1LDEwIEBACiAJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZVxuIik7CiB9CiAKLXN0YXRpYyB2b2lkIGl3bGFnbl9jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCSAgICB1bnNpZ25lZCBpbnQgY2hhbmdlZF9mbGFncywKLQkJCQkgICAgdW5zaWduZWQgaW50ICp0b3RhbF9mbGFncywKLQkJCQkgICAgdTY0IG11bHRpY2FzdCkKK3ZvaWQgaXdsYWduX2NvbmZpZ3VyZV9maWx0ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgICAgIHVuc2lnbmVkIGludCBjaGFuZ2VkX2ZsYWdzLAorCQkJICAgICB1bnNpZ25lZCBpbnQgKnRvdGFsX2ZsYWdzLAorCQkJICAgICB1NjQgbXVsdGljYXN0KQogewogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwogCV9fbGUzMiBmaWx0ZXJfb3IgPSAwLCBmaWx0ZXJfbmFuZCA9IDA7CkBAIC0zOTc2LDcgKzM2MzUsOCBAQAogCQkJY2hhbmdlZF9mbGFncywgKnRvdGFsX2ZsYWdzKTsKIAogCUNISyhGSUZfT1RIRVJfQlNTIHwgRklGX1BST01JU0NfSU5fQlNTLCBSWE9OX0ZJTFRFUl9QUk9NSVNDX01TSyk7Ci0JQ0hLKEZJRl9DT05UUk9MLCBSWE9OX0ZJTFRFUl9DVEwySE9TVF9NU0spOworCS8qIFNldHRpbmcgX2p1c3RfIFJYT05fRklMVEVSX0NUTDJIT1NUX01TSyBjYXVzZXMgRkggZXJyb3JzICovCisJQ0hLKEZJRl9DT05UUk9MLCBSWE9OX0ZJTFRFUl9DVEwySE9TVF9NU0sgfCBSWE9OX0ZJTFRFUl9QUk9NSVNDX01TSyk7CiAJQ0hLKEZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDLCBSWE9OX0ZJTFRFUl9CQ09OX0FXQVJFX01TSyk7CiAKICN1bmRlZiBDSEsKQEAgLTM5ODYsNyArMzY0NiwxMSBAQAogCWZvcl9lYWNoX2NvbnRleHQocHJpdiwgY3R4KSB7CiAJCWN0eC0+c3RhZ2luZy5maWx0ZXJfZmxhZ3MgJj0gfmZpbHRlcl9uYW5kOwogCQljdHgtPnN0YWdpbmcuZmlsdGVyX2ZsYWdzIHw9IGZpbHRlcl9vcjsKLQkJaXdsY29yZV9jb21taXRfcnhvbihwcml2LCBjdHgpOworCisJCS8qCisJCSAqIE5vdCBjb21taXR0aW5nIGRpcmVjdGx5IGJlY2F1c2UgaGFyZHdhcmUgY2FuIHBlcmZvcm0gYSBzY2FuLAorCQkgKiBidXQgd2UnbGwgZXZlbnR1YWxseSBjb21taXQgdGhlIGZpbHRlciBmbGFncyBjaGFuZ2UgYW55d2F5LgorCQkgKi8KIAl9CiAKIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKQEAgLTQwMDEsNyArMzY2NSw3IEBACiAJCQlGSUZfQkNOX1BSQlJFU1BfUFJPTUlTQyB8IEZJRl9DT05UUk9MOwogfQogCi1zdGF0aWMgdm9pZCBpd2xfbWFjX2ZsdXNoKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBib29sIGRyb3ApCit2b2lkIGl3bGFnbl9tYWNfZmx1c2goc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGJvb2wgZHJvcCkKIHsKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKIApAQCAtNDA3NCwxMiArMzczOCw5IEBACiAJcHJpdi0+dWNvZGVfdHJhY2UuZGF0YSA9ICh1bnNpZ25lZCBsb25nKXByaXY7CiAJcHJpdi0+dWNvZGVfdHJhY2UuZnVuY3Rpb24gPSBpd2xfYmdfdWNvZGVfdHJhY2U7CiAKLQlpZiAocHJpdi0+Y2ZnLT5vcHMtPmxpYi0+cmVjb3Zlcl9mcm9tX3R4X3N0YWxsKSB7Ci0JCWluaXRfdGltZXIoJnByaXYtPm1vbml0b3JfcmVjb3Zlcik7Ci0JCXByaXYtPm1vbml0b3JfcmVjb3Zlci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpcHJpdjsKLQkJcHJpdi0+bW9uaXRvcl9yZWNvdmVyLmZ1bmN0aW9uID0KLQkJCXByaXYtPmNmZy0+b3BzLT5saWItPnJlY292ZXJfZnJvbV90eF9zdGFsbDsKLQl9CisJaW5pdF90aW1lcigmcHJpdi0+d2F0Y2hkb2cpOworCXByaXYtPndhdGNoZG9nLmRhdGEgPSAodW5zaWduZWQgbG9uZylwcml2OworCXByaXYtPndhdGNoZG9nLmZ1bmN0aW9uID0gaXdsX2JnX3dhdGNoZG9nOwogCiAJaWYgKCFwcml2LT5jZmctPmJhc2VfcGFyYW1zLT51c2VfaXNyX2xlZ2FjeSkKIAkJdGFza2xldF9pbml0KCZwcml2LT5pcnFfdGFza2xldCwgKHZvaWQgKCopKHVuc2lnbmVkIGxvbmcpKQpAQCAtNDE3MiwxMyArMzgzMywxMyBAQAogCQlwcml2LT5idF9vbl90aHJlc2ggPSBCVF9PTl9USFJFU0hPTERfREVGOwogCQlwcml2LT5idF9kdXJhdGlvbiA9IEJUX0RVUkFUSU9OX0xJTUlUX0RFRjsKIAkJcHJpdi0+ZHluYW1pY19mcmFnX3RocmVzaCA9IEJUX0ZSQUdfVEhSRVNIT0xEX0RFRjsKLQkJcHJpdi0+ZHluYW1pY19hZ2dfdGhyZXNoID0gQlRfQUdHX1RIUkVTSE9MRF9ERUY7CiAJfQogCiAJLyogU2V0IHRoZSB0eF9wb3dlcl91c2VyX2xtdCB0byB0aGUgbG93ZXN0IHBvd2VyIGxldmVsCiAJICogdGhpcyB2YWx1ZSB3aWxsIGdldCBvdmVyd3JpdHRlbiBieSBjaGFubmVsIG1heCBwb3dlciBhdmcKIAkgKiBmcm9tIGVlcHJvbSAqLwogCXByaXYtPnR4X3Bvd2VyX3VzZXJfbG10ID0gSVdMQUdOX1RYX1BPV0VSX1RBUkdFVF9QT1dFUl9NSU47CisJcHJpdi0+dHhfcG93ZXJfbmV4dCA9IElXTEFHTl9UWF9QT1dFUl9UQVJHRVRfUE9XRVJfTUlOOwogCiAJcmV0ID0gaXdsX2luaXRfY2hhbm5lbF9tYXAocHJpdik7CiAJaWYgKHJldCkgewpAQCAtNDIwOSwyOCArMzg3MCwzMCBAQAogCWtmcmVlKHByaXYtPnNjYW5fY21kKTsKIH0KIAotc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfb3BzIGl3bF9od19vcHMgPSB7Ci0JLnR4ID0gaXdsX21hY190eCwKLQkuc3RhcnQgPSBpd2xfbWFjX3N0YXJ0LAotCS5zdG9wID0gaXdsX21hY19zdG9wLAorI2lmZGVmIENPTkZJR19JV0w1MDAwCitzdHJ1Y3QgaWVlZTgwMjExX29wcyBpd2xhZ25faHdfb3BzID0geworCS50eCA9IGl3bGFnbl9tYWNfdHgsCisJLnN0YXJ0ID0gaXdsYWduX21hY19zdGFydCwKKwkuc3RvcCA9IGl3bGFnbl9tYWNfc3RvcCwKIAkuYWRkX2ludGVyZmFjZSA9IGl3bF9tYWNfYWRkX2ludGVyZmFjZSwKIAkucmVtb3ZlX2ludGVyZmFjZSA9IGl3bF9tYWNfcmVtb3ZlX2ludGVyZmFjZSwKLQkuY29uZmlnID0gaXdsX21hY19jb25maWcsCisJLmNoYW5nZV9pbnRlcmZhY2UgPSBpd2xfbWFjX2NoYW5nZV9pbnRlcmZhY2UsCisJLmNvbmZpZyA9IGl3bGFnbl9tYWNfY29uZmlnLAogCS5jb25maWd1cmVfZmlsdGVyID0gaXdsYWduX2NvbmZpZ3VyZV9maWx0ZXIsCi0JLnNldF9rZXkgPSBpd2xfbWFjX3NldF9rZXksCi0JLnVwZGF0ZV90a2lwX2tleSA9IGl3bF9tYWNfdXBkYXRlX3RraXBfa2V5LAorCS5zZXRfa2V5ID0gaXdsYWduX21hY19zZXRfa2V5LAorCS51cGRhdGVfdGtpcF9rZXkgPSBpd2xhZ25fbWFjX3VwZGF0ZV90a2lwX2tleSwKIAkuY29uZl90eCA9IGl3bF9tYWNfY29uZl90eCwKLQkucmVzZXRfdHNmID0gaXdsX21hY19yZXNldF90c2YsCi0JLmJzc19pbmZvX2NoYW5nZWQgPSBpd2xfYnNzX2luZm9fY2hhbmdlZCwKLQkuYW1wZHVfYWN0aW9uID0gaXdsX21hY19hbXBkdV9hY3Rpb24sCisJLmJzc19pbmZvX2NoYW5nZWQgPSBpd2xhZ25fYnNzX2luZm9fY2hhbmdlZCwKKwkuYW1wZHVfYWN0aW9uID0gaXdsYWduX21hY19hbXBkdV9hY3Rpb24sCiAJLmh3X3NjYW4gPSBpd2xfbWFjX2h3X3NjYW4sCi0JLnN0YV9ub3RpZnkgPSBpd2xfbWFjX3N0YV9ub3RpZnksCisJLnN0YV9ub3RpZnkgPSBpd2xhZ25fbWFjX3N0YV9ub3RpZnksCiAJLnN0YV9hZGQgPSBpd2xhZ25fbWFjX3N0YV9hZGQsCiAJLnN0YV9yZW1vdmUgPSBpd2xfbWFjX3N0YV9yZW1vdmUsCi0JLmNoYW5uZWxfc3dpdGNoID0gaXdsX21hY19jaGFubmVsX3N3aXRjaCwKLQkuZmx1c2ggPSBpd2xfbWFjX2ZsdXNoLAorCS5jaGFubmVsX3N3aXRjaCA9IGl3bGFnbl9tYWNfY2hhbm5lbF9zd2l0Y2gsCisJLmZsdXNoID0gaXdsYWduX21hY19mbHVzaCwKIAkudHhfbGFzdF9iZWFjb24gPSBpd2xfbWFjX3R4X2xhc3RfYmVhY29uLAogfTsKKyNlbmRpZgogCiBzdGF0aWMgdm9pZCBpd2xfaHdfZGV0ZWN0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKQEAgLTQyOTgsMTAgKzM5NjEsMTUgQEAKIAlpZiAoY2ZnLT5tb2RfcGFyYW1zLT5kaXNhYmxlX2h3X3NjYW4pIHsKIAkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmKHBkZXYtPmRldiksCiAJCQkic3cgc2NhbiBzdXBwb3J0IGlzIGRlcHJlY2F0ZWRcbiIpOwotCQlpd2xfaHdfb3BzLmh3X3NjYW4gPSBOVUxMOworI2lmZGVmIENPTkZJR19JV0w1MDAwCisJCWl3bGFnbl9od19vcHMuaHdfc2NhbiA9IE5VTEw7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfSVdMNDk2NQorCQlpd2w0OTY1X2h3X29wcy5od19zY2FuID0gTlVMTDsKKyNlbmRpZgogCX0KIAotCWh3ID0gaXdsX2FsbG9jX2FsbChjZmcsICZpd2xfaHdfb3BzKTsKKwlodyA9IGl3bF9hbGxvY19hbGwoY2ZnKTsKIAlpZiAoIWh3KSB7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwpAQCAtNDMzMyw2ICs0MDAxLDcgQEAKIAkJQklUKE5MODAyMTFfSUZUWVBFX0FESE9DKTsKIAlwcml2LT5jb250ZXh0c1tJV0xfUlhPTl9DVFhfQlNTXS5pbnRlcmZhY2VfbW9kZXMgPQogCQlCSVQoTkw4MDIxMV9JRlRZUEVfU1RBVElPTik7CisJcHJpdi0+Y29udGV4dHNbSVdMX1JYT05fQ1RYX0JTU10uYXBfZGV2dHlwZSA9IFJYT05fREVWX1RZUEVfQVA7CiAJcHJpdi0+Y29udGV4dHNbSVdMX1JYT05fQ1RYX0JTU10uaWJzc19kZXZ0eXBlID0gUlhPTl9ERVZfVFlQRV9JQlNTOwogCXByaXYtPmNvbnRleHRzW0lXTF9SWE9OX0NUWF9CU1NdLnN0YXRpb25fZGV2dHlwZSA9IFJYT05fREVWX1RZUEVfRVNTOwogCXByaXYtPmNvbnRleHRzW0lXTF9SWE9OX0NUWF9CU1NdLnVudXNlZF9kZXZ0eXBlID0gUlhPTl9ERVZfVFlQRV9FU1M7CkBAIC00MzY4LDggKzQwMzcsMTAgQEAKIAkJKGl3bGFnbl9hbnRfY291cGxpbmcgPiBJV0xfQlRfQU5URU5OQV9DT1VQTElOR19USFJFU0hPTEQpID8KIAkJdHJ1ZSA6IGZhbHNlOwogCi0JLyogZW5hYmxlL2Rpc2FibGUgYnQgY2hhbm5lbCBhbm5vdW5jZW1lbnQgKi8KKwkvKiBlbmFibGUvZGlzYWJsZSBidCBjaGFubmVsIGluaGliaXRpb24gKi8KIAlwcml2LT5idF9jaF9hbm5vdW5jZSA9IGl3bGFnbl9idF9jaF9hbm5vdW5jZTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiQlQgY2hhbm5lbCBpbmhpYml0aW9uIGlzICVzXG4iLAorCQkgICAgICAgKHByaXYtPmJ0X2NoX2Fubm91bmNlKSA/ICJPbiIgOiAiT2ZmIik7CiAKIAlpZiAoaXdsX2FsbG9jX3RyYWZmaWNfbWVtKHByaXYpKQogCQlJV0xfRVJSKHByaXYsICJOb3QgZW5vdWdoIG1lbW9yeSB0byBnZW5lcmF0ZSB0cmFmZmljIGxvZ1xuIik7CkBAIC00NDYxLDYgKzQxMzIsMTAgQEAKIAlpZiAoZXJyKQogCQlnb3RvIG91dF9mcmVlX2VlcHJvbTsKIAorCWVyciA9IGl3bF9lZXByb21fY2hlY2tfc2t1KHByaXYpOworCWlmIChlcnIpCisJCWdvdG8gb3V0X2ZyZWVfZWVwcm9tOworCiAJLyogZXh0cmFjdCBNQUMgQWRkcmVzcyAqLwogCWl3bF9lZXByb21fZ2V0X21hYyhwcml2LCBwcml2LT5hZGRyZXNzZXNbMF0uYWRkcik7CiAJSVdMX0RFQlVHX0lORk8ocHJpdiwgIk1BQyBhZGRyZXNzOiAlcE1cbiIsIHByaXYtPmFkZHJlc3Nlc1swXS5hZGRyKTsKQEAgLTQ1MDAsOCArNDE3NSwxMCBAQAogCiAJcGNpX2VuYWJsZV9tc2kocHJpdi0+cGNpX2Rldik7CiAKLQlpd2xfYWxsb2NfaXNyX2ljdChwcml2KTsKLQllcnIgPSByZXF1ZXN0X2lycShwcml2LT5wY2lfZGV2LT5pcnEsIHByaXYtPmNmZy0+b3BzLT5saWItPmlzciwKKwlpZiAocHJpdi0+Y2ZnLT5vcHMtPmxpYi0+aXNyX29wcy5hbGxvYykKKwkJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+aXNyX29wcy5hbGxvYyhwcml2KTsKKworCWVyciA9IHJlcXVlc3RfaXJxKHByaXYtPnBjaV9kZXYtPmlycSwgcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+aXNyX29wcy5pc3IsCiAJCQkgIElSUUZfU0hBUkVELCBEUlZfTkFNRSwgcHJpdik7CiAJaWYgKGVycikgewogCQlJV0xfRVJSKHByaXYsICJFcnJvciBhbGxvY2F0aW5nIElSUSAlZFxuIiwgcHJpdi0+cGNpX2Rldi0+aXJxKTsKQEAgLTQ1MTUsMTQgKzQxOTIsMTQgQEAKIAkgKiA4LiBFbmFibGUgaW50ZXJydXB0cyBhbmQgcmVhZCBSRktJTEwgc3RhdGUKIAkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0JLyogZW5hYmxlIGludGVycnVwdHMgaWYgbmVlZGVkOiBodyBidWcgdy9hICovCisJLyogZW5hYmxlIHJma2lsbCBpbnRlcnJ1cHQ6IGh3IGJ1ZyB3L2EgKi8KIAlwY2lfcmVhZF9jb25maWdfd29yZChwcml2LT5wY2lfZGV2LCBQQ0lfQ09NTUFORCwgJnBjaV9jbWQpOwogCWlmIChwY2lfY21kICYgUENJX0NPTU1BTkRfSU5UWF9ESVNBQkxFKSB7CiAJCXBjaV9jbWQgJj0gflBDSV9DT01NQU5EX0lOVFhfRElTQUJMRTsKIAkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHByaXYtPnBjaV9kZXYsIFBDSV9DT01NQU5ELCBwY2lfY21kKTsKIAl9CiAKLQlpd2xfZW5hYmxlX2ludGVycnVwdHMocHJpdik7CisJaXdsX2VuYWJsZV9yZmtpbGxfaW50KHByaXYpOwogCiAJLyogSWYgcGxhdGZvcm0ncyBSRl9LSUxMIHN3aXRjaCBpcyBOT1Qgc2V0IHRvIEtJTEwgKi8KIAlpZiAoaXdsX3JlYWQzMihwcml2LCBDU1JfR1BfQ05UUkwpICYgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX0hXX1JGX0tJTExfU1cpCkBAIC00NTQ4LDcgKzQyMjUsOCBAQAogCWRlc3Ryb3lfd29ya3F1ZXVlKHByaXYtPndvcmtxdWV1ZSk7CiAJcHJpdi0+d29ya3F1ZXVlID0gTlVMTDsKIAlmcmVlX2lycShwcml2LT5wY2lfZGV2LT5pcnEsIHByaXYpOwotCWl3bF9mcmVlX2lzcl9pY3QocHJpdik7CisJaWYgKHByaXYtPmNmZy0+b3BzLT5saWItPmlzcl9vcHMuZnJlZSkKKwkJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+aXNyX29wcy5mcmVlKHByaXYpOwogIG91dF9kaXNhYmxlX21zaToKIAlwY2lfZGlzYWJsZV9tc2kocHJpdi0+cGNpX2Rldik7CiAJaXdsX3VuaW5pdF9kcnYocHJpdik7CkBAIC00NjQzLDcgKzQzMjEsOCBAQAogCiAJaXdsX3VuaW5pdF9kcnYocHJpdik7CiAKLQlpd2xfZnJlZV9pc3JfaWN0KHByaXYpOworCWlmIChwcml2LT5jZmctPm9wcy0+bGliLT5pc3Jfb3BzLmZyZWUpCisJCXByaXYtPmNmZy0+b3BzLT5saWItPmlzcl9vcHMuZnJlZShwcml2KTsKIAogCWRldl9rZnJlZV9za2IocHJpdi0+YmVhY29uX3NrYik7CiAKQEAgLTQ3MzQsNTEgKzQ0MTMsMzIgQEAKIAl7SVdMX1BDSV9ERVZJQ0UoMHg0MjM5LCAweDEzMTEsIGl3bDYwMDBpXzJhZ25fY2ZnKX0sCiAJe0lXTF9QQ0lfREVWSUNFKDB4NDIzOSwgMHgxMzE2LCBpd2w2MDAwaV8yYWJnX2NmZyl9LAogCi0vKiA2eDAwIFNlcmllcyBHZW4yYSAqLwotCXtJV0xfUENJX0RFVklDRSgweDAwODIsIDB4MTIwMSwgaXdsNjAwMGcyYV8yYWduX2NmZyl9LAotCXtJV0xfUENJX0RFVklDRSgweDAwODUsIDB4MTIxMSwgaXdsNjAwMGcyYV8yYWduX2NmZyl9LAotCXtJV0xfUENJX0RFVklDRSgweDAwODIsIDB4MTIyMSwgaXdsNjAwMGcyYV8yYWduX2NmZyl9LAotCXtJV0xfUENJX0RFVklDRSgweDAwODIsIDB4MTIwNiwgaXdsNjAwMGcyYV8yYWJnX2NmZyl9LAotCXtJV0xfUENJX0RFVklDRSgweDAwODUsIDB4MTIxNiwgaXdsNjAwMGcyYV8yYWJnX2NmZyl9LAotCXtJV0xfUENJX0RFVklDRSgweDAwODIsIDB4MTIyNiwgaXdsNjAwMGcyYV8yYWJnX2NmZyl9LAotCXtJV0xfUENJX0RFVklDRSgweDAwODIsIDB4MTIwNywgaXdsNjAwMGcyYV8yYmdfY2ZnKX0sCi0Je0lXTF9QQ0lfREVWSUNFKDB4MDA4MiwgMHgxMzAxLCBpd2w2MDAwZzJhXzJhZ25fY2ZnKX0sCi0Je0lXTF9QQ0lfREVWSUNFKDB4MDA4MiwgMHgxMzA2LCBpd2w2MDAwZzJhXzJhYmdfY2ZnKX0sCi0Je0lXTF9QQ0lfREVWSUNFKDB4MDA4MiwgMHgxMzA3LCBpd2w2MDAwZzJhXzJiZ19jZmcpfSwKLQl7SVdMX1BDSV9ERVZJQ0UoMHgwMDgyLCAweDEzMjEsIGl3bDYwMDBnMmFfMmFnbl9jZmcpfSwKLQl7SVdMX1BDSV9ERVZJQ0UoMHgwMDgyLCAweDEzMjYsIGl3bDYwMDBnMmFfMmFiZ19jZmcpfSwKLQl7SVdMX1BDSV9ERVZJQ0UoMHgwMDg1LCAweDEzMTEsIGl3bDYwMDBnMmFfMmFnbl9jZmcpfSwKLQl7SVdMX1BDSV9ERVZJQ0UoMHgwMDg1LCAweDEzMTYsIGl3bDYwMDBnMmFfMmFiZ19jZmcpfSwKKy8qIDZ4MDUgU2VyaWVzICovCisJe0lXTF9QQ0lfREVWSUNFKDB4MDA4MiwgMHgxMzAxLCBpd2w2MDA1XzJhZ25fY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4MDA4MiwgMHgxMzA2LCBpd2w2MDA1XzJhYmdfY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4MDA4MiwgMHgxMzA3LCBpd2w2MDA1XzJiZ19jZmcpfSwKKwl7SVdMX1BDSV9ERVZJQ0UoMHgwMDgyLCAweDEzMjEsIGl3bDYwMDVfMmFnbl9jZmcpfSwKKwl7SVdMX1BDSV9ERVZJQ0UoMHgwMDgyLCAweDEzMjYsIGl3bDYwMDVfMmFiZ19jZmcpfSwKKwl7SVdMX1BDSV9ERVZJQ0UoMHgwMDg1LCAweDEzMTEsIGl3bDYwMDVfMmFnbl9jZmcpfSwKKwl7SVdMX1BDSV9ERVZJQ0UoMHgwMDg1LCAweDEzMTYsIGl3bDYwMDVfMmFiZ19jZmcpfSwKIAotLyogNngwMCBTZXJpZXMgR2VuMmIgKi8KLQl7SVdMX1BDSV9ERVZJQ0UoMHgwMDhGLCAweDUxMDUsIGl3bDYwMDBnMmJfYmduX2NmZyl9LAotCXtJV0xfUENJX0RFVklDRSgweDAwOTAsIDB4NTExNSwgaXdsNjAwMGcyYl9iZ25fY2ZnKX0sCi0Je0lXTF9QQ0lfREVWSUNFKDB4MDA4RiwgMHg1MTI1LCBpd2w2MDAwZzJiX2Jnbl9jZmcpfSwKLQl7SVdMX1BDSV9ERVZJQ0UoMHgwMDhGLCAweDUxMDcsIGl3bDYwMDBnMmJfYmdfY2ZnKX0sCi0Je0lXTF9QQ0lfREVWSUNFKDB4MDA4RiwgMHg1MjAxLCBpd2w2MDAwZzJiXzJhZ25fY2ZnKX0sCi0Je0lXTF9QQ0lfREVWSUNFKDB4MDA5MCwgMHg1MjExLCBpd2w2MDAwZzJiXzJhZ25fY2ZnKX0sCi0Je0lXTF9QQ0lfREVWSUNFKDB4MDA4RiwgMHg1MjIxLCBpd2w2MDAwZzJiXzJhZ25fY2ZnKX0sCi0Je0lXTF9QQ0lfREVWSUNFKDB4MDA4RiwgMHg1MjA2LCBpd2w2MDAwZzJiXzJhYmdfY2ZnKX0sCi0Je0lXTF9QQ0lfREVWSUNFKDB4MDA5MCwgMHg1MjE2LCBpd2w2MDAwZzJiXzJhYmdfY2ZnKX0sCi0Je0lXTF9QQ0lfREVWSUNFKDB4MDA4RiwgMHg1MjI2LCBpd2w2MDAwZzJiXzJhYmdfY2ZnKX0sCi0Je0lXTF9QQ0lfREVWSUNFKDB4MDA4RiwgMHg1MjA3LCBpd2w2MDAwZzJiXzJiZ19jZmcpfSwKLQl7SVdMX1BDSV9ERVZJQ0UoMHgwMDhBLCAweDUzMDEsIGl3bDYwMDBnMmJfYmduX2NmZyl9LAotCXtJV0xfUENJX0RFVklDRSgweDAwOEEsIDB4NTMwNSwgaXdsNjAwMGcyYl9iZ25fY2ZnKX0sCi0Je0lXTF9QQ0lfREVWSUNFKDB4MDA4QSwgMHg1MzA3LCBpd2w2MDAwZzJiX2JnX2NmZyl9LAotCXtJV0xfUENJX0RFVklDRSgweDAwOEEsIDB4NTMyMSwgaXdsNjAwMGcyYl9iZ25fY2ZnKX0sCi0Je0lXTF9QQ0lfREVWSUNFKDB4MDA4QSwgMHg1MzI1LCBpd2w2MDAwZzJiX2Jnbl9jZmcpfSwKLQl7SVdMX1BDSV9ERVZJQ0UoMHgwMDhCLCAweDUzMTEsIGl3bDYwMDBnMmJfYmduX2NmZyl9LAotCXtJV0xfUENJX0RFVklDRSgweDAwOEIsIDB4NTMxNSwgaXdsNjAwMGcyYl9iZ25fY2ZnKX0sCi0Je0lXTF9QQ0lfREVWSUNFKDB4MDA5MCwgMHg1MjExLCBpd2w2MDAwZzJiXzJhZ25fY2ZnKX0sCi0Je0lXTF9QQ0lfREVWSUNFKDB4MDA5MCwgMHg1MjE1LCBpd2w2MDAwZzJiXzJiZ25fY2ZnKX0sCi0Je0lXTF9QQ0lfREVWSUNFKDB4MDA5MCwgMHg1MjE2LCBpd2w2MDAwZzJiXzJhYmdfY2ZnKX0sCi0Je0lXTF9QQ0lfREVWSUNFKDB4MDA5MSwgMHg1MjAxLCBpd2w2MDAwZzJiXzJhZ25fY2ZnKX0sCi0Je0lXTF9QQ0lfREVWSUNFKDB4MDA5MSwgMHg1MjA1LCBpd2w2MDAwZzJiXzJiZ25fY2ZnKX0sCi0Je0lXTF9QQ0lfREVWSUNFKDB4MDA5MSwgMHg1MjA2LCBpd2w2MDAwZzJiXzJhYmdfY2ZnKX0sCi0Je0lXTF9QQ0lfREVWSUNFKDB4MDA5MSwgMHg1MjA3LCBpd2w2MDAwZzJiXzJiZ19jZmcpfSwKLQl7SVdMX1BDSV9ERVZJQ0UoMHgwMDkxLCAweDUyMjEsIGl3bDYwMDBnMmJfMmFnbl9jZmcpfSwKLQl7SVdMX1BDSV9ERVZJQ0UoMHgwMDkxLCAweDUyMjUsIGl3bDYwMDBnMmJfMmJnbl9jZmcpfSwKLQl7SVdMX1BDSV9ERVZJQ0UoMHgwMDkxLCAweDUyMjYsIGl3bDYwMDBnMmJfMmFiZ19jZmcpfSwKKy8qIDZ4MzAgU2VyaWVzICovCisJe0lXTF9QQ0lfREVWSUNFKDB4MDA4QSwgMHg1MzA1LCBpd2wxMDMwX2Jnbl9jZmcpfSwKKwl7SVdMX1BDSV9ERVZJQ0UoMHgwMDhBLCAweDUzMDcsIGl3bDEwMzBfYmdfY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4MDA4QSwgMHg1MzI1LCBpd2wxMDMwX2Jnbl9jZmcpfSwKKwl7SVdMX1BDSV9ERVZJQ0UoMHgwMDhBLCAweDUzMjcsIGl3bDEwMzBfYmdfY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4MDA4QiwgMHg1MzE1LCBpd2wxMDMwX2Jnbl9jZmcpfSwKKwl7SVdMX1BDSV9ERVZJQ0UoMHgwMDhCLCAweDUzMTcsIGl3bDEwMzBfYmdfY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4MDA5MCwgMHg1MjExLCBpd2w2MDMwXzJhZ25fY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4MDA5MCwgMHg1MjE1LCBpd2w2MDMwXzJiZ25fY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4MDA5MCwgMHg1MjE2LCBpd2w2MDMwXzJhYmdfY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4MDA5MSwgMHg1MjAxLCBpd2w2MDMwXzJhZ25fY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4MDA5MSwgMHg1MjA1LCBpd2w2MDMwXzJiZ25fY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4MDA5MSwgMHg1MjA2LCBpd2w2MDMwXzJhYmdfY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4MDA5MSwgMHg1MjA3LCBpd2w2MDMwXzJiZ19jZmcpfSwKKwl7SVdMX1BDSV9ERVZJQ0UoMHgwMDkxLCAweDUyMjEsIGl3bDYwMzBfMmFnbl9jZmcpfSwKKwl7SVdMX1BDSV9ERVZJQ0UoMHgwMDkxLCAweDUyMjUsIGl3bDYwMzBfMmJnbl9jZmcpfSwKKwl7SVdMX1BDSV9ERVZJQ0UoMHgwMDkxLCAweDUyMjYsIGl3bDYwMzBfMmFiZ19jZmcpfSwKIAogLyogNng1MCBXaUZpL1dpTWF4IFNlcmllcyAqLwogCXtJV0xfUENJX0RFVklDRSgweDAwODcsIDB4MTMwMSwgaXdsNjA1MF8yYWduX2NmZyl9LApAQCAtNDc4OCwxMyArNDQ0OCwxMyBAQAogCXtJV0xfUENJX0RFVklDRSgweDAwODksIDB4MTMxMSwgaXdsNjA1MF8yYWduX2NmZyl9LAogCXtJV0xfUENJX0RFVklDRSgweDAwODksIDB4MTMxNiwgaXdsNjA1MF8yYWJnX2NmZyl9LAogCi0vKiA2eDUwIFdpRmkvV2lNYXggU2VyaWVzIEdlbjIgKi8KLQl7SVdMX1BDSV9ERVZJQ0UoMHgwODg1LCAweDEzMDUsIGl3bDYwNTBnMl9iZ25fY2ZnKX0sCi0Je0lXTF9QQ0lfREVWSUNFKDB4MDg4NSwgMHgxMzA2LCBpd2w2MDUwZzJfYmduX2NmZyl9LAotCXtJV0xfUENJX0RFVklDRSgweDA4ODUsIDB4MTMyNSwgaXdsNjA1MGcyX2Jnbl9jZmcpfSwKLQl7SVdMX1BDSV9ERVZJQ0UoMHgwODg1LCAweDEzMjYsIGl3bDYwNTBnMl9iZ25fY2ZnKX0sCi0Je0lXTF9QQ0lfREVWSUNFKDB4MDg4NiwgMHgxMzE1LCBpd2w2MDUwZzJfYmduX2NmZyl9LAotCXtJV0xfUENJX0RFVklDRSgweDA4ODYsIDB4MTMxNiwgaXdsNjA1MGcyX2Jnbl9jZmcpfSwKKy8qIDYxNTAgV2lGaS9XaU1heCBTZXJpZXMgKi8KKwl7SVdMX1BDSV9ERVZJQ0UoMHgwODg1LCAweDEzMDUsIGl3bDYxNTBfYmduX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDA4ODUsIDB4MTMwNiwgaXdsNjE1MF9iZ25fY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4MDg4NSwgMHgxMzI1LCBpd2w2MTUwX2Jnbl9jZmcpfSwKKwl7SVdMX1BDSV9ERVZJQ0UoMHgwODg1LCAweDEzMjYsIGl3bDYxNTBfYmduX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDA4ODYsIDB4MTMxNSwgaXdsNjE1MF9iZ25fY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4MDg4NiwgMHgxMzE2LCBpd2w2MTUwX2Jnbl9jZmcpfSwKIAogLyogMTAwMCBTZXJpZXMgV2lGaSAqLwogCXtJV0xfUENJX0RFVklDRSgweDAwODMsIDB4MTIwNSwgaXdsMTAwMF9iZ25fY2ZnKX0sCkBAIC00ODEyLDEwICs0NDcyLDExIEBACiAKIC8qIDEwMCBTZXJpZXMgV2lGaSAqLwogCXtJV0xfUENJX0RFVklDRSgweDA4QUUsIDB4MTAwNSwgaXdsMTAwX2Jnbl9jZmcpfSwKLQl7SVdMX1BDSV9ERVZJQ0UoMHgwOEFGLCAweDEwMTUsIGl3bDEwMF9iZ25fY2ZnKX0sCi0Je0lXTF9QQ0lfREVWSUNFKDB4MDhBRSwgMHgxMDI1LCBpd2wxMDBfYmduX2NmZyl9LAogCXtJV0xfUENJX0RFVklDRSgweDA4QUUsIDB4MTAwNywgaXdsMTAwX2JnX2NmZyl9LAotCXtJV0xfUENJX0RFVklDRSgweDA4QUUsIDB4MTAxNywgaXdsMTAwX2JnX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDA4QUYsIDB4MTAxNSwgaXdsMTAwX2Jnbl9jZmcpfSwKKwl7SVdMX1BDSV9ERVZJQ0UoMHgwOEFGLCAweDEwMTcsIGl3bDEwMF9iZ19jZmcpfSwKKwl7SVdMX1BDSV9ERVZJQ0UoMHgwOEFFLCAweDEwMjUsIGl3bDEwMF9iZ25fY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4MDhBRSwgMHgxMDI3LCBpd2wxMDBfYmdfY2ZnKX0sCiAKIC8qIDEzMCBTZXJpZXMgV2lGaSAqLwogCXtJV0xfUENJX0RFVklDRSgweDA4OTYsIDB4NTAwNSwgaXdsMTMwX2Jnbl9jZmcpfSwKQEAgLTQ4MzYsMTAgKzQ0OTcsNyBAQAogCS5pZF90YWJsZSA9IGl3bF9od19jYXJkX2lkcywKIAkucHJvYmUgPSBpd2xfcGNpX3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChpd2xfcGNpX3JlbW92ZSksCi0jaWZkZWYgQ09ORklHX1BNCi0JLnN1c3BlbmQgPSBpd2xfcGNpX3N1c3BlbmQsCi0JLnJlc3VtZSA9IGl3bF9wY2lfcmVzdW1lLAotI2VuZGlmCisJLmRyaXZlci5wbSA9IElXTF9QTV9PUFMsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBpd2xfaW5pdCh2b2lkKQpAQCAtNDkyNSw2ICs0NTgzLDYgQEAKIE1PRFVMRV9QQVJNX0RFU0MoYW50ZW5uYV9jb3VwbGluZywKIAkJICJzcGVjaWZ5IGFudGVubmEgY291cGxpbmcgaW4gZEIgKGRlZnVhbHQ6IDAgZEIpIik7CiAKLW1vZHVsZV9wYXJhbV9uYW1lZChidF9jaF9hbm5vdW5jZSwgaXdsYWduX2J0X2NoX2Fubm91bmNlLCBib29sLCBTX0lSVUdPKTsKLU1PRFVMRV9QQVJNX0RFU0MoYnRfY2hfYW5ub3VuY2UsCi0JCSAiRW5hYmxlIEJUIGNoYW5uZWwgYW5ub3VuY2VtZW50IG1vZGUgKGRlZmF1bHQ6IGVuYWJsZSkiKTsKK21vZHVsZV9wYXJhbV9uYW1lZChidF9jaF9pbmhpYml0aW9uLCBpd2xhZ25fYnRfY2hfYW5ub3VuY2UsIGJvb2wsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhidF9jaF9pbmhpYml0aW9uLAorCQkgIkRpc2FibGUgQlQgY2hhbm5lbCBpbmhpYml0aW9uIChkZWZhdWx0OiBlbmFibGUpIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi5oCmluZGV4IGY1MjVkNTUuLmRhMzAzNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi5oCkBAIC03NCwyMiArNzQsMjIgQEAKIGV4dGVybiBzdHJ1Y3QgaXdsX2NmZyBpd2w1MTAwX2FiZ19jZmc7CiBleHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsNTE1MF9hZ25fY2ZnOwogZXh0ZXJuIHN0cnVjdCBpd2xfY2ZnIGl3bDUxNTBfYWJnX2NmZzsKLWV4dGVybiBzdHJ1Y3QgaXdsX2NmZyBpd2w2MDAwZzJhXzJhZ25fY2ZnOwotZXh0ZXJuIHN0cnVjdCBpd2xfY2ZnIGl3bDYwMDBnMmFfMmFiZ19jZmc7Ci1leHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsNjAwMGcyYV8yYmdfY2ZnOwotZXh0ZXJuIHN0cnVjdCBpd2xfY2ZnIGl3bDYwMDBnMmJfYmduX2NmZzsKLWV4dGVybiBzdHJ1Y3QgaXdsX2NmZyBpd2w2MDAwZzJiX2JnX2NmZzsKLWV4dGVybiBzdHJ1Y3QgaXdsX2NmZyBpd2w2MDAwZzJiXzJhZ25fY2ZnOwotZXh0ZXJuIHN0cnVjdCBpd2xfY2ZnIGl3bDYwMDBnMmJfMmFiZ19jZmc7Ci1leHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsNjAwMGcyYl8yYmduX2NmZzsKLWV4dGVybiBzdHJ1Y3QgaXdsX2NmZyBpd2w2MDAwZzJiXzJiZ19jZmc7CitleHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsNjAwNV8yYWduX2NmZzsKK2V4dGVybiBzdHJ1Y3QgaXdsX2NmZyBpd2w2MDA1XzJhYmdfY2ZnOworZXh0ZXJuIHN0cnVjdCBpd2xfY2ZnIGl3bDYwMDVfMmJnX2NmZzsKK2V4dGVybiBzdHJ1Y3QgaXdsX2NmZyBpd2wxMDMwX2Jnbl9jZmc7CitleHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsMTAzMF9iZ19jZmc7CitleHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsNjAzMF8yYWduX2NmZzsKK2V4dGVybiBzdHJ1Y3QgaXdsX2NmZyBpd2w2MDMwXzJhYmdfY2ZnOworZXh0ZXJuIHN0cnVjdCBpd2xfY2ZnIGl3bDYwMzBfMmJnbl9jZmc7CitleHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsNjAzMF8yYmdfY2ZnOwogZXh0ZXJuIHN0cnVjdCBpd2xfY2ZnIGl3bDYwMDBpXzJhZ25fY2ZnOwogZXh0ZXJuIHN0cnVjdCBpd2xfY2ZnIGl3bDYwMDBpXzJhYmdfY2ZnOwogZXh0ZXJuIHN0cnVjdCBpd2xfY2ZnIGl3bDYwMDBpXzJiZ19jZmc7CiBleHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsNjAwMF8zYWduX2NmZzsKIGV4dGVybiBzdHJ1Y3QgaXdsX2NmZyBpd2w2MDUwXzJhZ25fY2ZnOwogZXh0ZXJuIHN0cnVjdCBpd2xfY2ZnIGl3bDYwNTBfMmFiZ19jZmc7Ci1leHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsNjA1MGcyX2Jnbl9jZmc7CitleHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsNjE1MF9iZ25fY2ZnOwogZXh0ZXJuIHN0cnVjdCBpd2xfY2ZnIGl3bDEwMDBfYmduX2NmZzsKIGV4dGVybiBzdHJ1Y3QgaXdsX2NmZyBpd2wxMDAwX2JnX2NmZzsKIGV4dGVybiBzdHJ1Y3QgaXdsX2NmZyBpd2wxMDBfYmduX2NmZzsKQEAgLTEwMiw2ICsxMDIsOSBAQAogZXh0ZXJuIHN0cnVjdCBpd2xfaGNtZF9vcHMgaXdsYWduX2J0X2hjbWQ7CiBleHRlcm4gc3RydWN0IGl3bF9oY21kX3V0aWxzX29wcyBpd2xhZ25faGNtZF91dGlsczsKIAorZXh0ZXJuIHN0cnVjdCBpZWVlODAyMTFfb3BzIGl3bGFnbl9od19vcHM7CitleHRlcm4gc3RydWN0IGllZWU4MDIxMV9vcHMgaXdsNDk2NV9od19vcHM7CisKIGludCBpd2xfcmVzZXRfaWN0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiB2b2lkIGl3bF9kaXNhYmxlX2ljdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogaW50IGl3bF9hbGxvY19pc3JfaWN0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CkBAIC0xMzIsNiArMTM1LDExIEBACiAvKiBSWE9OICovCiBpbnQgaXdsYWduX2NvbW1pdF9yeG9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF9yeG9uX2NvbnRleHQgKmN0eCk7CiB2b2lkIGl3bGFnbl9zZXRfcnhvbl9jaGFpbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfcnhvbl9jb250ZXh0ICpjdHgpOworaW50IGl3bGFnbl9tYWNfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgY2hhbmdlZCk7Cit2b2lkIGl3bGFnbl9ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpic3NfY29uZiwKKwkJCSAgICAgdTMyIGNoYW5nZXMpOwogCiAvKiB1Q29kZSAqLwogaW50IGl3bGFnbl9sb2FkX3Vjb2RlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CkBAIC0yNDksNiArMjU3LDcgQEAKIGludCBpd2xhZ25fc2VuZF9yeG9uX2Fzc29jKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCSAgIHN0cnVjdCBpd2xfcnhvbl9jb250ZXh0ICpjdHgpOwogaW50IGl3bGFnbl9zZW5kX3R4X2FudF9jb25maWcoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1OCB2YWxpZF90eF9hbnQpOworaW50IGl3bGFnbl9zZW5kX2JlYWNvbl9jbWQoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIAogLyogYnQgY29leCAqLwogdm9pZCBpd2xhZ25fc2VuZF9hZHZhbmNlX2J0X2NvbmZpZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwpAQCAtMjkyLDkgKzMwMSwxMiBAQAogCQkJIGludCB0aWQsIHUxNiBzc24pOwogaW50IGl3bF9zdGFfcnhfYWdnX3N0b3Aoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAogCQkJaW50IHRpZCk7Ci12b2lkIGl3bF9zdGFfbW9kaWZ5X3BzX3dha2Uoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgc3RhX2lkKTsKIHZvaWQgaXdsX3N0YV9tb2RpZnlfc2xlZXBfdHhfY291bnQoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgc3RhX2lkLCBpbnQgY250KTsKIGludCBpd2xfdXBkYXRlX2JjYXN0X3N0YXRpb25zKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Cit2b2lkIGl3bGFnbl9tYWNfc3RhX25vdGlmeShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkgICBlbnVtIHN0YV9ub3RpZnlfY21kIGNtZCwKKwkJCSAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpOwogCiAvKiByYXRlICovCiBzdGF0aWMgaW5saW5lIHUzMiBpd2xfYW50X2lkeF90b19mbGFncyh1OCBhbnRfaWR4KQpAQCAtMzE4LDQgKzMzMCwzMSBAQAogaW50IGl3bGNvcmVfZWVwcm9tX2FjcXVpcmVfc2VtYXBob3JlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiB2b2lkIGl3bGNvcmVfZWVwcm9tX3JlbGVhc2Vfc2VtYXBob3JlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiAKKy8qIG1hYzgwMjExIGhhbmRsZXJzIChmb3IgNDk2NSkgKi8KK2ludCBpd2xhZ25fbWFjX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2ludCBpd2xhZ25fbWFjX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3ZvaWQgaXdsYWduX21hY19zdG9wKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3ZvaWQgaXdsYWduX2NvbmZpZ3VyZV9maWx0ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgICAgIHVuc2lnbmVkIGludCBjaGFuZ2VkX2ZsYWdzLAorCQkJICAgICB1bnNpZ25lZCBpbnQgKnRvdGFsX2ZsYWdzLAorCQkJICAgICB1NjQgbXVsdGljYXN0KTsKK2ludCBpd2xhZ25fbWFjX3NldF9rZXkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGVudW0gc2V0X2tleV9jbWQgY21kLAorCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKKwkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSk7Cit2b2lkIGl3bGFnbl9tYWNfdXBkYXRlX3RraXBfa2V5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkJc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5Y29uZiwKKwkJCQlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAorCQkJCXUzMiBpdjMyLCB1MTYgKnBoYXNlMWtleSk7CitpbnQgaXdsYWduX21hY19hbXBkdV9hY3Rpb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCSAgICBlbnVtIGllZWU4MDIxMV9hbXBkdV9tbG1lX2FjdGlvbiBhY3Rpb24sCisJCQkgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdTE2IHRpZCwgdTE2ICpzc24pOworaW50IGl3bGFnbl9tYWNfc3RhX2FkZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKTsKK3ZvaWQgaXdsYWduX21hY19jaGFubmVsX3N3aXRjaChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWxfc3dpdGNoICpjaF9zd2l0Y2gpOwordm9pZCBpd2xhZ25fbWFjX2ZsdXNoKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBib29sIGRyb3ApOworCiAjZW5kaWYgLyogX19pd2xfYWduX2hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29tbWFuZHMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvbW1hbmRzLmgKaW5kZXggNDI0ODAxYS4uZjg5M2Q0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29tbWFuZHMuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb21tYW5kcy5oCkBAIC0yMDIyLDYgKzIwMjIsOSBAQAogCV9fbGU2NCBiaXRtYXA7CiAJX19sZTE2IHNjZF9mbG93OwogCV9fbGUxNiBzY2Rfc3NuOworCS8qIGZvbGxvd2luZyBvbmx5IGZvciA1MDAwIHNlcmllcyBhbmQgdXAgKi8KKwl1OCB0eGVkOwkvKiBudW1iZXIgb2YgZnJhbWVzIHNlbnQgKi8KKwl1OCB0eGVkXzJfZG9uZTsgLyogbnVtYmVyIG9mIGZyYW1lcyBhY2tlZCAqLwogfSBfX3BhY2tlZDsKIAogLyoKQEAgLTI0MDcsOSArMjQxMCw5IEBACiAjZGVmaW5lIEJUX0ZSQUdfVEhSRVNIT0xEX01BWAkwCiAjZGVmaW5lIEJUX0ZSQUdfVEhSRVNIT0xEX01JTgkwCiAKLSNkZWZpbmUgQlRfQUdHX1RIUkVTSE9MRF9ERUYJMAotI2RlZmluZSBCVF9BR0dfVEhSRVNIT0xEX01BWAkwCi0jZGVmaW5lIEJUX0FHR19USFJFU0hPTERfTUlOCTAKKyNkZWZpbmUgQlRfQUdHX1RIUkVTSE9MRF9ERUYJMTIwMAorI2RlZmluZSBCVF9BR0dfVEhSRVNIT0xEX01BWAk4MDAwCisjZGVmaW5lIEJUX0FHR19USFJFU0hPTERfTUlOCTQwMAogCiAvKgogICogUkVQTFlfQlRfQ09ORklHID0gMHg5YiAoY29tbWFuZCwgaGFzIHNpbXBsZSBnZW5lcmljIHJlc3BvbnNlKQpAQCAtMjQzNiw4ICsyNDM5LDkgQEAKICNkZWZpbmUgSVdMQUdOX0JUX0ZMQUdfQ09FWF9NT0RFXzNXCQkyCiAjZGVmaW5lIElXTEFHTl9CVF9GTEFHX0NPRVhfTU9ERV80VwkJMwogCi0jZGVmaW5lIElXTEFHTl9CVF9GTEFHX1VDT0RFX0RFRkFVTFQJQklUKDYpCi0jZGVmaW5lIElXTEFHTl9CVF9GTEFHX05PQ09FWF9OT1RJRglCSVQoNykKKyNkZWZpbmUgSVdMQUdOX0JUX0ZMQUdfVUNPREVfREVGQVVMVAkJQklUKDYpCisvKiBEaXNhYmxlIFN5bmMgUFNQb2xsIG9uIFNDTy9lU0NPICovCisjZGVmaW5lIElXTEFHTl9CVF9GTEFHX1NZTkNfMl9CVF9ESVNBQkxFCUJJVCg3KQogCiAjZGVmaW5lIElXTEFHTl9CVF9QUklPX0JPT1NUX01BWAkweEZGCiAjZGVmaW5lIElXTEFHTl9CVF9QUklPX0JPT1NUX01JTgkweDAwCkBAIC0yNDQ3LDggKzI0NTEsOSBAQAogCiAjZGVmaW5lIElXTEFHTl9CVDNfVDdfREVGQVVMVAkJMQogCi0jZGVmaW5lIElXTEFHTl9CVF9LSUxMX0FDS19NQVNLX0RFRkFVTFQJY3B1X3RvX2xlMzIoMHhmZmZmZmZmZikKLSNkZWZpbmUgSVdMQUdOX0JUX0tJTExfQ1RTX01BU0tfREVGQVVMVAljcHVfdG9fbGUzMigweGZmZmZmZmZmKQorI2RlZmluZSBJV0xBR05fQlRfS0lMTF9BQ0tfTUFTS19ERUZBVUxUCWNwdV90b19sZTMyKDB4ZmZmZjAwMDApCisjZGVmaW5lIElXTEFHTl9CVF9LSUxMX0NUU19NQVNLX0RFRkFVTFQJY3B1X3RvX2xlMzIoMHhmZmZmMDAwMCkKKyNkZWZpbmUgSVdMQUdOX0JUX0tJTExfQUNLX0NUU19NQVNLX1NDTwljcHVfdG9fbGUzMigweGZmZmZmZmZmKQogCiAjZGVmaW5lIElXTEFHTl9CVDNfUFJJT19TQU1QTEVfREVGQVVMVAkyCiAKQEAgLTI2NjQsOSArMjY2OSwxNiBAQAogI2RlZmluZSBJV0xfUE9XRVJfVkVDX1NJWkUgNQogCiAjZGVmaW5lIElXTF9QT1dFUl9EUklWRVJfQUxMT1dfU0xFRVBfTVNLCWNwdV90b19sZTE2KEJJVCgwKSkKKyNkZWZpbmUgSVdMX1BPV0VSX1BPV0VSX1NBVkVfRU5BX01TSwkJY3B1X3RvX2xlMTYoQklUKDApKQorI2RlZmluZSBJV0xfUE9XRVJfUE9XRVJfTUFOQUdFTUVOVF9FTkFfTVNLCWNwdV90b19sZTE2KEJJVCgxKSkKICNkZWZpbmUgSVdMX1BPV0VSX1NMRUVQX09WRVJfRFRJTV9NU0sJCWNwdV90b19sZTE2KEJJVCgyKSkKICNkZWZpbmUgSVdMX1BPV0VSX1BDSV9QTV9NU0sJCQljcHVfdG9fbGUxNihCSVQoMykpCiAjZGVmaW5lIElXTF9QT1dFUl9GQVNUX1BECQkJY3B1X3RvX2xlMTYoQklUKDQpKQorI2RlZmluZSBJV0xfUE9XRVJfQkVBQ09OX0ZJTFRFUklORwkJY3B1X3RvX2xlMTYoQklUKDUpKQorI2RlZmluZSBJV0xfUE9XRVJfU0hBRE9XX1JFR19FTkEJCWNwdV90b19sZTE2KEJJVCg2KSkKKyNkZWZpbmUgSVdMX1BPV0VSX0NUX0tJTExfU0VUCQkJY3B1X3RvX2xlMTYoQklUKDcpKQorI2RlZmluZSBJV0xfUE9XRVJfQlRfU0NPX0VOQQkJCWNwdV90b19sZTE2KEJJVCg4KSkKKyNkZWZpbmUgSVdMX1BPV0VSX0FEVkFOQ0VfUE1fRU5BX01TSwkJY3B1X3RvX2xlMTYoQklUKDkpKQogCiBzdHJ1Y3QgaXdsMzk0NV9wb3dlcnRhYmxlX2NtZCB7CiAJX19sZTE2IGZsYWdzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5jCmluZGV4IDI1ZmIzOTEuLmVmYmRlMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb3JlLmMKQEAgLTc3LDE1ICs3NywxNSBAQAogCiAKIC8qIFRoaXMgZnVuY3Rpb24gYm90aCBhbGxvY2F0ZXMgYW5kIGluaXRpYWxpemVzIGh3IGFuZCBwcml2LiAqLwotc3RydWN0IGllZWU4MDIxMV9odyAqaXdsX2FsbG9jX2FsbChzdHJ1Y3QgaXdsX2NmZyAqY2ZnLAotCQlzdHJ1Y3QgaWVlZTgwMjExX29wcyAqaHdfb3BzKQorc3RydWN0IGllZWU4MDIxMV9odyAqaXdsX2FsbG9jX2FsbChzdHJ1Y3QgaXdsX2NmZyAqY2ZnKQogewogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdjsKLQogCS8qIG1hYzgwMjExIGFsbG9jYXRlcyBtZW1vcnkgZm9yIHRoaXMgZGV2aWNlIGluc3RhbmNlLCBpbmNsdWRpbmcKIAkgKiAgIHNwYWNlIGZvciB0aGlzIGRyaXZlcidzIHByaXZhdGUgc3RydWN0dXJlICovCi0Jc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPQotCQlpZWVlODAyMTFfYWxsb2NfaHcoc2l6ZW9mKHN0cnVjdCBpd2xfcHJpdiksIGh3X29wcyk7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CisKKwlodyA9IGllZWU4MDIxMV9hbGxvY19odyhzaXplb2Yoc3RydWN0IGl3bF9wcml2KSwKKwkJCQljZmctPm9wcy0+aWVlZTgwMjExX29wcyk7CiAJaWYgKGh3ID09IE5VTEwpIHsKIAkJcHJfZXJyKCIlczogQ2FuIG5vdCBhbGxvY2F0ZSBuZXR3b3JrIGRldmljZVxuIiwKIAkJICAgICAgIGNmZy0+bmFtZSk7CkBAIC0xMDAsMzUgKzEwMCw2IEBACiB9CiBFWFBPUlRfU1lNQk9MKGl3bF9hbGxvY19hbGwpOwogCi0vKgotICogUW9TICBzdXBwb3J0Ci0qLwotc3RhdGljIHZvaWQgaXdsX3VwZGF0ZV9xb3Moc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX3J4b25fY29udGV4dCAqY3R4KQotewotCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKLQkJcmV0dXJuOwotCi0JaWYgKCFjdHgtPmlzX2FjdGl2ZSkKLQkJcmV0dXJuOwotCi0JY3R4LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0ucW9zX2ZsYWdzID0gMDsKLQotCWlmIChjdHgtPnFvc19kYXRhLnFvc19hY3RpdmUpCi0JCWN0eC0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLnFvc19mbGFncyB8PQotCQkJUU9TX1BBUkFNX0ZMR19VUERBVEVfRURDQV9NU0s7Ci0KLQlpZiAoY3R4LT5odC5lbmFibGVkKQotCQljdHgtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5xb3NfZmxhZ3MgfD0gUU9TX1BBUkFNX0ZMR19UR05fTVNLOwotCi0JSVdMX0RFQlVHX1FPUyhwcml2LCAic2VuZCBRb1MgY21kIHdpdGggUW9zIGFjdGl2ZT0lZCBGTEFHUz0weCVYXG4iLAotCQkgICAgICBjdHgtPnFvc19kYXRhLnFvc19hY3RpdmUsCi0JCSAgICAgIGN0eC0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLnFvc19mbGFncyk7Ci0KLQlpd2xfc2VuZF9jbWRfcGR1X2FzeW5jKHByaXYsIGN0eC0+cW9zX2NtZCwKLQkJCSAgICAgICBzaXplb2Yoc3RydWN0IGl3bF9xb3NwYXJhbV9jbWQpLAotCQkJICAgICAgICZjdHgtPnFvc19kYXRhLmRlZl9xb3NfcGFybSwgTlVMTCk7Ci19Ci0KICNkZWZpbmUgTUFYX0JJVF9SQVRFXzQwX01IWiAxNTAgLyogTWJwcyAqLwogI2RlZmluZSBNQVhfQklUX1JBVEVfMjBfTUhaIDcyIC8qIE1icHMgKi8KIHN0YXRpYyB2b2lkIGl3bGNvcmVfaW5pdF9odF9od19jYXBhYihjb25zdCBzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCkBAIC0zMTcsNDAgKzI4OCw2IEBACiB9CiBFWFBPUlRfU1lNQk9MKGl3bGNvcmVfZnJlZV9nZW9zKTsKIAotLyoKLSAqICBpd2xjb3JlX3R4X2NtZF9wcm90ZWN0aW9uOiBTZXQgcnRzL2N0cy4gMzk0NSBhbmQgNDk2NSBvbmx5IHNoYXJlIHRoaXMKLSAqICBmdW5jdGlvbi4KLSAqLwotdm9pZCBpd2xjb3JlX3R4X2NtZF9wcm90ZWN0aW9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8sCi0JCQkgICAgICAgX19sZTE2IGZjLCBfX2xlMzIgKnR4X2ZsYWdzKQotewotCWlmIChpbmZvLT5jb250cm9sLnJhdGVzWzBdLmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1VTRV9SVFNfQ1RTKSB7Ci0JCSp0eF9mbGFncyB8PSBUWF9DTURfRkxHX1JUU19NU0s7Ci0JCSp0eF9mbGFncyAmPSB+VFhfQ01EX0ZMR19DVFNfTVNLOwotCQkqdHhfZmxhZ3MgfD0gVFhfQ01EX0ZMR19GVUxMX1RYT1BfUFJPVF9NU0s7Ci0KLQkJaWYgKCFpZWVlODAyMTFfaXNfbWdtdChmYykpCi0JCQlyZXR1cm47Ci0KLQkJc3dpdGNoIChmYyAmIGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX1NUWVBFKSkgewotCQljYXNlIGNwdV90b19sZTE2KElFRUU4MDIxMV9TVFlQRV9BVVRIKToKLQkJY2FzZSBjcHVfdG9fbGUxNihJRUVFODAyMTFfU1RZUEVfREVBVVRIKToKLQkJY2FzZSBjcHVfdG9fbGUxNihJRUVFODAyMTFfU1RZUEVfQVNTT0NfUkVRKToKLQkJY2FzZSBjcHVfdG9fbGUxNihJRUVFODAyMTFfU1RZUEVfUkVBU1NPQ19SRVEpOgotCQkJKnR4X2ZsYWdzICY9IH5UWF9DTURfRkxHX1JUU19NU0s7Ci0JCQkqdHhfZmxhZ3MgfD0gVFhfQ01EX0ZMR19DVFNfTVNLOwotCQkJYnJlYWs7Ci0JCX0KLQl9IGVsc2UgaWYgKGluZm8tPmNvbnRyb2wucmF0ZXNbMF0uZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfVVNFX0NUU19QUk9URUNUKSB7Ci0JCSp0eF9mbGFncyAmPSB+VFhfQ01EX0ZMR19SVFNfTVNLOwotCQkqdHhfZmxhZ3MgfD0gVFhfQ01EX0ZMR19DVFNfTVNLOwotCQkqdHhfZmxhZ3MgfD0gVFhfQ01EX0ZMR19GVUxMX1RYT1BfUFJPVF9NU0s7Ci0JfQotfQotRVhQT1JUX1NZTUJPTChpd2xjb3JlX3R4X2NtZF9wcm90ZWN0aW9uKTsKLQotCiBzdGF0aWMgYm9vbCBpd2xfaXNfY2hhbm5lbF9leHRlbnNpb24oc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJCSAgICAgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kLAogCQkJCSAgICAgdTE2IGNoYW5uZWwsIHU4IGV4dGVuc2lvbl9jaGFuX29mZnNldCkKQEAgLTEwMjAsNiArOTU3LDIyIEBACiAJLyogQ2FuY2VsIGN1cnJlbnRseSBxdWV1ZWQgY29tbWFuZC4gKi8KIAljbGVhcl9iaXQoU1RBVFVTX0hDTURfQUNUSVZFLCAmcHJpdi0+c3RhdHVzKTsKIAorCS8qIFcvQSBmb3IgV2lGaS9XaU1BWCBjb2V4IGFuZCBXaU1BWCBvd24gdGhlIFJGICovCisJaWYgKHByaXYtPmNmZy0+aW50ZXJuYWxfd2ltYXhfY29leCAmJgorCSAgICAoIShpd2xfcmVhZF9wcnBoKHByaXYsIEFQTUdfQ0xLX0NUUkxfUkVHKSAmCisJCQlBUE1TX0NMS19WQUxfTVJCX0ZVTkNfTU9ERSkgfHwKKwkgICAgIChpd2xfcmVhZF9wcnBoKHByaXYsIEFQTUdfUFNfQ1RSTF9SRUcpICYKKwkJCUFQTUdfUFNfQ1RSTF9WQUxfUkVTRVRfUkVRKSkpIHsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwcml2LT53YWl0X2NvbW1hbmRfcXVldWUpOworCQkvKgorCQkgKktlZXAgdGhlIHJlc3RhcnQgcHJvY2VzcyBmcm9tIHRyeWluZyB0byBzZW5kIGhvc3QKKwkJICogY29tbWFuZHMgYnkgY2xlYXJpbmcgdGhlIElOSVQgc3RhdHVzIGJpdAorCQkgKi8KKwkJY2xlYXJfYml0KFNUQVRVU19SRUFEWSwgJnByaXYtPnN0YXR1cyk7CisJCUlXTF9FUlIocHJpdiwgIlJGIGlzIHVzZWQgYnkgV2lNQVhcbiIpOworCQlyZXR1cm47CisJfQorCiAJSVdMX0VSUihwcml2LCAiTG9hZGVkIGZpcm13YXJlIHZlcnNpb246ICVzXG4iLAogCQlwcml2LT5ody0+d2lwaHktPmZ3X3ZlcnNpb24pOwogCkBAIC0xMjA2LDggKzExNTksMTYgQEAKIAogaW50IGl3bF9zZXRfdHhfcG93ZXIoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzOCB0eF9wb3dlciwgYm9vbCBmb3JjZSkKIHsKLQlpbnQgcmV0ID0gMDsKLQlzOCBwcmV2X3R4X3Bvd2VyID0gcHJpdi0+dHhfcG93ZXJfdXNlcl9sbXQ7CisJaW50IHJldDsKKwlzOCBwcmV2X3R4X3Bvd2VyOworCisJbG9ja2RlcF9hc3NlcnRfaGVsZCgmcHJpdi0+bXV0ZXgpOworCisJaWYgKHByaXYtPnR4X3Bvd2VyX3VzZXJfbG10ID09IHR4X3Bvd2VyICYmICFmb3JjZSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIXByaXYtPmNmZy0+b3BzLT5saWItPnNlbmRfdHhfcG93ZXIpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCWlmICh0eF9wb3dlciA8IElXTEFHTl9UWF9QT1dFUl9UQVJHRVRfUE9XRVJfTUlOKSB7CiAJCUlXTF9XQVJOKHByaXYsCkBAIC0xMjI0LDk0ICsxMTg1LDMwIEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmIChwcml2LT50eF9wb3dlcl91c2VyX2xtdCAhPSB0eF9wb3dlcikKLQkJZm9yY2UgPSB0cnVlOworCWlmICghaXdsX2lzX3JlYWR5X3JmKHByaXYpKQorCQlyZXR1cm4gLUVJTzsKIAotCS8qIGlmIG5pYyBpcyBub3QgdXAgZG9uJ3Qgc2VuZCBjb21tYW5kICovCi0JaWYgKGl3bF9pc19yZWFkeV9yZihwcml2KSkgewotCQlwcml2LT50eF9wb3dlcl91c2VyX2xtdCA9IHR4X3Bvd2VyOwotCQlpZiAoZm9yY2UgJiYgcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+c2VuZF90eF9wb3dlcikKLQkJCXJldCA9IHByaXYtPmNmZy0+b3BzLT5saWItPnNlbmRfdHhfcG93ZXIocHJpdik7Ci0JCWVsc2UgaWYgKCFwcml2LT5jZmctPm9wcy0+bGliLT5zZW5kX3R4X3Bvd2VyKQotCQkJcmV0ID0gLUVPUE5PVFNVUFA7Ci0JCS8qCi0JCSAqIGlmIGZhaWwgdG8gc2V0IHR4X3Bvd2VyLCByZXN0b3JlIHRoZSBvcmlnLiB0eCBwb3dlcgotCQkgKi8KLQkJaWYgKHJldCkKLQkJCXByaXYtPnR4X3Bvd2VyX3VzZXJfbG10ID0gcHJldl90eF9wb3dlcjsKKwkvKiBzY2FuIGNvbXBsZXRlIHVzZSB0eF9wb3dlcl9uZXh0LCBuZWVkIHRvIGJlIHVwZGF0ZWQgKi8KKwlwcml2LT50eF9wb3dlcl9uZXh0ID0gdHhfcG93ZXI7CisJaWYgKHRlc3RfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cykgJiYgIWZvcmNlKSB7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJEZWZlcnJpbmcgdHggcG93ZXIgc2V0IHdoaWxlIHNjYW5uaW5nXG4iKTsKKwkJcmV0dXJuIDA7CiAJfQogCi0JLyoKLQkgKiBFdmVuIHRoaXMgaXMgYW4gYXN5bmMgaG9zdCBjb21tYW5kLCB0aGUgY29tbWFuZAotCSAqIHdpbGwgYWx3YXlzIHJlcG9ydCBzdWNjZXNzIGZyb20gdUNvZGUKLQkgKiBTbyBvbmNlIGRyaXZlciBjYW4gcGxhY2luZyB0aGUgY29tbWFuZCBpbnRvIHRoZSBxdWV1ZQotCSAqIHN1Y2Nlc3NmdWxseSwgZHJpdmVyIGNhbiB1c2UgcHJpdi0+dHhfcG93ZXJfdXNlcl9sbXQKLQkgKiB0byByZWZsZWN0IHRoZSBjdXJyZW50IHR4IHBvd2VyCi0JICovCisJcHJldl90eF9wb3dlciA9IHByaXYtPnR4X3Bvd2VyX3VzZXJfbG10OworCXByaXYtPnR4X3Bvd2VyX3VzZXJfbG10ID0gdHhfcG93ZXI7CisKKwlyZXQgPSBwcml2LT5jZmctPm9wcy0+bGliLT5zZW5kX3R4X3Bvd2VyKHByaXYpOworCisJLyogaWYgZmFpbCB0byBzZXQgdHhfcG93ZXIsIHJlc3RvcmUgdGhlIG9yaWcuIHR4IHBvd2VyICovCisJaWYgKHJldCkgeworCQlwcml2LT50eF9wb3dlcl91c2VyX2xtdCA9IHByZXZfdHhfcG93ZXI7CisJCXByaXYtPnR4X3Bvd2VyX25leHQgPSBwcmV2X3R4X3Bvd2VyOworCX0KIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChpd2xfc2V0X3R4X3Bvd2VyKTsKIAotaXJxcmV0dXJuX3QgaXdsX2lzcl9sZWdhY3koaW50IGlycSwgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBkYXRhOwotCXUzMiBpbnRhLCBpbnRhX21hc2s7Ci0JdTMyIGludGFfZmg7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpZiAoIXByaXYpCi0JCXJldHVybiBJUlFfTk9ORTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0KLQkvKiBEaXNhYmxlIChidXQgZG9uJ3QgY2xlYXIhKSBpbnRlcnJ1cHRzIGhlcmUgdG8gYXZvaWQKLQkgKiAgICBiYWNrLXRvLWJhY2sgSVNScyBhbmQgc3BvcmFkaWMgaW50ZXJydXB0cyBmcm9tIG91ciBOSUMuCi0JICogSWYgd2UgaGF2ZSBzb21ldGhpbmcgdG8gc2VydmljZSwgdGhlIHRhc2tsZXQgd2lsbCByZS1lbmFibGUgaW50cy4KLQkgKiBJZiB3ZSAqZG9uJ3QqIGhhdmUgc29tZXRoaW5nLCB3ZSdsbCByZS1lbmFibGUgYmVmb3JlIGxlYXZpbmcgaGVyZS4gKi8KLQlpbnRhX21hc2sgPSBpd2xfcmVhZDMyKHByaXYsIENTUl9JTlRfTUFTSyk7ICAvKiBqdXN0IGZvciBkZWJ1ZyAqLwotCWl3bF93cml0ZTMyKHByaXYsIENTUl9JTlRfTUFTSywgMHgwMDAwMDAwMCk7Ci0KLQkvKiBEaXNjb3ZlciB3aGljaCBpbnRlcnJ1cHRzIGFyZSBhY3RpdmUvcGVuZGluZyAqLwotCWludGEgPSBpd2xfcmVhZDMyKHByaXYsIENTUl9JTlQpOwotCWludGFfZmggPSBpd2xfcmVhZDMyKHByaXYsIENTUl9GSF9JTlRfU1RBVFVTKTsKLQotCS8qIElnbm9yZSBpbnRlcnJ1cHQgaWYgdGhlcmUncyBub3RoaW5nIGluIE5JQyB0byBzZXJ2aWNlLgotCSAqIFRoaXMgbWF5IGJlIGR1ZSB0byBJUlEgc2hhcmVkIHdpdGggYW5vdGhlciBkZXZpY2UsCi0JICogb3IgZHVlIHRvIHNwb3JhZGljIGludGVycnVwdHMgdGhyb3duIGZyb20gb3VyIE5JQy4gKi8KLQlpZiAoIWludGEgJiYgIWludGFfZmgpIHsKLQkJSVdMX0RFQlVHX0lTUihwcml2LCAiSWdub3JlIGludGVycnVwdCwgaW50YSA9PSAwLCBpbnRhX2ZoID09IDBcbiIpOwotCQlnb3RvIG5vbmU7Ci0JfQotCi0JaWYgKChpbnRhID09IDB4RkZGRkZGRkYpIHx8ICgoaW50YSAmIDB4RkZGRkZGRjApID09IDB4YTVhNWE1YTApKSB7Ci0JCS8qIEhhcmR3YXJlIGRpc2FwcGVhcmVkLiBJdCBtaWdodCBoYXZlIGFscmVhZHkgcmFpc2VkCi0JCSAqIGFuIGludGVycnVwdCAqLwotCQlJV0xfV0FSTihwcml2LCAiSEFSRFdBUkUgR09ORT8/IElOVEEgPT0gMHglMDh4XG4iLCBpbnRhKTsKLQkJZ290byB1bnBsdWdnZWQ7Ci0JfQotCi0JSVdMX0RFQlVHX0lTUihwcml2LCAiSVNSIGludGEgMHglMDh4LCBlbmFibGVkIDB4JTA4eCwgZmggMHglMDh4XG4iLAotCQkgICAgICBpbnRhLCBpbnRhX21hc2ssIGludGFfZmgpOwotCi0JaW50YSAmPSB+Q1NSX0lOVF9CSVRfU0NEOwotCi0JLyogaXdsX2lycV90YXNrbGV0KCkgd2lsbCBzZXJ2aWNlIGludGVycnVwdHMgYW5kIHJlLWVuYWJsZSB0aGVtICovCi0JaWYgKGxpa2VseShpbnRhIHx8IGludGFfZmgpKQotCQl0YXNrbGV0X3NjaGVkdWxlKCZwcml2LT5pcnFfdGFza2xldCk7Ci0KLSB1bnBsdWdnZWQ6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCXJldHVybiBJUlFfSEFORExFRDsKLQotIG5vbmU6Ci0JLyogcmUtZW5hYmxlIGludGVycnVwdHMgaGVyZSBzaW5jZSB3ZSBkb24ndCBoYXZlIGFueXRoaW5nIHRvIHNlcnZpY2UuICovCi0JLyogb25seSBSZS1lbmFibGUgaWYgZGlhYmxlZCBieSBpcnEgKi8KLQlpZiAodGVzdF9iaXQoU1RBVFVTX0lOVF9FTkFCTEVELCAmcHJpdi0+c3RhdHVzKSkKLQkJaXdsX2VuYWJsZV9pbnRlcnJ1cHRzKHByaXYpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlyZXR1cm4gSVJRX05PTkU7Ci19Ci1FWFBPUlRfU1lNQk9MKGl3bF9pc3JfbGVnYWN5KTsKLQogdm9pZCBpd2xfc2VuZF9idF9jb25maWcoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXN0cnVjdCBpd2xfYnRfY21kIGJ0X2NtZCA9IHsKQEAgLTEzMjYsNiArMTIyMyw3IEBACiAJZWxzZQogCQlidF9jbWQuZmxhZ3MgPSBCVF9DT0VYX0VOQUJMRTsKIAorCXByaXYtPmJ0X2VuYWJsZV9mbGFnID0gYnRfY21kLmZsYWdzOwogCUlXTF9ERUJVR19JTkZPKHByaXYsICJCVCBjb2V4ICVzXG4iLAogCQkoYnRfY21kLmZsYWdzID09IEJUX0NPRVhfRElTQUJMRSkgPyAiZGlzYWJsZSIgOiAiYWN0aXZlIik7CiAKQEAgLTE0NTIsMzEyICsxMzUwLDggQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGl3bF9tYWNfdHhfbGFzdF9iZWFjb24pOwogCi1zdGF0aWMgdm9pZCBpd2xfaHRfY29uZihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQorc3RhdGljIGludCBpd2xfc2V0X21vZGUoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX3J4b25fY29udGV4dCAqY3R4KQogewotCXN0cnVjdCBpd2xfaHRfY29uZmlnICpodF9jb25mID0gJnByaXYtPmN1cnJlbnRfaHRfY29uZmlnOwotCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGE7Ci0Jc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqYnNzX2NvbmYgPSAmdmlmLT5ic3NfY29uZjsKLQlzdHJ1Y3QgaXdsX3J4b25fY29udGV4dCAqY3R4ID0gaXdsX3J4b25fY3R4X2Zyb21fdmlmKHZpZik7Ci0KLQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImVudGVyOlxuIik7Ci0KLQlpZiAoIWN0eC0+aHQuZW5hYmxlZCkKLQkJcmV0dXJuOwotCi0JY3R4LT5odC5wcm90ZWN0aW9uID0KLQkJYnNzX2NvbmYtPmh0X29wZXJhdGlvbl9tb2RlICYgSUVFRTgwMjExX0hUX09QX01PREVfUFJPVEVDVElPTjsKLQljdHgtPmh0Lm5vbl9nZl9zdGFfcHJlc2VudCA9Ci0JCSEhKGJzc19jb25mLT5odF9vcGVyYXRpb25fbW9kZSAmIElFRUU4MDIxMV9IVF9PUF9NT0RFX05PTl9HRl9TVEFfUFJTTlQpOwotCi0JaHRfY29uZi0+c2luZ2xlX2NoYWluX3N1ZmZpY2llbnQgPSBmYWxzZTsKLQotCXN3aXRjaCAodmlmLT50eXBlKSB7Ci0JY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgotCQlyY3VfcmVhZF9sb2NrKCk7Ci0JCXN0YSA9IGllZWU4MDIxMV9maW5kX3N0YSh2aWYsIGJzc19jb25mLT5ic3NpZCk7Ci0JCWlmIChzdGEpIHsKLQkJCXN0cnVjdCBpZWVlODAyMTFfc3RhX2h0X2NhcCAqaHRfY2FwID0gJnN0YS0+aHRfY2FwOwotCQkJaW50IG1heHN0cmVhbXM7Ci0KLQkJCW1heHN0cmVhbXMgPSAoaHRfY2FwLT5tY3MudHhfcGFyYW1zICYKLQkJCQkgICAgICBJRUVFODAyMTFfSFRfTUNTX1RYX01BWF9TVFJFQU1TX01BU0spCi0JCQkJCT4+IElFRUU4MDIxMV9IVF9NQ1NfVFhfTUFYX1NUUkVBTVNfU0hJRlQ7Ci0JCQltYXhzdHJlYW1zICs9IDE7Ci0KLQkJCWlmICgoaHRfY2FwLT5tY3MucnhfbWFza1sxXSA9PSAwKSAmJgotCQkJICAgIChodF9jYXAtPm1jcy5yeF9tYXNrWzJdID09IDApKQotCQkJCWh0X2NvbmYtPnNpbmdsZV9jaGFpbl9zdWZmaWNpZW50ID0gdHJ1ZTsKLQkJCWlmIChtYXhzdHJlYW1zIDw9IDEpCi0JCQkJaHRfY29uZi0+c2luZ2xlX2NoYWluX3N1ZmZpY2llbnQgPSB0cnVlOwotCQl9IGVsc2UgewotCQkJLyoKLQkJCSAqIElmIGF0IGFsbCwgdGhpcyBjYW4gb25seSBoYXBwZW4gdGhyb3VnaCBhIHJhY2UKLQkJCSAqIHdoZW4gdGhlIEFQIGRpc2Nvbm5lY3RzIHVzIHdoaWxlIHdlJ3JlIHN0aWxsCi0JCQkgKiBzZXR0aW5nIHVwIHRoZSBjb25uZWN0aW9uLCBpbiB0aGF0IGNhc2UgbWFjODAyMTEKLQkJCSAqIHdpbGwgc29vbiB0ZWxsIHVzIGFib3V0IHRoYXQuCi0JCQkgKi8KLQkJCWh0X2NvbmYtPnNpbmdsZV9jaGFpbl9zdWZmaWNpZW50ID0gdHJ1ZTsKLQkJfQotCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJYnJlYWs7Ci0JY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKLQkJaHRfY29uZi0+c2luZ2xlX2NoYWluX3N1ZmZpY2llbnQgPSB0cnVlOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0KLQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlXG4iKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGl3bF9zZXRfbm9fYXNzb2Moc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQotewotCXN0cnVjdCBpd2xfcnhvbl9jb250ZXh0ICpjdHggPSBpd2xfcnhvbl9jdHhfZnJvbV92aWYodmlmKTsKLQotCWl3bF9sZWRfZGlzYXNzb2NpYXRlKHByaXYpOwotCS8qCi0JICogaW5mb3JtIHRoZSB1Y29kZSB0aGF0IHRoZXJlIGlzIG5vIGxvbmdlciBhbgotCSAqIGFzc29jaWF0aW9uIGFuZCB0aGF0IG5vIG1vcmUgcGFja2V0cyBzaG91bGQgYmUKLQkgKiBzZW50Ci0JICovCi0JY3R4LT5zdGFnaW5nLmZpbHRlcl9mbGFncyAmPSB+UlhPTl9GSUxURVJfQVNTT0NfTVNLOwotCWN0eC0+c3RhZ2luZy5hc3NvY19pZCA9IDA7Ci0JaXdsY29yZV9jb21taXRfcnhvbihwcml2LCBjdHgpOwotfQotCi1zdGF0aWMgdm9pZCBpd2xjb3JlX2JlYWNvbl91cGRhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQotewotCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JX19sZTY0IHRpbWVzdGFtcDsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gaWVlZTgwMjExX2JlYWNvbl9nZXQoaHcsIHZpZik7Ci0KLQlpZiAoIXNrYikKLQkJcmV0dXJuOwotCi0JSVdMX0RFQlVHX0FTU09DKHByaXYsICJlbnRlclxuIik7Ci0KLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZwcml2LT5tdXRleCk7Ci0KLQlpZiAoIXByaXYtPmJlYWNvbl9jdHgpIHsKLQkJSVdMX0VSUihwcml2LCAidXBkYXRlIGJlYWNvbiBidXQgbm8gYmVhY29uIGNvbnRleHQhXG4iKTsKLQkJZGV2X2tmcmVlX3NrYihza2IpOwotCQlyZXR1cm47Ci0JfQotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQotCWlmIChwcml2LT5iZWFjb25fc2tiKQotCQlkZXZfa2ZyZWVfc2tiKHByaXYtPmJlYWNvbl9za2IpOwotCi0JcHJpdi0+YmVhY29uX3NrYiA9IHNrYjsKLQotCXRpbWVzdGFtcCA9ICgoc3RydWN0IGllZWU4MDIxMV9tZ210ICopc2tiLT5kYXRhKS0+dS5iZWFjb24udGltZXN0YW1wOwotCXByaXYtPnRpbWVzdGFtcCA9IGxlNjRfdG9fY3B1KHRpbWVzdGFtcCk7Ci0KLQlJV0xfREVCVUdfQVNTT0MocHJpdiwgImxlYXZlXG4iKTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQotCWlmICghaXdsX2lzX3JlYWR5X3JmKHByaXYpKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBSRiBub3QgcmVhZHlcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+cG9zdF9hc3NvY2lhdGUocHJpdiwgcHJpdi0+YmVhY29uX2N0eC0+dmlmKTsKLX0KLQotdm9pZCBpd2xfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCSAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKLQkJCSAgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqYnNzX2NvbmYsCi0JCQkgIHUzMiBjaGFuZ2VzKQotewotCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwotCXN0cnVjdCBpd2xfcnhvbl9jb250ZXh0ICpjdHggPSBpd2xfcnhvbl9jdHhfZnJvbV92aWYodmlmKTsKLQlpbnQgcmV0OwotCi0JSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJjaGFuZ2VzID0gMHglWFxuIiwgY2hhbmdlcyk7Ci0KLQlpZiAoIWl3bF9pc19hbGl2ZShwcml2KSkKLQkJcmV0dXJuOwotCi0JbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwotCi0JaWYgKGNoYW5nZXMgJiBCU1NfQ0hBTkdFRF9RT1MpIHsKLQkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCQljdHgtPnFvc19kYXRhLnFvc19hY3RpdmUgPSBic3NfY29uZi0+cW9zOwotCQlpd2xfdXBkYXRlX3Fvcyhwcml2LCBjdHgpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JfQotCi0JaWYgKGNoYW5nZXMgJiBCU1NfQ0hBTkdFRF9CRUFDT05fRU5BQkxFRCkgewotCQkvKgotCQkgKiB0aGUgYWRkX2ludGVyZmFjZSBjb2RlIG11c3QgbWFrZSBzdXJlIHdlIG9ubHkgZXZlcgotCQkgKiBoYXZlIGEgc2luZ2xlIGludGVyZmFjZSB0aGF0IGNvdWxkIGJlIGJlYWNvbmluZyBhdAotCQkgKiBhbnkgdGltZS4KLQkJICovCi0JCWlmICh2aWYtPmJzc19jb25mLmVuYWJsZV9iZWFjb24pCi0JCQlwcml2LT5iZWFjb25fY3R4ID0gY3R4OwotCQllbHNlCi0JCQlwcml2LT5iZWFjb25fY3R4ID0gTlVMTDsKLQl9Ci0KLQlpZiAoY2hhbmdlcyAmIEJTU19DSEFOR0VEX0JFQUNPTiAmJiB2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApIHsKLQkJZGV2X2tmcmVlX3NrYihwcml2LT5iZWFjb25fc2tiKTsKLQkJcHJpdi0+YmVhY29uX3NrYiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KGh3LCB2aWYpOwotCX0KLQotCWlmIChjaGFuZ2VzICYgQlNTX0NIQU5HRURfQkVBQ09OX0lOVCAmJiB2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApCi0JCWl3bF9zZW5kX3J4b25fdGltaW5nKHByaXYsIGN0eCk7Ci0KLQlpZiAoY2hhbmdlcyAmIEJTU19DSEFOR0VEX0JTU0lEKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiQlNTSUQgJXBNXG4iLCBic3NfY29uZi0+YnNzaWQpOwotCi0JCS8qCi0JCSAqIElmIHRoZXJlIGlzIGN1cnJlbnRseSBhIEhXIHNjYW4gZ29pbmcgb24gaW4gdGhlCi0JCSAqIGJhY2tncm91bmQgdGhlbiB3ZSBuZWVkIHRvIGNhbmNlbCBpdCBlbHNlIHRoZSBSWE9OCi0JCSAqIGJlbG93L2luIHBvc3RfYXNzb2NpYXRlIHdpbGwgZmFpbC4KLQkJICovCi0JCWlmIChpd2xfc2Nhbl9jYW5jZWxfdGltZW91dChwcml2LCAxMDApKSB7Ci0JCQlJV0xfV0FSTihwcml2LCAiQWJvcnRlZCBzY2FuIHN0aWxsIGluIHByb2dyZXNzIGFmdGVyIDEwMG1zXG4iKTsKLQkJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmluZyAtIHNjYW4gYWJvcnQgZmFpbGVkLlxuIik7Ci0JCQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKLQkJCXJldHVybjsKLQkJfQotCi0JCS8qIG1hYzgwMjExIG9ubHkgc2V0cyBhc3NvYyB3aGVuIGluIFNUQVRJT04gbW9kZSAqLwotCQlpZiAodmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DIHx8IGJzc19jb25mLT5hc3NvYykgewotCQkJbWVtY3B5KGN0eC0+c3RhZ2luZy5ic3NpZF9hZGRyLAotCQkJICAgICAgIGJzc19jb25mLT5ic3NpZCwgRVRIX0FMRU4pOwotCi0JCQkvKiBjdXJyZW50bHkgbmVlZGVkIGluIGEgZmV3IHBsYWNlcyAqLwotCQkJbWVtY3B5KHByaXYtPmJzc2lkLCBic3NfY29uZi0+YnNzaWQsIEVUSF9BTEVOKTsKLQkJfSBlbHNlIHsKLQkJCWN0eC0+c3RhZ2luZy5maWx0ZXJfZmxhZ3MgJj0KLQkJCQl+UlhPTl9GSUxURVJfQVNTT0NfTVNLOwotCQl9Ci0KLQl9Ci0KLQkvKgotCSAqIFRoaXMgbmVlZHMgdG8gYmUgYWZ0ZXIgc2V0dGluZyB0aGUgQlNTSUQgaW4gY2FzZQotCSAqIG1hYzgwMjExIGRlY2lkZXMgdG8gZG8gYm90aCBjaGFuZ2VzIGF0IG9uY2UgYmVjYXVzZQotCSAqIGl0IHdpbGwgaW52b2tlIHBvc3RfYXNzb2NpYXRlLgotCSAqLwotCWlmICh2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgJiYgY2hhbmdlcyAmIEJTU19DSEFOR0VEX0JFQUNPTikKLQkJaXdsY29yZV9iZWFjb25fdXBkYXRlKGh3LCB2aWYpOwotCi0JaWYgKGNoYW5nZXMgJiBCU1NfQ0hBTkdFRF9FUlBfUFJFQU1CTEUpIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJFUlBfUFJFQU1CTEUgJWRcbiIsCi0JCQkJICAgYnNzX2NvbmYtPnVzZV9zaG9ydF9wcmVhbWJsZSk7Ci0JCWlmIChic3NfY29uZi0+dXNlX3Nob3J0X3ByZWFtYmxlKQotCQkJY3R4LT5zdGFnaW5nLmZsYWdzIHw9IFJYT05fRkxHX1NIT1JUX1BSRUFNQkxFX01TSzsKLQkJZWxzZQotCQkJY3R4LT5zdGFnaW5nLmZsYWdzICY9IH5SWE9OX0ZMR19TSE9SVF9QUkVBTUJMRV9NU0s7Ci0JfQotCi0JaWYgKGNoYW5nZXMgJiBCU1NfQ0hBTkdFRF9FUlBfQ1RTX1BST1QpIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJFUlBfQ1RTICVkXG4iLCBic3NfY29uZi0+dXNlX2N0c19wcm90KTsKLQkJaWYgKGJzc19jb25mLT51c2VfY3RzX3Byb3QgJiYgKHByaXYtPmJhbmQgIT0gSUVFRTgwMjExX0JBTkRfNUdIWikpCi0JCQljdHgtPnN0YWdpbmcuZmxhZ3MgfD0gUlhPTl9GTEdfVEdHX1BST1RFQ1RfTVNLOwotCQllbHNlCi0JCQljdHgtPnN0YWdpbmcuZmxhZ3MgJj0gflJYT05fRkxHX1RHR19QUk9URUNUX01TSzsKLQkJaWYgKGJzc19jb25mLT51c2VfY3RzX3Byb3QpCi0JCQljdHgtPnN0YWdpbmcuZmxhZ3MgfD0gUlhPTl9GTEdfU0VMRl9DVFNfRU47Ci0JCWVsc2UKLQkJCWN0eC0+c3RhZ2luZy5mbGFncyAmPSB+UlhPTl9GTEdfU0VMRl9DVFNfRU47Ci0JfQotCi0JaWYgKGNoYW5nZXMgJiBCU1NfQ0hBTkdFRF9CQVNJQ19SQVRFUykgewotCQkvKiBYWFggdXNlIHRoaXMgaW5mb3JtYXRpb24KLQkJICoKLQkJICogVG8gZG8gdGhhdCwgcmVtb3ZlIGNvZGUgZnJvbSBpd2xfc2V0X3JhdGUoKSBhbmQgcHV0IHNvbWV0aGluZwotCQkgKiBsaWtlIHRoaXMgaGVyZToKLQkJICoKLQkJaWYgKEEtYmFuZCkKLQkJCWN0eC0+c3RhZ2luZy5vZmRtX2Jhc2ljX3JhdGVzID0KLQkJCQlic3NfY29uZi0+YmFzaWNfcmF0ZXM7Ci0JCWVsc2UKLQkJCWN0eC0+c3RhZ2luZy5vZmRtX2Jhc2ljX3JhdGVzID0KLQkJCQlic3NfY29uZi0+YmFzaWNfcmF0ZXMgPj4gNDsKLQkJCWN0eC0+c3RhZ2luZy5jY2tfYmFzaWNfcmF0ZXMgPQotCQkJCWJzc19jb25mLT5iYXNpY19yYXRlcyAmIDB4RjsKLQkJICovCi0JfQotCi0JaWYgKGNoYW5nZXMgJiBCU1NfQ0hBTkdFRF9IVCkgewotCQlpd2xfaHRfY29uZihwcml2LCB2aWYpOwotCi0JCWlmIChwcml2LT5jZmctPm9wcy0+aGNtZC0+c2V0X3J4b25fY2hhaW4pCi0JCQlwcml2LT5jZmctPm9wcy0+aGNtZC0+c2V0X3J4b25fY2hhaW4ocHJpdiwgY3R4KTsKLQl9Ci0KLQlpZiAoY2hhbmdlcyAmIEJTU19DSEFOR0VEX0FTU09DKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiQVNTT0MgJWRcbiIsIGJzc19jb25mLT5hc3NvYyk7Ci0JCWlmIChic3NfY29uZi0+YXNzb2MpIHsKLQkJCXByaXYtPnRpbWVzdGFtcCA9IGJzc19jb25mLT50aW1lc3RhbXA7Ci0KLQkJCWl3bF9sZWRfYXNzb2NpYXRlKHByaXYpOwotCi0JCQlpZiAoIWl3bF9pc19yZmtpbGwocHJpdikpCi0JCQkJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+cG9zdF9hc3NvY2lhdGUocHJpdiwgdmlmKTsKLQkJfSBlbHNlCi0JCQlpd2xfc2V0X25vX2Fzc29jKHByaXYsIHZpZik7Ci0JfQotCi0JaWYgKGNoYW5nZXMgJiYgaXdsX2lzX2Fzc29jaWF0ZWRfY3R4KGN0eCkgJiYgYnNzX2NvbmYtPmFpZCkgewotCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgIkNoYW5nZXMgKCUjeCkgd2hpbGUgYXNzb2NpYXRlZFxuIiwKLQkJCQkgICBjaGFuZ2VzKTsKLQkJcmV0ID0gaXdsX3NlbmRfcnhvbl9hc3NvYyhwcml2LCBjdHgpOwotCQlpZiAoIXJldCkgewotCQkJLyogU3luYyBhY3RpdmVfcnhvbiB3aXRoIGxhdGVzdCBjaGFuZ2UuICovCi0JCQltZW1jcHkoKHZvaWQgKikmY3R4LT5hY3RpdmUsCi0JCQkJJmN0eC0+c3RhZ2luZywKLQkJCQlzaXplb2Yoc3RydWN0IGl3bF9yeG9uX2NtZCkpOwotCQl9Ci0JfQotCi0JaWYgKGNoYW5nZXMgJiBCU1NfQ0hBTkdFRF9CRUFDT05fRU5BQkxFRCkgewotCQlpZiAodmlmLT5ic3NfY29uZi5lbmFibGVfYmVhY29uKSB7Ci0JCQltZW1jcHkoY3R4LT5zdGFnaW5nLmJzc2lkX2FkZHIsCi0JCQkgICAgICAgYnNzX2NvbmYtPmJzc2lkLCBFVEhfQUxFTik7Ci0JCQltZW1jcHkocHJpdi0+YnNzaWQsIGJzc19jb25mLT5ic3NpZCwgRVRIX0FMRU4pOwotCQkJaXdsX2xlZF9hc3NvY2lhdGUocHJpdik7Ci0JCQlpd2xjb3JlX2NvbmZpZ19hcChwcml2LCB2aWYpOwotCQl9IGVsc2UKLQkJCWl3bF9zZXRfbm9fYXNzb2MocHJpdiwgdmlmKTsKLQl9Ci0KLQlpZiAoY2hhbmdlcyAmIEJTU19DSEFOR0VEX0lCU1MpIHsKLQkJcmV0ID0gcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+bWFuYWdlX2lic3Nfc3RhdGlvbihwcml2LCB2aWYsCi0JCQkJCQkJYnNzX2NvbmYtPmlic3Nfam9pbmVkKTsKLQkJaWYgKHJldCkKLQkJCUlXTF9FUlIocHJpdiwgImZhaWxlZCB0byAlcyBJQlNTIHN0YXRpb24gJXBNXG4iLAotCQkJCWJzc19jb25mLT5pYnNzX2pvaW5lZCA/ICJhZGQiIDogInJlbW92ZSIsCi0JCQkJYnNzX2NvbmYtPmJzc2lkKTsKLQl9Ci0KLQlpZiAoY2hhbmdlcyAmIEJTU19DSEFOR0VEX0lETEUgJiYKLQkgICAgcHJpdi0+Y2ZnLT5vcHMtPmhjbWQtPnNldF9wYW5fcGFyYW1zKSB7Ci0JCWlmIChwcml2LT5jZmctPm9wcy0+aGNtZC0+c2V0X3Bhbl9wYXJhbXMocHJpdikpCi0JCQlJV0xfRVJSKHByaXYsICJmYWlsZWQgdG8gdXBkYXRlIFBBTiBwYXJhbXNcbiIpOwotCX0KLQotCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwotCi0JSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZVxuIik7Ci19Ci1FWFBPUlRfU1lNQk9MKGl3bF9ic3NfaW5mb19jaGFuZ2VkKTsKLQotc3RhdGljIGludCBpd2xfc2V0X21vZGUoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQotewotCXN0cnVjdCBpd2xfcnhvbl9jb250ZXh0ICpjdHggPSBpd2xfcnhvbl9jdHhfZnJvbV92aWYodmlmKTsKLQogCWl3bF9jb25uZWN0aW9uX2luaXRfcnhfY29uZmlnKHByaXYsIGN0eCk7CiAKIAlpZiAocHJpdi0+Y2ZnLT5vcHMtPmhjbWQtPnNldF9yeG9uX2NoYWluKQpAQCAtMTc2NiwxMiArMTM2MCw0OSBAQAogCXJldHVybiBpd2xjb3JlX2NvbW1pdF9yeG9uKHByaXYsIGN0eCk7CiB9CiAKK3N0YXRpYyBpbnQgaXdsX3NldHVwX2ludGVyZmFjZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkgICAgICAgc3RydWN0IGl3bF9yeG9uX2NvbnRleHQgKmN0eCkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmID0gY3R4LT52aWY7CisJaW50IGVycjsKKworCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJnByaXYtPm11dGV4KTsKKworCS8qCisJICogVGhpcyB2YXJpYWJsZSB3aWxsIGJlIGNvcnJlY3Qgb25seSB3aGVuIHRoZXJlJ3MganVzdAorCSAqIGEgc2luZ2xlIGNvbnRleHQsIGJ1dCBhbGwgY29kZSB1c2luZyBpdCBpcyBmb3IgaGFyZHdhcmUKKwkgKiB0aGF0IHN1cHBvcnRzIG9ubHkgb25lIGNvbnRleHQuCisJICovCisJcHJpdi0+aXdfbW9kZSA9IHZpZi0+dHlwZTsKKworCWN0eC0+aXNfYWN0aXZlID0gdHJ1ZTsKKworCWVyciA9IGl3bF9zZXRfbW9kZShwcml2LCBjdHgpOworCWlmIChlcnIpIHsKKwkJaWYgKCFjdHgtPmFsd2F5c19hY3RpdmUpCisJCQljdHgtPmlzX2FjdGl2ZSA9IGZhbHNlOworCQlyZXR1cm4gZXJyOworCX0KKworCWlmIChwcml2LT5jZmctPmJ0X3BhcmFtcyAmJiBwcml2LT5jZmctPmJ0X3BhcmFtcy0+YWR2YW5jZWRfYnRfY29leGlzdCAmJgorCSAgICB2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHsKKwkJLyoKKwkJICogcHJldGVuZCB0byBoYXZlIGhpZ2ggQlQgdHJhZmZpYyBhcyBsb25nIGFzIHdlCisJCSAqIGFyZSBvcGVyYXRpbmcgaW4gSUJTUyBtb2RlLCBhcyB0aGlzIHdpbGwgY2F1c2UKKwkJICogdGhlIHJhdGUgc2NhbGluZyBldGMuIHRvIGJlaGF2ZSBhcyBpbnRlbmRlZC4KKwkJICovCisJCXByaXYtPmJ0X3RyYWZmaWNfbG9hZCA9IElXTF9CVF9DT0VYX1RSQUZGSUNfTE9BRF9ISUdIOworCX0KKworCXJldHVybiAwOworfQorCiBpbnQgaXdsX21hY19hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogewogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwogCXN0cnVjdCBpd2xfdmlmX3ByaXYgKnZpZl9wcml2ID0gKHZvaWQgKil2aWYtPmRydl9wcml2OwogCXN0cnVjdCBpd2xfcnhvbl9jb250ZXh0ICp0bXAsICpjdHggPSBOVUxMOwotCWludCBlcnIgPSAwOworCWludCBlcnI7CiAKIAlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImVudGVyOiB0eXBlICVkLCBhZGRyICVwTVxuIiwKIAkJCSAgIHZpZi0+dHlwZSwgdmlmLT5hZGRyKTsKQEAgLTE4MTMsMzYgKzE0NDQsMTEgQEAKIAogCXZpZl9wcml2LT5jdHggPSBjdHg7CiAJY3R4LT52aWYgPSB2aWY7Ci0JLyoKLQkgKiBUaGlzIHZhcmlhYmxlIHdpbGwgYmUgY29ycmVjdCBvbmx5IHdoZW4gdGhlcmUncyBqdXN0Ci0JICogYSBzaW5nbGUgY29udGV4dCwgYnV0IGFsbCBjb2RlIHVzaW5nIGl0IGlzIGZvciBoYXJkd2FyZQotCSAqIHRoYXQgc3VwcG9ydHMgb25seSBvbmUgY29udGV4dC4KLQkgKi8KLQlwcml2LT5pd19tb2RlID0gdmlmLT50eXBlOwogCi0JY3R4LT5pc19hY3RpdmUgPSB0cnVlOworCWVyciA9IGl3bF9zZXR1cF9pbnRlcmZhY2UocHJpdiwgY3R4KTsKKwlpZiAoIWVycikKKwkJZ290byBvdXQ7CiAKLQllcnIgPSBpd2xfc2V0X21vZGUocHJpdiwgdmlmKTsKLQlpZiAoZXJyKSB7Ci0JCWlmICghY3R4LT5hbHdheXNfYWN0aXZlKQotCQkJY3R4LT5pc19hY3RpdmUgPSBmYWxzZTsKLQkJZ290byBvdXRfZXJyOwotCX0KLQotCWlmIChwcml2LT5jZmctPmJ0X3BhcmFtcyAmJgotCSAgICBwcml2LT5jZmctPmJ0X3BhcmFtcy0+YWR2YW5jZWRfYnRfY29leGlzdCAmJgotCSAgICB2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHsKLQkJLyoKLQkJICogcHJldGVuZCB0byBoYXZlIGhpZ2ggQlQgdHJhZmZpYyBhcyBsb25nIGFzIHdlCi0JCSAqIGFyZSBvcGVyYXRpbmcgaW4gSUJTUyBtb2RlLCBhcyB0aGlzIHdpbGwgY2F1c2UKLQkJICogdGhlIHJhdGUgc2NhbGluZyBldGMuIHRvIGJlaGF2ZSBhcyBpbnRlbmRlZC4KLQkJICovCi0JCXByaXYtPmJ0X3RyYWZmaWNfbG9hZCA9IElXTF9CVF9DT0VYX1RSQUZGSUNfTE9BRF9ISUdIOwotCX0KLQotCWdvdG8gb3V0OwotCi0gb3V0X2VycjoKIAljdHgtPnZpZiA9IE5VTEw7CiAJcHJpdi0+aXdfbW9kZSA9IE5MODAyMTFfSUZUWVBFX1NUQVRJT047CiAgb3V0OgpAQCAtMTg1Myw2ICsxNDU5LDM2IEBACiB9CiBFWFBPUlRfU1lNQk9MKGl3bF9tYWNfYWRkX2ludGVyZmFjZSk7CiAKK3N0YXRpYyB2b2lkIGl3bF90ZWFyZG93bl9pbnRlcmZhY2Uoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkJICAgYm9vbCBtb2RlX2NoYW5nZSkKK3sKKwlzdHJ1Y3QgaXdsX3J4b25fY29udGV4dCAqY3R4ID0gaXdsX3J4b25fY3R4X2Zyb21fdmlmKHZpZik7CisKKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZwcml2LT5tdXRleCk7CisKKwlpZiAocHJpdi0+c2Nhbl92aWYgPT0gdmlmKSB7CisJCWl3bF9zY2FuX2NhbmNlbF90aW1lb3V0KHByaXYsIDIwMCk7CisJCWl3bF9mb3JjZV9zY2FuX2VuZChwcml2KTsKKwl9CisKKwlpZiAoIW1vZGVfY2hhbmdlKSB7CisJCWl3bF9zZXRfbW9kZShwcml2LCBjdHgpOworCQlpZiAoIWN0eC0+YWx3YXlzX2FjdGl2ZSkKKwkJCWN0eC0+aXNfYWN0aXZlID0gZmFsc2U7CisJfQorCisJLyoKKwkgKiBXaGVuIHJlbW92aW5nIHRoZSBJQlNTIGludGVyZmFjZSwgb3ZlcndyaXRlIHRoZQorCSAqIEJUIHRyYWZmaWMgbG9hZCB3aXRoIHRoZSBzdG9yZWQgb25lIGZyb20gdGhlIGxhc3QKKwkgKiBub3RpZmljYXRpb24sIGlmIGFueS4gSWYgdGhpcyBpcyBhIGRldmljZSB0aGF0CisJICogZG9lc24ndCBpbXBsZW1lbnQgdGhpcywgdGhpcyBoYXMgbm8gZWZmZWN0IHNpbmNlCisJICogYm90aCB2YWx1ZXMgYXJlIHRoZSBzYW1lIGFuZCB6ZXJvLgorCSAqLworCWlmICh2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCisJCXByaXYtPmJ0X3RyYWZmaWNfbG9hZCA9IHByaXYtPmxhc3RfYnRfdHJhZmZpY19sb2FkOworfQorCiB2b2lkIGl3bF9tYWNfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCiB7CkBAIC0xODY2LDI0ICsxNTAyLDcgQEAKIAlXQVJOX09OKGN0eC0+dmlmICE9IHZpZik7CiAJY3R4LT52aWYgPSBOVUxMOwogCi0JaWYgKHByaXYtPnNjYW5fdmlmID09IHZpZikgewotCQlpd2xfc2Nhbl9jYW5jZWxfdGltZW91dChwcml2LCAyMDApOwotCQlpd2xfZm9yY2Vfc2Nhbl9lbmQocHJpdik7Ci0JfQotCWl3bF9zZXRfbW9kZShwcml2LCB2aWYpOwotCi0JaWYgKCFjdHgtPmFsd2F5c19hY3RpdmUpCi0JCWN0eC0+aXNfYWN0aXZlID0gZmFsc2U7Ci0KLQkvKgotCSAqIFdoZW4gcmVtb3ZpbmcgdGhlIElCU1MgaW50ZXJmYWNlLCBvdmVyd3JpdGUgdGhlCi0JICogQlQgdHJhZmZpYyBsb2FkIHdpdGggdGhlIHN0b3JlZCBvbmUgZnJvbSB0aGUgbGFzdAotCSAqIG5vdGlmaWNhdGlvbiwgaWYgYW55LiBJZiB0aGlzIGlzIGEgZGV2aWNlIHRoYXQKLQkgKiBkb2Vzbid0IGltcGxlbWVudCB0aGlzLCB0aGlzIGhhcyBubyBlZmZlY3Qgc2luY2UKLQkgKiBib3RoIHZhbHVlcyBhcmUgdGhlIHNhbWUgYW5kIHplcm8uCi0JICovCi0JaWYgKHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKLQkJcHJpdi0+YnRfdHJhZmZpY19sb2FkID0gcHJpdi0+bm90aWZfYnRfdHJhZmZpY19sb2FkOworCWl3bF90ZWFyZG93bl9pbnRlcmZhY2UocHJpdiwgdmlmLCBmYWxzZSk7CiAKIAltZW1zZXQocHJpdi0+YnNzaWQsIDAsIEVUSF9BTEVOKTsKIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKQEAgLTE4OTMsMjAyICsxNTEyLDYgQEAKIH0KIEVYUE9SVF9TWU1CT0woaXdsX21hY19yZW1vdmVfaW50ZXJmYWNlKTsKIAotLyoqCi0gKiBpd2xfbWFjX2NvbmZpZyAtIG1hYzgwMjExIGNvbmZpZyBjYWxsYmFjawotICovCi1pbnQgaXdsX21hY19jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiBjaGFuZ2VkKQotewotCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwotCWNvbnN0IHN0cnVjdCBpd2xfY2hhbm5lbF9pbmZvICpjaF9pbmZvOwotCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZody0+Y29uZjsKLQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwgPSBjb25mLT5jaGFubmVsOwotCXN0cnVjdCBpd2xfaHRfY29uZmlnICpodF9jb25mID0gJnByaXYtPmN1cnJlbnRfaHRfY29uZmlnOwotCXN0cnVjdCBpd2xfcnhvbl9jb250ZXh0ICpjdHg7Ci0JdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7Ci0JaW50IHJldCA9IDA7Ci0JdTE2IGNoOwotCWludCBzY2FuX2FjdGl2ZSA9IDA7Ci0KLQltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7Ci0KLQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImVudGVyIHRvIGNoYW5uZWwgJWQgY2hhbmdlZCAweCVYXG4iLAotCQkJCQljaGFubmVsLT5od192YWx1ZSwgY2hhbmdlZCk7Ci0KLQlpZiAodW5saWtlbHkoIXByaXYtPmNmZy0+bW9kX3BhcmFtcy0+ZGlzYWJsZV9od19zY2FuICYmCi0JCQl0ZXN0X2JpdChTVEFUVVNfU0NBTk5JTkcsICZwcml2LT5zdGF0dXMpKSkgewotCQlzY2FuX2FjdGl2ZSA9IDE7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBzY2FubmluZ1xuIik7Ci0JfQotCi0JaWYgKGNoYW5nZWQgJiAoSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1NNUFMgfAotCQkgICAgICAgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0NIQU5ORUwpKSB7Ci0JCS8qIG1hYzgwMjExIHVzZXMgc3RhdGljIGZvciBub24tSFQgd2hpY2ggaXMgd2hhdCB3ZSB3YW50ICovCi0JCXByaXYtPmN1cnJlbnRfaHRfY29uZmlnLnNtcHMgPSBjb25mLT5zbXBzX21vZGU7Ci0KLQkJLyoKLQkJICogUmVjYWxjdWxhdGUgY2hhaW4gY291bnRzLgotCQkgKgotCQkgKiBJZiBtb25pdG9yIG1vZGUgaXMgZW5hYmxlZCB0aGVuIG1hYzgwMjExIHdpbGwKLQkJICogc2V0IHVwIHRoZSBTTSBQUyBtb2RlIHRvIE9GRiBpZiBhbiBIVCBjaGFubmVsIGlzCi0JCSAqIGNvbmZpZ3VyZWQuCi0JCSAqLwotCQlpZiAocHJpdi0+Y2ZnLT5vcHMtPmhjbWQtPnNldF9yeG9uX2NoYWluKQotCQkJZm9yX2VhY2hfY29udGV4dChwcml2LCBjdHgpCi0JCQkJcHJpdi0+Y2ZnLT5vcHMtPmhjbWQtPnNldF9yeG9uX2NoYWluKHByaXYsIGN0eCk7Ci0JfQotCi0JLyogZHVyaW5nIHNjYW5uaW5nIG1hYzgwMjExIHdpbGwgZGVsYXkgY2hhbm5lbCBzZXR0aW5nIHVudGlsCi0JICogc2NhbiBmaW5pc2ggd2l0aCBjaGFuZ2VkID0gMAotCSAqLwotCWlmICghY2hhbmdlZCB8fCAoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9DSEFOTkVMKSkgewotCQlpZiAoc2Nhbl9hY3RpdmUpCi0JCQlnb3RvIHNldF9jaF9vdXQ7Ci0KLQkJY2ggPSBjaGFubmVsLT5od192YWx1ZTsKLQkJY2hfaW5mbyA9IGl3bF9nZXRfY2hhbm5lbF9pbmZvKHByaXYsIGNoYW5uZWwtPmJhbmQsIGNoKTsKLQkJaWYgKCFpc19jaGFubmVsX3ZhbGlkKGNoX2luZm8pKSB7Ci0JCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlIC0gaW52YWxpZCBjaGFubmVsXG4iKTsKLQkJCXJldCA9IC1FSU5WQUw7Ci0JCQlnb3RvIHNldF9jaF9vdXQ7Ci0JCX0KLQotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCi0JCWZvcl9lYWNoX2NvbnRleHQocHJpdiwgY3R4KSB7Ci0JCQkvKiBDb25maWd1cmUgSFQ0MCBjaGFubmVscyAqLwotCQkJY3R4LT5odC5lbmFibGVkID0gY29uZl9pc19odChjb25mKTsKLQkJCWlmIChjdHgtPmh0LmVuYWJsZWQpIHsKLQkJCQlpZiAoY29uZl9pc19odDQwX21pbnVzKGNvbmYpKSB7Ci0JCQkJCWN0eC0+aHQuZXh0ZW5zaW9uX2NoYW5fb2Zmc2V0ID0KLQkJCQkJCUlFRUU4MDIxMV9IVF9QQVJBTV9DSEFfU0VDX0JFTE9XOwotCQkJCQljdHgtPmh0LmlzXzQwbWh6ID0gdHJ1ZTsKLQkJCQl9IGVsc2UgaWYgKGNvbmZfaXNfaHQ0MF9wbHVzKGNvbmYpKSB7Ci0JCQkJCWN0eC0+aHQuZXh0ZW5zaW9uX2NoYW5fb2Zmc2V0ID0KLQkJCQkJCUlFRUU4MDIxMV9IVF9QQVJBTV9DSEFfU0VDX0FCT1ZFOwotCQkJCQljdHgtPmh0LmlzXzQwbWh6ID0gdHJ1ZTsKLQkJCQl9IGVsc2UgewotCQkJCQljdHgtPmh0LmV4dGVuc2lvbl9jaGFuX29mZnNldCA9Ci0JCQkJCQlJRUVFODAyMTFfSFRfUEFSQU1fQ0hBX1NFQ19OT05FOwotCQkJCQljdHgtPmh0LmlzXzQwbWh6ID0gZmFsc2U7Ci0JCQkJfQotCQkJfSBlbHNlCi0JCQkJY3R4LT5odC5pc180MG1oeiA9IGZhbHNlOwotCi0JCQkvKgotCQkJICogRGVmYXVsdCB0byBubyBwcm90ZWN0aW9uLiBQcm90ZWN0aW9uIG1vZGUgd2lsbAotCQkJICogbGF0ZXIgYmUgc2V0IGZyb20gQlNTIGNvbmZpZyBpbiBpd2xfaHRfY29uZgotCQkJICovCi0JCQljdHgtPmh0LnByb3RlY3Rpb24gPSBJRUVFODAyMTFfSFRfT1BfTU9ERV9QUk9URUNUSU9OX05PTkU7Ci0KLQkJCS8qIGlmIHdlIGFyZSBzd2l0Y2hpbmcgZnJvbSBodCB0byAyLjQgY2xlYXIgZmxhZ3MKLQkJCSAqIGZyb20gYW55IGh0IHJlbGF0ZWQgaW5mbyBzaW5jZSAyLjQgZG9lcyBub3QKLQkJCSAqIHN1cHBvcnQgaHQgKi8KLQkJCWlmICgobGUxNl90b19jcHUoY3R4LT5zdGFnaW5nLmNoYW5uZWwpICE9IGNoKSkKLQkJCQljdHgtPnN0YWdpbmcuZmxhZ3MgPSAwOwotCi0JCQlpd2xfc2V0X3J4b25fY2hhbm5lbChwcml2LCBjaGFubmVsLCBjdHgpOwotCQkJaXdsX3NldF9yeG9uX2h0KHByaXYsIGh0X2NvbmYpOwotCi0JCQlpd2xfc2V0X2ZsYWdzX2Zvcl9iYW5kKHByaXYsIGN0eCwgY2hhbm5lbC0+YmFuZCwKLQkJCQkJICAgICAgIGN0eC0+dmlmKTsKLQkJfQotCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQotCQlpZiAocHJpdi0+Y2ZnLT5vcHMtPmxpYi0+dXBkYXRlX2JjYXN0X3N0YXRpb25zKQotCQkJcmV0ID0gcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+dXBkYXRlX2JjYXN0X3N0YXRpb25zKHByaXYpOwotCi0gc2V0X2NoX291dDoKLQkJLyogVGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIHJhdGVzIGFuZCByYXRlIG1hc2sgY2FuIGJlIGRpZmZlcmVudAotCQkgKiBmb3IgZWFjaCBiYW5kOyBzaW5jZSB0aGUgYmFuZCBtYXkgaGF2ZSBjaGFuZ2VkLCByZXNldAotCQkgKiB0aGUgcmF0ZSBtYXNrIHRvIHdoYXQgbWFjODAyMTEgbGlzdHMgKi8KLQkJaXdsX3NldF9yYXRlKHByaXYpOwotCX0KLQotCWlmIChjaGFuZ2VkICYgKElFRUU4MDIxMV9DT05GX0NIQU5HRV9QUyB8Ci0JCQlJRUVFODAyMTFfQ09ORl9DSEFOR0VfSURMRSkpIHsKLQkJcmV0ID0gaXdsX3Bvd2VyX3VwZGF0ZV9tb2RlKHByaXYsIGZhbHNlKTsKLQkJaWYgKHJldCkKLQkJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiRXJyb3Igc2V0dGluZyBzbGVlcCBsZXZlbFxuIik7Ci0JfQotCi0JaWYgKGNoYW5nZWQgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUE9XRVIpIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJUWCBQb3dlciBvbGQ9JWQgbmV3PSVkXG4iLAotCQkJcHJpdi0+dHhfcG93ZXJfdXNlcl9sbXQsIGNvbmYtPnBvd2VyX2xldmVsKTsKLQotCQlpd2xfc2V0X3R4X3Bvd2VyKHByaXYsIGNvbmYtPnBvd2VyX2xldmVsLCBmYWxzZSk7Ci0JfQotCi0JaWYgKCFpd2xfaXNfcmVhZHkocHJpdikpIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIG5vdCByZWFkeVxuIik7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmIChzY2FuX2FjdGl2ZSkKLQkJZ290byBvdXQ7Ci0KLQlmb3JfZWFjaF9jb250ZXh0KHByaXYsIGN0eCkgewotCQlpZiAobWVtY21wKCZjdHgtPmFjdGl2ZSwgJmN0eC0+c3RhZ2luZywgc2l6ZW9mKGN0eC0+c3RhZ2luZykpKQotCQkJaXdsY29yZV9jb21taXRfcnhvbihwcml2LCBjdHgpOwotCQllbHNlCi0JCQlJV0xfREVCVUdfSU5GTyhwcml2LAotCQkJCSJOb3QgcmUtc2VuZGluZyBzYW1lIFJYT04gY29uZmlndXJhdGlvbi5cbiIpOwotCX0KLQotb3V0OgotCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmVcbiIpOwotCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MKGl3bF9tYWNfY29uZmlnKTsKLQotdm9pZCBpd2xfbWFjX3Jlc2V0X3RzZihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKLXsKLQlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCS8qIElCU1MgY2FuIG9ubHkgYmUgdGhlIElXTF9SWE9OX0NUWF9CU1MgY29udGV4dCAqLwotCXN0cnVjdCBpd2xfcnhvbl9jb250ZXh0ICpjdHggPSAmcHJpdi0+Y29udGV4dHNbSVdMX1JYT05fQ1RYX0JTU107Ci0KLQltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7Ci0JSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJlbnRlclxuIik7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCW1lbXNldCgmcHJpdi0+Y3VycmVudF9odF9jb25maWcsIDAsIHNpemVvZihzdHJ1Y3QgaXdsX2h0X2NvbmZpZykpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0KLQkvKiBuZXcgYXNzb2NpYXRpb24gZ2V0IHJpZCBvZiBpYnNzIGJlYWNvbiBza2IgKi8KLQlpZiAocHJpdi0+YmVhY29uX3NrYikKLQkJZGV2X2tmcmVlX3NrYihwcml2LT5iZWFjb25fc2tiKTsKLQotCXByaXYtPmJlYWNvbl9za2IgPSBOVUxMOwotCi0JcHJpdi0+dGltZXN0YW1wID0gMDsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQotCWl3bF9zY2FuX2NhbmNlbF90aW1lb3V0KHByaXYsIDEwMCk7Ci0JaWYgKCFpd2xfaXNfcmVhZHlfcmYocHJpdikpIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIG5vdCByZWFkeVxuIik7Ci0JCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwotCQlyZXR1cm47Ci0JfQotCi0JLyogd2UgYXJlIHJlc3RhcnRpbmcgYXNzb2NpYXRpb24gcHJvY2VzcwotCSAqIGNsZWFyIFJYT05fRklMVEVSX0FTU09DX01TSyBiaXQKLQkgKi8KLQljdHgtPnN0YWdpbmcuZmlsdGVyX2ZsYWdzICY9IH5SWE9OX0ZJTFRFUl9BU1NPQ19NU0s7Ci0JaXdsY29yZV9jb21taXRfcnhvbihwcml2LCBjdHgpOwotCi0JaXdsX3NldF9yYXRlKHByaXYpOwotCi0JbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7Ci0KLQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlXG4iKTsKLX0KLUVYUE9SVF9TWU1CT0woaXdsX21hY19yZXNldF90c2YpOwotCiBpbnQgaXdsX2FsbG9jX3R4cV9tZW0oc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCWlmICghcHJpdi0+dHhxKQpAQCAtMjQzMSw3NyArMTg1NCwxMTUgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoqCi0gKiBpd2xfYmdfbW9uaXRvcl9yZWNvdmVyIC0gVGltZXIgY2FsbGJhY2sgdG8gY2hlY2sgZm9yIHN0dWNrIHF1ZXVlIGFuZCByZWNvdmVyCi0gKgotICogRHVyaW5nIG5vcm1hbCBjb25kaXRpb24gKG5vIHF1ZXVlIGlzIHN0dWNrKSwgdGhlIHRpbWVyIGlzIGNvbnRpbnVhbGx5IHNldCB0bwotICogZXhlY3V0ZSBldmVyeSBtb25pdG9yX3JlY292ZXJfcGVyaW9kIG1pbGxpc2Vjb25kcyBhZnRlciB0aGUgbGFzdCB0aW1lcgotICogZXhwaXJlZC4gIFdoZW4gdGhlIHF1ZXVlIHJlYWRfcHRyIGlzIGF0IHRoZSBzYW1lIHBsYWNlLCB0aGUgdGltZXIgaXMKLSAqIHNob3J0ZW4gdG8gMTAwbVNlY3MuICBUaGlzIGlzCi0gKiAgICAgIDEpIHRvIHJlZHVjZSB0aGUgY2hhbmNlIHRoYXQgdGhlIHJlYWRfcHRyIG1heSB3cmFwIGFyb3VuZCAobm90IHN0dWNrKQotICogICAgICAyKSB0byBkZXRlY3QgdGhlIHN0dWNrIHF1ZXVlcyBxdWlja2VyIGJlZm9yZSB0aGUgc3RhdGlvbiBhbmQgQVAgY2FuCi0gKiAgICAgIGRpc2Fzc29jaWF0ZSBlYWNoIG90aGVyLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gbW9uaXRvcnMgYWxsIHRoZSB0eCBxdWV1ZXMgYW5kIHJlY292ZXIgZnJvbSBpdCBpZiBhbnkKLSAqIG9mIHRoZSBxdWV1ZXMgYXJlIHN0dWNrLgotICogMS4gSXQgZmlyc3QgY2hlY2sgdGhlIGNtZCBxdWV1ZSBmb3Igc3R1Y2sgY29uZGl0aW9ucy4gIElmIGl0IGlzIHN0dWNrLAotICogICAgICBpdCB3aWxsIHJlY292ZXIgYnkgcmVzZXR0aW5nIHRoZSBmaXJtd2FyZSBhbmQgcmV0dXJuLgotICogMi4gVGhlbiwgaXQgY2hlY2tzIGZvciBzdGF0aW9uIGFzc29jaWF0aW9uLiAgSWYgaXQgYXNzb2NpYXRlcyBpdCB3aWxsIGNoZWNrCi0gKiAgICAgIG90aGVyIHF1ZXVlcy4gIElmIGFueSBxdWV1ZSBpcyBzdHVjaywgaXQgd2lsbCByZWNvdmVyIGJ5IHJlc2V0dGluZwotICogICAgICB0aGUgZmlybXdhcmUuCi0gKiBOb3RlOiBJdCB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoZSBxdWV1ZSByZWFkX3B0ciB0byBiZSBhdCB0aGUgc2FtZSBwbGFjZSB0bwotICogICAgICBiZSBNQVhfUkVQRUFUKzEgaW4gb3JkZXIgdG8gY29uc2lkZXIgdG8gYmUgc3R1Y2suCi0gKi8KK2ludCBpd2xfbWFjX2NoYW5nZV9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkgICAgIGVudW0gbmw4MDIxMV9pZnR5cGUgbmV3dHlwZSwgYm9vbCBuZXdwMnApCit7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IGl3bF9yeG9uX2NvbnRleHQgKmN0eCA9IGl3bF9yeG9uX2N0eF9mcm9tX3ZpZih2aWYpOworCXN0cnVjdCBpd2xfcnhvbl9jb250ZXh0ICp0bXA7CisJdTMyIGludGVyZmFjZV9tb2RlczsKKwlpbnQgZXJyOworCisJbmV3dHlwZSA9IGllZWU4MDIxMV9pZnR5cGVfcDJwKG5ld3R5cGUsIG5ld3AycCk7CisKKwltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CisKKwlpbnRlcmZhY2VfbW9kZXMgPSBjdHgtPmludGVyZmFjZV9tb2RlcyB8IGN0eC0+ZXhjbHVzaXZlX2ludGVyZmFjZV9tb2RlczsKKworCWlmICghKGludGVyZmFjZV9tb2RlcyAmIEJJVChuZXd0eXBlKSkpIHsKKwkJZXJyID0gLUVCVVNZOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoY3R4LT5leGNsdXNpdmVfaW50ZXJmYWNlX21vZGVzICYgQklUKG5ld3R5cGUpKSB7CisJCWZvcl9lYWNoX2NvbnRleHQocHJpdiwgdG1wKSB7CisJCQlpZiAoY3R4ID09IHRtcCkKKwkJCQljb250aW51ZTsKKworCQkJaWYgKCF0bXAtPnZpZikKKwkJCQljb250aW51ZTsKKworCQkJLyoKKwkJCSAqIFRoZSBjdXJyZW50IG1vZGUgc3dpdGNoIHdvdWxkIGJlIGV4Y2x1c2l2ZSwgYnV0CisJCQkgKiBhbm90aGVyIGNvbnRleHQgaXMgYWN0aXZlIC4uLiByZWZ1c2UgdGhlIHN3aXRjaC4KKwkJCSAqLworCQkJZXJyID0gLUVCVVNZOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwkvKiBzdWNjZXNzICovCisJaXdsX3RlYXJkb3duX2ludGVyZmFjZShwcml2LCB2aWYsIHRydWUpOworCXZpZi0+dHlwZSA9IG5ld3R5cGU7CisJZXJyID0gaXdsX3NldHVwX2ludGVyZmFjZShwcml2LCBjdHgpOworCVdBUk5fT04oZXJyKTsKKwkvKgorCSAqIFdlJ3ZlIHN3aXRjaGVkIGludGVybmFsbHksIGJ1dCBzdWJtaXR0aW5nIHRvIHRoZQorCSAqIGRldmljZSBtYXkgaGF2ZSBmYWlsZWQgZm9yIHNvbWUgcmVhc29uLiBNYXNrIHRoaXMKKwkgKiBlcnJvciwgYmVjYXVzZSBvdGhlcndpc2UgbWFjODAyMTEgd2lsbCBub3Qgc3dpdGNoCisJICogKGFuZCBzZXQgdGhlIGludGVyZmFjZSB0eXBlIGJhY2spIGFuZCB3ZSdsbCBiZQorCSAqIG91dCBvZiBzeW5jIHdpdGggaXQuCisJICovCisJZXJyID0gMDsKKworIG91dDoKKwltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKKwlyZXR1cm4gZXJyOworfQorRVhQT1JUX1NZTUJPTChpd2xfbWFjX2NoYW5nZV9pbnRlcmZhY2UpOworCiAvKgotICogVGhlIG1heGltdW0gbnVtYmVyIG9mIHRpbWVzIHRoZSByZWFkIHBvaW50ZXIgb2YgdGhlIHR4IHF1ZXVlIGF0IHRoZQotICogc2FtZSBwbGFjZSB3aXRob3V0IGNvbnNpZGVyaW5nIHRvIGJlIHN0dWNrLgorICogT24gZXZlcnkgd2F0Y2hkb2cgdGljayB3ZSBjaGVjayAobGF0ZXN0KSB0aW1lIHN0YW1wLiBJZiBpdCBkb2VzIG5vdAorICogY2hhbmdlIGR1cmluZyB0aW1lb3V0IHBlcmlvZCBhbmQgcXVldWUgaXMgbm90IGVtcHR5IHdlIHJlc2V0IGZpcm13YXJlLgogICovCi0jZGVmaW5lIE1BWF9SRVBFQVQgICAgICAoMikKIHN0YXRpYyBpbnQgaXdsX2NoZWNrX3N0dWNrX3F1ZXVlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IGNudCkKIHsKLQlzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHE7Ci0Jc3RydWN0IGl3bF9xdWV1ZSAqcTsKKwlzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEgPSAmcHJpdi0+dHhxW2NudF07CisJc3RydWN0IGl3bF9xdWV1ZSAqcSA9ICZ0eHEtPnE7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OworCWludCByZXQ7CiAKLQl0eHEgPSAmcHJpdi0+dHhxW2NudF07Ci0JcSA9ICZ0eHEtPnE7Ci0JLyogcXVldWUgaXMgZW1wdHksIHNraXAgKi8KLQlpZiAocS0+cmVhZF9wdHIgPT0gcS0+d3JpdGVfcHRyKQorCWlmIChxLT5yZWFkX3B0ciA9PSBxLT53cml0ZV9wdHIpIHsKKwkJdHhxLT50aW1lX3N0YW1wID0gamlmZmllczsKIAkJcmV0dXJuIDA7Ci0KLQlpZiAocS0+cmVhZF9wdHIgPT0gcS0+bGFzdF9yZWFkX3B0cikgewotCQkvKiBhIHF1ZXVlIGhhcyBub3QgYmVlbiByZWFkIGZyb20gbGFzdCB0aW1lICovCi0JCWlmIChxLT5yZXBlYXRfc2FtZV9yZWFkX3B0ciA+IE1BWF9SRVBFQVQpIHsKLQkJCUlXTF9FUlIocHJpdiwKLQkJCQkicXVldWUgJWQgc3R1Y2sgJWQgdGltZS4gRncgcmVsb2FkLlxuIiwKLQkJCQlxLT5pZCwgcS0+cmVwZWF0X3NhbWVfcmVhZF9wdHIpOwotCQkJcS0+cmVwZWF0X3NhbWVfcmVhZF9wdHIgPSAwOwotCQkJaXdsX2ZvcmNlX3Jlc2V0KHByaXYsIElXTF9GV19SRVNFVCwgZmFsc2UpOwotCQl9IGVsc2UgewotCQkJcS0+cmVwZWF0X3NhbWVfcmVhZF9wdHIrKzsKLQkJCUlXTF9ERUJVR19SQURJTyhwcml2LAotCQkJCQkicXVldWUgJWQsIG5vdCByZWFkICVkIHRpbWVcbiIsCi0JCQkJCXEtPmlkLAotCQkJCQlxLT5yZXBlYXRfc2FtZV9yZWFkX3B0cik7Ci0JCQltb2RfdGltZXIoJnByaXYtPm1vbml0b3JfcmVjb3ZlciwKLQkJCQlqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygKLQkJCQlJV0xfT05FX0hVTkRSRURfTVNFQ1MpKTsKLQkJCXJldHVybiAxOwotCQl9Ci0JfSBlbHNlIHsKLQkJcS0+bGFzdF9yZWFkX3B0ciA9IHEtPnJlYWRfcHRyOwotCQlxLT5yZXBlYXRfc2FtZV9yZWFkX3B0ciA9IDA7CiAJfQorCisJdGltZW91dCA9IHR4cS0+dGltZV9zdGFtcCArCisJCSAgbXNlY3NfdG9famlmZmllcyhwcml2LT5jZmctPmJhc2VfcGFyYW1zLT53ZF90aW1lb3V0KTsKKworCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7CisJCUlXTF9FUlIocHJpdiwgIlF1ZXVlICVkIHN0dWNrIGZvciAldSBtcy5cbiIsCisJCQkJcS0+aWQsIHByaXYtPmNmZy0+YmFzZV9wYXJhbXMtPndkX3RpbWVvdXQpOworCQlyZXQgPSBpd2xfZm9yY2VfcmVzZXQocHJpdiwgSVdMX0ZXX1JFU0VULCBmYWxzZSk7CisJCXJldHVybiAocmV0ID09IC1FQUdBSU4pID8gMCA6IDE7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgaXdsX2JnX21vbml0b3JfcmVjb3Zlcih1bnNpZ25lZCBsb25nIGRhdGEpCisvKgorICogTWFraW5nIHdhdGNoZG9nIHRpY2sgYmUgYSBxdWFydGVyIG9mIHRpbWVvdXQgYXNzdXJlIHdlIHdpbGwKKyAqIGRpc2NvdmVyIHRoZSBxdWV1ZSBodW5nIGJldHdlZW4gdGltZW91dCBhbmQgMS4yNSp0aW1lb3V0CisgKi8KKyNkZWZpbmUgSVdMX1dEX1RJQ0sodGltZW91dCkgKCh0aW1lb3V0KSAvIDQpCisKKy8qCisgKiBXYXRjaGRvZyB0aW1lciBjYWxsYmFjaywgd2UgY2hlY2sgZWFjaCB0eCBxdWV1ZSBmb3Igc3R1Y2ssIGlmIGlmIGh1bmcKKyAqIHdlIHJlc2V0IHRoZSBmaXJtd2FyZS4gSWYgZXZlcnl0aGluZyBpcyBmaW5lIGp1c3QgcmVhcm0gdGhlIHRpbWVyLgorICovCit2b2lkIGl3bF9iZ193YXRjaGRvZyh1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2xfcHJpdiAqKWRhdGE7CiAJaW50IGNudDsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CiAKIAlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCiAJCXJldHVybjsKIAorCXRpbWVvdXQgPSBwcml2LT5jZmctPmJhc2VfcGFyYW1zLT53ZF90aW1lb3V0OworCWlmICh0aW1lb3V0ID09IDApCisJCXJldHVybjsKKwogCS8qIG1vbml0b3IgYW5kIGNoZWNrIGZvciBzdHVjayBjbWQgcXVldWUgKi8KIAlpZiAoaXdsX2NoZWNrX3N0dWNrX3F1ZXVlKHByaXYsIHByaXYtPmNtZF9xdWV1ZSkpCiAJCXJldHVybjsKQEAgLTI1MTYsMTcgKzE5NzcsMjMgQEAKIAkJCQlyZXR1cm47CiAJCX0KIAl9Ci0JaWYgKHByaXYtPmNmZy0+YmFzZV9wYXJhbXMtPm1vbml0b3JfcmVjb3Zlcl9wZXJpb2QpIHsKLQkJLyoKLQkJICogUmVzY2hlZHVsZSB0aGUgdGltZXIgdG8gb2NjdXIgaW4KLQkJICogcHJpdi0+Y2ZnLT5iYXNlX3BhcmFtcy0+bW9uaXRvcl9yZWNvdmVyX3BlcmlvZAotCQkgKi8KLQkJbW9kX3RpbWVyKCZwcml2LT5tb25pdG9yX3JlY292ZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKAotCQkJICBwcml2LT5jZmctPmJhc2VfcGFyYW1zLT5tb25pdG9yX3JlY292ZXJfcGVyaW9kKSk7Ci0JfQotfQotRVhQT1JUX1NZTUJPTChpd2xfYmdfbW9uaXRvcl9yZWNvdmVyKTsKIAorCW1vZF90aW1lcigmcHJpdi0+d2F0Y2hkb2csIGppZmZpZXMgKworCQkgIG1zZWNzX3RvX2ppZmZpZXMoSVdMX1dEX1RJQ0sodGltZW91dCkpKTsKK30KK0VYUE9SVF9TWU1CT0woaXdsX2JnX3dhdGNoZG9nKTsKKwordm9pZCBpd2xfc2V0dXBfd2F0Y2hkb2coc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCXVuc2lnbmVkIGludCB0aW1lb3V0ID0gcHJpdi0+Y2ZnLT5iYXNlX3BhcmFtcy0+d2RfdGltZW91dDsKKworCWlmICh0aW1lb3V0KQorCQltb2RfdGltZXIoJnByaXYtPndhdGNoZG9nLAorCQkJICBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhJV0xfV0RfVElDSyh0aW1lb3V0KSkpOworCWVsc2UKKwkJZGVsX3RpbWVyKCZwcml2LT53YXRjaGRvZyk7Cit9CitFWFBPUlRfU1lNQk9MKGl3bF9zZXR1cF93YXRjaGRvZyk7CiAKIC8qCiAgKiBleHRlbmRlZCBiZWFjb24gdGltZSBmb3JtYXQKQEAgLTI1ODQsOCArMjA1MSw5IEBACiAKICNpZmRlZiBDT05GSUdfUE0KIAotaW50IGl3bF9wY2lfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoraW50IGl3bF9wY2lfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCiB7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGRldmljZSk7CiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCiAJLyoKQEAgLTI1OTcsMTggKzIwNjUsMTQgQEAKIAkgKi8KIAlpd2xfYXBtX3N0b3AocHJpdik7CiAKLQlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKLQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7Ci0JcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDNob3QpOwotCiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKGl3bF9wY2lfc3VzcGVuZCk7CiAKLWludCBpd2xfcGNpX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK2ludCBpd2xfcGNpX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCiB7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGRldmljZSk7CiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCWludCByZXQ7CiAJYm9vbCBod19yZmtpbGwgPSBmYWxzZTsKIAogCS8qCkBAIC0yNjE3LDExICsyMDgxLDYgQEAKIAkgKi8KIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgUENJX0NGR19SRVRSWV9USU1FT1VULCAweDAwKTsKIAotCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QwKTsKLQlyZXQgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOwogCWl3bF9lbmFibGVfaW50ZXJydXB0cyhwcml2KTsKIAogCWlmICghKGl3bF9yZWFkMzIocHJpdiwgQ1NSX0dQX0NOVFJMKSAmCkBAIC0yNjM5LDQgKzIwOTgsMTQgQEAKIH0KIEVYUE9SVF9TWU1CT0woaXdsX3BjaV9yZXN1bWUpOwogCitjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBpd2xfcG1fb3BzID0geworCS5zdXNwZW5kID0gaXdsX3BjaV9zdXNwZW5kLAorCS5yZXN1bWUgPSBpd2xfcGNpX3Jlc3VtZSwKKwkuZnJlZXplID0gaXdsX3BjaV9zdXNwZW5kLAorCS50aGF3ID0gaXdsX3BjaV9yZXN1bWUsCisJLnBvd2Vyb2ZmID0gaXdsX3BjaV9zdXNwZW5kLAorCS5yZXN0b3JlID0gaXdsX3BjaV9yZXN1bWUsCit9OworRVhQT1JUX1NZTUJPTChpd2xfcG1fb3BzKTsKKwogI2VuZGlmIC8qIENPTkZJR19QTSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5oCmluZGV4IDk1NGVjYzIuLmEzNDc0MzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb3JlLmgKQEAgLTEyMCw2ICsxMjAsMTQgQEAKIAl2b2lkICgqY29uZmlnKShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogfTsKIAorc3RydWN0IGl3bF9pc3Jfb3BzIHsKKwlpcnFyZXR1cm5fdCAoKmlzcikgKGludCBpcnEsIHZvaWQgKmRhdGEpOworCXZvaWQgKCpmcmVlKShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworCWludCAoKmFsbG9jKShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworCWludCAoKnJlc2V0KShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworCXZvaWQgKCpkaXNhYmxlKShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworfTsKKwogc3RydWN0IGl3bF9kZWJ1Z2ZzX29wcyB7CiAJc3NpemVfdCAoKnJ4X3N0YXRzX3JlYWQpKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCiAJCQkJIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKTsKQEAgLTE5MywyMiArMjAxLDE1IEBACiAJLyogcG93ZXIgKi8KIAlpbnQgKCpzZW5kX3R4X3Bvd2VyKSAoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIAl2b2lkICgqdXBkYXRlX2NoYWluX2ZsYWdzKShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwotCXZvaWQgKCpwb3N0X2Fzc29jaWF0ZSkoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpOwotCXZvaWQgKCpjb25maWdfYXApKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZik7Ci0JaXJxcmV0dXJuX3QgKCppc3IpIChpbnQgaXJxLCB2b2lkICpkYXRhKTsKKworCS8qIGlzciAqLworCXN0cnVjdCBpd2xfaXNyX29wcyBpc3Jfb3BzOwogCiAJLyogZWVwcm9tIG9wZXJhdGlvbnMgKGFzIGRlZmluZWQgaW4gaXdsLWVlcHJvbS5oKSAqLwogCXN0cnVjdCBpd2xfZWVwcm9tX29wcyBlZXByb21fb3BzOwogCiAJLyogdGVtcGVyYXR1cmUgKi8KIAlzdHJ1Y3QgaXdsX3RlbXBfb3BzIHRlbXBfb3BzOwotCS8qIHN0YXRpb24gbWFuYWdlbWVudCAqLwotCWludCAoKm1hbmFnZV9pYnNzX3N0YXRpb24pKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCBib29sIGFkZCk7Ci0JaW50ICgqdXBkYXRlX2JjYXN0X3N0YXRpb25zKShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwotCS8qIHJlY292ZXIgZnJvbSB0eCBxdWV1ZSBzdGFsbCAqLwotCXZvaWQgKCpyZWNvdmVyX2Zyb21fdHhfc3RhbGwpKHVuc2lnbmVkIGxvbmcgZGF0YSk7CiAJLyogY2hlY2sgZm9yIHBsY3AgaGVhbHRoICovCiAJYm9vbCAoKmNoZWNrX3BsY3BfaGVhbHRoKShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkJCXN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QpOwpAQCAtMjM1LDEyICsyMzYsMjMgQEAKIAl2b2lkICgqYWRkaXRpb25hbF9uaWNfY29uZmlnKShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogfTsKIAorc3RydWN0IGl3bF9sZWdhY3lfb3BzIHsKKwl2b2lkICgqcG9zdF9hc3NvY2lhdGUpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CisJdm9pZCAoKmNvbmZpZ19hcCkoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKKwkvKiBzdGF0aW9uIG1hbmFnZW1lbnQgKi8KKwlpbnQgKCp1cGRhdGVfYmNhc3Rfc3RhdGlvbnMpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CisJaW50ICgqbWFuYWdlX2lic3Nfc3RhdGlvbikoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIGJvb2wgYWRkKTsKK307CisKIHN0cnVjdCBpd2xfb3BzIHsKIAljb25zdCBzdHJ1Y3QgaXdsX2xpYl9vcHMgKmxpYjsKIAljb25zdCBzdHJ1Y3QgaXdsX2hjbWRfb3BzICpoY21kOwogCWNvbnN0IHN0cnVjdCBpd2xfaGNtZF91dGlsc19vcHMgKnV0aWxzOwogCWNvbnN0IHN0cnVjdCBpd2xfbGVkX29wcyAqbGVkOwogCWNvbnN0IHN0cnVjdCBpd2xfbmljX29wcyAqbmljOworCWNvbnN0IHN0cnVjdCBpd2xfbGVnYWN5X29wcyAqbGVnYWN5OworCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzICppZWVlODAyMTFfb3BzOwogfTsKIAogc3RydWN0IGl3bF9tb2RfcGFyYW1zIHsKQEAgLTI2Niw3ICsyNzgsNyBAQAogICogQHBsY3BfZGVsdGFfdGhyZXNob2xkOiBwbGNwIGVycm9yIHJhdGUgdGhyZXNob2xkIHVzZWQgdG8gdHJpZ2dlcgogICoJcmFkaW8gdHVuaW5nIHdoZW4gdGhlcmUgaXMgYSBoaWdoIHJlY2VpdmluZyBwbGNwIGVycm9yIHJhdGUKICAqIEBjaGFpbl9ub2lzZV9zY2FsZTogZGVmYXVsdCBjaGFpbiBub2lzZSBzY2FsZSB1c2VkIGZvciBnYWluIGNvbXB1dGF0aW9uCi0gKiBAbW9uaXRvcl9yZWNvdmVyX3BlcmlvZDogZGVmYXVsdCB0aW1lciB1c2VkIHRvIGNoZWNrIHN0dWNrIHF1ZXVlcworICogQHdkX3RpbWVvdXQ6IFRYIHF1ZXVlcyB3YXRjaGRvZyB0aW1lb3V0CiAgKiBAdGVtcGVyYXR1cmVfa2VsdmluOiB0ZW1wZXJhdHVyZSByZXBvcnQgYnkgdUNvZGUgaW4ga2VsdmluCiAgKiBAbWF4X2V2ZW50X2xvZ19zaXplOiBzaXplIG9mIGV2ZW50IGxvZyBidWZmZXIgc2l6ZSBmb3IgdWNvZGUgZXZlbnQgbG9nZ2luZwogICogQHR4X3Bvd2VyX2J5X2RyaXZlcjogdHggcG93ZXIgY2FsaWJyYXRpb24gcGVyZm9ybWVkIGJ5IGRyaXZlcgpAQCAtMjc2LDcgKzI4OCwxMCBAQAogICoJc2Vuc2l0aXZpdHkgY2FsaWJyYXRpb24gb3BlcmF0aW9uCiAgKiBAY2hhaW5fbm9pc2VfY2FsaWJfYnlfZHJpdmVyOiBkcml2ZXIgaGFzIHRoZSBjYXBhYmlsaXR5IHRvIHBlcmZvcm0KICAqCWNoYWluIG5vaXNlIGNhbGlicmF0aW9uIG9wZXJhdGlvbgotKi8KKyAqIEBzaGFkb3dfcmVnX2VuYWJsZTogSFcgc2hhZGhvdyByZWdpc3RlciBiaXQKKyAqIEBub19hZ2dfZnJhbWVjbnRfaW5mbzogdUNvZGUgZG8gbm90IHByb3ZpZGUgYWdncmVnYXRpb24gZnJhbWUgY291bnQKKyAqCWluZm9ybWF0aW9uCisgKi8KIHN0cnVjdCBpd2xfYmFzZV9wYXJhbXMgewogCWludCBlZXByb21fc2l6ZTsKIAlpbnQgbnVtX29mX3F1ZXVlczsJLyogZGVmOiBIVyBkZXBlbmRlbnQgKi8KQEAgLTI5OCwxNCArMzEzLDE1IEBACiAJY29uc3QgYm9vbCBzdXBwb3J0X3dpbWF4X2NvZXhpc3Q7CiAJdTggcGxjcF9kZWx0YV90aHJlc2hvbGQ7CiAJczMyIGNoYWluX25vaXNlX3NjYWxlOwotCS8qIHRpbWVyIHBlcmlvZCBmb3IgbW9uaXRvciB0aGUgZHJpdmVyIHF1ZXVlcyAqLwotCXUzMiBtb25pdG9yX3JlY292ZXJfcGVyaW9kOworCXVuc2lnbmVkIGludCB3ZF90aW1lb3V0OwogCWJvb2wgdGVtcGVyYXR1cmVfa2VsdmluOwogCXUzMiBtYXhfZXZlbnRfbG9nX3NpemU7CiAJY29uc3QgYm9vbCB0eF9wb3dlcl9ieV9kcml2ZXI7CiAJY29uc3QgYm9vbCB1Y29kZV90cmFjaW5nOwogCWNvbnN0IGJvb2wgc2Vuc2l0aXZpdHlfY2FsaWJfYnlfZHJpdmVyOwogCWNvbnN0IGJvb2wgY2hhaW5fbm9pc2VfY2FsaWJfYnlfZHJpdmVyOworCWNvbnN0IGJvb2wgc2hhZG93X3JlZ19lbmFibGU7CisJY29uc3QgYm9vbCBub19hZ2dfZnJhbWVjbnRfaW5mbzsKIH07CiAvKgogICogQGFkdmFuY2VkX2J0X2NvZXhpc3Q6IHN1cHBvcnQgYWR2YW5jZWQgYnQgY29leGlzdApAQCAtMzE1LDYgKzMzMSw3IEBACiAgKiBAYWdnX3RpbWVfbGltaXQ6IG1heGltdW0gbnVtYmVyIG9mIHVTZWMgaW4gYWdncmVnYXRpb24KICAqIEBhbXBkdV9mYWN0b3I6IE1heGltdW0gQS1NUERVIGxlbmd0aCBmYWN0b3IKICAqIEBhbXBkdV9kZW5zaXR5OiBNaW5pbXVtIEEtTVBEVSBzcGFjaW5nCisgKiBAYnRfc2NvX2Rpc2FibGU6IHVDb2RlIHNob3VsZCBub3QgcmVzcG9uc2UgdG8gQlQgaW4gU0NPL0VTQ08gbW9kZQogKi8KIHN0cnVjdCBpd2xfYnRfcGFyYW1zIHsKIAlib29sIGFkdmFuY2VkX2J0X2NvZXhpc3Q7CkBAIC0zMjQsNiArMzQxLDcgQEAKIAl1MTYgYWdnX3RpbWVfbGltaXQ7CiAJdTggYW1wZHVfZmFjdG9yOwogCXU4IGFtcGR1X2RlbnNpdHk7CisJYm9vbCBidF9zY29fZGlzYWJsZTsKIH07CiAvKgogICogQHVzZV9ydHNfZm9yX2FnZ3JlZ2F0aW9uOiB1c2UgcnRzL2N0cyBwcm90ZWN0aW9uIGZvciBIVCB0cmFmZmljCkBAIC0zNDQsNiArMzYyLDEwIEBACiAgKiBAbmVlZF9kY19jYWxpYjogbmVlZCB0byBwZXJmb3JtIGluaXQgZGMgY2FsaWJyYXRpb24KICAqIEBuZWVkX3RlbXBfb2Zmc2V0X2NhbGliOiBuZWVkIHRvIHBlcmZvcm0gdGVtcGVyYXR1cmUgb2Zmc2V0IGNhbGlicmF0aW9uCiAgKiBAc2Nhbl9hbnRlbm5hczogYXZhaWxhYmxlIGFudGVubmEgZm9yIHNjYW4gb3BlcmF0aW9uCisgKiBAbGVkX21vZGU6IDA9YmxpbmtpbmcsIDE9T24oUkYgT24pL09mZihSRiBPZmYpCisgKiBAYWR2X3BtOiBhZHZhbmNlIHBvd2VyIG1hbmFnZW1lbnQKKyAqIEByeF93aXRoX3Npc29fZGl2ZXJzaXR5OiAxeDEgZGV2aWNlIHdpdGggcnggYW50ZW5uYSBkaXZlcnNpdHkKKyAqIEBpbnRlcm5hbF93aW1heF9jb2V4OiBpbnRlcm5hbCB3aWZpL3dpbWF4IGNvbWJvIGRldmljZQogICoKICAqIFdlIGVuYWJsZSB0aGUgZHJpdmVyIHRvIGJlIGJhY2t3YXJkIGNvbXBhdGlibGUgd3J0IEFQSSB2ZXJzaW9uLiBUaGUKICAqIGRyaXZlciBzcGVjaWZpZXMgd2hpY2ggQVBJcyBpdCBzdXBwb3J0cyAod2l0aCBAdWNvZGVfYXBpX21heCBiZWluZyB0aGUKQEAgLTM4OSwxNiArNDExLDE3IEBACiAJY29uc3QgYm9vbCBuZWVkX2RjX2NhbGliOwkgIC8qIGlmIHVzZWQgc2V0IHRvIHRydWUgKi8KIAljb25zdCBib29sIG5lZWRfdGVtcF9vZmZzZXRfY2FsaWI7IC8qIGlmIHVzZWQgc2V0IHRvIHRydWUgKi8KIAl1OCBzY2FuX3J4X2FudGVubmFzW0lFRUU4MDIxMV9OVU1fQkFORFNdOwotCXU4IHNjYW5fdHhfYW50ZW5uYXNbSUVFRTgwMjExX05VTV9CQU5EU107Ci0JY29uc3QgYm9vbCB1c2VfbmV3X2VlcHJvbV9yZWFkaW5nOyAvKiB0ZW1wb3JhcnksIHJlbW92ZSBsYXRlciAqLworCWVudW0gaXdsX2xlZF9tb2RlIGxlZF9tb2RlOworCWNvbnN0IGJvb2wgYWR2X3BtOworCWNvbnN0IGJvb2wgcnhfd2l0aF9zaXNvX2RpdmVyc2l0eTsKKwljb25zdCBib29sIGludGVybmFsX3dpbWF4X2NvZXg7CiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgIEwgaSBiICAgICAgICAgICAgICAgICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdHJ1Y3QgaWVlZTgwMjExX2h3ICppd2xfYWxsb2NfYWxsKHN0cnVjdCBpd2xfY2ZnICpjZmcsCi0JCXN0cnVjdCBpZWVlODAyMTFfb3BzICpod19vcHMpOworc3RydWN0IGllZWU4MDIxMV9odyAqaXdsX2FsbG9jX2FsbChzdHJ1Y3QgaXdsX2NmZyAqY2ZnKTsKIGludCBpd2xfbWFjX2NvbmZfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUxNiBxdWV1ZSwKIAkJICAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfcGFyYW1zICpwYXJhbXMpOwogaW50IGl3bF9tYWNfdHhfbGFzdF9iZWFjb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwpAQCAtNDI2LDIzICs0NDksMTYgQEAKIAkJCSAgIHUzMiBkZWNyeXB0X3JlcywKIAkJCSAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0cyk7CiB2b2lkIGl3bF9pcnFfaGFuZGxlX2Vycm9yKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Ci12b2lkIGl3bF9wb3N0X2Fzc29jaWF0ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpOwotdm9pZCBpd2xfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCi0JCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpic3NfY29uZiwKLQkJCQkgICAgIHUzMiBjaGFuZ2VzKTsKIGludCBpd2xfbWFjX2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpOwogdm9pZCBpd2xfbWFjX3JlbW92ZV9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKTsKLWludCBpd2xfbWFjX2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIGNoYW5nZWQpOwotdm9pZCBpd2xfY29uZmlnX2FwKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZik7Ci12b2lkIGl3bF9tYWNfcmVzZXRfdHNmKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK2ludCBpd2xfbWFjX2NoYW5nZV9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkgICAgIGVudW0gbmw4MDIxMV9pZnR5cGUgbmV3dHlwZSwgYm9vbCBuZXdwMnApOwogaW50IGl3bF9hbGxvY190eHFfbWVtKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiB2b2lkIGl3bF9mcmVlX3R4cV9tZW0oc3RydWN0IGl3bF9wcml2ICpwcml2KTsKLXZvaWQgaXdsY29yZV90eF9jbWRfcHJvdGVjdGlvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvLAotCQkJICAgICAgIF9fbGUxNiBmYywgX19sZTMyICp0eF9mbGFncyk7CisKICNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVR0ZTCiBpbnQgaXdsX2FsbG9jX3RyYWZmaWNfbWVtKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiB2b2lkIGl3bF9mcmVlX3RyYWZmaWNfbWVtKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CkBAIC01MzAsNiArNTQ2LDcgQEAKIHZvaWQgaXdsX3R4X3F1ZXVlX3Jlc2V0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxLAogCQkJaW50IHNsb3RzX251bSwgdTMyIHR4cV9pZCk7CiB2b2lkIGl3bF90eF9xdWV1ZV9mcmVlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IHR4cV9pZCk7Cit2b2lkIGl3bF9zZXR1cF93YXRjaGRvZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBUWCBwb3dlcgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC01OTksNyArNjE2LDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogUENJCQkJCQkJICAgICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1pcnFyZXR1cm5fdCBpd2xfaXNyX2xlZ2FjeShpbnQgaXJxLCB2b2lkICpkYXRhKTsKIAogc3RhdGljIGlubGluZSB1MTYgaXdsX3BjaWVfbGlua19jdGwoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewpAQCAtNjEwLDE1ICs2MjYsMjMgQEAKIAlyZXR1cm4gcGNpX2xua19jdGw7CiB9CiAKLXZvaWQgaXdsX2JnX21vbml0b3JfcmVjb3Zlcih1bnNpZ25lZCBsb25nIGRhdGEpOwordm9pZCBpd2xfYmdfd2F0Y2hkb2codW5zaWduZWQgbG9uZyBkYXRhKTsKIHUzMiBpd2xfdXNlY3NfdG9fYmVhY29ucyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiB1c2VjLCB1MzIgYmVhY29uX2ludGVydmFsKTsKIF9fbGUzMiBpd2xfYWRkX2JlYWNvbl90aW1lKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIGJhc2UsCiAJCQkgICB1MzIgYWRkb24sIHUzMiBiZWFjb25faW50ZXJ2YWwpOwogCiAjaWZkZWYgQ09ORklHX1BNCi1pbnQgaXdsX3BjaV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpOwotaW50IGl3bF9wY2lfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKLSNlbmRpZiAvKiBDT05GSUdfUE0gKi8KK2ludCBpd2xfcGNpX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2aWNlKTsKK2ludCBpd2xfcGNpX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIGl3bF9wbV9vcHM7CisKKyNkZWZpbmUgSVdMX1BNX09QUwkoJml3bF9wbV9vcHMpCisKKyNlbHNlIC8qICFDT05GSUdfUE0gKi8KKworI2RlZmluZSBJV0xfUE1fT1BTCU5VTEwKKworI2VuZGlmIC8qICFDT05GSUdfUE0gKi8KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICBFcnJvciBIYW5kbGluZyBEZWJ1Z2dpbmcKQEAgLTcyNSwxMSArNzQ5LDYgQEAKIHsKIAlyZXR1cm4gcHJpdi0+Y2ZnLT5vcHMtPmhjbWQtPmNvbW1pdF9yeG9uKHByaXYsIGN0eCk7CiB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgaXdsY29yZV9jb25maWdfYXAoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKLXsKLQlwcml2LT5jZmctPm9wcy0+bGliLT5jb25maWdfYXAocHJpdiwgdmlmKTsKLX0KIHN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqaXdsX2dldF9od19tb2RlKAogCQkJc3RydWN0IGl3bF9wcml2ICpwcml2LCBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jc3IuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNzci5oCmluZGV4IDJhYTE1YWIuLmI4MGJmN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNzci5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNzci5oCkBAIC0xMzIsNiArMTMyLDggQEAKIAogI2RlZmluZSBDU1JfTEVEX1JFRyAgICAgICAgICAgICAoQ1NSX0JBU0UrMHgwOTQpCiAjZGVmaW5lIENTUl9EUkFNX0lOVF9UQkxfUkVHCShDU1JfQkFTRSsweDBBMCkKKyNkZWZpbmUgQ1NSX01BQ19TSEFET1dfUkVHX0NUUkwJKENTUl9CQVNFKzB4MEE4KSAvKiA2MDAwIGFuZCB1cCAqLworCiAKIC8qIEdJTyBDaGlja2VuIEJpdHMgKFBDSSBFeHByZXNzIGJ1cyBsaW5rIHBvd2VyIG1hbmFnZW1lbnQpICovCiAjZGVmaW5lIENTUl9HSU9fQ0hJQ0tFTl9CSVRTICAgIChDU1JfQkFTRSsweDEwMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRlYnVnLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZWJ1Zy5oCmluZGV4IDBiOTYxYTMuLmViZGVhM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRlYnVnLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGVidWcuaApAQCAtMTIwLDYgKzEyMCw3IEBACiAvKiAweDAwMDAwMEYwIC0gMHgwMDAwMDAxMCAqLwogI2RlZmluZSBJV0xfRExfTUFDRFVNUAkJKDEgPDwgNCkKICNkZWZpbmUgSVdMX0RMX0hDTURfRFVNUAkoMSA8PCA1KQorI2RlZmluZSBJV0xfRExfRUVQUk9NCQkoMSA8PCA2KQogI2RlZmluZSBJV0xfRExfUkFESU8JCSgxIDw8IDcpCiAvKiAweDAwMDAwRjAwIC0gMHgwMDAwMDEwMCAqLwogI2RlZmluZSBJV0xfRExfUE9XRVIJCSgxIDw8IDgpCkBAIC0xNjQsNiArMTY1LDcgQEAKICNkZWZpbmUgSVdMX0RFQlVHX1dFUChwLCBmLCBhLi4uKQlJV0xfREVCVUcocCwgSVdMX0RMX1dFUCwgZiwgIyMgYSkKICNkZWZpbmUgSVdMX0RFQlVHX0hDKHAsIGYsIGEuLi4pCUlXTF9ERUJVRyhwLCBJV0xfRExfSENNRCwgZiwgIyMgYSkKICNkZWZpbmUgSVdMX0RFQlVHX0hDX0RVTVAocCwgZiwgYS4uLikJSVdMX0RFQlVHKHAsIElXTF9ETF9IQ01EX0RVTVAsIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19FRVBST00ocCwgZiwgYS4uLikJSVdMX0RFQlVHKHAsIElXTF9ETF9FRVBST00sIGYsICMjIGEpCiAjZGVmaW5lIElXTF9ERUJVR19DQUxJQihwLCBmLCBhLi4uKQlJV0xfREVCVUcocCwgSVdMX0RMX0NBTElCLCBmLCAjIyBhKQogI2RlZmluZSBJV0xfREVCVUdfRlcocCwgZiwgYS4uLikJSVdMX0RFQlVHKHAsIElXTF9ETF9GVywgZiwgIyMgYSkKICNkZWZpbmUgSVdMX0RFQlVHX1JGX0tJTEwocCwgZiwgYS4uLikJSVdMX0RFQlVHKHAsIElXTF9ETF9SRl9LSUxMLCBmLCAjIyBhKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGVidWdmcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGVidWdmcy5jCmluZGV4IDhmZGQ0ZWYuLjZmZTgwYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRlYnVnZnMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZWJ1Z2ZzLmMKQEAgLTk5MiwxMSArOTkyLDggQEAKIAkJCQkiIHN3cV9pZD0lIy4yeCAoYWMgJWQvaHdxICVkKVxuIiwKIAkJCQljbnQsIHEtPnJlYWRfcHRyLCBxLT53cml0ZV9wdHIsCiAJCQkJISF0ZXN0X2JpdChjbnQsIHByaXYtPnF1ZXVlX3N0b3BwZWQpLAotCQkJCXR4cS0+c3dxX2lkLAotCQkJCXR4cS0+c3dxX2lkICYgMHg4MCA/IHR4cS0+c3dxX2lkICYgMyA6Ci0JCQkJdHhxLT5zd3FfaWQsCi0JCQkJdHhxLT5zd3FfaWQgJiAweDgwID8gKHR4cS0+c3dxX2lkID4+IDIpICYKLQkJCQkweDFmIDogdHhxLT5zd3FfaWQpOworCQkJCXR4cS0+c3dxX2lkLCB0eHEtPnN3cV9pZCAmIDMsCisJCQkJKHR4cS0+c3dxX2lkID4+IDIpICYgMHgxZik7CiAJCWlmIChjbnQgPj0gNCkKIAkJCWNvbnRpbnVlOwogCQkvKiBmb3IgdGhlIEFDcywgZGlzcGxheSB0aGUgc3RvcCBjb3VudCB0b28gKi8KQEAgLTE1MzcsMzIgKzE1MzQsMjYgQEAKIAkJCXVzZXJfYnVmLCBjb3VudCwgcHBvcyk7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IGl3bF9kYmdmc19tb25pdG9yX3BlcmlvZF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKK3N0YXRpYyBzc2l6ZV90IGl3bF9kYmdmc193ZF90aW1lb3V0X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAogCQkJCQljb25zdCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCiAJCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKSB7CiAKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJY2hhciBidWZbOF07CiAJaW50IGJ1Zl9zaXplOwotCWludCBwZXJpb2Q7CisJaW50IHRpbWVvdXQ7CiAKIAltZW1zZXQoYnVmLCAwLCBzaXplb2YoYnVmKSk7CiAJYnVmX3NpemUgPSBtaW4oY291bnQsIHNpemVvZihidWYpIC0gIDEpOwogCWlmIChjb3B5X2Zyb21fdXNlcihidWYsIHVzZXJfYnVmLCBidWZfc2l6ZSkpCiAJCXJldHVybiAtRUZBVUxUOwotCWlmIChzc2NhbmYoYnVmLCAiJWQiLCAmcGVyaW9kKSAhPSAxKQorCWlmIChzc2NhbmYoYnVmLCAiJWQiLCAmdGltZW91dCkgIT0gMSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKHBlcmlvZCA8IDAgfHwgcGVyaW9kID4gSVdMX01BWF9NT05JVE9SSU5HX1BFUklPRCkKLQkJcHJpdi0+Y2ZnLT5iYXNlX3BhcmFtcy0+bW9uaXRvcl9yZWNvdmVyX3BlcmlvZCA9Ci0JCQlJV0xfREVGX01PTklUT1JJTkdfUEVSSU9EOwotCWVsc2UKLQkJcHJpdi0+Y2ZnLT5iYXNlX3BhcmFtcy0+bW9uaXRvcl9yZWNvdmVyX3BlcmlvZCA9IHBlcmlvZDsKKwlpZiAodGltZW91dCA8IDAgfHwgdGltZW91dCA+IElXTF9NQVhfV0RfVElNRU9VVCkKKwkJdGltZW91dCA9IElXTF9ERUZfV0RfVElNRU9VVDsKIAotCWlmIChwcml2LT5jZmctPmJhc2VfcGFyYW1zLT5tb25pdG9yX3JlY292ZXJfcGVyaW9kKQotCQltb2RfdGltZXIoJnByaXYtPm1vbml0b3JfcmVjb3ZlciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoCi0JCQkgIHByaXYtPmNmZy0+YmFzZV9wYXJhbXMtPm1vbml0b3JfcmVjb3Zlcl9wZXJpb2QpKTsKLQllbHNlCi0JCWRlbF90aW1lcl9zeW5jKCZwcml2LT5tb25pdG9yX3JlY292ZXIpOworCXByaXYtPmNmZy0+YmFzZV9wYXJhbXMtPndkX3RpbWVvdXQgPSB0aW1lb3V0OworCWl3bF9zZXR1cF93YXRjaGRvZyhwcml2KTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKQEAgLTE1NzYsMTEgKzE1NjcsMTggQEAKIAljb25zdCBzaXplX3QgYnVmc3ogPSBzaXplb2YoYnVmKTsKIAlzc2l6ZV90IHJldDsKIAorCWlmICghcHJpdi0+YnRfZW5hYmxlX2ZsYWcpIHsKKwkJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiQlQgY29leCBkaXNhYmxlZFxuIik7CisJCXJldCA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBwb3MpOworCQlyZXR1cm4gcmV0OworCX0KKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJCVCBlbmFibGUgZmxhZzogMHgleFxuIiwKKwkJcHJpdi0+YnRfZW5hYmxlX2ZsYWcpOwogCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIkJUIGluICVzIG1vZGVcbiIsCiAJCXByaXYtPmJ0X2Z1bGxfY29uY3VycmVudCA/ICJmdWxsIGNvbmN1cnJlbmN5IiA6ICIzLXdpcmUiKTsKIAlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJCVCBzdGF0dXM6ICVzLCAiCiAJCQkgImxhc3QgdHJhZmZpYyBub3RpZjogJWRcbiIsCi0JCXByaXYtPmJ0X3N0YXR1cyA/ICJPbiIgOiAiT2ZmIiwgcHJpdi0+bm90aWZfYnRfdHJhZmZpY19sb2FkKTsKKwkJcHJpdi0+YnRfc3RhdHVzID8gIk9uIiA6ICJPZmYiLCBwcml2LT5sYXN0X2J0X3RyYWZmaWNfbG9hZCk7CiAJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiY2hfYW5ub3VuY2VtZW50OiAlZCwgIgogCQkJICJzY29fYWN0aXZlOiAlZCwga2lsbF9hY2tfbWFzazogJXgsICIKIAkJCSAia2lsbF9jdHNfbWFzazogJXhcbiIsCkBAIC0xNjg5LDcgKzE2ODcsNyBAQAogREVCVUdGU19SRUFEX0ZJTEVfT1BTKHJ4b25fZmlsdGVyX2ZsYWdzKTsKIERFQlVHRlNfV1JJVEVfRklMRV9PUFModHhmaWZvX2ZsdXNoKTsKIERFQlVHRlNfUkVBRF9GSUxFX09QUyh1Y29kZV9idF9zdGF0cyk7Ci1ERUJVR0ZTX1dSSVRFX0ZJTEVfT1BTKG1vbml0b3JfcGVyaW9kKTsKK0RFQlVHRlNfV1JJVEVfRklMRV9PUFMod2RfdGltZW91dCk7CiBERUJVR0ZTX1JFQURfRklMRV9PUFMoYnRfdHJhZmZpYyk7CiBERUJVR0ZTX1JFQURfV1JJVEVfRklMRV9PUFMocHJvdGVjdGlvbl9tb2RlKTsKIERFQlVHRlNfUkVBRF9GSUxFX09QUyhyZXBseV90eF9lcnJvcik7CkBAIC0xNzY2LDcgKzE3NjQsNyBAQAogCURFQlVHRlNfQUREX0ZJTEUocmVwbHlfdHhfZXJyb3IsIGRpcl9kZWJ1ZywgU19JUlVTUik7CiAJREVCVUdGU19BRERfRklMRShyeG9uX2ZsYWdzLCBkaXJfZGVidWcsIFNfSVdVU1IpOwogCURFQlVHRlNfQUREX0ZJTEUocnhvbl9maWx0ZXJfZmxhZ3MsIGRpcl9kZWJ1ZywgU19JV1VTUik7Ci0JREVCVUdGU19BRERfRklMRShtb25pdG9yX3BlcmlvZCwgZGlyX2RlYnVnLCBTX0lXVVNSKTsKKwlERUJVR0ZTX0FERF9GSUxFKHdkX3RpbWVvdXQsIGRpcl9kZWJ1ZywgU19JV1VTUik7CiAJaWYgKHByaXYtPmNmZy0+YnRfcGFyYW1zICYmIHByaXYtPmNmZy0+YnRfcGFyYW1zLT5hZHZhbmNlZF9idF9jb2V4aXN0KQogCQlERUJVR0ZTX0FERF9GSUxFKGJ0X3RyYWZmaWMsIGRpcl9kZWJ1ZywgU19JUlVTUik7CiAJaWYgKHByaXYtPmNmZy0+YmFzZV9wYXJhbXMtPnNlbnNpdGl2aXR5X2NhbGliX2J5X2RyaXZlcikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRldi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGV2LmgKaW5kZXggNzBlMDdmYS4uOGRkYTY3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGV2LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGV2LmgKQEAgLTEyOSw5ICsxMjksNiBAQAogCWludCB3cml0ZV9wdHI7ICAgICAgIC8qIDEtc3QgZW1wdHkgZW50cnkgKGluZGV4KSBob3N0X3cqLwogCWludCByZWFkX3B0cjsgICAgICAgICAvKiBsYXN0IHVzZWQgZW50cnkgKGluZGV4KSBob3N0X3IqLwogCS8qIHVzZSBmb3IgbW9uaXRvcmluZyBhbmQgcmVjb3ZlcmluZyB0aGUgc3R1Y2sgcXVldWUgKi8KLQlpbnQgbGFzdF9yZWFkX3B0cjsgICAgICAvKiBzdG9yaW5nIHRoZSBsYXN0IHJlYWRfcHRyICovCi0JLyogbnVtYmVyIG9mIHRpbWUgcmVhZF9wdHIgYW5kIGxhc3RfcmVhZF9wdHIgYXJlIHRoZSBzYW1lICovCi0JdTggcmVwZWF0X3NhbWVfcmVhZF9wdHI7CiAJZG1hX2FkZHJfdCBkbWFfYWRkcjsgICAvKiBwaHlzaWNhbCBhZGRyIGZvciBCRCdzICovCiAJaW50IG5fd2luZG93OwkgICAgICAgLyogc2FmZSBxdWV1ZSB3aW5kb3cgKi8KIAl1MzIgaWQ7CkBAIC0xNTUsNiArMTUyLDcgQEAKICAqIEBtZXRhOiBhcnJheSBvZiBtZXRhIGRhdGEgZm9yIGVhY2ggY29tbWFuZC90eCBidWZmZXIKICAqIEBkbWFfYWRkcl9jbWQ6IHBoeXNpY2FsIGFkZHJlc3Mgb2YgY21kL3R4IGJ1ZmZlciBhcnJheQogICogQHR4YjogYXJyYXkgb2YgcGVyLVRGRCBkcml2ZXIgZGF0YQorICogQHRpbWVfc3RhbXA6IHRpbWUgKGluIGppZmZpZXMpIG9mIGxhc3QgcmVhZF9wdHIgY2hhbmdlCiAgKiBAbmVlZF91cGRhdGU6IGluZGljYXRlcyBuZWVkIHRvIHVwZGF0ZSByZWFkL3dyaXRlIGluZGV4CiAgKiBAc2NoZWRfcmV0cnk6IGluZGljYXRlcyBxdWV1ZSBpcyBoaWdoLXRocm91Z2hwdXQgYWdncmVnYXRpb24gKEhUIEFHRykgZW5hYmxlZAogICoKQEAgLTE3MCw2ICsxNjgsNyBAQAogCXN0cnVjdCBpd2xfZGV2aWNlX2NtZCAqKmNtZDsKIAlzdHJ1Y3QgaXdsX2NtZF9tZXRhICptZXRhOwogCXN0cnVjdCBpd2xfdHhfaW5mbyAqdHhiOworCXVuc2lnbmVkIGxvbmcgdGltZV9zdGFtcDsKIAl1OCBuZWVkX3VwZGF0ZTsKIAl1OCBzY2hlZF9yZXRyeTsKIAl1OCBhY3RpdmU7CkBAIC0xMTA0LDExICsxMTAzLDEwIEBACiAjZGVmaW5lIElXTF9ERUxBWV9ORVhUX0ZPUkNFX1JGX1JFU0VUICAoSFoqMykKICNkZWZpbmUgSVdMX0RFTEFZX05FWFRfRk9SQ0VfRldfUkVMT0FEIChIWio1KQogCi0vKiB0aW1lciBjb25zdGFudHMgdXNlIHRvIG1vbml0b3IgYW5kIHJlY292ZXIgc3R1Y2sgdHggcXVldWVzIGluIG1TZWNzICovCi0jZGVmaW5lIElXTF9ERUZfTU9OSVRPUklOR19QRVJJT0QJKDEwMDApCi0jZGVmaW5lIElXTF9MT05HX01PTklUT1JJTkdfUEVSSU9ECSg1MDAwKQotI2RlZmluZSBJV0xfT05FX0hVTkRSRURfTVNFQ1MgICAoMTAwKQotI2RlZmluZSBJV0xfTUFYX01PTklUT1JJTkdfUEVSSU9ECSg2MDAwMCkKKy8qIFRYIHF1ZXVlIHdhdGNoZG9nIHRpbWVvdXRzIGluIG1TZWNzICovCisjZGVmaW5lIElXTF9ERUZfV0RfVElNRU9VVAkoMjAwMCkKKyNkZWZpbmUgSVdMX0xPTkdfV0RfVElNRU9VVAkoMTAwMDApCisjZGVmaW5lIElXTF9NQVhfV0RfVElNRU9VVAkoMTIwMDAwKQogCiAvKiBCVCBBbnRlbm5hIENvdXBsaW5nIFRocmVzaG9sZCAoZEIpICovCiAjZGVmaW5lIElXTF9CVF9BTlRFTk5BX0NPVVBMSU5HX1RIUkVTSE9MRAkoMzUpCkBAIC0xMTYyLDYgKzExNjAsOCBAQAogCSAqLwogCWJvb2wgYWx3YXlzX2FjdGl2ZSwgaXNfYWN0aXZlOwogCisJYm9vbCBodF9uZWVkX211bHRpcGxlX2NoYWluczsKKwogCWVudW0gaXdsX3J4b25fY29udGV4dF9pZCBjdHhpZDsKIAogCXUzMiBpbnRlcmZhY2VfbW9kZXMsIGV4Y2x1c2l2ZV9pbnRlcmZhY2VfbW9kZXM7CkBAIC0xNDY4LDggKzE0NjgsOSBAQAogCX07CiAKIAkvKiBidCBjb2V4ICovCisJdTggYnRfZW5hYmxlX2ZsYWc7CiAJdTggYnRfc3RhdHVzOwotCXU4IGJ0X3RyYWZmaWNfbG9hZCwgbm90aWZfYnRfdHJhZmZpY19sb2FkOworCXU4IGJ0X3RyYWZmaWNfbG9hZCwgbGFzdF9idF90cmFmZmljX2xvYWQ7CiAJYm9vbCBidF9jaF9hbm5vdW5jZTsKIAlib29sIGJ0X3Njb19hY3RpdmU7CiAJYm9vbCBidF9mdWxsX2NvbmN1cnJlbnQ7CkBAIC0xNDgwLDcgKzE0ODEsNiBAQAogCXUxNiBidF9vbl90aHJlc2g7CiAJdTE2IGJ0X2R1cmF0aW9uOwogCXUxNiBkeW5hbWljX2ZyYWdfdGhyZXNoOwotCXUxNiBkeW5hbWljX2FnZ190aHJlc2g7CiAJdTggYnRfY2lfY29tcGxpYW5jZTsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgYnRfdHJhZmZpY19jaGFuZ2Vfd29yazsKIApAQCAtMTUxNyw2ICsxNTE3LDcgQEAKIAlzOCB0eF9wb3dlcl91c2VyX2xtdDsKIAlzOCB0eF9wb3dlcl9kZXZpY2VfbG10OwogCXM4IHR4X3Bvd2VyX2xtdF9pbl9oYWxmX2RibTsgLyogbWF4IHR4IHBvd2VyIGluIGhhbGYtZEJtIGZvcm1hdCAqLworCXM4IHR4X3Bvd2VyX25leHQ7CiAKIAogI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCkBAIC0xNTQyLDcgKzE1NDMsNyBAQAogCXN0cnVjdCB3b3JrX3N0cnVjdCBydW5fdGltZV9jYWxpYl93b3JrOwogCXN0cnVjdCB0aW1lcl9saXN0IHN0YXRpc3RpY3NfcGVyaW9kaWM7CiAJc3RydWN0IHRpbWVyX2xpc3QgdWNvZGVfdHJhY2U7Ci0Jc3RydWN0IHRpbWVyX2xpc3QgbW9uaXRvcl9yZWNvdmVyOworCXN0cnVjdCB0aW1lcl9saXN0IHdhdGNoZG9nOwogCWJvb2wgaHdfcmVhZHk7CiAKIAlzdHJ1Y3QgaXdsX2V2ZW50X2xvZyBldmVudF9sb2c7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1lZXByb20uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWVlcHJvbS5jCmluZGV4IDg3Y2QxMGYuLjM1OGNmZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWVlcHJvbS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWVlcHJvbS5jCkBAIC0xNDcsNyArMTQ3LDcgQEAKIAl1MzIgZ3AgPSBpd2xfcmVhZDMyKHByaXYsIENTUl9FRVBST01fR1ApICYgQ1NSX0VFUFJPTV9HUF9WQUxJRF9NU0s7CiAJaW50IHJldCA9IDA7CiAKLQlJV0xfREVCVUdfSU5GTyhwcml2LCAiRUVQUk9NIHNpZ25hdHVyZT0weCUwOHhcbiIsIGdwKTsKKwlJV0xfREVCVUdfRUVQUk9NKHByaXYsICJFRVBST00gc2lnbmF0dXJlPTB4JTA4eFxuIiwgZ3ApOwogCXN3aXRjaCAoZ3ApIHsKIAljYXNlIENTUl9FRVBST01fR1BfQkFEX1NJR19FRVBfR09PRF9TSUdfT1RQOgogCQlpZiAocHJpdi0+bnZtX2RldmljZV90eXBlICE9IE5WTV9ERVZJQ0VfVFlQRV9PVFApIHsKQEAgLTM1NCw3ICszNTQsNyBAQAogCQkgKi8KIAkJdmFsaWRfYWRkciA9IG5leHRfbGlua19hZGRyOwogCQluZXh0X2xpbmtfYWRkciA9IGxlMTZfdG9fY3B1KGxpbmtfdmFsdWUpICogc2l6ZW9mKHUxNik7Ci0JCUlXTF9ERUJVR19JTkZPKHByaXYsICJPVFAgYmxvY2tzICVkIGFkZHIgMHgleFxuIiwKKwkJSVdMX0RFQlVHX0VFUFJPTShwcml2LCAiT1RQIGJsb2NrcyAlZCBhZGRyIDB4JXhcbiIsCiAJCQkgICAgICAgdXNlZGJsb2NrcywgbmV4dF9saW5rX2FkZHIpOwogCQlpZiAoaXdsX3JlYWRfb3RwX3dvcmQocHJpdiwgbmV4dF9saW5rX2FkZHIsICZsaW5rX3ZhbHVlKSkKIAkJCXJldHVybiAtRUlOVkFMOwpAQCAtMzc0LDcgKzM3NCw3IEBACiAJfSB3aGlsZSAodXNlZGJsb2NrcyA8PSBwcml2LT5jZmctPmJhc2VfcGFyYW1zLT5tYXhfbGxfaXRlbXMpOwogCiAJLyogT1RQIGhhcyBubyB2YWxpZCBibG9ja3MgKi8KLQlJV0xfREVCVUdfSU5GTyhwcml2LCAiT1RQIGhhcyBubyB2YWxpZCBibG9ja3NcbiIpOworCUlXTF9ERUJVR19FRVBST00ocHJpdiwgIk9UUCBoYXMgbm8gdmFsaWQgYmxvY2tzXG4iKTsKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIApAQCAtNDE0LDcgKzQxNCw3IEBACiAJCXJldHVybiAtRU5PRU5UOwogCS8qIGFsbG9jYXRlIGVlcHJvbSAqLwogCXN6ID0gcHJpdi0+Y2ZnLT5iYXNlX3BhcmFtcy0+ZWVwcm9tX3NpemU7Ci0JSVdMX0RFQlVHX0lORk8ocHJpdiwgIk5WTSBzaXplID0gJWRcbiIsIHN6KTsKKwlJV0xfREVCVUdfRUVQUk9NKHByaXYsICJOVk0gc2l6ZSA9ICVkXG4iLCBzeik7CiAJcHJpdi0+ZWVwcm9tID0ga3phbGxvYyhzeiwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwcml2LT5lZXByb20pIHsKIAkJcmV0ID0gLUVOT01FTTsKQEAgLTQ5Miw3ICs0OTIsNyBAQAogCQl9CiAJfQogCi0JSVdMX0RFQlVHX0lORk8ocHJpdiwgIk5WTSBUeXBlOiAlcywgdmVyc2lvbjogMHgleFxuIiwKKwlJV0xfREVCVUdfRUVQUk9NKHByaXYsICJOVk0gVHlwZTogJXMsIHZlcnNpb246IDB4JXhcbiIsCiAJCSAgICAgICAocHJpdi0+bnZtX2RldmljZV90eXBlID09IE5WTV9ERVZJQ0VfVFlQRV9PVFApCiAJCSAgICAgICA/ICJPVFAiIDogIkVFUFJPTSIsCiAJCSAgICAgICBpd2xfZWVwcm9tX3F1ZXJ5MTYocHJpdiwgRUVQUk9NX1ZFUlNJT04pKTsKQEAgLTU5NCw3ICs1OTQsNyBAQAogCWlmICghaXNfY2hhbm5lbF92YWxpZChjaF9pbmZvKSkKIAkJcmV0dXJuIC0xOwogCi0JSVdMX0RFQlVHX0lORk8ocHJpdiwgIkhUNDAgQ2guICVkIFslc0dIel0gJXMlcyVzJXMlcygweCUwMnggJWRkQm0pOiIKKwlJV0xfREVCVUdfRUVQUk9NKHByaXYsICJIVDQwIENoLiAlZCBbJXNHSHpdICVzJXMlcyVzJXMoMHglMDJ4ICVkZEJtKToiCiAJCQkiIEFkLUhvYyAlc3N1cHBvcnRlZFxuIiwKIAkJCWNoX2luZm8tPmNoYW5uZWwsCiAJCQlpc19jaGFubmVsX2FfYmFuZChjaF9pbmZvKSA/CkBAIC02MzQsMTEgKzYzNCwxMSBAQAogCXN0cnVjdCBpd2xfY2hhbm5lbF9pbmZvICpjaF9pbmZvOwogCiAJaWYgKHByaXYtPmNoYW5uZWxfY291bnQpIHsKLQkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkNoYW5uZWwgbWFwIGFscmVhZHkgaW5pdGlhbGl6ZWQuXG4iKTsKKwkJSVdMX0RFQlVHX0VFUFJPTShwcml2LCAiQ2hhbm5lbCBtYXAgYWxyZWFkeSBpbml0aWFsaXplZC5cbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAKLQlJV0xfREVCVUdfSU5GTyhwcml2LCAiSW5pdGlhbGl6aW5nIHJlZ3VsYXRvcnkgaW5mbyBmcm9tIEVFUFJPTVxuIik7CisJSVdMX0RFQlVHX0VFUFJPTShwcml2LCAiSW5pdGlhbGl6aW5nIHJlZ3VsYXRvcnkgaW5mbyBmcm9tIEVFUFJPTVxuIik7CiAKIAlwcml2LT5jaGFubmVsX2NvdW50ID0KIAkgICAgQVJSQVlfU0laRShpd2xfZWVwcm9tX2JhbmRfMSkgKwpAQCAtNjQ3LDcgKzY0Nyw4IEBACiAJICAgIEFSUkFZX1NJWkUoaXdsX2VlcHJvbV9iYW5kXzQpICsKIAkgICAgQVJSQVlfU0laRShpd2xfZWVwcm9tX2JhbmRfNSk7CiAKLQlJV0xfREVCVUdfSU5GTyhwcml2LCAiUGFyc2luZyBkYXRhIGZvciAlZCBjaGFubmVscy5cbiIsIHByaXYtPmNoYW5uZWxfY291bnQpOworCUlXTF9ERUJVR19FRVBST00ocHJpdiwgIlBhcnNpbmcgZGF0YSBmb3IgJWQgY2hhbm5lbHMuXG4iLAorCQkJcHJpdi0+Y2hhbm5lbF9jb3VudCk7CiAKIAlwcml2LT5jaGFubmVsX2luZm8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaXdsX2NoYW5uZWxfaW5mbykgKgogCQkJCSAgICAgcHJpdi0+Y2hhbm5lbF9jb3VudCwgR0ZQX0tFUk5FTCk7CkBAIC02ODYsNyArNjg3LDggQEAKIAkJCQkJSUVFRTgwMjExX0NIQU5fTk9fSFQ0MDsKIAogCQkJaWYgKCEoaXNfY2hhbm5lbF92YWxpZChjaF9pbmZvKSkpIHsKLQkJCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiQ2guICVkIEZsYWdzICV4IFslc0dIel0gLSAiCisJCQkJSVdMX0RFQlVHX0VFUFJPTShwcml2LAorCQkJCQkgICAgICAgIkNoLiAlZCBGbGFncyAleCBbJXNHSHpdIC0gIgogCQkJCQkgICAgICAgIk5vIHRyYWZmaWNcbiIsCiAJCQkJCSAgICAgICBjaF9pbmZvLT5jaGFubmVsLAogCQkJCQkgICAgICAgY2hfaW5mby0+ZmxhZ3MsCkBAIC03MDIsNyArNzA0LDggQEAKIAkJCWNoX2luZm8tPnNjYW5fcG93ZXIgPSBlZXByb21fY2hfaW5mb1tjaF0ubWF4X3Bvd2VyX2F2ZzsKIAkJCWNoX2luZm8tPm1pbl9wb3dlciA9IDA7CiAKLQkJCUlXTF9ERUJVR19JTkZPKHByaXYsICJDaC4gJWQgWyVzR0h6XSAlcyVzJXMlcyVzJXMoMHglMDJ4ICVkZEJtKToiCisJCQlJV0xfREVCVUdfRUVQUk9NKHByaXYsICJDaC4gJWQgWyVzR0h6XSAiCisJCQkJICAgICAgICIlcyVzJXMlcyVzJXMoMHglMDJ4ICVkZEJtKToiCiAJCQkJICAgICAgICIgQWQtSG9jICVzc3VwcG9ydGVkXG4iLAogCQkJCSAgICAgICBjaF9pbmZvLT5jaGFubmVsLAogCQkJCSAgICAgICBpc19jaGFubmVsX2FfYmFuZChjaF9pbmZvKSA/CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1lZXByb20uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWVlcHJvbS5oCmluZGV4IGUzYTI3OWQuLjllNmYzMTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWVlcHJvbS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWVlcHJvbS5oCkBAIC0xMTAsOSArMTEwLDE4IEBACiB9OwogCiAvKiBTS1UgQ2FwYWJpbGl0aWVzICovCisvKiAzOTQ1IG9ubHkgKi8KICNkZWZpbmUgRUVQUk9NX1NLVV9DQVBfU1dfUkZfS0lMTF9FTkFCTEUgICAgICAgICAgICAgICAgKDEgPDwgMCkKICNkZWZpbmUgRUVQUk9NX1NLVV9DQVBfSFdfUkZfS0lMTF9FTkFCTEUgICAgICAgICAgICAgICAgKDEgPDwgMSkKIAorLyogNTAwMCBhbmQgdXAgKi8KKyNkZWZpbmUgRUVQUk9NX1NLVV9DQVBfQkFORF9QT1MJCQkJKDQpCisjZGVmaW5lIEVFUFJPTV9TS1VfQ0FQX0JBTkRfU0VMRUNUSU9OCSAgICAgICAgICAgICAgICBcCisJCSgzIDw8IEVFUFJPTV9TS1VfQ0FQX0JBTkRfUE9TKQorI2RlZmluZSBFRVBST01fU0tVX0NBUF8xMU5fRU5BQkxFCSAgICAgICAgICAgICAgICAoMSA8PCA2KQorI2RlZmluZSBFRVBST01fU0tVX0NBUF9BTVRfRU5BQkxFCSAgICAgICAgICAgICAgICAoMSA8PCA3KQorI2RlZmluZSBFRVBST01fU0tVX0NBUF9JUEFOX0VOQUJMRQkgICAgICAgICAgICAgICAgKDEgPDwgOCkKKwogLyogKnJlZ3VsYXRvcnkqIGNoYW5uZWwgZGF0YSBmb3JtYXQgaW4gZWVwcm9tLCBvbmUgZm9yIGVhY2ggY2hhbm5lbC4KICAqIFRoZXJlIGFyZSBzZXBhcmF0ZSBlbnRyaWVzIGZvciBIVDQwICg0MCBNSHopIHZzLiBub3JtYWwgKDIwIE1IeikgY2hhbm5lbHMuICovCiBzdHJ1Y3QgaXdsX2VlcHJvbV9jaGFubmVsIHsKQEAgLTIyMiw1OSArMjMxLDYgQEAKICNkZWZpbmUgRUVQUk9NXzYwMDBfUkVHX0JBTkRfMjRfSFQ0MF9DSEFOTkVMUyAgKCgweDgwKVwKIAkJfCBJTkRJUkVDVF9BRERSRVNTIHwgSU5ESVJFQ1RfUkVHVUxBVE9SWSkgICAvKiAxNCAgYnl0ZXMgKi8KIAotLyogNjAwMCBhbmQgdXAgcmVndWxhdG9yeSB0eCBwb3dlciAtIGluZGlyZWN0IGFjY2VzcyAqLwotLyogbWF4LiBlbGVtZW50cyBwZXIgc2VjdGlvbiAqLwotI2RlZmluZSBFRVBST01fTUFYX1RYUE9XRVJfU0VDVElPTl9FTEVNRU5UUwkoOCkKLSNkZWZpbmUgRUVQUk9NX1RYUE9XRVJfQ09NTU9OX0hUNDBfSU5ERVgJKDIpCi0KLS8qKgotICogUGFydGl0aW9uIHRoZSBlbmhhbmNlZCB0eCBwb3dlciBwb3J0aW9uIG9mIGVlcHJvbSBpbWFnZSBpbnRvCi0gKiAxMCBzZWN0aW9ucyBiYXNlZCBvbiBiYW5kLCBtb2R1bGF0aW9uLCBmcmVxdWVuY3kgYW5kIGNoYW5uZWwKLSAqCi0gKiBTZWN0aW9uIDE6IGFsbCBDQ0sgY2hhbm5lbHMKLSAqIFNlY3Rpb24gMjogYWxsIDIuNCBHSHogT0ZETSAoTGVnYWN5LCBIVCBhbmQgSFQ0MCApIGNoYW5uZWxzCi0gKiBTZWN0aW9uIDM6IGFsbCA1LjIgR0h6IE9GRE0gKExlZ2FjeSwgSFQgYW5kIEhUNDApIGNoYW5uZWxzCi0gKiBTZWN0aW9uIDQ6IDIuNCBHSHogMjBNSHogY2hhbm5lbHM6IDEsIDIsIDEwLCAxMS4gQm90aCBMZWdhY3kgYW5kIEhUCi0gKiBTZWN0aW9uIDU6IDIuNCBHSHogNDBNSHogY2hhbm5lbHM6IDEsIDIsIDYsIDcsIDksIChfYWJvdmVfKQotICogU2VjdGlvbiA2OiA1LjIgR0h6IDIwTUh6IGNoYW5uZWxzOiAzNiwgNjQsIDEwMCwgYm90aCBMZWdhY3kgYW5kIEhUCi0gKiBTZWN0aW9uIDc6IDUuMiBHSHogNDBNSHogY2hhbm5lbHM6IDM2LCA2MCwgMTAwIChfYWJvdmVfKQotICogU2VjdGlvbiA4OiAyLjQgR0h6IGNoYW5uZWwgMTMsIEJvdGggTGVnYWN5IGFuZCBIVAotICogU2VjdGlvbiA5OiAyLjQgR0h6IGNoYW5uZWwgMTQwLCBCb3RoIExlZ2FjeSBhbmQgSFQKLSAqIFNlY3Rpb24gMTA6IDIuNCBHSHogNDBNSHogY2hhbm5lbHM6IDEzMiwgNDQgKF9hYm92ZV8pCi0gKi8KLS8qIDIuNCBHSHogYmFuZDogQ0NLICovCi0jZGVmaW5lIEVFUFJPTV9MQl9DQ0tfMjBfQ09NTU9OICAgICAgICgoMHhBOClcCi0JCXwgSU5ESVJFQ1RfQUREUkVTUyB8IElORElSRUNUX1JFR1VMQVRPUlkpICAgLyogOCBieXRlcyAqLwotLyogMi40IEdIeiBiYW5kOiAyME1Iei1MZWdhY3ksIDIwTUh6LUhULCA0ME1Iei1IVCAqLwotI2RlZmluZSBFRVBST01fTEJfT0ZETV9DT01NT04gICAgICAgKCgweEIwKVwKLQkJfCBJTkRJUkVDVF9BRERSRVNTIHwgSU5ESVJFQ1RfUkVHVUxBVE9SWSkgICAvKiAyNCBieXRlcyAqLwotLyogNS4yIEdIeiBiYW5kOiAyME1Iei1MZWdhY3ksIDIwTUh6LUhULCA0ME1Iei1IVCAqLwotI2RlZmluZSBFRVBST01fSEJfT0ZETV9DT01NT04gICAgICAgKCgweEM4KVwKLQkJfCBJTkRJUkVDVF9BRERSRVNTIHwgSU5ESVJFQ1RfUkVHVUxBVE9SWSkgICAvKiAyNCBieXRlcyAqLwotLyogMi40R0h6IGJhbmQgY2hhbm5lbHM6Ci0gKgkxTGVnYWN5LCAxSFQsIDJMZWdhY3ksIDJIVCwgMTBMZWdhY3ksIDEwSFQsIDExTGVnYWN5LCAxMUhUICovCi0jZGVmaW5lIEVFUFJPTV9MQl9PRkRNXzIwX0JBTkQgICAgICAgKCgweEUwKVwKLQkJfCBJTkRJUkVDVF9BRERSRVNTIHwgSU5ESVJFQ1RfUkVHVUxBVE9SWSkgICAvKiA2NCBieXRlcyAqLwotLyogMi40IEdIeiBiYW5kIEhUNDAgY2hhbm5lbHM6ICgxLCsxKSAoMiwrMSkgKDYsKzEpICg3LCsxKSAoOSwrMSkgKi8KLSNkZWZpbmUgRUVQUk9NX0xCX09GRE1fSFQ0MF9CQU5EICAgICAgICgoMHgxMjApXAotCQl8IElORElSRUNUX0FERFJFU1MgfCBJTkRJUkVDVF9SRUdVTEFUT1JZKSAgIC8qIDQwIGJ5dGVzICovCi0vKiA1LjJHSHogYmFuZCBjaGFubmVsczogMzZMZWdhY3ksIDM2SFQsIDY0TGVnYWN5LCA2NEhULCAxMDBMZWdhY3ksIDEwMEhUICovCi0jZGVmaW5lIEVFUFJPTV9IQl9PRkRNXzIwX0JBTkQgICAgICAgKCgweDE0OClcCi0JCXwgSU5ESVJFQ1RfQUREUkVTUyB8IElORElSRUNUX1JFR1VMQVRPUlkpICAgLyogNDggYnl0ZXMgKi8KLS8qIDUuMiBHSHogYmFuZCBIVDQwIGNoYW5uZWxzOiAoMzYsKzEpICg2MCwrMSkgKDEwMCwrMSkgKi8KLSNkZWZpbmUgRUVQUk9NX0hCX09GRE1fSFQ0MF9CQU5EICAgICAgICgoMHgxNzgpXAotCQl8IElORElSRUNUX0FERFJFU1MgfCBJTkRJUkVDVF9SRUdVTEFUT1JZKSAgIC8qIDI0IGJ5dGVzICovCi0vKiAyLjQgR0h6IGJhbmQsIGNoYW5ubmVsIDEzOiBMZWdhY3ksIEhUICovCi0jZGVmaW5lIEVFUFJPTV9MQl9PRkRNXzIwX0NIQU5ORUxfMTMgICAgICAgKCgweDE5MClcCi0JCXwgSU5ESVJFQ1RfQUREUkVTUyB8IElORElSRUNUX1JFR1VMQVRPUlkpICAgLyogMTYgYnl0ZXMgKi8KLS8qIDUuMiBHSHogYmFuZCwgY2hhbm5uZWwgMTQwOiBMZWdhY3ksIEhUICovCi0jZGVmaW5lIEVFUFJPTV9IQl9PRkRNXzIwX0NIQU5ORUxfMTQwICAgICAgICgoMHgxQTApXAotCQl8IElORElSRUNUX0FERFJFU1MgfCBJTkRJUkVDVF9SRUdVTEFUT1JZKSAgIC8qIDE2IGJ5dGVzICovCi0vKiA1LjIgR0h6IGJhbmQsIEhUNDAgY2hhbm5uZWxzICgxMzIsKzEpICg0NCwrMSkgKi8KLSNkZWZpbmUgRUVQUk9NX0hCX09GRE1fSFQ0MF9CQU5EXzEgICAgICAgKCgweDFCMClcCi0JCXwgSU5ESVJFQ1RfQUREUkVTUyB8IElORElSRUNUX1JFR1VMQVRPUlkpICAgLyogMTYgYnl0ZXMgKi8KLQotCiAvKiA1MDUwIFNwZWNpZmljICovCiAjZGVmaW5lIEVFUFJPTV81MDUwX1RYX1BPV0VSX1ZFUlNJT04gICAgKDQpCiAjZGVmaW5lIEVFUFJPTV81MDUwX0VFUFJPTV9WRVJTSU9OCSgweDIxRSkKQEAgLTQxNCwxMSArMzcwLDEwIEBACiAjZGVmaW5lIEVFUFJPTV9CT0FSRF9SRVZJU0lPTiAgICAgICAgICAgICAgICgyKjB4MzUpCS8qIDIgIGJ5dGVzICovCiAjZGVmaW5lIEVFUFJPTV9CT0FSRF9QQkFfTlVNQkVSICAgICAgICAgICAgICgyKjB4M0IrMSkJLyogOSAgYnl0ZXMgKi8KICNkZWZpbmUgRUVQUk9NX1ZFUlNJT04gICAgICAgICAgICAgICAgICAgICAgKDIqMHg0NCkJLyogMiAgYnl0ZXMgKi8KLSNkZWZpbmUgRUVQUk9NX1NLVV9DQVAgICAgICAgICAgICAgICAgICAgICAgKDIqMHg0NSkJLyogMSAgYnl0ZXMgKi8KKyNkZWZpbmUgRUVQUk9NX1NLVV9DQVAgICAgICAgICAgICAgICAgICAgICAgKDIqMHg0NSkJLyogMiAgYnl0ZXMgKi8KICNkZWZpbmUgRUVQUk9NX09FTV9NT0RFICAgICAgICAgICAgICAgICAgICAgKDIqMHg0NikJLyogMiAgYnl0ZXMgKi8KICNkZWZpbmUgRUVQUk9NX1dPV0xBTl9NT0RFICAgICAgICAgICAgICAgICAgKDIqMHg0NykJLyogMiAgYnl0ZXMgKi8KICNkZWZpbmUgRUVQUk9NX1JBRElPX0NPTkZJRyAgICAgICAgICAgICAgICAgKDIqMHg0OCkJLyogMiAgYnl0ZXMgKi8KLSNkZWZpbmUgRUVQUk9NXzM5NDVfTV9WRVJTSU9OICAgICAgICAgICAgICAgKDIqMHg0QSkJLyogMSAgYnl0ZXMgKi8KICNkZWZpbmUgRUVQUk9NX05VTV9NQUNfQUREUkVTUyAgICAgICAgICAgICAgKDIqMHg0QykJLyogMiAgYnl0ZXMgKi8KIAogLyogVGhlIGZvbGxvd2luZyBtYXNrcyBhcmUgdG8gYmUgYXBwbGllZCBvbiBFRVBST01fUkFESU9fQ09ORklHICovCkBAIC01MjEsNiArNDc2LDcgQEAKIGludCBpd2xfZWVwcm9tX2luaXQoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIHZvaWQgaXdsX2VlcHJvbV9mcmVlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiBpbnQgIGl3bF9lZXByb21fY2hlY2tfdmVyc2lvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworaW50ICBpd2xfZWVwcm9tX2NoZWNrX3NrdShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogY29uc3QgdTggKml3bF9lZXByb21fcXVlcnlfYWRkcihjb25zdCBzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHNpemVfdCBvZmZzZXQpOwogaW50IGl3bGNvcmVfZWVwcm9tX3ZlcmlmeV9zaWduYXR1cmUoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIHUxNiBpd2xfZWVwcm9tX3F1ZXJ5MTYoY29uc3Qgc3RydWN0IGl3bF9wcml2ICpwcml2LCBzaXplX3Qgb2Zmc2V0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWhlbHBlcnMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWhlbHBlcnMuaAppbmRleCAxYWFlZjcwLi44ODIxZjA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1oZWxwZXJzLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtaGVscGVycy5oCkBAIC00NCwxNSArNDQsNiBAQAogCXJldHVybiAmaHctPmNvbmY7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBlbGFwc2VkX2ppZmZpZXModW5zaWduZWQgbG9uZyBzdGFydCwKLQkJCQkJICAgIHVuc2lnbmVkIGxvbmcgZW5kKQotewotCWlmIChlbmQgPj0gc3RhcnQpCi0JCXJldHVybiBlbmQgLSBzdGFydDsKLQotCXJldHVybiBlbmQgKyAoTUFYX0pJRkZZX09GRlNFVCAtIHN0YXJ0KSArIDE7Ci19Ci0KIC8qKgogICogaXdsX3F1ZXVlX2luY193cmFwIC0gaW5jcmVtZW50IHF1ZXVlIGluZGV4LCB3cmFwIGJhY2sgdG8gYmVnaW5uaW5nCiAgKiBAaW5kZXggLS0gY3VycmVudCBpbmRleApAQCAtMTA0LDQyICs5NSwzNiBAQAogICogfCB8IHwgfCB8IHwgfCB8CiAgKiB8IHwgfCB8IHwgfCArLSstLS0tLS0tLSBBQyBxdWV1ZSAoMC0zKQogICogfCB8IHwgfCB8IHwKLSAqIHwgKy0rLSstKy0rLS0tLS0tLS0tLS0tIEhXIEEtTVBEVSBxdWV1ZQorICogfCArLSstKy0rLSstLS0tLS0tLS0tLS0gSFcgcXVldWUgSUQKICAqIHwKLSAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGluZGljYXRlcyBhZ2cgcXVldWUKKyAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHVudXNlZAogICovCi1zdGF0aWMgaW5saW5lIHU4IGl3bF92aXJ0dWFsX2FnZ19xdWV1ZV9udW0odTggYWMsIHU4IGh3cSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBpd2xfc2V0X3N3cV9pZChzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEsIHU4IGFjLCB1OCBod3EpCiB7CiAJQlVHX09OKGFjID4gMyk7ICAgLyogb25seSBoYXZlIDIgYml0cyAqLwotCUJVR19PTihod3EgPiAzMSk7IC8qIG9ubHkgaGF2ZSA1IGJpdHMgKi8KKwlCVUdfT04oaHdxID4gMzEpOyAvKiBvbmx5IHVzZSA1IGJpdHMgKi8KIAotCXJldHVybiAweDgwIHwgKGh3cSA8PCAyKSB8IGFjOworCXR4cS0+c3dxX2lkID0gKGh3cSA8PCAyKSB8IGFjOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgaXdsX3dha2VfcXVldWUoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1OCBxdWV1ZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBpd2xfd2FrZV9xdWV1ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJICBzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEpCiB7Ci0JdTggYWMgPSBxdWV1ZTsKLQl1OCBod3EgPSBxdWV1ZTsKLQotCWlmIChxdWV1ZSAmIDB4ODApIHsKLQkJYWMgPSBxdWV1ZSAmIDM7Ci0JCWh3cSA9IChxdWV1ZSA+PiAyKSAmIDB4MWY7Ci0JfQorCXU4IHF1ZXVlID0gdHhxLT5zd3FfaWQ7CisJdTggYWMgPSBxdWV1ZSAmIDM7CisJdTggaHdxID0gKHF1ZXVlID4+IDIpICYgMHgxZjsKIAogCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoaHdxLCBwcml2LT5xdWV1ZV9zdG9wcGVkKSkKIAkJaWYgKGF0b21pY19kZWNfcmV0dXJuKCZwcml2LT5xdWV1ZV9zdG9wX2NvdW50W2FjXSkgPD0gMCkKIAkJCWllZWU4MDIxMV93YWtlX3F1ZXVlKHByaXYtPmh3LCBhYyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBpd2xfc3RvcF9xdWV1ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHU4IHF1ZXVlKQorc3RhdGljIGlubGluZSB2b2lkIGl3bF9zdG9wX3F1ZXVlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkgIHN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSkKIHsKLQl1OCBhYyA9IHF1ZXVlOwotCXU4IGh3cSA9IHF1ZXVlOwotCi0JaWYgKHF1ZXVlICYgMHg4MCkgewotCQlhYyA9IHF1ZXVlICYgMzsKLQkJaHdxID0gKHF1ZXVlID4+IDIpICYgMHgxZjsKLQl9CisJdTggcXVldWUgPSB0eHEtPnN3cV9pZDsKKwl1OCBhYyA9IHF1ZXVlICYgMzsKKwl1OCBod3EgPSAocXVldWUgPj4gMikgJiAweDFmOwogCiAJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KGh3cSwgcHJpdi0+cXVldWVfc3RvcHBlZCkpCiAJCWlmIChhdG9taWNfaW5jX3JldHVybigmcHJpdi0+cXVldWVfc3RvcF9jb3VudFthY10pID4gMCkKQEAgLTE2Myw2ICsxNDgsMTIgQEAKIAlJV0xfREVCVUdfSVNSKHByaXYsICJEaXNhYmxlZCBpbnRlcnJ1cHRzXG4iKTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGl3bF9lbmFibGVfcmZraWxsX2ludChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJSVdMX0RFQlVHX0lTUihwcml2LCAiRW5hYmxpbmcgcmZraWxsIGludGVycnVwdFxuIik7CisJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX0lOVF9NQVNLLCBDU1JfSU5UX0JJVF9SRl9LSUxMKTsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIGl3bF9lbmFibGVfaW50ZXJydXB0cyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJSVdMX0RFQlVHX0lTUihwcml2LCAiRW5hYmxpbmcgaW50ZXJydXB0c1xuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1sZWQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWxlZC5jCmluZGV4IDg2YzJiNmYuLjQ2Y2NkZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWxlZC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWxlZC5jCkBAIC00NSw5ICs0NSw4IEBACiAvKiBkZWZhdWx0OiBJV0xfTEVEX0JMSU5LKDApIHVzaW5nIGJsaW5raW5nIGluZGV4IHRhYmxlICovCiBzdGF0aWMgaW50IGxlZF9tb2RlOwogbW9kdWxlX3BhcmFtKGxlZF9tb2RlLCBpbnQsIFNfSVJVR08pOwotTU9EVUxFX1BBUk1fREVTQyhsZWRfbW9kZSwgImxlZCBtb2RlOiAwPWJsaW5raW5nLCAxPU9uKFJGIE9uKS9PZmYoUkYgT2ZmKSwgIgotCQkJICAgIihkZWZhdWx0IDApIik7Ci0KK01PRFVMRV9QQVJNX0RFU0MobGVkX21vZGUsICIwPXN5c3RlbSBkZWZhdWx0LCAiCisJCSIxPU9uKFJGIE9uKS9PZmYoUkYgT2ZmKSwgMj1ibGlua2luZyIpOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHsKIAl1MTYgdHB0OwkvKiBNYi9zICovCkBAIC0xMjgsMTIgKzEyNywxMyBAQAogaW50IGl3bF9sZWRfYXNzb2NpYXRlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlJV0xfREVCVUdfTEVEKHByaXYsICJBc3NvY2lhdGVkXG4iKTsKLQlpZiAobGVkX21vZGUgPT0gSVdMX0xFRF9CTElOSykKKwlpZiAocHJpdi0+Y2ZnLT5sZWRfbW9kZSA9PSBJV0xfTEVEX0JMSU5LKQogCQlwcml2LT5hbGxvd19ibGlua2luZyA9IDE7CiAJcHJpdi0+bGFzdF9ibGlua190aW1lID0gamlmZmllczsKIAogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTChpd2xfbGVkX2Fzc29jaWF0ZSk7CiAKIGludCBpd2xfbGVkX2Rpc2Fzc29jaWF0ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CkBAIC0xNDEsNiArMTQxLDcgQEAKIAogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTChpd2xfbGVkX2Rpc2Fzc29jaWF0ZSk7CiAKIC8qCiAgKiBjYWxjdWxhdGUgYmxpbmsgcmF0ZSBhY2NvcmRpbmcgdG8gbGFzdCBzZWNvbmQgVHgvUnggYWN0aXZpdGllcwpAQCAtMjIxLDUgKzIyMiw4IEBACiAJcHJpdi0+bGFzdF9ibGlua19yYXRlID0gMDsKIAlwcml2LT5sYXN0X2JsaW5rX3RpbWUgPSAwOwogCXByaXYtPmFsbG93X2JsaW5raW5nID0gMDsKKwlpZiAobGVkX21vZGUgIT0gSVdMX0xFRF9ERUZBVUxUICYmCisJICAgIGxlZF9tb2RlICE9IHByaXYtPmNmZy0+bGVkX21vZGUpCisJCXByaXYtPmNmZy0+bGVkX21vZGUgPSBsZWRfbW9kZTsKIH0KIEVYUE9SVF9TWU1CT0woaXdsX2xlZHNfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1sZWQuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWxlZC5oCmluZGV4IDQ5YTcwYmEuLjkwNzliMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWxlZC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWxlZC5oCkBAIC00NywxNCArNDcsMTYgQEAKIAogLyoKICAqIExFRCBtb2RlCi0gKiAgICBJV0xfTEVEX0JMSU5LOiAgICBhZGp1c3QgbGVkIGJsaW5rIHJhdGUgYmFzZWQgb24gYmxpbmsgdGFibGUKKyAqICAgIElXTF9MRURfREVGQVVMVDogIHVzZSBzeXN0ZW0gZGVmYXVsdAogICogICAgSVdMX0xFRF9SRl9TVEFURTogdHVybiBMRUQgb24vb2ZmIGJhc2VkIG9uIFJGIHN0YXRlCiAgKgkJCUxFRCBPTiAgPSBSRiBPTgogICoJCQlMRUQgT0ZGID0gUkYgT0ZGCisgKiAgICBJV0xfTEVEX0JMSU5LOiAgICBhZGp1c3QgbGVkIGJsaW5rIHJhdGUgYmFzZWQgb24gYmxpbmsgdGFibGUKICAqLwogZW51bSBpd2xfbGVkX21vZGUgewotCUlXTF9MRURfQkxJTkssCisJSVdMX0xFRF9ERUZBVUxULAogCUlXTF9MRURfUkZfU1RBVEUsCisJSVdMX0xFRF9CTElOSywKIH07CiAKIHZvaWQgaXdsX2xlZHNfaW5pdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtbGVnYWN5LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1sZWdhY3kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDhiNGU1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtbGVnYWN5LmMKQEAgLTAsMCArMSw2NjIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBHUEwgTElDRU5TRSBTVU1NQVJZCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDggLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAsCisgKiBVU0EKKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbgorICogaW4gdGhlIGZpbGUgY2FsbGVkIExJQ0VOU0UuR1BMLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiAgSW50ZWwgTGludXggV2lyZWxlc3MgPGlsd0BsaW51eC5pbnRlbC5jb20+CisgKiBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KKworI2luY2x1ZGUgIml3bC1kZXYuaCIKKyNpbmNsdWRlICJpd2wtY29yZS5oIgorI2luY2x1ZGUgIml3bC1oZWxwZXJzLmgiCisjaW5jbHVkZSAiaXdsLWxlZ2FjeS5oIgorCitzdGF0aWMgdm9pZCBpd2xfdXBkYXRlX3FvcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfcnhvbl9jb250ZXh0ICpjdHgpCit7CisJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQorCQlyZXR1cm47CisKKwlpZiAoIWN0eC0+aXNfYWN0aXZlKQorCQlyZXR1cm47CisKKwljdHgtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5xb3NfZmxhZ3MgPSAwOworCisJaWYgKGN0eC0+cW9zX2RhdGEucW9zX2FjdGl2ZSkKKwkJY3R4LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0ucW9zX2ZsYWdzIHw9CisJCQlRT1NfUEFSQU1fRkxHX1VQREFURV9FRENBX01TSzsKKworCWlmIChjdHgtPmh0LmVuYWJsZWQpCisJCWN0eC0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLnFvc19mbGFncyB8PSBRT1NfUEFSQU1fRkxHX1RHTl9NU0s7CisKKwlJV0xfREVCVUdfUU9TKHByaXYsICJzZW5kIFFvUyBjbWQgd2l0aCBRb3MgYWN0aXZlPSVkIEZMQUdTPTB4JVhcbiIsCisJCSAgICAgIGN0eC0+cW9zX2RhdGEucW9zX2FjdGl2ZSwKKwkJICAgICAgY3R4LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0ucW9zX2ZsYWdzKTsKKworCWl3bF9zZW5kX2NtZF9wZHVfYXN5bmMocHJpdiwgY3R4LT5xb3NfY21kLAorCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgaXdsX3Fvc3BhcmFtX2NtZCksCisJCQkgICAgICAgJmN0eC0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLCBOVUxMKTsKK30KKworLyoqCisgKiBpd2xfbGVnYWN5X21hY19jb25maWcgLSBtYWM4MDIxMSBjb25maWcgY2FsbGJhY2sKKyAqLworaW50IGl3bF9sZWdhY3lfbWFjX2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIGNoYW5nZWQpCit7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CisJY29uc3Qgc3RydWN0IGl3bF9jaGFubmVsX2luZm8gKmNoX2luZm87CisJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmh3LT5jb25mOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCA9IGNvbmYtPmNoYW5uZWw7CisJc3RydWN0IGl3bF9odF9jb25maWcgKmh0X2NvbmYgPSAmcHJpdi0+Y3VycmVudF9odF9jb25maWc7CisJc3RydWN0IGl3bF9yeG9uX2NvbnRleHQgKmN0eDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKKwlpbnQgcmV0ID0gMDsKKwl1MTYgY2g7CisJaW50IHNjYW5fYWN0aXZlID0gMDsKKwlib29sIGh0X2NoYW5nZWRbTlVNX0lXTF9SWE9OX0NUWF0gPSB7fTsKKworCWlmIChXQVJOX09OKCFwcml2LT5jZmctPm9wcy0+bGVnYWN5KSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOworCisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJlbnRlciB0byBjaGFubmVsICVkIGNoYW5nZWQgMHglWFxuIiwKKwkJCQkJY2hhbm5lbC0+aHdfdmFsdWUsIGNoYW5nZWQpOworCisJaWYgKHVubGlrZWx5KCFwcml2LT5jZmctPm1vZF9wYXJhbXMtPmRpc2FibGVfaHdfc2NhbiAmJgorCQkJdGVzdF9iaXQoU1RBVFVTX1NDQU5OSU5HLCAmcHJpdi0+c3RhdHVzKSkpIHsKKwkJc2Nhbl9hY3RpdmUgPSAxOworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlIC0gc2Nhbm5pbmdcbiIpOworCX0KKworCWlmIChjaGFuZ2VkICYgKElFRUU4MDIxMV9DT05GX0NIQU5HRV9TTVBTIHwKKwkJICAgICAgIElFRUU4MDIxMV9DT05GX0NIQU5HRV9DSEFOTkVMKSkgeworCQkvKiBtYWM4MDIxMSB1c2VzIHN0YXRpYyBmb3Igbm9uLUhUIHdoaWNoIGlzIHdoYXQgd2Ugd2FudCAqLworCQlwcml2LT5jdXJyZW50X2h0X2NvbmZpZy5zbXBzID0gY29uZi0+c21wc19tb2RlOworCisJCS8qCisJCSAqIFJlY2FsY3VsYXRlIGNoYWluIGNvdW50cy4KKwkJICoKKwkJICogSWYgbW9uaXRvciBtb2RlIGlzIGVuYWJsZWQgdGhlbiBtYWM4MDIxMSB3aWxsCisJCSAqIHNldCB1cCB0aGUgU00gUFMgbW9kZSB0byBPRkYgaWYgYW4gSFQgY2hhbm5lbCBpcworCQkgKiBjb25maWd1cmVkLgorCQkgKi8KKwkJaWYgKHByaXYtPmNmZy0+b3BzLT5oY21kLT5zZXRfcnhvbl9jaGFpbikKKwkJCWZvcl9lYWNoX2NvbnRleHQocHJpdiwgY3R4KQorCQkJCXByaXYtPmNmZy0+b3BzLT5oY21kLT5zZXRfcnhvbl9jaGFpbihwcml2LCBjdHgpOworCX0KKworCS8qIGR1cmluZyBzY2FubmluZyBtYWM4MDIxMSB3aWxsIGRlbGF5IGNoYW5uZWwgc2V0dGluZyB1bnRpbAorCSAqIHNjYW4gZmluaXNoIHdpdGggY2hhbmdlZCA9IDAKKwkgKi8KKwlpZiAoIWNoYW5nZWQgfHwgKGNoYW5nZWQgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfQ0hBTk5FTCkpIHsKKwkJaWYgKHNjYW5fYWN0aXZlKQorCQkJZ290byBzZXRfY2hfb3V0OworCisJCWNoID0gY2hhbm5lbC0+aHdfdmFsdWU7CisJCWNoX2luZm8gPSBpd2xfZ2V0X2NoYW5uZWxfaW5mbyhwcml2LCBjaGFubmVsLT5iYW5kLCBjaCk7CisJCWlmICghaXNfY2hhbm5lbF92YWxpZChjaF9pbmZvKSkgeworCQkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIGludmFsaWQgY2hhbm5lbFxuIik7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byBzZXRfY2hfb3V0OworCQl9CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCQlmb3JfZWFjaF9jb250ZXh0KHByaXYsIGN0eCkgeworCQkJLyogQ29uZmlndXJlIEhUNDAgY2hhbm5lbHMgKi8KKwkJCWlmIChjdHgtPmh0LmVuYWJsZWQgIT0gY29uZl9pc19odChjb25mKSkgeworCQkJCWN0eC0+aHQuZW5hYmxlZCA9IGNvbmZfaXNfaHQoY29uZik7CisJCQkJaHRfY2hhbmdlZFtjdHgtPmN0eGlkXSA9IHRydWU7CisJCQl9CisJCQlpZiAoY3R4LT5odC5lbmFibGVkKSB7CisJCQkJaWYgKGNvbmZfaXNfaHQ0MF9taW51cyhjb25mKSkgeworCQkJCQljdHgtPmh0LmV4dGVuc2lvbl9jaGFuX29mZnNldCA9CisJCQkJCQlJRUVFODAyMTFfSFRfUEFSQU1fQ0hBX1NFQ19CRUxPVzsKKwkJCQkJY3R4LT5odC5pc180MG1oeiA9IHRydWU7CisJCQkJfSBlbHNlIGlmIChjb25mX2lzX2h0NDBfcGx1cyhjb25mKSkgeworCQkJCQljdHgtPmh0LmV4dGVuc2lvbl9jaGFuX29mZnNldCA9CisJCQkJCQlJRUVFODAyMTFfSFRfUEFSQU1fQ0hBX1NFQ19BQk9WRTsKKwkJCQkJY3R4LT5odC5pc180MG1oeiA9IHRydWU7CisJCQkJfSBlbHNlIHsKKwkJCQkJY3R4LT5odC5leHRlbnNpb25fY2hhbl9vZmZzZXQgPQorCQkJCQkJSUVFRTgwMjExX0hUX1BBUkFNX0NIQV9TRUNfTk9ORTsKKwkJCQkJY3R4LT5odC5pc180MG1oeiA9IGZhbHNlOworCQkJCX0KKwkJCX0gZWxzZQorCQkJCWN0eC0+aHQuaXNfNDBtaHogPSBmYWxzZTsKKworCQkJLyoKKwkJCSAqIERlZmF1bHQgdG8gbm8gcHJvdGVjdGlvbi4gUHJvdGVjdGlvbiBtb2RlIHdpbGwKKwkJCSAqIGxhdGVyIGJlIHNldCBmcm9tIEJTUyBjb25maWcgaW4gaXdsX2h0X2NvbmYKKwkJCSAqLworCQkJY3R4LT5odC5wcm90ZWN0aW9uID0gSUVFRTgwMjExX0hUX09QX01PREVfUFJPVEVDVElPTl9OT05FOworCisJCQkvKiBpZiB3ZSBhcmUgc3dpdGNoaW5nIGZyb20gaHQgdG8gMi40IGNsZWFyIGZsYWdzCisJCQkgKiBmcm9tIGFueSBodCByZWxhdGVkIGluZm8gc2luY2UgMi40IGRvZXMgbm90CisJCQkgKiBzdXBwb3J0IGh0ICovCisJCQlpZiAoKGxlMTZfdG9fY3B1KGN0eC0+c3RhZ2luZy5jaGFubmVsKSAhPSBjaCkpCisJCQkJY3R4LT5zdGFnaW5nLmZsYWdzID0gMDsKKworCQkJaXdsX3NldF9yeG9uX2NoYW5uZWwocHJpdiwgY2hhbm5lbCwgY3R4KTsKKwkJCWl3bF9zZXRfcnhvbl9odChwcml2LCBodF9jb25mKTsKKworCQkJaXdsX3NldF9mbGFnc19mb3JfYmFuZChwcml2LCBjdHgsIGNoYW5uZWwtPmJhbmQsCisJCQkJCSAgICAgICBjdHgtPnZpZik7CisJCX0KKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwkJaWYgKHByaXYtPmNmZy0+b3BzLT5sZWdhY3ktPnVwZGF0ZV9iY2FzdF9zdGF0aW9ucykKKwkJCXJldCA9IHByaXYtPmNmZy0+b3BzLT5sZWdhY3ktPnVwZGF0ZV9iY2FzdF9zdGF0aW9ucyhwcml2KTsKKworIHNldF9jaF9vdXQ6CisJCS8qIFRoZSBsaXN0IG9mIHN1cHBvcnRlZCByYXRlcyBhbmQgcmF0ZSBtYXNrIGNhbiBiZSBkaWZmZXJlbnQKKwkJICogZm9yIGVhY2ggYmFuZDsgc2luY2UgdGhlIGJhbmQgbWF5IGhhdmUgY2hhbmdlZCwgcmVzZXQKKwkJICogdGhlIHJhdGUgbWFzayB0byB3aGF0IG1hYzgwMjExIGxpc3RzICovCisJCWl3bF9zZXRfcmF0ZShwcml2KTsKKwl9CisKKwlpZiAoY2hhbmdlZCAmIChJRUVFODAyMTFfQ09ORl9DSEFOR0VfUFMgfAorCQkJSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0lETEUpKSB7CisJCXJldCA9IGl3bF9wb3dlcl91cGRhdGVfbW9kZShwcml2LCBmYWxzZSk7CisJCWlmIChyZXQpCisJCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgIkVycm9yIHNldHRpbmcgc2xlZXAgbGV2ZWxcbiIpOworCX0KKworCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BPV0VSKSB7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiVFggUG93ZXIgb2xkPSVkIG5ldz0lZFxuIiwKKwkJCXByaXYtPnR4X3Bvd2VyX3VzZXJfbG10LCBjb25mLT5wb3dlcl9sZXZlbCk7CisKKwkJaXdsX3NldF90eF9wb3dlcihwcml2LCBjb25mLT5wb3dlcl9sZXZlbCwgZmFsc2UpOworCX0KKworCWlmICghaXdsX2lzX3JlYWR5KHByaXYpKSB7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBub3QgcmVhZHlcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoc2Nhbl9hY3RpdmUpCisJCWdvdG8gb3V0OworCisJZm9yX2VhY2hfY29udGV4dChwcml2LCBjdHgpIHsKKwkJaWYgKG1lbWNtcCgmY3R4LT5hY3RpdmUsICZjdHgtPnN0YWdpbmcsIHNpemVvZihjdHgtPnN0YWdpbmcpKSkKKwkJCWl3bGNvcmVfY29tbWl0X3J4b24ocHJpdiwgY3R4KTsKKwkJZWxzZQorCQkJSVdMX0RFQlVHX0lORk8ocHJpdiwKKwkJCQkiTm90IHJlLXNlbmRpbmcgc2FtZSBSWE9OIGNvbmZpZ3VyYXRpb24uXG4iKTsKKwkJaWYgKGh0X2NoYW5nZWRbY3R4LT5jdHhpZF0pCisJCQlpd2xfdXBkYXRlX3Fvcyhwcml2LCBjdHgpOworCX0KKworb3V0OgorCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmVcbiIpOworCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGl3bF9sZWdhY3lfbWFjX2NvbmZpZyk7CisKK3ZvaWQgaXdsX2xlZ2FjeV9tYWNfcmVzZXRfdHNmKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJLyogSUJTUyBjYW4gb25seSBiZSB0aGUgSVdMX1JYT05fQ1RYX0JTUyBjb250ZXh0ICovCisJc3RydWN0IGl3bF9yeG9uX2NvbnRleHQgKmN0eCA9ICZwcml2LT5jb250ZXh0c1tJV0xfUlhPTl9DVFhfQlNTXTsKKworCWlmIChXQVJOX09OKCFwcml2LT5jZmctPm9wcy0+bGVnYWN5KSkKKwkJcmV0dXJuOworCisJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiZW50ZXJcbiIpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwltZW1zZXQoJnByaXYtPmN1cnJlbnRfaHRfY29uZmlnLCAwLCBzaXplb2Yoc3RydWN0IGl3bF9odF9jb25maWcpKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJLyogbmV3IGFzc29jaWF0aW9uIGdldCByaWQgb2YgaWJzcyBiZWFjb24gc2tiICovCisJaWYgKHByaXYtPmJlYWNvbl9za2IpCisJCWRldl9rZnJlZV9za2IocHJpdi0+YmVhY29uX3NrYik7CisKKwlwcml2LT5iZWFjb25fc2tiID0gTlVMTDsKKworCXByaXYtPnRpbWVzdGFtcCA9IDA7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlpd2xfc2Nhbl9jYW5jZWxfdGltZW91dChwcml2LCAxMDApOworCWlmICghaXdsX2lzX3JlYWR5X3JmKHByaXYpKSB7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBub3QgcmVhZHlcbiIpOworCQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKKwkJcmV0dXJuOworCX0KKworCS8qIHdlIGFyZSByZXN0YXJ0aW5nIGFzc29jaWF0aW9uIHByb2Nlc3MKKwkgKiBjbGVhciBSWE9OX0ZJTFRFUl9BU1NPQ19NU0sgYml0CisJICovCisJY3R4LT5zdGFnaW5nLmZpbHRlcl9mbGFncyAmPSB+UlhPTl9GSUxURVJfQVNTT0NfTVNLOworCWl3bGNvcmVfY29tbWl0X3J4b24ocHJpdiwgY3R4KTsKKworCWl3bF9zZXRfcmF0ZShwcml2KTsKKworCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOworCisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZVxuIik7Cit9CitFWFBPUlRfU1lNQk9MKGl3bF9sZWdhY3lfbWFjX3Jlc2V0X3RzZik7CisKK3N0YXRpYyB2b2lkIGl3bF9odF9jb25mKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCit7CisJc3RydWN0IGl3bF9odF9jb25maWcgKmh0X2NvbmYgPSAmcHJpdi0+Y3VycmVudF9odF9jb25maWc7CisJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpic3NfY29uZiA9ICZ2aWYtPmJzc19jb25mOworCXN0cnVjdCBpd2xfcnhvbl9jb250ZXh0ICpjdHggPSBpd2xfcnhvbl9jdHhfZnJvbV92aWYodmlmKTsKKworCUlXTF9ERUJVR19BU1NPQyhwcml2LCAiZW50ZXI6XG4iKTsKKworCWlmICghY3R4LT5odC5lbmFibGVkKQorCQlyZXR1cm47CisKKwljdHgtPmh0LnByb3RlY3Rpb24gPQorCQlic3NfY29uZi0+aHRfb3BlcmF0aW9uX21vZGUgJiBJRUVFODAyMTFfSFRfT1BfTU9ERV9QUk9URUNUSU9OOworCWN0eC0+aHQubm9uX2dmX3N0YV9wcmVzZW50ID0KKwkJISEoYnNzX2NvbmYtPmh0X29wZXJhdGlvbl9tb2RlICYgSUVFRTgwMjExX0hUX09QX01PREVfTk9OX0dGX1NUQV9QUlNOVCk7CisKKwlodF9jb25mLT5zaW5nbGVfY2hhaW5fc3VmZmljaWVudCA9IGZhbHNlOworCisJc3dpdGNoICh2aWYtPnR5cGUpIHsKKwljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CisJCXJjdV9yZWFkX2xvY2soKTsKKwkJc3RhID0gaWVlZTgwMjExX2ZpbmRfc3RhKHZpZiwgYnNzX2NvbmYtPmJzc2lkKTsKKwkJaWYgKHN0YSkgeworCQkJc3RydWN0IGllZWU4MDIxMV9zdGFfaHRfY2FwICpodF9jYXAgPSAmc3RhLT5odF9jYXA7CisJCQlpbnQgbWF4c3RyZWFtczsKKworCQkJbWF4c3RyZWFtcyA9IChodF9jYXAtPm1jcy50eF9wYXJhbXMgJgorCQkJCSAgICAgIElFRUU4MDIxMV9IVF9NQ1NfVFhfTUFYX1NUUkVBTVNfTUFTSykKKwkJCQkJPj4gSUVFRTgwMjExX0hUX01DU19UWF9NQVhfU1RSRUFNU19TSElGVDsKKwkJCW1heHN0cmVhbXMgKz0gMTsKKworCQkJaWYgKChodF9jYXAtPm1jcy5yeF9tYXNrWzFdID09IDApICYmCisJCQkgICAgKGh0X2NhcC0+bWNzLnJ4X21hc2tbMl0gPT0gMCkpCisJCQkJaHRfY29uZi0+c2luZ2xlX2NoYWluX3N1ZmZpY2llbnQgPSB0cnVlOworCQkJaWYgKG1heHN0cmVhbXMgPD0gMSkKKwkJCQlodF9jb25mLT5zaW5nbGVfY2hhaW5fc3VmZmljaWVudCA9IHRydWU7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogSWYgYXQgYWxsLCB0aGlzIGNhbiBvbmx5IGhhcHBlbiB0aHJvdWdoIGEgcmFjZQorCQkJICogd2hlbiB0aGUgQVAgZGlzY29ubmVjdHMgdXMgd2hpbGUgd2UncmUgc3RpbGwKKwkJCSAqIHNldHRpbmcgdXAgdGhlIGNvbm5lY3Rpb24sIGluIHRoYXQgY2FzZSBtYWM4MDIxMQorCQkJICogd2lsbCBzb29uIHRlbGwgdXMgYWJvdXQgdGhhdC4KKwkJCSAqLworCQkJaHRfY29uZi0+c2luZ2xlX2NoYWluX3N1ZmZpY2llbnQgPSB0cnVlOworCQl9CisJCXJjdV9yZWFkX3VubG9jaygpOworCQlicmVhazsKKwljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgorCQlodF9jb25mLT5zaW5nbGVfY2hhaW5fc3VmZmljaWVudCA9IHRydWU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCUlXTF9ERUJVR19BU1NPQyhwcml2LCAibGVhdmVcbiIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaXdsX3NldF9ub19hc3NvYyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCit7CisJc3RydWN0IGl3bF9yeG9uX2NvbnRleHQgKmN0eCA9IGl3bF9yeG9uX2N0eF9mcm9tX3ZpZih2aWYpOworCisJaXdsX2xlZF9kaXNhc3NvY2lhdGUocHJpdik7CisJLyoKKwkgKiBpbmZvcm0gdGhlIHVjb2RlIHRoYXQgdGhlcmUgaXMgbm8gbG9uZ2VyIGFuCisJICogYXNzb2NpYXRpb24gYW5kIHRoYXQgbm8gbW9yZSBwYWNrZXRzIHNob3VsZCBiZQorCSAqIHNlbnQKKwkgKi8KKwljdHgtPnN0YWdpbmcuZmlsdGVyX2ZsYWdzICY9IH5SWE9OX0ZJTFRFUl9BU1NPQ19NU0s7CisJY3R4LT5zdGFnaW5nLmFzc29jX2lkID0gMDsKKwlpd2xjb3JlX2NvbW1pdF9yeG9uKHByaXYsIGN0eCk7Cit9CisKK3N0YXRpYyB2b2lkIGl3bGNvcmVfYmVhY29uX3VwZGF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCit7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlfX2xlNjQgdGltZXN0YW1wOworCXN0cnVjdCBza19idWZmICpza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldChodywgdmlmKTsKKworCWlmICghc2tiKQorCQlyZXR1cm47CisKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImVudGVyXG4iKTsKKworCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJnByaXYtPm11dGV4KTsKKworCWlmICghcHJpdi0+YmVhY29uX2N0eCkgeworCQlJV0xfRVJSKHByaXYsICJ1cGRhdGUgYmVhY29uIGJ1dCBubyBiZWFjb24gY29udGV4dCFcbiIpOworCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCXJldHVybjsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJaWYgKHByaXYtPmJlYWNvbl9za2IpCisJCWRldl9rZnJlZV9za2IocHJpdi0+YmVhY29uX3NrYik7CisKKwlwcml2LT5iZWFjb25fc2tiID0gc2tiOworCisJdGltZXN0YW1wID0gKChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKilza2ItPmRhdGEpLT51LmJlYWNvbi50aW1lc3RhbXA7CisJcHJpdi0+dGltZXN0YW1wID0gbGU2NF90b19jcHUodGltZXN0YW1wKTsKKworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmVcbiIpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCWlmICghaXdsX2lzX3JlYWR5X3JmKHByaXYpKSB7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBSRiBub3QgcmVhZHlcbiIpOworCQlyZXR1cm47CisJfQorCisJcHJpdi0+Y2ZnLT5vcHMtPmxlZ2FjeS0+cG9zdF9hc3NvY2lhdGUocHJpdik7Cit9CisKK3ZvaWQgaXdsX2xlZ2FjeV9tYWNfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpic3NfY29uZiwKKwkJCQkgICAgIHUzMiBjaGFuZ2VzKQoreworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCXN0cnVjdCBpd2xfcnhvbl9jb250ZXh0ICpjdHggPSBpd2xfcnhvbl9jdHhfZnJvbV92aWYodmlmKTsKKwlpbnQgcmV0OworCisJaWYgKFdBUk5fT04oIXByaXYtPmNmZy0+b3BzLT5sZWdhY3kpKQorCQlyZXR1cm47CisKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImNoYW5nZXMgPSAweCVYXG4iLCBjaGFuZ2VzKTsKKworCWlmICghaXdsX2lzX2FsaXZlKHByaXYpKQorCQlyZXR1cm47CisKKwltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CisKKwlpZiAoY2hhbmdlcyAmIEJTU19DSEFOR0VEX1FPUykgeworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCWN0eC0+cW9zX2RhdGEucW9zX2FjdGl2ZSA9IGJzc19jb25mLT5xb3M7CisJCWl3bF91cGRhdGVfcW9zKHByaXYsIGN0eCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwl9CisKKwlpZiAoY2hhbmdlcyAmIEJTU19DSEFOR0VEX0JFQUNPTl9FTkFCTEVEKSB7CisJCS8qCisJCSAqIHRoZSBhZGRfaW50ZXJmYWNlIGNvZGUgbXVzdCBtYWtlIHN1cmUgd2Ugb25seSBldmVyCisJCSAqIGhhdmUgYSBzaW5nbGUgaW50ZXJmYWNlIHRoYXQgY291bGQgYmUgYmVhY29uaW5nIGF0CisJCSAqIGFueSB0aW1lLgorCQkgKi8KKwkJaWYgKHZpZi0+YnNzX2NvbmYuZW5hYmxlX2JlYWNvbikKKwkJCXByaXYtPmJlYWNvbl9jdHggPSBjdHg7CisJCWVsc2UKKwkJCXByaXYtPmJlYWNvbl9jdHggPSBOVUxMOworCX0KKworCWlmIChjaGFuZ2VzICYgQlNTX0NIQU5HRURfQkVBQ09OICYmIHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkgeworCQlkZXZfa2ZyZWVfc2tiKHByaXYtPmJlYWNvbl9za2IpOworCQlwcml2LT5iZWFjb25fc2tiID0gaWVlZTgwMjExX2JlYWNvbl9nZXQoaHcsIHZpZik7CisJfQorCisJaWYgKGNoYW5nZXMgJiBCU1NfQ0hBTkdFRF9CRUFDT05fSU5UICYmIHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkKKwkJaXdsX3NlbmRfcnhvbl90aW1pbmcocHJpdiwgY3R4KTsKKworCWlmIChjaGFuZ2VzICYgQlNTX0NIQU5HRURfQlNTSUQpIHsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJCU1NJRCAlcE1cbiIsIGJzc19jb25mLT5ic3NpZCk7CisKKwkJLyoKKwkJICogSWYgdGhlcmUgaXMgY3VycmVudGx5IGEgSFcgc2NhbiBnb2luZyBvbiBpbiB0aGUKKwkJICogYmFja2dyb3VuZCB0aGVuIHdlIG5lZWQgdG8gY2FuY2VsIGl0IGVsc2UgdGhlIFJYT04KKwkJICogYmVsb3cvaW4gcG9zdF9hc3NvY2lhdGUgd2lsbCBmYWlsLgorCQkgKi8KKwkJaWYgKGl3bF9zY2FuX2NhbmNlbF90aW1lb3V0KHByaXYsIDEwMCkpIHsKKwkJCUlXTF9XQVJOKHByaXYsICJBYm9ydGVkIHNjYW4gc3RpbGwgaW4gcHJvZ3Jlc3MgYWZ0ZXIgMTAwbXNcbiIpOworCQkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2aW5nIC0gc2NhbiBhYm9ydCBmYWlsZWQuXG4iKTsKKwkJCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOworCQkJcmV0dXJuOworCQl9CisKKwkJLyogbWFjODAyMTEgb25seSBzZXRzIGFzc29jIHdoZW4gaW4gU1RBVElPTiBtb2RlICovCisJCWlmICh2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgfHwgYnNzX2NvbmYtPmFzc29jKSB7CisJCQltZW1jcHkoY3R4LT5zdGFnaW5nLmJzc2lkX2FkZHIsCisJCQkgICAgICAgYnNzX2NvbmYtPmJzc2lkLCBFVEhfQUxFTik7CisKKwkJCS8qIGN1cnJlbnRseSBuZWVkZWQgaW4gYSBmZXcgcGxhY2VzICovCisJCQltZW1jcHkocHJpdi0+YnNzaWQsIGJzc19jb25mLT5ic3NpZCwgRVRIX0FMRU4pOworCQl9IGVsc2UgeworCQkJY3R4LT5zdGFnaW5nLmZpbHRlcl9mbGFncyAmPQorCQkJCX5SWE9OX0ZJTFRFUl9BU1NPQ19NU0s7CisJCX0KKworCX0KKworCS8qCisJICogVGhpcyBuZWVkcyB0byBiZSBhZnRlciBzZXR0aW5nIHRoZSBCU1NJRCBpbiBjYXNlCisJICogbWFjODAyMTEgZGVjaWRlcyB0byBkbyBib3RoIGNoYW5nZXMgYXQgb25jZSBiZWNhdXNlCisJICogaXQgd2lsbCBpbnZva2UgcG9zdF9hc3NvY2lhdGUuCisJICovCisJaWYgKHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQyAmJiBjaGFuZ2VzICYgQlNTX0NIQU5HRURfQkVBQ09OKQorCQlpd2xjb3JlX2JlYWNvbl91cGRhdGUoaHcsIHZpZik7CisKKwlpZiAoY2hhbmdlcyAmIEJTU19DSEFOR0VEX0VSUF9QUkVBTUJMRSkgeworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgIkVSUF9QUkVBTUJMRSAlZFxuIiwKKwkJCQkgICBic3NfY29uZi0+dXNlX3Nob3J0X3ByZWFtYmxlKTsKKwkJaWYgKGJzc19jb25mLT51c2Vfc2hvcnRfcHJlYW1ibGUpCisJCQljdHgtPnN0YWdpbmcuZmxhZ3MgfD0gUlhPTl9GTEdfU0hPUlRfUFJFQU1CTEVfTVNLOworCQllbHNlCisJCQljdHgtPnN0YWdpbmcuZmxhZ3MgJj0gflJYT05fRkxHX1NIT1JUX1BSRUFNQkxFX01TSzsKKwl9CisKKwlpZiAoY2hhbmdlcyAmIEJTU19DSEFOR0VEX0VSUF9DVFNfUFJPVCkgeworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgIkVSUF9DVFMgJWRcbiIsIGJzc19jb25mLT51c2VfY3RzX3Byb3QpOworCQlpZiAoYnNzX2NvbmYtPnVzZV9jdHNfcHJvdCAmJiAocHJpdi0+YmFuZCAhPSBJRUVFODAyMTFfQkFORF81R0haKSkKKwkJCWN0eC0+c3RhZ2luZy5mbGFncyB8PSBSWE9OX0ZMR19UR0dfUFJPVEVDVF9NU0s7CisJCWVsc2UKKwkJCWN0eC0+c3RhZ2luZy5mbGFncyAmPSB+UlhPTl9GTEdfVEdHX1BST1RFQ1RfTVNLOworCQlpZiAoYnNzX2NvbmYtPnVzZV9jdHNfcHJvdCkKKwkJCWN0eC0+c3RhZ2luZy5mbGFncyB8PSBSWE9OX0ZMR19TRUxGX0NUU19FTjsKKwkJZWxzZQorCQkJY3R4LT5zdGFnaW5nLmZsYWdzICY9IH5SWE9OX0ZMR19TRUxGX0NUU19FTjsKKwl9CisKKwlpZiAoY2hhbmdlcyAmIEJTU19DSEFOR0VEX0JBU0lDX1JBVEVTKSB7CisJCS8qIFhYWCB1c2UgdGhpcyBpbmZvcm1hdGlvbgorCQkgKgorCQkgKiBUbyBkbyB0aGF0LCByZW1vdmUgY29kZSBmcm9tIGl3bF9zZXRfcmF0ZSgpIGFuZCBwdXQgc29tZXRoaW5nCisJCSAqIGxpa2UgdGhpcyBoZXJlOgorCQkgKgorCQlpZiAoQS1iYW5kKQorCQkJY3R4LT5zdGFnaW5nLm9mZG1fYmFzaWNfcmF0ZXMgPQorCQkJCWJzc19jb25mLT5iYXNpY19yYXRlczsKKwkJZWxzZQorCQkJY3R4LT5zdGFnaW5nLm9mZG1fYmFzaWNfcmF0ZXMgPQorCQkJCWJzc19jb25mLT5iYXNpY19yYXRlcyA+PiA0OworCQkJY3R4LT5zdGFnaW5nLmNja19iYXNpY19yYXRlcyA9CisJCQkJYnNzX2NvbmYtPmJhc2ljX3JhdGVzICYgMHhGOworCQkgKi8KKwl9CisKKwlpZiAoY2hhbmdlcyAmIEJTU19DSEFOR0VEX0hUKSB7CisJCWl3bF9odF9jb25mKHByaXYsIHZpZik7CisKKwkJaWYgKHByaXYtPmNmZy0+b3BzLT5oY21kLT5zZXRfcnhvbl9jaGFpbikKKwkJCXByaXYtPmNmZy0+b3BzLT5oY21kLT5zZXRfcnhvbl9jaGFpbihwcml2LCBjdHgpOworCX0KKworCWlmIChjaGFuZ2VzICYgQlNTX0NIQU5HRURfQVNTT0MpIHsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJBU1NPQyAlZFxuIiwgYnNzX2NvbmYtPmFzc29jKTsKKwkJaWYgKGJzc19jb25mLT5hc3NvYykgeworCQkJcHJpdi0+dGltZXN0YW1wID0gYnNzX2NvbmYtPnRpbWVzdGFtcDsKKworCQkJaXdsX2xlZF9hc3NvY2lhdGUocHJpdik7CisKKwkJCWlmICghaXdsX2lzX3Jma2lsbChwcml2KSkKKwkJCQlwcml2LT5jZmctPm9wcy0+bGVnYWN5LT5wb3N0X2Fzc29jaWF0ZShwcml2KTsKKwkJfSBlbHNlCisJCQlpd2xfc2V0X25vX2Fzc29jKHByaXYsIHZpZik7CisJfQorCisJaWYgKGNoYW5nZXMgJiYgaXdsX2lzX2Fzc29jaWF0ZWRfY3R4KGN0eCkgJiYgYnNzX2NvbmYtPmFpZCkgeworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgIkNoYW5nZXMgKCUjeCkgd2hpbGUgYXNzb2NpYXRlZFxuIiwKKwkJCQkgICBjaGFuZ2VzKTsKKwkJcmV0ID0gaXdsX3NlbmRfcnhvbl9hc3NvYyhwcml2LCBjdHgpOworCQlpZiAoIXJldCkgeworCQkJLyogU3luYyBhY3RpdmVfcnhvbiB3aXRoIGxhdGVzdCBjaGFuZ2UuICovCisJCQltZW1jcHkoKHZvaWQgKikmY3R4LT5hY3RpdmUsCisJCQkJJmN0eC0+c3RhZ2luZywKKwkJCQlzaXplb2Yoc3RydWN0IGl3bF9yeG9uX2NtZCkpOworCQl9CisJfQorCisJaWYgKGNoYW5nZXMgJiBCU1NfQ0hBTkdFRF9CRUFDT05fRU5BQkxFRCkgeworCQlpZiAodmlmLT5ic3NfY29uZi5lbmFibGVfYmVhY29uKSB7CisJCQltZW1jcHkoY3R4LT5zdGFnaW5nLmJzc2lkX2FkZHIsCisJCQkgICAgICAgYnNzX2NvbmYtPmJzc2lkLCBFVEhfQUxFTik7CisJCQltZW1jcHkocHJpdi0+YnNzaWQsIGJzc19jb25mLT5ic3NpZCwgRVRIX0FMRU4pOworCQkJaXdsX2xlZF9hc3NvY2lhdGUocHJpdik7CisJCQlwcml2LT5jZmctPm9wcy0+bGVnYWN5LT5jb25maWdfYXAocHJpdik7CisJCX0gZWxzZQorCQkJaXdsX3NldF9ub19hc3NvYyhwcml2LCB2aWYpOworCX0KKworCWlmIChjaGFuZ2VzICYgQlNTX0NIQU5HRURfSUJTUykgeworCQlyZXQgPSBwcml2LT5jZmctPm9wcy0+bGVnYWN5LT5tYW5hZ2VfaWJzc19zdGF0aW9uKHByaXYsIHZpZiwKKwkJCQkJCQlic3NfY29uZi0+aWJzc19qb2luZWQpOworCQlpZiAocmV0KQorCQkJSVdMX0VSUihwcml2LCAiZmFpbGVkIHRvICVzIElCU1Mgc3RhdGlvbiAlcE1cbiIsCisJCQkJYnNzX2NvbmYtPmlic3Nfam9pbmVkID8gImFkZCIgOiAicmVtb3ZlIiwKKwkJCQlic3NfY29uZi0+YnNzaWQpOworCX0KKworCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOworCisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZVxuIik7Cit9CitFWFBPUlRfU1lNQk9MKGl3bF9sZWdhY3lfbWFjX2Jzc19pbmZvX2NoYW5nZWQpOworCitpcnFyZXR1cm5fdCBpd2xfaXNyX2xlZ2FjeShpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGRhdGE7CisJdTMyIGludGEsIGludGFfbWFzazsKKwl1MzIgaW50YV9maDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWlmICghcHJpdikKKwkJcmV0dXJuIElSUV9OT05FOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCS8qIERpc2FibGUgKGJ1dCBkb24ndCBjbGVhciEpIGludGVycnVwdHMgaGVyZSB0byBhdm9pZAorCSAqICAgIGJhY2stdG8tYmFjayBJU1JzIGFuZCBzcG9yYWRpYyBpbnRlcnJ1cHRzIGZyb20gb3VyIE5JQy4KKwkgKiBJZiB3ZSBoYXZlIHNvbWV0aGluZyB0byBzZXJ2aWNlLCB0aGUgdGFza2xldCB3aWxsIHJlLWVuYWJsZSBpbnRzLgorCSAqIElmIHdlICpkb24ndCogaGF2ZSBzb21ldGhpbmcsIHdlJ2xsIHJlLWVuYWJsZSBiZWZvcmUgbGVhdmluZyBoZXJlLiAqLworCWludGFfbWFzayA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0lOVF9NQVNLKTsgIC8qIGp1c3QgZm9yIGRlYnVnICovCisJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX0lOVF9NQVNLLCAweDAwMDAwMDAwKTsKKworCS8qIERpc2NvdmVyIHdoaWNoIGludGVycnVwdHMgYXJlIGFjdGl2ZS9wZW5kaW5nICovCisJaW50YSA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0lOVCk7CisJaW50YV9maCA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0ZIX0lOVF9TVEFUVVMpOworCisJLyogSWdub3JlIGludGVycnVwdCBpZiB0aGVyZSdzIG5vdGhpbmcgaW4gTklDIHRvIHNlcnZpY2UuCisJICogVGhpcyBtYXkgYmUgZHVlIHRvIElSUSBzaGFyZWQgd2l0aCBhbm90aGVyIGRldmljZSwKKwkgKiBvciBkdWUgdG8gc3BvcmFkaWMgaW50ZXJydXB0cyB0aHJvd24gZnJvbSBvdXIgTklDLiAqLworCWlmICghaW50YSAmJiAhaW50YV9maCkgeworCQlJV0xfREVCVUdfSVNSKHByaXYsCisJCQkiSWdub3JlIGludGVycnVwdCwgaW50YSA9PSAwLCBpbnRhX2ZoID09IDBcbiIpOworCQlnb3RvIG5vbmU7CisJfQorCisJaWYgKChpbnRhID09IDB4RkZGRkZGRkYpIHx8ICgoaW50YSAmIDB4RkZGRkZGRjApID09IDB4YTVhNWE1YTApKSB7CisJCS8qIEhhcmR3YXJlIGRpc2FwcGVhcmVkLiBJdCBtaWdodCBoYXZlIGFscmVhZHkgcmFpc2VkCisJCSAqIGFuIGludGVycnVwdCAqLworCQlJV0xfV0FSTihwcml2LCAiSEFSRFdBUkUgR09ORT8/IElOVEEgPT0gMHglMDh4XG4iLCBpbnRhKTsKKwkJZ290byB1bnBsdWdnZWQ7CisJfQorCisJSVdMX0RFQlVHX0lTUihwcml2LCAiSVNSIGludGEgMHglMDh4LCBlbmFibGVkIDB4JTA4eCwgZmggMHglMDh4XG4iLAorCQkgICAgICBpbnRhLCBpbnRhX21hc2ssIGludGFfZmgpOworCisJaW50YSAmPSB+Q1NSX0lOVF9CSVRfU0NEOworCisJLyogaXdsX2lycV90YXNrbGV0KCkgd2lsbCBzZXJ2aWNlIGludGVycnVwdHMgYW5kIHJlLWVuYWJsZSB0aGVtICovCisJaWYgKGxpa2VseShpbnRhIHx8IGludGFfZmgpKQorCQl0YXNrbGV0X3NjaGVkdWxlKCZwcml2LT5pcnFfdGFza2xldCk7CisKK3VucGx1Z2dlZDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworCitub25lOgorCS8qIHJlLWVuYWJsZSBpbnRlcnJ1cHRzIGhlcmUgc2luY2Ugd2UgZG9uJ3QgaGF2ZSBhbnl0aGluZyB0byBzZXJ2aWNlLiAqLworCS8qIG9ubHkgUmUtZW5hYmxlIGlmIGRpYWJsZWQgYnkgaXJxICovCisJaWYgKHRlc3RfYml0KFNUQVRVU19JTlRfRU5BQkxFRCwgJnByaXYtPnN0YXR1cykpCisJCWl3bF9lbmFibGVfaW50ZXJydXB0cyhwcml2KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIElSUV9OT05FOworfQorRVhQT1JUX1NZTUJPTChpd2xfaXNyX2xlZ2FjeSk7CisKKy8qCisgKiAgaXdsX2xlZ2FjeV90eF9jbWRfcHJvdGVjdGlvbjogU2V0IHJ0cy9jdHMuIDM5NDUgYW5kIDQ5NjUgb25seSBzaGFyZSB0aGlzCisgKiAgZnVuY3Rpb24uCisgKi8KK3ZvaWQgaXdsX2xlZ2FjeV90eF9jbWRfcHJvdGVjdGlvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvLAorCQkJICAgICAgIF9fbGUxNiBmYywgX19sZTMyICp0eF9mbGFncykKK3sKKwlpZiAoaW5mby0+Y29udHJvbC5yYXRlc1swXS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19VU0VfUlRTX0NUUykgeworCQkqdHhfZmxhZ3MgfD0gVFhfQ01EX0ZMR19SVFNfTVNLOworCQkqdHhfZmxhZ3MgJj0gflRYX0NNRF9GTEdfQ1RTX01TSzsKKwkJKnR4X2ZsYWdzIHw9IFRYX0NNRF9GTEdfRlVMTF9UWE9QX1BST1RfTVNLOworCisJCWlmICghaWVlZTgwMjExX2lzX21nbXQoZmMpKQorCQkJcmV0dXJuOworCisJCXN3aXRjaCAoZmMgJiBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9TVFlQRSkpIHsKKwkJY2FzZSBjcHVfdG9fbGUxNihJRUVFODAyMTFfU1RZUEVfQVVUSCk6CisJCWNhc2UgY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NUWVBFX0RFQVVUSCk6CisJCWNhc2UgY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NUWVBFX0FTU09DX1JFUSk6CisJCWNhc2UgY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NUWVBFX1JFQVNTT0NfUkVRKToKKwkJCSp0eF9mbGFncyAmPSB+VFhfQ01EX0ZMR19SVFNfTVNLOworCQkJKnR4X2ZsYWdzIHw9IFRYX0NNRF9GTEdfQ1RTX01TSzsKKwkJCWJyZWFrOworCQl9CisJfSBlbHNlIGlmIChpbmZvLT5jb250cm9sLnJhdGVzWzBdLmZsYWdzICYKKwkJICAgSUVFRTgwMjExX1RYX1JDX1VTRV9DVFNfUFJPVEVDVCkgeworCQkqdHhfZmxhZ3MgJj0gflRYX0NNRF9GTEdfUlRTX01TSzsKKwkJKnR4X2ZsYWdzIHw9IFRYX0NNRF9GTEdfQ1RTX01TSzsKKwkJKnR4X2ZsYWdzIHw9IFRYX0NNRF9GTEdfRlVMTF9UWE9QX1BST1RfTVNLOworCX0KK30KK0VYUE9SVF9TWU1CT0woaXdsX2xlZ2FjeV90eF9jbWRfcHJvdGVjdGlvbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1sZWdhY3kuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWxlZ2FjeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmN2IyZjkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1sZWdhY3kuaApAQCAtMCwwICsxLDc5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogVGhpcyBmaWxlIGlzIHByb3ZpZGVkIHVuZGVyIGEgZHVhbCBCU0QvR1BMdjIgbGljZW5zZS4gIFdoZW4gdXNpbmcgb3IKKyAqIHJlZGlzdHJpYnV0aW5nIHRoaXMgZmlsZSwgeW91IG1heSBkbyBzbyB1bmRlciBlaXRoZXIgbGljZW5zZS4KKyAqCisgKiBHUEwgTElDRU5TRSBTVU1NQVJZCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDggLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAsCisgKiBVU0EKKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbgorICogaW4gdGhlIGZpbGUgY2FsbGVkIExJQ0VOU0UuR1BMLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiAgSW50ZWwgTGludXggV2lyZWxlc3MgPGlsd0BsaW51eC5pbnRlbC5jb20+CisgKiBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3CisgKgorICogQlNEIExJQ0VOU0UKKyAqCisgKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAgKiBOZWl0aGVyIHRoZSBuYW1lIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9faXdsX2xlZ2FjeV9oX18KKyNkZWZpbmUgX19pd2xfbGVnYWN5X2hfXworCisvKiBtYWM4MDIxMSBoYW5kbGVycyAqLworaW50IGl3bF9sZWdhY3lfbWFjX2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIGNoYW5nZWQpOwordm9pZCBpd2xfbGVnYWN5X21hY19yZXNldF90c2Yoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwordm9pZCBpd2xfbGVnYWN5X21hY19ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmJzc19jb25mLAorCQkJCSAgICAgdTMyIGNoYW5nZXMpOwordm9pZCBpd2xfbGVnYWN5X3R4X2NtZF9wcm90ZWN0aW9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8sCisJCQkJX19sZTE2IGZjLCBfX2xlMzIgKnR4X2ZsYWdzKTsKKworaXJxcmV0dXJuX3QgaXdsX2lzcl9sZWdhY3koaW50IGlycSwgdm9pZCAqZGF0YSk7CisKKyNlbmRpZiAvKiBfX2l3bF9sZWdhY3lfaF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1wb3dlci5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcG93ZXIuYwppbmRleCA0OWQ3Nzg4Li4xZWVjMThkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1wb3dlci5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXBvd2VyLmMKQEAgLTc1LDYgKzc1LDEwIEBACiAKICNkZWZpbmUgTk9TTFAgY3B1X3RvX2xlMTYoMCksIDAsIDAKICNkZWZpbmUgU0xQIElXTF9QT1dFUl9EUklWRVJfQUxMT1dfU0xFRVBfTVNLLCAwLCAwCisjZGVmaW5lIEFTTFAgKElXTF9QT1dFUl9QT1dFUl9TQVZFX0VOQV9NU0sgfAlcCisJCUlXTF9QT1dFUl9QT1dFUl9NQU5BR0VNRU5UX0VOQV9NU0sgfCBcCisJCUlXTF9QT1dFUl9BRFZBTkNFX1BNX0VOQV9NU0spCisjZGVmaW5lIEFTTFBfVE9VVChUKSBjcHVfdG9fbGUzMihUKQogI2RlZmluZSBUVV9UT19VU0VDIDEwMjQKICNkZWZpbmUgU0xQX1RPVVQoVCkgY3B1X3RvX2xlMzIoKFQpICogVFVfVE9fVVNFQykKICNkZWZpbmUgU0xQX1ZFQyhYMCwgWDEsIFgyLCBYMywgWDQpIHtjcHVfdG9fbGUzMihYMCksIFwKQEAgLTExNCw2ICsxMTgsNTIgQEAKIAl7e1NMUCwgU0xQX1RPVVQoMjUpLCBTTFBfVE9VVCgyNSksIFNMUF9WRUMoNCwgNywgMTAsIDEwLCAweEZGKX0sIDB9CiB9OwogCisvKiBhZHZhbmNlIHBvd2VyIG1hbmFnZW1lbnQgKi8KKy8qIERUSU0gMCAtIDIgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaXdsX3Bvd2VyX3ZlY19lbnRyeSBhcG1fcmFuZ2VfMFtJV0xfUE9XRVJfTlVNXSA9IHsKKwl7e0FTTFAsIDAsIDAsIEFTTFBfVE9VVCg1MCksIEFTTFBfVE9VVCg1MCksCisJCVNMUF9WRUMoMSwgMiwgNCwgNiwgMHhGRiksIDB9LCAwfSwKKwl7e0FTTFAsIDAsIDAsIEFTTFBfVE9VVCg1MCksIEFTTFBfVE9VVCg1MCksCisJCVNMUF9WRUMoMSwgMiwgNCwgNiwgMHhGRiksIDB9LCAwfSwKKwl7e0FTTFAsIDAsIDAsIEFTTFBfVE9VVCg1MCksIEFTTFBfVE9VVCg1MCksCisJCVNMUF9WRUMoMSwgMiwgNCwgNiwgMHhGRiksIDB9LCAwfSwKKwl7e0FTTFAsIDAsIDAsIEFTTFBfVE9VVCg1MCksIEFTTFBfVE9VVCg1MCksCisJCVNMUF9WRUMoMSwgMiwgNCwgNiwgMHhGRiksIDB9LCAwfSwKKwl7e0FTTFAsIDAsIDAsIEFTTFBfVE9VVCg1MCksIEFTTFBfVE9VVCg1MCksCisJCVNMUF9WRUMoMSwgMiwgNiwgOCwgMHhGRiksIEFTTFBfVE9VVCgyKX0sIDJ9Cit9OworCisKKy8qIGZvciBEVElNIHBlcmlvZCBJV0xfRFRJTV9SQU5HRV8wX01BWCArIDEgdGhyb3VnaCBJV0xfRFRJTV9SQU5HRV8xX01BWCAqLworLyogRFRJTSAzIC0gMTAgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaXdsX3Bvd2VyX3ZlY19lbnRyeSBhcG1fcmFuZ2VfMVtJV0xfUE9XRVJfTlVNXSA9IHsKKwl7e0FTTFAsIDAsIDAsIEFTTFBfVE9VVCg1MCksIEFTTFBfVE9VVCg1MCksCisJCVNMUF9WRUMoMSwgMiwgNCwgNiwgMHhGRiksIDB9LCAwfSwKKwl7e0FTTFAsIDAsIDAsIEFTTFBfVE9VVCg1MCksIEFTTFBfVE9VVCg1MCksCisJCVNMUF9WRUMoMSwgMiwgNCwgNiwgMHhGRiksIDB9LCAwfSwKKwl7e0FTTFAsIDAsIDAsIEFTTFBfVE9VVCg1MCksIEFTTFBfVE9VVCg1MCksCisJCVNMUF9WRUMoMSwgMiwgNCwgNiwgMHhGRiksIDB9LCAwfSwKKwl7e0FTTFAsIDAsIDAsIEFTTFBfVE9VVCg1MCksIEFTTFBfVE9VVCg1MCksCisJCVNMUF9WRUMoMSwgMiwgNCwgNiwgMHhGRiksIDB9LCAwfSwKKwl7e0FTTFAsIDAsIDAsIEFTTFBfVE9VVCg1MCksIEFTTFBfVE9VVCg1MCksCisJCVNMUF9WRUMoMSwgMiwgNiwgOCwgMHhGRiksIDB9LCAyfQorfTsKKworLyogZm9yIERUSU0gcGVyaW9kID4gSVdMX0RUSU1fUkFOR0VfMV9NQVggKi8KKy8qIERUSU0gMTEgLSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBpd2xfcG93ZXJfdmVjX2VudHJ5IGFwbV9yYW5nZV8yW0lXTF9QT1dFUl9OVU1dID0geworCXt7QVNMUCwgMCwgMCwgQVNMUF9UT1VUKDUwKSwgQVNMUF9UT1VUKDUwKSwKKwkJU0xQX1ZFQygxLCAyLCA0LCA2LCAweEZGKSwgMH0sIDB9LAorCXt7QVNMUCwgMCwgMCwgQVNMUF9UT1VUKDUwKSwgQVNMUF9UT1VUKDUwKSwKKwkJU0xQX1ZFQygxLCAyLCA0LCA2LCAweEZGKSwgMH0sIDB9LAorCXt7QVNMUCwgMCwgMCwgQVNMUF9UT1VUKDUwKSwgQVNMUF9UT1VUKDUwKSwKKwkJU0xQX1ZFQygxLCAyLCA0LCA2LCAweEZGKSwgMH0sIDB9LAorCXt7QVNMUCwgMCwgMCwgQVNMUF9UT1VUKDUwKSwgQVNMUF9UT1VUKDUwKSwKKwkJU0xQX1ZFQygxLCAyLCA0LCA2LCAweEZGKSwgMH0sIDB9LAorCXt7QVNMUCwgMCwgMCwgQVNMUF9UT1VUKDUwKSwgQVNMUF9UT1VUKDUwKSwKKwkJU0xQX1ZFQygxLCAyLCA2LCA4LCAweEZGKSwgQVNMUF9UT1VUKDIpfSwgMn0KK307CisKIHN0YXRpYyB2b2lkIGl3bF9zdGF0aWNfc2xlZXBfY21kKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQkgc3RydWN0IGl3bF9wb3dlcnRhYmxlX2NtZCAqY21kLAogCQkJCSBlbnVtIGl3bF9wb3dlcl9sZXZlbCBsdmwsIGludCBwZXJpb2QpCkBAIC0xMjQsMTEgKzE3NCwxOSBAQAogCXU4IHNraXA7CiAJdTMyIHNscF9pdHJ2bDsKIAotCXRhYmxlID0gcmFuZ2VfMjsKLQlpZiAocGVyaW9kIDw9IElXTF9EVElNX1JBTkdFXzFfTUFYKQotCQl0YWJsZSA9IHJhbmdlXzE7Ci0JaWYgKHBlcmlvZCA8PSBJV0xfRFRJTV9SQU5HRV8wX01BWCkKLQkJdGFibGUgPSByYW5nZV8wOworCWlmIChwcml2LT5jZmctPmFkdl9wbSkgeworCQl0YWJsZSA9IGFwbV9yYW5nZV8yOworCQlpZiAocGVyaW9kIDw9IElXTF9EVElNX1JBTkdFXzFfTUFYKQorCQkJdGFibGUgPSBhcG1fcmFuZ2VfMTsKKwkJaWYgKHBlcmlvZCA8PSBJV0xfRFRJTV9SQU5HRV8wX01BWCkKKwkJCXRhYmxlID0gYXBtX3JhbmdlXzA7CisJfSBlbHNlIHsKKwkJdGFibGUgPSByYW5nZV8yOworCQlpZiAocGVyaW9kIDw9IElXTF9EVElNX1JBTkdFXzFfTUFYKQorCQkJdGFibGUgPSByYW5nZV8xOworCQlpZiAocGVyaW9kIDw9IElXTF9EVElNX1JBTkdFXzBfTUFYKQorCQkJdGFibGUgPSByYW5nZV8wOworCX0KIAogCUJVR19PTihsdmwgPCAwIHx8IGx2bCA+PSBJV0xfUE9XRVJfTlVNKTsKIApAQCAtMTYzLDYgKzIyMSwyMCBAQAogCWVsc2UKIAkJY21kLT5mbGFncyAmPSB+SVdMX1BPV0VSX1NMRUVQX09WRVJfRFRJTV9NU0s7CiAKKwlpZiAocHJpdi0+Y2ZnLT5iYXNlX3BhcmFtcy0+c2hhZG93X3JlZ19lbmFibGUpCisJCWNtZC0+ZmxhZ3MgfD0gSVdMX1BPV0VSX1NIQURPV19SRUdfRU5BOworCWVsc2UKKwkJY21kLT5mbGFncyAmPSB+SVdMX1BPV0VSX1NIQURPV19SRUdfRU5BOworCisJaWYgKHByaXYtPmNmZy0+YnRfcGFyYW1zICYmCisJICAgIHByaXYtPmNmZy0+YnRfcGFyYW1zLT5hZHZhbmNlZF9idF9jb2V4aXN0KSB7CisJCWlmICghcHJpdi0+Y2ZnLT5idF9wYXJhbXMtPmJ0X3Njb19kaXNhYmxlKQorCQkJY21kLT5mbGFncyB8PSBJV0xfUE9XRVJfQlRfU0NPX0VOQTsKKwkJZWxzZQorCQkJY21kLT5mbGFncyAmPSB+SVdMX1BPV0VSX0JUX1NDT19FTkE7CisJfQorCisKIAlzbHBfaXRydmwgPSBsZTMyX3RvX2NwdShjbWQtPnNsZWVwX2ludGVydmFsW0lXTF9QT1dFUl9WRUNfU0laRSAtIDFdKTsKIAlpZiAoc2xwX2l0cnZsID4gSVdMX0NPTk5fTUFYX0xJU1RFTl9JTlRFUlZBTCkKIAkJY21kLT5zbGVlcF9pbnRlcnZhbFtJV0xfUE9XRVJfVkVDX1NJWkUgLSAxXSA9CkBAIC0yMzYsNiArMzA4LDE5IEBACiAJaWYgKHByaXYtPnBvd2VyX2RhdGEucGNpX3BtKQogCQljbWQtPmZsYWdzIHw9IElXTF9QT1dFUl9QQ0lfUE1fTVNLOwogCisJaWYgKHByaXYtPmNmZy0+YmFzZV9wYXJhbXMtPnNoYWRvd19yZWdfZW5hYmxlKQorCQljbWQtPmZsYWdzIHw9IElXTF9QT1dFUl9TSEFET1dfUkVHX0VOQTsKKwllbHNlCisJCWNtZC0+ZmxhZ3MgJj0gfklXTF9QT1dFUl9TSEFET1dfUkVHX0VOQTsKKworCWlmIChwcml2LT5jZmctPmJ0X3BhcmFtcyAmJgorCSAgICBwcml2LT5jZmctPmJ0X3BhcmFtcy0+YWR2YW5jZWRfYnRfY29leGlzdCkgeworCQlpZiAoIXByaXYtPmNmZy0+YnRfcGFyYW1zLT5idF9zY29fZGlzYWJsZSkKKwkJCWNtZC0+ZmxhZ3MgfD0gSVdMX1BPV0VSX0JUX1NDT19FTkE7CisJCWVsc2UKKwkJCWNtZC0+ZmxhZ3MgJj0gfklXTF9QT1dFUl9CVF9TQ09fRU5BOworCX0KKwogCWNtZC0+cnhfZGF0YV90aW1lb3V0ID0gY3B1X3RvX2xlMzIoMTAwMCAqIGR5bnBzX21zKTsKIAljbWQtPnR4X2RhdGFfdGltZW91dCA9IGNwdV90b19sZTMyKDEwMDAgKiBkeW5wc19tcyk7CiAKQEAgLTI2Myw3MCArMzQ4LDk1IEBACiAJCQkJc2l6ZW9mKHN0cnVjdCBpd2xfcG93ZXJ0YWJsZV9jbWQpLCBjbWQpOwogfQogCi0vKiBwcml2LT5tdXRleCBtdXN0IGJlIGhlbGQgKi8KLWludCBpd2xfcG93ZXJfdXBkYXRlX21vZGUoc3RydWN0IGl3bF9wcml2ICpwcml2LCBib29sIGZvcmNlKQorc3RhdGljIHZvaWQgaXdsX3Bvd2VyX2J1aWxkX2NtZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJc3RydWN0IGl3bF9wb3dlcnRhYmxlX2NtZCAqY21kKQogewotCWludCByZXQgPSAwOwogCWJvb2wgZW5hYmxlZCA9IHByaXYtPmh3LT5jb25mLmZsYWdzICYgSUVFRTgwMjExX0NPTkZfUFM7Ci0JYm9vbCB1cGRhdGVfY2hhaW5zOwotCXN0cnVjdCBpd2xfcG93ZXJ0YWJsZV9jbWQgY21kOwogCWludCBkdGltcGVyOwogCisJZHRpbXBlciA9IHByaXYtPmh3LT5jb25mLnBzX2R0aW1fcGVyaW9kID86IDE7CisKKwlpZiAocHJpdi0+Y2ZnLT5iYXNlX3BhcmFtcy0+YnJva2VuX3Bvd2Vyc2F2ZSkKKwkJaXdsX3Bvd2VyX3NsZWVwX2NhbV9jbWQocHJpdiwgY21kKTsKKwllbHNlIGlmIChwcml2LT5jZmctPmJhc2VfcGFyYW1zLT5zdXBwb3J0c19pZGxlICYmCisJCSBwcml2LT5ody0+Y29uZi5mbGFncyAmIElFRUU4MDIxMV9DT05GX0lETEUpCisJCWl3bF9zdGF0aWNfc2xlZXBfY21kKHByaXYsIGNtZCwgSVdMX1BPV0VSX0lOREVYXzUsIDIwKTsKKwllbHNlIGlmIChwcml2LT5jZmctPm9wcy0+bGliLT50dF9vcHMubG93ZXJfcG93ZXJfZGV0ZWN0aW9uICYmCisJCSBwcml2LT5jZmctPm9wcy0+bGliLT50dF9vcHMudHRfcG93ZXJfbW9kZSAmJgorCQkgcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+dHRfb3BzLmxvd2VyX3Bvd2VyX2RldGVjdGlvbihwcml2KSkgeworCQkvKiBpbiB0aGVybWFsIHRocm90dGxpbmcgbG93IHBvd2VyIHN0YXRlICovCisJCWl3bF9zdGF0aWNfc2xlZXBfY21kKHByaXYsIGNtZCwKKwkJICAgIHByaXYtPmNmZy0+b3BzLT5saWItPnR0X29wcy50dF9wb3dlcl9tb2RlKHByaXYpLCBkdGltcGVyKTsKKwl9IGVsc2UgaWYgKCFlbmFibGVkKQorCQlpd2xfcG93ZXJfc2xlZXBfY2FtX2NtZChwcml2LCBjbWQpOworCWVsc2UgaWYgKHByaXYtPnBvd2VyX2RhdGEuZGVidWdfc2xlZXBfbGV2ZWxfb3ZlcnJpZGUgPj0gMCkKKwkJaXdsX3N0YXRpY19zbGVlcF9jbWQocHJpdiwgY21kLAorCQkJCSAgICAgcHJpdi0+cG93ZXJfZGF0YS5kZWJ1Z19zbGVlcF9sZXZlbF9vdmVycmlkZSwKKwkJCQkgICAgIGR0aW1wZXIpOworCWVsc2UgaWYgKG5vX3NsZWVwX2F1dG9hZGp1c3QpCisJCWl3bF9zdGF0aWNfc2xlZXBfY21kKHByaXYsIGNtZCwgSVdMX1BPV0VSX0lOREVYXzEsIGR0aW1wZXIpOworCWVsc2UKKwkJaXdsX3Bvd2VyX2ZpbGxfc2xlZXBfY21kKHByaXYsIGNtZCwKKwkJCQkJIHByaXYtPmh3LT5jb25mLmR5bmFtaWNfcHNfdGltZW91dCwKKwkJCQkJIHByaXYtPmh3LT5jb25mLm1heF9zbGVlcF9wZXJpb2QpOworfQorCitpbnQgaXdsX3Bvd2VyX3NldF9tb2RlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF9wb3dlcnRhYmxlX2NtZCAqY21kLAorCQkgICAgICAgYm9vbCBmb3JjZSkKK3sKKwlpbnQgcmV0OworCWJvb2wgdXBkYXRlX2NoYWluczsKKworCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJnByaXYtPm11dGV4KTsKKwogCS8qIERvbid0IHVwZGF0ZSB0aGUgUlggY2hhaW4gd2hlbiBjaGFpbiBub2lzZSBjYWxpYnJhdGlvbiBpcyBydW5uaW5nICovCiAJdXBkYXRlX2NoYWlucyA9IHByaXYtPmNoYWluX25vaXNlX2RhdGEuc3RhdGUgPT0gSVdMX0NIQUlOX05PSVNFX0RPTkUgfHwKIAkJCXByaXYtPmNoYWluX25vaXNlX2RhdGEuc3RhdGUgPT0gSVdMX0NIQUlOX05PSVNFX0FMSVZFOwogCi0JZHRpbXBlciA9IHByaXYtPmh3LT5jb25mLnBzX2R0aW1fcGVyaW9kID86IDE7CisJaWYgKCFtZW1jbXAoJnByaXYtPnBvd2VyX2RhdGEuc2xlZXBfY21kLCBjbWQsIHNpemVvZigqY21kKSkgJiYgIWZvcmNlKQorCQlyZXR1cm4gMDsKIAotCWlmIChwcml2LT5jZmctPmJhc2VfcGFyYW1zLT5icm9rZW5fcG93ZXJzYXZlKQotCQlpd2xfcG93ZXJfc2xlZXBfY2FtX2NtZChwcml2LCAmY21kKTsKLQllbHNlIGlmIChwcml2LT5jZmctPmJhc2VfcGFyYW1zLT5zdXBwb3J0c19pZGxlICYmCi0JCSBwcml2LT5ody0+Y29uZi5mbGFncyAmIElFRUU4MDIxMV9DT05GX0lETEUpCi0JCWl3bF9zdGF0aWNfc2xlZXBfY21kKHByaXYsICZjbWQsIElXTF9QT1dFUl9JTkRFWF81LCAyMCk7Ci0JZWxzZSBpZiAocHJpdi0+Y2ZnLT5vcHMtPmxpYi0+dHRfb3BzLmxvd2VyX3Bvd2VyX2RldGVjdGlvbiAmJgotCQkgcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+dHRfb3BzLnR0X3Bvd2VyX21vZGUgJiYKLQkJIHByaXYtPmNmZy0+b3BzLT5saWItPnR0X29wcy5sb3dlcl9wb3dlcl9kZXRlY3Rpb24ocHJpdikpIHsKLQkJLyogaW4gdGhlcm1hbCB0aHJvdHRsaW5nIGxvdyBwb3dlciBzdGF0ZSAqLwotCQlpd2xfc3RhdGljX3NsZWVwX2NtZChwcml2LCAmY21kLAotCQkgICAgcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+dHRfb3BzLnR0X3Bvd2VyX21vZGUocHJpdiksIGR0aW1wZXIpOwotCX0gZWxzZSBpZiAoIWVuYWJsZWQpCi0JCWl3bF9wb3dlcl9zbGVlcF9jYW1fY21kKHByaXYsICZjbWQpOwotCWVsc2UgaWYgKHByaXYtPnBvd2VyX2RhdGEuZGVidWdfc2xlZXBfbGV2ZWxfb3ZlcnJpZGUgPj0gMCkKLQkJaXdsX3N0YXRpY19zbGVlcF9jbWQocHJpdiwgJmNtZCwKLQkJCQkgICAgIHByaXYtPnBvd2VyX2RhdGEuZGVidWdfc2xlZXBfbGV2ZWxfb3ZlcnJpZGUsCi0JCQkJICAgICBkdGltcGVyKTsKLQllbHNlIGlmIChub19zbGVlcF9hdXRvYWRqdXN0KQotCQlpd2xfc3RhdGljX3NsZWVwX2NtZChwcml2LCAmY21kLCBJV0xfUE9XRVJfSU5ERVhfMSwgZHRpbXBlcik7Ci0JZWxzZQotCQlpd2xfcG93ZXJfZmlsbF9zbGVlcF9jbWQocHJpdiwgJmNtZCwKLQkJCQkJIHByaXYtPmh3LT5jb25mLmR5bmFtaWNfcHNfdGltZW91dCwKLQkJCQkJIHByaXYtPmh3LT5jb25mLm1heF9zbGVlcF9wZXJpb2QpOworCWlmICghaXdsX2lzX3JlYWR5X3JmKHByaXYpKQorCQlyZXR1cm4gLUVJTzsKIAotCWlmIChpd2xfaXNfcmVhZHlfcmYocHJpdikgJiYKLQkgICAgKG1lbWNtcCgmcHJpdi0+cG93ZXJfZGF0YS5zbGVlcF9jbWQsICZjbWQsIHNpemVvZihjbWQpKSB8fCBmb3JjZSkpIHsKLQkJaWYgKGNtZC5mbGFncyAmIElXTF9QT1dFUl9EUklWRVJfQUxMT1dfU0xFRVBfTVNLKQotCQkJc2V0X2JpdChTVEFUVVNfUE9XRVJfUE1JLCAmcHJpdi0+c3RhdHVzKTsKKwkvKiBzY2FuIGNvbXBsZXRlIHVzZSBzbGVlcF9wb3dlcl9uZXh0LCBuZWVkIHRvIGJlIHVwZGF0ZWQgKi8KKwltZW1jcHkoJnByaXYtPnBvd2VyX2RhdGEuc2xlZXBfY21kX25leHQsIGNtZCwgc2l6ZW9mKCpjbWQpKTsKKwlpZiAodGVzdF9iaXQoU1RBVFVTX1NDQU5OSU5HLCAmcHJpdi0+c3RhdHVzKSAmJiAhZm9yY2UpIHsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkRlZmVyIHBvd2VyIHNldCBtb2RlIHdoaWxlIHNjYW5uaW5nXG4iKTsKKwkJcmV0dXJuIDA7CisJfQogCi0JCXJldCA9IGl3bF9zZXRfcG93ZXIocHJpdiwgJmNtZCk7Ci0JCWlmICghcmV0KSB7Ci0JCQlpZiAoIShjbWQuZmxhZ3MgJiBJV0xfUE9XRVJfRFJJVkVSX0FMTE9XX1NMRUVQX01TSykpCi0JCQkJY2xlYXJfYml0KFNUQVRVU19QT1dFUl9QTUksICZwcml2LT5zdGF0dXMpOworCWlmIChjbWQtPmZsYWdzICYgSVdMX1BPV0VSX0RSSVZFUl9BTExPV19TTEVFUF9NU0spCisJCXNldF9iaXQoU1RBVFVTX1BPV0VSX1BNSSwgJnByaXYtPnN0YXR1cyk7CiAKLQkJCWlmIChwcml2LT5jZmctPm9wcy0+bGliLT51cGRhdGVfY2hhaW5fZmxhZ3MgJiYKLQkJCSAgICB1cGRhdGVfY2hhaW5zKQotCQkJCXByaXYtPmNmZy0+b3BzLT5saWItPnVwZGF0ZV9jaGFpbl9mbGFncyhwcml2KTsKLQkJCWVsc2UgaWYgKHByaXYtPmNmZy0+b3BzLT5saWItPnVwZGF0ZV9jaGFpbl9mbGFncykKLQkJCQlJV0xfREVCVUdfUE9XRVIocHJpdiwKKwlyZXQgPSBpd2xfc2V0X3Bvd2VyKHByaXYsIGNtZCk7CisJaWYgKCFyZXQpIHsKKwkJaWYgKCEoY21kLT5mbGFncyAmIElXTF9QT1dFUl9EUklWRVJfQUxMT1dfU0xFRVBfTVNLKSkKKwkJCWNsZWFyX2JpdChTVEFUVVNfUE9XRVJfUE1JLCAmcHJpdi0+c3RhdHVzKTsKKworCQlpZiAocHJpdi0+Y2ZnLT5vcHMtPmxpYi0+dXBkYXRlX2NoYWluX2ZsYWdzICYmIHVwZGF0ZV9jaGFpbnMpCisJCQlwcml2LT5jZmctPm9wcy0+bGliLT51cGRhdGVfY2hhaW5fZmxhZ3MocHJpdik7CisJCWVsc2UgaWYgKHByaXYtPmNmZy0+b3BzLT5saWItPnVwZGF0ZV9jaGFpbl9mbGFncykKKwkJCUlXTF9ERUJVR19QT1dFUihwcml2LAogCQkJCQkiQ2Fubm90IHVwZGF0ZSB0aGUgcG93ZXIsIGNoYWluIG5vaXNlICIKIAkJCQkJImNhbGlicmF0aW9uIHJ1bm5pbmc6ICVkXG4iLAogCQkJCQlwcml2LT5jaGFpbl9ub2lzZV9kYXRhLnN0YXRlKTsKLQkJCW1lbWNweSgmcHJpdi0+cG93ZXJfZGF0YS5zbGVlcF9jbWQsICZjbWQsIHNpemVvZihjbWQpKTsKLQkJfSBlbHNlCi0JCQlJV0xfRVJSKHByaXYsICJzZXQgcG93ZXIgZmFpbCwgcmV0ID0gJWQiLCByZXQpOwotCX0KKworCQltZW1jcHkoJnByaXYtPnBvd2VyX2RhdGEuc2xlZXBfY21kLCBjbWQsIHNpemVvZigqY21kKSk7CisJfSBlbHNlCisJCUlXTF9FUlIocHJpdiwgInNldCBwb3dlciBmYWlsLCByZXQgPSAlZCIsIHJldCk7CiAKIAlyZXR1cm4gcmV0OwogfQorRVhQT1JUX1NZTUJPTChpd2xfcG93ZXJfc2V0X21vZGUpOworCitpbnQgaXdsX3Bvd2VyX3VwZGF0ZV9tb2RlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgYm9vbCBmb3JjZSkKK3sKKwlzdHJ1Y3QgaXdsX3Bvd2VydGFibGVfY21kIGNtZDsKKworCWl3bF9wb3dlcl9idWlsZF9jbWQocHJpdiwgJmNtZCk7CisJcmV0dXJuIGl3bF9wb3dlcl9zZXRfbW9kZShwcml2LCAmY21kLCBmb3JjZSk7Cit9CiBFWFBPUlRfU1lNQk9MKGl3bF9wb3dlcl91cGRhdGVfbW9kZSk7CiAKIC8qIGluaXRpYWxpemUgdG8gZGVmYXVsdCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcG93ZXIuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXBvd2VyLmgKaW5kZXggZGY4MTU2NS4uZmUwMTIwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcG93ZXIuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1wb3dlci5oCkBAIC00MSwxMCArNDEsMTMgQEAKIAogc3RydWN0IGl3bF9wb3dlcl9tZ3IgewogCXN0cnVjdCBpd2xfcG93ZXJ0YWJsZV9jbWQgc2xlZXBfY21kOworCXN0cnVjdCBpd2xfcG93ZXJ0YWJsZV9jbWQgc2xlZXBfY21kX25leHQ7CiAJaW50IGRlYnVnX3NsZWVwX2xldmVsX292ZXJyaWRlOwogCWJvb2wgcGNpX3BtOwogfTsKIAoraW50IGl3bF9wb3dlcl9zZXRfbW9kZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfcG93ZXJ0YWJsZV9jbWQgKmNtZCwKKwkJICAgICAgIGJvb2wgZm9yY2UpOwogaW50IGl3bF9wb3dlcl91cGRhdGVfbW9kZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGJvb2wgZm9yY2UpOwogdm9pZCBpd2xfcG93ZXJfaW5pdGlhbGl6ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1wcnBoLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1wcnBoLmgKaW5kZXggNTQ2OTY1NS4uODZmNTEyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcHJwaC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXBycGguaApAQCAtODMsMTAgKzgzLDEwIEBACiAjZGVmaW5lIEFQTUdfRElHSVRBTF9TVlJfUkVHCQkoQVBNR19CQVNFICsgMHgwMDU4KQogI2RlZmluZSBBUE1HX0FOQUxPR19TVlJfUkVHCQkoQVBNR19CQVNFICsgMHgwMDZDKQogCisjZGVmaW5lIEFQTVNfQ0xLX1ZBTF9NUkJfRlVOQ19NT0RFCSgweDAwMDAwMDAxKQogI2RlZmluZSBBUE1HX0NMS19WQUxfRE1BX0NMS19SUVQJKDB4MDAwMDAyMDApCiAjZGVmaW5lIEFQTUdfQ0xLX1ZBTF9CU01fQ0xLX1JRVAkoMHgwMDAwMDgwMCkKIAotCiAjZGVmaW5lIEFQTUdfUFNfQ1RSTF9FQVJMWV9QV1JfT0ZGX1JFU0VUX0RJUwkoMHgwMDQwMDAwMCkKICNkZWZpbmUgQVBNR19QU19DVFJMX1ZBTF9SRVNFVF9SRVEJCSgweDA0MDAwMDAwKQogI2RlZmluZSBBUE1HX1BTX0NUUkxfTVNLX1BXUl9TUkMJCSgweDAzMDAwMDAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXJ4LmMKaW5kZXggZjQzNjI3MC4uODdhNmZkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcnguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1yeC5jCkBAIC0xMzQsMjggKzEzNCwzNyBAQAogCWlmIChxLT5uZWVkX3VwZGF0ZSA9PSAwKQogCQlnb3RvIGV4aXRfdW5sb2NrOwogCi0JLyogSWYgcG93ZXItc2F2aW5nIGlzIGluIHVzZSwgbWFrZSBzdXJlIGRldmljZSBpcyBhd2FrZSAqLwotCWlmICh0ZXN0X2JpdChTVEFUVVNfUE9XRVJfUE1JLCAmcHJpdi0+c3RhdHVzKSkgewotCQlyZWcgPSBpd2xfcmVhZDMyKHByaXYsIENTUl9VQ09ERV9EUlZfR1AxKTsKLQotCQlpZiAocmVnICYgQ1NSX1VDT0RFX0RSVl9HUDFfQklUX01BQ19TTEVFUCkgewotCQkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlJ4IHF1ZXVlIHJlcXVlc3Rpbmcgd2FrZXVwLCBHUDEgPSAweCV4XG4iLAotCQkJCSAgICAgIHJlZyk7Ci0JCQlpd2xfc2V0X2JpdChwcml2LCBDU1JfR1BfQ05UUkwsCi0JCQkJICAgIENTUl9HUF9DTlRSTF9SRUdfRkxBR19NQUNfQUNDRVNTX1JFUSk7Ci0JCQlnb3RvIGV4aXRfdW5sb2NrOwotCQl9Ci0KLQkJcS0+d3JpdGVfYWN0dWFsID0gKHEtPndyaXRlICYgfjB4Nyk7Ci0JCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LCByeF93cnRfcHRyX3JlZywgcS0+d3JpdGVfYWN0dWFsKTsKLQotCS8qIEVsc2UgZGV2aWNlIGlzIGFzc3VtZWQgdG8gYmUgYXdha2UgKi8KLQl9IGVsc2UgeworCWlmIChwcml2LT5jZmctPmJhc2VfcGFyYW1zLT5zaGFkb3dfcmVnX2VuYWJsZSkgeworCQkvKiBzaGFkb3cgcmVnaXN0ZXIgZW5hYmxlZCAqLwogCQkvKiBEZXZpY2UgZXhwZWN0cyBhIG11bHRpcGxlIG9mIDggKi8KIAkJcS0+d3JpdGVfYWN0dWFsID0gKHEtPndyaXRlICYgfjB4Nyk7Ci0JCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LCByeF93cnRfcHRyX3JlZywgcS0+d3JpdGVfYWN0dWFsKTsKLQl9CisJCWl3bF93cml0ZTMyKHByaXYsIHJ4X3dydF9wdHJfcmVnLCBxLT53cml0ZV9hY3R1YWwpOworCX0gZWxzZSB7CisJCS8qIElmIHBvd2VyLXNhdmluZyBpcyBpbiB1c2UsIG1ha2Ugc3VyZSBkZXZpY2UgaXMgYXdha2UgKi8KKwkJaWYgKHRlc3RfYml0KFNUQVRVU19QT1dFUl9QTUksICZwcml2LT5zdGF0dXMpKSB7CisJCQlyZWcgPSBpd2xfcmVhZDMyKHByaXYsIENTUl9VQ09ERV9EUlZfR1AxKTsKIAorCQkJaWYgKHJlZyAmIENTUl9VQ09ERV9EUlZfR1AxX0JJVF9NQUNfU0xFRVApIHsKKwkJCQlJV0xfREVCVUdfSU5GTyhwcml2LAorCQkJCQkiUnggcXVldWUgcmVxdWVzdGluZyB3YWtldXAsIgorCQkJCQkiIEdQMSA9IDB4JXhcbiIsIHJlZyk7CisJCQkJaXdsX3NldF9iaXQocHJpdiwgQ1NSX0dQX0NOVFJMLAorCQkJCQlDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfTUFDX0FDQ0VTU19SRVEpOworCQkJCWdvdG8gZXhpdF91bmxvY2s7CisJCQl9CisKKwkJCXEtPndyaXRlX2FjdHVhbCA9IChxLT53cml0ZSAmIH4weDcpOworCQkJaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIHJ4X3dydF9wdHJfcmVnLAorCQkJCQlxLT53cml0ZV9hY3R1YWwpOworCisJCS8qIEVsc2UgZGV2aWNlIGlzIGFzc3VtZWQgdG8gYmUgYXdha2UgKi8KKwkJfSBlbHNlIHsKKwkJCS8qIERldmljZSBleHBlY3RzIGEgbXVsdGlwbGUgb2YgOCAqLworCQkJcS0+d3JpdGVfYWN0dWFsID0gKHEtPndyaXRlICYgfjB4Nyk7CisJCQlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgcnhfd3J0X3B0cl9yZWcsCisJCQkJcS0+d3JpdGVfYWN0dWFsKTsKKwkJfQorCX0KIAlxLT5uZWVkX3VwZGF0ZSA9IDA7CiAKICBleGl0X3VubG9jazoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXNjYW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXNjYW4uYwppbmRleCA2N2RhMzEyLi4xMmQ5MzYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zY2FuLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc2Nhbi5jCkBAIC0yNTIsOCArMjUyLDcgQEAKIAogCUlXTF9ERUJVR19TQ0FOKHByaXYsICJTY2FuIG9uICVzR0h6IHRvb2sgJWRtc1xuIiwKIAkJICAgICAgIChwcml2LT5zY2FuX2JhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikgPyAiMi40IiA6ICI1LjIiLAotCQkgICAgICAgamlmZmllc190b19tc2VjcyhlbGFwc2VkX2ppZmZpZXMKLQkJCQkJKHByaXYtPnNjYW5fc3RhcnQsIGppZmZpZXMpKSk7CisJCSAgICAgICBqaWZmaWVzX3RvX21zZWNzKGppZmZpZXMgLSBwcml2LT5zY2FuX3N0YXJ0KSk7CiAKIAlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnNjYW5fY29tcGxldGVkKTsKIApAQCAtNjAzLDEzICs2MDIsMTYgQEAKIAlpZiAoIWl3bF9pc19yZWFkeV9yZihwcml2KSkKIAkJZ290byBvdXQ7CiAKLQkvKiBTaW5jZSBzZXR0aW5nIHRoZSBUWFBPV0VSIG1heSBoYXZlIGJlZW4gZGVmZXJyZWQgd2hpbGUKLQkgKiBwZXJmb3JtaW5nIHRoZSBzY2FuLCBmaXJlIG9uZSBvZmYgKi8KLQlpd2xfc2V0X3R4X3Bvd2VyKHByaXYsIHByaXYtPnR4X3Bvd2VyX3VzZXJfbG10LCB0cnVlKTsKKwkvKgorCSAqIFdlIGRvIG5vdCBjb21taXQgcG93ZXIgc2V0dGluZ3Mgd2hpbGUgc2NhbiBpcyBwZW5kaW5nLAorCSAqIGRvIGl0IG5vdyBpZiB0aGUgc2V0dGluZ3MgY2hhbmdlZC4KKwkgKi8KKwlpd2xfcG93ZXJfc2V0X21vZGUocHJpdiwgJnByaXYtPnBvd2VyX2RhdGEuc2xlZXBfY21kX25leHQsIGZhbHNlKTsKKwlpd2xfc2V0X3R4X3Bvd2VyKHByaXYsIHByaXYtPnR4X3Bvd2VyX25leHQsIGZhbHNlKTsKIAogCXByaXYtPmNmZy0+b3BzLT51dGlscy0+cG9zdF9zY2FuKHByaXYpOwogCi0gb3V0Ogorb3V0OgogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zdGEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXN0YS5jCmluZGV4IDdjN2Y3ZGMuLjQ3NzYzMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXN0YS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXN0YS5jCkBAIC00MDAsNyArNDAwLDggQEAKIH0KIAogc3RhdGljIGludCBpd2xfc2VuZF9yZW1vdmVfc3RhdGlvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJICAgY29uc3QgdTggKmFkZHIsIGludCBzdGFfaWQpCisJCQkJICAgY29uc3QgdTggKmFkZHIsIGludCBzdGFfaWQsCisJCQkJICAgYm9vbCB0ZW1wb3JhcnkpCiB7CiAJc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdDsKIAlpbnQgcmV0OwpAQCAtNDM2LDkgKzQzNywxMSBAQAogCWlmICghcmV0KSB7CiAJCXN3aXRjaCAocGt0LT51LnJlbV9zdGEuc3RhdHVzKSB7CiAJCWNhc2UgUkVNX1NUQV9TVUNDRVNTX01TSzoKLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3Nfc3Bpbik7Ci0JCQlpd2xfc3RhX3Vjb2RlX2RlYWN0aXZhdGUocHJpdiwgc3RhX2lkKTsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnN0YV9sb2NrLCBmbGFnc19zcGluKTsKKwkJCWlmICghdGVtcG9yYXJ5KSB7CisJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnN0YV9sb2NrLCBmbGFnc19zcGluKTsKKwkJCQlpd2xfc3RhX3Vjb2RlX2RlYWN0aXZhdGUocHJpdiwgc3RhX2lkKTsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3Nfc3Bpbik7CisJCQl9CiAJCQlJV0xfREVCVUdfQVNTT0MocHJpdiwgIlJFUExZX1JFTU9WRV9TVEEgUEFTU0VEXG4iKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgpAQCAtNTA1LDcgKzUwOCw3IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOwogCi0JcmV0dXJuIGl3bF9zZW5kX3JlbW92ZV9zdGF0aW9uKHByaXYsIGFkZHIsIHN0YV9pZCk7CisJcmV0dXJuIGl3bF9zZW5kX3JlbW92ZV9zdGF0aW9uKHByaXYsIGFkZHIsIHN0YV9pZCwgZmFsc2UpOwogb3V0X2VycjoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOwogCXJldHVybiAtRUlOVkFMOwpAQCAtNjI0LDYgKzYyNyw0OSBAQAogfQogRVhQT1JUX1NZTUJPTChpd2xfcmVzdG9yZV9zdGF0aW9ucyk7CiAKK3ZvaWQgaXdsX3JlcHJvZ3JhbV9hcF9zdGEoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX3J4b25fY29udGV4dCAqY3R4KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHN0YV9pZCA9IGN0eC0+YXBfc3RhX2lkOworCWludCByZXQ7CisJc3RydWN0IGl3bF9hZGRzdGFfY21kIHN0YV9jbWQ7CisJc3RydWN0IGl3bF9saW5rX3F1YWxpdHlfY21kIGxxOworCWJvb2wgYWN0aXZlOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnN0YV9sb2NrLCBmbGFncyk7CisJaWYgKCEocHJpdi0+c3RhdGlvbnNbc3RhX2lkXS51c2VkICYgSVdMX1NUQV9EUklWRVJfQUNUSVZFKSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOworCQlyZXR1cm47CisJfQorCisJbWVtY3B5KCZzdGFfY21kLCAmcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEsIHNpemVvZihzdGFfY21kKSk7CisJc3RhX2NtZC5tb2RlID0gMDsKKwltZW1jcHkoJmxxLCBwcml2LT5zdGF0aW9uc1tzdGFfaWRdLmxxLCBzaXplb2YobHEpKTsKKworCWFjdGl2ZSA9IHByaXYtPnN0YXRpb25zW3N0YV9pZF0udXNlZCAmIElXTF9TVEFfVUNPREVfQUNUSVZFOworCXByaXYtPnN0YXRpb25zW3N0YV9pZF0udXNlZCAmPSB+SVdMX1NUQV9EUklWRVJfQUNUSVZFOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnN0YV9sb2NrLCBmbGFncyk7CisKKwlpZiAoYWN0aXZlKSB7CisJCXJldCA9IGl3bF9zZW5kX3JlbW92ZV9zdGF0aW9uKAorCQkJcHJpdiwgcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEuc3RhLmFkZHIsCisJCQlzdGFfaWQsIHRydWUpOworCQlpZiAocmV0KQorCQkJSVdMX0VSUihwcml2LCAiZmFpbGVkIHRvIHJlbW92ZSBTVEEgJXBNICglZClcbiIsCisJCQkJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEuc3RhLmFkZHIsIHJldCk7CisJfQorCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOworCXByaXYtPnN0YXRpb25zW3N0YV9pZF0udXNlZCB8PSBJV0xfU1RBX0RSSVZFUl9BQ1RJVkU7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKKworCXJldCA9IGl3bF9zZW5kX2FkZF9zdGEocHJpdiwgJnN0YV9jbWQsIENNRF9TWU5DKTsKKwlpZiAocmV0KQorCQlJV0xfRVJSKHByaXYsICJmYWlsZWQgdG8gcmUtYWRkIFNUQSAlcE0gKCVkKVxuIiwKKwkJCXByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLnN0YS5hZGRyLCByZXQpOworCWl3bF9zZW5kX2xxX2NtZChwcml2LCBjdHgsICZscSwgQ01EX1NZTkMsIHRydWUpOworfQorRVhQT1JUX1NZTUJPTChpd2xfcmVwcm9ncmFtX2FwX3N0YSk7CisKIGludCBpd2xfZ2V0X2ZyZWVfdWNvZGVfa2V5X2luZGV4KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlpbnQgaTsKQEAgLTczNiw2ICs3ODIsMTQgQEAKIAlpZiAoV0FSTl9PTihscS0+c3RhX2lkID09IElXTF9JTlZBTElEX1NUQVRJT04pKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnN0YV9sb2NrLCBmbGFnc19zcGluKTsKKwlpZiAoIShwcml2LT5zdGF0aW9uc1tscS0+c3RhX2lkXS51c2VkICYgSVdMX1NUQV9EUklWRVJfQUNUSVZFKSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3Nfc3Bpbik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3Nfc3Bpbik7CisKIAlpd2xfZHVtcF9scV9jbWQocHJpdiwgbHEpOwogCUJVR19PTihpbml0ICYmIChjbWQuZmxhZ3MgJiBDTURfQVNZTkMpKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc3RhLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zdGEuaAppbmRleCAwNjQ3NTg3Li4yMDZmMWUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zdGEuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zdGEuaApAQCAtNjMsNiArNjMsNyBAQAogCiBpbnQgaXdsX3NlbmRfbHFfY21kKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF9yeG9uX2NvbnRleHQgKmN0eCwKIAkJICAgIHN0cnVjdCBpd2xfbGlua19xdWFsaXR5X2NtZCAqbHEsIHU4IGZsYWdzLCBib29sIGluaXQpOwordm9pZCBpd2xfcmVwcm9ncmFtX2FwX3N0YShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfcnhvbl9jb250ZXh0ICpjdHgpOwogCiAvKioKICAqIGl3bF9jbGVhcl9kcml2ZXJfc3RhdGlvbnMgLSBjbGVhciBrbm93bGVkZ2Ugb2YgYWxsIHN0YXRpb25zIGZyb20gZHJpdmVyCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC10eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtdHguYwppbmRleCA3MjYxZWU0Li4wNzNiNmNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC10eC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXR4LmMKQEAgLTQ5LDMwICs0OSwzOSBAQAogCWlmICh0eHEtPm5lZWRfdXBkYXRlID09IDApCiAJCXJldHVybjsKIAotCS8qIGlmIHdlJ3JlIHRyeWluZyB0byBzYXZlIHBvd2VyICovCi0JaWYgKHRlc3RfYml0KFNUQVRVU19QT1dFUl9QTUksICZwcml2LT5zdGF0dXMpKSB7Ci0JCS8qIHdha2UgdXAgbmljIGlmIGl0J3MgcG93ZXJlZCBkb3duIC4uLgotCQkgKiB1Q29kZSB3aWxsIHdha2UgdXAsIGFuZCBpbnRlcnJ1cHQgdXMgYWdhaW4sIHNvIG5leHQKLQkJICogdGltZSB3ZSdsbCBza2lwIHRoaXMgcGFydC4gKi8KLQkJcmVnID0gaXdsX3JlYWQzMihwcml2LCBDU1JfVUNPREVfRFJWX0dQMSk7Ci0KLQkJaWYgKHJlZyAmIENTUl9VQ09ERV9EUlZfR1AxX0JJVF9NQUNfU0xFRVApIHsKLQkJCUlXTF9ERUJVR19JTkZPKHByaXYsICJUeCBxdWV1ZSAlZCByZXF1ZXN0aW5nIHdha2V1cCwgR1AxID0gMHgleFxuIiwKLQkJCQkgICAgICB0eHFfaWQsIHJlZyk7Ci0JCQlpd2xfc2V0X2JpdChwcml2LCBDU1JfR1BfQ05UUkwsCi0JCQkJICAgIENTUl9HUF9DTlRSTF9SRUdfRkxBR19NQUNfQUNDRVNTX1JFUSk7Ci0JCQlyZXR1cm47Ci0JCX0KLQotCQlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX1dSUFRSLAotCQkJCSAgICAgdHhxLT5xLndyaXRlX3B0ciB8ICh0eHFfaWQgPDwgOCkpOwotCi0JLyogZWxzZSBub3QgaW4gcG93ZXItc2F2ZSBtb2RlLCB1Q29kZSB3aWxsIG5ldmVyIHNsZWVwIHdoZW4gd2UncmUKLQkgKiB0cnlpbmcgdG8gdHggKGR1cmluZyBSRktJTEwsIHdlJ3JlIG5vdCB0cnlpbmcgdG8gdHgpLiAqLwotCX0gZWxzZQorCWlmIChwcml2LT5jZmctPmJhc2VfcGFyYW1zLT5zaGFkb3dfcmVnX2VuYWJsZSkgeworCQkvKiBzaGFkb3cgcmVnaXN0ZXIgZW5hYmxlZCAqLwogCQlpd2xfd3JpdGUzMihwcml2LCBIQlVTX1RBUkdfV1JQVFIsCiAJCQkgICAgdHhxLT5xLndyaXRlX3B0ciB8ICh0eHFfaWQgPDwgOCkpOworCX0gZWxzZSB7CisJCS8qIGlmIHdlJ3JlIHRyeWluZyB0byBzYXZlIHBvd2VyICovCisJCWlmICh0ZXN0X2JpdChTVEFUVVNfUE9XRVJfUE1JLCAmcHJpdi0+c3RhdHVzKSkgeworCQkJLyogd2FrZSB1cCBuaWMgaWYgaXQncyBwb3dlcmVkIGRvd24gLi4uCisJCQkgKiB1Q29kZSB3aWxsIHdha2UgdXAsIGFuZCBpbnRlcnJ1cHQgdXMgYWdhaW4sIHNvIG5leHQKKwkJCSAqIHRpbWUgd2UnbGwgc2tpcCB0aGlzIHBhcnQuICovCisJCQlyZWcgPSBpd2xfcmVhZDMyKHByaXYsIENTUl9VQ09ERV9EUlZfR1AxKTsKIAorCQkJaWYgKHJlZyAmIENTUl9VQ09ERV9EUlZfR1AxX0JJVF9NQUNfU0xFRVApIHsKKwkJCQlJV0xfREVCVUdfSU5GTyhwcml2LAorCQkJCQkiVHggcXVldWUgJWQgcmVxdWVzdGluZyB3YWtldXAsIgorCQkJCQkiIEdQMSA9IDB4JXhcbiIsIHR4cV9pZCwgcmVnKTsKKwkJCQlpd2xfc2V0X2JpdChwcml2LCBDU1JfR1BfQ05UUkwsCisJCQkJCUNTUl9HUF9DTlRSTF9SRUdfRkxBR19NQUNfQUNDRVNTX1JFUSk7CisJCQkJcmV0dXJuOworCQkJfQorCisJCQlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX1dSUFRSLAorCQkJCSAgICAgdHhxLT5xLndyaXRlX3B0ciB8ICh0eHFfaWQgPDwgOCkpOworCisJCS8qCisJCSAqIGVsc2Ugbm90IGluIHBvd2VyLXNhdmUgbW9kZSwKKwkJICogdUNvZGUgd2lsbCBuZXZlciBzbGVlcCB3aGVuIHdlJ3JlCisJCSAqIHRyeWluZyB0byB0eCAoZHVyaW5nIFJGS0lMTCwgd2UncmUgbm90IHRyeWluZyB0byB0eCkuCisJCSAqLworCQl9IGVsc2UKKwkJCWl3bF93cml0ZTMyKHByaXYsIEhCVVNfVEFSR19XUlBUUiwKKwkJCQkgICAgdHhxLT5xLndyaXRlX3B0ciB8ICh0eHFfaWQgPDwgOCkpOworCX0KIAl0eHEtPm5lZWRfdXBkYXRlID0gMDsKIH0KIEVYUE9SVF9TWU1CT0woaXdsX3R4cV91cGRhdGVfd3JpdGVfcHRyKTsKQEAgLTI1NCw4ICsyNjMsNiBAQAogCQlxLT5oaWdoX21hcmsgPSAyOwogCiAJcS0+d3JpdGVfcHRyID0gcS0+cmVhZF9wdHIgPSAwOwotCXEtPmxhc3RfcmVhZF9wdHIgPSAwOwotCXEtPnJlcGVhdF9zYW1lX3JlYWRfcHRyID0gMDsKIAogCXJldHVybiAwOwogfQpAQCAtMzUwLDEzICszNTcsMTIgQEAKIAl0eHEtPm5lZWRfdXBkYXRlID0gMDsKIAogCS8qCi0JICogQWdncmVnYXRpb24gVFggcXVldWVzIHdpbGwgZ2V0IHRoZWlyIElEIHdoZW4gYWdncmVnYXRpb24gYmVnaW5zOwotCSAqIHRoZXkgb3ZlcndyaXRlIHRoZSBzZXR0aW5nIGRvbmUgaGVyZS4gVGhlIGNvbW1hbmQgRklGTyBkb2Vzbid0Ci0JICogbmVlZCBhbiBzd3FfaWQgc28gZG9uJ3Qgc2V0IG9uZSB0byBjYXRjaCBlcnJvcnMsIGFsbCBvdGhlcnMgY2FuCi0JICogYmUgc2V0IHVwIHRvIHRoZSBpZGVudGl0eSBtYXBwaW5nLgorCSAqIEZvciB0aGUgZGVmYXVsdCBxdWV1ZXMgMC0zLCBzZXQgdXAgdGhlIHN3cV9pZAorCSAqIGFscmVhZHkgLS0gYWxsIG90aGVycyBuZWVkIHRvIGdldCBvbmUgbGF0ZXIKKwkgKiAoaWYgdGhleSBuZWVkIG9uZSBhdCBhbGwpLgogCSAqLwotCWlmICh0eHFfaWQgIT0gcHJpdi0+Y21kX3F1ZXVlKQotCQl0eHEtPnN3cV9pZCA9IHR4cV9pZDsKKwlpZiAodHhxX2lkIDwgNCkKKwkJaXdsX3NldF9zd3FfaWQodHhxLCB0eHFfaWQsIHR4cV9pZCk7CiAKIAkvKiBURkRfUVVFVUVfU0laRV9NQVggbXVzdCBiZSBwb3dlci1vZi10d28gc2l6ZSwgb3RoZXJ3aXNlCiAJICogaXdsX3F1ZXVlX2luY193cmFwIGFuZCBpd2xfcXVldWVfZGVjX3dyYXAgYXJlIGJyb2tlbi4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsMzk0NS1iYXNlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bDM5NDUtYmFzZS5jCmluZGV4IDdlZGY4YzIuLjM3MWFiYmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsMzk0NS1iYXNlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wzOTQ1LWJhc2UuYwpAQCAtNjEsNiArNjEsNyBAQAogI2luY2x1ZGUgIml3bC1oZWxwZXJzLmgiCiAjaW5jbHVkZSAiaXdsLWRldi5oIgogI2luY2x1ZGUgIml3bC1zcGVjdHJ1bS5oIgorI2luY2x1ZGUgIml3bC1sZWdhY3kuaCIKIAogLyoKICAqIG1vZHVsZSBuYW1lLCBjb3B5cmlnaHQsIHZlcnNpb24sIGV0Yy4KQEAgLTQ3NCw3ICs0NzUsNyBAQAogCWRtYV9hZGRyX3QgcGh5c19hZGRyOwogCWRtYV9hZGRyX3QgdHhjbWRfcGh5czsKIAlpbnQgdHhxX2lkID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7Ci0JdTE2IGxlbiwgaWR4LCBsZW5fb3JnLCBoZHJfbGVuOyAvKiBUT0RPOiBsZW5fb3JnIGlzIG5vdCB1c2VkICovCisJdTE2IGxlbiwgaWR4LCBoZHJfbGVuOwogCXU4IGlkOwogCXU4IHVuaWNhc3Q7CiAJdTggc3RhX2lkOwpAQCAtNjExLDE1ICs2MTIsOCBAQAogCSAqLwogCWxlbiA9IHNpemVvZihzdHJ1Y3QgaXdsMzk0NV90eF9jbWQpICsKIAkJCXNpemVvZihzdHJ1Y3QgaXdsX2NtZF9oZWFkZXIpICsgaGRyX2xlbjsKLQotCWxlbl9vcmcgPSBsZW47CiAJbGVuID0gKGxlbiArIDMpICYgfjM7CiAKLQlpZiAobGVuX29yZyAhPSBsZW4pCi0JCWxlbl9vcmcgPSAxOwotCWVsc2UKLQkJbGVuX29yZyA9IDA7Ci0KIAkvKiBQaHlzaWNhbCBhZGRyZXNzIG9mIHRoaXMgVHggY29tbWFuZCdzIGhlYWRlciAobm90IE1BQyBoZWFkZXIhKSwKIAkgKiB3aXRoaW4gY29tbWFuZCBidWZmZXIgYXJyYXkuICovCiAJdHhjbWRfcGh5cyA9IHBjaV9tYXBfc2luZ2xlKHByaXYtPnBjaV9kZXYsICZvdXRfY21kLT5oZHIsCkBAIC02NjEsNyArNjU1LDcgQEAKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAkJfQogCi0JCWl3bF9zdG9wX3F1ZXVlKHByaXYsIHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpKTsKKwkJaXdsX3N0b3BfcXVldWUocHJpdiwgdHhxKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTI1MTUsMTMgKzI1MDksOCBAQAogCS8qIEFmdGVyIHRoZSBBTElWRSByZXNwb25zZSwgd2UgY2FuIHNlbmQgY29tbWFuZHMgdG8gMzk0NSB1Q29kZSAqLwogCXNldF9iaXQoU1RBVFVTX0FMSVZFLCAmcHJpdi0+c3RhdHVzKTsKIAotCWlmIChwcml2LT5jZmctPm9wcy0+bGliLT5yZWNvdmVyX2Zyb21fdHhfc3RhbGwpIHsKLQkJLyogRW5hYmxlIHRpbWVyIHRvIG1vbml0b3IgdGhlIGRyaXZlciBxdWV1ZXMgKi8KLQkJbW9kX3RpbWVyKCZwcml2LT5tb25pdG9yX3JlY292ZXIsCi0JCQlqaWZmaWVzICsKLQkJCW1zZWNzX3RvX2ppZmZpZXMoCi0JCQkgIHByaXYtPmNmZy0+YmFzZV9wYXJhbXMtPm1vbml0b3JfcmVjb3Zlcl9wZXJpb2QpKTsKLQl9CisJLyogRW5hYmxlIHdhdGNoZG9nIHRvIG1vbml0b3IgdGhlIGRyaXZlciB0eCBxdWV1ZXMgKi8KKwlpd2xfc2V0dXBfd2F0Y2hkb2cocHJpdik7CiAKIAlpZiAoaXdsX2lzX3Jma2lsbChwcml2KSkKIAkJcmV0dXJuOwpAQCAtMjU3OCw4ICsyNTY3LDcgQEAKIAogCS8qIFN0b3AgVFggcXVldWVzIHdhdGNoZG9nLiBXZSBuZWVkIHRvIGhhdmUgU1RBVFVTX0VYSVRfUEVORElORyBiaXQgc2V0CiAJICogdG8gcHJldmVudCByZWFybSB0aW1lciAqLwotCWlmIChwcml2LT5jZmctPm9wcy0+bGliLT5yZWNvdmVyX2Zyb21fdHhfc3RhbGwpCi0JCWRlbF90aW1lcl9zeW5jKCZwcml2LT5tb25pdG9yX3JlY292ZXIpOworCWRlbF90aW1lcl9zeW5jKCZwcml2LT53YXRjaGRvZyk7CiAKIAkvKiBTdGF0aW9uIGluZm9ybWF0aW9uIHdpbGwgbm93IGJlIGNsZWFyZWQgaW4gZGV2aWNlICovCiAJaXdsX2NsZWFyX3Vjb2RlX3N0YXRpb25zKHByaXYsIE5VTEwpOwpAQCAtMzA1NywyMiArMzA0NSwyMiBAQAogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogfQogCi12b2lkIGl3bDM5NDVfcG9zdF9hc3NvY2lhdGUoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQordm9pZCBpd2wzOTQ1X3Bvc3RfYXNzb2NpYXRlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlpbnQgcmMgPSAwOwogCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9IE5VTEw7CiAJc3RydWN0IGl3bF9yeG9uX2NvbnRleHQgKmN0eCA9ICZwcml2LT5jb250ZXh0c1tJV0xfUlhPTl9DVFhfQlNTXTsKIAotCWlmICghdmlmIHx8ICFwcml2LT5pc19vcGVuKQorCWlmICghY3R4LT52aWYgfHwgIXByaXYtPmlzX29wZW4pCiAJCXJldHVybjsKIAotCWlmICh2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApIHsKKwlpZiAoY3R4LT52aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApIHsKIAkJSVdMX0VSUihwcml2LCAiJXMgU2hvdWxkIG5vdCBiZSBjYWxsZWQgaW4gQVAgbW9kZVxuIiwgX19mdW5jX18pOwogCQlyZXR1cm47CiAJfQogCiAJSVdMX0RFQlVHX0FTU09DKHByaXYsICJBc3NvY2lhdGVkIGFzICVkIHRvOiAlcE1cbiIsCi0JCQl2aWYtPmJzc19jb25mLmFpZCwgY3R4LT5hY3RpdmUuYnNzaWRfYWRkcik7CisJCQljdHgtPnZpZi0+YnNzX2NvbmYuYWlkLCBjdHgtPmFjdGl2ZS5ic3NpZF9hZGRyKTsKIAogCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKIAkJcmV0dXJuOwpAQCAtMzA5MSwxOCArMzA3OSwxOCBAQAogCiAJY3R4LT5zdGFnaW5nLmZpbHRlcl9mbGFncyB8PSBSWE9OX0ZJTFRFUl9BU1NPQ19NU0s7CiAKLQljdHgtPnN0YWdpbmcuYXNzb2NfaWQgPSBjcHVfdG9fbGUxNih2aWYtPmJzc19jb25mLmFpZCk7CisJY3R4LT5zdGFnaW5nLmFzc29jX2lkID0gY3B1X3RvX2xlMTYoY3R4LT52aWYtPmJzc19jb25mLmFpZCk7CiAKIAlJV0xfREVCVUdfQVNTT0MocHJpdiwgImFzc29jIGlkICVkIGJlYWNvbiBpbnRlcnZhbCAlZFxuIiwKLQkJCXZpZi0+YnNzX2NvbmYuYWlkLCB2aWYtPmJzc19jb25mLmJlYWNvbl9pbnQpOworCQkJY3R4LT52aWYtPmJzc19jb25mLmFpZCwgY3R4LT52aWYtPmJzc19jb25mLmJlYWNvbl9pbnQpOwogCi0JaWYgKHZpZi0+YnNzX2NvbmYudXNlX3Nob3J0X3ByZWFtYmxlKQorCWlmIChjdHgtPnZpZi0+YnNzX2NvbmYudXNlX3Nob3J0X3ByZWFtYmxlKQogCQljdHgtPnN0YWdpbmcuZmxhZ3MgfD0gUlhPTl9GTEdfU0hPUlRfUFJFQU1CTEVfTVNLOwogCWVsc2UKIAkJY3R4LT5zdGFnaW5nLmZsYWdzICY9IH5SWE9OX0ZMR19TSE9SVF9QUkVBTUJMRV9NU0s7CiAKIAlpZiAoY3R4LT5zdGFnaW5nLmZsYWdzICYgUlhPTl9GTEdfQkFORF8yNEdfTVNLKSB7Ci0JCWlmICh2aWYtPmJzc19jb25mLnVzZV9zaG9ydF9zbG90KQorCQlpZiAoY3R4LT52aWYtPmJzc19jb25mLnVzZV9zaG9ydF9zbG90KQogCQkJY3R4LT5zdGFnaW5nLmZsYWdzIHw9IFJYT05fRkxHX1NIT1JUX1NMT1RfTVNLOwogCQllbHNlCiAJCQljdHgtPnN0YWdpbmcuZmxhZ3MgJj0gflJYT05fRkxHX1NIT1JUX1NMT1RfTVNLOwpAQCAtMzExMCw3ICszMDk4LDcgQEAKIAogCWl3bDM5NDVfY29tbWl0X3J4b24ocHJpdiwgY3R4KTsKIAotCXN3aXRjaCAodmlmLT50eXBlKSB7CisJc3dpdGNoIChjdHgtPnZpZi0+dHlwZSkgewogCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKIAkJaXdsMzk0NV9yYXRlX3NjYWxlX2luaXQocHJpdi0+aHcsIElXTF9BUF9JRCk7CiAJCWJyZWFrOwpAQCAtMzExOSw3ICszMTA3LDcgQEAKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJSVdMX0VSUihwcml2LCAiJXMgU2hvdWxkIG5vdCBiZSBjYWxsZWQgaW4gJWQgbW9kZVxuIiwKLQkJCV9fZnVuY19fLCB2aWYtPnR5cGUpOworCQkJX19mdW5jX18sIGN0eC0+dmlmLT50eXBlKTsKIAkJYnJlYWs7CiAJfQogfQpAQCAtMzIzNCw5ICszMjIyLDEwIEBACiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAotdm9pZCBpd2wzOTQ1X2NvbmZpZ19hcChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCit2b2lkIGl3bDM5NDVfY29uZmlnX2FwKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlzdHJ1Y3QgaXdsX3J4b25fY29udGV4dCAqY3R4ID0gJnByaXYtPmNvbnRleHRzW0lXTF9SWE9OX0NUWF9CU1NdOworCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYgPSBjdHgtPnZpZjsKIAlpbnQgcmMgPSAwOwogCiAJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQpAQCAtMzQwNyw5ICszMzk2LDkgQEAKIAljdHgtPnN0YWdpbmcuZmlsdGVyX2ZsYWdzIHw9IGZpbHRlcl9vcjsKIAogCS8qCi0JICogQ29tbWl0dGluZyBkaXJlY3RseSBoZXJlIGJyZWFrcyBmb3Igc29tZSByZWFzb24sCi0JICogYnV0IHdlJ2xsIGV2ZW50dWFsbHkgY29tbWl0IHRoZSBmaWx0ZXIgZmxhZ3MKLQkgKiBjaGFuZ2UgYW55d2F5LgorCSAqIE5vdCBjb21taXR0aW5nIGRpcmVjdGx5IGJlY2F1c2UgaGFyZHdhcmUgY2FuIHBlcmZvcm0gYSBzY2FuLAorCSAqIGJ1dCBldmVuIGlmIGh3IGlzIHJlYWR5LCBjb21taXR0aW5nIGhlcmUgYnJlYWtzIGZvciBzb21lIHJlYXNvbiwKKwkgKiB3ZSdsbCBldmVudHVhbGx5IGNvbW1pdCB0aGUgZmlsdGVyIGZsYWdzIGNoYW5nZSBhbnl3YXkuCiAJICovCiAKIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKQEAgLTM3ODAsMTIgKzM3NjksOSBAQAogCiAJaXdsMzk0NV9od19zZXR1cF9kZWZlcnJlZF93b3JrKHByaXYpOwogCi0JaWYgKHByaXYtPmNmZy0+b3BzLT5saWItPnJlY292ZXJfZnJvbV90eF9zdGFsbCkgewotCQlpbml0X3RpbWVyKCZwcml2LT5tb25pdG9yX3JlY292ZXIpOwotCQlwcml2LT5tb25pdG9yX3JlY292ZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKXByaXY7Ci0JCXByaXYtPm1vbml0b3JfcmVjb3Zlci5mdW5jdGlvbiA9Ci0JCQlwcml2LT5jZmctPm9wcy0+bGliLT5yZWNvdmVyX2Zyb21fdHhfc3RhbGw7Ci0JfQorCWluaXRfdGltZXIoJnByaXYtPndhdGNoZG9nKTsKKwlwcml2LT53YXRjaGRvZy5kYXRhID0gKHVuc2lnbmVkIGxvbmcpcHJpdjsKKwlwcml2LT53YXRjaGRvZy5mdW5jdGlvbiA9IGl3bF9iZ193YXRjaGRvZzsKIAogCXRhc2tsZXRfaW5pdCgmcHJpdi0+aXJxX3Rhc2tsZXQsICh2b2lkICgqKSh1bnNpZ25lZCBsb25nKSkKIAkJICAgICBpd2wzOTQ1X2lycV90YXNrbGV0LCAodW5zaWduZWQgbG9uZylwcml2KTsKQEAgLTM4MjQsMTggKzM4MTAsMTkgQEAKIAkuYXR0cnMgPSBpd2wzOTQ1X3N5c2ZzX2VudHJpZXMsCiB9OwogCi1zdGF0aWMgc3RydWN0IGllZWU4MDIxMV9vcHMgaXdsMzk0NV9od19vcHMgPSB7CitzdHJ1Y3QgaWVlZTgwMjExX29wcyBpd2wzOTQ1X2h3X29wcyA9IHsKIAkudHggPSBpd2wzOTQ1X21hY190eCwKIAkuc3RhcnQgPSBpd2wzOTQ1X21hY19zdGFydCwKIAkuc3RvcCA9IGl3bDM5NDVfbWFjX3N0b3AsCiAJLmFkZF9pbnRlcmZhY2UgPSBpd2xfbWFjX2FkZF9pbnRlcmZhY2UsCiAJLnJlbW92ZV9pbnRlcmZhY2UgPSBpd2xfbWFjX3JlbW92ZV9pbnRlcmZhY2UsCi0JLmNvbmZpZyA9IGl3bF9tYWNfY29uZmlnLAorCS5jaGFuZ2VfaW50ZXJmYWNlID0gaXdsX21hY19jaGFuZ2VfaW50ZXJmYWNlLAorCS5jb25maWcgPSBpd2xfbGVnYWN5X21hY19jb25maWcsCiAJLmNvbmZpZ3VyZV9maWx0ZXIgPSBpd2wzOTQ1X2NvbmZpZ3VyZV9maWx0ZXIsCiAJLnNldF9rZXkgPSBpd2wzOTQ1X21hY19zZXRfa2V5LAogCS5jb25mX3R4ID0gaXdsX21hY19jb25mX3R4LAotCS5yZXNldF90c2YgPSBpd2xfbWFjX3Jlc2V0X3RzZiwKLQkuYnNzX2luZm9fY2hhbmdlZCA9IGl3bF9ic3NfaW5mb19jaGFuZ2VkLAorCS5yZXNldF90c2YgPSBpd2xfbGVnYWN5X21hY19yZXNldF90c2YsCisJLmJzc19pbmZvX2NoYW5nZWQgPSBpd2xfbGVnYWN5X21hY19ic3NfaW5mb19jaGFuZ2VkLAogCS5od19zY2FuID0gaXdsX21hY19od19zY2FuLAogCS5zdGFfYWRkID0gaXdsMzk0NV9tYWNfc3RhX2FkZCwKIAkuc3RhX3JlbW92ZSA9IGl3bF9tYWNfc3RhX3JlbW92ZSwKQEAgLTM4NjUsNyArMzg1MiwxNSBAQAogCXByaXYtPml3X21vZGUgPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOwogCXByaXYtPm1pc3NlZF9iZWFjb25fdGhyZXNob2xkID0gSVdMX01JU1NFRF9CRUFDT05fVEhSRVNIT0xEX0RFRjsKIAorCS8qIGluaXRpYWxpemUgZm9yY2UgcmVzZXQgKi8KKwlwcml2LT5mb3JjZV9yZXNldFtJV0xfUkZfUkVTRVRdLnJlc2V0X2R1cmF0aW9uID0KKwkJSVdMX0RFTEFZX05FWFRfRk9SQ0VfUkZfUkVTRVQ7CisJcHJpdi0+Zm9yY2VfcmVzZXRbSVdMX0ZXX1JFU0VUXS5yZXNldF9kdXJhdGlvbiA9CisJCUlXTF9ERUxBWV9ORVhUX0ZPUkNFX0ZXX1JFTE9BRDsKKworCiAJcHJpdi0+dHhfcG93ZXJfdXNlcl9sbXQgPSBJV0xfREVGQVVMVF9UWF9QT1dFUjsKKwlwcml2LT50eF9wb3dlcl9uZXh0ID0gSVdMX0RFRkFVTFRfVFhfUE9XRVI7CiAKIAlpZiAoZWVwcm9tLT52ZXJzaW9uIDwgRUVQUk9NXzM5NDVfRUVQUk9NX1ZFUlNJT04pIHsKIAkJSVdMX1dBUk4ocHJpdiwgIlVuc3VwcG9ydGVkIEVFUFJPTSB2ZXJzaW9uOiAweCUwNFhcbiIsCkBAIC0zOTY1LDcgKzM5NjAsNyBAQAogCiAJLyogbWFjODAyMTEgYWxsb2NhdGVzIG1lbW9yeSBmb3IgdGhpcyBkZXZpY2UgaW5zdGFuY2UsIGluY2x1ZGluZwogCSAqICAgc3BhY2UgZm9yIHRoaXMgZHJpdmVyJ3MgcHJpdmF0ZSBzdHJ1Y3R1cmUgKi8KLQlodyA9IGl3bF9hbGxvY19hbGwoY2ZnLCAmaXdsMzk0NV9od19vcHMpOworCWh3ID0gaXdsX2FsbG9jX2FsbChjZmcpOwogCWlmIChodyA9PSBOVUxMKSB7CiAJCXByX2VycigiQ2FuIG5vdCBhbGxvY2F0ZSBuZXR3b3JrIGRldmljZVxuIik7CiAJCWVyciA9IC1FTk9NRU07CkBAIC00MTE3LDcgKzQxMTIsNyBAQAogCiAJcGNpX2VuYWJsZV9tc2kocHJpdi0+cGNpX2Rldik7CiAKLQllcnIgPSByZXF1ZXN0X2lycShwcml2LT5wY2lfZGV2LT5pcnEsIHByaXYtPmNmZy0+b3BzLT5saWItPmlzciwKKwllcnIgPSByZXF1ZXN0X2lycShwcml2LT5wY2lfZGV2LT5pcnEsIHByaXYtPmNmZy0+b3BzLT5saWItPmlzcl9vcHMuaXNyLAogCQkJICBJUlFGX1NIQVJFRCwgRFJWX05BTUUsIHByaXYpOwogCWlmIChlcnIpIHsKIAkJSVdMX0VSUihwcml2LCAiRXJyb3IgYWxsb2NhdGluZyBJUlEgJWRcbiIsIHByaXYtPnBjaV9kZXYtPmlycSk7CkBAIC00Mjc1LDEwICs0MjcwLDcgQEAKIAkuaWRfdGFibGUgPSBpd2wzOTQ1X2h3X2NhcmRfaWRzLAogCS5wcm9iZSA9IGl3bDM5NDVfcGNpX3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChpd2wzOTQ1X3BjaV9yZW1vdmUpLAotI2lmZGVmIENPTkZJR19QTQotCS5zdXNwZW5kID0gaXdsX3BjaV9zdXNwZW5kLAotCS5yZXN1bWUgPSBpd2xfcGNpX3Jlc3VtZSwKLSNlbmRpZgorCS5kcml2ZXIucG0gPSBJV0xfUE1fT1BTLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgaXdsMzk0NV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvY2ZnODAyMTEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9jZmc4MDIxMS5jCmluZGV4IGM2YzBlZmYuLjVhNDk4MjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9jZmc4MDIxMS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9jZmc4MDIxMS5jCkBAIC0yMjUsNyArMjI1LDggQEAKIAogc3RhdGljIGludCBpd21fY2ZnODAyMTFfc2V0X2RlZmF1bHRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksCiAJCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAotCQkJCQl1OCBrZXlfaW5kZXgpCisJCQkJCXU4IGtleV9pbmRleCwgYm9vbCB1bmljYXN0LAorCQkJCQlib29sIG11bHRpY2FzdCkKIHsKIAlzdHJ1Y3QgaXdtX3ByaXYgKml3bSA9IG5kZXZfdG9faXdtKG5kZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvY29tbWFuZHMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9jb21tYW5kcy5jCmluZGV4IDMzMGM3ZDkuLjUwZGVlNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9jb21tYW5kcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9jb21tYW5kcy5jCkBAIC05MDgsNyArOTA4LDcgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlpd20tPnNjYW5faWQgPSBpd20tPnNjYW5faWQrKyAlIElXTV9TQ0FOX0lEX01BWDsKKwlpd20tPnNjYW5faWQgPSAoaXdtLT5zY2FuX2lkICsgMSkgJSBJV01fU0NBTl9JRF9NQVg7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NmZy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvY2ZnLmMKaW5kZXggMTEzZjRmMi4uNjk4YTFmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvY2ZnLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvY2ZnLmMKQEAgLTksOCArOSw2IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUgPGxpbnV4L2llZWU4MDIxMS5oPgogI2luY2x1ZGUgPG5ldC9jZmc4MDIxMS5oPgogI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KQEAgLTE0MjQsNyArMTQyMiw4IEBACiAKIHN0YXRpYyBpbnQgbGJzX2NmZ19zZXRfZGVmYXVsdF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwKIAkJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAotCQkJCSAgIHU4IGtleV9pbmRleCkKKwkJCQkgICB1OCBrZXlfaW5kZXgsIGJvb2wgdW5pY2FzdCwKKwkJCQkgICBib29sIG11bHRpY2FzdCkKIHsKIAlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSB3aXBoeV9wcml2KHdpcGh5KTsKIApAQCAtMjA2Miw3ICsyMDYxLDcgQEAKIAl9OwogCiAJLyogU2VjdGlvbiA1LjE3LjIgKi8KLQlzdGF0aWMgc3RydWN0IHJlZ2lvbl9jb2RlX21hcHBpbmcgcmVnbWFwW10gPSB7CisJc3RhdGljIGNvbnN0IHN0cnVjdCByZWdpb25fY29kZV9tYXBwaW5nIHJlZ21hcFtdID0gewogCQl7IlVTICIsIDB4MTB9LCAvKiBVUyBGQ0MgKi8KIAkJeyJDQSAiLCAweDIwfSwgLyogQ2FuYWRhICovCiAJCXsiRVUgIiwgMHgzMH0sIC8qIEVUU0kgICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvY21kLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWQuYwppbmRleCA3MDc0NTkyLi43OGM0ZGExIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWQuYwpAQCAtMTc3LDYgKzE3NywxNCBAQAogCXN0cnVjdCBjbWRfZHNfaG9zdF9zbGVlcCBjbWRfY29uZmlnOwogCWludCByZXQ7CiAKKwkvKgorCSAqIENlcnRhaW4gZmlybXdhcmUgdmVyc2lvbnMgZG8gbm90IHN1cHBvcnQgRUhTX1JFTU9WRV9XQUtFVVAgY29tbWFuZAorCSAqIGFuZCB0aGUgY2FyZCB3aWxsIHJldHVybiBhIGZhaWx1cmUuICBTaW5jZSB3ZSBuZWVkIHRvIGJlCisJICogYWJsZSB0byByZXNldCB0aGUgbWFzaywgaW4gdGhvc2UgY2FzZXMgd2Ugc2V0IGEgMCBtYXNrIGluc3RlYWQuCisJICovCisJaWYgKGNyaXRlcmlhID09IEVIU19SRU1PVkVfV0FLRVVQICYmICFwcml2LT5laHNfcmVtb3ZlX3N1cHBvcnRlZCkKKwkJY3JpdGVyaWEgPSAwOworCiAJY21kX2NvbmZpZy5oZHIuc2l6ZSA9IGNwdV90b19sZTE2KHNpemVvZihjbWRfY29uZmlnKSk7CiAJY21kX2NvbmZpZy5jcml0ZXJpYSA9IGNwdV90b19sZTMyKGNyaXRlcmlhKTsKIAljbWRfY29uZmlnLmdwaW8gPSBwcml2LT53b2xfZ3BpbzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2Rldi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZGV2LmgKaW5kZXggY2IxNGMzOC4uMThkZDlhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZGV2LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZGV2LmgKQEAgLTEzOCw2ICsxMzgsNyBAQAogCXVpbnQzMl90IHdvbF9jcml0ZXJpYTsKIAl1aW50OF90IHdvbF9ncGlvOwogCXVpbnQ4X3Qgd29sX2dhcDsKKwlib29sIGVoc19yZW1vdmVfc3VwcG9ydGVkOwogCiAJLyogVHJhbnNtaXR0aW5nICovCiAJaW50IHR4X3BlbmRpbmdfbGVuOwkJLyogLTEgd2hpbGUgYnVpbGRpbmcgcGFja2V0ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9zcGkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NwaS5jCmluZGV4IGVjZDRkMDQuLjAwNjAwMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NwaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NwaS5jCkBAIC03ODQsNyArNzg0LDcgQEAKIAkJCQl1cCgmY2FyZC0+c3BpX3RocmVhZF90ZXJtaW5hdGVkKTsKIAkJCQlkb19leGl0KDApOwogCQkJfQotCQl9IHdoaWxlIChlcnIgPT0gRUlOVFIpOworCQl9IHdoaWxlIChlcnIgPT0gLUVJTlRSKTsKIAogCQkvKiBSZWFkIHRoZSBob3N0IGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgdG8gc2VlIHdoYXQgd2UKIAkJICogY2FuIGRvLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfdXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl91c2IuYwppbmRleCBlZmFmODUwLi42NTI0YzcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl91c2IuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl91c2IuYwpAQCAtMzQ1LDYgKzM0NSwxMyBAQAogCWlmIChkZXZpY2VfY3JlYXRlX2ZpbGUoJnByaXYtPmRldi0+ZGV2LCAmZGV2X2F0dHJfbGJzX2ZsYXNoX2Jvb3QyKSkKIAkJbGJzX3ByX2VycigiY2Fubm90IHJlZ2lzdGVyIGxic19mbGFzaF9ib290MiBhdHRyaWJ1dGVcbiIpOwogCisJLyoKKwkgKiBFSFNfUkVNT1ZFX1dBS0VVUCBpcyBub3Qgc3VwcG9ydGVkIG9uIGFsbCB2ZXJzaW9ucyBvZiB0aGUgZmlybXdhcmUuCisJICovCisJcHJpdi0+d29sX2NyaXRlcmlhID0gRUhTX1JFTU9WRV9XQUtFVVA7CisJaWYgKGxic19ob3N0X3NsZWVwX2NmZyhwcml2LCBwcml2LT53b2xfY3JpdGVyaWEsIE5VTEwpKQorCQlwcml2LT5laHNfcmVtb3ZlX3N1cHBvcnRlZCA9IGZhbHNlOworCiAJcmV0dXJuIDA7CiAKIGVycl9zdGFydF9jYXJkOgpAQCAtMTA5MCwxMiArMTA5Nyw2IEBACiAJaWYgKHByaXYtPnBzc3RhdGUgIT0gUFNfU1RBVEVfRlVMTF9QT1dFUikKIAkJcmV0dXJuIC0xOwogCi0JaWYgKHByaXYtPndvbF9jcml0ZXJpYSA9PSBFSFNfUkVNT1ZFX1dBS0VVUCkgewotCQlsYnNfcHJfaW5mbygiU3VzcGVuZCBhdHRlbXB0IHdpdGhvdXQgIgotCQkJCQkJImNvbmZpZ3VyaW5nIHdha2UgcGFyYW1zIVxuIik7Ci0JCXJldHVybiAtRU5PU1lTOwotCX0KLQogCXJldCA9IGxic19zdXNwZW5kKHByaXYpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvbWFpbi5jCmluZGV4IGZjZDFiYmYuLjY4MzZhNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9tYWluLmMKQEAgLTg1MSw5ICs4NTEsMTAgQEAKIAlwcml2LT53b3JrX3RocmVhZCA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJsYnNfd29ya2VyIik7CiAJSU5JVF9XT1JLKCZwcml2LT5tY2FzdF93b3JrLCBsYnNfc2V0X21jYXN0X3dvcmtlcik7CiAKLQlwcml2LT53b2xfY3JpdGVyaWEgPSAweGZmZmZmZmZmOworCXByaXYtPndvbF9jcml0ZXJpYSA9IEVIU19SRU1PVkVfV0FLRVVQOwogCXByaXYtPndvbF9ncGlvID0gMHhmZjsKIAlwcml2LT53b2xfZ2FwID0gMjA7CisJcHJpdi0+ZWhzX3JlbW92ZV9zdXBwb3J0ZWQgPSB0cnVlOwogCiAJZ290byBkb25lOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvcnguYwppbmRleCBhNGQwYmNhLi5hMmIxZGYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9yeC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3J4LmMKQEAgLTU1LDcgKzU1LDkgQEAKIAlzdHJ1Y3QgcnhwZCAqcF9yeF9wZDsKIAlpbnQgaGRyY2hvcDsKIAlzdHJ1Y3QgZXRoaGRyICpwX2V0aGhkcjsKLQljb25zdCB1OCByZmMxMDQyX2V0aF9oZHJbXSA9IHsgMHhhYSwgMHhhYSwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCB9OworCXN0YXRpYyBjb25zdCB1OCByZmMxMDQyX2V0aF9oZHJbXSA9IHsKKwkJMHhhYSwgMHhhYSwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMAorCX07CiAKIAlsYnNfZGViX2VudGVyKExCU19ERUJfUlgpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYWM4MDIxMV9od3NpbS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFjODAyMTFfaHdzaW0uYwppbmRleCA3ZWFhYTNiLi40NTRmMDQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYWM4MDIxMV9od3NpbS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hYzgwMjExX2h3c2ltLmMKQEAgLTMwOSw2ICszMDksOCBAQAogCSAqLwogCXU2NCBncm91cDsKIAlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2dyb3VwOworCisJaW50IHBvd2VyX2xldmVsOwogfTsKIAogCkBAIC00OTcsNyArNDk5LDcgQEAKIAlyeF9zdGF0dXMuYmFuZCA9IGRhdGEtPmNoYW5uZWwtPmJhbmQ7CiAJcnhfc3RhdHVzLnJhdGVfaWR4ID0gaW5mby0+Y29udHJvbC5yYXRlc1swXS5pZHg7CiAJLyogVE9ETzogc2ltdWxhdGUgcmVhbCBzaWduYWwgc3RyZW5ndGggKGFuZCBvcHRpb25hbCBwYWNrZXQgbG9zcykgKi8KLQlyeF9zdGF0dXMuc2lnbmFsID0gLTUwOworCXJ4X3N0YXR1cy5zaWduYWwgPSBkYXRhLT5wb3dlcl9sZXZlbCAtIDUwOwogCiAJaWYgKGRhdGEtPnBzICE9IFBTX0RJU0FCTEVEKQogCQloZHItPmZyYW1lX2NvbnRyb2wgfD0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfUE0pOwpAQCAtNjk4LDYgKzcwMCw3IEBACiAJZGF0YS0+aWRsZSA9ICEhKGNvbmYtPmZsYWdzICYgSUVFRTgwMjExX0NPTkZfSURMRSk7CiAKIAlkYXRhLT5jaGFubmVsID0gY29uZi0+Y2hhbm5lbDsKKwlkYXRhLT5wb3dlcl9sZXZlbCA9IGNvbmYtPnBvd2VyX2xldmVsOwogCWlmICghZGF0YS0+c3RhcnRlZCB8fCAhZGF0YS0+YmVhY29uX2ludCkKIAkJZGVsX3RpbWVyKCZkYXRhLT5iZWFjb25fdGltZXIpOwogCWVsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213bDhrLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2w4ay5jCmluZGV4IGYxNTJhMjUuLjllY2Y4NDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213bDhrLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdsOGsuYwpAQCAtMjksNiArMjksMTIgQEAKICNkZWZpbmUgTVdMOEtfTkFNRQlLQlVJTERfTU9ETkFNRQogI2RlZmluZSBNV0w4S19WRVJTSU9OCSIwLjEyIgogCisvKiBNb2R1bGUgcGFyYW1ldGVycyAqLworc3RhdGljIHVuc2lnbmVkIGFwX21vZGVfZGVmYXVsdDsKK21vZHVsZV9wYXJhbShhcF9tb2RlX2RlZmF1bHQsIGJvb2wsIDApOworTU9EVUxFX1BBUk1fREVTQyhhcF9tb2RlX2RlZmF1bHQsCisJCSAiU2V0IHRvIDEgdG8gbWFrZSBhcCBtb2RlIHRoZSBkZWZhdWx0IGluc3RlYWQgb2Ygc3RhIG1vZGUiKTsKKwogLyogUmVnaXN0ZXIgZGVmaW5pdGlvbnMgKi8KICNkZWZpbmUgTVdMOEtfSElVX0dFTl9QVFIJCQkweDAwMDAwYzEwCiAjZGVmaW5lICBNV0w4S19NT0RFX1NUQQkJCQkgMHgwMDAwMDA1YQpAQCAtOTIsOCArOTgsMTAgQEAKIHN0cnVjdCBtd2w4a19kZXZpY2VfaW5mbyB7CiAJY2hhciAqcGFydF9uYW1lOwogCWNoYXIgKmhlbHBlcl9pbWFnZTsKLQljaGFyICpmd19pbWFnZTsKKwljaGFyICpmd19pbWFnZV9zdGE7CisJY2hhciAqZndfaW1hZ2VfYXA7CiAJc3RydWN0IHJ4ZF9vcHMgKmFwX3J4ZF9vcHM7CisJdTMyIGZ3X2FwaV9hcDsKIH07CiAKIHN0cnVjdCBtd2w4a19yeF9xdWV1ZSB7CkBAIC0xMzYsOCArMTQ0LDggQEAKIAl2b2lkIF9faW9tZW0gKnJlZ3M7CiAKIAkvKiBmaXJtd2FyZSAqLwotCXN0cnVjdCBmaXJtd2FyZSAqZndfaGVscGVyOwotCXN0cnVjdCBmaXJtd2FyZSAqZndfdWNvZGU7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmd19oZWxwZXI7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmd191Y29kZTsKIAogCS8qIGhhcmR3YXJlL2Zpcm13YXJlIHBhcmFtZXRlcnMgKi8KIAlib29sIGFwX2Z3OwpAQCAtMjEwLDYgKzIxOCwxOCBAQAogCiAJLyogTW9zdCByZWNlbnRseSByZXBvcnRlZCBub2lzZSBpbiBkQm0gKi8KIAlzOCBub2lzZTsKKworCS8qCisJICogcHJlc2VydmUgdGhlIHF1ZXVlIGNvbmZpZ3VyYXRpb25zIHNvIHRoZXkgY2FuIGJlIHJlc3RvcmVkIGlmL3doZW4KKwkgKiB0aGUgZmlybXdhcmUgaW1hZ2UgaXMgc3dhcHBlZC4KKwkgKi8KKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3BhcmFtcyB3bW1fcGFyYW1zW01XTDhLX1RYX1FVRVVFU107CisKKwkvKiBhc3luYyBmaXJtd2FyZSBsb2FkaW5nIHN0YXRlICovCisJdW5zaWduZWQgZndfc3RhdGU7CisJY2hhciAqZndfcHJlZjsKKwljaGFyICpmd19hbHQ7CisJc3RydWN0IGNvbXBsZXRpb24gZmlybXdhcmVfbG9hZGluZ19jb21wbGV0ZTsKIH07CiAKIC8qIFBlciBpbnRlcmZhY2Ugc3BlY2lmaWMgcHJpdmF0ZSBkYXRhICovCkBAIC0yODUsOCArMzA1LDkgQEAKIH07CiAKIC8qIFNldCBvciBnZXQgaW5mbyBmcm9tIEZpcm13YXJlICovCi0jZGVmaW5lIE1XTDhLX0NNRF9TRVQJCQkweDAwMDEKICNkZWZpbmUgTVdMOEtfQ01EX0dFVAkJCTB4MDAwMAorI2RlZmluZSBNV0w4S19DTURfU0VUCQkJMHgwMDAxCisjZGVmaW5lIE1XTDhLX0NNRF9TRVRfTElTVAkJMHgwMDAyCiAKIC8qIEZpcm13YXJlIGNvbW1hbmQgY29kZXMgKi8KICNkZWZpbmUgTVdMOEtfQ01EX0NPREVfRE5MRAkJMHgwMDAxCkBAIC0yOTYsNiArMzE3LDcgQEAKICNkZWZpbmUgTVdMOEtfQ01EX0dFVF9TVEFUCQkweDAwMTQKICNkZWZpbmUgTVdMOEtfQ01EX1JBRElPX0NPTlRST0wJCTB4MDAxYwogI2RlZmluZSBNV0w4S19DTURfUkZfVFhfUE9XRVIJCTB4MDAxZQorI2RlZmluZSBNV0w4S19DTURfVFhfUE9XRVIJCTB4MDAxZgogI2RlZmluZSBNV0w4S19DTURfUkZfQU5URU5OQQkJMHgwMDIwCiAjZGVmaW5lIE1XTDhLX0NNRF9TRVRfQkVBQ09OCQkweDAxMDAJCS8qIHBlci12aWYgKi8KICNkZWZpbmUgTVdMOEtfQ01EX1NFVF9QUkVfU0NBTgkJMHgwMTA3CkBAIC0zMzMsNiArMzU1LDcgQEAKIAkJTVdMOEtfQ01ETkFNRShHRVRfU1RBVCk7CiAJCU1XTDhLX0NNRE5BTUUoUkFESU9fQ09OVFJPTCk7CiAJCU1XTDhLX0NNRE5BTUUoUkZfVFhfUE9XRVIpOworCQlNV0w4S19DTUROQU1FKFRYX1BPV0VSKTsKIAkJTVdMOEtfQ01ETkFNRShSRl9BTlRFTk5BKTsKIAkJTVdMOEtfQ01ETkFNRShTRVRfQkVBQ09OKTsKIAkJTVdMOEtfQ01ETkFNRShTRVRfUFJFX1NDQU4pOwpAQCAtMzcyLDcgKzM5NSw3IEBACiB9CiAKIC8qIFJlbGVhc2UgZncgaW1hZ2UgKi8KLXN0YXRpYyB2b2lkIG13bDhrX3JlbGVhc2VfZncoc3RydWN0IGZpcm13YXJlICoqZncpCitzdGF0aWMgdm9pZCBtd2w4a19yZWxlYXNlX2Z3KGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqKmZ3KQogewogCWlmICgqZncgPT0gTlVMTCkKIAkJcmV0dXJuOwpAQCAtMzg2LDM3ICs0MDksNjggQEAKIAltd2w4a19yZWxlYXNlX2Z3KCZwcml2LT5md19oZWxwZXIpOwogfQogCisvKiBzdGF0ZXMgZm9yIGFzeW5jaHJvbm91cyBmL3cgbG9hZGluZyAqLworc3RhdGljIHZvaWQgbXdsOGtfZndfc3RhdGVfbWFjaGluZShjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LCB2b2lkICpjb250ZXh0KTsKK2VudW0geworCUZXX1NUQVRFX0lOSVQgPSAwLAorCUZXX1NUQVRFX0xPQURJTkdfUFJFRiwKKwlGV19TVEFURV9MT0FESU5HX0FMVCwKKwlGV19TVEFURV9FUlJPUiwKK307CisKIC8qIFJlcXVlc3QgZncgaW1hZ2UgKi8KIHN0YXRpYyBpbnQgbXdsOGtfcmVxdWVzdF9mdyhzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiwKLQkJCSAgICBjb25zdCBjaGFyICpmbmFtZSwgc3RydWN0IGZpcm13YXJlICoqZncpCisJCQkgICAgY29uc3QgY2hhciAqZm5hbWUsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqKmZ3LAorCQkJICAgIGJvb2wgbm93YWl0KQogewogCS8qIHJlbGVhc2UgY3VycmVudCBpbWFnZSAqLwogCWlmICgqZncgIT0gTlVMTCkKIAkJbXdsOGtfcmVsZWFzZV9mdyhmdyk7CiAKLQlyZXR1cm4gcmVxdWVzdF9maXJtd2FyZSgoY29uc3Qgc3RydWN0IGZpcm13YXJlICoqKWZ3LAotCQkJCWZuYW1lLCAmcHJpdi0+cGRldi0+ZGV2KTsKKwlpZiAobm93YWl0KQorCQlyZXR1cm4gcmVxdWVzdF9maXJtd2FyZV9ub3dhaXQoVEhJU19NT0RVTEUsIDEsIGZuYW1lLAorCQkJCQkgICAgICAgJnByaXYtPnBkZXYtPmRldiwgR0ZQX0tFUk5FTCwKKwkJCQkJICAgICAgIHByaXYsIG13bDhrX2Z3X3N0YXRlX21hY2hpbmUpOworCWVsc2UKKwkJcmV0dXJuIHJlcXVlc3RfZmlybXdhcmUoZncsIGZuYW1lLCAmcHJpdi0+cGRldi0+ZGV2KTsKIH0KIAotc3RhdGljIGludCBtd2w4a19yZXF1ZXN0X2Zpcm13YXJlKHN0cnVjdCBtd2w4a19wcml2ICpwcml2KQorc3RhdGljIGludCBtd2w4a19yZXF1ZXN0X2Zpcm13YXJlKHN0cnVjdCBtd2w4a19wcml2ICpwcml2LCBjaGFyICpmd19pbWFnZSwKKwkJCQkgIGJvb2wgbm93YWl0KQogewogCXN0cnVjdCBtd2w4a19kZXZpY2VfaW5mbyAqZGkgPSBwcml2LT5kZXZpY2VfaW5mbzsKIAlpbnQgcmM7CiAKIAlpZiAoZGktPmhlbHBlcl9pbWFnZSAhPSBOVUxMKSB7Ci0JCXJjID0gbXdsOGtfcmVxdWVzdF9mdyhwcml2LCBkaS0+aGVscGVyX2ltYWdlLCAmcHJpdi0+ZndfaGVscGVyKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciByZXF1ZXN0aW5nIGhlbHBlciAiCi0JCQkgICAgICAgImZpcm13YXJlIGZpbGUgJXNcbiIsIHBjaV9uYW1lKHByaXYtPnBkZXYpLAotCQkJICAgICAgIGRpLT5oZWxwZXJfaW1hZ2UpOworCQlpZiAobm93YWl0KQorCQkJcmMgPSBtd2w4a19yZXF1ZXN0X2Z3KHByaXYsIGRpLT5oZWxwZXJfaW1hZ2UsCisJCQkJCSAgICAgICZwcml2LT5md19oZWxwZXIsIHRydWUpOworCQllbHNlCisJCQlyYyA9IG13bDhrX3JlcXVlc3RfZncocHJpdiwgZGktPmhlbHBlcl9pbWFnZSwKKwkJCQkJICAgICAgJnByaXYtPmZ3X2hlbHBlciwgZmFsc2UpOworCQlpZiAocmMpCisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciByZXF1ZXN0aW5nIGhlbHBlciBmdyAlc1xuIiwKKwkJCSAgICAgICBwY2lfbmFtZShwcml2LT5wZGV2KSwgZGktPmhlbHBlcl9pbWFnZSk7CisKKwkJaWYgKHJjIHx8IG5vd2FpdCkKIAkJCXJldHVybiByYzsKLQkJfQogCX0KIAotCXJjID0gbXdsOGtfcmVxdWVzdF9mdyhwcml2LCBkaS0+ZndfaW1hZ2UsICZwcml2LT5md191Y29kZSk7CisJaWYgKG5vd2FpdCkgeworCQkvKgorCQkgKiBpZiB3ZSBnZXQgaGVyZSwgbm8gaGVscGVyIGltYWdlIGlzIG5lZWRlZC4gIFNraXAgdGhlCisJCSAqIEZXX1NUQVRFX0lOSVQgc3RhdGUuCisJCSAqLworCQlwcml2LT5md19zdGF0ZSA9IEZXX1NUQVRFX0xPQURJTkdfUFJFRjsKKwkJcmMgPSBtd2w4a19yZXF1ZXN0X2Z3KHByaXYsIGZ3X2ltYWdlLAorCQkJCSAgICAgICZwcml2LT5md191Y29kZSwKKwkJCQkgICAgICB0cnVlKTsKKwl9IGVsc2UKKwkJcmMgPSBtd2w4a19yZXF1ZXN0X2Z3KHByaXYsIGZ3X2ltYWdlLAorCQkJCSAgICAgICZwcml2LT5md191Y29kZSwgZmFsc2UpOwogCWlmIChyYykgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciByZXF1ZXN0aW5nIGZpcm13YXJlIGZpbGUgJXNcbiIsCi0JCSAgICAgICBwY2lfbmFtZShwcml2LT5wZGV2KSwgZGktPmZ3X2ltYWdlKTsKKwkJICAgICAgIHBjaV9uYW1lKHByaXYtPnBkZXYpLCBmd19pbWFnZSk7CiAJCW13bDhrX3JlbGVhc2VfZncoJnByaXYtPmZ3X2hlbHBlcik7CiAJCXJldHVybiByYzsKIAl9CkBAIC01NzcsMTIgKzYzMSwxMiBAQAogc3RhdGljIGludCBtd2w4a19sb2FkX2Zpcm13YXJlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewogCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7Ci0Jc3RydWN0IGZpcm13YXJlICpmdyA9IHByaXYtPmZ3X3Vjb2RlOworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncgPSBwcml2LT5md191Y29kZTsKIAlpbnQgcmM7CiAJaW50IGxvb3BzOwogCiAJaWYgKCFtZW1jbXAoZnctPmRhdGEsICJceDAxXHgwMFx4MDBceDAwIiwgNCkpIHsKLQkJc3RydWN0IGZpcm13YXJlICpoZWxwZXIgPSBwcml2LT5md19oZWxwZXI7CisJCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqaGVscGVyID0gcHJpdi0+ZndfaGVscGVyOwogCiAJCWlmIChoZWxwZXIgPT0gTlVMTCkgewogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogaGVscGVyIGltYWdlIG5lZWRlZCBidXQgbm9uZSAiCkBAIC0xODExLDYgKzE4NjUsNyBAQAogCV9fbGUzMiB3Y2JiYXNlMTsKIAlfX2xlMzIgd2NiYmFzZTI7CiAJX19sZTMyIHdjYmJhc2UzOworCV9fbGUzMiBmd19hcGlfdmVyc2lvbjsKIH0gX19wYWNrZWQ7CiAKIHN0YXRpYyBpbnQgbXdsOGtfY21kX2dldF9od19zcGVjX2FwKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQpAQCAtMTgxOCw2ICsxODczLDcgQEAKIAlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwogCXN0cnVjdCBtd2w4a19jbWRfZ2V0X2h3X3NwZWNfYXAgKmNtZDsKIAlpbnQgcmM7CisJdTMyIGFwaV92ZXJzaW9uOwogCiAJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOwogCWlmIChjbWQgPT0gTlVMTCkKQEAgLTE4MzQsNiArMTg5MCwxNiBAQAogCWlmICghcmMpIHsKIAkJaW50IG9mZjsKIAorCQlhcGlfdmVyc2lvbiA9IGxlMzJfdG9fY3B1KGNtZC0+ZndfYXBpX3ZlcnNpb24pOworCQlpZiAocHJpdi0+ZGV2aWNlX2luZm8tPmZ3X2FwaV9hcCAhPSBhcGlfdmVyc2lvbikgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogVW5zdXBwb3J0ZWQgZncgQVBJIHZlcnNpb24gZm9yICVzLiIKKwkJCSAgICAgICAiICBFeHBlY3RlZCAlZCBnb3QgJWQuXG4iLCBNV0w4S19OQU1FLAorCQkJICAgICAgIHByaXYtPmRldmljZV9pbmZvLT5wYXJ0X25hbWUsCisJCQkgICAgICAgcHJpdi0+ZGV2aWNlX2luZm8tPmZ3X2FwaV9hcCwKKwkJCSAgICAgICBhcGlfdmVyc2lvbik7CisJCQlyYyA9IC1FSU5WQUw7CisJCQlnb3RvIGRvbmU7CisJCX0KIAkJU0VUX0lFRUU4MDIxMV9QRVJNX0FERFIoaHcsIGNtZC0+cGVybV9hZGRyKTsKIAkJcHJpdi0+bnVtX21jYWRkcnMgPSBsZTE2X3RvX2NwdShjbWQtPm51bV9tY2FkZHJzKTsKIAkJcHJpdi0+ZndfcmV2ID0gbGUzMl90b19jcHUoY21kLT5md19yZXYpOwpAQCAtMTg2MSw2ICsxOTI3LDcgQEAKIAkJaW93cml0ZTMyKHByaXYtPnR4cVszXS50eGRfZG1hLCBwcml2LT5zcmFtICsgb2ZmKTsKIAl9CiAKK2RvbmU6CiAJa2ZyZWUoY21kKTsKIAlyZXR1cm4gcmM7CiB9CkBAIC0yMDg0LDcgKzIxNTEsNyBAQAogLyoKICAqIENNRF9SRl9UWF9QT1dFUi4KICAqLwotI2RlZmluZSBNV0w4S19UWF9QT1dFUl9MRVZFTF9UT1RBTAk4CisjZGVmaW5lIE1XTDhLX1JGX1RYX1BPV0VSX0xFVkVMX1RPVEFMCTgKIAogc3RydWN0IG13bDhrX2NtZF9yZl90eF9wb3dlciB7CiAJc3RydWN0IG13bDhrX2NtZF9wa3QgaGVhZGVyOwpAQCAtMjA5Miw3ICsyMTU5LDcgQEAKIAlfX2xlMTYgc3VwcG9ydF9sZXZlbDsKIAlfX2xlMTYgY3VycmVudF9sZXZlbDsKIAlfX2xlMTYgcmVzZXJ2ZWQ7Ci0JX19sZTE2IHBvd2VyX2xldmVsX2xpc3RbTVdMOEtfVFhfUE9XRVJfTEVWRUxfVE9UQUxdOworCV9fbGUxNiBwb3dlcl9sZXZlbF9saXN0W01XTDhLX1JGX1RYX1BPV0VSX0xFVkVMX1RPVEFMXTsKIH0gX19wYWNrZWQ7CiAKIHN0YXRpYyBpbnQgbXdsOGtfY21kX3JmX3R4X3Bvd2VyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgZEJtKQpAQCAtMjExNiw2ICsyMTgzLDY1IEBACiB9CiAKIC8qCisgKiBDTURfVFhfUE9XRVIuCisgKi8KKyNkZWZpbmUgTVdMOEtfVFhfUE9XRVJfTEVWRUxfVE9UQUwgICAgICAxMgorCitzdHJ1Y3QgbXdsOGtfY21kX3R4X3Bvd2VyIHsKKwlzdHJ1Y3QgbXdsOGtfY21kX3BrdCBoZWFkZXI7CisJX19sZTE2IGFjdGlvbjsKKwlfX2xlMTYgYmFuZDsKKwlfX2xlMTYgY2hhbm5lbDsKKwlfX2xlMTYgYnc7CisJX19sZTE2IHN1Yl9jaDsKKwlfX2xlMTYgcG93ZXJfbGV2ZWxfbGlzdFtNV0w4S19UWF9QT1dFUl9MRVZFTF9UT1RBTF07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdGF0aWMgaW50IG13bDhrX2NtZF90eF9wb3dlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiwKKwkJCQkgICAgIHVuc2lnbmVkIHNob3J0IHB3cikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwgPSBjb25mLT5jaGFubmVsOworCXN0cnVjdCBtd2w4a19jbWRfdHhfcG93ZXIgKmNtZDsKKwlpbnQgcmM7CisJaW50IGk7CisKKwljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNtZCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNtZC0+aGVhZGVyLmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfVFhfUE9XRVIpOworCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisJY21kLT5hY3Rpb24gPSBjcHVfdG9fbGUxNihNV0w4S19DTURfU0VUX0xJU1QpOworCisJaWYgKGNoYW5uZWwtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikKKwkJY21kLT5iYW5kID0gY3B1X3RvX2xlMTYoMHgxKTsKKwllbHNlIGlmIChjaGFubmVsLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopCisJCWNtZC0+YmFuZCA9IGNwdV90b19sZTE2KDB4NCk7CisKKwljbWQtPmNoYW5uZWwgPSBjaGFubmVsLT5od192YWx1ZTsKKworCWlmIChjb25mLT5jaGFubmVsX3R5cGUgPT0gTkw4MDIxMV9DSEFOX05PX0hUIHx8CisJICAgIGNvbmYtPmNoYW5uZWxfdHlwZSA9PSBOTDgwMjExX0NIQU5fSFQyMCkgeworCQljbWQtPmJ3ID0gY3B1X3RvX2xlMTYoMHgyKTsKKwl9IGVsc2UgeworCQljbWQtPmJ3ID0gY3B1X3RvX2xlMTYoMHg0KTsKKwkJaWYgKGNvbmYtPmNoYW5uZWxfdHlwZSA9PSBOTDgwMjExX0NIQU5fSFQ0ME1JTlVTKQorCQkJY21kLT5zdWJfY2ggPSBjcHVfdG9fbGUxNigweDMpOworCQllbHNlIGlmIChjb25mLT5jaGFubmVsX3R5cGUgPT0gTkw4MDIxMV9DSEFOX0hUNDBQTFVTKQorCQkJY21kLT5zdWJfY2ggPSBjcHVfdG9fbGUxNigweDEpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBNV0w4S19UWF9QT1dFUl9MRVZFTF9UT1RBTDsgaSsrKQorCQljbWQtPnBvd2VyX2xldmVsX2xpc3RbaV0gPSBjcHVfdG9fbGUxNihwd3IpOworCisJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKKwlrZnJlZShjbWQpOworCisJcmV0dXJuIHJjOworfQorCisvKgogICogQ01EX1JGX0FOVEVOTkEuCiAgKi8KIHN0cnVjdCBtd2w4a19jbWRfcmZfYW50ZW5uYSB7CkBAIC0zMjgzLDEzICszNDA5LDE2IEBACiAJCW13bDhrX3R4cV9yZWNsYWltKGh3LCBpLCBJTlRfTUFYLCAxKTsKIH0KIAorc3RhdGljIGludCBtd2w4a19yZWxvYWRfZmlybXdhcmUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGNoYXIgKmZ3X2ltYWdlKTsKKwogc3RhdGljIGludCBtd2w4a19hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCiB7CiAJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKIAlzdHJ1Y3QgbXdsOGtfdmlmICptd2w4a192aWY7CiAJdTMyIG1hY2lkc19zdXBwb3J0ZWQ7Ci0JaW50IG1hY2lkOworCWludCBtYWNpZCwgcmM7CisJc3RydWN0IG13bDhrX2RldmljZV9pbmZvICpkaTsKIAogCS8qCiAJICogUmVqZWN0IGludGVyZmFjZSBjcmVhdGlvbiBpZiBzbmlmZmVyIG1vZGUgaXMgYWN0aXZlLCBhcwpAQCAtMzMwMiwxMiArMzQzMSwyOCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQorCWRpID0gcHJpdi0+ZGV2aWNlX2luZm87CiAJc3dpdGNoICh2aWYtPnR5cGUpIHsKIAljYXNlIE5MODAyMTFfSUZUWVBFX0FQOgorCQlpZiAoIXByaXYtPmFwX2Z3ICYmIGRpLT5md19pbWFnZV9hcCkgeworCQkJLyogd2UgbXVzdCBsb2FkIHRoZSBhcCBmdyB0byBtZWV0IHRoaXMgcmVxdWVzdCAqLworCQkJaWYgKCFsaXN0X2VtcHR5KCZwcml2LT52aWZfbGlzdCkpCisJCQkJcmV0dXJuIC1FQlVTWTsKKwkJCXJjID0gbXdsOGtfcmVsb2FkX2Zpcm13YXJlKGh3LCBkaS0+ZndfaW1hZ2VfYXApOworCQkJaWYgKHJjKQorCQkJCXJldHVybiByYzsKKwkJfQogCQltYWNpZHNfc3VwcG9ydGVkID0gcHJpdi0+YXBfbWFjaWRzX3N1cHBvcnRlZDsKIAkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgorCQlpZiAocHJpdi0+YXBfZncgJiYgZGktPmZ3X2ltYWdlX3N0YSkgeworCQkJLyogd2UgbXVzdCBsb2FkIHRoZSBzdGEgZncgdG8gbWVldCB0aGlzIHJlcXVlc3QgKi8KKwkJCWlmICghbGlzdF9lbXB0eSgmcHJpdi0+dmlmX2xpc3QpKQorCQkJCXJldHVybiAtRUJVU1k7CisJCQlyYyA9IG13bDhrX3JlbG9hZF9maXJtd2FyZShodywgZGktPmZ3X2ltYWdlX3N0YSk7CisJCQlpZiAocmMpCisJCQkJcmV0dXJuIHJjOworCQl9CiAJCW1hY2lkc19zdXBwb3J0ZWQgPSBwcml2LT5zdGFfbWFjaWRzX3N1cHBvcnRlZDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTMzNzcsMTUgKzM1MjIsMTkgQEAKIAogCWlmIChjb25mLT5wb3dlcl9sZXZlbCA+IDE4KQogCQljb25mLT5wb3dlcl9sZXZlbCA9IDE4OwotCXJjID0gbXdsOGtfY21kX3JmX3R4X3Bvd2VyKGh3LCBjb25mLT5wb3dlcl9sZXZlbCk7Ci0JaWYgKHJjKQotCQlnb3RvIG91dDsKIAogCWlmIChwcml2LT5hcF9mdykgeworCQlyYyA9IG13bDhrX2NtZF90eF9wb3dlcihodywgY29uZiwgY29uZi0+cG93ZXJfbGV2ZWwpOworCQlpZiAocmMpCisJCQlnb3RvIG91dDsKKwogCQlyYyA9IG13bDhrX2NtZF9yZl9hbnRlbm5hKGh3LCBNV0w4S19SRl9BTlRFTk5BX1JYLCAweDcpOwogCQlpZiAoIXJjKQogCQkJcmMgPSBtd2w4a19jbWRfcmZfYW50ZW5uYShodywgTVdMOEtfUkZfQU5URU5OQV9UWCwgMHg3KTsKIAl9IGVsc2UgeworCQlyYyA9IG13bDhrX2NtZF9yZl90eF9wb3dlcihodywgY29uZi0+cG93ZXJfbGV2ZWwpOworCQlpZiAocmMpCisJCQlnb3RvIG91dDsKIAkJcmMgPSBtd2w4a19jbWRfbWltb19jb25maWcoaHcsIDB4NywgMHg3KTsKIAl9CiAKQEAgLTM3MzksNiArMzg4OCw5IEBACiAKIAlyYyA9IG13bDhrX2Z3X2xvY2soaHcpOwogCWlmICghcmMpIHsKKwkJQlVHX09OKHF1ZXVlID4gTVdMOEtfVFhfUVVFVUVTIC0gMSk7CisJCW1lbWNweSgmcHJpdi0+d21tX3BhcmFtc1txdWV1ZV0sIHBhcmFtcywgc2l6ZW9mKCpwYXJhbXMpKTsKKwogCQlpZiAoIXByaXYtPndtbV9lbmFibGVkKQogCQkJcmMgPSBtd2w4a19jbWRfc2V0X3dtbV9tb2RlKGh3LCAxKTsKIApAQCAtMzgzOCwyMSArMzk5MCwyNyBAQAogCU1XTDgzNjYsCiB9OwogCisjZGVmaW5lIE1XTDhLXzgzNjZfQVBfRldfQVBJIDEKKyNkZWZpbmUgX01XTDhLXzgzNjZfQVBfRlcoYXBpKSAibXdsOGsvZm1pbWFnZV84MzY2X2FwLSIgI2FwaSAiLmZ3IgorI2RlZmluZSBNV0w4S184MzY2X0FQX0ZXKGFwaSkgX01XTDhLXzgzNjZfQVBfRlcoYXBpKQorCiBzdGF0aWMgc3RydWN0IG13bDhrX2RldmljZV9pbmZvIG13bDhrX2luZm9fdGJsW10gX19kZXZpbml0ZGF0YSA9IHsKIAlbTVdMODM2M10gPSB7CiAJCS5wYXJ0X25hbWUJPSAiODh3ODM2MyIsCiAJCS5oZWxwZXJfaW1hZ2UJPSAibXdsOGsvaGVscGVyXzgzNjMuZnciLAotCQkuZndfaW1hZ2UJPSAibXdsOGsvZm1pbWFnZV84MzYzLmZ3IiwKKwkJLmZ3X2ltYWdlX3N0YQk9ICJtd2w4ay9mbWltYWdlXzgzNjMuZnciLAogCX0sCiAJW01XTDg2ODddID0gewogCQkucGFydF9uYW1lCT0gIjg4dzg2ODciLAogCQkuaGVscGVyX2ltYWdlCT0gIm13bDhrL2hlbHBlcl84Njg3LmZ3IiwKLQkJLmZ3X2ltYWdlCT0gIm13bDhrL2ZtaW1hZ2VfODY4Ny5mdyIsCisJCS5md19pbWFnZV9zdGEJPSAibXdsOGsvZm1pbWFnZV84Njg3LmZ3IiwKIAl9LAogCVtNV0w4MzY2XSA9IHsKIAkJLnBhcnRfbmFtZQk9ICI4OHc4MzY2IiwKIAkJLmhlbHBlcl9pbWFnZQk9ICJtd2w4ay9oZWxwZXJfODM2Ni5mdyIsCi0JCS5md19pbWFnZQk9ICJtd2w4ay9mbWltYWdlXzgzNjYuZnciLAorCQkuZndfaW1hZ2Vfc3RhCT0gIm13bDhrL2ZtaW1hZ2VfODM2Ni5mdyIsCisJCS5md19pbWFnZV9hcAk9IE1XTDhLXzgzNjZfQVBfRlcoTVdMOEtfODM2Nl9BUF9GV19BUEkpLAorCQkuZndfYXBpX2FwCT0gTVdMOEtfODM2Nl9BUF9GV19BUEksCiAJCS5hcF9yeGRfb3BzCT0gJnJ4ZF84MzY2X2FwX29wcywKIAl9LAogfTsKQEAgLTM4NjMsNiArNDAyMSw3IEBACiBNT0RVTEVfRklSTVdBUkUoIm13bDhrL2ZtaW1hZ2VfODY4Ny5mdyIpOwogTU9EVUxFX0ZJUk1XQVJFKCJtd2w4ay9oZWxwZXJfODM2Ni5mdyIpOwogTU9EVUxFX0ZJUk1XQVJFKCJtd2w4ay9mbWltYWdlXzgzNjYuZnciKTsKK01PRFVMRV9GSVJNV0FSRShNV0w4S184MzY2X0FQX0ZXKE1XTDhLXzgzNjZfQVBfRldfQVBJKSk7CiAKIHN0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShtd2w4a19wY2lfaWRfdGFibGUpID0gewogCXsgUENJX1ZERVZJQ0UoTUFSVkVMTCwgMHgyYTBhKSwgLmRyaXZlcl9kYXRhID0gTVdMODM2MywgfSwKQEAgLTM4NzYsMTQgKzQwMzUsMzc1IEBACiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIG13bDhrX3BjaV9pZF90YWJsZSk7CiAKK3N0YXRpYyBpbnQgbXdsOGtfcmVxdWVzdF9hbHRfZncoc3RydWN0IG13bDhrX3ByaXYgKnByaXYpCit7CisJaW50IHJjOworCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yIHJlcXVlc3RpbmcgcHJlZmVycmVkIGZ3ICVzLlxuIgorCSAgICAgICAiVHJ5aW5nIGFsdGVybmF0aXZlIGZpcm13YXJlICVzXG4iLCBwY2lfbmFtZShwcml2LT5wZGV2KSwKKwkgICAgICAgcHJpdi0+ZndfcHJlZiwgcHJpdi0+ZndfYWx0KTsKKwlyYyA9IG13bDhrX3JlcXVlc3RfZncocHJpdiwgcHJpdi0+ZndfYWx0LCAmcHJpdi0+ZndfdWNvZGUsIHRydWUpOworCWlmIChyYykgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciByZXF1ZXN0aW5nIGFsdCBmdyAlc1xuIiwKKwkJICAgICAgIHBjaV9uYW1lKHByaXYtPnBkZXYpLCBwcml2LT5md19hbHQpOworCQlyZXR1cm4gcmM7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG13bDhrX2Zpcm13YXJlX2xvYWRfc3VjY2VzcyhzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdik7CitzdGF0aWMgdm9pZCBtd2w4a19md19zdGF0ZV9tYWNoaW5lKGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsIHZvaWQgKmNvbnRleHQpCit7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBjb250ZXh0OworCXN0cnVjdCBtd2w4a19kZXZpY2VfaW5mbyAqZGkgPSBwcml2LT5kZXZpY2VfaW5mbzsKKwlpbnQgcmM7CisKKwlzd2l0Y2ggKHByaXYtPmZ3X3N0YXRlKSB7CisJY2FzZSBGV19TVEFURV9JTklUOgorCQlpZiAoIWZ3KSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciByZXF1ZXN0aW5nIGhlbHBlciBmdyAlc1xuIiwKKwkJCSAgICAgICBwY2lfbmFtZShwcml2LT5wZGV2KSwgZGktPmhlbHBlcl9pbWFnZSk7CisJCQlnb3RvIGZhaWw7CisJCX0KKwkJcHJpdi0+ZndfaGVscGVyID0gZnc7CisJCXJjID0gbXdsOGtfcmVxdWVzdF9mdyhwcml2LCBwcml2LT5md19wcmVmLCAmcHJpdi0+ZndfdWNvZGUsCisJCQkJICAgICAgdHJ1ZSk7CisJCWlmIChyYyAmJiBwcml2LT5md19hbHQpIHsKKwkJCXJjID0gbXdsOGtfcmVxdWVzdF9hbHRfZncocHJpdik7CisJCQlpZiAocmMpCisJCQkJZ290byBmYWlsOworCQkJcHJpdi0+Zndfc3RhdGUgPSBGV19TVEFURV9MT0FESU5HX0FMVDsKKwkJfSBlbHNlIGlmIChyYykKKwkJCWdvdG8gZmFpbDsKKwkJZWxzZQorCQkJcHJpdi0+Zndfc3RhdGUgPSBGV19TVEFURV9MT0FESU5HX1BSRUY7CisJCWJyZWFrOworCisJY2FzZSBGV19TVEFURV9MT0FESU5HX1BSRUY6CisJCWlmICghZncpIHsKKwkJCWlmIChwcml2LT5md19hbHQpIHsKKwkJCQlyYyA9IG13bDhrX3JlcXVlc3RfYWx0X2Z3KHByaXYpOworCQkJCWlmIChyYykKKwkJCQkJZ290byBmYWlsOworCQkJCXByaXYtPmZ3X3N0YXRlID0gRldfU1RBVEVfTE9BRElOR19BTFQ7CisJCQl9IGVsc2UKKwkJCQlnb3RvIGZhaWw7CisJCX0gZWxzZSB7CisJCQlwcml2LT5md191Y29kZSA9IGZ3OworCQkJcmMgPSBtd2w4a19maXJtd2FyZV9sb2FkX3N1Y2Nlc3MocHJpdik7CisJCQlpZiAocmMpCisJCQkJZ290byBmYWlsOworCQkJZWxzZQorCQkJCWNvbXBsZXRlKCZwcml2LT5maXJtd2FyZV9sb2FkaW5nX2NvbXBsZXRlKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgRldfU1RBVEVfTE9BRElOR19BTFQ6CisJCWlmICghZncpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yIHJlcXVlc3RpbmcgYWx0IGZ3ICVzXG4iLAorCQkJICAgICAgIHBjaV9uYW1lKHByaXYtPnBkZXYpLCBkaS0+aGVscGVyX2ltYWdlKTsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCQlwcml2LT5md191Y29kZSA9IGZ3OworCQlyYyA9IG13bDhrX2Zpcm13YXJlX2xvYWRfc3VjY2Vzcyhwcml2KTsKKwkJaWYgKHJjKQorCQkJZ290byBmYWlsOworCQllbHNlCisJCQljb21wbGV0ZSgmcHJpdi0+ZmlybXdhcmVfbG9hZGluZ19jb21wbGV0ZSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogVW5leHBlY3RlZCBmaXJtd2FyZSBsb2FkaW5nIHN0YXRlOiAlZFxuIiwKKwkJICAgICAgIE1XTDhLX05BTUUsIHByaXYtPmZ3X3N0YXRlKTsKKwkJQlVHX09OKDEpOworCX0KKworCXJldHVybjsKKworZmFpbDoKKwlwcml2LT5md19zdGF0ZSA9IEZXX1NUQVRFX0VSUk9SOworCWNvbXBsZXRlKCZwcml2LT5maXJtd2FyZV9sb2FkaW5nX2NvbXBsZXRlKTsKKwlkZXZpY2VfcmVsZWFzZV9kcml2ZXIoJnByaXYtPnBkZXYtPmRldik7CisJbXdsOGtfcmVsZWFzZV9maXJtd2FyZShwcml2KTsKK30KKworc3RhdGljIGludCBtd2w4a19pbml0X2Zpcm13YXJlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBjaGFyICpmd19pbWFnZSwKKwkJCSAgICAgICBib29sIG5vd2FpdCkKK3sKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCWludCByYzsKKworCS8qIFJlc2V0IGZpcm13YXJlIGFuZCBoYXJkd2FyZSAqLworCW13bDhrX2h3X3Jlc2V0KHByaXYpOworCisJLyogQXNrIHVzZXJsYW5kIGhvdHBsdWcgZGFlbW9uIGZvciB0aGUgZGV2aWNlIGZpcm13YXJlICovCisJcmMgPSBtd2w4a19yZXF1ZXN0X2Zpcm13YXJlKHByaXYsIGZ3X2ltYWdlLCBub3dhaXQpOworCWlmIChyYykgeworCQl3aXBoeV9lcnIoaHctPndpcGh5LCAiRmlybXdhcmUgZmlsZXMgbm90IGZvdW5kXG4iKTsKKwkJcmV0dXJuIHJjOworCX0KKworCWlmIChub3dhaXQpCisJCXJldHVybiByYzsKKworCS8qIExvYWQgZmlybXdhcmUgaW50byBoYXJkd2FyZSAqLworCXJjID0gbXdsOGtfbG9hZF9maXJtd2FyZShodyk7CisJaWYgKHJjKQorCQl3aXBoeV9lcnIoaHctPndpcGh5LCAiQ2Fubm90IHN0YXJ0IGZpcm13YXJlXG4iKTsKKworCS8qIFJlY2xhaW0gbWVtb3J5IG9uY2UgZmlybXdhcmUgaXMgc3VjY2Vzc2Z1bGx5IGxvYWRlZCAqLworCW13bDhrX3JlbGVhc2VfZmlybXdhcmUocHJpdik7CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qIGluaXRpYWxpemUgaHcgYWZ0ZXIgc3VjY2Vzc2Z1bGx5IGxvYWRpbmcgYSBmaXJtd2FyZSBpbWFnZSAqLworc3RhdGljIGludCBtd2w4a19wcm9iZV9odyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCWludCByYyA9IDA7CisJaW50IGk7CisKKwlpZiAocHJpdi0+YXBfZncpIHsKKwkJcHJpdi0+cnhkX29wcyA9IHByaXYtPmRldmljZV9pbmZvLT5hcF9yeGRfb3BzOworCQlpZiAocHJpdi0+cnhkX29wcyA9PSBOVUxMKSB7CisJCQl3aXBoeV9lcnIoaHctPndpcGh5LAorCQkJCSAgIkRyaXZlciBkb2VzIG5vdCBoYXZlIEFQIGZpcm13YXJlIGltYWdlIHN1cHBvcnQgZm9yIHRoaXMgaGFyZHdhcmVcbiIpOworCQkJZ290byBlcnJfc3RvcF9maXJtd2FyZTsKKwkJfQorCX0gZWxzZSB7CisJCXByaXYtPnJ4ZF9vcHMgPSAmcnhkX3N0YV9vcHM7CisJfQorCisJcHJpdi0+c25pZmZlcl9lbmFibGVkID0gZmFsc2U7CisJcHJpdi0+d21tX2VuYWJsZWQgPSBmYWxzZTsKKwlwcml2LT5wZW5kaW5nX3R4X3BrdHMgPSAwOworCisJcmMgPSBtd2w4a19yeHFfaW5pdChodywgMCk7CisJaWYgKHJjKQorCQlnb3RvIGVycl9zdG9wX2Zpcm13YXJlOworCXJ4cV9yZWZpbGwoaHcsIDAsIElOVF9NQVgpOworCisJZm9yIChpID0gMDsgaSA8IE1XTDhLX1RYX1FVRVVFUzsgaSsrKSB7CisJCXJjID0gbXdsOGtfdHhxX2luaXQoaHcsIGkpOworCQlpZiAocmMpCisJCQlnb3RvIGVycl9mcmVlX3F1ZXVlczsKKwl9CisKKwlpb3dyaXRlMzIoMCwgcHJpdi0+cmVncyArIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX1NUQVRVUyk7CisJaW93cml0ZTMyKDAsIHByaXYtPnJlZ3MgKyBNV0w4S19ISVVfQTJIX0lOVEVSUlVQVF9NQVNLKTsKKwlpb3dyaXRlMzIoTVdMOEtfQTJIX0lOVF9UWF9ET05FIHwgTVdMOEtfQTJIX0lOVF9SWF9SRUFEWSwKKwkJICBwcml2LT5yZWdzICsgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfQ0xFQVJfU0VMKTsKKwlpb3dyaXRlMzIoMHhmZmZmZmZmZiwgcHJpdi0+cmVncyArIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX1NUQVRVU19NQVNLKTsKKworCXJjID0gcmVxdWVzdF9pcnEocHJpdi0+cGRldi0+aXJxLCBtd2w4a19pbnRlcnJ1cHQsCisJCQkgSVJRRl9TSEFSRUQsIE1XTDhLX05BTUUsIGh3KTsKKwlpZiAocmMpIHsKKwkJd2lwaHlfZXJyKGh3LT53aXBoeSwgImZhaWxlZCB0byByZWdpc3RlciBJUlEgaGFuZGxlclxuIik7CisJCWdvdG8gZXJyX2ZyZWVfcXVldWVzOworCX0KKworCS8qCisJICogVGVtcG9yYXJpbHkgZW5hYmxlIGludGVycnVwdHMuICBJbml0aWFsIGZpcm13YXJlIGhvc3QKKwkgKiBjb21tYW5kcyB1c2UgaW50ZXJydXB0cyBhbmQgYXZvaWQgcG9sbGluZy4gIERpc2FibGUKKwkgKiBpbnRlcnJ1cHRzIHdoZW4gZG9uZS4KKwkgKi8KKwlpb3dyaXRlMzIoTVdMOEtfQTJIX0VWRU5UUywgcHJpdi0+cmVncyArIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX01BU0spOworCisJLyogR2V0IGNvbmZpZyBkYXRhLCBtYWMgYWRkcnMgZXRjICovCisJaWYgKHByaXYtPmFwX2Z3KSB7CisJCXJjID0gbXdsOGtfY21kX2dldF9od19zcGVjX2FwKGh3KTsKKwkJaWYgKCFyYykKKwkJCXJjID0gbXdsOGtfY21kX3NldF9od19zcGVjKGh3KTsKKwl9IGVsc2UgeworCQlyYyA9IG13bDhrX2NtZF9nZXRfaHdfc3BlY19zdGEoaHcpOworCX0KKwlpZiAocmMpIHsKKwkJd2lwaHlfZXJyKGh3LT53aXBoeSwgIkNhbm5vdCBpbml0aWFsaXNlIGZpcm13YXJlXG4iKTsKKwkJZ290byBlcnJfZnJlZV9pcnE7CisJfQorCisJLyogVHVybiByYWRpbyBvZmYgKi8KKwlyYyA9IG13bDhrX2NtZF9yYWRpb19kaXNhYmxlKGh3KTsKKwlpZiAocmMpIHsKKwkJd2lwaHlfZXJyKGh3LT53aXBoeSwgIkNhbm5vdCBkaXNhYmxlXG4iKTsKKwkJZ290byBlcnJfZnJlZV9pcnE7CisJfQorCisJLyogQ2xlYXIgTUFDIGFkZHJlc3MgKi8KKwlyYyA9IG13bDhrX2NtZF9zZXRfbWFjX2FkZHIoaHcsIE5VTEwsICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiKTsKKwlpZiAocmMpIHsKKwkJd2lwaHlfZXJyKGh3LT53aXBoeSwgIkNhbm5vdCBjbGVhciBNQUMgYWRkcmVzc1xuIik7CisJCWdvdG8gZXJyX2ZyZWVfaXJxOworCX0KKworCS8qIERpc2FibGUgaW50ZXJydXB0cyAqLworCWlvd3JpdGUzMigwLCBwcml2LT5yZWdzICsgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfTUFTSyk7CisJZnJlZV9pcnEocHJpdi0+cGRldi0+aXJxLCBodyk7CisKKwl3aXBoeV9pbmZvKGh3LT53aXBoeSwgIiVzIHYlZCwgJXBtLCAlcyBmaXJtd2FyZSAldS4ldS4ldS4ldVxuIiwKKwkJICAgcHJpdi0+ZGV2aWNlX2luZm8tPnBhcnRfbmFtZSwKKwkJICAgcHJpdi0+aHdfcmV2LCBody0+d2lwaHktPnBlcm1fYWRkciwKKwkJICAgcHJpdi0+YXBfZncgPyAiQVAiIDogIlNUQSIsCisJCSAgIChwcml2LT5md19yZXYgPj4gMjQpICYgMHhmZiwgKHByaXYtPmZ3X3JldiA+PiAxNikgJiAweGZmLAorCQkgICAocHJpdi0+ZndfcmV2ID4+IDgpICYgMHhmZiwgcHJpdi0+ZndfcmV2ICYgMHhmZik7CisKKwlyZXR1cm4gMDsKKworZXJyX2ZyZWVfaXJxOgorCWlvd3JpdGUzMigwLCBwcml2LT5yZWdzICsgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfTUFTSyk7CisJZnJlZV9pcnEocHJpdi0+cGRldi0+aXJxLCBodyk7CisKK2Vycl9mcmVlX3F1ZXVlczoKKwlmb3IgKGkgPSAwOyBpIDwgTVdMOEtfVFhfUVVFVUVTOyBpKyspCisJCW13bDhrX3R4cV9kZWluaXQoaHcsIGkpOworCW13bDhrX3J4cV9kZWluaXQoaHcsIDApOworCitlcnJfc3RvcF9maXJtd2FyZToKKwltd2w4a19od19yZXNldChwcml2KTsKKworCXJldHVybiByYzsKK30KKworLyoKKyAqIGludm9rZSBtd2w4a19yZWxvYWRfZmlybXdhcmUgdG8gY2hhbmdlIHRoZSBmaXJtd2FyZSBpbWFnZSBhZnRlciB0aGUgZGV2aWNlCisgKiBoYXMgYWxyZWFkeSBiZWVuIHJlZ2lzdGVyZWQKKyAqLworc3RhdGljIGludCBtd2w4a19yZWxvYWRfZmlybXdhcmUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGNoYXIgKmZ3X2ltYWdlKQoreworCWludCBpLCByYyA9IDA7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKworCW13bDhrX3N0b3AoaHcpOworCW13bDhrX3J4cV9kZWluaXQoaHcsIDApOworCisJZm9yIChpID0gMDsgaSA8IE1XTDhLX1RYX1FVRVVFUzsgaSsrKQorCQltd2w4a190eHFfZGVpbml0KGh3LCBpKTsKKworCXJjID0gbXdsOGtfaW5pdF9maXJtd2FyZShodywgZndfaW1hZ2UsIGZhbHNlKTsKKwlpZiAocmMpCisJCWdvdG8gZmFpbDsKKworCXJjID0gbXdsOGtfcHJvYmVfaHcoaHcpOworCWlmIChyYykKKwkJZ290byBmYWlsOworCisJcmMgPSBtd2w4a19zdGFydChodyk7CisJaWYgKHJjKQorCQlnb3RvIGZhaWw7CisKKwlyYyA9IG13bDhrX2NvbmZpZyhodywgfjApOworCWlmIChyYykKKwkJZ290byBmYWlsOworCisJZm9yIChpID0gMDsgaSA8IE1XTDhLX1RYX1FVRVVFUzsgaSsrKSB7CisJCXJjID0gbXdsOGtfY29uZl90eChodywgaSwgJnByaXYtPndtbV9wYXJhbXNbaV0pOworCQlpZiAocmMpCisJCQlnb3RvIGZhaWw7CisJfQorCisJcmV0dXJuIHJjOworCitmYWlsOgorCXByaW50ayhLRVJOX1dBUk5JTkcgIm13bDhrOiBGYWlsZWQgdG8gcmVsb2FkIGZpcm13YXJlIGltYWdlLlxuIik7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IG13bDhrX2Zpcm13YXJlX2xvYWRfc3VjY2VzcyhzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHByaXYtPmh3OworCWludCBpLCByYzsKKworCXJjID0gbXdsOGtfbG9hZF9maXJtd2FyZShodyk7CisJbXdsOGtfcmVsZWFzZV9maXJtd2FyZShwcml2KTsKKwlpZiAocmMpIHsKKwkJd2lwaHlfZXJyKGh3LT53aXBoeSwgIkNhbm5vdCBzdGFydCBmaXJtd2FyZVxuIik7CisJCXJldHVybiByYzsKKwl9CisKKwkvKgorCSAqIEV4dHJhIGhlYWRyb29tIGlzIHRoZSBzaXplIG9mIHRoZSByZXF1aXJlZCBETUEgaGVhZGVyCisJICogbWludXMgdGhlIHNpemUgb2YgdGhlIHNtYWxsZXN0IDgwMi4xMSBmcmFtZSAoQ1RTIGZyYW1lKS4KKwkgKi8KKwlody0+ZXh0cmFfdHhfaGVhZHJvb20gPQorCQlzaXplb2Yoc3RydWN0IG13bDhrX2RtYV9kYXRhKSAtIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2N0cyk7CisKKwlody0+Y2hhbm5lbF9jaGFuZ2VfdGltZSA9IDEwOworCisJaHctPnF1ZXVlcyA9IE1XTDhLX1RYX1FVRVVFUzsKKworCS8qIFNldCByc3NpIHZhbHVlcyB0byBkQm0gKi8KKwlody0+ZmxhZ3MgfD0gSUVFRTgwMjExX0hXX1NJR05BTF9EQk07CisJaHctPnZpZl9kYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IG13bDhrX3ZpZik7CisJaHctPnN0YV9kYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IG13bDhrX3N0YSk7CisKKwlwcml2LT5tYWNpZHNfdXNlZCA9IDA7CisJSU5JVF9MSVNUX0hFQUQoJnByaXYtPnZpZl9saXN0KTsKKworCS8qIFNldCBkZWZhdWx0IHJhZGlvIHN0YXRlIGFuZCBwcmVhbWJsZSAqLworCXByaXYtPnJhZGlvX29uID0gMDsKKwlwcml2LT5yYWRpb19zaG9ydF9wcmVhbWJsZSA9IDA7CisKKwkvKiBGaW5hbGl6ZSBqb2luIHdvcmtlciAqLworCUlOSVRfV09SSygmcHJpdi0+ZmluYWxpemVfam9pbl93b3JrZXIsIG13bDhrX2ZpbmFsaXplX2pvaW5fd29ya2VyKTsKKworCS8qIFRYIHJlY2xhaW0gYW5kIFJYIHRhc2tsZXRzLiAgKi8KKwl0YXNrbGV0X2luaXQoJnByaXYtPnBvbGxfdHhfdGFzaywgbXdsOGtfdHhfcG9sbCwgKHVuc2lnbmVkIGxvbmcpaHcpOworCXRhc2tsZXRfZGlzYWJsZSgmcHJpdi0+cG9sbF90eF90YXNrKTsKKwl0YXNrbGV0X2luaXQoJnByaXYtPnBvbGxfcnhfdGFzaywgbXdsOGtfcnhfcG9sbCwgKHVuc2lnbmVkIGxvbmcpaHcpOworCXRhc2tsZXRfZGlzYWJsZSgmcHJpdi0+cG9sbF9yeF90YXNrKTsKKworCS8qIFBvd2VyIG1hbmFnZW1lbnQgY29va2llICovCisJcHJpdi0+Y29va2llID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocHJpdi0+cGRldiwgNCwgJnByaXYtPmNvb2tpZV9kbWEpOworCWlmIChwcml2LT5jb29raWUgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltdXRleF9pbml0KCZwcml2LT5md19tdXRleCk7CisJcHJpdi0+ZndfbXV0ZXhfb3duZXIgPSBOVUxMOworCXByaXYtPmZ3X211dGV4X2RlcHRoID0gMDsKKwlwcml2LT5ob3N0Y21kX3dhaXQgPSBOVUxMOworCisJc3Bpbl9sb2NrX2luaXQoJnByaXYtPnR4X2xvY2spOworCisJcHJpdi0+dHhfd2FpdCA9IE5VTEw7CisKKwlyYyA9IG13bDhrX3Byb2JlX2h3KGh3KTsKKwlpZiAocmMpCisJCWdvdG8gZXJyX2ZyZWVfY29va2llOworCisJaHctPndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgPSAwOworCWlmIChwcml2LT5hcF9tYWNpZHNfc3VwcG9ydGVkIHx8IHByaXYtPmRldmljZV9pbmZvLT5md19pbWFnZV9hcCkKKwkJaHctPndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgfD0gQklUKE5MODAyMTFfSUZUWVBFX0FQKTsKKwlpZiAocHJpdi0+c3RhX21hY2lkc19zdXBwb3J0ZWQgfHwgcHJpdi0+ZGV2aWNlX2luZm8tPmZ3X2ltYWdlX3N0YSkKKwkJaHctPndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgfD0gQklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pOworCisJcmMgPSBpZWVlODAyMTFfcmVnaXN0ZXJfaHcoaHcpOworCWlmIChyYykgeworCQl3aXBoeV9lcnIoaHctPndpcGh5LCAiQ2Fubm90IHJlZ2lzdGVyIGRldmljZVxuIik7CisJCWdvdG8gZXJyX3VucHJvYmVfaHc7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl91bnByb2JlX2h3OgorCWZvciAoaSA9IDA7IGkgPCBNV0w4S19UWF9RVUVVRVM7IGkrKykKKwkJbXdsOGtfdHhxX2RlaW5pdChodywgaSk7CisJbXdsOGtfcnhxX2RlaW5pdChodywgMCk7CisKK2Vycl9mcmVlX2Nvb2tpZToKKwlpZiAocHJpdi0+Y29va2llICE9IE5VTEwpCisJCXBjaV9mcmVlX2NvbnNpc3RlbnQocHJpdi0+cGRldiwgNCwKKwkJCQlwcml2LT5jb29raWUsIHByaXYtPmNvb2tpZV9kbWEpOworCisJcmV0dXJuIHJjOworfQogc3RhdGljIGludCBfX2RldmluaXQgbXdsOGtfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCQkJIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKIHsKLQlzdGF0aWMgaW50IHByaW50ZWRfdmVyc2lvbiA9IDA7CisJc3RhdGljIGludCBwcmludGVkX3ZlcnNpb247CiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CiAJc3RydWN0IG13bDhrX3ByaXYgKnByaXY7CisJc3RydWN0IG13bDhrX2RldmljZV9pbmZvICpkaTsKIAlpbnQgcmM7Ci0JaW50IGk7CiAKIAlpZiAoIXByaW50ZWRfdmVyc2lvbikgewogCQlwcmludGsoS0VSTl9JTkZPICIlcyB2ZXJzaW9uICVzXG4iLCBNV0w4S19ERVNDLCBNV0w4S19WRVJTSU9OKTsKQEAgLTM5NDMsMTkxICs0NDYzLDMzIEBACiAJCX0KIAl9CiAKLQotCS8qIFJlc2V0IGZpcm13YXJlIGFuZCBoYXJkd2FyZSAqLwotCW13bDhrX2h3X3Jlc2V0KHByaXYpOwotCi0JLyogQXNrIHVzZXJsYW5kIGhvdHBsdWcgZGFlbW9uIGZvciB0aGUgZGV2aWNlIGZpcm13YXJlICovCi0JcmMgPSBtd2w4a19yZXF1ZXN0X2Zpcm13YXJlKHByaXYpOwotCWlmIChyYykgewotCQl3aXBoeV9lcnIoaHctPndpcGh5LCAiRmlybXdhcmUgZmlsZXMgbm90IGZvdW5kXG4iKTsKLQkJZ290byBlcnJfc3RvcF9maXJtd2FyZTsKLQl9Ci0KLQkvKiBMb2FkIGZpcm13YXJlIGludG8gaGFyZHdhcmUgKi8KLQlyYyA9IG13bDhrX2xvYWRfZmlybXdhcmUoaHcpOwotCWlmIChyYykgewotCQl3aXBoeV9lcnIoaHctPndpcGh5LCAiQ2Fubm90IHN0YXJ0IGZpcm13YXJlXG4iKTsKLQkJZ290byBlcnJfc3RvcF9maXJtd2FyZTsKLQl9Ci0KLQkvKiBSZWNsYWltIG1lbW9yeSBvbmNlIGZpcm13YXJlIGlzIHN1Y2Nlc3NmdWxseSBsb2FkZWQgKi8KLQltd2w4a19yZWxlYXNlX2Zpcm13YXJlKHByaXYpOwotCi0KLQlpZiAocHJpdi0+YXBfZncpIHsKLQkJcHJpdi0+cnhkX29wcyA9IHByaXYtPmRldmljZV9pbmZvLT5hcF9yeGRfb3BzOwotCQlpZiAocHJpdi0+cnhkX29wcyA9PSBOVUxMKSB7Ci0JCQl3aXBoeV9lcnIoaHctPndpcGh5LAotCQkJCSAgIkRyaXZlciBkb2VzIG5vdCBoYXZlIEFQIGZpcm13YXJlIGltYWdlIHN1cHBvcnQgZm9yIHRoaXMgaGFyZHdhcmVcbiIpOwotCQkJZ290byBlcnJfc3RvcF9maXJtd2FyZTsKLQkJfQotCX0gZWxzZSB7Ci0JCXByaXYtPnJ4ZF9vcHMgPSAmcnhkX3N0YV9vcHM7Ci0JfQotCi0JcHJpdi0+c25pZmZlcl9lbmFibGVkID0gZmFsc2U7Ci0JcHJpdi0+d21tX2VuYWJsZWQgPSBmYWxzZTsKLQlwcml2LT5wZW5kaW5nX3R4X3BrdHMgPSAwOwotCi0KIAkvKgotCSAqIEV4dHJhIGhlYWRyb29tIGlzIHRoZSBzaXplIG9mIHRoZSByZXF1aXJlZCBETUEgaGVhZGVyCi0JICogbWludXMgdGhlIHNpemUgb2YgdGhlIHNtYWxsZXN0IDgwMi4xMSBmcmFtZSAoQ1RTIGZyYW1lKS4KKwkgKiBDaG9vc2UgdGhlIGluaXRpYWwgZncgaW1hZ2UgZGVwZW5kaW5nIG9uIHVzZXIgaW5wdXQuICBJZiBhIHNlY29uZAorCSAqIGltYWdlIGlzIGF2YWlsYWJsZSwgbWFrZSBpdCB0aGUgYWx0ZXJuYXRpdmUgaW1hZ2UgdGhhdCB3aWxsIGJlCisJICogbG9hZGVkIGlmIHRoZSBmaXJzdCBvbmUgZmFpbHMuCiAJICovCi0JaHctPmV4dHJhX3R4X2hlYWRyb29tID0KLQkJc2l6ZW9mKHN0cnVjdCBtd2w4a19kbWFfZGF0YSkgLSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9jdHMpOwotCi0JaHctPmNoYW5uZWxfY2hhbmdlX3RpbWUgPSAxMDsKLQotCWh3LT5xdWV1ZXMgPSBNV0w4S19UWF9RVUVVRVM7Ci0KLQkvKiBTZXQgcnNzaSB2YWx1ZXMgdG8gZEJtICovCi0JaHctPmZsYWdzIHw9IElFRUU4MDIxMV9IV19TSUdOQUxfREJNOwotCWh3LT52aWZfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBtd2w4a192aWYpOwotCWh3LT5zdGFfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBtd2w4a19zdGEpOwotCi0JcHJpdi0+bWFjaWRzX3VzZWQgPSAwOwotCUlOSVRfTElTVF9IRUFEKCZwcml2LT52aWZfbGlzdCk7Ci0KLQkvKiBTZXQgZGVmYXVsdCByYWRpbyBzdGF0ZSBhbmQgcHJlYW1ibGUgKi8KLQlwcml2LT5yYWRpb19vbiA9IDA7Ci0JcHJpdi0+cmFkaW9fc2hvcnRfcHJlYW1ibGUgPSAwOwotCi0JLyogRmluYWxpemUgam9pbiB3b3JrZXIgKi8KLQlJTklUX1dPUksoJnByaXYtPmZpbmFsaXplX2pvaW5fd29ya2VyLCBtd2w4a19maW5hbGl6ZV9qb2luX3dvcmtlcik7Ci0KLQkvKiBUWCByZWNsYWltIGFuZCBSWCB0YXNrbGV0cy4gICovCi0JdGFza2xldF9pbml0KCZwcml2LT5wb2xsX3R4X3Rhc2ssIG13bDhrX3R4X3BvbGwsICh1bnNpZ25lZCBsb25nKWh3KTsKLQl0YXNrbGV0X2Rpc2FibGUoJnByaXYtPnBvbGxfdHhfdGFzayk7Ci0JdGFza2xldF9pbml0KCZwcml2LT5wb2xsX3J4X3Rhc2ssIG13bDhrX3J4X3BvbGwsICh1bnNpZ25lZCBsb25nKWh3KTsKLQl0YXNrbGV0X2Rpc2FibGUoJnByaXYtPnBvbGxfcnhfdGFzayk7Ci0KLQkvKiBQb3dlciBtYW5hZ2VtZW50IGNvb2tpZSAqLwotCXByaXYtPmNvb2tpZSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHByaXYtPnBkZXYsIDQsICZwcml2LT5jb29raWVfZG1hKTsKLQlpZiAocHJpdi0+Y29va2llID09IE5VTEwpCi0JCWdvdG8gZXJyX3N0b3BfZmlybXdhcmU7Ci0KLQlyYyA9IG13bDhrX3J4cV9pbml0KGh3LCAwKTsKKwlpbml0X2NvbXBsZXRpb24oJnByaXYtPmZpcm13YXJlX2xvYWRpbmdfY29tcGxldGUpOworCWRpID0gcHJpdi0+ZGV2aWNlX2luZm87CisJaWYgKGFwX21vZGVfZGVmYXVsdCAmJiBkaS0+ZndfaW1hZ2VfYXApIHsKKwkJcHJpdi0+ZndfcHJlZiA9IGRpLT5md19pbWFnZV9hcDsKKwkJcHJpdi0+ZndfYWx0ID0gZGktPmZ3X2ltYWdlX3N0YTsKKwl9IGVsc2UgaWYgKCFhcF9tb2RlX2RlZmF1bHQgJiYgZGktPmZ3X2ltYWdlX3N0YSkgeworCQlwcml2LT5md19wcmVmID0gZGktPmZ3X2ltYWdlX3N0YTsKKwkJcHJpdi0+ZndfYWx0ID0gZGktPmZ3X2ltYWdlX2FwOworCX0gZWxzZSBpZiAoYXBfbW9kZV9kZWZhdWx0ICYmICFkaS0+ZndfaW1hZ2VfYXAgJiYgZGktPmZ3X2ltYWdlX3N0YSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJBUCBmdyBpcyB1bmF2YWlsYWJsZS4gIFVzaW5nIFNUQSBmdy4iKTsKKwkJcHJpdi0+ZndfcHJlZiA9IGRpLT5md19pbWFnZV9zdGE7CisJfSBlbHNlIGlmICghYXBfbW9kZV9kZWZhdWx0ICYmICFkaS0+ZndfaW1hZ2Vfc3RhICYmIGRpLT5md19pbWFnZV9hcCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJTVEEgZncgaXMgdW5hdmFpbGFibGUuICBVc2luZyBBUCBmdy4iKTsKKwkJcHJpdi0+ZndfcHJlZiA9IGRpLT5md19pbWFnZV9hcDsKKwl9CisJcmMgPSBtd2w4a19pbml0X2Zpcm13YXJlKGh3LCBwcml2LT5md19wcmVmLCB0cnVlKTsKIAlpZiAocmMpCi0JCWdvdG8gZXJyX2ZyZWVfY29va2llOwotCXJ4cV9yZWZpbGwoaHcsIDAsIElOVF9NQVgpOwotCi0JbXV0ZXhfaW5pdCgmcHJpdi0+ZndfbXV0ZXgpOwotCXByaXYtPmZ3X211dGV4X293bmVyID0gTlVMTDsKLQlwcml2LT5md19tdXRleF9kZXB0aCA9IDA7Ci0JcHJpdi0+aG9zdGNtZF93YWl0ID0gTlVMTDsKLQotCXNwaW5fbG9ja19pbml0KCZwcml2LT50eF9sb2NrKTsKLQotCXByaXYtPnR4X3dhaXQgPSBOVUxMOwotCi0JZm9yIChpID0gMDsgaSA8IE1XTDhLX1RYX1FVRVVFUzsgaSsrKSB7Ci0JCXJjID0gbXdsOGtfdHhxX2luaXQoaHcsIGkpOwotCQlpZiAocmMpCi0JCQlnb3RvIGVycl9mcmVlX3F1ZXVlczsKLQl9Ci0KLQlpb3dyaXRlMzIoMCwgcHJpdi0+cmVncyArIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX1NUQVRVUyk7Ci0JaW93cml0ZTMyKDAsIHByaXYtPnJlZ3MgKyBNV0w4S19ISVVfQTJIX0lOVEVSUlVQVF9NQVNLKTsKLQlpb3dyaXRlMzIoTVdMOEtfQTJIX0lOVF9UWF9ET05FIHwgTVdMOEtfQTJIX0lOVF9SWF9SRUFEWSwKLQkJICBwcml2LT5yZWdzICsgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfQ0xFQVJfU0VMKTsKLQlpb3dyaXRlMzIoMHhmZmZmZmZmZiwgcHJpdi0+cmVncyArIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX1NUQVRVU19NQVNLKTsKLQotCXJjID0gcmVxdWVzdF9pcnEocHJpdi0+cGRldi0+aXJxLCBtd2w4a19pbnRlcnJ1cHQsCi0JCQkgSVJRRl9TSEFSRUQsIE1XTDhLX05BTUUsIGh3KTsKLQlpZiAocmMpIHsKLQkJd2lwaHlfZXJyKGh3LT53aXBoeSwgImZhaWxlZCB0byByZWdpc3RlciBJUlEgaGFuZGxlclxuIik7Ci0JCWdvdG8gZXJyX2ZyZWVfcXVldWVzOwotCX0KLQotCS8qCi0JICogVGVtcG9yYXJpbHkgZW5hYmxlIGludGVycnVwdHMuICBJbml0aWFsIGZpcm13YXJlIGhvc3QKLQkgKiBjb21tYW5kcyB1c2UgaW50ZXJydXB0cyBhbmQgYXZvaWQgcG9sbGluZy4gIERpc2FibGUKLQkgKiBpbnRlcnJ1cHRzIHdoZW4gZG9uZS4KLQkgKi8KLQlpb3dyaXRlMzIoTVdMOEtfQTJIX0VWRU5UUywgcHJpdi0+cmVncyArIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX01BU0spOwotCi0JLyogR2V0IGNvbmZpZyBkYXRhLCBtYWMgYWRkcnMgZXRjICovCi0JaWYgKHByaXYtPmFwX2Z3KSB7Ci0JCXJjID0gbXdsOGtfY21kX2dldF9od19zcGVjX2FwKGh3KTsKLQkJaWYgKCFyYykKLQkJCXJjID0gbXdsOGtfY21kX3NldF9od19zcGVjKGh3KTsKLQl9IGVsc2UgewotCQlyYyA9IG13bDhrX2NtZF9nZXRfaHdfc3BlY19zdGEoaHcpOwotCX0KLQlpZiAocmMpIHsKLQkJd2lwaHlfZXJyKGh3LT53aXBoeSwgIkNhbm5vdCBpbml0aWFsaXNlIGZpcm13YXJlXG4iKTsKLQkJZ290byBlcnJfZnJlZV9pcnE7Ci0JfQotCi0JaHctPndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgPSAwOwotCWlmIChwcml2LT5hcF9tYWNpZHNfc3VwcG9ydGVkKQotCQlody0+d2lwaHktPmludGVyZmFjZV9tb2RlcyB8PSBCSVQoTkw4MDIxMV9JRlRZUEVfQVApOwotCWlmIChwcml2LT5zdGFfbWFjaWRzX3N1cHBvcnRlZCkKLQkJaHctPndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgfD0gQklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pOwotCi0KLQkvKiBUdXJuIHJhZGlvIG9mZiAqLwotCXJjID0gbXdsOGtfY21kX3JhZGlvX2Rpc2FibGUoaHcpOwotCWlmIChyYykgewotCQl3aXBoeV9lcnIoaHctPndpcGh5LCAiQ2Fubm90IGRpc2FibGVcbiIpOwotCQlnb3RvIGVycl9mcmVlX2lycTsKLQl9Ci0KLQkvKiBDbGVhciBNQUMgYWRkcmVzcyAqLwotCXJjID0gbXdsOGtfY21kX3NldF9tYWNfYWRkcihodywgTlVMTCwgIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIpOwotCWlmIChyYykgewotCQl3aXBoeV9lcnIoaHctPndpcGh5LCAiQ2Fubm90IGNsZWFyIE1BQyBhZGRyZXNzXG4iKTsKLQkJZ290byBlcnJfZnJlZV9pcnE7Ci0JfQotCi0JLyogRGlzYWJsZSBpbnRlcnJ1cHRzICovCi0JaW93cml0ZTMyKDAsIHByaXYtPnJlZ3MgKyBNV0w4S19ISVVfQTJIX0lOVEVSUlVQVF9NQVNLKTsKLQlmcmVlX2lycShwcml2LT5wZGV2LT5pcnEsIGh3KTsKLQotCXJjID0gaWVlZTgwMjExX3JlZ2lzdGVyX2h3KGh3KTsKLQlpZiAocmMpIHsKLQkJd2lwaHlfZXJyKGh3LT53aXBoeSwgIkNhbm5vdCByZWdpc3RlciBkZXZpY2VcbiIpOwotCQlnb3RvIGVycl9mcmVlX3F1ZXVlczsKLQl9Ci0KLQl3aXBoeV9pbmZvKGh3LT53aXBoeSwgIiVzIHYlZCwgJXBtLCAlcyBmaXJtd2FyZSAldS4ldS4ldS4ldVxuIiwKLQkJICAgcHJpdi0+ZGV2aWNlX2luZm8tPnBhcnRfbmFtZSwKLQkJICAgcHJpdi0+aHdfcmV2LCBody0+d2lwaHktPnBlcm1fYWRkciwKLQkJICAgcHJpdi0+YXBfZncgPyAiQVAiIDogIlNUQSIsCi0JCSAgIChwcml2LT5md19yZXYgPj4gMjQpICYgMHhmZiwgKHByaXYtPmZ3X3JldiA+PiAxNikgJiAweGZmLAotCQkgICAocHJpdi0+ZndfcmV2ID4+IDgpICYgMHhmZiwgcHJpdi0+ZndfcmV2ICYgMHhmZik7Ci0KLQlyZXR1cm4gMDsKLQotZXJyX2ZyZWVfaXJxOgotCWlvd3JpdGUzMigwLCBwcml2LT5yZWdzICsgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfTUFTSyk7Ci0JZnJlZV9pcnEocHJpdi0+cGRldi0+aXJxLCBodyk7Ci0KLWVycl9mcmVlX3F1ZXVlczoKLQlmb3IgKGkgPSAwOyBpIDwgTVdMOEtfVFhfUVVFVUVTOyBpKyspCi0JCW13bDhrX3R4cV9kZWluaXQoaHcsIGkpOwotCW13bDhrX3J4cV9kZWluaXQoaHcsIDApOwotCi1lcnJfZnJlZV9jb29raWU6Ci0JaWYgKHByaXYtPmNvb2tpZSAhPSBOVUxMKQotCQlwY2lfZnJlZV9jb25zaXN0ZW50KHByaXYtPnBkZXYsIDQsCi0JCQkJcHJpdi0+Y29va2llLCBwcml2LT5jb29raWVfZG1hKTsKKwkJZ290byBlcnJfc3RvcF9maXJtd2FyZTsKKwlyZXR1cm4gcmM7CiAKIGVycl9zdG9wX2Zpcm13YXJlOgogCW13bDhrX2h3X3Jlc2V0KHByaXYpOwotCW13bDhrX3JlbGVhc2VfZmlybXdhcmUocHJpdik7CiAKIGVycl9pb3VubWFwOgogCWlmIChwcml2LT5yZWdzICE9IE5VTEwpCkBAIC00MTYzLDYgKzQ1MjUsMTMgQEAKIAkJcmV0dXJuOwogCXByaXYgPSBody0+cHJpdjsKIAorCXdhaXRfZm9yX2NvbXBsZXRpb24oJnByaXYtPmZpcm13YXJlX2xvYWRpbmdfY29tcGxldGUpOworCisJaWYgKHByaXYtPmZ3X3N0YXRlID09IEZXX1NUQVRFX0VSUk9SKSB7CisJCW13bDhrX2h3X3Jlc2V0KHByaXYpOworCQlnb3RvIHVubWFwOworCX0KKwogCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyhodyk7CiAKIAlpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyhodyk7CkBAIC00MTg1LDYgKzQ1NTQsNyBAQAogCiAJcGNpX2ZyZWVfY29uc2lzdGVudChwcml2LT5wZGV2LCA0LCBwcml2LT5jb29raWUsIHByaXYtPmNvb2tpZV9kbWEpOwogCit1bm1hcDoKIAlwY2lfaW91bm1hcChwZGV2LCBwcml2LT5yZWdzKTsKIAlwY2lfaW91bm1hcChwZGV2LCBwcml2LT5zcmFtKTsKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL3dleHQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vd2V4dC5jCmluZGV4IGU1YWZhYmUuLmU3OTM2NzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vd2V4dC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vd2V4dC5jCkBAIC04OTMsNiArODkzLDE0IEBACiAJCSAqLwogCQlicmVhazsKIAorCWNhc2UgSVdfQVVUSF9NRlA6CisJCS8qIE1hbmFnZW1lbnQgRnJhbWUgUHJvdGVjdGlvbiBub3Qgc3VwcG9ydGVkLgorCQkgKiBPbmx5IGZhaWwgaWYgc2V0IHRvIHJlcXVpcmVkLgorCQkgKi8KKwkJaWYgKHBhcmFtLT52YWx1ZSA9PSBJV19BVVRIX01GUF9SRVFVSVJFRCkKKwkJCXJldCA9IC1FSU5WQUw7CisJCWJyZWFrOworCiAJY2FzZSBJV19BVVRIX0tFWV9NR01UOgogCQkvKiB3bF9sa20gaW1wbGllcyB2YWx1ZSAyID09IFBTSyBmb3IgSGVybWVzIEkKIAkJICogd2hpY2ggdGllcyBpbiB3aXRoIFdFWFQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTR1c2IuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTR1c2IuYwppbmRleCAyMzI1ZTU2Li4yMTcxM2E3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0dXNiLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHVzYi5jCkBAIC0xODksNyArMTg5LDcgQEAKIHN0YXRpYyB2b2lkIHA1NHVfdHhfY2Ioc3RydWN0IHVyYiAqdXJiKQogewogCXN0cnVjdCBza19idWZmICpza2IgPSB1cmItPmNvbnRleHQ7Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqZGV2ID0gKHN0cnVjdCBpZWVlODAyMTFfaHcgKikKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYgPQogCQl1c2JfZ2V0X2ludGZkYXRhKHVzYl9pZm51bV90b19pZih1cmItPmRldiwgMCkpOwogCiAJcDU0X2ZyZWVfc2tiKGRldiwgc2tiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JheV9jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmF5X2NzLmMKaW5kZXggOTcwMDdkOS4uMDc2NGQxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmF5X2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmF5X2NzLmMKQEAgLTE3NzYsMTEgKzE3NzYsOCBAQAogCQkvKiBDb3B5IHRoZSBrZXJuZWwncyBsaXN0IG9mIE1DIGFkZHJlc3NlcyB0byBjYXJkICovCiAJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGhhLCBkZXYpIHsKIAkJCW1lbWNweV90b2lvKHAsIGhhLT5hZGRyLCBFVEhfQUxFTik7Ci0JCQlkZXZfZGJnKCZsaW5rLT5kZXYsCi0JCQkgICAgICAicmF5X3VwZGF0ZV9tdWx0aSBhZGQgYWRkciAlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnhcbiIsCi0JCQkgICAgICBoYS0+YWRkclswXSwgaGEtPmFkZHJbMV0sCi0JCQkgICAgICBoYS0+YWRkclsyXSwgaGEtPmFkZHJbM10sCi0JCQkgICAgICBoYS0+YWRkcls0XSwgaGEtPmFkZHJbNV0pOworCQkJZGV2X2RiZygmbGluay0+ZGV2LCAicmF5X3VwZGF0ZV9tdWx0aSBhZGQgYWRkciAlcG1cbiIsCisJCQkJaGEtPmFkZHIpOwogCQkJcCArPSBFVEhfQUxFTjsKIAkJCWkrKzsKIAkJfQpAQCAtMjAxNSwxMSArMjAxMiw4IEBACiAJCQkJbWVtY3B5X2Zyb21pbygmbG9jYWwtPmJzc19pZCwKIAkJCQkJICAgICAgcHJjcy0+dmFyLnJlam9pbl9uZXRfY29tcGxldGUuCiAJCQkJCSAgICAgIGJzc2lkLCBBRERSTEVOKTsKLQkJCQlkZXZfZGJnKCZsaW5rLT5kZXYsCi0JCQkJICAgICAgInJheV9jcyBuZXcgQlNTSUQgPSAlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnhcbiIsCi0JCQkJICAgICAgbG9jYWwtPmJzc19pZFswXSwgbG9jYWwtPmJzc19pZFsxXSwKLQkJCQkgICAgICBsb2NhbC0+YnNzX2lkWzJdLCBsb2NhbC0+YnNzX2lkWzNdLAotCQkJCSAgICAgIGxvY2FsLT5ic3NfaWRbNF0sIGxvY2FsLT5ic3NfaWRbNV0pOworCQkJCWRldl9kYmcoJmxpbmstPmRldiwgInJheV9jcyBuZXcgQlNTSUQgPSAlcG1cbiIsCisJCQkJCWxvY2FsLT5ic3NfaWQpOwogCQkJCWlmICghc25pZmZlcikKIAkJCQkJYXV0aGVudGljYXRlKGxvY2FsKTsKIAkJCX0KQEAgLTIyODYsOCArMjI4MCw4IEBACiAJc3RydWN0IGV0aGhkciAqcGV0aDsKIAlVQ0hBUiBzcmNhZGRyW0FERFJMRU5dOwogCVVDSEFSIGRlc3RhZGRyW0FERFJMRU5dOwotCXN0YXRpYyBVQ0hBUiBvcmdfYnJpZGdlWzNdID0geyAwLCAwLCAweGY4IH07Ci0Jc3RhdGljIFVDSEFSIG9yZ18xMDQyWzNdID0geyAwLCAwLCAwIH07CisJc3RhdGljIGNvbnN0IFVDSEFSIG9yZ19icmlkZ2VbM10gPSB7IDAsIDAsIDB4ZjggfTsKKwlzdGF0aWMgY29uc3QgVUNIQVIgb3JnXzEwNDJbM10gPSB7IDAsIDAsIDAgfTsKIAogCW1lbWNweShkZXN0YWRkciwgaWVlZTgwMjExX2dldF9EQShwbWFjKSwgQUREUkxFTik7CiAJbWVtY3B5KHNyY2FkZHIsIGllZWU4MDIxMV9nZXRfU0EocG1hYyksIEFERFJMRU4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvcm5kaXNfd2xhbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvcm5kaXNfd2xhbi5jCmluZGV4IDcxYjU5NzEuLjg0OGNjMmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JuZGlzX3dsYW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ybmRpc193bGFuLmMKQEAgLTEyOSw2ICsxMjksNyBAQAogI2RlZmluZSBPSURfODAyXzExX1JUU19USFJFU0hPTEQJCWNwdV90b19sZTMyKDB4MGQwMTAyMGEpCiAjZGVmaW5lIE9JRF84MDJfMTFfU1VQUE9SVEVEX1JBVEVTCQljcHVfdG9fbGUzMigweDBkMDEwMjBlKQogI2RlZmluZSBPSURfODAyXzExX0NPTkZJR1VSQVRJT04JCWNwdV90b19sZTMyKDB4MGQwMTAyMTEpCisjZGVmaW5lIE9JRF84MDJfMTFfUE9XRVJfTU9ERQkJCWNwdV90b19sZTMyKDB4MGQwMTAyMTYpCiAjZGVmaW5lIE9JRF84MDJfMTFfQlNTSURfTElTVAkJCWNwdV90b19sZTMyKDB4MGQwMTAyMTcpCiAKIApAQCAtMTU2LDYgKzE1NywxMiBAQAogI2RlZmluZSBSTkRJU19TVEFUVVNfQURBUFRFUl9OT1RfT1BFTgkJY3B1X3RvX2xlMzIoMHhjMDAxMDAxMikKIAogCisvKiBLbm93biBkZXZpY2UgdHlwZXMgKi8KKyNkZWZpbmUgUk5ESVNfVU5LTk9XTgkwCisjZGVmaW5lIFJORElTX0JDTTQzMjBBCTEKKyNkZWZpbmUgUk5ESVNfQkNNNDMyMEIJMgorCisKIC8qIE5ESVMgZGF0YSBzdHJ1Y3R1cmVzLiBUYWtlbiBmcm9tIHdwYV9zdXBwbGljYW50IGRyaXZlcl9uZGlzLmMKICAqIHNsaWdodGx5IG1vZGlmaWVkIGZvciBkYXRhdHlwZSBlbmRpYW5lc3MsIGV0YwogICovCkBAIC0yMzMsNiArMjQwLDEyIEBACiAJTkRJU184MDIxMV9BRERXRVBfVFJBTlNNSVRfS0VZID0gY3B1X3RvX2xlMzIoMSA8PCAzMSkKIH07CiAKK2VudW0gbmRpc184MDIxMV9wb3dlcl9tb2RlIHsKKwlORElTXzgwMjExX1BPV0VSX01PREVfQ0FNLAorCU5ESVNfODAyMTFfUE9XRVJfTU9ERV9NQVhfUFNQLAorCU5ESVNfODAyMTFfUE9XRVJfTU9ERV9GQVNUX1BTUCwKK307CisKIHN0cnVjdCBuZGlzXzgwMjExX2F1dGhfcmVxdWVzdCB7CiAJX19sZTMyIGxlbmd0aDsKIAl1OCBic3NpZFs2XTsKQEAgLTQ3MiwxMiArNDg1LDE2IEBACiAJc3RydWN0IG11dGV4IGNvbW1hbmRfbG9jazsKIAl1bnNpZ25lZCBsb25nIHdvcmtfcGVuZGluZzsKIAlpbnQgbGFzdF9xdWFsOworCXMzMiBjcW1fcnNzaV90aG9sZDsKKwl1MzIgY3FtX3Jzc2lfaHlzdDsKKwlpbnQgbGFzdF9jcW1fZXZlbnRfcnNzaTsKIAogCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgYmFuZDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgY2hhbm5lbHNbQVJSQVlfU0laRShybmRpc19jaGFubmVscyldOwogCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSByYXRlc1tBUlJBWV9TSVpFKHJuZGlzX3JhdGVzKV07CiAJdTMyIGNpcGhlcl9zdWl0ZXNbQVJSQVlfU0laRShybmRpc19jaXBoZXJfc3VpdGVzKV07CiAKKwlpbnQgZGV2aWNlX3R5cGU7CiAJaW50IGNhcHM7CiAJaW50IG11bHRpY2FzdF9zaXplOwogCkBAIC00OTMsMTAgKzUxMCwxMCBAQAogCiAJLyogaGFyZHdhcmUgc3RhdGUgKi8KIAlib29sIHJhZGlvX29uOworCWludCBwb3dlcl9tb2RlOwogCWludCBpbmZyYV9tb2RlOwogCWJvb2wgY29ubmVjdGVkOwogCXU4IGJzc2lkW0VUSF9BTEVOXTsKLQlzdHJ1Y3QgbmRpc184MDIxMV9zc2lkIGVzc2lkOwogCV9fbGUzMiBjdXJyZW50X2NvbW1hbmRfb2lkOwogCiAJLyogZW5jcnlwdGlvbiBzdHVmZiAqLwpAQCAtNTQ3LDcgKzU2NCw3IEBACiAJCQkgdTgga2V5X2luZGV4LCBib29sIHBhaXJ3aXNlLCBjb25zdCB1OCAqbWFjX2FkZHIpOwogCiBzdGF0aWMgaW50IHJuZGlzX3NldF9kZWZhdWx0X2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAotCQkJCQkJCQl1OCBrZXlfaW5kZXgpOworCQkJCSB1OCBrZXlfaW5kZXgsIGJvb2wgdW5pY2FzdCwgYm9vbCBtdWx0aWNhc3QpOwogCiBzdGF0aWMgaW50IHJuZGlzX2dldF9zdGF0aW9uKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJCXU4ICptYWMsIHN0cnVjdCBzdGF0aW9uX2luZm8gKnNpbmZvKTsKQEAgLTU2Myw3ICs1ODAsMTQgQEAKIAogc3RhdGljIGludCBybmRpc19mbHVzaF9wbWtzYShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKIAotc3RhdGljIHN0cnVjdCBjZmc4MDIxMV9vcHMgcm5kaXNfY29uZmlnX29wcyA9IHsKK3N0YXRpYyBpbnQgcm5kaXNfc2V0X3Bvd2VyX21nbXQoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQlib29sIGVuYWJsZWQsIGludCB0aW1lb3V0KTsKKworc3RhdGljIGludCBybmRpc19zZXRfY3FtX3Jzc2lfY29uZmlnKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCXMzMiByc3NpX3Rob2xkLCB1MzIgcnNzaV9oeXN0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjZmc4MDIxMV9vcHMgcm5kaXNfY29uZmlnX29wcyA9IHsKIAkuY2hhbmdlX3ZpcnR1YWxfaW50ZiA9IHJuZGlzX2NoYW5nZV92aXJ0dWFsX2ludGYsCiAJLnNjYW4gPSBybmRpc19zY2FuLAogCS5zZXRfd2lwaHlfcGFyYW1zID0gcm5kaXNfc2V0X3dpcGh5X3BhcmFtcywKQEAgLTU4Miw2ICs2MDYsOCBAQAogCS5zZXRfcG1rc2EgPSBybmRpc19zZXRfcG1rc2EsCiAJLmRlbF9wbWtzYSA9IHJuZGlzX2RlbF9wbWtzYSwKIAkuZmx1c2hfcG1rc2EgPSBybmRpc19mbHVzaF9wbWtzYSwKKwkuc2V0X3Bvd2VyX21nbXQgPSBybmRpc19zZXRfcG93ZXJfbWdtdCwKKwkuc2V0X2NxbV9yc3NpX2NvbmZpZyA9IHJuZGlzX3NldF9jcW1fcnNzaV9jb25maWcsCiB9OwogCiBzdGF0aWMgdm9pZCAqcm5kaXNfd2lwaHlfcHJpdmlkID0gJnJuZGlzX3dpcGh5X3ByaXZpZDsKQEAgLTY4MCw2ICs3MDYsNyBAQAogCQlPSURfU1RSKE9JRF84MDJfMTFfQUREX0tFWSk7CiAJCU9JRF9TVFIoT0lEXzgwMl8xMV9SRU1PVkVfS0VZKTsKIAkJT0lEX1NUUihPSURfODAyXzExX0FTU09DSUFUSU9OX0lORk9STUFUSU9OKTsKKwkJT0lEX1NUUihPSURfODAyXzExX0NBUEFCSUxJVFkpOwogCQlPSURfU1RSKE9JRF84MDJfMTFfUE1LSUQpOwogCQlPSURfU1RSKE9JRF84MDJfMTFfTkVUV09SS19UWVBFU19TVVBQT1JURUQpOwogCQlPSURfU1RSKE9JRF84MDJfMTFfTkVUV09SS19UWVBFX0lOX1VTRSk7CkBAIC02OTAsNiArNzE3LDcgQEAKIAkJT0lEX1NUUihPSURfODAyXzExX1JUU19USFJFU0hPTEQpOwogCQlPSURfU1RSKE9JRF84MDJfMTFfU1VQUE9SVEVEX1JBVEVTKTsKIAkJT0lEX1NUUihPSURfODAyXzExX0NPTkZJR1VSQVRJT04pOworCQlPSURfU1RSKE9JRF84MDJfMTFfUE9XRVJfTU9ERSk7CiAJCU9JRF9TVFIoT0lEXzgwMl8xMV9CU1NJRF9MSVNUKTsKICN1bmRlZiBPSURfU1RSCiAJfQpAQCAtODEwLDcgKzgzOCw4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBybmRpc19zZXRfb2lkKHN0cnVjdCB1c2JuZXQgKmRldiwgX19sZTMyIG9pZCwgdm9pZCAqZGF0YSwgaW50IGxlbikKK3N0YXRpYyBpbnQgcm5kaXNfc2V0X29pZChzdHJ1Y3QgdXNibmV0ICpkZXYsIF9fbGUzMiBvaWQsIGNvbnN0IHZvaWQgKmRhdGEsCisJCQkgaW50IGxlbikKIHsKIAlzdHJ1Y3Qgcm5kaXNfd2xhbl9wcml2YXRlICpwcml2ID0gZ2V0X3JuZGlzX3dsYW5fcHJpdihkZXYpOwogCXVuaW9uIHsKQEAgLTk5NCw3ICsxMDIzLDE4IEBACiAgKi8KIHN0YXRpYyBpbnQgc2V0X2luZnJhX21vZGUoc3RydWN0IHVzYm5ldCAqdXNiZGV2LCBpbnQgbW9kZSk7CiBzdGF0aWMgdm9pZCByZXN0b3JlX2tleXMoc3RydWN0IHVzYm5ldCAqdXNiZGV2KTsKLXN0YXRpYyBpbnQgcm5kaXNfY2hlY2tfYnNzaWRfbGlzdChzdHJ1Y3QgdXNibmV0ICp1c2JkZXYpOworc3RhdGljIGludCBybmRpc19jaGVja19ic3NpZF9saXN0KHN0cnVjdCB1c2JuZXQgKnVzYmRldiwgdTggKm1hdGNoX2Jzc2lkLAorCQkJCQlib29sICptYXRjaGVkKTsKKworc3RhdGljIGludCBybmRpc19zdGFydF9ic3NpZF9saXN0X3NjYW4oc3RydWN0IHVzYm5ldCAqdXNiZGV2KQoreworCV9fbGUzMiB0bXA7CisKKwkvKiBOb3RlOiBPSURfODAyXzExX0JTU0lEX0xJU1RfU0NBTiBjbGVhcnMgaW50ZXJuYWwgQlNTIGxpc3QuICovCisJdG1wID0gY3B1X3RvX2xlMzIoMSk7CisJcmV0dXJuIHJuZGlzX3NldF9vaWQodXNiZGV2LCBPSURfODAyXzExX0JTU0lEX0xJU1RfU0NBTiwgJnRtcCwKKwkJCQkJCQlzaXplb2YodG1wKSk7Cit9CiAKIHN0YXRpYyBpbnQgc2V0X2Vzc2lkKHN0cnVjdCB1c2JuZXQgKnVzYmRldiwgc3RydWN0IG5kaXNfODAyMTFfc3NpZCAqc3NpZCkKIHsKQEAgLTEwMDcsNyArMTA0Nyw2IEBACiAJCXJldHVybiByZXQ7CiAJfQogCWlmIChyZXQgPT0gMCkgewotCQltZW1jcHkoJnByaXYtPmVzc2lkLCBzc2lkLCBzaXplb2YocHJpdi0+ZXNzaWQpKTsKIAkJcHJpdi0+cmFkaW9fb24gPSB0cnVlOwogCQluZXRkZXZfZGJnKHVzYmRldi0+bmV0LCAiJXMoKTogcmFkaW9fb24gPSB0cnVlXG4iLCBfX2Z1bmNfXyk7CiAJfQpAQCAtMTAxNSw3ICsxMDU0LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHNldF9ic3NpZChzdHJ1Y3QgdXNibmV0ICp1c2JkZXYsIHU4IGJzc2lkW0VUSF9BTEVOXSkKK3N0YXRpYyBpbnQgc2V0X2Jzc2lkKHN0cnVjdCB1c2JuZXQgKnVzYmRldiwgY29uc3QgdTggKmJzc2lkKQogewogCWludCByZXQ7CiAKQEAgLTEwMzEsNyArMTA3MCw5IEBACiAKIHN0YXRpYyBpbnQgY2xlYXJfYnNzaWQoc3RydWN0IHVzYm5ldCAqdXNiZGV2KQogewotCXU4IGJyb2FkY2FzdF9tYWNbRVRIX0FMRU5dID0gezB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmZ9OworCXN0YXRpYyBjb25zdCB1OCBicm9hZGNhc3RfbWFjW0VUSF9BTEVOXSA9IHsKKwkJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZgorCX07CiAKIAlyZXR1cm4gc2V0X2Jzc2lkKHVzYmRldiwgYnJvYWRjYXN0X21hYyk7CiB9CkBAIC0xOTA0LDE0ICsxOTQ1LDE0IEBACiAJc3RydWN0IHVzYm5ldCAqdXNiZGV2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3Qgcm5kaXNfd2xhbl9wcml2YXRlICpwcml2ID0gZ2V0X3JuZGlzX3dsYW5fcHJpdih1c2JkZXYpOwogCWludCByZXQ7Ci0JX19sZTMyIHRtcDsKKwlpbnQgZGVsYXkgPSBTQ0FOX0RFTEFZX0pJRkZJRVM7CiAKIAluZXRkZXZfZGJnKHVzYmRldi0+bmV0LCAiY2ZnODAyMTEuc2NhblxuIik7CiAKIAkvKiBHZXQgY3VycmVudCBic3NpZCBsaXN0IGZyb20gZGV2aWNlIGJlZm9yZSBuZXcgc2NhbiwgYXMgbmV3IHNjYW4KIAkgKiBjbGVhcnMgaW50ZXJuYWwgYnNzaWQgbGlzdC4KIAkgKi8KLQlybmRpc19jaGVja19ic3NpZF9saXN0KHVzYmRldik7CisJcm5kaXNfY2hlY2tfYnNzaWRfbGlzdCh1c2JkZXYsIE5VTEwsIE5VTEwpOwogCiAJaWYgKCFyZXF1ZXN0KQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTE5MjEsMTMgKzE5NjIsMTMgQEAKIAogCXByaXYtPnNjYW5fcmVxdWVzdCA9IHJlcXVlc3Q7CiAKLQl0bXAgPSBjcHVfdG9fbGUzMigxKTsKLQlyZXQgPSBybmRpc19zZXRfb2lkKHVzYmRldiwgT0lEXzgwMl8xMV9CU1NJRF9MSVNUX1NDQU4sICZ0bXAsCi0JCQkJCQkJc2l6ZW9mKHRtcCkpOworCXJldCA9IHJuZGlzX3N0YXJ0X2Jzc2lkX2xpc3Rfc2Nhbih1c2JkZXYpOwogCWlmIChyZXQgPT0gMCkgeworCQlpZiAocHJpdi0+ZGV2aWNlX3R5cGUgPT0gUk5ESVNfQkNNNDMyMEEpCisJCQlkZWxheSA9IEhaOworCiAJCS8qIFdhaXQgYmVmb3JlIHJldHJpZXZpbmcgc2NhbiByZXN1bHRzIGZyb20gZGV2aWNlICovCi0JCXF1ZXVlX2RlbGF5ZWRfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5zY2FuX3dvcmssCi0JCQlTQ0FOX0RFTEFZX0pJRkZJRVMpOworCQlxdWV1ZV9kZWxheWVkX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+c2Nhbl93b3JrLCBkZWxheSk7CiAJfQogCiAJcmV0dXJuIHJldDsKQEAgLTE5NDYsOCArMTk4Nyw4IEBACiAJaW50IGllX2xlbiwgYnNzaWRfbGVuOwogCXU4ICppZTsKIAotCW5ldGRldl9kYmcodXNiZGV2LT5uZXQsICIgZm91bmQgYnNzaWQ6ICclLjMycycgWyVwTV1cbiIsCi0JCSAgIGJzc2lkLT5zc2lkLmVzc2lkLCBic3NpZC0+bWFjKTsKKwluZXRkZXZfZGJnKHVzYmRldi0+bmV0LCAiIGZvdW5kIGJzc2lkOiAnJS4zMnMnIFslcE1dLCBsZW46ICVkXG4iLAorCQkgICBic3NpZC0+c3NpZC5lc3NpZCwgYnNzaWQtPm1hYywgbGUzMl90b19jcHUoYnNzaWQtPmxlbmd0aCkpOwogCiAJLyogcGFyc2UgYnNzaWQgc3RydWN0dXJlICovCiAJYnNzaWRfbGVuID0gbGUzMl90b19jcHUoYnNzaWQtPmxlbmd0aCk7CkBAIC0xOTgxLDQ5ICsyMDIyLDk4IEBACiAJCUdGUF9LRVJORUwpOwogfQogCi1zdGF0aWMgaW50IHJuZGlzX2NoZWNrX2Jzc2lkX2xpc3Qoc3RydWN0IHVzYm5ldCAqdXNiZGV2KQorc3RhdGljIHN0cnVjdCBuZGlzXzgwMjExX2Jzc2lkX2V4ICpuZXh0X2Jzc2lkX2xpc3RfaXRlbSgKKwkJCQkJc3RydWN0IG5kaXNfODAyMTFfYnNzaWRfZXggKmJzc2lkLAorCQkJCQlpbnQgKmJzc2lkX2xlbiwgdm9pZCAqYnVmLCBpbnQgbGVuKQoreworCXZvaWQgKmJ1Zl9lbmQsICpic3NpZF9lbmQ7CisKKwlidWZfZW5kID0gKGNoYXIgKilidWYgKyBsZW47CisJYnNzaWRfZW5kID0gKGNoYXIgKilic3NpZCArICpic3NpZF9sZW47CisKKwlpZiAoKGludCkoYnVmX2VuZCAtIGJzc2lkX2VuZCkgPCBzaXplb2YoYnNzaWQtPmxlbmd0aCkpIHsKKwkJKmJzc2lkX2xlbiA9IDA7CisJCXJldHVybiBOVUxMOworCX0gZWxzZSB7CisJCWJzc2lkID0gKHZvaWQgKikoKGNoYXIgKilic3NpZCArICpic3NpZF9sZW4pOworCQkqYnNzaWRfbGVuID0gbGUzMl90b19jcHUoYnNzaWQtPmxlbmd0aCk7CisJCXJldHVybiBic3NpZDsKKwl9Cit9CisKK3N0YXRpYyBib29sIGNoZWNrX2Jzc2lkX2xpc3RfaXRlbShzdHJ1Y3QgbmRpc184MDIxMV9ic3NpZF9leCAqYnNzaWQsCisJCQkJICBpbnQgYnNzaWRfbGVuLCB2b2lkICpidWYsIGludCBsZW4pCit7CisJdm9pZCAqYnVmX2VuZCwgKmJzc2lkX2VuZDsKKworCWlmICghYnNzaWQgfHwgYnNzaWRfbGVuIDw9IDAgfHwgYnNzaWRfbGVuID4gbGVuKQorCQlyZXR1cm4gZmFsc2U7CisKKwlidWZfZW5kID0gKGNoYXIgKilidWYgKyBsZW47CisJYnNzaWRfZW5kID0gKGNoYXIgKilic3NpZCArIGJzc2lkX2xlbjsKKworCXJldHVybiAoaW50KShidWZfZW5kIC0gYnNzaWRfZW5kKSA+PSAwICYmIChpbnQpKGJzc2lkX2VuZCAtIGJ1ZikgPj0gMDsKK30KKworc3RhdGljIGludCBybmRpc19jaGVja19ic3NpZF9saXN0KHN0cnVjdCB1c2JuZXQgKnVzYmRldiwgdTggKm1hdGNoX2Jzc2lkLAorCQkJCQlib29sICptYXRjaGVkKQogewogCXZvaWQgKmJ1ZiA9IE5VTEw7CiAJc3RydWN0IG5kaXNfODAyMTFfYnNzaWRfbGlzdF9leCAqYnNzaWRfbGlzdDsKIAlzdHJ1Y3QgbmRpc184MDIxMV9ic3NpZF9leCAqYnNzaWQ7Ci0JaW50IHJldCA9IC1FSU5WQUwsIGxlbiwgY291bnQsIGJzc2lkX2xlbjsKLQlib29sIHJlc2l6ZWQgPSBmYWxzZTsKKwlpbnQgcmV0ID0gLUVJTlZBTCwgbGVuLCBjb3VudCwgYnNzaWRfbGVuLCByZWFsX2NvdW50LCBuZXdfbGVuOwogCi0JbmV0ZGV2X2RiZyh1c2JkZXYtPm5ldCwgImNoZWNrX2Jzc2lkX2xpc3RcbiIpOworCW5ldGRldl9kYmcodXNiZGV2LT5uZXQsICIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKIAlsZW4gPSBDT05UUk9MX0JVRkZFUl9TSVpFOwogcmVzaXplX2J1ZjoKLQlidWYgPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CisJYnVmID0ga3phbGxvYyhsZW4sIEdGUF9LRVJORUwpOwogCWlmICghYnVmKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwogCX0KIAotCXJldCA9IHJuZGlzX3F1ZXJ5X29pZCh1c2JkZXYsIE9JRF84MDJfMTFfQlNTSURfTElTVCwgYnVmLCAmbGVuKTsKLQlpZiAocmV0ICE9IDApCisJLyogQlNTSUQtbGlzdCBtaWdodCBoYXZlIGdvdCBiaWdnZXIgbGFzdCB0aW1lIHdlIGNoZWNrZWQsIGtlZXAKKwkgKiByZXNpemluZyB1bnRpbCBpdCB3b24ndCBnZXQgYW55IGJpZ2dlci4KKwkgKi8KKwluZXdfbGVuID0gbGVuOworCXJldCA9IHJuZGlzX3F1ZXJ5X29pZCh1c2JkZXYsIE9JRF84MDJfMTFfQlNTSURfTElTVCwgYnVmLCAmbmV3X2xlbik7CisJaWYgKHJldCAhPSAwIHx8IG5ld19sZW4gPCBzaXplb2Yoc3RydWN0IG5kaXNfODAyMTFfYnNzaWRfbGlzdF9leCkpCiAJCWdvdG8gb3V0OwogCi0JaWYgKCFyZXNpemVkICYmIGxlbiA+IENPTlRST0xfQlVGRkVSX1NJWkUpIHsKLQkJcmVzaXplZCA9IHRydWU7CisJaWYgKG5ld19sZW4gPiBsZW4pIHsKKwkJbGVuID0gbmV3X2xlbjsKIAkJa2ZyZWUoYnVmKTsKIAkJZ290byByZXNpemVfYnVmOwogCX0KIAorCWxlbiA9IG5ld19sZW47CisKIAlic3NpZF9saXN0ID0gYnVmOwotCWJzc2lkID0gYnNzaWRfbGlzdC0+YnNzaWQ7Ci0JYnNzaWRfbGVuID0gbGUzMl90b19jcHUoYnNzaWQtPmxlbmd0aCk7CiAJY291bnQgPSBsZTMyX3RvX2NwdShic3NpZF9saXN0LT5udW1faXRlbXMpOwotCW5ldGRldl9kYmcodXNiZGV2LT5uZXQsICJjaGVja19ic3NpZF9saXN0OiAlZCBCU1NJRHMgZm91bmQgKGJ1ZmxlbjogJWQpXG4iLAotCQkgICBjb3VudCwgbGVuKTsKKwlyZWFsX2NvdW50ID0gMDsKKwluZXRkZXZfZGJnKHVzYmRldi0+bmV0LCAiJXMoKTogYnVmbGVuOiAlZFxuIiwgX19mdW5jX18sIGxlbik7CiAKLQl3aGlsZSAoY291bnQgJiYgKCh2b2lkICopYnNzaWQgKyBic3NpZF9sZW4pIDw9IChidWYgKyBsZW4pKSB7Ci0JCXJuZGlzX2Jzc19pbmZvX3VwZGF0ZSh1c2JkZXYsIGJzc2lkKTsKKwlic3NpZF9sZW4gPSAwOworCWJzc2lkID0gbmV4dF9ic3NpZF9saXN0X2l0ZW0oYnNzaWRfbGlzdC0+YnNzaWQsICZic3NpZF9sZW4sIGJ1ZiwgbGVuKTsKIAotCQlic3NpZCA9ICh2b2lkICopYnNzaWQgKyBic3NpZF9sZW47Ci0JCWJzc2lkX2xlbiA9IGxlMzJfdG9fY3B1KGJzc2lkLT5sZW5ndGgpOwotCQljb3VudC0tOworCS8qIERldmljZSByZXR1cm5zIGluY29ycmVjdCAnbnVtX2l0ZW1zJy4gV29ya2Fyb3VuZCBieSBpZ25vcmluZyB0aGUKKwkgKiByZWNlaXZlZCAnbnVtX2l0ZW1zJyBhbmQgd2Fsa2luZyB0aHJvdWdoIGZ1bGwgYnNzaWQgYnVmZmVyIGluc3RlYWQuCisJICovCisJd2hpbGUgKGNoZWNrX2Jzc2lkX2xpc3RfaXRlbShic3NpZCwgYnNzaWRfbGVuLCBidWYsIGxlbikpIHsKKwkJaWYgKHJuZGlzX2Jzc19pbmZvX3VwZGF0ZSh1c2JkZXYsIGJzc2lkKSAmJiBtYXRjaF9ic3NpZCAmJgorCQkgICAgbWF0Y2hlZCkgeworCQkJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihic3NpZC0+bWFjLCBtYXRjaF9ic3NpZCkpCisJCQkJKm1hdGNoZWQgPSB0cnVlOworCQl9CisKKwkJcmVhbF9jb3VudCsrOworCQlic3NpZCA9IG5leHRfYnNzaWRfbGlzdF9pdGVtKGJzc2lkLCAmYnNzaWRfbGVuLCBidWYsIGxlbik7CiAJfQogCisJbmV0ZGV2X2RiZyh1c2JkZXYtPm5ldCwgIiVzKCk6IG51bV9pdGVtcyBmcm9tIGRldmljZTogJWQsIHJlYWxseSBmb3VuZDoiCisJCQkJIiAlZFxuIiwgX19mdW5jX18sIGNvdW50LCByZWFsX2NvdW50KTsKKwogb3V0OgogCWtmcmVlKGJ1Zik7CiAJcmV0dXJuIHJldDsKQEAgLTIwNDEsNyArMjEzMSw3IEBACiAJaWYgKCFwcml2LT5zY2FuX3JlcXVlc3QpCiAJCXJldHVybjsKIAotCXJldCA9IHJuZGlzX2NoZWNrX2Jzc2lkX2xpc3QodXNiZGV2KTsKKwlyZXQgPSBybmRpc19jaGVja19ic3NpZF9saXN0KHVzYmRldiwgTlVMTCwgTlVMTCk7CiAKIAljZmc4MDIxMV9zY2FuX2RvbmUocHJpdi0+c2Nhbl9yZXF1ZXN0LCByZXQgPCAwKTsKIApAQCAtMjM1NSw3ICsyNDQ1LDcgQEAKIH0KIAogc3RhdGljIGludCBybmRpc19zZXRfZGVmYXVsdF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKLQkJCQkJCQkJdTgga2V5X2luZGV4KQorCQkJCSB1OCBrZXlfaW5kZXgsIGJvb2wgdW5pY2FzdCwgYm9vbCBtdWx0aWNhc3QpCiB7CiAJc3RydWN0IHJuZGlzX3dsYW5fcHJpdmF0ZSAqcHJpdiA9IHdpcGh5X3ByaXYod2lwaHkpOwogCXN0cnVjdCB1c2JuZXQgKnVzYmRldiA9IHByaXYtPnVzYmRldjsKQEAgLTIzNjUsNiArMjQ1NSw5IEBACiAKIAlwcml2LT5lbmNyX3R4X2tleV9pbmRleCA9IGtleV9pbmRleDsKIAorCWlmIChpc193cGFfa2V5KHByaXYsIGtleV9pbmRleCkpCisJCXJldHVybiAwOworCiAJa2V5ID0gcHJpdi0+ZW5jcl9rZXlzW2tleV9pbmRleF07CiAKIAlyZXR1cm4gYWRkX3dlcF9rZXkodXNiZGV2LCBrZXkubWF0ZXJpYWwsIGtleS5sZW4sIGtleV9pbmRleCk7CkBAIC0yNDk1LDYgKzI1ODgsMTM2IEBACiAJcmV0dXJuIHJuZGlzX3NldF9vaWQodXNiZGV2LCBPSURfODAyXzExX1BNS0lELCAmcG1raWQsIHNpemVvZihwbWtpZCkpOwogfQogCitzdGF0aWMgaW50IHJuZGlzX3NldF9wb3dlcl9tZ210KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJYm9vbCBlbmFibGVkLCBpbnQgdGltZW91dCkKK3sKKwlzdHJ1Y3Qgcm5kaXNfd2xhbl9wcml2YXRlICpwcml2ID0gd2lwaHlfcHJpdih3aXBoeSk7CisJc3RydWN0IHVzYm5ldCAqdXNiZGV2ID0gcHJpdi0+dXNiZGV2OworCWludCBwb3dlcl9tb2RlOworCV9fbGUzMiBtb2RlOworCWludCByZXQ7CisKKwluZXRkZXZfZGJnKHVzYmRldi0+bmV0LCAiJXMoKTogJXMsICVkXG4iLCBfX2Z1bmNfXywKKwkJCQllbmFibGVkID8gImVuYWJsZWQiIDogImRpc2FibGVkIiwKKwkJCQl0aW1lb3V0KTsKKworCWlmIChlbmFibGVkKQorCQlwb3dlcl9tb2RlID0gTkRJU184MDIxMV9QT1dFUl9NT0RFX0ZBU1RfUFNQOworCWVsc2UKKwkJcG93ZXJfbW9kZSA9IE5ESVNfODAyMTFfUE9XRVJfTU9ERV9DQU07CisKKwlpZiAocG93ZXJfbW9kZSA9PSBwcml2LT5wb3dlcl9tb2RlKQorCQlyZXR1cm4gMDsKKworCXByaXYtPnBvd2VyX21vZGUgPSBwb3dlcl9tb2RlOworCisJbW9kZSA9IGNwdV90b19sZTMyKHBvd2VyX21vZGUpOworCXJldCA9IHJuZGlzX3NldF9vaWQodXNiZGV2LCBPSURfODAyXzExX1BPV0VSX01PREUsICZtb2RlLCBzaXplb2YobW9kZSkpOworCisJbmV0ZGV2X2RiZyh1c2JkZXYtPm5ldCwgIiVzKCk6IE9JRF84MDJfMTFfUE9XRVJfTU9ERSAtPiAlZFxuIiwKKwkJCQlfX2Z1bmNfXywgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcm5kaXNfc2V0X2NxbV9yc3NpX2NvbmZpZyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQlzMzIgcnNzaV90aG9sZCwgdTMyIHJzc2lfaHlzdCkKK3sKKwlzdHJ1Y3Qgcm5kaXNfd2xhbl9wcml2YXRlICpwcml2ID0gd2lwaHlfcHJpdih3aXBoeSk7CisKKwlwcml2LT5jcW1fcnNzaV90aG9sZCA9IHJzc2lfdGhvbGQ7CisJcHJpdi0+Y3FtX3Jzc2lfaHlzdCA9IHJzc2lfaHlzdDsKKwlwcml2LT5sYXN0X2NxbV9ldmVudF9yc3NpID0gMDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBybmRpc193bGFuX2NyYWZ0X2Nvbm5lY3RlZF9ic3Moc3RydWN0IHVzYm5ldCAqdXNiZGV2LCB1OCAqYnNzaWQsCisJCQkJCSAgIHN0cnVjdCBuZGlzXzgwMjExX2Fzc29jX2luZm8gKmluZm8pCit7CisJc3RydWN0IHJuZGlzX3dsYW5fcHJpdmF0ZSAqcHJpdiA9IGdldF9ybmRpc193bGFuX3ByaXYodXNiZGV2KTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWw7CisJc3RydWN0IG5kaXNfODAyMTFfY29uZiBjb25maWc7CisJc3RydWN0IG5kaXNfODAyMTFfc3NpZCBzc2lkOworCXMzMiBzaWduYWw7CisJdTY0IHRpbWVzdGFtcDsKKwl1MTYgY2FwYWJpbGl0eTsKKwl1MTYgYmVhY29uX2ludGVydmFsOworCV9fbGUzMiByc3NpOworCXU4IGllX2J1ZlszNF07CisJaW50IGxlbiwgcmV0LCBpZV9sZW47CisKKwkvKiBHZXQgc2lnbmFsIHF1YWxpdHksIGluIGNhc2Ugb2YgZXJyb3IgdXNlIHJzc2k9MCBhbmQgaWdub3JlIGVycm9yLiAqLworCWxlbiA9IHNpemVvZihyc3NpKTsKKwlyc3NpID0gMDsKKwlyZXQgPSBybmRpc19xdWVyeV9vaWQodXNiZGV2LCBPSURfODAyXzExX1JTU0ksICZyc3NpLCAmbGVuKTsKKwlzaWduYWwgPSBsZXZlbF90b19xdWFsKGxlMzJfdG9fY3B1KHJzc2kpKTsKKworCW5ldGRldl9kYmcodXNiZGV2LT5uZXQsICIlcygpOiBPSURfODAyXzExX1JTU0kgLT4gJWQsICIKKwkJICAgInJzc2k6JWQsIHF1YWw6ICVkXG4iLCBfX2Z1bmNfXywgcmV0LCBsZTMyX3RvX2NwdShyc3NpKSwKKwkJICAgbGV2ZWxfdG9fcXVhbChsZTMyX3RvX2NwdShyc3NpKSkpOworCisJLyogR2V0IEFQIGNhcGFiaWxpdGllcyAqLworCWlmIChpbmZvKSB7CisJCWNhcGFiaWxpdHkgPSBsZTE2X3RvX2NwdShpbmZvLT5yZXNwX2llLmNhcGEpOworCX0gZWxzZSB7CisJCS8qIFNldCBhdGxlYXN0IEVTUy9JQlNTIGNhcGFiaWxpdHkgKi8KKwkJY2FwYWJpbGl0eSA9IChwcml2LT5pbmZyYV9tb2RlID09IE5ESVNfODAyMTFfSU5GUkFfSU5GUkEpID8KKwkJCQlXTEFOX0NBUEFCSUxJVFlfRVNTIDogV0xBTl9DQVBBQklMSVRZX0lCU1M7CisJfQorCisJLyogR2V0IGNoYW5uZWwgYW5kIGJlYWNvbiBpbnRlcnZhbCAqLworCWxlbiA9IHNpemVvZihjb25maWcpOworCXJldCA9IHJuZGlzX3F1ZXJ5X29pZCh1c2JkZXYsIE9JRF84MDJfMTFfQ09ORklHVVJBVElPTiwgJmNvbmZpZywgJmxlbik7CisJbmV0ZGV2X2RiZyh1c2JkZXYtPm5ldCwgIiVzKCk6IE9JRF84MDJfMTFfQ09ORklHVVJBVElPTiAtPiAlZFxuIiwKKwkJCQlfX2Z1bmNfXywgcmV0KTsKKwlpZiAocmV0ID49IDApIHsKKwkJYmVhY29uX2ludGVydmFsID0gbGUxNl90b19jcHUoY29uZmlnLmJlYWNvbl9wZXJpb2QpOworCQljaGFubmVsID0gaWVlZTgwMjExX2dldF9jaGFubmVsKHByaXYtPndkZXYud2lwaHksCisJCQkJS0haX1RPX01IWihsZTMyX3RvX2NwdShjb25maWcuZHNfY29uZmlnKSkpOworCQlpZiAoIWNoYW5uZWwpIHsKKwkJCW5ldGRldl93YXJuKHVzYmRldi0+bmV0LCAiJXMoKTogY291bGQgbm90IGdldCBjaGFubmVsLiIKKwkJCQkJCSAiXG4iLCBfX2Z1bmNfXyk7CisJCQlyZXR1cm47CisJCX0KKwl9IGVsc2UgeworCQluZXRkZXZfd2Fybih1c2JkZXYtPm5ldCwgIiVzKCk6IGNvdWxkIG5vdCBnZXQgY29uZmlndXJhdGlvbi5cbiIsCisJCQkJCSBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBHZXQgU1NJRCwgaW4gY2FzZSBvZiBlcnJvciwgdXNlIHplcm8gbGVuZ3RoIFNTSUQgYW5kIGlnbm9yZSBlcnJvci4gKi8KKwlsZW4gPSBzaXplb2Yoc3NpZCk7CisJbWVtc2V0KCZzc2lkLCAwLCBzaXplb2Yoc3NpZCkpOworCXJldCA9IHJuZGlzX3F1ZXJ5X29pZCh1c2JkZXYsIE9JRF84MDJfMTFfU1NJRCwgJnNzaWQsICZsZW4pOworCW5ldGRldl9kYmcodXNiZGV2LT5uZXQsICIlcygpOiBPSURfODAyXzExX1NTSUQgLT4gJWQsIGxlbjogJWQsIHNzaWQ6ICIKKwkJCQkiJyUuMzJzJ1xuIiwgX19mdW5jX18sIHJldCwKKwkJCQlsZTMyX3RvX2NwdShzc2lkLmxlbmd0aCksIHNzaWQuZXNzaWQpOworCisJaWYgKGxlMzJfdG9fY3B1KHNzaWQubGVuZ3RoKSA+IDMyKQorCQlzc2lkLmxlbmd0aCA9IGNwdV90b19sZTMyKDMyKTsKKworCWllX2J1ZlswXSA9IFdMQU5fRUlEX1NTSUQ7CisJaWVfYnVmWzFdID0gbGUzMl90b19jcHUoc3NpZC5sZW5ndGgpOworCW1lbWNweSgmaWVfYnVmWzJdLCBzc2lkLmVzc2lkLCBsZTMyX3RvX2NwdShzc2lkLmxlbmd0aCkpOworCisJaWVfbGVuID0gbGUzMl90b19jcHUoc3NpZC5sZW5ndGgpICsgMjsKKworCS8qIG5vIHRzZiAqLworCXRpbWVzdGFtcCA9IDA7CisKKwluZXRkZXZfZGJnKHVzYmRldi0+bmV0LCAiJXMoKTogY2hhbm5lbDolZChmcmVxKSwgYnNzaWQ6WyVwTV0sIHRzZjolZCwgIgorCQkiY2FwYToleCwgYmVhY29uIGludDolZCwgcmVzcF9pZShsZW46JWQsIGVzc2lkOiclLjMycycpLCAiCisJCSJzaWduYWw6JWRcbiIsIF9fZnVuY19fLCAoY2hhbm5lbCA/IGNoYW5uZWwtPmNlbnRlcl9mcmVxIDogLTEpLAorCQlic3NpZCwgKHUzMil0aW1lc3RhbXAsIGNhcGFiaWxpdHksIGJlYWNvbl9pbnRlcnZhbCwgaWVfbGVuLAorCQlzc2lkLmVzc2lkLCBzaWduYWwpOworCisJY2ZnODAyMTFfaW5mb3JtX2Jzcyhwcml2LT53ZGV2LndpcGh5LCBjaGFubmVsLCBic3NpZCwKKwkJdGltZXN0YW1wLCBjYXBhYmlsaXR5LCBiZWFjb25faW50ZXJ2YWwsIGllX2J1ZiwgaWVfbGVuLAorCQlzaWduYWwsIEdGUF9LRVJORUwpOworfQorCiAvKgogICogd29ya2VycywgaW5kaWNhdGlvbiBoYW5kbGVycywgZGV2aWNlIHBvbGxlcgogICovCkBAIC0yNTA3LDYgKzI3MzAsNyBAQAogCXU4ICpyZXFfaWUsICpyZXNwX2llOwogCWludCByZXQsIG9mZnNldDsKIAlib29sIHJvYW1lZCA9IGZhbHNlOworCWJvb2wgbWF0Y2hfYnNzOwogCiAJaWYgKHByaXYtPmluZnJhX21vZGUgPT0gTkRJU184MDIxMV9JTkZSQV9JTkZSQSAmJiBwcml2LT5jb25uZWN0ZWQpIHsKIAkJLyogcmVjZWl2ZWQgbWVkaWEgY29ubmVjdCBpbmRpY2F0aW9uIHdoaWxlIGNvbm5lY3RlZCwgZWl0aGVyCkBAIC0yNTU4LDYgKzI3ODIsMTMgQEAKIAkJCQkJcmVzcF9pZV9sZW4gPQogCQkJCQkJQ09OVFJPTF9CVUZGRVJfU0laRSAtIG9mZnNldDsKIAkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qIFNpbmNlIHJuZGlzX3dsYW5fY3JhZnRfY29ubmVjdGVkX2JzcygpIG1pZ2h0IHVzZSBpbmZvCisJCQkgKiBsYXRlciBhbmQgZXhwZWN0cyBpbmZvIHRvIGNvbnRhaW4gdmFsaWQgZGF0YSBpZgorCQkJICogbm9uLW51bGwsIGZyZWUgaW5mbyBhbmQgc2V0IE5VTEwgaGVyZS4KKwkJCSAqLworCQkJa2ZyZWUoaW5mbyk7CisJCQlpbmZvID0gTlVMTDsKIAkJfQogCX0gZWxzZSBpZiAoV0FSTl9PTihwcml2LT5pbmZyYV9tb2RlICE9IE5ESVNfODAyMTFfSU5GUkFfQURIT0MpKQogCQlyZXR1cm47CkBAIC0yNTY5LDEzICsyODAwLDI2IEBACiAJbmV0ZGV2X2RiZyh1c2JkZXYtPm5ldCwgImxpbmsgdXAgd29yazogWyVwTV0lc1xuIiwKIAkJICAgYnNzaWQsIHJvYW1lZCA/ICIgcm9hbWVkIiA6ICIiKTsKIAotCS8qIEludGVybmFsIGJzcyBsaXN0IGluIGRldmljZSBhbHdheXMgY29udGFpbnMgYXQgbGVhc3QgdGhlIGN1cnJlbnRseQorCS8qIEludGVybmFsIGJzcyBsaXN0IGluIGRldmljZSBzaG91bGQgY29udGFpbiBhdCBsZWFzdCB0aGUgY3VycmVudGx5CiAJICogY29ubmVjdGVkIGJzcyBhbmQgd2UgY2FuIGdldCBpdCB0byBjZmc4MDIxMSB3aXRoCiAJICogcm5kaXNfY2hlY2tfYnNzaWRfbGlzdCgpLgotCSAqIE5PVEU6IFRoaXMgaXMgdHJ1ZSBmb3IgQnJvYWRjb20gY2hpcCwgYnV0IG5vdCBtZW50aW9uZWQgaW4gUk5ESVMKLQkgKiBzcGVjLgorCSAqCisJICogTkRJUyBzcGVjIHNheXM6ICJJZiB0aGUgZGV2aWNlIGlzIGFzc29jaWF0ZWQsIGJ1dCB0aGUgYXNzb2NpYXRlZAorCSAqICBCU1NJRCBpcyBub3QgaW4gaXRzIEJTU0lEIHNjYW4gbGlzdCwgdGhlbiB0aGUgZHJpdmVyIG11c3QgYWRkIGFuCisJICogIGVudHJ5IGZvciB0aGUgQlNTSUQgYXQgdGhlIGVuZCBvZiB0aGUgZGF0YSB0aGF0IGl0IHJldHVybnMgaW4KKwkgKiAgcmVzcG9uc2UgdG8gcXVlcnkgb2YgT0lEXzgwMl8xMV9CU1NJRF9MSVNULiIKKwkgKgorCSAqIE5PVEU6IFNlZW1zIHRvIGJlIHRydWUgZm9yIEJDTTQzMjBiIHZhcmlhbnQsIGJ1dCBub3QgQkNNNDMyMGEuCiAJICovCi0Jcm5kaXNfY2hlY2tfYnNzaWRfbGlzdCh1c2JkZXYpOworCW1hdGNoX2JzcyA9IGZhbHNlOworCXJuZGlzX2NoZWNrX2Jzc2lkX2xpc3QodXNiZGV2LCBic3NpZCwgJm1hdGNoX2Jzcyk7CisKKwlpZiAoIWlzX3plcm9fZXRoZXJfYWRkcihic3NpZCkgJiYgIW1hdGNoX2JzcykgeworCQkvKiBDb3VsZG4ndCBnZXQgYnNzIGZyb20gZGV2aWNlLCB3ZSBuZWVkIHRvIG1hbnVhbGx5IGNyYWZ0IGJzcworCQkgKiBmb3IgY2ZnODAyMTEuCisJCSAqLworCQlybmRpc193bGFuX2NyYWZ0X2Nvbm5lY3RlZF9ic3ModXNiZGV2LCBic3NpZCwgaW5mbyk7CisJfQogCiAJaWYgKHByaXYtPmluZnJhX21vZGUgPT0gTkRJU184MDIxMV9JTkZSQV9JTkZSQSkgewogCQlpZiAoIXJvYW1lZCkKQEAgLTI5MTgsNiArMzE2MiwzMiBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKK3N0YXRpYyB2b2lkIHJuZGlzX2RvX2NxbShzdHJ1Y3QgdXNibmV0ICp1c2JkZXYsIHMzMiByc3NpKQoreworCXN0cnVjdCBybmRpc193bGFuX3ByaXZhdGUgKnByaXYgPSBnZXRfcm5kaXNfd2xhbl9wcml2KHVzYmRldik7CisJZW51bSBubDgwMjExX2NxbV9yc3NpX3RocmVzaG9sZF9ldmVudCBldmVudDsKKwlpbnQgdGhvbGQsIGh5c3QsIGxhc3RfZXZlbnQ7CisKKwlpZiAocHJpdi0+Y3FtX3Jzc2lfdGhvbGQgPj0gMCB8fCByc3NpID49IDApCisJCXJldHVybjsKKwlpZiAocHJpdi0+aW5mcmFfbW9kZSAhPSBORElTXzgwMjExX0lORlJBX0lORlJBKQorCQlyZXR1cm47CisKKwlsYXN0X2V2ZW50ID0gcHJpdi0+bGFzdF9jcW1fZXZlbnRfcnNzaTsKKwl0aG9sZCA9IHByaXYtPmNxbV9yc3NpX3Rob2xkOworCWh5c3QgPSBwcml2LT5jcW1fcnNzaV9oeXN0OworCisJaWYgKHJzc2kgPCB0aG9sZCAmJiAobGFzdF9ldmVudCA9PSAwIHx8IHJzc2kgPCBsYXN0X2V2ZW50IC0gaHlzdCkpCisJCWV2ZW50ID0gTkw4MDIxMV9DUU1fUlNTSV9USFJFU0hPTERfRVZFTlRfTE9XOworCWVsc2UgaWYgKHJzc2kgPiB0aG9sZCAmJiAobGFzdF9ldmVudCA9PSAwIHx8IHJzc2kgPiBsYXN0X2V2ZW50ICsgaHlzdCkpCisJCWV2ZW50ID0gTkw4MDIxMV9DUU1fUlNTSV9USFJFU0hPTERfRVZFTlRfSElHSDsKKwllbHNlCisJCXJldHVybjsKKworCXByaXYtPmxhc3RfY3FtX2V2ZW50X3Jzc2kgPSByc3NpOworCWNmZzgwMjExX2NxbV9yc3NpX25vdGlmeSh1c2JkZXYtPm5ldCwgZXZlbnQsIEdGUF9LRVJORUwpOworfQorCiAjZGVmaW5lIERFVklDRV9QT0xMRVJfSklGRklFUyAoSFopCiBzdGF0aWMgdm9pZCBybmRpc19kZXZpY2VfcG9sbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKQEAgLTI5MzQsMTMgKzMyMDQsMjggQEAKIAkgKiBhbHNvIHBvbGxzIGRldmljZSB3aXRoIHJuZGlzX2NvbW1hbmQoKSBhbmQgY2F0Y2hlcyBmb3IgbWVkaWEgbGluawogCSAqIGluZGljYXRpb25zLgogCSAqLwotCWlmICghaXNfYXNzb2NpYXRlZCh1c2JkZXYpKQorCWlmICghaXNfYXNzb2NpYXRlZCh1c2JkZXYpKSB7CisJCS8qIFdvcmthcm91bmQgYmFkIHNjYW5uaW5nIGluIEJDTTQzMjBhIGRldmljZXMgd2l0aCBhY3RpdmUKKwkJICogYmFja2dyb3VuZCBzY2FubmluZyB3aGVuIG5vdCBhc3NvY2lhdGVkLgorCQkgKi8KKwkJaWYgKHByaXYtPmRldmljZV90eXBlID09IFJORElTX0JDTTQzMjBBICYmIHByaXYtPnJhZGlvX29uICYmCisJCSAgICAhcHJpdi0+c2Nhbl9yZXF1ZXN0KSB7CisJCQkvKiBHZXQgcHJldmlvdXMgc2NhbiByZXN1bHRzICovCisJCQlybmRpc19jaGVja19ic3NpZF9saXN0KHVzYmRldiwgTlVMTCwgTlVMTCk7CisKKwkJCS8qIEluaXRpYXRlIG5ldyBzY2FuICovCisJCQlybmRpc19zdGFydF9ic3NpZF9saXN0X3NjYW4odXNiZGV2KTsKKwkJfQorCiAJCWdvdG8gZW5kOworCX0KIAogCWxlbiA9IHNpemVvZihyc3NpKTsKIAlyZXQgPSBybmRpc19xdWVyeV9vaWQodXNiZGV2LCBPSURfODAyXzExX1JTU0ksICZyc3NpLCAmbGVuKTsKLQlpZiAocmV0ID09IDApCisJaWYgKHJldCA9PSAwKSB7CiAJCXByaXYtPmxhc3RfcXVhbCA9IGxldmVsX3RvX3F1YWwobGUzMl90b19jcHUocnNzaSkpOworCQlybmRpc19kb19jcW0odXNiZGV2LCBsZTMyX3RvX2NwdShyc3NpKSk7CisJfQogCiAJbmV0ZGV2X2RiZyh1c2JkZXYtPm5ldCwgImRldi1wb2xsZXI6IE9JRF84MDJfMTFfUlNTSSAtPiAlZCwgcnNzaTolZCwgcXVhbDogJWRcbiIsCiAJCSAgIHJldCwgbGUzMl90b19jcHUocnNzaSksIGxldmVsX3RvX3F1YWwobGUzMl90b19jcHUocnNzaSkpKTsKQEAgLTI5OTIsMTAgKzMyNzcsMTIgQEAKIC8qCiAgKiBkcml2ZXIvZGV2aWNlIGluaXRpYWxpemF0aW9uCiAgKi8KLXN0YXRpYyB2b2lkIHJuZGlzX2NvcHlfbW9kdWxlX3BhcmFtcyhzdHJ1Y3QgdXNibmV0ICp1c2JkZXYpCitzdGF0aWMgdm9pZCBybmRpc19jb3B5X21vZHVsZV9wYXJhbXMoc3RydWN0IHVzYm5ldCAqdXNiZGV2LCBpbnQgZGV2aWNlX3R5cGUpCiB7CiAJc3RydWN0IHJuZGlzX3dsYW5fcHJpdmF0ZSAqcHJpdiA9IGdldF9ybmRpc193bGFuX3ByaXYodXNiZGV2KTsKIAorCXByaXYtPmRldmljZV90eXBlID0gZGV2aWNlX3R5cGU7CisKIAlwcml2LT5wYXJhbV9jb3VudHJ5WzBdID0gbW9kcGFyYW1fY291bnRyeVswXTsKIAlwcml2LT5wYXJhbV9jb3VudHJ5WzFdID0gbW9kcGFyYW1fY291bnRyeVsxXTsKIAlwcml2LT5wYXJhbV9jb3VudHJ5WzJdID0gMDsKQEAgLTMwMzgsMTIgKzMzMjUsMjUgQEAKIAkJcHJpdi0+cGFyYW1fd29ya2Fyb3VuZF9pbnRlcnZhbCA9IG1vZHBhcmFtX3dvcmthcm91bmRfaW50ZXJ2YWw7CiB9CiAKK3N0YXRpYyBpbnQgdW5rbm93bl9lYXJseV9pbml0KHN0cnVjdCB1c2JuZXQgKnVzYmRldikKK3sKKwkvKiBjb3B5IG1vZHVsZSBwYXJhbWV0ZXJzIGZvciB1bmtub3duIHNvIHRoYXQgaXdjb25maWcgcmVwb3J0cyB0eHBvd2VyCisJICogYW5kIHdvcmthcm91bmQgcGFyYW1ldGVyIGlzIGNvcGllZCB0byBwcml2YXRlIHN0cnVjdHVyZSBjb3JyZWN0bHkuCisJICovCisJcm5kaXNfY29weV9tb2R1bGVfcGFyYW1zKHVzYmRldiwgUk5ESVNfVU5LTk9XTik7CisKKwkvKiBUaGlzIGlzIHVua25vd24gZGV2aWNlLCBzbyBkbyBub3QgdHJ5IHNldCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuCisJICovCisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBiY200MzIwYV9lYXJseV9pbml0KHN0cnVjdCB1c2JuZXQgKnVzYmRldikKIHsKIAkvKiBjb3B5IG1vZHVsZSBwYXJhbWV0ZXJzIGZvciBiY200MzIwYSBzbyB0aGF0IGl3Y29uZmlnIHJlcG9ydHMgdHhwb3dlcgogCSAqIGFuZCB3b3JrYXJvdW5kIHBhcmFtZXRlciBpcyBjb3BpZWQgdG8gcHJpdmF0ZSBzdHJ1Y3R1cmUgY29ycmVjdGx5LgogCSAqLwotCXJuZGlzX2NvcHlfbW9kdWxlX3BhcmFtcyh1c2JkZXYpOworCXJuZGlzX2NvcHlfbW9kdWxlX3BhcmFtcyh1c2JkZXYsIFJORElTX0JDTTQzMjBBKTsKIAogCS8qIGJjbTQzMjBhIGRvZXNuJ3QgaGFuZGxlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyB3ZWxsLiBUcnkKIAkgKiBzZXQgYW55IGFuZCB5b3UgZ2V0IHBhcnRpYWxseSB6ZXJvZWQgbWFjIGFuZCBicm9rZW4gZGV2aWNlLgpAQCAtMzA1Nyw3ICszMzU3LDcgQEAKIAlzdHJ1Y3Qgcm5kaXNfd2xhbl9wcml2YXRlICpwcml2ID0gZ2V0X3JuZGlzX3dsYW5fcHJpdih1c2JkZXYpOwogCWNoYXIgYnVmWzhdOwogCi0Jcm5kaXNfY29weV9tb2R1bGVfcGFyYW1zKHVzYmRldik7CisJcm5kaXNfY29weV9tb2R1bGVfcGFyYW1zKHVzYmRldiwgUk5ESVNfQkNNNDMyMEIpOwogCiAJLyogRWFybHkgaW5pdGlhbGl6YXRpb24gc2V0dGluZ3MsIHNldHRpbmcgdGhlc2Ugd29uJ3QgaGF2ZSBlZmZlY3QKIAkgKiBpZiBjYWxsZWQgYWZ0ZXIgZ2VuZXJpY19ybmRpc19iaW5kKCkuCkBAIC0zMTg3LDEzICszNDg3LDE1IEBACiAKIAlzZXRfZGVmYXVsdF9pd19wYXJhbXModXNiZGV2KTsKIAorCXByaXYtPnBvd2VyX21vZGUgPSAtMTsKKwogCS8qIHNldCBkZWZhdWx0IHJ0cy9mcmFnICovCiAJcm5kaXNfc2V0X3dpcGh5X3BhcmFtcyh3aXBoeSwKIAkJCVdJUEhZX1BBUkFNX0ZSQUdfVEhSRVNIT0xEIHwgV0lQSFlfUEFSQU1fUlRTX1RIUkVTSE9MRCk7CiAKLQkvKiB0dXJuIHJhZGlvIG9uICovCi0JcHJpdi0+cmFkaW9fb24gPSB0cnVlOwotCWRpc2Fzc29jaWF0ZSh1c2JkZXYsIHRydWUpOworCS8qIHR1cm4gcmFkaW8gb2ZmIG9uIGluaXQgKi8KKwlwcml2LT5yYWRpb19vbiA9IGZhbHNlOworCWRpc2Fzc29jaWF0ZSh1c2JkZXYsIGZhbHNlKTsKIAluZXRpZl9jYXJyaWVyX29mZih1c2JkZXYtPm5ldCk7CiAKIAlyZXR1cm4gMDsKQEAgLTMzMjAsNyArMzYyMiw3IEBACiAJLnR4X2ZpeHVwID0Jcm5kaXNfdHhfZml4dXAsCiAJLnJlc2V0ID0Jcm5kaXNfd2xhbl9yZXNldCwKIAkuc3RvcCA9CQlybmRpc193bGFuX3N0b3AsCi0JLmVhcmx5X2luaXQgPQliY200MzIwYV9lYXJseV9pbml0LAorCS5lYXJseV9pbml0ID0JdW5rbm93bl9lYXJseV9pbml0LAogCS5pbmRpY2F0aW9uID0Jcm5kaXNfd2xhbl9pbmRpY2F0aW9uLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL0tjb25maWcgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvS2NvbmZpZwppbmRleCA0Mzk2ZDRiLi42ZjM4M2NkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvS2NvbmZpZwpAQCAtNTMsNTEgKzUzLDQxIEBACiAKIAkgIFdoZW4gY29tcGlsZWQgYXMgYSBtb2R1bGUsIHRoaXMgZHJpdmVyIHdpbGwgYmUgY2FsbGVkIHJ0NjFwY2kuCiAKLWNvbmZpZyBSVDI4MDBQQ0lfUENJCi0JYm9vbGVhbgotCWRlcGVuZHMgb24gUENJCi0JZGVmYXVsdCB5Ci0KLWNvbmZpZyBSVDI4MDBQQ0lfU09DCi0JYm9vbGVhbgotCWRlcGVuZHMgb24gUkFMSU5LX1JUMjg4WCB8fCBSQUxJTktfUlQzMDVYCi0JZGVmYXVsdCB5Ci0KIGNvbmZpZyBSVDI4MDBQQ0kKLQl0cmlzdGF0ZSAiUmFsaW5rIHJ0Mjh4eC9ydDMweHgvcnQzNXh4IChQQ0kvUENJZS9QQ01DSUEpIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiAoUlQyODAwUENJX1BDSSB8fCBSVDI4MDBQQ0lfU09DKSAmJiBFWFBFUklNRU5UQUwKKwl0cmlzdGF0ZSAiUmFsaW5rIHJ0Mjd4eC9ydDI4eHgvcnQzMHh4IChQQ0kvUENJZS9QQ01DSUEpIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBQQ0kgfHwgUkFMSU5LX1JUMjg4WCB8fCBSQUxJTktfUlQzMDVYCiAJc2VsZWN0IFJUMjgwMF9MSUIKLQlzZWxlY3QgUlQyWDAwX0xJQl9QQ0kgaWYgUlQyODAwUENJX1BDSQotCXNlbGVjdCBSVDJYMDBfTElCX1NPQyBpZiBSVDI4MDBQQ0lfU09DCisJc2VsZWN0IFJUMlgwMF9MSUJfUENJIGlmIFBDSQorCXNlbGVjdCBSVDJYMDBfTElCX1NPQyBpZiBSQUxJTktfUlQyODhYIHx8IFJBTElOS19SVDMwNVgKIAlzZWxlY3QgUlQyWDAwX0xJQl9IVAogCXNlbGVjdCBSVDJYMDBfTElCX0ZJUk1XQVJFCiAJc2VsZWN0IFJUMlgwMF9MSUJfQ1JZUFRPCiAJc2VsZWN0IENSQ19DQ0lUVAogCXNlbGVjdCBFRVBST01fOTNDWDYKIAktLS1oZWxwLS0tCi0JICBUaGlzIGFkZHMgc3VwcG9ydCBmb3IgcnQyODAwL3J0MzAwMC9ydDM1MDAgd2lyZWxlc3MgY2hpcHNldCBmYW1pbHkuCi0JICBTdXBwb3J0ZWQgY2hpcHM6IFJUMjc2MCwgUlQyNzkwLCBSVDI4NjAsIFJUMjg4MCwgUlQyODkwICYgUlQzMDUyCi0KLQkgIFRoaXMgZHJpdmVyIGlzIG5vbi1mdW5jdGlvbmFsIGF0IHRoZSBtb21lbnQgYW5kIGlzIGludGVuZGVkIGZvcgotCSAgZGV2ZWxvcGVycy4KKwkgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciBydDI3eHgvcnQyOHh4L3J0MzB4eCB3aXJlbGVzcyBjaGlwc2V0IGZhbWlseS4KKwkgIFN1cHBvcnRlZCBjaGlwczogUlQyNzYwLCBSVDI3OTAsIFJUMjg2MCwgUlQyODgwLCBSVDI4OTAsIFJUMzA1MiwKKwkJCSAgIFJUMzA5MCwgUlQzMDkxICYgUlQzMDkyCiAKIAkgIFdoZW4gY29tcGlsZWQgYXMgYSBtb2R1bGUsIHRoaXMgZHJpdmVyIHdpbGwgYmUgY2FsbGVkICJydDI4MDBwY2kua28iLgogCiBpZiBSVDI4MDBQQ0kKIAotY29uZmlnIFJUMjgwMFBDSV9SVDMwWFgKLQlib29sICJydDI4MDBwY2kgLSBJbmNsdWRlIHN1cHBvcnQgZm9yIHJ0MzB4eCAoUENJL1BDSWUvUENNQ0lBKSBkZXZpY2VzIgotCWRlZmF1bHQgeQorY29uZmlnIFJUMjgwMFBDSV9SVDMzWFgKKwlib29sICJydDI4MDBwY2kgLSBJbmNsdWRlIHN1cHBvcnQgZm9yIHJ0MzN4eCBkZXZpY2VzIChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCisJZGVmYXVsdCBuCiAJLS0taGVscC0tLQotCSAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIHJ0MzB4eCB3aXJlbGVzcyBjaGlwc2V0IGZhbWlseSB0byB0aGUKKwkgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciBydDMzeHggd2lyZWxlc3MgY2hpcHNldCBmYW1pbHkgdG8gdGhlCiAJICBydDI4MDBwY2kgZHJpdmVyLgotCSAgU3VwcG9ydGVkIGNoaXBzOiBSVDMwOTAsIFJUMzA5MSAmIFJUMzA5MgorCSAgU3VwcG9ydGVkIGNoaXBzOiBSVDMzOTAKIAogCSAgU3VwcG9ydCBmb3IgdGhlc2UgZGV2aWNlcyBpcyBub24tZnVuY3Rpb25hbCBhdCB0aGUgbW9tZW50IGFuZCBpcwogCSAgaW50ZW5kZWQgZm9yIHRlc3RlcnMgYW5kIGRldmVsb3BlcnMuCiAKIGNvbmZpZyBSVDI4MDBQQ0lfUlQzNVhYCi0JYm9vbCAicnQyODAwcGNpIC0gSW5jbHVkZSBzdXBwb3J0IGZvciBydDM1eHggKFBDSS9QQ0llL1BDTUNJQSkgZGV2aWNlcyIKKwlib29sICJydDI4MDBwY2kgLSBJbmNsdWRlIHN1cHBvcnQgZm9yIHJ0MzV4eCBkZXZpY2VzIChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCiAJZGVmYXVsdCBuCiAJLS0taGVscC0tLQogCSAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIHJ0MzV4eCB3aXJlbGVzcyBjaGlwc2V0IGZhbWlseSB0byB0aGUKQEAgLTEzNCw4ICsxMjQsOCBAQAogCSAgV2hlbiBjb21waWxlZCBhcyBhIG1vZHVsZSwgdGhpcyBkcml2ZXIgd2lsbCBiZSBjYWxsZWQgcnQ3M3VzYi4KIAogY29uZmlnIFJUMjgwMFVTQgotCXRyaXN0YXRlICJSYWxpbmsgcnQyODAwIChVU0IpIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBVU0IgJiYgRVhQRVJJTUVOVEFMCisJdHJpc3RhdGUgIlJhbGluayBydDI3eHgvcnQyOHh4L3J0MzB4eCAoVVNCKSBzdXBwb3J0IgorCWRlcGVuZHMgb24gVVNCCiAJc2VsZWN0IFJUMjgwMF9MSUIKIAlzZWxlY3QgUlQyWDAwX0xJQl9VU0IKIAlzZWxlY3QgUlQyWDAwX0xJQl9IVApAQCAtMTQzLDMwICsxMzMsMjggQEAKIAlzZWxlY3QgUlQyWDAwX0xJQl9DUllQVE8KIAlzZWxlY3QgQ1JDX0NDSVRUCiAJLS0taGVscC0tLQotCSAgVGhpcyBhZGRzIGV4cGVyaW1lbnRhbCBzdXBwb3J0IGZvciBydDI4MDAgd2lyZWxlc3MgY2hpcHNldCBmYW1pbHkuCi0JICBTdXBwb3J0ZWQgY2hpcHM6IFJUMjc3MCwgUlQyODcwICYgUlQzMDcwLgotCi0JICBLbm93biBpc3N1ZXM6Ci0JICAtIHN1cHBvcnQgZm9yIFJUMjg3MCBjaGlwcyBkb2Vzbid0IHdvcmsgd2l0aCA4MDIuMTFuIEFQcyB5ZXQKLQkgIC0gc3VwcG9ydCBmb3IgUlQzMDcwIGNoaXBzIGlzIG5vbi1mdW5jdGlvbmFsIGF0IHRoZSBtb21lbnQKKwkgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciBydDI3eHgvcnQyOHh4L3J0MzB4eCB3aXJlbGVzcyBjaGlwc2V0IGZhbWlseS4KKwkgIFN1cHBvcnRlZCBjaGlwczogUlQyNzcwLCBSVDI4NzAgJiBSVDMwNzAsIFJUMzA3MSAmIFJUMzA3MgogCiAJICBXaGVuIGNvbXBpbGVkIGFzIGEgbW9kdWxlLCB0aGlzIGRyaXZlciB3aWxsIGJlIGNhbGxlZCAicnQyODAwdXNiLmtvIi4KIAogaWYgUlQyODAwVVNCCiAKLWNvbmZpZyBSVDI4MDBVU0JfUlQzMFhYCi0JYm9vbCAicnQyODAwdXNiIC0gSW5jbHVkZSBzdXBwb3J0IGZvciBydDMweHggKFVTQikgZGV2aWNlcyIKLQlkZWZhdWx0IHkKK2NvbmZpZyBSVDI4MDBVU0JfUlQzM1hYCisJYm9vbCAicnQyODAwdXNiIC0gSW5jbHVkZSBzdXBwb3J0IGZvciBydDMzeHggZGV2aWNlcyAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAorCWRlZmF1bHQgbgogCS0tLWhlbHAtLS0KLQkgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciBydDMweHggd2lyZWxlc3MgY2hpcHNldCBmYW1pbHkgdG8gdGhlCisJICBUaGlzIGFkZHMgc3VwcG9ydCBmb3IgcnQzM3h4IHdpcmVsZXNzIGNoaXBzZXQgZmFtaWx5IHRvIHRoZQogCSAgcnQyODAwdXNiIGRyaXZlci4KLQkgIFN1cHBvcnRlZCBjaGlwczogUlQzMDcwLCBSVDMwNzEgJiBSVDMwNzIKKwkgIFN1cHBvcnRlZCBjaGlwczogUlQzMzcwCiAKIAkgIFN1cHBvcnQgZm9yIHRoZXNlIGRldmljZXMgaXMgbm9uLWZ1bmN0aW9uYWwgYXQgdGhlIG1vbWVudCBhbmQgaXMKIAkgIGludGVuZGVkIGZvciB0ZXN0ZXJzIGFuZCBkZXZlbG9wZXJzLgogCiBjb25maWcgUlQyODAwVVNCX1JUMzVYWAotCWJvb2wgInJ0MjgwMHVzYiAtIEluY2x1ZGUgc3VwcG9ydCBmb3IgcnQzNXh4IChVU0IpIGRldmljZXMiCisJYm9vbCAicnQyODAwdXNiIC0gSW5jbHVkZSBzdXBwb3J0IGZvciBydDM1eHggZGV2aWNlcyAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAogCWRlZmF1bHQgbgogCS0tLWhlbHAtLS0KIAkgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciBydDM1eHggd2lyZWxlc3MgY2hpcHNldCBmYW1pbHkgdG8gdGhlCkBAIC0xODAsOSArMTY4LDkgQEAKIAlib29sICJydDI4MDB1c2IgLSBJbmNsdWRlIHN1cHBvcnQgZm9yIHVua25vd24gKFVTQikgZGV2aWNlcyIKIAlkZWZhdWx0IG4KIAktLS1oZWxwLS0tCi0JICBUaGlzIGFkZHMgc3VwcG9ydCBmb3IgcnQyODAwIGZhbWlseSBkZXZpY2VzIHRoYXQgYXJlIGtub3duIHRvCi0JICBoYXZlIGEgcnQyODAwIGZhbWlseSBjaGlwc2V0LCBidXQgZm9yIHdoaWNoIHRoZSBleGFjdCBjaGlwc2V0Ci0JICBpcyB1bmtub3duLgorCSAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIHJ0MjgwMHVzYiBkZXZpY2VzIHRoYXQgYXJlIGtub3duIHRvCisJICBoYXZlIGEgcnQyOHh4IGZhbWlseSBjb21wYXRpYmxlIGNoaXBzZXQsIGJ1dCBmb3Igd2hpY2ggdGhlIGV4YWN0CisJICBjaGlwc2V0IGlzIHVua25vd24uCiAKIAkgIFN1cHBvcnQgc3RhdHVzIGZvciB0aGVzZSBkZXZpY2VzIGlzIHVua25vd24sIGFuZCBlbmFibGluZyB0aGVzZQogCSAgZGV2aWNlcyBtYXkgb3IgbWF5IG5vdCB3b3JrLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjQwMHBjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjQwMHBjaS5jCmluZGV4IDRmNDIwYTkuLjU0Y2E0OWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI0MDBwY2kuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNDAwcGNpLmMKQEAgLTYzMyw2ICs2MzMsODggQEAKIH0KIAogLyoKKyAqIFF1ZXVlIGhhbmRsZXJzLgorICovCitzdGF0aWMgdm9pZCBydDI0MDBwY2lfc3RhcnRfcXVldWUoc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlKQoreworCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBxdWV1ZS0+cnQyeDAwZGV2OworCXUzMiByZWc7CisKKwlzd2l0Y2ggKHF1ZXVlLT5xaWQpIHsKKwljYXNlIFFJRF9SWDoKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBSWENTUjAsICZyZWcpOworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgUlhDU1IwX0RJU0FCTEVfUlgsIDApOworCQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBSWENTUjAsIHJlZyk7CisJCWJyZWFrOworCWNhc2UgUUlEX0JFQUNPTjoKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBDU1IxNCwgJnJlZyk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBDU1IxNF9UU0ZfQ09VTlQsIDEpOworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQ1NSMTRfVEJDTiwgMSk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBDU1IxNF9CRUFDT05fR0VOLCAxKTsKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgQ1NSMTQsIHJlZyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgcnQyNDAwcGNpX2tpY2tfcXVldWUoc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlKQoreworCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBxdWV1ZS0+cnQyeDAwZGV2OworCXUzMiByZWc7CisKKwlzd2l0Y2ggKHF1ZXVlLT5xaWQpIHsKKwljYXNlIFFJRF9BQ19WTzoKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBUWENTUjAsICZyZWcpOworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhDU1IwX0tJQ0tfUFJJTywgMSk7CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYQ1NSMCwgcmVnKTsKKwkJYnJlYWs7CisJY2FzZSBRSURfQUNfVkk6CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgVFhDU1IwLCAmcmVnKTsKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYQ1NSMF9LSUNLX1RYLCAxKTsKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhDU1IwLCByZWcpOworCQlicmVhazsKKwljYXNlIFFJRF9BVElNOgorCQlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRYQ1NSMCwgJnJlZyk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWENTUjBfS0lDS19BVElNLCAxKTsKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhDU1IwLCByZWcpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJ0MjQwMHBjaV9zdG9wX3F1ZXVlKHN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZSkKK3sKKwlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gcXVldWUtPnJ0MngwMGRldjsKKwl1MzIgcmVnOworCisJc3dpdGNoIChxdWV1ZS0+cWlkKSB7CisJY2FzZSBRSURfQUNfVk86CisJY2FzZSBRSURfQUNfVkk6CisJY2FzZSBRSURfQVRJTToKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBUWENTUjAsICZyZWcpOworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhDU1IwX0FCT1JULCAxKTsKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhDU1IwLCByZWcpOworCQlicmVhazsKKwljYXNlIFFJRF9SWDoKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBSWENTUjAsICZyZWcpOworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgUlhDU1IwX0RJU0FCTEVfUlgsIDEpOworCQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBSWENTUjAsIHJlZyk7CisJCWJyZWFrOworCWNhc2UgUUlEX0JFQUNPTjoKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBDU1IxNCwgJnJlZyk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBDU1IxNF9UU0ZfQ09VTlQsIDApOworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQ1NSMTRfVEJDTiwgMCk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBDU1IxNF9CRUFDT05fR0VOLCAwKTsKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgQ1NSMTQsIHJlZyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworLyoKICAqIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucy4KICAqLwogc3RhdGljIGJvb2wgcnQyNDAwcGNpX2dldF9lbnRyeV9zdGF0ZShzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5KQpAQCAtODc4LDE4ICs5NjAsNiBAQAogLyoKICAqIERldmljZSBzdGF0ZSBzd2l0Y2ggaGFuZGxlcnMuCiAgKi8KLXN0YXRpYyB2b2lkIHJ0MjQwMHBjaV90b2dnbGVfcngoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKLQkJCQllbnVtIGRldl9zdGF0ZSBzdGF0ZSkKLXsKLQl1MzIgcmVnOwotCi0JcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBSWENTUjAsICZyZWcpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBSWENTUjBfRElTQUJMRV9SWCwKLQkJCSAgIChzdGF0ZSA9PSBTVEFURV9SQURJT19SWF9PRkYpIHx8Ci0JCQkgICAoc3RhdGUgPT0gU1RBVEVfUkFESU9fUlhfT0ZGX0xJTkspKTsKLQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBSWENTUjAsIHJlZyk7Ci19Ci0KIHN0YXRpYyB2b2lkIHJ0MjQwMHBjaV90b2dnbGVfaXJxKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCiAJCQkJIGVudW0gZGV2X3N0YXRlIHN0YXRlKQogewpAQCAtOTg4LDEyICsxMDU4LDYgQEAKIAljYXNlIFNUQVRFX1JBRElPX09GRjoKIAkJcnQyNDAwcGNpX2Rpc2FibGVfcmFkaW8ocnQyeDAwZGV2KTsKIAkJYnJlYWs7Ci0JY2FzZSBTVEFURV9SQURJT19SWF9PTjoKLQljYXNlIFNUQVRFX1JBRElPX1JYX09OX0xJTks6Ci0JY2FzZSBTVEFURV9SQURJT19SWF9PRkY6Ci0JY2FzZSBTVEFURV9SQURJT19SWF9PRkZfTElOSzoKLQkJcnQyNDAwcGNpX3RvZ2dsZV9yeChydDJ4MDBkZXYsIHN0YXRlKTsKLQkJYnJlYWs7CiAJY2FzZSBTVEFURV9SQURJT19JUlFfT046CiAJY2FzZSBTVEFURV9SQURJT19JUlFfT05fSVNSOgogCWNhc2UgU1RBVEVfUkFESU9fSVJRX09GRjoKQEAgLTExMjUsMzIgKzExODksNiBAQAogCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIENTUjE0LCByZWcpOwogfQogCi1zdGF0aWMgdm9pZCBydDI0MDBwY2lfa2lja190eF9xdWV1ZShzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWUpCi17Ci0Jc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IHF1ZXVlLT5ydDJ4MDBkZXY7Ci0JdTMyIHJlZzsKLQotCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgVFhDU1IwLCAmcmVnKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhDU1IwX0tJQ0tfUFJJTywgKHF1ZXVlLT5xaWQgPT0gUUlEX0FDX0JFKSk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYQ1NSMF9LSUNLX1RYLCAocXVldWUtPnFpZCA9PSBRSURfQUNfQkspKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhDU1IwX0tJQ0tfQVRJTSwgKHF1ZXVlLT5xaWQgPT0gUUlEX0FUSU0pKTsKLQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWENTUjAsIHJlZyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJ0MjQwMHBjaV9raWxsX3R4X3F1ZXVlKHN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZSkKLXsKLQlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gcXVldWUtPnJ0MngwMGRldjsKLQl1MzIgcmVnOwotCi0JaWYgKHF1ZXVlLT5xaWQgPT0gUUlEX0JFQUNPTikgewotCQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBDU1IxNCwgMCk7Ci0JfSBlbHNlIHsKLQkJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBUWENTUjAsICZyZWcpOwotCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhDU1IwX0FCT1JULCAxKTsKLQkJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhDU1IwLCByZWcpOwotCX0KLX0KLQogLyoKICAqIFJYIGNvbnRyb2wgaGFuZGxlcnMKICAqLwpAQCAtMTI4NCwxMyArMTMyMiwxMyBAQAogCSAqIDQgLSBQcmlvcml0eSByaW5nIHRyYW5zbWl0IGRvbmUgaW50ZXJydXB0LgogCSAqLwogCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMzIocmVnLCBDU1I3X1RYRE9ORV9QUklPUklORykpCi0JCXJ0MjQwMHBjaV90eGRvbmUocnQyeDAwZGV2LCBRSURfQUNfQkUpOworCQlydDI0MDBwY2lfdHhkb25lKHJ0MngwMGRldiwgUUlEX0FDX1ZPKTsKIAogCS8qCiAJICogNSAtIFR4IHJpbmcgdHJhbnNtaXQgZG9uZSBpbnRlcnJ1cHQuCiAJICovCiAJaWYgKHJ0MngwMF9nZXRfZmllbGQzMihyZWcsIENTUjdfVFhET05FX1RYUklORykpCi0JCXJ0MjQwMHBjaV90eGRvbmUocnQyeDAwZGV2LCBRSURfQUNfQkspOworCQlydDI0MDBwY2lfdHhkb25lKHJ0MngwMGRldiwgUUlEX0FDX1ZJKTsKIAogCS8qIEVuYWJsZSBpbnRlcnJ1cHRzIGFnYWluLiAqLwogCXJ0MngwMGRldi0+b3BzLT5saWItPnNldF9kZXZpY2Vfc3RhdGUocnQyeDAwZGV2LApAQCAtMTYxMiw2ICsxNjUwLDcgQEAKIAkuZ2V0X3RzZgkJPSBydDI0MDBwY2lfZ2V0X3RzZiwKIAkudHhfbGFzdF9iZWFjb24JCT0gcnQyNDAwcGNpX3R4X2xhc3RfYmVhY29uLAogCS5yZmtpbGxfcG9sbAkJPSBydDJ4MDBtYWNfcmZraWxsX3BvbGwsCisJLmZsdXNoCQkJPSBydDJ4MDBtYWNfZmx1c2gsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJ0MngwMGxpYl9vcHMgcnQyNDAwcGNpX3J0MngwMF9vcHMgPSB7CkBAIC0xNjI3LDEwICsxNjY2LDExIEBACiAJLmxpbmtfc3RhdHMJCT0gcnQyNDAwcGNpX2xpbmtfc3RhdHMsCiAJLnJlc2V0X3R1bmVyCQk9IHJ0MjQwMHBjaV9yZXNldF90dW5lciwKIAkubGlua190dW5lcgkJPSBydDI0MDBwY2lfbGlua190dW5lciwKKwkuc3RhcnRfcXVldWUJCT0gcnQyNDAwcGNpX3N0YXJ0X3F1ZXVlLAorCS5raWNrX3F1ZXVlCQk9IHJ0MjQwMHBjaV9raWNrX3F1ZXVlLAorCS5zdG9wX3F1ZXVlCQk9IHJ0MjQwMHBjaV9zdG9wX3F1ZXVlLAogCS53cml0ZV90eF9kZXNjCQk9IHJ0MjQwMHBjaV93cml0ZV90eF9kZXNjLAogCS53cml0ZV9iZWFjb24JCT0gcnQyNDAwcGNpX3dyaXRlX2JlYWNvbiwKLQkua2lja190eF9xdWV1ZQkJPSBydDI0MDBwY2lfa2lja190eF9xdWV1ZSwKLQkua2lsbF90eF9xdWV1ZQkJPSBydDI0MDBwY2lfa2lsbF90eF9xdWV1ZSwKIAkuZmlsbF9yeGRvbmUJCT0gcnQyNDAwcGNpX2ZpbGxfcnhkb25lLAogCS5jb25maWdfZmlsdGVyCQk9IHJ0MjQwMHBjaV9jb25maWdfZmlsdGVyLAogCS5jb25maWdfaW50ZgkJPSBydDI0MDBwY2lfY29uZmlnX2ludGYsCkBAIC0xNjQwLDI4ICsxNjgwLDI4IEBACiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRhdGFfcXVldWVfZGVzYyBydDI0MDBwY2lfcXVldWVfcnggPSB7Ci0JLmVudHJ5X251bQkJPSBSWF9FTlRSSUVTLAorCS5lbnRyeV9udW0JCT0gMjQsCiAJLmRhdGFfc2l6ZQkJPSBEQVRBX0ZSQU1FX1NJWkUsCiAJLmRlc2Nfc2l6ZQkJPSBSWERfREVTQ19TSVpFLAogCS5wcml2X3NpemUJCT0gc2l6ZW9mKHN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3BjaSksCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRhdGFfcXVldWVfZGVzYyBydDI0MDBwY2lfcXVldWVfdHggPSB7Ci0JLmVudHJ5X251bQkJPSBUWF9FTlRSSUVTLAorCS5lbnRyeV9udW0JCT0gMjQsCiAJLmRhdGFfc2l6ZQkJPSBEQVRBX0ZSQU1FX1NJWkUsCiAJLmRlc2Nfc2l6ZQkJPSBUWERfREVTQ19TSVpFLAogCS5wcml2X3NpemUJCT0gc2l6ZW9mKHN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3BjaSksCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRhdGFfcXVldWVfZGVzYyBydDI0MDBwY2lfcXVldWVfYmNuID0gewotCS5lbnRyeV9udW0JCT0gQkVBQ09OX0VOVFJJRVMsCisJLmVudHJ5X251bQkJPSAxLAogCS5kYXRhX3NpemUJCT0gTUdNVF9GUkFNRV9TSVpFLAogCS5kZXNjX3NpemUJCT0gVFhEX0RFU0NfU0laRSwKIAkucHJpdl9zaXplCQk9IHNpemVvZihzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl9wY2kpLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkYXRhX3F1ZXVlX2Rlc2MgcnQyNDAwcGNpX3F1ZXVlX2F0aW0gPSB7Ci0JLmVudHJ5X251bQkJPSBBVElNX0VOVFJJRVMsCisJLmVudHJ5X251bQkJPSA4LAogCS5kYXRhX3NpemUJCT0gREFUQV9GUkFNRV9TSVpFLAogCS5kZXNjX3NpemUJCT0gVFhEX0RFU0NfU0laRSwKIAkucHJpdl9zaXplCQk9IHNpemVvZihzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl9wY2kpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjQwMHBjaS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjQwMHBjaS5oCmluZGV4IGMwNDhiMTguLmQzYTRhNjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI0MDBwY2kuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNDAwcGNpLmgKQEAgLTgwOSw4ICs4MDksOCBAQAogLyoKICAqIERNQSBkZXNjcmlwdG9yIGRlZmluZXMuCiAgKi8KLSNkZWZpbmUgVFhEX0RFU0NfU0laRQkJCSggOCAqIHNpemVvZihfX2xlMzIpICkKLSNkZWZpbmUgUlhEX0RFU0NfU0laRQkJCSggOCAqIHNpemVvZihfX2xlMzIpICkKKyNkZWZpbmUgVFhEX0RFU0NfU0laRQkJCSg4ICogc2l6ZW9mKF9fbGUzMikpCisjZGVmaW5lIFJYRF9ERVNDX1NJWkUJCQkoOCAqIHNpemVvZihfX2xlMzIpKQogCiAvKgogICogVFggZGVzY3JpcHRvciBmb3JtYXQgZm9yIFRYLCBQUklPLCBBVElNIGFuZCBCZWFjb24gUmluZy4KQEAgLTk0OCw2ICs5NDgsNiBAQAogCSgoX19DTEFNUF9UWChfX3R4cG93ZXIpIC0gTUFYX1RYUE9XRVIpICsgTUlOX1RYUE9XRVIpCiAKICNkZWZpbmUgVFhQT1dFUl9UT19ERVYoX190eHBvd2VyKSBcCi0JTUFYX1RYUE9XRVIgLSAoX19DTEFNUF9UWChfX3R4cG93ZXIpIC0gTUlOX1RYUE9XRVIpCisJKE1BWF9UWFBPV0VSIC0gKF9fQ0xBTVBfVFgoX190eHBvd2VyKSAtIE1JTl9UWFBPV0VSKSkKIAogI2VuZGlmIC8qIFJUMjQwMFBDSV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwcGNpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwcGNpLmMKaW5kZXggOTdmZWI3YS4uYTlmZjI2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHBjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDBwY2kuYwpAQCAtNzIzLDYgKzcyMyw4OCBAQAogfQogCiAvKgorICogUXVldWUgaGFuZGxlcnMuCisgKi8KK3N0YXRpYyB2b2lkIHJ0MjUwMHBjaV9zdGFydF9xdWV1ZShzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWUpCit7CisJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IHF1ZXVlLT5ydDJ4MDBkZXY7CisJdTMyIHJlZzsKKworCXN3aXRjaCAocXVldWUtPnFpZCkgeworCWNhc2UgUUlEX1JYOgorCQlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFJYQ1NSMCwgJnJlZyk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBSWENTUjBfRElTQUJMRV9SWCwgMCk7CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFJYQ1NSMCwgcmVnKTsKKwkJYnJlYWs7CisJY2FzZSBRSURfQkVBQ09OOgorCQlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIENTUjE0LCAmcmVnKTsKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIENTUjE0X1RTRl9DT1VOVCwgMSk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBDU1IxNF9UQkNOLCAxKTsKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIENTUjE0X0JFQUNPTl9HRU4sIDEpOworCQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBDU1IxNCwgcmVnKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBydDI1MDBwY2lfa2lja19xdWV1ZShzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWUpCit7CisJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IHF1ZXVlLT5ydDJ4MDBkZXY7CisJdTMyIHJlZzsKKworCXN3aXRjaCAocXVldWUtPnFpZCkgeworCWNhc2UgUUlEX0FDX1ZPOgorCQlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRYQ1NSMCwgJnJlZyk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWENTUjBfS0lDS19QUklPLCAxKTsKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhDU1IwLCByZWcpOworCQlicmVhazsKKwljYXNlIFFJRF9BQ19WSToKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBUWENTUjAsICZyZWcpOworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhDU1IwX0tJQ0tfVFgsIDEpOworCQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWENTUjAsIHJlZyk7CisJCWJyZWFrOworCWNhc2UgUUlEX0FUSU06CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgVFhDU1IwLCAmcmVnKTsKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYQ1NSMF9LSUNLX0FUSU0sIDEpOworCQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWENTUjAsIHJlZyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgcnQyNTAwcGNpX3N0b3BfcXVldWUoc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlKQoreworCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBxdWV1ZS0+cnQyeDAwZGV2OworCXUzMiByZWc7CisKKwlzd2l0Y2ggKHF1ZXVlLT5xaWQpIHsKKwljYXNlIFFJRF9BQ19WTzoKKwljYXNlIFFJRF9BQ19WSToKKwljYXNlIFFJRF9BVElNOgorCQlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRYQ1NSMCwgJnJlZyk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWENTUjBfQUJPUlQsIDEpOworCQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWENTUjAsIHJlZyk7CisJCWJyZWFrOworCWNhc2UgUUlEX1JYOgorCQlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFJYQ1NSMCwgJnJlZyk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBSWENTUjBfRElTQUJMRV9SWCwgMSk7CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFJYQ1NSMCwgcmVnKTsKKwkJYnJlYWs7CisJY2FzZSBRSURfQkVBQ09OOgorCQlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIENTUjE0LCAmcmVnKTsKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIENTUjE0X1RTRl9DT1VOVCwgMCk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBDU1IxNF9UQkNOLCAwKTsKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIENTUjE0X0JFQUNPTl9HRU4sIDApOworCQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBDU1IxNCwgcmVnKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCisvKgogICogSW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zLgogICovCiBzdGF0aWMgYm9vbCBydDI1MDBwY2lfZ2V0X2VudHJ5X3N0YXRlKHN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnkpCkBAIC0xMDMzLDE4ICsxMTE1LDYgQEAKIC8qCiAgKiBEZXZpY2Ugc3RhdGUgc3dpdGNoIGhhbmRsZXJzLgogICovCi1zdGF0aWMgdm9pZCBydDI1MDBwY2lfdG9nZ2xlX3J4KHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCi0JCQkJZW51bSBkZXZfc3RhdGUgc3RhdGUpCi17Ci0JdTMyIHJlZzsKLQotCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgUlhDU1IwLCAmcmVnKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgUlhDU1IwX0RJU0FCTEVfUlgsCi0JCQkgICAoc3RhdGUgPT0gU1RBVEVfUkFESU9fUlhfT0ZGKSB8fAotCQkJICAgKHN0YXRlID09IFNUQVRFX1JBRElPX1JYX09GRl9MSU5LKSk7Ci0JcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgUlhDU1IwLCByZWcpOwotfQotCiBzdGF0aWMgdm9pZCBydDI1MDBwY2lfdG9nZ2xlX2lycShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAogCQkJCSBlbnVtIGRldl9zdGF0ZSBzdGF0ZSkKIHsKQEAgLTExNDMsMTIgKzEyMTMsNiBAQAogCWNhc2UgU1RBVEVfUkFESU9fT0ZGOgogCQlydDI1MDBwY2lfZGlzYWJsZV9yYWRpbyhydDJ4MDBkZXYpOwogCQlicmVhazsKLQljYXNlIFNUQVRFX1JBRElPX1JYX09OOgotCWNhc2UgU1RBVEVfUkFESU9fUlhfT05fTElOSzoKLQljYXNlIFNUQVRFX1JBRElPX1JYX09GRjoKLQljYXNlIFNUQVRFX1JBRElPX1JYX09GRl9MSU5LOgotCQlydDI1MDBwY2lfdG9nZ2xlX3J4KHJ0MngwMGRldiwgc3RhdGUpOwotCQlicmVhazsKIAljYXNlIFNUQVRFX1JBRElPX0lSUV9PTjoKIAljYXNlIFNUQVRFX1JBRElPX0lSUV9PTl9JU1I6CiAJY2FzZSBTVEFURV9SQURJT19JUlFfT0ZGOgpAQCAtMTE5Myw5ICsxMjU3LDkgQEAKIAogCXJ0MngwMF9kZXNjX3JlYWQodHhkLCAyLCAmd29yZCk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzJfSVZfT0ZGU0VULCBJRUVFODAyMTFfSEVBREVSKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMl9BSUZTLCB0eGRlc2MtPmFpZnMpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cyX0NXTUlOLCB0eGRlc2MtPmN3X21pbik7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzJfQ1dNQVgsIHR4ZGVzYy0+Y3dfbWF4KTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMl9BSUZTLCBlbnRyeS0+cXVldWUtPmFpZnMpOworCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cyX0NXTUlOLCBlbnRyeS0+cXVldWUtPmN3X21pbik7CisJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzJfQ1dNQVgsIGVudHJ5LT5xdWV1ZS0+Y3dfbWF4KTsKIAlydDJ4MDBfZGVzY193cml0ZSh0eGQsIDIsIHdvcmQpOwogCiAJcnQyeDAwX2Rlc2NfcmVhZCh0eGQsIDMsICZ3b3JkKTsKQEAgLTEyNzksMzIgKzEzNDMsNiBAQAogCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIENTUjE0LCByZWcpOwogfQogCi1zdGF0aWMgdm9pZCBydDI1MDBwY2lfa2lja190eF9xdWV1ZShzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWUpCi17Ci0Jc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IHF1ZXVlLT5ydDJ4MDBkZXY7Ci0JdTMyIHJlZzsKLQotCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgVFhDU1IwLCAmcmVnKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhDU1IwX0tJQ0tfUFJJTywgKHF1ZXVlLT5xaWQgPT0gUUlEX0FDX0JFKSk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYQ1NSMF9LSUNLX1RYLCAocXVldWUtPnFpZCA9PSBRSURfQUNfQkspKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhDU1IwX0tJQ0tfQVRJTSwgKHF1ZXVlLT5xaWQgPT0gUUlEX0FUSU0pKTsKLQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWENTUjAsIHJlZyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJ0MjUwMHBjaV9raWxsX3R4X3F1ZXVlKHN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZSkKLXsKLQlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gcXVldWUtPnJ0MngwMGRldjsKLQl1MzIgcmVnOwotCi0JaWYgKHF1ZXVlLT5xaWQgPT0gUUlEX0JFQUNPTikgewotCQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBDU1IxNCwgMCk7Ci0JfSBlbHNlIHsKLQkJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBUWENTUjAsICZyZWcpOwotCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhDU1IwX0FCT1JULCAxKTsKLQkJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhDU1IwLCByZWcpOwotCX0KLX0KLQogLyoKICAqIFJYIGNvbnRyb2wgaGFuZGxlcnMKICAqLwpAQCAtMTQxNywxMyArMTQ1NSwxMyBAQAogCSAqIDQgLSBQcmlvcml0eSByaW5nIHRyYW5zbWl0IGRvbmUgaW50ZXJydXB0LgogCSAqLwogCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMzIocmVnLCBDU1I3X1RYRE9ORV9QUklPUklORykpCi0JCXJ0MjUwMHBjaV90eGRvbmUocnQyeDAwZGV2LCBRSURfQUNfQkUpOworCQlydDI1MDBwY2lfdHhkb25lKHJ0MngwMGRldiwgUUlEX0FDX1ZPKTsKIAogCS8qCiAJICogNSAtIFR4IHJpbmcgdHJhbnNtaXQgZG9uZSBpbnRlcnJ1cHQuCiAJICovCiAJaWYgKHJ0MngwMF9nZXRfZmllbGQzMihyZWcsIENTUjdfVFhET05FX1RYUklORykpCi0JCXJ0MjUwMHBjaV90eGRvbmUocnQyeDAwZGV2LCBRSURfQUNfQkspOworCQlydDI1MDBwY2lfdHhkb25lKHJ0MngwMGRldiwgUUlEX0FDX1ZJKTsKIAogCS8qIEVuYWJsZSBpbnRlcnJ1cHRzIGFnYWluLiAqLwogCXJ0MngwMGRldi0+b3BzLT5saWItPnNldF9kZXZpY2Vfc3RhdGUocnQyeDAwZGV2LApAQCAtMTkwOSw2ICsxOTQ3LDcgQEAKIAkuZ2V0X3RzZgkJPSBydDI1MDBwY2lfZ2V0X3RzZiwKIAkudHhfbGFzdF9iZWFjb24JCT0gcnQyNTAwcGNpX3R4X2xhc3RfYmVhY29uLAogCS5yZmtpbGxfcG9sbAkJPSBydDJ4MDBtYWNfcmZraWxsX3BvbGwsCisJLmZsdXNoCQkJPSBydDJ4MDBtYWNfZmx1c2gsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJ0MngwMGxpYl9vcHMgcnQyNTAwcGNpX3J0MngwMF9vcHMgPSB7CkBAIC0xOTI0LDEwICsxOTYzLDExIEBACiAJLmxpbmtfc3RhdHMJCT0gcnQyNTAwcGNpX2xpbmtfc3RhdHMsCiAJLnJlc2V0X3R1bmVyCQk9IHJ0MjUwMHBjaV9yZXNldF90dW5lciwKIAkubGlua190dW5lcgkJPSBydDI1MDBwY2lfbGlua190dW5lciwKKwkuc3RhcnRfcXVldWUJCT0gcnQyNTAwcGNpX3N0YXJ0X3F1ZXVlLAorCS5raWNrX3F1ZXVlCQk9IHJ0MjUwMHBjaV9raWNrX3F1ZXVlLAorCS5zdG9wX3F1ZXVlCQk9IHJ0MjUwMHBjaV9zdG9wX3F1ZXVlLAogCS53cml0ZV90eF9kZXNjCQk9IHJ0MjUwMHBjaV93cml0ZV90eF9kZXNjLAogCS53cml0ZV9iZWFjb24JCT0gcnQyNTAwcGNpX3dyaXRlX2JlYWNvbiwKLQkua2lja190eF9xdWV1ZQkJPSBydDI1MDBwY2lfa2lja190eF9xdWV1ZSwKLQkua2lsbF90eF9xdWV1ZQkJPSBydDI1MDBwY2lfa2lsbF90eF9xdWV1ZSwKIAkuZmlsbF9yeGRvbmUJCT0gcnQyNTAwcGNpX2ZpbGxfcnhkb25lLAogCS5jb25maWdfZmlsdGVyCQk9IHJ0MjUwMHBjaV9jb25maWdfZmlsdGVyLAogCS5jb25maWdfaW50ZgkJPSBydDI1MDBwY2lfY29uZmlnX2ludGYsCkBAIC0xOTM3LDI4ICsxOTc3LDI4IEBACiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRhdGFfcXVldWVfZGVzYyBydDI1MDBwY2lfcXVldWVfcnggPSB7Ci0JLmVudHJ5X251bQkJPSBSWF9FTlRSSUVTLAorCS5lbnRyeV9udW0JCT0gMzIsCiAJLmRhdGFfc2l6ZQkJPSBEQVRBX0ZSQU1FX1NJWkUsCiAJLmRlc2Nfc2l6ZQkJPSBSWERfREVTQ19TSVpFLAogCS5wcml2X3NpemUJCT0gc2l6ZW9mKHN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3BjaSksCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRhdGFfcXVldWVfZGVzYyBydDI1MDBwY2lfcXVldWVfdHggPSB7Ci0JLmVudHJ5X251bQkJPSBUWF9FTlRSSUVTLAorCS5lbnRyeV9udW0JCT0gMzIsCiAJLmRhdGFfc2l6ZQkJPSBEQVRBX0ZSQU1FX1NJWkUsCiAJLmRlc2Nfc2l6ZQkJPSBUWERfREVTQ19TSVpFLAogCS5wcml2X3NpemUJCT0gc2l6ZW9mKHN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3BjaSksCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRhdGFfcXVldWVfZGVzYyBydDI1MDBwY2lfcXVldWVfYmNuID0gewotCS5lbnRyeV9udW0JCT0gQkVBQ09OX0VOVFJJRVMsCisJLmVudHJ5X251bQkJPSAxLAogCS5kYXRhX3NpemUJCT0gTUdNVF9GUkFNRV9TSVpFLAogCS5kZXNjX3NpemUJCT0gVFhEX0RFU0NfU0laRSwKIAkucHJpdl9zaXplCQk9IHNpemVvZihzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl9wY2kpLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkYXRhX3F1ZXVlX2Rlc2MgcnQyNTAwcGNpX3F1ZXVlX2F0aW0gPSB7Ci0JLmVudHJ5X251bQkJPSBBVElNX0VOVFJJRVMsCisJLmVudHJ5X251bQkJPSA4LAogCS5kYXRhX3NpemUJCT0gREFUQV9GUkFNRV9TSVpFLAogCS5kZXNjX3NpemUJCT0gVFhEX0RFU0NfU0laRSwKIAkucHJpdl9zaXplCQk9IHNpemVvZihzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl9wY2kpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHBjaS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHBjaS5oCmluZGV4IGQ3MDgwMzEuLjJhYWQ3YmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDBwY2kuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwcGNpLmgKQEAgLTEwODgsOCArMTA4OCw4IEBACiAvKgogICogRE1BIGRlc2NyaXB0b3IgZGVmaW5lcy4KICAqLwotI2RlZmluZSBUWERfREVTQ19TSVpFCQkJKCAxMSAqIHNpemVvZihfX2xlMzIpICkKLSNkZWZpbmUgUlhEX0RFU0NfU0laRQkJCSggMTEgKiBzaXplb2YoX19sZTMyKSApCisjZGVmaW5lIFRYRF9ERVNDX1NJWkUJCQkoMTEgKiBzaXplb2YoX19sZTMyKSkKKyNkZWZpbmUgUlhEX0RFU0NfU0laRQkJCSgxMSAqIHNpemVvZihfX2xlMzIpKQogCiAvKgogICogVFggZGVzY3JpcHRvciBmb3JtYXQgZm9yIFRYLCBQUklPLCBBVElNIGFuZCBCZWFjb24gUmluZy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDB1c2IuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDB1c2IuYwppbmRleCA5M2U0NGM3Zi4uNmIzYjFkZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDB1c2IuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwdXNiLmMKQEAgLTM5LDcgKzM5LDcgQEAKIC8qCiAgKiBBbGxvdyBoYXJkd2FyZSBlbmNyeXB0aW9uIHRvIGJlIGRpc2FibGVkLgogICovCi1zdGF0aWMgaW50IG1vZHBhcmFtX25vaHdjcnlwdCA9IDA7CitzdGF0aWMgaW50IG1vZHBhcmFtX25vaHdjcnlwdDsKIG1vZHVsZV9wYXJhbV9uYW1lZChub2h3Y3J5cHQsIG1vZHBhcmFtX25vaHdjcnlwdCwgYm9vbCwgU19JUlVHTyk7CiBNT0RVTEVfUEFSTV9ERVNDKG5vaHdjcnlwdCwgIkRpc2FibGUgaGFyZHdhcmUgZW5jcnlwdGlvbi4iKTsKIApAQCAtNzM5LDYgKzczOSw1NSBAQAogfQogCiAvKgorICogUXVldWUgaGFuZGxlcnMuCisgKi8KK3N0YXRpYyB2b2lkIHJ0MjUwMHVzYl9zdGFydF9xdWV1ZShzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWUpCit7CisJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IHF1ZXVlLT5ydDJ4MDBkZXY7CisJdTE2IHJlZzsKKworCXN3aXRjaCAocXVldWUtPnFpZCkgeworCWNhc2UgUUlEX1JYOgorCQlydDI1MDB1c2JfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRYUlhfQ1NSMiwgJnJlZyk7CisJCXJ0MngwMF9zZXRfZmllbGQxNigmcmVnLCBUWFJYX0NTUjJfRElTQUJMRV9SWCwgMCk7CisJCXJ0MjUwMHVzYl9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYUlhfQ1NSMiwgcmVnKTsKKwkJYnJlYWs7CisJY2FzZSBRSURfQkVBQ09OOgorCQlydDI1MDB1c2JfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRYUlhfQ1NSMTksICZyZWcpOworCQlydDJ4MDBfc2V0X2ZpZWxkMTYoJnJlZywgVFhSWF9DU1IxOV9UU0ZfQ09VTlQsIDEpOworCQlydDJ4MDBfc2V0X2ZpZWxkMTYoJnJlZywgVFhSWF9DU1IxOV9UQkNOLCAxKTsKKwkJcnQyeDAwX3NldF9maWVsZDE2KCZyZWcsIFRYUlhfQ1NSMTlfQkVBQ09OX0dFTiwgMSk7CisJCXJ0MjUwMHVzYl9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYUlhfQ1NSMTksIHJlZyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgcnQyNTAwdXNiX3N0b3BfcXVldWUoc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlKQoreworCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBxdWV1ZS0+cnQyeDAwZGV2OworCXUxNiByZWc7CisKKwlzd2l0Y2ggKHF1ZXVlLT5xaWQpIHsKKwljYXNlIFFJRF9SWDoKKwkJcnQyNTAwdXNiX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBUWFJYX0NTUjIsICZyZWcpOworCQlydDJ4MDBfc2V0X2ZpZWxkMTYoJnJlZywgVFhSWF9DU1IyX0RJU0FCTEVfUlgsIDEpOworCQlydDI1MDB1c2JfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWFJYX0NTUjIsIHJlZyk7CisJCWJyZWFrOworCWNhc2UgUUlEX0JFQUNPTjoKKwkJcnQyNTAwdXNiX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBUWFJYX0NTUjE5LCAmcmVnKTsKKwkJcnQyeDAwX3NldF9maWVsZDE2KCZyZWcsIFRYUlhfQ1NSMTlfVFNGX0NPVU5ULCAwKTsKKwkJcnQyeDAwX3NldF9maWVsZDE2KCZyZWcsIFRYUlhfQ1NSMTlfVEJDTiwgMCk7CisJCXJ0MngwMF9zZXRfZmllbGQxNigmcmVnLCBUWFJYX0NTUjE5X0JFQUNPTl9HRU4sIDApOworCQlydDI1MDB1c2JfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWFJYX0NTUjE5LCByZWcpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKKy8qCiAgKiBJbml0aWFsaXphdGlvbiBmdW5jdGlvbnMuCiAgKi8KIHN0YXRpYyBpbnQgcnQyNTAwdXNiX2luaXRfcmVnaXN0ZXJzKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCkBAIC05MzEsMTggKzk4MCw2IEBACiAvKgogICogRGV2aWNlIHN0YXRlIHN3aXRjaCBoYW5kbGVycy4KICAqLwotc3RhdGljIHZvaWQgcnQyNTAwdXNiX3RvZ2dsZV9yeChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAotCQkJCWVudW0gZGV2X3N0YXRlIHN0YXRlKQotewotCXUxNiByZWc7Ci0KLQlydDI1MDB1c2JfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRYUlhfQ1NSMiwgJnJlZyk7Ci0JcnQyeDAwX3NldF9maWVsZDE2KCZyZWcsIFRYUlhfQ1NSMl9ESVNBQkxFX1JYLAotCQkJICAgKHN0YXRlID09IFNUQVRFX1JBRElPX1JYX09GRikgfHwKLQkJCSAgIChzdGF0ZSA9PSBTVEFURV9SQURJT19SWF9PRkZfTElOSykpOwotCXJ0MjUwMHVzYl9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYUlhfQ1NSMiwgcmVnKTsKLX0KLQogc3RhdGljIGludCBydDI1MDB1c2JfZW5hYmxlX3JhZGlvKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCiB7CiAJLyoKQEAgLTEwMTgsMTIgKzEwNTUsNiBAQAogCWNhc2UgU1RBVEVfUkFESU9fT0ZGOgogCQlydDI1MDB1c2JfZGlzYWJsZV9yYWRpbyhydDJ4MDBkZXYpOwogCQlicmVhazsKLQljYXNlIFNUQVRFX1JBRElPX1JYX09OOgotCWNhc2UgU1RBVEVfUkFESU9fUlhfT05fTElOSzoKLQljYXNlIFNUQVRFX1JBRElPX1JYX09GRjoKLQljYXNlIFNUQVRFX1JBRElPX1JYX09GRl9MSU5LOgotCQlydDI1MDB1c2JfdG9nZ2xlX3J4KHJ0MngwMGRldiwgc3RhdGUpOwotCQlicmVhazsKIAljYXNlIFNUQVRFX1JBRElPX0lSUV9PTjoKIAljYXNlIFNUQVRFX1JBRElPX0lSUV9PTl9JU1I6CiAJY2FzZSBTVEFURV9SQURJT19JUlFfT0ZGOgpAQCAtMTA4MSw5ICsxMTEyLDkgQEAKIAogCXJ0MngwMF9kZXNjX3JlYWQodHhkLCAxLCAmd29yZCk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzFfSVZfT0ZGU0VULCB0eGRlc2MtPml2X29mZnNldCk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzFfQUlGUywgdHhkZXNjLT5haWZzKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMV9DV01JTiwgdHhkZXNjLT5jd19taW4pOwotCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cxX0NXTUFYLCB0eGRlc2MtPmN3X21heCk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzFfQUlGUywgZW50cnktPnF1ZXVlLT5haWZzKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMV9DV01JTiwgZW50cnktPnF1ZXVlLT5jd19taW4pOworCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cxX0NXTUFYLCBlbnRyeS0+cXVldWUtPmN3X21heCk7CiAJcnQyeDAwX2Rlc2Nfd3JpdGUodHhkLCAxLCB3b3JkKTsKIAogCXJ0MngwMF9kZXNjX3JlYWQodHhkLCAyLCAmd29yZCk7CkBAIC0xMjA2LDE0ICsxMjM3LDYgQEAKIAlyZXR1cm4gbGVuZ3RoOwogfQogCi1zdGF0aWMgdm9pZCBydDI1MDB1c2Jfa2lsbF90eF9xdWV1ZShzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWUpCi17Ci0JaWYgKHF1ZXVlLT5xaWQgPT0gUUlEX0JFQUNPTikKLQkJcnQyNTAwdXNiX3JlZ2lzdGVyX3dyaXRlKHF1ZXVlLT5ydDJ4MDBkZXYsIFRYUlhfQ1NSMTksIDApOwotCi0JcnQyeDAwdXNiX2tpbGxfdHhfcXVldWUocXVldWUpOwotfQotCiAvKgogICogUlggY29udHJvbCBoYW5kbGVycwogICovCkBAIC0xODAxLDYgKzE4MjQsNyBAQAogCS5ic3NfaW5mb19jaGFuZ2VkCT0gcnQyeDAwbWFjX2Jzc19pbmZvX2NoYW5nZWQsCiAJLmNvbmZfdHgJCT0gcnQyeDAwbWFjX2NvbmZfdHgsCiAJLnJma2lsbF9wb2xsCQk9IHJ0MngwMG1hY19yZmtpbGxfcG9sbCwKKwkuZmx1c2gJCQk9IHJ0MngwMG1hY19mbHVzaCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnQyeDAwbGliX29wcyBydDI1MDB1c2JfcnQyeDAwX29wcyA9IHsKQEAgLTE4MTMsMTEgKzE4MzcsMTMgQEAKIAkubGlua19zdGF0cwkJPSBydDI1MDB1c2JfbGlua19zdGF0cywKIAkucmVzZXRfdHVuZXIJCT0gcnQyNTAwdXNiX3Jlc2V0X3R1bmVyLAogCS53YXRjaGRvZwkJPSBydDJ4MDB1c2Jfd2F0Y2hkb2csCisJLnN0YXJ0X3F1ZXVlCQk9IHJ0MjUwMHVzYl9zdGFydF9xdWV1ZSwKKwkua2lja19xdWV1ZQkJPSBydDJ4MDB1c2Jfa2lja19xdWV1ZSwKKwkuc3RvcF9xdWV1ZQkJPSBydDI1MDB1c2Jfc3RvcF9xdWV1ZSwKKwkuZmx1c2hfcXVldWUJCT0gcnQyeDAwdXNiX2ZsdXNoX3F1ZXVlLAogCS53cml0ZV90eF9kZXNjCQk9IHJ0MjUwMHVzYl93cml0ZV90eF9kZXNjLAogCS53cml0ZV9iZWFjb24JCT0gcnQyNTAwdXNiX3dyaXRlX2JlYWNvbiwKIAkuZ2V0X3R4X2RhdGFfbGVuCT0gcnQyNTAwdXNiX2dldF90eF9kYXRhX2xlbiwKLQkua2lja190eF9xdWV1ZQkJPSBydDJ4MDB1c2Jfa2lja190eF9xdWV1ZSwKLQkua2lsbF90eF9xdWV1ZQkJPSBydDI1MDB1c2Jfa2lsbF90eF9xdWV1ZSwKIAkuZmlsbF9yeGRvbmUJCT0gcnQyNTAwdXNiX2ZpbGxfcnhkb25lLAogCS5jb25maWdfc2hhcmVkX2tleQk9IHJ0MjUwMHVzYl9jb25maWdfa2V5LAogCS5jb25maWdfcGFpcndpc2Vfa2V5CT0gcnQyNTAwdXNiX2NvbmZpZ19rZXksCkBAIC0xODI5LDI4ICsxODU1LDI4IEBACiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRhdGFfcXVldWVfZGVzYyBydDI1MDB1c2JfcXVldWVfcnggPSB7Ci0JLmVudHJ5X251bQkJPSBSWF9FTlRSSUVTLAorCS5lbnRyeV9udW0JCT0gMzIsCiAJLmRhdGFfc2l6ZQkJPSBEQVRBX0ZSQU1FX1NJWkUsCiAJLmRlc2Nfc2l6ZQkJPSBSWERfREVTQ19TSVpFLAogCS5wcml2X3NpemUJCT0gc2l6ZW9mKHN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3VzYiksCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRhdGFfcXVldWVfZGVzYyBydDI1MDB1c2JfcXVldWVfdHggPSB7Ci0JLmVudHJ5X251bQkJPSBUWF9FTlRSSUVTLAorCS5lbnRyeV9udW0JCT0gMzIsCiAJLmRhdGFfc2l6ZQkJPSBEQVRBX0ZSQU1FX1NJWkUsCiAJLmRlc2Nfc2l6ZQkJPSBUWERfREVTQ19TSVpFLAogCS5wcml2X3NpemUJCT0gc2l6ZW9mKHN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3VzYiksCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRhdGFfcXVldWVfZGVzYyBydDI1MDB1c2JfcXVldWVfYmNuID0gewotCS5lbnRyeV9udW0JCT0gQkVBQ09OX0VOVFJJRVMsCisJLmVudHJ5X251bQkJPSAxLAogCS5kYXRhX3NpemUJCT0gTUdNVF9GUkFNRV9TSVpFLAogCS5kZXNjX3NpemUJCT0gVFhEX0RFU0NfU0laRSwKIAkucHJpdl9zaXplCQk9IHNpemVvZihzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl91c2JfYmNuKSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGF0YV9xdWV1ZV9kZXNjIHJ0MjUwMHVzYl9xdWV1ZV9hdGltID0gewotCS5lbnRyeV9udW0JCT0gQVRJTV9FTlRSSUVTLAorCS5lbnRyeV9udW0JCT0gOCwKIAkuZGF0YV9zaXplCQk9IERBVEFfRlJBTUVfU0laRSwKIAkuZGVzY19zaXplCQk9IFRYRF9ERVNDX1NJWkUsCiAJLnByaXZfc2l6ZQkJPSBzaXplb2Yoc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfdXNiKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDAuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDAuaAppbmRleCBlYjhiNmNhLi40YzU1ZTg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMC5oCkBAIC00Niw3ICs0NiwxMSBAQAogICogUkYyMDIwIDIuNEcgQi9HCiAgKiBSRjMwMjEgMi40RyAxVDJSCiAgKiBSRjMwMjIgMi40RyAyVDJSCi0gKiBSRjMwNTIgMi40RyAyVDJSCisgKiBSRjMwNTIgMi40Ry81RyAyVDJSCisgKiBSRjI4NTMgMi40Ry81RyAzVDNSCisgKiBSRjMzMjAgMi40RyAxVDFSKFJUMzM1MC9SVDMzNzAvUlQzMzkwKQorICogUkYzMzIyIDIuNEcgMlQyUihSVDMzNTIvUlQzMzcxL1JUMzM3Mi9SVDMzOTEvUlQzMzkyKQorICogUkYzODUzIDIuNEcvNUcgM1QzUihSVDM4ODMvUlQzNTYzL1JUMzU3My9SVDM1OTMvUlQzNjYyKQogICovCiAjZGVmaW5lIFJGMjgyMAkJCQkweDAwMDEKICNkZWZpbmUgUkYyODUwCQkJCTB4MDAwMgpAQCAtNTcsNyArNjEsMTAgQEAKICNkZWZpbmUgUkYzMDIxCQkJCTB4MDAwNwogI2RlZmluZSBSRjMwMjIJCQkJMHgwMDA4CiAjZGVmaW5lIFJGMzA1MgkJCQkweDAwMDkKKyNkZWZpbmUgUkYyODUzCQkJCTB4MDAwYQogI2RlZmluZSBSRjMzMjAJCQkJMHgwMDBiCisjZGVmaW5lIFJGMzMyMgkJCQkweDAwMGMKKyNkZWZpbmUgUkYzODUzCQkJCTB4MDAwZAogCiAvKgogICogQ2hpcHNldCByZXZpc2lvbnMuCkBAIC0yMDYsMTAgKzIxMywxMCBAQAogCiAvKgogICogV01NX0FJRlNOX0NGRzogQWlmc24gZm9yIGVhY2ggRURDQSBBQwotICogQUlGU04wOiBBQ19CRQotICogQUlGU04xOiBBQ19CSwotICogQUlGU04yOiBBQ19WSQotICogQUlGU04zOiBBQ19WTworICogQUlGU04wOiBBQ19WTworICogQUlGU04xOiBBQ19WSQorICogQUlGU04yOiBBQ19CRQorICogQUlGU04zOiBBQ19CSwogICovCiAjZGVmaW5lIFdNTV9BSUZTTl9DRkcJCQkweDAyMTQKICNkZWZpbmUgV01NX0FJRlNOX0NGR19BSUZTTjAJCUZJRUxEMzIoMHgwMDAwMDAwZikKQEAgLTIxOSwxMCArMjI2LDEwIEBACiAKIC8qCiAgKiBXTU1fQ1dNSU5fQ1NSOiBDV21pbiBmb3IgZWFjaCBFRENBIEFDCi0gKiBDV01JTjA6IEFDX0JFCi0gKiBDV01JTjE6IEFDX0JLCi0gKiBDV01JTjI6IEFDX1ZJCi0gKiBDV01JTjM6IEFDX1ZPCisgKiBDV01JTjA6IEFDX1ZPCisgKiBDV01JTjE6IEFDX1ZJCisgKiBDV01JTjI6IEFDX0JFCisgKiBDV01JTjM6IEFDX0JLCiAgKi8KICNkZWZpbmUgV01NX0NXTUlOX0NGRwkJCTB4MDIxOAogI2RlZmluZSBXTU1fQ1dNSU5fQ0ZHX0NXTUlOMAkJRklFTEQzMigweDAwMDAwMDBmKQpAQCAtMjMyLDEwICsyMzksMTAgQEAKIAogLyoKICAqIFdNTV9DV01BWF9DU1I6IENXbWF4IGZvciBlYWNoIEVEQ0EgQUMKLSAqIENXTUFYMDogQUNfQkUKLSAqIENXTUFYMTogQUNfQksKLSAqIENXTUFYMjogQUNfVkkKLSAqIENXTUFYMzogQUNfVk8KKyAqIENXTUFYMDogQUNfVk8KKyAqIENXTUFYMTogQUNfVkkKKyAqIENXTUFYMjogQUNfQkUKKyAqIENXTUFYMzogQUNfQksKICAqLwogI2RlZmluZSBXTU1fQ1dNQVhfQ0ZHCQkJMHgwMjFjCiAjZGVmaW5lIFdNTV9DV01BWF9DRkdfQ1dNQVgwCQlGSUVMRDMyKDB4MDAwMDAwMGYpCkBAIC0yNDQsMTggKzI1MSwxOCBAQAogI2RlZmluZSBXTU1fQ1dNQVhfQ0ZHX0NXTUFYMwkJRklFTEQzMigweDAwMDBmMDAwKQogCiAvKgotICogQUNfVFhPUDA6IEFDX0JLL0FDX0JFIFRYT1AgcmVnaXN0ZXIKLSAqIEFDMFRYT1A6IEFDX0JLIGluIHVuaXQgb2YgMzJ1cwotICogQUMxVFhPUDogQUNfQkUgaW4gdW5pdCBvZiAzMnVzCisgKiBBQ19UWE9QMDogQUNfVk8vQUNfVkkgVFhPUCByZWdpc3RlcgorICogQUMwVFhPUDogQUNfVk8gaW4gdW5pdCBvZiAzMnVzCisgKiBBQzFUWE9QOiBBQ19WSSBpbiB1bml0IG9mIDMydXMKICAqLwogI2RlZmluZSBXTU1fVFhPUDBfQ0ZHCQkJMHgwMjIwCiAjZGVmaW5lIFdNTV9UWE9QMF9DRkdfQUMwVFhPUAkJRklFTEQzMigweDAwMDBmZmZmKQogI2RlZmluZSBXTU1fVFhPUDBfQ0ZHX0FDMVRYT1AJCUZJRUxEMzIoMHhmZmZmMDAwMCkKIAogLyoKLSAqIEFDX1RYT1AxOiBBQ19WTy9BQ19WSSBUWE9QIHJlZ2lzdGVyCi0gKiBBQzJUWE9QOiBBQ19WSSBpbiB1bml0IG9mIDMydXMKLSAqIEFDM1RYT1A6IEFDX1ZPIGluIHVuaXQgb2YgMzJ1cworICogQUNfVFhPUDE6IEFDX0JFL0FDX0JLIFRYT1AgcmVnaXN0ZXIKKyAqIEFDMlRYT1A6IEFDX0JFIGluIHVuaXQgb2YgMzJ1cworICogQUMzVFhPUDogQUNfQksgaW4gdW5pdCBvZiAzMnVzCiAgKi8KICNkZWZpbmUgV01NX1RYT1AxX0NGRwkJCTB4MDIyNAogI2RlZmluZSBXTU1fVFhPUDFfQ0ZHX0FDMlRYT1AJCUZJRUxEMzIoMHgwMDAwZmZmZikKQEAgLTI4MSw3ICsyODgsNyBAQAogI2RlZmluZSBNQ1VfQ01EX0NGRwkJCTB4MDIyYwogCiAvKgotICogQUNfQksgcmVnaXN0ZXIgb2Zmc2V0cworICogQUNfVk8gcmVnaXN0ZXIgb2Zmc2V0cwogICovCiAjZGVmaW5lIFRYX0JBU0VfUFRSMAkJCTB4MDIzMAogI2RlZmluZSBUWF9NQVhfQ05UMAkJCTB4MDIzNApAQCAtMjg5LDcgKzI5Niw3IEBACiAjZGVmaW5lIFRYX0RUWF9JRFgwCQkJMHgwMjNjCiAKIC8qCi0gKiBBQ19CRSByZWdpc3RlciBvZmZzZXRzCisgKiBBQ19WSSByZWdpc3RlciBvZmZzZXRzCiAgKi8KICNkZWZpbmUgVFhfQkFTRV9QVFIxCQkJMHgwMjQwCiAjZGVmaW5lIFRYX01BWF9DTlQxCQkJMHgwMjQ0CkBAIC0yOTcsNyArMzA0LDcgQEAKICNkZWZpbmUgVFhfRFRYX0lEWDEJCQkweDAyNGMKIAogLyoKLSAqIEFDX1ZJIHJlZ2lzdGVyIG9mZnNldHMKKyAqIEFDX0JFIHJlZ2lzdGVyIG9mZnNldHMKICAqLwogI2RlZmluZSBUWF9CQVNFX1BUUjIJCQkweDAyNTAKICNkZWZpbmUgVFhfTUFYX0NOVDIJCQkweDAyNTQKQEAgLTMwNSw3ICszMTIsNyBAQAogI2RlZmluZSBUWF9EVFhfSURYMgkJCTB4MDI1YwogCiAvKgotICogQUNfVk8gcmVnaXN0ZXIgb2Zmc2V0cworICogQUNfQksgcmVnaXN0ZXIgb2Zmc2V0cwogICovCiAjZGVmaW5lIFRYX0JBU0VfUFRSMwkJCTB4MDI2MAogI2RlZmluZSBUWF9NQVhfQ05UMwkJCTB4MDI2NApAQCAtNDEyLDEwICs0MTksMjIgQEAKICNkZWZpbmUgQkNOX09GRlNFVDFfQkNONwkJRklFTEQzMigweGZmMDAwMDAwKQogCiAvKgotICogUEJGIHJlZ2lzdGVycwotICogTW9zdCBhcmUgZm9yIGRlYnVnLiBEcml2ZXIgZG9lc24ndCB0b3VjaCBQQkYgcmVnaXN0ZXIuCisgKiBUWFJYUV9QQ05UOiBQQkYgcmVnaXN0ZXIKKyAqIFBDTlRfVFgwUTogUGFnZSBjb3VudCBmb3IgVFggaGFyZHdhcmUgcXVldWUgMAorICogUENOVF9UWDFROiBQYWdlIGNvdW50IGZvciBUWCBoYXJkd2FyZSBxdWV1ZSAxCisgKiBQQ05UX1RYMlE6IFBhZ2UgY291bnQgZm9yIFRYIGhhcmR3YXJlIHF1ZXVlIDIKKyAqIFBDTlRfUlgwUTogUGFnZSBjb3VudCBmb3IgUlggaGFyZHdhcmUgcXVldWUKICAqLwogI2RlZmluZSBUWFJYUV9QQ05UCQkJMHgwNDM4CisjZGVmaW5lIFRYUlhRX1BDTlRfVFgwUQkJCUZJRUxEMzIoMHgwMDAwMDBmZikKKyNkZWZpbmUgVFhSWFFfUENOVF9UWDFRCQkJRklFTEQzMigweDAwMDBmZjAwKQorI2RlZmluZSBUWFJYUV9QQ05UX1RYMlEJCQlGSUVMRDMyKDB4MDBmZjAwMDApCisjZGVmaW5lIFRYUlhRX1BDTlRfUlgwUQkJCUZJRUxEMzIoMHhmZjAwMDAwMCkKKworLyoKKyAqIFBCRiByZWdpc3RlcgorICogRGVidWcuIERyaXZlciBkb2Vzbid0IHRvdWNoIFBCRiByZWdpc3Rlci4KKyAqLwogI2RlZmluZSBQQkZfREJHCQkJCTB4MDQzYwogCiAvKgpAQCAtNjg2LDggKzcwNSwxOCBAQAogCiAvKgogICogQ0hfVElNRV9DRkc6IGNvdW50IGFzIGNoYW5uZWwgYnVzeQorICogRUlGU19CVVNZOiBDb3VudCBFSUZTIGFzIGNoYW5uZWwgYnVzeQorICogTkFWX0JVU1k6IENvdW50IE5BUyBhcyBjaGFubmVsIGJ1c3kKKyAqIFJYX0JVU1k6IENvdW50IFJYIGFzIGNoYW5uZWwgYnVzeQorICogVFhfQlVTWTogQ291bnQgVFggYXMgY2hhbm5lbCBidXN5CisgKiBUTVJfRU46IEVuYWJsZSBjaGFubmVsIHN0YXRpc3RpY3MgdGltZXIKICAqLwogI2RlZmluZSBDSF9USU1FX0NGRyAgICAgCSAgICAgICAgMHgxMTBjCisjZGVmaW5lIENIX1RJTUVfQ0ZHX0VJRlNfQlVTWQkJRklFTEQzMigweDAwMDAwMDEwKQorI2RlZmluZSBDSF9USU1FX0NGR19OQVZfQlVTWQkJRklFTEQzMigweDAwMDAwMDA4KQorI2RlZmluZSBDSF9USU1FX0NGR19SWF9CVVNZCQlGSUVMRDMyKDB4MDAwMDAwMDQpCisjZGVmaW5lIENIX1RJTUVfQ0ZHX1RYX0JVU1kJCUZJRUxEMzIoMHgwMDAwMDAwMikKKyNkZWZpbmUgQ0hfVElNRV9DRkdfVE1SX0VOCQlGSUVMRDMyKDB4MDAwMDAwMDEpCiAKIC8qCiAgKiBQQkZfTElGRV9USU1FUjogVFgvUlggTVBEVSB0aW1lc3RhbXAgdGltZXIgKGZyZWUgcnVuKSBVbml0OiAxdXMKQEAgLTk2MCw4ICs5ODksMzEgQEAKIAogLyoKICAqIFRYT1BfQ1RSTF9DRkc6CisgKiBUSU1FT1VUX1RSVU5fRU46IEVuYWJsZS9EaXNhYmxlIFRYT1AgdGltZW91dCB0cnVuY2F0aW9uCisgKiBBQ19UUlVOX0VOOiBFbmFibGUvRGlzYWJsZSB0cnVuY2F0aW9uIGZvciBBQyBjaGFuZ2UKKyAqIFRYUkFURUdSUF9UUlVOX0VOOiBFbmFibGUvRGlzYWJsZSB0cnVuY2F0aW9uIGZvciBUWCByYXRlIGdyb3VwIGNoYW5nZQorICogVVNFUl9NT0RFX1RSVU5fRU46IEVuYWJsZS9EaXNhYmxlIHRydW5jYXRpb24gZm9yIHVzZXIgVFhPUCBtb2RlCisgKiBNSU1PX1BTX1RSVU5fRU46IEVuYWJsZS9EaXNhYmxlIHRydW5jYXRpb24gZm9yIE1JTU8gUFMgUlRTL0NUUworICogUkVTRVJWRURfVFJVTl9FTjogUmVzZXJ2ZWQKKyAqIExTSUdfVFhPUF9FTjogRW5hYmxlL0Rpc2FibGUgTC1TSUcgVFhPUCBwcm90ZWN0aW9uCisgKiBFWFRfQ0NBX0VOOiBFbmFibGUvRGlzYWJsZSBleHRlbnNpb24gY2hhbm5lbCBDQ0EgcmVmZXJlbmNlIChEZWZlciA0ME1oegorICoJICAgICAgIHRyYW5zbWlzc2lvbnMgaWYgZXh0ZW5zaW9uIENDQSBpcyBjbGVhcikuCisgKiBFWFRfQ0NBX0RMWTogRXh0ZW5zaW9uIENDQSBzaWduYWwgZGVsYXkgdGltZSAodW5pdDogdXMpCisgKiBFWFRfQ1dNSU46IEN3TWluIGZvciBleHRlbnNpb24gY2hhbm5lbCBiYWNrb2ZmCisgKgkgICAgICAwOiBEaXNhYmxlZAorICoKICAqLwogI2RlZmluZSBUWE9QX0NUUkxfQ0ZHCQkJMHgxMzQwCisjZGVmaW5lIFRYT1BfQ1RSTF9DRkdfVElNRU9VVF9UUlVOX0VOCUZJRUxEMzIoMHgwMDAwMDAwMSkKKyNkZWZpbmUgVFhPUF9DVFJMX0NGR19BQ19UUlVOX0VOCUZJRUxEMzIoMHgwMDAwMDAwMikKKyNkZWZpbmUgVFhPUF9DVFJMX0NGR19UWFJBVEVHUlBfVFJVTl9FTglGSUVMRDMyKDB4MDAwMDAwMDQpCisjZGVmaW5lIFRYT1BfQ1RSTF9DRkdfVVNFUl9NT0RFX1RSVU5fRU4JRklFTEQzMigweDAwMDAwMDA4KQorI2RlZmluZSBUWE9QX0NUUkxfQ0ZHX01JTU9fUFNfVFJVTl9FTglGSUVMRDMyKDB4MDAwMDAwMTApCisjZGVmaW5lIFRYT1BfQ1RSTF9DRkdfUkVTRVJWRURfVFJVTl9FTglGSUVMRDMyKDB4MDAwMDAwMjApCisjZGVmaW5lIFRYT1BfQ1RSTF9DRkdfTFNJR19UWE9QX0VOCUZJRUxEMzIoMHgwMDAwMDA0MCkKKyNkZWZpbmUgVFhPUF9DVFJMX0NGR19FWFRfQ0NBX0VOCUZJRUxEMzIoMHgwMDAwMDA4MCkKKyNkZWZpbmUgVFhPUF9DVFJMX0NGR19FWFRfQ0NBX0RMWQlGSUVMRDMyKDB4MDAwMGZmMDApCisjZGVmaW5lIFRYT1BfQ1RSTF9DRkdfRVhUX0NXTUlOCQlGSUVMRDMyKDB4MDAwZjAwMDApCiAKIC8qCiAgKiBUWF9SVFNfQ0ZHOgpAQCAtMTQ4NSwxNyArMTUzNywxNyBAQAogI2RlZmluZSBTSEFSRURfS0VZX01PREVfQkFTRQkJMHg3MDAwCiAKICNkZWZpbmUgTUFDX1dDSURfRU5UUlkoX19pZHgpIFwKLQkoIE1BQ19XQ0lEX0JBU0UgKyAoKF9faWR4KSAqIHNpemVvZihzdHJ1Y3QgbWFjX3djaWRfZW50cnkpKSApCisJKE1BQ19XQ0lEX0JBU0UgKyAoKF9faWR4KSAqIHNpemVvZihzdHJ1Y3QgbWFjX3djaWRfZW50cnkpKSkKICNkZWZpbmUgUEFJUldJU0VfS0VZX0VOVFJZKF9faWR4KSBcCi0JKCBQQUlSV0lTRV9LRVlfVEFCTEVfQkFTRSArICgoX19pZHgpICogc2l6ZW9mKHN0cnVjdCBod19rZXlfZW50cnkpKSApCisJKFBBSVJXSVNFX0tFWV9UQUJMRV9CQVNFICsgKChfX2lkeCkgKiBzaXplb2Yoc3RydWN0IGh3X2tleV9lbnRyeSkpKQogI2RlZmluZSBNQUNfSVZFSVZfRU5UUlkoX19pZHgpIFwKLQkoIE1BQ19JVkVJVl9UQUJMRV9CQVNFICsgKChfX2lkeCkgKiBzaXplb2Yoc3RydWN0IG1hY19pdmVpdl9lbnRyeSkpICkKKwkoTUFDX0lWRUlWX1RBQkxFX0JBU0UgKyAoKF9faWR4KSAqIHNpemVvZihzdHJ1Y3QgbWFjX2l2ZWl2X2VudHJ5KSkpCiAjZGVmaW5lIE1BQ19XQ0lEX0FUVFJfRU5UUlkoX19pZHgpIFwKLQkoIE1BQ19XQ0lEX0FUVFJJQlVURV9CQVNFICsgKChfX2lkeCkgKiBzaXplb2YodTMyKSkgKQorCShNQUNfV0NJRF9BVFRSSUJVVEVfQkFTRSArICgoX19pZHgpICogc2l6ZW9mKHUzMikpKQogI2RlZmluZSBTSEFSRURfS0VZX0VOVFJZKF9faWR4KSBcCi0JKCBTSEFSRURfS0VZX1RBQkxFX0JBU0UgKyAoKF9faWR4KSAqIHNpemVvZihzdHJ1Y3QgaHdfa2V5X2VudHJ5KSkgKQorCShTSEFSRURfS0VZX1RBQkxFX0JBU0UgKyAoKF9faWR4KSAqIHNpemVvZihzdHJ1Y3QgaHdfa2V5X2VudHJ5KSkpCiAjZGVmaW5lIFNIQVJFRF9LRVlfTU9ERV9FTlRSWShfX2lkeCkgXAotCSggU0hBUkVEX0tFWV9NT0RFX0JBU0UgKyAoKF9faWR4KSAqIHNpemVvZih1MzIpKSApCisJKFNIQVJFRF9LRVlfTU9ERV9CQVNFICsgKChfX2lkeCkgKiBzaXplb2YodTMyKSkpCiAKIHN0cnVjdCBtYWNfd2NpZF9lbnRyeSB7CiAJdTggbWFjWzZdOwpAQCAtMTYzNSw5ICsxNjg3LDkgQEAKICNkZWZpbmUgSFdfQkVBQ09OX0JBU0U3CQkJMHg1YmMwCiAKICNkZWZpbmUgSFdfQkVBQ09OX09GRlNFVChfX2luZGV4KSBcCi0JKCAoKF9faW5kZXgpIDwgNCkgPyAoIEhXX0JFQUNPTl9CQVNFMCArIChfX2luZGV4ICogMHgwMjAwKSApIDogXAotCSAgKCgoX19pbmRleCkgPCA2KSA/ICggSFdfQkVBQ09OX0JBU0U0ICsgKChfX2luZGV4IC0gNCkgKiAweDAyMDApICkgOiBcCi0JICAoSFdfQkVBQ09OX0JBU0U2IC0gKChfX2luZGV4IC0gNikgKiAweDAyMDApKSkgKQorCSgoKF9faW5kZXgpIDwgNCkgPyAoSFdfQkVBQ09OX0JBU0UwICsgKF9faW5kZXggKiAweDAyMDApKSA6IFwKKwkgICgoKF9faW5kZXgpIDwgNikgPyAoSFdfQkVBQ09OX0JBU0U0ICsgKChfX2luZGV4IC0gNCkgKiAweDAyMDApKSA6IFwKKwkgIChIV19CRUFDT05fQkFTRTYgLSAoKF9faW5kZXggLSA2KSAqIDB4MDIwMCkpKSkKIAogLyoKICAqIEJCUCByZWdpc3RlcnMuCkBAIC0xODA1LDMyICsxODU3LDUxIEBACiAjZGVmaW5lIEVFUFJPTV9NQUNfQUREUl9CWVRFNQkJRklFTEQxNigweGZmMDApCiAKIC8qCi0gKiBFRVBST00gQU5URU5OQSBjb25maWcKKyAqIEVFUFJPTSBOSUMgQ29uZmlndXJhdGlvbiAwCiAgKiBSWFBBVEg6IDE6IDFSLCAyOiAyUiwgMzogM1IKLSAqIFRYUEFUSDogMTogMVQsIDI6IDJUCisgKiBUWFBBVEg6IDE6IDFULCAyOiAyVCwgMzogM1QKKyAqIFJGX1RZUEU6IFJGSUMgdHlwZQogICovCi0jZGVmaW5lCUVFUFJPTV9BTlRFTk5BCQkJMHgwMDFhCi0jZGVmaW5lIEVFUFJPTV9BTlRFTk5BX1JYUEFUSAkJRklFTEQxNigweDAwMGYpCi0jZGVmaW5lIEVFUFJPTV9BTlRFTk5BX1RYUEFUSAkJRklFTEQxNigweDAwZjApCi0jZGVmaW5lIEVFUFJPTV9BTlRFTk5BX1JGX1RZUEUJCUZJRUxEMTYoMHgwZjAwKQorI2RlZmluZQlFRVBST01fTklDX0NPTkYwCQkweDAwMWEKKyNkZWZpbmUgRUVQUk9NX05JQ19DT05GMF9SWFBBVEgJCUZJRUxEMTYoMHgwMDBmKQorI2RlZmluZSBFRVBST01fTklDX0NPTkYwX1RYUEFUSAkJRklFTEQxNigweDAwZjApCisjZGVmaW5lIEVFUFJPTV9OSUNfQ09ORjBfUkZfVFlQRQkJRklFTEQxNigweDBmMDApCiAKIC8qCi0gKiBFRVBST00gTklDIGNvbmZpZwotICogQ0FSREJVU19BQ0NFTDogMCAtIGVuYWJsZSwgMSAtIGRpc2FibGUKKyAqIEVFUFJPTSBOSUMgQ29uZmlndXJhdGlvbiAxCisgKiBIV19SQURJTzogMDogZGlzYWJsZSwgMTogZW5hYmxlCisgKiBFWFRFUk5BTF9UWF9BTEM6IDA6IGRpc2FibGUsIDE6IGVuYWJsZQorICogRVhURVJOQUxfTE5BXzJHOiAwOiBkaXNhYmxlLCAxOiBlbmFibGUKKyAqIEVYVEVSTkFMX0xOQV81RzogMDogZGlzYWJsZSwgMTogZW5hYmxlCisgKiBDQVJEQlVTX0FDQ0VMOiAwOiBlbmFibGUsIDE6IGRpc2FibGUKKyAqIEJXNDBNX1NCXzJHOiAwOiBkaXNhYmxlLCAxOiBlbmFibGUKKyAqIEJXNDBNX1NCXzVHOiAwOiBkaXNhYmxlLCAxOiBlbmFibGUKKyAqIFdQU19QQkM6IDA6IGRpc2FibGUsIDE6IGVuYWJsZQorICogQlc0ME1fMkc6IDA6IGVuYWJsZSwgMTogZGlzYWJsZQorICogQlc0ME1fNUc6IDA6IGVuYWJsZSwgMTogZGlzYWJsZQorICogQlJPQURCQU5EX0VYVF9MTkE6IDA6IGRpc2FibGUsIDE6IGVuYWJsZQorICogQU5UX0RJVkVSU0lUWTogMDA6IERpc2FibGUsIDAxOiBEaXZlcnNpdHksCisgKiAJCQkJICAxMDogTWFpbiBhbnRlbm5hLCAxMTogQXV4IGFudGVubmEKKyAqIElOVEVSTkFMX1RYX0FMQzogMDogZGlzYWJsZSwgMTogZW5hYmxlCisgKiBCVF9DT0VYSVNUOiAwOiBkaXNhYmxlLCAxOiBlbmFibGUKKyAqIERBQ19URVNUOiAwOiBkaXNhYmxlLCAxOiBlbmFibGUKICAqLwotI2RlZmluZQlFRVBST01fTklDCQkJMHgwMDFiCi0jZGVmaW5lIEVFUFJPTV9OSUNfSFdfUkFESU8JCUZJRUxEMTYoMHgwMDAxKQotI2RlZmluZSBFRVBST01fTklDX0RZTkFNSUNfVFhfQUdDCUZJRUxEMTYoMHgwMDAyKQotI2RlZmluZSBFRVBST01fTklDX0VYVEVSTkFMX0xOQV9CRwlGSUVMRDE2KDB4MDAwNCkKLSNkZWZpbmUgRUVQUk9NX05JQ19FWFRFUk5BTF9MTkFfQQlGSUVMRDE2KDB4MDAwOCkKLSNkZWZpbmUgRUVQUk9NX05JQ19DQVJEQlVTX0FDQ0VMCUZJRUxEMTYoMHgwMDEwKQotI2RlZmluZSBFRVBST01fTklDX0JXNDBNX1NCX0JHCQlGSUVMRDE2KDB4MDAyMCkKLSNkZWZpbmUgRUVQUk9NX05JQ19CVzQwTV9TQl9BCQlGSUVMRDE2KDB4MDA0MCkKLSNkZWZpbmUgRUVQUk9NX05JQ19XUFNfUEJDCQlGSUVMRDE2KDB4MDA4MCkKLSNkZWZpbmUgRUVQUk9NX05JQ19CVzQwTV9CRwkJRklFTEQxNigweDAxMDApCi0jZGVmaW5lIEVFUFJPTV9OSUNfQlc0ME1fQQkJRklFTEQxNigweDAyMDApCi0jZGVmaW5lIEVFUFJPTV9OSUNfQU5UX0RJVkVSU0lUWQlGSUVMRDE2KDB4MDgwMCkKLSNkZWZpbmUgRUVQUk9NX05JQ19EQUNfVEVTVAkJRklFTEQxNigweDgwMDApCisjZGVmaW5lCUVFUFJPTV9OSUNfQ09ORjEJCTB4MDAxYgorI2RlZmluZSBFRVBST01fTklDX0NPTkYxX0hXX1JBRElPCQlGSUVMRDE2KDB4MDAwMSkKKyNkZWZpbmUgRUVQUk9NX05JQ19DT05GMV9FWFRFUk5BTF9UWF9BTEMJCUZJRUxEMTYoMHgwMDAyKQorI2RlZmluZSBFRVBST01fTklDX0NPTkYxX0VYVEVSTkFMX0xOQV8yRwkJRklFTEQxNigweDAwMDQpCisjZGVmaW5lIEVFUFJPTV9OSUNfQ09ORjFfRVhURVJOQUxfTE5BXzVHCQlGSUVMRDE2KDB4MDAwOCkKKyNkZWZpbmUgRUVQUk9NX05JQ19DT05GMV9DQVJEQlVTX0FDQ0VMCQlGSUVMRDE2KDB4MDAxMCkKKyNkZWZpbmUgRUVQUk9NX05JQ19DT05GMV9CVzQwTV9TQl8yRwkJRklFTEQxNigweDAwMjApCisjZGVmaW5lIEVFUFJPTV9OSUNfQ09ORjFfQlc0ME1fU0JfNUcJCUZJRUxEMTYoMHgwMDQwKQorI2RlZmluZSBFRVBST01fTklDX0NPTkYxX1dQU19QQkMJCUZJRUxEMTYoMHgwMDgwKQorI2RlZmluZSBFRVBST01fTklDX0NPTkYxX0JXNDBNXzJHCQlGSUVMRDE2KDB4MDEwMCkKKyNkZWZpbmUgRUVQUk9NX05JQ19DT05GMV9CVzQwTV81RwkJRklFTEQxNigweDAyMDApCisjZGVmaW5lIEVFUFJPTV9OSUNfQ09ORjFfQlJPQURCQU5EX0VYVF9MTkEJCUZJRUxEMTYoMHg0MDApCisjZGVmaW5lIEVFUFJPTV9OSUNfQ09ORjFfQU5UX0RJVkVSU0lUWQkJRklFTEQxNigweDE4MDApCisjZGVmaW5lIEVFUFJPTV9OSUNfQ09ORjFfSU5URVJOQUxfVFhfQUxDCQlGSUVMRDE2KDB4MjAwMCkKKyNkZWZpbmUgRUVQUk9NX05JQ19DT05GMV9CVF9DT0VYSVNUCQlGSUVMRDE2KDB4NDAwMCkKKyNkZWZpbmUgRUVQUk9NX05JQ19DT05GMV9EQUNfVEVTVAkJRklFTEQxNigweDgwMDApCiAKIC8qCiAgKiBFRVBST00gZnJlcXVlbmN5CkBAIC0xODUyLDkgKzE5MjMsOSBAQAogICogUE9MQVJJVFlfR1BJT180OiBQb2xhcml0eSBHUElPNCBzZXR0aW5nLgogICogTEVEX01PREU6IExlZCBtb2RlLgogICovCi0jZGVmaW5lIEVFUFJPTV9MRUQxCQkJMHgwMDFlCi0jZGVmaW5lIEVFUFJPTV9MRUQyCQkJMHgwMDFmCi0jZGVmaW5lIEVFUFJPTV9MRUQzCQkJMHgwMDIwCisjZGVmaW5lIEVFUFJPTV9MRURfQUdfQ09ORgkJMHgwMDFlCisjZGVmaW5lIEVFUFJPTV9MRURfQUNUX0NPTkYJCTB4MDAxZgorI2RlZmluZSBFRVBST01fTEVEX1BPTEFSSVRZCQkweDAwMjAKICNkZWZpbmUgRUVQUk9NX0xFRF9QT0xBUklUWV9SRFlfQkcJRklFTEQxNigweDAwMDEpCiAjZGVmaW5lIEVFUFJPTV9MRURfUE9MQVJJVFlfUkRZX0EJRklFTEQxNigweDAwMDIpCiAjZGVmaW5lIEVFUFJPTV9MRURfUE9MQVJJVFlfQUNUCQlGSUVMRDE2KDB4MDAwNCkKQEAgLTE4NjYsNiArMTkzNywxNyBAQAogI2RlZmluZSBFRVBST01fTEVEX0xFRF9NT0RFCQlGSUVMRDE2KDB4MWYwMCkKIAogLyoKKyAqIEVFUFJPTSBOSUMgQ29uZmlndXJhdGlvbiAyCisgKiBSWF9TVFJFQU06IDA6IFJlc2VydmVkLCAxOiAxIFN0cmVhbSwgMjogMiBTdHJlYW0KKyAqIFRYX1NUUkVBTTogMDogUmVzZXJ2ZWQsIDE6IDEgU3RyZWFtLCAyOiAyIFN0cmVhbQorICogQ1JZU1RBTDogMDA6IFJlc2VydmVkLCAwMTogT25lIGNyeXN0YWwsIDEwOiBUd28gY3J5c3RhbCwgMTE6IFJlc2VydmVkCisgKi8KKyNkZWZpbmUgRUVQUk9NX05JQ19DT05GMgkJMHgwMDIxCisjZGVmaW5lIEVFUFJPTV9OSUNfQ09ORjJfUlhfU1RSRUFNCQlGSUVMRDE2KDB4MDAwZikKKyNkZWZpbmUgRUVQUk9NX05JQ19DT05GMl9UWF9TVFJFQU0JCUZJRUxEMTYoMHgwMGYwKQorI2RlZmluZSBFRVBST01fTklDX0NPTkYyX0NSWVNUQUwJCUZJRUxEMTYoMHgwNjAwKQorCisvKgogICogRUVQUk9NIExOQQogICovCiAjZGVmaW5lIEVFUFJPTV9MTkEJCQkweDAwMjIKQEAgLTE5MTUsNyArMTk5Nyw3IEBACiAKIC8qCiAgKiBFRVBST00gVFhwb3dlciBkZWx0YTogMjBNSFogQU5EIDQwIE1IWiB1c2UgZGlmZmVyZW50IHBvd2VyLgotICoJVGhpcyBpcyBkZWx0YSBpbiA0ME1IWi4KKyAqIFRoaXMgaXMgZGVsdGEgaW4gNDBNSFouCiAgKiBWQUxVRTogVHggUG93ZXIgZGFsdGEgdmFsdWUgKE1BWD00KQogICogVFlQRTogMTogUGx1cyB0aGUgZGVsdGEgdmFsdWUsIDA6IG1pbnVzIHRoZSBkZWx0YSB2YWx1ZQogICogVFhQT1dFUjogRW5hYmxlOgpAQCAtMTk3MSw5ICsyMDUzLDkgQEAKICNkZWZpbmUgTUNVX0NVUlJFTlQJCQkweDM2CiAjZGVmaW5lIE1DVV9MRUQJCQkJMHg1MAogI2RlZmluZSBNQ1VfTEVEX1NUUkVOR1RICQkweDUxCi0jZGVmaW5lIE1DVV9MRURfMQkJCTB4NTIKLSNkZWZpbmUgTUNVX0xFRF8yCQkJMHg1MwotI2RlZmluZSBNQ1VfTEVEXzMJCQkweDU0CisjZGVmaW5lIE1DVV9MRURfQUdfQ09ORgkJMHg1MgorI2RlZmluZSBNQ1VfTEVEX0FDVF9DT05GCQkweDUzCisjZGVmaW5lIE1DVV9MRURfTEVEX1BPTEFSSVRZCQkweDU0CiAjZGVmaW5lIE1DVV9SQURBUgkJCTB4NjAKICNkZWZpbmUgTUNVX0JPT1RfU0lHTkFMCQkJMHg3MgogI2RlZmluZSBNQ1VfQkJQX1NJR05BTAkJCTB4ODAKQEAgLTE5ODcsOCArMjA2OSw4IEBACiAvKgogICogRE1BIGRlc2NyaXB0b3IgZGVmaW5lcy4KICAqLwotI2RlZmluZSBUWFdJX0RFU0NfU0laRQkJCSggNCAqIHNpemVvZihfX2xlMzIpICkKLSNkZWZpbmUgUlhXSV9ERVNDX1NJWkUJCQkoIDQgKiBzaXplb2YoX19sZTMyKSApCisjZGVmaW5lIFRYV0lfREVTQ19TSVpFCQkJKDQgKiBzaXplb2YoX19sZTMyKSkKKyNkZWZpbmUgUlhXSV9ERVNDX1NJWkUJCQkoNCAqIHNpemVvZihfX2xlMzIpKQogCiAvKgogICogVFggV0kgc3RydWN0dXJlCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwbGliLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwbGliLmMKaW5kZXggNWYwMGUwMC4uNTQ5MTdhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMGxpYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDBsaWIuYwpAQCAtMjc3LDEzICsyNzcsMTcgQEAKIAl1bnNpZ25lZCBpbnQgaTsKIAl1MzIgcmVnOwogCisJLyoKKwkgKiBTb21lIGRldmljZXMgYXJlIHJlYWxseSBzbG93IHRvIHJlc3BvbmQgaGVyZS4gV2FpdCBhIHdob2xlIHNlY29uZAorCSAqIGJlZm9yZSB0aW1pbmcgb3V0LgorCSAqLwogCWZvciAoaSA9IDA7IGkgPCBSRUdJU1RFUl9CVVNZX0NPVU5UOyBpKyspIHsKIAkJcnQyODAwX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBXUERNQV9HTE9fQ0ZHLCAmcmVnKTsKIAkJaWYgKCFydDJ4MDBfZ2V0X2ZpZWxkMzIocmVnLCBXUERNQV9HTE9fQ0ZHX1RYX0RNQV9CVVNZKSAmJgogCQkgICAgIXJ0MngwMF9nZXRfZmllbGQzMihyZWcsIFdQRE1BX0dMT19DRkdfUlhfRE1BX0JVU1kpKQogCQkJcmV0dXJuIDA7CiAKLQkJbXNsZWVwKDEpOworCQltc2xlZXAoMTApOwogCX0KIAogCUVSUk9SKHJ0MngwMGRldiwgIldQRE1BIFRYL1JYIGJ1c3ksIGFib3J0aW5nLlxuIik7CkBAIC00ODMsNyArNDg3LDcgQEAKIAkJCSAgIHR4ZGVzYy0+a2V5X2lkeCA6IDB4ZmYpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhXSV9XMV9NUERVX1RPVEFMX0JZVEVfQ09VTlQsCiAJCQkgICB0eGRlc2MtPmxlbmd0aCk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWFdJX1cxX1BBQ0tFVElEX1FVRVVFLCB0eGRlc2MtPnFpZCk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWFdJX1cxX1BBQ0tFVElEX1FVRVVFLCBlbnRyeS0+cXVldWUtPnFpZCk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWFdJX1cxX1BBQ0tFVElEX0VOVFJZLCAoZW50cnktPmVudHJ5X2lkeCAlIDMpICsgMSk7CiAJcnQyeDAwX2Rlc2Nfd3JpdGUodHh3aSwgMSwgd29yZCk7CiAKQEAgLTcyNyw3ICs3MzEsNyBAQAogCSAqIHRoYXQgdGhlIFRYX1NUQV9GSUZPIHN0YWNrIGhhcyBhIHNpemUgb2YgMTYuIFdlIHN0aWNrIHRvIG91cgogCSAqIHR4IHJpbmcgc2l6ZSBmb3Igbm93LgogCSAqLwotCWZvciAoaSA9IDA7IGkgPCBUWF9FTlRSSUVTOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgcnQyeDAwZGV2LT5vcHMtPnR4LT5lbnRyeV9udW07IGkrKykgewogCQlydDI4MDBfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRYX1NUQV9GSUZPLCAmcmVnKTsKIAkJaWYgKCFydDJ4MDBfZ2V0X2ZpZWxkMzIocmVnLCBUWF9TVEFfRklGT19WQUxJRCkpCiAJCQlicmVhazsKQEAgLTc2OCw2ICs3NzIsNyBAQAogCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBlbnRyeS0+cXVldWUtPnJ0MngwMGRldjsKIAlzdHJ1Y3Qgc2tiX2ZyYW1lX2Rlc2MgKnNrYmRlc2MgPSBnZXRfc2tiX2ZyYW1lX2Rlc2MoZW50cnktPnNrYik7CiAJdW5zaWduZWQgaW50IGJlYWNvbl9iYXNlOworCXVuc2lnbmVkIGludCBwYWRkaW5nX2xlbjsKIAl1MzIgcmVnOwogCiAJLyoKQEAgLTgwMiwxMSArODA3LDEzIEBACiAJcnQyeDAwZGVidWdfZHVtcF9mcmFtZShydDJ4MDBkZXYsIERVTVBfRlJBTUVfQkVBQ09OLCBlbnRyeS0+c2tiKTsKIAogCS8qCi0JICogV3JpdGUgZW50aXJlIGJlYWNvbiB3aXRoIFRYV0kgdG8gcmVnaXN0ZXIuCisJICogV3JpdGUgZW50aXJlIGJlYWNvbiB3aXRoIFRYV0kgYW5kIHBhZGRpbmcgdG8gcmVnaXN0ZXIuCiAJICovCisJcGFkZGluZ19sZW4gPSByb3VuZHVwKGVudHJ5LT5za2ItPmxlbiwgNCkgLSBlbnRyeS0+c2tiLT5sZW47CisJc2tiX3BhZChlbnRyeS0+c2tiLCBwYWRkaW5nX2xlbik7CiAJYmVhY29uX2Jhc2UgPSBIV19CRUFDT05fT0ZGU0VUKGVudHJ5LT5lbnRyeV9pZHgpOwotCXJ0MjgwMF9yZWdpc3Rlcl9tdWx0aXdyaXRlKHJ0MngwMGRldiwgYmVhY29uX2Jhc2UsCi0JCQkJICAgZW50cnktPnNrYi0+ZGF0YSwgZW50cnktPnNrYi0+bGVuKTsKKwlydDI4MDBfcmVnaXN0ZXJfbXVsdGl3cml0ZShydDJ4MDBkZXYsIGJlYWNvbl9iYXNlLCBlbnRyeS0+c2tiLT5kYXRhLAorCQkJCSAgIGVudHJ5LT5za2ItPmxlbiArIHBhZGRpbmdfbGVuKTsKIAogCS8qCiAJICogRW5hYmxlIGJlYWNvbmluZyBhZ2Fpbi4KQEAgLTgyNCw3ICs4MzEsNyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwocnQyODAwX3dyaXRlX2JlYWNvbik7CiAKLXN0YXRpYyB2b2lkIGlubGluZSBydDI4MDBfY2xlYXJfYmVhY29uKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCitzdGF0aWMgaW5saW5lIHZvaWQgcnQyODAwX2NsZWFyX2JlYWNvbihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAogCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgYmVhY29uX2Jhc2UpCiB7CiAJaW50IGk7CkBAIC0xMTQ0LDYgKzExNTEsNyBAQAogCQkJc3RydWN0IHJ0MngwMGludGZfY29uZiAqY29uZiwgY29uc3QgdW5zaWduZWQgaW50IGZsYWdzKQogewogCXUzMiByZWc7CisJYm9vbCB1cGRhdGVfYnNzaWQgPSBmYWxzZTsKIAogCWlmIChmbGFncyAmIENPTkZJR19VUERBVEVfVFlQRSkgewogCQkvKgpAQCAtMTE3Myw2ICsxMTgxLDE2IEBACiAJfQogCiAJaWYgKGZsYWdzICYgQ09ORklHX1VQREFURV9NQUMpIHsKKwkJaWYgKGZsYWdzICYgQ09ORklHX1VQREFURV9UWVBFICYmCisJCSAgICBjb25mLT5zeW5jID09IFRTRl9TWU5DX0FQX05PTkUpIHsKKwkJCS8qCisJCQkgKiBUaGUgQlNTSUQgcmVnaXN0ZXIgaGFzIHRvIGJlIHNldCB0byBvdXIgb3duIG1hYworCQkJICogYWRkcmVzcyBpbiBBUCBtb2RlLgorCQkJICovCisJCQltZW1jcHkoY29uZi0+YnNzaWQsIGNvbmYtPm1hYywgc2l6ZW9mKGNvbmYtPm1hYykpOworCQkJdXBkYXRlX2Jzc2lkID0gdHJ1ZTsKKwkJfQorCiAJCWlmICghaXNfemVyb19ldGhlcl9hZGRyKChjb25zdCB1OCAqKWNvbmYtPm1hYykpIHsKIAkJCXJlZyA9IGxlMzJfdG9fY3B1KGNvbmYtPm1hY1sxXSk7CiAJCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTUFDX0FERFJfRFcxX1VOSUNBU1RfVE9fTUVfTUFTSywgMHhmZik7CkBAIC0xMTgzLDcgKzEyMDEsNyBAQAogCQkJCQkgICAgICBjb25mLT5tYWMsIHNpemVvZihjb25mLT5tYWMpKTsKIAl9CiAKLQlpZiAoZmxhZ3MgJiBDT05GSUdfVVBEQVRFX0JTU0lEKSB7CisJaWYgKChmbGFncyAmIENPTkZJR19VUERBVEVfQlNTSUQpIHx8IHVwZGF0ZV9ic3NpZCkgewogCQlpZiAoIWlzX3plcm9fZXRoZXJfYWRkcigoY29uc3QgdTggKiljb25mLT5ic3NpZCkpIHsKIAkJCXJlZyA9IGxlMzJfdG9fY3B1KGNvbmYtPmJzc2lkWzFdKTsKIAkJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBNQUNfQlNTSURfRFcxX0JTU19JRF9NQVNLLCAzKTsKQEAgLTE1MjksNyArMTU0Nyw4IEBACiAJICAgIHJ0MngwMF9yZihydDJ4MDBkZXYsIFJGMzAyMCkgfHwKIAkgICAgcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYzMDIxKSB8fAogCSAgICBydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjMwMjIpIHx8Ci0JICAgIHJ0MngwMF9yZihydDJ4MDBkZXYsIFJGMzA1MikpCisJICAgIHJ0MngwMF9yZihydDJ4MDBkZXYsIFJGMzA1MikgfHwKKwkgICAgcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYzMzIwKSkKIAkJcnQyODAwX2NvbmZpZ19jaGFubmVsX3JmM3h4eChydDJ4MDBkZXYsIGNvbmYsIHJmLCBpbmZvKTsKIAllbHNlCiAJCXJ0MjgwMF9jb25maWdfY2hhbm5lbF9yZjJ4eHgocnQyeDAwZGV2LCBjb25mLCByZiwgaW5mbyk7CkBAIC0xNjA5LDYgKzE2MjgsMTMgQEAKIAl9CiAKIAltc2xlZXAoMSk7CisKKwkvKgorCSAqIENsZWFyIGNoYW5uZWwgc3RhdGlzdGljIGNvdW50ZXJzCisJICovCisJcnQyODAwX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBDSF9JRExFX1NUQSwgJnJlZyk7CisJcnQyODAwX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBDSF9CVVNZX1NUQSwgJnJlZyk7CisJcnQyODAwX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBDSF9CVVNZX1NUQV9TRUMsICZyZWcpOwogfQogCiBzdGF0aWMgdm9pZCBydDI4MDBfY29uZmlnX3R4cG93ZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKQEAgLTE5MTQsOCArMTk0MCw4IEBACiAJCWlmIChydDJ4MDBfcnRfcmV2X2x0KHJ0MngwMGRldiwgUlQzMDcxLCBSRVZfUlQzMDcxRSkgfHwKIAkJICAgIHJ0MngwMF9ydF9yZXZfbHQocnQyeDAwZGV2LCBSVDMwOTAsIFJFVl9SVDMwOTBFKSB8fAogCQkgICAgcnQyeDAwX3J0X3Jldl9sdChydDJ4MDBkZXYsIFJUMzM5MCwgUkVWX1JUMzM5MEUpKSB7Ci0JCQlydDJ4MDBfZWVwcm9tX3JlYWQocnQyeDAwZGV2LCBFRVBST01fTklDLCAmZWVwcm9tKTsKLQkJCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fTklDX0RBQ19URVNUKSkKKwkJCXJ0MngwMF9lZXByb21fcmVhZChydDJ4MDBkZXYsIEVFUFJPTV9OSUNfQ09ORjEsICZlZXByb20pOworCQkJaWYgKHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9OSUNfQ09ORjFfREFDX1RFU1QpKQogCQkJCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYX1NXX0NGRzIsCiAJCQkJCQkgICAgICAweDAwMDAwMDJjKTsKIAkJCWVsc2UKQEAgLTIwOTcsNyArMjEyMywyMyBAQAogCQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBXUERNQV9HTE9fQ0ZHLCByZWcpOwogCX0KIAotCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYT1BfQ1RSTF9DRkcsIDB4MDAwMDU4M2YpOworCS8qCisJICogVGhlIGxlZ2FjeSBkcml2ZXIgYWxzbyBzZXRzIFRYT1BfQ1RSTF9DRkdfUkVTRVJWRURfVFJVTl9FTiB0byAxCisJICogYWx0aG91Z2ggaXQgaXMgcmVzZXJ2ZWQuCisJICovCisJcnQyODAwX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBUWE9QX0NUUkxfQ0ZHLCAmcmVnKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhPUF9DVFJMX0NGR19USU1FT1VUX1RSVU5fRU4sIDEpOworCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWE9QX0NUUkxfQ0ZHX0FDX1RSVU5fRU4sIDEpOworCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWE9QX0NUUkxfQ0ZHX1RYUkFURUdSUF9UUlVOX0VOLCAxKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhPUF9DVFJMX0NGR19VU0VSX01PREVfVFJVTl9FTiwgMSk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYT1BfQ1RSTF9DRkdfTUlNT19QU19UUlVOX0VOLCAxKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhPUF9DVFJMX0NGR19SRVNFUlZFRF9UUlVOX0VOLCAxKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhPUF9DVFJMX0NGR19MU0lHX1RYT1BfRU4sIDApOworCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWE9QX0NUUkxfQ0ZHX0VYVF9DQ0FfRU4sIDApOworCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWE9QX0NUUkxfQ0ZHX0VYVF9DQ0FfRExZLCA4OCk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYT1BfQ1RSTF9DRkdfRVhUX0NXTUlOLCAwKTsKKwlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWE9QX0NUUkxfQ0ZHLCByZWcpOworCiAJcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhPUF9ITERSX0VULCAweDAwMDAwMDAyKTsKIAogCXJ0MjgwMF9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgVFhfUlRTX0NGRywgJnJlZyk7CkBAIC0yMTM0LDcgKzIxNzYsNyBAQAogCQkJCQkgU0hBUkVEX0tFWV9NT0RFX0VOVFJZKGkpLCAwKTsKIAogCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgewotCQl1MzIgd2NpZFsyXSA9IHsgMHhmZmZmZmZmZiwgMHgwMGZmZmZmZiB9OworCQlzdGF0aWMgY29uc3QgdTMyIHdjaWRbMl0gPSB7IDB4ZmZmZmZmZmYsIDB4MDBmZmZmZmYgfTsKIAkJcnQyODAwX3JlZ2lzdGVyX211bHRpd3JpdGUocnQyeDAwZGV2LCBNQUNfV0NJRF9FTlRSWShpKSwKIAkJCQkJICAgICAgd2NpZCwgc2l6ZW9mKHdjaWQpKTsKIApAQCAtMjIyNyw2ICsyMjY5LDE3IEBACiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIElOVF9USU1FUl9DRkdfUFJFX1RCVFRfVElNRVIsIDYgPDwgNCk7CiAJcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgSU5UX1RJTUVSX0NGRywgcmVnKTsKIAorCS8qCisJICogU2V0IHVwIGNoYW5uZWwgc3RhdGlzdGljcyB0aW1lcgorCSAqLworCXJ0MjgwMF9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgQ0hfVElNRV9DRkcsICZyZWcpOworCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBDSF9USU1FX0NGR19FSUZTX0JVU1ksIDEpOworCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBDSF9USU1FX0NGR19OQVZfQlVTWSwgMSk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIENIX1RJTUVfQ0ZHX1JYX0JVU1ksIDEpOworCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBDSF9USU1FX0NGR19UWF9CVVNZLCAxKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQ0hfVElNRV9DRkdfVE1SX0VOLCAxKTsKKwlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBDSF9USU1FX0NGRywgcmVnKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0yMzQ0LDEwICsyMzk3LDEwIEBACiAJICAgIHJ0MngwMF9ydChydDJ4MDBkZXYsIFJUMzM5MCkpIHsKIAkJcnQyODAwX2JicF9yZWFkKHJ0MngwMGRldiwgMTM4LCAmdmFsdWUpOwogCi0JCXJ0MngwMF9lZXByb21fcmVhZChydDJ4MDBkZXYsIEVFUFJPTV9BTlRFTk5BLCAmZWVwcm9tKTsKLQkJaWYgKHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9BTlRFTk5BX1RYUEFUSCkgPT0gMSkKKwkJcnQyeDAwX2VlcHJvbV9yZWFkKHJ0MngwMGRldiwgRUVQUk9NX05JQ19DT05GMCwgJmVlcHJvbSk7CisJCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fTklDX0NPTkYwX1RYUEFUSCkgPT0gMSkKIAkJCXZhbHVlIHw9IDB4MjA7Ci0JCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fQU5URU5OQV9SWFBBVEgpID09IDEpCisJCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fTklDX0NPTkYwX1JYUEFUSCkgPT0gMSkKIAkJCXZhbHVlICY9IH4weDAyOwogCiAJCXJ0MjgwMF9iYnBfd3JpdGUocnQyeDAwZGV2LCAxMzgsIHZhbHVlKTsKQEAgLTI1NTksOCArMjYxMiw4IEBACiAJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBMRE9fQ0ZHMF9CR1NFTCwgMSk7CiAJCWlmIChydDJ4MDBfcnRfcmV2X2x0KHJ0MngwMGRldiwgUlQzMDcxLCBSRVZfUlQzMDcxRSkgfHwKIAkJICAgIHJ0MngwMF9ydF9yZXZfbHQocnQyeDAwZGV2LCBSVDMwOTAsIFJFVl9SVDMwOTBFKSkgewotCQkJcnQyeDAwX2VlcHJvbV9yZWFkKHJ0MngwMGRldiwgRUVQUk9NX05JQywgJmVlcHJvbSk7Ci0JCQlpZiAocnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwgRUVQUk9NX05JQ19EQUNfVEVTVCkpCisJCQlydDJ4MDBfZWVwcm9tX3JlYWQocnQyeDAwZGV2LCBFRVBST01fTklDX0NPTkYxLCAmZWVwcm9tKTsKKwkJCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fTklDX0NPTkYxX0RBQ19URVNUKSkKIAkJCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTERPX0NGRzBfTERPX0NPUkVfVkxFVkVMLCAzKTsKIAkJCWVsc2UKIAkJCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTERPX0NGRzBfTERPX0NPUkVfVkxFVkVMLCAwKTsKQEAgLTI2MzMsMTAgKzI2ODYsMTAgQEAKIAlpZiAocnQyeDAwX3J0KHJ0MngwMGRldiwgUlQzMDkwKSkgewogCQlydDI4MDBfYmJwX3JlYWQocnQyeDAwZGV2LCAxMzgsICZiYnApOwogCi0JCXJ0MngwMF9lZXByb21fcmVhZChydDJ4MDBkZXYsIEVFUFJPTV9BTlRFTk5BLCAmZWVwcm9tKTsKLQkJaWYgKHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9BTlRFTk5BX1JYUEFUSCkgPT0gMSkKKwkJcnQyeDAwX2VlcHJvbV9yZWFkKHJ0MngwMGRldiwgRUVQUk9NX05JQ19DT05GMCwgJmVlcHJvbSk7CisJCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fTklDX0NPTkYwX1JYUEFUSCkgPT0gMSkKIAkJCXJ0MngwMF9zZXRfZmllbGQ4KCZiYnAsIEJCUDEzOF9SWF9BREMxLCAwKTsKLQkJaWYgKHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9BTlRFTk5BX1RYUEFUSCkgPT0gMSkKKwkJaWYgKHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9OSUNfQ09ORjBfVFhQQVRIKSA9PSAxKQogCQkJcnQyeDAwX3NldF9maWVsZDgoJmJicCwgQkJQMTM4X1RYX0RBQzEsIDEpOwogCiAJCXJ0MjgwMF9iYnBfd3JpdGUocnQyeDAwZGV2LCAxMzgsIGJicCk7CkBAIC0yNzM1LDE2ICsyNzg4LDE2IEBACiAJLyoKIAkgKiBJbml0aWFsaXplIExFRCBjb250cm9sCiAJICovCi0JcnQyeDAwX2VlcHJvbV9yZWFkKHJ0MngwMGRldiwgRUVQUk9NX0xFRDEsICZ3b3JkKTsKLQlydDI4MDBfbWN1X3JlcXVlc3QocnQyeDAwZGV2LCBNQ1VfTEVEXzEsIDB4ZmYsCisJcnQyeDAwX2VlcHJvbV9yZWFkKHJ0MngwMGRldiwgRUVQUk9NX0xFRF9BR19DT05GLCAmd29yZCk7CisJcnQyODAwX21jdV9yZXF1ZXN0KHJ0MngwMGRldiwgTUNVX0xFRF9BR19DT05GLCAweGZmLAogCQkJICAgd29yZCAmIDB4ZmYsICh3b3JkID4+IDgpICYgMHhmZik7CiAKLQlydDJ4MDBfZWVwcm9tX3JlYWQocnQyeDAwZGV2LCBFRVBST01fTEVEMiwgJndvcmQpOwotCXJ0MjgwMF9tY3VfcmVxdWVzdChydDJ4MDBkZXYsIE1DVV9MRURfMiwgMHhmZiwKKwlydDJ4MDBfZWVwcm9tX3JlYWQocnQyeDAwZGV2LCBFRVBST01fTEVEX0FDVF9DT05GLCAmd29yZCk7CisJcnQyODAwX21jdV9yZXF1ZXN0KHJ0MngwMGRldiwgTUNVX0xFRF9BQ1RfQ09ORiwgMHhmZiwKIAkJCSAgIHdvcmQgJiAweGZmLCAod29yZCA+PiA4KSAmIDB4ZmYpOwogCi0JcnQyeDAwX2VlcHJvbV9yZWFkKHJ0MngwMGRldiwgRUVQUk9NX0xFRDMsICZ3b3JkKTsKLQlydDI4MDBfbWN1X3JlcXVlc3QocnQyeDAwZGV2LCBNQ1VfTEVEXzMsIDB4ZmYsCisJcnQyeDAwX2VlcHJvbV9yZWFkKHJ0MngwMGRldiwgRUVQUk9NX0xFRF9QT0xBUklUWSwgJndvcmQpOworCXJ0MjgwMF9tY3VfcmVxdWVzdChydDJ4MDBkZXYsIE1DVV9MRURfTEVEX1BPTEFSSVRZLCAweGZmLAogCQkJICAgd29yZCAmIDB4ZmYsICh3b3JkID4+IDgpICYgMHhmZik7CiAKIAlyZXR1cm4gMDsKQEAgLTI4MzgsMzggKzI4OTEsNDEgQEAKIAkJRUVQUk9NKHJ0MngwMGRldiwgIk1BQzogJXBNXG4iLCBtYWMpOwogCX0KIAotCXJ0MngwMF9lZXByb21fcmVhZChydDJ4MDBkZXYsIEVFUFJPTV9BTlRFTk5BLCAmd29yZCk7CisJcnQyeDAwX2VlcHJvbV9yZWFkKHJ0MngwMGRldiwgRUVQUk9NX05JQ19DT05GMCwgJndvcmQpOwogCWlmICh3b3JkID09IDB4ZmZmZikgewotCQlydDJ4MDBfc2V0X2ZpZWxkMTYoJndvcmQsIEVFUFJPTV9BTlRFTk5BX1JYUEFUSCwgMik7Ci0JCXJ0MngwMF9zZXRfZmllbGQxNigmd29yZCwgRUVQUk9NX0FOVEVOTkFfVFhQQVRILCAxKTsKLQkJcnQyeDAwX3NldF9maWVsZDE2KCZ3b3JkLCBFRVBST01fQU5URU5OQV9SRl9UWVBFLCBSRjI4MjApOwotCQlydDJ4MDBfZWVwcm9tX3dyaXRlKHJ0MngwMGRldiwgRUVQUk9NX0FOVEVOTkEsIHdvcmQpOworCQlydDJ4MDBfc2V0X2ZpZWxkMTYoJndvcmQsIEVFUFJPTV9OSUNfQ09ORjBfUlhQQVRILCAyKTsKKwkJcnQyeDAwX3NldF9maWVsZDE2KCZ3b3JkLCBFRVBST01fTklDX0NPTkYwX1RYUEFUSCwgMSk7CisJCXJ0MngwMF9zZXRfZmllbGQxNigmd29yZCwgRUVQUk9NX05JQ19DT05GMF9SRl9UWVBFLCBSRjI4MjApOworCQlydDJ4MDBfZWVwcm9tX3dyaXRlKHJ0MngwMGRldiwgRUVQUk9NX05JQ19DT05GMCwgd29yZCk7CiAJCUVFUFJPTShydDJ4MDBkZXYsICJBbnRlbm5hOiAweCUwNHhcbiIsIHdvcmQpOwogCX0gZWxzZSBpZiAocnQyeDAwX3J0KHJ0MngwMGRldiwgUlQyODYwKSB8fAogCQkgICBydDJ4MDBfcnQocnQyeDAwZGV2LCBSVDI4NzIpKSB7CiAJCS8qCiAJCSAqIFRoZXJlIGlzIGEgbWF4IG9mIDIgUlggc3RyZWFtcyBmb3IgUlQyOHgwIHNlcmllcwogCQkgKi8KLQkJaWYgKHJ0MngwMF9nZXRfZmllbGQxNih3b3JkLCBFRVBST01fQU5URU5OQV9SWFBBVEgpID4gMikKLQkJCXJ0MngwMF9zZXRfZmllbGQxNigmd29yZCwgRUVQUk9NX0FOVEVOTkFfUlhQQVRILCAyKTsKLQkJcnQyeDAwX2VlcHJvbV93cml0ZShydDJ4MDBkZXYsIEVFUFJPTV9BTlRFTk5BLCB3b3JkKTsKKwkJaWYgKHJ0MngwMF9nZXRfZmllbGQxNih3b3JkLCBFRVBST01fTklDX0NPTkYwX1JYUEFUSCkgPiAyKQorCQkJcnQyeDAwX3NldF9maWVsZDE2KCZ3b3JkLCBFRVBST01fTklDX0NPTkYwX1JYUEFUSCwgMik7CisJCXJ0MngwMF9lZXByb21fd3JpdGUocnQyeDAwZGV2LCBFRVBST01fTklDX0NPTkYwLCB3b3JkKTsKIAl9CiAKLQlydDJ4MDBfZWVwcm9tX3JlYWQocnQyeDAwZGV2LCBFRVBST01fTklDLCAmd29yZCk7CisJcnQyeDAwX2VlcHJvbV9yZWFkKHJ0MngwMGRldiwgRUVQUk9NX05JQ19DT05GMSwgJndvcmQpOwogCWlmICh3b3JkID09IDB4ZmZmZikgewotCQlydDJ4MDBfc2V0X2ZpZWxkMTYoJndvcmQsIEVFUFJPTV9OSUNfSFdfUkFESU8sIDApOwotCQlydDJ4MDBfc2V0X2ZpZWxkMTYoJndvcmQsIEVFUFJPTV9OSUNfRFlOQU1JQ19UWF9BR0MsIDApOwotCQlydDJ4MDBfc2V0X2ZpZWxkMTYoJndvcmQsIEVFUFJPTV9OSUNfRVhURVJOQUxfTE5BX0JHLCAwKTsKLQkJcnQyeDAwX3NldF9maWVsZDE2KCZ3b3JkLCBFRVBST01fTklDX0VYVEVSTkFMX0xOQV9BLCAwKTsKLQkJcnQyeDAwX3NldF9maWVsZDE2KCZ3b3JkLCBFRVBST01fTklDX0NBUkRCVVNfQUNDRUwsIDApOwotCQlydDJ4MDBfc2V0X2ZpZWxkMTYoJndvcmQsIEVFUFJPTV9OSUNfQlc0ME1fU0JfQkcsIDApOwotCQlydDJ4MDBfc2V0X2ZpZWxkMTYoJndvcmQsIEVFUFJPTV9OSUNfQlc0ME1fU0JfQSwgMCk7Ci0JCXJ0MngwMF9zZXRfZmllbGQxNigmd29yZCwgRUVQUk9NX05JQ19XUFNfUEJDLCAwKTsKLQkJcnQyeDAwX3NldF9maWVsZDE2KCZ3b3JkLCBFRVBST01fTklDX0JXNDBNX0JHLCAwKTsKLQkJcnQyeDAwX3NldF9maWVsZDE2KCZ3b3JkLCBFRVBST01fTklDX0JXNDBNX0EsIDApOwotCQlydDJ4MDBfc2V0X2ZpZWxkMTYoJndvcmQsIEVFUFJPTV9OSUNfQU5UX0RJVkVSU0lUWSwgMCk7Ci0JCXJ0MngwMF9zZXRfZmllbGQxNigmd29yZCwgRUVQUk9NX05JQ19EQUNfVEVTVCwgMCk7Ci0JCXJ0MngwMF9lZXByb21fd3JpdGUocnQyeDAwZGV2LCBFRVBST01fTklDLCB3b3JkKTsKKwkJcnQyeDAwX3NldF9maWVsZDE2KCZ3b3JkLCBFRVBST01fTklDX0NPTkYxX0hXX1JBRElPLCAwKTsKKwkJcnQyeDAwX3NldF9maWVsZDE2KCZ3b3JkLCBFRVBST01fTklDX0NPTkYxX0VYVEVSTkFMX1RYX0FMQywgMCk7CisJCXJ0MngwMF9zZXRfZmllbGQxNigmd29yZCwgRUVQUk9NX05JQ19DT05GMV9FWFRFUk5BTF9MTkFfMkcsIDApOworCQlydDJ4MDBfc2V0X2ZpZWxkMTYoJndvcmQsIEVFUFJPTV9OSUNfQ09ORjFfRVhURVJOQUxfTE5BXzVHLCAwKTsKKwkJcnQyeDAwX3NldF9maWVsZDE2KCZ3b3JkLCBFRVBST01fTklDX0NPTkYxX0NBUkRCVVNfQUNDRUwsIDApOworCQlydDJ4MDBfc2V0X2ZpZWxkMTYoJndvcmQsIEVFUFJPTV9OSUNfQ09ORjFfQlc0ME1fU0JfMkcsIDApOworCQlydDJ4MDBfc2V0X2ZpZWxkMTYoJndvcmQsIEVFUFJPTV9OSUNfQ09ORjFfQlc0ME1fU0JfNUcsIDApOworCQlydDJ4MDBfc2V0X2ZpZWxkMTYoJndvcmQsIEVFUFJPTV9OSUNfQ09ORjFfV1BTX1BCQywgMCk7CisJCXJ0MngwMF9zZXRfZmllbGQxNigmd29yZCwgRUVQUk9NX05JQ19DT05GMV9CVzQwTV8yRywgMCk7CisJCXJ0MngwMF9zZXRfZmllbGQxNigmd29yZCwgRUVQUk9NX05JQ19DT05GMV9CVzQwTV81RywgMCk7CisJCXJ0MngwMF9zZXRfZmllbGQxNigmd29yZCwgRUVQUk9NX05JQ19DT05GMV9CUk9BREJBTkRfRVhUX0xOQSwgMCk7CisJCXJ0MngwMF9zZXRfZmllbGQxNigmd29yZCwgRUVQUk9NX05JQ19DT05GMV9BTlRfRElWRVJTSVRZLCAwKTsKKwkJcnQyeDAwX3NldF9maWVsZDE2KCZ3b3JkLCBFRVBST01fTklDX0NPTkYxX0lOVEVSTkFMX1RYX0FMQywgMCk7CisJCXJ0MngwMF9zZXRfZmllbGQxNigmd29yZCwgRUVQUk9NX05JQ19DT05GMV9CVF9DT0VYSVNULCAwKTsKKwkJcnQyeDAwX3NldF9maWVsZDE2KCZ3b3JkLCBFRVBST01fTklDX0NPTkYxX0RBQ19URVNULCAwKTsKKwkJcnQyeDAwX2VlcHJvbV93cml0ZShydDJ4MDBkZXYsIEVFUFJPTV9OSUNfQ09ORjEsIHdvcmQpOwogCQlFRVBST00ocnQyeDAwZGV2LCAiTklDOiAweCUwNHhcbiIsIHdvcmQpOwogCX0KIApAQCAtMjg4NCw5ICsyOTQwLDkgQEAKIAkJCQkgICBMRURfTU9ERV9UWFJYX0FDVElWSVRZKTsKIAkJcnQyeDAwX3NldF9maWVsZDE2KCZ3b3JkLCBFRVBST01fRlJFUV9MRURfUE9MQVJJVFksIDApOwogCQlydDJ4MDBfZWVwcm9tX3dyaXRlKHJ0MngwMGRldiwgRUVQUk9NX0ZSRVEsIHdvcmQpOwotCQlydDJ4MDBfZWVwcm9tX3dyaXRlKHJ0MngwMGRldiwgRUVQUk9NX0xFRDEsIDB4NTU1NSk7Ci0JCXJ0MngwMF9lZXByb21fd3JpdGUocnQyeDAwZGV2LCBFRVBST01fTEVEMiwgMHgyMjIxKTsKLQkJcnQyeDAwX2VlcHJvbV93cml0ZShydDJ4MDBkZXYsIEVFUFJPTV9MRUQzLCAweGE5ZjgpOworCQlydDJ4MDBfZWVwcm9tX3dyaXRlKHJ0MngwMGRldiwgRUVQUk9NX0xFRF9BR19DT05GLCAweDU1NTUpOworCQlydDJ4MDBfZWVwcm9tX3dyaXRlKHJ0MngwMGRldiwgRUVQUk9NX0xFRF9BQ1RfQ09ORiwgMHgyMjIxKTsKKwkJcnQyeDAwX2VlcHJvbV93cml0ZShydDJ4MDBkZXYsIEVFUFJPTV9MRURfUE9MQVJJVFksIDB4YTlmOCk7CiAJCUVFUFJPTShydDJ4MDBkZXYsICJMZWQgTW9kZTogMHglMDR4XG4iLCB3b3JkKTsKIAl9CiAKQEAgLTI5NTAsMTIgKzMwMDYsMTIgQEAKIAkvKgogCSAqIFJlYWQgRUVQUk9NIHdvcmQgZm9yIGNvbmZpZ3VyYXRpb24uCiAJICovCi0JcnQyeDAwX2VlcHJvbV9yZWFkKHJ0MngwMGRldiwgRUVQUk9NX0FOVEVOTkEsICZlZXByb20pOworCXJ0MngwMF9lZXByb21fcmVhZChydDJ4MDBkZXYsIEVFUFJPTV9OSUNfQ09ORjAsICZlZXByb20pOwogCiAJLyoKIAkgKiBJZGVudGlmeSBSRiBjaGlwc2V0LgogCSAqLwotCXZhbHVlID0gcnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwgRUVQUk9NX0FOVEVOTkFfUkZfVFlQRSk7CisJdmFsdWUgPSBydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fTklDX0NPTkYwX1JGX1RZUEUpOwogCXJ0MjgwMF9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgTUFDX0NTUjAsICZyZWcpOwogCiAJcnQyeDAwX3NldF9jaGlwKHJ0MngwMGRldiwgcnQyeDAwX2dldF9maWVsZDMyKHJlZywgTUFDX0NTUjBfQ0hJUFNFVCksCkBAIC0yOTgxLDcgKzMwMzcsOCBAQAogCSAgICAhcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyMDIwKSAmJgogCSAgICAhcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYzMDIxKSAmJgogCSAgICAhcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYzMDIyKSAmJgotCSAgICAhcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYzMDUyKSkgeworCSAgICAhcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYzMDUyKSAmJgorCSAgICAhcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYzMzIwKSkgewogCQlFUlJPUihydDJ4MDBkZXYsICJJbnZhbGlkIFJGIGNoaXBzZXQgZGV0ZWN0ZWQuXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQpAQCAtMjk5MCw5ICszMDQ3LDkgQEAKIAkgKiBJZGVudGlmeSBkZWZhdWx0IGFudGVubmEgY29uZmlndXJhdGlvbi4KIAkgKi8KIAlydDJ4MDBkZXYtPmRlZmF1bHRfYW50LnR4ID0KLQkgICAgcnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwgRUVQUk9NX0FOVEVOTkFfVFhQQVRIKTsKKwkgICAgcnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwgRUVQUk9NX05JQ19DT05GMF9UWFBBVEgpOwogCXJ0MngwMGRldi0+ZGVmYXVsdF9hbnQucnggPQotCSAgICBydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fQU5URU5OQV9SWFBBVEgpOworCSAgICBydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fTklDX0NPTkYwX1JYUEFUSCk7CiAKIAkvKgogCSAqIFJlYWQgZnJlcXVlbmN5IG9mZnNldCBhbmQgUkYgcHJvZ3JhbW1pbmcgc2VxdWVuY2UuCkBAIC0zMDAzLDE3ICszMDYwLDE3IEBACiAJLyoKIAkgKiBSZWFkIGV4dGVybmFsIExOQSBpbmZvcm1hdGlvbnMuCiAJICovCi0JcnQyeDAwX2VlcHJvbV9yZWFkKHJ0MngwMGRldiwgRUVQUk9NX05JQywgJmVlcHJvbSk7CisJcnQyeDAwX2VlcHJvbV9yZWFkKHJ0MngwMGRldiwgRUVQUk9NX05JQ19DT05GMSwgJmVlcHJvbSk7CiAKLQlpZiAocnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwgRUVQUk9NX05JQ19FWFRFUk5BTF9MTkFfQSkpCisJaWYgKHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9OSUNfQ09ORjFfRVhURVJOQUxfTE5BXzVHKSkKIAkJX19zZXRfYml0KENPTkZJR19FWFRFUk5BTF9MTkFfQSwgJnJ0MngwMGRldi0+ZmxhZ3MpOwotCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fTklDX0VYVEVSTkFMX0xOQV9CRykpCisJaWYgKHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9OSUNfQ09ORjFfRVhURVJOQUxfTE5BXzJHKSkKIAkJX19zZXRfYml0KENPTkZJR19FWFRFUk5BTF9MTkFfQkcsICZydDJ4MDBkZXYtPmZsYWdzKTsKIAogCS8qCiAJICogRGV0ZWN0IGlmIHRoaXMgZGV2aWNlIGhhcyBhbiBoYXJkd2FyZSBjb250cm9sbGVkIHJhZGlvLgogCSAqLwotCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fTklDX0hXX1JBRElPKSkKKwlpZiAocnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwgRUVQUk9NX05JQ19DT05GMV9IV19SQURJTykpCiAJCV9fc2V0X2JpdChDT05GSUdfU1VQUE9SVF9IV19CVVRUT04sICZydDJ4MDBkZXYtPmZsYWdzKTsKIAogCS8qCkBAIC0zMjI1LDcgKzMyODIsNyBAQAogCXJ0MngwMGRldi0+aHctPm1heF9yZXBvcnRfcmF0ZXMgPSA3OwogCXJ0MngwMGRldi0+aHctPm1heF9yYXRlX3RyaWVzID0gMTsKIAotCXJ0MngwMF9lZXByb21fcmVhZChydDJ4MDBkZXYsIEVFUFJPTV9BTlRFTk5BLCAmZWVwcm9tKTsKKwlydDJ4MDBfZWVwcm9tX3JlYWQocnQyeDAwZGV2LCBFRVBST01fTklDX0NPTkYwLCAmZWVwcm9tKTsKIAogCS8qCiAJICogSW5pdGlhbGl6ZSBod19tb2RlIGluZm9ybWF0aW9uLgpAQCAtMzI0NSw3ICszMzAyLDggQEAKIAl9IGVsc2UgaWYgKHJ0MngwMF9yZihydDJ4MDBkZXYsIFJGMzAyMCkgfHwKIAkJICAgcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyMDIwKSB8fAogCQkgICBydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjMwMjEpIHx8Ci0JCSAgIHJ0MngwMF9yZihydDJ4MDBkZXYsIFJGMzAyMikpIHsKKwkJICAgcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYzMDIyKSB8fAorCQkgICBydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjMzMjApKSB7CiAJCXNwZWMtPm51bV9jaGFubmVscyA9IDE0OwogCQlzcGVjLT5jaGFubmVscyA9IHJmX3ZhbHNfM3g7CiAJfSBlbHNlIGlmIChydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjMwNTIpKSB7CkBAIC0zMjY4LDExICszMzI2LDExIEBACiAJICAgIElFRUU4MDIxMV9IVF9DQVBfU0dJXzIwIHwKIAkgICAgSUVFRTgwMjExX0hUX0NBUF9TR0lfNDA7CiAKLQlpZiAocnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwgRUVQUk9NX0FOVEVOTkFfVFhQQVRIKSA+PSAyKQorCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fTklDX0NPTkYwX1RYUEFUSCkgPj0gMikKIAkJc3BlYy0+aHQuY2FwIHw9IElFRUU4MDIxMV9IVF9DQVBfVFhfU1RCQzsKIAogCXNwZWMtPmh0LmNhcCB8PQotCSAgICBydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fQU5URU5OQV9SWFBBVEgpIDw8CisJICAgIHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9OSUNfQ09ORjBfUlhQQVRIKSA8PAogCQlJRUVFODAyMTFfSFRfQ0FQX1JYX1NUQkNfU0hJRlQ7CiAKIAlzcGVjLT5odC5hbXBkdV9mYWN0b3IgPSAzOwpAQCAtMzI4MCwxMCArMzMzOCwxMCBAQAogCXNwZWMtPmh0Lm1jcy50eF9wYXJhbXMgPQogCSAgICBJRUVFODAyMTFfSFRfTUNTX1RYX0RFRklORUQgfAogCSAgICBJRUVFODAyMTFfSFRfTUNTX1RYX1JYX0RJRkYgfAotCSAgICAoKHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9BTlRFTk5BX1RYUEFUSCkgLSAxKSA8PAorCSAgICAoKHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9OSUNfQ09ORjBfVFhQQVRIKSAtIDEpIDw8CiAJCUlFRUU4MDIxMV9IVF9NQ1NfVFhfTUFYX1NUUkVBTVNfU0hJRlQpOwogCi0Jc3dpdGNoIChydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fQU5URU5OQV9SWFBBVEgpKSB7CisJc3dpdGNoIChydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fTklDX0NPTkYwX1JYUEFUSCkpIHsKIAljYXNlIDM6CiAJCXNwZWMtPmh0Lm1jcy5yeF9tYXNrWzJdID0gMHhmZjsKIAljYXNlIDI6CkBAIC0zNTAyLDYgKzM1NjAsMzcgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJ0MjgwMF9hbXBkdV9hY3Rpb24pOwogCitpbnQgcnQyODAwX2dldF9zdXJ2ZXkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGludCBpZHgsCisJCSAgICAgIHN0cnVjdCBzdXJ2ZXlfaW5mbyAqc3VydmV5KQoreworCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmaHctPmNvbmY7CisJdTMyIGlkbGUsIGJ1c3ksIGJ1c3lfZXh0OworCisJaWYgKGlkeCAhPSAwKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCXN1cnZleS0+Y2hhbm5lbCA9IGNvbmYtPmNoYW5uZWw7CisKKwlydDI4MDBfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIENIX0lETEVfU1RBLCAmaWRsZSk7CisJcnQyODAwX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBDSF9CVVNZX1NUQSwgJmJ1c3kpOworCXJ0MjgwMF9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgQ0hfQlVTWV9TVEFfU0VDLCAmYnVzeV9leHQpOworCisJaWYgKGlkbGUgfHwgYnVzeSkgeworCQlzdXJ2ZXktPmZpbGxlZCA9IFNVUlZFWV9JTkZPX0NIQU5ORUxfVElNRSB8CisJCQkJIFNVUlZFWV9JTkZPX0NIQU5ORUxfVElNRV9CVVNZIHwKKwkJCQkgU1VSVkVZX0lORk9fQ0hBTk5FTF9USU1FX0VYVF9CVVNZOworCisJCXN1cnZleS0+Y2hhbm5lbF90aW1lID0gKGlkbGUgKyBidXN5KSAvIDEwMDA7CisJCXN1cnZleS0+Y2hhbm5lbF90aW1lX2J1c3kgPSBidXN5IC8gMTAwMDsKKwkJc3VydmV5LT5jaGFubmVsX3RpbWVfZXh0X2J1c3kgPSBidXN5X2V4dCAvIDEwMDA7CisJfQorCisJcmV0dXJuIDA7CisKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJ0MjgwMF9nZXRfc3VydmV5KTsKKwogTU9EVUxFX0FVVEhPUihEUlZfUFJPSkVDVCAiLCBCYXJ0bG9taWVqIFpvbG5pZXJraWV3aWN6Iik7CiBNT0RVTEVfVkVSU0lPTihEUlZfVkVSU0lPTik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlJhbGluayBSVDI4MDAgbGlicmFyeSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMGxpYi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMGxpYi5oCmluZGV4IDgxY2JjOTIuLmUzYzk5NWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDBsaWIuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwbGliLmgKQEAgLTE5OSw1ICsxOTksNyBAQAogaW50IHJ0MjgwMF9hbXBkdV9hY3Rpb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCiAJCQllbnVtIGllZWU4MDIxMV9hbXBkdV9tbG1lX2FjdGlvbiBhY3Rpb24sCiAJCQlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1MTYgdGlkLCB1MTYgKnNzbik7CitpbnQgcnQyODAwX2dldF9zdXJ2ZXkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGludCBpZHgsCisJCSAgICAgIHN0cnVjdCBzdXJ2ZXlfaW5mbyAqc3VydmV5KTsKIAogI2VuZGlmIC8qIFJUMjgwMExJQl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwcGNpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwcGNpLmMKaW5kZXggMDlhNjc5MC4uYWE5Nzk3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMHBjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDBwY2kuYwpAQCAtODQsMjAgKzg0LDIyIEBACiAJcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgSDJNX01BSUxCT1hfQ0lELCB+MCk7CiB9CiAKLSNpZmRlZiBDT05GSUdfUlQyODAwUENJX1NPQworI2lmIGRlZmluZWQoQ09ORklHX1JBTElOS19SVDI4OFgpIHx8IGRlZmluZWQoQ09ORklHX1JBTElOS19SVDMwNVgpCiBzdGF0aWMgdm9pZCBydDI4MDBwY2lfcmVhZF9lZXByb21fc29jKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCiB7Ci0JdTMyICpiYXNlX2FkZHIgPSAodTMyICopIEtTRUcxQUREUigweDFGMDQwMDAwKTsgLyogWFhYIGZvciBSVDMwNTIgKi8KKwl2b2lkIF9faW9tZW0gKmJhc2VfYWRkciA9IGlvcmVtYXAoMHgxRjA0MDAwMCwgRUVQUk9NX1NJWkUpOwogCiAJbWVtY3B5X2Zyb21pbyhydDJ4MDBkZXYtPmVlcHJvbSwgYmFzZV9hZGRyLCBFRVBST01fU0laRSk7CisKKwlpb3VubWFwKGJhc2VfYWRkcik7CiB9CiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIHJ0MjgwMHBjaV9yZWFkX2VlcHJvbV9zb2Moc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKIHsKIH0KLSNlbmRpZiAvKiBDT05GSUdfUlQyODAwUENJX1NPQyAqLworI2VuZGlmIC8qIENPTkZJR19SQUxJTktfUlQyODhYIHx8IENPTkZJR19SQUxJTktfUlQzMDVYICovCiAKLSNpZmRlZiBDT05GSUdfUlQyODAwUENJX1BDSQorI2lmZGVmIENPTkZJR19QQ0kKIHN0YXRpYyB2b2lkIHJ0MjgwMHBjaV9lZXByb21yZWdpc3Rlcl9yZWFkKHN0cnVjdCBlZXByb21fOTNjeDYgKmVlcHJvbSkKIHsKIAlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gZWVwcm9tLT5kYXRhOwpAQCAtMTgxLDcgKzE4Myw3OCBAQAogc3RhdGljIGlubGluZSB2b2lkIHJ0MjgwMHBjaV9yZWFkX2VlcHJvbV9lZnVzZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQogewogfQotI2VuZGlmIC8qIENPTkZJR19SVDI4MDBQQ0lfUENJICovCisjZW5kaWYgLyogQ09ORklHX1BDSSAqLworCisvKgorICogUXVldWUgaGFuZGxlcnMuCisgKi8KK3N0YXRpYyB2b2lkIHJ0MjgwMHBjaV9zdGFydF9xdWV1ZShzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWUpCit7CisJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IHF1ZXVlLT5ydDJ4MDBkZXY7CisJdTMyIHJlZzsKKworCXN3aXRjaCAocXVldWUtPnFpZCkgeworCWNhc2UgUUlEX1JYOgorCQlydDI4MDBfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIE1BQ19TWVNfQ1RSTCwgJnJlZyk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBNQUNfU1lTX0NUUkxfRU5BQkxFX1JYLCAxKTsKKwkJcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgTUFDX1NZU19DVFJMLCByZWcpOworCQlicmVhazsKKwljYXNlIFFJRF9CRUFDT046CisJCXJ0MjgwMF9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgQkNOX1RJTUVfQ0ZHLCAmcmVnKTsKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIEJDTl9USU1FX0NGR19UU0ZfVElDS0lORywgMSk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBCQ05fVElNRV9DRkdfVEJUVF9FTkFCTEUsIDEpOworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQkNOX1RJTUVfQ0ZHX0JFQUNPTl9HRU4sIDEpOworCQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBCQ05fVElNRV9DRkcsIHJlZyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX07Cit9CisKK3N0YXRpYyB2b2lkIHJ0MjgwMHBjaV9raWNrX3F1ZXVlKHN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZSkKK3sKKwlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gcXVldWUtPnJ0MngwMGRldjsKKwlzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5OworCisJc3dpdGNoIChxdWV1ZS0+cWlkKSB7CisJY2FzZSBRSURfQUNfVk86CisJY2FzZSBRSURfQUNfVkk6CisJY2FzZSBRSURfQUNfQkU6CisJY2FzZSBRSURfQUNfQks6CisJCWVudHJ5ID0gcnQyeDAwcXVldWVfZ2V0X2VudHJ5KHF1ZXVlLCBRX0lOREVYKTsKKwkJcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhfQ1RYX0lEWChxdWV1ZS0+cWlkKSwgZW50cnktPmVudHJ5X2lkeCk7CisJCWJyZWFrOworCWNhc2UgUUlEX01HTVQ6CisJCWVudHJ5ID0gcnQyeDAwcXVldWVfZ2V0X2VudHJ5KHF1ZXVlLCBRX0lOREVYKTsKKwkJcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhfQ1RYX0lEWCg1KSwgZW50cnktPmVudHJ5X2lkeCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgcnQyODAwcGNpX3N0b3BfcXVldWUoc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlKQoreworCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBxdWV1ZS0+cnQyeDAwZGV2OworCXUzMiByZWc7CisKKwlzd2l0Y2ggKHF1ZXVlLT5xaWQpIHsKKwljYXNlIFFJRF9SWDoKKwkJcnQyODAwX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBNQUNfU1lTX0NUUkwsICZyZWcpOworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTUFDX1NZU19DVFJMX0VOQUJMRV9SWCwgMCk7CisJCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIE1BQ19TWVNfQ1RSTCwgcmVnKTsKKwkJYnJlYWs7CisJY2FzZSBRSURfQkVBQ09OOgorCQlydDI4MDBfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIEJDTl9USU1FX0NGRywgJnJlZyk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBCQ05fVElNRV9DRkdfVFNGX1RJQ0tJTkcsIDApOworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQkNOX1RJTUVfQ0ZHX1RCVFRfRU5BQkxFLCAwKTsKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIEJDTl9USU1FX0NGR19CRUFDT05fR0VOLCAwKTsKKwkJcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgQkNOX1RJTUVfQ0ZHLCByZWcpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CiAKIC8qCiAgKiBGaXJtd2FyZSBmdW5jdGlvbnMKQEAgLTMyMSwxOCArMzk0LDYgQEAKIC8qCiAgKiBEZXZpY2Ugc3RhdGUgc3dpdGNoIGhhbmRsZXJzLgogICovCi1zdGF0aWMgdm9pZCBydDI4MDBwY2lfdG9nZ2xlX3J4KHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCi0JCQkJZW51bSBkZXZfc3RhdGUgc3RhdGUpCi17Ci0JdTMyIHJlZzsKLQotCXJ0MjgwMF9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgTUFDX1NZU19DVFJMLCAmcmVnKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTUFDX1NZU19DVFJMX0VOQUJMRV9SWCwKLQkJCSAgIChzdGF0ZSA9PSBTVEFURV9SQURJT19SWF9PTikgfHwKLQkJCSAgIChzdGF0ZSA9PSBTVEFURV9SQURJT19SWF9PTl9MSU5LKSk7Ci0JcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgTUFDX1NZU19DVFJMLCByZWcpOwotfQotCiBzdGF0aWMgdm9pZCBydDI4MDBwY2lfdG9nZ2xlX2lycShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAogCQkJCSBlbnVtIGRldl9zdGF0ZSBzdGF0ZSkKIHsKQEAgLTQ0Miw3ICs1MDMsNyBAQAogCSAqIGlmIHRoZSBkZXZpY2UgaXMgYm9vdGluZyBhbmQgd2Fzbid0IGFzbGVlcCBpdCB3aWxsIHJldHVybgogCSAqIGZhaWx1cmUgd2hlbiBhdHRlbXB0aW5nIHRvIHdha2V1cC4KIAkgKi8KLQlydDI4MDBfbWN1X3JlcXVlc3QocnQyeDAwZGV2LCBNQ1VfU0xFRVAsIDB4ZmYsIDAsIDIpOworCXJ0MjgwMF9tY3VfcmVxdWVzdChydDJ4MDBkZXYsIE1DVV9TTEVFUCwgMHhmZiwgMHhmZiwgMik7CiAKIAlpZiAoc3RhdGUgPT0gU1RBVEVfQVdBS0UpIHsKIAkJcnQyODAwX21jdV9yZXF1ZXN0KHJ0MngwMGRldiwgTUNVX1dBS0VVUCwgVE9LRU5fV0FLVVAsIDAsIDApOwpAQCAtNDc2LDEyICs1MzcsNiBAQAogCQlydDI4MDBwY2lfZGlzYWJsZV9yYWRpbyhydDJ4MDBkZXYpOwogCQlydDI4MDBwY2lfc2V0X3N0YXRlKHJ0MngwMGRldiwgU1RBVEVfU0xFRVApOwogCQlicmVhazsKLQljYXNlIFNUQVRFX1JBRElPX1JYX09OOgotCWNhc2UgU1RBVEVfUkFESU9fUlhfT05fTElOSzoKLQljYXNlIFNUQVRFX1JBRElPX1JYX09GRjoKLQljYXNlIFNUQVRFX1JBRElPX1JYX09GRl9MSU5LOgotCQlydDI4MDBwY2lfdG9nZ2xlX3J4KHJ0MngwMGRldiwgc3RhdGUpOwotCQlicmVhazsKIAljYXNlIFNUQVRFX1JBRElPX0lSUV9PTjoKIAljYXNlIFNUQVRFX1JBRElPX0lSUV9PTl9JU1I6CiAJY2FzZSBTVEFURV9SQURJT19JUlFfT0ZGOgpAQCAtNTY3LDQxICs2MjIsNiBAQAogfQogCiAvKgotICogVFggZGF0YSBpbml0aWFsaXphdGlvbgotICovCi1zdGF0aWMgdm9pZCBydDI4MDBwY2lfa2lja190eF9xdWV1ZShzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWUpCi17Ci0Jc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IHF1ZXVlLT5ydDJ4MDBkZXY7Ci0Jc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeSA9IHJ0MngwMHF1ZXVlX2dldF9lbnRyeShxdWV1ZSwgUV9JTkRFWCk7Ci0JdW5zaWduZWQgaW50IHFpZHg7Ci0KLQlpZiAocXVldWUtPnFpZCA9PSBRSURfTUdNVCkKLQkJcWlkeCA9IDU7Ci0JZWxzZQotCQlxaWR4ID0gcXVldWUtPnFpZDsKLQotCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYX0NUWF9JRFgocWlkeCksIGVudHJ5LT5lbnRyeV9pZHgpOwotfQotCi1zdGF0aWMgdm9pZCBydDI4MDBwY2lfa2lsbF90eF9xdWV1ZShzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWUpCi17Ci0Jc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IHF1ZXVlLT5ydDJ4MDBkZXY7Ci0JdTMyIHJlZzsKLQotCWlmIChxdWV1ZS0+cWlkID09IFFJRF9CRUFDT04pIHsKLQkJcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgQkNOX1RJTUVfQ0ZHLCAwKTsKLQkJcmV0dXJuOwotCX0KLQotCXJ0MjgwMF9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgV1BETUFfUlNUX0lEWCwgJnJlZyk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFdQRE1BX1JTVF9JRFhfRFRYX0lEWDAsIChxdWV1ZS0+cWlkID09IFFJRF9BQ19CRSkpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBXUERNQV9SU1RfSURYX0RUWF9JRFgxLCAocXVldWUtPnFpZCA9PSBRSURfQUNfQkspKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgV1BETUFfUlNUX0lEWF9EVFhfSURYMiwgKHF1ZXVlLT5xaWQgPT0gUUlEX0FDX1ZJKSk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFdQRE1BX1JTVF9JRFhfRFRYX0lEWDMsIChxdWV1ZS0+cWlkID09IFFJRF9BQ19WTykpOwotCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFdQRE1BX1JTVF9JRFgsIHJlZyk7Ci19Ci0KLS8qCiAgKiBSWCBjb250cm9sIGhhbmRsZXJzCiAgKi8KIHN0YXRpYyB2b2lkIHJ0MjgwMHBjaV9maWxsX3J4ZG9uZShzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5LApAQCAtNjY4LDE0ICs2ODgsNyBAQAogCXUzMiBzdGF0dXM7CiAJdTggcWlkOwogCi0Jd2hpbGUgKCFrZmlmb19pc19lbXB0eSgmcnQyeDAwZGV2LT50eHN0YXR1c19maWZvKSkgewotCQkvKiBOb3cgcmVtb3ZlIHRoZSB0eCBzdGF0dXMgZnJvbSB0aGUgRklGTyAqLwotCQlpZiAoa2ZpZm9fb3V0KCZydDJ4MDBkZXYtPnR4c3RhdHVzX2ZpZm8sICZzdGF0dXMsCi0JCQkgICAgICBzaXplb2Yoc3RhdHVzKSkgIT0gc2l6ZW9mKHN0YXR1cykpIHsKLQkJCVdBUk5fT04oMSk7Ci0JCQlicmVhazsKLQkJfQotCisJd2hpbGUgKGtmaWZvX2dldCgmcnQyeDAwZGV2LT50eHN0YXR1c19maWZvLCAmc3RhdHVzKSkgewogCQlxaWQgPSBydDJ4MDBfZ2V0X2ZpZWxkMzIoc3RhdHVzLCBUWF9TVEFfRklGT19QSURfUVVFVUUpOwogCQlpZiAocWlkID49IFFJRF9SWCkgewogCQkJLyoKQEAgLTY4Myw3ICs2OTYsNyBAQAogCQkJICogdGhpcyB0eCBzdGF0dXMuCiAJCQkgKi8KIAkJCVdBUk5JTkcocnQyeDAwZGV2LCAiR290IFRYIHN0YXR1cyByZXBvcnQgd2l0aCAiCi0JCQkJCSAgICJ1bmV4cGVjdGVkIHBpZCAldSwgZHJvcHBpbmciLCBxaWQpOworCQkJCQkgICAidW5leHBlY3RlZCBwaWQgJXUsIGRyb3BwaW5nXG4iLCBxaWQpOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtNjk0LDcgKzcwNyw3IEBACiAJCQkgKiBwcm9jZXNzaW5nIGhlcmUgYW5kIGRyb3AgdGhlIHR4IHN0YXR1cwogCQkJICovCiAJCQlXQVJOSU5HKHJ0MngwMGRldiwgIkdvdCBUWCBzdGF0dXMgZm9yIGFuIHVuYXZhaWxhYmxlICIKLQkJCQkJICAgInF1ZXVlICV1LCBkcm9wcGluZyIsIHFpZCk7CisJCQkJCSAgICJxdWV1ZSAldSwgZHJvcHBpbmdcbiIsIHFpZCk7CiAJCQlicmVhazsKIAkJfQogCkBAIC03MDQsNyArNzE3LDcgQEAKIAkJCSAqIGFuZCBkcm9wIHRoZSB0eCBzdGF0dXMuCiAJCQkgKi8KIAkJCVdBUk5JTkcocnQyeDAwZGV2LCAiR290IFRYIHN0YXR1cyBmb3IgYW4gZW1wdHkgIgotCQkJCQkgICAicXVldWUgJXUsIGRyb3BwaW5nIiwgcWlkKTsKKwkJCQkJICAgInF1ZXVlICV1LCBkcm9wcGluZ1xuIiwgcWlkKTsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTc3NywyMCArNzkwLDEzIEBACiAJICogU2luY2Ugd2UgaGF2ZSBvbmx5IG9uZSBwcm9kdWNlciBhbmQgb25lIGNvbnN1bWVyIHdlIGRvbid0CiAJICogbmVlZCB0byBsb2NrIHRoZSBrZmlmby4KIAkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgVFhfRU5UUklFUzsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IHJ0MngwMGRldi0+b3BzLT50eC0+ZW50cnlfbnVtOyBpKyspIHsKIAkJcnQyODAwX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBUWF9TVEFfRklGTywgJnN0YXR1cyk7CiAKIAkJaWYgKCFydDJ4MDBfZ2V0X2ZpZWxkMzIoc3RhdHVzLCBUWF9TVEFfRklGT19WQUxJRCkpCiAJCQlicmVhazsKIAotCQlpZiAoa2ZpZm9faXNfZnVsbCgmcnQyeDAwZGV2LT50eHN0YXR1c19maWZvKSkgewotCQkJV0FSTklORyhydDJ4MDBkZXYsICJUWCBzdGF0dXMgRklGTyBvdmVycnVuLCIKLQkJCQkiIGRyb3AgdHggc3RhdHVzIHJlcG9ydC5cbiIpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlpZiAoa2ZpZm9faW4oJnJ0MngwMGRldi0+dHhzdGF0dXNfZmlmbywgJnN0YXR1cywKLQkJCSAgICAgc2l6ZW9mKHN0YXR1cykpICE9IHNpemVvZihzdGF0dXMpKSB7CisJCWlmICgha2ZpZm9fcHV0KCZydDJ4MDBkZXYtPnR4c3RhdHVzX2ZpZm8sICZzdGF0dXMpKSB7CiAJCQlXQVJOSU5HKHJ0MngwMGRldiwgIlRYIHN0YXR1cyBGSUZPIG92ZXJydW4sIgogCQkJCSJkcm9wIHR4IHN0YXR1cyByZXBvcnQuXG4iKTsKIAkJCWJyZWFrOwpAQCAtOTQ0LDYgKzk1MCw4IEBACiAJLmdldF90c2YJCT0gcnQyODAwX2dldF90c2YsCiAJLnJma2lsbF9wb2xsCQk9IHJ0MngwMG1hY19yZmtpbGxfcG9sbCwKIAkuYW1wZHVfYWN0aW9uCQk9IHJ0MjgwMF9hbXBkdV9hY3Rpb24sCisJLmZsdXNoCQkJPSBydDJ4MDBtYWNfZmx1c2gsCisJLmdldF9zdXJ2ZXkJCT0gcnQyODAwX2dldF9zdXJ2ZXksCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJ0MjgwMF9vcHMgcnQyODAwcGNpX3J0MjgwMF9vcHMgPSB7CkBAIC05NzYsMTEgKzk4NCwxMiBAQAogCS5saW5rX3N0YXRzCQk9IHJ0MjgwMF9saW5rX3N0YXRzLAogCS5yZXNldF90dW5lcgkJPSBydDI4MDBfcmVzZXRfdHVuZXIsCiAJLmxpbmtfdHVuZXIJCT0gcnQyODAwX2xpbmtfdHVuZXIsCisJLnN0YXJ0X3F1ZXVlCQk9IHJ0MjgwMHBjaV9zdGFydF9xdWV1ZSwKKwkua2lja19xdWV1ZQkJPSBydDI4MDBwY2lfa2lja19xdWV1ZSwKKwkuc3RvcF9xdWV1ZQkJPSBydDI4MDBwY2lfc3RvcF9xdWV1ZSwKIAkud3JpdGVfdHhfZGVzYwkJPSBydDI4MDBwY2lfd3JpdGVfdHhfZGVzYywKIAkud3JpdGVfdHhfZGF0YQkJPSBydDI4MDBfd3JpdGVfdHhfZGF0YSwKIAkud3JpdGVfYmVhY29uCQk9IHJ0MjgwMF93cml0ZV9iZWFjb24sCi0JLmtpY2tfdHhfcXVldWUJCT0gcnQyODAwcGNpX2tpY2tfdHhfcXVldWUsCi0JLmtpbGxfdHhfcXVldWUJCT0gcnQyODAwcGNpX2tpbGxfdHhfcXVldWUsCiAJLmZpbGxfcnhkb25lCQk9IHJ0MjgwMHBjaV9maWxsX3J4ZG9uZSwKIAkuY29uZmlnX3NoYXJlZF9rZXkJPSBydDI4MDBfY29uZmlnX3NoYXJlZF9rZXksCiAJLmNvbmZpZ19wYWlyd2lzZV9rZXkJPSBydDI4MDBfY29uZmlnX3BhaXJ3aXNlX2tleSwKQEAgLTk5MiwyMSArMTAwMSwyMSBAQAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkYXRhX3F1ZXVlX2Rlc2MgcnQyODAwcGNpX3F1ZXVlX3J4ID0gewotCS5lbnRyeV9udW0JCT0gUlhfRU5UUklFUywKKwkuZW50cnlfbnVtCQk9IDEyOCwKIAkuZGF0YV9zaXplCQk9IEFHR1JFR0FUSU9OX1NJWkUsCiAJLmRlc2Nfc2l6ZQkJPSBSWERfREVTQ19TSVpFLAogCS5wcml2X3NpemUJCT0gc2l6ZW9mKHN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3BjaSksCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRhdGFfcXVldWVfZGVzYyBydDI4MDBwY2lfcXVldWVfdHggPSB7Ci0JLmVudHJ5X251bQkJPSBUWF9FTlRSSUVTLAorCS5lbnRyeV9udW0JCT0gNjQsCiAJLmRhdGFfc2l6ZQkJPSBBR0dSRUdBVElPTl9TSVpFLAogCS5kZXNjX3NpemUJCT0gVFhEX0RFU0NfU0laRSwKIAkucHJpdl9zaXplCQk9IHNpemVvZihzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl9wY2kpLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkYXRhX3F1ZXVlX2Rlc2MgcnQyODAwcGNpX3F1ZXVlX2JjbiA9IHsKLQkuZW50cnlfbnVtCQk9IDggKiBCRUFDT05fRU5UUklFUywKKwkuZW50cnlfbnVtCQk9IDgsCiAJLmRhdGFfc2l6ZQkJPSAwLCAvKiBObyBETUEgcmVxdWlyZWQgZm9yIGJlYWNvbnMgKi8KIAkuZGVzY19zaXplCQk9IFRYV0lfREVTQ19TSVpFLAogCS5wcml2X3NpemUJCT0gc2l6ZW9mKHN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3BjaSksCkBAIC0xMDM0LDEyICsxMDQzLDE1IEBACiAvKgogICogUlQyODAwcGNpIG1vZHVsZSBpbmZvcm1hdGlvbi4KICAqLwotI2lmZGVmIENPTkZJR19SVDI4MDBQQ0lfUENJCisjaWZkZWYgQ09ORklHX1BDSQogc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHJ0MjgwMHBjaV9kZXZpY2VfdGFibGUpID0gewogCXsgUENJX0RFVklDRSgweDE4MTQsIDB4MDYwMSksIFBDSV9ERVZJQ0VfREFUQSgmcnQyODAwcGNpX29wcykgfSwKIAl7IFBDSV9ERVZJQ0UoMHgxODE0LCAweDA2ODEpLCBQQ0lfREVWSUNFX0RBVEEoJnJ0MjgwMHBjaV9vcHMpIH0sCiAJeyBQQ0lfREVWSUNFKDB4MTgxNCwgMHgwNzAxKSwgUENJX0RFVklDRV9EQVRBKCZydDI4MDBwY2lfb3BzKSB9LAogCXsgUENJX0RFVklDRSgweDE4MTQsIDB4MDc4MSksIFBDSV9ERVZJQ0VfREFUQSgmcnQyODAwcGNpX29wcykgfSwKKwl7IFBDSV9ERVZJQ0UoMHgxODE0LCAweDMwOTApLCBQQ0lfREVWSUNFX0RBVEEoJnJ0MjgwMHBjaV9vcHMpIH0sCisJeyBQQ0lfREVWSUNFKDB4MTgxNCwgMHgzMDkxKSwgUENJX0RFVklDRV9EQVRBKCZydDI4MDBwY2lfb3BzKSB9LAorCXsgUENJX0RFVklDRSgweDE4MTQsIDB4MzA5MiksIFBDSV9ERVZJQ0VfREFUQSgmcnQyODAwcGNpX29wcykgfSwKIAl7IFBDSV9ERVZJQ0UoMHgxNDMyLCAweDc3MDgpLCBQQ0lfREVWSUNFX0RBVEEoJnJ0MjgwMHBjaV9vcHMpIH0sCiAJeyBQQ0lfREVWSUNFKDB4MTQzMiwgMHg3NzI3KSwgUENJX0RFVklDRV9EQVRBKCZydDI4MDBwY2lfb3BzKSB9LAogCXsgUENJX0RFVklDRSgweDE0MzIsIDB4NzcyOCksIFBDSV9ERVZJQ0VfREFUQSgmcnQyODAwcGNpX29wcykgfSwKQEAgLTEwNDcsMTIgKzEwNTksMTAgQEAKIAl7IFBDSV9ERVZJQ0UoMHgxNDMyLCAweDc3NDgpLCBQQ0lfREVWSUNFX0RBVEEoJnJ0MjgwMHBjaV9vcHMpIH0sCiAJeyBQQ0lfREVWSUNFKDB4MTQzMiwgMHg3NzU4KSwgUENJX0RFVklDRV9EQVRBKCZydDI4MDBwY2lfb3BzKSB9LAogCXsgUENJX0RFVklDRSgweDE0MzIsIDB4Nzc2OCksIFBDSV9ERVZJQ0VfREFUQSgmcnQyODAwcGNpX29wcykgfSwKLQl7IFBDSV9ERVZJQ0UoMHgxYTNiLCAweDEwNTkpLCBQQ0lfREVWSUNFX0RBVEEoJnJ0MjgwMHBjaV9vcHMpIH0sCi0jaWZkZWYgQ09ORklHX1JUMjgwMFBDSV9SVDMwWFgKLQl7IFBDSV9ERVZJQ0UoMHgxODE0LCAweDMwOTApLCBQQ0lfREVWSUNFX0RBVEEoJnJ0MjgwMHBjaV9vcHMpIH0sCi0JeyBQQ0lfREVWSUNFKDB4MTgxNCwgMHgzMDkxKSwgUENJX0RFVklDRV9EQVRBKCZydDI4MDBwY2lfb3BzKSB9LAotCXsgUENJX0RFVklDRSgweDE4MTQsIDB4MzA5MiksIFBDSV9ERVZJQ0VfREFUQSgmcnQyODAwcGNpX29wcykgfSwKIAl7IFBDSV9ERVZJQ0UoMHgxNDYyLCAweDg5MWEpLCBQQ0lfREVWSUNFX0RBVEEoJnJ0MjgwMHBjaV9vcHMpIH0sCisJeyBQQ0lfREVWSUNFKDB4MWEzYiwgMHgxMDU5KSwgUENJX0RFVklDRV9EQVRBKCZydDI4MDBwY2lfb3BzKSB9LAorI2lmZGVmIENPTkZJR19SVDI4MDBQQ0lfUlQzM1hYCisJeyBQQ0lfREVWSUNFKDB4MTgxNCwgMHgzMzkwKSwgUENJX0RFVklDRV9EQVRBKCZydDI4MDBwY2lfb3BzKSB9LAogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1JUMjgwMFBDSV9SVDM1WFgKIAl7IFBDSV9ERVZJQ0UoMHgxODE0LCAweDMwNjApLCBQQ0lfREVWSUNFX0RBVEEoJnJ0MjgwMHBjaV9vcHMpIH0sCkBAIC0xMDYzLDE5ICsxMDczLDE5IEBACiAjZW5kaWYKIAl7IDAsIH0KIH07Ci0jZW5kaWYgLyogQ09ORklHX1JUMjgwMFBDSV9QQ0kgKi8KKyNlbmRpZiAvKiBDT05GSUdfUENJICovCiAKIE1PRFVMRV9BVVRIT1IoRFJWX1BST0pFQ1QpOwogTU9EVUxFX1ZFUlNJT04oRFJWX1ZFUlNJT04pOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJSYWxpbmsgUlQyODAwIFBDSSAmIFBDTUNJQSBXaXJlbGVzcyBMQU4gZHJpdmVyLiIpOwogTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoIlJhbGluayBSVDI4NjAgUENJICYgUENNQ0lBIGNoaXBzZXQgYmFzZWQgY2FyZHMiKTsKLSNpZmRlZiBDT05GSUdfUlQyODAwUENJX1BDSQorI2lmZGVmIENPTkZJR19QQ0kKIE1PRFVMRV9GSVJNV0FSRShGSVJNV0FSRV9SVDI4NjApOwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHJ0MjgwMHBjaV9kZXZpY2VfdGFibGUpOwotI2VuZGlmIC8qIENPTkZJR19SVDI4MDBQQ0lfUENJICovCisjZW5kaWYgLyogQ09ORklHX1BDSSAqLwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi0jaWZkZWYgQ09ORklHX1JUMjgwMFBDSV9TT0MKKyNpZiBkZWZpbmVkKENPTkZJR19SQUxJTktfUlQyODhYKSB8fCBkZWZpbmVkKENPTkZJR19SQUxJTktfUlQzMDVYKQogc3RhdGljIGludCBydDI4MDBzb2NfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlyZXR1cm4gcnQyeDAwc29jX3Byb2JlKHBkZXYsICZydDI4MDBwY2lfb3BzKTsKQEAgLTEwOTIsOSArMTEwMiw5IEBACiAJLnN1c3BlbmQJPSBydDJ4MDBzb2Nfc3VzcGVuZCwKIAkucmVzdW1lCQk9IHJ0MngwMHNvY19yZXN1bWUsCiB9OwotI2VuZGlmIC8qIENPTkZJR19SVDI4MDBQQ0lfU09DICovCisjZW5kaWYgLyogQ09ORklHX1JBTElOS19SVDI4OFggfHwgQ09ORklHX1JBTElOS19SVDMwNVggKi8KIAotI2lmZGVmIENPTkZJR19SVDI4MDBQQ0lfUENJCisjaWZkZWYgQ09ORklHX1BDSQogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHJ0MjgwMHBjaV9kcml2ZXIgPSB7CiAJLm5hbWUJCT0gS0JVSUxEX01PRE5BTUUsCiAJLmlkX3RhYmxlCT0gcnQyODAwcGNpX2RldmljZV90YWJsZSwKQEAgLTExMDMsMjEgKzExMTMsMjEgQEAKIAkuc3VzcGVuZAk9IHJ0MngwMHBjaV9zdXNwZW5kLAogCS5yZXN1bWUJCT0gcnQyeDAwcGNpX3Jlc3VtZSwKIH07Ci0jZW5kaWYgLyogQ09ORklHX1JUMjgwMFBDSV9QQ0kgKi8KKyNlbmRpZiAvKiBDT05GSUdfUENJICovCiAKIHN0YXRpYyBpbnQgX19pbml0IHJ0MjgwMHBjaV9pbml0KHZvaWQpCiB7CiAJaW50IHJldCA9IDA7CiAKLSNpZmRlZiBDT05GSUdfUlQyODAwUENJX1NPQworI2lmIGRlZmluZWQoQ09ORklHX1JBTElOS19SVDI4OFgpIHx8IGRlZmluZWQoQ09ORklHX1JBTElOS19SVDMwNVgpCiAJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZydDI4MDBzb2NfZHJpdmVyKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogI2VuZGlmCi0jaWZkZWYgQ09ORklHX1JUMjgwMFBDSV9QQ0kKKyNpZmRlZiBDT05GSUdfUENJCiAJcmV0ID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmcnQyODAwcGNpX2RyaXZlcik7CiAJaWYgKHJldCkgewotI2lmZGVmIENPTkZJR19SVDI4MDBQQ0lfU09DCisjaWYgZGVmaW5lZChDT05GSUdfUkFMSU5LX1JUMjg4WCkgfHwgZGVmaW5lZChDT05GSUdfUkFMSU5LX1JUMzA1WCkKIAkJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnJ0MjgwMHNvY19kcml2ZXIpOwogI2VuZGlmCiAJCXJldHVybiByZXQ7CkBAIC0xMTI5LDEwICsxMTM5LDEwIEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBydDI4MDBwY2lfZXhpdCh2b2lkKQogewotI2lmZGVmIENPTkZJR19SVDI4MDBQQ0lfUENJCisjaWZkZWYgQ09ORklHX1BDSQogCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmcnQyODAwcGNpX2RyaXZlcik7CiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfUlQyODAwUENJX1NPQworI2lmIGRlZmluZWQoQ09ORklHX1JBTElOS19SVDI4OFgpIHx8IGRlZmluZWQoQ09ORklHX1JBTElOS19SVDMwNVgpCiAJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnJ0MjgwMHNvY19kcml2ZXIpOwogI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwcGNpLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwcGNpLmgKaW5kZXggNWE4ZGRhOS4uNzBlMDUwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMHBjaS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDBwY2kuaApAQCAtMzgsMTAgKzM4LDEwIEBACiAgKiBRdWV1ZSByZWdpc3RlciBvZmZzZXQgbWFjcm9zCiAgKi8KICNkZWZpbmUgVFhfUVVFVUVfUkVHX09GRlNFVAkJMHgxMAotI2RlZmluZSBUWF9CQVNFX1BUUihfX3gpCQlUWF9CQVNFX1BUUjAgKyAoKF9feCkgKiBUWF9RVUVVRV9SRUdfT0ZGU0VUKQotI2RlZmluZSBUWF9NQVhfQ05UKF9feCkJCQlUWF9NQVhfQ05UMCArICgoX194KSAqIFRYX1FVRVVFX1JFR19PRkZTRVQpCi0jZGVmaW5lIFRYX0NUWF9JRFgoX194KQkJCVRYX0NUWF9JRFgwICsgKChfX3gpICogVFhfUVVFVUVfUkVHX09GRlNFVCkKLSNkZWZpbmUgVFhfRFRYX0lEWChfX3gpCQkJVFhfRFRYX0lEWDAgKyAoKF9feCkgKiBUWF9RVUVVRV9SRUdfT0ZGU0VUKQorI2RlZmluZSBUWF9CQVNFX1BUUihfX3gpCQkoVFhfQkFTRV9QVFIwICsgKChfX3gpICogVFhfUVVFVUVfUkVHX09GRlNFVCkpCisjZGVmaW5lIFRYX01BWF9DTlQoX194KQkJCShUWF9NQVhfQ05UMCArICgoX194KSAqIFRYX1FVRVVFX1JFR19PRkZTRVQpKQorI2RlZmluZSBUWF9DVFhfSURYKF9feCkJCQkoVFhfQ1RYX0lEWDAgKyAoKF9feCkgKiBUWF9RVUVVRV9SRUdfT0ZGU0VUKSkKKyNkZWZpbmUgVFhfRFRYX0lEWChfX3gpCQkJKFRYX0RUWF9JRFgwICsgKChfX3gpICogVFhfUVVFVUVfUkVHX09GRlNFVCkpCiAKIC8qCiAgKiA4MDUxIGZpcm13YXJlIGltYWdlLgpAQCAtNTIsOCArNTIsOCBAQAogLyoKICAqIERNQSBkZXNjcmlwdG9yIGRlZmluZXMuCiAgKi8KLSNkZWZpbmUgVFhEX0RFU0NfU0laRQkJCSggNCAqIHNpemVvZihfX2xlMzIpICkKLSNkZWZpbmUgUlhEX0RFU0NfU0laRQkJCSggNCAqIHNpemVvZihfX2xlMzIpICkKKyNkZWZpbmUgVFhEX0RFU0NfU0laRQkJCSg0ICogc2l6ZW9mKF9fbGUzMikpCisjZGVmaW5lIFJYRF9ERVNDX1NJWkUJCQkoNCAqIHNpemVvZihfX2xlMzIpKQogCiAvKgogICogVFggZGVzY3JpcHRvciBmb3JtYXQgZm9yIFRYLCBQUklPIGFuZCBCZWFjb24gUmluZy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDB1c2IuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDB1c2IuYwppbmRleCAzZGZmNTZlLi5iOTdhNGE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwdXNiLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMHVzYi5jCkBAIC00NSwxMSArNDUsNjAgQEAKIC8qCiAgKiBBbGxvdyBoYXJkd2FyZSBlbmNyeXB0aW9uIHRvIGJlIGRpc2FibGVkLgogICovCi1zdGF0aWMgaW50IG1vZHBhcmFtX25vaHdjcnlwdCA9IDA7CitzdGF0aWMgaW50IG1vZHBhcmFtX25vaHdjcnlwdDsKIG1vZHVsZV9wYXJhbV9uYW1lZChub2h3Y3J5cHQsIG1vZHBhcmFtX25vaHdjcnlwdCwgYm9vbCwgU19JUlVHTyk7CiBNT0RVTEVfUEFSTV9ERVNDKG5vaHdjcnlwdCwgIkRpc2FibGUgaGFyZHdhcmUgZW5jcnlwdGlvbi4iKTsKIAogLyoKKyAqIFF1ZXVlIGhhbmRsZXJzLgorICovCitzdGF0aWMgdm9pZCBydDI4MDB1c2Jfc3RhcnRfcXVldWUoc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlKQoreworCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBxdWV1ZS0+cnQyeDAwZGV2OworCXUzMiByZWc7CisKKwlzd2l0Y2ggKHF1ZXVlLT5xaWQpIHsKKwljYXNlIFFJRF9SWDoKKwkJcnQyODAwX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBNQUNfU1lTX0NUUkwsICZyZWcpOworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTUFDX1NZU19DVFJMX0VOQUJMRV9SWCwgMSk7CisJCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIE1BQ19TWVNfQ1RSTCwgcmVnKTsKKwkJYnJlYWs7CisJY2FzZSBRSURfQkVBQ09OOgorCQlydDI4MDBfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIEJDTl9USU1FX0NGRywgJnJlZyk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBCQ05fVElNRV9DRkdfVFNGX1RJQ0tJTkcsIDEpOworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQkNOX1RJTUVfQ0ZHX1RCVFRfRU5BQkxFLCAxKTsKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIEJDTl9USU1FX0NGR19CRUFDT05fR0VOLCAxKTsKKwkJcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgQkNOX1RJTUVfQ0ZHLCByZWcpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJ0MjgwMHVzYl9zdG9wX3F1ZXVlKHN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZSkKK3sKKwlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gcXVldWUtPnJ0MngwMGRldjsKKwl1MzIgcmVnOworCisJc3dpdGNoIChxdWV1ZS0+cWlkKSB7CisJY2FzZSBRSURfUlg6CisJCXJ0MjgwMF9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgTUFDX1NZU19DVFJMLCAmcmVnKTsKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIE1BQ19TWVNfQ1RSTF9FTkFCTEVfUlgsIDApOworCQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBNQUNfU1lTX0NUUkwsIHJlZyk7CisJCWJyZWFrOworCWNhc2UgUUlEX0JFQUNPTjoKKwkJcnQyODAwX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBCQ05fVElNRV9DRkcsICZyZWcpOworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQkNOX1RJTUVfQ0ZHX1RTRl9USUNLSU5HLCAwKTsKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIEJDTl9USU1FX0NGR19UQlRUX0VOQUJMRSwgMCk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBCQ05fVElNRV9DRkdfQkVBQ09OX0dFTiwgMCk7CisJCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIEJDTl9USU1FX0NGRywgcmVnKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCisvKgogICogRmlybXdhcmUgZnVuY3Rpb25zCiAgKi8KIHN0YXRpYyBjaGFyICpydDI4MDB1c2JfZ2V0X2Zpcm13YXJlX25hbWUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKQEAgLTEwNywxOCArMTU2LDYgQEAKIC8qCiAgKiBEZXZpY2Ugc3RhdGUgc3dpdGNoIGhhbmRsZXJzLgogICovCi1zdGF0aWMgdm9pZCBydDI4MDB1c2JfdG9nZ2xlX3J4KHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCi0JCQkJZW51bSBkZXZfc3RhdGUgc3RhdGUpCi17Ci0JdTMyIHJlZzsKLQotCXJ0MjgwMF9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgTUFDX1NZU19DVFJMLCAmcmVnKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTUFDX1NZU19DVFJMX0VOQUJMRV9SWCwKLQkJCSAgIChzdGF0ZSA9PSBTVEFURV9SQURJT19SWF9PTikgfHwKLQkJCSAgIChzdGF0ZSA9PSBTVEFURV9SQURJT19SWF9PTl9MSU5LKSk7Ci0JcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgTUFDX1NZU19DVFJMLCByZWcpOwotfQotCiBzdGF0aWMgaW50IHJ0MjgwMHVzYl9pbml0X3JlZ2lzdGVycyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQogewogCXUzMiByZWc7CkBAIC0xNjUsNyArMjAyLDggQEAKIAkgKiB0aGlzIGxpbWl0IHNvIHJlZHVjZSB0aGUgbnVtYmVyIHRvIHByZXZlbnQgZXJyb3JzLgogCSAqLwogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBVU0JfRE1BX0NGR19SWF9CVUxLX0FHR19MSU1JVCwKLQkJCSAgICgoUlhfRU5UUklFUyAqIERBVEFfRlJBTUVfU0laRSkgLyAxMDI0KSAtIDMpOworCQkJICAgKChydDJ4MDBkZXYtPm9wcy0+cngtPmVudHJ5X251bSAqIERBVEFfRlJBTUVfU0laRSkKKwkJCSAgICAvIDEwMjQpIC0gMyk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFVTQl9ETUFfQ0ZHX1JYX0JVTEtfRU4sIDEpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBVU0JfRE1BX0NGR19UWF9CVUxLX0VOLCAxKTsKIAlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBVU0JfRE1BX0NGRywgcmVnKTsKQEAgLTE4Myw5ICsyMjEsOSBAQAogCQkJICAgICAgIGVudW0gZGV2X3N0YXRlIHN0YXRlKQogewogCWlmIChzdGF0ZSA9PSBTVEFURV9BV0FLRSkKLQkJcnQyODAwX21jdV9yZXF1ZXN0KHJ0MngwMGRldiwgTUNVX1dBS0VVUCwgMHhmZiwgMCwgMCk7CisJCXJ0MjgwMF9tY3VfcmVxdWVzdChydDJ4MDBkZXYsIE1DVV9XQUtFVVAsIDB4ZmYsIDAsIDIpOwogCWVsc2UKLQkJcnQyODAwX21jdV9yZXF1ZXN0KHJ0MngwMGRldiwgTUNVX1NMRUVQLCAweGZmLCAwLCAyKTsKKwkJcnQyODAwX21jdV9yZXF1ZXN0KHJ0MngwMGRldiwgTUNVX1NMRUVQLCAweGZmLCAweGZmLCAyKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjE0LDEyICsyNTIsNiBAQAogCQlydDI4MDB1c2JfZGlzYWJsZV9yYWRpbyhydDJ4MDBkZXYpOwogCQlydDI4MDB1c2Jfc2V0X3N0YXRlKHJ0MngwMGRldiwgU1RBVEVfU0xFRVApOwogCQlicmVhazsKLQljYXNlIFNUQVRFX1JBRElPX1JYX09OOgotCWNhc2UgU1RBVEVfUkFESU9fUlhfT05fTElOSzoKLQljYXNlIFNUQVRFX1JBRElPX1JYX09GRjoKLQljYXNlIFNUQVRFX1JBRElPX1JYX09GRl9MSU5LOgotCQlydDI4MDB1c2JfdG9nZ2xlX3J4KHJ0MngwMGRldiwgc3RhdGUpOwotCQlicmVhazsKIAljYXNlIFNUQVRFX1JBRElPX0lSUV9PTjoKIAljYXNlIFNUQVRFX1JBRElPX0lSUV9PTl9JU1I6CiAJY2FzZSBTVEFURV9SQURJT19JUlFfT0ZGOgpAQCAtMjQ1LDYgKzI3Nyw0OSBAQAogfQogCiAvKgorICogV2F0Y2hkb2cgaGFuZGxlcnMKKyAqLworc3RhdGljIHZvaWQgcnQyODAwdXNiX3dhdGNoZG9nKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCit7CisJdW5zaWduZWQgaW50IGk7CisJdTMyIHJlZzsKKworCXJ0MjgwMF9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgVFhSWFFfUENOVCwgJnJlZyk7CisJaWYgKHJ0MngwMF9nZXRfZmllbGQzMihyZWcsIFRYUlhRX1BDTlRfVFgwUSkpIHsKKwkJV0FSTklORyhydDJ4MDBkZXYsICJUWCBIVyBxdWV1ZSAwIHRpbWVkIG91dCwiCisJCQkiIGludm9rZSBmb3JjZWQga2lja1xuIik7CisKKwkJcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgUEJGX0NGRywgMHhmNDAwMTIpOworCisJCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisJCQl1ZGVsYXkoMTApOworCQkJaWYgKCFydDJ4MDBfZ2V0X2ZpZWxkMzIocmVnLCBUWFJYUV9QQ05UX1RYMFEpKQorCQkJCWJyZWFrOworCQl9CisKKwkJcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgUEJGX0NGRywgMHhmNDAwMDYpOworCX0KKworCXJ0MjgwMF9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgVFhSWFFfUENOVCwgJnJlZyk7CisJaWYgKHJ0MngwMF9nZXRfZmllbGQzMihyZWcsIFRYUlhRX1BDTlRfVFgxUSkpIHsKKwkJV0FSTklORyhydDJ4MDBkZXYsICJUWCBIVyBxdWV1ZSAxIHRpbWVkIG91dCwiCisJCQkiIGludm9rZSBmb3JjZWQga2lja1xuIik7CisKKwkJcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgUEJGX0NGRywgMHhmNDAwMGEpOworCisJCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisJCQl1ZGVsYXkoMTApOworCQkJaWYgKCFydDJ4MDBfZ2V0X2ZpZWxkMzIocmVnLCBUWFJYUV9QQ05UX1RYMVEpKQorCQkJCWJyZWFrOworCQl9CisKKwkJcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgUEJGX0NGRywgMHhmNDAwMDYpOworCX0KKworCXJ0MngwMHVzYl93YXRjaGRvZyhydDJ4MDBkZXYpOworfQorCisvKgogICogVFggZGVzY3JpcHRvciBpbml0aWFsaXphdGlvbgogICovCiBzdGF0aWMgX19sZTMyICpydDI4MDB1c2JfZ2V0X3R4d2koc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeSkKQEAgLTI2Niw4ICszNDEsMTQgQEAKIAkgKiBJbml0aWFsaXplIFRYSU5GTyBkZXNjcmlwdG9yCiAJICovCiAJcnQyeDAwX2Rlc2NfcmVhZCh0eGksIDAsICZ3b3JkKTsKKworCS8qCisJICogVGhlIHNpemUgb2YgVFhJTkZPX1cwX1VTQl9ETUFfVFhfUEtUX0xFTiBpcworCSAqIFRYV0kgKyA4MDIuMTEgaGVhZGVyICsgTDIgcGFkICsgcGF5bG9hZCArIHBhZCwKKwkgKiBzbyBuZWVkIHRvIGRlY3JlYXNlIHNpemUgb2YgVFhJTkZPIGFuZCBVU0IgZW5kIHBhZC4KKwkgKi8KIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYSU5GT19XMF9VU0JfRE1BX1RYX1BLVF9MRU4sCi0JCQkgICBlbnRyeS0+c2tiLT5sZW4gLSBUWElORk9fREVTQ19TSVpFKTsKKwkJCSAgIGVudHJ5LT5za2ItPmxlbiAtIFRYSU5GT19ERVNDX1NJWkUgLSA0KTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYSU5GT19XMF9XSVYsCiAJCQkgICAhdGVzdF9iaXQoRU5UUllfVFhEX0VOQ1JZUFRfSVYsICZ0eGRlc2MtPmZsYWdzKSk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWElORk9fVzBfUVNFTCwgMik7CkBAIC0yODUsMjIgKzM2NiwzNyBAQAogCXNrYmRlc2MtPmRlc2NfbGVuID0gVFhJTkZPX0RFU0NfU0laRSArIFRYV0lfREVTQ19TSVpFOwogfQogCitzdGF0aWMgdm9pZCBydDI4MDB1c2Jfd3JpdGVfdHhfZGF0YShzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5LAorCQkJCQlzdHJ1Y3QgdHhlbnRyeV9kZXNjICp0eGRlc2MpCit7CisJdW5zaWduZWQgaW50IGxlbjsKKwlpbnQgZXJyOworCisJcnQyODAwX3dyaXRlX3R4X2RhdGEoZW50cnksIHR4ZGVzYyk7CisKKwkvKgorCSAqIHBhZCgxfjMgYnl0ZXMpIGlzIGFkZGVkIGFmdGVyIGVhY2ggODAyLjExIHBheWxvYWQuCisJICogVVNCIGVuZCBwYWQoNCBieXRlcykgaXMgYWRkZWQgYXQgZWFjaCBVU0IgYnVsayBvdXQgcGFja2V0IGVuZC4KKwkgKiBUWCBmcmFtZSBmb3JtYXQgaXMgOgorCSAqIHwgVFhJTkZPIHwgVFhXSSB8IDgwMi4xMSBoZWFkZXIgfCBMMiBwYWQgfCBwYXlsb2FkIHwgcGFkIHwgVVNCIGVuZCBwYWQgfAorCSAqICAgICAgICAgICAgICAgICB8PC0tLS0tLS0tLS0tLS0gdHhfcGt0X2xlbiAtLS0tLS0tLS0tLS0tPnwKKwkgKi8KKwlsZW4gPSByb3VuZHVwKGVudHJ5LT5za2ItPmxlbiwgNCkgKyA0OworCWVyciA9IHNrYl9wYWR0byhlbnRyeS0+c2tiLCBsZW4pOworCWlmICh1bmxpa2VseShlcnIpKSB7CisJCVdBUk5JTkcoZW50cnktPnF1ZXVlLT5ydDJ4MDBkZXYsICJUWCBTS0IgcGFkZGluZyBlcnJvciwgb3V0IG9mIG1lbW9yeVxuIik7CisJCXJldHVybjsKKwl9CisKKwllbnRyeS0+c2tiLT5sZW4gPSBsZW47Cit9CisKIC8qCiAgKiBUWCBkYXRhIGluaXRpYWxpemF0aW9uCiAgKi8KIHN0YXRpYyBpbnQgcnQyODAwdXNiX2dldF90eF9kYXRhX2xlbihzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5KQogewotCWludCBsZW5ndGg7Ci0KLQkvKgotCSAqIFRoZSBsZW5ndGggX211c3RfIGluY2x1ZGUgNCBieXRlcyBwYWRkaW5nLAotCSAqIGl0IHNob3VsZCBhbHdheXMgYmUgbXVsdGlwbGUgb2YgNCwKLQkgKiBidXQgaXQgbXVzdCBfbm90XyBiZSBhIG11bHRpcGxlIG9mIHRoZSBVU0IgcGFja2V0IHNpemUuCi0JICovCi0JbGVuZ3RoID0gcm91bmR1cChlbnRyeS0+c2tiLT5sZW4gKyA0LCA0KTsKLQlsZW5ndGggKz0gKDQgKiAhKGxlbmd0aCAlIGVudHJ5LT5xdWV1ZS0+dXNiX21heHBhY2tldCkpOwotCi0JcmV0dXJuIGxlbmd0aDsKKwlyZXR1cm4gZW50cnktPnNrYi0+bGVuOwogfQogCiAvKgpAQCAtMzM1LDE0ICs0MzEsNiBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgcnQyODAwdXNiX2tpbGxfdHhfcXVldWUoc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlKQotewotCWlmIChxdWV1ZS0+cWlkID09IFFJRF9CRUFDT04pCi0JCXJ0MngwMHVzYl9yZWdpc3Rlcl93cml0ZShxdWV1ZS0+cnQyeDAwZGV2LCBCQ05fVElNRV9DRkcsIDApOwotCi0JcnQyeDAwdXNiX2tpbGxfdHhfcXVldWUocXVldWUpOwotfQotCiAvKgogICogUlggY29udHJvbCBoYW5kbGVycwogICovCkBAIC01MDcsNiArNTk1LDggQEAKIAkuZ2V0X3RzZgkJPSBydDI4MDBfZ2V0X3RzZiwKIAkucmZraWxsX3BvbGwJCT0gcnQyeDAwbWFjX3Jma2lsbF9wb2xsLAogCS5hbXBkdV9hY3Rpb24JCT0gcnQyODAwX2FtcGR1X2FjdGlvbiwKKwkuZmx1c2gJCQk9IHJ0MngwMG1hY19mbHVzaCwKKwkuZ2V0X3N1cnZleQkJPSBydDI4MDBfZ2V0X3N1cnZleSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnQyODAwX29wcyBydDI4MDB1c2JfcnQyODAwX29wcyA9IHsKQEAgLTUzNSwxMyArNjI1LDE1IEBACiAJLmxpbmtfc3RhdHMJCT0gcnQyODAwX2xpbmtfc3RhdHMsCiAJLnJlc2V0X3R1bmVyCQk9IHJ0MjgwMF9yZXNldF90dW5lciwKIAkubGlua190dW5lcgkJPSBydDI4MDBfbGlua190dW5lciwKLQkud2F0Y2hkb2cJCT0gcnQyeDAwdXNiX3dhdGNoZG9nLAorCS53YXRjaGRvZwkJPSBydDI4MDB1c2Jfd2F0Y2hkb2csCisJLnN0YXJ0X3F1ZXVlCQk9IHJ0MjgwMHVzYl9zdGFydF9xdWV1ZSwKKwkua2lja19xdWV1ZQkJPSBydDJ4MDB1c2Jfa2lja19xdWV1ZSwKKwkuc3RvcF9xdWV1ZQkJPSBydDI4MDB1c2Jfc3RvcF9xdWV1ZSwKKwkuZmx1c2hfcXVldWUJCT0gcnQyeDAwdXNiX2ZsdXNoX3F1ZXVlLAogCS53cml0ZV90eF9kZXNjCQk9IHJ0MjgwMHVzYl93cml0ZV90eF9kZXNjLAotCS53cml0ZV90eF9kYXRhCQk9IHJ0MjgwMF93cml0ZV90eF9kYXRhLAorCS53cml0ZV90eF9kYXRhCQk9IHJ0MjgwMHVzYl93cml0ZV90eF9kYXRhLAogCS53cml0ZV9iZWFjb24JCT0gcnQyODAwX3dyaXRlX2JlYWNvbiwKIAkuZ2V0X3R4X2RhdGFfbGVuCT0gcnQyODAwdXNiX2dldF90eF9kYXRhX2xlbiwKLQkua2lja190eF9xdWV1ZQkJPSBydDJ4MDB1c2Jfa2lja190eF9xdWV1ZSwKLQkua2lsbF90eF9xdWV1ZQkJPSBydDI4MDB1c2Jfa2lsbF90eF9xdWV1ZSwKIAkuZmlsbF9yeGRvbmUJCT0gcnQyODAwdXNiX2ZpbGxfcnhkb25lLAogCS5jb25maWdfc2hhcmVkX2tleQk9IHJ0MjgwMF9jb25maWdfc2hhcmVkX2tleSwKIAkuY29uZmlnX3BhaXJ3aXNlX2tleQk9IHJ0MjgwMF9jb25maWdfcGFpcndpc2Vfa2V5LApAQCAtNTUzLDIxICs2NDUsMjEgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGF0YV9xdWV1ZV9kZXNjIHJ0MjgwMHVzYl9xdWV1ZV9yeCA9IHsKLQkuZW50cnlfbnVtCQk9IFJYX0VOVFJJRVMsCisJLmVudHJ5X251bQkJPSAxMjgsCiAJLmRhdGFfc2l6ZQkJPSBBR0dSRUdBVElPTl9TSVpFLAogCS5kZXNjX3NpemUJCT0gUlhJTkZPX0RFU0NfU0laRSArIFJYV0lfREVTQ19TSVpFLAogCS5wcml2X3NpemUJCT0gc2l6ZW9mKHN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3VzYiksCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRhdGFfcXVldWVfZGVzYyBydDI4MDB1c2JfcXVldWVfdHggPSB7Ci0JLmVudHJ5X251bQkJPSBUWF9FTlRSSUVTLAorCS5lbnRyeV9udW0JCT0gNjQsCiAJLmRhdGFfc2l6ZQkJPSBBR0dSRUdBVElPTl9TSVpFLAogCS5kZXNjX3NpemUJCT0gVFhJTkZPX0RFU0NfU0laRSArIFRYV0lfREVTQ19TSVpFLAogCS5wcml2X3NpemUJCT0gc2l6ZW9mKHN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3VzYiksCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRhdGFfcXVldWVfZGVzYyBydDI4MDB1c2JfcXVldWVfYmNuID0gewotCS5lbnRyeV9udW0JCT0gOCAqIEJFQUNPTl9FTlRSSUVTLAorCS5lbnRyeV9udW0JCT0gOCwKIAkuZGF0YV9zaXplCQk9IE1HTVRfRlJBTUVfU0laRSwKIAkuZGVzY19zaXplCQk9IFRYSU5GT19ERVNDX1NJWkUgKyBUWFdJX0RFU0NfU0laRSwKIAkucHJpdl9zaXplCQk9IHNpemVvZihzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl91c2IpLApAQCAtNTk5LDExICs2OTEsMTkgQEAKIAkvKiBBYm9jb20gKi8KIAl7IFVTQl9ERVZJQ0UoMHgwN2I4LCAweDI4NzApLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJeyBVU0JfREVWSUNFKDB4MDdiOCwgMHgyNzcwKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDA3YjgsIDB4MzA3MCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwN2I4LCAweDMwNzEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MDdiOCwgMHgzMDcyKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCXsgVVNCX0RFVklDRSgweDE0ODIsIDB4M2MwOSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwkvKiBBaXJUaWVzICovCisJeyBVU0JfREVWSUNFKDB4MWVkYSwgMHgyMzEwKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCS8qIEFsbHdpbiAqLwogCXsgVVNCX0RFVklDRSgweDg1MTYsIDB4MjA3MCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKIAl7IFVTQl9ERVZJQ0UoMHg4NTE2LCAweDI3NzApLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJeyBVU0JfREVWSUNFKDB4ODUxNiwgMHgyODcwKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDg1MTYsIDB4MzA3MCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHg4NTE2LCAweDMwNzEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4ODUxNiwgMHgzMDcyKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCS8qIEFtaXQgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxNWM1LCAweDAwMDgpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJLyogQXNrZXkgKi8KQEAgLTYxMiw4ICs3MTIsMTMgQEAKIAl7IFVTQl9ERVZJQ0UoMHgwYjA1LCAweDE3MzEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJeyBVU0JfREVWSUNFKDB4MGIwNSwgMHgxNzMyKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCXsgVVNCX0RFVklDRSgweDBiMDUsIDB4MTc0MiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwYjA1LCAweDE3ODQpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJLyogQXp1cmVXYXZlICovCiAJeyBVU0JfREVWSUNFKDB4MTNkMywgMHgzMjQ3KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDEzZDMsIDB4MzI3MyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxM2QzLCAweDMzMDUpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MTNkMywgMHgzMzA3KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDEzZDMsIDB4MzMyMSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKIAkvKiBCZWxraW4gKi8KIAl7IFVTQl9ERVZJQ0UoMHgwNTBkLCAweDgwNTMpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJeyBVU0JfREVWSUNFKDB4MDUwZCwgMHg4MDVjKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LApAQCAtNjI0LDYgKzcyOSw3IEBACiAJeyBVU0JfREVWSUNFKDB4MTRiMiwgMHgzYzA2KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCXsgVVNCX0RFVklDRSgweDE0YjIsIDB4M2MwNyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKIAl7IFVTQl9ERVZJQ0UoMHgxNGIyLCAweDNjMDkpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MTRiMiwgMHgzYzEyKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCXsgVVNCX0RFVklDRSgweDE0YjIsIDB4M2MyMyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKIAl7IFVTQl9ERVZJQ0UoMHgxNGIyLCAweDNjMjUpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJeyBVU0JfREVWSUNFKDB4MTRiMiwgMHgzYzI3KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LApAQCAtNjMyLDE3ICs3MzgsMzYgQEAKIAl7IFVTQl9ERVZJQ0UoMHgwN2FhLCAweDAwMmYpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJeyBVU0JfREVWSUNFKDB4MDdhYSwgMHgwMDNjKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCXsgVVNCX0RFVklDRSgweDA3YWEsIDB4MDAzZiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxOGM1LCAweDAwMTIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJLyogRC1MaW5rICovCiAJeyBVU0JfREVWSUNFKDB4MDdkMSwgMHgzYzA5KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDA3ZDEsIDB4M2MwYSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwN2QxLCAweDNjMGQpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MDdkMSwgMHgzYzBlKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDA3ZDEsIDB4M2MwZiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKIAl7IFVTQl9ERVZJQ0UoMHgwN2QxLCAweDNjMTEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MDdkMSwgMHgzYzE2KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCS8qIERyYXl0ZWsgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwN2ZhLCAweDc3MTIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJLyogRWRpbWF4ICovCisJeyBVU0JfREVWSUNFKDB4NzM5MiwgMHg3NzExKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCXsgVVNCX0RFVklDRSgweDczOTIsIDB4NzcxNyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKIAl7IFVTQl9ERVZJQ0UoMHg3MzkyLCAweDc3MTgpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJLyogRW5jb3JlICovCisJeyBVU0JfREVWSUNFKDB4MjAzZCwgMHgxNDgwKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDIwM2QsIDB4MTRhOSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKIAkvKiBFbkdlbml1cyAqLwogCXsgVVNCX0RFVklDRSgweDE3NDAsIDB4OTcwMSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKIAl7IFVTQl9ERVZJQ0UoMHgxNzQwLCAweDk3MDIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MTc0MCwgMHg5NzAzKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDE3NDAsIDB4OTcwNSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxNzQwLCAweDk3MDYpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MTc0MCwgMHg5NzA3KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDE3NDAsIDB4OTcwOCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxNzQwLCAweDk3MDkpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJLyogR2lnYWJ5dGUgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMDQ0LCAweDgwMGIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MTA0NCwgMHg4MDBkKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCS8qIEhhd2tpbmcgKi8KIAl7IFVTQl9ERVZJQ0UoMHgwZTY2LCAweDAwMDEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJeyBVU0JfREVWSUNFKDB4MGU2NiwgMHgwMDAzKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LApAQCAtNjUxLDYgKzc3NiwxMCBAQAogCXsgVVNCX0RFVklDRSgweDBlNjYsIDB4MDAxMyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKIAl7IFVTQl9ERVZJQ0UoMHgwZTY2LCAweDAwMTcpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJeyBVU0JfREVWSUNFKDB4MGU2NiwgMHgwMDE4KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCS8qIEktTyBEQVRBICovCisJeyBVU0JfREVWSUNFKDB4MDRiYiwgMHgwOTQ1KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDA0YmIsIDB4MDk0NyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNGJiLCAweDA5NDgpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJLyogTGlua3N5cyAqLwogCXsgVVNCX0RFVklDRSgweDE3MzcsIDB4MDA3MCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKIAl7IFVTQl9ERVZJQ0UoMHgxNzM3LCAweDAwNzEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCkBAIC02NTgsMTA3ICs3ODcsMTYgQEAKIAl7IFVTQl9ERVZJQ0UoMHgwNzg5LCAweDAxNjIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJeyBVU0JfREVWSUNFKDB4MDc4OSwgMHgwMTYzKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCXsgVVNCX0RFVklDRSgweDA3ODksIDB4MDE2NCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNzg5LCAweDAxNjYpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJLyogTW90b3JvbGEgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMDBkLCAweDkwMzEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJLyogTVNJICovCi0JeyBVU0JfREVWSUNFKDB4MGRiMCwgMHg2ODk5KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCS8qIFBoaWxpcHMgKi8KLQl7IFVTQl9ERVZJQ0UoMHgwNDcxLCAweDIwMGYpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JLyogUGxhbmV4ICovCi0JeyBVU0JfREVWSUNFKDB4MjAxOSwgMHhlZDA2KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCS8qIFJhbGluayAqLwotCXsgVVNCX0RFVklDRSgweDE0OGYsIDB4Mjc3MCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxNDhmLCAweDI4NzApLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JLyogU2Ftc3VuZyAqLwotCXsgVVNCX0RFVklDRSgweDA0ZTgsIDB4MjAxOCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQkvKiBTaWVtZW5zICovCi0JeyBVU0JfREVWSUNFKDB4MTI5YiwgMHgxODI4KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCS8qIFNpdGVjb20gKi8KLQl7IFVTQl9ERVZJQ0UoMHgwZGY2LCAweDAwMTcpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MGRmNiwgMHgwMDJiKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDBkZjYsIDB4MDAyYyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwZGY2LCAweDAwMmQpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MGRmNiwgMHgwMDM5KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDBkZjYsIDB4MDAzYiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwZGY2LCAweDAwM2QpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MGRmNiwgMHgwMDNmKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCS8qIFNNQyAqLwotCXsgVVNCX0RFVklDRSgweDA4M2EsIDB4NjYxOCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwODNhLCAweDc1MTIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MDgzYSwgMHg3NTIyKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDA4M2EsIDB4ODUyMiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwODNhLCAweGE2MTgpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MDgzYSwgMHhiNTIyKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCS8qIFNwYXJrbGFuICovCi0JeyBVU0JfREVWSUNFKDB4MTVhOSwgMHgwMDA2KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCS8qIFN3ZWV4ICovCi0JeyBVU0JfREVWSUNFKDB4MTc3ZiwgMHgwMzAyKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCS8qIFUtTWVkaWEqLwotCXsgVVNCX0RFVklDRSgweDE1N2UsIDB4MzAwZSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQkvKiBaQ09NICovCi0JeyBVU0JfREVWSUNFKDB4MGNkZSwgMHgwMDIyKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDBjZGUsIDB4MDAyNSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQkvKiBaaW53ZWxsICovCi0JeyBVU0JfREVWSUNFKDB4NWE1NywgMHgwMjgwKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDVhNTcsIDB4MDI4MiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQkvKiBaeXhlbCAqLwotCXsgVVNCX0RFVklDRSgweDA1ODYsIDB4MzQxNiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLSNpZmRlZiBDT05GSUdfUlQyODAwVVNCX1JUMzBYWAotCS8qIEFib2NvbSAqLwotCXsgVVNCX0RFVklDRSgweDA3YjgsIDB4MzA3MCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwN2I4LCAweDMwNzEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MDdiOCwgMHgzMDcyKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCS8qIEFpclRpZXMgKi8KLQl7IFVTQl9ERVZJQ0UoMHgxZWRhLCAweDIzMTApLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JLyogQWxsd2luICovCi0JeyBVU0JfREVWSUNFKDB4ODUxNiwgMHgzMDcwKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDg1MTYsIDB4MzA3MSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHg4NTE2LCAweDMwNzIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JLyogQVNVUyAqLwotCXsgVVNCX0RFVklDRSgweDBiMDUsIDB4MTc4NCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQkvKiBBenVyZVdhdmUgKi8KLQl7IFVTQl9ERVZJQ0UoMHgxM2QzLCAweDMyNzMpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MTNkMywgMHgzMzA1KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDEzZDMsIDB4MzMwNyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxM2QzLCAweDMzMjEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JLyogQ29uY2VwdHJvbmljICovCi0JeyBVU0JfREVWSUNFKDB4MTRiMiwgMHgzYzEyKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCS8qIENvcmVnYSAqLwotCXsgVVNCX0RFVklDRSgweDE4YzUsIDB4MDAxMiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQkvKiBELUxpbmsgKi8KLQl7IFVTQl9ERVZJQ0UoMHgwN2QxLCAweDNjMGEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MDdkMSwgMHgzYzBkKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDA3ZDEsIDB4M2MwZSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwN2QxLCAweDNjMGYpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MDdkMSwgMHgzYzE2KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCS8qIERyYXl0ZWsgKi8KLQl7IFVTQl9ERVZJQ0UoMHgwN2ZhLCAweDc3MTIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JLyogRWRpbWF4ICovCi0JeyBVU0JfREVWSUNFKDB4NzM5MiwgMHg3NzExKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCS8qIEVuY29yZSAqLwotCXsgVVNCX0RFVklDRSgweDIwM2QsIDB4MTQ4MCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgyMDNkLCAweDE0YTkpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JLyogRW5HZW5pdXMgKi8KLQl7IFVTQl9ERVZJQ0UoMHgxNzQwLCAweDk3MDMpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MTc0MCwgMHg5NzA1KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDE3NDAsIDB4OTcwNiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxNzQwLCAweDk3MDcpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MTc0MCwgMHg5NzA4KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDE3NDAsIDB4OTcwOSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQkvKiBHaWdhYnl0ZSAqLwotCXsgVVNCX0RFVklDRSgweDEwNDQsIDB4ODAwZCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQkvKiBJLU8gREFUQSAqLwotCXsgVVNCX0RFVklDRSgweDA0YmIsIDB4MDk0NSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwNGJiLCAweDA5NDcpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MDRiYiwgMHgwOTQ4KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCS8qIExvZ2l0ZWMgKi8KLQl7IFVTQl9ERVZJQ0UoMHgwNzg5LCAweDAxNjYpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JLyogTVNJICovCiAJeyBVU0JfREVWSUNFKDB4MGRiMCwgMHgzODIwKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCXsgVVNCX0RFVklDRSgweDBkYjAsIDB4MzgyMSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKIAl7IFVTQl9ERVZJQ0UoMHgwZGIwLCAweDM4MjIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJeyBVU0JfREVWSUNFKDB4MGRiMCwgMHgzODcwKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCXsgVVNCX0RFVklDRSgweDBkYjAsIDB4Mzg3MSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwZGIwLCAweDY4OTkpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJeyBVU0JfREVWSUNFKDB4MGRiMCwgMHg4MjFhKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCXsgVVNCX0RFVklDRSgweDBkYjAsIDB4ODIyYSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKIAl7IFVTQl9ERVZJQ0UoMHgwZGIwLCAweDgyMmIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCkBAIC03NzMsMjkgKzgxMSw3MSBAQAogCS8qIFBlZ2F0cm9uICovCiAJeyBVU0JfREVWSUNFKDB4MWQ0ZCwgMHgwMDBjKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCXsgVVNCX0RFVklDRSgweDFkNGQsIDB4MDAwZSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwkvKiBQaGlsaXBzICovCisJeyBVU0JfREVWSUNFKDB4MDQ3MSwgMHgyMDBmKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCS8qIFBsYW5leCAqLwogCXsgVVNCX0RFVklDRSgweDIwMTksIDB4YWIyNSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgyMDE5LCAweGVkMDYpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJLyogUXVhbnRhICovCiAJeyBVU0JfREVWSUNFKDB4MWEzMiwgMHgwMzA0KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCS8qIFJhbGluayAqLwogCXsgVVNCX0RFVklDRSgweDE0OGYsIDB4MjA3MCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxNDhmLCAweDI3NzApLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MTQ4ZiwgMHgyODcwKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCXsgVVNCX0RFVklDRSgweDE0OGYsIDB4MzA3MCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKIAl7IFVTQl9ERVZJQ0UoMHgxNDhmLCAweDMwNzEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJeyBVU0JfREVWSUNFKDB4MTQ4ZiwgMHgzMDcyKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCS8qIFNhbXN1bmcgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNGU4LCAweDIwMTgpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJLyogU2llbWVucyAqLworCXsgVVNCX0RFVklDRSgweDEyOWIsIDB4MTgyOCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKIAkvKiBTaXRlY29tICovCisJeyBVU0JfREVWSUNFKDB4MGRmNiwgMHgwMDE3KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDBkZjYsIDB4MDAyYiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwZGY2LCAweDAwMmMpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MGRmNiwgMHgwMDJkKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDBkZjYsIDB4MDAzOSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwZGY2LCAweDAwM2IpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MGRmNiwgMHgwMDNkKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCXsgVVNCX0RFVklDRSgweDBkZjYsIDB4MDAzZSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwZGY2LCAweDAwM2YpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJeyBVU0JfREVWSUNFKDB4MGRmNiwgMHgwMDQwKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCXsgVVNCX0RFVklDRSgweDBkZjYsIDB4MDA0MiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKIAl7IFVTQl9ERVZJQ0UoMHgwZGY2LCAweDAwNDcpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJeyBVU0JfREVWSUNFKDB4MGRmNiwgMHgwMDQ4KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCS8qIFNNQyAqLworCXsgVVNCX0RFVklDRSgweDA4M2EsIDB4NjYxOCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKIAl7IFVTQl9ERVZJQ0UoMHgwODNhLCAweDc1MTEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MDgzYSwgMHg3NTEyKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDA4M2EsIDB4NzUyMiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwODNhLCAweDg1MjIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MDgzYSwgMHhhNjE4KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCXsgVVNCX0RFVklDRSgweDA4M2EsIDB4YTcwMSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKIAl7IFVTQl9ERVZJQ0UoMHgwODNhLCAweGE3MDIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJeyBVU0JfREVWSUNFKDB4MDgzYSwgMHhhNzAzKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDA4M2EsIDB4YjUyMiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwkvKiBTcGFya2xhbiAqLworCXsgVVNCX0RFVklDRSgweDE1YTksIDB4MDAwNiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwkvKiBTd2VleCAqLworCXsgVVNCX0RFVklDRSgweDE3N2YsIDB4MDMwMiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwkvKiBVLU1lZGlhKi8KKwl7IFVTQl9ERVZJQ0UoMHgxNTdlLCAweDMwMGUpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJLyogWkNPTSAqLworCXsgVVNCX0RFVklDRSgweDBjZGUsIDB4MDAyMiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwY2RlLCAweDAwMjUpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJLyogWmlud2VsbCAqLworCXsgVVNCX0RFVklDRSgweDVhNTcsIDB4MDI4MCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHg1YTU3LCAweDAyODIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJeyBVU0JfREVWSUNFKDB4NWE1NywgMHgwMjgzKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCXsgVVNCX0RFVklDRSgweDVhNTcsIDB4NTI1NyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwkvKiBaeXhlbCAqLworCXsgVVNCX0RFVklDRSgweDA1ODYsIDB4MzQxNiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKyNpZmRlZiBDT05GSUdfUlQyODAwVVNCX1JUMzNYWAorCS8qIFJhbGluayAqLworCXsgVVNCX0RFVklDRSgweDE0OGYsIDB4MzM3MCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxNDhmLCAweDgwNzApLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJLyogU2l0ZWNvbSAqLworCXsgVVNCX0RFVklDRSgweDBkZjYsIDB4MDA1MCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKICNlbmRpZgogI2lmZGVmIENPTkZJR19SVDI4MDBVU0JfUlQzNVhYCiAJLyogQWxsd2luICovCkBAIC04MDksMTIgKzg4OSw5IEBACiAJLyogSS1PIERBVEEgKi8KIAl7IFVTQl9ERVZJQ0UoMHgwNGJiLCAweDA5NDQpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJLyogUmFsaW5rICovCi0JeyBVU0JfREVWSUNFKDB4MTQ4ZiwgMHgzMzcwKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCXsgVVNCX0RFVklDRSgweDE0OGYsIDB4MzU3MiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxNDhmLCAweDgwNzApLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJLyogU2l0ZWNvbSAqLwogCXsgVVNCX0RFVklDRSgweDBkZjYsIDB4MDA0MSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwZGY2LCAweDAwNTApLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJLyogWmlud2VsbCAqLwogCXsgVVNCX0RFVklDRSgweDVhNTcsIDB4MDI4NCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMHVzYi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMHVzYi5oCmluZGV4IDA3MjJiYWQuLjY3MWVhMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDB1c2IuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwdXNiLmgKQEAgLTQwLDggKzQwLDggQEAKIC8qCiAgKiBETUEgZGVzY3JpcHRvciBkZWZpbmVzLgogICovCi0jZGVmaW5lIFRYSU5GT19ERVNDX1NJWkUJCSggMSAqIHNpemVvZihfX2xlMzIpICkKLSNkZWZpbmUgUlhJTkZPX0RFU0NfU0laRQkJKCAxICogc2l6ZW9mKF9fbGUzMikgKQorI2RlZmluZSBUWElORk9fREVTQ19TSVpFCQkoMSAqIHNpemVvZihfX2xlMzIpKQorI2RlZmluZSBSWElORk9fREVTQ19TSVpFCQkoMSAqIHNpemVvZihfX2xlMzIpKQogCiAvKgogICogVFggSW5mbyBzdHJ1Y3R1cmUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDAuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDAuaAppbmRleCBhYjQzZTdjLi44NGFhZjM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMC5oCkBAIC02Niw3ICs2Niw3IEBACiAKICNpZmRlZiBDT05GSUdfUlQyWDAwX0RFQlVHCiAjZGVmaW5lIERFQlVHX1BSSU5USyhfX2RldiwgX19rZXJubHZsLCBfX2x2bCwgX19tc2csIF9fYXJncy4uLikJXAotCURFQlVHX1BSSU5US19NU0coX19kZXYsIF9fa2Vybmx2bCwgX19sdmwsIF9fbXNnLCAjI19fYXJncyk7CisJREVCVUdfUFJJTlRLX01TRyhfX2RldiwgX19rZXJubHZsLCBfX2x2bCwgX19tc2csICMjX19hcmdzKQogI2Vsc2UKICNkZWZpbmUgREVCVUdfUFJJTlRLKF9fZGV2LCBfX2tlcm5sdmwsIF9fbHZsLCBfX21zZywgX19hcmdzLi4uKQlcCiAJZG8geyB9IHdoaWxlICgwKQpAQCAtMzQ3LDYgKzM0NywxMCBAQAogCXN0cnVjdCBkZWxheWVkX3dvcmsgd2F0Y2hkb2dfd29yazsKIH07CiAKK2VudW0gcnQyeDAwX2RlbGF5ZWRfZmxhZ3MgeworCURFTEFZRURfVVBEQVRFX0JFQUNPTiwKK307CisKIC8qCiAgKiBJbnRlcmZhY2Ugc3RydWN0dXJlCiAgKiBQZXIgaW50ZXJmYWNlIGNvbmZpZ3VyYXRpb24gZGV0YWlscywgdGhpcyBzdHJ1Y3R1cmUKQEAgLTM1NCwyMiArMzU4LDYgQEAKICAqLwogc3RydWN0IHJ0MngwMF9pbnRmIHsKIAkvKgotCSAqIEFsbCBmaWVsZHMgd2l0aGluIHRoZSBydDJ4MDBfaW50ZiBzdHJ1Y3R1cmUKLQkgKiBtdXN0IGJlIHByb3RlY3RlZCB3aXRoIGEgc3BpbmxvY2suCi0JICovCi0Jc3BpbmxvY2tfdCBsb2NrOwotCi0JLyoKLQkgKiBNQUMgb2YgdGhlIGRldmljZS4KLQkgKi8KLQl1OCBtYWNbRVRIX0FMRU5dOwotCi0JLyoKLQkgKiBCQlNJRCBvZiB0aGUgQVAgdG8gYXNzb2NpYXRlIHdpdGguCi0JICovCi0JdTggYnNzaWRbRVRIX0FMRU5dOwotCi0JLyoKIAkgKiBiZWFjb24tPnNrYiBtdXN0IGJlIHByb3RlY3RlZCB3aXRoIHRoZSBtdXRleC4KIAkgKi8KIAlzdHJ1Y3QgbXV0ZXggYmVhY29uX3NrYl9tdXRleDsKQEAgLTM4NCw4ICszNzIsNyBAQAogCS8qCiAJICogQWN0aW9ucyB0aGF0IG5lZWRlZCByZXNjaGVkdWxpbmcuCiAJICovCi0JdW5zaWduZWQgaW50IGRlbGF5ZWRfZmxhZ3M7Ci0jZGVmaW5lIERFTEFZRURfVVBEQVRFX0JFQUNPTgkJMHgwMDAwMDAwMQorCXVuc2lnbmVkIGxvbmcgZGVsYXllZF9mbGFnczsKIAogCS8qCiAJICogU29mdHdhcmUgc2VxdWVuY2UgY291bnRlciwgdGhpcyBpcyBvbmx5IHJlcXVpcmVkCkBAIC01NjcsNyArNTU0LDE1IEBACiAJCQkgICAgIHN0cnVjdCBsaW5rX3F1YWwgKnF1YWwpOwogCXZvaWQgKCpsaW5rX3R1bmVyKSAoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKIAkJCSAgICBzdHJ1Y3QgbGlua19xdWFsICpxdWFsLCBjb25zdCB1MzIgY291bnQpOworCisJLyoKKwkgKiBEYXRhIHF1ZXVlIGhhbmRsZXJzLgorCSAqLwogCXZvaWQgKCp3YXRjaGRvZykgKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpOworCXZvaWQgKCpzdGFydF9xdWV1ZSkgKHN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZSk7CisJdm9pZCAoKmtpY2tfcXVldWUpIChzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWUpOworCXZvaWQgKCpzdG9wX3F1ZXVlKSAoc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlKTsKKwl2b2lkICgqZmx1c2hfcXVldWUpIChzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWUpOwogCiAJLyoKIAkgKiBUWCBjb250cm9sIGhhbmRsZXJzCkBAIC01NzksOCArNTc0LDYgQEAKIAl2b2lkICgqd3JpdGVfYmVhY29uKSAoc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeSwKIAkJCSAgICAgIHN0cnVjdCB0eGVudHJ5X2Rlc2MgKnR4ZGVzYyk7CiAJaW50ICgqZ2V0X3R4X2RhdGFfbGVuKSAoc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeSk7Ci0Jdm9pZCAoKmtpY2tfdHhfcXVldWUpIChzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWUpOwotCXZvaWQgKCpraWxsX3R4X3F1ZXVlKSAoc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlKTsKIAogCS8qCiAJICogUlggY29udHJvbCBoYW5kbGVycwpAQCAtOTAyLDcgKzg5NSw3IEBACiAJLyoKIAkgKiBGSUZPIGZvciBzdG9yaW5nIHR4IHN0YXR1cyByZXBvcnRzIGJldHdlZW4gaXNyIGFuZCB0YXNrbGV0LgogCSAqLwotCXN0cnVjdCBrZmlmbyB0eHN0YXR1c19maWZvOworCURFQ0xBUkVfS0ZJRk9fUFRSKHR4c3RhdHVzX2ZpZm8sIHUzMik7CiAKIAkvKgogCSAqIFRhc2tsZXQgZm9yIHByb2Nlc3NpbmcgdHggc3RhdHVzIHJlcG9ydHMgKHJ0MjgwMHBjaSkuCkBAIC05MTYsNyArOTA5LDcgQEAKICAqIGluIHRob3NlIGNhc2VzIFJFR0lTVEVSX0JVU1lfQ09VTlQgYXR0ZW1wdHMgc2hvdWxkIGJlCiAgKiB0YWtlbiB3aXRoIGEgUkVHSVNURVJfQlVTWV9ERUxBWSBpbnRlcnZhbC4KICAqLwotI2RlZmluZSBSRUdJU1RFUl9CVVNZX0NPVU5UCTUKKyNkZWZpbmUgUkVHSVNURVJfQlVTWV9DT1VOVAkxMDAKICNkZWZpbmUgUkVHSVNURVJfQlVTWV9ERUxBWQkxMDAKIAogLyoKQEAgLTEwNjgsNiArMTA2MSw3OCBAQAogc3RydWN0IHF1ZXVlX2VudHJ5ICpydDJ4MDBxdWV1ZV9nZXRfZW50cnkoc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlLAogCQkJCQkgIGVudW0gcXVldWVfaW5kZXggaW5kZXgpOwogCisvKioKKyAqIHJ0MngwMHF1ZXVlX3BhdXNlX3F1ZXVlIC0gUGF1c2UgYSBkYXRhIHF1ZXVlCisgKiBAcXVldWU6IFBvaW50ZXIgdG8gJnN0cnVjdCBkYXRhX3F1ZXVlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBwYXVzZSB0aGUgZGF0YSBxdWV1ZSBsb2NhbGx5LCBwcmV2ZW50aW5nCisgKiBuZXcgZnJhbWVzIHRvIGJlIGFkZGVkIHRvIHRoZSBxdWV1ZSAod2hpbGUgdGhlIGhhcmR3YXJlIGlzCisgKiBzdGlsbCBhbGxvd2VkIHRvIHJ1bikuCisgKi8KK3ZvaWQgcnQyeDAwcXVldWVfcGF1c2VfcXVldWUoc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlKTsKKworLyoqCisgKiBydDJ4MDBxdWV1ZV91bnBhdXNlX3F1ZXVlIC0gdW5wYXVzZSBhIGRhdGEgcXVldWUKKyAqIEBxdWV1ZTogUG9pbnRlciB0byAmc3RydWN0IGRhdGFfcXVldWUuCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIHVucGF1c2UgdGhlIGRhdGEgcXVldWUgbG9jYWxseSwgYWxsb3dpbmcKKyAqIG5ldyBmcmFtZXMgdG8gYmUgYWRkZWQgdG8gdGhlIHF1ZXVlIGFnYWluLgorICovCit2b2lkIHJ0MngwMHF1ZXVlX3VucGF1c2VfcXVldWUoc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlKTsKKworLyoqCisgKiBydDJ4MDBxdWV1ZV9zdGFydF9xdWV1ZSAtIFN0YXJ0IGEgZGF0YSBxdWV1ZQorICogQHF1ZXVlOiBQb2ludGVyIHRvICZzdHJ1Y3QgZGF0YV9xdWV1ZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgc3RhcnQgaGFuZGxpbmcgYWxsIHBlbmRpbmcgZnJhbWVzIGluIHRoZSBxdWV1ZS4KKyAqLwordm9pZCBydDJ4MDBxdWV1ZV9zdGFydF9xdWV1ZShzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWUpOworCisvKioKKyAqIHJ0MngwMHF1ZXVlX3N0b3BfcXVldWUgLSBIYWx0IGEgZGF0YSBxdWV1ZQorICogQHF1ZXVlOiBQb2ludGVyIHRvICZzdHJ1Y3QgZGF0YV9xdWV1ZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgc3RvcCBhbGwgcGVuZGluZyBmcmFtZXMgaW4gdGhlIHF1ZXVlLgorICovCit2b2lkIHJ0MngwMHF1ZXVlX3N0b3BfcXVldWUoc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlKTsKKworLyoqCisgKiBydDJ4MDBxdWV1ZV9mbHVzaF9xdWV1ZSAtIEZsdXNoIGEgZGF0YSBxdWV1ZQorICogQHF1ZXVlOiBQb2ludGVyIHRvICZzdHJ1Y3QgZGF0YV9xdWV1ZS4KKyAqIEBkcm9wOiBUcnVlIHRvIGRyb3AgYWxsIHBlbmRpbmcgZnJhbWVzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBmbHVzaCB0aGUgcXVldWUuIEFmdGVyIHRoaXMgY2FsbAorICogdGhlIHF1ZXVlIGlzIGd1YXJlbnRlZWQgdG8gYmUgZW1wdHkuCisgKi8KK3ZvaWQgcnQyeDAwcXVldWVfZmx1c2hfcXVldWUoc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlLCBib29sIGRyb3ApOworCisvKioKKyAqIHJ0MngwMHF1ZXVlX3N0YXJ0X3F1ZXVlcyAtIFN0YXJ0IGFsbCBkYXRhIHF1ZXVlcworICogQHJ0MngwMGRldjogUG9pbnRlciB0byAmc3RydWN0IHJ0MngwMF9kZXYuCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIGxvb3AgdGhyb3VnaCBhbGwgYXZhaWxhYmxlIHF1ZXVlcyB0byBzdGFydCB0aGVtCisgKi8KK3ZvaWQgcnQyeDAwcXVldWVfc3RhcnRfcXVldWVzKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpOworCisvKioKKyAqIHJ0MngwMHF1ZXVlX3N0b3BfcXVldWVzIC0gSGFsdCBhbGwgZGF0YSBxdWV1ZXMKKyAqIEBydDJ4MDBkZXY6IFBvaW50ZXIgdG8gJnN0cnVjdCBydDJ4MDBfZGV2LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBsb29wIHRocm91Z2ggYWxsIGF2YWlsYWJsZSBxdWV1ZXMgdG8gc3RvcAorICogYW55IHBlbmRpbmcgZnJhbWVzLgorICovCit2b2lkIHJ0MngwMHF1ZXVlX3N0b3BfcXVldWVzKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpOworCisvKioKKyAqIHJ0MngwMHF1ZXVlX2ZsdXNoX3F1ZXVlcyAtIEZsdXNoIGFsbCBkYXRhIHF1ZXVlcworICogQHJ0MngwMGRldjogUG9pbnRlciB0byAmc3RydWN0IHJ0MngwMF9kZXYuCisgKiBAZHJvcDogVHJ1ZSB0byBkcm9wIGFsbCBwZW5kaW5nIGZyYW1lcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgbG9vcCB0aHJvdWdoIGFsbCBhdmFpbGFibGUgcXVldWVzIHRvIGZsdXNoCisgKiBhbnkgcGVuZGluZyBmcmFtZXMuCisgKi8KK3ZvaWQgcnQyeDAwcXVldWVfZmx1c2hfcXVldWVzKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsIGJvb2wgZHJvcCk7CisKIC8qCiAgKiBEZWJ1Z2ZzIGhhbmRsZXJzLgogICovCkBAIC0xMDkzLDYgKzExNTgsNyBAQAogICovCiB2b2lkIHJ0MngwMGxpYl9iZWFjb25kb25lKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpOwogdm9pZCBydDJ4MDBsaWJfcHJldGJ0dChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KTsKK3ZvaWQgcnQyeDAwbGliX2RtYXN0YXJ0KHN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnkpOwogdm9pZCBydDJ4MDBsaWJfZG1hZG9uZShzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5KTsKIHZvaWQgcnQyeDAwbGliX3R4ZG9uZShzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5LAogCQkgICAgICBzdHJ1Y3QgdHhkb25lX2VudHJ5X2Rlc2MgKnR4ZGVzYyk7CkBAIC0xMTM0LDYgKzEyMDAsNyBAQAogaW50IHJ0MngwMG1hY19jb25mX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MTYgcXVldWUsCiAJCSAgICAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfcGFyYW1zICpwYXJhbXMpOwogdm9pZCBydDJ4MDBtYWNfcmZraWxsX3BvbGwoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwordm9pZCBydDJ4MDBtYWNfZmx1c2goc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGJvb2wgZHJvcCk7CiAKIC8qCiAgKiBEcml2ZXIgYWxsb2NhdGlvbiBoYW5kbGVycy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBjb25maWcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBjb25maWcuYwppbmRleCA1NGZmYjVhLi5lN2Y2N2Q1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwY29uZmlnLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGNvbmZpZy5jCkBAIC02MiwxMyArNjIsMTMgQEAKIAkgKiBUaGlzIHdpbGwgcHJldmVudCB0aGUgZGV2aWNlIGJlaW5nIGNvbmZ1c2VkIHdoZW4gaXQgd2FudHMKIAkgKiB0byBBQ0sgZnJhbWVzIG9yIGNvbnNpZGVyZXMgaXRzZWxmIGFzc29jaWF0ZWQuCiAJICovCi0JbWVtc2V0KCZjb25mLm1hYywgMCwgc2l6ZW9mKGNvbmYubWFjKSk7CisJbWVtc2V0KGNvbmYubWFjLCAwLCBzaXplb2YoY29uZi5tYWMpKTsKIAlpZiAobWFjKQotCQltZW1jcHkoJmNvbmYubWFjLCBtYWMsIEVUSF9BTEVOKTsKKwkJbWVtY3B5KGNvbmYubWFjLCBtYWMsIEVUSF9BTEVOKTsKIAotCW1lbXNldCgmY29uZi5ic3NpZCwgMCwgc2l6ZW9mKGNvbmYuYnNzaWQpKTsKKwltZW1zZXQoY29uZi5ic3NpZCwgMCwgc2l6ZW9mKGNvbmYuYnNzaWQpKTsKIAlpZiAoYnNzaWQpCi0JCW1lbWNweSgmY29uZi5ic3NpZCwgYnNzaWQsIEVUSF9BTEVOKTsKKwkJbWVtY3B5KGNvbmYuYnNzaWQsIGJzc2lkLCBFVEhfQUxFTik7CiAKIAlmbGFncyB8PSBDT05GSUdfVVBEQVRFX1RZUEU7CiAJaWYgKG1hYyB8fCAoIXJ0MngwMGRldi0+aW50Zl9hcF9jb3VudCAmJiAhcnQyeDAwZGV2LT5pbnRmX3N0YV9jb3VudCkpCkBAIC0xMzMsNyArMTMzLDcgQEAKIAkgKi8KIAlpZiAoIShhbnQtPmZsYWdzICYgQU5URU5OQV9SWF9ESVZFUlNJVFkpKQogCQljb25maWcucnggPSBydDJ4MDBsaWJfY29uZmlnX2FudGVubmFfY2hlY2soY29uZmlnLnJ4LCBkZWYtPnJ4KTsKLQllbHNlIGlmKGNvbmZpZy5yeCA9PSBBTlRFTk5BX1NXX0RJVkVSU0lUWSkKKwllbHNlIGlmIChjb25maWcucnggPT0gQU5URU5OQV9TV19ESVZFUlNJVFkpCiAJCWNvbmZpZy5yeCA9IGFjdGl2ZS0+cng7CiAKIAlpZiAoIShhbnQtPmZsYWdzICYgQU5URU5OQV9UWF9ESVZFUlNJVFkpKQpAQCAtMTQ2LDcgKzE0Niw3IEBACiAJICogZWxzZSB0aGUgY2hhbmdlcyB3aWxsIGJlIGlnbm9yZWQgYnkgdGhlIGRldmljZS4KIAkgKi8KIAlpZiAodGVzdF9iaXQoREVWSUNFX1NUQVRFX0VOQUJMRURfUkFESU8sICZydDJ4MDBkZXYtPmZsYWdzKSkKLQkJcnQyeDAwbGliX3RvZ2dsZV9yeChydDJ4MDBkZXYsIFNUQVRFX1JBRElPX1JYX09GRl9MSU5LKTsKKwkJcnQyeDAwcXVldWVfc3RvcF9xdWV1ZShydDJ4MDBkZXYtPnJ4KTsKIAogCS8qCiAJICogV3JpdGUgbmV3IGFudGVubmEgc2V0dXAgdG8gZGV2aWNlIGFuZCByZXNldCB0aGUgbGluayB0dW5lci4KQEAgLTE2MCw3ICsxNjAsNyBAQAogCW1lbWNweShhY3RpdmUsICZjb25maWcsIHNpemVvZihjb25maWcpKTsKIAogCWlmICh0ZXN0X2JpdChERVZJQ0VfU1RBVEVfRU5BQkxFRF9SQURJTywgJnJ0MngwMGRldi0+ZmxhZ3MpKQotCQlydDJ4MDBsaWJfdG9nZ2xlX3J4KHJ0MngwMGRldiwgU1RBVEVfUkFESU9fUlhfT05fTElOSyk7CisJCXJ0MngwMHF1ZXVlX3N0YXJ0X3F1ZXVlKHJ0MngwMGRldi0+cngpOwogfQogCiB2b2lkIHJ0MngwMGxpYl9jb25maWcoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZWJ1Zy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGRlYnVnLmMKaW5kZXggZmNkYjZiMC4uYzkyZGIzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGRlYnVnLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGRlYnVnLmMKQEAgLTE2MiwxMSArMTYyLDExIEBACiAJc3RydWN0IHRpbWV2YWwgdGltZXN0YW1wOwogCXUzMiBkYXRhX2xlbjsKIAotCWRvX2dldHRpbWVvZmRheSgmdGltZXN0YW1wKTsKLQotCWlmICghdGVzdF9iaXQoRlJBTUVfRFVNUF9GSUxFX09QRU4sICZpbnRmLT5mcmFtZV9kdW1wX2ZsYWdzKSkKKwlpZiAobGlrZWx5KCF0ZXN0X2JpdChGUkFNRV9EVU1QX0ZJTEVfT1BFTiwgJmludGYtPmZyYW1lX2R1bXBfZmxhZ3MpKSkKIAkJcmV0dXJuOwogCisJZG9fZ2V0dGltZW9mZGF5KCZ0aW1lc3RhbXApOworCiAJaWYgKHNrYl9xdWV1ZV9sZW4oJmludGYtPmZyYW1lX2R1bXBfc2ticXVldWUpID4gMjApIHsKIAkJREVCVUcocnQyeDAwZGV2LCAidHhyeCBkdW1wIHF1ZXVlIGxlbmd0aCBleGNlZWRlZC5cbiIpOwogCQlyZXR1cm47CkBAIC0zMzksMTggKzMzOSwxOSBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCXRlbXAgPSBkYXRhICsKLQkgICAgc3ByaW50ZihkYXRhLCAicWlkXHRjb3VudFx0bGltaXRcdGxlbmd0aFx0aW5kZXhcdGRtYSBkb25lXHRkb25lXG4iKTsKKwkgICAgc3ByaW50ZihkYXRhLCAicWlkXHRmbGFnc1x0XHRjb3VudFx0bGltaXRcdGxlbmd0aFx0aW5kZXhcdGRtYSBkb25lXHRkb25lXG4iKTsKIAogCXF1ZXVlX2Zvcl9lYWNoKGludGYtPnJ0MngwMGRldiwgcXVldWUpIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnF1ZXVlLT5sb2NrLCBpcnFmbGFncyk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZxdWV1ZS0+aW5kZXhfbG9jaywgaXJxZmxhZ3MpOwogCi0JCXRlbXAgKz0gc3ByaW50Zih0ZW1wLCAiJWRcdCVkXHQlZFx0JWRcdCVkXHQlZFx0JWRcbiIsIHF1ZXVlLT5xaWQsCisJCXRlbXAgKz0gc3ByaW50Zih0ZW1wLCAiJWRcdDB4JS44eFx0JWRcdCVkXHQlZFx0JWRcdCVkXHRcdCVkXG4iLAorCQkJCXF1ZXVlLT5xaWQsICh1bnNpZ25lZCBpbnQpcXVldWUtPmZsYWdzLAogCQkJCXF1ZXVlLT5jb3VudCwgcXVldWUtPmxpbWl0LCBxdWV1ZS0+bGVuZ3RoLAogCQkJCXF1ZXVlLT5pbmRleFtRX0lOREVYXSwKIAkJCQlxdWV1ZS0+aW5kZXhbUV9JTkRFWF9ETUFfRE9ORV0sCiAJCQkJcXVldWUtPmluZGV4W1FfSU5ERVhfRE9ORV0pOwogCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnF1ZXVlLT5sb2NrLCBpcnFmbGFncyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnF1ZXVlLT5pbmRleF9sb2NrLCBpcnFmbGFncyk7CiAJfQogCiAJc2l6ZSA9IHN0cmxlbihkYXRhKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZXYuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZXYuYwppbmRleCBkMDE5ODMwLi45NTk3YTAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGRldi5jCkBAIC02NiwyMCArNjYsMTYgQEAKIAlzZXRfYml0KERFVklDRV9TVEFURV9FTkFCTEVEX1JBRElPLCAmcnQyeDAwZGV2LT5mbGFncyk7CiAKIAkvKgotCSAqIEVuYWJsZSBSWC4KKwkgKiBFbmFibGUgcXVldWVzLgogCSAqLwotCXJ0MngwMGxpYl90b2dnbGVfcngocnQyeDAwZGV2LCBTVEFURV9SQURJT19SWF9PTik7CisJcnQyeDAwcXVldWVfc3RhcnRfcXVldWVzKHJ0MngwMGRldik7CisJcnQyeDAwbGlua19zdGFydF90dW5lcihydDJ4MDBkZXYpOwogCiAJLyoKIAkgKiBTdGFydCB3YXRjaGRvZyBtb25pdG9yaW5nLgogCSAqLwogCXJ0MngwMGxpbmtfc3RhcnRfd2F0Y2hkb2cocnQyeDAwZGV2KTsKIAotCS8qCi0JICogU3RhcnQgdGhlIFRYIHF1ZXVlcy4KLQkgKi8KLQlpZWVlODAyMTFfd2FrZV9xdWV1ZXMocnQyeDAwZGV2LT5odyk7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtODksMjAgKzg1LDE2IEBACiAJCXJldHVybjsKIAogCS8qCi0JICogU3RvcCB0aGUgVFggcXVldWVzIGluIG1hYzgwMjExLgotCSAqLwotCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyhydDJ4MDBkZXYtPmh3KTsKLQlydDJ4MDBxdWV1ZV9zdG9wX3F1ZXVlcyhydDJ4MDBkZXYpOwotCi0JLyoKIAkgKiBTdG9wIHdhdGNoZG9nIG1vbml0b3JpbmcuCiAJICovCiAJcnQyeDAwbGlua19zdG9wX3dhdGNoZG9nKHJ0MngwMGRldik7CiAKIAkvKgotCSAqIERpc2FibGUgUlguCisJICogU3RvcCBhbGwgcXVldWVzCiAJICovCi0JcnQyeDAwbGliX3RvZ2dsZV9yeChydDJ4MDBkZXYsIFNUQVRFX1JBRElPX1JYX09GRik7CisJcnQyeDAwbGlua19zdG9wX3R1bmVyKHJ0MngwMGRldik7CisJcnQyeDAwcXVldWVfc3RvcF9xdWV1ZXMocnQyeDAwZGV2KTsKKwlydDJ4MDBxdWV1ZV9mbHVzaF9xdWV1ZXMocnQyeDAwZGV2LCB0cnVlKTsKIAogCS8qCiAJICogRGlzYWJsZSByYWRpby4KQEAgLTExMyw0MSArMTA1LDExIEBACiAJcnQyeDAwbGVkc19sZWRfcmFkaW8ocnQyeDAwZGV2LCBmYWxzZSk7CiB9CiAKLXZvaWQgcnQyeDAwbGliX3RvZ2dsZV9yeChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LCBlbnVtIGRldl9zdGF0ZSBzdGF0ZSkKLXsKLQkvKgotCSAqIFdoZW4gd2UgYXJlIGRpc2FibGluZyB0aGUgUlgsIHdlIHNob3VsZCBhbHNvIHN0b3AgdGhlIGxpbmsgdHVuZXIuCi0JICovCi0JaWYgKHN0YXRlID09IFNUQVRFX1JBRElPX1JYX09GRikKLQkJcnQyeDAwbGlua19zdG9wX3R1bmVyKHJ0MngwMGRldik7Ci0KLQlydDJ4MDBkZXYtPm9wcy0+bGliLT5zZXRfZGV2aWNlX3N0YXRlKHJ0MngwMGRldiwgc3RhdGUpOwotCi0JLyoKLQkgKiBXaGVuIHdlIGFyZSBlbmFibGluZyB0aGUgUlgsIHdlIHNob3VsZCBhbHNvIHN0YXJ0IHRoZSBsaW5rIHR1bmVyLgotCSAqLwotCWlmIChzdGF0ZSA9PSBTVEFURV9SQURJT19SWF9PTikKLQkJcnQyeDAwbGlua19zdGFydF90dW5lcihydDJ4MDBkZXYpOwotfQotCiBzdGF0aWMgdm9pZCBydDJ4MDBsaWJfaW50Zl9zY2hlZHVsZWRfaXRlcih2b2lkICpkYXRhLCB1OCAqbWFjLAogCQkJCQkgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCiB7CiAJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IGRhdGE7CiAJc3RydWN0IHJ0MngwMF9pbnRmICppbnRmID0gdmlmX3RvX2ludGYodmlmKTsKLQlpbnQgZGVsYXllZF9mbGFnczsKLQotCS8qCi0JICogQ29weSBhbGwgZGF0YSB3ZSBuZWVkIGR1cmluZyB0aGlzIGFjdGlvbiB1bmRlciB0aGUgcHJvdGVjdGlvbgotCSAqIG9mIGEgc3BpbmxvY2suIE90aGVyd2lzZSByYWNlIGNvbmRpdGlvbnMgbWlnaHQgb2NjdXIgd2hpY2ggcmVzdWx0cwotCSAqIGludG8gYW4gaW52YWxpZCBjb25maWd1cmF0aW9uLgotCSAqLwotCXNwaW5fbG9jaygmaW50Zi0+bG9jayk7Ci0KLQlkZWxheWVkX2ZsYWdzID0gaW50Zi0+ZGVsYXllZF9mbGFnczsKLQlpbnRmLT5kZWxheWVkX2ZsYWdzID0gMDsKLQotCXNwaW5fdW5sb2NrKCZpbnRmLT5sb2NrKTsKIAogCS8qCiAJICogSXQgaXMgcG9zc2libGUgdGhlIHJhZGlvIHdhcyBkaXNhYmxlZCB3aGlsZSB0aGUgd29yayBoYWQgYmVlbgpAQCAtMTU4LDcgKzEyMCw3IEBACiAJaWYgKCF0ZXN0X2JpdChERVZJQ0VfU1RBVEVfRU5BQkxFRF9SQURJTywgJnJ0MngwMGRldi0+ZmxhZ3MpKQogCQlyZXR1cm47CiAKLQlpZiAoZGVsYXllZF9mbGFncyAmIERFTEFZRURfVVBEQVRFX0JFQUNPTikKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KERFTEFZRURfVVBEQVRFX0JFQUNPTiwgJmludGYtPmRlbGF5ZWRfZmxhZ3MpKQogCQlydDJ4MDBxdWV1ZV91cGRhdGVfYmVhY29uKHJ0MngwMGRldiwgdmlmLCB0cnVlKTsKIH0KIApAQCAtMjUxLDggKzIxMywxNiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwocnQyeDAwbGliX3ByZXRidHQpOwogCit2b2lkIHJ0MngwMGxpYl9kbWFzdGFydChzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5KQoreworCXNldF9iaXQoRU5UUllfT1dORVJfREVWSUNFX0RBVEEsICZlbnRyeS0+ZmxhZ3MpOworCXJ0MngwMHF1ZXVlX2luZGV4X2luYyhlbnRyeS0+cXVldWUsIFFfSU5ERVgpOworfQorRVhQT1JUX1NZTUJPTF9HUEwocnQyeDAwbGliX2RtYXN0YXJ0KTsKKwogdm9pZCBydDJ4MDBsaWJfZG1hZG9uZShzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5KQogeworCXNldF9iaXQoRU5UUllfREFUQV9TVEFUVVNfUEVORElORywgJmVudHJ5LT5mbGFncyk7CiAJY2xlYXJfYml0KEVOVFJZX09XTkVSX0RFVklDRV9EQVRBLCAmZW50cnktPmZsYWdzKTsKIAlydDJ4MDBxdWV1ZV9pbmRleF9pbmMoZW50cnktPnF1ZXVlLCBRX0lOREVYX0RNQV9ET05FKTsKIH0KQEAgLTI2NCwxMSArMjM0LDkgQEAKIAlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gZW50cnktPnF1ZXVlLT5ydDJ4MDBkZXY7CiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihlbnRyeS0+c2tiKTsKIAlzdHJ1Y3Qgc2tiX2ZyYW1lX2Rlc2MgKnNrYmRlc2MgPSBnZXRfc2tiX2ZyYW1lX2Rlc2MoZW50cnktPnNrYik7Ci0JZW51bSBkYXRhX3F1ZXVlX3FpZCBxaWQgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoZW50cnktPnNrYik7Ci0JdW5zaWduZWQgaW50IGhlYWRlcl9sZW5ndGggPSBpZWVlODAyMTFfZ2V0X2hkcmxlbl9mcm9tX3NrYihlbnRyeS0+c2tiKTsKKwl1bnNpZ25lZCBpbnQgaGVhZGVyX2xlbmd0aCwgaTsKIAl1OCByYXRlX2lkeCwgcmF0ZV9mbGFncywgcmV0cnlfcmF0ZXM7CiAJdTggc2tiZGVzY19mbGFncyA9IHNrYmRlc2MtPmZsYWdzOwotCXVuc2lnbmVkIGludCBpOwogCWJvb2wgc3VjY2VzczsKIAogCS8qCkBAIC0yODcsNiArMjU1LDExIEBACiAJc2tiZGVzYy0+ZmxhZ3MgJj0gflNLQkRFU0NfREVTQ19JTl9TS0I7CiAKIAkvKgorCSAqIERldGVybWluZSB0aGUgbGVuZ3RoIG9mIDgwMi4xMSBoZWFkZXIuCisJICovCisJaGVhZGVyX2xlbmd0aCA9IGllZWU4MDIxMV9nZXRfaGRybGVuX2Zyb21fc2tiKGVudHJ5LT5za2IpOworCisJLyoKIAkgKiBSZW1vdmUgTDIgcGFkZGluZyB3aGljaCB3YXMgYWRkZWQgZHVyaW5nCiAJICovCiAJaWYgKHRlc3RfYml0KERSSVZFUl9SRVFVSVJFX0wyUEFELCAmcnQyeDAwZGV2LT5mbGFncykpCkBAIC00MTQsNyArMzg3LDcgQEAKIAkgKiBpcyByZWVuYWJsZWQgd2hlbiB0aGUgdHhkb25lIGhhbmRsZXIgaGFzIGZpbmlzaGVkLgogCSAqLwogCWlmICghcnQyeDAwcXVldWVfdGhyZXNob2xkKGVudHJ5LT5xdWV1ZSkpCi0JCWllZWU4MDIxMV93YWtlX3F1ZXVlKHJ0MngwMGRldi0+aHcsIHFpZCk7CisJCXJ0MngwMHF1ZXVlX3VucGF1c2VfcXVldWUoZW50cnktPnF1ZXVlKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJ0MngwMGxpYl90eGRvbmUpOwogCkBAIC00ODYsNiArNDU5LDEwIEBACiAJdW5zaWduZWQgaW50IGhlYWRlcl9sZW5ndGg7CiAJaW50IHJhdGVfaWR4OwogCisJaWYgKCF0ZXN0X2JpdChERVZJQ0VfU1RBVEVfUFJFU0VOVCwgJnJ0MngwMGRldi0+ZmxhZ3MpIHx8CisJICAgICF0ZXN0X2JpdChERVZJQ0VfU1RBVEVfRU5BQkxFRF9SQURJTywgJnJ0MngwMGRldi0+ZmxhZ3MpKQorCQlnb3RvIHN1Ym1pdF9lbnRyeTsKKwogCWlmICh0ZXN0X2JpdChFTlRSWV9EQVRBX0lPX0ZBSUxFRCwgJmVudHJ5LT5mbGFncykpCiAJCWdvdG8gc3VibWl0X2VudHJ5OwogCkBAIC01NzAsOSArNTQ3LDExIEBACiAJZW50cnktPnNrYiA9IHNrYjsKIAogc3VibWl0X2VudHJ5OgotCXJ0MngwMGRldi0+b3BzLT5saWItPmNsZWFyX2VudHJ5KGVudHJ5KTsKLQlydDJ4MDBxdWV1ZV9pbmRleF9pbmMoZW50cnktPnF1ZXVlLCBRX0lOREVYKTsKKwllbnRyeS0+ZmxhZ3MgPSAwOwogCXJ0MngwMHF1ZXVlX2luZGV4X2luYyhlbnRyeS0+cXVldWUsIFFfSU5ERVhfRE9ORSk7CisJaWYgKHRlc3RfYml0KERFVklDRV9TVEFURV9QUkVTRU5ULCAmcnQyeDAwZGV2LT5mbGFncykgJiYKKwkgICAgdGVzdF9iaXQoREVWSUNFX1NUQVRFX0VOQUJMRURfUkFESU8sICZydDJ4MDBkZXYtPmZsYWdzKSkKKwkJcnQyeDAwZGV2LT5vcHMtPmxpYi0+Y2xlYXJfZW50cnkoZW50cnkpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocnQyeDAwbGliX3J4ZG9uZSk7CiAKQEAgLTY4MSw3ICs2NjAsNyBAQAogewogCWVudHJ5LT5mbGFncyA9IDA7CiAJZW50cnktPmJpdHJhdGUgPSByYXRlLT5iaXRyYXRlOwotCWVudHJ5LT5od192YWx1ZSA9aW5kZXg7CisJZW50cnktPmh3X3ZhbHVlID0gaW5kZXg7CiAJZW50cnktPmh3X3ZhbHVlX3Nob3J0ID0gaW5kZXg7CiAKIAlpZiAocmF0ZS0+ZmxhZ3MgJiBERVZfUkFURV9TSE9SVF9QUkVBTUJMRSkKQEAgLTgyMSw4ICs4MDAsNyBAQAogCS8qCiAJICogQWxsb2NhdGUgdHggc3RhdHVzIEZJRk8gZm9yIGRyaXZlciB1c2UuCiAJICovCi0JaWYgKHRlc3RfYml0KERSSVZFUl9SRVFVSVJFX1RYU1RBVFVTX0ZJRk8sICZydDJ4MDBkZXYtPmZsYWdzKSAmJgotCSAgICBydDJ4MDBkZXYtPm9wcy0+bGliLT50eHN0YXR1c190YXNrbGV0KSB7CisJaWYgKHRlc3RfYml0KERSSVZFUl9SRVFVSVJFX1RYU1RBVFVTX0ZJRk8sICZydDJ4MDBkZXYtPmZsYWdzKSkgewogCQkvKgogCQkgKiBBbGxvY2F0ZSB0eHN0YXR1cyBmaWZvIGFuZCB0YXNrbGV0LCB3ZSB1c2UgYSBzaXplIG9mIDUxMgogCQkgKiBmb3IgdGhlIGtmaWZvIHdoaWNoIGlzIGJpZyBlbm91Z2ggdG8gc3RvcmUgNTEyLzQ9MTI4IHR4CkBAIC04MzYsOSArODE0LDEwIEBACiAJCQlyZXR1cm4gc3RhdHVzOwogCiAJCS8qIHRhc2tsZXQgZm9yIHByb2Nlc3NpbmcgdGhlIHR4IHN0YXR1cyByZXBvcnRzLiAqLwotCQl0YXNrbGV0X2luaXQoJnJ0MngwMGRldi0+dHhzdGF0dXNfdGFza2xldCwKLQkJCSAgICAgcnQyeDAwZGV2LT5vcHMtPmxpYi0+dHhzdGF0dXNfdGFza2xldCwKLQkJCSAgICAgKHVuc2lnbmVkIGxvbmcpcnQyeDAwZGV2KTsKKwkJaWYgKHJ0MngwMGRldi0+b3BzLT5saWItPnR4c3RhdHVzX3Rhc2tsZXQpCisJCQl0YXNrbGV0X2luaXQoJnJ0MngwMGRldi0+dHhzdGF0dXNfdGFza2xldCwKKwkJCQkgICAgIHJ0MngwMGRldi0+b3BzLT5saWItPnR4c3RhdHVzX3Rhc2tsZXQsCisJCQkJICAgICAodW5zaWduZWQgbG9uZylydDJ4MDBkZXYpOwogCiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwaHQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBodC5jCmluZGV4IGM2MzdiY2EuLmI3YWQ0NmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBodC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBodC5jCkBAIC00MCw4ICs0MCw2IEBACiAJaWYgKHR4X2luZm8tPmNvbnRyb2wuc3RhKQogCQl0eGRlc2MtPm1wZHVfZGVuc2l0eSA9CiAJCSAgICB0eF9pbmZvLT5jb250cm9sLnN0YS0+aHRfY2FwLmFtcGR1X2RlbnNpdHk7Ci0JZWxzZQotCQl0eGRlc2MtPm1wZHVfZGVuc2l0eSA9IDA7CiAKIAl0eGRlc2MtPmJhX3NpemUgPSA3OwkvKiBGSVhNRTogV2hhdCB2YWx1ZSBpcyBuZWVkZWQ/ICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBsaWIuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBsaWIuaAppbmRleCA2MTlkYTIzLi5hMTA1YzUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbGliLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGxpYi5oCkBAIC01Nyw3ICs1Nyw3IEBACiB9CiAKICNkZWZpbmUgUkFURV9NQ1MoX19tb2RlLCBfX21jcykgXAotCSggKCgoX19tb2RlKSAmIDB4MDBmZikgPDwgOCkgfCAoKF9fbWNzKSAmIDB4MDBmZikgKQorCSgoKChfX21vZGUpICYgMHgwMGZmKSA8PCA4KSB8ICgoX19tY3MpICYgMHgwMGZmKSkKIAogc3RhdGljIGlubGluZSBpbnQgcnQyeDAwX2dldF9yYXRlX21jcyhjb25zdCB1MTYgbWNzX3ZhbHVlKQogewpAQCAtNjksNyArNjksNiBAQAogICovCiBpbnQgcnQyeDAwbGliX2VuYWJsZV9yYWRpbyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KTsKIHZvaWQgcnQyeDAwbGliX2Rpc2FibGVfcmFkaW8oc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldik7Ci12b2lkIHJ0MngwMGxpYl90b2dnbGVfcngoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwgZW51bSBkZXZfc3RhdGUgc3RhdGUpOwogCiAvKgogICogSW5pdGlhbGl6YXRpb24gaGFuZGxlcnMuCkBAIC0xNzksMTUgKzE3OCw2IEBACiB2b2lkIHJ0MngwMHF1ZXVlX2luZGV4X2luYyhzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWUsIGVudW0gcXVldWVfaW5kZXggaW5kZXgpOwogCiAvKioKLSAqIHJ0MngwMHF1ZXVlX3N0b3BfcXVldWVzIC0gSGFsdCBhbGwgZGF0YSBxdWV1ZXMKLSAqIEBydDJ4MDBkZXY6IFBvaW50ZXIgdG8gJnN0cnVjdCBydDJ4MDBfZGV2LgotICoKLSAqIFRoaXMgZnVuY3Rpb24gd2lsbCBsb29wIHRocm91Z2ggYWxsIGF2YWlsYWJsZSBxdWV1ZXMgdG8gc3RvcAotICogYW55IHBlbmRpbmcgb3V0Z29pbmcgZnJhbWVzLgotICovCi12b2lkIHJ0MngwMHF1ZXVlX3N0b3BfcXVldWVzKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpOwotCi0vKioKICAqIHJ0MngwMHF1ZXVlX2luaXRfcXVldWVzIC0gSW5pdGlhbGl6ZSBhbGwgZGF0YSBxdWV1ZXMKICAqIEBydDJ4MDBkZXY6IFBvaW50ZXIgdG8gJnN0cnVjdCBydDJ4MDBfZGV2LgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBsaW5rLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbGluay5jCmluZGV4IGI5NzFkODcuLmJmZGE2MGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBsaW5rLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGxpbmsuYwpAQCAtNjcsNyArNjcsNyBAQAogCSAgICAoX19hdmcpLmF2Z193ZWlnaHQgID8gXAogCQkoKCgoX19hdmcpLmF2Z193ZWlnaHQgKiAoKEFWR19TQU1QTEVTKSAtIDEpKSArIFwKIAkJICAoKF9fdmFsKSAqIChBVkdfRkFDVE9SKSkpIC8gXAotCQkgKEFWR19TQU1QTEVTKSApIDogXAorCQkgKEFWR19TQU1QTEVTKSkgOiBcCiAJCSgoX192YWwpICogKEFWR19GQUNUT1IpKTsgXAogCV9fbmV3LmF2ZyA9IF9fbmV3LmF2Z193ZWlnaHQgLyAoQVZHX0ZBQ1RPUik7IFwKIAlfX25ldzsgXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMG1hYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMG1hYy5jCmluZGV4IGMzYzIwNmEuLjY1ODU0MmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBtYWMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbWFjLmMKQEAgLTEwNCw3ICsxMDQsNyBAQAogCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBody0+cHJpdjsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiAJZW51bSBkYXRhX3F1ZXVlX3FpZCBxaWQgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTsKLQlzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWU7CisJc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlID0gTlVMTDsKIAogCS8qCiAJICogTWFjODAyMTEgbWlnaHQgYmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdoaWxlIHdlIGFyZSB0cnlpbmcKQEAgLTE1Myw3ICsxNTMsNyBAQAogCQlnb3RvIGV4aXRfZmFpbDsKIAogCWlmIChydDJ4MDBxdWV1ZV90aHJlc2hvbGQocXVldWUpKQotCQlpZWVlODAyMTFfc3RvcF9xdWV1ZShydDJ4MDBkZXYtPmh3LCBxaWQpOworCQlydDJ4MDBxdWV1ZV9wYXVzZV9xdWV1ZShxdWV1ZSk7CiAKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogCkBAIC0yNjgsNyArMjY4LDYgQEAKIAllbHNlCiAJCXJ0MngwMGRldi0+aW50Zl9zdGFfY291bnQrKzsKIAotCXNwaW5fbG9ja19pbml0KCZpbnRmLT5sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmaW50Zi0+c2VxbG9jayk7CiAJbXV0ZXhfaW5pdCgmaW50Zi0+YmVhY29uX3NrYl9tdXRleCk7CiAJaW50Zi0+YmVhY29uID0gZW50cnk7CkBAIC0yODIsMTUgKzI4MSw4IEBACiAJICogU1RBIGludGVyZmFjZXMgYXQgdGhpcyB0aW1lLCBzaW5jZSB0aGlzIGNhbiBjYXVzZQogCSAqIGludmFsaWQgYmVoYXZpb3IgaW4gdGhlIGRldmljZS4KIAkgKi8KLQltZW1jcHkoJmludGYtPm1hYywgdmlmLT5hZGRyLCBFVEhfQUxFTik7Ci0JaWYgKHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkgewotCQltZW1jcHkoJmludGYtPmJzc2lkLCB2aWYtPmFkZHIsIEVUSF9BTEVOKTsKLQkJcnQyeDAwbGliX2NvbmZpZ19pbnRmKHJ0MngwMGRldiwgaW50ZiwgdmlmLT50eXBlLAotCQkJCSAgICAgIGludGYtPm1hYywgaW50Zi0+YnNzaWQpOwotCX0gZWxzZSB7Ci0JCXJ0MngwMGxpYl9jb25maWdfaW50ZihydDJ4MDBkZXYsIGludGYsIHZpZi0+dHlwZSwKLQkJCQkgICAgICBpbnRmLT5tYWMsIE5VTEwpOwotCX0KKwlydDJ4MDBsaWJfY29uZmlnX2ludGYocnQyeDAwZGV2LCBpbnRmLCB2aWYtPnR5cGUsCisJCQkgICAgICB2aWYtPmFkZHIsIE5VTEwpOwogCiAJLyoKIAkgKiBTb21lIGZpbHRlcnMgZGVwZW5kIG9uIHRoZSBjdXJyZW50IHdvcmtpbmcgbW9kZS4gV2UgY2FuIGZvcmNlCkBAIC0zNTgsNyArMzUwLDcgQEAKIAkgKiBpZiBmb3IgYW55IHJlYXNvbiB0aGUgbGluayB0dW5lciBtdXN0IGJlIHJlc2V0LCB0aGlzIHdpbGwgYmUKIAkgKiBoYW5kbGVkIGJ5IHJ0MngwMGxpYl9jb25maWcoKS4KIAkgKi8KLQlydDJ4MDBsaWJfdG9nZ2xlX3J4KHJ0MngwMGRldiwgU1RBVEVfUkFESU9fUlhfT0ZGX0xJTkspOworCXJ0MngwMHF1ZXVlX3N0b3BfcXVldWUocnQyeDAwZGV2LT5yeCk7CiAKIAkvKgogCSAqIFdoZW4gd2UndmUganVzdCB0dXJuZWQgb24gdGhlIHJhZGlvLCB3ZSB3YW50IHRvIHJlcHJvZ3JhbQpAQCAtMzc2LDcgKzM2OCw3IEBACiAJcnQyeDAwbGliX2NvbmZpZ19hbnRlbm5hKHJ0MngwMGRldiwgcnQyeDAwZGV2LT5kZWZhdWx0X2FudCk7CiAKIAkvKiBUdXJuIFJYIGJhY2sgb24gKi8KLQlydDJ4MDBsaWJfdG9nZ2xlX3J4KHJ0MngwMGRldiwgU1RBVEVfUkFESU9fUlhfT05fTElOSyk7CisJcnQyeDAwcXVldWVfc3RhcnRfcXVldWUocnQyeDAwZGV2LT5yeCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQ1MSw5ICs0NDMsNyBAQAogCSAgICB2aWYtPnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfV0RTKQogCQlyZXR1cm47CiAKLQlzcGluX2xvY2soJmludGYtPmxvY2spOwotCWludGYtPmRlbGF5ZWRfZmxhZ3MgfD0gREVMQVlFRF9VUERBVEVfQkVBQ09OOwotCXNwaW5fdW5sb2NrKCZpbnRmLT5sb2NrKTsKKwlzZXRfYml0KERFTEFZRURfVVBEQVRFX0JFQUNPTiwgJmludGYtPmRlbGF5ZWRfZmxhZ3MpOwogfQogCiBpbnQgcnQyeDAwbWFjX3NldF90aW0oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCkBAIC00NzgsMTcgKzQ2OCwxNyBAQAogc3RhdGljIHZvaWQgbWVtY3B5X3RraXAoc3RydWN0IHJ0MngwMGxpYl9jcnlwdG8gKmNyeXB0bywgdTggKmtleSwgdTgga2V5X2xlbikKIHsKIAlpZiAoa2V5X2xlbiA+IE5MODAyMTFfVEtJUF9EQVRBX09GRlNFVF9FTkNSX0tFWSkKLQkJbWVtY3B5KCZjcnlwdG8tPmtleSwKKwkJbWVtY3B5KGNyeXB0by0+a2V5LAogCQkgICAgICAgJmtleVtOTDgwMjExX1RLSVBfREFUQV9PRkZTRVRfRU5DUl9LRVldLAogCQkgICAgICAgc2l6ZW9mKGNyeXB0by0+a2V5KSk7CiAKIAlpZiAoa2V5X2xlbiA+IE5MODAyMTFfVEtJUF9EQVRBX09GRlNFVF9UWF9NSUNfS0VZKQotCQltZW1jcHkoJmNyeXB0by0+dHhfbWljLAorCQltZW1jcHkoY3J5cHRvLT50eF9taWMsCiAJCSAgICAgICAma2V5W05MODAyMTFfVEtJUF9EQVRBX09GRlNFVF9UWF9NSUNfS0VZXSwKIAkJICAgICAgIHNpemVvZihjcnlwdG8tPnR4X21pYykpOwogCiAJaWYgKGtleV9sZW4gPiBOTDgwMjExX1RLSVBfREFUQV9PRkZTRVRfUlhfTUlDX0tFWSkKLQkJbWVtY3B5KCZjcnlwdG8tPnJ4X21pYywKKwkJbWVtY3B5KGNyeXB0by0+cnhfbWljLAogCQkgICAgICAgJmtleVtOTDgwMjExX1RLSVBfREFUQV9PRkZTRVRfUlhfTUlDX0tFWV0sCiAJCSAgICAgICBzaXplb2YoY3J5cHRvLT5yeF9taWMpKTsKIH0KQEAgLTQ5OCw3ICs0ODgsNiBAQAogCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXkpCiB7CiAJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IGh3LT5wcml2OwotCXN0cnVjdCBydDJ4MDBfaW50ZiAqaW50ZiA9IHZpZl90b19pbnRmKHZpZik7CiAJaW50ICgqc2V0X2tleSkgKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCiAJCQlzdHJ1Y3QgcnQyeDAwbGliX2NyeXB0byAqY3J5cHRvLAogCQkJc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5KTsKQEAgLTUyMiw3ICs1MTEsNyBAQAogCWlmIChydDJ4MDBkZXYtPmludGZfc3RhX2NvdW50KQogCQljcnlwdG8uYnNzaWR4ID0gMDsKIAllbHNlCi0JCWNyeXB0by5ic3NpZHggPSBpbnRmLT5tYWNbNV0gJiAocnQyeDAwZGV2LT5vcHMtPm1heF9hcF9pbnRmIC0gMSk7CisJCWNyeXB0by5ic3NpZHggPSB2aWYtPmFkZHJbNV0gJiAocnQyeDAwZGV2LT5vcHMtPm1heF9hcF9pbnRmIC0gMSk7CiAKIAljcnlwdG8uY2lwaGVyID0gcnQyeDAwY3J5cHRvX2tleV90b19jaXBoZXIoa2V5KTsKIAlpZiAoY3J5cHRvLmNpcGhlciA9PSBDSVBIRVJfTk9ORSkKQEAgLTU0MCw3ICs1MjksNyBAQAogCWlmIChjcnlwdG8uY2lwaGVyID09IENJUEhFUl9US0lQKQogCQltZW1jcHlfdGtpcCgmY3J5cHRvLCAma2V5LT5rZXlbMF0sIGtleS0+a2V5bGVuKTsKIAllbHNlCi0JCW1lbWNweSgmY3J5cHRvLmtleSwgJmtleS0+a2V5WzBdLCBrZXktPmtleWxlbik7CisJCW1lbWNweShjcnlwdG8ua2V5LCAma2V5LT5rZXlbMF0sIGtleS0+a2V5bGVuKTsKIAkvKgogCSAqIEVhY2ggQlNTIGhhcyBhIG1heGltdW0gb2YgNCBzaGFyZWQga2V5cy4KIAkgKiBTaGFyZWQga2V5IGluZGV4IHZhbHVlczoKQEAgLTYyMCwyMiArNjA5LDggQEAKIAlpZiAoIXRlc3RfYml0KERFVklDRV9TVEFURV9QUkVTRU5ULCAmcnQyeDAwZGV2LT5mbGFncykpCiAJCXJldHVybjsKIAotCXNwaW5fbG9jaygmaW50Zi0+bG9jayk7Ci0KIAkvKgotCSAqIGNvbmYtPmJzc2lkIGNhbiBiZSBOVUxMIGlmIGNvbWluZyBmcm9tIHRoZSBpbnRlcm5hbAotCSAqIGJlYWNvbiB1cGRhdGUgcm91dGluZS4KLQkgKi8KLQlpZiAoY2hhbmdlcyAmIEJTU19DSEFOR0VEX0JTU0lEKQotCQltZW1jcHkoJmludGYtPmJzc2lkLCBic3NfY29uZi0+YnNzaWQsIEVUSF9BTEVOKTsKLQotCXNwaW5fdW5sb2NrKCZpbnRmLT5sb2NrKTsKLQotCS8qCi0JICogQ2FsbCBydDJ4MDBfY29uZmlnX2ludGYoKSBvdXRzaWRlIG9mIHRoZSBzcGlubG9jayBjb250ZXh0IHNpbmNlCi0JICogdGhlIGNhbGwgd2lsbCBzbGVlcCBmb3IgVVNCIGRyaXZlcnMuIEJ5IHVzaW5nIHRoZSBpZWVlODAyMTFfaWZfY29uZgotCSAqIHZhbHVlcyBhcyBhcmd1bWVudHMgd2UgbWFrZSBrZWVwIGFjY2VzcyB0byBydDJ4MDBfaW50ZiB0aHJlYWQgc2FmZQotCSAqIGV2ZW4gd2l0aG91dCB0aGUgbG9jay4KKwkgKiBVcGRhdGUgdGhlIEJTU0lELgogCSAqLwogCWlmIChjaGFuZ2VzICYgQlNTX0NIQU5HRURfQlNTSUQpCiAJCXJ0MngwMGxpYl9jb25maWdfaW50ZihydDJ4MDBkZXYsIGludGYsIHZpZi0+dHlwZSwgTlVMTCwKQEAgLTcxOSwzICs2OTQsMTMgQEAKIAl3aXBoeV9yZmtpbGxfc2V0X2h3X3N0YXRlKGh3LT53aXBoeSwgIWFjdGl2ZSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChydDJ4MDBtYWNfcmZraWxsX3BvbGwpOworCit2b2lkIHJ0MngwMG1hY19mbHVzaChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBkcm9wKQoreworCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWU7CisKKwl0eF9xdWV1ZV9mb3JfZWFjaChydDJ4MDBkZXYsIHF1ZXVlKQorCQlydDJ4MDBxdWV1ZV9mbHVzaF9xdWV1ZShxdWV1ZSwgZHJvcCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChydDJ4MDBtYWNfZmx1c2gpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHBjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHBjaS5jCmluZGV4IDI0NDlkNzguLjczNjMxYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBwY2kuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcGNpLmMKQEAgLTgyLDYgKzgyLDEzIEBACiAJCXNrYmRlc2MtPmRlc2NfbGVuID0gZW50cnktPnF1ZXVlLT5kZXNjX3NpemU7CiAKIAkJLyoKKwkJICogRE1BIGlzIGFscmVhZHkgZG9uZSwgbm90aWZ5IHJ0MngwMGxpYiB0aGF0CisJCSAqIGl0IGZpbmlzaGVkIHN1Y2Nlc3NmdWxseS4KKwkJICovCisJCXJ0MngwMGxpYl9kbWFzdGFydChlbnRyeSk7CisJCXJ0MngwMGxpYl9kbWFkb25lKGVudHJ5KTsKKworCQkvKgogCQkgKiBTZW5kIHRoZSBmcmFtZSB0byBydDJ4MDBsaWIgZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZy4KIAkJICovCiAJCXJ0MngwMGxpYl9yeGRvbmUoZW50cnkpOwpAQCAtMTA1LDcgKzExMiw3IEBACiAJICovCiAJYWRkciA9IGRtYV9hbGxvY19jb2hlcmVudChydDJ4MDBkZXYtPmRldiwKIAkJCQkgIHF1ZXVlLT5saW1pdCAqIHF1ZXVlLT5kZXNjX3NpemUsCi0JCQkJICAmZG1hLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CisJCQkJICAmZG1hLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWFkZHIpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC0yNzksNyArMjg2LDcgQEAKIAlydDJ4MDBkZXYtPmlycSA9IHBjaV9kZXYtPmlycTsKIAlydDJ4MDBkZXYtPm5hbWUgPSBwY2lfbmFtZShwY2lfZGV2KTsKIAotCWlmIChwY2lfZGV2LT5pc19wY2llKQorCWlmIChwY2lfaXNfcGNpZShwY2lfZGV2KSkKIAkJcnQyeDAwX3NldF9jaGlwX2ludGYocnQyeDAwZGV2LCBSVDJYMDBfQ0hJUF9JTlRGX1BDSUUpOwogCWVsc2UKIAkJcnQyeDAwX3NldF9jaGlwX2ludGYocnQyeDAwZGV2LCBSVDJYMDBfQ0hJUF9JTlRGX1BDSSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcGNpLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcGNpLmgKaW5kZXggYjg1NGQ2Mi4uNzQ2Y2U4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHBjaS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBwY2kuaApAQCAtNjQsNyArNjQsNyBAQAogCQkJCQkJIGNvbnN0IHZvaWQgKnZhbHVlLAogCQkJCQkJIGNvbnN0IHUzMiBsZW5ndGgpCiB7Ci0JbWVtY3B5X3RvaW8ocnQyeDAwZGV2LT5jc3IuYmFzZSArIG9mZnNldCwgdmFsdWUsIGxlbmd0aCk7CisJX19pb3dyaXRlMzJfY29weShydDJ4MDBkZXYtPmNzci5iYXNlICsgb2Zmc2V0LCB2YWx1ZSwgbGVuZ3RoID4+IDIpOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBxdWV1ZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHF1ZXVlLmMKaW5kZXggZTM2MGQyOC4uY2E4MmIzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHF1ZXVlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHF1ZXVlLmMKQEAgLTE5OSw3ICsxOTksMTIgQEAKIAogdm9pZCBydDJ4MDBxdWV1ZV9yZW1vdmVfbDJwYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhlYWRlcl9sZW5ndGgpCiB7Ci0JdW5zaWduZWQgaW50IGwycGFkID0gTDJQQURfU0laRShoZWFkZXJfbGVuZ3RoKTsKKwkvKgorCSAqIEwyIHBhZGRpbmcgaXMgb25seSBwcmVzZW50IGlmIHRoZSBza2IgY29udGFpbnMgbW9yZSB0aGFuIGp1c3QgdGhlCisJICogSUVFRSA4MDIuMTEgaGVhZGVyLgorCSAqLworCXVuc2lnbmVkIGludCBsMnBhZCA9IChza2ItPmxlbiA+IGhlYWRlcl9sZW5ndGgpID8KKwkJCQlMMlBBRF9TSVpFKGhlYWRlcl9sZW5ndGgpIDogMDsKIAogCWlmICghbDJwYWQpCiAJCXJldHVybjsKQEAgLTMxMSwxNCArMzE2LDYgQEAKIAltZW1zZXQodHhkZXNjLCAwLCBzaXplb2YoKnR4ZGVzYykpOwogCiAJLyoKLQkgKiBJbml0aWFsaXplIGluZm9ybWF0aW9uIGZyb20gcXVldWUKLQkgKi8KLQl0eGRlc2MtPnFpZCA9IGVudHJ5LT5xdWV1ZS0+cWlkOwotCXR4ZGVzYy0+Y3dfbWluID0gZW50cnktPnF1ZXVlLT5jd19taW47Ci0JdHhkZXNjLT5jd19tYXggPSBlbnRyeS0+cXVldWUtPmN3X21heDsKLQl0eGRlc2MtPmFpZnMgPSBlbnRyeS0+cXVldWUtPmFpZnM7Ci0KLQkvKgogCSAqIEhlYWRlciBhbmQgZnJhbWUgaW5mb3JtYXRpb24uCiAJICovCiAJdHhkZXNjLT5sZW5ndGggPSBlbnRyeS0+c2tiLT5sZW47CkBAIC00NjAsMTIgKzQ1Nyw5IEBACiAJcnQyeDAwZGVidWdfZHVtcF9mcmFtZShxdWV1ZS0+cnQyeDAwZGV2LCBEVU1QX0ZSQU1FX1RYLCBlbnRyeS0+c2tiKTsKIH0KIAotc3RhdGljIHZvaWQgcnQyeDAwcXVldWVfa2lja190eF9xdWV1ZShzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5LAorc3RhdGljIHZvaWQgcnQyeDAwcXVldWVfa2lja190eF9xdWV1ZShzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWUsCiAJCQkJICAgICAgc3RydWN0IHR4ZW50cnlfZGVzYyAqdHhkZXNjKQogewotCXN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZSA9IGVudHJ5LT5xdWV1ZTsKLQlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gcXVldWUtPnJ0MngwMGRldjsKLQogCS8qCiAJICogQ2hlY2sgaWYgd2UgbmVlZCB0byBraWNrIHRoZSBxdWV1ZSwgdGhlcmUgYXJlIGhvd2V2ZXIgYSBmZXcgcnVsZXMKIAkgKgkxKSBEb24ndCBraWNrIHVubGVzcyB0aGlzIGlzIHRoZSBsYXN0IGluIGZyYW1lIGluIGEgYnVyc3QuCkBAIC00NzcsNyArNDcxLDcgQEAKIAkgKi8KIAlpZiAocnQyeDAwcXVldWVfdGhyZXNob2xkKHF1ZXVlKSB8fAogCSAgICAhdGVzdF9iaXQoRU5UUllfVFhEX0JVUlNULCAmdHhkZXNjLT5mbGFncykpCi0JCXJ0MngwMGRldi0+b3BzLT5saWItPmtpY2tfdHhfcXVldWUocXVldWUpOworCQlxdWV1ZS0+cnQyeDAwZGV2LT5vcHMtPmxpYi0+a2lja19xdWV1ZShxdWV1ZSk7CiB9CiAKIGludCBydDJ4MDBxdWV1ZV93cml0ZV90eF9mcmFtZShzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWUsIHN0cnVjdCBza19idWZmICpza2IsCkBAIC01NjcsNyArNTYxLDcgQEAKIAogCXJ0MngwMHF1ZXVlX2luZGV4X2luYyhxdWV1ZSwgUV9JTkRFWCk7CiAJcnQyeDAwcXVldWVfd3JpdGVfdHhfZGVzY3JpcHRvcihlbnRyeSwgJnR4ZGVzYyk7Ci0JcnQyeDAwcXVldWVfa2lja190eF9xdWV1ZShlbnRyeSwgJnR4ZGVzYyk7CisJcnQyeDAwcXVldWVfa2lja190eF9xdWV1ZShxdWV1ZSwgJnR4ZGVzYyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTU5MSw3ICs1ODUsNyBAQAogCXJ0MngwMHF1ZXVlX2ZyZWVfc2tiKGludGYtPmJlYWNvbik7CiAKIAlpZiAoIWVuYWJsZV9iZWFjb24pIHsKLQkJcnQyeDAwZGV2LT5vcHMtPmxpYi0+a2lsbF90eF9xdWV1ZShpbnRmLT5iZWFjb24tPnF1ZXVlKTsKKwkJcnQyeDAwcXVldWVfc3RvcF9xdWV1ZShpbnRmLT5iZWFjb24tPnF1ZXVlKTsKIAkJbXV0ZXhfdW5sb2NrKCZpbnRmLT5iZWFjb25fc2tiX211dGV4KTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtNjQ5LDEwICs2NDMsMTAgQEAKIAkgKiBpdCBzaG91bGQgbm90IGJlIGtpY2tlZCBkdXJpbmcgdGhpcyBydW4sIHNpbmNlIGl0CiAJICogaXMgcGFydCBvZiBhbm90aGVyIFRYIG9wZXJhdGlvbi4KIAkgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcXVldWUtPmxvY2ssIGlycWZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcXVldWUtPmluZGV4X2xvY2ssIGlycWZsYWdzKTsKIAlpbmRleF9zdGFydCA9IHF1ZXVlLT5pbmRleFtzdGFydF07CiAJaW5kZXhfZW5kID0gcXVldWUtPmluZGV4W2VuZF07Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcXVldWUtPmxvY2ssIGlycWZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxdWV1ZS0+aW5kZXhfbG9jaywgaXJxZmxhZ3MpOwogCiAJLyoKIAkgKiBTdGFydCBmcm9tIHRoZSBUWCBkb25lIHBvaW50ZXIsIHRoaXMgZ3VhcmVudGVlcyB0aGF0IHdlIHdpbGwKQEAgLTcwNiwxMSArNzAwLDExIEBACiAJCXJldHVybiBOVUxMOwogCX0KIAotCXNwaW5fbG9ja19pcnFzYXZlKCZxdWV1ZS0+bG9jaywgaXJxZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZxdWV1ZS0+aW5kZXhfbG9jaywgaXJxZmxhZ3MpOwogCiAJZW50cnkgPSAmcXVldWUtPmVudHJpZXNbcXVldWUtPmluZGV4W2luZGV4XV07CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxdWV1ZS0+bG9jaywgaXJxZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnF1ZXVlLT5pbmRleF9sb2NrLCBpcnFmbGFncyk7CiAKIAlyZXR1cm4gZW50cnk7CiB9CkBAIC03MjYsNyArNzIwLDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCXNwaW5fbG9ja19pcnFzYXZlKCZxdWV1ZS0+bG9jaywgaXJxZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZxdWV1ZS0+aW5kZXhfbG9jaywgaXJxZmxhZ3MpOwogCiAJcXVldWUtPmluZGV4W2luZGV4XSsrOwogCWlmIChxdWV1ZS0+aW5kZXhbaW5kZXhdID49IHF1ZXVlLT5saW1pdCkKQEAgLTc0MSwxNSArNzM1LDIxOSBAQAogCQlxdWV1ZS0+Y291bnQrKzsKIAl9CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxdWV1ZS0+bG9jaywgaXJxZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnF1ZXVlLT5pbmRleF9sb2NrLCBpcnFmbGFncyk7CiB9CiAKK3ZvaWQgcnQyeDAwcXVldWVfcGF1c2VfcXVldWUoc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlKQoreworCWlmICghdGVzdF9iaXQoREVWSUNFX1NUQVRFX1BSRVNFTlQsICZxdWV1ZS0+cnQyeDAwZGV2LT5mbGFncykgfHwKKwkgICAgIXRlc3RfYml0KFFVRVVFX1NUQVJURUQsICZxdWV1ZS0+ZmxhZ3MpIHx8CisJICAgIHRlc3RfYW5kX3NldF9iaXQoUVVFVUVfUEFVU0VELCAmcXVldWUtPmZsYWdzKSkKKwkJcmV0dXJuOworCisJc3dpdGNoIChxdWV1ZS0+cWlkKSB7CisJY2FzZSBRSURfQUNfVk86CisJY2FzZSBRSURfQUNfVkk6CisJY2FzZSBRSURfQUNfQkU6CisJY2FzZSBRSURfQUNfQks6CisJCS8qCisJCSAqIEZvciBUWCBxdWV1ZXMsIHdlIGhhdmUgdG8gZGlzYWJsZSB0aGUgcXVldWUKKwkJICogaW5zaWRlIG1hYzgwMjExLgorCQkgKi8KKwkJaWVlZTgwMjExX3N0b3BfcXVldWUocXVldWUtPnJ0MngwMGRldi0+aHcsIHF1ZXVlLT5xaWQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CitFWFBPUlRfU1lNQk9MX0dQTChydDJ4MDBxdWV1ZV9wYXVzZV9xdWV1ZSk7CisKK3ZvaWQgcnQyeDAwcXVldWVfdW5wYXVzZV9xdWV1ZShzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWUpCit7CisJaWYgKCF0ZXN0X2JpdChERVZJQ0VfU1RBVEVfUFJFU0VOVCwgJnF1ZXVlLT5ydDJ4MDBkZXYtPmZsYWdzKSB8fAorCSAgICAhdGVzdF9iaXQoUVVFVUVfU1RBUlRFRCwgJnF1ZXVlLT5mbGFncykgfHwKKwkgICAgIXRlc3RfYW5kX2NsZWFyX2JpdChRVUVVRV9QQVVTRUQsICZxdWV1ZS0+ZmxhZ3MpKQorCQlyZXR1cm47CisKKwlzd2l0Y2ggKHF1ZXVlLT5xaWQpIHsKKwljYXNlIFFJRF9BQ19WTzoKKwljYXNlIFFJRF9BQ19WSToKKwljYXNlIFFJRF9BQ19CRToKKwljYXNlIFFJRF9BQ19CSzoKKwkJLyoKKwkJICogRm9yIFRYIHF1ZXVlcywgd2UgaGF2ZSB0byBlbmFibGUgdGhlIHF1ZXVlCisJCSAqIGluc2lkZSBtYWM4MDIxMS4KKwkJICovCisJCWllZWU4MDIxMV93YWtlX3F1ZXVlKHF1ZXVlLT5ydDJ4MDBkZXYtPmh3LCBxdWV1ZS0+cWlkKTsKKwkJYnJlYWs7CisJY2FzZSBRSURfUlg6CisJCS8qCisJCSAqIEZvciBSWCB3ZSBuZWVkIHRvIGtpY2sgdGhlIHF1ZXVlIG5vdyBpbiBvcmRlciB0bworCQkgKiByZWNlaXZlIGZyYW1lcy4KKwkJICovCisJCXF1ZXVlLT5ydDJ4MDBkZXYtPm9wcy0+bGliLT5raWNrX3F1ZXVlKHF1ZXVlKTsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CitFWFBPUlRfU1lNQk9MX0dQTChydDJ4MDBxdWV1ZV91bnBhdXNlX3F1ZXVlKTsKKwordm9pZCBydDJ4MDBxdWV1ZV9zdGFydF9xdWV1ZShzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWUpCit7CisJbXV0ZXhfbG9jaygmcXVldWUtPnN0YXR1c19sb2NrKTsKKworCWlmICghdGVzdF9iaXQoREVWSUNFX1NUQVRFX1BSRVNFTlQsICZxdWV1ZS0+cnQyeDAwZGV2LT5mbGFncykgfHwKKwkgICAgdGVzdF9hbmRfc2V0X2JpdChRVUVVRV9TVEFSVEVELCAmcXVldWUtPmZsYWdzKSkgeworCQltdXRleF91bmxvY2soJnF1ZXVlLT5zdGF0dXNfbG9jayk7CisJCXJldHVybjsKKwl9CisKKwlzZXRfYml0KFFVRVVFX1BBVVNFRCwgJnF1ZXVlLT5mbGFncyk7CisKKwlxdWV1ZS0+cnQyeDAwZGV2LT5vcHMtPmxpYi0+c3RhcnRfcXVldWUocXVldWUpOworCisJcnQyeDAwcXVldWVfdW5wYXVzZV9xdWV1ZShxdWV1ZSk7CisKKwltdXRleF91bmxvY2soJnF1ZXVlLT5zdGF0dXNfbG9jayk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChydDJ4MDBxdWV1ZV9zdGFydF9xdWV1ZSk7CisKK3ZvaWQgcnQyeDAwcXVldWVfc3RvcF9xdWV1ZShzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWUpCit7CisJbXV0ZXhfbG9jaygmcXVldWUtPnN0YXR1c19sb2NrKTsKKworCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KFFVRVVFX1NUQVJURUQsICZxdWV1ZS0+ZmxhZ3MpKSB7CisJCW11dGV4X3VubG9jaygmcXVldWUtPnN0YXR1c19sb2NrKTsKKwkJcmV0dXJuOworCX0KKworCXJ0MngwMHF1ZXVlX3BhdXNlX3F1ZXVlKHF1ZXVlKTsKKworCXF1ZXVlLT5ydDJ4MDBkZXYtPm9wcy0+bGliLT5zdG9wX3F1ZXVlKHF1ZXVlKTsKKworCW11dGV4X3VubG9jaygmcXVldWUtPnN0YXR1c19sb2NrKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJ0MngwMHF1ZXVlX3N0b3BfcXVldWUpOworCit2b2lkIHJ0MngwMHF1ZXVlX2ZsdXNoX3F1ZXVlKHN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZSwgYm9vbCBkcm9wKQoreworCXVuc2lnbmVkIGludCBpOworCWJvb2wgc3RhcnRlZDsKKwlib29sIHR4X3F1ZXVlID0KKwkJKHF1ZXVlLT5xaWQgPT0gUUlEX0FDX1ZPKSB8fAorCQkocXVldWUtPnFpZCA9PSBRSURfQUNfVkkpIHx8CisJCShxdWV1ZS0+cWlkID09IFFJRF9BQ19CRSkgfHwKKwkJKHF1ZXVlLT5xaWQgPT0gUUlEX0FDX0JLKTsKKworCW11dGV4X2xvY2soJnF1ZXVlLT5zdGF0dXNfbG9jayk7CisKKwkvKgorCSAqIElmIHRoZSBxdWV1ZSBoYXMgYmVlbiBzdGFydGVkLCB3ZSBtdXN0IHN0b3AgaXQgdGVtcG9yYXJpbHkKKwkgKiB0byBwcmV2ZW50IGFueSBuZXcgZnJhbWVzIHRvIGJlIHF1ZXVlZCBvbiB0aGUgZGV2aWNlLiBJZgorCSAqIHdlIGFyZSBub3QgZHJvcHBpbmcgdGhlIHBlbmRpbmcgZnJhbWVzLCB0aGUgcXVldWUgbXVzdAorCSAqIG9ubHkgYmUgc3RvcHBlZCBpbiB0aGUgc29mdHdhcmUgYW5kIG5vdCB0aGUgaGFyZHdhcmUsCisJICogb3RoZXJ3aXNlIHRoZSBxdWV1ZSB3aWxsIG5ldmVyIGJlY29tZSBlbXB0eSBvbiBpdHMgb3duLgorCSAqLworCXN0YXJ0ZWQgPSB0ZXN0X2JpdChRVUVVRV9TVEFSVEVELCAmcXVldWUtPmZsYWdzKTsKKwlpZiAoc3RhcnRlZCkgeworCQkvKgorCQkgKiBQYXVzZSB0aGUgcXVldWUKKwkJICovCisJCXJ0MngwMHF1ZXVlX3BhdXNlX3F1ZXVlKHF1ZXVlKTsKKworCQkvKgorCQkgKiBJZiB3ZSBhcmUgbm90IHN1cHBvc2VkIHRvIGRyb3AgYW55IHBlbmRpbmcKKwkJICogZnJhbWVzLCB0aGlzIG1lYW5zIHdlIG11c3QgZm9yY2UgYSBzdGFydCAoPWtpY2spCisJCSAqIHRvIHRoZSBxdWV1ZSB0byBtYWtlIHN1cmUgdGhlIGhhcmR3YXJlIHdpbGwKKwkJICogc3RhcnQgdHJhbnNtaXR0aW5nLgorCQkgKi8KKwkJaWYgKCFkcm9wICYmIHR4X3F1ZXVlKQorCQkJcXVldWUtPnJ0MngwMGRldi0+b3BzLT5saWItPmtpY2tfcXVldWUocXVldWUpOworCX0KKworCS8qCisJICogQ2hlY2sgaWYgZHJpdmVyIHN1cHBvcnRzIGZsdXNoaW5nLCB3ZSBjYW4gb25seSBndWFyZW50ZWUKKwkgKiBmdWxsIHN1cHBvcnQgZm9yIGZsdXNoaW5nIGlmIHRoZSBkcml2ZXIgaXMgYWJsZQorCSAqIHRvIGNhbmNlbCBhbGwgcGVuZGluZyBmcmFtZXMgKGRyb3AgPSB0cnVlKS4KKwkgKi8KKwlpZiAoZHJvcCAmJiBxdWV1ZS0+cnQyeDAwZGV2LT5vcHMtPmxpYi0+Zmx1c2hfcXVldWUpCisJCXF1ZXVlLT5ydDJ4MDBkZXYtPm9wcy0+bGliLT5mbHVzaF9xdWV1ZShxdWV1ZSk7CisKKwkvKgorCSAqIFdoZW4gd2UgZG9uJ3Qgd2FudCB0byBkcm9wIGFueSBmcmFtZXMsIG9yIHdoZW4KKwkgKiB0aGUgZHJpdmVyIGRvZXNuJ3QgZnVsbHkgZmx1c2ggdGhlIHF1ZXVlIGNvcnJlY2x5LAorCSAqIHdlIG11c3Qgd2FpdCBmb3IgdGhlIHF1ZXVlIHRvIGJlY29tZSBlbXB0eS4KKwkgKi8KKwlmb3IgKGkgPSAwOyAhcnQyeDAwcXVldWVfZW1wdHkocXVldWUpICYmIGkgPCAxMDA7IGkrKykKKwkJbXNsZWVwKDEwKTsKKworCS8qCisJICogVGhlIHF1ZXVlIGZsdXNoIGhhcyBmYWlsZWQuLi4KKwkgKi8KKwlpZiAodW5saWtlbHkoIXJ0MngwMHF1ZXVlX2VtcHR5KHF1ZXVlKSkpCisJCVdBUk5JTkcocXVldWUtPnJ0MngwMGRldiwgIlF1ZXVlICVkIGZhaWxlZCB0byBmbHVzaCIsIHF1ZXVlLT5xaWQpOworCisJLyoKKwkgKiBSZXN0b3JlIHRoZSBxdWV1ZSB0byB0aGUgcHJldmlvdXMgc3RhdHVzCisJICovCisJaWYgKHN0YXJ0ZWQpCisJCXJ0MngwMHF1ZXVlX3VucGF1c2VfcXVldWUocXVldWUpOworCisJbXV0ZXhfdW5sb2NrKCZxdWV1ZS0+c3RhdHVzX2xvY2spOworfQorRVhQT1JUX1NZTUJPTF9HUEwocnQyeDAwcXVldWVfZmx1c2hfcXVldWUpOworCit2b2lkIHJ0MngwMHF1ZXVlX3N0YXJ0X3F1ZXVlcyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQoreworCXN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZTsKKworCS8qCisJICogcnQyeDAwcXVldWVfc3RhcnRfcXVldWUgd2lsbCBjYWxsIGllZWU4MDIxMV93YWtlX3F1ZXVlCisJICogZm9yIGVhY2ggcXVldWUgYWZ0ZXIgaXMgaGFzIGJlZW4gcHJvcGVybHkgaW5pdGlhbGl6ZWQuCisJICovCisJdHhfcXVldWVfZm9yX2VhY2gocnQyeDAwZGV2LCBxdWV1ZSkKKwkJcnQyeDAwcXVldWVfc3RhcnRfcXVldWUocXVldWUpOworCisJcnQyeDAwcXVldWVfc3RhcnRfcXVldWUocnQyeDAwZGV2LT5yeCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChydDJ4MDBxdWV1ZV9zdGFydF9xdWV1ZXMpOworCit2b2lkIHJ0MngwMHF1ZXVlX3N0b3BfcXVldWVzKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCit7CisJc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlOworCisJLyoKKwkgKiBydDJ4MDBxdWV1ZV9zdG9wX3F1ZXVlIHdpbGwgY2FsbCBpZWVlODAyMTFfc3RvcF9xdWV1ZQorCSAqIGFzIHdlbGwsIGJ1dCB3ZSBhcmUgY29tcGxldGVseSBzaHV0dGluZyBkb2luZyBldmVyeXRoaW5nCisJICogbm93LCBzbyBpdCBpcyBtdWNoIHNhZmVyIHRvIHN0b3AgYWxsIFRYIHF1ZXVlcyBhdCBvbmNlLAorCSAqIGFuZCB1c2UgcnQyeDAwcXVldWVfc3RvcF9xdWV1ZSBmb3IgY2xlYW5pbmcgdXAuCisJICovCisJaWVlZTgwMjExX3N0b3BfcXVldWVzKHJ0MngwMGRldi0+aHcpOworCisJdHhfcXVldWVfZm9yX2VhY2gocnQyeDAwZGV2LCBxdWV1ZSkKKwkJcnQyeDAwcXVldWVfc3RvcF9xdWV1ZShxdWV1ZSk7CisKKwlydDJ4MDBxdWV1ZV9zdG9wX3F1ZXVlKHJ0MngwMGRldi0+cngpOworfQorRVhQT1JUX1NZTUJPTF9HUEwocnQyeDAwcXVldWVfc3RvcF9xdWV1ZXMpOworCit2b2lkIHJ0MngwMHF1ZXVlX2ZsdXNoX3F1ZXVlcyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LCBib29sIGRyb3ApCit7CisJc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlOworCisJdHhfcXVldWVfZm9yX2VhY2gocnQyeDAwZGV2LCBxdWV1ZSkKKwkJcnQyeDAwcXVldWVfZmx1c2hfcXVldWUocXVldWUsIGRyb3ApOworCisJcnQyeDAwcXVldWVfZmx1c2hfcXVldWUocnQyeDAwZGV2LT5yeCwgZHJvcCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChydDJ4MDBxdWV1ZV9mbHVzaF9xdWV1ZXMpOworCiBzdGF0aWMgdm9pZCBydDJ4MDBxdWV1ZV9yZXNldChzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWUpCiB7CiAJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKIAl1bnNpZ25lZCBpbnQgaTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZxdWV1ZS0+bG9jaywgaXJxZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZxdWV1ZS0+aW5kZXhfbG9jaywgaXJxZmxhZ3MpOwogCiAJcXVldWUtPmNvdW50ID0gMDsKIAlxdWV1ZS0+bGVuZ3RoID0gMDsKQEAgLTc1OSwxNSArOTU3LDcgQEAKIAkJcXVldWUtPmxhc3RfYWN0aW9uW2ldID0gamlmZmllczsKIAl9CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxdWV1ZS0+bG9jaywgaXJxZmxhZ3MpOwotfQotCi12b2lkIHJ0MngwMHF1ZXVlX3N0b3BfcXVldWVzKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCi17Ci0Jc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlOwotCi0JdHhhbGxfcXVldWVfZm9yX2VhY2gocnQyeDAwZGV2LCBxdWV1ZSkKLQkJcnQyeDAwZGV2LT5vcHMtPmxpYi0+a2lsbF90eF9xdWV1ZShxdWV1ZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcXVldWUtPmluZGV4X2xvY2ssIGlycWZsYWdzKTsKIH0KIAogdm9pZCBydDJ4MDBxdWV1ZV9pbml0X3F1ZXVlcyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQpAQCAtNzc4LDExICs5NjgsOCBAQAogCXF1ZXVlX2Zvcl9lYWNoKHJ0MngwMGRldiwgcXVldWUpIHsKIAkJcnQyeDAwcXVldWVfcmVzZXQocXVldWUpOwogCi0JCWZvciAoaSA9IDA7IGkgPCBxdWV1ZS0+bGltaXQ7IGkrKykgeworCQlmb3IgKGkgPSAwOyBpIDwgcXVldWUtPmxpbWl0OyBpKyspCiAJCQlydDJ4MDBkZXYtPm9wcy0+bGliLT5jbGVhcl9lbnRyeSgmcXVldWUtPmVudHJpZXNbaV0pOwotCQkJaWYgKHF1ZXVlLT5xaWQgPT0gUUlEX1JYKQotCQkJCXJ0MngwMHF1ZXVlX2luZGV4X2luYyhxdWV1ZSwgUV9JTkRFWCk7Ci0JCX0KIAl9CiB9CiAKQEAgLTgwOSw4ICs5OTYsOCBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogI2RlZmluZSBRVUVVRV9FTlRSWV9QUklWX09GRlNFVChfX2Jhc2UsIF9faW5kZXgsIF9fbGltaXQsIF9fZXNpemUsIF9fcHNpemUpIFwKLQkoICgoY2hhciAqKShfX2Jhc2UpKSArICgoX19saW1pdCkgKiAoX19lc2l6ZSkpICsgXAotCSAgICAoKF9faW5kZXgpICogKF9fcHNpemUpKSApCisJKCgoY2hhciAqKShfX2Jhc2UpKSArICgoX19saW1pdCkgKiAoX19lc2l6ZSkpICsgXAorCSAgICAoKF9faW5kZXgpICogKF9fcHNpemUpKSkKIAogCWZvciAoaSA9IDA7IGkgPCBxdWV1ZS0+bGltaXQ7IGkrKykgewogCQllbnRyaWVzW2ldLmZsYWdzID0gMDsKQEAgLTkxMSw3ICsxMDk4LDggQEAKIHN0YXRpYyB2b2lkIHJ0MngwMHF1ZXVlX2luaXQoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKIAkJCSAgICAgc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlLCBlbnVtIGRhdGFfcXVldWVfcWlkIHFpZCkKIHsKLQlzcGluX2xvY2tfaW5pdCgmcXVldWUtPmxvY2spOworCW11dGV4X2luaXQoJnF1ZXVlLT5zdGF0dXNfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJnF1ZXVlLT5pbmRleF9sb2NrKTsKIAogCXF1ZXVlLT5ydDJ4MDBkZXYgPSBydDJ4MDBkZXY7CiAJcXVldWUtPnFpZCA9IHFpZDsKQEAgLTk1Myw3ICsxMTQxLDcgQEAKIAkvKgogCSAqIEluaXRpYWxpemUgcXVldWUgcGFyYW1ldGVycy4KIAkgKiBSWDogcWlkID0gUUlEX1JYCi0JICogVFg6IHFpZCA9IFFJRF9BQ19CRSArIGluZGV4CisJICogVFg6IHFpZCA9IFFJRF9BQ19WTyArIGluZGV4CiAJICogVFg6IGN3X21pbjogMl41ID0gMzIuCiAJICogVFg6IGN3X21heDogMl4xMCA9IDEwMjQuCiAJICogQkNOOiBxaWQgPSBRSURfQkVBQ09OCkBAIC05NjEsNyArMTE0OSw3IEBACiAJICovCiAJcnQyeDAwcXVldWVfaW5pdChydDJ4MDBkZXYsIHJ0MngwMGRldi0+cngsIFFJRF9SWCk7CiAKLQlxaWQgPSBRSURfQUNfQkU7CisJcWlkID0gUUlEX0FDX1ZPOwogCXR4X3F1ZXVlX2Zvcl9lYWNoKHJ0MngwMGRldiwgcXVldWUpCiAJCXJ0MngwMHF1ZXVlX2luaXQocnQyeDAwZGV2LCBxdWV1ZSwgcWlkKyspOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcXVldWUuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBxdWV1ZS5oCmluZGV4IGQ4MWQ4NWYuLmZhYjhlMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBxdWV1ZS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBxdWV1ZS5oCkBAIC00MywyOCArNDMsMTIgQEAKICNkZWZpbmUgQUdHUkVHQVRJT05fU0laRQkzODQwCiAKIC8qKgotICogRE9DOiBOdW1iZXIgb2YgZW50cmllcyBwZXIgcXVldWUKLSAqCi0gKiBVbmRlciBub3JtYWwgbG9hZCB3aXRob3V0IGZyYWdtZW50YXRpb24sIDEyIGVudHJpZXMgYXJlIHN1ZmZpY2llbnQKLSAqIHdpdGhvdXQgdGhlIHF1ZXVlIGJlaW5nIGZpbGxlZCB1cCB0byB0aGUgbWF4aW11bS4gV2hlbiB1c2luZyBmcmFnbWVudGF0aW9uCi0gKiBhbmQgdGhlIHF1ZXVlIHRocmVzaG9sZCBjb2RlLCB3ZSBuZWVkIHRvIGFkZCBzb21lIGFkZGl0aW9uYWwgbWFyZ2lucyB0bwotICogbWFrZSBzdXJlIHRoZSBxdWV1ZSB3aWxsIG5ldmVyIChvciBvbmx5IHVuZGVyIGV4dHJlbWUgbG9hZCkgZmlsbCB1cAotICogY29tcGxldGVseS4KLSAqIFNpbmNlIHdlIGRvbid0IHVzZSBwcmVhbGxvY2F0ZWQgRE1BLCBoYXZpbmcgYSBsYXJnZSBudW1iZXIgb2YgcXVldWUgZW50cmllcwotICogd2lsbCBoYXZlIG1pbmltYWwgaW1wYWN0IG9uIHRoZSBtZW1vcnkgcmVxdWlyZW1lbnRzIGZvciB0aGUgcXVldWUuCi0gKi8KLSNkZWZpbmUgUlhfRU5UUklFUwkyNAotI2RlZmluZSBUWF9FTlRSSUVTCTI0Ci0jZGVmaW5lIEJFQUNPTl9FTlRSSUVTCTEKLSNkZWZpbmUgQVRJTV9FTlRSSUVTCTgKLQotLyoqCiAgKiBlbnVtIGRhdGFfcXVldWVfcWlkOiBRdWV1ZSBpZGVudGlmaWNhdGlvbgogICoKKyAqIEBRSURfQUNfVk86IEFDIFZPIHF1ZXVlCisgKiBAUUlEX0FDX1ZJOiBBQyBWSSBxdWV1ZQogICogQFFJRF9BQ19CRTogQUMgQkUgcXVldWUKICAqIEBRSURfQUNfQks6IEFDIEJLIHF1ZXVlCi0gKiBAUUlEX0FDX1ZJOiBBQyBWSSBxdWV1ZQotICogQFFJRF9BQ19WTzogQUMgVk8gcXVldWUKICAqIEBRSURfSENDQTogSENDQSBxdWV1ZQogICogQFFJRF9NR01UOiBNR01UIHF1ZXVlIChwcmlvIHF1ZXVlKQogICogQFFJRF9SWDogUlggcXVldWUKQEAgLTczLDEwICs1NywxMCBAQAogICogQFFJRF9BVElNOiBBdGltIHF1ZXVlICh2YWx1ZSB1bnNwZWZpY2llZCwgZG9uJ3Qgc2VuZCBpdCB0byBkZXZpY2UpCiAgKi8KIGVudW0gZGF0YV9xdWV1ZV9xaWQgewotCVFJRF9BQ19CRSA9IDAsCi0JUUlEX0FDX0JLID0gMSwKLQlRSURfQUNfVkkgPSAyLAotCVFJRF9BQ19WTyA9IDMsCisJUUlEX0FDX1ZPID0gMCwKKwlRSURfQUNfVkkgPSAxLAorCVFJRF9BQ19CRSA9IDIsCisJUUlEX0FDX0JLID0gMywKIAlRSURfSENDQSA9IDQsCiAJUUlEX01HTVQgPSAxMywKIAlRSURfUlggPSAxNCwKQEAgLTI5Niw3ICsyODAsNiBAQAogICogU3VtbWFyeSBvZiBpbmZvcm1hdGlvbiBmb3IgdGhlIGZyYW1lIGRlc2NyaXB0b3IgYmVmb3JlIHNlbmRpbmcgYSBUWCBmcmFtZS4KICAqCiAgKiBAZmxhZ3M6IERlc2NyaXB0b3IgZmxhZ3MgKFNlZSAmZW51bSBxdWV1ZV9lbnRyeV9mbGFncykuCi0gKiBAcWlkOiBRdWV1ZSBpZGVudGlmaWNhdGlvbiAoU2VlICZlbnVtIGRhdGFfcXVldWVfcWlkKS4KICAqIEBsZW5ndGg6IExlbmd0aCBvZiB0aGUgZW50aXJlIGZyYW1lLgogICogQGhlYWRlcl9sZW5ndGg6IExlbmd0aCBvZiA4MDIuMTEgaGVhZGVyLgogICogQGxlbmd0aF9oaWdoOiBQTENQIGxlbmd0aCBoaWdoIHdvcmQuCkBAIC0zMDksMTEgKzI5Miw4IEBACiAgKiBAcmF0ZV9tb2RlOiBSYXRlIG1vZGUgKFNlZSBAZW51bSByYXRlX21vZHVsYXRpb24pLgogICogQG1wZHVfZGVuc2l0eTogTURQVSBkZW5zaXR5LgogICogQHJldHJ5X2xpbWl0OiBNYXggbnVtYmVyIG9mIHJldHJpZXMuCi0gKiBAYWlmczogQUlGUyB2YWx1ZS4KICAqIEBpZnM6IElGUyB2YWx1ZS4KICAqIEB0eG9wOiBJRlMgdmFsdWUgZm9yIDExbiBjYXBhYmxlIGNoaXBzLgotICogQGN3X21pbjogY3dtaW4gdmFsdWUuCi0gKiBAY3dfbWF4OiBjd21heCB2YWx1ZS4KICAqIEBjaXBoZXI6IENpcGhlciB0eXBlIHVzZWQgZm9yIGVuY3J5cHRpb24uCiAgKiBAa2V5X2lkeDogS2V5IGluZGV4IHVzZWQgZm9yIGVuY3J5cHRpb24uCiAgKiBAaXZfb2Zmc2V0OiBQb3NpdGlvbiB3aGVyZSBJViBzaG91bGQgYmUgaW5zZXJ0ZWQgYnkgaGFyZHdhcmUuCkBAIC0zMjIsOCArMzAyLDYgQEAKIHN0cnVjdCB0eGVudHJ5X2Rlc2MgewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQllbnVtIGRhdGFfcXVldWVfcWlkIHFpZDsKLQogCXUxNiBsZW5ndGg7CiAJdTE2IGhlYWRlcl9sZW5ndGg7CiAKQEAgLTMzOSwxMSArMzE3LDggQEAKIAl1MTYgbXBkdV9kZW5zaXR5OwogCiAJc2hvcnQgcmV0cnlfbGltaXQ7Ci0Jc2hvcnQgYWlmczsKIAlzaG9ydCBpZnM7CiAJc2hvcnQgdHhvcDsKLQlzaG9ydCBjd19taW47Ci0Jc2hvcnQgY3dfbWF4OwogCiAJZW51bSBjaXBoZXIgY2lwaGVyOwogCXUxNiBrZXlfaWR4OwpAQCAtMzY1LDEyICszNDAsMTYgQEAKICAqIEBFTlRSWV9EQVRBX0lPX0ZBSUxFRDogSGFyZHdhcmUgaW5kaWNhdGVkIHRoYXQgYW4gSU8gZXJyb3Igb2NjdXJlZAogICoJd2hpbGUgdHJhbnNmZXJpbmcgdGhlIGRhdGEgdG8gdGhlIGhhcmR3YXJlLiBObyBUWCBzdGF0dXMgcmVwb3J0IHdpbGwKICAqCWJlIGV4cGVjdGVkIGZyb20gdGhlIGhhcmR3YXJlLgorICogQEVOVFJZX0RBVEFfU1RBVFVTX1BFTkRJTkc6IFRoZSBlbnRyeSBoYXMgYmVlbiBzZW5kIHRvIHRoZSBkZXZpY2UgYW5kCisgKglyZXR1cm5lZC4gSXQgaXMgbm93IHdhaXRpbmcgZm9yIHRoZSBzdGF0dXMgcmVwb3J0aW5nIGJlZm9yZSB0aGUKKyAqCWVudHJ5IGNhbiBiZSByZXVzZWQgYWdhaW4uCiAgKi8KIGVudW0gcXVldWVfZW50cnlfZmxhZ3MgewogCUVOVFJZX0JDTl9BU1NJR05FRCwKIAlFTlRSWV9PV05FUl9ERVZJQ0VfREFUQSwKIAlFTlRSWV9EQVRBX1BFTkRJTkcsCi0JRU5UUllfREFUQV9JT19GQUlMRUQKKwlFTlRSWV9EQVRBX0lPX0ZBSUxFRCwKKwlFTlRSWV9EQVRBX1NUQVRVU19QRU5ESU5HLAogfTsKIAogLyoqCkBAIC00MTcsMTMgKzM5NiwzMyBAQAogfTsKIAogLyoqCisgKiBlbnVtIGRhdGFfcXVldWVfZmxhZ3M6IFN0YXR1cyBmbGFncyBmb3IgZGF0YSBxdWV1ZXMKKyAqCisgKiBAUVVFVUVfU1RBUlRFRDogVGhlIHF1ZXVlIGhhcyBiZWVuIHN0YXJ0ZWQuIEZveCBSWCBxdWV1ZXMgdGhpcyBtZWFucyB0aGUKKyAqCWRldmljZSBtaWdodCBiZSBETUEnaW5nIHNrYnVmZmVycy4gVFggcXVldWVzIHdpbGwgYWNjZXB0IHNrYnVmZmVycyB0bworICoJYmUgdHJhbnNtaXR0ZWQgYW5kIGJlYWNvbiBxdWV1ZXMgd2lsbCBzdGFydCBiZWFjb25pbmcgdGhlIGNvbmZpZ3VyZWQKKyAqCWJlYWNvbnMuCisgKiBAUVVFVUVfUEFVU0VEOiBUaGUgcXVldWUgaGFzIGJlZW4gc3RhcnRlZCBidXQgaXMgY3VycmVudGx5IHBhdXNlZC4KKyAqCVdoZW4gdGhpcyBiaXQgaXMgc2V0LCB0aGUgcXVldWUgaGFzIGJlZW4gc3RvcHBlZCBpbiBtYWM4MDIxMSwKKyAqCXByZXZlbnRpbmcgbmV3IGZyYW1lcyB0byBiZSBlbnF1ZXVlZC4gSG93ZXZlciwgYSBmZXcgZnJhbWVzCisgKgltaWdodCBzdGlsbCBhcHBlYXIgc2hvcnRseSBhZnRlciB0aGUgcGF1c2luZy4uLgorICovCitlbnVtIGRhdGFfcXVldWVfZmxhZ3MgeworCVFVRVVFX1NUQVJURUQsCisJUVVFVUVfUEFVU0VELAorfTsKKworLyoqCiAgKiBzdHJ1Y3QgZGF0YV9xdWV1ZTogRGF0YSBxdWV1ZQogICoKICAqIEBydDJ4MDBkZXY6IFBvaW50ZXIgdG8gbWFpbiAmc3RydWN0IHJ0MngwMGRldiB3aGVyZSB0aGlzIHF1ZXVlIGJlbG9uZ3MgdG8uCiAgKiBAZW50cmllczogQmFzZSBhZGRyZXNzIG9mIHRoZSAmc3RydWN0IHF1ZXVlX2VudHJ5IHdoaWNoIGFyZQogICoJcGFydCBvZiB0aGlzIHF1ZXVlLgogICogQHFpZDogVGhlIHF1ZXVlIGlkZW50aWZpY2F0aW9uLCBzZWUgJmVudW0gZGF0YV9xdWV1ZV9xaWQuCi0gKiBAbG9jazogU3BpbmxvY2sgdG8gcHJvdGVjdCBpbmRleCBoYW5kbGluZy4gV2hlbmV2ZXIgQGluZGV4LCBAaW5kZXhfZG9uZSBvcgorICogQGZsYWdzOiBFbnRyeSBmbGFncywgc2VlICZlbnVtIHF1ZXVlX2VudHJ5X2ZsYWdzLgorICogQHN0YXR1c19sb2NrOiBUaGUgbXV0ZXggZm9yIHByb3RlY3RpbmcgdGhlIHN0YXJ0L3N0b3AvZmx1c2gKKyAqCWhhbmRsaW5nIG9uIHRoaXMgcXVldWUuCisgKiBAaW5kZXhfbG9jazogU3BpbmxvY2sgdG8gcHJvdGVjdCBpbmRleCBoYW5kbGluZy4gV2hlbmV2ZXIgQGluZGV4LCBAaW5kZXhfZG9uZSBvcgogICoJQGluZGV4X2NyeXB0IG5lZWRzIHRvIGJlIGNoYW5nZWQgdGhpcyBsb2NrIHNob3VsZCBiZSBncmFiYmVkIHRvIHByZXZlbnQKICAqCWluZGV4IGNvcnJ1cHRpb24gZHVlIHRvIGNvbmN1cnJlbmN5LgogICogQGNvdW50OiBOdW1iZXIgb2YgZnJhbWVzIGhhbmRsZWQgaW4gdGhlIHF1ZXVlLgpAQCAtNDQ2LDggKzQ0NSwxMSBAQAogCXN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cmllczsKIAogCWVudW0gZGF0YV9xdWV1ZV9xaWQgcWlkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGlubG9ja190IGxvY2s7CisJc3RydWN0IG11dGV4IHN0YXR1c19sb2NrOworCXNwaW5sb2NrX3QgaW5kZXhfbG9jazsKKwogCXVuc2lnbmVkIGludCBjb3VudDsKIAl1bnNpZ25lZCBzaG9ydCBsaW1pdDsKIAl1bnNpZ25lZCBzaG9ydCB0aHJlc2hvbGQ7CkBAIC02MTgsMTAgKzYyMCwxMCBAQAogfQogCiAvKioKLSAqIHJ0MngwMHF1ZXVlX3RpbWVvdXQgLSBDaGVjayBpZiBhIHRpbWVvdXQgb2NjdXJlZCBmb3IgU1RBVFVTIHJlb3J0cworICogcnQyeDAwcXVldWVfc3RhdHVzX3RpbWVvdXQgLSBDaGVjayBpZiBhIHRpbWVvdXQgb2NjdXJlZCBmb3IgU1RBVFVTIHJlcG9ydHMKICAqIEBxdWV1ZTogUXVldWUgdG8gY2hlY2suCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IHJ0MngwMHF1ZXVlX3RpbWVvdXQoc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlKQorc3RhdGljIGlubGluZSBpbnQgcnQyeDAwcXVldWVfc3RhdHVzX3RpbWVvdXQoc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlKQogewogCXJldHVybiB0aW1lX2FmdGVyKHF1ZXVlLT5sYXN0X2FjdGlvbltRX0lOREVYX0RNQV9ET05FXSwKIAkJCSAgcXVldWUtPmxhc3RfYWN0aW9uW1FfSU5ERVhfRE9ORV0gKyAoSFogLyAxMCkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHJlZy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHJlZy5oCmluZGV4IGNlZjk0NjIuLmU4MjU5YWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDByZWcuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcmVnLmgKQEAgLTgzLDEwICs4Myw2IEBACiAgKi8KIAlTVEFURV9SQURJT19PTiwKIAlTVEFURV9SQURJT19PRkYsCi0JU1RBVEVfUkFESU9fUlhfT04sCi0JU1RBVEVfUkFESU9fUlhfT0ZGLAotCVNUQVRFX1JBRElPX1JYX09OX0xJTkssCi0JU1RBVEVfUkFESU9fUlhfT0ZGX0xJTkssCiAJU1RBVEVfUkFESU9fSVJRX09OLAogCVNUQVRFX1JBRElPX0lSUV9PRkYsCiAJU1RBVEVfUkFESU9fSVJRX09OX0lTUiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBzb2MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBzb2MuYwppbmRleCBmYzk4MDYzLi4yYWE1YzM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwc29jLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHNvYy5jCkBAIC00MCw2ICs0MCw4IEBACiAKIAlrZnJlZShydDJ4MDBkZXYtPmVlcHJvbSk7CiAJcnQyeDAwZGV2LT5lZXByb20gPSBOVUxMOworCisJaW91bm1hcChydDJ4MDBkZXYtPmNzci5iYXNlKTsKIH0KIAogc3RhdGljIGludCBydDJ4MDBzb2NfYWxsb2NfcmVnKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCkBAIC01MSw5ICs1Myw5IEBACiAJaWYgKCFyZXMpCiAJCXJldHVybiAtRU5PREVWOwogCi0JcnQyeDAwZGV2LT5jc3IuYmFzZSA9ICh2b2lkIF9faW9tZW0gKilLU0VHMUFERFIocmVzLT5zdGFydCk7CisJcnQyeDAwZGV2LT5jc3IuYmFzZSA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIAlpZiAoIXJ0MngwMGRldi0+Y3NyLmJhc2UpCi0JCWdvdG8gZXhpdDsKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAlydDJ4MDBkZXYtPmVlcHJvbSA9IGt6YWxsb2MocnQyeDAwZGV2LT5vcHMtPmVlcHJvbV9zaXplLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXJ0MngwMGRldi0+ZWVwcm9tKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHVzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHVzYi5jCmluZGV4IGIzMzE3ZGYuLjFhOTkzN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDB1c2IuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwdXNiLmMKQEAgLTE5NSw3ICsxOTUsOCBAQAogCQl3aGlsZSAoIXJ0MngwMHF1ZXVlX2VtcHR5KHF1ZXVlKSkgewogCQkJZW50cnkgPSBydDJ4MDBxdWV1ZV9nZXRfZW50cnkocXVldWUsIFFfSU5ERVhfRE9ORSk7CiAKLQkJCWlmICh0ZXN0X2JpdChFTlRSWV9PV05FUl9ERVZJQ0VfREFUQSwgJmVudHJ5LT5mbGFncykpCisJCQlpZiAodGVzdF9iaXQoRU5UUllfT1dORVJfREVWSUNFX0RBVEEsICZlbnRyeS0+ZmxhZ3MpIHx8CisJCQkgICAgIXRlc3RfYml0KEVOVFJZX0RBVEFfU1RBVFVTX1BFTkRJTkcsICZlbnRyeS0+ZmxhZ3MpKQogCQkJCWJyZWFrOwogCiAJCQlydDJ4MDB1c2Jfd29ya190eGRvbmVfZW50cnkoZW50cnkpOwpAQCAtMjI2LDkgKzIyNyw3IEBACiAJICogU2NoZWR1bGUgdGhlIGRlbGF5ZWQgd29yayBmb3IgcmVhZGluZyB0aGUgVFggc3RhdHVzCiAJICogZnJvbSB0aGUgZGV2aWNlLgogCSAqLwotCWlmICh0ZXN0X2JpdChERVZJQ0VfU1RBVEVfUFJFU0VOVCwgJnJ0MngwMGRldi0+ZmxhZ3MpICYmCi0JICAgIHRlc3RfYml0KERFVklDRV9TVEFURV9FTkFCTEVEX1JBRElPLCAmcnQyeDAwZGV2LT5mbGFncykpCi0JCWllZWU4MDIxMV9xdWV1ZV93b3JrKHJ0MngwMGRldi0+aHcsICZydDJ4MDBkZXYtPnR4ZG9uZV93b3JrKTsKKwlpZWVlODAyMTFfcXVldWVfd29yayhydDJ4MDBkZXYtPmh3LCAmcnQyeDAwZGV2LT50eGRvbmVfd29yayk7CiB9CiAKIHN0YXRpYyB2b2lkIHJ0MngwMHVzYl9raWNrX3R4X2VudHJ5KHN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnkpCkBAIC0yMzcsOCArMjM2LDEwIEBACiAJc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYgPSB0b191c2JfZGV2aWNlX2ludGYocnQyeDAwZGV2LT5kZXYpOwogCXN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3VzYiAqZW50cnlfcHJpdiA9IGVudHJ5LT5wcml2X2RhdGE7CiAJdTMyIGxlbmd0aDsKKwlpbnQgc3RhdHVzOwogCi0JaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoRU5UUllfREFUQV9QRU5ESU5HLCAmZW50cnktPmZsYWdzKSkKKwlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChFTlRSWV9EQVRBX1BFTkRJTkcsICZlbnRyeS0+ZmxhZ3MpIHx8CisJICAgIHRlc3RfYml0KEVOVFJZX0RBVEFfU1RBVFVTX1BFTkRJTkcsICZlbnRyeS0+ZmxhZ3MpKQogCQlyZXR1cm47CiAKIAkvKgpAQCAtMjUzLDEyMSArMjU0LDE1IEBACiAJCQkgIGVudHJ5LT5za2ItPmRhdGEsIGxlbmd0aCwKIAkJCSAgcnQyeDAwdXNiX2ludGVycnVwdF90eGRvbmUsIGVudHJ5KTsKIAotCWlmICh1c2Jfc3VibWl0X3VyYihlbnRyeV9wcml2LT51cmIsIEdGUF9BVE9NSUMpKSB7CisJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIoZW50cnlfcHJpdi0+dXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAoc3RhdHVzKSB7CisJCWlmIChzdGF0dXMgPT0gLUVOT0RFVikKKwkJCWNsZWFyX2JpdChERVZJQ0VfU1RBVEVfUFJFU0VOVCwgJnJ0MngwMGRldi0+ZmxhZ3MpOwogCQlzZXRfYml0KEVOVFJZX0RBVEFfSU9fRkFJTEVELCAmZW50cnktPmZsYWdzKTsKIAkJcnQyeDAwbGliX2RtYWRvbmUoZW50cnkpOwogCX0KIH0KIAotdm9pZCBydDJ4MDB1c2Jfa2lja190eF9xdWV1ZShzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWUpCi17Ci0JcnQyeDAwcXVldWVfZm9yX2VhY2hfZW50cnkocXVldWUsIFFfSU5ERVhfRE9ORSwgUV9JTkRFWCwKLQkJCQkgICBydDJ4MDB1c2Jfa2lja190eF9lbnRyeSk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChydDJ4MDB1c2Jfa2lja190eF9xdWV1ZSk7Ci0KLXN0YXRpYyB2b2lkIHJ0MngwMHVzYl9raWxsX3R4X2VudHJ5KHN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnkpCi17Ci0Jc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IGVudHJ5LT5xdWV1ZS0+cnQyeDAwZGV2OwotCXN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3VzYiAqZW50cnlfcHJpdiA9IGVudHJ5LT5wcml2X2RhdGE7Ci0Jc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfdXNiX2JjbiAqYmNuX3ByaXYgPSBlbnRyeS0+cHJpdl9kYXRhOwotCi0JaWYgKCF0ZXN0X2JpdChFTlRSWV9PV05FUl9ERVZJQ0VfREFUQSwgJmVudHJ5LT5mbGFncykpCi0JCXJldHVybjsKLQotCXVzYl9raWxsX3VyYihlbnRyeV9wcml2LT51cmIpOwotCi0JLyoKLQkgKiBLaWxsIGd1YXJkaWFuIHVyYiAoaWYgcmVxdWlyZWQgYnkgZHJpdmVyKS4KLQkgKi8KLQlpZiAoKGVudHJ5LT5xdWV1ZS0+cWlkID09IFFJRF9CRUFDT04pICYmCi0JICAgICh0ZXN0X2JpdChEUklWRVJfUkVRVUlSRV9CRUFDT05fR1VBUkQsICZydDJ4MDBkZXYtPmZsYWdzKSkpCi0JCXVzYl9raWxsX3VyYihiY25fcHJpdi0+Z3VhcmRpYW5fdXJiKTsKLX0KLQotdm9pZCBydDJ4MDB1c2Jfa2lsbF90eF9xdWV1ZShzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWUpCi17Ci0JcnQyeDAwcXVldWVfZm9yX2VhY2hfZW50cnkocXVldWUsIFFfSU5ERVhfRE9ORSwgUV9JTkRFWCwKLQkJCQkgICBydDJ4MDB1c2Jfa2lsbF90eF9lbnRyeSk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChydDJ4MDB1c2Jfa2lsbF90eF9xdWV1ZSk7Ci0KLXN0YXRpYyB2b2lkIHJ0MngwMHVzYl93YXRjaGRvZ190eF9kbWEoc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlKQotewotCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBxdWV1ZS0+cnQyeDAwZGV2OwotCXVuc2lnbmVkIHNob3J0IHRocmVzaG9sZCA9IHF1ZXVlLT50aHJlc2hvbGQ7Ci0KLQlXQVJOSU5HKHF1ZXVlLT5ydDJ4MDBkZXYsICJUWCBxdWV1ZSAlZCBETUEgdGltZWQgb3V0LCIKLQkJIiBpbnZva2UgZm9yY2VkIGZvcmNlZCByZXNldCIsIHF1ZXVlLT5xaWQpOwotCi0JLyoKLQkgKiBUZW1wb3JhcmlseSBkaXNhYmxlIHRoZSBUWCBxdWV1ZSwgdGhpcyB3aWxsIGZvcmNlIG1hYzgwMjExCi0JICogdG8gdXNlIHRoZSBvdGhlciBxdWV1ZXMgdW50aWwgdGhpcyBxdWV1ZSBoYXMgYmVlbiByZXN0b3JlZC4KLQkgKgotCSAqIFNldCB0aGUgcXVldWUgdGhyZXNob2xkIHRvIHRoZSBxdWV1ZSBsaW1pdC4gVGhpcyBwcmV2ZW50cyB0aGUKLQkgKiBxdWV1ZSBmcm9tIGJlaW5nIGVuYWJsZWQgZHVyaW5nIHRoZSB0eGRvbmUgaGFuZGxlci4KLQkgKi8KLQlxdWV1ZS0+dGhyZXNob2xkID0gcXVldWUtPmxpbWl0OwotCWllZWU4MDIxMV9zdG9wX3F1ZXVlKHJ0MngwMGRldi0+aHcsIHF1ZXVlLT5xaWQpOwotCi0JLyoKLQkgKiBLaWxsIGFsbCBlbnRyaWVzIGluIHRoZSBxdWV1ZSwgYWZ0ZXJ3YXJkcyB3ZSBuZWVkIHRvCi0JICogd2FpdCBhIGJpdCBmb3IgYWxsIFVSQnMgdG8gYmUgY2FuY2VsbGVkLgotCSAqLwotCXJ0MngwMHVzYl9raWxsX3R4X3F1ZXVlKHF1ZXVlKTsKLQotCS8qCi0JICogSW4gY2FzZSB0aGF0IGEgZHJpdmVyIGhhcyBvdmVycmlkZW4gdGhlIHR4ZG9uZV93b3JrCi0JICogZnVuY3Rpb24sIHdlIGludm9rZSB0aGUgVFggZG9uZSB0aHJvdWdoIHRoZXJlLgotCSAqLwotCXJ0MngwMGRldi0+dHhkb25lX3dvcmsuZnVuYygmcnQyeDAwZGV2LT50eGRvbmVfd29yayk7Ci0KLQkvKgotCSAqIFNlY3VyaXR5IG1lYXN1cmU6IGlmIHRoZSBkcml2ZXIgZGlkIG92ZXJyaWRlIHRoZQotCSAqIHR4ZG9uZV93b3JrIGZ1bmN0aW9uLCBhbmQgdGhlIGhhcmR3YXJlIGRpZCBhcnJpdmUKLQkgKiBpbiBhIHN0YXRlIHdoaWNoIGNhdXNlcyBpdCB0byBtYWxmdW5jdGlvbiwgaXQgaXMKLQkgKiBwb3NzaWJsZSB0aGF0IHRoZSBkcml2ZXIgY291bGRuJ3QgaGFuZGxlIHRoZSB0eGRvbmUKLQkgKiBldmVudCBjb3JyZWN0bHkuIFNvIGFmdGVyIGdpdmluZyB0aGUgZHJpdmVyIHRoZQotCSAqIGNoYW5jZSB0byBjbGVhbnVwLCB3ZSBub3cgZm9yY2UgYSBjbGVhbnVwIG9mIGFueQotCSAqIGxlZnRvdmVycy4KLQkgKi8KLQlpZiAoIXJ0MngwMHF1ZXVlX2VtcHR5KHF1ZXVlKSkgewotCQlXQVJOSU5HKHF1ZXVlLT5ydDJ4MDBkZXYsICJUWCBxdWV1ZSAlZCBETUEgdGltZWQgb3V0LCIKLQkJCSIgc3RhdHVzIGhhbmRsaW5nIGZhaWxlZCwgaW52b2tlIGhhcmQgcmVzZXQiLCBxdWV1ZS0+cWlkKTsKLQkJcnQyeDAwdXNiX3dvcmtfdHhkb25lKCZydDJ4MDBkZXYtPnR4ZG9uZV93b3JrKTsKLQl9Ci0KLQkvKgotCSAqIFRoZSBxdWV1ZSBoYXMgYmVlbiByZXNldCwgYW5kIG1hYzgwMjExIGlzIGFsbG93ZWQgdG8gdXNlIHRoZQotCSAqIHF1ZXVlIGFnYWluLgotCSAqLwotCXF1ZXVlLT50aHJlc2hvbGQgPSB0aHJlc2hvbGQ7Ci0JaWVlZTgwMjExX3dha2VfcXVldWUocnQyeDAwZGV2LT5odywgcXVldWUtPnFpZCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJ0MngwMHVzYl93YXRjaGRvZ190eF9zdGF0dXMoc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlKQotewotCVdBUk5JTkcocXVldWUtPnJ0MngwMGRldiwgIlRYIHF1ZXVlICVkIHN0YXR1cyB0aW1lZCBvdXQsIgotCQkiIGludm9rZSBmb3JjZWQgdHggaGFuZGxlciIsIHF1ZXVlLT5xaWQpOwotCi0JaWVlZTgwMjExX3F1ZXVlX3dvcmsocXVldWUtPnJ0MngwMGRldi0+aHcsICZxdWV1ZS0+cnQyeDAwZGV2LT50eGRvbmVfd29yayk7Ci19Ci0KLXZvaWQgcnQyeDAwdXNiX3dhdGNoZG9nKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCi17Ci0Jc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlOwotCi0JdHhfcXVldWVfZm9yX2VhY2gocnQyeDAwZGV2LCBxdWV1ZSkgewotCQlpZiAoIXJ0MngwMHF1ZXVlX2VtcHR5KHF1ZXVlKSkgewotCQkJaWYgKHJ0MngwMHF1ZXVlX2RtYV90aW1lb3V0KHF1ZXVlKSkKLQkJCQlydDJ4MDB1c2Jfd2F0Y2hkb2dfdHhfZG1hKHF1ZXVlKTsKLQkJCWlmIChydDJ4MDBxdWV1ZV90aW1lb3V0KHF1ZXVlKSkKLQkJCQlydDJ4MDB1c2Jfd2F0Y2hkb2dfdHhfc3RhdHVzKHF1ZXVlKTsKLQkJfQotCX0KLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHJ0MngwMHVzYl93YXRjaGRvZyk7Ci0KIC8qCiAgKiBSWCBkYXRhIGhhbmRsZXJzLgogICovCkBAIC0zODIsNyArMjc3LDggQEAKIAl3aGlsZSAoIXJ0MngwMHF1ZXVlX2VtcHR5KHJ0MngwMGRldi0+cngpKSB7CiAJCWVudHJ5ID0gcnQyeDAwcXVldWVfZ2V0X2VudHJ5KHJ0MngwMGRldi0+cngsIFFfSU5ERVhfRE9ORSk7CiAKLQkJaWYgKHRlc3RfYml0KEVOVFJZX09XTkVSX0RFVklDRV9EQVRBLCAmZW50cnktPmZsYWdzKSkKKwkJaWYgKHRlc3RfYml0KEVOVFJZX09XTkVSX0RFVklDRV9EQVRBLCAmZW50cnktPmZsYWdzKSB8fAorCQkgICAgIXRlc3RfYml0KEVOVFJZX0RBVEFfU1RBVFVTX1BFTkRJTkcsICZlbnRyeS0+ZmxhZ3MpKQogCQkJYnJlYWs7CiAKIAkJLyoKQEAgLTQyNCwxMSArMzIwLDE1NyBAQAogCSAqIFNjaGVkdWxlIHRoZSBkZWxheWVkIHdvcmsgZm9yIHJlYWRpbmcgdGhlIFJYIHN0YXR1cwogCSAqIGZyb20gdGhlIGRldmljZS4KIAkgKi8KLQlpZiAodGVzdF9iaXQoREVWSUNFX1NUQVRFX1BSRVNFTlQsICZydDJ4MDBkZXYtPmZsYWdzKSAmJgotCSAgICB0ZXN0X2JpdChERVZJQ0VfU1RBVEVfRU5BQkxFRF9SQURJTywgJnJ0MngwMGRldi0+ZmxhZ3MpKQotCQlpZWVlODAyMTFfcXVldWVfd29yayhydDJ4MDBkZXYtPmh3LCAmcnQyeDAwZGV2LT5yeGRvbmVfd29yayk7CisJaWVlZTgwMjExX3F1ZXVlX3dvcmsocnQyeDAwZGV2LT5odywgJnJ0MngwMGRldi0+cnhkb25lX3dvcmspOwogfQogCitzdGF0aWMgdm9pZCBydDJ4MDB1c2Jfa2lja19yeF9lbnRyeShzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5KQoreworCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBlbnRyeS0+cXVldWUtPnJ0MngwMGRldjsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiA9IHRvX3VzYl9kZXZpY2VfaW50ZihydDJ4MDBkZXYtPmRldik7CisJc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfdXNiICplbnRyeV9wcml2ID0gZW50cnktPnByaXZfZGF0YTsKKwlpbnQgc3RhdHVzOworCisJaWYgKHRlc3RfYW5kX3NldF9iaXQoRU5UUllfT1dORVJfREVWSUNFX0RBVEEsICZlbnRyeS0+ZmxhZ3MpIHx8CisJICAgIHRlc3RfYml0KEVOVFJZX0RBVEFfU1RBVFVTX1BFTkRJTkcsICZlbnRyeS0+ZmxhZ3MpKQorCQlyZXR1cm47CisKKwlydDJ4MDBsaWJfZG1hc3RhcnQoZW50cnkpOworCisJdXNiX2ZpbGxfYnVsa191cmIoZW50cnlfcHJpdi0+dXJiLCB1c2JfZGV2LAorCQkJICB1c2JfcmN2YnVsa3BpcGUodXNiX2RldiwgZW50cnktPnF1ZXVlLT51c2JfZW5kcG9pbnQpLAorCQkJICBlbnRyeS0+c2tiLT5kYXRhLCBlbnRyeS0+c2tiLT5sZW4sCisJCQkgIHJ0MngwMHVzYl9pbnRlcnJ1cHRfcnhkb25lLCBlbnRyeSk7CisKKwlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYihlbnRyeV9wcml2LT51cmIsIEdGUF9BVE9NSUMpOworCWlmIChzdGF0dXMpIHsKKwkJaWYgKHN0YXR1cyA9PSAtRU5PREVWKQorCQkJY2xlYXJfYml0KERFVklDRV9TVEFURV9QUkVTRU5ULCAmcnQyeDAwZGV2LT5mbGFncyk7CisJCXNldF9iaXQoRU5UUllfREFUQV9JT19GQUlMRUQsICZlbnRyeS0+ZmxhZ3MpOworCQlydDJ4MDBsaWJfZG1hZG9uZShlbnRyeSk7CisJfQorfQorCit2b2lkIHJ0MngwMHVzYl9raWNrX3F1ZXVlKHN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZSkKK3sKKwlzd2l0Y2ggKHF1ZXVlLT5xaWQpIHsKKwljYXNlIFFJRF9BQ19WTzoKKwljYXNlIFFJRF9BQ19WSToKKwljYXNlIFFJRF9BQ19CRToKKwljYXNlIFFJRF9BQ19CSzoKKwkJaWYgKCFydDJ4MDBxdWV1ZV9lbXB0eShxdWV1ZSkpCisJCQlydDJ4MDBxdWV1ZV9mb3JfZWFjaF9lbnRyeShxdWV1ZSwgUV9JTkRFWF9ET05FLCBRX0lOREVYLAorCQkJCQkJICAgcnQyeDAwdXNiX2tpY2tfdHhfZW50cnkpOworCQlicmVhazsKKwljYXNlIFFJRF9SWDoKKwkJaWYgKCFydDJ4MDBxdWV1ZV9mdWxsKHF1ZXVlKSkKKwkJCXJ0MngwMHF1ZXVlX2Zvcl9lYWNoX2VudHJ5KHF1ZXVlLCBRX0lOREVYX0RPTkUsIFFfSU5ERVgsCisJCQkJCQkgICBydDJ4MDB1c2Jfa2lja19yeF9lbnRyeSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJ0MngwMHVzYl9raWNrX3F1ZXVlKTsKKworc3RhdGljIHZvaWQgcnQyeDAwdXNiX2ZsdXNoX2VudHJ5KHN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnkpCit7CisJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IGVudHJ5LT5xdWV1ZS0+cnQyeDAwZGV2OworCXN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3VzYiAqZW50cnlfcHJpdiA9IGVudHJ5LT5wcml2X2RhdGE7CisJc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfdXNiX2JjbiAqYmNuX3ByaXYgPSBlbnRyeS0+cHJpdl9kYXRhOworCisJaWYgKCF0ZXN0X2JpdChFTlRSWV9PV05FUl9ERVZJQ0VfREFUQSwgJmVudHJ5LT5mbGFncykpCisJCXJldHVybjsKKworCXVzYl9raWxsX3VyYihlbnRyeV9wcml2LT51cmIpOworCisJLyoKKwkgKiBLaWxsIGd1YXJkaWFuIHVyYiAoaWYgcmVxdWlyZWQgYnkgZHJpdmVyKS4KKwkgKi8KKwlpZiAoKGVudHJ5LT5xdWV1ZS0+cWlkID09IFFJRF9CRUFDT04pICYmCisJICAgICh0ZXN0X2JpdChEUklWRVJfUkVRVUlSRV9CRUFDT05fR1VBUkQsICZydDJ4MDBkZXYtPmZsYWdzKSkpCisJCXVzYl9raWxsX3VyYihiY25fcHJpdi0+Z3VhcmRpYW5fdXJiKTsKK30KKwordm9pZCBydDJ4MDB1c2JfZmx1c2hfcXVldWUoc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlKQoreworCXN0cnVjdCB3b3JrX3N0cnVjdCAqY29tcGxldGlvbjsKKwl1bnNpZ25lZCBpbnQgaTsKKworCXJ0MngwMHF1ZXVlX2Zvcl9lYWNoX2VudHJ5KHF1ZXVlLCBRX0lOREVYX0RPTkUsIFFfSU5ERVgsCisJCQkJICAgcnQyeDAwdXNiX2ZsdXNoX2VudHJ5KTsKKworCS8qCisJICogT2J0YWluIHRoZSBxdWV1ZSBjb21wbGV0aW9uIGhhbmRsZXIKKwkgKi8KKwlzd2l0Y2ggKHF1ZXVlLT5xaWQpIHsKKwljYXNlIFFJRF9BQ19WTzoKKwljYXNlIFFJRF9BQ19WSToKKwljYXNlIFFJRF9BQ19CRToKKwljYXNlIFFJRF9BQ19CSzoKKwkJY29tcGxldGlvbiA9ICZxdWV1ZS0+cnQyeDAwZGV2LT50eGRvbmVfd29yazsKKwkJYnJlYWs7CisJY2FzZSBRSURfUlg6CisJCWNvbXBsZXRpb24gPSAmcXVldWUtPnJ0MngwMGRldi0+cnhkb25lX3dvcms7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybjsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgMjA7IGkrKykgeworCQkvKgorCQkgKiBDaGVjayBpZiB0aGUgZHJpdmVyIGlzIGFscmVhZHkgZG9uZSwgb3RoZXJ3aXNlIHdlCisJCSAqIGhhdmUgdG8gc2xlZXAgYSBsaXR0bGUgd2hpbGUgdG8gZ2l2ZSB0aGUgZHJpdmVyL2h3CisJCSAqIHRoZSBvcHB1cnR1bml0eSB0byBjb21wbGV0ZSBpbnRlcnJ1cHQgcHJvY2VzcyBpdHNlbGYuCisJCSAqLworCQlpZiAocnQyeDAwcXVldWVfZW1wdHkocXVldWUpKQorCQkJYnJlYWs7CisKKwkJLyoKKwkJICogU2NoZWR1bGUgdGhlIGNvbXBsZXRpb24gaGFuZGxlciBtYW51YWxseSwgd2hlbiB0aGlzCisJCSAqIHdvcmtlciBmdW5jdGlvbiBydW5zLCBpdCBzaG91bGQgY2xlYW51cCB0aGUgcXVldWUuCisJCSAqLworCQlpZWVlODAyMTFfcXVldWVfd29yayhxdWV1ZS0+cnQyeDAwZGV2LT5odywgY29tcGxldGlvbik7CisKKwkJLyoKKwkJICogV2FpdCBmb3IgYSBsaXR0bGUgd2hpbGUgdG8gZ2l2ZSB0aGUgZHJpdmVyCisJCSAqIHRoZSBvcHB1cnR1bml0eSB0byByZWNvdmVyIGl0c2VsZi4KKwkJICovCisJCW1zbGVlcCgxMCk7CisJfQorfQorRVhQT1JUX1NZTUJPTF9HUEwocnQyeDAwdXNiX2ZsdXNoX3F1ZXVlKTsKKworc3RhdGljIHZvaWQgcnQyeDAwdXNiX3dhdGNoZG9nX3R4X2RtYShzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWUpCit7CisJV0FSTklORyhxdWV1ZS0+cnQyeDAwZGV2LCAiVFggcXVldWUgJWQgRE1BIHRpbWVkIG91dCwiCisJCSIgaW52b2tlIGZvcmNlZCBmb3JjZWQgcmVzZXRcbiIsIHF1ZXVlLT5xaWQpOworCisJcnQyeDAwcXVldWVfZmx1c2hfcXVldWUocXVldWUsIHRydWUpOworfQorCitzdGF0aWMgdm9pZCBydDJ4MDB1c2Jfd2F0Y2hkb2dfdHhfc3RhdHVzKHN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZSkKK3sKKwlXQVJOSU5HKHF1ZXVlLT5ydDJ4MDBkZXYsICJUWCBxdWV1ZSAlZCBzdGF0dXMgdGltZWQgb3V0LCIKKwkJIiBpbnZva2UgZm9yY2VkIHR4IGhhbmRsZXJcbiIsIHF1ZXVlLT5xaWQpOworCisJaWVlZTgwMjExX3F1ZXVlX3dvcmsocXVldWUtPnJ0MngwMGRldi0+aHcsICZxdWV1ZS0+cnQyeDAwZGV2LT50eGRvbmVfd29yayk7Cit9CisKK3ZvaWQgcnQyeDAwdXNiX3dhdGNoZG9nKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCit7CisJc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlOworCisJdHhfcXVldWVfZm9yX2VhY2gocnQyeDAwZGV2LCBxdWV1ZSkgeworCQlpZiAoIXJ0MngwMHF1ZXVlX2VtcHR5KHF1ZXVlKSkgeworCQkJaWYgKHJ0MngwMHF1ZXVlX2RtYV90aW1lb3V0KHF1ZXVlKSkKKwkJCQlydDJ4MDB1c2Jfd2F0Y2hkb2dfdHhfZG1hKHF1ZXVlKTsKKwkJCWlmIChydDJ4MDBxdWV1ZV9zdGF0dXNfdGltZW91dChxdWV1ZSkpCisJCQkJcnQyeDAwdXNiX3dhdGNoZG9nX3R4X3N0YXR1cyhxdWV1ZSk7CisJCX0KKwl9Cit9CitFWFBPUlRfU1lNQk9MX0dQTChydDJ4MDB1c2Jfd2F0Y2hkb2cpOworCiAvKgogICogUmFkaW8gaGFuZGxlcnMKICAqLwpAQCAtNDM2LDEyICs0NzgsNiBAQAogewogCXJ0MngwMHVzYl92ZW5kb3JfcmVxdWVzdF9zdyhydDJ4MDBkZXYsIFVTQl9SWF9DT05UUk9MLCAwLCAwLAogCQkJCSAgICBSRUdJU1RFUl9USU1FT1VUKTsKLQotCS8qCi0JICogVGhlIFVTQiB2ZXJzaW9uIG9mIGtpbGxfdHhfcXVldWUgYWxzbyB3b3JrcwotCSAqIG9uIHRoZSBSWCBxdWV1ZS4KLQkgKi8KLQlydDJ4MDBkZXYtPm9wcy0+bGliLT5raWxsX3R4X3F1ZXVlKHJ0MngwMGRldi0+cngpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocnQyeDAwdXNiX2Rpc2FibGVfcmFkaW8pOwogCkBAIC00NTAsMjUgKzQ4NiwxMCBAQAogICovCiB2b2lkIHJ0MngwMHVzYl9jbGVhcl9lbnRyeShzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5KQogewotCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2ID0KLQkgICAgdG9fdXNiX2RldmljZV9pbnRmKGVudHJ5LT5xdWV1ZS0+cnQyeDAwZGV2LT5kZXYpOwotCXN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3VzYiAqZW50cnlfcHJpdiA9IGVudHJ5LT5wcml2X2RhdGE7Ci0JaW50IHBpcGU7Ci0KIAllbnRyeS0+ZmxhZ3MgPSAwOwogCi0JaWYgKGVudHJ5LT5xdWV1ZS0+cWlkID09IFFJRF9SWCkgewotCQlwaXBlID0gdXNiX3JjdmJ1bGtwaXBlKHVzYl9kZXYsIGVudHJ5LT5xdWV1ZS0+dXNiX2VuZHBvaW50KTsKLQkJdXNiX2ZpbGxfYnVsa191cmIoZW50cnlfcHJpdi0+dXJiLCB1c2JfZGV2LCBwaXBlLAotCQkJCWVudHJ5LT5za2ItPmRhdGEsIGVudHJ5LT5za2ItPmxlbiwKLQkJCQlydDJ4MDB1c2JfaW50ZXJydXB0X3J4ZG9uZSwgZW50cnkpOwotCi0JCXNldF9iaXQoRU5UUllfT1dORVJfREVWSUNFX0RBVEEsICZlbnRyeS0+ZmxhZ3MpOwotCQlpZiAodXNiX3N1Ym1pdF91cmIoZW50cnlfcHJpdi0+dXJiLCBHRlBfQVRPTUlDKSkgewotCQkJc2V0X2JpdChFTlRSWV9EQVRBX0lPX0ZBSUxFRCwgJmVudHJ5LT5mbGFncyk7Ci0JCQlydDJ4MDBsaWJfZG1hZG9uZShlbnRyeSk7Ci0JCX0KLQl9CisJaWYgKGVudHJ5LT5xdWV1ZS0+cWlkID09IFFJRF9SWCkKKwkJcnQyeDAwdXNiX2tpY2tfcnhfZW50cnkoZW50cnkpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocnQyeDAwdXNiX2NsZWFyX2VudHJ5KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHVzYi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHVzYi5oCmluZGV4IGMyZDk5N2YuLjZhYWY1MWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDB1c2IuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwdXNiLmgKQEAgLTM3OCwyMiArMzc4LDIyIEBACiB9OwogCiAvKioKLSAqIHJ0MngwMHVzYl9raWNrX3R4X3F1ZXVlIC0gS2ljayBkYXRhIHF1ZXVlCisgKiBydDJ4MDB1c2Jfa2lja19xdWV1ZSAtIEtpY2sgZGF0YSBxdWV1ZQogICogQHF1ZXVlOiBEYXRhIHF1ZXVlIHRvIGtpY2sKICAqCiAgKiBUaGlzIHdpbGwgd2FsayB0aHJvdWdoIGFsbCBlbnRyaWVzIG9mIHRoZSBxdWV1ZSBhbmQgcHVzaCBhbGwgcGVuZGluZwogICogZnJhbWVzIHRvIHRoZSBoYXJkd2FyZSBhcyBhIHNpbmdsZSBidXJzdC4KICAqLwotdm9pZCBydDJ4MDB1c2Jfa2lja190eF9xdWV1ZShzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWUpOwordm9pZCBydDJ4MDB1c2Jfa2lja19xdWV1ZShzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWUpOwogCiAvKioKLSAqIHJ0MngwMHVzYl9raWxsX3R4X3F1ZXVlIC0gS2lsbCBkYXRhIHF1ZXVlCi0gKiBAcXVldWU6IERhdGEgcXVldWUgdG8ga2lsbAorICogcnQyeDAwdXNiX2ZsdXNoX3F1ZXVlIC0gRmx1c2ggZGF0YSBxdWV1ZQorICogQHF1ZXVlOiBEYXRhIHF1ZXVlIHRvIHN0b3AKICAqCiAgKiBUaGlzIHdpbGwgd2FsayB0aHJvdWdoIGFsbCBlbnRyaWVzIG9mIHRoZSBxdWV1ZSBhbmQga2lsbCBhbGwKLSAqIHByZXZpb3VzbHkga2lja2VkIGZyYW1lcyBiZWZvcmUgdGhleSBjYW4gYmUgc2VuZC4KKyAqIFVSQidzIHdoaWNoIHdlcmUgc2VuZCB0byB0aGUgZGV2aWNlLgogICovCi12b2lkIHJ0MngwMHVzYl9raWxsX3R4X3F1ZXVlKHN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZSk7Cit2b2lkIHJ0MngwMHVzYl9mbHVzaF9xdWV1ZShzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWUpOwogCiAvKioKICAqIHJ0MngwMHVzYl93YXRjaGRvZyAtIFdhdGNoZG9nIGZvciBVU0IgY29tbXVuaWNhdGlvbgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NjFwY2kuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDYxcGNpLmMKaW5kZXggYWY1NDhjOC4uOGRlNDRkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NjFwY2kuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ2MXBjaS5jCkBAIC0xMTQwLDYgKzExNDAsMTA2IEBACiB9CiAKIC8qCisgKiBRdWV1ZSBoYW5kbGVycy4KKyAqLworc3RhdGljIHZvaWQgcnQ2MXBjaV9zdGFydF9xdWV1ZShzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWUpCit7CisJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IHF1ZXVlLT5ydDJ4MDBkZXY7CisJdTMyIHJlZzsKKworCXN3aXRjaCAocXVldWUtPnFpZCkgeworCWNhc2UgUUlEX1JYOgorCQlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRYUlhfQ1NSMCwgJnJlZyk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWFJYX0NTUjBfRElTQUJMRV9SWCwgMCk7CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYUlhfQ1NSMCwgcmVnKTsKKwkJYnJlYWs7CisJY2FzZSBRSURfQkVBQ09OOgorCQlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRYUlhfQ1NSOSwgJnJlZyk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWFJYX0NTUjlfVFNGX1RJQ0tJTkcsIDEpOworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhSWF9DU1I5X1RCVFRfRU5BQkxFLCAxKTsKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYUlhfQ1NSOV9CRUFDT05fR0VOLCAxKTsKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhSWF9DU1I5LCByZWcpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJ0NjFwY2lfa2lja19xdWV1ZShzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWUpCit7CisJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IHF1ZXVlLT5ydDJ4MDBkZXY7CisJdTMyIHJlZzsKKworCXN3aXRjaCAocXVldWUtPnFpZCkgeworCWNhc2UgUUlEX0FDX1ZPOgorCQlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRYX0NOVExfQ1NSLCAmcmVnKTsKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYX0NOVExfQ1NSX0tJQ0tfVFhfQUMwLCAxKTsKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhfQ05UTF9DU1IsIHJlZyk7CisJCWJyZWFrOworCWNhc2UgUUlEX0FDX1ZJOgorCQlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRYX0NOVExfQ1NSLCAmcmVnKTsKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYX0NOVExfQ1NSX0tJQ0tfVFhfQUMxLCAxKTsKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhfQ05UTF9DU1IsIHJlZyk7CisJCWJyZWFrOworCWNhc2UgUUlEX0FDX0JFOgorCQlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRYX0NOVExfQ1NSLCAmcmVnKTsKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYX0NOVExfQ1NSX0tJQ0tfVFhfQUMyLCAxKTsKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhfQ05UTF9DU1IsIHJlZyk7CisJCWJyZWFrOworCWNhc2UgUUlEX0FDX0JLOgorCQlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRYX0NOVExfQ1NSLCAmcmVnKTsKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYX0NOVExfQ1NSX0tJQ0tfVFhfQUMzLCAxKTsKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhfQ05UTF9DU1IsIHJlZyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgcnQ2MXBjaV9zdG9wX3F1ZXVlKHN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZSkKK3sKKwlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gcXVldWUtPnJ0MngwMGRldjsKKwl1MzIgcmVnOworCisJc3dpdGNoIChxdWV1ZS0+cWlkKSB7CisJY2FzZSBRSURfQUNfVk86CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgVFhfQ05UTF9DU1IsICZyZWcpOworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhfQ05UTF9DU1JfQUJPUlRfVFhfQUMwLCAxKTsKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhfQ05UTF9DU1IsIHJlZyk7CisJCWJyZWFrOworCWNhc2UgUUlEX0FDX1ZJOgorCQlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRYX0NOVExfQ1NSLCAmcmVnKTsKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYX0NOVExfQ1NSX0FCT1JUX1RYX0FDMSwgMSk7CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYX0NOVExfQ1NSLCByZWcpOworCQlicmVhazsKKwljYXNlIFFJRF9BQ19CRToKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBUWF9DTlRMX0NTUiwgJnJlZyk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWF9DTlRMX0NTUl9BQk9SVF9UWF9BQzIsIDEpOworCQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWF9DTlRMX0NTUiwgcmVnKTsKKwkJYnJlYWs7CisJY2FzZSBRSURfQUNfQks6CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgVFhfQ05UTF9DU1IsICZyZWcpOworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhfQ05UTF9DU1JfQUJPUlRfVFhfQUMzLCAxKTsKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhfQ05UTF9DU1IsIHJlZyk7CisJCWJyZWFrOworCWNhc2UgUUlEX1JYOgorCQlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRYUlhfQ1NSMCwgJnJlZyk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWFJYX0NTUjBfRElTQUJMRV9SWCwgMSk7CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYUlhfQ1NSMCwgcmVnKTsKKwkJYnJlYWs7CisJY2FzZSBRSURfQkVBQ09OOgorCQlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRYUlhfQ1NSOSwgJnJlZyk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWFJYX0NTUjlfVFNGX1RJQ0tJTkcsIDApOworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhSWF9DU1I5X1RCVFRfRU5BQkxFLCAwKTsKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYUlhfQ1NSOV9CRUFDT05fR0VOLCAwKTsKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhSWF9DU1I5LCByZWcpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKKy8qCiAgKiBGaXJtd2FyZSBmdW5jdGlvbnMKICAqLwogc3RhdGljIGNoYXIgKnJ0NjFwY2lfZ2V0X2Zpcm13YXJlX25hbWUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKQEAgLTE2MTYsMTggKzE3MTYsNiBAQAogLyoKICAqIERldmljZSBzdGF0ZSBzd2l0Y2ggaGFuZGxlcnMuCiAgKi8KLXN0YXRpYyB2b2lkIHJ0NjFwY2lfdG9nZ2xlX3J4KHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCi0JCQkgICAgICBlbnVtIGRldl9zdGF0ZSBzdGF0ZSkKLXsKLQl1MzIgcmVnOwotCi0JcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBUWFJYX0NTUjAsICZyZWcpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWFJYX0NTUjBfRElTQUJMRV9SWCwKLQkJCSAgIChzdGF0ZSA9PSBTVEFURV9SQURJT19SWF9PRkYpIHx8Ci0JCQkgICAoc3RhdGUgPT0gU1RBVEVfUkFESU9fUlhfT0ZGX0xJTkspKTsKLQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWFJYX0NTUjAsIHJlZyk7Ci19Ci0KIHN0YXRpYyB2b2lkIHJ0NjFwY2lfdG9nZ2xlX2lycShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAogCQkJICAgICAgIGVudW0gZGV2X3N0YXRlIHN0YXRlKQogewpAQCAtMTc0NCwxMiArMTgzMiw2IEBACiAJY2FzZSBTVEFURV9SQURJT19PRkY6CiAJCXJ0NjFwY2lfZGlzYWJsZV9yYWRpbyhydDJ4MDBkZXYpOwogCQlicmVhazsKLQljYXNlIFNUQVRFX1JBRElPX1JYX09OOgotCWNhc2UgU1RBVEVfUkFESU9fUlhfT05fTElOSzoKLQljYXNlIFNUQVRFX1JBRElPX1JYX09GRjoKLQljYXNlIFNUQVRFX1JBRElPX1JYX09GRl9MSU5LOgotCQlydDYxcGNpX3RvZ2dsZV9yeChydDJ4MDBkZXYsIHN0YXRlKTsKLQkJYnJlYWs7CiAJY2FzZSBTVEFURV9SQURJT19JUlFfT046CiAJY2FzZSBTVEFURV9SQURJT19JUlFfT05fSVNSOgogCWNhc2UgU1RBVEVfUkFESU9fSVJRX09GRjoKQEAgLTE3ODksMTAgKzE4NzEsMTAgQEAKIAkgKiBTdGFydCB3cml0aW5nIHRoZSBkZXNjcmlwdG9yIHdvcmRzLgogCSAqLwogCXJ0MngwMF9kZXNjX3JlYWQodHhkLCAxLCAmd29yZCk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzFfSE9TVF9RX0lELCB0eGRlc2MtPnFpZCk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzFfQUlGU04sIHR4ZGVzYy0+YWlmcyk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzFfQ1dNSU4sIHR4ZGVzYy0+Y3dfbWluKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMV9DV01BWCwgdHhkZXNjLT5jd19tYXgpOworCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cxX0hPU1RfUV9JRCwgZW50cnktPnF1ZXVlLT5xaWQpOworCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cxX0FJRlNOLCBlbnRyeS0+cXVldWUtPmFpZnMpOworCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cxX0NXTUlOLCBlbnRyeS0+cXVldWUtPmN3X21pbik7CisJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzFfQ1dNQVgsIGVudHJ5LT5xdWV1ZS0+Y3dfbWF4KTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMV9JVl9PRkZTRVQsIHR4ZGVzYy0+aXZfb2Zmc2V0KTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMV9IV19TRVFVRU5DRSwKIAkJCSAgIHRlc3RfYml0KEVOVFJZX1RYRF9HRU5FUkFURV9TRVEsICZ0eGRlc2MtPmZsYWdzKSk7CkBAIC0xODIwLDcgKzE5MDIsNyBAQAogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1c1X1dBSVRJTkdfRE1BX0RPTkVfSU5ULCAxKTsKIAlydDJ4MDBfZGVzY193cml0ZSh0eGQsIDUsIHdvcmQpOwogCi0JaWYgKHR4ZGVzYy0+cWlkICE9IFFJRF9CRUFDT04pIHsKKwlpZiAoZW50cnktPnF1ZXVlLT5xaWQgIT0gUUlEX0JFQUNPTikgewogCQlydDJ4MDBfZGVzY19yZWFkKHR4ZCwgNiwgJndvcmQpOwogCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XNl9CVUZGRVJfUEhZU0lDQUxfQUREUkVTUywKIAkJCQkgICBza2JkZXNjLT5za2JfZG1hKTsKQEAgLTE4NjYsOCArMTk0OCw4IEBACiAJICogUmVnaXN0ZXIgZGVzY3JpcHRvciBkZXRhaWxzIGluIHNrYiBmcmFtZSBkZXNjcmlwdG9yLgogCSAqLwogCXNrYmRlc2MtPmRlc2MgPSB0eGQ7Ci0Jc2tiZGVzYy0+ZGVzY19sZW4gPQotCQkodHhkZXNjLT5xaWQgPT0gUUlEX0JFQUNPTikgPyAgVFhJTkZPX1NJWkUgOiBUWERfREVTQ19TSVpFOworCXNrYmRlc2MtPmRlc2NfbGVuID0gKGVudHJ5LT5xdWV1ZS0+cWlkID09IFFJRF9CRUFDT04pID8gVFhJTkZPX1NJWkUgOgorCQkJICAgIFRYRF9ERVNDX1NJWkU7CiB9CiAKIC8qCkBAIC0xODc5LDYgKzE5NjEsNyBAQAogCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBlbnRyeS0+cXVldWUtPnJ0MngwMGRldjsKIAlzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl9wY2kgKmVudHJ5X3ByaXYgPSBlbnRyeS0+cHJpdl9kYXRhOwogCXVuc2lnbmVkIGludCBiZWFjb25fYmFzZTsKKwl1bnNpZ25lZCBpbnQgcGFkZGluZ19sZW47CiAJdTMyIHJlZzsKIAogCS8qCkBAIC0xOTAwLDEzICsxOTgzLDE2IEBACiAJcnQyeDAwZGVidWdfZHVtcF9mcmFtZShydDJ4MDBkZXYsIERVTVBfRlJBTUVfQkVBQ09OLCBlbnRyeS0+c2tiKTsKIAogCS8qCi0JICogV3JpdGUgZW50aXJlIGJlYWNvbiB3aXRoIGRlc2NyaXB0b3IgdG8gcmVnaXN0ZXIuCisJICogV3JpdGUgZW50aXJlIGJlYWNvbiB3aXRoIGRlc2NyaXB0b3IgYW5kIHBhZGRpbmcgdG8gcmVnaXN0ZXIuCiAJICovCisJcGFkZGluZ19sZW4gPSByb3VuZHVwKGVudHJ5LT5za2ItPmxlbiwgNCkgLSBlbnRyeS0+c2tiLT5sZW47CisJc2tiX3BhZChlbnRyeS0+c2tiLCBwYWRkaW5nX2xlbik7CiAJYmVhY29uX2Jhc2UgPSBIV19CRUFDT05fT0ZGU0VUKGVudHJ5LT5lbnRyeV9pZHgpOwogCXJ0MngwMHBjaV9yZWdpc3Rlcl9tdWx0aXdyaXRlKHJ0MngwMGRldiwgYmVhY29uX2Jhc2UsCiAJCQkJICAgICAgZW50cnlfcHJpdi0+ZGVzYywgVFhJTkZPX1NJWkUpOwogCXJ0MngwMHBjaV9yZWdpc3Rlcl9tdWx0aXdyaXRlKHJ0MngwMGRldiwgYmVhY29uX2Jhc2UgKyBUWElORk9fU0laRSwKLQkJCQkgICAgICBlbnRyeS0+c2tiLT5kYXRhLCBlbnRyeS0+c2tiLT5sZW4pOworCQkJCSAgICAgIGVudHJ5LT5za2ItPmRhdGEsCisJCQkJICAgICAgZW50cnktPnNrYi0+bGVuICsgcGFkZGluZ19sZW4pOwogCiAJLyoKIAkgKiBFbmFibGUgYmVhY29uaW5nIGFnYWluLgpAQCAtMTkyOCwzNyArMjAxNCw2IEBACiAJZW50cnktPnNrYiA9IE5VTEw7CiB9CiAKLXN0YXRpYyB2b2lkIHJ0NjFwY2lfa2lja190eF9xdWV1ZShzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWUpCi17Ci0Jc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IHF1ZXVlLT5ydDJ4MDBkZXY7Ci0JdTMyIHJlZzsKLQotCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgVFhfQ05UTF9DU1IsICZyZWcpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWF9DTlRMX0NTUl9LSUNLX1RYX0FDMCwgKHF1ZXVlLT5xaWQgPT0gUUlEX0FDX0JFKSk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYX0NOVExfQ1NSX0tJQ0tfVFhfQUMxLCAocXVldWUtPnFpZCA9PSBRSURfQUNfQkspKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhfQ05UTF9DU1JfS0lDS19UWF9BQzIsIChxdWV1ZS0+cWlkID09IFFJRF9BQ19WSSkpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWF9DTlRMX0NTUl9LSUNLX1RYX0FDMywgKHF1ZXVlLT5xaWQgPT0gUUlEX0FDX1ZPKSk7Ci0JcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhfQ05UTF9DU1IsIHJlZyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJ0NjFwY2lfa2lsbF90eF9xdWV1ZShzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWUpCi17Ci0Jc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IHF1ZXVlLT5ydDJ4MDBkZXY7Ci0JdTMyIHJlZzsKLQotCWlmIChxdWV1ZS0+cWlkID09IFFJRF9CRUFDT04pIHsKLQkJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhSWF9DU1I5LCAwKTsKLQkJcmV0dXJuOwotCX0KLQotCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgVFhfQ05UTF9DU1IsICZyZWcpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWF9DTlRMX0NTUl9BQk9SVF9UWF9BQzAsIChxdWV1ZS0+cWlkID09IFFJRF9BQ19CRSkpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWF9DTlRMX0NTUl9BQk9SVF9UWF9BQzEsIChxdWV1ZS0+cWlkID09IFFJRF9BQ19CSykpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWF9DTlRMX0NTUl9BQk9SVF9UWF9BQzIsIChxdWV1ZS0+cWlkID09IFFJRF9BQ19WSSkpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWF9DTlRMX0NTUl9BQk9SVF9UWF9BQzMsIChxdWV1ZS0+cWlkID09IFFJRF9BQ19WTykpOwotCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYX0NOVExfQ1NSLCByZWcpOwotfQotCiAvKgogICogUlggY29udHJvbCBoYW5kbGVycwogICovCkBAIC0yMDc4LDcgKzIxMzMsNyBAQAogCSAqIHRoYXQgdGhlIFRYX1NUQV9GSUZPIHN0YWNrIGhhcyBhIHNpemUgb2YgMTYuIFdlIHN0aWNrIHRvIG91cgogCSAqIHR4IHJpbmcgc2l6ZSBmb3Igbm93LgogCSAqLwotCWZvciAoaSA9IDA7IGkgPCBUWF9FTlRSSUVTOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgcnQyeDAwZGV2LT5vcHMtPnR4LT5lbnRyeV9udW07IGkrKykgewogCQlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFNUQV9DU1I0LCAmcmVnKTsKIAkJaWYgKCFydDJ4MDBfZ2V0X2ZpZWxkMzIocmVnLCBTVEFfQ1NSNF9WQUxJRCkpCiAJCQlicmVhazsKQEAgLTI4MjQsNiArMjg3OSw3IEBACiAJLmNvbmZfdHgJCT0gcnQ2MXBjaV9jb25mX3R4LAogCS5nZXRfdHNmCQk9IHJ0NjFwY2lfZ2V0X3RzZiwKIAkucmZraWxsX3BvbGwJCT0gcnQyeDAwbWFjX3Jma2lsbF9wb2xsLAorCS5mbHVzaAkJCT0gcnQyeDAwbWFjX2ZsdXNoLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBydDJ4MDBsaWJfb3BzIHJ0NjFwY2lfcnQyeDAwX29wcyA9IHsKQEAgLTI4NDIsMTAgKzI4OTgsMTEgQEAKIAkubGlua19zdGF0cwkJPSBydDYxcGNpX2xpbmtfc3RhdHMsCiAJLnJlc2V0X3R1bmVyCQk9IHJ0NjFwY2lfcmVzZXRfdHVuZXIsCiAJLmxpbmtfdHVuZXIJCT0gcnQ2MXBjaV9saW5rX3R1bmVyLAorCS5zdGFydF9xdWV1ZQkJPSBydDYxcGNpX3N0YXJ0X3F1ZXVlLAorCS5raWNrX3F1ZXVlCQk9IHJ0NjFwY2lfa2lja19xdWV1ZSwKKwkuc3RvcF9xdWV1ZQkJPSBydDYxcGNpX3N0b3BfcXVldWUsCiAJLndyaXRlX3R4X2Rlc2MJCT0gcnQ2MXBjaV93cml0ZV90eF9kZXNjLAogCS53cml0ZV9iZWFjb24JCT0gcnQ2MXBjaV93cml0ZV9iZWFjb24sCi0JLmtpY2tfdHhfcXVldWUJCT0gcnQ2MXBjaV9raWNrX3R4X3F1ZXVlLAotCS5raWxsX3R4X3F1ZXVlCQk9IHJ0NjFwY2lfa2lsbF90eF9xdWV1ZSwKIAkuZmlsbF9yeGRvbmUJCT0gcnQ2MXBjaV9maWxsX3J4ZG9uZSwKIAkuY29uZmlnX3NoYXJlZF9rZXkJPSBydDYxcGNpX2NvbmZpZ19zaGFyZWRfa2V5LAogCS5jb25maWdfcGFpcndpc2Vfa2V5CT0gcnQ2MXBjaV9jb25maWdfcGFpcndpc2Vfa2V5LApAQCAtMjg1NywyMSArMjkxNCwyMSBAQAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkYXRhX3F1ZXVlX2Rlc2MgcnQ2MXBjaV9xdWV1ZV9yeCA9IHsKLQkuZW50cnlfbnVtCQk9IFJYX0VOVFJJRVMsCisJLmVudHJ5X251bQkJPSAzMiwKIAkuZGF0YV9zaXplCQk9IERBVEFfRlJBTUVfU0laRSwKIAkuZGVzY19zaXplCQk9IFJYRF9ERVNDX1NJWkUsCiAJLnByaXZfc2l6ZQkJPSBzaXplb2Yoc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfcGNpKSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGF0YV9xdWV1ZV9kZXNjIHJ0NjFwY2lfcXVldWVfdHggPSB7Ci0JLmVudHJ5X251bQkJPSBUWF9FTlRSSUVTLAorCS5lbnRyeV9udW0JCT0gMzIsCiAJLmRhdGFfc2l6ZQkJPSBEQVRBX0ZSQU1FX1NJWkUsCiAJLmRlc2Nfc2l6ZQkJPSBUWERfREVTQ19TSVpFLAogCS5wcml2X3NpemUJCT0gc2l6ZW9mKHN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3BjaSksCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRhdGFfcXVldWVfZGVzYyBydDYxcGNpX3F1ZXVlX2JjbiA9IHsKLQkuZW50cnlfbnVtCQk9IDQgKiBCRUFDT05fRU5UUklFUywKKwkuZW50cnlfbnVtCQk9IDQsCiAJLmRhdGFfc2l6ZQkJPSAwLCAvKiBObyBETUEgcmVxdWlyZWQgZm9yIGJlYWNvbnMgKi8KIAkuZGVzY19zaXplCQk9IFRYSU5GT19TSVpFLAogCS5wcml2X3NpemUJCT0gc2l6ZW9mKHN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3BjaSksCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ2MXBjaS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NjFwY2kuaAppbmRleCBlMmU3MjhhLi5lM2NkNmRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ2MXBjaS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDYxcGNpLmgKQEAgLTQxMiw3ICs0MTIsNyBAQAogICogRFJPUF9WRVJTSU9OX0VSUk9SOiBEcm9wIHZlcnNpb24gZXJyb3IgZnJhbWUuCiAgKiBEUk9QX01VTFRJQ0FTVDogRHJvcCBtdWx0aWNhc3QgZnJhbWVzLgogICogRFJPUF9CT1JBRENBU1Q6IERyb3AgYnJvYWRjYXN0IGZyYW1lcy4KLSAqIFJPUF9BQ0tfQ1RTOiBEcm9wIHJlY2VpdmVkIEFDSyBhbmQgQ1RTLgorICogRFJPUF9BQ0tfQ1RTOiBEcm9wIHJlY2VpdmVkIEFDSyBhbmQgQ1RTLgogICovCiAjZGVmaW5lIFRYUlhfQ1NSMAkJCTB4MzA0MAogI2RlZmluZSBUWFJYX0NTUjBfUlhfQUNLX1RJTUVPVVQJRklFTEQzMigweDAwMDAwMWZmKQpAQCAtNzg0LDI1ICs3ODQsMjUgQEAKICAqLwogCiAvKgotICogQUMwX0JBU0VfQ1NSOiBBQ19CSyBiYXNlIGFkZHJlc3MuCisgKiBBQzBfQkFTRV9DU1I6IEFDX1ZPIGJhc2UgYWRkcmVzcy4KICAqLwogI2RlZmluZSBBQzBfQkFTRV9DU1IJCQkweDM0MDAKICNkZWZpbmUgQUMwX0JBU0VfQ1NSX1JJTkdfUkVHSVNURVIJRklFTEQzMigweGZmZmZmZmZmKQogCiAvKgotICogQUMxX0JBU0VfQ1NSOiBBQ19CRSBiYXNlIGFkZHJlc3MuCisgKiBBQzFfQkFTRV9DU1I6IEFDX1ZJIGJhc2UgYWRkcmVzcy4KICAqLwogI2RlZmluZSBBQzFfQkFTRV9DU1IJCQkweDM0MDQKICNkZWZpbmUgQUMxX0JBU0VfQ1NSX1JJTkdfUkVHSVNURVIJRklFTEQzMigweGZmZmZmZmZmKQogCiAvKgotICogQUMyX0JBU0VfQ1NSOiBBQ19WSSBiYXNlIGFkZHJlc3MuCisgKiBBQzJfQkFTRV9DU1I6IEFDX0JFIGJhc2UgYWRkcmVzcy4KICAqLwogI2RlZmluZSBBQzJfQkFTRV9DU1IJCQkweDM0MDgKICNkZWZpbmUgQUMyX0JBU0VfQ1NSX1JJTkdfUkVHSVNURVIJRklFTEQzMigweGZmZmZmZmZmKQogCiAvKgotICogQUMzX0JBU0VfQ1NSOiBBQ19WTyBiYXNlIGFkZHJlc3MuCisgKiBBQzNfQkFTRV9DU1I6IEFDX0JLIGJhc2UgYWRkcmVzcy4KICAqLwogI2RlZmluZSBBQzNfQkFTRV9DU1IJCQkweDM0MGMKICNkZWZpbmUgQUMzX0JBU0VfQ1NSX1JJTkdfUkVHSVNURVIJRklFTEQzMigweGZmZmZmZmZmKQpAQCAtODE0LDcgKzgxNCw3IEBACiAjZGVmaW5lIE1HTVRfQkFTRV9DU1JfUklOR19SRUdJU1RFUglGSUVMRDMyKDB4ZmZmZmZmZmYpCiAKIC8qCi0gKiBUWF9SSU5HX0NTUjA6IFRYIFJpbmcgc2l6ZSBmb3IgQUNfQkssIEFDX0JFLCBBQ19WSSwgQUNfVk8uCisgKiBUWF9SSU5HX0NTUjA6IFRYIFJpbmcgc2l6ZSBmb3IgQUNfVk8sIEFDX1ZJLCBBQ19CRSwgQUNfQksuCiAgKi8KICNkZWZpbmUgVFhfUklOR19DU1IwCQkJMHgzNDE4CiAjZGVmaW5lIFRYX1JJTkdfQ1NSMF9BQzBfUklOR19TSVpFCUZJRUxEMzIoMHgwMDAwMDBmZikKQEAgLTgzMywxMCArODMzLDEwIEBACiAKIC8qCiAgKiBBSUZTTl9DU1I6IEFJRlNOIGZvciBlYWNoIEVEQ0EgQUMuCi0gKiBBSUZTTjA6IEZvciBBQ19CSy4KLSAqIEFJRlNOMTogRm9yIEFDX0JFLgotICogQUlGU04yOiBGb3IgQUNfVkkuCi0gKiBBSUZTTjM6IEZvciBBQ19WTy4KKyAqIEFJRlNOMDogRm9yIEFDX1ZPLgorICogQUlGU04xOiBGb3IgQUNfVkkuCisgKiBBSUZTTjI6IEZvciBBQ19CRS4KKyAqIEFJRlNOMzogRm9yIEFDX0JLLgogICovCiAjZGVmaW5lIEFJRlNOX0NTUgkJCTB4MzQyMAogI2RlZmluZSBBSUZTTl9DU1JfQUlGU04wCQlGSUVMRDMyKDB4MDAwMDAwMGYpCkBAIC04NDYsMTAgKzg0NiwxMCBAQAogCiAvKgogICogQ1dNSU5fQ1NSOiBDV21pbiBmb3IgZWFjaCBFRENBIEFDLgotICogQ1dNSU4wOiBGb3IgQUNfQksuCi0gKiBDV01JTjE6IEZvciBBQ19CRS4KLSAqIENXTUlOMjogRm9yIEFDX1ZJLgotICogQ1dNSU4zOiBGb3IgQUNfVk8uCisgKiBDV01JTjA6IEZvciBBQ19WTy4KKyAqIENXTUlOMTogRm9yIEFDX1ZJLgorICogQ1dNSU4yOiBGb3IgQUNfQkUuCisgKiBDV01JTjM6IEZvciBBQ19CSy4KICAqLwogI2RlZmluZSBDV01JTl9DU1IJCQkweDM0MjQKICNkZWZpbmUgQ1dNSU5fQ1NSX0NXTUlOMAkJRklFTEQzMigweDAwMDAwMDBmKQpAQCAtODU5LDEwICs4NTksMTAgQEAKIAogLyoKICAqIENXTUFYX0NTUjogQ1dtYXggZm9yIGVhY2ggRURDQSBBQy4KLSAqIENXTUFYMDogRm9yIEFDX0JLLgotICogQ1dNQVgxOiBGb3IgQUNfQkUuCi0gKiBDV01BWDI6IEZvciBBQ19WSS4KLSAqIENXTUFYMzogRm9yIEFDX1ZPLgorICogQ1dNQVgwOiBGb3IgQUNfVk8uCisgKiBDV01BWDE6IEZvciBBQ19WSS4KKyAqIENXTUFYMjogRm9yIEFDX0JFLgorICogQ1dNQVgzOiBGb3IgQUNfQksuCiAgKi8KICNkZWZpbmUgQ1dNQVhfQ1NSCQkJMHgzNDI4CiAjZGVmaW5lIENXTUFYX0NTUl9DV01BWDAJCUZJRUxEMzIoMHgwMDAwMDAwZikKQEAgLTg4MywxNCArODgzLDE0IEBACiAKIC8qCiAgKiBUWF9DTlRMX0NTUjogS0lDSy9BYm9ydCBUWC4KLSAqIEtJQ0tfVFhfQUMwOiBGb3IgQUNfQksuCi0gKiBLSUNLX1RYX0FDMTogRm9yIEFDX0JFLgotICogS0lDS19UWF9BQzI6IEZvciBBQ19WSS4KLSAqIEtJQ0tfVFhfQUMzOiBGb3IgQUNfVk8uCi0gKiBBQk9SVF9UWF9BQzA6IEZvciBBQ19CSy4KLSAqIEFCT1JUX1RYX0FDMTogRm9yIEFDX0JFLgotICogQUJPUlRfVFhfQUMyOiBGb3IgQUNfVkkuCi0gKiBBQk9SVF9UWF9BQzM6IEZvciBBQ19WTy4KKyAqIEtJQ0tfVFhfQUMwOiBGb3IgQUNfVk8uCisgKiBLSUNLX1RYX0FDMTogRm9yIEFDX1ZJLgorICogS0lDS19UWF9BQzI6IEZvciBBQ19CRS4KKyAqIEtJQ0tfVFhfQUMzOiBGb3IgQUNfQksuCisgKiBBQk9SVF9UWF9BQzA6IEZvciBBQ19WTy4KKyAqIEFCT1JUX1RYX0FDMTogRm9yIEFDX1ZJLgorICogQUJPUlRfVFhfQUMyOiBGb3IgQUNfQkUuCisgKiBBQk9SVF9UWF9BQzM6IEZvciBBQ19CSy4KICAqLwogI2RlZmluZSBUWF9DTlRMX0NTUgkJCTB4MzQzMAogI2RlZmluZSBUWF9DTlRMX0NTUl9LSUNLX1RYX0FDMAkJRklFTEQzMigweDAwMDAwMDAxKQpAQCAtMTAxMCwxOCArMTAxMCwxOCBAQAogI2RlZmluZSBFMlBST01fQ1NSX0xPQURfU1RBVFVTCQlGSUVMRDMyKDB4MDAwMDAwNDApCiAKIC8qCi0gKiBBQ19UWE9QX0NTUjA6IEFDX0JLL0FDX0JFIFRYT1AgcmVnaXN0ZXIuCi0gKiBBQzBfVFhfT1A6IEZvciBBQ19CSywgaW4gdW5pdCBvZiAzMnVzLgotICogQUMxX1RYX09QOiBGb3IgQUNfQkUsIGluIHVuaXQgb2YgMzJ1cy4KKyAqIEFDX1RYT1BfQ1NSMDogQUNfVk8vQUNfVkkgVFhPUCByZWdpc3Rlci4KKyAqIEFDMF9UWF9PUDogRm9yIEFDX1ZPLCBpbiB1bml0IG9mIDMydXMuCisgKiBBQzFfVFhfT1A6IEZvciBBQ19WSSwgaW4gdW5pdCBvZiAzMnVzLgogICovCiAjZGVmaW5lIEFDX1RYT1BfQ1NSMAkJCTB4MzQ3NAogI2RlZmluZSBBQ19UWE9QX0NTUjBfQUMwX1RYX09QCQlGSUVMRDMyKDB4MDAwMGZmZmYpCiAjZGVmaW5lIEFDX1RYT1BfQ1NSMF9BQzFfVFhfT1AJCUZJRUxEMzIoMHhmZmZmMDAwMCkKIAogLyoKLSAqIEFDX1RYT1BfQ1NSMTogQUNfVk8vQUNfVkkgVFhPUCByZWdpc3Rlci4KLSAqIEFDMl9UWF9PUDogRm9yIEFDX1ZJLCBpbiB1bml0IG9mIDMydXMuCi0gKiBBQzNfVFhfT1A6IEZvciBBQ19WTywgaW4gdW5pdCBvZiAzMnVzLgorICogQUNfVFhPUF9DU1IxOiBBQ19CRS9BQ19CSyBUWE9QIHJlZ2lzdGVyLgorICogQUMyX1RYX09QOiBGb3IgQUNfQkUsIGluIHVuaXQgb2YgMzJ1cy4KKyAqIEFDM19UWF9PUDogRm9yIEFDX0JLLCBpbiB1bml0IG9mIDMydXMuCiAgKi8KICNkZWZpbmUgQUNfVFhPUF9DU1IxCQkJMHgzNDc4CiAjZGVmaW5lIEFDX1RYT1BfQ1NSMV9BQzJfVFhfT1AJCUZJRUxEMzIoMHgwMDAwZmZmZikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDczdXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ3M3VzYi5jCmluZGV4IDliZTgwODkuLjBiNGU4NTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDczdXNiLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NzN1c2IuYwpAQCAtNDAsNyArNDAsNyBAQAogLyoKICAqIEFsbG93IGhhcmR3YXJlIGVuY3J5cHRpb24gdG8gYmUgZGlzYWJsZWQuCiAgKi8KLXN0YXRpYyBpbnQgbW9kcGFyYW1fbm9od2NyeXB0ID0gMDsKK3N0YXRpYyBpbnQgbW9kcGFyYW1fbm9od2NyeXB0OwogbW9kdWxlX3BhcmFtX25hbWVkKG5vaHdjcnlwdCwgbW9kcGFyYW1fbm9od2NyeXB0LCBib29sLCBTX0lSVUdPKTsKIE1PRFVMRV9QQVJNX0RFU0Mobm9od2NyeXB0LCAiRGlzYWJsZSBoYXJkd2FyZSBlbmNyeXB0aW9uLiIpOwogCkBAIC0xMDMxLDYgKzEwMzEsNTUgQEAKIH0KIAogLyoKKyAqIFF1ZXVlIGhhbmRsZXJzLgorICovCitzdGF0aWMgdm9pZCBydDczdXNiX3N0YXJ0X3F1ZXVlKHN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZSkKK3sKKwlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gcXVldWUtPnJ0MngwMGRldjsKKwl1MzIgcmVnOworCisJc3dpdGNoIChxdWV1ZS0+cWlkKSB7CisJY2FzZSBRSURfUlg6CisJCXJ0MngwMHVzYl9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgVFhSWF9DU1IwLCAmcmVnKTsKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYUlhfQ1NSMF9ESVNBQkxFX1JYLCAwKTsKKwkJcnQyeDAwdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhSWF9DU1IwLCByZWcpOworCQlicmVhazsKKwljYXNlIFFJRF9CRUFDT046CisJCXJ0MngwMHVzYl9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgVFhSWF9DU1I5LCAmcmVnKTsKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYUlhfQ1NSOV9UU0ZfVElDS0lORywgMSk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWFJYX0NTUjlfVEJUVF9FTkFCTEUsIDEpOworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhSWF9DU1I5X0JFQUNPTl9HRU4sIDEpOworCQlydDJ4MDB1c2JfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWFJYX0NTUjksIHJlZyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgcnQ3M3VzYl9zdG9wX3F1ZXVlKHN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZSkKK3sKKwlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gcXVldWUtPnJ0MngwMGRldjsKKwl1MzIgcmVnOworCisJc3dpdGNoIChxdWV1ZS0+cWlkKSB7CisJY2FzZSBRSURfUlg6CisJCXJ0MngwMHVzYl9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgVFhSWF9DU1IwLCAmcmVnKTsKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYUlhfQ1NSMF9ESVNBQkxFX1JYLCAxKTsKKwkJcnQyeDAwdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhSWF9DU1IwLCByZWcpOworCQlicmVhazsKKwljYXNlIFFJRF9CRUFDT046CisJCXJ0MngwMHVzYl9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgVFhSWF9DU1I5LCAmcmVnKTsKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYUlhfQ1NSOV9UU0ZfVElDS0lORywgMCk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWFJYX0NTUjlfVEJUVF9FTkFCTEUsIDApOworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhSWF9DU1I5X0JFQUNPTl9HRU4sIDApOworCQlydDJ4MDB1c2JfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWFJYX0NTUjksIHJlZyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworLyoKICAqIEZpcm13YXJlIGZ1bmN0aW9ucwogICovCiBzdGF0aWMgY2hhciAqcnQ3M3VzYl9nZXRfZmlybXdhcmVfbmFtZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQpAQCAtMTMyNCwxOCArMTM3Myw2IEBACiAvKgogICogRGV2aWNlIHN0YXRlIHN3aXRjaCBoYW5kbGVycy4KICAqLwotc3RhdGljIHZvaWQgcnQ3M3VzYl90b2dnbGVfcngoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKLQkJCSAgICAgIGVudW0gZGV2X3N0YXRlIHN0YXRlKQotewotCXUzMiByZWc7Ci0KLQlydDJ4MDB1c2JfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRYUlhfQ1NSMCwgJnJlZyk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYUlhfQ1NSMF9ESVNBQkxFX1JYLAotCQkJICAgKHN0YXRlID09IFNUQVRFX1JBRElPX1JYX09GRikgfHwKLQkJCSAgIChzdGF0ZSA9PSBTVEFURV9SQURJT19SWF9PRkZfTElOSykpOwotCXJ0MngwMHVzYl9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYUlhfQ1NSMCwgcmVnKTsKLX0KLQogc3RhdGljIGludCBydDczdXNiX2VuYWJsZV9yYWRpbyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQogewogCS8qCkBAIC0xNDAyLDEyICsxNDM5LDYgQEAKIAljYXNlIFNUQVRFX1JBRElPX09GRjoKIAkJcnQ3M3VzYl9kaXNhYmxlX3JhZGlvKHJ0MngwMGRldik7CiAJCWJyZWFrOwotCWNhc2UgU1RBVEVfUkFESU9fUlhfT046Ci0JY2FzZSBTVEFURV9SQURJT19SWF9PTl9MSU5LOgotCWNhc2UgU1RBVEVfUkFESU9fUlhfT0ZGOgotCWNhc2UgU1RBVEVfUkFESU9fUlhfT0ZGX0xJTks6Ci0JCXJ0NzN1c2JfdG9nZ2xlX3J4KHJ0MngwMGRldiwgc3RhdGUpOwotCQlicmVhazsKIAljYXNlIFNUQVRFX1JBRElPX0lSUV9PTjoKIAljYXNlIFNUQVRFX1JBRElPX0lSUV9PTl9JU1I6CiAJY2FzZSBTVEFURV9SQURJT19JUlFfT0ZGOgpAQCAtMTQ3MiwxMCArMTUwMywxMCBAQAogCXJ0MngwMF9kZXNjX3dyaXRlKHR4ZCwgMCwgd29yZCk7CiAKIAlydDJ4MDBfZGVzY19yZWFkKHR4ZCwgMSwgJndvcmQpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cxX0hPU1RfUV9JRCwgdHhkZXNjLT5xaWQpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cxX0FJRlNOLCB0eGRlc2MtPmFpZnMpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cxX0NXTUlOLCB0eGRlc2MtPmN3X21pbik7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzFfQ1dNQVgsIHR4ZGVzYy0+Y3dfbWF4KTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMV9IT1NUX1FfSUQsIGVudHJ5LT5xdWV1ZS0+cWlkKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMV9BSUZTTiwgZW50cnktPnF1ZXVlLT5haWZzKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMV9DV01JTiwgZW50cnktPnF1ZXVlLT5jd19taW4pOworCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cxX0NXTUFYLCBlbnRyeS0+cXVldWUtPmN3X21heCk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzFfSVZfT0ZGU0VULCB0eGRlc2MtPml2X29mZnNldCk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzFfSFdfU0VRVUVOQ0UsCiAJCQkgICB0ZXN0X2JpdChFTlRSWV9UWERfR0VORVJBVEVfU0VRLCAmdHhkZXNjLT5mbGFncykpOwpAQCAtMTUxNSw2ICsxNTQ2LDcgQEAKIHsKIAlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gZW50cnktPnF1ZXVlLT5ydDJ4MDBkZXY7CiAJdW5zaWduZWQgaW50IGJlYWNvbl9iYXNlOworCXVuc2lnbmVkIGludCBwYWRkaW5nX2xlbjsKIAl1MzIgcmVnOwogCiAJLyoKQEAgLTE1NDIsMTEgKzE1NzQsMTMgQEAKIAlydDJ4MDBkZWJ1Z19kdW1wX2ZyYW1lKHJ0MngwMGRldiwgRFVNUF9GUkFNRV9CRUFDT04sIGVudHJ5LT5za2IpOwogCiAJLyoKLQkgKiBXcml0ZSBlbnRpcmUgYmVhY29uIHdpdGggZGVzY3JpcHRvciB0byByZWdpc3Rlci4KKwkgKiBXcml0ZSBlbnRpcmUgYmVhY29uIHdpdGggZGVzY3JpcHRvciBhbmQgcGFkZGluZyB0byByZWdpc3Rlci4KIAkgKi8KKwlwYWRkaW5nX2xlbiA9IHJvdW5kdXAoZW50cnktPnNrYi0+bGVuLCA0KSAtIGVudHJ5LT5za2ItPmxlbjsKKwlza2JfcGFkKGVudHJ5LT5za2IsIHBhZGRpbmdfbGVuKTsKIAliZWFjb25fYmFzZSA9IEhXX0JFQUNPTl9PRkZTRVQoZW50cnktPmVudHJ5X2lkeCk7Ci0JcnQyeDAwdXNiX3JlZ2lzdGVyX211bHRpd3JpdGUocnQyeDAwZGV2LCBiZWFjb25fYmFzZSwKLQkJCQkgICAgICBlbnRyeS0+c2tiLT5kYXRhLCBlbnRyeS0+c2tiLT5sZW4pOworCXJ0MngwMHVzYl9yZWdpc3Rlcl9tdWx0aXdyaXRlKHJ0MngwMGRldiwgYmVhY29uX2Jhc2UsIGVudHJ5LT5za2ItPmRhdGEsCisJCQkJICAgICAgZW50cnktPnNrYi0+bGVuICsgcGFkZGluZ19sZW4pOwogCiAJLyoKIAkgKiBFbmFibGUgYmVhY29uaW5nIGFnYWluLgpAQCAtMTU4MiwxNCArMTYxNiw2IEBACiAJcmV0dXJuIGxlbmd0aDsKIH0KIAotc3RhdGljIHZvaWQgcnQ3M3VzYl9raWxsX3R4X3F1ZXVlKHN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZSkKLXsKLQlpZiAocXVldWUtPnFpZCA9PSBRSURfQkVBQ09OKQotCQlydDJ4MDB1c2JfcmVnaXN0ZXJfd3JpdGUocXVldWUtPnJ0MngwMGRldiwgVFhSWF9DU1I5LCAwKTsKLQotCXJ0MngwMHVzYl9raWxsX3R4X3F1ZXVlKHF1ZXVlKTsKLX0KLQogLyoKICAqIFJYIGNvbnRyb2wgaGFuZGxlcnMKICAqLwpAQCAtMjI2NCw2ICsyMjkwLDcgQEAKIAkuY29uZl90eAkJPSBydDczdXNiX2NvbmZfdHgsCiAJLmdldF90c2YJCT0gcnQ3M3VzYl9nZXRfdHNmLAogCS5yZmtpbGxfcG9sbAkJPSBydDJ4MDBtYWNfcmZraWxsX3BvbGwsCisJLmZsdXNoCQkJPSBydDJ4MDBtYWNfZmx1c2gsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJ0MngwMGxpYl9vcHMgcnQ3M3VzYl9ydDJ4MDBfb3BzID0gewpAQCAtMjI4MCwxMSArMjMwNywxMyBAQAogCS5yZXNldF90dW5lcgkJPSBydDczdXNiX3Jlc2V0X3R1bmVyLAogCS5saW5rX3R1bmVyCQk9IHJ0NzN1c2JfbGlua190dW5lciwKIAkud2F0Y2hkb2cJCT0gcnQyeDAwdXNiX3dhdGNoZG9nLAorCS5zdGFydF9xdWV1ZQkJPSBydDczdXNiX3N0YXJ0X3F1ZXVlLAorCS5raWNrX3F1ZXVlCQk9IHJ0MngwMHVzYl9raWNrX3F1ZXVlLAorCS5zdG9wX3F1ZXVlCQk9IHJ0NzN1c2Jfc3RvcF9xdWV1ZSwKKwkuZmx1c2hfcXVldWUJCT0gcnQyeDAwdXNiX2ZsdXNoX3F1ZXVlLAogCS53cml0ZV90eF9kZXNjCQk9IHJ0NzN1c2Jfd3JpdGVfdHhfZGVzYywKIAkud3JpdGVfYmVhY29uCQk9IHJ0NzN1c2Jfd3JpdGVfYmVhY29uLAogCS5nZXRfdHhfZGF0YV9sZW4JPSBydDczdXNiX2dldF90eF9kYXRhX2xlbiwKLQkua2lja190eF9xdWV1ZQkJPSBydDJ4MDB1c2Jfa2lja190eF9xdWV1ZSwKLQkua2lsbF90eF9xdWV1ZQkJPSBydDczdXNiX2tpbGxfdHhfcXVldWUsCiAJLmZpbGxfcnhkb25lCQk9IHJ0NzN1c2JfZmlsbF9yeGRvbmUsCiAJLmNvbmZpZ19zaGFyZWRfa2V5CT0gcnQ3M3VzYl9jb25maWdfc2hhcmVkX2tleSwKIAkuY29uZmlnX3BhaXJ3aXNlX2tleQk9IHJ0NzN1c2JfY29uZmlnX3BhaXJ3aXNlX2tleSwKQEAgLTIyOTYsMjEgKzIzMjUsMjEgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGF0YV9xdWV1ZV9kZXNjIHJ0NzN1c2JfcXVldWVfcnggPSB7Ci0JLmVudHJ5X251bQkJPSBSWF9FTlRSSUVTLAorCS5lbnRyeV9udW0JCT0gMzIsCiAJLmRhdGFfc2l6ZQkJPSBEQVRBX0ZSQU1FX1NJWkUsCiAJLmRlc2Nfc2l6ZQkJPSBSWERfREVTQ19TSVpFLAogCS5wcml2X3NpemUJCT0gc2l6ZW9mKHN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3VzYiksCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRhdGFfcXVldWVfZGVzYyBydDczdXNiX3F1ZXVlX3R4ID0gewotCS5lbnRyeV9udW0JCT0gVFhfRU5UUklFUywKKwkuZW50cnlfbnVtCQk9IDMyLAogCS5kYXRhX3NpemUJCT0gREFUQV9GUkFNRV9TSVpFLAogCS5kZXNjX3NpemUJCT0gVFhEX0RFU0NfU0laRSwKIAkucHJpdl9zaXplCQk9IHNpemVvZihzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl91c2IpLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkYXRhX3F1ZXVlX2Rlc2MgcnQ3M3VzYl9xdWV1ZV9iY24gPSB7Ci0JLmVudHJ5X251bQkJPSA0ICogQkVBQ09OX0VOVFJJRVMsCisJLmVudHJ5X251bQkJPSA0LAogCS5kYXRhX3NpemUJCT0gTUdNVF9GUkFNRV9TSVpFLAogCS5kZXNjX3NpemUJCT0gVFhJTkZPX1NJWkUsCiAJLnByaXZfc2l6ZQkJPSBzaXplb2Yoc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfdXNiKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDczdXNiLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ3M3VzYi5oCmluZGV4IDQ0ZDViMmIuLjlmNmI0NzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDczdXNiLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NzN1c2IuaApAQCAtMzIyLDcgKzMyMiw3IEBACiAgKiBEUk9QX1ZFUlNJT05fRVJST1I6IERyb3AgdmVyc2lvbiBlcnJvciBmcmFtZS4KICAqIERST1BfTVVMVElDQVNUOiBEcm9wIG11bHRpY2FzdCBmcmFtZXMuCiAgKiBEUk9QX0JPUkFEQ0FTVDogRHJvcCBicm9hZGNhc3QgZnJhbWVzLgotICogUk9QX0FDS19DVFM6IERyb3AgcmVjZWl2ZWQgQUNLIGFuZCBDVFMuCisgKiBEUk9QX0FDS19DVFM6IERyb3AgcmVjZWl2ZWQgQUNLIGFuZCBDVFMuCiAgKi8KICNkZWZpbmUgVFhSWF9DU1IwCQkJMHgzMDQwCiAjZGVmaW5lIFRYUlhfQ1NSMF9SWF9BQ0tfVElNRU9VVAlGSUVMRDMyKDB4MDAwMDAxZmYpCkBAIC02ODksMTAgKzY4OSwxMCBAQAogCiAvKgogICogQUlGU05fQ1NSOiBBSUZTTiBmb3IgZWFjaCBFRENBIEFDLgotICogQUlGU04wOiBGb3IgQUNfQksuCi0gKiBBSUZTTjE6IEZvciBBQ19CRS4KLSAqIEFJRlNOMjogRm9yIEFDX1ZJLgotICogQUlGU04zOiBGb3IgQUNfVk8uCisgKiBBSUZTTjA6IEZvciBBQ19WTy4KKyAqIEFJRlNOMTogRm9yIEFDX1ZJLgorICogQUlGU04yOiBGb3IgQUNfQkUuCisgKiBBSUZTTjM6IEZvciBBQ19CSy4KICAqLwogI2RlZmluZSBBSUZTTl9DU1IJCQkweDA0MDAKICNkZWZpbmUgQUlGU05fQ1NSX0FJRlNOMAkJRklFTEQzMigweDAwMDAwMDBmKQpAQCAtNzAyLDEwICs3MDIsMTAgQEAKIAogLyoKICAqIENXTUlOX0NTUjogQ1dtaW4gZm9yIGVhY2ggRURDQSBBQy4KLSAqIENXTUlOMDogRm9yIEFDX0JLLgotICogQ1dNSU4xOiBGb3IgQUNfQkUuCi0gKiBDV01JTjI6IEZvciBBQ19WSS4KLSAqIENXTUlOMzogRm9yIEFDX1ZPLgorICogQ1dNSU4wOiBGb3IgQUNfVk8uCisgKiBDV01JTjE6IEZvciBBQ19WSS4KKyAqIENXTUlOMjogRm9yIEFDX0JFLgorICogQ1dNSU4zOiBGb3IgQUNfQksuCiAgKi8KICNkZWZpbmUgQ1dNSU5fQ1NSCQkJMHgwNDA0CiAjZGVmaW5lIENXTUlOX0NTUl9DV01JTjAJCUZJRUxEMzIoMHgwMDAwMDAwZikKQEAgLTcxNSwxMCArNzE1LDEwIEBACiAKIC8qCiAgKiBDV01BWF9DU1I6IENXbWF4IGZvciBlYWNoIEVEQ0EgQUMuCi0gKiBDV01BWDA6IEZvciBBQ19CSy4KLSAqIENXTUFYMTogRm9yIEFDX0JFLgotICogQ1dNQVgyOiBGb3IgQUNfVkkuCi0gKiBDV01BWDM6IEZvciBBQ19WTy4KKyAqIENXTUFYMDogRm9yIEFDX1ZPLgorICogQ1dNQVgxOiBGb3IgQUNfVkkuCisgKiBDV01BWDI6IEZvciBBQ19CRS4KKyAqIENXTUFYMzogRm9yIEFDX0JLLgogICovCiAjZGVmaW5lIENXTUFYX0NTUgkJCTB4MDQwOAogI2RlZmluZSBDV01BWF9DU1JfQ1dNQVgwCQlGSUVMRDMyKDB4MDAwMDAwMGYpCkBAIC03MjcsMTggKzcyNywxOCBAQAogI2RlZmluZSBDV01BWF9DU1JfQ1dNQVgzCQlGSUVMRDMyKDB4MDAwMGYwMDApCiAKIC8qCi0gKiBBQ19UWE9QX0NTUjA6IEFDX0JLL0FDX0JFIFRYT1AgcmVnaXN0ZXIuCi0gKiBBQzBfVFhfT1A6IEZvciBBQ19CSywgaW4gdW5pdCBvZiAzMnVzLgotICogQUMxX1RYX09QOiBGb3IgQUNfQkUsIGluIHVuaXQgb2YgMzJ1cy4KKyAqIEFDX1RYT1BfQ1NSMDogQUNfVk8vQUNfVkkgVFhPUCByZWdpc3Rlci4KKyAqIEFDMF9UWF9PUDogRm9yIEFDX1ZPLCBpbiB1bml0IG9mIDMydXMuCisgKiBBQzFfVFhfT1A6IEZvciBBQ19WSSwgaW4gdW5pdCBvZiAzMnVzLgogICovCiAjZGVmaW5lIEFDX1RYT1BfQ1NSMAkJCTB4MDQwYwogI2RlZmluZSBBQ19UWE9QX0NTUjBfQUMwX1RYX09QCQlGSUVMRDMyKDB4MDAwMGZmZmYpCiAjZGVmaW5lIEFDX1RYT1BfQ1NSMF9BQzFfVFhfT1AJCUZJRUxEMzIoMHhmZmZmMDAwMCkKIAogLyoKLSAqIEFDX1RYT1BfQ1NSMTogQUNfVk8vQUNfVkkgVFhPUCByZWdpc3Rlci4KLSAqIEFDMl9UWF9PUDogRm9yIEFDX1ZJLCBpbiB1bml0IG9mIDMydXMuCi0gKiBBQzNfVFhfT1A6IEZvciBBQ19WTywgaW4gdW5pdCBvZiAzMnVzLgorICogQUNfVFhPUF9DU1IxOiBBQ19CRS9BQ19CSyBUWE9QIHJlZ2lzdGVyLgorICogQUMyX1RYX09QOiBGb3IgQUNfQkUsIGluIHVuaXQgb2YgMzJ1cy4KKyAqIEFDM19UWF9PUDogRm9yIEFDX0JLLCBpbiB1bml0IG9mIDMydXMuCiAgKi8KICNkZWZpbmUgQUNfVFhPUF9DU1IxCQkJMHgwNDEwCiAjZGVmaW5lIEFDX1RYT1BfQ1NSMV9BQzJfVFhfT1AJCUZJRUxEMzIoMHgwMDAwZmZmZikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L01ha2VmaWxlCmluZGV4IDkzY2JmYmUuLjk5NzU2OTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9NYWtlZmlsZQpAQCAtMSw3ICsxLDIgQEAKLXJ0bDgxODAtb2JqcwkJOj0gcnRsODE4MF9kZXYubyBydGw4MTgwX3J0bDgyMjUubyBydGw4MTgwX3NhMjQwMC5vIHJ0bDgxODBfbWF4MjgyMC5vIHJ0bDgxODBfZ3JmNTEwMS5vCi1ydGw4MTg3LW9ianMJCTo9IHJ0bDgxODdfZGV2Lm8gcnRsODE4N19ydGw4MjI1Lm8gcnRsODE4N19sZWRzLm8gcnRsODE4N19yZmtpbGwubwotCi1vYmotJChDT05GSUdfUlRMODE4MCkJKz0gcnRsODE4MC5vCi1vYmotJChDT05GSUdfUlRMODE4NykJKz0gcnRsODE4Ny5vCi0KLQorb2JqLSQoQ09ORklHX1JUTDgxODApCSs9IHJ0bDgxODAvCitvYmotJChDT05GSUdfUlRMODE4NykJKz0gcnRsODE4Ny8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4MC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4MC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjRmYjg1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTgwL01ha2VmaWxlCkBAIC0wLDAgKzEsNSBAQAorcnRsODE4MC1vYmpzCQk6PSBkZXYubyBydGw4MjI1Lm8gc2EyNDAwLm8gbWF4MjgyMC5vIGdyZjUxMDEubworCitvYmotJChDT05GSUdfUlRMODE4MCkJKz0gcnRsODE4MC5vCisKK2NjZmxhZ3MteSArPSAtSWRyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4MC9kZXYuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4MC9kZXYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODUxY2JjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTgwL2Rldi5jCkBAIC0wLDAgKzEsMTE4OCBAQAorCisvKgorICogTGludXggZGV2aWNlIGRyaXZlciBmb3IgUlRMODE4MCAvIFJUTDgxODUKKyAqCisgKiBDb3B5cmlnaHQgMjAwNyBNaWNoYWVsIFd1IDxmbGFtaW5naWNlQHNvdXJtaWxrLm5ldD4KKyAqIENvcHlyaWdodCAyMDA3IEFuZHJlYSBNZXJlbGxvIDxhbmRyZWFtcmxAdGlzY2FsaS5pdD4KKyAqCisgKiBCYXNlZCBvbiB0aGUgcjgxODAgZHJpdmVyLCB3aGljaCBpczoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDUgQW5kcmVhIE1lcmVsbG8gPGFuZHJlYW1ybEB0aXNjYWxpLml0PiwgZXQgYWwuCisgKgorICogVGhhbmtzIHRvIFJlYWx0ZWsgZm9yIHRoZWlyIHN1cHBvcnQhCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZWVwcm9tXzkzY3g2Lmg+CisjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CisKKyNpbmNsdWRlICJydGw4MTgwLmgiCisjaW5jbHVkZSAicnRsODIyNS5oIgorI2luY2x1ZGUgInNhMjQwMC5oIgorI2luY2x1ZGUgIm1heDI4MjAuaCIKKyNpbmNsdWRlICJncmY1MTAxLmgiCisKK01PRFVMRV9BVVRIT1IoIk1pY2hhZWwgV3UgPGZsYW1pbmdpY2VAc291cm1pbGsubmV0PiIpOworTU9EVUxFX0FVVEhPUigiQW5kcmVhIE1lcmVsbG8gPGFuZHJlYW1ybEB0aXNjYWxpLml0PiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJSVEw4MTgwIC8gUlRMODE4NSBQQ0kgd2lyZWxlc3MgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShydGw4MTgwX3RhYmxlKSA9IHsKKwkvKiBydGw4MTg1ICovCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfUkVBTFRFSywgMHg4MTg1KSB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0JFTEtJTiwgMHg3MDBmKSB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0JFTEtJTiwgMHg3MDFmKSB9LAorCisJLyogcnRsODE4MCAqLworCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1JFQUxURUssIDB4ODE4MCkgfSwKKwl7IFBDSV9ERVZJQ0UoMHgxNzk5LCAweDYwMDEpIH0sCisJeyBQQ0lfREVWSUNFKDB4MTc5OSwgMHg2MDIwKSB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0RMSU5LLCAweDMzMDApIH0sCisJeyB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgcnRsODE4MF90YWJsZSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgcnRsODE4eF9yYXRlc1tdID0geworCXsgLmJpdHJhdGUgPSAxMCwgLmh3X3ZhbHVlID0gMCwgfSwKKwl7IC5iaXRyYXRlID0gMjAsIC5od192YWx1ZSA9IDEsIH0sCisJeyAuYml0cmF0ZSA9IDU1LCAuaHdfdmFsdWUgPSAyLCB9LAorCXsgLmJpdHJhdGUgPSAxMTAsIC5od192YWx1ZSA9IDMsIH0sCisJeyAuYml0cmF0ZSA9IDYwLCAuaHdfdmFsdWUgPSA0LCB9LAorCXsgLmJpdHJhdGUgPSA5MCwgLmh3X3ZhbHVlID0gNSwgfSwKKwl7IC5iaXRyYXRlID0gMTIwLCAuaHdfdmFsdWUgPSA2LCB9LAorCXsgLmJpdHJhdGUgPSAxODAsIC5od192YWx1ZSA9IDcsIH0sCisJeyAuYml0cmF0ZSA9IDI0MCwgLmh3X3ZhbHVlID0gOCwgfSwKKwl7IC5iaXRyYXRlID0gMzYwLCAuaHdfdmFsdWUgPSA5LCB9LAorCXsgLmJpdHJhdGUgPSA0ODAsIC5od192YWx1ZSA9IDEwLCB9LAorCXsgLmJpdHJhdGUgPSA1NDAsIC5od192YWx1ZSA9IDExLCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCBydGw4MTh4X2NoYW5uZWxzW10gPSB7CisJeyAuY2VudGVyX2ZyZXEgPSAyNDEyIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDE3IH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDIyIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDI3IH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDMyIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDM3IH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDQyIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDQ3IH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDUyIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDU3IH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDYyIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDY3IH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDcyIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDg0IH0sCit9OworCisKK3ZvaWQgcnRsODE4MF93cml0ZV9waHkoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCB1OCBhZGRyLCB1MzIgZGF0YSkKK3sKKwlzdHJ1Y3QgcnRsODE4MF9wcml2ICpwcml2ID0gZGV2LT5wcml2OworCWludCBpID0gMTA7CisJdTMyIGJ1ZjsKKworCWJ1ZiA9IChkYXRhIDw8IDgpIHwgYWRkcjsKKworCXJ0bDgxOHhfaW93cml0ZTMyKHByaXYsIChfX2xlMzIgX19pb21lbSAqKSZwcml2LT5tYXAtPlBIWVswXSwgYnVmIHwgMHg4MCk7CisJd2hpbGUgKGktLSkgeworCQlydGw4MTh4X2lvd3JpdGUzMihwcml2LCAoX19sZTMyIF9faW9tZW0gKikmcHJpdi0+bWFwLT5QSFlbMF0sIGJ1Zik7CisJCWlmIChydGw4MTh4X2lvcmVhZDgocHJpdiwgJnByaXYtPm1hcC0+UEhZWzJdKSA9PSAoZGF0YSAmIDB4RkYpKQorCQkJcmV0dXJuOworCX0KK30KKworc3RhdGljIHZvaWQgcnRsODE4MF9oYW5kbGVfcngoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQoreworCXN0cnVjdCBydGw4MTgwX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CisJdW5zaWduZWQgaW50IGNvdW50ID0gMzI7CisJdTggc2lnbmFsLCBhZ2MsIHNxOworCisJd2hpbGUgKGNvdW50LS0pIHsKKwkJc3RydWN0IHJ0bDgxODBfcnhfZGVzYyAqZW50cnkgPSAmcHJpdi0+cnhfcmluZ1twcml2LT5yeF9pZHhdOworCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcHJpdi0+cnhfYnVmW3ByaXYtPnJ4X2lkeF07CisJCXUzMiBmbGFncyA9IGxlMzJfdG9fY3B1KGVudHJ5LT5mbGFncyk7CisKKwkJaWYgKGZsYWdzICYgUlRMODE4WF9SWF9ERVNDX0ZMQUdfT1dOKQorCQkJcmV0dXJuOworCisJCWlmICh1bmxpa2VseShmbGFncyAmIChSVEw4MThYX1JYX0RFU0NfRkxBR19ETUFfRkFJTCB8CisJCQkJICAgICAgUlRMODE4WF9SWF9ERVNDX0ZMQUdfRk9GIHwKKwkJCQkgICAgICBSVEw4MThYX1JYX0RFU0NfRkxBR19SWF9FUlIpKSkKKwkJCWdvdG8gZG9uZTsKKwkJZWxzZSB7CisJCQl1MzIgZmxhZ3MyID0gbGUzMl90b19jcHUoZW50cnktPmZsYWdzMik7CisJCQlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyByeF9zdGF0dXMgPSB7MH07CisJCQlzdHJ1Y3Qgc2tfYnVmZiAqbmV3X3NrYiA9IGRldl9hbGxvY19za2IoTUFYX1JYX1NJWkUpOworCisJCQlpZiAodW5saWtlbHkoIW5ld19za2IpKQorCQkJCWdvdG8gZG9uZTsKKworCQkJcGNpX3VubWFwX3NpbmdsZShwcml2LT5wZGV2LAorCQkJCQkgKigoZG1hX2FkZHJfdCAqKXNrYi0+Y2IpLAorCQkJCQkgTUFYX1JYX1NJWkUsIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQlza2JfcHV0KHNrYiwgZmxhZ3MgJiAweEZGRik7CisKKwkJCXJ4X3N0YXR1cy5hbnRlbm5hID0gKGZsYWdzMiA+PiAxNSkgJiAxOworCQkJcnhfc3RhdHVzLnJhdGVfaWR4ID0gKGZsYWdzID4+IDIwKSAmIDB4RjsKKwkJCWFnYyA9IChmbGFnczIgPj4gMTcpICYgMHg3RjsKKwkJCWlmIChwcml2LT5yODE4NSkgeworCQkJCWlmIChyeF9zdGF0dXMucmF0ZV9pZHggPiAzKQorCQkJCQlzaWduYWwgPSA5MCAtIGNsYW1wX3QodTgsIGFnYywgMjUsIDkwKTsKKwkJCQllbHNlCisJCQkJCXNpZ25hbCA9IDk1IC0gY2xhbXBfdCh1OCwgYWdjLCAzMCwgOTUpOworCQkJfSBlbHNlIHsKKwkJCQlzcSA9IGZsYWdzMiAmIDB4ZmY7CisJCQkJc2lnbmFsID0gcHJpdi0+cmYtPmNhbGNfcnNzaShhZ2MsIHNxKTsKKwkJCX0KKwkJCXJ4X3N0YXR1cy5zaWduYWwgPSBzaWduYWw7CisJCQlyeF9zdGF0dXMuZnJlcSA9IGRldi0+Y29uZi5jaGFubmVsLT5jZW50ZXJfZnJlcTsKKwkJCXJ4X3N0YXR1cy5iYW5kID0gZGV2LT5jb25mLmNoYW5uZWwtPmJhbmQ7CisJCQlyeF9zdGF0dXMubWFjdGltZSA9IGxlNjRfdG9fY3B1KGVudHJ5LT50c2Z0KTsKKwkJCXJ4X3N0YXR1cy5mbGFnIHw9IFJYX0ZMQUdfVFNGVDsKKwkJCWlmIChmbGFncyAmIFJUTDgxOFhfUlhfREVTQ19GTEFHX0NSQzMyX0VSUikKKwkJCQlyeF9zdGF0dXMuZmxhZyB8PSBSWF9GTEFHX0ZBSUxFRF9GQ1NfQ1JDOworCisJCQltZW1jcHkoSUVFRTgwMjExX1NLQl9SWENCKHNrYiksICZyeF9zdGF0dXMsIHNpemVvZihyeF9zdGF0dXMpKTsKKwkJCWllZWU4MDIxMV9yeF9pcnFzYWZlKGRldiwgc2tiKTsKKworCQkJc2tiID0gbmV3X3NrYjsKKwkJCXByaXYtPnJ4X2J1Zltwcml2LT5yeF9pZHhdID0gc2tiOworCQkJKigoZG1hX2FkZHJfdCAqKSBza2ItPmNiKSA9CisJCQkJcGNpX21hcF9zaW5nbGUocHJpdi0+cGRldiwgc2tiX3RhaWxfcG9pbnRlcihza2IpLAorCQkJCQkgICAgICAgTUFYX1JYX1NJWkUsIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCX0KKworCWRvbmU6CisJCWVudHJ5LT5yeF9idWYgPSBjcHVfdG9fbGUzMigqKChkbWFfYWRkcl90ICopc2tiLT5jYikpOworCQllbnRyeS0+ZmxhZ3MgPSBjcHVfdG9fbGUzMihSVEw4MThYX1JYX0RFU0NfRkxBR19PV04gfAorCQkJCQkgICBNQVhfUlhfU0laRSk7CisJCWlmIChwcml2LT5yeF9pZHggPT0gMzEpCisJCQllbnRyeS0+ZmxhZ3MgfD0gY3B1X3RvX2xlMzIoUlRMODE4WF9SWF9ERVNDX0ZMQUdfRU9SKTsKKwkJcHJpdi0+cnhfaWR4ID0gKHByaXYtPnJ4X2lkeCArIDEpICUgMzI7CisJfQorfQorCitzdGF0aWMgdm9pZCBydGw4MTgwX2hhbmRsZV90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHVuc2lnbmVkIGludCBwcmlvKQoreworCXN0cnVjdCBydGw4MTgwX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CisJc3RydWN0IHJ0bDgxODBfdHhfcmluZyAqcmluZyA9ICZwcml2LT50eF9yaW5nW3ByaW9dOworCisJd2hpbGUgKHNrYl9xdWV1ZV9sZW4oJnJpbmctPnF1ZXVlKSkgeworCQlzdHJ1Y3QgcnRsODE4MF90eF9kZXNjICplbnRyeSA9ICZyaW5nLT5kZXNjW3JpbmctPmlkeF07CisJCXN0cnVjdCBza19idWZmICpza2I7CisJCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbzsKKwkJdTMyIGZsYWdzID0gbGUzMl90b19jcHUoZW50cnktPmZsYWdzKTsKKworCQlpZiAoZmxhZ3MgJiBSVEw4MThYX1RYX0RFU0NfRkxBR19PV04pCisJCQlyZXR1cm47CisKKwkJcmluZy0+aWR4ID0gKHJpbmctPmlkeCArIDEpICUgcmluZy0+ZW50cmllczsKKwkJc2tiID0gX19za2JfZGVxdWV1ZSgmcmluZy0+cXVldWUpOworCQlwY2lfdW5tYXBfc2luZ2xlKHByaXYtPnBkZXYsIGxlMzJfdG9fY3B1KGVudHJ5LT50eF9idWYpLAorCQkJCSBza2ItPmxlbiwgUENJX0RNQV9UT0RFVklDRSk7CisKKwkJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwkJaWVlZTgwMjExX3R4X2luZm9fY2xlYXJfc3RhdHVzKGluZm8pOworCisJCWlmICghKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9OT19BQ0spICYmCisJCSAgICAoZmxhZ3MgJiBSVEw4MThYX1RYX0RFU0NfRkxBR19UWF9PSykpCisJCQlpbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9BQ0s7CisKKwkJaW5mby0+c3RhdHVzLnJhdGVzWzBdLmNvdW50ID0gKGZsYWdzICYgMHhGRikgKyAxOworCQlpbmZvLT5zdGF0dXMucmF0ZXNbMV0uaWR4ID0gLTE7CisKKwkJaWVlZTgwMjExX3R4X3N0YXR1c19pcnFzYWZlKGRldiwgc2tiKTsKKwkJaWYgKHJpbmctPmVudHJpZXMgLSBza2JfcXVldWVfbGVuKCZyaW5nLT5xdWV1ZSkgPT0gMikKKwkJCWllZWU4MDIxMV93YWtlX3F1ZXVlKGRldiwgcHJpbyk7CisJfQorfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgcnRsODE4MF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiA9IGRldl9pZDsKKwlzdHJ1Y3QgcnRsODE4MF9wcml2ICpwcml2ID0gZGV2LT5wcml2OworCXUxNiByZWc7CisKKwlzcGluX2xvY2soJnByaXYtPmxvY2spOworCXJlZyA9IHJ0bDgxOHhfaW9yZWFkMTYocHJpdiwgJnByaXYtPm1hcC0+SU5UX1NUQVRVUyk7CisJaWYgKHVubGlrZWx5KHJlZyA9PSAweEZGRkYpKSB7CisJCXNwaW5fdW5sb2NrKCZwcml2LT5sb2NrKTsKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0KKworCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPklOVF9TVEFUVVMsIHJlZyk7CisKKwlpZiAocmVnICYgKFJUTDgxOFhfSU5UX1RYQl9PSyB8IFJUTDgxOFhfSU5UX1RYQl9FUlIpKQorCQlydGw4MTgwX2hhbmRsZV90eChkZXYsIDMpOworCisJaWYgKHJlZyAmIChSVEw4MThYX0lOVF9UWEhfT0sgfCBSVEw4MThYX0lOVF9UWEhfRVJSKSkKKwkJcnRsODE4MF9oYW5kbGVfdHgoZGV2LCAyKTsKKworCWlmIChyZWcgJiAoUlRMODE4WF9JTlRfVFhOX09LIHwgUlRMODE4WF9JTlRfVFhOX0VSUikpCisJCXJ0bDgxODBfaGFuZGxlX3R4KGRldiwgMSk7CisKKwlpZiAocmVnICYgKFJUTDgxOFhfSU5UX1RYTF9PSyB8IFJUTDgxOFhfSU5UX1RYTF9FUlIpKQorCQlydGw4MTgwX2hhbmRsZV90eChkZXYsIDApOworCisJaWYgKHJlZyAmIChSVEw4MThYX0lOVF9SWF9PSyB8IFJUTDgxOFhfSU5UX1JYX0VSUikpCisJCXJ0bDgxODBfaGFuZGxlX3J4KGRldik7CisKKwlzcGluX3VubG9jaygmcHJpdi0+bG9jayk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgcnRsODE4MF90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CisJc3RydWN0IHJ0bDgxODBfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgcnRsODE4MF90eF9yaW5nICpyaW5nOworCXN0cnVjdCBydGw4MTgwX3R4X2Rlc2MgKmVudHJ5OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IGlkeCwgcHJpbzsKKwlkbWFfYWRkcl90IG1hcHBpbmc7CisJdTMyIHR4X2ZsYWdzOworCXU4IHJjX2ZsYWdzOworCXUxNiBwbGNwX2xlbiA9IDA7CisJX19sZTE2IHJ0c19kdXJhdGlvbiA9IDA7CisKKwlwcmlvID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7CisJcmluZyA9ICZwcml2LT50eF9yaW5nW3ByaW9dOworCisJbWFwcGluZyA9IHBjaV9tYXBfc2luZ2xlKHByaXYtPnBkZXYsIHNrYi0+ZGF0YSwKKwkJCQkgc2tiLT5sZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOworCisJdHhfZmxhZ3MgPSBSVEw4MThYX1RYX0RFU0NfRkxBR19PV04gfCBSVEw4MThYX1RYX0RFU0NfRkxBR19GUyB8CisJCSAgIFJUTDgxOFhfVFhfREVTQ19GTEFHX0xTIHwKKwkJICAgKGllZWU4MDIxMV9nZXRfdHhfcmF0ZShkZXYsIGluZm8pLT5od192YWx1ZSA8PCAyNCkgfAorCQkgICBza2ItPmxlbjsKKworCWlmIChwcml2LT5yODE4NSkKKwkJdHhfZmxhZ3MgfD0gUlRMODE4WF9UWF9ERVNDX0ZMQUdfRE1BIHwKKwkJCSAgICBSVEw4MThYX1RYX0RFU0NfRkxBR19OT19FTkM7CisKKwlyY19mbGFncyA9IGluZm8tPmNvbnRyb2wucmF0ZXNbMF0uZmxhZ3M7CisJaWYgKHJjX2ZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1VTRV9SVFNfQ1RTKSB7CisJCXR4X2ZsYWdzIHw9IFJUTDgxOFhfVFhfREVTQ19GTEFHX1JUUzsKKwkJdHhfZmxhZ3MgfD0gaWVlZTgwMjExX2dldF9ydHNfY3RzX3JhdGUoZGV2LCBpbmZvKS0+aHdfdmFsdWUgPDwgMTk7CisJfSBlbHNlIGlmIChyY19mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19VU0VfQ1RTX1BST1RFQ1QpIHsKKwkJdHhfZmxhZ3MgfD0gUlRMODE4WF9UWF9ERVNDX0ZMQUdfQ1RTOworCQl0eF9mbGFncyB8PSBpZWVlODAyMTFfZ2V0X3J0c19jdHNfcmF0ZShkZXYsIGluZm8pLT5od192YWx1ZSA8PCAxOTsKKwl9CisKKwlpZiAocmNfZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfVVNFX1JUU19DVFMpCisJCXJ0c19kdXJhdGlvbiA9IGllZWU4MDIxMV9ydHNfZHVyYXRpb24oZGV2LCBwcml2LT52aWYsIHNrYi0+bGVuLAorCQkJCQkJICAgICAgaW5mbyk7CisKKwlpZiAoIXByaXYtPnI4MTg1KSB7CisJCXVuc2lnbmVkIGludCByZW1haW5kZXI7CisKKwkJcGxjcF9sZW4gPSBESVZfUk9VTkRfVVAoMTYgKiAoc2tiLT5sZW4gKyA0KSwKKwkJCQkoaWVlZTgwMjExX2dldF90eF9yYXRlKGRldiwgaW5mbyktPmJpdHJhdGUgKiAyKSAvIDEwKTsKKwkJcmVtYWluZGVyID0gKDE2ICogKHNrYi0+bGVuICsgNCkpICUKKwkJCSAgICAoKGllZWU4MDIxMV9nZXRfdHhfcmF0ZShkZXYsIGluZm8pLT5iaXRyYXRlICogMikgLyAxMCk7CisJCWlmIChyZW1haW5kZXIgPD0gNikKKwkJCXBsY3BfbGVuIHw9IDEgPDwgMTU7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQVNTSUdOX1NFUSkgeworCQlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0ZJUlNUX0ZSQUdNRU5UKQorCQkJcHJpdi0+c2Vxbm8gKz0gMHgxMDsKKwkJaGRyLT5zZXFfY3RybCAmPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfU0NUTF9GUkFHKTsKKwkJaGRyLT5zZXFfY3RybCB8PSBjcHVfdG9fbGUxNihwcml2LT5zZXFubyk7CisJfQorCisJaWR4ID0gKHJpbmctPmlkeCArIHNrYl9xdWV1ZV9sZW4oJnJpbmctPnF1ZXVlKSkgJSByaW5nLT5lbnRyaWVzOworCWVudHJ5ID0gJnJpbmctPmRlc2NbaWR4XTsKKworCWVudHJ5LT5ydHNfZHVyYXRpb24gPSBydHNfZHVyYXRpb247CisJZW50cnktPnBsY3BfbGVuID0gY3B1X3RvX2xlMTYocGxjcF9sZW4pOworCWVudHJ5LT50eF9idWYgPSBjcHVfdG9fbGUzMihtYXBwaW5nKTsKKwllbnRyeS0+ZnJhbWVfbGVuID0gY3B1X3RvX2xlMzIoc2tiLT5sZW4pOworCWVudHJ5LT5mbGFnczIgPSBpbmZvLT5jb250cm9sLnJhdGVzWzFdLmlkeCA+PSAwID8KKwkJaWVlZTgwMjExX2dldF9hbHRfcmV0cnlfcmF0ZShkZXYsIGluZm8sIDApLT5iaXRyYXRlIDw8IDQgOiAwOworCWVudHJ5LT5yZXRyeV9saW1pdCA9IGluZm8tPmNvbnRyb2wucmF0ZXNbMF0uY291bnQ7CisJZW50cnktPmZsYWdzID0gY3B1X3RvX2xlMzIodHhfZmxhZ3MpOworCV9fc2tiX3F1ZXVlX3RhaWwoJnJpbmctPnF1ZXVlLCBza2IpOworCWlmIChyaW5nLT5lbnRyaWVzIC0gc2tiX3F1ZXVlX2xlbigmcmluZy0+cXVldWUpIDwgMikKKwkJaWVlZTgwMjExX3N0b3BfcXVldWUoZGV2LCBwcmlvKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+VFhfRE1BX1BPTExJTkcsICgxIDw8IChwcmlvICsgNCkpKTsKKworCXJldHVybiAwOworfQorCit2b2lkIHJ0bDgxODBfc2V0X2FuYXBhcmFtKHN0cnVjdCBydGw4MTgwX3ByaXYgKnByaXYsIHUzMiBhbmFwYXJhbSkKK3sKKwl1OCByZWc7CisKKwlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQsIFJUTDgxOFhfRUVQUk9NX0NNRF9DT05GSUcpOworCXJlZyA9IHJ0bDgxOHhfaW9yZWFkOChwcml2LCAmcHJpdi0+bWFwLT5DT05GSUczKTsKKwlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkNPTkZJRzMsCisJCSByZWcgfCBSVEw4MThYX0NPTkZJRzNfQU5BUEFSQU1fV1JJVEUpOworCXJ0bDgxOHhfaW93cml0ZTMyKHByaXYsICZwcml2LT5tYXAtPkFOQVBBUkFNLCBhbmFwYXJhbSk7CisJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5DT05GSUczLAorCQkgcmVnICYgflJUTDgxOFhfQ09ORklHM19BTkFQQVJBTV9XUklURSk7CisJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5FRVBST01fQ01ELCBSVEw4MThYX0VFUFJPTV9DTURfTk9STUFMKTsKK30KKworc3RhdGljIGludCBydGw4MTgwX2luaXRfaHcoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQoreworCXN0cnVjdCBydGw4MTgwX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CisJdTE2IHJlZzsKKworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+Q01ELCAwKTsKKwlydGw4MTh4X2lvcmVhZDgocHJpdiwgJnByaXYtPm1hcC0+Q01EKTsKKwltc2xlZXAoMTApOworCisJLyogcmVzZXQgKi8KKwlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5JTlRfTUFTSywgMCk7CisJcnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPkNNRCk7CisKKwlyZWcgPSBydGw4MTh4X2lvcmVhZDgocHJpdiwgJnByaXYtPm1hcC0+Q01EKTsKKwlyZWcgJj0gKDEgPDwgMSk7CisJcmVnIHw9IFJUTDgxOFhfQ01EX1JFU0VUOworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+Q01ELCBSVEw4MThYX0NNRF9SRVNFVCk7CisJcnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPkNNRCk7CisJbXNsZWVwKDIwMCk7CisKKwkvKiBjaGVjayBzdWNjZXNzIG9mIHJlc2V0ICovCisJaWYgKHJ0bDgxOHhfaW9yZWFkOChwcml2LCAmcHJpdi0+bWFwLT5DTUQpICYgUlRMODE4WF9DTURfUkVTRVQpIHsKKwkJd2lwaHlfZXJyKGRldi0+d2lwaHksICJyZXNldCB0aW1lb3V0IVxuIik7CisJCXJldHVybiAtRVRJTUVET1VUOworCX0KKworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCwgUlRMODE4WF9FRVBST01fQ01EX0xPQUQpOworCXJ0bDgxOHhfaW9yZWFkOChwcml2LCAmcHJpdi0+bWFwLT5DTUQpOworCW1zbGVlcCgyMDApOworCisJaWYgKHJ0bDgxOHhfaW9yZWFkOChwcml2LCAmcHJpdi0+bWFwLT5DT05GSUczKSAmICgxIDw8IDMpKSB7CisJCS8qIEZvciBjYXJkYnVzICovCisJCXJlZyA9IHJ0bDgxOHhfaW9yZWFkOChwcml2LCAmcHJpdi0+bWFwLT5DT05GSUczKTsKKwkJcmVnIHw9IDEgPDwgMTsKKwkJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5DT05GSUczLCByZWcpOworCQlyZWcgPSBydGw4MTh4X2lvcmVhZDE2KHByaXYsICZwcml2LT5tYXAtPkZFTVIpOworCQlyZWcgfD0gKDEgPDwgMTUpIHwgKDEgPDwgMTQpIHwgKDEgPDwgNCk7CisJCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPkZFTVIsIHJlZyk7CisJfQorCisJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5NU1IsIDApOworCisJaWYgKCFwcml2LT5yODE4NSkKKwkJcnRsODE4MF9zZXRfYW5hcGFyYW0ocHJpdiwgcHJpdi0+YW5hcGFyYW0pOworCisJcnRsODE4eF9pb3dyaXRlMzIocHJpdiwgJnByaXYtPm1hcC0+UkRTQVIsIHByaXYtPnJ4X3JpbmdfZG1hKTsKKwlydGw4MTh4X2lvd3JpdGUzMihwcml2LCAmcHJpdi0+bWFwLT5UQkRBLCBwcml2LT50eF9yaW5nWzNdLmRtYSk7CisJcnRsODE4eF9pb3dyaXRlMzIocHJpdiwgJnByaXYtPm1hcC0+VEhQREEsIHByaXYtPnR4X3JpbmdbMl0uZG1hKTsKKwlydGw4MTh4X2lvd3JpdGUzMihwcml2LCAmcHJpdi0+bWFwLT5UTlBEQSwgcHJpdi0+dHhfcmluZ1sxXS5kbWEpOworCXJ0bDgxOHhfaW93cml0ZTMyKHByaXYsICZwcml2LT5tYXAtPlRMUERBLCBwcml2LT50eF9yaW5nWzBdLmRtYSk7CisKKwkvKiBUT0RPOiBuZWNlc3Nhcnk/IHNwZWNzIGluZGljYXRlIG5vdCAqLworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCwgUlRMODE4WF9FRVBST01fQ01EX0NPTkZJRyk7CisJcmVnID0gcnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPkNPTkZJRzIpOworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+Q09ORklHMiwgcmVnICYgfigxIDw8IDMpKTsKKwlpZiAocHJpdi0+cjgxODUpIHsKKwkJcmVnID0gcnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPkNPTkZJRzIpOworCQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkNPTkZJRzIsIHJlZyB8ICgxIDw8IDQpKTsKKwl9CisJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5FRVBST01fQ01ELCBSVEw4MThYX0VFUFJPTV9DTURfTk9STUFMKTsKKworCS8qIFRPRE86IHNldCBDT05GSUc1IGZvciBjYWxpYnJhdGluZyBBR0Mgb24gcnRsODE4MCArIHBoaWxpcHMgcmFkaW8/ICovCisKKwkvKiBUT0RPOiB0dXJuIG9mZiBodyB3ZXAgb24gcnRsODE4MCAqLworCisJcnRsODE4eF9pb3dyaXRlMzIocHJpdiwgJnByaXYtPm1hcC0+SU5UX1RJTUVPVVQsIDApOworCisJaWYgKHByaXYtPnI4MTg1KSB7CisJCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+V1BBX0NPTkYsIDApOworCQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPlJBVEVfRkFMTEJBQ0ssIDB4ODEpOworCQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPlJFU1BfUkFURSwgKDggPDwgNCkgfCAwKTsKKworCQlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5CUlNSLCAweDAxRjMpOworCisJCS8qIFRPRE86IHNldCBDbGtSdW4gZW5hYmxlPyBuZWNlc3Nhcnk/ICovCisJCXJlZyA9IHJ0bDgxOHhfaW9yZWFkOChwcml2LCAmcHJpdi0+bWFwLT5HUF9FTkFCTEUpOworCQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkdQX0VOQUJMRSwgcmVnICYgfigxIDw8IDYpKTsKKwkJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5FRVBST01fQ01ELCBSVEw4MThYX0VFUFJPTV9DTURfQ09ORklHKTsKKwkJcmVnID0gcnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPkNPTkZJRzMpOworCQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkNPTkZJRzMsIHJlZyB8ICgxIDw8IDIpKTsKKwkJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5FRVBST01fQ01ELCBSVEw4MThYX0VFUFJPTV9DTURfTk9STUFMKTsKKwl9IGVsc2UgeworCQlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5CUlNSLCAweDEpOworCQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPlNFQ1VSSVRZLCAwKTsKKworCQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPlBIWV9ERUxBWSwgMHg2KTsKKwkJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5DQVJSSUVSX1NFTlNFX0NPVU5URVIsIDB4NEMpOworCX0KKworCXByaXYtPnJmLT5pbml0KGRldik7CisJaWYgKHByaXYtPnI4MTg1KQorCQlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5CUlNSLCAweDAxRjMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJ0bDgxODBfaW5pdF9yeF9yaW5nKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKK3sKKwlzdHJ1Y3QgcnRsODE4MF9wcml2ICpwcml2ID0gZGV2LT5wcml2OworCXN0cnVjdCBydGw4MTgwX3J4X2Rlc2MgKmVudHJ5OworCWludCBpOworCisJcHJpdi0+cnhfcmluZyA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHByaXYtPnBkZXYsCisJCQkJCSAgICAgc2l6ZW9mKCpwcml2LT5yeF9yaW5nKSAqIDMyLAorCQkJCQkgICAgICZwcml2LT5yeF9yaW5nX2RtYSk7CisKKwlpZiAoIXByaXYtPnJ4X3JpbmcgfHwgKHVuc2lnbmVkIGxvbmcpcHJpdi0+cnhfcmluZyAmIDB4RkYpIHsKKwkJd2lwaHlfZXJyKGRldi0+d2lwaHksICJDYW5ub3QgYWxsb2NhdGUgUlggcmluZ1xuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW1lbXNldChwcml2LT5yeF9yaW5nLCAwLCBzaXplb2YoKnByaXYtPnJ4X3JpbmcpICogMzIpOworCXByaXYtPnJ4X2lkeCA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgeworCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gZGV2X2FsbG9jX3NrYihNQVhfUlhfU0laRSk7CisJCWRtYV9hZGRyX3QgKm1hcHBpbmc7CisJCWVudHJ5ID0gJnByaXYtPnJ4X3JpbmdbaV07CisJCWlmICghc2tiKQorCQkJcmV0dXJuIDA7CisKKwkJcHJpdi0+cnhfYnVmW2ldID0gc2tiOworCQltYXBwaW5nID0gKGRtYV9hZGRyX3QgKilza2ItPmNiOworCQkqbWFwcGluZyA9IHBjaV9tYXBfc2luZ2xlKHByaXYtPnBkZXYsIHNrYl90YWlsX3BvaW50ZXIoc2tiKSwKKwkJCQkJICBNQVhfUlhfU0laRSwgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJZW50cnktPnJ4X2J1ZiA9IGNwdV90b19sZTMyKCptYXBwaW5nKTsKKwkJZW50cnktPmZsYWdzID0gY3B1X3RvX2xlMzIoUlRMODE4WF9SWF9ERVNDX0ZMQUdfT1dOIHwKKwkJCQkJICAgTUFYX1JYX1NJWkUpOworCX0KKwllbnRyeS0+ZmxhZ3MgfD0gY3B1X3RvX2xlMzIoUlRMODE4WF9SWF9ERVNDX0ZMQUdfRU9SKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcnRsODE4MF9mcmVlX3J4X3Jpbmcoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQoreworCXN0cnVjdCBydGw4MTgwX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgeworCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcHJpdi0+cnhfYnVmW2ldOworCQlpZiAoIXNrYikKKwkJCWNvbnRpbnVlOworCisJCXBjaV91bm1hcF9zaW5nbGUocHJpdi0+cGRldiwKKwkJCQkgKigoZG1hX2FkZHJfdCAqKXNrYi0+Y2IpLAorCQkJCSBNQVhfUlhfU0laRSwgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJa2ZyZWVfc2tiKHNrYik7CisJfQorCisJcGNpX2ZyZWVfY29uc2lzdGVudChwcml2LT5wZGV2LCBzaXplb2YoKnByaXYtPnJ4X3JpbmcpICogMzIsCisJCQkgICAgcHJpdi0+cnhfcmluZywgcHJpdi0+cnhfcmluZ19kbWEpOworCXByaXYtPnJ4X3JpbmcgPSBOVUxMOworfQorCitzdGF0aWMgaW50IHJ0bDgxODBfaW5pdF90eF9yaW5nKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKKwkJCQl1bnNpZ25lZCBpbnQgcHJpbywgdW5zaWduZWQgaW50IGVudHJpZXMpCit7CisJc3RydWN0IHJ0bDgxODBfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgcnRsODE4MF90eF9kZXNjICpyaW5nOworCWRtYV9hZGRyX3QgZG1hOworCWludCBpOworCisJcmluZyA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHByaXYtPnBkZXYsIHNpemVvZigqcmluZykgKiBlbnRyaWVzLCAmZG1hKTsKKwlpZiAoIXJpbmcgfHwgKHVuc2lnbmVkIGxvbmcpcmluZyAmIDB4RkYpIHsKKwkJd2lwaHlfZXJyKGRldi0+d2lwaHksICJDYW5ub3QgYWxsb2NhdGUgVFggcmluZyAocHJpbyA9ICVkKVxuIiwKKwkJCSAgcHJpbyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW1lbXNldChyaW5nLCAwLCBzaXplb2YoKnJpbmcpKmVudHJpZXMpOworCXByaXYtPnR4X3JpbmdbcHJpb10uZGVzYyA9IHJpbmc7CisJcHJpdi0+dHhfcmluZ1twcmlvXS5kbWEgPSBkbWE7CisJcHJpdi0+dHhfcmluZ1twcmlvXS5pZHggPSAwOworCXByaXYtPnR4X3JpbmdbcHJpb10uZW50cmllcyA9IGVudHJpZXM7CisJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmcHJpdi0+dHhfcmluZ1twcmlvXS5xdWV1ZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZW50cmllczsgaSsrKQorCQlyaW5nW2ldLm5leHRfdHhfZGVzYyA9CisJCQljcHVfdG9fbGUzMigodTMyKWRtYSArICgoaSArIDEpICUgZW50cmllcykgKiBzaXplb2YoKnJpbmcpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBydGw4MTgwX2ZyZWVfdHhfcmluZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHVuc2lnbmVkIGludCBwcmlvKQoreworCXN0cnVjdCBydGw4MTgwX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CisJc3RydWN0IHJ0bDgxODBfdHhfcmluZyAqcmluZyA9ICZwcml2LT50eF9yaW5nW3ByaW9dOworCisJd2hpbGUgKHNrYl9xdWV1ZV9sZW4oJnJpbmctPnF1ZXVlKSkgeworCQlzdHJ1Y3QgcnRsODE4MF90eF9kZXNjICplbnRyeSA9ICZyaW5nLT5kZXNjW3JpbmctPmlkeF07CisJCXN0cnVjdCBza19idWZmICpza2IgPSBfX3NrYl9kZXF1ZXVlKCZyaW5nLT5xdWV1ZSk7CisKKwkJcGNpX3VubWFwX3NpbmdsZShwcml2LT5wZGV2LCBsZTMyX3RvX2NwdShlbnRyeS0+dHhfYnVmKSwKKwkJCQkgc2tiLT5sZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOworCQlrZnJlZV9za2Ioc2tiKTsKKwkJcmluZy0+aWR4ID0gKHJpbmctPmlkeCArIDEpICUgcmluZy0+ZW50cmllczsKKwl9CisKKwlwY2lfZnJlZV9jb25zaXN0ZW50KHByaXYtPnBkZXYsIHNpemVvZigqcmluZy0+ZGVzYykqcmluZy0+ZW50cmllcywKKwkJCSAgICByaW5nLT5kZXNjLCByaW5nLT5kbWEpOworCXJpbmctPmRlc2MgPSBOVUxMOworfQorCitzdGF0aWMgaW50IHJ0bDgxODBfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQoreworCXN0cnVjdCBydGw4MTgwX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CisJaW50IHJldCwgaTsKKwl1MzIgcmVnOworCisJcmV0ID0gcnRsODE4MF9pbml0X3J4X3JpbmcoZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKwkJaWYgKChyZXQgPSBydGw4MTgwX2luaXRfdHhfcmluZyhkZXYsIGksIDE2KSkpCisJCQlnb3RvIGVycl9mcmVlX3JpbmdzOworCisJcmV0ID0gcnRsODE4MF9pbml0X2h3KGRldik7CisJaWYgKHJldCkKKwkJZ290byBlcnJfZnJlZV9yaW5nczsKKworCXJ0bDgxOHhfaW93cml0ZTMyKHByaXYsICZwcml2LT5tYXAtPlJEU0FSLCBwcml2LT5yeF9yaW5nX2RtYSk7CisJcnRsODE4eF9pb3dyaXRlMzIocHJpdiwgJnByaXYtPm1hcC0+VEJEQSwgcHJpdi0+dHhfcmluZ1szXS5kbWEpOworCXJ0bDgxOHhfaW93cml0ZTMyKHByaXYsICZwcml2LT5tYXAtPlRIUERBLCBwcml2LT50eF9yaW5nWzJdLmRtYSk7CisJcnRsODE4eF9pb3dyaXRlMzIocHJpdiwgJnByaXYtPm1hcC0+VE5QREEsIHByaXYtPnR4X3JpbmdbMV0uZG1hKTsKKwlydGw4MTh4X2lvd3JpdGUzMihwcml2LCAmcHJpdi0+bWFwLT5UTFBEQSwgcHJpdi0+dHhfcmluZ1swXS5kbWEpOworCisJcmV0ID0gcmVxdWVzdF9pcnEocHJpdi0+cGRldi0+aXJxLCBydGw4MTgwX2ludGVycnVwdCwKKwkJCSAgSVJRRl9TSEFSRUQsIEtCVUlMRF9NT0ROQU1FLCBkZXYpOworCWlmIChyZXQpIHsKKwkJd2lwaHlfZXJyKGRldi0+d2lwaHksICJmYWlsZWQgdG8gcmVnaXN0ZXIgSVJRIGhhbmRsZXJcbiIpOworCQlnb3RvIGVycl9mcmVlX3JpbmdzOworCX0KKworCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPklOVF9NQVNLLCAweEZGRkYpOworCisJcnRsODE4eF9pb3dyaXRlMzIocHJpdiwgJnByaXYtPm1hcC0+TUFSWzBdLCB+MCk7CisJcnRsODE4eF9pb3dyaXRlMzIocHJpdiwgJnByaXYtPm1hcC0+TUFSWzFdLCB+MCk7CisKKwlyZWcgPSBSVEw4MThYX1JYX0NPTkZfT05MWUVSTFBLVCB8CisJICAgICAgUlRMODE4WF9SWF9DT05GX1JYX0FVVE9SRVNFVFBIWSB8CisJICAgICAgUlRMODE4WF9SWF9DT05GX01HTVQgfAorCSAgICAgIFJUTDgxOFhfUlhfQ09ORl9EQVRBIHwKKwkgICAgICAoNyA8PCA4IC8qIE1BWCBSWCBETUEgKi8pIHwKKwkgICAgICBSVEw4MThYX1JYX0NPTkZfQlJPQURDQVNUIHwKKwkgICAgICBSVEw4MThYX1JYX0NPTkZfTklDTUFDOworCisJaWYgKHByaXYtPnI4MTg1KQorCQlyZWcgfD0gUlRMODE4WF9SWF9DT05GX0NTRE0xIHwgUlRMODE4WF9SWF9DT05GX0NTRE0yOworCWVsc2UgeworCQlyZWcgfD0gKHByaXYtPnJmcGFyYW0gJiBSRl9QQVJBTV9DQVJSSUVSU0VOU0UxKQorCQkJPyBSVEw4MThYX1JYX0NPTkZfQ1NETTEgOiAwOworCQlyZWcgfD0gKHByaXYtPnJmcGFyYW0gJiBSRl9QQVJBTV9DQVJSSUVSU0VOU0UyKQorCQkJPyBSVEw4MThYX1JYX0NPTkZfQ1NETTIgOiAwOworCX0KKworCXByaXYtPnJ4X2NvbmYgPSByZWc7CisJcnRsODE4eF9pb3dyaXRlMzIocHJpdiwgJnByaXYtPm1hcC0+UlhfQ09ORiwgcmVnKTsKKworCWlmIChwcml2LT5yODE4NSkgeworCQlyZWcgPSBydGw4MTh4X2lvcmVhZDgocHJpdiwgJnByaXYtPm1hcC0+Q1dfQ09ORik7CisJCXJlZyAmPSB+UlRMODE4WF9DV19DT05GX1BFUlBBQ0tFVF9DV19TSElGVDsKKwkJcmVnIHw9IFJUTDgxOFhfQ1dfQ09ORl9QRVJQQUNLRVRfUkVUUllfU0hJRlQ7CisJCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+Q1dfQ09ORiwgcmVnKTsKKworCQlyZWcgPSBydGw4MTh4X2lvcmVhZDgocHJpdiwgJnByaXYtPm1hcC0+VFhfQUdDX0NUTCk7CisJCXJlZyAmPSB+UlRMODE4WF9UWF9BR0NfQ1RMX1BFUlBBQ0tFVF9HQUlOX1NISUZUOworCQlyZWcgJj0gflJUTDgxOFhfVFhfQUdDX0NUTF9QRVJQQUNLRVRfQU5UU0VMX1NISUZUOworCQlyZWcgfD0gIFJUTDgxOFhfVFhfQUdDX0NUTF9GRUVEQkFDS19BTlQ7CisJCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+VFhfQUdDX0NUTCwgcmVnKTsKKworCQkvKiBkaXNhYmxlIGVhcmx5IFRYICovCisJCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgKHU4IF9faW9tZW0gKilwcml2LT5tYXAgKyAweGVjLCAweDNmKTsKKwl9CisKKwlyZWcgPSBydGw4MTh4X2lvcmVhZDMyKHByaXYsICZwcml2LT5tYXAtPlRYX0NPTkYpOworCXJlZyB8PSAoNiA8PCAyMSAvKiBNQVggVFggRE1BICovKSB8CisJICAgICAgIFJUTDgxOFhfVFhfQ09ORl9OT19JQ1Y7CisKKwlpZiAocHJpdi0+cjgxODUpCisJCXJlZyAmPSB+UlRMODE4WF9UWF9DT05GX1BST0JFX0RUUzsKKwllbHNlCisJCXJlZyAmPSB+UlRMODE4WF9UWF9DT05GX0hXX1NFUU5VTTsKKworCS8qIGRpZmZlcmVudCBtZWFuaW5nLCBzYW1lIHZhbHVlIG9uIGJvdGggcnRsODE4NSBhbmQgcnRsODE4MCAqLworCXJlZyAmPSB+UlRMODE4WF9UWF9DT05GX1NBVF9IV1BMQ1A7CisKKwlydGw4MTh4X2lvd3JpdGUzMihwcml2LCAmcHJpdi0+bWFwLT5UWF9DT05GLCByZWcpOworCisJcmVnID0gcnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPkNNRCk7CisJcmVnIHw9IFJUTDgxOFhfQ01EX1JYX0VOQUJMRTsKKwlyZWcgfD0gUlRMODE4WF9DTURfVFhfRU5BQkxFOworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+Q01ELCByZWcpOworCisJcmV0dXJuIDA7CisKKyBlcnJfZnJlZV9yaW5nczoKKwlydGw4MTgwX2ZyZWVfcnhfcmluZyhkZXYpOworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJCWlmIChwcml2LT50eF9yaW5nW2ldLmRlc2MpCisJCQlydGw4MTgwX2ZyZWVfdHhfcmluZyhkZXYsIGkpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgcnRsODE4MF9zdG9wKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKK3sKKwlzdHJ1Y3QgcnRsODE4MF9wcml2ICpwcml2ID0gZGV2LT5wcml2OworCXU4IHJlZzsKKwlpbnQgaTsKKworCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPklOVF9NQVNLLCAwKTsKKworCXJlZyA9IHJ0bDgxOHhfaW9yZWFkOChwcml2LCAmcHJpdi0+bWFwLT5DTUQpOworCXJlZyAmPSB+UlRMODE4WF9DTURfVFhfRU5BQkxFOworCXJlZyAmPSB+UlRMODE4WF9DTURfUlhfRU5BQkxFOworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+Q01ELCByZWcpOworCisJcHJpdi0+cmYtPnN0b3AoZGV2KTsKKworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCwgUlRMODE4WF9FRVBST01fQ01EX0NPTkZJRyk7CisJcmVnID0gcnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPkNPTkZJRzQpOworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+Q09ORklHNCwgcmVnIHwgUlRMODE4WF9DT05GSUc0X1ZDT09GRik7CisJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5FRVBST01fQ01ELCBSVEw4MThYX0VFUFJPTV9DTURfTk9STUFMKTsKKworCWZyZWVfaXJxKHByaXYtPnBkZXYtPmlycSwgZGV2KTsKKworCXJ0bDgxODBfZnJlZV9yeF9yaW5nKGRldik7CisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKwkJcnRsODE4MF9mcmVlX3R4X3JpbmcoZGV2LCBpKTsKK30KKworc3RhdGljIHU2NCBydGw4MTgwX2dldF90c2Yoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQoreworCXN0cnVjdCBydGw4MTgwX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CisKKwlyZXR1cm4gcnRsODE4eF9pb3JlYWQzMihwcml2LCAmcHJpdi0+bWFwLT5UU0ZUWzBdKSB8CisJICAgICAgICh1NjQpKHJ0bDgxOHhfaW9yZWFkMzIocHJpdiwgJnByaXYtPm1hcC0+VFNGVFsxXSkpIDw8IDMyOworfQorCitzdGF0aWMgdm9pZCBydGw4MTgwX2JlYWNvbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgcnRsODE4MF92aWYgKnZpZl9wcml2ID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBydGw4MTgwX3ZpZiwgYmVhY29uX3dvcmsud29yayk7CisJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiA9CisJCWNvbnRhaW5lcl9vZigodm9pZCAqKXZpZl9wcml2LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiwgZHJ2X3ByaXYpOworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiA9IHZpZl9wcml2LT5kZXY7CisJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OworCXN0cnVjdCBza19idWZmICpza2I7CisJaW50IGVyciA9IDA7CisKKwkvKiBkb24ndCBvdmVyZmxvdyB0aGUgdHggcmluZyAqLworCWlmIChpZWVlODAyMTFfcXVldWVfc3RvcHBlZChkZXYsIDApKQorCQlnb3RvIHJlc2NoZWQ7CisKKwkvKiBncmFiIGEgZnJlc2ggYmVhY29uICovCisJc2tiID0gaWVlZTgwMjExX2JlYWNvbl9nZXQoZGV2LCB2aWYpOworCWlmICghc2tiKQorCQlnb3RvIHJlc2NoZWQ7CisKKwkvKgorCSAqIHVwZGF0ZSBiZWFjb24gdGltZXN0YW1wIHcvIFRTRiB2YWx1ZQorCSAqIFRPRE86IG1ha2UgaGFyZHdhcmUgdXBkYXRlIGJlYWNvbiB0aW1lc3RhbXAKKwkgKi8KKwltZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKXNrYi0+ZGF0YTsKKwltZ210LT51LmJlYWNvbi50aW1lc3RhbXAgPSBjcHVfdG9fbGU2NChydGw4MTgwX2dldF90c2YoZGV2KSk7CisKKwkvKiBUT0RPOiB1c2UgYWN0dWFsIGJlYWNvbiBxdWV1ZSAqLworCXNrYl9zZXRfcXVldWVfbWFwcGluZyhza2IsIDApOworCisJZXJyID0gcnRsODE4MF90eChkZXYsIHNrYik7CisJV0FSTl9PTihlcnIpOworCityZXNjaGVkOgorCS8qCisJICogc2NoZWR1bGUgbmV4dCBiZWFjb24KKwkgKiBUT0RPOiB1c2UgaGFyZHdhcmUgc3VwcG9ydCBmb3IgYmVhY29uIHRpbWluZworCSAqLworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmdmlmX3ByaXYtPmJlYWNvbl93b3JrLAorCQkJdXNlY3NfdG9famlmZmllcygxMDI0ICogdmlmLT5ic3NfY29uZi5iZWFjb25faW50KSk7Cit9CisKK3N0YXRpYyBpbnQgcnRsODE4MF9hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKKwkJCQkgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKK3sKKwlzdHJ1Y3QgcnRsODE4MF9wcml2ICpwcml2ID0gZGV2LT5wcml2OworCXN0cnVjdCBydGw4MTgwX3ZpZiAqdmlmX3ByaXY7CisKKwkvKgorCSAqIFdlIG9ubHkgc3VwcG9ydCBvbmUgYWN0aXZlIGludGVyZmFjZSBhdCBhIHRpbWUuCisJICovCisJaWYgKHByaXYtPnZpZikKKwkJcmV0dXJuIC1FQlVTWTsKKworCXN3aXRjaCAodmlmLT50eXBlKSB7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgorCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9CisKKwlwcml2LT52aWYgPSB2aWY7CisKKwkvKiBJbml0aWFsaXplIGRyaXZlciBwcml2YXRlIGFyZWEgKi8KKwl2aWZfcHJpdiA9IChzdHJ1Y3QgcnRsODE4MF92aWYgKikmdmlmLT5kcnZfcHJpdjsKKwl2aWZfcHJpdi0+ZGV2ID0gZGV2OworCUlOSVRfREVMQVlFRF9XT1JLKCZ2aWZfcHJpdi0+YmVhY29uX3dvcmssIHJ0bDgxODBfYmVhY29uX3dvcmspOworCXZpZl9wcml2LT5lbmFibGVfYmVhY29uID0gZmFsc2U7CisKKwlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQsIFJUTDgxOFhfRUVQUk9NX0NNRF9DT05GSUcpOworCXJ0bDgxOHhfaW93cml0ZTMyKHByaXYsIChfX2xlMzIgX19pb21lbSAqKSZwcml2LT5tYXAtPk1BQ1swXSwKKwkJCSAgbGUzMl90b19jcHUoKihfX2xlMzIgKil2aWYtPmFkZHIpKTsKKwlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAoX19sZTE2IF9faW9tZW0gKikmcHJpdi0+bWFwLT5NQUNbNF0sCisJCQkgIGxlMTZfdG9fY3B1KCooX19sZTE2ICopKHZpZi0+YWRkciArIDQpKSk7CisJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5FRVBST01fQ01ELCBSVEw4MThYX0VFUFJPTV9DTURfTk9STUFMKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBydGw4MTgwX3JlbW92ZV9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAorCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKK3sKKwlzdHJ1Y3QgcnRsODE4MF9wcml2ICpwcml2ID0gZGV2LT5wcml2OworCXByaXYtPnZpZiA9IE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgcnRsODE4MF9jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCB1MzIgY2hhbmdlZCkKK3sKKwlzdHJ1Y3QgcnRsODE4MF9wcml2ICpwcml2ID0gZGV2LT5wcml2OworCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZkZXYtPmNvbmY7CisKKwlwcml2LT5yZi0+c2V0X2NoYW4oZGV2LCBjb25mKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBydGw4MTgwX2Jzc19pbmZvX2NoYW5nZWQoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAorCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmluZm8sCisJCQkJICAgICB1MzIgY2hhbmdlZCkKK3sKKwlzdHJ1Y3QgcnRsODE4MF9wcml2ICpwcml2ID0gZGV2LT5wcml2OworCXN0cnVjdCBydGw4MTgwX3ZpZiAqdmlmX3ByaXY7CisJaW50IGk7CisJdTggcmVnOworCisJdmlmX3ByaXYgPSAoc3RydWN0IHJ0bDgxODBfdmlmICopJnZpZi0+ZHJ2X3ByaXY7CisKKwlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0JTU0lEKSB7CisJCWZvciAoaSA9IDA7IGkgPCBFVEhfQUxFTjsgaSsrKQorCQkJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5CU1NJRFtpXSwKKwkJCQkJIGluZm8tPmJzc2lkW2ldKTsKKworCQlpZiAoaXNfdmFsaWRfZXRoZXJfYWRkcihpbmZvLT5ic3NpZCkpIHsKKwkJCWlmICh2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCisJCQkJcmVnID0gUlRMODE4WF9NU1JfQURIT0M7CisJCQllbHNlCisJCQkJcmVnID0gUlRMODE4WF9NU1JfSU5GUkE7CisJCX0gZWxzZQorCQkJcmVnID0gUlRMODE4WF9NU1JfTk9fTElOSzsKKwkJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5NU1IsIHJlZyk7CisJfQorCisJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9FUlBfU0xPVCAmJiBwcml2LT5yZi0+Y29uZl9lcnApCisJCXByaXYtPnJmLT5jb25mX2VycChkZXYsIGluZm8pOworCisJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9CRUFDT05fRU5BQkxFRCkKKwkJdmlmX3ByaXYtPmVuYWJsZV9iZWFjb24gPSBpbmZvLT5lbmFibGVfYmVhY29uOworCisJaWYgKGNoYW5nZWQgJiAoQlNTX0NIQU5HRURfQkVBQ09OX0VOQUJMRUQgfCBCU1NfQ0hBTkdFRF9CRUFDT04pKSB7CisJCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmdmlmX3ByaXYtPmJlYWNvbl93b3JrKTsKKwkJaWYgKHZpZl9wcml2LT5lbmFibGVfYmVhY29uKQorCQkJc2NoZWR1bGVfd29yaygmdmlmX3ByaXYtPmJlYWNvbl93b3JrLndvcmspOworCX0KK30KKworc3RhdGljIHU2NCBydGw4MTgwX3ByZXBhcmVfbXVsdGljYXN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICptY19saXN0KQoreworCXJldHVybiBuZXRkZXZfaHdfYWRkcl9saXN0X2NvdW50KG1jX2xpc3QpOworfQorCitzdGF0aWMgdm9pZCBydGw4MTgwX2NvbmZpZ3VyZV9maWx0ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAorCQkJCSAgICAgdW5zaWduZWQgaW50IGNoYW5nZWRfZmxhZ3MsCisJCQkJICAgICB1bnNpZ25lZCBpbnQgKnRvdGFsX2ZsYWdzLAorCQkJCSAgICAgdTY0IG11bHRpY2FzdCkKK3sKKwlzdHJ1Y3QgcnRsODE4MF9wcml2ICpwcml2ID0gZGV2LT5wcml2OworCisJaWYgKGNoYW5nZWRfZmxhZ3MgJiBGSUZfRkNTRkFJTCkKKwkJcHJpdi0+cnhfY29uZiBePSBSVEw4MThYX1JYX0NPTkZfRkNTOworCWlmIChjaGFuZ2VkX2ZsYWdzICYgRklGX0NPTlRST0wpCisJCXByaXYtPnJ4X2NvbmYgXj0gUlRMODE4WF9SWF9DT05GX0NUUkw7CisJaWYgKGNoYW5nZWRfZmxhZ3MgJiBGSUZfT1RIRVJfQlNTKQorCQlwcml2LT5yeF9jb25mIF49IFJUTDgxOFhfUlhfQ09ORl9NT05JVE9SOworCWlmICgqdG90YWxfZmxhZ3MgJiBGSUZfQUxMTVVMVEkgfHwgbXVsdGljYXN0ID4gMCkKKwkJcHJpdi0+cnhfY29uZiB8PSBSVEw4MThYX1JYX0NPTkZfTVVMVElDQVNUOworCWVsc2UKKwkJcHJpdi0+cnhfY29uZiAmPSB+UlRMODE4WF9SWF9DT05GX01VTFRJQ0FTVDsKKworCSp0b3RhbF9mbGFncyA9IDA7CisKKwlpZiAocHJpdi0+cnhfY29uZiAmIFJUTDgxOFhfUlhfQ09ORl9GQ1MpCisJCSp0b3RhbF9mbGFncyB8PSBGSUZfRkNTRkFJTDsKKwlpZiAocHJpdi0+cnhfY29uZiAmIFJUTDgxOFhfUlhfQ09ORl9DVFJMKQorCQkqdG90YWxfZmxhZ3MgfD0gRklGX0NPTlRST0w7CisJaWYgKHByaXYtPnJ4X2NvbmYgJiBSVEw4MThYX1JYX0NPTkZfTU9OSVRPUikKKwkJKnRvdGFsX2ZsYWdzIHw9IEZJRl9PVEhFUl9CU1M7CisJaWYgKHByaXYtPnJ4X2NvbmYgJiBSVEw4MThYX1JYX0NPTkZfTVVMVElDQVNUKQorCQkqdG90YWxfZmxhZ3MgfD0gRklGX0FMTE1VTFRJOworCisJcnRsODE4eF9pb3dyaXRlMzIocHJpdiwgJnByaXYtPm1hcC0+UlhfQ09ORiwgcHJpdi0+cnhfY29uZik7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX29wcyBydGw4MTgwX29wcyA9IHsKKwkudHgJCQk9IHJ0bDgxODBfdHgsCisJLnN0YXJ0CQkJPSBydGw4MTgwX3N0YXJ0LAorCS5zdG9wCQkJPSBydGw4MTgwX3N0b3AsCisJLmFkZF9pbnRlcmZhY2UJCT0gcnRsODE4MF9hZGRfaW50ZXJmYWNlLAorCS5yZW1vdmVfaW50ZXJmYWNlCT0gcnRsODE4MF9yZW1vdmVfaW50ZXJmYWNlLAorCS5jb25maWcJCQk9IHJ0bDgxODBfY29uZmlnLAorCS5ic3NfaW5mb19jaGFuZ2VkCT0gcnRsODE4MF9ic3NfaW5mb19jaGFuZ2VkLAorCS5wcmVwYXJlX211bHRpY2FzdAk9IHJ0bDgxODBfcHJlcGFyZV9tdWx0aWNhc3QsCisJLmNvbmZpZ3VyZV9maWx0ZXIJPSBydGw4MTgwX2NvbmZpZ3VyZV9maWx0ZXIsCisJLmdldF90c2YJCT0gcnRsODE4MF9nZXRfdHNmLAorfTsKKworc3RhdGljIHZvaWQgcnRsODE4MF9lZXByb21fcmVnaXN0ZXJfcmVhZChzdHJ1Y3QgZWVwcm9tXzkzY3g2ICplZXByb20pCit7CisJc3RydWN0IGllZWU4MDIxMV9odyAqZGV2ID0gZWVwcm9tLT5kYXRhOworCXN0cnVjdCBydGw4MTgwX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CisJdTggcmVnID0gcnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQpOworCisJZWVwcm9tLT5yZWdfZGF0YV9pbiA9IHJlZyAmIFJUTDgxOFhfRUVQUk9NX0NNRF9XUklURTsKKwllZXByb20tPnJlZ19kYXRhX291dCA9IHJlZyAmIFJUTDgxOFhfRUVQUk9NX0NNRF9SRUFEOworCWVlcHJvbS0+cmVnX2RhdGFfY2xvY2sgPSByZWcgJiBSVEw4MThYX0VFUFJPTV9DTURfQ0s7CisJZWVwcm9tLT5yZWdfY2hpcF9zZWxlY3QgPSByZWcgJiBSVEw4MThYX0VFUFJPTV9DTURfQ1M7Cit9CisKK3N0YXRpYyB2b2lkIHJ0bDgxODBfZWVwcm9tX3JlZ2lzdGVyX3dyaXRlKHN0cnVjdCBlZXByb21fOTNjeDYgKmVlcHJvbSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYgPSBlZXByb20tPmRhdGE7CisJc3RydWN0IHJ0bDgxODBfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKKwl1OCByZWcgPSAyIDw8IDY7CisKKwlpZiAoZWVwcm9tLT5yZWdfZGF0YV9pbikKKwkJcmVnIHw9IFJUTDgxOFhfRUVQUk9NX0NNRF9XUklURTsKKwlpZiAoZWVwcm9tLT5yZWdfZGF0YV9vdXQpCisJCXJlZyB8PSBSVEw4MThYX0VFUFJPTV9DTURfUkVBRDsKKwlpZiAoZWVwcm9tLT5yZWdfZGF0YV9jbG9jaykKKwkJcmVnIHw9IFJUTDgxOFhfRUVQUk9NX0NNRF9DSzsKKwlpZiAoZWVwcm9tLT5yZWdfY2hpcF9zZWxlY3QpCisJCXJlZyB8PSBSVEw4MThYX0VFUFJPTV9DTURfQ1M7CisKKwlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQsIHJlZyk7CisJcnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQpOworCXVkZWxheSgxMCk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHJ0bDgxODBfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkJICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmRldjsKKwlzdHJ1Y3QgcnRsODE4MF9wcml2ICpwcml2OworCXVuc2lnbmVkIGxvbmcgbWVtX2FkZHIsIG1lbV9sZW47CisJdW5zaWduZWQgaW50IGlvX2FkZHIsIGlvX2xlbjsKKwlpbnQgZXJyLCBpOworCXN0cnVjdCBlZXByb21fOTNjeDYgZWVwcm9tOworCWNvbnN0IGNoYXIgKmNoaXBfbmFtZSwgKnJmX25hbWUgPSBOVUxMOworCXUzMiByZWc7CisJdTE2IGVlcHJvbV92YWw7CisJdTggbWFjX2FkZHJbRVRIX0FMRU5dOworCisJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzIChydGw4MTgwKTogQ2Fubm90IGVuYWJsZSBuZXcgUENJIGRldmljZVxuIiwKKwkJICAgICAgIHBjaV9uYW1lKHBkZXYpKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwllcnIgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBkZXYsIEtCVUlMRF9NT0ROQU1FKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXMgKHJ0bDgxODApOiBDYW5ub3Qgb2J0YWluIFBDSSByZXNvdXJjZXNcbiIsCisJCSAgICAgICBwY2lfbmFtZShwZGV2KSk7CisJCXJldHVybiBlcnI7CisJfQorCisJaW9fYWRkciA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTsKKwlpb19sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApOworCW1lbV9hZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDEpOworCW1lbV9sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDEpOworCisJaWYgKG1lbV9sZW4gPCBzaXplb2Yoc3RydWN0IHJ0bDgxOHhfY3NyKSB8fAorCSAgICBpb19sZW4gPCBzaXplb2Yoc3RydWN0IHJ0bDgxOHhfY3NyKSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzIChydGw4MTgwKTogVG9vIHNob3J0IFBDSSByZXNvdXJjZXNcbiIsCisJCSAgICAgICBwY2lfbmFtZShwZGV2KSk7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2ZyZWVfcmVnOworCX0KKworCWlmICgoZXJyID0gcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soMzIpKSkgfHwKKwkgICAgKGVyciA9IHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soMzIpKSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlcyAocnRsODE4MCk6IE5vIHN1aXRhYmxlIERNQSBhdmFpbGFibGVcbiIsCisJCSAgICAgICBwY2lfbmFtZShwZGV2KSk7CisJCWdvdG8gZXJyX2ZyZWVfcmVnOworCX0KKworCXBjaV9zZXRfbWFzdGVyKHBkZXYpOworCisJZGV2ID0gaWVlZTgwMjExX2FsbG9jX2h3KHNpemVvZigqcHJpdiksICZydGw4MTgwX29wcyk7CisJaWYgKCFkZXYpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlcyAocnRsODE4MCk6IGllZWU4MDIxMSBhbGxvYyBmYWlsZWRcbiIsCisJCSAgICAgICBwY2lfbmFtZShwZGV2KSk7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2ZyZWVfcmVnOworCX0KKworCXByaXYgPSBkZXYtPnByaXY7CisJcHJpdi0+cGRldiA9IHBkZXY7CisKKwlkZXYtPm1heF9yYXRlcyA9IDI7CisJU0VUX0lFRUU4MDIxMV9ERVYoZGV2LCAmcGRldi0+ZGV2KTsKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgZGV2KTsKKworCXByaXYtPm1hcCA9IHBjaV9pb21hcChwZGV2LCAxLCBtZW1fbGVuKTsKKwlpZiAoIXByaXYtPm1hcCkKKwkJcHJpdi0+bWFwID0gcGNpX2lvbWFwKHBkZXYsIDAsIGlvX2xlbik7CisKKwlpZiAoIXByaXYtPm1hcCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzIChydGw4MTgwKTogQ2Fubm90IG1hcCBkZXZpY2UgbWVtb3J5XG4iLAorCQkgICAgICAgcGNpX25hbWUocGRldikpOworCQlnb3RvIGVycl9mcmVlX2RldjsKKwl9CisKKwlCVUlMRF9CVUdfT04oc2l6ZW9mKHByaXYtPmNoYW5uZWxzKSAhPSBzaXplb2YocnRsODE4eF9jaGFubmVscykpOworCUJVSUxEX0JVR19PTihzaXplb2YocHJpdi0+cmF0ZXMpICE9IHNpemVvZihydGw4MTh4X3JhdGVzKSk7CisKKwltZW1jcHkocHJpdi0+Y2hhbm5lbHMsIHJ0bDgxOHhfY2hhbm5lbHMsIHNpemVvZihydGw4MTh4X2NoYW5uZWxzKSk7CisJbWVtY3B5KHByaXYtPnJhdGVzLCBydGw4MTh4X3JhdGVzLCBzaXplb2YocnRsODE4eF9yYXRlcykpOworCisJcHJpdi0+YmFuZC5iYW5kID0gSUVFRTgwMjExX0JBTkRfMkdIWjsKKwlwcml2LT5iYW5kLmNoYW5uZWxzID0gcHJpdi0+Y2hhbm5lbHM7CisJcHJpdi0+YmFuZC5uX2NoYW5uZWxzID0gQVJSQVlfU0laRShydGw4MTh4X2NoYW5uZWxzKTsKKwlwcml2LT5iYW5kLmJpdHJhdGVzID0gcHJpdi0+cmF0ZXM7CisJcHJpdi0+YmFuZC5uX2JpdHJhdGVzID0gNDsKKwlkZXYtPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXSA9ICZwcml2LT5iYW5kOworCisJZGV2LT5mbGFncyA9IElFRUU4MDIxMV9IV19IT1NUX0JST0FEQ0FTVF9QU19CVUZGRVJJTkcgfAorCQkgICAgIElFRUU4MDIxMV9IV19SWF9JTkNMVURFU19GQ1MgfAorCQkgICAgIElFRUU4MDIxMV9IV19TSUdOQUxfVU5TUEVDOworCWRldi0+dmlmX2RhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcnRsODE4MF92aWYpOworCWRldi0+d2lwaHktPmludGVyZmFjZV9tb2RlcyA9IEJJVChOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB8CisJCQkJCUJJVChOTDgwMjExX0lGVFlQRV9BREhPQyk7CisJZGV2LT5xdWV1ZXMgPSAxOworCWRldi0+bWF4X3NpZ25hbCA9IDY1OworCisJcmVnID0gcnRsODE4eF9pb3JlYWQzMihwcml2LCAmcHJpdi0+bWFwLT5UWF9DT05GKTsKKwlyZWcgJj0gUlRMODE4WF9UWF9DT05GX0hXVkVSX01BU0s7CisJc3dpdGNoIChyZWcpIHsKKwljYXNlIFJUTDgxOFhfVFhfQ09ORl9SODE4MF9BQkNEOgorCQljaGlwX25hbWUgPSAiUlRMODE4MCI7CisJCWJyZWFrOworCWNhc2UgUlRMODE4WF9UWF9DT05GX1I4MTgwX0Y6CisJCWNoaXBfbmFtZSA9ICJSVEw4MTgwdkYiOworCQlicmVhazsKKwljYXNlIFJUTDgxOFhfVFhfQ09ORl9SODE4NV9BQkM6CisJCWNoaXBfbmFtZSA9ICJSVEw4MTg1IjsKKwkJYnJlYWs7CisJY2FzZSBSVEw4MThYX1RYX0NPTkZfUjgxODVfRDoKKwkJY2hpcF9uYW1lID0gIlJUTDgxODV2RCI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiAiJXMgKHJ0bDgxODApOiBVbmtub3duIGNoaXAhICgweCV4KVxuIiwKKwkJICAgICAgIHBjaV9uYW1lKHBkZXYpLCByZWcgPj4gMjUpOworCQlnb3RvIGVycl9pb3VubWFwOworCX0KKworCXByaXYtPnI4MTg1ID0gcmVnICYgUlRMODE4WF9UWF9DT05GX1I4MTg1X0FCQzsKKwlpZiAocHJpdi0+cjgxODUpIHsKKwkJcHJpdi0+YmFuZC5uX2JpdHJhdGVzID0gQVJSQVlfU0laRShydGw4MTh4X3JhdGVzKTsKKwkJcGNpX3RyeV9zZXRfbXdpKHBkZXYpOworCX0KKworCWVlcHJvbS5kYXRhID0gZGV2OworCWVlcHJvbS5yZWdpc3Rlcl9yZWFkID0gcnRsODE4MF9lZXByb21fcmVnaXN0ZXJfcmVhZDsKKwllZXByb20ucmVnaXN0ZXJfd3JpdGUgPSBydGw4MTgwX2VlcHJvbV9yZWdpc3Rlcl93cml0ZTsKKwlpZiAocnRsODE4eF9pb3JlYWQzMihwcml2LCAmcHJpdi0+bWFwLT5SWF9DT05GKSAmICgxIDw8IDYpKQorCQllZXByb20ud2lkdGggPSBQQ0lfRUVQUk9NX1dJRFRIXzkzQzY2OworCWVsc2UKKwkJZWVwcm9tLndpZHRoID0gUENJX0VFUFJPTV9XSURUSF85M0M0NjsKKworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCwgUlRMODE4WF9FRVBST01fQ01EX1BST0dSQU0pOworCXJ0bDgxOHhfaW9yZWFkOChwcml2LCAmcHJpdi0+bWFwLT5FRVBST01fQ01EKTsKKwl1ZGVsYXkoMTApOworCisJZWVwcm9tXzkzY3g2X3JlYWQoJmVlcHJvbSwgMHgwNiwgJmVlcHJvbV92YWwpOworCWVlcHJvbV92YWwgJj0gMHhGRjsKKwlzd2l0Y2ggKGVlcHJvbV92YWwpIHsKKwljYXNlIDE6CXJmX25hbWUgPSAiSW50ZXJzaWwiOworCQlicmVhazsKKwljYXNlIDI6CXJmX25hbWUgPSAiUkZNRCI7CisJCWJyZWFrOworCWNhc2UgMzoJcHJpdi0+cmYgPSAmc2EyNDAwX3JmX29wczsKKwkJYnJlYWs7CisJY2FzZSA0Oglwcml2LT5yZiA9ICZtYXgyODIwX3JmX29wczsKKwkJYnJlYWs7CisJY2FzZSA1Oglwcml2LT5yZiA9ICZncmY1MTAxX3JmX29wczsKKwkJYnJlYWs7CisJY2FzZSA5Oglwcml2LT5yZiA9IHJ0bDgxODBfZGV0ZWN0X3JmKGRldik7CisJCWJyZWFrOworCWNhc2UgMTA6CisJCXJmX25hbWUgPSAiUlRMODI1NSI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiAiJXMgKHJ0bDgxODApOiBVbmtub3duIFJGISAoMHgleClcbiIsCisJCSAgICAgICBwY2lfbmFtZShwZGV2KSwgZWVwcm9tX3ZhbCk7CisJCWdvdG8gZXJyX2lvdW5tYXA7CisJfQorCisJaWYgKCFwcml2LT5yZikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzIChydGw4MTgwKTogJXMgUkYgZnJvbnRlbmQgbm90IHN1cHBvcnRlZCFcbiIsCisJCSAgICAgICBwY2lfbmFtZShwZGV2KSwgcmZfbmFtZSk7CisJCWdvdG8gZXJyX2lvdW5tYXA7CisJfQorCisJZWVwcm9tXzkzY3g2X3JlYWQoJmVlcHJvbSwgMHgxNywgJmVlcHJvbV92YWwpOworCXByaXYtPmNzdGhyZXNob2xkID0gZWVwcm9tX3ZhbCA+PiA4OworCWlmICghcHJpdi0+cjgxODUpIHsKKwkJX19sZTMyIGFuYXBhcmFtOworCQllZXByb21fOTNjeDZfbXVsdGlyZWFkKCZlZXByb20sIDB4RCwgKF9fbGUxNiAqKSZhbmFwYXJhbSwgMik7CisJCXByaXYtPmFuYXBhcmFtID0gbGUzMl90b19jcHUoYW5hcGFyYW0pOworCQllZXByb21fOTNjeDZfcmVhZCgmZWVwcm9tLCAweDE5LCAmcHJpdi0+cmZwYXJhbSk7CisJfQorCisJZWVwcm9tXzkzY3g2X211bHRpcmVhZCgmZWVwcm9tLCAweDcsIChfX2xlMTYgKiltYWNfYWRkciwgMyk7CisJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKG1hY19hZGRyKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlcyAocnRsODE4MCk6IEludmFsaWQgaHdhZGRyISBVc2luZyIKKwkJICAgICAgICIgcmFuZG9tbHkgZ2VuZXJhdGVkIE1BQyBhZGRyXG4iLCBwY2lfbmFtZShwZGV2KSk7CisJCXJhbmRvbV9ldGhlcl9hZGRyKG1hY19hZGRyKTsKKwl9CisJU0VUX0lFRUU4MDIxMV9QRVJNX0FERFIoZGV2LCBtYWNfYWRkcik7CisKKwkvKiBDQ0sgVFggcG93ZXIgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMTQ7IGkgKz0gMikgeworCQl1MTYgdHhwd3I7CisJCWVlcHJvbV85M2N4Nl9yZWFkKCZlZXByb20sIDB4MTAgKyAoaSA+PiAxKSwgJnR4cHdyKTsKKwkJcHJpdi0+Y2hhbm5lbHNbaV0uaHdfdmFsdWUgPSB0eHB3ciAmIDB4RkY7CisJCXByaXYtPmNoYW5uZWxzW2kgKyAxXS5od192YWx1ZSA9IHR4cHdyID4+IDg7CisJfQorCisJLyogT0ZETSBUWCBwb3dlciAqLworCWlmIChwcml2LT5yODE4NSkgeworCQlmb3IgKGkgPSAwOyBpIDwgMTQ7IGkgKz0gMikgeworCQkJdTE2IHR4cHdyOworCQkJZWVwcm9tXzkzY3g2X3JlYWQoJmVlcHJvbSwgMHgyMCArIChpID4+IDEpLCAmdHhwd3IpOworCQkJcHJpdi0+Y2hhbm5lbHNbaV0uaHdfdmFsdWUgfD0gKHR4cHdyICYgMHhGRikgPDwgODsKKwkJCXByaXYtPmNoYW5uZWxzW2kgKyAxXS5od192YWx1ZSB8PSB0eHB3ciAmIDB4RkYwMDsKKwkJfQorCX0KKworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCwgUlRMODE4WF9FRVBST01fQ01EX05PUk1BTCk7CisKKwlzcGluX2xvY2tfaW5pdCgmcHJpdi0+bG9jayk7CisKKwllcnIgPSBpZWVlODAyMTFfcmVnaXN0ZXJfaHcoZGV2KTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXMgKHJ0bDgxODApOiBDYW5ub3QgcmVnaXN0ZXIgZGV2aWNlXG4iLAorCQkgICAgICAgcGNpX25hbWUocGRldikpOworCQlnb3RvIGVycl9pb3VubWFwOworCX0KKworCXdpcGh5X2luZm8oZGV2LT53aXBoeSwgImh3YWRkciAlcG0sICVzICsgJXNcbiIsCisJCSAgIG1hY19hZGRyLCBjaGlwX25hbWUsIHByaXYtPnJmLT5uYW1lKTsKKworCXJldHVybiAwOworCisgZXJyX2lvdW5tYXA6CisJaW91bm1hcChwcml2LT5tYXApOworCisgZXJyX2ZyZWVfZGV2OgorCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwlpZWVlODAyMTFfZnJlZV9odyhkZXYpOworCisgZXJyX2ZyZWVfcmVnOgorCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBydGw4MTgwX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHJ0bDgxODBfcHJpdiAqcHJpdjsKKworCWlmICghZGV2KQorCQlyZXR1cm47CisKKwlpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyhkZXYpOworCisJcHJpdiA9IGRldi0+cHJpdjsKKworCXBjaV9pb3VubWFwKHBkZXYsIHByaXYtPm1hcCk7CisJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisJaWVlZTgwMjExX2ZyZWVfaHcoZGV2KTsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBydGw4MTgwX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBydGw4MTgwX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7CisJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfUE0gKi8KKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHJ0bDgxODBfZHJpdmVyID0geworCS5uYW1lCQk9IEtCVUlMRF9NT0ROQU1FLAorCS5pZF90YWJsZQk9IHJ0bDgxODBfdGFibGUsCisJLnByb2JlCQk9IHJ0bDgxODBfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChydGw4MTgwX3JlbW92ZSksCisjaWZkZWYgQ09ORklHX1BNCisJLnN1c3BlbmQJPSBydGw4MTgwX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBydGw4MTgwX3Jlc3VtZSwKKyNlbmRpZiAvKiBDT05GSUdfUE0gKi8KK307CisKK3N0YXRpYyBpbnQgX19pbml0IHJ0bDgxODBfaW5pdCh2b2lkKQoreworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZydGw4MTgwX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBydGw4MTgwX2V4aXQodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnJ0bDgxODBfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQocnRsODE4MF9pbml0KTsKK21vZHVsZV9leGl0KHJ0bDgxODBfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODAvZ3JmNTEwMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTgwL2dyZjUxMDEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWU3NTg5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTgwL2dyZjUxMDEuYwpAQCAtMCwwICsxLDE5MCBAQAorCisvKgorICogUmFkaW8gdHVuaW5nIGZvciBHQ1QgR1JGNTEwMSBvbiBSVEw4MTgwCisgKgorICogQ29weXJpZ2h0IDIwMDcgQW5kcmVhIE1lcmVsbG8gPGFuZHJlYW1ybEB0aXNjYWxpLml0PgorICoKKyAqIENvZGUgZnJvbSB0aGUgQlNEIGRyaXZlciBhbmQgdGhlIHJ0bDgxODEgcHJvamVjdCBoYXZlIGJlZW4KKyAqIHZlcnkgdXNlZnVsIHRvIHVuZGVyc3RhbmQgY2VydGFpbiB0aGluZ3MKKyAqCisgKiBJIHdhbnQgdG8gdGhhbmtzIHRoZSBBdXRob3JzIG9mIHN1Y2ggcHJvamVjdHMgYW5kIHRoZSBOZGlzd3JhcHBlcgorICogcHJvamVjdCBBdXRob3JzLgorICoKKyAqIEEgc3BlY2lhbCBCaWcgVGhhbmtzIGFsc28gaXMgZm9yIGFsbCBwZW9wbGUgd2hvIGRvbmF0ZWQgbWUgY2FyZHMsCisgKiBtYWtpbmcgcG9zc2libGUgdGhlIGNyZWF0aW9uIG9mIHRoZSBvcmlnaW5hbCBydGw4MTgwIGRyaXZlcgorICogZnJvbSB3aGljaCB0aGlzIGNvZGUgaXMgZGVyaXZlZCEKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KKworI2luY2x1ZGUgInJ0bDgxODAuaCIKKyNpbmNsdWRlICJncmY1MTAxLmgiCisKK3N0YXRpYyBjb25zdCBpbnQgZ3JmNTEwMV9lbmNvZGVbXSA9IHsKKwkweDAsIDB4OCwgMHg0LCAweEMsCisJMHgyLCAweEEsIDB4NiwgMHhFLAorCTB4MSwgMHg5LCAweDUsIDB4RCwKKwkweDMsIDB4QiwgMHg3LCAweEYKK307CisKK3N0YXRpYyB2b2lkIHdyaXRlX2dyZjUxMDEoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCB1OCBhZGRyLCB1MzIgZGF0YSkKK3sKKwlzdHJ1Y3QgcnRsODE4MF9wcml2ICpwcml2ID0gZGV2LT5wcml2OworCXUzMiBwaHlfY29uZmlnOworCisJcGh5X2NvbmZpZyA9ICBncmY1MTAxX2VuY29kZVsoZGF0YSA+PiA4KSAmIDB4Rl07CisJcGh5X2NvbmZpZyB8PSBncmY1MTAxX2VuY29kZVsoZGF0YSA+PiA0KSAmIDB4Rl0gPDwgNDsKKwlwaHlfY29uZmlnIHw9IGdyZjUxMDFfZW5jb2RlW2RhdGEgJiAweEZdIDw8IDg7CisJcGh5X2NvbmZpZyB8PSBncmY1MTAxX2VuY29kZVsoYWRkciA+PiAxKSAmIDB4Rl0gPDwgMTI7CisJcGh5X2NvbmZpZyB8PSAoYWRkciAmIDEpIDw8IDE2OworCXBoeV9jb25maWcgfD0gZ3JmNTEwMV9lbmNvZGVbKGRhdGEgJiAweGYwMDApID4+IDEyXSA8PCAyNDsKKworCS8qIE1BQyB3aWxsIGJhbmcgYml0cyB0byB0aGUgY2hpcCAqLworCXBoeV9jb25maWcgfD0gMHg5MDAwMDAwMDsKKworCXJ0bDgxOHhfaW93cml0ZTMyKHByaXYsCisJCShfX2xlMzIgX19pb21lbSAqKSAmcHJpdi0+bWFwLT5SRlBpbnNPdXRwdXQsIHBoeV9jb25maWcpOworCisJbXNsZWVwKDMpOworfQorCitzdGF0aWMgdm9pZCBncmY1MTAxX3dyaXRlX3BoeV9hbnRlbm5hKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgc2hvcnQgY2hhbikKK3sKKwlzdHJ1Y3QgcnRsODE4MF9wcml2ICpwcml2ID0gZGV2LT5wcml2OworCXU4IGFudCA9IEdSRjUxMDFfQU5URU5OQTsKKworCWlmIChwcml2LT5yZnBhcmFtICYgUkZfUEFSQU1fQU5UQkRFRkFVTFQpCisJCWFudCB8PSBCQl9BTlRFTk5BX0I7CisKKwlpZiAoY2hhbiA9PSAxNCkKKwkJYW50IHw9IEJCX0FOVEFUVEVOX0NIQU4xNDsKKworCXJ0bDgxODBfd3JpdGVfcGh5KGRldiwgMHgxMCwgYW50KTsKK30KKworc3RhdGljIHU4IGdyZjUxMDFfcmZfY2FsY19yc3NpKHU4IGFnYywgdTggc3EpCit7CisJaWYgKGFnYyA+IDYwKQorCQlyZXR1cm4gNjU7CisKKwkvKiBUT0RPKD8pOiBqdXN0IHJldHVybiBhZ2MgKG9yIGFnYyArIDUpIHRvIGF2b2lkIG11bHQgLyBkaXYgKi8KKwlyZXR1cm4gNjUgKiBhZ2MgLyA2MDsKK30KKworc3RhdGljIHZvaWQgZ3JmNTEwMV9yZl9zZXRfY2hhbm5lbChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCisJCQkJICAgc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mKQoreworCXN0cnVjdCBydGw4MTgwX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CisJaW50IGNoYW5uZWwgPSBpZWVlODAyMTFfZnJlcXVlbmN5X3RvX2NoYW5uZWwoY29uZi0+Y2hhbm5lbC0+Y2VudGVyX2ZyZXEpOworCXUzMiB0eHB3ID0gcHJpdi0+Y2hhbm5lbHNbY2hhbm5lbCAtIDFdLmh3X3ZhbHVlICYgMHhGRjsKKwl1MzIgY2hhbiA9IGNoYW5uZWwgLSAxOworCisJLyogc2V0IFRYIHBvd2VyICovCisJd3JpdGVfZ3JmNTEwMShkZXYsIDB4MTUsIDB4MCk7CisJd3JpdGVfZ3JmNTEwMShkZXYsIDB4MDYsIHR4cHcpOworCXdyaXRlX2dyZjUxMDEoZGV2LCAweDE1LCAweDEwKTsKKwl3cml0ZV9ncmY1MTAxKGRldiwgMHgxNSwgMHgwKTsKKworCS8qIHNldCBmcmVxdWVuY3kgKi8KKwl3cml0ZV9ncmY1MTAxKGRldiwgMHgwNywgMHgwKTsKKwl3cml0ZV9ncmY1MTAxKGRldiwgMHgwQiwgY2hhbik7CisJd3JpdGVfZ3JmNTEwMShkZXYsIDB4MDcsIDB4MTAwMCk7CisKKwlncmY1MTAxX3dyaXRlX3BoeV9hbnRlbm5hKGRldiwgY2hhbm5lbCk7Cit9CisKK3N0YXRpYyB2b2lkIGdyZjUxMDFfcmZfc3RvcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCit7CisJc3RydWN0IHJ0bDgxODBfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKKwl1MzIgYW5hcGFyYW07CisKKwlhbmFwYXJhbSA9IHByaXYtPmFuYXBhcmFtOworCWFuYXBhcmFtICY9IDB4MDAwZmZmZmY7CisJYW5hcGFyYW0gfD0gMHgzZjkwMDAwMDsKKwlydGw4MTgwX3NldF9hbmFwYXJhbShwcml2LCBhbmFwYXJhbSk7CisKKwl3cml0ZV9ncmY1MTAxKGRldiwgMHgwNywgMHgwKTsKKwl3cml0ZV9ncmY1MTAxKGRldiwgMHgxZiwgMHg0NSk7CisJd3JpdGVfZ3JmNTEwMShkZXYsIDB4MWYsIDB4NSk7CisJd3JpdGVfZ3JmNTEwMShkZXYsIDB4MDAsIDB4OGU0KTsKK30KKworc3RhdGljIHZvaWQgZ3JmNTEwMV9yZl9pbml0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKK3sKKwlzdHJ1Y3QgcnRsODE4MF9wcml2ICpwcml2ID0gZGV2LT5wcml2OworCisJcnRsODE4MF9zZXRfYW5hcGFyYW0ocHJpdiwgcHJpdi0+YW5hcGFyYW0pOworCisJd3JpdGVfZ3JmNTEwMShkZXYsIDB4MWYsIDB4MCk7CisJd3JpdGVfZ3JmNTEwMShkZXYsIDB4MWYsIDB4MCk7CisJd3JpdGVfZ3JmNTEwMShkZXYsIDB4MWYsIDB4NDApOworCXdyaXRlX2dyZjUxMDEoZGV2LCAweDFmLCAweDYwKTsKKwl3cml0ZV9ncmY1MTAxKGRldiwgMHgxZiwgMHg2MSk7CisJd3JpdGVfZ3JmNTEwMShkZXYsIDB4MWYsIDB4NjEpOworCXdyaXRlX2dyZjUxMDEoZGV2LCAweDAwLCAweGFlNCk7CisJd3JpdGVfZ3JmNTEwMShkZXYsIDB4MWYsIDB4MSk7CisJd3JpdGVfZ3JmNTEwMShkZXYsIDB4MWYsIDB4NDEpOworCXdyaXRlX2dyZjUxMDEoZGV2LCAweDFmLCAweDYxKTsKKworCXdyaXRlX2dyZjUxMDEoZGV2LCAweDAxLCAweDFhMjMpOworCXdyaXRlX2dyZjUxMDEoZGV2LCAweDAyLCAweDQ5NzEpOworCXdyaXRlX2dyZjUxMDEoZGV2LCAweDAzLCAweDQxZGUpOworCXdyaXRlX2dyZjUxMDEoZGV2LCAweDA0LCAweDJkODApOworCXdyaXRlX2dyZjUxMDEoZGV2LCAweDA1LCAweDY4ZmYpOwkvKiAweDYxZmYgb3JpZ2luYWwgdmFsdWUgKi8KKwl3cml0ZV9ncmY1MTAxKGRldiwgMHgwNiwgMHgwKTsKKwl3cml0ZV9ncmY1MTAxKGRldiwgMHgwNywgMHgwKTsKKwl3cml0ZV9ncmY1MTAxKGRldiwgMHgwOCwgMHg3NTMzKTsKKwl3cml0ZV9ncmY1MTAxKGRldiwgMHgwOSwgMHhjNDAxKTsKKwl3cml0ZV9ncmY1MTAxKGRldiwgMHgwYSwgMHgwKTsKKwl3cml0ZV9ncmY1MTAxKGRldiwgMHgwYywgMHgxYzcpOworCXdyaXRlX2dyZjUxMDEoZGV2LCAweDBkLCAweDI5ZDMpOworCXdyaXRlX2dyZjUxMDEoZGV2LCAweDBlLCAweDJlOCk7CisJd3JpdGVfZ3JmNTEwMShkZXYsIDB4MTAsIDB4MTkyKTsKKwl3cml0ZV9ncmY1MTAxKGRldiwgMHgxMSwgMHgyNDgpOworCXdyaXRlX2dyZjUxMDEoZGV2LCAweDEyLCAweDApOworCXdyaXRlX2dyZjUxMDEoZGV2LCAweDEzLCAweDIwYzQpOworCXdyaXRlX2dyZjUxMDEoZGV2LCAweDE0LCAweGY0ZmMpOworCXdyaXRlX2dyZjUxMDEoZGV2LCAweDE1LCAweDApOworCXdyaXRlX2dyZjUxMDEoZGV2LCAweDE2LCAweDE1MDApOworCisJd3JpdGVfZ3JmNTEwMShkZXYsIDB4MDcsIDB4MTAwMCk7CisKKwkvKiBiYXNlYmFuZCBjb25maWd1cmF0aW9uICovCisJcnRsODE4MF93cml0ZV9waHkoZGV2LCAwLCAweGE4KTsKKwlydGw4MTgwX3dyaXRlX3BoeShkZXYsIDMsIDB4MCk7CisJcnRsODE4MF93cml0ZV9waHkoZGV2LCA0LCAweGMwKTsKKwlydGw4MTgwX3dyaXRlX3BoeShkZXYsIDUsIDB4OTApOworCXJ0bDgxODBfd3JpdGVfcGh5KGRldiwgNiwgMHgxZSk7CisJcnRsODE4MF93cml0ZV9waHkoZGV2LCA3LCAweDY0KTsKKworCWdyZjUxMDFfd3JpdGVfcGh5X2FudGVubmEoZGV2LCAxKTsKKworCXJ0bDgxODBfd3JpdGVfcGh5KGRldiwgMHgxMSwgMHg4OCk7CisKKwlpZiAocnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPkNPTkZJRzIpICYKKwkgICAgUlRMODE4WF9DT05GSUcyX0FOVEVOTkFfRElWKQorCQlydGw4MTgwX3dyaXRlX3BoeShkZXYsIDB4MTIsIDB4YzApOyAvKiBlbmFibGUgYW50IGRpdmVyc2l0eSAqLworCWVsc2UKKwkJcnRsODE4MF93cml0ZV9waHkoZGV2LCAweDEyLCAweDQwKTsgLyogZGlzYWJsZSBhbnQgZGl2ZXJzaXR5ICovCisKKwlydGw4MTgwX3dyaXRlX3BoeShkZXYsIDB4MTMsIDB4OTAgfCBwcml2LT5jc3RocmVzaG9sZCk7CisKKwlydGw4MTgwX3dyaXRlX3BoeShkZXYsIDB4MTksIDB4MCk7CisJcnRsODE4MF93cml0ZV9waHkoZGV2LCAweDFhLCAweGEwKTsKKwlydGw4MTgwX3dyaXRlX3BoeShkZXYsIDB4MWIsIDB4NDQpOworfQorCitjb25zdCBzdHJ1Y3QgcnRsODE4eF9yZl9vcHMgZ3JmNTEwMV9yZl9vcHMgPSB7CisJLm5hbWUJCT0gIkdDVCIsCisJLmluaXQJCT0gZ3JmNTEwMV9yZl9pbml0LAorCS5zdG9wCQk9IGdyZjUxMDFfcmZfc3RvcCwKKwkuc2V0X2NoYW4JPSBncmY1MTAxX3JmX3NldF9jaGFubmVsLAorCS5jYWxjX3Jzc2kJPSBncmY1MTAxX3JmX2NhbGNfcnNzaSwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODBfZ3JmNTEwMS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTgwL2dyZjUxMDEuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTgwX2dyZjUxMDEuaApyZW5hbWUgdG8gZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTgwL2dyZjUxMDEuaApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTgwL21heDI4MjAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4MC9tYXgyODIwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY3YjMzNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4MC9tYXgyODIwLmMKQEAgLTAsMCArMSwxNjkgQEAKKy8qCisgKiBSYWRpbyB0dW5pbmcgZm9yIE1heGltIG1heDI4MjAgb24gUlRMODE4MAorICoKKyAqIENvcHlyaWdodCAyMDA3IEFuZHJlYSBNZXJlbGxvIDxhbmRyZWFtcmxAdGlzY2FsaS5pdD4KKyAqCisgKiBDb2RlIGZyb20gdGhlIEJTRCBkcml2ZXIgYW5kIHRoZSBydGw4MTgxIHByb2plY3QgaGF2ZSBiZWVuCisgKiB2ZXJ5IHVzZWZ1bCB0byB1bmRlcnN0YW5kIGNlcnRhaW4gdGhpbmdzCisgKgorICogSSB3YW50IHRvIHRoYW5rcyB0aGUgQXV0aG9ycyBvZiBzdWNoIHByb2plY3RzIGFuZCB0aGUgTmRpc3dyYXBwZXIKKyAqIHByb2plY3QgQXV0aG9ycy4KKyAqCisgKiBBIHNwZWNpYWwgQmlnIFRoYW5rcyBhbHNvIGlzIGZvciBhbGwgcGVvcGxlIHdobyBkb25hdGVkIG1lIGNhcmRzLAorICogbWFraW5nIHBvc3NpYmxlIHRoZSBjcmVhdGlvbiBvZiB0aGUgb3JpZ2luYWwgcnRsODE4MCBkcml2ZXIKKyAqIGZyb20gd2hpY2ggdGhpcyBjb2RlIGlzIGRlcml2ZWQhCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CisKKyNpbmNsdWRlICJydGw4MTgwLmgiCisjaW5jbHVkZSAibWF4MjgyMC5oIgorCitzdGF0aWMgY29uc3QgdTMyIG1heDI4MjBfY2hhbltdID0geworCTEyLCAvKiBDSCAxICovCisJMTcsCisJMjIsCisJMjcsCisJMzIsCisJMzcsCisJNDIsCisJNDcsCisJNTIsCisJNTcsCisJNjIsCisJNjcsCisJNzIsCisJODQsIC8qIENIIDE0ICovCit9OworCitzdGF0aWMgdm9pZCB3cml0ZV9tYXgyODIwKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgdTggYWRkciwgdTMyIGRhdGEpCit7CisJc3RydWN0IHJ0bDgxODBfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKKwl1MzIgcGh5X2NvbmZpZzsKKworCXBoeV9jb25maWcgPSAweDkwICsgKGRhdGEgJiAweGYpOworCXBoeV9jb25maWcgPDw9IDE2OworCXBoeV9jb25maWcgKz0gYWRkcjsKKwlwaHlfY29uZmlnIDw8PSA4OworCXBoeV9jb25maWcgKz0gKGRhdGEgPj4gNCkgJiAweGZmOworCisJcnRsODE4eF9pb3dyaXRlMzIocHJpdiwKKwkJKF9fbGUzMiBfX2lvbWVtICopICZwcml2LT5tYXAtPlJGUGluc091dHB1dCwgcGh5X2NvbmZpZyk7CisKKwltc2xlZXAoMSk7Cit9CisKK3N0YXRpYyB2b2lkIG1heDI4MjBfd3JpdGVfcGh5X2FudGVubmEoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBzaG9ydCBjaGFuKQoreworCXN0cnVjdCBydGw4MTgwX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CisJdTggYW50OworCisJYW50ID0gTUFYSU1fQU5URU5OQTsKKwlpZiAocHJpdi0+cmZwYXJhbSAmIFJGX1BBUkFNX0FOVEJERUZBVUxUKQorCQlhbnQgfD0gQkJfQU5URU5OQV9COworCWlmIChjaGFuID09IDE0KQorCQlhbnQgfD0gQkJfQU5UQVRURU5fQ0hBTjE0OworCisJcnRsODE4MF93cml0ZV9waHkoZGV2LCAweDEwLCBhbnQpOworfQorCitzdGF0aWMgdTggbWF4MjgyMF9yZl9jYWxjX3Jzc2kodTggYWdjLCB1OCBzcSkKK3sKKwlib29sIG9kZDsKKworCW9kZCA9ICEhKGFnYyAmIDEpOworCisJYWdjID4+PSAxOworCWlmIChvZGQpCisJCWFnYyArPSA3NjsKKwllbHNlCisJCWFnYyArPSA2NjsKKworCS8qIFRPRE86IGNoYW5nZSBhZGRlbmRzIGFib3ZlIHRvIGF2b2lkIG11bHQgLyBkaXYgYmVsb3cgKi8KKwlyZXR1cm4gNjUgKiBhZ2MgLyAxMDA7Cit9CisKK3N0YXRpYyB2b2lkIG1heDI4MjBfcmZfc2V0X2NoYW5uZWwoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAorCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZikKK3sKKwlzdHJ1Y3QgcnRsODE4MF9wcml2ICpwcml2ID0gZGV2LT5wcml2OworCWludCBjaGFubmVsID0gY29uZiA/CisJCWllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbChjb25mLT5jaGFubmVsLT5jZW50ZXJfZnJlcSkgOiAxOworCXVuc2lnbmVkIGludCBjaGFuX2lkeCA9IGNoYW5uZWwgLSAxOworCXUzMiB0eHB3ID0gcHJpdi0+Y2hhbm5lbHNbY2hhbl9pZHhdLmh3X3ZhbHVlICYgMHhGRjsKKwl1MzIgY2hhbiA9IG1heDI4MjBfY2hhbltjaGFuX2lkeF07CisKKwkvKiBXaGlsZSBwaGlsaXBzIFNBMjQwMCBkcml2ZSB0aGUgUEEgYmlhcyBmcm9tCisJICogc2EyNDAwLCBmb3IgTUFYSU0gd2UgZG8gdGhpcyBkaXJlY3RseSBmcm9tIEJCICovCisJcnRsODE4MF93cml0ZV9waHkoZGV2LCAzLCB0eHB3KTsKKworCW1heDI4MjBfd3JpdGVfcGh5X2FudGVubmEoZGV2LCBjaGFubmVsKTsKKwl3cml0ZV9tYXgyODIwKGRldiwgMywgY2hhbik7Cit9CisKK3N0YXRpYyB2b2lkIG1heDI4MjBfcmZfc3RvcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCit7CisJcnRsODE4MF93cml0ZV9waHkoZGV2LCAzLCAweDgpOworCXdyaXRlX21heDI4MjAoZGV2LCAxLCAwKTsKK30KKworCitzdGF0aWMgdm9pZCBtYXgyODIwX3JmX2luaXQoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQoreworCXN0cnVjdCBydGw4MTgwX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CisKKwkvKiBNQVhJTSBmcm9tIG5ldGJzZCBkcml2ZXIgKi8KKwl3cml0ZV9tYXgyODIwKGRldiwgMCwgMHgwMDcpOyAvKiB0ZXN0IG1vZGUgYXMgaW5kaWNhdGVkIGluIGRhdGFzaGVldCAqLworCXdyaXRlX21heDI4MjAoZGV2LCAxLCAweDAxZSk7IC8qIGVuYWJsZSByZWdpc3RlciAqLworCXdyaXRlX21heDI4MjAoZGV2LCAyLCAweDAwMSk7IC8qIHN5bnQgcmVnaXN0ZXIgKi8KKworCW1heDI4MjBfcmZfc2V0X2NoYW5uZWwoZGV2LCBOVUxMKTsKKworCXdyaXRlX21heDI4MjAoZGV2LCA0LCAweDMxMyk7IC8qIHJ4IHJlZ2lzdGVyICovCisKKwkvKiBQQSBpcyBkcml2ZW4gZGlyZWN0bHkgYnkgdGhlIEJCLCB3ZSBrZWVwIHRoZSBNQVhJTSBiaWFzCisJICogYXQgdGhlIGhpZ2hlc3QgdmFsdWUgaW4gY2FzZSB0aGF0IHNldHRpbmcgaXQgdG8gbG93ZXIKKwkgKiB2YWx1ZXMgbWF5IGludHJvZHVjZSBzb21lIGZ1cnRoZXIgYXR0ZW51YXRpb24gc29tZXdoZXJlLi4KKwkgKi8KKwl3cml0ZV9tYXgyODIwKGRldiwgNSwgMHgwMGYpOworCisJLyogYmFzZWJhbmQgY29uZmlndXJhdGlvbiAqLworCXJ0bDgxODBfd3JpdGVfcGh5KGRldiwgMCwgMHg4OCk7IC8qIHN5czEgICAgICAgKi8KKwlydGw4MTgwX3dyaXRlX3BoeShkZXYsIDMsIDB4MDgpOyAvKiB0eGFnYyAgICAgICovCisJcnRsODE4MF93cml0ZV9waHkoZGV2LCA0LCAweGY4KTsgLyogbG5hZGV0ICAgICAqLworCXJ0bDgxODBfd3JpdGVfcGh5KGRldiwgNSwgMHg5MCk7IC8qIGlmYWdjaW5pdCAgKi8KKwlydGw4MTgwX3dyaXRlX3BoeShkZXYsIDYsIDB4MWEpOyAvKiBpZmFnY2xpbWl0ICovCisJcnRsODE4MF93cml0ZV9waHkoZGV2LCA3LCAweDY0KTsgLyogaWZhZ2NkZXQgICAqLworCisJbWF4MjgyMF93cml0ZV9waHlfYW50ZW5uYShkZXYsIDEpOworCisJcnRsODE4MF93cml0ZV9waHkoZGV2LCAweDExLCAweDg4KTsgLyogdHJsICovCisKKwlpZiAocnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPkNPTkZJRzIpICYKKwkgICAgUlRMODE4WF9DT05GSUcyX0FOVEVOTkFfRElWKQorCQlydGw4MTgwX3dyaXRlX3BoeShkZXYsIDB4MTIsIDB4YzcpOworCWVsc2UKKwkJcnRsODE4MF93cml0ZV9waHkoZGV2LCAweDEyLCAweDQ3KTsKKworCXJ0bDgxODBfd3JpdGVfcGh5KGRldiwgMHgxMywgMHg5Yik7CisKKwlydGw4MTgwX3dyaXRlX3BoeShkZXYsIDB4MTksIDB4MCk7ICAvKiBDSEVTVExJTSAqLworCXJ0bDgxODBfd3JpdGVfcGh5KGRldiwgMHgxYSwgMHg5Zik7IC8qIENIU1FMSU0gICovCisKKwltYXgyODIwX3JmX3NldF9jaGFubmVsKGRldiwgTlVMTCk7Cit9CisKK2NvbnN0IHN0cnVjdCBydGw4MTh4X3JmX29wcyBtYXgyODIwX3JmX29wcyA9IHsKKwkubmFtZQkJPSAiTWF4aW0iLAorCS5pbml0CQk9IG1heDI4MjBfcmZfaW5pdCwKKwkuc3RvcAkJPSBtYXgyODIwX3JmX3N0b3AsCisJLnNldF9jaGFuCT0gbWF4MjgyMF9yZl9zZXRfY2hhbm5lbCwKKwkuY2FsY19yc3NpCT0gbWF4MjgyMF9yZl9jYWxjX3Jzc2ksCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTgwX21heDI4MjAuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4MC9tYXgyODIwLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4MF9tYXgyODIwLmgKcmVuYW1lIHRvIGRyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4MC9tYXgyODIwLmgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4MC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTgwL3J0bDgxODAuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTgwLmgKcmVuYW1lIHRvIGRyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4MC9ydGw4MTgwLmgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4MC9ydGw4MjI1LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODAvcnRsODIyNS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjNDU3NGIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODAvcnRsODIyNS5jCkBAIC0wLDAgKzEsNzkxIEBACisKKy8qCisgKiBSYWRpbyB0dW5pbmcgZm9yIFJUTDgyMjUgb24gUlRMODE4MAorICoKKyAqIENvcHlyaWdodCAyMDA3IE1pY2hhZWwgV3UgPGZsYW1pbmdpY2VAc291cm1pbGsubmV0PgorICogQ29weXJpZ2h0IDIwMDcgQW5kcmVhIE1lcmVsbG8gPGFuZHJlYW1ybEB0aXNjYWxpLml0PgorICoKKyAqIEJhc2VkIG9uIHRoZSByODE4MCBkcml2ZXIsIHdoaWNoIGlzOgorICogQ29weXJpZ2h0IDIwMDUgQW5kcmVhIE1lcmVsbG8gPGFuZHJlYW1ybEB0aXNjYWxpLml0PiwgZXQgYWwuCisgKgorICogVGhhbmtzIHRvIFJlYWx0ZWsgZm9yIHRoZWlyIHN1cHBvcnQhCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CisKKyNpbmNsdWRlICJydGw4MTgwLmgiCisjaW5jbHVkZSAicnRsODIyNS5oIgorCitzdGF0aWMgdm9pZCBydGw4MjI1X3dyaXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgdTggYWRkciwgdTE2IGRhdGEpCit7CisJc3RydWN0IHJ0bDgxODBfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKKwl1MTYgcmVnODAsIHJlZzg0LCByZWc4MjsKKwl1MzIgYmFuZ2RhdGE7CisJaW50IGk7CisKKwliYW5nZGF0YSA9IChkYXRhIDw8IDQpIHwgKGFkZHIgJiAweGYpOworCisJcmVnODAgPSBydGw4MTh4X2lvcmVhZDE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc091dHB1dCkgJiAweGZmZjM7CisJcmVnODIgPSBydGw4MTh4X2lvcmVhZDE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc0VuYWJsZSk7CisKKwlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNFbmFibGUsIHJlZzgyIHwgMHg3KTsKKworCXJlZzg0ID0gcnRsODE4eF9pb3JlYWQxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNTZWxlY3QpOworCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc1NlbGVjdCwgcmVnODQgfCAweDcgfCAweDQwMCk7CisJcnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQpOworCXVkZWxheSgxMCk7CisKKwlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNPdXRwdXQsIHJlZzgwIHwgKDEgPDwgMikpOworCXJ0bDgxOHhfaW9yZWFkOChwcml2LCAmcHJpdi0+bWFwLT5FRVBST01fQ01EKTsKKwl1ZGVsYXkoMik7CisJcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zT3V0cHV0LCByZWc4MCk7CisJcnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQpOworCXVkZWxheSgxMCk7CisKKwlmb3IgKGkgPSAxNTsgaSA+PSAwOyBpLS0pIHsKKwkJdTE2IHJlZyA9IHJlZzgwOworCisJCWlmIChiYW5nZGF0YSAmICgxIDw8IGkpKQorCQkJcmVnIHw9IDE7CisKKwkJaWYgKGkgJiAxKQorCQkJcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zT3V0cHV0LCByZWcpOworCisJCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc091dHB1dCwgcmVnIHwgKDEgPDwgMSkpOworCQlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNPdXRwdXQsIHJlZyB8ICgxIDw8IDEpKTsKKworCQlpZiAoIShpICYgMSkpCisJCQlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNPdXRwdXQsIHJlZyk7CisJfQorCisJcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zT3V0cHV0LCByZWc4MCB8ICgxIDw8IDIpKTsKKwlydGw4MTh4X2lvcmVhZDgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCk7CisJdWRlbGF5KDEwKTsKKworCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc091dHB1dCwgcmVnODAgfCAoMSA8PCAyKSk7CisJcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zU2VsZWN0LCByZWc4NCB8IDB4NDAwKTsKKwlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNFbmFibGUsIDB4MUZGRik7Cit9CisKK3N0YXRpYyB1MTYgcnRsODIyNV9yZWFkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgdTggYWRkcikKK3sKKwlzdHJ1Y3QgcnRsODE4MF9wcml2ICpwcml2ID0gZGV2LT5wcml2OworCXUxNiByZWc4MCwgcmVnODIsIHJlZzg0LCBvdXQ7CisJaW50IGk7CisKKwlyZWc4MCA9IHJ0bDgxOHhfaW9yZWFkMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zT3V0cHV0KTsKKwlyZWc4MiA9IHJ0bDgxOHhfaW9yZWFkMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zRW5hYmxlKTsKKwlyZWc4NCA9IHJ0bDgxOHhfaW9yZWFkMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zU2VsZWN0KSB8IDB4NDAwOworCisJcmVnODAgJj0gfjB4RjsKKworCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc0VuYWJsZSwgcmVnODIgfCAweDAwMEYpOworCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc1NlbGVjdCwgcmVnODQgfCAweDAwMEYpOworCisJcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zT3V0cHV0LCByZWc4MCB8ICgxIDw8IDIpKTsKKwlydGw4MTh4X2lvcmVhZDgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCk7CisJdWRlbGF5KDQpOworCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc091dHB1dCwgcmVnODApOworCXJ0bDgxOHhfaW9yZWFkOChwcml2LCAmcHJpdi0+bWFwLT5FRVBST01fQ01EKTsKKwl1ZGVsYXkoNSk7CisKKwlmb3IgKGkgPSA0OyBpID49IDA7IGktLSkgeworCQl1MTYgcmVnID0gcmVnODAgfCAoKGFkZHIgPj4gaSkgJiAxKTsKKworCQlpZiAoIShpICYgMSkpIHsKKwkJCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc091dHB1dCwgcmVnKTsKKwkJCXJ0bDgxOHhfaW9yZWFkOChwcml2LCAmcHJpdi0+bWFwLT5FRVBST01fQ01EKTsKKwkJCXVkZWxheSgxKTsKKwkJfQorCisJCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc091dHB1dCwKKwkJCQkgIHJlZyB8ICgxIDw8IDEpKTsKKwkJcnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQpOworCQl1ZGVsYXkoMik7CisJCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc091dHB1dCwKKwkJCQkgIHJlZyB8ICgxIDw8IDEpKTsKKwkJcnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQpOworCQl1ZGVsYXkoMik7CisKKwkJaWYgKGkgJiAxKSB7CisJCQlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNPdXRwdXQsIHJlZyk7CisJCQlydGw4MTh4X2lvcmVhZDgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCk7CisJCQl1ZGVsYXkoMSk7CisJCX0KKwl9CisKKwlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNFbmFibGUsIDB4MDAwRSk7CisJcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zU2VsZWN0LCAweDA0MEUpOworCXJ0bDgxOHhfaW9yZWFkOChwcml2LCAmcHJpdi0+bWFwLT5FRVBST01fQ01EKTsKKwlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNPdXRwdXQsCisJCQkgIHJlZzgwIHwgKDEgPDwgMykgfCAoMSA8PCAxKSk7CisJcnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQpOworCXVkZWxheSgyKTsKKwlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNPdXRwdXQsCisJCQkgIHJlZzgwIHwgKDEgPDwgMykpOworCXJ0bDgxOHhfaW9yZWFkOChwcml2LCAmcHJpdi0+bWFwLT5FRVBST01fQ01EKTsKKwl1ZGVsYXkoMik7CisJcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zT3V0cHV0LAorCQkJICByZWc4MCB8ICgxIDw8IDMpKTsKKwlydGw4MTh4X2lvcmVhZDgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCk7CisJdWRlbGF5KDIpOworCisJb3V0ID0gMDsKKwlmb3IgKGkgPSAxMTsgaSA+PSAwOyBpLS0pIHsKKwkJcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zT3V0cHV0LAorCQkJCSAgcmVnODAgfCAoMSA8PCAzKSk7CisJCXJ0bDgxOHhfaW9yZWFkOChwcml2LCAmcHJpdi0+bWFwLT5FRVBST01fQ01EKTsKKwkJdWRlbGF5KDEpOworCQlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNPdXRwdXQsCisJCQkJICByZWc4MCB8ICgxIDw8IDMpIHwgKDEgPDwgMSkpOworCQlydGw4MTh4X2lvcmVhZDgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCk7CisJCXVkZWxheSgyKTsKKwkJcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zT3V0cHV0LAorCQkJCSAgcmVnODAgfCAoMSA8PCAzKSB8ICgxIDw8IDEpKTsKKwkJcnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQpOworCQl1ZGVsYXkoMik7CisJCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc091dHB1dCwKKwkJCQkgIHJlZzgwIHwgKDEgPDwgMykgfCAoMSA8PCAxKSk7CisJCXJ0bDgxOHhfaW9yZWFkOChwcml2LCAmcHJpdi0+bWFwLT5FRVBST01fQ01EKTsKKwkJdWRlbGF5KDIpOworCisJCWlmIChydGw4MTh4X2lvcmVhZDE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc0lucHV0KSAmICgxIDw8IDEpKQorCQkJb3V0IHw9IDEgPDwgaTsKKworCQlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNPdXRwdXQsCisJCQkJICByZWc4MCB8ICgxIDw8IDMpKTsKKwkJcnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQpOworCQl1ZGVsYXkoMik7CisJfQorCisJcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zT3V0cHV0LAorCQkJICByZWc4MCB8ICgxIDw8IDMpIHwgKDEgPDwgMikpOworCXJ0bDgxOHhfaW9yZWFkOChwcml2LCAmcHJpdi0+bWFwLT5FRVBST01fQ01EKTsKKwl1ZGVsYXkoMik7CisKKwlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNFbmFibGUsIHJlZzgyKTsKKwlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNTZWxlY3QsIHJlZzg0KTsKKwlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNPdXRwdXQsIDB4MDNBMCk7CisKKwlyZXR1cm4gb3V0OworfQorCitzdGF0aWMgY29uc3QgdTE2IHJ0bDgyMjViY2RfcnhnYWluW10gPSB7CisJMHgwNDAwLCAweDA0MDEsIDB4MDQwMiwgMHgwNDAzLCAweDA0MDQsIDB4MDQwNSwgMHgwNDA4LCAweDA0MDksCisJMHgwNDBhLCAweDA0MGIsIDB4MDUwMiwgMHgwNTAzLCAweDA1MDQsIDB4MDUwNSwgMHgwNTQwLCAweDA1NDEsCisJMHgwNTQyLCAweDA1NDMsIDB4MDU0NCwgMHgwNTQ1LCAweDA1ODAsIDB4MDU4MSwgMHgwNTgyLCAweDA1ODMsCisJMHgwNTg0LCAweDA1ODUsIDB4MDU4OCwgMHgwNTg5LCAweDA1OGEsIDB4MDU4YiwgMHgwNjQzLCAweDA2NDQsCisJMHgwNjQ1LCAweDA2ODAsIDB4MDY4MSwgMHgwNjgyLCAweDA2ODMsIDB4MDY4NCwgMHgwNjg1LCAweDA2ODgsCisJMHgwNjg5LCAweDA2OGEsIDB4MDY4YiwgMHgwNjhjLCAweDA3NDIsIDB4MDc0MywgMHgwNzQ0LCAweDA3NDUsCisJMHgwNzgwLCAweDA3ODEsIDB4MDc4MiwgMHgwNzgzLCAweDA3ODQsIDB4MDc4NSwgMHgwNzg4LCAweDA3ODksCisJMHgwNzhhLCAweDA3OGIsIDB4MDc4YywgMHgwNzhkLCAweDA3OTAsIDB4MDc5MSwgMHgwNzkyLCAweDA3OTMsCisJMHgwNzk0LCAweDA3OTUsIDB4MDc5OCwgMHgwNzk5LCAweDA3OWEsIDB4MDc5YiwgMHgwNzljLCAweDA3OWQsCisJMHgwN2EwLCAweDA3YTEsIDB4MDdhMiwgMHgwN2EzLCAweDA3YTQsIDB4MDdhNSwgMHgwN2E4LCAweDA3YTksCisJMHgwN2FhLCAweDA3YWIsIDB4MDdhYywgMHgwN2FkLCAweDA3YjAsIDB4MDdiMSwgMHgwN2IyLCAweDA3YjMsCisJMHgwN2I0LCAweDA3YjUsIDB4MDdiOCwgMHgwN2I5LCAweDA3YmEsIDB4MDdiYiwgMHgwN2JiCit9OworCitzdGF0aWMgY29uc3QgdTggcnRsODIyNV9hZ2NbXSA9IHsKKwkweDllLCAweDllLCAweDllLCAweDllLCAweDllLCAweDllLCAweDllLCAweDllLAorCTB4OWQsIDB4OWMsIDB4OWIsIDB4OWEsIDB4OTksIDB4OTgsIDB4OTcsIDB4OTYsCisJMHg5NSwgMHg5NCwgMHg5MywgMHg5MiwgMHg5MSwgMHg5MCwgMHg4ZiwgMHg4ZSwKKwkweDhkLCAweDhjLCAweDhiLCAweDhhLCAweDg5LCAweDg4LCAweDg3LCAweDg2LAorCTB4ODUsIDB4ODQsIDB4ODMsIDB4ODIsIDB4ODEsIDB4ODAsIDB4M2YsIDB4M2UsCisJMHgzZCwgMHgzYywgMHgzYiwgMHgzYSwgMHgzOSwgMHgzOCwgMHgzNywgMHgzNiwKKwkweDM1LCAweDM0LCAweDMzLCAweDMyLCAweDMxLCAweDMwLCAweDJmLCAweDJlLAorCTB4MmQsIDB4MmMsIDB4MmIsIDB4MmEsIDB4MjksIDB4MjgsIDB4MjcsIDB4MjYsCisJMHgyNSwgMHgyNCwgMHgyMywgMHgyMiwgMHgyMSwgMHgyMCwgMHgxZiwgMHgxZSwKKwkweDFkLCAweDFjLCAweDFiLCAweDFhLCAweDE5LCAweDE4LCAweDE3LCAweDE2LAorCTB4MTUsIDB4MTQsIDB4MTMsIDB4MTIsIDB4MTEsIDB4MTAsIDB4MGYsIDB4MGUsCisJMHgwZCwgMHgwYywgMHgwYiwgMHgwYSwgMHgwOSwgMHgwOCwgMHgwNywgMHgwNiwKKwkweDA1LCAweDA0LCAweDAzLCAweDAyLCAweDAxLCAweDAxLCAweDAxLCAweDAxLAorCTB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsCisJMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwKKwkweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxCit9OworCitzdGF0aWMgY29uc3QgdTggcnRsODIyNV9nYWluW10gPSB7CisJMHgyMywgMHg4OCwgMHg3YywgMHhhNSwgLyogLTgyZGJtICovCisJMHgyMywgMHg4OCwgMHg3YywgMHhiNSwgLyogLTgyZGJtICovCisJMHgyMywgMHg4OCwgMHg3YywgMHhjNSwgLyogLTgyZGJtICovCisJMHgzMywgMHg4MCwgMHg3OSwgMHhjNSwgLyogLTc4ZGJtICovCisJMHg0MywgMHg3OCwgMHg3NiwgMHhjNSwgLyogLTc0ZGJtICovCisJMHg1MywgMHg2MCwgMHg3MywgMHhjNSwgLyogLTcwZGJtICovCisJMHg2MywgMHg1OCwgMHg3MCwgMHhjNSwgLyogLTY2ZGJtICovCit9OworCitzdGF0aWMgY29uc3QgdTggcnRsODIyNV90aHJlc2hvbGRbXSA9IHsKKwkweDhkLCAweDhkLCAweDhkLCAweDhkLCAweDlkLCAweGFkLCAweGJkCit9OworCitzdGF0aWMgY29uc3QgdTggcnRsODIyNV90eF9nYWluX2Nja19vZmRtW10gPSB7CisJMHgwMiwgMHgwNiwgMHgwZSwgMHgxZSwgMHgzZSwgMHg3ZQorfTsKKworc3RhdGljIGNvbnN0IHU4IHJ0bDgyMjVfdHhfcG93ZXJfY2NrW10gPSB7CisJMHgxOCwgMHgxNywgMHgxNSwgMHgxMSwgMHgwYywgMHgwOCwgMHgwNCwgMHgwMiwKKwkweDFiLCAweDFhLCAweDE3LCAweDEzLCAweDBlLCAweDA5LCAweDA0LCAweDAyLAorCTB4MWYsIDB4MWUsIDB4MWEsIDB4MTUsIDB4MTAsIDB4MGEsIDB4MDUsIDB4MDIsCisJMHgyMiwgMHgyMSwgMHgxZCwgMHgxOCwgMHgxMSwgMHgwYiwgMHgwNiwgMHgwMiwKKwkweDI2LCAweDI1LCAweDIxLCAweDFiLCAweDE0LCAweDBkLCAweDA2LCAweDAzLAorCTB4MmIsIDB4MmEsIDB4MjUsIDB4MWUsIDB4MTYsIDB4MGUsIDB4MDcsIDB4MDMKK307CisKK3N0YXRpYyBjb25zdCB1OCBydGw4MjI1X3R4X3Bvd2VyX2Nja19jaDE0W10gPSB7CisJMHgxOCwgMHgxNywgMHgxNSwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDFiLCAweDFhLCAweDE3LCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MWYsIDB4MWUsIDB4MWEsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgyMiwgMHgyMSwgMHgxZCwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDI2LCAweDI1LCAweDIxLCAweDEzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MmIsIDB4MmEsIDB4MjUsIDB4MTUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAKK307CisKK3N0YXRpYyBjb25zdCB1OCBydGw4MjI1X3R4X3Bvd2VyX29mZG1bXSA9IHsKKwkweDgwLCAweDkwLCAweGEyLCAweGI1LCAweGNiLCAweGU0Cit9OworCitzdGF0aWMgY29uc3QgdTMyIHJ0bDgyMjVfY2hhbltdID0geworCTB4MDg1YywgMHgwOGRjLCAweDA5NWMsIDB4MDlkYywgMHgwYTVjLCAweDBhZGMsIDB4MGI1YywKKwkweDBiZGMsIDB4MGM1YywgMHgwY2RjLCAweDBkNWMsIDB4MGRkYywgMHgwZTVjLCAweDBmNzIKK307CisKK3N0YXRpYyB2b2lkIHJ0bDgyMjVfcmZfc2V0X3R4X3Bvd2VyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgaW50IGNoYW5uZWwpCit7CisJc3RydWN0IHJ0bDgxODBfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKKwl1OCBjY2tfcG93ZXIsIG9mZG1fcG93ZXI7CisJY29uc3QgdTggKnRtcDsKKwl1MzIgcmVnOworCWludCBpOworCisJY2NrX3Bvd2VyID0gcHJpdi0+Y2hhbm5lbHNbY2hhbm5lbCAtIDFdLmh3X3ZhbHVlICYgMHhGRjsKKwlvZmRtX3Bvd2VyID0gcHJpdi0+Y2hhbm5lbHNbY2hhbm5lbCAtIDFdLmh3X3ZhbHVlID4+IDg7CisKKwljY2tfcG93ZXIgPSBtaW4oY2NrX3Bvd2VyLCAodTgpMzUpOworCW9mZG1fcG93ZXIgPSBtaW4ob2ZkbV9wb3dlciwgKHU4KTM1KTsKKworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+VFhfR0FJTl9DQ0ssCisJCQkgcnRsODIyNV90eF9nYWluX2Nja19vZmRtW2Nja19wb3dlciAvIDZdID4+IDEpOworCisJaWYgKGNoYW5uZWwgPT0gMTQpCisJCXRtcCA9ICZydGw4MjI1X3R4X3Bvd2VyX2Nja19jaDE0WyhjY2tfcG93ZXIgJSA2KSAqIDhdOworCWVsc2UKKwkJdG1wID0gJnJ0bDgyMjVfdHhfcG93ZXJfY2NrWyhjY2tfcG93ZXIgJSA2KSAqIDhdOworCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJcnRsODIyNV93cml0ZV9waHlfY2NrKGRldiwgMHg0NCArIGksICp0bXArKyk7CisKKwltc2xlZXAoMSk7IC8qIEZJWE1FOiBvcHRpb25hbD8gKi8KKworCS8qIGFuYXBhcmFtMiBvbiAqLworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCwgUlRMODE4WF9FRVBST01fQ01EX0NPTkZJRyk7CisJcmVnID0gcnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPkNPTkZJRzMpOworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+Q09ORklHMywgcmVnIHwgUlRMODE4WF9DT05GSUczX0FOQVBBUkFNX1dSSVRFKTsKKwlydGw4MTh4X2lvd3JpdGUzMihwcml2LCAmcHJpdi0+bWFwLT5BTkFQQVJBTTIsIFJUTDgyMjVfQU5BUEFSQU0yX09OKTsKKwlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkNPTkZJRzMsIHJlZyAmIH5SVEw4MThYX0NPTkZJRzNfQU5BUEFSQU1fV1JJVEUpOworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCwgUlRMODE4WF9FRVBST01fQ01EX05PUk1BTCk7CisKKwlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPlRYX0dBSU5fT0ZETSwKKwkJCSBydGw4MjI1X3R4X2dhaW5fY2NrX29mZG1bb2ZkbV9wb3dlci82XSA+PiAxKTsKKworCXRtcCA9ICZydGw4MjI1X3R4X3Bvd2VyX29mZG1bb2ZkbV9wb3dlciAlIDZdOworCisJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDUsICp0bXApOworCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCA3LCAqdG1wKTsKKworCW1zbGVlcCgxKTsKK30KKworc3RhdGljIHZvaWQgcnRsODIyNV9yZl9pbml0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKK3sKKwlzdHJ1Y3QgcnRsODE4MF9wcml2ICpwcml2ID0gZGV2LT5wcml2OworCWludCBpOworCisJcnRsODE4MF9zZXRfYW5hcGFyYW0ocHJpdiwgUlRMODIyNV9BTkFQQVJBTV9PTik7CisKKwkvKiBob3N0X3BjaV9pbml0ICovCisJcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zT3V0cHV0LCAweDA0ODApOworCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc0VuYWJsZSwgMHgxRkZGKTsKKwlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNTZWxlY3QsIDB4MDQ4OCk7CisJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5HUF9FTkFCTEUsIDApOworCXJ0bDgxOHhfaW9yZWFkOChwcml2LCAmcHJpdi0+bWFwLT5FRVBST01fQ01EKTsKKwltc2xlZXAoMjAwKTsJLyogRklYTUU6IGVoaD8/ICovCisJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5HUF9FTkFCTEUsIDB4RkYgJiB+KDEgPDwgNikpOworCisJcnRsODE4eF9pb3dyaXRlMzIocHJpdiwgJnByaXYtPm1hcC0+UkZfVElNSU5HLCAweDAwMGE4MDA4KTsKKworCS8qIFRPRE86IGNoZWNrIGlmIHdlIG5lZWQgcmVhbGx5IHRvIGNoYW5nZSBCUlNSIHRvIGRvIFJGIGNvbmZpZyAqLworCXJ0bDgxOHhfaW9yZWFkMTYocHJpdiwgJnByaXYtPm1hcC0+QlJTUik7CisJcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+QlJTUiwgMHhGRkZGKTsKKwlydGw4MTh4X2lvd3JpdGUzMihwcml2LCAmcHJpdi0+bWFwLT5SRl9QQVJBLCAweDAwMTAwMDQ0KTsKKwlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQsIFJUTDgxOFhfRUVQUk9NX0NNRF9DT05GSUcpOworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+Q09ORklHMywgMHg0NCk7CisJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5FRVBST01fQ01ELCBSVEw4MThYX0VFUFJPTV9DTURfTk9STUFMKTsKKworCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDAsIDB4MDY3KTsKKwlydGw4MjI1X3dyaXRlKGRldiwgMHgxLCAweEZFMCk7CisJcnRsODIyNV93cml0ZShkZXYsIDB4MiwgMHg0NEQpOworCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDMsIDB4NDQxKTsKKwlydGw4MjI1X3dyaXRlKGRldiwgMHg0LCAweDhCRSk7CisJcnRsODIyNV93cml0ZShkZXYsIDB4NSwgMHhCRjApOwkJLyogVE9ETzogbWluaXBjaSAqLworCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDYsIDB4QUU2KTsKKwlydGw4MjI1X3dyaXRlKGRldiwgMHg3LCBydGw4MjI1X2NoYW5bMF0pOworCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDgsIDB4MDFGKTsKKwlydGw4MjI1X3dyaXRlKGRldiwgMHg5LCAweDMzNCk7CisJcnRsODIyNV93cml0ZShkZXYsIDB4QSwgMHhGRDQpOworCXJ0bDgyMjVfd3JpdGUoZGV2LCAweEIsIDB4MzkxKTsKKwlydGw4MjI1X3dyaXRlKGRldiwgMHhDLCAweDA1MCk7CisJcnRsODIyNV93cml0ZShkZXYsIDB4RCwgMHg2REIpOworCXJ0bDgyMjVfd3JpdGUoZGV2LCAweEUsIDB4MDI5KTsKKwlydGw4MjI1X3dyaXRlKGRldiwgMHhGLCAweDkxNCk7IG1zbGVlcCgxKTsKKworCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDIsIDB4QzREKTsgbXNsZWVwKDEwMCk7CisKKwlydGw4MjI1X3dyaXRlKGRldiwgMHgwLCAweDEyNyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShydGw4MjI1YmNkX3J4Z2Fpbik7IGkrKykgeworCQlydGw4MjI1X3dyaXRlKGRldiwgMHgxLCBpICsgMSk7CisJCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDIsIHJ0bDgyMjViY2RfcnhnYWluW2ldKTsKKwl9CisKKwlydGw4MjI1X3dyaXRlKGRldiwgMHgwLCAweDAyNyk7CisJcnRsODIyNV93cml0ZShkZXYsIDB4MCwgMHgyMkYpOworCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc0VuYWJsZSwgMHgxRkZGKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJ0bDgyMjVfYWdjKTsgaSsrKSB7CisJCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweEIsIHJ0bDgyMjVfYWdjW2ldKTsKKwkJbXNsZWVwKDEpOworCQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHhBLCAweDgwICsgaSk7CisJCW1zbGVlcCgxKTsKKwl9CisKKwltc2xlZXAoMSk7CisKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgwMCwgMHgwMSk7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgwMSwgMHgwMik7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgwMiwgMHg2Mik7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgwMywgMHgwMCk7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgwNCwgMHgwMCk7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgwNSwgMHgwMCk7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgwNiwgMHgwMCk7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgwNywgMHgwMCk7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgwOCwgMHgwMCk7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgwOSwgMHhmZSk7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgwYSwgMHgwOSk7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgwYiwgMHg4MCk7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgwYywgMHgwMSk7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgwZSwgMHhkMyk7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgwZiwgMHgzOCk7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgxMCwgMHg4NCk7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgxMSwgMHgwMyk7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgxMiwgMHgyMCk7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgxMywgMHgyMCk7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgxNCwgMHgwMCk7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgxNSwgMHg0MCk7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgxNiwgMHgwMCk7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgxNywgMHg0MCk7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgxOCwgMHhlZik7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgxOSwgMHgxOSk7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgxYSwgMHgyMCk7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgxYiwgMHg3Nik7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgxYywgMHgwNCk7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgxZSwgMHg5NSk7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgxZiwgMHg3NSk7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgyMCwgMHgxZik7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgyMSwgMHgyNyk7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgyMiwgMHgxNik7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgyNCwgMHg0Nik7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgyNSwgMHgyMCk7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgyNiwgMHg5MCk7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgyNywgMHg4OCk7IG1zbGVlcCgxKTsKKworCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4MDAsIDB4OTgpOyBtc2xlZXAoMSk7CisJcnRsODIyNV93cml0ZV9waHlfY2NrKGRldiwgMHgwMywgMHgyMCk7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDA0LCAweDdlKTsgbXNsZWVwKDEpOworCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4MDUsIDB4MTIpOyBtc2xlZXAoMSk7CisJcnRsODIyNV93cml0ZV9waHlfY2NrKGRldiwgMHgwNiwgMHhmYyk7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDA3LCAweDc4KTsgbXNsZWVwKDEpOworCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4MDgsIDB4MmUpOyBtc2xlZXAoMSk7CisJcnRsODIyNV93cml0ZV9waHlfY2NrKGRldiwgMHgxMCwgMHg5Myk7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDExLCAweDg4KTsgbXNsZWVwKDEpOworCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4MTIsIDB4NDcpOyBtc2xlZXAoMSk7CisJcnRsODIyNV93cml0ZV9waHlfY2NrKGRldiwgMHgxMywgMHhkMCk7CisJcnRsODIyNV93cml0ZV9waHlfY2NrKGRldiwgMHgxOSwgMHgwMCk7CisJcnRsODIyNV93cml0ZV9waHlfY2NrKGRldiwgMHgxYSwgMHhhMCk7CisJcnRsODIyNV93cml0ZV9waHlfY2NrKGRldiwgMHgxYiwgMHgwOCk7CisJcnRsODIyNV93cml0ZV9waHlfY2NrKGRldiwgMHg0MCwgMHg4Nik7CisJcnRsODIyNV93cml0ZV9waHlfY2NrKGRldiwgMHg0MSwgMHg4ZCk7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDQyLCAweDE1KTsgbXNsZWVwKDEpOworCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4NDMsIDB4MTgpOyBtc2xlZXAoMSk7CisJcnRsODIyNV93cml0ZV9waHlfY2NrKGRldiwgMHg0NCwgMHgxZik7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDQ1LCAweDFlKTsgbXNsZWVwKDEpOworCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4NDYsIDB4MWEpOyBtc2xlZXAoMSk7CisJcnRsODIyNV93cml0ZV9waHlfY2NrKGRldiwgMHg0NywgMHgxNSk7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDQ4LCAweDEwKTsgbXNsZWVwKDEpOworCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4NDksIDB4MGEpOyBtc2xlZXAoMSk7CisJcnRsODIyNV93cml0ZV9waHlfY2NrKGRldiwgMHg0YSwgMHgwNSk7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDRiLCAweDAyKTsgbXNsZWVwKDEpOworCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4NGMsIDB4MDUpOyBtc2xlZXAoMSk7CisKKwlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPlRFU1RSLCAweDBEKTsgbXNsZWVwKDEpOworCisJcnRsODIyNV9yZl9zZXRfdHhfcG93ZXIoZGV2LCAxKTsKKworCS8qIFJYIGFudGVubmEgZGVmYXVsdCB0byBBICovCisJcnRsODIyNV93cml0ZV9waHlfY2NrKGRldiwgMHgxMCwgMHg5Yik7IG1zbGVlcCgxKTsJLyogQjogMHhEQiAqLworCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDI2LCAweDkwKTsgbXNsZWVwKDEpOwkvKiBCOiAweDEwICovCisKKwlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPlRYX0FOVEVOTkEsIDB4MDMpOwkvKiBCOiAweDAwICovCisJbXNsZWVwKDEpOworCXJ0bDgxOHhfaW93cml0ZTMyKHByaXYsIChfX2xlMzIgX19pb21lbSAqKSgodm9pZCBfX2lvbWVtICopcHJpdi0+bWFwICsgMHg5NCksIDB4MTVjMDAwMDIpOworCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc0VuYWJsZSwgMHgxRkZGKTsKKworCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDBjLCAweDUwKTsKKwkvKiBzZXQgT0ZETSBpbml0aWFsIGdhaW4gKi8KKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgwZCwgcnRsODIyNV9nYWluWzQgKiA0XSk7CisJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MjMsIHJ0bDgyMjVfZ2Fpbls0ICogNCArIDFdKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgxYiwgcnRsODIyNV9nYWluWzQgKiA0ICsgMl0pOworCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDFkLCBydGw4MjI1X2dhaW5bNCAqIDQgKyAzXSk7CisJLyogc2V0IENDSyB0aHJlc2hvbGQgKi8KKwlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDQxLCBydGw4MjI1X3RocmVzaG9sZFswXSk7Cit9CisKK3N0YXRpYyBjb25zdCB1OCBydGw4MjI1ejJfdHhfcG93ZXJfY2NrX2NoMTRbXSA9IHsKKwkweDM2LCAweDM1LCAweDJlLCAweDFiLCAweDAwLCAweDAwLCAweDAwLCAweDAwCit9OworCitzdGF0aWMgY29uc3QgdTggcnRsODIyNXoyX3R4X3Bvd2VyX2Nja19CW10gPSB7CisJMHgzMCwgMHgyZiwgMHgyOSwgMHgyMSwgMHgxOSwgMHgxMCwgMHgwOCwgMHgwNAorfTsKKworc3RhdGljIGNvbnN0IHU4IHJ0bDgyMjV6Ml90eF9wb3dlcl9jY2tfQVtdID0geworCTB4MzMsIDB4MzIsIDB4MmIsIDB4MjMsIDB4MWEsIDB4MTEsIDB4MDgsIDB4MDQKK307CisKK3N0YXRpYyBjb25zdCB1OCBydGw4MjI1ejJfdHhfcG93ZXJfY2NrW10gPSB7CisJMHgzNiwgMHgzNSwgMHgyZSwgMHgyNSwgMHgxYywgMHgxMiwgMHgwOSwgMHgwNAorfTsKKworc3RhdGljIHZvaWQgcnRsODIyNXoyX3JmX3NldF90eF9wb3dlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIGludCBjaGFubmVsKQoreworCXN0cnVjdCBydGw4MTgwX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CisJdTggY2NrX3Bvd2VyLCBvZmRtX3Bvd2VyOworCWNvbnN0IHU4ICp0bXA7CisJaW50IGk7CisKKwljY2tfcG93ZXIgPSBwcml2LT5jaGFubmVsc1tjaGFubmVsIC0gMV0uaHdfdmFsdWUgJiAweEZGOworCW9mZG1fcG93ZXIgPSBwcml2LT5jaGFubmVsc1tjaGFubmVsIC0gMV0uaHdfdmFsdWUgPj4gODsKKworCWlmIChjaGFubmVsID09IDE0KQorCQl0bXAgPSBydGw4MjI1ejJfdHhfcG93ZXJfY2NrX2NoMTQ7CisJZWxzZSBpZiAoY2NrX3Bvd2VyID09IDEyKQorCQl0bXAgPSBydGw4MjI1ejJfdHhfcG93ZXJfY2NrX0I7CisJZWxzZSBpZiAoY2NrX3Bvd2VyID09IDEzKQorCQl0bXAgPSBydGw4MjI1ejJfdHhfcG93ZXJfY2NrX0E7CisJZWxzZQorCQl0bXAgPSBydGw4MjI1ejJfdHhfcG93ZXJfY2NrOworCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJcnRsODIyNV93cml0ZV9waHlfY2NrKGRldiwgMHg0NCArIGksICp0bXArKyk7CisKKwljY2tfcG93ZXIgPSBtaW4oY2NrX3Bvd2VyLCAodTgpMzUpOworCWlmIChjY2tfcG93ZXIgPT0gMTMgfHwgY2NrX3Bvd2VyID09IDE0KQorCQljY2tfcG93ZXIgPSAxMjsKKwlpZiAoY2NrX3Bvd2VyID49IDE1KQorCQljY2tfcG93ZXIgLT0gMjsKKworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+VFhfR0FJTl9DQ0ssIGNja19wb3dlcik7CisJcnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPlRYX0dBSU5fQ0NLKTsKKwltc2xlZXAoMSk7CisKKwlvZmRtX3Bvd2VyID0gbWluKG9mZG1fcG93ZXIsICh1OCkzNSk7CisJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5UWF9HQUlOX09GRE0sIG9mZG1fcG93ZXIpOworCisJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDIsIDB4NjIpOworCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCA1LCAweDAwKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgNiwgMHg0MCk7CisJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDcsIDB4MDApOworCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCA4LCAweDQwKTsKKworCW1zbGVlcCgxKTsKK30KKworc3RhdGljIGNvbnN0IHUxNiBydGw4MjI1ejJfcnhnYWluW10gPSB7CisJMHgwMDAwLCAweDAwMDEsIDB4MDAwMiwgMHgwMDAzLCAweDAwMDQsIDB4MDAwNSwgMHgwMDA4LCAweDAwMDksCisJMHgwMDBhLCAweDAwMGIsIDB4MDEwMiwgMHgwMTAzLCAweDAxMDQsIDB4MDEwNSwgMHgwMTQwLCAweDAxNDEsCisJMHgwMTQyLCAweDAxNDMsIDB4MDE0NCwgMHgwMTQ1LCAweDAxODAsIDB4MDE4MSwgMHgwMTgyLCAweDAxODMsCisJMHgwMTg0LCAweDAxODUsIDB4MDE4OCwgMHgwMTg5LCAweDAxOGEsIDB4MDE4YiwgMHgwMjQzLCAweDAyNDQsCisJMHgwMjQ1LCAweDAyODAsIDB4MDI4MSwgMHgwMjgyLCAweDAyODMsIDB4MDI4NCwgMHgwMjg1LCAweDAyODgsCisJMHgwMjg5LCAweDAyOGEsIDB4MDI4YiwgMHgwMjhjLCAweDAzNDIsIDB4MDM0MywgMHgwMzQ0LCAweDAzNDUsCisJMHgwMzgwLCAweDAzODEsIDB4MDM4MiwgMHgwMzgzLCAweDAzODQsIDB4MDM4NSwgMHgwMzg4LCAweDAzODksCisJMHgwMzhhLCAweDAzOGIsIDB4MDM4YywgMHgwMzhkLCAweDAzOTAsIDB4MDM5MSwgMHgwMzkyLCAweDAzOTMsCisJMHgwMzk0LCAweDAzOTUsIDB4MDM5OCwgMHgwMzk5LCAweDAzOWEsIDB4MDM5YiwgMHgwMzljLCAweDAzOWQsCisJMHgwM2EwLCAweDAzYTEsIDB4MDNhMiwgMHgwM2EzLCAweDAzYTQsIDB4MDNhNSwgMHgwM2E4LCAweDAzYTksCisJMHgwM2FhLCAweDAzYWIsIDB4MDNhYywgMHgwM2FkLCAweDAzYjAsIDB4MDNiMSwgMHgwM2IyLCAweDAzYjMsCisJMHgwM2I0LCAweDAzYjUsIDB4MDNiOCwgMHgwM2I5LCAweDAzYmEsIDB4MDNiYiwgMHgwM2JiCit9OworCitzdGF0aWMgdm9pZCBydGw4MjI1ejJfcmZfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCit7CisJc3RydWN0IHJ0bDgxODBfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKKwlpbnQgaTsKKworCXJ0bDgxODBfc2V0X2FuYXBhcmFtKHByaXYsIFJUTDgyMjVfQU5BUEFSQU1fT04pOworCisJLyogaG9zdF9wY2lfaW5pdCAqLworCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc091dHB1dCwgMHgwNDgwKTsKKwlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNFbmFibGUsIDB4MUZGRik7CisJcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zU2VsZWN0LCAweDA0ODgpOworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+R1BfRU5BQkxFLCAwKTsKKwlydGw4MTh4X2lvcmVhZDgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCk7CisJbXNsZWVwKDIwMCk7CS8qIEZJWE1FOiBlaGg/PyAqLworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+R1BfRU5BQkxFLCAweEZGICYgfigxIDw8IDYpKTsKKworCXJ0bDgxOHhfaW93cml0ZTMyKHByaXYsICZwcml2LT5tYXAtPlJGX1RJTUlORywgMHgwMDA4ODAwOCk7CisKKwkvKiBUT0RPOiBjaGVjayBpZiB3ZSBuZWVkIHJlYWxseSB0byBjaGFuZ2UgQlJTUiB0byBkbyBSRiBjb25maWcgKi8KKwlydGw4MTh4X2lvcmVhZDE2KHByaXYsICZwcml2LT5tYXAtPkJSU1IpOworCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPkJSU1IsIDB4RkZGRik7CisJcnRsODE4eF9pb3dyaXRlMzIocHJpdiwgJnByaXYtPm1hcC0+UkZfUEFSQSwgMHgwMDEwMDA0NCk7CisJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5FRVBST01fQ01ELCBSVEw4MThYX0VFUFJPTV9DTURfQ09ORklHKTsKKwlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkNPTkZJRzMsIDB4NDQpOworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCwgUlRMODE4WF9FRVBST01fQ01EX05PUk1BTCk7CisKKwlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNFbmFibGUsIDB4MUZGRik7CisKKwlydGw4MjI1X3dyaXRlKGRldiwgMHgwLCAweDBCNyk7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlKGRldiwgMHgxLCAweEVFMCk7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlKGRldiwgMHgyLCAweDQ0RCk7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlKGRldiwgMHgzLCAweDQ0MSk7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlKGRldiwgMHg0LCAweDhDMyk7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlKGRldiwgMHg1LCAweEM3Mik7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlKGRldiwgMHg2LCAweDBFNik7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlKGRldiwgMHg3LCAweDgyQSk7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlKGRldiwgMHg4LCAweDAzRik7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlKGRldiwgMHg5LCAweDMzNSk7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlKGRldiwgMHhhLCAweDlENCk7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlKGRldiwgMHhiLCAweDdCQik7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlKGRldiwgMHhjLCAweDg1MCk7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlKGRldiwgMHhkLCAweENERik7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlKGRldiwgMHhlLCAweDAyQik7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlKGRldiwgMHhmLCAweDExNCk7IG1zbGVlcCgxMDApOworCisJaWYgKCEocnRsODIyNV9yZWFkKGRldiwgNikgJiAoMSA8PCA3KSkpIHsKKwkJcnRsODIyNV93cml0ZShkZXYsIDB4MDIsIDB4MEM0RCk7CisJCW1zbGVlcCgyMDApOworCQlydGw4MjI1X3dyaXRlKGRldiwgMHgwMiwgMHgwNDREKTsKKwkJbXNsZWVwKDEwMCk7CisJCS8qIFRPRE86IHJlYWRkIGNhbGlicmF0aW9uIGZhaWx1cmUgbWVzc2FnZSB3aGVuIHRoZSBjYWxpYnJhdGlvbgorCQkgICBjaGVjayB3b3JrcyAqLworCX0KKworCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDAsIDB4MUI3KTsKKwlydGw4MjI1X3dyaXRlKGRldiwgMHgzLCAweDAwMik7CisJcnRsODIyNV93cml0ZShkZXYsIDB4NSwgMHgwMDQpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocnRsODIyNXoyX3J4Z2Fpbik7IGkrKykgeworCQlydGw4MjI1X3dyaXRlKGRldiwgMHgxLCBpICsgMSk7CisJCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDIsIHJ0bDgyMjV6Ml9yeGdhaW5baV0pOworCX0KKworCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDAsIDB4MEI3KTsgbXNsZWVwKDEwMCk7CisJcnRsODIyNV93cml0ZShkZXYsIDB4MiwgMHhDNEQpOworCisJbXNsZWVwKDIwMCk7CisJcnRsODIyNV93cml0ZShkZXYsIDB4MiwgMHg0NEQpOworCW1zbGVlcCgxMDApOworCisJcnRsODIyNV93cml0ZShkZXYsIDB4MDAsIDB4MkJGKTsKKwlydGw4MjI1X3dyaXRlKGRldiwgMHhGRiwgMHhGRkZGKTsKKworCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc0VuYWJsZSwgMHgxRkZGKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJ0bDgyMjVfYWdjKTsgaSsrKSB7CisJCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweEIsIHJ0bDgyMjVfYWdjW2ldKTsKKwkJbXNsZWVwKDEpOworCQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHhBLCAweDgwICsgaSk7CisJCW1zbGVlcCgxKTsKKwl9CisKKwltc2xlZXAoMSk7CisKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgwMCwgMHgwMSk7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgwMSwgMHgwMik7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgwMiwgMHg2Mik7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgwMywgMHgwMCk7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgwNCwgMHgwMCk7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgwNSwgMHgwMCk7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgwNiwgMHg0MCk7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgwNywgMHgwMCk7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgwOCwgMHg0MCk7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgwOSwgMHhmZSk7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgwYSwgMHgwOSk7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgxOCwgMHhlZik7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgwYiwgMHg4MCk7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgwYywgMHgwMSk7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgwZCwgMHg0Myk7CisJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MGUsIDB4ZDMpOyBtc2xlZXAoMSk7CisJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MGYsIDB4MzgpOyBtc2xlZXAoMSk7CisJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MTAsIDB4ODQpOyBtc2xlZXAoMSk7CisJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MTEsIDB4MDYpOyBtc2xlZXAoMSk7CisJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MTIsIDB4MjApOyBtc2xlZXAoMSk7CisJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MTMsIDB4MjApOyBtc2xlZXAoMSk7CisJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MTQsIDB4MDApOyBtc2xlZXAoMSk7CisJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MTUsIDB4NDApOyBtc2xlZXAoMSk7CisJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MTYsIDB4MDApOyBtc2xlZXAoMSk7CisJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MTcsIDB4NDApOyBtc2xlZXAoMSk7CisJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MTgsIDB4ZWYpOyBtc2xlZXAoMSk7CisJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MTksIDB4MTkpOyBtc2xlZXAoMSk7CisJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MWEsIDB4MjApOyBtc2xlZXAoMSk7CisJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MWIsIDB4MTEpOyBtc2xlZXAoMSk7CisJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MWMsIDB4MDQpOyBtc2xlZXAoMSk7CisJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MWQsIDB4YzUpOyBtc2xlZXAoMSk7CisJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MWUsIDB4YjMpOyBtc2xlZXAoMSk7CisJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MWYsIDB4NzUpOyBtc2xlZXAoMSk7CisJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MjAsIDB4MWYpOyBtc2xlZXAoMSk7CisJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MjEsIDB4MjcpOyBtc2xlZXAoMSk7CisJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MjIsIDB4MTYpOyBtc2xlZXAoMSk7CisJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MjMsIDB4ODApOyBtc2xlZXAoMSk7IC8qIEZJWE1FOiBub3QgbmVlZGVkPyAqLworCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDI0LCAweDQ2KTsgbXNsZWVwKDEpOworCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDI1LCAweDIwKTsgbXNsZWVwKDEpOworCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDI2LCAweDkwKTsgbXNsZWVwKDEpOworCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDI3LCAweDg4KTsgbXNsZWVwKDEpOworCisJcnRsODIyNV93cml0ZV9waHlfY2NrKGRldiwgMHgwMCwgMHg5OCk7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDAzLCAweDIwKTsgbXNsZWVwKDEpOworCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4MDQsIDB4N2UpOyBtc2xlZXAoMSk7CisJcnRsODIyNV93cml0ZV9waHlfY2NrKGRldiwgMHgwNSwgMHgxMik7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDA2LCAweGZjKTsgbXNsZWVwKDEpOworCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4MDcsIDB4NzgpOyBtc2xlZXAoMSk7CisJcnRsODIyNV93cml0ZV9waHlfY2NrKGRldiwgMHgwOCwgMHgyZSk7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDEwLCAweDkzKTsgbXNsZWVwKDEpOworCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4MTEsIDB4ODgpOyBtc2xlZXAoMSk7CisJcnRsODIyNV93cml0ZV9waHlfY2NrKGRldiwgMHgxMiwgMHg0Nyk7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDEzLCAweGQwKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDE5LCAweDAwKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDFhLCAweGEwKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDFiLCAweDA4KTsKKwlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDQwLCAweDg2KTsKKwlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDQxLCAweDhhKTsgbXNsZWVwKDEpOworCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4NDIsIDB4MTUpOyBtc2xlZXAoMSk7CisJcnRsODIyNV93cml0ZV9waHlfY2NrKGRldiwgMHg0MywgMHgxOCk7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDQ0LCAweDM2KTsgbXNsZWVwKDEpOworCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4NDUsIDB4MzUpOyBtc2xlZXAoMSk7CisJcnRsODIyNV93cml0ZV9waHlfY2NrKGRldiwgMHg0NiwgMHgyZSk7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDQ3LCAweDI1KTsgbXNsZWVwKDEpOworCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4NDgsIDB4MWMpOyBtc2xlZXAoMSk7CisJcnRsODIyNV93cml0ZV9waHlfY2NrKGRldiwgMHg0OSwgMHgxMik7IG1zbGVlcCgxKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDRhLCAweDA5KTsgbXNsZWVwKDEpOworCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4NGIsIDB4MDQpOyBtc2xlZXAoMSk7CisJcnRsODIyNV93cml0ZV9waHlfY2NrKGRldiwgMHg0YywgMHgwNSk7IG1zbGVlcCgxKTsKKworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgKHU4IF9faW9tZW0gKikoKHZvaWQgX19pb21lbSAqKXByaXYtPm1hcCArIDB4NUIpLCAweDBEKTsgbXNsZWVwKDEpOworCisJcnRsODIyNXoyX3JmX3NldF90eF9wb3dlcihkZXYsIDEpOworCisJLyogUlggYW50ZW5uYSBkZWZhdWx0IHRvIEEgKi8KKwlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDEwLCAweDliKTsgbXNsZWVwKDEpOwkvKiBCOiAweERCICovCisJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MjYsIDB4OTApOyBtc2xlZXAoMSk7CS8qIEI6IDB4MTAgKi8KKworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+VFhfQU5URU5OQSwgMHgwMyk7CS8qIEI6IDB4MDAgKi8KKwltc2xlZXAoMSk7CisJcnRsODE4eF9pb3dyaXRlMzIocHJpdiwgKF9fbGUzMiBfX2lvbWVtICopKCh2b2lkIF9faW9tZW0gKilwcml2LT5tYXAgKyAweDk0KSwgMHgxNWMwMDAwMik7CisJcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zRW5hYmxlLCAweDFGRkYpOworfQorCitzdGF0aWMgdm9pZCBydGw4MjI1X3JmX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQoreworCXN0cnVjdCBydGw4MTgwX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CisJdTggcmVnOworCisJcnRsODIyNV93cml0ZShkZXYsIDB4NCwgMHgxZik7IG1zbGVlcCgxKTsKKworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCwgUlRMODE4WF9FRVBST01fQ01EX0NPTkZJRyk7CisJcmVnID0gcnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPkNPTkZJRzMpOworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+Q09ORklHMywgcmVnIHwgUlRMODE4WF9DT05GSUczX0FOQVBBUkFNX1dSSVRFKTsKKwlydGw4MTh4X2lvd3JpdGUzMihwcml2LCAmcHJpdi0+bWFwLT5BTkFQQVJBTTIsIFJUTDgyMjVfQU5BUEFSQU0yX09GRik7CisJcnRsODE4eF9pb3dyaXRlMzIocHJpdiwgJnByaXYtPm1hcC0+QU5BUEFSQU0sIFJUTDgyMjVfQU5BUEFSQU1fT0ZGKTsKKwlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkNPTkZJRzMsIHJlZyAmIH5SVEw4MThYX0NPTkZJRzNfQU5BUEFSQU1fV1JJVEUpOworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCwgUlRMODE4WF9FRVBST01fQ01EX05PUk1BTCk7Cit9CisKK3N0YXRpYyB2b2lkIHJ0bDgyMjVfcmZfc2V0X2NoYW5uZWwoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAorCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZikKK3sKKwlzdHJ1Y3QgcnRsODE4MF9wcml2ICpwcml2ID0gZGV2LT5wcml2OworCWludCBjaGFuID0gaWVlZTgwMjExX2ZyZXF1ZW5jeV90b19jaGFubmVsKGNvbmYtPmNoYW5uZWwtPmNlbnRlcl9mcmVxKTsKKworCWlmIChwcml2LT5yZi0+aW5pdCA9PSBydGw4MjI1X3JmX2luaXQpCisJCXJ0bDgyMjVfcmZfc2V0X3R4X3Bvd2VyKGRldiwgY2hhbik7CisJZWxzZQorCQlydGw4MjI1ejJfcmZfc2V0X3R4X3Bvd2VyKGRldiwgY2hhbik7CisKKwlydGw4MjI1X3dyaXRlKGRldiwgMHg3LCBydGw4MjI1X2NoYW5bY2hhbiAtIDFdKTsKKwltc2xlZXAoMTApOworfQorCitzdGF0aWMgdm9pZCBydGw4MjI1X3JmX2NvbmZfZXJwKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKKwkJCQlzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICppbmZvKQoreworCXN0cnVjdCBydGw4MTgwX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CisKKwlpZiAoaW5mby0+dXNlX3Nob3J0X3Nsb3QpIHsKKwkJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5TTE9ULCAweDkpOworCQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPlNJRlMsIDB4MjIpOworCQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkRJRlMsIDB4MTQpOworCQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkVJRlMsIDgxKTsKKwkJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5DV19WQUwsIDB4NzMpOworCX0gZWxzZSB7CisJCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+U0xPVCwgMHgxNCk7CisJCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+U0lGUywgMHg0NCk7CisJCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RElGUywgMHgyNCk7CisJCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RUlGUywgODEpOworCQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkNXX1ZBTCwgMHhhNSk7CisJfQorfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0bDgxOHhfcmZfb3BzIHJ0bDgyMjVfb3BzID0geworCS5uYW1lCQk9ICJydGw4MjI1IiwKKwkuaW5pdAkJPSBydGw4MjI1X3JmX2luaXQsCisJLnN0b3AJCT0gcnRsODIyNV9yZl9zdG9wLAorCS5zZXRfY2hhbgk9IHJ0bDgyMjVfcmZfc2V0X2NoYW5uZWwsCisJLmNvbmZfZXJwCT0gcnRsODIyNV9yZl9jb25mX2VycCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRsODE4eF9yZl9vcHMgcnRsODIyNXoyX29wcyA9IHsKKwkubmFtZQkJPSAicnRsODIyNXoyIiwKKwkuaW5pdAkJPSBydGw4MjI1ejJfcmZfaW5pdCwKKwkuc3RvcAkJPSBydGw4MjI1X3JmX3N0b3AsCisJLnNldF9jaGFuCT0gcnRsODIyNV9yZl9zZXRfY2hhbm5lbCwKKwkuY29uZl9lcnAJPSBydGw4MjI1X3JmX2NvbmZfZXJwLAorfTsKKworY29uc3Qgc3RydWN0IHJ0bDgxOHhfcmZfb3BzICogcnRsODE4MF9kZXRlY3RfcmYoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQoreworCXN0cnVjdCBydGw4MTgwX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CisJdTE2IHJlZzgsIHJlZzk7CisKKwlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNPdXRwdXQsIDB4MDQ4MCk7CisJcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zU2VsZWN0LCAweDA0ODgpOworCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc0VuYWJsZSwgMHgxRkZGKTsKKwlydGw4MTh4X2lvcmVhZDgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCk7CisJbXNsZWVwKDEwMCk7CisKKwlydGw4MjI1X3dyaXRlKGRldiwgMCwgMHgxQjcpOworCisJcmVnOCA9IHJ0bDgyMjVfcmVhZChkZXYsIDgpOworCXJlZzkgPSBydGw4MjI1X3JlYWQoZGV2LCA5KTsKKworCXJ0bDgyMjVfd3JpdGUoZGV2LCAwLCAweDBCNyk7CisKKwlpZiAocmVnOCAhPSAweDU4OCB8fCByZWc5ICE9IDB4NzAwKQorCQlyZXR1cm4gJnJ0bDgyMjVfb3BzOworCisJcmV0dXJuICZydGw4MjI1ejJfb3BzOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTgwX3J0bDgyMjUuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4MC9ydGw4MjI1LmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4MF9ydGw4MjI1LmgKcmVuYW1lIHRvIGRyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4MC9ydGw4MjI1LmgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4MC9zYTI0MDAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4MC9zYTI0MDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDc3MWE2MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4MC9zYTI0MDAuYwpAQCAtMCwwICsxLDIyOCBAQAorCisvKgorICogUmFkaW8gdHVuaW5nIGZvciBQaGlsaXBzIFNBMjQwMCBvbiBSVEw4MTgwCisgKgorICogQ29weXJpZ2h0IDIwMDcgQW5kcmVhIE1lcmVsbG8gPGFuZHJlYW1ybEB0aXNjYWxpLml0PgorICoKKyAqIENvZGUgZnJvbSB0aGUgQlNEIGRyaXZlciBhbmQgdGhlIHJ0bDgxODEgcHJvamVjdCBoYXZlIGJlZW4KKyAqIHZlcnkgdXNlZnVsIHRvIHVuZGVyc3RhbmQgY2VydGFpbiB0aGluZ3MKKyAqCisgKiBJIHdhbnQgdG8gdGhhbmtzIHRoZSBBdXRob3JzIG9mIHN1Y2ggcHJvamVjdHMgYW5kIHRoZSBOZGlzd3JhcHBlcgorICogcHJvamVjdCBBdXRob3JzLgorICoKKyAqIEEgc3BlY2lhbCBCaWcgVGhhbmtzIGFsc28gaXMgZm9yIGFsbCBwZW9wbGUgd2hvIGRvbmF0ZWQgbWUgY2FyZHMsCisgKiBtYWtpbmcgcG9zc2libGUgdGhlIGNyZWF0aW9uIG9mIHRoZSBvcmlnaW5hbCBydGw4MTgwIGRyaXZlcgorICogZnJvbSB3aGljaCB0aGlzIGNvZGUgaXMgZGVyaXZlZCEKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KKworI2luY2x1ZGUgInJ0bDgxODAuaCIKKyNpbmNsdWRlICJzYTI0MDAuaCIKKworc3RhdGljIGNvbnN0IHUzMiBzYTI0MDBfY2hhbltdID0geworCTB4MDAwOTZjLCAvKiBjaDEgKi8KKwkweDA4MDk3MCwKKwkweDEwMDk3NCwKKwkweDE4MDk3OCwKKwkweDAwMDk4MCwKKwkweDA4MDk4NCwKKwkweDEwMDk4OCwKKwkweDE4MDk4YywKKwkweDAwMDk5NCwKKwkweDA4MDk5OCwKKwkweDEwMDk5YywKKwkweDE4MDlhMCwKKwkweDAwMDlhOCwKKwkweDAwMDliNCwgLyogY2ggMTQgKi8KK307CisKK3N0YXRpYyB2b2lkIHdyaXRlX3NhMjQwMChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHU4IGFkZHIsIHUzMiBkYXRhKQoreworCXN0cnVjdCBydGw4MTgwX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CisJdTMyIHBoeV9jb25maWc7CisKKwkvKiBNQUMgd2lsbCBiYW5nIGJpdHMgdG8gdGhlIHNhMjQwMC4gc3cgMy13aXJlIGlzIE5PVCB1c2VkICovCisJcGh5X2NvbmZpZyA9IDB4YjAwMDAwMDA7CisKKwlwaHlfY29uZmlnIHw9ICgodTMyKShhZGRyICYgMHhmKSkgPDwgMjQ7CisJcGh5X2NvbmZpZyB8PSBkYXRhICYgMHhmZmZmZmY7CisKKwlydGw4MTh4X2lvd3JpdGUzMihwcml2LAorCQkoX19sZTMyIF9faW9tZW0gKikgJnByaXYtPm1hcC0+UkZQaW5zT3V0cHV0LCBwaHlfY29uZmlnKTsKKworCW1zbGVlcCgzKTsKK30KKworc3RhdGljIHZvaWQgc2EyNDAwX3dyaXRlX3BoeV9hbnRlbm5hKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgc2hvcnQgY2hhbikKK3sKKwlzdHJ1Y3QgcnRsODE4MF9wcml2ICpwcml2ID0gZGV2LT5wcml2OworCXU4IGFudCA9IFNBMjQwMF9BTlRFTk5BOworCisJaWYgKHByaXYtPnJmcGFyYW0gJiBSRl9QQVJBTV9BTlRCREVGQVVMVCkKKwkJYW50IHw9IEJCX0FOVEVOTkFfQjsKKworCWlmIChjaGFuID09IDE0KQorCQlhbnQgfD0gQkJfQU5UQVRURU5fQ0hBTjE0OworCisJcnRsODE4MF93cml0ZV9waHkoZGV2LCAweDEwLCBhbnQpOworCit9CisKK3N0YXRpYyB1OCBzYTI0MDBfcmZfcnNzaV9tYXBbXSA9IHsKKwkweDY0LCAweDY0LCAweDYzLCAweDYyLCAweDYxLCAweDYwLCAweDVmLCAweDVlLAorCTB4NWQsIDB4NWMsIDB4NWIsIDB4NWEsIDB4NTcsIDB4NTQsIDB4NTIsIDB4NTAsCisJMHg0ZSwgMHg0YywgMHg0YSwgMHg0OCwgMHg0NiwgMHg0NCwgMHg0MSwgMHgzZiwKKwkweDNjLCAweDNhLCAweDM3LCAweDM2LCAweDM2LCAweDFjLCAweDFjLCAweDFiLAorCTB4MWIsIDB4MWEsIDB4MWEsIDB4MTksIDB4MTksIDB4MTgsIDB4MTgsIDB4MTcsCisJMHgxNywgMHgxNiwgMHgxNiwgMHgxNSwgMHgxNSwgMHgxNCwgMHgxNCwgMHgxMywKKwkweDEzLCAweDEyLCAweDEyLCAweDExLCAweDExLCAweDEwLCAweDEwLCAweDBmLAorCTB4MGYsIDB4MGUsIDB4MGUsIDB4MGQsIDB4MGQsIDB4MGMsIDB4MGMsIDB4MGIsCisJMHgwYiwgMHgwYSwgMHgwYSwgMHgwOSwgMHgwOSwgMHgwOCwgMHgwOCwgMHgwNywKKwkweDA3LCAweDA2LCAweDA2LCAweDA1LCAweDA0LCAweDAzLCAweDAyLAorfTsKKworc3RhdGljIHU4IHNhMjQwMF9yZl9jYWxjX3Jzc2kodTggYWdjLCB1OCBzcSkKK3sKKwlpZiAoc3EgPT0gMHg4MCkKKwkJcmV0dXJuIDE7CisKKwlpZiAoc3EgPiA3OCkKKwkJcmV0dXJuIDMyOworCisJLyogVE9ETzogcmVjYWxjIHNhMjQwMF9yZl9yc3NpX21hcCB0byBhdm9pZCBtdWx0IC8gZGl2ICovCisJcmV0dXJuIDY1ICogc2EyNDAwX3JmX3Jzc2lfbWFwW3NxXSAvIDEwMDsKK30KKworc3RhdGljIHZvaWQgc2EyNDAwX3JmX3NldF9jaGFubmVsKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKKwkJCQkgIHN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZikKK3sKKwlzdHJ1Y3QgcnRsODE4MF9wcml2ICpwcml2ID0gZGV2LT5wcml2OworCWludCBjaGFubmVsID0gaWVlZTgwMjExX2ZyZXF1ZW5jeV90b19jaGFubmVsKGNvbmYtPmNoYW5uZWwtPmNlbnRlcl9mcmVxKTsKKwl1MzIgdHhwdyA9IHByaXYtPmNoYW5uZWxzW2NoYW5uZWwgLSAxXS5od192YWx1ZSAmIDB4RkY7CisJdTMyIGNoYW4gPSBzYTI0MDBfY2hhbltjaGFubmVsIC0gMV07CisKKwl3cml0ZV9zYTI0MDAoZGV2LCA3LCB0eHB3KTsKKworCXNhMjQwMF93cml0ZV9waHlfYW50ZW5uYShkZXYsIGNoYW5uZWwpOworCisJd3JpdGVfc2EyNDAwKGRldiwgMCwgY2hhbik7CisJd3JpdGVfc2EyNDAwKGRldiwgMSwgMHhiYjUwKTsKKwl3cml0ZV9zYTI0MDAoZGV2LCAyLCAweDgwKTsKKwl3cml0ZV9zYTI0MDAoZGV2LCAzLCAwKTsKK30KKworc3RhdGljIHZvaWQgc2EyNDAwX3JmX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQoreworCXdyaXRlX3NhMjQwMChkZXYsIDQsIDApOworfQorCitzdGF0aWMgdm9pZCBzYTI0MDBfcmZfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCit7CisJc3RydWN0IHJ0bDgxODBfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKKwl1MzIgYW5hcGFyYW0sIHR4Y29uZjsKKwl1OCBmaXJkYWM7CisJaW50IGFuYWxvZ3BoeSA9IHByaXYtPnJmcGFyYW0gJiBSRl9QQVJBTV9BTkFMT0dQSFk7CisKKwlhbmFwYXJhbSA9IHByaXYtPmFuYXBhcmFtOworCWFuYXBhcmFtICY9IH4oMSA8PCBBTkFQQVJBTV9UWERBQ09GRl9TSElGVCk7CisJYW5hcGFyYW0gJj0gfkFOQVBBUkFNX1BXUjFfTUFTSzsKKwlhbmFwYXJhbSAmPSB+QU5BUEFSQU1fUFdSMF9NQVNLOworCisJaWYgKGFuYWxvZ3BoeSkgeworCQlhbmFwYXJhbSB8PSBTQTI0MDBfQU5BX0FOQVBBUkFNX1BXUjFfT04gPDwgQU5BUEFSQU1fUFdSMV9TSElGVDsKKwkJZmlyZGFjID0gMDsKKwl9IGVsc2UgeworCQlhbmFwYXJhbSB8PSAoU0EyNDAwX0RJR19BTkFQQVJBTV9QV1IxX09OIDw8IEFOQVBBUkFNX1BXUjFfU0hJRlQpOworCQlhbmFwYXJhbSB8PSAoU0EyNDAwX0FOQVBBUkFNX1BXUjBfT04gPDwgQU5BUEFSQU1fUFdSMF9TSElGVCk7CisJCWZpcmRhYyA9IDEgPDwgU0EyNDAwX1JFRzRfRklSREFDX1NISUZUOworCX0KKworCXJ0bDgxODBfc2V0X2FuYXBhcmFtKHByaXYsIGFuYXBhcmFtKTsKKworCXdyaXRlX3NhMjQwMChkZXYsIDAsIHNhMjQwMF9jaGFuWzBdKTsKKwl3cml0ZV9zYTI0MDAoZGV2LCAxLCAweGJiNTApOworCXdyaXRlX3NhMjQwMChkZXYsIDIsIDB4ODApOworCXdyaXRlX3NhMjQwMChkZXYsIDMsIDApOworCXdyaXRlX3NhMjQwMChkZXYsIDQsIDB4MTkzNDAgfCBmaXJkYWMpOworCXdyaXRlX3NhMjQwMChkZXYsIDUsIDB4MWRmYiB8IChTQTI0MDBfTUFYX1NFTlMgLSA1NCkgPDwgMTUpOworCXdyaXRlX3NhMjQwMChkZXYsIDQsIDB4MTkzNDggfCBmaXJkYWMpOyAvKiBjYWxpYnJhdGUgVkNPICovCisKKwlpZiAoIWFuYWxvZ3BoeSkKKwkJd3JpdGVfc2EyNDAwKGRldiwgNCwgMHgxOTM4Yyk7IC8qPz8/Ki8KKworCXdyaXRlX3NhMjQwMChkZXYsIDQsIDB4MTkzNDAgfCBmaXJkYWMpOworCisJd3JpdGVfc2EyNDAwKGRldiwgMCwgc2EyNDAwX2NoYW5bMF0pOworCXdyaXRlX3NhMjQwMChkZXYsIDEsIDB4YmI1MCk7CisJd3JpdGVfc2EyNDAwKGRldiwgMiwgMHg4MCk7CisJd3JpdGVfc2EyNDAwKGRldiwgMywgMCk7CisJd3JpdGVfc2EyNDAwKGRldiwgNCwgMHgxOTM0NCB8IGZpcmRhYyk7IC8qIGNhbGlicmF0ZSBmaWx0ZXIgKi8KKworCS8qIG5ldyBmcm9tIHJ0bDgxODAgZW1iZWRkZWQgZHJpdmVyIChydGw4MTgxIHByb2plY3QpICovCisJd3JpdGVfc2EyNDAwKGRldiwgNiwgMHgxM2ZmIHwgKDEgPDwgMjMpKTsgLyogTUFOUlggKi8KKwl3cml0ZV9zYTI0MDAoZGV2LCA4LCAwKTsgLyogVkNPICovCisKKwlpZiAoYW5hbG9ncGh5KSB7CisJCXJ0bDgxODBfc2V0X2FuYXBhcmFtKHByaXYsIGFuYXBhcmFtIHwKKwkJCQkgICAgICgxIDw8IEFOQVBBUkFNX1RYREFDT0ZGX1NISUZUKSk7CisKKwkJdHhjb25mID0gcnRsODE4eF9pb3JlYWQzMihwcml2LCAmcHJpdi0+bWFwLT5UWF9DT05GKTsKKwkJcnRsODE4eF9pb3dyaXRlMzIocHJpdiwgJnByaXYtPm1hcC0+VFhfQ09ORiwKKwkJCXR4Y29uZiB8IFJUTDgxOFhfVFhfQ09ORl9MT09QQkFDS19DT05UKTsKKworCQl3cml0ZV9zYTI0MDAoZGV2LCA0LCAweDE5MzQxKTsgLyogY2FsaWJyYXRlcyBEQyAqLworCisJCS8qIGEgNXVzIHNsZWVwIGlzIHJlcXVpcmVkIGhlcmUsCisJCSAqIHdlIHJlbHkgb24gdGhlIDNtcyBkZWxheSBpbnRyb2R1Y2VkIGluIHdyaXRlX3NhMjQwMCAqLworCQl3cml0ZV9zYTI0MDAoZGV2LCA0LCAweDE5MzQ1KTsKKworCQkvKiBhIDIwdXMgc2xlZXAgaXMgcmVxdWlyZWQgaGVyZSwKKwkJICogd2UgcmVseSBvbiB0aGUgM21zIGRlbGF5IGludHJvZHVjZWQgaW4gd3JpdGVfc2EyNDAwICovCisKKwkJcnRsODE4eF9pb3dyaXRlMzIocHJpdiwgJnByaXYtPm1hcC0+VFhfQ09ORiwgdHhjb25mKTsKKworCQlydGw4MTgwX3NldF9hbmFwYXJhbShwcml2LCBhbmFwYXJhbSk7CisJfQorCS8qIGVuZCBuZXcgY29kZSAqLworCisJd3JpdGVfc2EyNDAwKGRldiwgNCwgMHgxOTM0MSB8IGZpcmRhYyk7IC8qIFJUWCBNT0RFICovCisKKwkvKiBiYXNlYmFuZCBjb25maWd1cmF0aW9uICovCisJcnRsODE4MF93cml0ZV9waHkoZGV2LCAwLCAweDk4KTsKKwlydGw4MTgwX3dyaXRlX3BoeShkZXYsIDMsIDB4MzgpOworCXJ0bDgxODBfd3JpdGVfcGh5KGRldiwgNCwgMHhlMCk7CisJcnRsODE4MF93cml0ZV9waHkoZGV2LCA1LCAweDkwKTsKKwlydGw4MTgwX3dyaXRlX3BoeShkZXYsIDYsIDB4MWEpOworCXJ0bDgxODBfd3JpdGVfcGh5KGRldiwgNywgMHg2NCk7CisKKwlzYTI0MDBfd3JpdGVfcGh5X2FudGVubmEoZGV2LCAxKTsKKworCXJ0bDgxODBfd3JpdGVfcGh5KGRldiwgMHgxMSwgMHg4MCk7CisKKwlpZiAocnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPkNPTkZJRzIpICYKKwkgICAgUlRMODE4WF9DT05GSUcyX0FOVEVOTkFfRElWKQorCQlydGw4MTgwX3dyaXRlX3BoeShkZXYsIDB4MTIsIDB4YzcpOyAvKiBlbmFibGUgYW50IGRpdmVyc2l0eSAqLworCWVsc2UKKwkJcnRsODE4MF93cml0ZV9waHkoZGV2LCAweDEyLCAweDQ3KTsgLyogZGlzYWJsZSBhbnQgZGl2ZXJzaXR5ICovCisKKwlydGw4MTgwX3dyaXRlX3BoeShkZXYsIDB4MTMsIDB4OTAgfCBwcml2LT5jc3RocmVzaG9sZCk7CisKKwlydGw4MTgwX3dyaXRlX3BoeShkZXYsIDB4MTksIDB4MCk7CisJcnRsODE4MF93cml0ZV9waHkoZGV2LCAweDFhLCAweGEwKTsKK30KKworY29uc3Qgc3RydWN0IHJ0bDgxOHhfcmZfb3BzIHNhMjQwMF9yZl9vcHMgPSB7CisJLm5hbWUJCT0gIlBoaWxpcHMiLAorCS5pbml0CQk9IHNhMjQwMF9yZl9pbml0LAorCS5zdG9wCQk9IHNhMjQwMF9yZl9zdG9wLAorCS5zZXRfY2hhbgk9IHNhMjQwMF9yZl9zZXRfY2hhbm5lbCwKKwkuY2FsY19yc3NpCT0gc2EyNDAwX3JmX2NhbGNfcnNzaSwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODBfc2EyNDAwLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODAvc2EyNDAwLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4MF9zYTI0MDAuaApyZW5hbWUgdG8gZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTgwL3NhMjQwMC5oCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODBfZGV2LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODBfZGV2LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwN2M2ODguLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTgwX2Rldi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTE4OCArMCwwIEBACi0KLS8qCi0gKiBMaW51eCBkZXZpY2UgZHJpdmVyIGZvciBSVEw4MTgwIC8gUlRMODE4NQotICoKLSAqIENvcHlyaWdodCAyMDA3IE1pY2hhZWwgV3UgPGZsYW1pbmdpY2VAc291cm1pbGsubmV0PgotICogQ29weXJpZ2h0IDIwMDcgQW5kcmVhIE1lcmVsbG8gPGFuZHJlYW1ybEB0aXNjYWxpLml0PgotICoKLSAqIEJhc2VkIG9uIHRoZSByODE4MCBkcml2ZXIsIHdoaWNoIGlzOgotICogQ29weXJpZ2h0IDIwMDQtMjAwNSBBbmRyZWEgTWVyZWxsbyA8YW5kcmVhbXJsQHRpc2NhbGkuaXQ+LCBldCBhbC4KLSAqCi0gKiBUaGFua3MgdG8gUmVhbHRlayBmb3IgdGhlaXIgc3VwcG9ydCEKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9lZXByb21fOTNjeDYuaD4KLSNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KLQotI2luY2x1ZGUgInJ0bDgxODAuaCIKLSNpbmNsdWRlICJydGw4MTgwX3J0bDgyMjUuaCIKLSNpbmNsdWRlICJydGw4MTgwX3NhMjQwMC5oIgotI2luY2x1ZGUgInJ0bDgxODBfbWF4MjgyMC5oIgotI2luY2x1ZGUgInJ0bDgxODBfZ3JmNTEwMS5oIgotCi1NT0RVTEVfQVVUSE9SKCJNaWNoYWVsIFd1IDxmbGFtaW5naWNlQHNvdXJtaWxrLm5ldD4iKTsKLU1PRFVMRV9BVVRIT1IoIkFuZHJlYSBNZXJlbGxvIDxhbmRyZWFtcmxAdGlzY2FsaS5pdD4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiUlRMODE4MCAvIFJUTDgxODUgUENJIHdpcmVsZXNzIGRyaXZlciIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1zdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUocnRsODE4MF90YWJsZSkgPSB7Ci0JLyogcnRsODE4NSAqLwotCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1JFQUxURUssIDB4ODE4NSkgfSwKLQl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CRUxLSU4sIDB4NzAwZikgfSwKLQl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CRUxLSU4sIDB4NzAxZikgfSwKLQotCS8qIHJ0bDgxODAgKi8KLQl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9SRUFMVEVLLCAweDgxODApIH0sCi0JeyBQQ0lfREVWSUNFKDB4MTc5OSwgMHg2MDAxKSB9LAotCXsgUENJX0RFVklDRSgweDE3OTksIDB4NjAyMCkgfSwKLQl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9ETElOSywgMHgzMzAwKSB9LAotCXsgfQotfTsKLQotTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHJ0bDgxODBfdGFibGUpOwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yYXRlIHJ0bDgxOHhfcmF0ZXNbXSA9IHsKLQl7IC5iaXRyYXRlID0gMTAsIC5od192YWx1ZSA9IDAsIH0sCi0JeyAuYml0cmF0ZSA9IDIwLCAuaHdfdmFsdWUgPSAxLCB9LAotCXsgLmJpdHJhdGUgPSA1NSwgLmh3X3ZhbHVlID0gMiwgfSwKLQl7IC5iaXRyYXRlID0gMTEwLCAuaHdfdmFsdWUgPSAzLCB9LAotCXsgLmJpdHJhdGUgPSA2MCwgLmh3X3ZhbHVlID0gNCwgfSwKLQl7IC5iaXRyYXRlID0gOTAsIC5od192YWx1ZSA9IDUsIH0sCi0JeyAuYml0cmF0ZSA9IDEyMCwgLmh3X3ZhbHVlID0gNiwgfSwKLQl7IC5iaXRyYXRlID0gMTgwLCAuaHdfdmFsdWUgPSA3LCB9LAotCXsgLmJpdHJhdGUgPSAyNDAsIC5od192YWx1ZSA9IDgsIH0sCi0JeyAuYml0cmF0ZSA9IDM2MCwgLmh3X3ZhbHVlID0gOSwgfSwKLQl7IC5iaXRyYXRlID0gNDgwLCAuaHdfdmFsdWUgPSAxMCwgfSwKLQl7IC5iaXRyYXRlID0gNTQwLCAuaHdfdmFsdWUgPSAxMSwgfSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgcnRsODE4eF9jaGFubmVsc1tdID0gewotCXsgLmNlbnRlcl9mcmVxID0gMjQxMiB9LAotCXsgLmNlbnRlcl9mcmVxID0gMjQxNyB9LAotCXsgLmNlbnRlcl9mcmVxID0gMjQyMiB9LAotCXsgLmNlbnRlcl9mcmVxID0gMjQyNyB9LAotCXsgLmNlbnRlcl9mcmVxID0gMjQzMiB9LAotCXsgLmNlbnRlcl9mcmVxID0gMjQzNyB9LAotCXsgLmNlbnRlcl9mcmVxID0gMjQ0MiB9LAotCXsgLmNlbnRlcl9mcmVxID0gMjQ0NyB9LAotCXsgLmNlbnRlcl9mcmVxID0gMjQ1MiB9LAotCXsgLmNlbnRlcl9mcmVxID0gMjQ1NyB9LAotCXsgLmNlbnRlcl9mcmVxID0gMjQ2MiB9LAotCXsgLmNlbnRlcl9mcmVxID0gMjQ2NyB9LAotCXsgLmNlbnRlcl9mcmVxID0gMjQ3MiB9LAotCXsgLmNlbnRlcl9mcmVxID0gMjQ4NCB9LAotfTsKLQotCi12b2lkIHJ0bDgxODBfd3JpdGVfcGh5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgdTggYWRkciwgdTMyIGRhdGEpCi17Ci0Jc3RydWN0IHJ0bDgxODBfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKLQlpbnQgaSA9IDEwOwotCXUzMiBidWY7Ci0KLQlidWYgPSAoZGF0YSA8PCA4KSB8IGFkZHI7Ci0KLQlydGw4MTh4X2lvd3JpdGUzMihwcml2LCAoX19sZTMyIF9faW9tZW0gKikmcHJpdi0+bWFwLT5QSFlbMF0sIGJ1ZiB8IDB4ODApOwotCXdoaWxlIChpLS0pIHsKLQkJcnRsODE4eF9pb3dyaXRlMzIocHJpdiwgKF9fbGUzMiBfX2lvbWVtICopJnByaXYtPm1hcC0+UEhZWzBdLCBidWYpOwotCQlpZiAocnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPlBIWVsyXSkgPT0gKGRhdGEgJiAweEZGKSkKLQkJCXJldHVybjsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIHJ0bDgxODBfaGFuZGxlX3J4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKLXsKLQlzdHJ1Y3QgcnRsODE4MF9wcml2ICpwcml2ID0gZGV2LT5wcml2OwotCXVuc2lnbmVkIGludCBjb3VudCA9IDMyOwotCXU4IHNpZ25hbCwgYWdjLCBzcTsKLQotCXdoaWxlIChjb3VudC0tKSB7Ci0JCXN0cnVjdCBydGw4MTgwX3J4X2Rlc2MgKmVudHJ5ID0gJnByaXYtPnJ4X3JpbmdbcHJpdi0+cnhfaWR4XTsKLQkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHByaXYtPnJ4X2J1Zltwcml2LT5yeF9pZHhdOwotCQl1MzIgZmxhZ3MgPSBsZTMyX3RvX2NwdShlbnRyeS0+ZmxhZ3MpOwotCi0JCWlmIChmbGFncyAmIFJUTDgxOFhfUlhfREVTQ19GTEFHX09XTikKLQkJCXJldHVybjsKLQotCQlpZiAodW5saWtlbHkoZmxhZ3MgJiAoUlRMODE4WF9SWF9ERVNDX0ZMQUdfRE1BX0ZBSUwgfAotCQkJCSAgICAgIFJUTDgxOFhfUlhfREVTQ19GTEFHX0ZPRiB8Ci0JCQkJICAgICAgUlRMODE4WF9SWF9ERVNDX0ZMQUdfUlhfRVJSKSkpCi0JCQlnb3RvIGRvbmU7Ci0JCWVsc2UgewotCQkJdTMyIGZsYWdzMiA9IGxlMzJfdG9fY3B1KGVudHJ5LT5mbGFnczIpOwotCQkJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgcnhfc3RhdHVzID0gezB9OwotCQkJc3RydWN0IHNrX2J1ZmYgKm5ld19za2IgPSBkZXZfYWxsb2Nfc2tiKE1BWF9SWF9TSVpFKTsKLQotCQkJaWYgKHVubGlrZWx5KCFuZXdfc2tiKSkKLQkJCQlnb3RvIGRvbmU7Ci0KLQkJCXBjaV91bm1hcF9zaW5nbGUocHJpdi0+cGRldiwKLQkJCQkJICooKGRtYV9hZGRyX3QgKilza2ItPmNiKSwKLQkJCQkJIE1BWF9SWF9TSVpFLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCQkJc2tiX3B1dChza2IsIGZsYWdzICYgMHhGRkYpOwotCi0JCQlyeF9zdGF0dXMuYW50ZW5uYSA9IChmbGFnczIgPj4gMTUpICYgMTsKLQkJCXJ4X3N0YXR1cy5yYXRlX2lkeCA9IChmbGFncyA+PiAyMCkgJiAweEY7Ci0JCQlhZ2MgPSAoZmxhZ3MyID4+IDE3KSAmIDB4N0Y7Ci0JCQlpZiAocHJpdi0+cjgxODUpIHsKLQkJCQlpZiAocnhfc3RhdHVzLnJhdGVfaWR4ID4gMykKLQkJCQkJc2lnbmFsID0gOTAgLSBjbGFtcF90KHU4LCBhZ2MsIDI1LCA5MCk7Ci0JCQkJZWxzZQotCQkJCQlzaWduYWwgPSA5NSAtIGNsYW1wX3QodTgsIGFnYywgMzAsIDk1KTsKLQkJCX0gZWxzZSB7Ci0JCQkJc3EgPSBmbGFnczIgJiAweGZmOwotCQkJCXNpZ25hbCA9IHByaXYtPnJmLT5jYWxjX3Jzc2koYWdjLCBzcSk7Ci0JCQl9Ci0JCQlyeF9zdGF0dXMuc2lnbmFsID0gc2lnbmFsOwotCQkJcnhfc3RhdHVzLmZyZXEgPSBkZXYtPmNvbmYuY2hhbm5lbC0+Y2VudGVyX2ZyZXE7Ci0JCQlyeF9zdGF0dXMuYmFuZCA9IGRldi0+Y29uZi5jaGFubmVsLT5iYW5kOwotCQkJcnhfc3RhdHVzLm1hY3RpbWUgPSBsZTY0X3RvX2NwdShlbnRyeS0+dHNmdCk7Ci0JCQlyeF9zdGF0dXMuZmxhZyB8PSBSWF9GTEFHX1RTRlQ7Ci0JCQlpZiAoZmxhZ3MgJiBSVEw4MThYX1JYX0RFU0NfRkxBR19DUkMzMl9FUlIpCi0JCQkJcnhfc3RhdHVzLmZsYWcgfD0gUlhfRkxBR19GQUlMRURfRkNTX0NSQzsKLQotCQkJbWVtY3B5KElFRUU4MDIxMV9TS0JfUlhDQihza2IpLCAmcnhfc3RhdHVzLCBzaXplb2Yocnhfc3RhdHVzKSk7Ci0JCQlpZWVlODAyMTFfcnhfaXJxc2FmZShkZXYsIHNrYik7Ci0KLQkJCXNrYiA9IG5ld19za2I7Ci0JCQlwcml2LT5yeF9idWZbcHJpdi0+cnhfaWR4XSA9IHNrYjsKLQkJCSooKGRtYV9hZGRyX3QgKikgc2tiLT5jYikgPQotCQkJCXBjaV9tYXBfc2luZ2xlKHByaXYtPnBkZXYsIHNrYl90YWlsX3BvaW50ZXIoc2tiKSwKLQkJCQkJICAgICAgIE1BWF9SWF9TSVpFLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCQl9Ci0KLQlkb25lOgotCQllbnRyeS0+cnhfYnVmID0gY3B1X3RvX2xlMzIoKigoZG1hX2FkZHJfdCAqKXNrYi0+Y2IpKTsKLQkJZW50cnktPmZsYWdzID0gY3B1X3RvX2xlMzIoUlRMODE4WF9SWF9ERVNDX0ZMQUdfT1dOIHwKLQkJCQkJICAgTUFYX1JYX1NJWkUpOwotCQlpZiAocHJpdi0+cnhfaWR4ID09IDMxKQotCQkJZW50cnktPmZsYWdzIHw9IGNwdV90b19sZTMyKFJUTDgxOFhfUlhfREVTQ19GTEFHX0VPUik7Ci0JCXByaXYtPnJ4X2lkeCA9IChwcml2LT5yeF9pZHggKyAxKSAlIDMyOwotCX0KLX0KLQotc3RhdGljIHZvaWQgcnRsODE4MF9oYW5kbGVfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCB1bnNpZ25lZCBpbnQgcHJpbykKLXsKLQlzdHJ1Y3QgcnRsODE4MF9wcml2ICpwcml2ID0gZGV2LT5wcml2OwotCXN0cnVjdCBydGw4MTgwX3R4X3JpbmcgKnJpbmcgPSAmcHJpdi0+dHhfcmluZ1twcmlvXTsKLQotCXdoaWxlIChza2JfcXVldWVfbGVuKCZyaW5nLT5xdWV1ZSkpIHsKLQkJc3RydWN0IHJ0bDgxODBfdHhfZGVzYyAqZW50cnkgPSAmcmluZy0+ZGVzY1tyaW5nLT5pZHhdOwotCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm87Ci0JCXUzMiBmbGFncyA9IGxlMzJfdG9fY3B1KGVudHJ5LT5mbGFncyk7Ci0KLQkJaWYgKGZsYWdzICYgUlRMODE4WF9UWF9ERVNDX0ZMQUdfT1dOKQotCQkJcmV0dXJuOwotCi0JCXJpbmctPmlkeCA9IChyaW5nLT5pZHggKyAxKSAlIHJpbmctPmVudHJpZXM7Ci0JCXNrYiA9IF9fc2tiX2RlcXVldWUoJnJpbmctPnF1ZXVlKTsKLQkJcGNpX3VubWFwX3NpbmdsZShwcml2LT5wZGV2LCBsZTMyX3RvX2NwdShlbnRyeS0+dHhfYnVmKSwKLQkJCQkgc2tiLT5sZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOwotCi0JCWluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7Ci0JCWllZWU4MDIxMV90eF9pbmZvX2NsZWFyX3N0YXR1cyhpbmZvKTsKLQotCQlpZiAoIShpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfTk9fQUNLKSAmJgotCQkgICAgKGZsYWdzICYgUlRMODE4WF9UWF9ERVNDX0ZMQUdfVFhfT0spKQotCQkJaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRfQUNLOwotCi0JCWluZm8tPnN0YXR1cy5yYXRlc1swXS5jb3VudCA9IChmbGFncyAmIDB4RkYpICsgMTsKLQkJaW5mby0+c3RhdHVzLnJhdGVzWzFdLmlkeCA9IC0xOwotCi0JCWllZWU4MDIxMV90eF9zdGF0dXNfaXJxc2FmZShkZXYsIHNrYik7Ci0JCWlmIChyaW5nLT5lbnRyaWVzIC0gc2tiX3F1ZXVlX2xlbigmcmluZy0+cXVldWUpID09IDIpCi0JCQlpZWVlODAyMTFfd2FrZV9xdWV1ZShkZXYsIHByaW8pOwotCX0KLX0KLQotc3RhdGljIGlycXJldHVybl90IHJ0bDgxODBfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYgPSBkZXZfaWQ7Ci0Jc3RydWN0IHJ0bDgxODBfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKLQl1MTYgcmVnOwotCi0Jc3Bpbl9sb2NrKCZwcml2LT5sb2NrKTsKLQlyZWcgPSBydGw4MTh4X2lvcmVhZDE2KHByaXYsICZwcml2LT5tYXAtPklOVF9TVEFUVVMpOwotCWlmICh1bmxpa2VseShyZWcgPT0gMHhGRkZGKSkgewotCQlzcGluX3VubG9jaygmcHJpdi0+bG9jayk7Ci0JCXJldHVybiBJUlFfSEFORExFRDsKLQl9Ci0KLQlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5JTlRfU1RBVFVTLCByZWcpOwotCi0JaWYgKHJlZyAmIChSVEw4MThYX0lOVF9UWEJfT0sgfCBSVEw4MThYX0lOVF9UWEJfRVJSKSkKLQkJcnRsODE4MF9oYW5kbGVfdHgoZGV2LCAzKTsKLQotCWlmIChyZWcgJiAoUlRMODE4WF9JTlRfVFhIX09LIHwgUlRMODE4WF9JTlRfVFhIX0VSUikpCi0JCXJ0bDgxODBfaGFuZGxlX3R4KGRldiwgMik7Ci0KLQlpZiAocmVnICYgKFJUTDgxOFhfSU5UX1RYTl9PSyB8IFJUTDgxOFhfSU5UX1RYTl9FUlIpKQotCQlydGw4MTgwX2hhbmRsZV90eChkZXYsIDEpOwotCi0JaWYgKHJlZyAmIChSVEw4MThYX0lOVF9UWExfT0sgfCBSVEw4MThYX0lOVF9UWExfRVJSKSkKLQkJcnRsODE4MF9oYW5kbGVfdHgoZGV2LCAwKTsKLQotCWlmIChyZWcgJiAoUlRMODE4WF9JTlRfUlhfT0sgfCBSVEw4MThYX0lOVF9SWF9FUlIpKQotCQlydGw4MTgwX2hhbmRsZV9yeChkZXYpOwotCi0Jc3Bpbl91bmxvY2soJnByaXYtPmxvY2spOwotCi0JcmV0dXJuIElSUV9IQU5ETEVEOwotfQotCi1zdGF0aWMgaW50IHJ0bDgxODBfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwotCXN0cnVjdCBydGw4MTgwX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7Ci0Jc3RydWN0IHJ0bDgxODBfdHhfcmluZyAqcmluZzsKLQlzdHJ1Y3QgcnRsODE4MF90eF9kZXNjICplbnRyeTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGludCBpZHgsIHByaW87Ci0JZG1hX2FkZHJfdCBtYXBwaW5nOwotCXUzMiB0eF9mbGFnczsKLQl1OCByY19mbGFnczsKLQl1MTYgcGxjcF9sZW4gPSAwOwotCV9fbGUxNiBydHNfZHVyYXRpb24gPSAwOwotCi0JcHJpbyA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpOwotCXJpbmcgPSAmcHJpdi0+dHhfcmluZ1twcmlvXTsKLQotCW1hcHBpbmcgPSBwY2lfbWFwX3NpbmdsZShwcml2LT5wZGV2LCBza2ItPmRhdGEsCi0JCQkJIHNrYi0+bGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKLQotCXR4X2ZsYWdzID0gUlRMODE4WF9UWF9ERVNDX0ZMQUdfT1dOIHwgUlRMODE4WF9UWF9ERVNDX0ZMQUdfRlMgfAotCQkgICBSVEw4MThYX1RYX0RFU0NfRkxBR19MUyB8Ci0JCSAgIChpZWVlODAyMTFfZ2V0X3R4X3JhdGUoZGV2LCBpbmZvKS0+aHdfdmFsdWUgPDwgMjQpIHwKLQkJICAgc2tiLT5sZW47Ci0KLQlpZiAocHJpdi0+cjgxODUpCi0JCXR4X2ZsYWdzIHw9IFJUTDgxOFhfVFhfREVTQ19GTEFHX0RNQSB8Ci0JCQkgICAgUlRMODE4WF9UWF9ERVNDX0ZMQUdfTk9fRU5DOwotCi0JcmNfZmxhZ3MgPSBpbmZvLT5jb250cm9sLnJhdGVzWzBdLmZsYWdzOwotCWlmIChyY19mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19VU0VfUlRTX0NUUykgewotCQl0eF9mbGFncyB8PSBSVEw4MThYX1RYX0RFU0NfRkxBR19SVFM7Ci0JCXR4X2ZsYWdzIHw9IGllZWU4MDIxMV9nZXRfcnRzX2N0c19yYXRlKGRldiwgaW5mbyktPmh3X3ZhbHVlIDw8IDE5OwotCX0gZWxzZSBpZiAocmNfZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfVVNFX0NUU19QUk9URUNUKSB7Ci0JCXR4X2ZsYWdzIHw9IFJUTDgxOFhfVFhfREVTQ19GTEFHX0NUUzsKLQkJdHhfZmxhZ3MgfD0gaWVlZTgwMjExX2dldF9ydHNfY3RzX3JhdGUoZGV2LCBpbmZvKS0+aHdfdmFsdWUgPDwgMTk7Ci0JfQotCi0JaWYgKHJjX2ZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1VTRV9SVFNfQ1RTKQotCQlydHNfZHVyYXRpb24gPSBpZWVlODAyMTFfcnRzX2R1cmF0aW9uKGRldiwgcHJpdi0+dmlmLCBza2ItPmxlbiwKLQkJCQkJCSAgICAgIGluZm8pOwotCi0JaWYgKCFwcml2LT5yODE4NSkgewotCQl1bnNpZ25lZCBpbnQgcmVtYWluZGVyOwotCi0JCXBsY3BfbGVuID0gRElWX1JPVU5EX1VQKDE2ICogKHNrYi0+bGVuICsgNCksCi0JCQkJKGllZWU4MDIxMV9nZXRfdHhfcmF0ZShkZXYsIGluZm8pLT5iaXRyYXRlICogMikgLyAxMCk7Ci0JCXJlbWFpbmRlciA9ICgxNiAqIChza2ItPmxlbiArIDQpKSAlCi0JCQkgICAgKChpZWVlODAyMTFfZ2V0X3R4X3JhdGUoZGV2LCBpbmZvKS0+Yml0cmF0ZSAqIDIpIC8gMTApOwotCQlpZiAocmVtYWluZGVyIDw9IDYpCi0JCQlwbGNwX2xlbiB8PSAxIDw8IDE1OwotCX0KLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0KLQlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FTU0lHTl9TRVEpIHsKLQkJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9GSVJTVF9GUkFHTUVOVCkKLQkJCXByaXYtPnNlcW5vICs9IDB4MTA7Ci0JCWhkci0+c2VxX2N0cmwgJj0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NDVExfRlJBRyk7Ci0JCWhkci0+c2VxX2N0cmwgfD0gY3B1X3RvX2xlMTYocHJpdi0+c2Vxbm8pOwotCX0KLQotCWlkeCA9IChyaW5nLT5pZHggKyBza2JfcXVldWVfbGVuKCZyaW5nLT5xdWV1ZSkpICUgcmluZy0+ZW50cmllczsKLQllbnRyeSA9ICZyaW5nLT5kZXNjW2lkeF07Ci0KLQllbnRyeS0+cnRzX2R1cmF0aW9uID0gcnRzX2R1cmF0aW9uOwotCWVudHJ5LT5wbGNwX2xlbiA9IGNwdV90b19sZTE2KHBsY3BfbGVuKTsKLQllbnRyeS0+dHhfYnVmID0gY3B1X3RvX2xlMzIobWFwcGluZyk7Ci0JZW50cnktPmZyYW1lX2xlbiA9IGNwdV90b19sZTMyKHNrYi0+bGVuKTsKLQllbnRyeS0+ZmxhZ3MyID0gaW5mby0+Y29udHJvbC5yYXRlc1sxXS5pZHggPj0gMCA/Ci0JCWllZWU4MDIxMV9nZXRfYWx0X3JldHJ5X3JhdGUoZGV2LCBpbmZvLCAwKS0+Yml0cmF0ZSA8PCA0IDogMDsKLQllbnRyeS0+cmV0cnlfbGltaXQgPSBpbmZvLT5jb250cm9sLnJhdGVzWzBdLmNvdW50OwotCWVudHJ5LT5mbGFncyA9IGNwdV90b19sZTMyKHR4X2ZsYWdzKTsKLQlfX3NrYl9xdWV1ZV90YWlsKCZyaW5nLT5xdWV1ZSwgc2tiKTsKLQlpZiAocmluZy0+ZW50cmllcyAtIHNrYl9xdWV1ZV9sZW4oJnJpbmctPnF1ZXVlKSA8IDIpCi0JCWllZWU4MDIxMV9zdG9wX3F1ZXVlKGRldiwgcHJpbyk7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0KLQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPlRYX0RNQV9QT0xMSU5HLCAoMSA8PCAocHJpbyArIDQpKSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBydGw4MTgwX3NldF9hbmFwYXJhbShzdHJ1Y3QgcnRsODE4MF9wcml2ICpwcml2LCB1MzIgYW5hcGFyYW0pCi17Ci0JdTggcmVnOwotCi0JcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5FRVBST01fQ01ELCBSVEw4MThYX0VFUFJPTV9DTURfQ09ORklHKTsKLQlyZWcgPSBydGw4MTh4X2lvcmVhZDgocHJpdiwgJnByaXYtPm1hcC0+Q09ORklHMyk7Ci0JcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5DT05GSUczLAotCQkgcmVnIHwgUlRMODE4WF9DT05GSUczX0FOQVBBUkFNX1dSSVRFKTsKLQlydGw4MTh4X2lvd3JpdGUzMihwcml2LCAmcHJpdi0+bWFwLT5BTkFQQVJBTSwgYW5hcGFyYW0pOwotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+Q09ORklHMywKLQkJIHJlZyAmIH5SVEw4MThYX0NPTkZJRzNfQU5BUEFSQU1fV1JJVEUpOwotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCwgUlRMODE4WF9FRVBST01fQ01EX05PUk1BTCk7Ci19Ci0KLXN0YXRpYyBpbnQgcnRsODE4MF9pbml0X2h3KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKLXsKLQlzdHJ1Y3QgcnRsODE4MF9wcml2ICpwcml2ID0gZGV2LT5wcml2OwotCXUxNiByZWc7Ci0KLQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkNNRCwgMCk7Ci0JcnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPkNNRCk7Ci0JbXNsZWVwKDEwKTsKLQotCS8qIHJlc2V0ICovCi0JcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+SU5UX01BU0ssIDApOwotCXJ0bDgxOHhfaW9yZWFkOChwcml2LCAmcHJpdi0+bWFwLT5DTUQpOwotCi0JcmVnID0gcnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPkNNRCk7Ci0JcmVnICY9ICgxIDw8IDEpOwotCXJlZyB8PSBSVEw4MThYX0NNRF9SRVNFVDsKLQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkNNRCwgUlRMODE4WF9DTURfUkVTRVQpOwotCXJ0bDgxOHhfaW9yZWFkOChwcml2LCAmcHJpdi0+bWFwLT5DTUQpOwotCW1zbGVlcCgyMDApOwotCi0JLyogY2hlY2sgc3VjY2VzcyBvZiByZXNldCAqLwotCWlmIChydGw4MTh4X2lvcmVhZDgocHJpdiwgJnByaXYtPm1hcC0+Q01EKSAmIFJUTDgxOFhfQ01EX1JFU0VUKSB7Ci0JCXdpcGh5X2VycihkZXYtPndpcGh5LCAicmVzZXQgdGltZW91dCFcbiIpOwotCQlyZXR1cm4gLUVUSU1FRE9VVDsKLQl9Ci0KLQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQsIFJUTDgxOFhfRUVQUk9NX0NNRF9MT0FEKTsKLQlydGw4MTh4X2lvcmVhZDgocHJpdiwgJnByaXYtPm1hcC0+Q01EKTsKLQltc2xlZXAoMjAwKTsKLQotCWlmIChydGw4MTh4X2lvcmVhZDgocHJpdiwgJnByaXYtPm1hcC0+Q09ORklHMykgJiAoMSA8PCAzKSkgewotCQkvKiBGb3IgY2FyZGJ1cyAqLwotCQlyZWcgPSBydGw4MTh4X2lvcmVhZDgocHJpdiwgJnByaXYtPm1hcC0+Q09ORklHMyk7Ci0JCXJlZyB8PSAxIDw8IDE7Ci0JCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+Q09ORklHMywgcmVnKTsKLQkJcmVnID0gcnRsODE4eF9pb3JlYWQxNihwcml2LCAmcHJpdi0+bWFwLT5GRU1SKTsKLQkJcmVnIHw9ICgxIDw8IDE1KSB8ICgxIDw8IDE0KSB8ICgxIDw8IDQpOwotCQlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5GRU1SLCByZWcpOwotCX0KLQotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+TVNSLCAwKTsKLQotCWlmICghcHJpdi0+cjgxODUpCi0JCXJ0bDgxODBfc2V0X2FuYXBhcmFtKHByaXYsIHByaXYtPmFuYXBhcmFtKTsKLQotCXJ0bDgxOHhfaW93cml0ZTMyKHByaXYsICZwcml2LT5tYXAtPlJEU0FSLCBwcml2LT5yeF9yaW5nX2RtYSk7Ci0JcnRsODE4eF9pb3dyaXRlMzIocHJpdiwgJnByaXYtPm1hcC0+VEJEQSwgcHJpdi0+dHhfcmluZ1szXS5kbWEpOwotCXJ0bDgxOHhfaW93cml0ZTMyKHByaXYsICZwcml2LT5tYXAtPlRIUERBLCBwcml2LT50eF9yaW5nWzJdLmRtYSk7Ci0JcnRsODE4eF9pb3dyaXRlMzIocHJpdiwgJnByaXYtPm1hcC0+VE5QREEsIHByaXYtPnR4X3JpbmdbMV0uZG1hKTsKLQlydGw4MTh4X2lvd3JpdGUzMihwcml2LCAmcHJpdi0+bWFwLT5UTFBEQSwgcHJpdi0+dHhfcmluZ1swXS5kbWEpOwotCi0JLyogVE9ETzogbmVjZXNzYXJ5PyBzcGVjcyBpbmRpY2F0ZSBub3QgKi8KLQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQsIFJUTDgxOFhfRUVQUk9NX0NNRF9DT05GSUcpOwotCXJlZyA9IHJ0bDgxOHhfaW9yZWFkOChwcml2LCAmcHJpdi0+bWFwLT5DT05GSUcyKTsKLQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkNPTkZJRzIsIHJlZyAmIH4oMSA8PCAzKSk7Ci0JaWYgKHByaXYtPnI4MTg1KSB7Ci0JCXJlZyA9IHJ0bDgxOHhfaW9yZWFkOChwcml2LCAmcHJpdi0+bWFwLT5DT05GSUcyKTsKLQkJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5DT05GSUcyLCByZWcgfCAoMSA8PCA0KSk7Ci0JfQotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCwgUlRMODE4WF9FRVBST01fQ01EX05PUk1BTCk7Ci0KLQkvKiBUT0RPOiBzZXQgQ09ORklHNSBmb3IgY2FsaWJyYXRpbmcgQUdDIG9uIHJ0bDgxODAgKyBwaGlsaXBzIHJhZGlvPyAqLwotCi0JLyogVE9ETzogdHVybiBvZmYgaHcgd2VwIG9uIHJ0bDgxODAgKi8KLQotCXJ0bDgxOHhfaW93cml0ZTMyKHByaXYsICZwcml2LT5tYXAtPklOVF9USU1FT1VULCAwKTsKLQotCWlmIChwcml2LT5yODE4NSkgewotCQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPldQQV9DT05GLCAwKTsKLQkJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5SQVRFX0ZBTExCQUNLLCAweDgxKTsKLQkJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5SRVNQX1JBVEUsICg4IDw8IDQpIHwgMCk7Ci0KLQkJcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+QlJTUiwgMHgwMUYzKTsKLQotCQkvKiBUT0RPOiBzZXQgQ2xrUnVuIGVuYWJsZT8gbmVjZXNzYXJ5PyAqLwotCQlyZWcgPSBydGw4MTh4X2lvcmVhZDgocHJpdiwgJnByaXYtPm1hcC0+R1BfRU5BQkxFKTsKLQkJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5HUF9FTkFCTEUsIHJlZyAmIH4oMSA8PCA2KSk7Ci0JCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCwgUlRMODE4WF9FRVBST01fQ01EX0NPTkZJRyk7Ci0JCXJlZyA9IHJ0bDgxOHhfaW9yZWFkOChwcml2LCAmcHJpdi0+bWFwLT5DT05GSUczKTsKLQkJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5DT05GSUczLCByZWcgfCAoMSA8PCAyKSk7Ci0JCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCwgUlRMODE4WF9FRVBST01fQ01EX05PUk1BTCk7Ci0JfSBlbHNlIHsKLQkJcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+QlJTUiwgMHgxKTsKLQkJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5TRUNVUklUWSwgMCk7Ci0KLQkJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5QSFlfREVMQVksIDB4Nik7Ci0JCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+Q0FSUklFUl9TRU5TRV9DT1VOVEVSLCAweDRDKTsKLQl9Ci0KLQlwcml2LT5yZi0+aW5pdChkZXYpOwotCWlmIChwcml2LT5yODE4NSkKLQkJcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+QlJTUiwgMHgwMUYzKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBydGw4MTgwX2luaXRfcnhfcmluZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCi17Ci0Jc3RydWN0IHJ0bDgxODBfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKLQlzdHJ1Y3QgcnRsODE4MF9yeF9kZXNjICplbnRyeTsKLQlpbnQgaTsKLQotCXByaXYtPnJ4X3JpbmcgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwcml2LT5wZGV2LAotCQkJCQkgICAgIHNpemVvZigqcHJpdi0+cnhfcmluZykgKiAzMiwKLQkJCQkJICAgICAmcHJpdi0+cnhfcmluZ19kbWEpOwotCi0JaWYgKCFwcml2LT5yeF9yaW5nIHx8ICh1bnNpZ25lZCBsb25nKXByaXYtPnJ4X3JpbmcgJiAweEZGKSB7Ci0JCXdpcGh5X2VycihkZXYtPndpcGh5LCAiQ2Fubm90IGFsbG9jYXRlIFJYIHJpbmdcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQltZW1zZXQocHJpdi0+cnhfcmluZywgMCwgc2l6ZW9mKCpwcml2LT5yeF9yaW5nKSAqIDMyKTsKLQlwcml2LT5yeF9pZHggPSAwOwotCi0JZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKLQkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGRldl9hbGxvY19za2IoTUFYX1JYX1NJWkUpOwotCQlkbWFfYWRkcl90ICptYXBwaW5nOwotCQllbnRyeSA9ICZwcml2LT5yeF9yaW5nW2ldOwotCQlpZiAoIXNrYikKLQkJCXJldHVybiAwOwotCi0JCXByaXYtPnJ4X2J1ZltpXSA9IHNrYjsKLQkJbWFwcGluZyA9IChkbWFfYWRkcl90ICopc2tiLT5jYjsKLQkJKm1hcHBpbmcgPSBwY2lfbWFwX3NpbmdsZShwcml2LT5wZGV2LCBza2JfdGFpbF9wb2ludGVyKHNrYiksCi0JCQkJCSAgTUFYX1JYX1NJWkUsIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JCWVudHJ5LT5yeF9idWYgPSBjcHVfdG9fbGUzMigqbWFwcGluZyk7Ci0JCWVudHJ5LT5mbGFncyA9IGNwdV90b19sZTMyKFJUTDgxOFhfUlhfREVTQ19GTEFHX09XTiB8Ci0JCQkJCSAgIE1BWF9SWF9TSVpFKTsKLQl9Ci0JZW50cnktPmZsYWdzIHw9IGNwdV90b19sZTMyKFJUTDgxOFhfUlhfREVTQ19GTEFHX0VPUik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHJ0bDgxODBfZnJlZV9yeF9yaW5nKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKLXsKLQlzdHJ1Y3QgcnRsODE4MF9wcml2ICpwcml2ID0gZGV2LT5wcml2OwotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKLQkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHByaXYtPnJ4X2J1ZltpXTsKLQkJaWYgKCFza2IpCi0JCQljb250aW51ZTsKLQotCQlwY2lfdW5tYXBfc2luZ2xlKHByaXYtPnBkZXYsCi0JCQkJICooKGRtYV9hZGRyX3QgKilza2ItPmNiKSwKLQkJCQkgTUFYX1JYX1NJWkUsIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JCWtmcmVlX3NrYihza2IpOwotCX0KLQotCXBjaV9mcmVlX2NvbnNpc3RlbnQocHJpdi0+cGRldiwgc2l6ZW9mKCpwcml2LT5yeF9yaW5nKSAqIDMyLAotCQkJICAgIHByaXYtPnJ4X3JpbmcsIHByaXYtPnJ4X3JpbmdfZG1hKTsKLQlwcml2LT5yeF9yaW5nID0gTlVMTDsKLX0KLQotc3RhdGljIGludCBydGw4MTgwX2luaXRfdHhfcmluZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCi0JCQkJdW5zaWduZWQgaW50IHByaW8sIHVuc2lnbmVkIGludCBlbnRyaWVzKQotewotCXN0cnVjdCBydGw4MTgwX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7Ci0Jc3RydWN0IHJ0bDgxODBfdHhfZGVzYyAqcmluZzsKLQlkbWFfYWRkcl90IGRtYTsKLQlpbnQgaTsKLQotCXJpbmcgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwcml2LT5wZGV2LCBzaXplb2YoKnJpbmcpICogZW50cmllcywgJmRtYSk7Ci0JaWYgKCFyaW5nIHx8ICh1bnNpZ25lZCBsb25nKXJpbmcgJiAweEZGKSB7Ci0JCXdpcGh5X2VycihkZXYtPndpcGh5LCAiQ2Fubm90IGFsbG9jYXRlIFRYIHJpbmcgKHByaW8gPSAlZClcbiIsCi0JCQkgIHByaW8pOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQltZW1zZXQocmluZywgMCwgc2l6ZW9mKCpyaW5nKSplbnRyaWVzKTsKLQlwcml2LT50eF9yaW5nW3ByaW9dLmRlc2MgPSByaW5nOwotCXByaXYtPnR4X3JpbmdbcHJpb10uZG1hID0gZG1hOwotCXByaXYtPnR4X3JpbmdbcHJpb10uaWR4ID0gMDsKLQlwcml2LT50eF9yaW5nW3ByaW9dLmVudHJpZXMgPSBlbnRyaWVzOwotCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnByaXYtPnR4X3JpbmdbcHJpb10ucXVldWUpOwotCi0JZm9yIChpID0gMDsgaSA8IGVudHJpZXM7IGkrKykKLQkJcmluZ1tpXS5uZXh0X3R4X2Rlc2MgPQotCQkJY3B1X3RvX2xlMzIoKHUzMilkbWEgKyAoKGkgKyAxKSAlIGVudHJpZXMpICogc2l6ZW9mKCpyaW5nKSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgcnRsODE4MF9mcmVlX3R4X3Jpbmcoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCB1bnNpZ25lZCBpbnQgcHJpbykKLXsKLQlzdHJ1Y3QgcnRsODE4MF9wcml2ICpwcml2ID0gZGV2LT5wcml2OwotCXN0cnVjdCBydGw4MTgwX3R4X3JpbmcgKnJpbmcgPSAmcHJpdi0+dHhfcmluZ1twcmlvXTsKLQotCXdoaWxlIChza2JfcXVldWVfbGVuKCZyaW5nLT5xdWV1ZSkpIHsKLQkJc3RydWN0IHJ0bDgxODBfdHhfZGVzYyAqZW50cnkgPSAmcmluZy0+ZGVzY1tyaW5nLT5pZHhdOwotCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gX19za2JfZGVxdWV1ZSgmcmluZy0+cXVldWUpOwotCi0JCXBjaV91bm1hcF9zaW5nbGUocHJpdi0+cGRldiwgbGUzMl90b19jcHUoZW50cnktPnR4X2J1ZiksCi0JCQkJIHNrYi0+bGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKLQkJa2ZyZWVfc2tiKHNrYik7Ci0JCXJpbmctPmlkeCA9IChyaW5nLT5pZHggKyAxKSAlIHJpbmctPmVudHJpZXM7Ci0JfQotCi0JcGNpX2ZyZWVfY29uc2lzdGVudChwcml2LT5wZGV2LCBzaXplb2YoKnJpbmctPmRlc2MpKnJpbmctPmVudHJpZXMsCi0JCQkgICAgcmluZy0+ZGVzYywgcmluZy0+ZG1hKTsKLQlyaW5nLT5kZXNjID0gTlVMTDsKLX0KLQotc3RhdGljIGludCBydGw4MTgwX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKLXsKLQlzdHJ1Y3QgcnRsODE4MF9wcml2ICpwcml2ID0gZGV2LT5wcml2OwotCWludCByZXQsIGk7Ci0JdTMyIHJlZzsKLQotCXJldCA9IHJ0bDgxODBfaW5pdF9yeF9yaW5nKGRldik7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCi0JCWlmICgocmV0ID0gcnRsODE4MF9pbml0X3R4X3JpbmcoZGV2LCBpLCAxNikpKQotCQkJZ290byBlcnJfZnJlZV9yaW5nczsKLQotCXJldCA9IHJ0bDgxODBfaW5pdF9odyhkZXYpOwotCWlmIChyZXQpCi0JCWdvdG8gZXJyX2ZyZWVfcmluZ3M7Ci0KLQlydGw4MTh4X2lvd3JpdGUzMihwcml2LCAmcHJpdi0+bWFwLT5SRFNBUiwgcHJpdi0+cnhfcmluZ19kbWEpOwotCXJ0bDgxOHhfaW93cml0ZTMyKHByaXYsICZwcml2LT5tYXAtPlRCREEsIHByaXYtPnR4X3JpbmdbM10uZG1hKTsKLQlydGw4MTh4X2lvd3JpdGUzMihwcml2LCAmcHJpdi0+bWFwLT5USFBEQSwgcHJpdi0+dHhfcmluZ1syXS5kbWEpOwotCXJ0bDgxOHhfaW93cml0ZTMyKHByaXYsICZwcml2LT5tYXAtPlROUERBLCBwcml2LT50eF9yaW5nWzFdLmRtYSk7Ci0JcnRsODE4eF9pb3dyaXRlMzIocHJpdiwgJnByaXYtPm1hcC0+VExQREEsIHByaXYtPnR4X3JpbmdbMF0uZG1hKTsKLQotCXJldCA9IHJlcXVlc3RfaXJxKHByaXYtPnBkZXYtPmlycSwgcnRsODE4MF9pbnRlcnJ1cHQsCi0JCQkgIElSUUZfU0hBUkVELCBLQlVJTERfTU9ETkFNRSwgZGV2KTsKLQlpZiAocmV0KSB7Ci0JCXdpcGh5X2VycihkZXYtPndpcGh5LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIElSUSBoYW5kbGVyXG4iKTsKLQkJZ290byBlcnJfZnJlZV9yaW5nczsKLQl9Ci0KLQlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5JTlRfTUFTSywgMHhGRkZGKTsKLQotCXJ0bDgxOHhfaW93cml0ZTMyKHByaXYsICZwcml2LT5tYXAtPk1BUlswXSwgfjApOwotCXJ0bDgxOHhfaW93cml0ZTMyKHByaXYsICZwcml2LT5tYXAtPk1BUlsxXSwgfjApOwotCi0JcmVnID0gUlRMODE4WF9SWF9DT05GX09OTFlFUkxQS1QgfAotCSAgICAgIFJUTDgxOFhfUlhfQ09ORl9SWF9BVVRPUkVTRVRQSFkgfAotCSAgICAgIFJUTDgxOFhfUlhfQ09ORl9NR01UIHwKLQkgICAgICBSVEw4MThYX1JYX0NPTkZfREFUQSB8Ci0JICAgICAgKDcgPDwgOCAvKiBNQVggUlggRE1BICovKSB8Ci0JICAgICAgUlRMODE4WF9SWF9DT05GX0JST0FEQ0FTVCB8Ci0JICAgICAgUlRMODE4WF9SWF9DT05GX05JQ01BQzsKLQotCWlmIChwcml2LT5yODE4NSkKLQkJcmVnIHw9IFJUTDgxOFhfUlhfQ09ORl9DU0RNMSB8IFJUTDgxOFhfUlhfQ09ORl9DU0RNMjsKLQllbHNlIHsKLQkJcmVnIHw9IChwcml2LT5yZnBhcmFtICYgUkZfUEFSQU1fQ0FSUklFUlNFTlNFMSkKLQkJCT8gUlRMODE4WF9SWF9DT05GX0NTRE0xIDogMDsKLQkJcmVnIHw9IChwcml2LT5yZnBhcmFtICYgUkZfUEFSQU1fQ0FSUklFUlNFTlNFMikKLQkJCT8gUlRMODE4WF9SWF9DT05GX0NTRE0yIDogMDsKLQl9Ci0KLQlwcml2LT5yeF9jb25mID0gcmVnOwotCXJ0bDgxOHhfaW93cml0ZTMyKHByaXYsICZwcml2LT5tYXAtPlJYX0NPTkYsIHJlZyk7Ci0KLQlpZiAocHJpdi0+cjgxODUpIHsKLQkJcmVnID0gcnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPkNXX0NPTkYpOwotCQlyZWcgJj0gflJUTDgxOFhfQ1dfQ09ORl9QRVJQQUNLRVRfQ1dfU0hJRlQ7Ci0JCXJlZyB8PSBSVEw4MThYX0NXX0NPTkZfUEVSUEFDS0VUX1JFVFJZX1NISUZUOwotCQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkNXX0NPTkYsIHJlZyk7Ci0KLQkJcmVnID0gcnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPlRYX0FHQ19DVEwpOwotCQlyZWcgJj0gflJUTDgxOFhfVFhfQUdDX0NUTF9QRVJQQUNLRVRfR0FJTl9TSElGVDsKLQkJcmVnICY9IH5SVEw4MThYX1RYX0FHQ19DVExfUEVSUEFDS0VUX0FOVFNFTF9TSElGVDsKLQkJcmVnIHw9ICBSVEw4MThYX1RYX0FHQ19DVExfRkVFREJBQ0tfQU5UOwotCQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPlRYX0FHQ19DVEwsIHJlZyk7Ci0KLQkJLyogZGlzYWJsZSBlYXJseSBUWCAqLwotCQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICh1OCBfX2lvbWVtICopcHJpdi0+bWFwICsgMHhlYywgMHgzZik7Ci0JfQotCi0JcmVnID0gcnRsODE4eF9pb3JlYWQzMihwcml2LCAmcHJpdi0+bWFwLT5UWF9DT05GKTsKLQlyZWcgfD0gKDYgPDwgMjEgLyogTUFYIFRYIERNQSAqLykgfAotCSAgICAgICBSVEw4MThYX1RYX0NPTkZfTk9fSUNWOwotCi0JaWYgKHByaXYtPnI4MTg1KQotCQlyZWcgJj0gflJUTDgxOFhfVFhfQ09ORl9QUk9CRV9EVFM7Ci0JZWxzZQotCQlyZWcgJj0gflJUTDgxOFhfVFhfQ09ORl9IV19TRVFOVU07Ci0KLQkvKiBkaWZmZXJlbnQgbWVhbmluZywgc2FtZSB2YWx1ZSBvbiBib3RoIHJ0bDgxODUgYW5kIHJ0bDgxODAgKi8KLQlyZWcgJj0gflJUTDgxOFhfVFhfQ09ORl9TQVRfSFdQTENQOwotCi0JcnRsODE4eF9pb3dyaXRlMzIocHJpdiwgJnByaXYtPm1hcC0+VFhfQ09ORiwgcmVnKTsKLQotCXJlZyA9IHJ0bDgxOHhfaW9yZWFkOChwcml2LCAmcHJpdi0+bWFwLT5DTUQpOwotCXJlZyB8PSBSVEw4MThYX0NNRF9SWF9FTkFCTEU7Ci0JcmVnIHw9IFJUTDgxOFhfQ01EX1RYX0VOQUJMRTsKLQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkNNRCwgcmVnKTsKLQotCXJldHVybiAwOwotCi0gZXJyX2ZyZWVfcmluZ3M6Ci0JcnRsODE4MF9mcmVlX3J4X3JpbmcoZGV2KTsKLQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQotCQlpZiAocHJpdi0+dHhfcmluZ1tpXS5kZXNjKQotCQkJcnRsODE4MF9mcmVlX3R4X3JpbmcoZGV2LCBpKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHJ0bDgxODBfc3RvcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCi17Ci0Jc3RydWN0IHJ0bDgxODBfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKLQl1OCByZWc7Ci0JaW50IGk7Ci0KLQlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5JTlRfTUFTSywgMCk7Ci0KLQlyZWcgPSBydGw4MTh4X2lvcmVhZDgocHJpdiwgJnByaXYtPm1hcC0+Q01EKTsKLQlyZWcgJj0gflJUTDgxOFhfQ01EX1RYX0VOQUJMRTsKLQlyZWcgJj0gflJUTDgxOFhfQ01EX1JYX0VOQUJMRTsKLQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkNNRCwgcmVnKTsKLQotCXByaXYtPnJmLT5zdG9wKGRldik7Ci0KLQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQsIFJUTDgxOFhfRUVQUk9NX0NNRF9DT05GSUcpOwotCXJlZyA9IHJ0bDgxOHhfaW9yZWFkOChwcml2LCAmcHJpdi0+bWFwLT5DT05GSUc0KTsKLQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkNPTkZJRzQsIHJlZyB8IFJUTDgxOFhfQ09ORklHNF9WQ09PRkYpOwotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCwgUlRMODE4WF9FRVBST01fQ01EX05PUk1BTCk7Ci0KLQlmcmVlX2lycShwcml2LT5wZGV2LT5pcnEsIGRldik7Ci0KLQlydGw4MTgwX2ZyZWVfcnhfcmluZyhkZXYpOwotCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCi0JCXJ0bDgxODBfZnJlZV90eF9yaW5nKGRldiwgaSk7Ci19Ci0KLXN0YXRpYyB1NjQgcnRsODE4MF9nZXRfdHNmKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKLXsKLQlzdHJ1Y3QgcnRsODE4MF9wcml2ICpwcml2ID0gZGV2LT5wcml2OwotCi0JcmV0dXJuIHJ0bDgxOHhfaW9yZWFkMzIocHJpdiwgJnByaXYtPm1hcC0+VFNGVFswXSkgfAotCSAgICAgICAodTY0KShydGw4MTh4X2lvcmVhZDMyKHByaXYsICZwcml2LT5tYXAtPlRTRlRbMV0pKSA8PCAzMjsKLX0KLQotc3RhdGljIHZvaWQgcnRsODE4MF9iZWFjb25fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IHJ0bDgxODBfdmlmICp2aWZfcHJpdiA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcnRsODE4MF92aWYsIGJlYWNvbl93b3JrLndvcmspOwotCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYgPQotCQljb250YWluZXJfb2YoKHZvaWQgKil2aWZfcHJpdiwgc3RydWN0IGllZWU4MDIxMV92aWYsIGRydl9wcml2KTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYgPSB2aWZfcHJpdi0+ZGV2OwotCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCWludCBlcnIgPSAwOwotCi0JLyogZG9uJ3Qgb3ZlcmZsb3cgdGhlIHR4IHJpbmcgKi8KLQlpZiAoaWVlZTgwMjExX3F1ZXVlX3N0b3BwZWQoZGV2LCAwKSkKLQkJZ290byByZXNjaGVkOwotCi0JLyogZ3JhYiBhIGZyZXNoIGJlYWNvbiAqLwotCXNrYiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KGRldiwgdmlmKTsKLQlpZiAoIXNrYikKLQkJZ290byByZXNjaGVkOwotCi0JLyoKLQkgKiB1cGRhdGUgYmVhY29uIHRpbWVzdGFtcCB3LyBUU0YgdmFsdWUKLQkgKiBUT0RPOiBtYWtlIGhhcmR3YXJlIHVwZGF0ZSBiZWFjb24gdGltZXN0YW1wCi0JICovCi0JbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKilza2ItPmRhdGE7Ci0JbWdtdC0+dS5iZWFjb24udGltZXN0YW1wID0gY3B1X3RvX2xlNjQocnRsODE4MF9nZXRfdHNmKGRldikpOwotCi0JLyogVE9ETzogdXNlIGFjdHVhbCBiZWFjb24gcXVldWUgKi8KLQlza2Jfc2V0X3F1ZXVlX21hcHBpbmcoc2tiLCAwKTsKLQotCWVyciA9IHJ0bDgxODBfdHgoZGV2LCBza2IpOwotCVdBUk5fT04oZXJyKTsKLQotcmVzY2hlZDoKLQkvKgotCSAqIHNjaGVkdWxlIG5leHQgYmVhY29uCi0JICogVE9ETzogdXNlIGhhcmR3YXJlIHN1cHBvcnQgZm9yIGJlYWNvbiB0aW1pbmcKLQkgKi8KLQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnZpZl9wcml2LT5iZWFjb25fd29yaywKLQkJCXVzZWNzX3RvX2ppZmZpZXMoMTAyNCAqIHZpZi0+YnNzX2NvbmYuYmVhY29uX2ludCkpOwotfQotCi1zdGF0aWMgaW50IHJ0bDgxODBfYWRkX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCi0JCQkJIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCi17Ci0Jc3RydWN0IHJ0bDgxODBfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKLQlzdHJ1Y3QgcnRsODE4MF92aWYgKnZpZl9wcml2OwotCi0JLyoKLQkgKiBXZSBvbmx5IHN1cHBvcnQgb25lIGFjdGl2ZSBpbnRlcmZhY2UgYXQgYSB0aW1lLgotCSAqLwotCWlmIChwcml2LT52aWYpCi0JCXJldHVybiAtRUJVU1k7Ci0KLQlzd2l0Y2ggKHZpZi0+dHlwZSkgewotCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKLQljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JfQotCi0JcHJpdi0+dmlmID0gdmlmOwotCi0JLyogSW5pdGlhbGl6ZSBkcml2ZXIgcHJpdmF0ZSBhcmVhICovCi0JdmlmX3ByaXYgPSAoc3RydWN0IHJ0bDgxODBfdmlmICopJnZpZi0+ZHJ2X3ByaXY7Ci0JdmlmX3ByaXYtPmRldiA9IGRldjsKLQlJTklUX0RFTEFZRURfV09SSygmdmlmX3ByaXYtPmJlYWNvbl93b3JrLCBydGw4MTgwX2JlYWNvbl93b3JrKTsKLQl2aWZfcHJpdi0+ZW5hYmxlX2JlYWNvbiA9IGZhbHNlOwotCi0JcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5FRVBST01fQ01ELCBSVEw4MThYX0VFUFJPTV9DTURfQ09ORklHKTsKLQlydGw4MTh4X2lvd3JpdGUzMihwcml2LCAoX19sZTMyIF9faW9tZW0gKikmcHJpdi0+bWFwLT5NQUNbMF0sCi0JCQkgIGxlMzJfdG9fY3B1KCooX19sZTMyICopdmlmLT5hZGRyKSk7Ci0JcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgKF9fbGUxNiBfX2lvbWVtICopJnByaXYtPm1hcC0+TUFDWzRdLAotCQkJICBsZTE2X3RvX2NwdSgqKF9fbGUxNiAqKSh2aWYtPmFkZHIgKyA0KSkpOwotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCwgUlRMODE4WF9FRVBST01fQ01EX05PUk1BTCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgcnRsODE4MF9yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKLQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCi17Ci0Jc3RydWN0IHJ0bDgxODBfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKLQlwcml2LT52aWYgPSBOVUxMOwotfQotCi1zdGF0aWMgaW50IHJ0bDgxODBfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgdTMyIGNoYW5nZWQpCi17Ci0Jc3RydWN0IHJ0bDgxODBfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKLQlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmZGV2LT5jb25mOwotCi0JcHJpdi0+cmYtPnNldF9jaGFuKGRldiwgY29uZik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgcnRsODE4MF9ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKLQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCi0JCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICppbmZvLAotCQkJCSAgICAgdTMyIGNoYW5nZWQpCi17Ci0Jc3RydWN0IHJ0bDgxODBfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKLQlzdHJ1Y3QgcnRsODE4MF92aWYgKnZpZl9wcml2OwotCWludCBpOwotCXU4IHJlZzsKLQotCXZpZl9wcml2ID0gKHN0cnVjdCBydGw4MTgwX3ZpZiAqKSZ2aWYtPmRydl9wcml2OwotCi0JaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9CU1NJRCkgewotCQlmb3IgKGkgPSAwOyBpIDwgRVRIX0FMRU47IGkrKykKLQkJCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+QlNTSURbaV0sCi0JCQkJCSBpbmZvLT5ic3NpZFtpXSk7Ci0KLQkJaWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIoaW5mby0+YnNzaWQpKSB7Ci0JCQlpZiAodmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKQotCQkJCXJlZyA9IFJUTDgxOFhfTVNSX0FESE9DOwotCQkJZWxzZQotCQkJCXJlZyA9IFJUTDgxOFhfTVNSX0lORlJBOwotCQl9IGVsc2UKLQkJCXJlZyA9IFJUTDgxOFhfTVNSX05PX0xJTks7Ci0JCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+TVNSLCByZWcpOwotCX0KLQotCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfRVJQX1NMT1QgJiYgcHJpdi0+cmYtPmNvbmZfZXJwKQotCQlwcml2LT5yZi0+Y29uZl9lcnAoZGV2LCBpbmZvKTsKLQotCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQkVBQ09OX0VOQUJMRUQpCi0JCXZpZl9wcml2LT5lbmFibGVfYmVhY29uID0gaW5mby0+ZW5hYmxlX2JlYWNvbjsKLQotCWlmIChjaGFuZ2VkICYgKEJTU19DSEFOR0VEX0JFQUNPTl9FTkFCTEVEIHwgQlNTX0NIQU5HRURfQkVBQ09OKSkgewotCQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnZpZl9wcml2LT5iZWFjb25fd29yayk7Ci0JCWlmICh2aWZfcHJpdi0+ZW5hYmxlX2JlYWNvbikKLQkJCXNjaGVkdWxlX3dvcmsoJnZpZl9wcml2LT5iZWFjb25fd29yay53b3JrKTsKLQl9Ci19Ci0KLXN0YXRpYyB1NjQgcnRsODE4MF9wcmVwYXJlX211bHRpY2FzdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCi0JCQkJICAgICBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbWNfbGlzdCkKLXsKLQlyZXR1cm4gbmV0ZGV2X2h3X2FkZHJfbGlzdF9jb3VudChtY19saXN0KTsKLX0KLQotc3RhdGljIHZvaWQgcnRsODE4MF9jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKLQkJCQkgICAgIHVuc2lnbmVkIGludCBjaGFuZ2VkX2ZsYWdzLAotCQkJCSAgICAgdW5zaWduZWQgaW50ICp0b3RhbF9mbGFncywKLQkJCQkgICAgIHU2NCBtdWx0aWNhc3QpCi17Ci0Jc3RydWN0IHJ0bDgxODBfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKLQotCWlmIChjaGFuZ2VkX2ZsYWdzICYgRklGX0ZDU0ZBSUwpCi0JCXByaXYtPnJ4X2NvbmYgXj0gUlRMODE4WF9SWF9DT05GX0ZDUzsKLQlpZiAoY2hhbmdlZF9mbGFncyAmIEZJRl9DT05UUk9MKQotCQlwcml2LT5yeF9jb25mIF49IFJUTDgxOFhfUlhfQ09ORl9DVFJMOwotCWlmIChjaGFuZ2VkX2ZsYWdzICYgRklGX09USEVSX0JTUykKLQkJcHJpdi0+cnhfY29uZiBePSBSVEw4MThYX1JYX0NPTkZfTU9OSVRPUjsKLQlpZiAoKnRvdGFsX2ZsYWdzICYgRklGX0FMTE1VTFRJIHx8IG11bHRpY2FzdCA+IDApCi0JCXByaXYtPnJ4X2NvbmYgfD0gUlRMODE4WF9SWF9DT05GX01VTFRJQ0FTVDsKLQllbHNlCi0JCXByaXYtPnJ4X2NvbmYgJj0gflJUTDgxOFhfUlhfQ09ORl9NVUxUSUNBU1Q7Ci0KLQkqdG90YWxfZmxhZ3MgPSAwOwotCi0JaWYgKHByaXYtPnJ4X2NvbmYgJiBSVEw4MThYX1JYX0NPTkZfRkNTKQotCQkqdG90YWxfZmxhZ3MgfD0gRklGX0ZDU0ZBSUw7Ci0JaWYgKHByaXYtPnJ4X2NvbmYgJiBSVEw4MThYX1JYX0NPTkZfQ1RSTCkKLQkJKnRvdGFsX2ZsYWdzIHw9IEZJRl9DT05UUk9MOwotCWlmIChwcml2LT5yeF9jb25mICYgUlRMODE4WF9SWF9DT05GX01PTklUT1IpCi0JCSp0b3RhbF9mbGFncyB8PSBGSUZfT1RIRVJfQlNTOwotCWlmIChwcml2LT5yeF9jb25mICYgUlRMODE4WF9SWF9DT05GX01VTFRJQ0FTVCkKLQkJKnRvdGFsX2ZsYWdzIHw9IEZJRl9BTExNVUxUSTsKLQotCXJ0bDgxOHhfaW93cml0ZTMyKHByaXYsICZwcml2LT5tYXAtPlJYX0NPTkYsIHByaXYtPnJ4X2NvbmYpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgcnRsODE4MF9vcHMgPSB7Ci0JLnR4CQkJPSBydGw4MTgwX3R4LAotCS5zdGFydAkJCT0gcnRsODE4MF9zdGFydCwKLQkuc3RvcAkJCT0gcnRsODE4MF9zdG9wLAotCS5hZGRfaW50ZXJmYWNlCQk9IHJ0bDgxODBfYWRkX2ludGVyZmFjZSwKLQkucmVtb3ZlX2ludGVyZmFjZQk9IHJ0bDgxODBfcmVtb3ZlX2ludGVyZmFjZSwKLQkuY29uZmlnCQkJPSBydGw4MTgwX2NvbmZpZywKLQkuYnNzX2luZm9fY2hhbmdlZAk9IHJ0bDgxODBfYnNzX2luZm9fY2hhbmdlZCwKLQkucHJlcGFyZV9tdWx0aWNhc3QJPSBydGw4MTgwX3ByZXBhcmVfbXVsdGljYXN0LAotCS5jb25maWd1cmVfZmlsdGVyCT0gcnRsODE4MF9jb25maWd1cmVfZmlsdGVyLAotCS5nZXRfdHNmCQk9IHJ0bDgxODBfZ2V0X3RzZiwKLX07Ci0KLXN0YXRpYyB2b2lkIHJ0bDgxODBfZWVwcm9tX3JlZ2lzdGVyX3JlYWQoc3RydWN0IGVlcHJvbV85M2N4NiAqZWVwcm9tKQotewotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiA9IGVlcHJvbS0+ZGF0YTsKLQlzdHJ1Y3QgcnRsODE4MF9wcml2ICpwcml2ID0gZGV2LT5wcml2OwotCXU4IHJlZyA9IHJ0bDgxOHhfaW9yZWFkOChwcml2LCAmcHJpdi0+bWFwLT5FRVBST01fQ01EKTsKLQotCWVlcHJvbS0+cmVnX2RhdGFfaW4gPSByZWcgJiBSVEw4MThYX0VFUFJPTV9DTURfV1JJVEU7Ci0JZWVwcm9tLT5yZWdfZGF0YV9vdXQgPSByZWcgJiBSVEw4MThYX0VFUFJPTV9DTURfUkVBRDsKLQllZXByb20tPnJlZ19kYXRhX2Nsb2NrID0gcmVnICYgUlRMODE4WF9FRVBST01fQ01EX0NLOwotCWVlcHJvbS0+cmVnX2NoaXBfc2VsZWN0ID0gcmVnICYgUlRMODE4WF9FRVBST01fQ01EX0NTOwotfQotCi1zdGF0aWMgdm9pZCBydGw4MTgwX2VlcHJvbV9yZWdpc3Rlcl93cml0ZShzdHJ1Y3QgZWVwcm9tXzkzY3g2ICplZXByb20pCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqZGV2ID0gZWVwcm9tLT5kYXRhOwotCXN0cnVjdCBydGw4MTgwX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7Ci0JdTggcmVnID0gMiA8PCA2OwotCi0JaWYgKGVlcHJvbS0+cmVnX2RhdGFfaW4pCi0JCXJlZyB8PSBSVEw4MThYX0VFUFJPTV9DTURfV1JJVEU7Ci0JaWYgKGVlcHJvbS0+cmVnX2RhdGFfb3V0KQotCQlyZWcgfD0gUlRMODE4WF9FRVBST01fQ01EX1JFQUQ7Ci0JaWYgKGVlcHJvbS0+cmVnX2RhdGFfY2xvY2spCi0JCXJlZyB8PSBSVEw4MThYX0VFUFJPTV9DTURfQ0s7Ci0JaWYgKGVlcHJvbS0+cmVnX2NoaXBfc2VsZWN0KQotCQlyZWcgfD0gUlRMODE4WF9FRVBST01fQ01EX0NTOwotCi0JcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5FRVBST01fQ01ELCByZWcpOwotCXJ0bDgxOHhfaW9yZWFkOChwcml2LCAmcHJpdi0+bWFwLT5FRVBST01fQ01EKTsKLQl1ZGVsYXkoMTApOwotfQotCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBydGw4MTgwX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAotCQkJCSAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXY7Ci0Jc3RydWN0IHJ0bDgxODBfcHJpdiAqcHJpdjsKLQl1bnNpZ25lZCBsb25nIG1lbV9hZGRyLCBtZW1fbGVuOwotCXVuc2lnbmVkIGludCBpb19hZGRyLCBpb19sZW47Ci0JaW50IGVyciwgaTsKLQlzdHJ1Y3QgZWVwcm9tXzkzY3g2IGVlcHJvbTsKLQljb25zdCBjaGFyICpjaGlwX25hbWUsICpyZl9uYW1lID0gTlVMTDsKLQl1MzIgcmVnOwotCXUxNiBlZXByb21fdmFsOwotCXU4IG1hY19hZGRyW0VUSF9BTEVOXTsKLQotCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlcyAocnRsODE4MCk6IENhbm5vdCBlbmFibGUgbmV3IFBDSSBkZXZpY2VcbiIsCi0JCSAgICAgICBwY2lfbmFtZShwZGV2KSk7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBLQlVJTERfTU9ETkFNRSk7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzIChydGw4MTgwKTogQ2Fubm90IG9idGFpbiBQQ0kgcmVzb3VyY2VzXG4iLAotCQkgICAgICAgcGNpX25hbWUocGRldikpOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCWlvX2FkZHIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7Ci0JaW9fbGVuID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKTsKLQltZW1fYWRkciA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAxKTsKLQltZW1fbGVuID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCAxKTsKLQotCWlmIChtZW1fbGVuIDwgc2l6ZW9mKHN0cnVjdCBydGw4MTh4X2NzcikgfHwKLQkgICAgaW9fbGVuIDwgc2l6ZW9mKHN0cnVjdCBydGw4MTh4X2NzcikpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlcyAocnRsODE4MCk6IFRvbyBzaG9ydCBQQ0kgcmVzb3VyY2VzXG4iLAotCQkgICAgICAgcGNpX25hbWUocGRldikpOwotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIGVycl9mcmVlX3JlZzsKLQl9Ci0KLQlpZiAoKGVyciA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDMyKSkpIHx8Ci0JICAgIChlcnIgPSBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDMyKSkpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXMgKHJ0bDgxODApOiBObyBzdWl0YWJsZSBETUEgYXZhaWxhYmxlXG4iLAotCQkgICAgICAgcGNpX25hbWUocGRldikpOwotCQlnb3RvIGVycl9mcmVlX3JlZzsKLQl9Ci0KLQlwY2lfc2V0X21hc3RlcihwZGV2KTsKLQotCWRldiA9IGllZWU4MDIxMV9hbGxvY19odyhzaXplb2YoKnByaXYpLCAmcnRsODE4MF9vcHMpOwotCWlmICghZGV2KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXMgKHJ0bDgxODApOiBpZWVlODAyMTEgYWxsb2MgZmFpbGVkXG4iLAotCQkgICAgICAgcGNpX25hbWUocGRldikpOwotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIGVycl9mcmVlX3JlZzsKLQl9Ci0KLQlwcml2ID0gZGV2LT5wcml2OwotCXByaXYtPnBkZXYgPSBwZGV2OwotCi0JZGV2LT5tYXhfcmF0ZXMgPSAyOwotCVNFVF9JRUVFODAyMTFfREVWKGRldiwgJnBkZXYtPmRldik7Ci0JcGNpX3NldF9kcnZkYXRhKHBkZXYsIGRldik7Ci0KLQlwcml2LT5tYXAgPSBwY2lfaW9tYXAocGRldiwgMSwgbWVtX2xlbik7Ci0JaWYgKCFwcml2LT5tYXApCi0JCXByaXYtPm1hcCA9IHBjaV9pb21hcChwZGV2LCAwLCBpb19sZW4pOwotCi0JaWYgKCFwcml2LT5tYXApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlcyAocnRsODE4MCk6IENhbm5vdCBtYXAgZGV2aWNlIG1lbW9yeVxuIiwKLQkJICAgICAgIHBjaV9uYW1lKHBkZXYpKTsKLQkJZ290byBlcnJfZnJlZV9kZXY7Ci0JfQotCi0JQlVJTERfQlVHX09OKHNpemVvZihwcml2LT5jaGFubmVscykgIT0gc2l6ZW9mKHJ0bDgxOHhfY2hhbm5lbHMpKTsKLQlCVUlMRF9CVUdfT04oc2l6ZW9mKHByaXYtPnJhdGVzKSAhPSBzaXplb2YocnRsODE4eF9yYXRlcykpOwotCi0JbWVtY3B5KHByaXYtPmNoYW5uZWxzLCBydGw4MTh4X2NoYW5uZWxzLCBzaXplb2YocnRsODE4eF9jaGFubmVscykpOwotCW1lbWNweShwcml2LT5yYXRlcywgcnRsODE4eF9yYXRlcywgc2l6ZW9mKHJ0bDgxOHhfcmF0ZXMpKTsKLQotCXByaXYtPmJhbmQuYmFuZCA9IElFRUU4MDIxMV9CQU5EXzJHSFo7Ci0JcHJpdi0+YmFuZC5jaGFubmVscyA9IHByaXYtPmNoYW5uZWxzOwotCXByaXYtPmJhbmQubl9jaGFubmVscyA9IEFSUkFZX1NJWkUocnRsODE4eF9jaGFubmVscyk7Ci0JcHJpdi0+YmFuZC5iaXRyYXRlcyA9IHByaXYtPnJhdGVzOwotCXByaXYtPmJhbmQubl9iaXRyYXRlcyA9IDQ7Ci0JZGV2LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0gPSAmcHJpdi0+YmFuZDsKLQotCWRldi0+ZmxhZ3MgPSBJRUVFODAyMTFfSFdfSE9TVF9CUk9BRENBU1RfUFNfQlVGRkVSSU5HIHwKLQkJICAgICBJRUVFODAyMTFfSFdfUlhfSU5DTFVERVNfRkNTIHwKLQkJICAgICBJRUVFODAyMTFfSFdfU0lHTkFMX1VOU1BFQzsKLQlkZXYtPnZpZl9kYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IHJ0bDgxODBfdmlmKTsKLQlkZXYtPndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgPSBCSVQoTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgfAotCQkJCQlCSVQoTkw4MDIxMV9JRlRZUEVfQURIT0MpOwotCWRldi0+cXVldWVzID0gMTsKLQlkZXYtPm1heF9zaWduYWwgPSA2NTsKLQotCXJlZyA9IHJ0bDgxOHhfaW9yZWFkMzIocHJpdiwgJnByaXYtPm1hcC0+VFhfQ09ORik7Ci0JcmVnICY9IFJUTDgxOFhfVFhfQ09ORl9IV1ZFUl9NQVNLOwotCXN3aXRjaCAocmVnKSB7Ci0JY2FzZSBSVEw4MThYX1RYX0NPTkZfUjgxODBfQUJDRDoKLQkJY2hpcF9uYW1lID0gIlJUTDgxODAiOwotCQlicmVhazsKLQljYXNlIFJUTDgxOFhfVFhfQ09ORl9SODE4MF9GOgotCQljaGlwX25hbWUgPSAiUlRMODE4MHZGIjsKLQkJYnJlYWs7Ci0JY2FzZSBSVEw4MThYX1RYX0NPTkZfUjgxODVfQUJDOgotCQljaGlwX25hbWUgPSAiUlRMODE4NSI7Ci0JCWJyZWFrOwotCWNhc2UgUlRMODE4WF9UWF9DT05GX1I4MTg1X0Q6Ci0JCWNoaXBfbmFtZSA9ICJSVEw4MTg1dkQiOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9FUlIgIiVzIChydGw4MTgwKTogVW5rbm93biBjaGlwISAoMHgleClcbiIsCi0JCSAgICAgICBwY2lfbmFtZShwZGV2KSwgcmVnID4+IDI1KTsKLQkJZ290byBlcnJfaW91bm1hcDsKLQl9Ci0KLQlwcml2LT5yODE4NSA9IHJlZyAmIFJUTDgxOFhfVFhfQ09ORl9SODE4NV9BQkM7Ci0JaWYgKHByaXYtPnI4MTg1KSB7Ci0JCXByaXYtPmJhbmQubl9iaXRyYXRlcyA9IEFSUkFZX1NJWkUocnRsODE4eF9yYXRlcyk7Ci0JCXBjaV90cnlfc2V0X213aShwZGV2KTsKLQl9Ci0KLQllZXByb20uZGF0YSA9IGRldjsKLQllZXByb20ucmVnaXN0ZXJfcmVhZCA9IHJ0bDgxODBfZWVwcm9tX3JlZ2lzdGVyX3JlYWQ7Ci0JZWVwcm9tLnJlZ2lzdGVyX3dyaXRlID0gcnRsODE4MF9lZXByb21fcmVnaXN0ZXJfd3JpdGU7Ci0JaWYgKHJ0bDgxOHhfaW9yZWFkMzIocHJpdiwgJnByaXYtPm1hcC0+UlhfQ09ORikgJiAoMSA8PCA2KSkKLQkJZWVwcm9tLndpZHRoID0gUENJX0VFUFJPTV9XSURUSF85M0M2NjsKLQllbHNlCi0JCWVlcHJvbS53aWR0aCA9IFBDSV9FRVBST01fV0lEVEhfOTNDNDY7Ci0KLQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQsIFJUTDgxOFhfRUVQUk9NX0NNRF9QUk9HUkFNKTsKLQlydGw4MTh4X2lvcmVhZDgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCk7Ci0JdWRlbGF5KDEwKTsKLQotCWVlcHJvbV85M2N4Nl9yZWFkKCZlZXByb20sIDB4MDYsICZlZXByb21fdmFsKTsKLQllZXByb21fdmFsICY9IDB4RkY7Ci0Jc3dpdGNoIChlZXByb21fdmFsKSB7Ci0JY2FzZSAxOglyZl9uYW1lID0gIkludGVyc2lsIjsKLQkJYnJlYWs7Ci0JY2FzZSAyOglyZl9uYW1lID0gIlJGTUQiOwotCQlicmVhazsKLQljYXNlIDM6CXByaXYtPnJmID0gJnNhMjQwMF9yZl9vcHM7Ci0JCWJyZWFrOwotCWNhc2UgNDoJcHJpdi0+cmYgPSAmbWF4MjgyMF9yZl9vcHM7Ci0JCWJyZWFrOwotCWNhc2UgNToJcHJpdi0+cmYgPSAmZ3JmNTEwMV9yZl9vcHM7Ci0JCWJyZWFrOwotCWNhc2UgOToJcHJpdi0+cmYgPSBydGw4MTgwX2RldGVjdF9yZihkZXYpOwotCQlicmVhazsKLQljYXNlIDEwOgotCQlyZl9uYW1lID0gIlJUTDgyNTUiOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9FUlIgIiVzIChydGw4MTgwKTogVW5rbm93biBSRiEgKDB4JXgpXG4iLAotCQkgICAgICAgcGNpX25hbWUocGRldiksIGVlcHJvbV92YWwpOwotCQlnb3RvIGVycl9pb3VubWFwOwotCX0KLQotCWlmICghcHJpdi0+cmYpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlcyAocnRsODE4MCk6ICVzIFJGIGZyb250ZW5kIG5vdCBzdXBwb3J0ZWQhXG4iLAotCQkgICAgICAgcGNpX25hbWUocGRldiksIHJmX25hbWUpOwotCQlnb3RvIGVycl9pb3VubWFwOwotCX0KLQotCWVlcHJvbV85M2N4Nl9yZWFkKCZlZXByb20sIDB4MTcsICZlZXByb21fdmFsKTsKLQlwcml2LT5jc3RocmVzaG9sZCA9IGVlcHJvbV92YWwgPj4gODsKLQlpZiAoIXByaXYtPnI4MTg1KSB7Ci0JCV9fbGUzMiBhbmFwYXJhbTsKLQkJZWVwcm9tXzkzY3g2X211bHRpcmVhZCgmZWVwcm9tLCAweEQsIChfX2xlMTYgKikmYW5hcGFyYW0sIDIpOwotCQlwcml2LT5hbmFwYXJhbSA9IGxlMzJfdG9fY3B1KGFuYXBhcmFtKTsKLQkJZWVwcm9tXzkzY3g2X3JlYWQoJmVlcHJvbSwgMHgxOSwgJnByaXYtPnJmcGFyYW0pOwotCX0KLQotCWVlcHJvbV85M2N4Nl9tdWx0aXJlYWQoJmVlcHJvbSwgMHg3LCAoX19sZTE2ICopbWFjX2FkZHIsIDMpOwotCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihtYWNfYWRkcikpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXMgKHJ0bDgxODApOiBJbnZhbGlkIGh3YWRkciEgVXNpbmciCi0JCSAgICAgICAiIHJhbmRvbWx5IGdlbmVyYXRlZCBNQUMgYWRkclxuIiwgcGNpX25hbWUocGRldikpOwotCQlyYW5kb21fZXRoZXJfYWRkcihtYWNfYWRkcik7Ci0JfQotCVNFVF9JRUVFODAyMTFfUEVSTV9BRERSKGRldiwgbWFjX2FkZHIpOwotCi0JLyogQ0NLIFRYIHBvd2VyICovCi0JZm9yIChpID0gMDsgaSA8IDE0OyBpICs9IDIpIHsKLQkJdTE2IHR4cHdyOwotCQllZXByb21fOTNjeDZfcmVhZCgmZWVwcm9tLCAweDEwICsgKGkgPj4gMSksICZ0eHB3cik7Ci0JCXByaXYtPmNoYW5uZWxzW2ldLmh3X3ZhbHVlID0gdHhwd3IgJiAweEZGOwotCQlwcml2LT5jaGFubmVsc1tpICsgMV0uaHdfdmFsdWUgPSB0eHB3ciA+PiA4OwotCX0KLQotCS8qIE9GRE0gVFggcG93ZXIgKi8KLQlpZiAocHJpdi0+cjgxODUpIHsKLQkJZm9yIChpID0gMDsgaSA8IDE0OyBpICs9IDIpIHsKLQkJCXUxNiB0eHB3cjsKLQkJCWVlcHJvbV85M2N4Nl9yZWFkKCZlZXByb20sIDB4MjAgKyAoaSA+PiAxKSwgJnR4cHdyKTsKLQkJCXByaXYtPmNoYW5uZWxzW2ldLmh3X3ZhbHVlIHw9ICh0eHB3ciAmIDB4RkYpIDw8IDg7Ci0JCQlwcml2LT5jaGFubmVsc1tpICsgMV0uaHdfdmFsdWUgfD0gdHhwd3IgJiAweEZGMDA7Ci0JCX0KLQl9Ci0KLQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQsIFJUTDgxOFhfRUVQUk9NX0NNRF9OT1JNQUwpOwotCi0Jc3Bpbl9sb2NrX2luaXQoJnByaXYtPmxvY2spOwotCi0JZXJyID0gaWVlZTgwMjExX3JlZ2lzdGVyX2h3KGRldik7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzIChydGw4MTgwKTogQ2Fubm90IHJlZ2lzdGVyIGRldmljZVxuIiwKLQkJICAgICAgIHBjaV9uYW1lKHBkZXYpKTsKLQkJZ290byBlcnJfaW91bm1hcDsKLQl9Ci0KLQl3aXBoeV9pbmZvKGRldi0+d2lwaHksICJod2FkZHIgJXBtLCAlcyArICVzXG4iLAotCQkgICBtYWNfYWRkciwgY2hpcF9uYW1lLCBwcml2LT5yZi0+bmFtZSk7Ci0KLQlyZXR1cm4gMDsKLQotIGVycl9pb3VubWFwOgotCWlvdW5tYXAocHJpdi0+bWFwKTsKLQotIGVycl9mcmVlX2RldjoKLQlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7Ci0JaWVlZTgwMjExX2ZyZWVfaHcoZGV2KTsKLQotIGVycl9mcmVlX3JlZzoKLQlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOwotCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCBfX2RldmV4aXQgcnRsODE4MF9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBydGw4MTgwX3ByaXYgKnByaXY7Ci0KLQlpZiAoIWRldikKLQkJcmV0dXJuOwotCi0JaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcoZGV2KTsKLQotCXByaXYgPSBkZXYtPnByaXY7Ci0KLQlwY2lfaW91bm1hcChwZGV2LCBwcml2LT5tYXApOwotCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7Ci0JcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwotCWllZWU4MDIxMV9mcmVlX2h3KGRldik7Ci19Ci0KLSNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyBpbnQgcnRsODE4MF9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCi17Ci0JcGNpX3NhdmVfc3RhdGUocGRldik7Ci0JcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBwY2lfY2hvb3NlX3N0YXRlKHBkZXYsIHN0YXRlKSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcnRsODE4MF9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCi17Ci0JcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDApOwotCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOwotCXJldHVybiAwOwotfQotCi0jZW5kaWYgLyogQ09ORklHX1BNICovCi0KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBydGw4MTgwX2RyaXZlciA9IHsKLQkubmFtZQkJPSBLQlVJTERfTU9ETkFNRSwKLQkuaWRfdGFibGUJPSBydGw4MTgwX3RhYmxlLAotCS5wcm9iZQkJPSBydGw4MTgwX3Byb2JlLAotCS5yZW1vdmUJCT0gX19kZXZleGl0X3AocnRsODE4MF9yZW1vdmUpLAotI2lmZGVmIENPTkZJR19QTQotCS5zdXNwZW5kCT0gcnRsODE4MF9zdXNwZW5kLAotCS5yZXN1bWUJCT0gcnRsODE4MF9yZXN1bWUsCi0jZW5kaWYgLyogQ09ORklHX1BNICovCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBydGw4MTgwX2luaXQodm9pZCkKLXsKLQlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmcnRsODE4MF9kcml2ZXIpOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgcnRsODE4MF9leGl0KHZvaWQpCi17Ci0JcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZydGw4MTgwX2RyaXZlcik7Ci19Ci0KLW1vZHVsZV9pbml0KHJ0bDgxODBfaW5pdCk7Ci1tb2R1bGVfZXhpdChydGw4MTgwX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTgwX2dyZjUxMDEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4MF9ncmY1MTAxLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjYWI5ZGYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTgwX2dyZjUxMDEuYworKysgL2Rldi9udWxsCkBAIC0xLDE5MCArMCwwIEBACi0KLS8qCi0gKiBSYWRpbyB0dW5pbmcgZm9yIEdDVCBHUkY1MTAxIG9uIFJUTDgxODAKLSAqCi0gKiBDb3B5cmlnaHQgMjAwNyBBbmRyZWEgTWVyZWxsbyA8YW5kcmVhbXJsQHRpc2NhbGkuaXQ+Ci0gKgotICogQ29kZSBmcm9tIHRoZSBCU0QgZHJpdmVyIGFuZCB0aGUgcnRsODE4MSBwcm9qZWN0IGhhdmUgYmVlbgotICogdmVyeSB1c2VmdWwgdG8gdW5kZXJzdGFuZCBjZXJ0YWluIHRoaW5ncwotICoKLSAqIEkgd2FudCB0byB0aGFua3MgdGhlIEF1dGhvcnMgb2Ygc3VjaCBwcm9qZWN0cyBhbmQgdGhlIE5kaXN3cmFwcGVyCi0gKiBwcm9qZWN0IEF1dGhvcnMuCi0gKgotICogQSBzcGVjaWFsIEJpZyBUaGFua3MgYWxzbyBpcyBmb3IgYWxsIHBlb3BsZSB3aG8gZG9uYXRlZCBtZSBjYXJkcywKLSAqIG1ha2luZyBwb3NzaWJsZSB0aGUgY3JlYXRpb24gb2YgdGhlIG9yaWdpbmFsIHJ0bDgxODAgZHJpdmVyCi0gKiBmcm9tIHdoaWNoIHRoaXMgY29kZSBpcyBkZXJpdmVkIQotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgotCi0jaW5jbHVkZSAicnRsODE4MC5oIgotI2luY2x1ZGUgInJ0bDgxODBfZ3JmNTEwMS5oIgotCi1zdGF0aWMgY29uc3QgaW50IGdyZjUxMDFfZW5jb2RlW10gPSB7Ci0JMHgwLCAweDgsIDB4NCwgMHhDLAotCTB4MiwgMHhBLCAweDYsIDB4RSwKLQkweDEsIDB4OSwgMHg1LCAweEQsCi0JMHgzLCAweEIsIDB4NywgMHhGCi19OwotCi1zdGF0aWMgdm9pZCB3cml0ZV9ncmY1MTAxKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgdTggYWRkciwgdTMyIGRhdGEpCi17Ci0Jc3RydWN0IHJ0bDgxODBfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKLQl1MzIgcGh5X2NvbmZpZzsKLQotCXBoeV9jb25maWcgPSAgZ3JmNTEwMV9lbmNvZGVbKGRhdGEgPj4gOCkgJiAweEZdOwotCXBoeV9jb25maWcgfD0gZ3JmNTEwMV9lbmNvZGVbKGRhdGEgPj4gNCkgJiAweEZdIDw8IDQ7Ci0JcGh5X2NvbmZpZyB8PSBncmY1MTAxX2VuY29kZVtkYXRhICYgMHhGXSA8PCA4OwotCXBoeV9jb25maWcgfD0gZ3JmNTEwMV9lbmNvZGVbKGFkZHIgPj4gMSkgJiAweEZdIDw8IDEyOwotCXBoeV9jb25maWcgfD0gKGFkZHIgJiAxKSA8PCAxNjsKLQlwaHlfY29uZmlnIHw9IGdyZjUxMDFfZW5jb2RlWyhkYXRhICYgMHhmMDAwKSA+PiAxMl0gPDwgMjQ7Ci0KLQkvKiBNQUMgd2lsbCBiYW5nIGJpdHMgdG8gdGhlIGNoaXAgKi8KLQlwaHlfY29uZmlnIHw9IDB4OTAwMDAwMDA7Ci0KLQlydGw4MTh4X2lvd3JpdGUzMihwcml2LAotCQkoX19sZTMyIF9faW9tZW0gKikgJnByaXYtPm1hcC0+UkZQaW5zT3V0cHV0LCBwaHlfY29uZmlnKTsKLQotCW1zbGVlcCgzKTsKLX0KLQotc3RhdGljIHZvaWQgZ3JmNTEwMV93cml0ZV9waHlfYW50ZW5uYShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHNob3J0IGNoYW4pCi17Ci0Jc3RydWN0IHJ0bDgxODBfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKLQl1OCBhbnQgPSBHUkY1MTAxX0FOVEVOTkE7Ci0KLQlpZiAocHJpdi0+cmZwYXJhbSAmIFJGX1BBUkFNX0FOVEJERUZBVUxUKQotCQlhbnQgfD0gQkJfQU5URU5OQV9COwotCi0JaWYgKGNoYW4gPT0gMTQpCi0JCWFudCB8PSBCQl9BTlRBVFRFTl9DSEFOMTQ7Ci0KLQlydGw4MTgwX3dyaXRlX3BoeShkZXYsIDB4MTAsIGFudCk7Ci19Ci0KLXN0YXRpYyB1OCBncmY1MTAxX3JmX2NhbGNfcnNzaSh1OCBhZ2MsIHU4IHNxKQotewotCWlmIChhZ2MgPiA2MCkKLQkJcmV0dXJuIDY1OwotCi0JLyogVE9ETyg/KToganVzdCByZXR1cm4gYWdjIChvciBhZ2MgKyA1KSB0byBhdm9pZCBtdWx0IC8gZGl2ICovCi0JcmV0dXJuIDY1ICogYWdjIC8gNjA7Ci19Ci0KLXN0YXRpYyB2b2lkIGdyZjUxMDFfcmZfc2V0X2NoYW5uZWwoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAotCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZikKLXsKLQlzdHJ1Y3QgcnRsODE4MF9wcml2ICpwcml2ID0gZGV2LT5wcml2OwotCWludCBjaGFubmVsID0gaWVlZTgwMjExX2ZyZXF1ZW5jeV90b19jaGFubmVsKGNvbmYtPmNoYW5uZWwtPmNlbnRlcl9mcmVxKTsKLQl1MzIgdHhwdyA9IHByaXYtPmNoYW5uZWxzW2NoYW5uZWwgLSAxXS5od192YWx1ZSAmIDB4RkY7Ci0JdTMyIGNoYW4gPSBjaGFubmVsIC0gMTsKLQotCS8qIHNldCBUWCBwb3dlciAqLwotCXdyaXRlX2dyZjUxMDEoZGV2LCAweDE1LCAweDApOwotCXdyaXRlX2dyZjUxMDEoZGV2LCAweDA2LCB0eHB3KTsKLQl3cml0ZV9ncmY1MTAxKGRldiwgMHgxNSwgMHgxMCk7Ci0Jd3JpdGVfZ3JmNTEwMShkZXYsIDB4MTUsIDB4MCk7Ci0KLQkvKiBzZXQgZnJlcXVlbmN5ICovCi0Jd3JpdGVfZ3JmNTEwMShkZXYsIDB4MDcsIDB4MCk7Ci0Jd3JpdGVfZ3JmNTEwMShkZXYsIDB4MEIsIGNoYW4pOwotCXdyaXRlX2dyZjUxMDEoZGV2LCAweDA3LCAweDEwMDApOwotCi0JZ3JmNTEwMV93cml0ZV9waHlfYW50ZW5uYShkZXYsIGNoYW5uZWwpOwotfQotCi1zdGF0aWMgdm9pZCBncmY1MTAxX3JmX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQotewotCXN0cnVjdCBydGw4MTgwX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7Ci0JdTMyIGFuYXBhcmFtOwotCi0JYW5hcGFyYW0gPSBwcml2LT5hbmFwYXJhbTsKLQlhbmFwYXJhbSAmPSAweDAwMGZmZmZmOwotCWFuYXBhcmFtIHw9IDB4M2Y5MDAwMDA7Ci0JcnRsODE4MF9zZXRfYW5hcGFyYW0ocHJpdiwgYW5hcGFyYW0pOwotCi0Jd3JpdGVfZ3JmNTEwMShkZXYsIDB4MDcsIDB4MCk7Ci0Jd3JpdGVfZ3JmNTEwMShkZXYsIDB4MWYsIDB4NDUpOwotCXdyaXRlX2dyZjUxMDEoZGV2LCAweDFmLCAweDUpOwotCXdyaXRlX2dyZjUxMDEoZGV2LCAweDAwLCAweDhlNCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGdyZjUxMDFfcmZfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCi17Ci0Jc3RydWN0IHJ0bDgxODBfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKLQotCXJ0bDgxODBfc2V0X2FuYXBhcmFtKHByaXYsIHByaXYtPmFuYXBhcmFtKTsKLQotCXdyaXRlX2dyZjUxMDEoZGV2LCAweDFmLCAweDApOwotCXdyaXRlX2dyZjUxMDEoZGV2LCAweDFmLCAweDApOwotCXdyaXRlX2dyZjUxMDEoZGV2LCAweDFmLCAweDQwKTsKLQl3cml0ZV9ncmY1MTAxKGRldiwgMHgxZiwgMHg2MCk7Ci0Jd3JpdGVfZ3JmNTEwMShkZXYsIDB4MWYsIDB4NjEpOwotCXdyaXRlX2dyZjUxMDEoZGV2LCAweDFmLCAweDYxKTsKLQl3cml0ZV9ncmY1MTAxKGRldiwgMHgwMCwgMHhhZTQpOwotCXdyaXRlX2dyZjUxMDEoZGV2LCAweDFmLCAweDEpOwotCXdyaXRlX2dyZjUxMDEoZGV2LCAweDFmLCAweDQxKTsKLQl3cml0ZV9ncmY1MTAxKGRldiwgMHgxZiwgMHg2MSk7Ci0KLQl3cml0ZV9ncmY1MTAxKGRldiwgMHgwMSwgMHgxYTIzKTsKLQl3cml0ZV9ncmY1MTAxKGRldiwgMHgwMiwgMHg0OTcxKTsKLQl3cml0ZV9ncmY1MTAxKGRldiwgMHgwMywgMHg0MWRlKTsKLQl3cml0ZV9ncmY1MTAxKGRldiwgMHgwNCwgMHgyZDgwKTsKLQl3cml0ZV9ncmY1MTAxKGRldiwgMHgwNSwgMHg2OGZmKTsJLyogMHg2MWZmIG9yaWdpbmFsIHZhbHVlICovCi0Jd3JpdGVfZ3JmNTEwMShkZXYsIDB4MDYsIDB4MCk7Ci0Jd3JpdGVfZ3JmNTEwMShkZXYsIDB4MDcsIDB4MCk7Ci0Jd3JpdGVfZ3JmNTEwMShkZXYsIDB4MDgsIDB4NzUzMyk7Ci0Jd3JpdGVfZ3JmNTEwMShkZXYsIDB4MDksIDB4YzQwMSk7Ci0Jd3JpdGVfZ3JmNTEwMShkZXYsIDB4MGEsIDB4MCk7Ci0Jd3JpdGVfZ3JmNTEwMShkZXYsIDB4MGMsIDB4MWM3KTsKLQl3cml0ZV9ncmY1MTAxKGRldiwgMHgwZCwgMHgyOWQzKTsKLQl3cml0ZV9ncmY1MTAxKGRldiwgMHgwZSwgMHgyZTgpOwotCXdyaXRlX2dyZjUxMDEoZGV2LCAweDEwLCAweDE5Mik7Ci0Jd3JpdGVfZ3JmNTEwMShkZXYsIDB4MTEsIDB4MjQ4KTsKLQl3cml0ZV9ncmY1MTAxKGRldiwgMHgxMiwgMHgwKTsKLQl3cml0ZV9ncmY1MTAxKGRldiwgMHgxMywgMHgyMGM0KTsKLQl3cml0ZV9ncmY1MTAxKGRldiwgMHgxNCwgMHhmNGZjKTsKLQl3cml0ZV9ncmY1MTAxKGRldiwgMHgxNSwgMHgwKTsKLQl3cml0ZV9ncmY1MTAxKGRldiwgMHgxNiwgMHgxNTAwKTsKLQotCXdyaXRlX2dyZjUxMDEoZGV2LCAweDA3LCAweDEwMDApOwotCi0JLyogYmFzZWJhbmQgY29uZmlndXJhdGlvbiAqLwotCXJ0bDgxODBfd3JpdGVfcGh5KGRldiwgMCwgMHhhOCk7Ci0JcnRsODE4MF93cml0ZV9waHkoZGV2LCAzLCAweDApOwotCXJ0bDgxODBfd3JpdGVfcGh5KGRldiwgNCwgMHhjMCk7Ci0JcnRsODE4MF93cml0ZV9waHkoZGV2LCA1LCAweDkwKTsKLQlydGw4MTgwX3dyaXRlX3BoeShkZXYsIDYsIDB4MWUpOwotCXJ0bDgxODBfd3JpdGVfcGh5KGRldiwgNywgMHg2NCk7Ci0KLQlncmY1MTAxX3dyaXRlX3BoeV9hbnRlbm5hKGRldiwgMSk7Ci0KLQlydGw4MTgwX3dyaXRlX3BoeShkZXYsIDB4MTEsIDB4ODgpOwotCi0JaWYgKHJ0bDgxOHhfaW9yZWFkOChwcml2LCAmcHJpdi0+bWFwLT5DT05GSUcyKSAmCi0JICAgIFJUTDgxOFhfQ09ORklHMl9BTlRFTk5BX0RJVikKLQkJcnRsODE4MF93cml0ZV9waHkoZGV2LCAweDEyLCAweGMwKTsgLyogZW5hYmxlIGFudCBkaXZlcnNpdHkgKi8KLQllbHNlCi0JCXJ0bDgxODBfd3JpdGVfcGh5KGRldiwgMHgxMiwgMHg0MCk7IC8qIGRpc2FibGUgYW50IGRpdmVyc2l0eSAqLwotCi0JcnRsODE4MF93cml0ZV9waHkoZGV2LCAweDEzLCAweDkwIHwgcHJpdi0+Y3N0aHJlc2hvbGQpOwotCi0JcnRsODE4MF93cml0ZV9waHkoZGV2LCAweDE5LCAweDApOwotCXJ0bDgxODBfd3JpdGVfcGh5KGRldiwgMHgxYSwgMHhhMCk7Ci0JcnRsODE4MF93cml0ZV9waHkoZGV2LCAweDFiLCAweDQ0KTsKLX0KLQotY29uc3Qgc3RydWN0IHJ0bDgxOHhfcmZfb3BzIGdyZjUxMDFfcmZfb3BzID0gewotCS5uYW1lCQk9ICJHQ1QiLAotCS5pbml0CQk9IGdyZjUxMDFfcmZfaW5pdCwKLQkuc3RvcAkJPSBncmY1MTAxX3JmX3N0b3AsCi0JLnNldF9jaGFuCT0gZ3JmNTEwMV9yZl9zZXRfY2hhbm5lbCwKLQkuY2FsY19yc3NpCT0gZ3JmNTEwMV9yZl9jYWxjX3Jzc2ksCi19OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTgwX21heDI4MjAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4MF9tYXgyODIwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2YzQ2NTUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTgwX21heDI4MjAuYworKysgL2Rldi9udWxsCkBAIC0xLDE2OSArMCwwIEBACi0vKgotICogUmFkaW8gdHVuaW5nIGZvciBNYXhpbSBtYXgyODIwIG9uIFJUTDgxODAKLSAqCi0gKiBDb3B5cmlnaHQgMjAwNyBBbmRyZWEgTWVyZWxsbyA8YW5kcmVhbXJsQHRpc2NhbGkuaXQ+Ci0gKgotICogQ29kZSBmcm9tIHRoZSBCU0QgZHJpdmVyIGFuZCB0aGUgcnRsODE4MSBwcm9qZWN0IGhhdmUgYmVlbgotICogdmVyeSB1c2VmdWwgdG8gdW5kZXJzdGFuZCBjZXJ0YWluIHRoaW5ncwotICoKLSAqIEkgd2FudCB0byB0aGFua3MgdGhlIEF1dGhvcnMgb2Ygc3VjaCBwcm9qZWN0cyBhbmQgdGhlIE5kaXN3cmFwcGVyCi0gKiBwcm9qZWN0IEF1dGhvcnMuCi0gKgotICogQSBzcGVjaWFsIEJpZyBUaGFua3MgYWxzbyBpcyBmb3IgYWxsIHBlb3BsZSB3aG8gZG9uYXRlZCBtZSBjYXJkcywKLSAqIG1ha2luZyBwb3NzaWJsZSB0aGUgY3JlYXRpb24gb2YgdGhlIG9yaWdpbmFsIHJ0bDgxODAgZHJpdmVyCi0gKiBmcm9tIHdoaWNoIHRoaXMgY29kZSBpcyBkZXJpdmVkIQotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgotCi0jaW5jbHVkZSAicnRsODE4MC5oIgotI2luY2x1ZGUgInJ0bDgxODBfbWF4MjgyMC5oIgotCi1zdGF0aWMgY29uc3QgdTMyIG1heDI4MjBfY2hhbltdID0gewotCTEyLCAvKiBDSCAxICovCi0JMTcsCi0JMjIsCi0JMjcsCi0JMzIsCi0JMzcsCi0JNDIsCi0JNDcsCi0JNTIsCi0JNTcsCi0JNjIsCi0JNjcsCi0JNzIsCi0JODQsIC8qIENIIDE0ICovCi19OwotCi1zdGF0aWMgdm9pZCB3cml0ZV9tYXgyODIwKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgdTggYWRkciwgdTMyIGRhdGEpCi17Ci0Jc3RydWN0IHJ0bDgxODBfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKLQl1MzIgcGh5X2NvbmZpZzsKLQotCXBoeV9jb25maWcgPSAweDkwICsgKGRhdGEgJiAweGYpOwotCXBoeV9jb25maWcgPDw9IDE2OwotCXBoeV9jb25maWcgKz0gYWRkcjsKLQlwaHlfY29uZmlnIDw8PSA4OwotCXBoeV9jb25maWcgKz0gKGRhdGEgPj4gNCkgJiAweGZmOwotCi0JcnRsODE4eF9pb3dyaXRlMzIocHJpdiwKLQkJKF9fbGUzMiBfX2lvbWVtICopICZwcml2LT5tYXAtPlJGUGluc091dHB1dCwgcGh5X2NvbmZpZyk7Ci0KLQltc2xlZXAoMSk7Ci19Ci0KLXN0YXRpYyB2b2lkIG1heDI4MjBfd3JpdGVfcGh5X2FudGVubmEoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBzaG9ydCBjaGFuKQotewotCXN0cnVjdCBydGw4MTgwX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7Ci0JdTggYW50OwotCi0JYW50ID0gTUFYSU1fQU5URU5OQTsKLQlpZiAocHJpdi0+cmZwYXJhbSAmIFJGX1BBUkFNX0FOVEJERUZBVUxUKQotCQlhbnQgfD0gQkJfQU5URU5OQV9COwotCWlmIChjaGFuID09IDE0KQotCQlhbnQgfD0gQkJfQU5UQVRURU5fQ0hBTjE0OwotCi0JcnRsODE4MF93cml0ZV9waHkoZGV2LCAweDEwLCBhbnQpOwotfQotCi1zdGF0aWMgdTggbWF4MjgyMF9yZl9jYWxjX3Jzc2kodTggYWdjLCB1OCBzcSkKLXsKLQlib29sIG9kZDsKLQotCW9kZCA9ICEhKGFnYyAmIDEpOwotCi0JYWdjID4+PSAxOwotCWlmIChvZGQpCi0JCWFnYyArPSA3NjsKLQllbHNlCi0JCWFnYyArPSA2NjsKLQotCS8qIFRPRE86IGNoYW5nZSBhZGRlbmRzIGFib3ZlIHRvIGF2b2lkIG11bHQgLyBkaXYgYmVsb3cgKi8KLQlyZXR1cm4gNjUgKiBhZ2MgLyAxMDA7Ci19Ci0KLXN0YXRpYyB2b2lkIG1heDI4MjBfcmZfc2V0X2NoYW5uZWwoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAotCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZikKLXsKLQlzdHJ1Y3QgcnRsODE4MF9wcml2ICpwcml2ID0gZGV2LT5wcml2OwotCWludCBjaGFubmVsID0gY29uZiA/Ci0JCWllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbChjb25mLT5jaGFubmVsLT5jZW50ZXJfZnJlcSkgOiAxOwotCXVuc2lnbmVkIGludCBjaGFuX2lkeCA9IGNoYW5uZWwgLSAxOwotCXUzMiB0eHB3ID0gcHJpdi0+Y2hhbm5lbHNbY2hhbl9pZHhdLmh3X3ZhbHVlICYgMHhGRjsKLQl1MzIgY2hhbiA9IG1heDI4MjBfY2hhbltjaGFuX2lkeF07Ci0KLQkvKiBXaGlsZSBwaGlsaXBzIFNBMjQwMCBkcml2ZSB0aGUgUEEgYmlhcyBmcm9tCi0JICogc2EyNDAwLCBmb3IgTUFYSU0gd2UgZG8gdGhpcyBkaXJlY3RseSBmcm9tIEJCICovCi0JcnRsODE4MF93cml0ZV9waHkoZGV2LCAzLCB0eHB3KTsKLQotCW1heDI4MjBfd3JpdGVfcGh5X2FudGVubmEoZGV2LCBjaGFubmVsKTsKLQl3cml0ZV9tYXgyODIwKGRldiwgMywgY2hhbik7Ci19Ci0KLXN0YXRpYyB2b2lkIG1heDI4MjBfcmZfc3RvcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCi17Ci0JcnRsODE4MF93cml0ZV9waHkoZGV2LCAzLCAweDgpOwotCXdyaXRlX21heDI4MjAoZGV2LCAxLCAwKTsKLX0KLQotCi1zdGF0aWMgdm9pZCBtYXgyODIwX3JmX2luaXQoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQotewotCXN0cnVjdCBydGw4MTgwX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7Ci0KLQkvKiBNQVhJTSBmcm9tIG5ldGJzZCBkcml2ZXIgKi8KLQl3cml0ZV9tYXgyODIwKGRldiwgMCwgMHgwMDcpOyAvKiB0ZXN0IG1vZGUgYXMgaW5kaWNhdGVkIGluIGRhdGFzaGVldCAqLwotCXdyaXRlX21heDI4MjAoZGV2LCAxLCAweDAxZSk7IC8qIGVuYWJsZSByZWdpc3RlciAqLwotCXdyaXRlX21heDI4MjAoZGV2LCAyLCAweDAwMSk7IC8qIHN5bnQgcmVnaXN0ZXIgKi8KLQotCW1heDI4MjBfcmZfc2V0X2NoYW5uZWwoZGV2LCBOVUxMKTsKLQotCXdyaXRlX21heDI4MjAoZGV2LCA0LCAweDMxMyk7IC8qIHJ4IHJlZ2lzdGVyICovCi0KLQkvKiBQQSBpcyBkcml2ZW4gZGlyZWN0bHkgYnkgdGhlIEJCLCB3ZSBrZWVwIHRoZSBNQVhJTSBiaWFzCi0JICogYXQgdGhlIGhpZ2hlc3QgdmFsdWUgaW4gY2FzZSB0aGF0IHNldHRpbmcgaXQgdG8gbG93ZXIKLQkgKiB2YWx1ZXMgbWF5IGludHJvZHVjZSBzb21lIGZ1cnRoZXIgYXR0ZW51YXRpb24gc29tZXdoZXJlLi4KLQkgKi8KLQl3cml0ZV9tYXgyODIwKGRldiwgNSwgMHgwMGYpOwotCi0JLyogYmFzZWJhbmQgY29uZmlndXJhdGlvbiAqLwotCXJ0bDgxODBfd3JpdGVfcGh5KGRldiwgMCwgMHg4OCk7IC8qIHN5czEgICAgICAgKi8KLQlydGw4MTgwX3dyaXRlX3BoeShkZXYsIDMsIDB4MDgpOyAvKiB0eGFnYyAgICAgICovCi0JcnRsODE4MF93cml0ZV9waHkoZGV2LCA0LCAweGY4KTsgLyogbG5hZGV0ICAgICAqLwotCXJ0bDgxODBfd3JpdGVfcGh5KGRldiwgNSwgMHg5MCk7IC8qIGlmYWdjaW5pdCAgKi8KLQlydGw4MTgwX3dyaXRlX3BoeShkZXYsIDYsIDB4MWEpOyAvKiBpZmFnY2xpbWl0ICovCi0JcnRsODE4MF93cml0ZV9waHkoZGV2LCA3LCAweDY0KTsgLyogaWZhZ2NkZXQgICAqLwotCi0JbWF4MjgyMF93cml0ZV9waHlfYW50ZW5uYShkZXYsIDEpOwotCi0JcnRsODE4MF93cml0ZV9waHkoZGV2LCAweDExLCAweDg4KTsgLyogdHJsICovCi0KLQlpZiAocnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPkNPTkZJRzIpICYKLQkgICAgUlRMODE4WF9DT05GSUcyX0FOVEVOTkFfRElWKQotCQlydGw4MTgwX3dyaXRlX3BoeShkZXYsIDB4MTIsIDB4YzcpOwotCWVsc2UKLQkJcnRsODE4MF93cml0ZV9waHkoZGV2LCAweDEyLCAweDQ3KTsKLQotCXJ0bDgxODBfd3JpdGVfcGh5KGRldiwgMHgxMywgMHg5Yik7Ci0KLQlydGw4MTgwX3dyaXRlX3BoeShkZXYsIDB4MTksIDB4MCk7ICAvKiBDSEVTVExJTSAqLwotCXJ0bDgxODBfd3JpdGVfcGh5KGRldiwgMHgxYSwgMHg5Zik7IC8qIENIU1FMSU0gICovCi0KLQltYXgyODIwX3JmX3NldF9jaGFubmVsKGRldiwgTlVMTCk7Ci19Ci0KLWNvbnN0IHN0cnVjdCBydGw4MTh4X3JmX29wcyBtYXgyODIwX3JmX29wcyA9IHsKLQkubmFtZQkJPSAiTWF4aW0iLAotCS5pbml0CQk9IG1heDI4MjBfcmZfaW5pdCwKLQkuc3RvcAkJPSBtYXgyODIwX3JmX3N0b3AsCi0JLnNldF9jaGFuCT0gbWF4MjgyMF9yZl9zZXRfY2hhbm5lbCwKLQkuY2FsY19yc3NpCT0gbWF4MjgyMF9yZl9jYWxjX3Jzc2ksCi19OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTgwX3J0bDgyMjUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4MF9ydGw4MjI1LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5ZTRkNDcuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTgwX3J0bDgyMjUuYworKysgL2Rldi9udWxsCkBAIC0xLDc5MSArMCwwIEBACi0KLS8qCi0gKiBSYWRpbyB0dW5pbmcgZm9yIFJUTDgyMjUgb24gUlRMODE4MAotICoKLSAqIENvcHlyaWdodCAyMDA3IE1pY2hhZWwgV3UgPGZsYW1pbmdpY2VAc291cm1pbGsubmV0PgotICogQ29weXJpZ2h0IDIwMDcgQW5kcmVhIE1lcmVsbG8gPGFuZHJlYW1ybEB0aXNjYWxpLml0PgotICoKLSAqIEJhc2VkIG9uIHRoZSByODE4MCBkcml2ZXIsIHdoaWNoIGlzOgotICogQ29weXJpZ2h0IDIwMDUgQW5kcmVhIE1lcmVsbG8gPGFuZHJlYW1ybEB0aXNjYWxpLml0PiwgZXQgYWwuCi0gKgotICogVGhhbmtzIHRvIFJlYWx0ZWsgZm9yIHRoZWlyIHN1cHBvcnQhCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+Ci0KLSNpbmNsdWRlICJydGw4MTgwLmgiCi0jaW5jbHVkZSAicnRsODE4MF9ydGw4MjI1LmgiCi0KLXN0YXRpYyB2b2lkIHJ0bDgyMjVfd3JpdGUoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCB1OCBhZGRyLCB1MTYgZGF0YSkKLXsKLQlzdHJ1Y3QgcnRsODE4MF9wcml2ICpwcml2ID0gZGV2LT5wcml2OwotCXUxNiByZWc4MCwgcmVnODQsIHJlZzgyOwotCXUzMiBiYW5nZGF0YTsKLQlpbnQgaTsKLQotCWJhbmdkYXRhID0gKGRhdGEgPDwgNCkgfCAoYWRkciAmIDB4Zik7Ci0KLQlyZWc4MCA9IHJ0bDgxOHhfaW9yZWFkMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zT3V0cHV0KSAmIDB4ZmZmMzsKLQlyZWc4MiA9IHJ0bDgxOHhfaW9yZWFkMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zRW5hYmxlKTsKLQotCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc0VuYWJsZSwgcmVnODIgfCAweDcpOwotCi0JcmVnODQgPSBydGw4MTh4X2lvcmVhZDE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc1NlbGVjdCk7Ci0JcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zU2VsZWN0LCByZWc4NCB8IDB4NyB8IDB4NDAwKTsKLQlydGw4MTh4X2lvcmVhZDgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCk7Ci0JdWRlbGF5KDEwKTsKLQotCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc091dHB1dCwgcmVnODAgfCAoMSA8PCAyKSk7Ci0JcnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQpOwotCXVkZWxheSgyKTsKLQlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNPdXRwdXQsIHJlZzgwKTsKLQlydGw4MTh4X2lvcmVhZDgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCk7Ci0JdWRlbGF5KDEwKTsKLQotCWZvciAoaSA9IDE1OyBpID49IDA7IGktLSkgewotCQl1MTYgcmVnID0gcmVnODA7Ci0KLQkJaWYgKGJhbmdkYXRhICYgKDEgPDwgaSkpCi0JCQlyZWcgfD0gMTsKLQotCQlpZiAoaSAmIDEpCi0JCQlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNPdXRwdXQsIHJlZyk7Ci0KLQkJcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zT3V0cHV0LCByZWcgfCAoMSA8PCAxKSk7Ci0JCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc091dHB1dCwgcmVnIHwgKDEgPDwgMSkpOwotCi0JCWlmICghKGkgJiAxKSkKLQkJCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc091dHB1dCwgcmVnKTsKLQl9Ci0KLQlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNPdXRwdXQsIHJlZzgwIHwgKDEgPDwgMikpOwotCXJ0bDgxOHhfaW9yZWFkOChwcml2LCAmcHJpdi0+bWFwLT5FRVBST01fQ01EKTsKLQl1ZGVsYXkoMTApOwotCi0JcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zT3V0cHV0LCByZWc4MCB8ICgxIDw8IDIpKTsKLQlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNTZWxlY3QsIHJlZzg0IHwgMHg0MDApOwotCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc0VuYWJsZSwgMHgxRkZGKTsKLX0KLQotc3RhdGljIHUxNiBydGw4MjI1X3JlYWQoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCB1OCBhZGRyKQotewotCXN0cnVjdCBydGw4MTgwX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7Ci0JdTE2IHJlZzgwLCByZWc4MiwgcmVnODQsIG91dDsKLQlpbnQgaTsKLQotCXJlZzgwID0gcnRsODE4eF9pb3JlYWQxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNPdXRwdXQpOwotCXJlZzgyID0gcnRsODE4eF9pb3JlYWQxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNFbmFibGUpOwotCXJlZzg0ID0gcnRsODE4eF9pb3JlYWQxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNTZWxlY3QpIHwgMHg0MDA7Ci0KLQlyZWc4MCAmPSB+MHhGOwotCi0JcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zRW5hYmxlLCByZWc4MiB8IDB4MDAwRik7Ci0JcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zU2VsZWN0LCByZWc4NCB8IDB4MDAwRik7Ci0KLQlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNPdXRwdXQsIHJlZzgwIHwgKDEgPDwgMikpOwotCXJ0bDgxOHhfaW9yZWFkOChwcml2LCAmcHJpdi0+bWFwLT5FRVBST01fQ01EKTsKLQl1ZGVsYXkoNCk7Ci0JcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zT3V0cHV0LCByZWc4MCk7Ci0JcnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQpOwotCXVkZWxheSg1KTsKLQotCWZvciAoaSA9IDQ7IGkgPj0gMDsgaS0tKSB7Ci0JCXUxNiByZWcgPSByZWc4MCB8ICgoYWRkciA+PiBpKSAmIDEpOwotCi0JCWlmICghKGkgJiAxKSkgewotCQkJcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zT3V0cHV0LCByZWcpOwotCQkJcnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQpOwotCQkJdWRlbGF5KDEpOwotCQl9Ci0KLQkJcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zT3V0cHV0LAotCQkJCSAgcmVnIHwgKDEgPDwgMSkpOwotCQlydGw4MTh4X2lvcmVhZDgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCk7Ci0JCXVkZWxheSgyKTsKLQkJcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zT3V0cHV0LAotCQkJCSAgcmVnIHwgKDEgPDwgMSkpOwotCQlydGw4MTh4X2lvcmVhZDgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCk7Ci0JCXVkZWxheSgyKTsKLQotCQlpZiAoaSAmIDEpIHsKLQkJCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc091dHB1dCwgcmVnKTsKLQkJCXJ0bDgxOHhfaW9yZWFkOChwcml2LCAmcHJpdi0+bWFwLT5FRVBST01fQ01EKTsKLQkJCXVkZWxheSgxKTsKLQkJfQotCX0KLQotCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc0VuYWJsZSwgMHgwMDBFKTsKLQlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNTZWxlY3QsIDB4MDQwRSk7Ci0JcnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQpOwotCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc091dHB1dCwKLQkJCSAgcmVnODAgfCAoMSA8PCAzKSB8ICgxIDw8IDEpKTsKLQlydGw4MTh4X2lvcmVhZDgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCk7Ci0JdWRlbGF5KDIpOwotCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc091dHB1dCwKLQkJCSAgcmVnODAgfCAoMSA8PCAzKSk7Ci0JcnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQpOwotCXVkZWxheSgyKTsKLQlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNPdXRwdXQsCi0JCQkgIHJlZzgwIHwgKDEgPDwgMykpOwotCXJ0bDgxOHhfaW9yZWFkOChwcml2LCAmcHJpdi0+bWFwLT5FRVBST01fQ01EKTsKLQl1ZGVsYXkoMik7Ci0KLQlvdXQgPSAwOwotCWZvciAoaSA9IDExOyBpID49IDA7IGktLSkgewotCQlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNPdXRwdXQsCi0JCQkJICByZWc4MCB8ICgxIDw8IDMpKTsKLQkJcnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQpOwotCQl1ZGVsYXkoMSk7Ci0JCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc091dHB1dCwKLQkJCQkgIHJlZzgwIHwgKDEgPDwgMykgfCAoMSA8PCAxKSk7Ci0JCXJ0bDgxOHhfaW9yZWFkOChwcml2LCAmcHJpdi0+bWFwLT5FRVBST01fQ01EKTsKLQkJdWRlbGF5KDIpOwotCQlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNPdXRwdXQsCi0JCQkJICByZWc4MCB8ICgxIDw8IDMpIHwgKDEgPDwgMSkpOwotCQlydGw4MTh4X2lvcmVhZDgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCk7Ci0JCXVkZWxheSgyKTsKLQkJcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zT3V0cHV0LAotCQkJCSAgcmVnODAgfCAoMSA8PCAzKSB8ICgxIDw8IDEpKTsKLQkJcnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQpOwotCQl1ZGVsYXkoMik7Ci0KLQkJaWYgKHJ0bDgxOHhfaW9yZWFkMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zSW5wdXQpICYgKDEgPDwgMSkpCi0JCQlvdXQgfD0gMSA8PCBpOwotCi0JCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc091dHB1dCwKLQkJCQkgIHJlZzgwIHwgKDEgPDwgMykpOwotCQlydGw4MTh4X2lvcmVhZDgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCk7Ci0JCXVkZWxheSgyKTsKLQl9Ci0KLQlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNPdXRwdXQsCi0JCQkgIHJlZzgwIHwgKDEgPDwgMykgfCAoMSA8PCAyKSk7Ci0JcnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQpOwotCXVkZWxheSgyKTsKLQotCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc0VuYWJsZSwgcmVnODIpOwotCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc1NlbGVjdCwgcmVnODQpOwotCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc091dHB1dCwgMHgwM0EwKTsKLQotCXJldHVybiBvdXQ7Ci19Ci0KLXN0YXRpYyBjb25zdCB1MTYgcnRsODIyNWJjZF9yeGdhaW5bXSA9IHsKLQkweDA0MDAsIDB4MDQwMSwgMHgwNDAyLCAweDA0MDMsIDB4MDQwNCwgMHgwNDA1LCAweDA0MDgsIDB4MDQwOSwKLQkweDA0MGEsIDB4MDQwYiwgMHgwNTAyLCAweDA1MDMsIDB4MDUwNCwgMHgwNTA1LCAweDA1NDAsIDB4MDU0MSwKLQkweDA1NDIsIDB4MDU0MywgMHgwNTQ0LCAweDA1NDUsIDB4MDU4MCwgMHgwNTgxLCAweDA1ODIsIDB4MDU4MywKLQkweDA1ODQsIDB4MDU4NSwgMHgwNTg4LCAweDA1ODksIDB4MDU4YSwgMHgwNThiLCAweDA2NDMsIDB4MDY0NCwKLQkweDA2NDUsIDB4MDY4MCwgMHgwNjgxLCAweDA2ODIsIDB4MDY4MywgMHgwNjg0LCAweDA2ODUsIDB4MDY4OCwKLQkweDA2ODksIDB4MDY4YSwgMHgwNjhiLCAweDA2OGMsIDB4MDc0MiwgMHgwNzQzLCAweDA3NDQsIDB4MDc0NSwKLQkweDA3ODAsIDB4MDc4MSwgMHgwNzgyLCAweDA3ODMsIDB4MDc4NCwgMHgwNzg1LCAweDA3ODgsIDB4MDc4OSwKLQkweDA3OGEsIDB4MDc4YiwgMHgwNzhjLCAweDA3OGQsIDB4MDc5MCwgMHgwNzkxLCAweDA3OTIsIDB4MDc5MywKLQkweDA3OTQsIDB4MDc5NSwgMHgwNzk4LCAweDA3OTksIDB4MDc5YSwgMHgwNzliLCAweDA3OWMsIDB4MDc5ZCwKLQkweDA3YTAsIDB4MDdhMSwgMHgwN2EyLCAweDA3YTMsIDB4MDdhNCwgMHgwN2E1LCAweDA3YTgsIDB4MDdhOSwKLQkweDA3YWEsIDB4MDdhYiwgMHgwN2FjLCAweDA3YWQsIDB4MDdiMCwgMHgwN2IxLCAweDA3YjIsIDB4MDdiMywKLQkweDA3YjQsIDB4MDdiNSwgMHgwN2I4LCAweDA3YjksIDB4MDdiYSwgMHgwN2JiLCAweDA3YmIKLX07Ci0KLXN0YXRpYyBjb25zdCB1OCBydGw4MjI1X2FnY1tdID0gewotCTB4OWUsIDB4OWUsIDB4OWUsIDB4OWUsIDB4OWUsIDB4OWUsIDB4OWUsIDB4OWUsCi0JMHg5ZCwgMHg5YywgMHg5YiwgMHg5YSwgMHg5OSwgMHg5OCwgMHg5NywgMHg5NiwKLQkweDk1LCAweDk0LCAweDkzLCAweDkyLCAweDkxLCAweDkwLCAweDhmLCAweDhlLAotCTB4OGQsIDB4OGMsIDB4OGIsIDB4OGEsIDB4ODksIDB4ODgsIDB4ODcsIDB4ODYsCi0JMHg4NSwgMHg4NCwgMHg4MywgMHg4MiwgMHg4MSwgMHg4MCwgMHgzZiwgMHgzZSwKLQkweDNkLCAweDNjLCAweDNiLCAweDNhLCAweDM5LCAweDM4LCAweDM3LCAweDM2LAotCTB4MzUsIDB4MzQsIDB4MzMsIDB4MzIsIDB4MzEsIDB4MzAsIDB4MmYsIDB4MmUsCi0JMHgyZCwgMHgyYywgMHgyYiwgMHgyYSwgMHgyOSwgMHgyOCwgMHgyNywgMHgyNiwKLQkweDI1LCAweDI0LCAweDIzLCAweDIyLCAweDIxLCAweDIwLCAweDFmLCAweDFlLAotCTB4MWQsIDB4MWMsIDB4MWIsIDB4MWEsIDB4MTksIDB4MTgsIDB4MTcsIDB4MTYsCi0JMHgxNSwgMHgxNCwgMHgxMywgMHgxMiwgMHgxMSwgMHgxMCwgMHgwZiwgMHgwZSwKLQkweDBkLCAweDBjLCAweDBiLCAweDBhLCAweDA5LCAweDA4LCAweDA3LCAweDA2LAotCTB4MDUsIDB4MDQsIDB4MDMsIDB4MDIsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsCi0JMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwKLQkweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLAotCTB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEKLX07Ci0KLXN0YXRpYyBjb25zdCB1OCBydGw4MjI1X2dhaW5bXSA9IHsKLQkweDIzLCAweDg4LCAweDdjLCAweGE1LCAvKiAtODJkYm0gKi8KLQkweDIzLCAweDg4LCAweDdjLCAweGI1LCAvKiAtODJkYm0gKi8KLQkweDIzLCAweDg4LCAweDdjLCAweGM1LCAvKiAtODJkYm0gKi8KLQkweDMzLCAweDgwLCAweDc5LCAweGM1LCAvKiAtNzhkYm0gKi8KLQkweDQzLCAweDc4LCAweDc2LCAweGM1LCAvKiAtNzRkYm0gKi8KLQkweDUzLCAweDYwLCAweDczLCAweGM1LCAvKiAtNzBkYm0gKi8KLQkweDYzLCAweDU4LCAweDcwLCAweGM1LCAvKiAtNjZkYm0gKi8KLX07Ci0KLXN0YXRpYyBjb25zdCB1OCBydGw4MjI1X3RocmVzaG9sZFtdID0gewotCTB4OGQsIDB4OGQsIDB4OGQsIDB4OGQsIDB4OWQsIDB4YWQsIDB4YmQKLX07Ci0KLXN0YXRpYyBjb25zdCB1OCBydGw4MjI1X3R4X2dhaW5fY2NrX29mZG1bXSA9IHsKLQkweDAyLCAweDA2LCAweDBlLCAweDFlLCAweDNlLCAweDdlCi19OwotCi1zdGF0aWMgY29uc3QgdTggcnRsODIyNV90eF9wb3dlcl9jY2tbXSA9IHsKLQkweDE4LCAweDE3LCAweDE1LCAweDExLCAweDBjLCAweDA4LCAweDA0LCAweDAyLAotCTB4MWIsIDB4MWEsIDB4MTcsIDB4MTMsIDB4MGUsIDB4MDksIDB4MDQsIDB4MDIsCi0JMHgxZiwgMHgxZSwgMHgxYSwgMHgxNSwgMHgxMCwgMHgwYSwgMHgwNSwgMHgwMiwKLQkweDIyLCAweDIxLCAweDFkLCAweDE4LCAweDExLCAweDBiLCAweDA2LCAweDAyLAotCTB4MjYsIDB4MjUsIDB4MjEsIDB4MWIsIDB4MTQsIDB4MGQsIDB4MDYsIDB4MDMsCi0JMHgyYiwgMHgyYSwgMHgyNSwgMHgxZSwgMHgxNiwgMHgwZSwgMHgwNywgMHgwMwotfTsKLQotc3RhdGljIGNvbnN0IHU4IHJ0bDgyMjVfdHhfcG93ZXJfY2NrX2NoMTRbXSA9IHsKLQkweDE4LCAweDE3LCAweDE1LCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MWIsIDB4MWEsIDB4MTcsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgxZiwgMHgxZSwgMHgxYSwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDIyLCAweDIxLCAweDFkLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MjYsIDB4MjUsIDB4MjEsIDB4MTMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgyYiwgMHgyYSwgMHgyNSwgMHgxNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMAotfTsKLQotc3RhdGljIGNvbnN0IHU4IHJ0bDgyMjVfdHhfcG93ZXJfb2ZkbVtdID0gewotCTB4ODAsIDB4OTAsIDB4YTIsIDB4YjUsIDB4Y2IsIDB4ZTQKLX07Ci0KLXN0YXRpYyBjb25zdCB1MzIgcnRsODIyNV9jaGFuW10gPSB7Ci0JMHgwODVjLCAweDA4ZGMsIDB4MDk1YywgMHgwOWRjLCAweDBhNWMsIDB4MGFkYywgMHgwYjVjLAotCTB4MGJkYywgMHgwYzVjLCAweDBjZGMsIDB4MGQ1YywgMHgwZGRjLCAweDBlNWMsIDB4MGY3MgotfTsKLQotc3RhdGljIHZvaWQgcnRsODIyNV9yZl9zZXRfdHhfcG93ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBpbnQgY2hhbm5lbCkKLXsKLQlzdHJ1Y3QgcnRsODE4MF9wcml2ICpwcml2ID0gZGV2LT5wcml2OwotCXU4IGNja19wb3dlciwgb2ZkbV9wb3dlcjsKLQljb25zdCB1OCAqdG1wOwotCXUzMiByZWc7Ci0JaW50IGk7Ci0KLQljY2tfcG93ZXIgPSBwcml2LT5jaGFubmVsc1tjaGFubmVsIC0gMV0uaHdfdmFsdWUgJiAweEZGOwotCW9mZG1fcG93ZXIgPSBwcml2LT5jaGFubmVsc1tjaGFubmVsIC0gMV0uaHdfdmFsdWUgPj4gODsKLQotCWNja19wb3dlciA9IG1pbihjY2tfcG93ZXIsICh1OCkzNSk7Ci0Jb2ZkbV9wb3dlciA9IG1pbihvZmRtX3Bvd2VyLCAodTgpMzUpOwotCi0JcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5UWF9HQUlOX0NDSywKLQkJCSBydGw4MjI1X3R4X2dhaW5fY2NrX29mZG1bY2NrX3Bvd2VyIC8gNl0gPj4gMSk7Ci0KLQlpZiAoY2hhbm5lbCA9PSAxNCkKLQkJdG1wID0gJnJ0bDgyMjVfdHhfcG93ZXJfY2NrX2NoMTRbKGNja19wb3dlciAlIDYpICogOF07Ci0JZWxzZQotCQl0bXAgPSAmcnRsODIyNV90eF9wb3dlcl9jY2tbKGNja19wb3dlciAlIDYpICogOF07Ci0KLQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQotCQlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDQ0ICsgaSwgKnRtcCsrKTsKLQotCW1zbGVlcCgxKTsgLyogRklYTUU6IG9wdGlvbmFsPyAqLwotCi0JLyogYW5hcGFyYW0yIG9uICovCi0JcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5FRVBST01fQ01ELCBSVEw4MThYX0VFUFJPTV9DTURfQ09ORklHKTsKLQlyZWcgPSBydGw4MTh4X2lvcmVhZDgocHJpdiwgJnByaXYtPm1hcC0+Q09ORklHMyk7Ci0JcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5DT05GSUczLCByZWcgfCBSVEw4MThYX0NPTkZJRzNfQU5BUEFSQU1fV1JJVEUpOwotCXJ0bDgxOHhfaW93cml0ZTMyKHByaXYsICZwcml2LT5tYXAtPkFOQVBBUkFNMiwgUlRMODIyNV9BTkFQQVJBTTJfT04pOwotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+Q09ORklHMywgcmVnICYgflJUTDgxOFhfQ09ORklHM19BTkFQQVJBTV9XUklURSk7Ci0JcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5FRVBST01fQ01ELCBSVEw4MThYX0VFUFJPTV9DTURfTk9STUFMKTsKLQotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+VFhfR0FJTl9PRkRNLAotCQkJIHJ0bDgyMjVfdHhfZ2Fpbl9jY2tfb2ZkbVtvZmRtX3Bvd2VyLzZdID4+IDEpOwotCi0JdG1wID0gJnJ0bDgyMjVfdHhfcG93ZXJfb2ZkbVtvZmRtX3Bvd2VyICUgNl07Ci0KLQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgNSwgKnRtcCk7Ci0JcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDcsICp0bXApOwotCi0JbXNsZWVwKDEpOwotfQotCi1zdGF0aWMgdm9pZCBydGw4MjI1X3JmX2luaXQoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQotewotCXN0cnVjdCBydGw4MTgwX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7Ci0JaW50IGk7Ci0KLQlydGw4MTgwX3NldF9hbmFwYXJhbShwcml2LCBSVEw4MjI1X0FOQVBBUkFNX09OKTsKLQotCS8qIGhvc3RfcGNpX2luaXQgKi8KLQlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNPdXRwdXQsIDB4MDQ4MCk7Ci0JcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zRW5hYmxlLCAweDFGRkYpOwotCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc1NlbGVjdCwgMHgwNDg4KTsKLQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkdQX0VOQUJMRSwgMCk7Ci0JcnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQpOwotCW1zbGVlcCgyMDApOwkvKiBGSVhNRTogZWhoPz8gKi8KLQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkdQX0VOQUJMRSwgMHhGRiAmIH4oMSA8PCA2KSk7Ci0KLQlydGw4MTh4X2lvd3JpdGUzMihwcml2LCAmcHJpdi0+bWFwLT5SRl9USU1JTkcsIDB4MDAwYTgwMDgpOwotCi0JLyogVE9ETzogY2hlY2sgaWYgd2UgbmVlZCByZWFsbHkgdG8gY2hhbmdlIEJSU1IgdG8gZG8gUkYgY29uZmlnICovCi0JcnRsODE4eF9pb3JlYWQxNihwcml2LCAmcHJpdi0+bWFwLT5CUlNSKTsKLQlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5CUlNSLCAweEZGRkYpOwotCXJ0bDgxOHhfaW93cml0ZTMyKHByaXYsICZwcml2LT5tYXAtPlJGX1BBUkEsIDB4MDAxMDAwNDQpOwotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCwgUlRMODE4WF9FRVBST01fQ01EX0NPTkZJRyk7Ci0JcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5DT05GSUczLCAweDQ0KTsKLQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQsIFJUTDgxOFhfRUVQUk9NX0NNRF9OT1JNQUwpOwotCi0JcnRsODIyNV93cml0ZShkZXYsIDB4MCwgMHgwNjcpOwotCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDEsIDB4RkUwKTsKLQlydGw4MjI1X3dyaXRlKGRldiwgMHgyLCAweDQ0RCk7Ci0JcnRsODIyNV93cml0ZShkZXYsIDB4MywgMHg0NDEpOwotCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDQsIDB4OEJFKTsKLQlydGw4MjI1X3dyaXRlKGRldiwgMHg1LCAweEJGMCk7CQkvKiBUT0RPOiBtaW5pcGNpICovCi0JcnRsODIyNV93cml0ZShkZXYsIDB4NiwgMHhBRTYpOwotCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDcsIHJ0bDgyMjVfY2hhblswXSk7Ci0JcnRsODIyNV93cml0ZShkZXYsIDB4OCwgMHgwMUYpOwotCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDksIDB4MzM0KTsKLQlydGw4MjI1X3dyaXRlKGRldiwgMHhBLCAweEZENCk7Ci0JcnRsODIyNV93cml0ZShkZXYsIDB4QiwgMHgzOTEpOwotCXJ0bDgyMjVfd3JpdGUoZGV2LCAweEMsIDB4MDUwKTsKLQlydGw4MjI1X3dyaXRlKGRldiwgMHhELCAweDZEQik7Ci0JcnRsODIyNV93cml0ZShkZXYsIDB4RSwgMHgwMjkpOwotCXJ0bDgyMjVfd3JpdGUoZGV2LCAweEYsIDB4OTE0KTsgbXNsZWVwKDEpOwotCi0JcnRsODIyNV93cml0ZShkZXYsIDB4MiwgMHhDNEQpOyBtc2xlZXAoMTAwKTsKLQotCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDAsIDB4MTI3KTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJ0bDgyMjViY2RfcnhnYWluKTsgaSsrKSB7Ci0JCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDEsIGkgKyAxKTsKLQkJcnRsODIyNV93cml0ZShkZXYsIDB4MiwgcnRsODIyNWJjZF9yeGdhaW5baV0pOwotCX0KLQotCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDAsIDB4MDI3KTsKLQlydGw4MjI1X3dyaXRlKGRldiwgMHgwLCAweDIyRik7Ci0JcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zRW5hYmxlLCAweDFGRkYpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocnRsODIyNV9hZ2MpOyBpKyspIHsKLQkJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4QiwgcnRsODIyNV9hZ2NbaV0pOwotCQltc2xlZXAoMSk7Ci0JCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweEEsIDB4ODAgKyBpKTsKLQkJbXNsZWVwKDEpOwotCX0KLQotCW1zbGVlcCgxKTsKLQotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDAwLCAweDAxKTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDAxLCAweDAyKTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDAyLCAweDYyKTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDAzLCAweDAwKTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDA0LCAweDAwKTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDA1LCAweDAwKTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDA2LCAweDAwKTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDA3LCAweDAwKTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDA4LCAweDAwKTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDA5LCAweGZlKTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDBhLCAweDA5KTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDBiLCAweDgwKTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDBjLCAweDAxKTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDBlLCAweGQzKTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDBmLCAweDM4KTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDEwLCAweDg0KTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDExLCAweDAzKTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDEyLCAweDIwKTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDEzLCAweDIwKTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDE0LCAweDAwKTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDE1LCAweDQwKTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDE2LCAweDAwKTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDE3LCAweDQwKTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDE4LCAweGVmKTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDE5LCAweDE5KTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDFhLCAweDIwKTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDFiLCAweDc2KTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDFjLCAweDA0KTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDFlLCAweDk1KTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDFmLCAweDc1KTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDIwLCAweDFmKTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDIxLCAweDI3KTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDIyLCAweDE2KTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDI0LCAweDQ2KTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDI1LCAweDIwKTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDI2LCAweDkwKTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDI3LCAweDg4KTsgbXNsZWVwKDEpOwotCi0JcnRsODIyNV93cml0ZV9waHlfY2NrKGRldiwgMHgwMCwgMHg5OCk7IG1zbGVlcCgxKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDAzLCAweDIwKTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4MDQsIDB4N2UpOyBtc2xlZXAoMSk7Ci0JcnRsODIyNV93cml0ZV9waHlfY2NrKGRldiwgMHgwNSwgMHgxMik7IG1zbGVlcCgxKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDA2LCAweGZjKTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4MDcsIDB4NzgpOyBtc2xlZXAoMSk7Ci0JcnRsODIyNV93cml0ZV9waHlfY2NrKGRldiwgMHgwOCwgMHgyZSk7IG1zbGVlcCgxKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDEwLCAweDkzKTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4MTEsIDB4ODgpOyBtc2xlZXAoMSk7Ci0JcnRsODIyNV93cml0ZV9waHlfY2NrKGRldiwgMHgxMiwgMHg0Nyk7IG1zbGVlcCgxKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDEzLCAweGQwKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDE5LCAweDAwKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDFhLCAweGEwKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDFiLCAweDA4KTsKLQlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDQwLCAweDg2KTsKLQlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDQxLCAweDhkKTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4NDIsIDB4MTUpOyBtc2xlZXAoMSk7Ci0JcnRsODIyNV93cml0ZV9waHlfY2NrKGRldiwgMHg0MywgMHgxOCk7IG1zbGVlcCgxKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDQ0LCAweDFmKTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4NDUsIDB4MWUpOyBtc2xlZXAoMSk7Ci0JcnRsODIyNV93cml0ZV9waHlfY2NrKGRldiwgMHg0NiwgMHgxYSk7IG1zbGVlcCgxKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDQ3LCAweDE1KTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4NDgsIDB4MTApOyBtc2xlZXAoMSk7Ci0JcnRsODIyNV93cml0ZV9waHlfY2NrKGRldiwgMHg0OSwgMHgwYSk7IG1zbGVlcCgxKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDRhLCAweDA1KTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4NGIsIDB4MDIpOyBtc2xlZXAoMSk7Ci0JcnRsODIyNV93cml0ZV9waHlfY2NrKGRldiwgMHg0YywgMHgwNSk7IG1zbGVlcCgxKTsKLQotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+VEVTVFIsIDB4MEQpOyBtc2xlZXAoMSk7Ci0KLQlydGw4MjI1X3JmX3NldF90eF9wb3dlcihkZXYsIDEpOwotCi0JLyogUlggYW50ZW5uYSBkZWZhdWx0IHRvIEEgKi8KLQlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDEwLCAweDliKTsgbXNsZWVwKDEpOwkvKiBCOiAweERCICovCi0JcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MjYsIDB4OTApOyBtc2xlZXAoMSk7CS8qIEI6IDB4MTAgKi8KLQotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+VFhfQU5URU5OQSwgMHgwMyk7CS8qIEI6IDB4MDAgKi8KLQltc2xlZXAoMSk7Ci0JcnRsODE4eF9pb3dyaXRlMzIocHJpdiwgKF9fbGUzMiBfX2lvbWVtICopKCh2b2lkIF9faW9tZW0gKilwcml2LT5tYXAgKyAweDk0KSwgMHgxNWMwMDAwMik7Ci0JcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zRW5hYmxlLCAweDFGRkYpOwotCi0JcnRsODIyNV93cml0ZShkZXYsIDB4MGMsIDB4NTApOwotCS8qIHNldCBPRkRNIGluaXRpYWwgZ2FpbiAqLwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDBkLCBydGw4MjI1X2dhaW5bNCAqIDRdKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgyMywgcnRsODIyNV9nYWluWzQgKiA0ICsgMV0pOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDFiLCBydGw4MjI1X2dhaW5bNCAqIDQgKyAyXSk7Ci0JcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MWQsIHJ0bDgyMjVfZ2Fpbls0ICogNCArIDNdKTsKLQkvKiBzZXQgQ0NLIHRocmVzaG9sZCAqLwotCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4NDEsIHJ0bDgyMjVfdGhyZXNob2xkWzBdKTsKLX0KLQotc3RhdGljIGNvbnN0IHU4IHJ0bDgyMjV6Ml90eF9wb3dlcl9jY2tfY2gxNFtdID0gewotCTB4MzYsIDB4MzUsIDB4MmUsIDB4MWIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAKLX07Ci0KLXN0YXRpYyBjb25zdCB1OCBydGw4MjI1ejJfdHhfcG93ZXJfY2NrX0JbXSA9IHsKLQkweDMwLCAweDJmLCAweDI5LCAweDIxLCAweDE5LCAweDEwLCAweDA4LCAweDA0Ci19OwotCi1zdGF0aWMgY29uc3QgdTggcnRsODIyNXoyX3R4X3Bvd2VyX2Nja19BW10gPSB7Ci0JMHgzMywgMHgzMiwgMHgyYiwgMHgyMywgMHgxYSwgMHgxMSwgMHgwOCwgMHgwNAotfTsKLQotc3RhdGljIGNvbnN0IHU4IHJ0bDgyMjV6Ml90eF9wb3dlcl9jY2tbXSA9IHsKLQkweDM2LCAweDM1LCAweDJlLCAweDI1LCAweDFjLCAweDEyLCAweDA5LCAweDA0Ci19OwotCi1zdGF0aWMgdm9pZCBydGw4MjI1ejJfcmZfc2V0X3R4X3Bvd2VyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgaW50IGNoYW5uZWwpCi17Ci0Jc3RydWN0IHJ0bDgxODBfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKLQl1OCBjY2tfcG93ZXIsIG9mZG1fcG93ZXI7Ci0JY29uc3QgdTggKnRtcDsKLQlpbnQgaTsKLQotCWNja19wb3dlciA9IHByaXYtPmNoYW5uZWxzW2NoYW5uZWwgLSAxXS5od192YWx1ZSAmIDB4RkY7Ci0Jb2ZkbV9wb3dlciA9IHByaXYtPmNoYW5uZWxzW2NoYW5uZWwgLSAxXS5od192YWx1ZSA+PiA4OwotCi0JaWYgKGNoYW5uZWwgPT0gMTQpCi0JCXRtcCA9IHJ0bDgyMjV6Ml90eF9wb3dlcl9jY2tfY2gxNDsKLQllbHNlIGlmIChjY2tfcG93ZXIgPT0gMTIpCi0JCXRtcCA9IHJ0bDgyMjV6Ml90eF9wb3dlcl9jY2tfQjsKLQllbHNlIGlmIChjY2tfcG93ZXIgPT0gMTMpCi0JCXRtcCA9IHJ0bDgyMjV6Ml90eF9wb3dlcl9jY2tfQTsKLQllbHNlCi0JCXRtcCA9IHJ0bDgyMjV6Ml90eF9wb3dlcl9jY2s7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQotCQlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDQ0ICsgaSwgKnRtcCsrKTsKLQotCWNja19wb3dlciA9IG1pbihjY2tfcG93ZXIsICh1OCkzNSk7Ci0JaWYgKGNja19wb3dlciA9PSAxMyB8fCBjY2tfcG93ZXIgPT0gMTQpCi0JCWNja19wb3dlciA9IDEyOwotCWlmIChjY2tfcG93ZXIgPj0gMTUpCi0JCWNja19wb3dlciAtPSAyOwotCi0JcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5UWF9HQUlOX0NDSywgY2NrX3Bvd2VyKTsKLQlydGw4MTh4X2lvcmVhZDgocHJpdiwgJnByaXYtPm1hcC0+VFhfR0FJTl9DQ0spOwotCW1zbGVlcCgxKTsKLQotCW9mZG1fcG93ZXIgPSBtaW4ob2ZkbV9wb3dlciwgKHU4KTM1KTsKLQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPlRYX0dBSU5fT0ZETSwgb2ZkbV9wb3dlcik7Ci0KLQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMiwgMHg2Mik7Ci0JcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDUsIDB4MDApOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCA2LCAweDQwKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgNywgMHgwMCk7Ci0JcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDgsIDB4NDApOwotCi0JbXNsZWVwKDEpOwotfQotCi1zdGF0aWMgY29uc3QgdTE2IHJ0bDgyMjV6Ml9yeGdhaW5bXSA9IHsKLQkweDAwMDAsIDB4MDAwMSwgMHgwMDAyLCAweDAwMDMsIDB4MDAwNCwgMHgwMDA1LCAweDAwMDgsIDB4MDAwOSwKLQkweDAwMGEsIDB4MDAwYiwgMHgwMTAyLCAweDAxMDMsIDB4MDEwNCwgMHgwMTA1LCAweDAxNDAsIDB4MDE0MSwKLQkweDAxNDIsIDB4MDE0MywgMHgwMTQ0LCAweDAxNDUsIDB4MDE4MCwgMHgwMTgxLCAweDAxODIsIDB4MDE4MywKLQkweDAxODQsIDB4MDE4NSwgMHgwMTg4LCAweDAxODksIDB4MDE4YSwgMHgwMThiLCAweDAyNDMsIDB4MDI0NCwKLQkweDAyNDUsIDB4MDI4MCwgMHgwMjgxLCAweDAyODIsIDB4MDI4MywgMHgwMjg0LCAweDAyODUsIDB4MDI4OCwKLQkweDAyODksIDB4MDI4YSwgMHgwMjhiLCAweDAyOGMsIDB4MDM0MiwgMHgwMzQzLCAweDAzNDQsIDB4MDM0NSwKLQkweDAzODAsIDB4MDM4MSwgMHgwMzgyLCAweDAzODMsIDB4MDM4NCwgMHgwMzg1LCAweDAzODgsIDB4MDM4OSwKLQkweDAzOGEsIDB4MDM4YiwgMHgwMzhjLCAweDAzOGQsIDB4MDM5MCwgMHgwMzkxLCAweDAzOTIsIDB4MDM5MywKLQkweDAzOTQsIDB4MDM5NSwgMHgwMzk4LCAweDAzOTksIDB4MDM5YSwgMHgwMzliLCAweDAzOWMsIDB4MDM5ZCwKLQkweDAzYTAsIDB4MDNhMSwgMHgwM2EyLCAweDAzYTMsIDB4MDNhNCwgMHgwM2E1LCAweDAzYTgsIDB4MDNhOSwKLQkweDAzYWEsIDB4MDNhYiwgMHgwM2FjLCAweDAzYWQsIDB4MDNiMCwgMHgwM2IxLCAweDAzYjIsIDB4MDNiMywKLQkweDAzYjQsIDB4MDNiNSwgMHgwM2I4LCAweDAzYjksIDB4MDNiYSwgMHgwM2JiLCAweDAzYmIKLX07Ci0KLXN0YXRpYyB2b2lkIHJ0bDgyMjV6Ml9yZl9pbml0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKLXsKLQlzdHJ1Y3QgcnRsODE4MF9wcml2ICpwcml2ID0gZGV2LT5wcml2OwotCWludCBpOwotCi0JcnRsODE4MF9zZXRfYW5hcGFyYW0ocHJpdiwgUlRMODIyNV9BTkFQQVJBTV9PTik7Ci0KLQkvKiBob3N0X3BjaV9pbml0ICovCi0JcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zT3V0cHV0LCAweDA0ODApOwotCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc0VuYWJsZSwgMHgxRkZGKTsKLQlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNTZWxlY3QsIDB4MDQ4OCk7Ci0JcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5HUF9FTkFCTEUsIDApOwotCXJ0bDgxOHhfaW9yZWFkOChwcml2LCAmcHJpdi0+bWFwLT5FRVBST01fQ01EKTsKLQltc2xlZXAoMjAwKTsJLyogRklYTUU6IGVoaD8/ICovCi0JcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5HUF9FTkFCTEUsIDB4RkYgJiB+KDEgPDwgNikpOwotCi0JcnRsODE4eF9pb3dyaXRlMzIocHJpdiwgJnByaXYtPm1hcC0+UkZfVElNSU5HLCAweDAwMDg4MDA4KTsKLQotCS8qIFRPRE86IGNoZWNrIGlmIHdlIG5lZWQgcmVhbGx5IHRvIGNoYW5nZSBCUlNSIHRvIGRvIFJGIGNvbmZpZyAqLwotCXJ0bDgxOHhfaW9yZWFkMTYocHJpdiwgJnByaXYtPm1hcC0+QlJTUik7Ci0JcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+QlJTUiwgMHhGRkZGKTsKLQlydGw4MTh4X2lvd3JpdGUzMihwcml2LCAmcHJpdi0+bWFwLT5SRl9QQVJBLCAweDAwMTAwMDQ0KTsKLQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQsIFJUTDgxOFhfRUVQUk9NX0NNRF9DT05GSUcpOwotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+Q09ORklHMywgMHg0NCk7Ci0JcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5FRVBST01fQ01ELCBSVEw4MThYX0VFUFJPTV9DTURfTk9STUFMKTsKLQotCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc0VuYWJsZSwgMHgxRkZGKTsKLQotCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDAsIDB4MEI3KTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDEsIDB4RUUwKTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDIsIDB4NDREKTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDMsIDB4NDQxKTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDQsIDB4OEMzKTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDUsIDB4QzcyKTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDYsIDB4MEU2KTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDcsIDB4ODJBKTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDgsIDB4MDNGKTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDksIDB4MzM1KTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGUoZGV2LCAweGEsIDB4OUQ0KTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGUoZGV2LCAweGIsIDB4N0JCKTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGUoZGV2LCAweGMsIDB4ODUwKTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGUoZGV2LCAweGQsIDB4Q0RGKTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGUoZGV2LCAweGUsIDB4MDJCKTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGUoZGV2LCAweGYsIDB4MTE0KTsgbXNsZWVwKDEwMCk7Ci0KLQlpZiAoIShydGw4MjI1X3JlYWQoZGV2LCA2KSAmICgxIDw8IDcpKSkgewotCQlydGw4MjI1X3dyaXRlKGRldiwgMHgwMiwgMHgwQzREKTsKLQkJbXNsZWVwKDIwMCk7Ci0JCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDAyLCAweDA0NEQpOwotCQltc2xlZXAoMTAwKTsKLQkJLyogVE9ETzogcmVhZGQgY2FsaWJyYXRpb24gZmFpbHVyZSBtZXNzYWdlIHdoZW4gdGhlIGNhbGlicmF0aW9uCi0JCSAgIGNoZWNrIHdvcmtzICovCi0JfQotCi0JcnRsODIyNV93cml0ZShkZXYsIDB4MCwgMHgxQjcpOwotCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDMsIDB4MDAyKTsKLQlydGw4MjI1X3dyaXRlKGRldiwgMHg1LCAweDAwNCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShydGw4MjI1ejJfcnhnYWluKTsgaSsrKSB7Ci0JCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDEsIGkgKyAxKTsKLQkJcnRsODIyNV93cml0ZShkZXYsIDB4MiwgcnRsODIyNXoyX3J4Z2FpbltpXSk7Ci0JfQotCi0JcnRsODIyNV93cml0ZShkZXYsIDB4MCwgMHgwQjcpOyBtc2xlZXAoMTAwKTsKLQlydGw4MjI1X3dyaXRlKGRldiwgMHgyLCAweEM0RCk7Ci0KLQltc2xlZXAoMjAwKTsKLQlydGw4MjI1X3dyaXRlKGRldiwgMHgyLCAweDQ0RCk7Ci0JbXNsZWVwKDEwMCk7Ci0KLQlydGw4MjI1X3dyaXRlKGRldiwgMHgwMCwgMHgyQkYpOwotCXJ0bDgyMjVfd3JpdGUoZGV2LCAweEZGLCAweEZGRkYpOwotCi0JcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zRW5hYmxlLCAweDFGRkYpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocnRsODIyNV9hZ2MpOyBpKyspIHsKLQkJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4QiwgcnRsODIyNV9hZ2NbaV0pOwotCQltc2xlZXAoMSk7Ci0JCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweEEsIDB4ODAgKyBpKTsKLQkJbXNsZWVwKDEpOwotCX0KLQotCW1zbGVlcCgxKTsKLQotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDAwLCAweDAxKTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDAxLCAweDAyKTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDAyLCAweDYyKTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDAzLCAweDAwKTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDA0LCAweDAwKTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDA1LCAweDAwKTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDA2LCAweDQwKTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDA3LCAweDAwKTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDA4LCAweDQwKTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDA5LCAweGZlKTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDBhLCAweDA5KTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDE4LCAweGVmKTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDBiLCAweDgwKTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDBjLCAweDAxKTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDBkLCAweDQzKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgwZSwgMHhkMyk7IG1zbGVlcCgxKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgwZiwgMHgzOCk7IG1zbGVlcCgxKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgxMCwgMHg4NCk7IG1zbGVlcCgxKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgxMSwgMHgwNik7IG1zbGVlcCgxKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgxMiwgMHgyMCk7IG1zbGVlcCgxKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgxMywgMHgyMCk7IG1zbGVlcCgxKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgxNCwgMHgwMCk7IG1zbGVlcCgxKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgxNSwgMHg0MCk7IG1zbGVlcCgxKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgxNiwgMHgwMCk7IG1zbGVlcCgxKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgxNywgMHg0MCk7IG1zbGVlcCgxKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgxOCwgMHhlZik7IG1zbGVlcCgxKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgxOSwgMHgxOSk7IG1zbGVlcCgxKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgxYSwgMHgyMCk7IG1zbGVlcCgxKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgxYiwgMHgxMSk7IG1zbGVlcCgxKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgxYywgMHgwNCk7IG1zbGVlcCgxKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgxZCwgMHhjNSk7IG1zbGVlcCgxKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgxZSwgMHhiMyk7IG1zbGVlcCgxKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgxZiwgMHg3NSk7IG1zbGVlcCgxKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgyMCwgMHgxZik7IG1zbGVlcCgxKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgyMSwgMHgyNyk7IG1zbGVlcCgxKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgyMiwgMHgxNik7IG1zbGVlcCgxKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgyMywgMHg4MCk7IG1zbGVlcCgxKTsgLyogRklYTUU6IG5vdCBuZWVkZWQ/ICovCi0JcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MjQsIDB4NDYpOyBtc2xlZXAoMSk7Ci0JcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MjUsIDB4MjApOyBtc2xlZXAoMSk7Ci0JcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MjYsIDB4OTApOyBtc2xlZXAoMSk7Ci0JcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MjcsIDB4ODgpOyBtc2xlZXAoMSk7Ci0KLQlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDAwLCAweDk4KTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4MDMsIDB4MjApOyBtc2xlZXAoMSk7Ci0JcnRsODIyNV93cml0ZV9waHlfY2NrKGRldiwgMHgwNCwgMHg3ZSk7IG1zbGVlcCgxKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDA1LCAweDEyKTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4MDYsIDB4ZmMpOyBtc2xlZXAoMSk7Ci0JcnRsODIyNV93cml0ZV9waHlfY2NrKGRldiwgMHgwNywgMHg3OCk7IG1zbGVlcCgxKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDA4LCAweDJlKTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4MTAsIDB4OTMpOyBtc2xlZXAoMSk7Ci0JcnRsODIyNV93cml0ZV9waHlfY2NrKGRldiwgMHgxMSwgMHg4OCk7IG1zbGVlcCgxKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDEyLCAweDQ3KTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4MTMsIDB4ZDApOwotCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4MTksIDB4MDApOwotCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4MWEsIDB4YTApOwotCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4MWIsIDB4MDgpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4NDAsIDB4ODYpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4NDEsIDB4OGEpOyBtc2xlZXAoMSk7Ci0JcnRsODIyNV93cml0ZV9waHlfY2NrKGRldiwgMHg0MiwgMHgxNSk7IG1zbGVlcCgxKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDQzLCAweDE4KTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4NDQsIDB4MzYpOyBtc2xlZXAoMSk7Ci0JcnRsODIyNV93cml0ZV9waHlfY2NrKGRldiwgMHg0NSwgMHgzNSk7IG1zbGVlcCgxKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDQ2LCAweDJlKTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4NDcsIDB4MjUpOyBtc2xlZXAoMSk7Ci0JcnRsODIyNV93cml0ZV9waHlfY2NrKGRldiwgMHg0OCwgMHgxYyk7IG1zbGVlcCgxKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDQ5LCAweDEyKTsgbXNsZWVwKDEpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4NGEsIDB4MDkpOyBtc2xlZXAoMSk7Ci0JcnRsODIyNV93cml0ZV9waHlfY2NrKGRldiwgMHg0YiwgMHgwNCk7IG1zbGVlcCgxKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDRjLCAweDA1KTsgbXNsZWVwKDEpOwotCi0JcnRsODE4eF9pb3dyaXRlOChwcml2LCAodTggX19pb21lbSAqKSgodm9pZCBfX2lvbWVtICopcHJpdi0+bWFwICsgMHg1QiksIDB4MEQpOyBtc2xlZXAoMSk7Ci0KLQlydGw4MjI1ejJfcmZfc2V0X3R4X3Bvd2VyKGRldiwgMSk7Ci0KLQkvKiBSWCBhbnRlbm5hIGRlZmF1bHQgdG8gQSAqLwotCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4MTAsIDB4OWIpOyBtc2xlZXAoMSk7CS8qIEI6IDB4REIgKi8KLQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgyNiwgMHg5MCk7IG1zbGVlcCgxKTsJLyogQjogMHgxMCAqLwotCi0JcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5UWF9BTlRFTk5BLCAweDAzKTsJLyogQjogMHgwMCAqLwotCW1zbGVlcCgxKTsKLQlydGw4MTh4X2lvd3JpdGUzMihwcml2LCAoX19sZTMyIF9faW9tZW0gKikoKHZvaWQgX19pb21lbSAqKXByaXYtPm1hcCArIDB4OTQpLCAweDE1YzAwMDAyKTsKLQlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNFbmFibGUsIDB4MUZGRik7Ci19Ci0KLXN0YXRpYyB2b2lkIHJ0bDgyMjVfcmZfc3RvcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCi17Ci0Jc3RydWN0IHJ0bDgxODBfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKLQl1OCByZWc7Ci0KLQlydGw4MjI1X3dyaXRlKGRldiwgMHg0LCAweDFmKTsgbXNsZWVwKDEpOwotCi0JcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5FRVBST01fQ01ELCBSVEw4MThYX0VFUFJPTV9DTURfQ09ORklHKTsKLQlyZWcgPSBydGw4MTh4X2lvcmVhZDgocHJpdiwgJnByaXYtPm1hcC0+Q09ORklHMyk7Ci0JcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5DT05GSUczLCByZWcgfCBSVEw4MThYX0NPTkZJRzNfQU5BUEFSQU1fV1JJVEUpOwotCXJ0bDgxOHhfaW93cml0ZTMyKHByaXYsICZwcml2LT5tYXAtPkFOQVBBUkFNMiwgUlRMODIyNV9BTkFQQVJBTTJfT0ZGKTsKLQlydGw4MTh4X2lvd3JpdGUzMihwcml2LCAmcHJpdi0+bWFwLT5BTkFQQVJBTSwgUlRMODIyNV9BTkFQQVJBTV9PRkYpOwotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+Q09ORklHMywgcmVnICYgflJUTDgxOFhfQ09ORklHM19BTkFQQVJBTV9XUklURSk7Ci0JcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5FRVBST01fQ01ELCBSVEw4MThYX0VFUFJPTV9DTURfTk9STUFMKTsKLX0KLQotc3RhdGljIHZvaWQgcnRsODIyNV9yZl9zZXRfY2hhbm5lbChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCi0JCQkJICAgc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mKQotewotCXN0cnVjdCBydGw4MTgwX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7Ci0JaW50IGNoYW4gPSBpZWVlODAyMTFfZnJlcXVlbmN5X3RvX2NoYW5uZWwoY29uZi0+Y2hhbm5lbC0+Y2VudGVyX2ZyZXEpOwotCi0JaWYgKHByaXYtPnJmLT5pbml0ID09IHJ0bDgyMjVfcmZfaW5pdCkKLQkJcnRsODIyNV9yZl9zZXRfdHhfcG93ZXIoZGV2LCBjaGFuKTsKLQllbHNlCi0JCXJ0bDgyMjV6Ml9yZl9zZXRfdHhfcG93ZXIoZGV2LCBjaGFuKTsKLQotCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDcsIHJ0bDgyMjVfY2hhbltjaGFuIC0gMV0pOwotCW1zbGVlcCgxMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJ0bDgyMjVfcmZfY29uZl9lcnAoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAotCQkJCXN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmluZm8pCi17Ci0Jc3RydWN0IHJ0bDgxODBfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKLQotCWlmIChpbmZvLT51c2Vfc2hvcnRfc2xvdCkgewotCQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPlNMT1QsIDB4OSk7Ci0JCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+U0lGUywgMHgyMik7Ci0JCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RElGUywgMHgxNCk7Ci0JCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RUlGUywgODEpOwotCQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkNXX1ZBTCwgMHg3Myk7Ci0JfSBlbHNlIHsKLQkJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5TTE9ULCAweDE0KTsKLQkJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5TSUZTLCAweDQ0KTsKLQkJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5ESUZTLCAweDI0KTsKLQkJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5FSUZTLCA4MSk7Ci0JCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+Q1dfVkFMLCAweGE1KTsKLQl9Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRsODE4eF9yZl9vcHMgcnRsODIyNV9vcHMgPSB7Ci0JLm5hbWUJCT0gInJ0bDgyMjUiLAotCS5pbml0CQk9IHJ0bDgyMjVfcmZfaW5pdCwKLQkuc3RvcAkJPSBydGw4MjI1X3JmX3N0b3AsCi0JLnNldF9jaGFuCT0gcnRsODIyNV9yZl9zZXRfY2hhbm5lbCwKLQkuY29uZl9lcnAJPSBydGw4MjI1X3JmX2NvbmZfZXJwLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBydGw4MTh4X3JmX29wcyBydGw4MjI1ejJfb3BzID0gewotCS5uYW1lCQk9ICJydGw4MjI1ejIiLAotCS5pbml0CQk9IHJ0bDgyMjV6Ml9yZl9pbml0LAotCS5zdG9wCQk9IHJ0bDgyMjVfcmZfc3RvcCwKLQkuc2V0X2NoYW4JPSBydGw4MjI1X3JmX3NldF9jaGFubmVsLAotCS5jb25mX2VycAk9IHJ0bDgyMjVfcmZfY29uZl9lcnAsCi19OwotCi1jb25zdCBzdHJ1Y3QgcnRsODE4eF9yZl9vcHMgKiBydGw4MTgwX2RldGVjdF9yZihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCi17Ci0Jc3RydWN0IHJ0bDgxODBfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKLQl1MTYgcmVnOCwgcmVnOTsKLQotCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc091dHB1dCwgMHgwNDgwKTsKLQlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNTZWxlY3QsIDB4MDQ4OCk7Ci0JcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zRW5hYmxlLCAweDFGRkYpOwotCXJ0bDgxOHhfaW9yZWFkOChwcml2LCAmcHJpdi0+bWFwLT5FRVBST01fQ01EKTsKLQltc2xlZXAoMTAwKTsKLQotCXJ0bDgyMjVfd3JpdGUoZGV2LCAwLCAweDFCNyk7Ci0KLQlyZWc4ID0gcnRsODIyNV9yZWFkKGRldiwgOCk7Ci0JcmVnOSA9IHJ0bDgyMjVfcmVhZChkZXYsIDkpOwotCi0JcnRsODIyNV93cml0ZShkZXYsIDAsIDB4MEI3KTsKLQotCWlmIChyZWc4ICE9IDB4NTg4IHx8IHJlZzkgIT0gMHg3MDApCi0JCXJldHVybiAmcnRsODIyNV9vcHM7Ci0KLQlyZXR1cm4gJnJ0bDgyMjV6Ml9vcHM7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODBfc2EyNDAwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODBfc2EyNDAwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwNjRmY2MuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTgwX3NhMjQwMC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjI4ICswLDAgQEAKLQotLyoKLSAqIFJhZGlvIHR1bmluZyBmb3IgUGhpbGlwcyBTQTI0MDAgb24gUlRMODE4MAotICoKLSAqIENvcHlyaWdodCAyMDA3IEFuZHJlYSBNZXJlbGxvIDxhbmRyZWFtcmxAdGlzY2FsaS5pdD4KLSAqCi0gKiBDb2RlIGZyb20gdGhlIEJTRCBkcml2ZXIgYW5kIHRoZSBydGw4MTgxIHByb2plY3QgaGF2ZSBiZWVuCi0gKiB2ZXJ5IHVzZWZ1bCB0byB1bmRlcnN0YW5kIGNlcnRhaW4gdGhpbmdzCi0gKgotICogSSB3YW50IHRvIHRoYW5rcyB0aGUgQXV0aG9ycyBvZiBzdWNoIHByb2plY3RzIGFuZCB0aGUgTmRpc3dyYXBwZXIKLSAqIHByb2plY3QgQXV0aG9ycy4KLSAqCi0gKiBBIHNwZWNpYWwgQmlnIFRoYW5rcyBhbHNvIGlzIGZvciBhbGwgcGVvcGxlIHdobyBkb25hdGVkIG1lIGNhcmRzLAotICogbWFraW5nIHBvc3NpYmxlIHRoZSBjcmVhdGlvbiBvZiB0aGUgb3JpZ2luYWwgcnRsODE4MCBkcml2ZXIKLSAqIGZyb20gd2hpY2ggdGhpcyBjb2RlIGlzIGRlcml2ZWQhCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+Ci0KLSNpbmNsdWRlICJydGw4MTgwLmgiCi0jaW5jbHVkZSAicnRsODE4MF9zYTI0MDAuaCIKLQotc3RhdGljIGNvbnN0IHUzMiBzYTI0MDBfY2hhbltdID0gewotCTB4MDAwOTZjLCAvKiBjaDEgKi8KLQkweDA4MDk3MCwKLQkweDEwMDk3NCwKLQkweDE4MDk3OCwKLQkweDAwMDk4MCwKLQkweDA4MDk4NCwKLQkweDEwMDk4OCwKLQkweDE4MDk4YywKLQkweDAwMDk5NCwKLQkweDA4MDk5OCwKLQkweDEwMDk5YywKLQkweDE4MDlhMCwKLQkweDAwMDlhOCwKLQkweDAwMDliNCwgLyogY2ggMTQgKi8KLX07Ci0KLXN0YXRpYyB2b2lkIHdyaXRlX3NhMjQwMChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHU4IGFkZHIsIHUzMiBkYXRhKQotewotCXN0cnVjdCBydGw4MTgwX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7Ci0JdTMyIHBoeV9jb25maWc7Ci0KLQkvKiBNQUMgd2lsbCBiYW5nIGJpdHMgdG8gdGhlIHNhMjQwMC4gc3cgMy13aXJlIGlzIE5PVCB1c2VkICovCi0JcGh5X2NvbmZpZyA9IDB4YjAwMDAwMDA7Ci0KLQlwaHlfY29uZmlnIHw9ICgodTMyKShhZGRyICYgMHhmKSkgPDwgMjQ7Ci0JcGh5X2NvbmZpZyB8PSBkYXRhICYgMHhmZmZmZmY7Ci0KLQlydGw4MTh4X2lvd3JpdGUzMihwcml2LAotCQkoX19sZTMyIF9faW9tZW0gKikgJnByaXYtPm1hcC0+UkZQaW5zT3V0cHV0LCBwaHlfY29uZmlnKTsKLQotCW1zbGVlcCgzKTsKLX0KLQotc3RhdGljIHZvaWQgc2EyNDAwX3dyaXRlX3BoeV9hbnRlbm5hKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgc2hvcnQgY2hhbikKLXsKLQlzdHJ1Y3QgcnRsODE4MF9wcml2ICpwcml2ID0gZGV2LT5wcml2OwotCXU4IGFudCA9IFNBMjQwMF9BTlRFTk5BOwotCi0JaWYgKHByaXYtPnJmcGFyYW0gJiBSRl9QQVJBTV9BTlRCREVGQVVMVCkKLQkJYW50IHw9IEJCX0FOVEVOTkFfQjsKLQotCWlmIChjaGFuID09IDE0KQotCQlhbnQgfD0gQkJfQU5UQVRURU5fQ0hBTjE0OwotCi0JcnRsODE4MF93cml0ZV9waHkoZGV2LCAweDEwLCBhbnQpOwotCi19Ci0KLXN0YXRpYyB1OCBzYTI0MDBfcmZfcnNzaV9tYXBbXSA9IHsKLQkweDY0LCAweDY0LCAweDYzLCAweDYyLCAweDYxLCAweDYwLCAweDVmLCAweDVlLAotCTB4NWQsIDB4NWMsIDB4NWIsIDB4NWEsIDB4NTcsIDB4NTQsIDB4NTIsIDB4NTAsCi0JMHg0ZSwgMHg0YywgMHg0YSwgMHg0OCwgMHg0NiwgMHg0NCwgMHg0MSwgMHgzZiwKLQkweDNjLCAweDNhLCAweDM3LCAweDM2LCAweDM2LCAweDFjLCAweDFjLCAweDFiLAotCTB4MWIsIDB4MWEsIDB4MWEsIDB4MTksIDB4MTksIDB4MTgsIDB4MTgsIDB4MTcsCi0JMHgxNywgMHgxNiwgMHgxNiwgMHgxNSwgMHgxNSwgMHgxNCwgMHgxNCwgMHgxMywKLQkweDEzLCAweDEyLCAweDEyLCAweDExLCAweDExLCAweDEwLCAweDEwLCAweDBmLAotCTB4MGYsIDB4MGUsIDB4MGUsIDB4MGQsIDB4MGQsIDB4MGMsIDB4MGMsIDB4MGIsCi0JMHgwYiwgMHgwYSwgMHgwYSwgMHgwOSwgMHgwOSwgMHgwOCwgMHgwOCwgMHgwNywKLQkweDA3LCAweDA2LCAweDA2LCAweDA1LCAweDA0LCAweDAzLCAweDAyLAotfTsKLQotc3RhdGljIHU4IHNhMjQwMF9yZl9jYWxjX3Jzc2kodTggYWdjLCB1OCBzcSkKLXsKLQlpZiAoc3EgPT0gMHg4MCkKLQkJcmV0dXJuIDE7Ci0KLQlpZiAoc3EgPiA3OCkKLQkJcmV0dXJuIDMyOwotCi0JLyogVE9ETzogcmVjYWxjIHNhMjQwMF9yZl9yc3NpX21hcCB0byBhdm9pZCBtdWx0IC8gZGl2ICovCi0JcmV0dXJuIDY1ICogc2EyNDAwX3JmX3Jzc2lfbWFwW3NxXSAvIDEwMDsKLX0KLQotc3RhdGljIHZvaWQgc2EyNDAwX3JmX3NldF9jaGFubmVsKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKLQkJCQkgIHN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZikKLXsKLQlzdHJ1Y3QgcnRsODE4MF9wcml2ICpwcml2ID0gZGV2LT5wcml2OwotCWludCBjaGFubmVsID0gaWVlZTgwMjExX2ZyZXF1ZW5jeV90b19jaGFubmVsKGNvbmYtPmNoYW5uZWwtPmNlbnRlcl9mcmVxKTsKLQl1MzIgdHhwdyA9IHByaXYtPmNoYW5uZWxzW2NoYW5uZWwgLSAxXS5od192YWx1ZSAmIDB4RkY7Ci0JdTMyIGNoYW4gPSBzYTI0MDBfY2hhbltjaGFubmVsIC0gMV07Ci0KLQl3cml0ZV9zYTI0MDAoZGV2LCA3LCB0eHB3KTsKLQotCXNhMjQwMF93cml0ZV9waHlfYW50ZW5uYShkZXYsIGNoYW5uZWwpOwotCi0Jd3JpdGVfc2EyNDAwKGRldiwgMCwgY2hhbik7Ci0Jd3JpdGVfc2EyNDAwKGRldiwgMSwgMHhiYjUwKTsKLQl3cml0ZV9zYTI0MDAoZGV2LCAyLCAweDgwKTsKLQl3cml0ZV9zYTI0MDAoZGV2LCAzLCAwKTsKLX0KLQotc3RhdGljIHZvaWQgc2EyNDAwX3JmX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQotewotCXdyaXRlX3NhMjQwMChkZXYsIDQsIDApOwotfQotCi1zdGF0aWMgdm9pZCBzYTI0MDBfcmZfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCi17Ci0Jc3RydWN0IHJ0bDgxODBfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKLQl1MzIgYW5hcGFyYW0sIHR4Y29uZjsKLQl1OCBmaXJkYWM7Ci0JaW50IGFuYWxvZ3BoeSA9IHByaXYtPnJmcGFyYW0gJiBSRl9QQVJBTV9BTkFMT0dQSFk7Ci0KLQlhbmFwYXJhbSA9IHByaXYtPmFuYXBhcmFtOwotCWFuYXBhcmFtICY9IH4oMSA8PCBBTkFQQVJBTV9UWERBQ09GRl9TSElGVCk7Ci0JYW5hcGFyYW0gJj0gfkFOQVBBUkFNX1BXUjFfTUFTSzsKLQlhbmFwYXJhbSAmPSB+QU5BUEFSQU1fUFdSMF9NQVNLOwotCi0JaWYgKGFuYWxvZ3BoeSkgewotCQlhbmFwYXJhbSB8PSBTQTI0MDBfQU5BX0FOQVBBUkFNX1BXUjFfT04gPDwgQU5BUEFSQU1fUFdSMV9TSElGVDsKLQkJZmlyZGFjID0gMDsKLQl9IGVsc2UgewotCQlhbmFwYXJhbSB8PSAoU0EyNDAwX0RJR19BTkFQQVJBTV9QV1IxX09OIDw8IEFOQVBBUkFNX1BXUjFfU0hJRlQpOwotCQlhbmFwYXJhbSB8PSAoU0EyNDAwX0FOQVBBUkFNX1BXUjBfT04gPDwgQU5BUEFSQU1fUFdSMF9TSElGVCk7Ci0JCWZpcmRhYyA9IDEgPDwgU0EyNDAwX1JFRzRfRklSREFDX1NISUZUOwotCX0KLQotCXJ0bDgxODBfc2V0X2FuYXBhcmFtKHByaXYsIGFuYXBhcmFtKTsKLQotCXdyaXRlX3NhMjQwMChkZXYsIDAsIHNhMjQwMF9jaGFuWzBdKTsKLQl3cml0ZV9zYTI0MDAoZGV2LCAxLCAweGJiNTApOwotCXdyaXRlX3NhMjQwMChkZXYsIDIsIDB4ODApOwotCXdyaXRlX3NhMjQwMChkZXYsIDMsIDApOwotCXdyaXRlX3NhMjQwMChkZXYsIDQsIDB4MTkzNDAgfCBmaXJkYWMpOwotCXdyaXRlX3NhMjQwMChkZXYsIDUsIDB4MWRmYiB8IChTQTI0MDBfTUFYX1NFTlMgLSA1NCkgPDwgMTUpOwotCXdyaXRlX3NhMjQwMChkZXYsIDQsIDB4MTkzNDggfCBmaXJkYWMpOyAvKiBjYWxpYnJhdGUgVkNPICovCi0KLQlpZiAoIWFuYWxvZ3BoeSkKLQkJd3JpdGVfc2EyNDAwKGRldiwgNCwgMHgxOTM4Yyk7IC8qPz8/Ki8KLQotCXdyaXRlX3NhMjQwMChkZXYsIDQsIDB4MTkzNDAgfCBmaXJkYWMpOwotCi0Jd3JpdGVfc2EyNDAwKGRldiwgMCwgc2EyNDAwX2NoYW5bMF0pOwotCXdyaXRlX3NhMjQwMChkZXYsIDEsIDB4YmI1MCk7Ci0Jd3JpdGVfc2EyNDAwKGRldiwgMiwgMHg4MCk7Ci0Jd3JpdGVfc2EyNDAwKGRldiwgMywgMCk7Ci0Jd3JpdGVfc2EyNDAwKGRldiwgNCwgMHgxOTM0NCB8IGZpcmRhYyk7IC8qIGNhbGlicmF0ZSBmaWx0ZXIgKi8KLQotCS8qIG5ldyBmcm9tIHJ0bDgxODAgZW1iZWRkZWQgZHJpdmVyIChydGw4MTgxIHByb2plY3QpICovCi0Jd3JpdGVfc2EyNDAwKGRldiwgNiwgMHgxM2ZmIHwgKDEgPDwgMjMpKTsgLyogTUFOUlggKi8KLQl3cml0ZV9zYTI0MDAoZGV2LCA4LCAwKTsgLyogVkNPICovCi0KLQlpZiAoYW5hbG9ncGh5KSB7Ci0JCXJ0bDgxODBfc2V0X2FuYXBhcmFtKHByaXYsIGFuYXBhcmFtIHwKLQkJCQkgICAgICgxIDw8IEFOQVBBUkFNX1RYREFDT0ZGX1NISUZUKSk7Ci0KLQkJdHhjb25mID0gcnRsODE4eF9pb3JlYWQzMihwcml2LCAmcHJpdi0+bWFwLT5UWF9DT05GKTsKLQkJcnRsODE4eF9pb3dyaXRlMzIocHJpdiwgJnByaXYtPm1hcC0+VFhfQ09ORiwKLQkJCXR4Y29uZiB8IFJUTDgxOFhfVFhfQ09ORl9MT09QQkFDS19DT05UKTsKLQotCQl3cml0ZV9zYTI0MDAoZGV2LCA0LCAweDE5MzQxKTsgLyogY2FsaWJyYXRlcyBEQyAqLwotCi0JCS8qIGEgNXVzIHNsZWVwIGlzIHJlcXVpcmVkIGhlcmUsCi0JCSAqIHdlIHJlbHkgb24gdGhlIDNtcyBkZWxheSBpbnRyb2R1Y2VkIGluIHdyaXRlX3NhMjQwMCAqLwotCQl3cml0ZV9zYTI0MDAoZGV2LCA0LCAweDE5MzQ1KTsKLQotCQkvKiBhIDIwdXMgc2xlZXAgaXMgcmVxdWlyZWQgaGVyZSwKLQkJICogd2UgcmVseSBvbiB0aGUgM21zIGRlbGF5IGludHJvZHVjZWQgaW4gd3JpdGVfc2EyNDAwICovCi0KLQkJcnRsODE4eF9pb3dyaXRlMzIocHJpdiwgJnByaXYtPm1hcC0+VFhfQ09ORiwgdHhjb25mKTsKLQotCQlydGw4MTgwX3NldF9hbmFwYXJhbShwcml2LCBhbmFwYXJhbSk7Ci0JfQotCS8qIGVuZCBuZXcgY29kZSAqLwotCi0Jd3JpdGVfc2EyNDAwKGRldiwgNCwgMHgxOTM0MSB8IGZpcmRhYyk7IC8qIFJUWCBNT0RFICovCi0KLQkvKiBiYXNlYmFuZCBjb25maWd1cmF0aW9uICovCi0JcnRsODE4MF93cml0ZV9waHkoZGV2LCAwLCAweDk4KTsKLQlydGw4MTgwX3dyaXRlX3BoeShkZXYsIDMsIDB4MzgpOwotCXJ0bDgxODBfd3JpdGVfcGh5KGRldiwgNCwgMHhlMCk7Ci0JcnRsODE4MF93cml0ZV9waHkoZGV2LCA1LCAweDkwKTsKLQlydGw4MTgwX3dyaXRlX3BoeShkZXYsIDYsIDB4MWEpOwotCXJ0bDgxODBfd3JpdGVfcGh5KGRldiwgNywgMHg2NCk7Ci0KLQlzYTI0MDBfd3JpdGVfcGh5X2FudGVubmEoZGV2LCAxKTsKLQotCXJ0bDgxODBfd3JpdGVfcGh5KGRldiwgMHgxMSwgMHg4MCk7Ci0KLQlpZiAocnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPkNPTkZJRzIpICYKLQkgICAgUlRMODE4WF9DT05GSUcyX0FOVEVOTkFfRElWKQotCQlydGw4MTgwX3dyaXRlX3BoeShkZXYsIDB4MTIsIDB4YzcpOyAvKiBlbmFibGUgYW50IGRpdmVyc2l0eSAqLwotCWVsc2UKLQkJcnRsODE4MF93cml0ZV9waHkoZGV2LCAweDEyLCAweDQ3KTsgLyogZGlzYWJsZSBhbnQgZGl2ZXJzaXR5ICovCi0KLQlydGw4MTgwX3dyaXRlX3BoeShkZXYsIDB4MTMsIDB4OTAgfCBwcml2LT5jc3RocmVzaG9sZCk7Ci0KLQlydGw4MTgwX3dyaXRlX3BoeShkZXYsIDB4MTksIDB4MCk7Ci0JcnRsODE4MF93cml0ZV9waHkoZGV2LCAweDFhLCAweGEwKTsKLX0KLQotY29uc3Qgc3RydWN0IHJ0bDgxOHhfcmZfb3BzIHNhMjQwMF9yZl9vcHMgPSB7Ci0JLm5hbWUJCT0gIlBoaWxpcHMiLAotCS5pbml0CQk9IHNhMjQwMF9yZl9pbml0LAotCS5zdG9wCQk9IHNhMjQwMF9yZl9zdG9wLAotCS5zZXRfY2hhbgk9IHNhMjQwMF9yZl9zZXRfY2hhbm5lbCwKLQkuY2FsY19yc3NpCT0gc2EyNDAwX3JmX2NhbGNfcnNzaSwKLX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4Ny5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ODg3ODE2Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4Ny5oCisrKyAvZGV2L251bGwKQEAgLTEsMjcxICswLDAgQEAKLS8qCi0gKiBEZWZpbml0aW9ucyBmb3IgUlRMODE4NyBoYXJkd2FyZQotICoKLSAqIENvcHlyaWdodCAyMDA3IE1pY2hhZWwgV3UgPGZsYW1pbmdpY2VAc291cm1pbGsubmV0PgotICogQ29weXJpZ2h0IDIwMDcgQW5kcmVhIE1lcmVsbG8gPGFuZHJlYW1ybEB0aXNjYWxpLml0PgotICoKLSAqIEJhc2VkIG9uIHRoZSByODE4NyBkcml2ZXIsIHdoaWNoIGlzOgotICogQ29weXJpZ2h0IDIwMDUgQW5kcmVhIE1lcmVsbG8gPGFuZHJlYW1ybEB0aXNjYWxpLml0PiwgZXQgYWwuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaWZuZGVmIFJUTDgxODdfSAotI2RlZmluZSBSVEw4MTg3X0gKLQotI2luY2x1ZGUgInJ0bDgxOHguaCIKLSNpbmNsdWRlICJydGw4MTg3X2xlZHMuaCIKLQotI2RlZmluZSBSVEw4MTg3X0VFUFJPTV9UWFBXUl9CQVNFCTB4MDUKLSNkZWZpbmUgUlRMODE4N19FRVBST01fTUFDX0FERFIJCTB4MDcKLSNkZWZpbmUgUlRMODE4N19FRVBST01fVFhQV1JfQ0hBTl8xCTB4MTYJLyogMyBjaGFubmVscyAqLwotI2RlZmluZSBSVEw4MTg3X0VFUFJPTV9UWFBXUl9DSEFOXzYJMHgxQgkvKiAyIGNoYW5uZWxzICovCi0jZGVmaW5lIFJUTDgxODdfRUVQUk9NX1RYUFdSX0NIQU5fNAkweDNECS8qIDIgY2hhbm5lbHMgKi8KLSNkZWZpbmUgUlRMODE4N19FRVBST01fU0VMRUNUX0dQSU8JMHgzQgotCi0jZGVmaW5lIFJUTDgxODdfUkVRVF9SRUFECTB4QzAKLSNkZWZpbmUgUlRMODE4N19SRVFUX1dSSVRFCTB4NDAKLSNkZWZpbmUgUlRMODE4N19SRVFfR0VUX1JFRwkweDA1Ci0jZGVmaW5lIFJUTDgxODdfUkVRX1NFVF9SRUcJMHgwNQotCi0jZGVmaW5lIFJUTDgxODdfTUFYX1JYCQkweDlDNAotCi0jZGVmaW5lIFJGS0lMTF9NQVNLXzgxODdfODlfOTcJMHgyCi0jZGVmaW5lIFJGS0lMTF9NQVNLXzgxOTgJMHg0Ci0KLXN0cnVjdCBydGw4MTg3X3J4X2luZm8gewotCXN0cnVjdCB1cmIgKnVyYjsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXY7Ci19OwotCi1zdHJ1Y3QgcnRsODE4N19yeF9oZHIgewotCV9fbGUzMiBmbGFnczsKLQl1OCBub2lzZTsKLQl1OCBzaWduYWw7Ci0JdTggYWdjOwotCXU4IHJlc2VydmVkOwotCV9fbGU2NCBtYWNfdGltZTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBydGw4MTg3Yl9yeF9oZHIgewotCV9fbGUzMiBmbGFnczsKLQlfX2xlNjQgbWFjX3RpbWU7Ci0JdTggc3E7Ci0JdTggcnNzaTsKLQl1OCBhZ2M7Ci0JdTggZmxhZ3MyOwotCV9fbGUxNiBzbnJfbG9uZzJlbmQ7Ci0JczggcHdkYl9nMTI7Ci0JdTggZm90OwotfSBfX3BhY2tlZDsKLQotLyoge3J0bDgxODcscnRsODE4N2J9X3R4X2luZm8gaXMgaW4gc2tiICovCi0KLXN0cnVjdCBydGw4MTg3X3R4X2hkciB7Ci0JX19sZTMyIGZsYWdzOwotCV9fbGUxNiBydHNfZHVyYXRpb247Ci0JX19sZTE2IGxlbjsKLQlfX2xlMzIgcmV0cnk7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgcnRsODE4N2JfdHhfaGRyIHsKLQlfX2xlMzIgZmxhZ3M7Ci0JX19sZTE2IHJ0c19kdXJhdGlvbjsKLQlfX2xlMTYgbGVuOwotCV9fbGUzMiB1bnVzZWRfMTsKLQlfX2xlMTYgdW51c2VkXzI7Ci0JX19sZTE2IHR4X2R1cmF0aW9uOwotCV9fbGUzMiB1bnVzZWRfMzsKLQlfX2xlMzIgcmV0cnk7Ci0JX19sZTMyIHVudXNlZF80WzJdOwotfSBfX3BhY2tlZDsKLQotZW51bSB7Ci0JREVWSUNFX1JUTDgxODcsCi0JREVWSUNFX1JUTDgxODdCCi19OwotCi1zdHJ1Y3QgcnRsODE4N19wcml2IHsKLQkvKiBjb21tb24gYmV0d2VlbiBydGw4MTh4IGRyaXZlcnMgKi8KLQlzdHJ1Y3QgcnRsODE4eF9jc3IgKm1hcDsKLQljb25zdCBzdHJ1Y3QgcnRsODE4eF9yZl9vcHMgKnJmOwotCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWY7Ci0KLQkvKiBUaGUgbXV0ZXggcHJvdGVjdHMgdGhlIFRYIGxvb3BiYWNrIHN0YXRlLgotCSAqIEFueSBhdHRlbXB0IHRvIHNldCBjaGFubmVscyBjb25jdXJyZW50bHkgbG9ja3MgdGhlIGRldmljZS4KLQkgKi8KLQlzdHJ1Y3QgbXV0ZXggY29uZl9tdXRleDsKLQotCS8qIHJ0bDgxODcgc3BlY2lmaWMgKi8KLQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgY2hhbm5lbHNbMTRdOwotCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSByYXRlc1sxMl07Ci0Jc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCBiYW5kOwotCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OwotCXUzMiByeF9jb25mOwotCXN0cnVjdCB1c2JfYW5jaG9yIGFuY2hvcmVkOwotCXN0cnVjdCBkZWxheWVkX3dvcmsgd29yazsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXY7Ci0jaWZkZWYgQ09ORklHX1JUTDgxODdfTEVEUwotCXN0cnVjdCBydGw4MTg3X2xlZCBsZWRfcmFkaW87Ci0Jc3RydWN0IHJ0bDgxODdfbGVkIGxlZF90eDsKLQlzdHJ1Y3QgcnRsODE4N19sZWQgbGVkX3J4OwotCXN0cnVjdCBkZWxheWVkX3dvcmsgbGVkX29uOwotCXN0cnVjdCBkZWxheWVkX3dvcmsgbGVkX29mZjsKLSNlbmRpZgotCXUxNiB0eHB3cl9iYXNlOwotCXU4IGFzaWNfcmV2OwotCXU4IGlzX3J0bDgxODdiOwotCWVudW0gewotCQlSVEw4MTg3QnZCLAotCQlSVEw4MTg3QnZELAotCQlSVEw4MTg3QnZFCi0JfSBod19yZXY7Ci0Jc3RydWN0IHNrX2J1ZmZfaGVhZCByeF9xdWV1ZTsKLQl1OCBzaWduYWw7Ci0JdTggbm9pc2U7Ci0JdTggc2xvdF90aW1lOwotCXU4IGFpZnNuWzRdOwotCXU4IHJma2lsbF9tYXNrOwotCXN0cnVjdCB7Ci0JCV9fbGU2NCBidWY7Ci0JCXN0cnVjdCBza19idWZmX2hlYWQgcXVldWU7Ci0JfSBiX3R4X3N0YXR1czsgLyogVGhpcyBxdWV1ZSBpcyB1c2VkIGJ5IGJvdGggLWIgYW5kIG5vbi1iIGRldmljZXMgKi8KLQlzdHJ1Y3QgbXV0ZXggaW9fbXV0ZXg7Ci0JdW5pb24gewotCQl1OCBiaXRzODsKLQkJX19sZTE2IGJpdHMxNjsKLQkJX19sZTMyIGJpdHMzMjsKLQl9ICppb19kbWFidWY7Ci0JYm9vbCByZmtpbGxfb2ZmOwotfTsKLQotdm9pZCBydGw4MTg3X3dyaXRlX3BoeShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHU4IGFkZHIsIHUzMiBkYXRhKTsKLQotc3RhdGljIGlubGluZSB1OCBydGw4MTh4X2lvcmVhZDhfaWR4KHN0cnVjdCBydGw4MTg3X3ByaXYgKnByaXYsCi0JCQkJICAgICB1OCAqYWRkciwgdTggaWR4KQotewotCXU4IHZhbDsKLQotCW11dGV4X2xvY2soJnByaXYtPmlvX211dGV4KTsKLQl1c2JfY29udHJvbF9tc2cocHJpdi0+dWRldiwgdXNiX3JjdmN0cmxwaXBlKHByaXYtPnVkZXYsIDApLAotCQkJUlRMODE4N19SRVFfR0VUX1JFRywgUlRMODE4N19SRVFUX1JFQUQsCi0JCQkodW5zaWduZWQgbG9uZylhZGRyLCBpZHggJiAweDAzLAotCQkJJnByaXYtPmlvX2RtYWJ1Zi0+Yml0czgsIHNpemVvZih2YWwpLCBIWiAvIDIpOwotCi0JdmFsID0gcHJpdi0+aW9fZG1hYnVmLT5iaXRzODsKLQltdXRleF91bmxvY2soJnByaXYtPmlvX211dGV4KTsKLQotCXJldHVybiB2YWw7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTggcnRsODE4eF9pb3JlYWQ4KHN0cnVjdCBydGw4MTg3X3ByaXYgKnByaXYsIHU4ICphZGRyKQotewotCXJldHVybiBydGw4MTh4X2lvcmVhZDhfaWR4KHByaXYsIGFkZHIsIDApOwotfQotCi1zdGF0aWMgaW5saW5lIHUxNiBydGw4MTh4X2lvcmVhZDE2X2lkeChzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2LAotCQkJCSAgICAgICBfX2xlMTYgKmFkZHIsIHU4IGlkeCkKLXsKLQlfX2xlMTYgdmFsOwotCi0JbXV0ZXhfbG9jaygmcHJpdi0+aW9fbXV0ZXgpOwotCXVzYl9jb250cm9sX21zZyhwcml2LT51ZGV2LCB1c2JfcmN2Y3RybHBpcGUocHJpdi0+dWRldiwgMCksCi0JCQlSVEw4MTg3X1JFUV9HRVRfUkVHLCBSVEw4MTg3X1JFUVRfUkVBRCwKLQkJCSh1bnNpZ25lZCBsb25nKWFkZHIsIGlkeCAmIDB4MDMsCi0JCQkmcHJpdi0+aW9fZG1hYnVmLT5iaXRzMTYsIHNpemVvZih2YWwpLCBIWiAvIDIpOwotCi0JdmFsID0gcHJpdi0+aW9fZG1hYnVmLT5iaXRzMTY7Ci0JbXV0ZXhfdW5sb2NrKCZwcml2LT5pb19tdXRleCk7Ci0KLQlyZXR1cm4gbGUxNl90b19jcHUodmFsKTsKLX0KLQotc3RhdGljIGlubGluZSB1MTYgcnRsODE4eF9pb3JlYWQxNihzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2LCBfX2xlMTYgKmFkZHIpCi17Ci0JcmV0dXJuIHJ0bDgxOHhfaW9yZWFkMTZfaWR4KHByaXYsIGFkZHIsIDApOwotfQotCi1zdGF0aWMgaW5saW5lIHUzMiBydGw4MTh4X2lvcmVhZDMyX2lkeChzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2LAotCQkJCSAgICAgICBfX2xlMzIgKmFkZHIsIHU4IGlkeCkKLXsKLQlfX2xlMzIgdmFsOwotCi0JbXV0ZXhfbG9jaygmcHJpdi0+aW9fbXV0ZXgpOwotCXVzYl9jb250cm9sX21zZyhwcml2LT51ZGV2LCB1c2JfcmN2Y3RybHBpcGUocHJpdi0+dWRldiwgMCksCi0JCQlSVEw4MTg3X1JFUV9HRVRfUkVHLCBSVEw4MTg3X1JFUVRfUkVBRCwKLQkJCSh1bnNpZ25lZCBsb25nKWFkZHIsIGlkeCAmIDB4MDMsCi0JCQkmcHJpdi0+aW9fZG1hYnVmLT5iaXRzMzIsIHNpemVvZih2YWwpLCBIWiAvIDIpOwotCi0JdmFsID0gcHJpdi0+aW9fZG1hYnVmLT5iaXRzMzI7Ci0JbXV0ZXhfdW5sb2NrKCZwcml2LT5pb19tdXRleCk7Ci0KLQlyZXR1cm4gbGUzMl90b19jcHUodmFsKTsKLX0KLQotc3RhdGljIGlubGluZSB1MzIgcnRsODE4eF9pb3JlYWQzMihzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2LCBfX2xlMzIgKmFkZHIpCi17Ci0JcmV0dXJuIHJ0bDgxOHhfaW9yZWFkMzJfaWR4KHByaXYsIGFkZHIsIDApOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcnRsODE4eF9pb3dyaXRlOF9pZHgoc3RydWN0IHJ0bDgxODdfcHJpdiAqcHJpdiwKLQkJCQkJdTggKmFkZHIsIHU4IHZhbCwgdTggaWR4KQotewotCW11dGV4X2xvY2soJnByaXYtPmlvX211dGV4KTsKLQotCXByaXYtPmlvX2RtYWJ1Zi0+Yml0czggPSB2YWw7Ci0JdXNiX2NvbnRyb2xfbXNnKHByaXYtPnVkZXYsIHVzYl9zbmRjdHJscGlwZShwcml2LT51ZGV2LCAwKSwKLQkJCVJUTDgxODdfUkVRX1NFVF9SRUcsIFJUTDgxODdfUkVRVF9XUklURSwKLQkJCSh1bnNpZ25lZCBsb25nKWFkZHIsIGlkeCAmIDB4MDMsCi0JCQkmcHJpdi0+aW9fZG1hYnVmLT5iaXRzOCwgc2l6ZW9mKHZhbCksIEhaIC8gMik7Ci0KLQltdXRleF91bmxvY2soJnByaXYtPmlvX211dGV4KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHJ0bDgxOHhfaW93cml0ZTgoc3RydWN0IHJ0bDgxODdfcHJpdiAqcHJpdiwgdTggKmFkZHIsIHU4IHZhbCkKLXsKLQlydGw4MTh4X2lvd3JpdGU4X2lkeChwcml2LCBhZGRyLCB2YWwsIDApOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcnRsODE4eF9pb3dyaXRlMTZfaWR4KHN0cnVjdCBydGw4MTg3X3ByaXYgKnByaXYsCi0JCQkJCSBfX2xlMTYgKmFkZHIsIHUxNiB2YWwsIHU4IGlkeCkKLXsKLQltdXRleF9sb2NrKCZwcml2LT5pb19tdXRleCk7Ci0KLQlwcml2LT5pb19kbWFidWYtPmJpdHMxNiA9IGNwdV90b19sZTE2KHZhbCk7Ci0JdXNiX2NvbnRyb2xfbXNnKHByaXYtPnVkZXYsIHVzYl9zbmRjdHJscGlwZShwcml2LT51ZGV2LCAwKSwKLQkJCVJUTDgxODdfUkVRX1NFVF9SRUcsIFJUTDgxODdfUkVRVF9XUklURSwKLQkJCSh1bnNpZ25lZCBsb25nKWFkZHIsIGlkeCAmIDB4MDMsCi0JCQkmcHJpdi0+aW9fZG1hYnVmLT5iaXRzMTYsIHNpemVvZih2YWwpLCBIWiAvIDIpOwotCi0JbXV0ZXhfdW5sb2NrKCZwcml2LT5pb19tdXRleCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBydGw4MTh4X2lvd3JpdGUxNihzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2LCBfX2xlMTYgKmFkZHIsCi0JCQkJICAgICB1MTYgdmFsKQotewotCXJ0bDgxOHhfaW93cml0ZTE2X2lkeChwcml2LCBhZGRyLCB2YWwsIDApOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcnRsODE4eF9pb3dyaXRlMzJfaWR4KHN0cnVjdCBydGw4MTg3X3ByaXYgKnByaXYsCi0JCQkJCSBfX2xlMzIgKmFkZHIsIHUzMiB2YWwsIHU4IGlkeCkKLXsKLQltdXRleF9sb2NrKCZwcml2LT5pb19tdXRleCk7Ci0KLQlwcml2LT5pb19kbWFidWYtPmJpdHMzMiA9IGNwdV90b19sZTMyKHZhbCk7Ci0JdXNiX2NvbnRyb2xfbXNnKHByaXYtPnVkZXYsIHVzYl9zbmRjdHJscGlwZShwcml2LT51ZGV2LCAwKSwKLQkJCVJUTDgxODdfUkVRX1NFVF9SRUcsIFJUTDgxODdfUkVRVF9XUklURSwKLQkJCSh1bnNpZ25lZCBsb25nKWFkZHIsIGlkeCAmIDB4MDMsCi0JCQkmcHJpdi0+aW9fZG1hYnVmLT5iaXRzMzIsIHNpemVvZih2YWwpLCBIWiAvIDIpOwotCi0JbXV0ZXhfdW5sb2NrKCZwcml2LT5pb19tdXRleCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBydGw4MTh4X2lvd3JpdGUzMihzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2LCBfX2xlMzIgKmFkZHIsCi0JCQkJICAgICB1MzIgdmFsKQotewotCXJ0bDgxOHhfaW93cml0ZTMyX2lkeChwcml2LCBhZGRyLCB2YWwsIDApOwotfQotCi0jZW5kaWYgLyogUlRMODE4N19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODcvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODcvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I2Mjk5MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4Ny9NYWtlZmlsZQpAQCAtMCwwICsxLDUgQEAKK3J0bDgxODctb2JqcwkJOj0gZGV2Lm8gcnRsODIyNS5vIGxlZHMubyByZmtpbGwubworCitvYmotJChDT05GSUdfUlRMODE4NykJKz0gcnRsODE4Ny5vCisKK2NjZmxhZ3MteSArPSAtSWRyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4Ny9kZXYuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4Ny9kZXYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjgyY2FjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTg3L2Rldi5jCkBAIC0wLDAgKzEsMTU5MSBAQAorLyoKKyAqIExpbnV4IGRldmljZSBkcml2ZXIgZm9yIFJUTDgxODcKKyAqCisgKiBDb3B5cmlnaHQgMjAwNyBNaWNoYWVsIFd1IDxmbGFtaW5naWNlQHNvdXJtaWxrLm5ldD4KKyAqIENvcHlyaWdodCAyMDA3IEFuZHJlYSBNZXJlbGxvIDxhbmRyZWFtcmxAdGlzY2FsaS5pdD4KKyAqCisgKiBCYXNlZCBvbiB0aGUgcjgxODcgZHJpdmVyLCB3aGljaCBpczoKKyAqIENvcHlyaWdodCAyMDA1IEFuZHJlYSBNZXJlbGxvIDxhbmRyZWFtcmxAdGlzY2FsaS5pdD4sIGV0IGFsLgorICoKKyAqIFRoZSBkcml2ZXIgd2FzIGV4dGVuZGVkIHRvIHRoZSBSVEw4MTg3QiBpbiAyMDA4IGJ5OgorICogCUhlcnRvbiBSb25hbGRvIEtyemVzaW5za2kgPGhlcnRvbkBtYW5kcml2YS5jb20uYnI+CisgKglIaW4tVGFrIExldW5nIDxodGwxMEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisgKglMYXJyeSBGaW5nZXIgPExhcnJ5LkZpbmdlckBsd2Zpbmdlci5uZXQ+CisgKgorICogTWFnaWMgZGVsYXlzIGFuZCByZWdpc3RlciBvZmZzZXRzIGJlbG93IGFyZSB0YWtlbiBmcm9tIHRoZSBvcmlnaW5hbAorICogcjgxODcgZHJpdmVyIHNvdXJjZXMuICBUaGFua3MgdG8gUmVhbHRlayBmb3IgdGhlaXIgc3VwcG9ydCEKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9lZXByb21fOTNjeDYuaD4KKyNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KKworI2luY2x1ZGUgInJ0bDgxODcuaCIKKyNpbmNsdWRlICJydGw4MjI1LmgiCisjaWZkZWYgQ09ORklHX1JUTDgxODdfTEVEUworI2luY2x1ZGUgImxlZHMuaCIKKyNlbmRpZgorI2luY2x1ZGUgInJma2lsbC5oIgorCitNT0RVTEVfQVVUSE9SKCJNaWNoYWVsIFd1IDxmbGFtaW5naWNlQHNvdXJtaWxrLm5ldD4iKTsKK01PRFVMRV9BVVRIT1IoIkFuZHJlYSBNZXJlbGxvIDxhbmRyZWFtcmxAdGlzY2FsaS5pdD4iKTsKK01PRFVMRV9BVVRIT1IoIkhlcnRvbiBSb25hbGRvIEtyemVzaW5za2kgPGhlcnRvbkBtYW5kcml2YS5jb20uYnI+Iik7CitNT0RVTEVfQVVUSE9SKCJIaW4tVGFrIExldW5nIDxodGwxMEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Iik7CitNT0RVTEVfQVVUSE9SKCJMYXJyeSBGaW5nZXIgPExhcnJ5LkZpbmdlckBsd2Zpbmdlci5uZXQ+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlJUTDgxODcvUlRMODE4N0IgVVNCIHdpcmVsZXNzIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgcnRsODE4N190YWJsZVtdIF9fZGV2aW5pdGRhdGEgPSB7CisJLyogQXN1cyAqLworCXtVU0JfREVWSUNFKDB4MGIwNSwgMHgxNzFkKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1JUTDgxODd9LAorCS8qIEJlbGtpbiAqLworCXtVU0JfREVWSUNFKDB4MDUwZCwgMHg3MDVlKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1JUTDgxODdCfSwKKwkvKiBSZWFsdGVrICovCisJe1VTQl9ERVZJQ0UoMHgwYmRhLCAweDgxODcpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfUlRMODE4N30sCisJe1VTQl9ERVZJQ0UoMHgwYmRhLCAweDgxODkpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfUlRMODE4N0J9LAorCXtVU0JfREVWSUNFKDB4MGJkYSwgMHg4MTk3KSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1JUTDgxODdCfSwKKwl7VVNCX0RFVklDRSgweDBiZGEsIDB4ODE5OCksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9SVEw4MTg3Qn0sCisJLyogU3VyZWNvbSAqLworCXtVU0JfREVWSUNFKDB4MDc2OSwgMHgxMUYyKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1JUTDgxODd9LAorCS8qIExvZ2l0ZWNoICovCisJe1VTQl9ERVZJQ0UoMHgwNzg5LCAweDAxMEMpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfUlRMODE4N30sCisJLyogTmV0Z2VhciAqLworCXtVU0JfREVWSUNFKDB4MDg0NiwgMHg2MTAwKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1JUTDgxODd9LAorCXtVU0JfREVWSUNFKDB4MDg0NiwgMHg2YTAwKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1JUTDgxODd9LAorCXtVU0JfREVWSUNFKDB4MDg0NiwgMHg0MjYwKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1JUTDgxODdCfSwKKwkvKiBIUCAqLworCXtVU0JfREVWSUNFKDB4MDNmMCwgMHhjYTAyKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1JUTDgxODd9LAorCS8qIFNpdGVjb20gKi8KKwl7VVNCX0RFVklDRSgweDBkZjYsIDB4MDAwZCksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9SVEw4MTg3fSwKKwl7VVNCX0RFVklDRSgweDBkZjYsIDB4MDAyOCksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9SVEw4MTg3Qn0sCisJe1VTQl9ERVZJQ0UoMHgwZGY2LCAweDAwMjkpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfUlRMODE4N0J9LAorCS8qIFNwaGFpcm9uIEFjY2VzcyBTeXN0ZW1zIEdtYkggKi8KKwl7VVNCX0RFVklDRSgweDExNEIsIDB4MDE1MCksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9SVEw4MTg3fSwKKwkvKiBEaWNrIFNtaXRoIEVsZWN0cm9uaWNzICovCisJe1VTQl9ERVZJQ0UoMHgxMzcxLCAweDk0MDEpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfUlRMODE4N30sCisJLyogQWJvY29tICovCisJe1VTQl9ERVZJQ0UoMHgxM2QxLCAweGFiZTYpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfUlRMODE4N30sCisJLyogUWNvbSAqLworCXtVU0JfREVWSUNFKDB4MThFOCwgMHg2MjMyKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1JUTDgxODd9LAorCS8qIEFpckxpdmUgKi8KKwl7VVNCX0RFVklDRSgweDFiNzUsIDB4ODE4NyksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9SVEw4MTg3fSwKKwkvKiBMaW5rc3lzICovCisJe1VTQl9ERVZJQ0UoMHgxNzM3LCAweDAwNzMpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfUlRMODE4N0J9LAorCXt9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgcnRsODE4N190YWJsZSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgcnRsODE4eF9yYXRlc1tdID0geworCXsgLmJpdHJhdGUgPSAxMCwgLmh3X3ZhbHVlID0gMCwgfSwKKwl7IC5iaXRyYXRlID0gMjAsIC5od192YWx1ZSA9IDEsIH0sCisJeyAuYml0cmF0ZSA9IDU1LCAuaHdfdmFsdWUgPSAyLCB9LAorCXsgLmJpdHJhdGUgPSAxMTAsIC5od192YWx1ZSA9IDMsIH0sCisJeyAuYml0cmF0ZSA9IDYwLCAuaHdfdmFsdWUgPSA0LCB9LAorCXsgLmJpdHJhdGUgPSA5MCwgLmh3X3ZhbHVlID0gNSwgfSwKKwl7IC5iaXRyYXRlID0gMTIwLCAuaHdfdmFsdWUgPSA2LCB9LAorCXsgLmJpdHJhdGUgPSAxODAsIC5od192YWx1ZSA9IDcsIH0sCisJeyAuYml0cmF0ZSA9IDI0MCwgLmh3X3ZhbHVlID0gOCwgfSwKKwl7IC5iaXRyYXRlID0gMzYwLCAuaHdfdmFsdWUgPSA5LCB9LAorCXsgLmJpdHJhdGUgPSA0ODAsIC5od192YWx1ZSA9IDEwLCB9LAorCXsgLmJpdHJhdGUgPSA1NDAsIC5od192YWx1ZSA9IDExLCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCBydGw4MTh4X2NoYW5uZWxzW10gPSB7CisJeyAuY2VudGVyX2ZyZXEgPSAyNDEyIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDE3IH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDIyIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDI3IH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDMyIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDM3IH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDQyIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDQ3IH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDUyIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDU3IH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDYyIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDY3IH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDcyIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDg0IH0sCit9OworCitzdGF0aWMgdm9pZCBydGw4MTg3X2lvd3JpdGVfYXN5bmNfY2Ioc3RydWN0IHVyYiAqdXJiKQoreworCWtmcmVlKHVyYi0+Y29udGV4dCk7Cit9CisKK3N0YXRpYyB2b2lkIHJ0bDgxODdfaW93cml0ZV9hc3luYyhzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2LCBfX2xlMTYgYWRkciwKKwkJCQkgIHZvaWQgKmRhdGEsIHUxNiBsZW4pCit7CisJc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqZHI7CisJc3RydWN0IHVyYiAqdXJiOworCXN0cnVjdCBydGw4MTg3X2FzeW5jX3dyaXRlX2RhdGEgeworCQl1OCBkYXRhWzRdOworCQlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0IGRyOworCX0gKmJ1ZjsKKwlpbnQgcmM7CisKKwlidWYgPSBrbWFsbG9jKHNpemVvZigqYnVmKSwgR0ZQX0FUT01JQyk7CisJaWYgKCFidWYpCisJCXJldHVybjsKKworCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0FUT01JQyk7CisJaWYgKCF1cmIpIHsKKwkJa2ZyZWUoYnVmKTsKKwkJcmV0dXJuOworCX0KKworCWRyID0gJmJ1Zi0+ZHI7CisKKwlkci0+YlJlcXVlc3RUeXBlID0gUlRMODE4N19SRVFUX1dSSVRFOworCWRyLT5iUmVxdWVzdCA9IFJUTDgxODdfUkVRX1NFVF9SRUc7CisJZHItPndWYWx1ZSA9IGFkZHI7CisJZHItPndJbmRleCA9IDA7CisJZHItPndMZW5ndGggPSBjcHVfdG9fbGUxNihsZW4pOworCisJbWVtY3B5KGJ1ZiwgZGF0YSwgbGVuKTsKKworCXVzYl9maWxsX2NvbnRyb2xfdXJiKHVyYiwgcHJpdi0+dWRldiwgdXNiX3NuZGN0cmxwaXBlKHByaXYtPnVkZXYsIDApLAorCQkJICAgICAodW5zaWduZWQgY2hhciAqKWRyLCBidWYsIGxlbiwKKwkJCSAgICAgcnRsODE4N19pb3dyaXRlX2FzeW5jX2NiLCBidWYpOworCXVzYl9hbmNob3JfdXJiKHVyYiwgJnByaXYtPmFuY2hvcmVkKTsKKwlyYyA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHJjIDwgMCkgeworCQlrZnJlZShidWYpOworCQl1c2JfdW5hbmNob3JfdXJiKHVyYik7CisJfQorCXVzYl9mcmVlX3VyYih1cmIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcnRsODE4eF9pb3dyaXRlMzJfYXN5bmMoc3RydWN0IHJ0bDgxODdfcHJpdiAqcHJpdiwKKwkJCQkJICAgX19sZTMyICphZGRyLCB1MzIgdmFsKQoreworCV9fbGUzMiBidWYgPSBjcHVfdG9fbGUzMih2YWwpOworCisJcnRsODE4N19pb3dyaXRlX2FzeW5jKHByaXYsIGNwdV90b19sZTE2KCh1bnNpZ25lZCBsb25nKWFkZHIpLAorCQkJICAgICAgJmJ1Ziwgc2l6ZW9mKGJ1ZikpOworfQorCit2b2lkIHJ0bDgxODdfd3JpdGVfcGh5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgdTggYWRkciwgdTMyIGRhdGEpCit7CisJc3RydWN0IHJ0bDgxODdfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKKworCWRhdGEgPDw9IDg7CisJZGF0YSB8PSBhZGRyIHwgMHg4MDsKKworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+UEhZWzNdLCAoZGF0YSA+PiAyNCkgJiAweEZGKTsKKwlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPlBIWVsyXSwgKGRhdGEgPj4gMTYpICYgMHhGRik7CisJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5QSFlbMV0sIChkYXRhID4+IDgpICYgMHhGRik7CisJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5QSFlbMF0sIGRhdGEgJiAweEZGKTsKK30KKworc3RhdGljIHZvaWQgcnRsODE4N190eF9jYihzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IChzdHJ1Y3Qgc2tfYnVmZiAqKXVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBpbmZvLT5yYXRlX2RyaXZlcl9kYXRhWzBdOworCXN0cnVjdCBydGw4MTg3X3ByaXYgKnByaXYgPSBody0+cHJpdjsKKworCXNrYl9wdWxsKHNrYiwgcHJpdi0+aXNfcnRsODE4N2IgPyBzaXplb2Yoc3RydWN0IHJ0bDgxODdiX3R4X2hkcikgOgorCQkJCQkgIHNpemVvZihzdHJ1Y3QgcnRsODE4N190eF9oZHIpKTsKKwlpZWVlODAyMTFfdHhfaW5mb19jbGVhcl9zdGF0dXMoaW5mbyk7CisKKwlpZiAoISh1cmItPnN0YXR1cykgJiYgIShpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfTk9fQUNLKSkgeworCQlpZiAocHJpdi0+aXNfcnRsODE4N2IpIHsKKwkJCXNrYl9xdWV1ZV90YWlsKCZwcml2LT5iX3R4X3N0YXR1cy5xdWV1ZSwgc2tiKTsKKworCQkJLyogcXVldWUgaXMgImZ1bGwiLCBkaXNjYXJkIGxhc3QgaXRlbXMgKi8KKwkJCXdoaWxlIChza2JfcXVldWVfbGVuKCZwcml2LT5iX3R4X3N0YXR1cy5xdWV1ZSkgPiA1KSB7CisJCQkJc3RydWN0IHNrX2J1ZmYgKm9sZF9za2I7CisKKwkJCQlkZXZfZGJnKCZwcml2LT51ZGV2LT5kZXYsCisJCQkJCSJ0cmFuc21pdCBzdGF0dXMgcXVldWUgZnVsbFxuIik7CisKKwkJCQlvbGRfc2tiID0gc2tiX2RlcXVldWUoJnByaXYtPmJfdHhfc3RhdHVzLnF1ZXVlKTsKKwkJCQlpZWVlODAyMTFfdHhfc3RhdHVzX2lycXNhZmUoaHcsIG9sZF9za2IpOworCQkJfQorCQkJcmV0dXJuOworCQl9IGVsc2UgeworCQkJaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRfQUNLOworCQl9CisJfQorCWlmIChwcml2LT5pc19ydGw4MTg3YikKKwkJaWVlZTgwMjExX3R4X3N0YXR1c19pcnFzYWZlKGh3LCBza2IpOworCWVsc2UgeworCQkvKiBSZXRyeSBpbmZvcm1hdGlvbiBmb3IgdGhlIFJUSTgxODcgaXMgb25seSBhdmFpbGFibGUgYnkKKwkJICogcmVhZGluZyBhIHJlZ2lzdGVyIGluIHRoZSBkZXZpY2UuIFdlIGFyZSBpbiBpbnRlcnJ1cHQgbW9kZQorCQkgKiBoZXJlLCB0aHVzIHF1ZXVlIHRoZSBza2IgYW5kIGZpbmlzaCBvbiBhIHdvcmsgcXVldWUuICovCisJCXNrYl9xdWV1ZV90YWlsKCZwcml2LT5iX3R4X3N0YXR1cy5xdWV1ZSwgc2tiKTsKKwkJaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayhodywgJnByaXYtPndvcmssIDApOworCX0KK30KKworc3RhdGljIGludCBydGw4MTg3X3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2ID0gZGV2LT5wcml2OworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwl1bnNpZ25lZCBpbnQgZXA7CisJdm9pZCAqYnVmOworCXN0cnVjdCB1cmIgKnVyYjsKKwlfX2xlMTYgcnRzX2R1ciA9IDA7CisJdTMyIGZsYWdzOworCWludCByYzsKKworCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0FUT01JQyk7CisJaWYgKCF1cmIpIHsKKwkJa2ZyZWVfc2tiKHNrYik7CisJCXJldHVybiBORVRERVZfVFhfT0s7CisJfQorCisJZmxhZ3MgPSBza2ItPmxlbjsKKwlmbGFncyB8PSBSVEw4MThYX1RYX0RFU0NfRkxBR19OT19FTkM7CisKKwlmbGFncyB8PSBpZWVlODAyMTFfZ2V0X3R4X3JhdGUoZGV2LCBpbmZvKS0+aHdfdmFsdWUgPDwgMjQ7CisJaWYgKGllZWU4MDIxMV9oYXNfbW9yZWZyYWdzKCgoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGEpLT5mcmFtZV9jb250cm9sKSkKKwkJZmxhZ3MgfD0gUlRMODE4WF9UWF9ERVNDX0ZMQUdfTU9SRUZSQUc7CisJaWYgKGluZm8tPmNvbnRyb2wucmF0ZXNbMF0uZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfVVNFX1JUU19DVFMpIHsKKwkJZmxhZ3MgfD0gUlRMODE4WF9UWF9ERVNDX0ZMQUdfUlRTOworCQlmbGFncyB8PSBpZWVlODAyMTFfZ2V0X3J0c19jdHNfcmF0ZShkZXYsIGluZm8pLT5od192YWx1ZSA8PCAxOTsKKwkJcnRzX2R1ciA9IGllZWU4MDIxMV9ydHNfZHVyYXRpb24oZGV2LCBwcml2LT52aWYsCisJCQkJCQkgc2tiLT5sZW4sIGluZm8pOworCX0gZWxzZSBpZiAoaW5mby0+Y29udHJvbC5yYXRlc1swXS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19VU0VfQ1RTX1BST1RFQ1QpIHsKKwkJZmxhZ3MgfD0gUlRMODE4WF9UWF9ERVNDX0ZMQUdfQ1RTOworCQlmbGFncyB8PSBpZWVlODAyMTFfZ2V0X3J0c19jdHNfcmF0ZShkZXYsIGluZm8pLT5od192YWx1ZSA8PCAxOTsKKwl9CisKKwlpZiAoIXByaXYtPmlzX3J0bDgxODdiKSB7CisJCXN0cnVjdCBydGw4MTg3X3R4X2hkciAqaGRyID0KKwkJCShzdHJ1Y3QgcnRsODE4N190eF9oZHIgKilza2JfcHVzaChza2IsIHNpemVvZigqaGRyKSk7CisJCWhkci0+ZmxhZ3MgPSBjcHVfdG9fbGUzMihmbGFncyk7CisJCWhkci0+bGVuID0gMDsKKwkJaGRyLT5ydHNfZHVyYXRpb24gPSBydHNfZHVyOworCQloZHItPnJldHJ5ID0gY3B1X3RvX2xlMzIoKGluZm8tPmNvbnRyb2wucmF0ZXNbMF0uY291bnQgLSAxKSA8PCA4KTsKKwkJYnVmID0gaGRyOworCisJCWVwID0gMjsKKwl9IGVsc2UgeworCQkvKiBmYyBuZWVkcyB0byBiZSBjYWxjdWxhdGVkIGJlZm9yZSBza2JfcHVzaCgpICovCisJCXVuc2lnbmVkIGludCBlcG1hcFs0XSA9IHsgNiwgNywgNSwgNCB9OworCQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqdHhfaGRyID0KKwkJCShzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKShza2ItPmRhdGEpOworCQl1MTYgZmMgPSBsZTE2X3RvX2NwdSh0eF9oZHItPmZyYW1lX2NvbnRyb2wpOworCisJCXN0cnVjdCBydGw4MTg3Yl90eF9oZHIgKmhkciA9CisJCQkoc3RydWN0IHJ0bDgxODdiX3R4X2hkciAqKXNrYl9wdXNoKHNrYiwgc2l6ZW9mKCpoZHIpKTsKKwkJc3RydWN0IGllZWU4MDIxMV9yYXRlICp0eHJhdGUgPQorCQkJaWVlZTgwMjExX2dldF90eF9yYXRlKGRldiwgaW5mbyk7CisJCW1lbXNldChoZHIsIDAsIHNpemVvZigqaGRyKSk7CisJCWhkci0+ZmxhZ3MgPSBjcHVfdG9fbGUzMihmbGFncyk7CisJCWhkci0+cnRzX2R1cmF0aW9uID0gcnRzX2R1cjsKKwkJaGRyLT5yZXRyeSA9IGNwdV90b19sZTMyKChpbmZvLT5jb250cm9sLnJhdGVzWzBdLmNvdW50IC0gMSkgPDwgOCk7CisJCWhkci0+dHhfZHVyYXRpb24gPQorCQkJaWVlZTgwMjExX2dlbmVyaWNfZnJhbWVfZHVyYXRpb24oZGV2LCBwcml2LT52aWYsCisJCQkJCQkJIHNrYi0+bGVuLCB0eHJhdGUpOworCQlidWYgPSBoZHI7CisKKwkJaWYgKChmYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSA9PSBJRUVFODAyMTFfRlRZUEVfTUdNVCkKKwkJCWVwID0gMTI7CisJCWVsc2UKKwkJCWVwID0gZXBtYXBbc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYildOworCX0KKworCWluZm8tPnJhdGVfZHJpdmVyX2RhdGFbMF0gPSBkZXY7CisJaW5mby0+cmF0ZV9kcml2ZXJfZGF0YVsxXSA9IHVyYjsKKworCXVzYl9maWxsX2J1bGtfdXJiKHVyYiwgcHJpdi0+dWRldiwgdXNiX3NuZGJ1bGtwaXBlKHByaXYtPnVkZXYsIGVwKSwKKwkJCSAgYnVmLCBza2ItPmxlbiwgcnRsODE4N190eF9jYiwgc2tiKTsKKwl1cmItPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9aRVJPX1BBQ0tFVDsKKwl1c2JfYW5jaG9yX3VyYih1cmIsICZwcml2LT5hbmNob3JlZCk7CisJcmMgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCWlmIChyYyA8IDApIHsKKwkJdXNiX3VuYW5jaG9yX3VyYih1cmIpOworCQlrZnJlZV9za2Ioc2tiKTsKKwl9CisJdXNiX2ZyZWVfdXJiKHVyYik7CisKKwlyZXR1cm4gTkVUREVWX1RYX09LOworfQorCitzdGF0aWMgdm9pZCBydGw4MTg3X3J4X2NiKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gKHN0cnVjdCBza19idWZmICopdXJiLT5jb250ZXh0OworCXN0cnVjdCBydGw4MTg3X3J4X2luZm8gKmluZm8gPSAoc3RydWN0IHJ0bDgxODdfcnhfaW5mbyAqKXNrYi0+Y2I7CisJc3RydWN0IGllZWU4MDIxMV9odyAqZGV2ID0gaW5mby0+ZGV2OworCXN0cnVjdCBydGw4MTg3X3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CisJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgcnhfc3RhdHVzID0geyAwIH07CisJaW50IHJhdGUsIHNpZ25hbDsKKwl1MzIgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBmOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnJ4X3F1ZXVlLmxvY2ssIGYpOworCV9fc2tiX3VubGluayhza2IsICZwcml2LT5yeF9xdWV1ZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+cnhfcXVldWUubG9jaywgZik7CisJc2tiX3B1dChza2IsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisKKwlpZiAodW5saWtlbHkodXJiLT5zdGF0dXMpKSB7CisJCWRldl9rZnJlZV9za2JfaXJxKHNrYik7CisJCXJldHVybjsKKwl9CisKKwlpZiAoIXByaXYtPmlzX3J0bDgxODdiKSB7CisJCXN0cnVjdCBydGw4MTg3X3J4X2hkciAqaGRyID0KKwkJCSh0eXBlb2YoaGRyKSkoc2tiX3RhaWxfcG9pbnRlcihza2IpIC0gc2l6ZW9mKCpoZHIpKTsKKwkJZmxhZ3MgPSBsZTMyX3RvX2NwdShoZHItPmZsYWdzKTsKKwkJLyogQXMgd2l0aCB0aGUgUlRMODE4N0IgYmVsb3csIHRoZSBBR0MgaXMgdXNlZCB0byBjYWxjdWxhdGUKKwkJICogc2lnbmFsIHN0cmVuZ3RoLiBJbiB0aGlzIGNhc2UsIHRoZSBzY2FsaW5nCisJCSAqIGNvbnN0YW50cyBhcmUgZGVyaXZlZCBmcm9tIHRoZSBvdXRwdXQgb2YgcDU0dXNiLgorCQkgKi8KKwkJc2lnbmFsID0gLTQgLSAoKDI3ICogaGRyLT5hZ2MpID4+IDYpOworCQlyeF9zdGF0dXMuYW50ZW5uYSA9IChoZHItPnNpZ25hbCA+PiA3KSAmIDE7CisJCXJ4X3N0YXR1cy5tYWN0aW1lID0gbGU2NF90b19jcHUoaGRyLT5tYWNfdGltZSk7CisJfSBlbHNlIHsKKwkJc3RydWN0IHJ0bDgxODdiX3J4X2hkciAqaGRyID0KKwkJCSh0eXBlb2YoaGRyKSkoc2tiX3RhaWxfcG9pbnRlcihza2IpIC0gc2l6ZW9mKCpoZHIpKTsKKwkJLyogVGhlIFJlYWx0ZWsgZGF0YXNoZWV0IGZvciB0aGUgUlRMODE4N0Igc2hvd3MgdGhhdCB0aGUgUlgKKwkJICogaGVhZGVyIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgcXVhbnRpdGllczogc2lnbmFsIHF1YWxpdHksCisJCSAqIFJTU0ksIEFHQywgdGhlIHJlY2VpdmVkIHBvd2VyIGluIGRCLCBhbmQgdGhlIG1lYXN1cmVkIFNOUi4KKwkJICogSW4gdGVzdGluZywgbm9uZSBvZiB0aGVzZSBxdWFudGl0aWVzIHNob3cgcXVhbGl0YXRpdmUKKwkJICogYWdyZWVtZW50IHdpdGggQVAgc2lnbmFsIHN0cmVuZ3RoLCBleGNlcHQgZm9yIHRoZSBBR0MsCisJCSAqIHdoaWNoIGlzIGludmVyc2VseSBwcm9wb3J0aW9uYWwgdG8gdGhlIHN0cmVuZ3RoIG9mIHRoZQorCQkgKiBzaWduYWwuIEluIHRoZSBmb2xsb3dpbmcsIHRoZSBzaWduYWwgc3RyZW5ndGgKKwkJICogaXMgZGVyaXZlZCBmcm9tIHRoZSBBR0MuIFRoZSBhcmJpdHJhcnkgc2NhbGluZyBjb25zdGFudHMKKwkJICogYXJlIGNob3NlbiB0byBtYWtlIHRoZSByZXN1bHRzIGNsb3NlIHRvIHRoZSB2YWx1ZXMgb2J0YWluZWQKKwkJICogZm9yIGEgQkNNNDMxMiB1c2luZyBiNDMgYXMgdGhlIGRyaXZlci4gVGhlIG5vaXNlIGlzIGlnbm9yZWQKKwkJICogZm9yIG5vdy4KKwkJICovCisJCWZsYWdzID0gbGUzMl90b19jcHUoaGRyLT5mbGFncyk7CisJCXNpZ25hbCA9IDE0IC0gaGRyLT5hZ2MgLyAyOworCQlyeF9zdGF0dXMuYW50ZW5uYSA9IChoZHItPnJzc2kgPj4gNykgJiAxOworCQlyeF9zdGF0dXMubWFjdGltZSA9IGxlNjRfdG9fY3B1KGhkci0+bWFjX3RpbWUpOworCX0KKworCXJ4X3N0YXR1cy5zaWduYWwgPSBzaWduYWw7CisJcHJpdi0+c2lnbmFsID0gc2lnbmFsOworCXJhdGUgPSAoZmxhZ3MgPj4gMjApICYgMHhGOworCXNrYl90cmltKHNrYiwgZmxhZ3MgJiAweDBGRkYpOworCXJ4X3N0YXR1cy5yYXRlX2lkeCA9IHJhdGU7CisJcnhfc3RhdHVzLmZyZXEgPSBkZXYtPmNvbmYuY2hhbm5lbC0+Y2VudGVyX2ZyZXE7CisJcnhfc3RhdHVzLmJhbmQgPSBkZXYtPmNvbmYuY2hhbm5lbC0+YmFuZDsKKwlyeF9zdGF0dXMuZmxhZyB8PSBSWF9GTEFHX1RTRlQ7CisJaWYgKGZsYWdzICYgUlRMODE4WF9SWF9ERVNDX0ZMQUdfQ1JDMzJfRVJSKQorCQlyeF9zdGF0dXMuZmxhZyB8PSBSWF9GTEFHX0ZBSUxFRF9GQ1NfQ1JDOworCW1lbWNweShJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKSwgJnJ4X3N0YXR1cywgc2l6ZW9mKHJ4X3N0YXR1cykpOworCWllZWU4MDIxMV9yeF9pcnFzYWZlKGRldiwgc2tiKTsKKworCXNrYiA9IGRldl9hbGxvY19za2IoUlRMODE4N19NQVhfUlgpOworCWlmICh1bmxpa2VseSghc2tiKSkgeworCQkvKiBUT0RPIGNoZWNrIHJ4IHF1ZXVlIGxlbmd0aCBhbmQgcmVmaWxsICpzb21ld2hlcmUqICovCisJCXJldHVybjsKKwl9CisKKwlpbmZvID0gKHN0cnVjdCBydGw4MTg3X3J4X2luZm8gKilza2ItPmNiOworCWluZm8tPnVyYiA9IHVyYjsKKwlpbmZvLT5kZXYgPSBkZXY7CisJdXJiLT50cmFuc2Zlcl9idWZmZXIgPSBza2JfdGFpbF9wb2ludGVyKHNrYik7CisJdXJiLT5jb250ZXh0ID0gc2tiOworCXNrYl9xdWV1ZV90YWlsKCZwcml2LT5yeF9xdWV1ZSwgc2tiKTsKKworCXVzYl9hbmNob3JfdXJiKHVyYiwgJnByaXYtPmFuY2hvcmVkKTsKKwlpZiAodXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKSkgeworCQl1c2JfdW5hbmNob3JfdXJiKHVyYik7CisJCXNrYl91bmxpbmsoc2tiLCAmcHJpdi0+cnhfcXVldWUpOworCQlkZXZfa2ZyZWVfc2tiX2lycShza2IpOworCX0KK30KKworc3RhdGljIGludCBydGw4MTg3X2luaXRfdXJicyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCit7CisJc3RydWN0IHJ0bDgxODdfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgdXJiICplbnRyeSA9IE5VTEw7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgcnRsODE4N19yeF9pbmZvICppbmZvOworCWludCByZXQgPSAwOworCisJd2hpbGUgKHNrYl9xdWV1ZV9sZW4oJnByaXYtPnJ4X3F1ZXVlKSA8IDE2KSB7CisJCXNrYiA9IF9fZGV2X2FsbG9jX3NrYihSVEw4MTg3X01BWF9SWCwgR0ZQX0tFUk5FTCk7CisJCWlmICghc2tiKSB7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBlcnI7CisJCX0KKwkJZW50cnkgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCQlpZiAoIWVudHJ5KSB7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBlcnI7CisJCX0KKwkJdXNiX2ZpbGxfYnVsa191cmIoZW50cnksIHByaXYtPnVkZXYsCisJCQkJICB1c2JfcmN2YnVsa3BpcGUocHJpdi0+dWRldiwKKwkJCQkgIHByaXYtPmlzX3J0bDgxODdiID8gMyA6IDEpLAorCQkJCSAgc2tiX3RhaWxfcG9pbnRlcihza2IpLAorCQkJCSAgUlRMODE4N19NQVhfUlgsIHJ0bDgxODdfcnhfY2IsIHNrYik7CisJCWluZm8gPSAoc3RydWN0IHJ0bDgxODdfcnhfaW5mbyAqKXNrYi0+Y2I7CisJCWluZm8tPnVyYiA9IGVudHJ5OworCQlpbmZvLT5kZXYgPSBkZXY7CisJCXNrYl9xdWV1ZV90YWlsKCZwcml2LT5yeF9xdWV1ZSwgc2tiKTsKKwkJdXNiX2FuY2hvcl91cmIoZW50cnksICZwcml2LT5hbmNob3JlZCk7CisJCXJldCA9IHVzYl9zdWJtaXRfdXJiKGVudHJ5LCBHRlBfS0VSTkVMKTsKKwkJaWYgKHJldCkgeworCQkJc2tiX3VubGluayhza2IsICZwcml2LT5yeF9xdWV1ZSk7CisJCQl1c2JfdW5hbmNob3JfdXJiKGVudHJ5KTsKKwkJCWdvdG8gZXJyOworCQl9CisJCXVzYl9mcmVlX3VyYihlbnRyeSk7CisJfQorCXJldHVybiByZXQ7CisKK2VycjoKKwl1c2JfZnJlZV91cmIoZW50cnkpOworCWtmcmVlX3NrYihza2IpOworCXVzYl9raWxsX2FuY2hvcmVkX3VyYnMoJnByaXYtPmFuY2hvcmVkKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBydGw4MTg3Yl9zdGF0dXNfY2Ioc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gKHN0cnVjdCBpZWVlODAyMTFfaHcgKil1cmItPmNvbnRleHQ7CisJc3RydWN0IHJ0bDgxODdfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCXU2NCB2YWw7CisJdW5zaWduZWQgaW50IGNtZF90eXBlOworCisJaWYgKHVubGlrZWx5KHVyYi0+c3RhdHVzKSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBSZWFkIGZyb20gc3RhdHVzIGJ1ZmZlcjoKKwkgKgorCSAqIGJpdHMgWzMwOjMxXSA9IGNtZCB0eXBlOgorCSAqIC0gMCBpbmRpY2F0ZXMgdHggYmVhY29uIGludGVycnVwdAorCSAqIC0gMSBpbmRpY2F0ZXMgdHggY2xvc2UgZGVzY3JpcHRvcgorCSAqCisJICogSW4gdGhlIGNhc2Ugb2YgdHggYmVhY29uIGludGVycnVwdDoKKwkgKiBbMDo5XSA9IExhc3QgQmVhY29uIENXCisJICogWzEwOjI5XSA9IHJlc2VydmVkCisJICogWzMwOjMxXSA9IDAwYgorCSAqIFszMjo2M10gPSBMYXN0IEJlYWNvbiBUU0YKKwkgKgorCSAqIElmIGl0J3MgdHggY2xvc2UgZGVzY3JpcHRvcjoKKwkgKiBbMDo3XSA9IFBhY2tldCBSZXRyeSBDb3VudAorCSAqIFs4OjE0XSA9IFJUUyBSZXRyeSBDb3VudAorCSAqIFsxNV0gPSBUT0sKKwkgKiBbMTY6MjddID0gU2VxdWVuY2UgTm8KKwkgKiBbMjhdID0gTFMKKwkgKiBbMjldID0gRlMKKwkgKiBbMzA6MzFdID0gMDFiCisJICogWzMyOjQ3XSA9IHVudXNlZCAocmVzZXJ2ZWQ/KQorCSAqIFs0ODo2M10gPSBNQUMgVXNlZCBUaW1lCisJICovCisJdmFsID0gbGU2NF90b19jcHUocHJpdi0+Yl90eF9zdGF0dXMuYnVmKTsKKworCWNtZF90eXBlID0gKHZhbCA+PiAzMCkgJiAweDM7CisJaWYgKGNtZF90eXBlID09IDEpIHsKKwkJdW5zaWduZWQgaW50IHBrdF9yYywgc2VxX25vOworCQlib29sIHRvazsKKwkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwkJc3RydWN0IGllZWU4MDIxMV9oZHIgKmllZWU4MDIxMWhkcjsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCQlwa3RfcmMgPSB2YWwgJiAweEZGOworCQl0b2sgPSB2YWwgJiAoMSA8PCAxNSk7CisJCXNlcV9ubyA9ICh2YWwgPj4gMTYpICYgMHhGRkY7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmJfdHhfc3RhdHVzLnF1ZXVlLmxvY2ssIGZsYWdzKTsKKwkJc2tiX3F1ZXVlX3JldmVyc2Vfd2FsaygmcHJpdi0+Yl90eF9zdGF0dXMucXVldWUsIHNrYikgeworCQkJaWVlZTgwMjExaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOworCisJCQkvKgorCQkJICogV2hpbGUgdGVzdGluZywgaXQgd2FzIGRpc2NvdmVyZWQgdGhhdCB0aGUgc2VxX25vCisJCQkgKiBkb2Vzbid0IGFjdHVhbGx5IGNvbnRhaW5zIHRoZSBzZXF1ZW5jZSBudW1iZXIuCisJCQkgKiBJbnN0ZWFkIG9mIHJldHVybmluZyBqdXN0IHRoZSAxMiBiaXRzIG9mIHNlcXVlbmNlCisJCQkgKiBudW1iZXIsIGhhcmR3YXJlIGlzIHJldHVybmluZyBlbnRpcmUgc2VxdWVuY2UgY29udHJvbAorCQkJICogKGZyYWdtZW50IG51bWJlciBwbHVzIHNlcXVlbmNlIG51bWJlcikgaW4gYSAxMiBiaXQKKwkJCSAqIG9ubHkgZmllbGQgb3ZlcmZsb3dpbmcgYWZ0ZXIgc29tZSB0aW1lLiBBcyBhCisJCQkgKiB3b3JrYXJvdW5kLCBqdXN0IGNvbnNpZGVyIHRoZSBsb3dlciBiaXRzLCBhbmQgZXhwZWN0CisJCQkgKiBpdCdzIHVubGlrZWx5IHdlIHdyb25nbHkgYWNrIHNvbWUgc2VudCBkYXRhCisJCQkgKi8KKwkJCWlmICgobGUxNl90b19jcHUoaWVlZTgwMjExaGRyLT5zZXFfY3RybCkKKwkJCSAgICAmIDB4RkZGKSA9PSBzZXFfbm8pCisJCQkJYnJlYWs7CisJCX0KKwkJaWYgKHNrYiAhPSAoc3RydWN0IHNrX2J1ZmYgKikgJnByaXYtPmJfdHhfc3RhdHVzLnF1ZXVlKSB7CisJCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisKKwkJCV9fc2tiX3VubGluayhza2IsICZwcml2LT5iX3R4X3N0YXR1cy5xdWV1ZSk7CisJCQlpZiAodG9rKQorCQkJCWluZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUX0FDSzsKKwkJCWluZm8tPnN0YXR1cy5yYXRlc1swXS5jb3VudCA9IHBrdF9yYyArIDE7CisKKwkJCWllZWU4MDIxMV90eF9zdGF0dXNfaXJxc2FmZShodywgc2tiKTsKKwkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5iX3R4X3N0YXR1cy5xdWV1ZS5sb2NrLCBmbGFncyk7CisJfQorCisJdXNiX2FuY2hvcl91cmIodXJiLCAmcHJpdi0+YW5jaG9yZWQpOworCWlmICh1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpKQorCQl1c2JfdW5hbmNob3JfdXJiKHVyYik7Cit9CisKK3N0YXRpYyBpbnQgcnRsODE4N2JfaW5pdF9zdGF0dXNfdXJiKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKK3sKKwlzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2ID0gZGV2LT5wcml2OworCXN0cnVjdCB1cmIgKmVudHJ5OworCWludCByZXQgPSAwOworCisJZW50cnkgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCWlmICghZW50cnkpCisJCXJldHVybiAtRU5PTUVNOworCisJdXNiX2ZpbGxfYnVsa191cmIoZW50cnksIHByaXYtPnVkZXYsIHVzYl9yY3ZidWxrcGlwZShwcml2LT51ZGV2LCA5KSwKKwkJCSAgJnByaXYtPmJfdHhfc3RhdHVzLmJ1Ziwgc2l6ZW9mKHByaXYtPmJfdHhfc3RhdHVzLmJ1ZiksCisJCQkgIHJ0bDgxODdiX3N0YXR1c19jYiwgZGV2KTsKKworCXVzYl9hbmNob3JfdXJiKGVudHJ5LCAmcHJpdi0+YW5jaG9yZWQpOworCXJldCA9IHVzYl9zdWJtaXRfdXJiKGVudHJ5LCBHRlBfS0VSTkVMKTsKKwlpZiAocmV0KQorCQl1c2JfdW5hbmNob3JfdXJiKGVudHJ5KTsKKwl1c2JfZnJlZV91cmIoZW50cnkpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgcnRsODE4N19zZXRfYW5hcGFyYW0oc3RydWN0IHJ0bDgxODdfcHJpdiAqcHJpdiwgYm9vbCByZm9uKQoreworCXUzMiBhbmFwYXJhbSwgYW5hcGFyYW0yOworCXU4IGFuYXBhcmFtMywgcmVnOworCisJaWYgKCFwcml2LT5pc19ydGw4MTg3YikgeworCQlpZiAocmZvbikgeworCQkJYW5hcGFyYW0gPSBSVEw4MTg3X1JUTDgyMjVfQU5BUEFSQU1fT047CisJCQlhbmFwYXJhbTIgPSBSVEw4MTg3X1JUTDgyMjVfQU5BUEFSQU0yX09OOworCQl9IGVsc2UgeworCQkJYW5hcGFyYW0gPSBSVEw4MTg3X1JUTDgyMjVfQU5BUEFSQU1fT0ZGOworCQkJYW5hcGFyYW0yID0gUlRMODE4N19SVEw4MjI1X0FOQVBBUkFNMl9PRkY7CisJCX0KKwl9IGVsc2UgeworCQlpZiAocmZvbikgeworCQkJYW5hcGFyYW0gPSBSVEw4MTg3Ql9SVEw4MjI1X0FOQVBBUkFNX09OOworCQkJYW5hcGFyYW0yID0gUlRMODE4N0JfUlRMODIyNV9BTkFQQVJBTTJfT047CisJCQlhbmFwYXJhbTMgPSBSVEw4MTg3Ql9SVEw4MjI1X0FOQVBBUkFNM19PTjsKKwkJfSBlbHNlIHsKKwkJCWFuYXBhcmFtID0gUlRMODE4N0JfUlRMODIyNV9BTkFQQVJBTV9PRkY7CisJCQlhbmFwYXJhbTIgPSBSVEw4MTg3Ql9SVEw4MjI1X0FOQVBBUkFNMl9PRkY7CisJCQlhbmFwYXJhbTMgPSBSVEw4MTg3Ql9SVEw4MjI1X0FOQVBBUkFNM19PRkY7CisJCX0KKwl9CisKKwlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQsCisJCQkgUlRMODE4WF9FRVBST01fQ01EX0NPTkZJRyk7CisJcmVnID0gcnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPkNPTkZJRzMpOworCXJlZyB8PSBSVEw4MThYX0NPTkZJRzNfQU5BUEFSQU1fV1JJVEU7CisJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5DT05GSUczLCByZWcpOworCXJ0bDgxOHhfaW93cml0ZTMyKHByaXYsICZwcml2LT5tYXAtPkFOQVBBUkFNLCBhbmFwYXJhbSk7CisJcnRsODE4eF9pb3dyaXRlMzIocHJpdiwgJnByaXYtPm1hcC0+QU5BUEFSQU0yLCBhbmFwYXJhbTIpOworCWlmIChwcml2LT5pc19ydGw4MTg3YikKKwkJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5BTkFQQVJBTTMsIGFuYXBhcmFtMyk7CisJcmVnICY9IH5SVEw4MThYX0NPTkZJRzNfQU5BUEFSQU1fV1JJVEU7CisJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5DT05GSUczLCByZWcpOworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCwKKwkJCSBSVEw4MThYX0VFUFJPTV9DTURfTk9STUFMKTsKK30KKworc3RhdGljIGludCBydGw4MTg3X2NtZF9yZXNldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCit7CisJc3RydWN0IHJ0bDgxODdfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKKwl1OCByZWc7CisJaW50IGk7CisKKwlyZWcgPSBydGw4MTh4X2lvcmVhZDgocHJpdiwgJnByaXYtPm1hcC0+Q01EKTsKKwlyZWcgJj0gKDEgPDwgMSk7CisJcmVnIHw9IFJUTDgxOFhfQ01EX1JFU0VUOworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+Q01ELCByZWcpOworCisJaSA9IDEwOworCWRvIHsKKwkJbXNsZWVwKDIpOworCQlpZiAoIShydGw4MTh4X2lvcmVhZDgocHJpdiwgJnByaXYtPm1hcC0+Q01EKSAmCisJCSAgICAgIFJUTDgxOFhfQ01EX1JFU0VUKSkKKwkJCWJyZWFrOworCX0gd2hpbGUgKC0taSk7CisKKwlpZiAoIWkpIHsKKwkJd2lwaHlfZXJyKGRldi0+d2lwaHksICJSZXNldCB0aW1lb3V0IVxuIik7CisJCXJldHVybiAtRVRJTUVET1VUOworCX0KKworCS8qIHJlbG9hZCByZWdpc3RlcnMgZnJvbSBlZXByb20gKi8KKwlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQsIFJUTDgxOFhfRUVQUk9NX0NNRF9MT0FEKTsKKworCWkgPSAxMDsKKwlkbyB7CisJCW1zbGVlcCg0KTsKKwkJaWYgKCEocnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQpICYKKwkJICAgICAgUlRMODE4WF9FRVBST01fQ01EX0NPTkZJRykpCisJCQlicmVhazsKKwl9IHdoaWxlICgtLWkpOworCisJaWYgKCFpKSB7CisJCXdpcGh5X2VycihkZXYtPndpcGh5LCAiZWVwcm9tIHJlc2V0IHRpbWVvdXQhXG4iKTsKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnRsODE4N19pbml0X2h3KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKK3sKKwlzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2ID0gZGV2LT5wcml2OworCXU4IHJlZzsKKwlpbnQgcmVzOworCisJLyogcmVzZXQgKi8KKwlydGw4MTg3X3NldF9hbmFwYXJhbShwcml2LCB0cnVlKTsKKworCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPklOVF9NQVNLLCAwKTsKKworCW1zbGVlcCgyMDApOworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgKHU4ICopMHhGRTE4LCAweDEwKTsKKwlydGw4MTh4X2lvd3JpdGU4KHByaXYsICh1OCAqKTB4RkUxOCwgMHgxMSk7CisJcnRsODE4eF9pb3dyaXRlOChwcml2LCAodTggKikweEZFMTgsIDB4MDApOworCW1zbGVlcCgyMDApOworCisJcmVzID0gcnRsODE4N19jbWRfcmVzZXQoZGV2KTsKKwlpZiAocmVzKQorCQlyZXR1cm4gcmVzOworCisJcnRsODE4N19zZXRfYW5hcGFyYW0ocHJpdiwgdHJ1ZSk7CisKKwkvKiBzZXR1cCBjYXJkICovCisJcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zU2VsZWN0LCAwKTsKKwlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkdQSU8wLCAwKTsKKworCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc1NlbGVjdCwgKDQgPDwgOCkpOworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+R1BJTzAsIDEpOworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+R1BfRU5BQkxFLCAwKTsKKworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCwgUlRMODE4WF9FRVBST01fQ01EX0NPTkZJRyk7CisKKwlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAoX19sZTE2ICopMHhGRkY0LCAweEZGRkYpOworCXJlZyA9IHJ0bDgxOHhfaW9yZWFkOChwcml2LCAmcHJpdi0+bWFwLT5DT05GSUcxKTsKKwlyZWcgJj0gMHgzRjsKKwlyZWcgfD0gMHg4MDsKKwlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkNPTkZJRzEsIHJlZyk7CisKKwlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQsIFJUTDgxOFhfRUVQUk9NX0NNRF9OT1JNQUwpOworCisJcnRsODE4eF9pb3dyaXRlMzIocHJpdiwgJnByaXYtPm1hcC0+SU5UX1RJTUVPVVQsIDApOworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+V1BBX0NPTkYsIDApOworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+UkFURV9GQUxMQkFDSywgMCk7CisKKwkvLyBUT0RPOiBzZXQgUkVTUF9SQVRFIGFuZCBCUlNSIHByb3Blcmx5CisJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5SRVNQX1JBVEUsICg4IDw8IDQpIHwgMCk7CisJcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+QlJTUiwgMHgwMUYzKTsKKworCS8qIGhvc3RfdXNiX2luaXQgKi8KKwlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNTZWxlY3QsIDApOworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+R1BJTzAsIDApOworCXJlZyA9IHJ0bDgxOHhfaW9yZWFkOChwcml2LCAodTggKikweEZFNTMpOworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgKHU4ICopMHhGRTUzLCByZWcgfCAoMSA8PCA3KSk7CisJcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zU2VsZWN0LCAoNCA8PCA4KSk7CisJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5HUElPMCwgMHgyMCk7CisJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5HUF9FTkFCTEUsIDApOworCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc091dHB1dCwgMHg4MCk7CisJcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zU2VsZWN0LCAweDgwKTsKKwlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNFbmFibGUsIDB4ODApOworCW1zbGVlcCgxMDApOworCisJcnRsODE4eF9pb3dyaXRlMzIocHJpdiwgJnByaXYtPm1hcC0+UkZfVElNSU5HLCAweDAwMGE4MDA4KTsKKwlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5CUlNSLCAweEZGRkYpOworCXJ0bDgxOHhfaW93cml0ZTMyKHByaXYsICZwcml2LT5tYXAtPlJGX1BBUkEsIDB4MDAxMDAwNDQpOworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCwKKwkJCSBSVEw4MThYX0VFUFJPTV9DTURfQ09ORklHKTsKKwlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkNPTkZJRzMsIDB4NDQpOworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCwKKwkJCSBSVEw4MThYX0VFUFJPTV9DTURfTk9STUFMKTsKKwlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNFbmFibGUsIDB4MUZGNyk7CisJbXNsZWVwKDEwMCk7CisKKwlwcml2LT5yZi0+aW5pdChkZXYpOworCisJcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+QlJTUiwgMHgwMUYzKTsKKwlyZWcgPSBydGw4MTh4X2lvcmVhZDgocHJpdiwgJnByaXYtPm1hcC0+UEdTRUxFQ1QpICYgfjE7CisJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5QR1NFTEVDVCwgcmVnIHwgMSk7CisJcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgKF9fbGUxNiAqKTB4RkZGRSwgMHgxMCk7CisJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5UQUxMWV9TRUwsIDB4ODApOworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgKHU4ICopMHhGRkZGLCAweDYwKTsKKwlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPlBHU0VMRUNULCByZWcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCB1OCBydGw4MTg3Yl9yZWdfdGFibGVbXVszXSA9IHsKKwl7MHhGMCwgMHgzMiwgMH0sIHsweEYxLCAweDMyLCAwfSwgezB4RjIsIDB4MDAsIDB9LCB7MHhGMywgMHgwMCwgMH0sCisJezB4RjQsIDB4MzIsIDB9LCB7MHhGNSwgMHg0MywgMH0sIHsweEY2LCAweDAwLCAwfSwgezB4RjcsIDB4MDAsIDB9LAorCXsweEY4LCAweDQ2LCAwfSwgezB4RjksIDB4QTQsIDB9LCB7MHhGQSwgMHgwMCwgMH0sIHsweEZCLCAweDAwLCAwfSwKKwl7MHhGQywgMHg5NiwgMH0sIHsweEZELCAweEE0LCAwfSwgezB4RkUsIDB4MDAsIDB9LCB7MHhGRiwgMHgwMCwgMH0sCisKKwl7MHg1OCwgMHg0QiwgMX0sIHsweDU5LCAweDAwLCAxfSwgezB4NUEsIDB4NEIsIDF9LCB7MHg1QiwgMHgwMCwgMX0sCisJezB4NjAsIDB4NEIsIDF9LCB7MHg2MSwgMHgwOSwgMX0sIHsweDYyLCAweDRCLCAxfSwgezB4NjMsIDB4MDksIDF9LAorCXsweENFLCAweDBGLCAxfSwgezB4Q0YsIDB4MDAsIDF9LCB7MHhGMCwgMHg0RSwgMX0sIHsweEYxLCAweDAxLCAxfSwKKwl7MHhGMiwgMHgwMiwgMX0sIHsweEYzLCAweDAzLCAxfSwgezB4RjQsIDB4MDQsIDF9LCB7MHhGNSwgMHgwNSwgMX0sCisJezB4RjYsIDB4MDYsIDF9LCB7MHhGNywgMHgwNywgMX0sIHsweEY4LCAweDA4LCAxfSwKKworCXsweDRFLCAweDAwLCAyfSwgezB4MEMsIDB4MDQsIDJ9LCB7MHgyMSwgMHg2MSwgMn0sIHsweDIyLCAweDY4LCAyfSwKKwl7MHgyMywgMHg2RiwgMn0sIHsweDI0LCAweDc2LCAyfSwgezB4MjUsIDB4N0QsIDJ9LCB7MHgyNiwgMHg4NCwgMn0sCisJezB4MjcsIDB4OEQsIDJ9LCB7MHg0RCwgMHgwOCwgMn0sIHsweDUwLCAweDA1LCAyfSwgezB4NTEsIDB4RjUsIDJ9LAorCXsweDUyLCAweDA0LCAyfSwgezB4NTMsIDB4QTAsIDJ9LCB7MHg1NCwgMHgxRiwgMn0sIHsweDU1LCAweDIzLCAyfSwKKwl7MHg1NiwgMHg0NSwgMn0sIHsweDU3LCAweDY3LCAyfSwgezB4NTgsIDB4MDgsIDJ9LCB7MHg1OSwgMHgwOCwgMn0sCisJezB4NUEsIDB4MDgsIDJ9LCB7MHg1QiwgMHgwOCwgMn0sIHsweDYwLCAweDA4LCAyfSwgezB4NjEsIDB4MDgsIDJ9LAorCXsweDYyLCAweDA4LCAyfSwgezB4NjMsIDB4MDgsIDJ9LCB7MHg2NCwgMHhDRiwgMn0sCisKKwl7MHg1QiwgMHg0MCwgMH0sIHsweDg0LCAweDg4LCAwfSwgezB4ODUsIDB4MjQsIDB9LCB7MHg4OCwgMHg1NCwgMH0sCisJezB4OEIsIDB4QjgsIDB9LCB7MHg4QywgMHgwNywgMH0sIHsweDhELCAweDAwLCAwfSwgezB4OTQsIDB4MUIsIDB9LAorCXsweDk1LCAweDEyLCAwfSwgezB4OTYsIDB4MDAsIDB9LCB7MHg5NywgMHgwNiwgMH0sIHsweDlELCAweDFBLCAwfSwKKwl7MHg5RiwgMHgxMCwgMH0sIHsweEI0LCAweDIyLCAwfSwgezB4QkUsIDB4ODAsIDB9LCB7MHhEQiwgMHgwMCwgMH0sCisJezB4RUUsIDB4MDAsIDB9LCB7MHg0QywgMHgwMCwgMn0sCisKKwl7MHg5RiwgMHgwMCwgM30sIHsweDhDLCAweDAxLCAwfSwgezB4OEQsIDB4MTAsIDB9LCB7MHg4RSwgMHgwOCwgMH0sCisJezB4OEYsIDB4MDAsIDB9Cit9OworCitzdGF0aWMgaW50IHJ0bDgxODdiX2luaXRfaHcoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQoreworCXN0cnVjdCBydGw4MTg3X3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CisJaW50IHJlcywgaTsKKwl1OCByZWc7CisKKwlydGw4MTg3X3NldF9hbmFwYXJhbShwcml2LCB0cnVlKTsKKworCS8qIFJlc2V0IFBMTCBzZXF1ZW5jZSBvbiA4MTg3Qi4gUmVhbHRlayBub3RlOiByZWR1Y2VzIHBvd2VyCisJICogY29uc3VtcHRpb24gYWJvdXQgMzAgbUEgKi8KKwlydGw4MTh4X2lvd3JpdGU4KHByaXYsICh1OCAqKTB4RkY2MSwgMHgxMCk7CisJcmVnID0gcnRsODE4eF9pb3JlYWQ4KHByaXYsICh1OCAqKTB4RkY2Mik7CisJcnRsODE4eF9pb3dyaXRlOChwcml2LCAodTggKikweEZGNjIsIHJlZyAmIH4oMSA8PCA1KSk7CisJcnRsODE4eF9pb3dyaXRlOChwcml2LCAodTggKikweEZGNjIsIHJlZyB8ICgxIDw8IDUpKTsKKworCXJlcyA9IHJ0bDgxODdfY21kX3Jlc2V0KGRldik7CisJaWYgKHJlcykKKwkJcmV0dXJuIHJlczsKKworCXJ0bDgxODdfc2V0X2FuYXBhcmFtKHByaXYsIHRydWUpOworCisJLyogQlJTUiAoQmFzaWMgUmF0ZSBTZXQgUmVnaXN0ZXIpIG9uIDgxODdCIGxvb2tzIHRvIGJlIHRoZSBzYW1lIGFzCisJICogUkVTUF9SQVRFIG9uIDgxODdMIGluIFJlYWx0ZWsgc291cmNlczogZWFjaCBiaXQgc2hvdWxkIGJlIGVhY2gKKwkgKiBvbmUgb2YgdGhlIDEyIHJhdGVzLCBhbGwgYXJlIGVuYWJsZWQgKi8KKwlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAoX19sZTE2ICopMHhGRjM0LCAweDBGRkYpOworCisJcmVnID0gcnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPkNXX0NPTkYpOworCXJlZyB8PSBSVEw4MThYX0NXX0NPTkZfUEVSUEFDS0VUX1JFVFJZX1NISUZUOworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+Q1dfQ09ORiwgcmVnKTsKKworCS8qIEF1dG8gUmF0ZSBGYWxsYmFjayBSZWdpc3RlciAoQVJGUik6IDFNLTU0TSBzZXR0aW5nICovCisJcnRsODE4eF9pb3dyaXRlMTZfaWR4KHByaXYsIChfX2xlMTYgKikweEZGRTAsIDB4MEZGRiwgMSk7CisJcnRsODE4eF9pb3dyaXRlOF9pZHgocHJpdiwgKHU4ICopMHhGRkUyLCAweDAwLCAxKTsKKworCXJ0bDgxOHhfaW93cml0ZTE2X2lkeChwcml2LCAoX19sZTE2ICopMHhGRkQ0LCAweEZGRkYsIDEpOworCisJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5FRVBST01fQ01ELAorCQkJIFJUTDgxOFhfRUVQUk9NX0NNRF9DT05GSUcpOworCXJlZyA9IHJ0bDgxOHhfaW9yZWFkOChwcml2LCAmcHJpdi0+bWFwLT5DT05GSUcxKTsKKwlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkNPTkZJRzEsIChyZWcgJiAweDNGKSB8IDB4ODApOworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCwKKwkJCSBSVEw4MThYX0VFUFJPTV9DTURfTk9STUFMKTsKKworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+V1BBX0NPTkYsIDApOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJ0bDgxODdiX3JlZ190YWJsZSk7IGkrKykgeworCQlydGw4MTh4X2lvd3JpdGU4X2lkeChwcml2LAorCQkJCSAgICAgKHU4ICopKHVpbnRwdHJfdCkKKwkJCQkgICAgIChydGw4MTg3Yl9yZWdfdGFibGVbaV1bMF0gfCAweEZGMDApLAorCQkJCSAgICAgcnRsODE4N2JfcmVnX3RhYmxlW2ldWzFdLAorCQkJCSAgICAgcnRsODE4N2JfcmVnX3RhYmxlW2ldWzJdKTsKKwl9CisKKwlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5USURfQUNfTUFQLCAweEZBNTApOworCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPklOVF9NSUcsIDApOworCisJcnRsODE4eF9pb3dyaXRlMzJfaWR4KHByaXYsIChfX2xlMzIgKikweEZGRjAsIDAsIDEpOworCXJ0bDgxOHhfaW93cml0ZTMyX2lkeChwcml2LCAoX19sZTMyICopMHhGRkY0LCAwLCAxKTsKKwlydGw4MTh4X2lvd3JpdGU4X2lkeChwcml2LCAodTggKikweEZGRjgsIDAsIDEpOworCisJcnRsODE4eF9pb3dyaXRlMzIocHJpdiwgJnByaXYtPm1hcC0+UkZfVElNSU5HLCAweDAwMDA0MDAxKTsKKworCS8qIFJGU1dfQ1RSTCByZWdpc3RlciAqLworCXJ0bDgxOHhfaW93cml0ZTE2X2lkeChwcml2LCAoX19sZTE2ICopMHhGRjcyLCAweDU2OUEsIDIpOworCisJcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zT3V0cHV0LCAweDA0ODApOworCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc1NlbGVjdCwgMHgyNDg4KTsKKwlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNFbmFibGUsIDB4MUZGRik7CisJbXNsZWVwKDEwMCk7CisKKwlwcml2LT5yZi0+aW5pdChkZXYpOworCisJcmVnID0gUlRMODE4WF9DTURfVFhfRU5BQkxFIHwgUlRMODE4WF9DTURfUlhfRU5BQkxFOworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+Q01ELCByZWcpOworCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPklOVF9NQVNLLCAweEZGRkYpOworCisJcnRsODE4eF9pb3dyaXRlOChwcml2LCAodTggKikweEZFNDEsIDB4RjQpOworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgKHU4ICopMHhGRTQwLCAweDAwKTsKKwlydGw4MTh4X2lvd3JpdGU4KHByaXYsICh1OCAqKTB4RkU0MiwgMHgwMCk7CisJcnRsODE4eF9pb3dyaXRlOChwcml2LCAodTggKikweEZFNDIsIDB4MDEpOworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgKHU4ICopMHhGRTQwLCAweDBGKTsKKwlydGw4MTh4X2lvd3JpdGU4KHByaXYsICh1OCAqKTB4RkU0MiwgMHgwMCk7CisJcnRsODE4eF9pb3dyaXRlOChwcml2LCAodTggKikweEZFNDIsIDB4MDEpOworCisJcmVnID0gcnRsODE4eF9pb3JlYWQ4KHByaXYsICh1OCAqKTB4RkZEQik7CisJcnRsODE4eF9pb3dyaXRlOChwcml2LCAodTggKikweEZGREIsIHJlZyB8ICgxIDw8IDIpKTsKKwlydGw4MTh4X2lvd3JpdGUxNl9pZHgocHJpdiwgKF9fbGUxNiAqKTB4RkY3MiwgMHg1OUZBLCAzKTsKKwlydGw4MTh4X2lvd3JpdGUxNl9pZHgocHJpdiwgKF9fbGUxNiAqKTB4RkY3NCwgMHg1OUQyLCAzKTsKKwlydGw4MTh4X2lvd3JpdGUxNl9pZHgocHJpdiwgKF9fbGUxNiAqKTB4RkY3NiwgMHg1OUQyLCAzKTsKKwlydGw4MTh4X2lvd3JpdGUxNl9pZHgocHJpdiwgKF9fbGUxNiAqKTB4RkY3OCwgMHgxOUZBLCAzKTsKKwlydGw4MTh4X2lvd3JpdGUxNl9pZHgocHJpdiwgKF9fbGUxNiAqKTB4RkY3QSwgMHgxOUZBLCAzKTsKKwlydGw4MTh4X2lvd3JpdGUxNl9pZHgocHJpdiwgKF9fbGUxNiAqKTB4RkY3QywgMHgwMEQwLCAzKTsKKwlydGw4MTh4X2lvd3JpdGU4KHByaXYsICh1OCAqKTB4RkY2MSwgMCk7CisJcnRsODE4eF9pb3dyaXRlOF9pZHgocHJpdiwgKHU4ICopMHhGRjgwLCAweDBGLCAxKTsKKwlydGw4MTh4X2lvd3JpdGU4X2lkeChwcml2LCAodTggKikweEZGODMsIDB4MDMsIDEpOworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgKHU4ICopMHhGRkRBLCAweDEwKTsKKwlydGw4MTh4X2lvd3JpdGU4X2lkeChwcml2LCAodTggKikweEZGNEQsIDB4MDgsIDIpOworCisJcnRsODE4eF9pb3dyaXRlMzIocHJpdiwgJnByaXYtPm1hcC0+SFNTSV9QQVJBLCAweDA2MDAzMjFCKTsKKworCXJ0bDgxOHhfaW93cml0ZTE2X2lkeChwcml2LCAoX19sZTE2ICopMHhGRkVDLCAweDA4MDAsIDEpOworCisJcHJpdi0+c2xvdF90aW1lID0gMHg5OworCXByaXYtPmFpZnNuWzBdID0gMjsgLyogQUlGU05bQUNfVk9dICovCisJcHJpdi0+YWlmc25bMV0gPSAyOyAvKiBBSUZTTltBQ19WSV0gKi8KKwlwcml2LT5haWZzblsyXSA9IDc7IC8qIEFJRlNOW0FDX0JLXSAqLworCXByaXYtPmFpZnNuWzNdID0gMzsgLyogQUlGU05bQUNfQkVdICovCisJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5BQ01fQ09OVFJPTCwgMCk7CisKKwkvKiBFTkVEQ0EgZmxhZyBtdXN0IGFsd2F5cyBiZSBzZXQsIHRyYW5zbWl0IGlzc3Vlcz8gKi8KKwlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPk1TUiwgUlRMODE4WF9NU1JfRU5FRENBKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBydGw4MTg3X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCS8qIFRoZSBSVEw4MTg3IHJldHVybnMgdGhlIHJldHJ5IGNvdW50IHRocm91Z2ggcmVnaXN0ZXIgMHhGRkZBLiBJbgorCSAqIGFkZGl0aW9uLCBpdCBhcHBlYXJzIHRvIGJlIGEgY3VtdWxhdGl2ZSByZXRyeSBjb3VudCwgbm90IHRoZQorCSAqIHZhbHVlIGZvciB0aGUgY3VycmVudCBUWCBwYWNrZXQuIFdoZW4gbXVsdGlwbGUgVFggZW50cmllcyBhcmUKKwkgKiBxdWV1ZWQsIHRoZSByZXRyeSBjb3VudCB3aWxsIGJlIHZhbGlkIGZvciB0aGUgbGFzdCBvbmUgaW4gdGhlIHF1ZXVlLgorCSAqIFRoZSAiZXJyb3IiIHNob3VsZCBub3QgbWF0dGVyIGZvciBwdXJwb3NlcyBvZiByYXRlIHNldHRpbmcuICovCisJc3RydWN0IHJ0bDgxODdfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcnRsODE4N19wcml2LAorCQkJCSAgICB3b3JrLndvcmspOworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbzsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYgPSBwcml2LT5kZXY7CisJc3RhdGljIHUxNiByZXRyeTsKKwl1MTYgdG1wOworCisJbXV0ZXhfbG9jaygmcHJpdi0+Y29uZl9tdXRleCk7CisJdG1wID0gcnRsODE4eF9pb3JlYWQxNihwcml2LCAoX19sZTE2ICopMHhGRkZBKTsKKwl3aGlsZSAoc2tiX3F1ZXVlX2xlbigmcHJpdi0+Yl90eF9zdGF0dXMucXVldWUpID4gMCkgeworCQlzdHJ1Y3Qgc2tfYnVmZiAqb2xkX3NrYjsKKworCQlvbGRfc2tiID0gc2tiX2RlcXVldWUoJnByaXYtPmJfdHhfc3RhdHVzLnF1ZXVlKTsKKwkJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Iob2xkX3NrYik7CisJCWluZm8tPnN0YXR1cy5yYXRlc1swXS5jb3VudCA9IHRtcCAtIHJldHJ5ICsgMTsKKwkJaWVlZTgwMjExX3R4X3N0YXR1c19pcnFzYWZlKGRldiwgb2xkX3NrYik7CisJfQorCXJldHJ5ID0gdG1wOworCW11dGV4X3VubG9jaygmcHJpdi0+Y29uZl9tdXRleCk7Cit9CisKK3N0YXRpYyBpbnQgcnRsODE4N19zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCit7CisJc3RydWN0IHJ0bDgxODdfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKKwl1MzIgcmVnOworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZwcml2LT5jb25mX211dGV4KTsKKworCXJldCA9ICghcHJpdi0+aXNfcnRsODE4N2IpID8gcnRsODE4N19pbml0X2h3KGRldikgOgorCQkJCSAgICAgcnRsODE4N2JfaW5pdF9odyhkZXYpOworCWlmIChyZXQpCisJCWdvdG8gcnRsODE4N19zdGFydF9leGl0OworCisJaW5pdF91c2JfYW5jaG9yKCZwcml2LT5hbmNob3JlZCk7CisJcHJpdi0+ZGV2ID0gZGV2OworCisJaWYgKHByaXYtPmlzX3J0bDgxODdiKSB7CisJCXJlZyA9IFJUTDgxOFhfUlhfQ09ORl9NR01UIHwKKwkJICAgICAgUlRMODE4WF9SWF9DT05GX0RBVEEgfAorCQkgICAgICBSVEw4MThYX1JYX0NPTkZfQlJPQURDQVNUIHwKKwkJICAgICAgUlRMODE4WF9SWF9DT05GX05JQ01BQyB8CisJCSAgICAgIFJUTDgxOFhfUlhfQ09ORl9CU1NJRCB8CisJCSAgICAgICg3IDw8IDEzIC8qIFJYIEZJRk8gdGhyZXNob2xkIE5PTkUgKi8pIHwKKwkJICAgICAgKDcgPDwgMTAgLyogTUFYIFJYIERNQSAqLykgfAorCQkgICAgICBSVEw4MThYX1JYX0NPTkZfUlhfQVVUT1JFU0VUUEhZIHwKKwkJICAgICAgUlRMODE4WF9SWF9DT05GX09OTFlFUkxQS1QgfAorCQkgICAgICBSVEw4MThYX1JYX0NPTkZfTVVMVElDQVNUOworCQlwcml2LT5yeF9jb25mID0gcmVnOworCQlydGw4MTh4X2lvd3JpdGUzMihwcml2LCAmcHJpdi0+bWFwLT5SWF9DT05GLCByZWcpOworCisJCXJlZyA9IHJ0bDgxOHhfaW9yZWFkOChwcml2LCAmcHJpdi0+bWFwLT5UWF9BR0NfQ1RMKTsKKwkJcmVnICY9IH5SVEw4MThYX1RYX0FHQ19DVExfUEVSUEFDS0VUX0dBSU5fU0hJRlQ7CisJCXJlZyAmPSB+UlRMODE4WF9UWF9BR0NfQ1RMX1BFUlBBQ0tFVF9BTlRTRUxfU0hJRlQ7CisJCXJlZyAmPSB+UlRMODE4WF9UWF9BR0NfQ1RMX0ZFRURCQUNLX0FOVDsKKwkJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5UWF9BR0NfQ1RMLCByZWcpOworCisJCXJ0bDgxOHhfaW93cml0ZTMyKHByaXYsICZwcml2LT5tYXAtPlRYX0NPTkYsCisJCQkJICBSVEw4MThYX1RYX0NPTkZfSFdfU0VRTlVNIHwKKwkJCQkgIFJUTDgxOFhfVFhfQ09ORl9ESVNSRVFRU0laRSB8CisJCQkJICAoNyA8PCA4ICAvKiBzaG9ydCByZXRyeSBsaW1pdCAqLykgfAorCQkJCSAgKDcgPDwgMCAgLyogbG9uZyByZXRyeSBsaW1pdCAqLykgfAorCQkJCSAgKDcgPDwgMjEgLyogTUFYIFRYIERNQSAqLykpOworCQlydGw4MTg3X2luaXRfdXJicyhkZXYpOworCQlydGw4MTg3Yl9pbml0X3N0YXR1c191cmIoZGV2KTsKKwkJZ290byBydGw4MTg3X3N0YXJ0X2V4aXQ7CisJfQorCisJcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+SU5UX01BU0ssIDB4RkZGRik7CisKKwlydGw4MTh4X2lvd3JpdGUzMihwcml2LCAmcHJpdi0+bWFwLT5NQVJbMF0sIH4wKTsKKwlydGw4MTh4X2lvd3JpdGUzMihwcml2LCAmcHJpdi0+bWFwLT5NQVJbMV0sIH4wKTsKKworCXJ0bDgxODdfaW5pdF91cmJzKGRldik7CisKKwlyZWcgPSBSVEw4MThYX1JYX0NPTkZfT05MWUVSTFBLVCB8CisJICAgICAgUlRMODE4WF9SWF9DT05GX1JYX0FVVE9SRVNFVFBIWSB8CisJICAgICAgUlRMODE4WF9SWF9DT05GX0JTU0lEIHwKKwkgICAgICBSVEw4MThYX1JYX0NPTkZfTUdNVCB8CisJICAgICAgUlRMODE4WF9SWF9DT05GX0RBVEEgfAorCSAgICAgICg3IDw8IDEzIC8qIFJYIEZJRk8gdGhyZXNob2xkIE5PTkUgKi8pIHwKKwkgICAgICAoNyA8PCAxMCAvKiBNQVggUlggRE1BICovKSB8CisJICAgICAgUlRMODE4WF9SWF9DT05GX0JST0FEQ0FTVCB8CisJICAgICAgUlRMODE4WF9SWF9DT05GX05JQ01BQzsKKworCXByaXYtPnJ4X2NvbmYgPSByZWc7CisJcnRsODE4eF9pb3dyaXRlMzIocHJpdiwgJnByaXYtPm1hcC0+UlhfQ09ORiwgcmVnKTsKKworCXJlZyA9IHJ0bDgxOHhfaW9yZWFkOChwcml2LCAmcHJpdi0+bWFwLT5DV19DT05GKTsKKwlyZWcgJj0gflJUTDgxOFhfQ1dfQ09ORl9QRVJQQUNLRVRfQ1dfU0hJRlQ7CisJcmVnIHw9IFJUTDgxOFhfQ1dfQ09ORl9QRVJQQUNLRVRfUkVUUllfU0hJRlQ7CisJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5DV19DT05GLCByZWcpOworCisJcmVnID0gcnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPlRYX0FHQ19DVEwpOworCXJlZyAmPSB+UlRMODE4WF9UWF9BR0NfQ1RMX1BFUlBBQ0tFVF9HQUlOX1NISUZUOworCXJlZyAmPSB+UlRMODE4WF9UWF9BR0NfQ1RMX1BFUlBBQ0tFVF9BTlRTRUxfU0hJRlQ7CisJcmVnICY9IH5SVEw4MThYX1RYX0FHQ19DVExfRkVFREJBQ0tfQU5UOworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+VFhfQUdDX0NUTCwgcmVnKTsKKworCXJlZyAgPSBSVEw4MThYX1RYX0NPTkZfQ1dfTUlOIHwKKwkgICAgICAgKDcgPDwgMjEgLyogTUFYIFRYIERNQSAqLykgfAorCSAgICAgICBSVEw4MThYX1RYX0NPTkZfTk9fSUNWOworCXJ0bDgxOHhfaW93cml0ZTMyKHByaXYsICZwcml2LT5tYXAtPlRYX0NPTkYsIHJlZyk7CisKKwlyZWcgPSBydGw4MTh4X2lvcmVhZDgocHJpdiwgJnByaXYtPm1hcC0+Q01EKTsKKwlyZWcgfD0gUlRMODE4WF9DTURfVFhfRU5BQkxFOworCXJlZyB8PSBSVEw4MThYX0NNRF9SWF9FTkFCTEU7CisJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5DTUQsIHJlZyk7CisJSU5JVF9ERUxBWUVEX1dPUksoJnByaXYtPndvcmssIHJ0bDgxODdfd29yayk7CisKK3J0bDgxODdfc3RhcnRfZXhpdDoKKwltdXRleF91bmxvY2soJnByaXYtPmNvbmZfbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHJ0bDgxODdfc3RvcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCit7CisJc3RydWN0IHJ0bDgxODdfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXUzMiByZWc7CisKKwltdXRleF9sb2NrKCZwcml2LT5jb25mX211dGV4KTsKKwlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5JTlRfTUFTSywgMCk7CisKKwlyZWcgPSBydGw4MTh4X2lvcmVhZDgocHJpdiwgJnByaXYtPm1hcC0+Q01EKTsKKwlyZWcgJj0gflJUTDgxOFhfQ01EX1RYX0VOQUJMRTsKKwlyZWcgJj0gflJUTDgxOFhfQ01EX1JYX0VOQUJMRTsKKwlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkNNRCwgcmVnKTsKKworCXByaXYtPnJmLT5zdG9wKGRldik7CisJcnRsODE4N19zZXRfYW5hcGFyYW0ocHJpdiwgZmFsc2UpOworCisJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5FRVBST01fQ01ELCBSVEw4MThYX0VFUFJPTV9DTURfQ09ORklHKTsKKwlyZWcgPSBydGw4MTh4X2lvcmVhZDgocHJpdiwgJnByaXYtPm1hcC0+Q09ORklHNCk7CisJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5DT05GSUc0LCByZWcgfCBSVEw4MThYX0NPTkZJRzRfVkNPT0ZGKTsKKwlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQsIFJUTDgxOFhfRUVQUk9NX0NNRF9OT1JNQUwpOworCisJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmcHJpdi0+Yl90eF9zdGF0dXMucXVldWUpKSkKKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKworCXVzYl9raWxsX2FuY2hvcmVkX3VyYnMoJnByaXYtPmFuY2hvcmVkKTsKKwltdXRleF91bmxvY2soJnByaXYtPmNvbmZfbXV0ZXgpOworCisJaWYgKCFwcml2LT5pc19ydGw4MTg3YikKKwkJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZwcml2LT53b3JrKTsKK30KKworc3RhdGljIGludCBydGw4MTg3X2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAorCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQoreworCXN0cnVjdCBydGw4MTg3X3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CisJaW50IGk7CisJaW50IHJldCA9IC1FT1BOT1RTVVBQOworCisJbXV0ZXhfbG9jaygmcHJpdi0+Y29uZl9tdXRleCk7CisJaWYgKHByaXYtPnZpZikKKwkJZ290byBleGl0OworCisJc3dpdGNoICh2aWYtPnR5cGUpIHsKKwljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWdvdG8gZXhpdDsKKwl9CisKKwlyZXQgPSAwOworCXByaXYtPnZpZiA9IHZpZjsKKworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCwgUlRMODE4WF9FRVBST01fQ01EX0NPTkZJRyk7CisJZm9yIChpID0gMDsgaSA8IEVUSF9BTEVOOyBpKyspCisJCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+TUFDW2ldLAorCQkJCSAoKHU4ICopdmlmLT5hZGRyKVtpXSk7CisJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5FRVBST01fQ01ELCBSVEw4MThYX0VFUFJPTV9DTURfTk9STUFMKTsKKworZXhpdDoKKwltdXRleF91bmxvY2soJnByaXYtPmNvbmZfbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHJ0bDgxODdfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQoreworCXN0cnVjdCBydGw4MTg3X3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CisJbXV0ZXhfbG9jaygmcHJpdi0+Y29uZl9tdXRleCk7CisJcHJpdi0+dmlmID0gTlVMTDsKKwltdXRleF91bmxvY2soJnByaXYtPmNvbmZfbXV0ZXgpOworfQorCitzdGF0aWMgaW50IHJ0bDgxODdfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgdTMyIGNoYW5nZWQpCit7CisJc3RydWN0IHJ0bDgxODdfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmZGV2LT5jb25mOworCXUzMiByZWc7CisKKwltdXRleF9sb2NrKCZwcml2LT5jb25mX211dGV4KTsKKwlyZWcgPSBydGw4MTh4X2lvcmVhZDMyKHByaXYsICZwcml2LT5tYXAtPlRYX0NPTkYpOworCS8qIEVuYWJsZSBUWCBsb29wYmFjayBvbiBNQUMgbGV2ZWwgdG8gYXZvaWQgVFggZHVyaW5nIGNoYW5uZWwKKwkgKiBjaGFuZ2VzLCBhcyB0aGlzIGhhcyBiZSBzZWVuIHRvIGNhdXNlcyBwcm9ibGVtcyBhbmQgdGhlCisJICogY2FyZCB3aWxsIHN0b3Agd29yayB1bnRpbCBuZXh0IHJlc2V0CisJICovCisJcnRsODE4eF9pb3dyaXRlMzIocHJpdiwgJnByaXYtPm1hcC0+VFhfQ09ORiwKKwkJCSAgcmVnIHwgUlRMODE4WF9UWF9DT05GX0xPT1BCQUNLX01BQyk7CisJcHJpdi0+cmYtPnNldF9jaGFuKGRldiwgY29uZik7CisJbXNsZWVwKDEwKTsKKwlydGw4MTh4X2lvd3JpdGUzMihwcml2LCAmcHJpdi0+bWFwLT5UWF9DT05GLCByZWcpOworCisJcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+QVRJTV9XTkQsIDIpOworCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPkFUSU1UUl9JTlRFUlZBTCwgMTAwKTsKKwlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5CRUFDT05fSU5URVJWQUwsIDEwMCk7CisJcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+QkVBQ09OX0lOVEVSVkFMX1RJTUUsIDEwMCk7CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5jb25mX211dGV4KTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFdpdGggODE4N0IsIEFDXypfUEFSQU0gY2xhc2hlcyB3aXRoIEZFTVIgZGVmaW5pdGlvbiBpbiBzdHJ1Y3QgcnRsODE4eF9jc3IgZm9yCisgKiBleGFtcGxlLiBUaHVzIHdlIGhhdmUgdG8gdXNlIHJhdyB2YWx1ZXMgZm9yIEFDXypfUEFSQU0gcmVnaXN0ZXIgYWRkcmVzc2VzLgorICovCitzdGF0aWMgX19sZTMyICpydGw4MTg3Yl9hY19hZGRyWzRdID0geworCShfX2xlMzIgKikgMHhGRkYwLCAvKiBBQ19WTyAqLworCShfX2xlMzIgKikgMHhGRkY0LCAvKiBBQ19WSSAqLworCShfX2xlMzIgKikgMHhGRkZDLCAvKiBBQ19CSyAqLworCShfX2xlMzIgKikgMHhGRkY4LCAvKiBBQ19CRSAqLworfTsKKworI2RlZmluZSBTSUZTX1RJTUUgMHhhCisKK3N0YXRpYyB2b2lkIHJ0bDgxODdfY29uZl9lcnAoc3RydWN0IHJ0bDgxODdfcHJpdiAqcHJpdiwgYm9vbCB1c2Vfc2hvcnRfc2xvdCwKKwkJCSAgICAgYm9vbCB1c2Vfc2hvcnRfcHJlYW1ibGUpCit7CisJaWYgKHByaXYtPmlzX3J0bDgxODdiKSB7CisJCXU4IGRpZnMsIGVpZnM7CisJCXUxNiBhY2tfdGltZW91dDsKKwkJaW50IHF1ZXVlOworCisJCWlmICh1c2Vfc2hvcnRfc2xvdCkgeworCQkJcHJpdi0+c2xvdF90aW1lID0gMHg5OworCQkJZGlmcyA9IDB4MWM7CisJCQllaWZzID0gMHg1MzsKKwkJfSBlbHNlIHsKKwkJCXByaXYtPnNsb3RfdGltZSA9IDB4MTQ7CisJCQlkaWZzID0gMHgzMjsKKwkJCWVpZnMgPSAweDViOworCQl9CisJCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+U0lGUywgMHgyMik7CisJCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+U0xPVCwgcHJpdi0+c2xvdF90aW1lKTsKKwkJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5ESUZTLCBkaWZzKTsKKworCQkvKgorCQkgKiBCUlNSKzEgb24gODE4N0IgaXMgaW4gZmFjdCBFSUZTIHJlZ2lzdGVyCisJCSAqIFZhbHVlIGluIHVuaXRzIG9mIDQgdXMKKwkJICovCisJCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgKHU4ICopJnByaXYtPm1hcC0+QlJTUiArIDEsIGVpZnMpOworCisJCS8qCisJCSAqIEZvciA4MTg3QiwgQ0FSUklFUl9TRU5TRV9DT1VOVEVSIGlzIGluIGZhY3QgYWNrIHRpbWVvdXQKKwkJICogcmVnaXN0ZXIuIEluIHVuaXRzIG9mIDQgdXMgbGlrZSBlaWZzIHJlZ2lzdGVyCisJCSAqIGFja190aW1lb3V0ID0gYWNrIGR1cmF0aW9uICsgcGxjcCArIGRpZnMgKyBwcmVhbWJsZQorCQkgKi8KKwkJYWNrX3RpbWVvdXQgPSAxMTIgKyA0OCArIGRpZnM7CisJCWlmICh1c2Vfc2hvcnRfcHJlYW1ibGUpCisJCQlhY2tfdGltZW91dCArPSA3MjsKKwkJZWxzZQorCQkJYWNrX3RpbWVvdXQgKz0gMTQ0OworCQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkNBUlJJRVJfU0VOU0VfQ09VTlRFUiwKKwkJCQkgRElWX1JPVU5EX1VQKGFja190aW1lb3V0LCA0KSk7CisKKwkJZm9yIChxdWV1ZSA9IDA7IHF1ZXVlIDwgNDsgcXVldWUrKykKKwkJCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgKHU4ICopIHJ0bDgxODdiX2FjX2FkZHJbcXVldWVdLAorCQkJCQkgcHJpdi0+YWlmc25bcXVldWVdICogcHJpdi0+c2xvdF90aW1lICsKKwkJCQkJIFNJRlNfVElNRSk7CisJfSBlbHNlIHsKKwkJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5TSUZTLCAweDIyKTsKKwkJaWYgKHVzZV9zaG9ydF9zbG90KSB7CisJCQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPlNMT1QsIDB4OSk7CisJCQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkRJRlMsIDB4MTQpOworCQkJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5FSUZTLCA5MSAtIDB4MTQpOworCQl9IGVsc2UgeworCQkJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5TTE9ULCAweDE0KTsKKwkJCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RElGUywgMHgyNCk7CisJCQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkVJRlMsIDkxIC0gMHgyNCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJ0bDgxODdfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqaW5mbywKKwkJCQkgICAgIHUzMiBjaGFuZ2VkKQoreworCXN0cnVjdCBydGw4MTg3X3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CisJaW50IGk7CisJdTggcmVnOworCisJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9CU1NJRCkgeworCQltdXRleF9sb2NrKCZwcml2LT5jb25mX211dGV4KTsKKwkJZm9yIChpID0gMDsgaSA8IEVUSF9BTEVOOyBpKyspCisJCQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkJTU0lEW2ldLAorCQkJCQkgaW5mby0+YnNzaWRbaV0pOworCisJCWlmIChwcml2LT5pc19ydGw4MTg3YikKKwkJCXJlZyA9IFJUTDgxOFhfTVNSX0VORURDQTsKKwkJZWxzZQorCQkJcmVnID0gMDsKKworCQlpZiAoaXNfdmFsaWRfZXRoZXJfYWRkcihpbmZvLT5ic3NpZCkpCisJCQlyZWcgfD0gUlRMODE4WF9NU1JfSU5GUkE7CisJCWVsc2UKKwkJCXJlZyB8PSBSVEw4MThYX01TUl9OT19MSU5LOworCisJCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+TVNSLCByZWcpOworCisJCW11dGV4X3VubG9jaygmcHJpdi0+Y29uZl9tdXRleCk7CisJfQorCisJaWYgKGNoYW5nZWQgJiAoQlNTX0NIQU5HRURfRVJQX1NMT1QgfCBCU1NfQ0hBTkdFRF9FUlBfUFJFQU1CTEUpKQorCQlydGw4MTg3X2NvbmZfZXJwKHByaXYsIGluZm8tPnVzZV9zaG9ydF9zbG90LAorCQkJCSBpbmZvLT51c2Vfc2hvcnRfcHJlYW1ibGUpOworfQorCitzdGF0aWMgdTY0IHJ0bDgxODdfcHJlcGFyZV9tdWx0aWNhc3Qoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAorCQkJCSAgICAgc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKm1jX2xpc3QpCit7CisJcmV0dXJuIG5ldGRldl9od19hZGRyX2xpc3RfY291bnQobWNfbGlzdCk7Cit9CisKK3N0YXRpYyB2b2lkIHJ0bDgxODdfY29uZmlndXJlX2ZpbHRlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCisJCQkJICAgICB1bnNpZ25lZCBpbnQgY2hhbmdlZF9mbGFncywKKwkJCQkgICAgIHVuc2lnbmVkIGludCAqdG90YWxfZmxhZ3MsCisJCQkJICAgICB1NjQgbXVsdGljYXN0KQoreworCXN0cnVjdCBydGw4MTg3X3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CisKKwlpZiAoY2hhbmdlZF9mbGFncyAmIEZJRl9GQ1NGQUlMKQorCQlwcml2LT5yeF9jb25mIF49IFJUTDgxOFhfUlhfQ09ORl9GQ1M7CisJaWYgKGNoYW5nZWRfZmxhZ3MgJiBGSUZfQ09OVFJPTCkKKwkJcHJpdi0+cnhfY29uZiBePSBSVEw4MThYX1JYX0NPTkZfQ1RSTDsKKwlpZiAoY2hhbmdlZF9mbGFncyAmIEZJRl9PVEhFUl9CU1MpCisJCXByaXYtPnJ4X2NvbmYgXj0gUlRMODE4WF9SWF9DT05GX01PTklUT1I7CisJaWYgKCp0b3RhbF9mbGFncyAmIEZJRl9BTExNVUxUSSB8fCBtdWx0aWNhc3QgPiAwKQorCQlwcml2LT5yeF9jb25mIHw9IFJUTDgxOFhfUlhfQ09ORl9NVUxUSUNBU1Q7CisJZWxzZQorCQlwcml2LT5yeF9jb25mICY9IH5SVEw4MThYX1JYX0NPTkZfTVVMVElDQVNUOworCisJKnRvdGFsX2ZsYWdzID0gMDsKKworCWlmIChwcml2LT5yeF9jb25mICYgUlRMODE4WF9SWF9DT05GX0ZDUykKKwkJKnRvdGFsX2ZsYWdzIHw9IEZJRl9GQ1NGQUlMOworCWlmIChwcml2LT5yeF9jb25mICYgUlRMODE4WF9SWF9DT05GX0NUUkwpCisJCSp0b3RhbF9mbGFncyB8PSBGSUZfQ09OVFJPTDsKKwlpZiAocHJpdi0+cnhfY29uZiAmIFJUTDgxOFhfUlhfQ09ORl9NT05JVE9SKQorCQkqdG90YWxfZmxhZ3MgfD0gRklGX09USEVSX0JTUzsKKwlpZiAocHJpdi0+cnhfY29uZiAmIFJUTDgxOFhfUlhfQ09ORl9NVUxUSUNBU1QpCisJCSp0b3RhbF9mbGFncyB8PSBGSUZfQUxMTVVMVEk7CisKKwlydGw4MTh4X2lvd3JpdGUzMl9hc3luYyhwcml2LCAmcHJpdi0+bWFwLT5SWF9DT05GLCBwcml2LT5yeF9jb25mKTsKK30KKworc3RhdGljIGludCBydGw4MTg3X2NvbmZfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCB1MTYgcXVldWUsCisJCQkgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCBydGw4MTg3X3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CisJdTggY3dfbWluLCBjd19tYXg7CisKKwlpZiAocXVldWUgPiAzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWN3X21pbiA9IGZscyhwYXJhbXMtPmN3X21pbik7CisJY3dfbWF4ID0gZmxzKHBhcmFtcy0+Y3dfbWF4KTsKKworCWlmIChwcml2LT5pc19ydGw4MTg3YikgeworCQlwcml2LT5haWZzbltxdWV1ZV0gPSBwYXJhbXMtPmFpZnM7CisKKwkJLyoKKwkJICogVGhpcyBpcyB0aGUgc3RydWN0dXJlIG9mIEFDXypfUEFSQU0gcmVnaXN0ZXJzIGluIDgxODdCOgorCQkgKiAtIFRYT1AgbGltaXQgZmllbGQsIGJpdCBvZmZzZXQgPSAxNgorCQkgKiAtIEVDV21heCwgYml0IG9mZnNldCA9IDEyCisJCSAqIC0gRUNXbWluLCBiaXQgb2Zmc2V0ID0gOAorCQkgKiAtIEFJRlMsIGJpdCBvZmZzZXQgPSAwCisJCSAqLworCQlydGw4MTh4X2lvd3JpdGUzMihwcml2LCBydGw4MTg3Yl9hY19hZGRyW3F1ZXVlXSwKKwkJCQkgIChwYXJhbXMtPnR4b3AgPDwgMTYpIHwgKGN3X21heCA8PCAxMikgfAorCQkJCSAgKGN3X21pbiA8PCA4KSB8IChwYXJhbXMtPmFpZnMgKgorCQkJCSAgcHJpdi0+c2xvdF90aW1lICsgU0lGU19USU1FKSk7CisJfSBlbHNlIHsKKwkJaWYgKHF1ZXVlICE9IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkNXX1ZBTCwKKwkJCQkgY3dfbWluIHwgKGN3X21heCA8PCA0KSk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdTY0IHJ0bDgxODdfZ2V0X3RzZihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCit7CisJc3RydWN0IHJ0bDgxODdfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKKworCXJldHVybiBydGw4MTh4X2lvcmVhZDMyKHByaXYsICZwcml2LT5tYXAtPlRTRlRbMF0pIHwKKwkgICAgICAgKHU2NCkocnRsODE4eF9pb3JlYWQzMihwcml2LCAmcHJpdi0+bWFwLT5UU0ZUWzFdKSkgPDwgMzI7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX29wcyBydGw4MTg3X29wcyA9IHsKKwkudHgJCQk9IHJ0bDgxODdfdHgsCisJLnN0YXJ0CQkJPSBydGw4MTg3X3N0YXJ0LAorCS5zdG9wCQkJPSBydGw4MTg3X3N0b3AsCisJLmFkZF9pbnRlcmZhY2UJCT0gcnRsODE4N19hZGRfaW50ZXJmYWNlLAorCS5yZW1vdmVfaW50ZXJmYWNlCT0gcnRsODE4N19yZW1vdmVfaW50ZXJmYWNlLAorCS5jb25maWcJCQk9IHJ0bDgxODdfY29uZmlnLAorCS5ic3NfaW5mb19jaGFuZ2VkCT0gcnRsODE4N19ic3NfaW5mb19jaGFuZ2VkLAorCS5wcmVwYXJlX211bHRpY2FzdAk9IHJ0bDgxODdfcHJlcGFyZV9tdWx0aWNhc3QsCisJLmNvbmZpZ3VyZV9maWx0ZXIJPSBydGw4MTg3X2NvbmZpZ3VyZV9maWx0ZXIsCisJLmNvbmZfdHgJCT0gcnRsODE4N19jb25mX3R4LAorCS5yZmtpbGxfcG9sbAkJPSBydGw4MTg3X3Jma2lsbF9wb2xsLAorCS5nZXRfdHNmCQk9IHJ0bDgxODdfZ2V0X3RzZiwKK307CisKK3N0YXRpYyB2b2lkIHJ0bDgxODdfZWVwcm9tX3JlZ2lzdGVyX3JlYWQoc3RydWN0IGVlcHJvbV85M2N4NiAqZWVwcm9tKQoreworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiA9IGVlcHJvbS0+ZGF0YTsKKwlzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2ID0gZGV2LT5wcml2OworCXU4IHJlZyA9IHJ0bDgxOHhfaW9yZWFkOChwcml2LCAmcHJpdi0+bWFwLT5FRVBST01fQ01EKTsKKworCWVlcHJvbS0+cmVnX2RhdGFfaW4gPSByZWcgJiBSVEw4MThYX0VFUFJPTV9DTURfV1JJVEU7CisJZWVwcm9tLT5yZWdfZGF0YV9vdXQgPSByZWcgJiBSVEw4MThYX0VFUFJPTV9DTURfUkVBRDsKKwllZXByb20tPnJlZ19kYXRhX2Nsb2NrID0gcmVnICYgUlRMODE4WF9FRVBST01fQ01EX0NLOworCWVlcHJvbS0+cmVnX2NoaXBfc2VsZWN0ID0gcmVnICYgUlRMODE4WF9FRVBST01fQ01EX0NTOworfQorCitzdGF0aWMgdm9pZCBydGw4MTg3X2VlcHJvbV9yZWdpc3Rlcl93cml0ZShzdHJ1Y3QgZWVwcm9tXzkzY3g2ICplZXByb20pCit7CisJc3RydWN0IGllZWU4MDIxMV9odyAqZGV2ID0gZWVwcm9tLT5kYXRhOworCXN0cnVjdCBydGw4MTg3X3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CisJdTggcmVnID0gUlRMODE4WF9FRVBST01fQ01EX1BST0dSQU07CisKKwlpZiAoZWVwcm9tLT5yZWdfZGF0YV9pbikKKwkJcmVnIHw9IFJUTDgxOFhfRUVQUk9NX0NNRF9XUklURTsKKwlpZiAoZWVwcm9tLT5yZWdfZGF0YV9vdXQpCisJCXJlZyB8PSBSVEw4MThYX0VFUFJPTV9DTURfUkVBRDsKKwlpZiAoZWVwcm9tLT5yZWdfZGF0YV9jbG9jaykKKwkJcmVnIHw9IFJUTDgxOFhfRUVQUk9NX0NNRF9DSzsKKwlpZiAoZWVwcm9tLT5yZWdfY2hpcF9zZWxlY3QpCisJCXJlZyB8PSBSVEw4MThYX0VFUFJPTV9DTURfQ1M7CisKKwlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQsIHJlZyk7CisJdWRlbGF5KDEwKTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgcnRsODE4N19wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmRldjsKKwlzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2OworCXN0cnVjdCBlZXByb21fOTNjeDYgZWVwcm9tOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbDsKKwljb25zdCBjaGFyICpjaGlwX25hbWU7CisJdTE2IHR4cHdyLCByZWc7CisJdTE2IHByb2R1Y3RfaWQgPSBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCk7CisJaW50IGVyciwgaTsKKwl1OCBtYWNfYWRkcltFVEhfQUxFTl07CisKKwlkZXYgPSBpZWVlODAyMTFfYWxsb2NfaHcoc2l6ZW9mKCpwcml2KSwgJnJ0bDgxODdfb3BzKTsKKwlpZiAoIWRldikgeworCQlwcmludGsoS0VSTl9FUlIgInJ0bDgxODc6IGllZWU4MDIxMSBhbGxvYyBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlwcml2ID0gZGV2LT5wcml2OworCXByaXYtPmlzX3J0bDgxODdiID0gKGlkLT5kcml2ZXJfaW5mbyA9PSBERVZJQ0VfUlRMODE4N0IpOworCisJLyogYWxsb2NhdGUgIkRNQSBhd2FyZSIgYnVmZmVyIGZvciByZWdpc3RlciBhY2Nlc3NlcyAqLworCXByaXYtPmlvX2RtYWJ1ZiA9IGttYWxsb2Moc2l6ZW9mKCpwcml2LT5pb19kbWFidWYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXYtPmlvX2RtYWJ1ZikgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9mcmVlX2RldjsKKwl9CisJbXV0ZXhfaW5pdCgmcHJpdi0+aW9fbXV0ZXgpOworCisJU0VUX0lFRUU4MDIxMV9ERVYoZGV2LCAmaW50Zi0+ZGV2KTsKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIGRldik7CisJcHJpdi0+dWRldiA9IHVkZXY7CisKKwl1c2JfZ2V0X2Rldih1ZGV2KTsKKworCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnByaXYtPnJ4X3F1ZXVlKTsKKworCUJVSUxEX0JVR19PTihzaXplb2YocHJpdi0+Y2hhbm5lbHMpICE9IHNpemVvZihydGw4MTh4X2NoYW5uZWxzKSk7CisJQlVJTERfQlVHX09OKHNpemVvZihwcml2LT5yYXRlcykgIT0gc2l6ZW9mKHJ0bDgxOHhfcmF0ZXMpKTsKKworCW1lbWNweShwcml2LT5jaGFubmVscywgcnRsODE4eF9jaGFubmVscywgc2l6ZW9mKHJ0bDgxOHhfY2hhbm5lbHMpKTsKKwltZW1jcHkocHJpdi0+cmF0ZXMsIHJ0bDgxOHhfcmF0ZXMsIHNpemVvZihydGw4MTh4X3JhdGVzKSk7CisJcHJpdi0+bWFwID0gKHN0cnVjdCBydGw4MTh4X2NzciAqKTB4RkYwMDsKKworCXByaXYtPmJhbmQuYmFuZCA9IElFRUU4MDIxMV9CQU5EXzJHSFo7CisJcHJpdi0+YmFuZC5jaGFubmVscyA9IHByaXYtPmNoYW5uZWxzOworCXByaXYtPmJhbmQubl9jaGFubmVscyA9IEFSUkFZX1NJWkUocnRsODE4eF9jaGFubmVscyk7CisJcHJpdi0+YmFuZC5iaXRyYXRlcyA9IHByaXYtPnJhdGVzOworCXByaXYtPmJhbmQubl9iaXRyYXRlcyA9IEFSUkFZX1NJWkUocnRsODE4eF9yYXRlcyk7CisJZGV2LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0gPSAmcHJpdi0+YmFuZDsKKworCisJZGV2LT5mbGFncyA9IElFRUU4MDIxMV9IV19IT1NUX0JST0FEQ0FTVF9QU19CVUZGRVJJTkcgfAorCQkgICAgIElFRUU4MDIxMV9IV19TSUdOQUxfREJNIHwKKwkJICAgICBJRUVFODAyMTFfSFdfUlhfSU5DTFVERVNfRkNTOworCisJZWVwcm9tLmRhdGEgPSBkZXY7CisJZWVwcm9tLnJlZ2lzdGVyX3JlYWQgPSBydGw4MTg3X2VlcHJvbV9yZWdpc3Rlcl9yZWFkOworCWVlcHJvbS5yZWdpc3Rlcl93cml0ZSA9IHJ0bDgxODdfZWVwcm9tX3JlZ2lzdGVyX3dyaXRlOworCWlmIChydGw4MTh4X2lvcmVhZDMyKHByaXYsICZwcml2LT5tYXAtPlJYX0NPTkYpICYgKDEgPDwgNikpCisJCWVlcHJvbS53aWR0aCA9IFBDSV9FRVBST01fV0lEVEhfOTNDNjY7CisJZWxzZQorCQllZXByb20ud2lkdGggPSBQQ0lfRUVQUk9NX1dJRFRIXzkzQzQ2OworCisJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5FRVBST01fQ01ELCBSVEw4MThYX0VFUFJPTV9DTURfQ09ORklHKTsKKwl1ZGVsYXkoMTApOworCisJZWVwcm9tXzkzY3g2X211bHRpcmVhZCgmZWVwcm9tLCBSVEw4MTg3X0VFUFJPTV9NQUNfQUREUiwKKwkJCSAgICAgICAoX19sZTE2IF9fZm9yY2UgKiltYWNfYWRkciwgMyk7CisJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKG1hY19hZGRyKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJydGw4MTg3OiBJbnZhbGlkIGh3YWRkciEgVXNpbmcgcmFuZG9tbHkgIgorCQkgICAgICAgImdlbmVyYXRlZCBNQUMgYWRkcmVzc1xuIik7CisJCXJhbmRvbV9ldGhlcl9hZGRyKG1hY19hZGRyKTsKKwl9CisJU0VUX0lFRUU4MDIxMV9QRVJNX0FERFIoZGV2LCBtYWNfYWRkcik7CisKKwljaGFubmVsID0gcHJpdi0+Y2hhbm5lbHM7CisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQllZXByb21fOTNjeDZfcmVhZCgmZWVwcm9tLCBSVEw4MTg3X0VFUFJPTV9UWFBXUl9DSEFOXzEgKyBpLAorCQkJCSAgJnR4cHdyKTsKKwkJKCpjaGFubmVsKyspLmh3X3ZhbHVlID0gdHhwd3IgJiAweEZGOworCQkoKmNoYW5uZWwrKykuaHdfdmFsdWUgPSB0eHB3ciA+PiA4OworCX0KKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCWVlcHJvbV85M2N4Nl9yZWFkKCZlZXByb20sIFJUTDgxODdfRUVQUk9NX1RYUFdSX0NIQU5fNCArIGksCisJCQkJICAmdHhwd3IpOworCQkoKmNoYW5uZWwrKykuaHdfdmFsdWUgPSB0eHB3ciAmIDB4RkY7CisJCSgqY2hhbm5lbCsrKS5od192YWx1ZSA9IHR4cHdyID4+IDg7CisJfQorCisJZWVwcm9tXzkzY3g2X3JlYWQoJmVlcHJvbSwgUlRMODE4N19FRVBST01fVFhQV1JfQkFTRSwKKwkJCSAgJnByaXYtPnR4cHdyX2Jhc2UpOworCisJcmVnID0gcnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPlBHU0VMRUNUKSAmIH4xOworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+UEdTRUxFQ1QsIHJlZyB8IDEpOworCS8qIDAgbWVhbnMgYXNpYyBCLWN1dCwgd2Ugc2hvdWxkIHVzZSBTVyAzIHdpcmUKKwkgKiBiaXQtYnktYml0IGJhbmdpbmcgZm9yIHJhZGlvLiAxIG1lYW5zIHdlIGNhbiB1c2UKKwkgKiBVU0Igc3BlY2lmaWMgcmVxdWVzdCB0byB3cml0ZSByYWRpbyByZWdpc3RlcnMgKi8KKwlwcml2LT5hc2ljX3JldiA9IHJ0bDgxOHhfaW9yZWFkOChwcml2LCAodTggKikweEZGRkUpICYgMHgzOworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+UEdTRUxFQ1QsIHJlZyk7CisJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5FRVBST01fQ01ELCBSVEw4MThYX0VFUFJPTV9DTURfTk9STUFMKTsKKworCWlmICghcHJpdi0+aXNfcnRsODE4N2IpIHsKKwkJdTMyIHJlZzMyOworCQlyZWczMiA9IHJ0bDgxOHhfaW9yZWFkMzIocHJpdiwgJnByaXYtPm1hcC0+VFhfQ09ORik7CisJCXJlZzMyICY9IFJUTDgxOFhfVFhfQ09ORl9IV1ZFUl9NQVNLOworCQlzd2l0Y2ggKHJlZzMyKSB7CisJCWNhc2UgUlRMODE4WF9UWF9DT05GX1I4MTg3dkRfQjoKKwkJCS8qIFNvbWUgUlRMODE4N0IgZGV2aWNlcyBoYXZlIGEgVVNCIElEIG9mIDB4ODE4NworCQkJICogZGV0ZWN0IHRoZW0gaGVyZSAqLworCQkJY2hpcF9uYW1lID0gIlJUTDgxODdCdkIoZWFybHkpIjsKKwkJCXByaXYtPmlzX3J0bDgxODdiID0gMTsKKwkJCXByaXYtPmh3X3JldiA9IFJUTDgxODdCdkI7CisJCQlicmVhazsKKwkJY2FzZSBSVEw4MThYX1RYX0NPTkZfUjgxODd2RDoKKwkJCWNoaXBfbmFtZSA9ICJSVEw4MTg3dkQiOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQljaGlwX25hbWUgPSAiUlRMODE4N3ZCIChkZWZhdWx0KSI7CisJCX0KKyAgICAgICB9IGVsc2UgeworCQkvKgorCQkgKiBGb3JjZSBVU0IgcmVxdWVzdCB0byB3cml0ZSByYWRpbyByZWdpc3RlcnMgZm9yIDgxODdCLCBSZWFsdGVrCisJCSAqIG9ubHkgdXNlcyBpdCBpbiB0aGVpciBzb3VyY2VzCisJCSAqLworCQkvKmlmIChwcml2LT5hc2ljX3JldiA9PSAwKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJydGw4MTg3OiBGb3JjaW5nIHVzZSBvZiBVU0IgIgorCQkJICAgICAgICJyZXF1ZXN0cyB0byB3cml0ZSB0byByYWRpbyByZWdpc3RlcnNcbiIpOworCQkJcHJpdi0+YXNpY19yZXYgPSAxOworCQl9Ki8KKwkJc3dpdGNoIChydGw4MTh4X2lvcmVhZDgocHJpdiwgKHU4ICopMHhGRkUxKSkgeworCQljYXNlIFJUTDgxOFhfUjgxODdCX0I6CisJCQljaGlwX25hbWUgPSAiUlRMODE4N0J2QiI7CisJCQlwcml2LT5od19yZXYgPSBSVEw4MTg3QnZCOworCQkJYnJlYWs7CisJCWNhc2UgUlRMODE4WF9SODE4N0JfRDoKKwkJCWNoaXBfbmFtZSA9ICJSVEw4MTg3QnZEIjsKKwkJCXByaXYtPmh3X3JldiA9IFJUTDgxODdCdkQ7CisJCQlicmVhazsKKwkJY2FzZSBSVEw4MThYX1I4MTg3Ql9FOgorCQkJY2hpcF9uYW1lID0gIlJUTDgxODdCdkUiOworCQkJcHJpdi0+aHdfcmV2ID0gUlRMODE4N0J2RTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJY2hpcF9uYW1lID0gIlJUTDgxODdCdkIgKGRlZmF1bHQpIjsKKwkJCXByaXYtPmh3X3JldiA9IFJUTDgxODdCdkI7CisJCX0KKwl9CisKKwlpZiAoIXByaXYtPmlzX3J0bDgxODdiKSB7CisJCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJCWVlcHJvbV85M2N4Nl9yZWFkKCZlZXByb20sCisJCQkJCSAgUlRMODE4N19FRVBST01fVFhQV1JfQ0hBTl82ICsgaSwKKwkJCQkJICAmdHhwd3IpOworCQkJKCpjaGFubmVsKyspLmh3X3ZhbHVlID0gdHhwd3IgJiAweEZGOworCQkJKCpjaGFubmVsKyspLmh3X3ZhbHVlID0gdHhwd3IgPj4gODsKKwkJfQorCX0gZWxzZSB7CisJCWVlcHJvbV85M2N4Nl9yZWFkKCZlZXByb20sIFJUTDgxODdfRUVQUk9NX1RYUFdSX0NIQU5fNiwKKwkJCQkgICZ0eHB3cik7CisJCSgqY2hhbm5lbCsrKS5od192YWx1ZSA9IHR4cHdyICYgMHhGRjsKKworCQllZXByb21fOTNjeDZfcmVhZCgmZWVwcm9tLCAweDBBLCAmdHhwd3IpOworCQkoKmNoYW5uZWwrKykuaHdfdmFsdWUgPSB0eHB3ciAmIDB4RkY7CisKKwkJZWVwcm9tXzkzY3g2X3JlYWQoJmVlcHJvbSwgMHgxQywgJnR4cHdyKTsKKwkJKCpjaGFubmVsKyspLmh3X3ZhbHVlID0gdHhwd3IgJiAweEZGOworCQkoKmNoYW5uZWwrKykuaHdfdmFsdWUgPSB0eHB3ciA+PiA4OworCX0KKwkvKiBIYW5kbGUgdGhlIGRpZmZlcmluZyByZmtpbGwgR1BJTyBiaXQgaW4gZGlmZmVyZW50IG1vZGVscyAqLworCXByaXYtPnJma2lsbF9tYXNrID0gUkZLSUxMX01BU0tfODE4N184OV85NzsKKwlpZiAocHJvZHVjdF9pZCA9PSAweDgxOTcgfHwgcHJvZHVjdF9pZCA9PSAweDgxOTgpIHsKKwkJZWVwcm9tXzkzY3g2X3JlYWQoJmVlcHJvbSwgUlRMODE4N19FRVBST01fU0VMRUNUX0dQSU8sICZyZWcpOworCQlpZiAocmVnICYgMHhGRjAwKQorCQkJcHJpdi0+cmZraWxsX21hc2sgPSBSRktJTExfTUFTS184MTk4OworCX0KKworCS8qCisJICogWFhYOiBPbmNlIHRoaXMgZHJpdmVyIHN1cHBvcnRzIGFueXRoaW5nIHRoYXQgcmVxdWlyZXMKKwkgKgliZWFjb25zIGl0IG11c3QgaW1wbGVtZW50IElFRUU4MDIxMV9UWF9DVExfQVNTSUdOX1NFUS4KKwkgKi8KKwlkZXYtPndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgPSBCSVQoTkw4MDIxMV9JRlRZUEVfU1RBVElPTik7CisKKwlpZiAoKGlkLT5kcml2ZXJfaW5mbyA9PSBERVZJQ0VfUlRMODE4NykgJiYgcHJpdi0+aXNfcnRsODE4N2IpCisJCXByaW50ayhLRVJOX0lORk8gInJ0bDgxODc6IGluY29uc2lzdGVuY3kgYmV0d2VlbiBpZCB3aXRoIE9FTSIKKwkJICAgICAgICIgaW5mbyFcbiIpOworCisJcHJpdi0+cmYgPSBydGw4MTg3X2RldGVjdF9yZihkZXYpOworCWRldi0+ZXh0cmFfdHhfaGVhZHJvb20gPSAoIXByaXYtPmlzX3J0bDgxODdiKSA/CisJCQkJICBzaXplb2Yoc3RydWN0IHJ0bDgxODdfdHhfaGRyKSA6CisJCQkJICBzaXplb2Yoc3RydWN0IHJ0bDgxODdiX3R4X2hkcik7CisJaWYgKCFwcml2LT5pc19ydGw4MTg3YikKKwkJZGV2LT5xdWV1ZXMgPSAxOworCWVsc2UKKwkJZGV2LT5xdWV1ZXMgPSA0OworCisJZXJyID0gaWVlZTgwMjExX3JlZ2lzdGVyX2h3KGRldik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgInJ0bDgxODc6IENhbm5vdCByZWdpc3RlciBkZXZpY2VcbiIpOworCQlnb3RvIGVycl9mcmVlX2RtYWJ1ZjsKKwl9CisJbXV0ZXhfaW5pdCgmcHJpdi0+Y29uZl9tdXRleCk7CisJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmcHJpdi0+Yl90eF9zdGF0dXMucXVldWUpOworCisJd2lwaHlfaW5mbyhkZXYtPndpcGh5LCAiaHdhZGRyICVwTSwgJXMgViVkICsgJXMsIHJma2lsbCBtYXNrICVkXG4iLAorCQkgICBtYWNfYWRkciwgY2hpcF9uYW1lLCBwcml2LT5hc2ljX3JldiwgcHJpdi0+cmYtPm5hbWUsCisJCSAgIHByaXYtPnJma2lsbF9tYXNrKTsKKworI2lmZGVmIENPTkZJR19SVEw4MTg3X0xFRFMKKwllZXByb21fOTNjeDZfcmVhZCgmZWVwcm9tLCAweDNGLCAmcmVnKTsKKwlyZWcgJj0gMHhGRjsKKwlydGw4MTg3X2xlZHNfaW5pdChkZXYsIHJlZyk7CisjZW5kaWYKKwlydGw4MTg3X3Jma2lsbF9pbml0KGRldik7CisKKwlyZXR1cm4gMDsKKworIGVycl9mcmVlX2RtYWJ1ZjoKKwlrZnJlZShwcml2LT5pb19kbWFidWYpOworIGVycl9mcmVlX2RldjoKKwlpZWVlODAyMTFfZnJlZV9odyhkZXYpOworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CisJdXNiX3B1dF9kZXYodWRldik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IHJ0bDgxODdfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCXN0cnVjdCBydGw4MTg3X3ByaXYgKnByaXY7CisKKwlpZiAoIWRldikKKwkJcmV0dXJuOworCisjaWZkZWYgQ09ORklHX1JUTDgxODdfTEVEUworCXJ0bDgxODdfbGVkc19leGl0KGRldik7CisjZW5kaWYKKwlydGw4MTg3X3Jma2lsbF9leGl0KGRldik7CisJaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcoZGV2KTsKKworCXByaXYgPSBkZXYtPnByaXY7CisJdXNiX3Jlc2V0X2RldmljZShwcml2LT51ZGV2KTsKKwl1c2JfcHV0X2RldihpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpKTsKKwlrZnJlZShwcml2LT5pb19kbWFidWYpOworCWllZWU4MDIxMV9mcmVlX2h3KGRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBydGw4MTg3X2RyaXZlciA9IHsKKwkubmFtZQkJPSBLQlVJTERfTU9ETkFNRSwKKwkuaWRfdGFibGUJPSBydGw4MTg3X3RhYmxlLAorCS5wcm9iZQkJPSBydGw4MTg3X3Byb2JlLAorCS5kaXNjb25uZWN0CT0gX19kZXZleGl0X3AocnRsODE4N19kaXNjb25uZWN0KSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHJ0bDgxODdfaW5pdCh2b2lkKQoreworCXJldHVybiB1c2JfcmVnaXN0ZXIoJnJ0bDgxODdfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHJ0bDgxODdfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZydGw4MTg3X2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHJ0bDgxODdfaW5pdCk7Cittb2R1bGVfZXhpdChydGw4MTg3X2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTg3L2xlZHMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4Ny9sZWRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmUwZGUyZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4Ny9sZWRzLmMKQEAgLTAsMCArMSwyNDUgQEAKKy8qCisgKiBMaW51eCBMRUQgZHJpdmVyIGZvciBSVEw4MTg3CisgKgorICogQ29weXJpZ2h0IDIwMDkgTGFycnkgRmluZ2VyIDxMYXJyeS5GaW5nZXJAbHdmaW5nZXIubmV0PgorICoKKyAqIEJhc2VkIG9uIHRoZSBMRUQgaGFuZGxpbmcgaW4gdGhlIHI4MTg3IGRyaXZlciwgd2hpY2ggaXM6CisgKiBDb3B5cmlnaHQgKGMpIFJlYWx0ZWsgU2VtaWNvbmR1Y3RvciBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoYW5rcyB0byBSZWFsdGVrIGZvciB0aGVpciBzdXBwb3J0IQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmZGVmIENPTkZJR19SVEw4MTg3X0xFRFMKKworI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L2VlcHJvbV85M2N4Ni5oPgorCisjaW5jbHVkZSAicnRsODE4Ny5oIgorI2luY2x1ZGUgImxlZHMuaCIKKworc3RhdGljIHZvaWQgbGVkX3R1cm5fb24oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCS8qIEFzIHRoaXMgcm91dGluZSBkb2VzIHJlYWQvd3JpdGUgb3BlcmF0aW9ucyBvbiB0aGUgaGFyZHdhcmUsIGl0IG11c3QKKwkgKiBiZSBydW4gZnJvbSBhIHdvcmsgcXVldWUuCisJICovCisJdTggcmVnOworCXN0cnVjdCBydGw4MTg3X3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHJ0bDgxODdfcHJpdiwKKwkJCQkgICAgbGVkX29uLndvcmspOworCXN0cnVjdCBydGw4MTg3X2xlZCAqbGVkID0gJnByaXYtPmxlZF90eDsKKworCS8qIERvbid0IGNoYW5nZSB0aGUgTEVELCB3aGVuIHRoZSBkZXZpY2UgaXMgZG93bi4gKi8KKwlpZiAoIXByaXYtPnZpZiB8fCBwcml2LT52aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfVU5TUEVDSUZJRUQpCisJCXJldHVybiA7CisKKwkvKiBTa2lwIGlmIHRoZSBMRUQgaXMgbm90IHJlZ2lzdGVyZWQuICovCisJaWYgKCFsZWQtPmRldikKKwkJcmV0dXJuOworCW11dGV4X2xvY2soJnByaXYtPmNvbmZfbXV0ZXgpOworCXN3aXRjaCAobGVkLT5sZWRwaW4pIHsKKwljYXNlIExFRF9QSU5fR1BJTzA6CisJCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+R1BJTzAsIDB4MDEpOworCQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkdQX0VOQUJMRSwgMHgwMCk7CisJCWJyZWFrOworCWNhc2UgTEVEX1BJTl9MRUQwOgorCQlyZWcgPSBydGw4MTh4X2lvcmVhZDgocHJpdiwgJnByaXYtPm1hcC0+UEdTRUxFQ1QpICYgfigxIDw8IDQpOworCQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPlBHU0VMRUNULCByZWcpOworCQlicmVhazsKKwljYXNlIExFRF9QSU5fTEVEMToKKwkJcmVnID0gcnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPlBHU0VMRUNUKSAmIH4oMSA8PCA1KTsKKwkJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5QR1NFTEVDVCwgcmVnKTsKKwkJYnJlYWs7CisJY2FzZSBMRURfUElOX0hXOgorCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwltdXRleF91bmxvY2soJnByaXYtPmNvbmZfbXV0ZXgpOworfQorCitzdGF0aWMgdm9pZCBsZWRfdHVybl9vZmYoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCS8qIEFzIHRoaXMgcm91dGluZSBkb2VzIHJlYWQvd3JpdGUgb3BlcmF0aW9ucyBvbiB0aGUgaGFyZHdhcmUsIGl0IG11c3QKKwkgKiBiZSBydW4gZnJvbSBhIHdvcmsgcXVldWUuCisJICovCisJdTggcmVnOworCXN0cnVjdCBydGw4MTg3X3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHJ0bDgxODdfcHJpdiwKKwkJCQkgICAgbGVkX29mZi53b3JrKTsKKwlzdHJ1Y3QgcnRsODE4N19sZWQgKmxlZCA9ICZwcml2LT5sZWRfdHg7CisKKwkvKiBEb24ndCBjaGFuZ2UgdGhlIExFRCwgd2hlbiB0aGUgZGV2aWNlIGlzIGRvd24uICovCisJaWYgKCFwcml2LT52aWYgfHwgcHJpdi0+dmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEKQorCQlyZXR1cm4gOworCisJLyogU2tpcCBpZiB0aGUgTEVEIGlzIG5vdCByZWdpc3RlcmVkLiAqLworCWlmICghbGVkLT5kZXYpCisJCXJldHVybjsKKwltdXRleF9sb2NrKCZwcml2LT5jb25mX211dGV4KTsKKwlzd2l0Y2ggKGxlZC0+bGVkcGluKSB7CisJY2FzZSBMRURfUElOX0dQSU8wOgorCQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkdQSU8wLCAweDAxKTsKKwkJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5HUF9FTkFCTEUsIDB4MDEpOworCQlicmVhazsKKwljYXNlIExFRF9QSU5fTEVEMDoKKwkJcmVnID0gcnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPlBHU0VMRUNUKSB8ICgxIDw8IDQpOworCQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPlBHU0VMRUNULCByZWcpOworCQlicmVhazsKKwljYXNlIExFRF9QSU5fTEVEMToKKwkJcmVnID0gcnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPlBHU0VMRUNUKSB8ICgxIDw8IDUpOworCQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPlBHU0VMRUNULCByZWcpOworCQlicmVhazsKKwljYXNlIExFRF9QSU5fSFc6CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCW11dGV4X3VubG9jaygmcHJpdi0+Y29uZl9tdXRleCk7Cit9CisKKy8qIENhbGxiYWNrIGZyb20gdGhlIExFRCBzdWJzeXN0ZW0uICovCitzdGF0aWMgdm9pZCBydGw4MTg3X2xlZF9icmlnaHRuZXNzX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfZGV2LAorCQkJCSAgIGVudW0gbGVkX2JyaWdodG5lc3MgYnJpZ2h0bmVzcykKK3sKKwlzdHJ1Y3QgcnRsODE4N19sZWQgKmxlZCA9IGNvbnRhaW5lcl9vZihsZWRfZGV2LCBzdHJ1Y3QgcnRsODE4N19sZWQsCisJCQkJCSAgICAgICBsZWRfZGV2KTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IGxlZC0+ZGV2OworCXN0cnVjdCBydGw4MTg3X3ByaXYgKnByaXY7CisJc3RhdGljIGJvb2wgcmFkaW9fb247CisKKwlpZiAoIWh3KQorCQlyZXR1cm47CisJcHJpdiA9IGh3LT5wcml2OworCWlmIChsZWQtPmlzX3JhZGlvKSB7CisJCWlmIChicmlnaHRuZXNzID09IExFRF9GVUxMKSB7CisJCQlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKGh3LCAmcHJpdi0+bGVkX29uLCAwKTsKKwkJCXJhZGlvX29uID0gdHJ1ZTsKKwkJfSBlbHNlIGlmIChyYWRpb19vbikgeworCQkJcmFkaW9fb24gPSBmYWxzZTsKKwkJCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcHJpdi0+bGVkX29uKTsKKwkJCWllZWU4MDIxMV9xdWV1ZV9kZWxheWVkX3dvcmsoaHcsICZwcml2LT5sZWRfb2ZmLCAwKTsKKwkJfQorCX0gZWxzZSBpZiAocmFkaW9fb24pIHsKKwkJaWYgKGJyaWdodG5lc3MgPT0gTEVEX09GRikgeworCQkJaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayhodywgJnByaXYtPmxlZF9vZmYsIDApOworCQkJLyogVGhlIExFRCBpcyBvZmYgZm9yIDEvMjAgc2VjIC0gaXQganVzdCBibGlua3MuICovCisJCQlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKGh3LCAmcHJpdi0+bGVkX29uLAorCQkJCQkJICAgICBIWiAvIDIwKTsKKwkJfSBlbHNlCisJCQlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKGh3LCAmcHJpdi0+bGVkX29uLCAwKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcnRsODE4N19yZWdpc3Rlcl9sZWQoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAorCQkJCXN0cnVjdCBydGw4MTg3X2xlZCAqbGVkLCBjb25zdCBjaGFyICpuYW1lLAorCQkJCWNvbnN0IGNoYXIgKmRlZmF1bHRfdHJpZ2dlciwgdTggbGVkcGluLAorCQkJCWJvb2wgaXNfcmFkaW8pCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2ID0gZGV2LT5wcml2OworCisJaWYgKGxlZC0+ZGV2KQorCQlyZXR1cm4gLUVFWElTVDsKKwlpZiAoIWRlZmF1bHRfdHJpZ2dlcikKKwkJcmV0dXJuIC1FSU5WQUw7CisJbGVkLT5kZXYgPSBkZXY7CisJbGVkLT5sZWRwaW4gPSBsZWRwaW47CisJbGVkLT5pc19yYWRpbyA9IGlzX3JhZGlvOworCXN0cm5jcHkobGVkLT5uYW1lLCBuYW1lLCBzaXplb2YobGVkLT5uYW1lKSk7CisKKwlsZWQtPmxlZF9kZXYubmFtZSA9IGxlZC0+bmFtZTsKKwlsZWQtPmxlZF9kZXYuZGVmYXVsdF90cmlnZ2VyID0gZGVmYXVsdF90cmlnZ2VyOworCWxlZC0+bGVkX2Rldi5icmlnaHRuZXNzX3NldCA9IHJ0bDgxODdfbGVkX2JyaWdodG5lc3Nfc2V0OworCisJZXJyID0gbGVkX2NsYXNzZGV2X3JlZ2lzdGVyKCZwcml2LT51ZGV2LT5kZXYsICZsZWQtPmxlZF9kZXYpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiTEVEczogRmFpbGVkIHRvIHJlZ2lzdGVyICVzXG4iLCBuYW1lKTsKKwkJbGVkLT5kZXYgPSBOVUxMOworCQlyZXR1cm4gZXJyOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcnRsODE4N191bnJlZ2lzdGVyX2xlZChzdHJ1Y3QgcnRsODE4N19sZWQgKmxlZCkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IGxlZC0+ZGV2OworCXN0cnVjdCBydGw4MTg3X3ByaXYgKnByaXYgPSBody0+cHJpdjsKKworCWxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKCZsZWQtPmxlZF9kZXYpOworCWZsdXNoX2RlbGF5ZWRfd29yaygmcHJpdi0+bGVkX29mZik7CisJbGVkLT5kZXYgPSBOVUxMOworfQorCit2b2lkIHJ0bDgxODdfbGVkc19pbml0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgdTE2IGN1c3RpZCkKK3sKKwlzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2ID0gZGV2LT5wcml2OworCWNoYXIgbmFtZVtSVEw4MTg3X0xFRF9NQVhfTkFNRV9MRU4gKyAxXTsKKwl1OCBsZWRwaW47CisJaW50IGVycjsKKworCS8qIEFjY29yZGluZyB0byB0aGUgdmVuZG9yIGRyaXZlciwgdGhlIExFRCBvcGVyYXRpb24gZGVwZW5kcyBvbiB0aGUKKwkgKiBjdXN0b21lciBJRCBlbmNvZGVkIGluIHRoZSBFRVBST00KKwkgKi8KKwlwcmludGsoS0VSTl9JTkZPICJydGw4MTg3OiBDdXN0b21lciBJRCBpcyAweCUwMlhcbiIsIGN1c3RpZCk7CisJc3dpdGNoIChjdXN0aWQpIHsKKwljYXNlIEVFUFJPTV9DSURfUlNWRDA6CisJY2FzZSBFRVBST01fQ0lEX1JTVkQxOgorCWNhc2UgRUVQUk9NX0NJRF9TRVJDT01NX1BTOgorCWNhc2UgRUVQUk9NX0NJRF9RTUk6CisJY2FzZSBFRVBST01fQ0lEX0RFTEw6CisJY2FzZSBFRVBST01fQ0lEX1RPU0hJQkE6CisJCWxlZHBpbiA9IExFRF9QSU5fR1BJTzA7CisJCWJyZWFrOworCWNhc2UgRUVQUk9NX0NJRF9BTFBIQTA6CisJCWxlZHBpbiA9IExFRF9QSU5fTEVEMDsKKwkJYnJlYWs7CisJY2FzZSBFRVBST01fQ0lEX0hXOgorCQlsZWRwaW4gPSBMRURfUElOX0hXOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlsZWRwaW4gPSBMRURfUElOX0dQSU8wOworCX0KKworCUlOSVRfREVMQVlFRF9XT1JLKCZwcml2LT5sZWRfb24sIGxlZF90dXJuX29uKTsKKwlJTklUX0RFTEFZRURfV09SSygmcHJpdi0+bGVkX29mZiwgbGVkX3R1cm5fb2ZmKTsKKworCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwKKwkJICJydGw4MTg3LSVzOjpyYWRpbyIsIHdpcGh5X25hbWUoZGV2LT53aXBoeSkpOworCWVyciA9IHJ0bDgxODdfcmVnaXN0ZXJfbGVkKGRldiwgJnByaXYtPmxlZF9yYWRpbywgbmFtZSwKKwkJCSBpZWVlODAyMTFfZ2V0X3JhZGlvX2xlZF9uYW1lKGRldiksIGxlZHBpbiwgdHJ1ZSk7CisJaWYgKGVycikKKwkJcmV0dXJuOworCisJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLAorCQkgInJ0bDgxODctJXM6OnR4Iiwgd2lwaHlfbmFtZShkZXYtPndpcGh5KSk7CisJZXJyID0gcnRsODE4N19yZWdpc3Rlcl9sZWQoZGV2LCAmcHJpdi0+bGVkX3R4LCBuYW1lLAorCQkJIGllZWU4MDIxMV9nZXRfdHhfbGVkX25hbWUoZGV2KSwgbGVkcGluLCBmYWxzZSk7CisJaWYgKGVycikKKwkJZ290byBlcnJfdHg7CisKKwlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksCisJCSAicnRsODE4Ny0lczo6cngiLCB3aXBoeV9uYW1lKGRldi0+d2lwaHkpKTsKKwllcnIgPSBydGw4MTg3X3JlZ2lzdGVyX2xlZChkZXYsICZwcml2LT5sZWRfcngsIG5hbWUsCisJCQkgaWVlZTgwMjExX2dldF9yeF9sZWRfbmFtZShkZXYpLCBsZWRwaW4sIGZhbHNlKTsKKwlpZiAoIWVycikKKwkJcmV0dXJuOworCisJLyogcmVnaXN0cmF0aW9uIG9mIFJYIExFRCBmYWlsZWQgLSB1bnJlZ2lzdGVyICovCisJcnRsODE4N191bnJlZ2lzdGVyX2xlZCgmcHJpdi0+bGVkX3R4KTsKK2Vycl90eDoKKwlydGw4MTg3X3VucmVnaXN0ZXJfbGVkKCZwcml2LT5sZWRfcmFkaW8pOworfQorCit2b2lkIHJ0bDgxODdfbGVkc19leGl0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKK3sKKwlzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2ID0gZGV2LT5wcml2OworCisJcnRsODE4N191bnJlZ2lzdGVyX2xlZCgmcHJpdi0+bGVkX3JhZGlvKTsKKwlydGw4MTg3X3VucmVnaXN0ZXJfbGVkKCZwcml2LT5sZWRfcngpOworCXJ0bDgxODdfdW5yZWdpc3Rlcl9sZWQoJnByaXYtPmxlZF90eCk7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZwcml2LT5sZWRfb2ZmKTsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnByaXYtPmxlZF9vbik7Cit9CisjZW5kaWYgLyogZGVmIENPTkZJR19SVEw4MTg3X0xFRFMgKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTg3X2xlZHMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4Ny9sZWRzLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4N19sZWRzLmgKcmVuYW1lIHRvIGRyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4Ny9sZWRzLmgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4Ny9yZmtpbGwuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4Ny9yZmtpbGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDExNjcxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTg3L3Jma2lsbC5jCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBMaW51eCBSRktJTEwgc3VwcG9ydCBmb3IgUlRMODE4NworICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBIZXJ0b24gUm9uYWxkbyBLcnplc2luc2tpIDxoZXJ0b25AbWFuZHJpdmEuY29tLmJyPgorICoKKyAqIEJhc2VkIG9uIHRoZSBSRktJTEwgaGFuZGxpbmcgaW4gdGhlIHI4MTg3IGRyaXZlciwgd2hpY2ggaXM6CisgKiBDb3B5cmlnaHQgKGMpIFJlYWx0ZWsgU2VtaWNvbmR1Y3RvciBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoYW5rcyB0byBSZWFsdGVrIGZvciB0aGVpciBzdXBwb3J0IQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CisKKyNpbmNsdWRlICJydGw4MTg3LmgiCisjaW5jbHVkZSAicmZraWxsLmgiCisKK3N0YXRpYyBib29sIHJ0bDgxODdfaXNfcmFkaW9fZW5hYmxlZChzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2KQoreworCXU4IGdwaW87CisKKwlncGlvID0gcnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPkdQSU8wKTsKKwlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkdQSU8wLCBncGlvICYgfnByaXYtPnJma2lsbF9tYXNrKTsKKwlncGlvID0gcnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPkdQSU8xKTsKKworCXJldHVybiBncGlvICYgcHJpdi0+cmZraWxsX21hc2s7Cit9CisKK3ZvaWQgcnRsODE4N19yZmtpbGxfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2ID0gaHctPnByaXY7CisKKwlwcml2LT5yZmtpbGxfb2ZmID0gcnRsODE4N19pc19yYWRpb19lbmFibGVkKHByaXYpOworCXByaW50ayhLRVJOX0lORk8gInJ0bDgxODc6IHdpcmVsZXNzIHN3aXRjaCBpcyAlc1xuIiwKKwkgICAgICAgcHJpdi0+cmZraWxsX29mZiA/ICJvbiIgOiAib2ZmIik7CisJd2lwaHlfcmZraWxsX3NldF9od19zdGF0ZShody0+d2lwaHksICFwcml2LT5yZmtpbGxfb2ZmKTsKKwl3aXBoeV9yZmtpbGxfc3RhcnRfcG9sbGluZyhody0+d2lwaHkpOworfQorCit2b2lkIHJ0bDgxODdfcmZraWxsX3BvbGwoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJYm9vbCBlbmFibGVkOworCXN0cnVjdCBydGw4MTg3X3ByaXYgKnByaXYgPSBody0+cHJpdjsKKworCW11dGV4X2xvY2soJnByaXYtPmNvbmZfbXV0ZXgpOworCWVuYWJsZWQgPSBydGw4MTg3X2lzX3JhZGlvX2VuYWJsZWQocHJpdik7CisJaWYgKHVubGlrZWx5KGVuYWJsZWQgIT0gcHJpdi0+cmZraWxsX29mZikpIHsKKwkJcHJpdi0+cmZraWxsX29mZiA9IGVuYWJsZWQ7CisJCXByaW50ayhLRVJOX0lORk8gInJ0bDgxODc6IHdpcmVsZXNzIHJhZGlvIHN3aXRjaCB0dXJuZWQgJXNcbiIsCisJCSAgICAgICBlbmFibGVkID8gIm9uIiA6ICJvZmYiKTsKKwkJd2lwaHlfcmZraWxsX3NldF9od19zdGF0ZShody0+d2lwaHksICFlbmFibGVkKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5jb25mX211dGV4KTsKK30KKwordm9pZCBydGw4MTg3X3Jma2lsbF9leGl0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXdpcGh5X3Jma2lsbF9zdG9wX3BvbGxpbmcoaHctPndpcGh5KTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4N19yZmtpbGwuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4Ny9yZmtpbGwuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTg3X3Jma2lsbC5oCnJlbmFtZSB0byBkcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODcvcmZraWxsLmgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4Ny9ydGw4MTg3LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODcvcnRsODE4Ny5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkN2IxNDIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODcvcnRsODE4Ny5oCkBAIC0wLDAgKzEsMjcxIEBACisvKgorICogRGVmaW5pdGlvbnMgZm9yIFJUTDgxODcgaGFyZHdhcmUKKyAqCisgKiBDb3B5cmlnaHQgMjAwNyBNaWNoYWVsIFd1IDxmbGFtaW5naWNlQHNvdXJtaWxrLm5ldD4KKyAqIENvcHlyaWdodCAyMDA3IEFuZHJlYSBNZXJlbGxvIDxhbmRyZWFtcmxAdGlzY2FsaS5pdD4KKyAqCisgKiBCYXNlZCBvbiB0aGUgcjgxODcgZHJpdmVyLCB3aGljaCBpczoKKyAqIENvcHlyaWdodCAyMDA1IEFuZHJlYSBNZXJlbGxvIDxhbmRyZWFtcmxAdGlzY2FsaS5pdD4sIGV0IGFsLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBSVEw4MTg3X0gKKyNkZWZpbmUgUlRMODE4N19ICisKKyNpbmNsdWRlICJydGw4MTh4LmgiCisjaW5jbHVkZSAibGVkcy5oIgorCisjZGVmaW5lIFJUTDgxODdfRUVQUk9NX1RYUFdSX0JBU0UJMHgwNQorI2RlZmluZSBSVEw4MTg3X0VFUFJPTV9NQUNfQUREUgkJMHgwNworI2RlZmluZSBSVEw4MTg3X0VFUFJPTV9UWFBXUl9DSEFOXzEJMHgxNgkvKiAzIGNoYW5uZWxzICovCisjZGVmaW5lIFJUTDgxODdfRUVQUk9NX1RYUFdSX0NIQU5fNgkweDFCCS8qIDIgY2hhbm5lbHMgKi8KKyNkZWZpbmUgUlRMODE4N19FRVBST01fVFhQV1JfQ0hBTl80CTB4M0QJLyogMiBjaGFubmVscyAqLworI2RlZmluZSBSVEw4MTg3X0VFUFJPTV9TRUxFQ1RfR1BJTwkweDNCCisKKyNkZWZpbmUgUlRMODE4N19SRVFUX1JFQUQJMHhDMAorI2RlZmluZSBSVEw4MTg3X1JFUVRfV1JJVEUJMHg0MAorI2RlZmluZSBSVEw4MTg3X1JFUV9HRVRfUkVHCTB4MDUKKyNkZWZpbmUgUlRMODE4N19SRVFfU0VUX1JFRwkweDA1CisKKyNkZWZpbmUgUlRMODE4N19NQVhfUlgJCTB4OUM0CisKKyNkZWZpbmUgUkZLSUxMX01BU0tfODE4N184OV85NwkweDIKKyNkZWZpbmUgUkZLSUxMX01BU0tfODE5OAkweDQKKworc3RydWN0IHJ0bDgxODdfcnhfaW5mbyB7CisJc3RydWN0IHVyYiAqdXJiOworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmRldjsKK307CisKK3N0cnVjdCBydGw4MTg3X3J4X2hkciB7CisJX19sZTMyIGZsYWdzOworCXU4IG5vaXNlOworCXU4IHNpZ25hbDsKKwl1OCBhZ2M7CisJdTggcmVzZXJ2ZWQ7CisJX19sZTY0IG1hY190aW1lOworfSBfX3BhY2tlZDsKKworc3RydWN0IHJ0bDgxODdiX3J4X2hkciB7CisJX19sZTMyIGZsYWdzOworCV9fbGU2NCBtYWNfdGltZTsKKwl1OCBzcTsKKwl1OCByc3NpOworCXU4IGFnYzsKKwl1OCBmbGFnczI7CisJX19sZTE2IHNucl9sb25nMmVuZDsKKwlzOCBwd2RiX2cxMjsKKwl1OCBmb3Q7Cit9IF9fcGFja2VkOworCisvKiB7cnRsODE4NyxydGw4MTg3Yn1fdHhfaW5mbyBpcyBpbiBza2IgKi8KKworc3RydWN0IHJ0bDgxODdfdHhfaGRyIHsKKwlfX2xlMzIgZmxhZ3M7CisJX19sZTE2IHJ0c19kdXJhdGlvbjsKKwlfX2xlMTYgbGVuOworCV9fbGUzMiByZXRyeTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBydGw4MTg3Yl90eF9oZHIgeworCV9fbGUzMiBmbGFnczsKKwlfX2xlMTYgcnRzX2R1cmF0aW9uOworCV9fbGUxNiBsZW47CisJX19sZTMyIHVudXNlZF8xOworCV9fbGUxNiB1bnVzZWRfMjsKKwlfX2xlMTYgdHhfZHVyYXRpb247CisJX19sZTMyIHVudXNlZF8zOworCV9fbGUzMiByZXRyeTsKKwlfX2xlMzIgdW51c2VkXzRbMl07Cit9IF9fcGFja2VkOworCitlbnVtIHsKKwlERVZJQ0VfUlRMODE4NywKKwlERVZJQ0VfUlRMODE4N0IKK307CisKK3N0cnVjdCBydGw4MTg3X3ByaXYgeworCS8qIGNvbW1vbiBiZXR3ZWVuIHJ0bDgxOHggZHJpdmVycyAqLworCXN0cnVjdCBydGw4MTh4X2NzciAqbWFwOworCWNvbnN0IHN0cnVjdCBydGw4MTh4X3JmX29wcyAqcmY7CisJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZjsKKworCS8qIFRoZSBtdXRleCBwcm90ZWN0cyB0aGUgVFggbG9vcGJhY2sgc3RhdGUuCisJICogQW55IGF0dGVtcHQgdG8gc2V0IGNoYW5uZWxzIGNvbmN1cnJlbnRseSBsb2NrcyB0aGUgZGV2aWNlLgorCSAqLworCXN0cnVjdCBtdXRleCBjb25mX211dGV4OworCisJLyogcnRsODE4NyBzcGVjaWZpYyAqLworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCBjaGFubmVsc1sxNF07CisJc3RydWN0IGllZWU4MDIxMV9yYXRlIHJhdGVzWzEyXTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kIGJhbmQ7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CisJdTMyIHJ4X2NvbmY7CisJc3RydWN0IHVzYl9hbmNob3IgYW5jaG9yZWQ7CisJc3RydWN0IGRlbGF5ZWRfd29yayB3b3JrOworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmRldjsKKyNpZmRlZiBDT05GSUdfUlRMODE4N19MRURTCisJc3RydWN0IHJ0bDgxODdfbGVkIGxlZF9yYWRpbzsKKwlzdHJ1Y3QgcnRsODE4N19sZWQgbGVkX3R4OworCXN0cnVjdCBydGw4MTg3X2xlZCBsZWRfcng7CisJc3RydWN0IGRlbGF5ZWRfd29yayBsZWRfb247CisJc3RydWN0IGRlbGF5ZWRfd29yayBsZWRfb2ZmOworI2VuZGlmCisJdTE2IHR4cHdyX2Jhc2U7CisJdTggYXNpY19yZXY7CisJdTggaXNfcnRsODE4N2I7CisJZW51bSB7CisJCVJUTDgxODdCdkIsCisJCVJUTDgxODdCdkQsCisJCVJUTDgxODdCdkUKKwl9IGh3X3JldjsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHJ4X3F1ZXVlOworCXU4IHNpZ25hbDsKKwl1OCBub2lzZTsKKwl1OCBzbG90X3RpbWU7CisJdTggYWlmc25bNF07CisJdTggcmZraWxsX21hc2s7CisJc3RydWN0IHsKKwkJX19sZTY0IGJ1ZjsKKwkJc3RydWN0IHNrX2J1ZmZfaGVhZCBxdWV1ZTsKKwl9IGJfdHhfc3RhdHVzOyAvKiBUaGlzIHF1ZXVlIGlzIHVzZWQgYnkgYm90aCAtYiBhbmQgbm9uLWIgZGV2aWNlcyAqLworCXN0cnVjdCBtdXRleCBpb19tdXRleDsKKwl1bmlvbiB7CisJCXU4IGJpdHM4OworCQlfX2xlMTYgYml0czE2OworCQlfX2xlMzIgYml0czMyOworCX0gKmlvX2RtYWJ1ZjsKKwlib29sIHJma2lsbF9vZmY7Cit9OworCit2b2lkIHJ0bDgxODdfd3JpdGVfcGh5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgdTggYWRkciwgdTMyIGRhdGEpOworCitzdGF0aWMgaW5saW5lIHU4IHJ0bDgxOHhfaW9yZWFkOF9pZHgoc3RydWN0IHJ0bDgxODdfcHJpdiAqcHJpdiwKKwkJCQkgICAgIHU4ICphZGRyLCB1OCBpZHgpCit7CisJdTggdmFsOworCisJbXV0ZXhfbG9jaygmcHJpdi0+aW9fbXV0ZXgpOworCXVzYl9jb250cm9sX21zZyhwcml2LT51ZGV2LCB1c2JfcmN2Y3RybHBpcGUocHJpdi0+dWRldiwgMCksCisJCQlSVEw4MTg3X1JFUV9HRVRfUkVHLCBSVEw4MTg3X1JFUVRfUkVBRCwKKwkJCSh1bnNpZ25lZCBsb25nKWFkZHIsIGlkeCAmIDB4MDMsCisJCQkmcHJpdi0+aW9fZG1hYnVmLT5iaXRzOCwgc2l6ZW9mKHZhbCksIEhaIC8gMik7CisKKwl2YWwgPSBwcml2LT5pb19kbWFidWYtPmJpdHM4OworCW11dGV4X3VubG9jaygmcHJpdi0+aW9fbXV0ZXgpOworCisJcmV0dXJuIHZhbDsKK30KKworc3RhdGljIGlubGluZSB1OCBydGw4MTh4X2lvcmVhZDgoc3RydWN0IHJ0bDgxODdfcHJpdiAqcHJpdiwgdTggKmFkZHIpCit7CisJcmV0dXJuIHJ0bDgxOHhfaW9yZWFkOF9pZHgocHJpdiwgYWRkciwgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTE2IHJ0bDgxOHhfaW9yZWFkMTZfaWR4KHN0cnVjdCBydGw4MTg3X3ByaXYgKnByaXYsCisJCQkJICAgICAgIF9fbGUxNiAqYWRkciwgdTggaWR4KQoreworCV9fbGUxNiB2YWw7CisKKwltdXRleF9sb2NrKCZwcml2LT5pb19tdXRleCk7CisJdXNiX2NvbnRyb2xfbXNnKHByaXYtPnVkZXYsIHVzYl9yY3ZjdHJscGlwZShwcml2LT51ZGV2LCAwKSwKKwkJCVJUTDgxODdfUkVRX0dFVF9SRUcsIFJUTDgxODdfUkVRVF9SRUFELAorCQkJKHVuc2lnbmVkIGxvbmcpYWRkciwgaWR4ICYgMHgwMywKKwkJCSZwcml2LT5pb19kbWFidWYtPmJpdHMxNiwgc2l6ZW9mKHZhbCksIEhaIC8gMik7CisKKwl2YWwgPSBwcml2LT5pb19kbWFidWYtPmJpdHMxNjsKKwltdXRleF91bmxvY2soJnByaXYtPmlvX211dGV4KTsKKworCXJldHVybiBsZTE2X3RvX2NwdSh2YWwpOworfQorCitzdGF0aWMgaW5saW5lIHUxNiBydGw4MTh4X2lvcmVhZDE2KHN0cnVjdCBydGw4MTg3X3ByaXYgKnByaXYsIF9fbGUxNiAqYWRkcikKK3sKKwlyZXR1cm4gcnRsODE4eF9pb3JlYWQxNl9pZHgocHJpdiwgYWRkciwgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIHJ0bDgxOHhfaW9yZWFkMzJfaWR4KHN0cnVjdCBydGw4MTg3X3ByaXYgKnByaXYsCisJCQkJICAgICAgIF9fbGUzMiAqYWRkciwgdTggaWR4KQoreworCV9fbGUzMiB2YWw7CisKKwltdXRleF9sb2NrKCZwcml2LT5pb19tdXRleCk7CisJdXNiX2NvbnRyb2xfbXNnKHByaXYtPnVkZXYsIHVzYl9yY3ZjdHJscGlwZShwcml2LT51ZGV2LCAwKSwKKwkJCVJUTDgxODdfUkVRX0dFVF9SRUcsIFJUTDgxODdfUkVRVF9SRUFELAorCQkJKHVuc2lnbmVkIGxvbmcpYWRkciwgaWR4ICYgMHgwMywKKwkJCSZwcml2LT5pb19kbWFidWYtPmJpdHMzMiwgc2l6ZW9mKHZhbCksIEhaIC8gMik7CisKKwl2YWwgPSBwcml2LT5pb19kbWFidWYtPmJpdHMzMjsKKwltdXRleF91bmxvY2soJnByaXYtPmlvX211dGV4KTsKKworCXJldHVybiBsZTMyX3RvX2NwdSh2YWwpOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBydGw4MTh4X2lvcmVhZDMyKHN0cnVjdCBydGw4MTg3X3ByaXYgKnByaXYsIF9fbGUzMiAqYWRkcikKK3sKKwlyZXR1cm4gcnRsODE4eF9pb3JlYWQzMl9pZHgocHJpdiwgYWRkciwgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBydGw4MTh4X2lvd3JpdGU4X2lkeChzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2LAorCQkJCQl1OCAqYWRkciwgdTggdmFsLCB1OCBpZHgpCit7CisJbXV0ZXhfbG9jaygmcHJpdi0+aW9fbXV0ZXgpOworCisJcHJpdi0+aW9fZG1hYnVmLT5iaXRzOCA9IHZhbDsKKwl1c2JfY29udHJvbF9tc2cocHJpdi0+dWRldiwgdXNiX3NuZGN0cmxwaXBlKHByaXYtPnVkZXYsIDApLAorCQkJUlRMODE4N19SRVFfU0VUX1JFRywgUlRMODE4N19SRVFUX1dSSVRFLAorCQkJKHVuc2lnbmVkIGxvbmcpYWRkciwgaWR4ICYgMHgwMywKKwkJCSZwcml2LT5pb19kbWFidWYtPmJpdHM4LCBzaXplb2YodmFsKSwgSFogLyAyKTsKKworCW11dGV4X3VubG9jaygmcHJpdi0+aW9fbXV0ZXgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcnRsODE4eF9pb3dyaXRlOChzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2LCB1OCAqYWRkciwgdTggdmFsKQoreworCXJ0bDgxOHhfaW93cml0ZThfaWR4KHByaXYsIGFkZHIsIHZhbCwgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBydGw4MTh4X2lvd3JpdGUxNl9pZHgoc3RydWN0IHJ0bDgxODdfcHJpdiAqcHJpdiwKKwkJCQkJIF9fbGUxNiAqYWRkciwgdTE2IHZhbCwgdTggaWR4KQoreworCW11dGV4X2xvY2soJnByaXYtPmlvX211dGV4KTsKKworCXByaXYtPmlvX2RtYWJ1Zi0+Yml0czE2ID0gY3B1X3RvX2xlMTYodmFsKTsKKwl1c2JfY29udHJvbF9tc2cocHJpdi0+dWRldiwgdXNiX3NuZGN0cmxwaXBlKHByaXYtPnVkZXYsIDApLAorCQkJUlRMODE4N19SRVFfU0VUX1JFRywgUlRMODE4N19SRVFUX1dSSVRFLAorCQkJKHVuc2lnbmVkIGxvbmcpYWRkciwgaWR4ICYgMHgwMywKKwkJCSZwcml2LT5pb19kbWFidWYtPmJpdHMxNiwgc2l6ZW9mKHZhbCksIEhaIC8gMik7CisKKwltdXRleF91bmxvY2soJnByaXYtPmlvX211dGV4KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJ0bDgxOHhfaW93cml0ZTE2KHN0cnVjdCBydGw4MTg3X3ByaXYgKnByaXYsIF9fbGUxNiAqYWRkciwKKwkJCQkgICAgIHUxNiB2YWwpCit7CisJcnRsODE4eF9pb3dyaXRlMTZfaWR4KHByaXYsIGFkZHIsIHZhbCwgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBydGw4MTh4X2lvd3JpdGUzMl9pZHgoc3RydWN0IHJ0bDgxODdfcHJpdiAqcHJpdiwKKwkJCQkJIF9fbGUzMiAqYWRkciwgdTMyIHZhbCwgdTggaWR4KQoreworCW11dGV4X2xvY2soJnByaXYtPmlvX211dGV4KTsKKworCXByaXYtPmlvX2RtYWJ1Zi0+Yml0czMyID0gY3B1X3RvX2xlMzIodmFsKTsKKwl1c2JfY29udHJvbF9tc2cocHJpdi0+dWRldiwgdXNiX3NuZGN0cmxwaXBlKHByaXYtPnVkZXYsIDApLAorCQkJUlRMODE4N19SRVFfU0VUX1JFRywgUlRMODE4N19SRVFUX1dSSVRFLAorCQkJKHVuc2lnbmVkIGxvbmcpYWRkciwgaWR4ICYgMHgwMywKKwkJCSZwcml2LT5pb19kbWFidWYtPmJpdHMzMiwgc2l6ZW9mKHZhbCksIEhaIC8gMik7CisKKwltdXRleF91bmxvY2soJnByaXYtPmlvX211dGV4KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJ0bDgxOHhfaW93cml0ZTMyKHN0cnVjdCBydGw4MTg3X3ByaXYgKnByaXYsIF9fbGUzMiAqYWRkciwKKwkJCQkgICAgIHUzMiB2YWwpCit7CisJcnRsODE4eF9pb3dyaXRlMzJfaWR4KHByaXYsIGFkZHIsIHZhbCwgMCk7Cit9CisKKyNlbmRpZiAvKiBSVEw4MTg3X0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4Ny9ydGw4MjI1LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODcvcnRsODIyNS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwODkwM2YKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODcvcnRsODIyNS5jCkBAIC0wLDAgKzEsOTYxIEBACisvKgorICogUmFkaW8gdHVuaW5nIGZvciBSVEw4MjI1IG9uIFJUTDgxODcKKyAqCisgKiBDb3B5cmlnaHQgMjAwNyBNaWNoYWVsIFd1IDxmbGFtaW5naWNlQHNvdXJtaWxrLm5ldD4KKyAqIENvcHlyaWdodCAyMDA3IEFuZHJlYSBNZXJlbGxvIDxhbmRyZWFtcmxAdGlzY2FsaS5pdD4KKyAqCisgKiBCYXNlZCBvbiB0aGUgcjgxODcgZHJpdmVyLCB3aGljaCBpczoKKyAqIENvcHlyaWdodCAyMDA1IEFuZHJlYSBNZXJlbGxvIDxhbmRyZWFtcmxAdGlzY2FsaS5pdD4sIGV0IGFsLgorICoKKyAqIE1hZ2ljIGRlbGF5cywgcmVnaXN0ZXIgb2Zmc2V0cywgYW5kIHBoeSB2YWx1ZSB0YWJsZXMgYmVsb3cgYXJlCisgKiB0YWtlbiBmcm9tIHRoZSBvcmlnaW5hbCByODE4NyBkcml2ZXIgc291cmNlcy4gIFRoYW5rcyB0byBSZWFsdGVrCisgKiBmb3IgdGhlaXIgc3VwcG9ydCEKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CisKKyNpbmNsdWRlICJydGw4MTg3LmgiCisjaW5jbHVkZSAicnRsODIyNS5oIgorCitzdGF0aWMgdm9pZCBydGw4MjI1X3dyaXRlX2JpdGJhbmcoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCB1OCBhZGRyLCB1MTYgZGF0YSkKK3sKKwlzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2ID0gZGV2LT5wcml2OworCXUxNiByZWc4MCwgcmVnODQsIHJlZzgyOworCXUzMiBiYW5nZGF0YTsKKwlpbnQgaTsKKworCWJhbmdkYXRhID0gKGRhdGEgPDwgNCkgfCAoYWRkciAmIDB4Zik7CisKKwlyZWc4MCA9IHJ0bDgxOHhfaW9yZWFkMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zT3V0cHV0KSAmIDB4ZmZmMzsKKwlyZWc4MiA9IHJ0bDgxOHhfaW9yZWFkMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zRW5hYmxlKTsKKworCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc0VuYWJsZSwgcmVnODIgfCAweDcpOworCisJcmVnODQgPSBydGw4MTh4X2lvcmVhZDE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc1NlbGVjdCk7CisJcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zU2VsZWN0LCByZWc4NCB8IDB4Nyk7CisJdWRlbGF5KDEwKTsKKworCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc091dHB1dCwgcmVnODAgfCAoMSA8PCAyKSk7CisJdWRlbGF5KDIpOworCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc091dHB1dCwgcmVnODApOworCXVkZWxheSgxMCk7CisKKwlmb3IgKGkgPSAxNTsgaSA+PSAwOyBpLS0pIHsKKwkJdTE2IHJlZyA9IHJlZzgwIHwgKGJhbmdkYXRhICYgKDEgPDwgaSkpID4+IGk7CisKKwkJaWYgKGkgJiAxKQorCQkJcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zT3V0cHV0LCByZWcpOworCisJCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc091dHB1dCwgcmVnIHwgKDEgPDwgMSkpOworCQlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNPdXRwdXQsIHJlZyB8ICgxIDw8IDEpKTsKKworCQlpZiAoIShpICYgMSkpCisJCQlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNPdXRwdXQsIHJlZyk7CisJfQorCisJcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zT3V0cHV0LCByZWc4MCB8ICgxIDw8IDIpKTsKKwl1ZGVsYXkoMTApOworCisJcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zT3V0cHV0LCByZWc4MCB8ICgxIDw8IDIpKTsKKwlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNTZWxlY3QsIHJlZzg0KTsKK30KKworc3RhdGljIHZvaWQgcnRsODIyNV93cml0ZV84MDUxKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgdTggYWRkciwgX19sZTE2IGRhdGEpCit7CisJc3RydWN0IHJ0bDgxODdfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKKwl1MTYgcmVnODAsIHJlZzgyLCByZWc4NDsKKworCXJlZzgwID0gcnRsODE4eF9pb3JlYWQxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNPdXRwdXQpOworCXJlZzgyID0gcnRsODE4eF9pb3JlYWQxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNFbmFibGUpOworCXJlZzg0ID0gcnRsODE4eF9pb3JlYWQxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNTZWxlY3QpOworCisJcmVnODAgJj0gfigweDMgPDwgMik7CisJcmVnODQgJj0gfjB4RjsKKworCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc0VuYWJsZSwgcmVnODIgfCAweDAwMDcpOworCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc1NlbGVjdCwgcmVnODQgfCAweDAwMDcpOworCXVkZWxheSgxMCk7CisKKwlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNPdXRwdXQsIHJlZzgwIHwgKDEgPDwgMikpOworCXVkZWxheSgyKTsKKworCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc091dHB1dCwgcmVnODApOworCXVkZWxheSgxMCk7CisKKwltdXRleF9sb2NrKCZwcml2LT5pb19tdXRleCk7CisKKwlwcml2LT5pb19kbWFidWYtPmJpdHMxNiA9IGRhdGE7CisJdXNiX2NvbnRyb2xfbXNnKHByaXYtPnVkZXYsIHVzYl9zbmRjdHJscGlwZShwcml2LT51ZGV2LCAwKSwKKwkJCVJUTDgxODdfUkVRX1NFVF9SRUcsIFJUTDgxODdfUkVRVF9XUklURSwKKwkJCWFkZHIsIDB4ODIyNSwgJnByaXYtPmlvX2RtYWJ1Zi0+Yml0czE2LCBzaXplb2YoZGF0YSksCisJCQlIWiAvIDIpOworCisJbXV0ZXhfdW5sb2NrKCZwcml2LT5pb19tdXRleCk7CisKKwlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNPdXRwdXQsIHJlZzgwIHwgKDEgPDwgMikpOworCXVkZWxheSgxMCk7CisKKwlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNPdXRwdXQsIHJlZzgwIHwgKDEgPDwgMikpOworCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc1NlbGVjdCwgcmVnODQpOworfQorCitzdGF0aWMgdm9pZCBydGw4MjI1X3dyaXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgdTggYWRkciwgdTE2IGRhdGEpCit7CisJc3RydWN0IHJ0bDgxODdfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKKworCWlmIChwcml2LT5hc2ljX3JldikKKwkJcnRsODIyNV93cml0ZV84MDUxKGRldiwgYWRkciwgY3B1X3RvX2xlMTYoZGF0YSkpOworCWVsc2UKKwkJcnRsODIyNV93cml0ZV9iaXRiYW5nKGRldiwgYWRkciwgZGF0YSk7Cit9CisKK3N0YXRpYyB1MTYgcnRsODIyNV9yZWFkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgdTggYWRkcikKK3sKKwlzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2ID0gZGV2LT5wcml2OworCXUxNiByZWc4MCwgcmVnODIsIHJlZzg0LCBvdXQ7CisJaW50IGk7CisKKwlyZWc4MCA9IHJ0bDgxOHhfaW9yZWFkMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zT3V0cHV0KTsKKwlyZWc4MiA9IHJ0bDgxOHhfaW9yZWFkMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zRW5hYmxlKTsKKwlyZWc4NCA9IHJ0bDgxOHhfaW9yZWFkMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zU2VsZWN0KTsKKworCXJlZzgwICY9IH4weEY7CisKKwlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNFbmFibGUsIHJlZzgyIHwgMHgwMDBGKTsKKwlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNTZWxlY3QsIHJlZzg0IHwgMHgwMDBGKTsKKworCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc091dHB1dCwgcmVnODAgfCAoMSA8PCAyKSk7CisJdWRlbGF5KDQpOworCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc091dHB1dCwgcmVnODApOworCXVkZWxheSg1KTsKKworCWZvciAoaSA9IDQ7IGkgPj0gMDsgaS0tKSB7CisJCXUxNiByZWcgPSByZWc4MCB8ICgoYWRkciA+PiBpKSAmIDEpOworCisJCWlmICghKGkgJiAxKSkgeworCQkJcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zT3V0cHV0LCByZWcpOworCQkJdWRlbGF5KDEpOworCQl9CisKKwkJcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zT3V0cHV0LAorCQkJCSAgcmVnIHwgKDEgPDwgMSkpOworCQl1ZGVsYXkoMik7CisJCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc091dHB1dCwKKwkJCQkgIHJlZyB8ICgxIDw8IDEpKTsKKwkJdWRlbGF5KDIpOworCisJCWlmIChpICYgMSkgeworCQkJcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zT3V0cHV0LCByZWcpOworCQkJdWRlbGF5KDEpOworCQl9CisJfQorCisJcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zT3V0cHV0LAorCQkJICByZWc4MCB8ICgxIDw8IDMpIHwgKDEgPDwgMSkpOworCXVkZWxheSgyKTsKKwlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNPdXRwdXQsCisJCQkgIHJlZzgwIHwgKDEgPDwgMykpOworCXVkZWxheSgyKTsKKwlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNPdXRwdXQsCisJCQkgIHJlZzgwIHwgKDEgPDwgMykpOworCXVkZWxheSgyKTsKKworCW91dCA9IDA7CisJZm9yIChpID0gMTE7IGkgPj0gMDsgaS0tKSB7CisJCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc091dHB1dCwKKwkJCQkgIHJlZzgwIHwgKDEgPDwgMykpOworCQl1ZGVsYXkoMSk7CisJCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc091dHB1dCwKKwkJCQkgIHJlZzgwIHwgKDEgPDwgMykgfCAoMSA8PCAxKSk7CisJCXVkZWxheSgyKTsKKwkJcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zT3V0cHV0LAorCQkJCSAgcmVnODAgfCAoMSA8PCAzKSB8ICgxIDw8IDEpKTsKKwkJdWRlbGF5KDIpOworCQlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNPdXRwdXQsCisJCQkJICByZWc4MCB8ICgxIDw8IDMpIHwgKDEgPDwgMSkpOworCQl1ZGVsYXkoMik7CisKKwkJaWYgKHJ0bDgxOHhfaW9yZWFkMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zSW5wdXQpICYgKDEgPDwgMSkpCisJCQlvdXQgfD0gMSA8PCBpOworCisJCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc091dHB1dCwKKwkJCQkgIHJlZzgwIHwgKDEgPDwgMykpOworCQl1ZGVsYXkoMik7CisJfQorCisJcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zT3V0cHV0LAorCQkJICByZWc4MCB8ICgxIDw8IDMpIHwgKDEgPDwgMikpOworCXVkZWxheSgyKTsKKworCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc0VuYWJsZSwgcmVnODIpOworCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc1NlbGVjdCwgcmVnODQpOworCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc091dHB1dCwgMHgwM0EwKTsKKworCXJldHVybiBvdXQ7Cit9CisKK3N0YXRpYyBjb25zdCB1MTYgcnRsODIyNWJjZF9yeGdhaW5bXSA9IHsKKwkweDA0MDAsIDB4MDQwMSwgMHgwNDAyLCAweDA0MDMsIDB4MDQwNCwgMHgwNDA1LCAweDA0MDgsIDB4MDQwOSwKKwkweDA0MGEsIDB4MDQwYiwgMHgwNTAyLCAweDA1MDMsIDB4MDUwNCwgMHgwNTA1LCAweDA1NDAsIDB4MDU0MSwKKwkweDA1NDIsIDB4MDU0MywgMHgwNTQ0LCAweDA1NDUsIDB4MDU4MCwgMHgwNTgxLCAweDA1ODIsIDB4MDU4MywKKwkweDA1ODQsIDB4MDU4NSwgMHgwNTg4LCAweDA1ODksIDB4MDU4YSwgMHgwNThiLCAweDA2NDMsIDB4MDY0NCwKKwkweDA2NDUsIDB4MDY4MCwgMHgwNjgxLCAweDA2ODIsIDB4MDY4MywgMHgwNjg0LCAweDA2ODUsIDB4MDY4OCwKKwkweDA2ODksIDB4MDY4YSwgMHgwNjhiLCAweDA2OGMsIDB4MDc0MiwgMHgwNzQzLCAweDA3NDQsIDB4MDc0NSwKKwkweDA3ODAsIDB4MDc4MSwgMHgwNzgyLCAweDA3ODMsIDB4MDc4NCwgMHgwNzg1LCAweDA3ODgsIDB4MDc4OSwKKwkweDA3OGEsIDB4MDc4YiwgMHgwNzhjLCAweDA3OGQsIDB4MDc5MCwgMHgwNzkxLCAweDA3OTIsIDB4MDc5MywKKwkweDA3OTQsIDB4MDc5NSwgMHgwNzk4LCAweDA3OTksIDB4MDc5YSwgMHgwNzliLCAweDA3OWMsIDB4MDc5ZCwKKwkweDA3YTAsIDB4MDdhMSwgMHgwN2EyLCAweDA3YTMsIDB4MDdhNCwgMHgwN2E1LCAweDA3YTgsIDB4MDdhOSwKKwkweDA3YWEsIDB4MDdhYiwgMHgwN2FjLCAweDA3YWQsIDB4MDdiMCwgMHgwN2IxLCAweDA3YjIsIDB4MDdiMywKKwkweDA3YjQsIDB4MDdiNSwgMHgwN2I4LCAweDA3YjksIDB4MDdiYSwgMHgwN2JiLCAweDA3YmIKK307CisKK3N0YXRpYyBjb25zdCB1OCBydGw4MjI1X2FnY1tdID0geworCTB4OWUsIDB4OWUsIDB4OWUsIDB4OWUsIDB4OWUsIDB4OWUsIDB4OWUsIDB4OWUsCisJMHg5ZCwgMHg5YywgMHg5YiwgMHg5YSwgMHg5OSwgMHg5OCwgMHg5NywgMHg5NiwKKwkweDk1LCAweDk0LCAweDkzLCAweDkyLCAweDkxLCAweDkwLCAweDhmLCAweDhlLAorCTB4OGQsIDB4OGMsIDB4OGIsIDB4OGEsIDB4ODksIDB4ODgsIDB4ODcsIDB4ODYsCisJMHg4NSwgMHg4NCwgMHg4MywgMHg4MiwgMHg4MSwgMHg4MCwgMHgzZiwgMHgzZSwKKwkweDNkLCAweDNjLCAweDNiLCAweDNhLCAweDM5LCAweDM4LCAweDM3LCAweDM2LAorCTB4MzUsIDB4MzQsIDB4MzMsIDB4MzIsIDB4MzEsIDB4MzAsIDB4MmYsIDB4MmUsCisJMHgyZCwgMHgyYywgMHgyYiwgMHgyYSwgMHgyOSwgMHgyOCwgMHgyNywgMHgyNiwKKwkweDI1LCAweDI0LCAweDIzLCAweDIyLCAweDIxLCAweDIwLCAweDFmLCAweDFlLAorCTB4MWQsIDB4MWMsIDB4MWIsIDB4MWEsIDB4MTksIDB4MTgsIDB4MTcsIDB4MTYsCisJMHgxNSwgMHgxNCwgMHgxMywgMHgxMiwgMHgxMSwgMHgxMCwgMHgwZiwgMHgwZSwKKwkweDBkLCAweDBjLCAweDBiLCAweDBhLCAweDA5LCAweDA4LCAweDA3LCAweDA2LAorCTB4MDUsIDB4MDQsIDB4MDMsIDB4MDIsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsCisJMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwKKwkweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLAorCTB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEKK307CisKK3N0YXRpYyBjb25zdCB1OCBydGw4MjI1X2dhaW5bXSA9IHsKKwkweDIzLCAweDg4LCAweDdjLCAweGE1LAkvKiAtODJkQm0gKi8KKwkweDIzLCAweDg4LCAweDdjLCAweGI1LAkvKiAtODJkQm0gKi8KKwkweDIzLCAweDg4LCAweDdjLCAweGM1LAkvKiAtODJkQm0gKi8KKwkweDMzLCAweDgwLCAweDc5LCAweGM1LAkvKiAtNzhkQm0gKi8KKwkweDQzLCAweDc4LCAweDc2LCAweGM1LAkvKiAtNzRkQm0gKi8KKwkweDUzLCAweDYwLCAweDczLCAweGM1LAkvKiAtNzBkQm0gKi8KKwkweDYzLCAweDU4LCAweDcwLCAweGM1LAkvKiAtNjZkQm0gKi8KK307CisKK3N0YXRpYyBjb25zdCB1OCBydGw4MjI1X3RocmVzaG9sZFtdID0geworCTB4OGQsIDB4OGQsIDB4OGQsIDB4OGQsIDB4OWQsIDB4YWQsIDB4YmQKK307CisKK3N0YXRpYyBjb25zdCB1OCBydGw4MjI1X3R4X2dhaW5fY2NrX29mZG1bXSA9IHsKKwkweDAyLCAweDA2LCAweDBlLCAweDFlLCAweDNlLCAweDdlCit9OworCitzdGF0aWMgY29uc3QgdTggcnRsODIyNV90eF9wb3dlcl9jY2tbXSA9IHsKKwkweDE4LCAweDE3LCAweDE1LCAweDExLCAweDBjLCAweDA4LCAweDA0LCAweDAyLAorCTB4MWIsIDB4MWEsIDB4MTcsIDB4MTMsIDB4MGUsIDB4MDksIDB4MDQsIDB4MDIsCisJMHgxZiwgMHgxZSwgMHgxYSwgMHgxNSwgMHgxMCwgMHgwYSwgMHgwNSwgMHgwMiwKKwkweDIyLCAweDIxLCAweDFkLCAweDE4LCAweDExLCAweDBiLCAweDA2LCAweDAyLAorCTB4MjYsIDB4MjUsIDB4MjEsIDB4MWIsIDB4MTQsIDB4MGQsIDB4MDYsIDB4MDMsCisJMHgyYiwgMHgyYSwgMHgyNSwgMHgxZSwgMHgxNiwgMHgwZSwgMHgwNywgMHgwMworfTsKKworc3RhdGljIGNvbnN0IHU4IHJ0bDgyMjVfdHhfcG93ZXJfY2NrX2NoMTRbXSA9IHsKKwkweDE4LCAweDE3LCAweDE1LCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MWIsIDB4MWEsIDB4MTcsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgxZiwgMHgxZSwgMHgxYSwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDIyLCAweDIxLCAweDFkLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MjYsIDB4MjUsIDB4MjEsIDB4MTMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgyYiwgMHgyYSwgMHgyNSwgMHgxNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMAorfTsKKworc3RhdGljIGNvbnN0IHU4IHJ0bDgyMjVfdHhfcG93ZXJfb2ZkbVtdID0geworCTB4ODAsIDB4OTAsIDB4YTIsIDB4YjUsIDB4Y2IsIDB4ZTQKK307CisKK3N0YXRpYyBjb25zdCB1MzIgcnRsODIyNV9jaGFuW10gPSB7CisJMHgwODVjLCAweDA4ZGMsIDB4MDk1YywgMHgwOWRjLCAweDBhNWMsIDB4MGFkYywgMHgwYjVjLAorCTB4MGJkYywgMHgwYzVjLCAweDBjZGMsIDB4MGQ1YywgMHgwZGRjLCAweDBlNWMsIDB4MGY3MgorfTsKKworc3RhdGljIHZvaWQgcnRsODIyNV9yZl9zZXRfdHhfcG93ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBpbnQgY2hhbm5lbCkKK3sKKwlzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2ID0gZGV2LT5wcml2OworCXU4IGNja19wb3dlciwgb2ZkbV9wb3dlcjsKKwljb25zdCB1OCAqdG1wOworCXUzMiByZWc7CisJaW50IGk7CisKKwljY2tfcG93ZXIgPSBwcml2LT5jaGFubmVsc1tjaGFubmVsIC0gMV0uaHdfdmFsdWUgJiAweEY7CisJb2ZkbV9wb3dlciA9IHByaXYtPmNoYW5uZWxzW2NoYW5uZWwgLSAxXS5od192YWx1ZSA+PiA0OworCisJY2NrX3Bvd2VyID0gbWluKGNja19wb3dlciwgKHU4KTExKTsKKwlpZiAob2ZkbV9wb3dlciA+ICh1OCkxNSkKKwkJb2ZkbV9wb3dlciA9IDI1OworCWVsc2UKKwkJb2ZkbV9wb3dlciArPSAxMDsKKworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+VFhfR0FJTl9DQ0ssCisJCQkgcnRsODIyNV90eF9nYWluX2Nja19vZmRtW2Nja19wb3dlciAvIDZdID4+IDEpOworCisJaWYgKGNoYW5uZWwgPT0gMTQpCisJCXRtcCA9ICZydGw4MjI1X3R4X3Bvd2VyX2Nja19jaDE0WyhjY2tfcG93ZXIgJSA2KSAqIDhdOworCWVsc2UKKwkJdG1wID0gJnJ0bDgyMjVfdHhfcG93ZXJfY2NrWyhjY2tfcG93ZXIgJSA2KSAqIDhdOworCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJcnRsODIyNV93cml0ZV9waHlfY2NrKGRldiwgMHg0NCArIGksICp0bXArKyk7CisKKwltc2xlZXAoMSk7IC8vIEZJWE1FOiBvcHRpb25hbD8KKworCS8qIGFuYXBhcmFtMiBvbiAqLworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCwgUlRMODE4WF9FRVBST01fQ01EX0NPTkZJRyk7CisJcmVnID0gcnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPkNPTkZJRzMpOworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+Q09ORklHMywKKwkJCXJlZyB8IFJUTDgxOFhfQ09ORklHM19BTkFQQVJBTV9XUklURSk7CisJcnRsODE4eF9pb3dyaXRlMzIocHJpdiwgJnByaXYtPm1hcC0+QU5BUEFSQU0yLAorCQkJICBSVEw4MTg3X1JUTDgyMjVfQU5BUEFSQU0yX09OKTsKKwlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkNPTkZJRzMsCisJCQlyZWcgJiB+UlRMODE4WF9DT05GSUczX0FOQVBBUkFNX1dSSVRFKTsKKwlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQsIFJUTDgxOFhfRUVQUk9NX0NNRF9OT1JNQUwpOworCisJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDIsIDB4NDIpOworCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCA2LCAweDAwKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgOCwgMHgwMCk7CisKKwlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPlRYX0dBSU5fT0ZETSwKKwkJCSBydGw4MjI1X3R4X2dhaW5fY2NrX29mZG1bb2ZkbV9wb3dlciAvIDZdID4+IDEpOworCisJdG1wID0gJnJ0bDgyMjVfdHhfcG93ZXJfb2ZkbVtvZmRtX3Bvd2VyICUgNl07CisKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgNSwgKnRtcCk7CisJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDcsICp0bXApOworCisJbXNsZWVwKDEpOworfQorCitzdGF0aWMgdm9pZCBydGw4MjI1X3JmX2luaXQoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQoreworCXN0cnVjdCBydGw4MTg3X3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CisJaW50IGk7CisKKwlydGw4MjI1X3dyaXRlKGRldiwgMHgwLCAweDA2Nyk7CisJcnRsODIyNV93cml0ZShkZXYsIDB4MSwgMHhGRTApOworCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDIsIDB4NDREKTsKKwlydGw4MjI1X3dyaXRlKGRldiwgMHgzLCAweDQ0MSk7CisJcnRsODIyNV93cml0ZShkZXYsIDB4NCwgMHg0ODYpOworCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDUsIDB4QkMwKTsKKwlydGw4MjI1X3dyaXRlKGRldiwgMHg2LCAweEFFNik7CisJcnRsODIyNV93cml0ZShkZXYsIDB4NywgMHg4MkEpOworCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDgsIDB4MDFGKTsKKwlydGw4MjI1X3dyaXRlKGRldiwgMHg5LCAweDMzNCk7CisJcnRsODIyNV93cml0ZShkZXYsIDB4QSwgMHhGRDQpOworCXJ0bDgyMjVfd3JpdGUoZGV2LCAweEIsIDB4MzkxKTsKKwlydGw4MjI1X3dyaXRlKGRldiwgMHhDLCAweDA1MCk7CisJcnRsODIyNV93cml0ZShkZXYsIDB4RCwgMHg2REIpOworCXJ0bDgyMjVfd3JpdGUoZGV2LCAweEUsIDB4MDI5KTsKKwlydGw4MjI1X3dyaXRlKGRldiwgMHhGLCAweDkxNCk7IG1zbGVlcCgxMDApOworCisJcnRsODIyNV93cml0ZShkZXYsIDB4MiwgMHhDNEQpOyBtc2xlZXAoMjAwKTsKKwlydGw4MjI1X3dyaXRlKGRldiwgMHgyLCAweDQ0RCk7IG1zbGVlcCgyMDApOworCisJaWYgKCEocnRsODIyNV9yZWFkKGRldiwgNikgJiAoMSA8PCA3KSkpIHsKKwkJcnRsODIyNV93cml0ZShkZXYsIDB4MDIsIDB4MGM0ZCk7CisJCW1zbGVlcCgyMDApOworCQlydGw4MjI1X3dyaXRlKGRldiwgMHgwMiwgMHgwNDRkKTsKKwkJbXNsZWVwKDEwMCk7CisJCWlmICghKHJ0bDgyMjVfcmVhZChkZXYsIDYpICYgKDEgPDwgNykpKQorCQkJd2lwaHlfd2FybihkZXYtPndpcGh5LCAiUkYgQ2FsaWJyYXRpb24gRmFpbGVkISAleFxuIiwKKwkJCQkgICBydGw4MjI1X3JlYWQoZGV2LCA2KSk7CisJfQorCisJcnRsODIyNV93cml0ZShkZXYsIDB4MCwgMHgxMjcpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocnRsODIyNWJjZF9yeGdhaW4pOyBpKyspIHsKKwkJcnRsODIyNV93cml0ZShkZXYsIDB4MSwgaSArIDEpOworCQlydGw4MjI1X3dyaXRlKGRldiwgMHgyLCBydGw4MjI1YmNkX3J4Z2FpbltpXSk7CisJfQorCisJcnRsODIyNV93cml0ZShkZXYsIDB4MCwgMHgwMjcpOworCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDAsIDB4MjJGKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJ0bDgyMjVfYWdjKTsgaSsrKSB7CisJCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweEIsIHJ0bDgyMjVfYWdjW2ldKTsKKwkJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4QSwgMHg4MCArIGkpOworCX0KKworCW1zbGVlcCgxKTsKKworCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDAwLCAweDAxKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgwMSwgMHgwMik7CisJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MDIsIDB4NDIpOworCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDAzLCAweDAwKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgwNCwgMHgwMCk7CisJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MDUsIDB4MDApOworCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDA2LCAweDQwKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgwNywgMHgwMCk7CisJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MDgsIDB4NDApOworCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDA5LCAweGZlKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgwYSwgMHgwOSk7CisJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MGIsIDB4ODApOworCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDBjLCAweDAxKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgwZSwgMHhkMyk7CisJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MGYsIDB4MzgpOworCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDEwLCAweDg0KTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgxMSwgMHgwNik7CisJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MTIsIDB4MjApOworCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDEzLCAweDIwKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgxNCwgMHgwMCk7CisJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MTUsIDB4NDApOworCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDE2LCAweDAwKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgxNywgMHg0MCk7CisJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MTgsIDB4ZWYpOworCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDE5LCAweDE5KTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgxYSwgMHgyMCk7CisJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MWIsIDB4NzYpOworCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDFjLCAweDA0KTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgxZSwgMHg5NSk7CisJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MWYsIDB4NzUpOworCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDIwLCAweDFmKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgyMSwgMHgyNyk7CisJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MjIsIDB4MTYpOworCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDI0LCAweDQ2KTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgyNSwgMHgyMCk7CisJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MjYsIDB4OTApOworCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDI3LCAweDg4KTsKKworCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDBkLCBydGw4MjI1X2dhaW5bMiAqIDRdKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgxYiwgcnRsODIyNV9nYWluWzIgKiA0ICsgMl0pOworCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDFkLCBydGw4MjI1X2dhaW5bMiAqIDQgKyAzXSk7CisJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MjMsIHJ0bDgyMjVfZ2FpblsyICogNCArIDFdKTsKKworCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4MDAsIDB4OTgpOworCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4MDMsIDB4MjApOworCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4MDQsIDB4N2UpOworCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4MDUsIDB4MTIpOworCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4MDYsIDB4ZmMpOworCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4MDcsIDB4NzgpOworCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4MDgsIDB4MmUpOworCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4MTAsIDB4OWIpOworCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4MTEsIDB4ODgpOworCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4MTIsIDB4NDcpOworCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4MTMsIDB4ZDApOworCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4MTksIDB4MDApOworCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4MWEsIDB4YTApOworCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4MWIsIDB4MDgpOworCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4NDAsIDB4ODYpOworCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4NDEsIDB4OGQpOworCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4NDIsIDB4MTUpOworCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4NDMsIDB4MTgpOworCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4NDQsIDB4MWYpOworCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4NDUsIDB4MWUpOworCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4NDYsIDB4MWEpOworCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4NDcsIDB4MTUpOworCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4NDgsIDB4MTApOworCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4NDksIDB4MGEpOworCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4NGEsIDB4MDUpOworCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4NGIsIDB4MDIpOworCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4NGMsIDB4MDUpOworCisJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5URVNUUiwgMHgwRCk7CisKKwlydGw4MjI1X3JmX3NldF90eF9wb3dlcihkZXYsIDEpOworCisJLyogUlggYW50ZW5uYSBkZWZhdWx0IHRvIEEgKi8KKwlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDEwLCAweDliKTsJCQkvKiBCOiAweERCICovCisJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MjYsIDB4OTApOwkJLyogQjogMHgxMCAqLworCisJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5UWF9BTlRFTk5BLCAweDAzKTsJLyogQjogMHgwMCAqLworCW1zbGVlcCgxKTsKKwlydGw4MTh4X2lvd3JpdGUzMihwcml2LCAoX19sZTMyICopMHhGRjk0LCAweDNkYzAwMDAyKTsKKworCS8qIHNldCBzZW5zaXRpdml0eSAqLworCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDBjLCAweDUwKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgwZCwgcnRsODIyNV9nYWluWzIgKiA0XSk7CisJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MWIsIHJ0bDgyMjVfZ2FpblsyICogNCArIDJdKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgxZCwgcnRsODIyNV9nYWluWzIgKiA0ICsgM10pOworCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDIzLCBydGw4MjI1X2dhaW5bMiAqIDQgKyAxXSk7CisJcnRsODIyNV93cml0ZV9waHlfY2NrKGRldiwgMHg0MSwgcnRsODIyNV90aHJlc2hvbGRbMl0pOworfQorCitzdGF0aWMgY29uc3QgdTggcnRsODIyNXoyX2FnY1tdID0geworCTB4NWUsIDB4NWUsIDB4NWUsIDB4NWUsIDB4NWQsIDB4NWIsIDB4NTksIDB4NTcsIDB4NTUsIDB4NTMsIDB4NTEsIDB4NGYsCisJMHg0ZCwgMHg0YiwgMHg0OSwgMHg0NywgMHg0NSwgMHg0MywgMHg0MSwgMHgzZiwgMHgzZCwgMHgzYiwgMHgzOSwgMHgzNywKKwkweDM1LCAweDMzLCAweDMxLCAweDJmLCAweDJkLCAweDJiLCAweDI5LCAweDI3LCAweDI1LCAweDIzLCAweDIxLCAweDFmLAorCTB4MWQsIDB4MWIsIDB4MTksIDB4MTcsIDB4MTUsIDB4MTMsIDB4MTEsIDB4MGYsIDB4MGQsIDB4MGIsIDB4MDksIDB4MDcsCisJMHgwNSwgMHgwMywgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwKKwkweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDE5LCAweDE5LCAweDE5LCAweDE5LCAweDE5LCAweDE5LCAweDE5LCAweDE5LAorCTB4MTksIDB4MjAsIDB4MjEsIDB4MjIsIDB4MjMsIDB4MjQsIDB4MjUsIDB4MjYsIDB4MjYsIDB4MjcsIDB4MjcsIDB4MjgsCisJMHgyOCwgMHgyOSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYiwgMHgyYiwgMHgyYiwgMHgyYywgMHgyYywgMHgyYywgMHgyZCwKKwkweDJkLCAweDJkLCAweDJkLCAweDJlLCAweDJlLCAweDJlLCAweDJlLCAweDJmLCAweDJmLCAweDJmLCAweDMwLCAweDMwLAorCTB4MzEsIDB4MzEsIDB4MzEsIDB4MzEsIDB4MzEsIDB4MzEsIDB4MzEsIDB4MzEsIDB4MzEsIDB4MzEsIDB4MzEsIDB4MzEsCisJMHgzMSwgMHgzMSwgMHgzMSwgMHgzMSwgMHgzMSwgMHgzMSwgMHgzMSwgMHgzMQorfTsKK3N0YXRpYyBjb25zdCB1OCBydGw4MjI1ejJfb2ZkbVtdID0geworCTB4MTAsIDB4MGQsIDB4MDEsIDB4MDAsIDB4MTQsIDB4ZmIsIDB4ZmIsIDB4NjAsCisJMHgwMCwgMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgwMCwgMHgwMCwKKwkweDQwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDI2LAorCTB4MzIsIDB4MzMsIDB4MDcsIDB4YTUsIDB4NmYsIDB4NTUsIDB4YzgsIDB4YjMsCisJMHgwYSwgMHhlMSwgMHgyQywgMHg4YSwgMHg4NiwgMHg4MywgMHgzNCwgMHgwZiwKKwkweDRmLCAweDI0LCAweDZmLCAweGMyLCAweDZiLCAweDQwLCAweDgwLCAweDAwLAorCTB4YzAsIDB4YzEsIDB4NTgsIDB4ZjEsIDB4MDAsIDB4ZTQsIDB4OTAsIDB4M2UsCisJMHg2ZCwgMHgzYywgMHhmYiwgMHgwNworfTsKKworc3RhdGljIGNvbnN0IHU4IHJ0bDgyMjV6Ml90eF9wb3dlcl9jY2tfY2gxNFtdID0geworCTB4MzYsIDB4MzUsIDB4MmUsIDB4MWIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgzMCwgMHgyZiwgMHgyOSwgMHgxNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDMwLCAweDJmLCAweDI5LCAweDE1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MzAsIDB4MmYsIDB4MjksIDB4MTUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAKK307CisKK3N0YXRpYyBjb25zdCB1OCBydGw4MjI1ejJfdHhfcG93ZXJfY2NrW10gPSB7CisJMHgzNiwgMHgzNSwgMHgyZSwgMHgyNSwgMHgxYywgMHgxMiwgMHgwOSwgMHgwNCwKKwkweDMwLCAweDJmLCAweDI5LCAweDIxLCAweDE5LCAweDEwLCAweDA4LCAweDAzLAorCTB4MmIsIDB4MmEsIDB4MjUsIDB4MWUsIDB4MTYsIDB4MGUsIDB4MDcsIDB4MDMsCisJMHgyNiwgMHgyNSwgMHgyMSwgMHgxYiwgMHgxNCwgMHgwZCwgMHgwNiwgMHgwMworfTsKKworc3RhdGljIGNvbnN0IHU4IHJ0bDgyMjV6Ml90eF9wb3dlcl9vZmRtW10gPSB7CisJMHg0MiwgMHgwMCwgMHg0MCwgMHgwMCwgMHg0MAorfTsKKworc3RhdGljIGNvbnN0IHU4IHJ0bDgyMjV6Ml90eF9nYWluX2Nja19vZmRtW10gPSB7CisJMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwKKwkweDA2LCAweDA3LCAweDA4LCAweDA5LCAweDBhLCAweDBiLAorCTB4MGMsIDB4MGQsIDB4MGUsIDB4MGYsIDB4MTAsIDB4MTEsCisJMHgxMiwgMHgxMywgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNywKKwkweDE4LCAweDE5LCAweDFhLCAweDFiLCAweDFjLCAweDFkLAorCTB4MWUsIDB4MWYsIDB4MjAsIDB4MjEsIDB4MjIsIDB4MjMKK307CisKK3N0YXRpYyB2b2lkIHJ0bDgyMjV6Ml9yZl9zZXRfdHhfcG93ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBpbnQgY2hhbm5lbCkKK3sKKwlzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2ID0gZGV2LT5wcml2OworCXU4IGNja19wb3dlciwgb2ZkbV9wb3dlcjsKKwljb25zdCB1OCAqdG1wOworCXUzMiByZWc7CisJaW50IGk7CisKKwljY2tfcG93ZXIgPSBwcml2LT5jaGFubmVsc1tjaGFubmVsIC0gMV0uaHdfdmFsdWUgJiAweEY7CisJb2ZkbV9wb3dlciA9IHByaXYtPmNoYW5uZWxzW2NoYW5uZWwgLSAxXS5od192YWx1ZSA+PiA0OworCisJY2NrX3Bvd2VyID0gbWluKGNja19wb3dlciwgKHU4KTE1KTsKKwljY2tfcG93ZXIgKz0gcHJpdi0+dHhwd3JfYmFzZSAmIDB4RjsKKwljY2tfcG93ZXIgPSBtaW4oY2NrX3Bvd2VyLCAodTgpMzUpOworCisJaWYgKG9mZG1fcG93ZXIgPiAodTgpMTUpCisJCW9mZG1fcG93ZXIgPSAyNTsKKwllbHNlCisJCW9mZG1fcG93ZXIgKz0gMTA7CisJb2ZkbV9wb3dlciArPSBwcml2LT50eHB3cl9iYXNlID4+IDQ7CisJb2ZkbV9wb3dlciA9IG1pbihvZmRtX3Bvd2VyLCAodTgpMzUpOworCisJaWYgKGNoYW5uZWwgPT0gMTQpCisJCXRtcCA9IHJ0bDgyMjV6Ml90eF9wb3dlcl9jY2tfY2gxNDsKKwllbHNlCisJCXRtcCA9IHJ0bDgyMjV6Ml90eF9wb3dlcl9jY2s7CisKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQorCQlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDQ0ICsgaSwgKnRtcCsrKTsKKworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+VFhfR0FJTl9DQ0ssCisJCQkgcnRsODIyNXoyX3R4X2dhaW5fY2NrX29mZG1bY2NrX3Bvd2VyXSk7CisJbXNsZWVwKDEpOworCisJLyogYW5hcGFyYW0yIG9uICovCisJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5FRVBST01fQ01ELCBSVEw4MThYX0VFUFJPTV9DTURfQ09ORklHKTsKKwlyZWcgPSBydGw4MTh4X2lvcmVhZDgocHJpdiwgJnByaXYtPm1hcC0+Q09ORklHMyk7CisJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5DT05GSUczLAorCQkJcmVnIHwgUlRMODE4WF9DT05GSUczX0FOQVBBUkFNX1dSSVRFKTsKKwlydGw4MTh4X2lvd3JpdGUzMihwcml2LCAmcHJpdi0+bWFwLT5BTkFQQVJBTTIsCisJCQkgIFJUTDgxODdfUlRMODIyNV9BTkFQQVJBTTJfT04pOworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+Q09ORklHMywKKwkJCXJlZyAmIH5SVEw4MThYX0NPTkZJRzNfQU5BUEFSQU1fV1JJVEUpOworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCwgUlRMODE4WF9FRVBST01fQ01EX05PUk1BTCk7CisKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMiwgMHg0Mik7CisJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDUsIDB4MDApOworCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCA2LCAweDQwKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgNywgMHgwMCk7CisJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDgsIDB4NDApOworCisJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5UWF9HQUlOX09GRE0sCisJCQkgcnRsODIyNXoyX3R4X2dhaW5fY2NrX29mZG1bb2ZkbV9wb3dlcl0pOworCW1zbGVlcCgxKTsKK30KKworc3RhdGljIHZvaWQgcnRsODIyNXoyX2JfcmZfc2V0X3R4X3Bvd2VyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgaW50IGNoYW5uZWwpCit7CisJc3RydWN0IHJ0bDgxODdfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKKwl1OCBjY2tfcG93ZXIsIG9mZG1fcG93ZXI7CisJY29uc3QgdTggKnRtcDsKKwlpbnQgaTsKKworCWNja19wb3dlciA9IHByaXYtPmNoYW5uZWxzW2NoYW5uZWwgLSAxXS5od192YWx1ZSAmIDB4RjsKKwlvZmRtX3Bvd2VyID0gcHJpdi0+Y2hhbm5lbHNbY2hhbm5lbCAtIDFdLmh3X3ZhbHVlID4+IDQ7CisKKwlpZiAoY2NrX3Bvd2VyID4gMTUpCisJCWNja19wb3dlciA9IChwcml2LT5od19yZXYgPT0gUlRMODE4N0J2QikgPyAxNSA6IDIyOworCWVsc2UKKwkJY2NrX3Bvd2VyICs9IChwcml2LT5od19yZXYgPT0gUlRMODE4N0J2QikgPyAwIDogNzsKKwljY2tfcG93ZXIgKz0gcHJpdi0+dHhwd3JfYmFzZSAmIDB4RjsKKwljY2tfcG93ZXIgPSBtaW4oY2NrX3Bvd2VyLCAodTgpMzUpOworCisJaWYgKG9mZG1fcG93ZXIgPiAxNSkKKwkJb2ZkbV9wb3dlciA9IChwcml2LT5od19yZXYgPT0gUlRMODE4N0J2QikgPyAxNyA6IDI1OworCWVsc2UKKwkJb2ZkbV9wb3dlciArPSAocHJpdi0+aHdfcmV2ID09IFJUTDgxODdCdkIpID8gMiA6IDEwOworCW9mZG1fcG93ZXIgKz0gKHByaXYtPnR4cHdyX2Jhc2UgPj4gNCkgJiAweEY7CisJb2ZkbV9wb3dlciA9IG1pbihvZmRtX3Bvd2VyLCAodTgpMzUpOworCisJaWYgKGNoYW5uZWwgPT0gMTQpCisJCXRtcCA9IHJ0bDgyMjV6Ml90eF9wb3dlcl9jY2tfY2gxNDsKKwllbHNlCisJCXRtcCA9IHJ0bDgyMjV6Ml90eF9wb3dlcl9jY2s7CisKKwlpZiAocHJpdi0+aHdfcmV2ID09IFJUTDgxODdCdkIpIHsKKwkJaWYgKGNja19wb3dlciA8PSA2KQorCQkJOyAvKiBkbyBub3RoaW5nICovCisJCWVsc2UgaWYgKGNja19wb3dlciA8PSAxMSkKKwkJCXRtcCArPSA4OworCQllbHNlCisJCQl0bXAgKz0gMTY7CisJfSBlbHNlIHsKKwkJaWYgKGNja19wb3dlciA8PSA1KQorCQkJOyAvKiBkbyBub3RoaW5nICovCisJCWVsc2UgaWYgKGNja19wb3dlciA8PSAxMSkKKwkJCXRtcCArPSA4OworCQllbHNlIGlmIChjY2tfcG93ZXIgPD0gMTcpCisJCQl0bXAgKz0gMTY7CisJCWVsc2UKKwkJCXRtcCArPSAyNDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQorCQlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDQ0ICsgaSwgKnRtcCsrKTsKKworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+VFhfR0FJTl9DQ0ssCisJCQkgcnRsODIyNXoyX3R4X2dhaW5fY2NrX29mZG1bY2NrX3Bvd2VyXSA8PCAxKTsKKwltc2xlZXAoMSk7CisKKwlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPlRYX0dBSU5fT0ZETSwKKwkJCSBydGw4MjI1ejJfdHhfZ2Fpbl9jY2tfb2ZkbVtvZmRtX3Bvd2VyXSA8PCAxKTsKKwlpZiAocHJpdi0+aHdfcmV2ID09IFJUTDgxODdCdkIpIHsKKwkJaWYgKG9mZG1fcG93ZXIgPD0gMTEpIHsKKwkJCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDg3LCAweDYwKTsKKwkJCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDg5LCAweDYwKTsKKwkJfSBlbHNlIHsKKwkJCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDg3LCAweDVjKTsKKwkJCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDg5LCAweDVjKTsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChvZmRtX3Bvd2VyIDw9IDExKSB7CisJCQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHg4NywgMHg1Yyk7CisJCQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHg4OSwgMHg1Yyk7CisJCX0gZWxzZSBpZiAob2ZkbV9wb3dlciA8PSAxNykgeworCQkJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4ODcsIDB4NTQpOworCQkJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4ODksIDB4NTQpOworCQl9IGVsc2UgeworCQkJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4ODcsIDB4NTApOworCQkJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4ODksIDB4NTApOworCQl9CisJfQorCW1zbGVlcCgxKTsKK30KKworc3RhdGljIGNvbnN0IHUxNiBydGw4MjI1ejJfcnhnYWluW10gPSB7CisJMHgwNDAwLCAweDA0MDEsIDB4MDQwMiwgMHgwNDAzLCAweDA0MDQsIDB4MDQwNSwgMHgwNDA4LCAweDA0MDksCisJMHgwNDBhLCAweDA0MGIsIDB4MDUwMiwgMHgwNTAzLCAweDA1MDQsIDB4MDUwNSwgMHgwNTQwLCAweDA1NDEsCisJMHgwNTQyLCAweDA1NDMsIDB4MDU0NCwgMHgwNTQ1LCAweDA1ODAsIDB4MDU4MSwgMHgwNTgyLCAweDA1ODMsCisJMHgwNTg0LCAweDA1ODUsIDB4MDU4OCwgMHgwNTg5LCAweDA1OGEsIDB4MDU4YiwgMHgwNjQzLCAweDA2NDQsCisJMHgwNjQ1LCAweDA2ODAsIDB4MDY4MSwgMHgwNjgyLCAweDA2ODMsIDB4MDY4NCwgMHgwNjg1LCAweDA2ODgsCisJMHgwNjg5LCAweDA2OGEsIDB4MDY4YiwgMHgwNjhjLCAweDA3NDIsIDB4MDc0MywgMHgwNzQ0LCAweDA3NDUsCisJMHgwNzgwLCAweDA3ODEsIDB4MDc4MiwgMHgwNzgzLCAweDA3ODQsIDB4MDc4NSwgMHgwNzg4LCAweDA3ODksCisJMHgwNzhhLCAweDA3OGIsIDB4MDc4YywgMHgwNzhkLCAweDA3OTAsIDB4MDc5MSwgMHgwNzkyLCAweDA3OTMsCisJMHgwNzk0LCAweDA3OTUsIDB4MDc5OCwgMHgwNzk5LCAweDA3OWEsIDB4MDc5YiwgMHgwNzljLCAweDA3OWQsCisJMHgwN2EwLCAweDA3YTEsIDB4MDdhMiwgMHgwN2EzLCAweDA3YTQsIDB4MDdhNSwgMHgwN2E4LCAweDA3YTksCisJMHgwM2FhLCAweDAzYWIsIDB4MDNhYywgMHgwM2FkLCAweDAzYjAsIDB4MDNiMSwgMHgwM2IyLCAweDAzYjMsCisJMHgwM2I0LCAweDAzYjUsIDB4MDNiOCwgMHgwM2I5LCAweDAzYmEsIDB4MDNiYiwgMHgwM2JiCit9OworCitzdGF0aWMgY29uc3QgdTggcnRsODIyNXoyX2dhaW5fYmdbXSA9IHsKKwkweDIzLCAweDE1LCAweGE1LCAvKiAtODItMWRCbSAqLworCTB4MjMsIDB4MTUsIDB4YjUsIC8qIC04Mi0yZEJtICovCisJMHgyMywgMHgxNSwgMHhjNSwgLyogLTgyLTNkQm0gKi8KKwkweDMzLCAweDE1LCAweGM1LCAvKiAtNzhkQm0gKi8KKwkweDQzLCAweDE1LCAweGM1LCAvKiAtNzRkQm0gKi8KKwkweDUzLCAweDE1LCAweGM1LCAvKiAtNzBkQm0gKi8KKwkweDYzLCAweDE1LCAweGM1ICAvKiAtNjZkQm0gKi8KK307CisKK3N0YXRpYyB2b2lkIHJ0bDgyMjV6Ml9yZl9pbml0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKK3sKKwlzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2ID0gZGV2LT5wcml2OworCWludCBpOworCisJcnRsODIyNV93cml0ZShkZXYsIDB4MCwgMHgyQkYpOworCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDEsIDB4RUUwKTsKKwlydGw4MjI1X3dyaXRlKGRldiwgMHgyLCAweDQ0RCk7CisJcnRsODIyNV93cml0ZShkZXYsIDB4MywgMHg0NDEpOworCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDQsIDB4OEMzKTsKKwlydGw4MjI1X3dyaXRlKGRldiwgMHg1LCAweEM3Mik7CisJcnRsODIyNV93cml0ZShkZXYsIDB4NiwgMHgwRTYpOworCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDcsIDB4ODJBKTsKKwlydGw4MjI1X3dyaXRlKGRldiwgMHg4LCAweDAzRik7CisJcnRsODIyNV93cml0ZShkZXYsIDB4OSwgMHgzMzUpOworCXJ0bDgyMjVfd3JpdGUoZGV2LCAweGEsIDB4OUQ0KTsKKwlydGw4MjI1X3dyaXRlKGRldiwgMHhiLCAweDdCQik7CisJcnRsODIyNV93cml0ZShkZXYsIDB4YywgMHg4NTApOworCXJ0bDgyMjVfd3JpdGUoZGV2LCAweGQsIDB4Q0RGKTsKKwlydGw4MjI1X3dyaXRlKGRldiwgMHhlLCAweDAyQik7CisJcnRsODIyNV93cml0ZShkZXYsIDB4ZiwgMHgxMTQpOworCW1zbGVlcCgxMDApOworCisJcnRsODIyNV93cml0ZShkZXYsIDB4MCwgMHgxQjcpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocnRsODIyNXoyX3J4Z2Fpbik7IGkrKykgeworCQlydGw4MjI1X3dyaXRlKGRldiwgMHgxLCBpICsgMSk7CisJCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDIsIHJ0bDgyMjV6Ml9yeGdhaW5baV0pOworCX0KKworCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDMsIDB4MDgwKTsKKwlydGw4MjI1X3dyaXRlKGRldiwgMHg1LCAweDAwNCk7CisJcnRsODIyNV93cml0ZShkZXYsIDB4MCwgMHgwQjcpOworCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDIsIDB4YzREKTsKKworCW1zbGVlcCgyMDApOworCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDIsIDB4NDREKTsKKwltc2xlZXAoMTAwKTsKKworCWlmICghKHJ0bDgyMjVfcmVhZChkZXYsIDYpICYgKDEgPDwgNykpKSB7CisJCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDAyLCAweDBDNEQpOworCQltc2xlZXAoMjAwKTsKKwkJcnRsODIyNV93cml0ZShkZXYsIDB4MDIsIDB4MDQ0RCk7CisJCW1zbGVlcCgxMDApOworCQlpZiAoIShydGw4MjI1X3JlYWQoZGV2LCA2KSAmICgxIDw8IDcpKSkKKwkJCXdpcGh5X3dhcm4oZGV2LT53aXBoeSwgIlJGIENhbGlicmF0aW9uIEZhaWxlZCEgJXhcbiIsCisJCQkJICAgcnRsODIyNV9yZWFkKGRldiwgNikpOworCX0KKworCW1zbGVlcCgyMDApOworCisJcnRsODIyNV93cml0ZShkZXYsIDB4MCwgMHgyQkYpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocnRsODIyNV9hZ2MpOyBpKyspIHsKKwkJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4QiwgcnRsODIyNV9hZ2NbaV0pOworCQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHhBLCAweDgwICsgaSk7CisJfQorCisJbXNsZWVwKDEpOworCisJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MDAsIDB4MDEpOworCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDAxLCAweDAyKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgwMiwgMHg0Mik7CisJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MDMsIDB4MDApOworCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDA0LCAweDAwKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgwNSwgMHgwMCk7CisJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MDYsIDB4NDApOworCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDA3LCAweDAwKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgwOCwgMHg0MCk7CisJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MDksIDB4ZmUpOworCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDBhLCAweDA4KTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgwYiwgMHg4MCk7CisJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MGMsIDB4MDEpOworCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDBkLCAweDQzKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgwZSwgMHhkMyk7CisJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MGYsIDB4MzgpOworCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDEwLCAweDg0KTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgxMSwgMHgwNyk7CisJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MTIsIDB4MjApOworCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDEzLCAweDIwKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgxNCwgMHgwMCk7CisJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MTUsIDB4NDApOworCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDE2LCAweDAwKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgxNywgMHg0MCk7CisJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MTgsIDB4ZWYpOworCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDE5LCAweDE5KTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgxYSwgMHgyMCk7CisJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MWIsIDB4MTUpOworCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDFjLCAweDA0KTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgxZCwgMHhjNSk7CisJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MWUsIDB4OTUpOworCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDFmLCAweDc1KTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgyMCwgMHgxZik7CisJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MjEsIDB4MTcpOworCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDIyLCAweDE2KTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgyMywgMHg4MCk7CisJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MjQsIDB4NDYpOworCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDI1LCAweDAwKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgyNiwgMHg5MCk7CisJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MjcsIDB4ODgpOworCisJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MGIsIHJ0bDgyMjV6Ml9nYWluX2JnWzQgKiAzXSk7CisJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MWIsIHJ0bDgyMjV6Ml9nYWluX2JnWzQgKiAzICsgMV0pOworCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDFkLCBydGw4MjI1ejJfZ2Fpbl9iZ1s0ICogMyArIDJdKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgyMSwgMHgzNyk7CisKKwlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDAwLCAweDk4KTsKKwlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDAzLCAweDIwKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDA0LCAweDdlKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDA1LCAweDEyKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDA2LCAweGZjKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDA3LCAweDc4KTsKKwlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDA4LCAweDJlKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDEwLCAweDliKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDExLCAweDg4KTsKKwlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDEyLCAweDQ3KTsKKwlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDEzLCAweGQwKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDE5LCAweDAwKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDFhLCAweGEwKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDFiLCAweDA4KTsKKwlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDQwLCAweDg2KTsKKwlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDQxLCAweDhkKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDQyLCAweDE1KTsKKwlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDQzLCAweDE4KTsKKwlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDQ0LCAweDM2KTsKKwlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDQ1LCAweDM1KTsKKwlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDQ2LCAweDJlKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDQ3LCAweDI1KTsKKwlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDQ4LCAweDFjKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDQ5LCAweDEyKTsKKwlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDRhLCAweDA5KTsKKwlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDRiLCAweDA0KTsKKwlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDRjLCAweDA1KTsKKworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgKHU4ICopMHhGRjVCLCAweDBEKTsgbXNsZWVwKDEpOworCisJcnRsODIyNXoyX3JmX3NldF90eF9wb3dlcihkZXYsIDEpOworCisJLyogUlggYW50ZW5uYSBkZWZhdWx0IHRvIEEgKi8KKwlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDEwLCAweDliKTsJCQkvKiBCOiAweERCICovCisJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MjYsIDB4OTApOwkJLyogQjogMHgxMCAqLworCisJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5UWF9BTlRFTk5BLCAweDAzKTsJLyogQjogMHgwMCAqLworCW1zbGVlcCgxKTsKKwlydGw4MTh4X2lvd3JpdGUzMihwcml2LCAoX19sZTMyICopMHhGRjk0LCAweDNkYzAwMDAyKTsKK30KKworc3RhdGljIHZvaWQgcnRsODIyNXoyX2JfcmZfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCit7CisJc3RydWN0IHJ0bDgxODdfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKKwlpbnQgaTsKKworCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDAsIDB4MEI3KTsKKwlydGw4MjI1X3dyaXRlKGRldiwgMHgxLCAweEVFMCk7CisJcnRsODIyNV93cml0ZShkZXYsIDB4MiwgMHg0NEQpOworCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDMsIDB4NDQxKTsKKwlydGw4MjI1X3dyaXRlKGRldiwgMHg0LCAweDhDMyk7CisJcnRsODIyNV93cml0ZShkZXYsIDB4NSwgMHhDNzIpOworCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDYsIDB4MEU2KTsKKwlydGw4MjI1X3dyaXRlKGRldiwgMHg3LCAweDgyQSk7CisJcnRsODIyNV93cml0ZShkZXYsIDB4OCwgMHgwM0YpOworCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDksIDB4MzM1KTsKKwlydGw4MjI1X3dyaXRlKGRldiwgMHhhLCAweDlENCk7CisJcnRsODIyNV93cml0ZShkZXYsIDB4YiwgMHg3QkIpOworCXJ0bDgyMjVfd3JpdGUoZGV2LCAweGMsIDB4ODUwKTsKKwlydGw4MjI1X3dyaXRlKGRldiwgMHhkLCAweENERik7CisJcnRsODIyNV93cml0ZShkZXYsIDB4ZSwgMHgwMkIpOworCXJ0bDgyMjVfd3JpdGUoZGV2LCAweGYsIDB4MTE0KTsKKworCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDAsIDB4MUI3KTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJ0bDgyMjV6Ml9yeGdhaW4pOyBpKyspIHsKKwkJcnRsODIyNV93cml0ZShkZXYsIDB4MSwgaSArIDEpOworCQlydGw4MjI1X3dyaXRlKGRldiwgMHgyLCBydGw4MjI1ejJfcnhnYWluW2ldKTsKKwl9CisKKwlydGw4MjI1X3dyaXRlKGRldiwgMHgzLCAweDA4MCk7CisJcnRsODIyNV93cml0ZShkZXYsIDB4NSwgMHgwMDQpOworCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDAsIDB4MEI3KTsKKworCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDIsIDB4QzREKTsKKworCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDIsIDB4NDREKTsKKwlydGw4MjI1X3dyaXRlKGRldiwgMHgwLCAweDJCRik7CisKKwlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPlRYX0dBSU5fQ0NLLCAweDAzKTsKKwlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPlRYX0dBSU5fT0ZETSwgMHgwNyk7CisJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5UWF9BTlRFTk5BLCAweDAzKTsKKworCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDgwLCAweDEyKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShydGw4MjI1ejJfYWdjKTsgaSsrKSB7CisJCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweEYsIHJ0bDgyMjV6Ml9hZ2NbaV0pOworCQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHhFLCAweDgwICsgaSk7CisJCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweEUsIDApOworCX0KKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHg4MCwgMHgxMCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShydGw4MjI1ejJfb2ZkbSk7IGkrKykKKwkJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIGksIHJ0bDgyMjV6Ml9vZmRtW2ldKTsKKworCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDk3LCAweDQ2KTsKKwlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHhhNCwgMHhiNik7CisJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4ODUsIDB4ZmMpOworCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4YzEsIDB4ODgpOworfQorCitzdGF0aWMgdm9pZCBydGw4MjI1X3JmX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQoreworCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDQsIDB4MWYpOworfQorCitzdGF0aWMgdm9pZCBydGw4MjI1X3JmX3NldF9jaGFubmVsKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKKwkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYpCit7CisJc3RydWN0IHJ0bDgxODdfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKKwlpbnQgY2hhbiA9IGllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbChjb25mLT5jaGFubmVsLT5jZW50ZXJfZnJlcSk7CisKKwlpZiAocHJpdi0+cmYtPmluaXQgPT0gcnRsODIyNV9yZl9pbml0KQorCQlydGw4MjI1X3JmX3NldF90eF9wb3dlcihkZXYsIGNoYW4pOworCWVsc2UgaWYgKHByaXYtPnJmLT5pbml0ID09IHJ0bDgyMjV6Ml9yZl9pbml0KQorCQlydGw4MjI1ejJfcmZfc2V0X3R4X3Bvd2VyKGRldiwgY2hhbik7CisJZWxzZQorCQlydGw4MjI1ejJfYl9yZl9zZXRfdHhfcG93ZXIoZGV2LCBjaGFuKTsKKworCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDcsIHJ0bDgyMjVfY2hhbltjaGFuIC0gMV0pOworCW1zbGVlcCgxMCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRsODE4eF9yZl9vcHMgcnRsODIyNV9vcHMgPSB7CisJLm5hbWUJCT0gInJ0bDgyMjUiLAorCS5pbml0CQk9IHJ0bDgyMjVfcmZfaW5pdCwKKwkuc3RvcAkJPSBydGw4MjI1X3JmX3N0b3AsCisJLnNldF9jaGFuCT0gcnRsODIyNV9yZl9zZXRfY2hhbm5lbAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBydGw4MTh4X3JmX29wcyBydGw4MjI1ejJfb3BzID0geworCS5uYW1lCQk9ICJydGw4MjI1ejIiLAorCS5pbml0CQk9IHJ0bDgyMjV6Ml9yZl9pbml0LAorCS5zdG9wCQk9IHJ0bDgyMjVfcmZfc3RvcCwKKwkuc2V0X2NoYW4JPSBydGw4MjI1X3JmX3NldF9jaGFubmVsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0bDgxOHhfcmZfb3BzIHJ0bDgyMjV6Ml9iX29wcyA9IHsKKwkubmFtZQkJPSAicnRsODIyNXoyIiwKKwkuaW5pdAkJPSBydGw4MjI1ejJfYl9yZl9pbml0LAorCS5zdG9wCQk9IHJ0bDgyMjVfcmZfc3RvcCwKKwkuc2V0X2NoYW4JPSBydGw4MjI1X3JmX3NldF9jaGFubmVsCit9OworCitjb25zdCBzdHJ1Y3QgcnRsODE4eF9yZl9vcHMgKiBydGw4MTg3X2RldGVjdF9yZihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCit7CisJdTE2IHJlZzgsIHJlZzk7CisJc3RydWN0IHJ0bDgxODdfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKKworCWlmICghcHJpdi0+aXNfcnRsODE4N2IpIHsKKwkJcnRsODIyNV93cml0ZShkZXYsIDAsIDB4MUI3KTsKKworCQlyZWc4ID0gcnRsODIyNV9yZWFkKGRldiwgOCk7CisJCXJlZzkgPSBydGw4MjI1X3JlYWQoZGV2LCA5KTsKKworCQlydGw4MjI1X3dyaXRlKGRldiwgMCwgMHgwQjcpOworCisJCWlmIChyZWc4ICE9IDB4NTg4IHx8IHJlZzkgIT0gMHg3MDApCisJCQlyZXR1cm4gJnJ0bDgyMjVfb3BzOworCisJCXJldHVybiAmcnRsODIyNXoyX29wczsKKwl9IGVsc2UKKwkJcmV0dXJuICZydGw4MjI1ejJfYl9vcHM7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODdfcnRsODIyNS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTg3L3J0bDgyMjUuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTg3X3J0bDgyMjUuaApyZW5hbWUgdG8gZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTg3L3J0bDgyMjUuaApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTg3X2Rldi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTg3X2Rldi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOGZhODI0Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4N19kZXYuYworKysgL2Rldi9udWxsCkBAIC0xLDE1ODkgKzAsMCBAQAotLyoKLSAqIExpbnV4IGRldmljZSBkcml2ZXIgZm9yIFJUTDgxODcKLSAqCi0gKiBDb3B5cmlnaHQgMjAwNyBNaWNoYWVsIFd1IDxmbGFtaW5naWNlQHNvdXJtaWxrLm5ldD4KLSAqIENvcHlyaWdodCAyMDA3IEFuZHJlYSBNZXJlbGxvIDxhbmRyZWFtcmxAdGlzY2FsaS5pdD4KLSAqCi0gKiBCYXNlZCBvbiB0aGUgcjgxODcgZHJpdmVyLCB3aGljaCBpczoKLSAqIENvcHlyaWdodCAyMDA1IEFuZHJlYSBNZXJlbGxvIDxhbmRyZWFtcmxAdGlzY2FsaS5pdD4sIGV0IGFsLgotICoKLSAqIFRoZSBkcml2ZXIgd2FzIGV4dGVuZGVkIHRvIHRoZSBSVEw4MTg3QiBpbiAyMDA4IGJ5OgotICogCUhlcnRvbiBSb25hbGRvIEtyemVzaW5za2kgPGhlcnRvbkBtYW5kcml2YS5jb20uYnI+Ci0gKglIaW4tVGFrIExldW5nIDxodGwxMEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0gKglMYXJyeSBGaW5nZXIgPExhcnJ5LkZpbmdlckBsd2Zpbmdlci5uZXQ+Ci0gKgotICogTWFnaWMgZGVsYXlzIGFuZCByZWdpc3RlciBvZmZzZXRzIGJlbG93IGFyZSB0YWtlbiBmcm9tIHRoZSBvcmlnaW5hbAotICogcjgxODcgZHJpdmVyIHNvdXJjZXMuICBUaGFua3MgdG8gUmVhbHRlayBmb3IgdGhlaXIgc3VwcG9ydCEKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdXNiLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9lZXByb21fOTNjeDYuaD4KLSNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KLQotI2luY2x1ZGUgInJ0bDgxODcuaCIKLSNpbmNsdWRlICJydGw4MTg3X3J0bDgyMjUuaCIKLSNpZmRlZiBDT05GSUdfUlRMODE4N19MRURTCi0jaW5jbHVkZSAicnRsODE4N19sZWRzLmgiCi0jZW5kaWYKLSNpbmNsdWRlICJydGw4MTg3X3Jma2lsbC5oIgotCi1NT0RVTEVfQVVUSE9SKCJNaWNoYWVsIFd1IDxmbGFtaW5naWNlQHNvdXJtaWxrLm5ldD4iKTsKLU1PRFVMRV9BVVRIT1IoIkFuZHJlYSBNZXJlbGxvIDxhbmRyZWFtcmxAdGlzY2FsaS5pdD4iKTsKLU1PRFVMRV9BVVRIT1IoIkhlcnRvbiBSb25hbGRvIEtyemVzaW5za2kgPGhlcnRvbkBtYW5kcml2YS5jb20uYnI+Iik7Ci1NT0RVTEVfQVVUSE9SKCJIaW4tVGFrIExldW5nIDxodGwxMEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Iik7Ci1NT0RVTEVfQVVUSE9SKCJMYXJyeSBGaW5nZXIgPExhcnJ5LkZpbmdlckBsd2Zpbmdlci5uZXQ+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIlJUTDgxODcvUlRMODE4N0IgVVNCIHdpcmVsZXNzIGRyaXZlciIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgcnRsODE4N190YWJsZVtdIF9fZGV2aW5pdGRhdGEgPSB7Ci0JLyogQXN1cyAqLwotCXtVU0JfREVWSUNFKDB4MGIwNSwgMHgxNzFkKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1JUTDgxODd9LAotCS8qIEJlbGtpbiAqLwotCXtVU0JfREVWSUNFKDB4MDUwZCwgMHg3MDVlKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1JUTDgxODdCfSwKLQkvKiBSZWFsdGVrICovCi0Je1VTQl9ERVZJQ0UoMHgwYmRhLCAweDgxODcpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfUlRMODE4N30sCi0Je1VTQl9ERVZJQ0UoMHgwYmRhLCAweDgxODkpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfUlRMODE4N0J9LAotCXtVU0JfREVWSUNFKDB4MGJkYSwgMHg4MTk3KSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1JUTDgxODdCfSwKLQl7VVNCX0RFVklDRSgweDBiZGEsIDB4ODE5OCksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9SVEw4MTg3Qn0sCi0JLyogU3VyZWNvbSAqLwotCXtVU0JfREVWSUNFKDB4MDc2OSwgMHgxMUYyKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1JUTDgxODd9LAotCS8qIExvZ2l0ZWNoICovCi0Je1VTQl9ERVZJQ0UoMHgwNzg5LCAweDAxMEMpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfUlRMODE4N30sCi0JLyogTmV0Z2VhciAqLwotCXtVU0JfREVWSUNFKDB4MDg0NiwgMHg2MTAwKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1JUTDgxODd9LAotCXtVU0JfREVWSUNFKDB4MDg0NiwgMHg2YTAwKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1JUTDgxODd9LAotCXtVU0JfREVWSUNFKDB4MDg0NiwgMHg0MjYwKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1JUTDgxODdCfSwKLQkvKiBIUCAqLwotCXtVU0JfREVWSUNFKDB4MDNmMCwgMHhjYTAyKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1JUTDgxODd9LAotCS8qIFNpdGVjb20gKi8KLQl7VVNCX0RFVklDRSgweDBkZjYsIDB4MDAwZCksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9SVEw4MTg3fSwKLQl7VVNCX0RFVklDRSgweDBkZjYsIDB4MDAyOCksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9SVEw4MTg3Qn0sCi0Je1VTQl9ERVZJQ0UoMHgwZGY2LCAweDAwMjkpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfUlRMODE4N0J9LAotCS8qIFNwaGFpcm9uIEFjY2VzcyBTeXN0ZW1zIEdtYkggKi8KLQl7VVNCX0RFVklDRSgweDExNEIsIDB4MDE1MCksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9SVEw4MTg3fSwKLQkvKiBEaWNrIFNtaXRoIEVsZWN0cm9uaWNzICovCi0Je1VTQl9ERVZJQ0UoMHgxMzcxLCAweDk0MDEpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfUlRMODE4N30sCi0JLyogQWJvY29tICovCi0Je1VTQl9ERVZJQ0UoMHgxM2QxLCAweGFiZTYpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfUlRMODE4N30sCi0JLyogUWNvbSAqLwotCXtVU0JfREVWSUNFKDB4MThFOCwgMHg2MjMyKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1JUTDgxODd9LAotCS8qIEFpckxpdmUgKi8KLQl7VVNCX0RFVklDRSgweDFiNzUsIDB4ODE4NyksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9SVEw4MTg3fSwKLQkvKiBMaW5rc3lzICovCi0Je1VTQl9ERVZJQ0UoMHgxNzM3LCAweDAwNzMpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfUlRMODE4N0J9LAotCXt9Ci19OwotCi1NT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgcnRsODE4N190YWJsZSk7Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgcnRsODE4eF9yYXRlc1tdID0gewotCXsgLmJpdHJhdGUgPSAxMCwgLmh3X3ZhbHVlID0gMCwgfSwKLQl7IC5iaXRyYXRlID0gMjAsIC5od192YWx1ZSA9IDEsIH0sCi0JeyAuYml0cmF0ZSA9IDU1LCAuaHdfdmFsdWUgPSAyLCB9LAotCXsgLmJpdHJhdGUgPSAxMTAsIC5od192YWx1ZSA9IDMsIH0sCi0JeyAuYml0cmF0ZSA9IDYwLCAuaHdfdmFsdWUgPSA0LCB9LAotCXsgLmJpdHJhdGUgPSA5MCwgLmh3X3ZhbHVlID0gNSwgfSwKLQl7IC5iaXRyYXRlID0gMTIwLCAuaHdfdmFsdWUgPSA2LCB9LAotCXsgLmJpdHJhdGUgPSAxODAsIC5od192YWx1ZSA9IDcsIH0sCi0JeyAuYml0cmF0ZSA9IDI0MCwgLmh3X3ZhbHVlID0gOCwgfSwKLQl7IC5iaXRyYXRlID0gMzYwLCAuaHdfdmFsdWUgPSA5LCB9LAotCXsgLmJpdHJhdGUgPSA0ODAsIC5od192YWx1ZSA9IDEwLCB9LAotCXsgLmJpdHJhdGUgPSA1NDAsIC5od192YWx1ZSA9IDExLCB9LAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCBydGw4MTh4X2NoYW5uZWxzW10gPSB7Ci0JeyAuY2VudGVyX2ZyZXEgPSAyNDEyIH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDE3IH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDIyIH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDI3IH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDMyIH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDM3IH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDQyIH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDQ3IH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDUyIH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDU3IH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDYyIH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDY3IH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDcyIH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDg0IH0sCi19OwotCi1zdGF0aWMgdm9pZCBydGw4MTg3X2lvd3JpdGVfYXN5bmNfY2Ioc3RydWN0IHVyYiAqdXJiKQotewotCWtmcmVlKHVyYi0+Y29udGV4dCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJ0bDgxODdfaW93cml0ZV9hc3luYyhzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2LCBfX2xlMTYgYWRkciwKLQkJCQkgIHZvaWQgKmRhdGEsIHUxNiBsZW4pCi17Ci0Jc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqZHI7Ci0Jc3RydWN0IHVyYiAqdXJiOwotCXN0cnVjdCBydGw4MTg3X2FzeW5jX3dyaXRlX2RhdGEgewotCQl1OCBkYXRhWzRdOwotCQlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0IGRyOwotCX0gKmJ1ZjsKLQlpbnQgcmM7Ci0KLQlidWYgPSBrbWFsbG9jKHNpemVvZigqYnVmKSwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFidWYpCi0JCXJldHVybjsKLQotCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0FUT01JQyk7Ci0JaWYgKCF1cmIpIHsKLQkJa2ZyZWUoYnVmKTsKLQkJcmV0dXJuOwotCX0KLQotCWRyID0gJmJ1Zi0+ZHI7Ci0KLQlkci0+YlJlcXVlc3RUeXBlID0gUlRMODE4N19SRVFUX1dSSVRFOwotCWRyLT5iUmVxdWVzdCA9IFJUTDgxODdfUkVRX1NFVF9SRUc7Ci0JZHItPndWYWx1ZSA9IGFkZHI7Ci0JZHItPndJbmRleCA9IDA7Ci0JZHItPndMZW5ndGggPSBjcHVfdG9fbGUxNihsZW4pOwotCi0JbWVtY3B5KGJ1ZiwgZGF0YSwgbGVuKTsKLQotCXVzYl9maWxsX2NvbnRyb2xfdXJiKHVyYiwgcHJpdi0+dWRldiwgdXNiX3NuZGN0cmxwaXBlKHByaXYtPnVkZXYsIDApLAotCQkJICAgICAodW5zaWduZWQgY2hhciAqKWRyLCBidWYsIGxlbiwKLQkJCSAgICAgcnRsODE4N19pb3dyaXRlX2FzeW5jX2NiLCBidWYpOwotCXVzYl9hbmNob3JfdXJiKHVyYiwgJnByaXYtPmFuY2hvcmVkKTsKLQlyYyA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7Ci0JaWYgKHJjIDwgMCkgewotCQlrZnJlZShidWYpOwotCQl1c2JfdW5hbmNob3JfdXJiKHVyYik7Ci0JfQotCXVzYl9mcmVlX3VyYih1cmIpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcnRsODE4eF9pb3dyaXRlMzJfYXN5bmMoc3RydWN0IHJ0bDgxODdfcHJpdiAqcHJpdiwKLQkJCQkJICAgX19sZTMyICphZGRyLCB1MzIgdmFsKQotewotCV9fbGUzMiBidWYgPSBjcHVfdG9fbGUzMih2YWwpOwotCi0JcnRsODE4N19pb3dyaXRlX2FzeW5jKHByaXYsIGNwdV90b19sZTE2KCh1bnNpZ25lZCBsb25nKWFkZHIpLAotCQkJICAgICAgJmJ1Ziwgc2l6ZW9mKGJ1ZikpOwotfQotCi12b2lkIHJ0bDgxODdfd3JpdGVfcGh5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgdTggYWRkciwgdTMyIGRhdGEpCi17Ci0Jc3RydWN0IHJ0bDgxODdfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKLQotCWRhdGEgPDw9IDg7Ci0JZGF0YSB8PSBhZGRyIHwgMHg4MDsKLQotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+UEhZWzNdLCAoZGF0YSA+PiAyNCkgJiAweEZGKTsKLQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPlBIWVsyXSwgKGRhdGEgPj4gMTYpICYgMHhGRik7Ci0JcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5QSFlbMV0sIChkYXRhID4+IDgpICYgMHhGRik7Ci0JcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5QSFlbMF0sIGRhdGEgJiAweEZGKTsKLX0KLQotc3RhdGljIHZvaWQgcnRsODE4N190eF9jYihzdHJ1Y3QgdXJiICp1cmIpCi17Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYiA9IChzdHJ1Y3Qgc2tfYnVmZiAqKXVyYi0+Y29udGV4dDsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBpbmZvLT5yYXRlX2RyaXZlcl9kYXRhWzBdOwotCXN0cnVjdCBydGw4MTg3X3ByaXYgKnByaXYgPSBody0+cHJpdjsKLQotCXNrYl9wdWxsKHNrYiwgcHJpdi0+aXNfcnRsODE4N2IgPyBzaXplb2Yoc3RydWN0IHJ0bDgxODdiX3R4X2hkcikgOgotCQkJCQkgIHNpemVvZihzdHJ1Y3QgcnRsODE4N190eF9oZHIpKTsKLQlpZWVlODAyMTFfdHhfaW5mb19jbGVhcl9zdGF0dXMoaW5mbyk7Ci0KLQlpZiAoISh1cmItPnN0YXR1cykgJiYgIShpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfTk9fQUNLKSkgewotCQlpZiAocHJpdi0+aXNfcnRsODE4N2IpIHsKLQkJCXNrYl9xdWV1ZV90YWlsKCZwcml2LT5iX3R4X3N0YXR1cy5xdWV1ZSwgc2tiKTsKLQotCQkJLyogcXVldWUgaXMgImZ1bGwiLCBkaXNjYXJkIGxhc3QgaXRlbXMgKi8KLQkJCXdoaWxlIChza2JfcXVldWVfbGVuKCZwcml2LT5iX3R4X3N0YXR1cy5xdWV1ZSkgPiA1KSB7Ci0JCQkJc3RydWN0IHNrX2J1ZmYgKm9sZF9za2I7Ci0KLQkJCQlkZXZfZGJnKCZwcml2LT51ZGV2LT5kZXYsCi0JCQkJCSJ0cmFuc21pdCBzdGF0dXMgcXVldWUgZnVsbFxuIik7Ci0KLQkJCQlvbGRfc2tiID0gc2tiX2RlcXVldWUoJnByaXYtPmJfdHhfc3RhdHVzLnF1ZXVlKTsKLQkJCQlpZWVlODAyMTFfdHhfc3RhdHVzX2lycXNhZmUoaHcsIG9sZF9za2IpOwotCQkJfQotCQkJcmV0dXJuOwotCQl9IGVsc2UgewotCQkJaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRfQUNLOwotCQl9Ci0JfQotCWlmIChwcml2LT5pc19ydGw4MTg3YikKLQkJaWVlZTgwMjExX3R4X3N0YXR1c19pcnFzYWZlKGh3LCBza2IpOwotCWVsc2UgewotCQkvKiBSZXRyeSBpbmZvcm1hdGlvbiBmb3IgdGhlIFJUSTgxODcgaXMgb25seSBhdmFpbGFibGUgYnkKLQkJICogcmVhZGluZyBhIHJlZ2lzdGVyIGluIHRoZSBkZXZpY2UuIFdlIGFyZSBpbiBpbnRlcnJ1cHQgbW9kZQotCQkgKiBoZXJlLCB0aHVzIHF1ZXVlIHRoZSBza2IgYW5kIGZpbmlzaCBvbiBhIHdvcmsgcXVldWUuICovCi0JCXNrYl9xdWV1ZV90YWlsKCZwcml2LT5iX3R4X3N0YXR1cy5xdWV1ZSwgc2tiKTsKLQkJaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayhodywgJnByaXYtPndvcmssIDApOwotCX0KLX0KLQotc3RhdGljIGludCBydGw4MTg3X3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2ID0gZGV2LT5wcml2OwotCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKLQl1bnNpZ25lZCBpbnQgZXA7Ci0Jdm9pZCAqYnVmOwotCXN0cnVjdCB1cmIgKnVyYjsKLQlfX2xlMTYgcnRzX2R1ciA9IDA7Ci0JdTMyIGZsYWdzOwotCWludCByYzsKLQotCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0FUT01JQyk7Ci0JaWYgKCF1cmIpIHsKLQkJa2ZyZWVfc2tiKHNrYik7Ci0JCXJldHVybiBORVRERVZfVFhfT0s7Ci0JfQotCi0JZmxhZ3MgPSBza2ItPmxlbjsKLQlmbGFncyB8PSBSVEw4MThYX1RYX0RFU0NfRkxBR19OT19FTkM7Ci0KLQlmbGFncyB8PSBpZWVlODAyMTFfZ2V0X3R4X3JhdGUoZGV2LCBpbmZvKS0+aHdfdmFsdWUgPDwgMjQ7Ci0JaWYgKGllZWU4MDIxMV9oYXNfbW9yZWZyYWdzKCgoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGEpLT5mcmFtZV9jb250cm9sKSkKLQkJZmxhZ3MgfD0gUlRMODE4WF9UWF9ERVNDX0ZMQUdfTU9SRUZSQUc7Ci0JaWYgKGluZm8tPmNvbnRyb2wucmF0ZXNbMF0uZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfVVNFX1JUU19DVFMpIHsKLQkJZmxhZ3MgfD0gUlRMODE4WF9UWF9ERVNDX0ZMQUdfUlRTOwotCQlmbGFncyB8PSBpZWVlODAyMTFfZ2V0X3J0c19jdHNfcmF0ZShkZXYsIGluZm8pLT5od192YWx1ZSA8PCAxOTsKLQkJcnRzX2R1ciA9IGllZWU4MDIxMV9ydHNfZHVyYXRpb24oZGV2LCBwcml2LT52aWYsCi0JCQkJCQkgc2tiLT5sZW4sIGluZm8pOwotCX0gZWxzZSBpZiAoaW5mby0+Y29udHJvbC5yYXRlc1swXS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19VU0VfQ1RTX1BST1RFQ1QpIHsKLQkJZmxhZ3MgfD0gUlRMODE4WF9UWF9ERVNDX0ZMQUdfQ1RTOwotCQlmbGFncyB8PSBpZWVlODAyMTFfZ2V0X3J0c19jdHNfcmF0ZShkZXYsIGluZm8pLT5od192YWx1ZSA8PCAxOTsKLQl9Ci0KLQlpZiAoIXByaXYtPmlzX3J0bDgxODdiKSB7Ci0JCXN0cnVjdCBydGw4MTg3X3R4X2hkciAqaGRyID0KLQkJCShzdHJ1Y3QgcnRsODE4N190eF9oZHIgKilza2JfcHVzaChza2IsIHNpemVvZigqaGRyKSk7Ci0JCWhkci0+ZmxhZ3MgPSBjcHVfdG9fbGUzMihmbGFncyk7Ci0JCWhkci0+bGVuID0gMDsKLQkJaGRyLT5ydHNfZHVyYXRpb24gPSBydHNfZHVyOwotCQloZHItPnJldHJ5ID0gY3B1X3RvX2xlMzIoKGluZm8tPmNvbnRyb2wucmF0ZXNbMF0uY291bnQgLSAxKSA8PCA4KTsKLQkJYnVmID0gaGRyOwotCi0JCWVwID0gMjsKLQl9IGVsc2UgewotCQkvKiBmYyBuZWVkcyB0byBiZSBjYWxjdWxhdGVkIGJlZm9yZSBza2JfcHVzaCgpICovCi0JCXVuc2lnbmVkIGludCBlcG1hcFs0XSA9IHsgNiwgNywgNSwgNCB9OwotCQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqdHhfaGRyID0KLQkJCShzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKShza2ItPmRhdGEpOwotCQl1MTYgZmMgPSBsZTE2X3RvX2NwdSh0eF9oZHItPmZyYW1lX2NvbnRyb2wpOwotCi0JCXN0cnVjdCBydGw4MTg3Yl90eF9oZHIgKmhkciA9Ci0JCQkoc3RydWN0IHJ0bDgxODdiX3R4X2hkciAqKXNrYl9wdXNoKHNrYiwgc2l6ZW9mKCpoZHIpKTsKLQkJc3RydWN0IGllZWU4MDIxMV9yYXRlICp0eHJhdGUgPQotCQkJaWVlZTgwMjExX2dldF90eF9yYXRlKGRldiwgaW5mbyk7Ci0JCW1lbXNldChoZHIsIDAsIHNpemVvZigqaGRyKSk7Ci0JCWhkci0+ZmxhZ3MgPSBjcHVfdG9fbGUzMihmbGFncyk7Ci0JCWhkci0+cnRzX2R1cmF0aW9uID0gcnRzX2R1cjsKLQkJaGRyLT5yZXRyeSA9IGNwdV90b19sZTMyKChpbmZvLT5jb250cm9sLnJhdGVzWzBdLmNvdW50IC0gMSkgPDwgOCk7Ci0JCWhkci0+dHhfZHVyYXRpb24gPQotCQkJaWVlZTgwMjExX2dlbmVyaWNfZnJhbWVfZHVyYXRpb24oZGV2LCBwcml2LT52aWYsCi0JCQkJCQkJIHNrYi0+bGVuLCB0eHJhdGUpOwotCQlidWYgPSBoZHI7Ci0KLQkJaWYgKChmYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSA9PSBJRUVFODAyMTFfRlRZUEVfTUdNVCkKLQkJCWVwID0gMTI7Ci0JCWVsc2UKLQkJCWVwID0gZXBtYXBbc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYildOwotCX0KLQotCWluZm8tPnJhdGVfZHJpdmVyX2RhdGFbMF0gPSBkZXY7Ci0JaW5mby0+cmF0ZV9kcml2ZXJfZGF0YVsxXSA9IHVyYjsKLQotCXVzYl9maWxsX2J1bGtfdXJiKHVyYiwgcHJpdi0+dWRldiwgdXNiX3NuZGJ1bGtwaXBlKHByaXYtPnVkZXYsIGVwKSwKLQkJCSAgYnVmLCBza2ItPmxlbiwgcnRsODE4N190eF9jYiwgc2tiKTsKLQl1cmItPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9aRVJPX1BBQ0tFVDsKLQl1c2JfYW5jaG9yX3VyYih1cmIsICZwcml2LT5hbmNob3JlZCk7Ci0JcmMgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwotCWlmIChyYyA8IDApIHsKLQkJdXNiX3VuYW5jaG9yX3VyYih1cmIpOwotCQlrZnJlZV9za2Ioc2tiKTsKLQl9Ci0JdXNiX2ZyZWVfdXJiKHVyYik7Ci0KLQlyZXR1cm4gTkVUREVWX1RYX09LOwotfQotCi1zdGF0aWMgdm9pZCBydGw4MTg3X3J4X2NiKHN0cnVjdCB1cmIgKnVyYikKLXsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gKHN0cnVjdCBza19idWZmICopdXJiLT5jb250ZXh0OwotCXN0cnVjdCBydGw4MTg3X3J4X2luZm8gKmluZm8gPSAoc3RydWN0IHJ0bDgxODdfcnhfaW5mbyAqKXNrYi0+Y2I7Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqZGV2ID0gaW5mby0+ZGV2OwotCXN0cnVjdCBydGw4MTg3X3ByaXYgKnByaXYgPSBkZXYtPnByaXY7Ci0Jc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgcnhfc3RhdHVzID0geyAwIH07Ci0JaW50IHJhdGUsIHNpZ25hbDsKLQl1MzIgZmxhZ3M7Ci0JdW5zaWduZWQgbG9uZyBmOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnJ4X3F1ZXVlLmxvY2ssIGYpOwotCV9fc2tiX3VubGluayhza2IsICZwcml2LT5yeF9xdWV1ZSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+cnhfcXVldWUubG9jaywgZik7Ci0Jc2tiX3B1dChza2IsIHVyYi0+YWN0dWFsX2xlbmd0aCk7Ci0KLQlpZiAodW5saWtlbHkodXJiLT5zdGF0dXMpKSB7Ci0JCWRldl9rZnJlZV9za2JfaXJxKHNrYik7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAoIXByaXYtPmlzX3J0bDgxODdiKSB7Ci0JCXN0cnVjdCBydGw4MTg3X3J4X2hkciAqaGRyID0KLQkJCSh0eXBlb2YoaGRyKSkoc2tiX3RhaWxfcG9pbnRlcihza2IpIC0gc2l6ZW9mKCpoZHIpKTsKLQkJZmxhZ3MgPSBsZTMyX3RvX2NwdShoZHItPmZsYWdzKTsKLQkJLyogQXMgd2l0aCB0aGUgUlRMODE4N0IgYmVsb3csIHRoZSBBR0MgaXMgdXNlZCB0byBjYWxjdWxhdGUKLQkJICogc2lnbmFsIHN0cmVuZ3RoLiBJbiB0aGlzIGNhc2UsIHRoZSBzY2FsaW5nCi0JCSAqIGNvbnN0YW50cyBhcmUgZGVyaXZlZCBmcm9tIHRoZSBvdXRwdXQgb2YgcDU0dXNiLgotCQkgKi8KLQkJc2lnbmFsID0gLTQgLSAoKDI3ICogaGRyLT5hZ2MpID4+IDYpOwotCQlyeF9zdGF0dXMuYW50ZW5uYSA9IChoZHItPnNpZ25hbCA+PiA3KSAmIDE7Ci0JCXJ4X3N0YXR1cy5tYWN0aW1lID0gbGU2NF90b19jcHUoaGRyLT5tYWNfdGltZSk7Ci0JfSBlbHNlIHsKLQkJc3RydWN0IHJ0bDgxODdiX3J4X2hkciAqaGRyID0KLQkJCSh0eXBlb2YoaGRyKSkoc2tiX3RhaWxfcG9pbnRlcihza2IpIC0gc2l6ZW9mKCpoZHIpKTsKLQkJLyogVGhlIFJlYWx0ZWsgZGF0YXNoZWV0IGZvciB0aGUgUlRMODE4N0Igc2hvd3MgdGhhdCB0aGUgUlgKLQkJICogaGVhZGVyIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgcXVhbnRpdGllczogc2lnbmFsIHF1YWxpdHksCi0JCSAqIFJTU0ksIEFHQywgdGhlIHJlY2VpdmVkIHBvd2VyIGluIGRCLCBhbmQgdGhlIG1lYXN1cmVkIFNOUi4KLQkJICogSW4gdGVzdGluZywgbm9uZSBvZiB0aGVzZSBxdWFudGl0aWVzIHNob3cgcXVhbGl0YXRpdmUKLQkJICogYWdyZWVtZW50IHdpdGggQVAgc2lnbmFsIHN0cmVuZ3RoLCBleGNlcHQgZm9yIHRoZSBBR0MsCi0JCSAqIHdoaWNoIGlzIGludmVyc2VseSBwcm9wb3J0aW9uYWwgdG8gdGhlIHN0cmVuZ3RoIG9mIHRoZQotCQkgKiBzaWduYWwuIEluIHRoZSBmb2xsb3dpbmcsIHRoZSBzaWduYWwgc3RyZW5ndGgKLQkJICogaXMgZGVyaXZlZCBmcm9tIHRoZSBBR0MuIFRoZSBhcmJpdHJhcnkgc2NhbGluZyBjb25zdGFudHMKLQkJICogYXJlIGNob3NlbiB0byBtYWtlIHRoZSByZXN1bHRzIGNsb3NlIHRvIHRoZSB2YWx1ZXMgb2J0YWluZWQKLQkJICogZm9yIGEgQkNNNDMxMiB1c2luZyBiNDMgYXMgdGhlIGRyaXZlci4gVGhlIG5vaXNlIGlzIGlnbm9yZWQKLQkJICogZm9yIG5vdy4KLQkJICovCi0JCWZsYWdzID0gbGUzMl90b19jcHUoaGRyLT5mbGFncyk7Ci0JCXNpZ25hbCA9IDE0IC0gaGRyLT5hZ2MgLyAyOwotCQlyeF9zdGF0dXMuYW50ZW5uYSA9IChoZHItPnJzc2kgPj4gNykgJiAxOwotCQlyeF9zdGF0dXMubWFjdGltZSA9IGxlNjRfdG9fY3B1KGhkci0+bWFjX3RpbWUpOwotCX0KLQotCXJ4X3N0YXR1cy5zaWduYWwgPSBzaWduYWw7Ci0JcHJpdi0+c2lnbmFsID0gc2lnbmFsOwotCXJhdGUgPSAoZmxhZ3MgPj4gMjApICYgMHhGOwotCXNrYl90cmltKHNrYiwgZmxhZ3MgJiAweDBGRkYpOwotCXJ4X3N0YXR1cy5yYXRlX2lkeCA9IHJhdGU7Ci0Jcnhfc3RhdHVzLmZyZXEgPSBkZXYtPmNvbmYuY2hhbm5lbC0+Y2VudGVyX2ZyZXE7Ci0Jcnhfc3RhdHVzLmJhbmQgPSBkZXYtPmNvbmYuY2hhbm5lbC0+YmFuZDsKLQlyeF9zdGF0dXMuZmxhZyB8PSBSWF9GTEFHX1RTRlQ7Ci0JaWYgKGZsYWdzICYgUlRMODE4WF9SWF9ERVNDX0ZMQUdfQ1JDMzJfRVJSKQotCQlyeF9zdGF0dXMuZmxhZyB8PSBSWF9GTEFHX0ZBSUxFRF9GQ1NfQ1JDOwotCW1lbWNweShJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKSwgJnJ4X3N0YXR1cywgc2l6ZW9mKHJ4X3N0YXR1cykpOwotCWllZWU4MDIxMV9yeF9pcnFzYWZlKGRldiwgc2tiKTsKLQotCXNrYiA9IGRldl9hbGxvY19za2IoUlRMODE4N19NQVhfUlgpOwotCWlmICh1bmxpa2VseSghc2tiKSkgewotCQkvKiBUT0RPIGNoZWNrIHJ4IHF1ZXVlIGxlbmd0aCBhbmQgcmVmaWxsICpzb21ld2hlcmUqICovCi0JCXJldHVybjsKLQl9Ci0KLQlpbmZvID0gKHN0cnVjdCBydGw4MTg3X3J4X2luZm8gKilza2ItPmNiOwotCWluZm8tPnVyYiA9IHVyYjsKLQlpbmZvLT5kZXYgPSBkZXY7Ci0JdXJiLT50cmFuc2Zlcl9idWZmZXIgPSBza2JfdGFpbF9wb2ludGVyKHNrYik7Ci0JdXJiLT5jb250ZXh0ID0gc2tiOwotCXNrYl9xdWV1ZV90YWlsKCZwcml2LT5yeF9xdWV1ZSwgc2tiKTsKLQotCXVzYl9hbmNob3JfdXJiKHVyYiwgJnByaXYtPmFuY2hvcmVkKTsKLQlpZiAodXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKSkgewotCQl1c2JfdW5hbmNob3JfdXJiKHVyYik7Ci0JCXNrYl91bmxpbmsoc2tiLCAmcHJpdi0+cnhfcXVldWUpOwotCQlkZXZfa2ZyZWVfc2tiX2lycShza2IpOwotCX0KLX0KLQotc3RhdGljIGludCBydGw4MTg3X2luaXRfdXJicyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCi17Ci0Jc3RydWN0IHJ0bDgxODdfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKLQlzdHJ1Y3QgdXJiICplbnRyeSA9IE5VTEw7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3QgcnRsODE4N19yeF9pbmZvICppbmZvOwotCWludCByZXQgPSAwOwotCi0Jd2hpbGUgKHNrYl9xdWV1ZV9sZW4oJnByaXYtPnJ4X3F1ZXVlKSA8IDE2KSB7Ci0JCXNrYiA9IF9fZGV2X2FsbG9jX3NrYihSVEw4MTg3X01BWF9SWCwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghc2tiKSB7Ci0JCQlyZXQgPSAtRU5PTUVNOwotCQkJZ290byBlcnI7Ci0JCX0KLQkJZW50cnkgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOwotCQlpZiAoIWVudHJ5KSB7Ci0JCQlyZXQgPSAtRU5PTUVNOwotCQkJZ290byBlcnI7Ci0JCX0KLQkJdXNiX2ZpbGxfYnVsa191cmIoZW50cnksIHByaXYtPnVkZXYsCi0JCQkJICB1c2JfcmN2YnVsa3BpcGUocHJpdi0+dWRldiwKLQkJCQkgIHByaXYtPmlzX3J0bDgxODdiID8gMyA6IDEpLAotCQkJCSAgc2tiX3RhaWxfcG9pbnRlcihza2IpLAotCQkJCSAgUlRMODE4N19NQVhfUlgsIHJ0bDgxODdfcnhfY2IsIHNrYik7Ci0JCWluZm8gPSAoc3RydWN0IHJ0bDgxODdfcnhfaW5mbyAqKXNrYi0+Y2I7Ci0JCWluZm8tPnVyYiA9IGVudHJ5OwotCQlpbmZvLT5kZXYgPSBkZXY7Ci0JCXNrYl9xdWV1ZV90YWlsKCZwcml2LT5yeF9xdWV1ZSwgc2tiKTsKLQkJdXNiX2FuY2hvcl91cmIoZW50cnksICZwcml2LT5hbmNob3JlZCk7Ci0JCXJldCA9IHVzYl9zdWJtaXRfdXJiKGVudHJ5LCBHRlBfS0VSTkVMKTsKLQkJaWYgKHJldCkgewotCQkJc2tiX3VubGluayhza2IsICZwcml2LT5yeF9xdWV1ZSk7Ci0JCQl1c2JfdW5hbmNob3JfdXJiKGVudHJ5KTsKLQkJCWdvdG8gZXJyOwotCQl9Ci0JCXVzYl9mcmVlX3VyYihlbnRyeSk7Ci0JfQotCXJldHVybiByZXQ7Ci0KLWVycjoKLQl1c2JfZnJlZV91cmIoZW50cnkpOwotCWtmcmVlX3NrYihza2IpOwotCXVzYl9raWxsX2FuY2hvcmVkX3VyYnMoJnByaXYtPmFuY2hvcmVkKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBydGw4MTg3Yl9zdGF0dXNfY2Ioc3RydWN0IHVyYiAqdXJiKQotewotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gKHN0cnVjdCBpZWVlODAyMTFfaHcgKil1cmItPmNvbnRleHQ7Ci0Jc3RydWN0IHJ0bDgxODdfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwotCXU2NCB2YWw7Ci0JdW5zaWduZWQgaW50IGNtZF90eXBlOwotCi0JaWYgKHVubGlrZWx5KHVyYi0+c3RhdHVzKSkKLQkJcmV0dXJuOwotCi0JLyoKLQkgKiBSZWFkIGZyb20gc3RhdHVzIGJ1ZmZlcjoKLQkgKgotCSAqIGJpdHMgWzMwOjMxXSA9IGNtZCB0eXBlOgotCSAqIC0gMCBpbmRpY2F0ZXMgdHggYmVhY29uIGludGVycnVwdAotCSAqIC0gMSBpbmRpY2F0ZXMgdHggY2xvc2UgZGVzY3JpcHRvcgotCSAqCi0JICogSW4gdGhlIGNhc2Ugb2YgdHggYmVhY29uIGludGVycnVwdDoKLQkgKiBbMDo5XSA9IExhc3QgQmVhY29uIENXCi0JICogWzEwOjI5XSA9IHJlc2VydmVkCi0JICogWzMwOjMxXSA9IDAwYgotCSAqIFszMjo2M10gPSBMYXN0IEJlYWNvbiBUU0YKLQkgKgotCSAqIElmIGl0J3MgdHggY2xvc2UgZGVzY3JpcHRvcjoKLQkgKiBbMDo3XSA9IFBhY2tldCBSZXRyeSBDb3VudAotCSAqIFs4OjE0XSA9IFJUUyBSZXRyeSBDb3VudAotCSAqIFsxNV0gPSBUT0sKLQkgKiBbMTY6MjddID0gU2VxdWVuY2UgTm8KLQkgKiBbMjhdID0gTFMKLQkgKiBbMjldID0gRlMKLQkgKiBbMzA6MzFdID0gMDFiCi0JICogWzMyOjQ3XSA9IHVudXNlZCAocmVzZXJ2ZWQ/KQotCSAqIFs0ODo2M10gPSBNQUMgVXNlZCBUaW1lCi0JICovCi0JdmFsID0gbGU2NF90b19jcHUocHJpdi0+Yl90eF9zdGF0dXMuYnVmKTsKLQotCWNtZF90eXBlID0gKHZhbCA+PiAzMCkgJiAweDM7Ci0JaWYgKGNtZF90eXBlID09IDEpIHsKLQkJdW5zaWduZWQgaW50IHBrdF9yYywgc2VxX25vOwotCQlib29sIHRvazsKLQkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQkJc3RydWN0IGllZWU4MDIxMV9oZHIgKmllZWU4MDIxMWhkcjsKLQkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCQlwa3RfcmMgPSB2YWwgJiAweEZGOwotCQl0b2sgPSB2YWwgJiAoMSA8PCAxNSk7Ci0JCXNlcV9ubyA9ICh2YWwgPj4gMTYpICYgMHhGRkY7Ci0KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmJfdHhfc3RhdHVzLnF1ZXVlLmxvY2ssIGZsYWdzKTsKLQkJc2tiX3F1ZXVlX3JldmVyc2Vfd2FsaygmcHJpdi0+Yl90eF9zdGF0dXMucXVldWUsIHNrYikgewotCQkJaWVlZTgwMjExaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwotCi0JCQkvKgotCQkJICogV2hpbGUgdGVzdGluZywgaXQgd2FzIGRpc2NvdmVyZWQgdGhhdCB0aGUgc2VxX25vCi0JCQkgKiBkb2Vzbid0IGFjdHVhbGx5IGNvbnRhaW5zIHRoZSBzZXF1ZW5jZSBudW1iZXIuCi0JCQkgKiBJbnN0ZWFkIG9mIHJldHVybmluZyBqdXN0IHRoZSAxMiBiaXRzIG9mIHNlcXVlbmNlCi0JCQkgKiBudW1iZXIsIGhhcmR3YXJlIGlzIHJldHVybmluZyBlbnRpcmUgc2VxdWVuY2UgY29udHJvbAotCQkJICogKGZyYWdtZW50IG51bWJlciBwbHVzIHNlcXVlbmNlIG51bWJlcikgaW4gYSAxMiBiaXQKLQkJCSAqIG9ubHkgZmllbGQgb3ZlcmZsb3dpbmcgYWZ0ZXIgc29tZSB0aW1lLiBBcyBhCi0JCQkgKiB3b3JrYXJvdW5kLCBqdXN0IGNvbnNpZGVyIHRoZSBsb3dlciBiaXRzLCBhbmQgZXhwZWN0Ci0JCQkgKiBpdCdzIHVubGlrZWx5IHdlIHdyb25nbHkgYWNrIHNvbWUgc2VudCBkYXRhCi0JCQkgKi8KLQkJCWlmICgobGUxNl90b19jcHUoaWVlZTgwMjExaGRyLT5zZXFfY3RybCkKLQkJCSAgICAmIDB4RkZGKSA9PSBzZXFfbm8pCi0JCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKHNrYiAhPSAoc3RydWN0IHNrX2J1ZmYgKikgJnByaXYtPmJfdHhfc3RhdHVzLnF1ZXVlKSB7Ci0JCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7Ci0KLQkJCV9fc2tiX3VubGluayhza2IsICZwcml2LT5iX3R4X3N0YXR1cy5xdWV1ZSk7Ci0JCQlpZiAodG9rKQotCQkJCWluZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUX0FDSzsKLQkJCWluZm8tPnN0YXR1cy5yYXRlc1swXS5jb3VudCA9IHBrdF9yYyArIDE7Ci0KLQkJCWllZWU4MDIxMV90eF9zdGF0dXNfaXJxc2FmZShodywgc2tiKTsKLQkJfQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5iX3R4X3N0YXR1cy5xdWV1ZS5sb2NrLCBmbGFncyk7Ci0JfQotCi0JdXNiX2FuY2hvcl91cmIodXJiLCAmcHJpdi0+YW5jaG9yZWQpOwotCWlmICh1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpKQotCQl1c2JfdW5hbmNob3JfdXJiKHVyYik7Ci19Ci0KLXN0YXRpYyBpbnQgcnRsODE4N2JfaW5pdF9zdGF0dXNfdXJiKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKLXsKLQlzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2ID0gZGV2LT5wcml2OwotCXN0cnVjdCB1cmIgKmVudHJ5OwotCWludCByZXQgPSAwOwotCi0JZW50cnkgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOwotCWlmICghZW50cnkpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JdXNiX2ZpbGxfYnVsa191cmIoZW50cnksIHByaXYtPnVkZXYsIHVzYl9yY3ZidWxrcGlwZShwcml2LT51ZGV2LCA5KSwKLQkJCSAgJnByaXYtPmJfdHhfc3RhdHVzLmJ1Ziwgc2l6ZW9mKHByaXYtPmJfdHhfc3RhdHVzLmJ1ZiksCi0JCQkgIHJ0bDgxODdiX3N0YXR1c19jYiwgZGV2KTsKLQotCXVzYl9hbmNob3JfdXJiKGVudHJ5LCAmcHJpdi0+YW5jaG9yZWQpOwotCXJldCA9IHVzYl9zdWJtaXRfdXJiKGVudHJ5LCBHRlBfS0VSTkVMKTsKLQlpZiAocmV0KQotCQl1c2JfdW5hbmNob3JfdXJiKGVudHJ5KTsKLQl1c2JfZnJlZV91cmIoZW50cnkpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBydGw4MTg3X2NtZF9yZXNldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCi17Ci0Jc3RydWN0IHJ0bDgxODdfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKLQl1OCByZWc7Ci0JaW50IGk7Ci0KLQlyZWcgPSBydGw4MTh4X2lvcmVhZDgocHJpdiwgJnByaXYtPm1hcC0+Q01EKTsKLQlyZWcgJj0gKDEgPDwgMSk7Ci0JcmVnIHw9IFJUTDgxOFhfQ01EX1JFU0VUOwotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+Q01ELCByZWcpOwotCi0JaSA9IDEwOwotCWRvIHsKLQkJbXNsZWVwKDIpOwotCQlpZiAoIShydGw4MTh4X2lvcmVhZDgocHJpdiwgJnByaXYtPm1hcC0+Q01EKSAmCi0JCSAgICAgIFJUTDgxOFhfQ01EX1JFU0VUKSkKLQkJCWJyZWFrOwotCX0gd2hpbGUgKC0taSk7Ci0KLQlpZiAoIWkpIHsKLQkJd2lwaHlfZXJyKGRldi0+d2lwaHksICJSZXNldCB0aW1lb3V0IVxuIik7Ci0JCXJldHVybiAtRVRJTUVET1VUOwotCX0KLQotCS8qIHJlbG9hZCByZWdpc3RlcnMgZnJvbSBlZXByb20gKi8KLQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQsIFJUTDgxOFhfRUVQUk9NX0NNRF9MT0FEKTsKLQotCWkgPSAxMDsKLQlkbyB7Ci0JCW1zbGVlcCg0KTsKLQkJaWYgKCEocnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQpICYKLQkJICAgICAgUlRMODE4WF9FRVBST01fQ01EX0NPTkZJRykpCi0JCQlicmVhazsKLQl9IHdoaWxlICgtLWkpOwotCi0JaWYgKCFpKSB7Ci0JCXdpcGh5X2VycihkZXYtPndpcGh5LCAiZWVwcm9tIHJlc2V0IHRpbWVvdXQhXG4iKTsKLQkJcmV0dXJuIC1FVElNRURPVVQ7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcnRsODE4N19pbml0X2h3KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKLXsKLQlzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2ID0gZGV2LT5wcml2OwotCXU4IHJlZzsKLQlpbnQgcmVzOwotCi0JLyogcmVzZXQgKi8KLQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQsCi0JCQkgUlRMODE4WF9FRVBST01fQ01EX0NPTkZJRyk7Ci0JcmVnID0gcnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPkNPTkZJRzMpOwotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+Q09ORklHMywgcmVnIHwKLQkJCSBSVEw4MThYX0NPTkZJRzNfQU5BUEFSQU1fV1JJVEUpOwotCXJ0bDgxOHhfaW93cml0ZTMyKHByaXYsICZwcml2LT5tYXAtPkFOQVBBUkFNLAotCQkJICBSVEw4MTg3X1JUTDgyMjVfQU5BUEFSQU1fT04pOwotCXJ0bDgxOHhfaW93cml0ZTMyKHByaXYsICZwcml2LT5tYXAtPkFOQVBBUkFNMiwKLQkJCSAgUlRMODE4N19SVEw4MjI1X0FOQVBBUkFNMl9PTik7Ci0JcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5DT05GSUczLCByZWcgJgotCQkJIH5SVEw4MThYX0NPTkZJRzNfQU5BUEFSQU1fV1JJVEUpOwotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCwKLQkJCSBSVEw4MThYX0VFUFJPTV9DTURfTk9STUFMKTsKLQotCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPklOVF9NQVNLLCAwKTsKLQotCW1zbGVlcCgyMDApOwotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgKHU4ICopMHhGRTE4LCAweDEwKTsKLQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICh1OCAqKTB4RkUxOCwgMHgxMSk7Ci0JcnRsODE4eF9pb3dyaXRlOChwcml2LCAodTggKikweEZFMTgsIDB4MDApOwotCW1zbGVlcCgyMDApOwotCi0JcmVzID0gcnRsODE4N19jbWRfcmVzZXQoZGV2KTsKLQlpZiAocmVzKQotCQlyZXR1cm4gcmVzOwotCi0JcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5FRVBST01fQ01ELCBSVEw4MThYX0VFUFJPTV9DTURfQ09ORklHKTsKLQlyZWcgPSBydGw4MTh4X2lvcmVhZDgocHJpdiwgJnByaXYtPm1hcC0+Q09ORklHMyk7Ci0JcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5DT05GSUczLAotCQkJcmVnIHwgUlRMODE4WF9DT05GSUczX0FOQVBBUkFNX1dSSVRFKTsKLQlydGw4MTh4X2lvd3JpdGUzMihwcml2LCAmcHJpdi0+bWFwLT5BTkFQQVJBTSwKLQkJCSAgUlRMODE4N19SVEw4MjI1X0FOQVBBUkFNX09OKTsKLQlydGw4MTh4X2lvd3JpdGUzMihwcml2LCAmcHJpdi0+bWFwLT5BTkFQQVJBTTIsCi0JCQkgIFJUTDgxODdfUlRMODIyNV9BTkFQQVJBTTJfT04pOwotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+Q09ORklHMywKLQkJCXJlZyAmIH5SVEw4MThYX0NPTkZJRzNfQU5BUEFSQU1fV1JJVEUpOwotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCwgUlRMODE4WF9FRVBST01fQ01EX05PUk1BTCk7Ci0KLQkvKiBzZXR1cCBjYXJkICovCi0JcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zU2VsZWN0LCAwKTsKLQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkdQSU8wLCAwKTsKLQotCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc1NlbGVjdCwgKDQgPDwgOCkpOwotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+R1BJTzAsIDEpOwotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+R1BfRU5BQkxFLCAwKTsKLQotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCwgUlRMODE4WF9FRVBST01fQ01EX0NPTkZJRyk7Ci0KLQlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAoX19sZTE2ICopMHhGRkY0LCAweEZGRkYpOwotCXJlZyA9IHJ0bDgxOHhfaW9yZWFkOChwcml2LCAmcHJpdi0+bWFwLT5DT05GSUcxKTsKLQlyZWcgJj0gMHgzRjsKLQlyZWcgfD0gMHg4MDsKLQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkNPTkZJRzEsIHJlZyk7Ci0KLQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQsIFJUTDgxOFhfRUVQUk9NX0NNRF9OT1JNQUwpOwotCi0JcnRsODE4eF9pb3dyaXRlMzIocHJpdiwgJnByaXYtPm1hcC0+SU5UX1RJTUVPVVQsIDApOwotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+V1BBX0NPTkYsIDApOwotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+UkFURV9GQUxMQkFDSywgMCk7Ci0KLQkvLyBUT0RPOiBzZXQgUkVTUF9SQVRFIGFuZCBCUlNSIHByb3Blcmx5Ci0JcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5SRVNQX1JBVEUsICg4IDw8IDQpIHwgMCk7Ci0JcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+QlJTUiwgMHgwMUYzKTsKLQotCS8qIGhvc3RfdXNiX2luaXQgKi8KLQlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNTZWxlY3QsIDApOwotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+R1BJTzAsIDApOwotCXJlZyA9IHJ0bDgxOHhfaW9yZWFkOChwcml2LCAodTggKikweEZFNTMpOwotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgKHU4ICopMHhGRTUzLCByZWcgfCAoMSA8PCA3KSk7Ci0JcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zU2VsZWN0LCAoNCA8PCA4KSk7Ci0JcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5HUElPMCwgMHgyMCk7Ci0JcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5HUF9FTkFCTEUsIDApOwotCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc091dHB1dCwgMHg4MCk7Ci0JcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zU2VsZWN0LCAweDgwKTsKLQlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNFbmFibGUsIDB4ODApOwotCW1zbGVlcCgxMDApOwotCi0JcnRsODE4eF9pb3dyaXRlMzIocHJpdiwgJnByaXYtPm1hcC0+UkZfVElNSU5HLCAweDAwMGE4MDA4KTsKLQlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5CUlNSLCAweEZGRkYpOwotCXJ0bDgxOHhfaW93cml0ZTMyKHByaXYsICZwcml2LT5tYXAtPlJGX1BBUkEsIDB4MDAxMDAwNDQpOwotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCwKLQkJCSBSVEw4MThYX0VFUFJPTV9DTURfQ09ORklHKTsKLQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkNPTkZJRzMsIDB4NDQpOwotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCwKLQkJCSBSVEw4MThYX0VFUFJPTV9DTURfTk9STUFMKTsKLQlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNFbmFibGUsIDB4MUZGNyk7Ci0JbXNsZWVwKDEwMCk7Ci0KLQlwcml2LT5yZi0+aW5pdChkZXYpOwotCi0JcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+QlJTUiwgMHgwMUYzKTsKLQlyZWcgPSBydGw4MTh4X2lvcmVhZDgocHJpdiwgJnByaXYtPm1hcC0+UEdTRUxFQ1QpICYgfjE7Ci0JcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5QR1NFTEVDVCwgcmVnIHwgMSk7Ci0JcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgKF9fbGUxNiAqKTB4RkZGRSwgMHgxMCk7Ci0JcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5UQUxMWV9TRUwsIDB4ODApOwotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgKHU4ICopMHhGRkZGLCAweDYwKTsKLQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPlBHU0VMRUNULCByZWcpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBjb25zdCB1OCBydGw4MTg3Yl9yZWdfdGFibGVbXVszXSA9IHsKLQl7MHhGMCwgMHgzMiwgMH0sIHsweEYxLCAweDMyLCAwfSwgezB4RjIsIDB4MDAsIDB9LCB7MHhGMywgMHgwMCwgMH0sCi0JezB4RjQsIDB4MzIsIDB9LCB7MHhGNSwgMHg0MywgMH0sIHsweEY2LCAweDAwLCAwfSwgezB4RjcsIDB4MDAsIDB9LAotCXsweEY4LCAweDQ2LCAwfSwgezB4RjksIDB4QTQsIDB9LCB7MHhGQSwgMHgwMCwgMH0sIHsweEZCLCAweDAwLCAwfSwKLQl7MHhGQywgMHg5NiwgMH0sIHsweEZELCAweEE0LCAwfSwgezB4RkUsIDB4MDAsIDB9LCB7MHhGRiwgMHgwMCwgMH0sCi0KLQl7MHg1OCwgMHg0QiwgMX0sIHsweDU5LCAweDAwLCAxfSwgezB4NUEsIDB4NEIsIDF9LCB7MHg1QiwgMHgwMCwgMX0sCi0JezB4NjAsIDB4NEIsIDF9LCB7MHg2MSwgMHgwOSwgMX0sIHsweDYyLCAweDRCLCAxfSwgezB4NjMsIDB4MDksIDF9LAotCXsweENFLCAweDBGLCAxfSwgezB4Q0YsIDB4MDAsIDF9LCB7MHhFMCwgMHhGRiwgMX0sIHsweEUxLCAweDBGLCAxfSwKLQl7MHhFMiwgMHgwMCwgMX0sIHsweEYwLCAweDRFLCAxfSwgezB4RjEsIDB4MDEsIDF9LCB7MHhGMiwgMHgwMiwgMX0sCi0JezB4RjMsIDB4MDMsIDF9LCB7MHhGNCwgMHgwNCwgMX0sIHsweEY1LCAweDA1LCAxfSwgezB4RjYsIDB4MDYsIDF9LAotCXsweEY3LCAweDA3LCAxfSwgezB4RjgsIDB4MDgsIDF9LAotCi0JezB4NEUsIDB4MDAsIDJ9LCB7MHgwQywgMHgwNCwgMn0sIHsweDIxLCAweDYxLCAyfSwgezB4MjIsIDB4NjgsIDJ9LAotCXsweDIzLCAweDZGLCAyfSwgezB4MjQsIDB4NzYsIDJ9LCB7MHgyNSwgMHg3RCwgMn0sIHsweDI2LCAweDg0LCAyfSwKLQl7MHgyNywgMHg4RCwgMn0sIHsweDRELCAweDA4LCAyfSwgezB4NTAsIDB4MDUsIDJ9LCB7MHg1MSwgMHhGNSwgMn0sCi0JezB4NTIsIDB4MDQsIDJ9LCB7MHg1MywgMHhBMCwgMn0sIHsweDU0LCAweDFGLCAyfSwgezB4NTUsIDB4MjMsIDJ9LAotCXsweDU2LCAweDQ1LCAyfSwgezB4NTcsIDB4NjcsIDJ9LCB7MHg1OCwgMHgwOCwgMn0sIHsweDU5LCAweDA4LCAyfSwKLQl7MHg1QSwgMHgwOCwgMn0sIHsweDVCLCAweDA4LCAyfSwgezB4NjAsIDB4MDgsIDJ9LCB7MHg2MSwgMHgwOCwgMn0sCi0JezB4NjIsIDB4MDgsIDJ9LCB7MHg2MywgMHgwOCwgMn0sIHsweDY0LCAweENGLCAyfSwgezB4NzIsIDB4NTYsIDJ9LAotCXsweDczLCAweDlBLCAyfSwKLQotCXsweDM0LCAweEYwLCAwfSwgezB4MzUsIDB4MEYsIDB9LCB7MHg1QiwgMHg0MCwgMH0sIHsweDg0LCAweDg4LCAwfSwKLQl7MHg4NSwgMHgyNCwgMH0sIHsweDg4LCAweDU0LCAwfSwgezB4OEIsIDB4QjgsIDB9LCB7MHg4QywgMHgwNywgMH0sCi0JezB4OEQsIDB4MDAsIDB9LCB7MHg5NCwgMHgxQiwgMH0sIHsweDk1LCAweDEyLCAwfSwgezB4OTYsIDB4MDAsIDB9LAotCXsweDk3LCAweDA2LCAwfSwgezB4OUQsIDB4MUEsIDB9LCB7MHg5RiwgMHgxMCwgMH0sIHsweEI0LCAweDIyLCAwfSwKLQl7MHhCRSwgMHg4MCwgMH0sIHsweERCLCAweDAwLCAwfSwgezB4RUUsIDB4MDAsIDB9LCB7MHg0QywgMHgwMCwgMn0sCi0KLQl7MHg5RiwgMHgwMCwgM30sIHsweDhDLCAweDAxLCAwfSwgezB4OEQsIDB4MTAsIDB9LCB7MHg4RSwgMHgwOCwgMH0sCi0JezB4OEYsIDB4MDAsIDB9Ci19OwotCi1zdGF0aWMgaW50IHJ0bDgxODdiX2luaXRfaHcoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQotewotCXN0cnVjdCBydGw4MTg3X3ByaXYgKnByaXYgPSBkZXYtPnByaXY7Ci0JaW50IHJlcywgaTsKLQl1OCByZWc7Ci0KLQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQsCi0JCQkgUlRMODE4WF9FRVBST01fQ01EX0NPTkZJRyk7Ci0KLQlyZWcgPSBydGw4MTh4X2lvcmVhZDgocHJpdiwgJnByaXYtPm1hcC0+Q09ORklHMyk7Ci0JcmVnIHw9IFJUTDgxOFhfQ09ORklHM19BTkFQQVJBTV9XUklURSB8IFJUTDgxOFhfQ09ORklHM19HTlRfU0VMRUNUOwotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+Q09ORklHMywgcmVnKTsKLQlydGw4MTh4X2lvd3JpdGUzMihwcml2LCAmcHJpdi0+bWFwLT5BTkFQQVJBTTIsCi0JCQkgIFJUTDgxODdCX1JUTDgyMjVfQU5BUEFSQU0yX09OKTsKLQlydGw4MTh4X2lvd3JpdGUzMihwcml2LCAmcHJpdi0+bWFwLT5BTkFQQVJBTSwKLQkJCSAgUlRMODE4N0JfUlRMODIyNV9BTkFQQVJBTV9PTik7Ci0JcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5BTkFQQVJBTTMsCi0JCQkgUlRMODE4N0JfUlRMODIyNV9BTkFQQVJBTTNfT04pOwotCi0JcnRsODE4eF9pb3dyaXRlOChwcml2LCAodTggKikweEZGNjEsIDB4MTApOwotCXJlZyA9IHJ0bDgxOHhfaW9yZWFkOChwcml2LCAodTggKikweEZGNjIpOwotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgKHU4ICopMHhGRjYyLCByZWcgJiB+KDEgPDwgNSkpOwotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgKHU4ICopMHhGRjYyLCByZWcgfCAoMSA8PCA1KSk7Ci0KLQlyZWcgPSBydGw4MTh4X2lvcmVhZDgocHJpdiwgJnByaXYtPm1hcC0+Q09ORklHMyk7Ci0JcmVnICY9IH5SVEw4MThYX0NPTkZJRzNfQU5BUEFSQU1fV1JJVEU7Ci0JcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5DT05GSUczLCByZWcpOwotCi0JcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5FRVBST01fQ01ELAotCQkJIFJUTDgxOFhfRUVQUk9NX0NNRF9OT1JNQUwpOwotCi0JcmVzID0gcnRsODE4N19jbWRfcmVzZXQoZGV2KTsKLQlpZiAocmVzKQotCQlyZXR1cm4gcmVzOwotCi0JcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgKF9fbGUxNiAqKTB4RkYyRCwgMHgwRkZGKTsKLQlyZWcgPSBydGw4MTh4X2lvcmVhZDgocHJpdiwgJnByaXYtPm1hcC0+Q1dfQ09ORik7Ci0JcmVnIHw9IFJUTDgxOFhfQ1dfQ09ORl9QRVJQQUNLRVRfUkVUUllfU0hJRlQ7Ci0JcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5DV19DT05GLCByZWcpOwotCXJlZyA9IHJ0bDgxOHhfaW9yZWFkOChwcml2LCAmcHJpdi0+bWFwLT5UWF9BR0NfQ1RMKTsKLQlyZWcgfD0gUlRMODE4WF9UWF9BR0NfQ1RMX1BFUlBBQ0tFVF9HQUlOX1NISUZUIHwKLQkgICAgICAgUlRMODE4WF9UWF9BR0NfQ1RMX1BFUlBBQ0tFVF9BTlRTRUxfU0hJRlQ7Ci0JcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5UWF9BR0NfQ1RMLCByZWcpOwotCi0JcnRsODE4eF9pb3dyaXRlMTZfaWR4KHByaXYsIChfX2xlMTYgKikweEZGRTAsIDB4MEZGRiwgMSk7Ci0KLQlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5CRUFDT05fSU5URVJWQUwsIDEwMCk7Ci0JcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+QVRJTV9XTkQsIDIpOwotCXJ0bDgxOHhfaW93cml0ZTE2X2lkeChwcml2LCAoX19sZTE2ICopMHhGRkQ0LCAweEZGRkYsIDEpOwotCi0JcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5FRVBST01fQ01ELAotCQkJIFJUTDgxOFhfRUVQUk9NX0NNRF9DT05GSUcpOwotCXJlZyA9IHJ0bDgxOHhfaW9yZWFkOChwcml2LCAmcHJpdi0+bWFwLT5DT05GSUcxKTsKLQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkNPTkZJRzEsIChyZWcgJiAweDNGKSB8IDB4ODApOwotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCwKLQkJCSBSVEw4MThYX0VFUFJPTV9DTURfTk9STUFMKTsKLQotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+V1BBX0NPTkYsIDApOwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJ0bDgxODdiX3JlZ190YWJsZSk7IGkrKykgewotCQlydGw4MTh4X2lvd3JpdGU4X2lkeChwcml2LAotCQkJCSAgICAgKHU4ICopKHVpbnRwdHJfdCkKLQkJCQkgICAgIChydGw4MTg3Yl9yZWdfdGFibGVbaV1bMF0gfCAweEZGMDApLAotCQkJCSAgICAgcnRsODE4N2JfcmVnX3RhYmxlW2ldWzFdLAotCQkJCSAgICAgcnRsODE4N2JfcmVnX3RhYmxlW2ldWzJdKTsKLQl9Ci0KLQlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5USURfQUNfTUFQLCAweEZBNTApOwotCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPklOVF9NSUcsIDApOwotCi0JcnRsODE4eF9pb3dyaXRlMzJfaWR4KHByaXYsIChfX2xlMzIgKikweEZGRjAsIDAsIDEpOwotCXJ0bDgxOHhfaW93cml0ZTMyX2lkeChwcml2LCAoX19sZTMyICopMHhGRkY0LCAwLCAxKTsKLQlydGw4MTh4X2lvd3JpdGU4X2lkeChwcml2LCAodTggKikweEZGRjgsIDAsIDEpOwotCi0JcnRsODE4eF9pb3dyaXRlMzIocHJpdiwgJnByaXYtPm1hcC0+UkZfVElNSU5HLCAweDAwMDA0MDAxKTsKLQotCXJ0bDgxOHhfaW93cml0ZTE2X2lkeChwcml2LCAoX19sZTE2ICopMHhGRjcyLCAweDU2OUEsIDIpOwotCi0JcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5FRVBST01fQ01ELAotCQkJIFJUTDgxOFhfRUVQUk9NX0NNRF9DT05GSUcpOwotCXJlZyA9IHJ0bDgxOHhfaW9yZWFkOChwcml2LCAmcHJpdi0+bWFwLT5DT05GSUczKTsKLQlyZWcgfD0gUlRMODE4WF9DT05GSUczX0FOQVBBUkFNX1dSSVRFOwotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+Q09ORklHMywgcmVnKTsKLQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQsCi0JCQkgUlRMODE4WF9FRVBST01fQ01EX05PUk1BTCk7Ci0KLQlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNPdXRwdXQsIDB4MDQ4MCk7Ci0JcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zU2VsZWN0LCAweDI0ODgpOwotCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc0VuYWJsZSwgMHgxRkZGKTsKLQltc2xlZXAoMTAwKTsKLQotCXByaXYtPnJmLT5pbml0KGRldik7Ci0KLQlyZWcgPSBSVEw4MThYX0NNRF9UWF9FTkFCTEUgfCBSVEw4MThYX0NNRF9SWF9FTkFCTEU7Ci0JcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5DTUQsIHJlZyk7Ci0JcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+SU5UX01BU0ssIDB4RkZGRik7Ci0KLQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICh1OCAqKTB4RkU0MSwgMHhGNCk7Ci0JcnRsODE4eF9pb3dyaXRlOChwcml2LCAodTggKikweEZFNDAsIDB4MDApOwotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgKHU4ICopMHhGRTQyLCAweDAwKTsKLQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICh1OCAqKTB4RkU0MiwgMHgwMSk7Ci0JcnRsODE4eF9pb3dyaXRlOChwcml2LCAodTggKikweEZFNDAsIDB4MEYpOwotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgKHU4ICopMHhGRTQyLCAweDAwKTsKLQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICh1OCAqKTB4RkU0MiwgMHgwMSk7Ci0KLQlyZWcgPSBydGw4MTh4X2lvcmVhZDgocHJpdiwgKHU4ICopMHhGRkRCKTsKLQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICh1OCAqKTB4RkZEQiwgcmVnIHwgKDEgPDwgMikpOwotCXJ0bDgxOHhfaW93cml0ZTE2X2lkeChwcml2LCAoX19sZTE2ICopMHhGRjcyLCAweDU5RkEsIDMpOwotCXJ0bDgxOHhfaW93cml0ZTE2X2lkeChwcml2LCAoX19sZTE2ICopMHhGRjc0LCAweDU5RDIsIDMpOwotCXJ0bDgxOHhfaW93cml0ZTE2X2lkeChwcml2LCAoX19sZTE2ICopMHhGRjc2LCAweDU5RDIsIDMpOwotCXJ0bDgxOHhfaW93cml0ZTE2X2lkeChwcml2LCAoX19sZTE2ICopMHhGRjc4LCAweDE5RkEsIDMpOwotCXJ0bDgxOHhfaW93cml0ZTE2X2lkeChwcml2LCAoX19sZTE2ICopMHhGRjdBLCAweDE5RkEsIDMpOwotCXJ0bDgxOHhfaW93cml0ZTE2X2lkeChwcml2LCAoX19sZTE2ICopMHhGRjdDLCAweDAwRDAsIDMpOwotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgKHU4ICopMHhGRjYxLCAwKTsKLQlydGw4MTh4X2lvd3JpdGU4X2lkeChwcml2LCAodTggKikweEZGODAsIDB4MEYsIDEpOwotCXJ0bDgxOHhfaW93cml0ZThfaWR4KHByaXYsICh1OCAqKTB4RkY4MywgMHgwMywgMSk7Ci0JcnRsODE4eF9pb3dyaXRlOChwcml2LCAodTggKikweEZGREEsIDB4MTApOwotCXJ0bDgxOHhfaW93cml0ZThfaWR4KHByaXYsICh1OCAqKTB4RkY0RCwgMHgwOCwgMik7Ci0KLQlydGw4MTh4X2lvd3JpdGUzMihwcml2LCAmcHJpdi0+bWFwLT5IU1NJX1BBUkEsIDB4MDYwMDMyMUIpOwotCi0JcnRsODE4eF9pb3dyaXRlMTZfaWR4KHByaXYsIChfX2xlMTYgKikweEZGRUMsIDB4MDgwMCwgMSk7Ci0KLQlwcml2LT5zbG90X3RpbWUgPSAweDk7Ci0JcHJpdi0+YWlmc25bMF0gPSAyOyAvKiBBSUZTTltBQ19WT10gKi8KLQlwcml2LT5haWZzblsxXSA9IDI7IC8qIEFJRlNOW0FDX1ZJXSAqLwotCXByaXYtPmFpZnNuWzJdID0gNzsgLyogQUlGU05bQUNfQktdICovCi0JcHJpdi0+YWlmc25bM10gPSAzOyAvKiBBSUZTTltBQ19CRV0gKi8KLQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkFDTV9DT05UUk9MLCAwKTsKLQotCS8qIEVORURDQSBmbGFnIG11c3QgYWx3YXlzIGJlIHNldCwgdHJhbnNtaXQgaXNzdWVzPyAqLwotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+TVNSLCBSVEw4MThYX01TUl9FTkVEQ0EpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHJ0bDgxODdfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0JLyogVGhlIFJUTDgxODcgcmV0dXJucyB0aGUgcmV0cnkgY291bnQgdGhyb3VnaCByZWdpc3RlciAweEZGRkEuIEluCi0JICogYWRkaXRpb24sIGl0IGFwcGVhcnMgdG8gYmUgYSBjdW11bGF0aXZlIHJldHJ5IGNvdW50LCBub3QgdGhlCi0JICogdmFsdWUgZm9yIHRoZSBjdXJyZW50IFRYIHBhY2tldC4gV2hlbiBtdWx0aXBsZSBUWCBlbnRyaWVzIGFyZQotCSAqIHF1ZXVlZCwgdGhlIHJldHJ5IGNvdW50IHdpbGwgYmUgdmFsaWQgZm9yIHRoZSBsYXN0IG9uZSBpbiB0aGUgcXVldWUuCi0JICogVGhlICJlcnJvciIgc2hvdWxkIG5vdCBtYXR0ZXIgZm9yIHB1cnBvc2VzIG9mIHJhdGUgc2V0dGluZy4gKi8KLQlzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBydGw4MTg3X3ByaXYsCi0JCQkJICAgIHdvcmsud29yayk7Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOwotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiA9IHByaXYtPmRldjsKLQlzdGF0aWMgdTE2IHJldHJ5OwotCXUxNiB0bXA7Ci0KLQltdXRleF9sb2NrKCZwcml2LT5jb25mX211dGV4KTsKLQl0bXAgPSBydGw4MTh4X2lvcmVhZDE2KHByaXYsIChfX2xlMTYgKikweEZGRkEpOwotCXdoaWxlIChza2JfcXVldWVfbGVuKCZwcml2LT5iX3R4X3N0YXR1cy5xdWV1ZSkgPiAwKSB7Ci0JCXN0cnVjdCBza19idWZmICpvbGRfc2tiOwotCi0JCW9sZF9za2IgPSBza2JfZGVxdWV1ZSgmcHJpdi0+Yl90eF9zdGF0dXMucXVldWUpOwotCQlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihvbGRfc2tiKTsKLQkJaW5mby0+c3RhdHVzLnJhdGVzWzBdLmNvdW50ID0gdG1wIC0gcmV0cnkgKyAxOwotCQlpZWVlODAyMTFfdHhfc3RhdHVzX2lycXNhZmUoZGV2LCBvbGRfc2tiKTsKLQl9Ci0JcmV0cnkgPSB0bXA7Ci0JbXV0ZXhfdW5sb2NrKCZwcml2LT5jb25mX211dGV4KTsKLX0KLQotc3RhdGljIGludCBydGw4MTg3X3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKLXsKLQlzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2ID0gZGV2LT5wcml2OwotCXUzMiByZWc7Ci0JaW50IHJldDsKLQotCW11dGV4X2xvY2soJnByaXYtPmNvbmZfbXV0ZXgpOwotCi0JcmV0ID0gKCFwcml2LT5pc19ydGw4MTg3YikgPyBydGw4MTg3X2luaXRfaHcoZGV2KSA6Ci0JCQkJICAgICBydGw4MTg3Yl9pbml0X2h3KGRldik7Ci0JaWYgKHJldCkKLQkJZ290byBydGw4MTg3X3N0YXJ0X2V4aXQ7Ci0KLQlpbml0X3VzYl9hbmNob3IoJnByaXYtPmFuY2hvcmVkKTsKLQlwcml2LT5kZXYgPSBkZXY7Ci0KLQlpZiAocHJpdi0+aXNfcnRsODE4N2IpIHsKLQkJcmVnID0gUlRMODE4WF9SWF9DT05GX01HTVQgfAotCQkgICAgICBSVEw4MThYX1JYX0NPTkZfREFUQSB8Ci0JCSAgICAgIFJUTDgxOFhfUlhfQ09ORl9CUk9BRENBU1QgfAotCQkgICAgICBSVEw4MThYX1JYX0NPTkZfTklDTUFDIHwKLQkJICAgICAgUlRMODE4WF9SWF9DT05GX0JTU0lEIHwKLQkJICAgICAgKDcgPDwgMTMgLyogUlggRklGTyB0aHJlc2hvbGQgTk9ORSAqLykgfAotCQkgICAgICAoNyA8PCAxMCAvKiBNQVggUlggRE1BICovKSB8Ci0JCSAgICAgIFJUTDgxOFhfUlhfQ09ORl9SWF9BVVRPUkVTRVRQSFkgfAotCQkgICAgICBSVEw4MThYX1JYX0NPTkZfT05MWUVSTFBLVCB8Ci0JCSAgICAgIFJUTDgxOFhfUlhfQ09ORl9NVUxUSUNBU1Q7Ci0JCXByaXYtPnJ4X2NvbmYgPSByZWc7Ci0JCXJ0bDgxOHhfaW93cml0ZTMyKHByaXYsICZwcml2LT5tYXAtPlJYX0NPTkYsIHJlZyk7Ci0KLQkJcnRsODE4eF9pb3dyaXRlMzIocHJpdiwgJnByaXYtPm1hcC0+VFhfQ09ORiwKLQkJCQkgIFJUTDgxOFhfVFhfQ09ORl9IV19TRVFOVU0gfAotCQkJCSAgUlRMODE4WF9UWF9DT05GX0RJU1JFUVFTSVpFIHwKLQkJCQkgICg3IDw8IDggIC8qIHNob3J0IHJldHJ5IGxpbWl0ICovKSB8Ci0JCQkJICAoNyA8PCAwICAvKiBsb25nIHJldHJ5IGxpbWl0ICovKSB8Ci0JCQkJICAoNyA8PCAyMSAvKiBNQVggVFggRE1BICovKSk7Ci0JCXJ0bDgxODdfaW5pdF91cmJzKGRldik7Ci0JCXJ0bDgxODdiX2luaXRfc3RhdHVzX3VyYihkZXYpOwotCQlnb3RvIHJ0bDgxODdfc3RhcnRfZXhpdDsKLQl9Ci0KLQlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5JTlRfTUFTSywgMHhGRkZGKTsKLQotCXJ0bDgxOHhfaW93cml0ZTMyKHByaXYsICZwcml2LT5tYXAtPk1BUlswXSwgfjApOwotCXJ0bDgxOHhfaW93cml0ZTMyKHByaXYsICZwcml2LT5tYXAtPk1BUlsxXSwgfjApOwotCi0JcnRsODE4N19pbml0X3VyYnMoZGV2KTsKLQotCXJlZyA9IFJUTDgxOFhfUlhfQ09ORl9PTkxZRVJMUEtUIHwKLQkgICAgICBSVEw4MThYX1JYX0NPTkZfUlhfQVVUT1JFU0VUUEhZIHwKLQkgICAgICBSVEw4MThYX1JYX0NPTkZfQlNTSUQgfAotCSAgICAgIFJUTDgxOFhfUlhfQ09ORl9NR01UIHwKLQkgICAgICBSVEw4MThYX1JYX0NPTkZfREFUQSB8Ci0JICAgICAgKDcgPDwgMTMgLyogUlggRklGTyB0aHJlc2hvbGQgTk9ORSAqLykgfAotCSAgICAgICg3IDw8IDEwIC8qIE1BWCBSWCBETUEgKi8pIHwKLQkgICAgICBSVEw4MThYX1JYX0NPTkZfQlJPQURDQVNUIHwKLQkgICAgICBSVEw4MThYX1JYX0NPTkZfTklDTUFDOwotCi0JcHJpdi0+cnhfY29uZiA9IHJlZzsKLQlydGw4MTh4X2lvd3JpdGUzMihwcml2LCAmcHJpdi0+bWFwLT5SWF9DT05GLCByZWcpOwotCi0JcmVnID0gcnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPkNXX0NPTkYpOwotCXJlZyAmPSB+UlRMODE4WF9DV19DT05GX1BFUlBBQ0tFVF9DV19TSElGVDsKLQlyZWcgfD0gUlRMODE4WF9DV19DT05GX1BFUlBBQ0tFVF9SRVRSWV9TSElGVDsKLQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkNXX0NPTkYsIHJlZyk7Ci0KLQlyZWcgPSBydGw4MTh4X2lvcmVhZDgocHJpdiwgJnByaXYtPm1hcC0+VFhfQUdDX0NUTCk7Ci0JcmVnICY9IH5SVEw4MThYX1RYX0FHQ19DVExfUEVSUEFDS0VUX0dBSU5fU0hJRlQ7Ci0JcmVnICY9IH5SVEw4MThYX1RYX0FHQ19DVExfUEVSUEFDS0VUX0FOVFNFTF9TSElGVDsKLQlyZWcgJj0gflJUTDgxOFhfVFhfQUdDX0NUTF9GRUVEQkFDS19BTlQ7Ci0JcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5UWF9BR0NfQ1RMLCByZWcpOwotCi0JcmVnICA9IFJUTDgxOFhfVFhfQ09ORl9DV19NSU4gfAotCSAgICAgICAoNyA8PCAyMSAvKiBNQVggVFggRE1BICovKSB8Ci0JICAgICAgIFJUTDgxOFhfVFhfQ09ORl9OT19JQ1Y7Ci0JcnRsODE4eF9pb3dyaXRlMzIocHJpdiwgJnByaXYtPm1hcC0+VFhfQ09ORiwgcmVnKTsKLQotCXJlZyA9IHJ0bDgxOHhfaW9yZWFkOChwcml2LCAmcHJpdi0+bWFwLT5DTUQpOwotCXJlZyB8PSBSVEw4MThYX0NNRF9UWF9FTkFCTEU7Ci0JcmVnIHw9IFJUTDgxOFhfQ01EX1JYX0VOQUJMRTsKLQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkNNRCwgcmVnKTsKLQlJTklUX0RFTEFZRURfV09SSygmcHJpdi0+d29yaywgcnRsODE4N193b3JrKTsKLQotcnRsODE4N19zdGFydF9leGl0OgotCW11dGV4X3VubG9jaygmcHJpdi0+Y29uZl9tdXRleCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgcnRsODE4N19zdG9wKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKLXsKLQlzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2ID0gZGV2LT5wcml2OwotCXN0cnVjdCBza19idWZmICpza2I7Ci0JdTMyIHJlZzsKLQotCW11dGV4X2xvY2soJnByaXYtPmNvbmZfbXV0ZXgpOwotCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPklOVF9NQVNLLCAwKTsKLQotCXJlZyA9IHJ0bDgxOHhfaW9yZWFkOChwcml2LCAmcHJpdi0+bWFwLT5DTUQpOwotCXJlZyAmPSB+UlRMODE4WF9DTURfVFhfRU5BQkxFOwotCXJlZyAmPSB+UlRMODE4WF9DTURfUlhfRU5BQkxFOwotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+Q01ELCByZWcpOwotCi0JcHJpdi0+cmYtPnN0b3AoZGV2KTsKLQotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCwgUlRMODE4WF9FRVBST01fQ01EX0NPTkZJRyk7Ci0JcmVnID0gcnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPkNPTkZJRzQpOwotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+Q09ORklHNCwgcmVnIHwgUlRMODE4WF9DT05GSUc0X1ZDT09GRik7Ci0JcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5FRVBST01fQ01ELCBSVEw4MThYX0VFUFJPTV9DTURfTk9STUFMKTsKLQotCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJnByaXYtPmJfdHhfc3RhdHVzLnF1ZXVlKSkpCi0JCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0KLQl1c2Jfa2lsbF9hbmNob3JlZF91cmJzKCZwcml2LT5hbmNob3JlZCk7Ci0JbXV0ZXhfdW5sb2NrKCZwcml2LT5jb25mX211dGV4KTsKLQotCWlmICghcHJpdi0+aXNfcnRsODE4N2IpCi0JCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcHJpdi0+d29yayk7Ci19Ci0KLXN0YXRpYyBpbnQgcnRsODE4N19hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKLQkJCQkgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKLXsKLQlzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2ID0gZGV2LT5wcml2OwotCWludCBpOwotCWludCByZXQgPSAtRU9QTk9UU1VQUDsKLQotCW11dGV4X2xvY2soJnByaXYtPmNvbmZfbXV0ZXgpOwotCWlmIChwcml2LT52aWYpCi0JCWdvdG8gZXhpdDsKLQotCXN3aXRjaCAodmlmLT50eXBlKSB7Ci0JY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgotCQlicmVhazsKLQlkZWZhdWx0OgotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JcmV0ID0gMDsKLQlwcml2LT52aWYgPSB2aWY7Ci0KLQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQsIFJUTDgxOFhfRUVQUk9NX0NNRF9DT05GSUcpOwotCWZvciAoaSA9IDA7IGkgPCBFVEhfQUxFTjsgaSsrKQotCQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPk1BQ1tpXSwKLQkJCQkgKCh1OCAqKXZpZi0+YWRkcilbaV0pOwotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCwgUlRMODE4WF9FRVBST01fQ01EX05PUk1BTCk7Ci0KLWV4aXQ6Ci0JbXV0ZXhfdW5sb2NrKCZwcml2LT5jb25mX211dGV4KTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBydGw4MTg3X3JlbW92ZV9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAotCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKLXsKLQlzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2ID0gZGV2LT5wcml2OwotCW11dGV4X2xvY2soJnByaXYtPmNvbmZfbXV0ZXgpOwotCXByaXYtPnZpZiA9IE5VTEw7Ci0JbXV0ZXhfdW5sb2NrKCZwcml2LT5jb25mX211dGV4KTsKLX0KLQotc3RhdGljIGludCBydGw4MTg3X2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHUzMiBjaGFuZ2VkKQotewotCXN0cnVjdCBydGw4MTg3X3ByaXYgKnByaXYgPSBkZXYtPnByaXY7Ci0Jc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmRldi0+Y29uZjsKLQl1MzIgcmVnOwotCi0JbXV0ZXhfbG9jaygmcHJpdi0+Y29uZl9tdXRleCk7Ci0JcmVnID0gcnRsODE4eF9pb3JlYWQzMihwcml2LCAmcHJpdi0+bWFwLT5UWF9DT05GKTsKLQkvKiBFbmFibGUgVFggbG9vcGJhY2sgb24gTUFDIGxldmVsIHRvIGF2b2lkIFRYIGR1cmluZyBjaGFubmVsCi0JICogY2hhbmdlcywgYXMgdGhpcyBoYXMgYmUgc2VlbiB0byBjYXVzZXMgcHJvYmxlbXMgYW5kIHRoZQotCSAqIGNhcmQgd2lsbCBzdG9wIHdvcmsgdW50aWwgbmV4dCByZXNldAotCSAqLwotCXJ0bDgxOHhfaW93cml0ZTMyKHByaXYsICZwcml2LT5tYXAtPlRYX0NPTkYsCi0JCQkgIHJlZyB8IFJUTDgxOFhfVFhfQ09ORl9MT09QQkFDS19NQUMpOwotCXByaXYtPnJmLT5zZXRfY2hhbihkZXYsIGNvbmYpOwotCW1zbGVlcCgxMCk7Ci0JcnRsODE4eF9pb3dyaXRlMzIocHJpdiwgJnByaXYtPm1hcC0+VFhfQ09ORiwgcmVnKTsKLQotCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPkFUSU1fV05ELCAyKTsKLQlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5BVElNVFJfSU5URVJWQUwsIDEwMCk7Ci0JcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+QkVBQ09OX0lOVEVSVkFMLCAxMDApOwotCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPkJFQUNPTl9JTlRFUlZBTF9USU1FLCAxMDApOwotCW11dGV4X3VubG9jaygmcHJpdi0+Y29uZl9tdXRleCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBXaXRoIDgxODdCLCBBQ18qX1BBUkFNIGNsYXNoZXMgd2l0aCBGRU1SIGRlZmluaXRpb24gaW4gc3RydWN0IHJ0bDgxOHhfY3NyIGZvcgotICogZXhhbXBsZS4gVGh1cyB3ZSBoYXZlIHRvIHVzZSByYXcgdmFsdWVzIGZvciBBQ18qX1BBUkFNIHJlZ2lzdGVyIGFkZHJlc3Nlcy4KLSAqLwotc3RhdGljIF9fbGUzMiAqcnRsODE4N2JfYWNfYWRkcls0XSA9IHsKLQkoX19sZTMyICopIDB4RkZGMCwgLyogQUNfVk8gKi8KLQkoX19sZTMyICopIDB4RkZGNCwgLyogQUNfVkkgKi8KLQkoX19sZTMyICopIDB4RkZGQywgLyogQUNfQksgKi8KLQkoX19sZTMyICopIDB4RkZGOCwgLyogQUNfQkUgKi8KLX07Ci0KLSNkZWZpbmUgU0lGU19USU1FIDB4YQotCi1zdGF0aWMgdm9pZCBydGw4MTg3X2NvbmZfZXJwKHN0cnVjdCBydGw4MTg3X3ByaXYgKnByaXYsIGJvb2wgdXNlX3Nob3J0X3Nsb3QsCi0JCQkgICAgIGJvb2wgdXNlX3Nob3J0X3ByZWFtYmxlKQotewotCWlmIChwcml2LT5pc19ydGw4MTg3YikgewotCQl1OCBkaWZzLCBlaWZzOwotCQl1MTYgYWNrX3RpbWVvdXQ7Ci0JCWludCBxdWV1ZTsKLQotCQlpZiAodXNlX3Nob3J0X3Nsb3QpIHsKLQkJCXByaXYtPnNsb3RfdGltZSA9IDB4OTsKLQkJCWRpZnMgPSAweDFjOwotCQkJZWlmcyA9IDB4NTM7Ci0JCX0gZWxzZSB7Ci0JCQlwcml2LT5zbG90X3RpbWUgPSAweDE0OwotCQkJZGlmcyA9IDB4MzI7Ci0JCQllaWZzID0gMHg1YjsKLQkJfQotCQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPlNJRlMsIDB4MjIpOwotCQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPlNMT1QsIHByaXYtPnNsb3RfdGltZSk7Ci0JCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RElGUywgZGlmcyk7Ci0KLQkJLyoKLQkJICogQlJTUisxIG9uIDgxODdCIGlzIGluIGZhY3QgRUlGUyByZWdpc3RlcgotCQkgKiBWYWx1ZSBpbiB1bml0cyBvZiA0IHVzCi0JCSAqLwotCQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICh1OCAqKSZwcml2LT5tYXAtPkJSU1IgKyAxLCBlaWZzKTsKLQotCQkvKgotCQkgKiBGb3IgODE4N0IsIENBUlJJRVJfU0VOU0VfQ09VTlRFUiBpcyBpbiBmYWN0IGFjayB0aW1lb3V0Ci0JCSAqIHJlZ2lzdGVyLiBJbiB1bml0cyBvZiA0IHVzIGxpa2UgZWlmcyByZWdpc3RlcgotCQkgKiBhY2tfdGltZW91dCA9IGFjayBkdXJhdGlvbiArIHBsY3AgKyBkaWZzICsgcHJlYW1ibGUKLQkJICovCi0JCWFja190aW1lb3V0ID0gMTEyICsgNDggKyBkaWZzOwotCQlpZiAodXNlX3Nob3J0X3ByZWFtYmxlKQotCQkJYWNrX3RpbWVvdXQgKz0gNzI7Ci0JCWVsc2UKLQkJCWFja190aW1lb3V0ICs9IDE0NDsKLQkJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5DQVJSSUVSX1NFTlNFX0NPVU5URVIsCi0JCQkJIERJVl9ST1VORF9VUChhY2tfdGltZW91dCwgNCkpOwotCi0JCWZvciAocXVldWUgPSAwOyBxdWV1ZSA8IDQ7IHF1ZXVlKyspCi0JCQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICh1OCAqKSBydGw4MTg3Yl9hY19hZGRyW3F1ZXVlXSwKLQkJCQkJIHByaXYtPmFpZnNuW3F1ZXVlXSAqIHByaXYtPnNsb3RfdGltZSArCi0JCQkJCSBTSUZTX1RJTUUpOwotCX0gZWxzZSB7Ci0JCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+U0lGUywgMHgyMik7Ci0JCWlmICh1c2Vfc2hvcnRfc2xvdCkgewotCQkJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5TTE9ULCAweDkpOwotCQkJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5ESUZTLCAweDE0KTsKLQkJCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RUlGUywgOTEgLSAweDE0KTsKLQkJfSBlbHNlIHsKLQkJCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+U0xPVCwgMHgxNCk7Ci0JCQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkRJRlMsIDB4MjQpOwotCQkJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5FSUZTLCA5MSAtIDB4MjQpOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBydGw4MTg3X2Jzc19pbmZvX2NoYW5nZWQoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAotCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKLQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmluZm8sCi0JCQkJICAgICB1MzIgY2hhbmdlZCkKLXsKLQlzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2ID0gZGV2LT5wcml2OwotCWludCBpOwotCXU4IHJlZzsKLQotCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQlNTSUQpIHsKLQkJbXV0ZXhfbG9jaygmcHJpdi0+Y29uZl9tdXRleCk7Ci0JCWZvciAoaSA9IDA7IGkgPCBFVEhfQUxFTjsgaSsrKQotCQkJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5CU1NJRFtpXSwKLQkJCQkJIGluZm8tPmJzc2lkW2ldKTsKLQotCQlpZiAocHJpdi0+aXNfcnRsODE4N2IpCi0JCQlyZWcgPSBSVEw4MThYX01TUl9FTkVEQ0E7Ci0JCWVsc2UKLQkJCXJlZyA9IDA7Ci0KLQkJaWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIoaW5mby0+YnNzaWQpKQotCQkJcmVnIHw9IFJUTDgxOFhfTVNSX0lORlJBOwotCQllbHNlCi0JCQlyZWcgfD0gUlRMODE4WF9NU1JfTk9fTElOSzsKLQotCQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPk1TUiwgcmVnKTsKLQotCQltdXRleF91bmxvY2soJnByaXYtPmNvbmZfbXV0ZXgpOwotCX0KLQotCWlmIChjaGFuZ2VkICYgKEJTU19DSEFOR0VEX0VSUF9TTE9UIHwgQlNTX0NIQU5HRURfRVJQX1BSRUFNQkxFKSkKLQkJcnRsODE4N19jb25mX2VycChwcml2LCBpbmZvLT51c2Vfc2hvcnRfc2xvdCwKLQkJCQkgaW5mby0+dXNlX3Nob3J0X3ByZWFtYmxlKTsKLX0KLQotc3RhdGljIHU2NCBydGw4MTg3X3ByZXBhcmVfbXVsdGljYXN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKLQkJCQkgICAgIHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICptY19saXN0KQotewotCXJldHVybiBuZXRkZXZfaHdfYWRkcl9saXN0X2NvdW50KG1jX2xpc3QpOwotfQotCi1zdGF0aWMgdm9pZCBydGw4MTg3X2NvbmZpZ3VyZV9maWx0ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAotCQkJCSAgICAgdW5zaWduZWQgaW50IGNoYW5nZWRfZmxhZ3MsCi0JCQkJICAgICB1bnNpZ25lZCBpbnQgKnRvdGFsX2ZsYWdzLAotCQkJCSAgICAgdTY0IG11bHRpY2FzdCkKLXsKLQlzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2ID0gZGV2LT5wcml2OwotCi0JaWYgKGNoYW5nZWRfZmxhZ3MgJiBGSUZfRkNTRkFJTCkKLQkJcHJpdi0+cnhfY29uZiBePSBSVEw4MThYX1JYX0NPTkZfRkNTOwotCWlmIChjaGFuZ2VkX2ZsYWdzICYgRklGX0NPTlRST0wpCi0JCXByaXYtPnJ4X2NvbmYgXj0gUlRMODE4WF9SWF9DT05GX0NUUkw7Ci0JaWYgKGNoYW5nZWRfZmxhZ3MgJiBGSUZfT1RIRVJfQlNTKQotCQlwcml2LT5yeF9jb25mIF49IFJUTDgxOFhfUlhfQ09ORl9NT05JVE9SOwotCWlmICgqdG90YWxfZmxhZ3MgJiBGSUZfQUxMTVVMVEkgfHwgbXVsdGljYXN0ID4gMCkKLQkJcHJpdi0+cnhfY29uZiB8PSBSVEw4MThYX1JYX0NPTkZfTVVMVElDQVNUOwotCWVsc2UKLQkJcHJpdi0+cnhfY29uZiAmPSB+UlRMODE4WF9SWF9DT05GX01VTFRJQ0FTVDsKLQotCSp0b3RhbF9mbGFncyA9IDA7Ci0KLQlpZiAocHJpdi0+cnhfY29uZiAmIFJUTDgxOFhfUlhfQ09ORl9GQ1MpCi0JCSp0b3RhbF9mbGFncyB8PSBGSUZfRkNTRkFJTDsKLQlpZiAocHJpdi0+cnhfY29uZiAmIFJUTDgxOFhfUlhfQ09ORl9DVFJMKQotCQkqdG90YWxfZmxhZ3MgfD0gRklGX0NPTlRST0w7Ci0JaWYgKHByaXYtPnJ4X2NvbmYgJiBSVEw4MThYX1JYX0NPTkZfTU9OSVRPUikKLQkJKnRvdGFsX2ZsYWdzIHw9IEZJRl9PVEhFUl9CU1M7Ci0JaWYgKHByaXYtPnJ4X2NvbmYgJiBSVEw4MThYX1JYX0NPTkZfTVVMVElDQVNUKQotCQkqdG90YWxfZmxhZ3MgfD0gRklGX0FMTE1VTFRJOwotCi0JcnRsODE4eF9pb3dyaXRlMzJfYXN5bmMocHJpdiwgJnByaXYtPm1hcC0+UlhfQ09ORiwgcHJpdi0+cnhfY29uZik7Ci19Ci0KLXN0YXRpYyBpbnQgcnRsODE4N19jb25mX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgdTE2IHF1ZXVlLAotCQkJICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgKnBhcmFtcykKLXsKLQlzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2ID0gZGV2LT5wcml2OwotCXU4IGN3X21pbiwgY3dfbWF4OwotCi0JaWYgKHF1ZXVlID4gMykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQljd19taW4gPSBmbHMocGFyYW1zLT5jd19taW4pOwotCWN3X21heCA9IGZscyhwYXJhbXMtPmN3X21heCk7Ci0KLQlpZiAocHJpdi0+aXNfcnRsODE4N2IpIHsKLQkJcHJpdi0+YWlmc25bcXVldWVdID0gcGFyYW1zLT5haWZzOwotCi0JCS8qCi0JCSAqIFRoaXMgaXMgdGhlIHN0cnVjdHVyZSBvZiBBQ18qX1BBUkFNIHJlZ2lzdGVycyBpbiA4MTg3QjoKLQkJICogLSBUWE9QIGxpbWl0IGZpZWxkLCBiaXQgb2Zmc2V0ID0gMTYKLQkJICogLSBFQ1dtYXgsIGJpdCBvZmZzZXQgPSAxMgotCQkgKiAtIEVDV21pbiwgYml0IG9mZnNldCA9IDgKLQkJICogLSBBSUZTLCBiaXQgb2Zmc2V0ID0gMAotCQkgKi8KLQkJcnRsODE4eF9pb3dyaXRlMzIocHJpdiwgcnRsODE4N2JfYWNfYWRkcltxdWV1ZV0sCi0JCQkJICAocGFyYW1zLT50eG9wIDw8IDE2KSB8IChjd19tYXggPDwgMTIpIHwKLQkJCQkgIChjd19taW4gPDwgOCkgfCAocGFyYW1zLT5haWZzICoKLQkJCQkgIHByaXYtPnNsb3RfdGltZSArIFNJRlNfVElNRSkpOwotCX0gZWxzZSB7Ci0JCWlmIChxdWV1ZSAhPSAwKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5DV19WQUwsCi0JCQkJIGN3X21pbiB8IChjd19tYXggPDwgNCkpOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHU2NCBydGw4MTg3X2dldF90c2Yoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQotewotCXN0cnVjdCBydGw4MTg3X3ByaXYgKnByaXYgPSBkZXYtPnByaXY7Ci0KLQlyZXR1cm4gcnRsODE4eF9pb3JlYWQzMihwcml2LCAmcHJpdi0+bWFwLT5UU0ZUWzBdKSB8Ci0JICAgICAgICh1NjQpKHJ0bDgxOHhfaW9yZWFkMzIocHJpdiwgJnByaXYtPm1hcC0+VFNGVFsxXSkpIDw8IDMyOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgcnRsODE4N19vcHMgPSB7Ci0JLnR4CQkJPSBydGw4MTg3X3R4LAotCS5zdGFydAkJCT0gcnRsODE4N19zdGFydCwKLQkuc3RvcAkJCT0gcnRsODE4N19zdG9wLAotCS5hZGRfaW50ZXJmYWNlCQk9IHJ0bDgxODdfYWRkX2ludGVyZmFjZSwKLQkucmVtb3ZlX2ludGVyZmFjZQk9IHJ0bDgxODdfcmVtb3ZlX2ludGVyZmFjZSwKLQkuY29uZmlnCQkJPSBydGw4MTg3X2NvbmZpZywKLQkuYnNzX2luZm9fY2hhbmdlZAk9IHJ0bDgxODdfYnNzX2luZm9fY2hhbmdlZCwKLQkucHJlcGFyZV9tdWx0aWNhc3QJPSBydGw4MTg3X3ByZXBhcmVfbXVsdGljYXN0LAotCS5jb25maWd1cmVfZmlsdGVyCT0gcnRsODE4N19jb25maWd1cmVfZmlsdGVyLAotCS5jb25mX3R4CQk9IHJ0bDgxODdfY29uZl90eCwKLQkucmZraWxsX3BvbGwJCT0gcnRsODE4N19yZmtpbGxfcG9sbCwKLQkuZ2V0X3RzZgkJPSBydGw4MTg3X2dldF90c2YsCi19OwotCi1zdGF0aWMgdm9pZCBydGw4MTg3X2VlcHJvbV9yZWdpc3Rlcl9yZWFkKHN0cnVjdCBlZXByb21fOTNjeDYgKmVlcHJvbSkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYgPSBlZXByb20tPmRhdGE7Ci0Jc3RydWN0IHJ0bDgxODdfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKLQl1OCByZWcgPSBydGw4MTh4X2lvcmVhZDgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCk7Ci0KLQllZXByb20tPnJlZ19kYXRhX2luID0gcmVnICYgUlRMODE4WF9FRVBST01fQ01EX1dSSVRFOwotCWVlcHJvbS0+cmVnX2RhdGFfb3V0ID0gcmVnICYgUlRMODE4WF9FRVBST01fQ01EX1JFQUQ7Ci0JZWVwcm9tLT5yZWdfZGF0YV9jbG9jayA9IHJlZyAmIFJUTDgxOFhfRUVQUk9NX0NNRF9DSzsKLQllZXByb20tPnJlZ19jaGlwX3NlbGVjdCA9IHJlZyAmIFJUTDgxOFhfRUVQUk9NX0NNRF9DUzsKLX0KLQotc3RhdGljIHZvaWQgcnRsODE4N19lZXByb21fcmVnaXN0ZXJfd3JpdGUoc3RydWN0IGVlcHJvbV85M2N4NiAqZWVwcm9tKQotewotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiA9IGVlcHJvbS0+ZGF0YTsKLQlzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2ID0gZGV2LT5wcml2OwotCXU4IHJlZyA9IFJUTDgxOFhfRUVQUk9NX0NNRF9QUk9HUkFNOwotCi0JaWYgKGVlcHJvbS0+cmVnX2RhdGFfaW4pCi0JCXJlZyB8PSBSVEw4MThYX0VFUFJPTV9DTURfV1JJVEU7Ci0JaWYgKGVlcHJvbS0+cmVnX2RhdGFfb3V0KQotCQlyZWcgfD0gUlRMODE4WF9FRVBST01fQ01EX1JFQUQ7Ci0JaWYgKGVlcHJvbS0+cmVnX2RhdGFfY2xvY2spCi0JCXJlZyB8PSBSVEw4MThYX0VFUFJPTV9DTURfQ0s7Ci0JaWYgKGVlcHJvbS0+cmVnX2NoaXBfc2VsZWN0KQotCQlyZWcgfD0gUlRMODE4WF9FRVBST01fQ01EX0NTOwotCi0JcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5FRVBST01fQ01ELCByZWcpOwotCXVkZWxheSgxMCk7Ci19Ci0KLXN0YXRpYyBpbnQgX19kZXZpbml0IHJ0bDgxODdfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCi0JCQkJICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQotewotCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXY7Ci0Jc3RydWN0IHJ0bDgxODdfcHJpdiAqcHJpdjsKLQlzdHJ1Y3QgZWVwcm9tXzkzY3g2IGVlcHJvbTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWw7Ci0JY29uc3QgY2hhciAqY2hpcF9uYW1lOwotCXUxNiB0eHB3ciwgcmVnOwotCXUxNiBwcm9kdWN0X2lkID0gbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpOwotCWludCBlcnIsIGk7Ci0JdTggbWFjX2FkZHJbRVRIX0FMRU5dOwotCi0JZGV2ID0gaWVlZTgwMjExX2FsbG9jX2h3KHNpemVvZigqcHJpdiksICZydGw4MTg3X29wcyk7Ci0JaWYgKCFkZXYpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJydGw4MTg3OiBpZWVlODAyMTEgYWxsb2MgZmFpbGVkXG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JcHJpdiA9IGRldi0+cHJpdjsKLQlwcml2LT5pc19ydGw4MTg3YiA9IChpZC0+ZHJpdmVyX2luZm8gPT0gREVWSUNFX1JUTDgxODdCKTsKLQotCS8qIGFsbG9jYXRlICJETUEgYXdhcmUiIGJ1ZmZlciBmb3IgcmVnaXN0ZXIgYWNjZXNzZXMgKi8KLQlwcml2LT5pb19kbWFidWYgPSBrbWFsbG9jKHNpemVvZigqcHJpdi0+aW9fZG1hYnVmKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFwcml2LT5pb19kbWFidWYpIHsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBlcnJfZnJlZV9kZXY7Ci0JfQotCW11dGV4X2luaXQoJnByaXYtPmlvX211dGV4KTsKLQotCVNFVF9JRUVFODAyMTFfREVWKGRldiwgJmludGYtPmRldik7Ci0JdXNiX3NldF9pbnRmZGF0YShpbnRmLCBkZXYpOwotCXByaXYtPnVkZXYgPSB1ZGV2OwotCi0JdXNiX2dldF9kZXYodWRldik7Ci0KLQlza2JfcXVldWVfaGVhZF9pbml0KCZwcml2LT5yeF9xdWV1ZSk7Ci0KLQlCVUlMRF9CVUdfT04oc2l6ZW9mKHByaXYtPmNoYW5uZWxzKSAhPSBzaXplb2YocnRsODE4eF9jaGFubmVscykpOwotCUJVSUxEX0JVR19PTihzaXplb2YocHJpdi0+cmF0ZXMpICE9IHNpemVvZihydGw4MTh4X3JhdGVzKSk7Ci0KLQltZW1jcHkocHJpdi0+Y2hhbm5lbHMsIHJ0bDgxOHhfY2hhbm5lbHMsIHNpemVvZihydGw4MTh4X2NoYW5uZWxzKSk7Ci0JbWVtY3B5KHByaXYtPnJhdGVzLCBydGw4MTh4X3JhdGVzLCBzaXplb2YocnRsODE4eF9yYXRlcykpOwotCXByaXYtPm1hcCA9IChzdHJ1Y3QgcnRsODE4eF9jc3IgKikweEZGMDA7Ci0KLQlwcml2LT5iYW5kLmJhbmQgPSBJRUVFODAyMTFfQkFORF8yR0haOwotCXByaXYtPmJhbmQuY2hhbm5lbHMgPSBwcml2LT5jaGFubmVsczsKLQlwcml2LT5iYW5kLm5fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKHJ0bDgxOHhfY2hhbm5lbHMpOwotCXByaXYtPmJhbmQuYml0cmF0ZXMgPSBwcml2LT5yYXRlczsKLQlwcml2LT5iYW5kLm5fYml0cmF0ZXMgPSBBUlJBWV9TSVpFKHJ0bDgxOHhfcmF0ZXMpOwotCWRldi0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0gJnByaXYtPmJhbmQ7Ci0KLQotCWRldi0+ZmxhZ3MgPSBJRUVFODAyMTFfSFdfSE9TVF9CUk9BRENBU1RfUFNfQlVGRkVSSU5HIHwKLQkJICAgICBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSB8Ci0JCSAgICAgSUVFRTgwMjExX0hXX1JYX0lOQ0xVREVTX0ZDUzsKLQotCWVlcHJvbS5kYXRhID0gZGV2OwotCWVlcHJvbS5yZWdpc3Rlcl9yZWFkID0gcnRsODE4N19lZXByb21fcmVnaXN0ZXJfcmVhZDsKLQllZXByb20ucmVnaXN0ZXJfd3JpdGUgPSBydGw4MTg3X2VlcHJvbV9yZWdpc3Rlcl93cml0ZTsKLQlpZiAocnRsODE4eF9pb3JlYWQzMihwcml2LCAmcHJpdi0+bWFwLT5SWF9DT05GKSAmICgxIDw8IDYpKQotCQllZXByb20ud2lkdGggPSBQQ0lfRUVQUk9NX1dJRFRIXzkzQzY2OwotCWVsc2UKLQkJZWVwcm9tLndpZHRoID0gUENJX0VFUFJPTV9XSURUSF85M0M0NjsKLQotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCwgUlRMODE4WF9FRVBST01fQ01EX0NPTkZJRyk7Ci0JdWRlbGF5KDEwKTsKLQotCWVlcHJvbV85M2N4Nl9tdWx0aXJlYWQoJmVlcHJvbSwgUlRMODE4N19FRVBST01fTUFDX0FERFIsCi0JCQkgICAgICAgKF9fbGUxNiBfX2ZvcmNlICopbWFjX2FkZHIsIDMpOwotCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihtYWNfYWRkcikpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAicnRsODE4NzogSW52YWxpZCBod2FkZHIhIFVzaW5nIHJhbmRvbWx5ICIKLQkJICAgICAgICJnZW5lcmF0ZWQgTUFDIGFkZHJlc3NcbiIpOwotCQlyYW5kb21fZXRoZXJfYWRkcihtYWNfYWRkcik7Ci0JfQotCVNFVF9JRUVFODAyMTFfUEVSTV9BRERSKGRldiwgbWFjX2FkZHIpOwotCi0JY2hhbm5lbCA9IHByaXYtPmNoYW5uZWxzOwotCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKLQkJZWVwcm9tXzkzY3g2X3JlYWQoJmVlcHJvbSwgUlRMODE4N19FRVBST01fVFhQV1JfQ0hBTl8xICsgaSwKLQkJCQkgICZ0eHB3cik7Ci0JCSgqY2hhbm5lbCsrKS5od192YWx1ZSA9IHR4cHdyICYgMHhGRjsKLQkJKCpjaGFubmVsKyspLmh3X3ZhbHVlID0gdHhwd3IgPj4gODsKLQl9Ci0JZm9yIChpID0gMDsgaSA8IDI7IGkrKykgewotCQllZXByb21fOTNjeDZfcmVhZCgmZWVwcm9tLCBSVEw4MTg3X0VFUFJPTV9UWFBXUl9DSEFOXzQgKyBpLAotCQkJCSAgJnR4cHdyKTsKLQkJKCpjaGFubmVsKyspLmh3X3ZhbHVlID0gdHhwd3IgJiAweEZGOwotCQkoKmNoYW5uZWwrKykuaHdfdmFsdWUgPSB0eHB3ciA+PiA4OwotCX0KLQotCWVlcHJvbV85M2N4Nl9yZWFkKCZlZXByb20sIFJUTDgxODdfRUVQUk9NX1RYUFdSX0JBU0UsCi0JCQkgICZwcml2LT50eHB3cl9iYXNlKTsKLQotCXJlZyA9IHJ0bDgxOHhfaW9yZWFkOChwcml2LCAmcHJpdi0+bWFwLT5QR1NFTEVDVCkgJiB+MTsKLQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPlBHU0VMRUNULCByZWcgfCAxKTsKLQkvKiAwIG1lYW5zIGFzaWMgQi1jdXQsIHdlIHNob3VsZCB1c2UgU1cgMyB3aXJlCi0JICogYml0LWJ5LWJpdCBiYW5naW5nIGZvciByYWRpby4gMSBtZWFucyB3ZSBjYW4gdXNlCi0JICogVVNCIHNwZWNpZmljIHJlcXVlc3QgdG8gd3JpdGUgcmFkaW8gcmVnaXN0ZXJzICovCi0JcHJpdi0+YXNpY19yZXYgPSBydGw4MTh4X2lvcmVhZDgocHJpdiwgKHU4ICopMHhGRkZFKSAmIDB4MzsKLQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPlBHU0VMRUNULCByZWcpOwotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCwgUlRMODE4WF9FRVBST01fQ01EX05PUk1BTCk7Ci0KLQlpZiAoIXByaXYtPmlzX3J0bDgxODdiKSB7Ci0JCXUzMiByZWczMjsKLQkJcmVnMzIgPSBydGw4MTh4X2lvcmVhZDMyKHByaXYsICZwcml2LT5tYXAtPlRYX0NPTkYpOwotCQlyZWczMiAmPSBSVEw4MThYX1RYX0NPTkZfSFdWRVJfTUFTSzsKLQkJc3dpdGNoIChyZWczMikgewotCQljYXNlIFJUTDgxOFhfVFhfQ09ORl9SODE4N3ZEX0I6Ci0JCQkvKiBTb21lIFJUTDgxODdCIGRldmljZXMgaGF2ZSBhIFVTQiBJRCBvZiAweDgxODcKLQkJCSAqIGRldGVjdCB0aGVtIGhlcmUgKi8KLQkJCWNoaXBfbmFtZSA9ICJSVEw4MTg3QnZCKGVhcmx5KSI7Ci0JCQlwcml2LT5pc19ydGw4MTg3YiA9IDE7Ci0JCQlwcml2LT5od19yZXYgPSBSVEw4MTg3QnZCOwotCQkJYnJlYWs7Ci0JCWNhc2UgUlRMODE4WF9UWF9DT05GX1I4MTg3dkQ6Ci0JCQljaGlwX25hbWUgPSAiUlRMODE4N3ZEIjsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJY2hpcF9uYW1lID0gIlJUTDgxODd2QiAoZGVmYXVsdCkiOwotCQl9Ci0gICAgICAgfSBlbHNlIHsKLQkJLyoKLQkJICogRm9yY2UgVVNCIHJlcXVlc3QgdG8gd3JpdGUgcmFkaW8gcmVnaXN0ZXJzIGZvciA4MTg3QiwgUmVhbHRlawotCQkgKiBvbmx5IHVzZXMgaXQgaW4gdGhlaXIgc291cmNlcwotCQkgKi8KLQkJLyppZiAocHJpdi0+YXNpY19yZXYgPT0gMCkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAicnRsODE4NzogRm9yY2luZyB1c2Ugb2YgVVNCICIKLQkJCSAgICAgICAicmVxdWVzdHMgdG8gd3JpdGUgdG8gcmFkaW8gcmVnaXN0ZXJzXG4iKTsKLQkJCXByaXYtPmFzaWNfcmV2ID0gMTsKLQkJfSovCi0JCXN3aXRjaCAocnRsODE4eF9pb3JlYWQ4KHByaXYsICh1OCAqKTB4RkZFMSkpIHsKLQkJY2FzZSBSVEw4MThYX1I4MTg3Ql9COgotCQkJY2hpcF9uYW1lID0gIlJUTDgxODdCdkIiOwotCQkJcHJpdi0+aHdfcmV2ID0gUlRMODE4N0J2QjsKLQkJCWJyZWFrOwotCQljYXNlIFJUTDgxOFhfUjgxODdCX0Q6Ci0JCQljaGlwX25hbWUgPSAiUlRMODE4N0J2RCI7Ci0JCQlwcml2LT5od19yZXYgPSBSVEw4MTg3QnZEOwotCQkJYnJlYWs7Ci0JCWNhc2UgUlRMODE4WF9SODE4N0JfRToKLQkJCWNoaXBfbmFtZSA9ICJSVEw4MTg3QnZFIjsKLQkJCXByaXYtPmh3X3JldiA9IFJUTDgxODdCdkU7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWNoaXBfbmFtZSA9ICJSVEw4MTg3QnZCIChkZWZhdWx0KSI7Ci0JCQlwcml2LT5od19yZXYgPSBSVEw4MTg3QnZCOwotCQl9Ci0JfQotCi0JaWYgKCFwcml2LT5pc19ydGw4MTg3YikgewotCQlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7Ci0JCQllZXByb21fOTNjeDZfcmVhZCgmZWVwcm9tLAotCQkJCQkgIFJUTDgxODdfRUVQUk9NX1RYUFdSX0NIQU5fNiArIGksCi0JCQkJCSAgJnR4cHdyKTsKLQkJCSgqY2hhbm5lbCsrKS5od192YWx1ZSA9IHR4cHdyICYgMHhGRjsKLQkJCSgqY2hhbm5lbCsrKS5od192YWx1ZSA9IHR4cHdyID4+IDg7Ci0JCX0KLQl9IGVsc2UgewotCQllZXByb21fOTNjeDZfcmVhZCgmZWVwcm9tLCBSVEw4MTg3X0VFUFJPTV9UWFBXUl9DSEFOXzYsCi0JCQkJICAmdHhwd3IpOwotCQkoKmNoYW5uZWwrKykuaHdfdmFsdWUgPSB0eHB3ciAmIDB4RkY7Ci0KLQkJZWVwcm9tXzkzY3g2X3JlYWQoJmVlcHJvbSwgMHgwQSwgJnR4cHdyKTsKLQkJKCpjaGFubmVsKyspLmh3X3ZhbHVlID0gdHhwd3IgJiAweEZGOwotCi0JCWVlcHJvbV85M2N4Nl9yZWFkKCZlZXByb20sIDB4MUMsICZ0eHB3cik7Ci0JCSgqY2hhbm5lbCsrKS5od192YWx1ZSA9IHR4cHdyICYgMHhGRjsKLQkJKCpjaGFubmVsKyspLmh3X3ZhbHVlID0gdHhwd3IgPj4gODsKLQl9Ci0JLyogSGFuZGxlIHRoZSBkaWZmZXJpbmcgcmZraWxsIEdQSU8gYml0IGluIGRpZmZlcmVudCBtb2RlbHMgKi8KLQlwcml2LT5yZmtpbGxfbWFzayA9IFJGS0lMTF9NQVNLXzgxODdfODlfOTc7Ci0JaWYgKHByb2R1Y3RfaWQgPT0gMHg4MTk3IHx8IHByb2R1Y3RfaWQgPT0gMHg4MTk4KSB7Ci0JCWVlcHJvbV85M2N4Nl9yZWFkKCZlZXByb20sIFJUTDgxODdfRUVQUk9NX1NFTEVDVF9HUElPLCAmcmVnKTsKLQkJaWYgKHJlZyAmIDB4RkYwMCkKLQkJCXByaXYtPnJma2lsbF9tYXNrID0gUkZLSUxMX01BU0tfODE5ODsKLQl9Ci0KLQkvKgotCSAqIFhYWDogT25jZSB0aGlzIGRyaXZlciBzdXBwb3J0cyBhbnl0aGluZyB0aGF0IHJlcXVpcmVzCi0JICoJYmVhY29ucyBpdCBtdXN0IGltcGxlbWVudCBJRUVFODAyMTFfVFhfQ1RMX0FTU0lHTl9TRVEuCi0JICovCi0JZGV2LT53aXBoeS0+aW50ZXJmYWNlX21vZGVzID0gQklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pOwotCi0JaWYgKChpZC0+ZHJpdmVyX2luZm8gPT0gREVWSUNFX1JUTDgxODcpICYmIHByaXYtPmlzX3J0bDgxODdiKQotCQlwcmludGsoS0VSTl9JTkZPICJydGw4MTg3OiBpbmNvbnNpc3RlbmN5IGJldHdlZW4gaWQgd2l0aCBPRU0iCi0JCSAgICAgICAiIGluZm8hXG4iKTsKLQotCXByaXYtPnJmID0gcnRsODE4N19kZXRlY3RfcmYoZGV2KTsKLQlkZXYtPmV4dHJhX3R4X2hlYWRyb29tID0gKCFwcml2LT5pc19ydGw4MTg3YikgPwotCQkJCSAgc2l6ZW9mKHN0cnVjdCBydGw4MTg3X3R4X2hkcikgOgotCQkJCSAgc2l6ZW9mKHN0cnVjdCBydGw4MTg3Yl90eF9oZHIpOwotCWlmICghcHJpdi0+aXNfcnRsODE4N2IpCi0JCWRldi0+cXVldWVzID0gMTsKLQllbHNlCi0JCWRldi0+cXVldWVzID0gNDsKLQotCWVyciA9IGllZWU4MDIxMV9yZWdpc3Rlcl9odyhkZXYpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJydGw4MTg3OiBDYW5ub3QgcmVnaXN0ZXIgZGV2aWNlXG4iKTsKLQkJZ290byBlcnJfZnJlZV9kbWFidWY7Ci0JfQotCW11dGV4X2luaXQoJnByaXYtPmNvbmZfbXV0ZXgpOwotCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnByaXYtPmJfdHhfc3RhdHVzLnF1ZXVlKTsKLQotCXdpcGh5X2luZm8oZGV2LT53aXBoeSwgImh3YWRkciAlcE0sICVzIFYlZCArICVzLCByZmtpbGwgbWFzayAlZFxuIiwKLQkJICAgbWFjX2FkZHIsIGNoaXBfbmFtZSwgcHJpdi0+YXNpY19yZXYsIHByaXYtPnJmLT5uYW1lLAotCQkgICBwcml2LT5yZmtpbGxfbWFzayk7Ci0KLSNpZmRlZiBDT05GSUdfUlRMODE4N19MRURTCi0JZWVwcm9tXzkzY3g2X3JlYWQoJmVlcHJvbSwgMHgzRiwgJnJlZyk7Ci0JcmVnICY9IDB4RkY7Ci0JcnRsODE4N19sZWRzX2luaXQoZGV2LCByZWcpOwotI2VuZGlmCi0JcnRsODE4N19yZmtpbGxfaW5pdChkZXYpOwotCi0JcmV0dXJuIDA7Ci0KLSBlcnJfZnJlZV9kbWFidWY6Ci0Ja2ZyZWUocHJpdi0+aW9fZG1hYnVmKTsKLSBlcnJfZnJlZV9kZXY6Ci0JaWVlZTgwMjExX2ZyZWVfaHcoZGV2KTsKLQl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOwotCXVzYl9wdXRfZGV2KHVkZXYpOwotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBydGw4MTg3X2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKLQlzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2OwotCi0JaWYgKCFkZXYpCi0JCXJldHVybjsKLQotI2lmZGVmIENPTkZJR19SVEw4MTg3X0xFRFMKLQlydGw4MTg3X2xlZHNfZXhpdChkZXYpOwotI2VuZGlmCi0JcnRsODE4N19yZmtpbGxfZXhpdChkZXYpOwotCWllZWU4MDIxMV91bnJlZ2lzdGVyX2h3KGRldik7Ci0KLQlwcml2ID0gZGV2LT5wcml2OwotCXVzYl9yZXNldF9kZXZpY2UocHJpdi0+dWRldik7Ci0JdXNiX3B1dF9kZXYoaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKSk7Ci0Ja2ZyZWUocHJpdi0+aW9fZG1hYnVmKTsKLQlpZWVlODAyMTFfZnJlZV9odyhkZXYpOwotfQotCi1zdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgcnRsODE4N19kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gS0JVSUxEX01PRE5BTUUsCi0JLmlkX3RhYmxlCT0gcnRsODE4N190YWJsZSwKLQkucHJvYmUJCT0gcnRsODE4N19wcm9iZSwKLQkuZGlzY29ubmVjdAk9IF9fZGV2ZXhpdF9wKHJ0bDgxODdfZGlzY29ubmVjdCksCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBydGw4MTg3X2luaXQodm9pZCkKLXsKLQlyZXR1cm4gdXNiX3JlZ2lzdGVyKCZydGw4MTg3X2RyaXZlcik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBydGw4MTg3X2V4aXQodm9pZCkKLXsKLQl1c2JfZGVyZWdpc3RlcigmcnRsODE4N19kcml2ZXIpOwotfQotCi1tb2R1bGVfaW5pdChydGw4MTg3X2luaXQpOwotbW9kdWxlX2V4aXQocnRsODE4N19leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4N19sZWRzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODdfbGVkcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NjM3MzM3Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4N19sZWRzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNDUgKzAsMCBAQAotLyoKLSAqIExpbnV4IExFRCBkcml2ZXIgZm9yIFJUTDgxODcKLSAqCi0gKiBDb3B5cmlnaHQgMjAwOSBMYXJyeSBGaW5nZXIgPExhcnJ5LkZpbmdlckBsd2Zpbmdlci5uZXQ+Ci0gKgotICogQmFzZWQgb24gdGhlIExFRCBoYW5kbGluZyBpbiB0aGUgcjgxODcgZHJpdmVyLCB3aGljaCBpczoKLSAqIENvcHlyaWdodCAoYykgUmVhbHRlayBTZW1pY29uZHVjdG9yIENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhhbmtzIHRvIFJlYWx0ZWsgZm9yIHRoZWlyIHN1cHBvcnQhCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaWZkZWYgQ09ORklHX1JUTDgxODdfTEVEUwotCi0jaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+Ci0jaW5jbHVkZSA8bGludXgvdXNiLmg+Ci0jaW5jbHVkZSA8bGludXgvZWVwcm9tXzkzY3g2Lmg+Ci0KLSNpbmNsdWRlICJydGw4MTg3LmgiCi0jaW5jbHVkZSAicnRsODE4N19sZWRzLmgiCi0KLXN0YXRpYyB2b2lkIGxlZF90dXJuX29uKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQkvKiBBcyB0aGlzIHJvdXRpbmUgZG9lcyByZWFkL3dyaXRlIG9wZXJhdGlvbnMgb24gdGhlIGhhcmR3YXJlLCBpdCBtdXN0Ci0JICogYmUgcnVuIGZyb20gYSB3b3JrIHF1ZXVlLgotCSAqLwotCXU4IHJlZzsKLQlzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBydGw4MTg3X3ByaXYsCi0JCQkJICAgIGxlZF9vbi53b3JrKTsKLQlzdHJ1Y3QgcnRsODE4N19sZWQgKmxlZCA9ICZwcml2LT5sZWRfdHg7Ci0KLQkvKiBEb24ndCBjaGFuZ2UgdGhlIExFRCwgd2hlbiB0aGUgZGV2aWNlIGlzIGRvd24uICovCi0JaWYgKCFwcml2LT52aWYgfHwgcHJpdi0+dmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEKQotCQlyZXR1cm4gOwotCi0JLyogU2tpcCBpZiB0aGUgTEVEIGlzIG5vdCByZWdpc3RlcmVkLiAqLwotCWlmICghbGVkLT5kZXYpCi0JCXJldHVybjsKLQltdXRleF9sb2NrKCZwcml2LT5jb25mX211dGV4KTsKLQlzd2l0Y2ggKGxlZC0+bGVkcGluKSB7Ci0JY2FzZSBMRURfUElOX0dQSU8wOgotCQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkdQSU8wLCAweDAxKTsKLQkJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5HUF9FTkFCTEUsIDB4MDApOwotCQlicmVhazsKLQljYXNlIExFRF9QSU5fTEVEMDoKLQkJcmVnID0gcnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPlBHU0VMRUNUKSAmIH4oMSA8PCA0KTsKLQkJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5QR1NFTEVDVCwgcmVnKTsKLQkJYnJlYWs7Ci0JY2FzZSBMRURfUElOX0xFRDE6Ci0JCXJlZyA9IHJ0bDgxOHhfaW9yZWFkOChwcml2LCAmcHJpdi0+bWFwLT5QR1NFTEVDVCkgJiB+KDEgPDwgNSk7Ci0JCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+UEdTRUxFQ1QsIHJlZyk7Ci0JCWJyZWFrOwotCWNhc2UgTEVEX1BJTl9IVzoKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZwcml2LT5jb25mX211dGV4KTsKLX0KLQotc3RhdGljIHZvaWQgbGVkX3R1cm5fb2ZmKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQkvKiBBcyB0aGlzIHJvdXRpbmUgZG9lcyByZWFkL3dyaXRlIG9wZXJhdGlvbnMgb24gdGhlIGhhcmR3YXJlLCBpdCBtdXN0Ci0JICogYmUgcnVuIGZyb20gYSB3b3JrIHF1ZXVlLgotCSAqLwotCXU4IHJlZzsKLQlzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBydGw4MTg3X3ByaXYsCi0JCQkJICAgIGxlZF9vZmYud29yayk7Ci0Jc3RydWN0IHJ0bDgxODdfbGVkICpsZWQgPSAmcHJpdi0+bGVkX3R4OwotCi0JLyogRG9uJ3QgY2hhbmdlIHRoZSBMRUQsIHdoZW4gdGhlIGRldmljZSBpcyBkb3duLiAqLwotCWlmICghcHJpdi0+dmlmIHx8IHByaXYtPnZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9VTlNQRUNJRklFRCkKLQkJcmV0dXJuIDsKLQotCS8qIFNraXAgaWYgdGhlIExFRCBpcyBub3QgcmVnaXN0ZXJlZC4gKi8KLQlpZiAoIWxlZC0+ZGV2KQotCQlyZXR1cm47Ci0JbXV0ZXhfbG9jaygmcHJpdi0+Y29uZl9tdXRleCk7Ci0Jc3dpdGNoIChsZWQtPmxlZHBpbikgewotCWNhc2UgTEVEX1BJTl9HUElPMDoKLQkJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5HUElPMCwgMHgwMSk7Ci0JCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+R1BfRU5BQkxFLCAweDAxKTsKLQkJYnJlYWs7Ci0JY2FzZSBMRURfUElOX0xFRDA6Ci0JCXJlZyA9IHJ0bDgxOHhfaW9yZWFkOChwcml2LCAmcHJpdi0+bWFwLT5QR1NFTEVDVCkgfCAoMSA8PCA0KTsKLQkJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5QR1NFTEVDVCwgcmVnKTsKLQkJYnJlYWs7Ci0JY2FzZSBMRURfUElOX0xFRDE6Ci0JCXJlZyA9IHJ0bDgxOHhfaW9yZWFkOChwcml2LCAmcHJpdi0+bWFwLT5QR1NFTEVDVCkgfCAoMSA8PCA1KTsKLQkJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5QR1NFTEVDVCwgcmVnKTsKLQkJYnJlYWs7Ci0JY2FzZSBMRURfUElOX0hXOgotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLQltdXRleF91bmxvY2soJnByaXYtPmNvbmZfbXV0ZXgpOwotfQotCi0vKiBDYWxsYmFjayBmcm9tIHRoZSBMRUQgc3Vic3lzdGVtLiAqLwotc3RhdGljIHZvaWQgcnRsODE4N19sZWRfYnJpZ2h0bmVzc19zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2RldiwKLQkJCQkgICBlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpCi17Ci0Jc3RydWN0IHJ0bDgxODdfbGVkICpsZWQgPSBjb250YWluZXJfb2YobGVkX2Rldiwgc3RydWN0IHJ0bDgxODdfbGVkLAotCQkJCQkgICAgICAgbGVkX2Rldik7Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBsZWQtPmRldjsKLQlzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2OwotCXN0YXRpYyBib29sIHJhZGlvX29uOwotCi0JaWYgKCFodykKLQkJcmV0dXJuOwotCXByaXYgPSBody0+cHJpdjsKLQlpZiAobGVkLT5pc19yYWRpbykgewotCQlpZiAoYnJpZ2h0bmVzcyA9PSBMRURfRlVMTCkgewotCQkJaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayhodywgJnByaXYtPmxlZF9vbiwgMCk7Ci0JCQlyYWRpb19vbiA9IHRydWU7Ci0JCX0gZWxzZSBpZiAocmFkaW9fb24pIHsKLQkJCXJhZGlvX29uID0gZmFsc2U7Ci0JCQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnByaXYtPmxlZF9vbik7Ci0JCQlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKGh3LCAmcHJpdi0+bGVkX29mZiwgMCk7Ci0JCX0KLQl9IGVsc2UgaWYgKHJhZGlvX29uKSB7Ci0JCWlmIChicmlnaHRuZXNzID09IExFRF9PRkYpIHsKLQkJCWllZWU4MDIxMV9xdWV1ZV9kZWxheWVkX3dvcmsoaHcsICZwcml2LT5sZWRfb2ZmLCAwKTsKLQkJCS8qIFRoZSBMRUQgaXMgb2ZmIGZvciAxLzIwIHNlYyAtIGl0IGp1c3QgYmxpbmtzLiAqLwotCQkJaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayhodywgJnByaXYtPmxlZF9vbiwKLQkJCQkJCSAgICAgSFogLyAyMCk7Ci0JCX0gZWxzZQotCQkJaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayhodywgJnByaXYtPmxlZF9vbiwgMCk7Ci0JfQotfQotCi1zdGF0aWMgaW50IHJ0bDgxODdfcmVnaXN0ZXJfbGVkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKLQkJCQlzdHJ1Y3QgcnRsODE4N19sZWQgKmxlZCwgY29uc3QgY2hhciAqbmFtZSwKLQkJCQljb25zdCBjaGFyICpkZWZhdWx0X3RyaWdnZXIsIHU4IGxlZHBpbiwKLQkJCQlib29sIGlzX3JhZGlvKQotewotCWludCBlcnI7Ci0Jc3RydWN0IHJ0bDgxODdfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKLQotCWlmIChsZWQtPmRldikKLQkJcmV0dXJuIC1FRVhJU1Q7Ci0JaWYgKCFkZWZhdWx0X3RyaWdnZXIpCi0JCXJldHVybiAtRUlOVkFMOwotCWxlZC0+ZGV2ID0gZGV2OwotCWxlZC0+bGVkcGluID0gbGVkcGluOwotCWxlZC0+aXNfcmFkaW8gPSBpc19yYWRpbzsKLQlzdHJuY3B5KGxlZC0+bmFtZSwgbmFtZSwgc2l6ZW9mKGxlZC0+bmFtZSkpOwotCi0JbGVkLT5sZWRfZGV2Lm5hbWUgPSBsZWQtPm5hbWU7Ci0JbGVkLT5sZWRfZGV2LmRlZmF1bHRfdHJpZ2dlciA9IGRlZmF1bHRfdHJpZ2dlcjsKLQlsZWQtPmxlZF9kZXYuYnJpZ2h0bmVzc19zZXQgPSBydGw4MTg3X2xlZF9icmlnaHRuZXNzX3NldDsKLQotCWVyciA9IGxlZF9jbGFzc2Rldl9yZWdpc3RlcigmcHJpdi0+dWRldi0+ZGV2LCAmbGVkLT5sZWRfZGV2KTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIkxFRHM6IEZhaWxlZCB0byByZWdpc3RlciAlc1xuIiwgbmFtZSk7Ci0JCWxlZC0+ZGV2ID0gTlVMTDsKLQkJcmV0dXJuIGVycjsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHJ0bDgxODdfdW5yZWdpc3Rlcl9sZWQoc3RydWN0IHJ0bDgxODdfbGVkICpsZWQpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBsZWQtPmRldjsKLQlzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2ID0gaHctPnByaXY7Ci0KLQlsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcigmbGVkLT5sZWRfZGV2KTsKLQlmbHVzaF9kZWxheWVkX3dvcmsoJnByaXYtPmxlZF9vZmYpOwotCWxlZC0+ZGV2ID0gTlVMTDsKLX0KLQotdm9pZCBydGw4MTg3X2xlZHNfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHUxNiBjdXN0aWQpCi17Ci0Jc3RydWN0IHJ0bDgxODdfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKLQljaGFyIG5hbWVbUlRMODE4N19MRURfTUFYX05BTUVfTEVOICsgMV07Ci0JdTggbGVkcGluOwotCWludCBlcnI7Ci0KLQkvKiBBY2NvcmRpbmcgdG8gdGhlIHZlbmRvciBkcml2ZXIsIHRoZSBMRUQgb3BlcmF0aW9uIGRlcGVuZHMgb24gdGhlCi0JICogY3VzdG9tZXIgSUQgZW5jb2RlZCBpbiB0aGUgRUVQUk9NCi0JICovCi0JcHJpbnRrKEtFUk5fSU5GTyAicnRsODE4NzogQ3VzdG9tZXIgSUQgaXMgMHglMDJYXG4iLCBjdXN0aWQpOwotCXN3aXRjaCAoY3VzdGlkKSB7Ci0JY2FzZSBFRVBST01fQ0lEX1JTVkQwOgotCWNhc2UgRUVQUk9NX0NJRF9SU1ZEMToKLQljYXNlIEVFUFJPTV9DSURfU0VSQ09NTV9QUzoKLQljYXNlIEVFUFJPTV9DSURfUU1JOgotCWNhc2UgRUVQUk9NX0NJRF9ERUxMOgotCWNhc2UgRUVQUk9NX0NJRF9UT1NISUJBOgotCQlsZWRwaW4gPSBMRURfUElOX0dQSU8wOwotCQlicmVhazsKLQljYXNlIEVFUFJPTV9DSURfQUxQSEEwOgotCQlsZWRwaW4gPSBMRURfUElOX0xFRDA7Ci0JCWJyZWFrOwotCWNhc2UgRUVQUk9NX0NJRF9IVzoKLQkJbGVkcGluID0gTEVEX1BJTl9IVzsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJbGVkcGluID0gTEVEX1BJTl9HUElPMDsKLQl9Ci0KLQlJTklUX0RFTEFZRURfV09SSygmcHJpdi0+bGVkX29uLCBsZWRfdHVybl9vbik7Ci0JSU5JVF9ERUxBWUVEX1dPUksoJnByaXYtPmxlZF9vZmYsIGxlZF90dXJuX29mZik7Ci0KLQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksCi0JCSAicnRsODE4Ny0lczo6cmFkaW8iLCB3aXBoeV9uYW1lKGRldi0+d2lwaHkpKTsKLQllcnIgPSBydGw4MTg3X3JlZ2lzdGVyX2xlZChkZXYsICZwcml2LT5sZWRfcmFkaW8sIG5hbWUsCi0JCQkgaWVlZTgwMjExX2dldF9yYWRpb19sZWRfbmFtZShkZXYpLCBsZWRwaW4sIHRydWUpOwotCWlmIChlcnIpCi0JCXJldHVybjsKLQotCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwKLQkJICJydGw4MTg3LSVzOjp0eCIsIHdpcGh5X25hbWUoZGV2LT53aXBoeSkpOwotCWVyciA9IHJ0bDgxODdfcmVnaXN0ZXJfbGVkKGRldiwgJnByaXYtPmxlZF90eCwgbmFtZSwKLQkJCSBpZWVlODAyMTFfZ2V0X3R4X2xlZF9uYW1lKGRldiksIGxlZHBpbiwgZmFsc2UpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX3R4OwotCi0Jc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLAotCQkgInJ0bDgxODctJXM6OnJ4Iiwgd2lwaHlfbmFtZShkZXYtPndpcGh5KSk7Ci0JZXJyID0gcnRsODE4N19yZWdpc3Rlcl9sZWQoZGV2LCAmcHJpdi0+bGVkX3J4LCBuYW1lLAotCQkJIGllZWU4MDIxMV9nZXRfcnhfbGVkX25hbWUoZGV2KSwgbGVkcGluLCBmYWxzZSk7Ci0JaWYgKCFlcnIpCi0JCXJldHVybjsKLQotCS8qIHJlZ2lzdHJhdGlvbiBvZiBSWCBMRUQgZmFpbGVkIC0gdW5yZWdpc3RlciAqLwotCXJ0bDgxODdfdW5yZWdpc3Rlcl9sZWQoJnByaXYtPmxlZF90eCk7Ci1lcnJfdHg6Ci0JcnRsODE4N191bnJlZ2lzdGVyX2xlZCgmcHJpdi0+bGVkX3JhZGlvKTsKLX0KLQotdm9pZCBydGw4MTg3X2xlZHNfZXhpdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCi17Ci0Jc3RydWN0IHJ0bDgxODdfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKLQotCXJ0bDgxODdfdW5yZWdpc3Rlcl9sZWQoJnByaXYtPmxlZF9yYWRpbyk7Ci0JcnRsODE4N191bnJlZ2lzdGVyX2xlZCgmcHJpdi0+bGVkX3J4KTsKLQlydGw4MTg3X3VucmVnaXN0ZXJfbGVkKCZwcml2LT5sZWRfdHgpOwotCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcHJpdi0+bGVkX29mZik7Ci0JY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZwcml2LT5sZWRfb24pOwotfQotI2VuZGlmIC8qIGRlZiBDT05GSUdfUlRMODE4N19MRURTICovCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4N19yZmtpbGwuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4N19yZmtpbGwuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDM1NTVlMS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODdfcmZraWxsLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKgotICogTGludXggUkZLSUxMIHN1cHBvcnQgZm9yIFJUTDgxODcKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgSGVydG9uIFJvbmFsZG8gS3J6ZXNpbnNraSA8aGVydG9uQG1hbmRyaXZhLmNvbS5icj4KLSAqCi0gKiBCYXNlZCBvbiB0aGUgUkZLSUxMIGhhbmRsaW5nIGluIHRoZSByODE4NyBkcml2ZXIsIHdoaWNoIGlzOgotICogQ29weXJpZ2h0IChjKSBSZWFsdGVrIFNlbWljb25kdWN0b3IgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGFua3MgdG8gUmVhbHRlayBmb3IgdGhlaXIgc3VwcG9ydCEKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgotI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgotCi0jaW5jbHVkZSAicnRsODE4Ny5oIgotI2luY2x1ZGUgInJ0bDgxODdfcmZraWxsLmgiCi0KLXN0YXRpYyBib29sIHJ0bDgxODdfaXNfcmFkaW9fZW5hYmxlZChzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2KQotewotCXU4IGdwaW87Ci0KLQlncGlvID0gcnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPkdQSU8wKTsKLQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkdQSU8wLCBncGlvICYgfnByaXYtPnJma2lsbF9tYXNrKTsKLQlncGlvID0gcnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPkdQSU8xKTsKLQotCXJldHVybiBncGlvICYgcHJpdi0+cmZraWxsX21hc2s7Ci19Ci0KLXZvaWQgcnRsODE4N19yZmtpbGxfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKLXsKLQlzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2ID0gaHctPnByaXY7Ci0KLQlwcml2LT5yZmtpbGxfb2ZmID0gcnRsODE4N19pc19yYWRpb19lbmFibGVkKHByaXYpOwotCXByaW50ayhLRVJOX0lORk8gInJ0bDgxODc6IHdpcmVsZXNzIHN3aXRjaCBpcyAlc1xuIiwKLQkgICAgICAgcHJpdi0+cmZraWxsX29mZiA/ICJvbiIgOiAib2ZmIik7Ci0Jd2lwaHlfcmZraWxsX3NldF9od19zdGF0ZShody0+d2lwaHksICFwcml2LT5yZmtpbGxfb2ZmKTsKLQl3aXBoeV9yZmtpbGxfc3RhcnRfcG9sbGluZyhody0+d2lwaHkpOwotfQotCi12b2lkIHJ0bDgxODdfcmZraWxsX3BvbGwoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCi17Ci0JYm9vbCBlbmFibGVkOwotCXN0cnVjdCBydGw4MTg3X3ByaXYgKnByaXYgPSBody0+cHJpdjsKLQotCW11dGV4X2xvY2soJnByaXYtPmNvbmZfbXV0ZXgpOwotCWVuYWJsZWQgPSBydGw4MTg3X2lzX3JhZGlvX2VuYWJsZWQocHJpdik7Ci0JaWYgKHVubGlrZWx5KGVuYWJsZWQgIT0gcHJpdi0+cmZraWxsX29mZikpIHsKLQkJcHJpdi0+cmZraWxsX29mZiA9IGVuYWJsZWQ7Ci0JCXByaW50ayhLRVJOX0lORk8gInJ0bDgxODc6IHdpcmVsZXNzIHJhZGlvIHN3aXRjaCB0dXJuZWQgJXNcbiIsCi0JCSAgICAgICBlbmFibGVkID8gIm9uIiA6ICJvZmYiKTsKLQkJd2lwaHlfcmZraWxsX3NldF9od19zdGF0ZShody0+d2lwaHksICFlbmFibGVkKTsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZwcml2LT5jb25mX211dGV4KTsKLX0KLQotdm9pZCBydGw4MTg3X3Jma2lsbF9leGl0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQotewotCXdpcGh5X3Jma2lsbF9zdG9wX3BvbGxpbmcoaHctPndpcGh5KTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4N19ydGw4MjI1LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODdfcnRsODIyNS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2VlYmRjLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4N19ydGw4MjI1LmMKKysrIC9kZXYvbnVsbApAQCAtMSw5ODMgKzAsMCBAQAotLyoKLSAqIFJhZGlvIHR1bmluZyBmb3IgUlRMODIyNSBvbiBSVEw4MTg3Ci0gKgotICogQ29weXJpZ2h0IDIwMDcgTWljaGFlbCBXdSA8ZmxhbWluZ2ljZUBzb3VybWlsay5uZXQ+Ci0gKiBDb3B5cmlnaHQgMjAwNyBBbmRyZWEgTWVyZWxsbyA8YW5kcmVhbXJsQHRpc2NhbGkuaXQ+Ci0gKgotICogQmFzZWQgb24gdGhlIHI4MTg3IGRyaXZlciwgd2hpY2ggaXM6Ci0gKiBDb3B5cmlnaHQgMjAwNSBBbmRyZWEgTWVyZWxsbyA8YW5kcmVhbXJsQHRpc2NhbGkuaXQ+LCBldCBhbC4KLSAqCi0gKiBNYWdpYyBkZWxheXMsIHJlZ2lzdGVyIG9mZnNldHMsIGFuZCBwaHkgdmFsdWUgdGFibGVzIGJlbG93IGFyZQotICogdGFrZW4gZnJvbSB0aGUgb3JpZ2luYWwgcjgxODcgZHJpdmVyIHNvdXJjZXMuICBUaGFua3MgdG8gUmVhbHRlawotICogZm9yIHRoZWlyIHN1cHBvcnQhCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgotI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgotCi0jaW5jbHVkZSAicnRsODE4Ny5oIgotI2luY2x1ZGUgInJ0bDgxODdfcnRsODIyNS5oIgotCi1zdGF0aWMgdm9pZCBydGw4MjI1X3dyaXRlX2JpdGJhbmcoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCB1OCBhZGRyLCB1MTYgZGF0YSkKLXsKLQlzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2ID0gZGV2LT5wcml2OwotCXUxNiByZWc4MCwgcmVnODQsIHJlZzgyOwotCXUzMiBiYW5nZGF0YTsKLQlpbnQgaTsKLQotCWJhbmdkYXRhID0gKGRhdGEgPDwgNCkgfCAoYWRkciAmIDB4Zik7Ci0KLQlyZWc4MCA9IHJ0bDgxOHhfaW9yZWFkMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zT3V0cHV0KSAmIDB4ZmZmMzsKLQlyZWc4MiA9IHJ0bDgxOHhfaW9yZWFkMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zRW5hYmxlKTsKLQotCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc0VuYWJsZSwgcmVnODIgfCAweDcpOwotCi0JcmVnODQgPSBydGw4MTh4X2lvcmVhZDE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc1NlbGVjdCk7Ci0JcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zU2VsZWN0LCByZWc4NCB8IDB4Nyk7Ci0JdWRlbGF5KDEwKTsKLQotCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc091dHB1dCwgcmVnODAgfCAoMSA8PCAyKSk7Ci0JdWRlbGF5KDIpOwotCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc091dHB1dCwgcmVnODApOwotCXVkZWxheSgxMCk7Ci0KLQlmb3IgKGkgPSAxNTsgaSA+PSAwOyBpLS0pIHsKLQkJdTE2IHJlZyA9IHJlZzgwIHwgKGJhbmdkYXRhICYgKDEgPDwgaSkpID4+IGk7Ci0KLQkJaWYgKGkgJiAxKQotCQkJcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zT3V0cHV0LCByZWcpOwotCi0JCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc091dHB1dCwgcmVnIHwgKDEgPDwgMSkpOwotCQlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNPdXRwdXQsIHJlZyB8ICgxIDw8IDEpKTsKLQotCQlpZiAoIShpICYgMSkpCi0JCQlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNPdXRwdXQsIHJlZyk7Ci0JfQotCi0JcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zT3V0cHV0LCByZWc4MCB8ICgxIDw8IDIpKTsKLQl1ZGVsYXkoMTApOwotCi0JcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zT3V0cHV0LCByZWc4MCB8ICgxIDw8IDIpKTsKLQlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNTZWxlY3QsIHJlZzg0KTsKLX0KLQotc3RhdGljIHZvaWQgcnRsODIyNV93cml0ZV84MDUxKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgdTggYWRkciwgX19sZTE2IGRhdGEpCi17Ci0Jc3RydWN0IHJ0bDgxODdfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKLQl1MTYgcmVnODAsIHJlZzgyLCByZWc4NDsKLQotCXJlZzgwID0gcnRsODE4eF9pb3JlYWQxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNPdXRwdXQpOwotCXJlZzgyID0gcnRsODE4eF9pb3JlYWQxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNFbmFibGUpOwotCXJlZzg0ID0gcnRsODE4eF9pb3JlYWQxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNTZWxlY3QpOwotCi0JcmVnODAgJj0gfigweDMgPDwgMik7Ci0JcmVnODQgJj0gfjB4RjsKLQotCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc0VuYWJsZSwgcmVnODIgfCAweDAwMDcpOwotCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc1NlbGVjdCwgcmVnODQgfCAweDAwMDcpOwotCXVkZWxheSgxMCk7Ci0KLQlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNPdXRwdXQsIHJlZzgwIHwgKDEgPDwgMikpOwotCXVkZWxheSgyKTsKLQotCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc091dHB1dCwgcmVnODApOwotCXVkZWxheSgxMCk7Ci0KLQltdXRleF9sb2NrKCZwcml2LT5pb19tdXRleCk7Ci0KLQlwcml2LT5pb19kbWFidWYtPmJpdHMxNiA9IGRhdGE7Ci0JdXNiX2NvbnRyb2xfbXNnKHByaXYtPnVkZXYsIHVzYl9zbmRjdHJscGlwZShwcml2LT51ZGV2LCAwKSwKLQkJCVJUTDgxODdfUkVRX1NFVF9SRUcsIFJUTDgxODdfUkVRVF9XUklURSwKLQkJCWFkZHIsIDB4ODIyNSwgJnByaXYtPmlvX2RtYWJ1Zi0+Yml0czE2LCBzaXplb2YoZGF0YSksCi0JCQlIWiAvIDIpOwotCi0JbXV0ZXhfdW5sb2NrKCZwcml2LT5pb19tdXRleCk7Ci0KLQlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNPdXRwdXQsIHJlZzgwIHwgKDEgPDwgMikpOwotCXVkZWxheSgxMCk7Ci0KLQlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNPdXRwdXQsIHJlZzgwIHwgKDEgPDwgMikpOwotCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc1NlbGVjdCwgcmVnODQpOwotfQotCi1zdGF0aWMgdm9pZCBydGw4MjI1X3dyaXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgdTggYWRkciwgdTE2IGRhdGEpCi17Ci0Jc3RydWN0IHJ0bDgxODdfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKLQotCWlmIChwcml2LT5hc2ljX3JldikKLQkJcnRsODIyNV93cml0ZV84MDUxKGRldiwgYWRkciwgY3B1X3RvX2xlMTYoZGF0YSkpOwotCWVsc2UKLQkJcnRsODIyNV93cml0ZV9iaXRiYW5nKGRldiwgYWRkciwgZGF0YSk7Ci19Ci0KLXN0YXRpYyB1MTYgcnRsODIyNV9yZWFkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgdTggYWRkcikKLXsKLQlzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2ID0gZGV2LT5wcml2OwotCXUxNiByZWc4MCwgcmVnODIsIHJlZzg0LCBvdXQ7Ci0JaW50IGk7Ci0KLQlyZWc4MCA9IHJ0bDgxOHhfaW9yZWFkMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zT3V0cHV0KTsKLQlyZWc4MiA9IHJ0bDgxOHhfaW9yZWFkMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zRW5hYmxlKTsKLQlyZWc4NCA9IHJ0bDgxOHhfaW9yZWFkMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zU2VsZWN0KTsKLQotCXJlZzgwICY9IH4weEY7Ci0KLQlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNFbmFibGUsIHJlZzgyIHwgMHgwMDBGKTsKLQlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNTZWxlY3QsIHJlZzg0IHwgMHgwMDBGKTsKLQotCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc091dHB1dCwgcmVnODAgfCAoMSA8PCAyKSk7Ci0JdWRlbGF5KDQpOwotCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc091dHB1dCwgcmVnODApOwotCXVkZWxheSg1KTsKLQotCWZvciAoaSA9IDQ7IGkgPj0gMDsgaS0tKSB7Ci0JCXUxNiByZWcgPSByZWc4MCB8ICgoYWRkciA+PiBpKSAmIDEpOwotCi0JCWlmICghKGkgJiAxKSkgewotCQkJcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zT3V0cHV0LCByZWcpOwotCQkJdWRlbGF5KDEpOwotCQl9Ci0KLQkJcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zT3V0cHV0LAotCQkJCSAgcmVnIHwgKDEgPDwgMSkpOwotCQl1ZGVsYXkoMik7Ci0JCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc091dHB1dCwKLQkJCQkgIHJlZyB8ICgxIDw8IDEpKTsKLQkJdWRlbGF5KDIpOwotCi0JCWlmIChpICYgMSkgewotCQkJcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zT3V0cHV0LCByZWcpOwotCQkJdWRlbGF5KDEpOwotCQl9Ci0JfQotCi0JcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zT3V0cHV0LAotCQkJICByZWc4MCB8ICgxIDw8IDMpIHwgKDEgPDwgMSkpOwotCXVkZWxheSgyKTsKLQlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNPdXRwdXQsCi0JCQkgIHJlZzgwIHwgKDEgPDwgMykpOwotCXVkZWxheSgyKTsKLQlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNPdXRwdXQsCi0JCQkgIHJlZzgwIHwgKDEgPDwgMykpOwotCXVkZWxheSgyKTsKLQotCW91dCA9IDA7Ci0JZm9yIChpID0gMTE7IGkgPj0gMDsgaS0tKSB7Ci0JCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc091dHB1dCwKLQkJCQkgIHJlZzgwIHwgKDEgPDwgMykpOwotCQl1ZGVsYXkoMSk7Ci0JCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc091dHB1dCwKLQkJCQkgIHJlZzgwIHwgKDEgPDwgMykgfCAoMSA8PCAxKSk7Ci0JCXVkZWxheSgyKTsKLQkJcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zT3V0cHV0LAotCQkJCSAgcmVnODAgfCAoMSA8PCAzKSB8ICgxIDw8IDEpKTsKLQkJdWRlbGF5KDIpOwotCQlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNPdXRwdXQsCi0JCQkJICByZWc4MCB8ICgxIDw8IDMpIHwgKDEgPDwgMSkpOwotCQl1ZGVsYXkoMik7Ci0KLQkJaWYgKHJ0bDgxOHhfaW9yZWFkMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zSW5wdXQpICYgKDEgPDwgMSkpCi0JCQlvdXQgfD0gMSA8PCBpOwotCi0JCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc091dHB1dCwKLQkJCQkgIHJlZzgwIHwgKDEgPDwgMykpOwotCQl1ZGVsYXkoMik7Ci0JfQotCi0JcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zT3V0cHV0LAotCQkJICByZWc4MCB8ICgxIDw8IDMpIHwgKDEgPDwgMikpOwotCXVkZWxheSgyKTsKLQotCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc0VuYWJsZSwgcmVnODIpOwotCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc1NlbGVjdCwgcmVnODQpOwotCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc091dHB1dCwgMHgwM0EwKTsKLQotCXJldHVybiBvdXQ7Ci19Ci0KLXN0YXRpYyBjb25zdCB1MTYgcnRsODIyNWJjZF9yeGdhaW5bXSA9IHsKLQkweDA0MDAsIDB4MDQwMSwgMHgwNDAyLCAweDA0MDMsIDB4MDQwNCwgMHgwNDA1LCAweDA0MDgsIDB4MDQwOSwKLQkweDA0MGEsIDB4MDQwYiwgMHgwNTAyLCAweDA1MDMsIDB4MDUwNCwgMHgwNTA1LCAweDA1NDAsIDB4MDU0MSwKLQkweDA1NDIsIDB4MDU0MywgMHgwNTQ0LCAweDA1NDUsIDB4MDU4MCwgMHgwNTgxLCAweDA1ODIsIDB4MDU4MywKLQkweDA1ODQsIDB4MDU4NSwgMHgwNTg4LCAweDA1ODksIDB4MDU4YSwgMHgwNThiLCAweDA2NDMsIDB4MDY0NCwKLQkweDA2NDUsIDB4MDY4MCwgMHgwNjgxLCAweDA2ODIsIDB4MDY4MywgMHgwNjg0LCAweDA2ODUsIDB4MDY4OCwKLQkweDA2ODksIDB4MDY4YSwgMHgwNjhiLCAweDA2OGMsIDB4MDc0MiwgMHgwNzQzLCAweDA3NDQsIDB4MDc0NSwKLQkweDA3ODAsIDB4MDc4MSwgMHgwNzgyLCAweDA3ODMsIDB4MDc4NCwgMHgwNzg1LCAweDA3ODgsIDB4MDc4OSwKLQkweDA3OGEsIDB4MDc4YiwgMHgwNzhjLCAweDA3OGQsIDB4MDc5MCwgMHgwNzkxLCAweDA3OTIsIDB4MDc5MywKLQkweDA3OTQsIDB4MDc5NSwgMHgwNzk4LCAweDA3OTksIDB4MDc5YSwgMHgwNzliLCAweDA3OWMsIDB4MDc5ZCwKLQkweDA3YTAsIDB4MDdhMSwgMHgwN2EyLCAweDA3YTMsIDB4MDdhNCwgMHgwN2E1LCAweDA3YTgsIDB4MDdhOSwKLQkweDA3YWEsIDB4MDdhYiwgMHgwN2FjLCAweDA3YWQsIDB4MDdiMCwgMHgwN2IxLCAweDA3YjIsIDB4MDdiMywKLQkweDA3YjQsIDB4MDdiNSwgMHgwN2I4LCAweDA3YjksIDB4MDdiYSwgMHgwN2JiLCAweDA3YmIKLX07Ci0KLXN0YXRpYyBjb25zdCB1OCBydGw4MjI1X2FnY1tdID0gewotCTB4OWUsIDB4OWUsIDB4OWUsIDB4OWUsIDB4OWUsIDB4OWUsIDB4OWUsIDB4OWUsCi0JMHg5ZCwgMHg5YywgMHg5YiwgMHg5YSwgMHg5OSwgMHg5OCwgMHg5NywgMHg5NiwKLQkweDk1LCAweDk0LCAweDkzLCAweDkyLCAweDkxLCAweDkwLCAweDhmLCAweDhlLAotCTB4OGQsIDB4OGMsIDB4OGIsIDB4OGEsIDB4ODksIDB4ODgsIDB4ODcsIDB4ODYsCi0JMHg4NSwgMHg4NCwgMHg4MywgMHg4MiwgMHg4MSwgMHg4MCwgMHgzZiwgMHgzZSwKLQkweDNkLCAweDNjLCAweDNiLCAweDNhLCAweDM5LCAweDM4LCAweDM3LCAweDM2LAotCTB4MzUsIDB4MzQsIDB4MzMsIDB4MzIsIDB4MzEsIDB4MzAsIDB4MmYsIDB4MmUsCi0JMHgyZCwgMHgyYywgMHgyYiwgMHgyYSwgMHgyOSwgMHgyOCwgMHgyNywgMHgyNiwKLQkweDI1LCAweDI0LCAweDIzLCAweDIyLCAweDIxLCAweDIwLCAweDFmLCAweDFlLAotCTB4MWQsIDB4MWMsIDB4MWIsIDB4MWEsIDB4MTksIDB4MTgsIDB4MTcsIDB4MTYsCi0JMHgxNSwgMHgxNCwgMHgxMywgMHgxMiwgMHgxMSwgMHgxMCwgMHgwZiwgMHgwZSwKLQkweDBkLCAweDBjLCAweDBiLCAweDBhLCAweDA5LCAweDA4LCAweDA3LCAweDA2LAotCTB4MDUsIDB4MDQsIDB4MDMsIDB4MDIsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsCi0JMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwKLQkweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLAotCTB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEKLX07Ci0KLXN0YXRpYyBjb25zdCB1OCBydGw4MjI1X2dhaW5bXSA9IHsKLQkweDIzLCAweDg4LCAweDdjLCAweGE1LAkvKiAtODJkQm0gKi8KLQkweDIzLCAweDg4LCAweDdjLCAweGI1LAkvKiAtODJkQm0gKi8KLQkweDIzLCAweDg4LCAweDdjLCAweGM1LAkvKiAtODJkQm0gKi8KLQkweDMzLCAweDgwLCAweDc5LCAweGM1LAkvKiAtNzhkQm0gKi8KLQkweDQzLCAweDc4LCAweDc2LCAweGM1LAkvKiAtNzRkQm0gKi8KLQkweDUzLCAweDYwLCAweDczLCAweGM1LAkvKiAtNzBkQm0gKi8KLQkweDYzLCAweDU4LCAweDcwLCAweGM1LAkvKiAtNjZkQm0gKi8KLX07Ci0KLXN0YXRpYyBjb25zdCB1OCBydGw4MjI1X3RocmVzaG9sZFtdID0gewotCTB4OGQsIDB4OGQsIDB4OGQsIDB4OGQsIDB4OWQsIDB4YWQsIDB4YmQKLX07Ci0KLXN0YXRpYyBjb25zdCB1OCBydGw4MjI1X3R4X2dhaW5fY2NrX29mZG1bXSA9IHsKLQkweDAyLCAweDA2LCAweDBlLCAweDFlLCAweDNlLCAweDdlCi19OwotCi1zdGF0aWMgY29uc3QgdTggcnRsODIyNV90eF9wb3dlcl9jY2tbXSA9IHsKLQkweDE4LCAweDE3LCAweDE1LCAweDExLCAweDBjLCAweDA4LCAweDA0LCAweDAyLAotCTB4MWIsIDB4MWEsIDB4MTcsIDB4MTMsIDB4MGUsIDB4MDksIDB4MDQsIDB4MDIsCi0JMHgxZiwgMHgxZSwgMHgxYSwgMHgxNSwgMHgxMCwgMHgwYSwgMHgwNSwgMHgwMiwKLQkweDIyLCAweDIxLCAweDFkLCAweDE4LCAweDExLCAweDBiLCAweDA2LCAweDAyLAotCTB4MjYsIDB4MjUsIDB4MjEsIDB4MWIsIDB4MTQsIDB4MGQsIDB4MDYsIDB4MDMsCi0JMHgyYiwgMHgyYSwgMHgyNSwgMHgxZSwgMHgxNiwgMHgwZSwgMHgwNywgMHgwMwotfTsKLQotc3RhdGljIGNvbnN0IHU4IHJ0bDgyMjVfdHhfcG93ZXJfY2NrX2NoMTRbXSA9IHsKLQkweDE4LCAweDE3LCAweDE1LCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MWIsIDB4MWEsIDB4MTcsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgxZiwgMHgxZSwgMHgxYSwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDIyLCAweDIxLCAweDFkLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MjYsIDB4MjUsIDB4MjEsIDB4MTMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgyYiwgMHgyYSwgMHgyNSwgMHgxNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMAotfTsKLQotc3RhdGljIGNvbnN0IHU4IHJ0bDgyMjVfdHhfcG93ZXJfb2ZkbVtdID0gewotCTB4ODAsIDB4OTAsIDB4YTIsIDB4YjUsIDB4Y2IsIDB4ZTQKLX07Ci0KLXN0YXRpYyBjb25zdCB1MzIgcnRsODIyNV9jaGFuW10gPSB7Ci0JMHgwODVjLCAweDA4ZGMsIDB4MDk1YywgMHgwOWRjLCAweDBhNWMsIDB4MGFkYywgMHgwYjVjLAotCTB4MGJkYywgMHgwYzVjLCAweDBjZGMsIDB4MGQ1YywgMHgwZGRjLCAweDBlNWMsIDB4MGY3MgotfTsKLQotc3RhdGljIHZvaWQgcnRsODIyNV9yZl9zZXRfdHhfcG93ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBpbnQgY2hhbm5lbCkKLXsKLQlzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2ID0gZGV2LT5wcml2OwotCXU4IGNja19wb3dlciwgb2ZkbV9wb3dlcjsKLQljb25zdCB1OCAqdG1wOwotCXUzMiByZWc7Ci0JaW50IGk7Ci0KLQljY2tfcG93ZXIgPSBwcml2LT5jaGFubmVsc1tjaGFubmVsIC0gMV0uaHdfdmFsdWUgJiAweEY7Ci0Jb2ZkbV9wb3dlciA9IHByaXYtPmNoYW5uZWxzW2NoYW5uZWwgLSAxXS5od192YWx1ZSA+PiA0OwotCi0JY2NrX3Bvd2VyID0gbWluKGNja19wb3dlciwgKHU4KTExKTsKLQlpZiAob2ZkbV9wb3dlciA+ICh1OCkxNSkKLQkJb2ZkbV9wb3dlciA9IDI1OwotCWVsc2UKLQkJb2ZkbV9wb3dlciArPSAxMDsKLQotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+VFhfR0FJTl9DQ0ssCi0JCQkgcnRsODIyNV90eF9nYWluX2Nja19vZmRtW2Nja19wb3dlciAvIDZdID4+IDEpOwotCi0JaWYgKGNoYW5uZWwgPT0gMTQpCi0JCXRtcCA9ICZydGw4MjI1X3R4X3Bvd2VyX2Nja19jaDE0WyhjY2tfcG93ZXIgJSA2KSAqIDhdOwotCWVsc2UKLQkJdG1wID0gJnJ0bDgyMjVfdHhfcG93ZXJfY2NrWyhjY2tfcG93ZXIgJSA2KSAqIDhdOwotCi0JZm9yIChpID0gMDsgaSA8IDg7IGkrKykKLQkJcnRsODIyNV93cml0ZV9waHlfY2NrKGRldiwgMHg0NCArIGksICp0bXArKyk7Ci0KLQltc2xlZXAoMSk7IC8vIEZJWE1FOiBvcHRpb25hbD8KLQotCS8qIGFuYXBhcmFtMiBvbiAqLwotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCwgUlRMODE4WF9FRVBST01fQ01EX0NPTkZJRyk7Ci0JcmVnID0gcnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPkNPTkZJRzMpOwotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+Q09ORklHMywKLQkJCXJlZyB8IFJUTDgxOFhfQ09ORklHM19BTkFQQVJBTV9XUklURSk7Ci0JcnRsODE4eF9pb3dyaXRlMzIocHJpdiwgJnByaXYtPm1hcC0+QU5BUEFSQU0yLAotCQkJICBSVEw4MTg3X1JUTDgyMjVfQU5BUEFSQU0yX09OKTsKLQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkNPTkZJRzMsCi0JCQlyZWcgJiB+UlRMODE4WF9DT05GSUczX0FOQVBBUkFNX1dSSVRFKTsKLQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQsIFJUTDgxOFhfRUVQUk9NX0NNRF9OT1JNQUwpOwotCi0JcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDIsIDB4NDIpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCA2LCAweDAwKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgOCwgMHgwMCk7Ci0KLQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPlRYX0dBSU5fT0ZETSwKLQkJCSBydGw4MjI1X3R4X2dhaW5fY2NrX29mZG1bb2ZkbV9wb3dlciAvIDZdID4+IDEpOwotCi0JdG1wID0gJnJ0bDgyMjVfdHhfcG93ZXJfb2ZkbVtvZmRtX3Bvd2VyICUgNl07Ci0KLQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgNSwgKnRtcCk7Ci0JcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDcsICp0bXApOwotCi0JbXNsZWVwKDEpOwotfQotCi1zdGF0aWMgdm9pZCBydGw4MjI1X3JmX2luaXQoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQotewotCXN0cnVjdCBydGw4MTg3X3ByaXYgKnByaXYgPSBkZXYtPnByaXY7Ci0JaW50IGk7Ci0KLQlydGw4MjI1X3dyaXRlKGRldiwgMHgwLCAweDA2Nyk7Ci0JcnRsODIyNV93cml0ZShkZXYsIDB4MSwgMHhGRTApOwotCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDIsIDB4NDREKTsKLQlydGw4MjI1X3dyaXRlKGRldiwgMHgzLCAweDQ0MSk7Ci0JcnRsODIyNV93cml0ZShkZXYsIDB4NCwgMHg0ODYpOwotCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDUsIDB4QkMwKTsKLQlydGw4MjI1X3dyaXRlKGRldiwgMHg2LCAweEFFNik7Ci0JcnRsODIyNV93cml0ZShkZXYsIDB4NywgMHg4MkEpOwotCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDgsIDB4MDFGKTsKLQlydGw4MjI1X3dyaXRlKGRldiwgMHg5LCAweDMzNCk7Ci0JcnRsODIyNV93cml0ZShkZXYsIDB4QSwgMHhGRDQpOwotCXJ0bDgyMjVfd3JpdGUoZGV2LCAweEIsIDB4MzkxKTsKLQlydGw4MjI1X3dyaXRlKGRldiwgMHhDLCAweDA1MCk7Ci0JcnRsODIyNV93cml0ZShkZXYsIDB4RCwgMHg2REIpOwotCXJ0bDgyMjVfd3JpdGUoZGV2LCAweEUsIDB4MDI5KTsKLQlydGw4MjI1X3dyaXRlKGRldiwgMHhGLCAweDkxNCk7IG1zbGVlcCgxMDApOwotCi0JcnRsODIyNV93cml0ZShkZXYsIDB4MiwgMHhDNEQpOyBtc2xlZXAoMjAwKTsKLQlydGw4MjI1X3dyaXRlKGRldiwgMHgyLCAweDQ0RCk7IG1zbGVlcCgyMDApOwotCi0JaWYgKCEocnRsODIyNV9yZWFkKGRldiwgNikgJiAoMSA8PCA3KSkpIHsKLQkJcnRsODIyNV93cml0ZShkZXYsIDB4MDIsIDB4MGM0ZCk7Ci0JCW1zbGVlcCgyMDApOwotCQlydGw4MjI1X3dyaXRlKGRldiwgMHgwMiwgMHgwNDRkKTsKLQkJbXNsZWVwKDEwMCk7Ci0JCWlmICghKHJ0bDgyMjVfcmVhZChkZXYsIDYpICYgKDEgPDwgNykpKQotCQkJd2lwaHlfd2FybihkZXYtPndpcGh5LCAiUkYgQ2FsaWJyYXRpb24gRmFpbGVkISAleFxuIiwKLQkJCQkgICBydGw4MjI1X3JlYWQoZGV2LCA2KSk7Ci0JfQotCi0JcnRsODIyNV93cml0ZShkZXYsIDB4MCwgMHgxMjcpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocnRsODIyNWJjZF9yeGdhaW4pOyBpKyspIHsKLQkJcnRsODIyNV93cml0ZShkZXYsIDB4MSwgaSArIDEpOwotCQlydGw4MjI1X3dyaXRlKGRldiwgMHgyLCBydGw4MjI1YmNkX3J4Z2FpbltpXSk7Ci0JfQotCi0JcnRsODIyNV93cml0ZShkZXYsIDB4MCwgMHgwMjcpOwotCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDAsIDB4MjJGKTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJ0bDgyMjVfYWdjKTsgaSsrKSB7Ci0JCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweEIsIHJ0bDgyMjVfYWdjW2ldKTsKLQkJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4QSwgMHg4MCArIGkpOwotCX0KLQotCW1zbGVlcCgxKTsKLQotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDAwLCAweDAxKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgwMSwgMHgwMik7Ci0JcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MDIsIDB4NDIpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDAzLCAweDAwKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgwNCwgMHgwMCk7Ci0JcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MDUsIDB4MDApOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDA2LCAweDQwKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgwNywgMHgwMCk7Ci0JcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MDgsIDB4NDApOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDA5LCAweGZlKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgwYSwgMHgwOSk7Ci0JcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MGIsIDB4ODApOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDBjLCAweDAxKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgwZSwgMHhkMyk7Ci0JcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MGYsIDB4MzgpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDEwLCAweDg0KTsKLQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgxMSwgMHgwNik7Ci0JcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MTIsIDB4MjApOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDEzLCAweDIwKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgxNCwgMHgwMCk7Ci0JcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MTUsIDB4NDApOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDE2LCAweDAwKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgxNywgMHg0MCk7Ci0JcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MTgsIDB4ZWYpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDE5LCAweDE5KTsKLQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgxYSwgMHgyMCk7Ci0JcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MWIsIDB4NzYpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDFjLCAweDA0KTsKLQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgxZSwgMHg5NSk7Ci0JcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MWYsIDB4NzUpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDIwLCAweDFmKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgyMSwgMHgyNyk7Ci0JcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MjIsIDB4MTYpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDI0LCAweDQ2KTsKLQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgyNSwgMHgyMCk7Ci0JcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MjYsIDB4OTApOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDI3LCAweDg4KTsKLQotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDBkLCBydGw4MjI1X2dhaW5bMiAqIDRdKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgxYiwgcnRsODIyNV9nYWluWzIgKiA0ICsgMl0pOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDFkLCBydGw4MjI1X2dhaW5bMiAqIDQgKyAzXSk7Ci0JcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MjMsIHJ0bDgyMjVfZ2FpblsyICogNCArIDFdKTsKLQotCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4MDAsIDB4OTgpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4MDMsIDB4MjApOwotCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4MDQsIDB4N2UpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4MDUsIDB4MTIpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4MDYsIDB4ZmMpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4MDcsIDB4NzgpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4MDgsIDB4MmUpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4MTAsIDB4OWIpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4MTEsIDB4ODgpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4MTIsIDB4NDcpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4MTMsIDB4ZDApOwotCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4MTksIDB4MDApOwotCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4MWEsIDB4YTApOwotCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4MWIsIDB4MDgpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4NDAsIDB4ODYpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4NDEsIDB4OGQpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4NDIsIDB4MTUpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4NDMsIDB4MTgpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4NDQsIDB4MWYpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4NDUsIDB4MWUpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4NDYsIDB4MWEpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4NDcsIDB4MTUpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4NDgsIDB4MTApOwotCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4NDksIDB4MGEpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4NGEsIDB4MDUpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4NGIsIDB4MDIpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4NGMsIDB4MDUpOwotCi0JcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5URVNUUiwgMHgwRCk7Ci0KLQlydGw4MjI1X3JmX3NldF90eF9wb3dlcihkZXYsIDEpOwotCi0JLyogUlggYW50ZW5uYSBkZWZhdWx0IHRvIEEgKi8KLQlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDEwLCAweDliKTsJCQkvKiBCOiAweERCICovCi0JcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MjYsIDB4OTApOwkJLyogQjogMHgxMCAqLwotCi0JcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5UWF9BTlRFTk5BLCAweDAzKTsJLyogQjogMHgwMCAqLwotCW1zbGVlcCgxKTsKLQlydGw4MTh4X2lvd3JpdGUzMihwcml2LCAoX19sZTMyICopMHhGRjk0LCAweDNkYzAwMDAyKTsKLQotCS8qIHNldCBzZW5zaXRpdml0eSAqLwotCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDBjLCAweDUwKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgwZCwgcnRsODIyNV9nYWluWzIgKiA0XSk7Ci0JcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MWIsIHJ0bDgyMjVfZ2FpblsyICogNCArIDJdKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgxZCwgcnRsODIyNV9nYWluWzIgKiA0ICsgM10pOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDIzLCBydGw4MjI1X2dhaW5bMiAqIDQgKyAxXSk7Ci0JcnRsODIyNV93cml0ZV9waHlfY2NrKGRldiwgMHg0MSwgcnRsODIyNV90aHJlc2hvbGRbMl0pOwotfQotCi1zdGF0aWMgY29uc3QgdTggcnRsODIyNXoyX2FnY1tdID0gewotCTB4NWUsIDB4NWUsIDB4NWUsIDB4NWUsIDB4NWQsIDB4NWIsIDB4NTksIDB4NTcsIDB4NTUsIDB4NTMsIDB4NTEsIDB4NGYsCi0JMHg0ZCwgMHg0YiwgMHg0OSwgMHg0NywgMHg0NSwgMHg0MywgMHg0MSwgMHgzZiwgMHgzZCwgMHgzYiwgMHgzOSwgMHgzNywKLQkweDM1LCAweDMzLCAweDMxLCAweDJmLCAweDJkLCAweDJiLCAweDI5LCAweDI3LCAweDI1LCAweDIzLCAweDIxLCAweDFmLAotCTB4MWQsIDB4MWIsIDB4MTksIDB4MTcsIDB4MTUsIDB4MTMsIDB4MTEsIDB4MGYsIDB4MGQsIDB4MGIsIDB4MDksIDB4MDcsCi0JMHgwNSwgMHgwMywgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwKLQkweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDE5LCAweDE5LCAweDE5LCAweDE5LCAweDE5LCAweDE5LCAweDE5LCAweDE5LAotCTB4MTksIDB4MjAsIDB4MjEsIDB4MjIsIDB4MjMsIDB4MjQsIDB4MjUsIDB4MjYsIDB4MjYsIDB4MjcsIDB4MjcsIDB4MjgsCi0JMHgyOCwgMHgyOSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYiwgMHgyYiwgMHgyYiwgMHgyYywgMHgyYywgMHgyYywgMHgyZCwKLQkweDJkLCAweDJkLCAweDJkLCAweDJlLCAweDJlLCAweDJlLCAweDJlLCAweDJmLCAweDJmLCAweDJmLCAweDMwLCAweDMwLAotCTB4MzEsIDB4MzEsIDB4MzEsIDB4MzEsIDB4MzEsIDB4MzEsIDB4MzEsIDB4MzEsIDB4MzEsIDB4MzEsIDB4MzEsIDB4MzEsCi0JMHgzMSwgMHgzMSwgMHgzMSwgMHgzMSwgMHgzMSwgMHgzMSwgMHgzMSwgMHgzMQotfTsKLXN0YXRpYyBjb25zdCB1OCBydGw4MjI1ejJfb2ZkbVtdID0gewotCTB4MTAsIDB4MGQsIDB4MDEsIDB4MDAsIDB4MTQsIDB4ZmIsIDB4ZmIsIDB4NjAsCi0JMHgwMCwgMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgwMCwgMHgwMCwKLQkweDQwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDI2LAotCTB4MzIsIDB4MzMsIDB4MDcsIDB4YTUsIDB4NmYsIDB4NTUsIDB4YzgsIDB4YjMsCi0JMHgwYSwgMHhlMSwgMHgyQywgMHg4YSwgMHg4NiwgMHg4MywgMHgzNCwgMHgwZiwKLQkweDRmLCAweDI0LCAweDZmLCAweGMyLCAweDZiLCAweDQwLCAweDgwLCAweDAwLAotCTB4YzAsIDB4YzEsIDB4NTgsIDB4ZjEsIDB4MDAsIDB4ZTQsIDB4OTAsIDB4M2UsCi0JMHg2ZCwgMHgzYywgMHhmYiwgMHgwNwotfTsKLQotc3RhdGljIGNvbnN0IHU4IHJ0bDgyMjV6Ml90eF9wb3dlcl9jY2tfY2gxNFtdID0gewotCTB4MzYsIDB4MzUsIDB4MmUsIDB4MWIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgzMCwgMHgyZiwgMHgyOSwgMHgxNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDMwLCAweDJmLCAweDI5LCAweDE1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MzAsIDB4MmYsIDB4MjksIDB4MTUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAKLX07Ci0KLXN0YXRpYyBjb25zdCB1OCBydGw4MjI1ejJfdHhfcG93ZXJfY2NrW10gPSB7Ci0JMHgzNiwgMHgzNSwgMHgyZSwgMHgyNSwgMHgxYywgMHgxMiwgMHgwOSwgMHgwNCwKLQkweDMwLCAweDJmLCAweDI5LCAweDIxLCAweDE5LCAweDEwLCAweDA4LCAweDAzLAotCTB4MmIsIDB4MmEsIDB4MjUsIDB4MWUsIDB4MTYsIDB4MGUsIDB4MDcsIDB4MDMsCi0JMHgyNiwgMHgyNSwgMHgyMSwgMHgxYiwgMHgxNCwgMHgwZCwgMHgwNiwgMHgwMwotfTsKLQotc3RhdGljIGNvbnN0IHU4IHJ0bDgyMjV6Ml90eF9wb3dlcl9vZmRtW10gPSB7Ci0JMHg0MiwgMHgwMCwgMHg0MCwgMHgwMCwgMHg0MAotfTsKLQotc3RhdGljIGNvbnN0IHU4IHJ0bDgyMjV6Ml90eF9nYWluX2Nja19vZmRtW10gPSB7Ci0JMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwKLQkweDA2LCAweDA3LCAweDA4LCAweDA5LCAweDBhLCAweDBiLAotCTB4MGMsIDB4MGQsIDB4MGUsIDB4MGYsIDB4MTAsIDB4MTEsCi0JMHgxMiwgMHgxMywgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNywKLQkweDE4LCAweDE5LCAweDFhLCAweDFiLCAweDFjLCAweDFkLAotCTB4MWUsIDB4MWYsIDB4MjAsIDB4MjEsIDB4MjIsIDB4MjMKLX07Ci0KLXN0YXRpYyB2b2lkIHJ0bDgyMjV6Ml9yZl9zZXRfdHhfcG93ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBpbnQgY2hhbm5lbCkKLXsKLQlzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2ID0gZGV2LT5wcml2OwotCXU4IGNja19wb3dlciwgb2ZkbV9wb3dlcjsKLQljb25zdCB1OCAqdG1wOwotCXUzMiByZWc7Ci0JaW50IGk7Ci0KLQljY2tfcG93ZXIgPSBwcml2LT5jaGFubmVsc1tjaGFubmVsIC0gMV0uaHdfdmFsdWUgJiAweEY7Ci0Jb2ZkbV9wb3dlciA9IHByaXYtPmNoYW5uZWxzW2NoYW5uZWwgLSAxXS5od192YWx1ZSA+PiA0OwotCi0JY2NrX3Bvd2VyID0gbWluKGNja19wb3dlciwgKHU4KTE1KTsKLQljY2tfcG93ZXIgKz0gcHJpdi0+dHhwd3JfYmFzZSAmIDB4RjsKLQljY2tfcG93ZXIgPSBtaW4oY2NrX3Bvd2VyLCAodTgpMzUpOwotCi0JaWYgKG9mZG1fcG93ZXIgPiAodTgpMTUpCi0JCW9mZG1fcG93ZXIgPSAyNTsKLQllbHNlCi0JCW9mZG1fcG93ZXIgKz0gMTA7Ci0Jb2ZkbV9wb3dlciArPSBwcml2LT50eHB3cl9iYXNlID4+IDQ7Ci0Jb2ZkbV9wb3dlciA9IG1pbihvZmRtX3Bvd2VyLCAodTgpMzUpOwotCi0JaWYgKGNoYW5uZWwgPT0gMTQpCi0JCXRtcCA9IHJ0bDgyMjV6Ml90eF9wb3dlcl9jY2tfY2gxNDsKLQllbHNlCi0JCXRtcCA9IHJ0bDgyMjV6Ml90eF9wb3dlcl9jY2s7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQotCQlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDQ0ICsgaSwgKnRtcCsrKTsKLQotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+VFhfR0FJTl9DQ0ssCi0JCQkgcnRsODIyNXoyX3R4X2dhaW5fY2NrX29mZG1bY2NrX3Bvd2VyXSk7Ci0JbXNsZWVwKDEpOwotCi0JLyogYW5hcGFyYW0yIG9uICovCi0JcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5FRVBST01fQ01ELCBSVEw4MThYX0VFUFJPTV9DTURfQ09ORklHKTsKLQlyZWcgPSBydGw4MTh4X2lvcmVhZDgocHJpdiwgJnByaXYtPm1hcC0+Q09ORklHMyk7Ci0JcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5DT05GSUczLAotCQkJcmVnIHwgUlRMODE4WF9DT05GSUczX0FOQVBBUkFNX1dSSVRFKTsKLQlydGw4MTh4X2lvd3JpdGUzMihwcml2LCAmcHJpdi0+bWFwLT5BTkFQQVJBTTIsCi0JCQkgIFJUTDgxODdfUlRMODIyNV9BTkFQQVJBTTJfT04pOwotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+Q09ORklHMywKLQkJCXJlZyAmIH5SVEw4MThYX0NPTkZJRzNfQU5BUEFSQU1fV1JJVEUpOwotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCwgUlRMODE4WF9FRVBST01fQ01EX05PUk1BTCk7Ci0KLQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMiwgMHg0Mik7Ci0JcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDUsIDB4MDApOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCA2LCAweDQwKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgNywgMHgwMCk7Ci0JcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDgsIDB4NDApOwotCi0JcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5UWF9HQUlOX09GRE0sCi0JCQkgcnRsODIyNXoyX3R4X2dhaW5fY2NrX29mZG1bb2ZkbV9wb3dlcl0pOwotCW1zbGVlcCgxKTsKLX0KLQotc3RhdGljIHZvaWQgcnRsODIyNXoyX2JfcmZfc2V0X3R4X3Bvd2VyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgaW50IGNoYW5uZWwpCi17Ci0Jc3RydWN0IHJ0bDgxODdfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKLQl1OCBjY2tfcG93ZXIsIG9mZG1fcG93ZXI7Ci0JY29uc3QgdTggKnRtcDsKLQlpbnQgaTsKLQotCWNja19wb3dlciA9IHByaXYtPmNoYW5uZWxzW2NoYW5uZWwgLSAxXS5od192YWx1ZSAmIDB4RjsKLQlvZmRtX3Bvd2VyID0gcHJpdi0+Y2hhbm5lbHNbY2hhbm5lbCAtIDFdLmh3X3ZhbHVlID4+IDQ7Ci0KLQlpZiAoY2NrX3Bvd2VyID4gMTUpCi0JCWNja19wb3dlciA9IChwcml2LT5od19yZXYgPT0gUlRMODE4N0J2QikgPyAxNSA6IDIyOwotCWVsc2UKLQkJY2NrX3Bvd2VyICs9IChwcml2LT5od19yZXYgPT0gUlRMODE4N0J2QikgPyAwIDogNzsKLQljY2tfcG93ZXIgKz0gcHJpdi0+dHhwd3JfYmFzZSAmIDB4RjsKLQljY2tfcG93ZXIgPSBtaW4oY2NrX3Bvd2VyLCAodTgpMzUpOwotCi0JaWYgKG9mZG1fcG93ZXIgPiAxNSkKLQkJb2ZkbV9wb3dlciA9IChwcml2LT5od19yZXYgPT0gUlRMODE4N0J2QikgPyAxNyA6IDI1OwotCWVsc2UKLQkJb2ZkbV9wb3dlciArPSAocHJpdi0+aHdfcmV2ID09IFJUTDgxODdCdkIpID8gMiA6IDEwOwotCW9mZG1fcG93ZXIgKz0gKHByaXYtPnR4cHdyX2Jhc2UgPj4gNCkgJiAweEY7Ci0Jb2ZkbV9wb3dlciA9IG1pbihvZmRtX3Bvd2VyLCAodTgpMzUpOwotCi0JaWYgKGNoYW5uZWwgPT0gMTQpCi0JCXRtcCA9IHJ0bDgyMjV6Ml90eF9wb3dlcl9jY2tfY2gxNDsKLQllbHNlCi0JCXRtcCA9IHJ0bDgyMjV6Ml90eF9wb3dlcl9jY2s7Ci0KLQlpZiAocHJpdi0+aHdfcmV2ID09IFJUTDgxODdCdkIpIHsKLQkJaWYgKGNja19wb3dlciA8PSA2KQotCQkJOyAvKiBkbyBub3RoaW5nICovCi0JCWVsc2UgaWYgKGNja19wb3dlciA8PSAxMSkKLQkJCXRtcCArPSA4OwotCQllbHNlCi0JCQl0bXAgKz0gMTY7Ci0JfSBlbHNlIHsKLQkJaWYgKGNja19wb3dlciA8PSA1KQotCQkJOyAvKiBkbyBub3RoaW5nICovCi0JCWVsc2UgaWYgKGNja19wb3dlciA8PSAxMSkKLQkJCXRtcCArPSA4OwotCQllbHNlIGlmIChjY2tfcG93ZXIgPD0gMTcpCi0JCQl0bXAgKz0gMTY7Ci0JCWVsc2UKLQkJCXRtcCArPSAyNDsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQotCQlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDQ0ICsgaSwgKnRtcCsrKTsKLQotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+VFhfR0FJTl9DQ0ssCi0JCQkgcnRsODIyNXoyX3R4X2dhaW5fY2NrX29mZG1bY2NrX3Bvd2VyXSA8PCAxKTsKLQltc2xlZXAoMSk7Ci0KLQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPlRYX0dBSU5fT0ZETSwKLQkJCSBydGw4MjI1ejJfdHhfZ2Fpbl9jY2tfb2ZkbVtvZmRtX3Bvd2VyXSA8PCAxKTsKLQlpZiAocHJpdi0+aHdfcmV2ID09IFJUTDgxODdCdkIpIHsKLQkJaWYgKG9mZG1fcG93ZXIgPD0gMTEpIHsKLQkJCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDg3LCAweDYwKTsKLQkJCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDg5LCAweDYwKTsKLQkJfSBlbHNlIHsKLQkJCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDg3LCAweDVjKTsKLQkJCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDg5LCAweDVjKTsKLQkJfQotCX0gZWxzZSB7Ci0JCWlmIChvZmRtX3Bvd2VyIDw9IDExKSB7Ci0JCQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHg4NywgMHg1Yyk7Ci0JCQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHg4OSwgMHg1Yyk7Ci0JCX0gZWxzZSBpZiAob2ZkbV9wb3dlciA8PSAxNykgewotCQkJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4ODcsIDB4NTQpOwotCQkJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4ODksIDB4NTQpOwotCQl9IGVsc2UgewotCQkJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4ODcsIDB4NTApOwotCQkJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4ODksIDB4NTApOwotCQl9Ci0JfQotCW1zbGVlcCgxKTsKLX0KLQotc3RhdGljIGNvbnN0IHUxNiBydGw4MjI1ejJfcnhnYWluW10gPSB7Ci0JMHgwNDAwLCAweDA0MDEsIDB4MDQwMiwgMHgwNDAzLCAweDA0MDQsIDB4MDQwNSwgMHgwNDA4LCAweDA0MDksCi0JMHgwNDBhLCAweDA0MGIsIDB4MDUwMiwgMHgwNTAzLCAweDA1MDQsIDB4MDUwNSwgMHgwNTQwLCAweDA1NDEsCi0JMHgwNTQyLCAweDA1NDMsIDB4MDU0NCwgMHgwNTQ1LCAweDA1ODAsIDB4MDU4MSwgMHgwNTgyLCAweDA1ODMsCi0JMHgwNTg0LCAweDA1ODUsIDB4MDU4OCwgMHgwNTg5LCAweDA1OGEsIDB4MDU4YiwgMHgwNjQzLCAweDA2NDQsCi0JMHgwNjQ1LCAweDA2ODAsIDB4MDY4MSwgMHgwNjgyLCAweDA2ODMsIDB4MDY4NCwgMHgwNjg1LCAweDA2ODgsCi0JMHgwNjg5LCAweDA2OGEsIDB4MDY4YiwgMHgwNjhjLCAweDA3NDIsIDB4MDc0MywgMHgwNzQ0LCAweDA3NDUsCi0JMHgwNzgwLCAweDA3ODEsIDB4MDc4MiwgMHgwNzgzLCAweDA3ODQsIDB4MDc4NSwgMHgwNzg4LCAweDA3ODksCi0JMHgwNzhhLCAweDA3OGIsIDB4MDc4YywgMHgwNzhkLCAweDA3OTAsIDB4MDc5MSwgMHgwNzkyLCAweDA3OTMsCi0JMHgwNzk0LCAweDA3OTUsIDB4MDc5OCwgMHgwNzk5LCAweDA3OWEsIDB4MDc5YiwgMHgwNzljLCAweDA3OWQsCi0JMHgwN2EwLCAweDA3YTEsIDB4MDdhMiwgMHgwN2EzLCAweDA3YTQsIDB4MDdhNSwgMHgwN2E4LCAweDA3YTksCi0JMHgwM2FhLCAweDAzYWIsIDB4MDNhYywgMHgwM2FkLCAweDAzYjAsIDB4MDNiMSwgMHgwM2IyLCAweDAzYjMsCi0JMHgwM2I0LCAweDAzYjUsIDB4MDNiOCwgMHgwM2I5LCAweDAzYmEsIDB4MDNiYiwgMHgwM2JiCi19OwotCi1zdGF0aWMgY29uc3QgdTggcnRsODIyNXoyX2dhaW5fYmdbXSA9IHsKLQkweDIzLCAweDE1LCAweGE1LCAvKiAtODItMWRCbSAqLwotCTB4MjMsIDB4MTUsIDB4YjUsIC8qIC04Mi0yZEJtICovCi0JMHgyMywgMHgxNSwgMHhjNSwgLyogLTgyLTNkQm0gKi8KLQkweDMzLCAweDE1LCAweGM1LCAvKiAtNzhkQm0gKi8KLQkweDQzLCAweDE1LCAweGM1LCAvKiAtNzRkQm0gKi8KLQkweDUzLCAweDE1LCAweGM1LCAvKiAtNzBkQm0gKi8KLQkweDYzLCAweDE1LCAweGM1ICAvKiAtNjZkQm0gKi8KLX07Ci0KLXN0YXRpYyB2b2lkIHJ0bDgyMjV6Ml9yZl9pbml0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKLXsKLQlzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2ID0gZGV2LT5wcml2OwotCWludCBpOwotCi0JcnRsODIyNV93cml0ZShkZXYsIDB4MCwgMHgyQkYpOwotCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDEsIDB4RUUwKTsKLQlydGw4MjI1X3dyaXRlKGRldiwgMHgyLCAweDQ0RCk7Ci0JcnRsODIyNV93cml0ZShkZXYsIDB4MywgMHg0NDEpOwotCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDQsIDB4OEMzKTsKLQlydGw4MjI1X3dyaXRlKGRldiwgMHg1LCAweEM3Mik7Ci0JcnRsODIyNV93cml0ZShkZXYsIDB4NiwgMHgwRTYpOwotCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDcsIDB4ODJBKTsKLQlydGw4MjI1X3dyaXRlKGRldiwgMHg4LCAweDAzRik7Ci0JcnRsODIyNV93cml0ZShkZXYsIDB4OSwgMHgzMzUpOwotCXJ0bDgyMjVfd3JpdGUoZGV2LCAweGEsIDB4OUQ0KTsKLQlydGw4MjI1X3dyaXRlKGRldiwgMHhiLCAweDdCQik7Ci0JcnRsODIyNV93cml0ZShkZXYsIDB4YywgMHg4NTApOwotCXJ0bDgyMjVfd3JpdGUoZGV2LCAweGQsIDB4Q0RGKTsKLQlydGw4MjI1X3dyaXRlKGRldiwgMHhlLCAweDAyQik7Ci0JcnRsODIyNV93cml0ZShkZXYsIDB4ZiwgMHgxMTQpOwotCW1zbGVlcCgxMDApOwotCi0JcnRsODIyNV93cml0ZShkZXYsIDB4MCwgMHgxQjcpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocnRsODIyNXoyX3J4Z2Fpbik7IGkrKykgewotCQlydGw4MjI1X3dyaXRlKGRldiwgMHgxLCBpICsgMSk7Ci0JCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDIsIHJ0bDgyMjV6Ml9yeGdhaW5baV0pOwotCX0KLQotCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDMsIDB4MDgwKTsKLQlydGw4MjI1X3dyaXRlKGRldiwgMHg1LCAweDAwNCk7Ci0JcnRsODIyNV93cml0ZShkZXYsIDB4MCwgMHgwQjcpOwotCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDIsIDB4YzREKTsKLQotCW1zbGVlcCgyMDApOwotCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDIsIDB4NDREKTsKLQltc2xlZXAoMTAwKTsKLQotCWlmICghKHJ0bDgyMjVfcmVhZChkZXYsIDYpICYgKDEgPDwgNykpKSB7Ci0JCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDAyLCAweDBDNEQpOwotCQltc2xlZXAoMjAwKTsKLQkJcnRsODIyNV93cml0ZShkZXYsIDB4MDIsIDB4MDQ0RCk7Ci0JCW1zbGVlcCgxMDApOwotCQlpZiAoIShydGw4MjI1X3JlYWQoZGV2LCA2KSAmICgxIDw8IDcpKSkKLQkJCXdpcGh5X3dhcm4oZGV2LT53aXBoeSwgIlJGIENhbGlicmF0aW9uIEZhaWxlZCEgJXhcbiIsCi0JCQkJICAgcnRsODIyNV9yZWFkKGRldiwgNikpOwotCX0KLQotCW1zbGVlcCgyMDApOwotCi0JcnRsODIyNV93cml0ZShkZXYsIDB4MCwgMHgyQkYpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocnRsODIyNV9hZ2MpOyBpKyspIHsKLQkJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4QiwgcnRsODIyNV9hZ2NbaV0pOwotCQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHhBLCAweDgwICsgaSk7Ci0JfQotCi0JbXNsZWVwKDEpOwotCi0JcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MDAsIDB4MDEpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDAxLCAweDAyKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgwMiwgMHg0Mik7Ci0JcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MDMsIDB4MDApOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDA0LCAweDAwKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgwNSwgMHgwMCk7Ci0JcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MDYsIDB4NDApOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDA3LCAweDAwKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgwOCwgMHg0MCk7Ci0JcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MDksIDB4ZmUpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDBhLCAweDA4KTsKLQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgwYiwgMHg4MCk7Ci0JcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MGMsIDB4MDEpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDBkLCAweDQzKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgwZSwgMHhkMyk7Ci0JcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MGYsIDB4MzgpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDEwLCAweDg0KTsKLQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgxMSwgMHgwNyk7Ci0JcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MTIsIDB4MjApOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDEzLCAweDIwKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgxNCwgMHgwMCk7Ci0JcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MTUsIDB4NDApOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDE2LCAweDAwKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgxNywgMHg0MCk7Ci0JcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MTgsIDB4ZWYpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDE5LCAweDE5KTsKLQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgxYSwgMHgyMCk7Ci0JcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MWIsIDB4MTUpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDFjLCAweDA0KTsKLQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgxZCwgMHhjNSk7Ci0JcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MWUsIDB4OTUpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDFmLCAweDc1KTsKLQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgyMCwgMHgxZik7Ci0JcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MjEsIDB4MTcpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDIyLCAweDE2KTsKLQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgyMywgMHg4MCk7Ci0JcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MjQsIDB4NDYpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDI1LCAweDAwKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgyNiwgMHg5MCk7Ci0JcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MjcsIDB4ODgpOwotCi0JcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MGIsIHJ0bDgyMjV6Ml9nYWluX2JnWzQgKiAzXSk7Ci0JcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MWIsIHJ0bDgyMjV6Ml9nYWluX2JnWzQgKiAzICsgMV0pOwotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDFkLCBydGw4MjI1ejJfZ2Fpbl9iZ1s0ICogMyArIDJdKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHgyMSwgMHgzNyk7Ci0KLQlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDAwLCAweDk4KTsKLQlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDAzLCAweDIwKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDA0LCAweDdlKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDA1LCAweDEyKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDA2LCAweGZjKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDA3LCAweDc4KTsKLQlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDA4LCAweDJlKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDEwLCAweDliKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDExLCAweDg4KTsKLQlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDEyLCAweDQ3KTsKLQlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDEzLCAweGQwKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDE5LCAweDAwKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDFhLCAweGEwKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDFiLCAweDA4KTsKLQlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDQwLCAweDg2KTsKLQlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDQxLCAweDhkKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDQyLCAweDE1KTsKLQlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDQzLCAweDE4KTsKLQlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDQ0LCAweDM2KTsKLQlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDQ1LCAweDM1KTsKLQlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDQ2LCAweDJlKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDQ3LCAweDI1KTsKLQlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDQ4LCAweDFjKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDQ5LCAweDEyKTsKLQlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDRhLCAweDA5KTsKLQlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDRiLCAweDA0KTsKLQlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDRjLCAweDA1KTsKLQotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgKHU4ICopMHhGRjVCLCAweDBEKTsgbXNsZWVwKDEpOwotCi0JcnRsODIyNXoyX3JmX3NldF90eF9wb3dlcihkZXYsIDEpOwotCi0JLyogUlggYW50ZW5uYSBkZWZhdWx0IHRvIEEgKi8KLQlydGw4MjI1X3dyaXRlX3BoeV9jY2soZGV2LCAweDEwLCAweDliKTsJCQkvKiBCOiAweERCICovCi0JcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4MjYsIDB4OTApOwkJLyogQjogMHgxMCAqLwotCi0JcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5UWF9BTlRFTk5BLCAweDAzKTsJLyogQjogMHgwMCAqLwotCW1zbGVlcCgxKTsKLQlydGw4MTh4X2lvd3JpdGUzMihwcml2LCAoX19sZTMyICopMHhGRjk0LCAweDNkYzAwMDAyKTsKLX0KLQotc3RhdGljIHZvaWQgcnRsODIyNXoyX2JfcmZfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCi17Ci0Jc3RydWN0IHJ0bDgxODdfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKLQlpbnQgaTsKLQotCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDAsIDB4MEI3KTsKLQlydGw4MjI1X3dyaXRlKGRldiwgMHgxLCAweEVFMCk7Ci0JcnRsODIyNV93cml0ZShkZXYsIDB4MiwgMHg0NEQpOwotCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDMsIDB4NDQxKTsKLQlydGw4MjI1X3dyaXRlKGRldiwgMHg0LCAweDhDMyk7Ci0JcnRsODIyNV93cml0ZShkZXYsIDB4NSwgMHhDNzIpOwotCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDYsIDB4MEU2KTsKLQlydGw4MjI1X3dyaXRlKGRldiwgMHg3LCAweDgyQSk7Ci0JcnRsODIyNV93cml0ZShkZXYsIDB4OCwgMHgwM0YpOwotCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDksIDB4MzM1KTsKLQlydGw4MjI1X3dyaXRlKGRldiwgMHhhLCAweDlENCk7Ci0JcnRsODIyNV93cml0ZShkZXYsIDB4YiwgMHg3QkIpOwotCXJ0bDgyMjVfd3JpdGUoZGV2LCAweGMsIDB4ODUwKTsKLQlydGw4MjI1X3dyaXRlKGRldiwgMHhkLCAweENERik7Ci0JcnRsODIyNV93cml0ZShkZXYsIDB4ZSwgMHgwMkIpOwotCXJ0bDgyMjVfd3JpdGUoZGV2LCAweGYsIDB4MTE0KTsKLQotCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDAsIDB4MUI3KTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJ0bDgyMjV6Ml9yeGdhaW4pOyBpKyspIHsKLQkJcnRsODIyNV93cml0ZShkZXYsIDB4MSwgaSArIDEpOwotCQlydGw4MjI1X3dyaXRlKGRldiwgMHgyLCBydGw4MjI1ejJfcnhnYWluW2ldKTsKLQl9Ci0KLQlydGw4MjI1X3dyaXRlKGRldiwgMHgzLCAweDA4MCk7Ci0JcnRsODIyNV93cml0ZShkZXYsIDB4NSwgMHgwMDQpOwotCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDAsIDB4MEI3KTsKLQotCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDIsIDB4QzREKTsKLQotCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDIsIDB4NDREKTsKLQlydGw4MjI1X3dyaXRlKGRldiwgMHgwLCAweDJCRik7Ci0KLQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPlRYX0dBSU5fQ0NLLCAweDAzKTsKLQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPlRYX0dBSU5fT0ZETSwgMHgwNyk7Ci0JcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5UWF9BTlRFTk5BLCAweDAzKTsKLQotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDgwLCAweDEyKTsKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShydGw4MjI1ejJfYWdjKTsgaSsrKSB7Ci0JCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweEYsIHJ0bDgyMjV6Ml9hZ2NbaV0pOwotCQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHhFLCAweDgwICsgaSk7Ci0JCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweEUsIDApOwotCX0KLQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHg4MCwgMHgxMCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShydGw4MjI1ejJfb2ZkbSk7IGkrKykKLQkJcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIGksIHJ0bDgyMjV6Ml9vZmRtW2ldKTsKLQotCXJ0bDgyMjVfd3JpdGVfcGh5X29mZG0oZGV2LCAweDk3LCAweDQ2KTsKLQlydGw4MjI1X3dyaXRlX3BoeV9vZmRtKGRldiwgMHhhNCwgMHhiNik7Ci0JcnRsODIyNV93cml0ZV9waHlfb2ZkbShkZXYsIDB4ODUsIDB4ZmMpOwotCXJ0bDgyMjVfd3JpdGVfcGh5X2NjayhkZXYsIDB4YzEsIDB4ODgpOwotfQotCi1zdGF0aWMgdm9pZCBydGw4MjI1X3JmX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQotewotCXU4IHJlZzsKLQlzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2ID0gZGV2LT5wcml2OwotCi0JcnRsODIyNV93cml0ZShkZXYsIDB4NCwgMHgxZik7Ci0KLQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQsIFJUTDgxOFhfRUVQUk9NX0NNRF9DT05GSUcpOwotCXJlZyA9IHJ0bDgxOHhfaW9yZWFkOChwcml2LCAmcHJpdi0+bWFwLT5DT05GSUczKTsKLQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkNPTkZJRzMsIHJlZyB8IFJUTDgxOFhfQ09ORklHM19BTkFQQVJBTV9XUklURSk7Ci0JaWYgKCFwcml2LT5pc19ydGw4MTg3YikgewotCQlydGw4MTh4X2lvd3JpdGUzMihwcml2LCAmcHJpdi0+bWFwLT5BTkFQQVJBTTIsCi0JCQkJICBSVEw4MTg3X1JUTDgyMjVfQU5BUEFSQU0yX09GRik7Ci0JCXJ0bDgxOHhfaW93cml0ZTMyKHByaXYsICZwcml2LT5tYXAtPkFOQVBBUkFNLAotCQkJCSAgUlRMODE4N19SVEw4MjI1X0FOQVBBUkFNX09GRik7Ci0JfSBlbHNlIHsKLQkJcnRsODE4eF9pb3dyaXRlMzIocHJpdiwgJnByaXYtPm1hcC0+QU5BUEFSQU0yLAotCQkJCSAgUlRMODE4N0JfUlRMODIyNV9BTkFQQVJBTTJfT0ZGKTsKLQkJcnRsODE4eF9pb3dyaXRlMzIocHJpdiwgJnByaXYtPm1hcC0+QU5BUEFSQU0sCi0JCQkJICBSVEw4MTg3Ql9SVEw4MjI1X0FOQVBBUkFNX09GRik7Ci0JCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+QU5BUEFSQU0zLAotCQkJCSAgUlRMODE4N0JfUlRMODIyNV9BTkFQQVJBTTNfT0ZGKTsKLQl9Ci0JcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5DT05GSUczLCByZWcgJiB+UlRMODE4WF9DT05GSUczX0FOQVBBUkFNX1dSSVRFKTsKLQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQsIFJUTDgxOFhfRUVQUk9NX0NNRF9OT1JNQUwpOwotfQotCi1zdGF0aWMgdm9pZCBydGw4MjI1X3JmX3NldF9jaGFubmVsKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKLQkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYpCi17Ci0Jc3RydWN0IHJ0bDgxODdfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKLQlpbnQgY2hhbiA9IGllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbChjb25mLT5jaGFubmVsLT5jZW50ZXJfZnJlcSk7Ci0KLQlpZiAocHJpdi0+cmYtPmluaXQgPT0gcnRsODIyNV9yZl9pbml0KQotCQlydGw4MjI1X3JmX3NldF90eF9wb3dlcihkZXYsIGNoYW4pOwotCWVsc2UgaWYgKHByaXYtPnJmLT5pbml0ID09IHJ0bDgyMjV6Ml9yZl9pbml0KQotCQlydGw4MjI1ejJfcmZfc2V0X3R4X3Bvd2VyKGRldiwgY2hhbik7Ci0JZWxzZQotCQlydGw4MjI1ejJfYl9yZl9zZXRfdHhfcG93ZXIoZGV2LCBjaGFuKTsKLQotCXJ0bDgyMjVfd3JpdGUoZGV2LCAweDcsIHJ0bDgyMjVfY2hhbltjaGFuIC0gMV0pOwotCW1zbGVlcCgxMCk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRsODE4eF9yZl9vcHMgcnRsODIyNV9vcHMgPSB7Ci0JLm5hbWUJCT0gInJ0bDgyMjUiLAotCS5pbml0CQk9IHJ0bDgyMjVfcmZfaW5pdCwKLQkuc3RvcAkJPSBydGw4MjI1X3JmX3N0b3AsCi0JLnNldF9jaGFuCT0gcnRsODIyNV9yZl9zZXRfY2hhbm5lbAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBydGw4MTh4X3JmX29wcyBydGw4MjI1ejJfb3BzID0gewotCS5uYW1lCQk9ICJydGw4MjI1ejIiLAotCS5pbml0CQk9IHJ0bDgyMjV6Ml9yZl9pbml0LAotCS5zdG9wCQk9IHJ0bDgyMjVfcmZfc3RvcCwKLQkuc2V0X2NoYW4JPSBydGw4MjI1X3JmX3NldF9jaGFubmVsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHJ0bDgxOHhfcmZfb3BzIHJ0bDgyMjV6Ml9iX29wcyA9IHsKLQkubmFtZQkJPSAicnRsODIyNXoyIiwKLQkuaW5pdAkJPSBydGw4MjI1ejJfYl9yZl9pbml0LAotCS5zdG9wCQk9IHJ0bDgyMjVfcmZfc3RvcCwKLQkuc2V0X2NoYW4JPSBydGw4MjI1X3JmX3NldF9jaGFubmVsCi19OwotCi1jb25zdCBzdHJ1Y3QgcnRsODE4eF9yZl9vcHMgKiBydGw4MTg3X2RldGVjdF9yZihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCi17Ci0JdTE2IHJlZzgsIHJlZzk7Ci0Jc3RydWN0IHJ0bDgxODdfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKLQotCWlmICghcHJpdi0+aXNfcnRsODE4N2IpIHsKLQkJcnRsODIyNV93cml0ZShkZXYsIDAsIDB4MUI3KTsKLQotCQlyZWc4ID0gcnRsODIyNV9yZWFkKGRldiwgOCk7Ci0JCXJlZzkgPSBydGw4MjI1X3JlYWQoZGV2LCA5KTsKLQotCQlydGw4MjI1X3dyaXRlKGRldiwgMCwgMHgwQjcpOwotCi0JCWlmIChyZWc4ICE9IDB4NTg4IHx8IHJlZzkgIT0gMHg3MDApCi0JCQlyZXR1cm4gJnJ0bDgyMjVfb3BzOwotCi0JCXJldHVybiAmcnRsODIyNXoyX29wczsKLQl9IGVsc2UKLQkJcmV0dXJuICZydGw4MjI1ejJfYl9vcHM7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL0tjb25maWcgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y2NTczZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvS2NvbmZpZwpAQCAtMCwwICsxLDE1IEBACitjb25maWcgUlRMODE5MkNFCisJdHJpc3RhdGUgIlJlYWx0ZWsgUlRMODE5MkNFL1JUTDgxODhTRSBXaXJlbGVzcyBOZXR3b3JrIEFkYXB0ZXIiCisJZGVwZW5kcyBvbiBNQUM4MDIxMSAmJiBFWFBFUklNRU5UQUwKKwlzZWxlY3QgRldfTE9BREVSCisJc2VsZWN0IFJUTFdJRkkKKwktLS1oZWxwLS0tCisJVGhpcyBpcyB0aGUgZHJpdmVyIGZvciBSZWFsdGVrIFJUTDgxOTJDRS9SVEw4MTg4Q0UgODAyLjExbiBQQ0llCisJd2lyZWxlc3MgbmV0d29yayBhZGFwdGVycy4KKworCUlmIHlvdSBjaG9vc2UgdG8gYnVpbGQgaXQgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmUgY2FsbGVkIHJ0bDgxOTJjZQorCitjb25maWcgUlRMV0lGSQorCXRyaXN0YXRlCisJZGVwZW5kcyBvbiBSVEw4MTkyQ0UKKwlkZWZhdWx0IG0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhN2E0MzgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL01ha2VmaWxlCkBAIC0wLDAgKzEsMTMgQEAKK29iai0kKENPTkZJR19SVExXSUZJKSAJCSs9IHJ0bHdpZmkubworcnRsd2lmaS1vYmpzCTo9CQlcCisJCWJhc2UubwkJXAorCQljYW0ubwkJXAorCQljb3JlLm8JCVwKKwkJZGVidWcubwkJXAorCQllZnVzZS5vCQlcCisJCXBjaS5vCQlcCisJCXBzLm8JCVwKKwkJcmMubwkJXAorCQlyZWdkLm8KKworb2JqLSQoQ09ORklHX1JUTDgxOTJDRSkJCSs9IHJ0bDgxOTJjZS8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvYmFzZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9iYXNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2YwYjczZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvYmFzZS5jCkBAIC0wLDAgKzEsOTU2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDktMjAxMCAgUmVhbHRlayBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLCBVU0EKKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIHdsYW5mYWUgPHdsYW5mYWVAcmVhbHRlay5jb20+CisgKiBSZWFsdGVrIENvcnBvcmF0aW9uLCBOby4gMiwgSW5ub3ZhdGlvbiBSb2FkIElJLCBIc2luY2h1IFNjaWVuY2UgUGFyaywKKyAqIEhzaW5jaHUgMzAwLCBUYWl3YW4uCisgKgorICogTGFycnkgRmluZ2VyIDxMYXJyeS5GaW5nZXJAbHdmaW5nZXIubmV0PgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L2lwLmg+CisjaW5jbHVkZSAid2lmaS5oIgorI2luY2x1ZGUgInJjLmgiCisjaW5jbHVkZSAiYmFzZS5oIgorI2luY2x1ZGUgImVmdXNlLmgiCisjaW5jbHVkZSAiY2FtLmgiCisjaW5jbHVkZSAicHMuaCIKKyNpbmNsdWRlICJyZWdkLmgiCisKKy8qCisgKk5PVElDRSEhITogVGhpcyBmaWxlIHdpbGwgYmUgdmVyeSBiaWcsIHdlIGhzb3VsZAorICprZWVwIGl0IGNsZWFyIHVuZGVyIGZvbGx3aW5nIHJvbGVzOgorICoKKyAqVGhpcyBmaWxlIGluY2x1ZGUgZm9sbHdpbmcgcGFydCwgc28sIGlmIHlvdSBhZGQgbmV3CisgKmZ1bmN0aW9ucyBpbnRvIHRoaXMgZmlsZSwgcGxlYXNlIGNoZWNrIHdoaWNoIHBhcnQgaXQKKyAqc2hvdWxkIGluY2x1ZGVzLiBvciBjaGVjayBpZiB5b3Ugc2hvdWxkIGFkZCBuZXcgcGFydAorICpmb3IgdGhpcyBmaWxlOgorICoKKyAqMSkgbWFjODAyMTEgaW5pdCBmdW5jdGlvbnMKKyAqMikgdHggaW5mb3JtYXRpb24gZnVuY3Rpb25zCisgKjMpIGZ1bmN0aW9ucyBjYWxsZWQgYnkgY29yZS5jCisgKjQpIHdxICYgdGltZXIgY2FsbGJhY2sgZnVuY3Rpb25zCisgKjUpIGZyYW1lIHByb2Nlc3MgZnVuY3Rpb25zCisgKjYpIHN5c2ZzIGZ1bmN0aW9ucworICo3KSAuLi4KKyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogbWFjODAyMTEgaW5pdCBmdW5jdGlvbnMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCBydGxfY2hhbm5lbHRhYmxlW10gPSB7CisJey5jZW50ZXJfZnJlcSA9IDI0MTIsIC5od192YWx1ZSA9IDEsfSwKKwl7LmNlbnRlcl9mcmVxID0gMjQxNywgLmh3X3ZhbHVlID0gMix9LAorCXsuY2VudGVyX2ZyZXEgPSAyNDIyLCAuaHdfdmFsdWUgPSAzLH0sCisJey5jZW50ZXJfZnJlcSA9IDI0MjcsIC5od192YWx1ZSA9IDQsfSwKKwl7LmNlbnRlcl9mcmVxID0gMjQzMiwgLmh3X3ZhbHVlID0gNSx9LAorCXsuY2VudGVyX2ZyZXEgPSAyNDM3LCAuaHdfdmFsdWUgPSA2LH0sCisJey5jZW50ZXJfZnJlcSA9IDI0NDIsIC5od192YWx1ZSA9IDcsfSwKKwl7LmNlbnRlcl9mcmVxID0gMjQ0NywgLmh3X3ZhbHVlID0gOCx9LAorCXsuY2VudGVyX2ZyZXEgPSAyNDUyLCAuaHdfdmFsdWUgPSA5LH0sCisJey5jZW50ZXJfZnJlcSA9IDI0NTcsIC5od192YWx1ZSA9IDEwLH0sCisJey5jZW50ZXJfZnJlcSA9IDI0NjIsIC5od192YWx1ZSA9IDExLH0sCisJey5jZW50ZXJfZnJlcSA9IDI0NjcsIC5od192YWx1ZSA9IDEyLH0sCisJey5jZW50ZXJfZnJlcSA9IDI0NzIsIC5od192YWx1ZSA9IDEzLH0sCisJey5jZW50ZXJfZnJlcSA9IDI0ODQsIC5od192YWx1ZSA9IDE0LH0sCit9OworCitzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9yYXRlIHJ0bF9yYXRldGFibGVbXSA9IHsKKwl7LmJpdHJhdGUgPSAxMCwgLmh3X3ZhbHVlID0gMHgwMCx9LAorCXsuYml0cmF0ZSA9IDIwLCAuaHdfdmFsdWUgPSAweDAxLH0sCisJey5iaXRyYXRlID0gNTUsIC5od192YWx1ZSA9IDB4MDIsfSwKKwl7LmJpdHJhdGUgPSAxMTAsIC5od192YWx1ZSA9IDB4MDMsfSwKKwl7LmJpdHJhdGUgPSA2MCwgLmh3X3ZhbHVlID0gMHgwNCx9LAorCXsuYml0cmF0ZSA9IDkwLCAuaHdfdmFsdWUgPSAweDA1LH0sCisJey5iaXRyYXRlID0gMTIwLCAuaHdfdmFsdWUgPSAweDA2LH0sCisJey5iaXRyYXRlID0gMTgwLCAuaHdfdmFsdWUgPSAweDA3LH0sCisJey5iaXRyYXRlID0gMjQwLCAuaHdfdmFsdWUgPSAweDA4LH0sCisJey5iaXRyYXRlID0gMzYwLCAuaHdfdmFsdWUgPSAweDA5LH0sCisJey5iaXRyYXRlID0gNDgwLCAuaHdfdmFsdWUgPSAweDBhLH0sCisJey5iaXRyYXRlID0gNTQwLCAuaHdfdmFsdWUgPSAweDBiLH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCBydGxfYmFuZF8yZ2h6ID0geworCS5iYW5kID0gSUVFRTgwMjExX0JBTkRfMkdIWiwKKworCS5jaGFubmVscyA9IHJ0bF9jaGFubmVsdGFibGUsCisJLm5fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKHJ0bF9jaGFubmVsdGFibGUpLAorCisJLmJpdHJhdGVzID0gcnRsX3JhdGV0YWJsZSwKKwkubl9iaXRyYXRlcyA9IEFSUkFZX1NJWkUocnRsX3JhdGV0YWJsZSksCisKKwkuaHRfY2FwID0gezB9LAorfTsKKworc3RhdGljIHZvaWQgX3J0bF9pbml0X2h3X2h0X2NhcGFiKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgc3RydWN0IGllZWU4MDIxMV9zdGFfaHRfY2FwICpodF9jYXApCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGh5ICpydGxwaHkgPSAmKHJ0bHByaXYtPnBoeSk7CisKKwlodF9jYXAtPmh0X3N1cHBvcnRlZCA9IHRydWU7CisJaHRfY2FwLT5jYXAgPSBJRUVFODAyMTFfSFRfQ0FQX1NVUF9XSURUSF8yMF80MCB8CisJICAgIElFRUU4MDIxMV9IVF9DQVBfU0dJXzQwIHwKKwkgICAgSUVFRTgwMjExX0hUX0NBUF9TR0lfMjAgfAorCSAgICBJRUVFODAyMTFfSFRfQ0FQX0RTU1NDQ0s0MCB8IElFRUU4MDIxMV9IVF9DQVBfTUFYX0FNU0RVOworCisJLyoKKwkgKk1heGltdW0gbGVuZ3RoIG9mIEFNUERVIHRoYXQgdGhlIFNUQSBjYW4gcmVjZWl2ZS4KKwkgKkxlbmd0aCA9IDIgXiAoMTMgKyBtYXhfYW1wZHVfbGVuZ3RoX2V4cCkgLSAxIChvY3RldHMpCisJICovCisJaHRfY2FwLT5hbXBkdV9mYWN0b3IgPSBJRUVFODAyMTFfSFRfTUFYX0FNUERVXzY0SzsKKworCS8qTWluaW11bSBNUERVIHN0YXJ0IHNwYWNpbmcgLCAqLworCWh0X2NhcC0+YW1wZHVfZGVuc2l0eSA9IElFRUU4MDIxMV9IVF9NUERVX0RFTlNJVFlfMTY7CisKKwlodF9jYXAtPm1jcy50eF9wYXJhbXMgPSBJRUVFODAyMTFfSFRfTUNTX1RYX0RFRklORUQ7CisKKwkvKgorCSAqaHctPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXQorCSAqYmFzZSBvbiBhbnRfbnVtCisJICpyeF9tYXNrOiBSWCBtYXNrCisJICppZiByeF9hbnQgPTEgcnhfbWFza1swXT0weGZmOz09Pk1DUzAtTUNTNworCSAqaWYgcnhfYW50ID0yIHJ4X21hc2tbMV09MHhmZjs9PT5NQ1M4LU1DUzE1CisJICppZiByeF9hbnQgPj0zIHJ4X21hc2tbMl09MHhmZjsKKwkgKmlmIEJXXzQwIHJ4X21hc2tbNF09MHgwMTsKKwkgKmhpZ2hlc3Qgc3VwcG9ydGVkIFJYIHJhdGUKKwkgKi8KKwlpZiAoZ2V0X3JmX3R5cGUocnRscGh5KSA9PSBSRl8xVDJSIHx8IGdldF9yZl90eXBlKHJ0bHBoeSkgPT0gUkZfMlQyUikgeworCisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX0RNRVNHLCAoIjFUMlIgb3IgMlQyUlxuIikpOworCisJCWh0X2NhcC0+bWNzLnJ4X21hc2tbMF0gPSAweEZGOworCQlodF9jYXAtPm1jcy5yeF9tYXNrWzFdID0gMHhGRjsKKwkJaHRfY2FwLT5tY3MucnhfbWFza1s0XSA9IDB4MDE7CisKKwkJaHRfY2FwLT5tY3MucnhfaGlnaGVzdCA9IE1BWF9CSVRfUkFURV80ME1IWl9NQ1MxNTsKKwl9IGVsc2UgaWYgKGdldF9yZl90eXBlKHJ0bHBoeSkgPT0gUkZfMVQxUikgeworCisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX0RNRVNHLCAoIjFUMVJcbiIpKTsKKworCQlodF9jYXAtPm1jcy5yeF9tYXNrWzBdID0gMHhGRjsKKwkJaHRfY2FwLT5tY3MucnhfbWFza1sxXSA9IDB4MDA7CisJCWh0X2NhcC0+bWNzLnJ4X21hc2tbNF0gPSAweDAxOworCisJCWh0X2NhcC0+bWNzLnJ4X2hpZ2hlc3QgPSBNQVhfQklUX1JBVEVfNDBNSFpfTUNTNzsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9ydGxfaW5pdF9tYWM4MDIxMShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX21hYyAqcnRsbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOworCXN0cnVjdCBydGxfZWZ1c2UgKnJ0bGVmdXNlID0gcnRsX2VmdXNlKHJ0bF9wcml2KGh3KSk7CisJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CisKKwkvKiA8MT4gdXNlICBtYWMtPmJhbmRzIGFzIG1lbSBmb3IgaHctPndpcGh5LT5iYW5kcyAqLworCXNiYW5kID0gJihydGxtYWMtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdKTsKKworCS8qCisJICogPDI+IHNldCBody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdCisJICogdG8gZGVmYXVsdCB2YWx1ZSgxVDFSKQorCSAqLworCW1lbWNweSgmKHJ0bG1hYy0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0pLCAmcnRsX2JhbmRfMmdoeiwKKwkgICAgICAgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQpKTsKKworCS8qIDwzPiBpbml0IGh0IGNhcCBiYXNlIG9uIGFudF9udW0gKi8KKwlfcnRsX2luaXRfaHdfaHRfY2FwYWIoaHcsICZzYmFuZC0+aHRfY2FwKTsKKworCS8qIDw0PiBzZXQgbWFjLT5zYmFuZCB0byB3aXBoeS0+c2JhbmQgKi8KKwlody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0gc2JhbmQ7CisKKwkvKiA8NT4gc2V0IGh3IGNhcHMgKi8KKwlody0+ZmxhZ3MgPSBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSB8CisJICAgIElFRUU4MDIxMV9IV19SWF9JTkNMVURFU19GQ1MgfAorCSAgICBJRUVFODAyMTFfSFdfQkVBQ09OX0ZJTFRFUiB8IElFRUU4MDIxMV9IV19BTVBEVV9BR0dSRUdBVElPTiB8IC8qUFMqLworCSAgICAvKklFRUU4MDIxMV9IV19TVVBQT1JUU19QUyB8ICovCisJICAgIC8qSUVFRTgwMjExX0hXX1BTX05VTExGVU5DX1NUQUNLIHwgKi8KKwkgICAgLypJRUVFODAyMTFfSFdfU1VQUE9SVFNfRFlOQU1JQ19QUyB8ICovCisJICAgIElFRUU4MDIxMV9IV19SRVBPUlRTX1RYX0FDS19TVEFUVVMgfCAwOworCisJaHctPndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgPQorCSAgICBCSVQoTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgfCBCSVQoTkw4MDIxMV9JRlRZUEVfQURIT0MpOworCisJaHctPndpcGh5LT5ydHNfdGhyZXNob2xkID0gMjM0NzsKKworCWh3LT5xdWV1ZXMgPSBBQ19NQVg7CisJaHctPmV4dHJhX3R4X2hlYWRyb29tID0gUlRMX1RYX0hFQURFUl9TSVpFOworCisJLyogVE9ETzogQ29ycmVjdCB0aGlzIHZhbHVlIGZvciBvdXIgaHcgKi8KKwkvKiBUT0RPOiBkZWZpbmUgdGhlc2UgaGFyZCBjb2RlIHZhbHVlICovCisJaHctPmNoYW5uZWxfY2hhbmdlX3RpbWUgPSAxMDA7CisJaHctPm1heF9saXN0ZW5faW50ZXJ2YWwgPSA1OworCWh3LT5tYXhfcmF0ZV90cmllcyA9IDQ7CisJLyogaHctPm1heF9yYXRlcyA9IDE7ICovCisKKwkvKiA8Nj4gbWFjIGFkZHJlc3MgKi8KKwlpZiAoaXNfdmFsaWRfZXRoZXJfYWRkcihydGxlZnVzZS0+ZGV2X2FkZHIpKSB7CisJCVNFVF9JRUVFODAyMTFfUEVSTV9BRERSKGh3LCBydGxlZnVzZS0+ZGV2X2FkZHIpOworCX0gZWxzZSB7CisJCXU4IHJ0bG1hY1tdID0geyAweDAwLCAweGUwLCAweDRjLCAweDgxLCAweDkyLCAweDAwIH07CisJCWdldF9yYW5kb21fYnl0ZXMoKHJ0bG1hYyArIChFVEhfQUxFTiAtIDEpKSwgMSk7CisJCVNFVF9JRUVFODAyMTFfUEVSTV9BRERSKGh3LCBydGxtYWMpOworCX0KKworfQorCitzdGF0aWMgdm9pZCBfcnRsX2luaXRfZGVmZXJyZWRfd29yayhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisKKwkvKiA8MT4gdGltZXIgKi8KKwlpbml0X3RpbWVyKCZydGxwcml2LT53b3Jrcy53YXRjaGRvZ190aW1lcik7CisJc2V0dXBfdGltZXIoJnJ0bHByaXYtPndvcmtzLndhdGNoZG9nX3RpbWVyLAorCQkgICAgcnRsX3dhdGNoX2RvZ190aW1lcl9jYWxsYmFjaywgKHVuc2lnbmVkIGxvbmcpaHcpOworCisJLyogPDI+IHdvcmsgcXVldWUgKi8KKwlydGxwcml2LT53b3Jrcy5odyA9IGh3OworCXJ0bHByaXYtPndvcmtzLnJ0bF93cSA9IGFsbG9jX3dvcmtxdWV1ZShydGxwcml2LT5jZmctPm5hbWUsIDAsIDApOworCUlOSVRfREVMQVlFRF9XT1JLKCZydGxwcml2LT53b3Jrcy53YXRjaGRvZ193cSwKKwkJCSAgKHZvaWQgKilydGxfd2F0Y2hkb2dfd3FfY2FsbGJhY2spOworCUlOSVRfREVMQVlFRF9XT1JLKCZydGxwcml2LT53b3Jrcy5pcHNfbmljX29mZl93cSwKKwkJCSAgKHZvaWQgKilydGxfaXBzX25pY19vZmZfd3FfY2FsbGJhY2spOworCit9CisKK3ZvaWQgcnRsX2RlaW5pdF9kZWZlcnJlZF93b3JrKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKworCWRlbF90aW1lcl9zeW5jKCZydGxwcml2LT53b3Jrcy53YXRjaGRvZ190aW1lcik7CisKKwljYW5jZWxfZGVsYXllZF93b3JrKCZydGxwcml2LT53b3Jrcy53YXRjaGRvZ193cSk7CisJY2FuY2VsX2RlbGF5ZWRfd29yaygmcnRscHJpdi0+d29ya3MuaXBzX25pY19vZmZfd3EpOworfQorCit2b2lkIHJ0bF9pbml0X3Jma2lsbChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisKKwlib29sIHJhZGlvX3N0YXRlOworCWJvb2wgYmxvY2tlZDsKKwl1OCB2YWxpZCA9IDA7CisKKwlyYWRpb19zdGF0ZSA9IHJ0bHByaXYtPmNmZy0+b3BzLT5yYWRpb19vbm9mZl9jaGVja2luZyhodywgJnZhbGlkKTsKKworCS8qc2V0IGluaXQgc3RhdGUgdG8gdGhhdCBvZiBzd2l0Y2ggKi8KKwlydGxwcml2LT5yZmtpbGwucmZraWxsX3N0YXRlID0gcmFkaW9fc3RhdGU7CisJcHJpbnRrKEtFUk5fSU5GTyAicnRsd2lmaTogd2lyZWxlc3Mgc3dpdGNoIGlzICVzXG4iLAorCSAgICAgICBydGxwcml2LT5yZmtpbGwucmZraWxsX3N0YXRlID8gIm9uIiA6ICJvZmYiKTsKKworCWlmICh2YWxpZCkgeworCQlydGxwcml2LT5yZmtpbGwucmZraWxsX3N0YXRlID0gcmFkaW9fc3RhdGU7CisKKwkJYmxvY2tlZCA9IChydGxwcml2LT5yZmtpbGwucmZraWxsX3N0YXRlID09IDEpID8gMCA6IDE7CisJCXdpcGh5X3Jma2lsbF9zZXRfaHdfc3RhdGUoaHctPndpcGh5LCBibG9ja2VkKTsKKwl9CisKKwl3aXBoeV9yZmtpbGxfc3RhcnRfcG9sbGluZyhody0+d2lwaHkpOworfQorCit2b2lkIHJ0bF9kZWluaXRfcmZraWxsKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXdpcGh5X3Jma2lsbF9zdG9wX3BvbGxpbmcoaHctPndpcGh5KTsKK30KKworaW50IHJ0bF9pbml0X2NvcmUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfbWFjICpydGxtYWMgPSBydGxfbWFjKHJ0bF9wcml2KGh3KSk7CisKKwkvKiA8MT4gaW5pdCBtYWM4MDIxMSAqLworCV9ydGxfaW5pdF9tYWM4MDIxMShodyk7CisJcnRsbWFjLT5odyA9IGh3OworCisJLyogPDI+IHJhdGUgY29udHJvbCByZWdpc3RlciAqLworCWlmIChydGxfcmF0ZV9jb250cm9sX3JlZ2lzdGVyKCkpIHsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19FTUVSRywKKwkJCSAoInJ0bDogVW5hYmxlIHRvIHJlZ2lzdGVyIHJ0bF9yYywiCisJCQkgICJ1c2UgZGVmYXVsdCBSQyAhIVxuIikpOworCX0gZWxzZSB7CisJCWh3LT5yYXRlX2NvbnRyb2xfYWxnb3JpdGhtID0gInJ0bF9yYyI7CisJfQorCisJLyoKKwkgKiA8Mz4gaW5pdCBDUkRBIG11c3QgY29tZSBhZnRlciBpbml0CisJICogbWFjODAyMTEgaHcgIGluIF9ydGxfaW5pdF9tYWM4MDIxMS4KKwkgKi8KKwlpZiAocnRsX3JlZ2RfaW5pdChodywgcnRsX3JlZ19ub3RpZmllcikpIHsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19FTUVSRywgKCJSRUdEIGluaXQgZmFpbGVkXG4iKSk7CisJCXJldHVybiAxOworCX0gZWxzZSB7CisJCS8qIENSREEgcmVnZCBoaW50IG11c3QgYWZ0ZXIgaW5pdCBDUkRBICovCisJCWlmIChyZWd1bGF0b3J5X2hpbnQoaHctPndpcGh5LCBydGxwcml2LT5yZWdkLmFscGhhMikpIHsKKwkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfV0FSTklORywKKwkJCQkgKCJyZWd1bGF0b3J5X2hpbnQgZmFpbFxuIikpOworCQl9CisJfQorCisJLyogPDQ+IGxvY2tzICovCisJbXV0ZXhfaW5pdCgmcnRscHJpdi0+bG9ja3MuY29uZl9tdXRleCk7CisJc3Bpbl9sb2NrX2luaXQoJnJ0bHByaXYtPmxvY2tzLmlwc19sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmcnRscHJpdi0+bG9ja3MuaXJxX3RoX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZydGxwcml2LT5sb2Nrcy5oMmNfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJnJ0bHByaXYtPmxvY2tzLnJmX3BzX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZydGxwcml2LT5sb2Nrcy5yZl9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmcnRscHJpdi0+bG9ja3MubHBzX2xvY2spOworCisJcnRsbWFjLT5saW5rX3N0YXRlID0gTUFDODAyMTFfTk9MSU5LOworCisJLyogPDU+IGluaXQgZGVmZXJyZWQgd29yayAqLworCV9ydGxfaW5pdF9kZWZlcnJlZF93b3JrKGh3KTsKKworCXJldHVybiAwOworfQorCit2b2lkIHJ0bF9kZWluaXRfY29yZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwkgLypSQyovCisJcnRsX3JhdGVfY29udHJvbF91bnJlZ2lzdGVyKCk7Cit9CisKK3ZvaWQgcnRsX2luaXRfcnhfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOworCisJcnRscHJpdi0+Y2ZnLT5vcHMtPmdldF9od19yZWcoaHcsIEhXX1ZBUl9SQ1IsICh1OCAqKSAoJm1hYy0+cnhfY29uZikpOworCXJ0bHByaXYtPmNmZy0+b3BzLT5nZXRfaHdfcmVnKGh3LCBIV19WQVJfTUdUX0ZJTFRFUiwKKwkJCQkgICAgICAodTggKikgKCZtYWMtPnJ4X21ndF9maWx0ZXIpKTsKKwlydGxwcml2LT5jZmctPm9wcy0+Z2V0X2h3X3JlZyhodywgSFdfVkFSX0NUUkxfRklMVEVSLAorCQkJCSAgICAgICh1OCAqKSAoJm1hYy0+cnhfY3RybF9maWx0ZXIpKTsKKwlydGxwcml2LT5jZmctPm9wcy0+Z2V0X2h3X3JlZyhodywgSFdfVkFSX0RBVEFfRklMVEVSLAorCQkJCSAgICAgICh1OCAqKSAoJm1hYy0+cnhfZGF0YV9maWx0ZXIpKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHR4IGluZm9ybWF0aW9uIGZ1bmN0aW9ucworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCBfcnRsX3F1cmV5X3Nob3J0cHJlYW1ibGVfbW9kZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkJICBzdHJ1Y3QgcnRsX3RjYl9kZXNjICp0Y2JfZGVzYywKKwkJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8pCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXU4IHJhdGVfZmxhZyA9IGluZm8tPmNvbnRyb2wucmF0ZXNbMF0uZmxhZ3M7CisKKwl0Y2JfZGVzYy0+dXNlX3Nob3J0cHJlYW1ibGUgPSBmYWxzZTsKKworCS8qIDFNIGNhbiBvbmx5IHVzZSBMb25nIFByZWFtYmxlLiAxMUIgc3BlYyAqLworCWlmICh0Y2JfZGVzYy0+aHdfcmF0ZSA9PSBydGxwcml2LT5jZmctPm1hcHNbUlRMX1JDX0NDS19SQVRFMU1dKQorCQlyZXR1cm47CisJZWxzZSBpZiAocmF0ZV9mbGFnICYgSUVFRTgwMjExX1RYX1JDX1VTRV9TSE9SVF9QUkVBTUJMRSkKKwkJdGNiX2Rlc2MtPnVzZV9zaG9ydHByZWFtYmxlID0gdHJ1ZTsKKworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgX3J0bF9xdWVyeV9zaG9ydGdpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJICAgICAgIHN0cnVjdCBydGxfdGNiX2Rlc2MgKnRjYl9kZXNjLAorCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOworCXU4IHJhdGVfZmxhZyA9IGluZm8tPmNvbnRyb2wucmF0ZXNbMF0uZmxhZ3M7CisKKwl0Y2JfZGVzYy0+dXNlX3Nob3J0Z2kgPSBmYWxzZTsKKworCWlmICghbWFjLT5odF9lbmFibGUpCisJCXJldHVybjsKKworCWlmICghbWFjLT5zZ2lfNDAgJiYgIW1hYy0+c2dpXzIwKQorCQlyZXR1cm47CisKKwlpZiAoKG1hYy0+YndfNDAgPT0gdHJ1ZSkgJiYgbWFjLT5zZ2lfNDApCisJCXRjYl9kZXNjLT51c2Vfc2hvcnRnaSA9IHRydWU7CisJZWxzZSBpZiAoKG1hYy0+YndfNDAgPT0gZmFsc2UpICYmIG1hYy0+c2dpXzIwKQorCQl0Y2JfZGVzYy0+dXNlX3Nob3J0Z2kgPSB0cnVlOworCisJaWYgKCEocmF0ZV9mbGFnICYgSUVFRTgwMjExX1RYX1JDX1NIT1JUX0dJKSkKKwkJdGNiX2Rlc2MtPnVzZV9zaG9ydGdpID0gZmFsc2U7CisKK30KKworc3RhdGljIHZvaWQgX3J0bF9xdWVyeV9wcm90ZWN0aW9uX21vZGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgICAgIHN0cnVjdCBydGxfdGNiX2Rlc2MgKnRjYl9kZXNjLAorCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8pCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXU4IHJhdGVfZmxhZyA9IGluZm8tPmNvbnRyb2wucmF0ZXNbMF0uZmxhZ3M7CisKKwkvKiBDb21tb24gU2V0dGluZ3MgKi8KKwl0Y2JfZGVzYy0+Yl9ydHNfc3RiYyA9IGZhbHNlOworCXRjYl9kZXNjLT5iX2N0c19lbmFibGUgPSBmYWxzZTsKKwl0Y2JfZGVzYy0+cnRzX3NjID0gMDsKKwl0Y2JfZGVzYy0+Yl9ydHNfYncgPSBmYWxzZTsKKwl0Y2JfZGVzYy0+Yl9ydHNfdXNlX3Nob3J0cHJlYW1ibGUgPSBmYWxzZTsKKwl0Y2JfZGVzYy0+Yl9ydHNfdXNlX3Nob3J0Z2kgPSBmYWxzZTsKKworCWlmIChyYXRlX2ZsYWcgJiBJRUVFODAyMTFfVFhfUkNfVVNFX0NUU19QUk9URUNUKSB7CisJCS8qIFVzZSBDVFMtdG8tU0VMRiBpbiBwcm90ZWN0aW9uIG1vZGUuICovCisJCXRjYl9kZXNjLT5iX3J0c19lbmFibGUgPSB0cnVlOworCQl0Y2JfZGVzYy0+Yl9jdHNfZW5hYmxlID0gdHJ1ZTsKKwkJdGNiX2Rlc2MtPnJ0c19yYXRlID0gcnRscHJpdi0+Y2ZnLT5tYXBzW1JUTF9SQ19PRkRNX1JBVEUyNE1dOworCX0gZWxzZSBpZiAocmF0ZV9mbGFnICYgSUVFRTgwMjExX1RYX1JDX1VTRV9SVFNfQ1RTKSB7CisJCS8qIFVzZSBSVFMtQ1RTIGluIHByb3RlY3Rpb24gbW9kZS4gKi8KKwkJdGNiX2Rlc2MtPmJfcnRzX2VuYWJsZSA9IHRydWU7CisJCXRjYl9kZXNjLT5ydHNfcmF0ZSA9IHJ0bHByaXYtPmNmZy0+bWFwc1tSVExfUkNfT0ZETV9SQVRFMjRNXTsKKwl9CisKK30KKworc3RhdGljIHZvaWQgX3J0bF90eHJhdGVfc2VsZWN0bW9kZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICBzdHJ1Y3QgcnRsX3RjYl9kZXNjICp0Y2JfZGVzYykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRsX3ByaXYoaHcpKTsKKworCWlmICghdGNiX2Rlc2MtPmRpc2FibGVfcmF0ZWZhbGxiYWNrIHx8ICF0Y2JfZGVzYy0+dXNlX2RyaXZlcl9yYXRlKSB7CisJCWlmIChtYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQorCQkJdGNiX2Rlc2MtPnJhdHJfaW5kZXggPSAwOworCQllbHNlIGlmIChtYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgeworCQkJaWYgKHRjYl9kZXNjLT5iX211bHRpY2FzdCB8fCB0Y2JfZGVzYy0+Yl9icm9hZGNhc3QpIHsKKwkJCQl0Y2JfZGVzYy0+aHdfcmF0ZSA9CisJCQkJICAgIHJ0bHByaXYtPmNmZy0+bWFwc1tSVExfUkNfQ0NLX1JBVEUyTV07CisJCQkJdGNiX2Rlc2MtPnVzZV9kcml2ZXJfcmF0ZSA9IDE7CisJCQl9IGVsc2UgeworCQkJCS8qIFRPRE8gKi8KKwkJCX0KKwkJfQorCX0KKworCWlmIChydGxwcml2LT5kbS5iX3VzZXJhbWFzaykgeworCQkvKiBUT0RPIHdlIHdpbGwgZGlmZmVyZW50aWF0ZSBhZGhvYyBhbmQgc3RhdGlvbiBmdXRydWUgICovCisJCXRjYl9kZXNjLT5tYWNfaWQgPSAwOworCisJCWlmICgobWFjLT5tb2RlID09IFdJUkVMRVNTX01PREVfTl8yNEcpIHx8CisJCSAgICAobWFjLT5tb2RlID09IFdJUkVMRVNTX01PREVfTl81RykpIHsKKwkJCXRjYl9kZXNjLT5yYXRyX2luZGV4ID0gUkFUUl9JTlhfV0lSRUxFU1NfTkdCOworCQl9IGVsc2UgaWYgKG1hYy0+bW9kZSAmIFdJUkVMRVNTX01PREVfRykgeworCQkJdGNiX2Rlc2MtPnJhdHJfaW5kZXggPSBSQVRSX0lOWF9XSVJFTEVTU19HQjsKKwkJfSBlbHNlIGlmIChtYWMtPm1vZGUgJiBXSVJFTEVTU19NT0RFX0IpIHsKKwkJCXRjYl9kZXNjLT5yYXRyX2luZGV4ID0gUkFUUl9JTlhfV0lSRUxFU1NfQjsKKwkJfQorCX0KKworfQorCitzdGF0aWMgdm9pZCBfcnRsX3F1ZXJ5X2JhbmR3aWR0aF9tb2RlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICAgIHN0cnVjdCBydGxfdGNiX2Rlc2MgKnRjYl9kZXNjKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOworCisJdGNiX2Rlc2MtPmJfcGFja2V0X2J3ID0gZmFsc2U7CisKKwlpZiAoIW1hYy0+YndfNDAgfHwgIW1hYy0+aHRfZW5hYmxlKQorCQlyZXR1cm47CisKKwlpZiAodGNiX2Rlc2MtPmJfbXVsdGljYXN0IHx8IHRjYl9kZXNjLT5iX2Jyb2FkY2FzdCkKKwkJcmV0dXJuOworCisJLyp1c2UgbGVnZW5jeSByYXRlLCBzaGFsbCB1c2UgMjBNSHogKi8KKwlpZiAodGNiX2Rlc2MtPmh3X3JhdGUgPD0gcnRscHJpdi0+Y2ZnLT5tYXBzW1JUTF9SQ19PRkRNX1JBVEU1NE1dKQorCQlyZXR1cm47CisKKwl0Y2JfZGVzYy0+Yl9wYWNrZXRfYncgPSB0cnVlOworfQorCitzdGF0aWMgdTggX3J0bF9nZXRfaGlnaGVzdF9uX3JhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGh5ICpydGxwaHkgPSAmKHJ0bHByaXYtPnBoeSk7CisJdTggaHdfcmF0ZTsKKworCWlmIChnZXRfcmZfdHlwZShydGxwaHkpID09IFJGXzJUMlIpCisJCWh3X3JhdGUgPSBydGxwcml2LT5jZmctPm1hcHNbUlRMX1JDX0hUX1JBVEVNQ1MxNV07CisJZWxzZQorCQlod19yYXRlID0gcnRscHJpdi0+Y2ZnLT5tYXBzW1JUTF9SQ19IVF9SQVRFTUNTN107CisKKwlyZXR1cm4gaHdfcmF0ZTsKK30KKwordm9pZCBydGxfZ2V0X3RjYl9kZXNjKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8sCisJCSAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBydGxfdGNiX2Rlc2MgKnRjYl9kZXNjKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX21hYyAqcnRsbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikoc2tiLT5kYXRhKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnR4cmF0ZTsKKwl1MTYgZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpOworCisJbWVtc2V0KHRjYl9kZXNjLCAwLCBzaXplb2Yoc3RydWN0IHJ0bF90Y2JfZGVzYykpOworCisJaWYgKGllZWU4MDIxMV9pc19kYXRhKGZjKSkgeworCQl0eHJhdGUgPSBpZWVlODAyMTFfZ2V0X3R4X3JhdGUoaHcsIGluZm8pOworCQl0Y2JfZGVzYy0+aHdfcmF0ZSA9IHR4cmF0ZS0+aHdfdmFsdWU7CisKKwkJLyoKKwkJICp3ZSBzZXQgZGF0YSByYXRlIFJUTF9SQ19DQ0tfUkFURTFNCisJCSAqaW4gcnRsX3JjLmMgICBpZiBza2IgaXMgc3BlY2lhbCBkYXRhIG9yCisJCSAqbWd0IHdoaWNoIG5lZWQgbG93IGRhdGEgcmF0ZS4KKwkJICovCisKKwkJLyoKKwkJICpTbyB0Y2JfZGVzYy0+aHdfcmF0ZSBpcyBqdXN0IHVzZWQgZm9yCisJCSAqc3BlY2lhbCBkYXRhIGFuZCBtZ3QgZnJhbWVzCisJCSAqLworCQlpZiAodGNiX2Rlc2MtPmh3X3JhdGUgPCBydGxwcml2LT5jZmctPm1hcHNbUlRMX1JDX0NDS19SQVRFMTFNXSkgeworCQkJdGNiX2Rlc2MtPnVzZV9kcml2ZXJfcmF0ZSA9IHRydWU7CisJCQl0Y2JfZGVzYy0+cmF0cl9pbmRleCA9IDc7CisKKwkJCXRjYl9kZXNjLT5od19yYXRlID0KKwkJCSAgICBydGxwcml2LT5jZmctPm1hcHNbUlRMX1JDX0NDS19SQVRFMU1dOworCQkJdGNiX2Rlc2MtPmRpc2FibGVfcmF0ZWZhbGxiYWNrID0gMTsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKmJlY2F1c2UgaHcgd2lsbCBuZXJ2ZXIgdXNlIGh3X3JhdGUKKwkJCSAqd2hlbiB0Y2JfZGVzYy0+dXNlX2RyaXZlcl9yYXRlID0gZmFsc2UKKwkJCSAqc28gd2UgbmV2ZXIgc2V0IGhpZ2hlc3QgTiByYXRlIGhlcmUsCisJCQkgKmFuZCBOIHJhdGUgd2lsbCBhbGwgYmUgY29udHJvbGVkIGJ5IEZXCisJCQkgKndoZW4gdGNiX2Rlc2MtPnVzZV9kcml2ZXJfcmF0ZSA9IGZhbHNlCisJCQkgKi8KKwkJCWlmIChydGxtYWMtPmh0X2VuYWJsZSkgeworCQkJCXRjYl9kZXNjLT5od19yYXRlID0gX3J0bF9nZXRfaGlnaGVzdF9uX3JhdGUoaHcpOworCQkJfSBlbHNlIHsKKwkJCQlpZiAocnRsbWFjLT5tb2RlID09IFdJUkVMRVNTX01PREVfQikgeworCQkJCQl0Y2JfZGVzYy0+aHdfcmF0ZSA9CisJCQkJCSAgIHJ0bHByaXYtPmNmZy0+bWFwc1tSVExfUkNfQ0NLX1JBVEUxMU1dOworCQkJCX0gZWxzZSB7CisJCQkJCXRjYl9kZXNjLT5od19yYXRlID0KKwkJCQkJICAgcnRscHJpdi0+Y2ZnLT5tYXBzW1JUTF9SQ19PRkRNX1JBVEU1NE1dOworCQkJCX0KKwkJCX0KKwkJfQorCisJCWlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihpZWVlODAyMTFfZ2V0X0RBKGhkcikpKQorCQkJdGNiX2Rlc2MtPmJfbXVsdGljYXN0ID0gMTsKKwkJZWxzZSBpZiAoaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIoaWVlZTgwMjExX2dldF9EQShoZHIpKSkKKwkJCXRjYl9kZXNjLT5iX2Jyb2FkY2FzdCA9IDE7CisKKwkJX3J0bF90eHJhdGVfc2VsZWN0bW9kZShodywgdGNiX2Rlc2MpOworCQlfcnRsX3F1ZXJ5X2JhbmR3aWR0aF9tb2RlKGh3LCB0Y2JfZGVzYyk7CisJCV9ydGxfcXVyZXlfc2hvcnRwcmVhbWJsZV9tb2RlKGh3LCB0Y2JfZGVzYywgaW5mbyk7CisJCV9ydGxfcXVlcnlfc2hvcnRnaShodywgdGNiX2Rlc2MsIGluZm8pOworCQlfcnRsX3F1ZXJ5X3Byb3RlY3Rpb25fbW9kZShodywgdGNiX2Rlc2MsIGluZm8pOworCX0gZWxzZSB7CisJCXRjYl9kZXNjLT51c2VfZHJpdmVyX3JhdGUgPSB0cnVlOworCQl0Y2JfZGVzYy0+cmF0cl9pbmRleCA9IDc7CisJCXRjYl9kZXNjLT5kaXNhYmxlX3JhdGVmYWxsYmFjayA9IDE7CisJCXRjYl9kZXNjLT5tYWNfaWQgPSAwOworCisJCXRjYl9kZXNjLT5od19yYXRlID0gcnRscHJpdi0+Y2ZnLT5tYXBzW1JUTF9SQ19DQ0tfUkFURTFNXTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKHJ0bF9nZXRfdGNiX2Rlc2MpOworCitib29sIHJ0bF90eF9tZ210X3Byb2Moc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKShza2ItPmRhdGEpOworCXUxNiBmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCk7CisKKwlpZiAoaWVlZTgwMjExX2lzX2F1dGgoZmMpKSB7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfU0VORCwgREJHX0RNRVNHLCAoIk1BQzgwMjExX0xJTktJTkdcbiIpKTsKKwkJcnRsX2lwc19uaWNfb24oaHcpOworCisJCW1hYy0+bGlua19zdGF0ZSA9IE1BQzgwMjExX0xJTktJTkc7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgcnRsX2FjdGlvbl9wcm9jKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBpc190eCkKK3sKKwlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikoc2tiLT5kYXRhKTsKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJdTE2IGZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKTsKKwl1OCAqYWN0ID0gKHU4ICopICgoKHU4ICopIHNrYi0+ZGF0YSArIE1BQzgwMjExXzNBRERSX0xFTikpOworCXU4IGNhdGVnb3J5OworCisJaWYgKCFpZWVlODAyMTFfaXNfYWN0aW9uKGZjKSkKKwkJcmV0dXJuIHRydWU7CisKKwljYXRlZ29yeSA9ICphY3Q7CisJYWN0Kys7CisJc3dpdGNoIChjYXRlZ29yeSkgeworCWNhc2UgQUNUX0NBVF9CQToKKwkJc3dpdGNoICgqYWN0KSB7CisJCWNhc2UgQUNUX0FEREJBUkVROgorCQkJaWYgKG1hYy0+YWN0X3NjYW5uaW5nKQorCQkJCXJldHVybiBmYWxzZTsKKworCQkJUlRfVFJBQ0UocnRscHJpdiwgKENPTVBfU0VORCB8IENPTVBfUkVDViksIERCR19ETUVTRywKKwkJCQkgKCIlcyBBQ1RfQUREQkFSRVEgRnJvbSA6IiBNQUNfRk1UICJcbiIsCisJCQkJICBpc190eCA/ICJUeCIgOiAiUngiLCBNQUNfQVJHKGhkci0+YWRkcjIpKSk7CisJCQlicmVhazsKKwkJY2FzZSBBQ1RfQUREQkFSU1A6CisJCQlSVF9UUkFDRShydGxwcml2LCAoQ09NUF9TRU5EIHwgQ09NUF9SRUNWKSwgREJHX0RNRVNHLAorCQkJCSAoIiVzIEFDVF9BRERCQVJTUCBGcm9tIDoiIE1BQ19GTVQgIlxuIiwKKwkJCQkgIGlzX3R4ID8gIlR4IiA6ICJSeCIsIE1BQ19BUkcoaGRyLT5hZGRyMikpKTsKKwkJCWJyZWFrOworCQljYXNlIEFDVF9ERUxCQToKKwkJCVJUX1RSQUNFKHJ0bHByaXYsIChDT01QX1NFTkQgfCBDT01QX1JFQ1YpLCBEQkdfRE1FU0csCisJCQkJICgiQUNUX0FEREJBREVMIEZyb20gOiIgTUFDX0ZNVCAiXG4iLAorCQkJCSAgTUFDX0FSRyhoZHItPmFkZHIyKSkpOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKKy8qc2hvdWxkIGNhbGwgYmVmb3JlIHNvZnR3YXJlIGVuYyovCit1OCBydGxfaXNfc3BlY2lhbF9kYXRhKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBpc190eCkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKShza2ItPmRhdGEpOworCXN0cnVjdCBydGxfcHNfY3RsICpwcHNjID0gcnRsX3BzYyhydGxfcHJpdihodykpOworCXUxNiBmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCk7CisJdTE2IGV0aGVyX3R5cGU7CisJdTggbWFjX2hkcl9sZW4gPSBpZWVlODAyMTFfZ2V0X2hkcmxlbl9mcm9tX3NrYihza2IpOworCWNvbnN0IHN0cnVjdCBpcGhkciAqaXA7CisKKwlpZiAoIWllZWU4MDIxMV9pc19kYXRhKGZjKSkKKwkJZ290byBlbmQ7CisKKwlpZiAoaWVlZTgwMjExX2lzX251bGxmdW5jKGZjKSkKKwkJcmV0dXJuIHRydWU7CisKKwlpcCA9IChzdHJ1Y3QgaXBoZHIgKikoKHU4ICopIHNrYi0+ZGF0YSArIG1hY19oZHJfbGVuICsKKwkJCSAgICAgIFNOQVBfU0laRSArIFBST1RPQ19UWVBFX1NJWkUpOworCWV0aGVyX3R5cGUgPSAqKHUxNiAqKSAoKHU4ICopIHNrYi0+ZGF0YSArIG1hY19oZHJfbGVuICsgU05BUF9TSVpFKTsKKwlldGhlcl90eXBlID0gbnRvaHMoZXRoZXJfdHlwZSk7CisKKwlpZiAoRVRIX1BfSVAgPT0gZXRoZXJfdHlwZSkgeworCQlpZiAoSVBQUk9UT19VRFAgPT0gaXAtPnByb3RvY29sKSB7CisJCQlzdHJ1Y3QgdWRwaGRyICp1ZHAgPSAoc3RydWN0IHVkcGhkciAqKSgodTggKikgaXAgKworCQkJCQkJCSAgICAgICAoaXAtPmlobCA8PCAyKSk7CisJCQlpZiAoKCgoKHU4ICopIHVkcClbMV0gPT0gNjgpICYmCisJCQkgICAgICgoKHU4ICopIHVkcClbM10gPT0gNjcpKSB8fAorCQkJICAgICgoKCh1OCAqKSB1ZHApWzFdID09IDY3KSAmJgorCQkJICAgICAoKCh1OCAqKSB1ZHApWzNdID09IDY4KSkpIHsKKwkJCQkvKgorCQkJCSAqIDY4IDogVURQIEJPT1RQIGNsaWVudAorCQkJCSAqIDY3IDogVURQIEJPT1RQIHNlcnZlcgorCQkJCSAqLworCQkJCVJUX1RSQUNFKHJ0bHByaXYsIChDT01QX1NFTkQgfCBDT01QX1JFQ1YpLAorCQkJCQkgREJHX0RNRVNHLCAoImRoY3AgJXMgISFcbiIsCisJCQkJCQkgICAgIChpc190eCkgPyAiVHgiIDogIlJ4IikpOworCisJCQkJaWYgKGlzX3R4KSB7CisJCQkJCXJ0bF9scHNfbGVhdmUoaHcpOworCQkJCQlwcHNjLT5sYXN0X2RlbGF5bHBzX3N0YW1wX2ppZmZpZXMgPQorCQkJCQkgICAgamlmZmllczsKKwkJCQl9CisKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKwkJfQorCX0gZWxzZSBpZiAoRVRIX1BfQVJQID09IGV0aGVyX3R5cGUpIHsKKwkJaWYgKGlzX3R4KSB7CisJCQlydGxfbHBzX2xlYXZlKGh3KTsKKwkJCXBwc2MtPmxhc3RfZGVsYXlscHNfc3RhbXBfamlmZmllcyA9IGppZmZpZXM7CisJCX0KKworCQlyZXR1cm4gdHJ1ZTsKKwl9IGVsc2UgaWYgKEVUSF9QX1BBRSA9PSBldGhlcl90eXBlKSB7CisJCVJUX1RSQUNFKHJ0bHByaXYsIChDT01QX1NFTkQgfCBDT01QX1JFQ1YpLCBEQkdfRE1FU0csCisJCQkgKCI4MDIuMVggJXMgRUFQT0wgcGt0ISFcbiIsIChpc190eCkgPyAiVHgiIDogIlJ4IikpOworCisJCWlmIChpc190eCkgeworCQkJcnRsX2xwc19sZWF2ZShodyk7CisJCQlwcHNjLT5sYXN0X2RlbGF5bHBzX3N0YW1wX2ppZmZpZXMgPSBqaWZmaWVzOworCQl9CisKKwkJcmV0dXJuIHRydWU7CisJfSBlbHNlIGlmICgweDg2REQgPT0gZXRoZXJfdHlwZSkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKK2VuZDoKKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBmdW5jdGlvbnMgY2FsbGVkIGJ5IGNvcmUuYworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgcnRsX3R4X2FnZ19zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgY29uc3QgdTggKnJhLCB1MTYgdGlkLCB1MTYgKnNzbikKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF90aWRfZGF0YSAqdGlkX2RhdGE7CisJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRsX3ByaXYoaHcpKTsKKworCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfU0VORCwgREJHX0RNRVNHLAorCQkgKCJvbiByYSA9ICVwTSB0aWQgPSAlZFxuIiwgcmEsIHRpZCkpOworCisJaWYgKHVubGlrZWx5KHRpZCA+PSBNQVhfVElEX0NPVU5UKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAobWFjLT50aWRzW3RpZF0uYWdnLmFnZ19zdGF0ZSAhPSBSVExfQUdHX09GRikgeworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX1dBUk5JTkcsCisJCQkgKCJTdGFydCBBR0cgd2hlbiBzdGF0ZSBpcyBub3QgUlRMX0FHR19PRkYgIVxuIikpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCXRpZF9kYXRhID0gJm1hYy0+dGlkc1t0aWRdOworCSpzc24gPSBTRVFfVE9fU04odGlkX2RhdGEtPnNlcV9udW1iZXIpOworCisJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9TRU5ELCBEQkdfRE1FU0csCisJCSAoIkhXIHF1ZXVlIGlzIGVtcHR5IHRpZDolZFxuIiwgdGlkKSk7CisJdGlkX2RhdGEtPmFnZy5hZ2dfc3RhdGUgPSBSVExfQUdHX09OOworCisJaWVlZTgwMjExX3N0YXJ0X3R4X2JhX2NiX2lycXNhZmUobWFjLT52aWYsIHJhLCB0aWQpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBydGxfdHhfYWdnX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGNvbnN0IHU4ICogcmEsIHUxNiB0aWQpCit7CisJaW50IHNzbiA9IC0xOworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOworCXN0cnVjdCBydGxfdGlkX2RhdGEgKnRpZF9kYXRhOworCisJaWYgKCFyYSkgeworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX0VNRVJHLCAoInJhID0gTlVMTFxuIikpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAodW5saWtlbHkodGlkID49IE1BWF9USURfQ09VTlQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChtYWMtPnRpZHNbdGlkXS5hZ2cuYWdnX3N0YXRlICE9IFJUTF9BR0dfT04pCisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfV0FSTklORywKKwkJCSAoIlN0b3BwaW5nIEFHRyB3aGlsZSBzdGF0ZSBub3QgT04gb3Igc3RhcnRpbmdcbiIpKTsKKworCXRpZF9kYXRhID0gJm1hYy0+dGlkc1t0aWRdOworCXNzbiA9ICh0aWRfZGF0YS0+c2VxX251bWJlciAmIElFRUU4MDIxMV9TQ1RMX1NFUSkgPj4gNDsKKworCW1hYy0+dGlkc1t0aWRdLmFnZy5hZ2dfc3RhdGUgPSBSVExfQUdHX09GRjsKKworCWllZWU4MDIxMV9zdG9wX3R4X2JhX2NiX2lycXNhZmUobWFjLT52aWYsIHJhLCB0aWQpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiB3cSAmIHRpbWVyIGNhbGxiYWNrIGZ1bmN0aW9ucworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIHJ0bF93YXRjaGRvZ193cV9jYWxsYmFjayh2b2lkICpkYXRhKQoreworCXN0cnVjdCBydGxfd29ya3MgKnJ0bHdvcmtzID0gY29udGFpbmVyX29mX2R3b3JrX3J0bChkYXRhLAorCQkJCQkJCSAgICBzdHJ1Y3QgcnRsX3dvcmtzLAorCQkJCQkJCSAgICB3YXRjaGRvZ193cSk7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBydGx3b3Jrcy0+aHc7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bF9wcml2KGh3KSk7CisJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRsX3ByaXYoaHcpKTsKKworCWJvb2wgYl9idXN5dHJhZmZpYyA9IGZhbHNlOworCWJvb2wgYl9oaWdoZXJfYnVzeXRyYWZmaWMgPSBmYWxzZTsKKwlib29sIGJfaGlnaGVyX2J1c3lyeHRyYWZmaWMgPSBmYWxzZTsKKwlib29sIGJfaGlnaGVyX2J1c3l0eHRyYWZmaWMgPSBmYWxzZTsKKworCXU4IGlkeCA9IDA7CisJdTMyIHJ4X2NudF9pbnA0ZXJpb2QgPSAwOworCXUzMiB0eF9jbnRfaW5wNGVyaW9kID0gMDsKKwl1MzIgYXZlcl9yeF9jbnRfaW5wZXJpb2QgPSAwOworCXUzMiBhdmVyX3R4X2NudF9pbnBlcmlvZCA9IDA7CisKKwlib29sIGJlbnRlcl9wcyA9IGZhbHNlOworCisJaWYgKGlzX2hhbF9zdG9wKHJ0bGhhbCkpCisJCXJldHVybjsKKworCS8qIDwxPiBEZXRlcm1pbmUgaWYgYWN0aW9uIGZyYW1lIGlzIGFsbG93ZWQgKi8KKwlpZiAobWFjLT5saW5rX3N0YXRlID4gTUFDODAyMTFfTk9MSU5LKSB7CisJCWlmIChtYWMtPmNudF9hZnRlcl9saW5rZWQgPCAyMCkKKwkJCW1hYy0+Y250X2FmdGVyX2xpbmtlZCsrOworCX0gZWxzZSB7CisJCW1hYy0+Y250X2FmdGVyX2xpbmtlZCA9IDA7CisJfQorCisJLyogPDI+IERNICovCisJcnRscHJpdi0+Y2ZnLT5vcHMtPmRtX3dhdGNoZG9nKGh3KTsKKworCS8qCisJICo8Mz4gdG8gY2hlY2sgaWYgdHJhZmZpYyBidXN5LCBpZgorCSAqIGJ1c3l0cmFmZmljIHdlIGRvbid0IGNoYW5nZSBjaGFubmVsCisJICovCisJaWYgKG1hYy0+bGlua19zdGF0ZSA+PSBNQUM4MDIxMV9MSU5LRUQpIHsKKworCQkvKiAoMSkgZ2V0IGF2ZXJfcnhfY250X2lucGVyaW9kICYgYXZlcl90eF9jbnRfaW5wZXJpb2QgKi8KKwkJZm9yIChpZHggPSAwOyBpZHggPD0gMjsgaWR4KyspIHsKKwkJCXJ0bHByaXYtPmxpbmtfaW5mby5udW1fcnhfaW40cGVyaW9kW2lkeF0gPQorCQkJICAgIHJ0bHByaXYtPmxpbmtfaW5mby5udW1fcnhfaW40cGVyaW9kW2lkeCArIDFdOworCQkJcnRscHJpdi0+bGlua19pbmZvLm51bV90eF9pbjRwZXJpb2RbaWR4XSA9CisJCQkgICAgcnRscHJpdi0+bGlua19pbmZvLm51bV90eF9pbjRwZXJpb2RbaWR4ICsgMV07CisJCX0KKwkJcnRscHJpdi0+bGlua19pbmZvLm51bV9yeF9pbjRwZXJpb2RbM10gPQorCQkgICAgcnRscHJpdi0+bGlua19pbmZvLm51bV9yeF9pbnBlcmlvZDsKKwkJcnRscHJpdi0+bGlua19pbmZvLm51bV90eF9pbjRwZXJpb2RbM10gPQorCQkgICAgcnRscHJpdi0+bGlua19pbmZvLm51bV90eF9pbnBlcmlvZDsKKwkJZm9yIChpZHggPSAwOyBpZHggPD0gMzsgaWR4KyspIHsKKwkJCXJ4X2NudF9pbnA0ZXJpb2QgKz0KKwkJCSAgICBydGxwcml2LT5saW5rX2luZm8ubnVtX3J4X2luNHBlcmlvZFtpZHhdOworCQkJdHhfY250X2lucDRlcmlvZCArPQorCQkJICAgIHJ0bHByaXYtPmxpbmtfaW5mby5udW1fdHhfaW40cGVyaW9kW2lkeF07CisJCX0KKwkJYXZlcl9yeF9jbnRfaW5wZXJpb2QgPSByeF9jbnRfaW5wNGVyaW9kIC8gNDsKKwkJYXZlcl90eF9jbnRfaW5wZXJpb2QgPSB0eF9jbnRfaW5wNGVyaW9kIC8gNDsKKworCQkvKiAoMikgY2hlY2sgdHJhZmZpYyBidXN5ICovCisJCWlmIChhdmVyX3J4X2NudF9pbnBlcmlvZCA+IDEwMCB8fCBhdmVyX3R4X2NudF9pbnBlcmlvZCA+IDEwMCkKKwkJCWJfYnVzeXRyYWZmaWMgPSB0cnVlOworCisJCS8qIEhpZ2hlciBUeC9SeCBkYXRhLiAqLworCQlpZiAoYXZlcl9yeF9jbnRfaW5wZXJpb2QgPiA0MDAwIHx8CisJCSAgICBhdmVyX3R4X2NudF9pbnBlcmlvZCA+IDQwMDApIHsKKwkJCWJfaGlnaGVyX2J1c3l0cmFmZmljID0gdHJ1ZTsKKworCQkJLyogRXh0cmVtZWx5IGhpZ2ggUnggZGF0YS4gKi8KKwkJCWlmIChhdmVyX3J4X2NudF9pbnBlcmlvZCA+IDUwMDApCisJCQkJYl9oaWdoZXJfYnVzeXJ4dHJhZmZpYyA9IHRydWU7CisJCQllbHNlCisJCQkJYl9oaWdoZXJfYnVzeXR4dHJhZmZpYyA9IGZhbHNlOworCQl9CisKKwkJaWYgKCgocnRscHJpdi0+bGlua19pbmZvLm51bV9yeF9pbnBlcmlvZCArCisJCSAgICAgIHJ0bHByaXYtPmxpbmtfaW5mby5udW1fdHhfaW5wZXJpb2QpID4gOCkgfHwKKwkJICAgIChydGxwcml2LT5saW5rX2luZm8ubnVtX3J4X2lucGVyaW9kID4gMikpCisJCQliZW50ZXJfcHMgPSBmYWxzZTsKKwkJZWxzZQorCQkJYmVudGVyX3BzID0gdHJ1ZTsKKworCQkvKiBMZWlzdXJlUFMgb25seSB3b3JrIGluIGluZnJhIG1vZGUuICovCisJCWlmIChiZW50ZXJfcHMpCisJCQlydGxfbHBzX2VudGVyKGh3KTsKKwkJZWxzZQorCQkJcnRsX2xwc19sZWF2ZShodyk7CisJfQorCisJcnRscHJpdi0+bGlua19pbmZvLm51bV9yeF9pbnBlcmlvZCA9IDA7CisJcnRscHJpdi0+bGlua19pbmZvLm51bV90eF9pbnBlcmlvZCA9IDA7CisKKwlydGxwcml2LT5saW5rX2luZm8uYl9idXN5dHJhZmZpYyA9IGJfYnVzeXRyYWZmaWM7CisJcnRscHJpdi0+bGlua19pbmZvLmJfaGlnaGVyX2J1c3l0cmFmZmljID0gYl9oaWdoZXJfYnVzeXRyYWZmaWM7CisJcnRscHJpdi0+bGlua19pbmZvLmJfaGlnaGVyX2J1c3lyeHRyYWZmaWMgPSBiX2hpZ2hlcl9idXN5cnh0cmFmZmljOworCit9CisKK3ZvaWQgcnRsX3dhdGNoX2RvZ190aW1lcl9jYWxsYmFjayh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSAoc3RydWN0IGllZWU4MDIxMV9odyAqKWRhdGE7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCisJcXVldWVfZGVsYXllZF93b3JrKHJ0bHByaXYtPndvcmtzLnJ0bF93cSwKKwkJCSAgICZydGxwcml2LT53b3Jrcy53YXRjaGRvZ193cSwgMCk7CisKKwltb2RfdGltZXIoJnJ0bHByaXYtPndvcmtzLndhdGNoZG9nX3RpbWVyLAorCQkgIGppZmZpZXMgKyBNU0VDUyhSVExfV0FUQ0hfRE9HX1RJTUUpKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHN5c2ZzIGZ1bmN0aW9ucworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3NpemVfdCBydGxfc2hvd19kZWJ1Z19sZXZlbChzdHJ1Y3QgZGV2aWNlICpkLAorCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gZGV2X2dldF9kcnZkYXRhKGQpOworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JTA4WFxuIiwgcnRscHJpdi0+ZGJnLmdsb2JhbF9kZWJ1Z2xldmVsKTsKK30KKworc3RhdGljIHNzaXplX3QgcnRsX3N0b3JlX2RlYnVnX2xldmVsKHN0cnVjdCBkZXZpY2UgKmQsCisJCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gZGV2X2dldF9kcnZkYXRhKGQpOworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKwlpbnQgcmV0OworCisJcmV0ID0gc3RyaWN0X3N0cnRvdWwoYnVmLCAwLCAmdmFsKTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlcyBpcyBub3QgaW4gaGV4IG9yIGRlY2ltYWwgZm9ybS5cbiIsIGJ1Zik7CisJfSBlbHNlIHsKKwkJcnRscHJpdi0+ZGJnLmdsb2JhbF9kZWJ1Z2xldmVsID0gdmFsOworCQlwcmludGsoS0VSTl9ERUJVRyAiZGVidWdsZXZlbDoleFxuIiwKKwkJICAgICAgIHJ0bHByaXYtPmRiZy5nbG9iYWxfZGVidWdsZXZlbCk7CisJfQorCisJcmV0dXJuIHN0cm5sZW4oYnVmLCBjb3VudCk7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihkZWJ1Z19sZXZlbCwgU19JV1VTUiB8IFNfSVJVR08sCisJCSAgIHJ0bF9zaG93X2RlYnVnX2xldmVsLCBydGxfc3RvcmVfZGVidWdfbGV2ZWwpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqcnRsX3N5c2ZzX2VudHJpZXNbXSA9IHsKKworCSZkZXZfYXR0cl9kZWJ1Z19sZXZlbC5hdHRyLAorCisJTlVMTAorfTsKKworLyoKKyAqICJuYW1lIiBpcyBmb2xkZXIgbmFtZSB3aXRjaCB3aWxsIGJlCisgKiBwdXQgaW4gZGV2aWNlIGRpcmVjdG9yeSBsaWtlIDoKKyAqIHN5cy9kZXZpY2VzL3BjaTAwMDA6MDAvMDAwMDowMDoxYy40LworICogMDAwMDowNjowMC4wL3J0bF9zeXNmcworICovCitzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHJ0bF9hdHRyaWJ1dGVfZ3JvdXAgPSB7CisJLm5hbWUgPSAicnRsc3lzZnMiLAorCS5hdHRycyA9IHJ0bF9zeXNmc19lbnRyaWVzLAorfTsKKworTU9EVUxFX0FVVEhPUigibGl6aGFvbWluZwk8Y2hhb21pbmdfbGlAcmVhbHNpbC5jb20uY24+Iik7CitNT0RVTEVfQVVUSE9SKCJSZWFsdGVrIFdsYW5GQUUJPHdsYW5mYWVAcmVhbHRlay5jb20+Iik7CitNT0RVTEVfQVVUSE9SKCJMYXJyeSBGaW5nZXIJPExhcnJ5LkZJbmdlckBsd2Zpbmdlci5uZXQ+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlJlYWx0ZWsgODAyLjExbiBQQ0kgd2lyZWxlc3MgY29yZSIpOworCitzdGF0aWMgaW50IF9faW5pdCBydGxfY29yZV9tb2R1bGVfaW5pdCh2b2lkKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgcnRsX2NvcmVfbW9kdWxlX2V4aXQodm9pZCkKK3sKK30KKworbW9kdWxlX2luaXQocnRsX2NvcmVfbW9kdWxlX2luaXQpOworbW9kdWxlX2V4aXQocnRsX2NvcmVfbW9kdWxlX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9iYXNlLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL2Jhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGU1YTE0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9iYXNlLmgKQEAgLTAsMCArMSwxMjAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQoYykgMjAwOS0yMDEwICBSZWFsdGVrIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAsIFVTQQorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgTElDRU5TRS4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogd2xhbmZhZSA8d2xhbmZhZUByZWFsdGVrLmNvbT4KKyAqIFJlYWx0ZWsgQ29ycG9yYXRpb24sIE5vLiAyLCBJbm5vdmF0aW9uIFJvYWQgSUksIEhzaW5jaHUgU2NpZW5jZSBQYXJrLAorICogSHNpbmNodSAzMDAsIFRhaXdhbi4KKyAqCisgKiBMYXJyeSBGaW5nZXIgPExhcnJ5LkZpbmdlckBsd2Zpbmdlci5uZXQ+CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19SVExfQkFTRV9IX18KKyNkZWZpbmUgX19SVExfQkFTRV9IX18KKworI2RlZmluZSBSVExfRFVNTVlfT0ZGU0VUCTAKKyNkZWZpbmUgUlRMX0RVTU1ZX1VOSVQJCTgKKyNkZWZpbmUgUlRMX1RYX0RVTU1ZX1NJWkUJKFJUTF9EVU1NWV9PRkZTRVQgKiBSVExfRFVNTVlfVU5JVCkKKyNkZWZpbmUgUlRMX1RYX0RFU0NfU0laRQkzMgorI2RlZmluZSBSVExfVFhfSEVBREVSX1NJWkUJKFJUTF9UWF9ERVNDX1NJWkUgKyBSVExfVFhfRFVNTVlfU0laRSkKKworI2RlZmluZSBIVF9BTVNEVV9TSVpFXzRLCTM4MzkKKyNkZWZpbmUgSFRfQU1TRFVfU0laRV84Swk3OTM1CisKKyNkZWZpbmUgTUFYX0JJVF9SQVRFXzQwTUhaX01DUzE1CTMwMAkvKiBNYnBzICovCisjZGVmaW5lIE1BWF9CSVRfUkFURV80ME1IWl9NQ1M3CQkxNTAJLyogTWJwcyAqLworCisjZGVmaW5lIFJUTF9SQVRFX0NPVU5UX0xFR0FDWQkJMTIKKyNkZWZpbmUgUlRMX0NIQU5ORUxfQ09VTlQJCTE0CisKKyNkZWZpbmUgRlJBTUVfT0ZGU0VUX0ZSQU1FX0NPTlRST0wJMAorI2RlZmluZSBGUkFNRV9PRkZTRVRfRFVSQVRJT04JCTIKKyNkZWZpbmUgRlJBTUVfT0ZGU0VUX0FERFJFU1MxCQk0CisjZGVmaW5lIEZSQU1FX09GRlNFVF9BRERSRVNTMgkJMTAKKyNkZWZpbmUgRlJBTUVfT0ZGU0VUX0FERFJFU1MzCQkxNgorI2RlZmluZSBGUkFNRV9PRkZTRVRfU0VRVUVOQ0UJCTIyCisjZGVmaW5lIEZSQU1FX09GRlNFVF9BRERSRVNTNAkJMjQKKworI2RlZmluZSBTRVRfODAyMTFfSERSX0ZSQU1FX0NPTlRST0woX2hkciwgX3ZhbCkJCVwKKwlXUklURUVGMkJZVEUoX2hkciwgX3ZhbCkKKyNkZWZpbmUgU0VUXzgwMjExX0hEUl9UWVBFX0FORF9TVUJUWVBFKF9oZHIsIF92YWwpCVwKKwlXUklURUVGMUJZVEUoX2hkciwgX3ZhbCkKKyNkZWZpbmUgU0VUXzgwMjExX0hEUl9QV1JfTUdOVChfaGRyLCBfdmFsKQkJXAorCVNFVF9CSVRTX1RPX0xFXzJCWVRFKF9oZHIsIDEyLCAxLCBfdmFsKQorI2RlZmluZSBTRVRfODAyMTFfSERSX1RPX0RTKF9oZHIsIF92YWwpCQkJXAorCVNFVF9CSVRTX1RPX0xFXzJCWVRFKF9oZHIsIDgsIDEsIF92YWwpCisKKyNkZWZpbmUgU0VUXzgwMjExX1BTX1BPTExfQUlEKF9oZHIsIF92YWwpCQlcCisJV1JJVEVFRjJCWVRFKCgodTggKikoX2hkcikpICsgMiwgX3ZhbCkKKyNkZWZpbmUgU0VUXzgwMjExX1BTX1BPTExfQlNTSUQoX2hkciwgX3ZhbCkJCVwKKwlDUF9NQUNBRERSKCgodTggKikoX2hkcikpICsgNCwgKHU4ICopKF92YWwpKQorI2RlZmluZSBTRVRfODAyMTFfUFNfUE9MTF9UQShfaGRyLCBfdmFsKQkJXAorCUNQX01BQ0FERFIoKCh1OCAqKShfaGRyKSkgKyAxMCwgKHU4ICopKF92YWwpKQorCisjZGVmaW5lIFNFVF84MDIxMV9IRFJfRFVSQVRJT04oX2hkciwgX3ZhbCkJXAorCVdSSVRFRUYyQllURSgodTggKikoX2hkcikrRlJBTUVfT0ZGU0VUX0RVUkFUSU9OLCBfdmFsKQorI2RlZmluZSBTRVRfODAyMTFfSERSX0FERFJFU1MxKF9oZHIsIF92YWwpCVwKKwlDUF9NQUNBRERSKCh1OCAqKShfaGRyKStGUkFNRV9PRkZTRVRfQUREUkVTUzEsICh1OCopKF92YWwpKQorI2RlZmluZSBTRVRfODAyMTFfSERSX0FERFJFU1MyKF9oZHIsIF92YWwpCVwKKwlDUF9NQUNBRERSKCh1OCAqKShfaGRyKSArIEZSQU1FX09GRlNFVF9BRERSRVNTMiwgKHU4ICopKF92YWwpKQorI2RlZmluZSBTRVRfODAyMTFfSERSX0FERFJFU1MzKF9oZHIsIF92YWwpCVwKKwlDUF9NQUNBRERSKCh1OCAqKShfaGRyKStGUkFNRV9PRkZTRVRfQUREUkVTUzMsICh1OCAqKShfdmFsKSkKKyNkZWZpbmUgU0VUXzgwMjExX0hEUl9GUkFHTUVOVF9TRVFVRU5DRShfaGRyLCBfdmFsKSAgXAorCVdSSVRFRUYyQllURSgodTggKikoX2hkcikrRlJBTUVfT0ZGU0VUX1NFUVVFTkNFLCBfdmFsKQorCisjZGVmaW5lIFNFVF9CRUFDT05fUFJPQkVfUlNQX1RJTUVfU1RBTVBfTE9XKF9fcGhkciwgX192YWwpCVwKKwlXUklURUVGNEJZVEUoKCh1OCAqKShfX3BoZHIpKSArIDI0LCBfX3ZhbCkKKyNkZWZpbmUgU0VUX0JFQUNPTl9QUk9CRV9SU1BfVElNRV9TVEFNUF9ISUdIKF9fcGhkciwgX192YWwpIFwKKwlXUklURUVGNEJZVEUoKCh1OCAqKShfX3BoZHIpKSArIDI4LCBfX3ZhbCkKKyNkZWZpbmUgU0VUX0JFQUNPTl9QUk9CRV9SU1BfQkVBQ09OX0lOVEVSVkFMKF9fcGhkciwgX192YWwpIFwKKwlXUklURUVGMkJZVEUoKCh1OCAqKShfX3BoZHIpKSArIDMyLCBfX3ZhbCkKKyNkZWZpbmUgR0VUX0JFQUNPTl9QUk9CRV9SU1BfQ0FQQUJJTElUWV9JTkZPKF9fcGhkcikJXAorCVJFQURFRjJCWVRFKCgodTggKikoX19waGRyKSkgKyAzNCkKKyNkZWZpbmUgU0VUX0JFQUNPTl9QUk9CRV9SU1BfQ0FQQUJJTElUWV9JTkZPKF9fcGhkciwgX192YWwpIFwKKwlXUklURUVGMkJZVEUoKCh1OCAqKShfX3BoZHIpKSArIDM0LCBfX3ZhbCkKKyNkZWZpbmUgTUFTS19CRUFDT05fUFJPQkVfUlNQX0NBUEFCSUxJVFlfSU5GTyhfX3BoZHIsIF9fdmFsKSBcCisJU0VUX0JFQUNPTl9QUk9CRV9SU1BfQ0FQQUJJTElUWV9JTkZPKF9fcGhkciwgXAorCShHRVRfQkVBQ09OX1BST0JFX1JTUF9DQVBBQklMSVRZX0lORk8oX19waGRyKSAmICh+KF9fdmFsKSkpKQorCitpbnQgcnRsX2luaXRfY29yZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Cit2b2lkIHJ0bF9kZWluaXRfY29yZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Cit2b2lkIHJ0bF9pbml0X3J4X2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Cit2b2lkIHJ0bF9pbml0X3Jma2lsbChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Cit2b2lkIHJ0bF9kZWluaXRfcmZraWxsKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKKwordm9pZCBydGxfd2F0Y2hfZG9nX3RpbWVyX2NhbGxiYWNrKHVuc2lnbmVkIGxvbmcgZGF0YSk7Cit2b2lkIHJ0bF9kZWluaXRfZGVmZXJyZWRfd29yayhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CisKK2Jvb2wgcnRsX2FjdGlvbl9wcm9jKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBpc190eCk7Citib29sIHJ0bF90eF9tZ210X3Byb2Moc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IpOwordTggcnRsX2lzX3NwZWNpYWxfZGF0YShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggaXNfdHgpOworCit2b2lkIHJ0bF93YXRjaF9kb2dfdGltZXJfY2FsbGJhY2sodW5zaWduZWQgbG9uZyBkYXRhKTsKK2ludCBydGxfdHhfYWdnX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBjb25zdCB1OCAqcmEsCisJCSAgICAgdTE2IHRpZCwgdTE2ICpzc24pOworaW50IHJ0bF90eF9hZ2dfc3RvcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgY29uc3QgdTggKnJhLCB1MTYgdGlkKTsKK3ZvaWQgcnRsX3dhdGNoZG9nX3dxX2NhbGxiYWNrKHZvaWQgKmRhdGEpOworCit2b2lkIHJ0bF9nZXRfdGNiX2Rlc2Moc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbywKKwkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHJ0bF90Y2JfZGVzYyAqdGNiX2Rlc2MpOworCitleHRlcm4gc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBydGxfYXR0cmlidXRlX2dyb3VwOworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL2NhbS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9jYW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmM5YzEzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9jYW0uYwpAQCAtMCwwICsxLDI5MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodChjKSAyMDA5LTIwMTAgIFJlYWx0ZWsgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwgVVNBCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiB3bGFuZmFlIDx3bGFuZmFlQHJlYWx0ZWsuY29tPgorICogUmVhbHRlayBDb3Jwb3JhdGlvbiwgTm8uIDIsIElubm92YXRpb24gUm9hZCBJSSwgSHNpbmNodSBTY2llbmNlIFBhcmssCisgKiBIc2luY2h1IDMwMCwgVGFpd2FuLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgIndpZmkuaCIKKyNpbmNsdWRlICJjYW0uaCIKKwordm9pZCBydGxfY2FtX3Jlc2V0X3NlY19pbmZvKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKworCXJ0bHByaXYtPnNlYy51c2VfZGVmYXVsdGtleSA9IGZhbHNlOworCXJ0bHByaXYtPnNlYy5wYWlyd2lzZV9lbmNfYWxnb3JpdGhtID0gTk9fRU5DUllQVElPTjsKKwlydGxwcml2LT5zZWMuZ3JvdXBfZW5jX2FsZ29yaXRobSA9IE5PX0VOQ1JZUFRJT047CisJbWVtc2V0KHJ0bHByaXYtPnNlYy5rZXlfYnVmLCAwLCBLRVlfQlVGX1NJWkUgKiBNQVhfS0VZX0xFTik7CisJbWVtc2V0KHJ0bHByaXYtPnNlYy5rZXlfbGVuLCAwLCBLRVlfQlVGX1NJWkUpOworCXJ0bHByaXYtPnNlYy5wYWlyd2lzZV9rZXkgPSBOVUxMOworfQorCitzdGF0aWMgdm9pZCBydGxfY2FtX3Byb2dyYW1fZW50cnkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiBlbnRyeV9ubywKKwkJCSAgIHU4ICptYWNfYWRkciwgdTggKmtleV9jb250XzEyOCwgdTE2IHVzX2NvbmZpZykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisKKwl1MzIgdGFyZ2V0X2NvbW1hbmQ7CisJdTMyIHRhcmdldF9jb250ZW50ID0gMDsKKwl1OCBlbnRyeV9pOworCisJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9TRUMsIERCR19ETUVTRywKKwkJICgia2V5X2NvbnRfMTI4OlxuICV4OiV4OiV4OiV4OiV4OiV4XG4iLAorCQkgIGtleV9jb250XzEyOFswXSwga2V5X2NvbnRfMTI4WzFdLAorCQkgIGtleV9jb250XzEyOFsyXSwga2V5X2NvbnRfMTI4WzNdLAorCQkgIGtleV9jb250XzEyOFs0XSwga2V5X2NvbnRfMTI4WzVdKSk7CisKKwlmb3IgKGVudHJ5X2kgPSAwOyBlbnRyeV9pIDwgQ0FNX0NPTlRFTlRfQ09VTlQ7IGVudHJ5X2krKykgeworCQl0YXJnZXRfY29tbWFuZCA9IGVudHJ5X2kgKyBDQU1fQ09OVEVOVF9DT1VOVCAqIGVudHJ5X25vOworCQl0YXJnZXRfY29tbWFuZCA9IHRhcmdldF9jb21tYW5kIHwgQklUKDMxKSB8IEJJVCgxNik7CisKKwkJaWYgKGVudHJ5X2kgPT0gMCkgeworCQkJdGFyZ2V0X2NvbnRlbnQgPSAodTMyKSAoKihtYWNfYWRkciArIDApKSA8PCAxNiB8CisJCQkgICAgKHUzMikgKCoobWFjX2FkZHIgKyAxKSkgPDwgMjQgfCAodTMyKSB1c19jb25maWc7CisKKwkJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBydGxwcml2LT5jZmctPm1hcHNbV0NBTUldLAorCQkJCQl0YXJnZXRfY29udGVudCk7CisJCQlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgcnRscHJpdi0+Y2ZnLT5tYXBzW1JXQ0FNXSwKKwkJCQkJdGFyZ2V0X2NvbW1hbmQpOworCisJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1NFQywgREJHX0RNRVNHLAorCQkJCSAoInJ0bF9jYW1fcHJvZ3JhbV9lbnRyeSgpOiAiCisJCQkJICAiV1JJVEUgJXg6ICV4XG4iLAorCQkJCSAgcnRscHJpdi0+Y2ZnLT5tYXBzW1dDQU1JXSwgdGFyZ2V0X2NvbnRlbnQpKTsKKwkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfU0VDLCBEQkdfRE1FU0csCisJCQkJICgiVGhlIEtleSBJRCBpcyAlZFxuIiwgZW50cnlfbm8pKTsKKwkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfU0VDLCBEQkdfRE1FU0csCisJCQkJICgicnRsX2NhbV9wcm9ncmFtX2VudHJ5KCk6ICIKKwkJCQkgICJXUklURSAleDogJXhcbiIsCisJCQkJICBydGxwcml2LT5jZmctPm1hcHNbUldDQU1dLCB0YXJnZXRfY29tbWFuZCkpOworCisJCX0gZWxzZSBpZiAoZW50cnlfaSA9PSAxKSB7CisKKwkJCXRhcmdldF9jb250ZW50ID0gKHUzMikgKCoobWFjX2FkZHIgKyA1KSkgPDwgMjQgfAorCQkJICAgICh1MzIpICgqKG1hY19hZGRyICsgNCkpIDw8IDE2IHwKKwkJCSAgICAodTMyKSAoKihtYWNfYWRkciArIDMpKSA8PCA4IHwKKwkJCSAgICAodTMyKSAoKihtYWNfYWRkciArIDIpKTsKKworCQkJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIHJ0bHByaXYtPmNmZy0+bWFwc1tXQ0FNSV0sCisJCQkJCXRhcmdldF9jb250ZW50KTsKKwkJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBydGxwcml2LT5jZmctPm1hcHNbUldDQU1dLAorCQkJCQl0YXJnZXRfY29tbWFuZCk7CisKKwkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfU0VDLCBEQkdfRE1FU0csCisJCQkJICgicnRsX2NhbV9wcm9ncmFtX2VudHJ5KCk6IFdSSVRFIEE0OiAleFxuIiwKKwkJCQkgIHRhcmdldF9jb250ZW50KSk7CisJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1NFQywgREJHX0RNRVNHLAorCQkJCSAoInJ0bF9jYW1fcHJvZ3JhbV9lbnRyeSgpOiBXUklURSBBMDogJXhcbiIsCisJCQkJICB0YXJnZXRfY29tbWFuZCkpOworCisJCX0gZWxzZSB7CisKKwkJCXRhcmdldF9jb250ZW50ID0KKwkJCSAgICAodTMyKSAoKihrZXlfY29udF8xMjggKyAoZW50cnlfaSAqIDQgLSA4KSArIDMpKSA8PAorCQkJICAgIDI0IHwgKHUzMikgKCooa2V5X2NvbnRfMTI4ICsgKGVudHJ5X2kgKiA0IC0gOCkgKyAyKSkKKwkJCSAgICA8PCAxNiB8CisJCQkgICAgKHUzMikgKCooa2V5X2NvbnRfMTI4ICsgKGVudHJ5X2kgKiA0IC0gOCkgKyAxKSkgPDwgOAorCQkJICAgIHwgKHUzMikgKCooa2V5X2NvbnRfMTI4ICsgKGVudHJ5X2kgKiA0IC0gOCkgKyAwKSk7CisKKwkJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBydGxwcml2LT5jZmctPm1hcHNbV0NBTUldLAorCQkJCQl0YXJnZXRfY29udGVudCk7CisJCQlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgcnRscHJpdi0+Y2ZnLT5tYXBzW1JXQ0FNXSwKKwkJCQkJdGFyZ2V0X2NvbW1hbmQpOworCQkJdWRlbGF5KDEwMCk7CisKKwkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfU0VDLCBEQkdfRE1FU0csCisJCQkJICgicnRsX2NhbV9wcm9ncmFtX2VudHJ5KCk6IFdSSVRFIEE0OiAleFxuIiwKKwkJCQkgIHRhcmdldF9jb250ZW50KSk7CisJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1NFQywgREJHX0RNRVNHLAorCQkJCSAoInJ0bF9jYW1fcHJvZ3JhbV9lbnRyeSgpOiBXUklURSBBMDogJXhcbiIsCisJCQkJICB0YXJnZXRfY29tbWFuZCkpOworCQl9CisJfQorCisJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9TRUMsIERCR19ETUVTRywKKwkJICgiYWZ0ZXIgc2V0IGtleSwgdXNjb25maWc6JXhcbiIsIHVzX2NvbmZpZykpOworfQorCit1OCBydGxfY2FtX2FkZF9vbmVfZW50cnkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4ICptYWNfYWRkciwKKwkJCSB1MzIgdWxfa2V5X2lkLCB1MzIgdWxfZW50cnlfaWR4LCB1MzIgdWxfZW5jX2FsZywKKwkJCSB1MzIgdWxfZGVmYXVsdF9rZXksIHU4ICprZXlfY29udGVudCkKK3sKKwl1MzIgdXNfY29uZmlnOworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKworCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfU0VDLCBEQkdfRE1FU0csCisJCSAoIkVudHJ5Tm86JXgsIHVsS2V5SWQ9JXgsIHVsRW5jQWxnPSV4LCAiCisJCSAgInVsVXNlREs9JXggTWFjQWRkciIgTUFDX0ZNVCAiXG4iLAorCQkgIHVsX2VudHJ5X2lkeCwgdWxfa2V5X2lkLCB1bF9lbmNfYWxnLAorCQkgIHVsX2RlZmF1bHRfa2V5LCBNQUNfQVJHKG1hY19hZGRyKSkpOworCisJaWYgKHVsX2tleV9pZCA9PSBUT1RBTF9DQU1fRU5UUlkpIHsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19XQVJOSU5HLAorCQkJICgiPD09PSB1bEtleUlkIGV4Y2VlZCFcbiIpKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHVsX2RlZmF1bHRfa2V5ID09IDEpIHsKKwkJdXNfY29uZmlnID0gQ0ZHX1ZBTElEIHwgKCh1MTYpICh1bF9lbmNfYWxnKSA8PCAyKTsKKwl9IGVsc2UgeworCQl1c19jb25maWcgPSBDRkdfVkFMSUQgfCAoKHVsX2VuY19hbGcpIDw8IDIpIHwgdWxfa2V5X2lkOworCX0KKworCXJ0bF9jYW1fcHJvZ3JhbV9lbnRyeShodywgdWxfZW50cnlfaWR4LCBtYWNfYWRkciwKKwkJCSAgICAgICh1OCAqKSBrZXlfY29udGVudCwgdXNfY29uZmlnKTsKKworCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfU0VDLCBEQkdfRE1FU0csICgiPD09PVxuIikpOworCisJcmV0dXJuIDE7CisKK30KK0VYUE9SVF9TWU1CT0wocnRsX2NhbV9hZGRfb25lX2VudHJ5KTsKKworaW50IHJ0bF9jYW1fZGVsZXRlX29uZV9lbnRyeShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSAgICAgdTggKm1hY19hZGRyLCB1MzIgdWxfa2V5X2lkKQoreworCXUzMiB1bF9jb21tYW5kOworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKworCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfU0VDLCBEQkdfRE1FU0csICgia2V5X2lkeDolZFxuIiwgdWxfa2V5X2lkKSk7CisKKwl1bF9jb21tYW5kID0gdWxfa2V5X2lkICogQ0FNX0NPTlRFTlRfQ09VTlQ7CisJdWxfY29tbWFuZCA9IHVsX2NvbW1hbmQgfCBCSVQoMzEpIHwgQklUKDE2KTsKKworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBydGxwcml2LT5jZmctPm1hcHNbV0NBTUldLCAwKTsKKwlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgcnRscHJpdi0+Y2ZnLT5tYXBzW1JXQ0FNXSwgdWxfY29tbWFuZCk7CisKKwlSVF9UUkFDRShydGxwcml2LCBDT01QX1NFQywgREJHX0RNRVNHLAorCQkgKCJydGxfY2FtX2RlbGV0ZV9vbmVfZW50cnkoKTogV1JJVEUgQTQ6ICV4XG4iLCAwKSk7CisJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9TRUMsIERCR19ETUVTRywKKwkJICgicnRsX2NhbV9kZWxldGVfb25lX2VudHJ5KCk6IFdSSVRFIEEwOiAleFxuIiwgdWxfY29tbWFuZCkpOworCisJcmV0dXJuIDA7CisKK30KK0VYUE9SVF9TWU1CT0wocnRsX2NhbV9kZWxldGVfb25lX2VudHJ5KTsKKwordm9pZCBydGxfY2FtX3Jlc2V0X2FsbF9lbnRyeShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwl1MzIgdWxfY29tbWFuZDsKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisKKwl1bF9jb21tYW5kID0gQklUKDMxKSB8IEJJVCgzMCk7CisJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIHJ0bHByaXYtPmNmZy0+bWFwc1tSV0NBTV0sIHVsX2NvbW1hbmQpOworfQorRVhQT1JUX1NZTUJPTChydGxfY2FtX3Jlc2V0X2FsbF9lbnRyeSk7CisKK3ZvaWQgcnRsX2NhbV9tYXJrX2ludmFsaWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IHVjX2luZGV4KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKworCXUzMiB1bF9jb21tYW5kOworCXUzMiB1bF9jb250ZW50OworCXUzMiB1bF9lbmNfYWxnbyA9IHJ0bHByaXYtPmNmZy0+bWFwc1tTRUNfQ0FNX0FFU107CisKKwlzd2l0Y2ggKHJ0bHByaXYtPnNlYy5wYWlyd2lzZV9lbmNfYWxnb3JpdGhtKSB7CisJY2FzZSBXRVA0MF9FTkNSWVBUSU9OOgorCQl1bF9lbmNfYWxnbyA9IHJ0bHByaXYtPmNmZy0+bWFwc1tTRUNfQ0FNX1dFUDQwXTsKKwkJYnJlYWs7CisJY2FzZSBXRVAxMDRfRU5DUllQVElPTjoKKwkJdWxfZW5jX2FsZ28gPSBydGxwcml2LT5jZmctPm1hcHNbU0VDX0NBTV9XRVAxMDRdOworCQlicmVhazsKKwljYXNlIFRLSVBfRU5DUllQVElPTjoKKwkJdWxfZW5jX2FsZ28gPSBydGxwcml2LT5jZmctPm1hcHNbU0VDX0NBTV9US0lQXTsKKwkJYnJlYWs7CisJY2FzZSBBRVNDQ01QX0VOQ1JZUFRJT046CisJCXVsX2VuY19hbGdvID0gcnRscHJpdi0+Y2ZnLT5tYXBzW1NFQ19DQU1fQUVTXTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJdWxfZW5jX2FsZ28gPSBydGxwcml2LT5jZmctPm1hcHNbU0VDX0NBTV9BRVNdOworCX0KKworCXVsX2NvbnRlbnQgPSAodWNfaW5kZXggJiAzKSB8ICgodTE2KSAodWxfZW5jX2FsZ28pIDw8IDIpOworCisJdWxfY29udGVudCB8PSBCSVQoMTUpOworCXVsX2NvbW1hbmQgPSBDQU1fQ09OVEVOVF9DT1VOVCAqIHVjX2luZGV4OworCXVsX2NvbW1hbmQgPSB1bF9jb21tYW5kIHwgQklUKDMxKSB8IEJJVCgxNik7CisKKwlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgcnRscHJpdi0+Y2ZnLT5tYXBzW1dDQU1JXSwgdWxfY29udGVudCk7CisJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIHJ0bHByaXYtPmNmZy0+bWFwc1tSV0NBTV0sIHVsX2NvbW1hbmQpOworCisJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9TRUMsIERCR19ETUVTRywKKwkJICgicnRsX2NhbV9tYXJrX2ludmFsaWQoKTogV1JJVEUgQTQ6ICV4XG4iLCB1bF9jb250ZW50KSk7CisJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9TRUMsIERCR19ETUVTRywKKwkJICgicnRsX2NhbV9tYXJrX2ludmFsaWQoKTogV1JJVEUgQTA6ICV4XG4iLCB1bF9jb21tYW5kKSk7Cit9CitFWFBPUlRfU1lNQk9MKHJ0bF9jYW1fbWFya19pbnZhbGlkKTsKKwordm9pZCBydGxfY2FtX2VtcHR5X2VudHJ5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCB1Y19pbmRleCkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisKKwl1MzIgdWxfY29tbWFuZDsKKwl1MzIgdWxfY29udGVudDsKKwl1MzIgdWxfZW5jYWxnbyA9IHJ0bHByaXYtPmNmZy0+bWFwc1tTRUNfQ0FNX0FFU107CisJdTggZW50cnlfaTsKKworCXN3aXRjaCAocnRscHJpdi0+c2VjLnBhaXJ3aXNlX2VuY19hbGdvcml0aG0pIHsKKwljYXNlIFdFUDQwX0VOQ1JZUFRJT046CisJCXVsX2VuY2FsZ28gPSBydGxwcml2LT5jZmctPm1hcHNbU0VDX0NBTV9XRVA0MF07CisJCWJyZWFrOworCWNhc2UgV0VQMTA0X0VOQ1JZUFRJT046CisJCXVsX2VuY2FsZ28gPSBydGxwcml2LT5jZmctPm1hcHNbU0VDX0NBTV9XRVAxMDRdOworCQlicmVhazsKKwljYXNlIFRLSVBfRU5DUllQVElPTjoKKwkJdWxfZW5jYWxnbyA9IHJ0bHByaXYtPmNmZy0+bWFwc1tTRUNfQ0FNX1RLSVBdOworCQlicmVhazsKKwljYXNlIEFFU0NDTVBfRU5DUllQVElPTjoKKwkJdWxfZW5jYWxnbyA9IHJ0bHByaXYtPmNmZy0+bWFwc1tTRUNfQ0FNX0FFU107CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXVsX2VuY2FsZ28gPSBydGxwcml2LT5jZmctPm1hcHNbU0VDX0NBTV9BRVNdOworCX0KKworCWZvciAoZW50cnlfaSA9IDA7IGVudHJ5X2kgPCBDQU1fQ09OVEVOVF9DT1VOVDsgZW50cnlfaSsrKSB7CisKKwkJaWYgKGVudHJ5X2kgPT0gMCkgeworCQkJdWxfY29udGVudCA9CisJCQkgICAgKHVjX2luZGV4ICYgMHgwMykgfCAoKHUxNikgKHVsX2VuY2FsZ28pIDw8IDIpOworCQkJdWxfY29udGVudCB8PSBCSVQoMTUpOworCisJCX0gZWxzZSB7CisJCQl1bF9jb250ZW50ID0gMDsKKwkJfQorCisJCXVsX2NvbW1hbmQgPSBDQU1fQ09OVEVOVF9DT1VOVCAqIHVjX2luZGV4ICsgZW50cnlfaTsKKwkJdWxfY29tbWFuZCA9IHVsX2NvbW1hbmQgfCBCSVQoMzEpIHwgQklUKDE2KTsKKworCQlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgcnRscHJpdi0+Y2ZnLT5tYXBzW1dDQU1JXSwgdWxfY29udGVudCk7CisJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBydGxwcml2LT5jZmctPm1hcHNbUldDQU1dLCB1bF9jb21tYW5kKTsKKworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1NFQywgREJHX0xPVUQsCisJCQkgKCJydGxfY2FtX2VtcHR5X2VudHJ5KCk6IFdSSVRFIEE0OiAleFxuIiwKKwkJCSAgdWxfY29udGVudCkpOworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1NFQywgREJHX0xPVUQsCisJCQkgKCJydGxfY2FtX2VtcHR5X2VudHJ5KCk6IFdSSVRFIEEwOiAleFxuIiwKKwkJCSAgdWxfY29tbWFuZCkpOworCX0KKworfQorRVhQT1JUX1NZTUJPTChydGxfY2FtX2VtcHR5X2VudHJ5KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvY2FtLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL2NhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkODJmMDUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL2NhbS5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQoYykgMjAwOS0yMDEwICBSZWFsdGVrIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAsIFVTQQorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgTElDRU5TRS4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogd2xhbmZhZSA8d2xhbmZhZUByZWFsdGVrLmNvbT4KKyAqIFJlYWx0ZWsgQ29ycG9yYXRpb24sIE5vLiAyLCBJbm5vdmF0aW9uIFJvYWQgSUksIEhzaW5jaHUgU2NpZW5jZSBQYXJrLAorICogSHNpbmNodSAzMDAsIFRhaXdhbi4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19SVExfQ0FNX0hfCisjZGVmaW5lIF9fUlRMX0NBTV9IXworCisjZGVmaW5lIFRPVEFMX0NBTV9FTlRSWQkJCQkJMzIKKyNkZWZpbmUgQ0FNX0NPTlRFTlRfQ09VTlQJCQkJOAorCisjZGVmaW5lIENGR19ERUZBVUxUX0tFWQkJCQkJQklUKDUpCisjZGVmaW5lIENGR19WQUxJRAkJCQkJQklUKDE1KQorCisjZGVmaW5lIFBBSVJXSVNFX0tFWUlEWAkJCQkJMAorI2RlZmluZSBDQU1fUEFJUldJU0VfS0VZX1BPU0lUSU9OCQk0CisKKyNkZWZpbmUJQ0FNX0NPTkZJR19VU0VESwkJCQkxCisjZGVmaW5lCUNBTV9DT05GSUdfTk9fVVNFREsJCQkJMAorCitleHRlcm4gdm9pZCBydGxfY2FtX3Jlc2V0X2FsbF9lbnRyeShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CitleHRlcm4gdTggcnRsX2NhbV9hZGRfb25lX2VudHJ5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCAqbWFjX2FkZHIsCisJCQl1MzIgdWxfa2V5X2lkLCB1MzIgdWxfZW50cnlfaWR4LCB1MzIgdWxfZW5jX2FsZywKKwkJCXUzMiB1bF9kZWZhdWx0X2tleSwgdTggKmtleV9jb250ZW50KTsKK2ludCBydGxfY2FtX2RlbGV0ZV9vbmVfZW50cnkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4ICptYWNfYWRkciwKKwkJCXUzMiB1bF9rZXlfaWQpOwordm9pZCBydGxfY2FtX21hcmtfaW52YWxpZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggdWNfaW5kZXgpOwordm9pZCBydGxfY2FtX2VtcHR5X2VudHJ5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCB1Y19pbmRleCk7Cit2b2lkIHJ0bF9jYW1fcmVzZXRfc2VjX2luZm8oc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvY29yZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9jb3JlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZhOTI0YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvY29yZS5jCkBAIC0wLDAgKzEsMTAyOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodChjKSAyMDA5LTIwMTAgIFJlYWx0ZWsgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwgVVNBCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiB3bGFuZmFlIDx3bGFuZmFlQHJlYWx0ZWsuY29tPgorICogUmVhbHRlayBDb3Jwb3JhdGlvbiwgTm8uIDIsIElubm92YXRpb24gUm9hZCBJSSwgSHNpbmNodSBTY2llbmNlIFBhcmssCisgKiBIc2luY2h1IDMwMCwgVGFpd2FuLgorICoKKyAqIExhcnJ5IEZpbmdlciA8TGFycnkuRmluZ2VyQGx3ZmluZ2VyLm5ldD4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgIndpZmkuaCIKKyNpbmNsdWRlICJjb3JlLmgiCisjaW5jbHVkZSAiY2FtLmgiCisjaW5jbHVkZSAiYmFzZS5oIgorI2luY2x1ZGUgInBzLmgiCisKKy8qbXV0ZXggZm9yIHN0YXJ0ICYgc3RvcCBpcyBtdXN0IGhlcmUuICovCitzdGF0aWMgaW50IHJ0bF9vcF9zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlpbnQgZXJyID0gMDsKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCA9IHJ0bF9oYWwocnRsX3ByaXYoaHcpKTsKKworCWlmICghaXNfaGFsX3N0b3AocnRsaGFsKSkKKwkJcmV0dXJuIDA7CisJaWYgKCF0ZXN0X2JpdChSVExfU1RBVFVTX0lOVEVSRkFDRV9TVEFSVCwgJnJ0bHByaXYtPnN0YXR1cykpCisJCXJldHVybiAwOworCW11dGV4X2xvY2soJnJ0bHByaXYtPmxvY2tzLmNvbmZfbXV0ZXgpOworCWVyciA9IHJ0bHByaXYtPmludGZfb3BzLT5hZGFwdGVyX3N0YXJ0KGh3KTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKwlydGxfd2F0Y2hfZG9nX3RpbWVyX2NhbGxiYWNrKCh1bnNpZ25lZCBsb25nKWh3KTsKK291dDoKKwltdXRleF91bmxvY2soJnJ0bHByaXYtPmxvY2tzLmNvbmZfbXV0ZXgpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIHJ0bF9vcF9zdG9wKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOworCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bF9wcml2KGh3KSk7CisJc3RydWN0IHJ0bF9wc19jdGwgKnBwc2MgPSBydGxfcHNjKHJ0bF9wcml2KGh3KSk7CisKKwlpZiAoaXNfaGFsX3N0b3AocnRsaGFsKSkKKwkJcmV0dXJuOworCisJaWYgKHVubGlrZWx5KHBwc2MtPnJmcHdyX3N0YXRlID09IEVSRk9GRikpIHsKKwkJcnRsX2lwc19uaWNfb24oaHcpOworCQltZGVsYXkoMSk7CisJfQorCisJbXV0ZXhfbG9jaygmcnRscHJpdi0+bG9ja3MuY29uZl9tdXRleCk7CisKKwltYWMtPmxpbmtfc3RhdGUgPSBNQUM4MDIxMV9OT0xJTks7CisJbWVtc2V0KG1hYy0+YnNzaWQsIDAsIDYpOworCisJLypyZXNldCBzZWMgaW5mbyAqLworCXJ0bF9jYW1fcmVzZXRfc2VjX2luZm8oaHcpOworCisJcnRsX2RlaW5pdF9kZWZlcnJlZF93b3JrKGh3KTsKKwlydGxwcml2LT5pbnRmX29wcy0+YWRhcHRlcl9zdG9wKGh3KTsKKworCW11dGV4X3VubG9jaygmcnRscHJpdi0+bG9ja3MuY29uZl9tdXRleCk7Cit9CisKK3N0YXRpYyBpbnQgcnRsX29wX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX2hhbCAqcnRsaGFsID0gcnRsX2hhbChydGxfcHJpdihodykpOworCXN0cnVjdCBydGxfcHNfY3RsICpwcHNjID0gcnRsX3BzYyhydGxfcHJpdihodykpOworCisJaWYgKHVubGlrZWx5KGlzX2hhbF9zdG9wKHJ0bGhhbCkgfHwgcHBzYy0+cmZwd3Jfc3RhdGUgIT0gRVJGT04pKQorCQlnb3RvIGVycl9mcmVlOworCisJaWYgKCF0ZXN0X2JpdChSVExfU1RBVFVTX0lOVEVSRkFDRV9TVEFSVCwgJnJ0bHByaXYtPnN0YXR1cykpCisJCWdvdG8gZXJyX2ZyZWU7CisKKworCXJ0bHByaXYtPmludGZfb3BzLT5hZGFwdGVyX3R4KGh3LCBza2IpOworCisJcmV0dXJuIE5FVERFVl9UWF9PSzsKKworZXJyX2ZyZWU6CisJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwlyZXR1cm4gTkVUREVWX1RYX09LOworfQorCitzdGF0aWMgaW50IHJ0bF9vcF9hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOworCWludCBlcnIgPSAwOworCisJaWYgKG1hYy0+dmlmKSB7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfV0FSTklORywKKwkJCSAoInZpZiBoYXMgYmVlbiBzZXQhISBtYWMtPnZpZiA9IDB4JXBcbiIsIG1hYy0+dmlmKSk7CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9CisKKwlydGxfaXBzX25pY19vbihodyk7CisKKwltdXRleF9sb2NrKCZydGxwcml2LT5sb2Nrcy5jb25mX211dGV4KTsKKwlzd2l0Y2ggKHZpZi0+dHlwZSkgeworCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKKwkJaWYgKG1hYy0+YmVhY29uX2VuYWJsZWQgPT0gMSkgeworCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9NQUM4MDIxMSwgREJHX0xPVUQsCisJCQkJICgiTkw4MDIxMV9JRlRZUEVfU1RBVElPTlxuIikpOworCQkJbWFjLT5iZWFjb25fZW5hYmxlZCA9IDA7CisJCQlydGxwcml2LT5jZmctPm9wcy0+dXBkYXRlX2ludGVycnVwdF9tYXNrKGh3LCAwLAorCQkJCQlydGxwcml2LT5jZmctPm1hcHMKKwkJCQkJW1JUTF9JQlNTX0lOVF9NQVNLU10pOworCQl9CisJCWJyZWFrOworCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfTUFDODAyMTEsIERCR19MT1VELAorCQkJICgiTkw4MDIxMV9JRlRZUEVfQURIT0NcbiIpKTsKKworCQltYWMtPmxpbmtfc3RhdGUgPSBNQUM4MDIxMV9MSU5LRUQ7CisJCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfYmNuX3JlZyhodyk7CisJCWJyZWFrOworCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfTUFDODAyMTEsIERCR19MT1VELAorCQkJICgiTkw4MDIxMV9JRlRZUEVfQVBcbiIpKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19FTUVSRywKKwkJCSAoIm9wZXJhdGlvbiBtb2RlICVkIGlzIG5vdCBzdXBwb3J0IVxuIiwgdmlmLT50eXBlKSk7CisJCWVyciA9IC1FT1BOT1RTVVBQOworCQlnb3RvIG91dDsKKwl9CisKKwltYWMtPnZpZiA9IHZpZjsKKwltYWMtPm9wbW9kZSA9IHZpZi0+dHlwZTsKKwlydGxwcml2LT5jZmctPm9wcy0+c2V0X25ldHdvcmtfdHlwZShodywgdmlmLT50eXBlKTsKKwltZW1jcHkobWFjLT5tYWNfYWRkciwgdmlmLT5hZGRyLCBFVEhfQUxFTik7CisJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9od19yZWcoaHcsIEhXX1ZBUl9FVEhFUl9BRERSLCBtYWMtPm1hY19hZGRyKTsKKworb3V0OgorCW11dGV4X3VubG9jaygmcnRscHJpdi0+bG9ja3MuY29uZl9tdXRleCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgcnRsX29wX3JlbW92ZV9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfbWFjICptYWMgPSBydGxfbWFjKHJ0bF9wcml2KGh3KSk7CisKKwltdXRleF9sb2NrKCZydGxwcml2LT5sb2Nrcy5jb25mX211dGV4KTsKKworCS8qIEZyZWUgYmVhY29uIHJlc291cmNlcyAqLworCWlmICgobWFjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApIHx8CisJICAgIChtYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgfHwKKwkgICAgKG1hYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpKSB7CisJCWlmIChtYWMtPmJlYWNvbl9lbmFibGVkID09IDEpIHsKKwkJCW1hYy0+YmVhY29uX2VuYWJsZWQgPSAwOworCQkJcnRscHJpdi0+Y2ZnLT5vcHMtPnVwZGF0ZV9pbnRlcnJ1cHRfbWFzayhodywgMCwKKwkJCQkJcnRscHJpdi0+Y2ZnLT5tYXBzCisJCQkJCVtSVExfSUJTU19JTlRfTUFTS1NdKTsKKwkJfQorCX0KKworCS8qCisJICpOb3RlOiBXZSBhc3N1bWUgTkw4MDIxMV9JRlRZUEVfVU5TUEVDSUZJRUQgYXMKKwkgKk5PIExJTksgZm9yIG91ciBoYXJkd2FyZS4KKwkgKi8KKwltYWMtPnZpZiA9IE5VTEw7CisJbWFjLT5saW5rX3N0YXRlID0gTUFDODAyMTFfTk9MSU5LOworCW1lbXNldChtYWMtPmJzc2lkLCAwLCA2KTsKKwltYWMtPm9wbW9kZSA9IE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEOworCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfbmV0d29ya190eXBlKGh3LCBtYWMtPm9wbW9kZSk7CisKKwltdXRleF91bmxvY2soJnJ0bHByaXYtPmxvY2tzLmNvbmZfbXV0ZXgpOworfQorCisKK3N0YXRpYyBpbnQgcnRsX29wX2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIGNoYW5nZWQpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGh5ICpydGxwaHkgPSAmKHJ0bHByaXYtPnBoeSk7CisJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX3BzX2N0bCAqcHBzYyA9IHJ0bF9wc2MocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmaHctPmNvbmY7CisKKwltdXRleF9sb2NrKCZydGxwcml2LT5sb2Nrcy5jb25mX211dGV4KTsKKwlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9MSVNURU5fSU5URVJWQUwpIHsJLypCSVQoMikqLworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX01BQzgwMjExLCBEQkdfTE9VRCwKKwkJCSAoIklFRUU4MDIxMV9DT05GX0NIQU5HRV9MSVNURU5fSU5URVJWQUxcbiIpKTsKKwl9CisKKwkvKkZvciBJUFMgKi8KKwlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9JRExFKSB7CisJCWlmIChody0+Y29uZi5mbGFncyAmIElFRUU4MDIxMV9DT05GX0lETEUpCisJCQlydGxfaXBzX25pY19vZmYoaHcpOworCQllbHNlCisJCQlydGxfaXBzX25pY19vbihodyk7CisJfSBlbHNlIHsKKwkJLyoKKwkJICphbHRob3VnaCByZm9mZiBtYXkgbm90IGNhdXNlIGJ5IGlwcywgYnV0IHdlIHdpbGwKKwkJICpjaGVjayB0aGUgcmVhc29uIGluIHNldF9yZl9wb3dlcl9zdGF0ZSBmdW5jdGlvbgorCQkgKi8KKwkJaWYgKHVubGlrZWx5KHBwc2MtPnJmcHdyX3N0YXRlID09IEVSRk9GRikpCisJCQlydGxfaXBzX25pY19vbihodyk7CisJfQorCisJLypGb3IgTFBTICovCisJaWYgKGNoYW5nZWQgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUFMpIHsKKwkJaWYgKGNvbmYtPmZsYWdzICYgSUVFRTgwMjExX0NPTkZfUFMpCisJCQlydGxfbHBzX2VudGVyKGh3KTsKKwkJZWxzZQorCQkJcnRsX2xwc19sZWF2ZShodyk7CisJfQorCisJaWYgKGNoYW5nZWQgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUkVUUllfTElNSVRTKSB7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfTUFDODAyMTEsIERCR19MT1VELAorCQkJICgiSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1JFVFJZX0xJTUlUUyAleFxuIiwKKwkJCSAgaHctPmNvbmYubG9uZ19mcmFtZV9tYXhfdHhfY291bnQpKTsKKwkJbWFjLT5yZXRyeV9sb25nID0gaHctPmNvbmYubG9uZ19mcmFtZV9tYXhfdHhfY291bnQ7CisJCW1hYy0+cmV0cnlfc2hvcnQgPSBody0+Y29uZi5sb25nX2ZyYW1lX21heF90eF9jb3VudDsKKwkJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9od19yZWcoaHcsIEhXX1ZBUl9SRVRSWV9MSU1JVCwKKwkJCQkJICAgICAgKHU4ICopICgmaHctPmNvbmYuCisJCQkJCQkgICAgICBsb25nX2ZyYW1lX21heF90eF9jb3VudCkpOworCX0KKworCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0NIQU5ORUwpIHsKKwkJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsID0gaHctPmNvbmYuY2hhbm5lbDsKKwkJdTggd2lkZV9jaGFuID0gKHU4KSBjaGFubmVsLT5od192YWx1ZTsKKworCQkvKgorCQkgKmJlY2F1c2Ugd2Ugc2hvdWxkIGJhY2sgY2hhbm5lbCB0bworCQkgKmN1cnJlbnRfbmV0d29yay5jaGFuIGluIGluIHNjYW5uaW5nLAorCQkgKlNvIGlmIHNldF9jaGFuID09IGN1cnJlbnRfbmV0d29yay5jaGFuCisJCSAqd2Ugc2hvdWxkIHNldCBpdC4KKwkJICpiZWNhdXNlIG1hYzgwMjExIHRlbGwgdXMgd3JvbmcgYnc0MAorCQkgKmluZm8gZm9yIGNpc2NvMTI1MyBidzIwLCBzbyB3ZSBtb2RpZnkKKwkJICppdCBoZXJlIGJhc2VkIG9uIFVQUEVSICYgTE9XRVIKKwkJICovCisJCXN3aXRjaCAoaHctPmNvbmYuY2hhbm5lbF90eXBlKSB7CisJCWNhc2UgTkw4MDIxMV9DSEFOX0hUMjA6CisJCWNhc2UgTkw4MDIxMV9DSEFOX05PX0hUOgorCQkJLyogU0MgKi8KKwkJCW1hYy0+Y3VyXzQwX3ByaW1lX3NjID0KKwkJCSAgICBQUklNRV9DSE5MX09GRlNFVF9ET05UX0NBUkU7CisJCQlydGxwaHktPmN1cnJlbnRfY2hhbl9idyA9IEhUX0NIQU5ORUxfV0lEVEhfMjA7CisJCQltYWMtPmJ3XzQwID0gZmFsc2U7CisJCQlicmVhazsKKwkJY2FzZSBOTDgwMjExX0NIQU5fSFQ0ME1JTlVTOgorCQkJLyogU0MgKi8KKwkJCW1hYy0+Y3VyXzQwX3ByaW1lX3NjID0gUFJJTUVfQ0hOTF9PRkZTRVRfVVBQRVI7CisJCQlydGxwaHktPmN1cnJlbnRfY2hhbl9idyA9CisJCQkgICAgSFRfQ0hBTk5FTF9XSURUSF8yMF80MDsKKwkJCW1hYy0+YndfNDAgPSB0cnVlOworCisJCQkvKndpZGUgY2hhbm5lbCAqLworCQkJd2lkZV9jaGFuIC09IDI7CisKKwkJCWJyZWFrOworCQljYXNlIE5MODAyMTFfQ0hBTl9IVDQwUExVUzoKKwkJCS8qIFNDICovCisJCQltYWMtPmN1cl80MF9wcmltZV9zYyA9IFBSSU1FX0NITkxfT0ZGU0VUX0xPV0VSOworCQkJcnRscGh5LT5jdXJyZW50X2NoYW5fYncgPQorCQkJICAgIEhUX0NIQU5ORUxfV0lEVEhfMjBfNDA7CisJCQltYWMtPmJ3XzQwID0gdHJ1ZTsKKworCQkJLyp3aWRlIGNoYW5uZWwgKi8KKwkJCXdpZGVfY2hhbiArPSAyOworCisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCW1hYy0+YndfNDAgPSBmYWxzZTsKKwkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfRU1FUkcsCisJCQkJICgic3dpdGNoIGNhc2Ugbm90IHByb2Nlc3NlZFxuIikpOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAod2lkZV9jaGFuIDw9IDApCisJCQl3aWRlX2NoYW4gPSAxOworCQlydGxwaHktPmN1cnJlbnRfY2hhbm5lbCA9IHdpZGVfY2hhbjsKKworCQlydGxwcml2LT5jZmctPm9wcy0+c2V0X2NoYW5uZWxfYWNjZXNzKGh3KTsKKwkJcnRscHJpdi0+Y2ZnLT5vcHMtPnN3aXRjaF9jaGFubmVsKGh3KTsKKwkJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9id19tb2RlKGh3LAorCQkJCQkgICAgICAgaHctPmNvbmYuY2hhbm5lbF90eXBlKTsKKwl9CisKKwltdXRleF91bmxvY2soJnJ0bHByaXYtPmxvY2tzLmNvbmZfbXV0ZXgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHJ0bF9vcF9jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJICAgICB1bnNpZ25lZCBpbnQgY2hhbmdlZF9mbGFncywKKwkJCSAgICAgdW5zaWduZWQgaW50ICpuZXdfZmxhZ3MsIHU2NCBtdWx0aWNhc3QpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfbWFjICptYWMgPSBydGxfbWFjKHJ0bF9wcml2KGh3KSk7CisKKwkqbmV3X2ZsYWdzICY9IFJUTF9TVVBQT1JURURfRklMVEVSUzsKKwlpZiAoIWNoYW5nZWRfZmxhZ3MpCisJCXJldHVybjsKKworCS8qVE9ETzogd2UgZGlzYWJsZSBicm9hZGNhc2Ugbm93LCBzbyBlbmFibGUgaGVyZSAqLworCWlmIChjaGFuZ2VkX2ZsYWdzICYgRklGX0FMTE1VTFRJKSB7CisJCWlmICgqbmV3X2ZsYWdzICYgRklGX0FMTE1VTFRJKSB7CisJCQltYWMtPnJ4X2NvbmYgfD0gcnRscHJpdi0+Y2ZnLT5tYXBzW01BQ19SQ1JfQU1dIHwKKwkJCSAgICBydGxwcml2LT5jZmctPm1hcHNbTUFDX1JDUl9BQl07CisJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX01BQzgwMjExLCBEQkdfTE9VRCwKKwkJCQkgKCJFbmFibGUgcmVjZWl2ZSBtdWx0aWNhc3QgZnJhbWUuXG4iKSk7CisJCX0gZWxzZSB7CisJCQltYWMtPnJ4X2NvbmYgJj0gfihydGxwcml2LT5jZmctPm1hcHNbTUFDX1JDUl9BTV0gfAorCQkJCQkgIHJ0bHByaXYtPmNmZy0+bWFwc1tNQUNfUkNSX0FCXSk7CisJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX01BQzgwMjExLCBEQkdfTE9VRCwKKwkJCQkgKCJEaXNhYmxlIHJlY2VpdmUgbXVsdGljYXN0IGZyYW1lLlxuIikpOworCQl9CisJfQorCisJaWYgKGNoYW5nZWRfZmxhZ3MgJiBGSUZfRkNTRkFJTCkgeworCQlpZiAoKm5ld19mbGFncyAmIEZJRl9GQ1NGQUlMKSB7CisJCQltYWMtPnJ4X2NvbmYgfD0gcnRscHJpdi0+Y2ZnLT5tYXBzW01BQ19SQ1JfQUNSQzMyXTsKKwkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfTUFDODAyMTEsIERCR19MT1VELAorCQkJCSAoIkVuYWJsZSByZWNlaXZlIEZDUyBlcnJvciBmcmFtZS5cbiIpKTsKKwkJfSBlbHNlIHsKKwkJCW1hYy0+cnhfY29uZiAmPSB+cnRscHJpdi0+Y2ZnLT5tYXBzW01BQ19SQ1JfQUNSQzMyXTsKKwkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfTUFDODAyMTEsIERCR19MT1VELAorCQkJCSAoIkRpc2FibGUgcmVjZWl2ZSBGQ1MgZXJyb3IgZnJhbWUuXG4iKSk7CisJCX0KKwl9CisKKwlpZiAoY2hhbmdlZF9mbGFncyAmIEZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDKSB7CisJCS8qCisJCSAqVE9ETzogQklUKDUpIGlzIHByb2JlIHJlc3BvbnNlIEJJVCg4KSBpcyBiZWFjb24KKwkJICpUT0RPOiBVc2UgZGVmaW5lIGZvciBCSVQoNSkgYW5kIEJJVCg4KQorCQkgKi8KKwkJaWYgKCpuZXdfZmxhZ3MgJiBGSUZfQkNOX1BSQlJFU1BfUFJPTUlTQykKKwkJCW1hYy0+cnhfbWd0X2ZpbHRlciB8PSAoQklUKDUpIHwgQklUKDgpKTsKKwkJZWxzZQorCQkJbWFjLT5yeF9tZ3RfZmlsdGVyICY9IH4oQklUKDUpIHwgQklUKDgpKTsKKwl9CisKKwlpZiAoY2hhbmdlZF9mbGFncyAmIEZJRl9DT05UUk9MKSB7CisJCWlmICgqbmV3X2ZsYWdzICYgRklGX0NPTlRST0wpIHsKKwkJCW1hYy0+cnhfY29uZiB8PSBydGxwcml2LT5jZmctPm1hcHNbTUFDX1JDUl9BQ0ZdOworCQkJbWFjLT5yeF9jdHJsX2ZpbHRlciB8PSBSVExfU1VQUE9SVEVEX0NUUkxfRklMVEVSOworCisJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX01BQzgwMjExLCBEQkdfTE9VRCwKKwkJCQkgKCJFbmFibGUgcmVjZWl2ZSBjb250cm9sIGZyYW1lLlxuIikpOworCQl9IGVsc2UgeworCQkJbWFjLT5yeF9jb25mICY9IH5ydGxwcml2LT5jZmctPm1hcHNbTUFDX1JDUl9BQ0ZdOworCQkJbWFjLT5yeF9jdHJsX2ZpbHRlciAmPSB+UlRMX1NVUFBPUlRFRF9DVFJMX0ZJTFRFUjsKKwkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfTUFDODAyMTEsIERCR19MT1VELAorCQkJCSAoIkRpc2FibGUgcmVjZWl2ZSBjb250cm9sIGZyYW1lLlxuIikpOworCQl9CisJfQorCisJaWYgKGNoYW5nZWRfZmxhZ3MgJiBGSUZfT1RIRVJfQlNTKSB7CisJCWlmICgqbmV3X2ZsYWdzICYgRklGX09USEVSX0JTUykgeworCQkJbWFjLT5yeF9jb25mIHw9IHJ0bHByaXYtPmNmZy0+bWFwc1tNQUNfUkNSX0FBUF07CisJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX01BQzgwMjExLCBEQkdfTE9VRCwKKwkJCQkgKCJFbmFibGUgcmVjZWl2ZSBvdGhlciBCU1MncyBmcmFtZS5cbiIpKTsKKwkJfSBlbHNlIHsKKwkJCW1hYy0+cnhfY29uZiAmPSB+cnRscHJpdi0+Y2ZnLT5tYXBzW01BQ19SQ1JfQUFQXTsKKwkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfTUFDODAyMTEsIERCR19MT1VELAorCQkJCSAoIkRpc2FibGUgcmVjZWl2ZSBvdGhlciBCU1MncyBmcmFtZS5cbiIpKTsKKwkJfQorCX0KKworCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfaHdfcmVnKGh3LCBIV19WQVJfUkNSLCAodTggKikgKCZtYWMtPnJ4X2NvbmYpKTsKKwlydGxwcml2LT5jZmctPm9wcy0+c2V0X2h3X3JlZyhodywgSFdfVkFSX01HVF9GSUxURVIsCisJCQkJICAgICAgKHU4ICopICgmbWFjLT5yeF9tZ3RfZmlsdGVyKSk7CisJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9od19yZWcoaHcsIEhXX1ZBUl9DVFJMX0ZJTFRFUiwKKwkJCQkgICAgICAodTggKikgKCZtYWMtPnJ4X2N0cmxfZmlsdGVyKSk7Cit9CisKK3N0YXRpYyBpbnQgX3J0bF9nZXRfaGFsX3FudW0odTE2IHF1ZXVlKQoreworCWludCBxbnVtOworCisJc3dpdGNoIChxdWV1ZSkgeworCWNhc2UgMDoKKwkJcW51bSA9IEFDM19WTzsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlxbnVtID0gQUMyX1ZJOworCQlicmVhazsKKwljYXNlIDI6CisJCXFudW0gPSBBQzBfQkU7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJcW51bSA9IEFDMV9CSzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcW51bSA9IEFDMF9CRTsKKwkJYnJlYWs7CisJfQorCXJldHVybiBxbnVtOworfQorCisvKgorICpmb3IgbWFjODAyMTEgVk89MCwgVkk9MSwgQkU9MiwgQks9MworICpmb3IgcnRsODE5eCAgQkU9MCwgQks9MSwgVkk9MiwgVk89MworICovCitzdGF0aWMgaW50IHJ0bF9vcF9jb25mX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MTYgcXVldWUsCisJCSAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfcGFyYW1zICpwYXJhbSkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRsX3ByaXYoaHcpKTsKKwlpbnQgYWNpOworCisJaWYgKHF1ZXVlID49IEFDX01BWCkgeworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX1dBUk5JTkcsCisJCQkgKCJxdWV1ZSBudW1iZXIgJWQgaXMgaW5jb3JyZWN0IVxuIiwgcXVldWUpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJYWNpID0gX3J0bF9nZXRfaGFsX3FudW0ocXVldWUpOworCW1hYy0+YWNbYWNpXS5haWZzID0gcGFyYW0tPmFpZnM7CisJbWFjLT5hY1thY2ldLmN3X21pbiA9IHBhcmFtLT5jd19taW47CisJbWFjLT5hY1thY2ldLmN3X21heCA9IHBhcmFtLT5jd19tYXg7CisJbWFjLT5hY1thY2ldLnR4X29wID0gcGFyYW0tPnR4b3A7CisJbWVtY3B5KCZtYWMtPmVkY2FfcGFyYW1bYWNpXSwgcGFyYW0sIHNpemVvZigqcGFyYW0pKTsKKwlydGxwcml2LT5jZmctPm9wcy0+c2V0X3FvcyhodywgYWNpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcnRsX29wX2Jzc19pbmZvX2NoYW5nZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmJzc19jb25mLCB1MzIgY2hhbmdlZCkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX3BzX2N0bCAqcHBzYyA9IHJ0bF9wc2MocnRsX3ByaXYoaHcpKTsKKworCW11dGV4X2xvY2soJnJ0bHByaXYtPmxvY2tzLmNvbmZfbXV0ZXgpOworCisJaWYgKCh2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHx8CisJICAgICh2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApIHx8CisJICAgICh2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCkpIHsKKworCQlpZiAoKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9CRUFDT04pIHx8CisJCSAgICAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0JFQUNPTl9FTkFCTEVEICYmCisJCSAgICAgYnNzX2NvbmYtPmVuYWJsZV9iZWFjb24pKSB7CisKKwkJCWlmIChtYWMtPmJlYWNvbl9lbmFibGVkID09IDApIHsKKwkJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX01BQzgwMjExLCBEQkdfRE1FU0csCisJCQkJCSAoIkJTU19DSEFOR0VEX0JFQUNPTl9FTkFCTEVEXG4iKSk7CisKKwkJCQkvKnN0YXJ0IGh3IGJlYWNvbiBpbnRlcnJ1cHQuICovCisJCQkJLypydGxwcml2LT5jZmctPm9wcy0+c2V0X2Jjbl9yZWcoaHcpOyAqLworCQkJCW1hYy0+YmVhY29uX2VuYWJsZWQgPSAxOworCQkJCXJ0bHByaXYtPmNmZy0+b3BzLT51cGRhdGVfaW50ZXJydXB0X21hc2soaHcsCisJCQkJCQlydGxwcml2LT5jZmctPm1hcHMKKwkJCQkJCVtSVExfSUJTU19JTlRfTUFTS1NdLAorCQkJCQkJMCk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAobWFjLT5iZWFjb25fZW5hYmxlZCA9PSAxKSB7CisJCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9NQUM4MDIxMSwgREJHX0RNRVNHLAorCQkJCQkgKCJBREhPQyBESVNBQkxFIEJFQUNPTlxuIikpOworCisJCQkJbWFjLT5iZWFjb25fZW5hYmxlZCA9IDA7CisJCQkJcnRscHJpdi0+Y2ZnLT5vcHMtPnVwZGF0ZV9pbnRlcnJ1cHRfbWFzayhodywgMCwKKwkJCQkJCXJ0bHByaXYtPmNmZy0+bWFwcworCQkJCQkJW1JUTF9JQlNTX0lOVF9NQVNLU10pOworCQkJfQorCQl9CisKKwkJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9CRUFDT05fSU5UKSB7CisJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0JFQUNPTiwgREJHX1RSQUNFLAorCQkJCSAoIkJTU19DSEFOR0VEX0JFQUNPTl9JTlRcbiIpKTsKKwkJCW1hYy0+YmVhY29uX2ludGVydmFsID0gYnNzX2NvbmYtPmJlYWNvbl9pbnQ7CisJCQlydGxwcml2LT5jZmctPm9wcy0+c2V0X2Jjbl9pbnR2KGh3KTsKKwkJfQorCX0KKworCS8qVE9ETzogcmVmZXJlbmNlIHRvIGVudW0gaWVlZTgwMjExX2Jzc19jaGFuZ2UgKi8KKwlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0FTU09DKSB7CisJCWlmIChic3NfY29uZi0+YXNzb2MpIHsKKwkJCW1hYy0+bGlua19zdGF0ZSA9IE1BQzgwMjExX0xJTktFRDsKKwkJCW1hYy0+Y250X2FmdGVyX2xpbmtlZCA9IDA7CisJCQltYWMtPmFzc29jX2lkID0gYnNzX2NvbmYtPmFpZDsKKwkJCW1lbWNweShtYWMtPmJzc2lkLCBic3NfY29uZi0+YnNzaWQsIDYpOworCisJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX01BQzgwMjExLCBEQkdfRE1FU0csCisJCQkJICgiQlNTX0NIQU5HRURfQVNTT0NcbiIpKTsKKwkJfSBlbHNlIHsKKwkJCWlmIChtYWMtPmxpbmtfc3RhdGUgPT0gTUFDODAyMTFfTElOS0VEKQorCQkJCXJ0bF9scHNfbGVhdmUoaHcpOworCisJCQltYWMtPmxpbmtfc3RhdGUgPSBNQUM4MDIxMV9OT0xJTks7CisJCQltZW1zZXQobWFjLT5ic3NpZCwgMCwgNik7CisKKwkJCS8qIHJlc2V0IHNlYyBpbmZvICovCisJCQlydGxfY2FtX3Jlc2V0X3NlY19pbmZvKGh3KTsKKworCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9NQUM4MDIxMSwgREJHX0RNRVNHLAorCQkJCSAoIkJTU19DSEFOR0VEX1VOX0FTU09DXG4iKSk7CisJCX0KKwl9CisKKwlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0VSUF9DVFNfUFJPVCkgeworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX01BQzgwMjExLCBEQkdfVFJBQ0UsCisJCQkgKCJCU1NfQ0hBTkdFRF9FUlBfQ1RTX1BST1RcbiIpKTsKKwkJbWFjLT51c2VfY3RzX3Byb3RlY3QgPSBic3NfY29uZi0+dXNlX2N0c19wcm90OworCX0KKworCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfRVJQX1BSRUFNQkxFKSB7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfTUFDODAyMTEsIERCR19MT1VELAorCQkJICgiQlNTX0NIQU5HRURfRVJQX1BSRUFNQkxFIHVzZSBzaG9ydCBwcmVhbWJsZToleFxuIiwKKwkJCSAgYnNzX2NvbmYtPnVzZV9zaG9ydF9wcmVhbWJsZSkpOworCisJCW1hYy0+c2hvcnRfcHJlYW1ibGUgPSBic3NfY29uZi0+dXNlX3Nob3J0X3ByZWFtYmxlOworCQlydGxwcml2LT5jZmctPm9wcy0+c2V0X2h3X3JlZyhodywgSFdfVkFSX0FDS19QUkVBTUJMRSwKKwkJCQkJICAgICAgKHU4ICopICgmbWFjLT5zaG9ydF9wcmVhbWJsZSkpOworCX0KKworCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfRVJQX1NMT1QpIHsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9NQUM4MDIxMSwgREJHX1RSQUNFLAorCQkJICgiQlNTX0NIQU5HRURfRVJQX1NMT1RcbiIpKTsKKworCQlpZiAoYnNzX2NvbmYtPnVzZV9zaG9ydF9zbG90KQorCQkJbWFjLT5zbG90X3RpbWUgPSBSVExfU0xPVF9USU1FXzk7CisJCWVsc2UKKwkJCW1hYy0+c2xvdF90aW1lID0gUlRMX1NMT1RfVElNRV8yMDsKKworCQlydGxwcml2LT5jZmctPm9wcy0+c2V0X2h3X3JlZyhodywgSFdfVkFSX1NMT1RfVElNRSwKKwkJCQkJICAgICAgKHU4ICopICgmbWFjLT5zbG90X3RpbWUpKTsKKwl9CisKKwlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0hUKSB7CisJCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEgPSBOVUxMOworCisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfTUFDODAyMTEsIERCR19UUkFDRSwKKwkJCSAoIkJTU19DSEFOR0VEX0hUXG4iKSk7CisKKwkJc3RhID0gaWVlZTgwMjExX2ZpbmRfc3RhKG1hYy0+dmlmLCBtYWMtPmJzc2lkKTsKKworCQlpZiAoc3RhKSB7CisJCQlpZiAoc3RhLT5odF9jYXAuYW1wZHVfZGVuc2l0eSA+CisJCQkgICAgbWFjLT5jdXJyZW50X2FtcGR1X2RlbnNpdHkpCisJCQkJbWFjLT5jdXJyZW50X2FtcGR1X2RlbnNpdHkgPQorCQkJCSAgICBzdGEtPmh0X2NhcC5hbXBkdV9kZW5zaXR5OworCQkJaWYgKHN0YS0+aHRfY2FwLmFtcGR1X2ZhY3RvciA8CisJCQkgICAgbWFjLT5jdXJyZW50X2FtcGR1X2ZhY3RvcikKKwkJCQltYWMtPmN1cnJlbnRfYW1wZHVfZmFjdG9yID0KKwkJCQkgICAgc3RhLT5odF9jYXAuYW1wZHVfZmFjdG9yOworCQl9CisKKwkJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9od19yZWcoaHcsIEhXX1ZBUl9TSE9SVEdJX0RFTlNJVFksCisJCQkJCSAgICAgICh1OCAqKSAoJm1hYy0+bWF4X21zc19kZW5zaXR5KSk7CisJCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfaHdfcmVnKGh3LCBIV19WQVJfQU1QRFVfRkFDVE9SLAorCQkJCQkgICAgICAmbWFjLT5jdXJyZW50X2FtcGR1X2ZhY3Rvcik7CisJCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfaHdfcmVnKGh3LCBIV19WQVJfQU1QRFVfTUlOX1NQQUNFLAorCQkJCQkgICAgICAmbWFjLT5jdXJyZW50X2FtcGR1X2RlbnNpdHkpOworCX0KKworCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQlNTSUQpIHsKKwkJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSA9IE5VTEw7CisJCXUzMiBiYXNpY19yYXRlczsKKwkJdTggaTsKKworCQlydGxwcml2LT5jZmctPm9wcy0+c2V0X2h3X3JlZyhodywgSFdfVkFSX0JTU0lELAorCQkJCQkgICAgICAodTggKikgYnNzX2NvbmYtPmJzc2lkKTsKKworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX01BQzgwMjExLCBEQkdfRE1FU0csCisJCQkgKE1BQ19GTVQgIlxuIiwgTUFDX0FSRyhic3NfY29uZi0+YnNzaWQpKSk7CisKKwkJbWVtY3B5KG1hYy0+YnNzaWQsIGJzc19jb25mLT5ic3NpZCwgNik7CisJCWlmIChpc192YWxpZF9ldGhlcl9hZGRyKGJzc19jb25mLT5ic3NpZCkpIHsKKwkJCXN3aXRjaCAodmlmLT50eXBlKSB7CisJCQljYXNlIE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEOgorCQkJCWJyZWFrOworCQkJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKKwkJCQlicmVhazsKKwkJCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKKwkJCQlicmVhazsKKwkJCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfRU1FUkcsCisJCQkJCSAoInN3aXRjaCBjYXNlIG5vdCBwcm9jZXNzXG4iKSk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlydGxwcml2LT5jZmctPm9wcy0+c2V0X25ldHdvcmtfdHlwZShodywgdmlmLT50eXBlKTsKKwkJfSBlbHNlCisJCQlydGxwcml2LT5jZmctPm9wcy0+c2V0X25ldHdvcmtfdHlwZShodywKKwkJCQkJTkw4MDIxMV9JRlRZUEVfVU5TUEVDSUZJRUQpOworCisJCW1lbXNldChtYWMtPm1jcywgMCwgMTYpOworCQltYWMtPmh0X2VuYWJsZSA9IGZhbHNlOworCQltYWMtPnNnaV80MCA9IGZhbHNlOworCQltYWMtPnNnaV8yMCA9IGZhbHNlOworCisJCWlmICghYnNzX2NvbmYtPnVzZV9zaG9ydF9zbG90KQorCQkJbWFjLT5tb2RlID0gV0lSRUxFU1NfTU9ERV9COworCQllbHNlCisJCQltYWMtPm1vZGUgPSBXSVJFTEVTU19NT0RFX0c7CisKKwkJc3RhID0gaWVlZTgwMjExX2ZpbmRfc3RhKG1hYy0+dmlmLCBtYWMtPmJzc2lkKTsKKworCQlpZiAoc3RhKSB7CisJCQlpZiAoc3RhLT5odF9jYXAuaHRfc3VwcG9ydGVkKSB7CisJCQkJbWFjLT5tb2RlID0gV0lSRUxFU1NfTU9ERV9OXzI0RzsKKwkJCQltYWMtPmh0X2VuYWJsZSA9IHRydWU7CisJCQl9CisKKwkJCWlmIChtYWMtPmh0X2VuYWJsZSkgeworCQkJCXUxNiBodF9jYXAgPSBzdGEtPmh0X2NhcC5jYXA7CisJCQkJbWVtY3B5KG1hYy0+bWNzLCAodTggKikgKCZzdGEtPmh0X2NhcC5tY3MpLCAxNik7CisKKwkJCQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKKwkJCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9NQUM4MDIxMSwKKwkJCQkJCSBEQkdfTE9VRCwgKCIleCAiLAorCQkJCQkJCSAgICBtYWMtPm1jc1tpXSkpOworCQkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfTUFDODAyMTEsIERCR19MT1VELAorCQkJCQkgKCJcbiIpKTsKKworCQkJCWlmIChodF9jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX1NHSV80MCkKKwkJCQkJbWFjLT5zZ2lfNDAgPSB0cnVlOworCisJCQkJaWYgKGh0X2NhcCAmIElFRUU4MDIxMV9IVF9DQVBfU0dJXzIwKQorCQkJCQltYWMtPnNnaV8yMCA9IHRydWU7CisKKwkJCQkvKgorCQkJCSAqIGZvciBjaXNjbyAxMjUyIGJ3MjAgaXQncyB3cm9uZworCQkJCSAqIGlmIChodF9jYXAgJgorCQkJCSAqICAgICBJRUVFODAyMTFfSFRfQ0FQX1NVUF9XSURUSF8yMF80MCkgeworCQkJCSAqCW1hYy0+YndfNDAgPSB0cnVlOworCQkJCSAqIH0KKwkJCQkgKi8KKwkJCX0KKwkJfQorCisJCS8qbWFjODAyMTEganVzdCBnaXZlIHVzIENDSyByYXRlcyBhbnkgdGltZQorCQkgKlNvIHdlIGFkZCBHIHJhdGUgaW4gYmFzaWMgcmF0ZXMgd2hlbgorCQkgbm90IGluIEIgbW9kZSovCisJCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQkFTSUNfUkFURVMpIHsKKwkJCWlmIChtYWMtPm1vZGUgPT0gV0lSRUxFU1NfTU9ERV9CKQorCQkJCWJhc2ljX3JhdGVzID0gYnNzX2NvbmYtPmJhc2ljX3JhdGVzIHwgMHgwMGY7CisJCQllbHNlCisJCQkJYmFzaWNfcmF0ZXMgPSBic3NfY29uZi0+YmFzaWNfcmF0ZXMgfCAweGZmMDsKKworCQkJaWYgKCF2aWYpCisJCQkJZ290byBvdXQ7CisKKwkJCW1hYy0+YmFzaWNfcmF0ZXMgPSBiYXNpY19yYXRlczsKKwkJCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfaHdfcmVnKGh3LCBIV19WQVJfQkFTSUNfUkFURSwKKwkJCQkJKHU4ICopICgmYmFzaWNfcmF0ZXMpKTsKKworCQkJaWYgKHJ0bHByaXYtPmRtLmJfdXNlcmFtYXNrKQorCQkJCXJ0bHByaXYtPmNmZy0+b3BzLT51cGRhdGVfcmF0ZV9tYXNrKGh3LCAwKTsKKwkJCWVsc2UKKwkJCQlydGxwcml2LT5jZmctPm9wcy0+dXBkYXRlX3JhdGVfdGFibGUoaHcpOworCisJCX0KKwl9CisKKwkvKgorCSAqIEZvciBGVyBMUFM6CisJICogVG8gdGVsbCBmaXJtd2FyZSB3ZSBoYXZlIGNvbm5lY3RlZAorCSAqIHRvIGFuIEFQLiBGb3IgOTJTRS9DRSBwb3dlciBzYXZlIHYyLgorCSAqLworCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQVNTT0MpIHsKKwkJaWYgKGJzc19jb25mLT5hc3NvYykgeworCQkJaWYgKHBwc2MtPmJfZndjdHJsX2xwcykgeworCQkJCXU4IG1zdGF0dXMgPSBSVF9NRURJQV9DT05ORUNUOworCQkJCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfaHdfcmVnKGh3LAorCQkJCQkJICAgICAgSFdfVkFSX0gyQ19GV19KT0lOQlNTUlBULAorCQkJCQkJICAgICAgKHU4ICopICgmbXN0YXR1cykpOworCQkJCXBwc2MtPnJlcG9ydF9saW5rZWQgPSB0cnVlOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKHBwc2MtPmJfZndjdHJsX2xwcykgeworCQkJCXU4IG1zdGF0dXMgPSBSVF9NRURJQV9ESVNDT05ORUNUOworCQkJCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfaHdfcmVnKGh3LAorCQkJCQkJICAgICAgSFdfVkFSX0gyQ19GV19KT0lOQlNTUlBULAorCQkJCQkJICAgICAgKHU4ICopKCZtc3RhdHVzKSk7CisJCQkJcHBzYy0+cmVwb3J0X2xpbmtlZCA9IGZhbHNlOworCQkJfQorCQl9CisJfQorCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZydGxwcml2LT5sb2Nrcy5jb25mX211dGV4KTsKK30KKworc3RhdGljIHU2NCBydGxfb3BfZ2V0X3RzZihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJdTY0IHRzZjsKKworCXJ0bHByaXYtPmNmZy0+b3BzLT5nZXRfaHdfcmVnKGh3LCBIV19WQVJfQ09SUkVDVF9UU0YsICh1OCAqKSAoJnRzZikpOworCXJldHVybiB0c2Y7Cit9CisKK3N0YXRpYyB2b2lkIHJ0bF9vcF9zZXRfdHNmKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1NjQgdHNmKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOworCXU4IGJpYnNzID0gKG1hYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSA/IDEgOiAwOzsKKworCW1hYy0+dHNmID0gdHNmOworCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfaHdfcmVnKGh3LCBIV19WQVJfQ09SUkVDVF9UU0YsICh1OCAqKSAoJmJpYnNzKSk7Cit9CisKK3N0YXRpYyB2b2lkIHJ0bF9vcF9yZXNldF90c2Yoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXU4IHRtcCA9IDA7CisKKwlydGxwcml2LT5jZmctPm9wcy0+c2V0X2h3X3JlZyhodywgSFdfVkFSX0RVQUxfVFNGX1JTVCwgKHU4ICopICgmdG1wKSk7Cit9CisKK3N0YXRpYyB2b2lkIHJ0bF9vcF9zdGFfbm90aWZ5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCSAgICAgIGVudW0gc3RhX25vdGlmeV9jbWQgY21kLAorCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkKK3sKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU1RBX05PVElGWV9TTEVFUDoKKwkJYnJlYWs7CisJY2FzZSBTVEFfTk9USUZZX0FXQUtFOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcnRsX29wX2FtcGR1X2FjdGlvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJICAgICAgIGVudW0gaWVlZTgwMjExX2FtcGR1X21sbWVfYWN0aW9uIGFjdGlvbiwKKwkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1MTYgdGlkLCB1MTYgKiBzc24pCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCisJc3dpdGNoIChhY3Rpb24pIHsKKwljYXNlIElFRUU4MDIxMV9BTVBEVV9UWF9TVEFSVDoKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9NQUM4MDIxMSwgREJHX1RSQUNFLAorCQkJICgiSUVFRTgwMjExX0FNUERVX1RYX1NUQVJUOiBUSUQ6JWRcbiIsIHRpZCkpOworCQlyZXR1cm4gcnRsX3R4X2FnZ19zdGFydChodywgc3RhLT5hZGRyLCB0aWQsIHNzbik7CisJCWJyZWFrOworCWNhc2UgSUVFRTgwMjExX0FNUERVX1RYX1NUT1A6CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfTUFDODAyMTEsIERCR19UUkFDRSwKKwkJCSAoIklFRUU4MDIxMV9BTVBEVV9UWF9TVE9QOiBUSUQ6JWRcbiIsIHRpZCkpOworCQlyZXR1cm4gcnRsX3R4X2FnZ19zdG9wKGh3LCBzdGEtPmFkZHIsIHRpZCk7CisJCWJyZWFrOworCWNhc2UgSUVFRTgwMjExX0FNUERVX1RYX09QRVJBVElPTkFMOgorCQlSVF9UUkFDRShydGxwcml2LCBDT01QX01BQzgwMjExLCBEQkdfVFJBQ0UsCisJCQkgKCJJRUVFODAyMTFfQU1QRFVfVFhfT1BFUkFUSU9OQUw6VElEOiVkXG4iLCB0aWQpKTsKKwkJYnJlYWs7CisJY2FzZSBJRUVFODAyMTFfQU1QRFVfUlhfU1RBUlQ6CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfTUFDODAyMTEsIERCR19UUkFDRSwKKwkJCSAoIklFRUU4MDIxMV9BTVBEVV9SWF9TVEFSVDpUSUQ6JWRcbiIsIHRpZCkpOworCQlicmVhazsKKwljYXNlIElFRUU4MDIxMV9BTVBEVV9SWF9TVE9QOgorCQlSVF9UUkFDRShydGxwcml2LCBDT01QX01BQzgwMjExLCBEQkdfVFJBQ0UsCisJCQkgKCJJRUVFODAyMTFfQU1QRFVfUlhfU1RPUDpUSUQ6JWRcbiIsIHRpZCkpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX0VNRVJHLAorCQkJICgiSUVFRTgwMjExX0FNUERVX0VSUiEhISE6XG4iKSk7CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHJ0bF9vcF9zd19zY2FuX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOworCisJbWFjLT5hY3Rfc2Nhbm5pbmcgPSB0cnVlOworCisJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9NQUM4MDIxMSwgREJHX0xPVUQsICgiXG4iKSk7CisKKwlpZiAobWFjLT5saW5rX3N0YXRlID09IE1BQzgwMjExX0xJTktFRCkgeworCQlydGxfbHBzX2xlYXZlKGh3KTsKKwkJbWFjLT5saW5rX3N0YXRlID0gTUFDODAyMTFfTElOS0VEX1NDQU5OSU5HOworCX0gZWxzZQorCQlydGxfaXBzX25pY19vbihodyk7CisKKwlydGxwcml2LT5jZmctPm9wcy0+bGVkX2NvbnRyb2woaHcsIExFRF9DVExfU0lURV9TVVJWRVkpOworCXJ0bHByaXYtPmNmZy0+b3BzLT5zY2FuX29wZXJhdGlvbl9iYWNrdXAoaHcsIFNDQU5fT1BUX0JBQ0tVUCk7Cit9CisKK3N0YXRpYyB2b2lkIHJ0bF9vcF9zd19zY2FuX2NvbXBsZXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOworCisJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9NQUM4MDIxMSwgREJHX0xPVUQsICgiXG4iKSk7CisKKwlydGxwcml2LT5jZmctPm9wcy0+c2Nhbl9vcGVyYXRpb25fYmFja3VwKGh3LCBTQ0FOX09QVF9SRVNUT1JFKTsKKwltYWMtPmFjdF9zY2FubmluZyA9IGZhbHNlOworCWlmIChtYWMtPmxpbmtfc3RhdGUgPT0gTUFDODAyMTFfTElOS0VEX1NDQU5OSU5HKSB7CisJCW1hYy0+bGlua19zdGF0ZSA9IE1BQzgwMjExX0xJTktFRDsKKworCQkvKiBmaXggZndscHMgaXNzdWUgKi8KKwkJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9uZXR3b3JrX3R5cGUoaHcsIG1hYy0+b3Btb2RlKTsKKworCQlpZiAocnRscHJpdi0+ZG0uYl91c2VyYW1hc2spCisJCQlydGxwcml2LT5jZmctPm9wcy0+dXBkYXRlX3JhdGVfbWFzayhodywgMCk7CisJCWVsc2UKKwkJCXJ0bHByaXYtPmNmZy0+b3BzLT51cGRhdGVfcmF0ZV90YWJsZShodyk7CisKKwl9CisKK30KKworc3RhdGljIGludCBydGxfb3Bfc2V0X2tleShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgZW51bSBzZXRfa2V5X2NtZCBjbWQsCisJCQkgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCisJCQkgIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRsX3ByaXYoaHcpKTsKKwl1OCBrZXlfdHlwZSA9IE5PX0VOQ1JZUFRJT047CisJdTgga2V5X2lkeDsKKwlib29sIGdyb3VwX2tleSA9IGZhbHNlOworCWJvb2wgd2VwX29ubHkgPSBmYWxzZTsKKwlpbnQgZXJyID0gMDsKKwl1OCBtYWNfYWRkcltFVEhfQUxFTl07CisJdTggYmNhc3RfYWRkcltFVEhfQUxFTl0gPSB7IDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYgfTsKKwl1OCB6ZXJvX2FkZHJbRVRIX0FMRU5dID0geyAwIH07CisKKwlpZiAocnRscHJpdi0+Y2ZnLT5tb2RfcGFyYW1zLT5zd19jcnlwdG8gfHwgcnRscHJpdi0+c2VjLnVzZV9zd19zZWMpIHsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19XQVJOSU5HLAorCQkJICgibm90IG9wZW4gaHcgZW5jcnlwdGlvblxuIikpOworCQlyZXR1cm4gLUVOT1NQQzsJLypVc2VyIGRpc2FibGVkIEhXLWNyeXB0byAqLworCX0KKwlSVF9UUkFDRShydGxwcml2LCBDT01QX1NFQywgREJHX0RNRVNHLAorCQkgKCIlcyBoYXJkd2FyZSBiYXNlZCBlbmNyeXB0aW9uIGZvciBrZXlpZHg6ICVkLCBtYWM6ICVwTVxuIiwKKwkJICBjbWQgPT0gU0VUX0tFWSA/ICJVc2luZyIgOiAiRGlzYWJsaW5nIiwga2V5LT5rZXlpZHgsCisJCSAgc3RhID8gc3RhLT5hZGRyIDogYmNhc3RfYWRkcikpOworCXJ0bHByaXYtPnNlYy5iZWluZ19zZXRrZXkgPSB0cnVlOworCXJ0bF9pcHNfbmljX29uKGh3KTsKKwltdXRleF9sb2NrKCZydGxwcml2LT5sb2Nrcy5jb25mX211dGV4KTsKKwkvKiA8MT4gZ2V0IGVuY3J5cHRpb24gYWxnICovCisJc3dpdGNoIChrZXktPmNpcGhlcikgeworCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfV0VQNDA6CisJCWtleV90eXBlID0gV0VQNDBfRU5DUllQVElPTjsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9TRUMsIERCR19ETUVTRywgKCJhbGc6V0VQNDBcbiIpKTsKKwkJcnRscHJpdi0+c2VjLnVzZV9kZWZhdWx0a2V5ID0gdHJ1ZTsKKwkJYnJlYWs7CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9XRVAxMDQ6CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfU0VDLCBEQkdfRE1FU0csCisJCQkgKCJhbGc6V0VQMTA0XG4iKSk7CisJCWtleV90eXBlID0gV0VQMTA0X0VOQ1JZUFRJT047CisJCXJ0bHByaXYtPnNlYy51c2VfZGVmYXVsdGtleSA9IHRydWU7CisJCWJyZWFrOworCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfVEtJUDoKKwkJa2V5X3R5cGUgPSBUS0lQX0VOQ1JZUFRJT047CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfU0VDLCBEQkdfRE1FU0csICgiYWxnOlRLSVBcbiIpKTsKKwkJaWYgKG1hYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKQorCQkJcnRscHJpdi0+c2VjLnVzZV9kZWZhdWx0a2V5ID0gdHJ1ZTsKKwkJYnJlYWs7CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9DQ01QOgorCQlrZXlfdHlwZSA9IEFFU0NDTVBfRU5DUllQVElPTjsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9TRUMsIERCR19ETUVTRywgKCJhbGc6Q0NNUFxuIikpOworCQlpZiAobWFjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCisJCQlydGxwcml2LT5zZWMudXNlX2RlZmF1bHRrZXkgPSB0cnVlOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX0VNRVJHLAorCQkJICgiYWxnX2VycjoleCEhISE6XG4iLCBrZXktPmNpcGhlcikpOworCQlnb3RvIG91dF91bmxvY2s7CisJfQorCS8qIDwyPiBnZXQga2V5X2lkeCAqLworCWtleV9pZHggPSAodTgpIChrZXktPmtleWlkeCk7CisJaWYgKGtleV9pZHggPiAzKQorCQlnb3RvIG91dF91bmxvY2s7CisJLyogPDM+IGlmIHBhaXJ3aXNlIGtleSBlbmFibGVfaHdfc2VjICovCisJZ3JvdXBfa2V5ID0gIShrZXktPmZsYWdzICYgSUVFRTgwMjExX0tFWV9GTEFHX1BBSVJXSVNFKTsKKwlpZiAoKCFncm91cF9rZXkpIHx8IChtYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgfHwKKwkgICAgcnRscHJpdi0+c2VjLnBhaXJ3aXNlX2VuY19hbGdvcml0aG0gPT0gTk9fRU5DUllQVElPTikgeworCQlpZiAocnRscHJpdi0+c2VjLnBhaXJ3aXNlX2VuY19hbGdvcml0aG0gPT0gTk9fRU5DUllQVElPTiAmJgorCQkgICAgKGtleV90eXBlID09IFdFUDQwX0VOQ1JZUFRJT04gfHwKKwkJICAgICBrZXlfdHlwZSA9PSBXRVAxMDRfRU5DUllQVElPTikpCisJCQl3ZXBfb25seSA9IHRydWU7CisJCXJ0bHByaXYtPnNlYy5wYWlyd2lzZV9lbmNfYWxnb3JpdGhtID0ga2V5X3R5cGU7CisJCXJ0bHByaXYtPmNmZy0+b3BzLT5lbmFibGVfaHdfc2VjKGh3KTsKKwl9CisJLyogPDQ+IHNldCBrZXkgYmFzZWQgb24gY21kICovCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNFVF9LRVk6CisJCWlmICh3ZXBfb25seSkgeworCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9TRUMsIERCR19ETUVTRywKKwkJCQkgKCJzZXQgV0VQKGdyb3VwL3BhaXJ3aXNlKSBrZXlcbiIpKTsKKwkJCS8qIFBhaXJ3aXNlIGtleSB3aXRoIGFuIGFzc2lnbmVkIE1BQyBhZGRyZXNzLiAqLworCQkJcnRscHJpdi0+c2VjLnBhaXJ3aXNlX2VuY19hbGdvcml0aG0gPSBrZXlfdHlwZTsKKwkJCXJ0bHByaXYtPnNlYy5ncm91cF9lbmNfYWxnb3JpdGhtID0ga2V5X3R5cGU7CisJCQkvKnNldCBsb2NhbCBidWYgYWJvdXQgd2VwIGtleS4gKi8KKwkJCW1lbWNweShydGxwcml2LT5zZWMua2V5X2J1ZltrZXlfaWR4XSwKKwkJCSAgICAgICBrZXktPmtleSwga2V5LT5rZXlsZW4pOworCQkJcnRscHJpdi0+c2VjLmtleV9sZW5ba2V5X2lkeF0gPSBrZXktPmtleWxlbjsKKwkJCW1lbWNweShtYWNfYWRkciwgemVyb19hZGRyLCBFVEhfQUxFTik7CisJCX0gZWxzZSBpZiAoZ3JvdXBfa2V5KSB7CS8qIGdyb3VwIGtleSAqLworCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9TRUMsIERCR19ETUVTRywKKwkJCQkgKCJzZXQgZ3JvdXAga2V5XG4iKSk7CisJCQkvKiBncm91cCBrZXkgKi8KKwkJCXJ0bHByaXYtPnNlYy5ncm91cF9lbmNfYWxnb3JpdGhtID0ga2V5X3R5cGU7CisJCQkvKnNldCBsb2NhbCBidWYgYWJvdXQgZ3JvdXAga2V5LiAqLworCQkJbWVtY3B5KHJ0bHByaXYtPnNlYy5rZXlfYnVmW2tleV9pZHhdLAorCQkJICAgICAgIGtleS0+a2V5LCBrZXktPmtleWxlbik7CisJCQlydGxwcml2LT5zZWMua2V5X2xlbltrZXlfaWR4XSA9IGtleS0+a2V5bGVuOworCQkJbWVtY3B5KG1hY19hZGRyLCBiY2FzdF9hZGRyLCBFVEhfQUxFTik7CisJCX0gZWxzZSB7CS8qIHBhaXJ3aXNlIGtleSAqLworCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9TRUMsIERCR19ETUVTRywKKwkJCQkgKCJzZXQgcGFpcndpc2Uga2V5XG4iKSk7CisJCQlpZiAoIXN0YSkgeworCQkJCVJUX0FTU0VSVChmYWxzZSwgKCJwYWlyd2lzZSBrZXkgd2l0aG5vdCIKKwkJCQkJCSAgIm1hY19hZGRyXG4iKSk7CisJCQkJZXJyID0gLUVPUE5PVFNVUFA7CisJCQkJZ290byBvdXRfdW5sb2NrOworCQkJfQorCQkJLyogUGFpcndpc2Uga2V5IHdpdGggYW4gYXNzaWduZWQgTUFDIGFkZHJlc3MuICovCisJCQlydGxwcml2LT5zZWMucGFpcndpc2VfZW5jX2FsZ29yaXRobSA9IGtleV90eXBlOworCQkJLypzZXQgbG9jYWwgYnVmIGFib3V0IHBhaXJ3aXNlIGtleS4gKi8KKwkJCW1lbWNweShydGxwcml2LT5zZWMua2V5X2J1ZltQQUlSV0lTRV9LRVlJRFhdLAorCQkJICAgICAgIGtleS0+a2V5LCBrZXktPmtleWxlbik7CisJCQlydGxwcml2LT5zZWMua2V5X2xlbltQQUlSV0lTRV9LRVlJRFhdID0ga2V5LT5rZXlsZW47CisJCQlydGxwcml2LT5zZWMucGFpcndpc2Vfa2V5ID0KKwkJCSAgICBydGxwcml2LT5zZWMua2V5X2J1ZltQQUlSV0lTRV9LRVlJRFhdOworCQkJbWVtY3B5KG1hY19hZGRyLCBzdGEtPmFkZHIsIEVUSF9BTEVOKTsKKwkJfQorCQlydGxwcml2LT5jZmctPm9wcy0+c2V0X2tleShodywga2V5X2lkeCwgbWFjX2FkZHIsCisJCQkJCSAgIGdyb3VwX2tleSwga2V5X3R5cGUsIHdlcF9vbmx5LAorCQkJCQkgICBmYWxzZSk7CisJCS8qIDw1PiB0ZWxsIG1hYzgwMjExIGRvIHNvbWV0aGluZzogKi8KKwkJLyptdXN0IHVzZSBzdyBnZW5lcmF0ZSBJViwgb3IgY2FuIG5vdCB3b3JrICEhISEuICovCisJCWtleS0+ZmxhZ3MgfD0gSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX0lWOworCQlrZXktPmh3X2tleV9pZHggPSBrZXlfaWR4OworCQlpZiAoa2V5X3R5cGUgPT0gVEtJUF9FTkNSWVBUSU9OKQorCQkJa2V5LT5mbGFncyB8PSBJRUVFODAyMTFfS0VZX0ZMQUdfR0VORVJBVEVfTU1JQzsKKwkJYnJlYWs7CisJY2FzZSBESVNBQkxFX0tFWToKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9TRUMsIERCR19ETUVTRywKKwkJCSAoImRpc2FibGUga2V5IGRlbGV0ZSBvbmUgZW50cnlcbiIpKTsKKwkJLypzZXQgbG9jYWwgYnVmIGFib3V0IHdlcCBrZXkuICovCisJCW1lbXNldChydGxwcml2LT5zZWMua2V5X2J1ZltrZXlfaWR4XSwgMCwga2V5LT5rZXlsZW4pOworCQlydGxwcml2LT5zZWMua2V5X2xlbltrZXlfaWR4XSA9IDA7CisJCW1lbWNweShtYWNfYWRkciwgemVyb19hZGRyLCBFVEhfQUxFTik7CisJCS8qCisJCSAqbWFjODAyMTEgd2lsbCBkZWxldGUgZW50cnlzIG9uZSBieSBvbmUsCisJCSAqc28gZG9uJ3QgdXNlIHJ0bF9jYW1fcmVzZXRfYWxsX2VudHJ5CisJCSAqb3IgY2xlYXIgYWxsIGVudHJ5IGhlcmUuCisJCSAqLworCQlydGxfY2FtX2RlbGV0ZV9vbmVfZW50cnkoaHcsIG1hY19hZGRyLCBrZXlfaWR4KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19FTUVSRywKKwkJCSAoImNtZF9lcnI6JXghISEhOlxuIiwgY21kKSk7CisJfQorb3V0X3VubG9jazoKKwltdXRleF91bmxvY2soJnJ0bHByaXYtPmxvY2tzLmNvbmZfbXV0ZXgpOworCXJ0bHByaXYtPnNlYy5iZWluZ19zZXRrZXkgPSBmYWxzZTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBydGxfb3BfcmZraWxsX3BvbGwoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCisJYm9vbCByYWRpb19zdGF0ZTsKKwlib29sIGJsb2NrZWQ7CisJdTggdmFsaWQgPSAwOworCisJaWYgKCF0ZXN0X2JpdChSVExfU1RBVFVTX0lOVEVSRkFDRV9TVEFSVCwgJnJ0bHByaXYtPnN0YXR1cykpCisJCXJldHVybjsKKworCW11dGV4X2xvY2soJnJ0bHByaXYtPmxvY2tzLmNvbmZfbXV0ZXgpOworCisJLyppZiBSYWRpbyBPbiByZXR1cm4gdHJ1ZSBoZXJlICovCisJcmFkaW9fc3RhdGUgPSBydGxwcml2LT5jZmctPm9wcy0+cmFkaW9fb25vZmZfY2hlY2tpbmcoaHcsICZ2YWxpZCk7CisKKwlpZiAodmFsaWQpIHsKKwkJaWYgKHVubGlrZWx5KHJhZGlvX3N0YXRlICE9IHJ0bHByaXYtPnJma2lsbC5yZmtpbGxfc3RhdGUpKSB7CisJCQlydGxwcml2LT5yZmtpbGwucmZraWxsX3N0YXRlID0gcmFkaW9fc3RhdGU7CisKKwkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUkYsIERCR19ETUVTRywKKwkJCQkgKEtFUk5fSU5GTyAid2lyZWxlc3MgcmFkaW8gc3dpdGNoIHR1cm5lZCAlc1xuIiwKKwkJCQkgIHJhZGlvX3N0YXRlID8gIm9uIiA6ICJvZmYiKSk7CisKKwkJCWJsb2NrZWQgPSAocnRscHJpdi0+cmZraWxsLnJma2lsbF9zdGF0ZSA9PSAxKSA/IDAgOiAxOworCQkJd2lwaHlfcmZraWxsX3NldF9od19zdGF0ZShody0+d2lwaHksIGJsb2NrZWQpOworCQl9CisJfQorCisJbXV0ZXhfdW5sb2NrKCZydGxwcml2LT5sb2Nrcy5jb25mX211dGV4KTsKK30KKworY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgcnRsX29wcyA9IHsKKwkuc3RhcnQgPSBydGxfb3Bfc3RhcnQsCisJLnN0b3AgPSBydGxfb3Bfc3RvcCwKKwkudHggPSBydGxfb3BfdHgsCisJLmFkZF9pbnRlcmZhY2UgPSBydGxfb3BfYWRkX2ludGVyZmFjZSwKKwkucmVtb3ZlX2ludGVyZmFjZSA9IHJ0bF9vcF9yZW1vdmVfaW50ZXJmYWNlLAorCS5jb25maWcgPSBydGxfb3BfY29uZmlnLAorCS5jb25maWd1cmVfZmlsdGVyID0gcnRsX29wX2NvbmZpZ3VyZV9maWx0ZXIsCisJLnNldF9rZXkgPSBydGxfb3Bfc2V0X2tleSwKKwkuY29uZl90eCA9IHJ0bF9vcF9jb25mX3R4LAorCS5ic3NfaW5mb19jaGFuZ2VkID0gcnRsX29wX2Jzc19pbmZvX2NoYW5nZWQsCisJLmdldF90c2YgPSBydGxfb3BfZ2V0X3RzZiwKKwkuc2V0X3RzZiA9IHJ0bF9vcF9zZXRfdHNmLAorCS5yZXNldF90c2YgPSBydGxfb3BfcmVzZXRfdHNmLAorCS5zdGFfbm90aWZ5ID0gcnRsX29wX3N0YV9ub3RpZnksCisJLmFtcGR1X2FjdGlvbiA9IHJ0bF9vcF9hbXBkdV9hY3Rpb24sCisJLnN3X3NjYW5fc3RhcnQgPSBydGxfb3Bfc3dfc2Nhbl9zdGFydCwKKwkuc3dfc2Nhbl9jb21wbGV0ZSA9IHJ0bF9vcF9zd19zY2FuX2NvbXBsZXRlLAorCS5yZmtpbGxfcG9sbCA9IHJ0bF9vcF9yZmtpbGxfcG9sbCwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL2NvcmUuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvY29yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlZjMxYzNjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9jb3JlLmgKQEAgLTAsMCArMSw0MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodChjKSAyMDA5LTIwMTAgIFJlYWx0ZWsgQ29ycG9yYXRpb24uCisgKgorICogVG1pcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUbWlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRtaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwgVVNBCisgKgorICogVG1lIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiB3bGFuZmFlIDx3bGFuZmFlQHJlYWx0ZWsuY29tPgorICogUmVhbHRlayBDb3Jwb3JhdGlvbiwgTm8uIDIsIElubm92YXRpb24gUm9hZCBJSSwgSHNpbmNodSBTY2llbmNlIFBhcmssCisgKiBIc2luY2h1IDMwMCwgVGFpd2FuLgorICoKKyAqIExhcnJ5IEZpbmdlciA8TGFycnkuRmluZ2VyQGx3ZmluZ2VyLm5ldD4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX1JUTF9DT1JFX0hfXworI2RlZmluZSBfX1JUTF9DT1JFX0hfXworCisjZGVmaW5lIFJUTF9TVVBQT1JURURfRklMVEVSUwkJXAorCShGSUZfUFJPTUlTQ19JTl9CU1MgfCBcCisJRklGX0FMTE1VTFRJIHwgRklGX0NPTlRST0wgfCBcCisJRklGX09USEVSX0JTUyB8IFwKKwlGSUZfRkNTRkFJTCB8IFwKKwlGSUZfQkNOX1BSQlJFU1BfUFJPTUlTQykKKworI2RlZmluZSBSVExfU1VQUE9SVEVEX0NUUkxfRklMVEVSCTB4RkYKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzIHJ0bF9vcHM7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvZGVidWcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvZGVidWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmE3Mzg1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9kZWJ1Zy5jCkBAIC0wLDAgKzEsNTAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQoYykgMjAwOS0yMDEwICBSZWFsdGVrIENvcnBvcmF0aW9uLgorICoKKyAqIFRtaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVG1pcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0bWlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAsIFVTQQorICoKKyAqIFRtZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgTElDRU5TRS4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogd2xhbmZhZSA8d2xhbmZhZUByZWFsdGVrLmNvbT4KKyAqIFJlYWx0ZWsgQ29ycG9yYXRpb24sIE5vLiAyLCBJbm5vdmF0aW9uIFJvYWQgSUksIEhzaW5jaHUgU2NpZW5jZSBQYXJrLAorICogSHNpbmNodSAzMDAsIFRhaXdhbi4KKyAqCisgKiBMYXJyeSBGaW5nZXIgPExhcnJ5LkZpbmdlckBsd2Zpbmdlci5uZXQ+CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJ3aWZpLmgiCisKK3ZvaWQgcnRsX2RiZ3BfZmxhZ19pbml0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwl1OCBpOworCisJcnRscHJpdi0+ZGJnLmdsb2JhbF9kZWJ1Z2xldmVsID0gREJHX0VNRVJHOworCisJcnRscHJpdi0+ZGJnLmdsb2JhbF9kZWJ1Z2NvbXBvbmVudHMgPQorCSAgICBDT01QX0VSUiB8IENPTVBfRlcgfCBDT01QX0lOSVQgfCBDT01QX1JFQ1YgfCBDT01QX1NFTkQgfAorCSAgICBDT01QX01MTUUgfCBDT01QX1NDQU4gfCBDT01QX0lOVFIgfCBDT01QX0xFRCB8IENPTVBfU0VDIHwKKwkgICAgQ09NUF9CRUFDT04gfCBDT01QX1JBVEUgfCBDT01QX1JYREVTQyB8IENPTVBfRElHIHwgQ09NUF9UWEFHQyB8CisJICAgIENPTVBfUE9XRVIgfCBDT01QX1BPV0VSX1RSQUNLSU5HIHwgQ09NUF9CQl9QT1dFUlNBVklORyB8IENPTVBfU1dBUyB8CisJICAgIENPTVBfUkYgfCBDT01QX1RVUkJPIHwgQ09NUF9SQVRSIHwgQ09NUF9DTUQgfAorCSAgICBDT01QX0VGVVNFIHwgQ09NUF9RT1MgfCBDT01QX01BQzgwMjExIHwgQ09NUF9SRUdEIHwgQ09NUF9DSEFOOworCisJZm9yIChpID0gMDsgaSA8IERCR1BfVFlQRV9NQVg7IGkrKykKKwkJcnRscHJpdi0+ZGJnLmRiZ3BfdHlwZVtpXSA9IDA7CisKKwkvKkluaXQgRGVidWcgZmxhZyBlbmFibGUgY29uZGl0aW9uICovCit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL2RlYnVnLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL2RlYnVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhiZGVjMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvZGVidWcuaApAQCAtMCwwICsxLDIxMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodChjKSAyMDA5LTIwMTAgIFJlYWx0ZWsgQ29ycG9yYXRpb24uCisgKgorICogVG1pcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUbWlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRtaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwgVVNBCisgKgorICogVG1lIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiB3bGFuZmFlIDx3bGFuZmFlQHJlYWx0ZWsuY29tPgorICogUmVhbHRlayBDb3Jwb3JhdGlvbiwgTm8uIDIsIElubm92YXRpb24gUm9hZCBJSSwgSHNpbmNodSBTY2llbmNlIFBhcmssCisgKiBIc2luY2h1IDMwMCwgVGFpd2FuLgorICoKKyAqIExhcnJ5IEZpbmdlciA8TGFycnkuRmluZ2VyQGx3ZmluZ2VyLm5ldD4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX1JUTF9ERUJVR19IX18KKyNkZWZpbmUgX19SVExfREVCVUdfSF9fCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJCURlYnVnIGxldmVsCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICpGYXRhbCBidWcuCisgKkZvciBleGFtcGxlLCBUeC9SeC9JTyBsb2NrZWQgdXAsCisgKm1lbW9yeSBhY2Nlc3MgdmlvbGF0aW9uLAorICpyZXNvdXJjZSBhbGxvY2F0aW9uIGZhaWxlZCwKKyAqdW5leHBlY3RlZCBIVyBiZWhhdmlvciwgSFcgQlVHCisgKmFuZCBzbyBvbi4KKyAqLworI2RlZmluZSBEQkdfRU1FUkcJCQkwCisKKy8qCisgKkFibm9ybWFsLCByYXJlLCBvciB1bmV4cGV0ZWQgY2FzZXMuCisgKkZvciBleGFtcGxlLCBQYWNrZXQvSU8gQ3RsIGNhbmNlbGVkLAorICpkZXZpY2Ugc3VwcmlzZWx5IHVucmVtb3ZlZCBhbmQgc28gb24uCisgKi8KKyNkZWZpbmUJREJHX1dBUk5JTkcJCQkyCisKKy8qCisgKk5vcm1hbCBjYXNlIGRyaXZlciBkZXZlbG9wZXIgc2hvdWxkCisgKm9wZW4sIHdlIGNhbiBzZWUgbGluayBzdGF0dXMgbGlrZQorICphc3NvYy9BZGRCQS9ESENQL2FkYXB0ZXIgc3RhcnQgYW5kCisgKnNvIG9uIGJhc2ljIGFuZCB1c2VmdWwgaW5mcm9tYXRpb25zLgorICovCisjZGVmaW5lIERCR19ETUVTRwkJCTMKKworLyoKKyAqTm9ybWFsIGNhc2Ugd2l0aCB1c2VmdWwgaW5mb3JtYXRpb24KKyAqYWJvdXQgY3VycmVudCBTVyBvciBIVyBzdGF0ZS4KKyAqRm9yIGV4YW1wbGUsIFR4L1J4IGRlc2NyaXB0b3IgdG8gZmlsbCwKKyAqVHgvUnggZGVzY3JpcHRvciBjb21wbGV0ZWQgc3RhdHVzLAorICpTVyBwcm90b2NvbCBzdGF0ZSBjaGFuZ2UsIGR5bmFtaWMKKyAqbWVjaGFuaXNtIHN0YXRlIGNoYW5nZSBhbmQgc28gb24uCisgKi8KKyNkZWZpbmUgREJHX0xPVUQJCQk0CisKKy8qCisgKk5vcm1hbCBjYXNlIHdpdGggZGV0YWlsIGV4ZWN1dGlvbgorICpmbG93IG9yIGluZm9ybWF0aW9uLgorICovCisjZGVmaW5lCURCR19UUkFDRQkJCTUKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQlEZWZpbmUgdGhlIHJ0X3RyYWNlIGNvbXBvbmVudHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgQ09NUF9FUlIJCQlCSVQoMCkKKyNkZWZpbmUgQ09NUF9GVwkJCQlCSVQoMSkKKyNkZWZpbmUgQ09NUF9JTklUCQkJQklUKDIpCS8qRm9yIGluaXQvZGVpbml0ICovCisjZGVmaW5lIENPTVBfUkVDVgkJCUJJVCgzKQkvKkZvciBSeC4gKi8KKyNkZWZpbmUgQ09NUF9TRU5ECQkJQklUKDQpCS8qRm9yIFR4LiAqLworI2RlZmluZSBDT01QX01MTUUJCQlCSVQoNSkJLypGb3IgTUxNRS4gKi8KKyNkZWZpbmUgQ09NUF9TQ0FOCQkJQklUKDYpCS8qRm9yIFNjYW4uICovCisjZGVmaW5lIENPTVBfSU5UUgkJCUJJVCg3KQkvKkZvciBpbnRlcnJ1cHQgUmVsYXRlZC4gKi8KKyNkZWZpbmUgQ09NUF9MRUQJCQlCSVQoOCkJLypGb3IgTEVELiAqLworI2RlZmluZSBDT01QX1NFQwkJCUJJVCg5KQkvKkZvciBzZWMuICovCisjZGVmaW5lIENPTVBfQkVBQ09OCQkJQklUKDEwKQkvKkZvciBiZWFjb24uICovCisjZGVmaW5lIENPTVBfUkFURQkJCUJJVCgxMSkJLypGb3IgcmF0ZS4gKi8KKyNkZWZpbmUgQ09NUF9SWERFU0MJCQlCSVQoMTIpCS8qRm9yIHJ4IGRlc2MuICovCisjZGVmaW5lIENPTVBfRElHCQkJQklUKDEzKQkvKkZvciBESUcgKi8KKyNkZWZpbmUgQ09NUF9UWEFHQwkJCUJJVCgxNCkJLypGb3IgVHggcG93ZXIgKi8KKyNkZWZpbmUgQ09NUF9ISVBXUgkJCUJJVCgxNSkJLypGb3IgSGlnaCBQb3dlciBNZWNoYW5pc20gKi8KKyNkZWZpbmUgQ09NUF9QT1dFUgkJCUJJVCgxNikJLypGb3IgbHBzL2lwcy9hc3BtLiAqLworI2RlZmluZSBDT01QX1BPV0VSX1RSQUNLSU5HCUJJVCgxNykJLypGb3IgVFggUE9XRVIgVFJBQ0tJTkcgKi8KKyNkZWZpbmUgQ09NUF9CQl9QT1dFUlNBVklORwlCSVQoMTgpCisjZGVmaW5lIENPTVBfU1dBUwkJCUJJVCgxOSkJLypGb3IgU1cgQW50ZW5uYSBTd2l0Y2ggKi8KKyNkZWZpbmUgQ09NUF9SRgkJCQlCSVQoMjApCS8qRm9yIFJGLiAqLworI2RlZmluZSBDT01QX1RVUkJPCQkJQklUKDIxKQkvKkZvciBFRENBIFRVUkJPLiAqLworI2RlZmluZSBDT01QX1JBVFIJCQlCSVQoMjIpCisjZGVmaW5lIENPTVBfQ01ECQkJQklUKDIzKQorI2RlZmluZSBDT01QX0VGVVNFCQkJQklUKDI0KQorI2RlZmluZSBDT01QX1FPUwkJCUJJVCgyNSkKKyNkZWZpbmUgQ09NUF9NQUM4MDIxMQkJQklUKDI2KQorI2RlZmluZSBDT01QX1JFR0QJCQlCSVQoMjcpCisjZGVmaW5lIENPTVBfQ0hBTgkJCUJJVCgyOCkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQlEZWZpbmUgdGhlIHJ0X3ByaW50IGNvbXBvbmVudHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIERlZmluZSBFRVBST00gYW5kIEVGVVNFICBjaGVjayBtb2R1bGUgYml0Ki8KKyNkZWZpbmUgRUVQUk9NX1cJCQlCSVQoMCkKKyNkZWZpbmUgRUZVU0VfUEcJCQlCSVQoMSkKKyNkZWZpbmUgRUZVU0VfUkVBRF9BTEwJCUJJVCgyKQorCisvKiBEZWZpbmUgaW5pdCBjaGVjayBmb3IgbW9kdWxlIGJpdCovCisjZGVmaW5lCUlOSVRfRUVQUk9NCQkJQklUKDApCisjZGVmaW5lCUlOSVRfVHhQb3dlcgkJQklUKDEpCisjZGVmaW5lCUlOSVRfSVFLCQkJQklUKDIpCisjZGVmaW5lCUlOSVRfUkYJCQkJQklUKDMpCisKKy8qIERlZmluZSBQSFktQkIvUkYvTUFDIGNoZWNrIG1vZHVsZSBiaXQgKi8KKyNkZWZpbmUJUEhZX0JCUgkJCQlCSVQoMCkKKyNkZWZpbmUJUEhZX0JCVwkJCQlCSVQoMSkKKyNkZWZpbmUJUEhZX1JGUgkJCQlCSVQoMikKKyNkZWZpbmUJUEhZX1JGVwkJCQlCSVQoMykKKyNkZWZpbmUJUEhZX01BQ1IJCQlCSVQoNCkKKyNkZWZpbmUJUEhZX01BQ1cJCQlCSVQoNSkKKyNkZWZpbmUJUEhZX0FMTFIJCQlCSVQoNikKKyNkZWZpbmUJUEhZX0FMTFcJCQlCSVQoNykKKyNkZWZpbmUJUEhZX1RYUFdSCQkJQklUKDgpCisjZGVmaW5lCVBIWV9QV1JESUZGCQkJQklUKDkpCisKK2VudW0gZGJncF9mbGFnX2UgeworCUZRT1MgPSAwLAorCUZUWCA9IDEsCisJRlJYID0gMiwKKwlGU0VDID0gMywKKwlGTUdOVCA9IDQsCisJRk1MTUUgPSA1LAorCUZSRVNPVVJDRSA9IDYsCisJRkJFQUNPTiA9IDcsCisJRklTUiA9IDgsCisJRlBIWSA9IDksCisJRk1QID0gMTAsCisJRkVFUFJPTSA9IDExLAorCUZQV1IgPSAxMiwKKwlGRE0gPSAxMywKKwlGREJHQ3RybCA9IDE0LAorCUZDMkggPSAxNSwKKwlGQlQgPSAxNiwKKwlGSU5JVCA9IDE3LAorCUZJT0NUTCA9IDE4LAorCURCR1BfVFlQRV9NQVgKK307CisKKyNkZWZpbmUgUlRfQVNTRVJUKF9leHAsIGZtdCkJCQkJXAorCWRvIHsJCQkJCQlcCisJCWlmICghKF9leHApKSB7CQkJXAorCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiVzKCk6ICIsIEtCVUlMRF9NT0ROQU1FLCBcCisJCQlfX2Z1bmNfXyk7CQkJXAorCQkJcHJpbnRrIGZtdDsJCQlcCisJCX0gXAorCX0gd2hpbGUgKDApOworCisjZGVmaW5lIFJUX1RSQUNFKHJ0bHByaXYsIGNvbXAsIGxldmVsLCBmbXQpXAorCWRvIHsgXAorCQlpZiAodW5saWtlbHkoKChjb21wKSAmIHJ0bHByaXYtPmRiZy5nbG9iYWxfZGVidWdjb21wb25lbnRzKSAmJiBcCisJCQkoKGxldmVsKSA8PSBydGxwcml2LT5kYmcuZ2xvYmFsX2RlYnVnbGV2ZWwpKSkge1wKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlczolcygpOjwlbHgtJXg+ICIsIEtCVUlMRF9NT0ROQU1FLCBcCisJCQlfX2Z1bmNfXywgaW5faW50ZXJydXB0KCksIGluX2F0b21pYygpKTsJXAorCQkJcHJpbnRrIGZtdDsJCQkJXAorCQl9IFwKKwl9IHdoaWxlICgwKTsKKworI2RlZmluZSBSVFBSSU5UKHJ0bHByaXYsIGRiZ3R5cGUsIGRiZ2ZsYWcsIHByaW50c3RyKQlcCisJZG8gewkJCQkJCVwKKwkJaWYgKHVubGlrZWx5KHJ0bHByaXYtPmRiZy5kYmdwX3R5cGVbZGJndHlwZV0gJiBkYmdmbGFnKSkgeyBcCisJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICIsIEtCVUlMRF9NT0ROQU1FKTsJXAorCQkJcHJpbnRrIHByaW50c3RyOwkJXAorCQl9CQkJCQlcCisJfSB3aGlsZSAoMCk7CisKKyNkZWZpbmUgUlRfUFJJTlRfREFUQShydGxwcml2LCBfY29tcCwgX2xldmVsLCBfdGl0bGVzdHJpbmcsIF9oZXhkYXRhLCBcCisJCV9oZXhkYXRhbGVuKSBcCisJZG8ge1wKKwkJaWYgKHVubGlrZWx5KCgoX2NvbXApICYgcnRscHJpdi0+ZGJnLmdsb2JhbF9kZWJ1Z2NvbXBvbmVudHMpICYmXAorCQkJKF9sZXZlbCA8PSBydGxwcml2LT5kYmcuZ2xvYmFsX2RlYnVnbGV2ZWwpKSkJeyBcCisJCQlpbnQgX19pOwkJCQkJXAorCQkJdTgqCXB0ciA9ICh1OCAqKV9oZXhkYXRhOwkJCVwKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlczogIiwgS0JVSUxEX01PRE5BTUUpOwlcCisJCQlwcmludGsoIkluIHByb2Nlc3MgXCIlc1wiIChwaWQgJWkpOiIsIGN1cnJlbnQtPmNvbW0sXAorCQkJCQljdXJyZW50LT5waWQpOyBcCisJCQlwcmludGsoX3RpdGxlc3RyaW5nKTsJCVwKKwkJCWZvciAoX19pID0gMDsgX19pIDwgKGludClfaGV4ZGF0YWxlbjsgX19pKyspIHsJXAorCQkJCXByaW50aygiJTAyWCVzIiwgcHRyW19faV0sICgoKF9faSArIDEpICUgNClcCisJCQkJCQkJPT0gMCkgPyAiICAiIDogIiAiKTtcCisJCQkJaWYgKCgoX19pICsgMSkgJSAxNikgPT0gMCkJCVwKKwkJCQkJcHJpbnRrKCJcbiIpOwkJCVwKKwkJCX0JCQkJXAorCQkJcHJpbnRrKEtFUk5fREVCVUcgIlxuIik7CQkJXAorCQl9IFwKKwl9IHdoaWxlICgwKTsKKworI2RlZmluZSBNQUNfRk1UICIlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeCIKKyNkZWZpbmUgTUFDX0FSRyh4KSBcCisJKCh1OCAqKSh4KSlbMF0sICgodTggKikoeCkpWzFdLCAoKHU4ICopKHgpKVsyXSxcCisJKCh1OCAqKSh4KSlbM10sICgodTggKikoeCkpWzRdLCAoKHU4ICopKHgpKVs1XQorCit2b2lkIHJ0bF9kYmdwX2ZsYWdfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvZWZ1c2UuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvZWZ1c2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODQzM2YzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9lZnVzZS5jCkBAIC0wLDAgKzEsMTE4OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodChjKSAyMDA5LTIwMTAgIFJlYWx0ZWsgQ29ycG9yYXRpb24uCisgKgorICogVG1pcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUbWlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRtaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwgVVNBCisgKgorICogVG1lIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiB3bGFuZmFlIDx3bGFuZmFlQHJlYWx0ZWsuY29tPgorICogUmVhbHRlayBDb3Jwb3JhdGlvbiwgTm8uIDIsIElubm92YXRpb24gUm9hZCBJSSwgSHNpbmNodSBTY2llbmNlIFBhcmssCisgKiBIc2luY2h1IDMwMCwgVGFpd2FuLgorICoKKyAqIExhcnJ5IEZpbmdlciA8TGFycnkuRmluZ2VyQGx3ZmluZ2VyLm5ldD4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJ3aWZpLmgiCisjaW5jbHVkZSAiZWZ1c2UuaCIKKworc3RhdGljIGNvbnN0IHU4IE1BWF9QR1BLVF9TSVpFID0gOTsKK3N0YXRpYyBjb25zdCB1OCBQR1BLVF9EQVRBX1NJWkUgPSA4Oworc3RhdGljIGNvbnN0IGludCBFRlVTRV9NQVhfU0laRSA9IDUxMjsKKworc3RhdGljIGNvbnN0IHU4IEVGVVNFX09PQl9QUk9URUNUX0JZVEVTID0gMTU7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZWZ1c2VfbWFwIFJUTDg3MTJfU0RJT19FRlVTRV9UQUJMRVtdID0geworCXswLCAwLCAwLCAyfSwKKwl7MCwgMSwgMCwgMn0sCisJezAsIDIsIDAsIDJ9LAorCXsxLCAwLCAwLCAxfSwKKwl7MSwgMCwgMSwgMX0sCisJezEsIDEsIDAsIDF9LAorCXsxLCAxLCAxLCAzfSwKKwl7MSwgMywgMCwgMTd9LAorCXszLCAzLCAxLCA0OH0sCisJezEwLCAwLCAwLCA2fSwKKwl7MTAsIDMsIDAsIDF9LAorCXsxMCwgMywgMSwgMX0sCisJezExLCAwLCAwLCAyOH0KK307CisKK3N0YXRpYyB2b2lkIHJlYWRfZWZ1c2VfYnl0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTE2IF9vZmZzZXQsCisJCQkJCXU4ICpwYnVmKTsKK3N0YXRpYyB2b2lkIGVmdXNlX3NoYWRvd19yZWFkXzFieXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MTYgb2Zmc2V0LAorCQkJCSAgICB1OCAqdmFsdWUpOworc3RhdGljIHZvaWQgZWZ1c2Vfc2hhZG93X3JlYWRfMmJ5dGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUxNiBvZmZzZXQsCisJCQkJICAgIHUxNiAqdmFsdWUpOworc3RhdGljIHZvaWQgZWZ1c2Vfc2hhZG93X3JlYWRfNGJ5dGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUxNiBvZmZzZXQsCisJCQkJICAgIHUzMiAqdmFsdWUpOworc3RhdGljIHZvaWQgZWZ1c2Vfc2hhZG93X3dyaXRlXzFieXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MTYgb2Zmc2V0LAorCQkJCSAgICAgdTggdmFsdWUpOworc3RhdGljIHZvaWQgZWZ1c2Vfc2hhZG93X3dyaXRlXzJieXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MTYgb2Zmc2V0LAorCQkJCSAgICAgdTE2IHZhbHVlKTsKK3N0YXRpYyB2b2lkIGVmdXNlX3NoYWRvd193cml0ZV80Ynl0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTE2IG9mZnNldCwKKwkJCQkgICAgIHUzMiB2YWx1ZSk7CitzdGF0aWMgaW50IGVmdXNlX29uZV9ieXRlX3JlYWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUxNiBhZGRyLAorCQkJCQl1OCAqZGF0YSk7CitzdGF0aWMgaW50IGVmdXNlX29uZV9ieXRlX3dyaXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MTYgYWRkciwKKwkJCQkJdTggZGF0YSk7CitzdGF0aWMgdm9pZCBlZnVzZV9yZWFkX2FsbF9tYXAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4ICplZnVzZSk7CitzdGF0aWMgaW50IGVmdXNlX3BnX3BhY2tldF9yZWFkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBvZmZzZXQsCisJCQkJCXU4ICpkYXRhKTsKK3N0YXRpYyBpbnQgZWZ1c2VfcGdfcGFja2V0X3dyaXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBvZmZzZXQsCisJCQkJIHU4IHdvcmRfZW4sIHU4ICpkYXRhKTsKK3N0YXRpYyB2b2lkIGVmdXNlX3dvcmRfZW5hYmxlX2RhdGFfcmVhZCh1OCB3b3JkX2VuLCB1OCAqc291cmRhdGEsCisJCQkJCXU4ICp0YXJnZXRkYXRhKTsKK3N0YXRpYyB1OCBlZnVzZV93b3JkX2VuYWJsZV9kYXRhX3dyaXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICAgICB1MTYgZWZ1c2VfYWRkciwgdTggd29yZF9lbiwgdTggKmRhdGEpOworc3RhdGljIHZvaWQgZWZ1c2VfcG93ZXJfc3dpdGNoKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBid3JpdGUsCisJCQkJCXU4IHB3cnN0YXRlKTsKK3N0YXRpYyB1MTYgZWZ1c2VfZ2V0X2N1cnJlbnRfc2l6ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CitzdGF0aWMgdTggZWZ1c2VfY2FsY3VsYXRlX3dvcmRfY250cyh1OCB3b3JkX2VuKTsKKwordm9pZCBlZnVzZV9pbml0aWFsaXplKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwl1OCBieXRldGVtcDsKKwl1OCB0ZW1wOworCisJYnl0ZXRlbXAgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIHJ0bHByaXYtPmNmZy0+bWFwc1tTWVNfRlVOQ19FTl0gKyAxKTsKKwl0ZW1wID0gYnl0ZXRlbXAgfCAweDIwOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIHJ0bHByaXYtPmNmZy0+bWFwc1tTWVNfRlVOQ19FTl0gKyAxLCB0ZW1wKTsKKworCWJ5dGV0ZW1wID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBydGxwcml2LT5jZmctPm1hcHNbU1lTX0lTT19DVFJMXSArIDEpOworCXRlbXAgPSBieXRldGVtcCAmIDB4RkU7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgcnRscHJpdi0+Y2ZnLT5tYXBzW1NZU19JU09fQ1RSTF0gKyAxLCB0ZW1wKTsKKworCWJ5dGV0ZW1wID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBydGxwcml2LT5jZmctPm1hcHNbRUZVU0VfVEVTVF0gKyAzKTsKKwl0ZW1wID0gYnl0ZXRlbXAgfCAweDgwOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIHJ0bHByaXYtPmNmZy0+bWFwc1tFRlVTRV9URVNUXSArIDMsIHRlbXApOworCisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgMHgyRjgsIDB4Myk7CisKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBydGxwcml2LT5jZmctPm1hcHNbRUZVU0VfQ1RSTF0gKyAzLCAweDcyKTsKKworfQorCit1OCBlZnVzZV9yZWFkXzFieXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MTYgYWRkcmVzcykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJdTggZGF0YTsKKwl1OCBieXRldGVtcDsKKwl1OCB0ZW1wOworCXUzMiBrID0gMDsKKworCWlmIChhZGRyZXNzIDwgRUZVU0VfUkVBTF9DT05URU5UX0xFTikgeworCQl0ZW1wID0gYWRkcmVzcyAmIDB4RkY7CisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIHJ0bHByaXYtPmNmZy0+bWFwc1tFRlVTRV9DVFJMXSArIDEsCisJCQkgICAgICAgdGVtcCk7CisJCWJ5dGV0ZW1wID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LAorCQkJCQkgcnRscHJpdi0+Y2ZnLT5tYXBzW0VGVVNFX0NUUkxdICsgMik7CisJCXRlbXAgPSAoKGFkZHJlc3MgPj4gOCkgJiAweDAzKSB8IChieXRldGVtcCAmIDB4RkMpOworCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBydGxwcml2LT5jZmctPm1hcHNbRUZVU0VfQ1RSTF0gKyAyLAorCQkJICAgICAgIHRlbXApOworCisJCWJ5dGV0ZW1wID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LAorCQkJCQkgcnRscHJpdi0+Y2ZnLT5tYXBzW0VGVVNFX0NUUkxdICsgMyk7CisJCXRlbXAgPSBieXRldGVtcCAmIDB4N0Y7CisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIHJ0bHByaXYtPmNmZy0+bWFwc1tFRlVTRV9DVFJMXSArIDMsCisJCQkgICAgICAgdGVtcCk7CisKKwkJYnl0ZXRlbXAgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsCisJCQkJCSBydGxwcml2LT5jZmctPm1hcHNbRUZVU0VfQ1RSTF0gKyAzKTsKKwkJd2hpbGUgKCEoYnl0ZXRlbXAgJiAweDgwKSkgeworCQkJYnl0ZXRlbXAgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsCisJCQkJCQkgcnRscHJpdi0+Y2ZnLT4KKwkJCQkJCSBtYXBzW0VGVVNFX0NUUkxdICsgMyk7CisJCQlrKys7CisJCQlpZiAoayA9PSAxMDAwKSB7CisJCQkJayA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJZGF0YSA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwgcnRscHJpdi0+Y2ZnLT5tYXBzW0VGVVNFX0NUUkxdKTsKKwkJcmV0dXJuIGRhdGE7CisJfSBlbHNlCisJCXJldHVybiAweEZGOworCit9CitFWFBPUlRfU1lNQk9MKGVmdXNlX3JlYWRfMWJ5dGUpOworCit2b2lkIGVmdXNlX3dyaXRlXzFieXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MTYgYWRkcmVzcywgdTggdmFsdWUpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXU4IGJ5dGV0ZW1wOworCXU4IHRlbXA7CisJdTMyIGsgPSAwOworCisJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FRlVTRSwgREJHX0xPVUQsCisJCSAoIkFkZHI9JXggRGF0YSA9JXhcbiIsIGFkZHJlc3MsIHZhbHVlKSk7CisKKwlpZiAoYWRkcmVzcyA8IEVGVVNFX1JFQUxfQ09OVEVOVF9MRU4pIHsKKwkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgcnRscHJpdi0+Y2ZnLT5tYXBzW0VGVVNFX0NUUkxdLCB2YWx1ZSk7CisKKwkJdGVtcCA9IGFkZHJlc3MgJiAweEZGOworCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBydGxwcml2LT5jZmctPm1hcHNbRUZVU0VfQ1RSTF0gKyAxLAorCQkJICAgICAgIHRlbXApOworCQlieXRldGVtcCA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwKKwkJCQkJIHJ0bHByaXYtPmNmZy0+bWFwc1tFRlVTRV9DVFJMXSArIDIpOworCisJCXRlbXAgPSAoKGFkZHJlc3MgPj4gOCkgJiAweDAzKSB8IChieXRldGVtcCAmIDB4RkMpOworCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LAorCQkJICAgICAgIHJ0bHByaXYtPmNmZy0+bWFwc1tFRlVTRV9DVFJMXSArIDIsIHRlbXApOworCisJCWJ5dGV0ZW1wID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LAorCQkJCQkgcnRscHJpdi0+Y2ZnLT5tYXBzW0VGVVNFX0NUUkxdICsgMyk7CisJCXRlbXAgPSBieXRldGVtcCB8IDB4ODA7CisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsCisJCQkgICAgICAgcnRscHJpdi0+Y2ZnLT5tYXBzW0VGVVNFX0NUUkxdICsgMywgdGVtcCk7CisKKwkJYnl0ZXRlbXAgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsCisJCQkJCSBydGxwcml2LT5jZmctPm1hcHNbRUZVU0VfQ1RSTF0gKyAzKTsKKworCQl3aGlsZSAoYnl0ZXRlbXAgJiAweDgwKSB7CisJCQlieXRldGVtcCA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwKKwkJCQkJCSBydGxwcml2LT5jZmctPgorCQkJCQkJIG1hcHNbRUZVU0VfQ1RSTF0gKyAzKTsKKwkJCWsrKzsKKwkJCWlmIChrID09IDEwMCkgeworCQkJCWsgPSAwOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCit9CisKK3N0YXRpYyB2b2lkIHJlYWRfZWZ1c2VfYnl0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTE2IF9vZmZzZXQsIHU4ICpwYnVmKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwl1MzIgdmFsdWUzMjsKKwl1OCByZWFkYnl0ZTsKKwl1MTYgcmV0cnk7CisKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBydGxwcml2LT5jZmctPm1hcHNbRUZVU0VfQ1RSTF0gKyAxLAorCQkgICAgICAgKF9vZmZzZXQgJiAweGZmKSk7CisJcmVhZGJ5dGUgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIHJ0bHByaXYtPmNmZy0+bWFwc1tFRlVTRV9DVFJMXSArIDIpOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIHJ0bHByaXYtPmNmZy0+bWFwc1tFRlVTRV9DVFJMXSArIDIsCisJCSAgICAgICAoKF9vZmZzZXQgPj4gOCkgJiAweDAzKSB8IChyZWFkYnl0ZSAmIDB4ZmMpKTsKKworCXJlYWRieXRlID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBydGxwcml2LT5jZmctPm1hcHNbRUZVU0VfQ1RSTF0gKyAzKTsKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBydGxwcml2LT5jZmctPm1hcHNbRUZVU0VfQ1RSTF0gKyAzLAorCQkgICAgICAgKHJlYWRieXRlICYgMHg3ZikpOworCisJcmV0cnkgPSAwOworCXZhbHVlMzIgPSBydGxfcmVhZF9kd29yZChydGxwcml2LCBydGxwcml2LT5jZmctPm1hcHNbRUZVU0VfQ1RSTF0pOworCXdoaWxlICghKCgodmFsdWUzMiA+PiAyNCkgJiAweGZmKSAmIDB4ODApICYmIChyZXRyeSA8IDEwMDAwKSkgeworCQl2YWx1ZTMyID0gcnRsX3JlYWRfZHdvcmQocnRscHJpdiwKKwkJCQkJIHJ0bHByaXYtPmNmZy0+bWFwc1tFRlVTRV9DVFJMXSk7CisJCXJldHJ5Kys7CisJfQorCisJdWRlbGF5KDUwKTsKKwl2YWx1ZTMyID0gcnRsX3JlYWRfZHdvcmQocnRscHJpdiwgcnRscHJpdi0+Y2ZnLT5tYXBzW0VGVVNFX0NUUkxdKTsKKworCSpwYnVmID0gKHU4KSAodmFsdWUzMiAmIDB4ZmYpOworfQorCit2b2lkIHJlYWRfZWZ1c2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUxNiBfb2Zmc2V0LCB1MTYgX3NpemVfYnl0ZSwgdTggKnBidWYpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfZWZ1c2UgKnJ0bGVmdXNlID0gcnRsX2VmdXNlKHJ0bF9wcml2KGh3KSk7CisJdTggZWZ1c2VfdGJsW0VGVVNFX01BUF9MRU5dOworCXU4IHJ0ZW1wOFsxXTsKKwl1MTYgZWZ1c2VfYWRkciA9IDA7CisJdTggb2Zmc2V0LCB3cmVuOworCXUxNiBpOworCXUxNiBqOworCXUxNiBlZnVzZV93b3JkW0VGVVNFX01BWF9TRUNUSU9OXVtFRlVTRV9NQVhfV09SRF9VTklUXTsKKwl1MTYgZWZ1c2VfdXRpbGl6ZWQgPSAwOworCXU4IGVmdXNlX3VzYWdlOworCisJaWYgKChfb2Zmc2V0ICsgX3NpemVfYnl0ZSkgPiBFRlVTRV9NQVBfTEVOKSB7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRUZVU0UsIERCR19MT1VELAorCQkJICgicmVhZF9lZnVzZSgpOiBJbnZhbGlkIG9mZnNldCglI3gpIHdpdGggcmVhZCAiCisJCQkgICJieXRlcyglI3gpISFcbiIsIF9vZmZzZXQsIF9zaXplX2J5dGUpKTsKKwkJcmV0dXJuOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBFRlVTRV9NQVhfU0VDVElPTjsgaSsrKQorCQlmb3IgKGogPSAwOyBqIDwgRUZVU0VfTUFYX1dPUkRfVU5JVDsgaisrKQorCQkJZWZ1c2Vfd29yZFtpXVtqXSA9IDB4RkZGRjsKKworCXJlYWRfZWZ1c2VfYnl0ZShodywgZWZ1c2VfYWRkciwgcnRlbXA4KTsKKwlpZiAoKnJ0ZW1wOCAhPSAweEZGKSB7CisJCWVmdXNlX3V0aWxpemVkKys7CisJCVJUUFJJTlQocnRscHJpdiwgRkVFUFJPTSwgRUZVU0VfUkVBRF9BTEwsCisJCQkoIkFkZHI9JWRcbiIsIGVmdXNlX2FkZHIpKTsKKwkJZWZ1c2VfYWRkcisrOworCX0KKworCXdoaWxlICgoKnJ0ZW1wOCAhPSAweEZGKSAmJiAoZWZ1c2VfYWRkciA8IEVGVVNFX1JFQUxfQ09OVEVOVF9MRU4pKSB7CisJCW9mZnNldCA9ICgoKnJ0ZW1wOCA+PiA0KSAmIDB4MGYpOworCisJCWlmIChvZmZzZXQgPCBFRlVTRV9NQVhfU0VDVElPTikgeworCQkJd3JlbiA9ICgqcnRlbXA4ICYgMHgwZik7CisJCQlSVFBSSU5UKHJ0bHByaXYsIEZFRVBST00sIEVGVVNFX1JFQURfQUxMLAorCQkJCSgib2Zmc2V0LSVkIFdvcmRlbj0leFxuIiwgb2Zmc2V0LCB3cmVuKSk7CisKKwkJCWZvciAoaSA9IDA7IGkgPCBFRlVTRV9NQVhfV09SRF9VTklUOyBpKyspIHsKKwkJCQlpZiAoISh3cmVuICYgMHgwMSkpIHsKKwkJCQkJUlRQUklOVChydGxwcml2LCBGRUVQUk9NLAorCQkJCQkJRUZVU0VfUkVBRF9BTEwsICgiQWRkcj0lZFxuIiwKKwkJCQkJCQkJIGVmdXNlX2FkZHIpKTsKKworCQkJCQlyZWFkX2VmdXNlX2J5dGUoaHcsIGVmdXNlX2FkZHIsIHJ0ZW1wOCk7CisJCQkJCWVmdXNlX2FkZHIrKzsKKwkJCQkJZWZ1c2VfdXRpbGl6ZWQrKzsKKwkJCQkJZWZ1c2Vfd29yZFtvZmZzZXRdW2ldID0gKCpydGVtcDggJiAweGZmKTsKKworCQkJCQlpZiAoZWZ1c2VfYWRkciA+PSBFRlVTRV9SRUFMX0NPTlRFTlRfTEVOKQorCQkJCQkJYnJlYWs7CisKKwkJCQkJUlRQUklOVChydGxwcml2LCBGRUVQUk9NLAorCQkJCQkJRUZVU0VfUkVBRF9BTEwsICgiQWRkcj0lZFxuIiwKKwkJCQkJCQkJIGVmdXNlX2FkZHIpKTsKKworCQkJCQlyZWFkX2VmdXNlX2J5dGUoaHcsIGVmdXNlX2FkZHIsIHJ0ZW1wOCk7CisJCQkJCWVmdXNlX2FkZHIrKzsKKwkJCQkJZWZ1c2VfdXRpbGl6ZWQrKzsKKwkJCQkJZWZ1c2Vfd29yZFtvZmZzZXRdW2ldIHw9CisJCQkJCSAgICAoKCh1MTYpKnJ0ZW1wOCA8PCA4KSAmIDB4ZmYwMCk7CisKKwkJCQkJaWYgKGVmdXNlX2FkZHIgPj0gRUZVU0VfUkVBTF9DT05URU5UX0xFTikKKwkJCQkJCWJyZWFrOworCQkJCX0KKworCQkJCXdyZW4gPj49IDE7CisJCQl9CisJCX0KKworCQlSVFBSSU5UKHJ0bHByaXYsIEZFRVBST00sIEVGVVNFX1JFQURfQUxMLAorCQkJKCJBZGRyPSVkXG4iLCBlZnVzZV9hZGRyKSk7CisJCXJlYWRfZWZ1c2VfYnl0ZShodywgZWZ1c2VfYWRkciwgcnRlbXA4KTsKKwkJaWYgKCpydGVtcDggIT0gMHhGRiAmJiAoZWZ1c2VfYWRkciA8IDUxMikpIHsKKwkJCWVmdXNlX3V0aWxpemVkKys7CisJCQllZnVzZV9hZGRyKys7CisJCX0KKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgRUZVU0VfTUFYX1NFQ1RJT047IGkrKykgeworCQlmb3IgKGogPSAwOyBqIDwgRUZVU0VfTUFYX1dPUkRfVU5JVDsgaisrKSB7CisJCQllZnVzZV90YmxbKGkgKiA4KSArIChqICogMildID0KKwkJCSAgICAoZWZ1c2Vfd29yZFtpXVtqXSAmIDB4ZmYpOworCQkJZWZ1c2VfdGJsWyhpICogOCkgKyAoKGogKiAyKSArIDEpXSA9CisJCQkgICAgKChlZnVzZV93b3JkW2ldW2pdID4+IDgpICYgMHhmZik7CisJCX0KKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgX3NpemVfYnl0ZTsgaSsrKQorCQlwYnVmW2ldID0gZWZ1c2VfdGJsW19vZmZzZXQgKyBpXTsKKworCXJ0bGVmdXNlLT5lZnVzZV91c2VkYnl0ZXMgPSBlZnVzZV91dGlsaXplZDsKKwllZnVzZV91c2FnZSA9ICh1OCkoKGVmdXNlX3V0aWxpemVkICogMTAwKSAvIEVGVVNFX1JFQUxfQ09OVEVOVF9MRU4pOworCXJ0bGVmdXNlLT5lZnVzZV91c2VkcGVyY2VudGFnZSA9IGVmdXNlX3VzYWdlOworCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfaHdfcmVnKGh3LCBIV19WQVJfRUZVU0VfQllURVMsCisJCQkJICAgICAgKHU4ICopJmVmdXNlX3V0aWxpemVkKTsKKwlydGxwcml2LT5jZmctPm9wcy0+c2V0X2h3X3JlZyhodywgSFdfVkFSX0VGVVNFX1VTQUdFLAorCQkJCSAgICAgICh1OCAqKSZlZnVzZV91c2FnZSk7Cit9CisKK2Jvb2wgZWZ1c2Vfc2hhZG93X3VwZGF0ZV9jaGsoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfZWZ1c2UgKnJ0bGVmdXNlID0gcnRsX2VmdXNlKHJ0bF9wcml2KGh3KSk7CisJdTggc2VjdGlvbl9pZHgsIGksIEJhc2U7CisJdTE2IHdvcmRzX25lZWQgPSAwLCBoZHJfbnVtID0gMCwgdG90YWxieXRlcywgZWZ1c2VfdXNlZDsKKwlib29sIGJ3b3JkY2hhbmdlZCwgYnJlc3VsdCA9IHRydWU7CisKKwlmb3IgKHNlY3Rpb25faWR4ID0gMDsgc2VjdGlvbl9pZHggPCAxNjsgc2VjdGlvbl9pZHgrKykgeworCQlCYXNlID0gc2VjdGlvbl9pZHggKiA4OworCQlid29yZGNoYW5nZWQgPSBmYWxzZTsKKworCQlmb3IgKGkgPSAwOyBpIDwgODsgaSA9IGkgKyAyKSB7CisJCQlpZiAoKHJ0bGVmdXNlLT5lZnVzZV9tYXBbRUZVU0VfSU5JVF9NQVBdW0Jhc2UgKyBpXSAhPQorCQkJICAgICBydGxlZnVzZS0+ZWZ1c2VfbWFwW0VGVVNFX01PRElGWV9NQVBdW0Jhc2UgKyBpXSkgfHwKKwkJCSAgICAocnRsZWZ1c2UtPmVmdXNlX21hcFtFRlVTRV9JTklUX01BUF1bQmFzZSArIGkgKyAxXSAhPQorCQkJICAgICBydGxlZnVzZS0+ZWZ1c2VfbWFwW0VGVVNFX01PRElGWV9NQVBdW0Jhc2UgKyBpICsKKwkJCQkJCQkJICAgMV0pKSB7CisJCQkJd29yZHNfbmVlZCsrOworCQkJCWJ3b3JkY2hhbmdlZCA9IHRydWU7CisJCQl9CisJCX0KKworCQlpZiAoYndvcmRjaGFuZ2VkID09IHRydWUpCisJCQloZHJfbnVtKys7CisJfQorCisJdG90YWxieXRlcyA9IGhkcl9udW0gKyB3b3Jkc19uZWVkICogMjsKKwllZnVzZV91c2VkID0gcnRsZWZ1c2UtPmVmdXNlX3VzZWRieXRlczsKKworCWlmICgodG90YWxieXRlcyArIGVmdXNlX3VzZWQpID49CisJICAgIChFRlVTRV9NQVhfU0laRSAtIEVGVVNFX09PQl9QUk9URUNUX0JZVEVTKSkKKwkJYnJlc3VsdCA9IGZhbHNlOworCisJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FRlVTRSwgREJHX0xPVUQsCisJCSAoImVmdXNlX3NoYWRvd191cGRhdGVfY2hrKCk6IHRvdGFsYnl0ZXMoJSN4KSwgIgorCQkgICJoZHJfbnVtKCUjeCksIHdvcmRzX25lZWQoJSN4KSwgZWZ1c2VfdXNlZCglZClcbiIsCisJCSAgdG90YWxieXRlcywgaGRyX251bSwgd29yZHNfbmVlZCwgZWZ1c2VfdXNlZCkpOworCisJcmV0dXJuIGJyZXN1bHQ7Cit9CisKK3ZvaWQgZWZ1c2Vfc2hhZG93X3JlYWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IHR5cGUsCisJCSAgICAgICB1MTYgb2Zmc2V0LCB1MzIgKnZhbHVlKQoreworCWlmICh0eXBlID09IDEpCisJCWVmdXNlX3NoYWRvd19yZWFkXzFieXRlKGh3LCBvZmZzZXQsICh1OCAqKSB2YWx1ZSk7CisJZWxzZSBpZiAodHlwZSA9PSAyKQorCQllZnVzZV9zaGFkb3dfcmVhZF8yYnl0ZShodywgb2Zmc2V0LCAodTE2ICopIHZhbHVlKTsKKwllbHNlIGlmICh0eXBlID09IDQpCisJCWVmdXNlX3NoYWRvd19yZWFkXzRieXRlKGh3LCBvZmZzZXQsICh1MzIgKikgdmFsdWUpOworCit9CisKK3ZvaWQgZWZ1c2Vfc2hhZG93X3dyaXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCB0eXBlLCB1MTYgb2Zmc2V0LAorCQkJCXUzMiB2YWx1ZSkKK3sKKwlpZiAodHlwZSA9PSAxKQorCQllZnVzZV9zaGFkb3dfd3JpdGVfMWJ5dGUoaHcsIG9mZnNldCwgKHU4KSB2YWx1ZSk7CisJZWxzZSBpZiAodHlwZSA9PSAyKQorCQllZnVzZV9zaGFkb3dfd3JpdGVfMmJ5dGUoaHcsIG9mZnNldCwgKHUxNikgdmFsdWUpOworCWVsc2UgaWYgKHR5cGUgPT0gNCkKKwkJZWZ1c2Vfc2hhZG93X3dyaXRlXzRieXRlKGh3LCBvZmZzZXQsICh1MzIpIHZhbHVlKTsKKworfQorCitib29sIGVmdXNlX3NoYWRvd191cGRhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfZWZ1c2UgKnJ0bGVmdXNlID0gcnRsX2VmdXNlKHJ0bF9wcml2KGh3KSk7CisJdTE2IGksIG9mZnNldCwgYmFzZTsKKwl1OCB3b3JkX2VuID0gMHgwRjsKKwl1OCBmaXJzdF9wZyA9IGZhbHNlOworCisJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FRlVTRSwgREJHX0xPVUQsICgiLS0tPlxuIikpOworCisJaWYgKCFlZnVzZV9zaGFkb3dfdXBkYXRlX2NoayhodykpIHsKKwkJZWZ1c2VfcmVhZF9hbGxfbWFwKGh3LCAmcnRsZWZ1c2UtPmVmdXNlX21hcFtFRlVTRV9JTklUX01BUF1bMF0pOworCQltZW1jcHkoKHZvaWQgKikmcnRsZWZ1c2UtPmVmdXNlX21hcFtFRlVTRV9NT0RJRllfTUFQXVswXSwKKwkJICAgICAgICh2b2lkICopJnJ0bGVmdXNlLT5lZnVzZV9tYXBbRUZVU0VfSU5JVF9NQVBdWzBdLAorCQkgICAgICAgcnRscHJpdi0+Y2ZnLT5tYXBzW0VGVVNFX0hXU0VUX01BWF9TSVpFXSk7CisKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FRlVTRSwgREJHX0xPVUQsCisJCQkgKCI8LS0tZWZ1c2Ugb3V0IG9mIGNhcGFjaXR5ISFcbiIpKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwllZnVzZV9wb3dlcl9zd2l0Y2goaHcsIHRydWUsIHRydWUpOworCisJZm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgPCAxNjsgb2Zmc2V0KyspIHsKKworCQl3b3JkX2VuID0gMHgwRjsKKwkJYmFzZSA9IG9mZnNldCAqIDg7CisKKwkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQkJaWYgKGZpcnN0X3BnID09IHRydWUpIHsKKworCQkJCXdvcmRfZW4gJj0gfihCSVQoaSAvIDIpKTsKKworCQkJCXJ0bGVmdXNlLT5lZnVzZV9tYXBbRUZVU0VfSU5JVF9NQVBdW2Jhc2UgKyBpXSA9CisJCQkJICAgIHJ0bGVmdXNlLT5lZnVzZV9tYXBbRUZVU0VfTU9ESUZZX01BUF1bYmFzZSArIGldOworCQkJfSBlbHNlIHsKKworCQkJCWlmIChydGxlZnVzZS0+ZWZ1c2VfbWFwW0VGVVNFX0lOSVRfTUFQXVtiYXNlICsgaV0gIT0KKwkJCQkgICAgcnRsZWZ1c2UtPmVmdXNlX21hcFtFRlVTRV9NT0RJRllfTUFQXVtiYXNlICsgaV0pIHsKKwkJCQkJd29yZF9lbiAmPSB+KEJJVChpIC8gMikpOworCisJCQkJCXJ0bGVmdXNlLT5lZnVzZV9tYXBbRUZVU0VfSU5JVF9NQVBdW2Jhc2UgKyBpXSA9CisJCQkJCSAgICBydGxlZnVzZS0+ZWZ1c2VfbWFwW0VGVVNFX01PRElGWV9NQVBdW2Jhc2UgKyBpXTsKKwkJCQl9CisJCQl9CisJCX0KKworCQlpZiAod29yZF9lbiAhPSAweDBGKSB7CisJCQl1OCB0bXBkYXRhWzhdOworCQkJbWVtY3B5KCh2b2lkICopdG1wZGF0YSwKKwkJCSAgICAgICAodm9pZCAqKSgmcnRsZWZ1c2UtPgorCQkJCQllZnVzZV9tYXBbRUZVU0VfTU9ESUZZX01BUF1bYmFzZV0pLCA4KTsKKwkJCVJUX1BSSU5UX0RBVEEocnRscHJpdiwgQ09NUF9JTklULCBEQkdfTE9VRCwKKwkJCQkgICAgICAoIlUtZWZ1c2VcbiIpLCB0bXBkYXRhLCA4KTsKKworCQkJaWYgKCFlZnVzZV9wZ19wYWNrZXRfd3JpdGUoaHcsICh1OCkgb2Zmc2V0LCB3b3JkX2VuLAorCQkJCQkJICAgdG1wZGF0YSkpIHsKKwkJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX1dBUk5JTkcsCisJCQkJCSAoIlBHIHNlY3Rpb24oJSN4KSBmYWlsISFcbiIsIG9mZnNldCkpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwl9CisKKwllZnVzZV9wb3dlcl9zd2l0Y2goaHcsIHRydWUsIGZhbHNlKTsKKwllZnVzZV9yZWFkX2FsbF9tYXAoaHcsICZydGxlZnVzZS0+ZWZ1c2VfbWFwW0VGVVNFX0lOSVRfTUFQXVswXSk7CisKKwltZW1jcHkoKHZvaWQgKikmcnRsZWZ1c2UtPmVmdXNlX21hcFtFRlVTRV9NT0RJRllfTUFQXVswXSwKKwkgICAgICAgKHZvaWQgKikmcnRsZWZ1c2UtPmVmdXNlX21hcFtFRlVTRV9JTklUX01BUF1bMF0sCisJICAgICAgIHJ0bHByaXYtPmNmZy0+bWFwc1tFRlVTRV9IV1NFVF9NQVhfU0laRV0pOworCisJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FRlVTRSwgREJHX0xPVUQsICgiPC0tLVxuIikpOworCXJldHVybiB0cnVlOworfQorCit2b2lkIHJ0bF9lZnVzZV9zaGFkb3dfbWFwX3VwZGF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9lZnVzZSAqcnRsZWZ1c2UgPSBydGxfZWZ1c2UocnRsX3ByaXYoaHcpKTsKKworCWlmIChydGxlZnVzZS0+YXV0b2xvYWRfZmFpbGZsYWcgPT0gdHJ1ZSkgeworCQltZW1zZXQoKHZvaWQgKikoJnJ0bGVmdXNlLT5lZnVzZV9tYXBbRUZVU0VfSU5JVF9NQVBdWzBdKSwgMTI4LAorCQkgICAgICAgMHhGRik7CisJfSBlbHNlCisJCWVmdXNlX3JlYWRfYWxsX21hcChodywgJnJ0bGVmdXNlLT5lZnVzZV9tYXBbRUZVU0VfSU5JVF9NQVBdWzBdKTsKKworCW1lbWNweSgodm9pZCAqKSZydGxlZnVzZS0+ZWZ1c2VfbWFwW0VGVVNFX01PRElGWV9NQVBdWzBdLAorCSAgICAgICAodm9pZCAqKSZydGxlZnVzZS0+ZWZ1c2VfbWFwW0VGVVNFX0lOSVRfTUFQXVswXSwKKwkgICAgICAgcnRscHJpdi0+Y2ZnLT5tYXBzW0VGVVNFX0hXU0VUX01BWF9TSVpFXSk7CisKK30KK0VYUE9SVF9TWU1CT0wocnRsX2VmdXNlX3NoYWRvd19tYXBfdXBkYXRlKTsKKwordm9pZCBlZnVzZV9mb3JjZV93cml0ZV92ZW5kb3JfSWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJdTggdG1wZGF0YVs4XSA9IHsgMHhGRiwgMHhGRiwgMHhFQywgMHgxMCwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiB9OworCisJZWZ1c2VfcG93ZXJfc3dpdGNoKGh3LCB0cnVlLCB0cnVlKTsKKworCWVmdXNlX3BnX3BhY2tldF93cml0ZShodywgMSwgMHhELCB0bXBkYXRhKTsKKworCWVmdXNlX3Bvd2VyX3N3aXRjaChodywgdHJ1ZSwgZmFsc2UpOworCit9CisKK3ZvaWQgZWZ1c2VfcmVfcGdfc2VjdGlvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggc2VjdGlvbl9pZHgpCit7Cit9CisKK3N0YXRpYyB2b2lkIGVmdXNlX3NoYWRvd19yZWFkXzFieXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICB1MTYgb2Zmc2V0LCB1OCAqdmFsdWUpCit7CisJc3RydWN0IHJ0bF9lZnVzZSAqcnRsZWZ1c2UgPSBydGxfZWZ1c2UocnRsX3ByaXYoaHcpKTsKKwkqdmFsdWUgPSBydGxlZnVzZS0+ZWZ1c2VfbWFwW0VGVVNFX01PRElGWV9NQVBdW29mZnNldF07Cit9CisKK3N0YXRpYyB2b2lkIGVmdXNlX3NoYWRvd19yZWFkXzJieXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICB1MTYgb2Zmc2V0LCB1MTYgKnZhbHVlKQoreworCXN0cnVjdCBydGxfZWZ1c2UgKnJ0bGVmdXNlID0gcnRsX2VmdXNlKHJ0bF9wcml2KGh3KSk7CisKKwkqdmFsdWUgPSBydGxlZnVzZS0+ZWZ1c2VfbWFwW0VGVVNFX01PRElGWV9NQVBdW29mZnNldF07CisJKnZhbHVlIHw9IHJ0bGVmdXNlLT5lZnVzZV9tYXBbRUZVU0VfTU9ESUZZX01BUF1bb2Zmc2V0ICsgMV0gPDwgODsKKworfQorCitzdGF0aWMgdm9pZCBlZnVzZV9zaGFkb3dfcmVhZF80Ynl0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICAgdTE2IG9mZnNldCwgdTMyICp2YWx1ZSkKK3sKKwlzdHJ1Y3QgcnRsX2VmdXNlICpydGxlZnVzZSA9IHJ0bF9lZnVzZShydGxfcHJpdihodykpOworCisJKnZhbHVlID0gcnRsZWZ1c2UtPmVmdXNlX21hcFtFRlVTRV9NT0RJRllfTUFQXVtvZmZzZXRdOworCSp2YWx1ZSB8PSBydGxlZnVzZS0+ZWZ1c2VfbWFwW0VGVVNFX01PRElGWV9NQVBdW29mZnNldCArIDFdIDw8IDg7CisJKnZhbHVlIHw9IHJ0bGVmdXNlLT5lZnVzZV9tYXBbRUZVU0VfTU9ESUZZX01BUF1bb2Zmc2V0ICsgMl0gPDwgMTY7CisJKnZhbHVlIHw9IHJ0bGVmdXNlLT5lZnVzZV9tYXBbRUZVU0VfTU9ESUZZX01BUF1bb2Zmc2V0ICsgM10gPDwgMjQ7Cit9CisKK3N0YXRpYyB2b2lkIGVmdXNlX3NoYWRvd193cml0ZV8xYnl0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICAgIHUxNiBvZmZzZXQsIHU4IHZhbHVlKQoreworCXN0cnVjdCBydGxfZWZ1c2UgKnJ0bGVmdXNlID0gcnRsX2VmdXNlKHJ0bF9wcml2KGh3KSk7CisKKwlydGxlZnVzZS0+ZWZ1c2VfbWFwW0VGVVNFX01PRElGWV9NQVBdW29mZnNldF0gPSB2YWx1ZTsKK30KKworc3RhdGljIHZvaWQgZWZ1c2Vfc2hhZG93X3dyaXRlXzJieXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICAgdTE2IG9mZnNldCwgdTE2IHZhbHVlKQoreworCXN0cnVjdCBydGxfZWZ1c2UgKnJ0bGVmdXNlID0gcnRsX2VmdXNlKHJ0bF9wcml2KGh3KSk7CisKKwlydGxlZnVzZS0+ZWZ1c2VfbWFwW0VGVVNFX01PRElGWV9NQVBdW29mZnNldF0gPSB2YWx1ZSAmIDB4MDBGRjsKKwlydGxlZnVzZS0+ZWZ1c2VfbWFwW0VGVVNFX01PRElGWV9NQVBdW29mZnNldCArIDFdID0gdmFsdWUgPj4gODsKKworfQorCitzdGF0aWMgdm9pZCBlZnVzZV9zaGFkb3dfd3JpdGVfNGJ5dGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgICB1MTYgb2Zmc2V0LCB1MzIgdmFsdWUpCit7CisJc3RydWN0IHJ0bF9lZnVzZSAqcnRsZWZ1c2UgPSBydGxfZWZ1c2UocnRsX3ByaXYoaHcpKTsKKworCXJ0bGVmdXNlLT5lZnVzZV9tYXBbRUZVU0VfTU9ESUZZX01BUF1bb2Zmc2V0XSA9CisJICAgICh1OCkgKHZhbHVlICYgMHgwMDAwMDBGRik7CisJcnRsZWZ1c2UtPmVmdXNlX21hcFtFRlVTRV9NT0RJRllfTUFQXVtvZmZzZXQgKyAxXSA9CisJICAgICh1OCkgKCh2YWx1ZSA+PiA4KSAmIDB4MDAwMEZGKTsKKwlydGxlZnVzZS0+ZWZ1c2VfbWFwW0VGVVNFX01PRElGWV9NQVBdW29mZnNldCArIDJdID0KKwkgICAgKHU4KSAoKHZhbHVlID4+IDE2KSAmIDB4MDBGRik7CisJcnRsZWZ1c2UtPmVmdXNlX21hcFtFRlVTRV9NT0RJRllfTUFQXVtvZmZzZXQgKyAzXSA9CisJICAgICh1OCkgKCh2YWx1ZSA+PiAyNCkgJiAweEZGKTsKKworfQorCitzdGF0aWMgaW50IGVmdXNlX29uZV9ieXRlX3JlYWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUxNiBhZGRyLCB1OCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJdTggdG1waWR4ID0gMDsKKwlpbnQgYnJlc3VsdDsKKworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIHJ0bHByaXYtPmNmZy0+bWFwc1tFRlVTRV9DVFJMXSArIDEsCisJCSAgICAgICAodTgpIChhZGRyICYgMHhmZikpOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIHJ0bHByaXYtPmNmZy0+bWFwc1tFRlVTRV9DVFJMXSArIDIsCisJCSAgICAgICAoKHU4KSAoKGFkZHIgPj4gOCkgJiAweDAzKSkgfAorCQkgICAgICAgKHJ0bF9yZWFkX2J5dGUocnRscHJpdiwKKwkJCQkgICAgICBydGxwcml2LT5jZmctPm1hcHNbRUZVU0VfQ1RSTF0gKyAyKSAmCisJCQkweEZDKSk7CisKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBydGxwcml2LT5jZmctPm1hcHNbRUZVU0VfQ1RSTF0gKyAzLCAweDcyKTsKKworCXdoaWxlICghKDB4ODAgJiBydGxfcmVhZF9ieXRlKHJ0bHByaXYsCisJCQkJICAgICAgcnRscHJpdi0+Y2ZnLT5tYXBzW0VGVVNFX0NUUkxdICsgMykpCisJICAgICAgICYmICh0bXBpZHggPCAxMDApKSB7CisJCXRtcGlkeCsrOworCX0KKworCWlmICh0bXBpZHggPCAxMDApIHsKKwkJKmRhdGEgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIHJ0bHByaXYtPmNmZy0+bWFwc1tFRlVTRV9DVFJMXSk7CisJCWJyZXN1bHQgPSB0cnVlOworCX0gZWxzZSB7CisJCSpkYXRhID0gMHhmZjsKKwkJYnJlc3VsdCA9IGZhbHNlOworCX0KKwlyZXR1cm4gYnJlc3VsdDsKK30KKworc3RhdGljIGludCBlZnVzZV9vbmVfYnl0ZV93cml0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTE2IGFkZHIsIHU4IGRhdGEpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXU4IHRtcGlkeCA9IDA7CisJYm9vbCBicmVzdWx0OworCisJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FRlVTRSwgREJHX0xPVUQsCisJCSAoIkFkZHIgPSAleCBEYXRhPSV4XG4iLCBhZGRyLCBkYXRhKSk7CisKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LAorCQkgICAgICAgcnRscHJpdi0+Y2ZnLT5tYXBzW0VGVVNFX0NUUkxdICsgMSwgKHU4KSAoYWRkciAmIDB4ZmYpKTsKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBydGxwcml2LT5jZmctPm1hcHNbRUZVU0VfQ1RSTF0gKyAyLAorCQkgICAgICAgKHJ0bF9yZWFkX2J5dGUocnRscHJpdiwKKwkJCSBydGxwcml2LT5jZmctPm1hcHNbRUZVU0VfQ1RSTF0gKworCQkJIDIpICYgMHhGQykgfCAodTgpICgoYWRkciA+PiA4KSAmIDB4MDMpKTsKKworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIHJ0bHByaXYtPmNmZy0+bWFwc1tFRlVTRV9DVFJMXSwgZGF0YSk7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgcnRscHJpdi0+Y2ZnLT5tYXBzW0VGVVNFX0NUUkxdICsgMywgMHhGMik7CisKKwl3aGlsZSAoKDB4ODAgJiBydGxfcmVhZF9ieXRlKHJ0bHByaXYsCisJCQkJICAgICBydGxwcml2LT5jZmctPm1hcHNbRUZVU0VfQ1RSTF0gKyAzKSkKKwkgICAgICAgJiYgKHRtcGlkeCA8IDEwMCkpIHsKKwkJdG1waWR4Kys7CisJfQorCisJaWYgKHRtcGlkeCA8IDEwMCkKKwkJYnJlc3VsdCA9IHRydWU7CisJZWxzZQorCQlicmVzdWx0ID0gZmFsc2U7CisKKwlyZXR1cm4gYnJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgZWZ1c2VfcmVhZF9hbGxfbWFwKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCAqIGVmdXNlKQoreworCWVmdXNlX3Bvd2VyX3N3aXRjaChodywgZmFsc2UsIHRydWUpOworCXJlYWRfZWZ1c2UoaHcsIDAsIDEyOCwgZWZ1c2UpOworCWVmdXNlX3Bvd2VyX3N3aXRjaChodywgZmFsc2UsIGZhbHNlKTsKK30KKworc3RhdGljIHZvaWQgZWZ1c2VfcmVhZF9kYXRhX2Nhc2UxKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MTYgKmVmdXNlX2FkZHIsCisJCQkJdTggZWZ1c2VfZGF0YSwgdTggb2Zmc2V0LCB1OCAqdG1wZGF0YSwKKwkJCQl1OCAqcmVhZHN0YXRlKQoreworCWJvb2wgYmRhdGFlbXB0eSA9IHRydWU7CisJdTggaG9mZnNldDsKKwl1OCB0bXBpZHg7CisJdTggaHdvcmRlbjsKKwl1OCB3b3JkX2NudHM7CisKKwlob2Zmc2V0ID0gKGVmdXNlX2RhdGEgPj4gNCkgJiAweDBGOworCWh3b3JkZW4gPSBlZnVzZV9kYXRhICYgMHgwRjsKKwl3b3JkX2NudHMgPSBlZnVzZV9jYWxjdWxhdGVfd29yZF9jbnRzKGh3b3JkZW4pOworCisJaWYgKGhvZmZzZXQgPT0gb2Zmc2V0KSB7CisJCWZvciAodG1waWR4ID0gMDsgdG1waWR4IDwgd29yZF9jbnRzICogMjsgdG1waWR4KyspIHsKKwkJCWlmIChlZnVzZV9vbmVfYnl0ZV9yZWFkKGh3LCAqZWZ1c2VfYWRkciArIDEgKyB0bXBpZHgsCisJCQkgICAgJmVmdXNlX2RhdGEpKSB7CisJCQkJdG1wZGF0YVt0bXBpZHhdID0gZWZ1c2VfZGF0YTsKKwkJCQlpZiAoZWZ1c2VfZGF0YSAhPSAweGZmKQorCQkJCQliZGF0YWVtcHR5ID0gdHJ1ZTsKKwkJCX0KKwkJfQorCisJCWlmIChiZGF0YWVtcHR5ID09IHRydWUpCisJCQkqcmVhZHN0YXRlID0gUEdfU1RBVEVfREFUQTsKKwkJZWxzZSB7CisJCQkqZWZ1c2VfYWRkciA9ICplZnVzZV9hZGRyICsgKHdvcmRfY250cyAqIDIpICsgMTsKKwkJCSpyZWFkc3RhdGUgPSBQR19TVEFURV9IRUFERVI7CisJCX0KKworCX0gZWxzZSB7CisJCSplZnVzZV9hZGRyID0gKmVmdXNlX2FkZHIgKyAod29yZF9jbnRzICogMikgKyAxOworCQkqcmVhZHN0YXRlID0gUEdfU1RBVEVfSEVBREVSOworCX0KK30KKworc3RhdGljIGludCBlZnVzZV9wZ19wYWNrZXRfcmVhZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggb2Zmc2V0LCB1OCAqZGF0YSkKK3sKKwl1OCByZWFkc3RhdGUgPSBQR19TVEFURV9IRUFERVI7CisKKwlib29sIGJjb250aW51YWwgPSB0cnVlOworCisJdTggZWZ1c2VfZGF0YSwgd29yZF9jbnRzID0gMDsKKwl1MTYgZWZ1c2VfYWRkciA9IDA7CisJdTggaHdvcmRlbjsKKwl1OCB0bXBkYXRhWzhdOworCisJaWYgKGRhdGEgPT0gTlVMTCkKKwkJcmV0dXJuIGZhbHNlOworCWlmIChvZmZzZXQgPiAxNSkKKwkJcmV0dXJuIGZhbHNlOworCisJbWVtc2V0KCh2b2lkICopZGF0YSwgUEdQS1RfREFUQV9TSVpFICogc2l6ZW9mKHU4KSwgMHhmZik7CisJbWVtc2V0KCh2b2lkICopdG1wZGF0YSwgUEdQS1RfREFUQV9TSVpFICogc2l6ZW9mKHU4KSwgMHhmZik7CisKKwl3aGlsZSAoYmNvbnRpbnVhbCAmJiAoZWZ1c2VfYWRkciA8IEVGVVNFX01BWF9TSVpFKSkgeworCQlpZiAocmVhZHN0YXRlICYgUEdfU1RBVEVfSEVBREVSKSB7CisJCQlpZiAoZWZ1c2Vfb25lX2J5dGVfcmVhZChodywgZWZ1c2VfYWRkciwgJmVmdXNlX2RhdGEpCisJCQkgICAgJiYgKGVmdXNlX2RhdGEgIT0gMHhGRikpCisJCQkJZWZ1c2VfcmVhZF9kYXRhX2Nhc2UxKGh3LCAmZWZ1c2VfYWRkciwKKwkJCQkJCSAgICAgIGVmdXNlX2RhdGEsCisJCQkJCQkgICAgICBvZmZzZXQsIHRtcGRhdGEsCisJCQkJCQkgICAgICAmcmVhZHN0YXRlKTsKKwkJCWVsc2UKKwkJCQliY29udGludWFsID0gZmFsc2U7CisJCX0gZWxzZSBpZiAocmVhZHN0YXRlICYgUEdfU1RBVEVfREFUQSkgeworCQkJZWZ1c2Vfd29yZF9lbmFibGVfZGF0YV9yZWFkKGh3b3JkZW4sIHRtcGRhdGEsIGRhdGEpOworCQkJZWZ1c2VfYWRkciA9IGVmdXNlX2FkZHIgKyAod29yZF9jbnRzICogMikgKyAxOworCQkJcmVhZHN0YXRlID0gUEdfU1RBVEVfSEVBREVSOworCQl9CisKKwl9CisKKwlpZiAoKGRhdGFbMF0gPT0gMHhmZikgJiYgKGRhdGFbMV0gPT0gMHhmZikgJiYKKwkgICAgKGRhdGFbMl0gPT0gMHhmZikgJiYgKGRhdGFbM10gPT0gMHhmZikgJiYKKwkgICAgKGRhdGFbNF0gPT0gMHhmZikgJiYgKGRhdGFbNV0gPT0gMHhmZikgJiYKKwkgICAgKGRhdGFbNl0gPT0gMHhmZikgJiYgKGRhdGFbN10gPT0gMHhmZikpCisJCXJldHVybiBmYWxzZTsKKwllbHNlCisJCXJldHVybiB0cnVlOworCit9CisKK3N0YXRpYyB2b2lkIGVmdXNlX3dyaXRlX2RhdGFfY2FzZTEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUxNiAqZWZ1c2VfYWRkciwKKwkJCQl1OCBlZnVzZV9kYXRhLCB1OCBvZmZzZXQsIGludCAqYmNvbnRpbnVhbCwKKwkJCQl1OCAqd3JpdGVfc3RhdGUsIHN0cnVjdCBwZ3BrdF9zdHJ1Y3QgdGFyZ2V0X3BrdCwKKwkJCQlpbnQgKnJlcGVhdF90aW1lcywgaW50ICpicmVzdWx0LCB1OCB3b3JkX2VuKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcGdwa3Rfc3RydWN0IHRtcF9wa3Q7CisJaW50IGJkYXRhZW1wdHkgPSB0cnVlOworCXU4IG9yaWdpbmFsZGF0YVs4ICogc2l6ZW9mKHU4KV07CisJdTggYmFkd29yZGVuID0gMHgwRjsKKwl1OCBtYXRjaF93b3JkX2VuLCB0bXBfd29yZF9lbjsKKwl1OCB0bXBpbmRleDsKKwl1OCB0bXBfaGVhZGVyID0gZWZ1c2VfZGF0YTsKKwl1OCB0bXBfd29yZF9jbnRzOworCisJdG1wX3BrdC5vZmZzZXQgPSAodG1wX2hlYWRlciA+PiA0KSAmIDB4MEY7CisJdG1wX3BrdC53b3JkX2VuID0gdG1wX2hlYWRlciAmIDB4MEY7CisJdG1wX3dvcmRfY250cyA9IGVmdXNlX2NhbGN1bGF0ZV93b3JkX2NudHModG1wX3BrdC53b3JkX2VuKTsKKworCWlmICh0bXBfcGt0Lm9mZnNldCAhPSB0YXJnZXRfcGt0Lm9mZnNldCkgeworCQllZnVzZV9hZGRyID0gZWZ1c2VfYWRkciArICh0bXBfd29yZF9jbnRzICogMikgKyAxOworCQkqd3JpdGVfc3RhdGUgPSBQR19TVEFURV9IRUFERVI7CisJfSBlbHNlIHsKKwkJZm9yICh0bXBpbmRleCA9IDA7IHRtcGluZGV4IDwgKHRtcF93b3JkX2NudHMgKiAyKTsgdG1waW5kZXgrKykgeworCQkJdTE2IGFkZHJlc3MgPSAqZWZ1c2VfYWRkciArIDEgKyB0bXBpbmRleDsKKwkJCWlmIChlZnVzZV9vbmVfYnl0ZV9yZWFkKGh3LCBhZGRyZXNzLAorCQkJICAgICAmZWZ1c2VfZGF0YSkgJiYgKGVmdXNlX2RhdGEgIT0gMHhGRikpCisJCQkJYmRhdGFlbXB0eSA9IGZhbHNlOworCQl9CisKKwkJaWYgKGJkYXRhZW1wdHkgPT0gZmFsc2UpIHsKKwkJCWVmdXNlX2FkZHIgPSBlZnVzZV9hZGRyICsgKHRtcF93b3JkX2NudHMgKiAyKSArIDE7CisJCQkqd3JpdGVfc3RhdGUgPSBQR19TVEFURV9IRUFERVI7CisJCX0gZWxzZSB7CisJCQltYXRjaF93b3JkX2VuID0gMHgwRjsKKwkJCWlmICghKCh0YXJnZXRfcGt0LndvcmRfZW4gJiBCSVQoMCkpIHwKKwkJCSAgICAgKHRtcF9wa3Qud29yZF9lbiAmIEJJVCgwKSkpKQorCQkJCW1hdGNoX3dvcmRfZW4gJj0gKH5CSVQoMCkpOworCisJCQlpZiAoISgodGFyZ2V0X3BrdC53b3JkX2VuICYgQklUKDEpKSB8CisJCQkgICAgICh0bXBfcGt0LndvcmRfZW4gJiBCSVQoMSkpKSkKKwkJCQltYXRjaF93b3JkX2VuICY9ICh+QklUKDEpKTsKKworCQkJaWYgKCEoKHRhcmdldF9wa3Qud29yZF9lbiAmIEJJVCgyKSkgfAorCQkJICAgICAodG1wX3BrdC53b3JkX2VuICYgQklUKDIpKSkpCisJCQkJbWF0Y2hfd29yZF9lbiAmPSAofkJJVCgyKSk7CisKKwkJCWlmICghKCh0YXJnZXRfcGt0LndvcmRfZW4gJiBCSVQoMykpIHwKKwkJCSAgICAgKHRtcF9wa3Qud29yZF9lbiAmIEJJVCgzKSkpKQorCQkJCW1hdGNoX3dvcmRfZW4gJj0gKH5CSVQoMykpOworCisJCQlpZiAoKG1hdGNoX3dvcmRfZW4gJiAweDBGKSAhPSAweDBGKSB7CisJCQkJYmFkd29yZGVuID0gZWZ1c2Vfd29yZF9lbmFibGVfZGF0YV93cml0ZSgKKwkJCQkJCQkgICAgaHcsICplZnVzZV9hZGRyICsgMSwKKwkJCQkJCQkgICAgdG1wX3BrdC53b3JkX2VuLAorCQkJCQkJCSAgICB0YXJnZXRfcGt0LmRhdGEpOworCisJCQkJaWYgKDB4MEYgIT0gKGJhZHdvcmRlbiAmIDB4MEYpKSB7CisJCQkJCXU4IHJlb3JnX29mZnNldCA9IG9mZnNldDsKKwkJCQkJdTggcmVvcmdfd29yZGVuID0gYmFkd29yZGVuOworCQkJCQllZnVzZV9wZ19wYWNrZXRfd3JpdGUoaHcsIHJlb3JnX29mZnNldCwKKwkJCQkJCQkgICAgICAgcmVvcmdfd29yZGVuLAorCQkJCQkJCSAgICAgICBvcmlnaW5hbGRhdGEpOworCQkJCX0KKworCQkJCXRtcF93b3JkX2VuID0gMHgwRjsKKwkJCQlpZiAoKHRhcmdldF9wa3Qud29yZF9lbiAmIEJJVCgwKSkgXgorCQkJCSAgICAobWF0Y2hfd29yZF9lbiAmIEJJVCgwKSkpCisJCQkJCXRtcF93b3JkX2VuICY9ICh+QklUKDApKTsKKworCQkJCWlmICgodGFyZ2V0X3BrdC53b3JkX2VuICYgQklUKDEpKSBeCisJCQkJICAgIChtYXRjaF93b3JkX2VuICYgQklUKDEpKSkKKwkJCQkJdG1wX3dvcmRfZW4gJj0gKH5CSVQoMSkpOworCisJCQkJaWYgKCh0YXJnZXRfcGt0LndvcmRfZW4gJiBCSVQoMikpIF4KKwkJCQkJKG1hdGNoX3dvcmRfZW4gJiBCSVQoMikpKQorCQkJCQl0bXBfd29yZF9lbiAmPSAofkJJVCgyKSk7CisKKwkJCQlpZiAoKHRhcmdldF9wa3Qud29yZF9lbiAmIEJJVCgzKSkgXgorCQkJCSAgICAobWF0Y2hfd29yZF9lbiAmIEJJVCgzKSkpCisJCQkJCXRtcF93b3JkX2VuICY9ICh+QklUKDMpKTsKKworCQkJCWlmICgodG1wX3dvcmRfZW4gJiAweDBGKSAhPSAweDBGKSB7CisJCQkJCSplZnVzZV9hZGRyID0gZWZ1c2VfZ2V0X2N1cnJlbnRfc2l6ZShodyk7CisJCQkJCXRhcmdldF9wa3Qub2Zmc2V0ID0gb2Zmc2V0OworCQkJCQl0YXJnZXRfcGt0LndvcmRfZW4gPSB0bXBfd29yZF9lbjsKKwkJCQl9IGVsc2UKKwkJCQkJKmJjb250aW51YWwgPSBmYWxzZTsKKwkJCQkqd3JpdGVfc3RhdGUgPSBQR19TVEFURV9IRUFERVI7CisJCQkJKnJlcGVhdF90aW1lcyArPSAxOworCQkJCWlmICgqcmVwZWF0X3RpbWVzID4gRUZVU0VfUkVQRUFUX1RIUkVTSE9MRF8pIHsKKwkJCQkJKmJjb250aW51YWwgPSBmYWxzZTsKKwkJCQkJKmJyZXN1bHQgPSBmYWxzZTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCSplZnVzZV9hZGRyICs9ICgyICogdG1wX3dvcmRfY250cykgKyAxOworCQkJCXRhcmdldF9wa3Qub2Zmc2V0ID0gb2Zmc2V0OworCQkJCXRhcmdldF9wa3Qud29yZF9lbiA9IHdvcmRfZW47CisJCQkJKndyaXRlX3N0YXRlID0gUEdfU1RBVEVfSEVBREVSOworCQkJfQorCQl9CisJfQorCVJUUFJJTlQocnRscHJpdiwgRkVFUFJPTSwgRUZVU0VfUEcsICgiZWZ1c2UgUEdfU1RBVEVfSEVBREVSLTFcbiIpKTsKK30KKworc3RhdGljIHZvaWQgZWZ1c2Vfd3JpdGVfZGF0YV9jYXNlMihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTE2ICplZnVzZV9hZGRyLAorCQkJCSAgIGludCAqYmNvbnRpbnVhbCwgdTggKndyaXRlX3N0YXRlLAorCQkJCSAgIHN0cnVjdCBwZ3BrdF9zdHJ1Y3QgdGFyZ2V0X3BrdCwKKwkJCQkgICBpbnQgKnJlcGVhdF90aW1lcywgaW50ICpicmVzdWx0KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcGdwa3Rfc3RydWN0IHRtcF9wa3Q7CisJdTggcGdfaGVhZGVyOworCXU4IHRtcF9oZWFkZXI7CisJdTggb3JpZ2luYWxkYXRhWzggKiBzaXplb2YodTgpXTsKKwl1OCB0bXBfd29yZF9jbnRzOworCXU4IGJhZHdvcmRlbiA9IDB4MEY7CisKKwlwZ19oZWFkZXIgPSAoKHRhcmdldF9wa3Qub2Zmc2V0IDw8IDQpICYgMHhmMCkgfCB0YXJnZXRfcGt0LndvcmRfZW47CisJZWZ1c2Vfb25lX2J5dGVfd3JpdGUoaHcsICplZnVzZV9hZGRyLCBwZ19oZWFkZXIpOworCWVmdXNlX29uZV9ieXRlX3JlYWQoaHcsICplZnVzZV9hZGRyLCAmdG1wX2hlYWRlcik7CisKKwlpZiAodG1wX2hlYWRlciA9PSBwZ19oZWFkZXIpCisJCSp3cml0ZV9zdGF0ZSA9IFBHX1NUQVRFX0RBVEE7CisJZWxzZSBpZiAodG1wX2hlYWRlciA9PSAweEZGKSB7CisJCSp3cml0ZV9zdGF0ZSA9IFBHX1NUQVRFX0hFQURFUjsKKwkJKnJlcGVhdF90aW1lcyArPSAxOworCQlpZiAoKnJlcGVhdF90aW1lcyA+IEVGVVNFX1JFUEVBVF9USFJFU0hPTERfKSB7CisJCQkqYmNvbnRpbnVhbCA9IGZhbHNlOworCQkJKmJyZXN1bHQgPSBmYWxzZTsKKwkJfQorCX0gZWxzZSB7CisJCXRtcF9wa3Qub2Zmc2V0ID0gKHRtcF9oZWFkZXIgPj4gNCkgJiAweDBGOworCQl0bXBfcGt0LndvcmRfZW4gPSB0bXBfaGVhZGVyICYgMHgwRjsKKworCQl0bXBfd29yZF9jbnRzID0gZWZ1c2VfY2FsY3VsYXRlX3dvcmRfY250cyh0bXBfcGt0LndvcmRfZW4pOworCisJCW1lbXNldCgodm9pZCAqKW9yaWdpbmFsZGF0YSwgOCAqIHNpemVvZih1OCksIDB4ZmYpOworCisJCWlmIChlZnVzZV9wZ19wYWNrZXRfcmVhZChodywgdG1wX3BrdC5vZmZzZXQsIG9yaWdpbmFsZGF0YSkpIHsKKwkJCWJhZHdvcmRlbiA9IGVmdXNlX3dvcmRfZW5hYmxlX2RhdGFfd3JpdGUoaHcsCisJCQkJICAgICplZnVzZV9hZGRyICsgMSwgdG1wX3BrdC53b3JkX2VuLAorCQkJCSAgICBvcmlnaW5hbGRhdGEpOworCisJCQlpZiAoMHgwRiAhPSAoYmFkd29yZGVuICYgMHgwRikpIHsKKwkJCQl1OCByZW9yZ19vZmZzZXQgPSB0bXBfcGt0Lm9mZnNldDsKKwkJCQl1OCByZW9yZ193b3JkZW4gPSBiYWR3b3JkZW47CisJCQkJZWZ1c2VfcGdfcGFja2V0X3dyaXRlKGh3LCByZW9yZ19vZmZzZXQsCisJCQkJCQkgICAgICByZW9yZ193b3JkZW4sCisJCQkJCQkgICAgICBvcmlnaW5hbGRhdGEpOworCQkJCSplZnVzZV9hZGRyID0gZWZ1c2VfZ2V0X2N1cnJlbnRfc2l6ZShodyk7CisJCQkgfSBlbHNlCisJCQkJKmVmdXNlX2FkZHIgPSAqZWZ1c2VfYWRkciArICh0bXBfd29yZF9jbnRzICogMikKKwkJCQkJICAgICAgKyAxOworCQl9IGVsc2UKKwkJCSplZnVzZV9hZGRyID0gKmVmdXNlX2FkZHIgKyAodG1wX3dvcmRfY250cyAqIDIpICsgMTsKKworCQkqd3JpdGVfc3RhdGUgPSBQR19TVEFURV9IRUFERVI7CisJCSpyZXBlYXRfdGltZXMgKz0gMTsKKwkJaWYgKCpyZXBlYXRfdGltZXMgPiBFRlVTRV9SRVBFQVRfVEhSRVNIT0xEXykgeworCQkJKmJjb250aW51YWwgPSBmYWxzZTsKKwkJCSpicmVzdWx0ID0gZmFsc2U7CisJCX0KKworCQlSVFBSSU5UKHJ0bHByaXYsIEZFRVBST00sIEVGVVNFX1BHLAorCQkJKCJlZnVzZSBQR19TVEFURV9IRUFERVItMlxuIikpOworCX0KK30KKworc3RhdGljIGludCBlZnVzZV9wZ19wYWNrZXRfd3JpdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJIHU4IG9mZnNldCwgdTggd29yZF9lbiwgdTggKmRhdGEpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBwZ3BrdF9zdHJ1Y3QgdGFyZ2V0X3BrdDsKKwl1OCB3cml0ZV9zdGF0ZSA9IFBHX1NUQVRFX0hFQURFUjsKKwlpbnQgYmNvbnRpbnVhbCA9IHRydWUsIGJkYXRhZW1wdHkgPSB0cnVlLCBicmVzdWx0ID0gdHJ1ZTsKKwl1MTYgZWZ1c2VfYWRkciA9IDA7CisJdTggZWZ1c2VfZGF0YTsKKwl1OCB0YXJnZXRfd29yZF9jbnRzID0gMDsKKwl1OCBiYWR3b3JkZW4gPSAweDBGOworCXN0YXRpYyBpbnQgcmVwZWF0X3RpbWVzOworCisJaWYgKGVmdXNlX2dldF9jdXJyZW50X3NpemUoaHcpID49CisJICAgIChFRlVTRV9NQVhfU0laRSAtIEVGVVNFX09PQl9QUk9URUNUX0JZVEVTKSkgeworCQlSVFBSSU5UKHJ0bHByaXYsIEZFRVBST00sIEVGVVNFX1BHLAorCQkJKCJlZnVzZV9wZ19wYWNrZXRfd3JpdGUgZXJyb3JcbiIpKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCXRhcmdldF9wa3Qub2Zmc2V0ID0gb2Zmc2V0OworCXRhcmdldF9wa3Qud29yZF9lbiA9IHdvcmRfZW47CisKKwltZW1zZXQoKHZvaWQgKil0YXJnZXRfcGt0LmRhdGEsIDggKiBzaXplb2YodTgpLCAweEZGKTsKKworCWVmdXNlX3dvcmRfZW5hYmxlX2RhdGFfcmVhZCh3b3JkX2VuLCBkYXRhLCB0YXJnZXRfcGt0LmRhdGEpOworCXRhcmdldF93b3JkX2NudHMgPSBlZnVzZV9jYWxjdWxhdGVfd29yZF9jbnRzKHRhcmdldF9wa3Qud29yZF9lbik7CisKKwlSVFBSSU5UKHJ0bHByaXYsIEZFRVBST00sIEVGVVNFX1BHLCAoImVmdXNlIFBvd2VyIE9OXG4iKSk7CisKKwl3aGlsZSAoYmNvbnRpbnVhbCAmJiAoZWZ1c2VfYWRkciA8CisJICAgICAgIChFRlVTRV9NQVhfU0laRSAtIEVGVVNFX09PQl9QUk9URUNUX0JZVEVTKSkpIHsKKworCQlpZiAod3JpdGVfc3RhdGUgPT0gUEdfU1RBVEVfSEVBREVSKSB7CisJCQliZGF0YWVtcHR5ID0gdHJ1ZTsKKwkJCWJhZHdvcmRlbiA9IDB4MEY7CisJCQlSVFBSSU5UKHJ0bHByaXYsIEZFRVBST00sIEVGVVNFX1BHLAorCQkJCSgiZWZ1c2UgUEdfU1RBVEVfSEVBREVSXG4iKSk7CisKKwkJCWlmIChlZnVzZV9vbmVfYnl0ZV9yZWFkKGh3LCBlZnVzZV9hZGRyLCAmZWZ1c2VfZGF0YSkgJiYKKwkJCSAgICAoZWZ1c2VfZGF0YSAhPSAweEZGKSkKKwkJCQllZnVzZV93cml0ZV9kYXRhX2Nhc2UxKGh3LCAmZWZ1c2VfYWRkciwKKwkJCQkJCSAgICAgICBlZnVzZV9kYXRhLCBvZmZzZXQsCisJCQkJCQkgICAgICAgJmJjb250aW51YWwsCisJCQkJCQkgICAgICAgJndyaXRlX3N0YXRlLCB0YXJnZXRfcGt0LAorCQkJCQkJICAgICAgICZyZXBlYXRfdGltZXMsICZicmVzdWx0LAorCQkJCQkJICAgICAgIHdvcmRfZW4pOworCQkJZWxzZQorCQkJCWVmdXNlX3dyaXRlX2RhdGFfY2FzZTIoaHcsICZlZnVzZV9hZGRyLAorCQkJCQkJICAgICAgICZiY29udGludWFsLAorCQkJCQkJICAgICAgICZ3cml0ZV9zdGF0ZSwKKwkJCQkJCSAgICAgICB0YXJnZXRfcGt0LAorCQkJCQkJICAgICAgICZyZXBlYXRfdGltZXMsCisJCQkJCQkgICAgICAgJmJyZXN1bHQpOworCisJCX0gZWxzZSBpZiAod3JpdGVfc3RhdGUgPT0gUEdfU1RBVEVfREFUQSkgeworCQkJUlRQUklOVChydGxwcml2LCBGRUVQUk9NLCBFRlVTRV9QRywKKwkJCQkoImVmdXNlIFBHX1NUQVRFX0RBVEFcbiIpKTsKKwkJCWJhZHdvcmRlbiA9IDB4MGY7CisJCQliYWR3b3JkZW4gPQorCQkJICAgIGVmdXNlX3dvcmRfZW5hYmxlX2RhdGFfd3JpdGUoaHcsIGVmdXNlX2FkZHIgKyAxLAorCQkJCQkJCSB0YXJnZXRfcGt0LndvcmRfZW4sCisJCQkJCQkJIHRhcmdldF9wa3QuZGF0YSk7CisKKwkJCWlmICgoYmFkd29yZGVuICYgMHgwRikgPT0gMHgwRikgeworCQkJCWJjb250aW51YWwgPSBmYWxzZTsKKwkJCX0gZWxzZSB7CisJCQkJZWZ1c2VfYWRkciA9CisJCQkJICAgIGVmdXNlX2FkZHIgKyAoMiAqIHRhcmdldF93b3JkX2NudHMpICsgMTsKKworCQkJCXRhcmdldF9wa3Qub2Zmc2V0ID0gb2Zmc2V0OworCQkJCXRhcmdldF9wa3Qud29yZF9lbiA9IGJhZHdvcmRlbjsKKwkJCQl0YXJnZXRfd29yZF9jbnRzID0KKwkJCQkgICAgZWZ1c2VfY2FsY3VsYXRlX3dvcmRfY250cyh0YXJnZXRfcGt0LgorCQkJCQkJCSAgICAgIHdvcmRfZW4pOworCQkJCXdyaXRlX3N0YXRlID0gUEdfU1RBVEVfSEVBREVSOworCQkJCXJlcGVhdF90aW1lcysrOworCQkJCWlmIChyZXBlYXRfdGltZXMgPiBFRlVTRV9SRVBFQVRfVEhSRVNIT0xEXykgeworCQkJCQliY29udGludWFsID0gZmFsc2U7CisJCQkJCWJyZXN1bHQgPSBmYWxzZTsKKwkJCQl9CisJCQkJUlRQUklOVChydGxwcml2LCBGRUVQUk9NLCBFRlVTRV9QRywKKwkJCQkJKCJlZnVzZSBQR19TVEFURV9IRUFERVItM1xuIikpOworCQkJfQorCQl9CisJfQorCisJaWYgKGVmdXNlX2FkZHIgPj0gKEVGVVNFX01BWF9TSVpFIC0gRUZVU0VfT09CX1BST1RFQ1RfQllURVMpKSB7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRUZVU0UsIERCR19MT1VELAorCQkJICgiZWZ1c2VfYWRkciglI3gpIE91dCBvZiBzaXplISFcbiIsIGVmdXNlX2FkZHIpKTsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgZWZ1c2Vfd29yZF9lbmFibGVfZGF0YV9yZWFkKHU4IHdvcmRfZW4sCisJCQkJCXU4ICpzb3VyZGF0YSwgdTggKnRhcmdldGRhdGEpCit7CisJaWYgKCEod29yZF9lbiAmIEJJVCgwKSkpIHsKKwkJdGFyZ2V0ZGF0YVswXSA9IHNvdXJkYXRhWzBdOworCQl0YXJnZXRkYXRhWzFdID0gc291cmRhdGFbMV07CisJfQorCisJaWYgKCEod29yZF9lbiAmIEJJVCgxKSkpIHsKKwkJdGFyZ2V0ZGF0YVsyXSA9IHNvdXJkYXRhWzJdOworCQl0YXJnZXRkYXRhWzNdID0gc291cmRhdGFbM107CisJfQorCisJaWYgKCEod29yZF9lbiAmIEJJVCgyKSkpIHsKKwkJdGFyZ2V0ZGF0YVs0XSA9IHNvdXJkYXRhWzRdOworCQl0YXJnZXRkYXRhWzVdID0gc291cmRhdGFbNV07CisJfQorCisJaWYgKCEod29yZF9lbiAmIEJJVCgzKSkpIHsKKwkJdGFyZ2V0ZGF0YVs2XSA9IHNvdXJkYXRhWzZdOworCQl0YXJnZXRkYXRhWzddID0gc291cmRhdGFbN107CisJfQorfQorCitzdGF0aWMgdTggZWZ1c2Vfd29yZF9lbmFibGVfZGF0YV93cml0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICAgICAgdTE2IGVmdXNlX2FkZHIsIHU4IHdvcmRfZW4sIHU4ICpkYXRhKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwl1MTYgdG1wYWRkcjsKKwl1MTYgc3RhcnRfYWRkciA9IGVmdXNlX2FkZHI7CisJdTggYmFkd29yZGVuID0gMHgwRjsKKwl1OCB0bXBkYXRhWzhdOworCisJbWVtc2V0KCh2b2lkICopdG1wZGF0YSwgUEdQS1RfREFUQV9TSVpFLCAweGZmKTsKKwlSVF9UUkFDRShydGxwcml2LCBDT01QX0VGVVNFLCBEQkdfTE9VRCwKKwkJICgid29yZF9lbiA9ICV4IGVmdXNlX2FkZHI9JXhcbiIsIHdvcmRfZW4sIGVmdXNlX2FkZHIpKTsKKworCWlmICghKHdvcmRfZW4gJiBCSVQoMCkpKSB7CisJCXRtcGFkZHIgPSBzdGFydF9hZGRyOworCQllZnVzZV9vbmVfYnl0ZV93cml0ZShodywgc3RhcnRfYWRkcisrLCBkYXRhWzBdKTsKKwkJZWZ1c2Vfb25lX2J5dGVfd3JpdGUoaHcsIHN0YXJ0X2FkZHIrKywgZGF0YVsxXSk7CisKKwkJZWZ1c2Vfb25lX2J5dGVfcmVhZChodywgdG1wYWRkciwgJnRtcGRhdGFbMF0pOworCQllZnVzZV9vbmVfYnl0ZV9yZWFkKGh3LCB0bXBhZGRyICsgMSwgJnRtcGRhdGFbMV0pOworCQlpZiAoKGRhdGFbMF0gIT0gdG1wZGF0YVswXSkgfHwgKGRhdGFbMV0gIT0gdG1wZGF0YVsxXSkpCisJCQliYWR3b3JkZW4gJj0gKH5CSVQoMCkpOworCX0KKworCWlmICghKHdvcmRfZW4gJiBCSVQoMSkpKSB7CisJCXRtcGFkZHIgPSBzdGFydF9hZGRyOworCQllZnVzZV9vbmVfYnl0ZV93cml0ZShodywgc3RhcnRfYWRkcisrLCBkYXRhWzJdKTsKKwkJZWZ1c2Vfb25lX2J5dGVfd3JpdGUoaHcsIHN0YXJ0X2FkZHIrKywgZGF0YVszXSk7CisKKwkJZWZ1c2Vfb25lX2J5dGVfcmVhZChodywgdG1wYWRkciwgJnRtcGRhdGFbMl0pOworCQllZnVzZV9vbmVfYnl0ZV9yZWFkKGh3LCB0bXBhZGRyICsgMSwgJnRtcGRhdGFbM10pOworCQlpZiAoKGRhdGFbMl0gIT0gdG1wZGF0YVsyXSkgfHwgKGRhdGFbM10gIT0gdG1wZGF0YVszXSkpCisJCQliYWR3b3JkZW4gJj0gKH5CSVQoMSkpOworCX0KKworCWlmICghKHdvcmRfZW4gJiBCSVQoMikpKSB7CisJCXRtcGFkZHIgPSBzdGFydF9hZGRyOworCQllZnVzZV9vbmVfYnl0ZV93cml0ZShodywgc3RhcnRfYWRkcisrLCBkYXRhWzRdKTsKKwkJZWZ1c2Vfb25lX2J5dGVfd3JpdGUoaHcsIHN0YXJ0X2FkZHIrKywgZGF0YVs1XSk7CisKKwkJZWZ1c2Vfb25lX2J5dGVfcmVhZChodywgdG1wYWRkciwgJnRtcGRhdGFbNF0pOworCQllZnVzZV9vbmVfYnl0ZV9yZWFkKGh3LCB0bXBhZGRyICsgMSwgJnRtcGRhdGFbNV0pOworCQlpZiAoKGRhdGFbNF0gIT0gdG1wZGF0YVs0XSkgfHwgKGRhdGFbNV0gIT0gdG1wZGF0YVs1XSkpCisJCQliYWR3b3JkZW4gJj0gKH5CSVQoMikpOworCX0KKworCWlmICghKHdvcmRfZW4gJiBCSVQoMykpKSB7CisJCXRtcGFkZHIgPSBzdGFydF9hZGRyOworCQllZnVzZV9vbmVfYnl0ZV93cml0ZShodywgc3RhcnRfYWRkcisrLCBkYXRhWzZdKTsKKwkJZWZ1c2Vfb25lX2J5dGVfd3JpdGUoaHcsIHN0YXJ0X2FkZHIrKywgZGF0YVs3XSk7CisKKwkJZWZ1c2Vfb25lX2J5dGVfcmVhZChodywgdG1wYWRkciwgJnRtcGRhdGFbNl0pOworCQllZnVzZV9vbmVfYnl0ZV9yZWFkKGh3LCB0bXBhZGRyICsgMSwgJnRtcGRhdGFbN10pOworCQlpZiAoKGRhdGFbNl0gIT0gdG1wZGF0YVs2XSkgfHwgKGRhdGFbN10gIT0gdG1wZGF0YVs3XSkpCisJCQliYWR3b3JkZW4gJj0gKH5CSVQoMykpOworCX0KKworCXJldHVybiBiYWR3b3JkZW47Cit9CisKK3N0YXRpYyB2b2lkIGVmdXNlX3Bvd2VyX3N3aXRjaChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggYndyaXRlLCB1OCBwd3JzdGF0ZSkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJdTggdGVtcHZhbDsKKwl1MTYgdG1wVjE2OworCisJaWYgKHB3cnN0YXRlID09IHRydWUpIHsKKwkJdG1wVjE2ID0gcnRsX3JlYWRfd29yZChydGxwcml2LAorCQkJCSAgICAgICBydGxwcml2LT5jZmctPm1hcHNbU1lTX0lTT19DVFJMXSk7CisJCWlmICghKHRtcFYxNiAmIHJ0bHByaXYtPmNmZy0+bWFwc1tFRlVTRV9QV0NfRVYxMlZdKSkgeworCQkJdG1wVjE2IHw9IHJ0bHByaXYtPmNmZy0+bWFwc1tFRlVTRV9QV0NfRVYxMlZdOworCQkJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwKKwkJCQkgICAgICAgcnRscHJpdi0+Y2ZnLT5tYXBzW1NZU19JU09fQ1RSTF0sCisJCQkJICAgICAgIHRtcFYxNik7CisJCX0KKworCQl0bXBWMTYgPSBydGxfcmVhZF93b3JkKHJ0bHByaXYsCisJCQkJICAgICAgIHJ0bHByaXYtPmNmZy0+bWFwc1tTWVNfRlVOQ19FTl0pOworCQlpZiAoISh0bXBWMTYgJiBydGxwcml2LT5jZmctPm1hcHNbRUZVU0VfRkVOX0VMRFJdKSkgeworCQkJdG1wVjE2IHw9IHJ0bHByaXYtPmNmZy0+bWFwc1tFRlVTRV9GRU5fRUxEUl07CisJCQlydGxfd3JpdGVfd29yZChydGxwcml2LAorCQkJCSAgICAgICBydGxwcml2LT5jZmctPm1hcHNbU1lTX0ZVTkNfRU5dLCB0bXBWMTYpOworCQl9CisKKwkJdG1wVjE2ID0gcnRsX3JlYWRfd29yZChydGxwcml2LCBydGxwcml2LT5jZmctPm1hcHNbU1lTX0NMS10pOworCQlpZiAoKCEodG1wVjE2ICYgcnRscHJpdi0+Y2ZnLT5tYXBzW0VGVVNFX0xPQURFUl9DTEtfRU5dKSkgfHwKKwkJICAgICghKHRtcFYxNiAmIHJ0bHByaXYtPmNmZy0+bWFwc1tFRlVTRV9BTkE4TV0pKSkgeworCQkJdG1wVjE2IHw9IChydGxwcml2LT5jZmctPm1hcHNbRUZVU0VfTE9BREVSX0NMS19FTl0gfAorCQkJCSAgIHJ0bHByaXYtPmNmZy0+bWFwc1tFRlVTRV9BTkE4TV0pOworCQkJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwKKwkJCQkgICAgICAgcnRscHJpdi0+Y2ZnLT5tYXBzW1NZU19DTEtdLCB0bXBWMTYpOworCQl9CisJfQorCisJaWYgKHB3cnN0YXRlID09IHRydWUpIHsKKwkJaWYgKGJ3cml0ZSA9PSB0cnVlKSB7CisJCQl0ZW1wdmFsID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LAorCQkJCQkJcnRscHJpdi0+Y2ZnLT5tYXBzW0VGVVNFX1RFU1RdICsKKwkJCQkJCTMpOworCQkJdGVtcHZhbCAmPSAweDBGOworCQkJdGVtcHZhbCB8PSAoVk9MVEFHRV9WMjUgPDwgNCk7CisJCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LAorCQkJCSAgICAgICBydGxwcml2LT5jZmctPm1hcHNbRUZVU0VfVEVTVF0gKyAzLAorCQkJCSAgICAgICAodGVtcHZhbCB8IDB4ODApKTsKKwkJfQorCisJfSBlbHNlIHsKKwkJaWYgKGJ3cml0ZSA9PSB0cnVlKSB7CisJCQl0ZW1wdmFsID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LAorCQkJCQkJcnRscHJpdi0+Y2ZnLT5tYXBzW0VGVVNFX1RFU1RdICsKKwkJCQkJCTMpOworCQkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwKKwkJCQkgICAgICAgcnRscHJpdi0+Y2ZnLT5tYXBzW0VGVVNFX1RFU1RdICsgMywKKwkJCQkgICAgICAgKHRlbXB2YWwgJiAweDdGKSk7CisJCX0KKworCX0KKworfQorCitzdGF0aWMgdTE2IGVmdXNlX2dldF9jdXJyZW50X3NpemUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJaW50IGJjb250aW51YWwgPSB0cnVlOworCXUxNiBlZnVzZV9hZGRyID0gMDsKKwl1OCBob2Zmc2V0LCBod29yZGVuOworCXU4IGVmdXNlX2RhdGEsIHdvcmRfY250czsKKworCXdoaWxlIChiY29udGludWFsICYmIGVmdXNlX29uZV9ieXRlX3JlYWQoaHcsIGVmdXNlX2FkZHIsICZlZnVzZV9kYXRhKQorCSAgICAgICAmJiAoZWZ1c2VfYWRkciA8IEVGVVNFX01BWF9TSVpFKSkgeworCQlpZiAoZWZ1c2VfZGF0YSAhPSAweEZGKSB7CisJCQlob2Zmc2V0ID0gKGVmdXNlX2RhdGEgPj4gNCkgJiAweDBGOworCQkJaHdvcmRlbiA9IGVmdXNlX2RhdGEgJiAweDBGOworCQkJd29yZF9jbnRzID0gZWZ1c2VfY2FsY3VsYXRlX3dvcmRfY250cyhod29yZGVuKTsKKwkJCWVmdXNlX2FkZHIgPSBlZnVzZV9hZGRyICsgKHdvcmRfY250cyAqIDIpICsgMTsKKwkJfSBlbHNlIHsKKwkJCWJjb250aW51YWwgPSBmYWxzZTsKKwkJfQorCX0KKworCXJldHVybiBlZnVzZV9hZGRyOworfQorCitzdGF0aWMgdTggZWZ1c2VfY2FsY3VsYXRlX3dvcmRfY250cyh1OCB3b3JkX2VuKQoreworCXU4IHdvcmRfY250cyA9IDA7CisJaWYgKCEod29yZF9lbiAmIEJJVCgwKSkpCisJCXdvcmRfY250cysrOworCWlmICghKHdvcmRfZW4gJiBCSVQoMSkpKQorCQl3b3JkX2NudHMrKzsKKwlpZiAoISh3b3JkX2VuICYgQklUKDIpKSkKKwkJd29yZF9jbnRzKys7CisJaWYgKCEod29yZF9lbiAmIEJJVCgzKSkpCisJCXdvcmRfY250cysrOworCXJldHVybiB3b3JkX2NudHM7Cit9CisKK3ZvaWQgZWZ1c2VfcmVzZXRfbG9hZGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwl1MTYgdG1wX3UyYjsKKworCXRtcF91MmIgPSBydGxfcmVhZF93b3JkKHJ0bHByaXYsIHJ0bHByaXYtPmNmZy0+bWFwc1tTWVNfRlVOQ19FTl0pOworCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIHJ0bHByaXYtPmNmZy0+bWFwc1tTWVNfRlVOQ19FTl0sCisJCSAgICAgICAodG1wX3UyYiAmIH4oQklUKDEyKSkpKTsKKwl1ZGVsYXkoMTAwMDApOworCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIHJ0bHByaXYtPmNmZy0+bWFwc1tTWVNfRlVOQ19FTl0sCisJCSAgICAgICAodG1wX3UyYiB8IEJJVCgxMikpKTsKKwl1ZGVsYXkoMTAwMDApOworfQorCitib29sIGVmdXNlX3Byb2dyYW1fbWFwKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBjaGFyICpwX2ZpbGVuYW1lLCB1OCB0YWJsZXR5cGUpCit7CisJcmV0dXJuIHRydWU7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL2VmdXNlLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL2VmdXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQzOWE0ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvZWZ1c2UuaApAQCAtMCwwICsxLDEyNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodChjKSAyMDA5LTIwMTAgIFJlYWx0ZWsgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwgVVNBCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiB3bGFuZmFlIDx3bGFuZmFlQHJlYWx0ZWsuY29tPgorICogUmVhbHRlayBDb3Jwb3JhdGlvbiwgTm8uIDIsIElubm92YXRpb24gUm9hZCBJSSwgSHNpbmNodSBTY2llbmNlIFBhcmssCisgKiBIc2luY2h1IDMwMCwgVGFpd2FuLgorICoKKyAqIExhcnJ5IEZpbmdlciA8TGFycnkuRmluZ2VyQGx3ZmluZ2VyLm5ldD4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19SVExfRUZVU0VfSF8KKyNkZWZpbmUgX19SVExfRUZVU0VfSF8KKworI2RlZmluZSBFRlVTRV9SRUFMX0NPTlRFTlRfTEVOCQk1MTIKKyNkZWZpbmUgRUZVU0VfTUFQX0xFTgkJCTEyOAorI2RlZmluZSBFRlVTRV9NQVhfU0VDVElPTgkJMTYKKyNkZWZpbmUgRUZVU0VfTUFYX1dPUkRfVU5JVAkJNAorCisjZGVmaW5lIEVGVVNFX0lOSVRfTUFQCQkJMAorI2RlZmluZSBFRlVTRV9NT0RJRllfTUFQCQkxCisKKyNkZWZpbmUgUEdfU1RBVEVfSEVBREVSCQkJMHgwMQorI2RlZmluZSBQR19TVEFURV9XT1JEXzAJCQkweDAyCisjZGVmaW5lIFBHX1NUQVRFX1dPUkRfMQkJCTB4MDQKKyNkZWZpbmUgUEdfU1RBVEVfV09SRF8yCQkJMHgwOAorI2RlZmluZSBQR19TVEFURV9XT1JEXzMJCQkweDEwCisjZGVmaW5lIFBHX1NUQVRFX0RBVEEJCQkweDIwCisKKyNkZWZpbmUgUEdfU1dCWVRFX0gJCQkweDAxCisjZGVmaW5lIFBHX1NXQllURV9MCQkJMHgwMgorCisjZGVmaW5lIF9QT1dFUk9OX0RFTEFZXworI2RlZmluZSBfUFJFX0VYRUNVVEVfUkVBRF9DTURfCisKKyNkZWZpbmUgRUZVU0VfUkVQRUFUX1RIUkVTSE9MRF8JCTMKKworc3RydWN0IGVmdXNlX21hcCB7CisJdTggb2Zmc2V0OworCXU4IHdvcmRfc3RhcnQ7CisJdTggYnl0ZV9zdGFydDsKKwl1OCBieXRlX2NudHM7Cit9OworCitzdHJ1Y3QgcGdwa3Rfc3RydWN0IHsKKwl1OCBvZmZzZXQ7CisJdTggd29yZF9lbjsKKwl1OCBkYXRhWzhdOworfTsKKworZW51bSBlZnVzZV9kYXRhX2l0ZW0geworCUVGVVNFX0NISVBfSUQgPSAwLAorCUVGVVNFX0xET19TRVRUSU5HLAorCUVGVVNFX0NMS19TRVRUSU5HLAorCUVGVVNFX1NESU9fU0VUVElORywKKwlFRlVTRV9DQ0NSLAorCUVGVVNFX1NESU9fTU9ERSwKKwlFRlVTRV9PQ1IsCisJRUZVU0VfRjBDSVMsCisJRUZVU0VfRjFDSVMsCisJRUZVU0VfTUFDX0FERFIsCisJRUZVU0VfRUVQUk9NX1ZFUiwKKwlFRlVTRV9DSEFOX1BMQU4sCisJRUZVU0VfVFhQV19UQUIKK307CisKK2VudW0geworCVZPTFRBR0VfVjI1ID0gMHgwMywKKwlMRE9FMjVfU0hJRlQgPSAyOCwKK307CisKK3N0cnVjdCBlZnVzZV9wcml2IHsKKwl1OCBpZFsyXTsKKwl1OCBsZG9fc2V0dGluZ1syXTsKKwl1OCBjbGtfc2V0dGluZ1syXTsKKwl1OCBjY2NyOworCXU4IHNkaW9fbW9kZTsKKwl1OCBvY3JbM107CisJdTggY2lzMFsxN107CisJdTggY2lzMVs0OF07CisJdTggbWFjX2FkZHJbNl07CisJdTggZWVwcm9tX3Zlcm5vOworCXU4IGNoYW5uZWxfcGxhbjsKKwl1OCB0eF9wb3dlcl9iWzE0XTsKKwl1OCB0eF9wb3dlcl9nWzE0XTsKK307CisKK2V4dGVybiB2b2lkIGVmdXNlX2luaXRpYWxpemUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworZXh0ZXJuIHU4IGVmdXNlX3JlYWRfMWJ5dGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUxNiBhZGRyZXNzKTsKK2V4dGVybiB2b2lkIGVmdXNlX3dyaXRlXzFieXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MTYgYWRkcmVzcywgdTggdmFsdWUpOworZXh0ZXJuIHZvaWQgcmVhZF9lZnVzZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTE2IF9vZmZzZXQsCisJCSAgICAgICB1MTYgX3NpemVfYnl0ZSwgdTggKnBidWYpOworZXh0ZXJuIHZvaWQgZWZ1c2Vfc2hhZG93X3JlYWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IHR5cGUsCisJCQkgICAgICB1MTYgb2Zmc2V0LCB1MzIgKnZhbHVlKTsKK2V4dGVybiB2b2lkIGVmdXNlX3NoYWRvd193cml0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggdHlwZSwKKwkJCSAgICAgICB1MTYgb2Zmc2V0LCB1MzIgdmFsdWUpOworZXh0ZXJuIGJvb2wgZWZ1c2Vfc2hhZG93X3VwZGF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CitleHRlcm4gYm9vbCBlZnVzZV9zaGFkb3dfdXBkYXRlX2NoayhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CitleHRlcm4gdm9pZCBydGxfZWZ1c2Vfc2hhZG93X21hcF91cGRhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworZXh0ZXJuIHZvaWQgZWZ1c2VfZm9yY2Vfd3JpdGVfdmVuZG9yX0lkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK2V4dGVybiB2b2lkIGVmdXNlX3JlX3BnX3NlY3Rpb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IHNlY3Rpb25faWR4KTsKK2V4dGVybiBib29sIGVmdXNlX3Byb2dyYW1fbWFwKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJICAgICAgY2hhciAqcF9maWxlbmFtZSwgdTggdGFibGV0eXBlKTsKK2V4dGVybiB2b2lkIGVmdXNlX3Jlc2V0X2xvYWRlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9wY2kuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcGNpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZhMzZhYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcGNpLmMKQEAgLTAsMCArMSwxOTQ1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDktMjAxMCAgUmVhbHRlayBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLCBVU0EKKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIHdsYW5mYWUgPHdsYW5mYWVAcmVhbHRlay5jb20+CisgKiBSZWFsdGVrIENvcnBvcmF0aW9uLCBOby4gMiwgSW5ub3ZhdGlvbiBSb2FkIElJLCBIc2luY2h1IFNjaWVuY2UgUGFyaywKKyAqIEhzaW5jaHUgMzAwLCBUYWl3YW4uCisgKgorICogTGFycnkgRmluZ2VyIDxMYXJyeS5GaW5nZXJAbHdmaW5nZXIubmV0PgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImNvcmUuaCIKKyNpbmNsdWRlICJ3aWZpLmgiCisjaW5jbHVkZSAicGNpLmgiCisjaW5jbHVkZSAiYmFzZS5oIgorI2luY2x1ZGUgInBzLmgiCisKK3N0YXRpYyBjb25zdCB1MTYgcGNpYnJpZGdlX3ZlbmRvcnNbUENJX0JSSURHRV9WRU5ET1JfTUFYXSA9IHsKKwlJTlRFTF9WRU5ET1JfSUQsCisJQVRJX1ZFTkRPUl9JRCwKKwlBTURfVkVORE9SX0lELAorCVNJU19WRU5ET1JfSUQKK307CisKKy8qIFVwZGF0ZSBQQ0kgZGVwZW5kZW50IGRlZmF1bHQgc2V0dGluZ3MqLworc3RhdGljIHZvaWQgX3J0bF9wY2lfdXBkYXRlX2RlZmF1bHRfc2V0dGluZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9wY2lfcHJpdiAqcGNpcHJpdiA9IHJ0bF9wY2lwcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BzX2N0bCAqcHBzYyA9IHJ0bF9wc2MocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOworCXU4IHBjaWJyaWRnZV92ZW5kb3IgPSBwY2lwcml2LT5uZGlzX2FkYXB0ZXIucGNpYnJpZGdlX3ZlbmRvcjsKKworCXBwc2MtPnJlZ19yZnBzX2xldmVsID0gMDsKKwlwcHNjLT5iX3N1cHBvcnRfYXNwbSA9IDA7CisKKwkvKlVwZGF0ZSBQQ0kgQVNQTSBzZXR0aW5nICovCisJcHBzYy0+Y29uc3RfYW1kcGNpX2FzcG0gPSBydGxwY2ktPmNvbnN0X2FtZHBjaV9hc3BtOworCXN3aXRjaCAocnRscGNpLT5jb25zdF9wY2lfYXNwbSkgeworCWNhc2UgMDoKKwkJLypObyBBU1BNICovCisJCWJyZWFrOworCisJY2FzZSAxOgorCQkvKkFTUE0gZHluYW1pY2FsbHkgZW5hYmxlZC9kaXNhYmxlLiAqLworCQlwcHNjLT5yZWdfcmZwc19sZXZlbCB8PSBSVF9SRl9MUFNfTEVWRUxfQVNQTTsKKwkJYnJlYWs7CisKKwljYXNlIDI6CisJCS8qQVNQTSB3aXRoIENsb2NrIFJlcSBkeW5hbWljYWxseSBlbmFibGVkL2Rpc2FibGUuICovCisJCXBwc2MtPnJlZ19yZnBzX2xldmVsIHw9IChSVF9SRl9MUFNfTEVWRUxfQVNQTSB8CisJCQkJCSBSVF9SRl9PRkZfTEVWTF9DTEtfUkVRKTsKKwkJYnJlYWs7CisKKwljYXNlIDM6CisJCS8qCisJCSAqIEFsd2F5cyBlbmFibGUgQVNQTSBhbmQgQ2xvY2sgUmVxCisJCSAqIGZyb20gaW5pdGlhbGl6YXRpb24gdG8gaGFsdC4KKwkJICogKi8KKwkJcHBzYy0+cmVnX3JmcHNfbGV2ZWwgJj0gfihSVF9SRl9MUFNfTEVWRUxfQVNQTSk7CisJCXBwc2MtPnJlZ19yZnBzX2xldmVsIHw9IChSVF9SRl9QU19MRVZFTF9BTFdBWVNfQVNQTSB8CisJCQkJCSBSVF9SRl9PRkZfTEVWTF9DTEtfUkVRKTsKKwkJYnJlYWs7CisKKwljYXNlIDQ6CisJCS8qCisJCSAqIEFsd2F5cyBlbmFibGUgQVNQTSB3aXRob3V0IENsb2NrIFJlcQorCQkgKiBmcm9tIGluaXRpYWxpemF0aW9uIHRvIGhhbHQuCisJCSAqICovCisJCXBwc2MtPnJlZ19yZnBzX2xldmVsICY9IH4oUlRfUkZfTFBTX0xFVkVMX0FTUE0gfAorCQkJCQkgIFJUX1JGX09GRl9MRVZMX0NMS19SRVEpOworCQlwcHNjLT5yZWdfcmZwc19sZXZlbCB8PSBSVF9SRl9QU19MRVZFTF9BTFdBWVNfQVNQTTsKKwkJYnJlYWs7CisJfQorCisJcHBzYy0+cmVnX3JmcHNfbGV2ZWwgfD0gUlRfUkZfT0ZGX0xFVkxfSEFMVF9OSUM7CisKKwkvKlVwZGF0ZSBSYWRpbyBPRkYgc2V0dGluZyAqLworCXN3aXRjaCAocnRscGNpLT5jb25zdF9od3N3X3Jmb2ZmX2QzKSB7CisJY2FzZSAxOgorCQlpZiAocHBzYy0+cmVnX3JmcHNfbGV2ZWwgJiBSVF9SRl9MUFNfTEVWRUxfQVNQTSkKKwkJCXBwc2MtPnJlZ19yZnBzX2xldmVsIHw9IFJUX1JGX09GRl9MRVZMX0FTUE07CisJCWJyZWFrOworCisJY2FzZSAyOgorCQlpZiAocHBzYy0+cmVnX3JmcHNfbGV2ZWwgJiBSVF9SRl9MUFNfTEVWRUxfQVNQTSkKKwkJCXBwc2MtPnJlZ19yZnBzX2xldmVsIHw9IFJUX1JGX09GRl9MRVZMX0FTUE07CisJCXBwc2MtPnJlZ19yZnBzX2xldmVsIHw9IFJUX1JGX09GRl9MRVZMX0hBTFRfTklDOworCQlicmVhazsKKworCWNhc2UgMzoKKwkJcHBzYy0+cmVnX3JmcHNfbGV2ZWwgfD0gUlRfUkZfT0ZGX0xFVkxfUENJX0QzOworCQlicmVhazsKKwl9CisKKwkvKlNldCBIVyBkZWZpbml0aW9uIHRvIGRldGVybWluZSBpZiBpdCBzdXBwb3J0cyBBU1BNLiAqLworCXN3aXRjaCAocnRscGNpLT5jb25zdF9zdXBwb3J0X3BjaWFzcG0pIHsKKwljYXNlIDA6eworCQkJLypOb3Qgc3VwcG9ydCBBU1BNLiAqLworCQkJYm9vbCBiX3N1cHBvcnRfYXNwbSA9IGZhbHNlOworCQkJcHBzYy0+Yl9zdXBwb3J0X2FzcG0gPSBiX3N1cHBvcnRfYXNwbTsKKwkJCWJyZWFrOworCQl9CisJY2FzZSAxOnsKKwkJCS8qU3VwcG9ydCBBU1BNLiAqLworCQkJYm9vbCBiX3N1cHBvcnRfYXNwbSA9IHRydWU7CisJCQlib29sIGJfc3VwcG9ydF9iYWNrZG9vciA9IHRydWU7CisJCQlwcHNjLT5iX3N1cHBvcnRfYXNwbSA9IGJfc3VwcG9ydF9hc3BtOworCisJCQkvKmlmKHByaXYtPm9lbV9pZCA9PSBSVF9DSURfVE9TSElCQSAmJgorCQkJICAgIXByaXYtPm5kaXNfYWRhcHRlci5hbWRfbDFfcGF0Y2gpCisJCQkgICBiX3N1cHBvcnRfYmFja2Rvb3IgPSBmYWxzZTsgKi8KKworCQkJcHBzYy0+Yl9zdXBwb3J0X2JhY2tkb29yID0gYl9zdXBwb3J0X2JhY2tkb29yOworCisJCQlicmVhazsKKwkJfQorCWNhc2UgMjoKKwkJLypBU1BNIHZhbHVlIHNldCBieSBjaGlwc2V0LiAqLworCQlpZiAocGNpYnJpZGdlX3ZlbmRvciA9PSBQQ0lfQlJJREdFX1ZFTkRPUl9JTlRFTCkgeworCQkJYm9vbCBiX3N1cHBvcnRfYXNwbSA9IHRydWU7CisJCQlwcHNjLT5iX3N1cHBvcnRfYXNwbSA9IGJfc3VwcG9ydF9hc3BtOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfRU1FUkcsCisJCQkgKCJzd2l0Y2ggY2FzZSBub3QgcHJvY2Vzc1xuIikpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBib29sIF9ydGxfcGNpX3BsYXRmb3JtX3N3aXRjaF9kZXZpY2VfcGNpX2FzcG0oCisJCQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCXU4IHZhbHVlKQoreworCXN0cnVjdCBydGxfcGNpICpydGxwY2kgPSBydGxfcGNpZGV2KHJ0bF9wY2lwcml2KGh3KSk7CisJYm9vbCBicmVzdWx0ID0gZmFsc2U7CisKKwl2YWx1ZSB8PSAweDQwOworCisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHJ0bHBjaS0+cGRldiwgMHg4MCwgdmFsdWUpOworCisJcmV0dXJuIGJyZXN1bHQ7Cit9CisKKy8qV2hlbiB3ZSBzZXQgMHgwMSB0byBlbmFibGUgY2xrIHJlcXVlc3QuIFNldCAweDAgdG8gZGlzYWJsZSBjbGsgcmVxLiovCitzdGF0aWMgYm9vbCBfcnRsX3BjaV9zd2l0Y2hfY2xrX3JlcShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggdmFsdWUpCit7CisJc3RydWN0IHJ0bF9wY2kgKnJ0bHBjaSA9IHJ0bF9wY2lkZXYocnRsX3BjaXByaXYoaHcpKTsKKwl1OCBidWZmZXI7CisJYm9vbCBicmVzdWx0ID0gZmFsc2U7CisKKwlidWZmZXIgPSB2YWx1ZTsKKworCXBjaV93cml0ZV9jb25maWdfYnl0ZShydGxwY2ktPnBkZXYsIDB4ODEsIHZhbHVlKTsKKwlicmVzdWx0ID0gdHJ1ZTsKKworCXJldHVybiBicmVzdWx0OworfQorCisvKkRpc2FibGUgUlRMODE5MlNFIEFTUE0gJiBEaXNhYmxlIFBjaSBCcmlkZ2UgQVNQTSovCitzdGF0aWMgdm9pZCBydGxfcGNpX2Rpc2FibGVfYXNwbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9wY2lfcHJpdiAqcGNpcHJpdiA9IHJ0bF9wY2lwcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BzX2N0bCAqcHBzYyA9IHJ0bF9wc2MocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOworCXU4IHBjaWJyaWRnZV92ZW5kb3IgPSBwY2lwcml2LT5uZGlzX2FkYXB0ZXIucGNpYnJpZGdlX3ZlbmRvcjsKKwl1MzIgcGNpY2ZnX2FkZHJwb3J0ID0gcGNpcHJpdi0+bmRpc19hZGFwdGVyLnBjaWNmZ19hZGRycG9ydDsKKwl1OCBudW00Ynl0ZXMgPSBwY2lwcml2LT5uZGlzX2FkYXB0ZXIubnVtNGJ5dGVzOworCS8qUmV0cmlldmUgb3JpZ2luYWwgY29uZmlndXJhdGlvbiBzZXR0aW5ncy4gKi8KKwl1OCBsaW5rY3RybF9yZWcgPSBwY2lwcml2LT5uZGlzX2FkYXB0ZXIubGlua2N0cmxfcmVnOworCXUxNiBwY2licmlkZ2VfbGlua2N0cmxyZWcgPSBwY2lwcml2LT5uZGlzX2FkYXB0ZXIuCisJCQkJcGNpYnJpZGdlX2xpbmtjdHJscmVnOworCXUxNiBhc3BtbGV2ZWwgPSAwOworCisJaWYgKHBjaWJyaWRnZV92ZW5kb3IgPT0gUENJX0JSSURHRV9WRU5ET1JfVU5LTk9XTikgeworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1BPV0VSLCBEQkdfVFJBQ0UsCisJCQkgKCJQQ0koQnJpZGdlKSBVTktOT1dOLlxuIikpOworCisJCXJldHVybjsKKwl9CisKKwlpZiAocHBzYy0+cmVnX3JmcHNfbGV2ZWwgJiBSVF9SRl9PRkZfTEVWTF9DTEtfUkVRKSB7CisJCVJUX0NMRUFSX1BTX0xFVkVMKHBwc2MsIFJUX1JGX09GRl9MRVZMX0NMS19SRVEpOworCQlfcnRsX3BjaV9zd2l0Y2hfY2xrX3JlcShodywgMHgwKTsKKwl9CisKKwlpZiAoMSkgeworCQkvKmZvciBwcm9taXNpbmcgZGV2aWNlIHdpbGwgaW4gTDAgc3RhdGUgYWZ0ZXIgYW4gSS9PLiAqLworCQl1OCB0bXBfdTFiOworCQlwY2lfcmVhZF9jb25maWdfYnl0ZShydGxwY2ktPnBkZXYsIDB4ODAsICZ0bXBfdTFiKTsKKwl9CisKKwkvKlNldCBjb3JyZXNwb25kaW5nIHZhbHVlLiAqLworCWFzcG1sZXZlbCB8PSBCSVQoMCkgfCBCSVQoMSk7CisJbGlua2N0cmxfcmVnICY9IH5hc3BtbGV2ZWw7CisJcGNpYnJpZGdlX2xpbmtjdHJscmVnICY9IH4oQklUKDApIHwgQklUKDEpKTsKKworCV9ydGxfcGNpX3BsYXRmb3JtX3N3aXRjaF9kZXZpY2VfcGNpX2FzcG0oaHcsIGxpbmtjdHJsX3JlZyk7CisJdWRlbGF5KDUwKTsKKworCS8qNCBEaXNhYmxlIFBjaSBCcmlkZ2UgQVNQTSAqLworCXJ0bF9wY2lfcmF3X3dyaXRlX3BvcnRfdWxvbmcoUENJX0NPTkZfQUREUkVTUywKKwkJCQkgICAgIHBjaWNmZ19hZGRycG9ydCArIChudW00Ynl0ZXMgPDwgMikpOworCXJ0bF9wY2lfcmF3X3dyaXRlX3BvcnRfdWNoYXIoUENJX0NPTkZfREFUQSwgcGNpYnJpZGdlX2xpbmtjdHJscmVnKTsKKworCXVkZWxheSg1MCk7CisKK30KKworLyoKKyAqRW5hYmxlIFJUTDgxOTJTRSBBU1BNICYgRW5hYmxlIFBjaSBCcmlkZ2UgQVNQTSBmb3IKKyAqcG93ZXIgc2F2aW5nIFdlIHNob3VsZCBmb2xsb3cgdGhlIHNlcXVlbmNlIHRvIGVuYWJsZQorICpSVEw4MTkyU0UgZmlyc3QgdGhlbiBlbmFibGUgUGNpIEJyaWRnZSBBU1BNCisgKm9yIHRoZSBzeXN0ZW0gd2lsbCBzaG93IGJsdWVzY3JlZW4uCisgKi8KK3N0YXRpYyB2b2lkIHJ0bF9wY2lfZW5hYmxlX2FzcG0oc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGNpX3ByaXYgKnBjaXByaXYgPSBydGxfcGNpcHJpdihodyk7CisJc3RydWN0IHJ0bF9wc19jdGwgKnBwc2MgPSBydGxfcHNjKHJ0bF9wcml2KGh3KSk7CisJc3RydWN0IHJ0bF9wY2kgKnJ0bHBjaSA9IHJ0bF9wY2lkZXYocnRsX3BjaXByaXYoaHcpKTsKKwl1OCBwY2licmlkZ2VfYnVzbnVtID0gcGNpcHJpdi0+bmRpc19hZGFwdGVyLnBjaWJyaWRnZV9idXNudW07CisJdTggcGNpYnJpZGdlX2Rldm51bSA9IHBjaXByaXYtPm5kaXNfYWRhcHRlci5wY2licmlkZ2VfZGV2bnVtOworCXU4IHBjaWJyaWRnZV9mdW5jbnVtID0gcGNpcHJpdi0+bmRpc19hZGFwdGVyLnBjaWJyaWRnZV9mdW5jbnVtOworCXU4IHBjaWJyaWRnZV92ZW5kb3IgPSBwY2lwcml2LT5uZGlzX2FkYXB0ZXIucGNpYnJpZGdlX3ZlbmRvcjsKKwl1MzIgcGNpY2ZnX2FkZHJwb3J0ID0gcGNpcHJpdi0+bmRpc19hZGFwdGVyLnBjaWNmZ19hZGRycG9ydDsKKwl1OCBudW00Ynl0ZXMgPSBwY2lwcml2LT5uZGlzX2FkYXB0ZXIubnVtNGJ5dGVzOworCXUxNiBhc3BtbGV2ZWw7CisJdTggdV9wY2licmlkZ2VfYXNwbXNldHRpbmc7CisJdTggdV9kZXZpY2VfYXNwbXNldHRpbmc7CisKKwlpZiAocGNpYnJpZGdlX3ZlbmRvciA9PSBQQ0lfQlJJREdFX1ZFTkRPUl9VTktOT1dOKSB7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUE9XRVIsIERCR19UUkFDRSwKKwkJCSAoIlBDSShCcmlkZ2UpIFVOS05PV04uXG4iKSk7CisJCXJldHVybjsKKwl9CisKKwkvKjQgRW5hYmxlIFBjaSBCcmlkZ2UgQVNQTSAqLworCXJ0bF9wY2lfcmF3X3dyaXRlX3BvcnRfdWxvbmcoUENJX0NPTkZfQUREUkVTUywKKwkJCQkgICAgIHBjaWNmZ19hZGRycG9ydCArIChudW00Ynl0ZXMgPDwgMikpOworCisJdV9wY2licmlkZ2VfYXNwbXNldHRpbmcgPQorCSAgICBwY2lwcml2LT5uZGlzX2FkYXB0ZXIucGNpYnJpZGdlX2xpbmtjdHJscmVnIHwKKwkgICAgcnRscGNpLT5jb25zdF9ob3N0cGNpX2FzcG1fc2V0dGluZzsKKworCWlmIChwY2licmlkZ2VfdmVuZG9yID09IFBDSV9CUklER0VfVkVORE9SX0lOVEVMKQorCQl1X3BjaWJyaWRnZV9hc3Btc2V0dGluZyAmPSB+QklUKDApOworCisJcnRsX3BjaV9yYXdfd3JpdGVfcG9ydF91Y2hhcihQQ0lfQ09ORl9EQVRBLCB1X3BjaWJyaWRnZV9hc3Btc2V0dGluZyk7CisKKwlSVF9UUkFDRShydGxwcml2LCBDT01QX0lOSVQsIERCR19MT1VELAorCQkgKCJQbGF0Zm9ybUVuYWJsZUFTUE0oKTpQY2lCcmlkZ2UgYnVzbnVtYmVyWyV4XSwgIgorCQkgICJEZXZOdW1iZVsleF0sIGZ1bmNudW1iZXJbJXhdLCBXcml0ZSByZWdbJXhdID0gJXhcbiIsCisJCSAgcGNpYnJpZGdlX2J1c251bSwgcGNpYnJpZGdlX2Rldm51bSwgcGNpYnJpZGdlX2Z1bmNudW0sCisJCSAgKHBjaXByaXYtPm5kaXNfYWRhcHRlci5wY2licmlkZ2VfcGNpZWhkcl9vZmZzZXQgKyAweDEwKSwKKwkJICB1X3BjaWJyaWRnZV9hc3Btc2V0dGluZykpOworCisJdWRlbGF5KDUwKTsKKworCS8qR2V0IEFTUE0gbGV2ZWwgKHdpdGgvd2l0aG91dCBDbG9jayBSZXEpICovCisJYXNwbWxldmVsID0gcnRscGNpLT5jb25zdF9kZXZpY2VwY2lfYXNwbV9zZXR0aW5nOworCXVfZGV2aWNlX2FzcG1zZXR0aW5nID0gcGNpcHJpdi0+bmRpc19hZGFwdGVyLmxpbmtjdHJsX3JlZzsKKworCS8qX3J0bF9wY2lfcGxhdGZvcm1fc3dpdGNoX2RldmljZV9wY2lfYXNwbShkZXYsKi8KKwkvKihwcml2LT5uZGlzX2FkYXB0ZXIubGlua2N0cmxfcmVnIHwgQVNQTUxldmVsKSk7ICovCisKKwl1X2RldmljZV9hc3Btc2V0dGluZyB8PSBhc3BtbGV2ZWw7CisKKwlfcnRsX3BjaV9wbGF0Zm9ybV9zd2l0Y2hfZGV2aWNlX3BjaV9hc3BtKGh3LCB1X2RldmljZV9hc3Btc2V0dGluZyk7CisKKwlpZiAocHBzYy0+cmVnX3JmcHNfbGV2ZWwgJiBSVF9SRl9PRkZfTEVWTF9DTEtfUkVRKSB7CisJCV9ydGxfcGNpX3N3aXRjaF9jbGtfcmVxKGh3LCAocHBzYy0+cmVnX3JmcHNfbGV2ZWwgJgorCQkJCQkgICAgIFJUX1JGX09GRl9MRVZMX0NMS19SRVEpID8gMSA6IDApOworCQlSVF9TRVRfUFNfTEVWRUwocHBzYywgUlRfUkZfT0ZGX0xFVkxfQ0xLX1JFUSk7CisJfQorCXVkZWxheSgyMDApOworfQorCitzdGF0aWMgYm9vbCBydGxfcGNpX2dldF9hbWRfbDFfcGF0Y2goc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wY2lfcHJpdiAqcGNpcHJpdiA9IHJ0bF9wY2lwcml2KGh3KTsKKwl1MzIgcGNpY2ZnX2FkZHJwb3J0ID0gcGNpcHJpdi0+bmRpc19hZGFwdGVyLnBjaWNmZ19hZGRycG9ydDsKKworCWJvb2wgc3RhdHVzID0gZmFsc2U7CisJdTggb2Zmc2V0X2UwOworCXVuc2lnbmVkIG9mZnNldF9lNDsKKworCXJ0bF9wY2lfcmF3X3dyaXRlX3BvcnRfdWxvbmcoUENJX0NPTkZfQUREUkVTUywKKwkJCXBjaWNmZ19hZGRycG9ydCArIDB4RTApOworCXJ0bF9wY2lfcmF3X3dyaXRlX3BvcnRfdWNoYXIoUENJX0NPTkZfREFUQSwgMHhBMCk7CisKKwlydGxfcGNpX3Jhd193cml0ZV9wb3J0X3Vsb25nKFBDSV9DT05GX0FERFJFU1MsCisJCQlwY2ljZmdfYWRkcnBvcnQgKyAweEUwKTsKKwlydGxfcGNpX3Jhd19yZWFkX3BvcnRfdWNoYXIoUENJX0NPTkZfREFUQSwgJm9mZnNldF9lMCk7CisKKwlpZiAob2Zmc2V0X2UwID09IDB4QTApIHsKKwkJcnRsX3BjaV9yYXdfd3JpdGVfcG9ydF91bG9uZyhQQ0lfQ09ORl9BRERSRVNTLAorCQkJCQkgICAgIHBjaWNmZ19hZGRycG9ydCArIDB4RTQpOworCQlydGxfcGNpX3Jhd19yZWFkX3BvcnRfdWxvbmcoUENJX0NPTkZfREFUQSwgJm9mZnNldF9lNCk7CisJCWlmIChvZmZzZXRfZTQgJiBCSVQoMjMpKQorCQkJc3RhdHVzID0gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgdm9pZCBydGxfcGNpX2dldF9saW5rY29udHJvbF9maWVsZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3BjaV9wcml2ICpwY2lwcml2ID0gcnRsX3BjaXByaXYoaHcpOworCXU4IGNhcGFiaWxpdHlvZmZzZXQgPSBwY2lwcml2LT5uZGlzX2FkYXB0ZXIucGNpYnJpZGdlX3BjaWVoZHJfb2Zmc2V0OworCXUzMiBwY2ljZmdfYWRkcnBvcnQgPSBwY2lwcml2LT5uZGlzX2FkYXB0ZXIucGNpY2ZnX2FkZHJwb3J0OworCXU4IGxpbmtjdHJsX3JlZzsKKwl1OCBudW00YkJ5dGVzOworCisJbnVtNGJCeXRlcyA9IChjYXBhYmlsaXR5b2Zmc2V0ICsgMHgxMCkgLyA0OworCisJLypSZWFkICBMaW5rIENvbnRyb2wgUmVnaXN0ZXIgKi8KKwlydGxfcGNpX3Jhd193cml0ZV9wb3J0X3Vsb25nKFBDSV9DT05GX0FERFJFU1MsCisJCQkJICAgICBwY2ljZmdfYWRkcnBvcnQgKyAobnVtNGJCeXRlcyA8PCAyKSk7CisJcnRsX3BjaV9yYXdfcmVhZF9wb3J0X3VjaGFyKFBDSV9DT05GX0RBVEEsICZsaW5rY3RybF9yZWcpOworCisJcGNpcHJpdi0+bmRpc19hZGFwdGVyLnBjaWJyaWRnZV9saW5rY3RybHJlZyA9IGxpbmtjdHJsX3JlZzsKK30KKworc3RhdGljIHZvaWQgcnRsX3BjaV9wYXJzZV9jb25maWd1cmF0aW9uKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9wY2lfcHJpdiAqcGNpcHJpdiA9IHJ0bF9wY2lwcml2KGh3KTsKKworCXU4IHRtcDsKKwlpbnQgcG9zOworCXU4IGxpbmtjdHJsX3JlZzsKKworCS8qTGluayBDb250cm9sIFJlZ2lzdGVyICovCisJcG9zID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBQQ0lfQ0FQX0lEX0VYUCk7CisJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgcG9zICsgUENJX0VYUF9MTktDVEwsICZsaW5rY3RybF9yZWcpOworCXBjaXByaXYtPm5kaXNfYWRhcHRlci5saW5rY3RybF9yZWcgPSBsaW5rY3RybF9yZWc7CisKKwlSVF9UUkFDRShydGxwcml2LCBDT01QX0lOSVQsIERCR19UUkFDRSwKKwkJICgiTGluayBDb250cm9sIFJlZ2lzdGVyID0leFxuIiwKKwkJICBwY2lwcml2LT5uZGlzX2FkYXB0ZXIubGlua2N0cmxfcmVnKSk7CisKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCAweDk4LCAmdG1wKTsKKwl0bXAgfD0gQklUKDQpOworCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCAweDk4LCB0bXApOworCisJdG1wID0gMHgxNzsKKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgMHg3MGYsIHRtcCk7Cit9CisKK3N0YXRpYyB2b2lkIF9ydGxfcGNpX2luaXRpYWxpemVfYWRhcHRlcl9jb21tb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wc19jdGwgKnBwc2MgPSBydGxfcHNjKHJ0bF9wcml2KGh3KSk7CisKKwlfcnRsX3BjaV91cGRhdGVfZGVmYXVsdF9zZXR0aW5nKGh3KTsKKworCWlmIChwcHNjLT5yZWdfcmZwc19sZXZlbCAmIFJUX1JGX1BTX0xFVkVMX0FMV0FZU19BU1BNKSB7CisJCS8qQWx3YXlzIGVuYWJsZSBBU1BNICYgQ2xvY2sgUmVxLiAqLworCQlydGxfcGNpX2VuYWJsZV9hc3BtKGh3KTsKKwkJUlRfU0VUX1BTX0xFVkVMKHBwc2MsIFJUX1JGX1BTX0xFVkVMX0FMV0FZU19BU1BNKTsKKwl9CisKK30KKworc3RhdGljIHZvaWQgcnRsX3BjaV9pbml0X2FzcG0oc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wY2kgKnJ0bHBjaSA9IHJ0bF9wY2lkZXYocnRsX3BjaXByaXYoaHcpKTsKKworCS8qY2xvc2UgQVNQTSBmb3IgQU1EIGRlZmF1bHRseSAqLworCXJ0bHBjaS0+Y29uc3RfYW1kcGNpX2FzcG0gPSAwOworCisJLyoKKwkgKiBBU1BNIFBTIG1vZGUuCisJICogMCAtIERpc2FibGUgQVNQTSwKKwkgKiAxIC0gRW5hYmxlIEFTUE0gd2l0aG91dCBDbG9jayBSZXEsCisJICogMiAtIEVuYWJsZSBBU1BNIHdpdGggQ2xvY2sgUmVxLAorCSAqIDMgLSBBbHd5YXMgRW5hYmxlIEFTUE0gd2l0aCBDbG9jayBSZXEsCisJICogNCAtIEFsd2F5cyBFbmFibGUgQVNQTSB3aXRob3V0IENsb2NrIFJlcS4KKwkgKiBzZXQgZGVmdWx0IHRvIFJUTDgxOTJDRTozIFJUTDgxOTJFOjIKKwkgKiAqLworCXJ0bHBjaS0+Y29uc3RfcGNpX2FzcG0gPSAzOworCisJLypTZXR0aW5nIGZvciBQQ0ktRSBkZXZpY2UgKi8KKwlydGxwY2ktPmNvbnN0X2RldmljZXBjaV9hc3BtX3NldHRpbmcgPSAweDAzOworCisJLypTZXR0aW5nIGZvciBQQ0ktRSBicmlkZ2UgKi8KKwlydGxwY2ktPmNvbnN0X2hvc3RwY2lfYXNwbV9zZXR0aW5nID0gMHgwMjsKKworCS8qCisJICogSW4gSHcvU3cgUmFkaW8gT2ZmIHNpdHVhdGlvbi4KKwkgKiAwIC0gRGVmYXVsdCwKKwkgKiAxIC0gRnJvbSBBU1BNIHNldHRpbmcgd2l0aG91dCBsb3cgTWFjIFB3ciwKKwkgKiAyIC0gRnJvbSBBU1BNIHNldHRpbmcgd2l0aCBsb3cgTWFjIFB3ciwKKwkgKiAzIC0gQnVzIEQzCisJICogc2V0IGRlZmF1bHQgdG8gUlRMODE5MkNFOjAgUlRMODE5MlNFOjIKKwkgKi8KKwlydGxwY2ktPmNvbnN0X2h3c3dfcmZvZmZfZDMgPSAwOworCisJLyoKKwkgKiBUaGlzIHNldHRpbmcgd29ya3MgZm9yIHRob3NlIGRldmljZSB3aXRoCisJICogYmFja2Rvb3IgQVNQTSBzZXR0aW5nIHN1Y2ggYXMgRVBIWSBzZXR0aW5nLgorCSAqIDAgLSBOb3Qgc3VwcG9ydCBBU1BNLAorCSAqIDEgLSBTdXBwb3J0IEFTUE0sCisJICogMiAtIEFjY29yZGluZyB0byBjaGlwc2V0LgorCSAqLworCXJ0bHBjaS0+Y29uc3Rfc3VwcG9ydF9wY2lhc3BtID0gMTsKKworCV9ydGxfcGNpX2luaXRpYWxpemVfYWRhcHRlcl9jb21tb24oaHcpOworfQorCitzdGF0aWMgdm9pZCBfcnRsX3BjaV9pb19oYW5kbGVyX2luaXQoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCisJcnRscHJpdi0+aW8uZGV2ID0gZGV2OworCisJcnRscHJpdi0+aW8ud3JpdGU4X2FzeW5jID0gcGNpX3dyaXRlOF9hc3luYzsKKwlydGxwcml2LT5pby53cml0ZTE2X2FzeW5jID0gcGNpX3dyaXRlMTZfYXN5bmM7CisJcnRscHJpdi0+aW8ud3JpdGUzMl9hc3luYyA9IHBjaV93cml0ZTMyX2FzeW5jOworCisJcnRscHJpdi0+aW8ucmVhZDhfc3luYyA9IHBjaV9yZWFkOF9zeW5jOworCXJ0bHByaXYtPmlvLnJlYWQxNl9zeW5jID0gcGNpX3JlYWQxNl9zeW5jOworCXJ0bHByaXYtPmlvLnJlYWQzMl9zeW5jID0gcGNpX3JlYWQzMl9zeW5jOworCit9CisKK3N0YXRpYyB2b2lkIF9ydGxfcGNpX2lvX2hhbmRsZXJfcmVsZWFzZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKK30KKworc3RhdGljIHZvaWQgX3J0bF9wY2lfdHhfaXNyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgcHJpbykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9wY2kgKnJ0bHBjaSA9IHJ0bF9wY2lkZXYocnRsX3BjaXByaXYoaHcpKTsKKworCXN0cnVjdCBydGw4MTkyX3R4X3JpbmcgKnJpbmcgPSAmcnRscGNpLT50eF9yaW5nW3ByaW9dOworCisJd2hpbGUgKHNrYl9xdWV1ZV9sZW4oJnJpbmctPnF1ZXVlKSkgeworCQlzdHJ1Y3QgcnRsX3R4X2Rlc2MgKmVudHJ5ID0gJnJpbmctPmRlc2NbcmluZy0+aWR4XTsKKwkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwkJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOworCisJCXU4IG93biA9ICh1OCkgcnRscHJpdi0+Y2ZnLT5vcHMtPmdldF9kZXNjKCh1OCAqKSBlbnRyeSwgdHJ1ZSwKKwkJCQkJCQkgIEhXX0RFU0NfT1dOKTsKKworCQkvKgorCQkgKmJlYWNvbiBwYWNrZXQgd2lsbCBvbmx5IHVzZSB0aGUgZmlyc3QKKwkJICpkZXNjcmlwdG9yIGRlZmF1dGx5LGFuZCB0aGUgb3duIG1heSBub3QKKwkJICpiZSBjbGVhcmVkIGJ5IHRoZSBoYXJkd2FyZQorCQkgKi8KKwkJaWYgKG93bikKKwkJCXJldHVybjsKKwkJcmluZy0+aWR4ID0gKHJpbmctPmlkeCArIDEpICUgcmluZy0+ZW50cmllczsKKworCQlza2IgPSBfX3NrYl9kZXF1ZXVlKCZyaW5nLT5xdWV1ZSk7CisJCXBjaV91bm1hcF9zaW5nbGUocnRscGNpLT5wZGV2LAorCQkJCSBsZTMyX3RvX2NwdShydGxwcml2LT5jZmctPm9wcy0+CisJCQkJCSAgICAgZ2V0X2Rlc2MoKHU4ICopIGVudHJ5LCB0cnVlLAorCQkJCQkJICAgICAgSFdfREVTQ19UWEJVRkZfQUREUikpLAorCQkJCSBza2ItPmxlbiwgUENJX0RNQV9UT0RFVklDRSk7CisKKwkJUlRfVFJBQ0UocnRscHJpdiwgKENPTVBfSU5UUiB8IENPTVBfU0VORCksIERCR19UUkFDRSwKKwkJCSAoIm5ldyByaW5nLT5pZHg6JWQsICIKKwkJCSAgImZyZWU6IHNrYl9xdWV1ZV9sZW46JWQsIGZyZWU6IHNlcToleFxuIiwKKwkJCSAgcmluZy0+aWR4LAorCQkJICBza2JfcXVldWVfbGVuKCZyaW5nLT5xdWV1ZSksCisJCQkgICoodTE2ICopIChza2ItPmRhdGEgKyAyMikpKTsKKworCQlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCQlpZWVlODAyMTFfdHhfaW5mb19jbGVhcl9zdGF0dXMoaW5mbyk7CisKKwkJaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRfQUNLOworCQkvKmluZm8tPnN0YXR1cy5yYXRlc1swXS5jb3VudCA9IDE7ICovCisKKwkJaWVlZTgwMjExX3R4X3N0YXR1c19pcnFzYWZlKGh3LCBza2IpOworCisJCWlmICgocmluZy0+ZW50cmllcyAtIHNrYl9xdWV1ZV9sZW4oJnJpbmctPnF1ZXVlKSkKKwkJCQk9PSAyKSB7CisKKwkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfTE9VRCwKKwkJCQkJKCJtb3JlIGRlc2MgbGVmdCwgd2FrZSIKKwkJCQkJICJza2JfcXVldWVAJWQscmluZy0+aWR4ID0gJWQsIgorCQkJCQkgInNrYl9xdWV1ZV9sZW4gPSAweCVkXG4iLAorCQkJCQkgcHJpbywgcmluZy0+aWR4LAorCQkJCQkgc2tiX3F1ZXVlX2xlbigmcmluZy0+cXVldWUpKSk7CisKKwkJCWllZWU4MDIxMV93YWtlX3F1ZXVlKGh3LAorCQkJCQlza2JfZ2V0X3F1ZXVlX21hcHBpbmcKKwkJCQkJKHNrYikpOworCQl9CisKKwkJc2tiID0gTlVMTDsKKwl9CisKKwlpZiAoKChydGxwcml2LT5saW5rX2luZm8ubnVtX3J4X2lucGVyaW9kICsKKwkJcnRscHJpdi0+bGlua19pbmZvLm51bV90eF9pbnBlcmlvZCkgPiA4KSB8fAorCQkocnRscHJpdi0+bGlua19pbmZvLm51bV9yeF9pbnBlcmlvZCA+IDIpKSB7CisJCXJ0bF9scHNfbGVhdmUoaHcpOworCX0KK30KKworc3RhdGljIHZvaWQgX3J0bF9wY2lfcnhfaW50ZXJydXB0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOworCWludCByeF9xdWV1ZV9pZHggPSBSVExfUENJX1JYX01QRFVfUVVFVUU7CisKKwlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyByeF9zdGF0dXMgPSB7IDAgfTsKKwl1bnNpZ25lZCBpbnQgY291bnQgPSBydGxwY2ktPnJ4cmluZ2NvdW50OworCXU4IG93bjsKKwl1OCB0bXBfb25lOworCXUzMiBidWZmZXJhZGRyZXNzOworCWJvb2wgdW5pY2FzdCA9IGZhbHNlOworCisJc3RydWN0IHJ0bF9zdGF0cyBzdGF0cyA9IHsKKwkJLnNpZ25hbCA9IDAsCisJCS5ub2lzZSA9IC05OCwKKwkJLnJhdGUgPSAwLAorCX07CisKKwkvKlJYIE5PUk1BTCBQS1QgKi8KKwl3aGlsZSAoY291bnQtLSkgeworCQkvKnJ4IGRlc2NyaXB0b3IgKi8KKwkJc3RydWN0IHJ0bF9yeF9kZXNjICpwZGVzYyA9ICZydGxwY2ktPnJ4X3JpbmdbcnhfcXVldWVfaWR4XS5kZXNjWworCQkJCXJ0bHBjaS0+cnhfcmluZ1tyeF9xdWV1ZV9pZHhdLmlkeF07CisJCS8qcnggcGt0ICovCisJCXN0cnVjdCBza19idWZmICpza2IgPSBydGxwY2ktPnJ4X3JpbmdbcnhfcXVldWVfaWR4XS5yeF9idWZbCisJCQkJcnRscGNpLT5yeF9yaW5nW3J4X3F1ZXVlX2lkeF0uaWR4XTsKKworCQlvd24gPSAodTgpIHJ0bHByaXYtPmNmZy0+b3BzLT5nZXRfZGVzYygodTggKikgcGRlc2MsCisJCQkJCQkgICAgICAgZmFsc2UsIEhXX0RFU0NfT1dOKTsKKworCQlpZiAob3duKSB7CisJCQkvKndhaXQgZGF0YSB0byBiZSBmaWxsZWQgYnkgaGFyZHdhcmUgKi8KKwkJCXJldHVybjsKKwkJfSBlbHNlIHsKKwkJCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CisJCQl1MTYgZmM7CisJCQlzdHJ1Y3Qgc2tfYnVmZiAqbmV3X3NrYiA9IE5VTEw7CisKKwkJCXJ0bHByaXYtPmNmZy0+b3BzLT5xdWVyeV9yeF9kZXNjKGh3LCAmc3RhdHMsCisJCQkJCQkJICZyeF9zdGF0dXMsCisJCQkJCQkJICh1OCAqKSBwZGVzYywgc2tiKTsKKworCQkJcGNpX3VubWFwX3NpbmdsZShydGxwY2ktPnBkZXYsCisJCQkJCSAqKChkbWFfYWRkcl90ICopIHNrYi0+Y2IpLAorCQkJCQkgcnRscGNpLT5yeGJ1ZmZlcnNpemUsCisJCQkJCSBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCisJCQlza2JfcHV0KHNrYiwgcnRscHJpdi0+Y2ZnLT5vcHMtPmdldF9kZXNjKCh1OCAqKSBwZGVzYywKKwkJCQkJCQkgZmFsc2UsCisJCQkJCQkJIEhXX0RFU0NfUlhQS1RfTEVOKSk7CisJCQlza2JfcmVzZXJ2ZShza2IsCisJCQkJICAgIHN0YXRzLnJ4X2RydmluZm9fc2l6ZSArIHN0YXRzLnJ4X2J1ZnNoaWZ0KTsKKworCQkJLyoKKwkJCSAqTk9USUNFIFRoaXMgY2FuIG5vdCBiZSB1c2UgZm9yIG1hYzgwMjExLAorCQkJICp0aGlzIGlzIGRvbmUgaW4gbWFjODAyMTEgY29kZSwKKwkJCSAqaWYgeW91IGRvbmUgaGVyZSBzZWMgREhDUCB3aWxsIGZhaWwKKwkJCSAqc2tiX3RyaW0oc2tiLCBza2ItPmxlbiAtIDQpOworCQkJICovCisKKwkJCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKShza2ItPmRhdGEpOworCQkJZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpOworCisJCQlpZiAoIXN0YXRzLmJfY3JjKSB7CisJCQkJbWVtY3B5KElFRUU4MDIxMV9TS0JfUlhDQihza2IpLCAmcnhfc3RhdHVzLAorCQkJCSAgICAgICBzaXplb2Yocnhfc3RhdHVzKSk7CisKKwkJCQlpZiAoaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSkpCisJCQkJCTsvKlRPRE8qLworCQkJCWVsc2UgeworCQkJCQlpZiAoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSkpCisJCQkJCQk7LypUT0RPKi8KKwkJCQkJZWxzZSB7CisJCQkJCQl1bmljYXN0ID0gdHJ1ZTsKKwkJCQkJCXJ0bHByaXYtPnN0YXRzLnJ4Ynl0ZXN1bmljYXN0ICs9CisJCQkJCQkgICAgc2tiLT5sZW47CisJCQkJCX0KKwkJCQl9CisKKwkJCQlydGxfaXNfc3BlY2lhbF9kYXRhKGh3LCBza2IsIGZhbHNlKTsKKworCQkJCWlmIChpZWVlODAyMTFfaXNfZGF0YShmYykpIHsKKwkJCQkJcnRscHJpdi0+Y2ZnLT5vcHMtPmxlZF9jb250cm9sKGh3LAorCQkJCQkJCSAgICAgICBMRURfQ1RMX1JYKTsKKworCQkJCQlpZiAodW5pY2FzdCkKKwkJCQkJCXJ0bHByaXYtPmxpbmtfaW5mby4KKwkJCQkJCSAgICBudW1fcnhfaW5wZXJpb2QrKzsKKwkJCQl9CisKKwkJCQlpZiAodW5saWtlbHkoIXJ0bF9hY3Rpb25fcHJvYyhodywgc2tiLAorCQkJCSAgICBmYWxzZSkpKSB7CisJCQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJCQkJfSBlbHNlIHsKKwkJCQkJc3RydWN0IHNrX2J1ZmYgKnVza2IgPSBOVUxMOworCQkJCQl1OCAqcGRhdGE7CisJCQkJCXVza2IgPSBkZXZfYWxsb2Nfc2tiKHNrYi0+bGVuICsgMTI4KTsKKwkJCQkJbWVtY3B5KElFRUU4MDIxMV9TS0JfUlhDQih1c2tiKSwKKwkJCQkJCQkmcnhfc3RhdHVzLAorCQkJCQkJCXNpemVvZihyeF9zdGF0dXMpKTsKKwkJCQkJcGRhdGEgPSAodTggKilza2JfcHV0KHVza2IsIHNrYi0+bGVuKTsKKwkJCQkJbWVtY3B5KHBkYXRhLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKKwkJCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKworCQkJCQlpZWVlODAyMTFfcnhfaXJxc2FmZShodywgdXNrYik7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQkJfQorCisJCQlpZiAoKChydGxwcml2LT5saW5rX2luZm8ubnVtX3J4X2lucGVyaW9kICsKKwkJCQlydGxwcml2LT5saW5rX2luZm8ubnVtX3R4X2lucGVyaW9kKSA+IDgpIHx8CisJCQkJKHJ0bHByaXYtPmxpbmtfaW5mby5udW1fcnhfaW5wZXJpb2QgPiAyKSkgeworCQkJCXJ0bF9scHNfbGVhdmUoaHcpOworCQkJfQorCisJCQluZXdfc2tiID0gZGV2X2FsbG9jX3NrYihydGxwY2ktPnJ4YnVmZmVyc2l6ZSk7CisJCQlpZiAodW5saWtlbHkoIW5ld19za2IpKSB7CisJCQkJUlRfVFJBQ0UocnRscHJpdiwgKENPTVBfSU5UUiB8IENPTVBfUkVDViksCisJCQkJCSBEQkdfRE1FU0csCisJCQkJCSAoImNhbid0IGFsbG9jIHNrYiBmb3IgcnhcbiIpKTsKKwkJCQlnb3RvIGRvbmU7CisJCQl9CisJCQlza2IgPSBuZXdfc2tiOworCQkJLypza2ItPmRldiA9IGRldjsgKi8KKworCQkJcnRscGNpLT5yeF9yaW5nW3J4X3F1ZXVlX2lkeF0ucnhfYnVmW3J0bHBjaS0+CisJCQkJCQkJICAgICByeF9yaW5nCisJCQkJCQkJICAgICBbcnhfcXVldWVfaWR4XS4KKwkJCQkJCQkgICAgIGlkeF0gPSBza2I7CisJCQkqKChkbWFfYWRkcl90ICopIHNrYi0+Y2IpID0KKwkJCSAgICBwY2lfbWFwX3NpbmdsZShydGxwY2ktPnBkZXYsIHNrYl90YWlsX3BvaW50ZXIoc2tiKSwKKwkJCQkJICAgcnRscGNpLT5yeGJ1ZmZlcnNpemUsCisJCQkJCSAgIFBDSV9ETUFfRlJPTURFVklDRSk7CisKKwkJfQorZG9uZToKKwkJYnVmZmVyYWRkcmVzcyA9IGNwdV90b19sZTMyKCooKGRtYV9hZGRyX3QgKikgc2tiLT5jYikpOworCQl0bXBfb25lID0gMTsKKwkJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9kZXNjKCh1OCAqKSBwZGVzYywgZmFsc2UsCisJCQkJCSAgICBIV19ERVNDX1JYQlVGRl9BRERSLAorCQkJCQkgICAgKHU4ICopJmJ1ZmZlcmFkZHJlc3MpOworCQlydGxwcml2LT5jZmctPm9wcy0+c2V0X2Rlc2MoKHU4ICopcGRlc2MsIGZhbHNlLCBIV19ERVNDX1JYT1dOLAorCQkJCQkgICAgKHU4ICopJnRtcF9vbmUpOworCQlydGxwcml2LT5jZmctPm9wcy0+c2V0X2Rlc2MoKHU4ICopcGRlc2MsIGZhbHNlLAorCQkJCQkgICAgSFdfREVTQ19SWFBLVF9MRU4sCisJCQkJCSAgICAodTggKikmcnRscGNpLT5yeGJ1ZmZlcnNpemUpOworCisJCWlmIChydGxwY2ktPnJ4X3JpbmdbcnhfcXVldWVfaWR4XS5pZHggPT0KKwkJICAgIHJ0bHBjaS0+cnhyaW5nY291bnQgLSAxKQorCQkJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9kZXNjKCh1OCAqKXBkZXNjLCBmYWxzZSwKKwkJCQkJCSAgICBIV19ERVNDX1JYRVJPLAorCQkJCQkJICAgICh1OCAqKSZ0bXBfb25lKTsKKworCQlydGxwY2ktPnJ4X3JpbmdbcnhfcXVldWVfaWR4XS5pZHggPQorCQkgICAgKHJ0bHBjaS0+cnhfcmluZ1tyeF9xdWV1ZV9pZHhdLmlkeCArIDEpICUKKwkJICAgIHJ0bHBjaS0+cnhyaW5nY291bnQ7CisJfQorCit9CisKK3ZvaWQgX3J0bF9wY2lfdHhfaW50ZXJydXB0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOworCWludCBwcmlvOworCisJZm9yIChwcmlvID0gMDsgcHJpbyA8IFJUTF9QQ0lfTUFYX1RYX1FVRVVFX0NPVU5UOyBwcmlvKyspIHsKKwkJc3RydWN0IHJ0bDgxOTJfdHhfcmluZyAqcmluZyA9ICZydGxwY2ktPnR4X3JpbmdbcHJpb107CisKKwkJd2hpbGUgKHNrYl9xdWV1ZV9sZW4oJnJpbmctPnF1ZXVlKSkgeworCQkJc3RydWN0IHJ0bF90eF9kZXNjICplbnRyeSA9ICZyaW5nLT5kZXNjW3JpbmctPmlkeF07CisJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCQkJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOworCQkJdTggb3duOworCisJCQkvKgorCQkJICpiZWFjb24gcGFja2V0IHdpbGwgb25seSB1c2UgdGhlIGZpcnN0CisJCQkgKmRlc2NyaXB0b3IgZGVmYXV0bHksIGFuZCB0aGUgb3duIG1heSBub3QKKwkJCSAqYmUgY2xlYXJlZCBieSB0aGUgaGFyZHdhcmUsIGFuZAorCQkJICpiZWFjb24gd2lsbCBmcmVlIGluIHByZXBhcmUgYmVhY29uCisJCQkgKi8KKwkJCWlmIChwcmlvID09IEJFQUNPTl9RVUVVRSB8fCBwcmlvID09IFRYQ01EX1FVRVVFIHx8CisJCQkgICAgcHJpbyA9PSBIQ0NBX1FVRVVFKQorCQkJCWJyZWFrOworCisJCQlvd24gPSAodTgpcnRscHJpdi0+Y2ZnLT5vcHMtPmdldF9kZXNjKCh1OCAqKWVudHJ5LAorCQkJCQkJCSAgICAgICB0cnVlLAorCQkJCQkJCSAgICAgICBIV19ERVNDX09XTik7CisKKwkJCWlmIChvd24pCisJCQkJYnJlYWs7CisKKwkJCXNrYiA9IF9fc2tiX2RlcXVldWUoJnJpbmctPnF1ZXVlKTsKKwkJCXBjaV91bm1hcF9zaW5nbGUocnRscGNpLT5wZGV2LAorCQkJCQkgbGUzMl90b19jcHUocnRscHJpdi0+Y2ZnLT5vcHMtPgorCQkJCQkJICAgICBnZXRfZGVzYygodTggKikgZW50cnksCisJCQkJCQkgICAgIHRydWUsCisJCQkJCQkgICAgIEhXX0RFU0NfVFhCVUZGX0FERFIpKSwKKwkJCQkJIHNrYi0+bGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKKworCQkJcmluZy0+aWR4ID0gKHJpbmctPmlkeCArIDEpICUgcmluZy0+ZW50cmllczsKKworCQkJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwkJCWllZWU4MDIxMV90eF9pbmZvX2NsZWFyX3N0YXR1cyhpbmZvKTsKKworCQkJaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRfQUNLOworCQkJLyppbmZvLT5zdGF0dXMucmF0ZXNbMF0uY291bnQgPSAxOyAqLworCisJCQlpZWVlODAyMTFfdHhfc3RhdHVzX2lycXNhZmUoaHcsIHNrYik7CisKKwkJCWlmICgocmluZy0+ZW50cmllcyAtIHNrYl9xdWV1ZV9sZW4oJnJpbmctPnF1ZXVlKSkKKwkJCSAgICA9PSAyICYmIHByaW8gIT0gQkVBQ09OX1FVRVVFKSB7CisJCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19FTUVSRywKKwkJCQkJICgibW9yZSBkZXNjIGxlZnQsIHdha2UgIgorCQkJCQkgICJza2JfcXVldWVAJWQscmluZy0+aWR4ID0gJWQsIgorCQkJCQkgICJza2JfcXVldWVfbGVuID0gMHglZFxuIiwKKwkJCQkJICBwcmlvLCByaW5nLT5pZHgsCisJCQkJCSAgc2tiX3F1ZXVlX2xlbigmcmluZy0+cXVldWUpKSk7CisKKwkJCQlpZWVlODAyMTFfd2FrZV9xdWV1ZShodywKKwkJCQkJCSAgICAgc2tiX2dldF9xdWV1ZV9tYXBwaW5nCisJCQkJCQkgICAgIChza2IpKTsKKwkJCX0KKworCQkJc2tiID0gTlVMTDsKKwkJfQorCX0KK30KKworc3RhdGljIGlycXJldHVybl90IF9ydGxfcGNpX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBkZXZfaWQ7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGNpICpydGxwY2kgPSBydGxfcGNpZGV2KHJ0bF9wY2lwcml2KGh3KSk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgaW50YSA9IDA7CisJdTMyIGludGIgPSAwOworCisJaWYgKHJ0bHBjaS0+aXJxX2VuYWJsZWQgPT0gMCkKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJ0bHByaXYtPmxvY2tzLmlycV90aF9sb2NrLCBmbGFncyk7CisKKwkvKnJlYWQgSVNSOiA0LzhieXRlcyAqLworCXJ0bHByaXYtPmNmZy0+b3BzLT5pbnRlcnJ1cHRfcmVjb2duaXplZChodywgJmludGEsICZpbnRiKTsKKworCS8qU2hhcmVkIElSUSBvciBIVyBkaXNhcHBhcmVkICovCisJaWYgKCFpbnRhIHx8IGludGEgPT0gMHhmZmZmKQorCQlnb3RvIGRvbmU7CisKKwkvKjwxPiBiZWFjb24gcmVsYXRlZCAqLworCWlmIChpbnRhICYgcnRscHJpdi0+Y2ZnLT5tYXBzW1JUTF9JTVJfVEJET0tdKSB7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5UUiwgREJHX1RSQUNFLAorCQkJICgiYmVhY29uIG9rIGludGVycnVwdCFcbiIpKTsKKwl9CisKKwlpZiAodW5saWtlbHkoaW50YSAmIHJ0bHByaXYtPmNmZy0+bWFwc1tSVExfSU1SX1RCREVSXSkpIHsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9JTlRSLCBEQkdfVFJBQ0UsCisJCQkgKCJiZWFjb24gZXJyIGludGVycnVwdCFcbiIpKTsKKwl9CisKKwlpZiAoaW50YSAmIHJ0bHByaXYtPmNmZy0+bWFwc1tSVExfSU1SX0JET0tdKSB7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5UUiwgREJHX1RSQUNFLAorCQkJICgiYmVhY29uIGludGVycnVwdCFcbiIpKTsKKwl9CisKKwlpZiAoaW50YSAmIHJ0bHByaXYtPmNmZy0+bWFwc1tSVExfSU1SX0JjbkludF0pIHsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9JTlRSLCBEQkdfVFJBQ0UsCisJCQkgKCJwcmVwYXJlIGJlYWNvbiBmb3IgaW50ZXJydXB0IVxuIikpOworCQl0YXNrbGV0X3NjaGVkdWxlKCZydGxwcml2LT53b3Jrcy5pcnFfcHJlcGFyZV9iY25fdGFza2xldCk7CisJfQorCisJLyo8Mz4gVHggcmVsYXRlZCAqLworCWlmICh1bmxpa2VseShpbnRhICYgcnRscHJpdi0+Y2ZnLT5tYXBzW1JUTF9JTVJfVFhGT1ZXXSkpCisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfV0FSTklORywgKCJJTVJfVFhGT1ZXIVxuIikpOworCisJaWYgKGludGEgJiBydGxwcml2LT5jZmctPm1hcHNbUlRMX0lNUl9NR05URE9LXSkgeworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0lOVFIsIERCR19UUkFDRSwKKwkJCSAoIk1hbmFnZSBvayBpbnRlcnJ1cHQhXG4iKSk7CisJCV9ydGxfcGNpX3R4X2lzcihodywgTUdOVF9RVUVVRSk7CisJfQorCisJaWYgKGludGEgJiBydGxwcml2LT5jZmctPm1hcHNbUlRMX0lNUl9ISUdIRE9LXSkgeworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0lOVFIsIERCR19UUkFDRSwKKwkJCSAoIkhJR0hfUVVFVUUgb2sgaW50ZXJydXB0IVxuIikpOworCQlfcnRsX3BjaV90eF9pc3IoaHcsIEhJR0hfUVVFVUUpOworCX0KKworCWlmIChpbnRhICYgcnRscHJpdi0+Y2ZnLT5tYXBzW1JUTF9JTVJfQktET0tdKSB7CisJCXJ0bHByaXYtPmxpbmtfaW5mby5udW1fdHhfaW5wZXJpb2QrKzsKKworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0lOVFIsIERCR19UUkFDRSwKKwkJCSAoIkJLIFR4IE9LIGludGVycnVwdCFcbiIpKTsKKwkJX3J0bF9wY2lfdHhfaXNyKGh3LCBCS19RVUVVRSk7CisJfQorCisJaWYgKGludGEgJiBydGxwcml2LT5jZmctPm1hcHNbUlRMX0lNUl9CRURPS10pIHsKKwkJcnRscHJpdi0+bGlua19pbmZvLm51bV90eF9pbnBlcmlvZCsrOworCisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5UUiwgREJHX1RSQUNFLAorCQkJICgiQkUgVFggT0sgaW50ZXJydXB0IVxuIikpOworCQlfcnRsX3BjaV90eF9pc3IoaHcsIEJFX1FVRVVFKTsKKwl9CisKKwlpZiAoaW50YSAmIHJ0bHByaXYtPmNmZy0+bWFwc1tSVExfSU1SX1ZJRE9LXSkgeworCQlydGxwcml2LT5saW5rX2luZm8ubnVtX3R4X2lucGVyaW9kKys7CisKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9JTlRSLCBEQkdfVFJBQ0UsCisJCQkgKCJWSSBUWCBPSyBpbnRlcnJ1cHQhXG4iKSk7CisJCV9ydGxfcGNpX3R4X2lzcihodywgVklfUVVFVUUpOworCX0KKworCWlmIChpbnRhICYgcnRscHJpdi0+Y2ZnLT5tYXBzW1JUTF9JTVJfVk9ET0tdKSB7CisJCXJ0bHByaXYtPmxpbmtfaW5mby5udW1fdHhfaW5wZXJpb2QrKzsKKworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0lOVFIsIERCR19UUkFDRSwKKwkJCSAoIlZvIFRYIE9LIGludGVycnVwdCFcbiIpKTsKKwkJX3J0bF9wY2lfdHhfaXNyKGh3LCBWT19RVUVVRSk7CisJfQorCisJLyo8Mj4gUnggcmVsYXRlZCAqLworCWlmIChpbnRhICYgcnRscHJpdi0+Y2ZnLT5tYXBzW1JUTF9JTVJfUk9LXSkgeworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0lOVFIsIERCR19UUkFDRSwgKCJSeCBvayBpbnRlcnJ1cHQhXG4iKSk7CisJCXRhc2tsZXRfc2NoZWR1bGUoJnJ0bHByaXYtPndvcmtzLmlycV90YXNrbGV0KTsKKwl9CisKKwlpZiAodW5saWtlbHkoaW50YSAmIHJ0bHByaXYtPmNmZy0+bWFwc1tSVExfSU1SX1JEVV0pKSB7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfV0FSTklORywKKwkJCSAoInJ4IGRlc2NyaXB0b3IgdW5hdmFpbGFibGUhXG4iKSk7CisJCXRhc2tsZXRfc2NoZWR1bGUoJnJ0bHByaXYtPndvcmtzLmlycV90YXNrbGV0KTsKKwl9CisKKwlpZiAodW5saWtlbHkoaW50YSAmIHJ0bHByaXYtPmNmZy0+bWFwc1tSVExfSU1SX1JYRk9WV10pKSB7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfV0FSTklORywgKCJyeCBvdmVyZmxvdyAhXG4iKSk7CisJCXRhc2tsZXRfc2NoZWR1bGUoJnJ0bHByaXYtPndvcmtzLmlycV90YXNrbGV0KTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGxwcml2LT5sb2Nrcy5pcnFfdGhfbG9jaywgZmxhZ3MpOworCXJldHVybiBJUlFfSEFORExFRDsKKworZG9uZToKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGxwcml2LT5sb2Nrcy5pcnFfdGhfbG9jaywgZmxhZ3MpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHZvaWQgX3J0bF9wY2lfaXJxX3Rhc2tsZXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJX3J0bF9wY2lfcnhfaW50ZXJydXB0KGh3KTsKK30KKworc3RhdGljIHZvaWQgX3J0bF9wY2lfcHJlcGFyZV9iY25fdGFza2xldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9wY2kgKnJ0bHBjaSA9IHJ0bF9wY2lkZXYocnRsX3BjaXByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOworCXN0cnVjdCBydGw4MTkyX3R4X3JpbmcgKnJpbmcgPSAmcnRscGNpLT50eF9yaW5nW0JFQUNPTl9RVUVVRV07CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IE5VTEw7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gTlVMTDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqcHNrYiA9IE5VTEw7CisJc3RydWN0IHJ0bF90eF9kZXNjICpwZGVzYyA9IE5VTEw7CisJdW5zaWduZWQgaW50IHF1ZXVlX2luZGV4OworCXU4IHRlbXBfb25lID0gMTsKKworCXJpbmcgPSAmcnRscGNpLT50eF9yaW5nW0JFQUNPTl9RVUVVRV07CisJcHNrYiA9IF9fc2tiX2RlcXVldWUoJnJpbmctPnF1ZXVlKTsKKwlpZiAocHNrYikKKwkJa2ZyZWVfc2tiKHBza2IpOworCisJLypOQjogdGhlIGJlYWNvbiBkYXRhIGJ1ZmZlciBtdXN0IGJlIDMyLWJpdCBhbGlnbmVkLiAqLworCXBza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldChodywgbWFjLT52aWYpOworCWlmIChwc2tiID09IE5VTEwpCisJCXJldHVybjsKKwloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikocHNrYi0+ZGF0YSk7CisJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IocHNrYik7CisKKwlxdWV1ZV9pbmRleCA9IEJFQUNPTl9RVUVVRTsKKworCXBkZXNjID0gJnJpbmctPmRlc2NbMF07CisJcnRscHJpdi0+Y2ZnLT5vcHMtPmZpbGxfdHhfZGVzYyhodywgaGRyLCAodTggKikgcGRlc2MsCisJCQkJCWluZm8sIHBza2IsIHF1ZXVlX2luZGV4KTsKKworCV9fc2tiX3F1ZXVlX3RhaWwoJnJpbmctPnF1ZXVlLCBwc2tiKTsKKworCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfZGVzYygodTggKikgcGRlc2MsIHRydWUsIEhXX0RFU0NfT1dOLAorCQkJCSAgICAodTggKikmdGVtcF9vbmUpOworCisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBfcnRsX3BjaV9pbml0X3RyeF92YXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wY2kgKnJ0bHBjaSA9IHJ0bF9wY2lkZXYocnRsX3BjaXByaXYoaHcpKTsKKwl1OCBpOworCisJZm9yIChpID0gMDsgaSA8IFJUTF9QQ0lfTUFYX1RYX1FVRVVFX0NPVU5UOyBpKyspCisJCXJ0bHBjaS0+dHhyaW5nY291bnRbaV0gPSBSVF9UWERFU0NfTlVNOworCisJLyoKKwkgKndlIGp1c3QgYWxsb2MgMiBkZXNjIGZvciBiZWFjb24gcXVldWUsCisJICpiZWNhdXNlIHdlIGp1c3QgbmVlZCBmaXJzdCBkZXNjIGluIGh3IGJlYWNvbi4KKwkgKi8KKwlydGxwY2ktPnR4cmluZ2NvdW50W0JFQUNPTl9RVUVVRV0gPSAyOworCisJLyoKKwkgKkJFIHF1ZXVlIG5lZWQgbW9yZSBkZXNjcmlwdG9yIGZvciBwZXJmb3JtYW5jZQorCSAqY29uc2lkZXJhdGlvbiBvciwgTm8gbW9yZSB0eCBkZXNjIHdpbGwgaGFwcGVuLAorCSAqYW5kIG1heSBjYXVzZSBtYWM4MDIxMSBtZW0gbGVha2FnZS4KKwkgKi8KKwlydGxwY2ktPnR4cmluZ2NvdW50W0JFX1FVRVVFXSA9IFJUX1RYREVTQ19OVU1fQkVfUVVFVUU7CisKKwlydGxwY2ktPnJ4YnVmZmVyc2l6ZSA9IDkxMDA7CS8qMjA0OC8xMDI0OyAqLworCXJ0bHBjaS0+cnhyaW5nY291bnQgPSBSVExfUENJX01BWF9SWF9DT1VOVDsJLyo2NDsgKi8KK30KKworc3RhdGljIHZvaWQgX3J0bF9wY2lfaW5pdF9zdHJ1Y3Qoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCXN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOworCXN0cnVjdCBydGxfcGNpICpydGxwY2kgPSBydGxfcGNpZGV2KHJ0bF9wY2lwcml2KGh3KSk7CisJc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCA9IHJ0bF9oYWwocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX3BzX2N0bCAqcHBzYyA9IHJ0bF9wc2MocnRsX3ByaXYoaHcpKTsKKworCXJ0bHBjaS0+dXBfZmlyc3RfdGltZSA9IHRydWU7CisJcnRscGNpLT5iZWluZ19pbml0X2FkYXB0ZXIgPSBmYWxzZTsKKworCXJ0bGhhbC0+aHcgPSBodzsKKwlydGxwY2ktPnBkZXYgPSBwZGV2OworCisJcHBzYy0+Yl9pbmFjdGl2ZXBzID0gZmFsc2U7CisJcHBzYy0+Yl9sZWlzdXJlX3BzID0gdHJ1ZTsKKwlwcHNjLT5iX2Z3Y3RybF9scHMgPSB0cnVlOworCXBwc2MtPmJfcmVnX2Z3Y3RybF9scHMgPSAzOworCXBwc2MtPnJlZ19tYXhfbHBzX2F3YWtlaW50dmwgPSA1OworCisJaWYgKHBwc2MtPmJfcmVnX2Z3Y3RybF9scHMgPT0gMSkKKwkJcHBzYy0+ZndjdHJsX3BzbW9kZSA9IEZXX1BTX01JTl9NT0RFOworCWVsc2UgaWYgKHBwc2MtPmJfcmVnX2Z3Y3RybF9scHMgPT0gMikKKwkJcHBzYy0+ZndjdHJsX3BzbW9kZSA9IEZXX1BTX01BWF9NT0RFOworCWVsc2UgaWYgKHBwc2MtPmJfcmVnX2Z3Y3RybF9scHMgPT0gMykKKwkJcHBzYy0+ZndjdHJsX3BzbW9kZSA9IEZXX1BTX0RUSU1fTU9ERTsKKworCS8qVHgvUnggcmVsYXRlZCB2YXIgKi8KKwlfcnRsX3BjaV9pbml0X3RyeF92YXIoaHcpOworCisJIC8qSUJTUyovIG1hYy0+YmVhY29uX2ludGVydmFsID0gMTAwOworCisJIC8qQU1QRFUqLyBtYWMtPm1pbl9zcGFjZV9jZmcgPSAwOworCW1hYy0+bWF4X21zc19kZW5zaXR5ID0gMDsKKwkvKnNldCBzYW5lIEFNUERVIGRlZmF1bHRzICovCisJbWFjLT5jdXJyZW50X2FtcGR1X2RlbnNpdHkgPSA3OworCW1hYy0+Y3VycmVudF9hbXBkdV9mYWN0b3IgPSAzOworCisJIC8qUU9TKi8gcnRscGNpLT5hY21fbWV0aG9kID0gZUFjbVdheTJfU1c7CisKKwkvKnRhc2sgKi8KKwl0YXNrbGV0X2luaXQoJnJ0bHByaXYtPndvcmtzLmlycV90YXNrbGV0LAorCQkgICAgICh2b2lkICgqKSh1bnNpZ25lZCBsb25nKSlfcnRsX3BjaV9pcnFfdGFza2xldCwKKwkJICAgICAodW5zaWduZWQgbG9uZylodyk7CisJdGFza2xldF9pbml0KCZydGxwcml2LT53b3Jrcy5pcnFfcHJlcGFyZV9iY25fdGFza2xldCwKKwkJICAgICAodm9pZCAoKikodW5zaWduZWQgbG9uZykpX3J0bF9wY2lfcHJlcGFyZV9iY25fdGFza2xldCwKKwkJICAgICAodW5zaWduZWQgbG9uZylodyk7Cit9CisKK3N0YXRpYyBpbnQgX3J0bF9wY2lfaW5pdF90eF9yaW5nKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSB1bnNpZ25lZCBpbnQgcHJpbywgdW5zaWduZWQgaW50IGVudHJpZXMpCit7CisJc3RydWN0IHJ0bF9wY2kgKnJ0bHBjaSA9IHJ0bF9wY2lkZXYocnRsX3BjaXByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF90eF9kZXNjICpyaW5nOworCWRtYV9hZGRyX3QgZG1hOworCXUzMiBuZXh0ZGVzY2FkZHJlc3M7CisJaW50IGk7CisKKwlyaW5nID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocnRscGNpLT5wZGV2LAorCQkJCSAgICBzaXplb2YoKnJpbmcpICogZW50cmllcywgJmRtYSk7CisKKwlpZiAoIXJpbmcgfHwgKHVuc2lnbmVkIGxvbmcpcmluZyAmIDB4RkYpIHsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19FTUVSRywKKwkJCSAoIkNhbm5vdCBhbGxvY2F0ZSBUWCByaW5nIChwcmlvID0gJWQpXG4iLCBwcmlvKSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW1lbXNldChyaW5nLCAwLCBzaXplb2YoKnJpbmcpICogZW50cmllcyk7CisJcnRscGNpLT50eF9yaW5nW3ByaW9dLmRlc2MgPSByaW5nOworCXJ0bHBjaS0+dHhfcmluZ1twcmlvXS5kbWEgPSBkbWE7CisJcnRscGNpLT50eF9yaW5nW3ByaW9dLmlkeCA9IDA7CisJcnRscGNpLT50eF9yaW5nW3ByaW9dLmVudHJpZXMgPSBlbnRyaWVzOworCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnJ0bHBjaS0+dHhfcmluZ1twcmlvXS5xdWV1ZSk7CisKKwlSVF9UUkFDRShydGxwcml2LCBDT01QX0lOSVQsIERCR19MT1VELAorCQkgKCJxdWV1ZTolZCwgcmluZ19hZGRyOiVwXG4iLCBwcmlvLCByaW5nKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZW50cmllczsgaSsrKSB7CisJCW5leHRkZXNjYWRkcmVzcyA9IGNwdV90b19sZTMyKCh1MzIpIGRtYSArCisJCQkJCSAgICAgICgoaSArIDEpICUgZW50cmllcykgKgorCQkJCQkgICAgICBzaXplb2YoKnJpbmcpKTsKKworCQlydGxwcml2LT5jZmctPm9wcy0+c2V0X2Rlc2MoKHU4ICopJihyaW5nW2ldKSwKKwkJCQkJICAgIHRydWUsIEhXX0RFU0NfVFhfTkVYVERFU0NfQUREUiwKKwkJCQkJICAgICh1OCAqKSZuZXh0ZGVzY2FkZHJlc3MpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9ydGxfcGNpX2luaXRfcnhfcmluZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3J4X2Rlc2MgKmVudHJ5ID0gTlVMTDsKKwlpbnQgaSwgcnhfcXVldWVfaWR4OworCXU4IHRtcF9vbmUgPSAxOworCisJLyoKKwkgKnJ4X3F1ZXVlX2lkeCAwOlJYX01QRFVfUVVFVUUKKwkgKnJ4X3F1ZXVlX2lkeCAxOlJYX0NNRF9RVUVVRQorCSAqLworCWZvciAocnhfcXVldWVfaWR4ID0gMDsgcnhfcXVldWVfaWR4IDwgUlRMX1BDSV9NQVhfUlhfUVVFVUU7CisJICAgICByeF9xdWV1ZV9pZHgrKykgeworCQlydGxwY2ktPnJ4X3JpbmdbcnhfcXVldWVfaWR4XS5kZXNjID0KKwkJICAgIHBjaV9hbGxvY19jb25zaXN0ZW50KHJ0bHBjaS0+cGRldiwKKwkJCQkJIHNpemVvZigqcnRscGNpLT5yeF9yaW5nW3J4X3F1ZXVlX2lkeF0uCisJCQkJCQlkZXNjKSAqIHJ0bHBjaS0+cnhyaW5nY291bnQsCisJCQkJCSAmcnRscGNpLT5yeF9yaW5nW3J4X3F1ZXVlX2lkeF0uZG1hKTsKKworCQlpZiAoIXJ0bHBjaS0+cnhfcmluZ1tyeF9xdWV1ZV9pZHhdLmRlc2MgfHwKKwkJICAgICh1bnNpZ25lZCBsb25nKXJ0bHBjaS0+cnhfcmluZ1tyeF9xdWV1ZV9pZHhdLmRlc2MgJiAweEZGKSB7CisJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX0VNRVJHLAorCQkJCSAoIkNhbm5vdCBhbGxvY2F0ZSBSWCByaW5nXG4iKSk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCisJCW1lbXNldChydGxwY2ktPnJ4X3JpbmdbcnhfcXVldWVfaWR4XS5kZXNjLCAwLAorCQkgICAgICAgc2l6ZW9mKCpydGxwY2ktPnJ4X3JpbmdbcnhfcXVldWVfaWR4XS5kZXNjKSAqCisJCSAgICAgICBydGxwY2ktPnJ4cmluZ2NvdW50KTsKKworCQlydGxwY2ktPnJ4X3JpbmdbcnhfcXVldWVfaWR4XS5pZHggPSAwOworCisJCWZvciAoaSA9IDA7IGkgPCBydGxwY2ktPnJ4cmluZ2NvdW50OyBpKyspIHsKKwkJCXN0cnVjdCBza19idWZmICpza2IgPQorCQkJICAgIGRldl9hbGxvY19za2IocnRscGNpLT5yeGJ1ZmZlcnNpemUpOworCQkJdTMyIGJ1ZmZlcmFkZHJlc3M7CisJCQllbnRyeSA9ICZydGxwY2ktPnJ4X3JpbmdbcnhfcXVldWVfaWR4XS5kZXNjW2ldOworCQkJaWYgKCFza2IpCisJCQkJcmV0dXJuIDA7CisKKwkJCS8qc2tiLT5kZXYgPSBkZXY7ICovCisKKwkJCXJ0bHBjaS0+cnhfcmluZ1tyeF9xdWV1ZV9pZHhdLnJ4X2J1ZltpXSA9IHNrYjsKKworCQkJLyoKKwkJCSAqanVzdCBzZXQgc2tiLT5jYiB0byBtYXBwaW5nIGFkZHIKKwkJCSAqZm9yIHBjaV91bm1hcF9zaW5nbGUgdXNlCisJCQkgKi8KKwkJCSooKGRtYV9hZGRyX3QgKikgc2tiLT5jYikgPQorCQkJICAgIHBjaV9tYXBfc2luZ2xlKHJ0bHBjaS0+cGRldiwgc2tiX3RhaWxfcG9pbnRlcihza2IpLAorCQkJCQkgICBydGxwY2ktPnJ4YnVmZmVyc2l6ZSwKKwkJCQkJICAgUENJX0RNQV9GUk9NREVWSUNFKTsKKworCQkJYnVmZmVyYWRkcmVzcyA9IGNwdV90b19sZTMyKCooKGRtYV9hZGRyX3QgKilza2ItPmNiKSk7CisJCQlydGxwcml2LT5jZmctPm9wcy0+c2V0X2Rlc2MoKHU4ICopZW50cnksIGZhbHNlLAorCQkJCQkJICAgIEhXX0RFU0NfUlhCVUZGX0FERFIsCisJCQkJCQkgICAgKHU4ICopJmJ1ZmZlcmFkZHJlc3MpOworCQkJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9kZXNjKCh1OCAqKWVudHJ5LCBmYWxzZSwKKwkJCQkJCSAgICBIV19ERVNDX1JYUEtUX0xFTiwKKwkJCQkJCSAgICAodTggKikmcnRscGNpLT4KKwkJCQkJCSAgICByeGJ1ZmZlcnNpemUpOworCQkJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9kZXNjKCh1OCAqKSBlbnRyeSwgZmFsc2UsCisJCQkJCQkgICAgSFdfREVTQ19SWE9XTiwKKwkJCQkJCSAgICAodTggKikmdG1wX29uZSk7CisJCX0KKworCQlydGxwcml2LT5jZmctPm9wcy0+c2V0X2Rlc2MoKHU4ICopIGVudHJ5LCBmYWxzZSwKKwkJCQkJICAgIEhXX0RFU0NfUlhFUk8sICh1OCAqKSZ0bXBfb25lKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9ydGxfcGNpX2ZyZWVfdHhfcmluZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJdW5zaWduZWQgaW50IHByaW8pCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGNpICpydGxwY2kgPSBydGxfcGNpZGV2KHJ0bF9wY2lwcml2KGh3KSk7CisJc3RydWN0IHJ0bDgxOTJfdHhfcmluZyAqcmluZyA9ICZydGxwY2ktPnR4X3JpbmdbcHJpb107CisKKwl3aGlsZSAoc2tiX3F1ZXVlX2xlbigmcmluZy0+cXVldWUpKSB7CisJCXN0cnVjdCBydGxfdHhfZGVzYyAqZW50cnkgPSAmcmluZy0+ZGVzY1tyaW5nLT5pZHhdOworCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gX19za2JfZGVxdWV1ZSgmcmluZy0+cXVldWUpOworCisJCXBjaV91bm1hcF9zaW5nbGUocnRscGNpLT5wZGV2LAorCQkJCSBsZTMyX3RvX2NwdShydGxwcml2LT5jZmctPgorCQkJCQkgICAgIG9wcy0+Z2V0X2Rlc2MoKHU4ICopIGVudHJ5LCB0cnVlLAorCQkJCQkJICAgSFdfREVTQ19UWEJVRkZfQUREUikpLAorCQkJCSBza2ItPmxlbiwgUENJX0RNQV9UT0RFVklDRSk7CisJCWtmcmVlX3NrYihza2IpOworCQlyaW5nLT5pZHggPSAocmluZy0+aWR4ICsgMSkgJSByaW5nLT5lbnRyaWVzOworCX0KKworCXBjaV9mcmVlX2NvbnNpc3RlbnQocnRscGNpLT5wZGV2LAorCQkJICAgIHNpemVvZigqcmluZy0+ZGVzYykgKiByaW5nLT5lbnRyaWVzLAorCQkJICAgIHJpbmctPmRlc2MsIHJpbmctPmRtYSk7CisJcmluZy0+ZGVzYyA9IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIF9ydGxfcGNpX2ZyZWVfcnhfcmluZyhzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpKQoreworCWludCBpLCByeF9xdWV1ZV9pZHg7CisKKwkvKnJ4X3F1ZXVlX2lkeCAwOlJYX01QRFVfUVVFVUUgKi8KKwkvKnJ4X3F1ZXVlX2lkeCAxOlJYX0NNRF9RVUVVRSAqLworCWZvciAocnhfcXVldWVfaWR4ID0gMDsgcnhfcXVldWVfaWR4IDwgUlRMX1BDSV9NQVhfUlhfUVVFVUU7CisJICAgICByeF9xdWV1ZV9pZHgrKykgeworCQlmb3IgKGkgPSAwOyBpIDwgcnRscGNpLT5yeHJpbmdjb3VudDsgaSsrKSB7CisJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0KKwkJCSAgICBydGxwY2ktPnJ4X3JpbmdbcnhfcXVldWVfaWR4XS5yeF9idWZbaV07CisJCQlpZiAoIXNrYikKKwkJCQljb250aW51ZTsKKworCQkJcGNpX3VubWFwX3NpbmdsZShydGxwY2ktPnBkZXYsCisJCQkJCSAqKChkbWFfYWRkcl90ICopIHNrYi0+Y2IpLAorCQkJCQkgcnRscGNpLT5yeGJ1ZmZlcnNpemUsCisJCQkJCSBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJa2ZyZWVfc2tiKHNrYik7CisJCX0KKworCQlwY2lfZnJlZV9jb25zaXN0ZW50KHJ0bHBjaS0+cGRldiwKKwkJCQkgICAgc2l6ZW9mKCpydGxwY2ktPnJ4X3JpbmdbcnhfcXVldWVfaWR4XS4KKwkJCQkJICAgZGVzYykgKiBydGxwY2ktPnJ4cmluZ2NvdW50LAorCQkJCSAgICBydGxwY2ktPnJ4X3JpbmdbcnhfcXVldWVfaWR4XS5kZXNjLAorCQkJCSAgICBydGxwY2ktPnJ4X3JpbmdbcnhfcXVldWVfaWR4XS5kbWEpOworCQlydGxwY2ktPnJ4X3JpbmdbcnhfcXVldWVfaWR4XS5kZXNjID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgX3J0bF9wY2lfaW5pdF90cnhfcmluZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOworCWludCByZXQ7CisJaW50IGk7CisKKwlyZXQgPSBfcnRsX3BjaV9pbml0X3J4X3JpbmcoaHcpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgUlRMX1BDSV9NQVhfVFhfUVVFVUVfQ09VTlQ7IGkrKykgeworCQlyZXQgPSBfcnRsX3BjaV9pbml0X3R4X3JpbmcoaHcsIGksCisJCQkJIHJ0bHBjaS0+dHhyaW5nY291bnRbaV0pOworCQlpZiAocmV0KQorCQkJZ290byBlcnJfZnJlZV9yaW5nczsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX2ZyZWVfcmluZ3M6CisJX3J0bF9wY2lfZnJlZV9yeF9yaW5nKHJ0bHBjaSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgUlRMX1BDSV9NQVhfVFhfUVVFVUVfQ09VTlQ7IGkrKykKKwkJaWYgKHJ0bHBjaS0+dHhfcmluZ1tpXS5kZXNjKQorCQkJX3J0bF9wY2lfZnJlZV90eF9yaW5nKGh3LCBpKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IF9ydGxfcGNpX2RlaW5pdF90cnhfcmluZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOworCXUzMiBpOworCisJLypmcmVlIHJ4IHJpbmdzICovCisJX3J0bF9wY2lfZnJlZV9yeF9yaW5nKHJ0bHBjaSk7CisKKwkvKmZyZWUgdHggcmluZ3MgKi8KKwlmb3IgKGkgPSAwOyBpIDwgUlRMX1BDSV9NQVhfVFhfUVVFVUVfQ09VTlQ7IGkrKykKKwkJX3J0bF9wY2lfZnJlZV90eF9yaW5nKGh3LCBpKTsKKworCXJldHVybiAwOworfQorCitpbnQgcnRsX3BjaV9yZXNldF90cnhfcmluZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9wY2kgKnJ0bHBjaSA9IHJ0bF9wY2lkZXYocnRsX3BjaXByaXYoaHcpKTsKKwlpbnQgaSwgcnhfcXVldWVfaWR4OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTggdG1wX29uZSA9IDE7CisKKwkvKnJ4X3F1ZXVlX2lkeCAwOlJYX01QRFVfUVVFVUUgKi8KKwkvKnJ4X3F1ZXVlX2lkeCAxOlJYX0NNRF9RVUVVRSAqLworCWZvciAocnhfcXVldWVfaWR4ID0gMDsgcnhfcXVldWVfaWR4IDwgUlRMX1BDSV9NQVhfUlhfUVVFVUU7CisJICAgICByeF9xdWV1ZV9pZHgrKykgeworCQkvKgorCQkgKmZvcmNlIHRoZSByeF9yaW5nW1JYX01QRFVfUVVFVUUvCisJCSAqUlhfQ01EX1FVRVVFXS5pZHggdG8gdGhlIGZpcnN0IG9uZQorCQkgKi8KKwkJaWYgKHJ0bHBjaS0+cnhfcmluZ1tyeF9xdWV1ZV9pZHhdLmRlc2MpIHsKKwkJCXN0cnVjdCBydGxfcnhfZGVzYyAqZW50cnkgPSBOVUxMOworCisJCQlmb3IgKGkgPSAwOyBpIDwgcnRscGNpLT5yeHJpbmdjb3VudDsgaSsrKSB7CisJCQkJZW50cnkgPSAmcnRscGNpLT5yeF9yaW5nW3J4X3F1ZXVlX2lkeF0uZGVzY1tpXTsKKwkJCQlydGxwcml2LT5jZmctPm9wcy0+c2V0X2Rlc2MoKHU4ICopIGVudHJ5LAorCQkJCQkJCSAgICBmYWxzZSwKKwkJCQkJCQkgICAgSFdfREVTQ19SWE9XTiwKKwkJCQkJCQkgICAgKHU4ICopJnRtcF9vbmUpOworCQkJfQorCQkJcnRscGNpLT5yeF9yaW5nW3J4X3F1ZXVlX2lkeF0uaWR4ID0gMDsKKwkJfQorCX0KKworCS8qCisJICphZnRlciByZXNldCwgcmVsZWFzZSBwcmV2aW91cyBwZW5kaW5nIHBhY2tldCwKKwkgKmFuZCBmb3JjZSB0aGUgIHR4IGlkeCB0byB0aGUgZmlyc3Qgb25lCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJ0bHByaXYtPmxvY2tzLmlycV90aF9sb2NrLCBmbGFncyk7CisJZm9yIChpID0gMDsgaSA8IFJUTF9QQ0lfTUFYX1RYX1FVRVVFX0NPVU5UOyBpKyspIHsKKwkJaWYgKHJ0bHBjaS0+dHhfcmluZ1tpXS5kZXNjKSB7CisJCQlzdHJ1Y3QgcnRsODE5Ml90eF9yaW5nICpyaW5nID0gJnJ0bHBjaS0+dHhfcmluZ1tpXTsKKworCQkJd2hpbGUgKHNrYl9xdWV1ZV9sZW4oJnJpbmctPnF1ZXVlKSkgeworCQkJCXN0cnVjdCBydGxfdHhfZGVzYyAqZW50cnkgPQorCQkJCSAgICAmcmluZy0+ZGVzY1tyaW5nLT5pZHhdOworCQkJCXN0cnVjdCBza19idWZmICpza2IgPQorCQkJCSAgICBfX3NrYl9kZXF1ZXVlKCZyaW5nLT5xdWV1ZSk7CisKKwkJCQlwY2lfdW5tYXBfc2luZ2xlKHJ0bHBjaS0+cGRldiwKKwkJCQkJCSBsZTMyX3RvX2NwdShydGxwcml2LT5jZmctPm9wcy0+CisJCQkJCQkJIGdldF9kZXNjKCh1OCAqKQorCQkJCQkJCSBlbnRyeSwKKwkJCQkJCQkgdHJ1ZSwKKwkJCQkJCQkgSFdfREVTQ19UWEJVRkZfQUREUikpLAorCQkJCQkJIHNrYi0+bGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJCQlrZnJlZV9za2Ioc2tiKTsKKwkJCQlyaW5nLT5pZHggPSAocmluZy0+aWR4ICsgMSkgJSByaW5nLT5lbnRyaWVzOworCQkJfQorCQkJcmluZy0+aWR4ID0gMDsKKwkJfQorCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0bHByaXYtPmxvY2tzLmlycV90aF9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKwordW5zaWduZWQgaW50IF9ydGxfbWFjX3RvX2h3cXVldWUodTE2IGZjLAorCQl1bnNpZ25lZCBpbnQgbWFjODAyMTFfcXVldWVfaW5kZXgpCit7CisJdW5zaWduZWQgaW50IGh3X3F1ZXVlX2luZGV4OworCisJaWYgKHVubGlrZWx5KGllZWU4MDIxMV9pc19iZWFjb24oZmMpKSkgeworCQlod19xdWV1ZV9pbmRleCA9IEJFQUNPTl9RVUVVRTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGllZWU4MDIxMV9pc19tZ210KGZjKSkgeworCQlod19xdWV1ZV9pbmRleCA9IE1HTlRfUVVFVUU7CisJCWdvdG8gb3V0OworCX0KKworCXN3aXRjaCAobWFjODAyMTFfcXVldWVfaW5kZXgpIHsKKwljYXNlIDA6CisJCWh3X3F1ZXVlX2luZGV4ID0gVk9fUVVFVUU7CisJCWJyZWFrOworCWNhc2UgMToKKwkJaHdfcXVldWVfaW5kZXggPSBWSV9RVUVVRTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlod19xdWV1ZV9pbmRleCA9IEJFX1FVRVVFOzsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlod19xdWV1ZV9pbmRleCA9IEJLX1FVRVVFOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlod19xdWV1ZV9pbmRleCA9IEJFX1FVRVVFOworCQlSVF9BU1NFUlQoZmFsc2UsICgiUVNMVF9CRSBxdWV1ZSwgc2tiX3F1ZXVlOiVkXG4iLAorCQkJCSAgbWFjODAyMTFfcXVldWVfaW5kZXgpKTsKKwkJYnJlYWs7CisJfQorCitvdXQ6CisJcmV0dXJuIGh3X3F1ZXVlX2luZGV4OworfQorCitpbnQgcnRsX3BjaV90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJc3RydWN0IHJ0bDgxOTJfdHhfcmluZyAqcmluZzsKKwlzdHJ1Y3QgcnRsX3R4X2Rlc2MgKnBkZXNjOworCXU4IGlkeDsKKwl1bnNpZ25lZCBpbnQgcXVldWVfaW5kZXgsIGh3X3F1ZXVlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKShza2ItPmRhdGEpOworCXUxNiBmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCk7CisJdTggKnBkYV9hZGRyID0gaGRyLT5hZGRyMTsKKwlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOworCS8qc3NuICovCisJdTggKnFjID0gTlVMTDsKKwl1OCB0aWQgPSAwOworCXUxNiBzZXFfbnVtYmVyID0gMDsKKwl1OCBvd247CisJdTggdGVtcF9vbmUgPSAxOworCisJaWYgKGllZWU4MDIxMV9pc19tZ210KGZjKSkKKwkJcnRsX3R4X21nbXRfcHJvYyhodywgc2tiKTsKKwlydGxfYWN0aW9uX3Byb2MoaHcsIHNrYiwgdHJ1ZSk7CisKKwlxdWV1ZV9pbmRleCA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpOworCWh3X3F1ZXVlID0gX3J0bF9tYWNfdG9faHdxdWV1ZShmYywgcXVldWVfaW5kZXgpOworCisJaWYgKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKHBkYV9hZGRyKSkKKwkJcnRscHJpdi0+c3RhdHMudHhieXRlc211bHRpY2FzdCArPSBza2ItPmxlbjsKKwllbHNlIGlmIChpc19icm9hZGNhc3RfZXRoZXJfYWRkcihwZGFfYWRkcikpCisJCXJ0bHByaXYtPnN0YXRzLnR4Ynl0ZXNicm9hZGNhc3QgKz0gc2tiLT5sZW47CisJZWxzZQorCQlydGxwcml2LT5zdGF0cy50eGJ5dGVzdW5pY2FzdCArPSBza2ItPmxlbjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZydGxwcml2LT5sb2Nrcy5pcnFfdGhfbG9jaywgZmxhZ3MpOworCisJcmluZyA9ICZydGxwY2ktPnR4X3JpbmdbaHdfcXVldWVdOworCWlmIChod19xdWV1ZSAhPSBCRUFDT05fUVVFVUUpCisJCWlkeCA9IChyaW5nLT5pZHggKyBza2JfcXVldWVfbGVuKCZyaW5nLT5xdWV1ZSkpICUKKwkJCQlyaW5nLT5lbnRyaWVzOworCWVsc2UKKwkJaWR4ID0gMDsKKworCXBkZXNjID0gJnJpbmctPmRlc2NbaWR4XTsKKwlvd24gPSAodTgpIHJ0bHByaXYtPmNmZy0+b3BzLT5nZXRfZGVzYygodTggKikgcGRlc2MsCisJCQl0cnVlLCBIV19ERVNDX09XTik7CisKKwlpZiAoKG93biA9PSAxKSAmJiAoaHdfcXVldWUgIT0gQkVBQ09OX1FVRVVFKSkgeworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX1dBUk5JTkcsCisJCQkgKCJObyBtb3JlIFRYIGRlc2NAJWQsIHJpbmctPmlkeCA9ICVkLCIKKwkJCSAgImlkeCA9ICVkLCBza2JfcXVldWVfbGVuID0gMHglZFxuIiwKKwkJCSAgaHdfcXVldWUsIHJpbmctPmlkeCwgaWR4LAorCQkJICBza2JfcXVldWVfbGVuKCZyaW5nLT5xdWV1ZSkpKTsKKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGxwcml2LT5sb2Nrcy5pcnFfdGhfbG9jaywgZmxhZ3MpOworCQlyZXR1cm4gc2tiLT5sZW47CisJfQorCisJLyoKKwkgKmlmKGllZWU4MDIxMV9pc19udWxsZnVuYyhmYykpIHsKKwkgKiAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0bHByaXYtPmxvY2tzLmlycV90aF9sb2NrLCBmbGFncyk7CisJICogICAgICByZXR1cm4gMTsKKwkgKn0KKwkgKi8KKworCWlmIChpZWVlODAyMTFfaXNfZGF0YV9xb3MoZmMpKSB7CisJCXFjID0gaWVlZTgwMjExX2dldF9xb3NfY3RsKGhkcik7CisJCXRpZCA9IHFjWzBdICYgSUVFRTgwMjExX1FPU19DVExfVElEX01BU0s7CisKKwkJc2VxX251bWJlciA9IG1hYy0+dGlkc1t0aWRdLnNlcV9udW1iZXI7CisJCXNlcV9udW1iZXIgJj0gSUVFRTgwMjExX1NDVExfU0VROworCQkvKgorCQkgKmhkci0+c2VxX2N0cmwgPSBoZHItPnNlcV9jdHJsICYKKwkJICpjcHVfdG9fbGUxNihJRUVFODAyMTFfU0NUTF9GUkFHKTsKKwkJICpoZHItPnNlcV9jdHJsIHw9IGNwdV90b19sZTE2KHNlcV9udW1iZXIpOworCQkgKi8KKworCQlzZXFfbnVtYmVyICs9IDE7CisJfQorCisJaWYgKGllZWU4MDIxMV9pc19kYXRhKGZjKSkKKwkJcnRscHJpdi0+Y2ZnLT5vcHMtPmxlZF9jb250cm9sKGh3LCBMRURfQ1RMX1RYKTsKKworCXJ0bHByaXYtPmNmZy0+b3BzLT5maWxsX3R4X2Rlc2MoaHcsIGhkciwgKHU4ICopIHBkZXNjLAorCQkJCQlpbmZvLCBza2IsIGh3X3F1ZXVlKTsKKworCV9fc2tiX3F1ZXVlX3RhaWwoJnJpbmctPnF1ZXVlLCBza2IpOworCisJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9kZXNjKCh1OCAqKSBwZGVzYywgdHJ1ZSwKKwkJCQkgICAgSFdfREVTQ19PV04sICh1OCAqKSZ0ZW1wX29uZSk7CisKKwlpZiAoIWllZWU4MDIxMV9oYXNfbW9yZWZyYWdzKGhkci0+ZnJhbWVfY29udHJvbCkpIHsKKwkJaWYgKHFjKQorCQkJbWFjLT50aWRzW3RpZF0uc2VxX251bWJlciA9IHNlcV9udW1iZXI7CisJfQorCisJaWYgKChyaW5nLT5lbnRyaWVzIC0gc2tiX3F1ZXVlX2xlbigmcmluZy0+cXVldWUpKSA8IDIgJiYKKwkgICAgaHdfcXVldWUgIT0gQkVBQ09OX1FVRVVFKSB7CisKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19MT1VELAorCQkJICgibGVzcyBkZXNjIGxlZnQsIHN0b3Agc2tiX3F1ZXVlQCVkLCAiCisJCQkgICJyaW5nLT5pZHggPSAlZCwiCisJCQkgICJpZHggPSAlZCwgc2tiX3F1ZXVlX2xlbiA9IDB4JWRcbiIsCisJCQkgIGh3X3F1ZXVlLCByaW5nLT5pZHgsIGlkeCwKKwkJCSAgc2tiX3F1ZXVlX2xlbigmcmluZy0+cXVldWUpKSk7CisKKwkJaWVlZTgwMjExX3N0b3BfcXVldWUoaHcsIHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpKTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGxwcml2LT5sb2Nrcy5pcnFfdGhfbG9jaywgZmxhZ3MpOworCisJcnRscHJpdi0+Y2ZnLT5vcHMtPnR4X3BvbGxpbmcoaHcsIGh3X3F1ZXVlKTsKKworCXJldHVybiAwOworfQorCit2b2lkIHJ0bF9wY2lfZGVpbml0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOworCisJX3J0bF9wY2lfZGVpbml0X3RyeF9yaW5nKGh3KTsKKworCXN5bmNocm9uaXplX2lycShydGxwY2ktPnBkZXYtPmlycSk7CisJdGFza2xldF9raWxsKCZydGxwcml2LT53b3Jrcy5pcnFfdGFza2xldCk7CisKKwlmbHVzaF93b3JrcXVldWUocnRscHJpdi0+d29ya3MucnRsX3dxKTsKKwlkZXN0cm95X3dvcmtxdWV1ZShydGxwcml2LT53b3Jrcy5ydGxfd3EpOworCit9CisKK2ludCBydGxfcGNpX2luaXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlpbnQgZXJyOworCisJX3J0bF9wY2lfaW5pdF9zdHJ1Y3QoaHcsIHBkZXYpOworCisJZXJyID0gX3J0bF9wY2lfaW5pdF90cnhfcmluZyhodyk7CisJaWYgKGVycikgeworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX0VNRVJHLAorCQkJICgidHggcmluZyBpbml0aWFsaXphdGlvbiBmYWlsZWQiKSk7CisJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIDE7Cit9CisKK2ludCBydGxfcGNpX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX2hhbCAqcnRsaGFsID0gcnRsX2hhbChydGxfcHJpdihodykpOworCXN0cnVjdCBydGxfcGNpICpydGxwY2kgPSBydGxfcGNpZGV2KHJ0bF9wY2lwcml2KGh3KSk7CisJc3RydWN0IHJ0bF9wc19jdGwgKnBwc2MgPSBydGxfcHNjKHJ0bF9wcml2KGh3KSk7CisKKwlpbnQgZXJyOworCisJcnRsX3BjaV9yZXNldF90cnhfcmluZyhodyk7CisKKwlydGxwY2ktPmRyaXZlcl9pc19nb2luZ3RvX3VubG9hZCA9IGZhbHNlOworCWVyciA9IHJ0bHByaXYtPmNmZy0+b3BzLT5od19pbml0KGh3KTsKKwlpZiAoZXJyKSB7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX0RNRVNHLAorCQkJICgiRmFpbGVkIHRvIGNvbmZpZyBoYXJkd2FyZSFcbiIpKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlydGxwcml2LT5jZmctPm9wcy0+ZW5hYmxlX2ludGVycnVwdChodyk7CisJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9JTklULCBEQkdfTE9VRCwgKCJlbmFibGVfaW50ZXJydXB0IE9LXG4iKSk7CisKKwlydGxfaW5pdF9yeF9jb25maWcoaHcpOworCisJLypzaG91bGQgYWZ0ZXIgYWRhcHRlciBzdGFydCBhbmQgaW50ZXJydXB0IGVuYWJsZS4gKi8KKwlzZXRfaGFsX3N0YXJ0KHJ0bGhhbCk7CisKKwlSVF9DTEVBUl9QU19MRVZFTChwcHNjLCBSVF9SRl9PRkZfTEVWTF9IQUxUX05JQyk7CisKKwlydGxwY2ktPnVwX2ZpcnN0X3RpbWUgPSBmYWxzZTsKKworCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX0RNRVNHLCAoIk9LXG4iKSk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcnRsX3BjaV9zdG9wKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOworCXN0cnVjdCBydGxfcHNfY3RsICpwcHNjID0gcnRsX3BzYyhydGxfcHJpdihodykpOworCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bF9wcml2KGh3KSk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1OCBSRkluUHJvZ3Jlc3NUaW1lT3V0ID0gMDsKKworCS8qCisJICpzaG91bGQgYmVmb3JlIGRpc2FibGUgaW50ZXJycnVwdCZhZGFwdGVyCisJICphbmQgd2lsbCBkbyBpdCBpbW1lZGlhdGVseS4KKwkgKi8KKwlzZXRfaGFsX3N0b3AocnRsaGFsKTsKKworCXJ0bHByaXYtPmNmZy0+b3BzLT5kaXNhYmxlX2ludGVycnVwdChodyk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcnRscHJpdi0+bG9ja3MucmZfcHNfbG9jaywgZmxhZ3MpOworCXdoaWxlIChwcHNjLT5yZmNoYW5nZV9pbnByb2dyZXNzKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0bHByaXYtPmxvY2tzLnJmX3BzX2xvY2ssIGZsYWdzKTsKKwkJaWYgKFJGSW5Qcm9ncmVzc1RpbWVPdXQgPiAxMDApIHsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZydGxwcml2LT5sb2Nrcy5yZl9wc19sb2NrLCBmbGFncyk7CisJCQlicmVhazsKKwkJfQorCQltZGVsYXkoMSk7CisJCVJGSW5Qcm9ncmVzc1RpbWVPdXQrKzsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnJ0bHByaXYtPmxvY2tzLnJmX3BzX2xvY2ssIGZsYWdzKTsKKwl9CisJcHBzYy0+cmZjaGFuZ2VfaW5wcm9ncmVzcyA9IHRydWU7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnRscHJpdi0+bG9ja3MucmZfcHNfbG9jaywgZmxhZ3MpOworCisJcnRscGNpLT5kcml2ZXJfaXNfZ29pbmd0b191bmxvYWQgPSB0cnVlOworCXJ0bHByaXYtPmNmZy0+b3BzLT5od19kaXNhYmxlKGh3KTsKKwlydGxwcml2LT5jZmctPm9wcy0+bGVkX2NvbnRyb2woaHcsIExFRF9DVExfUE9XRVJfT0ZGKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZydGxwcml2LT5sb2Nrcy5yZl9wc19sb2NrLCBmbGFncyk7CisJcHBzYy0+cmZjaGFuZ2VfaW5wcm9ncmVzcyA9IGZhbHNlOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0bHByaXYtPmxvY2tzLnJmX3BzX2xvY2ssIGZsYWdzKTsKKworCXJ0bF9wY2lfZW5hYmxlX2FzcG0oaHcpOworfQorCitzdGF0aWMgYm9vbCBfcnRsX3BjaV9maW5kX2FkYXB0ZXIoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BjaV9wcml2ICpwY2lwcml2ID0gcnRsX3BjaXByaXYoaHcpOworCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bF9wcml2KGh3KSk7CisJc3RydWN0IHBjaV9kZXYgKmJyaWRnZV9wZGV2ID0gcGRldi0+YnVzLT5zZWxmOworCXUxNiB2ZW5kZXJpZDsKKwl1MTYgZGV2aWNlaWQ7CisJdTggcmV2aXNpb25pZDsKKwl1MTYgaXJxbGluZTsKKwl1OCB0bXA7CisKKwl2ZW5kZXJpZCA9IHBkZXYtPnZlbmRvcjsKKwlkZXZpY2VpZCA9IHBkZXYtPmRldmljZTsKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCAweDgsICZyZXZpc2lvbmlkKTsKKwlwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCAweDNDLCAmaXJxbGluZSk7CisKKwlpZiAoZGV2aWNlaWQgPT0gUlRMX1BDSV84MTkyX0RJRCB8fAorCSAgICBkZXZpY2VpZCA9PSBSVExfUENJXzAwNDRfRElEIHx8CisJICAgIGRldmljZWlkID09IFJUTF9QQ0lfMDA0N19ESUQgfHwKKwkgICAgZGV2aWNlaWQgPT0gUlRMX1BDSV84MTkyU0VfRElEIHx8CisJICAgIGRldmljZWlkID09IFJUTF9QQ0lfODE3NF9ESUQgfHwKKwkgICAgZGV2aWNlaWQgPT0gUlRMX1BDSV84MTczX0RJRCB8fAorCSAgICBkZXZpY2VpZCA9PSBSVExfUENJXzgxNzJfRElEIHx8CisJICAgIGRldmljZWlkID09IFJUTF9QQ0lfODE3MV9ESUQpIHsKKwkJc3dpdGNoIChyZXZpc2lvbmlkKSB7CisJCWNhc2UgUlRMX1BDSV9SRVZJU0lPTl9JRF84MTkyUENJRToKKwkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX0RNRVNHLAorCQkJCSAoIjgxOTIgUENJLUUgaXMgZm91bmQgLSAiCisJCQkJICAidmlkL2RpZD0leC8leFxuIiwgdmVuZGVyaWQsIGRldmljZWlkKSk7CisJCQlydGxoYWwtPmh3X3R5cGUgPSBIQVJEV0FSRV9UWVBFX1JUTDgxOTJFOworCQkJYnJlYWs7CisJCWNhc2UgUlRMX1BDSV9SRVZJU0lPTl9JRF84MTkyU0U6CisJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0lOSVQsIERCR19ETUVTRywKKwkJCQkgKCI4MTkyU0UgaXMgZm91bmQgLSAiCisJCQkJICAidmlkL2RpZD0leC8leFxuIiwgdmVuZGVyaWQsIGRldmljZWlkKSk7CisJCQlydGxoYWwtPmh3X3R5cGUgPSBIQVJEV0FSRV9UWVBFX1JUTDgxOTJTRTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19XQVJOSU5HLAorCQkJCSAoIkVycjogVW5rbm93biBkZXZpY2UgLSAiCisJCQkJICAidmlkL2RpZD0leC8leFxuIiwgdmVuZGVyaWQsIGRldmljZWlkKSk7CisJCQlydGxoYWwtPmh3X3R5cGUgPSBIQVJEV0FSRV9UWVBFX1JUTDgxOTJTRTsKKwkJCWJyZWFrOworCisJCX0KKwl9IGVsc2UgaWYgKGRldmljZWlkID09IFJUTF9QQ0lfODE5MkNFVF9ESUQgfHwKKwkJICAgZGV2aWNlaWQgPT0gUlRMX1BDSV84MTkyQ0VfRElEIHx8CisJCSAgIGRldmljZWlkID09IFJUTF9QQ0lfODE5MUNFX0RJRCB8fAorCQkgICBkZXZpY2VpZCA9PSBSVExfUENJXzgxODhDRV9ESUQpIHsKKwkJcnRsaGFsLT5od190eXBlID0gSEFSRFdBUkVfVFlQRV9SVEw4MTkyQ0U7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX0RNRVNHLAorCQkJICgiODE5MkMgUENJLUUgaXMgZm91bmQgLSAiCisJCQkgICJ2aWQvZGlkPSV4LyV4XG4iLCB2ZW5kZXJpZCwgZGV2aWNlaWQpKTsKKwl9IGVsc2UgeworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX1dBUk5JTkcsCisJCQkgKCJFcnI6IFVua25vd24gZGV2aWNlIC0iCisJCQkgICIgdmlkL2RpZD0leC8leFxuIiwgdmVuZGVyaWQsIGRldmljZWlkKSk7CisKKwkJcnRsaGFsLT5od190eXBlID0gUlRMX0RFRkFVTFRfSEFSRFdBUkVfVFlQRTsKKwl9CisKKwkvKmZpbmQgYnVzIGluZm8gKi8KKwlwY2lwcml2LT5uZGlzX2FkYXB0ZXIuYnVzbnVtYmVyID0gcGRldi0+YnVzLT5udW1iZXI7CisJcGNpcHJpdi0+bmRpc19hZGFwdGVyLmRldm51bWJlciA9IFBDSV9TTE9UKHBkZXYtPmRldmZuKTsKKwlwY2lwcml2LT5uZGlzX2FkYXB0ZXIuZnVuY251bWJlciA9IFBDSV9GVU5DKHBkZXYtPmRldmZuKTsKKworCS8qZmluZCBicmlkZ2UgaW5mbyAqLworCXBjaXByaXYtPm5kaXNfYWRhcHRlci5wY2licmlkZ2VfdmVuZG9yaWQgPSBicmlkZ2VfcGRldi0+dmVuZG9yOworCWZvciAodG1wID0gMDsgdG1wIDwgUENJX0JSSURHRV9WRU5ET1JfTUFYOyB0bXArKykgeworCQlpZiAoYnJpZGdlX3BkZXYtPnZlbmRvciA9PSBwY2licmlkZ2VfdmVuZG9yc1t0bXBdKSB7CisJCQlwY2lwcml2LT5uZGlzX2FkYXB0ZXIucGNpYnJpZGdlX3ZlbmRvciA9IHRtcDsKKwkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX0RNRVNHLAorCQkJCSAoIlBjaSBCcmlkZ2UgVmVuZG9yIGlzIGZvdW5kIGluZGV4OiAlZFxuIiwKKwkJCQkgIHRtcCkpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAocGNpcHJpdi0+bmRpc19hZGFwdGVyLnBjaWJyaWRnZV92ZW5kb3IgIT0KKwkJUENJX0JSSURHRV9WRU5ET1JfVU5LTk9XTikgeworCQlwY2lwcml2LT5uZGlzX2FkYXB0ZXIucGNpYnJpZGdlX2J1c251bSA9CisJCSAgICBicmlkZ2VfcGRldi0+YnVzLT5udW1iZXI7CisJCXBjaXByaXYtPm5kaXNfYWRhcHRlci5wY2licmlkZ2VfZGV2bnVtID0KKwkJICAgIFBDSV9TTE9UKGJyaWRnZV9wZGV2LT5kZXZmbik7CisJCXBjaXByaXYtPm5kaXNfYWRhcHRlci5wY2licmlkZ2VfZnVuY251bSA9CisJCSAgICBQQ0lfRlVOQyhicmlkZ2VfcGRldi0+ZGV2Zm4pOworCQlwY2lwcml2LT5uZGlzX2FkYXB0ZXIucGNpYnJpZGdlX3BjaWVoZHJfb2Zmc2V0ID0KKwkJICAgIHBjaV9wY2llX2NhcChicmlkZ2VfcGRldik7CisJCXBjaXByaXYtPm5kaXNfYWRhcHRlci5wY2ljZmdfYWRkcnBvcnQgPQorCQkgICAgKHBjaXByaXYtPm5kaXNfYWRhcHRlci5wY2licmlkZ2VfYnVzbnVtIDw8IDE2KSB8CisJCSAgICAocGNpcHJpdi0+bmRpc19hZGFwdGVyLnBjaWJyaWRnZV9kZXZudW0gPDwgMTEpIHwKKwkJICAgIChwY2lwcml2LT5uZGlzX2FkYXB0ZXIucGNpYnJpZGdlX2Z1bmNudW0gPDwgOCkgfCAoMSA8PCAzMSk7CisJCXBjaXByaXYtPm5kaXNfYWRhcHRlci5udW00Ynl0ZXMgPQorCQkgICAgKHBjaXByaXYtPm5kaXNfYWRhcHRlci5wY2licmlkZ2VfcGNpZWhkcl9vZmZzZXQgKyAweDEwKSAvIDQ7CisKKwkJcnRsX3BjaV9nZXRfbGlua2NvbnRyb2xfZmllbGQoaHcpOworCisJCWlmIChwY2lwcml2LT5uZGlzX2FkYXB0ZXIucGNpYnJpZGdlX3ZlbmRvciA9PQorCQkgICAgUENJX0JSSURHRV9WRU5ET1JfQU1EKSB7CisJCQlwY2lwcml2LT5uZGlzX2FkYXB0ZXIuYW1kX2wxX3BhdGNoID0KKwkJCSAgICBydGxfcGNpX2dldF9hbWRfbDFfcGF0Y2goaHcpOworCQl9CisJfQorCisJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9JTklULCBEQkdfRE1FU0csCisJCSAoInBjaWRldiBidXNudW1iZXI6ZGV2bnVtYmVyOmZ1bmNudW1iZXI6IgorCQkgICJ2ZW5kb3I6bGlua19jdGwgJWQ6JWQ6JWQ6JXg6JXhcbiIsCisJCSAgcGNpcHJpdi0+bmRpc19hZGFwdGVyLmJ1c251bWJlciwKKwkJICBwY2lwcml2LT5uZGlzX2FkYXB0ZXIuZGV2bnVtYmVyLAorCQkgIHBjaXByaXYtPm5kaXNfYWRhcHRlci5mdW5jbnVtYmVyLAorCQkgIHBkZXYtPnZlbmRvciwgcGNpcHJpdi0+bmRpc19hZGFwdGVyLmxpbmtjdHJsX3JlZykpOworCisJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9JTklULCBEQkdfRE1FU0csCisJCSAoInBjaV9icmlkZ2UgYnVzbnVtYmVyOmRldm51bWJlcjpmdW5jbnVtYmVyOnZlbmRvcjoiCisJCSAgInBjaWVfY2FwOmxpbmtfY3RsX3JlZzphbWQgJWQ6JWQ6JWQ6JXg6JXg6JXg6JXhcbiIsCisJCSAgcGNpcHJpdi0+bmRpc19hZGFwdGVyLnBjaWJyaWRnZV9idXNudW0sCisJCSAgcGNpcHJpdi0+bmRpc19hZGFwdGVyLnBjaWJyaWRnZV9kZXZudW0sCisJCSAgcGNpcHJpdi0+bmRpc19hZGFwdGVyLnBjaWJyaWRnZV9mdW5jbnVtLAorCQkgIHBjaWJyaWRnZV92ZW5kb3JzW3BjaXByaXYtPm5kaXNfYWRhcHRlci5wY2licmlkZ2VfdmVuZG9yXSwKKwkJICBwY2lwcml2LT5uZGlzX2FkYXB0ZXIucGNpYnJpZGdlX3BjaWVoZHJfb2Zmc2V0LAorCQkgIHBjaXByaXYtPm5kaXNfYWRhcHRlci5wY2licmlkZ2VfbGlua2N0cmxyZWcsCisJCSAgcGNpcHJpdi0+bmRpc19hZGFwdGVyLmFtZF9sMV9wYXRjaCkpOworCisJcnRsX3BjaV9wYXJzZV9jb25maWd1cmF0aW9uKHBkZXYsIGh3KTsKKworCXJldHVybiB0cnVlOworfQorCitpbnQgX19kZXZpbml0IHJ0bF9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gTlVMTDsKKworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IE5VTEw7CisJc3RydWN0IHJ0bF9wY2lfcHJpdiAqcGNpcHJpdiA9IE5VTEw7CisJc3RydWN0IHJ0bF9wY2kgKnJ0bHBjaTsKKwl1bnNpZ25lZCBsb25nIHBtZW1fc3RhcnQsIHBtZW1fbGVuLCBwbWVtX2ZsYWdzOworCWludCBlcnI7CisKKwllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKwlpZiAoZXJyKSB7CisJCVJUX0FTU0VSVChmYWxzZSwKKwkJCSAgKCIlcyA6IENhbm5vdCBlbmFibGUgbmV3IFBDSSBkZXZpY2VcbiIsCisJCQkgICBwY2lfbmFtZShwZGV2KSkpOworCQlyZXR1cm4gZXJyOworCX0KKworCWlmICghcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soMzIpKSkgeworCQlpZiAocGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV9CSVRfTUFTSygzMikpKSB7CisJCQlSVF9BU1NFUlQoZmFsc2UsICgiVW5hYmxlIHRvIG9idGFpbiAzMmJpdCBETUEgIgorCQkJCQkgICJmb3IgY29uc2lzdGVudCBhbGxvY2F0aW9uc1xuIikpOworCQkJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwl9CisKKwlwY2lfc2V0X21hc3RlcihwZGV2KTsKKworCWh3ID0gaWVlZTgwMjExX2FsbG9jX2h3KHNpemVvZihzdHJ1Y3QgcnRsX3BjaV9wcml2KSArCisJCQkJc2l6ZW9mKHN0cnVjdCBydGxfcHJpdiksICZydGxfb3BzKTsKKwlpZiAoIWh3KSB7CisJCVJUX0FTU0VSVChmYWxzZSwKKwkJCSAgKCIlcyA6IGllZWU4MDIxMSBhbGxvYyBmYWlsZWRcbiIsIHBjaV9uYW1lKHBkZXYpKSk7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZmFpbDE7CisJfQorCisJU0VUX0lFRUU4MDIxMV9ERVYoaHcsICZwZGV2LT5kZXYpOworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBodyk7CisKKwlydGxwcml2ID0gaHctPnByaXY7CisJcGNpcHJpdiA9ICh2b2lkICopcnRscHJpdi0+cHJpdjsKKwlwY2lwcml2LT5kZXYucGRldiA9IHBkZXY7CisKKwkvKgorCSAqaW5pdCBkYmdwIGZsYWdzIGJlZm9yZSBhbGwKKwkgKm90aGVyIGZ1bmN0aW9ucywgYmVjYXVzZSB3ZSB3aWxsCisJICp1c2UgaXQgaW4gb3RoZXIgZnVudGlvbnMgbGlrZQorCSAqUlRfVFJBQ0UvUlRfUFJJTlQvUlRMX1BSSU5UX0RBVEEKKwkgKnlvdSBjYW4gbm90IHVzZSB0aGVzZSBtYWNybworCSAqYmVmb3JlIHRoaXMKKwkgKi8KKwlydGxfZGJncF9mbGFnX2luaXQoaHcpOworCisJLyogTUVNIG1hcCAqLworCWVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgS0JVSUxEX01PRE5BTUUpOworCWlmIChlcnIpIHsKKwkJUlRfQVNTRVJUKGZhbHNlLCAoIkNhbid0IG9idGFpbiBQQ0kgcmVzb3VyY2VzXG4iKSk7CisJCXJldHVybiBlcnI7CisJfQorCisJcG1lbV9zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAyKTsKKwlwbWVtX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMik7CisJcG1lbV9mbGFncyA9IHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCAyKTsKKworCS8qc2hhcmVkIG1lbSBzdGFydCAqLworCXJ0bHByaXYtPmlvLnBjaV9tZW1fc3RhcnQgPQorCQkJKHVuc2lnbmVkIGxvbmcpcGNpX2lvbWFwKHBkZXYsIDIsIHBtZW1fbGVuKTsKKwlpZiAocnRscHJpdi0+aW8ucGNpX21lbV9zdGFydCA9PSAwKSB7CisJCVJUX0FTU0VSVChmYWxzZSwgKCJDYW4ndCBtYXAgUENJIG1lbVxuIikpOworCQlnb3RvIGZhaWwyOworCX0KKworCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX0RNRVNHLAorCQkgKCJtZW0gbWFwcGVkIHNwYWNlOiBzdGFydDogMHglMDhseCBsZW46JTA4bHggIgorCQkgICJmbGFnczolMDhseCwgYWZ0ZXIgbWFwOjB4JTA4bHhcbiIsCisJCSAgcG1lbV9zdGFydCwgcG1lbV9sZW4sIHBtZW1fZmxhZ3MsCisJCSAgcnRscHJpdi0+aW8ucGNpX21lbV9zdGFydCkpOworCisJLyogRGlzYWJsZSBDbGsgUmVxdWVzdCAqLworCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCAweDgxLCAwKTsKKwkvKiBsZWF2ZSBEMyBtb2RlICovCisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIDB4NDQsIDApOworCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCAweDA0LCAweDA2KTsKKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgMHgwNCwgMHgwNyk7CisKKwkvKiBpbml0IGNmZyAmIGludGZfb3BzICovCisJcnRscHJpdi0+cnRsaGFsLmludGVyZmFjZSA9IElOVEZfUENJOworCXJ0bHByaXYtPmNmZyA9IChzdHJ1Y3QgcnRsX2hhbF9jZmcgKikoaWQtPmRyaXZlcl9kYXRhKTsKKwlydGxwcml2LT5pbnRmX29wcyA9ICZydGxfcGNpX29wczsKKworCS8qIGZpbmQgYWRhcHRlciAqLworCV9ydGxfcGNpX2ZpbmRfYWRhcHRlcihwZGV2LCBodyk7CisKKwkvKiBJbml0IElPIGhhbmRsZXIgKi8KKwlfcnRsX3BjaV9pb19oYW5kbGVyX2luaXQoJnBkZXYtPmRldiwgaHcpOworCisJLypsaWtlIHJlYWQgZWVwcm9tIGFuZCBzbyBvbiAqLworCXJ0bHByaXYtPmNmZy0+b3BzLT5yZWFkX2VlcHJvbV9pbmZvKGh3KTsKKworCWlmIChydGxwcml2LT5jZmctPm9wcy0+aW5pdF9zd192YXJzKGh3KSkgeworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX0VNRVJHLAorCQkJICgiQ2FuJ3QgaW5pdF9zd192YXJzLlxuIikpOworCQlnb3RvIGZhaWwzOworCX0KKworCXJ0bHByaXYtPmNmZy0+b3BzLT5pbml0X3N3X2xlZHMoaHcpOworCisJLyphc3BtICovCisJcnRsX3BjaV9pbml0X2FzcG0oaHcpOworCisJLyogSW5pdCBtYWM4MDIxMSBzdyAqLworCWVyciA9IHJ0bF9pbml0X2NvcmUoaHcpOworCWlmIChlcnIpIHsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19FTUVSRywKKwkJCSAoIkNhbid0IGFsbG9jYXRlIHN3IGZvciBtYWM4MDIxMS5cbiIpKTsKKwkJZ290byBmYWlsMzsKKwl9CisKKwkvKiBJbml0IFBDSSBzdyAqLworCWVyciA9ICFydGxfcGNpX2luaXQoaHcsIHBkZXYpOworCWlmIChlcnIpIHsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19FTUVSRywKKwkJCSAoIkZhaWxlZCB0byBpbml0IFBDSS5cbiIpKTsKKwkJZ290byBmYWlsMzsKKwl9CisKKwllcnIgPSBpZWVlODAyMTFfcmVnaXN0ZXJfaHcoaHcpOworCWlmIChlcnIpIHsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19FTUVSRywKKwkJCSAoIkNhbid0IHJlZ2lzdGVyIG1hYzgwMjExIGh3LlxuIikpOworCQlnb3RvIGZhaWwzOworCX0gZWxzZSB7CisJCXJ0bHByaXYtPm1hYzgwMjExLm1hYzgwMjExX3JlZ2lzdGVyZWQgPSAxOworCX0KKworCWVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZydGxfYXR0cmlidXRlX2dyb3VwKTsKKwlpZiAoZXJyKSB7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfRU1FUkcsCisJCQkgKCJmYWlsZWQgdG8gY3JlYXRlIHN5c2ZzIGRldmljZSBhdHRyaWJ1dGVzXG4iKSk7CisJCWdvdG8gZmFpbDM7CisJfQorCisJLyppbml0IHJma2lsbCAqLworCXJ0bF9pbml0X3Jma2lsbChodyk7CisKKwlydGxwY2kgPSBydGxfcGNpZGV2KHBjaXByaXYpOworCWVyciA9IHJlcXVlc3RfaXJxKHJ0bHBjaS0+cGRldi0+aXJxLCAmX3J0bF9wY2lfaW50ZXJydXB0LAorCQkJICBJUlFGX1NIQVJFRCwgS0JVSUxEX01PRE5BTUUsIGh3KTsKKwlpZiAoZXJyKSB7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX0RNRVNHLAorCQkJICgiJXM6IGZhaWxlZCB0byByZWdpc3RlciBJUlEgaGFuZGxlclxuIiwKKwkJCSAgd2lwaHlfbmFtZShody0+d2lwaHkpKSk7CisJCWdvdG8gZmFpbDM7CisJfSBlbHNlIHsKKwkJcnRscGNpLT5pcnFfYWxsb2MgPSAxOworCX0KKworCXNldF9iaXQoUlRMX1NUQVRVU19JTlRFUkZBQ0VfU1RBUlQsICZydGxwcml2LT5zdGF0dXMpOworCXJldHVybiAwOworCitmYWlsMzoKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJcnRsX2RlaW5pdF9jb3JlKGh3KTsKKwlfcnRsX3BjaV9pb19oYW5kbGVyX3JlbGVhc2UoaHcpOworCWllZWU4MDIxMV9mcmVlX2h3KGh3KTsKKworCWlmIChydGxwcml2LT5pby5wY2lfbWVtX3N0YXJ0ICE9IDApCisJCXBjaV9pb3VubWFwKHBkZXYsICh2b2lkICopcnRscHJpdi0+aW8ucGNpX21lbV9zdGFydCk7CisKK2ZhaWwyOgorCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CisKK2ZhaWwxOgorCisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCisJcmV0dXJuIC1FTk9ERVY7CisKK30KK0VYUE9SVF9TWU1CT0wocnRsX3BjaV9wcm9iZSk7CisKK3ZvaWQgcnRsX3BjaV9kaXNjb25uZWN0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBydGxfcGNpX3ByaXYgKnBjaXByaXYgPSBydGxfcGNpcHJpdihodyk7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGNpICpydGxwY2kgPSBydGxfcGNpZGV2KHBjaXByaXYpOworCXN0cnVjdCBydGxfbWFjICpydGxtYWMgPSBydGxfbWFjKHJ0bHByaXYpOworCisJY2xlYXJfYml0KFJUTF9TVEFUVVNfSU5URVJGQUNFX1NUQVJULCAmcnRscHJpdi0+c3RhdHVzKTsKKworCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZydGxfYXR0cmlidXRlX2dyb3VwKTsKKworCS8qaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcgd2lsbCBjYWxsIG9wc19zdG9wICovCisJaWYgKHJ0bG1hYy0+bWFjODAyMTFfcmVnaXN0ZXJlZCA9PSAxKSB7CisJCWllZWU4MDIxMV91bnJlZ2lzdGVyX2h3KGh3KTsKKwkJcnRsbWFjLT5tYWM4MDIxMV9yZWdpc3RlcmVkID0gMDsKKwl9IGVsc2UgeworCQlydGxfZGVpbml0X2RlZmVycmVkX3dvcmsoaHcpOworCQlydGxwcml2LT5pbnRmX29wcy0+YWRhcHRlcl9zdG9wKGh3KTsKKwl9CisKKwkvKmRlaW5pdCByZmtpbGwgKi8KKwlydGxfZGVpbml0X3Jma2lsbChodyk7CisKKwlydGxfcGNpX2RlaW5pdChodyk7CisJcnRsX2RlaW5pdF9jb3JlKGh3KTsKKwlydGxwcml2LT5jZmctPm9wcy0+ZGVpbml0X3N3X2xlZHMoaHcpOworCV9ydGxfcGNpX2lvX2hhbmRsZXJfcmVsZWFzZShodyk7CisJcnRscHJpdi0+Y2ZnLT5vcHMtPmRlaW5pdF9zd192YXJzKGh3KTsKKworCWlmIChydGxwY2ktPmlycV9hbGxvYykgeworCQlmcmVlX2lycShydGxwY2ktPnBkZXYtPmlycSwgaHcpOworCQlydGxwY2ktPmlycV9hbGxvYyA9IDA7CisJfQorCisJaWYgKHJ0bHByaXYtPmlvLnBjaV9tZW1fc3RhcnQgIT0gMCkgeworCQlwY2lfaW91bm1hcChwZGV2LCAodm9pZCAqKXJ0bHByaXYtPmlvLnBjaV9tZW1fc3RhcnQpOworCQlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworCX0KKworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisKKwlpZWVlODAyMTFfZnJlZV9odyhodyk7Cit9CitFWFBPUlRfU1lNQk9MKHJ0bF9wY2lfZGlzY29ubmVjdCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK2tlcm5lbCBwY2kgcG93ZXIgc3RhdGUgZGVmaW5lOgorUENJX0QwICAgICAgICAgKChwY2lfcG93ZXJfdCBfX2ZvcmNlKSAwKQorUENJX0QxICAgICAgICAgKChwY2lfcG93ZXJfdCBfX2ZvcmNlKSAxKQorUENJX0QyICAgICAgICAgKChwY2lfcG93ZXJfdCBfX2ZvcmNlKSAyKQorUENJX0QzaG90ICAgICAgKChwY2lfcG93ZXJfdCBfX2ZvcmNlKSAzKQorUENJX0QzY29sZCAgICAgKChwY2lfcG93ZXJfdCBfX2ZvcmNlKSA0KQorUENJX1VOS05PV04gICAgKChwY2lfcG93ZXJfdCBfX2ZvcmNlKSA1KQorCitUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHN5c3RlbQorZ29lcyBpbnRvIHN1c3BlbmQgc3RhdGUgbWFjODAyMTEgd2lsbAorY2FsbCBydGxfbWFjX3N0b3AoKSBmcm9tIHRoZSBtYWM4MDIxMQorc3VzcGVuZCBmdW5jdGlvbiBmaXJzdCwgU28gdGhlcmUgaXMKK25vIG5lZWQgdG8gY2FsbCBod19kaXNhYmxlIGhlcmUuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IHJ0bF9wY2lfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXBjaV9zYXZlX3N0YXRlKHBkZXYpOworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EM2hvdCk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wocnRsX3BjaV9zdXNwZW5kKTsKKworaW50IHJ0bF9wY2lfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCWludCByZXQ7CisKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7CisJcmV0ID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJaWYgKHJldCkgeworCQlSVF9BU1NFUlQoZmFsc2UsICgiRVJSOiA8PT09PT09XG4iKSk7CisJCXJldHVybiByZXQ7CisJfQorCisJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wocnRsX3BjaV9yZXN1bWUpOworCitzdHJ1Y3QgcnRsX2ludGZfb3BzIHJ0bF9wY2lfb3BzID0geworCS5hZGFwdGVyX3N0YXJ0ID0gcnRsX3BjaV9zdGFydCwKKwkuYWRhcHRlcl9zdG9wID0gcnRsX3BjaV9zdG9wLAorCS5hZGFwdGVyX3R4ID0gcnRsX3BjaV90eCwKKwkucmVzZXRfdHJ4X3JpbmcgPSBydGxfcGNpX3Jlc2V0X3RyeF9yaW5nLAorCisJLmRpc2FibGVfYXNwbSA9IHJ0bF9wY2lfZGlzYWJsZV9hc3BtLAorCS5lbmFibGVfYXNwbSA9IHJ0bF9wY2lfZW5hYmxlX2FzcG0sCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9wY2kuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcGNpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM2YTY2OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcGNpLmgKQEAgLTAsMCArMSwzMDIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQoYykgMjAwOS0yMDEwICBSZWFsdGVrIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAsIFVTQQorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgTElDRU5TRS4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogd2xhbmZhZSA8d2xhbmZhZUByZWFsdGVrLmNvbT4KKyAqIFJlYWx0ZWsgQ29ycG9yYXRpb24sIE5vLiAyLCBJbm5vdmF0aW9uIFJvYWQgSUksIEhzaW5jaHUgU2NpZW5jZSBQYXJrLAorICogSHNpbmNodSAzMDAsIFRhaXdhbi4KKyAqCisgKiBMYXJyeSBGaW5nZXIgPExhcnJ5LkZpbmdlckBsd2Zpbmdlci5uZXQ+CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fUlRMX1BDSV9IX18KKyNkZWZpbmUgX19SVExfUENJX0hfXworCisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisvKgorMTogTVNEVSBwYWNrZXQgcXVldWUsCisyOiBSeCBDb21tYW5kIFF1ZXVlCisqLworI2RlZmluZSBSVExfUENJX1JYX01QRFVfUVVFVUUJCQkwCisjZGVmaW5lIFJUTF9QQ0lfUlhfQ01EX1FVRVVFCQkJMQorI2RlZmluZSBSVExfUENJX01BWF9SWF9RVUVVRQkJCTIKKworI2RlZmluZSBSVExfUENJX01BWF9SWF9DT1VOVAkJCTY0CisjZGVmaW5lIFJUTF9QQ0lfTUFYX1RYX1FVRVVFX0NPVU5UCQk5CisKKyNkZWZpbmUgUlRfVFhERVNDX05VTQkJCQkxMjgKKyNkZWZpbmUgUlRfVFhERVNDX05VTV9CRV9RVUVVRQkJCTI1NgorCisjZGVmaW5lIEJLX1FVRVVFCQkJCTAKKyNkZWZpbmUgQkVfUVVFVUUJCQkJMQorI2RlZmluZSBWSV9RVUVVRQkJCQkyCisjZGVmaW5lIFZPX1FVRVVFCQkJCTMKKyNkZWZpbmUgQkVBQ09OX1FVRVVFCQkJCTQKKyNkZWZpbmUgVFhDTURfUVVFVUUJCQkJNQorI2RlZmluZSBNR05UX1FVRVVFCQkJCTYKKyNkZWZpbmUgSElHSF9RVUVVRQkJCQk3CisjZGVmaW5lIEhDQ0FfUVVFVUUJCQkJOAorCisjZGVmaW5lIFJUTF9QQ0lfREVWSUNFKHZlbmQsIGRldiwgY2ZnKSAgXAorCS52ZW5kb3IgPSAodmVuZCksIFwKKwkuZGV2aWNlID0gKGRldiksIFwKKwkuc3VidmVuZG9yID0gUENJX0FOWV9JRCwgXAorCS5zdWJkZXZpY2UgPSBQQ0lfQU5ZX0lELFwKKwkuZHJpdmVyX2RhdGEgPSAoa2VybmVsX3Vsb25nX3QpJihjZmcpCisKKyNkZWZpbmUgSU5URUxfVkVORE9SX0lECQkJCTB4ODA4NgorI2RlZmluZSBTSVNfVkVORE9SX0lECQkJCTB4MTAzOQorI2RlZmluZSBBVElfVkVORE9SX0lECQkJCTB4MTAwMgorI2RlZmluZSBBVElfREVWSUNFX0lECQkJCTB4NzkxNAorI2RlZmluZSBBTURfVkVORE9SX0lECQkJCTB4MTAyMgorCisjZGVmaW5lIFBDSV9NQVhfQlJJREdFX05VTUJFUgkJCTI1NQorI2RlZmluZSBQQ0lfTUFYX0RFVklDRVMJCQkJMzIKKyNkZWZpbmUgUENJX01BWF9GVU5DVElPTgkJCTgKKworI2RlZmluZSBQQ0lfQ09ORl9BRERSRVNTCTB4MENGOAkvKlBDSSBDb25maWd1cmF0aW9uIFNwYWNlIEFkZHJlc3MgKi8KKyNkZWZpbmUgUENJX0NPTkZfREFUQQkJMHgwQ0ZDCS8qUENJIENvbmZpZ3VyYXRpb24gU3BhY2UgRGF0YSAqLworCisjZGVmaW5lIFBDSV9DTEFTU19CUklER0VfREVWCQkweDA2CisjZGVmaW5lIFBDSV9TVUJDTEFTU19CUl9QQ0lfVE9fUENJCTB4MDQKKyNkZWZpbmUgUENJX0NBUEFCSUxJVFlfSURfUENJX0VYUFJFU1MJMHgxMAorI2RlZmluZSBQQ0lfQ0FQX0lEX0VYUAkJCTB4MTAKKworI2RlZmluZSBVMURPTlRDQVJFCQkJMHhGRgorI2RlZmluZSBVMkRPTlRDQVJFCQkJMHhGRkZGCisjZGVmaW5lIFU0RE9OVENBUkUJCQkweEZGRkZGRkZGCisKKyNkZWZpbmUgUlRMX1BDSV84MTkyX0RJRAkweDgxOTIJLyo4MTkyIFBDSS1FICovCisjZGVmaW5lIFJUTF9QQ0lfODE5MlNFX0RJRAkweDgxOTIJLyo4MTkyIFNFICovCisjZGVmaW5lIFJUTF9QQ0lfODE3NF9ESUQJMHg4MTc0CS8qODE5MiBTRSAqLworI2RlZmluZSBSVExfUENJXzgxNzNfRElECTB4ODE3MwkvKjgxOTEgU0UgQ3JhYiAqLworI2RlZmluZSBSVExfUENJXzgxNzJfRElECTB4ODE3MgkvKjgxOTEgU0UgUkUgKi8KKyNkZWZpbmUgUlRMX1BDSV84MTcxX0RJRAkweDgxNzEJLyo4MTkxIFNFIFVuaWNyb24gKi8KKyNkZWZpbmUgUlRMX1BDSV8wMDQ1X0RJRAkweDAwNDUJLyo4MTkwIFBDSSBmb3IgQ2VyYWdhICovCisjZGVmaW5lIFJUTF9QQ0lfMDA0Nl9ESUQJMHgwMDQ2CS8qODE5MCBDYXJkYnVzIGZvciBDZXJhZ2EgKi8KKyNkZWZpbmUgUlRMX1BDSV8wMDQ0X0RJRAkweDAwNDQJLyo4MTkyZSBQQ0lFIGZvciBDZXJhZ2EgKi8KKyNkZWZpbmUgUlRMX1BDSV8wMDQ3X0RJRAkweDAwNDcJLyo4MTkyZSBFeHByZXNzIENhcmQgZm9yIENlcmFnYSAqLworI2RlZmluZSBSVExfUENJXzcwMEZfRElECTB4NzAwRgorI2RlZmluZSBSVExfUENJXzcwMUZfRElECTB4NzAxRgorI2RlZmluZSBSVExfUENJX0RMSU5LX0RJRAkweDMzMDQKKyNkZWZpbmUgUlRMX1BDSV84MTkyQ0VUX0RJRAkweDgxOTEJLyo4MTkyY2UgKi8KKyNkZWZpbmUgUlRMX1BDSV84MTkyQ0VfRElECTB4ODE3OAkvKjgxOTJjZSAqLworI2RlZmluZSBSVExfUENJXzgxOTFDRV9ESUQJMHg4MTc3CS8qODE5MmNlICovCisjZGVmaW5lIFJUTF9QQ0lfODE4OENFX0RJRAkweDgxNzYJLyo4MTkyY2UgKi8KKyNkZWZpbmUgUlRMX1BDSV84MTkyQ1VfRElECTB4ODE5MQkvKjgxOTJjZSAqLworI2RlZmluZSBSVExfUENJXzgxOTJERV9ESUQJMHgwOTJECS8qODE5MmNlICovCisjZGVmaW5lIFJUTF9QQ0lfODE5MkRVX0RJRAkweDA5MkQJLyo4MTkyY2UgKi8KKworLyo4MTkyIHN1cHBvcnQgMTYgcGFnZXMgb2YgSU8gcmVnaXN0ZXJzKi8KKyNkZWZpbmUgUlRMX01FTV9NQVBQRURfSU9fUkFOR0VfODE5MFBDSQkJMHgxMDAwCisjZGVmaW5lIFJUTF9NRU1fTUFQUEVEX0lPX1JBTkdFXzgxOTJQQ0lFCTB4NDAwMAorI2RlZmluZSBSVExfTUVNX01BUFBFRF9JT19SQU5HRV84MTkyU0UJCTB4NDAwMAorI2RlZmluZSBSVExfTUVNX01BUFBFRF9JT19SQU5HRV84MTkyQ0UJCTB4NDAwMAorI2RlZmluZSBSVExfTUVNX01BUFBFRF9JT19SQU5HRV84MTkyREUJCTB4NDAwMAorCisjZGVmaW5lIFJUTF9QQ0lfUkVWSVNJT05fSURfODE5MFBDSQkJMHgwMAorI2RlZmluZSBSVExfUENJX1JFVklTSU9OX0lEXzgxOTJQQ0lFCQkweDAxCisjZGVmaW5lIFJUTF9QQ0lfUkVWSVNJT05fSURfODE5MlNFCQkweDEwCisjZGVmaW5lIFJUTF9QQ0lfUkVWSVNJT05fSURfODE5MkNFCQkweDEKKyNkZWZpbmUgUlRMX1BDSV9SRVZJU0lPTl9JRF84MTkyREUJCTB4MAorCisjZGVmaW5lIFJUTF9ERUZBVUxUX0hBUkRXQVJFX1RZUEUJSEFSRFdBUkVfVFlQRV9SVEw4MTkyQ0UKKworZW51bSBwY2lfYnJpZGdlX3ZlbmRvciB7CisJUENJX0JSSURHRV9WRU5ET1JfSU5URUwgPSAweDAsCS8qMGInMDAwMCwwMDAxICovCisJUENJX0JSSURHRV9WRU5ET1JfQVRJLAkJLyowYicwMDAwLDAwMTAqLworCVBDSV9CUklER0VfVkVORE9SX0FNRCwJCS8qMGInMDAwMCwwMTAwKi8KKwlQQ0lfQlJJREdFX1ZFTkRPUl9TSVMsCQkvKjBiJzAwMDAsMTAwMCovCisJUENJX0JSSURHRV9WRU5ET1JfVU5LTk9XTiwJLyowYicwMTAwLDAwMDAqLworCVBDSV9CUklER0VfVkVORE9SX01BWCwKK307CisKK3N0cnVjdCBydGxfcnhfZGVzYyB7CisJdTMyIGR3b3JkWzhdOworfSBfX3BhY2tlZDsKKworc3RydWN0IHJ0bF90eF9kZXNjIHsKKwl1MzIgZHdvcmRbMTZdOworfSBfX3BhY2tlZDsKKworc3RydWN0IHJ0bF90eF9jbWRfZGVzYyB7CisJdTMyIGR3b3JkWzE2XTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBydGw4MTkyX3R4X3JpbmcgeworCXN0cnVjdCBydGxfdHhfZGVzYyAqZGVzYzsKKwlkbWFfYWRkcl90IGRtYTsKKwl1bnNpZ25lZCBpbnQgaWR4OworCXVuc2lnbmVkIGludCBlbnRyaWVzOworCXN0cnVjdCBza19idWZmX2hlYWQgcXVldWU7Cit9OworCitzdHJ1Y3QgcnRsODE5Ml9yeF9yaW5nIHsKKwlzdHJ1Y3QgcnRsX3J4X2Rlc2MgKmRlc2M7CisJZG1hX2FkZHJfdCBkbWE7CisJdW5zaWduZWQgaW50IGlkeDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqcnhfYnVmW1JUTF9QQ0lfTUFYX1JYX0NPVU5UXTsKK307CisKK3N0cnVjdCBydGxfcGNpIHsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKKworCWJvb2wgZHJpdmVyX2lzX2dvaW5ndG9fdW5sb2FkOworCWJvb2wgdXBfZmlyc3RfdGltZTsKKwlib29sIGJlaW5nX2luaXRfYWRhcHRlcjsKKwlib29sIGlycV9lbmFibGVkOworCisJLypUeCAqLworCXN0cnVjdCBydGw4MTkyX3R4X3JpbmcgdHhfcmluZ1tSVExfUENJX01BWF9UWF9RVUVVRV9DT1VOVF07CisJaW50IHR4cmluZ2NvdW50W1JUTF9QQ0lfTUFYX1RYX1FVRVVFX0NPVU5UXTsKKwl1MzIgdHJhbnNtaXRfY29uZmlnOworCisJLypSeCAqLworCXN0cnVjdCBydGw4MTkyX3J4X3JpbmcgcnhfcmluZ1tSVExfUENJX01BWF9SWF9RVUVVRV07CisJaW50IHJ4cmluZ2NvdW50OworCXUxNiByeGJ1ZmZlcnNpemU7CisJdTMyIHJlY2VpdmVfY29uZmlnOworCisJLyppcnEgKi8KKwl1OCBpcnFfYWxsb2M7CisJdTMyIGlycV9tYXNrWzJdOworCisJLypCY24gY29udHJvbCByZWdpc3RlciBzZXR0aW5nICovCisJdTMyIHJlZ19iY25fY3RybF92YWw7CisKKwkgLypBU1BNKi8gdTggY29uc3RfcGNpX2FzcG07CisJdTggY29uc3RfYW1kcGNpX2FzcG07CisJdTggY29uc3RfaHdzd19yZm9mZl9kMzsKKwl1OCBjb25zdF9zdXBwb3J0X3BjaWFzcG07CisJLypwY2ktZSBicmlkZ2UgKi8KKwl1OCBjb25zdF9ob3N0cGNpX2FzcG1fc2V0dGluZzsKKwkvKnBjaS1lIGRldmljZSAqLworCXU4IGNvbnN0X2RldmljZXBjaV9hc3BtX3NldHRpbmc7CisJLypJZiBpdCBzdXBwb3J0cyBBU1BNLCBPZmZzZXRbNTYwaF0gPSAweDQwLAorCSAgIG90aGVyd2lzZSBPZmZzZXRbNTYwaF0gPSAweDAwLiAqLworCWJvb2wgYl9zdXBwb3J0X2FzcG07CisJYm9vbCBiX3N1cHBvcnRfYmFja2Rvb3I7CisKKwkvKlFPUyAmIEVEQ0EgKi8KKwllbnVtIGFjbV9tZXRob2QgYWNtX21ldGhvZDsKK307CisKK3N0cnVjdCBtcF9hZGFwdGVyIHsKKwl1OCBsaW5rY3RybF9yZWc7CisKKwl1OCBidXNudW1iZXI7CisJdTggZGV2bnVtYmVyOworCXU4IGZ1bmNudW1iZXI7CisKKwl1OCBwY2licmlkZ2VfYnVzbnVtOworCXU4IHBjaWJyaWRnZV9kZXZudW07CisJdTggcGNpYnJpZGdlX2Z1bmNudW07CisKKwl1OCBwY2licmlkZ2VfdmVuZG9yOworCXUxNiBwY2licmlkZ2VfdmVuZG9yaWQ7CisJdTE2IHBjaWJyaWRnZV9kZXZpY2VpZDsKKworCXUzMiBwY2ljZmdfYWRkcnBvcnQ7CisJdTggbnVtNGJ5dGVzOworCisJdTggcGNpYnJpZGdlX3BjaWVoZHJfb2Zmc2V0OworCXU4IHBjaWJyaWRnZV9saW5rY3RybHJlZzsKKworCWJvb2wgYW1kX2wxX3BhdGNoOworfTsKKworc3RydWN0IHJ0bF9wY2lfcHJpdiB7CisJc3RydWN0IHJ0bF9wY2kgZGV2OworCXN0cnVjdCBtcF9hZGFwdGVyIG5kaXNfYWRhcHRlcjsKKwlzdHJ1Y3QgcnRsX2xlZF9jdGwgbGVkY3RsOworfTsKKworI2RlZmluZSBydGxfcGNpcHJpdihodykJCSgoKHN0cnVjdCBydGxfcGNpX3ByaXYgKikocnRsX3ByaXYoaHcpKS0+cHJpdikpCisjZGVmaW5lIHJ0bF9wY2lkZXYocGNpcHJpdikJKCYoKHBjaXByaXYpLT5kZXYpKQorCitpbnQgcnRsX3BjaV9yZXNldF90cnhfcmluZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CisKK2V4dGVybiBzdHJ1Y3QgcnRsX2ludGZfb3BzIHJ0bF9wY2lfb3BzOworCitpbnQgX19kZXZpbml0IHJ0bF9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKTsKK3ZvaWQgcnRsX3BjaV9kaXNjb25uZWN0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKK2ludCBydGxfcGNpX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSk7CitpbnQgcnRsX3BjaV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpOworCitzdGF0aWMgaW5saW5lIHU4IHBjaV9yZWFkOF9zeW5jKHN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiwgdTMyIGFkZHIpCit7CisJcmV0dXJuIDB4ZmYgJiByZWFkYigodTggKikgcnRscHJpdi0+aW8ucGNpX21lbV9zdGFydCArIGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIHUxNiBwY2lfcmVhZDE2X3N5bmMoc3RydWN0IHJ0bF9wcml2ICpydGxwcml2LCB1MzIgYWRkcikKK3sKKwlyZXR1cm4gcmVhZHcoKHU4ICopIHJ0bHByaXYtPmlvLnBjaV9tZW1fc3RhcnQgKyBhZGRyKTsKK30KKworc3RhdGljIGlubGluZSB1MzIgcGNpX3JlYWQzMl9zeW5jKHN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiwgdTMyIGFkZHIpCit7CisJcmV0dXJuIHJlYWRsKCh1OCAqKSBydGxwcml2LT5pby5wY2lfbWVtX3N0YXJ0ICsgYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwY2lfd3JpdGU4X2FzeW5jKHN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiwgdTMyIGFkZHIsIHU4IHZhbCkKK3sKKwl3cml0ZWIodmFsLCAodTggKikgcnRscHJpdi0+aW8ucGNpX21lbV9zdGFydCArIGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcGNpX3dyaXRlMTZfYXN5bmMoc3RydWN0IHJ0bF9wcml2ICpydGxwcml2LAorCQkJCSAgICAgdTMyIGFkZHIsIHUxNiB2YWwpCit7CisJd3JpdGV3KHZhbCwgKHU4ICopIHJ0bHByaXYtPmlvLnBjaV9tZW1fc3RhcnQgKyBhZGRyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBjaV93cml0ZTMyX2FzeW5jKHN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiwKKwkJCQkgICAgIHUzMiBhZGRyLCB1MzIgdmFsKQoreworCXdyaXRlbCh2YWwsICh1OCAqKSBydGxwcml2LT5pby5wY2lfbWVtX3N0YXJ0ICsgYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBydGxfcGNpX3Jhd193cml0ZV9wb3J0X3Vsb25nKHUzMiBwb3J0LCB1MzIgdmFsKQoreworCW91dGwodmFsLCBwb3J0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJ0bF9wY2lfcmF3X3dyaXRlX3BvcnRfdWNoYXIodTMyIHBvcnQsIHU4IHZhbCkKK3sKKwlvdXRiKHZhbCwgcG9ydCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBydGxfcGNpX3Jhd19yZWFkX3BvcnRfdWNoYXIodTMyIHBvcnQsIHU4ICpwdmFsKQoreworCSpwdmFsID0gaW5iKHBvcnQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcnRsX3BjaV9yYXdfcmVhZF9wb3J0X3VzaG9ydCh1MzIgcG9ydCwgdTE2ICpwdmFsKQoreworCSpwdmFsID0gaW53KHBvcnQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcnRsX3BjaV9yYXdfcmVhZF9wb3J0X3Vsb25nKHUzMiBwb3J0LCB1MzIgKnB2YWwpCit7CisJKnB2YWwgPSBpbmwocG9ydCk7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9wcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9wcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyMzI2YzEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3BzLmMKQEAgLTAsMCArMSw0OTMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQoYykgMjAwOS0yMDEwICBSZWFsdGVrIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAsIFVTQQorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgTElDRU5TRS4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogd2xhbmZhZSA8d2xhbmZhZUByZWFsdGVrLmNvbT4KKyAqIFJlYWx0ZWsgQ29ycG9yYXRpb24sIE5vLiAyLCBJbm5vdmF0aW9uIFJvYWQgSUksIEhzaW5jaHUgU2NpZW5jZSBQYXJrLAorICogSHNpbmNodSAzMDAsIFRhaXdhbi4KKyAqCisgKiBMYXJyeSBGaW5nZXIgPExhcnJ5LkZpbmdlckBsd2Zpbmdlci5uZXQ+CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAid2lmaS5oIgorI2luY2x1ZGUgImJhc2UuaCIKKyNpbmNsdWRlICJwcy5oIgorCitib29sIHJ0bF9wc19lbmFibGVfbmljKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BzX2N0bCAqcHBzYyA9IHJ0bF9wc2MocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX2hhbCAqcnRsaGFsID0gcnRsX2hhbChydGxfcHJpdihodykpOworCWJvb2wgaW5pdF9zdGF0dXMgPSB0cnVlOworCisJLyo8MT4gcmVzZXQgdHJ4IHJpbmcgKi8KKwlpZiAocnRsaGFsLT5pbnRlcmZhY2UgPT0gSU5URl9QQ0kpCisJCXJ0bHByaXYtPmludGZfb3BzLT5yZXNldF90cnhfcmluZyhodyk7CisKKwlpZiAoaXNfaGFsX3N0b3AocnRsaGFsKSkKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19XQVJOSU5HLAorCQkJICgiRHJpdmVyIGlzIGFscmVhZHkgZG93biFcbiIpKTsKKworCS8qPDI+IEVuYWJsZSBBZGFwdGVyICovCisJcnRscHJpdi0+Y2ZnLT5vcHMtPmh3X2luaXQoaHcpOworCVJUX0NMRUFSX1BTX0xFVkVMKHBwc2MsIFJUX1JGX09GRl9MRVZMX0hBTFRfTklDKTsKKwkvKmluaXRfc3RhdHVzID0gZmFsc2U7ICovCisKKwkvKjwzPiBFbmFibGUgSW50ZXJydXB0ICovCisJcnRscHJpdi0+Y2ZnLT5vcHMtPmVuYWJsZV9pbnRlcnJ1cHQoaHcpOworCisJLyo8ZW5hYmxlIHRpbWVyPiAqLworCXJ0bF93YXRjaF9kb2dfdGltZXJfY2FsbGJhY2soKHVuc2lnbmVkIGxvbmcpaHcpOworCisJcmV0dXJuIGluaXRfc3RhdHVzOworfQorRVhQT1JUX1NZTUJPTChydGxfcHNfZW5hYmxlX25pYyk7CisKK2Jvb2wgcnRsX3BzX2Rpc2FibGVfbmljKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCWJvb2wgc3RhdHVzID0gdHJ1ZTsKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisKKwkvKjwxPiBTdG9wIGFsbCB0aW1lciAqLworCXJ0bF9kZWluaXRfZGVmZXJyZWRfd29yayhodyk7CisKKwkvKjwyPiBEaXNhYmxlIEludGVycnVwdCAqLworCXJ0bHByaXYtPmNmZy0+b3BzLT5kaXNhYmxlX2ludGVycnVwdChodyk7CisKKwkvKjwzPiBEaXNhYmxlIEFkYXB0ZXIgKi8KKwlydGxwcml2LT5jZmctPm9wcy0+aHdfZGlzYWJsZShodyk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorRVhQT1JUX1NZTUJPTChydGxfcHNfZGlzYWJsZV9uaWMpOworCitib29sIHJ0bF9wc19zZXRfcmZfc3RhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgZW51bSByZl9wd3JzdGF0ZSBzdGF0ZV90b3NldCwKKwkJCSB1MzIgY2hhbmdlc291cmNlLCBib29sIHByb3RlY3Rfb3Jfbm90KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BzX2N0bCAqcHBzYyA9IHJ0bF9wc2MocnRsX3ByaXYoaHcpKTsKKwllbnVtIHJmX3B3cnN0YXRlIHJ0c3RhdGU7CisJYm9vbCBiX2FjdGlvbmFsbG93ZWQgPSBmYWxzZTsKKwl1MTYgcmZ3YWl0X2NudCA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnOworCisJLypwcm90ZWN0X29yX25vdCA9IHRydWU7ICovCisKKwlpZiAocHJvdGVjdF9vcl9ub3QpCisJCWdvdG8gbm9fcHJvdGVjdDsKKworCS8qCisJICpPbmx5IG9uZSB0aHJlYWQgY2FuIGNoYW5nZQorCSAqdGhlIFJGIHN0YXRlIGF0IG9uZSB0aW1lLCBhbmQgb3RoZXJzCisJICpzaG91bGQgd2FpdCB0byBiZSBleGVjdXRlZC4KKwkgKi8KKwl3aGlsZSAodHJ1ZSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcnRscHJpdi0+bG9ja3MucmZfcHNfbG9jaywgZmxhZyk7CisJCWlmIChwcHNjLT5yZmNoYW5nZV9pbnByb2dyZXNzKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGxwcml2LT5sb2Nrcy5yZl9wc19sb2NrLAorCQkJCQkgICAgICAgZmxhZyk7CisKKwkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfV0FSTklORywKKwkJCQkgKCJSRiBDaGFuZ2UgaW4gcHJvZ3Jlc3MhIgorCQkJCSAgIldhaXQgdG8gc2V0Li5zdGF0ZV90b3NldCglZCkuXG4iLAorCQkJCSAgc3RhdGVfdG9zZXQpKTsKKworCQkJLyogU2V0IFJGIGFmdGVyIHRoZSBwcmV2aW91cyBhY3Rpb24gaXMgZG9uZS4gICovCisJCQl3aGlsZSAocHBzYy0+cmZjaGFuZ2VfaW5wcm9ncmVzcykgeworCQkJCXJmd2FpdF9jbnQrKzsKKwkJCQltZGVsYXkoMSk7CisKKwkJCQkvKgorCQkJCSAqV2FpdCB0b28gbG9uZywgcmV0dXJuIGZhbHNlIHRvIGF2b2lkCisJCQkJICp0byBiZSBzdHVjayBoZXJlLgorCQkJCSAqLworCQkJCWlmIChyZndhaXRfY250ID4gMTAwKQorCQkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCX0gZWxzZSB7CisJCQlwcHNjLT5yZmNoYW5nZV9pbnByb2dyZXNzID0gdHJ1ZTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0bHByaXYtPmxvY2tzLnJmX3BzX2xvY2ssCisJCQkJCSAgICAgICBmbGFnKTsKKwkJCWJyZWFrOworCQl9CisJfQorCitub19wcm90ZWN0OgorCXJ0c3RhdGUgPSBwcHNjLT5yZnB3cl9zdGF0ZTsKKworCXN3aXRjaCAoc3RhdGVfdG9zZXQpIHsKKwljYXNlIEVSRk9OOgorCQlwcHNjLT5yZm9mZl9yZWFzb24gJj0gKH5jaGFuZ2Vzb3VyY2UpOworCisJCWlmICgoY2hhbmdlc291cmNlID09IFJGX0NIQU5HRV9CWV9IVykgJiYKKwkJICAgIChwcHNjLT5iX2h3cmFkaW9vZmYgPT0gdHJ1ZSkpIHsKKwkJCXBwc2MtPmJfaHdyYWRpb29mZiA9IGZhbHNlOworCQl9CisKKwkJaWYgKCFwcHNjLT5yZm9mZl9yZWFzb24pIHsKKwkJCXBwc2MtPnJmb2ZmX3JlYXNvbiA9IDA7CisJCQliX2FjdGlvbmFsbG93ZWQgPSB0cnVlOworCQl9CisKKwkJYnJlYWs7CisKKwljYXNlIEVSRk9GRjoKKworCQlpZiAoKGNoYW5nZXNvdXJjZSA9PSBSRl9DSEFOR0VfQllfSFcpCisJCSAgICAmJiAocHBzYy0+Yl9od3JhZGlvb2ZmID09IGZhbHNlKSkgeworCQkJcHBzYy0+Yl9od3JhZGlvb2ZmID0gdHJ1ZTsKKwkJfQorCisJCXBwc2MtPnJmb2ZmX3JlYXNvbiB8PSBjaGFuZ2Vzb3VyY2U7CisJCWJfYWN0aW9uYWxsb3dlZCA9IHRydWU7CisJCWJyZWFrOworCisJY2FzZSBFUkZTTEVFUDoKKwkJcHBzYy0+cmZvZmZfcmVhc29uIHw9IGNoYW5nZXNvdXJjZTsKKwkJYl9hY3Rpb25hbGxvd2VkID0gdHJ1ZTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX0VNRVJHLAorCQkJICgic3dpdGNoIGNhc2Ugbm90IHByb2Nlc3NcbiIpKTsKKwkJYnJlYWs7CisJfQorCisJaWYgKGJfYWN0aW9uYWxsb3dlZCkKKwkJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9yZl9wb3dlcl9zdGF0ZShodywgc3RhdGVfdG9zZXQpOworCisJaWYgKCFwcm90ZWN0X29yX25vdCkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcnRscHJpdi0+bG9ja3MucmZfcHNfbG9jaywgZmxhZyk7CisJCXBwc2MtPnJmY2hhbmdlX2lucHJvZ3Jlc3MgPSBmYWxzZTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnRscHJpdi0+bG9ja3MucmZfcHNfbG9jaywgZmxhZyk7CisJfQorCisJcmV0dXJuIGJfYWN0aW9uYWxsb3dlZDsKK30KK0VYUE9SVF9TWU1CT0wocnRsX3BzX3NldF9yZl9zdGF0ZSk7CisKK3N0YXRpYyB2b2lkIF9ydGxfcHNfaW5hY3RpdmVfcHMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bF9wcml2KGh3KSk7CisJc3RydWN0IHJ0bF9wc19jdGwgKnBwc2MgPSBydGxfcHNjKHJ0bF9wcml2KGh3KSk7CisKKwlwcHNjLT5iX3N3cmZfcHJvY2Vzc2luZyA9IHRydWU7CisKKwlpZiAocHBzYy0+aW5hY3RpdmVfcHdyc3RhdGUgPT0gRVJGT04gJiYgcnRsaGFsLT5pbnRlcmZhY2UgPT0gSU5URl9QQ0kpIHsKKwkJaWYgKChwcHNjLT5yZWdfcmZwc19sZXZlbCAmIFJUX1JGX09GRl9MRVZMX0FTUE0pICYmCisJCSAgICBSVF9JTl9QU19MRVZFTChwcHNjLCBSVF9SRl9PRkZfTEVWTF9BU1BNKSAmJgorCQkgICAgcnRsaGFsLT5pbnRlcmZhY2UgPT0gSU5URl9QQ0kpIHsKKwkJCXJ0bHByaXYtPmludGZfb3BzLT5kaXNhYmxlX2FzcG0oaHcpOworCQkJUlRfQ0xFQVJfUFNfTEVWRUwocHBzYywgUlRfUkZfT0ZGX0xFVkxfQVNQTSk7CisJCX0KKwl9CisKKwlydGxfcHNfc2V0X3JmX3N0YXRlKGh3LCBwcHNjLT5pbmFjdGl2ZV9wd3JzdGF0ZSwKKwkJCSAgICBSRl9DSEFOR0VfQllfSVBTLCBmYWxzZSk7CisKKwlpZiAocHBzYy0+aW5hY3RpdmVfcHdyc3RhdGUgPT0gRVJGT0ZGICYmCisJICAgIHJ0bGhhbC0+aW50ZXJmYWNlID09IElOVEZfUENJKSB7CisJCWlmIChwcHNjLT5yZWdfcmZwc19sZXZlbCAmIFJUX1JGX09GRl9MRVZMX0FTUE0pIHsKKwkJCXJ0bHByaXYtPmludGZfb3BzLT5lbmFibGVfYXNwbShodyk7CisJCQlSVF9TRVRfUFNfTEVWRUwocHBzYywgUlRfUkZfT0ZGX0xFVkxfQVNQTSk7CisJCX0KKwl9CisKKwlwcHNjLT5iX3N3cmZfcHJvY2Vzc2luZyA9IGZhbHNlOworfQorCit2b2lkIHJ0bF9pcHNfbmljX29mZl93cV9jYWxsYmFjayh2b2lkICpkYXRhKQoreworCXN0cnVjdCBydGxfd29ya3MgKnJ0bHdvcmtzID0KKwkgICAgY29udGFpbmVyX29mX2R3b3JrX3J0bChkYXRhLCBzdHJ1Y3QgcnRsX3dvcmtzLCBpcHNfbmljX29mZl93cSk7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBydGx3b3Jrcy0+aHc7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bF9wcml2KGh3KSk7CisJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX3BzX2N0bCAqcHBzYyA9IHJ0bF9wc2MocnRsX3ByaXYoaHcpKTsKKwllbnVtIHJmX3B3cnN0YXRlIHJ0c3RhdGU7CisKKwlpZiAobWFjLT5vcG1vZGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgeworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX1dBUk5JTkcsCisJCQkgKCJub3Qgc3RhdGlvbiByZXR1cm5cbiIpKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChpc19oYWxfc3RvcChydGxoYWwpKQorCQlyZXR1cm47CisKKwlpZiAocnRscHJpdi0+c2VjLmJlaW5nX3NldGtleSkKKwkJcmV0dXJuOworCisJaWYgKHBwc2MtPmJfaW5hY3RpdmVwcykgeworCQlydHN0YXRlID0gcHBzYy0+cmZwd3Jfc3RhdGU7CisKKwkJLyoKKwkJICpEbyBub3QgZW50ZXIgSVBTIGluIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKwkJICooMSkgUkYgaXMgYWxyZWFkeSBPRkYgb3IgU2xlZXAKKwkJICooMikgYl9zd3JmX3Byb2Nlc3NpbmcgKGluZGljYXRlcyB0aGUgSVBTIGlzIHN0aWxsIHVuZGVyIGdvaW5nKQorCQkgKigzKSBDb25uZWN0dGVkIChvbmx5IGRpc2Nvbm5lY3RlZCBjYW4gdHJpZ2dlciBJUFMpCisJCSAqKDQpIElCU1MgKHNlbmQgQmVhY29uKQorCQkgKig1KSBBUCBtb2RlIChzZW5kIEJlYWNvbikKKwkJICooNikgbW9uaXRvciBtb2RlIChyY3YgcGFja2V0KQorCQkgKi8KKworCQlpZiAocnRzdGF0ZSA9PSBFUkZPTiAmJgorCQkgICAgIXBwc2MtPmJfc3dyZl9wcm9jZXNzaW5nICYmCisJCSAgICAobWFjLT5saW5rX3N0YXRlID09IE1BQzgwMjExX05PTElOSykgJiYKKwkJICAgICFtYWMtPmFjdF9zY2FubmluZykgeworCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9SRiwgREJHX1RSQUNFLAorCQkJCSAoIklQU0VudGVyKCk6IFR1cm4gb2ZmIFJGLlxuIikpOworCisJCQlwcHNjLT5pbmFjdGl2ZV9wd3JzdGF0ZSA9IEVSRk9GRjsKKwkJCXBwc2MtPmJfaW5fcG93ZXJzYXZlbW9kZSA9IHRydWU7CisKKwkJCS8qcnRsX3BjaV9yZXNldF90cnhfcmluZyhodyk7ICovCisJCQlfcnRsX3BzX2luYWN0aXZlX3BzKGh3KTsKKwkJfQorCX0KK30KKwordm9pZCBydGxfaXBzX25pY19vZmYoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCisJLyoKKwkgKmJlY2F1c2Ugd2hlbiBsaW5rIHdpdGggYXAsIG1hYzgwMjExIHdpbGwgYXNrIHVzCisJICp0byBkaXNhYmxlIG5pYyBxdWlja2x5IGFmdGVyIHNjYW4gYmVmb3JlIGxpbmtpbmcsCisJICp0aGlzIHdpbGwgY2F1c2UgbGluayBmYWlsZWQsIHNvIHdlIGRlbGF5IDEwMG1zIGhlcmUKKwkgKi8KKwlxdWV1ZV9kZWxheWVkX3dvcmsocnRscHJpdi0+d29ya3MucnRsX3dxLAorCQkJICAgJnJ0bHByaXYtPndvcmtzLmlwc19uaWNfb2ZmX3dxLCBNU0VDUygxMDApKTsKK30KKwordm9pZCBydGxfaXBzX25pY19vbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9wc19jdGwgKnBwc2MgPSBydGxfcHNjKHJ0bF9wcml2KGh3KSk7CisJZW51bSByZl9wd3JzdGF0ZSBydHN0YXRlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcnRscHJpdi0+bG9ja3MuaXBzX2xvY2ssIGZsYWdzKTsKKworCWlmIChwcHNjLT5iX2luYWN0aXZlcHMpIHsKKwkJcnRzdGF0ZSA9IHBwc2MtPnJmcHdyX3N0YXRlOworCisJCWlmIChydHN0YXRlICE9IEVSRk9OICYmCisJCSAgICAhcHBzYy0+Yl9zd3JmX3Byb2Nlc3NpbmcgJiYKKwkJICAgIHBwc2MtPnJmb2ZmX3JlYXNvbiA8PSBSRl9DSEFOR0VfQllfSVBTKSB7CisKKwkJCXBwc2MtPmluYWN0aXZlX3B3cnN0YXRlID0gRVJGT047CisJCQlwcHNjLT5iX2luX3Bvd2Vyc2F2ZW1vZGUgPSBmYWxzZTsKKworCQkJX3J0bF9wc19pbmFjdGl2ZV9wcyhodyk7CisJCX0KKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGxwcml2LT5sb2Nrcy5pcHNfbG9jaywgZmxhZ3MpOworfQorCisvKmZvciBGVyBMUFMqLworCisvKgorICpEZXRlcm1pbmUgaWYgd2UgY2FuIHNldCBGdyBpbnRvIFBTIG1vZGUKKyAqaW4gY3VycmVudCBjb25kaXRpb24uUmV0dXJuIFRSVUUgaWYgaXQKKyAqY2FuIGVudGVyIFBTIG1vZGUuCisgKi8KK3N0YXRpYyBib29sIHJ0bF9nZXRfZndscHNfZG96ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX3BzX2N0bCAqcHBzYyA9IHJ0bF9wc2MocnRsX3ByaXYoaHcpKTsKKwl1MzIgcHNfdGltZWRpZmY7CisKKwlwc190aW1lZGlmZiA9IGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtCisJCQkJICAgICAgIHBwc2MtPmxhc3RfZGVsYXlscHNfc3RhbXBfamlmZmllcyk7CisKKwlpZiAocHNfdGltZWRpZmYgPCAyMDAwKSB7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUE9XRVIsIERCR19MT1VELAorCQkJICgiRGVsYXkgZW50ZXIgRncgTFBTIGZvciBESENQLCBBUlAsIgorCQkJICAiIG9yIEVBUE9MIGV4Y2hhbmdpbmcgc3RhdGUuXG4iKSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlpZiAobWFjLT5saW5rX3N0YXRlICE9IE1BQzgwMjExX0xJTktFRCkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKG1hYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyogQ2hhbmdlIGN1cnJlbnQgYW5kIGRlZmF1bHQgcHJlYW1ibGUgbW9kZS4qLworc3RhdGljIHZvaWQgcnRsX2xwc19zZXRfcHNtb2RlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBydF9wc21vZGUpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfbWFjICptYWMgPSBydGxfbWFjKHJ0bF9wcml2KGh3KSk7CisJc3RydWN0IHJ0bF9wc19jdGwgKnBwc2MgPSBydGxfcHNjKHJ0bF9wcml2KGh3KSk7CisJdTggcnB3bV92YWwsIGZ3X3B3cm1vZGU7CisKKwlpZiAobWFjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCisJCXJldHVybjsKKworCWlmIChtYWMtPmxpbmtfc3RhdGUgIT0gTUFDODAyMTFfTElOS0VEKQorCQlyZXR1cm47CisKKwlpZiAocHBzYy0+ZG90MTFfcHNtb2RlID09IHJ0X3BzbW9kZSkKKwkJcmV0dXJuOworCisJLyogVXBkYXRlIHBvd2VyIHNhdmUgbW9kZSBjb25maWd1cmVkLiAqLworCXBwc2MtPmRvdDExX3BzbW9kZSA9IHJ0X3BzbW9kZTsKKworCS8qCisJICo8RlcgY29udHJvbCBMUFM+CisJICoxLiBFbnRlciBQUyBtb2RlCisJICogICBTZXQgUlBXTSB0byBGdyB0byB0dXJuIFJGIG9mZiBhbmQgc2VuZCBIMkMgZndfcHdybW9kZQorCSAqICAgY21kIHRvIHNldCBGdyBpbnRvIFBTIG1vZGUuCisJICoyLiBMZWF2ZSBQUyBtb2RlCisJICogICBTZW5kIEgyQyBmd19wd3Jtb2RlIGNtZCB0byBGdyB0byBzZXQgRncgaW50byBBY3RpdmUKKwkgKiAgIG1vZGUgYW5kIHNldCBSUFdNIHRvIHR1cm4gUkYgb24uCisJICovCisKKwlpZiAoKHBwc2MtPmJfZndjdHJsX2xwcykgJiYgKHBwc2MtPmJfbGVpc3VyZV9wcykgJiYKKwkgICAgIHBwc2MtPnJlcG9ydF9saW5rZWQpIHsKKwkJYm9vbCBiX2Z3X2N1cnJlbnRfaW5wczsKKwkJaWYgKHBwc2MtPmRvdDExX3BzbW9kZSA9PSBFQUNUSVZFKSB7CisJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1JGLCBEQkdfRE1FU0csCisJCQkJICgiRlcgTFBTIGxlYXZlIHBzX21vZGU6JXhcbiIsCisJCQkJICBGV19QU19BQ1RJVkVfTU9ERSkpOworCisJCQlycHdtX3ZhbCA9IDB4MEM7CS8qIFJGIG9uICovCisJCQlmd19wd3Jtb2RlID0gRldfUFNfQUNUSVZFX01PREU7CisJCQlydGxwcml2LT5jZmctPm9wcy0+c2V0X2h3X3JlZyhodywgSFdfVkFSX1NFVF9SUFdNLAorCQkJCQkodTggKikgKCZycHdtX3ZhbCkpOworCQkJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9od19yZWcoaHcsCisJCQkJCUhXX1ZBUl9IMkNfRldfUFdSTU9ERSwKKwkJCQkJKHU4ICopICgmZndfcHdybW9kZSkpOworCQkJYl9md19jdXJyZW50X2lucHMgPSBmYWxzZTsKKworCQkJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9od19yZWcoaHcsCisJCQkJCUhXX1ZBUl9GV19QU01PREVfU1RBVFVTLAorCQkJCQkodTggKikgKCZiX2Z3X2N1cnJlbnRfaW5wcykpOworCisJCX0gZWxzZSB7CisJCQlpZiAocnRsX2dldF9md2xwc19kb3plKGh3KSkgeworCQkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUkYsIERCR19ETUVTRywKKwkJCQkJCSgiRlcgTFBTIGVudGVyIHBzX21vZGU6JXhcbiIsCisJCQkJCQkgcHBzYy0+ZndjdHJsX3BzbW9kZSkpOworCisJCQkJcnB3bV92YWwgPSAweDAyOwkvKiBSRiBvZmYgKi8KKwkJCQliX2Z3X2N1cnJlbnRfaW5wcyA9IHRydWU7CisJCQkJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9od19yZWcoaHcsCisJCQkJCQlIV19WQVJfRldfUFNNT0RFX1NUQVRVUywKKwkJCQkJCSh1OCAqKSAoJmJfZndfY3VycmVudF9pbnBzKSk7CisJCQkJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9od19yZWcoaHcsCisJCQkJCQlIV19WQVJfSDJDX0ZXX1BXUk1PREUsCisJCQkJCQkodTggKikgKCZwcHNjLT5md2N0cmxfcHNtb2RlKSk7CisKKwkJCQlydGxwcml2LT5jZmctPm9wcy0+c2V0X2h3X3JlZyhodywKKwkJCQkJCUhXX1ZBUl9TRVRfUlBXTSwKKwkJCQkJCSh1OCAqKSAoJnJwd21fdmFsKSk7CisJCQl9IGVsc2UgeworCQkJCS8qIFJlc2V0IHRoZSBwb3dlciBzYXZlIHJlbGF0ZWQgcGFyYW1ldGVycy4gKi8KKwkJCQlwcHNjLT5kb3QxMV9wc21vZGUgPSBFQUNUSVZFOworCQkJfQorCQl9CisJfQorfQorCisvKkVudGVyIHRoZSBsZWlzdXJlIHBvd2VyIHNhdmUgbW9kZS4qLwordm9pZCBydGxfbHBzX2VudGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfbWFjICptYWMgPSBydGxfbWFjKHJ0bF9wcml2KGh3KSk7CisJc3RydWN0IHJ0bF9wc19jdGwgKnBwc2MgPSBydGxfcHNjKHJ0bF9wcml2KGh3KSk7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXVuc2lnbmVkIGxvbmcgZmxhZzsKKworCWlmICghKHBwc2MtPmJfZndjdHJsX2xwcyAmJiBwcHNjLT5iX2xlaXN1cmVfcHMpKQorCQlyZXR1cm47CisKKwlpZiAocnRscHJpdi0+c2VjLmJlaW5nX3NldGtleSkKKwkJcmV0dXJuOworCisJaWYgKHJ0bHByaXYtPmxpbmtfaW5mby5iX2J1c3l0cmFmZmljKQorCQlyZXR1cm47CisKKwkvKnNsZWVwIGFmdGVyIGxpbmtlZCAxMHMsIHRvIGxldCBESENQIGFuZCA0LXdheSBoYW5kc2hha2Ugb2sgZW5vdWdoISEgKi8KKwlpZiAobWFjLT5jbnRfYWZ0ZXJfbGlua2VkIDwgNSkKKwkJcmV0dXJuOworCisJaWYgKG1hYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKQorCQlyZXR1cm47CisKKwlpZiAobWFjLT5saW5rX3N0YXRlICE9IE1BQzgwMjExX0xJTktFRCkKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJ0bHByaXYtPmxvY2tzLmxwc19sb2NrLCBmbGFnKTsKKworCWlmIChwcHNjLT5iX2xlaXN1cmVfcHMpIHsKKwkJLyogSWRsZSBmb3IgYSB3aGlsZSBpZiB3ZSBjb25uZWN0IHRvIEFQIGEgd2hpbGUgYWdvLiAqLworCQlpZiAobWFjLT5jbnRfYWZ0ZXJfbGlua2VkID49IDIpIHsKKwkJCWlmIChwcHNjLT5kb3QxMV9wc21vZGUgPT0gRUFDVElWRSkgeworCQkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUE9XRVIsIERCR19MT1VELAorCQkJCQkoIkVudGVyIDgwMi4xMSBwb3dlciBzYXZlIG1vZGUuLi5cbiIpKTsKKworCQkJCXJ0bF9scHNfc2V0X3BzbW9kZShodywgRUFVVE9QUyk7CisJCQl9CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnRscHJpdi0+bG9ja3MubHBzX2xvY2ssIGZsYWcpOworfQorCisvKkxlYXZlIHRoZSBsZWlzdXJlIHBvd2VyIHNhdmUgbW9kZS4qLwordm9pZCBydGxfbHBzX2xlYXZlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BzX2N0bCAqcHBzYyA9IHJ0bF9wc2MocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX2hhbCAqcnRsaGFsID0gcnRsX2hhbChydGxfcHJpdihodykpOworCXVuc2lnbmVkIGxvbmcgZmxhZzsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZydGxwcml2LT5sb2Nrcy5scHNfbG9jaywgZmxhZyk7CisKKwlpZiAocHBzYy0+Yl9md2N0cmxfbHBzICYmIHBwc2MtPmJfbGVpc3VyZV9wcykgeworCQlpZiAocHBzYy0+ZG90MTFfcHNtb2RlICE9IEVBQ1RJVkUpIHsKKworCQkJLypGSVggTUUgKi8KKwkJCXJ0bHByaXYtPmNmZy0+b3BzLT5lbmFibGVfaW50ZXJydXB0KGh3KTsKKworCQkJaWYgKHBwc2MtPnJlZ19yZnBzX2xldmVsICYgUlRfUkZfTFBTX0xFVkVMX0FTUE0gJiYKKwkJCSAgICBSVF9JTl9QU19MRVZFTChwcHNjLCBSVF9SRl9MUFNfTEVWRUxfQVNQTSkgJiYKKwkJCSAgICBydGxoYWwtPmludGVyZmFjZSA9PSBJTlRGX1BDSSkgeworCQkJCXJ0bHByaXYtPmludGZfb3BzLT5kaXNhYmxlX2FzcG0oaHcpOworCQkJCVJUX0NMRUFSX1BTX0xFVkVMKHBwc2MsIFJUX1JGX0xQU19MRVZFTF9BU1BNKTsKKwkJCX0KKworCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9QT1dFUiwgREJHX0xPVUQsCisJCQkJICgiQnVzeSBUcmFmZmljLExlYXZlIDgwMi4xMSBwb3dlciBzYXZlLi5cbiIpKTsKKworCQkJcnRsX2xwc19zZXRfcHNtb2RlKGh3LCBFQUNUSVZFKTsKKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGxwcml2LT5sb2Nrcy5scHNfbG9jaywgZmxhZyk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3BzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3BzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU1NmRhOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcHMuaApAQCAtMCwwICsxLDQzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDktMjAxMCAgUmVhbHRlayBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLCBVU0EKKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIHdsYW5mYWUgPHdsYW5mYWVAcmVhbHRlay5jb20+CisgKiBSZWFsdGVrIENvcnBvcmF0aW9uLCBOby4gMiwgSW5ub3ZhdGlvbiBSb2FkIElJLCBIc2luY2h1IFNjaWVuY2UgUGFyaywKKyAqIEhzaW5jaHUgMzAwLCBUYWl3YW4uCisgKgorICogTGFycnkgRmluZ2VyIDxMYXJyeS5GaW5nZXJAbHdmaW5nZXIubmV0PgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX1JFQUxURUtfUlRMX1BDSV9QU19IX18KKyNkZWZpbmUgX19SRUFMVEVLX1JUTF9QQ0lfUFNfSF9fCisKK2Jvb2wgcnRsX3BzX3NldF9yZl9zdGF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSBlbnVtIHJmX3B3cnN0YXRlIHN0YXRlX3Rvc2V0LCB1MzIgY2hhbmdlc291cmNlLAorCQkJIGJvb2wgcHJvdGVjdF9vcl9ub3QpOworYm9vbCBydGxfcHNfZW5hYmxlX25pYyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Citib29sIHJ0bF9wc19kaXNhYmxlX25pYyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Cit2b2lkIHJ0bF9pcHNfbmljX29mZihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Cit2b2lkIHJ0bF9pcHNfbmljX29uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3ZvaWQgcnRsX2lwc19uaWNfb2ZmX3dxX2NhbGxiYWNrKHZvaWQgKmRhdGEpOwordm9pZCBydGxfbHBzX2VudGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3ZvaWQgcnRsX2xwc19sZWF2ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcmMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTYzNDEwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9yYy5jCkBAIC0wLDAgKzEsMzI5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDktMjAxMCAgUmVhbHRlayBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLCBVU0EKKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIHdsYW5mYWUgPHdsYW5mYWVAcmVhbHRlay5jb20+CisgKiBSZWFsdGVrIENvcnBvcmF0aW9uLCBOby4gMiwgSW5ub3ZhdGlvbiBSb2FkIElJLCBIc2luY2h1IFNjaWVuY2UgUGFyaywKKyAqIEhzaW5jaHUgMzAwLCBUYWl3YW4uCisgKgorICogTGFycnkgRmluZ2VyIDxMYXJyeS5GaW5nZXJAbHdmaW5nZXIubmV0PgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgIndpZmkuaCIKKyNpbmNsdWRlICJiYXNlLmgiCisjaW5jbHVkZSAicmMuaCIKKworLyoKKyAqRmluZHMgdGhlIGhpZ2hlc3QgcmF0ZSBpbmRleCB3ZSBjYW4gdXNlCisgKmlmIHNrYiBpcyBzcGVjaWFsIGRhdGEgbGlrZSBESENQL0VBUE9MLCB3ZSBzZXQgc2hvdWxkCisgKml0IHRvIGxvd2VzdCByYXRlIENDS18xTSwgb3RoZXJ3aXNlIHdlIHNldCByYXRlIHRvCisgKkNDSzExTSBvciBPRkRNXzU0TSBiYXNlZCBvbiB3aXJlbGVzcyBtb2RlLgorICovCitzdGF0aWMgdTggX3J0bF9yY19nZXRfaGlnaGVzdF9yaXgoc3RydWN0IHJ0bF9wcml2ICpydGxwcml2LAorCQkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCBub3RfZGF0YSkKK3sKKwlzdHJ1Y3QgcnRsX21hYyAqcnRsbWFjID0gcnRsX21hYyhydGxwcml2KTsKKworCS8qCisJICptZ3QgdXNlIDFNLCBhbHRob3VnaCB3ZSBoYXZlIGNoZWNrIGl0CisJICpiZWZvcmUgdGhpcyBmdW5jdGlvbiB1c2UgcmF0ZV9jb250cm9sX3NlbmRfbG93LAorCSAqd2Ugc3RpbGwgY2hlY2sgaXQgaGVyZQorCSAqLworCWlmIChub3RfZGF0YSkKKwkJcmV0dXJuIHJ0bHByaXYtPmNmZy0+bWFwc1tSVExfUkNfQ0NLX1JBVEUxTV07CisKKwkvKgorCSAqdGhpcyByYXRlIGlzIG5vIHVzZSBmb3IgdHJ1ZSByYXRlLCBmaXJtd2FyZQorCSAqd2lsbCBjb250cm9sIHJhdGUgYXQgYWxsIGl0IGp1c3QgdXNlZCBmb3IKKwkgKjEuc2hvdyBpbiBpd2NvbmZpZyBpbiBCL0cgbW9kZQorCSAqMi5pbiBydGxfZ2V0X3RjYl9kZXNjIHdoZW4gd2UgY2hlY2sgcmF0ZSBpcworCSAqICAgICAgMU0gd2Ugd2lsbCBub3QgdXNlIEZXIHJhdGUgYnV0IHVzZXIgcmF0ZS4KKwkgKi8KKwlpZiAocnRsX2lzX3NwZWNpYWxfZGF0YShydGxwcml2LT5tYWM4MDIxMS5odywgc2tiLCB0cnVlKSkgeworCQlyZXR1cm4gcnRscHJpdi0+Y2ZnLT5tYXBzW1JUTF9SQ19DQ0tfUkFURTFNXTsKKwl9IGVsc2UgeworCQlpZiAocnRsbWFjLT5tb2RlID09IFdJUkVMRVNTX01PREVfQikKKwkJCXJldHVybiBydGxwcml2LT5jZmctPm1hcHNbUlRMX1JDX0NDS19SQVRFMTFNXTsKKwkJZWxzZQorCQkJcmV0dXJuIHJ0bHByaXYtPmNmZy0+bWFwc1tSVExfUkNfT0ZETV9SQVRFNTRNXTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9ydGxfcmNfcmF0ZV9zZXRfc2VyaWVzKHN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiwKKwkJCQkgICAgc3RydWN0IGllZWU4MDIxMV90eF9yYXRlICpyYXRlLAorCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGVfY29udHJvbCAqdHhyYywKKwkJCQkgICAgdTggdHJpZXMsIHU4IHJpeCwgaW50IHJ0c2N0c2VuYWJsZSwKKwkJCQkgICAgYm9vbCBub3RfZGF0YSkKK3sKKwlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxwcml2KTsKKworCXJhdGUtPmNvdW50ID0gdHJpZXM7CisJcmF0ZS0+aWR4ID0gKHJpeCA+IDB4MikgPyByaXggOiAweDI7CisKKwlpZiAoIW5vdF9kYXRhKSB7CisJCWlmICh0eHJjLT5zaG9ydF9wcmVhbWJsZSkKKwkJCXJhdGUtPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9SQ19VU0VfU0hPUlRfUFJFQU1CTEU7CisJCWlmIChtYWMtPmJ3XzQwKQorCQkJcmF0ZS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1JDXzQwX01IWl9XSURUSDsKKwkJaWYgKG1hYy0+c2dpXzIwIHx8IG1hYy0+c2dpXzQwKQorCQkJcmF0ZS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1JDX1NIT1JUX0dJOworCQlpZiAobWFjLT5odF9lbmFibGUpCisJCQlyYXRlLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfUkNfTUNTOworCX0KK30KKworc3RhdGljIHZvaWQgcnRsX2dldF9yYXRlKHZvaWQgKnBwcml2LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAorCQkJIHZvaWQgKnByaXZfc3RhLCBzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGVfY29udHJvbCAqdHhyYykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBwcHJpdjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdHhyYy0+c2tiOworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGUgKnJhdGVzID0gdHhfaW5mby0+Y29udHJvbC5yYXRlczsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOworCV9fbGUxNiBmYyA9IGhkci0+ZnJhbWVfY29udHJvbDsKKwl1OCB0cnlfcGVyX3JhdGUsIGksIHJpeDsKKwlib29sIG5vdF9kYXRhID0gIWllZWU4MDIxMV9pc19kYXRhKGZjKTsKKworCWlmIChyYXRlX2NvbnRyb2xfc2VuZF9sb3coc3RhLCBwcml2X3N0YSwgdHhyYykpCisJCXJldHVybjsKKworCXJpeCA9IF9ydGxfcmNfZ2V0X2hpZ2hlc3Rfcml4KHJ0bHByaXYsIHNrYiwgbm90X2RhdGEpOworCisJdHJ5X3Blcl9yYXRlID0gMTsKKwlfcnRsX3JjX3JhdGVfc2V0X3NlcmllcyhydGxwcml2LCAmcmF0ZXNbMF0sIHR4cmMsCisJCQkJdHJ5X3Blcl9yYXRlLCByaXgsIDEsIG5vdF9kYXRhKTsKKworCWlmICghbm90X2RhdGEpIHsKKwkJZm9yIChpID0gMTsgaSA8IDQ7IGkrKykKKwkJCV9ydGxfcmNfcmF0ZV9zZXRfc2VyaWVzKHJ0bHByaXYsICZyYXRlc1tpXSwKKwkJCQkJCXR4cmMsIGksIChyaXggLSBpKSwgMSwKKwkJCQkJCW5vdF9kYXRhKTsKKwl9Cit9CisKK3N0YXRpYyBib29sIF9ydGxfdHhfYWdncl9jaGVjayhzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYsIHUxNiB0aWQpCit7CisJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRscHJpdik7CisKKwlpZiAobWFjLT5hY3Rfc2Nhbm5pbmcpCisJCXJldHVybiBmYWxzZTsKKworCWlmIChtYWMtPmNudF9hZnRlcl9saW5rZWQgPCAzKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAobWFjLT50aWRzW3RpZF0uYWdnLmFnZ19zdGF0ZSA9PSBSVExfQUdHX09GRikKKwkJcmV0dXJuIHRydWU7CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qbWFjODAyMTEgUmF0ZSBDb250cm9sIGNhbGxiYWNrcyovCitzdGF0aWMgdm9pZCBydGxfdHhfc3RhdHVzKHZvaWQgKnBwcml2LAorCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCwKKwkJCSAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdm9pZCAqcHJpdl9zdGEsCisJCQkgIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcHByaXY7CisJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRscHJpdik7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKKwlfX2xlMTYgZmM7CisKKwloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CisJZmMgPSBoZHItPmZyYW1lX2NvbnRyb2w7CisKKwlpZiAoIXByaXZfc3RhIHx8ICFpZWVlODAyMTFfaXNfZGF0YShmYykpCisJCXJldHVybjsKKworCWlmIChydGxfaXNfc3BlY2lhbF9kYXRhKG1hYy0+aHcsIHNrYiwgdHJ1ZSkpCisJCXJldHVybjsKKworCWlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihpZWVlODAyMTFfZ2V0X0RBKGhkcikpCisJICAgIHx8IGlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKGllZWU4MDIxMV9nZXRfREEoaGRyKSkpCisJCXJldHVybjsKKworCS8qIENoZWNrIGlmIGFnZ3JlZ2F0aW9uIGhhcyB0byBiZSBlbmFibGVkIGZvciB0aGlzIHRpZCAqLworCWlmIChjb25mX2lzX2h0KCZtYWMtPmh3LT5jb25mKSAmJgorCSAgICAhKHNrYi0+cHJvdG9jb2wgPT0gY3B1X3RvX2JlMTYoRVRIX1BfUEFFKSkpIHsKKwkJaWYgKGllZWU4MDIxMV9pc19kYXRhX3FvcyhmYykpIHsKKwkJCXU4ICpxYywgdGlkOworCisJCQlxYyA9IGllZWU4MDIxMV9nZXRfcW9zX2N0bChoZHIpOworCQkJdGlkID0gcWNbMF0gJiAweGY7CisKKwkJCWlmIChfcnRsX3R4X2FnZ3JfY2hlY2socnRscHJpdiwgdGlkKSkKKwkJCQlpZWVlODAyMTFfc3RhcnRfdHhfYmFfc2Vzc2lvbihzdGEsIHRpZCwgNTAwMCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJ0bF9yYXRlX2luaXQodm9pZCAqcHByaXYsCisJCQkgIHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kLAorCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB2b2lkICpwcml2X3N0YSkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBwcHJpdjsKKwlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxwcml2KTsKKwl1OCBpc19odCA9IGNvbmZfaXNfaHQoJm1hYy0+aHctPmNvbmYpOworCisJaWYgKChtYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB8fAorCSAgICAobWFjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCkgfHwKKwkgICAgKG1hYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSkgeworCisJCXN3aXRjaCAoc2JhbmQtPmJhbmQpIHsKKwkJY2FzZSBJRUVFODAyMTFfQkFORF8yR0haOgorCQkJcnRscHJpdi0+cmF0ZV9wcml2LT5jdXJfcmF0ZXRhYl9pZHggPQorCQkJICAgIFJBVFJfSU5YX1dJUkVMRVNTX0c7CisJCQlpZiAoaXNfaHQpCisJCQkJcnRscHJpdi0+cmF0ZV9wcml2LT5jdXJfcmF0ZXRhYl9pZHggPQorCQkJCSAgICBSQVRSX0lOWF9XSVJFTEVTU19OR0I7CisJCQlicmVhazsKKwkJY2FzZSBJRUVFODAyMTFfQkFORF81R0haOgorCQkJcnRscHJpdi0+cmF0ZV9wcml2LT5jdXJfcmF0ZXRhYl9pZHggPQorCQkJICAgIFJBVFJfSU5YX1dJUkVMRVNTX0E7CisJCQlpZiAoaXNfaHQpCisJCQkJcnRscHJpdi0+cmF0ZV9wcml2LT5jdXJfcmF0ZXRhYl9pZHggPQorCQkJCSAgICBSQVRSX0lOWF9XSVJFTEVTU19OR0I7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfV0FSTklORywKKwkJCQkgKCJJbnZhbGlkIGJhbmRcbiIpKTsKKwkJCXJ0bHByaXYtPnJhdGVfcHJpdi0+Y3VyX3JhdGV0YWJfaWR4ID0KKwkJCSAgICBSQVRSX0lOWF9XSVJFTEVTU19OR0I7CisJCQlicmVhazsKKwkJfQorCisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUkFURSwgREJHX0RNRVNHLAorCQkJICgiQ2hvb3NpbmcgcmF0ZSB0YWJsZSBpbmRleDogJWRcbiIsCisJCQkgIHJ0bHByaXYtPnJhdGVfcHJpdi0+Y3VyX3JhdGV0YWJfaWR4KSk7CisKKwl9CisKK30KKworc3RhdGljIHZvaWQgcnRsX3JhdGVfdXBkYXRlKHZvaWQgKnBwcml2LAorCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kLAorCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHZvaWQgKnByaXZfc3RhLAorCQkJICAgIHUzMiBjaGFuZ2VkLAorCQkJICAgIGVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgb3Blcl9jaGFuX3R5cGUpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcHByaXY7CisJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRscHJpdik7CisJc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCA9IHJ0bF9oYWwocnRscHJpdik7CisJYm9vbCBvcGVyX2N3NDAgPSBmYWxzZSwgb3Blcl9zZ2k0MDsKKwlib29sIGxvY2FsX2N3NDAgPSBtYWMtPmJ3XzQwOworCWJvb2wgbG9jYWxfc2dpNDAgPSBtYWMtPnNnaV80MDsKKwl1OCBpc19odCA9IGNvbmZfaXNfaHQoJm1hYy0+aHctPmNvbmYpOworCisJaWYgKGNoYW5nZWQgJiBJRUVFODAyMTFfUkNfSFRfQ0hBTkdFRCkgeworCQlpZiAobWFjLT5vcG1vZGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKKwkJCXJldHVybjsKKworCQlpZiAocnRsaGFsLT5ody0+Y29uZi5jaGFubmVsX3R5cGUgPT0gTkw4MDIxMV9DSEFOX0hUNDBNSU5VUyB8fAorCQkgICAgcnRsaGFsLT5ody0+Y29uZi5jaGFubmVsX3R5cGUgPT0gTkw4MDIxMV9DSEFOX0hUNDBQTFVTKQorCQkJb3Blcl9jdzQwID0gdHJ1ZTsKKworCQlvcGVyX3NnaTQwID0gbWFjLT5zZ2lfNDA7CisKKwkJaWYgKChsb2NhbF9jdzQwICE9IG9wZXJfY3c0MCkgfHwgKGxvY2FsX3NnaTQwICE9IG9wZXJfc2dpNDApKSB7CisJCQlzd2l0Y2ggKHNiYW5kLT5iYW5kKSB7CisJCQljYXNlIElFRUU4MDIxMV9CQU5EXzJHSFo6CisJCQkJcnRscHJpdi0+cmF0ZV9wcml2LT5jdXJfcmF0ZXRhYl9pZHggPQorCQkJCSAgICBSQVRSX0lOWF9XSVJFTEVTU19HOworCQkJCWlmIChpc19odCkKKwkJCQkJcnRscHJpdi0+cmF0ZV9wcml2LT5jdXJfcmF0ZXRhYl9pZHggPQorCQkJCQkgICAgUkFUUl9JTlhfV0lSRUxFU1NfTkdCOworCQkJCWJyZWFrOworCQkJY2FzZSBJRUVFODAyMTFfQkFORF81R0haOgorCQkJCXJ0bHByaXYtPnJhdGVfcHJpdi0+Y3VyX3JhdGV0YWJfaWR4ID0KKwkJCQkgICAgUkFUUl9JTlhfV0lSRUxFU1NfQTsKKwkJCQlpZiAoaXNfaHQpCisJCQkJCXJ0bHByaXYtPnJhdGVfcHJpdi0+Y3VyX3JhdGV0YWJfaWR4ID0KKwkJCQkJICAgIFJBVFJfSU5YX1dJUkVMRVNTX05HQjsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19FTUVSRywKKwkJCQkJICgiSW52YWxpZCBiYW5kXG4iKSk7CisJCQkJcnRscHJpdi0+cmF0ZV9wcml2LT5jdXJfcmF0ZXRhYl9pZHggPQorCQkJCSAgICBSQVRSX0lOWF9XSVJFTEVTU19OR0I7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkICpydGxfcmF0ZV9hbGxvYyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJc3RydWN0IGRlbnRyeSAqZGVidWdmc2RpcikKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJcmV0dXJuIHJ0bHByaXY7Cit9CisKK3N0YXRpYyB2b2lkIHJ0bF9yYXRlX2ZyZWUodm9pZCAqcnRscHJpdikKK3sKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkICpydGxfcmF0ZV9hbGxvY19zdGEodm9pZCAqcHByaXYsCisJCQkJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgZ2ZwX3QgZ2ZwKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHBwcml2OworCXN0cnVjdCBydGxfcmF0ZV9wcml2ICpyYXRlX3ByaXY7CisKKwlyYXRlX3ByaXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcnRsX3JhdGVfcHJpdiksIGdmcCk7CisJaWYgKCFyYXRlX3ByaXYpIHsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19FTUVSRywKKwkJCSAoIlVuYWJsZSB0byBhbGxvY2F0ZSBwcml2YXRlIHJjIHN0cnVjdHVyZVxuIikpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlydGxwcml2LT5yYXRlX3ByaXYgPSByYXRlX3ByaXY7CisKKwlyZXR1cm4gcmF0ZV9wcml2OworfQorCitzdGF0aWMgdm9pZCBydGxfcmF0ZV9mcmVlX3N0YSh2b2lkICpydGxwcml2LAorCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdm9pZCAqcHJpdl9zdGEpCit7CisJc3RydWN0IHJ0bF9yYXRlX3ByaXYgKnJhdGVfcHJpdiA9IHByaXZfc3RhOworCWtmcmVlKHJhdGVfcHJpdik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmF0ZV9jb250cm9sX29wcyBydGxfcmF0ZV9vcHMgPSB7CisJLm1vZHVsZSA9IE5VTEwsCisJLm5hbWUgPSAicnRsX3JjIiwKKwkuYWxsb2MgPSBydGxfcmF0ZV9hbGxvYywKKwkuZnJlZSA9IHJ0bF9yYXRlX2ZyZWUsCisJLmFsbG9jX3N0YSA9IHJ0bF9yYXRlX2FsbG9jX3N0YSwKKwkuZnJlZV9zdGEgPSBydGxfcmF0ZV9mcmVlX3N0YSwKKwkucmF0ZV9pbml0ID0gcnRsX3JhdGVfaW5pdCwKKwkucmF0ZV91cGRhdGUgPSBydGxfcmF0ZV91cGRhdGUsCisJLnR4X3N0YXR1cyA9IHJ0bF90eF9zdGF0dXMsCisJLmdldF9yYXRlID0gcnRsX2dldF9yYXRlLAorfTsKKworaW50IHJ0bF9yYXRlX2NvbnRyb2xfcmVnaXN0ZXIodm9pZCkKK3sKKwlyZXR1cm4gaWVlZTgwMjExX3JhdGVfY29udHJvbF9yZWdpc3RlcigmcnRsX3JhdGVfb3BzKTsKK30KKwordm9pZCBydGxfcmF0ZV9jb250cm9sX3VucmVnaXN0ZXIodm9pZCkKK3sKKwlpZWVlODAyMTFfcmF0ZV9jb250cm9sX3VucmVnaXN0ZXIoJnJ0bF9yYXRlX29wcyk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3JjLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3JjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ2NjdjMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcmMuaApAQCAtMCwwICsxLDQwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDktMjAxMCAgUmVhbHRlayBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLCBVU0EKKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIHdsYW5mYWUgPHdsYW5mYWVAcmVhbHRlay5jb20+CisgKiBSZWFsdGVrIENvcnBvcmF0aW9uLCBOby4gMiwgSW5ub3ZhdGlvbiBSb2FkIElJLCBIc2luY2h1IFNjaWVuY2UgUGFyaywKKyAqIEhzaW5jaHUgMzAwLCBUYWl3YW4uCisgKgorICogTGFycnkgRmluZ2VyIDxMYXJyeS5GaW5nZXJAbHdmaW5nZXIubmV0PgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX1JUTF9SQ19IX18KKyNkZWZpbmUgX19SVExfUkNfSF9fCisKK3N0cnVjdCBydGxfcmF0ZV9wcml2IHsKKwl1OCBjdXJfcmF0ZXRhYl9pZHg7CisJdTggaHRfY2FwOworfTsKKworaW50IHJ0bF9yYXRlX2NvbnRyb2xfcmVnaXN0ZXIodm9pZCk7Cit2b2lkIHJ0bF9yYXRlX2NvbnRyb2xfdW5yZWdpc3Rlcih2b2lkKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9yZWdkLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3JlZ2QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzM2Y2E5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9yZWdkLmMKQEAgLTAsMCArMSw0MDAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQoYykgMjAwOS0yMDEwICBSZWFsdGVrIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAsIFVTQQorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgTElDRU5TRS4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogd2xhbmZhZSA8d2xhbmZhZUByZWFsdGVrLmNvbT4KKyAqIFJlYWx0ZWsgQ29ycG9yYXRpb24sIE5vLiAyLCBJbm5vdmF0aW9uIFJvYWQgSUksIEhzaW5jaHUgU2NpZW5jZSBQYXJrLAorICogSHNpbmNodSAzMDAsIFRhaXdhbi4KKyAqCisgKiBMYXJyeSBGaW5nZXIgPExhcnJ5LkZpbmdlckBsd2Zpbmdlci5uZXQ+CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAid2lmaS5oIgorI2luY2x1ZGUgInJlZ2QuaCIKKworc3RhdGljIHN0cnVjdCBjb3VudHJ5X2NvZGVfdG9fZW51bV9yZCBhbGxDb3VudHJpZXNbXSA9IHsKKwl7Q09VTlRSWV9DT0RFX0ZDQywgIlVTIn0sCisJe0NPVU5UUllfQ09ERV9JQywgIlVTIn0sCisJe0NPVU5UUllfQ09ERV9FVFNJLCAiRUMifSwKKwl7Q09VTlRSWV9DT0RFX1NQQUlOLCAiRUMifSwKKwl7Q09VTlRSWV9DT0RFX0ZSQU5DRSwgIkVDIn0sCisJe0NPVU5UUllfQ09ERV9NS0ssICJKUCJ9LAorCXtDT1VOVFJZX0NPREVfTUtLMSwgIkpQIn0sCisJe0NPVU5UUllfQ09ERV9JU1JBRUwsICJFQyJ9LAorCXtDT1VOVFJZX0NPREVfVEVMRUMsICJKUCJ9LAorCXtDT1VOVFJZX0NPREVfTUlDLCAiSlAifSwKKwl7Q09VTlRSWV9DT0RFX0dMT0JBTF9ET01BSU4sICJKUCJ9LAorCXtDT1VOVFJZX0NPREVfV09STERfV0lERV8xMywgIkVDIn0sCisJe0NPVU5UUllfQ09ERV9URUxFQ19ORVRHRUFSLCAiRUMifSwKK307CisKKy8qCisgKk9ubHkgdGhlc2UgY2hhbm5lbHMgYWxsIGFsbG93IGFjdGl2ZQorICpzY2FuIG9uIGFsbCB3b3JsZCByZWd1bGF0b3J5IGRvbWFpbnMKKyAqLworI2RlZmluZSBSVEw4MTl4XzJHSFpfQ0gwMV8xMQlcCisJUkVHX1JVTEUoMjQxMi0xMCwgMjQ2MisxMCwgNDAsIDAsIDIwLCAwKQorCisvKgorICpXZSBlbmFibGUgYWN0aXZlIHNjYW4gb24gdGhlc2UgYSBjYXNlCisgKmJ5IGNhc2UgYmFzaXMgYnkgcmVndWxhdG9yeSBkb21haW4KKyAqLworI2RlZmluZSBSVEw4MTl4XzJHSFpfQ0gxMl8xMwlcCisJUkVHX1JVTEUoMjQ2Ny0xMCwgMjQ3MisxMCwgNDAsIDAsIDIwLFwKKwlOTDgwMjExX1JSRl9QQVNTSVZFX1NDQU4pCisKKyNkZWZpbmUgUlRMODE5eF8yR0haX0NIMTQJXAorCVJFR19SVUxFKDI0ODQtMTAsIDI0ODQrMTAsIDQwLCAwLCAyMCwgXAorCU5MODAyMTFfUlJGX1BBU1NJVkVfU0NBTiB8IFwKKwlOTDgwMjExX1JSRl9OT19PRkRNKQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gcnRsX3JlZ2RvbV8xMSA9IHsKKwkubl9yZWdfcnVsZXMgPSAxLAorCS5hbHBoYTIgPSAiOTkiLAorCS5yZWdfcnVsZXMgPSB7CisJCSAgICAgIFJUTDgxOXhfMkdIWl9DSDAxXzExLAorCX0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiBydGxfcmVnZG9tX2dsb2JhbCA9IHsKKwkubl9yZWdfcnVsZXMgPSAzLAorCS5hbHBoYTIgPSAiOTkiLAorCS5yZWdfcnVsZXMgPSB7CisJCSAgICAgIFJUTDgxOXhfMkdIWl9DSDAxXzExLAorCQkgICAgICBSVEw4MTl4XzJHSFpfQ0gxMl8xMywKKwkJICAgICAgUlRMODE5eF8yR0haX0NIMTQsCisJfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluIHJ0bF9yZWdkb21fd29ybGQgPSB7CisJLm5fcmVnX3J1bGVzID0gMiwKKwkuYWxwaGEyID0gIjk5IiwKKwkucmVnX3J1bGVzID0geworCQkgICAgICBSVEw4MTl4XzJHSFpfQ0gwMV8xMSwKKwkJICAgICAgUlRMODE5eF8yR0haX0NIMTJfMTMsCisJfQorfTsKKworc3RhdGljIGJvb2wgX3J0bF9pc19yYWRhcl9mcmVxKHUxNiBjZW50ZXJfZnJlcSkKK3sKKwlyZXR1cm4gKGNlbnRlcl9mcmVxID49IDUyNjAgJiYgY2VudGVyX2ZyZXEgPD0gNTcwMCk7Cit9CisKK3N0YXRpYyB2b2lkIF9ydGxfcmVnX2FwcGx5X2JlYWNvbmluZ19mbGFncyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJCQkgICBlbnVtIG5sODAyMTFfcmVnX2luaXRpYXRvciBpbml0aWF0b3IpCit7CisJZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kOworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOworCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnX3J1bGUgKnJlZ19ydWxlOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2g7CisJdW5zaWduZWQgaW50IGk7CisJdTMyIGJhbmR3aWR0aCA9IDA7CisJaW50IHI7CisKKwlmb3IgKGJhbmQgPSAwOyBiYW5kIDwgSUVFRTgwMjExX05VTV9CQU5EUzsgYmFuZCsrKSB7CisKKwkJaWYgKCF3aXBoeS0+YmFuZHNbYmFuZF0pCisJCQljb250aW51ZTsKKworCQlzYmFuZCA9IHdpcGh5LT5iYW5kc1tiYW5kXTsKKworCQlmb3IgKGkgPSAwOyBpIDwgc2JhbmQtPm5fY2hhbm5lbHM7IGkrKykgeworCQkJY2ggPSAmc2JhbmQtPmNoYW5uZWxzW2ldOworCQkJaWYgKF9ydGxfaXNfcmFkYXJfZnJlcShjaC0+Y2VudGVyX2ZyZXEpIHx8CisJCQkgICAgKGNoLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX1JBREFSKSkKKwkJCQljb250aW51ZTsKKwkJCWlmIChpbml0aWF0b3IgPT0gTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPVU5UUllfSUUpIHsKKwkJCQlyID0gZnJlcV9yZWdfaW5mbyh3aXBoeSwgY2gtPmNlbnRlcl9mcmVxLAorCQkJCQkJICBiYW5kd2lkdGgsICZyZWdfcnVsZSk7CisJCQkJaWYgKHIpCisJCQkJCWNvbnRpbnVlOworCisJCQkJLyoKKwkJCQkgKklmIDExZCBoYWQgYSBydWxlIGZvciB0aGlzIGNoYW5uZWwgZW5zdXJlCisJCQkJICp3ZSBlbmFibGUgYWRob2MvYmVhY29uaW5nIGlmIGl0IGFsbG93cyB1cyB0bworCQkJCSAqdXNlIGl0LiBOb3RlIHRoYXQgd2Ugd291bGQgaGF2ZSBkaXNhYmxlZCBpdAorCQkJCSAqYnkgYXBwbHlpbmcgb3VyIHN0YXRpYyB3b3JsZCByZWdkb21haW4gYnkKKwkJCQkgKmRlZmF1bHQgZHVyaW5nIGluaXQsIHByaW9yIHRvIGNhbGxpbmcgb3VyCisJCQkJICpyZWd1bGF0b3J5X2hpbnQoKS4KKwkJCQkgKi8KKworCQkJCWlmICghKHJlZ19ydWxlLT5mbGFncyAmIE5MODAyMTFfUlJGX05PX0lCU1MpKQorCQkJCQljaC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9DSEFOX05PX0lCU1M7CisJCQkJaWYgKCEocmVnX3J1bGUtPgorCQkJCSAgICAgZmxhZ3MgJiBOTDgwMjExX1JSRl9QQVNTSVZFX1NDQU4pKQorCQkJCQljaC0+ZmxhZ3MgJj0KKwkJCQkJICAgIH5JRUVFODAyMTFfQ0hBTl9QQVNTSVZFX1NDQU47CisJCQl9IGVsc2UgeworCQkJCWlmIChjaC0+YmVhY29uX2ZvdW5kKQorCQkJCQljaC0+ZmxhZ3MgJj0gfihJRUVFODAyMTFfQ0hBTl9OT19JQlNTIHwKKwkJCQkJCSAgSUVFRTgwMjExX0NIQU5fUEFTU0lWRV9TQ0FOKTsKKwkJCX0KKwkJfQorCX0KK30KKworLyogQWxsb3dzIGFjdGl2ZSBzY2FuIHNjYW4gb24gQ2ggMTIgYW5kIDEzICovCitzdGF0aWMgdm9pZCBfcnRsX3JlZ19hcHBseV9hY3RpdmVfc2Nhbl9mbGFncyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJCQkgICAgIGVudW0gbmw4MDIxMV9yZWdfaW5pdGlhdG9yCisJCQkJCSAgICAgaW5pdGlhdG9yKQoreworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2g7CisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdfcnVsZSAqcmVnX3J1bGU7CisJdTMyIGJhbmR3aWR0aCA9IDA7CisJaW50IHI7CisKKwlzYmFuZCA9IHdpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXTsKKworCS8qCisJICpJZiBubyBjb3VudHJ5IElFIGhhcyBiZWVuIHJlY2VpdmVkIGFsd2F5cyBlbmFibGUgYWN0aXZlIHNjYW4KKwkgKm9uIHRoZXNlIGNoYW5uZWxzLiBUaGlzIGlzIG9ubHkgZG9uZSBmb3Igc3BlY2lmaWMgcmVndWxhdG9yeSBTS1VzCisJICovCisJaWYgKGluaXRpYXRvciAhPSBOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09VTlRSWV9JRSkgeworCQljaCA9ICZzYmFuZC0+Y2hhbm5lbHNbMTFdOwkvKiBDSCAxMiAqLworCQlpZiAoY2gtPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fUEFTU0lWRV9TQ0FOKQorCQkJY2gtPmZsYWdzICY9IH5JRUVFODAyMTFfQ0hBTl9QQVNTSVZFX1NDQU47CisJCWNoID0gJnNiYW5kLT5jaGFubmVsc1sxMl07CS8qIENIIDEzICovCisJCWlmIChjaC0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9QQVNTSVZFX1NDQU4pCisJCQljaC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9DSEFOX1BBU1NJVkVfU0NBTjsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICpJZiBhIGNvdW50cnkgSUUgaGFzIGJlZW4gcmVjaWV2ZWQgY2hlY2sgaXRzIHJ1bGUgZm9yIHRoaXMKKwkgKmNoYW5uZWwgZmlyc3QgYmVmb3JlIGVuYWJsaW5nIGFjdGl2ZSBzY2FuLiBUaGUgcGFzc2l2ZSBzY2FuCisJICp3b3VsZCBoYXZlIGJlZW4gZW5mb3JjZWQgYnkgdGhlIGluaXRpYWwgcHJvY2Vzc2luZyBvZiBvdXIKKwkgKmN1c3RvbSByZWd1bGF0b3J5IGRvbWFpbi4KKwkgKi8KKworCWNoID0gJnNiYW5kLT5jaGFubmVsc1sxMV07CS8qIENIIDEyICovCisJciA9IGZyZXFfcmVnX2luZm8od2lwaHksIGNoLT5jZW50ZXJfZnJlcSwgYmFuZHdpZHRoLCAmcmVnX3J1bGUpOworCWlmICghcikgeworCQlpZiAoIShyZWdfcnVsZS0+ZmxhZ3MgJiBOTDgwMjExX1JSRl9QQVNTSVZFX1NDQU4pKQorCQkJaWYgKGNoLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX1BBU1NJVkVfU0NBTikKKwkJCQljaC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9DSEFOX1BBU1NJVkVfU0NBTjsKKwl9CisKKwljaCA9ICZzYmFuZC0+Y2hhbm5lbHNbMTJdOwkvKiBDSCAxMyAqLworCXIgPSBmcmVxX3JlZ19pbmZvKHdpcGh5LCBjaC0+Y2VudGVyX2ZyZXEsIGJhbmR3aWR0aCwgJnJlZ19ydWxlKTsKKwlpZiAoIXIpIHsKKwkJaWYgKCEocmVnX3J1bGUtPmZsYWdzICYgTkw4MDIxMV9SUkZfUEFTU0lWRV9TQ0FOKSkKKwkJCWlmIChjaC0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9QQVNTSVZFX1NDQU4pCisJCQkJY2gtPmZsYWdzICY9IH5JRUVFODAyMTFfQ0hBTl9QQVNTSVZFX1NDQU47CisJfQorfQorCisvKgorICpBbHdheXMgYXBwbHkgUmFkYXIvREZTIHJ1bGVzIG9uCisgKmZyZXEgcmFuZ2UgNTI2MCBNSHogLSA1NzAwIE1IegorICovCitzdGF0aWMgdm9pZCBfcnRsX3JlZ19hcHBseV9yYWRhcl9mbGFncyhzdHJ1Y3Qgd2lwaHkgKndpcGh5KQoreworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2g7CisJdW5zaWduZWQgaW50IGk7CisKKwlpZiAoIXdpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXSkKKwkJcmV0dXJuOworCisJc2JhbmQgPSB3aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl07CisKKwlmb3IgKGkgPSAwOyBpIDwgc2JhbmQtPm5fY2hhbm5lbHM7IGkrKykgeworCQljaCA9ICZzYmFuZC0+Y2hhbm5lbHNbaV07CisJCWlmICghX3J0bF9pc19yYWRhcl9mcmVxKGNoLT5jZW50ZXJfZnJlcSkpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKldlIGFsd2F5cyBlbmFibGUgcmFkYXIgZGV0ZWN0aW9uL0RGUyBvbiB0aGlzCisJCSAqZnJlcXVlbmN5IHJhbmdlLiBBZGRpdGlvbmFsbHkgd2UgYWxzbyBhcHBseSBvbgorCQkgKnRoaXMgZnJlcXVlbmN5IHJhbmdlOgorCQkgKi0gSWYgU1RBIG1vZGUgZG9lcyBub3QgeWV0IGhhdmUgREZTIHN1cHBvcnRzIGRpc2FibGUKKwkJICogYWN0aXZlIHNjYW5uaW5nCisJCSAqLSBJZiBhZGhvYyBtb2RlIGRvZXMgbm90IHN1cHBvcnQgREZTIHlldCB0aGVuIGRpc2FibGUKKwkJICogYWRob2MgaW4gdGhlIGZyZXF1ZW5jeS4KKwkJICotIElmIEFQIG1vZGUgZG9lcyBub3QgeWV0IHN1cHBvcnQgcmFkYXIgZGV0ZWN0aW9uL0RGUworCQkgKmRvIG5vdCBhbGxvdyBBUCBtb2RlCisJCSAqLworCQlpZiAoIShjaC0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRCkpCisJCQljaC0+ZmxhZ3MgfD0gSUVFRTgwMjExX0NIQU5fUkFEQVIgfAorCQkJICAgIElFRUU4MDIxMV9DSEFOX05PX0lCU1MgfAorCQkJICAgIElFRUU4MDIxMV9DSEFOX1BBU1NJVkVfU0NBTjsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9ydGxfcmVnX2FwcGx5X3dvcmxkX2ZsYWdzKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkJICAgICAgIGVudW0gbmw4MDIxMV9yZWdfaW5pdGlhdG9yIGluaXRpYXRvciwKKwkJCQkgICAgICAgc3RydWN0IHJ0bF9yZWd1bGF0b3J5ICpyZWcpCit7CisJX3J0bF9yZWdfYXBwbHlfYmVhY29uaW5nX2ZsYWdzKHdpcGh5LCBpbml0aWF0b3IpOworCV9ydGxfcmVnX2FwcGx5X2FjdGl2ZV9zY2FuX2ZsYWdzKHdpcGh5LCBpbml0aWF0b3IpOworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgX3J0bF9kdW1wX2NoYW5uZWxfbWFwKHN0cnVjdCB3aXBoeSAqd2lwaHkpCit7CisJZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kOworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2g7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGJhbmQgPSAwOyBiYW5kIDwgSUVFRTgwMjExX05VTV9CQU5EUzsgYmFuZCsrKSB7CisJCWlmICghd2lwaHktPmJhbmRzW2JhbmRdKQorCQkJY29udGludWU7CisJCXNiYW5kID0gd2lwaHktPmJhbmRzW2JhbmRdOworCQlmb3IgKGkgPSAwOyBpIDwgc2JhbmQtPm5fY2hhbm5lbHM7IGkrKykKKwkJCWNoID0gJnNiYW5kLT5jaGFubmVsc1tpXTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgX3J0bF9yZWdfbm90aWZpZXJfYXBwbHkoc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCQkgICBzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICpyZXF1ZXN0LAorCQkJCSAgIHN0cnVjdCBydGxfcmVndWxhdG9yeSAqcmVnKQoreworCS8qIFdlIGFsd2F5cyBhcHBseSB0aGlzICovCisJX3J0bF9yZWdfYXBwbHlfcmFkYXJfZmxhZ3Mod2lwaHkpOworCisJc3dpdGNoIChyZXF1ZXN0LT5pbml0aWF0b3IpIHsKKwljYXNlIE5MODAyMTFfUkVHRE9NX1NFVF9CWV9EUklWRVI6CisJY2FzZSBOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09SRToKKwljYXNlIE5MODAyMTFfUkVHRE9NX1NFVF9CWV9VU0VSOgorCQlicmVhazsKKwljYXNlIE5MODAyMTFfUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFOgorCQlfcnRsX3JlZ19hcHBseV93b3JsZF9mbGFncyh3aXBoeSwgcmVxdWVzdC0+aW5pdGlhdG9yLCByZWcpOworCQlicmVhazsKKwl9CisKKwlfcnRsX2R1bXBfY2hhbm5lbF9tYXAod2lwaHkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqX3J0bF9yZWdkb21haW5fc2VsZWN0KAorCQkJCQkgICAgICAgc3RydWN0IHJ0bF9yZWd1bGF0b3J5ICpyZWcpCit7CisJc3dpdGNoIChyZWctPmNvdW50cnlfY29kZSkgeworCWNhc2UgQ09VTlRSWV9DT0RFX0ZDQzoKKwljYXNlIENPVU5UUllfQ09ERV9JQzoKKwkJcmV0dXJuICZydGxfcmVnZG9tXzExOworCWNhc2UgQ09VTlRSWV9DT0RFX0VUU0k6CisJY2FzZSBDT1VOVFJZX0NPREVfU1BBSU46CisJY2FzZSBDT1VOVFJZX0NPREVfRlJBTkNFOgorCWNhc2UgQ09VTlRSWV9DT0RFX0lTUkFFTDoKKwljYXNlIENPVU5UUllfQ09ERV9URUxFQ19ORVRHRUFSOgorCQlyZXR1cm4gJnJ0bF9yZWdkb21fd29ybGQ7CisJY2FzZSBDT1VOVFJZX0NPREVfTUtLOgorCWNhc2UgQ09VTlRSWV9DT0RFX01LSzE6CisJY2FzZSBDT1VOVFJZX0NPREVfVEVMRUM6CisJY2FzZSBDT1VOVFJZX0NPREVfTUlDOgorCQlyZXR1cm4gJnJ0bF9yZWdkb21fZ2xvYmFsOworCWNhc2UgQ09VTlRSWV9DT0RFX0dMT0JBTF9ET01BSU46CisJCXJldHVybiAmcnRsX3JlZ2RvbV9nbG9iYWw7CisJY2FzZSBDT1VOVFJZX0NPREVfV09STERfV0lERV8xMzoKKwkJcmV0dXJuICZydGxfcmVnZG9tX3dvcmxkOworCWRlZmF1bHQ6CisJCXJldHVybiAmcnRsX3JlZ2RvbV93b3JsZDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgX3J0bF9yZWdkX2luaXRfd2lwaHkoc3RydWN0IHJ0bF9yZWd1bGF0b3J5ICpyZWcsCisJCQkJc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCQlpbnQgKCpyZWdfbm90aWZpZXIpIChzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJCQkJICAgICBzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICoKKwkJCQkJCSAgICAgcmVxdWVzdCkpCit7CisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKnJlZ2Q7CisKKwl3aXBoeS0+cmVnX25vdGlmaWVyID0gcmVnX25vdGlmaWVyOworCXdpcGh5LT5mbGFncyB8PSBXSVBIWV9GTEFHX0NVU1RPTV9SRUdVTEFUT1JZOworCXdpcGh5LT5mbGFncyAmPSB+V0lQSFlfRkxBR19TVFJJQ1RfUkVHVUxBVE9SWTsKKwl3aXBoeS0+ZmxhZ3MgJj0gfldJUEhZX0ZMQUdfRElTQUJMRV9CRUFDT05fSElOVFM7CisJcmVnZCA9IF9ydGxfcmVnZG9tYWluX3NlbGVjdChyZWcpOworCXdpcGh5X2FwcGx5X2N1c3RvbV9yZWd1bGF0b3J5KHdpcGh5LCByZWdkKTsKKwlfcnRsX3JlZ19hcHBseV9yYWRhcl9mbGFncyh3aXBoeSk7CisJX3J0bF9yZWdfYXBwbHlfd29ybGRfZmxhZ3Mod2lwaHksIE5MODAyMTFfUkVHRE9NX1NFVF9CWV9EUklWRVIsIHJlZyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY291bnRyeV9jb2RlX3RvX2VudW1fcmQgKl9ydGxfcmVnZF9maW5kX2NvdW50cnkodTE2IGNvdW50cnljb2RlKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYWxsQ291bnRyaWVzKTsgaSsrKSB7CisJCWlmIChhbGxDb3VudHJpZXNbaV0uY291bnRyeWNvZGUgPT0gY291bnRyeWNvZGUpCisJCQlyZXR1cm4gJmFsbENvdW50cmllc1tpXTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK2ludCBydGxfcmVnZF9pbml0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkgIGludCAoKnJlZ19ub3RpZmllcikgKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkJICAgICAgIHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKnJlcXVlc3QpKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gaHctPndpcGh5OworCXN0cnVjdCBjb3VudHJ5X2NvZGVfdG9fZW51bV9yZCAqY291bnRyeSA9IE5VTEw7CisKKwlpZiAod2lwaHkgPT0gTlVMTCB8fCAmcnRscHJpdi0+cmVnZCA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIGZvcmNlIHRoZSBjaGFubmVsIHBsYW4gdG8gd29ybGQgd2lkZSAxMyAqLworCXJ0bHByaXYtPnJlZ2QuY291bnRyeV9jb2RlID0gQ09VTlRSWV9DT0RFX1dPUkxEX1dJREVfMTM7CisKKwlSVF9UUkFDRShydGxwcml2LCBDT01QX1JFR0QsIERCR19UUkFDRSwKKwkJIChLRVJOX0RFQlVHICJydGw6IEVFUFJPTSByZWdkb21haW46IDB4JTB4XG4iLAorCQkgIHJ0bHByaXYtPnJlZ2QuY291bnRyeV9jb2RlKSk7CisKKwlpZiAocnRscHJpdi0+cmVnZC5jb3VudHJ5X2NvZGUgPj0gQ09VTlRSWV9DT0RFX01BWCkgeworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1JFR0QsIERCR19ETUVTRywKKwkJCSAoS0VSTl9ERUJVRyAicnRsOiBFRVBST00gaW5kaWNhdGVzIGludmFsaWQgY29udHJ5IGNvZGUiCisJCQkgICJ3b3JsZCB3aWRlIDEzIHNob3VsZCBiZSB1c2VkXG4iKSk7CisKKwkJcnRscHJpdi0+cmVnZC5jb3VudHJ5X2NvZGUgPSBDT1VOVFJZX0NPREVfV09STERfV0lERV8xMzsKKwl9CisKKwljb3VudHJ5ID0gX3J0bF9yZWdkX2ZpbmRfY291bnRyeShydGxwcml2LT5yZWdkLmNvdW50cnlfY29kZSk7CisKKwlpZiAoY291bnRyeSkgeworCQlydGxwcml2LT5yZWdkLmFscGhhMlswXSA9IGNvdW50cnktPmlzb05hbWVbMF07CisJCXJ0bHByaXYtPnJlZ2QuYWxwaGEyWzFdID0gY291bnRyeS0+aXNvTmFtZVsxXTsKKwl9IGVsc2UgeworCQlydGxwcml2LT5yZWdkLmFscGhhMlswXSA9ICcwJzsKKwkJcnRscHJpdi0+cmVnZC5hbHBoYTJbMV0gPSAnMCc7CisJfQorCisJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9SRUdELCBEQkdfVFJBQ0UsCisJCSAoS0VSTl9ERUJVRyAicnRsOiBDb3VudHJ5IGFscGhhMiBiZWluZyB1c2VkOiAlYyVjXG4iLAorCQkgIHJ0bHByaXYtPnJlZ2QuYWxwaGEyWzBdLCBydGxwcml2LT5yZWdkLmFscGhhMlsxXSkpOworCisJX3J0bF9yZWdkX2luaXRfd2lwaHkoJnJ0bHByaXYtPnJlZ2QsIHdpcGh5LCByZWdfbm90aWZpZXIpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBydGxfcmVnX25vdGlmaWVyKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKnJlcXVlc3QpCit7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSB3aXBoeV90b19pZWVlODAyMTFfaHcod2lwaHkpOworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKworCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUkVHRCwgREJHX0xPVUQsICgiXG4iKSk7CisKKwlyZXR1cm4gX3J0bF9yZWdfbm90aWZpZXJfYXBwbHkod2lwaHksIHJlcXVlc3QsICZydGxwcml2LT5yZWdkKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcmVnZC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9yZWdkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNkYmM0YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcmVnZC5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQoYykgMjAwOS0yMDEwICBSZWFsdGVrIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAsIFVTQQorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgTElDRU5TRS4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogd2xhbmZhZSA8d2xhbmZhZUByZWFsdGVrLmNvbT4KKyAqIFJlYWx0ZWsgQ29ycG9yYXRpb24sIE5vLiAyLCBJbm5vdmF0aW9uIFJvYWQgSUksIEhzaW5jaHUgU2NpZW5jZSBQYXJrLAorICogSHNpbmNodSAzMDAsIFRhaXdhbi4KKyAqCisgKiBMYXJyeSBGaW5nZXIgPExhcnJ5LkZpbmdlckBsd2Zpbmdlci5uZXQ+CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fUlRMX1JFR0RfSF9fCisjZGVmaW5lIF9fUlRMX1JFR0RfSF9fCisKK3N0cnVjdCBjb3VudHJ5X2NvZGVfdG9fZW51bV9yZCB7CisJdTE2IGNvdW50cnljb2RlOworCWNvbnN0IGNoYXIgKmlzb05hbWU7Cit9OworCitlbnVtIGNvdW50cnlfY29kZV90eXBlX3QgeworCUNPVU5UUllfQ09ERV9GQ0MgPSAwLAorCUNPVU5UUllfQ09ERV9JQyA9IDEsCisJQ09VTlRSWV9DT0RFX0VUU0kgPSAyLAorCUNPVU5UUllfQ09ERV9TUEFJTiA9IDMsCisJQ09VTlRSWV9DT0RFX0ZSQU5DRSA9IDQsCisJQ09VTlRSWV9DT0RFX01LSyA9IDUsCisJQ09VTlRSWV9DT0RFX01LSzEgPSA2LAorCUNPVU5UUllfQ09ERV9JU1JBRUwgPSA3LAorCUNPVU5UUllfQ09ERV9URUxFQyA9IDgsCisJQ09VTlRSWV9DT0RFX01JQyA9IDksCisJQ09VTlRSWV9DT0RFX0dMT0JBTF9ET01BSU4gPSAxMCwKKwlDT1VOVFJZX0NPREVfV09STERfV0lERV8xMyA9IDExLAorCUNPVU5UUllfQ09ERV9URUxFQ19ORVRHRUFSID0gMTIsCisKKwkvKmFkZCBuZXcgY2hhbm5lbCBwbGFuIGFib3ZlIHRoaXMgbGluZSAqLworCUNPVU5UUllfQ09ERV9NQVgKK307CisKK2ludCBydGxfcmVnZF9pbml0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkgIGludCAoKnJlZ19ub3RpZmllcikgKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkJICAgICAgIHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKnJlcXVlc3QpKTsKK2ludCBydGxfcmVnX25vdGlmaWVyKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKnJlcXVlc3QpOworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmNlL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmMGJlN2MKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS9NYWtlZmlsZQpAQCAtMCwwICsxLDEyIEBACitydGw4MTkyY2Utb2JqcyA6PQkJXAorCQlkbS5vCQlcCisJCWZ3Lm8JCVwKKwkJaHcubwkJXAorCQlsZWQubwkJXAorCQlwaHkubwkJXAorCQlyZi5vCQlcCisJCXN3Lm8JCVwKKwkJdGFibGUubwkJXAorCQl0cngubworCitvYmotJChDT05GSUdfUlRMODE5MkNFKSArPSBydGw4MTkyY2UubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2UvZGVmLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS9kZWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2NkNjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2UvZGVmLmgKQEAgLTAsMCArMSwyNTcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQoYykgMjAwOS0yMDEwICBSZWFsdGVrIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAsIFVTQQorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgTElDRU5TRS4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogd2xhbmZhZSA8d2xhbmZhZUByZWFsdGVrLmNvbT4KKyAqIFJlYWx0ZWsgQ29ycG9yYXRpb24sIE5vLiAyLCBJbm5vdmF0aW9uIFJvYWQgSUksIEhzaW5jaHUgU2NpZW5jZSBQYXJrLAorICogSHNpbmNodSAzMDAsIFRhaXdhbi4KKyAqCisgKiBMYXJyeSBGaW5nZXIgPExhcnJ5LkZpbmdlckBsd2Zpbmdlci5uZXQ+CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fUlRMOTJDX0RFRl9IX18KKyNkZWZpbmUgX19SVEw5MkNfREVGX0hfXworCisjZGVmaW5lIEhBTF9SRVRSWV9MSU1JVF9JTkZSQQkJCQk0OAorI2RlZmluZSBIQUxfUkVUUllfTElNSVRfQVBfQURIT0MJCQk3CisKKyNkZWZpbmUJUEhZX1JTU0lfU0xJRF9XSU5fTUFYCQkJCTEwMAorI2RlZmluZQlQSFlfTElOS1FVQUxJVFlfU0xJRF9XSU5fTUFYCQkJMjAKKyNkZWZpbmUJUEhZX0JFQUNPTl9SU1NJX1NMSURfV0lOX01BWAkJCTEwCisKKyNkZWZpbmUgUkVTRVRfREVMQVlfODE4NQkJCQkyMAorCisjZGVmaW5lIFJUX0lCU1NfSU5UX01BU0tTCShJTVJfQkNOSU5UIHwgSU1SX1RCRE9LIHwgSU1SX1RCREVSKQorI2RlZmluZSBSVF9BQ19JTlRfTUFTS1MJCShJTVJfVklET0sgfCBJTVJfVk9ET0sgfCBJTVJfQkVET0t8SU1SX0JLRE9LKQorCisjZGVmaW5lIE5VTV9PRl9GSVJNV0FSRV9RVUVVRQkJCQkxMAorI2RlZmluZSBOVU1fT0ZfUEFHRVNfSU5fRlcJCQkJMHgxMDAKKyNkZWZpbmUgTlVNX09GX1BBR0VfSU5fRldfUVVFVUVfQksJCQkweDA3CisjZGVmaW5lIE5VTV9PRl9QQUdFX0lOX0ZXX1FVRVVFX0JFCQkJMHgwNworI2RlZmluZSBOVU1fT0ZfUEFHRV9JTl9GV19RVUVVRV9WSQkJCTB4MDcKKyNkZWZpbmUgTlVNX09GX1BBR0VfSU5fRldfUVVFVUVfVk8JCQkweDA3CisjZGVmaW5lIE5VTV9PRl9QQUdFX0lOX0ZXX1FVRVVFX0hDQ0EJCQkweDAKKyNkZWZpbmUgTlVNX09GX1BBR0VfSU5fRldfUVVFVUVfQ01ECQkJMHgwCisjZGVmaW5lIE5VTV9PRl9QQUdFX0lOX0ZXX1FVRVVFX01HTlQJCQkweDAyCisjZGVmaW5lIE5VTV9PRl9QQUdFX0lOX0ZXX1FVRVVFX0hJR0gJCQkweDAyCisjZGVmaW5lIE5VTV9PRl9QQUdFX0lOX0ZXX1FVRVVFX0JDTgkJCTB4MgorI2RlZmluZSBOVU1fT0ZfUEFHRV9JTl9GV19RVUVVRV9QVUIJCQkweEExCisKKyNkZWZpbmUgTlVNX09GX1BBR0VfSU5fRldfUVVFVUVfQktfRFRNCQkJMHgwMjYKKyNkZWZpbmUgTlVNX09GX1BBR0VfSU5fRldfUVVFVUVfQkVfRFRNCQkJMHgwNDgKKyNkZWZpbmUgTlVNX09GX1BBR0VfSU5fRldfUVVFVUVfVklfRFRNCQkJMHgwNDgKKyNkZWZpbmUgTlVNX09GX1BBR0VfSU5fRldfUVVFVUVfVk9fRFRNCQkJMHgwMjYKKyNkZWZpbmUgTlVNX09GX1BBR0VfSU5fRldfUVVFVUVfUFVCX0RUTQkJCTB4MDAKKworI2RlZmluZSBNQVhfTElORVNfSFdDT05GSUdfVFhUCQkJCTEwMDAKKyNkZWZpbmUgTUFYX0JZVEVTX0xJTkVfSFdDT05GSUdfVFhUCQkJMjU2CisKKyNkZWZpbmUgU1dfVEhSRUVfV0lSRQkJCQkJMAorI2RlZmluZSBIV19USFJFRV9XSVJFCQkJCQkyCisKKyNkZWZpbmUgQlRfREVNT19CT0FSRAkJCQkJMAorI2RlZmluZSBCVF9RQV9CT0FSRAkJCQkJMQorI2RlZmluZSBCVF9GUEdBCQkJCQkJMgorCisjZGVmaW5lIFJYX1NNT09USF9GQUNUT1IJCQkJMjAKKworI2RlZmluZSBIQUxfUFJJTUVfQ0hOTF9PRkZTRVRfRE9OVF9DQVJFCQkJMAorI2RlZmluZSBIQUxfUFJJTUVfQ0hOTF9PRkZTRVRfTE9XRVIJCQkxCisjZGVmaW5lIEhBTF9QUklNRV9DSE5MX09GRlNFVF9VUFBFUgkJCTIKKworI2RlZmluZSBNQVhfSDJDX1FVRVVFX05VTQkJCQkxMAorCisjZGVmaW5lIFJYX01QRFVfUVVFVUUJCQkJCTAKKyNkZWZpbmUgUlhfQ01EX1FVRVVFCQkJCQkxCisjZGVmaW5lIFJYX01BWF9RVUVVRQkJCQkJMgorI2RlZmluZSBBQzJRVUVVRUlEKF9BQykJCQkJCShfQUMpCisKKyNkZWZpbmUJQzJIX1JYX0NNRF9IRFJfTEVOCQkJCTgKKyNkZWZpbmUJR0VUX0MySF9DTURfQ01EX0xFTihfX3ByeGhkcikJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKChfX3ByeGhkciksIDAsIDE2KQorI2RlZmluZQlHRVRfQzJIX0NNRF9FTEVNRU5UX0lEKF9fcHJ4aGRyKQlcCisJTEVfQklUU19UT180QllURSgoX19wcnhoZHIpLCAxNiwgOCkKKyNkZWZpbmUJR0VUX0MySF9DTURfQ01EX1NFUShfX3ByeGhkcikJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKChfX3ByeGhkciksIDI0LCA3KQorI2RlZmluZQlHRVRfQzJIX0NNRF9DT05USU5VRShfX3ByeGhkcikJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKChfX3ByeGhkciksIDMxLCAxKQorI2RlZmluZQlHRVRfQzJIX0NNRF9DT05URU5UKF9fcHJ4aGRyKQkJXAorCSgodTggKikoX19wcnhoZHIpICsgQzJIX1JYX0NNRF9IRFJfTEVOKQorCisjZGVmaW5lCUdFVF9DMkhfQ01EX0ZFRURCQUNLX0VMRU1FTlRfSUQoX19wY21kZmJoZHIpCVwKKwlMRV9CSVRTX1RPXzRCWVRFKChfX3BjbWRmYmhkciksIDAsIDgpCisjZGVmaW5lCUdFVF9DMkhfQ01EX0ZFRURCQUNLX0NDWF9MRU4oX19wY21kZmJoZHIpCVwKKwlMRV9CSVRTX1RPXzRCWVRFKChfX3BjbWRmYmhkciksIDgsIDgpCisjZGVmaW5lCUdFVF9DMkhfQ01EX0ZFRURCQUNLX0NDWF9DTURfQ05UKF9fcGNtZGZiaGRyKQlcCisJTEVfQklUU19UT180QllURSgoX19wY21kZmJoZHIpLCAxNiwgMTYpCisjZGVmaW5lCUdFVF9DMkhfQ01EX0ZFRURCQUNLX0NDWF9NQUNfSUQoX19wY21kZmJoZHIpCVwKKwlMRV9CSVRTX1RPXzRCWVRFKCgoX19wY21kZmJoZHIpICsgNCksIDAsIDUpCisjZGVmaW5lCUdFVF9DMkhfQ01EX0ZFRURCQUNLX0NDWF9WQUxJRChfX3BjbWRmYmhkcikJXAorCUxFX0JJVFNfVE9fNEJZVEUoKChfX3BjbWRmYmhkcikgKyA0KSwgNywgMSkKKyNkZWZpbmUJR0VUX0MySF9DTURfRkVFREJBQ0tfQ0NYX1JFVFJZX0NOVChfX3BjbWRmYmhkcikJXAorCUxFX0JJVFNfVE9fNEJZVEUoKChfX3BjbWRmYmhkcikgKyA0KSwgOCwgNSkKKyNkZWZpbmUJR0VUX0MySF9DTURfRkVFREJBQ0tfQ0NYX1RPSyhfX3BjbWRmYmhkcikJXAorCUxFX0JJVFNfVE9fNEJZVEUoKChfX3BjbWRmYmhkcikgKyA0KSwgMTUsIDEpCisjZGVmaW5lCUdFVF9DMkhfQ01EX0ZFRURCQUNLX0NDWF9RU0VMKF9fcGNtZGZiaGRyKQlcCisJTEVfQklUU19UT180QllURSgoKF9fcGNtZGZiaGRyKSArIDQpLCAxNiwgNCkKKyNkZWZpbmUJR0VUX0MySF9DTURfRkVFREJBQ0tfQ0NYX1NFUShfX3BjbWRmYmhkcikJXAorCUxFX0JJVFNfVE9fNEJZVEUoKChfX3BjbWRmYmhkcikgKyA0KSwgMjAsIDEyKQorCisjZGVmaW5lIENISVBfVkVSX0IJCQlCSVQoNCkKKyNkZWZpbmUgQ0hJUF85MkNfQklUTUFTSwkJQklUKDApCisjZGVmaW5lIENISVBfOTJDXzFUMlIJCQkweDAzCisjZGVmaW5lIENISVBfOTJDCQkJMHgwMQorI2RlZmluZSBDSElQXzg4QwkJCTB4MDAKKworZW51bSB2ZXJzaW9uXzgxOTJjIHsKKwlWRVJTSU9OX0FfQ0hJUF85MkMgPSAweDAxLAorCVZFUlNJT05fQV9DSElQXzg4QyA9IDB4MDAsCisJVkVSU0lPTl9CX0NISVBfOTJDID0gMHgxMSwKKwlWRVJTSU9OX0JfQ0hJUF84OEMgPSAweDEwLAorCVZFUlNJT05fVU5LTk9XTiA9IDB4ODgsCit9OworCisjZGVmaW5lIElTX0NISVBfVkVSX0IodmVyc2lvbikgICgodmVyc2lvbiAmIENISVBfVkVSX0IpID8gdHJ1ZSA6IGZhbHNlKQorI2RlZmluZSBJU185MkNfU0VSSUFMKHZlcnNpb24pICAoKHZlcnNpb24gJiBDSElQXzkyQ19CSVRNQVNLKSA/IHRydWUgOiBmYWxzZSkKKworZW51bSBydGw4MTl4X2xvb3BiYWNrX2UgeworCVJUTDgxOVhfTk9fTE9PUEJBQ0sgPSAwLAorCVJUTDgxOVhfTUFDX0xPT1BCQUNLID0gMSwKKwlSVEw4MTlYX0RNQV9MT09QQkFDSyA9IDIsCisJUlRMODE5WF9DQ0tfTE9PUEJBQ0sgPSAzLAorfTsKKworZW51bSByZl9vcHR5cGUgeworCVJGX09QX0JZX1NXXzNXSVJFID0gMCwKKwlSRl9PUF9CWV9GVywKKwlSRl9PUF9NQVgKK307CisKK2VudW0gcmZfcG93ZXJfc3RhdGUgeworCVJGX09OLAorCVJGX09GRiwKKwlSRl9TTEVFUCwKKwlSRl9TSFVUX0RPV04sCit9OworCitlbnVtIHBvd2VyX3NhdmVfbW9kZSB7CisJUE9XRVJfU0FWRV9NT0RFX0FDVElWRSwKKwlQT1dFUl9TQVZFX01PREVfU0FWRSwKK307CisKK2VudW0gcG93ZXJfcG9sb2N5X2NvbmZpZyB7CisJUE9XRVJDRkdfTUFYX1BPV0VSX1NBVklOR1MsCisJUE9XRVJDRkdfR0xPQkFMX1BPV0VSX1NBVklOR1MsCisJUE9XRVJDRkdfTE9DQUxfUE9XRVJfU0FWSU5HUywKKwlQT1dFUkNGR19MRU5PVk8sCit9OworCitlbnVtIGludGVyZmFjZV9zZWxlY3RfcGNpIHsKKwlJTlRGX1NFTDFfTUlOSUNBUkQgPSAwLAorCUlOVEZfU0VMMF9QQ0lFID0gMSwKKwlJTlRGX1NFTDJfUlNWID0gMiwKKwlJTlRGX1NFTDNfUlNWID0gMywKK307CisKK2VudW0gaGFsX2Z3X2MyaF9jbWRfaWQgeworCUhBTF9GV19DMkhfQ01EX1JlYWRfTUFDUkVHID0gMCwKKwlIQUxfRldfQzJIX0NNRF9SZWFkX0JCUkVHID0gMSwKKwlIQUxfRldfQzJIX0NNRF9SZWFkX1JGUkVHID0gMiwKKwlIQUxfRldfQzJIX0NNRF9SZWFkX0VFUFJPTSA9IDMsCisJSEFMX0ZXX0MySF9DTURfUmVhZF9FRlVTRSA9IDQsCisJSEFMX0ZXX0MySF9DTURfUmVhZF9DQU0gPSA1LAorCUhBTF9GV19DMkhfQ01EX0dldF9CYXNpY1JhdGUgPSA2LAorCUhBTF9GV19DMkhfQ01EX0dldF9EYXRhUmF0ZSA9IDcsCisJSEFMX0ZXX0MySF9DTURfU3VydmV5ID0gOCwKKwlIQUxfRldfQzJIX0NNRF9TdXJ2ZXlEb25lID0gOSwKKwlIQUxfRldfQzJIX0NNRF9Kb2luQnNzID0gMTAsCisJSEFMX0ZXX0MySF9DTURfQWRkU1RBID0gMTEsCisJSEFMX0ZXX0MySF9DTURfRGVsU1RBID0gMTIsCisJSEFMX0ZXX0MySF9DTURfQXRpbURvbmUgPSAxMywKKwlIQUxfRldfQzJIX0NNRF9UWF9SZXBvcnQgPSAxNCwKKwlIQUxfRldfQzJIX0NNRF9DQ1hfUmVwb3J0ID0gMTUsCisJSEFMX0ZXX0MySF9DTURfRFRNX1JlcG9ydCA9IDE2LAorCUhBTF9GV19DMkhfQ01EX1RYX1JhdGVfU3RhdGlzdGljcyA9IDE3LAorCUhBTF9GV19DMkhfQ01EX0MySExCSyA9IDE4LAorCUhBTF9GV19DMkhfQ01EX0MySERCRyA9IDE5LAorCUhBTF9GV19DMkhfQ01EX0MySEZFRURCQUNLID0gMjAsCisJSEFMX0ZXX0MySF9DTURfTUFYCit9OworCitlbnVtIHJ0bF9kZXNjX3FzZWwgeworCVFTTFRfQksgPSAweDIsCisJUVNMVF9CRSA9IDB4MCwKKwlRU0xUX1ZJID0gMHg1LAorCVFTTFRfVk8gPSAweDcsCisJUVNMVF9CRUFDT04gPSAweDEwLAorCVFTTFRfSElHSCA9IDB4MTEsCisJUVNMVF9NR05UID0gMHgxMiwKKwlRU0xUX0NNRCA9IDB4MTMsCit9OworCitlbnVtIHJ0bF9kZXNjOTJjX3JhdGUgeworCURFU0M5MkNfUkFURTFNID0gMHgwMCwKKwlERVNDOTJDX1JBVEUyTSA9IDB4MDEsCisJREVTQzkyQ19SQVRFNV81TSA9IDB4MDIsCisJREVTQzkyQ19SQVRFMTFNID0gMHgwMywKKworCURFU0M5MkNfUkFURTZNID0gMHgwNCwKKwlERVNDOTJDX1JBVEU5TSA9IDB4MDUsCisJREVTQzkyQ19SQVRFMTJNID0gMHgwNiwKKwlERVNDOTJDX1JBVEUxOE0gPSAweDA3LAorCURFU0M5MkNfUkFURTI0TSA9IDB4MDgsCisJREVTQzkyQ19SQVRFMzZNID0gMHgwOSwKKwlERVNDOTJDX1JBVEU0OE0gPSAweDBhLAorCURFU0M5MkNfUkFURTU0TSA9IDB4MGIsCisKKwlERVNDOTJDX1JBVEVNQ1MwID0gMHgwYywKKwlERVNDOTJDX1JBVEVNQ1MxID0gMHgwZCwKKwlERVNDOTJDX1JBVEVNQ1MyID0gMHgwZSwKKwlERVNDOTJDX1JBVEVNQ1MzID0gMHgwZiwKKwlERVNDOTJDX1JBVEVNQ1M0ID0gMHgxMCwKKwlERVNDOTJDX1JBVEVNQ1M1ID0gMHgxMSwKKwlERVNDOTJDX1JBVEVNQ1M2ID0gMHgxMiwKKwlERVNDOTJDX1JBVEVNQ1M3ID0gMHgxMywKKwlERVNDOTJDX1JBVEVNQ1M4ID0gMHgxNCwKKwlERVNDOTJDX1JBVEVNQ1M5ID0gMHgxNSwKKwlERVNDOTJDX1JBVEVNQ1MxMCA9IDB4MTYsCisJREVTQzkyQ19SQVRFTUNTMTEgPSAweDE3LAorCURFU0M5MkNfUkFURU1DUzEyID0gMHgxOCwKKwlERVNDOTJDX1JBVEVNQ1MxMyA9IDB4MTksCisJREVTQzkyQ19SQVRFTUNTMTQgPSAweDFhLAorCURFU0M5MkNfUkFURU1DUzE1ID0gMHgxYiwKKwlERVNDOTJDX1JBVEVNQ1MxNV9TRyA9IDB4MWMsCisJREVTQzkyQ19SQVRFTUNTMzIgPSAweDIwLAorfTsKKworc3RydWN0IHBoeV9zdHNfY2NrXzgxOTJzX3QgeworCXU4IGFkY19wd2RiX1hbNF07CisJdTggc3FfcnB0OworCXU4IGNja19hZ2NfcnB0OworfTsKKworc3RydWN0IGgyY19jbWRfODE5MmMgeworCXU4IGVsZW1lbnRfaWQ7CisJdTMyIGNtZF9sZW47CisJdTggKnBfY21kYnVmZmVyOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS9kbS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2UvZG0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmU3YzY0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2UvZG0uYwpAQCAtMCwwICsxLDE0NzMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQoYykgMjAwOS0yMDEwICBSZWFsdGVrIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAsIFVTQQorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgTElDRU5TRS4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogd2xhbmZhZSA8d2xhbmZhZUByZWFsdGVrLmNvbT4KKyAqIFJlYWx0ZWsgQ29ycG9yYXRpb24sIE5vLiAyLCBJbm5vdmF0aW9uIFJvYWQgSUksIEhzaW5jaHUgU2NpZW5jZSBQYXJrLAorICogSHNpbmNodSAzMDAsIFRhaXdhbi4KKyAqCisgKiBMYXJyeSBGaW5nZXIgPExhcnJ5LkZpbmdlckBsd2Zpbmdlci5uZXQ+CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAiLi4vd2lmaS5oIgorI2luY2x1ZGUgIi4uL2Jhc2UuaCIKKyNpbmNsdWRlICJyZWcuaCIKKyNpbmNsdWRlICJkZWYuaCIKKyNpbmNsdWRlICJwaHkuaCIKKyNpbmNsdWRlICJkbS5oIgorI2luY2x1ZGUgImZ3LmgiCisKK3N0cnVjdCBkaWdfdCBkbV9kaWd0YWJsZTsKK3N0YXRpYyBzdHJ1Y3QgcHNfdCBkbV9wc3RhYmxlOworCitzdGF0aWMgY29uc3QgdTMyIG9mZG1zd2luZ190YWJsZVtPRkRNX1RBQkxFX1NJWkVdID0geworCTB4N2Y4MDAxZmUsCisJMHg3ODgwMDFlMiwKKwkweDcxYzAwMWM3LAorCTB4NmI4MDAxYWUsCisJMHg2NTQwMDE5NSwKKwkweDVmYzAwMTdmLAorCTB4NWE0MDAxNjksCisJMHg1NTQwMDE1NSwKKwkweDUwODAwMTQyLAorCTB4NGMwMDAxMzAsCisJMHg0N2MwMDExZiwKKwkweDQzYzAwMTBmLAorCTB4NDAwMDAxMDAsCisJMHgzYzgwMDBmMiwKKwkweDM5MDAwMGU0LAorCTB4MzVjMDAwZDcsCisJMHgzMmMwMDBjYiwKKwkweDMwMDAwMGMwLAorCTB4MmQ0MDAwYjUsCisJMHgyYWMwMDBhYiwKKwkweDI4ODAwMGEyLAorCTB4MjYwMDAwOTgsCisJMHgyNDAwMDA5MCwKKwkweDIyMDAwMDg4LAorCTB4MjAwMDAwODAsCisJMHgxZTQwMDA3OSwKKwkweDFjODAwMDcyLAorCTB4MWIwMDAwNmMsCisJMHgxOTgwMDA2NiwKKwkweDE4MDAwMDYwLAorCTB4MTZjMDAwNWIsCisJMHgxNTgwMDA1NiwKKwkweDE0NDAwMDUxLAorCTB4MTMwMDAwNGMsCisJMHgxMjAwMDA0OCwKKwkweDExMDAwMDQ0LAorCTB4MTAwMDAwNDAsCit9OworCitzdGF0aWMgY29uc3QgdTggY2Nrc3dpbmdfdGFibGVfY2gxY2gxM1tDQ0tfVEFCTEVfU0laRV1bOF0gPSB7CisJezB4MzYsIDB4MzUsIDB4MmUsIDB4MjUsIDB4MWMsIDB4MTIsIDB4MDksIDB4MDR9LAorCXsweDMzLCAweDMyLCAweDJiLCAweDIzLCAweDFhLCAweDExLCAweDA4LCAweDA0fSwKKwl7MHgzMCwgMHgyZiwgMHgyOSwgMHgyMSwgMHgxOSwgMHgxMCwgMHgwOCwgMHgwM30sCisJezB4MmQsIDB4MmQsIDB4MjcsIDB4MWYsIDB4MTgsIDB4MGYsIDB4MDgsIDB4MDN9LAorCXsweDJiLCAweDJhLCAweDI1LCAweDFlLCAweDE2LCAweDBlLCAweDA3LCAweDAzfSwKKwl7MHgyOCwgMHgyOCwgMHgyMiwgMHgxYywgMHgxNSwgMHgwZCwgMHgwNywgMHgwM30sCisJezB4MjYsIDB4MjUsIDB4MjEsIDB4MWIsIDB4MTQsIDB4MGQsIDB4MDYsIDB4MDN9LAorCXsweDI0LCAweDIzLCAweDFmLCAweDE5LCAweDEzLCAweDBjLCAweDA2LCAweDAzfSwKKwl7MHgyMiwgMHgyMSwgMHgxZCwgMHgxOCwgMHgxMSwgMHgwYiwgMHgwNiwgMHgwMn0sCisJezB4MjAsIDB4MjAsIDB4MWIsIDB4MTYsIDB4MTEsIDB4MDgsIDB4MDUsIDB4MDJ9LAorCXsweDFmLCAweDFlLCAweDFhLCAweDE1LCAweDEwLCAweDBhLCAweDA1LCAweDAyfSwKKwl7MHgxZCwgMHgxYywgMHgxOCwgMHgxNCwgMHgwZiwgMHgwYSwgMHgwNSwgMHgwMn0sCisJezB4MWIsIDB4MWEsIDB4MTcsIDB4MTMsIDB4MGUsIDB4MDksIDB4MDQsIDB4MDJ9LAorCXsweDFhLCAweDE5LCAweDE2LCAweDEyLCAweDBkLCAweDA5LCAweDA0LCAweDAyfSwKKwl7MHgxOCwgMHgxNywgMHgxNSwgMHgxMSwgMHgwYywgMHgwOCwgMHgwNCwgMHgwMn0sCisJezB4MTcsIDB4MTYsIDB4MTMsIDB4MTAsIDB4MGMsIDB4MDgsIDB4MDQsIDB4MDJ9LAorCXsweDE2LCAweDE1LCAweDEyLCAweDBmLCAweDBiLCAweDA3LCAweDA0LCAweDAxfSwKKwl7MHgxNCwgMHgxNCwgMHgxMSwgMHgwZSwgMHgwYiwgMHgwNywgMHgwMywgMHgwMn0sCisJezB4MTMsIDB4MTMsIDB4MTAsIDB4MGQsIDB4MGEsIDB4MDYsIDB4MDMsIDB4MDF9LAorCXsweDEyLCAweDEyLCAweDBmLCAweDBjLCAweDA5LCAweDA2LCAweDAzLCAweDAxfSwKKwl7MHgxMSwgMHgxMSwgMHgwZiwgMHgwYywgMHgwOSwgMHgwNiwgMHgwMywgMHgwMX0sCisJezB4MTAsIDB4MTAsIDB4MGUsIDB4MGIsIDB4MDgsIDB4MDUsIDB4MDMsIDB4MDF9LAorCXsweDBmLCAweDBmLCAweDBkLCAweDBiLCAweDA4LCAweDA1LCAweDAzLCAweDAxfSwKKwl7MHgwZSwgMHgwZSwgMHgwYywgMHgwYSwgMHgwOCwgMHgwNSwgMHgwMiwgMHgwMX0sCisJezB4MGQsIDB4MGQsIDB4MGMsIDB4MGEsIDB4MDcsIDB4MDUsIDB4MDIsIDB4MDF9LAorCXsweDBkLCAweDBjLCAweDBiLCAweDA5LCAweDA3LCAweDA0LCAweDAyLCAweDAxfSwKKwl7MHgwYywgMHgwYywgMHgwYSwgMHgwOSwgMHgwNiwgMHgwNCwgMHgwMiwgMHgwMX0sCisJezB4MGIsIDB4MGIsIDB4MGEsIDB4MDgsIDB4MDYsIDB4MDQsIDB4MDIsIDB4MDF9LAorCXsweDBiLCAweDBhLCAweDA5LCAweDA4LCAweDA2LCAweDA0LCAweDAyLCAweDAxfSwKKwl7MHgwYSwgMHgwYSwgMHgwOSwgMHgwNywgMHgwNSwgMHgwMywgMHgwMiwgMHgwMX0sCisJezB4MGEsIDB4MDksIDB4MDgsIDB4MDcsIDB4MDUsIDB4MDMsIDB4MDIsIDB4MDF9LAorCXsweDA5LCAweDA5LCAweDA4LCAweDA2LCAweDA1LCAweDAzLCAweDAxLCAweDAxfSwKKwl7MHgwOSwgMHgwOCwgMHgwNywgMHgwNiwgMHgwNCwgMHgwMywgMHgwMSwgMHgwMX0KK307CisKK3N0YXRpYyBjb25zdCB1OCBjY2tzd2luZ190YWJsZV9jaDE0W0NDS19UQUJMRV9TSVpFXVs4XSA9IHsKKwl7MHgzNiwgMHgzNSwgMHgyZSwgMHgxYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sCisJezB4MzMsIDB4MzIsIDB4MmIsIDB4MTksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LAorCXsweDMwLCAweDJmLCAweDI5LCAweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwKKwl7MHgyZCwgMHgyZCwgMHgxNywgMHgxNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sCisJezB4MmIsIDB4MmEsIDB4MjUsIDB4MTUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LAorCXsweDI4LCAweDI4LCAweDI0LCAweDE0LCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwKKwl7MHgyNiwgMHgyNSwgMHgyMSwgMHgxMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sCisJezB4MjQsIDB4MjMsIDB4MWYsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LAorCXsweDIyLCAweDIxLCAweDFkLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwKKwl7MHgyMCwgMHgyMCwgMHgxYiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sCisJezB4MWYsIDB4MWUsIDB4MWEsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LAorCXsweDFkLCAweDFjLCAweDE4LCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwKKwl7MHgxYiwgMHgxYSwgMHgxNywgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sCisJezB4MWEsIDB4MTksIDB4MTYsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LAorCXsweDE4LCAweDE3LCAweDE1LCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwKKwl7MHgxNywgMHgxNiwgMHgxMywgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sCisJezB4MTYsIDB4MTUsIDB4MTIsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LAorCXsweDE0LCAweDE0LCAweDExLCAweDBhLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwKKwl7MHgxMywgMHgxMywgMHgxMCwgMHgwYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sCisJezB4MTIsIDB4MTIsIDB4MGYsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LAorCXsweDExLCAweDExLCAweDBmLCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwKKwl7MHgxMCwgMHgxMCwgMHgwZSwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sCisJezB4MGYsIDB4MGYsIDB4MGQsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LAorCXsweDBlLCAweDBlLCAweDBjLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwKKwl7MHgwZCwgMHgwZCwgMHgwYywgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sCisJezB4MGQsIDB4MGMsIDB4MGIsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LAorCXsweDBjLCAweDBjLCAweDBhLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwKKwl7MHgwYiwgMHgwYiwgMHgwYSwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sCisJezB4MGIsIDB4MGEsIDB4MDksIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LAorCXsweDBhLCAweDBhLCAweDA5LCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwKKwl7MHgwYSwgMHgwOSwgMHgwOCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sCisJezB4MDksIDB4MDksIDB4MDgsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LAorCXsweDA5LCAweDA4LCAweDA3LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwfQorfTsKKworc3RhdGljIHZvaWQgcnRsOTJjX2RtX2RpZ2luaXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJZG1fZGlndGFibGUuZGlnX2VuYWJsZV9mbGFnID0gdHJ1ZTsKKwlkbV9kaWd0YWJsZS5kaWdfZXh0X3BvcnRfc3RhZ2UgPSBESUdfRVhUX1BPUlRfU1RBR0VfTUFYOworCWRtX2RpZ3RhYmxlLmN1cl9pZ3ZhbHVlID0gMHgyMDsKKwlkbV9kaWd0YWJsZS5wcmVfaWd2YWx1ZSA9IDB4MDsKKwlkbV9kaWd0YWJsZS5jdXJzdGFfY29ubmVjdGN0YXRlID0gRElHX1NUQV9ESVNDT05ORUNUOworCWRtX2RpZ3RhYmxlLnByZXN0YV9jb25uZWN0c3RhdGUgPSBESUdfU1RBX0RJU0NPTk5FQ1Q7CisJZG1fZGlndGFibGUuY3VybXVsdGlzdGFfY29ubmVjdHN0YXRlID0gRElHX01VTFRJU1RBX0RJU0NPTk5FQ1Q7CisJZG1fZGlndGFibGUucnNzaV9sb3d0aHJlc2ggPSBETV9ESUdfVEhSRVNIX0xPVzsKKwlkbV9kaWd0YWJsZS5yc3NpX2hpZ2h0aHJlc2ggPSBETV9ESUdfVEhSRVNIX0hJR0g7CisJZG1fZGlndGFibGUuZmFfbG93dGhyZXNoID0gRE1fRkFMU0VBTEFSTV9USFJFU0hfTE9XOworCWRtX2RpZ3RhYmxlLmZhX2hpZ2h0aHJlc2ggPSBETV9GQUxTRUFMQVJNX1RIUkVTSF9ISUdIOworCWRtX2RpZ3RhYmxlLnJ4X2dhaW5fcmFuZ2VfbWF4ID0gRE1fRElHX01BWDsKKwlkbV9kaWd0YWJsZS5yeF9nYWluX3JhbmdlX21pbiA9IERNX0RJR19NSU47CisJZG1fZGlndGFibGUuYmFja29mZl92YWwgPSBETV9ESUdfQkFDS09GRl9ERUZBVUxUOworCWRtX2RpZ3RhYmxlLmJhY2tvZmZfdmFsX3JhbmdlX21heCA9IERNX0RJR19CQUNLT0ZGX01BWDsKKwlkbV9kaWd0YWJsZS5iYWNrb2ZmX3ZhbF9yYW5nZV9taW4gPSBETV9ESUdfQkFDS09GRl9NSU47CisJZG1fZGlndGFibGUucHJlX2Nja19wZF9zdGF0ZSA9IENDS19QRF9TVEFHRV9NQVg7CisJZG1fZGlndGFibGUuY3VyX2Nja19wZF9zdGF0ZSA9IENDS19QRF9TVEFHRV9NQVg7Cit9CisKK3N0YXRpYyB1OCBydGw5MmNfZG1faW5pdGlhbF9nYWluX21pbl9wd2RiKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlsb25nIHJzc2lfdmFsX21pbiA9IDA7CisKKwlpZiAoKGRtX2RpZ3RhYmxlLmN1cm11bHRpc3RhX2Nvbm5lY3RzdGF0ZSA9PSBESUdfTVVMVElTVEFfQ09OTkVDVCkgJiYKKwkgICAgKGRtX2RpZ3RhYmxlLmN1cnN0YV9jb25uZWN0Y3RhdGUgPT0gRElHX1NUQV9DT05ORUNUKSkgeworCQlpZiAocnRscHJpdi0+ZG0uZW50cnlfbWluX3VuZGVjb3JhdGVkc21vb3RoZWRfcHdkYiAhPSAwKQorCQkJcnNzaV92YWxfbWluID0KKwkJCSAgICAocnRscHJpdi0+ZG0uZW50cnlfbWluX3VuZGVjb3JhdGVkc21vb3RoZWRfcHdkYiA+CisJCQkgICAgIHJ0bHByaXYtPmRtLnVuZGVjb3JhdGVkX3Ntb290aGVkX3B3ZGIpID8KKwkJCSAgICBydGxwcml2LT5kbS51bmRlY29yYXRlZF9zbW9vdGhlZF9wd2RiIDoKKwkJCSAgICBydGxwcml2LT5kbS5lbnRyeV9taW5fdW5kZWNvcmF0ZWRzbW9vdGhlZF9wd2RiOworCQllbHNlCisJCQlyc3NpX3ZhbF9taW4gPSBydGxwcml2LT5kbS51bmRlY29yYXRlZF9zbW9vdGhlZF9wd2RiOworCX0gZWxzZSBpZiAoZG1fZGlndGFibGUuY3Vyc3RhX2Nvbm5lY3RjdGF0ZSA9PSBESUdfU1RBX0NPTk5FQ1QgfHwKKwkJICAgZG1fZGlndGFibGUuY3Vyc3RhX2Nvbm5lY3RjdGF0ZSA9PSBESUdfU1RBX0JFRk9SRV9DT05ORUNUKSB7CisJCXJzc2lfdmFsX21pbiA9IHJ0bHByaXYtPmRtLnVuZGVjb3JhdGVkX3Ntb290aGVkX3B3ZGI7CisJfSBlbHNlIGlmIChkbV9kaWd0YWJsZS5jdXJtdWx0aXN0YV9jb25uZWN0c3RhdGUgPT0KKwkJICAgRElHX01VTFRJU1RBX0NPTk5FQ1QpIHsKKwkJcnNzaV92YWxfbWluID0gcnRscHJpdi0+ZG0uZW50cnlfbWluX3VuZGVjb3JhdGVkc21vb3RoZWRfcHdkYjsKKwl9CisKKwlyZXR1cm4gKHU4KSByc3NpX3ZhbF9taW47Cit9CisKK3N0YXRpYyB2b2lkIHJ0bDkyY19kbV9mYWxzZV9hbGFybV9jb3VudGVyX3N0YXRpc3RpY3Moc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJdTMyIHJldF92YWx1ZTsKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IGZhbHNlX2FsYXJtX3N0YXRpc3RpY3MgKmZhbHNlYWxtX2NudCA9ICYocnRscHJpdi0+ZmFsc2VhbG1fY250KTsKKworCXJldF92YWx1ZSA9IHJ0bF9nZXRfYmJyZWcoaHcsIFJPRkRNX1BIWUNPVU5URVIxLCBNQVNLRFdPUkQpOworCWZhbHNlYWxtX2NudC0+Y250X3Bhcml0eV9mYWlsID0gKChyZXRfdmFsdWUgJiAweGZmZmYwMDAwKSA+PiAxNik7CisKKwlyZXRfdmFsdWUgPSBydGxfZ2V0X2JicmVnKGh3LCBST0ZETV9QSFlDT1VOVEVSMiwgTUFTS0RXT1JEKTsKKwlmYWxzZWFsbV9jbnQtPmNudF9yYXRlX2lsbGVnYWwgPSAocmV0X3ZhbHVlICYgMHhmZmZmKTsKKwlmYWxzZWFsbV9jbnQtPmNudF9jcmM4X2ZhaWwgPSAoKHJldF92YWx1ZSAmIDB4ZmZmZjAwMDApID4+IDE2KTsKKworCXJldF92YWx1ZSA9IHJ0bF9nZXRfYmJyZWcoaHcsIFJPRkRNX1BIWUNPVU5URVIzLCBNQVNLRFdPUkQpOworCWZhbHNlYWxtX2NudC0+Y250X21jc19mYWlsID0gKHJldF92YWx1ZSAmIDB4ZmZmZik7CisJZmFsc2VhbG1fY250LT5jbnRfb2ZkbV9mYWlsID0gZmFsc2VhbG1fY250LT5jbnRfcGFyaXR5X2ZhaWwgKworCSAgICBmYWxzZWFsbV9jbnQtPmNudF9yYXRlX2lsbGVnYWwgKworCSAgICBmYWxzZWFsbV9jbnQtPmNudF9jcmM4X2ZhaWwgKyBmYWxzZWFsbV9jbnQtPmNudF9tY3NfZmFpbDsKKworCXJ0bF9zZXRfYmJyZWcoaHcsIFJDQ0swX0ZBTFNFQUxBUk1SRVBPUlQsIEJJVCgxNCksIDEpOworCXJldF92YWx1ZSA9IHJ0bF9nZXRfYmJyZWcoaHcsIFJDQ0swX0ZBQ09VTlRFUkxPV0VSLCBNQVNLQllURTApOworCWZhbHNlYWxtX2NudC0+Y250X2Nja19mYWlsID0gcmV0X3ZhbHVlOworCisJcmV0X3ZhbHVlID0gcnRsX2dldF9iYnJlZyhodywgUkNDSzBfRkFDT1VOVEVSVVBQRVIsIE1BU0tCWVRFMyk7CisJZmFsc2VhbG1fY250LT5jbnRfY2NrX2ZhaWwgKz0gKHJldF92YWx1ZSAmIDB4ZmYpIDw8IDg7CisJZmFsc2VhbG1fY250LT5jbnRfYWxsID0gKGZhbHNlYWxtX2NudC0+Y250X3Bhcml0eV9mYWlsICsKKwkJCQkgZmFsc2VhbG1fY250LT5jbnRfcmF0ZV9pbGxlZ2FsICsKKwkJCQkgZmFsc2VhbG1fY250LT5jbnRfY3JjOF9mYWlsICsKKwkJCQkgZmFsc2VhbG1fY250LT5jbnRfbWNzX2ZhaWwgKworCQkJCSBmYWxzZWFsbV9jbnQtPmNudF9jY2tfZmFpbCk7CisKKwlydGxfc2V0X2JicmVnKGh3LCBST0ZETTFfTFNURiwgMHgwODAwMDAwMCwgMSk7CisJcnRsX3NldF9iYnJlZyhodywgUk9GRE0xX0xTVEYsIDB4MDgwMDAwMDAsIDApOworCXJ0bF9zZXRfYmJyZWcoaHcsIFJDQ0swX0ZBTFNFQUxBUk1SRVBPUlQsIDB4MDAwMGMwMDAsIDApOworCXJ0bF9zZXRfYmJyZWcoaHcsIFJDQ0swX0ZBTFNFQUxBUk1SRVBPUlQsIDB4MDAwMGMwMDAsIDIpOworCisJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9ESUcsIERCR19UUkFDRSwKKwkJICgiY250X3Bhcml0eV9mYWlsID0gJWQsIGNudF9yYXRlX2lsbGVnYWwgPSAlZCwgIgorCQkgICJjbnRfY3JjOF9mYWlsID0gJWQsIGNudF9tY3NfZmFpbCA9ICVkXG4iLAorCQkgIGZhbHNlYWxtX2NudC0+Y250X3Bhcml0eV9mYWlsLAorCQkgIGZhbHNlYWxtX2NudC0+Y250X3JhdGVfaWxsZWdhbCwKKwkJICBmYWxzZWFsbV9jbnQtPmNudF9jcmM4X2ZhaWwsIGZhbHNlYWxtX2NudC0+Y250X21jc19mYWlsKSk7CisKKwlSVF9UUkFDRShydGxwcml2LCBDT01QX0RJRywgREJHX1RSQUNFLAorCQkgKCJjbnRfb2ZkbV9mYWlsID0gJXgsIGNudF9jY2tfZmFpbCA9ICV4LCBjbnRfYWxsID0gJXhcbiIsCisJCSAgZmFsc2VhbG1fY250LT5jbnRfb2ZkbV9mYWlsLAorCQkgIGZhbHNlYWxtX2NudC0+Y250X2Nja19mYWlsLCBmYWxzZWFsbV9jbnQtPmNudF9hbGwpKTsKK30KKworc3RhdGljIHZvaWQgcnRsOTJjX2RtX2N0cmxfaW5pdGdhaW5fYnlfZmEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXU4IHZhbHVlX2lnaSA9IGRtX2RpZ3RhYmxlLmN1cl9pZ3ZhbHVlOworCisJaWYgKHJ0bHByaXYtPmZhbHNlYWxtX2NudC5jbnRfYWxsIDwgRE1fRElHX0ZBX1RIMCkKKwkJdmFsdWVfaWdpLS07CisJZWxzZSBpZiAocnRscHJpdi0+ZmFsc2VhbG1fY250LmNudF9hbGwgPCBETV9ESUdfRkFfVEgxKQorCQl2YWx1ZV9pZ2kgKz0gMDsKKwllbHNlIGlmIChydGxwcml2LT5mYWxzZWFsbV9jbnQuY250X2FsbCA8IERNX0RJR19GQV9USDIpCisJCXZhbHVlX2lnaSsrOworCWVsc2UgaWYgKHJ0bHByaXYtPmZhbHNlYWxtX2NudC5jbnRfYWxsID49IERNX0RJR19GQV9USDIpCisJCXZhbHVlX2lnaSArPSAyOworCWlmICh2YWx1ZV9pZ2kgPiBETV9ESUdfRkFfVVBQRVIpCisJCXZhbHVlX2lnaSA9IERNX0RJR19GQV9VUFBFUjsKKwllbHNlIGlmICh2YWx1ZV9pZ2kgPCBETV9ESUdfRkFfTE9XRVIpCisJCXZhbHVlX2lnaSA9IERNX0RJR19GQV9MT1dFUjsKKwlpZiAocnRscHJpdi0+ZmFsc2VhbG1fY250LmNudF9hbGwgPiAxMDAwMCkKKwkJdmFsdWVfaWdpID0gMHgzMjsKKworCWRtX2RpZ3RhYmxlLmN1cl9pZ3ZhbHVlID0gdmFsdWVfaWdpOworCXJ0bDkyY19kbV93cml0ZV9kaWcoaHcpOworfQorCitzdGF0aWMgdm9pZCBydGw5MmNfZG1fY3RybF9pbml0Z2Fpbl9ieV9yc3NpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKworCWlmIChydGxwcml2LT5mYWxzZWFsbV9jbnQuY250X2FsbCA+IGRtX2RpZ3RhYmxlLmZhX2hpZ2h0aHJlc2gpIHsKKwkJaWYgKChkbV9kaWd0YWJsZS5iYWNrb2ZmX3ZhbCAtIDIpIDwKKwkJICAgIGRtX2RpZ3RhYmxlLmJhY2tvZmZfdmFsX3JhbmdlX21pbikKKwkJCWRtX2RpZ3RhYmxlLmJhY2tvZmZfdmFsID0KKwkJCSAgICBkbV9kaWd0YWJsZS5iYWNrb2ZmX3ZhbF9yYW5nZV9taW47CisJCWVsc2UKKwkJCWRtX2RpZ3RhYmxlLmJhY2tvZmZfdmFsIC09IDI7CisJfSBlbHNlIGlmIChydGxwcml2LT5mYWxzZWFsbV9jbnQuY250X2FsbCA8IGRtX2RpZ3RhYmxlLmZhX2xvd3RocmVzaCkgeworCQlpZiAoKGRtX2RpZ3RhYmxlLmJhY2tvZmZfdmFsICsgMikgPgorCQkgICAgZG1fZGlndGFibGUuYmFja29mZl92YWxfcmFuZ2VfbWF4KQorCQkJZG1fZGlndGFibGUuYmFja29mZl92YWwgPQorCQkJICAgIGRtX2RpZ3RhYmxlLmJhY2tvZmZfdmFsX3JhbmdlX21heDsKKwkJZWxzZQorCQkJZG1fZGlndGFibGUuYmFja29mZl92YWwgKz0gMjsKKwl9CisKKwlpZiAoKGRtX2RpZ3RhYmxlLnJzc2lfdmFsX21pbiArIDEwIC0gZG1fZGlndGFibGUuYmFja29mZl92YWwpID4KKwkgICAgZG1fZGlndGFibGUucnhfZ2Fpbl9yYW5nZV9tYXgpCisJCWRtX2RpZ3RhYmxlLmN1cl9pZ3ZhbHVlID0gZG1fZGlndGFibGUucnhfZ2Fpbl9yYW5nZV9tYXg7CisJZWxzZSBpZiAoKGRtX2RpZ3RhYmxlLnJzc2lfdmFsX21pbiArIDEwIC0KKwkJICBkbV9kaWd0YWJsZS5iYWNrb2ZmX3ZhbCkgPCBkbV9kaWd0YWJsZS5yeF9nYWluX3JhbmdlX21pbikKKwkJZG1fZGlndGFibGUuY3VyX2lndmFsdWUgPSBkbV9kaWd0YWJsZS5yeF9nYWluX3JhbmdlX21pbjsKKwllbHNlCisJCWRtX2RpZ3RhYmxlLmN1cl9pZ3ZhbHVlID0gZG1fZGlndGFibGUucnNzaV92YWxfbWluICsgMTAgLQorCQkgICAgZG1fZGlndGFibGUuYmFja29mZl92YWw7CisKKwlSVF9UUkFDRShydGxwcml2LCBDT01QX0RJRywgREJHX1RSQUNFLAorCQkgKCJyc3NpX3ZhbF9taW4gPSAleCBiYWNrb2ZmX3ZhbCAleFxuIiwKKwkJICBkbV9kaWd0YWJsZS5yc3NpX3ZhbF9taW4sIGRtX2RpZ3RhYmxlLmJhY2tvZmZfdmFsKSk7CisKKwlydGw5MmNfZG1fd3JpdGVfZGlnKGh3KTsKK30KKworc3RhdGljIHZvaWQgcnRsOTJjX2RtX2luaXRpYWxfZ2Fpbl9tdWx0aV9zdGEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RhdGljIHU4IGJpbml0aWFsaXplZDsgLyogaW5pdGlhbGl6ZWQgdG8gZmFsc2UgKi8KKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRsX3ByaXYoaHcpKTsKKwlsb25nIHJzc2lfc3RyZW5ndGggPSBydGxwcml2LT5kbS5lbnRyeV9taW5fdW5kZWNvcmF0ZWRzbW9vdGhlZF9wd2RiOworCWJvb2wgYl9tdWx0aV9zdGEgPSBmYWxzZTsKKworCWlmIChtYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKKwkJYl9tdWx0aV9zdGEgPSB0cnVlOworCisJaWYgKChiX211bHRpX3N0YSA9PSBmYWxzZSkgfHwgKGRtX2RpZ3RhYmxlLmN1cnN0YV9jb25uZWN0Y3RhdGUgIT0KKwkJCQkgICAgICAgRElHX1NUQV9ESVNDT05ORUNUKSkgeworCQliaW5pdGlhbGl6ZWQgPSBmYWxzZTsKKwkJZG1fZGlndGFibGUuZGlnX2V4dF9wb3J0X3N0YWdlID0gRElHX0VYVF9QT1JUX1NUQUdFX01BWDsKKwkJcmV0dXJuOworCX0gZWxzZSBpZiAoYmluaXRpYWxpemVkID09IGZhbHNlKSB7CisJCWJpbml0aWFsaXplZCA9IHRydWU7CisJCWRtX2RpZ3RhYmxlLmRpZ19leHRfcG9ydF9zdGFnZSA9IERJR19FWFRfUE9SVF9TVEFHRV8wOworCQlkbV9kaWd0YWJsZS5jdXJfaWd2YWx1ZSA9IDB4MjA7CisJCXJ0bDkyY19kbV93cml0ZV9kaWcoaHcpOworCX0KKworCWlmIChkbV9kaWd0YWJsZS5jdXJtdWx0aXN0YV9jb25uZWN0c3RhdGUgPT0gRElHX01VTFRJU1RBX0NPTk5FQ1QpIHsKKwkJaWYgKChyc3NpX3N0cmVuZ3RoIDwgZG1fZGlndGFibGUucnNzaV9sb3d0aHJlc2gpICYmCisJCSAgICAoZG1fZGlndGFibGUuZGlnX2V4dF9wb3J0X3N0YWdlICE9IERJR19FWFRfUE9SVF9TVEFHRV8xKSkgeworCisJCQlpZiAoZG1fZGlndGFibGUuZGlnX2V4dF9wb3J0X3N0YWdlID09CisJCQkgICAgRElHX0VYVF9QT1JUX1NUQUdFXzIpIHsKKwkJCQlkbV9kaWd0YWJsZS5jdXJfaWd2YWx1ZSA9IDB4MjA7CisJCQkJcnRsOTJjX2RtX3dyaXRlX2RpZyhodyk7CisJCQl9CisKKwkJCWRtX2RpZ3RhYmxlLmRpZ19leHRfcG9ydF9zdGFnZSA9IERJR19FWFRfUE9SVF9TVEFHRV8xOworCQl9IGVsc2UgaWYgKHJzc2lfc3RyZW5ndGggPiBkbV9kaWd0YWJsZS5yc3NpX2hpZ2h0aHJlc2gpIHsKKwkJCWRtX2RpZ3RhYmxlLmRpZ19leHRfcG9ydF9zdGFnZSA9IERJR19FWFRfUE9SVF9TVEFHRV8yOworCQkJcnRsOTJjX2RtX2N0cmxfaW5pdGdhaW5fYnlfZmEoaHcpOworCQl9CisJfSBlbHNlIGlmIChkbV9kaWd0YWJsZS5kaWdfZXh0X3BvcnRfc3RhZ2UgIT0gRElHX0VYVF9QT1JUX1NUQUdFXzApIHsKKwkJZG1fZGlndGFibGUuZGlnX2V4dF9wb3J0X3N0YWdlID0gRElHX0VYVF9QT1JUX1NUQUdFXzA7CisJCWRtX2RpZ3RhYmxlLmN1cl9pZ3ZhbHVlID0gMHgyMDsKKwkJcnRsOTJjX2RtX3dyaXRlX2RpZyhodyk7CisJfQorCisJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9ESUcsIERCR19UUkFDRSwKKwkJICgiY3VybXVsdGlzdGFfY29ubmVjdHN0YXRlID0gIgorCQkgICIleCBkaWdfZXh0X3BvcnRfc3RhZ2UgJXhcbiIsCisJCSAgZG1fZGlndGFibGUuY3VybXVsdGlzdGFfY29ubmVjdHN0YXRlLAorCQkgIGRtX2RpZ3RhYmxlLmRpZ19leHRfcG9ydF9zdGFnZSkpOworfQorCitzdGF0aWMgdm9pZCBydGw5MmNfZG1faW5pdGlhbF9nYWluX3N0YShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisKKwlSVF9UUkFDRShydGxwcml2LCBDT01QX0RJRywgREJHX1RSQUNFLAorCQkgKCJwcmVzdGFfY29ubmVjdHN0YXRlID0gJXgsIgorCQkgICIgY3Vyc3RhX2Nvbm5lY3RjdGF0ZSA9ICV4XG4iLAorCQkgIGRtX2RpZ3RhYmxlLnByZXN0YV9jb25uZWN0c3RhdGUsCisJCSAgZG1fZGlndGFibGUuY3Vyc3RhX2Nvbm5lY3RjdGF0ZSkpOworCisJaWYgKGRtX2RpZ3RhYmxlLnByZXN0YV9jb25uZWN0c3RhdGUgPT0gZG1fZGlndGFibGUuY3Vyc3RhX2Nvbm5lY3RjdGF0ZQorCSAgICB8fCBkbV9kaWd0YWJsZS5jdXJzdGFfY29ubmVjdGN0YXRlID09IERJR19TVEFfQkVGT1JFX0NPTk5FQ1QKKwkgICAgfHwgZG1fZGlndGFibGUuY3Vyc3RhX2Nvbm5lY3RjdGF0ZSA9PSBESUdfU1RBX0NPTk5FQ1QpIHsKKworCQlpZiAoZG1fZGlndGFibGUuY3Vyc3RhX2Nvbm5lY3RjdGF0ZSAhPSBESUdfU1RBX0RJU0NPTk5FQ1QpIHsKKwkJCWRtX2RpZ3RhYmxlLnJzc2lfdmFsX21pbiA9CisJCQkgICAgcnRsOTJjX2RtX2luaXRpYWxfZ2Fpbl9taW5fcHdkYihodyk7CisJCQlydGw5MmNfZG1fY3RybF9pbml0Z2Fpbl9ieV9yc3NpKGh3KTsKKwkJfQorCX0gZWxzZSB7CisJCWRtX2RpZ3RhYmxlLnJzc2lfdmFsX21pbiA9IDA7CisJCWRtX2RpZ3RhYmxlLmRpZ19leHRfcG9ydF9zdGFnZSA9IERJR19FWFRfUE9SVF9TVEFHRV9NQVg7CisJCWRtX2RpZ3RhYmxlLmJhY2tvZmZfdmFsID0gRE1fRElHX0JBQ0tPRkZfREVGQVVMVDsKKwkJZG1fZGlndGFibGUuY3VyX2lndmFsdWUgPSAweDIwOworCQlkbV9kaWd0YWJsZS5wcmVfaWd2YWx1ZSA9IDA7CisJCXJ0bDkyY19kbV93cml0ZV9kaWcoaHcpOworCX0KK30KKworc3RhdGljIHZvaWQgcnRsOTJjX2RtX2Nja19wYWNrZXRfZGV0ZWN0aW9uX3RocmVzaChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCA9IHJ0bF9oYWwocnRsX3ByaXYoaHcpKTsKKworCWlmIChkbV9kaWd0YWJsZS5jdXJzdGFfY29ubmVjdGN0YXRlID09IERJR19TVEFfQ09OTkVDVCkgeworCQlkbV9kaWd0YWJsZS5yc3NpX3ZhbF9taW4gPSBydGw5MmNfZG1faW5pdGlhbF9nYWluX21pbl9wd2RiKGh3KTsKKworCQlpZiAoZG1fZGlndGFibGUucHJlX2Nja19wZF9zdGF0ZSA9PSBDQ0tfUERfU1RBR0VfTG93UnNzaSkgeworCQkJaWYgKGRtX2RpZ3RhYmxlLnJzc2lfdmFsX21pbiA8PSAyNSkKKwkJCQlkbV9kaWd0YWJsZS5jdXJfY2NrX3BkX3N0YXRlID0KKwkJCQkgICAgQ0NLX1BEX1NUQUdFX0xvd1Jzc2k7CisJCQllbHNlCisJCQkJZG1fZGlndGFibGUuY3VyX2Nja19wZF9zdGF0ZSA9CisJCQkJICAgIENDS19QRF9TVEFHRV9IaWdoUnNzaTsKKwkJfSBlbHNlIHsKKwkJCWlmIChkbV9kaWd0YWJsZS5yc3NpX3ZhbF9taW4gPD0gMjApCisJCQkJZG1fZGlndGFibGUuY3VyX2Nja19wZF9zdGF0ZSA9CisJCQkJICAgIENDS19QRF9TVEFHRV9Mb3dSc3NpOworCQkJZWxzZQorCQkJCWRtX2RpZ3RhYmxlLmN1cl9jY2tfcGRfc3RhdGUgPQorCQkJCSAgICBDQ0tfUERfU1RBR0VfSGlnaFJzc2k7CisJCX0KKwl9IGVsc2UgeworCQlkbV9kaWd0YWJsZS5jdXJfY2NrX3BkX3N0YXRlID0gQ0NLX1BEX1NUQUdFX01BWDsKKwl9CisKKwlpZiAoZG1fZGlndGFibGUucHJlX2Nja19wZF9zdGF0ZSAhPSBkbV9kaWd0YWJsZS5jdXJfY2NrX3BkX3N0YXRlKSB7CisJCWlmIChkbV9kaWd0YWJsZS5jdXJfY2NrX3BkX3N0YXRlID09IENDS19QRF9TVEFHRV9Mb3dSc3NpKSB7CisJCQlpZiAocnRscHJpdi0+ZmFsc2VhbG1fY250LmNudF9jY2tfZmFpbCA+IDgwMCkKKwkJCQlkbV9kaWd0YWJsZS5jdXJfY2NrX2ZhX3N0YXRlID0KKwkJCQkgICAgQ0NLX0ZBX1NUQUdFX0hpZ2g7CisJCQllbHNlCisJCQkJZG1fZGlndGFibGUuY3VyX2Nja19mYV9zdGF0ZSA9IENDS19GQV9TVEFHRV9Mb3c7CisKKwkJCWlmIChkbV9kaWd0YWJsZS5wcmVfY2NrX2ZhX3N0YXRlICE9CisJCQkgICAgZG1fZGlndGFibGUuY3VyX2Nja19mYV9zdGF0ZSkgeworCQkJCWlmIChkbV9kaWd0YWJsZS5jdXJfY2NrX2ZhX3N0YXRlID09CisJCQkJICAgIENDS19GQV9TVEFHRV9Mb3cpCisJCQkJCXJ0bF9zZXRfYmJyZWcoaHcsIFJDQ0swX0NDQSwgTUFTS0JZVEUyLAorCQkJCQkJICAgICAgMHg4Myk7CisJCQkJZWxzZQorCQkJCQlydGxfc2V0X2JicmVnKGh3LCBSQ0NLMF9DQ0EsIE1BU0tCWVRFMiwKKwkJCQkJCSAgICAgIDB4Y2QpOworCisJCQkJZG1fZGlndGFibGUucHJlX2Nja19mYV9zdGF0ZSA9CisJCQkJICAgIGRtX2RpZ3RhYmxlLmN1cl9jY2tfZmFfc3RhdGU7CisJCQl9CisKKwkJCXJ0bF9zZXRfYmJyZWcoaHcsIFJDQ0swX1NZU1RFTSwgTUFTS0JZVEUxLCAweDQwKTsKKworCQkJaWYgKElTXzkyQ19TRVJJQUwocnRsaGFsLT52ZXJzaW9uKSkKKwkJCQlydGxfc2V0X2JicmVnKGh3LCBSQ0NLMF9GQUxTRUFMQVJNUkVQT1JULAorCQkJCQkgICAgICBNQVNLQllURTIsIDB4ZDcpOworCQl9IGVsc2UgeworCQkJcnRsX3NldF9iYnJlZyhodywgUkNDSzBfQ0NBLCBNQVNLQllURTIsIDB4Y2QpOworCQkJcnRsX3NldF9iYnJlZyhodywgUkNDSzBfU1lTVEVNLCBNQVNLQllURTEsIDB4NDcpOworCisJCQlpZiAoSVNfOTJDX1NFUklBTChydGxoYWwtPnZlcnNpb24pKQorCQkJCXJ0bF9zZXRfYmJyZWcoaHcsIFJDQ0swX0ZBTFNFQUxBUk1SRVBPUlQsCisJCQkJCSAgICAgIE1BU0tCWVRFMiwgMHhkMyk7CisJCX0KKwkJZG1fZGlndGFibGUucHJlX2Nja19wZF9zdGF0ZSA9IGRtX2RpZ3RhYmxlLmN1cl9jY2tfcGRfc3RhdGU7CisJfQorCisJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9ESUcsIERCR19UUkFDRSwKKwkJICgiQ0NLUERTdGFnZT0leFxuIiwgZG1fZGlndGFibGUuY3VyX2Nja19wZF9zdGF0ZSkpOworCisJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9ESUcsIERCR19UUkFDRSwKKwkJICgiaXM5MkM9JXhcbiIsIElTXzkyQ19TRVJJQUwocnRsaGFsLT52ZXJzaW9uKSkpOworfQorCitzdGF0aWMgdm9pZCBydGw5MmNfZG1fY3RybF9pbml0Z2Fpbl9ieV90d29wb3J0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfbWFjICptYWMgPSBydGxfbWFjKHJ0bF9wcml2KGh3KSk7CisKKwlpZiAobWFjLT5hY3Rfc2Nhbm5pbmcgPT0gdHJ1ZSkKKwkJcmV0dXJuOworCisJaWYgKChtYWMtPmxpbmtfc3RhdGUgPiBNQUM4MDIxMV9OT0xJTkspICYmCisJICAgIChtYWMtPmxpbmtfc3RhdGUgPCBNQUM4MDIxMV9MSU5LRUQpKQorCQlkbV9kaWd0YWJsZS5jdXJzdGFfY29ubmVjdGN0YXRlID0gRElHX1NUQV9CRUZPUkVfQ09OTkVDVDsKKwllbHNlIGlmIChtYWMtPmxpbmtfc3RhdGUgPj0gTUFDODAyMTFfTElOS0VEKQorCQlkbV9kaWd0YWJsZS5jdXJzdGFfY29ubmVjdGN0YXRlID0gRElHX1NUQV9DT05ORUNUOworCWVsc2UKKwkJZG1fZGlndGFibGUuY3Vyc3RhX2Nvbm5lY3RjdGF0ZSA9IERJR19TVEFfRElTQ09OTkVDVDsKKworCXJ0bDkyY19kbV9pbml0aWFsX2dhaW5fc3RhKGh3KTsKKwlydGw5MmNfZG1faW5pdGlhbF9nYWluX211bHRpX3N0YShodyk7CisJcnRsOTJjX2RtX2Nja19wYWNrZXRfZGV0ZWN0aW9uX3RocmVzaChodyk7CisKKwlkbV9kaWd0YWJsZS5wcmVzdGFfY29ubmVjdHN0YXRlID0gZG1fZGlndGFibGUuY3Vyc3RhX2Nvbm5lY3RjdGF0ZTsKKworfQorCitzdGF0aWMgdm9pZCBydGw5MmNfZG1fZGlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKworCWlmIChydGxwcml2LT5kbS5iX2RtX2luaXRpYWxnYWluX2VuYWJsZSA9PSBmYWxzZSkKKwkJcmV0dXJuOworCWlmIChkbV9kaWd0YWJsZS5kaWdfZW5hYmxlX2ZsYWcgPT0gZmFsc2UpCisJCXJldHVybjsKKworCXJ0bDkyY19kbV9jdHJsX2luaXRnYWluX2J5X3R3b3BvcnQoaHcpOworCit9CisKK3N0YXRpYyB2b2lkIHJ0bDkyY19kbV9pbml0X2R5bmFtaWNfdHhwb3dlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisKKwlydGxwcml2LT5kbS5iZHluYW1pY190eHBvd2VyX2VuYWJsZSA9IGZhbHNlOworCisJcnRscHJpdi0+ZG0ubGFzdF9kdHBfbHZsID0gVFhISUdIUFdSTEVWRUxfTk9STUFMOworCXJ0bHByaXYtPmRtLmR5bmFtaWNfdHhoaWdocG93ZXJfbHZsID0gVFhISUdIUFdSTEVWRUxfTk9STUFMOworfQorCitzdGF0aWMgdm9pZCBydGw5MmNfZG1fZHluYW1pY190eHBvd2VyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BoeSAqcnRscGh5ID0gJihydGxwcml2LT5waHkpOworCXN0cnVjdCBydGxfbWFjICptYWMgPSBydGxfbWFjKHJ0bF9wcml2KGh3KSk7CisJbG9uZyB1bmRlY29yYXRlZF9zbW9vdGhlZF9wd2RiOworCisJaWYgKCFydGxwcml2LT5kbS5iZHluYW1pY190eHBvd2VyX2VuYWJsZSkKKwkJcmV0dXJuOworCisJaWYgKHJ0bHByaXYtPmRtLmRtX2ZsYWcgJiBIQUxfRE1fSElQV1JfRElTQUJMRSkgeworCQlydGxwcml2LT5kbS5keW5hbWljX3R4aGlnaHBvd2VyX2x2bCA9IFRYSElHSFBXUkxFVkVMX05PUk1BTDsKKwkJcmV0dXJuOworCX0KKworCWlmICgobWFjLT5saW5rX3N0YXRlIDwgTUFDODAyMTFfTElOS0VEKSAmJgorCSAgICAocnRscHJpdi0+ZG0uZW50cnlfbWluX3VuZGVjb3JhdGVkc21vb3RoZWRfcHdkYiA9PSAwKSkgeworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1BPV0VSLCBEQkdfVFJBQ0UsCisJCQkgKCJOb3QgY29ubmVjdGVkIHRvIGFueVxuIikpOworCisJCXJ0bHByaXYtPmRtLmR5bmFtaWNfdHhoaWdocG93ZXJfbHZsID0gVFhISUdIUFdSTEVWRUxfTk9STUFMOworCisJCXJ0bHByaXYtPmRtLmxhc3RfZHRwX2x2bCA9IFRYSElHSFBXUkxFVkVMX05PUk1BTDsKKwkJcmV0dXJuOworCX0KKworCWlmIChtYWMtPmxpbmtfc3RhdGUgPj0gTUFDODAyMTFfTElOS0VEKSB7CisJCWlmIChtYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgeworCQkJdW5kZWNvcmF0ZWRfc21vb3RoZWRfcHdkYiA9CisJCQkgICAgcnRscHJpdi0+ZG0uZW50cnlfbWluX3VuZGVjb3JhdGVkc21vb3RoZWRfcHdkYjsKKwkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUE9XRVIsIERCR19MT1VELAorCQkJCSAoIkFQIENsaWVudCBQV0RCID0gMHglbHhcbiIsCisJCQkJICB1bmRlY29yYXRlZF9zbW9vdGhlZF9wd2RiKSk7CisJCX0gZWxzZSB7CisJCQl1bmRlY29yYXRlZF9zbW9vdGhlZF9wd2RiID0KKwkJCSAgICBydGxwcml2LT5kbS51bmRlY29yYXRlZF9zbW9vdGhlZF9wd2RiOworCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9QT1dFUiwgREJHX0xPVUQsCisJCQkJICgiU1RBIERlZmF1bHQgUG9ydCBQV0RCID0gMHglbHhcbiIsCisJCQkJICB1bmRlY29yYXRlZF9zbW9vdGhlZF9wd2RiKSk7CisJCX0KKwl9IGVsc2UgeworCQl1bmRlY29yYXRlZF9zbW9vdGhlZF9wd2RiID0KKwkJICAgIHJ0bHByaXYtPmRtLmVudHJ5X21pbl91bmRlY29yYXRlZHNtb290aGVkX3B3ZGI7CisKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9QT1dFUiwgREJHX0xPVUQsCisJCQkgKCJBUCBFeHQgUG9ydCBQV0RCID0gMHglbHhcbiIsCisJCQkgIHVuZGVjb3JhdGVkX3Ntb290aGVkX3B3ZGIpKTsKKwl9CisKKwlpZiAodW5kZWNvcmF0ZWRfc21vb3RoZWRfcHdkYiA+PSBUWF9QT1dFUl9ORUFSX0ZJRUxEX1RIUkVTSF9MVkwyKSB7CisJCXJ0bHByaXYtPmRtLmR5bmFtaWNfdHhoaWdocG93ZXJfbHZsID0gVFhISUdIUFdSTEVWRUxfTEVWRUwxOworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1BPV0VSLCBEQkdfTE9VRCwKKwkJCSAoIlRYSElHSFBXUkxFVkVMX0xFVkVMMSAoVHhQd3I9MHgwKVxuIikpOworCX0gZWxzZSBpZiAoKHVuZGVjb3JhdGVkX3Ntb290aGVkX3B3ZGIgPAorCQkgICAgKFRYX1BPV0VSX05FQVJfRklFTERfVEhSRVNIX0xWTDIgLSAzKSkgJiYKKwkJICAgKHVuZGVjb3JhdGVkX3Ntb290aGVkX3B3ZGIgPj0KKwkJICAgIFRYX1BPV0VSX05FQVJfRklFTERfVEhSRVNIX0xWTDEpKSB7CisKKwkJcnRscHJpdi0+ZG0uZHluYW1pY190eGhpZ2hwb3dlcl9sdmwgPSBUWEhJR0hQV1JMRVZFTF9MRVZFTDE7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUE9XRVIsIERCR19MT1VELAorCQkJICgiVFhISUdIUFdSTEVWRUxfTEVWRUwxIChUeFB3cj0weDEwKVxuIikpOworCX0gZWxzZSBpZiAodW5kZWNvcmF0ZWRfc21vb3RoZWRfcHdkYiA8CisJCSAgIChUWF9QT1dFUl9ORUFSX0ZJRUxEX1RIUkVTSF9MVkwxIC0gNSkpIHsKKwkJcnRscHJpdi0+ZG0uZHluYW1pY190eGhpZ2hwb3dlcl9sdmwgPSBUWEhJR0hQV1JMRVZFTF9OT1JNQUw7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUE9XRVIsIERCR19MT1VELAorCQkJICgiVFhISUdIUFdSTEVWRUxfTk9STUFMXG4iKSk7CisJfQorCisJaWYgKChydGxwcml2LT5kbS5keW5hbWljX3R4aGlnaHBvd2VyX2x2bCAhPSBydGxwcml2LT5kbS5sYXN0X2R0cF9sdmwpKSB7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUE9XRVIsIERCR19MT1VELAorCQkJICgiUEhZX1NldFR4UG93ZXJMZXZlbDgxOTJTKCkgQ2hhbm5lbCA9ICVkXG4iLAorCQkJICBydGxwaHktPmN1cnJlbnRfY2hhbm5lbCkpOworCQlydGw5MmNfcGh5X3NldF90eHBvd2VyX2xldmVsKGh3LCBydGxwaHktPmN1cnJlbnRfY2hhbm5lbCk7CisJfQorCisJcnRscHJpdi0+ZG0ubGFzdF9kdHBfbHZsID0gcnRscHJpdi0+ZG0uZHluYW1pY190eGhpZ2hwb3dlcl9sdmw7Cit9CisKK3ZvaWQgcnRsOTJjX2RtX3dyaXRlX2RpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisKKwlSVF9UUkFDRShydGxwcml2LCBDT01QX0RJRywgREJHX0xPVUQsCisJCSAoImN1cl9pZ3ZhbHVlID0gMHgleCwgIgorCQkgICJwcmVfaWd2YWx1ZSA9IDB4JXgsIGJhY2tvZmZfdmFsID0gJWRcbiIsCisJCSAgZG1fZGlndGFibGUuY3VyX2lndmFsdWUsIGRtX2RpZ3RhYmxlLnByZV9pZ3ZhbHVlLAorCQkgIGRtX2RpZ3RhYmxlLmJhY2tvZmZfdmFsKSk7CisKKwlpZiAoZG1fZGlndGFibGUucHJlX2lndmFsdWUgIT0gZG1fZGlndGFibGUuY3VyX2lndmFsdWUpIHsKKwkJcnRsX3NldF9iYnJlZyhodywgUk9GRE0wX1hBQUdDQ09SRTEsIDB4N2YsCisJCQkgICAgICBkbV9kaWd0YWJsZS5jdXJfaWd2YWx1ZSk7CisJCXJ0bF9zZXRfYmJyZWcoaHcsIFJPRkRNMF9YQkFHQ0NPUkUxLCAweDdmLAorCQkJICAgICAgZG1fZGlndGFibGUuY3VyX2lndmFsdWUpOworCisJCWRtX2RpZ3RhYmxlLnByZV9pZ3ZhbHVlID0gZG1fZGlndGFibGUuY3VyX2lndmFsdWU7CisJfQorfQorCitzdGF0aWMgdm9pZCBydGw5MmNfZG1fcHdkYl9tb25pdG9yKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlsb25nIHRtcGVudHJ5X21heF9wd2RiID0gMCwgdG1wZW50cnlfbWluX3B3ZGIgPSAweGZmOworCisJdTggaDJjX3BhcmFtZXRlclszXSA9IHsgMCB9OworCisJcmV0dXJuOworCisJaWYgKHRtcGVudHJ5X21heF9wd2RiICE9IDApIHsKKwkJcnRscHJpdi0+ZG0uZW50cnlfbWF4X3VuZGVjb3JhdGVkc21vb3RoZWRfcHdkYiA9CisJCSAgICB0bXBlbnRyeV9tYXhfcHdkYjsKKwl9IGVsc2UgeworCQlydGxwcml2LT5kbS5lbnRyeV9tYXhfdW5kZWNvcmF0ZWRzbW9vdGhlZF9wd2RiID0gMDsKKwl9CisKKwlpZiAodG1wZW50cnlfbWluX3B3ZGIgIT0gMHhmZikgeworCQlydGxwcml2LT5kbS5lbnRyeV9taW5fdW5kZWNvcmF0ZWRzbW9vdGhlZF9wd2RiID0KKwkJICAgIHRtcGVudHJ5X21pbl9wd2RiOworCX0gZWxzZSB7CisJCXJ0bHByaXYtPmRtLmVudHJ5X21pbl91bmRlY29yYXRlZHNtb290aGVkX3B3ZGIgPSAwOworCX0KKworCWgyY19wYXJhbWV0ZXJbMl0gPSAodTgpIChydGxwcml2LT5kbS51bmRlY29yYXRlZF9zbW9vdGhlZF9wd2RiICYgMHhGRik7CisJaDJjX3BhcmFtZXRlclswXSA9IDA7CisKKwlydGw5MmNfZmlsbF9oMmNfY21kKGh3LCBIMkNfUlNTSV9SRVBPUlQsIDMsIGgyY19wYXJhbWV0ZXIpOworfQorCit2b2lkIHJ0bDkyY19kbV9pbml0X2VkY2FfdHVyYm8oc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXJ0bHByaXYtPmRtLmJjdXJyZW50X3R1cmJvX2VkY2EgPSBmYWxzZTsKKwlydGxwcml2LT5kbS5iaXNfYW55X25vbmJlcGt0cyA9IGZhbHNlOworCXJ0bHByaXYtPmRtLmJpc19jdXJfcmRsc3RhdGUgPSBmYWxzZTsKK30KKworc3RhdGljIHZvaWQgcnRsOTJjX2RtX2NoZWNrX2VkY2FfdHVyYm8oc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfbWFjICptYWMgPSBydGxfbWFjKHJ0bF9wcml2KGh3KSk7CisJc3RhdGljIHU2NCBsYXN0X3R4b2tfY250OworCXN0YXRpYyB1NjQgbGFzdF9yeG9rX2NudDsKKwl1NjQgY3VyX3R4b2tfY250OworCXU2NCBjdXJfcnhva19jbnQ7CisJdTMyIGVkY2FfYmVfdWwgPSAweDVlYTQyYjsKKwl1MzIgZWRjYV9iZV9kbCA9IDB4NWVhNDJiOworCisJaWYgKG1hYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKQorCQlnb3RvIGRtX2NoZWNrZWRjYXR1cmJvX2V4aXQ7CisKKwlpZiAobWFjLT5saW5rX3N0YXRlICE9IE1BQzgwMjExX0xJTktFRCkgeworCQlydGxwcml2LT5kbS5iY3VycmVudF90dXJib19lZGNhID0gZmFsc2U7CisJCXJldHVybjsKKwl9CisKKwlpZiAoIW1hYy0+aHRfZW5hYmxlKSB7CS8qRklYIE1FUkdFICovCisJCWlmICghKGVkY2FfYmVfdWwgJiAweGZmZmYwMDAwKSkKKwkJCWVkY2FfYmVfdWwgfD0gMHgwMDVlMDAwMDsKKworCQlpZiAoIShlZGNhX2JlX2RsICYgMHhmZmZmMDAwMCkpCisJCQllZGNhX2JlX2RsIHw9IDB4MDA1ZTAwMDA7CisJfQorCisJaWYgKCghcnRscHJpdi0+ZG0uYmlzX2FueV9ub25iZXBrdHMpICYmCisJICAgICghcnRscHJpdi0+ZG0uYl9kaXNhYmxlX2ZyYW1lYnVyc3RpbmcpKSB7CisJCWN1cl90eG9rX2NudCA9IHJ0bHByaXYtPnN0YXRzLnR4Ynl0ZXN1bmljYXN0IC0gbGFzdF90eG9rX2NudDsKKwkJY3VyX3J4b2tfY250ID0gcnRscHJpdi0+c3RhdHMucnhieXRlc3VuaWNhc3QgLSBsYXN0X3J4b2tfY250OworCQlpZiAoY3VyX3J4b2tfY250ID4gNCAqIGN1cl90eG9rX2NudCkgeworCQkJaWYgKCFydGxwcml2LT5kbS5iaXNfY3VyX3JkbHN0YXRlIHx8CisJCQkgICAgIXJ0bHByaXYtPmRtLmJjdXJyZW50X3R1cmJvX2VkY2EpIHsKKwkJCQlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwKKwkJCQkJCVJFR19FRENBX0JFX1BBUkFNLAorCQkJCQkJZWRjYV9iZV9kbCk7CisJCQkJcnRscHJpdi0+ZG0uYmlzX2N1cl9yZGxzdGF0ZSA9IHRydWU7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAocnRscHJpdi0+ZG0uYmlzX2N1cl9yZGxzdGF0ZSB8fAorCQkJICAgICFydGxwcml2LT5kbS5iY3VycmVudF90dXJib19lZGNhKSB7CisJCQkJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsCisJCQkJCQlSRUdfRURDQV9CRV9QQVJBTSwKKwkJCQkJCWVkY2FfYmVfdWwpOworCQkJCXJ0bHByaXYtPmRtLmJpc19jdXJfcmRsc3RhdGUgPSBmYWxzZTsKKwkJCX0KKwkJfQorCQlydGxwcml2LT5kbS5iY3VycmVudF90dXJib19lZGNhID0gdHJ1ZTsKKwl9IGVsc2UgeworCQlpZiAocnRscHJpdi0+ZG0uYmN1cnJlbnRfdHVyYm9fZWRjYSkgeworCQkJdTggdG1wID0gQUMwX0JFOworCQkJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9od19yZWcoaHcsCisJCQkJCQkgICAgICBIV19WQVJfQUNfUEFSQU0sCisJCQkJCQkgICAgICAodTggKikgKCZ0bXApKTsKKwkJCXJ0bHByaXYtPmRtLmJjdXJyZW50X3R1cmJvX2VkY2EgPSBmYWxzZTsKKwkJfQorCX0KKworZG1fY2hlY2tlZGNhdHVyYm9fZXhpdDoKKwlydGxwcml2LT5kbS5iaXNfYW55X25vbmJlcGt0cyA9IGZhbHNlOworCWxhc3RfdHhva19jbnQgPSBydGxwcml2LT5zdGF0cy50eGJ5dGVzdW5pY2FzdDsKKwlsYXN0X3J4b2tfY250ID0gcnRscHJpdi0+c3RhdHMucnhieXRlc3VuaWNhc3Q7Cit9CisKK3N0YXRpYyB2b2lkIHJ0bDkyY19kbV90eHBvd2VyX3RyYWNraW5nX2NhbGxiYWNrX3RoZXJtYWxtZXRlcihzdHJ1Y3QgaWVlZTgwMjExX2h3CisJCQkJCQkJICAgICAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bF9wcml2KGh3KSk7CisJc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKKwlzdHJ1Y3QgcnRsX2VmdXNlICpydGxlZnVzZSA9IHJ0bF9lZnVzZShydGxfcHJpdihodykpOworCXU4IHRoZXJtYWx2YWx1ZSwgZGVsdGEsIGRlbHRhX2xjaywgZGVsdGFfaXFrOworCWxvbmcgZWxlX2EsIGVsZV9kLCB0ZW1wX2NjaywgdmFsX3gsIHZhbHVlMzI7CisJbG9uZyB2YWxfeSwgZWxlX2M7CisJdTggb2ZkbV9pbmRleFsyXSwgY2NrX2luZGV4LCBvZmRtX2luZGV4X29sZFsyXSwgY2NrX2luZGV4X29sZDsKKwlpbnQgaTsKKwlib29sIGlzMnQgPSBJU185MkNfU0VSSUFMKHJ0bGhhbC0+dmVyc2lvbik7CisJdTggdHhwd3JfbGV2ZWxbMl0gPSB7MCwgMH07CisJdTggb2ZkbV9taW5faW5kZXggPSA2LCByZjsKKworCXJ0bHByaXYtPmRtLmJ0eHBvd2VyX3RyYWNraW5nSW5pdCA9IHRydWU7CisJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9QT1dFUl9UUkFDS0lORywgREJHX0xPVUQsCisJCSAoInJ0bDkyY19kbV90eHBvd2VyX3RyYWNraW5nX2NhbGxiYWNrX3RoZXJtYWxtZXRlclxuIikpOworCisJdGhlcm1hbHZhbHVlID0gKHU4KSBydGxfZ2V0X3JmcmVnKGh3LCBSRjkwX1BBVEhfQSwgUkZfVF9NRVRFUiwgMHgxZik7CisKKwlSVF9UUkFDRShydGxwcml2LCBDT01QX1BPV0VSX1RSQUNLSU5HLCBEQkdfTE9VRCwKKwkJICgiUmVhZGJhY2sgVGhlcm1hbCBNZXRlciA9IDB4JXggcHJlIHRoZXJtYWwgbWV0ZXIgMHgleCAiCisJCSAgImVlcHJvbV90aGVybWFsbWV0ZXIgMHgleFxuIiwKKwkJICB0aGVybWFsdmFsdWUsIHJ0bHByaXYtPmRtLnRoZXJtYWx2YWx1ZSwKKwkJICBydGxlZnVzZS0+ZWVwcm9tX3RoZXJtYWxtZXRlcikpOworCisJcnRsOTJjX3BoeV9hcF9jYWxpYnJhdGUoaHcsICh0aGVybWFsdmFsdWUgLQorCQkJCSAgICAgcnRsZWZ1c2UtPmVlcHJvbV90aGVybWFsbWV0ZXIpKTsKKwlpZiAoaXMydCkKKwkJcmYgPSAyOworCWVsc2UKKwkJcmYgPSAxOworCisJaWYgKHRoZXJtYWx2YWx1ZSkgeworCQllbGVfZCA9IHJ0bF9nZXRfYmJyZWcoaHcsIFJPRkRNMF9YQVRYSVFJTUJBTEFOQ0UsCisJCQkJICAgICAgTUFTS0RXT1JEKSAmIE1BU0tPRkRNX0Q7CisKKwkJZm9yIChpID0gMDsgaSA8IE9GRE1fVEFCTEVfTEVOR1RIOyBpKyspIHsKKwkJCWlmIChlbGVfZCA9PSAob2ZkbXN3aW5nX3RhYmxlW2ldICYgTUFTS09GRE1fRCkpIHsKKwkJCQlvZmRtX2luZGV4X29sZFswXSA9ICh1OCkgaTsKKworCQkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUE9XRVJfVFJBQ0tJTkcsIERCR19MT1VELAorCQkJCQkoIkluaXRpYWwgcGF0aEEgZWxlX2QgcmVnMHgleCA9IDB4JWx4LCAiCisJCQkJCSAib2ZkbV9pbmRleD0weCV4XG4iLAorCQkJCQkgUk9GRE0wX1hBVFhJUUlNQkFMQU5DRSwKKwkJCQkJIGVsZV9kLCBvZmRtX2luZGV4X29sZFswXSkpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKGlzMnQpIHsKKwkJCWVsZV9kID0gcnRsX2dldF9iYnJlZyhodywgUk9GRE0wX1hCVFhJUUlNQkFMQU5DRSwKKwkJCQkJICAgICAgTUFTS0RXT1JEKSAmIE1BU0tPRkRNX0Q7CisKKwkJCWZvciAoaSA9IDA7IGkgPCBPRkRNX1RBQkxFX0xFTkdUSDsgaSsrKSB7CisJCQkJaWYgKGVsZV9kID09IChvZmRtc3dpbmdfdGFibGVbaV0gJiBNQVNLT0ZETV9EKSkgeworCQkJCQlvZmRtX2luZGV4X29sZFsxXSA9ICh1OCkgaTsKKworCQkJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1BPV0VSX1RSQUNLSU5HLAorCQkJCQkgICBEQkdfTE9VRCwKKwkJCQkJICAgKCJJbml0aWFsIHBhdGhCIGVsZV9kIHJlZzB4JXggPSAiCisJCQkJCSAgICIweCVseCwgb2ZkbV9pbmRleD0weCV4XG4iLAorCQkJCQkgICBST0ZETTBfWEJUWElRSU1CQUxBTkNFLCBlbGVfZCwKKwkJCQkJICAgb2ZkbV9pbmRleF9vbGRbMV0pKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisKKwkJdGVtcF9jY2sgPQorCQkgICAgcnRsX2dldF9iYnJlZyhodywgUkNDSzBfVFhGSUxURVIyLCBNQVNLRFdPUkQpICYgTUFTS0NDSzsKKworCQlmb3IgKGkgPSAwOyBpIDwgQ0NLX1RBQkxFX0xFTkdUSDsgaSsrKSB7CisJCQlpZiAocnRscHJpdi0+ZG0uYl9jY2tfaW5jaDE0KSB7CisJCQkJaWYgKG1lbWNtcCgodm9pZCAqKSZ0ZW1wX2NjaywKKwkJCQkJICAgKHZvaWQgKikmY2Nrc3dpbmdfdGFibGVfY2gxNFtpXVsyXSwKKwkJCQkJICAgNCkgPT0gMCkgeworCQkJCQljY2tfaW5kZXhfb2xkID0gKHU4KSBpOworCisJCQkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUE9XRVJfVFJBQ0tJTkcsCisJCQkJCQkgREJHX0xPVUQsCisJCQkJCQkgKCJJbml0aWFsIHJlZzB4JXggPSAweCVseCwgIgorCQkJCQkJICAiY2NrX2luZGV4PTB4JXgsIGNoIDE0ICVkXG4iLAorCQkJCQkJICBSQ0NLMF9UWEZJTFRFUjIsIHRlbXBfY2NrLAorCQkJCQkJICBjY2tfaW5kZXhfb2xkLAorCQkJCQkJICBydGxwcml2LT5kbS5iX2Nja19pbmNoMTQpKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlpZiAobWVtY21wKCh2b2lkICopJnRlbXBfY2NrLAorCQkJCQkgICAodm9pZCAqKQorCQkJCQkgICAmY2Nrc3dpbmdfdGFibGVfY2gxY2gxM1tpXVsyXSwKKwkJCQkJICAgNCkgPT0gMCkgeworCQkJCQljY2tfaW5kZXhfb2xkID0gKHU4KSBpOworCisJCQkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUE9XRVJfVFJBQ0tJTkcsCisJCQkJCQkgREJHX0xPVUQsCisJCQkJCQkgKCJJbml0aWFsIHJlZzB4JXggPSAweCVseCwgIgorCQkJCQkJICAiY2NrX2luZGV4PTB4JXgsIGNoMTQgJWRcbiIsCisJCQkJCQkgIFJDQ0swX1RYRklMVEVSMiwgdGVtcF9jY2ssCisJCQkJCQkgIGNja19pbmRleF9vbGQsCisJCQkJCQkgIHJ0bHByaXYtPmRtLmJfY2NrX2luY2gxNCkpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKworCQlpZiAoIXJ0bHByaXYtPmRtLnRoZXJtYWx2YWx1ZSkgeworCQkJcnRscHJpdi0+ZG0udGhlcm1hbHZhbHVlID0KKwkJCSAgICBydGxlZnVzZS0+ZWVwcm9tX3RoZXJtYWxtZXRlcjsKKwkJCXJ0bHByaXYtPmRtLnRoZXJtYWx2YWx1ZV9sY2sgPSB0aGVybWFsdmFsdWU7CisJCQlydGxwcml2LT5kbS50aGVybWFsdmFsdWVfaXFrID0gdGhlcm1hbHZhbHVlOworCQkJZm9yIChpID0gMDsgaSA8IHJmOyBpKyspCisJCQkJcnRscHJpdi0+ZG0ub2ZkbV9pbmRleFtpXSA9IG9mZG1faW5kZXhfb2xkW2ldOworCQkJcnRscHJpdi0+ZG0uY2NrX2luZGV4ID0gY2NrX2luZGV4X29sZDsKKwkJfQorCisJCWRlbHRhID0gKHRoZXJtYWx2YWx1ZSA+IHJ0bHByaXYtPmRtLnRoZXJtYWx2YWx1ZSkgPworCQkgICAgKHRoZXJtYWx2YWx1ZSAtIHJ0bHByaXYtPmRtLnRoZXJtYWx2YWx1ZSkgOgorCQkgICAgKHJ0bHByaXYtPmRtLnRoZXJtYWx2YWx1ZSAtIHRoZXJtYWx2YWx1ZSk7CisKKwkJZGVsdGFfbGNrID0gKHRoZXJtYWx2YWx1ZSA+IHJ0bHByaXYtPmRtLnRoZXJtYWx2YWx1ZV9sY2spID8KKwkJICAgICh0aGVybWFsdmFsdWUgLSBydGxwcml2LT5kbS50aGVybWFsdmFsdWVfbGNrKSA6CisJCSAgICAocnRscHJpdi0+ZG0udGhlcm1hbHZhbHVlX2xjayAtIHRoZXJtYWx2YWx1ZSk7CisKKwkJZGVsdGFfaXFrID0gKHRoZXJtYWx2YWx1ZSA+IHJ0bHByaXYtPmRtLnRoZXJtYWx2YWx1ZV9pcWspID8KKwkJICAgICh0aGVybWFsdmFsdWUgLSBydGxwcml2LT5kbS50aGVybWFsdmFsdWVfaXFrKSA6CisJCSAgICAocnRscHJpdi0+ZG0udGhlcm1hbHZhbHVlX2lxayAtIHRoZXJtYWx2YWx1ZSk7CisKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9QT1dFUl9UUkFDS0lORywgREJHX0xPVUQsCisJCQkoIlJlYWRiYWNrIFRoZXJtYWwgTWV0ZXIgPSAweCV4IHByZSB0aGVybWFsIG1ldGVyIDB4JXggIgorCQkJICJlZXByb21fdGhlcm1hbG1ldGVyIDB4JXggZGVsdGEgMHgleCAiCisJCQkgImRlbHRhX2xjayAweCV4IGRlbHRhX2lxayAweCV4XG4iLAorCQkJIHRoZXJtYWx2YWx1ZSwgcnRscHJpdi0+ZG0udGhlcm1hbHZhbHVlLAorCQkJIHJ0bGVmdXNlLT5lZXByb21fdGhlcm1hbG1ldGVyLCBkZWx0YSwgZGVsdGFfbGNrLAorCQkJIGRlbHRhX2lxaykpOworCisJCWlmIChkZWx0YV9sY2sgPiAxKSB7CisJCQlydGxwcml2LT5kbS50aGVybWFsdmFsdWVfbGNrID0gdGhlcm1hbHZhbHVlOworCQkJcnRsOTJjX3BoeV9sY19jYWxpYnJhdGUoaHcpOworCQl9CisKKwkJaWYgKGRlbHRhID4gMCAmJiBydGxwcml2LT5kbS50eHBvd2VyX3RyYWNrX2NvbnRyb2wpIHsKKwkJCWlmICh0aGVybWFsdmFsdWUgPiBydGxwcml2LT5kbS50aGVybWFsdmFsdWUpIHsKKwkJCQlmb3IgKGkgPSAwOyBpIDwgcmY7IGkrKykKKwkJCQkJcnRscHJpdi0+ZG0ub2ZkbV9pbmRleFtpXSAtPSBkZWx0YTsKKwkJCQlydGxwcml2LT5kbS5jY2tfaW5kZXggLT0gZGVsdGE7CisJCQl9IGVsc2UgeworCQkJCWZvciAoaSA9IDA7IGkgPCByZjsgaSsrKQorCQkJCQlydGxwcml2LT5kbS5vZmRtX2luZGV4W2ldICs9IGRlbHRhOworCQkJCXJ0bHByaXYtPmRtLmNja19pbmRleCArPSBkZWx0YTsKKwkJCX0KKworCQkJaWYgKGlzMnQpIHsKKwkJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1BPV0VSX1RSQUNLSU5HLCBEQkdfTE9VRCwKKwkJCQkJICgidGVtcCBPRkRNX0FfaW5kZXg9MHgleCwgIgorCQkJCQkgICJPRkRNX0JfaW5kZXg9MHgleCwiCisJCQkJCSAgImNja19pbmRleD0weCV4XG4iLAorCQkJCQkgIHJ0bHByaXYtPmRtLm9mZG1faW5kZXhbMF0sCisJCQkJCSAgcnRscHJpdi0+ZG0ub2ZkbV9pbmRleFsxXSwKKwkJCQkJICBydGxwcml2LT5kbS5jY2tfaW5kZXgpKTsKKwkJCX0gZWxzZSB7CisJCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9QT1dFUl9UUkFDS0lORywgREJHX0xPVUQsCisJCQkJCSAoInRlbXAgT0ZETV9BX2luZGV4PTB4JXgsIgorCQkJCQkgICJjY2tfaW5kZXg9MHgleFxuIiwKKwkJCQkJICBydGxwcml2LT5kbS5vZmRtX2luZGV4WzBdLAorCQkJCQkgIHJ0bHByaXYtPmRtLmNja19pbmRleCkpOworCQkJfQorCisJCQlpZiAodGhlcm1hbHZhbHVlID4gcnRsZWZ1c2UtPmVlcHJvbV90aGVybWFsbWV0ZXIpIHsKKwkJCQlmb3IgKGkgPSAwOyBpIDwgcmY7IGkrKykKKwkJCQkJb2ZkbV9pbmRleFtpXSA9CisJCQkJCSAgICBydGxwcml2LT5kbS5vZmRtX2luZGV4W2ldCisJCQkJCSAgICArIDE7CisJCQkJY2NrX2luZGV4ID0gcnRscHJpdi0+ZG0uY2NrX2luZGV4ICsgMTsKKwkJCX0gZWxzZSB7CisJCQkJZm9yIChpID0gMDsgaSA8IHJmOyBpKyspCisJCQkJCW9mZG1faW5kZXhbaV0gPQorCQkJCQkgICAgcnRscHJpdi0+ZG0ub2ZkbV9pbmRleFtpXTsKKwkJCQljY2tfaW5kZXggPSBydGxwcml2LT5kbS5jY2tfaW5kZXg7CisJCQl9CisKKwkJCWZvciAoaSA9IDA7IGkgPCByZjsgaSsrKSB7CisJCQkJaWYgKHR4cHdyX2xldmVsW2ldID49IDAgJiYKKwkJCQkgICAgdHhwd3JfbGV2ZWxbaV0gPD0gMjYpIHsKKwkJCQkJaWYgKHRoZXJtYWx2YWx1ZSA+CisJCQkJCSAgICBydGxlZnVzZS0+ZWVwcm9tX3RoZXJtYWxtZXRlcikgeworCQkJCQkJaWYgKGRlbHRhIDwgNSkKKwkJCQkJCQlvZmRtX2luZGV4W2ldIC09IDE7CisKKwkJCQkJCWVsc2UKKwkJCQkJCQlvZmRtX2luZGV4W2ldIC09IDI7CisJCQkJCX0gZWxzZSBpZiAoZGVsdGEgPiA1ICYmIHRoZXJtYWx2YWx1ZSA8CisJCQkJCQkgICBydGxlZnVzZS0+CisJCQkJCQkgICBlZXByb21fdGhlcm1hbG1ldGVyKSB7CisJCQkJCQlvZmRtX2luZGV4W2ldICs9IDE7CisJCQkJCX0KKwkJCQl9IGVsc2UgaWYgKHR4cHdyX2xldmVsW2ldID49IDI3ICYmCisJCQkJCSAgIHR4cHdyX2xldmVsW2ldIDw9IDMyCisJCQkJCSAgICYmIHRoZXJtYWx2YWx1ZSA+CisJCQkJCSAgIHJ0bGVmdXNlLT5lZXByb21fdGhlcm1hbG1ldGVyKSB7CisJCQkJCWlmIChkZWx0YSA8IDUpCisJCQkJCQlvZmRtX2luZGV4W2ldIC09IDE7CisKKwkJCQkJZWxzZQorCQkJCQkJb2ZkbV9pbmRleFtpXSAtPSAyOworCQkJCX0gZWxzZSBpZiAodHhwd3JfbGV2ZWxbaV0gPj0gMzIgJiYKKwkJCQkJICAgdHhwd3JfbGV2ZWxbaV0gPD0gMzggJiYKKwkJCQkJICAgdGhlcm1hbHZhbHVlID4KKwkJCQkJICAgcnRsZWZ1c2UtPmVlcHJvbV90aGVybWFsbWV0ZXIKKwkJCQkJICAgJiYgZGVsdGEgPiA1KSB7CisJCQkJCW9mZG1faW5kZXhbaV0gLT0gMTsKKwkJCQl9CisJCQl9CisKKwkJCWlmICh0eHB3cl9sZXZlbFtpXSA+PSAwICYmIHR4cHdyX2xldmVsW2ldIDw9IDI2KSB7CisJCQkJaWYgKHRoZXJtYWx2YWx1ZSA+CisJCQkJICAgIHJ0bGVmdXNlLT5lZXByb21fdGhlcm1hbG1ldGVyKSB7CisJCQkJCWlmIChkZWx0YSA8IDUpCisJCQkJCQljY2tfaW5kZXggLT0gMTsKKworCQkJCQllbHNlCisJCQkJCQljY2tfaW5kZXggLT0gMjsKKwkJCQl9IGVsc2UgaWYgKGRlbHRhID4gNSAmJiB0aGVybWFsdmFsdWUgPAorCQkJCQkgICBydGxlZnVzZS0+ZWVwcm9tX3RoZXJtYWxtZXRlcikgeworCQkJCQljY2tfaW5kZXggKz0gMTsKKwkJCQl9CisJCQl9IGVsc2UgaWYgKHR4cHdyX2xldmVsW2ldID49IDI3ICYmCisJCQkJICAgdHhwd3JfbGV2ZWxbaV0gPD0gMzIgJiYKKwkJCQkgICB0aGVybWFsdmFsdWUgPgorCQkJCSAgIHJ0bGVmdXNlLT5lZXByb21fdGhlcm1hbG1ldGVyKSB7CisJCQkJaWYgKGRlbHRhIDwgNSkKKwkJCQkJY2NrX2luZGV4IC09IDE7CisKKwkJCQllbHNlCisJCQkJCWNja19pbmRleCAtPSAyOworCQkJfSBlbHNlIGlmICh0eHB3cl9sZXZlbFtpXSA+PSAzMiAmJgorCQkJCSAgIHR4cHdyX2xldmVsW2ldIDw9IDM4ICYmCisJCQkJICAgdGhlcm1hbHZhbHVlID4gcnRsZWZ1c2UtPmVlcHJvbV90aGVybWFsbWV0ZXIKKwkJCQkgICAmJiBkZWx0YSA+IDUpIHsKKwkJCQljY2tfaW5kZXggLT0gMTsKKwkJCX0KKworCQkJZm9yIChpID0gMDsgaSA8IHJmOyBpKyspIHsKKwkJCQlpZiAob2ZkbV9pbmRleFtpXSA+IE9GRE1fVEFCTEVfU0laRSAtIDEpCisJCQkJCW9mZG1faW5kZXhbaV0gPSBPRkRNX1RBQkxFX1NJWkUgLSAxOworCisJCQkJZWxzZSBpZiAob2ZkbV9pbmRleFtpXSA8IG9mZG1fbWluX2luZGV4KQorCQkJCQlvZmRtX2luZGV4W2ldID0gb2ZkbV9taW5faW5kZXg7CisJCQl9CisKKwkJCWlmIChjY2tfaW5kZXggPiBDQ0tfVEFCTEVfU0laRSAtIDEpCisJCQkJY2NrX2luZGV4ID0gQ0NLX1RBQkxFX1NJWkUgLSAxOworCQkJZWxzZSBpZiAoY2NrX2luZGV4IDwgMCkKKwkJCQljY2tfaW5kZXggPSAwOworCisJCQlpZiAoaXMydCkgeworCQkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUE9XRVJfVFJBQ0tJTkcsIERCR19MT1VELAorCQkJCQkgKCJuZXcgT0ZETV9BX2luZGV4PTB4JXgsICIKKwkJCQkJICAiT0ZETV9CX2luZGV4PTB4JXgsIgorCQkJCQkgICJjY2tfaW5kZXg9MHgleFxuIiwKKwkJCQkJICBvZmRtX2luZGV4WzBdLCBvZmRtX2luZGV4WzFdLAorCQkJCQkgIGNja19pbmRleCkpOworCQkJfSBlbHNlIHsKKwkJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1BPV0VSX1RSQUNLSU5HLCBEQkdfTE9VRCwKKwkJCQkJICgibmV3IE9GRE1fQV9pbmRleD0weCV4LCIKKwkJCQkJICAiY2NrX2luZGV4PTB4JXhcbiIsCisJCQkJCSAgb2ZkbV9pbmRleFswXSwgY2NrX2luZGV4KSk7CisJCQl9CisJCX0KKworCQlpZiAocnRscHJpdi0+ZG0udHhwb3dlcl90cmFja19jb250cm9sICYmIGRlbHRhICE9IDApIHsKKwkJCWVsZV9kID0KKwkJCSAgICAob2ZkbXN3aW5nX3RhYmxlW29mZG1faW5kZXhbMF1dICYgMHhGRkMwMDAwMCkgPj4gMjI7CisJCQl2YWxfeCA9IHJ0bHBoeS0+cmVnX2U5NDsKKwkJCXZhbF95ID0gcnRscGh5LT5yZWdfZTljOworCisJCQlpZiAodmFsX3ggIT0gMCkgeworCQkJCWlmICgodmFsX3ggJiAweDAwMDAwMjAwKSAhPSAwKQorCQkJCQl2YWxfeCA9IHZhbF94IHwgMHhGRkZGRkMwMDsKKwkJCQllbGVfYSA9ICgodmFsX3ggKiBlbGVfZCkgPj4gOCkgJiAweDAwMDAwM0ZGOworCisJCQkJaWYgKCh2YWxfeSAmIDB4MDAwMDAyMDApICE9IDApCisJCQkJCXZhbF95ID0gdmFsX3kgfCAweEZGRkZGQzAwOworCQkJCWVsZV9jID0gKCh2YWxfeSAqIGVsZV9kKSA+PiA4KSAmIDB4MDAwMDAzRkY7CisKKwkJCQl2YWx1ZTMyID0gKGVsZV9kIDw8IDIyKSB8CisJCQkJICAgICgoZWxlX2MgJiAweDNGKSA8PCAxNikgfCBlbGVfYTsKKworCQkJCXJ0bF9zZXRfYmJyZWcoaHcsIFJPRkRNMF9YQVRYSVFJTUJBTEFOQ0UsCisJCQkJCSAgICAgIE1BU0tEV09SRCwgdmFsdWUzMik7CisKKwkJCQl2YWx1ZTMyID0gKGVsZV9jICYgMHgwMDAwMDNDMCkgPj4gNjsKKwkJCQlydGxfc2V0X2JicmVnKGh3LCBST0ZETTBfWENUWEFGRSwgTUFTS0g0QklUUywKKwkJCQkJICAgICAgdmFsdWUzMik7CisKKwkJCQl2YWx1ZTMyID0gKCh2YWxfeCAqIGVsZV9kKSA+PiA3KSAmIDB4MDE7CisJCQkJcnRsX3NldF9iYnJlZyhodywgUk9GRE0wX0VDQ0FUSFJFU0hPTEQsCisJCQkJCSAgICAgIEJJVCgzMSksIHZhbHVlMzIpOworCisJCQkJdmFsdWUzMiA9ICgodmFsX3kgKiBlbGVfZCkgPj4gNykgJiAweDAxOworCQkJCXJ0bF9zZXRfYmJyZWcoaHcsIFJPRkRNMF9FQ0NBVEhSRVNIT0xELAorCQkJCQkgICAgICBCSVQoMjkpLCB2YWx1ZTMyKTsKKwkJCX0gZWxzZSB7CisJCQkJcnRsX3NldF9iYnJlZyhodywgUk9GRE0wX1hBVFhJUUlNQkFMQU5DRSwKKwkJCQkJICAgICAgTUFTS0RXT1JELAorCQkJCQkgICAgICBvZmRtc3dpbmdfdGFibGVbb2ZkbV9pbmRleFswXV0pOworCisJCQkJcnRsX3NldF9iYnJlZyhodywgUk9GRE0wX1hDVFhBRkUsIE1BU0tINEJJVFMsCisJCQkJCSAgICAgIDB4MDApOworCQkJCXJ0bF9zZXRfYmJyZWcoaHcsIFJPRkRNMF9FQ0NBVEhSRVNIT0xELAorCQkJCQkgICAgICBCSVQoMzEpIHwgQklUKDI5KSwgMHgwMCk7CisJCQl9CisKKwkJCWlmICghcnRscHJpdi0+ZG0uYl9jY2tfaW5jaDE0KSB7CisJCQkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgMHhhMjIsCisJCQkJCSAgICAgICBjY2tzd2luZ190YWJsZV9jaDFjaDEzW2Nja19pbmRleF0KKwkJCQkJICAgICAgIFswXSk7CisJCQkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgMHhhMjMsCisJCQkJCSAgICAgICBjY2tzd2luZ190YWJsZV9jaDFjaDEzW2Nja19pbmRleF0KKwkJCQkJICAgICAgIFsxXSk7CisJCQkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgMHhhMjQsCisJCQkJCSAgICAgICBjY2tzd2luZ190YWJsZV9jaDFjaDEzW2Nja19pbmRleF0KKwkJCQkJICAgICAgIFsyXSk7CisJCQkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgMHhhMjUsCisJCQkJCSAgICAgICBjY2tzd2luZ190YWJsZV9jaDFjaDEzW2Nja19pbmRleF0KKwkJCQkJICAgICAgIFszXSk7CisJCQkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgMHhhMjYsCisJCQkJCSAgICAgICBjY2tzd2luZ190YWJsZV9jaDFjaDEzW2Nja19pbmRleF0KKwkJCQkJICAgICAgIFs0XSk7CisJCQkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgMHhhMjcsCisJCQkJCSAgICAgICBjY2tzd2luZ190YWJsZV9jaDFjaDEzW2Nja19pbmRleF0KKwkJCQkJICAgICAgIFs1XSk7CisJCQkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgMHhhMjgsCisJCQkJCSAgICAgICBjY2tzd2luZ190YWJsZV9jaDFjaDEzW2Nja19pbmRleF0KKwkJCQkJICAgICAgIFs2XSk7CisJCQkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgMHhhMjksCisJCQkJCSAgICAgICBjY2tzd2luZ190YWJsZV9jaDFjaDEzW2Nja19pbmRleF0KKwkJCQkJICAgICAgIFs3XSk7CisJCQl9IGVsc2UgeworCQkJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIDB4YTIyLAorCQkJCQkgICAgICAgY2Nrc3dpbmdfdGFibGVfY2gxNFtjY2tfaW5kZXhdCisJCQkJCSAgICAgICBbMF0pOworCQkJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIDB4YTIzLAorCQkJCQkgICAgICAgY2Nrc3dpbmdfdGFibGVfY2gxNFtjY2tfaW5kZXhdCisJCQkJCSAgICAgICBbMV0pOworCQkJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIDB4YTI0LAorCQkJCQkgICAgICAgY2Nrc3dpbmdfdGFibGVfY2gxNFtjY2tfaW5kZXhdCisJCQkJCSAgICAgICBbMl0pOworCQkJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIDB4YTI1LAorCQkJCQkgICAgICAgY2Nrc3dpbmdfdGFibGVfY2gxNFtjY2tfaW5kZXhdCisJCQkJCSAgICAgICBbM10pOworCQkJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIDB4YTI2LAorCQkJCQkgICAgICAgY2Nrc3dpbmdfdGFibGVfY2gxNFtjY2tfaW5kZXhdCisJCQkJCSAgICAgICBbNF0pOworCQkJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIDB4YTI3LAorCQkJCQkgICAgICAgY2Nrc3dpbmdfdGFibGVfY2gxNFtjY2tfaW5kZXhdCisJCQkJCSAgICAgICBbNV0pOworCQkJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIDB4YTI4LAorCQkJCQkgICAgICAgY2Nrc3dpbmdfdGFibGVfY2gxNFtjY2tfaW5kZXhdCisJCQkJCSAgICAgICBbNl0pOworCQkJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIDB4YTI5LAorCQkJCQkgICAgICAgY2Nrc3dpbmdfdGFibGVfY2gxNFtjY2tfaW5kZXhdCisJCQkJCSAgICAgICBbN10pOworCQkJfQorCisJCQlpZiAoaXMydCkgeworCQkJCWVsZV9kID0gKG9mZG1zd2luZ190YWJsZVtvZmRtX2luZGV4WzFdXSAmCisJCQkJCSAweEZGQzAwMDAwKSA+PiAyMjsKKworCQkJCXZhbF94ID0gcnRscGh5LT5yZWdfZWI0OworCQkJCXZhbF95ID0gcnRscGh5LT5yZWdfZWJjOworCisJCQkJaWYgKHZhbF94ICE9IDApIHsKKwkJCQkJaWYgKCh2YWxfeCAmIDB4MDAwMDAyMDApICE9IDApCisJCQkJCQl2YWxfeCA9IHZhbF94IHwgMHhGRkZGRkMwMDsKKwkJCQkJZWxlX2EgPSAoKHZhbF94ICogZWxlX2QpID4+IDgpICYKKwkJCQkJICAgIDB4MDAwMDAzRkY7CisKKwkJCQkJaWYgKCh2YWxfeSAmIDB4MDAwMDAyMDApICE9IDApCisJCQkJCQl2YWxfeSA9IHZhbF95IHwgMHhGRkZGRkMwMDsKKwkJCQkJZWxlX2MgPSAoKHZhbF95ICogZWxlX2QpID4+IDgpICYKKwkJCQkJICAgIDB4MDAwMDNGRjsKKworCQkJCQl2YWx1ZTMyID0gKGVsZV9kIDw8IDIyKSB8CisJCQkJCSAgICAoKGVsZV9jICYgMHgzRikgPDwgMTYpIHwgZWxlX2E7CisJCQkJCXJ0bF9zZXRfYmJyZWcoaHcsCisJCQkJCQkgICAgICBST0ZETTBfWEJUWElRSU1CQUxBTkNFLAorCQkJCQkJICAgICAgTUFTS0RXT1JELCB2YWx1ZTMyKTsKKworCQkJCQl2YWx1ZTMyID0gKGVsZV9jICYgMHgwMDAwMDNDMCkgPj4gNjsKKwkJCQkJcnRsX3NldF9iYnJlZyhodywgUk9GRE0wX1hEVFhBRkUsCisJCQkJCQkgICAgICBNQVNLSDRCSVRTLCB2YWx1ZTMyKTsKKworCQkJCQl2YWx1ZTMyID0gKCh2YWxfeCAqIGVsZV9kKSA+PiA3KSAmIDB4MDE7CisJCQkJCXJ0bF9zZXRfYmJyZWcoaHcsIFJPRkRNMF9FQ0NBVEhSRVNIT0xELAorCQkJCQkJICAgICAgQklUKDI3KSwgdmFsdWUzMik7CisKKwkJCQkJdmFsdWUzMiA9ICgodmFsX3kgKiBlbGVfZCkgPj4gNykgJiAweDAxOworCQkJCQlydGxfc2V0X2JicmVnKGh3LCBST0ZETTBfRUNDQVRIUkVTSE9MRCwKKwkJCQkJCSAgICAgIEJJVCgyNSksIHZhbHVlMzIpOworCQkJCX0gZWxzZSB7CisJCQkJCXJ0bF9zZXRfYmJyZWcoaHcsCisJCQkJCQkgICAgICBST0ZETTBfWEJUWElRSU1CQUxBTkNFLAorCQkJCQkJICAgICAgTUFTS0RXT1JELAorCQkJCQkJICAgICAgb2ZkbXN3aW5nX3RhYmxlW29mZG1faW5kZXgKKwkJCQkJCQkJICAgICAgWzFdXSk7CisJCQkJCXJ0bF9zZXRfYmJyZWcoaHcsIFJPRkRNMF9YRFRYQUZFLAorCQkJCQkJICAgICAgTUFTS0g0QklUUywgMHgwMCk7CisJCQkJCXJ0bF9zZXRfYmJyZWcoaHcsIFJPRkRNMF9FQ0NBVEhSRVNIT0xELAorCQkJCQkJICAgICAgQklUKDI3KSB8IEJJVCgyNSksIDB4MDApOworCQkJCX0KKworCQkJfQorCQl9CisKKwkJaWYgKGRlbHRhX2lxayA+IDMpIHsKKwkJCXJ0bHByaXYtPmRtLnRoZXJtYWx2YWx1ZV9pcWsgPSB0aGVybWFsdmFsdWU7CisJCQlydGw5MmNfcGh5X2lxX2NhbGlicmF0ZShodywgZmFsc2UpOworCQl9CisKKwkJaWYgKHJ0bHByaXYtPmRtLnR4cG93ZXJfdHJhY2tfY29udHJvbCkKKwkJCXJ0bHByaXYtPmRtLnRoZXJtYWx2YWx1ZSA9IHRoZXJtYWx2YWx1ZTsKKwl9CisKKwlSVF9UUkFDRShydGxwcml2LCBDT01QX1BPV0VSX1RSQUNLSU5HLCBEQkdfTE9VRCwgKCI8PT09XG4iKSk7CisKK30KKworc3RhdGljIHZvaWQgcnRsOTJjX2RtX2luaXRpYWxpemVfdHhwb3dlcl90cmFja2luZ190aGVybWFsbWV0ZXIoCisJCQkJCQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisKKwlydGxwcml2LT5kbS5idHhwb3dlcl90cmFja2luZyA9IHRydWU7CisJcnRscHJpdi0+ZG0uYnR4cG93ZXJfdHJhY2tpbmdJbml0ID0gZmFsc2U7CisKKwlSVF9UUkFDRShydGxwcml2LCBDT01QX1BPV0VSX1RSQUNLSU5HLCBEQkdfTE9VRCwKKwkJICgicE1nbnRJbmZvLT5idHhwb3dlcl90cmFja2luZyA9ICVkXG4iLAorCQkgIHJ0bHByaXYtPmRtLmJ0eHBvd2VyX3RyYWNraW5nKSk7Cit9CisKK3N0YXRpYyB2b2lkIHJ0bDkyY19kbV9pbml0aWFsaXplX3R4cG93ZXJfdHJhY2tpbmcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJcnRsOTJjX2RtX2luaXRpYWxpemVfdHhwb3dlcl90cmFja2luZ190aGVybWFsbWV0ZXIoaHcpOworfQorCitzdGF0aWMgdm9pZCBydGw5MmNfZG1fdHhwb3dlcl90cmFja2luZ19kaXJlY3RjYWxsKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXJ0bDkyY19kbV90eHBvd2VyX3RyYWNraW5nX2NhbGxiYWNrX3RoZXJtYWxtZXRlcihodyk7Cit9CisKK3N0YXRpYyB2b2lkIHJ0bDkyY19kbV9jaGVja190eHBvd2VyX3RyYWNraW5nX3RoZXJtYWxfbWV0ZXIoCisJCQkJCQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RhdGljIHU4IHRtX3RyaWdnZXI7CisKKwlpZiAoIXJ0bHByaXYtPmRtLmJ0eHBvd2VyX3RyYWNraW5nKQorCQlyZXR1cm47CisKKwlpZiAoIXRtX3RyaWdnZXIpIHsKKwkJcnRsX3NldF9yZnJlZyhodywgUkY5MF9QQVRIX0EsIFJGX1RfTUVURVIsIFJGUkVHX09GRlNFVF9NQVNLLAorCQkJICAgICAgMHg2MCk7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUE9XRVJfVFJBQ0tJTkcsIERCR19MT1VELAorCQkJICgiVHJpZ2dlciA5MlMgVGhlcm1hbCBNZXRlciEhXG4iKSk7CisJCXRtX3RyaWdnZXIgPSAxOworCQlyZXR1cm47CisJfSBlbHNlIHsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9QT1dFUl9UUkFDS0lORywgREJHX0xPVUQsCisJCQkgKCJTY2hlZHVsZSBUeFBvd2VyVHJhY2tpbmcgZGlyZWN0IGNhbGwhIVxuIikpOworCQlydGw5MmNfZG1fdHhwb3dlcl90cmFja2luZ19kaXJlY3RjYWxsKGh3KTsKKwkJdG1fdHJpZ2dlciA9IDA7CisJfQorfQorCit2b2lkIHJ0bDkyY19kbV9jaGVja190eHBvd2VyX3RyYWNraW5nKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXJ0bDkyY19kbV9jaGVja190eHBvd2VyX3RyYWNraW5nX3RoZXJtYWxfbWV0ZXIoaHcpOworfQorCit2b2lkIHJ0bDkyY19kbV9pbml0X3JhdGVfYWRhcHRpdmVfbWFzayhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJhdGVfYWRhcHRpdmUgKnBfcmEgPSAmKHJ0bHByaXYtPnJhKTsKKworCXBfcmEtPnJhdHJfc3RhdGUgPSBETV9SQVRSX1NUQV9JTklUOworCXBfcmEtPnByZV9yYXRyX3N0YXRlID0gRE1fUkFUUl9TVEFfSU5JVDsKKworCWlmIChydGxwcml2LT5kbS5kbV90eXBlID09IERNX1RZUEVfQllEUklWRVIpCisJCXJ0bHByaXYtPmRtLmJfdXNlcmFtYXNrID0gdHJ1ZTsKKwllbHNlCisJCXJ0bHByaXYtPmRtLmJfdXNlcmFtYXNrID0gZmFsc2U7CisKK30KKworc3RhdGljIHZvaWQgcnRsOTJjX2RtX3JlZnJlc2hfcmF0ZV9hZGFwdGl2ZV9tYXNrKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX2hhbCAqcnRsaGFsID0gcnRsX2hhbChydGxfcHJpdihodykpOworCXN0cnVjdCBydGxfbWFjICptYWMgPSBydGxfbWFjKHJ0bF9wcml2KGh3KSk7CisJc3RydWN0IHJhdGVfYWRhcHRpdmUgKnBfcmEgPSAmKHJ0bHByaXYtPnJhKTsKKwl1MzIgbG93X3Jzc2l0aHJlc2hfZm9yX3JhLCBoaWdoX3Jzc2l0aHJlc2hfZm9yX3JhOworCisJaWYgKGlzX2hhbF9zdG9wKHJ0bGhhbCkpIHsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9SQVRFLCBEQkdfTE9VRCwKKwkJCSAoIjwtLS0tIGRyaXZlciBpcyBnb2luZyB0byB1bmxvYWRcbiIpKTsKKwkJcmV0dXJuOworCX0KKworCWlmICghcnRscHJpdi0+ZG0uYl91c2VyYW1hc2spIHsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9SQVRFLCBEQkdfTE9VRCwKKwkJCSgiPC0tLS0gZHJpdmVyIGRvZXMgbm90IGNvbnRyb2wgcmF0ZSBhZGFwdGl2ZSBtYXNrXG4iKSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAobWFjLT5saW5rX3N0YXRlID09IE1BQzgwMjExX0xJTktFRCkgeworCisJCXN3aXRjaCAocF9yYS0+cHJlX3JhdHJfc3RhdGUpIHsKKwkJY2FzZSBETV9SQVRSX1NUQV9ISUdIOgorCQkJaGlnaF9yc3NpdGhyZXNoX2Zvcl9yYSA9IDUwOworCQkJbG93X3Jzc2l0aHJlc2hfZm9yX3JhID0gMjA7CisJCQlicmVhazsKKwkJY2FzZSBETV9SQVRSX1NUQV9NSURETEU6CisJCQloaWdoX3Jzc2l0aHJlc2hfZm9yX3JhID0gNTU7CisJCQlsb3dfcnNzaXRocmVzaF9mb3JfcmEgPSAyMDsKKwkJCWJyZWFrOworCQljYXNlIERNX1JBVFJfU1RBX0xPVzoKKwkJCWhpZ2hfcnNzaXRocmVzaF9mb3JfcmEgPSA1MDsKKwkJCWxvd19yc3NpdGhyZXNoX2Zvcl9yYSA9IDI1OworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQloaWdoX3Jzc2l0aHJlc2hfZm9yX3JhID0gNTA7CisJCQlsb3dfcnNzaXRocmVzaF9mb3JfcmEgPSAyMDsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHJ0bHByaXYtPmRtLnVuZGVjb3JhdGVkX3Ntb290aGVkX3B3ZGIgPgorCQkgICAgKGxvbmcpaGlnaF9yc3NpdGhyZXNoX2Zvcl9yYSkKKwkJCXBfcmEtPnJhdHJfc3RhdGUgPSBETV9SQVRSX1NUQV9ISUdIOworCQllbHNlIGlmIChydGxwcml2LT5kbS51bmRlY29yYXRlZF9zbW9vdGhlZF9wd2RiID4KKwkJCSAobG9uZylsb3dfcnNzaXRocmVzaF9mb3JfcmEpCisJCQlwX3JhLT5yYXRyX3N0YXRlID0gRE1fUkFUUl9TVEFfTUlERExFOworCQllbHNlCisJCQlwX3JhLT5yYXRyX3N0YXRlID0gRE1fUkFUUl9TVEFfTE9XOworCisJCWlmIChwX3JhLT5wcmVfcmF0cl9zdGF0ZSAhPSBwX3JhLT5yYXRyX3N0YXRlKSB7CisJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1JBVEUsIERCR19MT1VELAorCQkJCSAoIlJTU0kgPSAlbGRcbiIsCisJCQkJICBydGxwcml2LT5kbS51bmRlY29yYXRlZF9zbW9vdGhlZF9wd2RiKSk7CisJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1JBVEUsIERCR19MT1VELAorCQkJCSAoIlJTU0lfTEVWRUwgPSAlZFxuIiwgcF9yYS0+cmF0cl9zdGF0ZSkpOworCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9SQVRFLCBEQkdfTE9VRCwKKwkJCQkgKCJQcmVTdGF0ZSA9ICVkLCBDdXJTdGF0ZSA9ICVkXG4iLAorCQkJCSAgcF9yYS0+cHJlX3JhdHJfc3RhdGUsIHBfcmEtPnJhdHJfc3RhdGUpKTsKKworCQkJcnRscHJpdi0+Y2ZnLT5vcHMtPnVwZGF0ZV9yYXRlX21hc2soaHcsCisJCQkJCXBfcmEtPnJhdHJfc3RhdGUpOworCisJCQlwX3JhLT5wcmVfcmF0cl9zdGF0ZSA9IHBfcmEtPnJhdHJfc3RhdGU7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJ0bDkyY19kbV9pbml0X2R5bmFtaWNfYmJfcG93ZXJzYXZpbmcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJZG1fcHN0YWJsZS5wcmVfY2Nhc3RhdGUgPSBDQ0FfTUFYOworCWRtX3BzdGFibGUuY3VyX2NjYXNhdGUgPSBDQ0FfTUFYOworCWRtX3BzdGFibGUucHJlX3Jmc3RhdGUgPSBSRl9NQVg7CisJZG1fcHN0YWJsZS5jdXJfcmZzdGF0ZSA9IFJGX01BWDsKKwlkbV9wc3RhYmxlLnJzc2lfdmFsX21pbiA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIHJ0bDkyY19kbV8xcl9jY2Eoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGh5ICpydGxwaHkgPSAmKHJ0bHByaXYtPnBoeSk7CisKKwlpZiAoZG1fcHN0YWJsZS5yc3NpX3ZhbF9taW4gIT0gMCkgeworCQlpZiAoZG1fcHN0YWJsZS5wcmVfY2Nhc3RhdGUgPT0gQ0NBXzJSKSB7CisJCQlpZiAoZG1fcHN0YWJsZS5yc3NpX3ZhbF9taW4gPj0gMzUpCisJCQkJZG1fcHN0YWJsZS5jdXJfY2Nhc2F0ZSA9IENDQV8xUjsKKwkJCWVsc2UKKwkJCQlkbV9wc3RhYmxlLmN1cl9jY2FzYXRlID0gQ0NBXzJSOworCQl9IGVsc2UgeworCQkJaWYgKGRtX3BzdGFibGUucnNzaV92YWxfbWluIDw9IDMwKQorCQkJCWRtX3BzdGFibGUuY3VyX2NjYXNhdGUgPSBDQ0FfMlI7CisJCQllbHNlCisJCQkJZG1fcHN0YWJsZS5jdXJfY2Nhc2F0ZSA9IENDQV8xUjsKKwkJfQorCX0gZWxzZSB7CisJCWRtX3BzdGFibGUuY3VyX2NjYXNhdGUgPSBDQ0FfTUFYOworCX0KKworCWlmIChkbV9wc3RhYmxlLnByZV9jY2FzdGF0ZSAhPSBkbV9wc3RhYmxlLmN1cl9jY2FzYXRlKSB7CisJCWlmIChkbV9wc3RhYmxlLmN1cl9jY2FzYXRlID09IENDQV8xUikgeworCQkJaWYgKGdldF9yZl90eXBlKHJ0bHBoeSkgPT0gUkZfMlQyUikgeworCQkJCXJ0bF9zZXRfYmJyZWcoaHcsIFJPRkRNMF9UUlhQQVRIRU5BQkxFLAorCQkJCQkgICAgICBNQVNLQllURTAsIDB4MTMpOworCQkJCXJ0bF9zZXRfYmJyZWcoaHcsIDB4ZTcwLCBNQVNLQllURTMsIDB4MjApOworCQkJfSBlbHNlIHsKKwkJCQlydGxfc2V0X2JicmVnKGh3LCBST0ZETTBfVFJYUEFUSEVOQUJMRSwKKwkJCQkJICAgICAgTUFTS0JZVEUwLCAweDIzKTsKKwkJCQlydGxfc2V0X2JicmVnKGh3LCAweGU3MCwgMHg3ZmMwMDAwMCwgMHgxMGMpOworCQkJfQorCQl9IGVsc2UgeworCQkJcnRsX3NldF9iYnJlZyhodywgUk9GRE0wX1RSWFBBVEhFTkFCTEUsIE1BU0tCWVRFMCwKKwkJCQkgICAgICAweDMzKTsKKwkJCXJ0bF9zZXRfYmJyZWcoaHcsIDB4ZTcwLCBNQVNLQllURTMsIDB4NjMpOworCQl9CisJCWRtX3BzdGFibGUucHJlX2NjYXN0YXRlID0gZG1fcHN0YWJsZS5jdXJfY2Nhc2F0ZTsKKwl9CisKKwlSVF9UUkFDRShydGxwcml2LCBEQkdfTE9VRCwgREJHX0xPVUQsICgiQ0NBU3RhZ2UgPSAlc1xuIiwKKwkJCQkJICAgICAgIChkbV9wc3RhYmxlLmN1cl9jY2FzYXRlID09CisJCQkJCQkwKSA/ICIxUkNDQSIgOiAiMlJDQ0EiKSk7Cit9CisKK3ZvaWQgcnRsOTJjX2RtX3JmX3NhdmluZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggYmZvcmNlX2luX25vcm1hbCkKK3sKKwlzdGF0aWMgdTggaW5pdGlhbGl6ZTsKKwlzdGF0aWMgdTMyIHJlZ184NzQsIHJlZ19jNzAsIHJlZ184NWMsIHJlZ19hNzQ7CisKKwlpZiAoaW5pdGlhbGl6ZSA9PSAwKSB7CisJCXJlZ184NzQgPSAocnRsX2dldF9iYnJlZyhodywgUkZQR0EwX1hDRF9SRklOVEVSRkFDRVNXLAorCQkJCQkgTUFTS0RXT1JEKSAmIDB4MUNDMDAwKSA+PiAxNDsKKworCQlyZWdfYzcwID0gKHJ0bF9nZXRfYmJyZWcoaHcsIFJPRkRNMF9BR0NQQVJBTUVURVIxLAorCQkJCQkgTUFTS0RXT1JEKSAmIEJJVCgzKSkgPj4gMzsKKworCQlyZWdfODVjID0gKHJ0bF9nZXRfYmJyZWcoaHcsIFJGUEdBMF9YQ0RfU1dJVENIQ09OVFJPTCwKKwkJCQkJIE1BU0tEV09SRCkgJiAweEZGMDAwMDAwKSA+PiAyNDsKKworCQlyZWdfYTc0ID0gKHJ0bF9nZXRfYmJyZWcoaHcsIDB4YTc0LCBNQVNLRFdPUkQpICYgMHhGMDAwKSA+PiAxMjsKKworCQlpbml0aWFsaXplID0gMTsKKwl9CisKKwlpZiAoIWJmb3JjZV9pbl9ub3JtYWwpIHsKKwkJaWYgKGRtX3BzdGFibGUucnNzaV92YWxfbWluICE9IDApIHsKKwkJCWlmIChkbV9wc3RhYmxlLnByZV9yZnN0YXRlID09IFJGX05PUk1BTCkgeworCQkJCWlmIChkbV9wc3RhYmxlLnJzc2lfdmFsX21pbiA+PSAzMCkKKwkJCQkJZG1fcHN0YWJsZS5jdXJfcmZzdGF0ZSA9IFJGX1NBVkU7CisJCQkJZWxzZQorCQkJCQlkbV9wc3RhYmxlLmN1cl9yZnN0YXRlID0gUkZfTk9STUFMOworCQkJfSBlbHNlIHsKKwkJCQlpZiAoZG1fcHN0YWJsZS5yc3NpX3ZhbF9taW4gPD0gMjUpCisJCQkJCWRtX3BzdGFibGUuY3VyX3Jmc3RhdGUgPSBSRl9OT1JNQUw7CisJCQkJZWxzZQorCQkJCQlkbV9wc3RhYmxlLmN1cl9yZnN0YXRlID0gUkZfU0FWRTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWRtX3BzdGFibGUuY3VyX3Jmc3RhdGUgPSBSRl9NQVg7CisJCX0KKwl9IGVsc2UgeworCQlkbV9wc3RhYmxlLmN1cl9yZnN0YXRlID0gUkZfTk9STUFMOworCX0KKworCWlmIChkbV9wc3RhYmxlLnByZV9yZnN0YXRlICE9IGRtX3BzdGFibGUuY3VyX3Jmc3RhdGUpIHsKKwkJaWYgKGRtX3BzdGFibGUuY3VyX3Jmc3RhdGUgPT0gUkZfU0FWRSkgeworCQkJcnRsX3NldF9iYnJlZyhodywgUkZQR0EwX1hDRF9SRklOVEVSRkFDRVNXLAorCQkJCSAgICAgIDB4MUMwMDAwLCAweDIpOworCQkJcnRsX3NldF9iYnJlZyhodywgUk9GRE0wX0FHQ1BBUkFNRVRFUjEsIEJJVCgzKSwgMCk7CisJCQlydGxfc2V0X2JicmVnKGh3LCBSRlBHQTBfWENEX1NXSVRDSENPTlRST0wsCisJCQkJICAgICAgMHhGRjAwMDAwMCwgMHg2Myk7CisJCQlydGxfc2V0X2JicmVnKGh3LCBSRlBHQTBfWENEX1JGSU5URVJGQUNFU1csCisJCQkJICAgICAgMHhDMDAwLCAweDIpOworCQkJcnRsX3NldF9iYnJlZyhodywgMHhhNzQsIDB4RjAwMCwgMHgzKTsKKwkJCXJ0bF9zZXRfYmJyZWcoaHcsIDB4ODE4LCBCSVQoMjgpLCAweDApOworCQkJcnRsX3NldF9iYnJlZyhodywgMHg4MTgsIEJJVCgyOCksIDB4MSk7CisJCX0gZWxzZSB7CisJCQlydGxfc2V0X2JicmVnKGh3LCBSRlBHQTBfWENEX1JGSU5URVJGQUNFU1csCisJCQkJICAgICAgMHgxQ0MwMDAsIHJlZ184NzQpOworCQkJcnRsX3NldF9iYnJlZyhodywgUk9GRE0wX0FHQ1BBUkFNRVRFUjEsIEJJVCgzKSwKKwkJCQkgICAgICByZWdfYzcwKTsKKwkJCXJ0bF9zZXRfYmJyZWcoaHcsIFJGUEdBMF9YQ0RfU1dJVENIQ09OVFJPTCwgMHhGRjAwMDAwMCwKKwkJCQkgICAgICByZWdfODVjKTsKKwkJCXJ0bF9zZXRfYmJyZWcoaHcsIDB4YTc0LCAweEYwMDAsIHJlZ19hNzQpOworCQkJcnRsX3NldF9iYnJlZyhodywgMHg4MTgsIEJJVCgyOCksIDB4MCk7CisJCX0KKworCQlkbV9wc3RhYmxlLnByZV9yZnN0YXRlID0gZG1fcHN0YWJsZS5jdXJfcmZzdGF0ZTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJ0bDkyY19kbV9keW5hbWljX2JiX3Bvd2Vyc2F2aW5nKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOworCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bF9wcml2KGh3KSk7CisKKwlpZiAoKChtYWMtPmxpbmtfc3RhdGUgPT0gTUFDODAyMTFfTk9MSU5LKSkgJiYKKwkgICAgKHJ0bHByaXYtPmRtLmVudHJ5X21pbl91bmRlY29yYXRlZHNtb290aGVkX3B3ZGIgPT0gMCkpIHsKKwkJZG1fcHN0YWJsZS5yc3NpX3ZhbF9taW4gPSAwOworCQlSVF9UUkFDRShydGxwcml2LCBEQkdfTE9VRCwgREJHX0xPVUQsCisJCQkgKCJOb3QgY29ubmVjdGVkIHRvIGFueVxuIikpOworCX0KKworCWlmIChtYWMtPmxpbmtfc3RhdGUgPT0gTUFDODAyMTFfTElOS0VEKSB7CisJCWlmIChtYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgeworCQkJZG1fcHN0YWJsZS5yc3NpX3ZhbF9taW4gPQorCQkJICAgIHJ0bHByaXYtPmRtLmVudHJ5X21pbl91bmRlY29yYXRlZHNtb290aGVkX3B3ZGI7CisJCQlSVF9UUkFDRShydGxwcml2LCBEQkdfTE9VRCwgREJHX0xPVUQsCisJCQkJICgiQVAgQ2xpZW50IFBXREIgPSAweCVseFxuIiwKKwkJCQkgIGRtX3BzdGFibGUucnNzaV92YWxfbWluKSk7CisJCX0gZWxzZSB7CisJCQlkbV9wc3RhYmxlLnJzc2lfdmFsX21pbiA9CisJCQkgICAgcnRscHJpdi0+ZG0udW5kZWNvcmF0ZWRfc21vb3RoZWRfcHdkYjsKKwkJCVJUX1RSQUNFKHJ0bHByaXYsIERCR19MT1VELCBEQkdfTE9VRCwKKwkJCQkgKCJTVEEgRGVmYXVsdCBQb3J0IFBXREIgPSAweCVseFxuIiwKKwkJCQkgIGRtX3BzdGFibGUucnNzaV92YWxfbWluKSk7CisJCX0KKwl9IGVsc2UgeworCQlkbV9wc3RhYmxlLnJzc2lfdmFsX21pbiA9CisJCSAgICBydGxwcml2LT5kbS5lbnRyeV9taW5fdW5kZWNvcmF0ZWRzbW9vdGhlZF9wd2RiOworCisJCVJUX1RSQUNFKHJ0bHByaXYsIERCR19MT1VELCBEQkdfTE9VRCwKKwkJCSAoIkFQIEV4dCBQb3J0IFBXREIgPSAweCVseFxuIiwKKwkJCSAgZG1fcHN0YWJsZS5yc3NpX3ZhbF9taW4pKTsKKwl9CisKKwlpZiAoSVNfOTJDX1NFUklBTChydGxoYWwtPnZlcnNpb24pKQorCQlydGw5MmNfZG1fMXJfY2NhKGh3KTsKK30KKwordm9pZCBydGw5MmNfZG1faW5pdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisKKwlydGxwcml2LT5kbS5kbV90eXBlID0gRE1fVFlQRV9CWURSSVZFUjsKKwlydGw5MmNfZG1fZGlnaW5pdChodyk7CisJcnRsOTJjX2RtX2luaXRfZHluYW1pY190eHBvd2VyKGh3KTsKKwlydGw5MmNfZG1faW5pdF9lZGNhX3R1cmJvKGh3KTsKKwlydGw5MmNfZG1faW5pdF9yYXRlX2FkYXB0aXZlX21hc2soaHcpOworCXJ0bDkyY19kbV9pbml0aWFsaXplX3R4cG93ZXJfdHJhY2tpbmcoaHcpOworCXJ0bDkyY19kbV9pbml0X2R5bmFtaWNfYmJfcG93ZXJzYXZpbmcoaHcpOworfQorCit2b2lkIHJ0bDkyY19kbV93YXRjaGRvZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9wc19jdGwgKnBwc2MgPSBydGxfcHNjKHJ0bF9wcml2KGh3KSk7CisJYm9vbCBiX2Z3X2N1cnJlbnRfaW5wc21vZGUgPSBmYWxzZTsKKwlib29sIGJfZndfcHNfYXdha2UgPSB0cnVlOworCisJcnRscHJpdi0+Y2ZnLT5vcHMtPmdldF9od19yZWcoaHcsIEhXX1ZBUl9GV19QU01PREVfU1RBVFVTLAorCQkJCSAgICAgICh1OCAqKSAoJmJfZndfY3VycmVudF9pbnBzbW9kZSkpOworCXJ0bHByaXYtPmNmZy0+b3BzLT5nZXRfaHdfcmVnKGh3LCBIV19WQVJfRldMUFNfUkZfT04sCisJCQkJICAgICAgKHU4ICopICgmYl9md19wc19hd2FrZSkpOworCisJaWYgKChwcHNjLT5yZnB3cl9zdGF0ZSA9PSBFUkZPTikgJiYgKCghYl9md19jdXJyZW50X2lucHNtb2RlKSAmJgorCQkJCQkgICAgIGJfZndfcHNfYXdha2UpCisJICAgICYmICghcHBzYy0+cmZjaGFuZ2VfaW5wcm9ncmVzcykpIHsKKwkJcnRsOTJjX2RtX3B3ZGJfbW9uaXRvcihodyk7CisJCXJ0bDkyY19kbV9kaWcoaHcpOworCQlydGw5MmNfZG1fZmFsc2VfYWxhcm1fY291bnRlcl9zdGF0aXN0aWNzKGh3KTsKKwkJcnRsOTJjX2RtX2R5bmFtaWNfYmJfcG93ZXJzYXZpbmcoaHcpOworCQlydGw5MmNfZG1fZHluYW1pY190eHBvd2VyKGh3KTsKKwkJcnRsOTJjX2RtX2NoZWNrX3R4cG93ZXJfdHJhY2tpbmcoaHcpOworCQlydGw5MmNfZG1fcmVmcmVzaF9yYXRlX2FkYXB0aXZlX21hc2soaHcpOworCQlydGw5MmNfZG1fY2hlY2tfZWRjYV90dXJibyhodyk7CisJfQorfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2UvZG0uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmNlL2RtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDYzNDM5ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmNlL2RtLmgKQEAgLTAsMCArMSwxOTYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQoYykgMjAwOS0yMDEwICBSZWFsdGVrIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAsIFVTQQorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgTElDRU5TRS4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogd2xhbmZhZSA8d2xhbmZhZUByZWFsdGVrLmNvbT4KKyAqIFJlYWx0ZWsgQ29ycG9yYXRpb24sIE5vLiAyLCBJbm5vdmF0aW9uIFJvYWQgSUksIEhzaW5jaHUgU2NpZW5jZSBQYXJrLAorICogSHNpbmNodSAzMDAsIFRhaXdhbi4KKyAqCisgKiBMYXJyeSBGaW5nZXIgPExhcnJ5LkZpbmdlckBsd2Zpbmdlci5uZXQ+CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmCV9fUlRMOTJDX0RNX0hfXworI2RlZmluZSBfX1JUTDkyQ19ETV9IX18KKworI2RlZmluZSBIQUxfRE1fRElHX0RJU0FCTEUJCQlCSVQoMCkKKyNkZWZpbmUgSEFMX0RNX0hJUFdSX0RJU0FCTEUJCQlCSVQoMSkKKworI2RlZmluZSBPRkRNX1RBQkxFX0xFTkdUSAkJCTM3CisjZGVmaW5lIENDS19UQUJMRV9MRU5HVEgJCQkzMworCisjZGVmaW5lIE9GRE1fVEFCTEVfU0laRQkJCQkzNworI2RlZmluZSBDQ0tfVEFCTEVfU0laRQkJCQkzMworCisjZGVmaW5lIEJXX0FVVE9fU1dJVENIX0hJR0hfTE9XCQkJMjUKKyNkZWZpbmUgQldfQVVUT19TV0lUQ0hfTE9XX0hJR0gJCQkzMAorCisjZGVmaW5lIERNX0RJR19USFJFU0hfSElHSAkJCTQwCisjZGVmaW5lIERNX0RJR19USFJFU0hfTE9XCQkJMzUKKworI2RlZmluZSBETV9GQUxTRUFMQVJNX1RIUkVTSF9MT1cJCTQwMAorI2RlZmluZSBETV9GQUxTRUFMQVJNX1RIUkVTSF9ISUdICQkxMDAwCisKKyNkZWZpbmUgRE1fRElHX01BWAkJCQkweDNlCisjZGVmaW5lIERNX0RJR19NSU4JCQkJMHgxZQorCisjZGVmaW5lIERNX0RJR19GQV9VUFBFUgkJCQkweDMyCisjZGVmaW5lIERNX0RJR19GQV9MT1dFUgkJCQkweDIwCisjZGVmaW5lIERNX0RJR19GQV9USDAJCQkJMHgyMAorI2RlZmluZSBETV9ESUdfRkFfVEgxCQkJCTB4MTAwCisjZGVmaW5lIERNX0RJR19GQV9USDIJCQkJMHgyMDAKKworI2RlZmluZSBETV9ESUdfQkFDS09GRl9NQVgJCQkxMgorI2RlZmluZSBETV9ESUdfQkFDS09GRl9NSU4JCQktNAorI2RlZmluZSBETV9ESUdfQkFDS09GRl9ERUZBVUxUCQkJMTAKKworI2RlZmluZSBSWFBBVEhTRUxFQ1RJT05fU1NfVEhfbE9XCQkzMAorI2RlZmluZSBSWFBBVEhTRUxFQ1RJT05fRElGRl9USAkJCTE4CisKKyNkZWZpbmUgRE1fUkFUUl9TVEFfSU5JVAkJCTAKKyNkZWZpbmUgRE1fUkFUUl9TVEFfSElHSAkJCTEKKyNkZWZpbmUgRE1fUkFUUl9TVEFfTUlERExFCQkJMgorI2RlZmluZSBETV9SQVRSX1NUQV9MT1cJCQkJMworCisjZGVmaW5lIENUUzJTRUxGX1RIVkFMCQkJCTMwCisjZGVmaW5lIFJFR0MzOF9USAkJCQkyMAorCisjZGVmaW5lIFdBSU9UVEhWYWwJCQkJMjUKKworI2RlZmluZSBUWEhJR0hQV1JMRVZFTF9OT1JNQUwJCQkwCisjZGVmaW5lIFRYSElHSFBXUkxFVkVMX0xFVkVMMQkJCTEKKyNkZWZpbmUgVFhISUdIUFdSTEVWRUxfTEVWRUwyCQkJMgorI2RlZmluZSBUWEhJR0hQV1JMRVZFTF9CVDEJCQkzCisjZGVmaW5lIFRYSElHSFBXUkxFVkVMX0JUMgkJCTQKKworI2RlZmluZSBETV9UWVBFX0JZRlcJCQkJMAorI2RlZmluZSBETV9UWVBFX0JZRFJJVkVSCQkJMQorCisjZGVmaW5lIFRYX1BPV0VSX05FQVJfRklFTERfVEhSRVNIX0xWTDIJCTc0CisjZGVmaW5lIFRYX1BPV0VSX05FQVJfRklFTERfVEhSRVNIX0xWTDEJCTY3CisKK3N0cnVjdCBwc190IHsKKwl1OCBwcmVfY2Nhc3RhdGU7CisJdTggY3VyX2NjYXNhdGU7CisJdTggcHJlX3Jmc3RhdGU7CisJdTggY3VyX3Jmc3RhdGU7CisJbG9uZyByc3NpX3ZhbF9taW47Cit9OworCitzdHJ1Y3QgZGlnX3QgeworCXU4IGRpZ19lbmFibGVfZmxhZzsKKwl1OCBkaWdfZXh0X3BvcnRfc3RhZ2U7CisJdTMyIHJzc2lfbG93dGhyZXNoOworCXUzMiByc3NpX2hpZ2h0aHJlc2g7CisJdTMyIGZhX2xvd3RocmVzaDsKKwl1MzIgZmFfaGlnaHRocmVzaDsKKwl1OCBjdXJzdGFfY29ubmVjdGN0YXRlOworCXU4IHByZXN0YV9jb25uZWN0c3RhdGU7CisJdTggY3VybXVsdGlzdGFfY29ubmVjdHN0YXRlOworCXU4IHByZV9pZ3ZhbHVlOworCXU4IGN1cl9pZ3ZhbHVlOworCWNoYXIgYmFja29mZl92YWw7CisJY2hhciBiYWNrb2ZmX3ZhbF9yYW5nZV9tYXg7CisJY2hhciBiYWNrb2ZmX3ZhbF9yYW5nZV9taW47CisJdTggcnhfZ2Fpbl9yYW5nZV9tYXg7CisJdTggcnhfZ2Fpbl9yYW5nZV9taW47CisJdTggcnNzaV92YWxfbWluOworCXU4IHByZV9jY2tfcGRfc3RhdGU7CisJdTggY3VyX2Nja19wZF9zdGF0ZTsKKwl1OCBwcmVfY2NrX2ZhX3N0YXRlOworCXU4IGN1cl9jY2tfZmFfc3RhdGU7CisJdTggcHJlX2NjYXN0YXRlOworCXU4IGN1cl9jY2FzYXRlOworfTsKKworc3RydWN0IHN3YXRfdCB7CisJdTggZmFpbHVyZV9jbnQ7CisJdTggdHJ5X2ZsYWc7CisJdTggc3RvcF90cnlpbmc7CisJbG9uZyBwcmVfcnNzaTsKKwlsb25nIHRyeWluZ190aHJlc2hvbGQ7CisJdTggY3VyX2FudGVubmE7CisJdTggcHJlX2FudGVubmE7Cit9OworCitlbnVtIHRhZ19keW5hbWljX2luaXRfZ2Fpbl9vcGVyYXRpb25fdHlwZV9kZWZpbml0aW9uIHsKKwlESUdfVFlQRV9USFJFU0hfSElHSCA9IDAsCisJRElHX1RZUEVfVEhSRVNIX0xPVyA9IDEsCisJRElHX1RZUEVfQkFDS09GRiA9IDIsCisJRElHX1RZUEVfUlhfR0FJTl9NSU4gPSAzLAorCURJR19UWVBFX1JYX0dBSU5fTUFYID0gNCwKKwlESUdfVFlQRV9FTkFCTEUgPSA1LAorCURJR19UWVBFX0RJU0FCTEUgPSA2LAorCURJR19PUF9UWVBFX01BWAorfTsKKworZW51bSB0YWdfY2NrX3BhY2tldF9kZXRlY3Rpb25fdGhyZXNob2xkX3R5cGVfZGVmaW5pdGlvbiB7CisJQ0NLX1BEX1NUQUdFX0xvd1Jzc2kgPSAwLAorCUNDS19QRF9TVEFHRV9IaWdoUnNzaSA9IDEsCisJQ0NLX0ZBX1NUQUdFX0xvdyA9IDIsCisJQ0NLX0ZBX1NUQUdFX0hpZ2ggPSAzLAorCUNDS19QRF9TVEFHRV9NQVggPSA0LAorfTsKKworZW51bSBkbV8xcl9jY2FfZSB7CisJQ0NBXzFSID0gMCwKKwlDQ0FfMlIgPSAxLAorCUNDQV9NQVggPSAyLAorfTsKKworZW51bSBkbV9yZl9lIHsKKwlSRl9TQVZFID0gMCwKKwlSRl9OT1JNQUwgPSAxLAorCVJGX01BWCA9IDIsCit9OworCitlbnVtIGRtX3N3X2FudF9zd2l0Y2hfZSB7CisJQU5TX0FOVEVOTkFfQiA9IDEsCisJQU5TX0FOVEVOTkFfQSA9IDIsCisJQU5TX0FOVEVOTkFfTUFYID0gMywKK307CisKK2VudW0gZG1fZGlnX2V4dF9wb3J0X2FsZ19lIHsKKwlESUdfRVhUX1BPUlRfU1RBR0VfMCA9IDAsCisJRElHX0VYVF9QT1JUX1NUQUdFXzEgPSAxLAorCURJR19FWFRfUE9SVF9TVEFHRV8yID0gMiwKKwlESUdfRVhUX1BPUlRfU1RBR0VfMyA9IDMsCisJRElHX0VYVF9QT1JUX1NUQUdFX01BWCA9IDQsCit9OworCitlbnVtIGRtX2RpZ19jb25uZWN0X2UgeworCURJR19TVEFfRElTQ09OTkVDVCA9IDAsCisJRElHX1NUQV9DT05ORUNUID0gMSwKKwlESUdfU1RBX0JFRk9SRV9DT05ORUNUID0gMiwKKwlESUdfTVVMVElTVEFfRElTQ09OTkVDVCA9IDMsCisJRElHX01VTFRJU1RBX0NPTk5FQ1QgPSA0LAorCURJR19DT05ORUNUX01BWAorfTsKKworZXh0ZXJuIHN0cnVjdCBkaWdfdCBkbV9kaWd0YWJsZTsKK3ZvaWQgcnRsOTJjX2RtX2luaXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwordm9pZCBydGw5MmNfZG1fd2F0Y2hkb2coc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwordm9pZCBydGw5MmNfZG1fd3JpdGVfZGlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3ZvaWQgcnRsOTJjX2RtX2luaXRfZWRjYV90dXJibyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Cit2b2lkIHJ0bDkyY19kbV9jaGVja190eHBvd2VyX3RyYWNraW5nKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3ZvaWQgcnRsOTJjX2RtX2luaXRfcmF0ZV9hZGFwdGl2ZV9tYXNrKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3ZvaWQgcnRsOTJjX2RtX3JmX3NhdmluZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggYmZvcmNlX2luX25vcm1hbCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2UvZncuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmNlL2Z3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFkZDIyYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmNlL2Z3LmMKQEAgLTAsMCArMSw4MDQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQoYykgMjAwOS0yMDEwICBSZWFsdGVrIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAsIFVTQQorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgTElDRU5TRS4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogd2xhbmZhZSA8d2xhbmZhZUByZWFsdGVrLmNvbT4KKyAqIFJlYWx0ZWsgQ29ycG9yYXRpb24sIE5vLiAyLCBJbm5vdmF0aW9uIFJvYWQgSUksIEhzaW5jaHUgU2NpZW5jZSBQYXJrLAorICogSHNpbmNodSAzMDAsIFRhaXdhbi4KKyAqCisgKiBMYXJyeSBGaW5nZXIgPExhcnJ5LkZpbmdlckBsd2Zpbmdlci5uZXQ+CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlICIuLi93aWZpLmgiCisjaW5jbHVkZSAiLi4vcGNpLmgiCisjaW5jbHVkZSAiLi4vYmFzZS5oIgorI2luY2x1ZGUgInJlZy5oIgorI2luY2x1ZGUgImRlZi5oIgorI2luY2x1ZGUgImZ3LmgiCisjaW5jbHVkZSAidGFibGUuaCIKKworc3RhdGljIHZvaWQgX3J0bDkyY19lbmFibGVfZndfZG93bmxvYWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGJvb2wgZW5hYmxlKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX2hhbCAqcnRsaGFsID0gcnRsX2hhbChydGxfcHJpdihodykpOworCisJaWYgKHJ0bGhhbC0+aHdfdHlwZSA9PSBIQVJEV0FSRV9UWVBFX1JUTDgxOTJDVSkgeworCQl1MzIgdmFsdWUzMiA9IHJ0bF9yZWFkX2R3b3JkKHJ0bHByaXYsIFJFR19NQ1VGV0RMKTsKKwkJaWYgKGVuYWJsZSkKKwkJCXZhbHVlMzIgfD0gTUNVRldETF9FTjsKKwkJZWxzZQorCQkJdmFsdWUzMiAmPSB+TUNVRldETF9FTjsKKwkJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFJFR19NQ1VGV0RMLCB2YWx1ZTMyKTsKKwl9IGVsc2UgaWYgKHJ0bGhhbC0+aHdfdHlwZSA9PSBIQVJEV0FSRV9UWVBFX1JUTDgxOTJDRSkgeworCQl1OCB0bXA7CisJCWlmIChlbmFibGUpIHsKKworCQkJdG1wID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBSRUdfU1lTX0ZVTkNfRU4gKyAxKTsKKwkJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19TWVNfRlVOQ19FTiArIDEsCisJCQkJICAgICAgIHRtcCB8IDB4MDQpOworCisJCQl0bXAgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIFJFR19NQ1VGV0RMKTsKKwkJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19NQ1VGV0RMLCB0bXAgfCAweDAxKTsKKworCQkJdG1wID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBSRUdfTUNVRldETCArIDIpOworCQkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX01DVUZXREwgKyAyLCB0bXAgJiAweGY3KTsKKwkJfSBlbHNlIHsKKworCQkJdG1wID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBSRUdfTUNVRldETCk7CisJCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfTUNVRldETCwgdG1wICYgMHhmZSk7CisKKwkJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19NQ1VGV0RMICsgMSwgMHgwMCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9ydGw5MmNfZndfYmxvY2tfd3JpdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgY29uc3QgdTggKmJ1ZmZlciwgdTMyIHNpemUpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXUzMiBibG9ja1NpemUgPSBzaXplb2YodTMyKTsKKwl1OCAqYnVmZmVyUHRyID0gKHU4ICopIGJ1ZmZlcjsKKwl1MzIgKnB1NEJ5dGVQdHIgPSAodTMyICopIGJ1ZmZlcjsKKwl1MzIgaSwgb2Zmc2V0LCBibG9ja0NvdW50LCByZW1haW5TaXplOworCisJYmxvY2tDb3VudCA9IHNpemUgLyBibG9ja1NpemU7CisJcmVtYWluU2l6ZSA9IHNpemUgJSBibG9ja1NpemU7CisKKwlmb3IgKGkgPSAwOyBpIDwgYmxvY2tDb3VudDsgaSsrKSB7CisJCW9mZnNldCA9IGkgKiBibG9ja1NpemU7CisJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCAoRldfODE5MkNfU1RBUlRfQUREUkVTUyArIG9mZnNldCksCisJCQkJKihwdTRCeXRlUHRyICsgaSkpOworCX0KKworCWlmIChyZW1haW5TaXplKSB7CisJCW9mZnNldCA9IGJsb2NrQ291bnQgKiBibG9ja1NpemU7CisJCWJ1ZmZlclB0ciArPSBvZmZzZXQ7CisJCWZvciAoaSA9IDA7IGkgPCByZW1haW5TaXplOyBpKyspIHsKKwkJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIChGV184MTkyQ19TVEFSVF9BRERSRVNTICsKKwkJCQkJCSBvZmZzZXQgKyBpKSwgKihidWZmZXJQdHIgKyBpKSk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9ydGw5MmNfZndfcGFnZV93cml0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgIHUzMiBwYWdlLCBjb25zdCB1OCAqYnVmZmVyLCB1MzIgc2l6ZSkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJdTggdmFsdWU4OworCXU4IHU4cGFnZSA9ICh1OCkgKHBhZ2UgJiAweDA3KTsKKworCXZhbHVlOCA9IChydGxfcmVhZF9ieXRlKHJ0bHByaXYsIFJFR19NQ1VGV0RMICsgMikgJiAweEY4KSB8IHU4cGFnZTsKKworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIChSRUdfTUNVRldETCArIDIpLCB2YWx1ZTgpOworCV9ydGw5MmNfZndfYmxvY2tfd3JpdGUoaHcsIGJ1ZmZlciwgc2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkIF9ydGw5MmNfZmlsbF9kdW1teSh1OCAqcGZ3YnVmLCB1MzIgKnBmd2xlbikKK3sKKwl1MzIgZndsZW4gPSAqcGZ3bGVuOworCXU4IHJlbWFpbiA9ICh1OCkgKGZ3bGVuICUgNCk7CisKKwlyZW1haW4gPSAocmVtYWluID09IDApID8gMCA6ICg0IC0gcmVtYWluKTsKKworCXdoaWxlIChyZW1haW4gPiAwKSB7CisJCXBmd2J1Zltmd2xlbl0gPSAwOworCQlmd2xlbisrOworCQlyZW1haW4tLTsKKwl9CisKKwkqcGZ3bGVuID0gZndsZW47Cit9CisKK3N0YXRpYyB2b2lkIF9ydGw5MmNfd3JpdGVfZncoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgICAgIGVudW0gdmVyc2lvbl84MTkyYyB2ZXJzaW9uLCB1OCAqYnVmZmVyLCB1MzIgc2l6ZSkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCA9IHJ0bF9oYWwocnRsX3ByaXYoaHcpKTsKKwlib29sIGlzX3ZlcnNpb25fYjsKKwl1OCAqYnVmZmVyUHRyID0gKHU4ICopIGJ1ZmZlcjsKKworCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRlcsIERCR19UUkFDRSwgKCJGVyBzaXplIGlzICVkIGJ5dGVzLFxuIiwgc2l6ZSkpOworCisJaXNfdmVyc2lvbl9iID0gSVNfQ0hJUF9WRVJfQih2ZXJzaW9uKTsKKwlpZiAoaXNfdmVyc2lvbl9iKSB7CisJCXUzMiBwYWdlTnVtcywgcmVtYWluU2l6ZTsKKwkJdTMyIHBhZ2UsIG9mZnNldDsKKworCQlpZiAocnRsaGFsLT5od190eXBlID09IEhBUkRXQVJFX1RZUEVfUlRMODE5MkNFKQorCQkJX3J0bDkyY19maWxsX2R1bW15KGJ1ZmZlclB0ciwgJnNpemUpOworCisJCXBhZ2VOdW1zID0gc2l6ZSAvIEZXXzgxOTJDX1BBR0VfU0laRTsKKwkJcmVtYWluU2l6ZSA9IHNpemUgJSBGV184MTkyQ19QQUdFX1NJWkU7CisKKwkJaWYgKHBhZ2VOdW1zID4gNCkgeworCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19FTUVSRywKKwkJCQkgKCJQYWdlIG51bWJlcnMgc2hvdWxkIG5vdCBncmVhdGVyIHRoZW4gNFxuIikpOworCQl9CisKKwkJZm9yIChwYWdlID0gMDsgcGFnZSA8IHBhZ2VOdW1zOyBwYWdlKyspIHsKKwkJCW9mZnNldCA9IHBhZ2UgKiBGV184MTkyQ19QQUdFX1NJWkU7CisJCQlfcnRsOTJjX2Z3X3BhZ2Vfd3JpdGUoaHcsIHBhZ2UsIChidWZmZXJQdHIgKyBvZmZzZXQpLAorCQkJCQkgICAgICBGV184MTkyQ19QQUdFX1NJWkUpOworCQl9CisKKwkJaWYgKHJlbWFpblNpemUpIHsKKwkJCW9mZnNldCA9IHBhZ2VOdW1zICogRldfODE5MkNfUEFHRV9TSVpFOworCQkJcGFnZSA9IHBhZ2VOdW1zOworCQkJX3J0bDkyY19md19wYWdlX3dyaXRlKGh3LCBwYWdlLCAoYnVmZmVyUHRyICsgb2Zmc2V0KSwKKwkJCQkJICAgICAgcmVtYWluU2l6ZSk7CisJCX0KKwl9IGVsc2UgeworCQlfcnRsOTJjX2Z3X2Jsb2NrX3dyaXRlKGh3LCBidWZmZXIsIHNpemUpOworCX0KK30KKworc3RhdGljIGludCBfcnRsOTJjX2Z3X2ZyZWVfdG9fZ28oc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCWludCBlcnIgPSAtRUlPOworCXUzMiBjb3VudGVyID0gMDsKKwl1MzIgdmFsdWUzMjsKKworCWRvIHsKKwkJdmFsdWUzMiA9IHJ0bF9yZWFkX2R3b3JkKHJ0bHByaXYsIFJFR19NQ1VGV0RMKTsKKwl9IHdoaWxlICgoY291bnRlcisrIDwgRldfODE5MkNfUE9MTElOR19USU1FT1VUX0NPVU5UKSAmJgorCQkgKCEodmFsdWUzMiAmIEZXRExfQ2hrU3VtX3JwdCkpKTsKKworCWlmIChjb3VudGVyID49IEZXXzgxOTJDX1BPTExJTkdfVElNRU9VVF9DT1VOVCkgeworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX0VNRVJHLAorCQkJICgiY2hrc3VtIHJlcG9ydCBmYWlsbCAhIFJFR19NQ1VGV0RMOjB4JTA4eCAuXG4iLAorCQkJICB2YWx1ZTMyKSk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlSVF9UUkFDRShydGxwcml2LCBDT01QX0ZXLCBEQkdfVFJBQ0UsCisJCSAoIkNoZWNrc3VtIHJlcG9ydCBPSyAhIFJFR19NQ1VGV0RMOjB4JTA4eCAuXG4iLCB2YWx1ZTMyKSk7CisKKwl2YWx1ZTMyID0gcnRsX3JlYWRfZHdvcmQocnRscHJpdiwgUkVHX01DVUZXREwpOworCXZhbHVlMzIgfD0gTUNVRldETF9SRFk7CisJdmFsdWUzMiAmPSB+V0lOVElOSV9SRFk7CisJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFJFR19NQ1VGV0RMLCB2YWx1ZTMyKTsKKworCWNvdW50ZXIgPSAwOworCisJZG8geworCQl2YWx1ZTMyID0gcnRsX3JlYWRfZHdvcmQocnRscHJpdiwgUkVHX01DVUZXREwpOworCQlpZiAodmFsdWUzMiAmIFdJTlRJTklfUkRZKSB7CisJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0ZXLCBEQkdfVFJBQ0UsCisJCQkJICgiUG9sbGluZyBGVyByZWFkeSBzdWNjZXNzISEiCisJCQkJICIgUkVHX01DVUZXREw6MHglMDh4IC5cbiIsCisJCQkJIHZhbHVlMzIpKTsKKwkJCWVyciA9IDA7CisJCQlnb3RvIGV4aXQ7CisJCX0KKworCQltZGVsYXkoRldfODE5MkNfUE9MTElOR19ERUxBWSk7CisKKwl9IHdoaWxlIChjb3VudGVyKysgPCBGV184MTkyQ19QT0xMSU5HX1RJTUVPVVRfQ09VTlQpOworCisJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19FTUVSRywKKwkJICgiUG9sbGluZyBGVyByZWFkeSBmYWlsISEgUkVHX01DVUZXREw6MHglMDh4IC5cbiIsIHZhbHVlMzIpKTsKKworZXhpdDoKKwlyZXR1cm4gZXJyOworfQorCitpbnQgcnRsOTJjX2Rvd25sb2FkX2Z3KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX2hhbCAqcnRsaGFsID0gcnRsX2hhbChydGxfcHJpdihodykpOworCXN0cnVjdCBydGw5MmNfZmlybXdhcmVfaGVhZGVyICpwZndoZWFkZXI7CisJdTggKnBmd2RhdGE7CisJdTMyIGZ3c2l6ZTsKKwlpbnQgZXJyOworCWVudW0gdmVyc2lvbl84MTkyYyB2ZXJzaW9uID0gcnRsaGFsLT52ZXJzaW9uOworCisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmaXJtd2FyZSA9IE5VTEw7CisKKwllcnIgPSByZXF1ZXN0X2Zpcm13YXJlKCZmaXJtd2FyZSwgcnRscHJpdi0+Y2ZnLT5md19uYW1lLAorCQkJICAgICAgIHJ0bHByaXYtPmlvLmRldik7CisJaWYgKGVycikgeworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX0VNRVJHLAorCQkJICgiRmFpbGVkIHRvIHJlcXVlc3QgZmlybXdhcmUhXG4iKSk7CisJCXJldHVybiAxOworCX0KKworCWlmIChmaXJtd2FyZS0+c2l6ZSA+IDB4NDAwMCkgeworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX0VNRVJHLAorCQkJICgiRmlybXdhcmUgaXMgdG9vIGJpZyFcbiIpKTsKKwkJcmVsZWFzZV9maXJtd2FyZShmaXJtd2FyZSk7CisJCXJldHVybiAxOworCX0KKworCW1lbWNweShydGxoYWwtPnBmaXJtd2FyZSwgZmlybXdhcmUtPmRhdGEsIGZpcm13YXJlLT5zaXplKTsKKwlmd3NpemUgPSBmaXJtd2FyZS0+c2l6ZTsKKwlyZWxlYXNlX2Zpcm13YXJlKGZpcm13YXJlKTsKKworCXBmd2hlYWRlciA9IChzdHJ1Y3QgcnRsOTJjX2Zpcm13YXJlX2hlYWRlciAqKXJ0bGhhbC0+cGZpcm13YXJlOworCXBmd2RhdGEgPSAodTggKikgcnRsaGFsLT5wZmlybXdhcmU7CisKKwlpZiAoSVNfRldfSEVBREVSX0VYSVNUKHBmd2hlYWRlcikpIHsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9GVywgREJHX0RNRVNHLAorCQkJICgiRmlybXdhcmUgVmVyc2lvbiglZCksIFNpZ25hdHVyZSglI3gpLFNpemUoJWQpXG4iLAorCQkJICBwZndoZWFkZXItPnZlcnNpb24sIHBmd2hlYWRlci0+c2lnbmF0dXJlLAorCQkJICAodWludClzaXplb2Yoc3RydWN0IHJ0bDkyY19maXJtd2FyZV9oZWFkZXIpKSk7CisKKwkJcGZ3ZGF0YSA9IHBmd2RhdGEgKyBzaXplb2Yoc3RydWN0IHJ0bDkyY19maXJtd2FyZV9oZWFkZXIpOworCQlmd3NpemUgPSBmd3NpemUgLSBzaXplb2Yoc3RydWN0IHJ0bDkyY19maXJtd2FyZV9oZWFkZXIpOworCX0KKworCV9ydGw5MmNfZW5hYmxlX2Z3X2Rvd25sb2FkKGh3LCB0cnVlKTsKKwlfcnRsOTJjX3dyaXRlX2Z3KGh3LCB2ZXJzaW9uLCBwZndkYXRhLCBmd3NpemUpOworCV9ydGw5MmNfZW5hYmxlX2Z3X2Rvd25sb2FkKGh3LCBmYWxzZSk7CisKKwllcnIgPSBfcnRsOTJjX2Z3X2ZyZWVfdG9fZ28oaHcpOworCWlmIChlcnIpIHsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19FTUVSRywKKwkJCSAoIkZpcm13YXJlIGlzIG5vdCByZWFkeSB0byBydW4hXG4iKSk7CisJfSBlbHNlIHsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9GVywgREJHX1RSQUNFLAorCQkJICgiRmlybXdhcmUgaXMgcmVhZHkgdG8gcnVuIVxuIikpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgYm9vbCBfcnRsOTJjX2NoZWNrX2Z3X3JlYWRfbGFzdF9oMmMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGJveG51bSkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJdTggdmFsX2htZXRmciwgdmFsX21jdXRzdF8xOworCWJvb2wgcmVzdWx0ID0gZmFsc2U7CisKKwl2YWxfaG1ldGZyID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBSRUdfSE1FVEZSKTsKKwl2YWxfbWN1dHN0XzEgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIChSRUdfTUNVVFNUXzEgKyBib3hudW0pKTsKKworCWlmICgoKHZhbF9obWV0ZnIgPj4gYm94bnVtKSAmIEJJVCgwKSkgPT0gMCAmJiB2YWxfbWN1dHN0XzEgPT0gMCkKKwkJcmVzdWx0ID0gdHJ1ZTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCBfcnRsOTJjX2ZpbGxfaDJjX2NvbW1hbmQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgICAgICB1OCBlbGVtZW50X2lkLCB1MzIgY21kX2xlbiwgdTggKnBfY21kYnVmZmVyKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX2hhbCAqcnRsaGFsID0gcnRsX2hhbChydGxfcHJpdihodykpOworCXU4IGJveG51bTsKKwl1MTYgYm94X3JlZywgYm94X2V4dHJlZzsKKwl1OCB1MWJfdG1wOworCWJvb2wgaXNmd19yZWFkID0gZmFsc2U7CisJdTggYnVmX2luZGV4OworCWJvb2wgYndyaXRlX3N1Y2VzcyA9IGZhbHNlOworCXU4IHdhaXRfaDJjX2xpbW1pdCA9IDEwMDsKKwl1OCB3YWl0X3dyaXRlaDJjX2xpbW1pdCA9IDEwMDsKKwl1OCBib3hjb250ZW50WzRdLCBib3hleHRjb250ZW50WzJdOworCXUzMiBoMmNfd2FpdGNvdW50ZXIgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZzsKKwl1OCBpZHg7CisKKwlSVF9UUkFDRShydGxwcml2LCBDT01QX0NNRCwgREJHX0xPVUQsICgiY29tZSBpblxuIikpOworCisJd2hpbGUgKHRydWUpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnJ0bHByaXYtPmxvY2tzLmgyY19sb2NrLCBmbGFnKTsKKwkJaWYgKHJ0bGhhbC0+Yl9oMmNfc2V0aW5wcm9ncmVzcykgeworCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9DTUQsIERCR19MT1VELAorCQkJCSAoIkgyQyBzZXQgaW4gcHJvZ3Jlc3MhIFdhaXQgdG8gc2V0Li4iCisJCQkJICAiZWxlbWVudF9pZCglZCkuXG4iLCBlbGVtZW50X2lkKSk7CisKKwkJCXdoaWxlIChydGxoYWwtPmJfaDJjX3NldGlucHJvZ3Jlc3MpIHsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGxwcml2LT5sb2Nrcy5oMmNfbG9jaywKKwkJCQkJCSAgICAgICBmbGFnKTsKKwkJCQloMmNfd2FpdGNvdW50ZXIrKzsKKwkJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0NNRCwgREJHX0xPVUQsCisJCQkJCSAoIldhaXQgMTAwIHVzICglZCB0aW1lcykuLi5cbiIsCisJCQkJCSAgaDJjX3dhaXRjb3VudGVyKSk7CisJCQkJdWRlbGF5KDEwMCk7CisKKwkJCQlpZiAoaDJjX3dhaXRjb3VudGVyID4gMTAwMCkKKwkJCQkJcmV0dXJuOworCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZydGxwcml2LT5sb2Nrcy5oMmNfbG9jaywKKwkJCQkJCSAgZmxhZyk7CisJCQl9CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGxwcml2LT5sb2Nrcy5oMmNfbG9jaywgZmxhZyk7CisJCX0gZWxzZSB7CisJCQlydGxoYWwtPmJfaDJjX3NldGlucHJvZ3Jlc3MgPSB0cnVlOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnRscHJpdi0+bG9ja3MuaDJjX2xvY2ssIGZsYWcpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwl3aGlsZSAoIWJ3cml0ZV9zdWNlc3MpIHsKKwkJd2FpdF93cml0ZWgyY19saW1taXQtLTsKKwkJaWYgKHdhaXRfd3JpdGVoMmNfbGltbWl0ID09IDApIHsKKwkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfRU1FUkcsCisJCQkJICgiV3JpdGUgSDJDIGZhaWwgYmVjYXVzZSBubyB0cmlnZ2VyICIKKwkJCQkgICJmb3IgRlcgSU5UIVxuIikpOworCQkJYnJlYWs7CisJCX0KKworCQlib3hudW0gPSBydGxoYWwtPmxhc3RfaG1lYm94bnVtOworCQlzd2l0Y2ggKGJveG51bSkgeworCQljYXNlIDA6CisJCQlib3hfcmVnID0gUkVHX0hNRUJPWF8wOworCQkJYm94X2V4dHJlZyA9IFJFR19ITUVCT1hfRVhUXzA7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJYm94X3JlZyA9IFJFR19ITUVCT1hfMTsKKwkJCWJveF9leHRyZWcgPSBSRUdfSE1FQk9YX0VYVF8xOworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCWJveF9yZWcgPSBSRUdfSE1FQk9YXzI7CisJCQlib3hfZXh0cmVnID0gUkVHX0hNRUJPWF9FWFRfMjsKKwkJCWJyZWFrOworCQljYXNlIDM6CisJCQlib3hfcmVnID0gUkVHX0hNRUJPWF8zOworCQkJYm94X2V4dHJlZyA9IFJFR19ITUVCT1hfRVhUXzM7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfRU1FUkcsCisJCQkJICgic3dpdGNoIGNhc2Ugbm90IHByb2Nlc3NcbiIpKTsKKwkJCWJyZWFrOworCQl9CisKKwkJaXNmd19yZWFkID0gX3J0bDkyY19jaGVja19md19yZWFkX2xhc3RfaDJjKGh3LCBib3hudW0pOworCQl3aGlsZSAoIWlzZndfcmVhZCkgeworCisJCQl3YWl0X2gyY19saW1taXQtLTsKKwkJCWlmICh3YWl0X2gyY19saW1taXQgPT0gMCkgeworCQkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfQ01ELCBEQkdfTE9VRCwKKwkJCQkJICgiV2F0aW5nIHRvbyBsb25nIGZvciBGVyByZWFkICIKKwkJCQkJICAiY2xlYXIgSE1FQm94KCVkKSFcbiIsIGJveG51bSkpOworCQkJCWJyZWFrOworCQkJfQorCisJCQl1ZGVsYXkoMTApOworCisJCQlpc2Z3X3JlYWQgPSBfcnRsOTJjX2NoZWNrX2Z3X3JlYWRfbGFzdF9oMmMoaHcsIGJveG51bSk7CisJCQl1MWJfdG1wID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCAweDFCRik7CisJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0NNRCwgREJHX0xPVUQsCisJCQkJICgiV2F0aW5nIGZvciBGVyByZWFkIGNsZWFyIEhNRUJveCglZCkhISEgIgorCQkJCSAgIjB4MUJGID0gJTJ4XG4iLCBib3hudW0sIHUxYl90bXApKTsKKwkJfQorCisJCWlmICghaXNmd19yZWFkKSB7CisJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0NNRCwgREJHX0xPVUQsCisJCQkJICgiV3JpdGUgSDJDIHJlZ2lzdGVyIEJPWFslZF0gZmFpbCEhISEhICIKKwkJCQkgICJGdyBkbyBub3QgcmVhZC5cbiIsIGJveG51bSkpOworCQkJYnJlYWs7CisJCX0KKworCQltZW1zZXQoYm94Y29udGVudCwgMCwgc2l6ZW9mKGJveGNvbnRlbnQpKTsKKwkJbWVtc2V0KGJveGV4dGNvbnRlbnQsIDAsIHNpemVvZihib3hleHRjb250ZW50KSk7CisJCWJveGNvbnRlbnRbMF0gPSBlbGVtZW50X2lkOworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0NNRCwgREJHX0xPVUQsCisJCQkgKCJXcml0ZSBlbGVtZW50X2lkIGJveF9yZWcoJTR4KSA9ICUyeFxuIiwKKwkJCSAgYm94X3JlZywgZWxlbWVudF9pZCkpOworCisJCXN3aXRjaCAoY21kX2xlbikgeworCQljYXNlIDE6CisJCQlib3hjb250ZW50WzBdICY9IH4oQklUKDcpKTsKKwkJCW1lbWNweSgodTggKikgKGJveGNvbnRlbnQpICsgMSwKKwkJCSAgICAgICBwX2NtZGJ1ZmZlciArIGJ1Zl9pbmRleCwgMSk7CisKKwkJCWZvciAoaWR4ID0gMDsgaWR4IDwgNDsgaWR4KyspIHsKKwkJCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBib3hfcmVnICsgaWR4LAorCQkJCQkgICAgICAgYm94Y29udGVudFtpZHhdKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlib3hjb250ZW50WzBdICY9IH4oQklUKDcpKTsKKwkJCW1lbWNweSgodTggKikgKGJveGNvbnRlbnQpICsgMSwKKwkJCSAgICAgICBwX2NtZGJ1ZmZlciArIGJ1Zl9pbmRleCwgMik7CisKKwkJCWZvciAoaWR4ID0gMDsgaWR4IDwgNDsgaWR4KyspIHsKKwkJCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBib3hfcmVnICsgaWR4LAorCQkJCQkgICAgICAgYm94Y29udGVudFtpZHhdKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIDM6CisJCQlib3hjb250ZW50WzBdICY9IH4oQklUKDcpKTsKKwkJCW1lbWNweSgodTggKikgKGJveGNvbnRlbnQpICsgMSwKKwkJCSAgICAgICBwX2NtZGJ1ZmZlciArIGJ1Zl9pbmRleCwgMyk7CisKKwkJCWZvciAoaWR4ID0gMDsgaWR4IDwgNDsgaWR4KyspIHsKKwkJCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBib3hfcmVnICsgaWR4LAorCQkJCQkgICAgICAgYm94Y29udGVudFtpZHhdKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIDQ6CisJCQlib3hjb250ZW50WzBdIHw9IChCSVQoNykpOworCQkJbWVtY3B5KCh1OCAqKSAoYm94ZXh0Y29udGVudCksCisJCQkgICAgICAgcF9jbWRidWZmZXIgKyBidWZfaW5kZXgsIDIpOworCQkJbWVtY3B5KCh1OCAqKSAoYm94Y29udGVudCkgKyAxLAorCQkJICAgICAgIHBfY21kYnVmZmVyICsgYnVmX2luZGV4ICsgMiwgMik7CisKKwkJCWZvciAoaWR4ID0gMDsgaWR4IDwgMjsgaWR4KyspIHsKKwkJCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBib3hfZXh0cmVnICsgaWR4LAorCQkJCQkgICAgICAgYm94ZXh0Y29udGVudFtpZHhdKTsKKwkJCX0KKworCQkJZm9yIChpZHggPSAwOyBpZHggPCA0OyBpZHgrKykgeworCQkJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIGJveF9yZWcgKyBpZHgsCisJCQkJCSAgICAgICBib3hjb250ZW50W2lkeF0pOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgNToKKwkJCWJveGNvbnRlbnRbMF0gfD0gKEJJVCg3KSk7CisJCQltZW1jcHkoKHU4ICopIChib3hleHRjb250ZW50KSwKKwkJCSAgICAgICBwX2NtZGJ1ZmZlciArIGJ1Zl9pbmRleCwgMik7CisJCQltZW1jcHkoKHU4ICopIChib3hjb250ZW50KSArIDEsCisJCQkgICAgICAgcF9jbWRidWZmZXIgKyBidWZfaW5kZXggKyAyLCAzKTsKKworCQkJZm9yIChpZHggPSAwOyBpZHggPCAyOyBpZHgrKykgeworCQkJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIGJveF9leHRyZWcgKyBpZHgsCisJCQkJCSAgICAgICBib3hleHRjb250ZW50W2lkeF0pOworCQkJfQorCisJCQlmb3IgKGlkeCA9IDA7IGlkeCA8IDQ7IGlkeCsrKSB7CisJCQkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgYm94X3JlZyArIGlkeCwKKwkJCQkJICAgICAgIGJveGNvbnRlbnRbaWR4XSk7CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfRU1FUkcsCisJCQkJICgic3dpdGNoIGNhc2Ugbm90IHByb2Nlc3NcbiIpKTsKKwkJCWJyZWFrOworCQl9CisKKwkJYndyaXRlX3N1Y2VzcyA9IHRydWU7CisKKwkJcnRsaGFsLT5sYXN0X2htZWJveG51bSA9IGJveG51bSArIDE7CisJCWlmIChydGxoYWwtPmxhc3RfaG1lYm94bnVtID09IDQpCisJCQlydGxoYWwtPmxhc3RfaG1lYm94bnVtID0gMDsKKworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0NNRCwgREJHX0xPVUQsCisJCQkgKCJwSGFsRGF0YS0+bGFzdF9obWVib3hudW0gID0gJWRcbiIsCisJCQkgIHJ0bGhhbC0+bGFzdF9obWVib3hudW0pKTsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcnRscHJpdi0+bG9ja3MuaDJjX2xvY2ssIGZsYWcpOworCXJ0bGhhbC0+Yl9oMmNfc2V0aW5wcm9ncmVzcyA9IGZhbHNlOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0bHByaXYtPmxvY2tzLmgyY19sb2NrLCBmbGFnKTsKKworCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfQ01ELCBEQkdfTE9VRCwgKCJnbyBvdXRcbiIpKTsKK30KKwordm9pZCBydGw5MmNfZmlsbF9oMmNfY21kKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJIHU4IGVsZW1lbnRfaWQsIHUzMiBjbWRfbGVuLCB1OCAqcF9jbWRidWZmZXIpCit7CisJc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCA9IHJ0bF9oYWwocnRsX3ByaXYoaHcpKTsKKwl1MzIgdG1wX2NtZGJ1ZlsyXTsKKworCWlmIChydGxoYWwtPmJmd19yZWFkeSA9PSBmYWxzZSkgeworCQlSVF9BU1NFUlQoZmFsc2UsICgicmV0dXJuIEgyQyBjbWQgYmVjYXVzZSBvZiBGdyAiCisJCQkJICAiZG93bmxvYWQgZmFpbCEhIVxuIikpOworCQlyZXR1cm47CisJfQorCisJbWVtc2V0KHRtcF9jbWRidWYsIDAsIDgpOworCW1lbWNweSh0bXBfY21kYnVmLCBwX2NtZGJ1ZmZlciwgY21kX2xlbik7CisJX3J0bDkyY19maWxsX2gyY19jb21tYW5kKGh3LCBlbGVtZW50X2lkLCBjbWRfbGVuLCAodTggKikmdG1wX2NtZGJ1Zik7CisKKwlyZXR1cm47Cit9CisKK3ZvaWQgcnRsOTJjX2Zpcm13YXJlX3NlbGZyZXNldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwl1OCB1MWJfdG1wOworCXU4IGRlbGF5ID0gMTAwOworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19ITUVURlIgKyAzLCAweDIwKTsKKwl1MWJfdG1wID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBSRUdfU1lTX0ZVTkNfRU4gKyAxKTsKKworCXdoaWxlICh1MWJfdG1wICYgQklUKDIpKSB7CisJCWRlbGF5LS07CisJCWlmIChkZWxheSA9PSAwKSB7CisJCQlSVF9BU1NFUlQoZmFsc2UsICgiODA1MSByZXNldCBmYWlsLlxuIikpOworCQkJYnJlYWs7CisJCX0KKwkJdWRlbGF5KDUwKTsKKwkJdTFiX3RtcCA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwgUkVHX1NZU19GVU5DX0VOICsgMSk7CisJfQorfQorCit2b2lkIHJ0bDkyY19zZXRfZndfcHdybW9kZV9jbWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IG1vZGUpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXU4IHUxX2gyY19zZXRfcHdybW9kZVszXSA9IHswfTsKKwlzdHJ1Y3QgcnRsX3BzX2N0bCAqcHBzYyA9IHJ0bF9wc2MocnRsX3ByaXYoaHcpKTsKKworCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUE9XRVIsIERCR19MT1VELCAoIkZXIExQUyBtb2RlID0gJWRcbiIsIG1vZGUpKTsKKworCVNFVF9IMkNDTURfUFdSTU9ERV9QQVJNX01PREUodTFfaDJjX3NldF9wd3Jtb2RlLCBtb2RlKTsKKwlTRVRfSDJDQ01EX1BXUk1PREVfUEFSTV9TTUFSVF9QUyh1MV9oMmNfc2V0X3B3cm1vZGUsIDEpOworCVNFVF9IMkNDTURfUFdSTU9ERV9QQVJNX0JDTl9QQVNTX1RJTUUodTFfaDJjX3NldF9wd3Jtb2RlLAorCQkJCQkgICAgICBwcHNjLT5yZWdfbWF4X2xwc19hd2FrZWludHZsKTsKKworCVJUX1BSSU5UX0RBVEEocnRscHJpdiwgQ09NUF9DTUQsIERCR19ETUVTRywKKwkJICAgICAgInJ0bDkyY19zZXRfZndfcnN2ZHBhZ2Vwa3QoKTogdTFfaDJjX3NldF9wd3Jtb2RlXG4iLAorCQkgICAgICB1MV9oMmNfc2V0X3B3cm1vZGUsIDMpOworCXJ0bDkyY19maWxsX2gyY19jbWQoaHcsIEgyQ19TRVRQV1JNT0RFLCAzLCB1MV9oMmNfc2V0X3B3cm1vZGUpOworCit9CisKK3N0YXRpYyBib29sIF9ydGw5MmNfY21kX3NlbmRfcGFja2V0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOworCXN0cnVjdCBydGw4MTkyX3R4X3JpbmcgKnJpbmc7CisJc3RydWN0IHJ0bF90eF9kZXNjICpwZGVzYzsKKwl1OCBvd247CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3Qgc2tfYnVmZiAqcHNrYiA9IE5VTEw7CisKKwlyaW5nID0gJnJ0bHBjaS0+dHhfcmluZ1tCRUFDT05fUVVFVUVdOworCisJcHNrYiA9IF9fc2tiX2RlcXVldWUoJnJpbmctPnF1ZXVlKTsKKwlpZiAocHNrYikKKwkJa2ZyZWVfc2tiKHBza2IpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJ0bHByaXYtPmxvY2tzLmlycV90aF9sb2NrLCBmbGFncyk7CisKKwlwZGVzYyA9ICZyaW5nLT5kZXNjWzBdOworCW93biA9ICh1OCkgcnRscHJpdi0+Y2ZnLT5vcHMtPmdldF9kZXNjKCh1OCAqKSBwZGVzYywgdHJ1ZSwgSFdfREVTQ19PV04pOworCisJcnRscHJpdi0+Y2ZnLT5vcHMtPmZpbGxfdHhfY21kZGVzYyhodywgKHU4ICopIHBkZXNjLCAxLCAxLCBza2IpOworCisJX19za2JfcXVldWVfdGFpbCgmcmluZy0+cXVldWUsIHNrYik7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGxwcml2LT5sb2Nrcy5pcnFfdGhfbG9jaywgZmxhZ3MpOworCisJcnRscHJpdi0+Y2ZnLT5vcHMtPnR4X3BvbGxpbmcoaHcsIEJFQUNPTl9RVUVVRSk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworI2RlZmluZSBCRUFDT05fUEcJCTAgLyotPjEqLworI2RlZmluZSBQU1BPTExfUEcJCTIKKyNkZWZpbmUgTlVMTF9QRwkJCTMKKyNkZWZpbmUgUFJPQkVSU1BfUEcJCTQgLyotPjUqLworCisjZGVmaW5lIFRPVEFMX1JFU0VSVkVEX1BLVF9MRU4JNzY4CisKK3N0YXRpYyB1OCByZXNlcnZlZF9wYWdlX3BhY2tldFtUT1RBTF9SRVNFUlZFRF9QS1RfTEVOXSA9IHsKKwkvKiBwYWdlIDAgYmVhY29uICovCisJMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKKwkweEZGLCAweEZGLCAweDAwLCAweEUwLCAweDRDLCAweDc2LCAweDAwLCAweDQyLAorCTB4MDAsIDB4NDAsIDB4MTAsIDB4MTAsIDB4MDAsIDB4MDMsIDB4NTAsIDB4MDgsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDY0LCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDBDLCAweDZDLCAweDY5LAorCTB4NkUsIDB4NkIsIDB4NzMsIDB4NzksIDB4NzMsIDB4NUYsIDB4NzcsIDB4NkMsCisJMHg2MSwgMHg2RSwgMHgwMSwgMHgwNCwgMHg4MiwgMHg4NCwgMHg4QiwgMHg5NiwKKwkweDAzLCAweDAxLCAweDAxLCAweDA2LCAweDAyLCAweDAwLCAweDAwLCAweDJBLAorCTB4MDEsIDB4MDAsIDB4MzIsIDB4MDgsIDB4MjQsIDB4MzAsIDB4NDgsIDB4NkMsCisJMHgwQywgMHgxMiwgMHgxOCwgMHg2MCwgMHgyRCwgMHgxQSwgMHg2QywgMHgxOCwKKwkweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDNELCAweDAwLCAweERELCAweDA2LCAweDAwLCAweEUwLCAweDRDLCAweDAyLAorCTB4MDEsIDB4NzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKworCS8qIHBhZ2UgMSBiZWFjb24gKi8KKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDEwLCAweDAwLCAweDIwLCAweDhDLCAweDAwLCAweDEyLCAweDEwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCisJLyogcGFnZSAyICBwcy1wb2xsICovCisJMHhBNCwgMHgxMCwgMHgwMSwgMHhDMCwgMHgwMCwgMHg0MCwgMHgxMCwgMHgxMCwKKwkweDAwLCAweDAzLCAweDAwLCAweEUwLCAweDRDLCAweDc2LCAweDAwLCAweDQyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgxOCwgMHgwMCwgMHgyMCwgMHg4QywgMHgwMCwgMHgxMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLAorCTB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKworCS8qIHBhZ2UgMyAgbnVsbCAqLworCTB4NDgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTAsIDB4MTAsCisJMHgwMCwgMHgwMywgMHgwMCwgMHhFMCwgMHg0QywgMHg3NiwgMHgwMCwgMHg0MiwKKwkweDAwLCAweDQwLCAweDEwLCAweDEwLCAweDAwLCAweDAzLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4NzIsIDB4MDAsIDB4MjAsIDB4OEMsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwKKwkweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisKKwkvKiBwYWdlIDQgIHByb2JlX3Jlc3AgKi8KKwkweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDEwLCAweDEwLAorCTB4MDAsIDB4MDMsIDB4MDAsIDB4RTAsIDB4NEMsIDB4NzYsIDB4MDAsIDB4NDIsCisJMHgwMCwgMHg0MCwgMHgxMCwgMHgxMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwKKwkweDlFLCAweDQ2LCAweDE1LCAweDMyLCAweDI3LCAweEYyLCAweDJELCAweDAwLAorCTB4NjQsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MEMsIDB4NkMsIDB4NjksCisJMHg2RSwgMHg2QiwgMHg3MywgMHg3OSwgMHg3MywgMHg1RiwgMHg3NywgMHg2QywKKwkweDYxLCAweDZFLCAweDAxLCAweDA0LCAweDgyLCAweDg0LCAweDhCLCAweDk2LAorCTB4MDMsIDB4MDEsIDB4MDEsIDB4MDYsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MkEsCisJMHgwMSwgMHgwMCwgMHgzMiwgMHgwOCwgMHgyNCwgMHgzMCwgMHg0OCwgMHg2QywKKwkweDBDLCAweDEyLCAweDE4LCAweDYwLCAweDJELCAweDFBLCAweDZDLCAweDE4LAorCTB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4M0QsIDB4MDAsIDB4REQsIDB4MDYsIDB4MDAsIDB4RTAsIDB4NEMsIDB4MDIsCisJMHgwMSwgMHg3MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCisJLyogcGFnZSA1ICBwcm9iZV9yZXNwICovCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKK307CisKK3ZvaWQgcnRsOTJjX3NldF9md19yc3ZkcGFnZXBrdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBiX2RsX2ZpbmlzaGVkKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOworCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOworCisJdTMyIHRvdGFscGFja2V0bGVuOworCWJvb2wgcnRzdGF0dXM7CisJdTggdTFSc3ZkUGFnZUxvY1szXSA9IHswfTsKKwlib29sIGJfZGxvayA9IGZhbHNlOworCisJdTggKmJlYWNvbjsKKwl1OCAqcF9wc3BvbGw7CisJdTggKm51bGxmdW5jOworCXU4ICpwX3Byb2JlcnNwOworCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCQkJKDEpIGJlYWNvbgorCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJYmVhY29uID0gJnJlc2VydmVkX3BhZ2VfcGFja2V0W0JFQUNPTl9QRyAqIDEyOF07CisJU0VUXzgwMjExX0hEUl9BRERSRVNTMihiZWFjb24sIG1hYy0+bWFjX2FkZHIpOworCVNFVF84MDIxMV9IRFJfQUREUkVTUzMoYmVhY29uLCBtYWMtPmJzc2lkKTsKKworCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQkJCSgyKSBwcy1wb2xsCisJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCXBfcHNwb2xsID0gJnJlc2VydmVkX3BhZ2VfcGFja2V0W1BTUE9MTF9QRyAqIDEyOF07CisJU0VUXzgwMjExX1BTX1BPTExfQUlEKHBfcHNwb2xsLCAobWFjLT5hc3NvY19pZCB8IDB4YzAwMCkpOworCVNFVF84MDIxMV9QU19QT0xMX0JTU0lEKHBfcHNwb2xsLCBtYWMtPmJzc2lkKTsKKwlTRVRfODAyMTFfUFNfUE9MTF9UQShwX3BzcG9sbCwgbWFjLT5tYWNfYWRkcik7CisKKwlTRVRfSDJDQ01EX1JTVkRQQUdFX0xPQ19QU1BPTEwodTFSc3ZkUGFnZUxvYywgUFNQT0xMX1BHKTsKKworCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJCQkoMykgbnVsbCBkYXRhCisJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwludWxsZnVuYyA9ICZyZXNlcnZlZF9wYWdlX3BhY2tldFtOVUxMX1BHICogMTI4XTsKKwlTRVRfODAyMTFfSERSX0FERFJFU1MxKG51bGxmdW5jLCBtYWMtPmJzc2lkKTsKKwlTRVRfODAyMTFfSERSX0FERFJFU1MyKG51bGxmdW5jLCBtYWMtPm1hY19hZGRyKTsKKwlTRVRfODAyMTFfSERSX0FERFJFU1MzKG51bGxmdW5jLCBtYWMtPmJzc2lkKTsKKworCVNFVF9IMkNDTURfUlNWRFBBR0VfTE9DX05VTExfREFUQSh1MVJzdmRQYWdlTG9jLCBOVUxMX1BHKTsKKworCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCQkJKDQpIHByb2JlIHJlc3BvbnNlCisJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJcF9wcm9iZXJzcCA9ICZyZXNlcnZlZF9wYWdlX3BhY2tldFtQUk9CRVJTUF9QRyAqIDEyOF07CisJU0VUXzgwMjExX0hEUl9BRERSRVNTMShwX3Byb2JlcnNwLCBtYWMtPmJzc2lkKTsKKwlTRVRfODAyMTFfSERSX0FERFJFU1MyKHBfcHJvYmVyc3AsIG1hYy0+bWFjX2FkZHIpOworCVNFVF84MDIxMV9IRFJfQUREUkVTUzMocF9wcm9iZXJzcCwgbWFjLT5ic3NpZCk7CisKKwlTRVRfSDJDQ01EX1JTVkRQQUdFX0xPQ19QUk9CRV9SU1AodTFSc3ZkUGFnZUxvYywgUFJPQkVSU1BfUEcpOworCisJdG90YWxwYWNrZXRsZW4gPSBUT1RBTF9SRVNFUlZFRF9QS1RfTEVOOworCisJUlRfUFJJTlRfREFUQShydGxwcml2LCBDT01QX0NNRCwgREJHX0xPVUQsCisJCSAgICAgICJydGw5MmNfc2V0X2Z3X3JzdmRwYWdlcGt0KCk6IEhXX1ZBUl9TRVRfVFhfQ01EOiBBTExcbiIsCisJCSAgICAgICZyZXNlcnZlZF9wYWdlX3BhY2tldFswXSwgdG90YWxwYWNrZXRsZW4pOworCVJUX1BSSU5UX0RBVEEocnRscHJpdiwgQ09NUF9DTUQsIERCR19ETUVTRywKKwkJICAgICAgInJ0bDkyY19zZXRfZndfcnN2ZHBhZ2Vwa3QoKTogSFdfVkFSX1NFVF9UWF9DTUQ6IEFMTFxuIiwKKwkJICAgICAgdTFSc3ZkUGFnZUxvYywgMyk7CisKKworCXNrYiA9IGRldl9hbGxvY19za2IodG90YWxwYWNrZXRsZW4pOworCW1lbWNweSgodTggKikgc2tiX3B1dChza2IsIHRvdGFscGFja2V0bGVuKSwKKwkgICAgICAgJnJlc2VydmVkX3BhZ2VfcGFja2V0LCB0b3RhbHBhY2tldGxlbik7CisKKwlydHN0YXR1cyA9IF9ydGw5MmNfY21kX3NlbmRfcGFja2V0KGh3LCBza2IpOworCisJaWYgKHJ0c3RhdHVzKQorCQliX2Rsb2sgPSB0cnVlOworCisJaWYgKGJfZGxvaykgeworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1BPV0VSLCBEQkdfTE9VRCwKKwkJCSAoIlNldCBSU1ZEIHBhZ2UgbG9jYXRpb24gdG8gRncuXG4iKSk7CisJCVJUX1BSSU5UX0RBVEEocnRscHJpdiwgQ09NUF9DTUQsIERCR19ETUVTRywKKwkJCQkiSDJDX1JTVkRQQUdFOlxuIiwKKwkJCQl1MVJzdmRQYWdlTG9jLCAzKTsKKwkJcnRsOTJjX2ZpbGxfaDJjX2NtZChodywgSDJDX1JTVkRQQUdFLAorCQkJCSAgICBzaXplb2YodTFSc3ZkUGFnZUxvYyksIHUxUnN2ZFBhZ2VMb2MpOworCX0gZWxzZQorCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX1dBUk5JTkcsCisJCQkgKCJTZXQgUlNWRCBwYWdlIGxvY2F0aW9uIHRvIEZ3IEZBSUwhISEhISEuXG4iKSk7Cit9CisKK3ZvaWQgcnRsOTJjX3NldF9md19qb2luYnNzX3JlcG9ydF9jbWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IG1zdGF0dXMpCit7CisJdTggdTFfam9pbmJzc3JwdF9wYXJtWzFdID0gezB9OworCisJU0VUX0gyQ0NNRF9KT0lOQlNTUlBUX1BBUk1fT1BNT0RFKHUxX2pvaW5ic3NycHRfcGFybSwgbXN0YXR1cyk7CisKKwlydGw5MmNfZmlsbF9oMmNfY21kKGh3LCBIMkNfSk9JTkJTU1JQVCwgMSwgdTFfam9pbmJzc3JwdF9wYXJtKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmNlL2Z3LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS9mdy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkYjMzYmQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS9mdy5oCkBAIC0wLDAgKzEsOTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQoYykgMjAwOS0yMDEwICBSZWFsdGVrIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAsIFVTQQorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgTElDRU5TRS4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogd2xhbmZhZSA8d2xhbmZhZUByZWFsdGVrLmNvbT4KKyAqIFJlYWx0ZWsgQ29ycG9yYXRpb24sIE5vLiAyLCBJbm5vdmF0aW9uIFJvYWQgSUksIEhzaW5jaHUgU2NpZW5jZSBQYXJrLAorICogSHNpbmNodSAzMDAsIFRhaXdhbi4KKyAqCisgKiBMYXJyeSBGaW5nZXIgPExhcnJ5LkZpbmdlckBsd2Zpbmdlci5uZXQ+CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fUlRMOTJDX19GV19fSF9fCisjZGVmaW5lIF9fUlRMOTJDX19GV19fSF9fCisKKyNkZWZpbmUgRldfODE5MkNfU0laRQkJCQkweDMwMDAKKyNkZWZpbmUgRldfODE5MkNfU1RBUlRfQUREUkVTUwkJCTB4MTAwMAorI2RlZmluZSBGV184MTkyQ19FTkRfQUREUkVTUwkJCTB4M0ZGRgorI2RlZmluZSBGV184MTkyQ19QQUdFX1NJWkUJCQk0MDk2CisjZGVmaW5lIEZXXzgxOTJDX1BPTExJTkdfREVMQVkJCQk1CisjZGVmaW5lIEZXXzgxOTJDX1BPTExJTkdfVElNRU9VVF9DT1VOVAkJMTAwCisKKyNkZWZpbmUgSVNfRldfSEVBREVSX0VYSVNUKF9wZndoZHIpCVwKKwkoKF9wZndoZHItPnNpZ25hdHVyZSYweEZGRjApID09IDB4OTJDMCB8fFwKKwkoX3Bmd2hkci0+c2lnbmF0dXJlJjB4RkZGMCkgPT0gMHg4OEMwKQorCitzdHJ1Y3QgcnRsOTJjX2Zpcm13YXJlX2hlYWRlciB7CisJdTE2IHNpZ25hdHVyZTsKKwl1OCBjYXRlZ29yeTsKKwl1OCBmdW5jdGlvbjsKKwl1MTYgdmVyc2lvbjsKKwl1OCBzdWJ2ZXJzaW9uOworCXU4IHJzdmQxOworCXU4IG1vbnRoOworCXU4IGRhdGU7CisJdTggaG91cjsKKwl1OCBtaW51dGU7CisJdTE2IHJhbWNvZGVTaXplOworCXUxNiByc3ZkMjsKKwl1MzIgc3ZuaW5kZXg7CisJdTMyIHJzdmQzOworCXUzMiByc3ZkNDsKKwl1MzIgcnN2ZDU7Cit9OworCitlbnVtIHJ0bDgxOTJjX2gyY19jbWQgeworCUgyQ19BUF9PRkZMT0FEID0gMCwKKwlIMkNfU0VUUFdSTU9ERSA9IDEsCisJSDJDX0pPSU5CU1NSUFQgPSAyLAorCUgyQ19SU1ZEUEFHRSA9IDMsCisJSDJDX1JTU0lfUkVQT1JUID0gNSwKKwlIMkNfUkFfTUFTSyA9IDYsCisJTUFYX0gyQ0NNRAorfTsKKworI2RlZmluZSBwYWdlbnVtXzEyOChfbGVuKQkodTMyKSgoKF9sZW4pPj43KSArICgoX2xlbikmMHg3RiA/IDEgOiAwKSkKKworI2RlZmluZSBTRVRfSDJDQ01EX1BXUk1PREVfUEFSTV9NT0RFKF9fcGgyY2NtZCwgX192YWwpCQkJXAorCVNFVF9CSVRTX1RPX0xFXzFCWVRFKF9fcGgyY2NtZCwgMCwgOCwgX192YWwpCisjZGVmaW5lIFNFVF9IMkNDTURfUFdSTU9ERV9QQVJNX1NNQVJUX1BTKF9fcGgyY2NtZCwgX192YWwpCQlcCisJU0VUX0JJVFNfVE9fTEVfMUJZVEUoKF9fcGgyY2NtZCkrMSwgMCwgOCwgX192YWwpCisjZGVmaW5lIFNFVF9IMkNDTURfUFdSTU9ERV9QQVJNX0JDTl9QQVNTX1RJTUUoX19waDJjY21kLCBfX3ZhbCkJXAorCVNFVF9CSVRTX1RPX0xFXzFCWVRFKChfX3BoMmNjbWQpKzIsIDAsIDgsIF9fdmFsKQorI2RlZmluZSBTRVRfSDJDQ01EX0pPSU5CU1NSUFRfUEFSTV9PUE1PREUoX19waDJjY21kLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19UT19MRV8xQllURShfX3BoMmNjbWQsIDAsIDgsIF9fdmFsKQorI2RlZmluZSBTRVRfSDJDQ01EX1JTVkRQQUdFX0xPQ19QUk9CRV9SU1AoX19waDJjY21kLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19UT19MRV8xQllURShfX3BoMmNjbWQsIDAsIDgsIF9fdmFsKQorI2RlZmluZSBTRVRfSDJDQ01EX1JTVkRQQUdFX0xPQ19QU1BPTEwoX19waDJjY21kLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19UT19MRV8xQllURSgoX19waDJjY21kKSsxLCAwLCA4LCBfX3ZhbCkKKyNkZWZpbmUgU0VUX0gyQ0NNRF9SU1ZEUEFHRV9MT0NfTlVMTF9EQVRBKF9fcGgyY2NtZCwgX192YWwpCQlcCisJU0VUX0JJVFNfVE9fTEVfMUJZVEUoKF9fcGgyY2NtZCkrMiwgMCwgOCwgX192YWwpCisKK2ludCBydGw5MmNfZG93bmxvYWRfZncoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwordm9pZCBydGw5MmNfZmlsbF9oMmNfY21kKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBlbGVtZW50X2lkLAorCQkJIHUzMiBjbWRfbGVuLCB1OCAqcF9jbWRidWZmZXIpOwordm9pZCBydGw5MmNfZmlybXdhcmVfc2VsZnJlc2V0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3ZvaWQgcnRsOTJjX3NldF9md19wd3Jtb2RlX2NtZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggbW9kZSk7Cit2b2lkIHJ0bDkyY19zZXRfZndfcnN2ZHBhZ2Vwa3Qoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGJvb2wgYl9kbF9maW5pc2hlZCk7Cit2b2lkIHJ0bDkyY19zZXRfZndfam9pbmJzc19yZXBvcnRfY21kKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBtc3RhdHVzKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS9ody5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2UvaHcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzQxYTBjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2UvaHcuYwpAQCAtMCwwICsxLDIxNjIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQoYykgMjAwOS0yMDEwICBSZWFsdGVrIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAsIFVTQQorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgTElDRU5TRS4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogd2xhbmZhZSA8d2xhbmZhZUByZWFsdGVrLmNvbT4KKyAqIFJlYWx0ZWsgQ29ycG9yYXRpb24sIE5vLiAyLCBJbm5vdmF0aW9uIFJvYWQgSUksIEhzaW5jaHUgU2NpZW5jZSBQYXJrLAorICogSHNpbmNodSAzMDAsIFRhaXdhbi4KKyAqCisgKiBMYXJyeSBGaW5nZXIgPExhcnJ5LkZpbmdlckBsd2Zpbmdlci5uZXQ+CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAiLi4vd2lmaS5oIgorI2luY2x1ZGUgIi4uL2VmdXNlLmgiCisjaW5jbHVkZSAiLi4vYmFzZS5oIgorI2luY2x1ZGUgIi4uL2NhbS5oIgorI2luY2x1ZGUgIi4uL3BzLmgiCisjaW5jbHVkZSAiLi4vcGNpLmgiCisjaW5jbHVkZSAicmVnLmgiCisjaW5jbHVkZSAiZGVmLmgiCisjaW5jbHVkZSAicGh5LmgiCisjaW5jbHVkZSAiZG0uaCIKKyNpbmNsdWRlICJmdy5oIgorI2luY2x1ZGUgImxlZC5oIgorI2luY2x1ZGUgImh3LmgiCisKKyNkZWZpbmUgTExUX0NPTkZJRwk1CisKK3N0YXRpYyB2b2lkIF9ydGw5MmNlX3NldF9iY25fY3RybF9yZWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgICAgdTggc2V0X2JpdHMsIHU4IGNsZWFyX2JpdHMpCit7CisJc3RydWN0IHJ0bF9wY2kgKnJ0bHBjaSA9IHJ0bF9wY2lkZXYocnRsX3BjaXByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisKKwlydGxwY2ktPnJlZ19iY25fY3RybF92YWwgfD0gc2V0X2JpdHM7CisJcnRscGNpLT5yZWdfYmNuX2N0cmxfdmFsICY9IH5jbGVhcl9iaXRzOworCisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX0JDTl9DVFJMLCAodTgpIHJ0bHBjaS0+cmVnX2Jjbl9jdHJsX3ZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIF9ydGw5MmNlX3N0b3BfdHhfYmVhY29uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwl1OCB0bXAxYnl0ZTsKKworCXRtcDFieXRlID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBSRUdfRldIV19UWFFfQ1RSTCArIDIpOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19GV0hXX1RYUV9DVFJMICsgMiwgdG1wMWJ5dGUgJiAofkJJVCg2KSkpOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19UQlRUX1BST0hJQklUICsgMSwgMHg2NCk7CisJdG1wMWJ5dGUgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIFJFR19UQlRUX1BST0hJQklUICsgMik7CisJdG1wMWJ5dGUgJj0gfihCSVQoMCkpOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19UQlRUX1BST0hJQklUICsgMiwgdG1wMWJ5dGUpOworfQorCitzdGF0aWMgdm9pZCBfcnRsOTJjZV9yZXN1bWVfdHhfYmVhY29uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwl1OCB0bXAxYnl0ZTsKKworCXRtcDFieXRlID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBSRUdfRldIV19UWFFfQ1RSTCArIDIpOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19GV0hXX1RYUV9DVFJMICsgMiwgdG1wMWJ5dGUgfCBCSVQoNikpOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19UQlRUX1BST0hJQklUICsgMSwgMHhmZik7CisJdG1wMWJ5dGUgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIFJFR19UQlRUX1BST0hJQklUICsgMik7CisJdG1wMWJ5dGUgfD0gQklUKDApOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19UQlRUX1BST0hJQklUICsgMiwgdG1wMWJ5dGUpOworfQorCitzdGF0aWMgdm9pZCBfcnRsOTJjZV9lbmFibGVfYmNuX3N1Yl9mdW5jKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCV9ydGw5MmNlX3NldF9iY25fY3RybF9yZWcoaHcsIDAsIEJJVCgxKSk7Cit9CisKK3N0YXRpYyB2b2lkIF9ydGw5MmNlX2Rpc2FibGVfYmNuX3N1Yl9mdW5jKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCV9ydGw5MmNlX3NldF9iY25fY3RybF9yZWcoaHcsIEJJVCgxKSwgMCk7Cit9CisKK3ZvaWQgcnRsOTJjZV9nZXRfaHdfcmVnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCB2YXJpYWJsZSwgdTggKnZhbCkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9wc19jdGwgKnBwc2MgPSBydGxfcHNjKHJ0bF9wcml2KGh3KSk7CisJc3RydWN0IHJ0bF9wY2kgKnJ0bHBjaSA9IHJ0bF9wY2lkZXYocnRsX3BjaXByaXYoaHcpKTsKKworCXN3aXRjaCAodmFyaWFibGUpIHsKKwljYXNlIEhXX1ZBUl9SQ1I6CisJCSooKHUzMiAqKSAodmFsKSkgPSBydGxwY2ktPnJlY2VpdmVfY29uZmlnOworCQlicmVhazsKKwljYXNlIEhXX1ZBUl9SRl9TVEFURToKKwkJKigoZW51bSByZl9wd3JzdGF0ZSAqKSh2YWwpKSA9IHBwc2MtPnJmcHdyX3N0YXRlOworCQlicmVhazsKKwljYXNlIEhXX1ZBUl9GV0xQU19SRl9PTjp7CisJCQllbnVtIHJmX3B3cnN0YXRlIHJmU3RhdGU7CisJCQl1MzIgdmFsX3JjcjsKKworCQkJcnRscHJpdi0+Y2ZnLT5vcHMtPmdldF9od19yZWcoaHcsCisJCQkJCQkgICAgICBIV19WQVJfUkZfU1RBVEUsCisJCQkJCQkgICAgICAodTggKikgKCZyZlN0YXRlKSk7CisJCQlpZiAocmZTdGF0ZSA9PSBFUkZPRkYpIHsKKwkJCQkqKChib29sICopICh2YWwpKSA9IHRydWU7CisJCQl9IGVsc2UgeworCQkJCXZhbF9yY3IgPSBydGxfcmVhZF9kd29yZChydGxwcml2LCBSRUdfUkNSKTsKKwkJCQl2YWxfcmNyICY9IDB4MDAwNzAwMDA7CisJCQkJaWYgKHZhbF9yY3IpCisJCQkJCSooKGJvb2wgKikgKHZhbCkpID0gZmFsc2U7CisJCQkJZWxzZQorCQkJCQkqKChib29sICopICh2YWwpKSA9IHRydWU7CisJCQl9CisJCQlicmVhazsKKwkJfQorCWNhc2UgSFdfVkFSX0ZXX1BTTU9ERV9TVEFUVVM6CisJCSooKGJvb2wgKikgKHZhbCkpID0gcHBzYy0+Yl9md19jdXJyZW50X2lucHNtb2RlOworCQlicmVhazsKKwljYXNlIEhXX1ZBUl9DT1JSRUNUX1RTRjp7CisJCXU2NCB0c2Y7CisJCXUzMiAqcHRzZl9sb3cgPSAodTMyICopJnRzZjsKKwkJdTMyICpwdHNmX2hpZ2ggPSAoKHUzMiAqKSZ0c2YpICsgMTsKKworCQkqcHRzZl9oaWdoID0gcnRsX3JlYWRfZHdvcmQocnRscHJpdiwgKFJFR19UU0ZUUiArIDQpKTsKKwkJKnB0c2ZfbG93ID0gcnRsX3JlYWRfZHdvcmQocnRscHJpdiwgUkVHX1RTRlRSKTsKKworCQkqKCh1NjQgKikgKHZhbCkpID0gdHNmOworCisJCWJyZWFrOworCQl9CisJY2FzZSBIV19WQVJfTUdUX0ZJTFRFUjoKKwkJKigodTE2ICopICh2YWwpKSA9IHJ0bF9yZWFkX3dvcmQocnRscHJpdiwgUkVHX1JYRkxUTUFQMCk7CisJCWJyZWFrOworCWNhc2UgSFdfVkFSX0NUUkxfRklMVEVSOgorCQkqKCh1MTYgKikgKHZhbCkpID0gcnRsX3JlYWRfd29yZChydGxwcml2LCBSRUdfUlhGTFRNQVAxKTsKKwkJYnJlYWs7CisJY2FzZSBIV19WQVJfREFUQV9GSUxURVI6CisJCSooKHUxNiAqKSAodmFsKSkgPSBydGxfcmVhZF93b3JkKHJ0bHByaXYsIFJFR19SWEZMVE1BUDIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX0VNRVJHLAorCQkJICgic3dpdGNoIGNhc2Ugbm90IHByb2Nlc3NcbiIpKTsKKwkJYnJlYWs7CisJfQorfQorCit2b2lkIHJ0bDkyY2Vfc2V0X2h3X3JlZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggdmFyaWFibGUsIHU4ICp2YWwpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGNpICpydGxwY2kgPSBydGxfcGNpZGV2KHJ0bF9wY2lwcml2KGh3KSk7CisJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX2hhbCAqcnRsaGFsID0gcnRsX2hhbChydGxfcHJpdihodykpOworCXN0cnVjdCBydGxfZWZ1c2UgKnJ0bGVmdXNlID0gcnRsX2VmdXNlKHJ0bF9wcml2KGh3KSk7CisJc3RydWN0IHJ0bF9wc19jdGwgKnBwc2MgPSBydGxfcHNjKHJ0bF9wcml2KGh3KSk7CisJdTggaWR4OworCisJc3dpdGNoICh2YXJpYWJsZSkgeworCWNhc2UgSFdfVkFSX0VUSEVSX0FERFI6eworCQkJZm9yIChpZHggPSAwOyBpZHggPCBFVEhfQUxFTjsgaWR4KyspIHsKKwkJCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCAoUkVHX01BQ0lEICsgaWR4KSwKKwkJCQkJICAgICAgIHZhbFtpZHhdKTsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJY2FzZSBIV19WQVJfQkFTSUNfUkFURTp7CisJCQl1MTYgYl9yYXRlX2NmZyA9ICgodTE2ICopIHZhbClbMF07CisJCQl1OCByYXRlX2luZGV4ID0gMDsKKwkJCWJfcmF0ZV9jZmcgPSBiX3JhdGVfY2ZnICYgMHgxNWY7CisJCQliX3JhdGVfY2ZnIHw9IDB4MDE7CisJCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfUlJTUiwgYl9yYXRlX2NmZyAmIDB4ZmYpOworCQkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX1JSU1IgKyAxLAorCQkJCSAgICAgICAoYl9yYXRlX2NmZyA+PiA4KSYweGZmKTsKKwkJCXdoaWxlIChiX3JhdGVfY2ZnID4gMHgxKSB7CisJCQkJYl9yYXRlX2NmZyA9IChiX3JhdGVfY2ZnID4+IDEpOworCQkJCXJhdGVfaW5kZXgrKzsKKwkJCX0KKwkJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19JTklSVFNfUkFURV9TRUwsCisJCQkJICAgICAgIHJhdGVfaW5kZXgpOworCQkJYnJlYWs7CisJCX0KKwljYXNlIEhXX1ZBUl9CU1NJRDp7CisJCQlmb3IgKGlkeCA9IDA7IGlkeCA8IEVUSF9BTEVOOyBpZHgrKykgeworCQkJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIChSRUdfQlNTSUQgKyBpZHgpLAorCQkJCQkgICAgICAgdmFsW2lkeF0pOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwljYXNlIEhXX1ZBUl9TSUZTOnsKKwkJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19TSUZTX0NUWCArIDEsIHZhbFswXSk7CisJCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfU0lGU19UUlggKyAxLCB2YWxbMV0pOworCisJCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfU1BFQ19TSUZTICsgMSwgdmFsWzBdKTsKKwkJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19NQUNfU1BFQ19TSUZTICsgMSwgdmFsWzBdKTsKKworCQkJaWYgKCFtYWMtPmh0X2VuYWJsZSkKKwkJCQlydGxfd3JpdGVfd29yZChydGxwcml2LCBSRUdfUkVTUF9TSUZTX09GRE0sCisJCQkJCSAgICAgICAweDBlMGUpOworCQkJZWxzZQorCQkJCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIFJFR19SRVNQX1NJRlNfT0ZETSwKKwkJCQkJICAgICAgICooKHUxNiAqKSB2YWwpKTsKKwkJCWJyZWFrOworCQl9CisJY2FzZSBIV19WQVJfU0xPVF9USU1FOnsKKwkJCXU4IGVfYWNpOworCisJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX01MTUUsIERCR19MT1VELAorCQkJCSAoIkhXX1ZBUl9TTE9UX1RJTUUgJXhcbiIsIHZhbFswXSkpOworCisJCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfU0xPVCwgdmFsWzBdKTsKKworCQkJZm9yIChlX2FjaSA9IDA7IGVfYWNpIDwgQUNfTUFYOyBlX2FjaSsrKSB7CisJCQkJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9od19yZWcoaHcsCisJCQkJCQkJICAgICAgSFdfVkFSX0FDX1BBUkFNLAorCQkJCQkJCSAgICAgICh1OCAqKSAoJmVfYWNpKSk7CisJCQl9CisJCQlicmVhazsKKwkJfQorCWNhc2UgSFdfVkFSX0FDS19QUkVBTUJMRTp7CisJCQl1OCByZWdfdG1wOworCQkJdTggc2hvcnRfcHJlYW1ibGUgPSAoYm9vbCkgKCoodTggKikgdmFsKTsKKwkJCXJlZ190bXAgPSAobWFjLT5jdXJfNDBfcHJpbWVfc2MpIDw8IDU7CisJCQlpZiAoc2hvcnRfcHJlYW1ibGUpCisJCQkJcmVnX3RtcCB8PSAweDgwOworCisJCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfUlJTUiArIDIsIHJlZ190bXApOworCQkJYnJlYWs7CisJCX0KKwljYXNlIEhXX1ZBUl9BTVBEVV9NSU5fU1BBQ0U6eworCQkJdTggbWluX3NwYWNpbmdfdG9fc2V0OworCQkJdTggc2VjX21pbl9zcGFjZTsKKworCQkJbWluX3NwYWNpbmdfdG9fc2V0ID0gKigodTggKikgdmFsKTsKKwkJCWlmIChtaW5fc3BhY2luZ190b19zZXQgPD0gNykgeworCQkJCXNlY19taW5fc3BhY2UgPSAwOworCisJCQkJaWYgKG1pbl9zcGFjaW5nX3RvX3NldCA8IHNlY19taW5fc3BhY2UpCisJCQkJCW1pbl9zcGFjaW5nX3RvX3NldCA9IHNlY19taW5fc3BhY2U7CisKKwkJCQltYWMtPm1pbl9zcGFjZV9jZmcgPSAoKG1hYy0+bWluX3NwYWNlX2NmZyAmCisJCQkJCQkgICAgICAgMHhmOCkgfAorCQkJCQkJICAgICAgbWluX3NwYWNpbmdfdG9fc2V0KTsKKworCQkJCSp2YWwgPSBtaW5fc3BhY2luZ190b19zZXQ7CisKKwkJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX01MTUUsIERCR19MT1VELAorCQkJCQkgKCJTZXQgSFdfVkFSX0FNUERVX01JTl9TUEFDRTogJSN4XG4iLAorCQkJCQkgIG1hYy0+bWluX3NwYWNlX2NmZykpOworCisJCQkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX0FNUERVX01JTl9TUEFDRSwKKwkJCQkJICAgICAgIG1hYy0+bWluX3NwYWNlX2NmZyk7CisJCQl9CisJCQlicmVhazsKKwkJfQorCWNhc2UgSFdfVkFSX1NIT1JUR0lfREVOU0lUWTp7CisJCQl1OCBkZW5zaXR5X3RvX3NldDsKKworCQkJZGVuc2l0eV90b19zZXQgPSAqKCh1OCAqKSB2YWwpOworCQkJbWFjLT5taW5fc3BhY2VfY2ZnIHw9IChkZW5zaXR5X3RvX3NldCA8PCAzKTsKKworCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9NTE1FLCBEQkdfTE9VRCwKKwkJCQkgKCJTZXQgSFdfVkFSX1NIT1JUR0lfREVOU0lUWTogJSN4XG4iLAorCQkJCSAgbWFjLT5taW5fc3BhY2VfY2ZnKSk7CisKKwkJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19BTVBEVV9NSU5fU1BBQ0UsCisJCQkJICAgICAgIG1hYy0+bWluX3NwYWNlX2NmZyk7CisKKwkJCWJyZWFrOworCQl9CisJY2FzZSBIV19WQVJfQU1QRFVfRkFDVE9SOnsKKwkJCXU4IHJlZ3Rvc2V0X25vcm1hbFs0XSA9IHsgMHg0MSwgMHhhOCwgMHg3MiwgMHhiOSB9OworCisJCQl1OCBmYWN0b3JfdG9zZXQ7CisJCQl1OCAqcF9yZWd0b3NldCA9IE5VTEw7CisJCQl1OCBpbmRleCA9IDA7CisKKwkJCXBfcmVndG9zZXQgPSByZWd0b3NldF9ub3JtYWw7CisKKwkJCWZhY3Rvcl90b3NldCA9ICooKHU4ICopIHZhbCk7CisJCQlpZiAoZmFjdG9yX3Rvc2V0IDw9IDMpIHsKKwkJCQlmYWN0b3JfdG9zZXQgPSAoMSA8PCAoZmFjdG9yX3Rvc2V0ICsgMikpOworCQkJCWlmIChmYWN0b3JfdG9zZXQgPiAweGYpCisJCQkJCWZhY3Rvcl90b3NldCA9IDB4ZjsKKworCQkJCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IDQ7IGluZGV4KyspIHsKKwkJCQkJaWYgKChwX3JlZ3Rvc2V0W2luZGV4XSAmIDB4ZjApID4KKwkJCQkJICAgIChmYWN0b3JfdG9zZXQgPDwgNCkpCisJCQkJCQlwX3JlZ3Rvc2V0W2luZGV4XSA9CisJCQkJCQkgICAgKHBfcmVndG9zZXRbaW5kZXhdICYgMHgwZikgfAorCQkJCQkJICAgIChmYWN0b3JfdG9zZXQgPDwgNCk7CisKKwkJCQkJaWYgKChwX3JlZ3Rvc2V0W2luZGV4XSAmIDB4MGYpID4KKwkJCQkJICAgIGZhY3Rvcl90b3NldCkKKwkJCQkJCXBfcmVndG9zZXRbaW5kZXhdID0KKwkJCQkJCSAgICAocF9yZWd0b3NldFtpbmRleF0gJiAweGYwKSB8CisJCQkJCQkgICAgKGZhY3Rvcl90b3NldCk7CisKKwkJCQkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwKKwkJCQkJCSAgICAgICAoUkVHX0FHR0xFTl9MTVQgKyBpbmRleCksCisJCQkJCQkgICAgICAgcF9yZWd0b3NldFtpbmRleF0pOworCisJCQkJfQorCisJCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9NTE1FLCBEQkdfTE9VRCwKKwkJCQkJICgiU2V0IEhXX1ZBUl9BTVBEVV9GQUNUT1I6ICUjeFxuIiwKKwkJCQkJICBmYWN0b3JfdG9zZXQpKTsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJY2FzZSBIV19WQVJfQUNfUEFSQU06eworCQkJdTggZV9hY2kgPSAqKCh1OCAqKSB2YWwpOworCQkJdTMyIHU0Yl9hY19wYXJhbSA9IDA7CisKKwkJCXU0Yl9hY19wYXJhbSB8PSAodTMyKSBtYWMtPmFjW2VfYWNpXS5haWZzOworCQkJdTRiX2FjX3BhcmFtIHw9ICgodTMyKSBtYWMtPmFjW2VfYWNpXS5jd19taW4KKwkJCQkJICYgMHhGKSA8PCBBQ19QQVJBTV9FQ1dfTUlOX09GRlNFVDsKKwkJCXU0Yl9hY19wYXJhbSB8PSAoKHUzMikgbWFjLT5hY1tlX2FjaV0uY3dfbWF4ICYKKwkJCQkJIDB4RikgPDwgQUNfUEFSQU1fRUNXX01BWF9PRkZTRVQ7CisJCQl1NGJfYWNfcGFyYW0gfD0gKHUzMikgbWFjLT5hY1tlX2FjaV0udHhfb3AKKwkJCSAgICA8PCBBQ19QQVJBTV9UWE9QX0xJTUlUX09GRlNFVDsKKworCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9NTE1FLCBEQkdfTE9VRCwKKwkJCQkgKCJxdWV1ZToleCwgYWNfcGFyYW06JXhcbiIsIGVfYWNpLAorCQkJCSAgdTRiX2FjX3BhcmFtKSk7CisKKwkJCXN3aXRjaCAoZV9hY2kpIHsKKwkJCWNhc2UgQUMxX0JLOgorCQkJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfRURDQV9CS19QQVJBTSwKKwkJCQkJCXU0Yl9hY19wYXJhbSk7CisJCQkJYnJlYWs7CisJCQljYXNlIEFDMF9CRToKKwkJCQlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX0VEQ0FfQkVfUEFSQU0sCisJCQkJCQl1NGJfYWNfcGFyYW0pOworCQkJCWJyZWFrOworCQkJY2FzZSBBQzJfVkk6CisJCQkJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFJFR19FRENBX1ZJX1BBUkFNLAorCQkJCQkJdTRiX2FjX3BhcmFtKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQUMzX1ZPOgorCQkJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfRURDQV9WT19QQVJBTSwKKwkJCQkJCXU0Yl9hY19wYXJhbSk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCVJUX0FTU0VSVChmYWxzZSwKKwkJCQkgICgiU2V0SHdSZWc4MTg1KCk6IGludmFsaWQgYWNpOiAlZCAhXG4iLAorCQkJCSAgIGVfYWNpKSk7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCWlmIChydGxwY2ktPmFjbV9tZXRob2QgIT0gZUFjbVdheTJfU1cpCisJCQkJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9od19yZWcoaHcsCisJCQkJCQkJICAgICAgSFdfVkFSX0FDTV9DVFJMLAorCQkJCQkJCSAgICAgICh1OCAqKSAoJmVfYWNpKSk7CisJCQlicmVhazsKKwkJfQorCWNhc2UgSFdfVkFSX0FDTV9DVFJMOnsKKwkJCXU4IGVfYWNpID0gKigodTggKikgdmFsKTsKKwkJCXVuaW9uIGFjaV9haWZzbiAqcF9hY2lfYWlmc24gPQorCQkJICAgICh1bmlvbiBhY2lfYWlmc24gKikoJihtYWMtPmFjWzBdLmFpZnMpKTsKKwkJCXU4IGFjbSA9IHBfYWNpX2FpZnNuLT5mLmFjbTsKKwkJCXU4IGFjbV9jdHJsID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBSRUdfQUNNSFdDVFJMKTsKKworCQkJYWNtX2N0cmwgPQorCQkJICAgIGFjbV9jdHJsIHwgKChydGxwY2ktPmFjbV9tZXRob2QgPT0gMikgPyAweDAgOiAweDEpOworCisJCQlpZiAoYWNtKSB7CisJCQkJc3dpdGNoIChlX2FjaSkgeworCQkJCWNhc2UgQUMwX0JFOgorCQkJCQlhY21fY3RybCB8PSBBY21Id19CZXFFbjsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBBQzJfVkk6CisJCQkJCWFjbV9jdHJsIHw9IEFjbUh3X1ZpcUVuOworCQkJCQlicmVhazsKKwkJCQljYXNlIEFDM19WTzoKKwkJCQkJYWNtX2N0cmwgfD0gQWNtSHdfVm9xRW47CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfV0FSTklORywKKwkJCQkJCSAoIkhXX1ZBUl9BQ01fQ1RSTCBhY20gc2V0ICIKKwkJCQkJCSAgImZhaWxlZDogZUFDSSBpcyAlZFxuIiwgYWNtKSk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJc3dpdGNoIChlX2FjaSkgeworCQkJCWNhc2UgQUMwX0JFOgorCQkJCQlhY21fY3RybCAmPSAofkFjbUh3X0JlcUVuKTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBBQzJfVkk6CisJCQkJCWFjbV9jdHJsICY9ICh+QWNtSHdfVmlxRW4pOworCQkJCQlicmVhazsKKwkJCQljYXNlIEFDM19WTzoKKwkJCQkJYWNtX2N0cmwgJj0gKH5BY21Id19CZXFFbik7CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfRU1FUkcsCisJCQkJCQkgKCJzd2l0Y2ggY2FzZSBub3QgcHJvY2Vzc1xuIikpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisKKwkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUU9TLCBEQkdfVFJBQ0UsCisJCQkJICgiU2V0SHdSZWc4MTkwcGNpKCk6IFtIV19WQVJfQUNNX0NUUkxdICIKKwkJCQkgICJXcml0ZSAweCVYXG4iLCBhY21fY3RybCkpOworCQkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX0FDTUhXQ1RSTCwgYWNtX2N0cmwpOworCQkJYnJlYWs7CisJCX0KKwljYXNlIEhXX1ZBUl9SQ1I6eworCQkJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFJFR19SQ1IsICgodTMyICopICh2YWwpKVswXSk7CisJCQlydGxwY2ktPnJlY2VpdmVfY29uZmlnID0gKCh1MzIgKikgKHZhbCkpWzBdOworCQkJYnJlYWs7CisJCX0KKwljYXNlIEhXX1ZBUl9SRVRSWV9MSU1JVDp7CisJCQl1OCByZXRyeV9saW1pdCA9ICgodTggKikgKHZhbCkpWzBdOworCisJCQlydGxfd3JpdGVfd29yZChydGxwcml2LCBSRUdfUkwsCisJCQkJICAgICAgIHJldHJ5X2xpbWl0IDw8IFJFVFJZX0xJTUlUX1NIT1JUX1NISUZUIHwKKwkJCQkgICAgICAgcmV0cnlfbGltaXQgPDwgUkVUUllfTElNSVRfTE9OR19TSElGVCk7CisJCQlicmVhazsKKwkJfQorCWNhc2UgSFdfVkFSX0RVQUxfVFNGX1JTVDoKKwkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX0RVQUxfVFNGX1JTVCwgKEJJVCgwKSB8IEJJVCgxKSkpOworCQlicmVhazsKKwljYXNlIEhXX1ZBUl9FRlVTRV9CWVRFUzoKKwkJcnRsZWZ1c2UtPmVmdXNlX3VzZWRieXRlcyA9ICooKHUxNiAqKSB2YWwpOworCQlicmVhazsKKwljYXNlIEhXX1ZBUl9FRlVTRV9VU0FHRToKKwkJcnRsZWZ1c2UtPmVmdXNlX3VzZWRwZXJjZW50YWdlID0gKigodTggKikgdmFsKTsKKwkJYnJlYWs7CisJY2FzZSBIV19WQVJfSU9fQ01EOgorCQlydGw5MmNfcGh5X3NldF9pb19jbWQoaHcsICgqKGVudW0gaW9fdHlwZSAqKXZhbCkpOworCQlicmVhazsKKwljYXNlIEhXX1ZBUl9XUEFfQ09ORklHOgorCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfU0VDQ0ZHLCAqKCh1OCAqKSB2YWwpKTsKKwkJYnJlYWs7CisJY2FzZSBIV19WQVJfU0VUX1JQV006eworCQkJdTggcnB3bV92YWw7CisKKwkJCXJwd21fdmFsID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBSRUdfUENJRV9IUlBXTSk7CisJCQl1ZGVsYXkoMSk7CisKKwkJCWlmIChycHdtX3ZhbCAmIEJJVCg3KSkgeworCQkJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19QQ0lFX0hSUFdNLAorCQkJCQkgICAgICAgKCoodTggKikgdmFsKSk7CisJCQl9IGVsc2UgeworCQkJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19QQ0lFX0hSUFdNLAorCQkJCQkgICAgICAgKCgqKHU4ICopIHZhbCkgfCBCSVQoNykpKTsKKwkJCX0KKworCQkJYnJlYWs7CisJCX0KKwljYXNlIEhXX1ZBUl9IMkNfRldfUFdSTU9ERTp7CisJCQl1OCBwc21vZGUgPSAoKih1OCAqKSB2YWwpOworCisJCQlpZiAoKHBzbW9kZSAhPSBGV19QU19BQ1RJVkVfTU9ERSkgJiYKKwkJCSAgICAoIUlTXzkyQ19TRVJJQUwocnRsaGFsLT52ZXJzaW9uKSkpIHsKKwkJCQlydGw5MmNfZG1fcmZfc2F2aW5nKGh3LCB0cnVlKTsKKwkJCX0KKworCQkJcnRsOTJjX3NldF9md19wd3Jtb2RlX2NtZChodywgKCoodTggKikgdmFsKSk7CisJCQlicmVhazsKKwkJfQorCWNhc2UgSFdfVkFSX0ZXX1BTTU9ERV9TVEFUVVM6CisJCXBwc2MtPmJfZndfY3VycmVudF9pbnBzbW9kZSA9ICooKGJvb2wgKikgdmFsKTsKKwkJYnJlYWs7CisJY2FzZSBIV19WQVJfSDJDX0ZXX0pPSU5CU1NSUFQ6eworCQkJdTggbXN0YXR1cyA9ICgqKHU4ICopIHZhbCk7CisJCQl1OCB0bXBfcmVnY3IsIHRtcF9yZWc0MjI7CisJCQlib29sIGJfcmVjb3ZlciA9IGZhbHNlOworCisJCQlpZiAobXN0YXR1cyA9PSBSVF9NRURJQV9DT05ORUNUKSB7CisJCQkJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9od19yZWcoaHcsIEhXX1ZBUl9BSUQsCisJCQkJCQkJICAgICAgTlVMTCk7CisKKwkJCQl0bXBfcmVnY3IgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIFJFR19DUiArIDEpOworCQkJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19DUiArIDEsCisJCQkJCSAgICAgICAodG1wX3JlZ2NyIHwgQklUKDApKSk7CisKKwkJCQlfcnRsOTJjZV9zZXRfYmNuX2N0cmxfcmVnKGh3LCAwLCBCSVQoMykpOworCQkJCV9ydGw5MmNlX3NldF9iY25fY3RybF9yZWcoaHcsIEJJVCg0KSwgMCk7CisKKwkJCQl0bXBfcmVnNDIyID0KKwkJCQkgICAgcnRsX3JlYWRfYnl0ZShydGxwcml2LAorCQkJCQkJICBSRUdfRldIV19UWFFfQ1RSTCArIDIpOworCQkJCWlmICh0bXBfcmVnNDIyICYgQklUKDYpKQorCQkJCQliX3JlY292ZXIgPSB0cnVlOworCQkJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19GV0hXX1RYUV9DVFJMICsgMiwKKwkJCQkJICAgICAgIHRtcF9yZWc0MjIgJiAofkJJVCg2KSkpOworCisJCQkJcnRsOTJjX3NldF9md19yc3ZkcGFnZXBrdChodywgMCk7CisKKwkJCQlfcnRsOTJjZV9zZXRfYmNuX2N0cmxfcmVnKGh3LCBCSVQoMyksIDApOworCQkJCV9ydGw5MmNlX3NldF9iY25fY3RybF9yZWcoaHcsIDAsIEJJVCg0KSk7CisKKwkJCQlpZiAoYl9yZWNvdmVyKSB7CisJCQkJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsCisJCQkJCQkgICAgICAgUkVHX0ZXSFdfVFhRX0NUUkwgKyAyLAorCQkJCQkJICAgICAgIHRtcF9yZWc0MjIpOworCQkJCX0KKworCQkJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19DUiArIDEsCisJCQkJCSAgICAgICAodG1wX3JlZ2NyICYgfihCSVQoMCkpKSk7CisJCQl9CisJCQlydGw5MmNfc2V0X2Z3X2pvaW5ic3NfcmVwb3J0X2NtZChodywgKCoodTggKikgdmFsKSk7CisKKwkJCWJyZWFrOworCQl9CisJY2FzZSBIV19WQVJfQUlEOnsKKwkJCXUxNiB1MmJ0bXA7CisJCQl1MmJ0bXAgPSBydGxfcmVhZF93b3JkKHJ0bHByaXYsIFJFR19CQ05fUFNSX1JQVCk7CisJCQl1MmJ0bXAgJj0gMHhDMDAwOworCQkJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgUkVHX0JDTl9QU1JfUlBULCAodTJidG1wIHwKKwkJCQkJCW1hYy0+YXNzb2NfaWQpKTsKKworCQkJYnJlYWs7CisJCX0KKwljYXNlIEhXX1ZBUl9DT1JSRUNUX1RTRjp7CisJCQl1OCBidHlwZV9pYnNzID0gKCh1OCAqKSAodmFsKSlbMF07CisKKwkJCS8qYnR5cGVfaWJzcyA9IChtYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgPworCQkJCQkxIDogMDsqLworCisJCQlpZiAoYnR5cGVfaWJzcyA9PSB0cnVlKQorCQkJCV9ydGw5MmNlX3N0b3BfdHhfYmVhY29uKGh3KTsKKworCQkJX3J0bDkyY2Vfc2V0X2Jjbl9jdHJsX3JlZyhodywgMCwgQklUKDMpKTsKKworCQkJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFJFR19UU0ZUUiwKKwkJCQkJKHUzMikgKG1hYy0+dHNmICYgMHhmZmZmZmZmZikpOworCQkJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFJFR19UU0ZUUiArIDQsCisJCQkJCSh1MzIpICgobWFjLT50c2YgPj4gMzIpJjB4ZmZmZmZmZmYpKTsKKworCQkJX3J0bDkyY2Vfc2V0X2Jjbl9jdHJsX3JlZyhodywgQklUKDMpLCAwKTsKKworCQkJaWYgKGJ0eXBlX2lic3MgPT0gdHJ1ZSkKKwkJCQlfcnRsOTJjZV9yZXN1bWVfdHhfYmVhY29uKGh3KTsKKworCQkJYnJlYWs7CisKKwkJfQorCWNhc2UgSFdfVkFSX01HVF9GSUxURVI6CisJCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIFJFR19SWEZMVE1BUDAsICoodTE2ICopIHZhbCk7CisJCWJyZWFrOworCWNhc2UgSFdfVkFSX0NUUkxfRklMVEVSOgorCQlydGxfd3JpdGVfd29yZChydGxwcml2LCBSRUdfUlhGTFRNQVAxLCAqKHUxNiAqKSB2YWwpOworCQlicmVhazsKKwljYXNlIEhXX1ZBUl9EQVRBX0ZJTFRFUjoKKwkJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgUkVHX1JYRkxUTUFQMiwgKih1MTYgKikgdmFsKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19FTUVSRywgKCJzd2l0Y2ggY2FzZSAiCisJCQkJCQkJIm5vdCBwcm9jZXNzXG4iKSk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIGJvb2wgX3J0bDkyY2VfbGx0X3dyaXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgYWRkcmVzcywgdTMyIGRhdGEpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCWJvb2wgc3RhdHVzID0gdHJ1ZTsKKwlsb25nIGNvdW50ID0gMDsKKwl1MzIgdmFsdWUgPSBfTExUX0lOSVRfQUREUihhZGRyZXNzKSB8CisJICAgIF9MTFRfSU5JVF9EQVRBKGRhdGEpIHwgX0xMVF9PUChfTExUX1dSSVRFX0FDQ0VTUyk7CisKKwlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX0xMVF9JTklULCB2YWx1ZSk7CisKKwlkbyB7CisJCXZhbHVlID0gcnRsX3JlYWRfZHdvcmQocnRscHJpdiwgUkVHX0xMVF9JTklUKTsKKwkJaWYgKF9MTFRfTk9fQUNUSVZFID09IF9MTFRfT1BfVkFMVUUodmFsdWUpKQorCQkJYnJlYWs7CisKKwkJaWYgKGNvdW50ID4gUE9MTElOR19MTFRfVEhSRVNIT0xEKSB7CisJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX0VNRVJHLAorCQkJCSAoIkZhaWxlZCB0byBwb2xsaW5nIHdyaXRlIExMVCBkb25lIGF0ICIKKwkJCQkgICJhZGRyZXNzICVkIVxuIiwgYWRkcmVzcykpOworCQkJc3RhdHVzID0gZmFsc2U7CisJCQlicmVhazsKKwkJfQorCX0gd2hpbGUgKCsrY291bnQpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGJvb2wgX3J0bDkyY2VfbGx0X3RhYmxlX2luaXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXVuc2lnbmVkIHNob3J0IGk7CisJdTggdHhwa3RidWZfYm5keTsKKwl1OCBtYXhQYWdlOworCWJvb2wgc3RhdHVzOworCisjaWYgTExUX0NPTkZJRyA9PSAxCisJbWF4UGFnZSA9IDI1NTsKKwl0eHBrdGJ1Zl9ibmR5ID0gMjUyOworI2VsaWYgTExUX0NPTkZJRyA9PSAyCisJbWF4UGFnZSA9IDEyNzsKKwl0eHBrdGJ1Zl9ibmR5ID0gMTI0OworI2VsaWYgTExUX0NPTkZJRyA9PSAzCisJbWF4UGFnZSA9IDI1NTsKKwl0eHBrdGJ1Zl9ibmR5ID0gMTc0OworI2VsaWYgTExUX0NPTkZJRyA9PSA0CisJbWF4UGFnZSA9IDI1NTsKKwl0eHBrdGJ1Zl9ibmR5ID0gMjQ2OworI2VsaWYgTExUX0NPTkZJRyA9PSA1CisJbWF4UGFnZSA9IDI1NTsKKwl0eHBrdGJ1Zl9ibmR5ID0gMjQ2OworI2VuZGlmCisKKyNpZiBMTFRfQ09ORklHID09IDEKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfUlFQTl9OUFEsIDB4MWMpOworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfUlFQTiwgMHg4MGE3MWMxYyk7CisjZWxpZiBMTFRfQ09ORklHID09IDIKKwlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX1JRUE4sIDB4ODQ1QjEwMTApOworI2VsaWYgTExUX0NPTkZJRyA9PSAzCisJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFJFR19SUVBOLCAweDg0ODM4NDg0KTsKKyNlbGlmIExMVF9DT05GSUcgPT0gNAorCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfUlFQTiwgMHg4MGJkMWMxYyk7CisjZWxpZiBMTFRfQ09ORklHID09IDUKKwlydGxfd3JpdGVfd29yZChydGxwcml2LCBSRUdfUlFQTl9OUFEsIDB4MDAwMCk7CisKKwlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX1JRUE4sIDB4ODBiMDFjMjkpOworI2VuZGlmCisKKwlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX1RSWEZGX0JORFksICgweDI3RkYwMDAwIHwgdHhwa3RidWZfYm5keSkpOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19UREVDVFJMICsgMSwgdHhwa3RidWZfYm5keSk7CisKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfVFhQS1RCVUZfQkNOUV9CRE5ZLCB0eHBrdGJ1Zl9ibmR5KTsKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfVFhQS1RCVUZfTUdRX0JETlksIHR4cGt0YnVmX2JuZHkpOworCisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgMHg0NUQsIHR4cGt0YnVmX2JuZHkpOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19QQlAsIDB4MTEpOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19SWF9EUlZJTkZPX1NaLCAweDQpOworCisJZm9yIChpID0gMDsgaSA8ICh0eHBrdGJ1Zl9ibmR5IC0gMSk7IGkrKykgeworCQlzdGF0dXMgPSBfcnRsOTJjZV9sbHRfd3JpdGUoaHcsIGksIGkgKyAxKTsKKwkJaWYgKHRydWUgIT0gc3RhdHVzKQorCQkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwlzdGF0dXMgPSBfcnRsOTJjZV9sbHRfd3JpdGUoaHcsICh0eHBrdGJ1Zl9ibmR5IC0gMSksIDB4RkYpOworCWlmICh0cnVlICE9IHN0YXR1cykKKwkJcmV0dXJuIHN0YXR1czsKKworCWZvciAoaSA9IHR4cGt0YnVmX2JuZHk7IGkgPCBtYXhQYWdlOyBpKyspIHsKKwkJc3RhdHVzID0gX3J0bDkyY2VfbGx0X3dyaXRlKGh3LCBpLCAoaSArIDEpKTsKKwkJaWYgKHRydWUgIT0gc3RhdHVzKQorCQkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwlzdGF0dXMgPSBfcnRsOTJjZV9sbHRfd3JpdGUoaHcsIG1heFBhZ2UsIHR4cGt0YnVmX2JuZHkpOworCWlmICh0cnVlICE9IHN0YXR1cykKKwkJcmV0dXJuIHN0YXR1czsKKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCBfcnRsOTJjZV9nZW5fcmVmcmVzaF9sZWRfc3RhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wY2lfcHJpdiAqcGNpcHJpdiA9IHJ0bF9wY2lwcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOworCXN0cnVjdCBydGxfcHNfY3RsICpwcHNjID0gcnRsX3BzYyhydGxfcHJpdihodykpOworCXN0cnVjdCBydGxfbGVkICpwTGVkMCA9ICYocGNpcHJpdi0+bGVkY3RsLnN3X2xlZDApOworCisJaWYgKHJ0bHBjaS0+dXBfZmlyc3RfdGltZSkKKwkJcmV0dXJuOworCisJaWYgKHBwc2MtPnJmb2ZmX3JlYXNvbiA9PSBSRl9DSEFOR0VfQllfSVBTKQorCQlydGw5MmNlX3N3X2xlZF9vbihodywgcExlZDApOworCWVsc2UgaWYgKHBwc2MtPnJmb2ZmX3JlYXNvbiA9PSBSRl9DSEFOR0VfQllfSU5JVCkKKwkJcnRsOTJjZV9zd19sZWRfb24oaHcsIHBMZWQwKTsKKwllbHNlCisJCXJ0bDkyY2Vfc3dfbGVkX29mZihodywgcExlZDApOworCit9CisKK3N0YXRpYyBib29sIF9ydGw5MmNlX2luaXRfbWFjKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOworCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bF9wcml2KGh3KSk7CisKKwl1bnNpZ25lZCBjaGFyIGJ5dGV0bXA7CisJdW5zaWduZWQgc2hvcnQgd29yZHRtcDsKKwl1MTYgcmV0cnk7CisKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfUlNWX0NUUkwsIDB4MDApOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19TUFMwX0NUUkwsIDB4MmIpOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19BRkVfWFRBTF9DVFJMLCAweDBGKTsKKworCWJ5dGV0bXAgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIFJFR19BUFNfRlNNQ08gKyAxKSB8IEJJVCgwKTsKKwl1ZGVsYXkoMik7CisKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfQVBTX0ZTTUNPICsgMSwgYnl0ZXRtcCk7CisJdWRlbGF5KDIpOworCisJYnl0ZXRtcCA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwgUkVHX0FQU19GU01DTyArIDEpOworCXVkZWxheSgyKTsKKworCXJldHJ5ID0gMDsKKwlSVF9UUkFDRShydGxwcml2LCBDT01QX0lOSVQsIERCR19MT1VELCAoInJlZzB4ZWM6JXg6JXhcbiIsCisJCQkJCQlydGxfcmVhZF9kd29yZChydGxwcml2LCAweEVDKSwKKwkJCQkJCWJ5dGV0bXApKTsKKworCXdoaWxlICgoYnl0ZXRtcCAmIEJJVCgwKSkgJiYgcmV0cnkgPCAxMDAwKSB7CisJCXJldHJ5Kys7CisJCXVkZWxheSg1MCk7CisJCWJ5dGV0bXAgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIFJFR19BUFNfRlNNQ08gKyAxKTsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9JTklULCBEQkdfTE9VRCwgKCJyZWcweGVjOiV4OiV4XG4iLAorCQkJCQkJCXJ0bF9yZWFkX2R3b3JkKHJ0bHByaXYsCisJCQkJCQkJCSAgICAgICAweEVDKSwKKwkJCQkJCQlieXRldG1wKSk7CisJCXVkZWxheSg1MCk7CisJfQorCisJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgUkVHX0FQU19GU01DTywgMHgxMDEyKTsKKworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19TWVNfSVNPX0NUUkwgKyAxLCAweDgyKTsKKwl1ZGVsYXkoMik7CisKKwlydGxfd3JpdGVfd29yZChydGxwcml2LCBSRUdfQ1IsIDB4MmZmKTsKKworCWlmIChfcnRsOTJjZV9sbHRfdGFibGVfaW5pdChodykgPT0gZmFsc2UpCisJCXJldHVybiBmYWxzZTs7CisKKwlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX0hJU1IsIDB4ZmZmZmZmZmYpOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19ISVNSRSwgMHhmZik7CisKKwlydGxfd3JpdGVfd29yZChydGxwcml2LCBSRUdfVFJYRkZfQk5EWSArIDIsIDB4MjdmZik7CisKKwl3b3JkdG1wID0gcnRsX3JlYWRfd29yZChydGxwcml2LCBSRUdfVFJYRE1BX0NUUkwpOworCXdvcmR0bXAgJj0gMHhmOworCXdvcmR0bXAgfD0gMHhGNzcxOworCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIFJFR19UUlhETUFfQ1RSTCwgd29yZHRtcCk7CisKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfRldIV19UWFFfQ1RSTCArIDEsIDB4MUYpOworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfUkNSLCBydGxwY2ktPnJlY2VpdmVfY29uZmlnKTsKKwlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX1RDUiwgcnRscGNpLT50cmFuc21pdF9jb25maWcpOworCisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgMHg0ZDAsIDB4MCk7CisKKwlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX0JDTlFfREVTQSwKKwkJCSgodTY0KSBydGxwY2ktPnR4X3JpbmdbQkVBQ09OX1FVRVVFXS5kbWEpICYKKwkJCURNQV9CSVRfTUFTSygzMikpOworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfTUdRX0RFU0EsCisJCQkodTY0KSBydGxwY2ktPnR4X3JpbmdbTUdOVF9RVUVVRV0uZG1hICYKKwkJCURNQV9CSVRfTUFTSygzMikpOworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfVk9RX0RFU0EsCisJCQkodTY0KSBydGxwY2ktPnR4X3JpbmdbVk9fUVVFVUVdLmRtYSAmIERNQV9CSVRfTUFTSygzMikpOworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfVklRX0RFU0EsCisJCQkodTY0KSBydGxwY2ktPnR4X3JpbmdbVklfUVVFVUVdLmRtYSAmIERNQV9CSVRfTUFTSygzMikpOworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfQkVRX0RFU0EsCisJCQkodTY0KSBydGxwY2ktPnR4X3JpbmdbQkVfUVVFVUVdLmRtYSAmIERNQV9CSVRfTUFTSygzMikpOworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfQktRX0RFU0EsCisJCQkodTY0KSBydGxwY2ktPnR4X3JpbmdbQktfUVVFVUVdLmRtYSAmIERNQV9CSVRfTUFTSygzMikpOworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfSFFfREVTQSwKKwkJCSh1NjQpIHJ0bHBjaS0+dHhfcmluZ1tISUdIX1FVRVVFXS5kbWEgJgorCQkJRE1BX0JJVF9NQVNLKDMyKSk7CisJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFJFR19SWF9ERVNBLAorCQkJKHU2NCkgcnRscGNpLT5yeF9yaW5nW1JYX01QRFVfUVVFVUVdLmRtYSAmCisJCQlETUFfQklUX01BU0soMzIpKTsKKworCWlmIChJU185MkNfU0VSSUFMKHJ0bGhhbC0+dmVyc2lvbikpCisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19QQ0lFX0NUUkxfUkVHICsgMywgMHg3Nyk7CisJZWxzZQorCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfUENJRV9DVFJMX1JFRyArIDMsIDB4MjIpOworCisJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFJFR19JTlRfTUlHLCAwKTsKKworCWJ5dGV0bXAgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIFJFR19BUFNEX0NUUkwpOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19BUFNEX0NUUkwsIGJ5dGV0bXAgJiB+QklUKDYpKTsKKwlkbyB7CisJCXJldHJ5Kys7CisJCWJ5dGV0bXAgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIFJFR19BUFNEX0NUUkwpOworCX0gd2hpbGUgKChyZXRyeSA8IDIwMCkgJiYgKGJ5dGV0bXAgJiBCSVQoNykpKTsKKworCV9ydGw5MmNlX2dlbl9yZWZyZXNoX2xlZF9zdGF0ZShodyk7CisKKwlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX01DVVRTVF8xLCAweDApOworCisJcmV0dXJuIHRydWU7OworfQorCitzdGF0aWMgdm9pZCBfcnRsOTJjZV9od19jb25maWd1cmUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wY2kgKnJ0bHBjaSA9IHJ0bF9wY2lkZXYocnRsX3BjaXByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJdTggcmVnX2J3X29wbW9kZTsKKwl1MzIgcmVnX3JhdHIsIHJlZ19wcnNyOworCisJcmVnX2J3X29wbW9kZSA9IEJXX09QTU9ERV8yME1IWjsKKwlyZWdfcmF0ciA9IFJBVEVfQUxMX0NDSyB8IFJBVEVfQUxMX09GRE1fQUcgfAorCSAgICBSQVRFX0FMTF9PRkRNXzFTUyB8IFJBVEVfQUxMX09GRE1fMlNTOworCXJlZ19wcnNyID0gUkFURV9BTExfQ0NLIHwgUkFURV9BTExfT0ZETV9BRzsKKworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19JTklSVFNfUkFURV9TRUwsIDB4OCk7CisKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfQldPUE1PREUsIHJlZ19id19vcG1vZGUpOworCisJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFJFR19SUlNSLCByZWdfcHJzcik7CisKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfU0xPVCwgMHgwOSk7CisKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfQU1QRFVfTUlOX1NQQUNFLCAweDApOworCisJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgUkVHX0ZXSFdfVFhRX0NUUkwsIDB4MUY4MCk7CisKKwlydGxfd3JpdGVfd29yZChydGxwcml2LCBSRUdfUkwsIDB4MDcwNyk7CisKKwlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX0JBUl9NT0RFX0NUUkwsIDB4MDIwMTI4MDIpOworCisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX0hXU0VRX0NUUkwsIDB4RkYpOworCisJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFJFR19EQVJGUkMsIDB4MDEwMDAwMDApOworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfREFSRlJDICsgNCwgMHgwNzA2MDUwNCk7CisJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFJFR19SQVJGUkMsIDB4MDEwMDAwMDApOworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfUkFSRlJDICsgNCwgMHgwNzA2MDUwNCk7CisKKwlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX0FHR0xFTl9MTVQsIDB4Yjk3MmE4NDEpOworCisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX0FUSU1XTkQsIDB4Mik7CisKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfQkNOX01BWF9FUlIsIDB4ZmYpOworCisJcnRscGNpLT5yZWdfYmNuX2N0cmxfdmFsID0gMHgxZjsKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfQkNOX0NUUkwsIHJ0bHBjaS0+cmVnX2Jjbl9jdHJsX3ZhbCk7CisKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfVEJUVF9QUk9ISUJJVCArIDEsIDB4ZmYpOworCisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX1RCVFRfUFJPSElCSVQgKyAxLCAweGZmKTsKKworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19QSUZTLCAweDFDKTsKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfQUdHUl9CUkVBS19USU1FLCAweDE2KTsKKworCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIFJFR19OQVZfUFJPVF9MRU4sIDB4MDAyMCk7CisKKwlydGxfd3JpdGVfd29yZChydGxwcml2LCBSRUdfTkFWX1BST1RfTEVOLCAweDAwMjApOworCisJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFJFR19GQVNUX0VEQ0FfQ1RSTCwgMHgwODY2NjYpOworCisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX0FDS1RPLCAweDQwKTsKKworCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIFJFR19TUEVDX1NJRlMsIDB4MTAxMCk7CisJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgUkVHX01BQ19TUEVDX1NJRlMsIDB4MTAxMCk7CisKKwlydGxfd3JpdGVfd29yZChydGxwcml2LCBSRUdfU0lGU19DVFgsIDB4MTAxMCk7CisKKwlydGxfd3JpdGVfd29yZChydGxwcml2LCBSRUdfU0lGU19UUlgsIDB4MTAxMCk7CisKKwlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX01BUiwgMHhmZmZmZmZmZik7CisJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFJFR19NQVIgKyA0LCAweGZmZmZmZmZmKTsKKworfQorCitzdGF0aWMgdm9pZCBfcnRsOTJjZV9lbmFibGVfYXNwbV9iYWNrX2Rvb3Ioc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcHNfY3RsICpwcHNjID0gcnRsX3BzYyhydGxfcHJpdihodykpOworCisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgMHgzNGIsIDB4OTMpOworCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIDB4MzUwLCAweDg3MGMpOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIDB4MzUyLCAweDEpOworCisJaWYgKHBwc2MtPmJfc3VwcG9ydF9iYWNrZG9vcikKKwkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgMHgzNDksIDB4MWIpOworCWVsc2UKKwkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgMHgzNDksIDB4MDMpOworCisJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgMHgzNTAsIDB4MjcxOCk7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgMHgzNTIsIDB4MSk7Cit9CisKK3ZvaWQgcnRsOTJjZV9lbmFibGVfaHdfc2VjdXJpdHlfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwl1OCBzZWNfcmVnX3ZhbHVlOworCisJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9JTklULCBEQkdfTE9VRCwKKwkJICgiUGFpcndpc2VFbmNBbGdvcml0aG0gPSAlZCBHcm91cEVuY0FsZ29yaXRobSA9ICVkXG4iLAorCQkgIHJ0bHByaXYtPnNlYy5wYWlyd2lzZV9lbmNfYWxnb3JpdGhtLAorCQkgIHJ0bHByaXYtPnNlYy5ncm91cF9lbmNfYWxnb3JpdGhtKSk7CisKKwlpZiAocnRscHJpdi0+Y2ZnLT5tb2RfcGFyYW1zLT5zd19jcnlwdG8gfHwgcnRscHJpdi0+c2VjLnVzZV9zd19zZWMpIHsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9TRUMsIERCR19ETUVTRywgKCJub3Qgb3BlbiAiCisJCQkJCQkJImh3IGVuY3J5cHRpb25cbiIpKTsKKwkJcmV0dXJuOworCX0KKworCXNlY19yZWdfdmFsdWUgPSBTQ1JfVHhFbmNFbmFibGUgfCBTQ1JfUnhEZWNFbmFibGU7CisKKwlpZiAocnRscHJpdi0+c2VjLnVzZV9kZWZhdWx0a2V5KSB7CisJCXNlY19yZWdfdmFsdWUgfD0gU0NSX1R4VXNlREs7CisJCXNlY19yZWdfdmFsdWUgfD0gU0NSX1J4VXNlREs7CisJfQorCisJc2VjX3JlZ192YWx1ZSB8PSAoU0NSX1JYQkNVU0VESyB8IFNDUl9UWEJDVVNFREspOworCisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX0NSICsgMSwgMHgwMik7CisKKwlSVF9UUkFDRShydGxwcml2LCBDT01QX1NFQywgREJHX0xPVUQsCisJCSAoIlRoZSBTRUNSLXZhbHVlICV4XG4iLCBzZWNfcmVnX3ZhbHVlKSk7CisKKwlydGxwcml2LT5jZmctPm9wcy0+c2V0X2h3X3JlZyhodywgSFdfVkFSX1dQQV9DT05GSUcsICZzZWNfcmVnX3ZhbHVlKTsKKworfQorCitpbnQgcnRsOTJjZV9od19pbml0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX2hhbCAqcnRsaGFsID0gcnRsX2hhbChydGxfcHJpdihodykpOworCXN0cnVjdCBydGxfbWFjICptYWMgPSBydGxfbWFjKHJ0bF9wcml2KGh3KSk7CisJc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKKwlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOworCXN0cnVjdCBydGxfcHNfY3RsICpwcHNjID0gcnRsX3BzYyhydGxfcHJpdihodykpOworCXN0YXRpYyBib29sIGlxa19pbml0aWFsaXplZDsgLyogaW5pdGlhbGl6ZWQgdG8gZmFsc2UgKi8KKwlib29sIHJ0c3RhdHVzID0gdHJ1ZTsKKwlib29sIGlzOTJjOworCWludCBlcnI7CisJdTggdG1wX3UxYjsKKworCXJ0bHBjaS0+YmVpbmdfaW5pdF9hZGFwdGVyID0gdHJ1ZTsKKwlydGxwcml2LT5pbnRmX29wcy0+ZGlzYWJsZV9hc3BtKGh3KTsKKwlydHN0YXR1cyA9IF9ydGw5MmNlX2luaXRfbWFjKGh3KTsKKwlpZiAocnRzdGF0dXMgIT0gdHJ1ZSkgeworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX0VNRVJHLCAoIkluaXQgTUFDIGZhaWxlZFxuIikpOworCQllcnIgPSAxOworCQlyZXR1cm4gZXJyOworCX0KKworCWVyciA9IHJ0bDkyY19kb3dubG9hZF9mdyhodyk7CisJaWYgKGVycikgeworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX1dBUk5JTkcsCisJCQkgKCJGYWlsZWQgdG8gZG93bmxvYWQgRlcuIEluaXQgSFcgIgorCQkJICAid2l0aG91dCBGVyBub3cuLlxuIikpOworCQllcnIgPSAxOworCQlydGxoYWwtPmJmd19yZWFkeSA9IGZhbHNlOworCQlyZXR1cm4gZXJyOworCX0gZWxzZSB7CisJCXJ0bGhhbC0+YmZ3X3JlYWR5ID0gdHJ1ZTsKKwl9CisKKwlydGxoYWwtPmxhc3RfaG1lYm94bnVtID0gMDsKKwlydGw5MmNfcGh5X21hY19jb25maWcoaHcpOworCXJ0bDkyY19waHlfYmJfY29uZmlnKGh3KTsKKwlydGxwaHktPnJmX21vZGUgPSBSRl9PUF9CWV9TV18zV0lSRTsKKwlydGw5MmNfcGh5X3JmX2NvbmZpZyhodyk7CisJcnRscGh5LT5yZnJlZ19jaG5sdmFsWzBdID0gcnRsX2dldF9yZnJlZyhodywgKGVudW0gcmFkaW9fcGF0aCkwLAorCQkJCQkJIFJGX0NITkxCVywgUkZSRUdfT0ZGU0VUX01BU0spOworCXJ0bHBoeS0+cmZyZWdfY2hubHZhbFsxXSA9IHJ0bF9nZXRfcmZyZWcoaHcsIChlbnVtIHJhZGlvX3BhdGgpMSwKKwkJCQkJCSBSRl9DSE5MQlcsIFJGUkVHX09GRlNFVF9NQVNLKTsKKwlydGxfc2V0X2JicmVnKGh3LCBSRlBHQTBfUkZNT0QsIEJDQ0tFTiwgMHgxKTsKKwlydGxfc2V0X2JicmVnKGh3LCBSRlBHQTBfUkZNT0QsIEJPRkRNRU4sIDB4MSk7CisJcnRsX3NldF9iYnJlZyhodywgUkZQR0EwX0FOQUxPR1BBUkFNRVRFUjIsIEJJVCgxMCksIDEpOworCV9ydGw5MmNlX2h3X2NvbmZpZ3VyZShodyk7CisJcnRsX2NhbV9yZXNldF9hbGxfZW50cnkoaHcpOworCXJ0bDkyY2VfZW5hYmxlX2h3X3NlY3VyaXR5X2NvbmZpZyhodyk7CisJcHBzYy0+cmZwd3Jfc3RhdGUgPSBFUkZPTjsKKwlydGxwcml2LT5jZmctPm9wcy0+c2V0X2h3X3JlZyhodywgSFdfVkFSX0VUSEVSX0FERFIsIG1hYy0+bWFjX2FkZHIpOworCV9ydGw5MmNlX2VuYWJsZV9hc3BtX2JhY2tfZG9vcihodyk7CisJcnRscHJpdi0+aW50Zl9vcHMtPmVuYWJsZV9hc3BtKGh3KTsKKwlpZiAocHBzYy0+cmZwd3Jfc3RhdGUgPT0gRVJGT04pIHsKKwkJcnRsOTJjX3BoeV9zZXRfcmZwYXRoX3N3aXRjaChodywgMSk7CisJCWlmIChpcWtfaW5pdGlhbGl6ZWQpCisJCQlydGw5MmNfcGh5X2lxX2NhbGlicmF0ZShodywgdHJ1ZSk7CisJCWVsc2UgeworCQkJcnRsOTJjX3BoeV9pcV9jYWxpYnJhdGUoaHcsIGZhbHNlKTsKKwkJCWlxa19pbml0aWFsaXplZCA9IHRydWU7CisJCX0KKworCQlydGw5MmNfZG1fY2hlY2tfdHhwb3dlcl90cmFja2luZyhodyk7CisJCXJ0bDkyY19waHlfbGNfY2FsaWJyYXRlKGh3KTsKKwl9CisKKwlpczkyYyA9IElTXzkyQ19TRVJJQUwocnRsaGFsLT52ZXJzaW9uKTsKKwl0bXBfdTFiID0gZWZ1c2VfcmVhZF8xYnl0ZShodywgMHgxRkEpOworCWlmICghKHRtcF91MWIgJiBCSVQoMCkpKSB7CisJCXJ0bF9zZXRfcmZyZWcoaHcsIFJGOTBfUEFUSF9BLCAweDE1LCAweDBGLCAweDA1KTsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9JTklULCBEQkdfVFJBQ0UsICgiUEEgQklBUyBwYXRoIEFcbiIpKTsKKwl9CisKKwlpZiAoISh0bXBfdTFiICYgQklUKDEpKSAmJiBpczkyYykgeworCQlydGxfc2V0X3JmcmVnKGh3LCBSRjkwX1BBVEhfQiwgMHgxNSwgMHgwRiwgMHgwNSk7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX1RSQUNFLCAoIlBBIEJJQVMgcGF0aCBCXG4iKSk7CisJfQorCisJaWYgKCEodG1wX3UxYiAmIEJJVCg0KSkpIHsKKwkJdG1wX3UxYiA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwgMHgxNik7CisJCXRtcF91MWIgJj0gMHgwRjsKKwkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgMHgxNiwgdG1wX3UxYiB8IDB4ODApOworCQl1ZGVsYXkoMTApOworCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCAweDE2LCB0bXBfdTFiIHwgMHg5MCk7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX1RSQUNFLCAoInVuZGVyIDEuNVZcbiIpKTsKKwl9CisJcnRsOTJjX2RtX2luaXQoaHcpOworCXJ0bHBjaS0+YmVpbmdfaW5pdF9hZGFwdGVyID0gZmFsc2U7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGVudW0gdmVyc2lvbl84MTkyYyBfcnRsOTJjZV9yZWFkX2NoaXBfdmVyc2lvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKKwllbnVtIHZlcnNpb25fODE5MmMgdmVyc2lvbiA9IFZFUlNJT05fVU5LTk9XTjsKKwl1MzIgdmFsdWUzMjsKKworCXZhbHVlMzIgPSBydGxfcmVhZF9kd29yZChydGxwcml2LCBSRUdfU1lTX0NGRyk7CisJaWYgKHZhbHVlMzIgJiBUUlBfVkFVWF9FTikgeworCQl2ZXJzaW9uID0gKHZhbHVlMzIgJiBUWVBFX0lEKSA/IFZFUlNJT05fQV9DSElQXzkyQyA6CisJCQkgICBWRVJTSU9OX0FfQ0hJUF84OEM7CisJfSBlbHNlIHsKKwkJdmVyc2lvbiA9ICh2YWx1ZTMyICYgVFlQRV9JRCkgPyBWRVJTSU9OX0JfQ0hJUF85MkMgOgorCQkJICAgVkVSU0lPTl9CX0NISVBfODhDOworCX0KKworCXN3aXRjaCAodmVyc2lvbikgeworCWNhc2UgVkVSU0lPTl9CX0NISVBfOTJDOgorCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0lOSVQsIERCR19UUkFDRSwKKwkJCSAoIkNoaXAgVmVyc2lvbiBJRDogVkVSU0lPTl9CX0NISVBfOTJDLlxuIikpOworCQlicmVhazsKKwljYXNlIFZFUlNJT05fQl9DSElQXzg4QzoKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9JTklULCBEQkdfVFJBQ0UsCisJCQkgKCJDaGlwIFZlcnNpb24gSUQ6IFZFUlNJT05fQl9DSElQXzg4Qy5cbiIpKTsKKwkJYnJlYWs7CisJY2FzZSBWRVJTSU9OX0FfQ0hJUF85MkM6CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX1RSQUNFLAorCQkJICgiQ2hpcCBWZXJzaW9uIElEOiBWRVJTSU9OX0FfQ0hJUF85MkMuXG4iKSk7CisJCWJyZWFrOworCWNhc2UgVkVSU0lPTl9BX0NISVBfODhDOgorCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0lOSVQsIERCR19UUkFDRSwKKwkJCSAoIkNoaXAgVmVyc2lvbiBJRDogVkVSU0lPTl9BX0NISVBfODhDLlxuIikpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX0VNRVJHLAorCQkJICgiQ2hpcCBWZXJzaW9uIElEOiBVbmtub3duLiBCdWc/XG4iKSk7CisJCWJyZWFrOworCX0KKworCXN3aXRjaCAodmVyc2lvbiAmIDB4MykgeworCWNhc2UgQ0hJUF84OEM6CisJCXJ0bHBoeS0+cmZfdHlwZSA9IFJGXzFUMVI7CisJCWJyZWFrOworCWNhc2UgQ0hJUF85MkM6CisJCXJ0bHBoeS0+cmZfdHlwZSA9IFJGXzJUMlI7CisJCWJyZWFrOworCWNhc2UgQ0hJUF85MkNfMVQyUjoKKwkJcnRscGh5LT5yZl90eXBlID0gUkZfMVQyUjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcnRscGh5LT5yZl90eXBlID0gUkZfMVQxUjsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19FTUVSRywKKwkJCSAoIkVSUk9SIFJGX1R5cGUgaXMgc2V0ISEiKSk7CisJCWJyZWFrOworCX0KKworCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX0xPVUQsCisJCSAoIkNoaXAgUkYgVHlwZTogJXNcbiIsIChydGxwaHktPnJmX3R5cGUgPT0gUkZfMlQyUikgPworCQkgICJSRl8yVDJSIiA6ICJSRl8xVDFSIikpOworCisJcmV0dXJuIHZlcnNpb247Cit9CisKK3N0YXRpYyBpbnQgX3J0bDkyY2Vfc2V0X21lZGlhX3N0YXR1cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICAgIGVudW0gbmw4MDIxMV9pZnR5cGUgdHlwZSkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJdTggYnRfbXNyID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBNU1IpOworCWVudW0gbGVkX2N0bF9tb2RlIGxlZGFjdGlvbiA9IExFRF9DVExfTk9fTElOSzsKKwlidF9tc3IgJj0gMHhmYzsKKworCWlmICh0eXBlID09IE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEIHx8CisJICAgIHR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgeworCQlfcnRsOTJjZV9zdG9wX3R4X2JlYWNvbihodyk7CisJCV9ydGw5MmNlX2VuYWJsZV9iY25fc3ViX2Z1bmMoaHcpOworCX0gZWxzZSBpZiAodHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQyB8fCB0eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7CisJCV9ydGw5MmNlX3Jlc3VtZV90eF9iZWFjb24oaHcpOworCQlfcnRsOTJjZV9kaXNhYmxlX2Jjbl9zdWJfZnVuYyhodyk7CisJfSBlbHNlIHsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19XQVJOSU5HLAorCQkJICgiU2V0IEhXX1ZBUl9NRURJQV9TVEFUVVM6ICIKKwkJCSAgIk5vIHN1Y2ggbWVkaWEgc3RhdHVzKCV4KS5cbiIsIHR5cGUpKTsKKwl9CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEOgorCQlidF9tc3IgfD0gTVNSX05PTElOSzsKKwkJbGVkYWN0aW9uID0gTEVEX0NUTF9MSU5LOworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0lOSVQsIERCR19UUkFDRSwKKwkJCSAoIlNldCBOZXR3b3JrIHR5cGUgdG8gTk8gTElOSyFcbiIpKTsKKwkJYnJlYWs7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKKwkJYnRfbXNyIHw9IE1TUl9BREhPQzsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9JTklULCBEQkdfVFJBQ0UsCisJCQkgKCJTZXQgTmV0d29yayB0eXBlIHRvIEFkIEhvYyFcbiIpKTsKKwkJYnJlYWs7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgorCQlidF9tc3IgfD0gTVNSX0lORlJBOworCQlsZWRhY3Rpb24gPSBMRURfQ1RMX0xJTks7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX1RSQUNFLAorCQkJICgiU2V0IE5ldHdvcmsgdHlwZSB0byBTVEEhXG4iKSk7CisJCWJyZWFrOworCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6CisJCWJ0X21zciB8PSBNU1JfQVA7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX1RSQUNFLAorCQkJICgiU2V0IE5ldHdvcmsgdHlwZSB0byBBUCFcbiIpKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19FTUVSRywKKwkJCSAoIk5ldHdvcmsgdHlwZSAlZCBub3Qgc3VwcG9ydCFcbiIsIHR5cGUpKTsKKwkJcmV0dXJuIDE7CisJCWJyZWFrOworCisJfQorCisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgKE1TUiksIGJ0X21zcik7CisJcnRscHJpdi0+Y2ZnLT5vcHMtPmxlZF9jb250cm9sKGh3LCBsZWRhY3Rpb24pOworCWlmICgoYnRfbXNyICYgMHhmYykgPT0gTVNSX0FQKQorCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfQkNOVENGRyArIDEsIDB4MDApOworCWVsc2UKKwkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX0JDTlRDRkcgKyAxLCAweDY2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX3J0bDkyY2Vfc2V0X2NoZWNrX2Jzc2lkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICAgZW51bSBubDgwMjExX2lmdHlwZSB0eXBlKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwl1MzIgcmVnX3JjciA9IHJ0bF9yZWFkX2R3b3JkKHJ0bHByaXYsIFJFR19SQ1IpOworCXU4IGZpbHRlcm91dF9ub25fYXNzb2NpYXRlZF9ic3NpZCA9IGZhbHNlOworCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKKwljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CisJCWZpbHRlcm91dF9ub25fYXNzb2NpYXRlZF9ic3NpZCA9IHRydWU7CisJCWJyZWFrOworCWNhc2UgTkw4MDIxMV9JRlRZUEVfVU5TUEVDSUZJRUQ6CisJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlpZiAoZmlsdGVyb3V0X25vbl9hc3NvY2lhdGVkX2Jzc2lkID09IHRydWUpIHsKKwkJcmVnX3JjciB8PSAoUkNSX0NCU1NJRF9EQVRBIHwgUkNSX0NCU1NJRF9CQ04pOworCQlydGxwcml2LT5jZmctPm9wcy0+c2V0X2h3X3JlZyhodywgSFdfVkFSX1JDUiwKKwkJCQkJICAgICAgKHU4ICopICgmcmVnX3JjcikpOworCQlfcnRsOTJjZV9zZXRfYmNuX2N0cmxfcmVnKGh3LCAwLCBCSVQoNCkpOworCX0gZWxzZSBpZiAoZmlsdGVyb3V0X25vbl9hc3NvY2lhdGVkX2Jzc2lkID09IGZhbHNlKSB7CisJCXJlZ19yY3IgJj0gKH4oUkNSX0NCU1NJRF9EQVRBIHwgUkNSX0NCU1NJRF9CQ04pKTsKKwkJX3J0bDkyY2Vfc2V0X2Jjbl9jdHJsX3JlZyhodywgQklUKDQpLCAwKTsKKwkJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9od19yZWcoaHcsCisJCQkJCSAgICAgIEhXX1ZBUl9SQ1IsICh1OCAqKSAoJnJlZ19yY3IpKTsKKwl9Cit9CisKK2ludCBydGw5MmNlX3NldF9uZXR3b3JrX3R5cGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGVudW0gbmw4MDIxMV9pZnR5cGUgdHlwZSkKK3sKKwlpZiAoX3J0bDkyY2Vfc2V0X21lZGlhX3N0YXR1cyhodywgdHlwZSkpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwlfcnRsOTJjZV9zZXRfY2hlY2tfYnNzaWQoaHcsIHR5cGUpOworCXJldHVybiAwOworfQorCit2b2lkIHJ0bDkyY2Vfc2V0X3FvcyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgaW50IGFjaSkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRsX3ByaXYoaHcpKTsKKworCXUzMiB1NGJfYWNfcGFyYW07CisKKwlydGw5MmNfZG1faW5pdF9lZGNhX3R1cmJvKGh3KTsKKworCXU0Yl9hY19wYXJhbSA9ICh1MzIpIG1hYy0+YWNbYWNpXS5haWZzOworCXU0Yl9hY19wYXJhbSB8PQorCSAgICAoKHUzMikgbWFjLT5hY1thY2ldLmN3X21pbiAmIDB4RikgPDwgQUNfUEFSQU1fRUNXX01JTl9PRkZTRVQ7CisJdTRiX2FjX3BhcmFtIHw9CisJICAgICgodTMyKSBtYWMtPmFjW2FjaV0uY3dfbWF4ICYgMHhGKSA8PCBBQ19QQVJBTV9FQ1dfTUFYX09GRlNFVDsKKwl1NGJfYWNfcGFyYW0gfD0gKHUzMikgbWFjLT5hY1thY2ldLnR4X29wIDw8IEFDX1BBUkFNX1RYT1BfTElNSVRfT0ZGU0VUOworCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUU9TLCBEQkdfRE1FU0csCisJCSAoInF1ZXVlOiV4LCBhY19wYXJhbToleCBhaWZzOiV4IGN3bWluOiV4IGN3bWF4OiV4IHR4b3A6JXhcbiIsCisJCSAgYWNpLCB1NGJfYWNfcGFyYW0sIG1hYy0+YWNbYWNpXS5haWZzLCBtYWMtPmFjW2FjaV0uY3dfbWluLAorCQkgIG1hYy0+YWNbYWNpXS5jd19tYXgsIG1hYy0+YWNbYWNpXS50eF9vcCkpOworCXN3aXRjaCAoYWNpKSB7CisJY2FzZSBBQzFfQks6CisJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfRURDQV9CS19QQVJBTSwgdTRiX2FjX3BhcmFtKTsKKwkJYnJlYWs7CisJY2FzZSBBQzBfQkU6CisJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfRURDQV9CRV9QQVJBTSwgdTRiX2FjX3BhcmFtKTsKKwkJYnJlYWs7CisJY2FzZSBBQzJfVkk6CisJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfRURDQV9WSV9QQVJBTSwgdTRiX2FjX3BhcmFtKTsKKwkJYnJlYWs7CisJY2FzZSBBQzNfVk86CisJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfRURDQV9WT19QQVJBTSwgdTRiX2FjX3BhcmFtKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJUlRfQVNTRVJUKGZhbHNlLCAoImludmFsaWQgYWNpOiAlZCAhXG4iLCBhY2kpKTsKKwkJYnJlYWs7CisJfQorfQorCit2b2lkIHJ0bDkyY2VfZW5hYmxlX2ludGVycnVwdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9wY2kgKnJ0bHBjaSA9IHJ0bF9wY2lkZXYocnRsX3BjaXByaXYoaHcpKTsKKworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfSElNUiwgcnRscGNpLT5pcnFfbWFza1swXSAmIDB4RkZGRkZGRkYpOworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfSElNUkUsIHJ0bHBjaS0+aXJxX21hc2tbMV0gJiAweEZGRkZGRkZGKTsKKwlydGxwY2ktPmlycV9lbmFibGVkID0gdHJ1ZTsKK30KKwordm9pZCBydGw5MmNlX2Rpc2FibGVfaW50ZXJydXB0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOworCisJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFJFR19ISU1SLCBJTVI4MTkwX0RJU0FCTEVEKTsKKwlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX0hJTVJFLCBJTVI4MTkwX0RJU0FCTEVEKTsKKwlydGxwY2ktPmlycV9lbmFibGVkID0gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIF9ydGw5MmNlX3Bvd2Vyb2ZmX2FkYXB0ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bF9wcml2KGh3KSk7CisJdTggdTFiX3RtcDsKKworCXJ0bHByaXYtPmludGZfb3BzLT5lbmFibGVfYXNwbShodyk7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX1RYUEFVU0UsIDB4RkYpOworCXJ0bF9zZXRfcmZyZWcoaHcsIFJGOTBfUEFUSF9BLCAweDAwLCBSRlJFR19PRkZTRVRfTUFTSywgMHgwMCk7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX1JGX0NUUkwsIDB4MDApOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19BUFNEX0NUUkwsIDB4NDApOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19TWVNfRlVOQ19FTiwgMHhFMik7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX1NZU19GVU5DX0VOLCAweEUwKTsKKwlpZiAoKHJ0bF9yZWFkX2J5dGUocnRscHJpdiwgUkVHX01DVUZXREwpICYgQklUKDcpKSAmJiBydGxoYWwtPmJmd19yZWFkeSkKKwkJcnRsOTJjX2Zpcm13YXJlX3NlbGZyZXNldChodyk7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX1NZU19GVU5DX0VOICsgMSwgMHg1MSk7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX01DVUZXREwsIDB4MDApOworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfR1BJT19QSU5fQ1RSTCwgMHgwMDAwMDAwMCk7CisJdTFiX3RtcCA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwgUkVHX0dQSU9fUElOX0NUUkwpOworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfR1BJT19QSU5fQ1RSTCwgMHgwMEZGMDAwMCB8CisJCQkodTFiX3RtcCA8PCA4KSk7CisJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgUkVHX0dQSU9fSU9fU0VMLCAweDA3OTApOworCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIFJFR19MRURDRkcwLCAweDgwODApOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19BRkVfUExMX0NUUkwsIDB4ODApOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19TUFMwX0NUUkwsIDB4MjMpOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19BRkVfWFRBTF9DVFJMLCAweDBlKTsKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfUlNWX0NUUkwsIDB4MGUpOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19BUFNfRlNNQ08gKyAxLCAweDEwKTsKK30KKwordm9pZCBydGw5MmNlX2NhcmRfZGlzYWJsZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9wc19jdGwgKnBwc2MgPSBydGxfcHNjKHJ0bF9wcml2KGh3KSk7CisJc3RydWN0IHJ0bF9wY2kgKnJ0bHBjaSA9IHJ0bF9wY2lkZXYocnRsX3BjaXByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOworCWVudW0gbmw4MDIxMV9pZnR5cGUgb3Btb2RlOworCisJbWFjLT5saW5rX3N0YXRlID0gTUFDODAyMTFfTk9MSU5LOworCW9wbW9kZSA9IE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEOworCV9ydGw5MmNlX3NldF9tZWRpYV9zdGF0dXMoaHcsIG9wbW9kZSk7CisJaWYgKHJ0bHBjaS0+ZHJpdmVyX2lzX2dvaW5ndG9fdW5sb2FkIHx8CisJICAgIHBwc2MtPnJmb2ZmX3JlYXNvbiA+IFJGX0NIQU5HRV9CWV9QUykKKwkJcnRscHJpdi0+Y2ZnLT5vcHMtPmxlZF9jb250cm9sKGh3LCBMRURfQ1RMX1BPV0VSX09GRik7CisJUlRfU0VUX1BTX0xFVkVMKHBwc2MsIFJUX1JGX09GRl9MRVZMX0hBTFRfTklDKTsKKwlfcnRsOTJjZV9wb3dlcm9mZl9hZGFwdGVyKGh3KTsKK30KKwordm9pZCBydGw5MmNlX2ludGVycnVwdF9yZWNvZ25pemVkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgdTMyICpwX2ludGEsIHUzMiAqcF9pbnRiKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOworCisJKnBfaW50YSA9IHJ0bF9yZWFkX2R3b3JkKHJ0bHByaXYsIElTUikgJiBydGxwY2ktPmlycV9tYXNrWzBdOworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBJU1IsICpwX2ludGEpOworCisJLyoKKwkgKiAqcF9pbnRiID0gcnRsX3JlYWRfZHdvcmQocnRscHJpdiwgUkVHX0hJU1JFKSAmIHJ0bHBjaS0+aXJxX21hc2tbMV07CisJICogcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIElTUiArIDQsICpwX2ludGIpOworCSAqLworfQorCit2b2lkIHJ0bDkyY2Vfc2V0X2JlYWNvbl9yZWxhdGVkX3JlZ2lzdGVycyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOworCXUxNiBiY25faW50ZXJ2YWwsIGF0aW1fd2luZG93OworCisJYmNuX2ludGVydmFsID0gbWFjLT5iZWFjb25faW50ZXJ2YWw7CisJYXRpbV93aW5kb3cgPSAyOwkvKkZJWCBNRVJHRSAqLworCXJ0bDkyY2VfZGlzYWJsZV9pbnRlcnJ1cHQoaHcpOworCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIFJFR19BVElNV05ELCBhdGltX3dpbmRvdyk7CisJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgUkVHX0JDTl9JTlRFUlZBTCwgYmNuX2ludGVydmFsKTsKKwlydGxfd3JpdGVfd29yZChydGxwcml2LCBSRUdfQkNOVENGRywgMHg2NjBmKTsKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfUlhUU0ZfT0ZGU0VUX0NDSywgMHgxOCk7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX1JYVFNGX09GRlNFVF9PRkRNLCAweDE4KTsKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCAweDYwNiwgMHgzMCk7CisJcnRsOTJjZV9lbmFibGVfaW50ZXJydXB0KGh3KTsKK30KKwordm9pZCBydGw5MmNlX3NldF9iZWFjb25faW50ZXJ2YWwoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfbWFjICptYWMgPSBydGxfbWFjKHJ0bF9wcml2KGh3KSk7CisJdTE2IGJjbl9pbnRlcnZhbCA9IG1hYy0+YmVhY29uX2ludGVydmFsOworCisJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9CRUFDT04sIERCR19ETUVTRywKKwkJICgiYmVhY29uX2ludGVydmFsOiVkXG4iLCBiY25faW50ZXJ2YWwpKTsKKwlydGw5MmNlX2Rpc2FibGVfaW50ZXJydXB0KGh3KTsKKwlydGxfd3JpdGVfd29yZChydGxwcml2LCBSRUdfQkNOX0lOVEVSVkFMLCBiY25faW50ZXJ2YWwpOworCXJ0bDkyY2VfZW5hYmxlX2ludGVycnVwdChodyk7Cit9CisKK3ZvaWQgcnRsOTJjZV91cGRhdGVfaW50ZXJydXB0X21hc2soc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgdTMyIGFkZF9tc3IsIHUzMiBybV9tc3IpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGNpICpydGxwY2kgPSBydGxfcGNpZGV2KHJ0bF9wY2lwcml2KGh3KSk7CisKKwlSVF9UUkFDRShydGxwcml2LCBDT01QX0lOVFIsIERCR19MT1VELAorCQkgKCJhZGRfbXNyOiV4LCBybV9tc3I6JXhcbiIsIGFkZF9tc3IsIHJtX21zcikpOworCWlmIChhZGRfbXNyKQorCQlydGxwY2ktPmlycV9tYXNrWzBdIHw9IGFkZF9tc3I7CisJaWYgKHJtX21zcikKKwkJcnRscGNpLT5pcnFfbWFza1swXSAmPSAofnJtX21zcik7CisJcnRsOTJjZV9kaXNhYmxlX2ludGVycnVwdChodyk7CisJcnRsOTJjZV9lbmFibGVfaW50ZXJydXB0KGh3KTsKK30KKworc3RhdGljIHU4IF9ydGw5MmNfZ2V0X2NobmxfZ3JvdXAodTggY2hubCkKK3sKKwl1OCBncm91cDsKKworCWlmIChjaG5sIDwgMykKKwkJZ3JvdXAgPSAwOworCWVsc2UgaWYgKGNobmwgPCA5KQorCQlncm91cCA9IDE7CisJZWxzZQorCQlncm91cCA9IDI7CisJcmV0dXJuIGdyb3VwOworfQorCitzdGF0aWMgdm9pZCBfcnRsOTJjZV9yZWFkX3R4cG93ZXJfaW5mb19mcm9tX2h3cGcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJCQkgYm9vbCBhdXRvbG9hZF9mYWlsLAorCQkJCQkJIHU4ICpod2luZm8pCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfZWZ1c2UgKnJ0bGVmdXNlID0gcnRsX2VmdXNlKHJ0bF9wcml2KGh3KSk7CisJdTggcmZfcGF0aCwgaW5kZXgsIHRlbXB2YWw7CisJdTE2IGk7CisKKwlmb3IgKHJmX3BhdGggPSAwOyByZl9wYXRoIDwgMjsgcmZfcGF0aCsrKSB7CisJCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJCWlmICghYXV0b2xvYWRfZmFpbCkgeworCQkJCXJ0bGVmdXNlLT4KKwkJCQkgICAgZWVwcm9tX2NobmxhcmVhX3R4cHdyX2Nja1tyZl9wYXRoXVtpXSA9CisJCQkJICAgIGh3aW5mb1tFRVBST01fVFhQT1dFUkNDSyArIHJmX3BhdGggKiAzICsgaV07CisJCQkJcnRsZWZ1c2UtPgorCQkJCSAgICBlZXByb21fY2hubGFyZWFfdHhwd3JfaHQ0MF8xc1tyZl9wYXRoXVtpXSA9CisJCQkJICAgIGh3aW5mb1tFRVBST01fVFhQT1dFUkhUNDBfMVMgKyByZl9wYXRoICogMyArCisJCQkJCSAgIGldOworCQkJfSBlbHNlIHsKKwkJCQlydGxlZnVzZS0+CisJCQkJICAgIGVlcHJvbV9jaG5sYXJlYV90eHB3cl9jY2tbcmZfcGF0aF1baV0gPQorCQkJCSAgICBFRVBST01fREVGQVVMVF9UWFBPV0VSTEVWRUw7CisJCQkJcnRsZWZ1c2UtPgorCQkJCSAgICBlZXByb21fY2hubGFyZWFfdHhwd3JfaHQ0MF8xc1tyZl9wYXRoXVtpXSA9CisJCQkJICAgIEVFUFJPTV9ERUZBVUxUX1RYUE9XRVJMRVZFTDsKKwkJCX0KKwkJfQorCX0KKworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJaWYgKCFhdXRvbG9hZF9mYWlsKQorCQkJdGVtcHZhbCA9IGh3aW5mb1tFRVBST01fVFhQT1dFUkhUNDBfMlNESUZGICsgaV07CisJCWVsc2UKKwkJCXRlbXB2YWwgPSBFRVBST01fREVGQVVMVF9IVDQwXzJTRElGRjsKKwkJcnRsZWZ1c2UtPmVlcHJvbV9jaG5sYXJlYV90eHB3cl9odDQwXzJzZGlpZltSRjkwX1BBVEhfQV1baV0gPQorCQkgICAgKHRlbXB2YWwgJiAweGYpOworCQlydGxlZnVzZS0+ZWVwcm9tX2NobmxhcmVhX3R4cHdyX2h0NDBfMnNkaWlmW1JGOTBfUEFUSF9CXVtpXSA9CisJCSAgICAoKHRlbXB2YWwgJiAweGYwKSA+PiA0KTsKKwl9CisKKwlmb3IgKHJmX3BhdGggPSAwOyByZl9wYXRoIDwgMjsgcmZfcGF0aCsrKQorCQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQorCQkJUlRQUklOVChydGxwcml2LCBGSU5JVCwgSU5JVF9FRVBST00sCisJCQkJKCJSRiglZCkgRUVQUk9NIENDSyBBcmVhKCVkKSA9IDB4JXhcbiIsIHJmX3BhdGgsCisJCQkJIGksCisJCQkJIHJ0bGVmdXNlLT4KKwkJCQkgZWVwcm9tX2NobmxhcmVhX3R4cHdyX2Nja1tyZl9wYXRoXVtpXSkpOworCWZvciAocmZfcGF0aCA9IDA7IHJmX3BhdGggPCAyOyByZl9wYXRoKyspCisJCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCisJCQlSVFBSSU5UKHJ0bHByaXYsIEZJTklULCBJTklUX0VFUFJPTSwKKwkJCQkoIlJGKCVkKSBFRVBST00gSFQ0MCAxUyBBcmVhKCVkKSA9IDB4JXhcbiIsCisJCQkJIHJmX3BhdGgsIGksCisJCQkJIHJ0bGVmdXNlLT4KKwkJCQkgZWVwcm9tX2NobmxhcmVhX3R4cHdyX2h0NDBfMXNbcmZfcGF0aF1baV0pKTsKKwlmb3IgKHJmX3BhdGggPSAwOyByZl9wYXRoIDwgMjsgcmZfcGF0aCsrKQorCQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQorCQkJUlRQUklOVChydGxwcml2LCBGSU5JVCwgSU5JVF9FRVBST00sCisJCQkJKCJSRiglZCkgRUVQUk9NIEhUNDAgMlMgRGlmZiBBcmVhKCVkKSA9IDB4JXhcbiIsCisJCQkJIHJmX3BhdGgsIGksCisJCQkJIHJ0bGVmdXNlLT4KKwkJCQkgZWVwcm9tX2NobmxhcmVhX3R4cHdyX2h0NDBfMnNkaWlmW3JmX3BhdGhdCisJCQkJIFtpXSkpOworCisJZm9yIChyZl9wYXRoID0gMDsgcmZfcGF0aCA8IDI7IHJmX3BhdGgrKykgeworCQlmb3IgKGkgPSAwOyBpIDwgMTQ7IGkrKykgeworCQkJaW5kZXggPSBfcnRsOTJjX2dldF9jaG5sX2dyb3VwKCh1OCkgaSk7CisKKwkJCXJ0bGVmdXNlLT50eHB3cmxldmVsX2Nja1tyZl9wYXRoXVtpXSA9CisJCQkgICAgcnRsZWZ1c2UtPmVlcHJvbV9jaG5sYXJlYV90eHB3cl9jY2tbcmZfcGF0aF1baW5kZXhdOworCQkJcnRsZWZ1c2UtPnR4cHdybGV2ZWxfaHQ0MF8xc1tyZl9wYXRoXVtpXSA9CisJCQkgICAgcnRsZWZ1c2UtPgorCQkJICAgIGVlcHJvbV9jaG5sYXJlYV90eHB3cl9odDQwXzFzW3JmX3BhdGhdW2luZGV4XTsKKworCQkJaWYgKChydGxlZnVzZS0+CisJCQkgICAgIGVlcHJvbV9jaG5sYXJlYV90eHB3cl9odDQwXzFzW3JmX3BhdGhdW2luZGV4XSAtCisJCQkgICAgIHJ0bGVmdXNlLT4KKwkJCSAgICAgZWVwcm9tX2NobmxhcmVhX3R4cHdyX2h0NDBfMnNkaWlmW3JmX3BhdGhdW2luZGV4XSkKKwkJCSAgICA+IDApIHsKKwkJCQlydGxlZnVzZS0+dHhwd3JsZXZlbF9odDQwXzJzW3JmX3BhdGhdW2ldID0KKwkJCQkgICAgcnRsZWZ1c2UtPgorCQkJCSAgICBlZXByb21fY2hubGFyZWFfdHhwd3JfaHQ0MF8xc1tyZl9wYXRoXQorCQkJCSAgICBbaW5kZXhdIC0KKwkJCQkgICAgcnRsZWZ1c2UtPgorCQkJCSAgICBlZXByb21fY2hubGFyZWFfdHhwd3JfaHQ0MF8yc2RpaWZbcmZfcGF0aF0KKwkJCQkgICAgW2luZGV4XTsKKwkJCX0gZWxzZSB7CisJCQkJcnRsZWZ1c2UtPnR4cHdybGV2ZWxfaHQ0MF8yc1tyZl9wYXRoXVtpXSA9IDA7CisJCQl9CisJCX0KKworCQlmb3IgKGkgPSAwOyBpIDwgMTQ7IGkrKykgeworCQkJUlRQUklOVChydGxwcml2LCBGSU5JVCwgSU5JVF9UeFBvd2VyLAorCQkJCSgiUkYoJWQpLUNoKCVkKSBbQ0NLIC8gSFQ0MF8xUyAvIEhUNDBfMlNdID0gIgorCQkJCSAiWzB4JXggLyAweCV4IC8gMHgleF1cbiIsIHJmX3BhdGgsIGksCisJCQkJIHJ0bGVmdXNlLT50eHB3cmxldmVsX2Nja1tyZl9wYXRoXVtpXSwKKwkJCQkgcnRsZWZ1c2UtPnR4cHdybGV2ZWxfaHQ0MF8xc1tyZl9wYXRoXVtpXSwKKwkJCQkgcnRsZWZ1c2UtPnR4cHdybGV2ZWxfaHQ0MF8yc1tyZl9wYXRoXVtpXSkpOworCQl9CisJfQorCisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQlpZiAoIWF1dG9sb2FkX2ZhaWwpIHsKKwkJCXJ0bGVmdXNlLT5lZXByb21fcHdybGltaXRfaHQ0MFtpXSA9CisJCQkgICAgaHdpbmZvW0VFUFJPTV9UWFBXUl9HUk9VUCArIGldOworCQkJcnRsZWZ1c2UtPmVlcHJvbV9wd3JsaW1pdF9odDIwW2ldID0KKwkJCSAgICBod2luZm9bRUVQUk9NX1RYUFdSX0dST1VQICsgMyArIGldOworCQl9IGVsc2UgeworCQkJcnRsZWZ1c2UtPmVlcHJvbV9wd3JsaW1pdF9odDQwW2ldID0gMDsKKwkJCXJ0bGVmdXNlLT5lZXByb21fcHdybGltaXRfaHQyMFtpXSA9IDA7CisJCX0KKwl9CisKKwlmb3IgKHJmX3BhdGggPSAwOyByZl9wYXRoIDwgMjsgcmZfcGF0aCsrKSB7CisJCWZvciAoaSA9IDA7IGkgPCAxNDsgaSsrKSB7CisJCQlpbmRleCA9IF9ydGw5MmNfZ2V0X2NobmxfZ3JvdXAoKHU4KSBpKTsKKworCQkJaWYgKHJmX3BhdGggPT0gUkY5MF9QQVRIX0EpIHsKKwkJCQlydGxlZnVzZS0+cHdyZ3JvdXBfaHQyMFtyZl9wYXRoXVtpXSA9CisJCQkJICAgIChydGxlZnVzZS0+ZWVwcm9tX3B3cmxpbWl0X2h0MjBbaW5kZXhdCisJCQkJICAgICAmIDB4Zik7CisJCQkJcnRsZWZ1c2UtPnB3cmdyb3VwX2h0NDBbcmZfcGF0aF1baV0gPQorCQkJCSAgICAocnRsZWZ1c2UtPmVlcHJvbV9wd3JsaW1pdF9odDQwW2luZGV4XQorCQkJCSAgICAgJiAweGYpOworCQkJfSBlbHNlIGlmIChyZl9wYXRoID09IFJGOTBfUEFUSF9CKSB7CisJCQkJcnRsZWZ1c2UtPnB3cmdyb3VwX2h0MjBbcmZfcGF0aF1baV0gPQorCQkJCSAgICAoKHJ0bGVmdXNlLT5lZXByb21fcHdybGltaXRfaHQyMFtpbmRleF0KKwkJCQkgICAgICAmIDB4ZjApID4+IDQpOworCQkJCXJ0bGVmdXNlLT5wd3Jncm91cF9odDQwW3JmX3BhdGhdW2ldID0KKwkJCQkgICAgKChydGxlZnVzZS0+ZWVwcm9tX3B3cmxpbWl0X2h0NDBbaW5kZXhdCisJCQkJICAgICAgJiAweGYwKSA+PiA0KTsKKwkJCX0KKworCQkJUlRQUklOVChydGxwcml2LCBGSU5JVCwgSU5JVF9UeFBvd2VyLAorCQkJCSgiUkYtJWQgcHdyZ3JvdXBfaHQyMFslZF0gPSAweCV4XG4iLAorCQkJCSByZl9wYXRoLCBpLAorCQkJCSBydGxlZnVzZS0+cHdyZ3JvdXBfaHQyMFtyZl9wYXRoXVtpXSkpOworCQkJUlRQUklOVChydGxwcml2LCBGSU5JVCwgSU5JVF9UeFBvd2VyLAorCQkJCSgiUkYtJWQgcHdyZ3JvdXBfaHQ0MFslZF0gPSAweCV4XG4iLAorCQkJCSByZl9wYXRoLCBpLAorCQkJCSBydGxlZnVzZS0+cHdyZ3JvdXBfaHQ0MFtyZl9wYXRoXVtpXSkpOworCQl9CisJfQorCisJZm9yIChpID0gMDsgaSA8IDE0OyBpKyspIHsKKwkJaW5kZXggPSBfcnRsOTJjX2dldF9jaG5sX2dyb3VwKCh1OCkgaSk7CisKKwkJaWYgKCFhdXRvbG9hZF9mYWlsKQorCQkJdGVtcHZhbCA9IGh3aW5mb1tFRVBST01fVFhQT1dFUkhUMjBESUZGICsgaW5kZXhdOworCQllbHNlCisJCQl0ZW1wdmFsID0gRUVQUk9NX0RFRkFVTFRfSFQyMF9ESUZGOworCisJCXJ0bGVmdXNlLT50eHB3cl9odDIwZGlmZltSRjkwX1BBVEhfQV1baV0gPSAodGVtcHZhbCAmIDB4Rik7CisJCXJ0bGVmdXNlLT50eHB3cl9odDIwZGlmZltSRjkwX1BBVEhfQl1baV0gPQorCQkgICAgKCh0ZW1wdmFsID4+IDQpICYgMHhGKTsKKworCQlpZiAocnRsZWZ1c2UtPnR4cHdyX2h0MjBkaWZmW1JGOTBfUEFUSF9BXVtpXSAmIEJJVCgzKSkKKwkJCXJ0bGVmdXNlLT50eHB3cl9odDIwZGlmZltSRjkwX1BBVEhfQV1baV0gfD0gMHhGMDsKKworCQlpZiAocnRsZWZ1c2UtPnR4cHdyX2h0MjBkaWZmW1JGOTBfUEFUSF9CXVtpXSAmIEJJVCgzKSkKKwkJCXJ0bGVmdXNlLT50eHB3cl9odDIwZGlmZltSRjkwX1BBVEhfQl1baV0gfD0gMHhGMDsKKworCQlpbmRleCA9IF9ydGw5MmNfZ2V0X2NobmxfZ3JvdXAoKHU4KSBpKTsKKworCQlpZiAoIWF1dG9sb2FkX2ZhaWwpCisJCQl0ZW1wdmFsID0gaHdpbmZvW0VFUFJPTV9UWFBPV0VSX09GRE1ESUZGICsgaW5kZXhdOworCQllbHNlCisJCQl0ZW1wdmFsID0gRUVQUk9NX0RFRkFVTFRfTEVHQUNZSFRUWFBPV0VSRElGRjsKKworCQlydGxlZnVzZS0+dHhwd3JfbGVnYWN5aHRkaWZmW1JGOTBfUEFUSF9BXVtpXSA9ICh0ZW1wdmFsICYgMHhGKTsKKwkJcnRsZWZ1c2UtPnR4cHdyX2xlZ2FjeWh0ZGlmZltSRjkwX1BBVEhfQl1baV0gPQorCQkgICAgKCh0ZW1wdmFsID4+IDQpICYgMHhGKTsKKwl9CisKKwlydGxlZnVzZS0+bGVnYWN5X2h0X3R4cG93ZXJkaWZmID0KKwkgICAgcnRsZWZ1c2UtPnR4cHdyX2xlZ2FjeWh0ZGlmZltSRjkwX1BBVEhfQV1bN107CisKKwlmb3IgKGkgPSAwOyBpIDwgMTQ7IGkrKykKKwkJUlRQUklOVChydGxwcml2LCBGSU5JVCwgSU5JVF9UeFBvd2VyLAorCQkJKCJSRi1BIEh0MjAgdG8gSFQ0MCBEaWZmWyVkXSA9IDB4JXhcbiIsIGksCisJCQkgcnRsZWZ1c2UtPnR4cHdyX2h0MjBkaWZmW1JGOTBfUEFUSF9BXVtpXSkpOworCWZvciAoaSA9IDA7IGkgPCAxNDsgaSsrKQorCQlSVFBSSU5UKHJ0bHByaXYsIEZJTklULCBJTklUX1R4UG93ZXIsCisJCQkoIlJGLUEgTGVnYWN5IHRvIEh0NDAgRGlmZlslZF0gPSAweCV4XG4iLCBpLAorCQkJIHJ0bGVmdXNlLT50eHB3cl9sZWdhY3lodGRpZmZbUkY5MF9QQVRIX0FdW2ldKSk7CisJZm9yIChpID0gMDsgaSA8IDE0OyBpKyspCisJCVJUUFJJTlQocnRscHJpdiwgRklOSVQsIElOSVRfVHhQb3dlciwKKwkJCSgiUkYtQiBIdDIwIHRvIEhUNDAgRGlmZlslZF0gPSAweCV4XG4iLCBpLAorCQkJIHJ0bGVmdXNlLT50eHB3cl9odDIwZGlmZltSRjkwX1BBVEhfQl1baV0pKTsKKwlmb3IgKGkgPSAwOyBpIDwgMTQ7IGkrKykKKwkJUlRQUklOVChydGxwcml2LCBGSU5JVCwgSU5JVF9UeFBvd2VyLAorCQkJKCJSRi1CIExlZ2FjeSB0byBIVDQwIERpZmZbJWRdID0gMHgleFxuIiwgaSwKKwkJCSBydGxlZnVzZS0+dHhwd3JfbGVnYWN5aHRkaWZmW1JGOTBfUEFUSF9CXVtpXSkpOworCisJaWYgKCFhdXRvbG9hZF9mYWlsKQorCQlydGxlZnVzZS0+ZWVwcm9tX3JlZ3VsYXRvcnkgPSAoaHdpbmZvW1JGX09QVElPTjFdICYgMHg3KTsKKwllbHNlCisJCXJ0bGVmdXNlLT5lZXByb21fcmVndWxhdG9yeSA9IDA7CisJUlRQUklOVChydGxwcml2LCBGSU5JVCwgSU5JVF9UeFBvd2VyLAorCQkoImVlcHJvbV9yZWd1bGF0b3J5ID0gMHgleFxuIiwgcnRsZWZ1c2UtPmVlcHJvbV9yZWd1bGF0b3J5KSk7CisKKwlpZiAoIWF1dG9sb2FkX2ZhaWwpIHsKKwkJcnRsZWZ1c2UtPmVlcHJvbV90c3NpW1JGOTBfUEFUSF9BXSA9IGh3aW5mb1tFRVBST01fVFNTSV9BXTsKKwkJcnRsZWZ1c2UtPmVlcHJvbV90c3NpW1JGOTBfUEFUSF9CXSA9IGh3aW5mb1tFRVBST01fVFNTSV9CXTsKKwl9IGVsc2UgeworCQlydGxlZnVzZS0+ZWVwcm9tX3Rzc2lbUkY5MF9QQVRIX0FdID0gRUVQUk9NX0RFRkFVTFRfVFNTSTsKKwkJcnRsZWZ1c2UtPmVlcHJvbV90c3NpW1JGOTBfUEFUSF9CXSA9IEVFUFJPTV9ERUZBVUxUX1RTU0k7CisJfQorCVJUUFJJTlQocnRscHJpdiwgRklOSVQsIElOSVRfVHhQb3dlciwKKwkJKCJUU1NJX0EgPSAweCV4LCBUU1NJX0IgPSAweCV4XG4iLAorCQkgcnRsZWZ1c2UtPmVlcHJvbV90c3NpW1JGOTBfUEFUSF9BXSwKKwkJIHJ0bGVmdXNlLT5lZXByb21fdHNzaVtSRjkwX1BBVEhfQl0pKTsKKworCWlmICghYXV0b2xvYWRfZmFpbCkKKwkJdGVtcHZhbCA9IGh3aW5mb1tFRVBST01fVEhFUk1BTF9NRVRFUl07CisJZWxzZQorCQl0ZW1wdmFsID0gRUVQUk9NX0RFRkFVTFRfVEhFUk1BTE1FVEVSOworCXJ0bGVmdXNlLT5lZXByb21fdGhlcm1hbG1ldGVyID0gKHRlbXB2YWwgJiAweDFmKTsKKworCWlmIChydGxlZnVzZS0+ZWVwcm9tX3RoZXJtYWxtZXRlciA9PSAweDFmIHx8IGF1dG9sb2FkX2ZhaWwpCisJCXJ0bGVmdXNlLT5iX2Fwa190aGVybWFsbWV0ZXJpZ25vcmUgPSB0cnVlOworCisJcnRsZWZ1c2UtPnRoZXJtYWxtZXRlclswXSA9IHJ0bGVmdXNlLT5lZXByb21fdGhlcm1hbG1ldGVyOworCVJUUFJJTlQocnRscHJpdiwgRklOSVQsIElOSVRfVHhQb3dlciwKKwkJKCJ0aGVybWFsbWV0ZXIgPSAweCV4XG4iLCBydGxlZnVzZS0+ZWVwcm9tX3RoZXJtYWxtZXRlcikpOworfQorCitzdGF0aWMgdm9pZCBfcnRsOTJjZV9yZWFkX2FkYXB0ZXJfaW5mbyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9lZnVzZSAqcnRsZWZ1c2UgPSBydGxfZWZ1c2UocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX2hhbCAqcnRsaGFsID0gcnRsX2hhbChydGxfcHJpdihodykpOworCXUxNiBpLCB1c3ZhbHVlOworCXU4IGh3aW5mb1tIV1NFVF9NQVhfU0laRV07CisJdTE2IGVlcHJvbV9pZDsKKworCWlmIChydGxlZnVzZS0+ZXByb210eXBlID09IEVFUFJPTV9CT09UX0VGVVNFKSB7CisJCXJ0bF9lZnVzZV9zaGFkb3dfbWFwX3VwZGF0ZShodyk7CisKKwkJbWVtY3B5KCh2b2lkICopaHdpbmZvLAorCQkgICAgICAgKHZvaWQgKikmcnRsZWZ1c2UtPmVmdXNlX21hcFtFRlVTRV9JTklUX01BUF1bMF0sCisJCSAgICAgICBIV1NFVF9NQVhfU0laRSk7CisJfSBlbHNlIGlmIChydGxlZnVzZS0+ZXByb210eXBlID09IEVFUFJPTV85M0M0NikgeworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX0VNRVJHLAorCQkJICgiUlRMODE5WCBOb3QgYm9vdCBmcm9tIGVlcHJvbSwgY2hlY2sgaXQgISEiKSk7CisJfQorCisJUlRfUFJJTlRfREFUQShydGxwcml2LCBDT01QX0lOSVQsIERCR19MT1VELCAoIk1BUFxuIiksCisJCSAgICAgIGh3aW5mbywgSFdTRVRfTUFYX1NJWkUpOworCisJZWVwcm9tX2lkID0gKigodTE2ICopJmh3aW5mb1swXSk7CisJaWYgKGVlcHJvbV9pZCAhPSBSVEw4MTkwX0VFUFJPTV9JRCkgeworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX1dBUk5JTkcsCisJCQkgKCJFRVBST00gSUQoJSN4KSBpcyBpbnZhbGlkISFcbiIsIGVlcHJvbV9pZCkpOworCQlydGxlZnVzZS0+YXV0b2xvYWRfZmFpbGZsYWcgPSB0cnVlOworCX0gZWxzZSB7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX0xPVUQsICgiQXV0b2xvYWQgT0tcbiIpKTsKKwkJcnRsZWZ1c2UtPmF1dG9sb2FkX2ZhaWxmbGFnID0gZmFsc2U7CisJfQorCisJaWYgKHJ0bGVmdXNlLT5hdXRvbG9hZF9mYWlsZmxhZyA9PSB0cnVlKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgNjsgaSArPSAyKSB7CisJCXVzdmFsdWUgPSAqKHUxNiAqKSZod2luZm9bRUVQUk9NX01BQ19BRERSICsgaV07CisJCSooKHUxNiAqKSAoJnJ0bGVmdXNlLT5kZXZfYWRkcltpXSkpID0gdXN2YWx1ZTsKKwl9CisKKwlSVF9UUkFDRShydGxwcml2LCBDT01QX0lOSVQsIERCR19ETUVTRywKKwkJIChNQUNfRk1UICJcbiIsIE1BQ19BUkcocnRsZWZ1c2UtPmRldl9hZGRyKSkpOworCisJX3J0bDkyY2VfcmVhZF90eHBvd2VyX2luZm9fZnJvbV9od3BnKGh3LAorCQkJCQkgICAgIHJ0bGVmdXNlLT5hdXRvbG9hZF9mYWlsZmxhZywKKwkJCQkJICAgICBod2luZm8pOworCisJcnRsZWZ1c2UtPmVlcHJvbV9jaGFubmVscGxhbiA9ICoodTggKikmaHdpbmZvW0VFUFJPTV9DSEFOTkVMUExBTl07CisJcnRsZWZ1c2UtPmVlcHJvbV92ZXJzaW9uID0gKih1MTYgKikmaHdpbmZvW0VFUFJPTV9WRVJTSU9OXTsKKwlydGxlZnVzZS0+Yl90eHB3cl9mcm9tZXByb20gPSB0cnVlOworCXJ0bGVmdXNlLT5lZXByb21fb2VtaWQgPSAqKHU4ICopJmh3aW5mb1tFRVBST01fQ1VTVE9NRVJfSURdOworCisJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9JTklULCBEQkdfTE9VRCwKKwkJICgiRUVQUk9NIEN1c3RvbWVyIElEOiAweCUyeFxuIiwgcnRsZWZ1c2UtPmVlcHJvbV9vZW1pZCkpOworCisJaWYgKHJ0bGhhbC0+b2VtX2lkID09IFJUX0NJRF9ERUZBVUxUKSB7CisJCXN3aXRjaCAocnRsZWZ1c2UtPmVlcHJvbV9vZW1pZCkgeworCQljYXNlIEVFUFJPTV9DSURfREVGQVVMVDoKKwkJCWlmIChydGxlZnVzZS0+ZWVwcm9tX2RpZCA9PSAweDgxNzYpIHsKKwkJCQlpZiAoKHJ0bGVmdXNlLT5lZXByb21fc3ZpZCA9PSAweDEwM0MgJiYKKwkJCQkgICAgIHJ0bGVmdXNlLT5lZXByb21fc21pZCA9PSAweDE2MjkpKQorCQkJCQlydGxoYWwtPm9lbV9pZCA9IFJUX0NJRF84MTl4X0hQOworCQkJCWVsc2UKKwkJCQkJcnRsaGFsLT5vZW1faWQgPSBSVF9DSURfREVGQVVMVDsKKwkJCX0gZWxzZSB7CisJCQkJcnRsaGFsLT5vZW1faWQgPSBSVF9DSURfREVGQVVMVDsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIEVFUFJPTV9DSURfVE9TSElCQToKKwkJCXJ0bGhhbC0+b2VtX2lkID0gUlRfQ0lEX1RPU0hJQkE7CisJCQlicmVhazsKKwkJY2FzZSBFRVBST01fQ0lEX1FNSToKKwkJCXJ0bGhhbC0+b2VtX2lkID0gUlRfQ0lEXzgxOXhfUU1JOworCQkJYnJlYWs7CisJCWNhc2UgRUVQUk9NX0NJRF9XSFFMOgorCQlkZWZhdWx0OgorCQkJcnRsaGFsLT5vZW1faWQgPSBSVF9DSURfREVGQVVMVDsKKwkJCWJyZWFrOworCisJCX0KKwl9CisKK30KKworc3RhdGljIHZvaWQgX3J0bDkyY2VfaGFsX2N1c3RvbWl6ZWRfYmVoYXZpb3Ioc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGNpX3ByaXYgKnBjaXByaXYgPSBydGxfcGNpcHJpdihodyk7CisJc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCA9IHJ0bF9oYWwocnRsX3ByaXYoaHcpKTsKKworCXN3aXRjaCAocnRsaGFsLT5vZW1faWQpIHsKKwljYXNlIFJUX0NJRF84MTl4X0hQOgorCQlwY2lwcml2LT5sZWRjdGwuYmxlZF9vcGVuZHJhaW4gPSB0cnVlOworCQlicmVhazsKKwljYXNlIFJUX0NJRF84MTl4X0xlbm92bzoKKwljYXNlIFJUX0NJRF9ERUZBVUxUOgorCWNhc2UgUlRfQ0lEX1RPU0hJQkE6CisJY2FzZSBSVF9DSURfQ0NYOgorCWNhc2UgUlRfQ0lEXzgxOXhfQWNlcjoKKwljYXNlIFJUX0NJRF9XSFFMOgorCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlSVF9UUkFDRShydGxwcml2LCBDT01QX0lOSVQsIERCR19ETUVTRywKKwkJICgiUlQgQ3VzdG9taXplZCBJRDogMHglMDJYXG4iLCBydGxoYWwtPm9lbV9pZCkpOworfQorCit2b2lkIHJ0bDkyY2VfcmVhZF9lZXByb21faW5mbyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9lZnVzZSAqcnRsZWZ1c2UgPSBydGxfZWZ1c2UocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX3BoeSAqcnRscGh5ID0gJihydGxwcml2LT5waHkpOworCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bF9wcml2KGh3KSk7CisJdTggdG1wX3UxYjsKKworCXJ0bGhhbC0+dmVyc2lvbiA9IF9ydGw5MmNlX3JlYWRfY2hpcF92ZXJzaW9uKGh3KTsKKwlpZiAoZ2V0X3JmX3R5cGUocnRscGh5KSA9PSBSRl8xVDFSKQorCQlydGxwcml2LT5kbS5icmZwYXRoX3J4ZW5hYmxlWzBdID0gdHJ1ZTsKKwllbHNlCisJCXJ0bHByaXYtPmRtLmJyZnBhdGhfcnhlbmFibGVbMF0gPQorCQkgICAgcnRscHJpdi0+ZG0uYnJmcGF0aF9yeGVuYWJsZVsxXSA9IHRydWU7CisJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9JTklULCBEQkdfTE9VRCwgKCJWZXJzaW9uSUQgPSAweCU0eFxuIiwKKwkJCQkJCXJ0bGhhbC0+dmVyc2lvbikpOworCXRtcF91MWIgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIFJFR185MzQ2Q1IpOworCWlmICh0bXBfdTFiICYgQklUKDQpKSB7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX0RNRVNHLCAoIkJvb3QgZnJvbSBFRVBST01cbiIpKTsKKwkJcnRsZWZ1c2UtPmVwcm9tdHlwZSA9IEVFUFJPTV85M0M0NjsKKwl9IGVsc2UgeworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0lOSVQsIERCR19ETUVTRywgKCJCb290IGZyb20gRUZVU0VcbiIpKTsKKwkJcnRsZWZ1c2UtPmVwcm9tdHlwZSA9IEVFUFJPTV9CT09UX0VGVVNFOworCX0KKwlpZiAodG1wX3UxYiAmIEJJVCg1KSkgeworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0lOSVQsIERCR19MT1VELCAoIkF1dG9sb2FkIE9LXG4iKSk7CisJCXJ0bGVmdXNlLT5hdXRvbG9hZF9mYWlsZmxhZyA9IGZhbHNlOworCQlfcnRsOTJjZV9yZWFkX2FkYXB0ZXJfaW5mbyhodyk7CisJfSBlbHNlIHsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19FTUVSRywgKCJBdXRvbG9hZCBFUlIhIVxuIikpOworCX0KKworCV9ydGw5MmNlX2hhbF9jdXN0b21pemVkX2JlaGF2aW9yKGh3KTsKK30KKwordm9pZCBydGw5MmNlX3VwZGF0ZV9oYWxfcmF0ZV90YWJsZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKKwlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOworCisJdTMyIHJhdHJfdmFsdWUgPSAodTMyKSBtYWMtPmJhc2ljX3JhdGVzOworCXU4ICpwX21jc3JhdGUgPSBtYWMtPm1jczsKKwl1OCByYXRyX2luZGV4ID0gMDsKKwl1OCBiX25tb2RlID0gbWFjLT5odF9lbmFibGU7CisJdTggbWltb19wcyA9IDE7CisJdTE2IHNob3J0Z2lfcmF0ZTsKKwl1MzIgdG1wX3JhdHJfdmFsdWU7CisJdTggYl9jdXJ0eGJ3XzQwbWh6ID0gbWFjLT5id180MDsKKwl1OCBiX2N1cnNob3J0Z2lfNDBtaHogPSBtYWMtPnNnaV80MDsKKwl1OCBiX2N1cnNob3J0Z2lfMjBtaHogPSBtYWMtPnNnaV8yMDsKKwllbnVtIHdpcmVsZXNzX21vZGUgd2lyZWxlc3Ntb2RlID0gbWFjLT5tb2RlOworCisJcmF0cl92YWx1ZSB8PSBFRjJCWVRFKCgqKHUxNiAqKSAocF9tY3NyYXRlKSkpIDw8IDEyOworCisJc3dpdGNoICh3aXJlbGVzc21vZGUpIHsKKwljYXNlIFdJUkVMRVNTX01PREVfQjoKKwkJaWYgKHJhdHJfdmFsdWUgJiAweDAwMDAwMDBjKQorCQkJcmF0cl92YWx1ZSAmPSAweDAwMDAwMDBkOworCQllbHNlCisJCQlyYXRyX3ZhbHVlICY9IDB4MDAwMDAwMGY7CisJCWJyZWFrOworCWNhc2UgV0lSRUxFU1NfTU9ERV9HOgorCQlyYXRyX3ZhbHVlICY9IDB4MDAwMDBGRjU7CisJCWJyZWFrOworCWNhc2UgV0lSRUxFU1NfTU9ERV9OXzI0RzoKKwljYXNlIFdJUkVMRVNTX01PREVfTl81RzoKKwkJYl9ubW9kZSA9IDE7CisJCWlmIChtaW1vX3BzID09IDApIHsKKwkJCXJhdHJfdmFsdWUgJj0gMHgwMDA3RjAwNTsKKwkJfSBlbHNlIHsKKwkJCXUzMiByYXRyX21hc2s7CisKKwkJCWlmIChnZXRfcmZfdHlwZShydGxwaHkpID09IFJGXzFUMlIgfHwKKwkJCSAgICBnZXRfcmZfdHlwZShydGxwaHkpID09IFJGXzFUMVIpCisJCQkJcmF0cl9tYXNrID0gMHgwMDBmZjAwNTsKKwkJCWVsc2UKKwkJCQlyYXRyX21hc2sgPSAweDBmMGZmMDA1OworCisJCQlyYXRyX3ZhbHVlICY9IHJhdHJfbWFzazsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlpZiAocnRscGh5LT5yZl90eXBlID09IFJGXzFUMlIpCisJCQlyYXRyX3ZhbHVlICY9IDB4MDAwZmYwZmY7CisJCWVsc2UKKwkJCXJhdHJfdmFsdWUgJj0gMHgwZjBmZjBmZjsKKworCQlicmVhazsKKwl9CisKKwlyYXRyX3ZhbHVlICY9IDB4MEZGRkZGRkY7CisKKwlpZiAoYl9ubW9kZSAmJiAoKGJfY3VydHhid180MG1oeiAmJgorCQkJIGJfY3Vyc2hvcnRnaV80MG1oeikgfHwgKCFiX2N1cnR4YndfNDBtaHogJiYKKwkJCQkJCSBiX2N1cnNob3J0Z2lfMjBtaHopKSkgeworCisJCXJhdHJfdmFsdWUgfD0gMHgxMDAwMDAwMDsKKwkJdG1wX3JhdHJfdmFsdWUgPSAocmF0cl92YWx1ZSA+PiAxMik7CisKKwkJZm9yIChzaG9ydGdpX3JhdGUgPSAxNTsgc2hvcnRnaV9yYXRlID4gMDsgc2hvcnRnaV9yYXRlLS0pIHsKKwkJCWlmICgoMSA8PCBzaG9ydGdpX3JhdGUpICYgdG1wX3JhdHJfdmFsdWUpCisJCQkJYnJlYWs7CisJCX0KKworCQlzaG9ydGdpX3JhdGUgPSAoc2hvcnRnaV9yYXRlIDw8IDEyKSB8IChzaG9ydGdpX3JhdGUgPDwgOCkgfAorCQkgICAgKHNob3J0Z2lfcmF0ZSA8PCA0KSB8IChzaG9ydGdpX3JhdGUpOworCX0KKworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfQVJGUjAgKyByYXRyX2luZGV4ICogNCwgcmF0cl92YWx1ZSk7CisKKwlSVF9UUkFDRShydGxwcml2LCBDT01QX1JBVFIsIERCR19ETUVTRywKKwkJICgiJXhcbiIsIHJ0bF9yZWFkX2R3b3JkKHJ0bHByaXYsIFJFR19BUkZSMCkpKTsKK30KKwordm9pZCBydGw5MmNlX3VwZGF0ZV9oYWxfcmF0ZV9tYXNrKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCByc3NpX2xldmVsKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BoeSAqcnRscGh5ID0gJihydGxwcml2LT5waHkpOworCXN0cnVjdCBydGxfbWFjICptYWMgPSBydGxfbWFjKHJ0bF9wcml2KGh3KSk7CisJdTMyIHJhdHJfYml0bWFwID0gKHUzMikgbWFjLT5iYXNpY19yYXRlczsKKwl1OCAqcF9tY3NyYXRlID0gbWFjLT5tY3M7CisJdTggcmF0cl9pbmRleDsKKwl1OCBiX2N1cnR4YndfNDBtaHogPSBtYWMtPmJ3XzQwOworCXU4IGJfY3Vyc2hvcnRnaV80MG1oeiA9IG1hYy0+c2dpXzQwOworCXU4IGJfY3Vyc2hvcnRnaV8yMG1oeiA9IG1hYy0+c2dpXzIwOworCWVudW0gd2lyZWxlc3NfbW9kZSB3aXJlbGVzc21vZGUgPSBtYWMtPm1vZGU7CisJYm9vbCBiX3Nob3J0Z2kgPSBmYWxzZTsKKwl1OCByYXRlX21hc2tbNV07CisJdTggbWFjaWQgPSAwOworCXU4IG1pbW9wcyA9IDE7CisKKwlyYXRyX2JpdG1hcCB8PSAocF9tY3NyYXRlWzFdIDw8IDIwKSB8IChwX21jc3JhdGVbMF0gPDwgMTIpOworCXN3aXRjaCAod2lyZWxlc3Ntb2RlKSB7CisJY2FzZSBXSVJFTEVTU19NT0RFX0I6CisJCXJhdHJfaW5kZXggPSBSQVRSX0lOWF9XSVJFTEVTU19COworCQlpZiAocmF0cl9iaXRtYXAgJiAweDAwMDAwMDBjKQorCQkJcmF0cl9iaXRtYXAgJj0gMHgwMDAwMDAwZDsKKwkJZWxzZQorCQkJcmF0cl9iaXRtYXAgJj0gMHgwMDAwMDAwZjsKKwkJYnJlYWs7CisJY2FzZSBXSVJFTEVTU19NT0RFX0c6CisJCXJhdHJfaW5kZXggPSBSQVRSX0lOWF9XSVJFTEVTU19HQjsKKworCQlpZiAocnNzaV9sZXZlbCA9PSAxKQorCQkJcmF0cl9iaXRtYXAgJj0gMHgwMDAwMGYwMDsKKwkJZWxzZSBpZiAocnNzaV9sZXZlbCA9PSAyKQorCQkJcmF0cl9iaXRtYXAgJj0gMHgwMDAwMGZmMDsKKwkJZWxzZQorCQkJcmF0cl9iaXRtYXAgJj0gMHgwMDAwMGZmNTsKKwkJYnJlYWs7CisJY2FzZSBXSVJFTEVTU19NT0RFX0E6CisJCXJhdHJfaW5kZXggPSBSQVRSX0lOWF9XSVJFTEVTU19BOworCQlyYXRyX2JpdG1hcCAmPSAweDAwMDAwZmYwOworCQlicmVhazsKKwljYXNlIFdJUkVMRVNTX01PREVfTl8yNEc6CisJY2FzZSBXSVJFTEVTU19NT0RFX05fNUc6CisJCXJhdHJfaW5kZXggPSBSQVRSX0lOWF9XSVJFTEVTU19OR0I7CisKKwkJaWYgKG1pbW9wcyA9PSAwKSB7CisJCQlpZiAocnNzaV9sZXZlbCA9PSAxKQorCQkJCXJhdHJfYml0bWFwICY9IDB4MDAwNzAwMDA7CisJCQllbHNlIGlmIChyc3NpX2xldmVsID09IDIpCisJCQkJcmF0cl9iaXRtYXAgJj0gMHgwMDA3ZjAwMDsKKwkJCWVsc2UKKwkJCQlyYXRyX2JpdG1hcCAmPSAweDAwMDdmMDA1OworCQl9IGVsc2UgeworCQkJaWYgKHJ0bHBoeS0+cmZfdHlwZSA9PSBSRl8xVDJSIHx8CisJCQkgICAgcnRscGh5LT5yZl90eXBlID09IFJGXzFUMVIpIHsKKwkJCQlpZiAoYl9jdXJ0eGJ3XzQwbWh6KSB7CisJCQkJCWlmIChyc3NpX2xldmVsID09IDEpCisJCQkJCQlyYXRyX2JpdG1hcCAmPSAweDAwMGYwMDAwOworCQkJCQllbHNlIGlmIChyc3NpX2xldmVsID09IDIpCisJCQkJCQlyYXRyX2JpdG1hcCAmPSAweDAwMGZmMDAwOworCQkJCQllbHNlCisJCQkJCQlyYXRyX2JpdG1hcCAmPSAweDAwMGZmMDE1OworCQkJCX0gZWxzZSB7CisJCQkJCWlmIChyc3NpX2xldmVsID09IDEpCisJCQkJCQlyYXRyX2JpdG1hcCAmPSAweDAwMGYwMDAwOworCQkJCQllbHNlIGlmIChyc3NpX2xldmVsID09IDIpCisJCQkJCQlyYXRyX2JpdG1hcCAmPSAweDAwMGZmMDAwOworCQkJCQllbHNlCisJCQkJCQlyYXRyX2JpdG1hcCAmPSAweDAwMGZmMDA1OworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJaWYgKGJfY3VydHhid180MG1oeikgeworCQkJCQlpZiAocnNzaV9sZXZlbCA9PSAxKQorCQkJCQkJcmF0cl9iaXRtYXAgJj0gMHgwZjBmMDAwMDsKKwkJCQkJZWxzZSBpZiAocnNzaV9sZXZlbCA9PSAyKQorCQkJCQkJcmF0cl9iaXRtYXAgJj0gMHgwZjBmZjAwMDsKKwkJCQkJZWxzZQorCQkJCQkJcmF0cl9iaXRtYXAgJj0gMHgwZjBmZjAxNTsKKwkJCQl9IGVsc2UgeworCQkJCQlpZiAocnNzaV9sZXZlbCA9PSAxKQorCQkJCQkJcmF0cl9iaXRtYXAgJj0gMHgwZjBmMDAwMDsKKwkJCQkJZWxzZSBpZiAocnNzaV9sZXZlbCA9PSAyKQorCQkJCQkJcmF0cl9iaXRtYXAgJj0gMHgwZjBmZjAwMDsKKwkJCQkJZWxzZQorCQkJCQkJcmF0cl9iaXRtYXAgJj0gMHgwZjBmZjAwNTsKKwkJCQl9CisJCQl9CisJCX0KKworCQlpZiAoKGJfY3VydHhid180MG1oeiAmJiBiX2N1cnNob3J0Z2lfNDBtaHopIHx8CisJCSAgICAoIWJfY3VydHhid180MG1oeiAmJiBiX2N1cnNob3J0Z2lfMjBtaHopKSB7CisKKwkJCWlmIChtYWNpZCA9PSAwKQorCQkJCWJfc2hvcnRnaSA9IHRydWU7CisJCQllbHNlIGlmIChtYWNpZCA9PSAxKQorCQkJCWJfc2hvcnRnaSA9IGZhbHNlOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJhdHJfaW5kZXggPSBSQVRSX0lOWF9XSVJFTEVTU19OR0I7CisKKwkJaWYgKHJ0bHBoeS0+cmZfdHlwZSA9PSBSRl8xVDJSKQorCQkJcmF0cl9iaXRtYXAgJj0gMHgwMDBmZjBmZjsKKwkJZWxzZQorCQkJcmF0cl9iaXRtYXAgJj0gMHgwZjBmZjBmZjsKKwkJYnJlYWs7CisJfQorCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUkFUUiwgREJHX0RNRVNHLAorCQkgKCJyYXRyX2JpdG1hcCA6JXhcbiIsIHJhdHJfYml0bWFwKSk7CisJKih1MzIgKikmcmF0ZV9tYXNrID0gRUY0QllURSgocmF0cl9iaXRtYXAgJiAweDBmZmZmZmZmKSB8CisJCQkJICAgICAgIChyYXRyX2luZGV4IDw8IDI4KSk7CisJcmF0ZV9tYXNrWzRdID0gbWFjaWQgfCAoYl9zaG9ydGdpID8gMHgyMCA6IDB4MDApIHwgMHg4MDsKKwlSVF9UUkFDRShydGxwcml2LCBDT01QX1JBVFIsIERCR19ETUVTRywgKCJSYXRlX2luZGV4OiV4LCAiCisJCQkJCQkgInJhdHJfdmFsOiV4LCAleDoleDoleDoleDoleFxuIiwKKwkJCQkJCSByYXRyX2luZGV4LCByYXRyX2JpdG1hcCwKKwkJCQkJCSByYXRlX21hc2tbMF0sIHJhdGVfbWFza1sxXSwKKwkJCQkJCSByYXRlX21hc2tbMl0sIHJhdGVfbWFza1szXSwKKwkJCQkJCSByYXRlX21hc2tbNF0pKTsKKwlydGw5MmNfZmlsbF9oMmNfY21kKGh3LCBIMkNfUkFfTUFTSywgNSwgcmF0ZV9tYXNrKTsKK30KKwordm9pZCBydGw5MmNlX3VwZGF0ZV9jaGFubmVsX2FjY2Vzc19zZXR0aW5nKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOworCXUxNiBzaWZzX3RpbWVyOworCisJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9od19yZWcoaHcsIEhXX1ZBUl9TTE9UX1RJTUUsCisJCQkJICAgICAgKHU4ICopJm1hYy0+c2xvdF90aW1lKTsKKwlpZiAoIW1hYy0+aHRfZW5hYmxlKQorCQlzaWZzX3RpbWVyID0gMHgwYTBhOworCWVsc2UKKwkJc2lmc190aW1lciA9IDB4MTAxMDsKKwlydGxwcml2LT5jZmctPm9wcy0+c2V0X2h3X3JlZyhodywgSFdfVkFSX1NJRlMsICh1OCAqKSZzaWZzX3RpbWVyKTsKK30KKworYm9vbCBydGw5MmNlX2dwaW9fcmFkaW9fb25fb2ZmX2NoZWNraW5nKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCAqIHZhbGlkKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BzX2N0bCAqcHBzYyA9IHJ0bF9wc2MocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOworCWVudW0gcmZfcHdyc3RhdGUgZV9yZnBvd2Vyc3RhdGVfdG9zZXQsIGN1cl9yZnN0YXRlOworCXU4IHUxdG1wOworCWJvb2wgYl9hY3R1YWxseXNldCA9IGZhbHNlOworCXVuc2lnbmVkIGxvbmcgZmxhZzsKKworCWlmICgocnRscGNpLT51cF9maXJzdF90aW1lID09IDEpIHx8IChydGxwY2ktPmJlaW5nX2luaXRfYWRhcHRlcikpCisJCXJldHVybiBmYWxzZTsKKworCWlmIChwcHNjLT5iX3N3cmZfcHJvY2Vzc2luZykKKwkJcmV0dXJuIGZhbHNlOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJ0bHByaXYtPmxvY2tzLnJmX3BzX2xvY2ssIGZsYWcpOworCWlmIChwcHNjLT5yZmNoYW5nZV9pbnByb2dyZXNzKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0bHByaXYtPmxvY2tzLnJmX3BzX2xvY2ssIGZsYWcpOworCQlyZXR1cm4gZmFsc2U7CisJfSBlbHNlIHsKKwkJcHBzYy0+cmZjaGFuZ2VfaW5wcm9ncmVzcyA9IHRydWU7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0bHByaXYtPmxvY2tzLnJmX3BzX2xvY2ssIGZsYWcpOworCX0KKworCWN1cl9yZnN0YXRlID0gcHBzYy0+cmZwd3Jfc3RhdGU7CisKKwlpZiAoKHBwc2MtPnJlZ19yZnBzX2xldmVsICYgUlRfUkZfT0ZGX0xFVkxfQVNQTSkgJiYKKwkgICAgUlRfSU5fUFNfTEVWRUwocHBzYywgUlRfUkZfT0ZGX0xFVkxfQVNQTSkpIHsKKwkJcnRscHJpdi0+aW50Zl9vcHMtPmRpc2FibGVfYXNwbShodyk7CisJCVJUX0NMRUFSX1BTX0xFVkVMKHBwc2MsIFJUX1JGX09GRl9MRVZMX0FTUE0pOworCX0KKworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19NQUNfUElOTVVYX0NGRywgcnRsX3JlYWRfYnl0ZShydGxwcml2LAorCQkgICAgICAgUkVHX01BQ19QSU5NVVhfQ0ZHKSZ+KEJJVCgzKSkpOworCisJdTF0bXAgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIFJFR19HUElPX0lPX1NFTCk7CisJZV9yZnBvd2Vyc3RhdGVfdG9zZXQgPSAodTF0bXAgJiBCSVQoMykpID8gRVJGT04gOiBFUkZPRkY7CisKKwlpZiAoKHBwc2MtPmJfaHdyYWRpb29mZiA9PSB0cnVlKSAmJiAoZV9yZnBvd2Vyc3RhdGVfdG9zZXQgPT0gRVJGT04pKSB7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUkYsIERCR19ETUVTRywKKwkJCSAoIkdQSU9DaGFuZ2VSRiAgLSBIVyBSYWRpbyBPTiwgUkYgT05cbiIpKTsKKworCQllX3JmcG93ZXJzdGF0ZV90b3NldCA9IEVSRk9OOworCQlwcHNjLT5iX2h3cmFkaW9vZmYgPSBmYWxzZTsKKwkJYl9hY3R1YWxseXNldCA9IHRydWU7CisJfSBlbHNlIGlmICgocHBzYy0+Yl9od3JhZGlvb2ZmID09IGZhbHNlKQorCQkgICAmJiAoZV9yZnBvd2Vyc3RhdGVfdG9zZXQgPT0gRVJGT0ZGKSkgeworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1JGLCBEQkdfRE1FU0csCisJCQkgKCJHUElPQ2hhbmdlUkYgIC0gSFcgUmFkaW8gT0ZGLCBSRiBPRkZcbiIpKTsKKworCQllX3JmcG93ZXJzdGF0ZV90b3NldCA9IEVSRk9GRjsKKwkJcHBzYy0+Yl9od3JhZGlvb2ZmID0gdHJ1ZTsKKwkJYl9hY3R1YWxseXNldCA9IHRydWU7CisJfQorCisJaWYgKGJfYWN0dWFsbHlzZXQpIHsKKwkJaWYgKGVfcmZwb3dlcnN0YXRlX3Rvc2V0ID09IEVSRk9OKSB7CisJCQlpZiAoKHBwc2MtPnJlZ19yZnBzX2xldmVsICYgUlRfUkZfT0ZGX0xFVkxfQVNQTSkgJiYKKwkJCSAgICBSVF9JTl9QU19MRVZFTChwcHNjLCBSVF9SRl9PRkZfTEVWTF9BU1BNKSkgeworCQkJCXJ0bHByaXYtPmludGZfb3BzLT5kaXNhYmxlX2FzcG0oaHcpOworCQkJCVJUX0NMRUFSX1BTX0xFVkVMKHBwc2MsIFJUX1JGX09GRl9MRVZMX0FTUE0pOworCQkJfQorCQl9CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnJ0bHByaXYtPmxvY2tzLnJmX3BzX2xvY2ssIGZsYWcpOworCQlwcHNjLT5yZmNoYW5nZV9pbnByb2dyZXNzID0gZmFsc2U7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0bHByaXYtPmxvY2tzLnJmX3BzX2xvY2ssIGZsYWcpOworCisJCWlmIChlX3JmcG93ZXJzdGF0ZV90b3NldCA9PSBFUkZPRkYpIHsKKwkJCWlmIChwcHNjLT5yZWdfcmZwc19sZXZlbCAmIFJUX1JGX09GRl9MRVZMX0FTUE0pIHsKKwkJCQlydGxwcml2LT5pbnRmX29wcy0+ZW5hYmxlX2FzcG0oaHcpOworCQkJCVJUX1NFVF9QU19MRVZFTChwcHNjLCBSVF9SRl9PRkZfTEVWTF9BU1BNKTsKKwkJCX0KKwkJfQorCisJfSBlbHNlIGlmIChlX3JmcG93ZXJzdGF0ZV90b3NldCA9PSBFUkZPRkYgfHwgY3VyX3Jmc3RhdGUgPT0gRVJGT0ZGKSB7CisJCWlmIChwcHNjLT5yZWdfcmZwc19sZXZlbCAmIFJUX1JGX09GRl9MRVZMX0hBTFRfTklDKQorCQkJUlRfU0VUX1BTX0xFVkVMKHBwc2MsIFJUX1JGX09GRl9MRVZMX0hBTFRfTklDKTsKKworCQlpZiAocHBzYy0+cmVnX3JmcHNfbGV2ZWwgJiBSVF9SRl9PRkZfTEVWTF9BU1BNKSB7CisJCQlydGxwcml2LT5pbnRmX29wcy0+ZW5hYmxlX2FzcG0oaHcpOworCQkJUlRfU0VUX1BTX0xFVkVMKHBwc2MsIFJUX1JGX09GRl9MRVZMX0FTUE0pOworCQl9CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnJ0bHByaXYtPmxvY2tzLnJmX3BzX2xvY2ssIGZsYWcpOworCQlwcHNjLT5yZmNoYW5nZV9pbnByb2dyZXNzID0gZmFsc2U7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0bHByaXYtPmxvY2tzLnJmX3BzX2xvY2ssIGZsYWcpOworCX0gZWxzZSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZydGxwcml2LT5sb2Nrcy5yZl9wc19sb2NrLCBmbGFnKTsKKwkJcHBzYy0+cmZjaGFuZ2VfaW5wcm9ncmVzcyA9IGZhbHNlOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGxwcml2LT5sb2Nrcy5yZl9wc19sb2NrLCBmbGFnKTsKKwl9CisKKwkqdmFsaWQgPSAxOworCXJldHVybiAhcHBzYy0+Yl9od3JhZGlvb2ZmOworCit9CisKK3ZvaWQgcnRsOTJjZV9zZXRfa2V5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIga2V5X2luZGV4LAorCQkgICAgIHU4ICpwX21hY2FkZHIsIGJvb2wgaXNfZ3JvdXAsIHU4IGVuY19hbGdvLAorCQkgICAgIGJvb2wgaXNfd2Vwa2V5LCBib29sIGNsZWFyX2FsbCkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX2VmdXNlICpydGxlZnVzZSA9IHJ0bF9lZnVzZShydGxfcHJpdihodykpOworCXU4ICptYWNhZGRyID0gcF9tYWNhZGRyOworCXUzMiBlbnRyeV9pZCA9IDA7CisJYm9vbCBpc19wYWlyd2lzZSA9IGZhbHNlOworCisJc3RhdGljIHU4IGNhbV9jb25zdF9hZGRyWzRdWzZdID0geworCQl7MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sCisJCXsweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxfSwKKwkJezB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDJ9LAorCQl7MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwM30KKwl9OworCXN0YXRpYyB1OCBjYW1fY29uc3RfYnJvYWRbXSA9IHsKKwkJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZgorCX07CisKKwlpZiAoY2xlYXJfYWxsKSB7CisJCXU4IGlkeCA9IDA7CisJCXU4IGNhbV9vZmZzZXQgPSAwOworCQl1OCBjbGVhcl9udW1iZXIgPSA1OworCisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfU0VDLCBEQkdfRE1FU0csICgiY2xlYXJfYWxsXG4iKSk7CisKKwkJZm9yIChpZHggPSAwOyBpZHggPCBjbGVhcl9udW1iZXI7IGlkeCsrKSB7CisJCQlydGxfY2FtX21hcmtfaW52YWxpZChodywgY2FtX29mZnNldCArIGlkeCk7CisJCQlydGxfY2FtX2VtcHR5X2VudHJ5KGh3LCBjYW1fb2Zmc2V0ICsgaWR4KTsKKworCQkJaWYgKGlkeCA8IDUpIHsKKwkJCQltZW1zZXQocnRscHJpdi0+c2VjLmtleV9idWZbaWR4XSwgMCwKKwkJCQkgICAgICAgTUFYX0tFWV9MRU4pOworCQkJCXJ0bHByaXYtPnNlYy5rZXlfbGVuW2lkeF0gPSAwOworCQkJfQorCQl9CisKKwl9IGVsc2UgeworCQlzd2l0Y2ggKGVuY19hbGdvKSB7CisJCWNhc2UgV0VQNDBfRU5DUllQVElPTjoKKwkJCWVuY19hbGdvID0gQ0FNX1dFUDQwOworCQkJYnJlYWs7CisJCWNhc2UgV0VQMTA0X0VOQ1JZUFRJT046CisJCQllbmNfYWxnbyA9IENBTV9XRVAxMDQ7CisJCQlicmVhazsKKwkJY2FzZSBUS0lQX0VOQ1JZUFRJT046CisJCQllbmNfYWxnbyA9IENBTV9US0lQOworCQkJYnJlYWs7CisJCWNhc2UgQUVTQ0NNUF9FTkNSWVBUSU9OOgorCQkJZW5jX2FsZ28gPSBDQU1fQUVTOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX0VNRVJHLCAoInN3aXRjaCBjYXNlICIKKwkJCQkJIm5vdCBwcm9jZXNzXG4iKSk7CisJCQllbmNfYWxnbyA9IENBTV9US0lQOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoaXNfd2Vwa2V5IHx8IHJ0bHByaXYtPnNlYy51c2VfZGVmYXVsdGtleSkgeworCQkJbWFjYWRkciA9IGNhbV9jb25zdF9hZGRyW2tleV9pbmRleF07CisJCQllbnRyeV9pZCA9IGtleV9pbmRleDsKKwkJfSBlbHNlIHsKKwkJCWlmIChpc19ncm91cCkgeworCQkJCW1hY2FkZHIgPSBjYW1fY29uc3RfYnJvYWQ7CisJCQkJZW50cnlfaWQgPSBrZXlfaW5kZXg7CisJCQl9IGVsc2UgeworCQkJCWtleV9pbmRleCA9IFBBSVJXSVNFX0tFWUlEWDsKKwkJCQllbnRyeV9pZCA9IENBTV9QQUlSV0lTRV9LRVlfUE9TSVRJT047CisJCQkJaXNfcGFpcndpc2UgPSB0cnVlOworCQkJfQorCQl9CisKKwkJaWYgKHJ0bHByaXYtPnNlYy5rZXlfbGVuW2tleV9pbmRleF0gPT0gMCkgeworCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9TRUMsIERCR19ETUVTRywKKwkJCQkgKCJkZWxldGUgb25lIGVudHJ5XG4iKSk7CisJCQlydGxfY2FtX2RlbGV0ZV9vbmVfZW50cnkoaHcsIHBfbWFjYWRkciwgZW50cnlfaWQpOworCQl9IGVsc2UgeworCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9TRUMsIERCR19MT1VELAorCQkJCSAoIlRoZSBpbnNlcnQgS0VZIGxlbmd0aCBpcyAlZFxuIiwKKwkJCQkgIHJ0bHByaXYtPnNlYy5rZXlfbGVuW1BBSVJXSVNFX0tFWUlEWF0pKTsKKwkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfU0VDLCBEQkdfTE9VRCwKKwkJCQkgKCJUaGUgaW5zZXJ0IEtFWSAgaXMgJXggJXhcbiIsCisJCQkJICBydGxwcml2LT5zZWMua2V5X2J1ZlswXVswXSwKKwkJCQkgIHJ0bHByaXYtPnNlYy5rZXlfYnVmWzBdWzFdKSk7CisKKwkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfU0VDLCBEQkdfRE1FU0csCisJCQkJICgiYWRkIG9uZSBlbnRyeVxuIikpOworCQkJaWYgKGlzX3BhaXJ3aXNlKSB7CisJCQkJUlRfUFJJTlRfREFUQShydGxwcml2LCBDT01QX1NFQywgREJHX0xPVUQsCisJCQkJCSAgICAgICJQYWlyd2lhc2UgS2V5IGNvbnRlbnQgOiIsCisJCQkJCSAgICAgIHJ0bHByaXYtPnNlYy5wYWlyd2lzZV9rZXksCisJCQkJCSAgICAgIHJ0bHByaXYtPnNlYy4KKwkJCQkJICAgICAga2V5X2xlbltQQUlSV0lTRV9LRVlJRFhdKTsKKworCQkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfU0VDLCBEQkdfRE1FU0csCisJCQkJCSAoInNldCBQYWlyd2lhc2Uga2V5XG4iKSk7CisKKwkJCQlydGxfY2FtX2FkZF9vbmVfZW50cnkoaHcsIG1hY2FkZHIsIGtleV9pbmRleCwKKwkJCQkJCSAgICAgIGVudHJ5X2lkLCBlbmNfYWxnbywKKwkJCQkJCSAgICAgIENBTV9DT05GSUdfTk9fVVNFREssCisJCQkJCQkgICAgICBydGxwcml2LT5zZWMuCisJCQkJCQkgICAgICBrZXlfYnVmW2tleV9pbmRleF0pOworCQkJfSBlbHNlIHsKKwkJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1NFQywgREJHX0RNRVNHLAorCQkJCQkgKCJzZXQgZ3JvdXAga2V5XG4iKSk7CisKKwkJCQlpZiAobWFjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHsKKwkJCQkJcnRsX2NhbV9hZGRfb25lX2VudHJ5KGh3LAorCQkJCQkJcnRsZWZ1c2UtPmRldl9hZGRyLAorCQkJCQkJUEFJUldJU0VfS0VZSURYLAorCQkJCQkJQ0FNX1BBSVJXSVNFX0tFWV9QT1NJVElPTiwKKwkJCQkJCWVuY19hbGdvLAorCQkJCQkJQ0FNX0NPTkZJR19OT19VU0VESywKKwkJCQkJCXJ0bHByaXYtPnNlYy5rZXlfYnVmCisJCQkJCQlbZW50cnlfaWRdKTsKKwkJCQl9CisKKwkJCQlydGxfY2FtX2FkZF9vbmVfZW50cnkoaHcsIG1hY2FkZHIsIGtleV9pbmRleCwKKwkJCQkJCWVudHJ5X2lkLCBlbmNfYWxnbywKKwkJCQkJCUNBTV9DT05GSUdfTk9fVVNFREssCisJCQkJCQlydGxwcml2LT5zZWMua2V5X2J1ZltlbnRyeV9pZF0pOworCQkJfQorCisJCX0KKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS9ody5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2UvaHcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDVjODE5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2UvaHcuaApAQCAtMCwwICsxLDU3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDktMjAxMCAgUmVhbHRlayBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLCBVU0EKKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIHdsYW5mYWUgPHdsYW5mYWVAcmVhbHRlay5jb20+CisgKiBSZWFsdGVrIENvcnBvcmF0aW9uLCBOby4gMiwgSW5ub3ZhdGlvbiBSb2FkIElJLCBIc2luY2h1IFNjaWVuY2UgUGFyaywKKyAqIEhzaW5jaHUgMzAwLCBUYWl3YW4uCisgKgorICogTGFycnkgRmluZ2VyIDxMYXJyeS5GaW5nZXJAbHdmaW5nZXIubmV0PgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX1JUTDkyQ0VfSFdfSF9fCisjZGVmaW5lIF9fUlRMOTJDRV9IV19IX18KKwordm9pZCBydGw5MmNlX2dldF9od19yZWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IHZhcmlhYmxlLCB1OCAqdmFsKTsKK3ZvaWQgcnRsOTJjZV9yZWFkX2VlcHJvbV9pbmZvKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3ZvaWQgcnRsOTJjZV9pbnRlcnJ1cHRfcmVjb2duaXplZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgIHUzMiAqcF9pbnRhLCB1MzIgKnBfaW50Yik7CitpbnQgcnRsOTJjZV9od19pbml0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3ZvaWQgcnRsOTJjZV9jYXJkX2Rpc2FibGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwordm9pZCBydGw5MmNlX2VuYWJsZV9pbnRlcnJ1cHQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwordm9pZCBydGw5MmNlX2Rpc2FibGVfaW50ZXJydXB0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK2ludCBydGw5MmNlX3NldF9uZXR3b3JrX3R5cGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGVudW0gbmw4MDIxMV9pZnR5cGUgdHlwZSk7Cit2b2lkIHJ0bDkyY2Vfc2V0X3FvcyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgaW50IGFjaSk7Cit2b2lkIHJ0bDkyY2Vfc2V0X2JlYWNvbl9yZWxhdGVkX3JlZ2lzdGVycyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Cit2b2lkIHJ0bDkyY2Vfc2V0X2JlYWNvbl9pbnRlcnZhbChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Cit2b2lkIHJ0bDkyY2VfdXBkYXRlX2ludGVycnVwdF9tYXNrKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgIHUzMiBhZGRfbXNyLCB1MzIgcm1fbXNyKTsKK3ZvaWQgcnRsOTJjZV9zZXRfaHdfcmVnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCB2YXJpYWJsZSwgdTggKnZhbCk7Cit2b2lkIHJ0bDkyY2VfdXBkYXRlX2hhbF9yYXRlX3RhYmxlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3ZvaWQgcnRsOTJjZV91cGRhdGVfaGFsX3JhdGVfbWFzayhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggcnNzaV9sZXZlbCk7Cit2b2lkIHJ0bDkyY2VfdXBkYXRlX2NoYW5uZWxfYWNjZXNzX3NldHRpbmcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworYm9vbCBydGw5MmNlX2dwaW9fcmFkaW9fb25fb2ZmX2NoZWNraW5nKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCAqdmFsaWQpOwordm9pZCBydGw5MmNlX2VuYWJsZV9od19zZWN1cml0eV9jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwordm9pZCBydGw5MmNlX3NldF9rZXkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiBrZXlfaW5kZXgsCisJCSAgICAgdTggKnBfbWFjYWRkciwgYm9vbCBpc19ncm91cCwgdTggZW5jX2FsZ28sCisJCSAgICAgYm9vbCBpc193ZXBrZXksIGJvb2wgY2xlYXJfYWxsKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS9sZWQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmNlL2xlZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4YTA1NjkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS9sZWQuYwpAQCAtMCwwICsxLDE0NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodChjKSAyMDA5LTIwMTAgIFJlYWx0ZWsgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwgVVNBCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiB3bGFuZmFlIDx3bGFuZmFlQHJlYWx0ZWsuY29tPgorICogUmVhbHRlayBDb3Jwb3JhdGlvbiwgTm8uIDIsIElubm92YXRpb24gUm9hZCBJSSwgSHNpbmNodSBTY2llbmNlIFBhcmssCisgKiBIc2luY2h1IDMwMCwgVGFpd2FuLgorICoKKyAqIExhcnJ5IEZpbmdlciA8TGFycnkuRmluZ2VyQGx3ZmluZ2VyLm5ldD4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICIuLi93aWZpLmgiCisjaW5jbHVkZSAiLi4vcGNpLmgiCisjaW5jbHVkZSAicmVnLmgiCisjaW5jbHVkZSAibGVkLmgiCisKK3ZvaWQgcnRsOTJjZV9zd19sZWRfb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBydGxfbGVkICpwbGVkKQoreworCXU4IGxlZGNmZzsKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisKKwlSVF9UUkFDRShydGxwcml2LCBDT01QX0xFRCwgREJHX0xPVUQsCisJCSAoIkxlZEFkZHI6JVggbGVkcGluPSVkXG4iLCBSRUdfTEVEQ0ZHMiwgcGxlZC0+bGVkcGluKSk7CisKKwlsZWRjZmcgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIFJFR19MRURDRkcyKTsKKworCXN3aXRjaCAocGxlZC0+bGVkcGluKSB7CisJY2FzZSBMRURfUElOX0dQSU8wOgorCQlicmVhazsKKwljYXNlIExFRF9QSU5fTEVEMDoKKwkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwKKwkJCSAgICAgICBSRUdfTEVEQ0ZHMiwgKGxlZGNmZyAmIDB4ZjApIHwgQklUKDUpIHwgQklUKDYpKTsKKwkJYnJlYWs7CisJY2FzZSBMRURfUElOX0xFRDE6CisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19MRURDRkcyLCAobGVkY2ZnICYgMHgwZikgfCBCSVQoNSkpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX0VNRVJHLAorCQkJICgic3dpdGNoIGNhc2Ugbm90IHByb2Nlc3NcbiIpKTsKKwkJYnJlYWs7CisJfQorCXBsZWQtPmJfbGVkb24gPSB0cnVlOworfQorCit2b2lkIHJ0bDkyY2Vfc3dfbGVkX29mZihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHJ0bF9sZWQgKnBsZWQpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGNpX3ByaXYgKnBjaXByaXYgPSBydGxfcGNpcHJpdihodyk7CisJdTggbGVkY2ZnOworCisJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9MRUQsIERCR19MT1VELAorCQkgKCJMZWRBZGRyOiVYIGxlZHBpbj0lZFxuIiwgUkVHX0xFRENGRzIsIHBsZWQtPmxlZHBpbikpOworCisJbGVkY2ZnID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBSRUdfTEVEQ0ZHMik7CisKKwlzd2l0Y2ggKHBsZWQtPmxlZHBpbikgeworCWNhc2UgTEVEX1BJTl9HUElPMDoKKwkJYnJlYWs7CisJY2FzZSBMRURfUElOX0xFRDA6CisJCWxlZGNmZyAmPSAweGYwOworCQlpZiAocGNpcHJpdi0+bGVkY3RsLmJsZWRfb3BlbmRyYWluID09IHRydWUpCisJCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfTEVEQ0ZHMiwKKwkJCQkgICAgICAgKGxlZGNmZyB8IEJJVCgxKSB8IEJJVCg1KSB8IEJJVCg2KSkpOworCQllbHNlCisJCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfTEVEQ0ZHMiwKKwkJCQkgICAgICAgKGxlZGNmZyB8IEJJVCgzKSB8IEJJVCg1KSB8IEJJVCg2KSkpOworCQlicmVhazsKKwljYXNlIExFRF9QSU5fTEVEMToKKwkJbGVkY2ZnICY9IDB4MGY7CisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19MRURDRkcyLCAobGVkY2ZnIHwgQklUKDMpKSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfRU1FUkcsCisJCQkgKCJzd2l0Y2ggY2FzZSBub3QgcHJvY2Vzc1xuIikpOworCQlicmVhazsKKwl9CisJcGxlZC0+Yl9sZWRvbiA9IGZhbHNlOworfQorCit2b2lkIHJ0bDkyY2VfaW5pdF9zd19sZWRzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworfQorCit2b2lkIHJ0bDkyY2VfZGVpbml0X3N3X2xlZHMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7Cit9CisKK3ZvaWQgX3J0bDkyY2Vfc3dfbGVkX2NvbnRyb2woc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgIGVudW0gbGVkX2N0bF9tb2RlIGxlZGFjdGlvbikKK3sKKwlzdHJ1Y3QgcnRsX3BjaV9wcml2ICpwY2lwcml2ID0gcnRsX3BjaXByaXYoaHcpOworCXN0cnVjdCBydGxfbGVkICpwTGVkMCA9ICYocGNpcHJpdi0+bGVkY3RsLnN3X2xlZDApOworCXN3aXRjaCAobGVkYWN0aW9uKSB7CisJY2FzZSBMRURfQ1RMX1BPV0VSX09OOgorCWNhc2UgTEVEX0NUTF9MSU5LOgorCWNhc2UgTEVEX0NUTF9OT19MSU5LOgorCQlydGw5MmNlX3N3X2xlZF9vbihodywgcExlZDApOworCQlicmVhazsKKwljYXNlIExFRF9DVExfUE9XRVJfT0ZGOgorCQlydGw5MmNlX3N3X2xlZF9vZmYoaHcsIHBMZWQwKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCit2b2lkIHJ0bDkyY2VfbGVkX2NvbnRyb2woc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQllbnVtIGxlZF9jdGxfbW9kZSBsZWRhY3Rpb24pCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcHNfY3RsICpwcHNjID0gcnRsX3BzYyhydGxfcHJpdihodykpOworCisJaWYgKChwcHNjLT5yZm9mZl9yZWFzb24gPiBSRl9DSEFOR0VfQllfUFMpICYmCisJICAgIChsZWRhY3Rpb24gPT0gTEVEX0NUTF9UWCB8fAorCSAgICAgbGVkYWN0aW9uID09IExFRF9DVExfUlggfHwKKwkgICAgIGxlZGFjdGlvbiA9PSBMRURfQ1RMX1NJVEVfU1VSVkVZIHx8CisJICAgICBsZWRhY3Rpb24gPT0gTEVEX0NUTF9MSU5LIHx8CisJICAgICBsZWRhY3Rpb24gPT0gTEVEX0NUTF9OT19MSU5LIHx8CisJICAgICBsZWRhY3Rpb24gPT0gTEVEX0NUTF9TVEFSVF9UT19MSU5LIHx8CisJICAgICBsZWRhY3Rpb24gPT0gTEVEX0NUTF9QT1dFUl9PTikpIHsKKwkJcmV0dXJuOworCX0KKwlSVF9UUkFDRShydGxwcml2LCBDT01QX0xFRCwgREJHX0xPVUQsICgibGVkYWN0aW9uICVkLFxuIiwKKwkJCQlsZWRhY3Rpb24pKTsKKwlfcnRsOTJjZV9zd19sZWRfY29udHJvbChodywgbGVkYWN0aW9uKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmNlL2xlZC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2UvbGVkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBkYTMwMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmNlL2xlZC5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQoYykgMjAwOS0yMDEwICBSZWFsdGVrIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAsIFVTQQorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgTElDRU5TRS4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogd2xhbmZhZSA8d2xhbmZhZUByZWFsdGVrLmNvbT4KKyAqIFJlYWx0ZWsgQ29ycG9yYXRpb24sIE5vLiAyLCBJbm5vdmF0aW9uIFJvYWQgSUksIEhzaW5jaHUgU2NpZW5jZSBQYXJrLAorICogSHNpbmNodSAzMDAsIFRhaXdhbi4KKyAqCisgKiBMYXJyeSBGaW5nZXIgPExhcnJ5LkZpbmdlckBsd2Zpbmdlci5uZXQ+CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fUlRMOTJDRV9MRURfSF9fCisjZGVmaW5lIF9fUlRMOTJDRV9MRURfSF9fCisKK3ZvaWQgcnRsOTJjZV9pbml0X3N3X2xlZHMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwordm9pZCBydGw5MmNlX2RlaW5pdF9zd19sZWRzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3ZvaWQgcnRsOTJjZV9zd19sZWRfb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBydGxfbGVkICpwbGVkKTsKK3ZvaWQgcnRsOTJjZV9zd19sZWRfb2ZmKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgcnRsX2xlZCAqcGxlZCk7Cit2b2lkIHJ0bDkyY2VfbGVkX2NvbnRyb2woc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGVudW0gbGVkX2N0bF9tb2RlIGxlZGFjdGlvbik7Cit2b2lkIF9ydGw5MmNlX3N3X2xlZF9jb250cm9sKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICBlbnVtIGxlZF9jdGxfbW9kZSBsZWRhY3Rpb24pOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmNlL3BoeS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2UvcGh5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDUwNDQxMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmNlL3BoeS5jCkBAIC0wLDAgKzEsMjY3NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodChjKSAyMDA5LTIwMTAgIFJlYWx0ZWsgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwgVVNBCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiB3bGFuZmFlIDx3bGFuZmFlQHJlYWx0ZWsuY29tPgorICogUmVhbHRlayBDb3Jwb3JhdGlvbiwgTm8uIDIsIElubm92YXRpb24gUm9hZCBJSSwgSHNpbmNodSBTY2llbmNlIFBhcmssCisgKiBIc2luY2h1IDMwMCwgVGFpd2FuLgorICoKKyAqIExhcnJ5IEZpbmdlciA8TGFycnkuRmluZ2VyQGx3ZmluZ2VyLm5ldD4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICIuLi93aWZpLmgiCisjaW5jbHVkZSAiLi4vcGNpLmgiCisjaW5jbHVkZSAiLi4vcHMuaCIKKyNpbmNsdWRlICJyZWcuaCIKKyNpbmNsdWRlICJkZWYuaCIKKyNpbmNsdWRlICJwaHkuaCIKKyNpbmNsdWRlICJyZi5oIgorI2luY2x1ZGUgImRtLmgiCisjaW5jbHVkZSAidGFibGUuaCIKKworc3RhdGljIHUzMiBfcnRsOTJjX3BoeV9md19yZl9zZXJpYWxfcmVhZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkJIGVudW0gcmFkaW9fcGF0aCByZnBhdGgsIHUzMiBvZmZzZXQpOworc3RhdGljIHZvaWQgX3J0bDkyY19waHlfZndfcmZfc2VyaWFsX3dyaXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQkgICBlbnVtIHJhZGlvX3BhdGggcmZwYXRoLCB1MzIgb2Zmc2V0LAorCQkJCQkgICB1MzIgZGF0YSk7CitzdGF0aWMgdTMyIF9ydGw5MmNfcGh5X3JmX3NlcmlhbF9yZWFkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICAgIGVudW0gcmFkaW9fcGF0aCByZnBhdGgsIHUzMiBvZmZzZXQpOworc3RhdGljIHZvaWQgX3J0bDkyY19waHlfcmZfc2VyaWFsX3dyaXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQllbnVtIHJhZGlvX3BhdGggcmZwYXRoLCB1MzIgb2Zmc2V0LAorCQkJCQl1MzIgZGF0YSk7CitzdGF0aWMgdTMyIF9ydGw5MmNfcGh5X2NhbGN1bGF0ZV9iaXRfc2hpZnQodTMyIGJpdG1hc2spOworc3RhdGljIGJvb2wgX3J0bDkyY19waHlfYmI4MTkyY19jb25maWdfcGFyYWZpbGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworc3RhdGljIGJvb2wgX3J0bDkyY19waHlfY29uZmlnX21hY193aXRoX2hlYWRlcmZpbGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworc3RhdGljIGJvb2wgX3J0bDkyY19waHlfY29uZmlnX2JiX3dpdGhfaGVhZGVyZmlsZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkJCSAgdTggY29uZmlndHlwZSk7CitzdGF0aWMgYm9vbCBfcnRsOTJjX3BoeV9jb25maWdfYmJfd2l0aF9wZ2hlYWRlcmZpbGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJCQkgICAgdTggY29uZmlndHlwZSk7CitzdGF0aWMgdm9pZCBfcnRsOTJjX3BoeV9pbml0X2JiX3JmX3JlZ2lzdGVyX2RlZmluaXRpb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworc3RhdGljIGJvb2wgX3J0bDkyY19waHlfc2V0X3N3X2NobmxfY21kYXJyYXkoc3RydWN0IHN3Y2hubGNtZCAqY21kdGFibGUsCisJCQkJCSAgICAgdTMyIGNtZHRhYmxlaWR4LCB1MzIgY21kdGFibGVzeiwKKwkJCQkJICAgICBlbnVtIHN3Y2hubGNtZF9pZCBjbWRpZCwgdTMyIHBhcmExLAorCQkJCQkgICAgIHUzMiBwYXJhMiwgdTMyIG1zZGVsYXkpOworc3RhdGljIGJvb2wgX3J0bDkyY19waHlfc3dfY2hubF9zdGVwX2J5X3N0ZXAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJCSAgICAgdTggY2hhbm5lbCwgdTggKnN0YWdlLCB1OCAqc3RlcCwKKwkJCQkJICAgICB1MzIgKmRlbGF5KTsKK3N0YXRpYyB1OCBfcnRsOTJjX3BoeV9kYm1fdG9fdHhwd3JfSWR4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICAgICBlbnVtIHdpcmVsZXNzX21vZGUgd2lyZWxlc3Ntb2RlLAorCQkJCSAgICAgICBsb25nIHBvd2VyX2luZGJtKTsKK3N0YXRpYyBib29sIF9ydGw5MmNfcGh5X2NvbmZpZ19yZl9leHRlcm5hbF9wYShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkJICAgICAgZW51bSByYWRpb19wYXRoIHJmcGF0aCk7CitzdGF0aWMgbG9uZyBfcnRsOTJjX3BoeV90eHB3cl9pZHhfdG9fZGJtKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQkgZW51bSB3aXJlbGVzc19tb2RlIHdpcmVsZXNzbW9kZSwKKwkJCQkJIHU4IHR4cHdyaWR4KTsKK3UzMiBydGw5MmNfcGh5X3F1ZXJ5X2JiX3JlZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIHJlZ2FkZHIsIHUzMiBiaXRtYXNrKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwl1MzIgcmV0dXJudmFsdWUsIG9yaWdpbmFsdmFsdWUsIGJpdHNoaWZ0OworCisJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9SRiwgREJHX1RSQUNFLCAoInJlZ2FkZHIoJSN4KSwgIgorCQkJCQkgICAgICAgImJpdG1hc2soJSN4KVxuIiwgcmVnYWRkciwKKwkJCQkJICAgICAgIGJpdG1hc2spKTsKKwlvcmlnaW5hbHZhbHVlID0gcnRsX3JlYWRfZHdvcmQocnRscHJpdiwgcmVnYWRkcik7CisJYml0c2hpZnQgPSBfcnRsOTJjX3BoeV9jYWxjdWxhdGVfYml0X3NoaWZ0KGJpdG1hc2spOworCXJldHVybnZhbHVlID0gKG9yaWdpbmFsdmFsdWUgJiBiaXRtYXNrKSA+PiBiaXRzaGlmdDsKKworCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUkYsIERCR19UUkFDRSwgKCJCQlIgTUFTSz0weCV4ICIKKwkJCQkJICAgICAgICJBZGRyWzB4JXhdPTB4JXhcbiIsIGJpdG1hc2ssCisJCQkJCSAgICAgICByZWdhZGRyLCBvcmlnaW5hbHZhbHVlKSk7CisKKwlyZXR1cm4gcmV0dXJudmFsdWU7CisKK30KKwordm9pZCBydGw5MmNfcGh5X3NldF9iYl9yZWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgICB1MzIgcmVnYWRkciwgdTMyIGJpdG1hc2ssIHUzMiBkYXRhKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwl1MzIgb3JpZ2luYWx2YWx1ZSwgYml0c2hpZnQ7CisKKwlSVF9UUkFDRShydGxwcml2LCBDT01QX1JGLCBEQkdfVFJBQ0UsICgicmVnYWRkciglI3gpLCBiaXRtYXNrKCUjeCksIgorCQkJCQkgICAgICAgIiBkYXRhKCUjeClcbiIsIHJlZ2FkZHIsIGJpdG1hc2ssCisJCQkJCSAgICAgICBkYXRhKSk7CisKKwlpZiAoYml0bWFzayAhPSBNQVNLRFdPUkQpIHsKKwkJb3JpZ2luYWx2YWx1ZSA9IHJ0bF9yZWFkX2R3b3JkKHJ0bHByaXYsIHJlZ2FkZHIpOworCQliaXRzaGlmdCA9IF9ydGw5MmNfcGh5X2NhbGN1bGF0ZV9iaXRfc2hpZnQoYml0bWFzayk7CisJCWRhdGEgPSAoKG9yaWdpbmFsdmFsdWUgJiAofmJpdG1hc2spKSB8IChkYXRhIDw8IGJpdHNoaWZ0KSk7CisJfQorCisJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIHJlZ2FkZHIsIGRhdGEpOworCisJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9SRiwgREJHX1RSQUNFLCAoInJlZ2FkZHIoJSN4KSwgYml0bWFzayglI3gpLCIKKwkJCQkJICAgICAgICIgZGF0YSglI3gpXG4iLCByZWdhZGRyLCBiaXRtYXNrLAorCQkJCQkgICAgICAgZGF0YSkpOworCit9CisKK3UzMiBydGw5MmNfcGh5X3F1ZXJ5X3JmX3JlZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSAgICBlbnVtIHJhZGlvX3BhdGggcmZwYXRoLCB1MzIgcmVnYWRkciwgdTMyIGJpdG1hc2spCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXUzMiBvcmlnaW5hbF92YWx1ZSwgcmVhZGJhY2tfdmFsdWUsIGJpdHNoaWZ0OworCXN0cnVjdCBydGxfcGh5ICpydGxwaHkgPSAmKHJ0bHByaXYtPnBoeSk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUkYsIERCR19UUkFDRSwgKCJyZWdhZGRyKCUjeCksICIKKwkJCQkJICAgICAgICJyZnBhdGgoJSN4KSwgYml0bWFzayglI3gpXG4iLAorCQkJCQkgICAgICAgcmVnYWRkciwgcmZwYXRoLCBiaXRtYXNrKSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcnRscHJpdi0+bG9ja3MucmZfbG9jaywgZmxhZ3MpOworCisJaWYgKHJ0bHBoeS0+cmZfbW9kZSAhPSBSRl9PUF9CWV9GVykgeworCQlvcmlnaW5hbF92YWx1ZSA9IF9ydGw5MmNfcGh5X3JmX3NlcmlhbF9yZWFkKGh3LAorCQkJCQkJCSAgICByZnBhdGgsIHJlZ2FkZHIpOworCX0gZWxzZSB7CisJCW9yaWdpbmFsX3ZhbHVlID0gX3J0bDkyY19waHlfZndfcmZfc2VyaWFsX3JlYWQoaHcsCisJCQkJCQkJICAgICAgIHJmcGF0aCwgcmVnYWRkcik7CisJfQorCisJYml0c2hpZnQgPSBfcnRsOTJjX3BoeV9jYWxjdWxhdGVfYml0X3NoaWZ0KGJpdG1hc2spOworCXJlYWRiYWNrX3ZhbHVlID0gKG9yaWdpbmFsX3ZhbHVlICYgYml0bWFzaykgPj4gYml0c2hpZnQ7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGxwcml2LT5sb2Nrcy5yZl9sb2NrLCBmbGFncyk7CisKKwlSVF9UUkFDRShydGxwcml2LCBDT01QX1JGLCBEQkdfVFJBQ0UsCisJCSAoInJlZ2FkZHIoJSN4KSwgcmZwYXRoKCUjeCksICIKKwkJICAiYml0bWFzayglI3gpLCBvcmlnaW5hbF92YWx1ZSglI3gpXG4iLAorCQkgIHJlZ2FkZHIsIHJmcGF0aCwgYml0bWFzaywgb3JpZ2luYWxfdmFsdWUpKTsKKworCXJldHVybiByZWFkYmFja192YWx1ZTsKK30KKwordm9pZCBydGw5MmNfcGh5X3NldF9yZl9yZWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgICBlbnVtIHJhZGlvX3BhdGggcmZwYXRoLAorCQkJICAgdTMyIHJlZ2FkZHIsIHUzMiBiaXRtYXNrLCB1MzIgZGF0YSkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKKwl1MzIgb3JpZ2luYWxfdmFsdWUsIGJpdHNoaWZ0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlSVF9UUkFDRShydGxwcml2LCBDT01QX1JGLCBEQkdfVFJBQ0UsCisJCSAoInJlZ2FkZHIoJSN4KSwgYml0bWFzayglI3gpLCBkYXRhKCUjeCksIHJmcGF0aCglI3gpXG4iLAorCQkgIHJlZ2FkZHIsIGJpdG1hc2ssIGRhdGEsIHJmcGF0aCkpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJ0bHByaXYtPmxvY2tzLnJmX2xvY2ssIGZsYWdzKTsKKworCWlmIChydGxwaHktPnJmX21vZGUgIT0gUkZfT1BfQllfRlcpIHsKKwkJaWYgKGJpdG1hc2sgIT0gUkZSRUdfT0ZGU0VUX01BU0spIHsKKwkJCW9yaWdpbmFsX3ZhbHVlID0gX3J0bDkyY19waHlfcmZfc2VyaWFsX3JlYWQoaHcsCisJCQkJCQkJCSAgICByZnBhdGgsCisJCQkJCQkJCSAgICByZWdhZGRyKTsKKwkJCWJpdHNoaWZ0ID0gX3J0bDkyY19waHlfY2FsY3VsYXRlX2JpdF9zaGlmdChiaXRtYXNrKTsKKwkJCWRhdGEgPQorCQkJICAgICgob3JpZ2luYWxfdmFsdWUgJiAofmJpdG1hc2spKSB8CisJCQkgICAgIChkYXRhIDw8IGJpdHNoaWZ0KSk7CisJCX0KKworCQlfcnRsOTJjX3BoeV9yZl9zZXJpYWxfd3JpdGUoaHcsIHJmcGF0aCwgcmVnYWRkciwgZGF0YSk7CisJfSBlbHNlIHsKKwkJaWYgKGJpdG1hc2sgIT0gUkZSRUdfT0ZGU0VUX01BU0spIHsKKwkJCW9yaWdpbmFsX3ZhbHVlID0gX3J0bDkyY19waHlfZndfcmZfc2VyaWFsX3JlYWQoaHcsCisJCQkJCQkJCSAgICAgICByZnBhdGgsCisJCQkJCQkJCSAgICAgICByZWdhZGRyKTsKKwkJCWJpdHNoaWZ0ID0gX3J0bDkyY19waHlfY2FsY3VsYXRlX2JpdF9zaGlmdChiaXRtYXNrKTsKKwkJCWRhdGEgPQorCQkJICAgICgob3JpZ2luYWxfdmFsdWUgJiAofmJpdG1hc2spKSB8CisJCQkgICAgIChkYXRhIDw8IGJpdHNoaWZ0KSk7CisJCX0KKwkJX3J0bDkyY19waHlfZndfcmZfc2VyaWFsX3dyaXRlKGh3LCByZnBhdGgsIHJlZ2FkZHIsIGRhdGEpOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0bHByaXYtPmxvY2tzLnJmX2xvY2ssIGZsYWdzKTsKKworCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUkYsIERCR19UUkFDRSwgKCJyZWdhZGRyKCUjeCksICIKKwkJCQkJICAgICAgICJiaXRtYXNrKCUjeCksIGRhdGEoJSN4KSwgIgorCQkJCQkgICAgICAgInJmcGF0aCglI3gpXG4iLCByZWdhZGRyLAorCQkJCQkgICAgICAgYml0bWFzaywgZGF0YSwgcmZwYXRoKSk7Cit9CisKK3N0YXRpYyB1MzIgX3J0bDkyY19waHlfZndfcmZfc2VyaWFsX3JlYWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJCSBlbnVtIHJhZGlvX3BhdGggcmZwYXRoLCB1MzIgb2Zmc2V0KQoreworCVJUX0FTU0VSVChmYWxzZSwgKCJkZXByZWNhdGVkIVxuIikpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfcnRsOTJjX3BoeV9md19yZl9zZXJpYWxfd3JpdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJCSAgIGVudW0gcmFkaW9fcGF0aCByZnBhdGgsIHUzMiBvZmZzZXQsCisJCQkJCSAgIHUzMiBkYXRhKQoreworCVJUX0FTU0VSVChmYWxzZSwgKCJkZXByZWNhdGVkIVxuIikpOworfQorCitzdGF0aWMgdTMyIF9ydGw5MmNfcGh5X3JmX3NlcmlhbF9yZWFkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICAgIGVudW0gcmFkaW9fcGF0aCByZnBhdGgsIHUzMiBvZmZzZXQpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGh5ICpydGxwaHkgPSAmKHJ0bHByaXYtPnBoeSk7CisJc3RydWN0IGJiX3JlZ19kZWYgKnBwaHlyZWcgPSAmcnRscGh5LT5waHlyZWdfZGVmW3JmcGF0aF07CisJdTMyIG5ld29mZnNldDsKKwl1MzIgdG1wbG9uZywgdG1wbG9uZzI7CisJdTggcmZwaV9lbmFibGUgPSAwOworCXUzMiByZXR2YWx1ZTsKKworCW9mZnNldCAmPSAweDNmOworCW5ld29mZnNldCA9IG9mZnNldDsKKwlpZiAoUlRfQ0FOTk9UX0lPKGh3KSkgeworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX0VNRVJHLCAoInJldHVybiBhbGwgb25lXG4iKSk7CisJCXJldHVybiAweEZGRkZGRkZGOworCX0KKwl0bXBsb25nID0gcnRsX2dldF9iYnJlZyhodywgUkZQR0EwX1hBX0hTU0lQQVJBTUVURVIyLCBNQVNLRFdPUkQpOworCWlmIChyZnBhdGggPT0gUkY5MF9QQVRIX0EpCisJCXRtcGxvbmcyID0gdG1wbG9uZzsKKwllbHNlCisJCXRtcGxvbmcyID0gcnRsX2dldF9iYnJlZyhodywgcHBoeXJlZy0+cmZoc3NpX3BhcmEyLCBNQVNLRFdPUkQpOworCXRtcGxvbmcyID0gKHRtcGxvbmcyICYgKH5CTFNTSVJFQURBRERSRVNTKSkgfAorCSAgICAobmV3b2Zmc2V0IDw8IDIzKSB8IEJMU1NJUkVBREVER0U7CisJcnRsX3NldF9iYnJlZyhodywgUkZQR0EwX1hBX0hTU0lQQVJBTUVURVIyLCBNQVNLRFdPUkQsCisJCSAgICAgIHRtcGxvbmcgJiAofkJMU1NJUkVBREVER0UpKTsKKwltZGVsYXkoMSk7CisJcnRsX3NldF9iYnJlZyhodywgcHBoeXJlZy0+cmZoc3NpX3BhcmEyLCBNQVNLRFdPUkQsIHRtcGxvbmcyKTsKKwltZGVsYXkoMSk7CisJcnRsX3NldF9iYnJlZyhodywgUkZQR0EwX1hBX0hTU0lQQVJBTUVURVIyLCBNQVNLRFdPUkQsCisJCSAgICAgIHRtcGxvbmcgfCBCTFNTSVJFQURFREdFKTsKKwltZGVsYXkoMSk7CisJaWYgKHJmcGF0aCA9PSBSRjkwX1BBVEhfQSkKKwkJcmZwaV9lbmFibGUgPSAodTgpIHJ0bF9nZXRfYmJyZWcoaHcsIFJGUEdBMF9YQV9IU1NJUEFSQU1FVEVSMSwKKwkJCQkJCSBCSVQoOCkpOworCWVsc2UgaWYgKHJmcGF0aCA9PSBSRjkwX1BBVEhfQikKKwkJcmZwaV9lbmFibGUgPSAodTgpIHJ0bF9nZXRfYmJyZWcoaHcsIFJGUEdBMF9YQl9IU1NJUEFSQU1FVEVSMSwKKwkJCQkJCSBCSVQoOCkpOworCWlmIChyZnBpX2VuYWJsZSkKKwkJcmV0dmFsdWUgPSBydGxfZ2V0X2JicmVnKGh3LCBwcGh5cmVnLT5yZmxzc2lfcmVhZGJhY2twaSwKKwkJCQkJIEJMU1NJUkVBREJBQ0tEQVRBKTsKKwllbHNlCisJCXJldHZhbHVlID0gcnRsX2dldF9iYnJlZyhodywgcHBoeXJlZy0+cmZsc3NpX3JlYWRiYWNrLAorCQkJCQkgQkxTU0lSRUFEQkFDS0RBVEEpOworCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUkYsIERCR19UUkFDRSwgKCJSRlItJWQgQWRkclsweCV4XT0weCV4XG4iLAorCQkJCQkgICAgICAgcmZwYXRoLCBwcGh5cmVnLT5yZmxzc2lfcmVhZGJhY2ssCisJCQkJCSAgICAgICByZXR2YWx1ZSkpOworCXJldHVybiByZXR2YWx1ZTsKK30KKworc3RhdGljIHZvaWQgX3J0bDkyY19waHlfcmZfc2VyaWFsX3dyaXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQllbnVtIHJhZGlvX3BhdGggcmZwYXRoLCB1MzIgb2Zmc2V0LAorCQkJCQl1MzIgZGF0YSkKK3sKKwl1MzIgZGF0YV9hbmRfYWRkcjsKKwl1MzIgbmV3b2Zmc2V0OworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BoeSAqcnRscGh5ID0gJihydGxwcml2LT5waHkpOworCXN0cnVjdCBiYl9yZWdfZGVmICpwcGh5cmVnID0gJnJ0bHBoeS0+cGh5cmVnX2RlZltyZnBhdGhdOworCisJaWYgKFJUX0NBTk5PVF9JTyhodykpIHsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19FTUVSRywgKCJzdG9wXG4iKSk7CisJCXJldHVybjsKKwl9CisJb2Zmc2V0ICY9IDB4M2Y7CisJbmV3b2Zmc2V0ID0gb2Zmc2V0OworCWRhdGFfYW5kX2FkZHIgPSAoKG5ld29mZnNldCA8PCAyMCkgfCAoZGF0YSAmIDB4MDAwZmZmZmYpKSAmIDB4MGZmZmZmZmY7CisJcnRsX3NldF9iYnJlZyhodywgcHBoeXJlZy0+cmYzd2lyZV9vZmZzZXQsIE1BU0tEV09SRCwgZGF0YV9hbmRfYWRkcik7CisJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9SRiwgREJHX1RSQUNFLCAoIlJGVy0lZCBBZGRyWzB4JXhdPTB4JXhcbiIsCisJCQkJCSAgICAgICByZnBhdGgsIHBwaHlyZWctPnJmM3dpcmVfb2Zmc2V0LAorCQkJCQkgICAgICAgZGF0YV9hbmRfYWRkcikpOworfQorCitzdGF0aWMgdTMyIF9ydGw5MmNfcGh5X2NhbGN1bGF0ZV9iaXRfc2hpZnQodTMyIGJpdG1hc2spCit7CisJdTMyIGk7CisKKwlmb3IgKGkgPSAwOyBpIDw9IDMxOyBpKyspIHsKKwkJaWYgKCgoYml0bWFzayA+PiBpKSAmIDB4MSkgPT0gMSkKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gaTsKK30KKworc3RhdGljIHZvaWQgX3J0bDkyY19waHlfYmJfY29uZmlnXzF0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXJ0bF9zZXRfYmJyZWcoaHcsIFJGUEdBMF9UWElORk8sIDB4MywgMHgyKTsKKwlydGxfc2V0X2JicmVnKGh3LCBSRlBHQTFfVFhJTkZPLCAweDMwMDAzMywgMHgyMDAwMjIpOworCXJ0bF9zZXRfYmJyZWcoaHcsIFJDQ0swX0FGRVNFVFRJTkcsIE1BU0tCWVRFMywgMHg0NSk7CisJcnRsX3NldF9iYnJlZyhodywgUk9GRE0wX1RSWFBBVEhFTkFCTEUsIE1BU0tCWVRFMCwgMHgyMyk7CisJcnRsX3NldF9iYnJlZyhodywgUk9GRE0wX0FHQ1BBUkFNRVRFUjEsIDB4MzAsIDB4MSk7CisJcnRsX3NldF9iYnJlZyhodywgMHhlNzQsIDB4MGMwMDAwMDAsIDB4Mik7CisJcnRsX3NldF9iYnJlZyhodywgMHhlNzgsIDB4MGMwMDAwMDAsIDB4Mik7CisJcnRsX3NldF9iYnJlZyhodywgMHhlN2MsIDB4MGMwMDAwMDAsIDB4Mik7CisJcnRsX3NldF9iYnJlZyhodywgMHhlODAsIDB4MGMwMDAwMDAsIDB4Mik7CisJcnRsX3NldF9iYnJlZyhodywgMHhlODgsIDB4MGMwMDAwMDAsIDB4Mik7Cit9CisKK2Jvb2wgcnRsOTJjX3BoeV9tYWNfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX2hhbCAqcnRsaGFsID0gcnRsX2hhbChydGxfcHJpdihodykpOworCWJvb2wgaXM5MmMgPSBJU185MkNfU0VSSUFMKHJ0bGhhbC0+dmVyc2lvbik7CisJYm9vbCBydHN0YXR1cyA9IF9ydGw5MmNfcGh5X2NvbmZpZ19tYWNfd2l0aF9oZWFkZXJmaWxlKGh3KTsKKworCWlmIChpczkyYykKKwkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgMHgxNCwgMHg3MSk7CisJcmV0dXJuIHJ0c3RhdHVzOworfQorCitib29sIHJ0bDkyY19waHlfYmJfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCWJvb2wgcnRzdGF0dXMgPSB0cnVlOworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwl1MTYgcmVndmFsOworCXUzMiByZWd2YWxkdzsKKwl1OCBiX3JlZ19od3BhcmFmaWxlID0gMTsKKworCV9ydGw5MmNfcGh5X2luaXRfYmJfcmZfcmVnaXN0ZXJfZGVmaW5pdGlvbihodyk7CisJcmVndmFsID0gcnRsX3JlYWRfd29yZChydGxwcml2LCBSRUdfU1lTX0ZVTkNfRU4pOworCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIFJFR19TWVNfRlVOQ19FTiwKKwkJICAgICAgIHJlZ3ZhbCB8IEJJVCgxMykgfCBCSVQoMCkgfCBCSVQoMSkpOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19BRkVfUExMX0NUUkwsIDB4ODMpOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19BRkVfUExMX0NUUkwgKyAxLCAweGRiKTsKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfUkZfQ1RSTCwgUkZfRU4gfCBSRl9SU1RCIHwgUkZfU0RNUlNUQik7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX1NZU19GVU5DX0VOLAorCQkgICAgICAgRkVOX1BQTEwgfCBGRU5fUENJRUEgfCBGRU5fRElPX1BDSUUgfAorCQkgICAgICAgRkVOX0JCX0dMQl9SU1RuIHwgRkVOX0JCUlNUQik7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX0FGRV9YVEFMX0NUUkwgKyAxLCAweDgwKTsKKwlyZWd2YWxkdyA9IHJ0bF9yZWFkX2R3b3JkKHJ0bHByaXYsIFJFR19MRURDRkcwKTsKKwlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX0xFRENGRzAsIHJlZ3ZhbGR3IHwgQklUKDIzKSk7CisJaWYgKGJfcmVnX2h3cGFyYWZpbGUgPT0gMSkKKwkJcnRzdGF0dXMgPSBfcnRsOTJjX3BoeV9iYjgxOTJjX2NvbmZpZ19wYXJhZmlsZShodyk7CisJcmV0dXJuIHJ0c3RhdHVzOworfQorCitib29sIHJ0bDkyY19waHlfcmZfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXJldHVybiBydGw5MmNfcGh5X3JmNjA1Ml9jb25maWcoaHcpOworfQorCitzdGF0aWMgYm9vbCBfcnRsOTJjX3BoeV9iYjgxOTJjX2NvbmZpZ19wYXJhZmlsZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKKwlzdHJ1Y3QgcnRsX2VmdXNlICpydGxlZnVzZSA9IHJ0bF9lZnVzZShydGxfcHJpdihodykpOworCWJvb2wgcnRzdGF0dXM7CisKKwlSVF9UUkFDRShydGxwcml2LCBDT01QX0lOSVQsIERCR19UUkFDRSwgKCI9PT5cbiIpKTsKKwlydHN0YXR1cyA9IF9ydGw5MmNfcGh5X2NvbmZpZ19iYl93aXRoX2hlYWRlcmZpbGUoaHcsCisJCQkJCQkgQkFTRUJBTkRfQ09ORklHX1BIWV9SRUcpOworCWlmIChydHN0YXR1cyAhPSB0cnVlKSB7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfRU1FUkcsICgiV3JpdGUgQkIgUmVnIEZhaWwhISIpKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwlpZiAocnRscGh5LT5yZl90eXBlID09IFJGXzFUMlIpIHsKKwkJX3J0bDkyY19waHlfYmJfY29uZmlnXzF0KGh3KTsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9JTklULCBEQkdfVFJBQ0UsICgiQ29uZmlnIHRvIDFUISFcbiIpKTsKKwl9CisJaWYgKHJ0bGVmdXNlLT5hdXRvbG9hZF9mYWlsZmxhZyA9PSBmYWxzZSkgeworCQlydGxwaHktPnB3cmdyb3VwX2NudCA9IDA7CisJCXJ0c3RhdHVzID0gX3J0bDkyY19waHlfY29uZmlnX2JiX3dpdGhfcGdoZWFkZXJmaWxlKGh3LAorCQkJCQkJICAgQkFTRUJBTkRfQ09ORklHX1BIWV9SRUcpOworCX0KKwlpZiAocnRzdGF0dXMgIT0gdHJ1ZSkgeworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX0VNRVJHLCAoIkJCX1BHIFJlZyBGYWlsISEiKSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisJcnRzdGF0dXMgPSBfcnRsOTJjX3BoeV9jb25maWdfYmJfd2l0aF9oZWFkZXJmaWxlKGh3LAorCQkJCQkJIEJBU0VCQU5EX0NPTkZJR19BR0NfVEFCKTsKKwlpZiAocnRzdGF0dXMgIT0gdHJ1ZSkgeworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX0VNRVJHLCAoIkFHQyBUYWJsZSBGYWlsXG4iKSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisJcnRscGh5LT5iY2NrX2hpZ2hfcG93ZXIgPSAoYm9vbCkgKHJ0bF9nZXRfYmJyZWcoaHcsCisJCQkJCQlSRlBHQTBfWEFfSFNTSVBBUkFNRVRFUjIsCisJCQkJCQkweDIwMCkpOworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBfcnRsOTJjX3BoeV9jb25maWdfbWFjX3dpdGhfaGVhZGVyZmlsZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJdTMyIGk7CisJdTMyIGFycmF5bGVuZ3RoOworCXUzMiAqcHRyYXJyYXk7CisKKwlSVF9UUkFDRShydGxwcml2LCBDT01QX0lOSVQsIERCR19UUkFDRSwgKCJSZWFkIFJ0bDgxOVhNQUNQSFlfQXJyYXlcbiIpKTsKKwlhcnJheWxlbmd0aCA9IE1BQ18yVF9BUlJBWUxFTkdUSDsKKwlwdHJhcnJheSA9IFJUTDgxOTJDRU1BQ18yVF9BUlJBWTsKKwlSVF9UUkFDRShydGxwcml2LCBDT01QX0lOSVQsIERCR19UUkFDRSwKKwkJICgiSW1nOlJUTDgxOTJDRU1BQ18yVF9BUlJBWVxuIikpOworCWZvciAoaSA9IDA7IGkgPCBhcnJheWxlbmd0aDsgaSA9IGkgKyAyKQorCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBwdHJhcnJheVtpXSwgKHU4KSBwdHJhcnJheVtpICsgMV0pOworCXJldHVybiB0cnVlOworfQorCit2b2lkIHJ0bDkyY19waHlfY29uZmlnX2JiX2V4dGVybmFsX3BhKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworfQorCitzdGF0aWMgYm9vbCBfcnRsOTJjX3BoeV9jb25maWdfYmJfd2l0aF9oZWFkZXJmaWxlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQkJICB1OCBjb25maWd0eXBlKQoreworCWludCBpOworCXUzMiAqcGh5X3JlZ2FycmF5X3RhYmxlOworCXUzMiAqYWdjdGFiX2FycmF5X3RhYmxlOworCXUxNiBwaHlfcmVnX2FycmF5bGVuLCBhZ2N0YWJfYXJyYXlsZW47CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bF9wcml2KGh3KSk7CisKKwlpZiAoSVNfOTJDX1NFUklBTChydGxoYWwtPnZlcnNpb24pKSB7CisJCWFnY3RhYl9hcnJheWxlbiA9IEFHQ1RBQl8yVEFSUkFZTEVOR1RIOworCQlhZ2N0YWJfYXJyYXlfdGFibGUgPSBSVEw4MTkyQ0VBR0NUQUJfMlRBUlJBWTsKKwkJcGh5X3JlZ19hcnJheWxlbiA9IFBIWV9SRUdfMlRBUlJBWV9MRU5HVEg7CisJCXBoeV9yZWdhcnJheV90YWJsZSA9IFJUTDgxOTJDRVBIWV9SRUdfMlRBUlJBWTsKKwl9IGVsc2UgeworCQlhZ2N0YWJfYXJyYXlsZW4gPSBBR0NUQUJfMVRBUlJBWUxFTkdUSDsKKwkJYWdjdGFiX2FycmF5X3RhYmxlID0gUlRMODE5MkNFQUdDVEFCXzFUQVJSQVk7CisJCXBoeV9yZWdfYXJyYXlsZW4gPSBQSFlfUkVHXzFUQVJSQVlfTEVOR1RIOworCQlwaHlfcmVnYXJyYXlfdGFibGUgPSBSVEw4MTkyQ0VQSFlfUkVHXzFUQVJSQVk7CisJfQorCWlmIChjb25maWd0eXBlID09IEJBU0VCQU5EX0NPTkZJR19QSFlfUkVHKSB7CisJCWZvciAoaSA9IDA7IGkgPCBwaHlfcmVnX2FycmF5bGVuOyBpID0gaSArIDIpIHsKKwkJCWlmIChwaHlfcmVnYXJyYXlfdGFibGVbaV0gPT0gMHhmZSkKKwkJCQltZGVsYXkoNTApOworCQkJZWxzZSBpZiAocGh5X3JlZ2FycmF5X3RhYmxlW2ldID09IDB4ZmQpCisJCQkJbWRlbGF5KDUpOworCQkJZWxzZSBpZiAocGh5X3JlZ2FycmF5X3RhYmxlW2ldID09IDB4ZmMpCisJCQkJbWRlbGF5KDEpOworCQkJZWxzZSBpZiAocGh5X3JlZ2FycmF5X3RhYmxlW2ldID09IDB4ZmIpCisJCQkJdWRlbGF5KDUwKTsKKwkJCWVsc2UgaWYgKHBoeV9yZWdhcnJheV90YWJsZVtpXSA9PSAweGZhKQorCQkJCXVkZWxheSg1KTsKKwkJCWVsc2UgaWYgKHBoeV9yZWdhcnJheV90YWJsZVtpXSA9PSAweGY5KQorCQkJCXVkZWxheSgxKTsKKwkJCXJ0bF9zZXRfYmJyZWcoaHcsIHBoeV9yZWdhcnJheV90YWJsZVtpXSwgTUFTS0RXT1JELAorCQkJCSAgICAgIHBoeV9yZWdhcnJheV90YWJsZVtpICsgMV0pOworCQkJdWRlbGF5KDEpOworCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9JTklULCBEQkdfVFJBQ0UsCisJCQkJICgiVGhlIHBoeV9yZWdhcnJheV90YWJsZVswXSBpcyAleCIKKwkJCQkgICIgUnRsODE5WFBIWV9SRUdBcnJheVsxXSBpcyAleFxuIiwKKwkJCQkgIHBoeV9yZWdhcnJheV90YWJsZVtpXSwKKwkJCQkgIHBoeV9yZWdhcnJheV90YWJsZVtpICsgMV0pKTsKKwkJfQorCQlydGw5MmNfcGh5X2NvbmZpZ19iYl9leHRlcm5hbF9wYShodyk7CisJfSBlbHNlIGlmIChjb25maWd0eXBlID09IEJBU0VCQU5EX0NPTkZJR19BR0NfVEFCKSB7CisJCWZvciAoaSA9IDA7IGkgPCBhZ2N0YWJfYXJyYXlsZW47IGkgPSBpICsgMikgeworCQkJcnRsX3NldF9iYnJlZyhodywgYWdjdGFiX2FycmF5X3RhYmxlW2ldLCBNQVNLRFdPUkQsCisJCQkJICAgICAgYWdjdGFiX2FycmF5X3RhYmxlW2kgKyAxXSk7CisJCQl1ZGVsYXkoMSk7CisJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0lOSVQsIERCR19UUkFDRSwKKwkJCQkgKCJUaGUgYWdjdGFiX2FycmF5X3RhYmxlWzBdIGlzICIKKwkJCQkgICIleCBSdGw4MTlYUEhZX1JFR0FycmF5WzFdIGlzICV4XG4iLAorCQkJCSAgYWdjdGFiX2FycmF5X3RhYmxlW2ldLAorCQkJCSAgYWdjdGFiX2FycmF5X3RhYmxlW2kgKyAxXSkpOworCQl9CisJfQorCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCBfcnRsOTJjX3N0b3JlX3B3ckluZGV4X2RpZmZyYXRlX29mZnNldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkJCSAgIHUzMiByZWdhZGRyLCB1MzIgYml0bWFzaywKKwkJCQkJCSAgIHUzMiBkYXRhKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BoeSAqcnRscGh5ID0gJihydGxwcml2LT5waHkpOworCisJaWYgKHJlZ2FkZHIgPT0gUlRYQUdDX0FfUkFURTE4XzA2KSB7CisJCXJ0bHBoeS0+bWNzX3R4cHdybGV2ZWxfb3JpZ29mZnNldFtydGxwaHktPnB3cmdyb3VwX2NudF1bMF0gPQorCQkgICAgZGF0YTsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9JTklULCBEQkdfVFJBQ0UsCisJCQkgKCJNQ1NUeFBvd2VyTGV2ZWxPcmlnaW5hbE9mZnNldFslZF1bMF0gPSAweCV4XG4iLAorCQkJICBydGxwaHktPnB3cmdyb3VwX2NudCwKKwkJCSAgcnRscGh5LT5tY3NfdHhwd3JsZXZlbF9vcmlnb2Zmc2V0W3J0bHBoeS0+CisJCQkJCQkJICAgIHB3cmdyb3VwX2NudF1bMF0pKTsKKwl9CisJaWYgKHJlZ2FkZHIgPT0gUlRYQUdDX0FfUkFURTU0XzI0KSB7CisJCXJ0bHBoeS0+bWNzX3R4cHdybGV2ZWxfb3JpZ29mZnNldFtydGxwaHktPnB3cmdyb3VwX2NudF1bMV0gPQorCQkgICAgZGF0YTsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9JTklULCBEQkdfVFJBQ0UsCisJCQkgKCJNQ1NUeFBvd2VyTGV2ZWxPcmlnaW5hbE9mZnNldFslZF1bMV0gPSAweCV4XG4iLAorCQkJICBydGxwaHktPnB3cmdyb3VwX2NudCwKKwkJCSAgcnRscGh5LT5tY3NfdHhwd3JsZXZlbF9vcmlnb2Zmc2V0W3J0bHBoeS0+CisJCQkJCQkJICAgIHB3cmdyb3VwX2NudF1bMV0pKTsKKwl9CisJaWYgKHJlZ2FkZHIgPT0gUlRYQUdDX0FfQ0NLMV9NQ1MzMikgeworCQlydGxwaHktPm1jc190eHB3cmxldmVsX29yaWdvZmZzZXRbcnRscGh5LT5wd3Jncm91cF9jbnRdWzZdID0KKwkJICAgIGRhdGE7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX1RSQUNFLAorCQkJICgiTUNTVHhQb3dlckxldmVsT3JpZ2luYWxPZmZzZXRbJWRdWzZdID0gMHgleFxuIiwKKwkJCSAgcnRscGh5LT5wd3Jncm91cF9jbnQsCisJCQkgIHJ0bHBoeS0+bWNzX3R4cHdybGV2ZWxfb3JpZ29mZnNldFtydGxwaHktPgorCQkJCQkJCSAgICBwd3Jncm91cF9jbnRdWzZdKSk7CisJfQorCWlmIChyZWdhZGRyID09IFJUWEFHQ19CX0NDSzExX0FfQ0NLMl8xMSAmJiBiaXRtYXNrID09IDB4ZmZmZmZmMDApIHsKKwkJcnRscGh5LT5tY3NfdHhwd3JsZXZlbF9vcmlnb2Zmc2V0W3J0bHBoeS0+cHdyZ3JvdXBfY250XVs3XSA9CisJCSAgICBkYXRhOworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0lOSVQsIERCR19UUkFDRSwKKwkJCSAoIk1DU1R4UG93ZXJMZXZlbE9yaWdpbmFsT2Zmc2V0WyVkXVs3XSA9IDB4JXhcbiIsCisJCQkgIHJ0bHBoeS0+cHdyZ3JvdXBfY250LAorCQkJICBydGxwaHktPm1jc190eHB3cmxldmVsX29yaWdvZmZzZXRbcnRscGh5LT4KKwkJCQkJCQkgICAgcHdyZ3JvdXBfY250XVs3XSkpOworCX0KKwlpZiAocmVnYWRkciA9PSBSVFhBR0NfQV9NQ1MwM19NQ1MwMCkgeworCQlydGxwaHktPm1jc190eHB3cmxldmVsX29yaWdvZmZzZXRbcnRscGh5LT5wd3Jncm91cF9jbnRdWzJdID0KKwkJICAgIGRhdGE7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX1RSQUNFLAorCQkJICgiTUNTVHhQb3dlckxldmVsT3JpZ2luYWxPZmZzZXRbJWRdWzJdID0gMHgleFxuIiwKKwkJCSAgcnRscGh5LT5wd3Jncm91cF9jbnQsCisJCQkgIHJ0bHBoeS0+bWNzX3R4cHdybGV2ZWxfb3JpZ29mZnNldFtydGxwaHktPgorCQkJCQkJCSAgICBwd3Jncm91cF9jbnRdWzJdKSk7CisJfQorCWlmIChyZWdhZGRyID09IFJUWEFHQ19BX01DUzA3X01DUzA0KSB7CisJCXJ0bHBoeS0+bWNzX3R4cHdybGV2ZWxfb3JpZ29mZnNldFtydGxwaHktPnB3cmdyb3VwX2NudF1bM10gPQorCQkgICAgZGF0YTsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9JTklULCBEQkdfVFJBQ0UsCisJCQkgKCJNQ1NUeFBvd2VyTGV2ZWxPcmlnaW5hbE9mZnNldFslZF1bM10gPSAweCV4XG4iLAorCQkJICBydGxwaHktPnB3cmdyb3VwX2NudCwKKwkJCSAgcnRscGh5LT5tY3NfdHhwd3JsZXZlbF9vcmlnb2Zmc2V0W3J0bHBoeS0+CisJCQkJCQkJICAgIHB3cmdyb3VwX2NudF1bM10pKTsKKwl9CisJaWYgKHJlZ2FkZHIgPT0gUlRYQUdDX0FfTUNTMTFfTUNTMDgpIHsKKwkJcnRscGh5LT5tY3NfdHhwd3JsZXZlbF9vcmlnb2Zmc2V0W3J0bHBoeS0+cHdyZ3JvdXBfY250XVs0XSA9CisJCSAgICBkYXRhOworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0lOSVQsIERCR19UUkFDRSwKKwkJCSAoIk1DU1R4UG93ZXJMZXZlbE9yaWdpbmFsT2Zmc2V0WyVkXVs0XSA9IDB4JXhcbiIsCisJCQkgIHJ0bHBoeS0+cHdyZ3JvdXBfY250LAorCQkJICBydGxwaHktPm1jc190eHB3cmxldmVsX29yaWdvZmZzZXRbcnRscGh5LT4KKwkJCQkJCQkgICAgcHdyZ3JvdXBfY250XVs0XSkpOworCX0KKwlpZiAocmVnYWRkciA9PSBSVFhBR0NfQV9NQ1MxNV9NQ1MxMikgeworCQlydGxwaHktPm1jc190eHB3cmxldmVsX29yaWdvZmZzZXRbcnRscGh5LT5wd3Jncm91cF9jbnRdWzVdID0KKwkJICAgIGRhdGE7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX1RSQUNFLAorCQkJICgiTUNTVHhQb3dlckxldmVsT3JpZ2luYWxPZmZzZXRbJWRdWzVdID0gMHgleFxuIiwKKwkJCSAgcnRscGh5LT5wd3Jncm91cF9jbnQsCisJCQkgIHJ0bHBoeS0+bWNzX3R4cHdybGV2ZWxfb3JpZ29mZnNldFtydGxwaHktPgorCQkJCQkJCSAgICBwd3Jncm91cF9jbnRdWzVdKSk7CisJfQorCWlmIChyZWdhZGRyID09IFJUWEFHQ19CX1JBVEUxOF8wNikgeworCQlydGxwaHktPm1jc190eHB3cmxldmVsX29yaWdvZmZzZXRbcnRscGh5LT5wd3Jncm91cF9jbnRdWzhdID0KKwkJICAgIGRhdGE7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX1RSQUNFLAorCQkJICgiTUNTVHhQb3dlckxldmVsT3JpZ2luYWxPZmZzZXRbJWRdWzhdID0gMHgleFxuIiwKKwkJCSAgcnRscGh5LT5wd3Jncm91cF9jbnQsCisJCQkgIHJ0bHBoeS0+bWNzX3R4cHdybGV2ZWxfb3JpZ29mZnNldFtydGxwaHktPgorCQkJCQkJCSAgICBwd3Jncm91cF9jbnRdWzhdKSk7CisJfQorCWlmIChyZWdhZGRyID09IFJUWEFHQ19CX1JBVEU1NF8yNCkgeworCQlydGxwaHktPm1jc190eHB3cmxldmVsX29yaWdvZmZzZXRbcnRscGh5LT5wd3Jncm91cF9jbnRdWzldID0KKwkJICAgIGRhdGE7CisKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9JTklULCBEQkdfVFJBQ0UsCisJCQkgKCJNQ1NUeFBvd2VyTGV2ZWxPcmlnaW5hbE9mZnNldFslZF1bOV0gPSAweCV4XG4iLAorCQkJICBydGxwaHktPnB3cmdyb3VwX2NudCwKKwkJCSAgcnRscGh5LT5tY3NfdHhwd3JsZXZlbF9vcmlnb2Zmc2V0W3J0bHBoeS0+CisJCQkJCQkJICAgIHB3cmdyb3VwX2NudF1bOV0pKTsKKwl9CisKKwlpZiAocmVnYWRkciA9PSBSVFhBR0NfQl9DQ0sxXzU1X01DUzMyKSB7CisJCXJ0bHBoeS0+bWNzX3R4cHdybGV2ZWxfb3JpZ29mZnNldFtydGxwaHktPnB3cmdyb3VwX2NudF1bMTRdID0KKwkJICAgIGRhdGE7CisKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9JTklULCBEQkdfVFJBQ0UsCisJCQkgKCJNQ1NUeFBvd2VyTGV2ZWxPcmlnaW5hbE9mZnNldFslZF1bMTRdID0gMHgleFxuIiwKKwkJCSAgcnRscGh5LT5wd3Jncm91cF9jbnQsCisJCQkgIHJ0bHBoeS0+bWNzX3R4cHdybGV2ZWxfb3JpZ29mZnNldFtydGxwaHktPgorCQkJCQkJCSAgICBwd3Jncm91cF9jbnRdWzE0XSkpOworCX0KKworCWlmIChyZWdhZGRyID09IFJUWEFHQ19CX0NDSzExX0FfQ0NLMl8xMSAmJiBiaXRtYXNrID09IDB4MDAwMDAwZmYpIHsKKwkJcnRscGh5LT5tY3NfdHhwd3JsZXZlbF9vcmlnb2Zmc2V0W3J0bHBoeS0+cHdyZ3JvdXBfY250XVsxNV0gPQorCQkgICAgZGF0YTsKKworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0lOSVQsIERCR19UUkFDRSwKKwkJCSAoIk1DU1R4UG93ZXJMZXZlbE9yaWdpbmFsT2Zmc2V0WyVkXVsxNV0gPSAweCV4XG4iLAorCQkJICBydGxwaHktPnB3cmdyb3VwX2NudCwKKwkJCSAgcnRscGh5LT5tY3NfdHhwd3JsZXZlbF9vcmlnb2Zmc2V0W3J0bHBoeS0+CisJCQkJCQkJICAgIHB3cmdyb3VwX2NudF1bMTVdKSk7CisJfQorCisJaWYgKHJlZ2FkZHIgPT0gUlRYQUdDX0JfTUNTMDNfTUNTMDApIHsKKwkJcnRscGh5LT5tY3NfdHhwd3JsZXZlbF9vcmlnb2Zmc2V0W3J0bHBoeS0+cHdyZ3JvdXBfY250XVsxMF0gPQorCQkgICAgZGF0YTsKKworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0lOSVQsIERCR19UUkFDRSwKKwkJCSAoIk1DU1R4UG93ZXJMZXZlbE9yaWdpbmFsT2Zmc2V0WyVkXVsxMF0gPSAweCV4XG4iLAorCQkJICBydGxwaHktPnB3cmdyb3VwX2NudCwKKwkJCSAgcnRscGh5LT5tY3NfdHhwd3JsZXZlbF9vcmlnb2Zmc2V0W3J0bHBoeS0+CisJCQkJCQkJICAgIHB3cmdyb3VwX2NudF1bMTBdKSk7CisJfQorCisJaWYgKHJlZ2FkZHIgPT0gUlRYQUdDX0JfTUNTMDdfTUNTMDQpIHsKKwkJcnRscGh5LT5tY3NfdHhwd3JsZXZlbF9vcmlnb2Zmc2V0W3J0bHBoeS0+cHdyZ3JvdXBfY250XVsxMV0gPQorCQkgICAgZGF0YTsKKworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0lOSVQsIERCR19UUkFDRSwKKwkJCSAoIk1DU1R4UG93ZXJMZXZlbE9yaWdpbmFsT2Zmc2V0WyVkXVsxMV0gPSAweCV4XG4iLAorCQkJICBydGxwaHktPnB3cmdyb3VwX2NudCwKKwkJCSAgcnRscGh5LT5tY3NfdHhwd3JsZXZlbF9vcmlnb2Zmc2V0W3J0bHBoeS0+CisJCQkJCQkJICAgIHB3cmdyb3VwX2NudF1bMTFdKSk7CisJfQorCisJaWYgKHJlZ2FkZHIgPT0gUlRYQUdDX0JfTUNTMTFfTUNTMDgpIHsKKwkJcnRscGh5LT5tY3NfdHhwd3JsZXZlbF9vcmlnb2Zmc2V0W3J0bHBoeS0+cHdyZ3JvdXBfY250XVsxMl0gPQorCQkgICAgZGF0YTsKKworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0lOSVQsIERCR19UUkFDRSwKKwkJCSAoIk1DU1R4UG93ZXJMZXZlbE9yaWdpbmFsT2Zmc2V0WyVkXVsxMl0gPSAweCV4XG4iLAorCQkJICBydGxwaHktPnB3cmdyb3VwX2NudCwKKwkJCSAgcnRscGh5LT5tY3NfdHhwd3JsZXZlbF9vcmlnb2Zmc2V0W3J0bHBoeS0+CisJCQkJCQkJICAgIHB3cmdyb3VwX2NudF1bMTJdKSk7CisJfQorCisJaWYgKHJlZ2FkZHIgPT0gUlRYQUdDX0JfTUNTMTVfTUNTMTIpIHsKKwkJcnRscGh5LT5tY3NfdHhwd3JsZXZlbF9vcmlnb2Zmc2V0W3J0bHBoeS0+cHdyZ3JvdXBfY250XVsxM10gPQorCQkgICAgZGF0YTsKKworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0lOSVQsIERCR19UUkFDRSwKKwkJCSAoIk1DU1R4UG93ZXJMZXZlbE9yaWdpbmFsT2Zmc2V0WyVkXVsxM10gPSAweCV4XG4iLAorCQkJICBydGxwaHktPnB3cmdyb3VwX2NudCwKKwkJCSAgcnRscGh5LT5tY3NfdHhwd3JsZXZlbF9vcmlnb2Zmc2V0W3J0bHBoeS0+CisJCQkJCQkJICAgIHB3cmdyb3VwX2NudF1bMTNdKSk7CisKKwkJcnRscGh5LT5wd3Jncm91cF9jbnQrKzsKKwl9Cit9CisKK3N0YXRpYyBib29sIF9ydGw5MmNfcGh5X2NvbmZpZ19iYl93aXRoX3BnaGVhZGVyZmlsZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkJCSAgICB1OCBjb25maWd0eXBlKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlpbnQgaTsKKwl1MzIgKnBoeV9yZWdhcnJheV90YWJsZV9wZzsKKwl1MTYgcGh5X3JlZ2FycmF5X3BnX2xlbjsKKworCXBoeV9yZWdhcnJheV9wZ19sZW4gPSBQSFlfUkVHX0FSUkFZX1BHTEVOR1RIOworCXBoeV9yZWdhcnJheV90YWJsZV9wZyA9IFJUTDgxOTJDRVBIWV9SRUdfQVJSQVlfUEc7CisKKwlpZiAoY29uZmlndHlwZSA9PSBCQVNFQkFORF9DT05GSUdfUEhZX1JFRykgeworCQlmb3IgKGkgPSAwOyBpIDwgcGh5X3JlZ2FycmF5X3BnX2xlbjsgaSA9IGkgKyAzKSB7CisJCQlpZiAocGh5X3JlZ2FycmF5X3RhYmxlX3BnW2ldID09IDB4ZmUpCisJCQkJbWRlbGF5KDUwKTsKKwkJCWVsc2UgaWYgKHBoeV9yZWdhcnJheV90YWJsZV9wZ1tpXSA9PSAweGZkKQorCQkJCW1kZWxheSg1KTsKKwkJCWVsc2UgaWYgKHBoeV9yZWdhcnJheV90YWJsZV9wZ1tpXSA9PSAweGZjKQorCQkJCW1kZWxheSgxKTsKKwkJCWVsc2UgaWYgKHBoeV9yZWdhcnJheV90YWJsZV9wZ1tpXSA9PSAweGZiKQorCQkJCXVkZWxheSg1MCk7CisJCQllbHNlIGlmIChwaHlfcmVnYXJyYXlfdGFibGVfcGdbaV0gPT0gMHhmYSkKKwkJCQl1ZGVsYXkoNSk7CisJCQllbHNlIGlmIChwaHlfcmVnYXJyYXlfdGFibGVfcGdbaV0gPT0gMHhmOSkKKwkJCQl1ZGVsYXkoMSk7CisKKwkJCV9ydGw5MmNfc3RvcmVfcHdySW5kZXhfZGlmZnJhdGVfb2Zmc2V0KGh3LAorCQkJCQkgICAgICAgcGh5X3JlZ2FycmF5X3RhYmxlX3BnW2ldLAorCQkJCQkgICAgICAgcGh5X3JlZ2FycmF5X3RhYmxlX3BnW2kgKyAxXSwKKwkJCQkJICAgICAgIHBoeV9yZWdhcnJheV90YWJsZV9wZ1tpICsgMl0pOworCQl9CisJfSBlbHNlIHsKKworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1NFTkQsIERCR19UUkFDRSwKKwkJCSAoImNvbmZpZ3R5cGUgIT0gQmFzZUJhbmRfQ29uZmlnX1BIWV9SRUdcbiIpKTsKKwl9CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIF9ydGw5MmNfcGh5X2NvbmZpZ19yZl9leHRlcm5hbF9wYShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkJICAgICAgZW51bSByYWRpb19wYXRoIHJmcGF0aCkKK3sKKwlyZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBydGw5MmNfcGh5X2NvbmZpZ19yZl93aXRoX2hlYWRlcmZpbGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJCSAgZW51bSByYWRpb19wYXRoIHJmcGF0aCkKK3sKKworCWludCBpOworCWJvb2wgcnRzdGF0dXMgPSB0cnVlOworCXUzMiAqcmFkaW9hX2FycmF5X3RhYmxlOworCXUzMiAqcmFkaW9iX2FycmF5X3RhYmxlOworCXUxNiByYWRpb2FfYXJyYXlsZW4sIHJhZGlvYl9hcnJheWxlbjsKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCA9IHJ0bF9oYWwocnRsX3ByaXYoaHcpKTsKKworCWlmIChJU185MkNfU0VSSUFMKHJ0bGhhbC0+dmVyc2lvbikpIHsKKwkJcmFkaW9hX2FycmF5bGVuID0gUkFESU9BXzJUQVJSQVlMRU5HVEg7CisJCXJhZGlvYV9hcnJheV90YWJsZSA9IFJUTDgxOTJDRVJBRElPQV8yVEFSUkFZOworCQlyYWRpb2JfYXJyYXlsZW4gPSBSQURJT0JfMlRBUlJBWUxFTkdUSDsKKwkJcmFkaW9iX2FycmF5X3RhYmxlID0gUlRMODE5MkNFX1JBRElPQl8yVEFSUkFZOworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0lOSVQsIERCR19UUkFDRSwKKwkJCSAoIlJhZGlvX0E6UlRMODE5MkNFUkFESU9BXzJUQVJSQVlcbiIpKTsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9JTklULCBEQkdfVFJBQ0UsCisJCQkgKCJSYWRpb19COlJUTDgxOTJDRV9SQURJT0JfMlRBUlJBWVxuIikpOworCX0gZWxzZSB7CisJCXJhZGlvYV9hcnJheWxlbiA9IFJBRElPQV8xVEFSUkFZTEVOR1RIOworCQlyYWRpb2FfYXJyYXlfdGFibGUgPSBSVEw4MTkyQ0VfUkFESU9BXzFUQVJSQVk7CisJCXJhZGlvYl9hcnJheWxlbiA9IFJBRElPQl8xVEFSUkFZTEVOR1RIOworCQlyYWRpb2JfYXJyYXlfdGFibGUgPSBSVEw4MTkyQ0VfUkFESU9CXzFUQVJSQVk7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX1RSQUNFLAorCQkJICgiUmFkaW9fQTpSVEw4MTkyQ0VfUkFESU9BXzFUQVJSQVlcbiIpKTsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9JTklULCBEQkdfVFJBQ0UsCisJCQkgKCJSYWRpb19COlJUTDgxOTJDRV9SQURJT0JfMVRBUlJBWVxuIikpOworCX0KKwlSVF9UUkFDRShydGxwcml2LCBDT01QX0lOSVQsIERCR19UUkFDRSwgKCJSYWRpbyBObyAleFxuIiwgcmZwYXRoKSk7CisJcnRzdGF0dXMgPSB0cnVlOworCXN3aXRjaCAocmZwYXRoKSB7CisJY2FzZSBSRjkwX1BBVEhfQToKKwkJZm9yIChpID0gMDsgaSA8IHJhZGlvYV9hcnJheWxlbjsgaSA9IGkgKyAyKSB7CisJCQlpZiAocmFkaW9hX2FycmF5X3RhYmxlW2ldID09IDB4ZmUpCisJCQkJbWRlbGF5KDUwKTsKKwkJCWVsc2UgaWYgKHJhZGlvYV9hcnJheV90YWJsZVtpXSA9PSAweGZkKQorCQkJCW1kZWxheSg1KTsKKwkJCWVsc2UgaWYgKHJhZGlvYV9hcnJheV90YWJsZVtpXSA9PSAweGZjKQorCQkJCW1kZWxheSgxKTsKKwkJCWVsc2UgaWYgKHJhZGlvYV9hcnJheV90YWJsZVtpXSA9PSAweGZiKQorCQkJCXVkZWxheSg1MCk7CisJCQllbHNlIGlmIChyYWRpb2FfYXJyYXlfdGFibGVbaV0gPT0gMHhmYSkKKwkJCQl1ZGVsYXkoNSk7CisJCQllbHNlIGlmIChyYWRpb2FfYXJyYXlfdGFibGVbaV0gPT0gMHhmOSkKKwkJCQl1ZGVsYXkoMSk7CisJCQllbHNlIHsKKwkJCQlydGxfc2V0X3JmcmVnKGh3LCByZnBhdGgsIHJhZGlvYV9hcnJheV90YWJsZVtpXSwKKwkJCQkJICAgICAgUkZSRUdfT0ZGU0VUX01BU0ssCisJCQkJCSAgICAgIHJhZGlvYV9hcnJheV90YWJsZVtpICsgMV0pOworCQkJCXVkZWxheSgxKTsKKwkJCX0KKwkJfQorCQlfcnRsOTJjX3BoeV9jb25maWdfcmZfZXh0ZXJuYWxfcGEoaHcsIHJmcGF0aCk7CisJCWJyZWFrOworCWNhc2UgUkY5MF9QQVRIX0I6CisJCWZvciAoaSA9IDA7IGkgPCByYWRpb2JfYXJyYXlsZW47IGkgPSBpICsgMikgeworCQkJaWYgKHJhZGlvYl9hcnJheV90YWJsZVtpXSA9PSAweGZlKSB7CisJCQkJbWRlbGF5KDUwKTsKKwkJCX0gZWxzZSBpZiAocmFkaW9iX2FycmF5X3RhYmxlW2ldID09IDB4ZmQpCisJCQkJbWRlbGF5KDUpOworCQkJZWxzZSBpZiAocmFkaW9iX2FycmF5X3RhYmxlW2ldID09IDB4ZmMpCisJCQkJbWRlbGF5KDEpOworCQkJZWxzZSBpZiAocmFkaW9iX2FycmF5X3RhYmxlW2ldID09IDB4ZmIpCisJCQkJdWRlbGF5KDUwKTsKKwkJCWVsc2UgaWYgKHJhZGlvYl9hcnJheV90YWJsZVtpXSA9PSAweGZhKQorCQkJCXVkZWxheSg1KTsKKwkJCWVsc2UgaWYgKHJhZGlvYl9hcnJheV90YWJsZVtpXSA9PSAweGY5KQorCQkJCXVkZWxheSgxKTsKKwkJCWVsc2UgeworCQkJCXJ0bF9zZXRfcmZyZWcoaHcsIHJmcGF0aCwgcmFkaW9iX2FycmF5X3RhYmxlW2ldLAorCQkJCQkgICAgICBSRlJFR19PRkZTRVRfTUFTSywKKwkJCQkJICAgICAgcmFkaW9iX2FycmF5X3RhYmxlW2kgKyAxXSk7CisJCQkJdWRlbGF5KDEpOworCQkJfQorCQl9CisJCWJyZWFrOworCWNhc2UgUkY5MF9QQVRIX0M6CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfRU1FUkcsCisJCQkgKCJzd2l0Y2ggY2FzZSBub3QgcHJvY2Vzc1xuIikpOworCQlicmVhazsKKwljYXNlIFJGOTBfUEFUSF9EOgorCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX0VNRVJHLAorCQkJICgic3dpdGNoIGNhc2Ugbm90IHByb2Nlc3NcbiIpKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiB0cnVlOworfQorCit2b2lkIHJ0bDkyY19waHlfZ2V0X2h3X3JlZ19vcmlnaW5hbHZhbHVlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BoeSAqcnRscGh5ID0gJihydGxwcml2LT5waHkpOworCisJcnRscGh5LT5kZWZhdWx0X2luaXRpYWxnYWluWzBdID0KKwkgICAgKHU4KSBydGxfZ2V0X2JicmVnKGh3LCBST0ZETTBfWEFBR0NDT1JFMSwgTUFTS0JZVEUwKTsKKwlydGxwaHktPmRlZmF1bHRfaW5pdGlhbGdhaW5bMV0gPQorCSAgICAodTgpIHJ0bF9nZXRfYmJyZWcoaHcsIFJPRkRNMF9YQkFHQ0NPUkUxLCBNQVNLQllURTApOworCXJ0bHBoeS0+ZGVmYXVsdF9pbml0aWFsZ2FpblsyXSA9CisJICAgICh1OCkgcnRsX2dldF9iYnJlZyhodywgUk9GRE0wX1hDQUdDQ09SRTEsIE1BU0tCWVRFMCk7CisJcnRscGh5LT5kZWZhdWx0X2luaXRpYWxnYWluWzNdID0KKwkgICAgKHU4KSBydGxfZ2V0X2JicmVnKGh3LCBST0ZETTBfWERBR0NDT1JFMSwgTUFTS0JZVEUwKTsKKworCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX1RSQUNFLAorCQkgKCJEZWZhdWx0IGluaXRpYWwgZ2FpbiAoYzUwPTB4JXgsICIKKwkJICAiYzU4PTB4JXgsIGM2MD0weCV4LCBjNjg9MHgleFxuIiwKKwkJICBydGxwaHktPmRlZmF1bHRfaW5pdGlhbGdhaW5bMF0sCisJCSAgcnRscGh5LT5kZWZhdWx0X2luaXRpYWxnYWluWzFdLAorCQkgIHJ0bHBoeS0+ZGVmYXVsdF9pbml0aWFsZ2FpblsyXSwKKwkJICBydGxwaHktPmRlZmF1bHRfaW5pdGlhbGdhaW5bM10pKTsKKworCXJ0bHBoeS0+ZnJhbWVzeW5jID0gKHU4KSBydGxfZ2V0X2JicmVnKGh3LAorCQkJCQkgICAgICAgUk9GRE0wX1JYREVURUNUT1IzLCBNQVNLQllURTApOworCXJ0bHBoeS0+ZnJhbWVzeW5jX2MzNCA9IHJ0bF9nZXRfYmJyZWcoaHcsCisJCQkJCSAgICAgIFJPRkRNMF9SWERFVEVDVE9SMiwgTUFTS0RXT1JEKTsKKworCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX1RSQUNFLAorCQkgKCJEZWZhdWx0IGZyYW1lc3luYyAoMHgleCkgPSAweCV4XG4iLAorCQkgIFJPRkRNMF9SWERFVEVDVE9SMywgcnRscGh5LT5mcmFtZXN5bmMpKTsKK30KKworc3RhdGljIHZvaWQgX3J0bDkyY19waHlfaW5pdF9iYl9yZl9yZWdpc3Rlcl9kZWZpbml0aW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BoeSAqcnRscGh5ID0gJihydGxwcml2LT5waHkpOworCisJcnRscGh5LT5waHlyZWdfZGVmW1JGOTBfUEFUSF9BXS5yZmludGZzID0gUkZQR0EwX1hBQl9SRklOVEVSRkFDRVNXOworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfQl0ucmZpbnRmcyA9IFJGUEdBMF9YQUJfUkZJTlRFUkZBQ0VTVzsKKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0NdLnJmaW50ZnMgPSBSRlBHQTBfWENEX1JGSU5URVJGQUNFU1c7CisJcnRscGh5LT5waHlyZWdfZGVmW1JGOTBfUEFUSF9EXS5yZmludGZzID0gUkZQR0EwX1hDRF9SRklOVEVSRkFDRVNXOworCisJcnRscGh5LT5waHlyZWdfZGVmW1JGOTBfUEFUSF9BXS5yZmludGZpID0gUkZQR0EwX1hBQl9SRklOVEVSRkFDRVJCOworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfQl0ucmZpbnRmaSA9IFJGUEdBMF9YQUJfUkZJTlRFUkZBQ0VSQjsKKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0NdLnJmaW50ZmkgPSBSRlBHQTBfWENEX1JGSU5URVJGQUNFUkI7CisJcnRscGh5LT5waHlyZWdfZGVmW1JGOTBfUEFUSF9EXS5yZmludGZpID0gUkZQR0EwX1hDRF9SRklOVEVSRkFDRVJCOworCisJcnRscGh5LT5waHlyZWdfZGVmW1JGOTBfUEFUSF9BXS5yZmludGZvID0gUkZQR0EwX1hBX1JGSU5URVJGQUNFT0U7CisJcnRscGh5LT5waHlyZWdfZGVmW1JGOTBfUEFUSF9CXS5yZmludGZvID0gUkZQR0EwX1hCX1JGSU5URVJGQUNFT0U7CisKKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0FdLnJmaW50ZmUgPSBSRlBHQTBfWEFfUkZJTlRFUkZBQ0VPRTsKKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0JdLnJmaW50ZmUgPSBSRlBHQTBfWEJfUkZJTlRFUkZBQ0VPRTsKKworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfQV0ucmYzd2lyZV9vZmZzZXQgPQorCSAgICBSRlBHQTBfWEFfTFNTSVBBUkFNRVRFUjsKKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0JdLnJmM3dpcmVfb2Zmc2V0ID0KKwkgICAgUkZQR0EwX1hCX0xTU0lQQVJBTUVURVI7CisKKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0FdLnJmbHNzaV9zZWxlY3QgPSByRlBHQTBfWEFCX1JGUEFSQU1FVEVSOworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfQl0ucmZsc3NpX3NlbGVjdCA9IHJGUEdBMF9YQUJfUkZQQVJBTUVURVI7CisJcnRscGh5LT5waHlyZWdfZGVmW1JGOTBfUEFUSF9DXS5yZmxzc2lfc2VsZWN0ID0gckZQR0EwX1hDRF9SRlBBUkFNRVRFUjsKKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0RdLnJmbHNzaV9zZWxlY3QgPSByRlBHQTBfWENEX1JGUEFSQU1FVEVSOworCisJcnRscGh5LT5waHlyZWdfZGVmW1JGOTBfUEFUSF9BXS5yZnR4Z2Fpbl9zdGFnZSA9IFJGUEdBMF9UWEdBSU5TVEFHRTsKKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0JdLnJmdHhnYWluX3N0YWdlID0gUkZQR0EwX1RYR0FJTlNUQUdFOworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfQ10ucmZ0eGdhaW5fc3RhZ2UgPSBSRlBHQTBfVFhHQUlOU1RBR0U7CisJcnRscGh5LT5waHlyZWdfZGVmW1JGOTBfUEFUSF9EXS5yZnR4Z2Fpbl9zdGFnZSA9IFJGUEdBMF9UWEdBSU5TVEFHRTsKKworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfQV0ucmZoc3NpX3BhcmExID0gUkZQR0EwX1hBX0hTU0lQQVJBTUVURVIxOworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfQl0ucmZoc3NpX3BhcmExID0gUkZQR0EwX1hCX0hTU0lQQVJBTUVURVIxOworCisJcnRscGh5LT5waHlyZWdfZGVmW1JGOTBfUEFUSF9BXS5yZmhzc2lfcGFyYTIgPSBSRlBHQTBfWEFfSFNTSVBBUkFNRVRFUjI7CisJcnRscGh5LT5waHlyZWdfZGVmW1JGOTBfUEFUSF9CXS5yZmhzc2lfcGFyYTIgPSBSRlBHQTBfWEJfSFNTSVBBUkFNRVRFUjI7CisKKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0FdLnJmc3dpdGNoX2NvbnRyb2wgPQorCSAgICBSRlBHQTBfWEFCX1NXSVRDSENPTlRST0w7CisJcnRscGh5LT5waHlyZWdfZGVmW1JGOTBfUEFUSF9CXS5yZnN3aXRjaF9jb250cm9sID0KKwkgICAgUkZQR0EwX1hBQl9TV0lUQ0hDT05UUk9MOworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfQ10ucmZzd2l0Y2hfY29udHJvbCA9CisJICAgIFJGUEdBMF9YQ0RfU1dJVENIQ09OVFJPTDsKKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0RdLnJmc3dpdGNoX2NvbnRyb2wgPQorCSAgICBSRlBHQTBfWENEX1NXSVRDSENPTlRST0w7CisKKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0FdLnJmYWdjX2NvbnRyb2wxID0gUk9GRE0wX1hBQUdDQ09SRTE7CisJcnRscGh5LT5waHlyZWdfZGVmW1JGOTBfUEFUSF9CXS5yZmFnY19jb250cm9sMSA9IFJPRkRNMF9YQkFHQ0NPUkUxOworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfQ10ucmZhZ2NfY29udHJvbDEgPSBST0ZETTBfWENBR0NDT1JFMTsKKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0RdLnJmYWdjX2NvbnRyb2wxID0gUk9GRE0wX1hEQUdDQ09SRTE7CisKKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0FdLnJmYWdjX2NvbnRyb2wyID0gUk9GRE0wX1hBQUdDQ09SRTI7CisJcnRscGh5LT5waHlyZWdfZGVmW1JGOTBfUEFUSF9CXS5yZmFnY19jb250cm9sMiA9IFJPRkRNMF9YQkFHQ0NPUkUyOworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfQ10ucmZhZ2NfY29udHJvbDIgPSBST0ZETTBfWENBR0NDT1JFMjsKKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0RdLnJmYWdjX2NvbnRyb2wyID0gUk9GRE0wX1hEQUdDQ09SRTI7CisKKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0FdLnJmcnhpcV9pbWJhbGFuY2UgPQorCSAgICBST0ZETTBfWEFSWElRSU1CQUxBTkNFOworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfQl0ucmZyeGlxX2ltYmFsYW5jZSA9CisJICAgIFJPRkRNMF9YQlJYSVFJTUJBTEFOQ0U7CisJcnRscGh5LT5waHlyZWdfZGVmW1JGOTBfUEFUSF9DXS5yZnJ4aXFfaW1iYWxhbmNlID0KKwkgICAgUk9GRE0wX1hDUlhJUUlNQkFOTEFOQ0U7CisJcnRscGh5LT5waHlyZWdfZGVmW1JGOTBfUEFUSF9EXS5yZnJ4aXFfaW1iYWxhbmNlID0KKwkgICAgUk9GRE0wX1hEUlhJUUlNQkFMQU5DRTsKKworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfQV0ucmZyeF9hZmUgPSBST0ZETTBfWEFSWEFGRTsKKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0JdLnJmcnhfYWZlID0gUk9GRE0wX1hCUlhBRkU7CisJcnRscGh5LT5waHlyZWdfZGVmW1JGOTBfUEFUSF9DXS5yZnJ4X2FmZSA9IFJPRkRNMF9YQ1JYQUZFOworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfRF0ucmZyeF9hZmUgPSBST0ZETTBfWERSWEFGRTsKKworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfQV0ucmZ0eGlxX2ltYmFsYW5jZSA9CisJICAgIFJPRkRNMF9YQVRYSVFJTUJBTEFOQ0U7CisJcnRscGh5LT5waHlyZWdfZGVmW1JGOTBfUEFUSF9CXS5yZnR4aXFfaW1iYWxhbmNlID0KKwkgICAgUk9GRE0wX1hCVFhJUUlNQkFMQU5DRTsKKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0NdLnJmdHhpcV9pbWJhbGFuY2UgPQorCSAgICBST0ZETTBfWENUWElRSU1CQUxBTkNFOworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfRF0ucmZ0eGlxX2ltYmFsYW5jZSA9CisJICAgIFJPRkRNMF9YRFRYSVFJTUJBTEFOQ0U7CisKKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0FdLnJmdHhfYWZlID0gUk9GRE0wX1hBVFhBRkU7CisJcnRscGh5LT5waHlyZWdfZGVmW1JGOTBfUEFUSF9CXS5yZnR4X2FmZSA9IFJPRkRNMF9YQlRYQUZFOworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfQ10ucmZ0eF9hZmUgPSBST0ZETTBfWENUWEFGRTsKKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0RdLnJmdHhfYWZlID0gUk9GRE0wX1hEVFhBRkU7CisKKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0FdLnJmbHNzaV9yZWFkYmFjayA9CisJICAgIFJGUEdBMF9YQV9MU1NJUkVBREJBQ0s7CisJcnRscGh5LT5waHlyZWdfZGVmW1JGOTBfUEFUSF9CXS5yZmxzc2lfcmVhZGJhY2sgPQorCSAgICBSRlBHQTBfWEJfTFNTSVJFQURCQUNLOworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfQ10ucmZsc3NpX3JlYWRiYWNrID0KKwkgICAgUkZQR0EwX1hDX0xTU0lSRUFEQkFDSzsKKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0RdLnJmbHNzaV9yZWFkYmFjayA9CisJICAgIFJGUEdBMF9YRF9MU1NJUkVBREJBQ0s7CisKKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0FdLnJmbHNzaV9yZWFkYmFja3BpID0KKwkgICAgVFJBTlNDRUlWRUFfSFNQSV9SRUFEQkFDSzsKKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0JdLnJmbHNzaV9yZWFkYmFja3BpID0KKwkgICAgVFJBTlNDRUlWRUJfSFNQSV9SRUFEQkFDSzsKKworfQorCit2b2lkIHJ0bDkyY19waHlfZ2V0X3R4cG93ZXJfbGV2ZWwoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGxvbmcgKnBvd2VybGV2ZWwpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGh5ICpydGxwaHkgPSAmKHJ0bHByaXYtPnBoeSk7CisJc3RydWN0IHJ0bF9lZnVzZSAqcnRsZWZ1c2UgPSBydGxfZWZ1c2UocnRsX3ByaXYoaHcpKTsKKwl1OCB0eHB3cl9sZXZlbDsKKwlsb25nIHR4cHdyX2RibTsKKworCXR4cHdyX2xldmVsID0gcnRscGh5LT5jdXJfY2NrX3R4cHdyaWR4OworCXR4cHdyX2RibSA9IF9ydGw5MmNfcGh5X3R4cHdyX2lkeF90b19kYm0oaHcsCisJCQkJCQkgV0lSRUxFU1NfTU9ERV9CLCB0eHB3cl9sZXZlbCk7CisJdHhwd3JfbGV2ZWwgPSBydGxwaHktPmN1cl9vZmRtMjRnX3R4cHdyaWR4ICsKKwkgICAgcnRsZWZ1c2UtPmxlZ2FjeV9odF90eHBvd2VyZGlmZjsKKwlpZiAoX3J0bDkyY19waHlfdHhwd3JfaWR4X3RvX2RibShodywKKwkJCQkJIFdJUkVMRVNTX01PREVfRywKKwkJCQkJIHR4cHdyX2xldmVsKSA+IHR4cHdyX2RibSkKKwkJdHhwd3JfZGJtID0KKwkJICAgIF9ydGw5MmNfcGh5X3R4cHdyX2lkeF90b19kYm0oaHcsIFdJUkVMRVNTX01PREVfRywKKwkJCQkJCSB0eHB3cl9sZXZlbCk7CisJdHhwd3JfbGV2ZWwgPSBydGxwaHktPmN1cl9vZmRtMjRnX3R4cHdyaWR4OworCWlmIChfcnRsOTJjX3BoeV90eHB3cl9pZHhfdG9fZGJtKGh3LAorCQkJCQkgV0lSRUxFU1NfTU9ERV9OXzI0RywKKwkJCQkJIHR4cHdyX2xldmVsKSA+IHR4cHdyX2RibSkKKwkJdHhwd3JfZGJtID0KKwkJICAgIF9ydGw5MmNfcGh5X3R4cHdyX2lkeF90b19kYm0oaHcsIFdJUkVMRVNTX01PREVfTl8yNEcsCisJCQkJCQkgdHhwd3JfbGV2ZWwpOworCSpwb3dlcmxldmVsID0gdHhwd3JfZGJtOworfQorCitzdGF0aWMgdm9pZCBfcnRsOTJjX2dldF90eHBvd2VyX2luZGV4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBjaGFubmVsLAorCQkJCSAgICAgIHU4ICpjY2twb3dlcmxldmVsLCB1OCAqb2ZkbXBvd2VybGV2ZWwpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGh5ICpydGxwaHkgPSAmKHJ0bHByaXYtPnBoeSk7CisJc3RydWN0IHJ0bF9lZnVzZSAqcnRsZWZ1c2UgPSBydGxfZWZ1c2UocnRsX3ByaXYoaHcpKTsKKwl1OCBpbmRleCA9IChjaGFubmVsIC0gMSk7CisKKwljY2twb3dlcmxldmVsW1JGOTBfUEFUSF9BXSA9CisJICAgIHJ0bGVmdXNlLT50eHB3cmxldmVsX2Nja1tSRjkwX1BBVEhfQV1baW5kZXhdOworCWNja3Bvd2VybGV2ZWxbUkY5MF9QQVRIX0JdID0KKwkgICAgcnRsZWZ1c2UtPnR4cHdybGV2ZWxfY2NrW1JGOTBfUEFUSF9CXVtpbmRleF07CisJaWYgKGdldF9yZl90eXBlKHJ0bHBoeSkgPT0gUkZfMVQyUiB8fCBnZXRfcmZfdHlwZShydGxwaHkpID09IFJGXzFUMVIpIHsKKwkJb2ZkbXBvd2VybGV2ZWxbUkY5MF9QQVRIX0FdID0KKwkJICAgIHJ0bGVmdXNlLT50eHB3cmxldmVsX2h0NDBfMXNbUkY5MF9QQVRIX0FdW2luZGV4XTsKKwkJb2ZkbXBvd2VybGV2ZWxbUkY5MF9QQVRIX0JdID0KKwkJICAgIHJ0bGVmdXNlLT50eHB3cmxldmVsX2h0NDBfMXNbUkY5MF9QQVRIX0JdW2luZGV4XTsKKwl9IGVsc2UgaWYgKGdldF9yZl90eXBlKHJ0bHBoeSkgPT0gUkZfMlQyUikgeworCQlvZmRtcG93ZXJsZXZlbFtSRjkwX1BBVEhfQV0gPQorCQkgICAgcnRsZWZ1c2UtPnR4cHdybGV2ZWxfaHQ0MF8yc1tSRjkwX1BBVEhfQV1baW5kZXhdOworCQlvZmRtcG93ZXJsZXZlbFtSRjkwX1BBVEhfQl0gPQorCQkgICAgcnRsZWZ1c2UtPnR4cHdybGV2ZWxfaHQ0MF8yc1tSRjkwX1BBVEhfQl1baW5kZXhdOworCX0KK30KKworc3RhdGljIHZvaWQgX3J0bDkyY19jY3hwb3dlcl9pbmRleF9jaGVjayhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkJIHU4IGNoYW5uZWwsIHU4ICpjY2twb3dlcmxldmVsLAorCQkJCQkgdTggKm9mZG1wb3dlcmxldmVsKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BoeSAqcnRscGh5ID0gJihydGxwcml2LT5waHkpOworCisJcnRscGh5LT5jdXJfY2NrX3R4cHdyaWR4ID0gY2NrcG93ZXJsZXZlbFswXTsKKwlydGxwaHktPmN1cl9vZmRtMjRnX3R4cHdyaWR4ID0gb2ZkbXBvd2VybGV2ZWxbMF07Cit9CisKK3ZvaWQgcnRsOTJjX3BoeV9zZXRfdHhwb3dlcl9sZXZlbChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggY2hhbm5lbCkKK3sKKwlzdHJ1Y3QgcnRsX2VmdXNlICpydGxlZnVzZSA9IHJ0bF9lZnVzZShydGxfcHJpdihodykpOworCXU4IGNja3Bvd2VybGV2ZWxbMl0sIG9mZG1wb3dlcmxldmVsWzJdOworCisJaWYgKHJ0bGVmdXNlLT5iX3R4cHdyX2Zyb21lcHJvbSA9PSBmYWxzZSkKKwkJcmV0dXJuOworCV9ydGw5MmNfZ2V0X3R4cG93ZXJfaW5kZXgoaHcsIGNoYW5uZWwsCisJCQkJICAmY2NrcG93ZXJsZXZlbFswXSwgJm9mZG1wb3dlcmxldmVsWzBdKTsKKwlfcnRsOTJjX2NjeHBvd2VyX2luZGV4X2NoZWNrKGh3LAorCQkJCSAgICAgY2hhbm5lbCwgJmNja3Bvd2VybGV2ZWxbMF0sCisJCQkJICAgICAmb2ZkbXBvd2VybGV2ZWxbMF0pOworCXJ0bDkyY19waHlfcmY2MDUyX3NldF9jY2tfdHhwb3dlcihodywgJmNja3Bvd2VybGV2ZWxbMF0pOworCXJ0bDkyY19waHlfcmY2MDUyX3NldF9vZmRtX3R4cG93ZXIoaHcsICZvZmRtcG93ZXJsZXZlbFswXSwgY2hhbm5lbCk7Cit9CisKK2Jvb2wgcnRsOTJjX3BoeV91cGRhdGVfdHhwb3dlcl9kYm0oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGxvbmcgcG93ZXJfaW5kYm0pCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGh5ICpydGxwaHkgPSAmKHJ0bHByaXYtPnBoeSk7CisJc3RydWN0IHJ0bF9lZnVzZSAqcnRsZWZ1c2UgPSBydGxfZWZ1c2UocnRsX3ByaXYoaHcpKTsKKwl1OCBpZHg7CisJdTggcmZfcGF0aDsKKworCXU4IGNja3R4cHdyaWR4ID0gX3J0bDkyY19waHlfZGJtX3RvX3R4cHdyX0lkeChodywKKwkJCQkJCSAgICAgIFdJUkVMRVNTX01PREVfQiwKKwkJCQkJCSAgICAgIHBvd2VyX2luZGJtKTsKKwl1OCBvZmRtdHhwd3JpZHggPSBfcnRsOTJjX3BoeV9kYm1fdG9fdHhwd3JfSWR4KGh3LAorCQkJCQkJICAgICAgIFdJUkVMRVNTX01PREVfTl8yNEcsCisJCQkJCQkgICAgICAgcG93ZXJfaW5kYm0pOworCWlmIChvZmRtdHhwd3JpZHggLSBydGxlZnVzZS0+bGVnYWN5X2h0X3R4cG93ZXJkaWZmID4gMCkKKwkJb2ZkbXR4cHdyaWR4IC09IHJ0bGVmdXNlLT5sZWdhY3lfaHRfdHhwb3dlcmRpZmY7CisJZWxzZQorCQlvZmRtdHhwd3JpZHggPSAwOworCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfVFhBR0MsIERCR19UUkFDRSwKKwkJICgiJWx4IGRCbSwgY2NrdHhwd3JpZHggPSAlZCwgb2ZkbXR4cHdyaWR4ID0gJWRcbiIsCisJCSAgcG93ZXJfaW5kYm0sIGNja3R4cHdyaWR4LCBvZmRtdHhwd3JpZHgpKTsKKwlmb3IgKGlkeCA9IDA7IGlkeCA8IDE0OyBpZHgrKykgeworCQlmb3IgKHJmX3BhdGggPSAwOyByZl9wYXRoIDwgMjsgcmZfcGF0aCsrKSB7CisJCQlydGxlZnVzZS0+dHhwd3JsZXZlbF9jY2tbcmZfcGF0aF1baWR4XSA9IGNja3R4cHdyaWR4OworCQkJcnRsZWZ1c2UtPnR4cHdybGV2ZWxfaHQ0MF8xc1tyZl9wYXRoXVtpZHhdID0KKwkJCSAgICBvZmRtdHhwd3JpZHg7CisJCQlydGxlZnVzZS0+dHhwd3JsZXZlbF9odDQwXzJzW3JmX3BhdGhdW2lkeF0gPQorCQkJICAgIG9mZG10eHB3cmlkeDsKKwkJfQorCX0KKwlydGw5MmNfcGh5X3NldF90eHBvd2VyX2xldmVsKGh3LCBydGxwaHktPmN1cnJlbnRfY2hhbm5lbCk7CisJcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgcnRsOTJjX3BoeV9zZXRfYmVhY29uX2h3X3JlZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTE2IGJlYWNvbmludGVydmFsKQoreworfQorCitzdGF0aWMgdTggX3J0bDkyY19waHlfZGJtX3RvX3R4cHdyX0lkeChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICAgICAgZW51bSB3aXJlbGVzc19tb2RlIHdpcmVsZXNzbW9kZSwKKwkJCQkgICAgICAgbG9uZyBwb3dlcl9pbmRibSkKK3sKKwl1OCB0eHB3cmlkeDsKKwlsb25nIG9mZnNldDsKKworCXN3aXRjaCAod2lyZWxlc3Ntb2RlKSB7CisJY2FzZSBXSVJFTEVTU19NT0RFX0I6CisJCW9mZnNldCA9IC03OworCQlicmVhazsKKwljYXNlIFdJUkVMRVNTX01PREVfRzoKKwljYXNlIFdJUkVMRVNTX01PREVfTl8yNEc6CisJCW9mZnNldCA9IC04OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlvZmZzZXQgPSAtODsKKwkJYnJlYWs7CisJfQorCisJaWYgKChwb3dlcl9pbmRibSAtIG9mZnNldCkgPiAwKQorCQl0eHB3cmlkeCA9ICh1OCkgKChwb3dlcl9pbmRibSAtIG9mZnNldCkgKiAyKTsKKwllbHNlCisJCXR4cHdyaWR4ID0gMDsKKworCWlmICh0eHB3cmlkeCA+IE1BWF9UWFBXUl9JRFhfTk1PREVfOTJTKQorCQl0eHB3cmlkeCA9IE1BWF9UWFBXUl9JRFhfTk1PREVfOTJTOworCisJcmV0dXJuIHR4cHdyaWR4OworfQorCitzdGF0aWMgbG9uZyBfcnRsOTJjX3BoeV90eHB3cl9pZHhfdG9fZGJtKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQkgZW51bSB3aXJlbGVzc19tb2RlIHdpcmVsZXNzbW9kZSwKKwkJCQkJIHU4IHR4cHdyaWR4KQoreworCWxvbmcgb2Zmc2V0OworCWxvbmcgcHdyb3V0X2RibTsKKworCXN3aXRjaCAod2lyZWxlc3Ntb2RlKSB7CisJY2FzZSBXSVJFTEVTU19NT0RFX0I6CisJCW9mZnNldCA9IC03OworCQlicmVhazsKKwljYXNlIFdJUkVMRVNTX01PREVfRzoKKwljYXNlIFdJUkVMRVNTX01PREVfTl8yNEc6CisJCW9mZnNldCA9IC04OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlvZmZzZXQgPSAtODsKKwkJYnJlYWs7CisJfQorCXB3cm91dF9kYm0gPSB0eHB3cmlkeCAvIDIgKyBvZmZzZXQ7CisJcmV0dXJuIHB3cm91dF9kYm07Cit9CisKK3ZvaWQgcnRsOTJjX3BoeV9zY2FuX29wZXJhdGlvbl9iYWNrdXAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IG9wZXJhdGlvbikKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCA9IHJ0bF9oYWwocnRsX3ByaXYoaHcpKTsKKwllbnVtIGlvX3R5cGUgaW90eXBlOworCisJaWYgKCFpc19oYWxfc3RvcChydGxoYWwpKSB7CisJCXN3aXRjaCAob3BlcmF0aW9uKSB7CisJCWNhc2UgU0NBTl9PUFRfQkFDS1VQOgorCQkJaW90eXBlID0gSU9fQ01EX1BBVVNFX0RNX0JZX1NDQU47CisJCQlydGxwcml2LT5jZmctPm9wcy0+c2V0X2h3X3JlZyhodywKKwkJCQkJCSAgICAgIEhXX1ZBUl9JT19DTUQsCisJCQkJCQkgICAgICAodTggKikmaW90eXBlKTsKKworCQkJYnJlYWs7CisJCWNhc2UgU0NBTl9PUFRfUkVTVE9SRToKKwkJCWlvdHlwZSA9IElPX0NNRF9SRVNVTUVfRE1fQllfU0NBTjsKKwkJCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfaHdfcmVnKGh3LAorCQkJCQkJICAgICAgSFdfVkFSX0lPX0NNRCwKKwkJCQkJCSAgICAgICh1OCAqKSZpb3R5cGUpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX0VNRVJHLAorCQkJCSAoIlVua25vd24gU2NhbiBCYWNrdXAgb3BlcmF0aW9uLlxuIikpOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKK3ZvaWQgcnRsOTJjX3BoeV9zZXRfYndfbW9kZV9jYWxsYmFjayhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCA9IHJ0bF9oYWwocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX3BoeSAqcnRscGh5ID0gJihydGxwcml2LT5waHkpOworCXN0cnVjdCBydGxfbWFjICptYWMgPSBydGxfbWFjKHJ0bF9wcml2KGh3KSk7CisJdTggcmVnX2J3X29wbW9kZTsKKwl1OCByZWdfcHJzcl9yc2M7CisKKwlSVF9UUkFDRShydGxwcml2LCBDT01QX1NDQU4sIERCR19UUkFDRSwKKwkJICgiU3dpdGNoIHRvICVzIGJhbmR3aWR0aFxuIiwKKwkJICBydGxwaHktPmN1cnJlbnRfY2hhbl9idyA9PSBIVF9DSEFOTkVMX1dJRFRIXzIwID8KKwkJICAiMjBNSHoiIDogIjQwTUh6IikpCisKKwkgICAgaWYgKGlzX2hhbF9zdG9wKHJ0bGhhbCkpCisJCXJldHVybjsKKworCXJlZ19id19vcG1vZGUgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIFJFR19CV09QTU9ERSk7CisJcmVnX3Byc3JfcnNjID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBSRUdfUlJTUiArIDIpOworCisJc3dpdGNoIChydGxwaHktPmN1cnJlbnRfY2hhbl9idykgeworCWNhc2UgSFRfQ0hBTk5FTF9XSURUSF8yMDoKKwkJcmVnX2J3X29wbW9kZSB8PSBCV19PUE1PREVfMjBNSFo7CisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19CV09QTU9ERSwgcmVnX2J3X29wbW9kZSk7CisJCWJyZWFrOworCisJY2FzZSBIVF9DSEFOTkVMX1dJRFRIXzIwXzQwOgorCQlyZWdfYndfb3Btb2RlICY9IH5CV19PUE1PREVfMjBNSFo7CisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19CV09QTU9ERSwgcmVnX2J3X29wbW9kZSk7CisKKwkJcmVnX3Byc3JfcnNjID0KKwkJICAgIChyZWdfcHJzcl9yc2MgJiAweDkwKSB8IChtYWMtPmN1cl80MF9wcmltZV9zYyA8PCA1KTsKKwkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX1JSU1IgKyAyLCByZWdfcHJzcl9yc2MpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfRU1FUkcsCisJCQkgKCJ1bmtub3duIGJhbmR3aWR0aDogJSNYXG4iLCBydGxwaHktPmN1cnJlbnRfY2hhbl9idykpOworCQlicmVhazsKKwl9CisKKwlzd2l0Y2ggKHJ0bHBoeS0+Y3VycmVudF9jaGFuX2J3KSB7CisJY2FzZSBIVF9DSEFOTkVMX1dJRFRIXzIwOgorCQlydGxfc2V0X2JicmVnKGh3LCBSRlBHQTBfUkZNT0QsIEJSRk1PRCwgMHgwKTsKKwkJcnRsX3NldF9iYnJlZyhodywgUkZQR0ExX1JGTU9ELCBCUkZNT0QsIDB4MCk7CisJCXJ0bF9zZXRfYmJyZWcoaHcsIFJGUEdBMF9BTkFMT0dQQVJBTUVURVIyLCBCSVQoMTApLCAxKTsKKwkJYnJlYWs7CisJY2FzZSBIVF9DSEFOTkVMX1dJRFRIXzIwXzQwOgorCQlydGxfc2V0X2JicmVnKGh3LCBSRlBHQTBfUkZNT0QsIEJSRk1PRCwgMHgxKTsKKwkJcnRsX3NldF9iYnJlZyhodywgUkZQR0ExX1JGTU9ELCBCUkZNT0QsIDB4MSk7CisJCXJ0bF9zZXRfYmJyZWcoaHcsIFJDQ0swX1NZU1RFTSwgQkNDS19TSURFQkFORCwKKwkJCSAgICAgIChtYWMtPmN1cl80MF9wcmltZV9zYyA+PiAxKSk7CisJCXJ0bF9zZXRfYmJyZWcoaHcsIFJPRkRNMV9MU1RGLCAweEMwMCwgbWFjLT5jdXJfNDBfcHJpbWVfc2MpOworCQlydGxfc2V0X2JicmVnKGh3LCBSRlBHQTBfQU5BTE9HUEFSQU1FVEVSMiwgQklUKDEwKSwgMCk7CisJCXJ0bF9zZXRfYmJyZWcoaHcsIDB4ODE4LCAoQklUKDI2KSB8IEJJVCgyNykpLAorCQkJICAgICAgKG1hYy0+Y3VyXzQwX3ByaW1lX3NjID09CisJCQkgICAgICAgSEFMX1BSSU1FX0NITkxfT0ZGU0VUX0xPV0VSKSA/IDIgOiAxKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19FTUVSRywKKwkJCSAoInVua25vd24gYmFuZHdpZHRoOiAlI1hcbiIsIHJ0bHBoeS0+Y3VycmVudF9jaGFuX2J3KSk7CisJCWJyZWFrOworCX0KKwlydGw5MmNfcGh5X3JmNjA1Ml9zZXRfYmFuZHdpZHRoKGh3LCBydGxwaHktPmN1cnJlbnRfY2hhbl9idyk7CisJcnRscGh5LT5zZXRfYndtb2RlX2lucHJvZ3Jlc3MgPSBmYWxzZTsKKwlSVF9UUkFDRShydGxwcml2LCBDT01QX1NDQU4sIERCR19UUkFDRSwgKCI8PT1cbiIpKTsKK30KKwordm9pZCBydGw5MmNfcGh5X3NldF9id19tb2RlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJICAgIGVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgY2hfdHlwZSkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKKwlzdHJ1Y3QgcnRsX2hhbCAqcnRsaGFsID0gcnRsX2hhbChydGxfcHJpdihodykpOworCXU4IHRtcF9idyA9IHJ0bHBoeS0+Y3VycmVudF9jaGFuX2J3OworCisJaWYgKHJ0bHBoeS0+c2V0X2J3bW9kZV9pbnByb2dyZXNzKQorCQlyZXR1cm47CisJcnRscGh5LT5zZXRfYndtb2RlX2lucHJvZ3Jlc3MgPSB0cnVlOworCWlmICgoIWlzX2hhbF9zdG9wKHJ0bGhhbCkpICYmICEoUlRfQ0FOTk9UX0lPKGh3KSkpCisJCXJ0bDkyY19waHlfc2V0X2J3X21vZGVfY2FsbGJhY2soaHcpOworCWVsc2UgeworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX1dBUk5JTkcsCisJCQkgKCJGQUxTRSBkcml2ZXIgc2xlZXAgb3IgdW5sb2FkXG4iKSk7CisJCXJ0bHBoeS0+c2V0X2J3bW9kZV9pbnByb2dyZXNzID0gZmFsc2U7CisJCXJ0bHBoeS0+Y3VycmVudF9jaGFuX2J3ID0gdG1wX2J3OworCX0KK30KKwordm9pZCBydGw5MmNfcGh5X3N3X2NobmxfY2FsbGJhY2soc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bF9wcml2KGh3KSk7CisJc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKKwl1MzIgZGVsYXk7CisKKwlSVF9UUkFDRShydGxwcml2LCBDT01QX1NDQU4sIERCR19UUkFDRSwKKwkJICgic3dpdGNoIHRvIGNoYW5uZWwlZFxuIiwgcnRscGh5LT5jdXJyZW50X2NoYW5uZWwpKTsKKwlpZiAoaXNfaGFsX3N0b3AocnRsaGFsKSkKKwkJcmV0dXJuOworCWRvIHsKKwkJaWYgKCFydGxwaHktPnN3X2NobmxfaW5wcm9ncmVzcykKKwkJCWJyZWFrOworCQlpZiAoIV9ydGw5MmNfcGh5X3N3X2Nobmxfc3RlcF9ieV9zdGVwCisJCSAgICAoaHcsIHJ0bHBoeS0+Y3VycmVudF9jaGFubmVsLCAmcnRscGh5LT5zd19jaG5sX3N0YWdlLAorCQkgICAgICZydGxwaHktPnN3X2Nobmxfc3RlcCwgJmRlbGF5KSkgeworCQkJaWYgKGRlbGF5ID4gMCkKKwkJCQltZGVsYXkoZGVsYXkpOworCQkJZWxzZQorCQkJCWNvbnRpbnVlOworCQl9IGVsc2UKKwkJCXJ0bHBoeS0+c3dfY2hubF9pbnByb2dyZXNzID0gZmFsc2U7CisJCWJyZWFrOworCX0gd2hpbGUgKHRydWUpOworCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfU0NBTiwgREJHX1RSQUNFLCAoIjw9PVxuIikpOworfQorCit1OCBydGw5MmNfcGh5X3N3X2Nobmwoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGh5ICpydGxwaHkgPSAmKHJ0bHByaXYtPnBoeSk7CisJc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCA9IHJ0bF9oYWwocnRsX3ByaXYoaHcpKTsKKworCWlmIChydGxwaHktPnN3X2NobmxfaW5wcm9ncmVzcykKKwkJcmV0dXJuIDA7CisJaWYgKHJ0bHBoeS0+c2V0X2J3bW9kZV9pbnByb2dyZXNzKQorCQlyZXR1cm4gMDsKKwlSVF9BU1NFUlQoKHJ0bHBoeS0+Y3VycmVudF9jaGFubmVsIDw9IDE0KSwKKwkJICAoIldJUkVMRVNTX01PREVfRyBidXQgY2hhbm5lbD4xNCIpKTsKKwlydGxwaHktPnN3X2NobmxfaW5wcm9ncmVzcyA9IHRydWU7CisJcnRscGh5LT5zd19jaG5sX3N0YWdlID0gMDsKKwlydGxwaHktPnN3X2Nobmxfc3RlcCA9IDA7CisJaWYgKCEoaXNfaGFsX3N0b3AocnRsaGFsKSkgJiYgIShSVF9DQU5OT1RfSU8oaHcpKSkgeworCQlydGw5MmNfcGh5X3N3X2NobmxfY2FsbGJhY2soaHcpOworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0NIQU4sIERCR19MT1VELAorCQkJICgic3dfY2hubF9pbnByb2dyZXNzIGZhbHNlIHNjaGR1bGUgd29ya2l0ZW1cbiIpKTsKKwkJcnRscGh5LT5zd19jaG5sX2lucHJvZ3Jlc3MgPSBmYWxzZTsKKwl9IGVsc2UgeworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0NIQU4sIERCR19MT1VELAorCQkJICgic3dfY2hubF9pbnByb2dyZXNzIGZhbHNlIGRyaXZlciBzbGVlcCBvciIKKwkJCSAgIiB1bmxvYWRcbiIpKTsKKwkJcnRscGh5LT5zd19jaG5sX2lucHJvZ3Jlc3MgPSBmYWxzZTsKKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBib29sIF9ydGw5MmNfcGh5X3N3X2Nobmxfc3RlcF9ieV9zdGVwKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQkgICAgIHU4IGNoYW5uZWwsIHU4ICpzdGFnZSwgdTggKnN0ZXAsCisJCQkJCSAgICAgdTMyICpkZWxheSkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKKwlzdHJ1Y3Qgc3djaG5sY21kIHByZWNvbW1vbmNtZFtNQVhfUFJFQ01EX0NOVF07CisJdTMyIHByZWNvbW1vbmNtZGNudDsKKwlzdHJ1Y3Qgc3djaG5sY21kIHBvc3Rjb21tb25jbWRbTUFYX1BPU1RDTURfQ05UXTsKKwl1MzIgcG9zdGNvbW1vbmNtZGNudDsKKwlzdHJ1Y3Qgc3djaG5sY21kIHJmZGVwZW5kY21kW01BWF9SRkRFUEVORENNRF9DTlRdOworCXUzMiByZmRlcGVuZGNtZGNudDsKKwlzdHJ1Y3Qgc3djaG5sY21kICpjdXJyZW50Y21kID0gTlVMTDsKKwl1OCByZnBhdGg7CisJdTggbnVtX3RvdGFsX3JmcGF0aCA9IHJ0bHBoeS0+bnVtX3RvdGFsX3JmcGF0aDsKKworCXByZWNvbW1vbmNtZGNudCA9IDA7CisJX3J0bDkyY19waHlfc2V0X3N3X2NobmxfY21kYXJyYXkocHJlY29tbW9uY21kLCBwcmVjb21tb25jbWRjbnQrKywKKwkJCQkJIE1BWF9QUkVDTURfQ05ULAorCQkJCQkgQ01ESURfU0VUX1RYUE9XRVJPV0VSX0xFVkVMLCAwLCAwLCAwKTsKKwlfcnRsOTJjX3BoeV9zZXRfc3dfY2hubF9jbWRhcnJheShwcmVjb21tb25jbWQsIHByZWNvbW1vbmNtZGNudCsrLAorCQkJCQkgTUFYX1BSRUNNRF9DTlQsIENNRElEX0VORCwgMCwgMCwgMCk7CisKKwlwb3N0Y29tbW9uY21kY250ID0gMDsKKworCV9ydGw5MmNfcGh5X3NldF9zd19jaG5sX2NtZGFycmF5KHBvc3Rjb21tb25jbWQsIHBvc3Rjb21tb25jbWRjbnQrKywKKwkJCQkJIE1BWF9QT1NUQ01EX0NOVCwgQ01ESURfRU5ELCAwLCAwLCAwKTsKKworCXJmZGVwZW5kY21kY250ID0gMDsKKworCVJUX0FTU0VSVCgoY2hhbm5lbCA+PSAxICYmIGNoYW5uZWwgPD0gMTQpLAorCQkgICgiaWxsZWdhbCBjaGFubmVsIGZvciBaZWJyYTogJWRcbiIsIGNoYW5uZWwpKTsKKworCV9ydGw5MmNfcGh5X3NldF9zd19jaG5sX2NtZGFycmF5KHJmZGVwZW5kY21kLCByZmRlcGVuZGNtZGNudCsrLAorCQkJCQkgTUFYX1JGREVQRU5EQ01EX0NOVCwgQ01ESURfUkZfV1JJVEVSRUcsCisJCQkJCSBSRl9DSE5MQlcsIGNoYW5uZWwsIDEwKTsKKworCV9ydGw5MmNfcGh5X3NldF9zd19jaG5sX2NtZGFycmF5KHJmZGVwZW5kY21kLCByZmRlcGVuZGNtZGNudCsrLAorCQkJCQkgTUFYX1JGREVQRU5EQ01EX0NOVCwgQ01ESURfRU5ELCAwLCAwLAorCQkJCQkgMCk7CisKKwlkbyB7CisJCXN3aXRjaCAoKnN0YWdlKSB7CisJCWNhc2UgMDoKKwkJCWN1cnJlbnRjbWQgPSAmcHJlY29tbW9uY21kWypzdGVwXTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQljdXJyZW50Y21kID0gJnJmZGVwZW5kY21kWypzdGVwXTsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQljdXJyZW50Y21kID0gJnBvc3Rjb21tb25jbWRbKnN0ZXBdOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoY3VycmVudGNtZC0+Y21kaWQgPT0gQ01ESURfRU5EKSB7CisJCQlpZiAoKCpzdGFnZSkgPT0gMikgeworCQkJCXJldHVybiB0cnVlOworCQkJfSBlbHNlIHsKKwkJCQkoKnN0YWdlKSsrOworCQkJCSgqc3RlcCkgPSAwOworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisKKwkJc3dpdGNoIChjdXJyZW50Y21kLT5jbWRpZCkgeworCQljYXNlIENNRElEX1NFVF9UWFBPV0VST1dFUl9MRVZFTDoKKwkJCXJ0bDkyY19waHlfc2V0X3R4cG93ZXJfbGV2ZWwoaHcsIGNoYW5uZWwpOworCQkJYnJlYWs7CisJCWNhc2UgQ01ESURfV1JJVEVQT1JUX1VMT05HOgorCQkJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIGN1cnJlbnRjbWQtPnBhcmExLAorCQkJCQljdXJyZW50Y21kLT5wYXJhMik7CisJCQlicmVhazsKKwkJY2FzZSBDTURJRF9XUklURVBPUlRfVVNIT1JUOgorCQkJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgY3VycmVudGNtZC0+cGFyYTEsCisJCQkJICAgICAgICh1MTYpIGN1cnJlbnRjbWQtPnBhcmEyKTsKKwkJCWJyZWFrOworCQljYXNlIENNRElEX1dSSVRFUE9SVF9VQ0hBUjoKKwkJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIGN1cnJlbnRjbWQtPnBhcmExLAorCQkJCSAgICAgICAodTgpIGN1cnJlbnRjbWQtPnBhcmEyKTsKKwkJCWJyZWFrOworCQljYXNlIENNRElEX1JGX1dSSVRFUkVHOgorCQkJZm9yIChyZnBhdGggPSAwOyByZnBhdGggPCBudW1fdG90YWxfcmZwYXRoOyByZnBhdGgrKykgeworCQkJCXJ0bHBoeS0+cmZyZWdfY2hubHZhbFtyZnBhdGhdID0KKwkJCQkgICAgKChydGxwaHktPnJmcmVnX2Nobmx2YWxbcmZwYXRoXSAmCisJCQkJICAgICAgMHhmZmZmZmMwMCkgfCBjdXJyZW50Y21kLT5wYXJhMik7CisKKwkJCQlydGxfc2V0X3JmcmVnKGh3LCAoZW51bSByYWRpb19wYXRoKXJmcGF0aCwKKwkJCQkJICAgICAgY3VycmVudGNtZC0+cGFyYTEsCisJCQkJCSAgICAgIFJGUkVHX09GRlNFVF9NQVNLLAorCQkJCQkgICAgICBydGxwaHktPnJmcmVnX2Nobmx2YWxbcmZwYXRoXSk7CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfRU1FUkcsCisJCQkJICgic3dpdGNoIGNhc2Ugbm90IHByb2Nlc3NcbiIpKTsKKwkJCWJyZWFrOworCQl9CisKKwkJYnJlYWs7CisJfSB3aGlsZSAodHJ1ZSk7CisKKwkoKmRlbGF5KSA9IGN1cnJlbnRjbWQtPm1zZGVsYXk7CisJKCpzdGVwKSsrOworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGJvb2wgX3J0bDkyY19waHlfc2V0X3N3X2NobmxfY21kYXJyYXkoc3RydWN0IHN3Y2hubGNtZCAqY21kdGFibGUsCisJCQkJCSAgICAgdTMyIGNtZHRhYmxlaWR4LCB1MzIgY21kdGFibGVzeiwKKwkJCQkJICAgICBlbnVtIHN3Y2hubGNtZF9pZCBjbWRpZCwKKwkJCQkJICAgICB1MzIgcGFyYTEsIHUzMiBwYXJhMiwgdTMyIG1zZGVsYXkpCit7CisJc3RydWN0IHN3Y2hubGNtZCAqcGNtZDsKKworCWlmIChjbWR0YWJsZSA9PSBOVUxMKSB7CisJCVJUX0FTU0VSVChmYWxzZSwgKCJjbWR0YWJsZSBjYW5ub3QgYmUgTlVMTC5cbiIpKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWlmIChjbWR0YWJsZWlkeCA+PSBjbWR0YWJsZXN6KQorCQlyZXR1cm4gZmFsc2U7CisKKwlwY21kID0gY21kdGFibGUgKyBjbWR0YWJsZWlkeDsKKwlwY21kLT5jbWRpZCA9IGNtZGlkOworCXBjbWQtPnBhcmExID0gcGFyYTE7CisJcGNtZC0+cGFyYTIgPSBwYXJhMjsKKwlwY21kLT5tc2RlbGF5ID0gbXNkZWxheTsKKwlyZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBydGw4MTkyX3BoeV9jaGVja19pc19sZWdhbF9yZnBhdGgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiByZnBhdGgpCit7CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB1OCBfcnRsOTJjX3BoeV9wYXRoX2FfaXFrKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBib29sIGNvbmZpZ19wYXRoYikKK3sKKwl1MzIgcmVnX2VhYywgcmVnX2U5NCwgcmVnX2U5YywgcmVnX2VhNDsKKwl1OCByZXN1bHQgPSAweDAwOworCisJcnRsX3NldF9iYnJlZyhodywgMHhlMzAsIE1BU0tEV09SRCwgMHgxMDAwOGMxZik7CisJcnRsX3NldF9iYnJlZyhodywgMHhlMzQsIE1BU0tEV09SRCwgMHgxMDAwOGMxZik7CisJcnRsX3NldF9iYnJlZyhodywgMHhlMzgsIE1BU0tEV09SRCwgMHg4MjE0MDEwMik7CisJcnRsX3NldF9iYnJlZyhodywgMHhlM2MsIE1BU0tEV09SRCwKKwkJICAgICAgY29uZmlnX3BhdGhiID8gMHgyODE2MDIwMiA6IDB4MjgxNjA1MDIpOworCisJaWYgKGNvbmZpZ19wYXRoYikgeworCQlydGxfc2V0X2JicmVnKGh3LCAweGU1MCwgTUFTS0RXT1JELCAweDEwMDA4YzIyKTsKKwkJcnRsX3NldF9iYnJlZyhodywgMHhlNTQsIE1BU0tEV09SRCwgMHgxMDAwOGMyMik7CisJCXJ0bF9zZXRfYmJyZWcoaHcsIDB4ZTU4LCBNQVNLRFdPUkQsIDB4ODIxNDAxMDIpOworCQlydGxfc2V0X2JicmVnKGh3LCAweGU1YywgTUFTS0RXT1JELCAweDI4MTYwMjAyKTsKKwl9CisKKwlydGxfc2V0X2JicmVnKGh3LCAweGU0YywgTUFTS0RXT1JELCAweDAwMTAyOGQxKTsKKwlydGxfc2V0X2JicmVnKGh3LCAweGU0OCwgTUFTS0RXT1JELCAweGY5MDAwMDAwKTsKKwlydGxfc2V0X2JicmVnKGh3LCAweGU0OCwgTUFTS0RXT1JELCAweGY4MDAwMDAwKTsKKworCW1kZWxheShJUUtfREVMQVlfVElNRSk7CisKKwlyZWdfZWFjID0gcnRsX2dldF9iYnJlZyhodywgMHhlYWMsIE1BU0tEV09SRCk7CisJcmVnX2U5NCA9IHJ0bF9nZXRfYmJyZWcoaHcsIDB4ZTk0LCBNQVNLRFdPUkQpOworCXJlZ19lOWMgPSBydGxfZ2V0X2JicmVnKGh3LCAweGU5YywgTUFTS0RXT1JEKTsKKwlyZWdfZWE0ID0gcnRsX2dldF9iYnJlZyhodywgMHhlYTQsIE1BU0tEV09SRCk7CisKKwlpZiAoIShyZWdfZWFjICYgQklUKDI4KSkgJiYKKwkgICAgKCgocmVnX2U5NCAmIDB4MDNGRjAwMDApID4+IDE2KSAhPSAweDE0MikgJiYKKwkgICAgKCgocmVnX2U5YyAmIDB4MDNGRjAwMDApID4+IDE2KSAhPSAweDQyKSkKKwkJcmVzdWx0IHw9IDB4MDE7CisJZWxzZQorCQlyZXR1cm4gcmVzdWx0OworCisJaWYgKCEocmVnX2VhYyAmIEJJVCgyNykpICYmCisJICAgICgoKHJlZ19lYTQgJiAweDAzRkYwMDAwKSA+PiAxNikgIT0gMHgxMzIpICYmCisJICAgICgoKHJlZ19lYWMgJiAweDAzRkYwMDAwKSA+PiAxNikgIT0gMHgzNikpCisJCXJlc3VsdCB8PSAweDAyOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB1OCBfcnRsOTJjX3BoeV9wYXRoX2JfaXFrKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXUzMiByZWdfZWFjLCByZWdfZWI0LCByZWdfZWJjLCByZWdfZWM0LCByZWdfZWNjOworCXU4IHJlc3VsdCA9IDB4MDA7CisKKwlydGxfc2V0X2JicmVnKGh3LCAweGU2MCwgTUFTS0RXT1JELCAweDAwMDAwMDAyKTsKKwlydGxfc2V0X2JicmVnKGh3LCAweGU2MCwgTUFTS0RXT1JELCAweDAwMDAwMDAwKTsKKwltZGVsYXkoSVFLX0RFTEFZX1RJTUUpOworCXJlZ19lYWMgPSBydGxfZ2V0X2JicmVnKGh3LCAweGVhYywgTUFTS0RXT1JEKTsKKwlyZWdfZWI0ID0gcnRsX2dldF9iYnJlZyhodywgMHhlYjQsIE1BU0tEV09SRCk7CisJcmVnX2ViYyA9IHJ0bF9nZXRfYmJyZWcoaHcsIDB4ZWJjLCBNQVNLRFdPUkQpOworCXJlZ19lYzQgPSBydGxfZ2V0X2JicmVnKGh3LCAweGVjNCwgTUFTS0RXT1JEKTsKKwlyZWdfZWNjID0gcnRsX2dldF9iYnJlZyhodywgMHhlY2MsIE1BU0tEV09SRCk7CisJaWYgKCEocmVnX2VhYyAmIEJJVCgzMSkpICYmCisJICAgICgoKHJlZ19lYjQgJiAweDAzRkYwMDAwKSA+PiAxNikgIT0gMHgxNDIpICYmCisJICAgICgoKHJlZ19lYmMgJiAweDAzRkYwMDAwKSA+PiAxNikgIT0gMHg0MikpCisJCXJlc3VsdCB8PSAweDAxOworCWVsc2UKKwkJcmV0dXJuIHJlc3VsdDsKKworCWlmICghKHJlZ19lYWMgJiBCSVQoMzApKSAmJgorCSAgICAoKChyZWdfZWM0ICYgMHgwM0ZGMDAwMCkgPj4gMTYpICE9IDB4MTMyKSAmJgorCSAgICAoKChyZWdfZWNjICYgMHgwM0ZGMDAwMCkgPj4gMTYpICE9IDB4MzYpKQorCQlyZXN1bHQgfD0gMHgwMjsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCBfcnRsOTJjX3BoeV9wYXRoX2FfZmlsbF9pcWtfbWF0cml4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQkgICAgICAgYm9vbCBiX2lxa19vaywgbG9uZyByZXN1bHRbXVs4XSwKKwkJCQkJICAgICAgIHU4IGZpbmFsX2NhbmRpZGF0ZSwgYm9vbCBidHhvbmx5KQoreworCXUzMiBvbGR2YWxfMCwgeCwgdHgwX2EsIHJlZzsKKwlsb25nIHksIHR4MF9jOworCisJaWYgKGZpbmFsX2NhbmRpZGF0ZSA9PSAweEZGKQorCQlyZXR1cm47CisJZWxzZSBpZiAoYl9pcWtfb2spIHsKKwkJb2xkdmFsXzAgPSAocnRsX2dldF9iYnJlZyhodywgUk9GRE0wX1hBVFhJUUlNQkFMQU5DRSwKKwkJCQkJICBNQVNLRFdPUkQpID4+IDIyKSAmIDB4M0ZGOworCQl4ID0gcmVzdWx0W2ZpbmFsX2NhbmRpZGF0ZV1bMF07CisJCWlmICgoeCAmIDB4MDAwMDAyMDApICE9IDApCisJCQl4ID0geCB8IDB4RkZGRkZDMDA7CisJCXR4MF9hID0gKHggKiBvbGR2YWxfMCkgPj4gODsKKwkJcnRsX3NldF9iYnJlZyhodywgUk9GRE0wX1hBVFhJUUlNQkFMQU5DRSwgMHgzRkYsIHR4MF9hKTsKKwkJcnRsX3NldF9iYnJlZyhodywgUk9GRE0wX0VDQ0FUSFJFU0hPTEQsIEJJVCgzMSksCisJCQkgICAgICAoKHggKiBvbGR2YWxfMCA+PiA3KSAmIDB4MSkpOworCQl5ID0gcmVzdWx0W2ZpbmFsX2NhbmRpZGF0ZV1bMV07CisJCWlmICgoeSAmIDB4MDAwMDAyMDApICE9IDApCisJCQl5ID0geSB8IDB4RkZGRkZDMDA7CisJCXR4MF9jID0gKHkgKiBvbGR2YWxfMCkgPj4gODsKKwkJcnRsX3NldF9iYnJlZyhodywgUk9GRE0wX1hDVFhBRkUsIDB4RjAwMDAwMDAsCisJCQkgICAgICAoKHR4MF9jICYgMHgzQzApID4+IDYpKTsKKwkJcnRsX3NldF9iYnJlZyhodywgUk9GRE0wX1hBVFhJUUlNQkFMQU5DRSwgMHgwMDNGMDAwMCwKKwkJCSAgICAgICh0eDBfYyAmIDB4M0YpKTsKKwkJcnRsX3NldF9iYnJlZyhodywgUk9GRE0wX0VDQ0FUSFJFU0hPTEQsIEJJVCgyOSksCisJCQkgICAgICAoKHkgKiBvbGR2YWxfMCA+PiA3KSAmIDB4MSkpOworCQlpZiAoYnR4b25seSkKKwkJCXJldHVybjsKKwkJcmVnID0gcmVzdWx0W2ZpbmFsX2NhbmRpZGF0ZV1bMl07CisJCXJ0bF9zZXRfYmJyZWcoaHcsIFJPRkRNMF9YQVJYSVFJTUJBTEFOQ0UsIDB4M0ZGLCByZWcpOworCQlyZWcgPSByZXN1bHRbZmluYWxfY2FuZGlkYXRlXVszXSAmIDB4M0Y7CisJCXJ0bF9zZXRfYmJyZWcoaHcsIFJPRkRNMF9YQVJYSVFJTUJBTEFOQ0UsIDB4RkMwMCwgcmVnKTsKKwkJcmVnID0gKHJlc3VsdFtmaW5hbF9jYW5kaWRhdGVdWzNdID4+IDYpICYgMHhGOworCQlydGxfc2V0X2JicmVnKGh3LCAweGNhMCwgMHhGMDAwMDAwMCwgcmVnKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9ydGw5MmNfcGh5X3BhdGhfYl9maWxsX2lxa19tYXRyaXgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJCSAgICAgICBib29sIGJfaXFrX29rLCBsb25nIHJlc3VsdFtdWzhdLAorCQkJCQkgICAgICAgdTggZmluYWxfY2FuZGlkYXRlLCBib29sIGJ0eG9ubHkpCit7CisJdTMyIG9sZHZhbF8xLCB4LCB0eDFfYSwgcmVnOworCWxvbmcgeSwgdHgxX2M7CisKKwlpZiAoZmluYWxfY2FuZGlkYXRlID09IDB4RkYpCisJCXJldHVybjsKKwllbHNlIGlmIChiX2lxa19vaykgeworCQlvbGR2YWxfMSA9IChydGxfZ2V0X2JicmVnKGh3LCBST0ZETTBfWEJUWElRSU1CQUxBTkNFLAorCQkJCQkgIE1BU0tEV09SRCkgPj4gMjIpICYgMHgzRkY7CisJCXggPSByZXN1bHRbZmluYWxfY2FuZGlkYXRlXVs0XTsKKwkJaWYgKCh4ICYgMHgwMDAwMDIwMCkgIT0gMCkKKwkJCXggPSB4IHwgMHhGRkZGRkMwMDsKKwkJdHgxX2EgPSAoeCAqIG9sZHZhbF8xKSA+PiA4OworCQlydGxfc2V0X2JicmVnKGh3LCBST0ZETTBfWEJUWElRSU1CQUxBTkNFLCAweDNGRiwgdHgxX2EpOworCQlydGxfc2V0X2JicmVnKGh3LCBST0ZETTBfRUNDQVRIUkVTSE9MRCwgQklUKDI3KSwKKwkJCSAgICAgICgoeCAqIG9sZHZhbF8xID4+IDcpICYgMHgxKSk7CisJCXkgPSByZXN1bHRbZmluYWxfY2FuZGlkYXRlXVs1XTsKKwkJaWYgKCh5ICYgMHgwMDAwMDIwMCkgIT0gMCkKKwkJCXkgPSB5IHwgMHhGRkZGRkMwMDsKKwkJdHgxX2MgPSAoeSAqIG9sZHZhbF8xKSA+PiA4OworCQlydGxfc2V0X2JicmVnKGh3LCBST0ZETTBfWERUWEFGRSwgMHhGMDAwMDAwMCwKKwkJCSAgICAgICgodHgxX2MgJiAweDNDMCkgPj4gNikpOworCQlydGxfc2V0X2JicmVnKGh3LCBST0ZETTBfWEJUWElRSU1CQUxBTkNFLCAweDAwM0YwMDAwLAorCQkJICAgICAgKHR4MV9jICYgMHgzRikpOworCQlydGxfc2V0X2JicmVnKGh3LCBST0ZETTBfRUNDQVRIUkVTSE9MRCwgQklUKDI1KSwKKwkJCSAgICAgICgoeSAqIG9sZHZhbF8xID4+IDcpICYgMHgxKSk7CisJCWlmIChidHhvbmx5KQorCQkJcmV0dXJuOworCQlyZWcgPSByZXN1bHRbZmluYWxfY2FuZGlkYXRlXVs2XTsKKwkJcnRsX3NldF9iYnJlZyhodywgUk9GRE0wX1hCUlhJUUlNQkFMQU5DRSwgMHgzRkYsIHJlZyk7CisJCXJlZyA9IHJlc3VsdFtmaW5hbF9jYW5kaWRhdGVdWzddICYgMHgzRjsKKwkJcnRsX3NldF9iYnJlZyhodywgUk9GRE0wX1hCUlhJUUlNQkFMQU5DRSwgMHhGQzAwLCByZWcpOworCQlyZWcgPSAocmVzdWx0W2ZpbmFsX2NhbmRpZGF0ZV1bN10gPj4gNikgJiAweEY7CisJCXJ0bF9zZXRfYmJyZWcoaHcsIFJPRkRNMF9BR0NSU1NJVEFCTEUsIDB4MDAwMEYwMDAsIHJlZyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBfcnRsOTJjX3BoeV9zYXZlX2FkZGFfcmVnaXN0ZXJzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQkgICAgdTMyICphZGRhcmVnLCB1MzIgKmFkZGFiYWNrdXAsCisJCQkJCSAgICB1MzIgcmVnaXN0ZXJudW0pCit7CisJdTMyIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcmVnaXN0ZXJudW07IGkrKykKKwkJYWRkYWJhY2t1cFtpXSA9IHJ0bF9nZXRfYmJyZWcoaHcsIGFkZGFyZWdbaV0sIE1BU0tEV09SRCk7Cit9CisKK3N0YXRpYyB2b2lkIF9ydGw5MmNfcGh5X3NhdmVfbWFjX3JlZ2lzdGVycyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkJICAgdTMyICptYWNyZWcsIHUzMiAqbWFjYmFja3VwKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwl1MzIgaTsKKworCWZvciAoaSA9IDA7IGkgPCAoSVFLX01BQ19SRUdfTlVNIC0gMSk7IGkrKykKKwkJbWFjYmFja3VwW2ldID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBtYWNyZWdbaV0pOworCW1hY2JhY2t1cFtpXSA9IHJ0bF9yZWFkX2R3b3JkKHJ0bHByaXYsIG1hY3JlZ1tpXSk7Cit9CisKK3N0YXRpYyB2b2lkIF9ydGw5MmNfcGh5X3JlbG9hZF9hZGRhX3JlZ2lzdGVycyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkJICAgICAgdTMyICphZGRhcmVnLCB1MzIgKmFkZGFiYWNrdXAsCisJCQkJCSAgICAgIHUzMiByZWdpZXN0ZXJudW0pCit7CisJdTMyIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcmVnaWVzdGVybnVtOyBpKyspCisJCXJ0bF9zZXRfYmJyZWcoaHcsIGFkZGFyZWdbaV0sIE1BU0tEV09SRCwgYWRkYWJhY2t1cFtpXSk7Cit9CisKK3N0YXRpYyB2b2lkIF9ydGw5MmNfcGh5X3JlbG9hZF9tYWNfcmVnaXN0ZXJzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQkgICAgIHUzMiAqbWFjcmVnLCB1MzIgKm1hY2JhY2t1cCkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJdTMyIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgKElRS19NQUNfUkVHX05VTSAtIDEpOyBpKyspCisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIG1hY3JlZ1tpXSwgKHU4KSBtYWNiYWNrdXBbaV0pOworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBtYWNyZWdbaV0sIG1hY2JhY2t1cFtpXSk7Cit9CisKK3N0YXRpYyB2b2lkIF9ydGw5MmNfcGh5X3BhdGhfYWRkYV9vbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICAgIHUzMiAqYWRkYXJlZywgYm9vbCBpc19wYXRoYV9vbiwgYm9vbCBpczJ0KQoreworCXUzMiBwYXRoT247CisJdTMyIGk7CisKKwlwYXRoT24gPSBpc19wYXRoYV9vbiA/IDB4MDRkYjI1YTQgOiAweDBiMWIyNWE0OworCWlmIChmYWxzZSA9PSBpczJ0KSB7CisJCXBhdGhPbiA9IDB4MGJkYjI1YTA7CisJCXJ0bF9zZXRfYmJyZWcoaHcsIGFkZGFyZWdbMF0sIE1BU0tEV09SRCwgMHgwYjFiMjVhMCk7CisJfSBlbHNlIHsKKwkJcnRsX3NldF9iYnJlZyhodywgYWRkYXJlZ1swXSwgTUFTS0RXT1JELCBwYXRoT24pOworCX0KKworCWZvciAoaSA9IDE7IGkgPCBJUUtfQUREQV9SRUdfTlVNOyBpKyspCisJCXJ0bF9zZXRfYmJyZWcoaHcsIGFkZGFyZWdbaV0sIE1BU0tEV09SRCwgcGF0aE9uKTsKK30KKworc3RhdGljIHZvaWQgX3J0bDkyY19waHlfbWFjX3NldHRpbmdfY2FsaWJyYXRpb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJCQl1MzIgKm1hY3JlZywgdTMyICptYWNiYWNrdXApCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXUzMiBpOworCisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgbWFjcmVnWzBdLCAweDNGKTsKKworCWZvciAoaSA9IDE7IGkgPCAoSVFLX01BQ19SRUdfTlVNIC0gMSk7IGkrKykKKwkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgbWFjcmVnW2ldLAorCQkJICAgICAgICh1OCkgKG1hY2JhY2t1cFtpXSAmICh+QklUKDMpKSkpOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIG1hY3JlZ1tpXSwgKHU4KSAobWFjYmFja3VwW2ldICYgKH5CSVQoNSkpKSk7Cit9CisKK3N0YXRpYyB2b2lkIF9ydGw5MmNfcGh5X3BhdGhfYV9zdGFuZGJ5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXJ0bF9zZXRfYmJyZWcoaHcsIDB4ZTI4LCBNQVNLRFdPUkQsIDB4MCk7CisJcnRsX3NldF9iYnJlZyhodywgMHg4NDAsIE1BU0tEV09SRCwgMHgwMDAxMDAwMCk7CisJcnRsX3NldF9iYnJlZyhodywgMHhlMjgsIE1BU0tEV09SRCwgMHg4MDgwMDAwMCk7Cit9CisKK3N0YXRpYyB2b2lkIF9ydGw5MmNfcGh5X3BpX21vZGVfc3dpdGNoKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBib29sIHBpX21vZGUpCit7CisJdTMyIG1vZGU7CisKKwltb2RlID0gcGlfbW9kZSA/IDB4MDEwMDAxMDAgOiAweDAxMDAwMDAwOworCXJ0bF9zZXRfYmJyZWcoaHcsIDB4ODIwLCBNQVNLRFdPUkQsIG1vZGUpOworCXJ0bF9zZXRfYmJyZWcoaHcsIDB4ODI4LCBNQVNLRFdPUkQsIG1vZGUpOworfQorCitzdGF0aWMgYm9vbCBfcnRsOTJjX3BoeV9zaW11bGFyaXR5X2NvbXBhcmUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJCSAgIGxvbmcgcmVzdWx0W11bOF0sIHU4IGMxLCB1OCBjMikKK3sKKwl1MzIgaSwgaiwgZGlmZiwgc2ltdWxhcml0eV9iaXRtYXAsIGJvdW5kOworCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bF9wcml2KGh3KSk7CisKKwl1OCBmaW5hbF9jYW5kaWRhdGVbMl0gPSB7IDB4RkYsIDB4RkYgfTsKKwlib29sIGJyZXN1bHQgPSB0cnVlLCBpczJ0ID0gSVNfOTJDX1NFUklBTChydGxoYWwtPnZlcnNpb24pOworCisJaWYgKGlzMnQpCisJCWJvdW5kID0gODsKKwllbHNlCisJCWJvdW5kID0gNDsKKworCXNpbXVsYXJpdHlfYml0bWFwID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBib3VuZDsgaSsrKSB7CisJCWRpZmYgPSAocmVzdWx0W2MxXVtpXSA+IHJlc3VsdFtjMl1baV0pID8KKwkJICAgIChyZXN1bHRbYzFdW2ldIC0gcmVzdWx0W2MyXVtpXSkgOgorCQkgICAgKHJlc3VsdFtjMl1baV0gLSByZXN1bHRbYzFdW2ldKTsKKworCQlpZiAoZGlmZiA+IE1BWF9UT0xFUkFOQ0UpIHsKKwkJCWlmICgoaSA9PSAyIHx8IGkgPT0gNikgJiYgIXNpbXVsYXJpdHlfYml0bWFwKSB7CisJCQkJaWYgKHJlc3VsdFtjMV1baV0gKyByZXN1bHRbYzFdW2kgKyAxXSA9PSAwKQorCQkJCQlmaW5hbF9jYW5kaWRhdGVbKGkgLyA0KV0gPSBjMjsKKwkJCQllbHNlIGlmIChyZXN1bHRbYzJdW2ldICsgcmVzdWx0W2MyXVtpICsgMV0gPT0gMCkKKwkJCQkJZmluYWxfY2FuZGlkYXRlWyhpIC8gNCldID0gYzE7CisJCQkJZWxzZQorCQkJCQlzaW11bGFyaXR5X2JpdG1hcCA9IHNpbXVsYXJpdHlfYml0bWFwIHwKKwkJCQkJICAgICgxIDw8IGkpOworCQkJfSBlbHNlCisJCQkJc2ltdWxhcml0eV9iaXRtYXAgPQorCQkJCSAgICBzaW11bGFyaXR5X2JpdG1hcCB8ICgxIDw8IGkpOworCQl9CisJfQorCisJaWYgKHNpbXVsYXJpdHlfYml0bWFwID09IDApIHsKKwkJZm9yIChpID0gMDsgaSA8IChib3VuZCAvIDQpOyBpKyspIHsKKwkJCWlmIChmaW5hbF9jYW5kaWRhdGVbaV0gIT0gMHhGRikgeworCQkJCWZvciAoaiA9IGkgKiA0OyBqIDwgKGkgKyAxKSAqIDQgLSAyOyBqKyspCisJCQkJCXJlc3VsdFszXVtqXSA9CisJCQkJCSAgICByZXN1bHRbZmluYWxfY2FuZGlkYXRlW2ldXVtqXTsKKwkJCQlicmVzdWx0ID0gZmFsc2U7CisJCQl9CisJCX0KKwkJcmV0dXJuIGJyZXN1bHQ7CisJfSBlbHNlIGlmICghKHNpbXVsYXJpdHlfYml0bWFwICYgMHgwRikpIHsKKwkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKwkJCXJlc3VsdFszXVtpXSA9IHJlc3VsdFtjMV1baV07CisJCXJldHVybiBmYWxzZTsKKwl9IGVsc2UgaWYgKCEoc2ltdWxhcml0eV9iaXRtYXAgJiAweEYwKSAmJiBpczJ0KSB7CisJCWZvciAoaSA9IDQ7IGkgPCA4OyBpKyspCisJCQlyZXN1bHRbM11baV0gPSByZXN1bHRbYzFdW2ldOworCQlyZXR1cm4gZmFsc2U7CisJfSBlbHNlIHsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworfQorCitzdGF0aWMgdm9pZCBfcnRsOTJjX3BoeV9pcV9jYWxpYnJhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgICBsb25nIHJlc3VsdFtdWzhdLCB1OCB0LCBib29sIGlzMnQpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGh5ICpydGxwaHkgPSAmKHJ0bHByaXYtPnBoeSk7CisJdTMyIGk7CisJdTggcGF0aGFfb2ssIHBhdGhiX29rOworCXUzMiBhZGRhX3JlZ1tJUUtfQUREQV9SRUdfTlVNXSA9IHsKKwkJMHg4NWMsIDB4ZTZjLCAweGU3MCwgMHhlNzQsCisJCTB4ZTc4LCAweGU3YywgMHhlODAsIDB4ZTg0LAorCQkweGU4OCwgMHhlOGMsIDB4ZWQwLCAweGVkNCwKKwkJMHhlZDgsIDB4ZWRjLCAweGVlMCwgMHhlZWMKKwl9OworCisJdTMyIGlxa19tYWNfcmVnW0lRS19NQUNfUkVHX05VTV0gPSB7CisJCTB4NTIyLCAweDU1MCwgMHg1NTEsIDB4MDQwCisJfTsKKworCWNvbnN0IHUzMiByZXRyeWNvdW50ID0gMjsKKworCXUzMiBiYnZhbHVlOworCisJaWYgKHQgPT0gMCkgeworCQliYnZhbHVlID0gcnRsX2dldF9iYnJlZyhodywgMHg4MDAsIE1BU0tEV09SRCk7CisKKwkJX3J0bDkyY19waHlfc2F2ZV9hZGRhX3JlZ2lzdGVycyhodywgYWRkYV9yZWcsCisJCQkJCQlydGxwaHktPmFkZGFfYmFja3VwLCAxNik7CisJCV9ydGw5MmNfcGh5X3NhdmVfbWFjX3JlZ2lzdGVycyhodywgaXFrX21hY19yZWcsCisJCQkJCSAgICAgICBydGxwaHktPmlxa19tYWNfYmFja3VwKTsKKwl9CisJX3J0bDkyY19waHlfcGF0aF9hZGRhX29uKGh3LCBhZGRhX3JlZywgdHJ1ZSwgaXMydCk7CisJaWYgKHQgPT0gMCkgeworCQlydGxwaHktPmJfcmZwaV9lbmFibGUgPSAodTgpIHJ0bF9nZXRfYmJyZWcoaHcsCisJCQkJCQkgICBSRlBHQTBfWEFfSFNTSVBBUkFNRVRFUjEsCisJCQkJCQkgICBCSVQoOCkpOworCX0KKwlpZiAoIXJ0bHBoeS0+Yl9yZnBpX2VuYWJsZSkKKwkJX3J0bDkyY19waHlfcGlfbW9kZV9zd2l0Y2goaHcsIHRydWUpOworCWlmICh0ID09IDApIHsKKwkJcnRscGh5LT5yZWdfYzA0ID0gcnRsX2dldF9iYnJlZyhodywgMHhjMDQsIE1BU0tEV09SRCk7CisJCXJ0bHBoeS0+cmVnX2MwOCA9IHJ0bF9nZXRfYmJyZWcoaHcsIDB4YzA4LCBNQVNLRFdPUkQpOworCQlydGxwaHktPnJlZ184NzQgPSBydGxfZ2V0X2JicmVnKGh3LCAweDg3NCwgTUFTS0RXT1JEKTsKKwl9CisJcnRsX3NldF9iYnJlZyhodywgMHhjMDQsIE1BU0tEV09SRCwgMHgwM2EwNTYwMCk7CisJcnRsX3NldF9iYnJlZyhodywgMHhjMDgsIE1BU0tEV09SRCwgMHgwMDA4MDBlNCk7CisJcnRsX3NldF9iYnJlZyhodywgMHg4NzQsIE1BU0tEV09SRCwgMHgyMjIwNDAwMCk7CisJaWYgKGlzMnQpIHsKKwkJcnRsX3NldF9iYnJlZyhodywgMHg4NDAsIE1BU0tEV09SRCwgMHgwMDAxMDAwMCk7CisJCXJ0bF9zZXRfYmJyZWcoaHcsIDB4ODQ0LCBNQVNLRFdPUkQsIDB4MDAwMTAwMDApOworCX0KKwlfcnRsOTJjX3BoeV9tYWNfc2V0dGluZ19jYWxpYnJhdGlvbihodywgaXFrX21hY19yZWcsCisJCQkJCSAgICBydGxwaHktPmlxa19tYWNfYmFja3VwKTsKKwlydGxfc2V0X2JicmVnKGh3LCAweGI2OCwgTUFTS0RXT1JELCAweDAwMDgwMDAwKTsKKwlpZiAoaXMydCkKKwkJcnRsX3NldF9iYnJlZyhodywgMHhiNmMsIE1BU0tEV09SRCwgMHgwMDA4MDAwMCk7CisJcnRsX3NldF9iYnJlZyhodywgMHhlMjgsIE1BU0tEV09SRCwgMHg4MDgwMDAwMCk7CisJcnRsX3NldF9iYnJlZyhodywgMHhlNDAsIE1BU0tEV09SRCwgMHgwMTAwN2MwMCk7CisJcnRsX3NldF9iYnJlZyhodywgMHhlNDQsIE1BU0tEV09SRCwgMHgwMTAwNDgwMCk7CisJZm9yIChpID0gMDsgaSA8IHJldHJ5Y291bnQ7IGkrKykgeworCQlwYXRoYV9vayA9IF9ydGw5MmNfcGh5X3BhdGhfYV9pcWsoaHcsIGlzMnQpOworCQlpZiAocGF0aGFfb2sgPT0gMHgwMykgeworCQkJcmVzdWx0W3RdWzBdID0gKHJ0bF9nZXRfYmJyZWcoaHcsIDB4ZTk0LCBNQVNLRFdPUkQpICYKKwkJCQkJMHgzRkYwMDAwKSA+PiAxNjsKKwkJCXJlc3VsdFt0XVsxXSA9IChydGxfZ2V0X2JicmVnKGh3LCAweGU5YywgTUFTS0RXT1JEKSAmCisJCQkJCTB4M0ZGMDAwMCkgPj4gMTY7CisJCQlyZXN1bHRbdF1bMl0gPSAocnRsX2dldF9iYnJlZyhodywgMHhlYTQsIE1BU0tEV09SRCkgJgorCQkJCQkweDNGRjAwMDApID4+IDE2OworCQkJcmVzdWx0W3RdWzNdID0gKHJ0bF9nZXRfYmJyZWcoaHcsIDB4ZWFjLCBNQVNLRFdPUkQpICYKKwkJCQkJMHgzRkYwMDAwKSA+PiAxNjsKKwkJCWJyZWFrOworCQl9IGVsc2UgaWYgKGkgPT0gKHJldHJ5Y291bnQgLSAxKSAmJiBwYXRoYV9vayA9PSAweDAxKQorCQkJcmVzdWx0W3RdWzBdID0gKHJ0bF9nZXRfYmJyZWcoaHcsIDB4ZTk0LAorCQkJCQkJICAgICAgTUFTS0RXT1JEKSAmIDB4M0ZGMDAwMCkgPj4KKwkJCQkJCSAgICAgIDE2OworCQlyZXN1bHRbdF1bMV0gPQorCQkgICAgKHJ0bF9nZXRfYmJyZWcoaHcsIDB4ZTljLCBNQVNLRFdPUkQpICYgMHgzRkYwMDAwKSA+PiAxNjsKKworCX0KKworCWlmIChpczJ0KSB7CisJCV9ydGw5MmNfcGh5X3BhdGhfYV9zdGFuZGJ5KGh3KTsKKwkJX3J0bDkyY19waHlfcGF0aF9hZGRhX29uKGh3LCBhZGRhX3JlZywgZmFsc2UsIGlzMnQpOworCQlmb3IgKGkgPSAwOyBpIDwgcmV0cnljb3VudDsgaSsrKSB7CisJCQlwYXRoYl9vayA9IF9ydGw5MmNfcGh5X3BhdGhfYl9pcWsoaHcpOworCQkJaWYgKHBhdGhiX29rID09IDB4MDMpIHsKKwkJCQlyZXN1bHRbdF1bNF0gPSAocnRsX2dldF9iYnJlZyhodywKKwkJCQkJCSAgICAgIDB4ZWI0LAorCQkJCQkJICAgICAgTUFTS0RXT1JEKSAmCisJCQkJCQkweDNGRjAwMDApID4+IDE2OworCQkJCXJlc3VsdFt0XVs1XSA9CisJCQkJICAgIChydGxfZ2V0X2JicmVnKGh3LCAweGViYywgTUFTS0RXT1JEKSAmCisJCQkJICAgICAweDNGRjAwMDApID4+IDE2OworCQkJCXJlc3VsdFt0XVs2XSA9CisJCQkJICAgIChydGxfZ2V0X2JicmVnKGh3LCAweGVjNCwgTUFTS0RXT1JEKSAmCisJCQkJICAgICAweDNGRjAwMDApID4+IDE2OworCQkJCXJlc3VsdFt0XVs3XSA9CisJCQkJICAgIChydGxfZ2V0X2JicmVnKGh3LCAweGVjYywgTUFTS0RXT1JEKSAmCisJCQkJICAgICAweDNGRjAwMDApID4+IDE2OworCQkJCWJyZWFrOworCQkJfSBlbHNlIGlmIChpID09IChyZXRyeWNvdW50IC0gMSkgJiYgcGF0aGJfb2sgPT0gMHgwMSkgeworCQkJCXJlc3VsdFt0XVs0XSA9IChydGxfZ2V0X2JicmVnKGh3LAorCQkJCQkJICAgICAgMHhlYjQsCisJCQkJCQkgICAgICBNQVNLRFdPUkQpICYKKwkJCQkJCTB4M0ZGMDAwMCkgPj4gMTY7CisJCQl9CisJCQlyZXN1bHRbdF1bNV0gPSAocnRsX2dldF9iYnJlZyhodywgMHhlYmMsIE1BU0tEV09SRCkgJgorCQkJCQkweDNGRjAwMDApID4+IDE2OworCQl9CisJfQorCXJ0bF9zZXRfYmJyZWcoaHcsIDB4YzA0LCBNQVNLRFdPUkQsIHJ0bHBoeS0+cmVnX2MwNCk7CisJcnRsX3NldF9iYnJlZyhodywgMHg4NzQsIE1BU0tEV09SRCwgcnRscGh5LT5yZWdfODc0KTsKKwlydGxfc2V0X2JicmVnKGh3LCAweGMwOCwgTUFTS0RXT1JELCBydGxwaHktPnJlZ19jMDgpOworCXJ0bF9zZXRfYmJyZWcoaHcsIDB4ZTI4LCBNQVNLRFdPUkQsIDApOworCXJ0bF9zZXRfYmJyZWcoaHcsIDB4ODQwLCBNQVNLRFdPUkQsIDB4MDAwMzJlZDMpOworCWlmIChpczJ0KQorCQlydGxfc2V0X2JicmVnKGh3LCAweDg0NCwgTUFTS0RXT1JELCAweDAwMDMyZWQzKTsKKwlpZiAodCAhPSAwKSB7CisJCWlmICghcnRscGh5LT5iX3JmcGlfZW5hYmxlKQorCQkJX3J0bDkyY19waHlfcGlfbW9kZV9zd2l0Y2goaHcsIGZhbHNlKTsKKwkJX3J0bDkyY19waHlfcmVsb2FkX2FkZGFfcmVnaXN0ZXJzKGh3LCBhZGRhX3JlZywKKwkJCQkJCSAgcnRscGh5LT5hZGRhX2JhY2t1cCwgMTYpOworCQlfcnRsOTJjX3BoeV9yZWxvYWRfbWFjX3JlZ2lzdGVycyhodywgaXFrX21hY19yZWcsCisJCQkJCQkgcnRscGh5LT5pcWtfbWFjX2JhY2t1cCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBfcnRsOTJjX3BoeV9sY19jYWxpYnJhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGJvb2wgaXMydCkKK3sKKwl1OCB0bXByZWc7CisJdTMyIHJmX2FfbW9kZSA9IDAsIHJmX2JfbW9kZSA9IDAsIGxjX2NhbDsKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisKKwl0bXByZWcgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIDB4ZDAzKTsKKworCWlmICgodG1wcmVnICYgMHg3MCkgIT0gMCkKKwkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgMHhkMDMsIHRtcHJlZyAmIDB4OEYpOworCWVsc2UKKwkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX1RYUEFVU0UsIDB4RkYpOworCisJaWYgKCh0bXByZWcgJiAweDcwKSAhPSAwKSB7CisJCXJmX2FfbW9kZSA9IHJ0bF9nZXRfcmZyZWcoaHcsIFJGOTBfUEFUSF9BLCAweDAwLCBNQVNLMTJCSVRTKTsKKworCQlpZiAoaXMydCkKKwkJCXJmX2JfbW9kZSA9IHJ0bF9nZXRfcmZyZWcoaHcsIFJGOTBfUEFUSF9CLCAweDAwLAorCQkJCQkJICBNQVNLMTJCSVRTKTsKKworCQlydGxfc2V0X3JmcmVnKGh3LCBSRjkwX1BBVEhfQSwgMHgwMCwgTUFTSzEyQklUUywKKwkJCSAgICAgIChyZl9hX21vZGUgJiAweDhGRkZGKSB8IDB4MTAwMDApOworCisJCWlmIChpczJ0KQorCQkJcnRsX3NldF9yZnJlZyhodywgUkY5MF9QQVRIX0IsIDB4MDAsIE1BU0sxMkJJVFMsCisJCQkJICAgICAgKHJmX2JfbW9kZSAmIDB4OEZGRkYpIHwgMHgxMDAwMCk7CisJfQorCWxjX2NhbCA9IHJ0bF9nZXRfcmZyZWcoaHcsIFJGOTBfUEFUSF9BLCAweDE4LCBNQVNLMTJCSVRTKTsKKworCXJ0bF9zZXRfcmZyZWcoaHcsIFJGOTBfUEFUSF9BLCAweDE4LCBNQVNLMTJCSVRTLCBsY19jYWwgfCAweDA4MDAwKTsKKworCW1kZWxheSgxMDApOworCisJaWYgKCh0bXByZWcgJiAweDcwKSAhPSAwKSB7CisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIDB4ZDAzLCB0bXByZWcpOworCQlydGxfc2V0X3JmcmVnKGh3LCBSRjkwX1BBVEhfQSwgMHgwMCwgTUFTSzEyQklUUywgcmZfYV9tb2RlKTsKKworCQlpZiAoaXMydCkKKwkJCXJ0bF9zZXRfcmZyZWcoaHcsIFJGOTBfUEFUSF9CLCAweDAwLCBNQVNLMTJCSVRTLAorCQkJCSAgICAgIHJmX2JfbW9kZSk7CisJfSBlbHNlIHsKKwkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX1RYUEFVU0UsIDB4MDApOworCX0KK30KKworc3RhdGljIHZvaWQgX3J0bDkyY19waHlfYXBfY2FsaWJyYXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICAgY2hhciBkZWx0YSwgYm9vbCBpczJ0KQoreworCS8qIFRoaXMgcm91dGluZSBpcyBkZWxpYmVyYXRlbHkgZHVtbWllZCBvdXQgZm9yIGxhdGVyIGZpeGVzICovCisjaWYgMAorCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BoeSAqcnRscGh5ID0gJihydGxwcml2LT5waHkpOworCXN0cnVjdCBydGxfZWZ1c2UgKnJ0bGVmdXNlID0gcnRsX2VmdXNlKHJ0bF9wcml2KGh3KSk7CisKKwl1MzIgcmVnX2RbUEFUSF9OVU1dOworCXUzMiB0bXByZWcsIGluZGV4LCBvZmZzZXQsIHBhdGgsIGksIHBhdGhib3VuZCA9IFBBVEhfTlVNLCBhcGtib3VuZDsKKworCXUzMiBiYl9iYWNrdXBbQVBLX0JCX1JFR19OVU1dOworCXUzMiBiYl9yZWdbQVBLX0JCX1JFR19OVU1dID0geworCQkweDkwNCwgMHhjMDQsIDB4ODAwLCAweGMwOCwgMHg4NzQKKwl9OworCXUzMiBiYl9hcF9tb2RlW0FQS19CQl9SRUdfTlVNXSA9IHsKKwkJMHgwMDAwMDAyMCwgMHgwMGEwNTQzMCwgMHgwMjA0MDAwMCwKKwkJMHgwMDA4MDBlNCwgMHgwMDIwNDAwMAorCX07CisJdTMyIGJiX25vcm1hbF9hcF9tb2RlW0FQS19CQl9SRUdfTlVNXSA9IHsKKwkJMHgwMDAwMDAyMCwgMHgwMGEwNTQzMCwgMHgwMjA0MDAwMCwKKwkJMHgwMDA4MDBlNCwgMHgyMjIwNDAwMAorCX07CisKKwl1MzIgYWZlX2JhY2t1cFtBUEtfQUZFX1JFR19OVU1dOworCXUzMiBhZmVfcmVnW0FQS19BRkVfUkVHX05VTV0gPSB7CisJCTB4ODVjLCAweGU2YywgMHhlNzAsIDB4ZTc0LCAweGU3OCwKKwkJMHhlN2MsIDB4ZTgwLCAweGU4NCwgMHhlODgsIDB4ZThjLAorCQkweGVkMCwgMHhlZDQsIDB4ZWQ4LCAweGVkYywgMHhlZTAsCisJCTB4ZWVjCisJfTsKKworCXUzMiBtYWNfYmFja3VwW0lRS19NQUNfUkVHX05VTV07CisJdTMyIG1hY19yZWdbSVFLX01BQ19SRUdfTlVNXSA9IHsKKwkJMHg1MjIsIDB4NTUwLCAweDU1MSwgMHgwNDAKKwl9OworCisJdTMyIGFwa19yZl9pbml0X3ZhbHVlW1BBVEhfTlVNXVtBUEtfQkJfUkVHX05VTV0gPSB7CisJCXsweDA4NTJjLCAweDE4NTJjLCAweDU4NTJjLCAweDE4NTJjLCAweDU4NTJjfSwKKwkJezB4Mjg1MmUsIDB4MDg1MmUsIDB4Mzg1MmUsIDB4MDg1MmUsIDB4MDg1MmV9CisJfTsKKworCXUzMiBhcGtfbm9ybWFsX3JmX2luaXRfdmFsdWVbUEFUSF9OVU1dW0FQS19CQl9SRUdfTlVNXSA9IHsKKwkJezB4MDg1MmMsIDB4MGE1MmMsIDB4M2E1MmMsIDB4NWE1MmMsIDB4NWE1MmN9LAorCQl7MHgwODUyYywgMHgwYTUyYywgMHg1YTUyYywgMHg1YTUyYywgMHg1YTUyY30KKwl9OworCisJdTMyIGFwa19yZl92YWx1ZV8wW1BBVEhfTlVNXVtBUEtfQkJfUkVHX05VTV0gPSB7CisJCXsweDUyMDE5LCAweDUyMDE0LCAweDUyMDEzLCAweDUyMDBmLCAweDUyMDhkfSwKKwkJezB4NTIwMWEsIDB4NTIwMTksIDB4NTIwMTYsIDB4NTIwMzMsIDB4NTIwNTB9CisJfTsKKworCXUzMiBhcGtfbm9ybWFsX3JmX3ZhbHVlXzBbUEFUSF9OVU1dW0FQS19CQl9SRUdfTlVNXSA9IHsKKwkJezB4NTIwMTksIDB4NTIwMTcsIDB4NTIwMTAsIDB4NTIwMGQsIDB4NTIwNmF9LAorCQl7MHg1MjAxOSwgMHg1MjAxNywgMHg1MjAxMCwgMHg1MjAwZCwgMHg1MjA2YX0KKwl9OworCisJdTMyIGFmZV9vbl9vZmZbUEFUSF9OVU1dID0geworCQkweDA0ZGIyNWE0LCAweDBiMWIyNWE0CisJfTsKKworCXUzMiBhcGtfb2Zmc2V0W1BBVEhfTlVNXSA9IHsgMHhiNjgsIDB4YjZjIH07CisKKwl1MzIgYXBrX25vcm1hbF9vZmZzZXRbUEFUSF9OVU1dID0geyAweGIyOCwgMHhiOTggfTsKKworCXUzMiBhcGtfdmFsdWVbUEFUSF9OVU1dID0geyAweDkyZmMwMDAwLCAweDEyZmMwMDAwIH07CisKKwl1MzIgYXBrX25vcm1hbF92YWx1ZVtQQVRIX05VTV0gPSB7IDB4OTI2ODAwMDAsIDB4MTI2ODAwMDAgfTsKKworCWNvbnN0IGNoYXIgYXBrX2RlbHRhX21hcHBpbmdbQVBLX0JCX1JFR19OVU1dWzEzXSA9IHsKKwkJey00LCAtMywgLTIsIC0yLCAtMSwgLTEsIDAsIDEsIDIsIDMsIDQsIDUsIDZ9LAorCQl7LTQsIC0zLCAtMiwgLTIsIC0xLCAtMSwgMCwgMSwgMiwgMywgNCwgNSwgNn0sCisJCXstNiwgLTQsIC0yLCAtMiwgLTEsIC0xLCAwLCAxLCAyLCAzLCA0LCA1LCA2fSwKKwkJey0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDAsIDEsIDIsIDMsIDQsIDUsIDZ9LAorCQl7LTExLCAtOSwgLTcsIC01LCAtMywgLTEsIDAsIDAsIDAsIDAsIDAsIDAsIDB9CisJfTsKKworCWNvbnN0IHUzMiBhcGtfbm9ybWFsX3NldHRpbmdfdmFsdWVfMVsxM10gPSB7CisJCTB4MDEwMTcwMTgsIDB4ZjdlZDhmODQsIDB4MWIxYTE4MTYsIDB4MjUyMjIwMWUsIDB4MzIyZTJiMjgsCisJCTB4NDMzZjNhMzYsIDB4NWI1NDRlNDksIDB4N2I3MjZhNjIsIDB4YTY5YThmODQsIDB4ZGZjZmMwYjMsCisJCTB4MTI2ODAwMDAsIDB4MDA4ODAwMDAsIDB4MDA4ODAwMDAKKwl9OworCisJY29uc3QgdTMyIGFwa19ub3JtYWxfc2V0dGluZ192YWx1ZV8yWzE2XSA9IHsKKwkJMHgwMWM3MDIxZCwgMHgwMTY3MDE4MywgMHgwMTAwMDEyMywgMHgwMGJmMDBlMiwgMHgwMDhkMDBhMywKKwkJMHgwMDY4MDA3YiwgMHgwMDRkMDA1OSwgMHgwMDNhMDA0MiwgMHgwMDJiMDAzMSwgMHgwMDFmMDAyNSwKKwkJMHgwMDE3MDAxYiwgMHgwMDExMDAxNCwgMHgwMDBjMDAwZiwgMHgwMDA5MDAwYiwgMHgwMDA3MDAwOCwKKwkJMHgwMDA1MDAwNgorCX07CisKKwljb25zdCB1MzIgYXBrX3Jlc3VsdFtQQVRIX05VTV1bQVBLX0JCX1JFR19OVU1dOworCisJbG9uZyBiYl9vZmZzZXQsIGRlbHRhX3YsIGRlbHRhX29mZnNldDsKKworCWlmICghaXMydCkKKwkJcGF0aGJvdW5kID0gMTsKKworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IFBBVEhfTlVNOyBpbmRleCsrKSB7CisJCWFwa19vZmZzZXRbaW5kZXhdID0gYXBrX25vcm1hbF9vZmZzZXRbaW5kZXhdOworCQlhcGtfdmFsdWVbaW5kZXhdID0gYXBrX25vcm1hbF92YWx1ZVtpbmRleF07CisJCWFmZV9vbl9vZmZbaW5kZXhdID0gMHg2ZmRiMjVhNDsKKwl9CisKKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBBUEtfQkJfUkVHX05VTTsgaW5kZXgrKykgeworCQlmb3IgKHBhdGggPSAwOyBwYXRoIDwgcGF0aGJvdW5kOyBwYXRoKyspIHsKKwkJCWFwa19yZl9pbml0X3ZhbHVlW3BhdGhdW2luZGV4XSA9CisJCQkgICAgYXBrX25vcm1hbF9yZl9pbml0X3ZhbHVlW3BhdGhdW2luZGV4XTsKKwkJCWFwa19yZl92YWx1ZV8wW3BhdGhdW2luZGV4XSA9CisJCQkgICAgYXBrX25vcm1hbF9yZl92YWx1ZV8wW3BhdGhdW2luZGV4XTsKKwkJfQorCQliYl9hcF9tb2RlW2luZGV4XSA9IGJiX25vcm1hbF9hcF9tb2RlW2luZGV4XTsKKworCQlhcGtib3VuZCA9IDY7CisJfQorCisJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgQVBLX0JCX1JFR19OVU07IGluZGV4KyspIHsKKwkJaWYgKGluZGV4ID09IDApCisJCQljb250aW51ZTsKKwkJYmJfYmFja3VwW2luZGV4XSA9IHJ0bF9nZXRfYmJyZWcoaHcsIGJiX3JlZ1tpbmRleF0sIE1BU0tEV09SRCk7CisJfQorCisJX3J0bDkyY19waHlfc2F2ZV9tYWNfcmVnaXN0ZXJzKGh3LCBtYWNfcmVnLCBtYWNfYmFja3VwKTsKKworCV9ydGw5MmNfcGh5X3NhdmVfYWRkYV9yZWdpc3RlcnMoaHcsIGFmZV9yZWcsIGFmZV9iYWNrdXAsIDE2KTsKKworCWZvciAocGF0aCA9IDA7IHBhdGggPCBwYXRoYm91bmQ7IHBhdGgrKykgeworCQlpZiAocGF0aCA9PSBSRjkwX1BBVEhfQSkgeworCQkJb2Zmc2V0ID0gMHhiMDA7CisJCQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCAxMTsgaW5kZXgrKykgeworCQkJCXJ0bF9zZXRfYmJyZWcoaHcsIG9mZnNldCwgTUFTS0RXT1JELAorCQkJCQkgICAgICBhcGtfbm9ybWFsX3NldHRpbmdfdmFsdWVfMQorCQkJCQkgICAgICBbaW5kZXhdKTsKKworCQkJCW9mZnNldCArPSAweDA0OworCQkJfQorCisJCQlydGxfc2V0X2JicmVnKGh3LCAweGI5OCwgTUFTS0RXT1JELCAweDEyNjgwMDAwKTsKKworCQkJb2Zmc2V0ID0gMHhiNjg7CisJCQlmb3IgKDsgaW5kZXggPCAxMzsgaW5kZXgrKykgeworCQkJCXJ0bF9zZXRfYmJyZWcoaHcsIG9mZnNldCwgTUFTS0RXT1JELAorCQkJCQkgICAgICBhcGtfbm9ybWFsX3NldHRpbmdfdmFsdWVfMQorCQkJCQkgICAgICBbaW5kZXhdKTsKKworCQkJCW9mZnNldCArPSAweDA0OworCQkJfQorCisJCQlydGxfc2V0X2JicmVnKGh3LCAweGUyOCwgTUFTS0RXT1JELCAweDQwMDAwMDAwKTsKKworCQkJb2Zmc2V0ID0gMHhiMDA7CisJCQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCAxNjsgaW5kZXgrKykgeworCQkJCXJ0bF9zZXRfYmJyZWcoaHcsIG9mZnNldCwgTUFTS0RXT1JELAorCQkJCQkgICAgICBhcGtfbm9ybWFsX3NldHRpbmdfdmFsdWVfMgorCQkJCQkgICAgICBbaW5kZXhdKTsKKworCQkJCW9mZnNldCArPSAweDA0OworCQkJfQorCQkJcnRsX3NldF9iYnJlZyhodywgMHhlMjgsIE1BU0tEV09SRCwgMHgwMDAwMDAwMCk7CisJCX0gZWxzZSBpZiAocGF0aCA9PSBSRjkwX1BBVEhfQikgeworCQkJb2Zmc2V0ID0gMHhiNzA7CisJCQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCAxMDsgaW5kZXgrKykgeworCQkJCXJ0bF9zZXRfYmJyZWcoaHcsIG9mZnNldCwgTUFTS0RXT1JELAorCQkJCQkgICAgICBhcGtfbm9ybWFsX3NldHRpbmdfdmFsdWVfMQorCQkJCQkgICAgICBbaW5kZXhdKTsKKworCQkJCW9mZnNldCArPSAweDA0OworCQkJfQorCQkJcnRsX3NldF9iYnJlZyhodywgMHhiMjgsIE1BU0tEV09SRCwgMHgxMjY4MDAwMCk7CisJCQlydGxfc2V0X2JicmVnKGh3LCAweGI5OCwgTUFTS0RXT1JELCAweDEyNjgwMDAwKTsKKworCQkJb2Zmc2V0ID0gMHhiNjg7CisJCQlpbmRleCA9IDExOworCQkJZm9yICg7IGluZGV4IDwgMTM7IGluZGV4KyspIHsKKwkJCQlydGxfc2V0X2JicmVnKGh3LCBvZmZzZXQsIE1BU0tEV09SRCwKKwkJCQkJICAgICAgYXBrX25vcm1hbF9zZXR0aW5nX3ZhbHVlXzEKKwkJCQkJICAgICAgW2luZGV4XSk7CisKKwkJCQlvZmZzZXQgKz0gMHgwNDsKKwkJCX0KKworCQkJcnRsX3NldF9iYnJlZyhodywgMHhlMjgsIE1BU0tEV09SRCwgMHg0MDAwMDAwMCk7CisKKwkJCW9mZnNldCA9IDB4YjYwOworCQkJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgMTY7IGluZGV4KyspIHsKKwkJCQlydGxfc2V0X2JicmVnKGh3LCBvZmZzZXQsIE1BU0tEV09SRCwKKwkJCQkJICAgICAgYXBrX25vcm1hbF9zZXR0aW5nX3ZhbHVlXzIKKwkJCQkJICAgICAgW2luZGV4XSk7CisKKwkJCQlvZmZzZXQgKz0gMHgwNDsKKwkJCX0KKwkJCXJ0bF9zZXRfYmJyZWcoaHcsIDB4ZTI4LCBNQVNLRFdPUkQsIDB4MDAwMDAwMDApOworCQl9CisKKwkJcmVnX2RbcGF0aF0gPSBydGxfZ2V0X3JmcmVnKGh3LCAoZW51bSByYWRpb19wYXRoKXBhdGgsCisJCQkJCSAgICAweGQsIE1BU0tEV09SRCk7CisKKwkJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgQVBLX0FGRV9SRUdfTlVNOyBpbmRleCsrKQorCQkJcnRsX3NldF9iYnJlZyhodywgYWZlX3JlZ1tpbmRleF0sIE1BU0tEV09SRCwKKwkJCQkgICAgICBhZmVfb25fb2ZmW3BhdGhdKTsKKworCQlpZiAocGF0aCA9PSBSRjkwX1BBVEhfQSkgeworCQkJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgQVBLX0JCX1JFR19OVU07IGluZGV4KyspIHsKKwkJCQlpZiAoaW5kZXggPT0gMCkKKwkJCQkJY29udGludWU7CisJCQkJcnRsX3NldF9iYnJlZyhodywgYmJfcmVnW2luZGV4XSwgTUFTS0RXT1JELAorCQkJCQkgICAgICBiYl9hcF9tb2RlW2luZGV4XSk7CisJCQl9CisJCX0KKworCQlfcnRsOTJjX3BoeV9tYWNfc2V0dGluZ19jYWxpYnJhdGlvbihodywgbWFjX3JlZywgbWFjX2JhY2t1cCk7CisKKwkJaWYgKHBhdGggPT0gMCkgeworCQkJcnRsX3NldF9yZnJlZyhodywgUkY5MF9QQVRIX0IsIDB4MCwgTUFTS0RXT1JELCAweDEwMDAwKTsKKwkJfSBlbHNlIHsKKwkJCXJ0bF9zZXRfcmZyZWcoaHcsIFJGOTBfUEFUSF9BLCAweDAwLCBNQVNLRFdPUkQsCisJCQkJICAgICAgMHgxMDAwMCk7CisJCQlydGxfc2V0X3JmcmVnKGh3LCBSRjkwX1BBVEhfQSwgMHgxMCwgTUFTS0RXT1JELAorCQkJCSAgICAgIDB4MTAwMGYpOworCQkJcnRsX3NldF9yZnJlZyhodywgUkY5MF9QQVRIX0EsIDB4MTEsIE1BU0tEV09SRCwKKwkJCQkgICAgICAweDIwMTAzKTsKKwkJfQorCisJCWRlbHRhX29mZnNldCA9ICgoZGVsdGEgKyAxNCkgLyAyKTsKKwkJaWYgKGRlbHRhX29mZnNldCA8IDApCisJCQlkZWx0YV9vZmZzZXQgPSAwOworCQllbHNlIGlmIChkZWx0YV9vZmZzZXQgPiAxMikKKwkJCWRlbHRhX29mZnNldCA9IDEyOworCisJCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IEFQS19CQl9SRUdfTlVNOyBpbmRleCsrKSB7CisJCQlpZiAoaW5kZXggIT0gMSkKKwkJCQljb250aW51ZTsKKworCQkJdG1wcmVnID0gYXBrX3JmX2luaXRfdmFsdWVbcGF0aF1baW5kZXhdOworCisJCQlpZiAoIXJ0bGVmdXNlLT5iX2Fwa190aGVybWFsbWV0ZXJpZ25vcmUpIHsKKwkJCQliYl9vZmZzZXQgPSAodG1wcmVnICYgMHhGMDAwMCkgPj4gMTY7CisKKwkJCQlpZiAoISh0bXByZWcgJiBCSVQoMTUpKSkKKwkJCQkJYmJfb2Zmc2V0ID0gLWJiX29mZnNldDsKKworCQkJCWRlbHRhX3YgPQorCQkJCSAgICBhcGtfZGVsdGFfbWFwcGluZ1tpbmRleF1bZGVsdGFfb2Zmc2V0XTsKKworCQkJCWJiX29mZnNldCArPSBkZWx0YV92OworCisJCQkJaWYgKGJiX29mZnNldCA8IDApIHsKKwkJCQkJdG1wcmVnID0gdG1wcmVnICYgKH5CSVQoMTUpKTsKKwkJCQkJYmJfb2Zmc2V0ID0gLWJiX29mZnNldDsKKwkJCQl9IGVsc2UgeworCQkJCQl0bXByZWcgPSB0bXByZWcgfCBCSVQoMTUpOworCQkJCX0KKworCQkJCXRtcHJlZyA9CisJCQkJICAgICh0bXByZWcgJiAweEZGRjBGRkZGKSB8IChiYl9vZmZzZXQgPDwgMTYpOworCQkJfQorCisJCQlydGxfc2V0X3JmcmVnKGh3LCAoZW51bSByYWRpb19wYXRoKXBhdGgsIDB4YywKKwkJCQkgICAgICBNQVNLRFdPUkQsIDB4ODk5MmUpOworCQkJcnRsX3NldF9yZnJlZyhodywgKGVudW0gcmFkaW9fcGF0aClwYXRoLCAweDAsCisJCQkJICAgICAgTUFTS0RXT1JELCBhcGtfcmZfdmFsdWVfMFtwYXRoXVtpbmRleF0pOworCQkJcnRsX3NldF9yZnJlZyhodywgKGVudW0gcmFkaW9fcGF0aClwYXRoLCAweGQsCisJCQkJICAgICAgTUFTS0RXT1JELCB0bXByZWcpOworCisJCQlpID0gMDsKKwkJCWRvIHsKKwkJCQlydGxfc2V0X2JicmVnKGh3LCAweGUyOCwgTUFTS0RXT1JELCAweDgwMDAwMDAwKTsKKwkJCQlydGxfc2V0X2JicmVnKGh3LCBhcGtfb2Zmc2V0W3BhdGhdLAorCQkJCQkgICAgICBNQVNLRFdPUkQsIGFwa192YWx1ZVswXSk7CisJCQkJUlRQUklOVChydGxwcml2LCBGSU5JVCwgSU5JVF9JUUssCisJCQkJCSgiUEhZX0FQQ2FsaWJyYXRlKCkgb2Zmc2V0IDB4JXggIgorCQkJCQkgInZhbHVlIDB4JXhcbiIsCisJCQkJCSBhcGtfb2Zmc2V0W3BhdGhdLAorCQkJCQkgcnRsX2dldF9iYnJlZyhodywgYXBrX29mZnNldFtwYXRoXSwKKwkJCQkJCSAgICAgICBNQVNLRFdPUkQpKSk7CisKKwkJCQltZGVsYXkoMyk7CisKKwkJCQlydGxfc2V0X2JicmVnKGh3LCBhcGtfb2Zmc2V0W3BhdGhdLAorCQkJCQkgICAgICBNQVNLRFdPUkQsIGFwa192YWx1ZVsxXSk7CisJCQkJUlRQUklOVChydGxwcml2LCBGSU5JVCwgSU5JVF9JUUssCisJCQkJCSgiUEhZX0FQQ2FsaWJyYXRlKCkgb2Zmc2V0IDB4JXggIgorCQkJCQkgInZhbHVlIDB4JXhcbiIsCisJCQkJCSBhcGtfb2Zmc2V0W3BhdGhdLAorCQkJCQkgcnRsX2dldF9iYnJlZyhodywgYXBrX29mZnNldFtwYXRoXSwKKwkJCQkJCSAgICAgICBNQVNLRFdPUkQpKSk7CisKKwkJCQltZGVsYXkoMjApOworCisJCQkJcnRsX3NldF9iYnJlZyhodywgMHhlMjgsIE1BU0tEV09SRCwgMHgwMDAwMDAwMCk7CisKKwkJCQlpZiAocGF0aCA9PSBSRjkwX1BBVEhfQSkKKwkJCQkJdG1wcmVnID0gcnRsX2dldF9iYnJlZyhodywgMHhiZDgsCisJCQkJCQkJICAgICAgIDB4MDNFMDAwMDApOworCQkJCWVsc2UKKwkJCQkJdG1wcmVnID0gcnRsX2dldF9iYnJlZyhodywgMHhiZDgsCisJCQkJCQkJICAgICAgIDB4RjgwMDAwMDApOworCisJCQkJUlRQUklOVChydGxwcml2LCBGSU5JVCwgSU5JVF9JUUssCisJCQkJCSgiUEhZX0FQQ2FsaWJyYXRlKCkgb2Zmc2V0ICIKKwkJCQkJICIweGJkOFsyNToyMV0gJXhcbiIsIHRtcHJlZykpOworCisJCQkJaSsrOworCisJCQl9IHdoaWxlICh0bXByZWcgPiBhcGtib3VuZCAmJiBpIDwgNCk7CisKKwkJCWFwa19yZXN1bHRbcGF0aF1baW5kZXhdID0gdG1wcmVnOworCQl9CisJfQorCisJX3J0bDkyY19waHlfcmVsb2FkX21hY19yZWdpc3RlcnMoaHcsIG1hY19yZWcsIG1hY19iYWNrdXApOworCisJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgQVBLX0JCX1JFR19OVU07IGluZGV4KyspIHsKKwkJaWYgKGluZGV4ID09IDApCisJCQljb250aW51ZTsKKwkJcnRsX3NldF9iYnJlZyhodywgYmJfcmVnW2luZGV4XSwgTUFTS0RXT1JELCBiYl9iYWNrdXBbaW5kZXhdKTsKKwl9CisKKwlfcnRsOTJjX3BoeV9yZWxvYWRfYWRkYV9yZWdpc3RlcnMoaHcsIGFmZV9yZWcsIGFmZV9iYWNrdXAsIDE2KTsKKworCWZvciAocGF0aCA9IDA7IHBhdGggPCBwYXRoYm91bmQ7IHBhdGgrKykgeworCQlydGxfc2V0X3JmcmVnKGh3LCAoZW51bSByYWRpb19wYXRoKXBhdGgsIDB4ZCwKKwkJCSAgICAgIE1BU0tEV09SRCwgcmVnX2RbcGF0aF0pOworCisJCWlmIChwYXRoID09IFJGOTBfUEFUSF9CKSB7CisJCQlydGxfc2V0X3JmcmVnKGh3LCBSRjkwX1BBVEhfQSwgMHgxMCwgTUFTS0RXT1JELAorCQkJCSAgICAgIDB4MTAwMGYpOworCQkJcnRsX3NldF9yZnJlZyhodywgUkY5MF9QQVRIX0EsIDB4MTEsIE1BU0tEV09SRCwKKwkJCQkgICAgICAweDIwMTAxKTsKKwkJfQorCisJCWlmIChhcGtfcmVzdWx0W3BhdGhdWzFdID4gNikKKwkJCWFwa19yZXN1bHRbcGF0aF1bMV0gPSA2OworCX0KKworCWZvciAocGF0aCA9IDA7IHBhdGggPCBwYXRoYm91bmQ7IHBhdGgrKykgeworCQlydGxfc2V0X3JmcmVnKGh3LCAoZW51bSByYWRpb19wYXRoKXBhdGgsIDB4MywgTUFTS0RXT1JELAorCQkJICAgICAgKChhcGtfcmVzdWx0W3BhdGhdWzFdIDw8IDE1KSB8CisJCQkgICAgICAgKGFwa19yZXN1bHRbcGF0aF1bMV0gPDwgMTApIHwKKwkJCSAgICAgICAoYXBrX3Jlc3VsdFtwYXRoXVsxXSA8PCA1KSB8CisJCQkgICAgICAgYXBrX3Jlc3VsdFtwYXRoXVsxXSkpOworCisJCWlmIChwYXRoID09IFJGOTBfUEFUSF9BKQorCQkJcnRsX3NldF9yZnJlZyhodywgKGVudW0gcmFkaW9fcGF0aClwYXRoLCAweDQsIE1BU0tEV09SRCwKKwkJCQkgICAgICAoKGFwa19yZXN1bHRbcGF0aF1bMV0gPDwgMTUpIHwKKwkJCQkgICAgICAgKGFwa19yZXN1bHRbcGF0aF1bMV0gPDwgMTApIHwKKwkJCQkgICAgICAgKDB4MDAgPDwgNSkgfCAweDA1KSk7CisJCWVsc2UKKwkJCXJ0bF9zZXRfcmZyZWcoaHcsIChlbnVtIHJhZGlvX3BhdGgpcGF0aCwgMHg0LCBNQVNLRFdPUkQsCisJCQkJICAgICAgKChhcGtfcmVzdWx0W3BhdGhdWzFdIDw8IDE1KSB8CisJCQkJICAgICAgIChhcGtfcmVzdWx0W3BhdGhdWzFdIDw8IDEwKSB8CisJCQkJICAgICAgICgweDAyIDw8IDUpIHwgMHgwNSkpOworCisJCXJ0bF9zZXRfcmZyZWcoaHcsIChlbnVtIHJhZGlvX3BhdGgpcGF0aCwgMHhlLCBNQVNLRFdPUkQsCisJCQkgICAgICAoKDB4MDggPDwgMTUpIHwgKDB4MDggPDwgMTApIHwgKDB4MDggPDwgNSkgfAorCQkJICAgICAgIDB4MDgpKTsKKworCX0KKworCXJ0bHBoeS0+Yl9hcGtfZG9uZSA9IHRydWU7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgX3J0bDkyY19waHlfc2V0X3JmcGF0aF9zd2l0Y2goc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJCSAgYm9vbCBibWFpbiwgYm9vbCBpczJ0KQoreworCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bF9wcml2KGh3KSk7CisKKwlpZiAoaXNfaGFsX3N0b3AocnRsaGFsKSkgeworCQlydGxfc2V0X2JicmVnKGh3LCBSRUdfTEVEQ0ZHMCwgQklUKDIzKSwgMHgwMSk7CisJCXJ0bF9zZXRfYmJyZWcoaHcsIHJGUEdBMF9YQUJfUkZQQVJBTUVURVIsIEJJVCgxMyksIDB4MDEpOworCX0KKwlpZiAoaXMydCkgeworCQlpZiAoYm1haW4pCisJCQlydGxfc2V0X2JicmVnKGh3LCBSRlBHQTBfWEJfUkZJTlRFUkZBQ0VPRSwKKwkJCQkgICAgICBCSVQoNSkgfCBCSVQoNiksIDB4MSk7CisJCWVsc2UKKwkJCXJ0bF9zZXRfYmJyZWcoaHcsIFJGUEdBMF9YQl9SRklOVEVSRkFDRU9FLAorCQkJCSAgICAgIEJJVCg1KSB8IEJJVCg2KSwgMHgyKTsKKwl9IGVsc2UgeworCQlpZiAoYm1haW4pCisJCQlydGxfc2V0X2JicmVnKGh3LCBSRlBHQTBfWEFfUkZJTlRFUkZBQ0VPRSwgMHgzMDAsIDB4Mik7CisJCWVsc2UKKwkJCXJ0bF9zZXRfYmJyZWcoaHcsIFJGUEdBMF9YQV9SRklOVEVSRkFDRU9FLCAweDMwMCwgMHgxKTsKKworCX0KK30KKworI3VuZGVmIElRS19BRERBX1JFR19OVU0KKyN1bmRlZiBJUUtfREVMQVlfVElNRQorCit2b2lkIHJ0bDkyY19waHlfaXFfY2FsaWJyYXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBib29sIGJfcmVjb3ZlcnkpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGh5ICpydGxwaHkgPSAmKHJ0bHByaXYtPnBoeSk7CisJc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCA9IHJ0bF9oYWwocnRsX3ByaXYoaHcpKTsKKworCWxvbmcgcmVzdWx0WzRdWzhdOworCXU4IGksIGZpbmFsX2NhbmRpZGF0ZTsKKwlib29sIGJfcGF0aGFfb2ssIGJfcGF0aGJfb2s7CisJbG9uZyByZWdfZTk0LCByZWdfZTljLCByZWdfZWE0LCByZWdfZWFjLCByZWdfZWI0LCByZWdfZWJjLCByZWdfZWM0LAorCSAgICByZWdfZWNjLCByZWdfdG1wID0gMDsKKwlib29sIGlzMTJzaW11bGFyLCBpczEzc2ltdWxhciwgaXMyM3NpbXVsYXI7CisJYm9vbCBiX3N0YXJ0X2NvbnR0eCA9IGZhbHNlLCBiX3NpbmdsZXRvbmUgPSBmYWxzZTsKKwl1MzIgaXFrX2JiX3JlZ1sxMF0gPSB7CisJCVJPRkRNMF9YQVJYSVFJTUJBTEFOQ0UsCisJCVJPRkRNMF9YQlJYSVFJTUJBTEFOQ0UsCisJCVJPRkRNMF9FQ0NBVEhSRVNIT0xELAorCQlST0ZETTBfQUdDUlNTSVRBQkxFLAorCQlST0ZETTBfWEFUWElRSU1CQUxBTkNFLAorCQlST0ZETTBfWEJUWElRSU1CQUxBTkNFLAorCQlST0ZETTBfWENUWElRSU1CQUxBTkNFLAorCQlST0ZETTBfWENUWEFGRSwKKwkJUk9GRE0wX1hEVFhBRkUsCisJCVJPRkRNMF9SWElRRVhUQU5UQQorCX07CisKKwlpZiAoYl9yZWNvdmVyeSkgeworCQlfcnRsOTJjX3BoeV9yZWxvYWRfYWRkYV9yZWdpc3RlcnMoaHcsCisJCQkJCQkgIGlxa19iYl9yZWcsCisJCQkJCQkgIHJ0bHBoeS0+aXFrX2JiX2JhY2t1cCwgMTApOworCQlyZXR1cm47CisJfQorCWlmIChiX3N0YXJ0X2NvbnR0eCB8fCBiX3NpbmdsZXRvbmUpCisJCXJldHVybjsKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCXJlc3VsdFswXVtpXSA9IDA7CisJCXJlc3VsdFsxXVtpXSA9IDA7CisJCXJlc3VsdFsyXVtpXSA9IDA7CisJCXJlc3VsdFszXVtpXSA9IDA7CisJfQorCWZpbmFsX2NhbmRpZGF0ZSA9IDB4ZmY7CisJYl9wYXRoYV9vayA9IGZhbHNlOworCWJfcGF0aGJfb2sgPSBmYWxzZTsKKwlpczEyc2ltdWxhciA9IGZhbHNlOworCWlzMjNzaW11bGFyID0gZmFsc2U7CisJaXMxM3NpbXVsYXIgPSBmYWxzZTsKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCWlmIChJU185MkNfU0VSSUFMKHJ0bGhhbC0+dmVyc2lvbikpCisJCQlfcnRsOTJjX3BoeV9pcV9jYWxpYnJhdGUoaHcsIHJlc3VsdCwgaSwgdHJ1ZSk7CisJCWVsc2UKKwkJCV9ydGw5MmNfcGh5X2lxX2NhbGlicmF0ZShodywgcmVzdWx0LCBpLCBmYWxzZSk7CisJCWlmIChpID09IDEpIHsKKwkJCWlzMTJzaW11bGFyID0gX3J0bDkyY19waHlfc2ltdWxhcml0eV9jb21wYXJlKGh3LAorCQkJCQkJCQkgICAgIHJlc3VsdCwgMCwKKwkJCQkJCQkJICAgICAxKTsKKwkJCWlmIChpczEyc2ltdWxhcikgeworCQkJCWZpbmFsX2NhbmRpZGF0ZSA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKGkgPT0gMikgeworCQkJaXMxM3NpbXVsYXIgPSBfcnRsOTJjX3BoeV9zaW11bGFyaXR5X2NvbXBhcmUoaHcsCisJCQkJCQkJCSAgICAgcmVzdWx0LCAwLAorCQkJCQkJCQkgICAgIDIpOworCQkJaWYgKGlzMTNzaW11bGFyKSB7CisJCQkJZmluYWxfY2FuZGlkYXRlID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlzMjNzaW11bGFyID0gX3J0bDkyY19waHlfc2ltdWxhcml0eV9jb21wYXJlKGh3LAorCQkJCQkJCQkgICAgIHJlc3VsdCwgMSwKKwkJCQkJCQkJICAgICAyKTsKKwkJCWlmIChpczIzc2ltdWxhcikKKwkJCQlmaW5hbF9jYW5kaWRhdGUgPSAxOworCQkJZWxzZSB7CisJCQkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJCQkJcmVnX3RtcCArPSByZXN1bHRbM11baV07CisKKwkJCQlpZiAocmVnX3RtcCAhPSAwKQorCQkJCQlmaW5hbF9jYW5kaWRhdGUgPSAzOworCQkJCWVsc2UKKwkJCQkJZmluYWxfY2FuZGlkYXRlID0gMHhGRjsKKwkJCX0KKwkJfQorCX0KKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCXJlZ19lOTQgPSByZXN1bHRbaV1bMF07CisJCXJlZ19lOWMgPSByZXN1bHRbaV1bMV07CisJCXJlZ19lYTQgPSByZXN1bHRbaV1bMl07CisJCXJlZ19lYWMgPSByZXN1bHRbaV1bM107CisJCXJlZ19lYjQgPSByZXN1bHRbaV1bNF07CisJCXJlZ19lYmMgPSByZXN1bHRbaV1bNV07CisJCXJlZ19lYzQgPSByZXN1bHRbaV1bNl07CisJCXJlZ19lY2MgPSByZXN1bHRbaV1bN107CisJfQorCWlmIChmaW5hbF9jYW5kaWRhdGUgIT0gMHhmZikgeworCQlydGxwaHktPnJlZ19lOTQgPSByZWdfZTk0ID0gcmVzdWx0W2ZpbmFsX2NhbmRpZGF0ZV1bMF07CisJCXJ0bHBoeS0+cmVnX2U5YyA9IHJlZ19lOWMgPSByZXN1bHRbZmluYWxfY2FuZGlkYXRlXVsxXTsKKwkJcmVnX2VhNCA9IHJlc3VsdFtmaW5hbF9jYW5kaWRhdGVdWzJdOworCQlyZWdfZWFjID0gcmVzdWx0W2ZpbmFsX2NhbmRpZGF0ZV1bM107CisJCXJ0bHBoeS0+cmVnX2ViNCA9IHJlZ19lYjQgPSByZXN1bHRbZmluYWxfY2FuZGlkYXRlXVs0XTsKKwkJcnRscGh5LT5yZWdfZWJjID0gcmVnX2ViYyA9IHJlc3VsdFtmaW5hbF9jYW5kaWRhdGVdWzVdOworCQlyZWdfZWM0ID0gcmVzdWx0W2ZpbmFsX2NhbmRpZGF0ZV1bNl07CisJCXJlZ19lY2MgPSByZXN1bHRbZmluYWxfY2FuZGlkYXRlXVs3XTsKKwkJYl9wYXRoYV9vayA9IGJfcGF0aGJfb2sgPSB0cnVlOworCX0gZWxzZSB7CisJCXJ0bHBoeS0+cmVnX2U5NCA9IHJ0bHBoeS0+cmVnX2ViNCA9IDB4MTAwOworCQlydGxwaHktPnJlZ19lOWMgPSBydGxwaHktPnJlZ19lYmMgPSAweDA7CisJfQorCWlmIChyZWdfZTk0ICE9IDApIC8qJiYocmVnX2VhNCAhPSAwKSAqLworCQlfcnRsOTJjX3BoeV9wYXRoX2FfZmlsbF9pcWtfbWF0cml4KGh3LCBiX3BhdGhhX29rLCByZXN1bHQsCisJCQkJCQkgICBmaW5hbF9jYW5kaWRhdGUsCisJCQkJCQkgICAocmVnX2VhNCA9PSAwKSk7CisJaWYgKElTXzkyQ19TRVJJQUwocnRsaGFsLT52ZXJzaW9uKSkgeworCQlpZiAocmVnX2ViNCAhPSAwKSAvKiYmKHJlZ19lYzQgIT0gMCkgKi8KKwkJCV9ydGw5MmNfcGh5X3BhdGhfYl9maWxsX2lxa19tYXRyaXgoaHcsIGJfcGF0aGJfb2ssCisJCQkJCQkJICAgcmVzdWx0LAorCQkJCQkJCSAgIGZpbmFsX2NhbmRpZGF0ZSwKKwkJCQkJCQkgICAocmVnX2VjNCA9PSAwKSk7CisJfQorCV9ydGw5MmNfcGh5X3NhdmVfYWRkYV9yZWdpc3RlcnMoaHcsIGlxa19iYl9yZWcsCisJCQkJCXJ0bHBoeS0+aXFrX2JiX2JhY2t1cCwgMTApOworfQorCit2b2lkIHJ0bDkyY19waHlfbGNfY2FsaWJyYXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bF9wcml2KGh3KSk7CisJYm9vbCBiX3N0YXJ0X2NvbnR0eCA9IGZhbHNlLCBiX3NpbmdsZXRvbmUgPSBmYWxzZTsKKworCWlmIChiX3N0YXJ0X2NvbnR0eCB8fCBiX3NpbmdsZXRvbmUpCisJCXJldHVybjsKKwlpZiAoSVNfOTJDX1NFUklBTChydGxoYWwtPnZlcnNpb24pKQorCQlfcnRsOTJjX3BoeV9sY19jYWxpYnJhdGUoaHcsIHRydWUpOworCWVsc2UKKwkJX3J0bDkyY19waHlfbGNfY2FsaWJyYXRlKGh3LCBmYWxzZSk7Cit9CisKK3ZvaWQgcnRsOTJjX3BoeV9hcF9jYWxpYnJhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGNoYXIgZGVsdGEpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGh5ICpydGxwaHkgPSAmKHJ0bHByaXYtPnBoeSk7CisJc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCA9IHJ0bF9oYWwocnRsX3ByaXYoaHcpKTsKKworCWlmIChydGxwaHktPmJfYXBrX2RvbmUpCisJCXJldHVybjsKKwlpZiAoSVNfOTJDX1NFUklBTChydGxoYWwtPnZlcnNpb24pKQorCQlfcnRsOTJjX3BoeV9hcF9jYWxpYnJhdGUoaHcsIGRlbHRhLCB0cnVlKTsKKwllbHNlCisJCV9ydGw5MmNfcGh5X2FwX2NhbGlicmF0ZShodywgZGVsdGEsIGZhbHNlKTsKK30KKwordm9pZCBydGw5MmNfcGh5X3NldF9yZnBhdGhfc3dpdGNoKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBib29sIGJtYWluKQoreworCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bF9wcml2KGh3KSk7CisKKwlpZiAoSVNfOTJDX1NFUklBTChydGxoYWwtPnZlcnNpb24pKQorCQlfcnRsOTJjX3BoeV9zZXRfcmZwYXRoX3N3aXRjaChodywgYm1haW4sIHRydWUpOworCWVsc2UKKwkJX3J0bDkyY19waHlfc2V0X3JmcGF0aF9zd2l0Y2goaHcsIGJtYWluLCBmYWxzZSk7Cit9CisKK2Jvb2wgcnRsOTJjX3BoeV9zZXRfaW9fY21kKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBlbnVtIGlvX3R5cGUgaW90eXBlKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BoeSAqcnRscGh5ID0gJihydGxwcml2LT5waHkpOworCWJvb2wgYl9wb3N0cHJvY2Vzc2luZyA9IGZhbHNlOworCisJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9DTUQsIERCR19UUkFDRSwKKwkJICgiLS0+SU8gQ21kKCUjeCksIHNldF9pb19pbnByb2dyZXNzKCVkKVxuIiwKKwkJICBpb3R5cGUsIHJ0bHBoeS0+c2V0X2lvX2lucHJvZ3Jlc3MpKTsKKwlkbyB7CisJCXN3aXRjaCAoaW90eXBlKSB7CisJCWNhc2UgSU9fQ01EX1JFU1VNRV9ETV9CWV9TQ0FOOgorCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9DTUQsIERCR19UUkFDRSwKKwkJCQkgKCJbSU8gQ01EXSBSZXN1bWUgRE0gYWZ0ZXIgc2Nhbi5cbiIpKTsKKwkJCWJfcG9zdHByb2Nlc3NpbmcgPSB0cnVlOworCQkJYnJlYWs7CisJCWNhc2UgSU9fQ01EX1BBVVNFX0RNX0JZX1NDQU46CisJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0NNRCwgREJHX1RSQUNFLAorCQkJCSAoIltJTyBDTURdIFBhdXNlIERNIGJlZm9yZSBzY2FuLlxuIikpOworCQkJYl9wb3N0cHJvY2Vzc2luZyA9IHRydWU7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfRU1FUkcsCisJCQkJICgic3dpdGNoIGNhc2Ugbm90IHByb2Nlc3NcbiIpKTsKKwkJCWJyZWFrOworCQl9CisJfSB3aGlsZSAoZmFsc2UpOworCWlmIChiX3Bvc3Rwcm9jZXNzaW5nICYmICFydGxwaHktPnNldF9pb19pbnByb2dyZXNzKSB7CisJCXJ0bHBoeS0+c2V0X2lvX2lucHJvZ3Jlc3MgPSB0cnVlOworCQlydGxwaHktPmN1cnJlbnRfaW9fdHlwZSA9IGlvdHlwZTsKKwl9IGVsc2UgeworCQlyZXR1cm4gZmFsc2U7CisJfQorCXJ0bDkyY19waHlfc2V0X2lvKGh3KTsKKwlSVF9UUkFDRShydGxwcml2LCBDT01QX0NNRCwgREJHX1RSQUNFLCAoIjwtLUlPIFR5cGUoJSN4KVxuIiwgaW90eXBlKSk7CisJcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgcnRsOTJjX3BoeV9zZXRfaW8oc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGh5ICpydGxwaHkgPSAmKHJ0bHByaXYtPnBoeSk7CisKKwlSVF9UUkFDRShydGxwcml2LCBDT01QX0NNRCwgREJHX1RSQUNFLAorCQkgKCItLS0+Q21kKCUjeCksIHNldF9pb19pbnByb2dyZXNzKCVkKVxuIiwKKwkJICBydGxwaHktPmN1cnJlbnRfaW9fdHlwZSwgcnRscGh5LT5zZXRfaW9faW5wcm9ncmVzcykpOworCXN3aXRjaCAocnRscGh5LT5jdXJyZW50X2lvX3R5cGUpIHsKKwljYXNlIElPX0NNRF9SRVNVTUVfRE1fQllfU0NBTjoKKwkJZG1fZGlndGFibGUuY3VyX2lndmFsdWUgPSBydGxwaHktPmluaXRnYWluX2JhY2t1cC54YWFnY2NvcmUxOworCQlydGw5MmNfZG1fd3JpdGVfZGlnKGh3KTsKKwkJcnRsOTJjX3BoeV9zZXRfdHhwb3dlcl9sZXZlbChodywgcnRscGh5LT5jdXJyZW50X2NoYW5uZWwpOworCQlicmVhazsKKwljYXNlIElPX0NNRF9QQVVTRV9ETV9CWV9TQ0FOOgorCQlydGxwaHktPmluaXRnYWluX2JhY2t1cC54YWFnY2NvcmUxID0gZG1fZGlndGFibGUuY3VyX2lndmFsdWU7CisJCWRtX2RpZ3RhYmxlLmN1cl9pZ3ZhbHVlID0gMHgxNzsKKwkJcnRsOTJjX2RtX3dyaXRlX2RpZyhodyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfRU1FUkcsCisJCQkgKCJzd2l0Y2ggY2FzZSBub3QgcHJvY2Vzc1xuIikpOworCQlicmVhazsKKwl9CisJcnRscGh5LT5zZXRfaW9faW5wcm9ncmVzcyA9IGZhbHNlOworCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfQ01ELCBEQkdfVFJBQ0UsCisJCSAoIjwtLS0oJSN4KVxuIiwgcnRscGh5LT5jdXJyZW50X2lvX3R5cGUpKTsKK30KKwordm9pZCBydGw5MmNlX3BoeV9zZXRfcmZfb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX1NQUzBfQ1RSTCwgMHgyYik7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX1NZU19GVU5DX0VOLCAweEUzKTsKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfQVBTRF9DVFJMLCAweDAwKTsKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfU1lTX0ZVTkNfRU4sIDB4RTIpOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19TWVNfRlVOQ19FTiwgMHhFMyk7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX1RYUEFVU0UsIDB4MDApOworfQorCitzdGF0aWMgdm9pZCBfcnRsOTJjZV9waHlfc2V0X3JmX3NsZWVwKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXUzMiB1NGJfdG1wOworCXU4IGRlbGF5ID0gNTsKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfVFhQQVVTRSwgMHhGRik7CisJcnRsX3NldF9yZnJlZyhodywgUkY5MF9QQVRIX0EsIDB4MDAsIFJGUkVHX09GRlNFVF9NQVNLLCAweDAwKTsKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfQVBTRF9DVFJMLCAweDQwKTsKKwl1NGJfdG1wID0gcnRsX2dldF9yZnJlZyhodywgUkY5MF9QQVRIX0EsIDAsIFJGUkVHX09GRlNFVF9NQVNLKTsKKwl3aGlsZSAodTRiX3RtcCAhPSAwICYmIGRlbGF5ID4gMCkgeworCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfQVBTRF9DVFJMLCAweDApOworCQlydGxfc2V0X3JmcmVnKGh3LCBSRjkwX1BBVEhfQSwgMHgwMCwgUkZSRUdfT0ZGU0VUX01BU0ssIDB4MDApOworCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfQVBTRF9DVFJMLCAweDQwKTsKKwkJdTRiX3RtcCA9IHJ0bF9nZXRfcmZyZWcoaHcsIFJGOTBfUEFUSF9BLCAwLCBSRlJFR19PRkZTRVRfTUFTSyk7CisJCWRlbGF5LS07CisJfQorCWlmIChkZWxheSA9PSAwKSB7CisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19BUFNEX0NUUkwsIDB4MDApOworCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfU1lTX0ZVTkNfRU4sIDB4RTIpOworCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfU1lTX0ZVTkNfRU4sIDB4RTMpOworCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfVFhQQVVTRSwgMHgwMCk7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUE9XRVIsIERCR19UUkFDRSwKKwkJCSAoIlN3aXRjaCBSRiB0aW1lb3V0ICEhIS5cbiIpKTsKKwkJcmV0dXJuOworCX0KKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfU1lTX0ZVTkNfRU4sIDB4RTIpOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19TUFMwX0NUUkwsIDB4MjIpOworfQorCitzdGF0aWMgYm9vbCBfcnRsOTJjZV9waHlfc2V0X3JmX3Bvd2VyX3N0YXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQkgICAgZW51bSByZl9wd3JzdGF0ZSByZnB3cl9zdGF0ZSkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9wY2lfcHJpdiAqcGNpcHJpdiA9IHJ0bF9wY2lwcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOworCXN0cnVjdCBydGxfcHNfY3RsICpwcHNjID0gcnRsX3BzYyhydGxfcHJpdihodykpOworCWJvb2wgYnJlc3VsdCA9IHRydWU7CisJdTggaSwgcXVldWVfaWQ7CisJc3RydWN0IHJ0bDgxOTJfdHhfcmluZyAqcmluZyA9IE5VTEw7CisKKwlwcHNjLT5zZXRfcmZwb3dlcnN0YXRlX2lucHJvZ3Jlc3MgPSB0cnVlOworCXN3aXRjaCAocmZwd3Jfc3RhdGUpIHsKKwljYXNlIEVSRk9OOnsKKwkJCWlmICgocHBzYy0+cmZwd3Jfc3RhdGUgPT0gRVJGT0ZGKSAmJgorCQkJICAgIFJUX0lOX1BTX0xFVkVMKHBwc2MsIFJUX1JGX09GRl9MRVZMX0hBTFRfTklDKSkgeworCQkJCWJvb2wgcnRzdGF0dXM7CisJCQkJdTMyIEluaXRpYWxpemVDb3VudCA9IDA7CisJCQkJZG8geworCQkJCQlJbml0aWFsaXplQ291bnQrKzsKKwkJCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9SRiwgREJHX0RNRVNHLAorCQkJCQkJICgiSVBTIFNldCBlUmYgbmljIGVuYWJsZVxuIikpOworCQkJCQlydHN0YXR1cyA9IHJ0bF9wc19lbmFibGVfbmljKGh3KTsKKwkJCQl9IHdoaWxlICgocnRzdGF0dXMgIT0gdHJ1ZSkKKwkJCQkJICYmIChJbml0aWFsaXplQ291bnQgPCAxMCkpOworCQkJCVJUX0NMRUFSX1BTX0xFVkVMKHBwc2MsCisJCQkJCQkgIFJUX1JGX09GRl9MRVZMX0hBTFRfTklDKTsKKwkJCX0gZWxzZSB7CisJCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9SRiwgREJHX0RNRVNHLAorCQkJCQkgKCJTZXQgRVJGT04gc2xlZXBlZDolZCBtc1xuIiwKKwkJCQkJICBqaWZmaWVzX3RvX21zZWNzKGppZmZpZXMgLQorCQkJCQkJICAgcHBzYy0+CisJCQkJCQkgICBsYXN0X3NsZWVwX2ppZmZpZXMpKSk7CisJCQkJcHBzYy0+bGFzdF9hd2FrZV9qaWZmaWVzID0gamlmZmllczsKKwkJCQlydGw5MmNlX3BoeV9zZXRfcmZfb24oaHcpOworCQkJfQorCQkJaWYgKG1hYy0+bGlua19zdGF0ZSA9PSBNQUM4MDIxMV9MSU5LRUQpIHsKKwkJCQlydGxwcml2LT5jZmctPm9wcy0+bGVkX2NvbnRyb2woaHcsCisJCQkJCQkJICAgICAgIExFRF9DVExfTElOSyk7CisJCQl9IGVsc2UgeworCQkJCXJ0bHByaXYtPmNmZy0+b3BzLT5sZWRfY29udHJvbChodywKKwkJCQkJCQkgICAgICAgTEVEX0NUTF9OT19MSU5LKTsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJY2FzZSBFUkZPRkY6eworCQkJZm9yIChxdWV1ZV9pZCA9IDAsIGkgPSAwOworCQkJICAgICBxdWV1ZV9pZCA8IFJUTF9QQ0lfTUFYX1RYX1FVRVVFX0NPVU5UOykgeworCQkJCXJpbmcgPSAmcGNpcHJpdi0+ZGV2LnR4X3JpbmdbcXVldWVfaWRdOworCQkJCWlmIChza2JfcXVldWVfbGVuKCZyaW5nLT5xdWV1ZSkgPT0gMCB8fAorCQkJCSAgICBxdWV1ZV9pZCA9PSBCRUFDT05fUVVFVUUpIHsKKwkJCQkJcXVldWVfaWQrKzsKKwkJCQkJY29udGludWU7CisJCQkJfSBlbHNlIHsKKwkJCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19XQVJOSU5HLAorCQkJCQkJICgiZVJmIE9mZi9TbGVlcDogJWQgdGltZXMgIgorCQkJCQkJICAiVGNiQnVzeVF1ZXVlWyVkXSAiCisJCQkJCQkgICI9JWQgYmVmb3JlIGRvemUhXG4iLCAoaSArIDEpLAorCQkJCQkJICBxdWV1ZV9pZCwKKwkJCQkJCSAgc2tiX3F1ZXVlX2xlbigmcmluZy0+cXVldWUpKSk7CisJCQkJCXVkZWxheSgxMCk7CisJCQkJCWkrKzsKKwkJCQl9CisJCQkJaWYgKGkgPj0gTUFYX0RPWkVfV0FJVElOR19USU1FU185eCkgeworCQkJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX1dBUk5JTkcsCisJCQkJCQkgKCJcbkVSRk9GRjogJWQgdGltZXMgIgorCQkJCQkJICAiVGNiQnVzeVF1ZXVlWyVkXSA9ICVkICFcbiIsCisJCQkJCQkgIE1BWF9ET1pFX1dBSVRJTkdfVElNRVNfOXgsCisJCQkJCQkgIHF1ZXVlX2lkLAorCQkJCQkJICBza2JfcXVldWVfbGVuKCZyaW5nLT5xdWV1ZSkpKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJaWYgKHBwc2MtPnJlZ19yZnBzX2xldmVsICYgUlRfUkZfT0ZGX0xFVkxfSEFMVF9OSUMpIHsKKwkJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1JGLCBEQkdfRE1FU0csCisJCQkJCSAoIklQUyBTZXQgZVJmIG5pYyBkaXNhYmxlXG4iKSk7CisJCQkJcnRsX3BzX2Rpc2FibGVfbmljKGh3KTsKKwkJCQlSVF9TRVRfUFNfTEVWRUwocHBzYywgUlRfUkZfT0ZGX0xFVkxfSEFMVF9OSUMpOworCQkJfSBlbHNlIHsKKwkJCQlpZiAocHBzYy0+cmZvZmZfcmVhc29uID09IFJGX0NIQU5HRV9CWV9JUFMpIHsKKwkJCQkJcnRscHJpdi0+Y2ZnLT5vcHMtPmxlZF9jb250cm9sKGh3LAorCQkJCQkJCSAgICAgICBMRURfQ1RMX05PX0xJTkspOworCQkJCX0gZWxzZSB7CisJCQkJCXJ0bHByaXYtPmNmZy0+b3BzLT5sZWRfY29udHJvbChodywKKwkJCQkJCQkgICAgIExFRF9DVExfUE9XRVJfT0ZGKTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJfQorCWNhc2UgRVJGU0xFRVA6eworCQkJaWYgKHBwc2MtPnJmcHdyX3N0YXRlID09IEVSRk9GRikKKwkJCQlicmVhazsKKwkJCWZvciAocXVldWVfaWQgPSAwLCBpID0gMDsKKwkJCSAgICAgcXVldWVfaWQgPCBSVExfUENJX01BWF9UWF9RVUVVRV9DT1VOVDspIHsKKwkJCQlyaW5nID0gJnBjaXByaXYtPmRldi50eF9yaW5nW3F1ZXVlX2lkXTsKKwkJCQlpZiAoc2tiX3F1ZXVlX2xlbigmcmluZy0+cXVldWUpID09IDApIHsKKwkJCQkJcXVldWVfaWQrKzsKKwkJCQkJY29udGludWU7CisJCQkJfSBlbHNlIHsKKwkJCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19XQVJOSU5HLAorCQkJCQkJICgiZVJmIE9mZi9TbGVlcDogJWQgdGltZXMgIgorCQkJCQkJICAiVGNiQnVzeVF1ZXVlWyVkXSA9JWQgYmVmb3JlICIKKwkJCQkJCSAgImRvemUhXG4iLCAoaSArIDEpLCBxdWV1ZV9pZCwKKwkJCQkJCSAgc2tiX3F1ZXVlX2xlbigmcmluZy0+cXVldWUpKSk7CisJCQkJCXVkZWxheSgxMCk7CisJCQkJCWkrKzsKKwkJCQl9CisJCQkJaWYgKGkgPj0gTUFYX0RPWkVfV0FJVElOR19USU1FU185eCkgeworCQkJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX1dBUk5JTkcsCisJCQkJCQkgKCJcbiBFUkZTTEVFUDogJWQgdGltZXMgIgorCQkJCQkJICAiVGNiQnVzeVF1ZXVlWyVkXSA9ICVkICFcbiIsCisJCQkJCQkgIE1BWF9ET1pFX1dBSVRJTkdfVElNRVNfOXgsCisJCQkJCQkgIHF1ZXVlX2lkLAorCQkJCQkJICBza2JfcXVldWVfbGVuKCZyaW5nLT5xdWV1ZSkpKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9SRiwgREJHX0RNRVNHLAorCQkJCSAoIlNldCBFUkZTTEVFUCBhd2FrZWQ6JWQgbXNcbiIsCisJCQkJICBqaWZmaWVzX3RvX21zZWNzKGppZmZpZXMgLQorCQkJCQkJICAgcHBzYy0+bGFzdF9hd2FrZV9qaWZmaWVzKSkpOworCQkJcHBzYy0+bGFzdF9zbGVlcF9qaWZmaWVzID0gamlmZmllczsKKwkJCV9ydGw5MmNlX3BoeV9zZXRfcmZfc2xlZXAoaHcpOworCQkJYnJlYWs7CisJCX0KKwlkZWZhdWx0OgorCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX0VNRVJHLAorCQkJICgic3dpdGNoIGNhc2Ugbm90IHByb2Nlc3NcbiIpKTsKKwkJYnJlc3VsdCA9IGZhbHNlOworCQlicmVhazsKKwl9CisJaWYgKGJyZXN1bHQpCisJCXBwc2MtPnJmcHdyX3N0YXRlID0gcmZwd3Jfc3RhdGU7CisJcHBzYy0+c2V0X3JmcG93ZXJzdGF0ZV9pbnByb2dyZXNzID0gZmFsc2U7CisJcmV0dXJuIGJyZXN1bHQ7Cit9CisKK2Jvb2wgcnRsOTJjX3BoeV9zZXRfcmZfcG93ZXJfc3RhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgZW51bSByZl9wd3JzdGF0ZSByZnB3cl9zdGF0ZSkKK3sKKwlzdHJ1Y3QgcnRsX3BzX2N0bCAqcHBzYyA9IHJ0bF9wc2MocnRsX3ByaXYoaHcpKTsKKwlib29sIGJyZXN1bHQgPSBmYWxzZTsKKworCWlmIChyZnB3cl9zdGF0ZSA9PSBwcHNjLT5yZnB3cl9zdGF0ZSkKKwkJcmV0dXJuIGJyZXN1bHQ7CisJYnJlc3VsdCA9IF9ydGw5MmNlX3BoeV9zZXRfcmZfcG93ZXJfc3RhdGUoaHcsIHJmcHdyX3N0YXRlKTsKKwlyZXR1cm4gYnJlc3VsdDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmNlL3BoeS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2UvcGh5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E0ZGFlZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmNlL3BoeS5oCkBAIC0wLDAgKzEsMjM3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDktMjAxMCAgUmVhbHRlayBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLCBVU0EKKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIHdsYW5mYWUgPHdsYW5mYWVAcmVhbHRlay5jb20+CisgKiBSZWFsdGVrIENvcnBvcmF0aW9uLCBOby4gMiwgSW5ub3ZhdGlvbiBSb2FkIElJLCBIc2luY2h1IFNjaWVuY2UgUGFyaywKKyAqIEhzaW5jaHUgMzAwLCBUYWl3YW4uCisgKgorICogTGFycnkgRmluZ2VyIDxMYXJyeS5GaW5nZXJAbHdmaW5nZXIubmV0PgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX1JUTDkyQ19QSFlfSF9fCisjZGVmaW5lIF9fUlRMOTJDX1BIWV9IX18KKworI2RlZmluZSBNQVhfUFJFQ01EX0NOVAkJCTE2CisjZGVmaW5lIE1BWF9SRkRFUEVORENNRF9DTlQJCTE2CisjZGVmaW5lIE1BWF9QT1NUQ01EX0NOVAkJCTE2CisKKyNkZWZpbmUgTUFYX0RPWkVfV0FJVElOR19USU1FU185eAk2NAorCisjZGVmaW5lIFJUX0NBTk5PVF9JTyhodykJCWZhbHNlCisjZGVmaW5lIEhJR0hQT1dFUl9SQURJT0FfQVJSQVlMRU4JMjIKKworI2RlZmluZSBNQVhfVE9MRVJBTkNFCQkJNQorI2RlZmluZQlJUUtfREVMQVlfVElNRQkJCTEKKworI2RlZmluZQlBUEtfQkJfUkVHX05VTQkJCTUKKyNkZWZpbmUJQVBLX0FGRV9SRUdfTlVNCQkJMTYKKyNkZWZpbmUJQVBLX0NVUlZFX1JFR19OVU0JCTQKKyNkZWZpbmUJUEFUSF9OVU0JCQkyCisKKyNkZWZpbmUgTE9PUF9MSU1JVAkJCTUKKyNkZWZpbmUgTUFYX1NUQUxMX1RJTUUJCQk1MAorI2RlZmluZSBBbnRlbm5hRGl2ZXJzaXR5VmFsdWUJCTB4ODAKKyNkZWZpbmUgTUFYX1RYUFdSX0lEWF9OTU9ERV85MlMJCTYzCisjZGVmaW5lIFJlc2V0X0NudF9MaW1pdAkJCTMKKworI2RlZmluZSBJUUtfQUREQV9SRUdfTlVNCQkxNgorI2RlZmluZSBJUUtfTUFDX1JFR19OVU0JCQk0CisKKyNkZWZpbmUgUkY5MF9QQVRIX01BWAkJCTIKKyNkZWZpbmUgQ0hBTk5FTF9NQVhfTlVNQkVSCQkxNAorI2RlZmluZSBDSEFOTkVMX0dST1VQX01BWAkJMworCisjZGVmaW5lIENUX09GRlNFVF9NQUNfQUREUgkJMFgxNgorCisjZGVmaW5lIENUX09GRlNFVF9DQ0tfVFhfUFdSX0lEWAkweDVBCisjZGVmaW5lIENUX09GRlNFVF9IVDQwMVNfVFhfUFdSX0lEWAkweDYwCisjZGVmaW5lIENUX09GRlNFVF9IVDQwMlNfVFhfUFdSX0lEWF9ESUYJMHg2NgorI2RlZmluZSBDVF9PRkZTRVRfSFQyMF9UWF9QV1JfSURYX0RJRkYJMHg2OQorI2RlZmluZSBDVF9PRkZTRVRfT0ZETV9UWF9QV1JfSURYX0RJRkYJMHg2QworCisjZGVmaW5lIENUX09GRlNFVF9IVDQwX01BWF9QV1JfT0ZGU0VUCTB4NkYKKyNkZWZpbmUgQ1RfT0ZGU0VUX0hUMjBfTUFYX1BXUl9PRkZTRVQJMHg3MgorCisjZGVmaW5lIENUX09GRlNFVF9DSEFOTkVMX1BMQUgJCTB4NzUKKyNkZWZpbmUgQ1RfT0ZGU0VUX1RIRVJNQUxfTUVURVIJCTB4NzgKKyNkZWZpbmUgQ1RfT0ZGU0VUX1JGX09QVElPTgkJMHg3OQorI2RlZmluZSBDVF9PRkZTRVRfVkVSU0lPTgkJMHg3RQorI2RlZmluZSBDVF9PRkZTRVRfQ1VTVE9NRVJfSUQJCTB4N0YKKworI2RlZmluZSBSVEw5MkNfTUFYX1BBVEhfTlVNCQkyCisjZGVmaW5lIENIQU5ORUxfTUFYX05VTUJFUgkJMTQKKyNkZWZpbmUgQ0hBTk5FTF9HUk9VUF9NQVgJCTMKKworZW51bSBzd2NobmxjbWRfaWQgeworCUNNRElEX0VORCwKKwlDTURJRF9TRVRfVFhQT1dFUk9XRVJfTEVWRUwsCisJQ01ESURfQkJSRUdXUklURTEwLAorCUNNRElEX1dSSVRFUE9SVF9VTE9ORywKKwlDTURJRF9XUklURVBPUlRfVVNIT1JULAorCUNNRElEX1dSSVRFUE9SVF9VQ0hBUiwKKwlDTURJRF9SRl9XUklURVJFRywKK307CisKK3N0cnVjdCBzd2NobmxjbWQgeworCWVudW0gc3djaG5sY21kX2lkIGNtZGlkOworCXUzMiBwYXJhMTsKKwl1MzIgcGFyYTI7CisJdTMyIG1zZGVsYXk7Cit9OworCitlbnVtIGh3OTBfYmxvY2tfZSB7CisJSFc5MF9CTE9DS19NQUMgPSAwLAorCUhXOTBfQkxPQ0tfUEhZMCA9IDEsCisJSFc5MF9CTE9DS19QSFkxID0gMiwKKwlIVzkwX0JMT0NLX1JGID0gMywKKwlIVzkwX0JMT0NLX01BWElNVU0gPSA0LAorfTsKKworZW51bSBiYXNlYmFuZF9jb25maWdfdHlwZSB7CisJQkFTRUJBTkRfQ09ORklHX1BIWV9SRUcgPSAwLAorCUJBU0VCQU5EX0NPTkZJR19BR0NfVEFCID0gMSwKK307CisKK2VudW0gcmFfb2Zmc2V0X2FyZWEgeworCVJBX09GRlNFVF9MRUdBQ1lfT0ZETTEsCisJUkFfT0ZGU0VUX0xFR0FDWV9PRkRNMiwKKwlSQV9PRkZTRVRfSFRfT0ZETTEsCisJUkFfT0ZGU0VUX0hUX09GRE0yLAorCVJBX09GRlNFVF9IVF9PRkRNMywKKwlSQV9PRkZTRVRfSFRfT0ZETTQsCisJUkFfT0ZGU0VUX0hUX0NDSywKK307CisKK2VudW0gYW50ZW5uYV9wYXRoIHsKKwlBTlRFTk5BX05PTkUsCisJQU5URU5OQV9ELAorCUFOVEVOTkFfQywKKwlBTlRFTk5BX0NELAorCUFOVEVOTkFfQiwKKwlBTlRFTk5BX0JELAorCUFOVEVOTkFfQkMsCisJQU5URU5OQV9CQ0QsCisJQU5URU5OQV9BLAorCUFOVEVOTkFfQUQsCisJQU5URU5OQV9BQywKKwlBTlRFTk5BX0FDRCwKKwlBTlRFTk5BX0FCLAorCUFOVEVOTkFfQUJELAorCUFOVEVOTkFfQUJDLAorCUFOVEVOTkFfQUJDRAorfTsKKworc3RydWN0IHJfYW50ZW5uYV9zZWxlY3Rfb2ZkbSB7CisJdTMyIHJfdHhfYW50ZW5uYTo0OworCXUzMiByX2FudF9sOjQ7CisJdTMyIHJfYW50X25vbl9odDo0OworCXUzMiByX2FudF9odDE6NDsKKwl1MzIgcl9hbnRfaHQyOjQ7CisJdTMyIHJfYW50X2h0X3MxOjQ7CisJdTMyIHJfYW50X25vbl9odF9zMTo0OworCXUzMiBvZmRtX3R4c2M6MjsKKwl1MzIgcmVzZXJ2ZWQ6MjsKK307CisKK3N0cnVjdCByX2FudGVubmFfc2VsZWN0X2NjayB7CisJdTggcl9jY2tyeF9lbmFibGVfMjoyOworCXU4IHJfY2NrcnhfZW5hYmxlOjI7CisJdTggcl9jY2t0eF9lbmFibGU6NDsKK307CisKK3N0cnVjdCBlZnVzZV9jb250ZW50cyB7CisJdTggbWFjX2FkZHJbRVRIX0FMRU5dOworCXU4IGNja190eF9wb3dlcl9pZHhbNl07CisJdTggaHQ0MF8xc190eF9wb3dlcl9pZHhbNl07CisJdTggaHQ0MF8yc190eF9wb3dlcl9pZHhfZGlmZlszXTsKKwl1OCBodDIwX3R4X3Bvd2VyX2lkeF9kaWZmWzNdOworCXU4IG9mZG1fdHhfcG93ZXJfaWR4X2RpZmZbM107CisJdTggaHQ0MF9tYXhfcG93ZXJfb2Zmc2V0WzNdOworCXU4IGh0MjBfbWF4X3Bvd2VyX29mZnNldFszXTsKKwl1OCBjaGFubmVsX3BsYW47CisJdTggdGhlcm1hbF9tZXRlcjsKKwl1OCByZl9vcHRpb25bNV07CisJdTggdmVyc2lvbjsKKwl1OCBvZW1faWQ7CisJdTggcmVndWxhdG9yeTsKK307CisKK3N0cnVjdCB0eF9wb3dlcl9zdHJ1Y3QgeworCXU4IGNja1tSVEw5MkNfTUFYX1BBVEhfTlVNXVtDSEFOTkVMX01BWF9OVU1CRVJdOworCXU4IGh0NDBfMXNbUlRMOTJDX01BWF9QQVRIX05VTV1bQ0hBTk5FTF9NQVhfTlVNQkVSXTsKKwl1OCBodDQwXzJzW1JUTDkyQ19NQVhfUEFUSF9OVU1dW0NIQU5ORUxfTUFYX05VTUJFUl07CisJdTggaHQyMF9kaWZmW1JUTDkyQ19NQVhfUEFUSF9OVU1dW0NIQU5ORUxfTUFYX05VTUJFUl07CisJdTggbGVnYWN5X2h0X2RpZmZbUlRMOTJDX01BWF9QQVRIX05VTV1bQ0hBTk5FTF9NQVhfTlVNQkVSXTsKKwl1OCBsZWdhY3lfaHRfdHhwb3dlcmRpZmY7CisJdTggZ3JvdXBodDIwW1JUTDkyQ19NQVhfUEFUSF9OVU1dW0NIQU5ORUxfTUFYX05VTUJFUl07CisJdTggZ3JvdXBodDQwW1JUTDkyQ19NQVhfUEFUSF9OVU1dW0NIQU5ORUxfTUFYX05VTUJFUl07CisJdTggcHdyZ3JvdXBfY250OworCXUzMiBtY3Nfb3JpZ2luYWxfb2Zmc2V0WzRdWzE2XTsKK307CisKK2V4dGVybiB1MzIgcnRsOTJjX3BoeV9xdWVyeV9iYl9yZWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgdTMyIHJlZ2FkZHIsIHUzMiBiaXRtYXNrKTsKK2V4dGVybiB2b2lkIHJ0bDkyY19waHlfc2V0X2JiX3JlZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgIHUzMiByZWdhZGRyLCB1MzIgYml0bWFzaywgdTMyIGRhdGEpOworZXh0ZXJuIHUzMiBydGw5MmNfcGh5X3F1ZXJ5X3JmX3JlZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICBlbnVtIHJhZGlvX3BhdGggcmZwYXRoLCB1MzIgcmVnYWRkciwKKwkJCQkgICB1MzIgYml0bWFzayk7CitleHRlcm4gdm9pZCBydGw5MmNfcGh5X3NldF9yZl9yZWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICBlbnVtIHJhZGlvX3BhdGggcmZwYXRoLCB1MzIgcmVnYWRkciwKKwkJCQkgIHUzMiBiaXRtYXNrLCB1MzIgZGF0YSk7CitleHRlcm4gYm9vbCBydGw5MmNfcGh5X21hY19jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworZXh0ZXJuIGJvb2wgcnRsOTJjX3BoeV9iYl9jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworZXh0ZXJuIGJvb2wgcnRsOTJjX3BoeV9yZl9jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworZXh0ZXJuIGJvb2wgcnRsOTJjX3BoeV9jb25maWdfcmZfd2l0aF9mZWFkZXJmaWxlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQkJIGVudW0gcmFkaW9fcGF0aCByZnBhdGgpOworZXh0ZXJuIHZvaWQgcnRsOTJjX3BoeV9nZXRfaHdfcmVnX29yaWdpbmFsdmFsdWUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworZXh0ZXJuIHZvaWQgcnRsOTJjX3BoeV9nZXRfdHhwb3dlcl9sZXZlbChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkJIGxvbmcgKnBvd2VybGV2ZWwpOworZXh0ZXJuIHZvaWQgcnRsOTJjX3BoeV9zZXRfdHhwb3dlcl9sZXZlbChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggY2hhbm5lbCk7CitleHRlcm4gYm9vbCBydGw5MmNfcGh5X3VwZGF0ZV90eHBvd2VyX2RibShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkJICBsb25nIHBvd2VyX2luZGJtKTsKK2V4dGVybiB2b2lkIHJ0bDkyY19waHlfc2Nhbl9vcGVyYXRpb25fYmFja3VwKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQkgICAgIHU4IG9wZXJhdGlvbik7CitleHRlcm4gdm9pZCBydGw5MmNfcGh5X3NldF9id19tb2RlX2NhbGxiYWNrKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK2V4dGVybiB2b2lkIHJ0bDkyY19waHlfc2V0X2J3X21vZGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaF90eXBlKTsKK2V4dGVybiB2b2lkIHJ0bDkyY19waHlfc3dfY2hubF9jYWxsYmFjayhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CitleHRlcm4gdTggcnRsOTJjX3BoeV9zd19jaG5sKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK2V4dGVybiB2b2lkIHJ0bDkyY19waHlfaXFfY2FsaWJyYXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBib29sIGJfcmVjb3ZlcnkpOworZXh0ZXJuIHZvaWQgcnRsOTJjX3BoeV9zZXRfYmVhY29uX2h3X3JlZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkJIHUxNiBiZWFjb25pbnRlcnZhbCk7Cit2b2lkIHJ0bDkyY19waHlfYXBfY2FsaWJyYXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBjaGFyIGRlbHRhKTsKK3ZvaWQgcnRsOTJjX3BoeV9sY19jYWxpYnJhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwordm9pZCBydGw5MmNfcGh5X3NldF9yZnBhdGhfc3dpdGNoKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBib29sIGJtYWluKTsKK2Jvb2wgcnRsOTJjX3BoeV9jb25maWdfcmZfd2l0aF9oZWFkZXJmaWxlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQkgIGVudW0gcmFkaW9fcGF0aCByZnBhdGgpOworZXh0ZXJuIGJvb2wgcnRsODE5Ml9waHlfY2hlY2tfaXNfbGVnYWxfcmZwYXRoKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQkgICAgICB1MzIgcmZwYXRoKTsKK2Jvb2wgcnRsOTJjX3BoeV9zZXRfaW9fY21kKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBlbnVtIGlvX3R5cGUgaW90eXBlKTsKK2V4dGVybiBib29sIHJ0bDkyY19waHlfc2V0X3JmX3Bvd2VyX3N0YXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQkgIGVudW0gcmZfcHdyc3RhdGUgcmZwd3Jfc3RhdGUpOwordm9pZCBydGw5MmNfcGh5X2NvbmZpZ19iYl9leHRlcm5hbF9wYShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Cit2b2lkIHJ0bDkyY2VfcGh5X3NldF9yZl9vbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Citib29sIHJ0bDkyY19waHlfc2V0X2lvX2NtZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgZW51bSBpb190eXBlIGlvdHlwZSk7Cit2b2lkIHJ0bDkyY19waHlfc2V0X2lvKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS9yZWcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmNlL3JlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3NWQ1MTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS9yZWcuaApAQCAtMCwwICsxLDIwNjUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQoYykgMjAwOS0yMDEwICBSZWFsdGVrIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAsIFVTQQorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgTElDRU5TRS4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogd2xhbmZhZSA8d2xhbmZhZUByZWFsdGVrLmNvbT4KKyAqIFJlYWx0ZWsgQ29ycG9yYXRpb24sIE5vLiAyLCBJbm5vdmF0aW9uIFJvYWQgSUksIEhzaW5jaHUgU2NpZW5jZSBQYXJrLAorICogSHNpbmNodSAzMDAsIFRhaXdhbi4KKyAqCisgKiBMYXJyeSBGaW5nZXIgPExhcnJ5LkZpbmdlckBsd2Zpbmdlci5uZXQ+CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fUlRMOTJDX1JFR19IX18KKyNkZWZpbmUgX19SVEw5MkNfUkVHX0hfXworCisjZGVmaW5lIFJFR19TWVNfSVNPX0NUUkwJCQkweDAwMDAKKyNkZWZpbmUgUkVHX1NZU19GVU5DX0VOCQkJCTB4MDAwMgorI2RlZmluZSBSRUdfQVBTX0ZTTUNPCQkJCTB4MDAwNAorI2RlZmluZSBSRUdfU1lTX0NMS1IJCQkJMHgwMDA4CisjZGVmaW5lIFJFR185MzQ2Q1IJCQkJMHgwMDBBCisjZGVmaW5lIFJFR19FRV9WUEQJCQkJMHgwMDBDCisjZGVmaW5lIFJFR19BRkVfTUlTQwkJCQkweDAwMTAKKyNkZWZpbmUgUkVHX1NQUzBfQ1RSTAkJCQkweDAwMTEKKyNkZWZpbmUgUkVHX1NQU19PQ1BfQ0ZHCQkJCTB4MDAxOAorI2RlZmluZSBSRUdfUlNWX0NUUkwJCQkJMHgwMDFDCisjZGVmaW5lIFJFR19SRl9DVFJMCQkJCTB4MDAxRgorI2RlZmluZSBSRUdfTERPQTE1X0NUUkwJCQkJMHgwMDIwCisjZGVmaW5lIFJFR19MRE9WMTJEX0NUUkwJCQkweDAwMjEKKyNkZWZpbmUgUkVHX0xET0hDSTEyX0NUUkwJCQkweDAwMjIKKyNkZWZpbmUgUkVHX0xQTERPX0NUUkwJCQkJMHgwMDIzCisjZGVmaW5lIFJFR19BRkVfWFRBTF9DVFJMCQkJMHgwMDI0CisjZGVmaW5lIFJFR19BRkVfUExMX0NUUkwJCQkweDAwMjgKKyNkZWZpbmUgUkVHX0VGVVNFX0NUUkwJCQkJMHgwMDMwCisjZGVmaW5lIFJFR19FRlVTRV9URVNUCQkJCTB4MDAzNAorI2RlZmluZSBSRUdfUFdSX0RBVEEJCQkJMHgwMDM4CisjZGVmaW5lIFJFR19DQUxfVElNRVIJCQkJMHgwMDNDCisjZGVmaW5lIFJFR19BQ0xLX01PTgkJCQkweDAwM0UKKyNkZWZpbmUgUkVHX0dQSU9fTVVYQ0ZHCQkJCTB4MDA0MAorI2RlZmluZSBSRUdfR1BJT19JT19TRUwJCQkJMHgwMDQyCisjZGVmaW5lIFJFR19NQUNfUElOTVVYX0NGRwkJCTB4MDA0MworI2RlZmluZSBSRUdfR1BJT19QSU5fQ1RSTAkJCTB4MDA0NAorI2RlZmluZSBSRUdfR1BJT19JTlRNCQkJCTB4MDA0OAorI2RlZmluZSBSRUdfTEVEQ0ZHMAkJCQkweDAwNEMKKyNkZWZpbmUgUkVHX0xFRENGRzEJCQkJMHgwMDRECisjZGVmaW5lIFJFR19MRURDRkcyCQkJCTB4MDA0RQorI2RlZmluZSBSRUdfTEVEQ0ZHMwkJCQkweDAwNEYKKyNkZWZpbmUgUkVHX0ZTSU1SCQkJCTB4MDA1MAorI2RlZmluZSBSRUdfRlNJU1IJCQkJMHgwMDU0CisKKyNkZWZpbmUgUkVHX01DVUZXREwJCQkJMHgwMDgwCisKKyNkZWZpbmUgUkVHX0hNRUJPWF9FWFRfMAkJCTB4MDA4OAorI2RlZmluZSBSRUdfSE1FQk9YX0VYVF8xCQkJMHgwMDhBCisjZGVmaW5lIFJFR19ITUVCT1hfRVhUXzIJCQkweDAwOEMKKyNkZWZpbmUgUkVHX0hNRUJPWF9FWFRfMwkJCTB4MDA4RQorCisjZGVmaW5lIFJFR19CSVNUX1NDQU4JCQkJMHgwMEQwCisjZGVmaW5lIFJFR19CSVNUX1JQVAkJCQkweDAwRDQKKyNkZWZpbmUgUkVHX0JJU1RfUk9NX1JQVAkJCTB4MDBEOAorI2RlZmluZSBSRUdfVVNCX1NJRV9JTlRGCQkJMHgwMEUwCisjZGVmaW5lIFJFR19QQ0lFX01JT19JTlRGCQkJMHgwMEU0CisjZGVmaW5lIFJFR19QQ0lFX01JT19JTlRECQkJMHgwMEU4CisjZGVmaW5lIFJFR19IUE9OX0ZTTQkJCQkweDAwRUMKKyNkZWZpbmUgUkVHX1NZU19DRkcJCQkJMHgwMEYwCisKKyNkZWZpbmUgUkVHX0NSCQkJCQkweDAxMDAKKyNkZWZpbmUgUkVHX1BCUAkJCQkJMHgwMTA0CisjZGVmaW5lIFJFR19UUlhETUFfQ1RSTAkJCQkweDAxMEMKKyNkZWZpbmUgUkVHX1RSWEZGX0JORFkJCQkJMHgwMTE0CisjZGVmaW5lIFJFR19UUlhGRl9TVEFUVVMJCQkweDAxMTgKKyNkZWZpbmUgUkVHX1JYRkZfUFRSCQkJCTB4MDExQworI2RlZmluZSBSRUdfSElNUgkJCQkweDAxMjAKKyNkZWZpbmUgUkVHX0hJU1IJCQkJMHgwMTI0CisjZGVmaW5lIFJFR19ISU1SRQkJCQkweDAxMjgKKyNkZWZpbmUgUkVHX0hJU1JFCQkJCTB4MDEyQworI2RlZmluZSBSRUdfQ1BXTQkJCQkweDAxMkYKKyNkZWZpbmUgUkVHX0ZXSU1SCQkJCTB4MDEzMAorI2RlZmluZSBSRUdfRldJU1IJCQkJMHgwMTM0CisjZGVmaW5lIFJFR19QS1RCVUZfREJHX0NUUkwJCQkweDAxNDAKKyNkZWZpbmUgUkVHX1BLVEJVRl9EQkdfREFUQV9MCQkJMHgwMTQ0CisjZGVmaW5lIFJFR19QS1RCVUZfREJHX0RBVEFfSAkJCTB4MDE0OAorCisjZGVmaW5lIFJFR19UQzBfQ1RSTAkJCQkweDAxNTAKKyNkZWZpbmUgUkVHX1RDMV9DVFJMCQkJCTB4MDE1NAorI2RlZmluZSBSRUdfVEMyX0NUUkwJCQkJMHgwMTU4CisjZGVmaW5lIFJFR19UQzNfQ1RSTAkJCQkweDAxNUMKKyNkZWZpbmUgUkVHX1RDNF9DVFJMCQkJCTB4MDE2MAorI2RlZmluZSBSRUdfVENVTklUX0JBU0UJCQkJMHgwMTY0CisjZGVmaW5lIFJFR19NQklTVF9TVEFSVAkJCQkweDAxNzQKKyNkZWZpbmUgUkVHX01CSVNUX0RPTkUJCQkJMHgwMTc4CisjZGVmaW5lIFJFR19NQklTVF9GQUlMCQkJCTB4MDE3QworI2RlZmluZSBSRUdfQzJIRVZUX01TR19OT1JNQUwJCQkweDAxQTAKKyNkZWZpbmUgUkVHX0MySEVWVF9NU0dfVEVTVAkJCTB4MDFCOAorI2RlZmluZSBSRUdfQzJIRVZUX0NMRUFSCQkJMHgwMUJGCisjZGVmaW5lIFJFR19NQ1VUU1RfMQkJCQkweDAxYzAKKyNkZWZpbmUgUkVHX0ZNRVRIUgkJCQkweDAxQzgKKyNkZWZpbmUgUkVHX0hNRVRGUgkJCQkweDAxQ0MKKyNkZWZpbmUgUkVHX0hNRUJPWF8wCQkJCTB4MDFEMAorI2RlZmluZSBSRUdfSE1FQk9YXzEJCQkJMHgwMUQ0CisjZGVmaW5lIFJFR19ITUVCT1hfMgkJCQkweDAxRDgKKyNkZWZpbmUgUkVHX0hNRUJPWF8zCQkJCTB4MDFEQworCisjZGVmaW5lIFJFR19MTFRfSU5JVAkJCQkweDAxRTAKKyNkZWZpbmUgUkVHX0JCX0FDQ0VFU1NfQ1RSTAkJCTB4MDFFOAorI2RlZmluZSBSRUdfQkJfQUNDRVNTX0RBVEEJCQkweDAxRUMKKworI2RlZmluZSBSRUdfUlFQTgkJCQkweDAyMDAKKyNkZWZpbmUgUkVHX0ZJRk9QQUdFCQkJCTB4MDIwNAorI2RlZmluZSBSRUdfVERFQ1RSTAkJCQkweDAyMDgKKyNkZWZpbmUgUkVHX1RYRE1BX09GRlNFVF9DSEsJCQkweDAyMEMKKyNkZWZpbmUgUkVHX1RYRE1BX1NUQVRVUwkJCTB4MDIxMAorI2RlZmluZSBSRUdfUlFQTl9OUFEJCQkJMHgwMjE0CisKKyNkZWZpbmUgUkVHX1JYRE1BX0FHR19QR19USAkJCTB4MDI4MAorI2RlZmluZSBSRUdfUlhQS1RfTlVNCQkJCTB4MDI4NAorI2RlZmluZSBSRUdfUlhETUFfU1RBVFVTCQkJMHgwMjg4CisKKyNkZWZpbmUJUkVHX1BDSUVfQ1RSTF9SRUcJCQkweDAzMDAKKyNkZWZpbmUJUkVHX0lOVF9NSUcJCQkJMHgwMzA0CisjZGVmaW5lCVJFR19CQ05RX0RFU0EJCQkJMHgwMzA4CisjZGVmaW5lCVJFR19IUV9ERVNBCQkJCTB4MDMxMAorI2RlZmluZQlSRUdfTUdRX0RFU0EJCQkJMHgwMzE4CisjZGVmaW5lCVJFR19WT1FfREVTQQkJCQkweDAzMjAKKyNkZWZpbmUJUkVHX1ZJUV9ERVNBCQkJCTB4MDMyOAorI2RlZmluZQlSRUdfQkVRX0RFU0EJCQkJMHgwMzMwCisjZGVmaW5lCVJFR19CS1FfREVTQQkJCQkweDAzMzgKKyNkZWZpbmUJUkVHX1JYX0RFU0EJCQkJMHgwMzQwCisjZGVmaW5lCVJFR19EQkkJCQkJCTB4MDM0OAorI2RlZmluZQlSRUdfTURJTwkJCQkweDAzNTQKKyNkZWZpbmUJUkVHX0RCR19TRUwJCQkJMHgwMzYwCisjZGVmaW5lCVJFR19QQ0lFX0hSUFdNCQkJCTB4MDM2MQorI2RlZmluZQlSRUdfUENJRV9IQ1BXTQkJCQkweDAzNjMKKyNkZWZpbmUJUkVHX1VBUlRfQ1RSTAkJCQkweDAzNjQKKyNkZWZpbmUJUkVHX1VBUlRfVFhfREVTQQkJCTB4MDM3MAorI2RlZmluZQlSRUdfVUFSVF9SWF9ERVNBCQkJMHgwMzc4CisKKyNkZWZpbmUJUkVHX0hEQVFfREVTQV9OT0RFRgkJCTB4MDAwMAorI2RlZmluZQlSRUdfQ01EUV9ERVNBX05PREVGCQkJMHgwMDAwCisKKyNkZWZpbmUgUkVHX1ZPUV9JTkZPUk1BVElPTgkJCTB4MDQwMAorI2RlZmluZSBSRUdfVklRX0lORk9STUFUSU9OCQkJMHgwNDA0CisjZGVmaW5lIFJFR19CRVFfSU5GT1JNQVRJT04JCQkweDA0MDgKKyNkZWZpbmUgUkVHX0JLUV9JTkZPUk1BVElPTgkJCTB4MDQwQworI2RlZmluZSBSRUdfTUdRX0lORk9STUFUSU9OCQkJMHgwNDEwCisjZGVmaW5lIFJFR19IR1FfSU5GT1JNQVRJT04JCQkweDA0MTQKKyNkZWZpbmUgUkVHX0JDTlFfSU5GT1JNQVRJT04JCQkweDA0MTgKKworI2RlZmluZSBSRUdfQ1BVX01HUV9JTkZPUk1BVElPTgkJCTB4MDQxQworI2RlZmluZSBSRUdfRldIV19UWFFfQ1RSTAkJCTB4MDQyMAorI2RlZmluZSBSRUdfSFdTRVFfQ1RSTAkJCQkweDA0MjMKKyNkZWZpbmUgUkVHX1RYUEtUQlVGX0JDTlFfQkROWQkJCTB4MDQyNAorI2RlZmluZSBSRUdfVFhQS1RCVUZfTUdRX0JETlkJCQkweDA0MjUKKyNkZWZpbmUgUkVHX01VTFRJX0JDTlFfRU4JCQkweDA0MjYKKyNkZWZpbmUgUkVHX01VTFRJX0JDTlFfT0ZGU0VUCQkJMHgwNDI3CisjZGVmaW5lIFJFR19TUEVDX1NJRlMJCQkJMHgwNDI4CisjZGVmaW5lIFJFR19STAkJCQkJMHgwNDJBCisjZGVmaW5lIFJFR19EQVJGUkMJCQkJMHgwNDMwCisjZGVmaW5lIFJFR19SQVJGUkMJCQkJMHgwNDM4CisjZGVmaW5lIFJFR19SUlNSCQkJCTB4MDQ0MAorI2RlZmluZSBSRUdfQVJGUjAJCQkJMHgwNDQ0CisjZGVmaW5lIFJFR19BUkZSMQkJCQkweDA0NDgKKyNkZWZpbmUgUkVHX0FSRlIyCQkJCTB4MDQ0QworI2RlZmluZSBSRUdfQVJGUjMJCQkJMHgwNDUwCisjZGVmaW5lIFJFR19BR0dMRU5fTE1UCQkJCTB4MDQ1OAorI2RlZmluZSBSRUdfQU1QRFVfTUlOX1NQQUNFCQkJMHgwNDVDCisjZGVmaW5lIFJFR19UWFBLVEJVRl9XTUFDX0xCS19CRl9IRAkJMHgwNDVECisjZGVmaW5lIFJFR19GQVNUX0VEQ0FfQ1RSTAkJCTB4MDQ2MAorI2RlZmluZSBSRUdfUkRfUkVTUF9QS1RfVEgJCQkweDA0NjMKKyNkZWZpbmUgUkVHX0lOSVJUU19SQVRFX1NFTAkJCTB4MDQ4MAorI2RlZmluZSBSRUdfSU5JREFUQV9SQVRFX1NFTAkJCTB4MDQ4NAorI2RlZmluZSBSRUdfUE9XRVJfU1RBVFVTCQkJMHgwNEE0CisjZGVmaW5lIFJFR19QT1dFUl9TVEFHRTEJCQkweDA0QjQKKyNkZWZpbmUgUkVHX1BPV0VSX1NUQUdFMgkJCTB4MDRCOAorI2RlZmluZSBSRUdfUEtUX0xJRkVfVElNRQkJCTB4MDRDMAorI2RlZmluZSBSRUdfU1RCQ19TRVRUSU5HCQkJMHgwNEM0CisjZGVmaW5lIFJFR19QUk9UX01PREVfQ1RSTAkJCTB4MDRDOAorI2RlZmluZSBSRUdfQkFSX01PREVfQ1RSTAkJCTB4MDRDQworI2RlZmluZSBSRUdfUkFfVFJZX1JBVEVfQUdHX0xNVAkJCTB4MDRDRgorI2RlZmluZSBSRUdfTlFPU19TRVEJCQkJMHgwNERDCisjZGVmaW5lIFJFR19RT1NfU0VRCQkJCTB4MDRERQorI2RlZmluZSBSRUdfTkVFRF9DUFVfSEFORExFCQkJMHgwNEUwCisjZGVmaW5lIFJFR19QS1RfTE9TRV9SUFQJCQkweDA0RTEKKyNkZWZpbmUgUkVHX1BUQ0xfRVJSX1NUQVRVUwkJCTB4MDRFMgorI2RlZmluZSBSRUdfRFVNTVkJCQkJMHgwNEZDCisKKyNkZWZpbmUgUkVHX0VEQ0FfVk9fUEFSQU0JCQkweDA1MDAKKyNkZWZpbmUgUkVHX0VEQ0FfVklfUEFSQU0JCQkweDA1MDQKKyNkZWZpbmUgUkVHX0VEQ0FfQkVfUEFSQU0JCQkweDA1MDgKKyNkZWZpbmUgUkVHX0VEQ0FfQktfUEFSQU0JCQkweDA1MEMKKyNkZWZpbmUgUkVHX0JDTlRDRkcJCQkJMHgwNTEwCisjZGVmaW5lIFJFR19QSUZTCQkJCTB4MDUxMgorI2RlZmluZSBSRUdfUkRHX1BJRlMJCQkJMHgwNTEzCisjZGVmaW5lIFJFR19TSUZTX0NUWAkJCQkweDA1MTQKKyNkZWZpbmUgUkVHX1NJRlNfVFJYCQkJCTB4MDUxNgorI2RlZmluZSBSRUdfQUdHUl9CUkVBS19USU1FCQkJMHgwNTFBCisjZGVmaW5lIFJFR19TTE9UCQkJCTB4MDUxQgorI2RlZmluZSBSRUdfVFhfUFRDTF9DVFJMCQkJMHgwNTIwCisjZGVmaW5lIFJFR19UWFBBVVNFCQkJCTB4MDUyMgorI2RlZmluZSBSRUdfRElTX1RYUkVRX0NMUgkJCTB4MDUyMworI2RlZmluZSBSRUdfUkRfQ1RSTAkJCQkweDA1MjQKKyNkZWZpbmUgUkVHX1RCVFRfUFJPSElCSVQJCQkweDA1NDAKKyNkZWZpbmUgUkVHX1JEX05BVl9OWFQJCQkJMHgwNTQ0CisjZGVmaW5lIFJFR19OQVZfUFJPVF9MRU4JCQkweDA1NDYKKyNkZWZpbmUgUkVHX0JDTl9DVFJMCQkJCTB4MDU1MAorI2RlZmluZSBSRUdfVVNUSU1FX1RTRgkJCQkweDA1NTEKKyNkZWZpbmUgUkVHX01CSURfTlVNCQkJCTB4MDU1MgorI2RlZmluZSBSRUdfRFVBTF9UU0ZfUlNUCQkJMHgwNTUzCisjZGVmaW5lIFJFR19CQ05fSU5URVJWQUwJCQkweDA1NTQKKyNkZWZpbmUgUkVHX01CU1NJRF9CQ05fU1BBQ0UJCQkweDA1NTQKKyNkZWZpbmUgUkVHX0RSVkVSTFlJTlQJCQkJMHgwNTU4CisjZGVmaW5lIFJFR19CQ05ETUFUSU0JCQkJMHgwNTU5CisjZGVmaW5lIFJFR19BVElNV05ECQkJCTB4MDU1QQorI2RlZmluZSBSRUdfQkNOX01BWF9FUlIJCQkJMHgwNTVECisjZGVmaW5lIFJFR19SWFRTRl9PRkZTRVRfQ0NLCQkJMHgwNTVFCisjZGVmaW5lIFJFR19SWFRTRl9PRkZTRVRfT0ZETQkJCTB4MDU1RgorI2RlZmluZSBSRUdfVFNGVFIJCQkJMHgwNTYwCisjZGVmaW5lIFJFR19JTklUX1RTRlRSCQkJCTB4MDU2NAorI2RlZmluZSBSRUdfUFNUSU1FUgkJCQkweDA1ODAKKyNkZWZpbmUgUkVHX1RJTUVSMAkJCQkweDA1ODQKKyNkZWZpbmUgUkVHX1RJTUVSMQkJCQkweDA1ODgKKyNkZWZpbmUgUkVHX0FDTUhXQ1RSTAkJCQkweDA1QzAKKyNkZWZpbmUgUkVHX0FDTVJTVENUUkwJCQkJMHgwNUMxCisjZGVmaW5lIFJFR19BQ01BVkcJCQkJMHgwNUMyCisjZGVmaW5lIFJFR19WT19BRE1USU1FCQkJCTB4MDVDNAorI2RlZmluZSBSRUdfVklfQURNVElNRQkJCQkweDA1QzYKKyNkZWZpbmUgUkVHX0JFX0FETVRJTUUJCQkJMHgwNUM4CisjZGVmaW5lIFJFR19FRENBX1JBTkRPTV9HRU4JCQkweDA1Q0MKKyNkZWZpbmUgUkVHX1NDSF9UWENNRAkJCQkweDA1RDAKKworI2RlZmluZSBSRUdfQVBTRF9DVFJMCQkJCTB4MDYwMAorI2RlZmluZSBSRUdfQldPUE1PREUJCQkJMHgwNjAzCisjZGVmaW5lIFJFR19UQ1IJCQkJCTB4MDYwNAorI2RlZmluZSBSRUdfUkNSCQkJCQkweDA2MDgKKyNkZWZpbmUgUkVHX1JYX1BLVF9MSU1JVAkJCTB4MDYwQworI2RlZmluZSBSRUdfUlhfRExLX1RJTUUJCQkJMHgwNjBECisjZGVmaW5lIFJFR19SWF9EUlZJTkZPX1NaCQkJMHgwNjBGCisKKyNkZWZpbmUgUkVHX01BQ0lECQkJCTB4MDYxMAorI2RlZmluZSBSRUdfQlNTSUQJCQkJMHgwNjE4CisjZGVmaW5lIFJFR19NQVIJCQkJCTB4MDYyMAorI2RlZmluZSBSRUdfTUJJRENBTUNGRwkJCQkweDA2MjgKKworI2RlZmluZSBSRUdfVVNUSU1FX0VEQ0EJCQkJMHgwNjM4CisjZGVmaW5lIFJFR19NQUNfU1BFQ19TSUZTCQkJMHgwNjNBCisjZGVmaW5lIFJFR19SRVNQX1NJRlNfQ0NLCQkJMHgwNjNDCisjZGVmaW5lIFJFR19SRVNQX1NJRlNfT0ZETQkJCTB4MDYzRQorI2RlZmluZSBSRUdfQUNLVE8JCQkJMHgwNjQwCisjZGVmaW5lIFJFR19DVFMyVE8JCQkJMHgwNjQxCisjZGVmaW5lIFJFR19FSUZTCQkJCTB4MDY0MgorCisjZGVmaW5lIFJFR19OQVZfQ1RSTAkJCQkweDA2NTAKKyNkZWZpbmUgUkVHX0JBQ0FNQ01ECQkJCTB4MDY1NAorI2RlZmluZSBSRUdfQkFDQU1DT05URU5UCQkJMHgwNjU4CisjZGVmaW5lIFJFR19MQkRMWQkJCQkweDA2NjAKKyNkZWZpbmUgUkVHX0ZXRExZCQkJCTB4MDY2MQorI2RlZmluZSBSRUdfUlhFUlJfUlBUCQkJCTB4MDY2NAorI2RlZmluZSBSRUdfV01BQ19UUlhQVENMX0NUTAkJCTB4MDY2OAorCisjZGVmaW5lIFJFR19DQU1DTUQJCQkJMHgwNjcwCisjZGVmaW5lIFJFR19DQU1XUklURQkJCQkweDA2NzQKKyNkZWZpbmUgUkVHX0NBTVJFQUQJCQkJMHgwNjc4CisjZGVmaW5lIFJFR19DQU1EQkcJCQkJMHgwNjdDCisjZGVmaW5lIFJFR19TRUNDRkcJCQkJMHgwNjgwCisKKyNkZWZpbmUgUkVHX1dPV19DVFJMCQkJCTB4MDY5MAorI2RlZmluZSBSRUdfUFNTVEFUVVMJCQkJMHgwNjkxCisjZGVmaW5lIFJFR19QU19SWF9JTkZPCQkJCTB4MDY5MgorI2RlZmluZSBSRUdfTFBOQVZfQ1RSTAkJCQkweDA2OTQKKyNkZWZpbmUgUkVHX1dLRk1DQU1fQ01ECQkJCTB4MDY5OAorI2RlZmluZSBSRUdfV0tGTUNBTV9SV0QJCQkJMHgwNjlDCisjZGVmaW5lIFJFR19SWEZMVE1BUDAJCQkJMHgwNkEwCisjZGVmaW5lIFJFR19SWEZMVE1BUDEJCQkJMHgwNkEyCisjZGVmaW5lIFJFR19SWEZMVE1BUDIJCQkJMHgwNkE0CisjZGVmaW5lIFJFR19CQ05fUFNSX1JQVAkJCQkweDA2QTgKKyNkZWZpbmUgUkVHX0NBTEIzMktfQ1RSTAkJCTB4MDZBQworI2RlZmluZSBSRUdfUEtUX01PTl9DVFJMCQkJMHgwNkI0CisjZGVmaW5lIFJFR19CVF9DT0VYX1RBQkxFCQkJMHgwNkMwCisjZGVmaW5lIFJFR19XTUFDX1JFU1BfVFhJTkZPCQkJMHgwNkQ4CisKKyNkZWZpbmUgUkVHX1VTQl9JTkZPCQkJCTB4RkUxNworI2RlZmluZSBSRUdfVVNCX1NQRUNJQUxfT1BUSU9OCQkJMHhGRTU1CisjZGVmaW5lIFJFR19VU0JfRE1BX0FHR19UTwkJCTB4RkU1QgorI2RlZmluZSBSRUdfVVNCX0FHR19UTwkJCQkweEZFNUMKKyNkZWZpbmUgUkVHX1VTQl9BR0dfVEgJCQkJMHhGRTVECisKKyNkZWZpbmUgUkVHX1RFU1RfVVNCX1RYUVMJCQkweEZFNDgKKyNkZWZpbmUgUkVHX1RFU1RfU0lFX1ZJRAkJCTB4RkU2MAorI2RlZmluZSBSRUdfVEVTVF9TSUVfUElECQkJMHhGRTYyCisjZGVmaW5lIFJFR19URVNUX1NJRV9PUFRJT05BTAkJCTB4RkU2NAorI2RlZmluZSBSRUdfVEVTVF9TSUVfQ0hJUlBfSwkJCTB4RkU2NQorI2RlZmluZSBSRUdfVEVTVF9TSUVfUEhZCQkJMHhGRTY2CisjZGVmaW5lIFJFR19URVNUX1NJRV9NQUNfQUREUgkJCTB4RkU3MAorI2RlZmluZSBSRUdfVEVTVF9TSUVfU1RSSU5HCQkJMHhGRTgwCisKKyNkZWZpbmUgUkVHX05PUk1BTF9TSUVfVklECQkJMHhGRTYwCisjZGVmaW5lIFJFR19OT1JNQUxfU0lFX1BJRAkJCTB4RkU2MgorI2RlZmluZSBSRUdfTk9STUFMX1NJRV9PUFRJT05BTAkJCTB4RkU2NAorI2RlZmluZSBSRUdfTk9STUFMX1NJRV9FUAkJCTB4RkU2NQorI2RlZmluZSBSRUdfTk9STUFMX1NJRV9QSFkJCQkweEZFNjgKKyNkZWZpbmUgUkVHX05PUk1BTF9TSUVfTUFDX0FERFIJCQkweEZFNzAKKyNkZWZpbmUgUkVHX05PUk1BTF9TSUVfU1RSSU5HCQkJMHhGRTgwCisKKyNkZWZpbmUJQ1I5MzQ2CQkJCQlSRUdfOTM0NkNSCisjZGVmaW5lCU1TUgkJCQkJKFJFR19DUiArIDIpCisjZGVmaW5lCUlTUgkJCQkJUkVHX0hJU1IKKyNkZWZpbmUJVFNGUgkJCQkJUkVHX1RTRlRSCisKKyNkZWZpbmUJTUFDSURSMAkJCQkJUkVHX01BQ0lECisjZGVmaW5lCU1BQ0lEUjQJCQkJCShSRUdfTUFDSUQgKyA0KQorCisjZGVmaW5lIFBCUAkJCQkJUkVHX1BCUAorCisjZGVmaW5lCUlEUjAJCQkJCU1BQ0lEUjAKKyNkZWZpbmUJSURSNAkJCQkJTUFDSURSNAorCisjZGVmaW5lCVVOVVNFRF9SRUdJU1RFUgkJCQkweDFCRgorI2RlZmluZQlEQ0FNCQkJCQlVTlVTRURfUkVHSVNURVIKKyNkZWZpbmUJUFNSCQkJCQlVTlVTRURfUkVHSVNURVIKKyNkZWZpbmUgQkJBRERSCQkJCQlVTlVTRURfUkVHSVNURVIKKyNkZWZpbmUJUEhZREFUQVIJCQkJVU5VU0VEX1JFR0lTVEVSCisKKyNkZWZpbmUJSU5WQUxJRF9CQlJGX1ZBTFVFCQkJMHgxMjM0NTY3OAorCisjZGVmaW5lCU1BWF9NU1NfREVOU0lUWV8yVAkJCTB4MTMKKyNkZWZpbmUJTUFYX01TU19ERU5TSVRZXzFUCQkJMHgwQQorCisjZGVmaW5lCUNNREVFUFJPTV9FTgkJCQlCSVQoNSkKKyNkZWZpbmUJQ01ERUVQUk9NX1NFTAkJCQlCSVQoNCkKKyNkZWZpbmUJQ01EOTM0NkNSXzkzNTZTRUwJCQlCSVQoNCkKKyNkZWZpbmUJQVVUT0xPQURfRUVQUk9NCQkJCShDTURFRVBST01fRU58Q01ERUVQUk9NX1NFTCkKKyNkZWZpbmUJQVVUT0xPQURfRUZVU0UJCQkJQ01ERUVQUk9NX0VOCisKKyNkZWZpbmUJR1BJT1NFTF9HUElPCQkJCTAKKyNkZWZpbmUJR1BJT1NFTF9FTkJUCQkJCUJJVCg1KQorCisjZGVmaW5lCUdQSU9fSU4JCQkJCVJFR19HUElPX1BJTl9DVFJMCisjZGVmaW5lCUdQSU9fT1VUCQkJCShSRUdfR1BJT19QSU5fQ1RSTCsxKQorI2RlZmluZQlHUElPX0lPX1NFTAkJCQkoUkVHX0dQSU9fUElOX0NUUkwrMikKKyNkZWZpbmUJR1BJT19NT0QJCQkJKFJFR19HUElPX1BJTl9DVFJMKzMpCisKKyNkZWZpbmUJTVNSX05PTElOSwkJCQkweDAwCisjZGVmaW5lCU1TUl9BREhPQwkJCQkweDAxCisjZGVmaW5lCU1TUl9JTkZSQQkJCQkweDAyCisjZGVmaW5lCU1TUl9BUAkJCQkJMHgwMworCisjZGVmaW5lCVJSU1JfUlNDX09GRlNFVAkJCQkyMQorI2RlZmluZQlSUlNSX1NIT1JUX09GRlNFVAkJCTIzCisjZGVmaW5lCVJSU1JfUlNDX0JXXzQwTQkJCQkweDYwMDAwMAorI2RlZmluZQlSUlNSX1JTQ19VUFNVQkNITkwJCQkweDQwMDAwMAorI2RlZmluZQlSUlNSX1JTQ19MT1dTVUJDSE5MCQkJMHgyMDAwMDAKKyNkZWZpbmUJUlJTUl9TSE9SVAkJCQkweDgwMDAwMAorI2RlZmluZQlSUlNSXzFNCQkJCQlCSVQoMCkKKyNkZWZpbmUJUlJTUl8yTQkJCQkJQklUKDEpCisjZGVmaW5lCVJSU1JfNV81TQkJCQlCSVQoMikKKyNkZWZpbmUJUlJTUl8xMU0JCQkJQklUKDMpCisjZGVmaW5lCVJSU1JfNk0JCQkJCUJJVCg0KQorI2RlZmluZQlSUlNSXzlNCQkJCQlCSVQoNSkKKyNkZWZpbmUJUlJTUl8xMk0JCQkJQklUKDYpCisjZGVmaW5lCVJSU1JfMThNCQkJCUJJVCg3KQorI2RlZmluZQlSUlNSXzI0TQkJCQlCSVQoOCkKKyNkZWZpbmUJUlJTUl8zNk0JCQkJQklUKDkpCisjZGVmaW5lCVJSU1JfNDhNCQkJCUJJVCgxMCkKKyNkZWZpbmUJUlJTUl81NE0JCQkJQklUKDExKQorI2RlZmluZQlSUlNSX01DUzAJCQkJQklUKDEyKQorI2RlZmluZQlSUlNSX01DUzEJCQkJQklUKDEzKQorI2RlZmluZQlSUlNSX01DUzIJCQkJQklUKDE0KQorI2RlZmluZQlSUlNSX01DUzMJCQkJQklUKDE1KQorI2RlZmluZQlSUlNSX01DUzQJCQkJQklUKDE2KQorI2RlZmluZQlSUlNSX01DUzUJCQkJQklUKDE3KQorI2RlZmluZQlSUlNSX01DUzYJCQkJQklUKDE4KQorI2RlZmluZQlSUlNSX01DUzcJCQkJQklUKDE5KQorI2RlZmluZQlCUlNSX0FDS1NIT1JUUE1CCQkJQklUKDIzKQorCisjZGVmaW5lCVJBVFJfMU0JCQkJCTB4MDAwMDAwMDEKKyNkZWZpbmUJUkFUUl8yTQkJCQkJMHgwMDAwMDAwMgorI2RlZmluZQlSQVRSXzU1TQkJCQkweDAwMDAwMDA0CisjZGVmaW5lCVJBVFJfMTFNCQkJCTB4MDAwMDAwMDgKKyNkZWZpbmUJUkFUUl82TQkJCQkJMHgwMDAwMDAxMAorI2RlZmluZQlSQVRSXzlNCQkJCQkweDAwMDAwMDIwCisjZGVmaW5lCVJBVFJfMTJNCQkJCTB4MDAwMDAwNDAKKyNkZWZpbmUJUkFUUl8xOE0JCQkJMHgwMDAwMDA4MAorI2RlZmluZQlSQVRSXzI0TQkJCQkweDAwMDAwMTAwCisjZGVmaW5lCVJBVFJfMzZNCQkJCTB4MDAwMDAyMDAKKyNkZWZpbmUJUkFUUl80OE0JCQkJMHgwMDAwMDQwMAorI2RlZmluZQlSQVRSXzU0TQkJCQkweDAwMDAwODAwCisjZGVmaW5lCVJBVFJfTUNTMAkJCQkweDAwMDAxMDAwCisjZGVmaW5lCVJBVFJfTUNTMQkJCQkweDAwMDAyMDAwCisjZGVmaW5lCVJBVFJfTUNTMgkJCQkweDAwMDA0MDAwCisjZGVmaW5lCVJBVFJfTUNTMwkJCQkweDAwMDA4MDAwCisjZGVmaW5lCVJBVFJfTUNTNAkJCQkweDAwMDEwMDAwCisjZGVmaW5lCVJBVFJfTUNTNQkJCQkweDAwMDIwMDAwCisjZGVmaW5lCVJBVFJfTUNTNgkJCQkweDAwMDQwMDAwCisjZGVmaW5lCVJBVFJfTUNTNwkJCQkweDAwMDgwMDAwCisjZGVmaW5lCVJBVFJfTUNTOAkJCQkweDAwMTAwMDAwCisjZGVmaW5lCVJBVFJfTUNTOQkJCQkweDAwMjAwMDAwCisjZGVmaW5lCVJBVFJfTUNTMTAJCQkJMHgwMDQwMDAwMAorI2RlZmluZQlSQVRSX01DUzExCQkJCTB4MDA4MDAwMDAKKyNkZWZpbmUJUkFUUl9NQ1MxMgkJCQkweDAxMDAwMDAwCisjZGVmaW5lCVJBVFJfTUNTMTMJCQkJMHgwMjAwMDAwMAorI2RlZmluZQlSQVRSX01DUzE0CQkJCTB4MDQwMDAwMDAKKyNkZWZpbmUJUkFUUl9NQ1MxNQkJCQkweDA4MDAwMDAwCisKKyNkZWZpbmUgUkFURV8xTQkJCQkJQklUKDApCisjZGVmaW5lIFJBVEVfMk0JCQkJCUJJVCgxKQorI2RlZmluZSBSQVRFXzVfNU0JCQkJQklUKDIpCisjZGVmaW5lIFJBVEVfMTFNCQkJCUJJVCgzKQorI2RlZmluZSBSQVRFXzZNCQkJCQlCSVQoNCkKKyNkZWZpbmUgUkFURV85TQkJCQkJQklUKDUpCisjZGVmaW5lIFJBVEVfMTJNCQkJCUJJVCg2KQorI2RlZmluZSBSQVRFXzE4TQkJCQlCSVQoNykKKyNkZWZpbmUgUkFURV8yNE0JCQkJQklUKDgpCisjZGVmaW5lIFJBVEVfMzZNCQkJCUJJVCg5KQorI2RlZmluZSBSQVRFXzQ4TQkJCQlCSVQoMTApCisjZGVmaW5lIFJBVEVfNTRNCQkJCUJJVCgxMSkKKyNkZWZpbmUgUkFURV9NQ1MwCQkJCUJJVCgxMikKKyNkZWZpbmUgUkFURV9NQ1MxCQkJCUJJVCgxMykKKyNkZWZpbmUgUkFURV9NQ1MyCQkJCUJJVCgxNCkKKyNkZWZpbmUgUkFURV9NQ1MzCQkJCUJJVCgxNSkKKyNkZWZpbmUgUkFURV9NQ1M0CQkJCUJJVCgxNikKKyNkZWZpbmUgUkFURV9NQ1M1CQkJCUJJVCgxNykKKyNkZWZpbmUgUkFURV9NQ1M2CQkJCUJJVCgxOCkKKyNkZWZpbmUgUkFURV9NQ1M3CQkJCUJJVCgxOSkKKyNkZWZpbmUgUkFURV9NQ1M4CQkJCUJJVCgyMCkKKyNkZWZpbmUgUkFURV9NQ1M5CQkJCUJJVCgyMSkKKyNkZWZpbmUgUkFURV9NQ1MxMAkJCQlCSVQoMjIpCisjZGVmaW5lIFJBVEVfTUNTMTEJCQkJQklUKDIzKQorI2RlZmluZSBSQVRFX01DUzEyCQkJCUJJVCgyNCkKKyNkZWZpbmUgUkFURV9NQ1MxMwkJCQlCSVQoMjUpCisjZGVmaW5lIFJBVEVfTUNTMTQJCQkJQklUKDI2KQorI2RlZmluZSBSQVRFX01DUzE1CQkJCUJJVCgyNykKKworI2RlZmluZQlSQVRFX0FMTF9DQ0sJCShSQVRSXzFNIHwgUkFUUl8yTSB8IFJBVFJfNTVNIHwgUkFUUl8xMU0pCisjZGVmaW5lCVJBVEVfQUxMX09GRE1fQUcJKFJBVFJfNk0gfCBSQVRSXzlNIHwgUkFUUl8xMk0gfCBSQVRSXzE4TSBcCisJCQkJfCBSQVRSXzI0TSB8IFJBVFJfMzZNIHwgUkFUUl80OE0gfCBSQVRSXzU0TSkKKyNkZWZpbmUJUkFURV9BTExfT0ZETV8xU1MJKFJBVFJfTUNTMCB8IFJBVFJfTUNTMSB8IFJBVFJfTUNTMiB8IFwKKwkJCQlSQVRSX01DUzMgfCBSQVRSX01DUzQgfCBSQVRSX01DUzUgfCBcCisJCQkJUkFUUl9NQ1M2IHwgUkFUUl9NQ1M3KQorI2RlZmluZQlSQVRFX0FMTF9PRkRNXzJTUwkoUkFUUl9NQ1M4IHwgUkFUUl9NQ1M5IHwgUkFUUl9NQ1MxMCB8IFwKKwkJCQlSQVRSX01DUzExIHwgUkFUUl9NQ1MxMiB8IFJBVFJfTUNTMTMgfCBcCisJCQkJUkFUUl9NQ1MxNCB8IFJBVFJfTUNTMTUpCisKKyNkZWZpbmUJQldfT1BNT0RFXzIwTUhaCQkJCUJJVCgyKQorI2RlZmluZQlCV19PUE1PREVfNUcJCQkJQklUKDEpCisjZGVmaW5lCUJXX09QTU9ERV8xMUoJCQkJQklUKDApCisKKyNkZWZpbmUJQ0FNX1ZBTElECQkJCUJJVCgxNSkKKyNkZWZpbmUJQ0FNX05PVFZBTElECQkJCTB4MDAwMAorI2RlZmluZQlDQU1fVVNFREsJCQkJQklUKDUpCisKKyNkZWZpbmUJQ0FNX05PTkUJCQkJMHgwCisjZGVmaW5lCUNBTV9XRVA0MAkJCQkweDAxCisjZGVmaW5lCUNBTV9US0lQCQkJCTB4MDIKKyNkZWZpbmUJQ0FNX0FFUwkJCQkJMHgwNAorI2RlZmluZQlDQU1fV0VQMTA0CQkJCTB4MDUKKworI2RlZmluZQlUT1RBTF9DQU1fRU5UUlkJCQkJMzIKKyNkZWZpbmUJSEFMRl9DQU1fRU5UUlkJCQkJMTYKKworI2RlZmluZQlDQU1fV1JJVEUJCQkJQklUKDE2KQorI2RlZmluZQlDQU1fUkVBRAkJCQkweDAwMDAwMDAwCisjZGVmaW5lCUNBTV9QT0xMSU5JRwkJCQlCSVQoMzEpCisKKyNkZWZpbmUJU0NSX1VTRURLCQkJCTB4MDEKKyNkZWZpbmUJU0NSX1RYU0VDX0VOQUJMRQkJCTB4MDIKKyNkZWZpbmUJU0NSX1JYU0VDX0VOQUJMRQkJCTB4MDQKKworI2RlZmluZQlXT1dfUE1FTgkJCQlCSVQoMCkKKyNkZWZpbmUJV09XX1dPTUVOCQkJCUJJVCgxKQorI2RlZmluZQlXT1dfTUFHSUMJCQkJQklUKDIpCisjZGVmaW5lCVdPV19VV0YJCQkJCUJJVCgzKQorCisjZGVmaW5lCUlNUjgxOTBfRElTQUJMRUQJCQkweDAKKyNkZWZpbmUJSU1SX0JDTkRNQUlOVDYJCQkJQklUKDMxKQorI2RlZmluZQlJTVJfQkNORE1BSU5UNQkJCQlCSVQoMzApCisjZGVmaW5lCUlNUl9CQ05ETUFJTlQ0CQkJCUJJVCgyOSkKKyNkZWZpbmUJSU1SX0JDTkRNQUlOVDMJCQkJQklUKDI4KQorI2RlZmluZQlJTVJfQkNORE1BSU5UMgkJCQlCSVQoMjcpCisjZGVmaW5lCUlNUl9CQ05ETUFJTlQxCQkJCUJJVCgyNikKKyNkZWZpbmUJSU1SX0JDTkRPSzgJCQkJQklUKDI1KQorI2RlZmluZQlJTVJfQkNORE9LNwkJCQlCSVQoMjQpCisjZGVmaW5lCUlNUl9CQ05ET0s2CQkJCUJJVCgyMykKKyNkZWZpbmUJSU1SX0JDTkRPSzUJCQkJQklUKDIyKQorI2RlZmluZQlJTVJfQkNORE9LNAkJCQlCSVQoMjEpCisjZGVmaW5lCUlNUl9CQ05ET0szCQkJCUJJVCgyMCkKKyNkZWZpbmUJSU1SX0JDTkRPSzIJCQkJQklUKDE5KQorI2RlZmluZQlJTVJfQkNORE9LMQkJCQlCSVQoMTgpCisjZGVmaW5lCUlNUl9USU1FT1VUMgkJCQlCSVQoMTcpCisjZGVmaW5lCUlNUl9USU1FT1VUMQkJCQlCSVQoMTYpCisjZGVmaW5lCUlNUl9UWEZPVlcJCQkJQklUKDE1KQorI2RlZmluZQlJTVJfUFNUSU1FT1VUCQkJCUJJVCgxNCkKKyNkZWZpbmUJSU1SX0JDTklOVAkJCQlCSVQoMTMpCisjZGVmaW5lCUlNUl9SWEZPVlcJCQkJQklUKDEyKQorI2RlZmluZQlJTVJfUkRVCQkJCQlCSVQoMTEpCisjZGVmaW5lCUlNUl9BVElNRU5ECQkJCUJJVCgxMCkKKyNkZWZpbmUJSU1SX0JET0sJCQkJQklUKDkpCisjZGVmaW5lCUlNUl9ISUdIRE9LCQkJCUJJVCg4KQorI2RlZmluZQlJTVJfVEJET0sJCQkJQklUKDcpCisjZGVmaW5lCUlNUl9NR05URE9LCQkJCUJJVCg2KQorI2RlZmluZQlJTVJfVEJERVIJCQkJQklUKDUpCisjZGVmaW5lCUlNUl9CS0RPSwkJCQlCSVQoNCkKKyNkZWZpbmUJSU1SX0JFRE9LCQkJCUJJVCgzKQorI2RlZmluZQlJTVJfVklET0sJCQkJQklUKDIpCisjZGVmaW5lCUlNUl9WT0RPSwkJCQlCSVQoMSkKKyNkZWZpbmUJSU1SX1JPSwkJCQkJQklUKDApCisKKyNkZWZpbmUJSU1SX1RYRVJSCQkJCUJJVCgxMSkKKyNkZWZpbmUJSU1SX1JYRVJSCQkJCUJJVCgxMCkKKyNkZWZpbmUJSU1SX0MySENNRAkJCQlCSVQoOSkKKyNkZWZpbmUJSU1SX0NQV00JCQkJQklUKDgpCisjZGVmaW5lCUlNUl9PQ1BJTlQJCQkJQklUKDEpCisjZGVmaW5lCUlNUl9XTEFOT0ZGCQkJCUJJVCgwKQorCisjZGVmaW5lCUhXU0VUX01BWF9TSVpFCQkJCTEyOAorCisjZGVmaW5lCUVFUFJPTV9ERUZBVUxUX1RTU0kJCQkweDAKKyNkZWZpbmUgRUVQUk9NX0RFRkFVTFRfVFhQT1dFUkRJRkYJCTB4MAorI2RlZmluZSBFRVBST01fREVGQVVMVF9DUllTVEFMQ0FQCQkweDUKKyNkZWZpbmUgRUVQUk9NX0RFRkFVTFRfQk9BUkRUWVBFCQkweDAyCisjZGVmaW5lIEVFUFJPTV9ERUZBVUxUX1RYUE9XRVIJCQkweDEwMTAKKyNkZWZpbmUJRUVQUk9NX0RFRkFVTFRfSFQyVF9UWFBXUgkJMHgxMAorCisjZGVmaW5lCUVFUFJPTV9ERUZBVUxUX0xFR0FDWUhUVFhQT1dFUkRJRkYJMHgzCisjZGVmaW5lCUVFUFJPTV9ERUZBVUxUX1RIRVJNQUxNRVRFUgkJMHgxMgorI2RlZmluZQlFRVBST01fREVGQVVMVF9BTlRUWFBPV0VSRElGRgkJMHgwCisjZGVmaW5lCUVFUFJPTV9ERUZBVUxUX1RYUFdESUZGX0NSWVNUQUxDQVAJMHg1CisjZGVmaW5lCUVFUFJPTV9ERUZBVUxUX1RYUE9XRVJMRVZFTAkJMHgyMgorI2RlZmluZQlFRVBST01fREVGQVVMVF9IVDQwXzJTRElGRgkJMHgwCisjZGVmaW5lIEVFUFJPTV9ERUZBVUxUX0hUMjBfRElGRgkJMgorI2RlZmluZQlFRVBST01fREVGQVVMVF9MRUdBQ1lIVFRYUE9XRVJESUZGCTB4MworI2RlZmluZSBFRVBST01fREVGQVVMVF9IVDQwX1BXUk1BWE9GRlNFVAkwCisjZGVmaW5lIEVFUFJPTV9ERUZBVUxUX0hUMjBfUFdSTUFYT0ZGU0VUCTAKKworI2RlZmluZSBSRl9PUFRJT04xCQkJCTB4NzkKKyNkZWZpbmUgUkZfT1BUSU9OMgkJCQkweDdBCisjZGVmaW5lIFJGX09QVElPTjMJCQkJMHg3QgorI2RlZmluZSBSRl9PUFRJT040CQkJCTB4N0MKKworI2RlZmluZSBFRVBST01fREVGQVVMVF9QSUQJCQkweDEyMzQKKyNkZWZpbmUgRUVQUk9NX0RFRkFVTFRfVklECQkJMHg1Njc4CisjZGVmaW5lIEVFUFJPTV9ERUZBVUxUX0NVU1RPTUVSSUQJCTB4QUIKKyNkZWZpbmUgRUVQUk9NX0RFRkFVTFRfU1VCQ1VTVE9NRVJJRAkJMHhDRAorI2RlZmluZSBFRVBST01fREVGQVVMVF9WRVJTSU9OCQkJMAorCisjZGVmaW5lCUVFUFJPTV9DSEFOTkVMX1BMQU5fRkNDCQkJMHgwCisjZGVmaW5lCUVFUFJPTV9DSEFOTkVMX1BMQU5fSUMJCQkweDEKKyNkZWZpbmUJRUVQUk9NX0NIQU5ORUxfUExBTl9FVFNJCQkweDIKKyNkZWZpbmUJRUVQUk9NX0NIQU5ORUxfUExBTl9TUEFJTgkJMHgzCisjZGVmaW5lCUVFUFJPTV9DSEFOTkVMX1BMQU5fRlJBTkNFCQkweDQKKyNkZWZpbmUJRUVQUk9NX0NIQU5ORUxfUExBTl9NS0sJCQkweDUKKyNkZWZpbmUJRUVQUk9NX0NIQU5ORUxfUExBTl9NS0sxCQkweDYKKyNkZWZpbmUJRUVQUk9NX0NIQU5ORUxfUExBTl9JU1JBRUwJCTB4NworI2RlZmluZQlFRVBST01fQ0hBTk5FTF9QTEFOX1RFTEVDCQkweDgKKyNkZWZpbmUJRUVQUk9NX0NIQU5ORUxfUExBTl9HTE9CQUxfRE9NQUlOCTB4OQorI2RlZmluZQlFRVBST01fQ0hBTk5FTF9QTEFOX1dPUkxEX1dJREVfMTMJMHhBCisjZGVmaW5lCUVFUFJPTV9DSEFOTkVMX1BMQU5fTkNDCQkJMHhCCisjZGVmaW5lCUVFUFJPTV9DSEFOTkVMX1BMQU5fQllfSFdfTUFTSwkJMHg4MAorCisjZGVmaW5lIEVFUFJPTV9DSURfREVGQVVMVAkJCTB4MAorI2RlZmluZSBFRVBST01fQ0lEX1RPU0hJQkEJCQkweDQKKyNkZWZpbmUJRUVQUk9NX0NJRF9DQ1gJCQkJMHgxMAorI2RlZmluZQlFRVBST01fQ0lEX1FNSQkJCQkweDBECisjZGVmaW5lIEVFUFJPTV9DSURfV0hRTAkJCQkweEZFCisKKyNkZWZpbmUJUlRMODE5Ml9FRVBST01fSUQJCQkweDgxMjkKKworI2RlZmluZSBSVEw4MTkwX0VFUFJPTV9JRAkJCTB4ODEyOQorI2RlZmluZSBFRVBST01fSFBPTgkJCQkweDAyCisjZGVmaW5lIEVFUFJPTV9DTEsJCQkJMHgwNgorI2RlZmluZSBFRVBST01fVEVTVFIJCQkJMHgwOAorCisjZGVmaW5lIEVFUFJPTV9WSUQJCQkJMHgwQQorI2RlZmluZSBFRVBST01fRElECQkJCTB4MEMKKyNkZWZpbmUgRUVQUk9NX1NWSUQJCQkJMHgwRQorI2RlZmluZSBFRVBST01fU01JRAkJCQkweDEwCisKKyNkZWZpbmUgRUVQUk9NX01BQ19BRERSCQkJCTB4MTYKKworI2RlZmluZSBFRVBST01fQ0NLX1RYX1BXUl9JTlgJCQkweDVBCisjZGVmaW5lIEVFUFJPTV9IVDQwXzFTX1RYX1BXUl9JTlgJCTB4NjAKKyNkZWZpbmUgRUVQUk9NX0hUNDBfMlNfVFhfUFdSX0lOWF9ESUZGCQkweDY2CisjZGVmaW5lIEVFUFJPTV9IVDIwX1RYX1BXUl9JTlhfRElGRgkJMHg2OQorI2RlZmluZSBFRVBST01fT0ZETV9UWF9QV1JfSU5YX0RJRkYJCTB4NkMKKyNkZWZpbmUgRUVQUk9NX0hUNDBfTUFYX1BXUl9PRkZTRVQJCTB4NkYKKyNkZWZpbmUgRUVQUk9NX0hUMjBfTUFYX1BXUl9PRkZTRVQJCTB4NzIKKworI2RlZmluZSBFRVBST01fVFNTSV9BCQkJCTB4NzYKKyNkZWZpbmUgRUVQUk9NX1RTU0lfQgkJCQkweDc3CisjZGVmaW5lIEVFUFJPTV9USEVSTUFMX01FVEVSCQkJMHg3OAorI2RlZmluZSBFRVBST01fWFRBTF9LCQkJCTB4NzgKKyNkZWZpbmUgRUVQUk9NX1JGX09QVDEJCQkJMHg3OQorI2RlZmluZSBFRVBST01fUkZfT1BUMgkJCQkweDdBCisjZGVmaW5lIEVFUFJPTV9SRl9PUFQzCQkJCTB4N0IKKyNkZWZpbmUgRUVQUk9NX1JGX09QVDQJCQkJMHg3QworI2RlZmluZSBFRVBST01fQ0hBTk5FTF9QTEFOCQkJMHg3RAorI2RlZmluZSBFRVBST01fVkVSU0lPTgkJCQkweDdFCisjZGVmaW5lIEVFUFJPTV9DVVNUT01FUl9JRAkJCTB4N0YKKworI2RlZmluZSBFRVBST01fUFdSRElGRgkJCQkweDU0CisKKyNkZWZpbmUgRUVQUk9NX1RYUE9XRVJDQ0sJCQkweDVBCisjZGVmaW5lCUVFUFJPTV9UWFBPV0VSSFQ0MF8xUwkJCTB4NjAKKyNkZWZpbmUJRUVQUk9NX1RYUE9XRVJIVDQwXzJTRElGRgkJMHg2NgorI2RlZmluZSBFRVBST01fVFhQT1dFUkhUMjBESUZGCQkJMHg2OQorI2RlZmluZSBFRVBST01fVFhQT1dFUl9PRkRNRElGRgkJCTB4NkMKKworI2RlZmluZQlFRVBST01fVFhQV1JfR1JPVVAJCQkweDZGCisKKyNkZWZpbmUgRUVQUk9NX1RTU0lfQQkJCQkweDc2CisjZGVmaW5lIEVFUFJPTV9UU1NJX0IJCQkJMHg3NworI2RlZmluZSBFRVBST01fVEhFUk1BTF9NRVRFUgkJCTB4NzgKKworI2RlZmluZSBFRVBST01fQ0hBTk5FTFBMQU4JCQkweDc1CisKKyNkZWZpbmUgUkZfT1BUSU9OMQkJCQkweDc5CisjZGVmaW5lIFJGX09QVElPTjIJCQkJMHg3QQorI2RlZmluZSBSRl9PUFRJT04zCQkJCTB4N0IKKyNkZWZpbmUgUkZfT1BUSU9ONAkJCQkweDdDCisKKyNkZWZpbmUJU1RPUEJFQ09OCQkJCUJJVCg2KQorI2RlZmluZQlTVE9QSElHSFQJCQkJQklUKDUpCisjZGVmaW5lCVNUT1BNR1QJCQkJCUJJVCg0KQorI2RlZmluZQlTVE9QVk8JCQkJCUJJVCgzKQorI2RlZmluZQlTVE9QVkkJCQkJCUJJVCgyKQorI2RlZmluZQlTVE9QQkUJCQkJCUJJVCgxKQorI2RlZmluZQlTVE9QQksJCQkJCUJJVCgwKQorCisjZGVmaW5lCVJDUl9BUFBGQ1MJCQkJQklUKDMxKQorI2RlZmluZQlSQ1JfQVBQX01JQwkJCQlCSVQoMzApCisjZGVmaW5lCVJDUl9BUFBfSUNWCQkJCUJJVCgyOSkKKyNkZWZpbmUJUkNSX0FQUF9QSFlTVF9SWEZGCQkJQklUKDI4KQorI2RlZmluZQlSQ1JfQVBQX0JBX1NTTgkJCQlCSVQoMjcpCisjZGVmaW5lCVJDUl9FTk1CSUQJCQkJQklUKDI0KQorI2RlZmluZQlSQ1JfTFNJR0VOCQkJCUJJVCgyMykKKyNkZWZpbmUJUkNSX01GQkVOCQkJCUJJVCgyMikKKyNkZWZpbmUJUkNSX0hUQ19MT0NfQ1RSTAkJCUJJVCgxNCkKKyNkZWZpbmUJUkNSX0FNRgkJCQkJQklUKDEzKQorI2RlZmluZQlSQ1JfQUNGCQkJCQlCSVQoMTIpCisjZGVmaW5lCVJDUl9BREYJCQkJCUJJVCgxMSkKKyNkZWZpbmUJUkNSX0FJQ1YJCQkJQklUKDkpCisjZGVmaW5lCVJDUl9BQ1JDMzIJCQkJQklUKDgpCisjZGVmaW5lCVJDUl9DQlNTSURfQkNOCQkJCUJJVCg3KQorI2RlZmluZQlSQ1JfQ0JTU0lEX0RBVEEJCQkJQklUKDYpCisjZGVmaW5lCVJDUl9DQlNTSUQJCQkJUkNSX0NCU1NJRF9EQVRBCisjZGVmaW5lCVJDUl9BUFdSTUdUCQkJCUJJVCg1KQorI2RlZmluZQlSQ1JfQUREMwkJCQlCSVQoNCkKKyNkZWZpbmUJUkNSX0FCCQkJCQlCSVQoMykKKyNkZWZpbmUJUkNSX0FNCQkJCQlCSVQoMikKKyNkZWZpbmUJUkNSX0FQTQkJCQkJQklUKDEpCisjZGVmaW5lCVJDUl9BQVAJCQkJCUJJVCgwKQorI2RlZmluZQlSQ1JfTVhETUFfT0ZGU0VUCQkJOAorI2RlZmluZQlSQ1JfRklGT19PRkZTRVQJCQkJMTMKKworI2RlZmluZSBSU1ZfQ1RSTAkJCQkweDAwMUMKKyNkZWZpbmUgUkRfQ1RSTAkJCQkJMHgwNTI0CisKKyNkZWZpbmUgUkVHX1VTQl9JTkZPCQkJCTB4RkUxNworI2RlZmluZSBSRUdfVVNCX1NQRUNJQUxfT1BUSU9OCQkJMHhGRTU1CisjZGVmaW5lIFJFR19VU0JfRE1BX0FHR19UTwkJCTB4RkU1QgorI2RlZmluZSBSRUdfVVNCX0FHR19UTwkJCQkweEZFNUMKKyNkZWZpbmUgUkVHX1VTQl9BR0dfVEgJCQkJMHhGRTVECisKKyNkZWZpbmUgUkVHX1VTQl9WSUQJCQkJMHhGRTYwCisjZGVmaW5lIFJFR19VU0JfUElECQkJCTB4RkU2MgorI2RlZmluZSBSRUdfVVNCX09QVElPTkFMCQkJMHhGRTY0CisjZGVmaW5lIFJFR19VU0JfQ0hJUlBfSwkJCQkweEZFNjUKKyNkZWZpbmUgUkVHX1VTQl9QSFkJCQkJMHhGRTY2CisjZGVmaW5lIFJFR19VU0JfTUFDX0FERFIJCQkweEZFNzAKKyNkZWZpbmUgUkVHX1VTQl9IUlBXTQkJCQkweEZFNTgKKyNkZWZpbmUgUkVHX1VTQl9IQ1BXTQkJCQkweEZFNTcKKworI2RlZmluZSBTVzE4X0ZQV00JCQkJQklUKDMpCisKKyNkZWZpbmUgSVNPX01EMlBQCQkJCUJJVCgwKQorI2RlZmluZSBJU09fVUEyVVNCCQkJCUJJVCgxKQorI2RlZmluZSBJU09fVUQyQ09SRQkJCQlCSVQoMikKKyNkZWZpbmUgSVNPX1BBMlBDSUUJCQkJQklUKDMpCisjZGVmaW5lIElTT19QRDJDT1JFCQkJCUJJVCg0KQorI2RlZmluZSBJU09fSVAyTUFDCQkJCUJJVCg1KQorI2RlZmluZSBJU09fRElPUAkJCQlCSVQoNikKKyNkZWZpbmUgSVNPX0RJT0UJCQkJQklUKDcpCisjZGVmaW5lIElTT19FQjJDT1JFCQkJCUJJVCg4KQorI2RlZmluZSBJU09fRElPUgkJCQlCSVQoOSkKKworI2RlZmluZSBQV0NfRVYyNVYJCQkJQklUKDE0KQorI2RlZmluZSBQV0NfRVYxMlYJCQkJQklUKDE1KQorCisjZGVmaW5lIEZFTl9CQlJTVEIJCQkJQklUKDApCisjZGVmaW5lIEZFTl9CQl9HTEJfUlNUbgkJCQlCSVQoMSkKKyNkZWZpbmUgRkVOX1VTQkEJCQkJQklUKDIpCisjZGVmaW5lIEZFTl9VUExMCQkJCUJJVCgzKQorI2RlZmluZSBGRU5fVVNCRAkJCQlCSVQoNCkKKyNkZWZpbmUgRkVOX0RJT19QQ0lFCQkJCUJJVCg1KQorI2RlZmluZSBGRU5fUENJRUEJCQkJQklUKDYpCisjZGVmaW5lIEZFTl9QUExMCQkJCUJJVCg3KQorI2RlZmluZSBGRU5fUENJRUQJCQkJQklUKDgpCisjZGVmaW5lIEZFTl9ESU9FCQkJCUJJVCg5KQorI2RlZmluZSBGRU5fQ1BVRU4JCQkJQklUKDEwKQorI2RlZmluZSBGRU5fRENPUkUJCQkJQklUKDExKQorI2RlZmluZSBGRU5fRUxEUgkJCQlCSVQoMTIpCisjZGVmaW5lIEZFTl9ESU9fUkYJCQkJQklUKDEzKQorI2RlZmluZSBGRU5fSFdQRE4JCQkJQklUKDE0KQorI2RlZmluZSBGRU5fTVJFR0VOCQkJCUJJVCgxNSkKKworI2RlZmluZSBQRk1fTERBTEwJCQkJQklUKDApCisjZGVmaW5lIFBGTV9BTEROCQkJCUJJVCgxKQorI2RlZmluZSBQRk1fTERLUAkJCQlCSVQoMikKKyNkZWZpbmUgUEZNX1dPV0wJCQkJQklUKDMpCisjZGVmaW5lIEVuUEROCQkJCQlCSVQoNCkKKyNkZWZpbmUgUEROX1BMCQkJCQlCSVQoNSkKKyNkZWZpbmUgQVBGTV9PTk1BQwkJCQlCSVQoOCkKKyNkZWZpbmUgQVBGTV9PRkYJCQkJQklUKDkpCisjZGVmaW5lIEFQRk1fUlNNCQkJCUJJVCgxMCkKKyNkZWZpbmUgQUZTTV9IU1VTCQkJCUJJVCgxMSkKKyNkZWZpbmUgQUZTTV9QQ0lFCQkJCUJJVCgxMikKKyNkZWZpbmUgQVBETV9NQUMJCQkJQklUKDEzKQorI2RlZmluZSBBUERNX0hPU1QJCQkJQklUKDE0KQorI2RlZmluZSBBUERNX0hQRE4JCQkJQklUKDE1KQorI2RlZmluZSBSRFlfTUFDT04JCQkJQklUKDE2KQorI2RlZmluZSBTVVNfSE9TVAkJCQlCSVQoMTcpCisjZGVmaW5lIFJPUF9BTEQJCQkJCUJJVCgyMCkKKyNkZWZpbmUgUk9QX1BXUgkJCQkJQklUKDIxKQorI2RlZmluZSBST1BfU1BTCQkJCQlCSVQoMjIpCisjZGVmaW5lIFNPUF9NUlNUCQkJCUJJVCgyNSkKKyNkZWZpbmUgU09QX0ZVU0UJCQkJQklUKDI2KQorI2RlZmluZSBTT1BfQUJHCQkJCQlCSVQoMjcpCisjZGVmaW5lIFNPUF9BTUIJCQkJCUJJVCgyOCkKKyNkZWZpbmUgU09QX1JDSwkJCQkJQklUKDI5KQorI2RlZmluZSBTT1BfQThNCQkJCQlCSVQoMzApCisjZGVmaW5lIFhPUF9CVENLCQkJCUJJVCgzMSkKKworI2RlZmluZSBBTkFEMTZWX0VOCQkJCUJJVCgwKQorI2RlZmluZSBBTkE4TQkJCQkJQklUKDEpCisjZGVmaW5lIE1BQ1NMUAkJCQkJQklUKDQpCisjZGVmaW5lIExPQURFUl9DTEtfRU4JCQkJQklUKDUpCisjZGVmaW5lIF84ME1fU1NDX0RJUwkJCQlCSVQoNykKKyNkZWZpbmUgXzgwTV9TU0NfRU5fSE8JCQkJQklUKDgpCisjZGVmaW5lIFBIWV9TU0NfUlNUQgkJCQlCSVQoOSkKKyNkZWZpbmUgU0VDX0NMS19FTgkJCQlCSVQoMTApCisjZGVmaW5lIE1BQ19DTEtfRU4JCQkJQklUKDExKQorI2RlZmluZSBTWVNfQ0xLX0VOCQkJCUJJVCgxMikKKyNkZWZpbmUgUklOR19DTEtfRU4JCQkJQklUKDEzKQorCisjZGVmaW5lCUJPT1RfRlJPTV9FRVBST00JCQlCSVQoNCkKKyNkZWZpbmUJRUVQUk9NX0VOCQkJCUJJVCg1KQorCisjZGVmaW5lIEFGRV9CR0VOCQkJCUJJVCgwKQorI2RlZmluZSBBRkVfTUJFTgkJCQlCSVQoMSkKKyNkZWZpbmUgTUFDX0lEX0VOCQkJCUJJVCg3KQorCisjZGVmaW5lIFdMT0NLX0FMTAkJCQlCSVQoMCkKKyNkZWZpbmUgV0xPQ0tfMDAJCQkJQklUKDEpCisjZGVmaW5lIFdMT0NLXzA0CQkJCUJJVCgyKQorI2RlZmluZSBXTE9DS18wOAkJCQlCSVQoMykKKyNkZWZpbmUgV0xPQ0tfNDAJCQkJQklUKDQpCisjZGVmaW5lIFJfRElTX1BSU1RfMAkJCQlCSVQoNSkKKyNkZWZpbmUgUl9ESVNfUFJTVF8xCQkJCUJJVCg2KQorI2RlZmluZSBMT0NLX0FMTF9FTgkJCQlCSVQoNykKKworI2RlZmluZSBSRl9FTgkJCQkJQklUKDApCisjZGVmaW5lIFJGX1JTVEIJCQkJCUJJVCgxKQorI2RlZmluZSBSRl9TRE1SU1RCCQkJCUJJVCgyKQorCisjZGVmaW5lIExEQTE1X0VOCQkJCUJJVCgwKQorI2RlZmluZSBMREExNV9TVEJZCQkJCUJJVCgxKQorI2RlZmluZSBMREExNV9PQlVGCQkJCUJJVCgyKQorI2RlZmluZSBMREExNV9SRUdfVk9TCQkJCUJJVCgzKQorI2RlZmluZSBfTERBMTVfVk9BREooeCkJCQkJKCgoeCkgJiAweDcpIDw8IDQpCisKKyNkZWZpbmUgTERWMTJfRU4JCQkJQklUKDApCisjZGVmaW5lIExEVjEyX1NEQlkJCQkJQklUKDEpCisjZGVmaW5lIExQTERPX0hTTQkJCQlCSVQoMikKKyNkZWZpbmUgTFBMRE9fTFNNX0RJUwkJCQlCSVQoMykKKyNkZWZpbmUgX0xEVjEyX1ZBREooeCkJCQkJKCgoeCkgJiAweEYpIDw8IDQpCisKKyNkZWZpbmUgWFRBTF9FTgkJCQkJQklUKDApCisjZGVmaW5lIFhUQUxfQlNFTAkJCQlCSVQoMSkKKyNkZWZpbmUgX1hUQUxfQk9TQyh4KQkJCQkoKCh4KSAmIDB4MykgPDwgMikKKyNkZWZpbmUgX1hUQUxfQ0FESih4KQkJCQkoKCh4KSAmIDB4RikgPDwgNCkKKyNkZWZpbmUgWFRBTF9HQVRFX1VTQgkJCQlCSVQoOCkKKyNkZWZpbmUgX1hUQUxfVVNCX0RSVih4KQkJCSgoKHgpICYgMHgzKSA8PCA5KQorI2RlZmluZSBYVEFMX0dBVEVfQUZFCQkJCUJJVCgxMSkKKyNkZWZpbmUgX1hUQUxfQUZFX0RSVih4KQkJCSgoKHgpICYgMHgzKSA8PCAxMikKKyNkZWZpbmUgWFRBTF9SRl9HQVRFCQkJCUJJVCgxNCkKKyNkZWZpbmUgX1hUQUxfUkZfRFJWKHgpCQkJCSgoKHgpICYgMHgzKSA8PCAxNSkKKyNkZWZpbmUgWFRBTF9HQVRFX0RJRwkJCQlCSVQoMTcpCisjZGVmaW5lIF9YVEFMX0RJR19EUlYoeCkJCQkoKCh4KSAmIDB4MykgPDwgMTgpCisjZGVmaW5lIFhUQUxfQlRfR0FURQkJCQlCSVQoMjApCisjZGVmaW5lIF9YVEFMX0JUX0RSVih4KQkJCQkoKCh4KSAmIDB4MykgPDwgMjEpCisjZGVmaW5lIF9YVEFMX0dQSU8oeCkJCQkJKCgoeCkgJiAweDcpIDw8IDIzKQorCisjZGVmaW5lIENLRExZX0FGRQkJCQlCSVQoMjYpCisjZGVmaW5lIENLRExZX1VTQgkJCQlCSVQoMjcpCisjZGVmaW5lIENLRExZX0RJRwkJCQlCSVQoMjgpCisjZGVmaW5lIENLRExZX0JUCQkJCUJJVCgyOSkKKworI2RlZmluZSBBUExMX0VOCQkJCQlCSVQoMCkKKyNkZWZpbmUgQVBMTF8zMjBfRU4JCQkJQklUKDEpCisjZGVmaW5lIEFQTExfRlJFRl9TRUwJCQkJQklUKDIpCisjZGVmaW5lIEFQTExfRURHRV9TRUwJCQkJQklUKDMpCisjZGVmaW5lIEFQTExfV0RPR0IJCQkJQklUKDQpCisjZGVmaW5lIEFQTExfTFBGRU4JCQkJQklUKDUpCisKKyNkZWZpbmUgQVBMTF9SRUZfQ0xLXzEzTUhaCQkJMHgxCisjZGVmaW5lIEFQTExfUkVGX0NMS18xOV8yTUhaCQkJMHgyCisjZGVmaW5lIEFQTExfUkVGX0NMS18yME1IWgkJCTB4MworI2RlZmluZSBBUExMX1JFRl9DTEtfMjVNSFoJCQkweDQKKyNkZWZpbmUgQVBMTF9SRUZfQ0xLXzI2TUhaCQkJMHg1CisjZGVmaW5lIEFQTExfUkVGX0NMS18zOF80TUhaCQkJMHg2CisjZGVmaW5lIEFQTExfUkVGX0NMS180ME1IWgkJCTB4NworCisjZGVmaW5lIEFQTExfMzIwRU4JCQkJQklUKDE0KQorI2RlZmluZSBBUExMXzgwRU4JCQkJQklUKDE1KQorI2RlZmluZSBBUExMXzFNRU4JCQkJQklUKDI0KQorCisjZGVmaW5lIEFMRF9FTgkJCQkJQklUKDE4KQorI2RlZmluZSBFRl9QRAkJCQkJQklUKDE5KQorI2RlZmluZSBFRl9GTEFHCQkJCQlCSVQoMzEpCisKKyNkZWZpbmUgRUZfVFJQVAkJCQkJQklUKDcpCisjZGVmaW5lIExET0UyNV9FTgkJCQlCSVQoMzEpCisKKyNkZWZpbmUgUlNNX0VOCQkJCQlCSVQoMCkKKyNkZWZpbmUgVGltZXJfRU4JCQkJQklUKDQpCisKKyNkZWZpbmUgVFJTVzBFTgkJCQkJQklUKDIpCisjZGVmaW5lIFRSU1cxRU4JCQkJCUJJVCgzKQorI2RlZmluZSBFUk9NX0VOCQkJCQlCSVQoNCkKKyNkZWZpbmUgRW5CVAkJCQkJQklUKDUpCisjZGVmaW5lIEVuVWFydAkJCQkJQklUKDgpCisjZGVmaW5lIFVhcnRfOTEwCQkJCUJJVCg5KQorI2RlZmluZSBFblBNQUMJCQkJCUJJVCgxMCkKKyNkZWZpbmUgU0lDX1NXUlNUCQkJCUJJVCgxMSkKKyNkZWZpbmUgRW5TSUMJCQkJCUJJVCgxMikKKyNkZWZpbmUgU0lDXzIzCQkJCQlCSVQoMTMpCisjZGVmaW5lIEVuSERQCQkJCQlCSVQoMTQpCisjZGVmaW5lIFNJQ19MQksJCQkJCUJJVCgxNSkKKworI2RlZmluZSBMRUQwUEwJCQkJCUJJVCg0KQorI2RlZmluZSBMRUQxUEwJCQkJCUJJVCgxMikKKyNkZWZpbmUgTEVEMERJUwkJCQkJQklUKDcpCisKKyNkZWZpbmUgTUNVRldETF9FTgkJCQlCSVQoMCkKKyNkZWZpbmUgTUNVRldETF9SRFkJCQkJQklUKDEpCisjZGVmaW5lIEZXRExfQ2hrU3VtX3JwdAkJCQlCSVQoMikKKyNkZWZpbmUgTUFDSU5JX1JEWQkJCQlCSVQoMykKKyNkZWZpbmUgQkJJTklfUkRZCQkJCUJJVCg0KQorI2RlZmluZSBSRklOSV9SRFkJCQkJQklUKDUpCisjZGVmaW5lIFdJTlRJTklfUkRZCQkJCUJJVCg2KQorI2RlZmluZSBDUFJTVAkJCQkJQklUKDIzKQorCisjZGVmaW5lIFhDTEtfVkxECQkJCUJJVCgwKQorI2RlZmluZSBBQ0xLX1ZMRAkJCQlCSVQoMSkKKyNkZWZpbmUgVUNMS19WTEQJCQkJQklUKDIpCisjZGVmaW5lIFBDTEtfVkxECQkJCUJJVCgzKQorI2RlZmluZSBQQ0lSU1RCCQkJCQlCSVQoNCkKKyNkZWZpbmUgVjE1X1ZMRAkJCQkJQklUKDUpCisjZGVmaW5lIFRSUF9CMTVWX0VOCQkJCUJJVCg3KQorI2RlZmluZSBTSUNfSURMRQkJCQlCSVQoOCkKKyNkZWZpbmUgQkRfTUFDMgkJCQkJQklUKDkpCisjZGVmaW5lIEJEX01BQzEJCQkJCUJJVCgxMCkKKyNkZWZpbmUgSUNfTUFDUEhZX01PREUJCQkJQklUKDExKQorI2RlZmluZSBQQURfSFdQRF9JRE4JCQkJQklUKDIyKQorI2RlZmluZSBUUlBfVkFVWF9FTgkJCQlCSVQoMjMpCisjZGVmaW5lIFRSUF9CVF9FTgkJCQlCSVQoMjQpCisjZGVmaW5lIEJEX1BLR19TRUwJCQkJQklUKDI1KQorI2RlZmluZSBCRF9IQ0lfU0VMCQkJCUJJVCgyNikKKyNkZWZpbmUgVFlQRV9JRAkJCQkJQklUKDI3KQorCisjZGVmaW5lIENISVBfVkVSX1JUTF9NQVNLCQkJMHhGMDAwCisjZGVmaW5lIENISVBfVkVSX1JUTF9TSElGVAkJCTEyCisKKyNkZWZpbmUgUkVHX0xCTU9ERQkJCQkoUkVHX0NSICsgMykKKworI2RlZmluZSBIQ0lfVFhETUFfRU4JCQkJQklUKDApCisjZGVmaW5lIEhDSV9SWERNQV9FTgkJCQlCSVQoMSkKKyNkZWZpbmUgVFhETUFfRU4JCQkJQklUKDIpCisjZGVmaW5lIFJYRE1BX0VOCQkJCUJJVCgzKQorI2RlZmluZSBQUk9UT0NPTF9FTgkJCQlCSVQoNCkKKyNkZWZpbmUgU0NIRURVTEVfRU4JCQkJQklUKDUpCisjZGVmaW5lIE1BQ1RYRU4JCQkJCUJJVCg2KQorI2RlZmluZSBNQUNSWEVOCQkJCQlCSVQoNykKKyNkZWZpbmUgRU5TV0JDTgkJCQkJQklUKDgpCisjZGVmaW5lIEVOU0VDCQkJCQlCSVQoOSkKKworI2RlZmluZSBfTkVUVFlQRSh4KQkJCQkoKCh4KSAmIDB4MykgPDwgMTYpCisjZGVmaW5lIE1BU0tfTkVUVFlQRQkJCQkweDMwMDAwCisjZGVmaW5lIE5UX05PX0xJTksJCQkJMHgwCisjZGVmaW5lIE5UX0xJTktfQURfSE9DCQkJCTB4MQorI2RlZmluZSBOVF9MSU5LX0FQCQkJCTB4MgorI2RlZmluZSBOVF9BU19BUAkJCQkweDMKKworI2RlZmluZSBfTEJNT0RFKHgpCQkJCSgoKHgpICYgMHhGKSA8PCAyNCkKKyNkZWZpbmUgTUFTS19MQk1PREUJCQkJMHhGMDAwMDAwCisjZGVmaW5lIExPT1BCQUNLX05PUk1BTAkJCQkweDAKKyNkZWZpbmUgTE9PUEJBQ0tfSU1NRURJQVRFTFkJCQkweEIKKyNkZWZpbmUgTE9PUEJBQ0tfTUFDX0RFTEFZCQkJMHgzCisjZGVmaW5lIExPT1BCQUNLX1BIWQkJCQkweDEKKyNkZWZpbmUgTE9PUEJBQ0tfRE1BCQkJCTB4NworCisjZGVmaW5lIEdFVF9SWF9QQUdFX1NJWkUodmFsdWUpCQkoKHZhbHVlKSAmIDB4RikKKyNkZWZpbmUgR0VUX1RYX1BBR0VfU0laRSh2YWx1ZSkJCSgoKHZhbHVlKSAmIDB4RjApID4+IDQpCisjZGVmaW5lIF9QU1JYX01BU0sJCQkJMHhGCisjZGVmaW5lIF9QU1RYX01BU0sJCQkJMHhGMAorI2RlZmluZSBfUFNSWCh4KQkJCQkoeCkKKyNkZWZpbmUgX1BTVFgoeCkJCQkJKCh4KSA8PCA0KQorCisjZGVmaW5lIFBCUF82NAkJCQkJMHgwCisjZGVmaW5lIFBCUF8xMjgJCQkJCTB4MQorI2RlZmluZSBQQlBfMjU2CQkJCQkweDIKKyNkZWZpbmUgUEJQXzUxMgkJCQkJMHgzCisjZGVmaW5lIFBCUF8xMDI0CQkJCTB4NAorCisjZGVmaW5lIFJYRE1BX0FSQkJXX0VOCQkJCUJJVCgwKQorI2RlZmluZSBSWFNIRlRfRU4JCQkJQklUKDEpCisjZGVmaW5lIFJYRE1BX0FHR19FTgkJCQlCSVQoMikKKyNkZWZpbmUgUVNfVk9fUVVFVUUJCQkJQklUKDgpCisjZGVmaW5lIFFTX1ZJX1FVRVVFCQkJCUJJVCg5KQorI2RlZmluZSBRU19CRV9RVUVVRQkJCQlCSVQoMTApCisjZGVmaW5lIFFTX0JLX1FVRVVFCQkJCUJJVCgxMSkKKyNkZWZpbmUgUVNfTUFOQUdFUl9RVUVVRQkJCUJJVCgxMikKKyNkZWZpbmUgUVNfSElHSF9RVUVVRQkJCQlCSVQoMTMpCisKKyNkZWZpbmUgSFFTRUxfVk9RCQkJCUJJVCgwKQorI2RlZmluZSBIUVNFTF9WSVEJCQkJQklUKDEpCisjZGVmaW5lIEhRU0VMX0JFUQkJCQlCSVQoMikKKyNkZWZpbmUgSFFTRUxfQktRCQkJCUJJVCgzKQorI2RlZmluZSBIUVNFTF9NR1RRCQkJCUJJVCg0KQorI2RlZmluZSBIUVNFTF9ISVEJCQkJQklUKDUpCisKKyNkZWZpbmUgX1RYRE1BX0hJUV9NQVAoeCkJCQkoKCh4KSYweDMpIDw8IDE0KQorI2RlZmluZSBfVFhETUFfTUdRX01BUCh4KQkJCSgoKHgpJjB4MykgPDwgMTIpCisjZGVmaW5lIF9UWERNQV9CS1FfTUFQKHgpCQkJKCgoeCkmMHgzKSA8PCAxMCkKKyNkZWZpbmUgX1RYRE1BX0JFUV9NQVAoeCkJCQkoKCh4KSYweDMpIDw8ICA4KQorI2RlZmluZSBfVFhETUFfVklRX01BUCh4KQkJCSgoKHgpJjB4MykgPDwgIDYpCisjZGVmaW5lIF9UWERNQV9WT1FfTUFQKHgpCQkJKCgoeCkmMHgzKSA8PCAgNCkKKworI2RlZmluZSBRVUVVRV9MT1cJCQkJMQorI2RlZmluZSBRVUVVRV9OT1JNQUwJCQkJMgorI2RlZmluZSBRVUVVRV9ISUdICQkJCTMKKworI2RlZmluZSBfTExUX05PX0FDVElWRQkJCQkweDAKKyNkZWZpbmUgX0xMVF9XUklURV9BQ0NFU1MJCQkweDEKKyNkZWZpbmUgX0xMVF9SRUFEX0FDQ0VTUwkJCTB4MgorCisjZGVmaW5lIF9MTFRfSU5JVF9EQVRBKHgpCQkJKCh4KSAmIDB4RkYpCisjZGVmaW5lIF9MTFRfSU5JVF9BRERSKHgpCQkJKCgoeCkgJiAweEZGKSA8PCA4KQorI2RlZmluZSBfTExUX09QKHgpCQkJCSgoKHgpICYgMHgzKSA8PCAzMCkKKyNkZWZpbmUgX0xMVF9PUF9WQUxVRSh4KQkJCSgoKHgpID4+IDMwKSAmIDB4MykKKworI2RlZmluZSBCQl9XUklURV9SRUFEX01BU0sJCQkoQklUKDMxKSB8IEJJVCgzMCkpCisjZGVmaW5lIEJCX1dSSVRFX0VOCQkJCUJJVCgzMCkKKyNkZWZpbmUgQkJfUkVBRF9FTgkJCQlCSVQoMzEpCisKKyNkZWZpbmUgX0hQUSh4KQkJCQkJKCh4KSAmIDB4RkYpCisjZGVmaW5lIF9MUFEoeCkJCQkJCSgoKHgpICYgMHhGRikgPDwgOCkKKyNkZWZpbmUgX1BVQlEoeCkJCQkJKCgoeCkgJiAweEZGKSA8PCAxNikKKyNkZWZpbmUgX05QUSh4KQkJCQkJKCh4KSAmIDB4RkYpCisKKyNkZWZpbmUgSFBRX1BVQkxJQ19ESVMJCQkJQklUKDI0KQorI2RlZmluZSBMUFFfUFVCTElDX0RJUwkJCQlCSVQoMjUpCisjZGVmaW5lIExEX1JRUE4JCQkJCUJJVCgzMSkKKworI2RlZmluZSBCQ05fVkFMSUQJCQkJQklUKDE2KQorI2RlZmluZSBCQ05fSEVBRCh4KQkJCQkoKCh4KSAmIDB4RkYpIDw8IDgpCisjZGVmaW5lCUJDTl9IRUFEX01BU0sJCQkJMHhGRjAwCisKKyNkZWZpbmUgQkxLX0RFU0NfTlVNX1NISUZUCQkJNAorI2RlZmluZSBCTEtfREVTQ19OVU1fTUFTSwkJCTB4RgorCisjZGVmaW5lIERST1BfREFUQV9FTgkJCQlCSVQoOSkKKworI2RlZmluZSBFTl9BTVBEVV9SVFlfTkVXCQkJQklUKDcpCisKKyNkZWZpbmUgX0lOSVJUU01DU19TRUwoeCkJCQkoKHgpICYgMHgzRikKKworI2RlZmluZSBfU1BFQ19TSUZTX0NDSyh4KQkJCSgoeCkgJiAweEZGKQorI2RlZmluZSBfU1BFQ19TSUZTX09GRE0oeCkJCQkoKCh4KSAmIDB4RkYpIDw8IDgpCisKKyNkZWZpbmUgUkFURV9SRUdfQklUTUFQX0FMTAkJCTB4RkZGRkYKKworI2RlZmluZSBfUlJTQ19CSVRNQVAoeCkJCQkJKCh4KSAmIDB4RkZGRkYpCisKKyNkZWZpbmUgX1JSU1JfUlNDKHgpCQkJCSgoKHgpICYgMHgzKSA8PCAyMSkKKyNkZWZpbmUgUlJTUl9SU0NfUkVTRVJWRUQJCQkweDAKKyNkZWZpbmUgUlJTUl9SU0NfVVBQRVJfU1VCQ0hBTk5FTAkJMHgxCisjZGVmaW5lIFJSU1JfUlNDX0xPV0VSX1NVQkNIQU5ORUwJCTB4MgorI2RlZmluZSBSUlNSX1JTQ19EVVBMSUNBVEVfTU9ERQkJCTB4MworCisjZGVmaW5lIFVTRV9TSE9SVF9HMQkJCQlCSVQoMjApCisKKyNkZWZpbmUgX0FHR0xNVF9NQ1MwKHgpCQkJCSgoeCkgJiAweEYpCisjZGVmaW5lIF9BR0dMTVRfTUNTMSh4KQkJCQkoKCh4KSAmIDB4RikgPDwgNCkKKyNkZWZpbmUgX0FHR0xNVF9NQ1MyKHgpCQkJCSgoKHgpICYgMHhGKSA8PCA4KQorI2RlZmluZSBfQUdHTE1UX01DUzMoeCkJCQkJKCgoeCkgJiAweEYpIDw8IDEyKQorI2RlZmluZSBfQUdHTE1UX01DUzQoeCkJCQkJKCgoeCkgJiAweEYpIDw8IDE2KQorI2RlZmluZSBfQUdHTE1UX01DUzUoeCkJCQkJKCgoeCkgJiAweEYpIDw8IDIwKQorI2RlZmluZSBfQUdHTE1UX01DUzYoeCkJCQkJKCgoeCkgJiAweEYpIDw8IDI0KQorI2RlZmluZSBfQUdHTE1UX01DUzcoeCkJCQkJKCgoeCkgJiAweEYpIDw8IDI4KQorCisjZGVmaW5lCVJFVFJZX0xJTUlUX1NIT1JUX1NISUZUCQkJOAorI2RlZmluZQlSRVRSWV9MSU1JVF9MT05HX1NISUZUCQkJMAorCisjZGVmaW5lIF9EQVJGX1JDMSh4KQkJCQkoKHgpICYgMHgxRikKKyNkZWZpbmUgX0RBUkZfUkMyKHgpCQkJCSgoKHgpICYgMHgxRikgPDwgOCkKKyNkZWZpbmUgX0RBUkZfUkMzKHgpCQkJCSgoKHgpICYgMHgxRikgPDwgMTYpCisjZGVmaW5lIF9EQVJGX1JDNCh4KQkJCQkoKCh4KSAmIDB4MUYpIDw8IDI0KQorI2RlZmluZSBfREFSRl9SQzUoeCkJCQkJKCh4KSAmIDB4MUYpCisjZGVmaW5lIF9EQVJGX1JDNih4KQkJCQkoKCh4KSAmIDB4MUYpIDw8IDgpCisjZGVmaW5lIF9EQVJGX1JDNyh4KQkJCQkoKCh4KSAmIDB4MUYpIDw8IDE2KQorI2RlZmluZSBfREFSRl9SQzgoeCkJCQkJKCgoeCkgJiAweDFGKSA8PCAyNCkKKworI2RlZmluZSBfUkFSRl9SQzEoeCkJCQkJKCh4KSAmIDB4MUYpCisjZGVmaW5lIF9SQVJGX1JDMih4KQkJCQkoKCh4KSAmIDB4MUYpIDw8IDgpCisjZGVmaW5lIF9SQVJGX1JDMyh4KQkJCQkoKCh4KSAmIDB4MUYpIDw8IDE2KQorI2RlZmluZSBfUkFSRl9SQzQoeCkJCQkJKCgoeCkgJiAweDFGKSA8PCAyNCkKKyNkZWZpbmUgX1JBUkZfUkM1KHgpCQkJCSgoeCkgJiAweDFGKQorI2RlZmluZSBfUkFSRl9SQzYoeCkJCQkJKCgoeCkgJiAweDFGKSA8PCA4KQorI2RlZmluZSBfUkFSRl9SQzcoeCkJCQkJKCgoeCkgJiAweDFGKSA8PCAxNikKKyNkZWZpbmUgX1JBUkZfUkM4KHgpCQkJCSgoKHgpICYgMHgxRikgPDwgMjQpCisKKyNkZWZpbmUgQUNfUEFSQU1fVFhPUF9MSU1JVF9PRkZTRVQJCTE2CisjZGVmaW5lIEFDX1BBUkFNX0VDV19NQVhfT0ZGU0VUCQkJMTIKKyNkZWZpbmUgQUNfUEFSQU1fRUNXX01JTl9PRkZTRVQJCQk4CisjZGVmaW5lIEFDX1BBUkFNX0FJRlNfT0ZGU0VUCQkJMAorCisjZGVmaW5lIF9BSUZTKHgpCQkJCSh4KQorI2RlZmluZSBfRUNXX01BWF9NSU4oeCkJCQkJKCh4KSA8PCA4KQorI2RlZmluZSBfVFhPUF9MSU1JVCh4KQkJCQkoKHgpIDw8IDE2KQorCisjZGVmaW5lIF9CQ05JRlMoeCkJCQkJKCh4KSAmIDB4RkYpCisjZGVmaW5lIF9CQ05FQ1coeCkJCQkJKCgoKHgpICYgMHhGKSkgPDwgOCkKKworI2RlZmluZSBfTFJMKHgpCQkJCQkoKHgpICYgMHgzRikKKyNkZWZpbmUgX1NSTCh4KQkJCQkJKCgoeCkgJiAweDNGKSA8PCA4KQorCisjZGVmaW5lIF9TSUZTX0NDS19DVFgoeCkJCQkoKHgpICYgMHhGRikKKyNkZWZpbmUgX1NJRlNfQ0NLX1RSWCh4KQkJCSgoKHgpICYgMHhGRikgPDwgOCk7CisKKyNkZWZpbmUgX1NJRlNfT0ZETV9DVFgoeCkJCQkoKHgpICYgMHhGRikKKyNkZWZpbmUgX1NJRlNfT0ZETV9UUlgoeCkJCQkoKCh4KSAmIDB4RkYpIDw8IDgpOworCisjZGVmaW5lIF9UQlRUX1BST0hJQklUX0hPTEQoeCkJCQkoKCh4KSAmIDB4RkYpIDw8IDgpCisKKyNkZWZpbmUgRElTX0VEQ0FfQ05UX0RXTgkJCUJJVCgxMSkKKworI2RlZmluZSBFTl9NQlNTSUQJCQkJQklUKDEpCisjZGVmaW5lIEVOX1RYQkNOX1JQVAkJCQlCSVQoMikKKyNkZWZpbmUJRU5fQkNOX0ZVTkNUSU9OCQkJCUJJVCgzKQorCisjZGVmaW5lIFRTRlRSX1JTVAkJCQlCSVQoMCkKKyNkZWZpbmUgVFNGVFIxX1JTVAkJCQlCSVQoMSkKKworI2RlZmluZSBTVE9QX0JDTlEJCQkJQklUKDYpCisKKyNkZWZpbmUJRElTX1RTRl9VRFQwX05PUk1BTF9DSElQCQlCSVQoNCkKKyNkZWZpbmUJRElTX1RTRl9VRFQwX1RFU1RfQ0hJUAkJCUJJVCg1KQorCisjZGVmaW5lCUFjbUh3X0h3RW4JCQkJQklUKDApCisjZGVmaW5lCUFjbUh3X0JlcUVuCQkJCUJJVCgxKQorI2RlZmluZQlBY21Id19WaXFFbgkJCQlCSVQoMikKKyNkZWZpbmUJQWNtSHdfVm9xRW4JCQkJQklUKDMpCisjZGVmaW5lCUFjbUh3X0JlcVN0YXR1cwkJCQlCSVQoNCkKKyNkZWZpbmUJQWNtSHdfVmlxU3RhdHVzCQkJCUJJVCg1KQorI2RlZmluZQlBY21Id19Wb3FTdGF0dXMJCQkJQklUKDYpCisKKyNkZWZpbmUgQVBTRE9GRgkJCQkJQklUKDYpCisjZGVmaW5lIEFQU0RPRkZfU1RBVFVTCQkJCUJJVCg3KQorCisjZGVmaW5lIEJXXzIwTUhaCQkJCUJJVCgyKQorCisjZGVmaW5lIFJBVEVfQklUTUFQX0FMTAkJCQkweEZGRkZGCisKKyNkZWZpbmUgUkFURV9SUlNSX0NDS19PTkxZXzFNCQkJMHhGRkZGMQorCisjZGVmaW5lIFRTRlJTVAkJCQkJQklUKDApCisjZGVmaW5lIERJU19HQ0xLCQkJCUJJVCgxKQorI2RlZmluZSBQQURfU0VMCQkJCQlCSVQoMikKKyNkZWZpbmUgUFdSX1NUCQkJCQlCSVQoNikKKyNkZWZpbmUgUFdSQklUX09XX0VOCQkJCUJJVCg3KQorI2RlZmluZSBBQ1JDCQkJCQlCSVQoOCkKKyNkZWZpbmUgQ0ZFTkRGT1JNCQkJCUJJVCg5KQorI2RlZmluZSBJQ1YJCQkJCUJJVCgxMCkKKworI2RlZmluZSBBQVAJCQkJCUJJVCgwKQorI2RlZmluZSBBUE0JCQkJCUJJVCgxKQorI2RlZmluZSBBTQkJCQkJQklUKDIpCisjZGVmaW5lIEFCCQkJCQlCSVQoMykKKyNkZWZpbmUgQUREMwkJCQkJQklUKDQpCisjZGVmaW5lIEFQV1JNR1QJCQkJCUJJVCg1KQorI2RlZmluZSBDQlNTSUQJCQkJCUJJVCg2KQorI2RlZmluZSBDQlNTSURfREFUQQkJCQlCSVQoNikKKyNkZWZpbmUgQ0JTU0lEX0JDTgkJCQlCSVQoNykKKyNkZWZpbmUgQUNSQzMyCQkJCQlCSVQoOCkKKyNkZWZpbmUgQUlDVgkJCQkJQklUKDkpCisjZGVmaW5lIEFERgkJCQkJQklUKDExKQorI2RlZmluZSBBQ0YJCQkJCUJJVCgxMikKKyNkZWZpbmUgQU1GCQkJCQlCSVQoMTMpCisjZGVmaW5lIEhUQ19MT0NfQ1RSTAkJCQlCSVQoMTQpCisjZGVmaW5lIFVDX0RBVEFfRU4JCQkJQklUKDE2KQorI2RlZmluZSBCTV9EQVRBX0VOCQkJCUJJVCgxNykKKyNkZWZpbmUgTUZCRU4JCQkJCUJJVCgyMikKKyNkZWZpbmUgTFNJR0VOCQkJCQlCSVQoMjMpCisjZGVmaW5lIEVuTUJJRAkJCQkJQklUKDI0KQorI2RlZmluZSBBUFBfQkFTU04JCQkJQklUKDI3KQorI2RlZmluZSBBUFBfUEhZU1RTCQkJCUJJVCgyOCkKKyNkZWZpbmUgQVBQX0lDVgkJCQkJQklUKDI5KQorI2RlZmluZSBBUFBfTUlDCQkJCQlCSVQoMzApCisjZGVmaW5lIEFQUF9GQ1MJCQkJCUJJVCgzMSkKKworI2RlZmluZSBfTUlOX1NQQUNFKHgpCQkJCSgoeCkgJiAweDcpCisjZGVmaW5lIF9TSE9SVF9HSV9QQURESU5HKHgpCQkJKCgoeCkgJiAweDFGKSA8PCAzKQorCisjZGVmaW5lIFJYRVJSX1RZUEVfT0ZETV9QUERVCQkJMAorI2RlZmluZSBSWEVSUl9UWVBFX09GRE1fRkFMU0VfQUxBUk0JCTEKKyNkZWZpbmUJUlhFUlJfVFlQRV9PRkRNX01QRFVfT0sJCQkyCisjZGVmaW5lIFJYRVJSX1RZUEVfT0ZETV9NUERVX0ZBSUwJCTMKKyNkZWZpbmUgUlhFUlJfVFlQRV9DQ0tfUFBEVQkJCTQKKyNkZWZpbmUgUlhFUlJfVFlQRV9DQ0tfRkFMU0VfQUxBUk0JCTUKKyNkZWZpbmUgUlhFUlJfVFlQRV9DQ0tfTVBEVV9PSwkJCTYKKyNkZWZpbmUgUlhFUlJfVFlQRV9DQ0tfTVBEVV9GQUlMCQk3CisjZGVmaW5lIFJYRVJSX1RZUEVfSFRfUFBEVQkJCTgKKyNkZWZpbmUgUlhFUlJfVFlQRV9IVF9GQUxTRV9BTEFSTQkJOQorI2RlZmluZSBSWEVSUl9UWVBFX0hUX01QRFVfVE9UQUwJCTEwCisjZGVmaW5lIFJYRVJSX1RZUEVfSFRfTVBEVV9PSwkJCTExCisjZGVmaW5lIFJYRVJSX1RZUEVfSFRfTVBEVV9GQUlMCQkJMTIKKyNkZWZpbmUgUlhFUlJfVFlQRV9SWF9GVUxMX0RST1AJCQkxNQorCisjZGVmaW5lIFJYRVJSX0NPVU5URVJfTUFTSwkJCTB4RkZGRkYKKyNkZWZpbmUgUlhFUlJfUlBUX1JTVAkJCQlCSVQoMjcpCisjZGVmaW5lIF9SWEVSUl9SUFRfU0VMKHR5cGUpCQkJKCh0eXBlKSA8PCAyOCkKKworI2RlZmluZQlTQ1JfVHhVc2VESwkJCQlCSVQoMCkKKyNkZWZpbmUJU0NSX1J4VXNlREsJCQkJQklUKDEpCisjZGVmaW5lCVNDUl9UeEVuY0VuYWJsZQkJCQlCSVQoMikKKyNkZWZpbmUJU0NSX1J4RGVjRW5hYmxlCQkJCUJJVCgzKQorI2RlZmluZQlTQ1JfU0tCeUEyCQkJCUJJVCg0KQorI2RlZmluZQlTQ1JfTm9TS01DCQkJCUJJVCg1KQorI2RlZmluZSBTQ1JfVFhCQ1VTRURLCQkJCUJJVCg2KQorI2RlZmluZSBTQ1JfUlhCQ1VTRURLCQkJCUJJVCg3KQorCisjZGVmaW5lIFVTQl9JU19ISUdIX1NQRUVECQkJMAorI2RlZmluZSBVU0JfSVNfRlVMTF9TUEVFRAkJCTEKKyNkZWZpbmUgVVNCX1NQRUVEX01BU0sJCQkJQklUKDUpCisKKyNkZWZpbmUgVVNCX05PUk1BTF9TSUVfRVBfTUFTSwkJCTB4RgorI2RlZmluZSBVU0JfTk9STUFMX1NJRV9FUF9TSElGVAkJCTQKKworI2RlZmluZSBVU0JfVEVTVF9FUF9NQVNLCQkJMHgzMAorI2RlZmluZSBVU0JfVEVTVF9FUF9TSElGVAkJCTQKKworI2RlZmluZSBVU0JfQUdHX0VOCQkJCUJJVCgzKQorCisjZGVmaW5lIE1BQ19BRERSX0xFTgkJCQk2CisjZGVmaW5lIExBU1RfRU5UUllfT0ZfVFhfUEtUX0JVRkZFUgkJMjU1CisKKyNkZWZpbmUgUE9MTElOR19MTFRfVEhSRVNIT0xECQkJMjAKKyNkZWZpbmUgUE9MTElOR19SRUFEWV9USU1FT1VUX0NPVU5UCQkxMDAwCisKKyNkZWZpbmUJTUFYX01TU19ERU5TSVRZXzJUCQkJMHgxMworI2RlZmluZQlNQVhfTVNTX0RFTlNJVFlfMVQJCQkweDBBCisKKyNkZWZpbmUgRVBST01fQ01EX09QRVJBVElOR19NT0RFX01BU0sJKCgxPDw3KXwoMTw8NikpCisjZGVmaW5lIEVQUk9NX0NNRF9DT05GSUcJCQkweDMKKyNkZWZpbmUgRVBST01fQ01EX0xPQUQJCQkJMQorCisjZGVmaW5lCUhXU0VUX01BWF9TSVpFXzkyUwkJSFdTRVRfTUFYX1NJWkUKKworI2RlZmluZQlIQUxfODE5MkNfSFdfR1BJT19XUFNfQklUCQlCSVQoMikKKworI2RlZmluZQlSUE1BQ19SRVNFVAkJCQkweDEwMAorI2RlZmluZQlSUE1BQ19UWFNUQVJUCQkJCTB4MTA0CisjZGVmaW5lCVJQTUFDX1RYTEVHQUNZU0lHCQkJMHgxMDgKKyNkZWZpbmUJUlBNQUNfVFhIVFNJRzEJCQkJMHgxMGMKKyNkZWZpbmUJUlBNQUNfVFhIVFNJRzIJCQkJMHgxMTAKKyNkZWZpbmUJUlBNQUNfUEhZREVCVUcJCQkJMHgxMTQKKyNkZWZpbmUJUlBNQUNfVFhQQUNLRVROVU0JCQkweDExOAorI2RlZmluZQlSUE1BQ19UWElETEUJCQkJMHgxMWMKKyNkZWZpbmUJUlBNQUNfVFhNQUNIRUFERVIwCQkJMHgxMjAKKyNkZWZpbmUJUlBNQUNfVFhNQUNIRUFERVIxCQkJMHgxMjQKKyNkZWZpbmUJUlBNQUNfVFhNQUNIRUFERVIyCQkJMHgxMjgKKyNkZWZpbmUJUlBNQUNfVFhNQUNIRUFERVIzCQkJMHgxMmMKKyNkZWZpbmUJUlBNQUNfVFhNQUNIRUFERVI0CQkJMHgxMzAKKyNkZWZpbmUJUlBNQUNfVFhNQUNIRUFERVI1CQkJMHgxMzQKKyNkZWZpbmUJUlBNQUNfVFhEQURBVFlQRQkJCTB4MTM4CisjZGVmaW5lCVJQTUFDX1RYUkFORE9NU0VFRAkJCTB4MTNjCisjZGVmaW5lCVJQTUFDX0NDS1BMQ1BQUkVBTUJMRQkJCTB4MTQwCisjZGVmaW5lCVJQTUFDX0NDS1BMQ1BIRUFERVIJCQkweDE0NAorI2RlZmluZQlSUE1BQ19DQ0tDUkMxNgkJCQkweDE0OAorI2RlZmluZQlSUE1BQ19PRkRNUlhDUkMzMk9LCQkJMHgxNzAKKyNkZWZpbmUJUlBNQUNfT0ZETVJYQ1JDMzJFcgkJCTB4MTc0CisjZGVmaW5lCVJQTUFDX09GRE1SWFBBUklUWUVSCQkJMHgxNzgKKyNkZWZpbmUJUlBNQUNfT0ZETVJYQ1JDOEVSCQkJMHgxN2MKKyNkZWZpbmUJUlBNQUNfQ0NLQ1JYUkMxNkVSCQkJMHgxODAKKyNkZWZpbmUJUlBNQUNfQ0NLQ1JYUkMzMkVSCQkJMHgxODQKKyNkZWZpbmUJUlBNQUNfQ0NLQ1JYUkMzMk9LCQkJMHgxODgKKyNkZWZpbmUJUlBNQUNfVFhTVEFUVVMJCQkJMHgxOGMKKworI2RlZmluZQlSRlBHQTBfUkZNT0QJCQkJMHg4MDAKKworI2RlZmluZQlSRlBHQTBfVFhJTkZPCQkJCTB4ODA0CisjZGVmaW5lCVJGUEdBMF9QU0RGVU5DVElPTgkJCTB4ODA4CisKKyNkZWZpbmUJUkZQR0EwX1RYR0FJTlNUQUdFCQkJMHg4MGMKKworI2RlZmluZQlSRlBHQTBfUkZUSU1JTkcxCQkJMHg4MTAKKyNkZWZpbmUJUkZQR0EwX1JGVElNSU5HMgkJCTB4ODE0CisKKyNkZWZpbmUJUkZQR0EwX1hBX0hTU0lQQVJBTUVURVIxCQkweDgyMAorI2RlZmluZQlSRlBHQTBfWEFfSFNTSVBBUkFNRVRFUjIJCTB4ODI0CisjZGVmaW5lCVJGUEdBMF9YQl9IU1NJUEFSQU1FVEVSMQkJMHg4MjgKKyNkZWZpbmUJUkZQR0EwX1hCX0hTU0lQQVJBTUVURVIyCQkweDgyYworCisjZGVmaW5lCVJGUEdBMF9YQV9MU1NJUEFSQU1FVEVSCQkJMHg4NDAKKyNkZWZpbmUJUkZQR0EwX1hCX0xTU0lQQVJBTUVURVIJCQkweDg0NAorCisjZGVmaW5lCVJGUEdBMF9SRldBS0VVUFBBUkFNRVRFUgkJMHg4NTAKKyNkZWZpbmUJUkZQR0EwX1JGU0xFRVBVUFBBUkFNRVRFUgkJMHg4NTQKKworI2RlZmluZQlSRlBHQTBfWEFCX1NXSVRDSENPTlRST0wJCTB4ODU4CisjZGVmaW5lCVJGUEdBMF9YQ0RfU1dJVENIQ09OVFJPTAkJMHg4NWMKKworI2RlZmluZQlSRlBHQTBfWEFfUkZJTlRFUkZBQ0VPRQkJCTB4ODYwCisjZGVmaW5lCVJGUEdBMF9YQl9SRklOVEVSRkFDRU9FCQkJMHg4NjQKKworI2RlZmluZQlSRlBHQTBfWEFCX1JGSU5URVJGQUNFU1cJCTB4ODcwCisjZGVmaW5lCVJGUEdBMF9YQ0RfUkZJTlRFUkZBQ0VTVwkJMHg4NzQKKworI2RlZmluZQlyRlBHQTBfWEFCX1JGUEFSQU1FVEVSCQkJMHg4NzgKKyNkZWZpbmUJckZQR0EwX1hDRF9SRlBBUkFNRVRFUgkJCTB4ODdjCisKKyNkZWZpbmUJUkZQR0EwX0FOQUxPR1BBUkFNRVRFUjEJCQkweDg4MAorI2RlZmluZQlSRlBHQTBfQU5BTE9HUEFSQU1FVEVSMgkJCTB4ODg0CisjZGVmaW5lCVJGUEdBMF9BTkFMT0dQQVJBTUVURVIzCQkJMHg4ODgKKyNkZWZpbmUJUkZQR0EwX0FOQUxPR1BBUkFNRVRFUjQJCQkweDg4YworCisjZGVmaW5lCVJGUEdBMF9YQV9MU1NJUkVBREJBQ0sJCQkweDhhMAorI2RlZmluZQlSRlBHQTBfWEJfTFNTSVJFQURCQUNLCQkJMHg4YTQKKyNkZWZpbmUJUkZQR0EwX1hDX0xTU0lSRUFEQkFDSwkJCTB4OGE4CisjZGVmaW5lCVJGUEdBMF9YRF9MU1NJUkVBREJBQ0sJCQkweDhhYworCisjZGVmaW5lCVJGUEdBMF9QU0RSRVBPUlQJCQkweDhiNAorI2RlZmluZQlUUkFOU0NFSVZFQV9IU1BJX1JFQURCQUNLCQkweDhiOAorI2RlZmluZQlUUkFOU0NFSVZFQl9IU1BJX1JFQURCQUNLCQkweDhiYworI2RlZmluZQlSRlBHQTBfWEFCX1JGSU5URVJGQUNFUkIJCTB4OGUwCisjZGVmaW5lCVJGUEdBMF9YQ0RfUkZJTlRFUkZBQ0VSQgkJMHg4ZTQKKworI2RlZmluZQlSRlBHQTFfUkZNT0QJCQkJMHg5MDAKKworI2RlZmluZQlSRlBHQTFfVFhCTE9DSwkJCQkweDkwNAorI2RlZmluZQlSRlBHQTFfREVCVUdTRUxFQ1QJCQkweDkwOAorI2RlZmluZQlSRlBHQTFfVFhJTkZPCQkJCTB4OTBjCisKKyNkZWZpbmUJUkNDSzBfU1lTVEVNCQkJCTB4YTAwCisKKyNkZWZpbmUJUkNDSzBfQUZFU0VUVElORwkJCTB4YTA0CisjZGVmaW5lCVJDQ0swX0NDQQkJCQkweGEwOAorCisjZGVmaW5lCVJDQ0swX1JYQUdDMQkJCQkweGEwYworI2RlZmluZQlSQ0NLMF9SWEFHQzIJCQkJMHhhMTAKKworI2RlZmluZQlSQ0NLMF9SWEhQCQkJCTB4YTE0CisKKyNkZWZpbmUJUkNDSzBfRFNQUEFSQU1FVEVSMQkJCTB4YTE4CisjZGVmaW5lCVJDQ0swX0RTUFBBUkFNRVRFUjIJCQkweGExYworCisjZGVmaW5lCVJDQ0swX1RYRklMVEVSMQkJCQkweGEyMAorI2RlZmluZQlSQ0NLMF9UWEZJTFRFUjIJCQkJMHhhMjQKKyNkZWZpbmUJUkNDSzBfREVCVUdQT1JUCQkJCTB4YTI4CisjZGVmaW5lCVJDQ0swX0ZBTFNFQUxBUk1SRVBPUlQJCQkweGEyYworI2RlZmluZQlSQ0NLMF9UUlNTSVJFUE9SVAkJCTB4YTUwCisjZGVmaW5lCVJDQ0swX1JYUkVQT1JUCQkJCTB4YTU0CisjZGVmaW5lCVJDQ0swX0ZBQ09VTlRFUkxPV0VSCQkJMHhhNWMKKyNkZWZpbmUJUkNDSzBfRkFDT1VOVEVSVVBQRVIJCQkweGE1OAorCisjZGVmaW5lCVJPRkRNMF9MU1RGCQkJCTB4YzAwCisKKyNkZWZpbmUJUk9GRE0wX1RSWFBBVEhFTkFCTEUJCQkweGMwNAorI2RlZmluZQlST0ZETTBfVFJNVVhQQVIJCQkJMHhjMDgKKyNkZWZpbmUJUk9GRE0wX1RSU1dJU09MQVRJT04JCQkweGMwYworCisjZGVmaW5lCVJPRkRNMF9YQVJYQUZFCQkJCTB4YzEwCisjZGVmaW5lCVJPRkRNMF9YQVJYSVFJTUJBTEFOQ0UJCQkweGMxNAorI2RlZmluZQlST0ZETTBfWEJSWEFGRQkJCQkweGMxOAorI2RlZmluZQlST0ZETTBfWEJSWElRSU1CQUxBTkNFCQkJMHhjMWMKKyNkZWZpbmUJUk9GRE0wX1hDUlhBRkUJCQkJMHhjMjAKKyNkZWZpbmUJUk9GRE0wX1hDUlhJUUlNQkFOTEFOQ0UJCQkweGMyNAorI2RlZmluZQlST0ZETTBfWERSWEFGRQkJCQkweGMyOAorI2RlZmluZQlST0ZETTBfWERSWElRSU1CQUxBTkNFCQkJMHhjMmMKKworI2RlZmluZQlST0ZETTBfUlhERVRFQ1RPUjEJCQkweGMzMAorI2RlZmluZQlST0ZETTBfUlhERVRFQ1RPUjIJCQkweGMzNAorI2RlZmluZQlST0ZETTBfUlhERVRFQ1RPUjMJCQkweGMzOAorI2RlZmluZQlST0ZETTBfUlhERVRFQ1RPUjQJCQkweGMzYworCisjZGVmaW5lCVJPRkRNMF9SWERTUAkJCQkweGM0MAorI2RlZmluZQlST0ZETTBfQ0ZPQU5EREFHQwkJCTB4YzQ0CisjZGVmaW5lCVJPRkRNMF9DQ0FEUk9QVEhSRVNIT0xECQkJMHhjNDgKKyNkZWZpbmUJUk9GRE0wX0VDQ0FUSFJFU0hPTEQJCQkweGM0YworCisjZGVmaW5lCVJPRkRNMF9YQUFHQ0NPUkUxCQkJMHhjNTAKKyNkZWZpbmUJUk9GRE0wX1hBQUdDQ09SRTIJCQkweGM1NAorI2RlZmluZQlST0ZETTBfWEJBR0NDT1JFMQkJCTB4YzU4CisjZGVmaW5lCVJPRkRNMF9YQkFHQ0NPUkUyCQkJMHhjNWMKKyNkZWZpbmUJUk9GRE0wX1hDQUdDQ09SRTEJCQkweGM2MAorI2RlZmluZQlST0ZETTBfWENBR0NDT1JFMgkJCTB4YzY0CisjZGVmaW5lCVJPRkRNMF9YREFHQ0NPUkUxCQkJMHhjNjgKKyNkZWZpbmUJUk9GRE0wX1hEQUdDQ09SRTIJCQkweGM2YworCisjZGVmaW5lCVJPRkRNMF9BR0NQQVJBTUVURVIxCQkJMHhjNzAKKyNkZWZpbmUJUk9GRE0wX0FHQ1BBUkFNRVRFUjIJCQkweGM3NAorI2RlZmluZQlST0ZETTBfQUdDUlNTSVRBQkxFCQkJMHhjNzgKKyNkZWZpbmUJUk9GRE0wX0hUU1RGQUdDCQkJCTB4YzdjCisKKyNkZWZpbmUJUk9GRE0wX1hBVFhJUUlNQkFMQU5DRQkJCTB4YzgwCisjZGVmaW5lCVJPRkRNMF9YQVRYQUZFCQkJCTB4Yzg0CisjZGVmaW5lCVJPRkRNMF9YQlRYSVFJTUJBTEFOQ0UJCQkweGM4OAorI2RlZmluZQlST0ZETTBfWEJUWEFGRQkJCQkweGM4YworI2RlZmluZQlST0ZETTBfWENUWElRSU1CQUxBTkNFCQkJMHhjOTAKKyNkZWZpbmUJUk9GRE0wX1hDVFhBRkUJCQkJMHhjOTQKKyNkZWZpbmUJUk9GRE0wX1hEVFhJUUlNQkFMQU5DRQkJCTB4Yzk4CisjZGVmaW5lCVJPRkRNMF9YRFRYQUZFCQkJCTB4YzljCisKKyNkZWZpbmUgUk9GRE0wX1JYSVFFWFRBTlRBCQkJMHhjYTAKKworI2RlZmluZQlST0ZETTBfUlhIUFBBUkFNRVRFUgkJCTB4Y2UwCisjZGVmaW5lCVJPRkRNMF9UWFBTRVVET05PSVNFV0dUCQkJMHhjZTQKKyNkZWZpbmUJUk9GRE0wX0ZSQU1FU1lOQwkJCTB4Y2YwCisjZGVmaW5lCVJPRkRNMF9ERlNSRVBPUlQJCQkweGNmNAorI2RlZmluZQlST0ZETTBfVFhDT0VGRjEJCQkJMHhjYTQKKyNkZWZpbmUJUk9GRE0wX1RYQ09FRkYyCQkJCTB4Y2E4CisjZGVmaW5lCVJPRkRNMF9UWENPRUZGMwkJCQkweGNhYworI2RlZmluZQlST0ZETTBfVFhDT0VGRjQJCQkJMHhjYjAKKyNkZWZpbmUJUk9GRE0wX1RYQ09FRkY1CQkJCTB4Y2I0CisjZGVmaW5lCVJPRkRNMF9UWENPRUZGNgkJCQkweGNiOAorCisjZGVmaW5lCVJPRkRNMV9MU1RGCQkJCTB4ZDAwCisjZGVmaW5lCVJPRkRNMV9UUlhQQVRIRU5BQkxFCQkJMHhkMDQKKworI2RlZmluZQlST0ZETTFfQ0YwCQkJCTB4ZDA4CisjZGVmaW5lCVJPRkRNMV9DU0kxCQkJCTB4ZDEwCisjZGVmaW5lCVJPRkRNMV9TQkQJCQkJMHhkMTQKKyNkZWZpbmUJUk9GRE0xX0NTSTIJCQkJMHhkMTgKKyNkZWZpbmUJUk9GRE0xX0NGT1RSQUNLSU5HCQkJMHhkMmMKKyNkZWZpbmUJUk9GRE0xX1RSWE1FU0FVUkUxCQkJMHhkMzQKKyNkZWZpbmUJUk9GRE0xX0lOVEZERVQJCQkJMHhkM2MKKyNkZWZpbmUJUk9GRE0xX1BTRVVET05PSVNFU1RBVEVBQgkJMHhkNTAKKyNkZWZpbmUJUk9GRE0xX1BTRVVET05PSVNFU1RBVEVDRAkJMHhkNTQKKyNkZWZpbmUJUk9GRE0xX1JYUFNFVURPTk9JU0VXR1QJCQkweGQ1OAorCisjZGVmaW5lCVJPRkRNX1BIWUNPVU5URVIxCQkJMHhkYTAKKyNkZWZpbmUJUk9GRE1fUEhZQ09VTlRFUjIJCQkweGRhNAorI2RlZmluZQlST0ZETV9QSFlDT1VOVEVSMwkJCTB4ZGE4CisKKyNkZWZpbmUJUk9GRE1fU0hPUlRDRk9BQgkJCTB4ZGFjCisjZGVmaW5lCVJPRkRNX1NIT1JUQ0ZPQ0QJCQkweGRiMAorI2RlZmluZQlST0ZETV9MT05HQ0ZPQUIJCQkJMHhkYjQKKyNkZWZpbmUJUk9GRE1fTE9OR0NGT0NECQkJCTB4ZGI4CisjZGVmaW5lCVJPRkRNX1RBSUxDRjBBQgkJCQkweGRiYworI2RlZmluZQlST0ZETV9UQUlMQ0YwQ0QJCQkJMHhkYzAKKyNkZWZpbmUJUk9GRE1fUFdNRUFTVVJFMQkJCTB4ZGM0CisjZGVmaW5lCVJPRkRNX1BXTUVBU1VSRTIJCQkweGRjOAorI2RlZmluZQlST0ZETV9CV1JFUE9SVAkJCQkweGRjYworI2RlZmluZQlST0ZETV9BR0NSRVBPUlQJCQkJMHhkZDAKKyNkZWZpbmUJUk9GRE1fUlhTTlIJCQkJMHhkZDQKKyNkZWZpbmUJUk9GRE1fUlhFVk1DU0kJCQkJMHhkZDgKKyNkZWZpbmUJUk9GRE1fU0lHUkVQT1JUCQkJCTB4ZGRjCisKKyNkZWZpbmUJUlRYQUdDX0FfUkFURTE4XzA2CQkJMHhlMDAKKyNkZWZpbmUJUlRYQUdDX0FfUkFURTU0XzI0CQkJMHhlMDQKKyNkZWZpbmUJUlRYQUdDX0FfQ0NLMV9NQ1MzMgkJCTB4ZTA4CisjZGVmaW5lCVJUWEFHQ19BX01DUzAzX01DUzAwCQkJMHhlMTAKKyNkZWZpbmUJUlRYQUdDX0FfTUNTMDdfTUNTMDQJCQkweGUxNAorI2RlZmluZQlSVFhBR0NfQV9NQ1MxMV9NQ1MwOAkJCTB4ZTE4CisjZGVmaW5lCVJUWEFHQ19BX01DUzE1X01DUzEyCQkJMHhlMWMKKworI2RlZmluZQlSVFhBR0NfQl9SQVRFMThfMDYJCQkweDgzMAorI2RlZmluZQlSVFhBR0NfQl9SQVRFNTRfMjQJCQkweDgzNAorI2RlZmluZQlSVFhBR0NfQl9DQ0sxXzU1X01DUzMyCQkJMHg4MzgKKyNkZWZpbmUJUlRYQUdDX0JfTUNTMDNfTUNTMDAJCQkweDgzYworI2RlZmluZQlSVFhBR0NfQl9NQ1MwN19NQ1MwNAkJCTB4ODQ4CisjZGVmaW5lCVJUWEFHQ19CX01DUzExX01DUzA4CQkJMHg4NGMKKyNkZWZpbmUJUlRYQUdDX0JfTUNTMTVfTUNTMTIJCQkweDg2OAorI2RlZmluZQlSVFhBR0NfQl9DQ0sxMV9BX0NDSzJfMTEJCTB4ODZjCisKKyNkZWZpbmUJUlpFQlJBMV9IU1NJRU5BQkxFCQkJMHgwCisjZGVmaW5lCVJaRUJSQTFfVFJYRU5BQkxFMQkJCTB4MQorI2RlZmluZQlSWkVCUkExX1RSWEVOQUJMRTIJCQkweDIKKyNkZWZpbmUJUlpFQlJBMV9BR0MJCQkJMHg0CisjZGVmaW5lCVJaRUJSQTFfQ0hBUkdFUFVNUAkJCTB4NQorI2RlZmluZQlSWkVCUkExX0NIQU5ORUwJCQkJMHg3CisKKyNkZWZpbmUJUlpFQlJBMV9UWEdBSU4JCQkJMHg4CisjZGVmaW5lCVJaRUJSQTFfVFhMUEYJCQkJMHg5CisjZGVmaW5lCVJaRUJSQTFfUlhMUEYJCQkJMHhiCisjZGVmaW5lCVJaRUJSQTFfUlhIUEZDT1JORVIJCQkweGMKKworI2RlZmluZQlSR0xPQkFMQ1RSTAkJCQkwCisjZGVmaW5lCVJSVEw4MjU2X1RYTFBGCQkJCTE5CisjZGVmaW5lCVJSVEw4MjU2X1JYTFBGCQkJCTExCisjZGVmaW5lCVJSVEw4MjU4X1RYTFBGCQkJCTB4MTEKKyNkZWZpbmUJUlJUTDgyNThfUlhMUEYJCQkJMHgxMworI2RlZmluZQlSUlRMODI1OF9SU1NJTFBGCQkJMHhhCisKKyNkZWZpbmUJUkZfQUMJCQkJCTB4MDAKKworI2RlZmluZQlSRl9JUUFESl9HMQkJCQkweDAxCisjZGVmaW5lCVJGX0lRQURKX0cyCQkJCTB4MDIKKyNkZWZpbmUJUkZfUE9XX1RSU1cJCQkJMHgwNQorCisjZGVmaW5lCVJGX0dBSU5fUlgJCQkJMHgwNgorI2RlZmluZQlSRl9HQUlOX1RYCQkJCTB4MDcKKworI2RlZmluZQlSRl9UWE1fSURBQwkJCQkweDA4CisjZGVmaW5lCVJGX0JTX0lRR0VOCQkJCTB4MEYKKworI2RlZmluZQlSRl9NT0RFMQkJCQkweDEwCisjZGVmaW5lCVJGX01PREUyCQkJCTB4MTEKKworI2RlZmluZQlSRl9SWF9BR0NfSFAJCQkJMHgxMgorI2RlZmluZQlSRl9UWF9BR0MJCQkJMHgxMworI2RlZmluZQlSRl9CSUFTCQkJCQkweDE0CisjZGVmaW5lCVJGX0lQQQkJCQkJMHgxNQorI2RlZmluZQlSRl9QT1dfQUJJTElUWQkJCQkweDE3CisjZGVmaW5lCVJGX01PREVfQUcJCQkJMHgxOAorI2RlZmluZQlSUkZDSEFOTkVMCQkJCTB4MTgKKyNkZWZpbmUJUkZfQ0hOTEJXCQkJCTB4MTgKKyNkZWZpbmUJUkZfVE9QCQkJCQkweDE5CisKKyNkZWZpbmUJUkZfUlhfRzEJCQkJMHgxQQorI2RlZmluZQlSRl9SWF9HMgkJCQkweDFCCisKKyNkZWZpbmUJUkZfUlhfQkIyCQkJCTB4MUMKKyNkZWZpbmUJUkZfUlhfQkIxCQkJCTB4MUQKKworI2RlZmluZQlSRl9SQ0sxCQkJCQkweDFFCisjZGVmaW5lCVJGX1JDSzIJCQkJCTB4MUYKKworI2RlZmluZQlSRl9UWF9HMQkJCQkweDIwCisjZGVmaW5lCVJGX1RYX0cyCQkJCTB4MjEKKyNkZWZpbmUJUkZfVFhfRzMJCQkJMHgyMgorCisjZGVmaW5lCVJGX1RYX0JCMQkJCQkweDIzCisjZGVmaW5lCVJGX1RfTUVURVIJCQkJMHgyNAorCisjZGVmaW5lCVJGX1NZTl9HMQkJCQkweDI1CisjZGVmaW5lCVJGX1NZTl9HMgkJCQkweDI2CisjZGVmaW5lCVJGX1NZTl9HMwkJCQkweDI3CisjZGVmaW5lCVJGX1NZTl9HNAkJCQkweDI4CisjZGVmaW5lCVJGX1NZTl9HNQkJCQkweDI5CisjZGVmaW5lCVJGX1NZTl9HNgkJCQkweDJBCisjZGVmaW5lCVJGX1NZTl9HNwkJCQkweDJCCisjZGVmaW5lCVJGX1NZTl9HOAkJCQkweDJDCisKKyNkZWZpbmUJUkZfUkNLX09TCQkJCTB4MzAKKyNkZWZpbmUJUkZfVFhQQV9HMQkJCQkweDMxCisjZGVmaW5lCVJGX1RYUEFfRzIJCQkJMHgzMgorI2RlZmluZQlSRl9UWFBBX0czCQkJCTB4MzMKKworI2RlZmluZQlCQkJSRVNFVEIJCQkJMHgxMDAKKyNkZWZpbmUJQkdMT0JBTFJFU0VUQgkJCQkweDIwMAorI2RlZmluZQlCT0ZETVRYU1RBUlQJCQkJMHg0CisjZGVmaW5lCUJDQ0tUWFNUQVJUCQkJCTB4OAorI2RlZmluZQlCQ1JDMzJERUJVRwkJCQkweDEwMAorI2RlZmluZQlCUE1BQ0xPT1BCQUNLCQkJCTB4MTAKKyNkZWZpbmUJQlRYTFNJRwkJCQkJMHhmZmZmZmYKKyNkZWZpbmUJQk9GRE1UWFJBVEUJCQkJMHhmCisjZGVmaW5lCUJPRkRNVFhSRVNFUlZFRAkJCQkweDEwCisjZGVmaW5lCUJPRkRNVFhMRU5HVEgJCQkJMHgxZmZlMAorI2RlZmluZQlCT0ZETVRYUEFSSVRZCQkJCTB4MjAwMDAKKyNkZWZpbmUJQlRYSFRTSUcxCQkJCTB4ZmZmZmZmCisjZGVmaW5lCUJUWEhUTUNTUkFURQkJCQkweDdmCisjZGVmaW5lCUJUWEhUQlcJCQkJCTB4ODAKKyNkZWZpbmUJQlRYSFRMRU5HVEgJCQkJMHhmZmZmMDAKKyNkZWZpbmUJQlRYSFRTSUcyCQkJCTB4ZmZmZmZmCisjZGVmaW5lCUJUWEhUU01PT1RISU5HCQkJCTB4MQorI2RlZmluZQlCVFhIVFNPVU5ESU5HCQkJCTB4MgorI2RlZmluZQlCVFhIVFJFU0VSVkVECQkJCTB4NAorI2RlZmluZQlCVFhIVEFHR1JFQVRJT04JCQkJMHg4CisjZGVmaW5lCUJUWEhUU1RCQwkJCQkweDMwCisjZGVmaW5lCUJUWEhUQURWQU5DRUNPRElORwkJCTB4NDAKKyNkZWZpbmUJQlRYSFRTSE9SVEdJCQkJCTB4ODAKKyNkZWZpbmUJQlRYSFROVU1CRVJIVF9MVAlGCQkweDMwMAorI2RlZmluZQlCVFhIVENSQzgJCQkJMHgzZmMwMAorI2RlZmluZQlCQ09VTlRFUlJFU0VUCQkJCTB4MTAwMDAKKyNkZWZpbmUJQk5VTU9GT0ZETVRYCQkJCTB4ZmZmZgorI2RlZmluZQlCTlVNT0ZDQ0tUWAkJCQkweGZmZmYwMDAwCisjZGVmaW5lCUJUWElETEVJTlRFUlZBTAkJCQkweGZmZmYKKyNkZWZpbmUJQk9GRE1TRVJWSUNFCQkJCTB4ZmZmZjAwMDAKKyNkZWZpbmUJQlRYTUFDSEVBREVSCQkJCTB4ZmZmZmZmZmYKKyNkZWZpbmUJQlRYREFUQUlOSVQJCQkJMHhmZgorI2RlZmluZQlCVFhIVE1PREUJCQkJMHgxMDAKKyNkZWZpbmUJQlRYREFUQVRZUEUJCQkJMHgzMDAwMAorI2RlZmluZQlCVFhSQU5ET01TRUVECQkJCTB4ZmZmZmZmZmYKKyNkZWZpbmUJQkNDS1RYUFJFQU1CTEUJCQkJMHgxCisjZGVmaW5lCUJDQ0tUWFNGRAkJCQkweGZmZmYwMDAwCisjZGVmaW5lCUJDQ0tUWFNJRwkJCQkweGZmCisjZGVmaW5lCUJDQ0tUWFNFUlZJQ0UJCQkJMHhmZjAwCisjZGVmaW5lCUJDQ0tMRU5HVEhFWFQJCQkJMHg4MDAwCisjZGVmaW5lCUJDQ0tUWExFTkdIVAkJCQkweGZmZmYwMDAwCisjZGVmaW5lCUJDQ0tUWENSQzE2CQkJCTB4ZmZmZgorI2RlZmluZQlCQ0NLVFhTVEFUVVMJCQkJMHgxCisjZGVmaW5lCUJPRkRNVFhTVEFUVVMJCQkJMHgyCisjZGVmaW5lIElTX0JCX1JFR19PRkZTRVRfOTJTKF9PZmZzZXQpCQlcCisJKChfT2Zmc2V0ID49IDB4ODAwKSAmJiAoX09mZnNldCA8PSAweGZmZikpCisKKyNkZWZpbmUJQlJGTU9ECQkJCQkweDEKKyNkZWZpbmUJQkpBUEFOTU9ERQkJCQkweDIKKyNkZWZpbmUJQkNDS1RYU0MJCQkJMHgzMAorI2RlZmluZQlCQ0NLRU4JCQkJCTB4MTAwMDAwMAorI2RlZmluZQlCT0ZETUVOCQkJCQkweDIwMDAwMDAKKworI2RlZmluZQlCT0ZETVJYQURDUEhBU0UJCQkJMHgxMDAwMAorI2RlZmluZQlCT0ZETVRYREFDUEhBU0UJCQkJMHg0MDAwMAorI2RlZmluZQlCWEFUWEFHQwkJCQkweDNmCisKKyNkZWZpbmUJQlhCVFhBR0MJCQkJMHhmMDAKKyNkZWZpbmUJQlhDVFhBR0MJCQkJMHhmMDAwCisjZGVmaW5lCUJYRFRYQUdDCQkJCTB4ZjAwMDAKKworI2RlZmluZQlCUEFTVEFSVAkJCQkweGYwMDAwMDAwCisjZGVmaW5lCUJUUlNUQVJUCQkJCTB4MDBmMDAwMDAKKyNkZWZpbmUJQlJGU1RBUlQJCQkJMHgwMDAwZjAwMAorI2RlZmluZQlCQkJTVEFSVAkJCQkweDAwMDAwMGYwCisjZGVmaW5lCUJCQkNDS1NUQVJUCQkJCTB4MDAwMDAwMGYKKyNkZWZpbmUJQlBBRU5ECQkJCQkweGYKKyNkZWZpbmUJQlRSRU5ECQkJCQkweDBmMDAwMDAwCisjZGVmaW5lCUJSRkVORAkJCQkJMHgwMDBmMDAwMAorI2RlZmluZQlCQ0NBTUFTSwkJCQkweDAwMDAwMGYwCisjZGVmaW5lCUJSMlJDQ0FNQVNLCQkJCTB4MDAwMDBmMDAKKyNkZWZpbmUJQkhTU0lfUjJUREVMQVkJCQkJMHhmODAwMDAwMAorI2RlZmluZQlCSFNTSV9UMlJERUxBWQkJCQkweGY4MDAwMAorI2RlZmluZQlCQ09OVFhIU1NJCQkJCTB4NDAwCisjZGVmaW5lCUJJR0ZST01DQ0sJCQkJMHgyMDAKKyNkZWZpbmUJQkFHQ0FERFJFU1MJCQkJMHgzZgorI2RlZmluZQlCUlhIUFRYCQkJCQkweDcwMDAKKyNkZWZpbmUJQlJYSFAyUlgJCQkJMHgzODAwMAorI2RlZmluZQlCUlhIUENDS0lOSQkJCQkweGMwMDAwCisjZGVmaW5lCUJBR0NUWENPREUJCQkJMHhjMDAwMDAKKyNkZWZpbmUJQkFHQ1JYQ09ERQkJCQkweDMwMDAwMAorCisjZGVmaW5lCUIzV0lSRURBVEFMRU5HVEgJCQkweDgwMAorI2RlZmluZQlCM1dJUkVBRERSRUFBTEVOR1RICQkJMHg0MDAKKworI2RlZmluZQlCM1dJUkVSRlBPV0VSRE9XTgkJCTB4MQorI2RlZmluZQlCNUdQQVBFUE9MQVJJVFkJCQkJMHg0MDAwMDAwMAorI2RlZmluZQlCMkdQQVBFUE9MQVJJVFkJCQkJMHg4MDAwMDAwMAorI2RlZmluZQlCUkZTV19UWERFRkFVTFRBTlQJCQkweDMKKyNkZWZpbmUJQlJGU1dfVFhPUFRJT05BTlQJCQkweDMwCisjZGVmaW5lCUJSRlNXX1JYREVGQVVMVEFOVAkJCTB4MzAwCisjZGVmaW5lCUJSRlNXX1JYT1BUSU9OQU5UCQkJMHgzMDAwCisjZGVmaW5lCUJSRlNJXzNXSVJFREFUQQkJCQkweDEKKyNkZWZpbmUJQlJGU0lfM1dJUkVDTE9DSwkJCTB4MgorI2RlZmluZQlCUkZTSV8zV0lSRUxPQUQJCQkJMHg0CisjZGVmaW5lCUJSRlNJXzNXSVJFUlcJCQkJMHg4CisjZGVmaW5lCUJSRlNJXzNXSVJFCQkJCTB4ZgorCisjZGVmaW5lCUJSRlNJX1JGRU5WCQkJCTB4MTAKKworI2RlZmluZQlCUkZTSV9UUlNXCQkJCTB4MjAKKyNkZWZpbmUJQlJGU0lfVFJTV0IJCQkJMHg0MAorI2RlZmluZQlCUkZTSV9BTlRTVwkJCQkweDEwMAorI2RlZmluZQlCUkZTSV9BTlRTV0IJCQkJMHgyMDAKKyNkZWZpbmUJQlJGU0lfUEFQRQkJCQkweDQwMAorI2RlZmluZQlCUkZTSV9QQVBFNUcJCQkJMHg4MDAKKyNkZWZpbmUJQkJBTkRTRUxFQ1QJCQkJMHgxCisjZGVmaW5lCUJIVFNJRzJfR0kJCQkJMHg4MAorI2RlZmluZQlCSFRTSUcyX1NNT09USElORwkJCTB4MDEKKyNkZWZpbmUJQkhUU0lHMl9TT1VORElORwkJCTB4MDIKKyNkZWZpbmUJQkhUU0lHMl9BR0dSRUFUT04JCQkweDA4CisjZGVmaW5lCUJIVFNJRzJfU1RCQwkJCQkweDMwCisjZGVmaW5lCUJIVFNJRzJfQURWQ09ESU5HCQkJMHg0MAorI2RlZmluZQlCSFRTSUcyX05VTU9GSFRMVEYJCQkweDMwMAorI2RlZmluZQlCSFRTSUcyX0NSQzgJCQkJMHgzZmMKKyNkZWZpbmUJQkhUU0lHMV9NQ1MJCQkJMHg3ZgorI2RlZmluZQlCSFRTSUcxX0JBTkRXSURUSAkJCTB4ODAKKyNkZWZpbmUJQkhUU0lHMV9IVExFTkdUSAkJCTB4ZmZmZgorI2RlZmluZQlCTFNJR19SQVRFCQkJCTB4ZgorI2RlZmluZQlCTFNJR19SRVNFUlZFRAkJCQkweDEwCisjZGVmaW5lCUJMU0lHX0xFTkdUSAkJCQkweDFmZmZlCisjZGVmaW5lCUJMU0lHX1BBUklUWQkJCQkweDIwCisjZGVmaW5lCUJDQ0tSWFBIQVNFCQkJCTB4NAorCisjZGVmaW5lCUJMU1NJUkVBREFERFJFU1MJCQkweDdmODAwMDAwCisjZGVmaW5lCUJMU1NJUkVBREVER0UJCQkJMHg4MDAwMDAwMAorCisjZGVmaW5lCUJMU1NJUkVBREJBQ0tEQVRBCQkJMHhmZmZmZgorCisjZGVmaW5lCUJMU1NJUkVBRE9LRkxBRwkJCQkweDEwMDAKKyNkZWZpbmUJQkNDS1NBTVBMRVJBVEUJCQkJMHg4CisjZGVmaW5lCUJSRUdVTEFUT1IwU1RBTkRCWQkJCTB4MQorI2RlZmluZQlCUkVHVUxBVE9SUExMU1RBTkRCWQkJCTB4MgorI2RlZmluZQlCUkVHVUxBVE9SMVNUQU5EQlkJCQkweDQKKyNkZWZpbmUJQlBMTFBPV0VSVVAJCQkJMHg4CisjZGVmaW5lCUJEUExMUE9XRVJVUAkJCQkweDEwCisjZGVmaW5lCUJEQTEwUE9XRVJVUAkJCQkweDIwCisjZGVmaW5lCUJBRDdQT1dFUlVQCQkJCTB4MjAwCisjZGVmaW5lCUJEQTZQT1dFUlVQCQkJCTB4MjAwMAorI2RlZmluZQlCWFRBTFBPV0VSVVAJCQkJMHg0MDAwCisjZGVmaW5lCUI0ME1EQ0xLUE9XRVJVUAkJCQkweDgwMDAKKyNkZWZpbmUJQkRBNkRFQlVHTU9ERQkJCQkweDIwMDAwCisjZGVmaW5lCUJEQTZTV0lORwkJCQkweDM4MDAwMAorCisjZGVmaW5lCUJBRENMS1BIQVNFCQkJCTB4NDAwMDAwMAorI2RlZmluZQlCODBNQ0xLREVMQVkJCQkJMHgxODAwMDAwMAorI2RlZmluZQlCQUZFV0FUQ0hET0dFTkFCTEUJCQkweDIwMDAwMDAwCisKKyNkZWZpbmUJQlhUQUxDQVAwMQkJCQkweGMwMDAwMDAwCisjZGVmaW5lCUJYVEFMQ0FQMjMJCQkJMHgzCisjZGVmaW5lCUJYVEFMQ0FQOTJYCQkJCTB4MGYwMDAwMDAKKyNkZWZpbmUgQlhUQUxDQVAJCQkJMHgwZjAwMDAwMAorCisjZGVmaW5lCUJJTlRESUZDTEtFTkFCTEUJCQkweDQwMAorI2RlZmluZQlCRVhUU0lHQ0xLRU5BQkxFCQkJMHg4MDAKKyNkZWZpbmUJQkJBTkRHQVBfTUJJQVNfUE9XRVJVUAkJCTB4MTAwMDAKKyNkZWZpbmUJQkFEMTFTSF9HQUlOCQkJCTB4YzAwMDAKKyNkZWZpbmUJQkFEMTFOUFVUX1JBTkdFCQkJCTB4NzAwMDAwCisjZGVmaW5lCUJBRDExMFBfQ1VSUkVOVAkJCQkweDM4MDAwMDAKKyNkZWZpbmUJQkxQQVRIX0xPT1BCQUNLCQkJCTB4NDAwMDAwMAorI2RlZmluZQlCUVBBVEhfTE9PUEJBQ0sJCQkJMHg4MDAwMDAwCisjZGVmaW5lCUJBRkVfTE9PUEJBQ0sJCQkJMHgxMDAwMDAwMAorI2RlZmluZQlCREExMF9TV0lORwkJCQkweDdlMAorI2RlZmluZQlCREExMF9SRVZFUlNFCQkJCTB4ODAwCisjZGVmaW5lCUJEQV9DTEtfU09VUkNFCQkJCTB4MTAwMAorI2RlZmluZQlCREE3SU5QVVRfUkFOR0UJCQkJMHg2MDAwCisjZGVmaW5lCUJEQTdfR0FJTgkJCQkweDM4MDAwCisjZGVmaW5lCUJEQTdPVVRQVVRfQ01fTU9ERQkJCTB4NDAwMDAKKyNkZWZpbmUJQkRBN0lOUFVUX0NNX01PREUJCQkweDM4MDAwMAorI2RlZmluZQlCREE3Q1VSUkVOVAkJCQkweGMwMDAwMAorI2RlZmluZQlCUkVHVUxBVE9SX0FESlVTVAkJCTB4NzAwMDAwMAorI2RlZmluZQlCQUQxMVBPV0VSVVBfQVRUWAkJCTB4MQorI2RlZmluZQlCREExMFBTX0FUVFgJCQkJMHgxMAorI2RlZmluZQlCQUQxMVBPV0VSVVBfQVRSWAkJCTB4MTAwCisjZGVmaW5lCUJEQTEwUFNfQVRSWAkJCQkweDEwMDAKKyNkZWZpbmUJQkNDS1JYX0FHQ19GT1JNQVQJCQkweDIwMAorI2RlZmluZQlCUFNERkZUX1NBTVBMRV9QT0lOVAkJCTB4YzAwMAorI2RlZmluZQlCUFNEX0FWRVJBR0VfTlVNCQkJMHgzMDAwCisjZGVmaW5lCUJJUVBBVEhfQ09OVFJPTAkJCQkweGMwMAorI2RlZmluZQlCUFNEX0ZSRVEJCQkJMHgzZmYKKyNkZWZpbmUJQlBTRF9BTlRFTk5BX1BBVEgJCQkweDMwCisjZGVmaW5lCUJQU0RfSVFfU1dJVENICQkJCTB4NDAKKyNkZWZpbmUJQlBTRF9SWF9UUklHR0VSCQkJCTB4NDAwMDAwCisjZGVmaW5lCUJQU0RfVFhfVFJJR0dFUgkJCQkweDgwMDAwMDAwCisjZGVmaW5lCUJQU0RfU0lORV9UT05FX1NDQUxFCQkJMHg3ZjAwMDAwMAorI2RlZmluZQlCUFNEX1JFUE9SVAkJCQkweGZmZmYKKworI2RlZmluZQlCT0ZETV9UWFNDCQkJCTB4MzAwMDAwMDAKKyNkZWZpbmUJQkNDS19UWE9OCQkJCTB4MQorI2RlZmluZQlCT0ZETV9UWE9OCQkJCTB4MgorI2RlZmluZQlCREVCVUdfUEFHRQkJCQkweGZmZgorI2RlZmluZQlCREVCVUdfSVRFTQkJCQkweGZmCisjZGVmaW5lCUJBTlRMCQkJCQkweDEwCisjZGVmaW5lCUJBTlRfTk9OSFQJCQkJMHgxMDAKKyNkZWZpbmUJQkFOVF9IVDEJCQkJMHgxMDAwCisjZGVmaW5lCUJBTlRfSFQyCQkJCTB4MTAwMDAKKyNkZWZpbmUJQkFOVF9IVDFTMQkJCQkweDEwMDAwMAorI2RlZmluZQlCQU5UX05PTkhUUzEJCQkJMHgxMDAwMDAwCisKKyNkZWZpbmUJQkNDS19CQk1PREUJCQkJMHgzCisjZGVmaW5lCUJDQ0tfVFhQT1dFUlNBVklORwkJCTB4ODAKKyNkZWZpbmUJQkNDS19SWFBPV0VSU0FWSU5HCQkJMHg0MAorCisjZGVmaW5lCUJDQ0tfU0lERUJBTkQJCQkJMHgxMAorCisjZGVmaW5lCUJDQ0tfU0NSQU1CTEUJCQkJMHg4CisjZGVmaW5lCUJDQ0tfQU5URElWRVJTSVRZCQkJMHg4MDAwCisjZGVmaW5lCUJDQ0tfQ0FSUklFUl9SRUNPVkVSWQkJCTB4NDAwMAorI2RlZmluZQlCQ0NLX1RYUkFURQkJCQkweDMwMDAKKyNkZWZpbmUJQkNDS19EQ0NBTkNFTAkJCQkweDA4MDAKKyNkZWZpbmUJQkNDS19JU0lDQU5DRUwJCQkJMHgwNDAwCisjZGVmaW5lCUJDQ0tfTUFUQ0hfRklMVEVSCQkJMHgwMjAwCisjZGVmaW5lCUJDQ0tfRVFVQUxJWkVSCQkJCTB4MDEwMAorI2RlZmluZQlCQ0NLX1BSRUFNQkxFX0RFVEVDVAkJCTB4ODAwMDAwCisjZGVmaW5lCUJDQ0tfRkFTVF9GQUxTRUNDQQkJCTB4NDAwMDAwCisjZGVmaW5lCUJDQ0tfQ0hfRVNUU1RBUlQJCQkweDMwMDAwMAorI2RlZmluZQlCQ0NLX0NDQV9DT1VOVAkJCQkweDA4MDAwMAorI2RlZmluZQlCQ0NLX0NTX0xJTQkJCQkweDA3MDAwMAorI2RlZmluZQlCQ0NLX0JJU1RfTU9ERQkJCQkweDgwMDAwMDAwCisjZGVmaW5lCUJDQ0tfQ0NBTUFTSwkJCQkweDQwMDAwMDAwCisjZGVmaW5lCUJDQ0tfVFhfREFDX1BIQVNFCQkJMHg0CisjZGVmaW5lCUJDQ0tfUlhfQURDX1BIQVNFCQkJMHgyMDAwMDAwMAorI2RlZmluZQlCQ0NLUl9DUF9NT0RFCQkJCTB4MDEwMAorI2RlZmluZQlCQ0NLX1RYRENfT0ZGU0VUCQkJMHhmMAorI2RlZmluZQlCQ0NLX1JYRENfT0ZGU0VUCQkJMHhmCisjZGVmaW5lCUJDQ0tfQ0NBX01PREUJCQkJMHhjMDAwCisjZGVmaW5lCUJDQ0tfRkFMU0VDU19MSU0JCQkweDNmMDAKKyNkZWZpbmUJQkNDS19DU19SQVRJTwkJCQkweGMwMDAwMAorI2RlZmluZQlCQ0NLX0NPUkdCSVRfU0VMCQkJMHgzMDAwMDAKKyNkZWZpbmUJQkNDS19QRF9MSU0JCQkJMHgwZjAwMDAKKyNkZWZpbmUJQkNDS19ORVdDQ0EJCQkJMHg4MDAwMDAwMAorI2RlZmluZQlCQ0NLX1JYSFBfT0ZfSUcJCQkJMHg4MDAwCisjZGVmaW5lCUJDQ0tfUlhJRwkJCQkweDdmMDAKKyNkZWZpbmUJQkNDS19MTkFfUE9MQVJJVFkJCQkweDgwMDAwMAorI2RlZmluZQlCQ0NLX1JYMVNUX0JBSU4JCQkJMHg3ZjAwMDAKKyNkZWZpbmUJQkNDS19SRl9FWFRFTkQJCQkJMHgyMDAwMDAwMAorI2RlZmluZQlCQ0NLX1JYQUdDX1NBVExFVkVMCQkJMHgxZjAwMDAwMAorI2RlZmluZQlCQ0NLX1JYQUdDX1NBVENPVU5UCQkJMHhlMAorI2RlZmluZQliQ0NLUnhSRlNldHRsZQkJCQkweDFmCisjZGVmaW5lCUJDQ0tfRklYRURfUlhBR0MJCQkweDgwMDAKKyNkZWZpbmUJQkNDS19BTlRFTk5BX1BPTEFSSVRZCQkJMHgyMDAwCisjZGVmaW5lCUJDQ0tfVFhGSUxURVJfVFlQRQkJCTB4MGMwMAorI2RlZmluZQlCQ0NLX1JYQUdDX1JFUE9SVFRZUEUJCQkweDAzMDAKKyNkZWZpbmUJQkNDS19SWERBR0NfRU4JCQkJMHg4MDAwMDAwMAorI2RlZmluZQlCQ0NLX1JYREFHQ19QRVJJT0QJCQkweDIwMDAwMDAwCisjZGVmaW5lCUJDQ0tfUlhEQUdDX1NBVExFVkVMCQkJMHgxZjAwMDAwMAorI2RlZmluZQlCQ0NLX1RJTUlOR19SRUNPVkVSWQkJCTB4ODAwMDAwCisjZGVmaW5lCUJDQ0tfVFhDMAkJCQkweDNmMDAwMAorI2RlZmluZQlCQ0NLX1RYQzEJCQkJMHgzZjAwMDAwMAorI2RlZmluZQlCQ0NLX1RYQzIJCQkJMHgzZgorI2RlZmluZQlCQ0NLX1RYQzMJCQkJMHgzZjAwCisjZGVmaW5lCUJDQ0tfVFhDNAkJCQkweDNmMDAwMAorI2RlZmluZQlCQ0NLX1RYQzUJCQkJMHgzZjAwMDAwMAorI2RlZmluZQlCQ0NLX1RYQzYJCQkJMHgzZgorI2RlZmluZQlCQ0NLX1RYQzcJCQkJMHgzZjAwCisjZGVmaW5lCUJDQ0tfREVCVUdQT1JUCQkJCTB4ZmYwMDAwCisjZGVmaW5lCUJDQ0tfREFDX0RFQlVHCQkJCTB4MGYwMDAwMDAKKyNkZWZpbmUJQkNDS19GQUxTRUFMQVJNX0VOQUJMRQkJCTB4ODAwMAorI2RlZmluZQlCQ0NLX0ZBTFNFQUxBUk1fUkVBRAkJCTB4NDAwMAorI2RlZmluZQlCQ0NLX1RSU1NJCQkJCTB4N2YKKyNkZWZpbmUJQkNDS19SWEFHQ19SRVBPUlQJCQkweGZlCisjZGVmaW5lCUJDQ0tfUlhSRVBPUlRfQU5UU0VMCQkJMHg4MDAwMDAwMAorI2RlZmluZQlCQ0NLX1JYUkVQT1JUX01GT0ZGCQkJMHg0MDAwMDAwMAorI2RlZmluZQlCQ0NLX1JYUkVQT1JUX1NRTE9TUwkJCTB4MjAwMDAwMDAKKyNkZWZpbmUJQkNDS19SWFJFUE9SVF9QS1RMT1NTCQkJMHgxMDAwMDAwMAorI2RlZmluZQlCQ0NLX1JYUkVQT1JUX0xPQ0tFREJJVAkJCTB4MDgwMDAwMDAKKyNkZWZpbmUJQkNDS19SWFJFUE9SVF9SQVRFRVJST1IJCQkweDA0MDAwMDAwCisjZGVmaW5lCUJDQ0tfUlhSRVBPUlRfUlhSQVRFCQkJMHgwMzAwMDAwMAorI2RlZmluZQlCQ0NLX1JYRkFfQ09VTlRFUl9MT1dFUgkJCTB4ZmYKKyNkZWZpbmUJQkNDS19SWEZBX0NPVU5URVJfVVBQRVIJCQkweGZmMDAwMDAwCisjZGVmaW5lCUJDQ0tfUlhIUEFHQ19TVEFSVAkJCTB4ZTAwMAorI2RlZmluZQlCQ0NLX1JYSFBBR0NfRklOQUwJCQkweDFjMDAKKyNkZWZpbmUJQkNDS19SWEZBTFNFQUxBUk1fRU5BQkxFCQkweDgwMDAKKyNkZWZpbmUJQkNDS19GQUNPVU5URVJfRlJFRVpFCQkJMHg0MDAwCisjZGVmaW5lCUJDQ0tfVFhQQVRIX1NFTAkJCQkweDEwMDAwMDAwCisjZGVmaW5lCUJDQ0tfREVGQVVMVF9SWFBBVEgJCQkweGMwMDAwMDAKKyNkZWZpbmUJQkNDS19PUFRJT05fUlhQQVRICQkJMHgzMDAwMDAwCisKKyNkZWZpbmUJQk5VTV9PRlNURgkJCQkweDMKKyNkZWZpbmUJQlNISUZUX0wJCQkJMHhjMAorI2RlZmluZQlCR0lfVEgJCQkJCTB4YworI2RlZmluZQlCUlhQQVRIX0EJCQkJMHgxCisjZGVmaW5lCUJSWFBBVEhfQgkJCQkweDIKKyNkZWZpbmUJQlJYUEFUSF9DCQkJCTB4NAorI2RlZmluZQlCUlhQQVRIX0QJCQkJMHg4CisjZGVmaW5lCUJUWFBBVEhfQQkJCQkweDEKKyNkZWZpbmUJQlRYUEFUSF9CCQkJCTB4MgorI2RlZmluZQlCVFhQQVRIX0MJCQkJMHg0CisjZGVmaW5lCUJUWFBBVEhfRAkJCQkweDgKKyNkZWZpbmUJQlRSU1NJX0ZSRVEJCQkJMHgyMDAKKyNkZWZpbmUJQkFEQ19CQUNLT0ZGCQkJCTB4MzAwMAorI2RlZmluZQlCREZJUl9CQUNLT0ZGCQkJCTB4YzAwMAorI2RlZmluZQlCVFJTU0lfTEFUQ0hfUEhBU0UJCQkweDEwMDAwCisjZGVmaW5lCUJSWF9MRENfT0ZGU0VUCQkJCTB4ZmYKKyNkZWZpbmUJQlJYX1FEQ19PRkZTRVQJCQkJMHhmZjAwCisjZGVmaW5lCUJSWF9ERklSX01PREUJCQkJMHgxODAwMDAwCisjZGVmaW5lCUJSWF9EQ05GX1RZUEUJCQkJMHhlMDAwMDAwCisjZGVmaW5lCUJSWElRSU1CX0EJCQkJMHgzZmYKKyNkZWZpbmUJQlJYSVFJTUJfQgkJCQkweGZjMDAKKyNkZWZpbmUJQlJYSVFJTUJfQwkJCQkweDNmMDAwMAorI2RlZmluZQlCUlhJUUlNQl9ECQkJCTB4ZmZjMDAwMDAKKyNkZWZpbmUJQkRDX0RDX05PVENICQkJCTB4NjAwMDAKKyNkZWZpbmUJQlJYTkJfTk9UQ0gJCQkJMHgxZjAwMDAwMAorI2RlZmluZQlCUERfVEgJCQkJCTB4ZgorI2RlZmluZQlCUERfVEhfT1BUMgkJCQkweGMwMDAKKyNkZWZpbmUJQlBXRURfVEgJCQkJMHg3MDAKKyNkZWZpbmUJQklGTUZfV0lOX0wJCQkJMHg4MDAKKyNkZWZpbmUJQlBEX09QVElPTgkJCQkweDEwMDAKKyNkZWZpbmUJQk1GX1dJTl9MCQkJCTB4ZTAwMAorI2RlZmluZQlCQldfU0VBUkNIX0wJCQkJMHgzMDAwMAorI2RlZmluZQlCV0lOX0VOSF9MCQkJCTB4YzAwMDAKKyNkZWZpbmUJQkJXX1RICQkJCQkweDcwMDAwMAorI2RlZmluZQlCRURfVEgyCQkJCQkweDM4MDAwMDAKKyNkZWZpbmUJQkJXX09QVElPTgkJCQkweDQwMDAwMDAKKyNkZWZpbmUJQlJBRElPX1RICQkJCTB4MTgwMDAwMDAKKyNkZWZpbmUJQldJTkRPV19MCQkJCTB4ZTAwMDAwMDAKKyNkZWZpbmUJQlNCRF9PUFRJT04JCQkJMHgxCisjZGVmaW5lCUJGUkFNRV9USAkJCQkweDFjCisjZGVmaW5lCUJGU19PUFRJT04JCQkJMHg2MAorI2RlZmluZQlCRENfU0xPUEVfQ0hFQ0sJCQkJMHg4MAorI2RlZmluZQlCRkdVQVJEX0NPVU5URVJfRENfTAkJCTB4ZTAwCisjZGVmaW5lCUJGUkFNRV9XRUlHSFRfU0hPUlQJCQkweDcwMDAKKyNkZWZpbmUJQlNVQl9UVU5FCQkJCTB4ZTAwMDAwCisjZGVmaW5lCUJGUkFNRV9EQ19MRU5HVEgJCQkweGUwMDAwMDAKKyNkZWZpbmUJQlNCRF9TVEFSVF9PRkZTRVQJCQkweDMwMDAwMDAwCisjZGVmaW5lCUJGUkFNRV9USF8yCQkJCTB4NworI2RlZmluZQlCRlJBTUVfR0kyX1RICQkJCTB4MzgKKyNkZWZpbmUJQkdJMl9TWU5DX0VOCQkJCTB4NDAKKyNkZWZpbmUJQlNBUkNIX1NIT1JUX0VBUkxZCQkJMHgzMDAKKyNkZWZpbmUJQlNBUkNIX1NIT1JUX0xBVEUJCQkweGMwMAorI2RlZmluZQlCU0FSQ0hfR0kyX0xBVEUJCQkJMHg3MDAwMAorI2RlZmluZQlCQ0ZPQU5UU1VNCQkJCTB4MQorI2RlZmluZQlCQ0ZPQUNDCQkJCQkweDIKKyNkZWZpbmUJQkNGT1NUQVJUT0ZGU0VUCQkJCTB4YworI2RlZmluZQlCQ0ZPTE9PUEJBQ0sJCQkJMHg3MAorI2RlZmluZQlCQ0ZPU1VNV0VJR0hUCQkJCTB4ODAKKyNkZWZpbmUJQkRBR0NFTkFCTEUJCQkJMHgxMDAwMAorI2RlZmluZQlCVFhJUUlNQl9BCQkJCTB4M2ZmCisjZGVmaW5lCUJUWElRSU1CX2IJCQkJMHhmYzAwCisjZGVmaW5lCUJUWElRSU1CX0MJCQkJMHgzZjAwMDAKKyNkZWZpbmUJQlRYSVFJTUJfRAkJCQkweGZmYzAwMDAwCisjZGVmaW5lCUJUWElEQ09GRlNFVAkJCQkweGZmCisjZGVmaW5lCUJUWElRRENPRkZTRVQJCQkJMHhmZjAwCisjZGVmaW5lCUJUWERGSVJNT0RFCQkJCTB4MTAwMDAKKyNkZWZpbmUJQlRYUEVTVURPX05PSVNFT04JCQkweDQwMDAwMDAKKyNkZWZpbmUJQlRYUEVTVURPX05PSVNFX0EJCQkweGZmCisjZGVmaW5lCUJUWFBFU1VET19OT0lTRV9CCQkJMHhmZjAwCisjZGVmaW5lCUJUWFBFU1VET19OT0lTRV9DCQkJMHhmZjAwMDAKKyNkZWZpbmUJQlRYUEVTVURPX05PSVNFX0QJCQkweGZmMDAwMDAwCisjZGVmaW5lCUJDQ0FfRFJPUE9QVElPTgkJCQkweDIwMDAwCisjZGVmaW5lCUJDQ0FfRFJPUFRIUkVTCQkJCTB4ZmZmMDAwMDAKKyNkZWZpbmUJQkVEQ0NBX0gJCQkJMHhmCisjZGVmaW5lCUJFRENDQV9MCQkJCTB4ZjAKKyNkZWZpbmUJQkxBTUJEQV9FRAkJCQkweDMwMAorI2RlZmluZQlCUlhfSU5JVElBTEdBSU4JCQkJMHg3ZgorI2RlZmluZQlCUlhfQU5URElWX0VOCQkJCTB4ODAKKyNkZWZpbmUJQlJYX0FHQ19BRERSRVNTX0ZPUl9MTkEJCQkweDdmMDAKKyNkZWZpbmUJQlJYX0hJR0hQT1dFUl9GTE9XCQkJMHg4MDAwCisjZGVmaW5lCUJSWF9BR0NfRlJFRVpFX1RIUkVTCQkJMHhjMDAwMAorI2RlZmluZQlCUlhfRlJFRVpFU1RFUF9BR0MxCQkJMHgzMDAwMDAKKyNkZWZpbmUJQlJYX0ZSRUVaRVNURVBfQUdDMgkJCTB4YzAwMDAwCisjZGVmaW5lCUJSWF9GUkVFWkVTVEVQX0FHQzMJCQkweDMwMDAwMDAKKyNkZWZpbmUJQlJYX0ZSRUVaRVNURVBfQUdDMAkJCTB4YzAwMDAwMAorI2RlZmluZQlCUlhSU1NJX0NNUF9FTgkJCQkweDEwMDAwMDAwCisjZGVmaW5lCUJSWFFVSUNLX0FHQ0VOCQkJCTB4MjAwMDAwMDAKKyNkZWZpbmUJQlJYQUdDX0ZSRUVaRV9USFJFU19NT0RFCQkweDQwMDAwMDAwCisjZGVmaW5lCUJSWF9PVkVSRkxPV19DSEVDS1RZUEUJCQkweDgwMDAwMDAwCisjZGVmaW5lCUJSWF9BR0NTSElGVAkJCQkweDdmCisjZGVmaW5lCUJUUlNXX1RSSV9PTkxZCQkJCTB4ODAKKyNkZWZpbmUJQlBPV0VSX1RIUkVTCQkJCTB4MzAwCisjZGVmaW5lCUJSWEFHQ19FTgkJCQkweDEKKyNkZWZpbmUJQlJYQUdDX1RPR0VUSEVSX0VOCQkJMHgyCisjZGVmaW5lCUJSWEFHQ19NSU4JCQkJMHg0CisjZGVmaW5lCUJSWEhQX0lOSQkJCQkweDcKKyNkZWZpbmUJQlJYSFBfVFJMTkEJCQkJMHg3MAorI2RlZmluZQlCUlhIUF9SU1NJCQkJCTB4NzAwCisjZGVmaW5lCUJSWEhQX0JCUDEJCQkJMHg3MDAwCisjZGVmaW5lCUJSWEhQX0JCUDIJCQkJMHg3MDAwMAorI2RlZmluZQlCUlhIUF9CQlAzCQkJCTB4NzAwMDAwCisjZGVmaW5lCUJSU1NJX0gJCQkJCTB4N2YwMDAwCisjZGVmaW5lCUJSU1NJX0dFTgkJCQkweDdmMDAwMDAwCisjZGVmaW5lCUJSWFNFVFRMRV9UUlNXCQkJCTB4NworI2RlZmluZQlCUlhTRVRUTEVfTE5BCQkJCTB4MzgKKyNkZWZpbmUJQlJYU0VUVExFX1JTU0kJCQkJMHgxYzAKKyNkZWZpbmUJQlJYU0VUVExFX0JCUAkJCQkweGUwMAorI2RlZmluZQlCUlhTRVRUTEVfUlhIUAkJCQkweDcwMDAKKyNkZWZpbmUJQlJYU0VUVExFX0FOVFNXX1JTU0kJCQkweDM4MDAwCisjZGVmaW5lCUJSWFNFVFRMRV9BTlRTVwkJCQkweGMwMDAwCisjZGVmaW5lCUJSWFBST0NFU1NfVElNRV9EQUdDCQkJMHgzMDAwMDAKKyNkZWZpbmUJQlJYU0VUVExFX0hTU0kJCQkJMHg0MDAwMDAKKyNkZWZpbmUJQlJYUFJPQ0VTU19USU1FX0JCUFBXCQkJMHg4MDAwMDAKKyNkZWZpbmUJQlJYQU5URU5OQV9QT1dFUl9TSElGVAkJCTB4MzAwMDAwMAorI2RlZmluZQlCUlNTSV9UQUJMRV9TRUxFQ1QJCQkweGMwMDAwMDAKKyNkZWZpbmUJQlJYSFBfRklOQUwJCQkJMHg3MDAwMDAwCisjZGVmaW5lCUJSWEhQU0VUVExFX0JCUAkJCQkweDcKKyNkZWZpbmUJQlJYSFRTRVRUTEVfSFNTSQkJCTB4OAorI2RlZmluZQlCUlhIVFNFVFRMRV9SWEhQCQkJMHg3MAorI2RlZmluZQlCUlhIVFNFVFRMRV9CQlBQVwkJCTB4ODAKKyNkZWZpbmUJQlJYSFRTRVRUTEVfSURMRQkJCTB4MzAwCisjZGVmaW5lCUJSWEhUU0VUVExFX1JFU0VSVkVECQkJMHgxYzAwCisjZGVmaW5lCUJSWEhUX1JYSFBfRU4JCQkJMHg4MDAwCisjZGVmaW5lCUJSWEFHQ19GUkVFWkVfVEhSRVMJCQkweDMwMDAwCisjZGVmaW5lCUJSWEFHQ19UT0dFVEhFUkVOCQkJMHg0MDAwMAorI2RlZmluZQlCUlhIVEFHQ19NSU4JCQkJMHg4MDAwMAorI2RlZmluZQlCUlhIVEFHQ19FTgkJCQkweDEwMDAwMAorI2RlZmluZQlCUlhIVERBR0NfRU4JCQkJMHgyMDAwMDAKKyNkZWZpbmUJQlJYSFRfUlhIUF9CQlAJCQkJMHgxYzAwMDAwCisjZGVmaW5lCUJSWEhUX1JYSFBfRklOQUwJCQkweGUwMDAwMDAwCisjZGVmaW5lCUJSWFBXX1JBRElPX1RICQkJCTB4MworI2RlZmluZQlCUlhQV19SQURJT19FTgkJCQkweDQKKyNkZWZpbmUJQlJYTUZfSE9MRAkJCQkweDM4MDAKKyNkZWZpbmUJQlJYUERfREVMQVlfVEgxCQkJCTB4MzgKKyNkZWZpbmUJQlJYUERfREVMQVlfVEgyCQkJCTB4MWMwCisjZGVmaW5lCUJSWFBEX0RDX0NPVU5UX01BWAkJCTB4NjAwCisjZGVmaW5lCUJSWFBEX0RFTEFZX1RICQkJCTB4ODAwMAorI2RlZmluZQlCUlhQUk9DRVNTX0RFTEFZCQkJMHhmMDAwMAorI2RlZmluZQlCUlhTRUFSQ0hSQU5HRV9HSTJfRUFSTFkJCTB4NzAwMDAwCisjZGVmaW5lCUJSWEZSQU1FX0ZVQVJEX0NPVU5URVJfTAkJMHgzODAwMDAwCisjZGVmaW5lCUJSWFNHSV9HVUFSRF9MCQkJCTB4YzAwMDAwMAorI2RlZmluZQlCUlhTR0lfU0VBUkNIX0wJCQkJMHgzMDAwMDAwMAorI2RlZmluZQlCUlhTR0lfVEgJCQkJMHhjMDAwMDAwMAorI2RlZmluZQlCREZTQ05UMAkJCQkweGZmCisjZGVmaW5lCUJERlNDTlQxCQkJCTB4ZmYwMAorI2RlZmluZQlCREZTRkxBRwkJCQkweGYwMDAwCisjZGVmaW5lCUJNRl9XRUlHSFRfU1VNCQkJCTB4MzAwMDAwCisjZGVmaW5lCUJNSU5JRFhfVEgJCQkJMHg3ZjAwMDAwMAorI2RlZmluZQlCREFGT1JNQVQJCQkJMHg0MDAwMAorI2RlZmluZQlCVFhDSF9FTVVfRU5BQkxFCQkJMHgwMTAwMDAwMAorI2RlZmluZQlCVFJTV19JU09MQVRJT05fQQkJCTB4N2YKKyNkZWZpbmUJQlRSU1dfSVNPTEFUSU9OX0IJCQkweDdmMDAKKyNkZWZpbmUJQlRSU1dfSVNPTEFUSU9OX0MJCQkweDdmMDAwMAorI2RlZmluZQlCVFJTV19JU09MQVRJT05fRAkJCTB4N2YwMDAwMDAKKyNkZWZpbmUJQkVYVF9MTkFfR0FJTgkJCQkweDdjMDAKKworI2RlZmluZQlCU1RCQ19FTgkJCQkweDQKKyNkZWZpbmUJQkFOVEVOTkFfTUFQUElORwkJCTB4MTAKKyNkZWZpbmUJQk5TUwkJCQkJMHgyMAorI2RlZmluZQlCQ0ZPX0FOVFNVTV9JRAkJCQkweDIwMAorI2RlZmluZQlCUEhZX0NPVU5URVJfUkVTRVQJCQkweDgwMDAwMDAKKyNkZWZpbmUJQkNGT19SRVBPUlRfR0VUCQkJCTB4NDAwMDAwMAorI2RlZmluZQlCT0ZETV9DT05USU5VRV9UWAkJCTB4MTAwMDAwMDAKKyNkZWZpbmUJQk9GRE1fU0lOR0xFX0NBUlJJRVIJCQkweDIwMDAwMDAwCisjZGVmaW5lCUJPRkRNX1NJTkdMRV9UT05FCQkJMHg0MDAwMDAwMAorI2RlZmluZQlCSFRfREVURUNUCQkJCTB4MTAwCisjZGVmaW5lCUJDRk9FTgkJCQkJMHgxMDAwMAorI2RlZmluZQlCQ0ZPVkFMVUUJCQkJMHhmZmYwMDAwMAorI2RlZmluZQlCU0lHVE9ORV9SRQkJCQkweDNmCisjZGVmaW5lCUJTSUdUT05FX0lNCQkJCTB4N2YwMAorI2RlZmluZQlCQ09VTlRFUl9DQ0EJCQkJMHhmZmZmCisjZGVmaW5lCUJDT1VOVEVSX1BBUklUWUZBSUwJCQkweGZmZmYwMDAwCisjZGVmaW5lCUJDT1VOVEVSX1JBVEVJTExFR0FMCQkJMHhmZmZmCisjZGVmaW5lCUJDT1VOVEVSX0NSQzhGQUlMCQkJMHhmZmZmMDAwMAorI2RlZmluZQlCQ09VTlRFUl9NQ1NOT1NVUFBPUlQJCQkweGZmZmYKKyNkZWZpbmUJQkNPVU5URVJfRkFTVFNZTkMJCQkweGZmZmYKKyNkZWZpbmUJQlNIT1JUQ0ZPCQkJCTB4ZmZmCisjZGVmaW5lCUJTSE9SVENGT1RfTEVOR1RICQkJMTIKKyNkZWZpbmUJQlNIT1JUQ0ZPRl9MRU5HVEgJCQkxMQorI2RlZmluZQlCTE9OR0NGTwkJCQkweDdmZgorI2RlZmluZQlCTE9OR0NGT1RfTEVOR1RICQkJMTEKKyNkZWZpbmUJQkxPTkdDRk9GX0xFTkdUSAkJCTExCisjZGVmaW5lCUJUQUlMQ0ZPCQkJCTB4MWZmZgorI2RlZmluZQlCVEFJTENGT1RfTEVOR1RICQkJMTMKKyNkZWZpbmUJQlRBSUxDRk9GX0xFTkdUSAkJCTEyCisjZGVmaW5lCUJOT0lTRV9FTl9QV0RCCQkJCTB4ZmZmZgorI2RlZmluZQlCQ0NfUE9XRVJfREIJCQkJMHhmZmZmMDAwMAorI2RlZmluZQlCTU9JU0VfUFdEQgkJCQkweGZmZmYKKyNkZWZpbmUJQlBPV0VSTUVBU1RfTEVOR1RICQkJMTAKKyNkZWZpbmUJQlBPV0VSTUVBU0ZfTEVOR1RICQkJMworI2RlZmluZQlCUlhfSFRfQlcJCQkJMHgxCisjZGVmaW5lCUJSWFNDCQkJCQkweDYKKyNkZWZpbmUJQlJYX0hUCQkJCQkweDgKKyNkZWZpbmUJQk5CX0lOVEZfREVUX09OCQkJCTB4MQorI2RlZmluZQlCSU5URl9XSU5fTEVOX0NGRwkJCTB4MzAKKyNkZWZpbmUJQk5CX0lOVEZfVEhfQ0ZHCQkJCTB4MWMwCisjZGVmaW5lCUJSRkdBSU4JCQkJCTB4M2YKKyNkZWZpbmUJQlRBQkxFU0VMCQkJCTB4NDAKKyNkZWZpbmUJQlRSU1cJCQkJCTB4ODAKKyNkZWZpbmUJQlJYU05SX0EJCQkJMHhmZgorI2RlZmluZQlCUlhTTlJfQgkJCQkweGZmMDAKKyNkZWZpbmUJQlJYU05SX0MJCQkJMHhmZjAwMDAKKyNkZWZpbmUJQlJYU05SX0QJCQkJMHhmZjAwMDAwMAorI2RlZmluZQlCU05SX0VWTVRfTEVOR1RICQkJOAorI2RlZmluZQlCU05SX0VWTUZfTEVOR1RICQkJMQorI2RlZmluZQlCQ1NJMVNUCQkJCQkweGZmCisjZGVmaW5lCUJDU0kyTkQJCQkJCTB4ZmYwMAorI2RlZmluZQlCUlhFVk0xU1QJCQkJMHhmZjAwMDAKKyNkZWZpbmUJQlJYRVZNMk5ECQkJCTB4ZmYwMDAwMDAKKyNkZWZpbmUJQlNJR0VWTQkJCQkJMHhmZgorI2RlZmluZQlCUFdEQgkJCQkJMHhmZjAwCisjZGVmaW5lCUJTR0lFTgkJCQkJMHgxMDAwMAorCisjZGVmaW5lCUJTRkFDVE9SX1FNQTEJCQkJMHhmCisjZGVmaW5lCUJTRkFDVE9SX1FNQTIJCQkJMHhmMAorI2RlZmluZQlCU0ZBQ1RPUl9RTUEzCQkJCTB4ZjAwCisjZGVmaW5lCUJTRkFDVE9SX1FNQTQJCQkJMHhmMDAwCisjZGVmaW5lCUJTRkFDVE9SX1FNQTUJCQkJMHhmMDAwMAorI2RlZmluZQlCU0ZBQ1RPUl9RTUE2CQkJCTB4ZjAwMDAKKyNkZWZpbmUJQlNGQUNUT1JfUU1BNwkJCQkweGYwMDAwMAorI2RlZmluZQlCU0ZBQ1RPUl9RTUE4CQkJCTB4ZjAwMDAwMAorI2RlZmluZQlCU0ZBQ1RPUl9RTUE5CQkJCTB4ZjAwMDAwMDAKKyNkZWZpbmUJQkNTSV9TQ0hFTUUJCQkJMHgxMDAwMDAKKworI2RlZmluZQlCTk9JU0VfTFZMX1RPUF9TRVQJCQkweDMKKyNkZWZpbmUJQkNIU01PT1RICQkJCTB4NAorI2RlZmluZQlCQ0hTTU9PVEhfQ0ZHMQkJCQkweDM4CisjZGVmaW5lCUJDSFNNT09USF9DRkcyCQkJCTB4MWMwCisjZGVmaW5lCUJDSFNNT09USF9DRkczCQkJCTB4ZTAwCisjZGVmaW5lCUJDSFNNT09USF9DRkc0CQkJCTB4NzAwMAorI2RlZmluZQlCTVJDTU9ERQkJCQkweDgwMDAwMAorI2RlZmluZQlCVEhFVk1DRkcJCQkJMHg3MDAwMDAwCisKKyNkZWZpbmUJQkxPT1BfRklUX1RZUEUJCQkJMHgxCisjZGVmaW5lCUJVUERfQ0ZPCQkJCTB4NDAKKyNkZWZpbmUJQlVQRF9DRk9fT0ZGREFUQQkJCTB4ODAKKyNkZWZpbmUJQkFEVl9VUERfQ0ZPCQkJCTB4MTAwCisjZGVmaW5lCUJBRFZfVElNRV9DVFJMCQkJCTB4ODAwCisjZGVmaW5lCUJVUERfQ0xLTwkJCQkweDEwMDAKKyNkZWZpbmUJQkZDCQkJCQkweDYwMDAKKyNkZWZpbmUJQlRSQUNLSU5HX01PREUJCQkJMHg4MDAwCisjZGVmaW5lCUJQSENNUF9FTkFCTEUJCQkJMHgxMDAwMAorI2RlZmluZQlCVVBEX0NMS09fTFRGCQkJCTB4MjAwMDAKKyNkZWZpbmUJQkNPTV9DSF9DRk8JCQkJMHg0MDAwMAorI2RlZmluZQlCQ1NJX0VTVElfTU9ERQkJCQkweDgwMDAwCisjZGVmaW5lCUJBRFZfVVBEX0VRWgkJCQkweDEwMDAwMAorI2RlZmluZQlCVUNIQ0ZHCQkJCQkweDcwMDAwMDAKKyNkZWZpbmUJQlVQREVRWgkJCQkJMHg4MDAwMDAwCisKKyNkZWZpbmUJQlJYX1BFU1VET19OT0lTRV9PTgkJCTB4MjAwMDAwMDAKKyNkZWZpbmUJQlJYX1BFU1VET19OT0lTRV9BCQkJMHhmZgorI2RlZmluZQlCUlhfUEVTVURPX05PSVNFX0IJCQkweGZmMDAKKyNkZWZpbmUJQlJYX1BFU1VET19OT0lTRV9DCQkJMHhmZjAwMDAKKyNkZWZpbmUJQlJYX1BFU1VET19OT0lTRV9ECQkJMHhmZjAwMDAwMAorI2RlZmluZQlCUlhfUEVTVURPX05PSVNFU1RBVEVfQQkJCTB4ZmZmZgorI2RlZmluZQlCUlhfUEVTVURPX05PSVNFU1RBVEVfQgkJCTB4ZmZmZjAwMDAKKyNkZWZpbmUJQlJYX1BFU1VET19OT0lTRVNUQVRFX0MJCQkweGZmZmYKKyNkZWZpbmUJQlJYX1BFU1VET19OT0lTRVNUQVRFX0QJCQkweGZmZmYwMDAwCisKKyNkZWZpbmUJQlpFQlJBMV9IU1NJRU5BQkxFCQkJMHg4CisjZGVmaW5lCUJaRUJSQTFfVFJYQ09OVFJPTAkJCTB4YzAwCisjZGVmaW5lCUJaRUJSQTFfVFJYR0FJTlNFVFRJTkcJCQkweDA3ZgorI2RlZmluZQlCWkVCUkExX1JYQ09VTlRFUgkJCTB4YzAwCisjZGVmaW5lCUJaRUJSQTFfVFhDSEFOR0VQVU1QCQkJMHgzOAorI2RlZmluZQlCWkVCUkExX1JYQ0hBTkdFUFVNUAkJCTB4NworI2RlZmluZQlCWkVCUkExX0NIQU5ORUxfTlVNCQkJMHhmODAKKyNkZWZpbmUJQlpFQlJBMV9UWExQRkJXCQkJCTB4NDAwCisjZGVmaW5lCUJaRUJSQTFfUlhMUEZCVwkJCQkweDYwMAorCisjZGVmaW5lCUJSVEw4MjU2UkVHX01PREVfQ1RSTDEJCQkweDEwMAorI2RlZmluZQlCUlRMODI1NlJFR19NT0RFX0NUUkwwCQkJMHg0MAorI2RlZmluZQlCUlRMODI1NlJFR19UWExQRkJXCQkJMHgxOAorI2RlZmluZQlCUlRMODI1NlJFR19SWExQRkJXCQkJMHg2MDAKKworI2RlZmluZQlCUlRMODI1OF9UWExQRkJXCQkJMHhjCisjZGVmaW5lCUJSVEw4MjU4X1JYTFBGQlcJCQkweGMwMAorI2RlZmluZQlCUlRMODI1OF9SU1NJTFBGQlcJCQkweGMwCisKKyNkZWZpbmUJQkJZVEUwCQkJCQkweDEKKyNkZWZpbmUJQkJZVEUxCQkJCQkweDIKKyNkZWZpbmUJQkJZVEUyCQkJCQkweDQKKyNkZWZpbmUJQkJZVEUzCQkJCQkweDgKKyNkZWZpbmUJQldPUkQwCQkJCQkweDMKKyNkZWZpbmUJQldPUkQxCQkJCQkweGMKKyNkZWZpbmUJQldPUkQJCQkJCTB4ZgorCisjZGVmaW5lCU1BU0tCWVRFMAkJCQkweGZmCisjZGVmaW5lCU1BU0tCWVRFMQkJCQkweGZmMDAKKyNkZWZpbmUJTUFTS0JZVEUyCQkJCTB4ZmYwMDAwCisjZGVmaW5lCU1BU0tCWVRFMwkJCQkweGZmMDAwMDAwCisjZGVmaW5lCU1BU0tIV09SRAkJCQkweGZmZmYwMDAwCisjZGVmaW5lCU1BU0tMV09SRAkJCQkweDAwMDBmZmZmCisjZGVmaW5lCU1BU0tEV09SRAkJCQkweGZmZmZmZmZmCisjZGVmaW5lCU1BU0sxMkJJVFMJCQkJMHhmZmYKKyNkZWZpbmUJTUFTS0g0QklUUwkJCQkweGYwMDAwMDAwCisjZGVmaW5lIE1BU0tPRkRNX0QJCQkJMHhmZmMwMDAwMAorI2RlZmluZQlNQVNLQ0NLCQkJCQkweDNmM2YzZjNmCisKKyNkZWZpbmUJTUFTSzRCSVRTCQkJCTB4MGYKKyNkZWZpbmUJTUFTSzIwQklUUwkJCQkweGZmZmZmCisjZGVmaW5lIFJGUkVHX09GRlNFVF9NQVNLCQkJMHhmZmZmZgorCisjZGVmaW5lCUJFTkFCTEUJCQkJCTB4MQorI2RlZmluZQlCRElTQUJMRQkJCQkweDAKKworI2RlZmluZQlMRUZUX0FOVEVOTkEJCQkJMHgwCisjZGVmaW5lCVJJR0hUX0FOVEVOTkEJCQkJMHgxCisKKyNkZWZpbmUJVENIRUNLX1RYU1RBVFVTCQkJCTUwMAorI2RlZmluZQlUVVBEQVRFX1JYQ09VTlRFUgkJCTEwMAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmNlL3JmLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS9yZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmZDhlMDQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS9yZi5jCkBAIC0wLDAgKzEsNTIzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDktMjAxMCAgUmVhbHRlayBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLCBVU0EKKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIHdsYW5mYWUgPHdsYW5mYWVAcmVhbHRlay5jb20+CisgKiBSZWFsdGVrIENvcnBvcmF0aW9uLCBOby4gMiwgSW5ub3ZhdGlvbiBSb2FkIElJLCBIc2luY2h1IFNjaWVuY2UgUGFyaywKKyAqIEhzaW5jaHUgMzAwLCBUYWl3YW4uCisgKgorICogTGFycnkgRmluZ2VyIDxMYXJyeS5GaW5nZXJAbHdmaW5nZXIubmV0PgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgIi4uL3dpZmkuaCIKKyNpbmNsdWRlICJyZWcuaCIKKyNpbmNsdWRlICJkZWYuaCIKKyNpbmNsdWRlICJwaHkuaCIKKyNpbmNsdWRlICJyZi5oIgorI2luY2x1ZGUgImRtLmgiCisKK3N0YXRpYyBib29sIF9ydGw5MmNfcGh5X3JmNjA1Ml9jb25maWdfcGFyYWZpbGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworCit2b2lkIHJ0bDkyY19waHlfcmY2MDUyX3NldF9iYW5kd2lkdGgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGJhbmR3aWR0aCkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKKworCXN3aXRjaCAoYmFuZHdpZHRoKSB7CisJY2FzZSBIVF9DSEFOTkVMX1dJRFRIXzIwOgorCQlydGxwaHktPnJmcmVnX2Nobmx2YWxbMF0gPSAoKHJ0bHBoeS0+cmZyZWdfY2hubHZhbFswXSAmCisJCQkJCSAgICAgMHhmZmZmZjNmZikgfCAweDA0MDApOworCQlydGxfc2V0X3JmcmVnKGh3LCBSRjkwX1BBVEhfQSwgUkZfQ0hOTEJXLCBSRlJFR19PRkZTRVRfTUFTSywKKwkJCSAgICAgIHJ0bHBoeS0+cmZyZWdfY2hubHZhbFswXSk7CisJCWJyZWFrOworCWNhc2UgSFRfQ0hBTk5FTF9XSURUSF8yMF80MDoKKwkJcnRscGh5LT5yZnJlZ19jaG5sdmFsWzBdID0gKChydGxwaHktPnJmcmVnX2Nobmx2YWxbMF0gJgorCQkJCQkgICAgIDB4ZmZmZmYzZmYpKTsKKwkJcnRsX3NldF9yZnJlZyhodywgUkY5MF9QQVRIX0EsIFJGX0NITkxCVywgUkZSRUdfT0ZGU0VUX01BU0ssCisJCQkgICAgICBydGxwaHktPnJmcmVnX2Nobmx2YWxbMF0pOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX0VNRVJHLAorCQkJICgidW5rbm93biBiYW5kd2lkdGg6ICUjWFxuIiwgYmFuZHdpZHRoKSk7CisJCWJyZWFrOworCX0KK30KKwordm9pZCBydGw5MmNfcGh5X3JmNjA1Ml9zZXRfY2NrX3R4cG93ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgICAgIHU4ICpwcG93ZXJsZXZlbCkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKKwlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOworCXN0cnVjdCBydGxfZWZ1c2UgKnJ0bGVmdXNlID0gcnRsX2VmdXNlKHJ0bF9wcml2KGh3KSk7CisJdTMyIHR4X2FnY1syXSA9IHswLCAwfSwgdG1wdmFsOworCWJvb2wgdHVyYm9fc2Nhbm9mZiA9IGZhbHNlOworCXU4IGlkeDEsIGlkeDI7CisJdTggKnB0cjsKKworCWlmIChydGxlZnVzZS0+ZWVwcm9tX3JlZ3VsYXRvcnkgIT0gMCkKKwkJdHVyYm9fc2Nhbm9mZiA9IHRydWU7CisKKwlpZiAobWFjLT5hY3Rfc2Nhbm5pbmcgPT0gdHJ1ZSkgeworCQl0eF9hZ2NbUkY5MF9QQVRIX0FdID0gMHgzZjNmM2YzZjsKKwkJdHhfYWdjW1JGOTBfUEFUSF9CXSA9IDB4M2YzZjNmM2Y7CisKKwkJaWYgKHR1cmJvX3NjYW5vZmYpIHsKKwkJCWZvciAoaWR4MSA9IFJGOTBfUEFUSF9BOyBpZHgxIDw9IFJGOTBfUEFUSF9COyBpZHgxKyspIHsKKwkJCQl0eF9hZ2NbaWR4MV0gPSBwcG93ZXJsZXZlbFtpZHgxXSB8CisJCQkJICAgIChwcG93ZXJsZXZlbFtpZHgxXSA8PCA4KSB8CisJCQkJICAgIChwcG93ZXJsZXZlbFtpZHgxXSA8PCAxNikgfAorCQkJCSAgICAocHBvd2VybGV2ZWxbaWR4MV0gPDwgMjQpOworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJZm9yIChpZHgxID0gUkY5MF9QQVRIX0E7IGlkeDEgPD0gUkY5MF9QQVRIX0I7IGlkeDErKykgeworCQkJdHhfYWdjW2lkeDFdID0gcHBvd2VybGV2ZWxbaWR4MV0gfAorCQkJICAgIChwcG93ZXJsZXZlbFtpZHgxXSA8PCA4KSB8CisJCQkgICAgKHBwb3dlcmxldmVsW2lkeDFdIDw8IDE2KSB8CisJCQkgICAgKHBwb3dlcmxldmVsW2lkeDFdIDw8IDI0KTsKKwkJfQorCisJCWlmIChydGxlZnVzZS0+ZWVwcm9tX3JlZ3VsYXRvcnkgPT0gMCkgeworCQkJdG1wdmFsID0KKwkJCSAgICAocnRscGh5LT5tY3NfdHhwd3JsZXZlbF9vcmlnb2Zmc2V0WzBdWzZdKSArCisJCQkgICAgKHJ0bHBoeS0+bWNzX3R4cHdybGV2ZWxfb3JpZ29mZnNldFswXVs3XSA8PAorCQkJICAgICA4KTsKKwkJCXR4X2FnY1tSRjkwX1BBVEhfQV0gKz0gdG1wdmFsOworCisJCQl0bXB2YWwgPSAocnRscGh5LT5tY3NfdHhwd3JsZXZlbF9vcmlnb2Zmc2V0WzBdWzE0XSkgKworCQkJCSAocnRscGh5LT5tY3NfdHhwd3JsZXZlbF9vcmlnb2Zmc2V0WzBdWzE1XSA8PAorCQkJCSAyNCk7CisJCQl0eF9hZ2NbUkY5MF9QQVRIX0JdICs9IHRtcHZhbDsKKwkJfQorCX0KKworCWZvciAoaWR4MSA9IFJGOTBfUEFUSF9BOyBpZHgxIDw9IFJGOTBfUEFUSF9COyBpZHgxKyspIHsKKwkJcHRyID0gKHU4ICopICgmKHR4X2FnY1tpZHgxXSkpOworCQlmb3IgKGlkeDIgPSAwOyBpZHgyIDwgNDsgaWR4MisrKSB7CisJCQlpZiAoKnB0ciA+IFJGNjA1Ml9NQVhfVFhfUFdSKQorCQkJCSpwdHIgPSBSRjYwNTJfTUFYX1RYX1BXUjsKKwkJCXB0cisrOworCQl9CisJfQorCisJdG1wdmFsID0gdHhfYWdjW1JGOTBfUEFUSF9BXSAmIDB4ZmY7CisJcnRsX3NldF9iYnJlZyhodywgUlRYQUdDX0FfQ0NLMV9NQ1MzMiwgTUFTS0JZVEUxLCB0bXB2YWwpOworCisJUlRQUklOVChydGxwcml2LCBGUEhZLCBQSFlfVFhQV1IsCisJCSgiQ0NLIFBXUiAxTSAocmYtQSkgPSAweCV4IChyZWcgMHgleClcbiIsIHRtcHZhbCwKKwkJIFJUWEFHQ19BX0NDSzFfTUNTMzIpKTsKKworCXRtcHZhbCA9IHR4X2FnY1tSRjkwX1BBVEhfQV0gPj4gODsKKworCWlmIChtYWMtPm1vZGUgPT0gV0lSRUxFU1NfTU9ERV9CKQorCQl0bXB2YWwgPSB0bXB2YWwgJiAweGZmMDBmZmZmOworCisJcnRsX3NldF9iYnJlZyhodywgUlRYQUdDX0JfQ0NLMTFfQV9DQ0syXzExLCAweGZmZmZmZjAwLCB0bXB2YWwpOworCisJUlRQUklOVChydGxwcml2LCBGUEhZLCBQSFlfVFhQV1IsCisJCSgiQ0NLIFBXUiAyfjExTSAocmYtQSkgPSAweCV4IChyZWcgMHgleClcbiIsIHRtcHZhbCwKKwkJIFJUWEFHQ19CX0NDSzExX0FfQ0NLMl8xMSkpOworCisJdG1wdmFsID0gdHhfYWdjW1JGOTBfUEFUSF9CXSA+PiAyNDsKKwlydGxfc2V0X2JicmVnKGh3LCBSVFhBR0NfQl9DQ0sxMV9BX0NDSzJfMTEsIE1BU0tCWVRFMCwgdG1wdmFsKTsKKworCVJUUFJJTlQocnRscHJpdiwgRlBIWSwgUEhZX1RYUFdSLAorCQkoIkNDSyBQV1IgMTFNIChyZi1CKSA9IDB4JXggKHJlZyAweCV4KVxuIiwgdG1wdmFsLAorCQkgUlRYQUdDX0JfQ0NLMTFfQV9DQ0syXzExKSk7CisKKwl0bXB2YWwgPSB0eF9hZ2NbUkY5MF9QQVRIX0JdICYgMHgwMGZmZmZmZjsKKwlydGxfc2V0X2JicmVnKGh3LCBSVFhBR0NfQl9DQ0sxXzU1X01DUzMyLCAweGZmZmZmZjAwLCB0bXB2YWwpOworCisJUlRQUklOVChydGxwcml2LCBGUEhZLCBQSFlfVFhQV1IsCisJCSgiQ0NLIFBXUiAxfjUuNU0gKHJmLUIpID0gMHgleCAocmVnIDB4JXgpXG4iLCB0bXB2YWwsCisJCSBSVFhBR0NfQl9DQ0sxXzU1X01DUzMyKSk7Cit9CisKK3N0YXRpYyB2b2lkIHJ0bDkyY19waHlfZ2V0X3Bvd2VyX2Jhc2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgICAgdTggKnBwb3dlcmxldmVsLCB1OCBjaGFubmVsLAorCQkJCSAgICAgIHUzMiAqb2ZkbWJhc2UsIHUzMiAqbWNzYmFzZSkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKKwlzdHJ1Y3QgcnRsX2VmdXNlICpydGxlZnVzZSA9IHJ0bF9lZnVzZShydGxfcHJpdihodykpOworCXUzMiBwb3dlckJhc2UwLCBwb3dlckJhc2UxOworCXU4IGxlZ2FjeV9wd3JkaWZmLCBodDIwX3B3cmRpZmY7CisJdTggaSwgcG93ZXJsZXZlbFsyXTsKKworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJcG93ZXJsZXZlbFtpXSA9IHBwb3dlcmxldmVsW2ldOworCQlsZWdhY3lfcHdyZGlmZiA9IHJ0bGVmdXNlLT50eHB3cl9sZWdhY3lodGRpZmZbaV1bY2hhbm5lbCAtIDFdOworCQlwb3dlckJhc2UwID0gcG93ZXJsZXZlbFtpXSArIGxlZ2FjeV9wd3JkaWZmOworCisJCXBvd2VyQmFzZTAgPSAocG93ZXJCYXNlMCA8PCAyNCkgfCAocG93ZXJCYXNlMCA8PCAxNikgfAorCQkgICAgKHBvd2VyQmFzZTAgPDwgOCkgfCBwb3dlckJhc2UwOworCQkqKG9mZG1iYXNlICsgaSkgPSBwb3dlckJhc2UwOworCQlSVFBSSU5UKHJ0bHByaXYsIEZQSFksIFBIWV9UWFBXUiwKKwkJCSgiIFtPRkRNIHBvd2VyIGJhc2UgaW5kZXggcmYoJWMpID0gMHgleF1cbiIsCisJCQkgKChpID09IDApID8gJ0EnIDogJ0InKSwgKihvZmRtYmFzZSArIGkpKSk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQlpZiAocnRscGh5LT5jdXJyZW50X2NoYW5fYncgPT0gSFRfQ0hBTk5FTF9XSURUSF8yMCkgeworCQkJaHQyMF9wd3JkaWZmID0gcnRsZWZ1c2UtPnR4cHdyX2h0MjBkaWZmW2ldW2NoYW5uZWwgLSAxXTsKKwkJCXBvd2VybGV2ZWxbaV0gKz0gaHQyMF9wd3JkaWZmOworCQl9CisJCXBvd2VyQmFzZTEgPSBwb3dlcmxldmVsW2ldOworCQlwb3dlckJhc2UxID0gKHBvd2VyQmFzZTEgPDwgMjQpIHwKKwkJICAgIChwb3dlckJhc2UxIDw8IDE2KSB8IChwb3dlckJhc2UxIDw8IDgpIHwgcG93ZXJCYXNlMTsKKworCQkqKG1jc2Jhc2UgKyBpKSA9IHBvd2VyQmFzZTE7CisKKwkJUlRQUklOVChydGxwcml2LCBGUEhZLCBQSFlfVFhQV1IsCisJCQkoIiBbTUNTIHBvd2VyIGJhc2UgaW5kZXggcmYoJWMpID0gMHgleF1cbiIsCisJCQkgKChpID09IDApID8gJ0EnIDogJ0InKSwgKihtY3NiYXNlICsgaSkpKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9ydGw5MmNfZ2V0X3R4cG93ZXJfd3JpdGV2YWxfYnlfcmVndWxhdG9yeShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkJCSAgICAgICB1OCBjaGFubmVsLCB1OCBpbmRleCwKKwkJCQkJCSAgICAgICB1MzIgKnBvd2VyQmFzZTAsCisJCQkJCQkgICAgICAgdTMyICpwb3dlckJhc2UxLAorCQkJCQkJICAgICAgIHUzMiAqcF9vdXR3cml0ZXZhbCkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKKwlzdHJ1Y3QgcnRsX2VmdXNlICpydGxlZnVzZSA9IHJ0bF9lZnVzZShydGxfcHJpdihodykpOworCXU4IGksIGNobmxncm91cCwgcHdyX2RpZmZfbGltaXRbNF07CisJdTMyIHdyaXRlVmFsLCBjdXN0b21lcl9saW1pdCwgcmY7CisKKwlmb3IgKHJmID0gMDsgcmYgPCAyOyByZisrKSB7CisJCXN3aXRjaCAocnRsZWZ1c2UtPmVlcHJvbV9yZWd1bGF0b3J5KSB7CisJCWNhc2UgMDoKKwkJCWNobmxncm91cCA9IDA7CisKKwkJCXdyaXRlVmFsID0KKwkJCSAgICBydGxwaHktPm1jc190eHB3cmxldmVsX29yaWdvZmZzZXRbY2hubGdyb3VwXVtpbmRleCArCisJCQkgICAgKHJmID8gOCA6IDApXQorCQkJICAgICsgKChpbmRleCA8IDIpID8gcG93ZXJCYXNlMFtyZl0gOiBwb3dlckJhc2UxW3JmXSk7CisKKwkJCVJUUFJJTlQocnRscHJpdiwgRlBIWSwgUEhZX1RYUFdSLAorCQkJCSgiUlRLIGJldHRlciBwZXJmb3JtYW5jZSwgIgorCQkJCSAid3JpdGVWYWwoJWMpID0gMHgleFxuIiwKKwkJCQkgKChyZiA9PSAwKSA/ICdBJyA6ICdCJyksIHdyaXRlVmFsKSk7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJaWYgKHJ0bHBoeS0+Y3VycmVudF9jaGFuX2J3ID09IEhUX0NIQU5ORUxfV0lEVEhfMjBfNDApIHsKKwkJCQl3cml0ZVZhbCA9ICgoaW5kZXggPCAyKSA/IHBvd2VyQmFzZTBbcmZdIDoKKwkJCQkJICAgIHBvd2VyQmFzZTFbcmZdKTsKKworCQkJCVJUUFJJTlQocnRscHJpdiwgRlBIWSwgUEhZX1RYUFdSLAorCQkJCQkoIlJlYWx0ZWsgcmVndWxhdG9yeSwgNDBNSHosICIKKwkJCQkJICJ3cml0ZVZhbCglYykgPSAweCV4XG4iLAorCQkJCQkgKChyZiA9PSAwKSA/ICdBJyA6ICdCJyksIHdyaXRlVmFsKSk7CisJCQl9IGVsc2UgeworCQkJCWlmIChydGxwaHktPnB3cmdyb3VwX2NudCA9PSAxKQorCQkJCQljaG5sZ3JvdXAgPSAwOworCQkJCWlmIChydGxwaHktPnB3cmdyb3VwX2NudCA+PSAzKSB7CisJCQkJCWlmIChjaGFubmVsIDw9IDMpCisJCQkJCQljaG5sZ3JvdXAgPSAwOworCQkJCQllbHNlIGlmIChjaGFubmVsID49IDQgJiYgY2hhbm5lbCA8PSA5KQorCQkJCQkJY2hubGdyb3VwID0gMTsKKwkJCQkJZWxzZSBpZiAoY2hhbm5lbCA+IDkpCisJCQkJCQljaG5sZ3JvdXAgPSAyOworCQkJCQlpZiAocnRscGh5LT5wd3Jncm91cF9jbnQgPT0gNCkKKwkJCQkJCWNobmxncm91cCsrOworCQkJCX0KKworCQkJCXdyaXRlVmFsID0KKwkJCQkgICAgcnRscGh5LT5tY3NfdHhwd3JsZXZlbF9vcmlnb2Zmc2V0W2Nobmxncm91cF0KKwkJCQkgICAgW2luZGV4ICsgKHJmID8gOCA6IDApXSArICgoaW5kZXggPCAyKSA/CisJCQkJCQkJICAgICAgcG93ZXJCYXNlMFtyZl0gOgorCQkJCQkJCSAgICAgIHBvd2VyQmFzZTFbcmZdKTsKKworCQkJCVJUUFJJTlQocnRscHJpdiwgRlBIWSwgUEhZX1RYUFdSLAorCQkJCQkoIlJlYWx0ZWsgcmVndWxhdG9yeSwgMjBNSHosICIKKwkJCQkJICJ3cml0ZVZhbCglYykgPSAweCV4XG4iLAorCQkJCQkgKChyZiA9PSAwKSA/ICdBJyA6ICdCJyksIHdyaXRlVmFsKSk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJd3JpdGVWYWwgPQorCQkJICAgICgoaW5kZXggPCAyKSA/IHBvd2VyQmFzZTBbcmZdIDogcG93ZXJCYXNlMVtyZl0pOworCisJCQlSVFBSSU5UKHJ0bHByaXYsIEZQSFksIFBIWV9UWFBXUiwKKwkJCQkoIkJldHRlciByZWd1bGF0b3J5LCAiCisJCQkJICJ3cml0ZVZhbCglYykgPSAweCV4XG4iLAorCQkJCSAoKHJmID09IDApID8gJ0EnIDogJ0InKSwgd3JpdGVWYWwpKTsKKwkJCWJyZWFrOworCQljYXNlIDM6CisJCQljaG5sZ3JvdXAgPSAwOworCisJCQlpZiAocnRscGh5LT5jdXJyZW50X2NoYW5fYncgPT0gSFRfQ0hBTk5FTF9XSURUSF8yMF80MCkgeworCQkJCVJUUFJJTlQocnRscHJpdiwgRlBIWSwgUEhZX1RYUFdSLAorCQkJCQkoImN1c3RvbWVyJ3MgbGltaXQsIDQwTUh6ICIKKwkJCQkJICJyZiglYykgPSAweCV4XG4iLAorCQkJCQkgKChyZiA9PSAwKSA/ICdBJyA6ICdCJyksCisJCQkJCSBydGxlZnVzZS0+cHdyZ3JvdXBfaHQ0MFtyZl1bY2hhbm5lbCAtCisJCQkJCQkJCSAgICAgMV0pKTsKKwkJCX0gZWxzZSB7CisJCQkJUlRQUklOVChydGxwcml2LCBGUEhZLCBQSFlfVFhQV1IsCisJCQkJCSgiY3VzdG9tZXIncyBsaW1pdCwgMjBNSHogIgorCQkJCQkgInJmKCVjKSA9IDB4JXhcbiIsCisJCQkJCSAoKHJmID09IDApID8gJ0EnIDogJ0InKSwKKwkJCQkJIHJ0bGVmdXNlLT5wd3Jncm91cF9odDIwW3JmXVtjaGFubmVsIC0KKwkJCQkJCQkJICAgICAxXSkpOworCQkJfQorCQkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQkJCXB3cl9kaWZmX2xpbWl0W2ldID0KKwkJCQkgICAgKHU4KSAoKHJ0bHBoeS0+bWNzX3R4cHdybGV2ZWxfb3JpZ29mZnNldAorCQkJCQkgIFtjaG5sZ3JvdXBdW2luZGV4ICsKKwkJCQkJICAocmYgPyA4IDogMCldICYgKDB4N2YgPDwgKGkgKiA4KSkpID4+CisJCQkJCSAgKGkgKiA4KSk7CisKKwkJCQlpZiAocnRscGh5LT5jdXJyZW50X2NoYW5fYncgPT0KKwkJCQkgICAgSFRfQ0hBTk5FTF9XSURUSF8yMF80MCkgeworCQkJCQlpZiAocHdyX2RpZmZfbGltaXRbaV0gPgorCQkJCQkgICAgcnRsZWZ1c2UtPgorCQkJCQkgICAgcHdyZ3JvdXBfaHQ0MFtyZl1bY2hhbm5lbCAtIDFdKQorCQkJCQkJcHdyX2RpZmZfbGltaXRbaV0gPQorCQkJCQkJICAgIHJ0bGVmdXNlLT5wd3Jncm91cF9odDQwW3JmXQorCQkJCQkJICAgIFtjaGFubmVsIC0gMV07CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYgKHB3cl9kaWZmX2xpbWl0W2ldID4KKwkJCQkJICAgIHJ0bGVmdXNlLT4KKwkJCQkJICAgIHB3cmdyb3VwX2h0MjBbcmZdW2NoYW5uZWwgLSAxXSkKKwkJCQkJCXB3cl9kaWZmX2xpbWl0W2ldID0KKwkJCQkJCSAgICBydGxlZnVzZS0+cHdyZ3JvdXBfaHQyMFtyZl0KKwkJCQkJCSAgICBbY2hhbm5lbCAtIDFdOworCQkJCX0KKwkJCX0KKworCQkJY3VzdG9tZXJfbGltaXQgPSAocHdyX2RpZmZfbGltaXRbM10gPDwgMjQpIHwKKwkJCSAgICAocHdyX2RpZmZfbGltaXRbMl0gPDwgMTYpIHwKKwkJCSAgICAocHdyX2RpZmZfbGltaXRbMV0gPDwgOCkgfCAocHdyX2RpZmZfbGltaXRbMF0pOworCisJCQlSVFBSSU5UKHJ0bHByaXYsIEZQSFksIFBIWV9UWFBXUiwKKwkJCQkoIkN1c3RvbWVyJ3MgbGltaXQgcmYoJWMpID0gMHgleFxuIiwKKwkJCQkgKChyZiA9PSAwKSA/ICdBJyA6ICdCJyksIGN1c3RvbWVyX2xpbWl0KSk7CisKKwkJCXdyaXRlVmFsID0gY3VzdG9tZXJfbGltaXQgKworCQkJICAgICgoaW5kZXggPCAyKSA/IHBvd2VyQmFzZTBbcmZdIDogcG93ZXJCYXNlMVtyZl0pOworCisJCQlSVFBSSU5UKHJ0bHByaXYsIEZQSFksIFBIWV9UWFBXUiwKKwkJCQkoIkN1c3RvbWVyLCB3cml0ZVZhbCByZiglYyk9IDB4JXhcbiIsCisJCQkJICgocmYgPT0gMCkgPyAnQScgOiAnQicpLCB3cml0ZVZhbCkpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQljaG5sZ3JvdXAgPSAwOworCQkJd3JpdGVWYWwgPQorCQkJICAgIHJ0bHBoeS0+bWNzX3R4cHdybGV2ZWxfb3JpZ29mZnNldFtjaG5sZ3JvdXBdCisJCQkgICAgW2luZGV4ICsgKHJmID8gOCA6IDApXQorCQkJICAgICsgKChpbmRleCA8IDIpID8gcG93ZXJCYXNlMFtyZl0gOiBwb3dlckJhc2UxW3JmXSk7CisKKwkJCVJUUFJJTlQocnRscHJpdiwgRlBIWSwgUEhZX1RYUFdSLAorCQkJCSgiUlRLIGJldHRlciBwZXJmb3JtYW5jZSwgd3JpdGVWYWwgIgorCQkJCSAicmYoJWMpID0gMHgleFxuIiwKKwkJCQkgKChyZiA9PSAwKSA/ICdBJyA6ICdCJyksIHdyaXRlVmFsKSk7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChydGxwcml2LT5kbS5keW5hbWljX3R4aGlnaHBvd2VyX2x2bCA9PSBUWEhJR0hQV1JMRVZFTF9CVDEpCisJCQl3cml0ZVZhbCA9IHdyaXRlVmFsIC0gMHgwNjA2MDYwNjsKKwkJZWxzZSBpZiAocnRscHJpdi0+ZG0uZHluYW1pY190eGhpZ2hwb3dlcl9sdmwgPT0KKwkJCSBUWEhJR0hQV1JMRVZFTF9CVDIpCisJCQl3cml0ZVZhbCA9IHdyaXRlVmFsIC0gMHgwYzBjMGMwYzsKKwkJKihwX291dHdyaXRldmFsICsgcmYpID0gd3JpdGVWYWw7CisJfQorfQorCitzdGF0aWMgdm9pZCBfcnRsOTJjX3dyaXRlX29mZG1fcG93ZXJfcmVnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQkgdTggaW5kZXgsIHUzMiAqcFZhbHVlKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BoeSAqcnRscGh5ID0gJihydGxwcml2LT5waHkpOworCisJdTE2IHJlZ29mZnNldF9hWzZdID0geworCQlSVFhBR0NfQV9SQVRFMThfMDYsIFJUWEFHQ19BX1JBVEU1NF8yNCwKKwkJUlRYQUdDX0FfTUNTMDNfTUNTMDAsIFJUWEFHQ19BX01DUzA3X01DUzA0LAorCQlSVFhBR0NfQV9NQ1MxMV9NQ1MwOCwgUlRYQUdDX0FfTUNTMTVfTUNTMTIKKwl9OworCXUxNiByZWdvZmZzZXRfYls2XSA9IHsKKwkJUlRYQUdDX0JfUkFURTE4XzA2LCBSVFhBR0NfQl9SQVRFNTRfMjQsCisJCVJUWEFHQ19CX01DUzAzX01DUzAwLCBSVFhBR0NfQl9NQ1MwN19NQ1MwNCwKKwkJUlRYQUdDX0JfTUNTMTFfTUNTMDgsIFJUWEFHQ19CX01DUzE1X01DUzEyCisJfTsKKwl1OCBpLCByZiwgcHdyX3ZhbFs0XTsKKwl1MzIgd3JpdGVWYWw7CisJdTE2IHJlZ29mZnNldDsKKworCWZvciAocmYgPSAwOyByZiA8IDI7IHJmKyspIHsKKwkJd3JpdGVWYWwgPSBwVmFsdWVbcmZdOworCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCQlwd3JfdmFsW2ldID0gKHU4KSAoKHdyaXRlVmFsICYgKDB4N2YgPDwKKwkJCQkJCQkoaSAqIDgpKSkgPj4gKGkgKiA4KSk7CisKKwkJCWlmIChwd3JfdmFsW2ldID4gUkY2MDUyX01BWF9UWF9QV1IpCisJCQkJcHdyX3ZhbFtpXSA9IFJGNjA1Ml9NQVhfVFhfUFdSOworCQl9CisJCXdyaXRlVmFsID0gKHB3cl92YWxbM10gPDwgMjQpIHwgKHB3cl92YWxbMl0gPDwgMTYpIHwKKwkJICAgIChwd3JfdmFsWzFdIDw8IDgpIHwgcHdyX3ZhbFswXTsKKworCQlpZiAocmYgPT0gMCkKKwkJCXJlZ29mZnNldCA9IHJlZ29mZnNldF9hW2luZGV4XTsKKwkJZWxzZQorCQkJcmVnb2Zmc2V0ID0gcmVnb2Zmc2V0X2JbaW5kZXhdOworCQlydGxfc2V0X2JicmVnKGh3LCByZWdvZmZzZXQsIE1BU0tEV09SRCwgd3JpdGVWYWwpOworCisJCVJUUFJJTlQocnRscHJpdiwgRlBIWSwgUEhZX1RYUFdSLAorCQkJKCJTZXQgMHgleCA9ICUwOHhcbiIsIHJlZ29mZnNldCwgd3JpdGVWYWwpKTsKKworCQlpZiAoKChnZXRfcmZfdHlwZShydGxwaHkpID09IFJGXzJUMlIpICYmCisJCSAgICAgKHJlZ29mZnNldCA9PSBSVFhBR0NfQV9NQ1MxNV9NQ1MxMiB8fAorCQkgICAgICByZWdvZmZzZXQgPT0gUlRYQUdDX0JfTUNTMTVfTUNTMTIpKSB8fAorCQkgICAgKChnZXRfcmZfdHlwZShydGxwaHkpICE9IFJGXzJUMlIpICYmCisJCSAgICAgKHJlZ29mZnNldCA9PSBSVFhBR0NfQV9NQ1MwN19NQ1MwNCB8fAorCQkgICAgICByZWdvZmZzZXQgPT0gUlRYQUdDX0JfTUNTMDdfTUNTMDQpKSkgeworCisJCQl3cml0ZVZhbCA9IHB3cl92YWxbM107CisJCQlpZiAocmVnb2Zmc2V0ID09IFJUWEFHQ19BX01DUzE1X01DUzEyIHx8CisJCQkgICAgcmVnb2Zmc2V0ID09IFJUWEFHQ19BX01DUzA3X01DUzA0KQorCQkJCXJlZ29mZnNldCA9IDB4YzkwOworCQkJaWYgKHJlZ29mZnNldCA9PSBSVFhBR0NfQl9NQ1MxNV9NQ1MxMiB8fAorCQkJICAgIHJlZ29mZnNldCA9PSBSVFhBR0NfQl9NQ1MwN19NQ1MwNCkKKwkJCQlyZWdvZmZzZXQgPSAweGM5ODsKKworCQkJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQkJCXdyaXRlVmFsID0gKHdyaXRlVmFsID4gNikgPyAod3JpdGVWYWwgLSA2KSA6IDA7CisJCQkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgKHUzMikgKHJlZ29mZnNldCArIGkpLAorCQkJCQkgICAgICAgKHU4KSB3cml0ZVZhbCk7CisJCQl9CisJCX0KKwl9Cit9CisKK3ZvaWQgcnRsOTJjX3BoeV9yZjYwNTJfc2V0X29mZG1fdHhwb3dlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkJdTggKnBwb3dlcmxldmVsLCB1OCBjaGFubmVsKQoreworCXUzMiB3cml0ZVZhbFsyXSwgcG93ZXJCYXNlMFsyXSwgcG93ZXJCYXNlMVsyXTsKKwl1OCBpbmRleDsKKworCXJ0bDkyY19waHlfZ2V0X3Bvd2VyX2Jhc2UoaHcsIHBwb3dlcmxldmVsLAorCQkJCSAgY2hhbm5lbCwgJnBvd2VyQmFzZTBbMF0sICZwb3dlckJhc2UxWzBdKTsKKworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IDY7IGluZGV4KyspIHsKKwkJX3J0bDkyY19nZXRfdHhwb3dlcl93cml0ZXZhbF9ieV9yZWd1bGF0b3J5KGh3LAorCQkJCQkJCSAgIGNoYW5uZWwsIGluZGV4LAorCQkJCQkJCSAgICZwb3dlckJhc2UwWzBdLAorCQkJCQkJCSAgICZwb3dlckJhc2UxWzBdLAorCQkJCQkJCSAgICZ3cml0ZVZhbFswXSk7CisKKwkJX3J0bDkyY193cml0ZV9vZmRtX3Bvd2VyX3JlZyhodywgaW5kZXgsICZ3cml0ZVZhbFswXSk7CisJfQorfQorCitib29sIHJ0bDkyY19waHlfcmY2MDUyX2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKKworCWlmIChydGxwaHktPnJmX3R5cGUgPT0gUkZfMVQxUikKKwkJcnRscGh5LT5udW1fdG90YWxfcmZwYXRoID0gMTsKKwllbHNlCisJCXJ0bHBoeS0+bnVtX3RvdGFsX3JmcGF0aCA9IDI7CisKKwlyZXR1cm4gX3J0bDkyY19waHlfcmY2MDUyX2NvbmZpZ19wYXJhZmlsZShodyk7Cit9CisKK3N0YXRpYyBib29sIF9ydGw5MmNfcGh5X3JmNjA1Ml9jb25maWdfcGFyYWZpbGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGh5ICpydGxwaHkgPSAmKHJ0bHByaXYtPnBoeSk7CisJdTMyIHU0X3JlZ3ZhbHVlOworCXU4IHJmcGF0aDsKKwlib29sIHJ0c3RhdHVzOworCXN0cnVjdCBiYl9yZWdfZGVmICpwcGh5cmVnOworCisJZm9yIChyZnBhdGggPSAwOyByZnBhdGggPCBydGxwaHktPm51bV90b3RhbF9yZnBhdGg7IHJmcGF0aCsrKSB7CisKKwkJcHBoeXJlZyA9ICZydGxwaHktPnBoeXJlZ19kZWZbcmZwYXRoXTsKKworCQlzd2l0Y2ggKHJmcGF0aCkgeworCQljYXNlIFJGOTBfUEFUSF9BOgorCQljYXNlIFJGOTBfUEFUSF9DOgorCQkJdTRfcmVndmFsdWUgPSBydGxfZ2V0X2JicmVnKGh3LCBwcGh5cmVnLT5yZmludGZzLAorCQkJCQkJICAgIEJSRlNJX1JGRU5WKTsKKwkJCWJyZWFrOworCQljYXNlIFJGOTBfUEFUSF9COgorCQljYXNlIFJGOTBfUEFUSF9EOgorCQkJdTRfcmVndmFsdWUgPSBydGxfZ2V0X2JicmVnKGh3LCBwcGh5cmVnLT5yZmludGZzLAorCQkJCQkJICAgIEJSRlNJX1JGRU5WIDw8IDE2KTsKKwkJCWJyZWFrOworCQl9CisKKwkJcnRsX3NldF9iYnJlZyhodywgcHBoeXJlZy0+cmZpbnRmZSwgQlJGU0lfUkZFTlYgPDwgMTYsIDB4MSk7CisJCXVkZWxheSgxKTsKKworCQlydGxfc2V0X2JicmVnKGh3LCBwcGh5cmVnLT5yZmludGZvLCBCUkZTSV9SRkVOViwgMHgxKTsKKwkJdWRlbGF5KDEpOworCisJCXJ0bF9zZXRfYmJyZWcoaHcsIHBwaHlyZWctPnJmaHNzaV9wYXJhMiwKKwkJCSAgICAgIEIzV0lSRUFERFJFQUFMRU5HVEgsIDB4MCk7CisJCXVkZWxheSgxKTsKKworCQlydGxfc2V0X2JicmVnKGh3LCBwcGh5cmVnLT5yZmhzc2lfcGFyYTIsIEIzV0lSRURBVEFMRU5HVEgsIDB4MCk7CisJCXVkZWxheSgxKTsKKworCQlzd2l0Y2ggKHJmcGF0aCkgeworCQljYXNlIFJGOTBfUEFUSF9BOgorCQkJcnRzdGF0dXMgPSBydGw5MmNfcGh5X2NvbmZpZ19yZl93aXRoX2hlYWRlcmZpbGUoaHcsCisJCQkJCShlbnVtIHJhZGlvX3BhdGgpIHJmcGF0aCk7CisJCQlicmVhazsKKwkJY2FzZSBSRjkwX1BBVEhfQjoKKwkJCXJ0c3RhdHVzID0gcnRsOTJjX3BoeV9jb25maWdfcmZfd2l0aF9oZWFkZXJmaWxlKGh3LAorCQkJCQkoZW51bSByYWRpb19wYXRoKSByZnBhdGgpOworCQkJYnJlYWs7CisJCWNhc2UgUkY5MF9QQVRIX0M6CisJCQlicmVhazsKKwkJY2FzZSBSRjkwX1BBVEhfRDoKKwkJCWJyZWFrOworCQl9CisKKwkJc3dpdGNoIChyZnBhdGgpIHsKKwkJY2FzZSBSRjkwX1BBVEhfQToKKwkJY2FzZSBSRjkwX1BBVEhfQzoKKwkJCXJ0bF9zZXRfYmJyZWcoaHcsIHBwaHlyZWctPnJmaW50ZnMsCisJCQkJICAgICAgQlJGU0lfUkZFTlYsIHU0X3JlZ3ZhbHVlKTsKKwkJCWJyZWFrOworCQljYXNlIFJGOTBfUEFUSF9COgorCQljYXNlIFJGOTBfUEFUSF9EOgorCQkJcnRsX3NldF9iYnJlZyhodywgcHBoeXJlZy0+cmZpbnRmcywKKwkJCQkgICAgICBCUkZTSV9SRkVOViA8PCAxNiwgdTRfcmVndmFsdWUpOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAocnRzdGF0dXMgIT0gdHJ1ZSkgeworCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9JTklULCBEQkdfVFJBQ0UsCisJCQkJICgiUmFkaW9bJWRdIEZhaWwhISIsIHJmcGF0aCkpOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisKKwl9CisKKwlSVF9UUkFDRShydGxwcml2LCBDT01QX0lOSVQsIERCR19UUkFDRSwgKCI8LS0tXG4iKSk7CisJcmV0dXJuIHJ0c3RhdHVzOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2UvcmYuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmNlL3JmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMwMTRmOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmNlL3JmLmgKQEAgLTAsMCArMSw0NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodChjKSAyMDA5LTIwMTAgIFJlYWx0ZWsgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwgVVNBCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiB3bGFuZmFlIDx3bGFuZmFlQHJlYWx0ZWsuY29tPgorICogUmVhbHRlayBDb3Jwb3JhdGlvbiwgTm8uIDIsIElubm92YXRpb24gUm9hZCBJSSwgSHNpbmNodSBTY2llbmNlIFBhcmssCisgKiBIc2luY2h1IDMwMCwgVGFpd2FuLgorICoKKyAqIExhcnJ5IEZpbmdlciA8TGFycnkuRmluZ2VyQGx3ZmluZ2VyLm5ldD4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19SVEw5MkNfUkZfSF9fCisjZGVmaW5lIF9fUlRMOTJDX1JGX0hfXworCisjZGVmaW5lIFJGNjA1Ml9NQVhfVFhfUFdSCQkweDNGCisjZGVmaW5lIFJGNjA1Ml9NQVhfUkVHCQkJMHgzRgorI2RlZmluZSBSRjYwNTJfTUFYX1BBVEgJCQkyCisKK2V4dGVybiB2b2lkIHJ0bDkyY19waHlfcmY2MDUyX3NldF9iYW5kd2lkdGgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJCSAgICB1OCBiYW5kd2lkdGgpOworZXh0ZXJuIHZvaWQgcnRsOTJjX3BoeV9yZjYwNTJfc2V0X2Nja190eHBvd2VyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQkgICAgICB1OCAqcHBvd2VybGV2ZWwpOworZXh0ZXJuIHZvaWQgcnRsOTJjX3BoeV9yZjYwNTJfc2V0X29mZG1fdHhwb3dlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkJICAgICAgIHU4ICpwcG93ZXJsZXZlbCwgdTggY2hhbm5lbCk7CitleHRlcm4gYm9vbCBydGw5MmNfcGh5X3JmNjA1Ml9jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS9zdy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2Uvc3cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzY2ZTg4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2Uvc3cuYwpAQCAtMCwwICsxLDI4MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodChjKSAyMDA5LTIwMTAgIFJlYWx0ZWsgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwgVVNBCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiB3bGFuZmFlIDx3bGFuZmFlQHJlYWx0ZWsuY29tPgorICogUmVhbHRlayBDb3Jwb3JhdGlvbiwgTm8uIDIsIElubm92YXRpb24gUm9hZCBJSSwgSHNpbmNodSBTY2llbmNlIFBhcmssCisgKiBIc2luY2h1IDMwMCwgVGFpd2FuLgorICoKKyAqIExhcnJ5IEZpbmdlciA8TGFycnkuRmluZ2VyQGx3ZmluZ2VyLm5ldD4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisKKyNpbmNsdWRlICIuLi93aWZpLmgiCisjaW5jbHVkZSAiLi4vY29yZS5oIgorI2luY2x1ZGUgIi4uL3BjaS5oIgorI2luY2x1ZGUgInJlZy5oIgorI2luY2x1ZGUgImRlZi5oIgorI2luY2x1ZGUgInBoeS5oIgorI2luY2x1ZGUgImRtLmgiCisjaW5jbHVkZSAiaHcuaCIKKyNpbmNsdWRlICJzdy5oIgorI2luY2x1ZGUgInRyeC5oIgorI2luY2x1ZGUgImxlZC5oIgorCitpbnQgcnRsOTJjX2luaXRfc3dfdmFycyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9wY2kgKnJ0bHBjaSA9IHJ0bF9wY2lkZXYocnRsX3BjaXByaXYoaHcpKTsKKworCXJ0bHByaXYtPmRtLmJfZG1faW5pdGlhbGdhaW5fZW5hYmxlID0gMTsKKwlydGxwcml2LT5kbS5kbV9mbGFnID0gMDsKKwlydGxwcml2LT5kbS5iX2Rpc2FibGVfZnJhbWVidXJzdGluZyA9IDA7OworCXJ0bHByaXYtPmRtLnRoZXJtYWx2YWx1ZSA9IDA7CisJcnRscGNpLT50cmFuc21pdF9jb25maWcgPSBDRkVOREZPUk0gfCBCSVQoMTIpIHwgQklUKDEzKTsKKworCXJ0bHBjaS0+cmVjZWl2ZV9jb25maWcgPSAoUkNSX0FQUEZDUyB8CisJCQkJICBSQ1JfQU1GIHwKKwkJCQkgIFJDUl9BREYgfAorCQkJCSAgUkNSX0FQUF9NSUMgfAorCQkJCSAgUkNSX0FQUF9JQ1YgfAorCQkJCSAgUkNSX0FJQ1YgfAorCQkJCSAgUkNSX0FDUkMzMiB8CisJCQkJICBSQ1JfQUIgfAorCQkJCSAgUkNSX0FNIHwKKwkJCQkgIFJDUl9BUE0gfAorCQkJCSAgUkNSX0FQUF9QSFlTVF9SWEZGIHwgUkNSX0hUQ19MT0NfQ1RSTCB8IDApOworCisJcnRscGNpLT5pcnFfbWFza1swXSA9CisJICAgICh1MzIpIChJTVJfUk9LIHwKKwkJICAgSU1SX1ZPRE9LIHwKKwkJICAgSU1SX1ZJRE9LIHwKKwkJICAgSU1SX0JFRE9LIHwKKwkJICAgSU1SX0JLRE9LIHwKKwkJICAgSU1SX01HTlRET0sgfAorCQkgICBJTVJfSElHSERPSyB8IElNUl9CRE9LIHwgSU1SX1JEVSB8IElNUl9SWEZPVlcgfCAwKTsKKworCXJ0bHBjaS0+aXJxX21hc2tbMV0gPSAodTMyKSAoSU1SX0NQV00gfCBJTVJfQzJIQ01EIHwgMCk7CisKKwlydGxwcml2LT5ydGxoYWwucGZpcm13YXJlID0gKHU4ICopIHZtYWxsb2MoMHg0MDAwKTsKKwlpZiAoIXJ0bHByaXYtPnJ0bGhhbC5wZmlybXdhcmUpIHsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19FTUVSRywKKwkJCSAoIkNhbid0IGFsbG9jIGJ1ZmZlciBmb3IgZncuXG4iKSk7CisJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQorCit2b2lkIHJ0bDkyY19kZWluaXRfc3dfdmFycyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisKKwlpZiAocnRscHJpdi0+cnRsaGFsLnBmaXJtd2FyZSkgeworCQl2ZnJlZShydGxwcml2LT5ydGxoYWwucGZpcm13YXJlKTsKKwkJcnRscHJpdi0+cnRsaGFsLnBmaXJtd2FyZSA9IE5VTEw7CisJfQorfQorCitzdGF0aWMgc3RydWN0IHJ0bF9oYWxfb3BzIHJ0bDgxOTJjZV9oYWxfb3BzID0geworCS5pbml0X3N3X3ZhcnMgPSBydGw5MmNfaW5pdF9zd192YXJzLAorCS5kZWluaXRfc3dfdmFycyA9IHJ0bDkyY19kZWluaXRfc3dfdmFycywKKwkucmVhZF9lZXByb21faW5mbyA9IHJ0bDkyY2VfcmVhZF9lZXByb21faW5mbywKKwkuaW50ZXJydXB0X3JlY29nbml6ZWQgPSBydGw5MmNlX2ludGVycnVwdF9yZWNvZ25pemVkLAorCS5od19pbml0ID0gcnRsOTJjZV9od19pbml0LAorCS5od19kaXNhYmxlID0gcnRsOTJjZV9jYXJkX2Rpc2FibGUsCisJLmVuYWJsZV9pbnRlcnJ1cHQgPSBydGw5MmNlX2VuYWJsZV9pbnRlcnJ1cHQsCisJLmRpc2FibGVfaW50ZXJydXB0ID0gcnRsOTJjZV9kaXNhYmxlX2ludGVycnVwdCwKKwkuc2V0X25ldHdvcmtfdHlwZSA9IHJ0bDkyY2Vfc2V0X25ldHdvcmtfdHlwZSwKKwkuc2V0X3FvcyA9IHJ0bDkyY2Vfc2V0X3FvcywKKwkuc2V0X2Jjbl9yZWcgPSBydGw5MmNlX3NldF9iZWFjb25fcmVsYXRlZF9yZWdpc3RlcnMsCisJLnNldF9iY25faW50diA9IHJ0bDkyY2Vfc2V0X2JlYWNvbl9pbnRlcnZhbCwKKwkudXBkYXRlX2ludGVycnVwdF9tYXNrID0gcnRsOTJjZV91cGRhdGVfaW50ZXJydXB0X21hc2ssCisJLmdldF9od19yZWcgPSBydGw5MmNlX2dldF9od19yZWcsCisJLnNldF9od19yZWcgPSBydGw5MmNlX3NldF9od19yZWcsCisJLnVwZGF0ZV9yYXRlX3RhYmxlID0gcnRsOTJjZV91cGRhdGVfaGFsX3JhdGVfdGFibGUsCisJLnVwZGF0ZV9yYXRlX21hc2sgPSBydGw5MmNlX3VwZGF0ZV9oYWxfcmF0ZV9tYXNrLAorCS5maWxsX3R4X2Rlc2MgPSBydGw5MmNlX3R4X2ZpbGxfZGVzYywKKwkuZmlsbF90eF9jbWRkZXNjID0gcnRsOTJjZV90eF9maWxsX2NtZGRlc2MsCisJLnF1ZXJ5X3J4X2Rlc2MgPSBydGw5MmNlX3J4X3F1ZXJ5X2Rlc2MsCisJLnNldF9jaGFubmVsX2FjY2VzcyA9IHJ0bDkyY2VfdXBkYXRlX2NoYW5uZWxfYWNjZXNzX3NldHRpbmcsCisJLnJhZGlvX29ub2ZmX2NoZWNraW5nID0gcnRsOTJjZV9ncGlvX3JhZGlvX29uX29mZl9jaGVja2luZywKKwkuc2V0X2J3X21vZGUgPSBydGw5MmNfcGh5X3NldF9id19tb2RlLAorCS5zd2l0Y2hfY2hhbm5lbCA9IHJ0bDkyY19waHlfc3dfY2hubCwKKwkuZG1fd2F0Y2hkb2cgPSBydGw5MmNfZG1fd2F0Y2hkb2csCisJLnNjYW5fb3BlcmF0aW9uX2JhY2t1cCA9IHJ0bDkyY19waHlfc2Nhbl9vcGVyYXRpb25fYmFja3VwLAorCS5zZXRfcmZfcG93ZXJfc3RhdGUgPSBydGw5MmNfcGh5X3NldF9yZl9wb3dlcl9zdGF0ZSwKKwkubGVkX2NvbnRyb2wgPSBydGw5MmNlX2xlZF9jb250cm9sLAorCS5zZXRfZGVzYyA9IHJ0bDkyY2Vfc2V0X2Rlc2MsCisJLmdldF9kZXNjID0gcnRsOTJjZV9nZXRfZGVzYywKKwkudHhfcG9sbGluZyA9IHJ0bDkyY2VfdHhfcG9sbGluZywKKwkuZW5hYmxlX2h3X3NlYyA9IHJ0bDkyY2VfZW5hYmxlX2h3X3NlY3VyaXR5X2NvbmZpZywKKwkuc2V0X2tleSA9IHJ0bDkyY2Vfc2V0X2tleSwKKwkuaW5pdF9zd19sZWRzID0gcnRsOTJjZV9pbml0X3N3X2xlZHMsCisJLmRlaW5pdF9zd19sZWRzID0gcnRsOTJjZV9kZWluaXRfc3dfbGVkcywKKwkuZ2V0X2JicmVnID0gcnRsOTJjX3BoeV9xdWVyeV9iYl9yZWcsCisJLnNldF9iYnJlZyA9IHJ0bDkyY19waHlfc2V0X2JiX3JlZywKKwkuZ2V0X3JmcmVnID0gcnRsOTJjX3BoeV9xdWVyeV9yZl9yZWcsCisJLnNldF9yZnJlZyA9IHJ0bDkyY19waHlfc2V0X3JmX3JlZywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcnRsX21vZF9wYXJhbXMgcnRsOTJjZV9tb2RfcGFyYW1zID0geworCS5zd19jcnlwdG8gPSAwLAorfTsKKworc3RhdGljIHN0cnVjdCBydGxfaGFsX2NmZyBydGw5MmNlX2hhbF9jZmcgPSB7CisJLm5hbWUgPSAicnRsOTJjX3BjaSIsCisJLmZ3X25hbWUgPSAicnRsd2lmaS9ydGw4MTkyY2Z3LmJpbiIsCisJLm9wcyA9ICZydGw4MTkyY2VfaGFsX29wcywKKwkubW9kX3BhcmFtcyA9ICZydGw5MmNlX21vZF9wYXJhbXMsCisKKwkubWFwc1tTWVNfSVNPX0NUUkxdID0gUkVHX1NZU19JU09fQ1RSTCwKKwkubWFwc1tTWVNfRlVOQ19FTl0gPSBSRUdfU1lTX0ZVTkNfRU4sCisJLm1hcHNbU1lTX0NMS10gPSBSRUdfU1lTX0NMS1IsCisJLm1hcHNbTUFDX1JDUl9BTV0gPSBBTSwKKwkubWFwc1tNQUNfUkNSX0FCXSA9IEFCLAorCS5tYXBzW01BQ19SQ1JfQUNSQzMyXSA9IEFDUkMzMiwKKwkubWFwc1tNQUNfUkNSX0FDRl0gPSBBQ0YsCisJLm1hcHNbTUFDX1JDUl9BQVBdID0gQUFQLAorCisJLm1hcHNbRUZVU0VfVEVTVF0gPSBSRUdfRUZVU0VfVEVTVCwKKwkubWFwc1tFRlVTRV9DVFJMXSA9IFJFR19FRlVTRV9DVFJMLAorCS5tYXBzW0VGVVNFX0NMS10gPSAwLAorCS5tYXBzW0VGVVNFX0NMS19DVFJMXSA9IFJFR19FRlVTRV9DVFJMLAorCS5tYXBzW0VGVVNFX1BXQ19FVjEyVl0gPSBQV0NfRVYxMlYsCisJLm1hcHNbRUZVU0VfRkVOX0VMRFJdID0gRkVOX0VMRFIsCisJLm1hcHNbRUZVU0VfTE9BREVSX0NMS19FTl0gPSBMT0FERVJfQ0xLX0VOLAorCS5tYXBzW0VGVVNFX0FOQThNXSA9IEVGVVNFX0FOQThNLAorCS5tYXBzW0VGVVNFX0hXU0VUX01BWF9TSVpFXSA9IEhXU0VUX01BWF9TSVpFLAorCisJLm1hcHNbUldDQU1dID0gUkVHX0NBTUNNRCwKKwkubWFwc1tXQ0FNSV0gPSBSRUdfQ0FNV1JJVEUsCisJLm1hcHNbUkNBTU9dID0gUkVHX0NBTVJFQUQsCisJLm1hcHNbQ0FNREJHXSA9IFJFR19DQU1EQkcsCisJLm1hcHNbU0VDUl0gPSBSRUdfU0VDQ0ZHLAorCS5tYXBzW1NFQ19DQU1fTk9ORV0gPSBDQU1fTk9ORSwKKwkubWFwc1tTRUNfQ0FNX1dFUDQwXSA9IENBTV9XRVA0MCwKKwkubWFwc1tTRUNfQ0FNX1RLSVBdID0gQ0FNX1RLSVAsCisJLm1hcHNbU0VDX0NBTV9BRVNdID0gQ0FNX0FFUywKKwkubWFwc1tTRUNfQ0FNX1dFUDEwNF0gPSBDQU1fV0VQMTA0LAorCisJLm1hcHNbUlRMX0lNUl9CQ05ETUFJTlQ2XSA9IElNUl9CQ05ETUFJTlQ2LAorCS5tYXBzW1JUTF9JTVJfQkNORE1BSU5UNV0gPSBJTVJfQkNORE1BSU5UNSwKKwkubWFwc1tSVExfSU1SX0JDTkRNQUlOVDRdID0gSU1SX0JDTkRNQUlOVDQsCisJLm1hcHNbUlRMX0lNUl9CQ05ETUFJTlQzXSA9IElNUl9CQ05ETUFJTlQzLAorCS5tYXBzW1JUTF9JTVJfQkNORE1BSU5UMl0gPSBJTVJfQkNORE1BSU5UMiwKKwkubWFwc1tSVExfSU1SX0JDTkRNQUlOVDFdID0gSU1SX0JDTkRNQUlOVDEsCisJLm1hcHNbUlRMX0lNUl9CQ05ET0s4XSA9IElNUl9CQ05ET0s4LAorCS5tYXBzW1JUTF9JTVJfQkNORE9LN10gPSBJTVJfQkNORE9LNywKKwkubWFwc1tSVExfSU1SX0JDTkRPSzZdID0gSU1SX0JDTkRPSzYsCisJLm1hcHNbUlRMX0lNUl9CQ05ET0s1XSA9IElNUl9CQ05ET0s1LAorCS5tYXBzW1JUTF9JTVJfQkNORE9LNF0gPSBJTVJfQkNORE9LNCwKKwkubWFwc1tSVExfSU1SX0JDTkRPSzNdID0gSU1SX0JDTkRPSzMsCisJLm1hcHNbUlRMX0lNUl9CQ05ET0syXSA9IElNUl9CQ05ET0syLAorCS5tYXBzW1JUTF9JTVJfQkNORE9LMV0gPSBJTVJfQkNORE9LMSwKKwkubWFwc1tSVExfSU1SX1RJTUVPVVQyXSA9IElNUl9USU1FT1VUMiwKKwkubWFwc1tSVExfSU1SX1RJTUVPVVQxXSA9IElNUl9USU1FT1VUMSwKKworCS5tYXBzW1JUTF9JTVJfVFhGT1ZXXSA9IElNUl9UWEZPVlcsCisJLm1hcHNbUlRMX0lNUl9QU1RJTUVPVVRdID0gSU1SX1BTVElNRU9VVCwKKwkubWFwc1tSVExfSU1SX0JjbkludF0gPSBJTVJfQkNOSU5ULAorCS5tYXBzW1JUTF9JTVJfUlhGT1ZXXSA9IElNUl9SWEZPVlcsCisJLm1hcHNbUlRMX0lNUl9SRFVdID0gSU1SX1JEVSwKKwkubWFwc1tSVExfSU1SX0FUSU1FTkRdID0gSU1SX0FUSU1FTkQsCisJLm1hcHNbUlRMX0lNUl9CRE9LXSA9IElNUl9CRE9LLAorCS5tYXBzW1JUTF9JTVJfTUdOVERPS10gPSBJTVJfTUdOVERPSywKKwkubWFwc1tSVExfSU1SX1RCREVSXSA9IElNUl9UQkRFUiwKKwkubWFwc1tSVExfSU1SX0hJR0hET0tdID0gSU1SX0hJR0hET0ssCisJLm1hcHNbUlRMX0lNUl9UQkRPS10gPSBJTVJfVEJET0ssCisJLm1hcHNbUlRMX0lNUl9CS0RPS10gPSBJTVJfQktET0ssCisJLm1hcHNbUlRMX0lNUl9CRURPS10gPSBJTVJfQkVET0ssCisJLm1hcHNbUlRMX0lNUl9WSURPS10gPSBJTVJfVklET0ssCisJLm1hcHNbUlRMX0lNUl9WT0RPS10gPSBJTVJfVk9ET0ssCisJLm1hcHNbUlRMX0lNUl9ST0tdID0gSU1SX1JPSywKKwkubWFwc1tSVExfSUJTU19JTlRfTUFTS1NdID0gKElNUl9CQ05JTlQgfCBJTVJfVEJET0sgfCBJTVJfVEJERVIpLAorCisJLm1hcHNbUlRMX1JDX0NDS19SQVRFMU1dID0gREVTQzkyQ19SQVRFMU0sCisJLm1hcHNbUlRMX1JDX0NDS19SQVRFMk1dID0gREVTQzkyQ19SQVRFMk0sCisJLm1hcHNbUlRMX1JDX0NDS19SQVRFNV81TV0gPSBERVNDOTJDX1JBVEU1XzVNLAorCS5tYXBzW1JUTF9SQ19DQ0tfUkFURTExTV0gPSBERVNDOTJDX1JBVEUxMU0sCisJLm1hcHNbUlRMX1JDX09GRE1fUkFURTZNXSA9IERFU0M5MkNfUkFURTZNLAorCS5tYXBzW1JUTF9SQ19PRkRNX1JBVEU5TV0gPSBERVNDOTJDX1JBVEU5TSwKKwkubWFwc1tSVExfUkNfT0ZETV9SQVRFMTJNXSA9IERFU0M5MkNfUkFURTEyTSwKKwkubWFwc1tSVExfUkNfT0ZETV9SQVRFMThNXSA9IERFU0M5MkNfUkFURTE4TSwKKwkubWFwc1tSVExfUkNfT0ZETV9SQVRFMjRNXSA9IERFU0M5MkNfUkFURTI0TSwKKwkubWFwc1tSVExfUkNfT0ZETV9SQVRFMzZNXSA9IERFU0M5MkNfUkFURTM2TSwKKwkubWFwc1tSVExfUkNfT0ZETV9SQVRFNDhNXSA9IERFU0M5MkNfUkFURTQ4TSwKKwkubWFwc1tSVExfUkNfT0ZETV9SQVRFNTRNXSA9IERFU0M5MkNfUkFURTU0TSwKKworCS5tYXBzW1JUTF9SQ19IVF9SQVRFTUNTN10gPSBERVNDOTJDX1JBVEVNQ1M3LAorCS5tYXBzW1JUTF9SQ19IVF9SQVRFTUNTMTVdID0gREVTQzkyQ19SQVRFTUNTMTUsCit9OworCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgcnRsOTJjZV9wY2lfaWRzW10gX19kZXZpbml0ZGF0YSA9IHsKKwl7UlRMX1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9SRUFMVEVLLCAweDgxOTEsIHJ0bDkyY2VfaGFsX2NmZyl9LAorCXtSVExfUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1JFQUxURUssIDB4ODE3OCwgcnRsOTJjZV9oYWxfY2ZnKX0sCisJe1JUTF9QQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfUkVBTFRFSywgMHg4MTc3LCBydGw5MmNlX2hhbF9jZmcpfSwKKwl7UlRMX1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9SRUFMVEVLLCAweDgxNzYsIHJ0bDkyY2VfaGFsX2NmZyl9LAorCXt9LAorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHJ0bDkyY2VfcGNpX2lkcyk7CisKK01PRFVMRV9BVVRIT1IoImxpemhhb21pbmcJPGNoYW9taW5nX2xpQHJlYWxzaWwuY29tLmNuPiIpOworTU9EVUxFX0FVVEhPUigiUmVhbHRlayBXbGFuRkFFCTx3bGFuZmFlQHJlYWx0ZWsuY29tPiIpOworTU9EVUxFX0FVVEhPUigiTGFycnkgRmluZ2VyCTxMYXJyeS5GaW5nZXJAbHdmaW5nZXIubmV0PiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJSZWFsdGVrIDgxOTJDLzgxODhDIDgwMi4xMW4gUENJIHdpcmVsZXNzIik7CitNT0RVTEVfRklSTVdBUkUoInJ0bHdpZmkvcnRsODE5MmNmdy5iaW4iKTsKKworbW9kdWxlX3BhcmFtX25hbWVkKHN3ZW5jLCBydGw5MmNlX21vZF9wYXJhbXMuc3dfY3J5cHRvLCBib29sLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0Moc3dlbmMsICJ1c2luZyBoYXJkd2FyZSBjcnlwdG8gKGRlZmF1bHQgMCBbaGFyZHdhcmVdKVxuIik7CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBydGw5MmNlX2RyaXZlciA9IHsKKwkubmFtZSA9IEtCVUlMRF9NT0ROQU1FLAorCS5pZF90YWJsZSA9IHJ0bDkyY2VfcGNpX2lkcywKKwkucHJvYmUgPSBydGxfcGNpX3Byb2JlLAorCS5yZW1vdmUgPSBydGxfcGNpX2Rpc2Nvbm5lY3QsCisKKyNpZmRlZiBDT05GSUdfUE0KKwkuc3VzcGVuZCA9IHJ0bF9wY2lfc3VzcGVuZCwKKwkucmVzdW1lID0gcnRsX3BjaV9yZXN1bWUsCisjZW5kaWYKKworfTsKKworc3RhdGljIGludCBfX2luaXQgcnRsOTJjZV9tb2R1bGVfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZydGw5MmNlX2RyaXZlcik7CisJaWYgKHJldCkKKwkJUlRfQVNTRVJUKGZhbHNlLCAoIjogTm8gZGV2aWNlIGZvdW5kXG4iKSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgcnRsOTJjZV9tb2R1bGVfZXhpdCh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmcnRsOTJjZV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChydGw5MmNlX21vZHVsZV9pbml0KTsKK21vZHVsZV9leGl0KHJ0bDkyY2VfbW9kdWxlX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2Uvc3cuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmNlL3N3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGUxMTk4YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmNlL3N3LmgKQEAgLTAsMCArMSwzNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodChjKSAyMDA5LTIwMTAgIFJlYWx0ZWsgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwgVVNBCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiB3bGFuZmFlIDx3bGFuZmFlQHJlYWx0ZWsuY29tPgorICogUmVhbHRlayBDb3Jwb3JhdGlvbiwgTm8uIDIsIElubm92YXRpb24gUm9hZCBJSSwgSHNpbmNodSBTY2llbmNlIFBhcmssCisgKiBIc2luY2h1IDMwMCwgVGFpd2FuLgorICoKKyAqIExhcnJ5IEZpbmdlciA8TGFycnkuRmluZ2VyQGx3ZmluZ2VyLm5ldD4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19SVEw5MkNFX1NXX0hfXworI2RlZmluZSBfX1JUTDkyQ0VfU1dfSF9fCisKK2ludCBydGw5MmNfaW5pdF9zd192YXJzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3ZvaWQgcnRsOTJjX2RlaW5pdF9zd192YXJzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3ZvaWQgcnRsOTJjX2luaXRfdmFyX21hcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2UvdGFibGUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmNlL3RhYmxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmE5MzhiOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmNlL3RhYmxlLmMKQEAgLTAsMCArMSwxMjI0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDktMjAxMCAgUmVhbHRlayBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLCBVU0EKKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIHdsYW5mYWUgPHdsYW5mYWVAcmVhbHRlay5jb20+CisgKiBSZWFsdGVrIENvcnBvcmF0aW9uLCBOby4gMiwgSW5ub3ZhdGlvbiBSb2FkIElJLCBIc2luY2h1IFNjaWVuY2UgUGFyaywKKyAqIEhzaW5jaHUgMzAwLCBUYWl3YW4uCisgKgorICogQ3JlYXRlZCBvbiAgMjAxMC8gNS8xOCwgIDE6NDEKKyAqCisgKiBMYXJyeSBGaW5nZXIgPExhcnJ5LkZpbmdlckBsd2Zpbmdlci5uZXQ+CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAidGFibGUuaCIKKworCit1MzIgUlRMODE5MkNFUEhZX1JFR18yVEFSUkFZW1BIWV9SRUdfMlRBUlJBWV9MRU5HVEhdID0geworCTB4MDI0LCAweDAwMTE4MDBmLAorCTB4MDI4LCAweDAwZmZkYjgzLAorCTB4ODAwLCAweDgwMDQwMDAyLAorCTB4ODA0LCAweDAwMDAwMDAzLAorCTB4ODA4LCAweDAwMDBmYzAwLAorCTB4ODBjLCAweDAwMDAwMDBhLAorCTB4ODEwLCAweDEwMDA1Mzg4LAorCTB4ODE0LCAweDAyMGMzZDEwLAorCTB4ODE4LCAweDAyMjAwMzg1LAorCTB4ODFjLCAweDAwMDAwMDAwLAorCTB4ODIwLCAweDAxMDAwMTAwLAorCTB4ODI0LCAweDAwMzkwMDA0LAorCTB4ODI4LCAweDAxMDAwMTAwLAorCTB4ODJjLCAweDAwMzkwMDA0LAorCTB4ODMwLCAweDI3MjcyNzI3LAorCTB4ODM0LCAweDI3MjcyNzI3LAorCTB4ODM4LCAweDI3MjcyNzI3LAorCTB4ODNjLCAweDI3MjcyNzI3LAorCTB4ODQwLCAweDAwMDEwMDAwLAorCTB4ODQ0LCAweDAwMDEwMDAwLAorCTB4ODQ4LCAweDI3MjcyNzI3LAorCTB4ODRjLCAweDI3MjcyNzI3LAorCTB4ODUwLCAweDAwMDAwMDAwLAorCTB4ODU0LCAweDAwMDAwMDAwLAorCTB4ODU4LCAweDU2OWE1NjlhLAorCTB4ODVjLCAweDBjMWIyNWE0LAorCTB4ODYwLCAweDY2ZTYwMjMwLAorCTB4ODY0LCAweDA2MWYwMTMwLAorCTB4ODY4LCAweDI3MjcyNzI3LAorCTB4ODZjLCAweDJiMmIyYjI3LAorCTB4ODcwLCAweDA3MDAwNzAwLAorCTB4ODc0LCAweDIyMTg0MDAwLAorCTB4ODc4LCAweDA4MDgwODA4LAorCTB4ODdjLCAweDAwMDAwMDAwLAorCTB4ODgwLCAweGMwMDgzMDcwLAorCTB4ODg0LCAweDAwMDAwNGQ1LAorCTB4ODg4LCAweDAwMDAwMDAwLAorCTB4ODhjLCAweGNjMDAwMGMwLAorCTB4ODkwLCAweDAwMDAwODAwLAorCTB4ODk0LCAweGZmZmZmZmZlLAorCTB4ODk4LCAweDQwMzAyMDEwLAorCTB4ODljLCAweDAwNzA2MDUwLAorCTB4OTAwLCAweDAwMDAwMDAwLAorCTB4OTA0LCAweDAwMDAwMDIzLAorCTB4OTA4LCAweDAwMDAwMDAwLAorCTB4OTBjLCAweDgxMTIxMzEzLAorCTB4YTAwLCAweDAwZDA0N2M4LAorCTB4YTA0LCAweDgwZmYwMDBjLAorCTB4YTA4LCAweDhjODM4MzAwLAorCTB4YTBjLCAweDJlNjgxMjBmLAorCTB4YTEwLCAweDk1MDBiYjc4LAorCTB4YTE0LCAweDExMTQ0MDI4LAorCTB4YTE4LCAweDAwODgxMTE3LAorCTB4YTFjLCAweDg5MTQwZjAwLAorCTB4YTIwLCAweDFhMWIwMDAwLAorCTB4YTI0LCAweDA5MGUxMzE3LAorCTB4YTI4LCAweDAwMDAwMjA0LAorCTB4YTJjLCAweDAwZDMwMDAwLAorCTB4YTcwLCAweDEwMWZiZjAwLAorCTB4YTc0LCAweDAwMDAwMDA3LAorCTB4YzAwLCAweDQ4MDcxZDQwLAorCTB4YzA0LCAweDAzYTA1NjMzLAorCTB4YzA4LCAweDAwMDAwMGU0LAorCTB4YzBjLCAweDZjNmM2YzZjLAorCTB4YzEwLCAweDA4ODAwMDAwLAorCTB4YzE0LCAweDQwMDAwMTAwLAorCTB4YzE4LCAweDA4ODAwMDAwLAorCTB4YzFjLCAweDQwMDAwMTAwLAorCTB4YzIwLCAweDAwMDAwMDAwLAorCTB4YzI0LCAweDAwMDAwMDAwLAorCTB4YzI4LCAweDAwMDAwMDAwLAorCTB4YzJjLCAweDAwMDAwMDAwLAorCTB4YzMwLCAweDY5ZTlhYzQ0LAorCTB4YzM0LCAweDQ2OTY1MmNmLAorCTB4YzM4LCAweDQ5Nzk1OTk0LAorCTB4YzNjLCAweDBhOTc5NzFjLAorCTB4YzQwLCAweDFmN2M0MDNmLAorCTB4YzQ0LCAweDAwMDEwMGI3LAorCTB4YzQ4LCAweGVjMDIwMTA3LAorCTB4YzRjLCAweDAwN2YwMzdmLAorCTB4YzUwLCAweDY5NTQzNDIwLAorCTB4YzU0LCAweDQzYmMwMDk0LAorCTB4YzU4LCAweDY5NTQzNDIwLAorCTB4YzVjLCAweDQzM2MwMDk0LAorCTB4YzYwLCAweDAwMDAwMDAwLAorCTB4YzY0LCAweDUxMTY4NDhiLAorCTB4YzY4LCAweDQ3YzAwYmZmLAorCTB4YzZjLCAweDAwMDAwMDM2LAorCTB4YzcwLCAweDJjN2YwMDBkLAorCTB4Yzc0LCAweDAxODYxMGRiLAorCTB4Yzc4LCAweDAwMDAwMDFmLAorCTB4YzdjLCAweDAwYjkxNjEyLAorCTB4YzgwLCAweDQwMDAwMTAwLAorCTB4Yzg0LCAweDIwZjYwMDAwLAorCTB4Yzg4LCAweDQwMDAwMTAwLAorCTB4YzhjLCAweDIwMjAwMDAwLAorCTB4YzkwLCAweDAwMTIxODIwLAorCTB4Yzk0LCAweDAwMDAwMDAwLAorCTB4Yzk4LCAweDAwMTIxODIwLAorCTB4YzljLCAweDAwMDA3ZjdmLAorCTB4Y2EwLCAweDAwMDAwMDAwLAorCTB4Y2E0LCAweDAwMDAwMDgwLAorCTB4Y2E4LCAweDAwMDAwMDAwLAorCTB4Y2FjLCAweDAwMDAwMDAwLAorCTB4Y2IwLCAweDAwMDAwMDAwLAorCTB4Y2I0LCAweDAwMDAwMDAwLAorCTB4Y2I4LCAweDAwMDAwMDAwLAorCTB4Y2JjLCAweDI4MDAwMDAwLAorCTB4Y2MwLCAweDAwMDAwMDAwLAorCTB4Y2M0LCAweDAwMDAwMDAwLAorCTB4Y2M4LCAweDAwMDAwMDAwLAorCTB4Y2NjLCAweDAwMDAwMDAwLAorCTB4Y2QwLCAweDAwMDAwMDAwLAorCTB4Y2Q0LCAweDAwMDAwMDAwLAorCTB4Y2Q4LCAweDY0YjIyNDI3LAorCTB4Y2RjLCAweDAwNzY2OTMyLAorCTB4Y2UwLCAweDAwMjIyMjIyLAorCTB4Y2U0LCAweDAwMDAwMDAwLAorCTB4Y2U4LCAweDM3NjQ0MzAyLAorCTB4Y2VjLCAweDJmOTdkNDBjLAorCTB4ZDAwLCAweDAwMDgwNzQwLAorCTB4ZDA0LCAweDAwMDIwNDAzLAorCTB4ZDA4LCAweDAwMDA5MDdmLAorCTB4ZDBjLCAweDIwMDEwMjAxLAorCTB4ZDEwLCAweGEwNjMzMzMzLAorCTB4ZDE0LCAweDMzMzNiYzQzLAorCTB4ZDE4LCAweDdhOGY1YjZiLAorCTB4ZDJjLCAweGNjOTc5OTc1LAorCTB4ZDMwLCAweDAwMDAwMDAwLAorCTB4ZDM0LCAweDgwNjA4MDAwLAorCTB4ZDM4LCAweDAwMDAwMDAwLAorCTB4ZDNjLCAweDAwMDI3MjkzLAorCTB4ZDQwLCAweDAwMDAwMDAwLAorCTB4ZDQ0LCAweDAwMDAwMDAwLAorCTB4ZDQ4LCAweDAwMDAwMDAwLAorCTB4ZDRjLCAweDAwMDAwMDAwLAorCTB4ZDUwLCAweDY0MzcxNDBhLAorCTB4ZDU0LCAweDAwMDAwMDAwLAorCTB4ZDU4LCAweDAwMDAwMDAwLAorCTB4ZDVjLCAweDMwMDMyMDY0LAorCTB4ZDYwLCAweDQ2NTNkZTY4LAorCTB4ZDY0LCAweDA0NTE4YTNjLAorCTB4ZDY4LCAweDAwMDAyMTAxLAorCTB4ZDZjLCAweDJhMjAxYzE2LAorCTB4ZDcwLCAweDE4MTIzNjJlLAorCTB4ZDc0LCAweDMyMmMyMjIwLAorCTB4ZDc4LCAweDAwMGUzYzI0LAorCTB4ZTAwLCAweDJhMmEyYTJhLAorCTB4ZTA0LCAweDJhMmEyYTJhLAorCTB4ZTA4LCAweDAzOTAyYTJhLAorCTB4ZTEwLCAweDJhMmEyYTJhLAorCTB4ZTE0LCAweDJhMmEyYTJhLAorCTB4ZTE4LCAweDJhMmEyYTJhLAorCTB4ZTFjLCAweDJhMmEyYTJhLAorCTB4ZTI4LCAweDAwMDAwMDAwLAorCTB4ZTMwLCAweDEwMDBkYzFmLAorCTB4ZTM0LCAweDEwMDA4YzFmLAorCTB4ZTM4LCAweDAyMTQwMTAyLAorCTB4ZTNjLCAweDY4MTYwNGMyLAorCTB4ZTQwLCAweDAxMDA3YzAwLAorCTB4ZTQ0LCAweDAxMDA0ODAwLAorCTB4ZTQ4LCAweGZiMDAwMDAwLAorCTB4ZTRjLCAweDAwMDAyOGQxLAorCTB4ZTUwLCAweDEwMDBkYzFmLAorCTB4ZTU0LCAweDEwMDA4YzFmLAorCTB4ZTU4LCAweDAyMTQwMTAyLAorCTB4ZTVjLCAweDI4MTYwZDA1LAorCTB4ZTYwLCAweDAwMDAwMDEwLAorCTB4ZTY4LCAweDAwMWIyNWE0LAorCTB4ZTZjLCAweDYzZGIyNWE0LAorCTB4ZTcwLCAweDYzZGIyNWE0LAorCTB4ZTc0LCAweDBjMWIyNWE0LAorCTB4ZTc4LCAweDBjMWIyNWE0LAorCTB4ZTdjLCAweDBjMWIyNWE0LAorCTB4ZTgwLCAweDBjMWIyNWE0LAorCTB4ZTg0LCAweDYzZGIyNWE0LAorCTB4ZTg4LCAweDBjMWIyNWE0LAorCTB4ZThjLCAweDYzZGIyNWE0LAorCTB4ZWQwLCAweDYzZGIyNWE0LAorCTB4ZWQ0LCAweDYzZGIyNWE0LAorCTB4ZWQ4LCAweDYzZGIyNWE0LAorCTB4ZWRjLCAweDAwMWIyNWE0LAorCTB4ZWUwLCAweDAwMWIyNWE0LAorCTB4ZWVjLCAweDZmZGIyNWE0LAorCTB4ZjE0LCAweDAwMDAwMDAzLAorCTB4ZjRjLCAweDAwMDAwMDAwLAorCTB4ZjAwLCAweDAwMDAwMzAwLAorfTsKKwordTMyIFJUTDgxOTJDRVBIWV9SRUdfMVRBUlJBWVtQSFlfUkVHXzFUQVJSQVlfTEVOR1RIXSA9IHsKKwkweDAyNCwgMHgwMDExODAwZiwKKwkweDAyOCwgMHgwMGZmZGI4MywKKwkweDgwMCwgMHg4MDA0MDAwMCwKKwkweDgwNCwgMHgwMDAwMDAwMSwKKwkweDgwOCwgMHgwMDAwZmMwMCwKKwkweDgwYywgMHgwMDAwMDAwYSwKKwkweDgxMCwgMHgxMDAwNTM4OCwKKwkweDgxNCwgMHgwMjBjM2QxMCwKKwkweDgxOCwgMHgwMjIwMDM4NSwKKwkweDgxYywgMHgwMDAwMDAwMCwKKwkweDgyMCwgMHgwMTAwMDEwMCwKKwkweDgyNCwgMHgwMDM5MDAwNCwKKwkweDgyOCwgMHgwMDAwMDAwMCwKKwkweDgyYywgMHgwMDAwMDAwMCwKKwkweDgzMCwgMHgwMDAwMDAwMCwKKwkweDgzNCwgMHgwMDAwMDAwMCwKKwkweDgzOCwgMHgwMDAwMDAwMCwKKwkweDgzYywgMHgwMDAwMDAwMCwKKwkweDg0MCwgMHgwMDAxMDAwMCwKKwkweDg0NCwgMHgwMDAwMDAwMCwKKwkweDg0OCwgMHgwMDAwMDAwMCwKKwkweDg0YywgMHgwMDAwMDAwMCwKKwkweDg1MCwgMHgwMDAwMDAwMCwKKwkweDg1NCwgMHgwMDAwMDAwMCwKKwkweDg1OCwgMHg1NjlhNTY5YSwKKwkweDg1YywgMHgwMDFiMjVhNCwKKwkweDg2MCwgMHg2NmU2MDIzMCwKKwkweDg2NCwgMHgwNjFmMDEzMCwKKwkweDg2OCwgMHgwMDAwMDAwMCwKKwkweDg2YywgMHgzMjMyMzIwMCwKKwkweDg3MCwgMHgwNzAwMDcwMCwKKwkweDg3NCwgMHgyMjAwNDAwMCwKKwkweDg3OCwgMHgwMDAwMDgwOCwKKwkweDg3YywgMHgwMDAwMDAwMCwKKwkweDg4MCwgMHhjMDA4MzA3MCwKKwkweDg4NCwgMHgwMDAwMDRkNSwKKwkweDg4OCwgMHgwMDAwMDAwMCwKKwkweDg4YywgMHhjY2MwMDBjMCwKKwkweDg5MCwgMHgwMDAwMDgwMCwKKwkweDg5NCwgMHhmZmZmZmZmZSwKKwkweDg5OCwgMHg0MDMwMjAxMCwKKwkweDg5YywgMHgwMDcwNjA1MCwKKwkweDkwMCwgMHgwMDAwMDAwMCwKKwkweDkwNCwgMHgwMDAwMDAyMywKKwkweDkwOCwgMHgwMDAwMDAwMCwKKwkweDkwYywgMHg4MTEyMTExMSwKKwkweGEwMCwgMHgwMGQwNDdjOCwKKwkweGEwNCwgMHg4MGZmMDAwYywKKwkweGEwOCwgMHg4YzgzODMwMCwKKwkweGEwYywgMHgyZTY4MTIwZiwKKwkweGExMCwgMHg5NTAwYmI3OCwKKwkweGExNCwgMHgxMTE0NDAyOCwKKwkweGExOCwgMHgwMDg4MTExNywKKwkweGExYywgMHg4OTE0MGYwMCwKKwkweGEyMCwgMHgxYTFiMDAwMCwKKwkweGEyNCwgMHgwOTBlMTMxNywKKwkweGEyOCwgMHgwMDAwMDIwNCwKKwkweGEyYywgMHgwMGQzMDAwMCwKKwkweGE3MCwgMHgxMDFmYmYwMCwKKwkweGE3NCwgMHgwMDAwMDAwNywKKwkweGMwMCwgMHg0ODA3MWQ0MCwKKwkweGMwNCwgMHgwM2EwNTYxMSwKKwkweGMwOCwgMHgwMDAwMDBlNCwKKwkweGMwYywgMHg2YzZjNmM2YywKKwkweGMxMCwgMHgwODgwMDAwMCwKKwkweGMxNCwgMHg0MDAwMDEwMCwKKwkweGMxOCwgMHgwODgwMDAwMCwKKwkweGMxYywgMHg0MDAwMDEwMCwKKwkweGMyMCwgMHgwMDAwMDAwMCwKKwkweGMyNCwgMHgwMDAwMDAwMCwKKwkweGMyOCwgMHgwMDAwMDAwMCwKKwkweGMyYywgMHgwMDAwMDAwMCwKKwkweGMzMCwgMHg2OWU5YWM0NCwKKwkweGMzNCwgMHg0Njk2NTJjZiwKKwkweGMzOCwgMHg0OTc5NTk5NCwKKwkweGMzYywgMHgwYTk3OTcxYywKKwkweGM0MCwgMHgxZjdjNDAzZiwKKwkweGM0NCwgMHgwMDAxMDBiNywKKwkweGM0OCwgMHhlYzAyMDEwNywKKwkweGM0YywgMHgwMDdmMDM3ZiwKKwkweGM1MCwgMHg2OTU0MzQyMCwKKwkweGM1NCwgMHg0M2JjMDA5NCwKKwkweGM1OCwgMHg2OTU0MzQyMCwKKwkweGM1YywgMHg0MzNjMDA5NCwKKwkweGM2MCwgMHgwMDAwMDAwMCwKKwkweGM2NCwgMHg1MTE2ODQ4YiwKKwkweGM2OCwgMHg0N2MwMGJmZiwKKwkweGM2YywgMHgwMDAwMDAzNiwKKwkweGM3MCwgMHgyYzdmMDAwZCwKKwkweGM3NCwgMHgwMTg2MTBkYiwKKwkweGM3OCwgMHgwMDAwMDAxZiwKKwkweGM3YywgMHgwMGI5MTYxMiwKKwkweGM4MCwgMHg0MDAwMDEwMCwKKwkweGM4NCwgMHgyMGY2MDAwMCwKKwkweGM4OCwgMHg0MDAwMDEwMCwKKwkweGM4YywgMHgyMDIwMDAwMCwKKwkweGM5MCwgMHgwMDEyMTgyMCwKKwkweGM5NCwgMHgwMDAwMDAwMCwKKwkweGM5OCwgMHgwMDEyMTgyMCwKKwkweGM5YywgMHgwMDAwN2Y3ZiwKKwkweGNhMCwgMHgwMDAwMDAwMCwKKwkweGNhNCwgMHgwMDAwMDA4MCwKKwkweGNhOCwgMHgwMDAwMDAwMCwKKwkweGNhYywgMHgwMDAwMDAwMCwKKwkweGNiMCwgMHgwMDAwMDAwMCwKKwkweGNiNCwgMHgwMDAwMDAwMCwKKwkweGNiOCwgMHgwMDAwMDAwMCwKKwkweGNiYywgMHgyODAwMDAwMCwKKwkweGNjMCwgMHgwMDAwMDAwMCwKKwkweGNjNCwgMHgwMDAwMDAwMCwKKwkweGNjOCwgMHgwMDAwMDAwMCwKKwkweGNjYywgMHgwMDAwMDAwMCwKKwkweGNkMCwgMHgwMDAwMDAwMCwKKwkweGNkNCwgMHgwMDAwMDAwMCwKKwkweGNkOCwgMHg2NGIyMjQyNywKKwkweGNkYywgMHgwMDc2NjkzMiwKKwkweGNlMCwgMHgwMDIyMjIyMiwKKwkweGNlNCwgMHgwMDAwMDAwMCwKKwkweGNlOCwgMHgzNzY0NDMwMiwKKwkweGNlYywgMHgyZjk3ZDQwYywKKwkweGQwMCwgMHgwMDA4MDc0MCwKKwkweGQwNCwgMHgwMDAyMDQwMSwKKwkweGQwOCwgMHgwMDAwOTA3ZiwKKwkweGQwYywgMHgyMDAxMDIwMSwKKwkweGQxMCwgMHhhMDYzMzMzMywKKwkweGQxNCwgMHgzMzMzYmM0MywKKwkweGQxOCwgMHg3YThmNWI2YiwKKwkweGQyYywgMHhjYzk3OTk3NSwKKwkweGQzMCwgMHgwMDAwMDAwMCwKKwkweGQzNCwgMHg4MDYwODAwMCwKKwkweGQzOCwgMHgwMDAwMDAwMCwKKwkweGQzYywgMHgwMDAyNzI5MywKKwkweGQ0MCwgMHgwMDAwMDAwMCwKKwkweGQ0NCwgMHgwMDAwMDAwMCwKKwkweGQ0OCwgMHgwMDAwMDAwMCwKKwkweGQ0YywgMHgwMDAwMDAwMCwKKwkweGQ1MCwgMHg2NDM3MTQwYSwKKwkweGQ1NCwgMHgwMDAwMDAwMCwKKwkweGQ1OCwgMHgwMDAwMDAwMCwKKwkweGQ1YywgMHgzMDAzMjA2NCwKKwkweGQ2MCwgMHg0NjUzZGU2OCwKKwkweGQ2NCwgMHgwNDUxOGEzYywKKwkweGQ2OCwgMHgwMDAwMjEwMSwKKwkweGQ2YywgMHgyYTIwMWMxNiwKKwkweGQ3MCwgMHgxODEyMzYyZSwKKwkweGQ3NCwgMHgzMjJjMjIyMCwKKwkweGQ3OCwgMHgwMDBlM2MyNCwKKwkweGUwMCwgMHgyYTJhMmEyYSwKKwkweGUwNCwgMHgyYTJhMmEyYSwKKwkweGUwOCwgMHgwMzkwMmEyYSwKKwkweGUxMCwgMHgyYTJhMmEyYSwKKwkweGUxNCwgMHgyYTJhMmEyYSwKKwkweGUxOCwgMHgyYTJhMmEyYSwKKwkweGUxYywgMHgyYTJhMmEyYSwKKwkweGUyOCwgMHgwMDAwMDAwMCwKKwkweGUzMCwgMHgxMDAwZGMxZiwKKwkweGUzNCwgMHgxMDAwOGMxZiwKKwkweGUzOCwgMHgwMjE0MDEwMiwKKwkweGUzYywgMHg2ODE2MDRjMiwKKwkweGU0MCwgMHgwMTAwN2MwMCwKKwkweGU0NCwgMHgwMTAwNDgwMCwKKwkweGU0OCwgMHhmYjAwMDAwMCwKKwkweGU0YywgMHgwMDAwMjhkMSwKKwkweGU1MCwgMHgxMDAwZGMxZiwKKwkweGU1NCwgMHgxMDAwOGMxZiwKKwkweGU1OCwgMHgwMjE0MDEwMiwKKwkweGU1YywgMHgyODE2MGQwNSwKKwkweGU2MCwgMHgwMDAwMDAxMCwKKwkweGU2OCwgMHgwMDFiMjVhNCwKKwkweGU2YywgMHg2MzFiMjVhMCwKKwkweGU3MCwgMHg2MzFiMjVhMCwKKwkweGU3NCwgMHgwODFiMjVhMCwKKwkweGU3OCwgMHgwODFiMjVhMCwKKwkweGU3YywgMHgwODFiMjVhMCwKKwkweGU4MCwgMHgwODFiMjVhMCwKKwkweGU4NCwgMHg2MzFiMjVhMCwKKwkweGU4OCwgMHgwODFiMjVhMCwKKwkweGU4YywgMHg2MzFiMjVhMCwKKwkweGVkMCwgMHg2MzFiMjVhMCwKKwkweGVkNCwgMHg2MzFiMjVhMCwKKwkweGVkOCwgMHg2MzFiMjVhMCwKKwkweGVkYywgMHgwMDFiMjVhMCwKKwkweGVlMCwgMHgwMDFiMjVhMCwKKwkweGVlYywgMHg2YjFiMjVhMCwKKwkweGYxNCwgMHgwMDAwMDAwMywKKwkweGY0YywgMHgwMDAwMDAwMCwKKwkweGYwMCwgMHgwMDAwMDMwMCwKK307CisKK3UzMiBSVEw4MTkyQ0VQSFlfUkVHX0FSUkFZX1BHW1BIWV9SRUdfQVJSQVlfUEdMRU5HVEhdID0geworCTB4ZTAwLCAweGZmZmZmZmZmLCAweDBhMGMwYzBjLAorCTB4ZTA0LCAweGZmZmZmZmZmLCAweDAyMDQwNjA4LAorCTB4ZTA4LCAweDAwMDBmZjAwLCAweDAwMDAwMDAwLAorCTB4ODZjLCAweGZmZmZmZjAwLCAweDAwMDAwMDAwLAorCTB4ZTEwLCAweGZmZmZmZmZmLCAweDBhMGMwZDBlLAorCTB4ZTE0LCAweGZmZmZmZmZmLCAweDAyMDQwNjA4LAorCTB4ZTE4LCAweGZmZmZmZmZmLCAweDBhMGMwZDBlLAorCTB4ZTFjLCAweGZmZmZmZmZmLCAweDAyMDQwNjA4LAorCTB4ODMwLCAweGZmZmZmZmZmLCAweDBhMGMwYzBjLAorCTB4ODM0LCAweGZmZmZmZmZmLCAweDAyMDQwNjA4LAorCTB4ODM4LCAweGZmZmZmZjAwLCAweDAwMDAwMDAwLAorCTB4ODZjLCAweDAwMDAwMGZmLCAweDAwMDAwMDAwLAorCTB4ODNjLCAweGZmZmZmZmZmLCAweDBhMGMwZDBlLAorCTB4ODQ4LCAweGZmZmZmZmZmLCAweDAyMDQwNjA4LAorCTB4ODRjLCAweGZmZmZmZmZmLCAweDBhMGMwZDBlLAorCTB4ODY4LCAweGZmZmZmZmZmLCAweDAyMDQwNjA4LAorCTB4ZTAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwLAorCTB4ZTA0LCAweGZmZmZmZmZmLCAweDAwMDAwMDAwLAorCTB4ZTA4LCAweDAwMDBmZjAwLCAweDAwMDAwMDAwLAorCTB4ODZjLCAweGZmZmZmZjAwLCAweDAwMDAwMDAwLAorCTB4ZTEwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwLAorCTB4ZTE0LCAweGZmZmZmZmZmLCAweDAwMDAwMDAwLAorCTB4ZTE4LCAweGZmZmZmZmZmLCAweDAwMDAwMDAwLAorCTB4ZTFjLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwLAorCTB4ODMwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwLAorCTB4ODM0LCAweGZmZmZmZmZmLCAweDAwMDAwMDAwLAorCTB4ODM4LCAweGZmZmZmZjAwLCAweDAwMDAwMDAwLAorCTB4ODZjLCAweDAwMDAwMGZmLCAweDAwMDAwMDAwLAorCTB4ODNjLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwLAorCTB4ODQ4LCAweGZmZmZmZmZmLCAweDAwMDAwMDAwLAorCTB4ODRjLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwLAorCTB4ODY4LCAweGZmZmZmZmZmLCAweDAwMDAwMDAwLAorCTB4ZTAwLCAweGZmZmZmZmZmLCAweDA0MDQwNDA0LAorCTB4ZTA0LCAweGZmZmZmZmZmLCAweDAwMDIwMjA0LAorCTB4ZTA4LCAweDAwMDBmZjAwLCAweDAwMDAwMDAwLAorCTB4ODZjLCAweGZmZmZmZjAwLCAweDAwMDAwMDAwLAorCTB4ZTEwLCAweGZmZmZmZmZmLCAweDA2MDYwNjA2LAorCTB4ZTE0LCAweGZmZmZmZmZmLCAweDAwMDIwNDA2LAorCTB4ZTE4LCAweGZmZmZmZmZmLCAweDA2MDYwNjA2LAorCTB4ZTFjLCAweGZmZmZmZmZmLCAweDAwMDIwNDA2LAorCTB4ODMwLCAweGZmZmZmZmZmLCAweDA0MDQwNDA0LAorCTB4ODM0LCAweGZmZmZmZmZmLCAweDAwMDIwMjA0LAorCTB4ODM4LCAweGZmZmZmZjAwLCAweDAwMDAwMDAwLAorCTB4ODZjLCAweDAwMDAwMGZmLCAweDAwMDAwMDAwLAorCTB4ODNjLCAweGZmZmZmZmZmLCAweDA2MDYwNjA2LAorCTB4ODQ4LCAweGZmZmZmZmZmLCAweDAwMDIwNDA2LAorCTB4ODRjLCAweGZmZmZmZmZmLCAweDA2MDYwNjA2LAorCTB4ODY4LCAweGZmZmZmZmZmLCAweDAwMDIwNDA2LAorCTB4ZTAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwLAorCTB4ZTA0LCAweGZmZmZmZmZmLCAweDAwMDAwMDAwLAorCTB4ZTA4LCAweDAwMDBmZjAwLCAweDAwMDAwMDAwLAorCTB4ODZjLCAweGZmZmZmZjAwLCAweDAwMDAwMDAwLAorCTB4ZTEwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwLAorCTB4ZTE0LCAweGZmZmZmZmZmLCAweDAwMDAwMDAwLAorCTB4ZTE4LCAweGZmZmZmZmZmLCAweDAwMDAwMDAwLAorCTB4ZTFjLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwLAorCTB4ODMwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwLAorCTB4ODM0LCAweGZmZmZmZmZmLCAweDAwMDAwMDAwLAorCTB4ODM4LCAweGZmZmZmZjAwLCAweDAwMDAwMDAwLAorCTB4ODZjLCAweDAwMDAwMGZmLCAweDAwMDAwMDAwLAorCTB4ODNjLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwLAorCTB4ODQ4LCAweGZmZmZmZmZmLCAweDAwMDAwMDAwLAorCTB4ODRjLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwLAorCTB4ODY4LCAweGZmZmZmZmZmLCAweDAwMDAwMDAwLAorfTsKKwordTMyIFJUTDgxOTJDRVJBRElPQV8yVEFSUkFZW1JBRElPQV8yVEFSUkFZTEVOR1RIXSA9IHsKKwkweDAwMCwgMHgwMDAzMDE1OSwKKwkweDAwMSwgMHgwMDAzMTI4NCwKKwkweDAwMiwgMHgwMDA5ODAwMCwKKwkweDAwMywgMHgwMDAxOGM2MywKKwkweDAwNCwgMHgwMDAyMTBlNywKKwkweDAwOSwgMHgwMDAyMDQ0ZiwKKwkweDAwYSwgMHgwMDAxYWRiMCwKKwkweDAwYiwgMHgwMDA1NDg2NywKKwkweDAwYywgMHgwMDA4OTkyZSwKKwkweDAwZCwgMHgwMDAwZTUyYywKKwkweDAwZSwgMHgwMDAzOWNlNywKKwkweDAwZiwgMHgwMDAwMDQ1MSwKKwkweDAxOSwgMHgwMDAwMDAwMCwKKwkweDAxYSwgMHgwMDAxMDI1NSwKKwkweDAxYiwgMHgwMDA2MGEwMCwKKwkweDAxYywgMHgwMDBmYzM3OCwKKwkweDAxZCwgMHgwMDBhMTI1MCwKKwkweDAxZSwgMHgwMDA0NDQ1ZiwKKwkweDAxZiwgMHgwMDA4MDAwMSwKKwkweDAyMCwgMHgwMDAwYjYxNCwKKwkweDAyMSwgMHgwMDA2YzAwMCwKKwkweDAyMiwgMHgwMDAwMDAwMCwKKwkweDAyMywgMHgwMDAwMTU1OCwKKwkweDAyNCwgMHgwMDAwMDA2MCwKKwkweDAyNSwgMHgwMDAwMDQ4MywKKwkweDAyNiwgMHgwMDA0ZjAwMCwKKwkweDAyNywgMHgwMDBlYzdkOSwKKwkweDAyOCwgMHgwMDA5NzdjMCwKKwkweDAyOSwgMHgwMDAwNDc4MywKKwkweDAyYSwgMHgwMDAwMDAwMSwKKwkweDAyYiwgMHgwMDAyMTMzNCwKKwkweDAyYSwgMHgwMDAwMDAwMCwKKwkweDAyYiwgMHgwMDAwMDA1NCwKKwkweDAyYSwgMHgwMDAwMDAwMSwKKwkweDAyYiwgMHgwMDAwMDgwOCwKKwkweDAyYiwgMHgwMDA1MzMzMywKKwkweDAyYywgMHgwMDAwMDAwYywKKwkweDAyYSwgMHgwMDAwMDAwMiwKKwkweDAyYiwgMHgwMDAwMDgwOCwKKwkweDAyYiwgMHgwMDA1YjMzMywKKwkweDAyYywgMHgwMDAwMDAwZCwKKwkweDAyYSwgMHgwMDAwMDAwMywKKwkweDAyYiwgMHgwMDAwMDgwOCwKKwkweDAyYiwgMHgwMDA2MzMzMywKKwkweDAyYywgMHgwMDAwMDAwZCwKKwkweDAyYSwgMHgwMDAwMDAwNCwKKwkweDAyYiwgMHgwMDAwMDgwOCwKKwkweDAyYiwgMHgwMDA2YjMzMywKKwkweDAyYywgMHgwMDAwMDAwZCwKKwkweDAyYSwgMHgwMDAwMDAwNSwKKwkweDAyYiwgMHgwMDAwMDgwOCwKKwkweDAyYiwgMHgwMDA3MzMzMywKKwkweDAyYywgMHgwMDAwMDAwZCwKKwkweDAyYSwgMHgwMDAwMDAwNiwKKwkweDAyYiwgMHgwMDAwMDcwOSwKKwkweDAyYiwgMHgwMDA1YjMzMywKKwkweDAyYywgMHgwMDAwMDAwZCwKKwkweDAyYSwgMHgwMDAwMDAwNywKKwkweDAyYiwgMHgwMDAwMDcwOSwKKwkweDAyYiwgMHgwMDA2MzMzMywKKwkweDAyYywgMHgwMDAwMDAwZCwKKwkweDAyYSwgMHgwMDAwMDAwOCwKKwkweDAyYiwgMHgwMDAwMDYwYSwKKwkweDAyYiwgMHgwMDA0YjMzMywKKwkweDAyYywgMHgwMDAwMDAwZCwKKwkweDAyYSwgMHgwMDAwMDAwOSwKKwkweDAyYiwgMHgwMDAwMDYwYSwKKwkweDAyYiwgMHgwMDA1MzMzMywKKwkweDAyYywgMHgwMDAwMDAwZCwKKwkweDAyYSwgMHgwMDAwMDAwYSwKKwkweDAyYiwgMHgwMDAwMDYwYSwKKwkweDAyYiwgMHgwMDA1YjMzMywKKwkweDAyYywgMHgwMDAwMDAwZCwKKwkweDAyYSwgMHgwMDAwMDAwYiwKKwkweDAyYiwgMHgwMDAwMDYwYSwKKwkweDAyYiwgMHgwMDA2MzMzMywKKwkweDAyYywgMHgwMDAwMDAwZCwKKwkweDAyYSwgMHgwMDAwMDAwYywKKwkweDAyYiwgMHgwMDAwMDYwYSwKKwkweDAyYiwgMHgwMDA2YjMzMywKKwkweDAyYywgMHgwMDAwMDAwZCwKKwkweDAyYSwgMHgwMDAwMDAwZCwKKwkweDAyYiwgMHgwMDAwMDYwYSwKKwkweDAyYiwgMHgwMDA3MzMzMywKKwkweDAyYywgMHgwMDAwMDAwZCwKKwkweDAyYSwgMHgwMDAwMDAwZSwKKwkweDAyYiwgMHgwMDAwMDUwYiwKKwkweDAyYiwgMHgwMDA2NjY2NiwKKwkweDAyYywgMHgwMDAwMDAxYSwKKwkweDAyYSwgMHgwMDBlMDAwMCwKKwkweDAxMCwgMHgwMDA0MDAwZiwKKwkweDAxMSwgMHgwMDBlMzFmYywKKwkweDAxMCwgMHgwMDA2MDAwZiwKKwkweDAxMSwgMHgwMDBmZjlmOCwKKwkweDAxMCwgMHgwMDAyMDAwZiwKKwkweDAxMSwgMHgwMDAyMDNmOSwKKwkweDAxMCwgMHgwMDAzMDAwZiwKKwkweDAxMSwgMHgwMDBmZjUwMCwKKwkweDAxMCwgMHgwMDAwMDAwMCwKKwkweDAxMSwgMHgwMDAwMDAwMCwKKwkweDAxMCwgMHgwMDA4MDAwZiwKKwkweDAxMSwgMHgwMDAzZjEwMCwKKwkweDAxMCwgMHgwMDA5MDAwZiwKKwkweDAxMSwgMHgwMDAyMzEwMCwKKwkweDAxMiwgMHgwMDAzMjAwMCwKKwkweDAxMiwgMHgwMDA3MTAwMCwKKwkweDAxMiwgMHgwMDBiMDAwMCwKKwkweDAxMiwgMHgwMDBmYzAwMCwKKwkweDAxMywgMHgwMDAyODdhZiwKKwkweDAxMywgMHgwMDAyNDRiNywKKwkweDAxMywgMHgwMDAyMDRhYiwKKwkweDAxMywgMHgwMDAxYzQ5ZiwKKwkweDAxMywgMHgwMDAxODQ5MywKKwkweDAxMywgMHgwMDAxNDI5NywKKwkweDAxMywgMHgwMDAxMDI5NSwKKwkweDAxMywgMHgwMDAwYzI5OCwKKwkweDAxMywgMHgwMDAwODE5YywKKwkweDAxMywgMHgwMDAwNDBhOCwKKwkweDAxMywgMHgwMDAwMDAxYywKKwkweDAxNCwgMHgwMDAxOTQ0YywKKwkweDAxNCwgMHgwMDA1OTQ0NCwKKwkweDAxNCwgMHgwMDA5OTQ0YywKKwkweDAxNCwgMHgwMDBkOTQ0NCwKKwkweDAxNSwgMHgwMDAwZjQyNCwKKwkweDAxNSwgMHgwMDA0ZjQyNCwKKwkweDAxNSwgMHgwMDA4ZjQyNCwKKwkweDAxNSwgMHgwMDBjZjQyNCwKKwkweDAxNiwgMHgwMDBlMDMzMCwKKwkweDAxNiwgMHgwMDBhMDMzMCwKKwkweDAxNiwgMHgwMDA2MDMzMCwKKwkweDAxNiwgMHgwMDAyMDMzMCwKKwkweDAwMCwgMHgwMDAxMDE1OSwKKwkweDAxOCwgMHgwMDAwZjQwMSwKKwkweDBmZSwgMHgwMDAwMDAwMCwKKwkweDBmZSwgMHgwMDAwMDAwMCwKKwkweDAxZiwgMHgwMDA4MDAwMywKKwkweDBmZSwgMHgwMDAwMDAwMCwKKwkweDBmZSwgMHgwMDAwMDAwMCwKKwkweDAxZSwgMHgwMDA0NDQ1NywKKwkweDAxZiwgMHgwMDA4MDAwMCwKKwkweDAwMCwgMHgwMDAzMDE1OSwKK307CisKK3UzMiBSVEw4MTkyQ0VfUkFESU9CXzJUQVJSQVlbUkFESU9CXzJUQVJSQVlMRU5HVEhdID0geworCTB4MDAwLCAweDAwMDMwMTU5LAorCTB4MDAxLCAweDAwMDMxMjg0LAorCTB4MDAyLCAweDAwMDk4MDAwLAorCTB4MDAzLCAweDAwMDE4YzYzLAorCTB4MDA0LCAweDAwMDIxMGU3LAorCTB4MDA5LCAweDAwMDIwNDRmLAorCTB4MDBhLCAweDAwMDFhZGIwLAorCTB4MDBiLCAweDAwMDU0ODY3LAorCTB4MDBjLCAweDAwMDg5OTJlLAorCTB4MDBkLCAweDAwMDBlNTJjLAorCTB4MDBlLCAweDAwMDM5Y2U3LAorCTB4MDBmLCAweDAwMDAwNDUxLAorCTB4MDEyLCAweDAwMDMyMDAwLAorCTB4MDEyLCAweDAwMDcxMDAwLAorCTB4MDEyLCAweDAwMGIwMDAwLAorCTB4MDEyLCAweDAwMGZjMDAwLAorCTB4MDEzLCAweDAwMDI4N2FmLAorCTB4MDEzLCAweDAwMDI0NGI3LAorCTB4MDEzLCAweDAwMDIwNGFiLAorCTB4MDEzLCAweDAwMDFjNDlmLAorCTB4MDEzLCAweDAwMDE4NDkzLAorCTB4MDEzLCAweDAwMDE0Mjk3LAorCTB4MDEzLCAweDAwMDEwMjk1LAorCTB4MDEzLCAweDAwMDBjMjk4LAorCTB4MDEzLCAweDAwMDA4MTljLAorCTB4MDEzLCAweDAwMDA0MGE4LAorCTB4MDEzLCAweDAwMDAwMDFjLAorCTB4MDE0LCAweDAwMDE5NDRjLAorCTB4MDE0LCAweDAwMDU5NDQ0LAorCTB4MDE0LCAweDAwMDk5NDRjLAorCTB4MDE0LCAweDAwMGQ5NDQ0LAorCTB4MDE1LCAweDAwMDBmNDI0LAorCTB4MDE1LCAweDAwMDRmNDI0LAorCTB4MDE1LCAweDAwMDhmNDI0LAorCTB4MDE1LCAweDAwMGNmNDI0LAorCTB4MDE2LCAweDAwMGUwMzMwLAorCTB4MDE2LCAweDAwMGEwMzMwLAorCTB4MDE2LCAweDAwMDYwMzMwLAorCTB4MDE2LCAweDAwMDIwMzMwLAorfTsKKwordTMyIFJUTDgxOTJDRV9SQURJT0FfMVRBUlJBWVtSQURJT0FfMVRBUlJBWUxFTkdUSF0gPSB7CisJMHgwMDAsIDB4MDAwMzAxNTksCisJMHgwMDEsIDB4MDAwMzEyODQsCisJMHgwMDIsIDB4MDAwOTgwMDAsCisJMHgwMDMsIDB4MDAwMThjNjMsCisJMHgwMDQsIDB4MDAwMjEwZTcsCisJMHgwMDksIDB4MDAwMjA0NGYsCisJMHgwMGEsIDB4MDAwMWFkYjAsCisJMHgwMGIsIDB4MDAwNTQ4NjcsCisJMHgwMGMsIDB4MDAwODk5MmUsCisJMHgwMGQsIDB4MDAwMGU1MmMsCisJMHgwMGUsIDB4MDAwMzljZTcsCisJMHgwMGYsIDB4MDAwMDA0NTEsCisJMHgwMTksIDB4MDAwMDAwMDAsCisJMHgwMWEsIDB4MDAwMTAyNTUsCisJMHgwMWIsIDB4MDAwNjBhMDAsCisJMHgwMWMsIDB4MDAwZmMzNzgsCisJMHgwMWQsIDB4MDAwYTEyNTAsCisJMHgwMWUsIDB4MDAwNDQ0NWYsCisJMHgwMWYsIDB4MDAwODAwMDEsCisJMHgwMjAsIDB4MDAwMGI2MTQsCisJMHgwMjEsIDB4MDAwNmMwMDAsCisJMHgwMjIsIDB4MDAwMDAwMDAsCisJMHgwMjMsIDB4MDAwMDE1NTgsCisJMHgwMjQsIDB4MDAwMDAwNjAsCisJMHgwMjUsIDB4MDAwMDA0ODMsCisJMHgwMjYsIDB4MDAwNGYwMDAsCisJMHgwMjcsIDB4MDAwZWM3ZDksCisJMHgwMjgsIDB4MDAwOTc3YzAsCisJMHgwMjksIDB4MDAwMDQ3ODMsCisJMHgwMmEsIDB4MDAwMDAwMDEsCisJMHgwMmIsIDB4MDAwMjEzMzQsCisJMHgwMmEsIDB4MDAwMDAwMDAsCisJMHgwMmIsIDB4MDAwMDAwNTQsCisJMHgwMmEsIDB4MDAwMDAwMDEsCisJMHgwMmIsIDB4MDAwMDA4MDgsCisJMHgwMmIsIDB4MDAwNTMzMzMsCisJMHgwMmMsIDB4MDAwMDAwMGMsCisJMHgwMmEsIDB4MDAwMDAwMDIsCisJMHgwMmIsIDB4MDAwMDA4MDgsCisJMHgwMmIsIDB4MDAwNWIzMzMsCisJMHgwMmMsIDB4MDAwMDAwMGQsCisJMHgwMmEsIDB4MDAwMDAwMDMsCisJMHgwMmIsIDB4MDAwMDA4MDgsCisJMHgwMmIsIDB4MDAwNjMzMzMsCisJMHgwMmMsIDB4MDAwMDAwMGQsCisJMHgwMmEsIDB4MDAwMDAwMDQsCisJMHgwMmIsIDB4MDAwMDA4MDgsCisJMHgwMmIsIDB4MDAwNmIzMzMsCisJMHgwMmMsIDB4MDAwMDAwMGQsCisJMHgwMmEsIDB4MDAwMDAwMDUsCisJMHgwMmIsIDB4MDAwMDA4MDgsCisJMHgwMmIsIDB4MDAwNzMzMzMsCisJMHgwMmMsIDB4MDAwMDAwMGQsCisJMHgwMmEsIDB4MDAwMDAwMDYsCisJMHgwMmIsIDB4MDAwMDA3MDksCisJMHgwMmIsIDB4MDAwNWIzMzMsCisJMHgwMmMsIDB4MDAwMDAwMGQsCisJMHgwMmEsIDB4MDAwMDAwMDcsCisJMHgwMmIsIDB4MDAwMDA3MDksCisJMHgwMmIsIDB4MDAwNjMzMzMsCisJMHgwMmMsIDB4MDAwMDAwMGQsCisJMHgwMmEsIDB4MDAwMDAwMDgsCisJMHgwMmIsIDB4MDAwMDA2MGEsCisJMHgwMmIsIDB4MDAwNGIzMzMsCisJMHgwMmMsIDB4MDAwMDAwMGQsCisJMHgwMmEsIDB4MDAwMDAwMDksCisJMHgwMmIsIDB4MDAwMDA2MGEsCisJMHgwMmIsIDB4MDAwNTMzMzMsCisJMHgwMmMsIDB4MDAwMDAwMGQsCisJMHgwMmEsIDB4MDAwMDAwMGEsCisJMHgwMmIsIDB4MDAwMDA2MGEsCisJMHgwMmIsIDB4MDAwNWIzMzMsCisJMHgwMmMsIDB4MDAwMDAwMGQsCisJMHgwMmEsIDB4MDAwMDAwMGIsCisJMHgwMmIsIDB4MDAwMDA2MGEsCisJMHgwMmIsIDB4MDAwNjMzMzMsCisJMHgwMmMsIDB4MDAwMDAwMGQsCisJMHgwMmEsIDB4MDAwMDAwMGMsCisJMHgwMmIsIDB4MDAwMDA2MGEsCisJMHgwMmIsIDB4MDAwNmIzMzMsCisJMHgwMmMsIDB4MDAwMDAwMGQsCisJMHgwMmEsIDB4MDAwMDAwMGQsCisJMHgwMmIsIDB4MDAwMDA2MGEsCisJMHgwMmIsIDB4MDAwNzMzMzMsCisJMHgwMmMsIDB4MDAwMDAwMGQsCisJMHgwMmEsIDB4MDAwMDAwMGUsCisJMHgwMmIsIDB4MDAwMDA1MGIsCisJMHgwMmIsIDB4MDAwNjY2NjYsCisJMHgwMmMsIDB4MDAwMDAwMWEsCisJMHgwMmEsIDB4MDAwZTAwMDAsCisJMHgwMTAsIDB4MDAwNDAwMGYsCisJMHgwMTEsIDB4MDAwZTMxZmMsCisJMHgwMTAsIDB4MDAwNjAwMGYsCisJMHgwMTEsIDB4MDAwZmY5ZjgsCisJMHgwMTAsIDB4MDAwMjAwMGYsCisJMHgwMTEsIDB4MDAwMjAzZjksCisJMHgwMTAsIDB4MDAwMzAwMGYsCisJMHgwMTEsIDB4MDAwZmY1MDAsCisJMHgwMTAsIDB4MDAwMDAwMDAsCisJMHgwMTEsIDB4MDAwMDAwMDAsCisJMHgwMTAsIDB4MDAwODAwMGYsCisJMHgwMTEsIDB4MDAwM2YxMDAsCisJMHgwMTAsIDB4MDAwOTAwMGYsCisJMHgwMTEsIDB4MDAwMjMxMDAsCisJMHgwMTIsIDB4MDAwMzIwMDAsCisJMHgwMTIsIDB4MDAwNzEwMDAsCisJMHgwMTIsIDB4MDAwYjAwMDAsCisJMHgwMTIsIDB4MDAwZmMwMDAsCisJMHgwMTMsIDB4MDAwMjg3YWYsCisJMHgwMTMsIDB4MDAwMjQ0YjcsCisJMHgwMTMsIDB4MDAwMjA0YWIsCisJMHgwMTMsIDB4MDAwMWM0OWYsCisJMHgwMTMsIDB4MDAwMTg0OTMsCisJMHgwMTMsIDB4MDAwMTQyOTcsCisJMHgwMTMsIDB4MDAwMTAyOTUsCisJMHgwMTMsIDB4MDAwMGMyOTgsCisJMHgwMTMsIDB4MDAwMDgxOWMsCisJMHgwMTMsIDB4MDAwMDQwYTgsCisJMHgwMTMsIDB4MDAwMDAwMWMsCisJMHgwMTQsIDB4MDAwMTk0NGMsCisJMHgwMTQsIDB4MDAwNTk0NDQsCisJMHgwMTQsIDB4MDAwOTk0NGMsCisJMHgwMTQsIDB4MDAwZDk0NDQsCisJMHgwMTUsIDB4MDAwMGY0MjQsCisJMHgwMTUsIDB4MDAwNGY0MjQsCisJMHgwMTUsIDB4MDAwOGY0MjQsCisJMHgwMTUsIDB4MDAwY2Y0MjQsCisJMHgwMTYsIDB4MDAwZTAzMzAsCisJMHgwMTYsIDB4MDAwYTAzMzAsCisJMHgwMTYsIDB4MDAwNjAzMzAsCisJMHgwMTYsIDB4MDAwMjAzMzAsCisJMHgwMDAsIDB4MDAwMTAxNTksCisJMHgwMTgsIDB4MDAwMGY0MDEsCisJMHgwZmUsIDB4MDAwMDAwMDAsCisJMHgwZmUsIDB4MDAwMDAwMDAsCisJMHgwMWYsIDB4MDAwODAwMDMsCisJMHgwZmUsIDB4MDAwMDAwMDAsCisJMHgwZmUsIDB4MDAwMDAwMDAsCisJMHgwMWUsIDB4MDAwNDQ0NTcsCisJMHgwMWYsIDB4MDAwODAwMDAsCisJMHgwMDAsIDB4MDAwMzAxNTksCit9OworCit1MzIgUlRMODE5MkNFX1JBRElPQl8xVEFSUkFZW1JBRElPQl8xVEFSUkFZTEVOR1RIXSA9IHsKKwkweDAsCit9OworCit1MzIgUlRMODE5MkNFTUFDXzJUX0FSUkFZW01BQ18yVF9BUlJBWUxFTkdUSF0gPSB7CisJMHg0MjAsIDB4MDAwMDAwODAsCisJMHg0MjMsIDB4MDAwMDAwMDAsCisJMHg0MzAsIDB4MDAwMDAwMDAsCisJMHg0MzEsIDB4MDAwMDAwMDAsCisJMHg0MzIsIDB4MDAwMDAwMDAsCisJMHg0MzMsIDB4MDAwMDAwMDEsCisJMHg0MzQsIDB4MDAwMDAwMDQsCisJMHg0MzUsIDB4MDAwMDAwMDUsCisJMHg0MzYsIDB4MDAwMDAwMDYsCisJMHg0MzcsIDB4MDAwMDAwMDcsCisJMHg0MzgsIDB4MDAwMDAwMDAsCisJMHg0MzksIDB4MDAwMDAwMDAsCisJMHg0M2EsIDB4MDAwMDAwMDAsCisJMHg0M2IsIDB4MDAwMDAwMDEsCisJMHg0M2MsIDB4MDAwMDAwMDQsCisJMHg0M2QsIDB4MDAwMDAwMDUsCisJMHg0M2UsIDB4MDAwMDAwMDYsCisJMHg0M2YsIDB4MDAwMDAwMDcsCisJMHg0NDAsIDB4MDAwMDAwNWQsCisJMHg0NDEsIDB4MDAwMDAwMDEsCisJMHg0NDIsIDB4MDAwMDAwMDAsCisJMHg0NDQsIDB4MDAwMDAwMTUsCisJMHg0NDUsIDB4MDAwMDAwZjAsCisJMHg0NDYsIDB4MDAwMDAwMGYsCisJMHg0NDcsIDB4MDAwMDAwMDAsCisJMHg0NTgsIDB4MDAwMDAwNDEsCisJMHg0NTksIDB4MDAwMDAwYTgsCisJMHg0NWEsIDB4MDAwMDAwNzIsCisJMHg0NWIsIDB4MDAwMDAwYjksCisJMHg0NjAsIDB4MDAwMDAwODgsCisJMHg0NjEsIDB4MDAwMDAwODgsCisJMHg0NjIsIDB4MDAwMDAwMDYsCisJMHg0NjMsIDB4MDAwMDAwMDMsCisJMHg0YzgsIDB4MDAwMDAwMDQsCisJMHg0YzksIDB4MDAwMDAwMDgsCisJMHg0Y2MsIDB4MDAwMDAwMDIsCisJMHg0Y2QsIDB4MDAwMDAwMjgsCisJMHg0Y2UsIDB4MDAwMDAwMDEsCisJMHg1MDAsIDB4MDAwMDAwMjYsCisJMHg1MDEsIDB4MDAwMDAwYTIsCisJMHg1MDIsIDB4MDAwMDAwMmYsCisJMHg1MDMsIDB4MDAwMDAwMDAsCisJMHg1MDQsIDB4MDAwMDAwMjgsCisJMHg1MDUsIDB4MDAwMDAwYTMsCisJMHg1MDYsIDB4MDAwMDAwNWUsCisJMHg1MDcsIDB4MDAwMDAwMDAsCisJMHg1MDgsIDB4MDAwMDAwMmIsCisJMHg1MDksIDB4MDAwMDAwYTQsCisJMHg1MGEsIDB4MDAwMDAwNWUsCisJMHg1MGIsIDB4MDAwMDAwMDAsCisJMHg1MGMsIDB4MDAwMDAwNGYsCisJMHg1MGQsIDB4MDAwMDAwYTQsCisJMHg1MGUsIDB4MDAwMDAwMDAsCisJMHg1MGYsIDB4MDAwMDAwMDAsCisJMHg1MTIsIDB4MDAwMDAwMWMsCisJMHg1MTQsIDB4MDAwMDAwMGEsCisJMHg1MTUsIDB4MDAwMDAwMTAsCisJMHg1MTYsIDB4MDAwMDAwMGEsCisJMHg1MTcsIDB4MDAwMDAwMTAsCisJMHg1MWEsIDB4MDAwMDAwMTYsCisJMHg1MjQsIDB4MDAwMDAwMGYsCisJMHg1MjUsIDB4MDAwMDAwNGYsCisJMHg1NDYsIDB4MDAwMDAwMjAsCisJMHg1NDcsIDB4MDAwMDAwMDAsCisJMHg1NTksIDB4MDAwMDAwMDIsCisJMHg1NWEsIDB4MDAwMDAwMDIsCisJMHg1NWQsIDB4MDAwMDAwZmYsCisJMHg2MDUsIDB4MDAwMDAwMzAsCisJMHg2MDgsIDB4MDAwMDAwMGUsCisJMHg2MDksIDB4MDAwMDAwMmEsCisJMHg2NTIsIDB4MDAwMDAwMjAsCisJMHg2M2MsIDB4MDAwMDAwMGEsCisJMHg2M2QsIDB4MDAwMDAwMGEsCisJMHg3MDAsIDB4MDAwMDAwMjEsCisJMHg3MDEsIDB4MDAwMDAwNDMsCisJMHg3MDIsIDB4MDAwMDAwNjUsCisJMHg3MDMsIDB4MDAwMDAwODcsCisJMHg3MDgsIDB4MDAwMDAwMjEsCisJMHg3MDksIDB4MDAwMDAwNDMsCisJMHg3MGEsIDB4MDAwMDAwNjUsCisJMHg3MGIsIDB4MDAwMDAwODcsCit9OworCit1MzIgUlRMODE5MkNFQUdDVEFCXzJUQVJSQVlbQUdDVEFCXzJUQVJSQVlMRU5HVEhdID0geworCTB4Yzc4LCAweDdiMDAwMDAxLAorCTB4Yzc4LCAweDdiMDEwMDAxLAorCTB4Yzc4LCAweDdiMDIwMDAxLAorCTB4Yzc4LCAweDdiMDMwMDAxLAorCTB4Yzc4LCAweDdiMDQwMDAxLAorCTB4Yzc4LCAweDdiMDUwMDAxLAorCTB4Yzc4LCAweDdhMDYwMDAxLAorCTB4Yzc4LCAweDc5MDcwMDAxLAorCTB4Yzc4LCAweDc4MDgwMDAxLAorCTB4Yzc4LCAweDc3MDkwMDAxLAorCTB4Yzc4LCAweDc2MGEwMDAxLAorCTB4Yzc4LCAweDc1MGIwMDAxLAorCTB4Yzc4LCAweDc0MGMwMDAxLAorCTB4Yzc4LCAweDczMGQwMDAxLAorCTB4Yzc4LCAweDcyMGUwMDAxLAorCTB4Yzc4LCAweDcxMGYwMDAxLAorCTB4Yzc4LCAweDcwMTAwMDAxLAorCTB4Yzc4LCAweDZmMTEwMDAxLAorCTB4Yzc4LCAweDZlMTIwMDAxLAorCTB4Yzc4LCAweDZkMTMwMDAxLAorCTB4Yzc4LCAweDZjMTQwMDAxLAorCTB4Yzc4LCAweDZiMTUwMDAxLAorCTB4Yzc4LCAweDZhMTYwMDAxLAorCTB4Yzc4LCAweDY5MTcwMDAxLAorCTB4Yzc4LCAweDY4MTgwMDAxLAorCTB4Yzc4LCAweDY3MTkwMDAxLAorCTB4Yzc4LCAweDY2MWEwMDAxLAorCTB4Yzc4LCAweDY1MWIwMDAxLAorCTB4Yzc4LCAweDY0MWMwMDAxLAorCTB4Yzc4LCAweDYzMWQwMDAxLAorCTB4Yzc4LCAweDYyMWUwMDAxLAorCTB4Yzc4LCAweDYxMWYwMDAxLAorCTB4Yzc4LCAweDYwMjAwMDAxLAorCTB4Yzc4LCAweDQ5MjEwMDAxLAorCTB4Yzc4LCAweDQ4MjIwMDAxLAorCTB4Yzc4LCAweDQ3MjMwMDAxLAorCTB4Yzc4LCAweDQ2MjQwMDAxLAorCTB4Yzc4LCAweDQ1MjUwMDAxLAorCTB4Yzc4LCAweDQ0MjYwMDAxLAorCTB4Yzc4LCAweDQzMjcwMDAxLAorCTB4Yzc4LCAweDQyMjgwMDAxLAorCTB4Yzc4LCAweDQxMjkwMDAxLAorCTB4Yzc4LCAweDQwMmEwMDAxLAorCTB4Yzc4LCAweDI2MmIwMDAxLAorCTB4Yzc4LCAweDI1MmMwMDAxLAorCTB4Yzc4LCAweDI0MmQwMDAxLAorCTB4Yzc4LCAweDIzMmUwMDAxLAorCTB4Yzc4LCAweDIyMmYwMDAxLAorCTB4Yzc4LCAweDIxMzAwMDAxLAorCTB4Yzc4LCAweDIwMzEwMDAxLAorCTB4Yzc4LCAweDA2MzIwMDAxLAorCTB4Yzc4LCAweDA1MzMwMDAxLAorCTB4Yzc4LCAweDA0MzQwMDAxLAorCTB4Yzc4LCAweDAzMzUwMDAxLAorCTB4Yzc4LCAweDAyMzYwMDAxLAorCTB4Yzc4LCAweDAxMzcwMDAxLAorCTB4Yzc4LCAweDAwMzgwMDAxLAorCTB4Yzc4LCAweDAwMzkwMDAxLAorCTB4Yzc4LCAweDAwM2EwMDAxLAorCTB4Yzc4LCAweDAwM2IwMDAxLAorCTB4Yzc4LCAweDAwM2MwMDAxLAorCTB4Yzc4LCAweDAwM2QwMDAxLAorCTB4Yzc4LCAweDAwM2UwMDAxLAorCTB4Yzc4LCAweDAwM2YwMDAxLAorCTB4Yzc4LCAweDdiNDAwMDAxLAorCTB4Yzc4LCAweDdiNDEwMDAxLAorCTB4Yzc4LCAweDdiNDIwMDAxLAorCTB4Yzc4LCAweDdiNDMwMDAxLAorCTB4Yzc4LCAweDdiNDQwMDAxLAorCTB4Yzc4LCAweDdiNDUwMDAxLAorCTB4Yzc4LCAweDdhNDYwMDAxLAorCTB4Yzc4LCAweDc5NDcwMDAxLAorCTB4Yzc4LCAweDc4NDgwMDAxLAorCTB4Yzc4LCAweDc3NDkwMDAxLAorCTB4Yzc4LCAweDc2NGEwMDAxLAorCTB4Yzc4LCAweDc1NGIwMDAxLAorCTB4Yzc4LCAweDc0NGMwMDAxLAorCTB4Yzc4LCAweDczNGQwMDAxLAorCTB4Yzc4LCAweDcyNGUwMDAxLAorCTB4Yzc4LCAweDcxNGYwMDAxLAorCTB4Yzc4LCAweDcwNTAwMDAxLAorCTB4Yzc4LCAweDZmNTEwMDAxLAorCTB4Yzc4LCAweDZlNTIwMDAxLAorCTB4Yzc4LCAweDZkNTMwMDAxLAorCTB4Yzc4LCAweDZjNTQwMDAxLAorCTB4Yzc4LCAweDZiNTUwMDAxLAorCTB4Yzc4LCAweDZhNTYwMDAxLAorCTB4Yzc4LCAweDY5NTcwMDAxLAorCTB4Yzc4LCAweDY4NTgwMDAxLAorCTB4Yzc4LCAweDY3NTkwMDAxLAorCTB4Yzc4LCAweDY2NWEwMDAxLAorCTB4Yzc4LCAweDY1NWIwMDAxLAorCTB4Yzc4LCAweDY0NWMwMDAxLAorCTB4Yzc4LCAweDYzNWQwMDAxLAorCTB4Yzc4LCAweDYyNWUwMDAxLAorCTB4Yzc4LCAweDYxNWYwMDAxLAorCTB4Yzc4LCAweDYwNjAwMDAxLAorCTB4Yzc4LCAweDQ5NjEwMDAxLAorCTB4Yzc4LCAweDQ4NjIwMDAxLAorCTB4Yzc4LCAweDQ3NjMwMDAxLAorCTB4Yzc4LCAweDQ2NjQwMDAxLAorCTB4Yzc4LCAweDQ1NjUwMDAxLAorCTB4Yzc4LCAweDQ0NjYwMDAxLAorCTB4Yzc4LCAweDQzNjcwMDAxLAorCTB4Yzc4LCAweDQyNjgwMDAxLAorCTB4Yzc4LCAweDQxNjkwMDAxLAorCTB4Yzc4LCAweDQwNmEwMDAxLAorCTB4Yzc4LCAweDI2NmIwMDAxLAorCTB4Yzc4LCAweDI1NmMwMDAxLAorCTB4Yzc4LCAweDI0NmQwMDAxLAorCTB4Yzc4LCAweDIzNmUwMDAxLAorCTB4Yzc4LCAweDIyNmYwMDAxLAorCTB4Yzc4LCAweDIxNzAwMDAxLAorCTB4Yzc4LCAweDIwNzEwMDAxLAorCTB4Yzc4LCAweDA2NzIwMDAxLAorCTB4Yzc4LCAweDA1NzMwMDAxLAorCTB4Yzc4LCAweDA0NzQwMDAxLAorCTB4Yzc4LCAweDAzNzUwMDAxLAorCTB4Yzc4LCAweDAyNzYwMDAxLAorCTB4Yzc4LCAweDAxNzcwMDAxLAorCTB4Yzc4LCAweDAwNzgwMDAxLAorCTB4Yzc4LCAweDAwNzkwMDAxLAorCTB4Yzc4LCAweDAwN2EwMDAxLAorCTB4Yzc4LCAweDAwN2IwMDAxLAorCTB4Yzc4LCAweDAwN2MwMDAxLAorCTB4Yzc4LCAweDAwN2QwMDAxLAorCTB4Yzc4LCAweDAwN2UwMDAxLAorCTB4Yzc4LCAweDAwN2YwMDAxLAorCTB4Yzc4LCAweDM4MDAwMDFlLAorCTB4Yzc4LCAweDM4MDEwMDFlLAorCTB4Yzc4LCAweDM4MDIwMDFlLAorCTB4Yzc4LCAweDM4MDMwMDFlLAorCTB4Yzc4LCAweDM4MDQwMDFlLAorCTB4Yzc4LCAweDM4MDUwMDFlLAorCTB4Yzc4LCAweDM4MDYwMDFlLAorCTB4Yzc4LCAweDM4MDcwMDFlLAorCTB4Yzc4LCAweDM4MDgwMDFlLAorCTB4Yzc4LCAweDNjMDkwMDFlLAorCTB4Yzc4LCAweDNlMGEwMDFlLAorCTB4Yzc4LCAweDQwMGIwMDFlLAorCTB4Yzc4LCAweDQ0MGMwMDFlLAorCTB4Yzc4LCAweDQ4MGQwMDFlLAorCTB4Yzc4LCAweDRjMGUwMDFlLAorCTB4Yzc4LCAweDUwMGYwMDFlLAorCTB4Yzc4LCAweDUyMTAwMDFlLAorCTB4Yzc4LCAweDU2MTEwMDFlLAorCTB4Yzc4LCAweDVhMTIwMDFlLAorCTB4Yzc4LCAweDVlMTMwMDFlLAorCTB4Yzc4LCAweDYwMTQwMDFlLAorCTB4Yzc4LCAweDYwMTUwMDFlLAorCTB4Yzc4LCAweDYwMTYwMDFlLAorCTB4Yzc4LCAweDYyMTcwMDFlLAorCTB4Yzc4LCAweDYyMTgwMDFlLAorCTB4Yzc4LCAweDYyMTkwMDFlLAorCTB4Yzc4LCAweDYyMWEwMDFlLAorCTB4Yzc4LCAweDYyMWIwMDFlLAorCTB4Yzc4LCAweDYyMWMwMDFlLAorCTB4Yzc4LCAweDYyMWQwMDFlLAorCTB4Yzc4LCAweDYyMWUwMDFlLAorCTB4Yzc4LCAweDYyMWYwMDFlLAorfTsKKwordTMyIFJUTDgxOTJDRUFHQ1RBQl8xVEFSUkFZW0FHQ1RBQl8xVEFSUkFZTEVOR1RIXSA9IHsKKwkweGM3OCwgMHg3YjAwMDAwMSwKKwkweGM3OCwgMHg3YjAxMDAwMSwKKwkweGM3OCwgMHg3YjAyMDAwMSwKKwkweGM3OCwgMHg3YjAzMDAwMSwKKwkweGM3OCwgMHg3YjA0MDAwMSwKKwkweGM3OCwgMHg3YjA1MDAwMSwKKwkweGM3OCwgMHg3YTA2MDAwMSwKKwkweGM3OCwgMHg3OTA3MDAwMSwKKwkweGM3OCwgMHg3ODA4MDAwMSwKKwkweGM3OCwgMHg3NzA5MDAwMSwKKwkweGM3OCwgMHg3NjBhMDAwMSwKKwkweGM3OCwgMHg3NTBiMDAwMSwKKwkweGM3OCwgMHg3NDBjMDAwMSwKKwkweGM3OCwgMHg3MzBkMDAwMSwKKwkweGM3OCwgMHg3MjBlMDAwMSwKKwkweGM3OCwgMHg3MTBmMDAwMSwKKwkweGM3OCwgMHg3MDEwMDAwMSwKKwkweGM3OCwgMHg2ZjExMDAwMSwKKwkweGM3OCwgMHg2ZTEyMDAwMSwKKwkweGM3OCwgMHg2ZDEzMDAwMSwKKwkweGM3OCwgMHg2YzE0MDAwMSwKKwkweGM3OCwgMHg2YjE1MDAwMSwKKwkweGM3OCwgMHg2YTE2MDAwMSwKKwkweGM3OCwgMHg2OTE3MDAwMSwKKwkweGM3OCwgMHg2ODE4MDAwMSwKKwkweGM3OCwgMHg2NzE5MDAwMSwKKwkweGM3OCwgMHg2NjFhMDAwMSwKKwkweGM3OCwgMHg2NTFiMDAwMSwKKwkweGM3OCwgMHg2NDFjMDAwMSwKKwkweGM3OCwgMHg2MzFkMDAwMSwKKwkweGM3OCwgMHg2MjFlMDAwMSwKKwkweGM3OCwgMHg2MTFmMDAwMSwKKwkweGM3OCwgMHg2MDIwMDAwMSwKKwkweGM3OCwgMHg0OTIxMDAwMSwKKwkweGM3OCwgMHg0ODIyMDAwMSwKKwkweGM3OCwgMHg0NzIzMDAwMSwKKwkweGM3OCwgMHg0NjI0MDAwMSwKKwkweGM3OCwgMHg0NTI1MDAwMSwKKwkweGM3OCwgMHg0NDI2MDAwMSwKKwkweGM3OCwgMHg0MzI3MDAwMSwKKwkweGM3OCwgMHg0MjI4MDAwMSwKKwkweGM3OCwgMHg0MTI5MDAwMSwKKwkweGM3OCwgMHg0MDJhMDAwMSwKKwkweGM3OCwgMHgyNjJiMDAwMSwKKwkweGM3OCwgMHgyNTJjMDAwMSwKKwkweGM3OCwgMHgyNDJkMDAwMSwKKwkweGM3OCwgMHgyMzJlMDAwMSwKKwkweGM3OCwgMHgyMjJmMDAwMSwKKwkweGM3OCwgMHgyMTMwMDAwMSwKKwkweGM3OCwgMHgyMDMxMDAwMSwKKwkweGM3OCwgMHgwNjMyMDAwMSwKKwkweGM3OCwgMHgwNTMzMDAwMSwKKwkweGM3OCwgMHgwNDM0MDAwMSwKKwkweGM3OCwgMHgwMzM1MDAwMSwKKwkweGM3OCwgMHgwMjM2MDAwMSwKKwkweGM3OCwgMHgwMTM3MDAwMSwKKwkweGM3OCwgMHgwMDM4MDAwMSwKKwkweGM3OCwgMHgwMDM5MDAwMSwKKwkweGM3OCwgMHgwMDNhMDAwMSwKKwkweGM3OCwgMHgwMDNiMDAwMSwKKwkweGM3OCwgMHgwMDNjMDAwMSwKKwkweGM3OCwgMHgwMDNkMDAwMSwKKwkweGM3OCwgMHgwMDNlMDAwMSwKKwkweGM3OCwgMHgwMDNmMDAwMSwKKwkweGM3OCwgMHg3YjQwMDAwMSwKKwkweGM3OCwgMHg3YjQxMDAwMSwKKwkweGM3OCwgMHg3YjQyMDAwMSwKKwkweGM3OCwgMHg3YjQzMDAwMSwKKwkweGM3OCwgMHg3YjQ0MDAwMSwKKwkweGM3OCwgMHg3YjQ1MDAwMSwKKwkweGM3OCwgMHg3YTQ2MDAwMSwKKwkweGM3OCwgMHg3OTQ3MDAwMSwKKwkweGM3OCwgMHg3ODQ4MDAwMSwKKwkweGM3OCwgMHg3NzQ5MDAwMSwKKwkweGM3OCwgMHg3NjRhMDAwMSwKKwkweGM3OCwgMHg3NTRiMDAwMSwKKwkweGM3OCwgMHg3NDRjMDAwMSwKKwkweGM3OCwgMHg3MzRkMDAwMSwKKwkweGM3OCwgMHg3MjRlMDAwMSwKKwkweGM3OCwgMHg3MTRmMDAwMSwKKwkweGM3OCwgMHg3MDUwMDAwMSwKKwkweGM3OCwgMHg2ZjUxMDAwMSwKKwkweGM3OCwgMHg2ZTUyMDAwMSwKKwkweGM3OCwgMHg2ZDUzMDAwMSwKKwkweGM3OCwgMHg2YzU0MDAwMSwKKwkweGM3OCwgMHg2YjU1MDAwMSwKKwkweGM3OCwgMHg2YTU2MDAwMSwKKwkweGM3OCwgMHg2OTU3MDAwMSwKKwkweGM3OCwgMHg2ODU4MDAwMSwKKwkweGM3OCwgMHg2NzU5MDAwMSwKKwkweGM3OCwgMHg2NjVhMDAwMSwKKwkweGM3OCwgMHg2NTViMDAwMSwKKwkweGM3OCwgMHg2NDVjMDAwMSwKKwkweGM3OCwgMHg2MzVkMDAwMSwKKwkweGM3OCwgMHg2MjVlMDAwMSwKKwkweGM3OCwgMHg2MTVmMDAwMSwKKwkweGM3OCwgMHg2MDYwMDAwMSwKKwkweGM3OCwgMHg0OTYxMDAwMSwKKwkweGM3OCwgMHg0ODYyMDAwMSwKKwkweGM3OCwgMHg0NzYzMDAwMSwKKwkweGM3OCwgMHg0NjY0MDAwMSwKKwkweGM3OCwgMHg0NTY1MDAwMSwKKwkweGM3OCwgMHg0NDY2MDAwMSwKKwkweGM3OCwgMHg0MzY3MDAwMSwKKwkweGM3OCwgMHg0MjY4MDAwMSwKKwkweGM3OCwgMHg0MTY5MDAwMSwKKwkweGM3OCwgMHg0MDZhMDAwMSwKKwkweGM3OCwgMHgyNjZiMDAwMSwKKwkweGM3OCwgMHgyNTZjMDAwMSwKKwkweGM3OCwgMHgyNDZkMDAwMSwKKwkweGM3OCwgMHgyMzZlMDAwMSwKKwkweGM3OCwgMHgyMjZmMDAwMSwKKwkweGM3OCwgMHgyMTcwMDAwMSwKKwkweGM3OCwgMHgyMDcxMDAwMSwKKwkweGM3OCwgMHgwNjcyMDAwMSwKKwkweGM3OCwgMHgwNTczMDAwMSwKKwkweGM3OCwgMHgwNDc0MDAwMSwKKwkweGM3OCwgMHgwMzc1MDAwMSwKKwkweGM3OCwgMHgwMjc2MDAwMSwKKwkweGM3OCwgMHgwMTc3MDAwMSwKKwkweGM3OCwgMHgwMDc4MDAwMSwKKwkweGM3OCwgMHgwMDc5MDAwMSwKKwkweGM3OCwgMHgwMDdhMDAwMSwKKwkweGM3OCwgMHgwMDdiMDAwMSwKKwkweGM3OCwgMHgwMDdjMDAwMSwKKwkweGM3OCwgMHgwMDdkMDAwMSwKKwkweGM3OCwgMHgwMDdlMDAwMSwKKwkweGM3OCwgMHgwMDdmMDAwMSwKKwkweGM3OCwgMHgzODAwMDAxZSwKKwkweGM3OCwgMHgzODAxMDAxZSwKKwkweGM3OCwgMHgzODAyMDAxZSwKKwkweGM3OCwgMHgzODAzMDAxZSwKKwkweGM3OCwgMHgzODA0MDAxZSwKKwkweGM3OCwgMHgzODA1MDAxZSwKKwkweGM3OCwgMHgzODA2MDAxZSwKKwkweGM3OCwgMHgzODA3MDAxZSwKKwkweGM3OCwgMHgzODA4MDAxZSwKKwkweGM3OCwgMHgzYzA5MDAxZSwKKwkweGM3OCwgMHgzZTBhMDAxZSwKKwkweGM3OCwgMHg0MDBiMDAxZSwKKwkweGM3OCwgMHg0NDBjMDAxZSwKKwkweGM3OCwgMHg0ODBkMDAxZSwKKwkweGM3OCwgMHg0YzBlMDAxZSwKKwkweGM3OCwgMHg1MDBmMDAxZSwKKwkweGM3OCwgMHg1MjEwMDAxZSwKKwkweGM3OCwgMHg1NjExMDAxZSwKKwkweGM3OCwgMHg1YTEyMDAxZSwKKwkweGM3OCwgMHg1ZTEzMDAxZSwKKwkweGM3OCwgMHg2MDE0MDAxZSwKKwkweGM3OCwgMHg2MDE1MDAxZSwKKwkweGM3OCwgMHg2MDE2MDAxZSwKKwkweGM3OCwgMHg2MjE3MDAxZSwKKwkweGM3OCwgMHg2MjE4MDAxZSwKKwkweGM3OCwgMHg2MjE5MDAxZSwKKwkweGM3OCwgMHg2MjFhMDAxZSwKKwkweGM3OCwgMHg2MjFiMDAxZSwKKwkweGM3OCwgMHg2MjFjMDAxZSwKKwkweGM3OCwgMHg2MjFkMDAxZSwKKwkweGM3OCwgMHg2MjFlMDAxZSwKKwkweGM3OCwgMHg2MjFmMDAxZSwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS90YWJsZS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2UvdGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTZlOGI2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2UvdGFibGUuaApAQCAtMCwwICsxLDU4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDktMjAxMCAgUmVhbHRlayBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLCBVU0EKKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIHdsYW5mYWUgPHdsYW5mYWVAcmVhbHRlay5jb20+CisgKiBSZWFsdGVrIENvcnBvcmF0aW9uLCBOby4gMiwgSW5ub3ZhdGlvbiBSb2FkIElJLCBIc2luY2h1IFNjaWVuY2UgUGFyaywKKyAqIEhzaW5jaHUgMzAwLCBUYWl3YW4uCisgKgorICogQ3JlYXRlZCBvbiAgMjAxMC8gNS8xOCwgIDE6NDEKKyAqCisgKiBMYXJyeSBGaW5nZXIgPExhcnJ5LkZpbmdlckBsd2Zpbmdlci5uZXQ+CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fUlRMOTJDRV9UQUJMRV9fSF8KKyNkZWZpbmUgX19SVEw5MkNFX1RBQkxFX19IXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2RlZmluZSBQSFlfUkVHXzJUQVJSQVlfTEVOR1RICTM3NAorZXh0ZXJuIHUzMiBSVEw4MTkyQ0VQSFlfUkVHXzJUQVJSQVlbUEhZX1JFR18yVEFSUkFZX0xFTkdUSF07CisjZGVmaW5lIFBIWV9SRUdfMVRBUlJBWV9MRU5HVEgJMzc0CitleHRlcm4gdTMyIFJUTDgxOTJDRVBIWV9SRUdfMVRBUlJBWVtQSFlfUkVHXzFUQVJSQVlfTEVOR1RIXTsKKyNkZWZpbmUgUEhZX1JFR19BUlJBWV9QR0xFTkdUSAkxOTIKK2V4dGVybiB1MzIgUlRMODE5MkNFUEhZX1JFR19BUlJBWV9QR1tQSFlfUkVHX0FSUkFZX1BHTEVOR1RIXTsKKyNkZWZpbmUgUkFESU9BXzJUQVJSQVlMRU5HVEgJMjgyCitleHRlcm4gdTMyIFJUTDgxOTJDRVJBRElPQV8yVEFSUkFZW1JBRElPQV8yVEFSUkFZTEVOR1RIXTsKKyNkZWZpbmUgUkFESU9CXzJUQVJSQVlMRU5HVEgJNzgKK2V4dGVybiB1MzIgUlRMODE5MkNFX1JBRElPQl8yVEFSUkFZW1JBRElPQl8yVEFSUkFZTEVOR1RIXTsKKyNkZWZpbmUgUkFESU9BXzFUQVJSQVlMRU5HVEgJMjgyCitleHRlcm4gdTMyIFJUTDgxOTJDRV9SQURJT0FfMVRBUlJBWVtSQURJT0FfMVRBUlJBWUxFTkdUSF07CisjZGVmaW5lIFJBRElPQl8xVEFSUkFZTEVOR1RICTEKK2V4dGVybiB1MzIgUlRMODE5MkNFX1JBRElPQl8xVEFSUkFZW1JBRElPQl8xVEFSUkFZTEVOR1RIXTsKKyNkZWZpbmUgTUFDXzJUX0FSUkFZTEVOR1RICTE2MgorZXh0ZXJuIHUzMiBSVEw4MTkyQ0VNQUNfMlRfQVJSQVlbTUFDXzJUX0FSUkFZTEVOR1RIXTsKKyNkZWZpbmUgQUdDVEFCXzJUQVJSQVlMRU5HVEgJMzIwCitleHRlcm4gdTMyIFJUTDgxOTJDRUFHQ1RBQl8yVEFSUkFZW0FHQ1RBQl8yVEFSUkFZTEVOR1RIXTsKKyNkZWZpbmUgQUdDVEFCXzFUQVJSQVlMRU5HVEgJMzIwCitleHRlcm4gdTMyIFJUTDgxOTJDRUFHQ1RBQl8xVEFSUkFZW0FHQ1RBQl8xVEFSUkFZTEVOR1RIXTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS90cnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmNlL3RyeC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmNTg1MmYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS90cnguYwpAQCAtMCwwICsxLDEwMzEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQoYykgMjAwOS0yMDEwICBSZWFsdGVrIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAsIFVTQQorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgTElDRU5TRS4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogd2xhbmZhZSA8d2xhbmZhZUByZWFsdGVrLmNvbT4KKyAqIFJlYWx0ZWsgQ29ycG9yYXRpb24sIE5vLiAyLCBJbm5vdmF0aW9uIFJvYWQgSUksIEhzaW5jaHUgU2NpZW5jZSBQYXJrLAorICogSHNpbmNodSAzMDAsIFRhaXdhbi4KKyAqCisgKiBMYXJyeSBGaW5nZXIgPExhcnJ5LkZpbmdlckBsd2Zpbmdlci5uZXQ+CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAiLi4vd2lmaS5oIgorI2luY2x1ZGUgIi4uL3BjaS5oIgorI2luY2x1ZGUgIi4uL2Jhc2UuaCIKKyNpbmNsdWRlICJyZWcuaCIKKyNpbmNsdWRlICJkZWYuaCIKKyNpbmNsdWRlICJwaHkuaCIKKyNpbmNsdWRlICJ0cnguaCIKKyNpbmNsdWRlICJsZWQuaCIKKworc3RhdGljIGVudW0gcnRsX2Rlc2NfcXNlbCBfcnRsOTJjZV9tYXBfaHdxdWV1ZV90b19md3F1ZXVlKHUxNiBmYywKKwkJCQkJCQkgIHVuc2lnbmVkIGludAorCQkJCQkJCSAgc2tiX3F1ZXVlKQoreworCWVudW0gcnRsX2Rlc2NfcXNlbCBxc2VsOworCisJaWYgKHVubGlrZWx5KGllZWU4MDIxMV9pc19iZWFjb24oZmMpKSkgeworCQlxc2VsID0gUVNMVF9CRUFDT047CisJCXJldHVybiBxc2VsOworCX0KKworCWlmIChpZWVlODAyMTFfaXNfbWdtdChmYykpIHsKKwkJcXNlbCA9IFFTTFRfTUdOVDsKKwkJcmV0dXJuIHFzZWw7CisJfQorCisJc3dpdGNoIChza2JfcXVldWUpIHsKKwljYXNlIFZPX1FVRVVFOgorCQlxc2VsID0gUVNMVF9WTzsKKwkJYnJlYWs7CisJY2FzZSBWSV9RVUVVRToKKwkJcXNlbCA9IFFTTFRfVkk7CisJCWJyZWFrOworCWNhc2UgQkVfUVVFVUU6CisJCXFzZWwgPSBRU0xUX0JFOworCQlicmVhazsKKwljYXNlIEJLX1FVRVVFOgorCQlxc2VsID0gUVNMVF9CSzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcXNlbCA9IFFTTFRfQkU7CisJCVJUX0FTU0VSVChmYWxzZSwgKCJCRSBxdWV1ZSwgc2tiX3F1ZXVlOiVkLCIKKwkJCQkgICIgc2V0IHFzZWwgPSAweCVYXG4iLCBza2JfcXVldWUsIFFTTFRfQkUpKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiBxc2VsOworfQorCitzdGF0aWMgaW50IF9ydGw5MmNlX3JhdGVfbWFwcGluZyhib29sIGlzaHQsIHU4IGRlc2NfcmF0ZSwgYm9vbCBmaXJzdF9hbXBkdSkKK3sKKwlpbnQgcmF0ZV9pZHg7CisKKwlpZiAoZmlyc3RfYW1wZHUpIHsKKwkJaWYgKGZhbHNlID09IGlzaHQpIHsKKwkJCXN3aXRjaCAoZGVzY19yYXRlKSB7CisJCQljYXNlIERFU0M5MkNfUkFURTFNOgorCQkJCXJhdGVfaWR4ID0gMDsKKwkJCQlicmVhazsKKwkJCWNhc2UgREVTQzkyQ19SQVRFMk06CisJCQkJcmF0ZV9pZHggPSAxOworCQkJCWJyZWFrOworCQkJY2FzZSBERVNDOTJDX1JBVEU1XzVNOgorCQkJCXJhdGVfaWR4ID0gMjsKKwkJCQlicmVhazsKKwkJCWNhc2UgREVTQzkyQ19SQVRFMTFNOgorCQkJCXJhdGVfaWR4ID0gMzsKKwkJCQlicmVhazsKKwkJCWNhc2UgREVTQzkyQ19SQVRFNk06CisJCQkJcmF0ZV9pZHggPSA0OworCQkJCWJyZWFrOworCQkJY2FzZSBERVNDOTJDX1JBVEU5TToKKwkJCQlyYXRlX2lkeCA9IDU7CisJCQkJYnJlYWs7CisJCQljYXNlIERFU0M5MkNfUkFURTEyTToKKwkJCQlyYXRlX2lkeCA9IDY7CisJCQkJYnJlYWs7CisJCQljYXNlIERFU0M5MkNfUkFURTE4TToKKwkJCQlyYXRlX2lkeCA9IDc7CisJCQkJYnJlYWs7CisJCQljYXNlIERFU0M5MkNfUkFURTI0TToKKwkJCQlyYXRlX2lkeCA9IDg7CisJCQkJYnJlYWs7CisJCQljYXNlIERFU0M5MkNfUkFURTM2TToKKwkJCQlyYXRlX2lkeCA9IDk7CisJCQkJYnJlYWs7CisJCQljYXNlIERFU0M5MkNfUkFURTQ4TToKKwkJCQlyYXRlX2lkeCA9IDEwOworCQkJCWJyZWFrOworCQkJY2FzZSBERVNDOTJDX1JBVEU1NE06CisJCQkJcmF0ZV9pZHggPSAxMTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJcmF0ZV9pZHggPSAwOworCQkJCWJyZWFrOworCQkJfQorCQl9IGVsc2UgeworCQkJcmF0ZV9pZHggPSAxMTsKKwkJfQorCisJCXJldHVybiByYXRlX2lkeDsKKwl9CisKKwlzd2l0Y2ggKGRlc2NfcmF0ZSkgeworCWNhc2UgREVTQzkyQ19SQVRFMU06CisJCXJhdGVfaWR4ID0gMDsKKwkJYnJlYWs7CisJY2FzZSBERVNDOTJDX1JBVEUyTToKKwkJcmF0ZV9pZHggPSAxOworCQlicmVhazsKKwljYXNlIERFU0M5MkNfUkFURTVfNU06CisJCXJhdGVfaWR4ID0gMjsKKwkJYnJlYWs7CisJY2FzZSBERVNDOTJDX1JBVEUxMU06CisJCXJhdGVfaWR4ID0gMzsKKwkJYnJlYWs7CisJY2FzZSBERVNDOTJDX1JBVEU2TToKKwkJcmF0ZV9pZHggPSA0OworCQlicmVhazsKKwljYXNlIERFU0M5MkNfUkFURTlNOgorCQlyYXRlX2lkeCA9IDU7CisJCWJyZWFrOworCWNhc2UgREVTQzkyQ19SQVRFMTJNOgorCQlyYXRlX2lkeCA9IDY7CisJCWJyZWFrOworCWNhc2UgREVTQzkyQ19SQVRFMThNOgorCQlyYXRlX2lkeCA9IDc7CisJCWJyZWFrOworCWNhc2UgREVTQzkyQ19SQVRFMjRNOgorCQlyYXRlX2lkeCA9IDg7CisJCWJyZWFrOworCWNhc2UgREVTQzkyQ19SQVRFMzZNOgorCQlyYXRlX2lkeCA9IDk7CisJCWJyZWFrOworCWNhc2UgREVTQzkyQ19SQVRFNDhNOgorCQlyYXRlX2lkeCA9IDEwOworCQlicmVhazsKKwljYXNlIERFU0M5MkNfUkFURTU0TToKKwkJcmF0ZV9pZHggPSAxMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmF0ZV9pZHggPSAxMTsKKwkJYnJlYWs7CisJfQorCXJldHVybiByYXRlX2lkeDsKK30KKworc3RhdGljIHU4IF9ydGw5MmNfcXVlcnlfcnhwd3JwZXJjZW50YWdlKGNoYXIgYW50cG93ZXIpCit7CisJaWYgKChhbnRwb3dlciA8PSAtMTAwKSB8fCAoYW50cG93ZXIgPj0gMjApKQorCQlyZXR1cm4gMDsKKwllbHNlIGlmIChhbnRwb3dlciA+PSAwKQorCQlyZXR1cm4gMTAwOworCWVsc2UKKwkJcmV0dXJuIDEwMCArIGFudHBvd2VyOworfQorCitzdGF0aWMgdTggX3J0bDkyY19ldm1fZGJfdG9fcGVyY2VudGFnZShjaGFyIHZhbHVlKQoreworCWNoYXIgcmV0X3ZhbDsKKwlyZXRfdmFsID0gdmFsdWU7CisKKwlpZiAocmV0X3ZhbCA+PSAwKQorCQlyZXRfdmFsID0gMDsKKworCWlmIChyZXRfdmFsIDw9IC0zMykKKwkJcmV0X3ZhbCA9IC0zMzsKKworCXJldF92YWwgPSAwIC0gcmV0X3ZhbDsKKwlyZXRfdmFsICo9IDM7CisKKwlpZiAocmV0X3ZhbCA9PSA5OSkKKwkJcmV0X3ZhbCA9IDEwMDsKKworCXJldHVybiByZXRfdmFsOworfQorCitzdGF0aWMgbG9uZyBfcnRsOTJjZV90cmFuc2xhdGVfdG9kYm0oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgICB1OCBzaWduYWxfc3RyZW5ndGhfaW5kZXgpCit7CisJbG9uZyBzaWduYWxfcG93ZXI7CisKKwlzaWduYWxfcG93ZXIgPSAobG9uZykoKHNpZ25hbF9zdHJlbmd0aF9pbmRleCArIDEpID4+IDEpOworCXNpZ25hbF9wb3dlciAtPSA5NTsKKwlyZXR1cm4gc2lnbmFsX3Bvd2VyOworfQorCitzdGF0aWMgbG9uZyBfcnRsOTJjZV9zaWduYWxfc2NhbGVfbWFwcGluZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJbG9uZyBjdXJyc2lnKQoreworCWxvbmcgcmV0c2lnOworCisJaWYgKGN1cnJzaWcgPj0gNjEgJiYgY3VycnNpZyA8PSAxMDApCisJCXJldHNpZyA9IDkwICsgKChjdXJyc2lnIC0gNjApIC8gNCk7CisJZWxzZSBpZiAoY3VycnNpZyA+PSA0MSAmJiBjdXJyc2lnIDw9IDYwKQorCQlyZXRzaWcgPSA3OCArICgoY3VycnNpZyAtIDQwKSAvIDIpOworCWVsc2UgaWYgKGN1cnJzaWcgPj0gMzEgJiYgY3VycnNpZyA8PSA0MCkKKwkJcmV0c2lnID0gNjYgKyAoY3VycnNpZyAtIDMwKTsKKwllbHNlIGlmIChjdXJyc2lnID49IDIxICYmIGN1cnJzaWcgPD0gMzApCisJCXJldHNpZyA9IDU0ICsgKGN1cnJzaWcgLSAyMCk7CisJZWxzZSBpZiAoY3VycnNpZyA+PSA1ICYmIGN1cnJzaWcgPD0gMjApCisJCXJldHNpZyA9IDQyICsgKCgoY3VycnNpZyAtIDUpICogMikgLyAzKTsKKwllbHNlIGlmIChjdXJyc2lnID09IDQpCisJCXJldHNpZyA9IDM2OworCWVsc2UgaWYgKGN1cnJzaWcgPT0gMykKKwkJcmV0c2lnID0gMjc7CisJZWxzZSBpZiAoY3VycnNpZyA9PSAyKQorCQlyZXRzaWcgPSAxODsKKwllbHNlIGlmIChjdXJyc2lnID09IDEpCisJCXJldHNpZyA9IDk7CisJZWxzZQorCQlyZXRzaWcgPSBjdXJyc2lnOworCisJcmV0dXJuIHJldHNpZzsKK30KKworc3RhdGljIHZvaWQgX3J0bDkyY2VfcXVlcnlfcnhwaHlzdGF0dXMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgICAgIHN0cnVjdCBydGxfc3RhdHMgKnBzdGF0cywKKwkJCQkgICAgICAgc3RydWN0IHJ4X2Rlc2NfOTJjICpwZGVzYywKKwkJCQkgICAgICAgc3RydWN0IHJ4X2Z3aW5mb185MmMgKnBfZHJ2aW5mbywKKwkJCQkgICAgICAgYm9vbCBicGFja2V0X21hdGNoX2Jzc2lkLAorCQkJCSAgICAgICBib29sIGJwYWNrZXRfdG9zZWxmLAorCQkJCSAgICAgICBib29sIGJfcGFja2V0X2JlYWNvbikKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHBoeV9zdHNfY2NrXzgxOTJzX3QgKmNja19idWY7CisJczggcnhfcHdyX2FsbCwgcnhfcHdyWzRdOworCXU4IHJmX3J4X251bSwgZXZtLCBwd2RiX2FsbDsKKwl1OCBpLCBtYXhfc3BhdGlhbF9zdHJlYW07CisJdTMyIHJzc2ksIHRvdGFsX3Jzc2k7CisJYm9vbCBpc19jY2tfcmF0ZTsKKworCWlzX2Nja19yYXRlID0gUlhfSEFMX0lTX0NDS19SQVRFKHBkZXNjKTsKKwlwc3RhdHMtPmJfcGFja2V0X21hdGNoYnNzaWQgPSBicGFja2V0X21hdGNoX2Jzc2lkOworCXBzdGF0cy0+Yl9wYWNrZXRfdG9zZWxmID0gYnBhY2tldF90b3NlbGY7CisJcHN0YXRzLT5iX2lzX2NjayA9IGlzX2Nja19yYXRlOworCXBzdGF0cy0+Yl9wYWNrZXRfYmVhY29uID0gYl9wYWNrZXRfYmVhY29uOworCXBzdGF0cy0+Yl9pc19jY2sgPSBpc19jY2tfcmF0ZTsKKwlwc3RhdHMtPnJ4X21pbW9fc2lnbmFscXVhbGl0eVswXSA9IC0xOworCXBzdGF0cy0+cnhfbWltb19zaWduYWxxdWFsaXR5WzFdID0gLTE7CisKKwlpZiAoaXNfY2NrX3JhdGUpIHsKKwkJdTggcmVwb3J0LCBjY2tfaGlnaHB3cjsKKwkJY2NrX2J1ZiA9IChzdHJ1Y3QgcGh5X3N0c19jY2tfODE5MnNfdCAqKXBfZHJ2aW5mbzsKKworCQljY2tfaGlnaHB3ciA9ICh1OCkgcnRsX2dldF9iYnJlZyhodywKKwkJCQkJIFJGUEdBMF9YQV9IU1NJUEFSQU1FVEVSMiwKKwkJCQkJIEJJVCg5KSk7CisJCWlmICghY2NrX2hpZ2hwd3IpIHsKKwkJCXU4IGNja19hZ2NfcnB0ID0gY2NrX2J1Zi0+Y2NrX2FnY19ycHQ7CisJCQlyZXBvcnQgPSBjY2tfYnVmLT5jY2tfYWdjX3JwdCAmIDB4YzA7CisJCQlyZXBvcnQgPSByZXBvcnQgPj4gNjsKKwkJCXN3aXRjaCAocmVwb3J0KSB7CisJCQljYXNlIDB4MzoKKwkJCQlyeF9wd3JfYWxsID0gLTQ2IC0gKGNja19hZ2NfcnB0ICYgMHgzZSk7CisJCQkJYnJlYWs7CisJCQljYXNlIDB4MjoKKwkJCQlyeF9wd3JfYWxsID0gLTI2IC0gKGNja19hZ2NfcnB0ICYgMHgzZSk7CisJCQkJYnJlYWs7CisJCQljYXNlIDB4MToKKwkJCQlyeF9wd3JfYWxsID0gLTEyIC0gKGNja19hZ2NfcnB0ICYgMHgzZSk7CisJCQkJYnJlYWs7CisJCQljYXNlIDB4MDoKKwkJCQlyeF9wd3JfYWxsID0gMTYgLSAoY2NrX2FnY19ycHQgJiAweDNlKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXU4IGNja19hZ2NfcnB0ID0gY2NrX2J1Zi0+Y2NrX2FnY19ycHQ7CisJCQlyZXBvcnQgPSBwX2RydmluZm8tPmNmb3Nob1swXSAmIDB4NjA7CisJCQlyZXBvcnQgPSByZXBvcnQgPj4gNTsKKwkJCXN3aXRjaCAocmVwb3J0KSB7CisJCQljYXNlIDB4MzoKKwkJCQlyeF9wd3JfYWxsID0gLTQ2IC0gKChjY2tfYWdjX3JwdCAmIDB4MWYpIDw8IDEpOworCQkJCWJyZWFrOworCQkJY2FzZSAweDI6CisJCQkJcnhfcHdyX2FsbCA9IC0yNiAtICgoY2NrX2FnY19ycHQgJiAweDFmKSA8PCAxKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMHgxOgorCQkJCXJ4X3B3cl9hbGwgPSAtMTIgLSAoKGNja19hZ2NfcnB0ICYgMHgxZikgPDwgMSk7CisJCQkJYnJlYWs7CisJCQljYXNlIDB4MDoKKwkJCQlyeF9wd3JfYWxsID0gMTYgLSAoKGNja19hZ2NfcnB0ICYgMHgxZikgPDwgMSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlwd2RiX2FsbCA9IF9ydGw5MmNfcXVlcnlfcnhwd3JwZXJjZW50YWdlKHJ4X3B3cl9hbGwpOworCQlwc3RhdHMtPnJ4X3B3ZGJfYWxsID0gcHdkYl9hbGw7CisJCXBzdGF0cy0+cmVjdnNpZ25hbHBvd2VyID0gcnhfcHdyX2FsbDsKKworCQlpZiAoYnBhY2tldF9tYXRjaF9ic3NpZCkgeworCQkJdTggc3E7CisJCQlpZiAocHN0YXRzLT5yeF9wd2RiX2FsbCA+IDQwKQorCQkJCXNxID0gMTAwOworCQkJZWxzZSB7CisJCQkJc3EgPSBjY2tfYnVmLT5zcV9ycHQ7CisJCQkJaWYgKHNxID4gNjQpCisJCQkJCXNxID0gMDsKKwkJCQllbHNlIGlmIChzcSA8IDIwKQorCQkJCQlzcSA9IDEwMDsKKwkJCQllbHNlCisJCQkJCXNxID0gKCg2NCAtIHNxKSAqIDEwMCkgLyA0NDsKKwkJCX0KKworCQkJcHN0YXRzLT5zaWduYWxxdWFsaXR5ID0gc3E7CisJCQlwc3RhdHMtPnJ4X21pbW9fc2lnbmFscXVhbGl0eVswXSA9IHNxOworCQkJcHN0YXRzLT5yeF9taW1vX3NpZ25hbHF1YWxpdHlbMV0gPSAtMTsKKwkJfQorCX0gZWxzZSB7CisJCXJ0bHByaXYtPmRtLmJyZnBhdGhfcnhlbmFibGVbMF0gPQorCQkgICAgcnRscHJpdi0+ZG0uYnJmcGF0aF9yeGVuYWJsZVsxXSA9IHRydWU7CisJCWZvciAoaSA9IFJGOTBfUEFUSF9BOyBpIDwgUkY5MF9QQVRIX01BWDsgaSsrKSB7CisJCQlpZiAocnRscHJpdi0+ZG0uYnJmcGF0aF9yeGVuYWJsZVtpXSkKKwkJCQlyZl9yeF9udW0rKzsKKworCQkJcnhfcHdyW2ldID0KKwkJCSAgICAoKHBfZHJ2aW5mby0+Z2Fpbl90cnN3W2ldICYgMHgzZikgKiAyKSAtIDExMDsKKwkJCXJzc2kgPSBfcnRsOTJjX3F1ZXJ5X3J4cHdycGVyY2VudGFnZShyeF9wd3JbaV0pOworCQkJdG90YWxfcnNzaSArPSByc3NpOworCQkJcnRscHJpdi0+c3RhdHMucnhfc25yX2RiW2ldID0KKwkJCSAgICAobG9uZykocF9kcnZpbmZvLT5yeHNucltpXSAvIDIpOworCisJCQlpZiAoYnBhY2tldF9tYXRjaF9ic3NpZCkKKwkJCQlwc3RhdHMtPnJ4X21pbW9fc2lnbmFsc3RyZW5ndGhbaV0gPSAodTgpIHJzc2k7CisJCX0KKworCQlyeF9wd3JfYWxsID0gKChwX2RydmluZm8tPnB3ZGJfYWxsID4+IDEpICYgMHg3ZikgLSAxMTA7CisJCXB3ZGJfYWxsID0gX3J0bDkyY19xdWVyeV9yeHB3cnBlcmNlbnRhZ2UocnhfcHdyX2FsbCk7CisJCXBzdGF0cy0+cnhfcHdkYl9hbGwgPSBwd2RiX2FsbDsKKwkJcHN0YXRzLT5yeHBvd2VyID0gcnhfcHdyX2FsbDsKKwkJcHN0YXRzLT5yZWN2c2lnbmFscG93ZXIgPSByeF9wd3JfYWxsOworCisJCWlmIChwZGVzYy0+cnhodCAmJiBwZGVzYy0+cnhtY3MgPj0gREVTQzkyQ19SQVRFTUNTOCAmJgorCQkgICAgcGRlc2MtPnJ4bWNzIDw9IERFU0M5MkNfUkFURU1DUzE1KQorCQkJbWF4X3NwYXRpYWxfc3RyZWFtID0gMjsKKwkJZWxzZQorCQkJbWF4X3NwYXRpYWxfc3RyZWFtID0gMTsKKworCQlmb3IgKGkgPSAwOyBpIDwgbWF4X3NwYXRpYWxfc3RyZWFtOyBpKyspIHsKKwkJCWV2bSA9IF9ydGw5MmNfZXZtX2RiX3RvX3BlcmNlbnRhZ2UocF9kcnZpbmZvLT5yeGV2bVtpXSk7CisKKwkJCWlmIChicGFja2V0X21hdGNoX2Jzc2lkKSB7CisJCQkJaWYgKGkgPT0gMCkKKwkJCQkJcHN0YXRzLT5zaWduYWxxdWFsaXR5ID0KKwkJCQkJICAgICh1OCkgKGV2bSAmIDB4ZmYpOworCQkJCXBzdGF0cy0+cnhfbWltb19zaWduYWxxdWFsaXR5W2ldID0KKwkJCQkgICAgKHU4KSAoZXZtICYgMHhmZik7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoaXNfY2NrX3JhdGUpCisJCXBzdGF0cy0+c2lnbmFsc3RyZW5ndGggPQorCQkgICAgKHU4KSAoX3J0bDkyY2Vfc2lnbmFsX3NjYWxlX21hcHBpbmcoaHcsIHB3ZGJfYWxsKSk7CisJZWxzZSBpZiAocmZfcnhfbnVtICE9IDApCisJCXBzdGF0cy0+c2lnbmFsc3RyZW5ndGggPQorCQkgICAgKHU4KSAoX3J0bDkyY2Vfc2lnbmFsX3NjYWxlX21hcHBpbmcKKwkJCSAgKGh3LCB0b3RhbF9yc3NpIC89IHJmX3J4X251bSkpOworfQorCitzdGF0aWMgdm9pZCBfcnRsOTJjZV9wcm9jZXNzX3VpX3Jzc2koc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCXN0cnVjdCBydGxfc3RhdHMgKnBzdGF0cykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKKwl1OCByZnBhdGg7CisJdTMyIGxhc3RfcnNzaSwgdG1wdmFsOworCisJaWYgKHBzdGF0cy0+Yl9wYWNrZXRfdG9zZWxmIHx8IHBzdGF0cy0+Yl9wYWNrZXRfYmVhY29uKSB7CisJCXJ0bHByaXYtPnN0YXRzLnJzc2lfY2FsY3VsYXRlX2NudCsrOworCisJCWlmIChydGxwcml2LT5zdGF0cy51aV9yc3NpLnRvdGFsX251bSsrID49CisJCSAgICBQSFlfUlNTSV9TTElEX1dJTl9NQVgpIHsKKwkJCXJ0bHByaXYtPnN0YXRzLnVpX3Jzc2kudG90YWxfbnVtID0KKwkJCSAgICBQSFlfUlNTSV9TTElEX1dJTl9NQVg7CisJCQlsYXN0X3Jzc2kgPQorCQkJICAgIHJ0bHByaXYtPnN0YXRzLnVpX3Jzc2kuZWxlbWVudHNbcnRscHJpdi0+CisJCQkJCQkgICAgc3RhdHMudWlfcnNzaS5pbmRleF07CisJCQlydGxwcml2LT5zdGF0cy51aV9yc3NpLnRvdGFsX3ZhbCAtPSBsYXN0X3Jzc2k7CisJCX0KKworCQlydGxwcml2LT5zdGF0cy51aV9yc3NpLnRvdGFsX3ZhbCArPSBwc3RhdHMtPnNpZ25hbHN0cmVuZ3RoOworCQlydGxwcml2LT5zdGF0cy51aV9yc3NpLmVsZW1lbnRzW3J0bHByaXYtPnN0YXRzLnVpX3Jzc2kuCisJCQkJCQlpbmRleCsrXSA9CisJCSAgICBwc3RhdHMtPnNpZ25hbHN0cmVuZ3RoOworCisJCWlmIChydGxwcml2LT5zdGF0cy51aV9yc3NpLmluZGV4ID49IFBIWV9SU1NJX1NMSURfV0lOX01BWCkKKwkJCXJ0bHByaXYtPnN0YXRzLnVpX3Jzc2kuaW5kZXggPSAwOworCisJCXRtcHZhbCA9IHJ0bHByaXYtPnN0YXRzLnVpX3Jzc2kudG90YWxfdmFsIC8KKwkJICAgIHJ0bHByaXYtPnN0YXRzLnVpX3Jzc2kudG90YWxfbnVtOworCQlydGxwcml2LT5zdGF0cy5zaWduYWxfc3RyZW5ndGggPQorCQkgICAgX3J0bDkyY2VfdHJhbnNsYXRlX3RvZGJtKGh3LCAodTgpIHRtcHZhbCk7CisJCXBzdGF0cy0+cnNzaSA9IHJ0bHByaXYtPnN0YXRzLnNpZ25hbF9zdHJlbmd0aDsKKwl9CisKKwlpZiAoIXBzdGF0cy0+Yl9pc19jY2sgJiYgcHN0YXRzLT5iX3BhY2tldF90b3NlbGYpIHsKKwkJZm9yIChyZnBhdGggPSBSRjkwX1BBVEhfQTsgcmZwYXRoIDwgcnRscGh5LT5udW1fdG90YWxfcmZwYXRoOworCQkgICAgIHJmcGF0aCsrKSB7CisKKwkJCWlmICghcnRsODE5Ml9waHlfY2hlY2tfaXNfbGVnYWxfcmZwYXRoKGh3LCByZnBhdGgpKQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAocnRscHJpdi0+c3RhdHMucnhfcnNzaV9wZXJjZW50YWdlW3JmcGF0aF0gPT0gMCkgeworCQkJCXJ0bHByaXYtPnN0YXRzLnJ4X3Jzc2lfcGVyY2VudGFnZVtyZnBhdGhdID0KKwkJCQkgICAgcHN0YXRzLT5yeF9taW1vX3NpZ25hbHN0cmVuZ3RoW3JmcGF0aF07CisKKwkJCX0KKworCQkJaWYgKHBzdGF0cy0+cnhfbWltb19zaWduYWxzdHJlbmd0aFtyZnBhdGhdID4KKwkJCSAgICBydGxwcml2LT5zdGF0cy5yeF9yc3NpX3BlcmNlbnRhZ2VbcmZwYXRoXSkgeworCQkJCXJ0bHByaXYtPnN0YXRzLnJ4X3Jzc2lfcGVyY2VudGFnZVtyZnBhdGhdID0KKwkJCQkgICAgKChydGxwcml2LT5zdGF0cy4KKwkJCQkgICAgICByeF9yc3NpX3BlcmNlbnRhZ2VbcmZwYXRoXSAqCisJCQkJICAgICAgKFJYX1NNT09USF9GQUNUT1IgLSAxKSkgKworCQkJCSAgICAgKHBzdGF0cy0+cnhfbWltb19zaWduYWxzdHJlbmd0aFtyZnBhdGhdKSkgLworCQkJCSAgICAoUlhfU01PT1RIX0ZBQ1RPUik7CisKKwkJCQlydGxwcml2LT5zdGF0cy5yeF9yc3NpX3BlcmNlbnRhZ2VbcmZwYXRoXSA9CisJCQkJICAgIHJ0bHByaXYtPnN0YXRzLnJ4X3Jzc2lfcGVyY2VudGFnZVtyZnBhdGhdICsKKwkJCQkgICAgMTsKKwkJCX0gZWxzZSB7CisJCQkJcnRscHJpdi0+c3RhdHMucnhfcnNzaV9wZXJjZW50YWdlW3JmcGF0aF0gPQorCQkJCSAgICAoKHJ0bHByaXYtPnN0YXRzLgorCQkJCSAgICAgIHJ4X3Jzc2lfcGVyY2VudGFnZVtyZnBhdGhdICoKKwkJCQkgICAgICAoUlhfU01PT1RIX0ZBQ1RPUiAtIDEpKSArCisJCQkJICAgICAocHN0YXRzLT5yeF9taW1vX3NpZ25hbHN0cmVuZ3RoW3JmcGF0aF0pKSAvCisJCQkJICAgIChSWF9TTU9PVEhfRkFDVE9SKTsKKwkJCX0KKworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBfcnRsOTJjZV91cGRhdGVfcnhzaWduYWxzdGF0aXN0aWNzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQkgICAgICAgc3RydWN0IHJ0bF9zdGF0cyAqcHN0YXRzKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlpbnQgd2VpZ2h0aW5nOworCisJaWYgKHJ0bHByaXYtPnN0YXRzLnJlY3Zfc2lnbmFsX3Bvd2VyID09IDApCisJCXJ0bHByaXYtPnN0YXRzLnJlY3Zfc2lnbmFsX3Bvd2VyID0gcHN0YXRzLT5yZWN2c2lnbmFscG93ZXI7CisKKwlpZiAocHN0YXRzLT5yZWN2c2lnbmFscG93ZXIgPiBydGxwcml2LT5zdGF0cy5yZWN2X3NpZ25hbF9wb3dlcikKKwkJd2VpZ2h0aW5nID0gNTsKKworCWVsc2UgaWYgKHBzdGF0cy0+cmVjdnNpZ25hbHBvd2VyIDwgcnRscHJpdi0+c3RhdHMucmVjdl9zaWduYWxfcG93ZXIpCisJCXdlaWdodGluZyA9ICgtNSk7CisKKwlydGxwcml2LT5zdGF0cy5yZWN2X3NpZ25hbF9wb3dlciA9CisJICAgIChydGxwcml2LT5zdGF0cy5yZWN2X3NpZ25hbF9wb3dlciAqIDUgKworCSAgICAgcHN0YXRzLT5yZWN2c2lnbmFscG93ZXIgKyB3ZWlnaHRpbmcpIC8gNjsKK30KKworc3RhdGljIHZvaWQgX3J0bDkyY2VfcHJvY2Vzc19wd2RiKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQlzdHJ1Y3QgcnRsX3N0YXRzICpwc3RhdHMpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfbWFjICptYWMgPSBydGxfbWFjKHJ0bF9wcml2KGh3KSk7CisJbG9uZyB1bmRlY29yYXRlZF9zbW9vdGhlZF9wd2RiOworCisJaWYgKG1hYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7CisJCXJldHVybjsKKwl9IGVsc2UgeworCQl1bmRlY29yYXRlZF9zbW9vdGhlZF9wd2RiID0KKwkJICAgIHJ0bHByaXYtPmRtLnVuZGVjb3JhdGVkX3Ntb290aGVkX3B3ZGI7CisJfQorCisJaWYgKHBzdGF0cy0+Yl9wYWNrZXRfdG9zZWxmIHx8IHBzdGF0cy0+Yl9wYWNrZXRfYmVhY29uKSB7CisJCWlmICh1bmRlY29yYXRlZF9zbW9vdGhlZF9wd2RiIDwgMCkKKwkJCXVuZGVjb3JhdGVkX3Ntb290aGVkX3B3ZGIgPSBwc3RhdHMtPnJ4X3B3ZGJfYWxsOworCisJCWlmIChwc3RhdHMtPnJ4X3B3ZGJfYWxsID4gKHUzMikgdW5kZWNvcmF0ZWRfc21vb3RoZWRfcHdkYikgeworCQkJdW5kZWNvcmF0ZWRfc21vb3RoZWRfcHdkYiA9CisJCQkgICAgKCgodW5kZWNvcmF0ZWRfc21vb3RoZWRfcHdkYikgKgorCQkJICAgICAgKFJYX1NNT09USF9GQUNUT1IgLSAxKSkgKworCQkJICAgICAocHN0YXRzLT5yeF9wd2RiX2FsbCkpIC8gKFJYX1NNT09USF9GQUNUT1IpOworCisJCQl1bmRlY29yYXRlZF9zbW9vdGhlZF9wd2RiID0gdW5kZWNvcmF0ZWRfc21vb3RoZWRfcHdkYgorCQkJICAgICsgMTsKKwkJfSBlbHNlIHsKKwkJCXVuZGVjb3JhdGVkX3Ntb290aGVkX3B3ZGIgPQorCQkJICAgICgoKHVuZGVjb3JhdGVkX3Ntb290aGVkX3B3ZGIpICoKKwkJCSAgICAgIChSWF9TTU9PVEhfRkFDVE9SIC0gMSkpICsKKwkJCSAgICAgKHBzdGF0cy0+cnhfcHdkYl9hbGwpKSAvIChSWF9TTU9PVEhfRkFDVE9SKTsKKwkJfQorCisJCXJ0bHByaXYtPmRtLnVuZGVjb3JhdGVkX3Ntb290aGVkX3B3ZGIgPQorCQkgICAgdW5kZWNvcmF0ZWRfc21vb3RoZWRfcHdkYjsKKwkJX3J0bDkyY2VfdXBkYXRlX3J4c2lnbmFsc3RhdGlzdGljcyhodywgcHN0YXRzKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9ydGw5MmNlX3Byb2Nlc3NfdWlfbGlua19xdWFsaXR5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQkgICAgIHN0cnVjdCBydGxfc3RhdHMgKnBzdGF0cykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJdTMyIGxhc3RfZXZtLCBuX3NwYXRpYWxzdHJlYW0sIHRtcHZhbDsKKworCWlmIChwc3RhdHMtPnNpZ25hbHF1YWxpdHkgIT0gMCkgeworCQlpZiAocHN0YXRzLT5iX3BhY2tldF90b3NlbGYgfHwgcHN0YXRzLT5iX3BhY2tldF9iZWFjb24pIHsKKworCQkJaWYgKHJ0bHByaXYtPnN0YXRzLnVpX2xpbmtfcXVhbGl0eS50b3RhbF9udW0rKyA+PQorCQkJICAgIFBIWV9MSU5LUVVBTElUWV9TTElEX1dJTl9NQVgpIHsKKwkJCQlydGxwcml2LT5zdGF0cy51aV9saW5rX3F1YWxpdHkudG90YWxfbnVtID0KKwkJCQkgICAgUEhZX0xJTktRVUFMSVRZX1NMSURfV0lOX01BWDsKKwkJCQlsYXN0X2V2bSA9CisJCQkJICAgIHJ0bHByaXYtPnN0YXRzLgorCQkJCSAgICB1aV9saW5rX3F1YWxpdHkuZWxlbWVudHNbcnRscHJpdi0+CisJCQkJCQkJICBzdGF0cy51aV9saW5rX3F1YWxpdHkuCisJCQkJCQkJICBpbmRleF07CisJCQkJcnRscHJpdi0+c3RhdHMudWlfbGlua19xdWFsaXR5LnRvdGFsX3ZhbCAtPQorCQkJCSAgICBsYXN0X2V2bTsKKwkJCX0KKworCQkJcnRscHJpdi0+c3RhdHMudWlfbGlua19xdWFsaXR5LnRvdGFsX3ZhbCArPQorCQkJICAgIHBzdGF0cy0+c2lnbmFscXVhbGl0eTsKKwkJCXJ0bHByaXYtPnN0YXRzLnVpX2xpbmtfcXVhbGl0eS5lbGVtZW50c1tydGxwcml2LT5zdGF0cy4KKwkJCQkJCQkJdWlfbGlua19xdWFsaXR5LgorCQkJCQkJCQlpbmRleCsrXSA9CisJCQkgICAgcHN0YXRzLT5zaWduYWxxdWFsaXR5OworCisJCQlpZiAocnRscHJpdi0+c3RhdHMudWlfbGlua19xdWFsaXR5LmluZGV4ID49CisJCQkgICAgUEhZX0xJTktRVUFMSVRZX1NMSURfV0lOX01BWCkKKwkJCQlydGxwcml2LT5zdGF0cy51aV9saW5rX3F1YWxpdHkuaW5kZXggPSAwOworCisJCQl0bXB2YWwgPSBydGxwcml2LT5zdGF0cy51aV9saW5rX3F1YWxpdHkudG90YWxfdmFsIC8KKwkJCSAgICBydGxwcml2LT5zdGF0cy51aV9saW5rX3F1YWxpdHkudG90YWxfbnVtOworCQkJcnRscHJpdi0+c3RhdHMuc2lnbmFsX3F1YWxpdHkgPSB0bXB2YWw7CisKKwkJCXJ0bHByaXYtPnN0YXRzLmxhc3Rfc2lnc3RyZW5ndGhfaW5wZXJjZW50ID0gdG1wdmFsOworCisJCQlmb3IgKG5fc3BhdGlhbHN0cmVhbSA9IDA7IG5fc3BhdGlhbHN0cmVhbSA8IDI7CisJCQkgICAgIG5fc3BhdGlhbHN0cmVhbSsrKSB7CisJCQkJaWYgKHBzdGF0cy0+CisJCQkJICAgIHJ4X21pbW9fc2lnbmFscXVhbGl0eVtuX3NwYXRpYWxzdHJlYW1dICE9CisJCQkJICAgIC0xKSB7CisJCQkJCWlmIChydGxwcml2LT5zdGF0cy4KKwkJCQkJICAgIHJ4X2V2bV9wZXJjZW50YWdlW25fc3BhdGlhbHN0cmVhbV0KKwkJCQkJICAgID09IDApIHsKKwkJCQkJCXJ0bHByaXYtPnN0YXRzLgorCQkJCQkJICAgcnhfZXZtX3BlcmNlbnRhZ2UKKwkJCQkJCSAgIFtuX3NwYXRpYWxzdHJlYW1dID0KKwkJCQkJCSAgIHBzdGF0cy0+cnhfbWltb19zaWduYWxxdWFsaXR5CisJCQkJCQkgICBbbl9zcGF0aWFsc3RyZWFtXTsKKwkJCQkJfQorCisJCQkJCXJ0bHByaXYtPnN0YXRzLgorCQkJCQkgICAgcnhfZXZtX3BlcmNlbnRhZ2Vbbl9zcGF0aWFsc3RyZWFtXSA9CisJCQkJCSAgICAoKHJ0bHByaXYtPgorCQkJCQkgICAgICBzdGF0cy5yeF9ldm1fcGVyY2VudGFnZQorCQkJCQkgICAgICBbbl9zcGF0aWFsc3RyZWFtXSAqCisJCQkJCSAgICAgIChSWF9TTU9PVEhfRkFDVE9SIC0gMSkpICsKKwkJCQkJICAgICAocHN0YXRzLT4KKwkJCQkJICAgICAgcnhfbWltb19zaWduYWxxdWFsaXR5CisJCQkJCSAgICAgIFtuX3NwYXRpYWxzdHJlYW1dICogMSkpIC8KKwkJCQkJICAgIChSWF9TTU9PVEhfRkFDVE9SKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQk7CisJfQorfQorCitzdGF0aWMgdm9pZCBfcnRsOTJjZV9wcm9jZXNzX3BoeWluZm8oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgICB1OCAqYnVmZmVyLAorCQkJCSAgICAgc3RydWN0IHJ0bF9zdGF0cyAqcGN1cnJlbnRfc3RhdHMpCit7CisKKwlpZiAoIXBjdXJyZW50X3N0YXRzLT5iX3BhY2tldF9tYXRjaGJzc2lkICYmCisJICAgICFwY3VycmVudF9zdGF0cy0+Yl9wYWNrZXRfYmVhY29uKQorCQlyZXR1cm47CisKKwlfcnRsOTJjZV9wcm9jZXNzX3VpX3Jzc2koaHcsIHBjdXJyZW50X3N0YXRzKTsKKwlfcnRsOTJjZV9wcm9jZXNzX3B3ZGIoaHcsIHBjdXJyZW50X3N0YXRzKTsKKwlfcnRsOTJjZV9wcm9jZXNzX3VpX2xpbmtfcXVhbGl0eShodywgcGN1cnJlbnRfc3RhdHMpOworfQorCitzdGF0aWMgdm9pZCBfcnRsOTJjZV90cmFuc2xhdGVfcnhfc2lnbmFsX3N0dWZmKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICAgICAgIHN0cnVjdCBydGxfc3RhdHMgKnBzdGF0cywKKwkJCQkJICAgICAgIHN0cnVjdCByeF9kZXNjXzkyYyAqcGRlc2MsCisJCQkJCSAgICAgICBzdHJ1Y3QgcnhfZndpbmZvXzkyYyAqcF9kcnZpbmZvKQoreworCXN0cnVjdCBydGxfbWFjICptYWMgPSBydGxfbWFjKHJ0bF9wcml2KGh3KSk7CisJc3RydWN0IHJ0bF9lZnVzZSAqcnRsZWZ1c2UgPSBydGxfZWZ1c2UocnRsX3ByaXYoaHcpKTsKKworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CisJdTggKnRtcF9idWY7CisJdTggKnByYWRkcjsKKwl1OCAqcHNhZGRyOworCXUxNiBmYywgdHlwZTsKKwlib29sIGJfcGFja2V0X21hdGNoYnNzaWQsIGJfcGFja2V0X3Rvc2VsZiwgYl9wYWNrZXRfYmVhY29uOworCisJdG1wX2J1ZiA9IHNrYi0+ZGF0YSArIHBzdGF0cy0+cnhfZHJ2aW5mb19zaXplICsgcHN0YXRzLT5yeF9idWZzaGlmdDsKKworCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXRtcF9idWY7CisJZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpOworCXR5cGUgPSBXTEFOX0ZDX0dFVF9UWVBFKGZjKTsKKwlwcmFkZHIgPSBoZHItPmFkZHIxOworCXBzYWRkciA9IGhkci0+YWRkcjI7CisKKwliX3BhY2tldF9tYXRjaGJzc2lkID0KKwkgICAgKChJRUVFODAyMTFfRlRZUEVfQ1RMICE9IHR5cGUpICYmCisJICAgICAoIWNvbXBhcmVfZXRoZXJfYWRkcihtYWMtPmJzc2lkLAorCQkJCSAgKGZjICYgSUVFRTgwMjExX0ZDVExfVE9EUykgPworCQkJCSAgaGRyLT5hZGRyMSA6IChmYyAmIElFRUU4MDIxMV9GQ1RMX0ZST01EUykgPworCQkJCSAgaGRyLT5hZGRyMiA6IGhkci0+YWRkcjMpKSAmJgorCSAgICAgKCFwc3RhdHMtPmJfaHdlcnJvcikgJiYgKCFwc3RhdHMtPmJfY3JjKSAmJiAoIXBzdGF0cy0+Yl9pY3YpKTsKKworCWJfcGFja2V0X3Rvc2VsZiA9IGJfcGFja2V0X21hdGNoYnNzaWQgJiYKKwkgICAgKCFjb21wYXJlX2V0aGVyX2FkZHIocHJhZGRyLCBydGxlZnVzZS0+ZGV2X2FkZHIpKTsKKworCWlmIChpZWVlODAyMTFfaXNfYmVhY29uKGZjKSkKKwkJYl9wYWNrZXRfYmVhY29uID0gdHJ1ZTsKKworCV9ydGw5MmNlX3F1ZXJ5X3J4cGh5c3RhdHVzKGh3LCBwc3RhdHMsIHBkZXNjLCBwX2RydmluZm8sCisJCQkJICAgYl9wYWNrZXRfbWF0Y2hic3NpZCwgYl9wYWNrZXRfdG9zZWxmLAorCQkJCSAgIGJfcGFja2V0X2JlYWNvbik7CisKKwlfcnRsOTJjZV9wcm9jZXNzX3BoeWluZm8oaHcsIHRtcF9idWYsIHBzdGF0cyk7Cit9CisKK2Jvb2wgcnRsOTJjZV9yeF9xdWVyeV9kZXNjKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJICAgc3RydWN0IHJ0bF9zdGF0cyAqc3RhdHMsCisJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzLAorCQkJICAgdTggKnBfZGVzYywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgcnhfZndpbmZvXzkyYyAqcF9kcnZpbmZvOworCXN0cnVjdCByeF9kZXNjXzkyYyAqcGRlc2MgPSAoc3RydWN0IHJ4X2Rlc2NfOTJjICopcF9kZXNjOworCisJdTMyIHBoeXN0YXR1cyA9IEdFVF9SWF9ERVNDX1BIWVNUKHBkZXNjKTsKKwlzdGF0cy0+bGVuZ3RoID0gKHUxNikgR0VUX1JYX0RFU0NfUEtUX0xFTihwZGVzYyk7CisJc3RhdHMtPnJ4X2RydmluZm9fc2l6ZSA9ICh1OCkgR0VUX1JYX0RFU0NfRFJWX0lORk9fU0laRShwZGVzYykgKgorCSAgICBSWF9EUlZfSU5GT19TSVpFX1VOSVQ7CisJc3RhdHMtPnJ4X2J1ZnNoaWZ0ID0gKHU4KSAoR0VUX1JYX0RFU0NfU0hJRlQocGRlc2MpICYgMHgwMyk7CisJc3RhdHMtPmJfaWN2ID0gKHUxNikgR0VUX1JYX0RFU0NfSUNWKHBkZXNjKTsKKwlzdGF0cy0+Yl9jcmMgPSAodTE2KSBHRVRfUlhfREVTQ19DUkMzMihwZGVzYyk7CisJc3RhdHMtPmJfaHdlcnJvciA9IChzdGF0cy0+Yl9jcmMgfCBzdGF0cy0+Yl9pY3YpOworCXN0YXRzLT5kZWNyeXB0ZWQgPSAhR0VUX1JYX0RFU0NfU1dERUMocGRlc2MpOworCXN0YXRzLT5yYXRlID0gKHU4KSBHRVRfUlhfREVTQ19SWE1DUyhwZGVzYyk7CisJc3RhdHMtPmJfc2hvcnRwcmVhbWJsZSA9ICh1MTYpIEdFVF9SWF9ERVNDX1NQTENQKHBkZXNjKTsKKwlzdGF0cy0+Yl9pc2FtcGR1ID0gKGJvb2wpIChHRVRfUlhfREVTQ19QQUdHUihwZGVzYykgPT0gMSk7CisJc3RhdHMtPmJfaXNhbXBkdSA9IChib29sKSAoKEdFVF9SWF9ERVNDX1BBR0dSKHBkZXNjKSA9PSAxKQorCQkJCSAgICYmIChHRVRfUlhfREVTQ19GQUdHUihwZGVzYykgPT0gMSkpOworCXN0YXRzLT50aW1lc3RhbXBfbG93ID0gR0VUX1JYX0RFU0NfVFNGTChwZGVzYyk7CisJc3RhdHMtPnJ4X2lzNDBNaHpwYWNrZXQgPSAoYm9vbCkgR0VUX1JYX0RFU0NfQlcocGRlc2MpOworCisJcnhfc3RhdHVzLT5mcmVxID0gaHctPmNvbmYuY2hhbm5lbC0+Y2VudGVyX2ZyZXE7CisJcnhfc3RhdHVzLT5iYW5kID0gaHctPmNvbmYuY2hhbm5lbC0+YmFuZDsKKworCWlmIChHRVRfUlhfREVTQ19DUkMzMihwZGVzYykpCisJCXJ4X3N0YXR1cy0+ZmxhZyB8PSBSWF9GTEFHX0ZBSUxFRF9GQ1NfQ1JDOworCisJaWYgKCFHRVRfUlhfREVTQ19TV0RFQyhwZGVzYykpCisJCXJ4X3N0YXR1cy0+ZmxhZyB8PSBSWF9GTEFHX0RFQ1JZUFRFRDsKKworCWlmIChHRVRfUlhfREVTQ19CVyhwZGVzYykpCisJCXJ4X3N0YXR1cy0+ZmxhZyB8PSBSWF9GTEFHXzQwTUhaOworCisJaWYgKEdFVF9SWF9ERVNDX1JYSFQocGRlc2MpKQorCQlyeF9zdGF0dXMtPmZsYWcgfD0gUlhfRkxBR19IVDsKKworCXJ4X3N0YXR1cy0+ZmxhZyB8PSBSWF9GTEFHX1RTRlQ7CisKKwlpZiAoc3RhdHMtPmRlY3J5cHRlZCkKKwkJcnhfc3RhdHVzLT5mbGFnIHw9IFJYX0ZMQUdfREVDUllQVEVEOworCisJcnhfc3RhdHVzLT5yYXRlX2lkeCA9IF9ydGw5MmNlX3JhdGVfbWFwcGluZygoYm9vbCkKKwkJCQkJCSAgICBHRVRfUlhfREVTQ19SWEhUKHBkZXNjKSwKKwkJCQkJCSAgICAodTgpCisJCQkJCQkgICAgR0VUX1JYX0RFU0NfUlhNQ1MocGRlc2MpLAorCQkJCQkJICAgIChib29sKQorCQkJCQkJICAgIEdFVF9SWF9ERVNDX1BBR0dSKHBkZXNjKSk7CisKKwlyeF9zdGF0dXMtPm1hY3RpbWUgPSBHRVRfUlhfREVTQ19UU0ZMKHBkZXNjKTsKKwlpZiAocGh5c3RhdHVzID09IHRydWUpIHsKKwkJcF9kcnZpbmZvID0gKHN0cnVjdCByeF9md2luZm9fOTJjICopKHNrYi0+ZGF0YSArCisJCQkJCQkgICAgIHN0YXRzLT5yeF9idWZzaGlmdCk7CisKKwkJX3J0bDkyY2VfdHJhbnNsYXRlX3J4X3NpZ25hbF9zdHVmZihodywKKwkJCQkJCSAgIHNrYiwgc3RhdHMsIHBkZXNjLAorCQkJCQkJICAgcF9kcnZpbmZvKTsKKwl9CisKKwkvKnJ4X3N0YXR1cy0+cXVhbCA9IHN0YXRzLT5zaWduYWw7ICovCisJcnhfc3RhdHVzLT5zaWduYWwgPSBzdGF0cy0+cnNzaSArIDEwOworCS8qcnhfc3RhdHVzLT5ub2lzZSA9IC1zdGF0cy0+bm9pc2U7ICovCisKKwlyZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBydGw5MmNlX3R4X2ZpbGxfZGVzYyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwgdTggKnBkZXNjX3R4LAorCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8sIHN0cnVjdCBza19idWZmICpza2IsCisJCQkgIHVuc2lnbmVkIGludCBxdWV1ZV9pbmRleCkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOworCXN0cnVjdCBydGxfcHNfY3RsICpwcHNjID0gcnRsX3BzYyhydGxfcHJpdihodykpOworCWJvb2wgYl9kZWZhdWx0YWRhcHRlciA9IHRydWU7CisKKwlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhID0gaWVlZTgwMjExX2ZpbmRfc3RhKG1hYy0+dmlmLCBtYWMtPmJzc2lkKTsKKworCXU4ICpwZGVzYyA9ICh1OCAqKSBwZGVzY190eDsKKwlzdHJ1Y3QgcnRsX3RjYl9kZXNjIHRjYl9kZXNjOworCXU4ICpxYyA9IGllZWU4MDIxMV9nZXRfcW9zX2N0bChoZHIpOworCXU4IHRpZCA9IHFjWzBdICYgSUVFRTgwMjExX1FPU19DVExfVElEX01BU0s7CisJdTE2IHNlcV9udW1iZXI7CisJdTE2IGZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKTsKKwl1OCByYXRlX2ZsYWcgPSBpbmZvLT5jb250cm9sLnJhdGVzWzBdLmZsYWdzOworCisJZW51bSBydGxfZGVzY19xc2VsIGZ3X3FzZWwgPQorCSAgICBfcnRsOTJjZV9tYXBfaHdxdWV1ZV90b19md3F1ZXVlKGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCksCisJCQkJCSAgICBxdWV1ZV9pbmRleCk7CisKKwlib29sIGJfZmlyc3RzZWcgPSAoKGhkci0+c2VxX2N0cmwgJgorCQkJICAgIGNwdV90b19sZTE2KElFRUU4MDIxMV9TQ1RMX0ZSQUcpKSA9PSAwKTsKKworCWJvb2wgYl9sYXN0c2VnID0gKChoZHItPmZyYW1lX2NvbnRyb2wgJgorCQkJICAgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfTU9SRUZSQUdTKSkgPT0gMCk7CisKKwlkbWFfYWRkcl90IG1hcHBpbmcgPSBwY2lfbWFwX3NpbmdsZShydGxwY2ktPnBkZXYsCisJCQkJCSAgICBza2ItPmRhdGEsIHNrYi0+bGVuLAorCQkJCQkgICAgUENJX0RNQV9UT0RFVklDRSk7CisKKwlzZXFfbnVtYmVyID0gKGxlMTZfdG9fY3B1KGhkci0+c2VxX2N0cmwpICYgSUVFRTgwMjExX1NDVExfU0VRKSA+PiA0OworCisJcnRsX2dldF90Y2JfZGVzYyhodywgaW5mbywgc2tiLCAmdGNiX2Rlc2MpOworCisJQ0xFQVJfUENJX1RYX0RFU0NfQ09OVEVOVChwZGVzYywgc2l6ZW9mKHN0cnVjdCB0eF9kZXNjXzkyYykpOworCisJaWYgKGJfZmlyc3RzZWcpIHsKKwkJU0VUX1RYX0RFU0NfT0ZGU0VUKHBkZXNjLCBVU0JfSFdERVNDX0hFQURFUl9MRU4pOworCisJCVNFVF9UWF9ERVNDX1RYX1JBVEUocGRlc2MsIHRjYl9kZXNjLmh3X3JhdGUpOworCisJCWlmICh0Y2JfZGVzYy51c2Vfc2hvcnRnaSB8fCB0Y2JfZGVzYy51c2Vfc2hvcnRwcmVhbWJsZSkKKwkJCVNFVF9UWF9ERVNDX0RBVEFfU0hPUlRHSShwZGVzYywgMSk7CisKKwkJaWYgKG1hYy0+dGlkc1t0aWRdLmFnZy5hZ2dfc3RhdGUgPT0gUlRMX0FHR19PTiAmJgorCQkgICAgaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FNUERVKSB7CisJCQlTRVRfVFhfREVTQ19BR0dfQlJFQUsocGRlc2MsIDEpOworCQkJU0VUX1RYX0RFU0NfTUFYX0FHR19OVU0ocGRlc2MsIDB4MTQpOworCQl9CisJCVNFVF9UWF9ERVNDX1NFUShwZGVzYywgc2VxX251bWJlcik7CisKKwkJU0VUX1RYX0RFU0NfUlRTX0VOQUJMRShwZGVzYywgKCh0Y2JfZGVzYy5iX3J0c19lbmFibGUgJiYKKwkJCQkJCSF0Y2JfZGVzYy4KKwkJCQkJCWJfY3RzX2VuYWJsZSkgPyAxIDogMCkpOworCQlTRVRfVFhfREVTQ19IV19SVFNfRU5BQkxFKHBkZXNjLAorCQkJCQkgICgodGNiX2Rlc2MuYl9ydHNfZW5hYmxlCisJCQkJCSAgICB8fCB0Y2JfZGVzYy5iX2N0c19lbmFibGUpID8gMSA6IDApKTsKKwkJU0VUX1RYX0RFU0NfQ1RTMlNFTEYocGRlc2MsICgodGNiX2Rlc2MuYl9jdHNfZW5hYmxlKSA/IDEgOiAwKSk7CisJCVNFVF9UWF9ERVNDX1JUU19TVEJDKHBkZXNjLCAoKHRjYl9kZXNjLmJfcnRzX3N0YmMpID8gMSA6IDApKTsKKworCQlTRVRfVFhfREVTQ19SVFNfUkFURShwZGVzYywgdGNiX2Rlc2MucnRzX3JhdGUpOworCQlTRVRfVFhfREVTQ19SVFNfQlcocGRlc2MsIDApOworCQlTRVRfVFhfREVTQ19SVFNfU0MocGRlc2MsIHRjYl9kZXNjLnJ0c19zYyk7CisJCVNFVF9UWF9ERVNDX1JUU19TSE9SVChwZGVzYywKKwkJCQkgICAgICAoKHRjYl9kZXNjLnJ0c19yYXRlIDw9IERFU0M5MkNfUkFURTU0TSkgPworCQkJCSAgICAgICh0Y2JfZGVzYy5iX3J0c191c2Vfc2hvcnRwcmVhbWJsZSA/IDEgOiAwKQorCQkJCSAgICAgIDogKHRjYl9kZXNjLmJfcnRzX3VzZV9zaG9ydGdpID8gMSA6IDApKSk7CisKKwkJaWYgKG1hYy0+YndfNDApIHsKKwkJCWlmICh0Y2JfZGVzYy5iX3BhY2tldF9idykgeworCQkJCVNFVF9UWF9ERVNDX0RBVEFfQlcocGRlc2MsIDEpOworCQkJCVNFVF9UWF9ERVNDX1RYX1NVQl9DQVJSSUVSKHBkZXNjLCAzKTsKKwkJCX0gZWxzZSB7CisJCQkJU0VUX1RYX0RFU0NfREFUQV9CVyhwZGVzYywgMCk7CisKKwkJCQlpZiAocmF0ZV9mbGFnICYgSUVFRTgwMjExX1RYX1JDX0RVUF9EQVRBKSB7CisJCQkJCVNFVF9UWF9ERVNDX1RYX1NVQl9DQVJSSUVSKHBkZXNjLAorCQkJCQkJCW1hYy0+Y3VyXzQwX3ByaW1lX3NjKTsKKwkJCQl9CisJCQl9CisJCX0gZWxzZSB7CisJCQlTRVRfVFhfREVTQ19EQVRBX0JXKHBkZXNjLCAwKTsKKwkJCVNFVF9UWF9ERVNDX1RYX1NVQl9DQVJSSUVSKHBkZXNjLCAwKTsKKwkJfQorCisJCVNFVF9UWF9ERVNDX0xJTklQKHBkZXNjLCAwKTsKKwkJU0VUX1RYX0RFU0NfUEtUX1NJWkUocGRlc2MsICh1MTYpIHNrYi0+bGVuKTsKKworCQlpZiAoc3RhKSB7CisJCQl1OCBhbXBkdV9kZW5zaXR5ID0gc3RhLT5odF9jYXAuYW1wZHVfZGVuc2l0eTsKKwkJCVNFVF9UWF9ERVNDX0FNUERVX0RFTlNJVFkocGRlc2MsIGFtcGR1X2RlbnNpdHkpOworCQl9CisKKwkJaWYgKGluZm8tPmNvbnRyb2wuaHdfa2V5KSB7CisJCQlzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXljb25mID0KKwkJCSAgICBpbmZvLT5jb250cm9sLmh3X2tleTsKKworCQkJc3dpdGNoIChrZXljb25mLT5jaXBoZXIpIHsKKwkJCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfV0VQNDA6CisJCQljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDEwNDoKKwkJCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfVEtJUDoKKwkJCQlTRVRfVFhfREVTQ19TRUNfVFlQRShwZGVzYywgMHgxKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfQ0NNUDoKKwkJCQlTRVRfVFhfREVTQ19TRUNfVFlQRShwZGVzYywgMHgzKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJU0VUX1RYX0RFU0NfU0VDX1RZUEUocGRlc2MsIDB4MCk7CisJCQkJYnJlYWs7CisKKwkJCX0KKwkJfQorCisJCVNFVF9UWF9ERVNDX1BLVF9JRChwZGVzYywgMCk7CisJCVNFVF9UWF9ERVNDX1FVRVVFX1NFTChwZGVzYywgZndfcXNlbCk7CisKKwkJU0VUX1RYX0RFU0NfREFUQV9SQVRFX0ZCX0xJTUlUKHBkZXNjLCAweDFGKTsKKwkJU0VUX1RYX0RFU0NfUlRTX1JBVEVfRkJfTElNSVQocGRlc2MsIDB4Rik7CisJCVNFVF9UWF9ERVNDX0RJU0FCTEVfRkIocGRlc2MsIDApOworCQlTRVRfVFhfREVTQ19VU0VfUkFURShwZGVzYywgdGNiX2Rlc2MudXNlX2RyaXZlcl9yYXRlID8gMSA6IDApOworCisJCWlmIChpZWVlODAyMTFfaXNfZGF0YV9xb3MoZmMpKSB7CisJCQlpZiAobWFjLT5yZGdfZW4pIHsKKwkJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1NFTkQsIERCR19UUkFDRSwKKwkJCQkJICgiRW5hYmxlIFJERyBmdW5jdGlvbi5cbiIpKTsKKwkJCQlTRVRfVFhfREVTQ19SREdfRU5BQkxFKHBkZXNjLCAxKTsKKwkJCQlTRVRfVFhfREVTQ19IVEMocGRlc2MsIDEpOworCQkJfQorCQl9CisJfQorCisJU0VUX1RYX0RFU0NfRklSU1RfU0VHKHBkZXNjLCAoYl9maXJzdHNlZyA/IDEgOiAwKSk7CisJU0VUX1RYX0RFU0NfTEFTVF9TRUcocGRlc2MsIChiX2xhc3RzZWcgPyAxIDogMCkpOworCisJU0VUX1RYX0RFU0NfVFhfQlVGRkVSX1NJWkUocGRlc2MsICh1MTYpIHNrYi0+bGVuKTsKKworCVNFVF9UWF9ERVNDX1RYX0JVRkZFUl9BRERSRVNTKHBkZXNjLCBjcHVfdG9fbGUzMihtYXBwaW5nKSk7CisKKwlpZiAocnRscHJpdi0+ZG0uYl91c2VyYW1hc2spIHsKKwkJU0VUX1RYX0RFU0NfUkFURV9JRChwZGVzYywgdGNiX2Rlc2MucmF0cl9pbmRleCk7CisJCVNFVF9UWF9ERVNDX01BQ0lEKHBkZXNjLCB0Y2JfZGVzYy5tYWNfaWQpOworCX0gZWxzZSB7CisJCVNFVF9UWF9ERVNDX1JBVEVfSUQocGRlc2MsIDB4QyArIHRjYl9kZXNjLnJhdHJfaW5kZXgpOworCQlTRVRfVFhfREVTQ19NQUNJRChwZGVzYywgdGNiX2Rlc2MucmF0cl9pbmRleCk7CisJfQorCisJaWYgKCghaWVlZTgwMjExX2lzX2RhdGFfcW9zKGZjKSkgJiYgcHBzYy0+Yl9sZWlzdXJlX3BzICYmCisJICAgIHBwc2MtPmJfZndjdHJsX2xwcykgeworCQlTRVRfVFhfREVTQ19IV1NFUV9FTihwZGVzYywgMSk7CisJCVNFVF9UWF9ERVNDX1BLVF9JRChwZGVzYywgOCk7CisKKwkJaWYgKCFiX2RlZmF1bHRhZGFwdGVyKQorCQkJU0VUX1RYX0RFU0NfUU9TKHBkZXNjLCAxKTsKKwl9CisKKwlTRVRfVFhfREVTQ19NT1JFX0ZSQUcocGRlc2MsIChiX2xhc3RzZWcgPyAwIDogMSkpOworCisJaWYgKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGllZWU4MDIxMV9nZXRfREEoaGRyKSkgfHwKKwkgICAgaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIoaWVlZTgwMjExX2dldF9EQShoZHIpKSkgeworCQlTRVRfVFhfREVTQ19CTUMocGRlc2MsIDEpOworCX0KKworCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfU0VORCwgREJHX1RSQUNFLCAoIlxuIikpOworfQorCit2b2lkIHJ0bDkyY2VfdHhfZmlsbF9jbWRkZXNjKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJICAgICB1OCAqcGRlc2MsIGJvb2wgYl9maXJzdHNlZywKKwkJCSAgICAgYm9vbCBiX2xhc3RzZWcsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGNpICpydGxwY2kgPSBydGxfcGNpZGV2KHJ0bF9wY2lwcml2KGh3KSk7CisJdTggZndfcXVldWUgPSBRU0xUX0JFQUNPTjsKKworCWRtYV9hZGRyX3QgbWFwcGluZyA9IHBjaV9tYXBfc2luZ2xlKHJ0bHBjaS0+cGRldiwKKwkJCQkJICAgIHNrYi0+ZGF0YSwgc2tiLT5sZW4sCisJCQkJCSAgICBQQ0lfRE1BX1RPREVWSUNFKTsKKworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikoc2tiLT5kYXRhKTsKKwl1MTYgZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpOworCisJQ0xFQVJfUENJX1RYX0RFU0NfQ09OVEVOVChwZGVzYywgVFhfREVTQ19TSVpFKTsKKworCWlmIChiX2ZpcnN0c2VnKQorCQlTRVRfVFhfREVTQ19PRkZTRVQocGRlc2MsIFVTQl9IV0RFU0NfSEVBREVSX0xFTik7CisKKwlTRVRfVFhfREVTQ19UWF9SQVRFKHBkZXNjLCBERVNDOTJDX1JBVEUxTSk7CisKKwlTRVRfVFhfREVTQ19TRVEocGRlc2MsIDApOworCisJU0VUX1RYX0RFU0NfTElOSVAocGRlc2MsIDApOworCisJU0VUX1RYX0RFU0NfUVVFVUVfU0VMKHBkZXNjLCBmd19xdWV1ZSk7CisKKwlTRVRfVFhfREVTQ19GSVJTVF9TRUcocGRlc2MsIDEpOworCVNFVF9UWF9ERVNDX0xBU1RfU0VHKHBkZXNjLCAxKTsKKworCVNFVF9UWF9ERVNDX1RYX0JVRkZFUl9TSVpFKHBkZXNjLCAodTE2KSAoc2tiLT5sZW4pKTsKKworCVNFVF9UWF9ERVNDX1RYX0JVRkZFUl9BRERSRVNTKHBkZXNjLCBjcHVfdG9fbGUzMihtYXBwaW5nKSk7CisKKwlTRVRfVFhfREVTQ19SQVRFX0lEKHBkZXNjLCA3KTsKKwlTRVRfVFhfREVTQ19NQUNJRChwZGVzYywgMCk7CisKKwlTRVRfVFhfREVTQ19PV04ocGRlc2MsIDEpOworCisJU0VUX1RYX0RFU0NfUEtUX1NJWkUoKHU4ICopIHBkZXNjLCAodTE2KSAoc2tiLT5sZW4pKTsKKworCVNFVF9UWF9ERVNDX0ZJUlNUX1NFRyhwZGVzYywgMSk7CisJU0VUX1RYX0RFU0NfTEFTVF9TRUcocGRlc2MsIDEpOworCisJU0VUX1RYX0RFU0NfT0ZGU0VUKHBkZXNjLCAweDIwKTsKKworCVNFVF9UWF9ERVNDX1VTRV9SQVRFKHBkZXNjLCAxKTsKKworCWlmICghaWVlZTgwMjExX2lzX2RhdGFfcW9zKGZjKSkgeworCQlTRVRfVFhfREVTQ19IV1NFUV9FTihwZGVzYywgMSk7CisJCVNFVF9UWF9ERVNDX1BLVF9JRChwZGVzYywgOCk7CisJfQorCisJUlRfUFJJTlRfREFUQShydGxwcml2LCBDT01QX0NNRCwgREJHX0xPVUQsCisJCSAgICAgICJIMkMgVHggQ21kIENvbnRlbnRcbiIsCisJCSAgICAgIHBkZXNjLCBUWF9ERVNDX1NJWkUpOworfQorCit2b2lkIHJ0bDkyY2Vfc2V0X2Rlc2ModTggKnBkZXNjLCBib29sIGlzdHgsIHU4IGRlc2NfbmFtZSwgdTggKnZhbCkKK3sKKwlpZiAoaXN0eCA9PSB0cnVlKSB7CisJCXN3aXRjaCAoZGVzY19uYW1lKSB7CisJCWNhc2UgSFdfREVTQ19PV046CisJCQlTRVRfVFhfREVTQ19PV04ocGRlc2MsIDEpOworCQkJYnJlYWs7CisJCWNhc2UgSFdfREVTQ19UWF9ORVhUREVTQ19BRERSOgorCQkJU0VUX1RYX0RFU0NfTkVYVF9ERVNDX0FERFJFU1MocGRlc2MsICoodTMyICopIHZhbCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCVJUX0FTU0VSVChmYWxzZSwgKCJFUlIgdHhkZXNjIDolZCIKKwkJCQkJICAiIG5vdCBwcm9jZXNzXG4iLCBkZXNjX25hbWUpKTsKKwkJCWJyZWFrOworCQl9CisJfSBlbHNlIHsKKwkJc3dpdGNoIChkZXNjX25hbWUpIHsKKwkJY2FzZSBIV19ERVNDX1JYT1dOOgorCQkJU0VUX1JYX0RFU0NfT1dOKHBkZXNjLCAxKTsKKwkJCWJyZWFrOworCQljYXNlIEhXX0RFU0NfUlhCVUZGX0FERFI6CisJCQlTRVRfUlhfREVTQ19CVUZGX0FERFIocGRlc2MsICoodTMyICopIHZhbCk7CisJCQlicmVhazsKKwkJY2FzZSBIV19ERVNDX1JYUEtUX0xFTjoKKwkJCVNFVF9SWF9ERVNDX1BLVF9MRU4ocGRlc2MsICoodTMyICopIHZhbCk7CisJCQlicmVhazsKKwkJY2FzZSBIV19ERVNDX1JYRVJPOgorCQkJU0VUX1JYX0RFU0NfRU9SKHBkZXNjLCAxKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJUlRfQVNTRVJUKGZhbHNlLCAoIkVSUiByeGRlc2MgOiVkICIKKwkJCQkJICAibm90IHByb2Nlc3NcbiIsIGRlc2NfbmFtZSkpOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKK3UzMiBydGw5MmNlX2dldF9kZXNjKHU4ICpwX2Rlc2MsIGJvb2wgaXN0eCwgdTggZGVzY19uYW1lKQoreworCXUzMiByZXQgPSAwOworCisJaWYgKGlzdHggPT0gdHJ1ZSkgeworCQlzd2l0Y2ggKGRlc2NfbmFtZSkgeworCQljYXNlIEhXX0RFU0NfT1dOOgorCQkJcmV0ID0gR0VUX1RYX0RFU0NfT1dOKHBfZGVzYyk7CisJCQlicmVhazsKKwkJY2FzZSBIV19ERVNDX1RYQlVGRl9BRERSOgorCQkJcmV0ID0gR0VUX1RYX0RFU0NfVFhfQlVGRkVSX0FERFJFU1MocF9kZXNjKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJUlRfQVNTRVJUKGZhbHNlLCAoIkVSUiB0eGRlc2MgOiVkICIKKwkJCQkJICAibm90IHByb2Nlc3NcbiIsIGRlc2NfbmFtZSkpOworCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UgeworCQlzdHJ1Y3QgcnhfZGVzY185MmMgKnBkZXNjID0gKHN0cnVjdCByeF9kZXNjXzkyYyAqKXBfZGVzYzsKKwkJc3dpdGNoIChkZXNjX25hbWUpIHsKKwkJY2FzZSBIV19ERVNDX09XTjoKKwkJCXJldCA9IEdFVF9SWF9ERVNDX09XTihwZGVzYyk7CisJCQlicmVhazsKKwkJY2FzZSBIV19ERVNDX1JYUEtUX0xFTjoKKwkJCXJldCA9IEdFVF9SWF9ERVNDX1BLVF9MRU4ocGRlc2MpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlSVF9BU1NFUlQoZmFsc2UsICgiRVJSIHJ4ZGVzYyA6JWQgIgorCQkJCQkgICJub3QgcHJvY2Vzc1xuIiwgZGVzY19uYW1lKSk7CisJCQlicmVhazsKKwkJfQorCX0KKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHJ0bDkyY2VfdHhfcG9sbGluZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdW5zaWduZWQgaW50IGh3X3F1ZXVlKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlpZiAoaHdfcXVldWUgPT0gQkVBQ09OX1FVRVVFKSB7CisJCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIFJFR19QQ0lFX0NUUkxfUkVHLCBCSVQoNCkpOworCX0gZWxzZSB7CisJCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIFJFR19QQ0lFX0NUUkxfUkVHLAorCQkJICAgICAgIEJJVCgwKSA8PCAoaHdfcXVldWUpKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS90cnguaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmNlL3RyeC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzZDBlMGEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS90cnguaApAQCAtMCwwICsxLDcxNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodChjKSAyMDA5LTIwMTAgIFJlYWx0ZWsgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwgVVNBCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiB3bGFuZmFlIDx3bGFuZmFlQHJlYWx0ZWsuY29tPgorICogUmVhbHRlayBDb3Jwb3JhdGlvbiwgTm8uIDIsIElubm92YXRpb24gUm9hZCBJSSwgSHNpbmNodSBTY2llbmNlIFBhcmssCisgKiBIc2luY2h1IDMwMCwgVGFpd2FuLgorICoKKyAqIExhcnJ5IEZpbmdlciA8TGFycnkuRmluZ2VyQGx3ZmluZ2VyLm5ldD4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19SVEw5MkNFX1RSWF9IX18KKyNkZWZpbmUgX19SVEw5MkNFX1RSWF9IX18KKworI2RlZmluZSBUWF9ERVNDX1NJWkUJCQkJNjQKKyNkZWZpbmUgVFhfREVTQ19BR0dSX1NVQkZSQU1FX1NJWkUJCTMyCisKKyNkZWZpbmUgUlhfREVTQ19TSVpFCQkJCTMyCisjZGVmaW5lIFJYX0RSVl9JTkZPX1NJWkVfVU5JVAkJCTgKKworI2RlZmluZQlUWF9ERVNDX05FWFRfREVTQ19PRkZTRVQJCTQwCisjZGVmaW5lIFVTQl9IV0RFU0NfSEVBREVSX0xFTgkJCTMyCisjZGVmaW5lIENSQ0xFTkdUSAkJCQk0CisKKyNkZWZpbmUgU0VUX1RYX0RFU0NfUEtUX1NJWkUoX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYywgMCwgMTYsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19PRkZTRVQoX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYywgMTYsIDgsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19CTUMoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcGRlc2MsIDI0LCAxLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfSFRDKF9fcGRlc2MsIF9fdmFsKQkJCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjLCAyNSwgMSwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX0xBU1RfU0VHKF9fcGRlc2MsIF9fdmFsKQkJXAorCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcGRlc2MsIDI2LCAxLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfRklSU1RfU0VHKF9fcGRlc2MsIF9fdmFsKQkJXAorCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcGRlc2MsIDI3LCAxLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfTElOSVAoX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYywgMjgsIDEsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19OT19BQ00oX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYywgMjksIDEsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19HRihfX3BkZXNjLCBfX3ZhbCkJCQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYywgMzAsIDEsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19PV04oX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcGRlc2MsIDMxLCAxLCBfX3ZhbCkKKworI2RlZmluZSBHRVRfVFhfREVTQ19QS1RfU0laRShfX3BkZXNjKQkJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MsIDAsIDE2KQorI2RlZmluZSBHRVRfVFhfREVTQ19PRkZTRVQoX19wZGVzYykJCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjLCAxNiwgOCkKKyNkZWZpbmUgR0VUX1RYX0RFU0NfQk1DKF9fcGRlc2MpCQkJXAorCUxFX0JJVFNfVE9fNEJZVEUoX19wZGVzYywgMjQsIDEpCisjZGVmaW5lIEdFVF9UWF9ERVNDX0hUQyhfX3BkZXNjKQkJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MsIDI1LCAxKQorI2RlZmluZSBHRVRfVFhfREVTQ19MQVNUX1NFRyhfX3BkZXNjKQkJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MsIDI2LCAxKQorI2RlZmluZSBHRVRfVFhfREVTQ19GSVJTVF9TRUcoX19wZGVzYykJCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjLCAyNywgMSkKKyNkZWZpbmUgR0VUX1RYX0RFU0NfTElOSVAoX19wZGVzYykJCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjLCAyOCwgMSkKKyNkZWZpbmUgR0VUX1RYX0RFU0NfTk9fQUNNKF9fcGRlc2MpCQkJXAorCUxFX0JJVFNfVE9fNEJZVEUoX19wZGVzYywgMjksIDEpCisjZGVmaW5lIEdFVF9UWF9ERVNDX0dGKF9fcGRlc2MpCQkJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MsIDMwLCAxKQorI2RlZmluZSBHRVRfVFhfREVTQ19PV04oX19wZGVzYykJCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjLCAzMSwgMSkKKworI2RlZmluZSBTRVRfVFhfREVTQ19NQUNJRChfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKzQsIDAsIDUsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19BR0dfQlJFQUsoX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYys0LCA1LCAxLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfQksoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcGRlc2MrNCwgNiwgMSwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX1JER19FTkFCTEUoX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYys0LCA3LCAxLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfUVVFVUVfU0VMKF9fcGRlc2MsIF9fdmFsKQkJXAorCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcGRlc2MrNCwgOCwgNSwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX1JER19OQVZfRVhUKF9fcGRlc2MsIF9fdmFsKQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYys0LCAxMywgMSwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX0xTSUdfVFhPUF9FTihfX3BkZXNjLCBfX3ZhbCkJXAorCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcGRlc2MrNCwgMTQsIDEsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19QSUZTKF9fcGRlc2MsIF9fdmFsKQkJXAorCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcGRlc2MrNCwgMTUsIDEsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19SQVRFX0lEKF9fcGRlc2MsIF9fdmFsKQkJXAorCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcGRlc2MrNCwgMTYsIDQsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19OQVZfVVNFX0hEUihfX3BkZXNjLCBfX3ZhbCkJXAorCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcGRlc2MrNCwgMjAsIDEsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19FTl9ERVNDX0lEKF9fcGRlc2MsIF9fdmFsKQkJXAorCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcGRlc2MrNCwgMjEsIDEsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19TRUNfVFlQRShfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKzQsIDIyLCAyLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfUEtUX09GRlNFVChfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKzQsIDI0LCA4LCBfX3ZhbCkKKworI2RlZmluZSBHRVRfVFhfREVTQ19NQUNJRChfX3BkZXNjKQkJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MrNCwgMCwgNSkKKyNkZWZpbmUgR0VUX1RYX0RFU0NfQUdHX0VOQUJMRShfX3BkZXNjKQkJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MrNCwgNSwgMSkKKyNkZWZpbmUgR0VUX1RYX0RFU0NfQUdHX0JSRUFLKF9fcGRlc2MpCQkJXAorCUxFX0JJVFNfVE9fNEJZVEUoX19wZGVzYys0LCA2LCAxKQorI2RlZmluZSBHRVRfVFhfREVTQ19SREdfRU5BQkxFKF9fcGRlc2MpCQkJXAorCUxFX0JJVFNfVE9fNEJZVEUoX19wZGVzYys0LCA3LCAxKQorI2RlZmluZSBHRVRfVFhfREVTQ19RVUVVRV9TRUwoX19wZGVzYykJCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjKzQsIDgsIDUpCisjZGVmaW5lIEdFVF9UWF9ERVNDX1JER19OQVZfRVhUKF9fcGRlc2MpCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjKzQsIDEzLCAxKQorI2RlZmluZSBHRVRfVFhfREVTQ19MU0lHX1RYT1BfRU4oX19wZGVzYykJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MrNCwgMTQsIDEpCisjZGVmaW5lIEdFVF9UWF9ERVNDX1BJRlMoX19wZGVzYykJCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjKzQsIDE1LCAxKQorI2RlZmluZSBHRVRfVFhfREVTQ19SQVRFX0lEKF9fcGRlc2MpCQkJXAorCUxFX0JJVFNfVE9fNEJZVEUoX19wZGVzYys0LCAxNiwgNCkKKyNkZWZpbmUgR0VUX1RYX0RFU0NfTkFWX1VTRV9IRFIoX19wZGVzYykJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MrNCwgMjAsIDEpCisjZGVmaW5lIEdFVF9UWF9ERVNDX0VOX0RFU0NfSUQoX19wZGVzYykJCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjKzQsIDIxLCAxKQorI2RlZmluZSBHRVRfVFhfREVTQ19TRUNfVFlQRShfX3BkZXNjKQkJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MrNCwgMjIsIDIpCisjZGVmaW5lIEdFVF9UWF9ERVNDX1BLVF9PRkZTRVQoX19wZGVzYykJCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjKzQsIDI0LCA4KQorCisjZGVmaW5lIFNFVF9UWF9ERVNDX1JUU19SQyhfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKzgsIDAsIDYsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19EQVRBX1JDKF9fcGRlc2MsIF9fdmFsKQkJXAorCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcGRlc2MrOCwgNiwgNiwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX0JBUl9SVFlfVEgoX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYys4LCAxNCwgMiwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX01PUkVfRlJBRyhfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKzgsIDE3LCAxLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfUkFXKF9fcGRlc2MsIF9fdmFsKQkJCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKzgsIDE4LCAxLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfQ0NYKF9fcGRlc2MsIF9fdmFsKQkJCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKzgsIDE5LCAxLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfQU1QRFVfREVOU0lUWShfX3BkZXNjLCBfX3ZhbCkJXAorCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcGRlc2MrOCwgMjAsIDMsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19BTlRTRUxfQShfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKzgsIDI0LCAxLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfQU5UU0VMX0IoX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYys4LCAyNSwgMSwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX1RYX0FOVF9DQ0soX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYys4LCAyNiwgMiwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX1RYX0FOVEwoX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYys4LCAyOCwgMiwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX1RYX0FOVF9IVChfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKzgsIDMwLCAyLCBfX3ZhbCkKKworI2RlZmluZSBHRVRfVFhfREVTQ19SVFNfUkMoX19wZGVzYykJCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjKzgsIDAsIDYpCisjZGVmaW5lIEdFVF9UWF9ERVNDX0RBVEFfUkMoX19wZGVzYykJCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjKzgsIDYsIDYpCisjZGVmaW5lIEdFVF9UWF9ERVNDX0JBUl9SVFlfVEgoX19wZGVzYykJCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjKzgsIDE0LCAyKQorI2RlZmluZSBHRVRfVFhfREVTQ19NT1JFX0ZSQUcoX19wZGVzYykJCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjKzgsIDE3LCAxKQorI2RlZmluZSBHRVRfVFhfREVTQ19SQVcoX19wZGVzYykJCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjKzgsIDE4LCAxKQorI2RlZmluZSBHRVRfVFhfREVTQ19DQ1goX19wZGVzYykJCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjKzgsIDE5LCAxKQorI2RlZmluZSBHRVRfVFhfREVTQ19BTVBEVV9ERU5TSVRZKF9fcGRlc2MpCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjKzgsIDIwLCAzKQorI2RlZmluZSBHRVRfVFhfREVTQ19BTlRTRUxfQShfX3BkZXNjKQkJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MrOCwgMjQsIDEpCisjZGVmaW5lIEdFVF9UWF9ERVNDX0FOVFNFTF9CKF9fcGRlc2MpCQkJXAorCUxFX0JJVFNfVE9fNEJZVEUoX19wZGVzYys4LCAyNSwgMSkKKyNkZWZpbmUgR0VUX1RYX0RFU0NfVFhfQU5UX0NDSyhfX3BkZXNjKQkJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MrOCwgMjYsIDIpCisjZGVmaW5lIEdFVF9UWF9ERVNDX1RYX0FOVEwoX19wZGVzYykJCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjKzgsIDI4LCAyKQorI2RlZmluZSBHRVRfVFhfREVTQ19UWF9BTlRfSFQoX19wZGVzYykJCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjKzgsIDMwLCAyKQorCisjZGVmaW5lIFNFVF9UWF9ERVNDX05FWFRfSEVBUF9QQUdFKF9fcGRlc2MsIF9fdmFsKQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYysxMiwgMCwgOCwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX1RBSUxfUEFHRShfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKzEyLCA4LCA4LCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfU0VRKF9fcGRlc2MsIF9fdmFsKQkJCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKzEyLCAxNiwgMTIsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19QS1RfSUQoX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYysxMiwgMjgsIDQsIF9fdmFsKQorCisjZGVmaW5lIEdFVF9UWF9ERVNDX05FWFRfSEVBUF9QQUdFKF9fcGRlc2MpCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjKzEyLCAwLCA4KQorI2RlZmluZSBHRVRfVFhfREVTQ19UQUlMX1BBR0UoX19wZGVzYykJCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjKzEyLCA4LCA4KQorI2RlZmluZSBHRVRfVFhfREVTQ19TRVEoX19wZGVzYykJCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjKzEyLCAxNiwgMTIpCisjZGVmaW5lIEdFVF9UWF9ERVNDX1BLVF9JRChfX3BkZXNjKQkJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MrMTIsIDI4LCA0KQorCisjZGVmaW5lIFNFVF9UWF9ERVNDX1JUU19SQVRFKF9fcGRlc2MsIF9fdmFsKQkJXAorCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcGRlc2MrMTYsIDAsIDUsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19BUF9EQ0ZFKF9fcGRlc2MsIF9fdmFsKQkJXAorCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcGRlc2MrMTYsIDUsIDEsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19RT1MoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcGRlc2MrMTYsIDYsIDEsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19IV1NFUV9FTihfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKzE2LCA3LCAxLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfVVNFX1JBVEUoX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYysxNiwgOCwgMSwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX0RJU0FCTEVfUlRTX0ZCKF9fcGRlc2MsIF9fdmFsKQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYysxNiwgOSwgMSwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX0RJU0FCTEVfRkIoX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYysxNiwgMTAsIDEsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19DVFMyU0VMRihfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKzE2LCAxMSwgMSwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX1JUU19FTkFCTEUoX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYysxNiwgMTIsIDEsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19IV19SVFNfRU5BQkxFKF9fcGRlc2MsIF9fdmFsKQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYysxNiwgMTMsIDEsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19QT1JUX0lEKF9fcGRlc2MsIF9fdmFsKQkJXAorCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcGRlc2MrMTYsIDE0LCAxLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfV0FJVF9EQ1RTKF9fcGRlc2MsIF9fdmFsKQkJXAorCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcGRlc2MrMTYsIDE4LCAxLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfQ1RTMkFQX0VOKF9fcGRlc2MsIF9fdmFsKQkJXAorCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcGRlc2MrMTYsIDE5LCAxLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfVFhfU1VCX0NBUlJJRVIoX19wZGVzYywgX192YWwpCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKzE2LCAyMCwgMiwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX1RYX1NUQkMoX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYysxNiwgMjIsIDIsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19EQVRBX1NIT1JUKF9fcGRlc2MsIF9fdmFsKQkJXAorCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcGRlc2MrMTYsIDI0LCAxLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfREFUQV9CVyhfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKzE2LCAyNSwgMSwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX1JUU19TSE9SVChfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKzE2LCAyNiwgMSwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX1JUU19CVyhfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKzE2LCAyNywgMSwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX1JUU19TQyhfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKzE2LCAyOCwgMiwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX1JUU19TVEJDKF9fcGRlc2MsIF9fdmFsKQkJXAorCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcGRlc2MrMTYsIDMwLCAyLCBfX3ZhbCkKKworI2RlZmluZSBHRVRfVFhfREVTQ19SVFNfUkFURShfX3BkZXNjKQkJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MrMTYsIDAsIDUpCisjZGVmaW5lIEdFVF9UWF9ERVNDX0FQX0RDRkUoX19wZGVzYykJCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjKzE2LCA1LCAxKQorI2RlZmluZSBHRVRfVFhfREVTQ19RT1MoX19wZGVzYykJCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjKzE2LCA2LCAxKQorI2RlZmluZSBHRVRfVFhfREVTQ19IV1NFUV9FTihfX3BkZXNjKQkJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MrMTYsIDcsIDEpCisjZGVmaW5lIEdFVF9UWF9ERVNDX1VTRV9SQVRFKF9fcGRlc2MpCQkJXAorCUxFX0JJVFNfVE9fNEJZVEUoX19wZGVzYysxNiwgOCwgMSkKKyNkZWZpbmUgR0VUX1RYX0RFU0NfRElTQUJMRV9SVFNfRkIoX19wZGVzYykJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MrMTYsIDksIDEpCisjZGVmaW5lIEdFVF9UWF9ERVNDX0RJU0FCTEVfRkIoX19wZGVzYykJCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjKzE2LCAxMCwgMSkKKyNkZWZpbmUgR0VUX1RYX0RFU0NfQ1RTMlNFTEYoX19wZGVzYykJCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjKzE2LCAxMSwgMSkKKyNkZWZpbmUgR0VUX1RYX0RFU0NfUlRTX0VOQUJMRShfX3BkZXNjKQkJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MrMTYsIDEyLCAxKQorI2RlZmluZSBHRVRfVFhfREVTQ19IV19SVFNfRU5BQkxFKF9fcGRlc2MpCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjKzE2LCAxMywgMSkKKyNkZWZpbmUgR0VUX1RYX0RFU0NfUE9SVF9JRChfX3BkZXNjKQkJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MrMTYsIDE0LCAxKQorI2RlZmluZSBHRVRfVFhfREVTQ19XQUlUX0RDVFMoX19wZGVzYykJCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjKzE2LCAxOCwgMSkKKyNkZWZpbmUgR0VUX1RYX0RFU0NfQ1RTMkFQX0VOKF9fcGRlc2MpCQkJXAorCUxFX0JJVFNfVE9fNEJZVEUoX19wZGVzYysxNiwgMTksIDEpCisjZGVmaW5lIEdFVF9UWF9ERVNDX1RYX1NVQl9DQVJSSUVSKF9fcGRlc2MpCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjKzE2LCAyMCwgMikKKyNkZWZpbmUgR0VUX1RYX0RFU0NfVFhfU1RCQyhfX3BkZXNjKQkJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MrMTYsIDIyLCAyKQorI2RlZmluZSBHRVRfVFhfREVTQ19EQVRBX1NIT1JUKF9fcGRlc2MpCQkJXAorCUxFX0JJVFNfVE9fNEJZVEUoX19wZGVzYysxNiwgMjQsIDEpCisjZGVmaW5lIEdFVF9UWF9ERVNDX0RBVEFfQlcoX19wZGVzYykJCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjKzE2LCAyNSwgMSkKKyNkZWZpbmUgR0VUX1RYX0RFU0NfUlRTX1NIT1JUKF9fcGRlc2MpCQkJXAorCUxFX0JJVFNfVE9fNEJZVEUoX19wZGVzYysxNiwgMjYsIDEpCisjZGVmaW5lIEdFVF9UWF9ERVNDX1JUU19CVyhfX3BkZXNjKQkJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MrMTYsIDI3LCAxKQorI2RlZmluZSBHRVRfVFhfREVTQ19SVFNfU0MoX19wZGVzYykJCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjKzE2LCAyOCwgMikKKyNkZWZpbmUgR0VUX1RYX0RFU0NfUlRTX1NUQkMoX19wZGVzYykJCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjKzE2LCAzMCwgMikKKworI2RlZmluZSBTRVRfVFhfREVTQ19UWF9SQVRFKF9fcGRlc2MsIF9fdmFsKQkJXAorCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcGRlc2MrMjAsIDAsIDYsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19EQVRBX1NIT1JUR0koX19wZGVzYywgX192YWwpCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKzIwLCA2LCAxLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfQ0NYX1RBRyhfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKzIwLCA3LCAxLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfREFUQV9SQVRFX0ZCX0xJTUlUKF9fcGRlc2MsIF9fdmFsKQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYysyMCwgOCwgNSwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX1JUU19SQVRFX0ZCX0xJTUlUKF9fcGRlc2MsIF9fdmFsKQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYysyMCwgMTMsIDQsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19SRVRSWV9MSU1JVF9FTkFCTEUoX19wZGVzYywgX192YWwpCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKzIwLCAxNywgMSwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX0RBVEFfUkVUUllfTElNSVQoX19wZGVzYywgX192YWwpCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKzIwLCAxOCwgNiwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX1VTQl9UWEFHR19OVU0oX19wZGVzYywgX192YWwpCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKzIwLCAyNCwgOCwgX192YWwpCisKKyNkZWZpbmUgR0VUX1RYX0RFU0NfVFhfUkFURShfX3BkZXNjKQkJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MrMjAsIDAsIDYpCisjZGVmaW5lIEdFVF9UWF9ERVNDX0RBVEFfU0hPUlRHSShfX3BkZXNjKQkJXAorCUxFX0JJVFNfVE9fNEJZVEUoX19wZGVzYysyMCwgNiwgMSkKKyNkZWZpbmUgR0VUX1RYX0RFU0NfQ0NYX1RBRyhfX3BkZXNjKQkJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MrMjAsIDcsIDEpCisjZGVmaW5lIEdFVF9UWF9ERVNDX0RBVEFfUkFURV9GQl9MSU1JVChfX3BkZXNjKQkJXAorCUxFX0JJVFNfVE9fNEJZVEUoX19wZGVzYysyMCwgOCwgNSkKKyNkZWZpbmUgR0VUX1RYX0RFU0NfUlRTX1JBVEVfRkJfTElNSVQoX19wZGVzYykJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MrMjAsIDEzLCA0KQorI2RlZmluZSBHRVRfVFhfREVTQ19SRVRSWV9MSU1JVF9FTkFCTEUoX19wZGVzYykJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MrMjAsIDE3LCAxKQorI2RlZmluZSBHRVRfVFhfREVTQ19EQVRBX1JFVFJZX0xJTUlUKF9fcGRlc2MpCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjKzIwLCAxOCwgNikKKyNkZWZpbmUgR0VUX1RYX0RFU0NfVVNCX1RYQUdHX05VTShfX3BkZXNjKQkJXAorCUxFX0JJVFNfVE9fNEJZVEUoX19wZGVzYysyMCwgMjQsIDgpCisKKyNkZWZpbmUgU0VUX1RYX0RFU0NfVFhBR0NfQShfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKzI0LCAwLCA1LCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfVFhBR0NfQihfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKzI0LCA1LCA1LCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfVVNFX01BWF9MRU4oX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYysyNCwgMTAsIDEsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19NQVhfQUdHX05VTShfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKzI0LCAxMSwgNSwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX01DU0cxX01BWF9MRU4oX19wZGVzYywgX192YWwpCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKzI0LCAxNiwgNCwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX01DU0cyX01BWF9MRU4oX19wZGVzYywgX192YWwpCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKzI0LCAyMCwgNCwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX01DU0czX01BWF9MRU4oX19wZGVzYywgX192YWwpCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKzI0LCAyNCwgNCwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX01DUzdfU0dJX01BWF9MRU4oX19wZGVzYywgX192YWwpCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKzI0LCAyOCwgNCwgX192YWwpCisKKyNkZWZpbmUgR0VUX1RYX0RFU0NfVFhBR0NfQShfX3BkZXNjKQkJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MrMjQsIDAsIDUpCisjZGVmaW5lIEdFVF9UWF9ERVNDX1RYQUdDX0IoX19wZGVzYykJCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjKzI0LCA1LCA1KQorI2RlZmluZSBHRVRfVFhfREVTQ19VU0VfTUFYX0xFTihfX3BkZXNjKQkJXAorCUxFX0JJVFNfVE9fNEJZVEUoX19wZGVzYysyNCwgMTAsIDEpCisjZGVmaW5lIEdFVF9UWF9ERVNDX01BWF9BR0dfTlVNKF9fcGRlc2MpCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjKzI0LCAxMSwgNSkKKyNkZWZpbmUgR0VUX1RYX0RFU0NfTUNTRzFfTUFYX0xFTihfX3BkZXNjKQkJXAorCUxFX0JJVFNfVE9fNEJZVEUoX19wZGVzYysyNCwgMTYsIDQpCisjZGVmaW5lIEdFVF9UWF9ERVNDX01DU0cyX01BWF9MRU4oX19wZGVzYykJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MrMjQsIDIwLCA0KQorI2RlZmluZSBHRVRfVFhfREVTQ19NQ1NHM19NQVhfTEVOKF9fcGRlc2MpCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjKzI0LCAyNCwgNCkKKyNkZWZpbmUgR0VUX1RYX0RFU0NfTUNTN19TR0lfTUFYX0xFTihfX3BkZXNjKQkJXAorCUxFX0JJVFNfVE9fNEJZVEUoX19wZGVzYysyNCwgMjgsIDQpCisKKyNkZWZpbmUgU0VUX1RYX0RFU0NfVFhfQlVGRkVSX1NJWkUoX19wZGVzYywgX192YWwpCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKzI4LCAwLCAxNiwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX01DU0c0X01BWF9MRU4oX19wZGVzYywgX192YWwpCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKzI4LCAxNiwgNCwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX01DU0c1X01BWF9MRU4oX19wZGVzYywgX192YWwpCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKzI4LCAyMCwgNCwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX01DU0c2X01BWF9MRU4oX19wZGVzYywgX192YWwpCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKzI4LCAyNCwgNCwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX01DUzE1X1NHSV9NQVhfTEVOKF9fcGRlc2MsIF9fdmFsKQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYysyOCwgMjgsIDQsIF9fdmFsKQorCisjZGVmaW5lIEdFVF9UWF9ERVNDX1RYX0JVRkZFUl9TSVpFKF9fcGRlc2MpCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjKzI4LCAwLCAxNikKKyNkZWZpbmUgR0VUX1RYX0RFU0NfTUNTRzRfTUFYX0xFTihfX3BkZXNjKQkJXAorCUxFX0JJVFNfVE9fNEJZVEUoX19wZGVzYysyOCwgMTYsIDQpCisjZGVmaW5lIEdFVF9UWF9ERVNDX01DU0c1X01BWF9MRU4oX19wZGVzYykJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MrMjgsIDIwLCA0KQorI2RlZmluZSBHRVRfVFhfREVTQ19NQ1NHNl9NQVhfTEVOKF9fcGRlc2MpCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjKzI4LCAyNCwgNCkKKyNkZWZpbmUgR0VUX1RYX0RFU0NfTUNTMTVfU0dJX01BWF9MRU4oX19wZGVzYykJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MrMjgsIDI4LCA0KQorCisjZGVmaW5lIFNFVF9UWF9ERVNDX1RYX0JVRkZFUl9BRERSRVNTKF9fcGRlc2MsIF9fdmFsKQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYyszMiwgMCwgMzIsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19UWF9CVUZGRVJfQUREUkVTUzY0KF9fcGRlc2MsIF9fdmFsKSBcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYyszNiwgMCwgMzIsIF9fdmFsKQorCisjZGVmaW5lIEdFVF9UWF9ERVNDX1RYX0JVRkZFUl9BRERSRVNTKF9fcGRlc2MpCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjKzMyLCAwLCAzMikKKyNkZWZpbmUgR0VUX1RYX0RFU0NfVFhfQlVGRkVSX0FERFJFU1M2NChfX3BkZXNjKQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjKzM2LCAwLCAzMikKKworI2RlZmluZSBTRVRfVFhfREVTQ19ORVhUX0RFU0NfQUREUkVTUyhfX3BkZXNjLCBfX3ZhbCkJXAorCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcGRlc2MrNDAsIDAsIDMyLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfTkVYVF9ERVNDX0FERFJFU1M2NChfX3BkZXNjLCBfX3ZhbCkgXAorCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcGRlc2MrNDQsIDAsIDMyLCBfX3ZhbCkKKworI2RlZmluZSBHRVRfVFhfREVTQ19ORVhUX0RFU0NfQUREUkVTUyhfX3BkZXNjKQkJXAorCUxFX0JJVFNfVE9fNEJZVEUoX19wZGVzYys0MCwgMCwgMzIpCisjZGVmaW5lIEdFVF9UWF9ERVNDX05FWFRfREVTQ19BRERSRVNTNjQoX19wZGVzYykJXAorCUxFX0JJVFNfVE9fNEJZVEUoX19wZGVzYys0NCwgMCwgMzIpCisKKyNkZWZpbmUgR0VUX1JYX0RFU0NfUEtUX0xFTihfX3BkZXNjKQkJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MsIDAsIDE0KQorI2RlZmluZSBHRVRfUlhfREVTQ19DUkMzMihfX3BkZXNjKQkJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MsIDE0LCAxKQorI2RlZmluZSBHRVRfUlhfREVTQ19JQ1YoX19wZGVzYykJCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjLCAxNSwgMSkKKyNkZWZpbmUgR0VUX1JYX0RFU0NfRFJWX0lORk9fU0laRShfX3BkZXNjKQkJXAorCUxFX0JJVFNfVE9fNEJZVEUoX19wZGVzYywgMTYsIDQpCisjZGVmaW5lIEdFVF9SWF9ERVNDX1NFQ1VSSVRZKF9fcGRlc2MpCQkJXAorCUxFX0JJVFNfVE9fNEJZVEUoX19wZGVzYywgMjAsIDMpCisjZGVmaW5lIEdFVF9SWF9ERVNDX1FPUyhfX3BkZXNjKQkJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MsIDIzLCAxKQorI2RlZmluZSBHRVRfUlhfREVTQ19TSElGVChfX3BkZXNjKQkJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MsIDI0LCAyKQorI2RlZmluZSBHRVRfUlhfREVTQ19QSFlTVChfX3BkZXNjKQkJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MsIDI2LCAxKQorI2RlZmluZSBHRVRfUlhfREVTQ19TV0RFQyhfX3BkZXNjKQkJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MsIDI3LCAxKQorI2RlZmluZSBHRVRfUlhfREVTQ19MUyhfX3BkZXNjKQkJCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjLCAyOCwgMSkKKyNkZWZpbmUgR0VUX1JYX0RFU0NfRlMoX19wZGVzYykJCQkJXAorCUxFX0JJVFNfVE9fNEJZVEUoX19wZGVzYywgMjksIDEpCisjZGVmaW5lIEdFVF9SWF9ERVNDX0VPUihfX3BkZXNjKQkJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MsIDMwLCAxKQorI2RlZmluZSBHRVRfUlhfREVTQ19PV04oX19wZGVzYykJCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjLCAzMSwgMSkKKworI2RlZmluZSBTRVRfUlhfREVTQ19QS1RfTEVOKF9fcGRlc2MsIF9fdmFsKQkJXAorCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcGRlc2MsIDAsIDE0LCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1JYX0RFU0NfRU9SKF9fcGRlc2MsIF9fdmFsKQkJCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjLCAzMCwgMSwgX192YWwpCisjZGVmaW5lIFNFVF9SWF9ERVNDX09XTihfX3BkZXNjLCBfX3ZhbCkJCQlcCisJU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wZGVzYywgMzEsIDEsIF9fdmFsKQorCisjZGVmaW5lIEdFVF9SWF9ERVNDX01BQ0lEKF9fcGRlc2MpCQkJXAorCUxFX0JJVFNfVE9fNEJZVEUoX19wZGVzYys0LCAwLCA1KQorI2RlZmluZSBHRVRfUlhfREVTQ19USUQoX19wZGVzYykJCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjKzQsIDUsIDQpCisjZGVmaW5lIEdFVF9SWF9ERVNDX0hXUlNWRChfX3BkZXNjKQkJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MrNCwgOSwgNSkKKyNkZWZpbmUgR0VUX1JYX0RFU0NfUEFHR1IoX19wZGVzYykJCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjKzQsIDE0LCAxKQorI2RlZmluZSBHRVRfUlhfREVTQ19GQUdHUihfX3BkZXNjKQkJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MrNCwgMTUsIDEpCisjZGVmaW5lIEdFVF9SWF9ERVNDX0ExX0ZJVChfX3BkZXNjKQkJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MrNCwgMTYsIDQpCisjZGVmaW5lIEdFVF9SWF9ERVNDX0EyX0ZJVChfX3BkZXNjKQkJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MrNCwgMjAsIDQpCisjZGVmaW5lIEdFVF9SWF9ERVNDX1BBTShfX3BkZXNjKQkJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MrNCwgMjQsIDEpCisjZGVmaW5lIEdFVF9SWF9ERVNDX1BXUihfX3BkZXNjKQkJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MrNCwgMjUsIDEpCisjZGVmaW5lIEdFVF9SWF9ERVNDX01EKF9fcGRlc2MpCQkJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MrNCwgMjYsIDEpCisjZGVmaW5lIEdFVF9SWF9ERVNDX01GKF9fcGRlc2MpCQkJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MrNCwgMjcsIDEpCisjZGVmaW5lIEdFVF9SWF9ERVNDX1RZUEUoX19wZGVzYykJCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjKzQsIDI4LCAyKQorI2RlZmluZSBHRVRfUlhfREVTQ19NQyhfX3BkZXNjKQkJCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjKzQsIDMwLCAxKQorI2RlZmluZSBHRVRfUlhfREVTQ19CQyhfX3BkZXNjKQkJCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjKzQsIDMxLCAxKQorI2RlZmluZSBHRVRfUlhfREVTQ19TRVEoX19wZGVzYykJCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjKzgsIDAsIDEyKQorI2RlZmluZSBHRVRfUlhfREVTQ19GUkFHKF9fcGRlc2MpCQkJXAorCUxFX0JJVFNfVE9fNEJZVEUoX19wZGVzYys4LCAxMiwgNCkKKyNkZWZpbmUgR0VUX1JYX0RFU0NfTkVYVF9QS1RfTEVOKF9fcGRlc2MpCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjKzgsIDE2LCAxNCkKKyNkZWZpbmUgR0VUX1JYX0RFU0NfTkVYVF9JTkQoX19wZGVzYykJCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjKzgsIDMwLCAxKQorI2RlZmluZSBHRVRfUlhfREVTQ19SU1ZEKF9fcGRlc2MpCQkJXAorCUxFX0JJVFNfVE9fNEJZVEUoX19wZGVzYys4LCAzMSwgMSkKKworI2RlZmluZSBHRVRfUlhfREVTQ19SWE1DUyhfX3BkZXNjKQkJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MrMTIsIDAsIDYpCisjZGVmaW5lIEdFVF9SWF9ERVNDX1JYSFQoX19wZGVzYykJCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjKzEyLCA2LCAxKQorI2RlZmluZSBHRVRfUlhfREVTQ19TUExDUChfX3BkZXNjKQkJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MrMTIsIDgsIDEpCisjZGVmaW5lIEdFVF9SWF9ERVNDX0JXKF9fcGRlc2MpCQkJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MrMTIsIDksIDEpCisjZGVmaW5lIEdFVF9SWF9ERVNDX0hUQyhfX3BkZXNjKQkJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MrMTIsIDEwLCAxKQorI2RlZmluZSBHRVRfUlhfREVTQ19IV1BDX0VSUihfX3BkZXNjKQkJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MrMTIsIDE0LCAxKQorI2RlZmluZSBHRVRfUlhfREVTQ19IV1BDX0lORChfX3BkZXNjKQkJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MrMTIsIDE1LCAxKQorI2RlZmluZSBHRVRfUlhfREVTQ19JVjAoX19wZGVzYykJCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjKzEyLCAxNiwgMTYpCisKKyNkZWZpbmUgR0VUX1JYX0RFU0NfSVYxKF9fcGRlc2MpCQkJXAorCUxFX0JJVFNfVE9fNEJZVEUoX19wZGVzYysxNiwgMCwgMzIpCisjZGVmaW5lIEdFVF9SWF9ERVNDX1RTRkwoX19wZGVzYykJCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjKzIwLCAwLCAzMikKKworI2RlZmluZSBHRVRfUlhfREVTQ19CVUZGX0FERFIoX19wZGVzYykJCQlcCisJTEVfQklUU19UT180QllURShfX3BkZXNjKzI0LCAwLCAzMikKKyNkZWZpbmUgR0VUX1JYX0RFU0NfQlVGRl9BRERSNjQoX19wZGVzYykJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MrMjgsIDAsIDMyKQorCisjZGVmaW5lIFNFVF9SWF9ERVNDX0JVRkZfQUREUihfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19UT19MRV80QllURShfX3BkZXNjKzI0LCAwLCAzMiwgX192YWwpCisjZGVmaW5lIFNFVF9SWF9ERVNDX0JVRkZfQUREUjY0KF9fcGRlc2MsIF9fdmFsKSAJXAorCVNFVF9CSVRTX1RPX0xFXzRCWVRFKF9fcGRlc2MrMjgsIDAsIDMyLCBfX3ZhbCkKKworI2RlZmluZSBDTEVBUl9QQ0lfVFhfREVTQ19DT05URU5UKF9fcGRlc2MsIF9zaXplKQlcCitkbyB7CQkJCQkJCVwKKwlpZiAoX3NpemUgPiBUWF9ERVNDX05FWFRfREVTQ19PRkZTRVQpCQlcCisJCW1lbXNldCgodm9pZCAqKV9fcGRlc2MsIDAsIFRYX0RFU0NfTkVYVF9ERVNDX09GRlNFVCk7CVwKKwllbHNlCQkJCQkJXAorCQltZW1zZXQoKHZvaWQgKilfX3BkZXNjLCAwLCBfc2l6ZSk7CVwKK30gd2hpbGUgKDApOworCisjZGVmaW5lIFJYX0hBTF9JU19DQ0tfUkFURShfcGRlc2MpXAorCShfcGRlc2MtPnJ4bWNzID09IERFU0M5MkNfUkFURTFNIHx8CQlcCisJIF9wZGVzYy0+cnhtY3MgPT0gREVTQzkyQ19SQVRFMk0gfHwJCVwKKwkgX3BkZXNjLT5yeG1jcyA9PSBERVNDOTJDX1JBVEU1XzVNIHx8CQlcCisJIF9wZGVzYy0+cnhtY3MgPT0gREVTQzkyQ19SQVRFMTFNKQorCitzdHJ1Y3QgcnhfZndpbmZvXzkyYyB7CisJdTggZ2Fpbl90cnN3WzRdOworCXU4IHB3ZGJfYWxsOworCXU4IGNmb3Nob1s0XTsKKwl1OCBjZm90YWlsWzRdOworCWNoYXIgcnhldm1bMl07CisJY2hhciByeHNucls0XTsKKwl1OCBwZHNuclsyXTsKKwl1OCBjc2lfY3VycmVudFsyXTsKKwl1OCBjc2lfdGFyZ2V0WzJdOworCXU4IHNpZ2V2bTsKKwl1OCBtYXhfZXhfcHdyOworCXU4IGV4X2ludGZfZmxhZzoxOworCXU4IHNnaV9lbjoxOworCXU4IHJ4c2M6MjsKKwl1OCByZXNlcnZlOjQ7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgdHhfZGVzY185MmMgeworCXUzMiBwa3RzaXplOjE2OworCXUzMiBvZmZzZXQ6ODsKKwl1MzIgYm1jOjE7CisJdTMyIGh0YzoxOworCXUzMiBsYXN0c2VnOjE7CisJdTMyIGZpcnN0c2VnOjE7CisJdTMyIGxpbmlwOjE7CisJdTMyIG5vYWNtOjE7CisJdTMyIGdmOjE7CisJdTMyIG93bjoxOworCisJdTMyIG1hY2lkOjU7CisJdTMyIGFnZ19lbjoxOworCXUzMiBiazoxOworCXUzMiByZGdfZW46MTsKKwl1MzIgcXVldWVzZWw6NTsKKwl1MzIgcmRfbmF2X2V4dDoxOworCXUzMiBsc2lnX3R4b3BfZW46MTsKKwl1MzIgcGlmczoxOworCXUzMiByYXRlaWQ6NDsKKwl1MzIgbmF2X3VzZWhkcjoxOworCXUzMiBlbl9kZXNjaWQ6MTsKKwl1MzIgc2VjdHlwZToyOworCXUzMiBwa3RvZmZzZXQ6ODsKKworCXUzMiBydHNfcmM6NjsKKwl1MzIgZGF0YV9yYzo2OworCXUzMiByc3ZkMDoyOworCXUzMiBiYXJfcmV0cnlodDoyOworCXUzMiByc3ZkMToxOworCXUzMiBtb3JlZnJhZzoxOworCXUzMiByYXc6MTsKKwl1MzIgY2N4OjE7CisJdTMyIGFtcGR1ZGVuc2l0eTozOworCXUzMiByc3ZkMjoxOworCXUzMiBhbnRfc2VsYToxOworCXUzMiBhbnRfc2VsYjoxOworCXUzMiB0eGFudF9jY2s6MjsKKwl1MzIgdHhhbnRfbDoyOworCXUzMiB0eGFudF9odDoyOworCisJdTMyIG5leHRoZWFkcGFnZTo4OworCXUzMiB0YWlscGFnZTo4OworCXUzMiBzZXE6MTI7CisJdTMyIHBrdGlkOjQ7CisKKwl1MzIgcnRzcmF0ZTo1OworCXUzMiBhcGRjZmU6MTsKKwl1MzIgcW9zOjE7CisJdTMyIGh3c2VxX2VuYWJsZToxOworCXUzMiB1c2VycmF0ZToxOworCXUzMiBkaXNfcnRzZmI6MTsKKwl1MzIgZGlzX2RhdGFmYjoxOworCXUzMiBjdHMyc2VsZjoxOworCXUzMiBydHNfZW46MTsKKwl1MzIgaHdydHNfZW46MTsKKwl1MzIgcG9ydGlkOjE7CisJdTMyIHJzdmQzOjM7CisJdTMyIHdhaXRkY3RzOjE7CisJdTMyIGN0czJhcF9lbjoxOworCXUzMiB0eHNjOjI7CisJdTMyIHN0YmM6MjsKKwl1MzIgdHhzaG9ydDoxOworCXUzMiB0eGJ3OjE7CisJdTMyIHJ0c3Nob3J0OjE7CisJdTMyIHJ0c2J3OjE7CisJdTMyIHJ0c3NjOjI7CisJdTMyIHJ0c3N0YmM6MjsKKworCXUzMiB0eHJhdGU6NjsKKwl1MzIgc2hvcnRnaToxOworCXUzMiBjY3h0OjE7CisJdTMyIHR4cmF0ZV9mYl9sbXQ6NTsKKwl1MzIgcnRzcmF0ZV9mYl9sbXQ6NDsKKwl1MzIgcmV0cnlsbXRfZW46MTsKKwl1MzIgdHhyZXRyeWxtdDo2OworCXUzMiB1c2JfdHhhZ2dudW06ODsKKworCXUzMiB0eGFnY2E6NTsKKwl1MzIgdHhhZ2NiOjU7CisJdTMyIHVzZW1heGxlbjoxOworCXUzMiBtYXhhZ2dudW06NTsKKwl1MzIgbWNzZzFtYXhsZW46NDsKKwl1MzIgbWNzZzJtYXhsZW46NDsKKwl1MzIgbWNzZzNtYXhsZW46NDsKKwl1MzIgbWNzN3NnaW1heGxlbjo0OworCisJdTMyIHR4YnVmZmVyc2l6ZToxNjsKKwl1MzIgbWNzZzRtYXhsZW46NDsKKwl1MzIgbWNzZzVtYXhsZW46NDsKKwl1MzIgbWNzZzZtYXhsZW46NDsKKwl1MzIgbWNzZzE1c2dpbWF4bGVuOjQ7CisKKwl1MzIgdHhidWZmYWRkcjsKKwl1MzIgdHhidWZmZXJhZGRyNjQ7CisJdTMyIG5leHRkZXNjYWRkcmVzczsKKwl1MzIgbmV4dGRlc2NhZGRyZXNzNjQ7CisKKwl1MzIgcmVzZXJ2ZV9wYXNzX3BjaWVfbW1fbGltaXRbNF07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgcnhfZGVzY185MmMgeworCXUzMiBsZW5ndGg6MTQ7CisJdTMyIGNyYzMyOjE7CisJdTMyIGljdmVycm9yOjE7CisJdTMyIGRydl9pbmZvc2l6ZTo0OworCXUzMiBzZWN1cml0eTozOworCXUzMiBxb3M6MTsKKwl1MzIgc2hpZnQ6MjsKKwl1MzIgcGh5c3RhdHVzOjE7CisJdTMyIHN3ZGVjOjE7CisJdTMyIGxhc3RzZWc6MTsKKwl1MzIgZmlyc3RzZWc6MTsKKwl1MzIgZW9yOjE7CisJdTMyIG93bjoxOworCisJdTMyIG1hY2lkOjU7CisJdTMyIHRpZDo0OworCXUzMiBod3JzdmQ6NTsKKwl1MzIgcGFnZ3I6MTsKKwl1MzIgZmFnZ3I6MTsKKwl1MzIgYTFfZml0OjQ7CisJdTMyIGEyX2ZpdDo0OworCXUzMiBwYW06MTsKKwl1MzIgcHdyOjE7CisJdTMyIG1vcmVkYXRhOjE7CisJdTMyIG1vcmVmcmFnOjE7CisJdTMyIHR5cGU6MjsKKwl1MzIgbWM6MTsKKwl1MzIgYmM6MTsKKworCXUzMiBzZXE6MTI7CisJdTMyIGZyYWc6NDsKKwl1MzIgbmV4dHBrdGxlbjoxNDsKKwl1MzIgbmV4dGluZDoxOworCXUzMiByc3ZkOjE7CisKKwl1MzIgcnhtY3M6NjsKKwl1MzIgcnhodDoxOworCXUzMiBhbXNkdToxOworCXUzMiBzcGxjcDoxOworCXUzMiBiYW5kd2lkdGg6MTsKKwl1MzIgaHRjOjE7CisJdTMyIHRjcGNoa19ycHQ6MTsKKwl1MzIgaXBjY2hrX3JwdDoxOworCXUzMiB0Y3BjaGtfdmFsaWQ6MTsKKwl1MzIgaHdwY2VycjoxOworCXUzMiBod3BjaW5kOjE7CisJdTMyIGl2MDoxNjsKKworCXUzMiBpdjE7CisKKwl1MzIgdHNmbDsKKworCXUzMiBidWZmZXJhZGRyZXNzOworCXUzMiBidWZmZXJhZGRyZXNzNjQ7CisKK30gX19wYWNrZWQ7CisKK3ZvaWQgcnRsOTJjZV90eF9maWxsX2Rlc2Moc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsCisJCQkgIHU4ICpwZGVzYywgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvLAorCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcXNlbCk7Citib29sIHJ0bDkyY2VfcnhfcXVlcnlfZGVzYyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSAgIHN0cnVjdCBydGxfc3RhdHMgKnN0YXRzLAorCQkJICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cywKKwkJCSAgIHU4ICpwZGVzYywgc3RydWN0IHNrX2J1ZmYgKnNrYik7Cit2b2lkIHJ0bDkyY2Vfc2V0X2Rlc2ModTggKnBkZXNjLCBib29sIGlzdHgsIHU4IGRlc2NfbmFtZSwgdTggKnZhbCk7Cit1MzIgcnRsOTJjZV9nZXRfZGVzYyh1OCAqcGRlc2MsIGJvb2wgaXN0eCwgdTggZGVzY19uYW1lKTsKK3ZvaWQgcnRsOTJjZV90eF9wb2xsaW5nKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1bnNpZ25lZCBpbnQgaHdfcXVldWUpOwordm9pZCBydGw5MmNlX3R4X2ZpbGxfY21kZGVzYyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggKnBkZXNjLAorCQkJICAgICBib29sIGJfZmlyc3RzZWcsIGJvb2wgYl9sYXN0c2VnLAorCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS93aWZpLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3dpZmkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDRkNzk2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS93aWZpLmgKQEAgLTAsMCArMSwxNTMyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDktMjAxMCAgUmVhbHRlayBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLCBVU0EKKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIHdsYW5mYWUgPHdsYW5mYWVAcmVhbHRlay5jb20+CisgKiBSZWFsdGVrIENvcnBvcmF0aW9uLCBOby4gMiwgSW5ub3ZhdGlvbiBSb2FkIElJLCBIc2luY2h1IFNjaWVuY2UgUGFyaywKKyAqIEhzaW5jaHUgMzAwLCBUYWl3YW4uCisgKgorICogTGFycnkgRmluZ2VyIDxMYXJyeS5GaW5nZXJAbHdmaW5nZXIubmV0PgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX1JUTF9XSUZJX0hfXworI2RlZmluZSBfX1JUTF9XSUZJX0hfXworCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgorI2luY2x1ZGUgImRlYnVnLmgiCisKKyNkZWZpbmUgUkZfQ0hBTkdFX0JZX0lOSVQJCQkwCisjZGVmaW5lIFJGX0NIQU5HRV9CWV9JUFMJCQlCSVQoMjgpCisjZGVmaW5lIFJGX0NIQU5HRV9CWV9QUwkJCQlCSVQoMjkpCisjZGVmaW5lIFJGX0NIQU5HRV9CWV9IVwkJCQlCSVQoMzApCisjZGVmaW5lIFJGX0NIQU5HRV9CWV9TVwkJCQlCSVQoMzEpCisKKyNkZWZpbmUgSVFLX0FEREFfUkVHX05VTQkJCTE2CisjZGVmaW5lIElRS19NQUNfUkVHX05VTQkJCQk0CisKKyNkZWZpbmUgTUFYX0tFWV9MRU4JCQkJNjEKKyNkZWZpbmUgS0VZX0JVRl9TSVpFCQkJCTUKKworLyogUW9TIHJlbGF0ZWQuICovCisvKmFjaTogMHgwMAlCZXN0IEVmZm9ydCovCisvKmFjaTogMHgwMQlCYWNrZ3JvdW5kKi8KKy8qYWNpOiAweDEwCVZpZGVvKi8KKy8qYWNpOiAweDExCVZvaWNlKi8KKy8qTWF4OiBkZWZpbmUgdG90YWwgbnVtYmVyLiovCisjZGVmaW5lIEFDMF9CRQkJCQkJMAorI2RlZmluZSBBQzFfQksJCQkJCTEKKyNkZWZpbmUgQUMyX1ZJCQkJCQkyCisjZGVmaW5lIEFDM19WTwkJCQkJMworI2RlZmluZSBBQ19NQVgJCQkJCTQKKyNkZWZpbmUgUU9TX1FVRVVFX05VTQkJCQk0CisjZGVmaW5lIFJUTF9NQUM4MDIxMV9OVU1fUVVFVUUJCQk1CisKKyNkZWZpbmUgUUJTU19MT0FEX1NJWkUJCQkJNQorI2RlZmluZSBNQVhfV01NRUxFX0xFTkdUSAkJCTY0CisKKy8qc2xvdCB0aW1lIGZvciAxMWcuICovCisjZGVmaW5lIFJUTF9TTE9UX1RJTUVfOQkJCQk5CisjZGVmaW5lIFJUTF9TTE9UX1RJTUVfMjAJCQkyMAorCisvKnJlbGF0ZWQgd2l0aCB0Y3AvaXAuICovCisvKmlmX2VodGhlci5oKi8KKyNkZWZpbmUgRVRIX1BfUEFFCQkweDg4OEUJLypQb3J0IEFjY2VzcyBFbnRpdHkgKElFRUUgODAyLjFYKSAqLworI2RlZmluZSBFVEhfUF9JUAkJMHgwODAwCS8qSW50ZXJuZXQgUHJvdG9jb2wgcGFja2V0ICovCisjZGVmaW5lIEVUSF9QX0FSUAkJMHgwODA2CS8qQWRkcmVzcyBSZXNvbHV0aW9uIHBhY2tldCAqLworI2RlZmluZSBTTkFQX1NJWkUJCTYKKyNkZWZpbmUgUFJPVE9DX1RZUEVfU0laRQkyCisKKy8qcmVsYXRlZCB3aXRoIDgwMi4xMSBmcmFtZSovCisjZGVmaW5lIE1BQzgwMjExXzNBRERSX0xFTgkJCTI0CisjZGVmaW5lIE1BQzgwMjExXzRBRERSX0xFTgkJCTMwCisKK2VudW0gaW50Zl90eXBlIHsKKwlJTlRGX1BDSSA9IDAsCisJSU5URl9VU0IgPSAxLAorfTsKKworZW51bSByYWRpb19wYXRoIHsKKwlSRjkwX1BBVEhfQSA9IDAsCisJUkY5MF9QQVRIX0IgPSAxLAorCVJGOTBfUEFUSF9DID0gMiwKKwlSRjkwX1BBVEhfRCA9IDMsCit9OworCitlbnVtIHJ0X2VlcHJvbV90eXBlIHsKKwlFRVBST01fOTNDNDYsCisJRUVQUk9NXzkzQzU2LAorCUVFUFJPTV9CT09UX0VGVVNFLAorfTsKKworZW51bSBydGxfc3RhdHVzIHsKKwlSVExfU1RBVFVTX0lOVEVSRkFDRV9TVEFSVCA9IDAsCit9OworCitlbnVtIGhhcmR3YXJlX3R5cGUgeworCUhBUkRXQVJFX1RZUEVfUlRMODE5MkUsCisJSEFSRFdBUkVfVFlQRV9SVEw4MTkyVSwKKwlIQVJEV0FSRV9UWVBFX1JUTDgxOTJTRSwKKwlIQVJEV0FSRV9UWVBFX1JUTDgxOTJTVSwKKwlIQVJEV0FSRV9UWVBFX1JUTDgxOTJDRSwKKwlIQVJEV0FSRV9UWVBFX1JUTDgxOTJDVSwKKwlIQVJEV0FSRV9UWVBFX1JUTDgxOTJERSwKKwlIQVJEV0FSRV9UWVBFX1JUTDgxOTJEVSwKKworCS8qa2VlcCBpdCBsYXN0Ki8KKwlIQVJEV0FSRV9UWVBFX05VTQorfTsKKworZW51bSBzY2FuX29wZXJhdGlvbl9iYWNrdXBfb3B0IHsKKwlTQ0FOX09QVF9CQUNLVVAgPSAwLAorCVNDQU5fT1BUX1JFU1RPUkUsCisJU0NBTl9PUFRfTUFYCit9OworCisvKlJGIHN0YXRlLiovCitlbnVtIHJmX3B3cnN0YXRlIHsKKwlFUkZPTiwKKwlFUkZTTEVFUCwKKwlFUkZPRkYKK307CisKK3N0cnVjdCBiYl9yZWdfZGVmIHsKKwl1MzIgcmZpbnRmczsKKwl1MzIgcmZpbnRmaTsKKwl1MzIgcmZpbnRmbzsKKwl1MzIgcmZpbnRmZTsKKwl1MzIgcmYzd2lyZV9vZmZzZXQ7CisJdTMyIHJmbHNzaV9zZWxlY3Q7CisJdTMyIHJmdHhnYWluX3N0YWdlOworCXUzMiByZmhzc2lfcGFyYTE7CisJdTMyIHJmaHNzaV9wYXJhMjsKKwl1MzIgcmZzd2l0Y2hfY29udHJvbDsKKwl1MzIgcmZhZ2NfY29udHJvbDE7CisJdTMyIHJmYWdjX2NvbnRyb2wyOworCXUzMiByZnJ4aXFfaW1iYWxhbmNlOworCXUzMiByZnJ4X2FmZTsKKwl1MzIgcmZ0eGlxX2ltYmFsYW5jZTsKKwl1MzIgcmZ0eF9hZmU7CisJdTMyIHJmbHNzaV9yZWFkYmFjazsKKwl1MzIgcmZsc3NpX3JlYWRiYWNrcGk7Cit9OworCitlbnVtIGlvX3R5cGUgeworCUlPX0NNRF9QQVVTRV9ETV9CWV9TQ0FOID0gMCwKKwlJT19DTURfUkVTVU1FX0RNX0JZX1NDQU4gPSAxLAorfTsKKworZW51bSBod192YXJpYWJsZXMgeworCUhXX1ZBUl9FVEhFUl9BRERSLAorCUhXX1ZBUl9NVUxUSUNBU1RfUkVHLAorCUhXX1ZBUl9CQVNJQ19SQVRFLAorCUhXX1ZBUl9CU1NJRCwKKwlIV19WQVJfTUVESUFfU1RBVFVTLAorCUhXX1ZBUl9TRUNVUklUWV9DT05GLAorCUhXX1ZBUl9CRUFDT05fSU5URVJWQUwsCisJSFdfVkFSX0FUSU1fV0lORE9XLAorCUhXX1ZBUl9MSVNURU5fSU5URVJWQUwsCisJSFdfVkFSX0NTX0NPVU5URVIsCisJSFdfVkFSX0RFRkFVTFRLRVkwLAorCUhXX1ZBUl9ERUZBVUxUS0VZMSwKKwlIV19WQVJfREVGQVVMVEtFWTIsCisJSFdfVkFSX0RFRkFVTFRLRVkzLAorCUhXX1ZBUl9TSUZTLAorCUhXX1ZBUl9ESUZTLAorCUhXX1ZBUl9FSUZTLAorCUhXX1ZBUl9TTE9UX1RJTUUsCisJSFdfVkFSX0FDS19QUkVBTUJMRSwKKwlIV19WQVJfQ1dfQ09ORklHLAorCUhXX1ZBUl9DV19WQUxVRVMsCisJSFdfVkFSX1JBVEVfRkFMTEJBQ0tfQ09OVFJPTCwKKwlIV19WQVJfQ09OVEVOVElPTl9XSU5ET1csCisJSFdfVkFSX1JFVFJZX0NPVU5ULAorCUhXX1ZBUl9UUl9TV0lUQ0gsCisJSFdfVkFSX0NPTU1BTkQsCisJSFdfVkFSX1dQQV9DT05GSUcsCisJSFdfVkFSX0FNUERVX01JTl9TUEFDRSwKKwlIV19WQVJfU0hPUlRHSV9ERU5TSVRZLAorCUhXX1ZBUl9BTVBEVV9GQUNUT1IsCisJSFdfVkFSX01DU19SQVRFX0FWQUlMQUJMRSwKKwlIV19WQVJfQUNfUEFSQU0sCisJSFdfVkFSX0FDTV9DVFJMLAorCUhXX1ZBUl9ESVNfUmVxX1FzaXplLAorCUhXX1ZBUl9DQ1hfQ0hOTF9MT0FELAorCUhXX1ZBUl9DQ1hfTk9JU0VfSElTVE9HUkFNLAorCUhXX1ZBUl9DQ1hfQ0xNX05ITSwKKwlIV19WQVJfVHhPUExpbWl0LAorCUhXX1ZBUl9UVVJCT19NT0RFLAorCUhXX1ZBUl9SRl9TVEFURSwKKwlIV19WQVJfUkZfT0ZGX0JZX0hXLAorCUhXX1ZBUl9CVVNfU1BFRUQsCisJSFdfVkFSX1NFVF9ERVZfUE9XRVIsCisKKwlIV19WQVJfUkNSLAorCUhXX1ZBUl9SQVRSXzAsCisJSFdfVkFSX1JSU1IsCisJSFdfVkFSX0NQVV9SU1QsCisJSFdfVkFSX0NFQ0hLX0JTU0lELAorCUhXX1ZBUl9MQktfTU9ERSwKKwlIV19WQVJfQUVTXzExTl9GSVgsCisJSFdfVkFSX1VTQl9SWF9BR0dSLAorCUhXX1ZBUl9VU0VSX0NPTlRST0xfVFVSQk9fTU9ERSwKKwlIV19WQVJfUkVUUllfTElNSVQsCisJSFdfVkFSX0lOSVRfVFhfUkFURSwKKwlIV19WQVJfVFhfUkFURV9SRUcsCisJSFdfVkFSX0VGVVNFX1VTQUdFLAorCUhXX1ZBUl9FRlVTRV9CWVRFUywKKwlIV19WQVJfQVVUT0xPQURfU1RBVFVTLAorCUhXX1ZBUl9SRl8yUl9ESVNBQkxFLAorCUhXX1ZBUl9TRVRfUlBXTSwKKwlIV19WQVJfSDJDX0ZXX1BXUk1PREUsCisJSFdfVkFSX0gyQ19GV19KT0lOQlNTUlBULAorCUhXX1ZBUl9GV19QU01PREVfU1RBVFVTLAorCUhXX1ZBUl8xWDFfUkVDVl9DT01CSU5FLAorCUhXX1ZBUl9TVE9QX1NFTkRfQkVBQ09OLAorCUhXX1ZBUl9UU0ZfVElNRVIsCisJSFdfVkFSX0lPX0NNRCwKKworCUhXX1ZBUl9SRl9SRUNPVkVSWSwKKwlIV19WQVJfSDJDX0ZXX1VQREFURV9HVEssCisJSFdfVkFSX1dGX01BU0ssCisJSFdfVkFSX1dGX0NSQywKKwlIV19WQVJfV0ZfSVNfTUFDX0FERFIsCisJSFdfVkFSX0gyQ19GV19PRkZMT0FELAorCUhXX1ZBUl9SRVNFVF9XRkNSQywKKworCUhXX1ZBUl9IQU5ETEVfRldfQzJILAorCUhXX1ZBUl9ETF9GV19SU1ZEX1BBR0UsCisJSFdfVkFSX0FJRCwKKwlIV19WQVJfSFdfU0VRX0VOQUJMRSwKKwlIV19WQVJfQ09SUkVDVF9UU0YsCisJSFdfVkFSX0JDTl9WQUxJRCwKKwlIV19WQVJfRldMUFNfUkZfT04sCisJSFdfVkFSX0RVQUxfVFNGX1JTVCwKKwlIV19WQVJfU1dJVENIX0VQSFlfV29XTEFOLAorCUhXX1ZBUl9JTlRfTUlHUkFUSU9OLAorCUhXX1ZBUl9JTlRfQUMsCisJSFdfVkFSX1JGX1RJTUlORywKKworCUhXX1ZBUl9NUkMsCisKKwlIV19WQVJfTUdUX0ZJTFRFUiwKKwlIV19WQVJfQ1RSTF9GSUxURVIsCisJSFdfVkFSX0RBVEFfRklMVEVSLAorfTsKKworZW51bSBfUlRfTUVESUFfU1RBVFVTIHsKKwlSVF9NRURJQV9ESVNDT05ORUNUID0gMCwKKwlSVF9NRURJQV9DT05ORUNUID0gMQorfTsKKworZW51bSBydF9vZW1faWQgeworCVJUX0NJRF9ERUZBVUxUID0gMCwKKwlSVF9DSURfODE4N19BTFBIQTAgPSAxLAorCVJUX0NJRF84MTg3X1NFUkNPTU1fUFMgPSAyLAorCVJUX0NJRF84MTg3X0hXX0xFRCA9IDMsCisJUlRfQ0lEXzgxODdfTkVUR0VBUiA9IDQsCisJUlRfQ0lEX1dIUUwgPSA1LAorCVJUX0NJRF84MTl4X0NBTUVPID0gNiwKKwlSVF9DSURfODE5eF9SVU5UT1AgPSA3LAorCVJUX0NJRF84MTl4X1NlbmFvID0gOCwKKwlSVF9DSURfVE9TSElCQSA9IDksCisJUlRfQ0lEXzgxOXhfTmV0Y29yZSA9IDEwLAorCVJUX0NJRF9OZXR0cm9uaXggPSAxMSwKKwlSVF9DSURfRExJTksgPSAxMiwKKwlSVF9DSURfUFJPTkVUID0gMTMsCisJUlRfQ0lEX0NPUkVHQSA9IDE0LAorCVJUX0NJRF84MTl4X0FMUEhBID0gMTUsCisJUlRfQ0lEXzgxOXhfU2l0ZWNvbSA9IDE2LAorCVJUX0NJRF9DQ1ggPSAxNywKKwlSVF9DSURfODE5eF9MZW5vdm8gPSAxOCwKKwlSVF9DSURfODE5eF9RTUkgPSAxOSwKKwlSVF9DSURfODE5eF9FZGltYXhfQmVsa2luID0gMjAsCisJUlRfQ0lEXzgxOXhfU2VyY29tbV9CZWxraW4gPSAyMSwKKwlSVF9DSURfODE5eF9DQU1FTzEgPSAyMiwKKwlSVF9DSURfODE5eF9NU0kgPSAyMywKKwlSVF9DSURfODE5eF9BY2VyID0gMjQsCisJUlRfQ0lEXzgxOXhfSFAgPSAyNywKKwlSVF9DSURfODE5eF9DTEVWTyA9IDI4LAorCVJUX0NJRF84MTl4X0FyY2FkeWFuX0JlbGtpbiA9IDI5LAorCVJUX0NJRF84MTl4X1NBTVNVTkcgPSAzMCwKKwlSVF9DSURfODE5eF9XTkNfQ09SRUdBID0gMzEsCisJUlRfQ0lEXzgxOXhfRm94Y29vbiA9IDMyLAorCVJUX0NJRF84MTl4X0RFTEwgPSAzMywKK307CisKK2VudW0gaHdfZGVzY3MgeworCUhXX0RFU0NfT1dOLAorCUhXX0RFU0NfUlhPV04sCisJSFdfREVTQ19UWF9ORVhUREVTQ19BRERSLAorCUhXX0RFU0NfVFhCVUZGX0FERFIsCisJSFdfREVTQ19SWEJVRkZfQUREUiwKKwlIV19ERVNDX1JYUEtUX0xFTiwKKwlIV19ERVNDX1JYRVJPLAorfTsKKworZW51bSBwcmltZV9zYyB7CisJUFJJTUVfQ0hOTF9PRkZTRVRfRE9OVF9DQVJFID0gMCwKKwlQUklNRV9DSE5MX09GRlNFVF9MT1dFUiA9IDEsCisJUFJJTUVfQ0hOTF9PRkZTRVRfVVBQRVIgPSAyLAorfTsKKworZW51bSByZl90eXBlIHsKKwlSRl8xVDFSID0gMCwKKwlSRl8xVDJSID0gMSwKKwlSRl8yVDJSID0gMiwKK307CisKK2VudW0gaHRfY2hhbm5lbF93aWR0aCB7CisJSFRfQ0hBTk5FTF9XSURUSF8yMCA9IDAsCisJSFRfQ0hBTk5FTF9XSURUSF8yMF80MCA9IDEsCit9OworCisvKiBSZWY6IDgwMi4xMWkgc2VwYyBEMTAuMCA3LjMuMi4yNS4xCitDaXBoZXIgU3VpdGVzIEVuY3J5cHRpb24gQWxnb3JpdGhtcyAqLworZW51bSBydF9lbmNfYWxnIHsKKwlOT19FTkNSWVBUSU9OID0gMCwKKwlXRVA0MF9FTkNSWVBUSU9OID0gMSwKKwlUS0lQX0VOQ1JZUFRJT04gPSAyLAorCVJTRVJWRURfRU5DUllQVElPTiA9IDMsCisJQUVTQ0NNUF9FTkNSWVBUSU9OID0gNCwKKwlXRVAxMDRfRU5DUllQVElPTiA9IDUsCit9OworCitlbnVtIHJ0bF9oYWxfc3RhdGUgeworCV9IQUxfU1RBVEVfU1RPUCA9IDAsCisJX0hBTF9TVEFURV9TVEFSVCA9IDEsCit9OworCitlbnVtIHJ0bF92YXJfbWFwIHsKKwkvKnJlZyBtYXAgKi8KKwlTWVNfSVNPX0NUUkwgPSAwLAorCVNZU19GVU5DX0VOLAorCVNZU19DTEssCisJTUFDX1JDUl9BTSwKKwlNQUNfUkNSX0FCLAorCU1BQ19SQ1JfQUNSQzMyLAorCU1BQ19SQ1JfQUNGLAorCU1BQ19SQ1JfQUFQLAorCisJLyplZnVzZSBtYXAgKi8KKwlFRlVTRV9URVNULAorCUVGVVNFX0NUUkwsCisJRUZVU0VfQ0xLLAorCUVGVVNFX0NMS19DVFJMLAorCUVGVVNFX1BXQ19FVjEyViwKKwlFRlVTRV9GRU5fRUxEUiwKKwlFRlVTRV9MT0FERVJfQ0xLX0VOLAorCUVGVVNFX0FOQThNLAorCUVGVVNFX0hXU0VUX01BWF9TSVpFLAorCisJLypDQU0gbWFwICovCisJUldDQU0sCisJV0NBTUksCisJUkNBTU8sCisJQ0FNREJHLAorCVNFQ1IsCisJU0VDX0NBTV9OT05FLAorCVNFQ19DQU1fV0VQNDAsCisJU0VDX0NBTV9US0lQLAorCVNFQ19DQU1fQUVTLAorCVNFQ19DQU1fV0VQMTA0LAorCisJLypJTVIgbWFwICovCisJUlRMX0lNUl9CQ05ETUFJTlQ2LAkvKkJlYWNvbiBETUEgSW50ZXJydXB0IDYgKi8KKwlSVExfSU1SX0JDTkRNQUlOVDUsCS8qQmVhY29uIERNQSBJbnRlcnJ1cHQgNSAqLworCVJUTF9JTVJfQkNORE1BSU5UNCwJLypCZWFjb24gRE1BIEludGVycnVwdCA0ICovCisJUlRMX0lNUl9CQ05ETUFJTlQzLAkvKkJlYWNvbiBETUEgSW50ZXJydXB0IDMgKi8KKwlSVExfSU1SX0JDTkRNQUlOVDIsCS8qQmVhY29uIERNQSBJbnRlcnJ1cHQgMiAqLworCVJUTF9JTVJfQkNORE1BSU5UMSwJLypCZWFjb24gRE1BIEludGVycnVwdCAxICovCisJUlRMX0lNUl9CQ05ET0s4LAkvKkJlYWNvbiBRdWV1ZSBETUEgT0sgSW50ZXJydXAgOCAqLworCVJUTF9JTVJfQkNORE9LNywJLypCZWFjb24gUXVldWUgRE1BIE9LIEludGVycnVwIDcgKi8KKwlSVExfSU1SX0JDTkRPSzYsCS8qQmVhY29uIFF1ZXVlIERNQSBPSyBJbnRlcnJ1cCA2ICovCisJUlRMX0lNUl9CQ05ET0s1LAkvKkJlYWNvbiBRdWV1ZSBETUEgT0sgSW50ZXJydXAgNSAqLworCVJUTF9JTVJfQkNORE9LNCwJLypCZWFjb24gUXVldWUgRE1BIE9LIEludGVycnVwIDQgKi8KKwlSVExfSU1SX0JDTkRPSzMsCS8qQmVhY29uIFF1ZXVlIERNQSBPSyBJbnRlcnJ1cCAzICovCisJUlRMX0lNUl9CQ05ET0syLAkvKkJlYWNvbiBRdWV1ZSBETUEgT0sgSW50ZXJydXAgMiAqLworCVJUTF9JTVJfQkNORE9LMSwJLypCZWFjb24gUXVldWUgRE1BIE9LIEludGVycnVwIDEgKi8KKwlSVExfSU1SX1RJTUVPVVQyLAkvKlRpbWVvdXQgaW50ZXJydXB0IDIgKi8KKwlSVExfSU1SX1RJTUVPVVQxLAkvKlRpbWVvdXQgaW50ZXJydXB0IDEgKi8KKwlSVExfSU1SX1RYRk9WVywJCS8qVHJhbnNtaXQgRklGTyBPdmVyZmxvdyAqLworCVJUTF9JTVJfUFNUSU1FT1VULAkvKlBvd2VyIHNhdmUgdGltZSBvdXQgaW50ZXJydXB0ICovCisJUlRMX0lNUl9CY25JbnQsCQkvKkJlYWNvbiBETUEgSW50ZXJydXB0IDAgKi8KKwlSVExfSU1SX1JYRk9WVywJCS8qUmVjZWl2ZSBGSUZPIE92ZXJmbG93ICovCisJUlRMX0lNUl9SRFUsCQkvKlJlY2VpdmUgRGVzY3JpcHRvciBVbmF2YWlsYWJsZSAqLworCVJUTF9JTVJfQVRJTUVORCwJLypGb3IgOTJDLEFUSU0gV2luZG93IEVuZCBJbnRlcnJ1cHQgKi8KKwlSVExfSU1SX0JET0ssCQkvKkJlYWNvbiBRdWV1ZSBETUEgT0sgSW50ZXJydXAgKi8KKwlSVExfSU1SX0hJR0hET0ssCS8qSGlnaCBRdWV1ZSBETUEgT0sgSW50ZXJydXB0ICovCisJUlRMX0lNUl9UQkRPSywJCS8qVHJhbnNtaXQgQmVhY29uIE9LIGludGVycnVwICovCisJUlRMX0lNUl9NR05URE9LLAkvKk1hbmFnZW1lbnQgUXVldWUgRE1BIE9LIEludGVycnVwdCAqLworCVJUTF9JTVJfVEJERVIsCQkvKkZvciA5MkMsVHJhbnNtaXQgQmVhY29uIEVycm9yIEludGVycnVwdCAqLworCVJUTF9JTVJfQktET0ssCQkvKkFDX0JLIERNQSBPSyBJbnRlcnJ1cHQgKi8KKwlSVExfSU1SX0JFRE9LLAkJLypBQ19CRSBETUEgT0sgSW50ZXJydXB0ICovCisJUlRMX0lNUl9WSURPSywJCS8qQUNfVkkgRE1BIE9LIEludGVycnVwdCAqLworCVJUTF9JTVJfVk9ET0ssCQkvKkFDX1ZPIERNQSBJbnRlcnJ1cHQgKi8KKwlSVExfSU1SX1JPSywJCS8qUmVjZWl2ZSBETUEgT0sgSW50ZXJydXB0ICovCisJUlRMX0lCU1NfSU5UX01BU0tTLAkvKihSVExfSU1SX0JjbkludHxSVExfSU1SX1RCRE9LfFJUTF9JTVJfVEJERVIpKi8KKworCS8qQ0NLIFJhdGVzLCBUeEhUID0gMCAqLworCVJUTF9SQ19DQ0tfUkFURTFNLAorCVJUTF9SQ19DQ0tfUkFURTJNLAorCVJUTF9SQ19DQ0tfUkFURTVfNU0sCisJUlRMX1JDX0NDS19SQVRFMTFNLAorCisJLypPRkRNIFJhdGVzLCBUeEhUID0gMCAqLworCVJUTF9SQ19PRkRNX1JBVEU2TSwKKwlSVExfUkNfT0ZETV9SQVRFOU0sCisJUlRMX1JDX09GRE1fUkFURTEyTSwKKwlSVExfUkNfT0ZETV9SQVRFMThNLAorCVJUTF9SQ19PRkRNX1JBVEUyNE0sCisJUlRMX1JDX09GRE1fUkFURTM2TSwKKwlSVExfUkNfT0ZETV9SQVRFNDhNLAorCVJUTF9SQ19PRkRNX1JBVEU1NE0sCisKKwlSVExfUkNfSFRfUkFURU1DUzcsCisJUlRMX1JDX0hUX1JBVEVNQ1MxNSwKKworCS8qa2VlcCBpdCBsYXN0ICovCisJUlRMX1ZBUl9NQVBfTUFYLAorfTsKKworLypGaXJtd2FyZSBQUyBtb2RlIGZvciBjb250cm9sIExQUy4qLworZW51bSBfZndfcHNfbW9kZSB7CisJRldfUFNfQUNUSVZFX01PREUgPSAwLAorCUZXX1BTX01JTl9NT0RFID0gMSwKKwlGV19QU19NQVhfTU9ERSA9IDIsCisJRldfUFNfRFRJTV9NT0RFID0gMywKKwlGV19QU19WT0lQX01PREUgPSA0LAorCUZXX1BTX1VBUFNEX1dNTV9NT0RFID0gNSwKKwlGV19QU19VQVBTRF9NT0RFID0gNiwKKwlGV19QU19JQlNTX01PREUgPSA3LAorCUZXX1BTX1dXTEFOX01PREUgPSA4LAorCUZXX1BTX1BNX1JhZGlvX09mZiA9IDksCisJRldfUFNfUE1fQ2FyZF9EaXNhYmxlID0gMTAsCit9OworCitlbnVtIHJ0X3BzbW9kZSB7CisJRUFDVElWRSwJCS8qQWN0aXZlL0NvbnRpbnVvdXMgYWNjZXNzLiAqLworCUVNQVhQUywJCQkvKk1heCBwb3dlciBzYXZlIG1vZGUuICovCisJRUZBU1RQUywJCS8qRmFzdCBwb3dlciBzYXZlIG1vZGUuICovCisJRUFVVE9QUywJCS8qQXV0byBwb3dlciBzYXZlIG1vZGUuICovCit9OworCisvKkxFRCByZWxhdGVkLiovCitlbnVtIGxlZF9jdGxfbW9kZSB7CisJTEVEX0NUTF9QT1dFUl9PTiA9IDEsCisJTEVEX0NUTF9MSU5LID0gMiwKKwlMRURfQ1RMX05PX0xJTksgPSAzLAorCUxFRF9DVExfVFggPSA0LAorCUxFRF9DVExfUlggPSA1LAorCUxFRF9DVExfU0lURV9TVVJWRVkgPSA2LAorCUxFRF9DVExfUE9XRVJfT0ZGID0gNywKKwlMRURfQ1RMX1NUQVJUX1RPX0xJTksgPSA4LAorCUxFRF9DVExfU1RBUlRfV1BTID0gOSwKKwlMRURfQ1RMX1NUT1BfV1BTID0gMTAsCit9OworCitlbnVtIHJ0bF9sZWRfcGluIHsKKwlMRURfUElOX0dQSU8wLAorCUxFRF9QSU5fTEVEMCwKKwlMRURfUElOX0xFRDEsCisJTEVEX1BJTl9MRUQyCit9OworCisvKlFvUyByZWxhdGVkLiovCisvKmFjbSBpbXBsZW1lbnRhdGlvbiBtZXRob2QuKi8KK2VudW0gYWNtX21ldGhvZCB7CisJZUFjbVdheTBfU3dBbmRIdyA9IDAsCisJZUFjbVdheTFfSFcgPSAxLAorCWVBY21XYXkyX1NXID0gMiwKK307CisKKy8qYWNpL2FpZnNuIEZpZWxkLgorUmVmOiBXTU0gc3BlYyAyLjIuMjogV01FIFBhcmFtZXRlciBFbGVtZW50LCBwLjEyLiovCit1bmlvbiBhY2lfYWlmc24geworCXU4IGNoYXJfZGF0YTsKKworCXN0cnVjdCB7CisJCXU4IGFpZnNuOjQ7CisJCXU4IGFjbToxOworCQl1OCBhY2k6MjsKKwkJdTggcmVzZXJ2ZWQ6MTsKKwl9IGY7CQkJLyogRmllbGQgKi8KK307CisKKy8qbWxtZSByZWxhdGVkLiovCitlbnVtIHdpcmVsZXNzX21vZGUgeworCVdJUkVMRVNTX01PREVfVU5LTk9XTiA9IDB4MDAsCisJV0lSRUxFU1NfTU9ERV9BID0gMHgwMSwKKwlXSVJFTEVTU19NT0RFX0IgPSAweDAyLAorCVdJUkVMRVNTX01PREVfRyA9IDB4MDQsCisJV0lSRUxFU1NfTU9ERV9BVVRPID0gMHgwOCwKKwlXSVJFTEVTU19NT0RFX05fMjRHID0gMHgxMCwKKwlXSVJFTEVTU19NT0RFX05fNUcgPSAweDIwCit9OworCitlbnVtIHJhdHJfdGFibGVfbW9kZSB7CisJUkFUUl9JTlhfV0lSRUxFU1NfTkdCID0gMCwKKwlSQVRSX0lOWF9XSVJFTEVTU19ORyA9IDEsCisJUkFUUl9JTlhfV0lSRUxFU1NfTkIgPSAyLAorCVJBVFJfSU5YX1dJUkVMRVNTX04gPSAzLAorCVJBVFJfSU5YX1dJUkVMRVNTX0dCID0gNCwKKwlSQVRSX0lOWF9XSVJFTEVTU19HID0gNSwKKwlSQVRSX0lOWF9XSVJFTEVTU19CID0gNiwKKwlSQVRSX0lOWF9XSVJFTEVTU19NQyA9IDcsCisJUkFUUl9JTlhfV0lSRUxFU1NfQSA9IDgsCit9OworCitlbnVtIHJ0bF9saW5rX3N0YXRlIHsKKwlNQUM4MDIxMV9OT0xJTksgPSAwLAorCU1BQzgwMjExX0xJTktJTkcgPSAxLAorCU1BQzgwMjExX0xJTktFRCA9IDIsCisJTUFDODAyMTFfTElOS0VEX1NDQU5OSU5HID0gMywKK307CisKK2VudW0gYWN0X2NhdGVnb3J5IHsKKwlBQ1RfQ0FUX1FPUyA9IDEsCisJQUNUX0NBVF9ETFMgPSAyLAorCUFDVF9DQVRfQkEgPSAzLAorCUFDVF9DQVRfSFQgPSA3LAorCUFDVF9DQVRfV01NID0gMTcsCit9OworCitlbnVtIGJhX2FjdGlvbiB7CisJQUNUX0FEREJBUkVRID0gMCwKKwlBQ1RfQUREQkFSU1AgPSAxLAorCUFDVF9ERUxCQSA9IDIsCit9OworCitzdHJ1Y3Qgb2N0ZXRfc3RyaW5nIHsKKwl1OCAqb2N0ZXQ7CisJdTE2IGxlbmd0aDsKK307CisKK3N0cnVjdCBydGxfaGRyXzNhZGRyIHsKKwlfX2xlMTYgZnJhbWVfY3RsOworCV9fbGUxNiBkdXJhdGlvbl9pZDsKKwl1OCBhZGRyMVtFVEhfQUxFTl07CisJdTggYWRkcjJbRVRIX0FMRU5dOworCXU4IGFkZHIzW0VUSF9BTEVOXTsKKwlfX2xlMTYgc2VxX2N0bDsKKwl1OCBwYXlsb2FkWzBdOworfSBfX3BhY2tlZDsKKworc3RydWN0IHJ0bF9pbmZvX2VsZW1lbnQgeworCXU4IGlkOworCXU4IGxlbjsKKwl1OCBkYXRhWzBdOworfSBfX3BhY2tlZDsKKworc3RydWN0IHJ0bF9wcm9iZV9yc3AgeworCXN0cnVjdCBydGxfaGRyXzNhZGRyIGhlYWRlcjsKKwl1MzIgdGltZV9zdGFtcFsyXTsKKwlfX2xlMTYgYmVhY29uX2ludGVydmFsOworCV9fbGUxNiBjYXBhYmlsaXR5OworCS8qU1NJRCwgc3VwcG9ydGVkIHJhdGVzLCBGSCBwYXJhbXMsIERTIHBhcmFtcywKKwkgICBDRiBwYXJhbXMsIElCU1MgcGFyYW1zLCBUSU0gKGlmIGJlYWNvbiksIFJTTiAqLworCXN0cnVjdCBydGxfaW5mb19lbGVtZW50IGluZm9fZWxlbWVudFswXTsKK30gX19wYWNrZWQ7CisKKy8qTEVEIHJlbGF0ZWQuKi8KKy8qbGVkcGluIElkZW50aWZ5IGhvdyB0byBpbXBsZW1lbnQgdGhpcyBTVyBsZWQuKi8KK3N0cnVjdCBydGxfbGVkIHsKKwl2b2lkICpodzsKKwllbnVtIHJ0bF9sZWRfcGluIGxlZHBpbjsKKwlib29sIGJfbGVkb247Cit9OworCitzdHJ1Y3QgcnRsX2xlZF9jdGwgeworCWJvb2wgYmxlZF9vcGVuZHJhaW47CisJc3RydWN0IHJ0bF9sZWQgc3dfbGVkMDsKKwlzdHJ1Y3QgcnRsX2xlZCBzd19sZWQxOworfTsKKworc3RydWN0IHJ0bF9xb3NfcGFyYW1ldGVycyB7CisJX19sZTE2IGN3X21pbjsKKwlfX2xlMTYgY3dfbWF4OworCXU4IGFpZnM7CisJdTggZmxhZzsKKwlfX2xlMTYgdHhfb3A7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgcnRfc21vb3RoX2RhdGEgeworCXUzMiBlbGVtZW50c1sxMDBdOwkvKmFycmF5IHRvIHN0b3JlIHZhbHVlcyAqLworCXUzMiBpbmRleDsJCS8qaW5kZXggdG8gY3VycmVudCBhcnJheSB0byBzdG9yZSAqLworCXUzMiB0b3RhbF9udW07CQkvKm51bSBvZiB2YWxpZCBlbGVtZW50cyAqLworCXUzMiB0b3RhbF92YWw7CQkvKnN1bSBvZiB2YWxpZCBlbGVtZW50cyAqLworfTsKKworc3RydWN0IGZhbHNlX2FsYXJtX3N0YXRpc3RpY3MgeworCXUzMiBjbnRfcGFyaXR5X2ZhaWw7CisJdTMyIGNudF9yYXRlX2lsbGVnYWw7CisJdTMyIGNudF9jcmM4X2ZhaWw7CisJdTMyIGNudF9tY3NfZmFpbDsKKwl1MzIgY250X29mZG1fZmFpbDsKKwl1MzIgY250X2Nja19mYWlsOworCXUzMiBjbnRfYWxsOworfTsKKworc3RydWN0IGluaXRfZ2FpbiB7CisJdTggeGFhZ2Njb3JlMTsKKwl1OCB4YmFnY2NvcmUxOworCXU4IHhjYWdjY29yZTE7CisJdTggeGRhZ2Njb3JlMTsKKwl1OCBjY2E7CisKK307CisKK3N0cnVjdCB3aXJlbGVzc19zdGF0cyB7CisJdW5zaWduZWQgbG9uZyB0eGJ5dGVzdW5pY2FzdDsKKwl1bnNpZ25lZCBsb25nIHR4Ynl0ZXNtdWx0aWNhc3Q7CisJdW5zaWduZWQgbG9uZyB0eGJ5dGVzYnJvYWRjYXN0OworCXVuc2lnbmVkIGxvbmcgcnhieXRlc3VuaWNhc3Q7CisKKwlsb25nIHJ4X3Nucl9kYls0XTsKKwkvKkNvcnJlY3Qgc21vb3RoZWQgc3MgaW4gRGJtLCBvbmx5IHVzZWQKKwkgICBpbiBkcml2ZXIgdG8gcmVwb3J0IHJlYWwgcG93ZXIgbm93LiAqLworCWxvbmcgcmVjdl9zaWduYWxfcG93ZXI7CisJbG9uZyBzaWduYWxfcXVhbGl0eTsKKwlsb25nIGxhc3Rfc2lnc3RyZW5ndGhfaW5wZXJjZW50OworCisJdTMyIHJzc2lfY2FsY3VsYXRlX2NudDsKKworCS8qVHJhbnNmb3JtZWQsIGluIGRibS4gQmVhdXRpZmllZCBzaWduYWwKKwkgICBzdHJlbmd0aCBmb3IgVUksIG5vdCBjb3JyZWN0LiAqLworCWxvbmcgc2lnbmFsX3N0cmVuZ3RoOworCisJdTggcnhfcnNzaV9wZXJjZW50YWdlWzRdOworCXU4IHJ4X2V2bV9wZXJjZW50YWdlWzJdOworCisJc3RydWN0IHJ0X3Ntb290aF9kYXRhIHVpX3Jzc2k7CisJc3RydWN0IHJ0X3Ntb290aF9kYXRhIHVpX2xpbmtfcXVhbGl0eTsKK307CisKK3N0cnVjdCByYXRlX2FkYXB0aXZlIHsKKwl1OCByYXRlX2FkYXB0aXZlX2Rpc2FibGVkOworCXU4IHJhdHJfc3RhdGU7CisJdTE2IHJlc2VydmU7CisKKwl1MzIgaGlnaF9yc3NpX3RocmVzaF9mb3JfcmE7CisJdTMyIGhpZ2gybG93X3Jzc2lfdGhyZXNoX2Zvcl9yYTsKKwl1OCBsb3cyaGlnaF9yc3NpX3RocmVzaF9mb3JfcmE0MG07CisJdTMyIGxvd19yc3NpX3RocmVzaF9mb3JfcmE0ME07CisJdTggbG93MmhpZ2hfcnNzaV90aHJlc2hfZm9yX3JhMjBtOworCXUzMiBsb3dfcnNzaV90aHJlc2hfZm9yX3JhMjBNOworCXUzMiB1cHBlcl9yc3NpX3RocmVzaG9sZF9yYXRyOworCXUzMiBtaWRkbGV1cHBlcl9yc3NpX3RocmVzaG9sZF9yYXRyOworCXUzMiBtaWRkbGVfcnNzaV90aHJlc2hvbGRfcmF0cjsKKwl1MzIgbWlkZGxlbG93X3Jzc2lfdGhyZXNob2xkX3JhdHI7CisJdTMyIGxvd19yc3NpX3RocmVzaG9sZF9yYXRyOworCXUzMiB1bHRyYWxvd19yc3NpX3RocmVzaG9sZF9yYXRyOworCXUzMiBsb3dfcnNzaV90aHJlc2hvbGRfcmF0cl80MG07CisJdTMyIGxvd19yc3NpX3RocmVzaG9sZF9yYXRyXzIwbTsKKwl1OCBwaW5nX3Jzc2lfZW5hYmxlOworCXUzMiBwaW5nX3Jzc2lfcmF0cjsKKwl1MzIgcGluZ19yc3NpX3RocmVzaF9mb3JfcmE7CisJdTMyIGxhc3RfcmF0cjsKKwl1OCBwcmVfcmF0cl9zdGF0ZTsKK307CisKK3N0cnVjdCByZWdkX3BhaXJfbWFwcGluZyB7CisJdTE2IHJlZ19kbW5lbnVtOworCXUxNiByZWdfNWdoel9jdGw7CisJdTE2IHJlZ18yZ2h6X2N0bDsKK307CisKK3N0cnVjdCBydGxfcmVndWxhdG9yeSB7CisJY2hhciBhbHBoYTJbMl07CisJdTE2IGNvdW50cnlfY29kZTsKKwl1MTYgbWF4X3Bvd2VyX2xldmVsOworCXUzMiB0cF9zY2FsZTsKKwl1MTYgY3VycmVudF9yZDsKKwl1MTYgY3VycmVudF9yZF9leHQ7CisJaW50MTZfdCBwb3dlcl9saW1pdDsKKwlzdHJ1Y3QgcmVnZF9wYWlyX21hcHBpbmcgKnJlZ3BhaXI7Cit9OworCitzdHJ1Y3QgcnRsX3Jma2lsbCB7CisJYm9vbCByZmtpbGxfc3RhdGU7CS8qMCBpcyBvZmYsIDEgaXMgb24gKi8KK307CisKK3N0cnVjdCBydGxfcGh5IHsKKwlzdHJ1Y3QgYmJfcmVnX2RlZiBwaHlyZWdfZGVmWzRdOwkvKlJhZGlvIEEvQi9DL0QgKi8KKwlzdHJ1Y3QgaW5pdF9nYWluIGluaXRnYWluX2JhY2t1cDsKKwllbnVtIGlvX3R5cGUgY3VycmVudF9pb190eXBlOworCisJdTggcmZfbW9kZTsKKwl1OCByZl90eXBlOworCXU4IGN1cnJlbnRfY2hhbl9idzsKKwl1OCBzZXRfYndtb2RlX2lucHJvZ3Jlc3M7CisJdTggc3dfY2hubF9pbnByb2dyZXNzOworCXU4IHN3X2Nobmxfc3RhZ2U7CisJdTggc3dfY2hubF9zdGVwOworCXU4IGN1cnJlbnRfY2hhbm5lbDsKKwl1OCBoMmNfYm94X251bTsKKwl1OCBzZXRfaW9faW5wcm9ncmVzczsKKworCS8qcmVjb3JkIGZvciBwb3dlciB0cmFja2luZyovCisJczMyIHJlZ19lOTQ7CisJczMyIHJlZ19lOWM7CisJczMyIHJlZ19lYTQ7CisJczMyIHJlZ19lYWM7CisJczMyIHJlZ19lYjQ7CisJczMyIHJlZ19lYmM7CisJczMyIHJlZ19lYzQ7CisJczMyIHJlZ19lY2M7CisJdTggcmZwaWVuYWJsZTsKKwl1OCByZXNlcnZlXzA7CisJdTE2IHJlc2VydmVfMTsKKwl1MzIgcmVnX2MwNCwgcmVnX2MwOCwgcmVnXzg3NDsKKwl1MzIgYWRkYV9iYWNrdXBbMTZdOworCXUzMiBpcWtfbWFjX2JhY2t1cFtJUUtfTUFDX1JFR19OVU1dOworCXUzMiBpcWtfYmJfYmFja3VwWzEwXTsKKworCWJvb2wgYl9yZnBpX2VuYWJsZTsKKworCXU4IHB3cmdyb3VwX2NudDsKKwl1OCBiY2NrX2hpZ2hfcG93ZXI7CisJLyogMyBncm91cHMgb2YgcHdyIGRpZmYgYnkgcmF0ZXMqLworCXUzMiBtY3NfdHhwd3JsZXZlbF9vcmlnb2Zmc2V0WzRdWzE2XTsKKwl1OCBkZWZhdWx0X2luaXRpYWxnYWluWzRdOworCisJLyp0aGUgY3VycmVudCBUeCBwb3dlciBsZXZlbCovCisJdTggY3VyX2Nja190eHB3cmlkeDsKKwl1OCBjdXJfb2ZkbTI0Z190eHB3cmlkeDsKKworCXUzMiByZnJlZ19jaG5sdmFsWzJdOworCWJvb2wgYl9hcGtfZG9uZTsKKworCS8qZnN5bmMqLworCXU4IGZyYW1lc3luYzsKKwl1MzIgZnJhbWVzeW5jX2MzNDsKKworCXU4IG51bV90b3RhbF9yZnBhdGg7Cit9OworCisjZGVmaW5lIE1BWF9USURfQ09VTlQJCQkJOQorI2RlZmluZSBSVExfQUdHX09GRgkJCQkwCisjZGVmaW5lIFJUTF9BR0dfT04JCQkJMQorI2RlZmluZSBSVExfQUdHX0VNUFRZSU5HX0hXX1FVRVVFX0FEREJBCQkyCisjZGVmaW5lIFJUTF9BR0dfRU1QVFlJTkdfSFdfUVVFVUVfREVMQkEJCTMKKworc3RydWN0IHJ0bF9odF9hZ2cgeworCXUxNiB0eHFfaWQ7CisJdTE2IHdhaXRfZm9yX2JhOworCXUxNiBzdGFydF9pZHg7CisJdTY0IGJpdG1hcDsKKwl1MzIgcmF0ZV9uX2ZsYWdzOworCXU4IGFnZ19zdGF0ZTsKK307CisKK3N0cnVjdCBydGxfdGlkX2RhdGEgeworCXUxNiBzZXFfbnVtYmVyOworCXN0cnVjdCBydGxfaHRfYWdnIGFnZzsKK307CisKK3N0cnVjdCBydGxfcHJpdjsKK3N0cnVjdCBydGxfaW8geworCXN0cnVjdCBkZXZpY2UgKmRldjsKKworCS8qUENJIE1FTSBtYXAgKi8KKwl1bnNpZ25lZCBsb25nIHBjaV9tZW1fZW5kOwkvKnNoYXJlZCBtZW0gZW5kICAgICAgICAqLworCXVuc2lnbmVkIGxvbmcgcGNpX21lbV9zdGFydDsJLypzaGFyZWQgbWVtIHN0YXJ0ICovCisKKwkvKlBDSSBJTyBtYXAgKi8KKwl1bnNpZ25lZCBsb25nIHBjaV9iYXNlX2FkZHI7CS8qZGV2aWNlIEkvTyBhZGRyZXNzICovCisKKwl2b2lkICgqd3JpdGU4X2FzeW5jKSAoc3RydWN0IHJ0bF9wcml2ICpydGxwcml2LCB1MzIgYWRkciwgdTggdmFsKTsKKwl2b2lkICgqd3JpdGUxNl9hc3luYykgKHN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiwgdTMyIGFkZHIsIHUxNiB2YWwpOworCXZvaWQgKCp3cml0ZTMyX2FzeW5jKSAoc3RydWN0IHJ0bF9wcml2ICpydGxwcml2LCB1MzIgYWRkciwgdTMyIHZhbCk7CisKKwkgdTgoKnJlYWQ4X3N5bmMpIChzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYsIHUzMiBhZGRyKTsKKwkgdTE2KCpyZWFkMTZfc3luYykgKHN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiwgdTMyIGFkZHIpOworCSB1MzIoKnJlYWQzMl9zeW5jKSAoc3RydWN0IHJ0bF9wcml2ICpydGxwcml2LCB1MzIgYWRkcik7CisKK307CisKK3N0cnVjdCBydGxfbWFjIHsKKwl1OCBtYWNfYWRkcltFVEhfQUxFTl07CisJdTggbWFjODAyMTFfcmVnaXN0ZXJlZDsKKwl1OCBiZWFjb25fZW5hYmxlZDsKKworCXUzMiB0eF9zc19udW07CisJdTMyIHJ4X3NzX251bTsKKworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgYmFuZHNbSUVFRTgwMjExX05VTV9CQU5EU107CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CisJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZjsKKwllbnVtIG5sODAyMTFfaWZ0eXBlIG9wbW9kZTsKKworCS8qUHJvYmUgQmVhY29uIG1hbmFnZW1lbnQgKi8KKwlzdHJ1Y3QgcnRsX3RpZF9kYXRhIHRpZHNbTUFYX1RJRF9DT1VOVF07CisJZW51bSBydGxfbGlua19zdGF0ZSBsaW5rX3N0YXRlOworCisJaW50IG5fY2hhbm5lbHM7CisJaW50IG5fYml0cmF0ZXM7CisKKwkvKmZpbHRlcnMgKi8KKwl1MzIgcnhfY29uZjsKKwl1MTYgcnhfbWd0X2ZpbHRlcjsKKwl1MTYgcnhfY3RybF9maWx0ZXI7CisJdTE2IHJ4X2RhdGFfZmlsdGVyOworCisJYm9vbCBhY3Rfc2Nhbm5pbmc7CisJdTggY250X2FmdGVyX2xpbmtlZDsKKworCSAvKlJERyovIGJvb2wgcmRnX2VuOworCisJIC8qQVAqLyB1OCBic3NpZFs2XTsKKwl1OCBtY3NbMTZdOwkvKjE2IGJ5dGVzIG1jcyBmb3IgSFQgcmF0ZXMuKi8KKwl1MzIgYmFzaWNfcmF0ZXM7IC8qYi9nIHJhdGVzKi8KKwl1OCBodF9lbmFibGU7CisJdTggc2dpXzQwOworCXU4IHNnaV8yMDsKKwl1OCBid180MDsKKwl1OCBtb2RlOwkJLyp3aXJlbGVzcyBtb2RlKi8KKwl1OCBzbG90X3RpbWU7CisJdTggc2hvcnRfcHJlYW1ibGU7CisJdTggdXNlX2N0c19wcm90ZWN0OworCXU4IGN1cl80MF9wcmltZV9zYzsKKwl1OCBjdXJfNDBfcHJpbWVfc2NfYms7CisJdTY0IHRzZjsKKwl1OCByZXRyeV9zaG9ydDsKKwl1OCByZXRyeV9sb25nOworCXUxNiBhc3NvY19pZDsKKworCSAvKklCU1MqLyBpbnQgYmVhY29uX2ludGVydmFsOworCisJIC8qQU1QRFUqLyB1OCBtaW5fc3BhY2VfY2ZnOwkvKkZvciBNaW4gc3BhY2luZyBjb25maWd1cmF0aW9ucyAqLworCXU4IG1heF9tc3NfZGVuc2l0eTsKKwl1OCBjdXJyZW50X2FtcGR1X2ZhY3RvcjsKKwl1OCBjdXJyZW50X2FtcGR1X2RlbnNpdHk7CisKKwkvKlFPUyAmIEVEQ0EgKi8KKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3BhcmFtcyBlZGNhX3BhcmFtW1JUTF9NQUM4MDIxMV9OVU1fUVVFVUVdOworCXN0cnVjdCBydGxfcW9zX3BhcmFtZXRlcnMgYWNbQUNfTUFYXTsKK307CisKK3N0cnVjdCBydGxfaGFsIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKKworCWVudW0gaW50Zl90eXBlIGludGVyZmFjZTsKKwl1MTYgaHdfdHlwZTsJCS8qOTJjIG9yIDkyZCBvciA5MnMgYW5kIHNvIG9uICovCisJdTggb2VtX2lkOworCXU4IHZlcnNpb247CQkvKnZlcnNpb24gb2YgY2hpcCAqLworCXU4IHN0YXRlOwkJLypzdG9wIDAsIHN0YXJ0IDEgKi8KKworCS8qZmlybXdhcmUgKi8KKwl1OCAqcGZpcm13YXJlOworCWJvb2wgYl9oMmNfc2V0aW5wcm9ncmVzczsKKwl1OCBsYXN0X2htZWJveG51bTsKKwlib29sIGJmd19yZWFkeTsKKwkvKlJlc2VydmUgcGFnZSBzdGFydCBvZmZzZXQgZXhjZXB0IGJlYWNvbiBpbiBUeFEuICovCisJdTggZndfcnN2ZHBhZ2Vfc3RhcnRvZmZzZXQ7Cit9OworCitzdHJ1Y3QgcnRsX3NlY3VyaXR5IHsKKwkvKmRlZmF1bHQgMCAqLworCWJvb2wgdXNlX3N3X3NlYzsKKworCWJvb2wgYmVpbmdfc2V0a2V5OworCWJvb2wgdXNlX2RlZmF1bHRrZXk7CisJLypFbmNyeXB0aW9uIEFsZ29yaXRobSBmb3IgVW5pY2FzdCBQYWNrZXQgKi8KKwllbnVtIHJ0X2VuY19hbGcgcGFpcndpc2VfZW5jX2FsZ29yaXRobTsKKwkvKkVuY3J5cHRpb24gQWxnb3JpdGhtIGZvciBCcm9jYXN0L011bHRpY2FzdCAqLworCWVudW0gcnRfZW5jX2FsZyBncm91cF9lbmNfYWxnb3JpdGhtOworCisJLypsb2NhbCBLZXkgYnVmZmVyLCBpbmR4IDAgaXMgZm9yCisJICAgcGFpcndpc2Uga2V5IDEtNCBpcyBmb3IgYWdvdXAga2V5LiAqLworCXU4IGtleV9idWZbS0VZX0JVRl9TSVpFXVtNQVhfS0VZX0xFTl07CisJdTgga2V5X2xlbltLRVlfQlVGX1NJWkVdOworCisJLypUaGUgcG9pbnRlciBvZiBQYWlyd2lzZSBLZXksCisJICAgaXQgYWx3YXlzIHBvaW50cyB0byBLZXlCdWZbNF0gKi8KKwl1OCAqcGFpcndpc2Vfa2V5OworfTsKKworc3RydWN0IHJ0bF9kbSB7CisJLypQSFkgc3RhdHVzIGZvciBETSAqLworCWxvbmcgZW50cnlfbWluX3VuZGVjb3JhdGVkc21vb3RoZWRfcHdkYjsKKwlsb25nIHVuZGVjb3JhdGVkX3Ntb290aGVkX3B3ZGI7CS8qb3V0IGRtICovCisJbG9uZyBlbnRyeV9tYXhfdW5kZWNvcmF0ZWRzbW9vdGhlZF9wd2RiOworCWJvb2wgYl9kbV9pbml0aWFsZ2Fpbl9lbmFibGU7CisJYm9vbCBiZHluYW1pY190eHBvd2VyX2VuYWJsZTsKKwlib29sIGJjdXJyZW50X3R1cmJvX2VkY2E7CisJYm9vbCBiaXNfYW55X25vbmJlcGt0czsJLypvdXQgZG0gKi8KKwlib29sIGJpc19jdXJfcmRsc3RhdGU7CisJYm9vbCBidHhwb3dlcl90cmFja2luZ0luaXQ7CisJYm9vbCBiX2Rpc2FibGVfZnJhbWVidXJzdGluZzsKKwlib29sIGJfY2NrX2luY2gxNDsKKwlib29sIGJ0eHBvd2VyX3RyYWNraW5nOworCWJvb2wgYl91c2VyYW1hc2s7CisJYm9vbCBicmZwYXRoX3J4ZW5hYmxlWzRdOworCisJdTggdGhlcm1hbHZhbHVlX2lxazsKKwl1OCB0aGVybWFsdmFsdWVfbGNrOworCXU4IHRoZXJtYWx2YWx1ZTsKKwl1OCBsYXN0X2R0cF9sdmw7CisJdTggZHluYW1pY190eGhpZ2hwb3dlcl9sdmw7CS8qVHggaGlnaCBwb3dlciBsZXZlbCAqLworCXU4IGRtX2ZsYWc7CS8qSW5kaWNhdGUgaWYgZWFjaCBkeW5hbWljIG1lY2hhbmlzbSdzIHN0YXR1cy4gKi8KKwl1OCBkbV90eXBlOworCXU4IHR4cG93ZXJfdHJhY2tfY29udHJvbDsKKworCWNoYXIgb2ZkbV9pbmRleFsyXTsKKwljaGFyIGNja19pbmRleDsKK307CisKKyNkZWZpbmUJRUZVU0VfTUFYX0xPR0lDQUxfU0laRQkJCSAxMjgKKworc3RydWN0IHJ0bF9lZnVzZSB7CisJYm9vbCBiYXV0b0xvYWRfb2s7CisJYm9vbCBib290ZnJvbWVmdXNlOworCXUxNiBtYXhfcGh5c2ljYWxfc2l6ZTsKKwl1OCBjb250ZW50c1tFRlVTRV9NQVhfTE9HSUNBTF9TSVpFXTsKKworCXU4IGVmdXNlX21hcFsyXVtFRlVTRV9NQVhfTE9HSUNBTF9TSVpFXTsKKwl1MTYgZWZ1c2VfdXNlZGJ5dGVzOworCXU4IGVmdXNlX3VzZWRwZXJjZW50YWdlOworCisJdTggYXV0b2xvYWRfZmFpbGZsYWc7CisKKwlzaG9ydCBlcHJvbXR5cGU7CisJdTE2IGVlcHJvbV92aWQ7CisJdTE2IGVlcHJvbV9kaWQ7CisJdTE2IGVlcHJvbV9zdmlkOworCXUxNiBlZXByb21fc21pZDsKKwl1OCBlZXByb21fb2VtaWQ7CisJdTE2IGVlcHJvbV9jaGFubmVscGxhbjsKKwl1OCBlZXByb21fdmVyc2lvbjsKKworCXU4IGRldl9hZGRyWzZdOworCisJYm9vbCBiX3R4cHdyX2Zyb21lcHJvbTsKKwl1OCBlZXByb21fdHNzaVsyXTsKKwl1OCBlZXByb21fcHdybGltaXRfaHQyMFszXTsKKwl1OCBlZXByb21fcHdybGltaXRfaHQ0MFszXTsKKwl1OCBlZXByb21fY2hubGFyZWFfdHhwd3JfY2NrWzJdWzNdOworCXU4IGVlcHJvbV9jaG5sYXJlYV90eHB3cl9odDQwXzFzWzJdWzNdOworCXU4IGVlcHJvbV9jaG5sYXJlYV90eHB3cl9odDQwXzJzZGlpZlsyXVszXTsKKwl1OCB0eHB3cmxldmVsX2Nja1syXVsxNF07CisJdTggdHhwd3JsZXZlbF9odDQwXzFzWzJdWzE0XTsJLypGb3IgSFQgNDBNSFogcHdyICovCisJdTggdHhwd3JsZXZlbF9odDQwXzJzWzJdWzE0XTsJLypGb3IgSFQgNDBNSFogcHdyICovCisKKwkvKkZvciBwb3dlciBncm91cCAqLworCXU4IHB3cmdyb3VwX2h0MjBbMl1bMTRdOworCXU4IHB3cmdyb3VwX2h0NDBbMl1bMTRdOworCisJY2hhciB0eHB3cl9odDIwZGlmZlsyXVsxNF07CS8qSFQgMjA8LT40MCBQd3IgZGlmZiAqLworCXU4IHR4cHdyX2xlZ2FjeWh0ZGlmZlsyXVsxNF07CS8qRm9yIEhUPC0+bGVnYWN5IHB3ciBkaWZmICovCisKKwl1OCBlZXByb21fcmVndWxhdG9yeTsKKwl1OCBlZXByb21fdGhlcm1hbG1ldGVyOworCS8qVGhlcm1hbE1ldGVyLCBpbmRleCAwIGZvciBSRklDMCwgYW5kIDEgZm9yIFJGSUMxICovCisJdTggdGhlcm1hbG1ldGVyWzJdOworCisJdTggbGVnYWN5X2h0X3R4cG93ZXJkaWZmOwkvKkxlZ2FjeSB0byBIVCByYXRlIHBvd2VyIGRpZmYgKi8KKwlib29sIGJfYXBrX3RoZXJtYWxtZXRlcmlnbm9yZTsKK307CisKK3N0cnVjdCBydGxfcHNfY3RsIHsKKwlib29sIHNldF9yZnBvd2Vyc3RhdGVfaW5wcm9ncmVzczsKKwlib29sIGJfaW5fcG93ZXJzYXZlbW9kZTsKKwlib29sIHJmY2hhbmdlX2lucHJvZ3Jlc3M7CisJYm9vbCBiX3N3cmZfcHJvY2Vzc2luZzsKKwlib29sIGJfaHdyYWRpb29mZjsKKworCXUzMiBsYXN0X3NsZWVwX2ppZmZpZXM7CisJdTMyIGxhc3RfYXdha2VfamlmZmllczsKKwl1MzIgbGFzdF9kZWxheWxwc19zdGFtcF9qaWZmaWVzOworCisJLyoKKwkgKiBqdXN0IGZvciBQQ0lFIEFTUE0KKwkgKiBJZiBpdCBzdXBwb3J0cyBBU1BNLCBPZmZzZXRbNTYwaF0gPSAweDQwLAorCSAqIG90aGVyd2lzZSBPZmZzZXRbNTYwaF0gPSAweDAwLgorCSAqICovCisJYm9vbCBiX3N1cHBvcnRfYXNwbTsKKwlib29sIGJfc3VwcG9ydF9iYWNrZG9vcjsKKworCS8qZm9yIExQUyAqLworCWVudW0gcnRfcHNtb2RlIGRvdDExX3BzbW9kZTsJLypQb3dlciBzYXZlIG1vZGUgY29uZmlndXJlZC4gKi8KKwlib29sIGJfbGVpc3VyZV9wczsKKwlib29sIGJfZndjdHJsX2xwczsKKwl1OCBmd2N0cmxfcHNtb2RlOworCS8qRm9yIEZ3IGNvbnRyb2wgTFBTIG1vZGUgKi8KKwl1OCBiX3JlZ19md2N0cmxfbHBzOworCS8qUmVjb3JkIEZ3IFBTIG1vZGUgc3RhdHVzLiAqLworCWJvb2wgYl9md19jdXJyZW50X2lucHNtb2RlOworCXU4IHJlZ19tYXhfbHBzX2F3YWtlaW50dmw7CisJYm9vbCByZXBvcnRfbGlua2VkOworCisJLypmb3IgSVBTICovCisJYm9vbCBiX2luYWN0aXZlcHM7CisKKwl1MzIgcmZvZmZfcmVhc29uOworCisJLypSRiBPRkYgTGV2ZWwgKi8KKwl1MzIgY3VyX3BzX2xldmVsOworCXUzMiByZWdfcmZwc19sZXZlbDsKKworCS8qanVzdCBmb3IgUENJRSBBU1BNICovCisJdTggY29uc3RfYW1kcGNpX2FzcG07CisKKwllbnVtIHJmX3B3cnN0YXRlIGluYWN0aXZlX3B3cnN0YXRlOworCWVudW0gcmZfcHdyc3RhdGUgcmZwd3Jfc3RhdGU7CS8qY3VyIHBvd2VyIHN0YXRlICovCit9OworCitzdHJ1Y3QgcnRsX3N0YXRzIHsKKwl1MzIgbWFjX3RpbWVbMl07CisJczggcnNzaTsKKwl1OCBzaWduYWw7CisJdTggbm9pc2U7CisJdTE2IHJhdGU7CQkvKmluIDEwMCBrYnBzICovCisJdTggcmVjZWl2ZWRfY2hhbm5lbDsKKwl1OCBjb250cm9sOworCXU4IG1hc2s7CisJdTggZnJlcTsKKwl1MTYgbGVuOworCXU2NCB0c2Y7CisJdTMyIGJlYWNvbl90aW1lOworCXU4IG5pY190eXBlOworCXUxNiBsZW5ndGg7CisJdTggc2lnbmFscXVhbGl0eTsJLyppbiAwLTEwMCBpbmRleC4gKi8KKwkvKgorCSAqIFJlYWwgcG93ZXIgaW4gZEJtIGZvciB0aGlzIHBhY2tldCwKKwkgKiBubyBiZWF1dGlmaWNhdGlvbiBhbmQgYWdncmVnYXRpb24uCisJICogKi8KKwlzMzIgcmVjdnNpZ25hbHBvd2VyOworCXM4IHJ4cG93ZXI7CQkvKmluIGRCbSBUcmFuc2xhdGUgZnJvbSBQV2RCICovCisJdTggc2lnbmFsc3RyZW5ndGg7CS8qaW4gMC0xMDAgaW5kZXguICovCisJdTE2IGJfaHdlcnJvcjoxOworCXUxNiBiX2NyYzoxOworCXUxNiBiX2ljdjoxOworCXUxNiBiX3Nob3J0cHJlYW1ibGU6MTsKKwl1MTYgYW50ZW5uYToxOworCXUxNiBkZWNyeXB0ZWQ6MTsKKwl1MTYgd2FrZXVwOjE7CisJdTMyIHRpbWVzdGFtcF9sb3c7CisJdTMyIHRpbWVzdGFtcF9oaWdoOworCisJdTggcnhfZHJ2aW5mb19zaXplOworCXU4IHJ4X2J1ZnNoaWZ0OworCWJvb2wgYl9pc2FtcGR1OworCWJvb2wgcnhfaXM0ME1oenBhY2tldDsKKwl1MzIgcnhfcHdkYl9hbGw7CisJdTggcnhfbWltb19zaWduYWxzdHJlbmd0aFs0XTsJLyppbiAwfjEwMCBpbmRleCAqLworCXM4IHJ4X21pbW9fc2lnbmFscXVhbGl0eVsyXTsKKwlib29sIGJfcGFja2V0X21hdGNoYnNzaWQ7CisJYm9vbCBiX2lzX2NjazsKKwlib29sIGJfcGFja2V0X3Rvc2VsZjsKKwlib29sIGJfcGFja2V0X2JlYWNvbjsJLypmb3IgcnNzaSAqLworCWNoYXIgY2NrX2FkY19wd2RiWzRdOwkvKmZvciByeCBwYXRoIHNlbGVjdGlvbiAqLworfTsKKworc3RydWN0IHJ0X2xpbmtfZGV0ZWN0IHsKKwl1MzIgbnVtX3R4X2luNHBlcmlvZFs0XTsKKwl1MzIgbnVtX3J4X2luNHBlcmlvZFs0XTsKKworCXUzMiBudW1fdHhfaW5wZXJpb2Q7CisJdTMyIG51bV9yeF9pbnBlcmlvZDsKKworCWJvb2wgYl9idXN5dHJhZmZpYzsKKwlib29sIGJfaGlnaGVyX2J1c3l0cmFmZmljOworCWJvb2wgYl9oaWdoZXJfYnVzeXJ4dHJhZmZpYzsKK307CisKK3N0cnVjdCBydGxfdGNiX2Rlc2MgeworCXU4IGJfcGFja2V0X2J3OjE7CisJdTggYl9tdWx0aWNhc3Q6MTsKKwl1OCBiX2Jyb2FkY2FzdDoxOworCisJdTggYl9ydHNfc3RiYzoxOworCXU4IGJfcnRzX2VuYWJsZToxOworCXU4IGJfY3RzX2VuYWJsZToxOworCXU4IGJfcnRzX3VzZV9zaG9ydHByZWFtYmxlOjE7CisJdTggYl9ydHNfdXNlX3Nob3J0Z2k6MTsKKwl1OCBydHNfc2M6MTsKKwl1OCBiX3J0c19idzoxOworCXU4IHJ0c19yYXRlOworCisJdTggdXNlX3Nob3J0Z2k6MTsKKwl1OCB1c2Vfc2hvcnRwcmVhbWJsZToxOworCXU4IHVzZV9kcml2ZXJfcmF0ZToxOworCXU4IGRpc2FibGVfcmF0ZWZhbGxiYWNrOjE7CisKKwl1OCByYXRyX2luZGV4OworCXU4IG1hY19pZDsKKwl1OCBod19yYXRlOworfTsKKworc3RydWN0IHJ0bF9oYWxfb3BzIHsKKwlpbnQgKCppbml0X3N3X3ZhcnMpIChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CisJdm9pZCAoKmRlaW5pdF9zd192YXJzKSAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworCXZvaWQgKCpyZWFkX2VlcHJvbV9pbmZvKSAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworCXZvaWQgKCppbnRlcnJ1cHRfcmVjb2duaXplZCkgKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICAgIHUzMiAqcF9pbnRhLCB1MzIgKnBfaW50Yik7CisJaW50ICgqaHdfaW5pdCkgKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKKwl2b2lkICgqaHdfZGlzYWJsZSkgKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKKwl2b2lkICgqZW5hYmxlX2ludGVycnVwdCkgKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKKwl2b2lkICgqZGlzYWJsZV9pbnRlcnJ1cHQpIChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CisJaW50ICgqc2V0X25ldHdvcmtfdHlwZSkgKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSBlbnVtIG5sODAyMTFfaWZ0eXBlIHR5cGUpOworCXZvaWQgKCpzZXRfYndfbW9kZSkgKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJICAgICBlbnVtIG5sODAyMTFfY2hhbm5lbF90eXBlIGNoX3R5cGUpOworCSB1OCgqc3dpdGNoX2NoYW5uZWwpIChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CisJdm9pZCAoKnNldF9xb3MpIChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgaW50IGFjaSk7CisJdm9pZCAoKnNldF9iY25fcmVnKSAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworCXZvaWQgKCpzZXRfYmNuX2ludHYpIChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CisJdm9pZCAoKnVwZGF0ZV9pbnRlcnJ1cHRfbWFzaykgKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICAgICB1MzIgYWRkX21zciwgdTMyIHJtX21zcik7CisJdm9pZCAoKmdldF9od19yZWcpIChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggdmFyaWFibGUsIHU4ICp2YWwpOworCXZvaWQgKCpzZXRfaHdfcmVnKSAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IHZhcmlhYmxlLCB1OCAqdmFsKTsKKwl2b2lkICgqdXBkYXRlX3JhdGVfdGFibGUpIChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CisJdm9pZCAoKnVwZGF0ZV9yYXRlX21hc2spIChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggcnNzaV9sZXZlbCk7CisJdm9pZCAoKmZpbGxfdHhfZGVzYykgKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwgdTggKnBkZXNjX3R4LAorCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvLAorCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHF1ZXVlX2luZGV4KTsKKwl2b2lkICgqZmlsbF90eF9jbWRkZXNjKSAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4ICpwZGVzYywKKwkJCQkgYm9vbCBiX2ZpcnN0c2VnLCBib29sIGJfbGFzdHNlZywKKwkJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisJIGJvb2woKnF1ZXJ5X3J4X2Rlc2MpIChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSAgICAgICBzdHJ1Y3QgcnRsX3N0YXRzICpzdGF0cywKKwkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzLAorCQkJICAgICAgIHU4ICpwZGVzYywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisJdm9pZCAoKnNldF9jaGFubmVsX2FjY2VzcykgKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKKwkgYm9vbCgqcmFkaW9fb25vZmZfY2hlY2tpbmcpIChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggKnZhbGlkKTsKKwl2b2lkICgqZG1fd2F0Y2hkb2cpIChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CisJdm9pZCAoKnNjYW5fb3BlcmF0aW9uX2JhY2t1cCkgKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBvcGVyYXRpb24pOworCSBib29sKCpzZXRfcmZfcG93ZXJfc3RhdGUpIChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICAgZW51bSByZl9wd3JzdGF0ZSByZnB3cl9zdGF0ZSk7CisJdm9pZCAoKmxlZF9jb250cm9sKSAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgICAgIGVudW0gbGVkX2N0bF9tb2RlIGxlZGFjdGlvbik7CisJdm9pZCAoKnNldF9kZXNjKSAodTggKnBkZXNjLCBib29sIGlzdHgsIHU4IGRlc2NfbmFtZSwgdTggKnZhbCk7CisJIHUzMigqZ2V0X2Rlc2MpICh1OCAqcGRlc2MsIGJvb2wgaXN0eCwgdTggZGVzY19uYW1lKTsKKwl2b2lkICgqdHhfcG9sbGluZykgKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1bnNpZ25lZCBpbnQgaHdfcXVldWUpOworCXZvaWQgKCplbmFibGVfaHdfc2VjKSAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworCXZvaWQgKCpzZXRfa2V5KSAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiBrZXlfaW5kZXgsCisJCQkgdTggKnBfbWFjYWRkciwgYm9vbCBpc19ncm91cCwgdTggZW5jX2FsZ28sCisJCQkgYm9vbCBpc193ZXBrZXksIGJvb2wgY2xlYXJfYWxsKTsKKwl2b2lkICgqaW5pdF9zd19sZWRzKSAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworCXZvaWQgKCpkZWluaXRfc3dfbGVkcykgKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKKwkgdTMyKCpnZXRfYmJyZWcpIChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIHJlZ2FkZHIsIHUzMiBiaXRtYXNrKTsKKwl2b2lkICgqc2V0X2JicmVnKSAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiByZWdhZGRyLCB1MzIgYml0bWFzaywKKwkJCSAgIHUzMiBkYXRhKTsKKwkgdTMyKCpnZXRfcmZyZWcpIChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgZW51bSByYWRpb19wYXRoIHJmcGF0aCwKKwkJCSAgdTMyIHJlZ2FkZHIsIHUzMiBiaXRtYXNrKTsKKwl2b2lkICgqc2V0X3JmcmVnKSAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGVudW0gcmFkaW9fcGF0aCByZnBhdGgsCisJCQkgICB1MzIgcmVnYWRkciwgdTMyIGJpdG1hc2ssIHUzMiBkYXRhKTsKK307CisKK3N0cnVjdCBydGxfaW50Zl9vcHMgeworCS8qY29tICovCisJaW50ICgqYWRhcHRlcl9zdGFydCkgKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKKwl2b2lkICgqYWRhcHRlcl9zdG9wKSAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworCisJaW50ICgqYWRhcHRlcl90eCkgKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKwlpbnQgKCpyZXNldF90cnhfcmluZykgKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKKworCS8qcGNpICovCisJdm9pZCAoKmRpc2FibGVfYXNwbSkgKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKKwl2b2lkICgqZW5hYmxlX2FzcG0pIChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CisKKwkvKnVzYiAqLworfTsKKworc3RydWN0IHJ0bF9tb2RfcGFyYW1zIHsKKwkvKiBkZWZhdWx0OiAwID0gdXNpbmcgaGFyZHdhcmUgZW5jcnlwdGlvbiAqLworCWludCBzd19jcnlwdG87Cit9OworCitzdHJ1Y3QgcnRsX2hhbF9jZmcgeworCWNoYXIgKm5hbWU7CisJY2hhciAqZndfbmFtZTsKKwlzdHJ1Y3QgcnRsX2hhbF9vcHMgKm9wczsKKwlzdHJ1Y3QgcnRsX21vZF9wYXJhbXMgKm1vZF9wYXJhbXM7CisKKwkvKnRoaXMgbWFwIHVzZWQgZm9yIHNvbWUgcmVnaXN0ZXJzIG9yIHZhcnMKKwkgICBkZWZpbmVkIGludCBIQUwgYnV0IHVzZWQgaW4gTUFJTiAqLworCXUzMiBtYXBzW1JUTF9WQVJfTUFQX01BWF07CisKK307CisKK3N0cnVjdCBydGxfbG9ja3MgeworCS8qIG11dGV4ICovCisJc3RydWN0IG11dGV4IGNvbmZfbXV0ZXg7CisKKwkvKnNwaW4gbG9jayAqLworCXNwaW5sb2NrX3QgaXBzX2xvY2s7CisJc3BpbmxvY2tfdCBpcnFfdGhfbG9jazsKKwlzcGlubG9ja190IGgyY19sb2NrOworCXNwaW5sb2NrX3QgcmZfcHNfbG9jazsKKwlzcGlubG9ja190IHJmX2xvY2s7CisJc3BpbmxvY2tfdCBscHNfbG9jazsKK307CisKK3N0cnVjdCBydGxfd29ya3MgeworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OworCisJLyp0aW1lciAqLworCXN0cnVjdCB0aW1lcl9saXN0IHdhdGNoZG9nX3RpbWVyOworCisJLyp0YXNrICovCisJc3RydWN0IHRhc2tsZXRfc3RydWN0IGlycV90YXNrbGV0OworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCBpcnFfcHJlcGFyZV9iY25fdGFza2xldDsKKworCS8qd29yayBxdWV1ZSAqLworCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpydGxfd3E7CisJc3RydWN0IGRlbGF5ZWRfd29yayB3YXRjaGRvZ193cTsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIGlwc19uaWNfb2ZmX3dxOworfTsKKworc3RydWN0IHJ0bF9kZWJ1ZyB7CisJdTMyIGRiZ3BfdHlwZVtEQkdQX1RZUEVfTUFYXTsKKwl1MzIgZ2xvYmFsX2RlYnVnbGV2ZWw7CisJdTY0IGdsb2JhbF9kZWJ1Z2NvbXBvbmVudHM7Cit9OworCitzdHJ1Y3QgcnRsX3ByaXYgeworCXN0cnVjdCBydGxfbG9ja3MgbG9ja3M7CisJc3RydWN0IHJ0bF93b3JrcyB3b3JrczsKKwlzdHJ1Y3QgcnRsX21hYyBtYWM4MDIxMTsKKwlzdHJ1Y3QgcnRsX2hhbCBydGxoYWw7CisJc3RydWN0IHJ0bF9yZWd1bGF0b3J5IHJlZ2Q7CisJc3RydWN0IHJ0bF9yZmtpbGwgcmZraWxsOworCXN0cnVjdCBydGxfaW8gaW87CisJc3RydWN0IHJ0bF9waHkgcGh5OworCXN0cnVjdCBydGxfZG0gZG07CisJc3RydWN0IHJ0bF9zZWN1cml0eSBzZWM7CisJc3RydWN0IHJ0bF9lZnVzZSBlZnVzZTsKKworCXN0cnVjdCBydGxfcHNfY3RsIHBzYzsKKwlzdHJ1Y3QgcmF0ZV9hZGFwdGl2ZSByYTsKKwlzdHJ1Y3Qgd2lyZWxlc3Nfc3RhdHMgc3RhdHM7CisJc3RydWN0IHJ0X2xpbmtfZGV0ZWN0IGxpbmtfaW5mbzsKKwlzdHJ1Y3QgZmFsc2VfYWxhcm1fc3RhdGlzdGljcyBmYWxzZWFsbV9jbnQ7CisKKwlzdHJ1Y3QgcnRsX3JhdGVfcHJpdiAqcmF0ZV9wcml2OworCisJc3RydWN0IHJ0bF9kZWJ1ZyBkYmc7CisKKwkvKgorCSAqaGFsX2NmZyA6IGZvciBkaWZmIGNhcmRzCisJICppbnRmX29wcyA6IGZvciBkaWZmIGludGVycmZhY2UgdXNiL3BjaWUKKwkgKi8KKwlzdHJ1Y3QgcnRsX2hhbF9jZmcgKmNmZzsKKwlzdHJ1Y3QgcnRsX2ludGZfb3BzICppbnRmX29wczsKKworCS8qdGhpcyB2YXIgd2lsbCBiZSBzZXQgYnkgc2V0X2JpdCwKKwkgICBhbmQgd2FzIHVzZWQgdG8gaW5kaWNhdGUgc3RhdHVzIG9mCisJICAgaW50ZXJmYWNlIG9yIGhhcmR3YXJlICovCisJdW5zaWduZWQgbG9uZyBzdGF0dXM7CisKKwkvKlRoaXMgbXVzdCBiZSB0aGUgbGFzdCBpdGVtIHNvCisJICAgdGhhdCBpdCBwb2ludHMgdG8gdGhlIGRhdGEgYWxsb2NhdGVkCisJICAgYmV5b25kICB0aGlzIHN0cnVjdHVyZSBsaWtlOgorCSAgIHJ0bF9wY2lfcHJpdiBvciBydGxfdXNiX3ByaXYgKi8KKwl1OCBwcml2WzBdOworfTsKKworI2RlZmluZSBydGxfcHJpdihodykJCSgoKHN0cnVjdCBydGxfcHJpdiAqKShodyktPnByaXYpKQorI2RlZmluZSBydGxfbWFjKHJ0bHByaXYpCSgmKChydGxwcml2KS0+bWFjODAyMTEpKQorI2RlZmluZSBydGxfaGFsKHJ0bHByaXYpCSgmKChydGxwcml2KS0+cnRsaGFsKSkKKyNkZWZpbmUgcnRsX2VmdXNlKHJ0bHByaXYpCSgmKChydGxwcml2KS0+ZWZ1c2UpKQorI2RlZmluZSBydGxfcHNjKHJ0bHByaXYpCSgmKChydGxwcml2KS0+cHNjKSkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwltZW0gYWNjZXNzIG1hY3JvIGRlZmluZSBzdGFydAorCUNhbGwgZW5kaWFuIGZyZWUgZnVuY3Rpb24gd2hlbgorCTEuIFJlYWQvd3JpdGUgcGFja2V0IGNvbnRlbnQuCisJMi4gQmVmb3JlIHdyaXRlIGludGVnZXIgdG8gSU8uCisJMy4gQWZ0ZXIgcmVhZCBpbnRlZ2VyIGZyb20gSU8uCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogQ29udmVydCBsaXR0bGUgZGF0YSBlbmRpYW4gdG8gaG9zdCAqLworI2RlZmluZSBFRjFCWVRFKF92YWwpCQlcCisJKCh1OCkoX3ZhbCkpCisjZGVmaW5lIEVGMkJZVEUoX3ZhbCkJCVwKKwkobGUxNl90b19jcHUoX3ZhbCkpCisjZGVmaW5lIEVGNEJZVEUoX3ZhbCkJCVwKKwkobGUzMl90b19jcHUoX3ZhbCkpCisKKy8qIFJlYWQgZGF0YSBmcm9tIG1lbW9yeSAqLworI2RlZmluZSBSRUFERUYxQllURShfcHRyKQlcCisJRUYxQllURSgqKCh1OCAqKShfcHRyKSkpCisjZGVmaW5lIFJFQURFRjJCWVRFKF9wdHIpCVwKKwlFRjJCWVRFKCooKHUxNiAqKShfcHRyKSkpCisjZGVmaW5lIFJFQURFRjRCWVRFKF9wdHIpCVwKKwlFRjRCWVRFKCooKHUzMiAqKShfcHRyKSkpCisKKy8qIFdyaXRlIGRhdGEgdG8gbWVtb3J5ICovCisjZGVmaW5lIFdSSVRFRUYxQllURShfcHRyLCBfdmFsKQlcCisJKCooKHU4ICopKF9wdHIpKSkgPSBFRjFCWVRFKF92YWwpCisjZGVmaW5lIFdSSVRFRUYyQllURShfcHRyLCBfdmFsKQlcCisJKCooKHUxNiAqKShfcHRyKSkpID0gRUYyQllURShfdmFsKQorI2RlZmluZSBXUklURUVGNEJZVEUoX3B0ciwgX3ZhbCkJXAorCSgqKCh1MzIgKikoX3B0cikpKSA9IEVGNEJZVEUoX3ZhbCkKKworLypFeGFtcGxlOgorQklUX0xFTl9NQVNLXzMyKDApID0+IDB4MDAwMDAwMDAKK0JJVF9MRU5fTUFTS18zMigxKSA9PiAweDAwMDAwMDAxCitCSVRfTEVOX01BU0tfMzIoMikgPT4gMHgwMDAwMDAwMworQklUX0xFTl9NQVNLXzMyKDMyKSA9PiAweEZGRkZGRkZGKi8KKyNkZWZpbmUgQklUX0xFTl9NQVNLXzMyKF9fYml0bGVuKQkgXAorCSgweEZGRkZGRkZGID4+ICgzMiAtIChfX2JpdGxlbikpKQorI2RlZmluZSBCSVRfTEVOX01BU0tfMTYoX19iaXRsZW4pCSBcCisJKDB4RkZGRiA+PiAoMTYgLSAoX19iaXRsZW4pKSkKKyNkZWZpbmUgQklUX0xFTl9NQVNLXzgoX19iaXRsZW4pIFwKKwkoMHhGRiA+PiAoOCAtIChfX2JpdGxlbikpKQorCisvKkV4YW1wbGU6CitCSVRfT0ZGU0VUX0xFTl9NQVNLXzMyKDAsIDIpID0+IDB4MDAwMDAwMDMKK0JJVF9PRkZTRVRfTEVOX01BU0tfMzIoMTYsIDIpID0+IDB4MDAwMzAwMDAqLworI2RlZmluZSBCSVRfT0ZGU0VUX0xFTl9NQVNLXzMyKF9fYml0b2Zmc2V0LCBfX2JpdGxlbikgXAorCShCSVRfTEVOX01BU0tfMzIoX19iaXRsZW4pIDw8IChfX2JpdG9mZnNldCkpCisjZGVmaW5lIEJJVF9PRkZTRVRfTEVOX01BU0tfMTYoX19iaXRvZmZzZXQsIF9fYml0bGVuKSBcCisJKEJJVF9MRU5fTUFTS18xNihfX2JpdGxlbikgPDwgKF9fYml0b2Zmc2V0KSkKKyNkZWZpbmUgQklUX09GRlNFVF9MRU5fTUFTS184KF9fYml0b2Zmc2V0LCBfX2JpdGxlbikgXAorCShCSVRfTEVOX01BU0tfOChfX2JpdGxlbikgPDwgKF9fYml0b2Zmc2V0KSkKKworLypEZXNjcmlwdGlvbjoKK1JldHVybiA0LWJ5dGUgdmFsdWUgaW4gaG9zdCBieXRlIG9yZGVyaW5nIGZyb20KKzQtYnl0ZSBwb2ludGVyIGluIGxpdHRsZS1lbmRpYW4gc3lzdGVtLiovCisjZGVmaW5lIExFX1A0QllURV9UT19IT1NUXzRCWVRFKF9fcHN0YXJ0KSBcCisJKEVGNEJZVEUoKigodTMyICopKF9fcHN0YXJ0KSkpKQorI2RlZmluZSBMRV9QMkJZVEVfVE9fSE9TVF8yQllURShfX3BzdGFydCkgXAorCShFRjJCWVRFKCooKHUxNiAqKShfX3BzdGFydCkpKSkKKyNkZWZpbmUgTEVfUDFCWVRFX1RPX0hPU1RfMUJZVEUoX19wc3RhcnQpIFwKKwkoRUYxQllURSgqKCh1OCAqKShfX3BzdGFydCkpKSkKKworLypEZXNjcmlwdGlvbjoKK1RyYW5zbGF0ZSBzdWJmaWVsZCAoY29udGludW91cyBiaXRzIGluIGxpdHRsZS1lbmRpYW4pIG9mIDQtYnl0ZQordmFsdWUgdG8gaG9zdCBieXRlIG9yZGVyaW5nLiovCisjZGVmaW5lIExFX0JJVFNfVE9fNEJZVEUoX19wc3RhcnQsIF9fYml0b2Zmc2V0LCBfX2JpdGxlbikgXAorCSggXAorCQkoTEVfUDRCWVRFX1RPX0hPU1RfNEJZVEUoX19wc3RhcnQpID4+IChfX2JpdG9mZnNldCkpICAmIFwKKwkJQklUX0xFTl9NQVNLXzMyKF9fYml0bGVuKSBcCisJKQorI2RlZmluZSBMRV9CSVRTX1RPXzJCWVRFKF9fcHN0YXJ0LCBfX2JpdG9mZnNldCwgX19iaXRsZW4pIFwKKwkoIFwKKwkJKExFX1AyQllURV9UT19IT1NUXzJCWVRFKF9fcHN0YXJ0KSA+PiAoX19iaXRvZmZzZXQpKSAmIFwKKwkJQklUX0xFTl9NQVNLXzE2KF9fYml0bGVuKSBcCisJKQorI2RlZmluZSBMRV9CSVRTX1RPXzFCWVRFKF9fcHN0YXJ0LCBfX2JpdG9mZnNldCwgX19iaXRsZW4pIFwKKwkoIFwKKwkJKExFX1AxQllURV9UT19IT1NUXzFCWVRFKF9fcHN0YXJ0KSA+PiAoX19iaXRvZmZzZXQpKSAmIFwKKwkJQklUX0xFTl9NQVNLXzgoX19iaXRsZW4pIFwKKwkpCisKKy8qRGVzY3JpcHRpb246CitNYXNrIHN1YmZpZWxkIChjb250aW51b3VzIGJpdHMgaW4gbGl0dGxlLWVuZGlhbikgb2YgNC1ieXRlIHZhbHVlCithbmQgcmV0dXJuIHRoZSByZXN1bHQgaW4gNC1ieXRlIHZhbHVlIGluIGhvc3QgYnl0ZSBvcmRlcmluZy4qLworI2RlZmluZSBMRV9CSVRTX0NMRUFSRURfVE9fNEJZVEUoX19wc3RhcnQsIF9fYml0b2Zmc2V0LCBfX2JpdGxlbikgXAorCSggXAorCQlMRV9QNEJZVEVfVE9fSE9TVF80QllURShfX3BzdGFydCkgICYgXAorCQkofkJJVF9PRkZTRVRfTEVOX01BU0tfMzIoX19iaXRvZmZzZXQsIF9fYml0bGVuKSkgXAorCSkKKyNkZWZpbmUgTEVfQklUU19DTEVBUkVEX1RPXzJCWVRFKF9fcHN0YXJ0LCBfX2JpdG9mZnNldCwgX19iaXRsZW4pIFwKKwkoIFwKKwkJTEVfUDJCWVRFX1RPX0hPU1RfMkJZVEUoX19wc3RhcnQpICYgXAorCQkofkJJVF9PRkZTRVRfTEVOX01BU0tfMTYoX19iaXRvZmZzZXQsIF9fYml0bGVuKSkgXAorCSkKKyNkZWZpbmUgTEVfQklUU19DTEVBUkVEX1RPXzFCWVRFKF9fcHN0YXJ0LCBfX2JpdG9mZnNldCwgX19iaXRsZW4pIFwKKwkoIFwKKwkJTEVfUDFCWVRFX1RPX0hPU1RfMUJZVEUoX19wc3RhcnQpICYgXAorCQkofkJJVF9PRkZTRVRfTEVOX01BU0tfOChfX2JpdG9mZnNldCwgX19iaXRsZW4pKSBcCisJKQorCisvKkRlc2NyaXB0aW9uOgorU2V0IHN1YmZpZWxkIG9mIGxpdHRsZS1lbmRpYW4gNC1ieXRlIHZhbHVlIHRvIHNwZWNpZmllZCB2YWx1ZS4JKi8KKyNkZWZpbmUgU0VUX0JJVFNfVE9fTEVfNEJZVEUoX19wc3RhcnQsIF9fYml0b2Zmc2V0LCBfX2JpdGxlbiwgX192YWwpIFwKKwkqKCh1MzIgKikoX19wc3RhcnQpKSA9IEVGNEJZVEUgXAorCSggXAorCQlMRV9CSVRTX0NMRUFSRURfVE9fNEJZVEUoX19wc3RhcnQsIF9fYml0b2Zmc2V0LCBfX2JpdGxlbikgfCBcCisJCSgoKCh1MzIpX192YWwpICYgQklUX0xFTl9NQVNLXzMyKF9fYml0bGVuKSkgPDwgKF9fYml0b2Zmc2V0KSkgXAorCSk7CisjZGVmaW5lIFNFVF9CSVRTX1RPX0xFXzJCWVRFKF9fcHN0YXJ0LCBfX2JpdG9mZnNldCwgX19iaXRsZW4sIF9fdmFsKSBcCisJKigodTE2ICopKF9fcHN0YXJ0KSkgPSBFRjJCWVRFIFwKKwkoIFwKKwkJTEVfQklUU19DTEVBUkVEX1RPXzJCWVRFKF9fcHN0YXJ0LCBfX2JpdG9mZnNldCwgX19iaXRsZW4pIHwgXAorCQkoKCgodTE2KV9fdmFsKSAmIEJJVF9MRU5fTUFTS18xNihfX2JpdGxlbikpIDw8IChfX2JpdG9mZnNldCkpIFwKKwkpOworI2RlZmluZSBTRVRfQklUU19UT19MRV8xQllURShfX3BzdGFydCwgX19iaXRvZmZzZXQsIF9fYml0bGVuLCBfX3ZhbCkgXAorCSooKHU4ICopKF9fcHN0YXJ0KSkgPSBFRjFCWVRFIFwKKwkoIFwKKwkJTEVfQklUU19DTEVBUkVEX1RPXzFCWVRFKF9fcHN0YXJ0LCBfX2JpdG9mZnNldCwgX19iaXRsZW4pIHwgXAorCQkoKCgodTgpX192YWwpICYgQklUX0xFTl9NQVNLXzgoX19iaXRsZW4pKSA8PCAoX19iaXRvZmZzZXQpKSBcCisJKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwltZW0gYWNjZXNzIG1hY3JvIGRlZmluZSBlbmQKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgcGFja2V0X2dldF90eXBlKF9wYWNrZXQpIChFRjFCWVRFKChfcGFja2V0KS5vY3RldFswXSkgJiAweEZDKQorI2RlZmluZSBSVExfV0FUQ0hfRE9HX1RJTUUJMjAwMAorI2RlZmluZSBNU0VDUyh0KQkJbXNlY3NfdG9famlmZmllcyh0KQorI2RlZmluZSBXTEFOX0ZDX0dFVF9WRVJTKGZjKQkoKGZjKSAmIElFRUU4MDIxMV9GQ1RMX1ZFUlMpCisjZGVmaW5lIFdMQU5fRkNfR0VUX1RZUEUoZmMpCSgoZmMpICYgSUVFRTgwMjExX0ZDVExfRlRZUEUpCisjZGVmaW5lIFdMQU5fRkNfR0VUX1NUWVBFKGZjKQkoKGZjKSAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKQorI2RlZmluZSBXTEFOX0ZDX01PUkVfREFUQShmYykJKChmYykgJiBJRUVFODAyMTFfRkNUTF9NT1JFREFUQSkKKyNkZWZpbmUgU0VRX1RPX1NOKHNlcSkJCSgoKHNlcSkgJiBJRUVFODAyMTFfU0NUTF9TRVEpID4+IDQpCisjZGVmaW5lIFNOX1RPX1NFUShzc24pCQkoKChzc24pIDw8IDQpICYgSUVFRTgwMjExX1NDVExfU0VRKQorI2RlZmluZSBNQVhfU04JCQkoKElFRUU4MDIxMV9TQ1RMX1NFUSkgPj4gNCkKKworI2RlZmluZQlSVF9SRl9PRkZfTEVWTF9BU1BNCQlCSVQoMCkJLypQQ0kgQVNQTSAqLworI2RlZmluZQlSVF9SRl9PRkZfTEVWTF9DTEtfUkVRCQlCSVQoMSkJLypQQ0kgY2xvY2sgcmVxdWVzdCAqLworI2RlZmluZQlSVF9SRl9PRkZfTEVWTF9QQ0lfRDMJCUJJVCgyKQkvKlBDSSBEMyBtb2RlICovCisvKk5JQyBoYWx0LCByZS1pbml0aWFsaXplIGh3IHBhcmFtZXRlcnMqLworI2RlZmluZQlSVF9SRl9PRkZfTEVWTF9IQUxUX05JQwkJQklUKDMpCisjZGVmaW5lCVJUX1JGX09GRl9MRVZMX0ZSRUVfRlcJCUJJVCg0KQkvKkZXIGZyZWUsIHJlLWRvd25sb2FkIHRoZSBGVyAqLworI2RlZmluZQlSVF9SRl9PRkZfTEVWTF9GV18zMksJCUJJVCg1KQkvKkZXIGluIDMyayAqLworLypBbHdheXMgZW5hYmxlIEFTUE0gYW5kIENsb2NrIFJlcSBpbiBpbml0aWFsaXphdGlvbi4qLworI2RlZmluZQlSVF9SRl9QU19MRVZFTF9BTFdBWVNfQVNQTQlCSVQoNikKKy8qV2hlbiBMUFMgaXMgb24sIGRpc2FibGUgMlIgaWYgbm8gcGFja2V0IGlzIHJlY2VpdmVkIG9yIHRyYW5zbWl0dGQuKi8KKyNkZWZpbmUJUlRfUkZfTFBTX0RJU0FMQkVfMlIJCUJJVCgzMCkKKyNkZWZpbmUJUlRfUkZfTFBTX0xFVkVMX0FTUE0JCUJJVCgzMSkJLypMUFMgd2l0aCBBU1BNICovCisjZGVmaW5lCVJUX0lOX1BTX0xFVkVMKHBwc2MsIF9wc19mbGcpCQlcCisJKChwcHNjLT5jdXJfcHNfbGV2ZWwgJiBfcHNfZmxnKSA/IHRydWUgOiBmYWxzZSkKKyNkZWZpbmUJUlRfQ0xFQVJfUFNfTEVWRUwocHBzYywgX3BzX2ZsZykJXAorCShwcHNjLT5jdXJfcHNfbGV2ZWwgJj0gKH4oX3BzX2ZsZykpKQorI2RlZmluZQlSVF9TRVRfUFNfTEVWRUwocHBzYywgX3BzX2ZsZykJCVwKKwkocHBzYy0+Y3VyX3BzX2xldmVsIHw9IF9wc19mbGcpCisKKyNkZWZpbmUgY29udGFpbmVyX29mX2R3b3JrX3J0bCh4LCB5LCB6KSBcCisJY29udGFpbmVyX29mKGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgZGVsYXllZF93b3JrLCB3b3JrKSwgeSwgeikKKworI2RlZmluZSBGSUxMX09DVEVUX1NUUklORyhfb3MsIF9vY3RldCwgX2xlbikJXAorCQkoX29zKS5vY3RldCA9ICh1OCAqKShfb2N0ZXQpOwkJXAorCQkoX29zKS5sZW5ndGggPSAoX2xlbik7CisKKyNkZWZpbmUgQ1BfTUFDQUREUihkZXMsIHNyYykJXAorCSgoZGVzKVswXSA9IChzcmMpWzBdLCAoZGVzKVsxXSA9IChzcmMpWzFdLFwKKwkoZGVzKVsyXSA9IChzcmMpWzJdLCAoZGVzKVszXSA9IChzcmMpWzNdLFwKKwkoZGVzKVs0XSA9IChzcmMpWzRdLCAoZGVzKVs1XSA9IChzcmMpWzVdKQorCitzdGF0aWMgaW5saW5lIHU4IHJ0bF9yZWFkX2J5dGUoc3RydWN0IHJ0bF9wcml2ICpydGxwcml2LCB1MzIgYWRkcikKK3sKKwlyZXR1cm4gcnRscHJpdi0+aW8ucmVhZDhfc3luYyhydGxwcml2LCBhZGRyKTsKK30KKworc3RhdGljIGlubGluZSB1MTYgcnRsX3JlYWRfd29yZChzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYsIHUzMiBhZGRyKQoreworCXJldHVybiBydGxwcml2LT5pby5yZWFkMTZfc3luYyhydGxwcml2LCBhZGRyKTsKK30KKworc3RhdGljIGlubGluZSB1MzIgcnRsX3JlYWRfZHdvcmQoc3RydWN0IHJ0bF9wcml2ICpydGxwcml2LCB1MzIgYWRkcikKK3sKKwlyZXR1cm4gcnRscHJpdi0+aW8ucmVhZDMyX3N5bmMocnRscHJpdiwgYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBydGxfd3JpdGVfYnl0ZShzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYsIHUzMiBhZGRyLCB1OCB2YWw4KQoreworCXJ0bHByaXYtPmlvLndyaXRlOF9hc3luYyhydGxwcml2LCBhZGRyLCB2YWw4KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJ0bF93cml0ZV93b3JkKHN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiwgdTMyIGFkZHIsIHUxNiB2YWwxNikKK3sKKwlydGxwcml2LT5pby53cml0ZTE2X2FzeW5jKHJ0bHByaXYsIGFkZHIsIHZhbDE2KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJ0bF93cml0ZV9kd29yZChzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYsCisJCQkJICAgdTMyIGFkZHIsIHUzMiB2YWwzMikKK3sKKwlydGxwcml2LT5pby53cml0ZTMyX2FzeW5jKHJ0bHByaXYsIGFkZHIsIHZhbDMyKTsKK30KKworc3RhdGljIGlubGluZSB1MzIgcnRsX2dldF9iYnJlZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQl1MzIgcmVnYWRkciwgdTMyIGJpdG1hc2spCit7CisJcmV0dXJuICgoc3RydWN0IHJ0bF9wcml2ICopKGh3KS0+cHJpdiktPmNmZy0+b3BzLT5nZXRfYmJyZWcoaHcsCisJCQkJCQkJCSAgICByZWdhZGRyLAorCQkJCQkJCQkgICAgYml0bWFzayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBydGxfc2V0X2JicmVnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgcmVnYWRkciwKKwkJCQkgdTMyIGJpdG1hc2ssIHUzMiBkYXRhKQoreworCSgoc3RydWN0IHJ0bF9wcml2ICopKGh3KS0+cHJpdiktPmNmZy0+b3BzLT5zZXRfYmJyZWcoaHcsCisJCQkJCQkJICAgICByZWdhZGRyLCBiaXRtYXNrLAorCQkJCQkJCSAgICAgZGF0YSk7CisKK30KKworc3RhdGljIGlubGluZSB1MzIgcnRsX2dldF9yZnJlZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQllbnVtIHJhZGlvX3BhdGggcmZwYXRoLCB1MzIgcmVnYWRkciwKKwkJCQl1MzIgYml0bWFzaykKK3sKKwlyZXR1cm4gKChzdHJ1Y3QgcnRsX3ByaXYgKikoaHcpLT5wcml2KS0+Y2ZnLT5vcHMtPmdldF9yZnJlZyhodywKKwkJCQkJCQkJICAgIHJmcGF0aCwKKwkJCQkJCQkJICAgIHJlZ2FkZHIsCisJCQkJCQkJCSAgICBiaXRtYXNrKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJ0bF9zZXRfcmZyZWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJIGVudW0gcmFkaW9fcGF0aCByZnBhdGgsIHUzMiByZWdhZGRyLAorCQkJCSB1MzIgYml0bWFzaywgdTMyIGRhdGEpCit7CisJKChzdHJ1Y3QgcnRsX3ByaXYgKikoaHcpLT5wcml2KS0+Y2ZnLT5vcHMtPnNldF9yZnJlZyhodywKKwkJCQkJCQkgICAgIHJmcGF0aCwgcmVnYWRkciwKKwkJCQkJCQkgICAgIGJpdG1hc2ssIGRhdGEpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNfaGFsX3N0b3Aoc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCkKK3sKKwlyZXR1cm4gKF9IQUxfU1RBVEVfU1RPUCA9PSBydGxoYWwtPnN0YXRlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldF9oYWxfc3RhcnQoc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCkKK3sKKwlydGxoYWwtPnN0YXRlID0gX0hBTF9TVEFURV9TVEFSVDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldF9oYWxfc3RvcChzdHJ1Y3QgcnRsX2hhbCAqcnRsaGFsKQoreworCXJ0bGhhbC0+c3RhdGUgPSBfSEFMX1NUQVRFX1NUT1A7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTggZ2V0X3JmX3R5cGUoc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSkKK3sKKwlyZXR1cm4gcnRscGh5LT5yZl90eXBlOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTI1MS9ib290LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyNTEvYm9vdC5jCmluZGV4IDYxNTcyZGYuLmQ3MjlkYWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTI1MS9ib290LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMjUxL2Jvb3QuYwpAQCAtMTksNyArMTksNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAogI2luY2x1ZGUgInJlZy5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMjUxL21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTI1MS9tYWluLmMKaW5kZXggN2E4NzYyNS4uMDEyZTFhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMjUxL21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyNTEvbWFpbi5jCkBAIC01MiwxNCArNTIsMTQgQEAKIAl3bC0+aWZfb3BzLT5kaXNhYmxlX2lycSh3bCk7CiB9CiAKLXN0YXRpYyB2b2lkIHdsMTI1MV9wb3dlcl9vZmYoc3RydWN0IHdsMTI1MSAqd2wpCitzdGF0aWMgaW50IHdsMTI1MV9wb3dlcl9vZmYoc3RydWN0IHdsMTI1MSAqd2wpCiB7Ci0Jd2wtPnNldF9wb3dlcihmYWxzZSk7CisJcmV0dXJuIHdsLT5pZl9vcHMtPnBvd2VyKHdsLCBmYWxzZSk7CiB9CiAKLXN0YXRpYyB2b2lkIHdsMTI1MV9wb3dlcl9vbihzdHJ1Y3Qgd2wxMjUxICp3bCkKK3N0YXRpYyBpbnQgd2wxMjUxX3Bvd2VyX29uKHN0cnVjdCB3bDEyNTEgKndsKQogewotCXdsLT5zZXRfcG93ZXIodHJ1ZSk7CisJcmV0dXJuIHdsLT5pZl9vcHMtPnBvd2VyKHdsLCB0cnVlKTsKIH0KIAogc3RhdGljIGludCB3bDEyNTFfZmV0Y2hfZmlybXdhcmUoc3RydWN0IHdsMTI1MSAqd2wpCkBAIC0xNTIsOSArMTUyLDEyIEBACiAKIHN0YXRpYyBpbnQgd2wxMjUxX2NoaXBfd2FrZXVwKHN0cnVjdCB3bDEyNTEgKndsKQogewotCWludCByZXQgPSAwOworCWludCByZXQ7CiAKLQl3bDEyNTFfcG93ZXJfb24od2wpOworCXJldCA9IHdsMTI1MV9wb3dlcl9vbih3bCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKIAltc2xlZXAoV0wxMjUxX1BPV0VSX09OX1NMRUVQKTsKIAl3bC0+aWZfb3BzLT5yZXNldCh3bCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTI1MS9zZGlvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyNTEvc2Rpby5jCmluZGV4IDc0YmE5Y2UuLmQ1NTBiNWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTI1MS9zZGlvLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMjUxL3NkaW8uYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3dsMTJ4eC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KIAogI2luY2x1ZGUgIndsMTI1MS5oIgogCkBAIC00Miw4ICs0Myw2IEBACiAJdTMyIGVscF92YWw7CiB9OwogCi1zdGF0aWMgc3RydWN0IHdsMTJ4eF9wbGF0Zm9ybV9kYXRhICp3bDEyeHhfYm9hcmRfZGF0YTsKLQogc3RhdGljIHN0cnVjdCBzZGlvX2Z1bmMgKndsX3RvX2Z1bmMoc3RydWN0IHdsMTI1MSAqd2wpCiB7CiAJc3RydWN0IHdsMTI1MV9zZGlvICp3bF9zZGlvID0gd2wtPmlmX3ByaXY7CkBAIC0xNzEsOCArMTcwLDQyIEBACiAJcmV0dXJuIGRpc2FibGVfaXJxKHdsLT5pcnEpOwogfQogCi1zdGF0aWMgdm9pZCB3bDEyNTFfc2Rpb19zZXRfcG93ZXIoYm9vbCBlbmFibGUpCitzdGF0aWMgaW50IHdsMTI1MV9zZGlvX3NldF9wb3dlcihzdHJ1Y3Qgd2wxMjUxICp3bCwgYm9vbCBlbmFibGUpCiB7CisJc3RydWN0IHNkaW9fZnVuYyAqZnVuYyA9IHdsX3RvX2Z1bmMod2wpOworCWludCByZXQ7CisKKwlpZiAoZW5hYmxlKSB7CisJCS8qCisJCSAqIFBvd2VyIGlzIGNvbnRyb2xsZWQgYnkgcnVudGltZSBQTSwgYnV0IHdlIHN0aWxsIGNhbGwgYm9hcmQKKwkJICogY2FsbGJhY2sgaW4gY2FzZSBpdCB3YW50cyB0byBkbyBhbnkgYWRkaXRpb25hbCBzZXR1cCwKKwkJICogZm9yIGV4YW1wbGUgZW5hYmxpbmcgY2xvY2sgYnVmZmVyIGZvciB0aGUgbW9kdWxlLgorCQkgKi8KKwkJaWYgKHdsLT5zZXRfcG93ZXIpCisJCQl3bC0+c2V0X3Bvd2VyKHRydWUpOworCisJCXJldCA9IHBtX3J1bnRpbWVfZ2V0X3N5bmMoJmZ1bmMtPmRldik7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdXQ7CisKKwkJc2Rpb19jbGFpbV9ob3N0KGZ1bmMpOworCQlzZGlvX2VuYWJsZV9mdW5jKGZ1bmMpOworCQlzZGlvX3JlbGVhc2VfaG9zdChmdW5jKTsKKwl9IGVsc2UgeworCQlzZGlvX2NsYWltX2hvc3QoZnVuYyk7CisJCXNkaW9fZGlzYWJsZV9mdW5jKGZ1bmMpOworCQlzZGlvX3JlbGVhc2VfaG9zdChmdW5jKTsKKworCQlyZXQgPSBwbV9ydW50aW1lX3B1dF9zeW5jKCZmdW5jLT5kZXYpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gb3V0OworCisJCWlmICh3bC0+c2V0X3Bvd2VyKQorCQkJd2wtPnNldF9wb3dlcihmYWxzZSk7CisJfQorCitvdXQ6CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHN0cnVjdCB3bDEyNTFfaWZfb3BlcmF0aW9ucyB3bDEyNTFfc2Rpb19vcHMgPSB7CkBAIC0xODEsMzAgKzIxNCw3IEBACiAJLndyaXRlX2VscCA9IHdsMTI1MV9zZGlvX3dyaXRlX2VscCwKIAkucmVhZF9lbHAgPSB3bDEyNTFfc2Rpb19yZWFkX2VscCwKIAkucmVzZXQgPSB3bDEyNTFfc2Rpb19yZXNldCwKLX07Ci0KLXN0YXRpYyBpbnQgd2wxMjUxX3BsYXRmb3JtX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0JaWYgKHBkZXYtPmlkICE9IC0xKSB7Ci0JCXdsMTI1MV9lcnJvcigiY2FuIG9ubHkgaGFuZGxlIHNpbmdsZSBkZXZpY2UiKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0Jd2wxMnh4X2JvYXJkX2RhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIER1bW15IHBsYXRmb3JtX2RyaXZlciBmb3IgcGFzc2luZyBwbGF0Zm9ybV9kYXRhIHRvIHRoaXMgZHJpdmVyLAotICogdW50aWwgd2UgaGF2ZSBhIHdheSB0byBwYXNzIHRoaXMgdGhyb3VnaCBTRElPIHN1YnN5c3RlbSBvcgotICogc29tZSBvdGhlciB3YXkuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHdsMTI1MV9wbGF0Zm9ybV9kcml2ZXIgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm5hbWUJPSAid2wxMjUxX2RhdGEiLAotCQkub3duZXIJPSBUSElTX01PRFVMRSwKLQl9LAotCS5wcm9iZQk9IHdsMTI1MV9wbGF0Zm9ybV9wcm9iZSwKKwkucG93ZXIgPSB3bDEyNTFfc2Rpb19zZXRfcG93ZXIsCiB9OwogCiBzdGF0aWMgaW50IHdsMTI1MV9zZGlvX3Byb2JlKHN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMsCkBAIC0yMTQsNiArMjI0LDcgQEAKIAlzdHJ1Y3Qgd2wxMjUxICp3bDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKIAlzdHJ1Y3Qgd2wxMjUxX3NkaW8gKndsX3NkaW87CisJY29uc3Qgc3RydWN0IHdsMTJ4eF9wbGF0Zm9ybV9kYXRhICp3bDEyeHhfYm9hcmRfZGF0YTsKIAogCWh3ID0gd2wxMjUxX2FsbG9jX2h3KCk7CiAJaWYgKElTX0VSUihodykpCkBAIC0yMzksOSArMjUwLDkgQEAKIAl3bF9zZGlvLT5mdW5jID0gZnVuYzsKIAl3bC0+aWZfcHJpdiA9IHdsX3NkaW87CiAJd2wtPmlmX29wcyA9ICZ3bDEyNTFfc2Rpb19vcHM7Ci0Jd2wtPnNldF9wb3dlciA9IHdsMTI1MV9zZGlvX3NldF9wb3dlcjsKIAotCWlmICh3bDEyeHhfYm9hcmRfZGF0YSAhPSBOVUxMKSB7CisJd2wxMnh4X2JvYXJkX2RhdGEgPSB3bDEyeHhfZ2V0X3BsYXRmb3JtX2RhdGEoKTsKKwlpZiAoIUlTX0VSUih3bDEyeHhfYm9hcmRfZGF0YSkpIHsKIAkJd2wtPnNldF9wb3dlciA9IHdsMTJ4eF9ib2FyZF9kYXRhLT5zZXRfcG93ZXI7CiAJCXdsLT5pcnEgPSB3bDEyeHhfYm9hcmRfZGF0YS0+aXJxOwogCQl3bC0+dXNlX2VlcHJvbSA9IHdsMTJ4eF9ib2FyZF9kYXRhLT51c2VfZWVwcm9tOwpAQCAtMjczLDYgKzI4NCwxMCBAQAogCQlnb3RvIG91dF9mcmVlX2lycTsKIAogCXNkaW9fc2V0X2RydmRhdGEoZnVuYywgd2wpOworCisJLyogVGVsbCBQTSBjb3JlIHRoYXQgd2UgZG9uJ3QgbmVlZCB0aGUgY2FyZCB0byBiZSBwb3dlcmVkIG5vdyAqLworCXBtX3J1bnRpbWVfcHV0X25vaWRsZSgmZnVuYy0+ZGV2KTsKKwogCXJldHVybiByZXQ7CiAKIG91dF9mcmVlX2lycToKQEAgLTI5NCw2ICszMDksOSBAQAogCXN0cnVjdCB3bDEyNTEgKndsID0gc2Rpb19nZXRfZHJ2ZGF0YShmdW5jKTsKIAlzdHJ1Y3Qgd2wxMjUxX3NkaW8gKndsX3NkaW8gPSB3bC0+aWZfcHJpdjsKIAorCS8qIFVuZG8gZGVjcmVtZW50IGRvbmUgYWJvdmUgaW4gd2wxMjUxX3Byb2JlICovCisJcG1fcnVudGltZV9nZXRfbm9yZXN1bWUoJmZ1bmMtPmRldik7CisKIAlpZiAod2wtPmlycSkKIAkJZnJlZV9pcnEod2wtPmlycSwgd2wpOwogCWtmcmVlKHdsX3NkaW8pOwpAQCAtMzA1LDIzICszMjMsMzcgQEAKIAlzZGlvX3JlbGVhc2VfaG9zdChmdW5jKTsKIH0KIAorc3RhdGljIGludCB3bDEyNTFfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJLyoKKwkgKiBUZWxsIE1NQy9TRElPIGNvcmUgaXQncyBPSyB0byBwb3dlciBkb3duIHRoZSBjYXJkCisJICogKGlmIGl0IGlzbid0IGFscmVhZHkpLCBidXQgbm90IHRvIHJlbW92ZSBpdCBjb21wbGV0ZWx5LgorCSAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdsMTI1MV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgd2wxMjUxX3NkaW9fcG1fb3BzID0geworCS5zdXNwZW5kICAgICAgICA9IHdsMTI1MV9zdXNwZW5kLAorCS5yZXN1bWUgICAgICAgICA9IHdsMTI1MV9yZXN1bWUsCit9OworCiBzdGF0aWMgc3RydWN0IHNkaW9fZHJpdmVyIHdsMTI1MV9zZGlvX2RyaXZlciA9IHsKIAkubmFtZQkJPSAid2wxMjUxX3NkaW8iLAogCS5pZF90YWJsZQk9IHdsMTI1MV9kZXZpY2VzLAogCS5wcm9iZQkJPSB3bDEyNTFfc2Rpb19wcm9iZSwKIAkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHdsMTI1MV9zZGlvX3JlbW92ZSksCisJLmRydi5wbQkJPSAmd2wxMjUxX3NkaW9fcG1fb3BzLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgd2wxMjUxX3NkaW9faW5pdCh2b2lkKQogewogCWludCBlcnI7CiAKLQllcnIgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJndsMTI1MV9wbGF0Zm9ybV9kcml2ZXIpOwotCWlmIChlcnIpIHsKLQkJd2wxMjUxX2Vycm9yKCJmYWlsZWQgdG8gcmVnaXN0ZXIgcGxhdGZvcm0gZHJpdmVyOiAlZCIsIGVycik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCiAJZXJyID0gc2Rpb19yZWdpc3Rlcl9kcml2ZXIoJndsMTI1MV9zZGlvX2RyaXZlcik7CiAJaWYgKGVycikKIAkJd2wxMjUxX2Vycm9yKCJmYWlsZWQgdG8gcmVnaXN0ZXIgc2RpbyBkcml2ZXI6ICVkIiwgZXJyKTsKQEAgLTMzMSw3ICszNjMsNiBAQAogc3RhdGljIHZvaWQgX19leGl0IHdsMTI1MV9zZGlvX2V4aXQodm9pZCkKIHsKIAlzZGlvX3VucmVnaXN0ZXJfZHJpdmVyKCZ3bDEyNTFfc2Rpb19kcml2ZXIpOwotCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ3bDEyNTFfcGxhdGZvcm1fZHJpdmVyKTsKIAl3bDEyNTFfbm90aWNlKCJ1bmxvYWRlZCIpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyNTEvc3BpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyNTEvc3BpLmMKaW5kZXggODhmYThlNi4uYWM4NzJiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMjUxL3NwaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTI1MS9zcGkuYwpAQCAtMjE1LDEyICsyMTUsMjEgQEAKIAlyZXR1cm4gZGlzYWJsZV9pcnEod2wtPmlycSk7CiB9CiAKK3N0YXRpYyBpbnQgd2wxMjUxX3NwaV9zZXRfcG93ZXIoc3RydWN0IHdsMTI1MSAqd2wsIGJvb2wgZW5hYmxlKQoreworCWlmICh3bC0+c2V0X3Bvd2VyKQorCQl3bC0+c2V0X3Bvd2VyKGVuYWJsZSk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCB3bDEyNTFfaWZfb3BlcmF0aW9ucyB3bDEyNTFfc3BpX29wcyA9IHsKIAkucmVhZCA9IHdsMTI1MV9zcGlfcmVhZCwKIAkud3JpdGUgPSB3bDEyNTFfc3BpX3dyaXRlLAogCS5yZXNldCA9IHdsMTI1MV9zcGlfcmVzZXRfd2FrZSwKIAkuZW5hYmxlX2lycSA9IHdsMTI1MV9zcGlfZW5hYmxlX2lycSwKIAkuZGlzYWJsZV9pcnEgPSB3bDEyNTFfc3BpX2Rpc2FibGVfaXJxLAorCS5wb3dlciA9IHdsMTI1MV9zcGlfc2V0X3Bvd2VyLAogfTsKIAogc3RhdGljIGludCBfX2RldmluaXQgd2wxMjUxX3NwaV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMjUxL3dsMTI1MS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMjUxL3dsMTI1MS5oCmluZGV4IGUxMTNkNGMuLjEzZmJlZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTI1MS93bDEyNTEuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyNTEvd2wxMjUxLmgKQEAgLTI1Niw2ICsyNTYsNyBAQAogCXZvaWQgKCp3cml0ZSkoc3RydWN0IHdsMTI1MSAqd2wsIGludCBhZGRyLCB2b2lkICpidWYsIHNpemVfdCBsZW4pOwogCXZvaWQgKCpyZWFkX2VscCkoc3RydWN0IHdsMTI1MSAqd2wsIGludCBhZGRyLCB1MzIgKnZhbCk7CiAJdm9pZCAoKndyaXRlX2VscCkoc3RydWN0IHdsMTI1MSAqd2wsIGludCBhZGRyLCB1MzIgdmFsKTsKKwlpbnQgICgqcG93ZXIpKHN0cnVjdCB3bDEyNTEgKndsLCBib29sIGVuYWJsZSk7CiAJdm9pZCAoKnJlc2V0KShzdHJ1Y3Qgd2wxMjUxICp3bCk7CiAJdm9pZCAoKmVuYWJsZV9pcnEpKHN0cnVjdCB3bDEyNTEgKndsKTsKIAl2b2lkICgqZGlzYWJsZV9pcnEpKHN0cnVjdCB3bDEyNTEgKndsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9LY29uZmlnIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L0tjb25maWcKaW5kZXggYjQ0NzU1OS4uMGU2NWJjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L0tjb25maWcKQEAgLTEsNDYgKzEsNjggQEAKLW1lbnVjb25maWcgV0wxMlhYCittZW51Y29uZmlnIFdMMTJYWF9NRU5VCiAJdHJpc3RhdGUgIlRJIHdsMTJ4eCBkcml2ZXIgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIE1BQzgwMjExICYmIEVYUEVSSU1FTlRBTAogCS0tLWhlbHAtLS0KLQkgIFRoaXMgd2lsbCBlbmFibGUgVEkgd2wxMnh4IGRyaXZlciBzdXBwb3J0LiBUaGUgZHJpdmVycyBtYWtlCi0JICB1c2Ugb2YgdGhlIG1hYzgwMjExIHN0YWNrLgorCSAgVGhpcyB3aWxsIGVuYWJsZSBUSSB3bDEyeHggZHJpdmVyIHN1cHBvcnQgZm9yIHRoZSBmb2xsb3dpbmcgY2hpcHM6CisJICB3bDEyNzEgYW5kIHdsMTI3My4KKwkgIFRoZSBkcml2ZXJzIG1ha2UgdXNlIG9mIHRoZSBtYWM4MDIxMSBzdGFjay4KIAotY29uZmlnIFdMMTI3MQotCXRyaXN0YXRlICJUSSB3bDEyNzEgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFdMMTJYWCAmJiBHRU5FUklDX0hBUkRJUlFTCitjb25maWcgV0wxMlhYCisJdHJpc3RhdGUgIlRJIHdsMTJ4eCBzdXBwb3J0IgorCWRlcGVuZHMgb24gV0wxMlhYX01FTlUgJiYgR0VORVJJQ19IQVJESVJRUwogCWRlcGVuZHMgb24gSU5FVAogCXNlbGVjdCBGV19MT0FERVIKIAlzZWxlY3QgQ1JDNwogCS0tLWhlbHAtLS0KLQkgIFRoaXMgbW9kdWxlIGFkZHMgc3VwcG9ydCBmb3Igd2lyZWxlc3MgYWRhcHRlcnMgYmFzZWQgb24gdGhlCi0JICBUSSB3bDEyNzEgY2hpcHNldC4KKwkgIFRoaXMgbW9kdWxlIGFkZHMgc3VwcG9ydCBmb3Igd2lyZWxlc3MgYWRhcHRlcnMgYmFzZWQgb24gVEkgd2wxMjcxIGFuZAorCSAgVEkgd2wxMjczIGNoaXBzZXRzLiBUaGlzIG1vZHVsZSBkb2VzICpub3QqIGluY2x1ZGUgc3VwcG9ydCBmb3Igd2wxMjUxLgorCSAgRm9yIHdsMTI1MSBzdXBwb3J0LCB1c2UgdGhlIHNlcGFyYXRlIGhvbW9ueW1vdXMgZHJpdmVyIGluc3RlYWQuCiAKLQkgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgYSBtb2R1bGUsIGl0J2xsIGJlIGNhbGxlZCB3bDEyNzEuIFNheSBOIGlmCisJICBJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIGEgbW9kdWxlLCBpdCB3aWxsIGJlIGNhbGxlZCB3bDEyeHguIFNheSBOIGlmCiAJICB1bnN1cmUuCiAKLWNvbmZpZyBXTDEyNzFfU1BJCi0JdHJpc3RhdGUgIlRJIHdsMTI3MSBTUEkgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFdMMTI3MSAmJiBTUElfTUFTVEVSCitjb25maWcgV0wxMlhYX0hUCisgICAgICAgIGJvb2wgIlRJIHdsMTJ4eCA4MDIuMTEgSFQgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKKyAgICAgICAgZGVwZW5kcyBvbiBXTDEyWFggJiYgRVhQRVJJTUVOVEFMCisgICAgICAgIGRlZmF1bHQgbgorICAgICAgICAtLS1oZWxwLS0tCisgICAgICAgICAgVGhpcyB3aWxsIGVuYWJsZSA4MDIuMTEgSFQgc3VwcG9ydCBpbiB0aGUgd2wxMnh4IG1vZHVsZS4KKworCSAgVGhhdCBjb25maWd1cmF0aW9uIGlzIHRlbXBvcmFyeSBkdWUgdG8gdGhlIGNvZGUgaW5jb21wbGV0ZSBhbmQKKwkgIHN0aWxsIGluIHRlc3RpbmcgcHJvY2Vzcy4KKworY29uZmlnIFdMMTJYWF9TUEkKKwl0cmlzdGF0ZSAiVEkgd2wxMnh4IFNQSSBzdXBwb3J0IgorCWRlcGVuZHMgb24gV0wxMlhYICYmIFNQSV9NQVNURVIKIAktLS1oZWxwLS0tCiAJICBUaGlzIG1vZHVsZSBhZGRzIHN1cHBvcnQgZm9yIHRoZSBTUEkgaW50ZXJmYWNlIG9mIGFkYXB0ZXJzIHVzaW5nCi0JICBUSSB3bDEyNzEgY2hpcHNldC4gIFNlbGVjdCB0aGlzIGlmIHlvdXIgcGxhdGZvcm0gaXMgdXNpbmcKKwkgIFRJIHdsMTJ4eCBjaGlwc2V0cy4gIFNlbGVjdCB0aGlzIGlmIHlvdXIgcGxhdGZvcm0gaXMgdXNpbmcKIAkgIHRoZSBTUEkgYnVzLgogCi0JICBJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIGEgbW9kdWxlLCBpdCdsbCBiZSBjYWxsZWQgd2wxMjUxX3NwaS4KKwkgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgYSBtb2R1bGUsIGl0J2xsIGJlIGNhbGxlZCB3bDEyeHhfc3BpLgogCSAgU2F5IE4gaWYgdW5zdXJlLgogCi1jb25maWcgV0wxMjcxX1NESU8KLQl0cmlzdGF0ZSAiVEkgd2wxMjcxIFNESU8gc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFdMMTI3MSAmJiBNTUMKK2NvbmZpZyBXTDEyWFhfU0RJTworCXRyaXN0YXRlICJUSSB3bDEyeHggU0RJTyBzdXBwb3J0IgorCWRlcGVuZHMgb24gV0wxMlhYICYmIE1NQwogCS0tLWhlbHAtLS0KIAkgIFRoaXMgbW9kdWxlIGFkZHMgc3VwcG9ydCBmb3IgdGhlIFNESU8gaW50ZXJmYWNlIG9mIGFkYXB0ZXJzIHVzaW5nCi0JICBUSSB3bDEyNzEgY2hpcHNldC4gIFNlbGVjdCB0aGlzIGlmIHlvdXIgcGxhdGZvcm0gaXMgdXNpbmcKKwkgIFRJIHdsMTJ4eCBjaGlwc2V0cy4gIFNlbGVjdCB0aGlzIGlmIHlvdXIgcGxhdGZvcm0gaXMgdXNpbmcKIAkgIHRoZSBTRElPIGJ1cy4KIAotCSAgSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgaXQnbGwgYmUgY2FsbGVkCi0JICB3bDEyNzFfc2Rpby4gU2F5IE4gaWYgdW5zdXJlLgorCSAgSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgaXQnbGwgYmUgY2FsbGVkIHdsMTJ4eF9zZGlvLgorCSAgU2F5IE4gaWYgdW5zdXJlLgorCitjb25maWcgV0wxMlhYX1NESU9fVEVTVAorCXRyaXN0YXRlICJUSSB3bDEyeHggU0RJTyB0ZXN0aW5nIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBXTDEyWFggJiYgTU1DCisJZGVmYXVsdCBuCisJLS0taGVscC0tLQorCSAgVGhpcyBtb2R1bGUgYWRkcyBzdXBwb3J0IGZvciB0aGUgU0RJTyBidXMgdGVzdGluZyB3aXRoIHRoZQorCSAgVEkgd2wxMnh4IGNoaXBzZXRzLiAgWW91IHByb2JhYmx5IGRvbid0IHdhbnQgdGhpcyB1bmxlc3MgeW91IGFyZQorCSAgdGVzdGluZyBhIG5ldyBoYXJkd2FyZSBwbGF0Zm9ybS4gIFNlbGVjdCB0aGlzIGlmIHlvdSB3YW50IHRvIHRlc3QgdGhlCisJICBTRElPIGJ1cyB3aGljaCBpcyBjb25uZWN0ZWQgdG8gdGhlIHdsMTJ4eCBjaGlwLgogCiBjb25maWcgV0wxMlhYX1BMQVRGT1JNX0RBVEEKIAlib29sCi0JZGVwZW5kcyBvbiBXTDEyNzFfU0RJTyAhPSBuCisJZGVwZW5kcyBvbiBXTDEyWFhfU0RJTyAhPSBuIHx8IFdMMTI1MV9TRElPICE9IG4KIAlkZWZhdWx0IHkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9NYWtlZmlsZQppbmRleCAzYTgwNzQ0Li41MjFjMDQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L01ha2VmaWxlCkBAIC0xLDEyICsxLDE2IEBACi13bDEyNzEtb2JqcwkJPSB3bDEyNzFfbWFpbi5vICB3bDEyNzFfY21kLm8gd2wxMjcxX2lvLm8gXAotCQkJICB3bDEyNzFfZXZlbnQubyB3bDEyNzFfdHgubyAgd2wxMjcxX3J4Lm8gICBcCi0JCQkgIHdsMTI3MV9wcy5vICAgIHdsMTI3MV9hY3gubyB3bDEyNzFfYm9vdC5vIFwKLQkJCSAgd2wxMjcxX2luaXQubyAgd2wxMjcxX2RlYnVnZnMubyB3bDEyNzFfc2Nhbi5vCit3bDEyeHgtb2JqcwkJPSBtYWluLm8gY21kLm8gaW8ubyBldmVudC5vIHR4Lm8gcngubyBwcy5vIGFjeC5vIFwKKwkJCSAgYm9vdC5vIGluaXQubyBkZWJ1Z2ZzLm8gc2Nhbi5vCiAKLXdsMTI3MS0kKENPTkZJR19OTDgwMjExX1RFU1RNT0RFKQkrPSB3bDEyNzFfdGVzdG1vZGUubwotb2JqLSQoQ09ORklHX1dMMTI3MSkJKz0gd2wxMjcxLm8KLW9iai0kKENPTkZJR19XTDEyNzFfU1BJKQkrPSB3bDEyNzFfc3BpLm8KLW9iai0kKENPTkZJR19XTDEyNzFfU0RJTykJKz0gd2wxMjcxX3NkaW8ubword2wxMnh4X3NwaS1vYmpzCT0gc3BpLm8KK3dsMTJ4eF9zZGlvLW9ianMJPSBzZGlvLm8KK3dsMTJ4eF9zZGlvX3Rlc3Qtb2JqcyA9IHNkaW9fdGVzdC5vCisKK3dsMTJ4eC0kKENPTkZJR19OTDgwMjExX1RFU1RNT0RFKQkrPSB0ZXN0bW9kZS5vCitvYmotJChDT05GSUdfV0wxMlhYKQkJCSs9IHdsMTJ4eC5vCitvYmotJChDT05GSUdfV0wxMlhYX1NQSSkJCSs9IHdsMTJ4eF9zcGkubworb2JqLSQoQ09ORklHX1dMMTJYWF9TRElPKQkJKz0gd2wxMnh4X3NkaW8ubworCitvYmotJChDT05GSUdfV0wxMlhYX1NESU9fVEVTVCkJKz0gd2wxMnh4X3NkaW9fdGVzdC5vCiAKICMgc21hbGwgYnVpbHRpbiBkcml2ZXIgYml0CiBvYmotJChDT05GSUdfV0wxMlhYX1BMQVRGT1JNX0RBVEEpCSs9IHdsMTJ4eF9wbGF0Zm9ybV9kYXRhLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9hY3guYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9hY3guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzQwNjhkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2FjeC5jCkBAIC0wLDAgKzEsMTMzNiBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdsMTI3MQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogQ29udGFjdDogTHVjaWFubyBDb2VsaG8gPGx1Y2lhbm8uY29lbGhvQG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBCisgKgorICovCisKKyNpbmNsdWRlICJhY3guaCIKKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NyYzcuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorCisjaW5jbHVkZSAid2wxMnh4LmgiCisjaW5jbHVkZSAid2wxMnh4XzgwMjExLmgiCisjaW5jbHVkZSAicmVnLmgiCisjaW5jbHVkZSAicHMuaCIKKworaW50IHdsMTI3MV9hY3hfd2FrZV91cF9jb25kaXRpb25zKHN0cnVjdCB3bDEyNzEgKndsKQoreworCXN0cnVjdCBhY3hfd2FrZV91cF9jb25kaXRpb24gKndha2VfdXA7CisJaW50IHJldDsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggd2FrZSB1cCBjb25kaXRpb25zIik7CisKKwl3YWtlX3VwID0ga3phbGxvYyhzaXplb2YoKndha2VfdXApLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXdha2VfdXApIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJd2FrZV91cC0+d2FrZV91cF9ldmVudCA9IHdsLT5jb25mLmNvbm4ud2FrZV91cF9ldmVudDsKKwl3YWtlX3VwLT5saXN0ZW5faW50ZXJ2YWwgPSB3bC0+Y29uZi5jb25uLmxpc3Rlbl9pbnRlcnZhbDsKKworCXJldCA9IHdsMTI3MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfV0FLRV9VUF9DT05ESVRJT05TLAorCQkJCSAgIHdha2VfdXAsIHNpemVvZigqd2FrZV91cCkpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV93YXJuaW5nKCJjb3VsZCBub3Qgc2V0IHdha2UgdXAgY29uZGl0aW9uczogJWQiLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZSh3YWtlX3VwKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxMjcxX2FjeF9zbGVlcF9hdXRoKHN0cnVjdCB3bDEyNzEgKndsLCB1OCBzbGVlcF9hdXRoKQoreworCXN0cnVjdCBhY3hfc2xlZXBfYXV0aCAqYXV0aDsKKwlpbnQgcmV0OworCisJd2wxMjcxX2RlYnVnKERFQlVHX0FDWCwgImFjeCBzbGVlcCBhdXRoIik7CisKKwlhdXRoID0ga3phbGxvYyhzaXplb2YoKmF1dGgpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWF1dGgpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJYXV0aC0+c2xlZXBfYXV0aCA9IHNsZWVwX2F1dGg7CisKKwlyZXQgPSB3bDEyNzFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX1NMRUVQX0FVVEgsIGF1dGgsIHNpemVvZigqYXV0aCkpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCitvdXQ6CisJa2ZyZWUoYXV0aCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI3MV9hY3hfdHhfcG93ZXIoc3RydWN0IHdsMTI3MSAqd2wsIGludCBwb3dlcikKK3sKKwlzdHJ1Y3QgYWN4X2N1cnJlbnRfdHhfcG93ZXIgKmFjeDsKKwlpbnQgcmV0OworCisJd2wxMjcxX2RlYnVnKERFQlVHX0FDWCwgImFjeCBkb3QxMV9jdXJfdHhfcHdyIik7CisKKwlpZiAocG93ZXIgPCAwIHx8IHBvd2VyID4gMjUpCisJCXJldHVybiAtRUlOVkFMOworCisJYWN4ID0ga3phbGxvYyhzaXplb2YoKmFjeCksIEdGUF9LRVJORUwpOworCWlmICghYWN4KSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWFjeC0+Y3VycmVudF90eF9wb3dlciA9IHBvd2VyICogMTA7CisKKwlyZXQgPSB3bDEyNzFfY21kX2NvbmZpZ3VyZSh3bCwgRE9UMTFfQ1VSX1RYX1BXUiwgYWN4LCBzaXplb2YoKmFjeCkpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV93YXJuaW5nKCJjb25maWd1cmUgb2YgdHggcG93ZXIgZmFpbGVkOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCWtmcmVlKGFjeCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI3MV9hY3hfZmVhdHVyZV9jZmcoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJc3RydWN0IGFjeF9mZWF0dXJlX2NvbmZpZyAqZmVhdHVyZTsKKwlpbnQgcmV0OworCisJd2wxMjcxX2RlYnVnKERFQlVHX0FDWCwgImFjeCBmZWF0dXJlIGNmZyIpOworCisJZmVhdHVyZSA9IGt6YWxsb2Moc2l6ZW9mKCpmZWF0dXJlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFmZWF0dXJlKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCS8qIERGX0VOQ1JZUFRJT05fRElTQUJMRSBhbmQgREZfU05JRkZfTU9ERV9FTkFCTEUgYXJlIGRpc2FibGVkICovCisJZmVhdHVyZS0+ZGF0YV9mbG93X29wdGlvbnMgPSAwOworCWZlYXR1cmUtPm9wdGlvbnMgPSAwOworCisJcmV0ID0gd2wxMjcxX2NtZF9jb25maWd1cmUod2wsIEFDWF9GRUFUVVJFX0NGRywKKwkJCQkgICBmZWF0dXJlLCBzaXplb2YoKmZlYXR1cmUpKTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNzFfZXJyb3IoIkNvdWxkbnQgc2V0IEhXIGVuY3J5cHRpb24iKTsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJa2ZyZWUoZmVhdHVyZSk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI3MV9hY3hfbWVtX21hcChzdHJ1Y3Qgd2wxMjcxICp3bCwgc3RydWN0IGFjeF9oZWFkZXIgKm1lbV9tYXAsCisJCSAgICAgICBzaXplX3QgbGVuKQoreworCWludCByZXQ7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfQUNYLCAiYWN4IG1lbSBtYXAiKTsKKworCXJldCA9IHdsMTI3MV9jbWRfaW50ZXJyb2dhdGUod2wsIEFDWF9NRU1fTUFQLCBtZW1fbWFwLCBsZW4pOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CisKK2ludCB3bDEyNzFfYWN4X3J4X21zZHVfbGlmZV90aW1lKHN0cnVjdCB3bDEyNzEgKndsKQoreworCXN0cnVjdCBhY3hfcnhfbXNkdV9saWZldGltZSAqYWN4OworCWludCByZXQ7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfQUNYLCAiYWN4IHJ4IG1zZHUgbGlmZSB0aW1lIik7CisKKwlhY3ggPSBremFsbG9jKHNpemVvZigqYWN4KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhY3gpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJYWN4LT5saWZldGltZSA9IGNwdV90b19sZTMyKHdsLT5jb25mLnJ4LnJ4X21zZHVfbGlmZV90aW1lKTsKKwlyZXQgPSB3bDEyNzFfY21kX2NvbmZpZ3VyZSh3bCwgRE9UMTFfUlhfTVNEVV9MSUZFX1RJTUUsCisJCQkJICAgYWN4LCBzaXplb2YoKmFjeCkpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV93YXJuaW5nKCJmYWlsZWQgdG8gc2V0IHJ4IG1zZHUgbGlmZSB0aW1lOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCWtmcmVlKGFjeCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI3MV9hY3hfcnhfY29uZmlnKHN0cnVjdCB3bDEyNzEgKndsLCB1MzIgY29uZmlnLCB1MzIgZmlsdGVyKQoreworCXN0cnVjdCBhY3hfcnhfY29uZmlnICpyeF9jb25maWc7CisJaW50IHJldDsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggcnggY29uZmlnIik7CisKKwlyeF9jb25maWcgPSBremFsbG9jKHNpemVvZigqcnhfY29uZmlnKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyeF9jb25maWcpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJcnhfY29uZmlnLT5jb25maWdfb3B0aW9ucyA9IGNwdV90b19sZTMyKGNvbmZpZyk7CisJcnhfY29uZmlnLT5maWx0ZXJfb3B0aW9ucyA9IGNwdV90b19sZTMyKGZpbHRlcik7CisKKwlyZXQgPSB3bDEyNzFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX1JYX0NGRywKKwkJCQkgICByeF9jb25maWcsIHNpemVvZigqcnhfY29uZmlnKSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX3dhcm5pbmcoImZhaWxlZCB0byBzZXQgcnggY29uZmlnOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCWtmcmVlKHJ4X2NvbmZpZyk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI3MV9hY3hfcGRfdGhyZXNob2xkKHN0cnVjdCB3bDEyNzEgKndsKQoreworCXN0cnVjdCBhY3hfcGFja2V0X2RldGVjdGlvbiAqcGQ7CisJaW50IHJldDsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggZGF0YSBwZCB0aHJlc2hvbGQiKTsKKworCXBkID0ga3phbGxvYyhzaXplb2YoKnBkKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwZCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlwZC0+dGhyZXNob2xkID0gY3B1X3RvX2xlMzIod2wtPmNvbmYucngucGFja2V0X2RldGVjdGlvbl90aHJlc2hvbGQpOworCisJcmV0ID0gd2wxMjcxX2NtZF9jb25maWd1cmUod2wsIEFDWF9QRF9USFJFU0hPTEQsIHBkLCBzaXplb2YoKnBkKSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX3dhcm5pbmcoImZhaWxlZCB0byBzZXQgcGQgdGhyZXNob2xkOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCWtmcmVlKHBkKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxMjcxX2FjeF9zbG90KHN0cnVjdCB3bDEyNzEgKndsLCBlbnVtIGFjeF9zbG90X3R5cGUgc2xvdF90aW1lKQoreworCXN0cnVjdCBhY3hfc2xvdCAqc2xvdDsKKwlpbnQgcmV0OworCisJd2wxMjcxX2RlYnVnKERFQlVHX0FDWCwgImFjeCBzbG90Iik7CisKKwlzbG90ID0ga3phbGxvYyhzaXplb2YoKnNsb3QpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNsb3QpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJc2xvdC0+d29uZV9pbmRleCA9IFNUQVRJT05fV09ORV9JTkRFWDsKKwlzbG90LT5zbG90X3RpbWUgPSBzbG90X3RpbWU7CisKKwlyZXQgPSB3bDEyNzFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX1NMT1QsIHNsb3QsIHNpemVvZigqc2xvdCkpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV93YXJuaW5nKCJmYWlsZWQgdG8gc2V0IHNsb3QgdGltZTogJWQiLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZShzbG90KTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxMjcxX2FjeF9ncm91cF9hZGRyZXNzX3RibChzdHJ1Y3Qgd2wxMjcxICp3bCwgYm9vbCBlbmFibGUsCisJCQkJIHZvaWQgKm1jX2xpc3QsIHUzMiBtY19saXN0X2xlbikKK3sKKwlzdHJ1Y3QgYWN4X2RvdDExX2dycF9hZGRyX3RibCAqYWN4OworCWludCByZXQ7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfQUNYLCAiYWN4IGdyb3VwIGFkZHJlc3MgdGJsIik7CisKKwlhY3ggPSBremFsbG9jKHNpemVvZigqYWN4KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhY3gpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogTUFDIGZpbHRlcmluZyAqLworCWFjeC0+ZW5hYmxlZCA9IGVuYWJsZTsKKwlhY3gtPm51bV9ncm91cHMgPSBtY19saXN0X2xlbjsKKwltZW1jcHkoYWN4LT5tYWNfdGFibGUsIG1jX2xpc3QsIG1jX2xpc3RfbGVuICogRVRIX0FMRU4pOworCisJcmV0ID0gd2wxMjcxX2NtZF9jb25maWd1cmUod2wsIERPVDExX0dST1VQX0FERFJFU1NfVEJMLAorCQkJCSAgIGFjeCwgc2l6ZW9mKCphY3gpKTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNzFfd2FybmluZygiZmFpbGVkIHRvIHNldCBncm91cCBhZGRyIHRhYmxlOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCWtmcmVlKGFjeCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI3MV9hY3hfc2VydmljZV9wZXJpb2RfdGltZW91dChzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlzdHJ1Y3QgYWN4X3J4X3RpbWVvdXQgKnJ4X3RpbWVvdXQ7CisJaW50IHJldDsKKworCXJ4X3RpbWVvdXQgPSBremFsbG9jKHNpemVvZigqcnhfdGltZW91dCksIEdGUF9LRVJORUwpOworCWlmICghcnhfdGltZW91dCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwl3bDEyNzFfZGVidWcoREVCVUdfQUNYLCAiYWN4IHNlcnZpY2UgcGVyaW9kIHRpbWVvdXQiKTsKKworCXJ4X3RpbWVvdXQtPnBzX3BvbGxfdGltZW91dCA9IGNwdV90b19sZTE2KHdsLT5jb25mLnJ4LnBzX3BvbGxfdGltZW91dCk7CisJcnhfdGltZW91dC0+dXBzZF90aW1lb3V0ID0gY3B1X3RvX2xlMTYod2wtPmNvbmYucngudXBzZF90aW1lb3V0KTsKKworCXJldCA9IHdsMTI3MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfU0VSVklDRV9QRVJJT0RfVElNRU9VVCwKKwkJCQkgICByeF90aW1lb3V0LCBzaXplb2YoKnJ4X3RpbWVvdXQpKTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNzFfd2FybmluZygiZmFpbGVkIHRvIHNldCBzZXJ2aWNlIHBlcmlvZCB0aW1lb3V0OiAlZCIsCisJCQkgICAgICAgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJa2ZyZWUocnhfdGltZW91dCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI3MV9hY3hfcnRzX3RocmVzaG9sZChzdHJ1Y3Qgd2wxMjcxICp3bCwgdTE2IHJ0c190aHJlc2hvbGQpCit7CisJc3RydWN0IGFjeF9ydHNfdGhyZXNob2xkICpydHM7CisJaW50IHJldDsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggcnRzIHRocmVzaG9sZCIpOworCisJcnRzID0ga3phbGxvYyhzaXplb2YoKnJ0cyksIEdGUF9LRVJORUwpOworCWlmICghcnRzKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCXJ0cy0+dGhyZXNob2xkID0gY3B1X3RvX2xlMTYocnRzX3RocmVzaG9sZCk7CisKKwlyZXQgPSB3bDEyNzFfY21kX2NvbmZpZ3VyZSh3bCwgRE9UMTFfUlRTX1RIUkVTSE9MRCwgcnRzLCBzaXplb2YoKnJ0cykpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV93YXJuaW5nKCJmYWlsZWQgdG8gc2V0IHJ0cyB0aHJlc2hvbGQ6ICVkIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJa2ZyZWUocnRzKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxMjcxX2FjeF9kY29faXRyaW1fcGFyYW1zKHN0cnVjdCB3bDEyNzEgKndsKQoreworCXN0cnVjdCBhY3hfZGNvX2l0cmltX3BhcmFtcyAqZGNvOworCXN0cnVjdCBjb25mX2l0cmltX3NldHRpbmdzICpjID0gJndsLT5jb25mLml0cmltOworCWludCByZXQ7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfQUNYLCAiYWN4IGRjbyBpdHJpbSBwYXJhbWV0ZXJzIik7CisKKwlkY28gPSBremFsbG9jKHNpemVvZigqZGNvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkY28pIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJZGNvLT5lbmFibGUgPSBjLT5lbmFibGU7CisJZGNvLT50aW1lb3V0ID0gY3B1X3RvX2xlMzIoYy0+dGltZW91dCk7CisKKwlyZXQgPSB3bDEyNzFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX1NFVF9EQ09fSVRSSU1fUEFSQU1TLAorCQkJCSAgIGRjbywgc2l6ZW9mKCpkY28pKTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNzFfd2FybmluZygiZmFpbGVkIHRvIHNldCBkY28gaXRyaW0gcGFyYW1ldGVyczogJWQiLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZShkY28pOworCXJldHVybiByZXQ7Cit9CisKK2ludCB3bDEyNzFfYWN4X2JlYWNvbl9maWx0ZXJfb3B0KHN0cnVjdCB3bDEyNzEgKndsLCBib29sIGVuYWJsZV9maWx0ZXIpCit7CisJc3RydWN0IGFjeF9iZWFjb25fZmlsdGVyX29wdGlvbiAqYmVhY29uX2ZpbHRlciA9IE5VTEw7CisJaW50IHJldCA9IDA7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfQUNYLCAiYWN4IGJlYWNvbiBmaWx0ZXIgb3B0Iik7CisKKwlpZiAoZW5hYmxlX2ZpbHRlciAmJgorCSAgICB3bC0+Y29uZi5jb25uLmJjbl9maWx0X21vZGUgPT0gQ09ORl9CQ05fRklMVF9NT0RFX0RJU0FCTEVEKQorCQlnb3RvIG91dDsKKworCWJlYWNvbl9maWx0ZXIgPSBremFsbG9jKHNpemVvZigqYmVhY29uX2ZpbHRlciksIEdGUF9LRVJORUwpOworCWlmICghYmVhY29uX2ZpbHRlcikgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwliZWFjb25fZmlsdGVyLT5lbmFibGUgPSBlbmFibGVfZmlsdGVyOworCisJLyoKKwkgKiBXaGVuIHNldCB0byB6ZXJvLCBhbmQgdGhlIGZpbHRlciBpcyBlbmFibGVkLCBiZWFjb25zCisJICogd2l0aG91dCB0aGUgdW5pY2FzdCBUSU0gYml0IHNldCBhcmUgZHJvcHBlZC4KKwkgKi8KKwliZWFjb25fZmlsdGVyLT5tYXhfbnVtX2JlYWNvbnMgPSAwOworCisJcmV0ID0gd2wxMjcxX2NtZF9jb25maWd1cmUod2wsIEFDWF9CRUFDT05fRklMVEVSX09QVCwKKwkJCQkgICBiZWFjb25fZmlsdGVyLCBzaXplb2YoKmJlYWNvbl9maWx0ZXIpKTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNzFfd2FybmluZygiZmFpbGVkIHRvIHNldCBiZWFjb24gZmlsdGVyIG9wdDogJWQiLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZShiZWFjb25fZmlsdGVyKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxMjcxX2FjeF9iZWFjb25fZmlsdGVyX3RhYmxlKHN0cnVjdCB3bDEyNzEgKndsKQoreworCXN0cnVjdCBhY3hfYmVhY29uX2ZpbHRlcl9pZV90YWJsZSAqaWVfdGFibGU7CisJaW50IGksIGlkeCA9IDA7CisJaW50IHJldDsKKwlib29sIHZlbmRvcl9zcGVjID0gZmFsc2U7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfQUNYLCAiYWN4IGJlYWNvbiBmaWx0ZXIgdGFibGUiKTsKKworCWllX3RhYmxlID0ga3phbGxvYyhzaXplb2YoKmllX3RhYmxlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpZV90YWJsZSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBjb25maWd1cmUgZGVmYXVsdCBiZWFjb24gcGFzcy10aHJvdWdoIHJ1bGVzICovCisJaWVfdGFibGUtPm51bV9pZSA9IDA7CisJZm9yIChpID0gMDsgaSA8IHdsLT5jb25mLmNvbm4uYmNuX2ZpbHRfaWVfY291bnQ7IGkrKykgeworCQlzdHJ1Y3QgY29uZl9iY25fZmlsdF9ydWxlICpyID0gJih3bC0+Y29uZi5jb25uLmJjbl9maWx0X2llW2ldKTsKKwkJaWVfdGFibGUtPnRhYmxlW2lkeCsrXSA9IHItPmllOworCQlpZV90YWJsZS0+dGFibGVbaWR4KytdID0gci0+cnVsZTsKKworCQlpZiAoci0+aWUgPT0gV0xBTl9FSURfVkVORE9SX1NQRUNJRklDKSB7CisJCQkvKiBvbmx5IG9uZSB2ZW5kb3Igc3BlY2lmaWMgaWUgYWxsb3dlZCAqLworCQkJaWYgKHZlbmRvcl9zcGVjKQorCQkJCWNvbnRpbnVlOworCisJCQkvKiBmb3IgdmVuZG9yIHNwZWNpZmljIHJ1bGVzIGNvbmZpZ3VyZSB0aGUKKwkJCSAgIGFkZGl0aW9uYWwgZmllbGRzICovCisJCQltZW1jcHkoJihpZV90YWJsZS0+dGFibGVbaWR4XSksIHItPm91aSwKKwkJCSAgICAgICBDT05GX0JDTl9JRV9PVUlfTEVOKTsKKwkJCWlkeCArPSBDT05GX0JDTl9JRV9PVUlfTEVOOworCQkJaWVfdGFibGUtPnRhYmxlW2lkeCsrXSA9IHItPnR5cGU7CisJCQltZW1jcHkoJihpZV90YWJsZS0+dGFibGVbaWR4XSksIHItPnZlcnNpb24sCisJCQkgICAgICAgQ09ORl9CQ05fSUVfVkVSX0xFTik7CisJCQlpZHggKz0gQ09ORl9CQ05fSUVfVkVSX0xFTjsKKwkJCXZlbmRvcl9zcGVjID0gdHJ1ZTsKKwkJfQorCisJCWllX3RhYmxlLT5udW1faWUrKzsKKwl9CisKKwlyZXQgPSB3bDEyNzFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX0JFQUNPTl9GSUxURVJfVEFCTEUsCisJCQkJICAgaWVfdGFibGUsIHNpemVvZigqaWVfdGFibGUpKTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNzFfd2FybmluZygiZmFpbGVkIHRvIHNldCBiZWFjb24gZmlsdGVyIHRhYmxlOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCWtmcmVlKGllX3RhYmxlKTsKKwlyZXR1cm4gcmV0OworfQorCisjZGVmaW5lIEFDWF9DT05OX01PTklUX0RJU0FCTEVfVkFMVUUgIDB4ZmZmZmZmZmYKKworaW50IHdsMTI3MV9hY3hfY29ubl9tb25pdF9wYXJhbXMoc3RydWN0IHdsMTI3MSAqd2wsIGJvb2wgZW5hYmxlKQoreworCXN0cnVjdCBhY3hfY29ubl9tb25pdF9wYXJhbXMgKmFjeDsKKwl1MzIgdGhyZXNob2xkID0gQUNYX0NPTk5fTU9OSVRfRElTQUJMRV9WQUxVRTsKKwl1MzIgdGltZW91dCA9IEFDWF9DT05OX01PTklUX0RJU0FCTEVfVkFMVUU7CisJaW50IHJldDsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggY29ubmVjdGlvbiBtb25pdG9yIHBhcmFtZXRlcnM6ICVzIiwKKwkJICAgICBlbmFibGUgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKTsKKworCWFjeCA9IGt6YWxsb2Moc2l6ZW9mKCphY3gpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWFjeCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoZW5hYmxlKSB7CisJCXRocmVzaG9sZCA9IHdsLT5jb25mLmNvbm4uc3luY2hfZmFpbF90aG9sZDsKKwkJdGltZW91dCA9IHdsLT5jb25mLmNvbm4uYnNzX2xvc2VfdGltZW91dDsKKwl9CisKKwlhY3gtPnN5bmNoX2ZhaWxfdGhvbGQgPSBjcHVfdG9fbGUzMih0aHJlc2hvbGQpOworCWFjeC0+YnNzX2xvc2VfdGltZW91dCA9IGNwdV90b19sZTMyKHRpbWVvdXQpOworCisJcmV0ID0gd2wxMjcxX2NtZF9jb25maWd1cmUod2wsIEFDWF9DT05OX01PTklUX1BBUkFNUywKKwkJCQkgICBhY3gsIHNpemVvZigqYWN4KSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX3dhcm5pbmcoImZhaWxlZCB0byBzZXQgY29ubmVjdGlvbiBtb25pdG9yICIKKwkJCSAgICAgICAicGFyYW1ldGVyczogJWQiLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZShhY3gpOworCXJldHVybiByZXQ7Cit9CisKKworaW50IHdsMTI3MV9hY3hfc2dfZW5hYmxlKHN0cnVjdCB3bDEyNzEgKndsLCBib29sIGVuYWJsZSkKK3sKKwlzdHJ1Y3QgYWN4X2J0X3dsYW5fY29leCAqcHRhOworCWludCByZXQ7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfQUNYLCAiYWN4IHNnIGVuYWJsZSIpOworCisJcHRhID0ga3phbGxvYyhzaXplb2YoKnB0YSksIEdGUF9LRVJORUwpOworCWlmICghcHRhKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWlmIChlbmFibGUpCisJCXB0YS0+ZW5hYmxlID0gd2wtPmNvbmYuc2cuc3RhdGU7CisJZWxzZQorCQlwdGEtPmVuYWJsZSA9IENPTkZfU0dfRElTQUJMRTsKKworCXJldCA9IHdsMTI3MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfU0dfRU5BQkxFLCBwdGEsIHNpemVvZigqcHRhKSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX3dhcm5pbmcoImZhaWxlZCB0byBzZXQgc29mdGdlbWluaSBlbmFibGU6ICVkIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJa2ZyZWUocHRhKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxMjcxX2FjeF9zZ19jZmcoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJc3RydWN0IGFjeF9idF93bGFuX2NvZXhfcGFyYW0gKnBhcmFtOworCXN0cnVjdCBjb25mX3NnX3NldHRpbmdzICpjID0gJndsLT5jb25mLnNnOworCWludCBpLCByZXQ7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfQUNYLCAiYWN4IHNnIGNmZyIpOworCisJcGFyYW0gPSBremFsbG9jKHNpemVvZigqcGFyYW0pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBhcmFtKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCS8qIEJULVdMQU4gY29leHQgcGFyYW1ldGVycyAqLworCWZvciAoaSA9IDA7IGkgPCBDT05GX1NHX1BBUkFNU19NQVg7IGkrKykKKwkJcGFyYW0tPnBhcmFtc1tpXSA9IGNwdV90b19sZTMyKGMtPnBhcmFtc1tpXSk7CisJcGFyYW0tPnBhcmFtX2lkeCA9IENPTkZfU0dfUEFSQU1TX0FMTDsKKworCXJldCA9IHdsMTI3MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfU0dfQ0ZHLCBwYXJhbSwgc2l6ZW9mKCpwYXJhbSkpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV93YXJuaW5nKCJmYWlsZWQgdG8gc2V0IHNnIGNvbmZpZzogJWQiLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZShwYXJhbSk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI3MV9hY3hfY2NhX3RocmVzaG9sZChzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlzdHJ1Y3QgYWN4X2VuZXJneV9kZXRlY3Rpb24gKmRldGVjdGlvbjsKKwlpbnQgcmV0OworCisJd2wxMjcxX2RlYnVnKERFQlVHX0FDWCwgImFjeCBjY2EgdGhyZXNob2xkIik7CisKKwlkZXRlY3Rpb24gPSBremFsbG9jKHNpemVvZigqZGV0ZWN0aW9uKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXRlY3Rpb24pIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJZGV0ZWN0aW9uLT5yeF9jY2FfdGhyZXNob2xkID0gY3B1X3RvX2xlMTYod2wtPmNvbmYucngucnhfY2NhX3RocmVzaG9sZCk7CisJZGV0ZWN0aW9uLT50eF9lbmVyZ3lfZGV0ZWN0aW9uID0gd2wtPmNvbmYudHgudHhfZW5lcmd5X2RldGVjdGlvbjsKKworCXJldCA9IHdsMTI3MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfQ0NBX1RIUkVTSE9MRCwKKwkJCQkgICBkZXRlY3Rpb24sIHNpemVvZigqZGV0ZWN0aW9uKSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX3dhcm5pbmcoImZhaWxlZCB0byBzZXQgY2NhIHRocmVzaG9sZDogJWQiLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworb3V0OgorCWtmcmVlKGRldGVjdGlvbik7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI3MV9hY3hfYmNuX2R0aW1fb3B0aW9ucyhzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlzdHJ1Y3QgYWN4X2JlYWNvbl9icm9hZGNhc3QgKmJiOworCWludCByZXQ7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfQUNYLCAiYWN4IGJjbiBkdGltIG9wdGlvbnMiKTsKKworCWJiID0ga3phbGxvYyhzaXplb2YoKmJiKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFiYikgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwliYi0+YmVhY29uX3J4X3RpbWVvdXQgPSBjcHVfdG9fbGUxNih3bC0+Y29uZi5jb25uLmJlYWNvbl9yeF90aW1lb3V0KTsKKwliYi0+YnJvYWRjYXN0X3RpbWVvdXQgPSBjcHVfdG9fbGUxNih3bC0+Y29uZi5jb25uLmJyb2FkY2FzdF90aW1lb3V0KTsKKwliYi0+cnhfYnJvYWRjYXN0X2luX3BzID0gd2wtPmNvbmYuY29ubi5yeF9icm9hZGNhc3RfaW5fcHM7CisJYmItPnBzX3BvbGxfdGhyZXNob2xkID0gd2wtPmNvbmYuY29ubi5wc19wb2xsX3RocmVzaG9sZDsKKworCXJldCA9IHdsMTI3MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfQkNOX0RUSU1fT1BUSU9OUywgYmIsIHNpemVvZigqYmIpKTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNzFfd2FybmluZygiZmFpbGVkIHRvIHNldCByeCBjb25maWc6ICVkIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJa2ZyZWUoYmIpOworCXJldHVybiByZXQ7Cit9CisKK2ludCB3bDEyNzFfYWN4X2FpZChzdHJ1Y3Qgd2wxMjcxICp3bCwgdTE2IGFpZCkKK3sKKwlzdHJ1Y3QgYWN4X2FpZCAqYWN4X2FpZDsKKwlpbnQgcmV0OworCisJd2wxMjcxX2RlYnVnKERFQlVHX0FDWCwgImFjeCBhaWQiKTsKKworCWFjeF9haWQgPSBremFsbG9jKHNpemVvZigqYWN4X2FpZCksIEdGUF9LRVJORUwpOworCWlmICghYWN4X2FpZCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlhY3hfYWlkLT5haWQgPSBjcHVfdG9fbGUxNihhaWQpOworCisJcmV0ID0gd2wxMjcxX2NtZF9jb25maWd1cmUod2wsIEFDWF9BSUQsIGFjeF9haWQsIHNpemVvZigqYWN4X2FpZCkpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV93YXJuaW5nKCJmYWlsZWQgdG8gc2V0IGFpZDogJWQiLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZShhY3hfYWlkKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxMjcxX2FjeF9ldmVudF9tYm94X21hc2soc3RydWN0IHdsMTI3MSAqd2wsIHUzMiBldmVudF9tYXNrKQoreworCXN0cnVjdCBhY3hfZXZlbnRfbWFzayAqbWFzazsKKwlpbnQgcmV0OworCisJd2wxMjcxX2RlYnVnKERFQlVHX0FDWCwgImFjeCBldmVudCBtYm94IG1hc2siKTsKKworCW1hc2sgPSBremFsbG9jKHNpemVvZigqbWFzayksIEdGUF9LRVJORUwpOworCWlmICghbWFzaykgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBoaWdoIGV2ZW50IG1hc2sgaXMgdW51c2VkICovCisJbWFzay0+aGlnaF9ldmVudF9tYXNrID0gY3B1X3RvX2xlMzIoMHhmZmZmZmZmZik7CisJbWFzay0+ZXZlbnRfbWFzayA9IGNwdV90b19sZTMyKGV2ZW50X21hc2spOworCisJcmV0ID0gd2wxMjcxX2NtZF9jb25maWd1cmUod2wsIEFDWF9FVkVOVF9NQk9YX01BU0ssCisJCQkJICAgbWFzaywgc2l6ZW9mKCptYXNrKSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX3dhcm5pbmcoImZhaWxlZCB0byBzZXQgYWN4X2V2ZW50X21ib3hfbWFzazogJWQiLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZShtYXNrKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxMjcxX2FjeF9zZXRfcHJlYW1ibGUoc3RydWN0IHdsMTI3MSAqd2wsIGVudW0gYWN4X3ByZWFtYmxlX3R5cGUgcHJlYW1ibGUpCit7CisJc3RydWN0IGFjeF9wcmVhbWJsZSAqYWN4OworCWludCByZXQ7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfQUNYLCAiYWN4X3NldF9wcmVhbWJsZSIpOworCisJYWN4ID0ga3phbGxvYyhzaXplb2YoKmFjeCksIEdGUF9LRVJORUwpOworCWlmICghYWN4KSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWFjeC0+cHJlYW1ibGUgPSBwcmVhbWJsZTsKKworCXJldCA9IHdsMTI3MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfUFJFQU1CTEVfVFlQRSwgYWN4LCBzaXplb2YoKmFjeCkpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV93YXJuaW5nKCJTZXR0aW5nIG9mIHByZWFtYmxlIGZhaWxlZDogJWQiLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZShhY3gpOworCXJldHVybiByZXQ7Cit9CisKK2ludCB3bDEyNzFfYWN4X2N0c19wcm90ZWN0KHN0cnVjdCB3bDEyNzEgKndsLAorCQkJICAgZW51bSBhY3hfY3RzcHJvdGVjdF90eXBlIGN0c3Byb3RlY3QpCit7CisJc3RydWN0IGFjeF9jdHNwcm90ZWN0ICphY3g7CisJaW50IHJldDsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3hfc2V0X2N0c3Byb3RlY3QiKTsKKworCWFjeCA9IGt6YWxsb2Moc2l6ZW9mKCphY3gpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWFjeCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlhY3gtPmN0c3Byb3RlY3QgPSBjdHNwcm90ZWN0OworCisJcmV0ID0gd2wxMjcxX2NtZF9jb25maWd1cmUod2wsIEFDWF9DVFNfUFJPVEVDVElPTiwgYWN4LCBzaXplb2YoKmFjeCkpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV93YXJuaW5nKCJTZXR0aW5nIG9mIGN0c3Byb3RlY3QgZmFpbGVkOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCWtmcmVlKGFjeCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI3MV9hY3hfc3RhdGlzdGljcyhzdHJ1Y3Qgd2wxMjcxICp3bCwgc3RydWN0IGFjeF9zdGF0aXN0aWNzICpzdGF0cykKK3sKKwlpbnQgcmV0OworCisJd2wxMjcxX2RlYnVnKERFQlVHX0FDWCwgImFjeCBzdGF0aXN0aWNzIik7CisKKwlyZXQgPSB3bDEyNzFfY21kX2ludGVycm9nYXRlKHdsLCBBQ1hfU1RBVElTVElDUywgc3RhdHMsCisJCQkJICAgICBzaXplb2YoKnN0YXRzKSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX3dhcm5pbmcoImFjeCBzdGF0aXN0aWNzIGZhaWxlZDogJWQiLCByZXQpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IHdsMTI3MV9hY3hfcmF0ZV9wb2xpY2llcyhzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlzdHJ1Y3QgYWN4X3JhdGVfcG9saWN5ICphY3g7CisJc3RydWN0IGNvbmZfdHhfcmF0ZV9jbGFzcyAqYyA9ICZ3bC0+Y29uZi50eC5yY19jb25mOworCWludCBpZHggPSAwOworCWludCByZXQgPSAwOworCisJd2wxMjcxX2RlYnVnKERFQlVHX0FDWCwgImFjeCByYXRlIHBvbGljaWVzIik7CisKKwlhY3ggPSBremFsbG9jKHNpemVvZigqYWN4KSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWFjeCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBjb25maWd1cmUgb25lIGJhc2ljIHJhdGUgY2xhc3MgKi8KKwlpZHggPSBBQ1hfVFhfQkFTSUNfUkFURTsKKwlhY3gtPnJhdGVfY2xhc3NbaWR4XS5lbmFibGVkX3JhdGVzID0gY3B1X3RvX2xlMzIod2wtPmJhc2ljX3JhdGUpOworCWFjeC0+cmF0ZV9jbGFzc1tpZHhdLnNob3J0X3JldHJ5X2xpbWl0ID0gYy0+c2hvcnRfcmV0cnlfbGltaXQ7CisJYWN4LT5yYXRlX2NsYXNzW2lkeF0ubG9uZ19yZXRyeV9saW1pdCA9IGMtPmxvbmdfcmV0cnlfbGltaXQ7CisJYWN4LT5yYXRlX2NsYXNzW2lkeF0uYWZsYWdzID0gYy0+YWZsYWdzOworCisJLyogY29uZmlndXJlIG9uZSBBUCBzdXBwb3J0ZWQgcmF0ZSBjbGFzcyAqLworCWlkeCA9IEFDWF9UWF9BUF9GVUxMX1JBVEU7CisJYWN4LT5yYXRlX2NsYXNzW2lkeF0uZW5hYmxlZF9yYXRlcyA9IGNwdV90b19sZTMyKHdsLT5yYXRlX3NldCk7CisJYWN4LT5yYXRlX2NsYXNzW2lkeF0uc2hvcnRfcmV0cnlfbGltaXQgPSBjLT5zaG9ydF9yZXRyeV9saW1pdDsKKwlhY3gtPnJhdGVfY2xhc3NbaWR4XS5sb25nX3JldHJ5X2xpbWl0ID0gYy0+bG9uZ19yZXRyeV9saW1pdDsKKwlhY3gtPnJhdGVfY2xhc3NbaWR4XS5hZmxhZ3MgPSBjLT5hZmxhZ3M7CisKKwlhY3gtPnJhdGVfY2xhc3NfY250ID0gY3B1X3RvX2xlMzIoQUNYX1RYX1JBVEVfUE9MSUNZX0NOVCk7CisKKwlyZXQgPSB3bDEyNzFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX1JBVEVfUE9MSUNZLCBhY3gsIHNpemVvZigqYWN4KSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX3dhcm5pbmcoIlNldHRpbmcgb2YgcmF0ZSBwb2xpY2llcyBmYWlsZWQ6ICVkIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJa2ZyZWUoYWN4KTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxMjcxX2FjeF9hY19jZmcoc3RydWN0IHdsMTI3MSAqd2wsIHU4IGFjLCB1OCBjd19taW4sIHUxNiBjd19tYXgsCisJCSAgICAgIHU4IGFpZnNuLCB1MTYgdHhvcCkKK3sKKwlzdHJ1Y3QgYWN4X2FjX2NmZyAqYWN4OworCWludCByZXQgPSAwOworCisJd2wxMjcxX2RlYnVnKERFQlVHX0FDWCwgImFjeCBhYyBjZmcgJWQgY3dfbWluZyAlZCBjd19tYXggJWQgIgorCQkgICAgICJhaWZzICVkIHR4b3AgJWQiLCBhYywgY3dfbWluLCBjd19tYXgsIGFpZnNuLCB0eG9wKTsKKworCWFjeCA9IGt6YWxsb2Moc2l6ZW9mKCphY3gpLCBHRlBfS0VSTkVMKTsKKworCWlmICghYWN4KSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWFjeC0+YWMgPSBhYzsKKwlhY3gtPmN3X21pbiA9IGN3X21pbjsKKwlhY3gtPmN3X21heCA9IGNwdV90b19sZTE2KGN3X21heCk7CisJYWN4LT5haWZzbiA9IGFpZnNuOworCWFjeC0+dHhfb3BfbGltaXQgPSBjcHVfdG9fbGUxNih0eG9wKTsKKworCXJldCA9IHdsMTI3MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfQUNfQ0ZHLCBhY3gsIHNpemVvZigqYWN4KSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX3dhcm5pbmcoImFjeCBhYyBjZmcgZmFpbGVkOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCWtmcmVlKGFjeCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI3MV9hY3hfdGlkX2NmZyhzdHJ1Y3Qgd2wxMjcxICp3bCwgdTggcXVldWVfaWQsIHU4IGNoYW5uZWxfdHlwZSwKKwkJICAgICAgIHU4IHRzaWQsIHU4IHBzX3NjaGVtZSwgdTggYWNrX3BvbGljeSwKKwkJICAgICAgIHUzMiBhcHNkX2NvbmYwLCB1MzIgYXBzZF9jb25mMSkKK3sKKwlzdHJ1Y3QgYWN4X3RpZF9jb25maWcgKmFjeDsKKwlpbnQgcmV0ID0gMDsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggdGlkIGNvbmZpZyIpOworCisJYWN4ID0ga3phbGxvYyhzaXplb2YoKmFjeCksIEdGUF9LRVJORUwpOworCisJaWYgKCFhY3gpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJYWN4LT5xdWV1ZV9pZCA9IHF1ZXVlX2lkOworCWFjeC0+Y2hhbm5lbF90eXBlID0gY2hhbm5lbF90eXBlOworCWFjeC0+dHNpZCA9IHRzaWQ7CisJYWN4LT5wc19zY2hlbWUgPSBwc19zY2hlbWU7CisJYWN4LT5hY2tfcG9saWN5ID0gYWNrX3BvbGljeTsKKwlhY3gtPmFwc2RfY29uZlswXSA9IGNwdV90b19sZTMyKGFwc2RfY29uZjApOworCWFjeC0+YXBzZF9jb25mWzFdID0gY3B1X3RvX2xlMzIoYXBzZF9jb25mMSk7CisKKwlyZXQgPSB3bDEyNzFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX1RJRF9DRkcsIGFjeCwgc2l6ZW9mKCphY3gpKTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNzFfd2FybmluZygiU2V0dGluZyBvZiB0aWQgY29uZmlnIGZhaWxlZDogJWQiLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZShhY3gpOworCXJldHVybiByZXQ7Cit9CisKK2ludCB3bDEyNzFfYWN4X2ZyYWdfdGhyZXNob2xkKHN0cnVjdCB3bDEyNzEgKndsLCB1MTYgZnJhZ190aHJlc2hvbGQpCit7CisJc3RydWN0IGFjeF9mcmFnX3RocmVzaG9sZCAqYWN4OworCWludCByZXQgPSAwOworCisJd2wxMjcxX2RlYnVnKERFQlVHX0FDWCwgImFjeCBmcmFnIHRocmVzaG9sZCIpOworCisJYWN4ID0ga3phbGxvYyhzaXplb2YoKmFjeCksIEdGUF9LRVJORUwpOworCisJaWYgKCFhY3gpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJYWN4LT5mcmFnX3RocmVzaG9sZCA9IGNwdV90b19sZTE2KGZyYWdfdGhyZXNob2xkKTsKKwlyZXQgPSB3bDEyNzFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX0ZSQUdfQ0ZHLCBhY3gsIHNpemVvZigqYWN4KSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX3dhcm5pbmcoIlNldHRpbmcgb2YgZnJhZyB0aHJlc2hvbGQgZmFpbGVkOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCWtmcmVlKGFjeCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI3MV9hY3hfdHhfY29uZmlnX29wdGlvbnMoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJc3RydWN0IGFjeF90eF9jb25maWdfb3B0aW9ucyAqYWN4OworCWludCByZXQgPSAwOworCisJd2wxMjcxX2RlYnVnKERFQlVHX0FDWCwgImFjeCB0eCBjb25maWcgb3B0aW9ucyIpOworCisJYWN4ID0ga3phbGxvYyhzaXplb2YoKmFjeCksIEdGUF9LRVJORUwpOworCisJaWYgKCFhY3gpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJYWN4LT50eF9jb21wbF90aW1lb3V0ID0gY3B1X3RvX2xlMTYod2wtPmNvbmYudHgudHhfY29tcGxfdGltZW91dCk7CisJYWN4LT50eF9jb21wbF90aHJlc2hvbGQgPSBjcHVfdG9fbGUxNih3bC0+Y29uZi50eC50eF9jb21wbF90aHJlc2hvbGQpOworCXJldCA9IHdsMTI3MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfVFhfQ09ORklHX09QVCwgYWN4LCBzaXplb2YoKmFjeCkpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV93YXJuaW5nKCJTZXR0aW5nIG9mIHR4IG9wdGlvbnMgZmFpbGVkOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCWtmcmVlKGFjeCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI3MV9hY3hfbWVtX2NmZyhzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlzdHJ1Y3Qgd2wxMjcxX2FjeF9jb25maWdfbWVtb3J5ICptZW1fY29uZjsKKwlpbnQgcmV0OworCisJd2wxMjcxX2RlYnVnKERFQlVHX0FDWCwgIndsMTI3MSBtZW0gY2ZnIik7CisKKwltZW1fY29uZiA9IGt6YWxsb2Moc2l6ZW9mKCptZW1fY29uZiksIEdGUF9LRVJORUwpOworCWlmICghbWVtX2NvbmYpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogbWVtb3J5IGNvbmZpZyAqLworCW1lbV9jb25mLT5udW1fc3RhdGlvbnMgPSBERUZBVUxUX05VTV9TVEFUSU9OUzsKKwltZW1fY29uZi0+cnhfbWVtX2Jsb2NrX251bSA9IEFDWF9SWF9NRU1fQkxPQ0tTOworCW1lbV9jb25mLT50eF9taW5fbWVtX2Jsb2NrX251bSA9IEFDWF9UWF9NSU5fTUVNX0JMT0NLUzsKKwltZW1fY29uZi0+bnVtX3NzaWRfcHJvZmlsZXMgPSBBQ1hfTlVNX1NTSURfUFJPRklMRVM7CisJbWVtX2NvbmYtPnRvdGFsX3R4X2Rlc2NyaXB0b3JzID0gY3B1X3RvX2xlMzIoQUNYX1RYX0RFU0NSSVBUT1JTKTsKKworCXJldCA9IHdsMTI3MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfTUVNX0NGRywgbWVtX2NvbmYsCisJCQkJICAgc2l6ZW9mKCptZW1fY29uZikpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV93YXJuaW5nKCJ3bDEyNzEgbWVtIGNvbmZpZyBmYWlsZWQ6ICVkIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJa2ZyZWUobWVtX2NvbmYpOworCXJldHVybiByZXQ7Cit9CisKK2ludCB3bDEyNzFfYWN4X2luaXRfbWVtX2NvbmZpZyhzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gd2wxMjcxX2FjeF9tZW1fY2ZnKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXdsLT50YXJnZXRfbWVtX21hcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB3bDEyNzFfYWN4X21lbV9tYXApLAorCQkJCSAgICAgR0ZQX0tFUk5FTCk7CisJaWYgKCF3bC0+dGFyZ2V0X21lbV9tYXApIHsKKwkJd2wxMjcxX2Vycm9yKCJjb3VsZG4ndCBhbGxvY2F0ZSB0YXJnZXQgbWVtb3J5IG1hcCIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiB3ZSBub3cgYXNrIGZvciB0aGUgZmlybXdhcmUgYnVpbHQgbWVtb3J5IG1hcCAqLworCXJldCA9IHdsMTI3MV9hY3hfbWVtX21hcCh3bCwgKHZvaWQgKil3bC0+dGFyZ2V0X21lbV9tYXAsCisJCQkJIHNpemVvZihzdHJ1Y3Qgd2wxMjcxX2FjeF9tZW1fbWFwKSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX2Vycm9yKCJjb3VsZG4ndCByZXRyaWV2ZSBmaXJtd2FyZSBtZW1vcnkgbWFwIik7CisJCWtmcmVlKHdsLT50YXJnZXRfbWVtX21hcCk7CisJCXdsLT50YXJnZXRfbWVtX21hcCA9IE5VTEw7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogaW5pdGlhbGl6ZSBUWCBibG9jayBib29rIGtlZXBpbmcgKi8KKwl3bC0+dHhfYmxvY2tzX2F2YWlsYWJsZSA9CisJCWxlMzJfdG9fY3B1KHdsLT50YXJnZXRfbWVtX21hcC0+bnVtX3R4X21lbV9ibG9ja3MpOworCXdsMTI3MV9kZWJ1ZyhERUJVR19UWCwgImF2YWlsYWJsZSB0eCBibG9ja3M6ICVkIiwKKwkJICAgICB3bC0+dHhfYmxvY2tzX2F2YWlsYWJsZSk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHdsMTI3MV9hY3hfaW5pdF9yeF9pbnRlcnJ1cHQoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJc3RydWN0IHdsMTI3MV9hY3hfcnhfY29uZmlnX29wdCAqcnhfY29uZjsKKwlpbnQgcmV0OworCisJd2wxMjcxX2RlYnVnKERFQlVHX0FDWCwgIndsMTI3MSByeCBpbnRlcnJ1cHQgY29uZmlnIik7CisKKwlyeF9jb25mID0ga3phbGxvYyhzaXplb2YoKnJ4X2NvbmYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJ4X2NvbmYpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJcnhfY29uZi0+dGhyZXNob2xkID0gY3B1X3RvX2xlMTYod2wtPmNvbmYucnguaXJxX3BrdF90aHJlc2hvbGQpOworCXJ4X2NvbmYtPnRpbWVvdXQgPSBjcHVfdG9fbGUxNih3bC0+Y29uZi5yeC5pcnFfdGltZW91dCk7CisJcnhfY29uZi0+bWJsa190aHJlc2hvbGQgPSBjcHVfdG9fbGUxNih3bC0+Y29uZi5yeC5pcnFfYmxrX3RocmVzaG9sZCk7CisJcnhfY29uZi0+cXVldWVfdHlwZSA9IHdsLT5jb25mLnJ4LnF1ZXVlX3R5cGU7CisKKwlyZXQgPSB3bDEyNzFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX1JYX0NPTkZJR19PUFQsIHJ4X2NvbmYsCisJCQkJICAgc2l6ZW9mKCpyeF9jb25mKSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX3dhcm5pbmcoIndsMTI3MSByeCBjb25maWcgb3B0IGZhaWxlZDogJWQiLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZShyeF9jb25mKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxMjcxX2FjeF9iZXRfZW5hYmxlKHN0cnVjdCB3bDEyNzEgKndsLCBib29sIGVuYWJsZSkKK3sKKwlzdHJ1Y3Qgd2wxMjcxX2FjeF9iZXRfZW5hYmxlICphY3ggPSBOVUxMOworCWludCByZXQgPSAwOworCisJd2wxMjcxX2RlYnVnKERFQlVHX0FDWCwgImFjeCBiZXQgZW5hYmxlIik7CisKKwlpZiAoZW5hYmxlICYmIHdsLT5jb25mLmNvbm4uYmV0X2VuYWJsZSA9PSBDT05GX0JFVF9NT0RFX0RJU0FCTEUpCisJCWdvdG8gb3V0OworCisJYWN4ID0ga3phbGxvYyhzaXplb2YoKmFjeCksIEdGUF9LRVJORUwpOworCWlmICghYWN4KSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWFjeC0+ZW5hYmxlID0gZW5hYmxlID8gQ09ORl9CRVRfTU9ERV9FTkFCTEUgOiBDT05GX0JFVF9NT0RFX0RJU0FCTEU7CisJYWN4LT5tYXhfY29uc2VjdXRpdmUgPSB3bC0+Y29uZi5jb25uLmJldF9tYXhfY29uc2VjdXRpdmU7CisKKwlyZXQgPSB3bDEyNzFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX0JFVF9FTkFCTEUsIGFjeCwgc2l6ZW9mKCphY3gpKTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNzFfd2FybmluZygiYWN4IGJldCBlbmFibGUgZmFpbGVkOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCWtmcmVlKGFjeCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI3MV9hY3hfYXJwX2lwX2ZpbHRlcihzdHJ1Y3Qgd2wxMjcxICp3bCwgdTggZW5hYmxlLCBfX2JlMzIgYWRkcmVzcykKK3sKKwlzdHJ1Y3Qgd2wxMjcxX2FjeF9hcnBfZmlsdGVyICphY3g7CisJaW50IHJldDsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggYXJwIGlwIGZpbHRlciwgZW5hYmxlOiAlZCIsIGVuYWJsZSk7CisKKwlhY3ggPSBremFsbG9jKHNpemVvZigqYWN4KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhY3gpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJYWN4LT52ZXJzaW9uID0gQUNYX0lQVjRfVkVSU0lPTjsKKwlhY3gtPmVuYWJsZSA9IGVuYWJsZTsKKworCWlmIChlbmFibGUpCisJCW1lbWNweShhY3gtPmFkZHJlc3MsICZhZGRyZXNzLCBBQ1hfSVBWNF9BRERSX1NJWkUpOworCisJcmV0ID0gd2wxMjcxX2NtZF9jb25maWd1cmUod2wsIEFDWF9BUlBfSVBfRklMVEVSLAorCQkJCSAgIGFjeCwgc2l6ZW9mKCphY3gpKTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNzFfd2FybmluZygiZmFpbGVkIHRvIHNldCBhcnAgaXAgZmlsdGVyOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCWtmcmVlKGFjeCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI3MV9hY3hfcG1fY29uZmlnKHN0cnVjdCB3bDEyNzEgKndsKQoreworCXN0cnVjdCB3bDEyNzFfYWN4X3BtX2NvbmZpZyAqYWN4ID0gTlVMTDsKKwlzdHJ1Y3QgIGNvbmZfcG1fY29uZmlnX3NldHRpbmdzICpjID0gJndsLT5jb25mLnBtX2NvbmZpZzsKKwlpbnQgcmV0ID0gMDsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggcG0gY29uZmlnIik7CisKKwlhY3ggPSBremFsbG9jKHNpemVvZigqYWN4KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhY3gpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJYWN4LT5ob3N0X2Nsa19zZXR0bGluZ190aW1lID0gY3B1X3RvX2xlMzIoYy0+aG9zdF9jbGtfc2V0dGxpbmdfdGltZSk7CisJYWN4LT5ob3N0X2Zhc3Rfd2FrZXVwX3N1cHBvcnQgPSBjLT5ob3N0X2Zhc3Rfd2FrZXVwX3N1cHBvcnQ7CisKKwlyZXQgPSB3bDEyNzFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX1BNX0NPTkZJRywgYWN4LCBzaXplb2YoKmFjeCkpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV93YXJuaW5nKCJhY3ggcG0gY29uZmlnIGZhaWxlZDogJWQiLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZShhY3gpOworCXJldHVybiByZXQ7Cit9CisKK2ludCB3bDEyNzFfYWN4X2tlZXBfYWxpdmVfbW9kZShzdHJ1Y3Qgd2wxMjcxICp3bCwgYm9vbCBlbmFibGUpCit7CisJc3RydWN0IHdsMTI3MV9hY3hfa2VlcF9hbGl2ZV9tb2RlICphY3ggPSBOVUxMOworCWludCByZXQgPSAwOworCisJd2wxMjcxX2RlYnVnKERFQlVHX0FDWCwgImFjeCBrZWVwIGFsaXZlIG1vZGU6ICVkIiwgZW5hYmxlKTsKKworCWFjeCA9IGt6YWxsb2Moc2l6ZW9mKCphY3gpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWFjeCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlhY3gtPmVuYWJsZWQgPSBlbmFibGU7CisKKwlyZXQgPSB3bDEyNzFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX0tFRVBfQUxJVkVfTU9ERSwgYWN4LCBzaXplb2YoKmFjeCkpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV93YXJuaW5nKCJhY3gga2VlcCBhbGl2ZSBtb2RlIGZhaWxlZDogJWQiLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZShhY3gpOworCXJldHVybiByZXQ7Cit9CisKK2ludCB3bDEyNzFfYWN4X2tlZXBfYWxpdmVfY29uZmlnKHN0cnVjdCB3bDEyNzEgKndsLCB1OCBpbmRleCwgdTggdHBsX3ZhbGlkKQoreworCXN0cnVjdCB3bDEyNzFfYWN4X2tlZXBfYWxpdmVfY29uZmlnICphY3ggPSBOVUxMOworCWludCByZXQgPSAwOworCisJd2wxMjcxX2RlYnVnKERFQlVHX0FDWCwgImFjeCBrZWVwIGFsaXZlIGNvbmZpZyIpOworCisJYWN4ID0ga3phbGxvYyhzaXplb2YoKmFjeCksIEdGUF9LRVJORUwpOworCWlmICghYWN4KSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWFjeC0+cGVyaW9kID0gY3B1X3RvX2xlMzIod2wtPmNvbmYuY29ubi5rZWVwX2FsaXZlX2ludGVydmFsKTsKKwlhY3gtPmluZGV4ID0gaW5kZXg7CisJYWN4LT50cGxfdmFsaWRhdGlvbiA9IHRwbF92YWxpZDsKKwlhY3gtPnRyaWdnZXIgPSBBQ1hfS0VFUF9BTElWRV9OT19UWDsKKworCXJldCA9IHdsMTI3MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfU0VUX0tFRVBfQUxJVkVfQ09ORklHLAorCQkJCSAgIGFjeCwgc2l6ZW9mKCphY3gpKTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNzFfd2FybmluZygiYWN4IGtlZXAgYWxpdmUgY29uZmlnIGZhaWxlZDogJWQiLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZShhY3gpOworCXJldHVybiByZXQ7Cit9CisKK2ludCB3bDEyNzFfYWN4X3Jzc2lfc25yX3RyaWdnZXIoc3RydWN0IHdsMTI3MSAqd2wsIGJvb2wgZW5hYmxlLAorCQkJCXMxNiB0aG9sZCwgdTggaHlzdCkKK3sKKwlzdHJ1Y3Qgd2wxMjcxX2FjeF9yc3NpX3Nucl90cmlnZ2VyICphY3ggPSBOVUxMOworCWludCByZXQgPSAwOworCisJd2wxMjcxX2RlYnVnKERFQlVHX0FDWCwgImFjeCByc3NpIHNuciB0cmlnZ2VyIik7CisKKwlhY3ggPSBremFsbG9jKHNpemVvZigqYWN4KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhY3gpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJd2wtPmxhc3RfcnNzaV9ldmVudCA9IC0xOworCisJYWN4LT5wYWNpbmcgPSBjcHVfdG9fbGUxNih3bC0+Y29uZi5yb2FtX3RyaWdnZXIudHJpZ2dlcl9wYWNpbmcpOworCWFjeC0+bWV0cmljID0gV0wxMjcxX0FDWF9UUklHX01FVFJJQ19SU1NJX0JFQUNPTjsKKwlhY3gtPnR5cGUgPSBXTDEyNzFfQUNYX1RSSUdfVFlQRV9FREdFOworCWlmIChlbmFibGUpCisJCWFjeC0+ZW5hYmxlID0gV0wxMjcxX0FDWF9UUklHX0VOQUJMRTsKKwllbHNlCisJCWFjeC0+ZW5hYmxlID0gV0wxMjcxX0FDWF9UUklHX0RJU0FCTEU7CisKKwlhY3gtPmluZGV4ID0gV0wxMjcxX0FDWF9UUklHX0lEWF9SU1NJOworCWFjeC0+ZGlyID0gV0wxMjcxX0FDWF9UUklHX0RJUl9CSURJUjsKKwlhY3gtPnRocmVzaG9sZCA9IGNwdV90b19sZTE2KHRob2xkKTsKKwlhY3gtPmh5c3RlcmVzaXMgPSBoeXN0OworCisJcmV0ID0gd2wxMjcxX2NtZF9jb25maWd1cmUod2wsIEFDWF9SU1NJX1NOUl9UUklHR0VSLCBhY3gsIHNpemVvZigqYWN4KSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX3dhcm5pbmcoImFjeCByc3NpIHNuciB0cmlnZ2VyIHNldHRpbmcgZmFpbGVkOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCWtmcmVlKGFjeCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI3MV9hY3hfcnNzaV9zbnJfYXZnX3dlaWdodHMoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJc3RydWN0IHdsMTI3MV9hY3hfcnNzaV9zbnJfYXZnX3dlaWdodHMgKmFjeCA9IE5VTEw7CisJc3RydWN0IGNvbmZfcm9hbV90cmlnZ2VyX3NldHRpbmdzICpjID0gJndsLT5jb25mLnJvYW1fdHJpZ2dlcjsKKwlpbnQgcmV0ID0gMDsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggcnNzaSBzbnIgYXZnIHdlaWdodHMiKTsKKworCWFjeCA9IGt6YWxsb2Moc2l6ZW9mKCphY3gpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWFjeCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlhY3gtPnJzc2lfYmVhY29uID0gYy0+YXZnX3dlaWdodF9yc3NpX2JlYWNvbjsKKwlhY3gtPnJzc2lfZGF0YSA9IGMtPmF2Z193ZWlnaHRfcnNzaV9kYXRhOworCWFjeC0+c25yX2JlYWNvbiA9IGMtPmF2Z193ZWlnaHRfc25yX2JlYWNvbjsKKwlhY3gtPnNucl9kYXRhID0gYy0+YXZnX3dlaWdodF9zbnJfZGF0YTsKKworCXJldCA9IHdsMTI3MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfUlNTSV9TTlJfV0VJR0hUUywgYWN4LCBzaXplb2YoKmFjeCkpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV93YXJuaW5nKCJhY3ggcnNzaSBzbnIgdHJpZ2dlciB3ZWlnaHRzIGZhaWxlZDogJWQiLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZShhY3gpOworCXJldHVybiByZXQ7Cit9CisKK2ludCB3bDEyNzFfYWN4X3NldF9odF9jYXBhYmlsaXRpZXMoc3RydWN0IHdsMTI3MSAqd2wsCisJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhX2h0X2NhcCAqaHRfY2FwLAorCQkJCSAgICBib29sIGFsbG93X2h0X29wZXJhdGlvbikKK3sKKwlzdHJ1Y3Qgd2wxMjcxX2FjeF9odF9jYXBhYmlsaXRpZXMgKmFjeDsKKwl1OCBtYWNfYWRkcmVzc1tFVEhfQUxFTl0gPSB7MHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZn07CisJaW50IHJldCA9IDA7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfQUNYLCAiYWN4IGh0IGNhcGFiaWxpdGllcyBzZXR0aW5nIik7CisKKwlhY3ggPSBremFsbG9jKHNpemVvZigqYWN4KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhY3gpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogQWxsb3cgSFQgT3BlcmF0aW9uID8gKi8KKwlpZiAoYWxsb3dfaHRfb3BlcmF0aW9uKSB7CisJCWFjeC0+aHRfY2FwYWJpbGl0ZXMgPQorCQkJV0wxMjcxX0FDWF9GV19DQVBfSFRfT1BFUkFUSU9OOworCQlpZiAoaHRfY2FwLT5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX0dSTl9GTEQpCisJCQlhY3gtPmh0X2NhcGFiaWxpdGVzIHw9CisJCQkJV0wxMjcxX0FDWF9GV19DQVBfR1JFRU5GSUVMRF9GUkFNRV9GT1JNQVQ7CisJCWlmIChodF9jYXAtPmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfU0dJXzIwKQorCQkJYWN4LT5odF9jYXBhYmlsaXRlcyB8PQorCQkJCVdMMTI3MV9BQ1hfRldfQ0FQX1NIT1JUX0dJX0ZPUl8yME1IWl9QQUNLRVRTOworCQlpZiAoaHRfY2FwLT5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX0xTSUdfVFhPUF9QUk9UKQorCQkJYWN4LT5odF9jYXBhYmlsaXRlcyB8PQorCQkJCVdMMTI3MV9BQ1hfRldfQ0FQX0xTSUdfVFhPUF9QUk9URUNUSU9OOworCisJCS8qIGdldCBkYXRhIGZyb20gQS1NUERVIHBhcmFtZXRlcnMgZmllbGQgKi8KKwkJYWN4LT5hbXBkdV9tYXhfbGVuZ3RoID0gaHRfY2FwLT5hbXBkdV9mYWN0b3I7CisJCWFjeC0+YW1wZHVfbWluX3NwYWNpbmcgPSBodF9jYXAtPmFtcGR1X2RlbnNpdHk7CisKKwkJbWVtY3B5KGFjeC0+bWFjX2FkZHJlc3MsIG1hY19hZGRyZXNzLCBFVEhfQUxFTik7CisJfSBlbHNlIHsgLyogSFQgb3BlcmF0aW9ucyBhcmUgbm90IGFsbG93ZWQgKi8KKwkJYWN4LT5odF9jYXBhYmlsaXRlcyA9IDA7CisJfQorCisJcmV0ID0gd2wxMjcxX2NtZF9jb25maWd1cmUod2wsIEFDWF9QRUVSX0hUX0NBUCwgYWN4LCBzaXplb2YoKmFjeCkpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV93YXJuaW5nKCJhY3ggaHQgY2FwYWJpbGl0aWVzIHNldHRpbmcgZmFpbGVkOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCWtmcmVlKGFjeCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI3MV9hY3hfc2V0X2h0X2luZm9ybWF0aW9uKHN0cnVjdCB3bDEyNzEgKndsLAorCQkJCSAgIHUxNiBodF9vcGVyYXRpb25fbW9kZSkKK3sKKwlzdHJ1Y3Qgd2wxMjcxX2FjeF9odF9pbmZvcm1hdGlvbiAqYWN4OworCWludCByZXQgPSAwOworCisJd2wxMjcxX2RlYnVnKERFQlVHX0FDWCwgImFjeCBodCBpbmZvcm1hdGlvbiBzZXR0aW5nIik7CisKKwlhY3ggPSBremFsbG9jKHNpemVvZigqYWN4KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhY3gpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJYWN4LT5odF9wcm90ZWN0aW9uID0KKwkJKHU4KShodF9vcGVyYXRpb25fbW9kZSAmIElFRUU4MDIxMV9IVF9PUF9NT0RFX1BST1RFQ1RJT04pOworCWFjeC0+cmlmc19tb2RlID0gMDsKKwlhY3gtPmdmX3Byb3RlY3Rpb24gPSAwOworCWFjeC0+aHRfdHhfYnVyc3RfbGltaXQgPSAwOworCWFjeC0+ZHVhbF9jdHNfcHJvdGVjdGlvbiA9IDA7CisKKwlyZXQgPSB3bDEyNzFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX0hUX0JTU19PUEVSQVRJT04sIGFjeCwgc2l6ZW9mKCphY3gpKTsKKworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV93YXJuaW5nKCJhY3ggaHQgaW5mb3JtYXRpb24gc2V0dGluZyBmYWlsZWQ6ICVkIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJa2ZyZWUoYWN4KTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxMjcxX2FjeF90c2ZfaW5mbyhzdHJ1Y3Qgd2wxMjcxICp3bCwgdTY0ICptYWN0aW1lKQoreworCXN0cnVjdCB3bDEyNzFfYWN4X2Z3X3RzZl9pbmZvcm1hdGlvbiAqdHNmX2luZm87CisJaW50IHJldDsKKworCXRzZl9pbmZvID0ga3phbGxvYyhzaXplb2YoKnRzZl9pbmZvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0c2ZfaW5mbykgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSB3bDEyNzFfY21kX2ludGVycm9nYXRlKHdsLCBBQ1hfVFNGX0lORk8sCisJCQkJICAgICB0c2ZfaW5mbywgc2l6ZW9mKCp0c2ZfaW5mbykpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV93YXJuaW5nKCJhY3ggdHNmIGluZm8gaW50ZXJyb2dhdGUgZmFpbGVkIik7CisJCWdvdG8gb3V0OworCX0KKworCSptYWN0aW1lID0gbGUzMl90b19jcHUodHNmX2luZm8tPmN1cnJlbnRfdHNmX2xvdykgfAorCQkoKHU2NCkgbGUzMl90b19jcHUodHNmX2luZm8tPmN1cnJlbnRfdHNmX2hpZ2gpIDw8IDMyKTsKKworb3V0OgorCWtmcmVlKHRzZl9pbmZvKTsKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2FjeC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2FjeC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljYmMzZjQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvYWN4LmgKQEAgLTAsMCArMSwxMTkwIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMjcxCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4LTIwMDkgVGV4YXMgSW5zdHJ1bWVudHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIENvbnRhY3Q6IEx1Y2lhbm8gQ29lbGhvIDxsdWNpYW5vLmNvZWxob0Bub2tpYS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQQorICoKKyAqLworCisjaWZuZGVmIF9fQUNYX0hfXworI2RlZmluZSBfX0FDWF9IX18KKworI2luY2x1ZGUgIndsMTJ4eC5oIgorI2luY2x1ZGUgImNtZC5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgICAgSG9zdCBJbnRlcnJ1cHQgUmVnaXN0ZXIgKFdpTGluayAtPiBIb3N0KQorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEhXIEluaXRpYXRlZCBpbnRlcnJ1cHQgV2F0Y2hkb2cgdGltZXIgZXhwaXJhdGlvbiAqLworI2RlZmluZSBXTDEyNzFfQUNYX0lOVFJfV0FUQ0hET0cgICAgICAgICAgIEJJVCgwKQorLyogSW5pdCBzZXF1ZW5jZSBpcyBkb25lIChtYXNrZWQgaW50ZXJydXB0LCBkZXRlY3Rpb24gdGhyb3VnaCBwb2xsaW5nIG9ubHkgKSAqLworI2RlZmluZSBXTDEyNzFfQUNYX0lOVFJfSU5JVF9DT01QTEVURSAgICAgIEJJVCgxKQorLyogRXZlbnQgd2FzIGVudGVyZWQgdG8gRXZlbnQgTUJPWCAjQSovCisjZGVmaW5lIFdMMTI3MV9BQ1hfSU5UUl9FVkVOVF9BICAgICAgICAgICAgQklUKDIpCisvKiBFdmVudCB3YXMgZW50ZXJlZCB0byBFdmVudCBNQk9YICNCKi8KKyNkZWZpbmUgV0wxMjcxX0FDWF9JTlRSX0VWRU5UX0IgICAgICAgICAgICBCSVQoMykKKy8qIENvbW1hbmQgcHJvY2Vzc2luZyBjb21wbGV0aW9uKi8KKyNkZWZpbmUgV0wxMjcxX0FDWF9JTlRSX0NNRF9DT01QTEVURSAgICAgICBCSVQoNCkKKy8qIFNpZ25hbGluZyB0aGUgaG9zdCBvbiBIVyB3YWtldXAgKi8KKyNkZWZpbmUgV0wxMjcxX0FDWF9JTlRSX0hXX0FWQUlMQUJMRSAgICAgICBCSVQoNSkKKy8qIFRoZSBNSVNDIGJpdCBpcyB1c2VkIGZvciBhZ2dyZWdhdGlvbiBvZiBSWCwgVHhDb21wbGV0ZSBhbmQgVFggcmF0ZSB1cGRhdGUgKi8KKyNkZWZpbmUgV0wxMjcxX0FDWF9JTlRSX0RBVEEgICAgICAgICAgICAgICBCSVQoNikKKy8qIFRyYWNlIG1lYXNzZ2Ugb24gTUJPWCAjQSAqLworI2RlZmluZSBXTDEyNzFfQUNYX0lOVFJfVFJBQ0VfQSAgICAgICAgICAgIEJJVCg3KQorLyogVHJhY2UgbWVhc3NnZSBvbiBNQk9YICNCICovCisjZGVmaW5lIFdMMTI3MV9BQ1hfSU5UUl9UUkFDRV9CICAgICAgICAgICAgQklUKDgpCisKKyNkZWZpbmUgV0wxMjcxX0FDWF9JTlRSX0FMTAkJICAgMHhGRkZGRkZGRgorI2RlZmluZSBXTDEyNzFfQUNYX0FMTF9FVkVOVFNfVkVDVE9SICAgICAgIChXTDEyNzFfQUNYX0lOVFJfV0FUQ0hET0cgICAgICB8IFwKKwkJCQkJICAgIFdMMTI3MV9BQ1hfSU5UUl9JTklUX0NPTVBMRVRFIHwgXAorCQkJCQkgICAgV0wxMjcxX0FDWF9JTlRSX0VWRU5UX0EgICAgICAgfCBcCisJCQkJCSAgICBXTDEyNzFfQUNYX0lOVFJfRVZFTlRfQiAgICAgICB8IFwKKwkJCQkJICAgIFdMMTI3MV9BQ1hfSU5UUl9DTURfQ09NUExFVEUgIHwgXAorCQkJCQkgICAgV0wxMjcxX0FDWF9JTlRSX0hXX0FWQUlMQUJMRSAgfCBcCisJCQkJCSAgICBXTDEyNzFfQUNYX0lOVFJfREFUQSkKKworI2RlZmluZSBXTDEyNzFfSU5UUl9NQVNLICAgICAgICAgICAgICAgICAgIChXTDEyNzFfQUNYX0lOVFJfV0FUQ0hET0cgICAgIHwgXAorCQkJCQkgICAgV0wxMjcxX0FDWF9JTlRSX0VWRU5UX0EgICAgICB8IFwKKwkJCQkJICAgIFdMMTI3MV9BQ1hfSU5UUl9FVkVOVF9CICAgICAgfCBcCisJCQkJCSAgICBXTDEyNzFfQUNYX0lOVFJfSFdfQVZBSUxBQkxFIHwgXAorCQkJCQkgICAgV0wxMjcxX0FDWF9JTlRSX0RBVEEpCisKKy8qIFRhcmdldCdzIGluZm9ybWF0aW9uIGVsZW1lbnQgKi8KK3N0cnVjdCBhY3hfaGVhZGVyIHsKKwlzdHJ1Y3Qgd2wxMjcxX2NtZF9oZWFkZXIgY21kOworCisJLyogYWN4IChvciBpbmZvcm1hdGlvbiBlbGVtZW50KSBoZWFkZXIgKi8KKwlfX2xlMTYgaWQ7CisKKwkvKiBwYXlsb2FkIGxlbmd0aCAobm90IGluY2x1ZGluZyBoZWFkZXJzICovCisJX19sZTE2IGxlbjsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBhY3hfZXJyb3JfY291bnRlciB7CisJc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOworCisJLyogVGhlIG51bWJlciBvZiBQTENQIGVycm9ycyBzaW5jZSB0aGUgbGFzdCB0aW1lIHRoaXMgKi8KKwkvKiBpbmZvcm1hdGlvbiBlbGVtZW50IHdhcyBpbnRlcnJvZ2F0ZWQuIFRoaXMgZmllbGQgaXMgKi8KKwkvKiBhdXRvbWF0aWNhbGx5IGNsZWFyZWQgd2hlbiBpdCBpcyBpbnRlcnJvZ2F0ZWQuKi8KKwlfX2xlMzIgUExDUF9lcnJvcjsKKworCS8qIFRoZSBudW1iZXIgb2YgRkNTIGVycm9ycyBzaW5jZSB0aGUgbGFzdCB0aW1lIHRoaXMgKi8KKwkvKiBpbmZvcm1hdGlvbiBlbGVtZW50IHdhcyBpbnRlcnJvZ2F0ZWQuIFRoaXMgZmllbGQgaXMgKi8KKwkvKiBhdXRvbWF0aWNhbGx5IGNsZWFyZWQgd2hlbiBpdCBpcyBpbnRlcnJvZ2F0ZWQuKi8KKwlfX2xlMzIgRkNTX2Vycm9yOworCisJLyogVGhlIG51bWJlciBvZiBNUERVcyB3aXRob3V0IFBMQ1AgaGVhZGVyIGVycm9ycyByZWNlaXZlZCovCisJLyogc2luY2UgdGhlIGxhc3QgdGltZSB0aGlzIGluZm9ybWF0aW9uIGVsZW1lbnQgd2FzIGludGVycm9nYXRlZC4gKi8KKwkvKiBUaGlzIGZpZWxkIGlzIGF1dG9tYXRpY2FsbHkgY2xlYXJlZCB3aGVuIGl0IGlzIGludGVycm9nYXRlZC4qLworCV9fbGUzMiB2YWxpZF9mcmFtZTsKKworCS8qIHRoZSBudW1iZXIgb2YgbWlzc2VkIHNlcXVlbmNlIG51bWJlcnMgaW4gdGhlIHNxdWVudGlhbGx5ICovCisJLyogdmFsdWVzIG9mIGZyYW1lcyBzZXEgbnVtYmVycyAqLworCV9fbGUzMiBzZXFfbnVtX21pc3M7Cit9IF9fcGFja2VkOworCitlbnVtIHdsMTI3MV9wc21fbW9kZSB7CisJLyogQWN0aXZlIG1vZGUgKi8KKwlXTDEyNzFfUFNNX0NBTSA9IDAsCisKKwkvKiBQb3dlciBzYXZlIG1vZGUgKi8KKwlXTDEyNzFfUFNNX1BTID0gMSwKKworCS8qIEV4dHJlbWUgbG93IHBvd2VyICovCisJV0wxMjcxX1BTTV9FTFAgPSAyLAorfTsKKworc3RydWN0IGFjeF9zbGVlcF9hdXRoIHsKKwlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CisKKwkvKiBUaGUgc2xlZXAgbGV2ZWwgYXV0aG9yaXphdGlvbiBvZiB0aGUgZGV2aWNlLiAqLworCS8qIDAgLSBBbHdheXMgYWN0aXZlKi8KKwkvKiAxIC0gUG93ZXIgZG93biBtb2RlOiBsaWdodCAvIGZhc3Qgc2xlZXAqLworCS8qIDIgLSBFTFAgbW9kZTogRGVlcCAvIE1heCBzbGVlcCovCisJdTggIHNsZWVwX2F1dGg7CisJdTggIHBhZGRpbmdbM107Cit9IF9fcGFja2VkOworCitlbnVtIHsKKwlIT1NUSUZfUENJX01BU1RFUl9IT1NUX0lORElSRUNULAorCUhPU1RJRl9QQ0lfTUFTVEVSX0hPU1RfRElSRUNULAorCUhPU1RJRl9TTEFWRSwKKwlIT1NUSUZfUEtUX1JJTkcsCisJSE9TVElGX0RPTlRDQVJFID0gMHhGRgorfTsKKworI2RlZmluZSBERUZBVUxUX1VDQVNUX1BSSU9SSVRZICAgICAgICAgIDAKKyNkZWZpbmUgREVGQVVMVF9SWF9RX1BSSU9SSVRZICAgICAgICAgICAwCisjZGVmaW5lIERFRkFVTFRfTlVNX1NUQVRJT05TICAgICAgICAgICAgMQorI2RlZmluZSBERUZBVUxUX1JYUV9QUklPUklUWSAgICAgICAgICAgIDAgLyogbG93IDAgLi4gMTUgaGlnaCAgKi8KKyNkZWZpbmUgREVGQVVMVF9SWFFfVFlQRSAgICAgICAgICAgICAgICAweDA3ICAgIC8qIEFsbCBmcmFtZXMsIERhdGEvQ3RybC9NZ210ICovCisjZGVmaW5lIFRSQUNFX0JVRkZFUl9NQVhfU0laRSAgICAgICAgICAgMjU2CisKKyNkZWZpbmUgIERQX1JYX1BBQ0tFVF9SSU5HX0NIVU5LX1NJWkUgMTYwMAorI2RlZmluZSAgRFBfVFhfUEFDS0VUX1JJTkdfQ0hVTktfU0laRSAxNjAwCisjZGVmaW5lICBEUF9SWF9QQUNLRVRfUklOR19DSFVOS19OVU0gMgorI2RlZmluZSAgRFBfVFhfUEFDS0VUX1JJTkdfQ0hVTktfTlVNIDIKKyNkZWZpbmUgIERQX1RYX0NPTVBMRVRFX1RJTUVfT1VUIDIwCisKKyNkZWZpbmUgVFhfTVNEVV9MSUZFVElNRV9NSU4gICAgICAgMAorI2RlZmluZSBUWF9NU0RVX0xJRkVUSU1FX01BWCAgICAgICAzMDAwCisjZGVmaW5lIFRYX01TRFVfTElGRVRJTUVfREVGICAgICAgIDUxMgorI2RlZmluZSBSWF9NU0RVX0xJRkVUSU1FX01JTiAgICAgICAwCisjZGVmaW5lIFJYX01TRFVfTElGRVRJTUVfTUFYICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgUlhfTVNEVV9MSUZFVElNRV9ERUYgICAgICAgNTEyMDAwCisKK3N0cnVjdCBhY3hfcnhfbXNkdV9saWZldGltZSB7CisJc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOworCisJLyoKKwkgKiBUaGUgbWF4aW11bSBhbW91bnQgb2YgdGltZSwgaW4gVFUsIGJlZm9yZSB0aGUKKwkgKiBmaXJtd2FyZSBkaXNjYXJkcyB0aGUgTVNEVS4KKwkgKi8KKwlfX2xlMzIgbGlmZXRpbWU7Cit9IF9fcGFja2VkOworCisvKgorICogUlggQ29uZmlnIE9wdGlvbnMgVGFibGUKKyAqIEJpdAkJRGVmaW5pdGlvbgorICogPT09CQk9PT09PT09PT09CisgKiAzMToxNAkJUmVzZXJ2ZWQKKyAqIDEzCQlDb3B5IFJYIFN0YXR1cyAtIHdoZW4gc2V0LCB3cml0ZSB0aHJlZSByZWNlaXZlIHN0YXR1cyB3b3JkcworICoJCXRvIHRvcCBvZiByeCdkIE1QRFVzLgorICoJCVdoZW4gY2xlYXJlZCwgZG8gbm90IHdyaXRlIHRocmVlIHN0YXR1cyB3b3JkcyAoYWRkZWQgcmV2IDEuNSkKKyAqIDEyCQlSZXNlcnZlZAorICogMTEJCVJYIENvbXBsZXRlIHVwb24gRkNTIGVycm9yIC0gd2hlbiBzZXQsIGdpdmUgcnggY29tcGxldGUKKyAqCQlpbnRlcnJ1cHQgZm9yIEZDUyBlcnJvcnMsIGFmdGVyIHRoZSByeCBmaWx0ZXJpbmcsIGUuZy4gdW5pY2FzdAorICoJCWZyYW1lcyBub3QgdG8gdXMgd2l0aCBGQ1MgZXJyb3Igd2lsbCBub3QgZ2VuZXJhdGUgYW4gaW50ZXJydXB0LgorICogMTAJCVNTSUQgRmlsdGVyIEVuYWJsZSAtIFdoZW4gc2V0LCB0aGUgV2lMaW5rIGRpc2NhcmRzIGFsbCBiZWFjb24sCisgKgkgICAgICAgIHByb2JlIHJlcXVlc3QsIGFuZCBwcm9iZSByZXNwb25zZSBmcmFtZXMgd2l0aCBhbiBTU0lEIHRoYXQgZG9lcworICoJCW5vdCBtYXRjaCB0aGUgU1NJRCBzcGVjaWZpZWQgYnkgdGhlIGhvc3QgaW4gdGhlIFNUQVJUL0pPSU4KKyAqCQljb21tYW5kLgorICoJCVdoZW4gY2xlYXIsIHRoZSBXaUxpbmsgcmVjZWl2ZXMgZnJhbWVzIHdpdGggYW55IFNTSUQuCisgKiA5CQlCcm9hZGNhc3QgRmlsdGVyIEVuYWJsZSAtIFdoZW4gc2V0LCB0aGUgV2lMaW5rIGRpc2NhcmRzIGFsbAorICoJCWJyb2FkY2FzdCBmcmFtZXMuIFdoZW4gY2xlYXIsIHRoZSBXaUxpbmsgcmVjZWl2ZXMgYWxsIHJlY2VpdmVkCisgKgkJYnJvYWRjYXN0IGZyYW1lcy4KKyAqIDg6NgkJUmVzZXJ2ZWQKKyAqIDUJCUJTU0lEIEZpbHRlciBFbmFibGUgLSBXaGVuIHNldCwgdGhlIFdpTGluayBkaXNjYXJkcyBhbnkgZnJhbWVzCisgKgkJd2l0aCBhIEJTU0lEIHRoYXQgZG9lcyBub3QgbWF0Y2ggdGhlIEJTU0lEIHNwZWNpZmllZCBieSB0aGUKKyAqCQlob3N0LgorICoJCVdoZW4gY2xlYXIsIHRoZSBXaUxpbmsgcmVjZWl2ZXMgZnJhbWVzIGZyb20gYW55IEJTU0lELgorICogNAkJTUFDIEFkZHIgRmlsdGVyIC0gV2hlbiBzZXQsIHRoZSBXaUxpbmsgZGlzY2FyZHMgYW55IGZyYW1lcworICoJCXdpdGggYSBkZXN0aW5hdGlvbiBhZGRyZXNzIHRoYXQgZG9lcyBub3QgbWF0Y2ggdGhlIE1BQyBhZGRyZXNzCisgKgkJb2YgdGhlIGFkYXB0b3IuCisgKgkJV2hlbiBjbGVhciwgdGhlIFdpTGluayByZWNlaXZlcyBmcmFtZXMgZGVzdGluZWQgdG8gYW55IE1BQworICoJCWFkZHJlc3MuCisgKiAzCQlQcm9taXNjdW91cyAtIFdoZW4gc2V0LCB0aGUgV2lMaW5rIHJlY2VpdmVzIGFsbCB2YWxpZCBmcmFtZXMKKyAqCQkoaS5lLiwgYWxsIGZyYW1lcyB0aGF0IHBhc3MgdGhlIEZDUyBjaGVjaykuCisgKgkJV2hlbiBjbGVhciwgb25seSBmcmFtZXMgdGhhdCBwYXNzIHRoZSBvdGhlciBmaWx0ZXJzIHNwZWNpZmllZAorICoJCWFyZSByZWNlaXZlZC4KKyAqIDIJCUZDUyAtIFdoZW4gc2V0LCB0aGUgV2lMaW5rIGluY2x1ZGVzIHRoZSBGQ1Mgd2l0aCB0aGUgcmVjZWl2ZWQKKyAqCQlmcmFtZS4KKyAqCQlXaGVuIGNsZWFyZWQsIHRoZSBGQ1MgaXMgZGlzY2FyZGVkLgorICogMQkJUExDUCBoZWFkZXIgLSBXaGVuIHNldCwgd3JpdGUgYWxsIGRhdGEgZnJvbSBiYXNlYmFuZCB0byBmcmFtZQorICoJCWJ1ZmZlciBpbmNsdWRpbmcgUEhZIGhlYWRlci4KKyAqIDAJCVJlc2VydmVkIC0gQWx3YXlzIGVxdWFsIHRvIDAuCisgKgorICogUlggRmlsdGVyIE9wdGlvbnMgVGFibGUKKyAqIEJpdAkJRGVmaW5pdGlvbgorICogPT09CQk9PT09PT09PT09CisgKiAzMToxMgkJUmVzZXJ2ZWQgLSBBbHdheXMgZXF1YWwgdG8gMC4KKyAqIDExCQlBc3NvY2lhdGlvbiAtIFdoZW4gc2V0LCB0aGUgV2lMaW5rIHJlY2VpdmVzIGFsbCBhc3NvY2lhdGlvbgorICoJCXJlbGF0ZWQgZnJhbWVzIChhc3NvY2lhdGlvbiByZXF1ZXN0L3Jlc3BvbnNlLCByZWFzc29jYXRpb24KKyAqCQlyZXF1ZXN0L3Jlc3BvbnNlLCBhbmQgZGlzYXNzb2NpYXRpb24pLiBXaGVuIGNsZWFyLCB0aGVzZSBmcmFtZXMKKyAqCQlhcmUgZGlzY2FyZGVkLgorICogMTAJCUF1dGgvRGUgYXV0aCAtIFdoZW4gc2V0LCB0aGUgV2lMaW5rIHJlY2VpdmVzIGFsbCBhdXRoZW50aWNhdGlvbgorICoJCWFuZCBkZS1hdXRoZW50aWNhdGlvbiBmcmFtZXMuIFdoZW4gY2xlYXIsIHRoZXNlIGZyYW1lcyBhcmUKKyAqCQlkaXNjYXJkZWQuCisgKiA5CQlCZWFjb24gLSBXaGVuIHNldCwgdGhlIFdpTGluayByZWNlaXZlcyBhbGwgYmVhY29uIGZyYW1lcy4KKyAqCQlXaGVuIGNsZWFyLCB0aGVzZSBmcmFtZXMgYXJlIGRpc2NhcmRlZC4KKyAqIDgJCUNvbnRlbnRpb24gRnJlZSAtIFdoZW4gc2V0LCB0aGUgV2lMaW5rIHJlY2VpdmVzIGFsbCBjb250ZW50aW9uCisgKgkJZnJlZSBmcmFtZXMuCisgKgkJV2hlbiBjbGVhciwgdGhlc2UgZnJhbWVzIGFyZSBkaXNjYXJkZWQuCisgKiA3CQlDb250cm9sIC0gV2hlbiBzZXQsIHRoZSBXaUxpbmsgcmVjZWl2ZXMgYWxsIGNvbnRyb2wgZnJhbWVzLgorICoJCVdoZW4gY2xlYXIsIHRoZXNlIGZyYW1lcyBhcmUgZGlzY2FyZGVkLgorICogNgkJRGF0YSAtIFdoZW4gc2V0LCB0aGUgV2lMaW5rIHJlY2VpdmVzIGFsbCBkYXRhIGZyYW1lcy4KKyAqCQlXaGVuIGNsZWFyLCB0aGVzZSBmcmFtZXMgYXJlIGRpc2NhcmRlZC4KKyAqIDUJCUZDUyBFcnJvciAtIFdoZW4gc2V0LCB0aGUgV2lMaW5rIHJlY2VpdmVzIGZyYW1lcyB0aGF0IGhhdmUgRkNTCisgKgkJZXJyb3JzLgorICoJCVdoZW4gY2xlYXIsIHRoZXNlIGZyYW1lcyBhcmUgZGlzY2FyZGVkLgorICogNAkJTWFuYWdlbWVudCAtIFdoZW4gc2V0LCB0aGUgV2lMaW5rIHJlY2VpdmVzIGFsbCBtYW5hZ2VtZW50CisgKgkJZnJhbWVzLgorICoJCVdoZW4gY2xlYXIsIHRoZXNlIGZyYW1lcyBhcmUgZGlzY2FyZGVkLgorICogMwkJUHJvYmUgUmVxdWVzdCAtIFdoZW4gc2V0LCB0aGUgV2lMaW5rIHJlY2VpdmVzIGFsbCBwcm9iZSByZXF1ZXN0CisgKgkJZnJhbWVzLgorICoJCVdoZW4gY2xlYXIsIHRoZXNlIGZyYW1lcyBhcmUgZGlzY2FyZGVkLgorICogMgkJUHJvYmUgUmVzcG9uc2UgLSBXaGVuIHNldCwgdGhlIFdpTGluayByZWNlaXZlcyBhbGwgcHJvYmUKKyAqCQlyZXNwb25zZSBmcmFtZXMuCisgKgkJV2hlbiBjbGVhciwgdGhlc2UgZnJhbWVzIGFyZSBkaXNjYXJkZWQuCisgKiAxCQlSVFMvQ1RTL0FDSyAtIFdoZW4gc2V0LCB0aGUgV2lMaW5rIHJlY2VpdmVzIGFsbCBSVFMsIENUUyBhbmQgQUNLCisgKgkJZnJhbWVzLgorICoJCVdoZW4gY2xlYXIsIHRoZXNlIGZyYW1lcyBhcmUgZGlzY2FyZGVkLgorICogMAkJUnN2ZCBUeXBlL1N1YiBUeXBlIC0gV2hlbiBzZXQsIHRoZSBXaUxpbmsgcmVjZWl2ZXMgYWxsIGZyYW1lcworICoJCXRoYXQgaGF2ZSByZXNlcnZlZCBmcmFtZSB0eXBlcyBhbmQgc3ViIHR5cGVzIGFzIGRlZmluZWQgYnkgdGhlCisgKgkJODAyLjExIHNwZWNpZmljYXRpb24uCisgKgkJV2hlbiBjbGVhciwgdGhlc2UgZnJhbWVzIGFyZSBkaXNjYXJkZWQuCisgKi8KK3N0cnVjdCBhY3hfcnhfY29uZmlnIHsKKwlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CisKKwlfX2xlMzIgY29uZmlnX29wdGlvbnM7CisJX19sZTMyIGZpbHRlcl9vcHRpb25zOworfSBfX3BhY2tlZDsKKworc3RydWN0IGFjeF9wYWNrZXRfZGV0ZWN0aW9uIHsKKwlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CisKKwlfX2xlMzIgdGhyZXNob2xkOworfSBfX3BhY2tlZDsKKworCitlbnVtIGFjeF9zbG90X3R5cGUgeworCVNMT1RfVElNRV9MT05HID0gMCwKKwlTTE9UX1RJTUVfU0hPUlQgPSAxLAorCURFRkFVTFRfU0xPVF9USU1FID0gU0xPVF9USU1FX1NIT1JULAorCU1BWF9TTE9UX1RJTUVTID0gMHhGRgorfTsKKworI2RlZmluZSBTVEFUSU9OX1dPTkVfSU5ERVggMAorCitzdHJ1Y3QgYWN4X3Nsb3QgeworCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKKworCXU4IHdvbmVfaW5kZXg7IC8qIFJlc2VydmVkICovCisJdTggc2xvdF90aW1lOworCXU4IHJlc2VydmVkWzZdOworfSBfX3BhY2tlZDsKKworCisjZGVmaW5lIEFDWF9NQ19BRERSRVNTX0dST1VQX01BWAkoOCkKKyNkZWZpbmUgQUREUkVTU19HUk9VUF9NQVhfTEVOCSAgICAgICAgKEVUSF9BTEVOICogQUNYX01DX0FERFJFU1NfR1JPVVBfTUFYKQorCitzdHJ1Y3QgYWN4X2RvdDExX2dycF9hZGRyX3RibCB7CisJc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOworCisJdTggZW5hYmxlZDsKKwl1OCBudW1fZ3JvdXBzOworCXU4IHBhZFsyXTsKKwl1OCBtYWNfdGFibGVbQUREUkVTU19HUk9VUF9NQVhfTEVOXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBhY3hfcnhfdGltZW91dCB7CisJc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOworCisJX19sZTE2IHBzX3BvbGxfdGltZW91dDsKKwlfX2xlMTYgdXBzZF90aW1lb3V0OworfSBfX3BhY2tlZDsKKworc3RydWN0IGFjeF9ydHNfdGhyZXNob2xkIHsKKwlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CisKKwlfX2xlMTYgdGhyZXNob2xkOworCXU4IHBhZFsyXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBhY3hfYmVhY29uX2ZpbHRlcl9vcHRpb24geworCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKKworCXU4IGVuYWJsZTsKKworCS8qCisJICogVGhlIG51bWJlciBvZiBiZWFjb25zIHdpdGhvdXQgdGhlIHVuaWNhc3QgVElNCisJICogYml0IHNldCB0aGF0IHRoZSBmaXJtd2FyZSBidWZmZXJzIGJlZm9yZQorCSAqIHNpZ25hbGluZyB0aGUgaG9zdCBhYm91dCByZWFkeSBmcmFtZXMuCisJICogV2hlbiBzZXQgdG8gMCBhbmQgdGhlIGZpbHRlciBpcyBlbmFibGVkLCBiZWFjb25zCisJICogd2l0aG91dCB0aGUgdW5pY2FzdCBUSU0gYml0IHNldCBhcmUgZHJvcHBlZC4KKwkgKi8KKwl1OCBtYXhfbnVtX2JlYWNvbnM7CisJdTggcGFkWzJdOworfSBfX3BhY2tlZDsKKworLyoKKyAqIEFDWEJlYWNvbkZpbHRlckVudHJ5IChub3QgMjIxKQorICogQnl0ZSBPZmZzZXQgICAgIFNpemUgKEJ5dGVzKSAgICBEZWZpbml0aW9uCisgKiA9PT09PT09PT09PSAgICAgPT09PT09PT09PT09ICAgID09PT09PT09PT0KKyAqIDAgICAgICAgICAgICAgICAxICAgICAgICAgICAgICAgSUUgaWRlbnRpZmllcgorICogMSAgICAgICAgICAgICAgIDEgICAgICAgICAgICAgICBUcmVhdG1lbnQgYml0IG1hc2sKKyAqCisgKiBBQ1hCZWFjb25GaWx0ZXJFbnRyeSAoMjIxKQorICogQnl0ZSBPZmZzZXQgICAgIFNpemUgKEJ5dGVzKSAgICBEZWZpbml0aW9uCisgKiA9PT09PT09PT09PSAgICAgPT09PT09PT09PT09ICAgID09PT09PT09PT0KKyAqIDAgICAgICAgICAgICAgICAxICAgICAgICAgICAgICAgSUUgaWRlbnRpZmllcgorICogMSAgICAgICAgICAgICAgIDEgICAgICAgICAgICAgICBUcmVhdG1lbnQgYml0IG1hc2sKKyAqIDIgICAgICAgICAgICAgICAzICAgICAgICAgICAgICAgT1VJCisgKiA1ICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgIFR5cGUKKyAqIDYgICAgICAgICAgICAgICAyICAgICAgICAgICAgICAgVmVyc2lvbgorICoKKyAqCisgKiBUcmVhdG1lbnQgYml0IG1hc2sgLSBUaGUgaW5mb3JtYXRpb24gZWxlbWVudCBoYW5kbGluZzoKKyAqIGJpdCAwIC0gVGhlIGluZm9ybWF0aW9uIGVsZW1lbnQgaXMgY29tcGFyZWQgYW5kIHRyYW5zZmVycmVkCisgKiBpbiBjYXNlIG9mIGNoYW5nZS4KKyAqIGJpdCAxIC0gVGhlIGluZm9ybWF0aW9uIGVsZW1lbnQgaXMgdHJhbnNmZXJyZWQgdG8gdGhlIGhvc3QKKyAqIHdpdGggZWFjaCBhcHBlYXJhbmNlIG9yIGRpc2FwcGVhcmFuY2UuCisgKiBOb3RlIHRoYXQgYm90aCBiaXRzIGNhbiBiZSBzZXQgYXQgdGhlIHNhbWUgdGltZS4KKyAqLworI2RlZmluZQlCRUFDT05fRklMVEVSX1RBQkxFX01BWF9JRV9OVU0JCSAgICAgICAoMzIpCisjZGVmaW5lIEJFQUNPTl9GSUxURVJfVEFCTEVfTUFYX1ZFTkRPUl9TUEVDSUZJQ19JRV9OVU0gKDYpCisjZGVmaW5lIEJFQUNPTl9GSUxURVJfVEFCTEVfSUVfRU5UUllfU0laRQkgICAgICAgKDIpCisjZGVmaW5lIEJFQUNPTl9GSUxURVJfVEFCTEVfRVhUUkFfVkVORE9SX1NQRUNJRklDX0lFX1NJWkUgKDYpCisjZGVmaW5lIEJFQUNPTl9GSUxURVJfVEFCTEVfTUFYX1NJWkUgKChCRUFDT05fRklMVEVSX1RBQkxFX01BWF9JRV9OVU0gKiBcCisJCQkgICAgQkVBQ09OX0ZJTFRFUl9UQUJMRV9JRV9FTlRSWV9TSVpFKSArIFwKKwkJCSAgIChCRUFDT05fRklMVEVSX1RBQkxFX01BWF9WRU5ET1JfU1BFQ0lGSUNfSUVfTlVNICogXAorCQkJICAgIEJFQUNPTl9GSUxURVJfVEFCTEVfRVhUUkFfVkVORE9SX1NQRUNJRklDX0lFX1NJWkUpKQorCitzdHJ1Y3QgYWN4X2JlYWNvbl9maWx0ZXJfaWVfdGFibGUgeworCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKKworCXU4IG51bV9pZTsKKwl1OCBwYWRbM107CisJdTggdGFibGVbQkVBQ09OX0ZJTFRFUl9UQUJMRV9NQVhfU0laRV07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgYWN4X2Nvbm5fbW9uaXRfcGFyYW1zIHsKKyAgICAgICBzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CisKKyAgICAgICBfX2xlMzIgc3luY2hfZmFpbF90aG9sZDsgLyogbnVtYmVyIG9mIGJlYWNvbnMgbWlzc2VkICovCisgICAgICAgX19sZTMyIGJzc19sb3NlX3RpbWVvdXQ7IC8qIG51bWJlciBvZiBUVSdzIGZyb20gc3luY2ggZmFpbCAqLworfSBfX3BhY2tlZDsKKworc3RydWN0IGFjeF9idF93bGFuX2NvZXggeworCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKKworCXU4IGVuYWJsZTsKKwl1OCBwYWRbM107Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgYWN4X2J0X3dsYW5fY29leF9wYXJhbSB7CisJc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOworCisJX19sZTMyIHBhcmFtc1tDT05GX1NHX1BBUkFNU19NQVhdOworCXU4IHBhcmFtX2lkeDsKKwl1OCBwYWRkaW5nWzNdOworfSBfX3BhY2tlZDsKKworc3RydWN0IGFjeF9kY29faXRyaW1fcGFyYW1zIHsKKwlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CisKKwl1OCBlbmFibGU7CisJdTggcGFkZGluZ1szXTsKKwlfX2xlMzIgdGltZW91dDsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBhY3hfZW5lcmd5X2RldGVjdGlvbiB7CisJc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOworCisJLyogVGhlIFJYIENsZWFyIENoYW5uZWwgQXNzZXNzbWVudCB0aHJlc2hvbGQgaW4gdGhlIFBIWSAqLworCV9fbGUxNiByeF9jY2FfdGhyZXNob2xkOworCXU4IHR4X2VuZXJneV9kZXRlY3Rpb247CisJdTggcGFkOworfSBfX3BhY2tlZDsKKworc3RydWN0IGFjeF9iZWFjb25fYnJvYWRjYXN0IHsKKwlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CisKKwlfX2xlMTYgYmVhY29uX3J4X3RpbWVvdXQ7CisJX19sZTE2IGJyb2FkY2FzdF90aW1lb3V0OworCisJLyogRW5hYmxlcyByZWNlaXZpbmcgb2YgYnJvYWRjYXN0IHBhY2tldHMgaW4gUFMgbW9kZSAqLworCXU4IHJ4X2Jyb2FkY2FzdF9pbl9wczsKKworCS8qIENvbnNlY3V0aXZlIFBTIFBvbGwgZmFpbHVyZXMgYmVmb3JlIHVwZGF0aW5nIHRoZSBob3N0ICovCisJdTggcHNfcG9sbF90aHJlc2hvbGQ7CisJdTggcGFkWzJdOworfSBfX3BhY2tlZDsKKworc3RydWN0IGFjeF9ldmVudF9tYXNrIHsKKwlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CisKKwlfX2xlMzIgZXZlbnRfbWFzazsKKwlfX2xlMzIgaGlnaF9ldmVudF9tYXNrOyAvKiBVbnVzZWQgKi8KK30gX19wYWNrZWQ7CisKKyNkZWZpbmUgQ0ZHX1JYX0ZDUwkJQklUKDIpCisjZGVmaW5lIENGR19SWF9BTExfR09PRAkJQklUKDMpCisjZGVmaW5lIENGR19VTklfRklMVEVSX0VOCUJJVCg0KQorI2RlZmluZSBDRkdfQlNTSURfRklMVEVSX0VOCUJJVCg1KQorI2RlZmluZSBDRkdfTUNfRklMVEVSX0VOCUJJVCg2KQorI2RlZmluZSBDRkdfTUNfQUREUjBfRU4JCUJJVCg3KQorI2RlZmluZSBDRkdfTUNfQUREUjFfRU4JCUJJVCg4KQorI2RlZmluZSBDRkdfQkNfUkVKRUNUX0VOCUJJVCg5KQorI2RlZmluZSBDRkdfU1NJRF9GSUxURVJfRU4JQklUKDEwKQorI2RlZmluZSBDRkdfUlhfSU5UX0ZDU19FUlJPUglCSVQoMTEpCisjZGVmaW5lIENGR19SWF9JTlRfRU5DUllQVEVECUJJVCgxMikKKyNkZWZpbmUgQ0ZHX1JYX1dSX1JYX1NUQVRVUwlCSVQoMTMpCisjZGVmaW5lIENGR19SWF9GSUxURVJfTlVMVEkJQklUKDE0KQorI2RlZmluZSBDRkdfUlhfUkVTRVJWRQkJQklUKDE1KQorI2RlZmluZSBDRkdfUlhfVElNRVNUQU1QX1RTRglCSVQoMTYpCisKKyNkZWZpbmUgQ0ZHX1JYX1JTVl9FTgkJQklUKDApCisjZGVmaW5lIENGR19SWF9SQ1RTX0FDSwkJQklUKDEpCisjZGVmaW5lIENGR19SWF9QUlNQX0VOCQlCSVQoMikKKyNkZWZpbmUgQ0ZHX1JYX1BSRVFfRU4JCUJJVCgzKQorI2RlZmluZSBDRkdfUlhfTUdNVF9FTgkJQklUKDQpCisjZGVmaW5lIENGR19SWF9GQ1NfRVJST1IJQklUKDUpCisjZGVmaW5lIENGR19SWF9EQVRBX0VOCQlCSVQoNikKKyNkZWZpbmUgQ0ZHX1JYX0NUTF9FTgkJQklUKDcpCisjZGVmaW5lIENGR19SWF9DRl9FTgkJQklUKDgpCisjZGVmaW5lIENGR19SWF9CQ05fRU4JCUJJVCg5KQorI2RlZmluZSBDRkdfUlhfQVVUSF9FTgkJQklUKDEwKQorI2RlZmluZSBDRkdfUlhfQVNTT0NfRU4JCUJJVCgxMSkKKworI2RlZmluZSBTQ0FOX1BBU1NJVkUJCUJJVCgwKQorI2RlZmluZSBTQ0FOXzVHSFpfQkFORAkJQklUKDEpCisjZGVmaW5lIFNDQU5fVFJJR0dFUkVECQlCSVQoMikKKyNkZWZpbmUgU0NBTl9QUklPUklUWV9ISUdICUJJVCgzKQorCisvKiBXaGVuIHNldCwgZGlzYWJsZSBIVyBlbmNyeXB0aW9uICovCisjZGVmaW5lIERGX0VOQ1JZUFRJT05fRElTQUJMRSAgICAgIDB4MDEKKyNkZWZpbmUgREZfU05JRkZfTU9ERV9FTkFCTEUgICAgICAgMHg4MAorCitzdHJ1Y3QgYWN4X2ZlYXR1cmVfY29uZmlnIHsKKwlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CisKKwlfX2xlMzIgb3B0aW9uczsKKwlfX2xlMzIgZGF0YV9mbG93X29wdGlvbnM7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgYWN4X2N1cnJlbnRfdHhfcG93ZXIgeworCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKKworCXU4ICBjdXJyZW50X3R4X3Bvd2VyOworCXU4ICBwYWRkaW5nWzNdOworfSBfX3BhY2tlZDsKKworc3RydWN0IGFjeF93YWtlX3VwX2NvbmRpdGlvbiB7CisJc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOworCisJdTggd2FrZV91cF9ldmVudDsgLyogT25seSBvbmUgYml0IGNhbiBiZSBzZXQgKi8KKwl1OCBsaXN0ZW5faW50ZXJ2YWw7CisJdTggcGFkWzJdOworfSBfX3BhY2tlZDsKKworc3RydWN0IGFjeF9haWQgeworCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKKworCS8qCisJICogVG8gYmUgc2V0IHdoZW4gYXNzb2NpYXRlZCB3aXRoIGFuIEFQLgorCSAqLworCV9fbGUxNiBhaWQ7CisJdTggcGFkWzJdOworfSBfX3BhY2tlZDsKKworZW51bSBhY3hfcHJlYW1ibGVfdHlwZSB7CisJQUNYX1BSRUFNQkxFX0xPTkcgPSAwLAorCUFDWF9QUkVBTUJMRV9TSE9SVCA9IDEKK307CisKK3N0cnVjdCBhY3hfcHJlYW1ibGUgeworCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKKworCS8qCisJICogV2hlbiBzZXQsIHRoZSBXaUxpbmsgdHJhbnNtaXRzIHRoZSBmcmFtZXMgd2l0aCBhIHNob3J0IHByZWFtYmxlIGFuZAorCSAqIHdoZW4gY2xlYXJlZCwgdGhlIFdpTGluayB0cmFuc21pdHMgdGhlIGZyYW1lcyB3aXRoIGEgbG9uZyBwcmVhbWJsZS4KKwkgKi8KKwl1OCBwcmVhbWJsZTsKKwl1OCBwYWRkaW5nWzNdOworfSBfX3BhY2tlZDsKKworZW51bSBhY3hfY3RzcHJvdGVjdF90eXBlIHsKKwlDVFNQUk9URUNUX0RJU0FCTEUgPSAwLAorCUNUU1BST1RFQ1RfRU5BQkxFID0gMQorfTsKKworc3RydWN0IGFjeF9jdHNwcm90ZWN0IHsKKwlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CisJdTggY3RzcHJvdGVjdDsKKwl1OCBwYWRkaW5nWzNdOworfSBfX3BhY2tlZDsKKworc3RydWN0IGFjeF90eF9zdGF0aXN0aWNzIHsKKwlfX2xlMzIgaW50ZXJuYWxfZGVzY19vdmVyZmxvdzsKK30gIF9fcGFja2VkOworCitzdHJ1Y3QgYWN4X3J4X3N0YXRpc3RpY3MgeworCV9fbGUzMiBvdXRfb2ZfbWVtOworCV9fbGUzMiBoZHJfb3ZlcmZsb3c7CisJX19sZTMyIGh3X3N0dWNrOworCV9fbGUzMiBkcm9wcGVkOworCV9fbGUzMiBmY3NfZXJyOworCV9fbGUzMiB4ZnJfaGludF90cmlnOworCV9fbGUzMiBwYXRoX3Jlc2V0OworCV9fbGUzMiByZXNldF9jb3VudGVyOworfSBfX3BhY2tlZDsKKworc3RydWN0IGFjeF9kbWFfc3RhdGlzdGljcyB7CisJX19sZTMyIHJ4X3JlcXVlc3RlZDsKKwlfX2xlMzIgcnhfZXJyb3JzOworCV9fbGUzMiB0eF9yZXF1ZXN0ZWQ7CisJX19sZTMyIHR4X2Vycm9yczsKK30gIF9fcGFja2VkOworCitzdHJ1Y3QgYWN4X2lzcl9zdGF0aXN0aWNzIHsKKwkvKiBob3N0IGNvbW1hbmQgY29tcGxldGUgKi8KKwlfX2xlMzIgY21kX2NtcGx0OworCisJLyogZmlxaXNyKCkgKi8KKwlfX2xlMzIgZmlxczsKKworCS8qIChJTlRfU1RTX05EICYgSU5UX1RSSUdfUlhfSEVBREVSKSAqLworCV9fbGUzMiByeF9oZWFkZXJzOworCisJLyogKElOVF9TVFNfTkQgJiBJTlRfVFJJR19SWF9DTVBMVCkgKi8KKwlfX2xlMzIgcnhfY29tcGxldGVzOworCisJLyogKElOVF9TVFNfTkQgJiBJTlRfVFJJR19OT19SWF9CVUYpICovCisJX19sZTMyIHJ4X21lbV9vdmVyZmxvdzsKKworCS8qIChJTlRfU1RTX05EICYgSU5UX1RSSUdfU19SWF9SRFkpICovCisJX19sZTMyIHJ4X3JkeXM7CisKKwkvKiBpcnFpc3IoKSAqLworCV9fbGUzMiBpcnFzOworCisJLyogKElOVF9TVFNfTkQgJiBJTlRfVFJJR19UWF9QUk9DKSAqLworCV9fbGUzMiB0eF9wcm9jczsKKworCS8qIChJTlRfU1RTX05EICYgSU5UX1RSSUdfREVDUllQVF9ET05FKSAqLworCV9fbGUzMiBkZWNyeXB0X2RvbmU7CisKKwkvKiAoSU5UX1NUU19ORCAmIElOVF9UUklHX0RNQTApICovCisJX19sZTMyIGRtYTBfZG9uZTsKKworCS8qIChJTlRfU1RTX05EICYgSU5UX1RSSUdfRE1BMSkgKi8KKwlfX2xlMzIgZG1hMV9kb25lOworCisJLyogKElOVF9TVFNfTkQgJiBJTlRfVFJJR19UWF9FWENfQ01QTFQpICovCisJX19sZTMyIHR4X2V4Y2hfY29tcGxldGU7CisKKwkvKiAoSU5UX1NUU19ORCAmIElOVF9UUklHX0NPTU1BTkQpICovCisJX19sZTMyIGNvbW1hbmRzOworCisJLyogKElOVF9TVFNfTkQgJiBJTlRfVFJJR19SWF9QUk9DKSAqLworCV9fbGUzMiByeF9wcm9jczsKKworCS8qIChJTlRfU1RTX05EICYgSU5UX1RSSUdfUE1fODAyKSAqLworCV9fbGUzMiBod19wbV9tb2RlX2NoYW5nZXM7CisKKwkvKiAoSU5UX1NUU19ORCAmIElOVF9UUklHX0FDS05PV0xFREdFKSAqLworCV9fbGUzMiBob3N0X2Fja25vd2xlZGdlczsKKworCS8qIChJTlRfU1RTX05EICYgSU5UX1RSSUdfUE1fUENJKSAqLworCV9fbGUzMiBwY2lfcG07CisKKwkvKiAoSU5UX1NUU19ORCAmIElOVF9UUklHX0FDTV9XQUtFVVApICovCisJX19sZTMyIHdha2V1cHM7CisKKwkvKiAoSU5UX1NUU19ORCAmIElOVF9UUklHX0xPV19SU1NJKSAqLworCV9fbGUzMiBsb3dfcnNzaTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBhY3hfd2VwX3N0YXRpc3RpY3MgeworCS8qIFdFUCBhZGRyZXNzIGtleXMgY29uZmlndXJlZCAqLworCV9fbGUzMiBhZGRyX2tleV9jb3VudDsKKworCS8qIGRlZmF1bHQga2V5cyBjb25maWd1cmVkICovCisJX19sZTMyIGRlZmF1bHRfa2V5X2NvdW50OworCisJX19sZTMyIHJlc2VydmVkOworCisJLyogbnVtYmVyIG9mIHRpbWVzIHRoYXQgV0VQIGtleSBub3QgZm91bmQgb24gbG9va3VwICovCisJX19sZTMyIGtleV9ub3RfZm91bmQ7CisKKwkvKiBudW1iZXIgb2YgdGltZXMgdGhhdCBXRVAga2V5IGRlY3J5cHRpb24gZmFpbGVkICovCisJX19sZTMyIGRlY3J5cHRfZmFpbDsKKworCS8qIFdFUCBwYWNrZXRzIGRlY3J5cHRlZCAqLworCV9fbGUzMiBwYWNrZXRzOworCisJLyogV0VQIGRlY3J5cHQgaW50ZXJydXB0cyAqLworCV9fbGUzMiBpbnRlcnJ1cHQ7Cit9IF9fcGFja2VkOworCisjZGVmaW5lIEFDWF9NSVNTRURfQkVBQ09OU19TUFJFQUQgMTAKKworc3RydWN0IGFjeF9wd3Jfc3RhdGlzdGljcyB7CisJLyogdGhlIGFtb3VudCBvZiBlbnRlcnMgaW50byBwb3dlciBzYXZlIG1vZGUgKGJvdGggUEQgJiBFTFApICovCisJX19sZTMyIHBzX2VudGVyOworCisJLyogdGhlIGFtb3VudCBvZiBlbnRlcnMgaW50byBFTFAgbW9kZSAqLworCV9fbGUzMiBlbHBfZW50ZXI7CisKKwkvKiB0aGUgYW1vdW50IG9mIG1pc3NpbmcgYmVhY29uIGludGVycnVwdHMgdG8gdGhlIGhvc3QgKi8KKwlfX2xlMzIgbWlzc2luZ19iY25zOworCisJLyogdGhlIGFtb3VudCBvZiB3YWtlIG9uIGhvc3QtYWNjZXNzIHRpbWVzICovCisJX19sZTMyIHdha2Vfb25faG9zdDsKKworCS8qIHRoZSBhbW91bnQgb2Ygd2FrZSBvbiB0aW1lci1leHBpcmUgKi8KKwlfX2xlMzIgd2FrZV9vbl90aW1lcl9leHA7CisKKwkvKiB0aGUgbnVtYmVyIG9mIHBhY2tldHMgdGhhdCB3ZXJlIHRyYW5zbWl0dGVkIHdpdGggUFMgYml0IHNldCAqLworCV9fbGUzMiB0eF93aXRoX3BzOworCisJLyogdGhlIG51bWJlciBvZiBwYWNrZXRzIHRoYXQgd2VyZSB0cmFuc21pdHRlZCB3aXRoIFBTIGJpdCBjbGVhciAqLworCV9fbGUzMiB0eF93aXRob3V0X3BzOworCisJLyogdGhlIG51bWJlciBvZiByZWNlaXZlZCBiZWFjb25zICovCisJX19sZTMyIHJjdmRfYmVhY29uczsKKworCS8qIHRoZSBudW1iZXIgb2YgZW50ZXJpbmcgaW50byBQb3dlck9uIChwb3dlciBzYXZlIG9mZikgKi8KKwlfX2xlMzIgcG93ZXJfc2F2ZV9vZmY7CisKKwkvKiB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW50byBwb3dlciBzYXZlIG1vZGUgKi8KKwlfX2xlMTYgZW5hYmxlX3BzOworCisJLyoKKwkgKiB0aGUgbnVtYmVyIG9mIGV4aXRzIGZyb20gcG93ZXIgc2F2ZSwgbm90IGluY2x1ZGluZyBmYWlsZWQgUFMKKwkgKiB0cmFuc2l0aW9ucworCSAqLworCV9fbGUxNiBkaXNhYmxlX3BzOworCisJLyoKKwkgKiB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoZSBUU0YgY291bnRlciB3YXMgYWRqdXN0ZWQgYmVjYXVzZQorCSAqIG9mIGRyaWZ0CisJICovCisJX19sZTMyIGZpeF90c2ZfcHM7CisKKwkvKiBHaXZlcyBzdGF0aXN0aWNzIGFib3V0IHRoZSBzcHJlYWQgY29udGludW91cyBtaXNzZWQgYmVhY29ucy4KKwkgKiBUaGUgMTYgTFNCIGFyZSBkZWRpY2F0ZWQgZm9yIHRoZSBQUyBtb2RlLgorCSAqIFRoZSAxNiBNU0IgYXJlIGRlZGljYXRlZCBmb3IgdGhlIFBTIG1vZGUuCisJICogY29udF9taXNzX2JjbnNfc3ByZWFkWzBdIC0gc2luZ2xlIG1pc3NlZCBiZWFjb24uCisJICogY29udF9taXNzX2JjbnNfc3ByZWFkWzFdIC0gdHdvIGNvbnRpbnVvdXMgbWlzc2VkIGJlYWNvbnMuCisJICogY29udF9taXNzX2JjbnNfc3ByZWFkWzJdIC0gdGhyZWUgY29udGludW91cyBtaXNzZWQgYmVhY29ucy4KKwkgKiAuLi4KKwkgKiBjb250X21pc3NfYmNuc19zcHJlYWRbOV0gLSB0ZW4gYW5kIG1vcmUgY29udGludW91cyBtaXNzZWQgYmVhY29ucy4KKwkqLworCV9fbGUzMiBjb250X21pc3NfYmNuc19zcHJlYWRbQUNYX01JU1NFRF9CRUFDT05TX1NQUkVBRF07CisKKwkvKiB0aGUgbnVtYmVyIG9mIGJlYWNvbnMgaW4gYXdha2UgbW9kZSAqLworCV9fbGUzMiByY3ZkX2F3YWtlX2JlYWNvbnM7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgYWN4X21pY19zdGF0aXN0aWNzIHsKKwlfX2xlMzIgcnhfcGt0czsKKwlfX2xlMzIgY2FsY19mYWlsdXJlOworfSBfX3BhY2tlZDsKKworc3RydWN0IGFjeF9hZXNfc3RhdGlzdGljcyB7CisJX19sZTMyIGVuY3J5cHRfZmFpbDsKKwlfX2xlMzIgZGVjcnlwdF9mYWlsOworCV9fbGUzMiBlbmNyeXB0X3BhY2tldHM7CisJX19sZTMyIGRlY3J5cHRfcGFja2V0czsKKwlfX2xlMzIgZW5jcnlwdF9pbnRlcnJ1cHQ7CisJX19sZTMyIGRlY3J5cHRfaW50ZXJydXB0OworfSBfX3BhY2tlZDsKKworc3RydWN0IGFjeF9ldmVudF9zdGF0aXN0aWNzIHsKKwlfX2xlMzIgaGVhcnRfYmVhdDsKKwlfX2xlMzIgY2FsaWJyYXRpb247CisJX19sZTMyIHJ4X21pc21hdGNoOworCV9fbGUzMiByeF9tZW1fZW1wdHk7CisJX19sZTMyIHJ4X3Bvb2w7CisJX19sZTMyIG9vbV9sYXRlOworCV9fbGUzMiBwaHlfdHJhbnNtaXRfZXJyb3I7CisJX19sZTMyIHR4X3N0dWNrOworfSBfX3BhY2tlZDsKKworc3RydWN0IGFjeF9wc19zdGF0aXN0aWNzIHsKKwlfX2xlMzIgcHNwb2xsX3RpbWVvdXRzOworCV9fbGUzMiB1cHNkX3RpbWVvdXRzOworCV9fbGUzMiB1cHNkX21heF9zcHRpbWU7CisJX19sZTMyIHVwc2RfbWF4X2FwdHVybjsKKwlfX2xlMzIgcHNwb2xsX21heF9hcHR1cm47CisJX19sZTMyIHBzcG9sbF91dGlsaXphdGlvbjsKKwlfX2xlMzIgdXBzZF91dGlsaXphdGlvbjsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBhY3hfcnhwaXBlX3N0YXRpc3RpY3MgeworCV9fbGUzMiByeF9wcmVwX2JlYWNvbl9kcm9wOworCV9fbGUzMiBkZXNjcl9ob3N0X2ludF90cmlnX3J4X2RhdGE7CisJX19sZTMyIGJlYWNvbl9idWZmZXJfdGhyZXNfaG9zdF9pbnRfdHJpZ19yeF9kYXRhOworCV9fbGUzMiBtaXNzZWRfYmVhY29uX2hvc3RfaW50X3RyaWdfcnhfZGF0YTsKKwlfX2xlMzIgdHhfeGZyX2hvc3RfaW50X3RyaWdfcnhfZGF0YTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBhY3hfc3RhdGlzdGljcyB7CisJc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOworCisJc3RydWN0IGFjeF90eF9zdGF0aXN0aWNzIHR4OworCXN0cnVjdCBhY3hfcnhfc3RhdGlzdGljcyByeDsKKwlzdHJ1Y3QgYWN4X2RtYV9zdGF0aXN0aWNzIGRtYTsKKwlzdHJ1Y3QgYWN4X2lzcl9zdGF0aXN0aWNzIGlzcjsKKwlzdHJ1Y3QgYWN4X3dlcF9zdGF0aXN0aWNzIHdlcDsKKwlzdHJ1Y3QgYWN4X3B3cl9zdGF0aXN0aWNzIHB3cjsKKwlzdHJ1Y3QgYWN4X2Flc19zdGF0aXN0aWNzIGFlczsKKwlzdHJ1Y3QgYWN4X21pY19zdGF0aXN0aWNzIG1pYzsKKwlzdHJ1Y3QgYWN4X2V2ZW50X3N0YXRpc3RpY3MgZXZlbnQ7CisJc3RydWN0IGFjeF9wc19zdGF0aXN0aWNzIHBzOworCXN0cnVjdCBhY3hfcnhwaXBlX3N0YXRpc3RpY3MgcnhwaXBlOworfSBfX3BhY2tlZDsKKworc3RydWN0IGFjeF9yYXRlX2NsYXNzIHsKKwlfX2xlMzIgZW5hYmxlZF9yYXRlczsKKwl1OCBzaG9ydF9yZXRyeV9saW1pdDsKKwl1OCBsb25nX3JldHJ5X2xpbWl0OworCXU4IGFmbGFnczsKKwl1OCByZXNlcnZlZDsKK307CisKKyNkZWZpbmUgQUNYX1RYX0JBU0lDX1JBVEUgICAgICAwCisjZGVmaW5lIEFDWF9UWF9BUF9GVUxMX1JBVEUgICAgMQorI2RlZmluZSBBQ1hfVFhfUkFURV9QT0xJQ1lfQ05UIDIKK3N0cnVjdCBhY3hfcmF0ZV9wb2xpY3kgeworCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKKworCV9fbGUzMiByYXRlX2NsYXNzX2NudDsKKwlzdHJ1Y3QgYWN4X3JhdGVfY2xhc3MgcmF0ZV9jbGFzc1tDT05GX1RYX01BWF9SQVRFX0NMQVNTRVNdOworfSBfX3BhY2tlZDsKKworc3RydWN0IGFjeF9hY19jZmcgeworCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKKwl1OCBhYzsKKwl1OCBjd19taW47CisJX19sZTE2IGN3X21heDsKKwl1OCBhaWZzbjsKKwl1OCByZXNlcnZlZDsKKwlfX2xlMTYgdHhfb3BfbGltaXQ7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgYWN4X3RpZF9jb25maWcgeworCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKKwl1OCBxdWV1ZV9pZDsKKwl1OCBjaGFubmVsX3R5cGU7CisJdTggdHNpZDsKKwl1OCBwc19zY2hlbWU7CisJdTggYWNrX3BvbGljeTsKKwl1OCBwYWRkaW5nWzNdOworCV9fbGUzMiBhcHNkX2NvbmZbMl07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgYWN4X2ZyYWdfdGhyZXNob2xkIHsKKwlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CisJX19sZTE2IGZyYWdfdGhyZXNob2xkOworCXU4IHBhZGRpbmdbMl07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgYWN4X3R4X2NvbmZpZ19vcHRpb25zIHsKKwlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CisJX19sZTE2IHR4X2NvbXBsX3RpbWVvdXQ7ICAgICAvKiBtc2VjICovCisJX19sZTE2IHR4X2NvbXBsX3RocmVzaG9sZDsgICAvKiBudW1iZXIgb2YgcGFja2V0cyAqLworfSBfX3BhY2tlZDsKKworI2RlZmluZSBBQ1hfUlhfTUVNX0JMT0NLUyAgICAgNzAKKyNkZWZpbmUgQUNYX1RYX01JTl9NRU1fQkxPQ0tTIDQwCisjZGVmaW5lIEFDWF9UWF9ERVNDUklQVE9SUyAgICAzMgorI2RlZmluZSBBQ1hfTlVNX1NTSURfUFJPRklMRVMgMQorCitzdHJ1Y3Qgd2wxMjcxX2FjeF9jb25maWdfbWVtb3J5IHsKKwlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CisKKwl1OCByeF9tZW1fYmxvY2tfbnVtOworCXU4IHR4X21pbl9tZW1fYmxvY2tfbnVtOworCXU4IG51bV9zdGF0aW9uczsKKwl1OCBudW1fc3NpZF9wcm9maWxlczsKKwlfX2xlMzIgdG90YWxfdHhfZGVzY3JpcHRvcnM7Cit9IF9fcGFja2VkOworCitzdHJ1Y3Qgd2wxMjcxX2FjeF9tZW1fbWFwIHsKKwlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CisKKwlfX2xlMzIgY29kZV9zdGFydDsKKwlfX2xlMzIgY29kZV9lbmQ7CisKKwlfX2xlMzIgd2VwX2RlZmtleV9zdGFydDsKKwlfX2xlMzIgd2VwX2RlZmtleV9lbmQ7CisKKwlfX2xlMzIgc3RhX3RhYmxlX3N0YXJ0OworCV9fbGUzMiBzdGFfdGFibGVfZW5kOworCisJX19sZTMyIHBhY2tldF90ZW1wbGF0ZV9zdGFydDsKKwlfX2xlMzIgcGFja2V0X3RlbXBsYXRlX2VuZDsKKworCS8qIEFkZHJlc3Mgb2YgdGhlIFRYIHJlc3VsdCBpbnRlcmZhY2UgKGNvbnRyb2wgYmxvY2spICovCisJX19sZTMyIHR4X3Jlc3VsdDsKKwlfX2xlMzIgdHhfcmVzdWx0X3F1ZXVlX3N0YXJ0OworCisJX19sZTMyIHF1ZXVlX21lbW9yeV9zdGFydDsKKwlfX2xlMzIgcXVldWVfbWVtb3J5X2VuZDsKKworCV9fbGUzMiBwYWNrZXRfbWVtb3J5X3Bvb2xfc3RhcnQ7CisJX19sZTMyIHBhY2tldF9tZW1vcnlfcG9vbF9lbmQ7CisKKwlfX2xlMzIgZGVidWdfYnVmZmVyMV9zdGFydDsKKwlfX2xlMzIgZGVidWdfYnVmZmVyMV9lbmQ7CisKKwlfX2xlMzIgZGVidWdfYnVmZmVyMl9zdGFydDsKKwlfX2xlMzIgZGVidWdfYnVmZmVyMl9lbmQ7CisKKwkvKiBOdW1iZXIgb2YgYmxvY2tzIEZXIGFsbG9jYXRlZCBmb3IgVFggcGFja2V0cyAqLworCV9fbGUzMiBudW1fdHhfbWVtX2Jsb2NrczsKKworCS8qIE51bWJlciBvZiBibG9ja3MgRlcgYWxsb2NhdGVkIGZvciBSWCBwYWNrZXRzICovCisJX19sZTMyIG51bV9yeF9tZW1fYmxvY2tzOworCisJLyogdGhlIGZvbGxvd2luZyA0IGZpZWxkcyBhcmUgdmFsaWQgaW4gU0xBVkUgbW9kZSBvbmx5ICovCisJdTggKnR4X2NidWY7CisJdTggKnJ4X2NidWY7CisJX19sZTMyIHJ4X2N0cmw7CisJX19sZTMyIHR4X2N0cmw7Cit9IF9fcGFja2VkOworCitzdHJ1Y3Qgd2wxMjcxX2FjeF9yeF9jb25maWdfb3B0IHsKKwlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CisKKwlfX2xlMTYgbWJsa190aHJlc2hvbGQ7CisJX19sZTE2IHRocmVzaG9sZDsKKwlfX2xlMTYgdGltZW91dDsKKwl1OCBxdWV1ZV90eXBlOworCXU4IHJlc2VydmVkOworfSBfX3BhY2tlZDsKKworCitzdHJ1Y3Qgd2wxMjcxX2FjeF9iZXRfZW5hYmxlIHsKKwlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CisKKwl1OCBlbmFibGU7CisJdTggbWF4X2NvbnNlY3V0aXZlOworCXU4IHBhZGRpbmdbMl07Cit9IF9fcGFja2VkOworCisjZGVmaW5lIEFDWF9JUFY0X1ZFUlNJT04gNAorI2RlZmluZSBBQ1hfSVBWNl9WRVJTSU9OIDYKKyNkZWZpbmUgQUNYX0lQVjRfQUREUl9TSVpFIDQKKworLyogYml0bWFwIG9mIGVuYWJsZWQgYXJwX2ZpbHRlciBmZWF0dXJlcyAqLworI2RlZmluZSBBQ1hfQVJQX0ZJTFRFUl9BUlBfRklMVEVSSU5HCUJJVCgwKQorI2RlZmluZSBBQ1hfQVJQX0ZJTFRFUl9BVVRPX0FSUAkJQklUKDEpCisKK3N0cnVjdCB3bDEyNzFfYWN4X2FycF9maWx0ZXIgeworCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKKwl1OCB2ZXJzaW9uOyAgICAgICAgIC8qIEFDWF9JUFY0X1ZFUlNJT04sIEFDWF9JUFY2X1ZFUlNJT04gKi8KKwl1OCBlbmFibGU7ICAgICAgICAgIC8qIGJpdG1hcCBvZiBlbmFibGVkIEFSUCBmaWx0ZXJpbmcgZmVhdHVyZXMgKi8KKwl1OCBwYWRkaW5nWzJdOworCXU4IGFkZHJlc3NbMTZdOyAgICAgLyogVGhlIGNvbmZpZ3VyZWQgZGV2aWNlIElQIGFkZHJlc3MgLSBhbGwgQVJQCisJCQkgICAgICAgcmVxdWVzdHMgZGlyZWN0ZWQgdG8gdGhpcyBJUCBhZGRyZXNzIHdpbGwgcGFzcworCQkJICAgICAgIHRocm91Z2guIEZvciBJUHY0LCB0aGUgZmlyc3QgZm91ciBieXRlcyBhcmUKKwkJCSAgICAgICB1c2VkLiAqLworfSBfX3BhY2tlZDsKKworc3RydWN0IHdsMTI3MV9hY3hfcG1fY29uZmlnIHsKKwlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CisKKwlfX2xlMzIgaG9zdF9jbGtfc2V0dGxpbmdfdGltZTsKKwl1OCBob3N0X2Zhc3Rfd2FrZXVwX3N1cHBvcnQ7CisJdTggcGFkZGluZ1szXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCB3bDEyNzFfYWN4X2tlZXBfYWxpdmVfbW9kZSB7CisJc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOworCisJdTggZW5hYmxlZDsKKwl1OCBwYWRkaW5nWzNdOworfSBfX3BhY2tlZDsKKworZW51bSB7CisJQUNYX0tFRVBfQUxJVkVfTk9fVFggPSAwLAorCUFDWF9LRUVQX0FMSVZFX1BFUklPRF9PTkxZCit9OworCitlbnVtIHsKKwlBQ1hfS0VFUF9BTElWRV9UUExfSU5WQUxJRCA9IDAsCisJQUNYX0tFRVBfQUxJVkVfVFBMX1ZBTElECit9OworCitzdHJ1Y3Qgd2wxMjcxX2FjeF9rZWVwX2FsaXZlX2NvbmZpZyB7CisJc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOworCisJX19sZTMyIHBlcmlvZDsKKwl1OCBpbmRleDsKKwl1OCB0cGxfdmFsaWRhdGlvbjsKKwl1OCB0cmlnZ2VyOworCXU4IHBhZGRpbmc7Cit9IF9fcGFja2VkOworCitlbnVtIHsKKwlXTDEyNzFfQUNYX1RSSUdfVFlQRV9MRVZFTCA9IDAsCisJV0wxMjcxX0FDWF9UUklHX1RZUEVfRURHRSwKK307CisKK2VudW0geworCVdMMTI3MV9BQ1hfVFJJR19ESVJfTE9XID0gMCwKKwlXTDEyNzFfQUNYX1RSSUdfRElSX0hJR0gsCisJV0wxMjcxX0FDWF9UUklHX0RJUl9CSURJUiwKK307CisKK2VudW0geworCVdMMTI3MV9BQ1hfVFJJR19FTkFCTEUgPSAxLAorCVdMMTI3MV9BQ1hfVFJJR19ESVNBQkxFLAorfTsKKworZW51bSB7CisJV0wxMjcxX0FDWF9UUklHX01FVFJJQ19SU1NJX0JFQUNPTiA9IDAsCisJV0wxMjcxX0FDWF9UUklHX01FVFJJQ19SU1NJX0RBVEEsCisJV0wxMjcxX0FDWF9UUklHX01FVFJJQ19TTlJfQkVBQ09OLAorCVdMMTI3MV9BQ1hfVFJJR19NRVRSSUNfU05SX0RBVEEsCit9OworCitlbnVtIHsKKwlXTDEyNzFfQUNYX1RSSUdfSURYX1JTU0kgPSAwLAorCVdMMTI3MV9BQ1hfVFJJR19DT1VOVCA9IDgsCit9OworCitzdHJ1Y3Qgd2wxMjcxX2FjeF9yc3NpX3Nucl90cmlnZ2VyIHsKKwlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CisKKwlfX2xlMTYgdGhyZXNob2xkOworCV9fbGUxNiBwYWNpbmc7IC8qIDAgLSA2MDAwMCBtcyAqLworCXU4IG1ldHJpYzsKKwl1OCB0eXBlOworCXU4IGRpcjsKKwl1OCBoeXN0ZXJlc2lzOworCXU4IGluZGV4OworCXU4IGVuYWJsZTsKKwl1OCBwYWRkaW5nWzJdOworfTsKKworc3RydWN0IHdsMTI3MV9hY3hfcnNzaV9zbnJfYXZnX3dlaWdodHMgeworCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKKworCXU4IHJzc2lfYmVhY29uOworCXU4IHJzc2lfZGF0YTsKKwl1OCBzbnJfYmVhY29uOworCXU4IHNucl9kYXRhOworfTsKKworLyoKKyAqIEFDWF9QRUVSX0hUX0NBUAorICogQ29uZmlndXJlIEhUIGNhcGFiaWxpdGllcyAtIGRlY2xhcmUgdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgcGVlcgorICogd2UgYXJlIGNvbm5lY3RlZCB0by4KKyAqLworc3RydWN0IHdsMTI3MV9hY3hfaHRfY2FwYWJpbGl0aWVzIHsKKwlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CisKKwkvKgorCSAqIGJpdCAwIC0gQWxsb3cgSFQgT3BlcmF0aW9uCisJICogYml0IDEgLSBBbGxvdyBHcmVlbmZpZWxkIGZvcm1hdCBpbiBUWAorCSAqIGJpdCAyIC0gQWxsb3cgU2hvcnQgR0kgaW4gVFgKKwkgKiBiaXQgMyAtIEFsbG93IEwtU0lHIFRYT1AgUHJvdGVjdGlvbiBpbiBUWAorCSAqIGJpdCA0IC0gQWxsb3cgSFQgQ29udHJvbCBmaWVsZHMgaW4gVFguCisJICogICAgICAgICBOb3RlLCBkcml2ZXIgd2lsbCBzdGlsbCBsZWF2ZSBzcGFjZSBmb3IgSFQgY29udHJvbCBpbiBwYWNrZXRzCisJICogICAgICAgICByZWdhcmRsZXNzIG9mIHRoZSB2YWx1ZSBvZiB0aGlzIGZpZWxkLiBGVyB3aWxsIGJlIHJlc3BvbnNpYmxlCisJICogICAgICAgICB0byBkcm9wIHRoZSBIVCBmaWVsZCBmcm9tIGFueSBmcmFtZSB3aGVuIHRoaXMgQml0IHNldCB0byAwLgorCSAqIGJpdCA1IC0gQWxsb3cgUkQgaW5pdGlhdGlvbiBpbiBUWE9QLiBGVyBpcyBhbGxvd2VkIHRvIGluaXRhdGUgUkQuCisJICogICAgICAgICBFeGFjdCBwb2xpY3kgc2V0dGluZyBmb3IgdGhpcyBmZWF0dXJlIGlzIFRCRC4KKwkgKiAgICAgICAgIE5vdGUsIHRoaXMgYml0IGNhbiBvbmx5IGJlIHNldCB0byAxIGlmIGJpdCAzIGlzIHNldCB0byAxLgorCSAqLworCV9fbGUzMiBodF9jYXBhYmlsaXRlczsKKworCS8qCisJICogSW5kaWNhdGVzIHRvIHdoaWNoIHBlZXIgdGhlc2UgY2FwYWJpbGl0aWVzIGFwcGx5LgorCSAqIEZvciBpbmZyYXN0cnVjdHVyZSB1c2UgZmY6ZmY6ZmY6ZmY6ZmY6ZmYgdGhhdCBpbmRpY2F0ZXMgcmVsZXZhbmNlCisJICogZm9yIGFsbCBwZWVycy4KKwkgKiBPbmx5IHZhbGlkIGZvciBJQlNTL0RMUyBvcGVyYXRpb24uCisJICovCisJdTggbWFjX2FkZHJlc3NbRVRIX0FMRU5dOworCisJLyoKKwkgKiBUaGlzIHRoZSBtYXhpbXVtIEEtTVBEVSBsZW5ndGggc3VwcG9ydGVkIGJ5IHRoZSBBUC4gVGhlIEZXIG1heSBub3QKKwkgKiBleGNlZWQgdGhpcyBsZW5ndGggd2hlbiBzZW5kaW5nIEEtTVBEVXMKKwkgKi8KKwl1OCBhbXBkdV9tYXhfbGVuZ3RoOworCisJLyogVGhpcyBpcyB0aGUgbWluaW1hbCBzcGFjaW5nIHJlcXVpcmVkIHdoZW4gc2VuZGluZyBBLU1QRFVzIHRvIHRoZSBBUCovCisJdTggYW1wZHVfbWluX3NwYWNpbmc7Cit9IF9fcGFja2VkOworCisvKiBIVCBDYXBhYmlsaXRlcyBGdyBCaXQgTWFzayBNYXBwaW5nICovCisjZGVmaW5lIFdMMTI3MV9BQ1hfRldfQ0FQX0hUX09QRVJBVElPTiAgICAgICAgICAgICAgICAgQklUKDApCisjZGVmaW5lIFdMMTI3MV9BQ1hfRldfQ0FQX0dSRUVORklFTERfRlJBTUVfRk9STUFUICAgICAgQklUKDEpCisjZGVmaW5lIFdMMTI3MV9BQ1hfRldfQ0FQX1NIT1JUX0dJX0ZPUl8yME1IWl9QQUNLRVRTICAgQklUKDIpCisjZGVmaW5lIFdMMTI3MV9BQ1hfRldfQ0FQX0xTSUdfVFhPUF9QUk9URUNUSU9OICAgICAgICAgQklUKDMpCisjZGVmaW5lIFdMMTI3MV9BQ1hfRldfQ0FQX0hUX0NPTlRST0xfRklFTERTICAgICAgICAgICAgQklUKDQpCisjZGVmaW5lIFdMMTI3MV9BQ1hfRldfQ0FQX1JEX0lOSVRJQVRJT04gICAgICAgICAgICAgICAgQklUKDUpCisKKworLyoKKyAqIEFDWF9IVF9CU1NfT1BFUkFUSU9OCisgKiBDb25maWd1cmUgSFQgY2FwYWJpbGl0aWVzIC0gQVAgcnVsZXMgZm9yIGJlaGF2aW9yIGluIHRoZSBCU1MuCisgKi8KK3N0cnVjdCB3bDEyNzFfYWN4X2h0X2luZm9ybWF0aW9uIHsKKwlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CisKKwkvKiBWYWx1ZXM6IDAgLSBSSUZTIG5vdCBhbGxvd2VkLCAxIC0gUklGUyBhbGxvd2VkICovCisJdTggcmlmc19tb2RlOworCisJLyogVmFsdWVzOiAwIC0gMyBsaWtlIGluIHNwZWMgKi8KKwl1OCBodF9wcm90ZWN0aW9uOworCisJLyogVmFsdWVzOiAwIC0gR0YgcHJvdGVjdGlvbiBub3QgcmVxdWlyZWQsIDEgLSBHRiBwcm90ZWN0aW9uIHJlcXVpcmVkICovCisJdTggZ2ZfcHJvdGVjdGlvbjsKKworCS8qVmFsdWVzOiAwIC0gVFggQnVyc3QgbGltaXQgbm90IHJlcXVpcmVkLCAxIC0gVFggQnVyc3QgTGltaXQgcmVxdWlyZWQqLworCXU4IGh0X3R4X2J1cnN0X2xpbWl0OworCisJLyoKKwkgKiBWYWx1ZXM6IDAgLSBEdWFsIENUUyBwcm90ZWN0aW9uIG5vdCByZXF1aXJlZCwKKwkgKiAgICAgICAgIDEgLSBEdWFsIENUUyBQcm90ZWN0aW9uIHJlcXVpcmVkCisJICogTm90ZTogV2hlbiB0aGlzIHZhbHVlIGlzIHNldCB0byAxIEZXIHdpbGwgcHJvdGVjdCBhbGwgVFhPUCB3aXRoIFJUUworCSAqIGZyYW1lIGFuZCB3aWxsIG5vdCB1c2UgQ1RTLXRvLXNlbGYgcmVnYXJkbGVzcyBvZiB0aGUgdmFsdWUgb2YgdGhlCisJICogQUNYX0NUU19QUk9URUNUSU9OIGluZm9ybWF0aW9uIGVsZW1lbnQKKwkgKi8KKwl1OCBkdWFsX2N0c19wcm90ZWN0aW9uOworCisJdTggcGFkZGluZ1szXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCB3bDEyNzFfYWN4X2Z3X3RzZl9pbmZvcm1hdGlvbiB7CisJc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOworCisJX19sZTMyIGN1cnJlbnRfdHNmX2hpZ2g7CisJX19sZTMyIGN1cnJlbnRfdHNmX2xvdzsKKwlfX2xlMzIgbGFzdF9idHR0X2hpZ2g7CisJX19sZTMyIGxhc3RfdGJ0dF9sb3c7CisJdTggbGFzdF9kdGltX2NvdW50OworCXU4IHBhZGRpbmdbM107Cit9IF9fcGFja2VkOworCitlbnVtIHsKKwlBQ1hfV0FLRV9VUF9DT05ESVRJT05TICAgICAgPSAweDAwMDIsCisJQUNYX01FTV9DRkcgICAgICAgICAgICAgICAgID0gMHgwMDAzLAorCUFDWF9TTE9UICAgICAgICAgICAgICAgICAgICA9IDB4MDAwNCwKKwlBQ1hfQUNfQ0ZHICAgICAgICAgICAgICAgICAgPSAweDAwMDcsCisJQUNYX01FTV9NQVAgICAgICAgICAgICAgICAgID0gMHgwMDA4LAorCUFDWF9BSUQgICAgICAgICAgICAgICAgICAgICA9IDB4MDAwQSwKKwkvKiBBQ1hfRldfUkVWIGlzIG1pc3NpbmcgaW4gdGhlIHJlZiBkcml2ZXIsIGJ1dCBzZWVtcyB0byB3b3JrICovCisJQUNYX0ZXX1JFViAgICAgICAgICAgICAgICAgID0gMHgwMDBELAorCUFDWF9NRURJVU1fVVNBR0UgICAgICAgICAgICA9IDB4MDAwRiwKKwlBQ1hfUlhfQ0ZHICAgICAgICAgICAgICAgICAgPSAweDAwMTAsCisJQUNYX1RYX1FVRVVFX0NGRyAgICAgICAgICAgID0gMHgwMDExLCAvKiBGSVhNRTogb25seSB1c2VkIGJ5IHdsMTI1MSAqLworCUFDWF9TVEFUSVNUSUNTICAgICAgICAgICAgICA9IDB4MDAxMywgLyogRGVidWcgQVBJICovCisJQUNYX1BXUl9DT05TVU1QVElPTl9TVEFUSVNUSUNTID0gMHgwMDE0LAorCUFDWF9GRUFUVVJFX0NGRyAgICAgICAgICAgICA9IDB4MDAxNSwKKwlBQ1hfVElEX0NGRyAgICAgICAgICAgICAgICAgPSAweDAwMUEsCisJQUNYX1BTX1JYX1NUUkVBTUlORyAgICAgICAgID0gMHgwMDFCLAorCUFDWF9CRUFDT05fRklMVEVSX09QVCAgICAgICA9IDB4MDAxRiwKKwlBQ1hfTk9JU0VfSElTVCAgICAgICAgICAgICAgPSAweDAwMjEsCisJQUNYX0hES19WRVJTSU9OICAgICAgICAgICAgID0gMHgwMDIyLCAvKiA/Pz8gKi8KKwlBQ1hfUERfVEhSRVNIT0xEICAgICAgICAgICAgPSAweDAwMjMsCisJQUNYX1RYX0NPTkZJR19PUFQgICAgICAgICAgID0gMHgwMDI0LAorCUFDWF9DQ0FfVEhSRVNIT0xEICAgICAgICAgICA9IDB4MDAyNSwKKwlBQ1hfRVZFTlRfTUJPWF9NQVNLICAgICAgICAgPSAweDAwMjYsCisJQUNYX0NPTk5fTU9OSVRfUEFSQU1TICAgICAgID0gMHgwMDJELAorCUFDWF9DT05TX1RYX0ZBSUxVUkUgICAgICAgICA9IDB4MDAyRiwKKwlBQ1hfQkNOX0RUSU1fT1BUSU9OUyAgICAgICAgPSAweDAwMzEsCisJQUNYX1NHX0VOQUJMRSAgICAgICAgICAgICAgID0gMHgwMDMyLAorCUFDWF9TR19DRkcgICAgICAgICAgICAgICAgICA9IDB4MDAzMywKKwlBQ1hfQkVBQ09OX0ZJTFRFUl9UQUJMRSAgICAgPSAweDAwMzgsCisJQUNYX0FSUF9JUF9GSUxURVIgICAgICAgICAgID0gMHgwMDM5LAorCUFDWF9ST0FNSU5HX1NUQVRJU1RJQ1NfVEJMICA9IDB4MDAzQiwKKwlBQ1hfUkFURV9QT0xJQ1kgICAgICAgICAgICAgPSAweDAwM0QsCisJQUNYX0NUU19QUk9URUNUSU9OICAgICAgICAgID0gMHgwMDNFLAorCUFDWF9TTEVFUF9BVVRIICAgICAgICAgICAgICA9IDB4MDAzRiwKKwlBQ1hfUFJFQU1CTEVfVFlQRQkgICAgPSAweDAwNDAsCisJQUNYX0VSUk9SX0NOVCAgICAgICAgICAgICAgID0gMHgwMDQxLAorCUFDWF9JQlNTX0ZJTFRFUgkJICAgID0gMHgwMDQ0LAorCUFDWF9TRVJWSUNFX1BFUklPRF9USU1FT1VUICA9IDB4MDA0NSwKKwlBQ1hfVFNGX0lORk8gICAgICAgICAgICAgICAgPSAweDAwNDYsCisJQUNYX0NPTkZJR19QU19XTU0gICAgICAgICAgID0gMHgwMDQ5LAorCUFDWF9FTkFCTEVfUlhfREFUQV9GSUxURVIgICA9IDB4MDA0QSwKKwlBQ1hfU0VUX1JYX0RBVEFfRklMVEVSICAgICAgPSAweDAwNEIsCisJQUNYX0dFVF9EQVRBX0ZJTFRFUl9TVEFUSVNUSUNTID0gMHgwMDRDLAorCUFDWF9SWF9DT05GSUdfT1BUICAgICAgICAgICA9IDB4MDA0RSwKKwlBQ1hfRlJBR19DRkcgICAgICAgICAgICAgICAgPSAweDAwNEYsCisJQUNYX0JFVF9FTkFCTEUgICAgICAgICAgICAgID0gMHgwMDUwLAorCUFDWF9SU1NJX1NOUl9UUklHR0VSICAgICAgICA9IDB4MDA1MSwKKwlBQ1hfUlNTSV9TTlJfV0VJR0hUUyAgICAgICAgPSAweDAwNTIsCisJQUNYX0tFRVBfQUxJVkVfTU9ERSAgICAgICAgID0gMHgwMDUzLAorCUFDWF9TRVRfS0VFUF9BTElWRV9DT05GSUcgICA9IDB4MDA1NCwKKwlBQ1hfQkFfU0VTU0lPTl9SRVNQT05ERVJfUE9MSUNZID0gMHgwMDU1LAorCUFDWF9CQV9TRVNTSU9OX0lOSVRJQVRPUl9QT0xJQ1kgPSAweDAwNTYsCisJQUNYX1BFRVJfSFRfQ0FQICAgICAgICAgICAgID0gMHgwMDU3LAorCUFDWF9IVF9CU1NfT1BFUkFUSU9OICAgICAgICA9IDB4MDA1OCwKKwlBQ1hfQ09FWF9BQ1RJVklUWSAgICAgICAgICAgPSAweDAwNTksCisJQUNYX1NFVF9EQ09fSVRSSU1fUEFSQU1TICAgID0gMHgwMDYxLAorCURPVDExX1JYX01TRFVfTElGRV9USU1FICAgICA9IDB4MTAwNCwKKwlET1QxMV9DVVJfVFhfUFdSICAgICAgICAgICAgPSAweDEwMEQsCisJRE9UMTFfUlhfRE9UMTFfTU9ERSAgICAgICAgID0gMHgxMDEyLAorCURPVDExX1JUU19USFJFU0hPTEQgICAgICAgICA9IDB4MTAxMywKKwlET1QxMV9HUk9VUF9BRERSRVNTX1RCTCAgICAgPSAweDEwMTQsCisJQUNYX1BNX0NPTkZJRyAgICAgICAgICAgICAgID0gMHgxMDE2LAorCisJTUFYX0RPVDExX0lFID0gRE9UMTFfR1JPVVBfQUREUkVTU19UQkwsCisKKwlNQVhfSUUgPSAweEZGRkYKK307CisKKworaW50IHdsMTI3MV9hY3hfd2FrZV91cF9jb25kaXRpb25zKHN0cnVjdCB3bDEyNzEgKndsKTsKK2ludCB3bDEyNzFfYWN4X3NsZWVwX2F1dGgoc3RydWN0IHdsMTI3MSAqd2wsIHU4IHNsZWVwX2F1dGgpOworaW50IHdsMTI3MV9hY3hfdHhfcG93ZXIoc3RydWN0IHdsMTI3MSAqd2wsIGludCBwb3dlcik7CitpbnQgd2wxMjcxX2FjeF9mZWF0dXJlX2NmZyhzdHJ1Y3Qgd2wxMjcxICp3bCk7CitpbnQgd2wxMjcxX2FjeF9tZW1fbWFwKHN0cnVjdCB3bDEyNzEgKndsLAorCQkgICAgICAgc3RydWN0IGFjeF9oZWFkZXIgKm1lbV9tYXAsIHNpemVfdCBsZW4pOworaW50IHdsMTI3MV9hY3hfcnhfbXNkdV9saWZlX3RpbWUoc3RydWN0IHdsMTI3MSAqd2wpOworaW50IHdsMTI3MV9hY3hfcnhfY29uZmlnKHN0cnVjdCB3bDEyNzEgKndsLCB1MzIgY29uZmlnLCB1MzIgZmlsdGVyKTsKK2ludCB3bDEyNzFfYWN4X3BkX3RocmVzaG9sZChzdHJ1Y3Qgd2wxMjcxICp3bCk7CitpbnQgd2wxMjcxX2FjeF9zbG90KHN0cnVjdCB3bDEyNzEgKndsLCBlbnVtIGFjeF9zbG90X3R5cGUgc2xvdF90aW1lKTsKK2ludCB3bDEyNzFfYWN4X2dyb3VwX2FkZHJlc3NfdGJsKHN0cnVjdCB3bDEyNzEgKndsLCBib29sIGVuYWJsZSwKKwkJCQkgdm9pZCAqbWNfbGlzdCwgdTMyIG1jX2xpc3RfbGVuKTsKK2ludCB3bDEyNzFfYWN4X3NlcnZpY2VfcGVyaW9kX3RpbWVvdXQoc3RydWN0IHdsMTI3MSAqd2wpOworaW50IHdsMTI3MV9hY3hfcnRzX3RocmVzaG9sZChzdHJ1Y3Qgd2wxMjcxICp3bCwgdTE2IHJ0c190aHJlc2hvbGQpOworaW50IHdsMTI3MV9hY3hfZGNvX2l0cmltX3BhcmFtcyhzdHJ1Y3Qgd2wxMjcxICp3bCk7CitpbnQgd2wxMjcxX2FjeF9iZWFjb25fZmlsdGVyX29wdChzdHJ1Y3Qgd2wxMjcxICp3bCwgYm9vbCBlbmFibGVfZmlsdGVyKTsKK2ludCB3bDEyNzFfYWN4X2JlYWNvbl9maWx0ZXJfdGFibGUoc3RydWN0IHdsMTI3MSAqd2wpOworaW50IHdsMTI3MV9hY3hfY29ubl9tb25pdF9wYXJhbXMoc3RydWN0IHdsMTI3MSAqd2wsIGJvb2wgZW5hYmxlKTsKK2ludCB3bDEyNzFfYWN4X3NnX2VuYWJsZShzdHJ1Y3Qgd2wxMjcxICp3bCwgYm9vbCBlbmFibGUpOworaW50IHdsMTI3MV9hY3hfc2dfY2ZnKHN0cnVjdCB3bDEyNzEgKndsKTsKK2ludCB3bDEyNzFfYWN4X2NjYV90aHJlc2hvbGQoc3RydWN0IHdsMTI3MSAqd2wpOworaW50IHdsMTI3MV9hY3hfYmNuX2R0aW1fb3B0aW9ucyhzdHJ1Y3Qgd2wxMjcxICp3bCk7CitpbnQgd2wxMjcxX2FjeF9haWQoc3RydWN0IHdsMTI3MSAqd2wsIHUxNiBhaWQpOworaW50IHdsMTI3MV9hY3hfZXZlbnRfbWJveF9tYXNrKHN0cnVjdCB3bDEyNzEgKndsLCB1MzIgZXZlbnRfbWFzayk7CitpbnQgd2wxMjcxX2FjeF9zZXRfcHJlYW1ibGUoc3RydWN0IHdsMTI3MSAqd2wsIGVudW0gYWN4X3ByZWFtYmxlX3R5cGUgcHJlYW1ibGUpOworaW50IHdsMTI3MV9hY3hfY3RzX3Byb3RlY3Qoc3RydWN0IHdsMTI3MSAqd2wsCisJCQkgICBlbnVtIGFjeF9jdHNwcm90ZWN0X3R5cGUgY3RzcHJvdGVjdCk7CitpbnQgd2wxMjcxX2FjeF9zdGF0aXN0aWNzKHN0cnVjdCB3bDEyNzEgKndsLCBzdHJ1Y3QgYWN4X3N0YXRpc3RpY3MgKnN0YXRzKTsKK2ludCB3bDEyNzFfYWN4X3JhdGVfcG9saWNpZXMoc3RydWN0IHdsMTI3MSAqd2wpOworaW50IHdsMTI3MV9hY3hfYWNfY2ZnKHN0cnVjdCB3bDEyNzEgKndsLCB1OCBhYywgdTggY3dfbWluLCB1MTYgY3dfbWF4LAorCQkgICAgICB1OCBhaWZzbiwgdTE2IHR4b3ApOworaW50IHdsMTI3MV9hY3hfdGlkX2NmZyhzdHJ1Y3Qgd2wxMjcxICp3bCwgdTggcXVldWVfaWQsIHU4IGNoYW5uZWxfdHlwZSwKKwkJICAgICAgIHU4IHRzaWQsIHU4IHBzX3NjaGVtZSwgdTggYWNrX3BvbGljeSwKKwkJICAgICAgIHUzMiBhcHNkX2NvbmYwLCB1MzIgYXBzZF9jb25mMSk7CitpbnQgd2wxMjcxX2FjeF9mcmFnX3RocmVzaG9sZChzdHJ1Y3Qgd2wxMjcxICp3bCwgdTE2IGZyYWdfdGhyZXNob2xkKTsKK2ludCB3bDEyNzFfYWN4X3R4X2NvbmZpZ19vcHRpb25zKHN0cnVjdCB3bDEyNzEgKndsKTsKK2ludCB3bDEyNzFfYWN4X21lbV9jZmcoc3RydWN0IHdsMTI3MSAqd2wpOworaW50IHdsMTI3MV9hY3hfaW5pdF9tZW1fY29uZmlnKHN0cnVjdCB3bDEyNzEgKndsKTsKK2ludCB3bDEyNzFfYWN4X2luaXRfcnhfaW50ZXJydXB0KHN0cnVjdCB3bDEyNzEgKndsKTsKK2ludCB3bDEyNzFfYWN4X3NtYXJ0X3JlZmxleChzdHJ1Y3Qgd2wxMjcxICp3bCk7CitpbnQgd2wxMjcxX2FjeF9iZXRfZW5hYmxlKHN0cnVjdCB3bDEyNzEgKndsLCBib29sIGVuYWJsZSk7CitpbnQgd2wxMjcxX2FjeF9hcnBfaXBfZmlsdGVyKHN0cnVjdCB3bDEyNzEgKndsLCB1OCBlbmFibGUsIF9fYmUzMiBhZGRyZXNzKTsKK2ludCB3bDEyNzFfYWN4X3BtX2NvbmZpZyhzdHJ1Y3Qgd2wxMjcxICp3bCk7CitpbnQgd2wxMjcxX2FjeF9rZWVwX2FsaXZlX21vZGUoc3RydWN0IHdsMTI3MSAqd2wsIGJvb2wgZW5hYmxlKTsKK2ludCB3bDEyNzFfYWN4X2tlZXBfYWxpdmVfY29uZmlnKHN0cnVjdCB3bDEyNzEgKndsLCB1OCBpbmRleCwgdTggdHBsX3ZhbGlkKTsKK2ludCB3bDEyNzFfYWN4X3Jzc2lfc25yX3RyaWdnZXIoc3RydWN0IHdsMTI3MSAqd2wsIGJvb2wgZW5hYmxlLAorCQkJCXMxNiB0aG9sZCwgdTggaHlzdCk7CitpbnQgd2wxMjcxX2FjeF9yc3NpX3Nucl9hdmdfd2VpZ2h0cyhzdHJ1Y3Qgd2wxMjcxICp3bCk7CitpbnQgd2wxMjcxX2FjeF9zZXRfaHRfY2FwYWJpbGl0aWVzKHN0cnVjdCB3bDEyNzEgKndsLAorCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YV9odF9jYXAgKmh0X2NhcCwKKwkJCQkgICAgYm9vbCBhbGxvd19odF9vcGVyYXRpb24pOworaW50IHdsMTI3MV9hY3hfc2V0X2h0X2luZm9ybWF0aW9uKHN0cnVjdCB3bDEyNzEgKndsLAorCQkJCSAgIHUxNiBodF9vcGVyYXRpb25fbW9kZSk7CitpbnQgd2wxMjcxX2FjeF90c2ZfaW5mbyhzdHJ1Y3Qgd2wxMjcxICp3bCwgdTY0ICptYWN0aW1lKTsKKworI2VuZGlmIC8qIF9fV0wxMjcxX0FDWF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9ib290LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvYm9vdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkZjA0ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvYm9vdC5jCkBAIC0wLDAgKzEsNjA1IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMjcxCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTAgTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBDb250YWN0OiBMdWNpYW5vIENvZWxobyA8bHVjaWFuby5jb2VsaG9Abm9raWEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworI2luY2x1ZGUgImFjeC5oIgorI2luY2x1ZGUgInJlZy5oIgorI2luY2x1ZGUgImJvb3QuaCIKKyNpbmNsdWRlICJpby5oIgorI2luY2x1ZGUgImV2ZW50LmgiCisKK3N0YXRpYyBzdHJ1Y3Qgd2wxMjcxX3BhcnRpdGlvbl9zZXQgcGFydF90YWJsZVtQQVJUX1RBQkxFX0xFTl0gPSB7CisJW1BBUlRfRE9XTl0gPSB7CisJCS5tZW0gPSB7CisJCQkuc3RhcnQgPSAweDAwMDAwMDAwLAorCQkJLnNpemUgID0gMHgwMDAxNzdjMAorCQl9LAorCQkucmVnID0geworCQkJLnN0YXJ0ID0gUkVHSVNURVJTX0JBU0UsCisJCQkuc2l6ZSAgPSAweDAwMDA4ODAwCisJCX0sCisJCS5tZW0yID0geworCQkJLnN0YXJ0ID0gMHgwMDAwMDAwMCwKKwkJCS5zaXplICA9IDB4MDAwMDAwMDAKKwkJfSwKKwkJLm1lbTMgPSB7CisJCQkuc3RhcnQgPSAweDAwMDAwMDAwLAorCQkJLnNpemUgID0gMHgwMDAwMDAwMAorCQl9LAorCX0sCisKKwlbUEFSVF9XT1JLXSA9IHsKKwkJLm1lbSA9IHsKKwkJCS5zdGFydCA9IDB4MDAwNDAwMDAsCisJCQkuc2l6ZSAgPSAweDAwMDE0ZmMwCisJCX0sCisJCS5yZWcgPSB7CisJCQkuc3RhcnQgPSBSRUdJU1RFUlNfQkFTRSwKKwkJCS5zaXplICA9IDB4MDAwMGEwMDAKKwkJfSwKKwkJLm1lbTIgPSB7CisJCQkuc3RhcnQgPSAweDAwMzAwNGY4LAorCQkJLnNpemUgID0gMHgwMDAwMDAwNAorCQl9LAorCQkubWVtMyA9IHsKKwkJCS5zdGFydCA9IDB4MDAwNDA0MDQsCisJCQkuc2l6ZSAgPSAweDAwMDAwMDAwCisJCX0sCisJfSwKKworCVtQQVJUX0RSUFddID0geworCQkubWVtID0geworCQkJLnN0YXJ0ID0gMHgwMDA0MDAwMCwKKwkJCS5zaXplICA9IDB4MDAwMTRmYzAKKwkJfSwKKwkJLnJlZyA9IHsKKwkJCS5zdGFydCA9IERSUFdfQkFTRSwKKwkJCS5zaXplICA9IDB4MDAwMDYwMDAKKwkJfSwKKwkJLm1lbTIgPSB7CisJCQkuc3RhcnQgPSAweDAwMDAwMDAwLAorCQkJLnNpemUgID0gMHgwMDAwMDAwMAorCQl9LAorCQkubWVtMyA9IHsKKwkJCS5zdGFydCA9IDB4MDAwMDAwMDAsCisJCQkuc2l6ZSAgPSAweDAwMDAwMDAwCisJCX0KKwl9Cit9OworCitzdGF0aWMgdm9pZCB3bDEyNzFfYm9vdF9zZXRfZWNwdV9jdHJsKHN0cnVjdCB3bDEyNzEgKndsLCB1MzIgZmxhZykKK3sKKwl1MzIgY3B1X2N0cmw7CisKKwkvKiAxMC41LjAgcnVuIHRoZSBmaXJtd2FyZSAoSSkgKi8KKwljcHVfY3RybCA9IHdsMTI3MV9yZWFkMzIod2wsIEFDWF9SRUdfRUNQVV9DT05UUk9MKTsKKworCS8qIDEwLjUuMSBydW4gdGhlIGZpcm13YXJlIChJSSkgKi8KKwljcHVfY3RybCB8PSBmbGFnOworCXdsMTI3MV93cml0ZTMyKHdsLCBBQ1hfUkVHX0VDUFVfQ09OVFJPTCwgY3B1X2N0cmwpOworfQorCitzdGF0aWMgdm9pZCB3bDEyNzFfYm9vdF9md192ZXJzaW9uKHN0cnVjdCB3bDEyNzEgKndsKQoreworCXN0cnVjdCB3bDEyNzFfc3RhdGljX2RhdGEgc3RhdGljX2RhdGE7CisKKwl3bDEyNzFfcmVhZCh3bCwgd2wtPmNtZF9ib3hfYWRkciwgJnN0YXRpY19kYXRhLCBzaXplb2Yoc3RhdGljX2RhdGEpLAorCQkgICAgZmFsc2UpOworCisJc3RybmNweSh3bC0+Y2hpcC5md192ZXIsIHN0YXRpY19kYXRhLmZ3X3ZlcnNpb24sCisJCXNpemVvZih3bC0+Y2hpcC5md192ZXIpKTsKKworCS8qIG1ha2Ugc3VyZSB0aGUgc3RyaW5nIGlzIE5VTEwtdGVybWluYXRlZCAqLworCXdsLT5jaGlwLmZ3X3ZlcltzaXplb2Yod2wtPmNoaXAuZndfdmVyKSAtIDFdID0gJ1wwJzsKK30KKworc3RhdGljIGludCB3bDEyNzFfYm9vdF91cGxvYWRfZmlybXdhcmVfY2h1bmsoc3RydWN0IHdsMTI3MSAqd2wsIHZvaWQgKmJ1ZiwKKwkJCQkJICAgICBzaXplX3QgZndfZGF0YV9sZW4sIHUzMiBkZXN0KQoreworCXN0cnVjdCB3bDEyNzFfcGFydGl0aW9uX3NldCBwYXJ0aXRpb247CisJaW50IGFkZHIsIGNodW5rX251bSwgcGFydGl0aW9uX2xpbWl0OworCXU4ICpwLCAqY2h1bms7CisKKwkvKiB3aGFsX0Z3Q3RybF9Mb2FkRndJbWFnZVNtKCkgKi8KKworCXdsMTI3MV9kZWJ1ZyhERUJVR19CT09ULCAic3RhcnRpbmcgZmlybXdhcmUgdXBsb2FkIik7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfQk9PVCwgImZ3X2RhdGFfbGVuICV6ZCBjaHVua19zaXplICVkIiwKKwkJICAgICBmd19kYXRhX2xlbiwgQ0hVTktfU0laRSk7CisKKwlpZiAoKGZ3X2RhdGFfbGVuICUgNCkgIT0gMCkgeworCQl3bDEyNzFfZXJyb3IoImZpcm13YXJlIGxlbmd0aCBub3QgbXVsdGlwbGUgb2YgZm91ciIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwljaHVuayA9IGttYWxsb2MoQ0hVTktfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjaHVuaykgeworCQl3bDEyNzFfZXJyb3IoImFsbG9jYXRpb24gZm9yIGZpcm13YXJlIHVwbG9hZCBjaHVuayBmYWlsZWQiKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJbWVtY3B5KCZwYXJ0aXRpb24sICZwYXJ0X3RhYmxlW1BBUlRfRE9XTl0sIHNpemVvZihwYXJ0aXRpb24pKTsKKwlwYXJ0aXRpb24ubWVtLnN0YXJ0ID0gZGVzdDsKKwl3bDEyNzFfc2V0X3BhcnRpdGlvbih3bCwgJnBhcnRpdGlvbik7CisKKwkvKiAxMC4xIHNldCBwYXJ0aXRpb24gbGltaXQgYW5kIGNodW5rIG51bSAqLworCWNodW5rX251bSA9IDA7CisJcGFydGl0aW9uX2xpbWl0ID0gcGFydF90YWJsZVtQQVJUX0RPV05dLm1lbS5zaXplOworCisJd2hpbGUgKGNodW5rX251bSA8IGZ3X2RhdGFfbGVuIC8gQ0hVTktfU0laRSkgeworCQkvKiAxMC4yIHVwZGF0ZSBwYXJ0aXRpb24sIGlmIG5lZWRlZCAqLworCQlhZGRyID0gZGVzdCArIChjaHVua19udW0gKyAyKSAqIENIVU5LX1NJWkU7CisJCWlmIChhZGRyID4gcGFydGl0aW9uX2xpbWl0KSB7CisJCQlhZGRyID0gZGVzdCArIGNodW5rX251bSAqIENIVU5LX1NJWkU7CisJCQlwYXJ0aXRpb25fbGltaXQgPSBjaHVua19udW0gKiBDSFVOS19TSVpFICsKKwkJCQlwYXJ0X3RhYmxlW1BBUlRfRE9XTl0ubWVtLnNpemU7CisJCQlwYXJ0aXRpb24ubWVtLnN0YXJ0ID0gYWRkcjsKKwkJCXdsMTI3MV9zZXRfcGFydGl0aW9uKHdsLCAmcGFydGl0aW9uKTsKKwkJfQorCisJCS8qIDEwLjMgdXBsb2FkIHRoZSBjaHVuayAqLworCQlhZGRyID0gZGVzdCArIGNodW5rX251bSAqIENIVU5LX1NJWkU7CisJCXAgPSBidWYgKyBjaHVua19udW0gKiBDSFVOS19TSVpFOworCQltZW1jcHkoY2h1bmssIHAsIENIVU5LX1NJWkUpOworCQl3bDEyNzFfZGVidWcoREVCVUdfQk9PVCwgInVwbG9hZGluZyBmdyBjaHVuayAweCVwIHRvIDB4JXgiLAorCQkJICAgICBwLCBhZGRyKTsKKwkJd2wxMjcxX3dyaXRlKHdsLCBhZGRyLCBjaHVuaywgQ0hVTktfU0laRSwgZmFsc2UpOworCisJCWNodW5rX251bSsrOworCX0KKworCS8qIDEwLjQgdXBsb2FkIHRoZSBsYXN0IGNodW5rICovCisJYWRkciA9IGRlc3QgKyBjaHVua19udW0gKiBDSFVOS19TSVpFOworCXAgPSBidWYgKyBjaHVua19udW0gKiBDSFVOS19TSVpFOworCW1lbWNweShjaHVuaywgcCwgZndfZGF0YV9sZW4gJSBDSFVOS19TSVpFKTsKKwl3bDEyNzFfZGVidWcoREVCVUdfQk9PVCwgInVwbG9hZGluZyBmdyBsYXN0IGNodW5rICglemQgQikgMHglcCB0byAweCV4IiwKKwkJICAgICBmd19kYXRhX2xlbiAlIENIVU5LX1NJWkUsIHAsIGFkZHIpOworCXdsMTI3MV93cml0ZSh3bCwgYWRkciwgY2h1bmssIGZ3X2RhdGFfbGVuICUgQ0hVTktfU0laRSwgZmFsc2UpOworCisJa2ZyZWUoY2h1bmspOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdsMTI3MV9ib290X3VwbG9hZF9maXJtd2FyZShzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwl1MzIgY2h1bmtzLCBhZGRyLCBsZW47CisJaW50IHJldCA9IDA7CisJdTggKmZ3OworCisJZncgPSB3bC0+Znc7CisJY2h1bmtzID0gYmUzMl90b19jcHVwKChfX2JlMzIgKikgZncpOworCWZ3ICs9IHNpemVvZih1MzIpOworCisJd2wxMjcxX2RlYnVnKERFQlVHX0JPT1QsICJmaXJtd2FyZSBjaHVua3MgdG8gYmUgdXBsb2FkZWQ6ICV1IiwgY2h1bmtzKTsKKworCXdoaWxlIChjaHVua3MtLSkgeworCQlhZGRyID0gYmUzMl90b19jcHVwKChfX2JlMzIgKikgZncpOworCQlmdyArPSBzaXplb2YodTMyKTsKKwkJbGVuID0gYmUzMl90b19jcHVwKChfX2JlMzIgKikgZncpOworCQlmdyArPSBzaXplb2YodTMyKTsKKworCQlpZiAobGVuID4gMzAwMDAwKSB7CisJCQl3bDEyNzFfaW5mbygiZmlybXdhcmUgY2h1bmsgdG9vIGxvbmc6ICV1IiwgbGVuKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCXdsMTI3MV9kZWJ1ZyhERUJVR19CT09ULCAiY2h1bmsgJWQgYWRkciAweCV4IGxlbiAldSIsCisJCQkgICAgIGNodW5rcywgYWRkciwgbGVuKTsKKwkJcmV0ID0gd2wxMjcxX2Jvb3RfdXBsb2FkX2Zpcm13YXJlX2NodW5rKHdsLCBmdywgbGVuLCBhZGRyKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJYnJlYWs7CisJCWZ3ICs9IGxlbjsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHdsMTI3MV9ib290X3VwbG9hZF9udnMoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJc2l6ZV90IG52c19sZW4sIGJ1cnN0X2xlbjsKKwlpbnQgaTsKKwl1MzIgZGVzdF9hZGRyLCB2YWw7CisJdTggKm52c19wdHIsICpudnNfYWxpZ25lZDsKKworCWlmICh3bC0+bnZzID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCisJLyoKKwkgKiBGSVhNRTogdGhlIExFR0FDWSBOVlMgaW1hZ2Ugc3VwcG9ydCAoTlZTJ3MgbWlzc2luZyB0aGUgNUdIeiBiYW5kCisJICogY29uZmlndXJhdGlvbnMpIGNhbiBiZSByZW1vdmVkIHdoZW4gdGhvc2UgTlZTIGZpbGVzIHN0b3AgZmxvYXRpbmcKKwkgKiBhcm91bmQuCisJICovCisJaWYgKHdsLT5udnNfbGVuID09IHNpemVvZihzdHJ1Y3Qgd2wxMjcxX252c19maWxlKSB8fAorCSAgICB3bC0+bnZzX2xlbiA9PSBXTDEyNzFfSU5JX0xFR0FDWV9OVlNfRklMRV9TSVpFKSB7CisJCWlmICh3bC0+bnZzLT5nZW5lcmFsX3BhcmFtcy5kdWFsX21vZGVfc2VsZWN0KQorCQkJd2wtPmVuYWJsZV8xMWEgPSB0cnVlOworCX0KKworCWlmICh3bC0+bnZzX2xlbiAhPSBzaXplb2Yoc3RydWN0IHdsMTI3MV9udnNfZmlsZSkgJiYKKwkgICAgKHdsLT5udnNfbGVuICE9IFdMMTI3MV9JTklfTEVHQUNZX05WU19GSUxFX1NJWkUgfHwKKwkgICAgIHdsLT5lbmFibGVfMTFhKSkgeworCQl3bDEyNzFfZXJyb3IoIm52cyBzaXplIGlzIG5vdCBhcyBleHBlY3RlZDogJXp1ICE9ICV6dSIsCisJCQkgICAgIHdsLT5udnNfbGVuLCBzaXplb2Yoc3RydWN0IHdsMTI3MV9udnNfZmlsZSkpOworCQlrZnJlZSh3bC0+bnZzKTsKKwkJd2wtPm52cyA9IE5VTEw7CisJCXdsLT5udnNfbGVuID0gMDsKKwkJcmV0dXJuIC1FSUxTRVE7CisJfQorCisJLyogb25seSB0aGUgZmlyc3QgcGFydCBvZiB0aGUgTlZTIG5lZWRzIHRvIGJlIHVwbG9hZGVkICovCisJbnZzX2xlbiA9IHNpemVvZih3bC0+bnZzLT5udnMpOworCW52c19wdHIgPSAodTggKil3bC0+bnZzLT5udnM7CisKKwkvKiB1cGRhdGUgY3VycmVudCBNQUMgYWRkcmVzcyB0byBOVlMgKi8KKwludnNfcHRyWzExXSA9IHdsLT5tYWNfYWRkclswXTsKKwludnNfcHRyWzEwXSA9IHdsLT5tYWNfYWRkclsxXTsKKwludnNfcHRyWzZdID0gd2wtPm1hY19hZGRyWzJdOworCW52c19wdHJbNV0gPSB3bC0+bWFjX2FkZHJbM107CisJbnZzX3B0cls0XSA9IHdsLT5tYWNfYWRkcls0XTsKKwludnNfcHRyWzNdID0gd2wtPm1hY19hZGRyWzVdOworCisJLyoKKwkgKiBMYXlvdXQgYmVmb3JlIHRoZSBhY3R1YWwgTlZTIHRhYmxlczoKKwkgKiAxIGJ5dGUgOiBidXJzdCBsZW5ndGguCisJICogMiBieXRlczogZGVzdGluYXRpb24gYWRkcmVzcy4KKwkgKiBuIGJ5dGVzOiBkYXRhIHRvIGJ1cnN0IGNvcHkuCisJICoKKwkgKiBUaGlzIGlzIGVuZGVkIGJ5IGEgMCBsZW5ndGgsIHRoZW4gdGhlIE5WUyB0YWJsZXMuCisJICovCisKKwkvKiBGSVhNRTogRG8gd2UgbmVlZCB0byBjaGVjayBoZXJlIHdoZXRoZXIgdGhlIExTQiBpcyAxPyAqLworCXdoaWxlIChudnNfcHRyWzBdKSB7CisJCWJ1cnN0X2xlbiA9IG52c19wdHJbMF07CisJCWRlc3RfYWRkciA9IChudnNfcHRyWzFdICYgMHhmZSkgfCAoKHUzMikobnZzX3B0clsyXSA8PCA4KSk7CisKKwkJLyoKKwkJICogRHVlIHRvIG91ciBuZXcgd2wxMjcxX3RyYW5zbGF0ZV9yZWdfYWRkciBmdW5jdGlvbiwKKwkJICogd2UgbmVlZCB0byBhZGQgdGhlIFJFR0lTVEVSX0JBU0UgdG8gdGhlIGRlc3RpbmF0aW9uCisJCSAqLworCQlkZXN0X2FkZHIgKz0gUkVHSVNURVJTX0JBU0U7CisKKwkJLyogV2UgbW92ZSBvdXIgcG9pbnRlciB0byB0aGUgZGF0YSAqLworCQludnNfcHRyICs9IDM7CisKKwkJZm9yIChpID0gMDsgaSA8IGJ1cnN0X2xlbjsgaSsrKSB7CisJCQl2YWwgPSAobnZzX3B0clswXSB8IChudnNfcHRyWzFdIDw8IDgpCisJCQkgICAgICAgfCAobnZzX3B0clsyXSA8PCAxNikgfCAobnZzX3B0clszXSA8PCAyNCkpOworCisJCQl3bDEyNzFfZGVidWcoREVCVUdfQk9PVCwKKwkJCQkgICAgICJudnMgYnVyc3Qgd3JpdGUgMHgleDogMHgleCIsCisJCQkJICAgICBkZXN0X2FkZHIsIHZhbCk7CisJCQl3bDEyNzFfd3JpdGUzMih3bCwgZGVzdF9hZGRyLCB2YWwpOworCisJCQludnNfcHRyICs9IDQ7CisJCQlkZXN0X2FkZHIgKz0gNDsKKwkJfQorCX0KKworCS8qCisJICogV2UndmUgcmVhY2hlZCB0aGUgZmlyc3QgemVybyBsZW5ndGgsIHRoZSBmaXJzdCBOVlMgdGFibGUKKwkgKiBpcyBsb2NhdGVkIGF0IGFuIGFsaWduZWQgb2Zmc2V0IHdoaWNoIGlzIGF0IGxlYXN0IDcgYnl0ZXMgZnVydGhlci4KKwkgKi8KKwludnNfcHRyID0gKHU4ICopd2wtPm52cy0+bnZzICsKKwkJCUFMSUdOKG52c19wdHIgLSAodTggKil3bC0+bnZzLT5udnMgKyA3LCA0KTsKKwludnNfbGVuIC09IG52c19wdHIgLSAodTggKil3bC0+bnZzLT5udnM7CisKKwkvKiBOb3cgd2UgbXVzdCBzZXQgdGhlIHBhcnRpdGlvbiBjb3JyZWN0bHkgKi8KKwl3bDEyNzFfc2V0X3BhcnRpdGlvbih3bCwgJnBhcnRfdGFibGVbUEFSVF9XT1JLXSk7CisKKwkvKiBDb3B5IHRoZSBOVlMgdGFibGVzIHRvIGEgbmV3IGJsb2NrIHRvIGVuc3VyZSBhbGlnbm1lbnQgKi8KKwludnNfYWxpZ25lZCA9IGttZW1kdXAobnZzX3B0ciwgbnZzX2xlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFudnNfYWxpZ25lZCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBBbmQgZmluYWxseSB3ZSB1cGxvYWQgdGhlIE5WUyB0YWJsZXMgKi8KKwl3bDEyNzFfd3JpdGUod2wsIENNRF9NQk9YX0FERFJFU1MsIG52c19hbGlnbmVkLCBudnNfbGVuLCBmYWxzZSk7CisKKwlrZnJlZShudnNfYWxpZ25lZCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHdsMTI3MV9ib290X2VuYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCB3bDEyNzEgKndsKQoreworCXdsMTI3MV9lbmFibGVfaW50ZXJydXB0cyh3bCk7CisJd2wxMjcxX3dyaXRlMzIod2wsIEFDWF9SRUdfSU5URVJSVVBUX01BU0ssCisJCSAgICAgICBXTDEyNzFfQUNYX0lOVFJfQUxMICYgfihXTDEyNzFfSU5UUl9NQVNLKSk7CisJd2wxMjcxX3dyaXRlMzIod2wsIEhJX0NGRywgSElfQ0ZHX0RFRl9WQUwpOworfQorCitzdGF0aWMgaW50IHdsMTI3MV9ib290X3NvZnRfcmVzZXQoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OworCXUzMiBib290X2RhdGE7CisKKwkvKiBwZXJmb3JtIHNvZnQgcmVzZXQgKi8KKwl3bDEyNzFfd3JpdGUzMih3bCwgQUNYX1JFR19TTFZfU09GVF9SRVNFVCwgQUNYX1NMVl9TT0ZUX1JFU0VUX0JJVCk7CisKKwkvKiBTT0ZUX1JFU0VUIGlzIHNlbGYgY2xlYXJpbmcgKi8KKwl0aW1lb3V0ID0gamlmZmllcyArIHVzZWNzX3RvX2ppZmZpZXMoU09GVF9SRVNFVF9NQVhfVElNRSk7CisJd2hpbGUgKDEpIHsKKwkJYm9vdF9kYXRhID0gd2wxMjcxX3JlYWQzMih3bCwgQUNYX1JFR19TTFZfU09GVF9SRVNFVCk7CisJCXdsMTI3MV9kZWJ1ZyhERUJVR19CT09ULCAic29mdCByZXNldCBib290ZGF0YSAweCV4IiwgYm9vdF9kYXRhKTsKKwkJaWYgKChib290X2RhdGEgJiBBQ1hfU0xWX1NPRlRfUkVTRVRfQklUKSA9PSAwKQorCQkJYnJlYWs7CisKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHsKKwkJCS8qIDEuMiBjaGVjayBwV2hhbEJ1cy0+dVNlbGZDbGVhclRpbWUgaWYgdGhlCisJCQkgKiB0aW1lb3V0IHdhcyByZWFjaGVkICovCisJCQl3bDEyNzFfZXJyb3IoInNvZnQgcmVzZXQgdGltZW91dCIpOworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJdWRlbGF5KFNPRlRfUkVTRVRfU1RBTExfVElNRSk7CisJfQorCisJLyogZGlzYWJsZSBSeC9UeCAqLworCXdsMTI3MV93cml0ZTMyKHdsLCBFTkFCTEUsIDB4MCk7CisKKwkvKiBkaXNhYmxlIGF1dG8gY2FsaWJyYXRpb24gb24gc3RhcnQqLworCXdsMTI3MV93cml0ZTMyKHdsLCBTUEFSRV9BMiwgMHhmZmZmKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdsMTI3MV9ib290X3J1bl9maXJtd2FyZShzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlpbnQgbG9vcCwgcmV0OworCXUzMiBjaGlwX2lkLCBpbnRyOworCisJd2wxMjcxX2Jvb3Rfc2V0X2VjcHVfY3RybCh3bCwgRUNQVV9DT05UUk9MX0hBTFQpOworCisJY2hpcF9pZCA9IHdsMTI3MV9yZWFkMzIod2wsIENISVBfSURfQik7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfQk9PVCwgImNoaXAgaWQgYWZ0ZXIgZmlybXdhcmUgYm9vdDogMHgleCIsIGNoaXBfaWQpOworCisJaWYgKGNoaXBfaWQgIT0gd2wtPmNoaXAuaWQpIHsKKwkJd2wxMjcxX2Vycm9yKCJjaGlwIGlkIGRvZXNuJ3QgbWF0Y2ggYWZ0ZXIgZmlybXdhcmUgYm9vdCIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwkvKiB3YWl0IGZvciBpbml0IHRvIGNvbXBsZXRlICovCisJbG9vcCA9IDA7CisJd2hpbGUgKGxvb3ArKyA8IElOSVRfTE9PUCkgeworCQl1ZGVsYXkoSU5JVF9MT09QX0RFTEFZKTsKKwkJaW50ciA9IHdsMTI3MV9yZWFkMzIod2wsIEFDWF9SRUdfSU5URVJSVVBUX05PX0NMRUFSKTsKKworCQlpZiAoaW50ciA9PSAweGZmZmZmZmZmKSB7CisJCQl3bDEyNzFfZXJyb3IoImVycm9yIHJlYWRpbmcgaGFyZHdhcmUgY29tcGxldGUgIgorCQkJCSAgICAgImluaXQgaW5kaWNhdGlvbiIpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKwkJLyogY2hlY2sgdGhhdCBBQ1hfSU5UUl9JTklUX0NPTVBMRVRFIGlzIGVuYWJsZWQgKi8KKwkJZWxzZSBpZiAoaW50ciAmIFdMMTI3MV9BQ1hfSU5UUl9JTklUX0NPTVBMRVRFKSB7CisJCQl3bDEyNzFfd3JpdGUzMih3bCwgQUNYX1JFR19JTlRFUlJVUFRfQUNLLAorCQkJCSAgICAgICBXTDEyNzFfQUNYX0lOVFJfSU5JVF9DT01QTEVURSk7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChsb29wID4gSU5JVF9MT09QKSB7CisJCXdsMTI3MV9lcnJvcigidGltZW91dCB3YWl0aW5nIGZvciB0aGUgaGFyZHdhcmUgdG8gIgorCQkJICAgICAiY29tcGxldGUgaW5pdGlhbGl6YXRpb24iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJLyogZ2V0IGhhcmR3YXJlIGNvbmZpZyBjb21tYW5kIG1haWwgYm94ICovCisJd2wtPmNtZF9ib3hfYWRkciA9IHdsMTI3MV9yZWFkMzIod2wsIFJFR19DT01NQU5EX01BSUxCT1hfUFRSKTsKKworCS8qIGdldCBoYXJkd2FyZSBjb25maWcgZXZlbnQgbWFpbCBib3ggKi8KKwl3bC0+ZXZlbnRfYm94X2FkZHIgPSB3bDEyNzFfcmVhZDMyKHdsLCBSRUdfRVZFTlRfTUFJTEJPWF9QVFIpOworCisJLyogc2V0IHRoZSB3b3JraW5nIHBhcnRpdGlvbiB0byBpdHMgInJ1bm5pbmciIG1vZGUgb2Zmc2V0ICovCisJd2wxMjcxX3NldF9wYXJ0aXRpb24od2wsICZwYXJ0X3RhYmxlW1BBUlRfV09SS10pOworCisJd2wxMjcxX2RlYnVnKERFQlVHX01BSUxCT1gsICJjbWRfYm94X2FkZHIgMHgleCBldmVudF9ib3hfYWRkciAweCV4IiwKKwkJICAgICB3bC0+Y21kX2JveF9hZGRyLCB3bC0+ZXZlbnRfYm94X2FkZHIpOworCisJd2wxMjcxX2Jvb3RfZndfdmVyc2lvbih3bCk7CisKKwkvKgorCSAqIGluIGNhc2Ugb2YgZnVsbCBhc3luY2hyb25vdXMgbW9kZSB0aGUgZmlybXdhcmUgZXZlbnQgbXVzdCBiZQorCSAqIHJlYWR5IHRvIHJlY2VpdmUgZXZlbnQgZnJvbSB0aGUgY29tbWFuZCBtYWlsYm94CisJICovCisKKwkvKiB1bm1hc2sgcmVxdWlyZWQgbWJveCBldmVudHMgICovCisJd2wtPmV2ZW50X21hc2sgPSBCU1NfTE9TRV9FVkVOVF9JRCB8CisJCVNDQU5fQ09NUExFVEVfRVZFTlRfSUQgfAorCQlQU19SRVBPUlRfRVZFTlRfSUQgfAorCQlKT0lOX0VWRU5UX0NPTVBMRVRFX0lEIHwKKwkJRElTQ09OTkVDVF9FVkVOVF9DT01QTEVURV9JRCB8CisJCVJTU0lfU05SX1RSSUdHRVJfMF9FVkVOVF9JRCB8CisJCVBTUE9MTF9ERUxJVkVSWV9GQUlMVVJFX0VWRU5UX0lEIHwKKwkJU09GVF9HRU1JTklfU0VOU0VfRVZFTlRfSUQ7CisKKwlyZXQgPSB3bDEyNzFfZXZlbnRfdW5tYXNrKHdsKTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNzFfZXJyb3IoIkVWRU5UIG1hc2sgc2V0dGluZyBmYWlsZWQiKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwl3bDEyNzFfZXZlbnRfbWJveF9jb25maWcod2wpOworCisJLyogZmlybXdhcmUgc3RhcnR1cCBjb21wbGV0ZWQgKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bDEyNzFfYm9vdF93cml0ZV9pcnFfcG9sYXJpdHkoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJdTMyIHBvbGFyaXR5OworCisJcG9sYXJpdHkgPSB3bDEyNzFfdG9wX3JlZ19yZWFkKHdsLCBPQ1BfUkVHX1BPTEFSSVRZKTsKKworCS8qIFdlIHVzZSBISUdIIHBvbGFyaXR5LCBzbyB1bnNldCB0aGUgTE9XIGJpdCAqLworCXBvbGFyaXR5ICY9IH5QT0xBUklUWV9MT1c7CisJd2wxMjcxX3RvcF9yZWdfd3JpdGUod2wsIE9DUF9SRUdfUE9MQVJJVFksIHBvbGFyaXR5KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB3bDEyNzFfYm9vdF9od192ZXJzaW9uKHN0cnVjdCB3bDEyNzEgKndsKQoreworCXUzMiBmdXNlOworCisJZnVzZSA9IHdsMTI3MV90b3BfcmVnX3JlYWQod2wsIFJFR19GVVNFX0RBVEFfMl8xKTsKKwlmdXNlID0gKGZ1c2UgJiBQR19WRVJfTUFTSykgPj4gUEdfVkVSX09GRlNFVDsKKworCXdsLT5od19wZ192ZXIgPSAoczgpZnVzZTsKK30KKworLyogdXBsb2FkcyBOVlMgYW5kIGZpcm13YXJlICovCitpbnQgd2wxMjcxX2xvYWRfZmlybXdhcmUoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJaW50IHJldCA9IDA7CisJdTMyIHRtcCwgY2xrLCBwYXVzZTsKKworCXdsMTI3MV9ib290X2h3X3ZlcnNpb24od2wpOworCisJaWYgKHdsLT5yZWZfY2xvY2sgPT0gMCB8fCB3bC0+cmVmX2Nsb2NrID09IDIgfHwgd2wtPnJlZl9jbG9jayA9PSA0KQorCQkvKiByZWYgY2xrOiAxOS4yLzM4LjQvMzguNC1YVEFMICovCisJCWNsayA9IDB4MzsKKwllbHNlIGlmICh3bC0+cmVmX2Nsb2NrID09IDEgfHwgd2wtPnJlZl9jbG9jayA9PSAzKQorCQkvKiByZWYgY2xrOiAyNi81MiAqLworCQljbGsgPSAweDU7CisJZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh3bC0+cmVmX2Nsb2NrICE9IDApIHsKKwkJdTE2IHZhbDsKKwkJLyogU2V0IGNsb2NrIHR5cGUgKG9wZW4gZHJhaW4pICovCisJCXZhbCA9IHdsMTI3MV90b3BfcmVnX3JlYWQod2wsIE9DUF9SRUdfQ0xLX1RZUEUpOworCQl2YWwgJj0gRlJFRl9DTEtfVFlQRV9CSVRTOworCQl3bDEyNzFfdG9wX3JlZ193cml0ZSh3bCwgT0NQX1JFR19DTEtfVFlQRSwgdmFsKTsKKworCQkvKiBTZXQgY2xvY2sgcHVsbCBtb2RlIChubyBwdWxsKSAqLworCQl2YWwgPSB3bDEyNzFfdG9wX3JlZ19yZWFkKHdsLCBPQ1BfUkVHX0NMS19QVUxMKTsKKwkJdmFsIHw9IE5PX1BVTEw7CisJCXdsMTI3MV90b3BfcmVnX3dyaXRlKHdsLCBPQ1BfUkVHX0NMS19QVUxMLCB2YWwpOworCX0gZWxzZSB7CisJCXUxNiB2YWw7CisJCS8qIFNldCBjbG9jayBwb2xhcml0eSAqLworCQl2YWwgPSB3bDEyNzFfdG9wX3JlZ19yZWFkKHdsLCBPQ1BfUkVHX0NMS19QT0xBUklUWSk7CisJCXZhbCAmPSBGUkVGX0NMS19QT0xBUklUWV9CSVRTOworCQl2YWwgfD0gQ0xLX1JFUV9PVVROX1NFTDsKKwkJd2wxMjcxX3RvcF9yZWdfd3JpdGUod2wsIE9DUF9SRUdfQ0xLX1BPTEFSSVRZLCB2YWwpOworCX0KKworCXdsMTI3MV93cml0ZTMyKHdsLCBQTExfUEFSQU1FVEVSUywgY2xrKTsKKworCXBhdXNlID0gd2wxMjcxX3JlYWQzMih3bCwgUExMX1BBUkFNRVRFUlMpOworCisJd2wxMjcxX2RlYnVnKERFQlVHX0JPT1QsICJwYXVzZTEgMHgleCIsIHBhdXNlKTsKKworCXBhdXNlICY9IH4oV1VfQ09VTlRFUl9QQVVTRV9WQUwpOworCXBhdXNlIHw9IFdVX0NPVU5URVJfUEFVU0VfVkFMOworCXdsMTI3MV93cml0ZTMyKHdsLCBXVV9DT1VOVEVSX1BBVVNFLCBwYXVzZSk7CisKKwkvKiBDb250aW51ZSB0aGUgRUxQIHdha2UgdXAgc2VxdWVuY2UgKi8KKwl3bDEyNzFfd3JpdGUzMih3bCwgV0VMUF9BUk1fQ09NTUFORCwgV0VMUF9BUk1fQ09NTUFORF9WQUwpOworCXVkZWxheSg1MDApOworCisJd2wxMjcxX3NldF9wYXJ0aXRpb24od2wsICZwYXJ0X3RhYmxlW1BBUlRfRFJQV10pOworCisJLyogUmVhZC1tb2RpZnktd3JpdGUgRFJQV19TQ1JBVENIX1NUQVJUIHJlZ2lzdGVyIChzZWUgbmV4dCBzdGF0ZSkKKwkgICB0byBiZSB1c2VkIGJ5IERSUHcgRlcuIFRoZSBSVFJJTSB2YWx1ZSB3aWxsIGJlIGFkZGVkIGJ5IHRoZSBGVworCSAgIGJlZm9yZSB0YWtpbmcgRFJQdyBvdXQgb2YgcmVzZXQgKi8KKworCXdsMTI3MV9kZWJ1ZyhERUJVR19CT09ULCAiRFJQV19TQ1JBVENIX1NUQVJUICUwOHgiLCBEUlBXX1NDUkFUQ0hfU1RBUlQpOworCWNsayA9IHdsMTI3MV9yZWFkMzIod2wsIERSUFdfU0NSQVRDSF9TVEFSVCk7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfQk9PVCwgImNsazIgMHgleCIsIGNsayk7CisKKwljbGsgfD0gKHdsLT5yZWZfY2xvY2sgPDwgMSkgPDwgNDsKKwl3bDEyNzFfd3JpdGUzMih3bCwgRFJQV19TQ1JBVENIX1NUQVJULCBjbGspOworCisJd2wxMjcxX3NldF9wYXJ0aXRpb24od2wsICZwYXJ0X3RhYmxlW1BBUlRfV09SS10pOworCisJLyogRGlzYWJsZSBpbnRlcnJ1cHRzICovCisJd2wxMjcxX3dyaXRlMzIod2wsIEFDWF9SRUdfSU5URVJSVVBUX01BU0ssIFdMMTI3MV9BQ1hfSU5UUl9BTEwpOworCisJcmV0ID0gd2wxMjcxX2Jvb3Rfc29mdF9yZXNldCh3bCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJLyogMi4gc3RhcnQgcHJvY2Vzc2luZyBOVlMgZmlsZSAqLworCXJldCA9IHdsMTI3MV9ib290X3VwbG9hZF9udnMod2wpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCS8qIHdyaXRlIGZpcm13YXJlJ3MgbGFzdCBhZGRyZXNzIChpZS4gaXQncyBsZW5ndGgpIHRvCisJICogQUNYX0VFUFJPTUxFU1NfSU5EX1JFRyAqLworCXdsMTI3MV9kZWJ1ZyhERUJVR19CT09ULCAiQUNYX0VFUFJPTUxFU1NfSU5EX1JFRyIpOworCisJd2wxMjcxX3dyaXRlMzIod2wsIEFDWF9FRVBST01MRVNTX0lORF9SRUcsIEFDWF9FRVBST01MRVNTX0lORF9SRUcpOworCisJdG1wID0gd2wxMjcxX3JlYWQzMih3bCwgQ0hJUF9JRF9CKTsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19CT09ULCAiY2hpcCBpZCAweCV4IiwgdG1wKTsKKworCS8qIDYuIHJlYWQgdGhlIEVFUFJPTSBwYXJhbWV0ZXJzICovCisJdG1wID0gd2wxMjcxX3JlYWQzMih3bCwgU0NSX1BBRDIpOworCisJcmV0ID0gd2wxMjcxX2Jvb3Rfd3JpdGVfaXJxX3BvbGFyaXR5KHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwl3bDEyNzFfd3JpdGUzMih3bCwgQUNYX1JFR19JTlRFUlJVUFRfTUFTSywKKwkJICAgICAgIFdMMTI3MV9BQ1hfQUxMX0VWRU5UU19WRUNUT1IpOworCisJLyogV0wxMjcxOiBUaGUgcmVmZXJlbmNlIGRyaXZlciBza2lwcyBzdGVwcyA3IHRvIDEwIChqdW1wcyBkaXJlY3RseQorCSAqIHRvIHVwbG9hZF9mdykgKi8KKworCXJldCA9IHdsMTI3MV9ib290X3VwbG9hZF9maXJtd2FyZSh3bCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCitvdXQ6CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHdsMTI3MV9sb2FkX2Zpcm13YXJlKTsKKworaW50IHdsMTI3MV9ib290KHN0cnVjdCB3bDEyNzEgKndsKQoreworCWludCByZXQ7CisKKwkvKiB1cGxvYWQgTlZTIGFuZCBmaXJtd2FyZSAqLworCXJldCA9IHdsMTI3MV9sb2FkX2Zpcm13YXJlKHdsKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogMTAuNSBzdGFydCBmaXJtd2FyZSAqLworCXJldCA9IHdsMTI3MV9ib290X3J1bl9maXJtd2FyZSh3bCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJLyogRW5hYmxlIGZpcm13YXJlIGludGVycnVwdHMgbm93ICovCisJd2wxMjcxX2Jvb3RfZW5hYmxlX2ludGVycnVwdHMod2wpOworCisJLyogc2V0IHRoZSB3bDEyNzEgZGVmYXVsdCBmaWx0ZXJzICovCisJd2wtPnJ4X2NvbmZpZyA9IFdMMTI3MV9ERUZBVUxUX1JYX0NPTkZJRzsKKwl3bC0+cnhfZmlsdGVyID0gV0wxMjcxX0RFRkFVTFRfUlhfRklMVEVSOworCisJd2wxMjcxX2V2ZW50X21ib3hfY29uZmlnKHdsKTsKKworb3V0OgorCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvYm9vdC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2Jvb3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjdkY2ZmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2Jvb3QuaApAQCAtMCwwICsxLDcyIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMjcxCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBDb250YWN0OiBMdWNpYW5vIENvZWxobyA8bHVjaWFuby5jb2VsaG9Abm9raWEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBfX0JPT1RfSF9fCisjZGVmaW5lIF9fQk9PVF9IX18KKworI2luY2x1ZGUgIndsMTJ4eC5oIgorCitpbnQgd2wxMjcxX2Jvb3Qoc3RydWN0IHdsMTI3MSAqd2wpOworaW50IHdsMTI3MV9sb2FkX2Zpcm13YXJlKHN0cnVjdCB3bDEyNzEgKndsKTsKKworI2RlZmluZSBXTDEyNzFfTk9fU1VCQkFORFMgOAorI2RlZmluZSBXTDEyNzFfTk9fUE9XRVJfTEVWRUxTIDQKKyNkZWZpbmUgV0wxMjcxX0ZXX1ZFUlNJT05fTUFYX0xFTiAyMAorCitzdHJ1Y3Qgd2wxMjcxX3N0YXRpY19kYXRhIHsKKwl1OCBtYWNfYWRkcmVzc1tFVEhfQUxFTl07CisJdTggcGFkZGluZ1syXTsKKwl1OCBmd192ZXJzaW9uW1dMMTI3MV9GV19WRVJTSU9OX01BWF9MRU5dOworCXUzMiBod192ZXJzaW9uOworCXU4IHR4X3Bvd2VyX3RhYmxlW1dMMTI3MV9OT19TVUJCQU5EU11bV0wxMjcxX05PX1BPV0VSX0xFVkVMU107Cit9OworCisvKiBudW1iZXIgb2YgdGltZXMgd2UgdHJ5IHRvIHJlYWQgdGhlIElOSVQgaW50ZXJydXB0ICovCisjZGVmaW5lIElOSVRfTE9PUCAyMDAwMAorCisvKiBkZWxheSBiZXR3ZWVuIHJldHJpZXMgKi8KKyNkZWZpbmUgSU5JVF9MT09QX0RFTEFZIDUwCisKKyNkZWZpbmUgV1VfQ09VTlRFUl9QQVVTRV9WQUwgMHgzRkYKKyNkZWZpbmUgV0VMUF9BUk1fQ09NTUFORF9WQUwgMHg0CisKKyNkZWZpbmUgT0NQX1JFR19QT0xBUklUWSAgICAgMHgwMDY0CisjZGVmaW5lIE9DUF9SRUdfQ0xLX1RZUEUgICAgIDB4MDQ0OAorI2RlZmluZSBPQ1BfUkVHX0NMS19QT0xBUklUWSAweDBjYjIKKyNkZWZpbmUgT0NQX1JFR19DTEtfUFVMTCAgICAgMHgwY2I0CisKKyNkZWZpbmUgUkVHX0ZVU0VfREFUQV8yXzEgICAgMHgwNTBhCisjZGVmaW5lIFBHX1ZFUl9NQVNLICAgICAgICAgIDB4M2MKKyNkZWZpbmUgUEdfVkVSX09GRlNFVCAgICAgICAgMgorCisjZGVmaW5lIENNRF9NQk9YX0FERFJFU1MgICAgIDB4NDA3QjQKKworI2RlZmluZSBQT0xBUklUWV9MT1cgICAgICAgICBCSVQoMSkKKyNkZWZpbmUgTk9fUFVMTCAgICAgICAgICAgICAgKEJJVCgxNCkgfCBCSVQoMTUpKQorCisjZGVmaW5lIEZSRUZfQ0xLX1RZUEVfQklUUyAgICAgMHhmZmZmZmU3ZgorI2RlZmluZSBDTEtfUkVRX1BSQ00gICAgICAgICAgIDB4MTAwCisjZGVmaW5lIEZSRUZfQ0xLX1BPTEFSSVRZX0JJVFMgMHhmZmZmZjhmZgorI2RlZmluZSBDTEtfUkVRX09VVE5fU0VMICAgICAgIDB4NzAwCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2NtZC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2NtZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxMDY2MjgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvY21kLmMKQEAgLTAsMCArMSw4NTIgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3bDEyNzEKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIENvbnRhY3Q6IEx1Y2lhbm8gQ29lbGhvIDxsdWNpYW5vLmNvZWxob0Bub2tpYS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvY3JjNy5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2llZWU4MDIxMS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworI2luY2x1ZGUgIndsMTJ4eC5oIgorI2luY2x1ZGUgInJlZy5oIgorI2luY2x1ZGUgImlvLmgiCisjaW5jbHVkZSAiYWN4LmgiCisjaW5jbHVkZSAid2wxMnh4XzgwMjExLmgiCisjaW5jbHVkZSAiY21kLmgiCisjaW5jbHVkZSAiZXZlbnQuaCIKKworI2RlZmluZSBXTDEyNzFfQ01EX0ZBU1RfUE9MTF9DT1VOVCAgICAgICA1MAorCisvKgorICogc2VuZCBjb21tYW5kIHRvIGZpcm13YXJlCisgKgorICogQHdsOiB3bCBzdHJ1Y3QKKyAqIEBpZDogY29tbWFuZCBpZAorICogQGJ1ZjogYnVmZmVyIGNvbnRhaW5pbmcgdGhlIGNvbW1hbmQsIG11c3Qgd29yayB3aXRoIGRtYQorICogQGxlbjogbGVuZ3RoIG9mIHRoZSBidWZmZXIKKyAqLworaW50IHdsMTI3MV9jbWRfc2VuZChzdHJ1Y3Qgd2wxMjcxICp3bCwgdTE2IGlkLCB2b2lkICpidWYsIHNpemVfdCBsZW4sCisJCSAgICBzaXplX3QgcmVzX2xlbikKK3sKKwlzdHJ1Y3Qgd2wxMjcxX2NtZF9oZWFkZXIgKmNtZDsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisJdTMyIGludHI7CisJaW50IHJldCA9IDA7CisJdTE2IHN0YXR1czsKKwl1MTYgcG9sbF9jb3VudCA9IDA7CisKKwljbWQgPSBidWY7CisJY21kLT5pZCA9IGNwdV90b19sZTE2KGlkKTsKKwljbWQtPnN0YXR1cyA9IDA7CisKKwlXQVJOX09OKGxlbiAlIDQgIT0gMCk7CisKKwl3bDEyNzFfd3JpdGUod2wsIHdsLT5jbWRfYm94X2FkZHIsIGJ1ZiwgbGVuLCBmYWxzZSk7CisKKwl3bDEyNzFfd3JpdGUzMih3bCwgQUNYX1JFR19JTlRFUlJVUFRfVFJJRywgSU5UUl9UUklHX0NNRCk7CisKKwl0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoV0wxMjcxX0NPTU1BTkRfVElNRU9VVCk7CisKKwlpbnRyID0gd2wxMjcxX3JlYWQzMih3bCwgQUNYX1JFR19JTlRFUlJVUFRfTk9fQ0xFQVIpOworCXdoaWxlICghKGludHIgJiBXTDEyNzFfQUNYX0lOVFJfQ01EX0NPTVBMRVRFKSkgeworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgeworCQkJd2wxMjcxX2Vycm9yKCJjb21tYW5kIGNvbXBsZXRlIHRpbWVvdXQiKTsKKwkJCXJldCA9IC1FVElNRURPVVQ7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCXBvbGxfY291bnQrKzsKKwkJaWYgKHBvbGxfY291bnQgPCBXTDEyNzFfQ01EX0ZBU1RfUE9MTF9DT1VOVCkKKwkJCXVkZWxheSgxMCk7CisJCWVsc2UKKwkJCW1zbGVlcCgxKTsKKworCQlpbnRyID0gd2wxMjcxX3JlYWQzMih3bCwgQUNYX1JFR19JTlRFUlJVUFRfTk9fQ0xFQVIpOworCX0KKworCS8qIHJlYWQgYmFjayB0aGUgc3RhdHVzIGNvZGUgb2YgdGhlIGNvbW1hbmQgKi8KKwlpZiAocmVzX2xlbiA9PSAwKQorCQlyZXNfbGVuID0gc2l6ZW9mKHN0cnVjdCB3bDEyNzFfY21kX2hlYWRlcik7CisJd2wxMjcxX3JlYWQod2wsIHdsLT5jbWRfYm94X2FkZHIsIGNtZCwgcmVzX2xlbiwgZmFsc2UpOworCisJc3RhdHVzID0gbGUxNl90b19jcHUoY21kLT5zdGF0dXMpOworCWlmIChzdGF0dXMgIT0gQ01EX1NUQVRVU19TVUNDRVNTKSB7CisJCXdsMTI3MV9lcnJvcigiY29tbWFuZCBleGVjdXRlIGZhaWx1cmUgJWQiLCBzdGF0dXMpOworCQlpZWVlODAyMTFfcXVldWVfd29yayh3bC0+aHcsICZ3bC0+cmVjb3Zlcnlfd29yayk7CisJCXJldCA9IC1FSU87CisJfQorCisJd2wxMjcxX3dyaXRlMzIod2wsIEFDWF9SRUdfSU5URVJSVVBUX0FDSywKKwkJICAgICAgIFdMMTI3MV9BQ1hfSU5UUl9DTURfQ09NUExFVEUpOworCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI3MV9jbWRfZ2VuZXJhbF9wYXJtcyhzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlzdHJ1Y3Qgd2wxMjcxX2dlbmVyYWxfcGFybXNfY21kICpnZW5fcGFybXM7CisJc3RydWN0IHdsMTI3MV9pbmlfZ2VuZXJhbF9wYXJhbXMgKmdwID0gJndsLT5udnMtPmdlbmVyYWxfcGFyYW1zOworCWJvb2wgYW5zd2VyID0gZmFsc2U7CisJaW50IHJldDsKKworCWlmICghd2wtPm52cykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlnZW5fcGFybXMgPSBremFsbG9jKHNpemVvZigqZ2VuX3Bhcm1zKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFnZW5fcGFybXMpCisJCXJldHVybiAtRU5PTUVNOworCisJZ2VuX3Bhcm1zLT50ZXN0LmlkID0gVEVTVF9DTURfSU5JX0ZJTEVfR0VORVJBTF9QQVJBTTsKKworCW1lbWNweSgmZ2VuX3Bhcm1zLT5nZW5lcmFsX3BhcmFtcywgZ3AsIHNpemVvZigqZ3ApKTsKKworCWlmIChncC0+dHhfYmlwX2ZlbV9hdXRvX2RldGVjdCkKKwkJYW5zd2VyID0gdHJ1ZTsKKworCXJldCA9IHdsMTI3MV9jbWRfdGVzdCh3bCwgZ2VuX3Bhcm1zLCBzaXplb2YoKmdlbl9wYXJtcyksIGFuc3dlcik7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX3dhcm5pbmcoIkNNRF9JTklfRklMRV9HRU5FUkFMX1BBUkFNIGZhaWxlZCIpOworCQlnb3RvIG91dDsKKwl9CisKKwlncC0+dHhfYmlwX2ZlbV9tYW51ZmFjdHVyZXIgPQorCQlnZW5fcGFybXMtPmdlbmVyYWxfcGFyYW1zLnR4X2JpcF9mZW1fbWFudWZhY3R1cmVyOworCisJd2wxMjcxX2RlYnVnKERFQlVHX0NNRCwgIkZFTSBhdXRvZGV0ZWN0OiAlcywgbWFudWZhY3R1cmVyOiAlZFxuIiwKKwkJICAgICBhbnN3ZXIgPyAiYXV0byIgOiAibWFudWFsIiwgZ3AtPnR4X2JpcF9mZW1fbWFudWZhY3R1cmVyKTsKKworb3V0OgorCWtmcmVlKGdlbl9wYXJtcyk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI3MV9jbWRfcmFkaW9fcGFybXMoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJc3RydWN0IHdsMTI3MV9yYWRpb19wYXJtc19jbWQgKnJhZGlvX3Bhcm1zOworCXN0cnVjdCB3bDEyNzFfaW5pX2dlbmVyYWxfcGFyYW1zICpncCA9ICZ3bC0+bnZzLT5nZW5lcmFsX3BhcmFtczsKKwlpbnQgcmV0OworCisJaWYgKCF3bC0+bnZzKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJhZGlvX3Bhcm1zID0ga3phbGxvYyhzaXplb2YoKnJhZGlvX3Bhcm1zKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyYWRpb19wYXJtcykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyYWRpb19wYXJtcy0+dGVzdC5pZCA9IFRFU1RfQ01EX0lOSV9GSUxFX1JBRElPX1BBUkFNOworCisJLyogMi40R0h6IHBhcmFtZXRlcnMgKi8KKwltZW1jcHkoJnJhZGlvX3Bhcm1zLT5zdGF0aWNfcGFyYW1zXzIsICZ3bC0+bnZzLT5zdGF0X3JhZGlvX3BhcmFtc18yLAorCSAgICAgICBzaXplb2Yoc3RydWN0IHdsMTI3MV9pbmlfYmFuZF9wYXJhbXNfMikpOworCW1lbWNweSgmcmFkaW9fcGFybXMtPmR5bl9wYXJhbXNfMiwKKwkgICAgICAgJndsLT5udnMtPmR5bl9yYWRpb19wYXJhbXNfMltncC0+dHhfYmlwX2ZlbV9tYW51ZmFjdHVyZXJdLnBhcmFtcywKKwkgICAgICAgc2l6ZW9mKHN0cnVjdCB3bDEyNzFfaW5pX2ZlbV9wYXJhbXNfMikpOworCisJLyogNUdIeiBwYXJhbWV0ZXJzICovCisJbWVtY3B5KCZyYWRpb19wYXJtcy0+c3RhdGljX3BhcmFtc181LAorCSAgICAgICAmd2wtPm52cy0+c3RhdF9yYWRpb19wYXJhbXNfNSwKKwkgICAgICAgc2l6ZW9mKHN0cnVjdCB3bDEyNzFfaW5pX2JhbmRfcGFyYW1zXzUpKTsKKwltZW1jcHkoJnJhZGlvX3Bhcm1zLT5keW5fcGFyYW1zXzUsCisJICAgICAgICZ3bC0+bnZzLT5keW5fcmFkaW9fcGFyYW1zXzVbZ3AtPnR4X2JpcF9mZW1fbWFudWZhY3R1cmVyXS5wYXJhbXMsCisJICAgICAgIHNpemVvZihzdHJ1Y3Qgd2wxMjcxX2luaV9mZW1fcGFyYW1zXzUpKTsKKworCXdsMTI3MV9kdW1wKERFQlVHX0NNRCwgIlRFU1RfQ01EX0lOSV9GSUxFX1JBRElPX1BBUkFNOiAiLAorCQkgICAgcmFkaW9fcGFybXMsIHNpemVvZigqcmFkaW9fcGFybXMpKTsKKworCXJldCA9IHdsMTI3MV9jbWRfdGVzdCh3bCwgcmFkaW9fcGFybXMsIHNpemVvZigqcmFkaW9fcGFybXMpLCAwKTsKKwlpZiAocmV0IDwgMCkKKwkJd2wxMjcxX3dhcm5pbmcoIkNNRF9JTklfRklMRV9SQURJT19QQVJBTSBmYWlsZWQiKTsKKworCWtmcmVlKHJhZGlvX3Bhcm1zKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxMjcxX2NtZF9leHRfcmFkaW9fcGFybXMoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJc3RydWN0IHdsMTI3MV9leHRfcmFkaW9fcGFybXNfY21kICpleHRfcmFkaW9fcGFybXM7CisJc3RydWN0IGNvbmZfcmZfc2V0dGluZ3MgKnJmID0gJndsLT5jb25mLnJmOworCWludCByZXQ7CisKKwlpZiAoIXdsLT5udnMpCisJCXJldHVybiAtRU5PREVWOworCisJZXh0X3JhZGlvX3Bhcm1zID0ga3phbGxvYyhzaXplb2YoKmV4dF9yYWRpb19wYXJtcyksIEdGUF9LRVJORUwpOworCWlmICghZXh0X3JhZGlvX3Bhcm1zKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWV4dF9yYWRpb19wYXJtcy0+dGVzdC5pZCA9IFRFU1RfQ01EX0lOSV9GSUxFX1JGX0VYVEVOREVEX1BBUkFNOworCisJbWVtY3B5KGV4dF9yYWRpb19wYXJtcy0+dHhfcGVyX2NoYW5uZWxfcG93ZXJfY29tcGVuc2F0aW9uXzIsCisJICAgICAgIHJmLT50eF9wZXJfY2hhbm5lbF9wb3dlcl9jb21wZW5zYXRpb25fMiwKKwkgICAgICAgQ09ORl9UWF9QV1JfQ09NUEVOU0FUSU9OX0xFTl8yKTsKKwltZW1jcHkoZXh0X3JhZGlvX3Bhcm1zLT50eF9wZXJfY2hhbm5lbF9wb3dlcl9jb21wZW5zYXRpb25fNSwKKwkgICAgICAgcmYtPnR4X3Blcl9jaGFubmVsX3Bvd2VyX2NvbXBlbnNhdGlvbl81LAorCSAgICAgICBDT05GX1RYX1BXUl9DT01QRU5TQVRJT05fTEVOXzUpOworCisJd2wxMjcxX2R1bXAoREVCVUdfQ01ELCAiVEVTVF9DTURfSU5JX0ZJTEVfRVhUX1JBRElPX1BBUkFNOiAiLAorCQkgICAgZXh0X3JhZGlvX3Bhcm1zLCBzaXplb2YoKmV4dF9yYWRpb19wYXJtcykpOworCisJcmV0ID0gd2wxMjcxX2NtZF90ZXN0KHdsLCBleHRfcmFkaW9fcGFybXMsIHNpemVvZigqZXh0X3JhZGlvX3Bhcm1zKSwgMCk7CisJaWYgKHJldCA8IDApCisJCXdsMTI3MV93YXJuaW5nKCJURVNUX0NNRF9JTklfRklMRV9SRl9FWFRFTkRFRF9QQVJBTSBmYWlsZWQiKTsKKworCWtmcmVlKGV4dF9yYWRpb19wYXJtcyk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFBvbGwgdGhlIG1haWxib3ggZXZlbnQgZmllbGQgdW50aWwgYW55IG9mIHRoZSBiaXRzIGluIHRoZSBtYXNrIGlzIHNldCBvciBhCisgKiB0aW1lb3V0IG9jY3VycyAoV0wxMjcxX0VWRU5UX1RJTUVPVVQgaW4gbXNlY3MpCisgKi8KK3N0YXRpYyBpbnQgd2wxMjcxX2NtZF93YWl0X2Zvcl9ldmVudChzdHJ1Y3Qgd2wxMjcxICp3bCwgdTMyIG1hc2spCit7CisJdTMyIGV2ZW50c192ZWN0b3IsIGV2ZW50OworCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKKworCXRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhXTDEyNzFfRVZFTlRfVElNRU9VVCk7CisKKwlkbyB7CisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7CisJCQlpZWVlODAyMTFfcXVldWVfd29yayh3bC0+aHcsICZ3bC0+cmVjb3Zlcnlfd29yayk7CisJCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwkJfQorCisJCW1zbGVlcCgxKTsKKworCQkvKiByZWFkIGZyb20gYm90aCBldmVudCBmaWVsZHMgKi8KKwkJd2wxMjcxX3JlYWQod2wsIHdsLT5tYm94X3B0clswXSwgJmV2ZW50c192ZWN0b3IsCisJCQkgICAgc2l6ZW9mKGV2ZW50c192ZWN0b3IpLCBmYWxzZSk7CisJCWV2ZW50ID0gZXZlbnRzX3ZlY3RvciAmIG1hc2s7CisJCXdsMTI3MV9yZWFkKHdsLCB3bC0+bWJveF9wdHJbMV0sICZldmVudHNfdmVjdG9yLAorCQkJICAgIHNpemVvZihldmVudHNfdmVjdG9yKSwgZmFsc2UpOworCQlldmVudCB8PSBldmVudHNfdmVjdG9yICYgbWFzazsKKwl9IHdoaWxlICghZXZlbnQpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCB3bDEyNzFfY21kX2pvaW4oc3RydWN0IHdsMTI3MSAqd2wsIHU4IGJzc190eXBlKQoreworCXN0cnVjdCB3bDEyNzFfY21kX2pvaW4gKmpvaW47CisJaW50IHJldCwgaTsKKwl1OCAqYnNzaWQ7CisKKwlqb2luID0ga3phbGxvYyhzaXplb2YoKmpvaW4pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWpvaW4pIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJd2wxMjcxX2RlYnVnKERFQlVHX0NNRCwgImNtZCBqb2luIik7CisKKwkvKiBSZXZlcnNlIG9yZGVyIEJTU0lEICovCisJYnNzaWQgPSAodTggKikgJmpvaW4tPmJzc2lkX2xzYjsKKwlmb3IgKGkgPSAwOyBpIDwgRVRIX0FMRU47IGkrKykKKwkJYnNzaWRbaV0gPSB3bC0+YnNzaWRbRVRIX0FMRU4gLSBpIC0gMV07CisKKwlqb2luLT5yeF9jb25maWdfb3B0aW9ucyA9IGNwdV90b19sZTMyKHdsLT5yeF9jb25maWcpOworCWpvaW4tPnJ4X2ZpbHRlcl9vcHRpb25zID0gY3B1X3RvX2xlMzIod2wtPnJ4X2ZpbHRlcik7CisJam9pbi0+YnNzX3R5cGUgPSBic3NfdHlwZTsKKwlqb2luLT5iYXNpY19yYXRlX3NldCA9IGNwdV90b19sZTMyKHdsLT5iYXNpY19yYXRlX3NldCk7CisKKwlpZiAod2wtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikKKwkJam9pbi0+YnNzX3R5cGUgfD0gV0wxMjcxX0pPSU5fQ01EX0JTU19UWVBFXzVHSFo7CisKKwlqb2luLT5iZWFjb25faW50ZXJ2YWwgPSBjcHVfdG9fbGUxNih3bC0+YmVhY29uX2ludCk7CisJam9pbi0+ZHRpbV9pbnRlcnZhbCA9IFdMMTI3MV9ERUZBVUxUX0RUSU1fUEVSSU9EOworCisJam9pbi0+Y2hhbm5lbCA9IHdsLT5jaGFubmVsOworCWpvaW4tPnNzaWRfbGVuID0gd2wtPnNzaWRfbGVuOworCW1lbWNweShqb2luLT5zc2lkLCB3bC0+c3NpZCwgd2wtPnNzaWRfbGVuKTsKKworCWpvaW4tPmN0cmwgfD0gd2wtPnNlc3Npb25fY291bnRlciA8PCBXTDEyNzFfSk9JTl9DTURfVFhfU0VTU0lPTl9PRkZTRVQ7CisKKwkvKiByZXNldCBUWCBzZWN1cml0eSBjb3VudGVycyAqLworCXdsLT50eF9zZWN1cml0eV9sYXN0X3NlcSA9IDA7CisJd2wtPnR4X3NlY3VyaXR5X3NlcSA9IDA7CisKKwlyZXQgPSB3bDEyNzFfY21kX3NlbmQod2wsIENNRF9TVEFSVF9KT0lOLCBqb2luLCBzaXplb2YoKmpvaW4pLCAwKTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNzFfZXJyb3IoImZhaWxlZCB0byBpbml0aWF0ZSBjbWQgam9pbiIpOworCQlnb3RvIG91dF9mcmVlOworCX0KKworCXJldCA9IHdsMTI3MV9jbWRfd2FpdF9mb3JfZXZlbnQod2wsIEpPSU5fRVZFTlRfQ09NUExFVEVfSUQpOworCWlmIChyZXQgPCAwKQorCQl3bDEyNzFfZXJyb3IoImNtZCBqb2luIGV2ZW50IGNvbXBsZXRpb24gZXJyb3IiKTsKKworb3V0X2ZyZWU6CisJa2ZyZWUoam9pbik7CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIHNlbmQgdGVzdCBjb21tYW5kIHRvIGZpcm13YXJlCisgKgorICogQHdsOiB3bCBzdHJ1Y3QKKyAqIEBidWY6IGJ1ZmZlciBjb250YWluaW5nIHRoZSBjb21tYW5kLCB3aXRoIGFsbCBoZWFkZXJzLCBtdXN0IHdvcmsgd2l0aCBkbWEKKyAqIEBsZW46IGxlbmd0aCBvZiB0aGUgYnVmZmVyCisgKiBAYW5zd2VyOiBpcyBhbnN3ZXIgbmVlZGVkCisgKi8KK2ludCB3bDEyNzFfY21kX3Rlc3Qoc3RydWN0IHdsMTI3MSAqd2wsIHZvaWQgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4sIHU4IGFuc3dlcikKK3sKKwlpbnQgcmV0OworCXNpemVfdCByZXNfbGVuID0gMDsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19DTUQsICJjbWQgdGVzdCIpOworCisJaWYgKGFuc3dlcikKKwkJcmVzX2xlbiA9IGJ1Zl9sZW47CisKKwlyZXQgPSB3bDEyNzFfY21kX3NlbmQod2wsIENNRF9URVNULCBidWYsIGJ1Zl9sZW4sIHJlc19sZW4pOworCisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX3dhcm5pbmcoIlRFU1QgY29tbWFuZCBmYWlsZWQiKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIHJlYWQgYWN4IGZyb20gZmlybXdhcmUKKyAqCisgKiBAd2w6IHdsIHN0cnVjdAorICogQGlkOiBhY3ggaWQKKyAqIEBidWY6IGJ1ZmZlciBmb3IgdGhlIHJlc3BvbnNlLCBpbmNsdWRpbmcgYWxsIGhlYWRlcnMsIG11c3Qgd29yayB3aXRoIGRtYQorICogQGxlbjogbGVuZ2h0IG9mIGJ1ZgorICovCitpbnQgd2wxMjcxX2NtZF9pbnRlcnJvZ2F0ZShzdHJ1Y3Qgd2wxMjcxICp3bCwgdTE2IGlkLCB2b2lkICpidWYsIHNpemVfdCBsZW4pCit7CisJc3RydWN0IGFjeF9oZWFkZXIgKmFjeCA9IGJ1ZjsKKwlpbnQgcmV0OworCisJd2wxMjcxX2RlYnVnKERFQlVHX0NNRCwgImNtZCBpbnRlcnJvZ2F0ZSIpOworCisJYWN4LT5pZCA9IGNwdV90b19sZTE2KGlkKTsKKworCS8qIHBheWxvYWQgbGVuZ3RoLCBkb2VzIG5vdCBpbmNsdWRlIGFueSBoZWFkZXJzICovCisJYWN4LT5sZW4gPSBjcHVfdG9fbGUxNihsZW4gLSBzaXplb2YoKmFjeCkpOworCisJcmV0ID0gd2wxMjcxX2NtZF9zZW5kKHdsLCBDTURfSU5URVJST0dBVEUsIGFjeCwgc2l6ZW9mKCphY3gpLCBsZW4pOworCWlmIChyZXQgPCAwKQorCQl3bDEyNzFfZXJyb3IoIklOVEVSUk9HQVRFIGNvbW1hbmQgZmFpbGVkIik7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIHdyaXRlIGFjeCB2YWx1ZSB0byBmaXJtd2FyZQorICoKKyAqIEB3bDogd2wgc3RydWN0CisgKiBAaWQ6IGFjeCBpZAorICogQGJ1ZjogYnVmZmVyIGNvbnRhaW5pbmcgYWN4LCBpbmNsdWRpbmcgYWxsIGhlYWRlcnMsIG11c3Qgd29yayB3aXRoIGRtYQorICogQGxlbjogbGVuZ3RoIG9mIGJ1ZgorICovCitpbnQgd2wxMjcxX2NtZF9jb25maWd1cmUoc3RydWN0IHdsMTI3MSAqd2wsIHUxNiBpZCwgdm9pZCAqYnVmLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCBhY3hfaGVhZGVyICphY3ggPSBidWY7CisJaW50IHJldDsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19DTUQsICJjbWQgY29uZmlndXJlIik7CisKKwlhY3gtPmlkID0gY3B1X3RvX2xlMTYoaWQpOworCisJLyogcGF5bG9hZCBsZW5ndGgsIGRvZXMgbm90IGluY2x1ZGUgYW55IGhlYWRlcnMgKi8KKwlhY3gtPmxlbiA9IGNwdV90b19sZTE2KGxlbiAtIHNpemVvZigqYWN4KSk7CisKKwlyZXQgPSB3bDEyNzFfY21kX3NlbmQod2wsIENNRF9DT05GSUdVUkUsIGFjeCwgbGVuLCAwKTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNzFfd2FybmluZygiQ09ORklHVVJFIGNvbW1hbmQgTk9LIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCB3bDEyNzFfY21kX2RhdGFfcGF0aChzdHJ1Y3Qgd2wxMjcxICp3bCwgYm9vbCBlbmFibGUpCit7CisJc3RydWN0IGNtZF9lbmFibGVkaXNhYmxlX3BhdGggKmNtZDsKKwlpbnQgcmV0OworCXUxNiBjbWRfcngsIGNtZF90eDsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19DTUQsICJjbWQgZGF0YSBwYXRoIik7CisKKwljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjbWQpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogdGhlIGNoYW5uZWwgaGVyZSBpcyBvbmx5IHVzZWQgZm9yIGNhbGlicmF0aW9uLCBzbyBoYXJkY29kZWQgdG8gMSAqLworCWNtZC0+Y2hhbm5lbCA9IDE7CisKKwlpZiAoZW5hYmxlKSB7CisJCWNtZF9yeCA9IENNRF9FTkFCTEVfUlg7CisJCWNtZF90eCA9IENNRF9FTkFCTEVfVFg7CisJfSBlbHNlIHsKKwkJY21kX3J4ID0gQ01EX0RJU0FCTEVfUlg7CisJCWNtZF90eCA9IENNRF9ESVNBQkxFX1RYOworCX0KKworCXJldCA9IHdsMTI3MV9jbWRfc2VuZCh3bCwgY21kX3J4LCBjbWQsIHNpemVvZigqY21kKSwgMCk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX2Vycm9yKCJyeCAlcyBjbWQgZm9yIGNoYW5uZWwgJWQgZmFpbGVkIiwKKwkJCSAgICAgZW5hYmxlID8gInN0YXJ0IiA6ICJzdG9wIiwgY21kLT5jaGFubmVsKTsKKwkJZ290byBvdXQ7CisJfQorCisJd2wxMjcxX2RlYnVnKERFQlVHX0JPT1QsICJyeCAlcyBjbWQgY2hhbm5lbCAlZCIsCisJCSAgICAgZW5hYmxlID8gInN0YXJ0IiA6ICJzdG9wIiwgY21kLT5jaGFubmVsKTsKKworCXJldCA9IHdsMTI3MV9jbWRfc2VuZCh3bCwgY21kX3R4LCBjbWQsIHNpemVvZigqY21kKSwgMCk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX2Vycm9yKCJ0eCAlcyBjbWQgZm9yIGNoYW5uZWwgJWQgZmFpbGVkIiwKKwkJCSAgICAgZW5hYmxlID8gInN0YXJ0IiA6ICJzdG9wIiwgY21kLT5jaGFubmVsKTsKKwkJZ290byBvdXQ7CisJfQorCisJd2wxMjcxX2RlYnVnKERFQlVHX0JPT1QsICJ0eCAlcyBjbWQgY2hhbm5lbCAlZCIsCisJCSAgICAgZW5hYmxlID8gInN0YXJ0IiA6ICJzdG9wIiwgY21kLT5jaGFubmVsKTsKKworb3V0OgorCWtmcmVlKGNtZCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI3MV9jbWRfcHNfbW9kZShzdHJ1Y3Qgd2wxMjcxICp3bCwgdTggcHNfbW9kZSwgdTMyIHJhdGVzLCBib29sIHNlbmQpCit7CisJc3RydWN0IHdsMTI3MV9jbWRfcHNfcGFyYW1zICpwc19wYXJhbXMgPSBOVUxMOworCWludCByZXQgPSAwOworCisJd2wxMjcxX2RlYnVnKERFQlVHX0NNRCwgImNtZCBzZXQgcHMgbW9kZSIpOworCisJcHNfcGFyYW1zID0ga3phbGxvYyhzaXplb2YoKnBzX3BhcmFtcyksIEdGUF9LRVJORUwpOworCWlmICghcHNfcGFyYW1zKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCXBzX3BhcmFtcy0+cHNfbW9kZSA9IHBzX21vZGU7CisJcHNfcGFyYW1zLT5zZW5kX251bGxfZGF0YSA9IHNlbmQ7CisJcHNfcGFyYW1zLT5yZXRyaWVzID0gd2wtPmNvbmYuY29ubi5wc21fZW50cnlfbnVsbGZ1bmNfcmV0cmllczsKKwlwc19wYXJhbXMtPmhhbmdfb3Zlcl9wZXJpb2QgPSB3bC0+Y29uZi5jb25uLnBzbV9lbnRyeV9oYW5nb3Zlcl9wZXJpb2Q7CisJcHNfcGFyYW1zLT5udWxsX2RhdGFfcmF0ZSA9IGNwdV90b19sZTMyKHJhdGVzKTsKKworCXJldCA9IHdsMTI3MV9jbWRfc2VuZCh3bCwgQ01EX1NFVF9QU19NT0RFLCBwc19wYXJhbXMsCisJCQkgICAgICBzaXplb2YoKnBzX3BhcmFtcyksIDApOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV9lcnJvcigiY21kIHNldF9wc19tb2RlIGZhaWxlZCIpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZShwc19wYXJhbXMpOworCXJldHVybiByZXQ7Cit9CisKK2ludCB3bDEyNzFfY21kX3RlbXBsYXRlX3NldChzdHJ1Y3Qgd2wxMjcxICp3bCwgdTE2IHRlbXBsYXRlX2lkLAorCQkJICAgIHZvaWQgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4sIGludCBpbmRleCwgdTMyIHJhdGVzKQoreworCXN0cnVjdCB3bDEyNzFfY21kX3RlbXBsYXRlX3NldCAqY21kOworCWludCByZXQgPSAwOworCisJd2wxMjcxX2RlYnVnKERFQlVHX0NNRCwgImNtZCB0ZW1wbGF0ZV9zZXQgJWQiLCB0ZW1wbGF0ZV9pZCk7CisKKwlXQVJOX09OKGJ1Zl9sZW4gPiBXTDEyNzFfQ01EX1RFTVBMX01BWF9TSVpFKTsKKwlidWZfbGVuID0gbWluX3Qoc2l6ZV90LCBidWZfbGVuLCBXTDEyNzFfQ01EX1RFTVBMX01BWF9TSVpFKTsKKworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNtZCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwljbWQtPmxlbiA9IGNwdV90b19sZTE2KGJ1Zl9sZW4pOworCWNtZC0+dGVtcGxhdGVfdHlwZSA9IHRlbXBsYXRlX2lkOworCWNtZC0+ZW5hYmxlZF9yYXRlcyA9IGNwdV90b19sZTMyKHJhdGVzKTsKKwljbWQtPnNob3J0X3JldHJ5X2xpbWl0ID0gd2wtPmNvbmYudHgucmNfY29uZi5zaG9ydF9yZXRyeV9saW1pdDsKKwljbWQtPmxvbmdfcmV0cnlfbGltaXQgPSB3bC0+Y29uZi50eC5yY19jb25mLmxvbmdfcmV0cnlfbGltaXQ7CisJY21kLT5pbmRleCA9IGluZGV4OworCisJaWYgKGJ1ZikKKwkJbWVtY3B5KGNtZC0+dGVtcGxhdGVfZGF0YSwgYnVmLCBidWZfbGVuKTsKKworCXJldCA9IHdsMTI3MV9jbWRfc2VuZCh3bCwgQ01EX1NFVF9URU1QTEFURSwgY21kLCBzaXplb2YoKmNtZCksIDApOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV93YXJuaW5nKCJjbWQgc2V0X3RlbXBsYXRlIGZhaWxlZDogJWQiLCByZXQpOworCQlnb3RvIG91dF9mcmVlOworCX0KKworb3V0X2ZyZWU6CisJa2ZyZWUoY21kKTsKKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK2ludCB3bDEyNzFfY21kX2J1aWxkX251bGxfZGF0YShzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKKwlpbnQgc2l6ZTsKKwl2b2lkICpwdHI7CisJaW50IHJldCA9IC1FTk9NRU07CisKKworCWlmICh3bC0+YnNzX3R5cGUgPT0gQlNTX1RZUEVfSUJTUykgeworCQlzaXplID0gc2l6ZW9mKHN0cnVjdCB3bDEyeHhfbnVsbF9kYXRhX3RlbXBsYXRlKTsKKwkJcHRyID0gTlVMTDsKKwl9IGVsc2UgeworCQlza2IgPSBpZWVlODAyMTFfbnVsbGZ1bmNfZ2V0KHdsLT5odywgd2wtPnZpZik7CisJCWlmICghc2tiKQorCQkJZ290byBvdXQ7CisJCXNpemUgPSBza2ItPmxlbjsKKwkJcHRyID0gc2tiLT5kYXRhOworCX0KKworCXJldCA9IHdsMTI3MV9jbWRfdGVtcGxhdGVfc2V0KHdsLCBDTURfVEVNUExfTlVMTF9EQVRBLCBwdHIsIHNpemUsIDAsCisJCQkJICAgICAgd2wtPmJhc2ljX3JhdGUpOworCitvdXQ6CisJZGV2X2tmcmVlX3NrYihza2IpOworCWlmIChyZXQpCisJCXdsMTI3MV93YXJuaW5nKCJjbWQgYnVsZCBudWxsIGRhdGEgZmFpbGVkICVkIiwgcmV0KTsKKworCXJldHVybiByZXQ7CisKK30KKworaW50IHdsMTI3MV9jbWRfYnVpbGRfa2x2X251bGxfZGF0YShzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKKwlpbnQgcmV0ID0gLUVOT01FTTsKKworCXNrYiA9IGllZWU4MDIxMV9udWxsZnVuY19nZXQod2wtPmh3LCB3bC0+dmlmKTsKKwlpZiAoIXNrYikKKwkJZ290byBvdXQ7CisKKwlyZXQgPSB3bDEyNzFfY21kX3RlbXBsYXRlX3NldCh3bCwgQ01EX1RFTVBMX0tMViwKKwkJCQkgICAgICBza2ItPmRhdGEsIHNrYi0+bGVuLAorCQkJCSAgICAgIENNRF9URU1QTF9LTFZfSURYX05VTExfREFUQSwKKwkJCQkgICAgICB3bC0+YmFzaWNfcmF0ZSk7CisKK291dDoKKwlkZXZfa2ZyZWVfc2tiKHNrYik7CisJaWYgKHJldCkKKwkJd2wxMjcxX3dhcm5pbmcoImNtZCBidWlsZCBrbHYgbnVsbCBkYXRhIGZhaWxlZCAlZCIsIHJldCk7CisKKwlyZXR1cm4gcmV0OworCit9CisKK2ludCB3bDEyNzFfY21kX2J1aWxkX3BzX3BvbGwoc3RydWN0IHdsMTI3MSAqd2wsIHUxNiBhaWQpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlpbnQgcmV0ID0gMDsKKworCXNrYiA9IGllZWU4MDIxMV9wc3BvbGxfZ2V0KHdsLT5odywgd2wtPnZpZik7CisJaWYgKCFza2IpCisJCWdvdG8gb3V0OworCisJcmV0ID0gd2wxMjcxX2NtZF90ZW1wbGF0ZV9zZXQod2wsIENNRF9URU1QTF9QU19QT0xMLCBza2ItPmRhdGEsCisJCQkJICAgICAgc2tiLT5sZW4sIDAsIHdsLT5iYXNpY19yYXRlX3NldCk7CisKK291dDoKKwlkZXZfa2ZyZWVfc2tiKHNrYik7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI3MV9jbWRfYnVpbGRfcHJvYmVfcmVxKHN0cnVjdCB3bDEyNzEgKndsLAorCQkJICAgICAgIGNvbnN0IHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4sCisJCQkgICAgICAgY29uc3QgdTggKmllLCBzaXplX3QgaWVfbGVuLCB1OCBiYW5kKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisJaW50IHJldDsKKworCXNrYiA9IGllZWU4MDIxMV9wcm9iZXJlcV9nZXQod2wtPmh3LCB3bC0+dmlmLCBzc2lkLCBzc2lkX2xlbiwKKwkJCQkgICAgIGllLCBpZV9sZW4pOworCWlmICghc2tiKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCXdsMTI3MV9kdW1wKERFQlVHX1NDQU4sICJQUk9CRSBSRVE6ICIsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOworCisJaWYgKGJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikKKwkJcmV0ID0gd2wxMjcxX2NtZF90ZW1wbGF0ZV9zZXQod2wsIENNRF9URU1QTF9DRkdfUFJPQkVfUkVRXzJfNCwKKwkJCQkJICAgICAgc2tiLT5kYXRhLCBza2ItPmxlbiwgMCwKKwkJCQkJICAgICAgd2wtPmNvbmYudHguYmFzaWNfcmF0ZSk7CisJZWxzZQorCQlyZXQgPSB3bDEyNzFfY21kX3RlbXBsYXRlX3NldCh3bCwgQ01EX1RFTVBMX0NGR19QUk9CRV9SRVFfNSwKKwkJCQkJICAgICAgc2tiLT5kYXRhLCBza2ItPmxlbiwgMCwKKwkJCQkJICAgICAgd2wtPmNvbmYudHguYmFzaWNfcmF0ZV81KTsKKworb3V0OgorCWRldl9rZnJlZV9za2Ioc2tiKTsKKwlyZXR1cm4gcmV0OworfQorCitzdHJ1Y3Qgc2tfYnVmZiAqd2wxMjcxX2NtZF9idWlsZF9hcF9wcm9iZV9yZXEoc3RydWN0IHdsMTI3MSAqd2wsCisJCQkJCSAgICAgIHN0cnVjdCBza19idWZmICpza2IpCit7CisJaW50IHJldDsKKworCWlmICghc2tiKQorCQlza2IgPSBpZWVlODAyMTFfYXBfcHJvYmVyZXFfZ2V0KHdsLT5odywgd2wtPnZpZik7CisJaWYgKCFza2IpCisJCWdvdG8gb3V0OworCisJd2wxMjcxX2R1bXAoREVCVUdfU0NBTiwgIkFQIFBST0JFIFJFUTogIiwgc2tiLT5kYXRhLCBza2ItPmxlbik7CisKKwlpZiAod2wtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikKKwkJcmV0ID0gd2wxMjcxX2NtZF90ZW1wbGF0ZV9zZXQod2wsIENNRF9URU1QTF9DRkdfUFJPQkVfUkVRXzJfNCwKKwkJCQkJICAgICAgc2tiLT5kYXRhLCBza2ItPmxlbiwgMCwKKwkJCQkJICAgICAgd2wtPmNvbmYudHguYmFzaWNfcmF0ZSk7CisJZWxzZQorCQlyZXQgPSB3bDEyNzFfY21kX3RlbXBsYXRlX3NldCh3bCwgQ01EX1RFTVBMX0NGR19QUk9CRV9SRVFfNSwKKwkJCQkJICAgICAgc2tiLT5kYXRhLCBza2ItPmxlbiwgMCwKKwkJCQkJICAgICAgd2wtPmNvbmYudHguYmFzaWNfcmF0ZV81KTsKKworCWlmIChyZXQgPCAwKQorCQl3bDEyNzFfZXJyb3IoIlVuYWJsZSB0byBzZXQgYXAgcHJvYmUgcmVxdWVzdCB0ZW1wbGF0ZS4iKTsKKworb3V0OgorCXJldHVybiBza2I7Cit9CisKK2ludCB3bDEyNzFfY21kX2J1aWxkX2FycF9yc3Aoc3RydWN0IHdsMTI3MSAqd2wsIF9fYmUzMiBpcF9hZGRyKQoreworCWludCByZXQ7CisJc3RydWN0IHdsMTJ4eF9hcnBfcnNwX3RlbXBsYXRlIHRtcGw7CisJc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgKmhkcjsKKwlzdHJ1Y3QgYXJwaGRyICphcnBfaGRyOworCisJbWVtc2V0KCZ0bXBsLCAwLCBzaXplb2YodG1wbCkpOworCisJLyogbWFjODAyMTEgaGVhZGVyICovCisJaGRyID0gJnRtcGwuaGRyOworCWhkci0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9EQVRBIHwKKwkJCQkJIElFRUU4MDIxMV9TVFlQRV9EQVRBIHwKKwkJCQkJIElFRUU4MDIxMV9GQ1RMX1RPRFMpOworCW1lbWNweShoZHItPmFkZHIxLCB3bC0+dmlmLT5ic3NfY29uZi5ic3NpZCwgRVRIX0FMRU4pOworCW1lbWNweShoZHItPmFkZHIyLCB3bC0+dmlmLT5hZGRyLCBFVEhfQUxFTik7CisJbWVtc2V0KGhkci0+YWRkcjMsIDB4ZmYsIEVUSF9BTEVOKTsKKworCS8qIGxsYyBsYXllciAqLworCW1lbWNweSh0bXBsLmxsY19oZHIsIHJmYzEwNDJfaGVhZGVyLCBzaXplb2YocmZjMTA0Ml9oZWFkZXIpKTsKKwl0bXBsLmxsY190eXBlID0gaHRvbnMoRVRIX1BfQVJQKTsKKworCS8qIGFycCBoZWFkZXIgKi8KKwlhcnBfaGRyID0gJnRtcGwuYXJwX2hkcjsKKwlhcnBfaGRyLT5hcl9ocmQgPSBodG9ucyhBUlBIUkRfRVRIRVIpOworCWFycF9oZHItPmFyX3BybyA9IGh0b25zKEVUSF9QX0lQKTsKKwlhcnBfaGRyLT5hcl9obG4gPSBFVEhfQUxFTjsKKwlhcnBfaGRyLT5hcl9wbG4gPSA0OworCWFycF9oZHItPmFyX29wID0gaHRvbnMoQVJQT1BfUkVQTFkpOworCisJLyogYXJwIHBheWxvYWQgKi8KKwltZW1jcHkodG1wbC5zZW5kZXJfaHcsIHdsLT52aWYtPmFkZHIsIEVUSF9BTEVOKTsKKwl0bXBsLnNlbmRlcl9pcCA9IGlwX2FkZHI7CisKKwlyZXQgPSB3bDEyNzFfY21kX3RlbXBsYXRlX3NldCh3bCwgQ01EX1RFTVBMX0FSUF9SU1AsCisJCQkJICAgICAgJnRtcGwsIHNpemVvZih0bXBsKSwgMCwKKwkJCQkgICAgICB3bC0+YmFzaWNfcmF0ZSk7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxMjcxX2J1aWxkX3Fvc19udWxsX2RhdGEoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJc3RydWN0IGllZWU4MDIxMV9xb3NfaGRyIHRlbXBsYXRlOworCisJbWVtc2V0KCZ0ZW1wbGF0ZSwgMCwgc2l6ZW9mKHRlbXBsYXRlKSk7CisKKwltZW1jcHkodGVtcGxhdGUuYWRkcjEsIHdsLT5ic3NpZCwgRVRIX0FMRU4pOworCW1lbWNweSh0ZW1wbGF0ZS5hZGRyMiwgd2wtPm1hY19hZGRyLCBFVEhfQUxFTik7CisJbWVtY3B5KHRlbXBsYXRlLmFkZHIzLCB3bC0+YnNzaWQsIEVUSF9BTEVOKTsKKworCXRlbXBsYXRlLmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfREFUQSB8CisJCQkJCSAgICAgSUVFRTgwMjExX1NUWVBFX1FPU19OVUxMRlVOQyB8CisJCQkJCSAgICAgSUVFRTgwMjExX0ZDVExfVE9EUyk7CisKKwkvKiBGSVhNRTogbm90IHN1cmUgd2hhdCBwcmlvcml0eSB0byB1c2UgaGVyZSAqLworCXRlbXBsYXRlLnFvc19jdHJsID0gY3B1X3RvX2xlMTYoMCk7CisKKwlyZXR1cm4gd2wxMjcxX2NtZF90ZW1wbGF0ZV9zZXQod2wsIENNRF9URU1QTF9RT1NfTlVMTF9EQVRBLCAmdGVtcGxhdGUsCisJCQkJICAgICAgIHNpemVvZih0ZW1wbGF0ZSksIDAsCisJCQkJICAgICAgIHdsLT5iYXNpY19yYXRlKTsKK30KKworaW50IHdsMTI3MV9jbWRfc2V0X2RlZmF1bHRfd2VwX2tleShzdHJ1Y3Qgd2wxMjcxICp3bCwgdTggaWQpCit7CisJc3RydWN0IHdsMTI3MV9jbWRfc2V0X2tleXMgKmNtZDsKKwlpbnQgcmV0ID0gMDsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19DTUQsICJjbWQgc2V0X2RlZmF1bHRfd2VwX2tleSAlZCIsIGlkKTsKKworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNtZCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwljbWQtPmlkID0gaWQ7CisJY21kLT5rZXlfYWN0aW9uID0gY3B1X3RvX2xlMTYoS0VZX1NFVF9JRCk7CisJY21kLT5rZXlfdHlwZSA9IEtFWV9XRVA7CisKKwlyZXQgPSB3bDEyNzFfY21kX3NlbmQod2wsIENNRF9TRVRfS0VZUywgY21kLCBzaXplb2YoKmNtZCksIDApOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV93YXJuaW5nKCJjbWQgc2V0X2RlZmF1bHRfd2VwX2tleSBmYWlsZWQ6ICVkIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJa2ZyZWUoY21kKTsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCB3bDEyNzFfY21kX3NldF9rZXkoc3RydWN0IHdsMTI3MSAqd2wsIHUxNiBhY3Rpb24sIHU4IGlkLCB1OCBrZXlfdHlwZSwKKwkJICAgICAgIHU4IGtleV9zaXplLCBjb25zdCB1OCAqa2V5LCBjb25zdCB1OCAqYWRkciwKKwkJICAgICAgIHUzMiB0eF9zZXFfMzIsIHUxNiB0eF9zZXFfMTYpCit7CisJc3RydWN0IHdsMTI3MV9jbWRfc2V0X2tleXMgKmNtZDsKKwlpbnQgcmV0ID0gMDsKKworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNtZCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoa2V5X3R5cGUgIT0gS0VZX1dFUCkKKwkJbWVtY3B5KGNtZC0+YWRkciwgYWRkciwgRVRIX0FMRU4pOworCisJY21kLT5rZXlfYWN0aW9uID0gY3B1X3RvX2xlMTYoYWN0aW9uKTsKKwljbWQtPmtleV9zaXplID0ga2V5X3NpemU7CisJY21kLT5rZXlfdHlwZSA9IGtleV90eXBlOworCisJY21kLT5hY19zZXFfbnVtMTZbMF0gPSBjcHVfdG9fbGUxNih0eF9zZXFfMTYpOworCWNtZC0+YWNfc2VxX251bTMyWzBdID0gY3B1X3RvX2xlMzIodHhfc2VxXzMyKTsKKworCS8qIHdlIGhhdmUgb25seSBvbmUgU1NJRCBwcm9maWxlICovCisJY21kLT5zc2lkX3Byb2ZpbGUgPSAwOworCisJY21kLT5pZCA9IGlkOworCisJaWYgKGtleV90eXBlID09IEtFWV9US0lQKSB7CisJCS8qCisJCSAqIFdlIGdldCB0aGUga2V5IGluIHRoZSBmb2xsb3dpbmcgZm9ybToKKwkJICogVEtJUCAoMTYgYnl0ZXMpIC0gVFggTUlDICg4IGJ5dGVzKSAtIFJYIE1JQyAoOCBieXRlcykKKwkJICogYnV0IHRoZSB0YXJnZXQgaXMgZXhwZWN0aW5nOgorCQkgKiBUS0lQIC0gUlggTUlDIC0gVFggTUlDCisJCSAqLworCQltZW1jcHkoY21kLT5rZXksIGtleSwgMTYpOworCQltZW1jcHkoY21kLT5rZXkgKyAxNiwga2V5ICsgMjQsIDgpOworCQltZW1jcHkoY21kLT5rZXkgKyAyNCwga2V5ICsgMTYsIDgpOworCisJfSBlbHNlIHsKKwkJbWVtY3B5KGNtZC0+a2V5LCBrZXksIGtleV9zaXplKTsKKwl9CisKKwl3bDEyNzFfZHVtcChERUJVR19DUllQVCwgIlRBUkdFVCBLRVk6ICIsIGNtZCwgc2l6ZW9mKCpjbWQpKTsKKworCXJldCA9IHdsMTI3MV9jbWRfc2VuZCh3bCwgQ01EX1NFVF9LRVlTLCBjbWQsIHNpemVvZigqY21kKSwgMCk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX3dhcm5pbmcoImNvdWxkIG5vdCBzZXQga2V5cyIpOworCWdvdG8gb3V0OworCX0KKworb3V0OgorCWtmcmVlKGNtZCk7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxMjcxX2NtZF9kaXNjb25uZWN0KHN0cnVjdCB3bDEyNzEgKndsKQoreworCXN0cnVjdCB3bDEyNzFfY21kX2Rpc2Nvbm5lY3QgKmNtZDsKKwlpbnQgcmV0ID0gMDsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19DTUQsICJjbWQgZGlzY29ubmVjdCIpOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmICghY21kKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWNtZC0+cnhfY29uZmlnX29wdGlvbnMgPSBjcHVfdG9fbGUzMih3bC0+cnhfY29uZmlnKTsKKwljbWQtPnJ4X2ZpbHRlcl9vcHRpb25zID0gY3B1X3RvX2xlMzIod2wtPnJ4X2ZpbHRlcik7CisJLyogZGlzY29ubmVjdCByZWFzb24gaXMgbm90IHVzZWQgaW4gaW1tZWRpYXRlIGRpc2Nvbm5lY3Rpb25zICovCisJY21kLT50eXBlID0gRElTQ09OTkVDVF9JTU1FRElBVEU7CisKKwlyZXQgPSB3bDEyNzFfY21kX3NlbmQod2wsIENNRF9ESVNDT05ORUNULCBjbWQsIHNpemVvZigqY21kKSwgMCk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX2Vycm9yKCJmYWlsZWQgdG8gc2VuZCBkaXNjb25uZWN0IGNvbW1hbmQiKTsKKwkJZ290byBvdXRfZnJlZTsKKwl9CisKKwlyZXQgPSB3bDEyNzFfY21kX3dhaXRfZm9yX2V2ZW50KHdsLCBESVNDT05ORUNUX0VWRU5UX0NPTVBMRVRFX0lEKTsKKwlpZiAocmV0IDwgMCkKKwkJd2wxMjcxX2Vycm9yKCJjbWQgZGlzY29ubmVjdCBldmVudCBjb21wbGV0aW9uIGVycm9yIik7CisKK291dF9mcmVlOgorCWtmcmVlKGNtZCk7CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxMjcxX2NtZF9zZXRfc3RhX3N0YXRlKHN0cnVjdCB3bDEyNzEgKndsKQoreworCXN0cnVjdCB3bDEyNzFfY21kX3NldF9zdGFfc3RhdGUgKmNtZDsKKwlpbnQgcmV0ID0gMDsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19DTUQsICJjbWQgc2V0IHN0YSBzdGF0ZSIpOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmICghY21kKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWNtZC0+c3RhdGUgPSBXTDEyNzFfQ01EX1NUQV9TVEFURV9DT05ORUNURUQ7CisKKwlyZXQgPSB3bDEyNzFfY21kX3NlbmQod2wsIENNRF9TRVRfU1RBX1NUQVRFLCBjbWQsIHNpemVvZigqY21kKSwgMCk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX2Vycm9yKCJmYWlsZWQgdG8gc2VuZCBzZXQgU1RBIHN0YXRlIGNvbW1hbmQiKTsKKwkJZ290byBvdXRfZnJlZTsKKwl9CisKK291dF9mcmVlOgorCWtmcmVlKGNtZCk7CisKK291dDoKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2NtZC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2NtZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhMWQ5ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvY21kLmgKQEAgLTAsMCArMSw0MTUgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3bDEyNzEKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwOSBUZXhhcyBJbnN0cnVtZW50cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIENvbnRhY3Q6IEx1Y2lhbm8gQ29lbGhvIDxsdWNpYW5vLmNvZWxob0Bub2tpYS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQQorICoKKyAqLworCisjaWZuZGVmIF9fQ01EX0hfXworI2RlZmluZSBfX0NNRF9IX18KKworI2luY2x1ZGUgIndsMTJ4eC5oIgorCitzdHJ1Y3QgYWN4X2hlYWRlcjsKKworaW50IHdsMTI3MV9jbWRfc2VuZChzdHJ1Y3Qgd2wxMjcxICp3bCwgdTE2IGlkLCB2b2lkICpidWYsIHNpemVfdCBsZW4sCisJCSAgICBzaXplX3QgcmVzX2xlbik7CitpbnQgd2wxMjcxX2NtZF9nZW5lcmFsX3Bhcm1zKHN0cnVjdCB3bDEyNzEgKndsKTsKK2ludCB3bDEyNzFfY21kX3JhZGlvX3Bhcm1zKHN0cnVjdCB3bDEyNzEgKndsKTsKK2ludCB3bDEyNzFfY21kX2V4dF9yYWRpb19wYXJtcyhzdHJ1Y3Qgd2wxMjcxICp3bCk7CitpbnQgd2wxMjcxX2NtZF9qb2luKHN0cnVjdCB3bDEyNzEgKndsLCB1OCBic3NfdHlwZSk7CitpbnQgd2wxMjcxX2NtZF90ZXN0KHN0cnVjdCB3bDEyNzEgKndsLCB2b2lkICpidWYsIHNpemVfdCBidWZfbGVuLCB1OCBhbnN3ZXIpOworaW50IHdsMTI3MV9jbWRfaW50ZXJyb2dhdGUoc3RydWN0IHdsMTI3MSAqd2wsIHUxNiBpZCwgdm9pZCAqYnVmLCBzaXplX3QgbGVuKTsKK2ludCB3bDEyNzFfY21kX2NvbmZpZ3VyZShzdHJ1Y3Qgd2wxMjcxICp3bCwgdTE2IGlkLCB2b2lkICpidWYsIHNpemVfdCBsZW4pOworaW50IHdsMTI3MV9jbWRfZGF0YV9wYXRoKHN0cnVjdCB3bDEyNzEgKndsLCBib29sIGVuYWJsZSk7CitpbnQgd2wxMjcxX2NtZF9wc19tb2RlKHN0cnVjdCB3bDEyNzEgKndsLCB1OCBwc19tb2RlLCB1MzIgcmF0ZXMsIGJvb2wgc2VuZCk7CitpbnQgd2wxMjcxX2NtZF9yZWFkX21lbW9yeShzdHJ1Y3Qgd2wxMjcxICp3bCwgdTMyIGFkZHIsIHZvaWQgKmFuc3dlciwKKwkJCSAgIHNpemVfdCBsZW4pOworaW50IHdsMTI3MV9jbWRfdGVtcGxhdGVfc2V0KHN0cnVjdCB3bDEyNzEgKndsLCB1MTYgdGVtcGxhdGVfaWQsCisJCQkgICAgdm9pZCAqYnVmLCBzaXplX3QgYnVmX2xlbiwgaW50IGluZGV4LCB1MzIgcmF0ZXMpOworaW50IHdsMTI3MV9jbWRfYnVpbGRfbnVsbF9kYXRhKHN0cnVjdCB3bDEyNzEgKndsKTsKK2ludCB3bDEyNzFfY21kX2J1aWxkX3BzX3BvbGwoc3RydWN0IHdsMTI3MSAqd2wsIHUxNiBhaWQpOworaW50IHdsMTI3MV9jbWRfYnVpbGRfcHJvYmVfcmVxKHN0cnVjdCB3bDEyNzEgKndsLAorCQkJICAgICAgIGNvbnN0IHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4sCisJCQkgICAgICAgY29uc3QgdTggKmllLCBzaXplX3QgaWVfbGVuLCB1OCBiYW5kKTsKK3N0cnVjdCBza19idWZmICp3bDEyNzFfY21kX2J1aWxkX2FwX3Byb2JlX3JlcShzdHJ1Y3Qgd2wxMjcxICp3bCwKKwkJCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitpbnQgd2wxMjcxX2NtZF9idWlsZF9hcnBfcnNwKHN0cnVjdCB3bDEyNzEgKndsLCBfX2JlMzIgaXBfYWRkcik7CitpbnQgd2wxMjcxX2J1aWxkX3Fvc19udWxsX2RhdGEoc3RydWN0IHdsMTI3MSAqd2wpOworaW50IHdsMTI3MV9jbWRfYnVpbGRfa2x2X251bGxfZGF0YShzdHJ1Y3Qgd2wxMjcxICp3bCk7CitpbnQgd2wxMjcxX2NtZF9zZXRfZGVmYXVsdF93ZXBfa2V5KHN0cnVjdCB3bDEyNzEgKndsLCB1OCBpZCk7CitpbnQgd2wxMjcxX2NtZF9zZXRfa2V5KHN0cnVjdCB3bDEyNzEgKndsLCB1MTYgYWN0aW9uLCB1OCBpZCwgdTgga2V5X3R5cGUsCisJCSAgICAgICB1OCBrZXlfc2l6ZSwgY29uc3QgdTggKmtleSwgY29uc3QgdTggKmFkZHIsCisJCSAgICAgICB1MzIgdHhfc2VxXzMyLCB1MTYgdHhfc2VxXzE2KTsKK2ludCB3bDEyNzFfY21kX2Rpc2Nvbm5lY3Qoc3RydWN0IHdsMTI3MSAqd2wpOworaW50IHdsMTI3MV9jbWRfc2V0X3N0YV9zdGF0ZShzdHJ1Y3Qgd2wxMjcxICp3bCk7CisKK2VudW0gd2wxMjcxX2NvbW1hbmRzIHsKKwlDTURfSU5URVJST0dBVEUgICAgID0gMSwgICAgLyp1c2UgdGhpcyB0byByZWFkIGluZm9ybWF0aW9uIGVsZW1lbnRzKi8KKwlDTURfQ09ORklHVVJFICAgICAgID0gMiwgICAgLyp1c2UgdGhpcyB0byB3cml0ZSBpbmZvcm1hdGlvbiBlbGVtZW50cyovCisJQ01EX0VOQUJMRV9SWCAgICAgICA9IDMsCisJQ01EX0VOQUJMRV9UWCAgICAgICA9IDQsCisJQ01EX0RJU0FCTEVfUlggICAgICA9IDUsCisJQ01EX0RJU0FCTEVfVFggICAgICA9IDYsCisJQ01EX1NDQU4gICAgICAgICAgICA9IDgsCisJQ01EX1NUT1BfU0NBTiAgICAgICA9IDksCisJQ01EX1NUQVJUX0pPSU4gICAgICA9IDExLAorCUNNRF9TRVRfS0VZUyAgICAgICAgPSAxMiwKKwlDTURfUkVBRF9NRU1PUlkgICAgID0gMTMsCisJQ01EX1dSSVRFX01FTU9SWSAgICA9IDE0LAorCUNNRF9TRVRfVEVNUExBVEUgICAgPSAxOSwKKwlDTURfVEVTVCAgICAgICAgICAgID0gMjMsCisJQ01EX05PSVNFX0hJU1QgICAgICA9IDI4LAorCUNNRF9MTkFfQ09OVFJPTCAgICAgPSAzMiwKKwlDTURfU0VUX0JDTl9NT0RFICAgID0gMzMsCisJQ01EX01FQVNVUkVNRU5UICAgICAgPSAzNCwKKwlDTURfU1RPUF9NRUFTVVJFTUVOVCA9IDM1LAorCUNNRF9ESVNDT05ORUNUICAgICAgID0gMzYsCisJQ01EX1NFVF9QU19NT0RFICAgICAgPSAzNywKKwlDTURfQ0hBTk5FTF9TV0lUQ0ggICA9IDM4LAorCUNNRF9TVE9QX0NIQU5ORUxfU1dJQ1RIID0gMzksCisJQ01EX0FQX0RJU0NPVkVSWSAgICAgPSA0MCwKKwlDTURfU1RPUF9BUF9ESVNDT1ZFUlkgPSA0MSwKKwlDTURfU1BTX1NDQU4gPSA0MiwKKwlDTURfU1RPUF9TUFNfU0NBTiA9IDQzLAorCUNNRF9IRUFMVEhfQ0hFQ0sgICAgID0gNDUsCisJQ01EX0RFQlVHICAgICAgICAgICAgPSA0NiwKKwlDTURfVFJJR0dFUl9TQ0FOX1RPICA9IDQ3LAorCUNNRF9DT05ORUNUSU9OX1NDQU5fQ0ZHICAgICAgPSA0OCwKKwlDTURfQ09OTkVDVElPTl9TQ0FOX1NTSURfQ0ZHID0gNDksCisJQ01EX1NUQVJUX1BFUklPRElDX1NDQU4gICAgICA9IDUwLAorCUNNRF9TVE9QX1BFUklPRElDX1NDQU4gICAgICAgPSA1MSwKKwlDTURfU0VUX1NUQV9TVEFURSAgICAgICAgICAgID0gNTIsCisKKwlOVU1fQ09NTUFORFMsCisJTUFYX0NPTU1BTkRfSUQgPSAweEZGRkYsCit9OworCisjZGVmaW5lIE1BWF9DTURfUEFSQU1TIDU3MgorCitlbnVtIHsKKwlDTURfVEVNUExfS0xWX0lEWF9OVUxMX0RBVEEgPSAwLAorCUNNRF9URU1QTF9LTFZfSURYX01BWCA9IDQKK307CisKK2VudW0gY21kX3RlbXBsIHsKKwlDTURfVEVNUExfTlVMTF9EQVRBID0gMCwKKwlDTURfVEVNUExfQkVBQ09OLAorCUNNRF9URU1QTF9DRkdfUFJPQkVfUkVRXzJfNCwKKwlDTURfVEVNUExfQ0ZHX1BST0JFX1JFUV81LAorCUNNRF9URU1QTF9QUk9CRV9SRVNQT05TRSwKKwlDTURfVEVNUExfUU9TX05VTExfREFUQSwKKwlDTURfVEVNUExfUFNfUE9MTCwKKwlDTURfVEVNUExfS0xWLAorCUNNRF9URU1QTF9ESVNDT05ORUNULAorCUNNRF9URU1QTF9QUk9CRV9SRVFfMl80LCAvKiBmb3IgZmlybXdhcmUgaW50ZXJuYWwgdXNlIG9ubHkgKi8KKwlDTURfVEVNUExfUFJPQkVfUkVRXzUsICAgLyogZm9yIGZpcm13YXJlIGludGVybmFsIHVzZSBvbmx5ICovCisJQ01EX1RFTVBMX0JBUiwgICAgICAgICAgIC8qIGZvciBmaXJtd2FyZSBpbnRlcm5hbCB1c2Ugb25seSAqLworCUNNRF9URU1QTF9DVFMsICAgICAgICAgICAvKgorCQkJCSAgKiBGb3IgQ1RTLXRvLXNlbGYgKEZhc3RDVFMpIG1lY2hhbmlzbQorCQkJCSAgKiBmb3IgQlQvV0xBTiBjb2V4aXN0ZW5jZSAoU29mdEdlbWluaSkuICovCisJQ01EX1RFTVBMX0FSUF9SU1AsCisJQ01EX1RFTVBMX01BWCA9IDB4ZmYKK307CisKKy8qIHVuaXQgbXMgKi8KKyNkZWZpbmUgV0wxMjcxX0NPTU1BTkRfVElNRU9VVCAgICAgMjAwMAorI2RlZmluZSBXTDEyNzFfQ01EX1RFTVBMX01BWF9TSVpFICAyNTIKKyNkZWZpbmUgV0wxMjcxX0VWRU5UX1RJTUVPVVQgICAgICAgNzUwCisKK3N0cnVjdCB3bDEyNzFfY21kX2hlYWRlciB7CisJX19sZTE2IGlkOworCV9fbGUxNiBzdGF0dXM7CisJLyogcGF5bG9hZCAqLworCXU4IGRhdGFbMF07Cit9IF9fcGFja2VkOworCisjZGVmaW5lIFdMMTI3MV9DTURfTUFYX1BBUkFNUyA1NzIKKworc3RydWN0IHdsMTI3MV9jb21tYW5kIHsKKwlzdHJ1Y3Qgd2wxMjcxX2NtZF9oZWFkZXIgaGVhZGVyOworCXU4ICBwYXJhbWV0ZXJzW1dMMTI3MV9DTURfTUFYX1BBUkFNU107Cit9IF9fcGFja2VkOworCitlbnVtIHsKKwlDTURfTUFJTEJPWF9JRExFCQk9ICAwLAorCUNNRF9TVEFUVVNfU1VDQ0VTUwkJPSAgMSwKKwlDTURfU1RBVFVTX1VOS05PV05fQ01ECQk9ICAyLAorCUNNRF9TVEFUVVNfVU5LTk9XTl9JRQkJPSAgMywKKwlDTURfU1RBVFVTX1JFSkVDVF9NRUFTX1NHX0FDVElWRQk9IDExLAorCUNNRF9TVEFUVVNfUlhfQlVTWQkJPSAxMywKKwlDTURfU1RBVFVTX0lOVkFMSURfUEFSQU0JCT0gMTQsCisJQ01EX1NUQVRVU19URU1QTEFURV9UT09fTEFSR0UJCT0gMTUsCisJQ01EX1NUQVRVU19PVVRfT0ZfTUVNT1JZCQk9IDE2LAorCUNNRF9TVEFUVVNfU1RBX1RBQkxFX0ZVTEwJCT0gMTcsCisJQ01EX1NUQVRVU19SQURJT19FUlJPUgkJPSAxOCwKKwlDTURfU1RBVFVTX1dST05HX05FU1RJTkcJCT0gMTksCisJQ01EX1NUQVRVU19USU1FT1VUCQk9IDIxLCAvKiBEcml2ZXIgaW50ZXJuYWwgdXNlLiovCisJQ01EX1NUQVRVU19GV19SRVNFVAkJPSAyMiwgLyogRHJpdmVyIGludGVybmFsIHVzZS4qLworCU1BWF9DT01NQU5EX1NUQVRVUwkJPSAweGZmCit9OworCisjZGVmaW5lIENNRE1CT1hfSEVBREVSX0xFTiA0CisjZGVmaW5lIENNRE1CT1hfSU5GT19FTEVNX0hFQURFUl9MRU4gNAorCitlbnVtIHsKKwlCU1NfVFlQRV9JQlNTID0gMCwKKwlCU1NfVFlQRV9TVEFfQlNTID0gMiwKKwlCU1NfVFlQRV9BUF9CU1MgPSAzLAorCU1BWF9CU1NfVFlQRSA9IDB4RkYKK307CisKKyNkZWZpbmUgV0wxMjcxX0pPSU5fQ01EX0NUUkxfVFhfRkxVU0ggICAgIDB4ODAgLyogRmlybXdhcmUgZmx1c2hlcyBhbGwgVHggKi8KKyNkZWZpbmUgV0wxMjcxX0pPSU5fQ01EX1RYX1NFU1NJT05fT0ZGU0VUIDEKKyNkZWZpbmUgV0wxMjcxX0pPSU5fQ01EX0JTU19UWVBFXzVHSFogMHgxMAorCitzdHJ1Y3Qgd2wxMjcxX2NtZF9qb2luIHsKKwlzdHJ1Y3Qgd2wxMjcxX2NtZF9oZWFkZXIgaGVhZGVyOworCisJX19sZTMyIGJzc2lkX2xzYjsKKwlfX2xlMTYgYnNzaWRfbXNiOworCV9fbGUxNiBiZWFjb25faW50ZXJ2YWw7IC8qIGluIFRCVFRzICovCisJX19sZTMyIHJ4X2NvbmZpZ19vcHRpb25zOworCV9fbGUzMiByeF9maWx0ZXJfb3B0aW9uczsKKworCS8qCisJICogVGhlIHRhcmdldCB1c2VzIHRoaXMgZmllbGQgdG8gZGV0ZXJtaW5lIHRoZSByYXRlIGF0CisJICogd2hpY2ggdG8gdHJhbnNtaXQgY29udHJvbCBmcmFtZSByZXNwb25zZXMgKHN1Y2ggYXMKKwkgKiBBQ0sgb3IgQ1RTIGZyYW1lcykuCisJICovCisJX19sZTMyIGJhc2ljX3JhdGVfc2V0OworCXU4IGR0aW1faW50ZXJ2YWw7CisJLyoKKwkgKiBiaXRzIDAtMjogVGhpcyBiaXR3aXNlIGZpZWxkIHNwZWNpZmllcyB0aGUgdHlwZQorCSAqIG9mIEJTUyB0byBzdGFydCBvciBqb2luIChCU1NfVFlQRV8qKS4KKwkgKiBiaXQgNDogQmFuZCAtIFRoZSByYWRpbyBiYW5kIGluIHdoaWNoIHRvIGpvaW4KKwkgKiBvciBzdGFydC4KKwkgKiAgMCAtIDIuNEdIeiBiYW5kCisJICogIDEgLSA1R0h6IGJhbmQKKwkgKiBiaXRzIDMsIDUtNzogUmVzZXJ2ZWQKKwkgKi8KKwl1OCBic3NfdHlwZTsKKwl1OCBjaGFubmVsOworCXU4IHNzaWRfbGVuOworCXU4IHNzaWRbSVdfRVNTSURfTUFYX1NJWkVdOworCXU4IGN0cmw7IC8qIEpPSU5fQ01EX0NUUkxfKiAqLworCXU4IHJlc2VydmVkWzNdOworfSBfX3BhY2tlZDsKKworc3RydWN0IGNtZF9lbmFibGVkaXNhYmxlX3BhdGggeworCXN0cnVjdCB3bDEyNzFfY21kX2hlYWRlciBoZWFkZXI7CisKKwl1OCBjaGFubmVsOworCXU4IHBhZGRpbmdbM107Cit9IF9fcGFja2VkOworCisjZGVmaW5lIFdMMTI3MV9SQVRFX0FVVE9NQVRJQyAgMAorCitzdHJ1Y3Qgd2wxMjcxX2NtZF90ZW1wbGF0ZV9zZXQgeworCXN0cnVjdCB3bDEyNzFfY21kX2hlYWRlciBoZWFkZXI7CisKKwlfX2xlMTYgbGVuOworCXU4IHRlbXBsYXRlX3R5cGU7CisJdTggaW5kZXg7ICAvKiByZWxldmFudCBvbmx5IGZvciBLTFZfVEVNUExBVEUgdHlwZSAqLworCV9fbGUzMiBlbmFibGVkX3JhdGVzOworCXU4IHNob3J0X3JldHJ5X2xpbWl0OworCXU4IGxvbmdfcmV0cnlfbGltaXQ7CisJdTggYWZsYWdzOworCXU4IHJlc2VydmVkOworCXU4IHRlbXBsYXRlX2RhdGFbV0wxMjcxX0NNRF9URU1QTF9NQVhfU0laRV07Cit9IF9fcGFja2VkOworCisjZGVmaW5lIFRJTV9FTEVfSUQgICAgNQorI2RlZmluZSBQQVJUSUFMX1ZCTV9NQVggICAgMjUxCisKK3N0cnVjdCB3bDEyNzFfdGltIHsKKwl1OCBpZGVudGl0eTsKKwl1OCBsZW5ndGg7CisJdTggZHRpbV9jb3VudDsKKwl1OCBkdGltX3BlcmlvZDsKKwl1OCBiaXRtYXBfY3RybDsKKwl1OCBwdmJfZmllbGRbUEFSVElBTF9WQk1fTUFYXTsgLyogUGFydGlhbCBWaXJ0dWFsIEJpdG1hcCAqLworfSBfX3BhY2tlZDsKKworZW51bSB3bDEyNzFfY21kX3BzX21vZGUgeworCVNUQVRJT05fQUNUSVZFX01PREUsCisJU1RBVElPTl9QT1dFUl9TQVZFX01PREUKK307CisKK3N0cnVjdCB3bDEyNzFfY21kX3BzX3BhcmFtcyB7CisJc3RydWN0IHdsMTI3MV9jbWRfaGVhZGVyIGhlYWRlcjsKKworCXU4IHBzX21vZGU7IC8qIFNUQVRJT05fKiAqLworCXU4IHNlbmRfbnVsbF9kYXRhOyAvKiBEbyB3ZSBoYXZlIHRvIHNlbmQgTlVMTCBkYXRhIHBhY2tldCA/ICovCisJdTggcmV0cmllczsgLyogTnVtYmVyIG9mIHJldGlyZXMgZm9yIHRoZSBpbml0aWFsIE5VTEwgZGF0YSBwYWNrZXQgKi8KKworCSAvKgorCSAgKiBUVXMgZHVyaW5nIHdoaWNoIHRoZSB0YXJnZXQgc3RheXMgYXdha2UgYWZ0ZXIgc3dpdGNoaW5nCisJICAqIHRvIHBvd2VyIHNhdmUgbW9kZS4KKwkgICovCisJdTggaGFuZ19vdmVyX3BlcmlvZDsKKwlfX2xlMzIgbnVsbF9kYXRhX3JhdGU7Cit9IF9fcGFja2VkOworCisvKiBIVyBlbmNyeXB0aW9uIGtleXMgKi8KKyNkZWZpbmUgTlVNX0FDQ0VTU19DQVRFR09SSUVTX0NPUFkgNAorI2RlZmluZSBNQVhfS0VZX1NJWkUgMzIKKworZW51bSB3bDEyNzFfY21kX2tleV9hY3Rpb24geworCUtFWV9BRERfT1JfUkVQTEFDRSA9IDEsCisJS0VZX1JFTU9WRSAgICAgICAgID0gMiwKKwlLRVlfU0VUX0lEICAgICAgICAgPSAzLAorCU1BWF9LRVlfQUNUSU9OICAgICA9IDB4ZmZmZiwKK307CisKK2VudW0gd2wxMjcxX2NtZF9rZXlfdHlwZSB7CisJS0VZX05PTkUgPSAwLAorCUtFWV9XRVAgID0gMSwKKwlLRVlfVEtJUCA9IDIsCisJS0VZX0FFUyAgPSAzLAorCUtFWV9HRU0gID0gNCwKK307CisKKy8qIEZJWE1FOiBBZGQgZGVzY3JpcHRpb24gZm9yIGtleS10eXBlcyAqLworCitzdHJ1Y3Qgd2wxMjcxX2NtZF9zZXRfa2V5cyB7CisJc3RydWN0IHdsMTI3MV9jbWRfaGVhZGVyIGhlYWRlcjsKKworCS8qIElnbm9yZWQgZm9yIGRlZmF1bHQgV0VQIGtleSAqLworCXU4IGFkZHJbRVRIX0FMRU5dOworCisJLyoga2V5X2FjdGlvbl9lICovCisJX19sZTE2IGtleV9hY3Rpb247CisKKwlfX2xlMTYgcmVzZXJ2ZWRfMTsKKworCS8qIGtleSBzaXplIGluIGJ5dGVzICovCisJdTgga2V5X3NpemU7CisKKwkvKiBrZXlfdHlwZV9lICovCisJdTgga2V5X3R5cGU7CisJdTggc3NpZF9wcm9maWxlOworCisJLyoKKwkgKiBUS0lQLCBBRVM6IGZyYW1lJ3Mga2V5IGlkIGZpZWxkLgorCSAqIEZvciBXRVAgZGVmYXVsdCBrZXk6IGtleSBpZDsKKwkgKi8KKwl1OCBpZDsKKwl1OCByZXNlcnZlZF8yWzZdOworCXU4IGtleVtNQVhfS0VZX1NJWkVdOworCV9fbGUxNiBhY19zZXFfbnVtMTZbTlVNX0FDQ0VTU19DQVRFR09SSUVTX0NPUFldOworCV9fbGUzMiBhY19zZXFfbnVtMzJbTlVNX0FDQ0VTU19DQVRFR09SSUVTX0NPUFldOworfSBfX3BhY2tlZDsKKworc3RydWN0IHdsMTI3MV9jbWRfdGVzdF9oZWFkZXIgeworCXU4IGlkOworCXU4IHBhZGRpbmdbM107Cit9IF9fcGFja2VkOworCitlbnVtIHdsMTI3MV9jaGFubmVsX3R1bmVfYmFuZHMgeworCVdMMTI3MV9DSEFOTkVMX1RVTkVfQkFORF8yXzQsCisJV0wxMjcxX0NIQU5ORUxfVFVORV9CQU5EXzUsCisJV0wxMjcxX0NIQU5ORUxfVFVORV9CQU5EXzRfOQorfTsKKworI2RlZmluZSBXTDEyNzFfUERfUkVGRVJFTkNFX1BPSU5UX0JBTkRfQl9HICAwCisKKyNkZWZpbmUgVEVTVF9DTURfSU5JX0ZJTEVfUkFESU9fUEFSQU0gICAgICAgMHgxOQorI2RlZmluZSBURVNUX0NNRF9JTklfRklMRV9HRU5FUkFMX1BBUkFNICAgICAweDFFCisjZGVmaW5lIFRFU1RfQ01EX0lOSV9GSUxFX1JGX0VYVEVOREVEX1BBUkFNIDB4MjYKKworc3RydWN0IHdsMTI3MV9nZW5lcmFsX3Bhcm1zX2NtZCB7CisJc3RydWN0IHdsMTI3MV9jbWRfaGVhZGVyIGhlYWRlcjsKKworCXN0cnVjdCB3bDEyNzFfY21kX3Rlc3RfaGVhZGVyIHRlc3Q7CisKKwlzdHJ1Y3Qgd2wxMjcxX2luaV9nZW5lcmFsX3BhcmFtcyBnZW5lcmFsX3BhcmFtczsKKworCXU4IHNyX2RlYnVnX3RhYmxlW1dMMTI3MV9JTklfTUFYX1NNQVJUX1JFRkxFWF9QQVJBTV07CisJdTggc3Jfc2VuX25fcDsKKwl1OCBzcl9zZW5fbl9wX2dhaW47CisJdTggc3Jfc2VuX25ybjsKKwl1OCBzcl9zZW5fcHJuOworCXU4IHBhZGRpbmdbM107Cit9IF9fcGFja2VkOworCitzdHJ1Y3Qgd2wxMjcxX3JhZGlvX3Bhcm1zX2NtZCB7CisJc3RydWN0IHdsMTI3MV9jbWRfaGVhZGVyIGhlYWRlcjsKKworCXN0cnVjdCB3bDEyNzFfY21kX3Rlc3RfaGVhZGVyIHRlc3Q7CisKKwkvKiBTdGF0aWMgcmFkaW8gcGFyYW1ldGVycyAqLworCXN0cnVjdCB3bDEyNzFfaW5pX2JhbmRfcGFyYW1zXzIgc3RhdGljX3BhcmFtc18yOworCXN0cnVjdCB3bDEyNzFfaW5pX2JhbmRfcGFyYW1zXzUgc3RhdGljX3BhcmFtc181OworCisJLyogRHluYW1pYyByYWRpbyBwYXJhbWV0ZXJzICovCisJc3RydWN0IHdsMTI3MV9pbmlfZmVtX3BhcmFtc18yIGR5bl9wYXJhbXNfMjsKKwl1OCBwYWRkaW5nMjsKKwlzdHJ1Y3Qgd2wxMjcxX2luaV9mZW1fcGFyYW1zXzUgZHluX3BhcmFtc181OworCXU4IHBhZGRpbmczWzJdOworfSBfX3BhY2tlZDsKKworc3RydWN0IHdsMTI3MV9leHRfcmFkaW9fcGFybXNfY21kIHsKKwlzdHJ1Y3Qgd2wxMjcxX2NtZF9oZWFkZXIgaGVhZGVyOworCisJc3RydWN0IHdsMTI3MV9jbWRfdGVzdF9oZWFkZXIgdGVzdDsKKworCXU4IHR4X3Blcl9jaGFubmVsX3Bvd2VyX2NvbXBlbnNhdGlvbl8yW0NPTkZfVFhfUFdSX0NPTVBFTlNBVElPTl9MRU5fMl07CisJdTggdHhfcGVyX2NoYW5uZWxfcG93ZXJfY29tcGVuc2F0aW9uXzVbQ09ORl9UWF9QV1JfQ09NUEVOU0FUSU9OX0xFTl81XTsKKwl1OCBwYWRkaW5nWzNdOworfSBfX3BhY2tlZDsKKworLyoKKyAqIFRoZXJlIGFyZSB0aHJlZSB0eXBlcyBvZiBkaXNjb25uZWN0aW9uczoKKyAqCisgKiBESVNDT05ORUNUX0lNTUVESUFURTogdGhlIGZ3IGRvZXNuJ3Qgc2VuZCBhbnkgZnJhbWVzCisgKiBESVNDT05ORUNUX0RFQVVUSDogICAgdGhlIGZ3IGdlbmVyYXRlcyBhIERFQVVUSCByZXF1ZXN0IHdpdGggdGhlIHJlYXNvbgorICogICAgICAgICAgICAgICAgICAgICAgIHdlIGhhdmUgcGFzc2VkCisgKiBESVNDT05ORUNUX0RJU0FTU09DOiAgdGhlIGZ3IGdlbmVyYXRlcyBhIERFU0FTU09DIHJlcXVlc3Qgd2l0aCB0aGUgcmVhc29uCisgKiAgICAgICAgICAgICAgICAgICAgICAgd2UgaGF2ZSBwYXNzZWQKKyAqLworZW51bSB3bDEyNzFfZGlzY29ubmVjdF90eXBlIHsKKwlESVNDT05ORUNUX0lNTUVESUFURSwKKwlESVNDT05ORUNUX0RFQVVUSCwKKwlESVNDT05ORUNUX0RJU0FTU09DCit9OworCitzdHJ1Y3Qgd2wxMjcxX2NtZF9kaXNjb25uZWN0IHsKKwlzdHJ1Y3Qgd2wxMjcxX2NtZF9oZWFkZXIgaGVhZGVyOworCisJX19sZTMyIHJ4X2NvbmZpZ19vcHRpb25zOworCV9fbGUzMiByeF9maWx0ZXJfb3B0aW9uczsKKworCV9fbGUxNiByZWFzb247CisJdTggIHR5cGU7CisKKwl1OCAgcGFkZGluZzsKK30gX19wYWNrZWQ7CisKKyNkZWZpbmUgV0wxMjcxX0NNRF9TVEFfU1RBVEVfQ09OTkVDVEVEICAxCisKK3N0cnVjdCB3bDEyNzFfY21kX3NldF9zdGFfc3RhdGUgeworCXN0cnVjdCB3bDEyNzFfY21kX2hlYWRlciBoZWFkZXI7CisKKwl1OCBzdGF0ZTsKKwl1OCBwYWRkaW5nWzNdOworfSBfX3BhY2tlZDsKKworI2VuZGlmIC8qIF9fV0wxMjcxX0NNRF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9jb25mLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvY29uZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExNmIzNjEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvY29uZi5oCkBAIC0wLDAgKzEsMTEwNSBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdsMTI3MQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIENvbnRhY3Q6IEx1Y2lhbm8gQ29lbGhvIDxsdWNpYW5vLmNvZWxob0Bub2tpYS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQQorICoKKyAqLworCisjaWZuZGVmIF9fQ09ORl9IX18KKyNkZWZpbmUgX19DT05GX0hfXworCitlbnVtIHsKKwlDT05GX0hXX0JJVF9SQVRFXzFNQlBTICAgPSBCSVQoMCksCisJQ09ORl9IV19CSVRfUkFURV8yTUJQUyAgID0gQklUKDEpLAorCUNPTkZfSFdfQklUX1JBVEVfNV81TUJQUyA9IEJJVCgyKSwKKwlDT05GX0hXX0JJVF9SQVRFXzZNQlBTICAgPSBCSVQoMyksCisJQ09ORl9IV19CSVRfUkFURV85TUJQUyAgID0gQklUKDQpLAorCUNPTkZfSFdfQklUX1JBVEVfMTFNQlBTICA9IEJJVCg1KSwKKwlDT05GX0hXX0JJVF9SQVRFXzEyTUJQUyAgPSBCSVQoNiksCisJQ09ORl9IV19CSVRfUkFURV8xOE1CUFMgID0gQklUKDcpLAorCUNPTkZfSFdfQklUX1JBVEVfMjJNQlBTICA9IEJJVCg4KSwKKwlDT05GX0hXX0JJVF9SQVRFXzI0TUJQUyAgPSBCSVQoOSksCisJQ09ORl9IV19CSVRfUkFURV8zNk1CUFMgID0gQklUKDEwKSwKKwlDT05GX0hXX0JJVF9SQVRFXzQ4TUJQUyAgPSBCSVQoMTEpLAorCUNPTkZfSFdfQklUX1JBVEVfNTRNQlBTICA9IEJJVCgxMiksCisJQ09ORl9IV19CSVRfUkFURV9NQ1NfMCAgID0gQklUKDEzKSwKKwlDT05GX0hXX0JJVF9SQVRFX01DU18xICAgPSBCSVQoMTQpLAorCUNPTkZfSFdfQklUX1JBVEVfTUNTXzIgICA9IEJJVCgxNSksCisJQ09ORl9IV19CSVRfUkFURV9NQ1NfMyAgID0gQklUKDE2KSwKKwlDT05GX0hXX0JJVF9SQVRFX01DU180ICAgPSBCSVQoMTcpLAorCUNPTkZfSFdfQklUX1JBVEVfTUNTXzUgICA9IEJJVCgxOCksCisJQ09ORl9IV19CSVRfUkFURV9NQ1NfNiAgID0gQklUKDE5KSwKKwlDT05GX0hXX0JJVF9SQVRFX01DU183ICAgPSBCSVQoMjApCit9OworCitlbnVtIHsKKwlDT05GX0hXX1JBVEVfSU5ERVhfMU1CUFMgICA9IDAsCisJQ09ORl9IV19SQVRFX0lOREVYXzJNQlBTICAgPSAxLAorCUNPTkZfSFdfUkFURV9JTkRFWF81XzVNQlBTID0gMiwKKwlDT05GX0hXX1JBVEVfSU5ERVhfNk1CUFMgICA9IDMsCisJQ09ORl9IV19SQVRFX0lOREVYXzlNQlBTICAgPSA0LAorCUNPTkZfSFdfUkFURV9JTkRFWF8xMU1CUFMgID0gNSwKKwlDT05GX0hXX1JBVEVfSU5ERVhfMTJNQlBTICA9IDYsCisJQ09ORl9IV19SQVRFX0lOREVYXzE4TUJQUyAgPSA3LAorCUNPTkZfSFdfUkFURV9JTkRFWF8yMk1CUFMgID0gOCwKKwlDT05GX0hXX1JBVEVfSU5ERVhfMjRNQlBTICA9IDksCisJQ09ORl9IV19SQVRFX0lOREVYXzM2TUJQUyAgPSAxMCwKKwlDT05GX0hXX1JBVEVfSU5ERVhfNDhNQlBTICA9IDExLAorCUNPTkZfSFdfUkFURV9JTkRFWF81NE1CUFMgID0gMTIsCisJQ09ORl9IV19SQVRFX0lOREVYX01BWCAgICAgPSBDT05GX0hXX1JBVEVfSU5ERVhfNTRNQlBTLAorfTsKKworZW51bSB7CisJQ09ORl9IV19SWFRYX1JBVEVfTUNTNyA9IDAsCisJQ09ORl9IV19SWFRYX1JBVEVfTUNTNiwKKwlDT05GX0hXX1JYVFhfUkFURV9NQ1M1LAorCUNPTkZfSFdfUlhUWF9SQVRFX01DUzQsCisJQ09ORl9IV19SWFRYX1JBVEVfTUNTMywKKwlDT05GX0hXX1JYVFhfUkFURV9NQ1MyLAorCUNPTkZfSFdfUlhUWF9SQVRFX01DUzEsCisJQ09ORl9IV19SWFRYX1JBVEVfTUNTMCwKKwlDT05GX0hXX1JYVFhfUkFURV81NCwKKwlDT05GX0hXX1JYVFhfUkFURV80OCwKKwlDT05GX0hXX1JYVFhfUkFURV8zNiwKKwlDT05GX0hXX1JYVFhfUkFURV8yNCwKKwlDT05GX0hXX1JYVFhfUkFURV8yMiwKKwlDT05GX0hXX1JYVFhfUkFURV8xOCwKKwlDT05GX0hXX1JYVFhfUkFURV8xMiwKKwlDT05GX0hXX1JYVFhfUkFURV8xMSwKKwlDT05GX0hXX1JYVFhfUkFURV85LAorCUNPTkZfSFdfUlhUWF9SQVRFXzYsCisJQ09ORl9IV19SWFRYX1JBVEVfNV81LAorCUNPTkZfSFdfUlhUWF9SQVRFXzIsCisJQ09ORl9IV19SWFRYX1JBVEVfMSwKKwlDT05GX0hXX1JYVFhfUkFURV9NQVgsCisJQ09ORl9IV19SWFRYX1JBVEVfVU5TVVBQT1JURUQgPSAweGZmCit9OworCitlbnVtIHsKKwlDT05GX1NHX0RJU0FCTEUgPSAwLAorCUNPTkZfU0dfUFJPVEVDVElWRSwKKwlDT05GX1NHX09QUE9SVFVOSVNUSUMKK307CisKK2VudW0geworCS8qCisJICogUEVSIHRocmVzaG9sZCBpbiBQUE0gb2YgdGhlIEJUIHZvaWNlCisJICoKKwkgKiBSYW5nZTogMCAtIDEwMDAwMDAwCisJICovCisJQ09ORl9TR19CVF9QRVJfVEhSRVNIT0xEID0gMCwKKworCS8qCisJICogTnVtYmVyIG9mIGNvbnNlcXVlbnQgUlhfQUNUSVZFIGFjdGl2aXRpZXMgdG8gb3ZlcnJpZGUgQlQgdm9pY2UKKwkgKiBmcmFtZXMgdG8gZW5zdXJlIFdMQU4gY29ubmVjdGlvbgorCSAqCisJICogUmFuZ2U6IDAgLSAxMDAKKwkgKi8KKwlDT05GX1NHX0hWM19NQVhfT1ZFUlJJREUsCisKKwkvKgorCSAqIERlZmluZXMgdGhlIFBFUiB0aHJlc2hvbGQgb2YgdGhlIEJUIHZvaWNlCisJICoKKwkgKiBSYW5nZTogMCAtIDY1MDAwCisJICovCisJQ09ORl9TR19CVF9ORlNfU0FNUExFX0lOVEVSVkFMLAorCisJLyoKKwkgKiBEZWZpbmVzIHRoZSBsb2FkIHJhdGlvIG9mIEJUCisJICoKKwkgKiBSYW5nZTogMCAtIDEwMCAoJSkKKwkgKi8KKwlDT05GX1NHX0JUX0xPQURfUkFUSU8sCisKKwkvKgorCSAqIERlZmluZXMgd2hldGhlciB0aGUgU0cgd2lsbCBmb3JjZSBXTEFOIGhvc3QgdG8gZW50ZXIvZXhpdCBQU00KKwkgKgorCSAqIFJhbmdlOiAxIC0gU0cgY2FuIGZvcmNlLCAwIC0gaG9zdCBoYW5kbGVzIFBTTQorCSAqLworCUNPTkZfU0dfQVVUT19QU19NT0RFLAorCisJLyoKKwkgKiBDb21wZW5zYXRpb24gcGVyY2VudGFnZSBvZiBwcm9iZSByZXF1ZXN0cyB3aGVuIHNjYW4gaW5pdGlhdGVkCisJICogZHVyaW5nIEJUIHZvaWNlL0FDTCBsaW5rLgorCSAqCisJICogUmFuZ2U6IDAgLSAyNTUgKCUpCisJICovCisJQ09ORl9TR19BVVRPX1NDQU5fUFJPQkVfUkVRLAorCisJLyoKKwkgKiBDb21wZW5zYXRpb24gcGVyY2VudGFnZSBvZiBwcm9iZSByZXF1ZXN0cyB3aGVuIGFjdGl2ZSBzY2FuIGluaXRpYXRlZAorCSAqIGR1cmluZyBCVCB2b2ljZQorCSAqCisJICogUmFuZ2U6IDAgLSAyNTUgKCUpCisJICovCisJQ09ORl9TR19BQ1RJVkVfU0NBTl9EVVJBVElPTl9GQUNUT1JfSFYzLAorCisJLyoKKwkgKiBEZWZpbmVzIGFudGVubmEgY29uZmlndXJhdGlvbiAoc2luZ2xlL2R1YWwgYW50ZW5uYSkKKwkgKgorCSAqIFJhbmdlOiAwIC0gc2luZ2xlIGFudGVubmEsIDEgLSBkdWFsIGFudGVubmEKKwkgKi8KKwlDT05GX1NHX0FOVEVOTkFfQ09ORklHVVJBVElPTiwKKworCS8qCisJICogVGhlIHRocmVzaG9sZCAocGVyY2VudCkgb2YgbWF4IGNvbnNlcXV0aXZlIGJlYWNvbiBtaXNzZXMgYmVmb3JlCisJICogaW5jcmVhc2luZyBwcmlvcml0eSBvZiBiZWFjb24gcmVjZXB0aW9uLgorCSAqCisJICogUmFuZ2U6IDAgLSAxMDAgKCUpCisJICovCisJQ09ORl9TR19CRUFDT05fTUlTU19QRVJDRU5ULAorCisJLyoKKwkgKiBUaGUgcmF0ZSB0aHJlc2hvbGQgYmVsb3cgd2hpY2ggcmVjZWl2aW5nIGEgZGF0YSBmcmFtZSBmcm9tIHRoZSBBUAorCSAqIHdpbGwgaW5jcmVhc2UgdGhlIHByaW9yaXR5IG9mIHRoZSBkYXRhIGZyYW1lIGFib3ZlIEJUIHRyYWZmaWMuCisJICoKKwkgKiBSYW5nZTogMCwyLCA1KD01LjUpLCA2LCA5LCAxMSwgMTIsIDE4LCAyNCwgMzYsIDQ4LCA1NAorCSAqLworCUNPTkZfU0dfUkFURV9BREFQVF9USFJFU0gsCisKKwkvKgorCSAqIE5vdCB1c2VkIGN1cnJlbnRseS4KKwkgKgorCSAqIFJhbmdlOiAwCisJICovCisJQ09ORl9TR19SQVRFX0FEQVBUX1NOUiwKKworCS8qCisJICogQ29uZmlndXJlIHRoZSBtaW4gYW5kIG1heCB0aW1lIEJUIGdhaW5zIHRoZSBhbnRlbm5hCisJICogaW4gV0xBTiBQU00gLyBCVCBtYXN0ZXIgYmFzaWMgcmF0ZQorCSAqCisJICogUmFuZ2U6IDAgLSAyNTUgKG1zKQorCSAqLworCUNPTkZfU0dfV0xBTl9QU19CVF9BQ0xfTUFTVEVSX01JTl9CUiwKKwlDT05GX1NHX1dMQU5fUFNfQlRfQUNMX01BU1RFUl9NQVhfQlIsCisKKwkvKgorCSAqIFRoZSB0aW1lIGFmdGVyIGl0IGV4cGlyZXMgbm8gbmV3IFdMQU4gdHJpZ2dlciBmcmFtZSBpcyB0cmFzbWl0dGVkCisJICogaW4gV0xBTiBQU00gLyBCVCBtYXN0ZXIgYmFzaWMgcmF0ZQorCSAqCisJICogUmFuZ2U6IDAgLSAyNTUgKG1zKQorCSAqLworCUNPTkZfU0dfV0xBTl9QU19NQVhfQlRfQUNMX01BU1RFUl9CUiwKKworCS8qCisJICogQ29uZmlndXJlIHRoZSBtaW4gYW5kIG1heCB0aW1lIEJUIGdhaW5zIHRoZSBhbnRlbm5hCisJICogaW4gV0xBTiBQU00gLyBCVCBzbGF2ZSBiYXNpYyByYXRlCisJICoKKwkgKiBSYW5nZTogMCAtIDI1NSAobXMpCisJICovCisJQ09ORl9TR19XTEFOX1BTX0JUX0FDTF9TTEFWRV9NSU5fQlIsCisJQ09ORl9TR19XTEFOX1BTX0JUX0FDTF9TTEFWRV9NQVhfQlIsCisKKwkvKgorCSAqIFRoZSB0aW1lIGFmdGVyIGl0IGV4cGlyZXMgbm8gbmV3IFdMQU4gdHJpZ2dlciBmcmFtZSBpcyB0cmFzbWl0dGVkCisJICogaW4gV0xBTiBQU00gLyBCVCBzbGF2ZSBiYXNpYyByYXRlCisJICoKKwkgKiBSYW5nZTogMCAtIDI1NSAobXMpCisJICovCisJQ09ORl9TR19XTEFOX1BTX01BWF9CVF9BQ0xfU0xBVkVfQlIsCisKKwkvKgorCSAqIENvbmZpZ3VyZSB0aGUgbWluIGFuZCBtYXggdGltZSBCVCBnYWlucyB0aGUgYW50ZW5uYQorCSAqIGluIFdMQU4gUFNNIC8gQlQgbWFzdGVyIEVEUgorCSAqCisJICogUmFuZ2U6IDAgLSAyNTUgKG1zKQorCSAqLworCUNPTkZfU0dfV0xBTl9QU19CVF9BQ0xfTUFTVEVSX01JTl9FRFIsCisJQ09ORl9TR19XTEFOX1BTX0JUX0FDTF9NQVNURVJfTUFYX0VEUiwKKworCS8qCisJICogVGhlIHRpbWUgYWZ0ZXIgaXQgZXhwaXJlcyBubyBuZXcgV0xBTiB0cmlnZ2VyIGZyYW1lIGlzIHRyYXNtaXR0ZWQKKwkgKiBpbiBXTEFOIFBTTSAvIEJUIG1hc3RlciBFRFIKKwkgKgorCSAqIFJhbmdlOiAwIC0gMjU1IChtcykKKwkgKi8KKwlDT05GX1NHX1dMQU5fUFNfTUFYX0JUX0FDTF9NQVNURVJfRURSLAorCisJLyoKKwkgKiBDb25maWd1cmUgdGhlIG1pbiBhbmQgbWF4IHRpbWUgQlQgZ2FpbnMgdGhlIGFudGVubmEKKwkgKiBpbiBXTEFOIFBTTSAvIEJUIHNsYXZlIEVEUgorCSAqCisJICogUmFuZ2U6IDAgLSAyNTUgKG1zKQorCSAqLworCUNPTkZfU0dfV0xBTl9QU19CVF9BQ0xfU0xBVkVfTUlOX0VEUiwKKwlDT05GX1NHX1dMQU5fUFNfQlRfQUNMX1NMQVZFX01BWF9FRFIsCisKKwkvKgorCSAqIFRoZSB0aW1lIGFmdGVyIGl0IGV4cGlyZXMgbm8gbmV3IFdMQU4gdHJpZ2dlciBmcmFtZSBpcyB0cmFzbWl0dGVkCisJICogaW4gV0xBTiBQU00gLyBCVCBzbGF2ZSBFRFIKKwkgKgorCSAqIFJhbmdlOiAwIC0gMjU1IChtcykKKwkgKi8KKwlDT05GX1NHX1dMQU5fUFNfTUFYX0JUX0FDTF9TTEFWRV9FRFIsCisKKwkvKgorCSAqIFJYIGd1YXJkIHRpbWUgYmVmb3JlIHRoZSBiZWdpbm5pbmcgb2YgYSBuZXcgQlQgdm9pY2UgZnJhbWUgZHVyaW5nCisJICogd2hpY2ggbm8gbmV3IFdMQU4gdHJpZ2dlciBmcmFtZSBpcyB0cmFuc21pdHRlZC4KKwkgKgorCSAqIFJhbmdlOiAwIC0gMTAwMDAwICh1cykKKwkgKi8KKwlDT05GX1NHX1JYVCwKKworCS8qCisJICogVFggZ3VhcmQgdGltZSBiZWZvcmUgdGhlIGJlZ2lubmluZyBvZiBhIG5ldyBCVCB2b2ljZSBmcmFtZSBkdXJpbmcKKwkgKiB3aGljaCBubyBuZXcgV0xBTiBmcmFtZSBpcyB0cmFuc21pdHRlZC4KKwkgKgorCSAqIFJhbmdlOiAwIC0gMTAwMDAwICh1cykKKwkgKi8KKworCUNPTkZfU0dfVFhULAorCisJLyoKKwkgKiBFbmFibGUgYWRhcHRpdmUgUlhUL1RYVCBhbGdvcml0aG0uIElmIGRpc2FibGVkLCB0aGUgaG9zdCB2YWx1ZXMKKwkgKiB3aWxsIGJlIHV0aWxpemVkLgorCSAqCisJICogUmFuZ2U6IDAgLSBkaXNhYmxlLCAxIC0gZW5hYmxlCisJICovCisJQ09ORl9TR19BREFQVElWRV9SWFRfVFhULAorCisJLyoKKwkgKiBUaGUgdXNlZCBXTEFOIGxlZ2FjeSBzZXJ2aWNlIHBlcmlvZCBkdXJpbmcgYWN0aXZlIEJUIEFDTCBsaW5rCisJICoKKwkgKiBSYW5nZTogMCAtIDI1NSAobXMpCisJICovCisJQ09ORl9TR19QU19QT0xMX1RJTUVPVVQsCisKKwkvKgorCSAqIFRoZSB1c2VkIFdMQU4gVVBTRCBzZXJ2aWNlIHBlcmlvZCBkdXJpbmcgYWN0aXZlIEJUIEFDTCBsaW5rCisJICoKKwkgKiBSYW5nZTogMCAtIDI1NSAobXMpCisJICovCisJQ09ORl9TR19VUFNEX1RJTUVPVVQsCisKKwkvKgorCSAqIENvbmZpZ3VyZSB0aGUgbWluIGFuZCBtYXggdGltZSBCVCBnYWlucyB0aGUgYW50ZW5uYQorCSAqIGluIFdMQU4gQWN0aXZlIC8gQlQgbWFzdGVyIEVEUgorCSAqCisJICogUmFuZ2U6IDAgLSAyNTUgKG1zKQorCSAqLworCUNPTkZfU0dfV0xBTl9BQ1RJVkVfQlRfQUNMX01BU1RFUl9NSU5fRURSLAorCUNPTkZfU0dfV0xBTl9BQ1RJVkVfQlRfQUNMX01BU1RFUl9NQVhfRURSLAorCisJLyoKKwkgKiBUaGUgbWF4aW11bSB0aW1lIFdMQU4gY2FuIGdhaW4gdGhlIGFudGVubmEgZm9yCisJICogaW4gV0xBTiBBY3RpdmUgLyBCVCBtYXN0ZXIgRURSCisJICoKKwkgKiBSYW5nZTogMCAtIDI1NSAobXMpCisJICovCisJQ09ORl9TR19XTEFOX0FDVElWRV9NQVhfQlRfQUNMX01BU1RFUl9FRFIsCisKKwkvKgorCSAqIENvbmZpZ3VyZSB0aGUgbWluIGFuZCBtYXggdGltZSBCVCBnYWlucyB0aGUgYW50ZW5uYQorCSAqIGluIFdMQU4gQWN0aXZlIC8gQlQgc2xhdmUgRURSCisJICoKKwkgKiBSYW5nZTogMCAtIDI1NSAobXMpCisJICovCisJQ09ORl9TR19XTEFOX0FDVElWRV9CVF9BQ0xfU0xBVkVfTUlOX0VEUiwKKwlDT05GX1NHX1dMQU5fQUNUSVZFX0JUX0FDTF9TTEFWRV9NQVhfRURSLAorCisJLyoKKwkgKiBUaGUgbWF4aW11bSB0aW1lIFdMQU4gY2FuIGdhaW4gdGhlIGFudGVubmEgZm9yCisJICogaW4gV0xBTiBBY3RpdmUgLyBCVCBzbGF2ZSBFRFIKKwkgKgorCSAqIFJhbmdlOiAwIC0gMjU1IChtcykKKwkgKi8KKwlDT05GX1NHX1dMQU5fQUNUSVZFX01BWF9CVF9BQ0xfU0xBVkVfRURSLAorCisJLyoKKwkgKiBDb25maWd1cmUgdGhlIG1pbiBhbmQgbWF4IHRpbWUgQlQgZ2FpbnMgdGhlIGFudGVubmEKKwkgKiBpbiBXTEFOIEFjdGl2ZSAvIEJUIGJhc2ljIHJhdGUKKwkgKgorCSAqIFJhbmdlOiAwIC0gMjU1IChtcykKKwkgKi8KKwlDT05GX1NHX1dMQU5fQUNUSVZFX0JUX0FDTF9NSU5fQlIsCisJQ09ORl9TR19XTEFOX0FDVElWRV9CVF9BQ0xfTUFYX0JSLAorCisJLyoKKwkgKiBUaGUgbWF4aW11bSB0aW1lIFdMQU4gY2FuIGdhaW4gdGhlIGFudGVubmEgZm9yCisJICogaW4gV0xBTiBBY3RpdmUgLyBCVCBiYXNpYyByYXRlCisJICoKKwkgKiBSYW5nZTogMCAtIDI1NSAobXMpCisJICovCisJQ09ORl9TR19XTEFOX0FDVElWRV9NQVhfQlRfQUNMX0JSLAorCisJLyoKKwkgKiBDb21wZW5zYXRpb24gcGVyY2VudGFnZSBvZiBXTEFOIHBhc3NpdmUgc2NhbiB3aW5kb3cgaWYgaW5pdGlhdGVkCisJICogZHVyaW5nIEJUIHZvaWNlCisJICoKKwkgKiBSYW5nZTogMCAtIDEwMDAgKCUpCisJICovCisJQ09ORl9TR19QQVNTSVZFX1NDQU5fRFVSQVRJT05fRkFDVE9SX0hWMywKKworCS8qCisJICogQ29tcGVuc2F0aW9uIHBlcmNlbnRhZ2Ugb2YgV0xBTiBwYXNzaXZlIHNjYW4gd2luZG93IGlmIGluaXRpYXRlZAorCSAqIGR1cmluZyBCVCBBMkRQCisJICoKKwkgKiBSYW5nZTogMCAtIDEwMDAgKCUpCisJICovCisJQ09ORl9TR19QQVNTSVZFX1NDQU5fRFVSQVRJT05fRkFDVE9SX0EyRFAsCisKKwkvKgorCSAqIEZpeGVkIHRpbWUgZW5zdXJlZCBmb3IgQlQgdHJhZmZpYyB0byBnYWluIHRoZSBhbnRlbm5hIGR1cmluZyBXTEFOCisJICogcGFzc2l2ZSBzY2FuLgorCSAqCisJICogUmFuZ2U6IDAgLSAxMDAwIG1zCisJICovCisJQ09ORl9TR19QQVNTSVZFX1NDQU5fQTJEUF9CVF9USU1FLAorCisJLyoKKwkgKiBGaXhlZCB0aW1lIGVuc3VyZWQgZm9yIFdMQU4gdHJhZmZpYyB0byBnYWluIHRoZSBhbnRlbm5hIGR1cmluZyBXTEFOCisJICogcGFzc2l2ZSBzY2FuLgorCSAqCisJICogUmFuZ2U6IDAgLSAxMDAwIG1zCisJICovCisJQ09ORl9TR19QQVNTSVZFX1NDQU5fQTJEUF9XTEFOX1RJTUUsCisKKwkvKgorCSAqIE51bWJlciBvZiBjb25zZXF1ZW50IEJUIHZvaWNlIGZyYW1lcyBub3QgaW50ZXJydXB0ZWQgYnkgV0xBTgorCSAqCisJICogUmFuZ2U6IDAgLSAxMDAKKwkgKi8KKwlDT05GX1NHX0hWM19NQVhfU0VSVkVELAorCisJLyoKKwkgKiBQcm90ZWN0aW9uIHRpbWUgb2YgdGhlIERIQ1AgcHJvY2VkdXJlLgorCSAqCisJICogUmFuZ2U6IDAgLSAxMDAwMDAgKG1zKQorCSAqLworCUNPTkZfU0dfREhDUF9USU1FLAorCisJLyoKKwkgKiBDb21wZW5zYXRpb24gcGVyY2VudGFnZSBvZiBXTEFOIGFjdGl2ZSBzY2FuIHdpbmRvdyBpZiBpbml0aWF0ZWQKKwkgKiBkdXJpbmcgQlQgQTJEUAorCSAqCisJICogUmFuZ2U6IDAgLSAxMDAwICglKQorCSAqLworCUNPTkZfU0dfQUNUSVZFX1NDQU5fRFVSQVRJT05fRkFDVE9SX0EyRFAsCisJQ09ORl9TR19URU1QX1BBUkFNXzEsCisJQ09ORl9TR19URU1QX1BBUkFNXzIsCisJQ09ORl9TR19URU1QX1BBUkFNXzMsCisJQ09ORl9TR19URU1QX1BBUkFNXzQsCisJQ09ORl9TR19URU1QX1BBUkFNXzUsCisJQ09ORl9TR19QQVJBTVNfTUFYLAorCUNPTkZfU0dfUEFSQU1TX0FMTCA9IDB4ZmYKK307CisKK3N0cnVjdCBjb25mX3NnX3NldHRpbmdzIHsKKwl1MzIgcGFyYW1zW0NPTkZfU0dfUEFSQU1TX01BWF07CisJdTggc3RhdGU7Cit9OworCitlbnVtIGNvbmZfcnhfcXVldWVfdHlwZSB7CisJQ09ORl9SWF9RVUVVRV9UWVBFX0xPV19QUklPUklUWSwgIC8qIEFsbCBleGNlcHQgdGhlIGhpZ2ggcHJpb3JpdHkgKi8KKwlDT05GX1JYX1FVRVVFX1RZUEVfSElHSF9QUklPUklUWSwgLyogTWFuYWdlbWVudCBhbmQgdm9pY2UgcGFja2V0cyAqLworfTsKKworc3RydWN0IGNvbmZfcnhfc2V0dGluZ3MgeworCS8qCisJICogVGhlIG1heGltdW0gYW1vdW50IG9mIHRpbWUsIGluIFRVLCBiZWZvcmUgdGhlCisJICogZmlybXdhcmUgZGlzY2FyZHMgdGhlIE1TRFUuCisJICoKKwkgKiBSYW5nZTogMCAtIDB4RkZGRkZGRkYKKwkgKi8KKwl1MzIgcnhfbXNkdV9saWZlX3RpbWU7CisKKwkvKgorCSAqIFBhY2tldCBkZXRlY3Rpb24gdGhyZXNob2xkIGluIHRoZSBQSFkuCisJICoKKwkgKiBGSVhNRTogZGV0YWlscyB1bmtub3duLgorCSAqLworCXUzMiBwYWNrZXRfZGV0ZWN0aW9uX3RocmVzaG9sZDsKKworCS8qCisJICogVGhlIGxvbmdlc3QgdGltZSB0aGUgU1RBIHdpbGwgd2FpdCB0byByZWNlaXZlIHRyYWZmaWMgZnJvbSB0aGUgQVAKKwkgKiBhZnRlciBhIFBTLXBvbGwgaGFzIGJlZW4gdHJhbnNtaXR0ZWQuCisJICoKKwkgKiBSYW5nZTogMCAtIDIwMDAwMAorCSAqLworCXUxNiBwc19wb2xsX3RpbWVvdXQ7CisJLyoKKwkgKiBUaGUgbG9uZ2VzdCB0aW1lIHRoZSBTVEEgd2lsbCB3YWl0IHRvIHJlY2VpdmUgdHJhZmZpYyBmcm9tIHRoZSBBUAorCSAqIGFmdGVyIGEgZnJhbWUgaGFzIGJlZW4gc2VudCBmcm9tIGFuIFVQU0QgZW5hYmxlZCBxdWV1ZS4KKwkgKgorCSAqIFJhbmdlOiAwIC0gMjAwMDAwCisJICovCisJdTE2IHVwc2RfdGltZW91dDsKKworCS8qCisJICogVGhlIG51bWJlciBvZiBvY3RldHMgaW4gYW4gTVBEVSwgYmVsb3cgd2hpY2ggYW4gUlRTL0NUUworCSAqIGhhbmRzaGFrZSBpcyBub3QgcGVyZm9ybWVkLgorCSAqCisJICogUmFuZ2U6IDAgLSA0MDk2CisJICovCisJdTE2IHJ0c190aHJlc2hvbGQ7CisKKwkvKgorCSAqIFRoZSBSWCBDbGVhciBDaGFubmVsIEFzc2Vzc21lbnQgdGhyZXNob2xkIGluIHRoZSBQSFkKKwkgKiAodGhlIGVuZXJneSB0aHJlc2hvbGQpLgorCSAqCisJICogUmFuZ2U6IEVOQUJMRV9FTkVSR1lfRCAgPT0gMHgxNDBBCisJICogICAgICAgIERJU0FCTEVfRU5FUkdZX0QgPT0gMHhGRkVGCisJICovCisJdTE2IHJ4X2NjYV90aHJlc2hvbGQ7CisKKwkvKgorCSAqIE9jY3VwaWVkIFJ4IG1lbS1ibG9ja3MgbnVtYmVyIHdoaWNoIHJlcXVpcmVzIGludGVycnVwdGluZyB0aGUgaG9zdAorCSAqICgwID0gbm8gYnVmZmVyaW5nLCAweGZmZmYgPSBkaXNhYmxlZCkuCisJICoKKwkgKiBSYW5nZTogdTE2CisJICovCisJdTE2IGlycV9ibGtfdGhyZXNob2xkOworCisJLyoKKwkgKiBSeCBwYWNrZXRzIG51bWJlciB3aGljaCByZXF1aXJlcyBpbnRlcnJ1cHRpbmcgdGhlIGhvc3QKKwkgKiAoMCA9IG5vIGJ1ZmZlcmluZykuCisJICoKKwkgKiBSYW5nZTogdTE2CisJICovCisJdTE2IGlycV9wa3RfdGhyZXNob2xkOworCisJLyoKKwkgKiBNYXggdGltZSBpbiBtc2VjIHRoZSBGVyBtYXkgZGVsYXkgUlgtQ29tcGxldGUgaW50ZXJydXB0LgorCSAqCisJICogUmFuZ2U6IDEgLSAxMDAKKwkgKi8KKwl1MTYgaXJxX3RpbWVvdXQ7CisKKwkvKgorCSAqIFRoZSBSWCBxdWV1ZSB0eXBlLgorCSAqCisJICogUmFuZ2U6IFJYX1FVRVVFX1RZUEVfUlhfTE9XX1BSSU9SSVRZLCBSWF9RVUVVRV9UWVBFX1JYX0hJR0hfUFJJT1JJVFksCisJICovCisJdTggcXVldWVfdHlwZTsKK307CisKKyNkZWZpbmUgQ09ORl9UWF9NQVhfUkFURV9DTEFTU0VTICAgICAgIDgKKworI2RlZmluZSBDT05GX1RYX1JBVEVfTUFTS19VTlNQRUNJRklFRCAgMAorI2RlZmluZSBDT05GX1RYX1JBVEVfTUFTS19CQVNJQyAgICAgICAgKENPTkZfSFdfQklUX1JBVEVfMU1CUFMgfCBcCisJCQkJCUNPTkZfSFdfQklUX1JBVEVfMk1CUFMpCisjZGVmaW5lIENPTkZfVFhfUkFURV9SRVRSWV9MSU1JVCAgICAgICAxMAorCitzdHJ1Y3QgY29uZl90eF9yYXRlX2NsYXNzIHsKKworCS8qCisJICogVGhlIHJhdGVzIGVuYWJsZWQgZm9yIHRoaXMgcmF0ZSBjbGFzcy4KKwkgKgorCSAqIFJhbmdlOiBDT05GX0hXX0JJVF9SQVRFXyogYml0IG1hc2sKKwkgKi8KKwl1MzIgZW5hYmxlZF9yYXRlczsKKworCS8qCisJICogVGhlIGRvdDExIHNob3J0IHJldHJ5IGxpbWl0IHVzZWQgZm9yIFRYIHJldHJpZXMuCisJICoKKwkgKiBSYW5nZTogdTgKKwkgKi8KKwl1OCBzaG9ydF9yZXRyeV9saW1pdDsKKworCS8qCisJICogVGhlIGRvdDExIGxvbmcgcmV0cnkgbGltaXQgdXNlZCBmb3IgVFggcmV0cmllcy4KKwkgKgorCSAqIFJhbmdlOiB1OAorCSAqLworCXU4IGxvbmdfcmV0cnlfbGltaXQ7CisKKwkvKgorCSAqIEZsYWdzIGNvbnRyb2xsaW5nIHRoZSBhdHRyaWJ1dGVzIG9mIFRYIHRyYW5zbWlzc2lvbi4KKwkgKgorCSAqIFJhbmdlOiBiaXQgMDogVHJ1bmNhdGUgLSB3aGVuIHNldCwgRlcgYXR0ZW1wdHMgdG8gc2VuZCBhIGZyYW1lIHN0b3AKKwkgKiAgICAgICAgICAgICAgIHdoZW4gdGhlIHRvdGFsIHZhbGlkIHBlci1yYXRlIGF0dGVtcHRzIGhhdmUKKwkgKiAgICAgICAgICAgICAgIGJlZW4gZXhoYXVzdGVkOyBvdGhlcndpc2UgdHJhbnNtaXNzaW9ucworCSAqICAgICAgICAgICAgICAgd2lsbCBjb250aW51ZSBhdCB0aGUgbG93ZXN0IGF2YWlsYWJsZSByYXRlCisJICogICAgICAgICAgICAgICB1bnRpbCB0aGUgYXBwcm9wcmlhdGUgb25lIG9mIHRoZQorCSAqICAgICAgICAgICAgICAgc2hvcnRfcmV0cnlfbGltaXQsIGxvbmdfcmV0cnlfbGltaXQsCisJICogICAgICAgICAgICAgICBkb3QxMV9tYXhfdHJhbnNtaXRfbXNkdV9saWZlX3RpbWUsIG9yCisJICogICAgICAgICAgICAgICBtYXhfdHhfbGlmZV90aW1lLCBpcyBleGhhdXN0ZWQuCisJICogICAgICAgICAgICAxOiBQcmVhbWJsZSBPdmVycmlkZSAtIGluZGljYXRlcyBpZiB0aGUgcHJlYW1ibGUgdHlwZQorCSAqICAgICAgICAgICAgICAgc2hvdWxkIGJlIHVzZWQgaW4gVFguCisJICogICAgICAgICAgICAyOiBQcmVhbWJsZSBUeXBlIC0gdGhlIHR5cGUgb2YgdGhlIHByZWFtYmxlIHRvIGJlIHVzZWQgYnkKKwkgKiAgICAgICAgICAgICAgIHRoZSBwb2xpY3kgKDAgLSBsb25nIHByZWFtYmxlLCAxIC0gc2hvcnQgcHJlYW1ibGUuCisJICovCisJdTggYWZsYWdzOworfTsKKworI2RlZmluZSBDT05GX1RYX01BWF9BQ19DT1VOVCA0CisKKy8qIFNsb3QgbnVtYmVyIHNldHRpbmcgdG8gc3RhcnQgdHJhbnNtaXNzaW9uIGF0IFBJRlMgaW50ZXJ2YWwgKi8KKyNkZWZpbmUgQ09ORl9UWF9BSUZTX1BJRlMgMQorLyogU2xvdCBudW1iZXIgc2V0dGluZyB0byBzdGFydCB0cmFuc21pc3Npb24gYXQgRElGUyBpbnRlcnZhbCBub3JtYWwKKyAqIERDRiBhY2Nlc3MgKi8KKyNkZWZpbmUgQ09ORl9UWF9BSUZTX0RJRlMgMgorCisKK2VudW0gY29uZl90eF9hYyB7CisJQ09ORl9UWF9BQ19CRSA9IDAsICAgICAgICAgLyogYmVzdCBlZmZvcnQgLyBsZWdhY3kgKi8KKwlDT05GX1RYX0FDX0JLID0gMSwgICAgICAgICAvKiBiYWNrZ3JvdW5kICovCisJQ09ORl9UWF9BQ19WSSA9IDIsICAgICAgICAgLyogdmlkZW8gKi8KKwlDT05GX1RYX0FDX1ZPID0gMywgICAgICAgICAvKiB2b2ljZSAqLworCUNPTkZfVFhfQUNfQ1RTMlNFTEYgPSA0LCAgIC8qIGZpY3Rpb3VzIEFDLCBmb2xsb3dzIEFDX1ZPICovCisJQ09ORl9UWF9BQ19BTllfVElEID0gMHgxZgorfTsKKworc3RydWN0IGNvbmZfdHhfYWNfY2F0ZWdvcnkgeworCS8qCisJICogVGhlIEFDIGNsYXNzIGlkZW50aWZpZXIuCisJICoKKwkgKiBSYW5nZTogZW51bSBjb25mX3R4X2FjCisJICovCisJdTggYWM7CisKKwkvKgorCSAqIFRoZSBjb250ZW50aW9uIHdpbmRvdyBtaW5pbXVtIHNpemUgKGluIHNsb3RzKSBmb3IgdGhlIGFjY2VzcworCSAqIGNsYXNzLgorCSAqCisJICogUmFuZ2U6IHU4CisJICovCisJdTggY3dfbWluOworCisJLyoKKwkgKiBUaGUgY29udGVudGlvbiB3aW5kb3cgbWF4aW11bSBzaXplIChpbiBzbG90cykgZm9yIHRoZSBhY2Nlc3MKKwkgKiBjbGFzcy4KKwkgKgorCSAqIFJhbmdlOiB1OAorCSAqLworCXUxNiBjd19tYXg7CisKKwkvKgorCSAqIFRoZSBBSUYgdmFsdWUgKGluIHNsb3RzKSBmb3IgdGhlIGFjY2VzcyBjbGFzcy4KKwkgKgorCSAqIFJhbmdlOiB1OAorCSAqLworCXU4IGFpZnNuOworCisJLyoKKwkgKiBUaGUgVFggT3AgTGltaXQgKGluIG1pY3Jvc2Vjb25kcykgZm9yIHRoZSBhY2Nlc3MgY2xhc3MuCisJICoKKwkgKiBSYW5nZTogdTE2CisJICovCisJdTE2IHR4X29wX2xpbWl0OworfTsKKworI2RlZmluZSBDT05GX1RYX01BWF9USURfQ09VTlQgOAorCitlbnVtIHsKKwlDT05GX0NIQU5ORUxfVFlQRV9EQ0YgPSAwLCAgIC8qIERDL0xFR0FDWSovCisJQ09ORl9DSEFOTkVMX1RZUEVfRURDRiA9IDEsICAvKiBFRENBKi8KKwlDT05GX0NIQU5ORUxfVFlQRV9IQ0NBID0gMiwgIC8qIEhDQ0EqLworfTsKKworZW51bSB7CisJQ09ORl9QU19TQ0hFTUVfTEVHQUNZID0gMCwKKwlDT05GX1BTX1NDSEVNRV9VUFNEX1RSSUdHRVIgPSAxLAorCUNPTkZfUFNfU0NIRU1FX0xFR0FDWV9QU1BPTEwgPSAyLAorCUNPTkZfUFNfU0NIRU1FX1NBUFNEID0gMywKK307CisKK2VudW0geworCUNPTkZfQUNLX1BPTElDWV9MRUdBQ1kgPSAwLAorCUNPTkZfQUNLX1BPTElDWV9OT19BQ0sgPSAxLAorCUNPTkZfQUNLX1BPTElDWV9CTE9DSyA9IDIsCit9OworCisKK3N0cnVjdCBjb25mX3R4X3RpZCB7CisJdTggcXVldWVfaWQ7CisJdTggY2hhbm5lbF90eXBlOworCXU4IHRzaWQ7CisJdTggcHNfc2NoZW1lOworCXU4IGFja19wb2xpY3k7CisJdTMyIGFwc2RfY29uZlsyXTsKK307CisKK3N0cnVjdCBjb25mX3R4X3NldHRpbmdzIHsKKwkvKgorCSAqIFRoZSBUWCBFRCB2YWx1ZSBmb3IgVEVMRUMgRW5hYmxlL0Rpc2FibGUuCisJICoKKwkgKiBSYW5nZTogMCwgMQorCSAqLworCXU4IHR4X2VuZXJneV9kZXRlY3Rpb247CisKKwkvKgorCSAqIENvbmZpZ3VyYXRpb24gZm9yIHJhdGUgY2xhc3NlcyBmb3IgVFggKGN1cnJlbnRseSBvbmx5IG9uZQorCSAqIHJhdGUgY2xhc3Mgc3VwcG9ydGVkLikKKwkgKi8KKwlzdHJ1Y3QgY29uZl90eF9yYXRlX2NsYXNzIHJjX2NvbmY7CisKKwkvKgorCSAqIENvbmZpZ3VyYXRpb24gZm9yIGFjY2VzcyBjYXRlZ29yaWVzIGZvciBUWCByYXRlIGNvbnRyb2wuCisJICovCisJdTggYWNfY29uZl9jb3VudDsKKwlzdHJ1Y3QgY29uZl90eF9hY19jYXRlZ29yeSBhY19jb25mW0NPTkZfVFhfTUFYX0FDX0NPVU5UXTsKKworCS8qCisJICogQ29uZmlndXJhdGlvbiBmb3IgVElEIHBhcmFtZXRlcnMuCisJICovCisJdTggdGlkX2NvbmZfY291bnQ7CisJc3RydWN0IGNvbmZfdHhfdGlkIHRpZF9jb25mW0NPTkZfVFhfTUFYX1RJRF9DT1VOVF07CisKKwkvKgorCSAqIFRoZSBUWCBmcmFnbWVudGF0aW9uIHRocmVzaG9sZC4KKwkgKgorCSAqIFJhbmdlOiB1MTYKKwkgKi8KKwl1MTYgZnJhZ190aHJlc2hvbGQ7CisKKwkvKgorCSAqIE1heCB0aW1lIGluIG1zZWMgdGhlIEZXIG1heSBkZWxheSBmcmFtZSBUWC1Db21wbGV0ZSBpbnRlcnJ1cHQuCisJICoKKwkgKiBSYW5nZTogdTE2CisJICovCisJdTE2IHR4X2NvbXBsX3RpbWVvdXQ7CisKKwkvKgorCSAqIENvbXBsZXRlZCBUWCBwYWNrZXQgY291bnQgd2hpY2ggcmVxdWlyZXMgdG8gaXNzdWUgdGhlIFRYLUNvbXBsZXRlCisJICogaW50ZXJydXB0LgorCSAqCisJICogUmFuZ2U6IHUxNgorCSAqLworCXUxNiB0eF9jb21wbF90aHJlc2hvbGQ7CisKKwkvKgorCSAqIFRoZSByYXRlIHVzZWQgZm9yIGNvbnRyb2wgbWVzc2FnZXMgYW5kIHNjYW5uaW5nIG9uIHRoZSAyLjRHSHogYmFuZAorCSAqCisJICogUmFuZ2U6IENPTkZfSFdfQklUX1JBVEVfKiBiaXQgbWFzaworCSAqLworCXUzMiBiYXNpY19yYXRlOworCisJLyoKKwkgKiBUaGUgcmF0ZSB1c2VkIGZvciBjb250cm9sIG1lc3NhZ2VzIGFuZCBzY2FubmluZyBvbiB0aGUgNUdIeiBiYW5kCisJICoKKwkgKiBSYW5nZTogQ09ORl9IV19CSVRfUkFURV8qIGJpdCBtYXNrCisJICovCisJdTMyIGJhc2ljX3JhdGVfNTsKK307CisKK2VudW0geworCUNPTkZfV0FLRV9VUF9FVkVOVF9CRUFDT04gICAgPSAweDAxLCAvKiBXYWtlIG9uIGV2ZXJ5IEJlYWNvbiovCisJQ09ORl9XQUtFX1VQX0VWRU5UX0RUSU0gICAgICA9IDB4MDIsIC8qIFdha2Ugb24gZXZlcnkgRFRJTSovCisJQ09ORl9XQUtFX1VQX0VWRU5UX05fRFRJTSAgICA9IDB4MDQsIC8qIFdha2UgZXZlcnkgTnRoIERUSU0gKi8KKwlDT05GX1dBS0VfVVBfRVZFTlRfTl9CRUFDT05TID0gMHgwOCwgLyogV2FrZSBldmVyeSBOdGggYmVhY29uICovCisJQ09ORl9XQUtFX1VQX0VWRU5UX0JJVFNfTUFTSyA9IDB4MEYKK307CisKKyNkZWZpbmUgQ09ORl9NQVhfQkNOX0ZJTFRfSUVfQ09VTlQgMzIKKworI2RlZmluZSBDT05GX0JDTl9SVUxFX1BBU1NfT05fQ0hBTkdFICAgICAgICAgQklUKDApCisjZGVmaW5lIENPTkZfQkNOX1JVTEVfUEFTU19PTl9BUFBFQVJBTkNFICAgICBCSVQoMSkKKworI2RlZmluZSBDT05GX0JDTl9JRV9PVUlfTEVOICAgIDMKKyNkZWZpbmUgQ09ORl9CQ05fSUVfVkVSX0xFTiAgICAyCisKK3N0cnVjdCBjb25mX2Jjbl9maWx0X3J1bGUgeworCS8qCisJICogSUUgbnVtYmVyIHRvIHdoaWNoIHRvIGFzc29jaWF0ZSBhIHJ1bGUuCisJICoKKwkgKiBSYW5nZTogdTgKKwkgKi8KKwl1OCBpZTsKKworCS8qCisJICogUnVsZSB0byBhc3NvY2lhdGUgd2l0aCB0aGUgc3BlY2lmaWMgaWUuCisJICoKKwkgKiBSYW5nZTogQ09ORl9CQ05fUlVMRV9QQVNTX09OXyoKKwkgKi8KKwl1OCBydWxlOworCisJLyoKKwkgKiBPVUkgZm9yIHRoZSB2ZW5kb3Igc3BlY2lmaWUgSUUgKDIyMSkKKwkgKi8KKwl1OCBvdWlbQ09ORl9CQ05fSUVfT1VJX0xFTl07CisKKwkvKgorCSAqIFR5cGUgZm9yIHRoZSB2ZW5kb3Igc3BlY2lmaWUgSUUgKDIyMSkKKwkgKi8KKwl1OCB0eXBlOworCisJLyoKKwkgKiBWZXJzaW9uIGZvciB0aGUgdmVuZG9yIHNwZWNpZmllIElFICgyMjEpCisJICovCisJdTggdmVyc2lvbltDT05GX0JDTl9JRV9WRVJfTEVOXTsKK307CisKKyNkZWZpbmUgQ09ORl9NQVhfUlNTSV9TTlJfVFJJR0dFUlMgOAorCitlbnVtIHsKKwlDT05GX1RSSUdfTUVUUklDX1JTU0lfQkVBQ09OID0gMCwKKwlDT05GX1RSSUdfTUVUUklDX1JTU0lfREFUQSwKKwlDT05GX1RSSUdfTUVUUklDX1NOUl9CRUFDT04sCisJQ09ORl9UUklHX01FVFJJQ19TTlJfREFUQQorfTsKKworZW51bSB7CisJQ09ORl9UUklHX0VWRU5UX1RZUEVfTEVWRUwgPSAwLAorCUNPTkZfVFJJR19FVkVOVF9UWVBFX0VER0UKK307CisKK2VudW0geworCUNPTkZfVFJJR19FVkVOVF9ESVJfTE9XID0gMCwKKwlDT05GX1RSSUdfRVZFTlRfRElSX0hJR0gsCisJQ09ORl9UUklHX0VWRU5UX0RJUl9CSURJUgorfTsKKworc3RydWN0IGNvbmZfc2lnX3dlaWdodHMgeworCisJLyoKKwkgKiBSU1NJIGZyb20gYmVhY29ucyBhdmVyYWdlIHdlaWdodC4KKwkgKgorCSAqIFJhbmdlOiB1OAorCSAqLworCXU4IHJzc2lfYmNuX2F2Z193ZWlnaHQ7CisKKwkvKgorCSAqIFJTU0kgZnJvbSBkYXRhIGF2ZXJhZ2Ugd2VpZ2h0LgorCSAqCisJICogUmFuZ2U6IHU4CisJICovCisJdTggcnNzaV9wa3RfYXZnX3dlaWdodDsKKworCS8qCisJICogU05SIGZyb20gYmVhY29ucyBhdmVyYWdlIHdlaWdodC4KKwkgKgorCSAqIFJhbmdlOiB1OAorCSAqLworCXU4IHNucl9iY25fYXZnX3dlaWdodDsKKworCS8qCisJICogU05SIGZyb20gZGF0YSBhdmVyYWdlIHdlaWdodC4KKwkgKgorCSAqIFJhbmdlOiB1OAorCSAqLworCXU4IHNucl9wa3RfYXZnX3dlaWdodDsKK307CisKK2VudW0gY29uZl9iY25fZmlsdF9tb2RlIHsKKwlDT05GX0JDTl9GSUxUX01PREVfRElTQUJMRUQgPSAwLAorCUNPTkZfQkNOX0ZJTFRfTU9ERV9FTkFCTEVEID0gMQorfTsKKworZW51bSBjb25mX2JldF9tb2RlIHsKKwlDT05GX0JFVF9NT0RFX0RJU0FCTEUgPSAwLAorCUNPTkZfQkVUX01PREVfRU5BQkxFID0gMSwKK307CisKK3N0cnVjdCBjb25mX2Nvbm5fc2V0dGluZ3MgeworCS8qCisJICogRmlybXdhcmUgd2FrZXVwIGNvbmRpdGlvbnMgY29uZmlndXJhdGlvbi4gVGhlIGhvc3QgbWF5IHNldCBvbmx5CisJICogb25lIGJpdC4KKwkgKgorCSAqIFJhbmdlOiBDT05GX1dBS0VfVVBfRVZFTlRfKgorCSAqLworCXU4IHdha2VfdXBfZXZlbnQ7CisKKwkvKgorCSAqIExpc3RlbiBpbnRlcnZhbCBmb3IgYmVhY29ucyBvciBEdGltcy4KKwkgKgorCSAqIFJhbmdlOiAwIGZvciBiZWFjb24gYW5kIER0aW0gd2FrZXVwCisJICogICAgICAgIDEtMTAgZm9yIHggRHRpbXMKKwkgKiAgICAgICAgMS0yNTUgZm9yIHggYmVhY29ucworCSAqLworCXU4IGxpc3Rlbl9pbnRlcnZhbDsKKworCS8qCisJICogRW5hYmxlIG9yIGRpc2FibGUgdGhlIGJlYWNvbiBmaWx0ZXJpbmcuCisJICoKKwkgKiBSYW5nZTogQ09ORl9CQ05fRklMVF9NT0RFXyoKKwkgKi8KKwllbnVtIGNvbmZfYmNuX2ZpbHRfbW9kZSBiY25fZmlsdF9tb2RlOworCisJLyoKKwkgKiBDb25maWd1cmUgQmVhY29uIGZpbHRlciBwYXNzLXRocnUgcnVsZXMuCisJICovCisJdTggYmNuX2ZpbHRfaWVfY291bnQ7CisJc3RydWN0IGNvbmZfYmNuX2ZpbHRfcnVsZSBiY25fZmlsdF9pZVtDT05GX01BWF9CQ05fRklMVF9JRV9DT1VOVF07CisKKwkvKgorCSAqIFRoZSBudW1iZXIgb2YgY29uc2VxdXRpdmUgYmVhY29ucyB0byBsb3NlLCBiZWZvcmUgdGhlIGZpcm13YXJlCisJICogYmVjb21lcyBvdXQgb2Ygc3luY2guCisJICoKKwkgKiBSYW5nZTogdTMyCisJICovCisJdTMyIHN5bmNoX2ZhaWxfdGhvbGQ7CisKKwkvKgorCSAqIEFmdGVyIG91dC1vZi1zeW5jaCwgdGhlIG51bWJlciBvZiBUVSdzIHRvIHdhaXQgd2l0aG91dCBhIGZ1cnRoZXIKKwkgKiByZWNlaXZlZCBiZWFjb24gKG9yIHByb2JlIHJlc3BvbnNlKSBiZWZvcmUgaXNzdWluZyB0aGUgQlNTX0VWRU5UX0xPU0UKKwkgKiBldmVudC4KKwkgKgorCSAqIFJhbmdlOiB1MzIKKwkgKi8KKwl1MzIgYnNzX2xvc2VfdGltZW91dDsKKworCS8qCisJICogQmVhY29uIHJlY2VpdmUgdGltZW91dC4KKwkgKgorCSAqIFJhbmdlOiB1MzIKKwkgKi8KKwl1MzIgYmVhY29uX3J4X3RpbWVvdXQ7CisKKwkvKgorCSAqIEJyb2FkY2FzdCByZWNlaXZlIHRpbWVvdXQuCisJICoKKwkgKiBSYW5nZTogdTMyCisJICovCisJdTMyIGJyb2FkY2FzdF90aW1lb3V0OworCisJLyoKKwkgKiBFbmFibGUvZGlzYWJsZSByZWNlcHRpb24gb2YgYnJvYWRjYXN0IHBhY2tldHMgaW4gcG93ZXIgc2F2ZSBtb2RlCisJICoKKwkgKiBSYW5nZTogMSAtIGVuYWJsZSwgMCAtIGRpc2FibGUKKwkgKi8KKwl1OCByeF9icm9hZGNhc3RfaW5fcHM7CisKKwkvKgorCSAqIENvbnNlcXV0aXZlIFBTIFBvbGwgZmFpbHVyZXMgYmVmb3JlIHNlbmRpbmcgZXZlbnQgdG8gZHJpdmVyCisJICoKKwkgKiBSYW5nZTogdTgKKwkgKi8KKwl1OCBwc19wb2xsX3RocmVzaG9sZDsKKworCS8qCisJICogUFMgUG9sbCBmYWlsdXJlIHJlY292ZXJ5IEFDVElWRSBwZXJpb2QgbGVuZ3RoCisJICoKKwkgKiBSYW5nZTogdTMyIChtcykKKwkgKi8KKwl1MzIgcHNfcG9sbF9yZWNvdmVyeV9wZXJpb2Q7CisKKwkvKgorCSAqIENvbmZpZ3VyYXRpb24gb2Ygc2lnbmFsIGF2ZXJhZ2Ugd2VpZ2h0cy4KKwkgKi8KKwlzdHJ1Y3QgY29uZl9zaWdfd2VpZ2h0cyBzaWdfd2VpZ2h0czsKKworCS8qCisJICogU3BlY2lmaWVzIGlmIGJlYWNvbiBlYXJseSB0ZXJtaW5hdGlvbiBwcm9jZWR1cmUgaXMgZW5hYmxlZCBvcgorCSAqIGRpc2FibGVkLgorCSAqCisJICogUmFuZ2U6IENPTkZfQkVUX01PREVfKgorCSAqLworCXU4IGJldF9lbmFibGU7CisKKwkvKgorCSAqIFNwZWNpZmllcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgY29uc2VjdXRpdmUgYmVhY29ucyB0aGF0IG1heSBiZQorCSAqIGVhcmx5IHRlcm1pbmF0ZWQuIEFmdGVyIHRoaXMgbnVtYmVyIGlzIHJlYWNoZWQgYXQgbGVhc3Qgb25lIGZ1bGwKKwkgKiBiZWFjb24gbXVzdCBiZSBjb3JyZWN0bHkgcmVjZWl2ZWQgaW4gRlcgYmVmb3JlIGJlYWNvbiBFVAorCSAqIHJlc3VtZXMuCisJICoKKwkgKiBSYW5nZSAwIC0gMjU1CisJICovCisJdTggYmV0X21heF9jb25zZWN1dGl2ZTsKKworCS8qCisJICogU3BlY2lmaWVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiB0aW1lcyB0byB0cnkgUFNNIGVudHJ5IGlmIGl0IGZhaWxzCisJICogKGlmIHNlbmRpbmcgdGhlIGFwcHJvcHJpYXRlIG51bGwtZnVuYyBtZXNzYWdlIGZhaWxzLikKKwkgKgorCSAqIFJhbmdlIDAgLSAyNTUKKwkgKi8KKwl1OCBwc21fZW50cnlfcmV0cmllczsKKworCS8qCisJICogU3BlY2lmaWVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiB0aW1lcyB0byB0cnkgdHJhbnNtaXQgdGhlIFBTTSBlbnRyeQorCSAqIG51bGwtZnVuYyBmcmFtZSBmb3IgZWFjaCBQU00gZW50cnkgYXR0ZW1wdAorCSAqCisJICogUmFuZ2UgMCAtIDI1NQorCSAqLworCXU4IHBzbV9lbnRyeV9udWxsZnVuY19yZXRyaWVzOworCisJLyoKKwkgKiBTcGVjaWZpZXMgdGhlIHRpbWUgdG8gbGluZ2VyIGluIGFjdGl2ZSBtb2RlIGFmdGVyIHN1Y2Nlc3NmdWxseQorCSAqIHRyYW5zbWl0dGluZyB0aGUgUFNNIGVudHJ5IG51bGwtZnVuYyBmcmFtZS4KKwkgKgorCSAqIFJhbmdlIDAgLSAyNTUgVFUncworCSAqLworCXU4IHBzbV9lbnRyeV9oYW5nb3Zlcl9wZXJpb2Q7CisKKwkvKgorCSAqCisJICogU3BlY2lmaWVzIHRoZSBpbnRlcnZhbCBvZiB0aGUgY29ubmVjdGlvbiBrZWVwLWFsaXZlIG51bGwtZnVuYworCSAqIGZyYW1lIGluIG1zLgorCSAqCisJICogUmFuZ2U6IDEwMDAgLSAzNjAwMDAwCisJICovCisJdTMyIGtlZXBfYWxpdmVfaW50ZXJ2YWw7CisKKwkvKgorCSAqIE1heGltdW0gbGlzdGVuIGludGVydmFsIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyIGluIHVuaXRzIG9mIGJlYWNvbnMuCisJICoKKwkgKiBSYW5nZTogdTE2CisJICovCisJdTggbWF4X2xpc3Rlbl9pbnRlcnZhbDsKK307CisKK2VudW0geworCUNPTkZfUkVGX0NMS18xOV8yX0UsCisJQ09ORl9SRUZfQ0xLXzI2X0UsCisJQ09ORl9SRUZfQ0xLXzM4XzRfRSwKKwlDT05GX1JFRl9DTEtfNTJfRQorfTsKKworZW51bSBzaW5nbGVfZHVhbF9iYW5kX2VudW0geworCUNPTkZfU0lOR0xFX0JBTkQsCisJQ09ORl9EVUFMX0JBTkQKK307CisKKyNkZWZpbmUgQ09ORl9SU1NJX0FORF9QUk9DRVNTX0NPTVBFTlNBVElPTl9TSVpFIDE1CisjZGVmaW5lIENPTkZfTlVNQkVSX09GX1NVQl9CQU5EU181ICA3CisjZGVmaW5lIENPTkZfTlVNQkVSX09GX1JBVEVfR1JPVVBTICA2CisjZGVmaW5lIENPTkZfTlVNQkVSX09GX0NIQU5ORUxTXzJfNCAxNAorI2RlZmluZSBDT05GX05VTUJFUl9PRl9DSEFOTkVMU181ICAgMzUKKworc3RydWN0IGNvbmZfcmFkaW9fcGFybXMgeworCS8qCisJICogRkVNIHBhcmFtZXRlciBzZXQgdG8gdXNlCisJICoKKwkgKiBSYW5nZTogMCBvciAxCisJICovCisJdTggZmVtOworfTsKKworc3RydWN0IGNvbmZfaXRyaW1fc2V0dGluZ3MgeworCS8qIGVuYWJsZSBkY28gaXRyaW0gKi8KKwl1OCBlbmFibGU7CisKKwkvKiBtb2RlcmF0aW9uIHRpbWVvdXQgaW4gbWljcm9zZWNzIGZyb20gdGhlIGxhc3QgVFggKi8KKwl1MzIgdGltZW91dDsKK307CisKK3N0cnVjdCBjb25mX3BtX2NvbmZpZ19zZXR0aW5ncyB7CisJLyoKKwkgKiBIb3N0IGNsb2NrIHNldHRsaW5nIHRpbWUKKwkgKgorCSAqIFJhbmdlOiAwIC0gMzAwMDAgdXMKKwkgKi8KKwl1MzIgaG9zdF9jbGtfc2V0dGxpbmdfdGltZTsKKworCS8qCisJICogSG9zdCBmYXN0IHdha2V1cCBzdXBwb3J0CisJICoKKwkgKiBSYW5nZTogdHJ1ZSwgZmFsc2UKKwkgKi8KKwlib29sIGhvc3RfZmFzdF93YWtldXBfc3VwcG9ydDsKK307CisKK3N0cnVjdCBjb25mX3JvYW1fdHJpZ2dlcl9zZXR0aW5ncyB7CisJLyoKKwkgKiBUaGUgbWluaW11bSBpbnRlcnZhbCBiZXR3ZWVuIHR3byB0cmlnZ2VyIGV2ZW50cy4KKwkgKgorCSAqIFJhbmdlOiAwIC0gNjAwMDAgbXMKKwkgKi8KKwl1MTYgdHJpZ2dlcl9wYWNpbmc7CisKKwkvKgorCSAqIFRoZSB3ZWlnaHQgZm9yIHJzc2kvYmVhY29uIGF2ZXJhZ2UgY2FsY3VsYXRpb24KKwkgKgorCSAqIFJhbmdlOiAwIC0gMjU1CisJICovCisJdTggYXZnX3dlaWdodF9yc3NpX2JlYWNvbjsKKworCS8qCisJICogVGhlIHdlaWdodCBmb3IgcnNzaS9kYXRhIGZyYW1lIGF2ZXJhZ2UgY2FsY3VsYXRpb24KKwkgKgorCSAqIFJhbmdlOiAwIC0gMjU1CisJICovCisJdTggYXZnX3dlaWdodF9yc3NpX2RhdGE7CisKKwkvKgorCSAqIFRoZSB3ZWlnaHQgZm9yIHNuci9iZWFjb24gYXZlcmFnZSBjYWxjdWxhdGlvbgorCSAqCisJICogUmFuZ2U6IDAgLSAyNTUKKwkgKi8KKwl1OCBhdmdfd2VpZ2h0X3Nucl9iZWFjb247CisKKwkvKgorCSAqIFRoZSB3ZWlnaHQgZm9yIHNuci9kYXRhIGZyYW1lIGF2ZXJhZ2UgY2FsY3VsYXRpb24KKwkgKgorCSAqIFJhbmdlOiAwIC0gMjU1CisJICovCisJdTggYXZnX3dlaWdodF9zbnJfZGF0YTsKK307CisKK3N0cnVjdCBjb25mX3NjYW5fc2V0dGluZ3MgeworCS8qCisJICogVGhlIG1pbmltdW0gdGltZSB0byB3YWl0IG9uIGVhY2ggY2hhbm5lbCBmb3IgYWN0aXZlIHNjYW5zCisJICoKKwkgKiBSYW5nZTogMCAtIDY1NTM2IHR1CisJICovCisJdTE2IG1pbl9kd2VsbF90aW1lX2FjdGl2ZTsKKworCS8qCisJICogVGhlIG1heGltdW0gdGltZSB0byB3YWl0IG9uIGVhY2ggY2hhbm5lbCBmb3IgYWN0aXZlIHNjYW5zCisJICoKKwkgKiBSYW5nZTogMCAtIDY1NTM2IHR1CisJICovCisJdTE2IG1heF9kd2VsbF90aW1lX2FjdGl2ZTsKKworCS8qCisJICogVGhlIG1heGltdW0gdGltZSB0byB3YWl0IG9uIGVhY2ggY2hhbm5lbCBmb3IgcGFzc2l2ZSBzY2FucworCSAqCisJICogUmFuZ2U6IDAgLSA2NTUzNiB0dQorCSAqLworCXUxNiBtaW5fZHdlbGxfdGltZV9wYXNzaXZlOworCisJLyoKKwkgKiBUaGUgbWF4aW11bSB0aW1lIHRvIHdhaXQgb24gZWFjaCBjaGFubmVsIGZvciBwYXNzaXZlIHNjYW5zCisJICoKKwkgKiBSYW5nZTogMCAtIDY1NTM2IHR1CisJICovCisJdTE2IG1heF9kd2VsbF90aW1lX3Bhc3NpdmU7CisKKwkvKgorCSAqIE51bWJlciBvZiBwcm9iZSByZXF1ZXN0cyB0byB0cmFuc21pdCBvbiBlYWNoIGFjdGl2ZSBzY2FuIGNoYW5uZWwKKwkgKgorCSAqIFJhbmdlOiB1OAorCSAqLworCXUxNiBudW1fcHJvYmVfcmVxczsKKworfTsKKworLyogdGhlc2UgYXJlIG51bWJlciBvZiBjaGFubmVscyBvbiB0aGUgYmFuZCBkaXZpZGVkIGJ5IHR3bywgcm91bmRlZCB1cCAqLworI2RlZmluZSBDT05GX1RYX1BXUl9DT01QRU5TQVRJT05fTEVOXzIgNworI2RlZmluZSBDT05GX1RYX1BXUl9DT01QRU5TQVRJT05fTEVOXzUgMTgKKworc3RydWN0IGNvbmZfcmZfc2V0dGluZ3MgeworCS8qCisJICogUGVyIGNoYW5uZWwgcG93ZXIgY29tcGVuc2F0aW9uIGZvciAyLjRHSHoKKwkgKgorCSAqIFJhbmdlOiBzOAorCSAqLworCXU4IHR4X3Blcl9jaGFubmVsX3Bvd2VyX2NvbXBlbnNhdGlvbl8yW0NPTkZfVFhfUFdSX0NPTVBFTlNBVElPTl9MRU5fMl07CisKKwkvKgorCSAqIFBlciBjaGFubmVsIHBvd2VyIGNvbXBlbnNhdGlvbiBmb3IgNUdIegorCSAqCisJICogUmFuZ2U6IHM4CisJICovCisJdTggdHhfcGVyX2NoYW5uZWxfcG93ZXJfY29tcGVuc2F0aW9uXzVbQ09ORl9UWF9QV1JfQ09NUEVOU0FUSU9OX0xFTl81XTsKK307CisKK3N0cnVjdCBjb25mX2Rydl9zZXR0aW5ncyB7CisJc3RydWN0IGNvbmZfc2dfc2V0dGluZ3Mgc2c7CisJc3RydWN0IGNvbmZfcnhfc2V0dGluZ3Mgcng7CisJc3RydWN0IGNvbmZfdHhfc2V0dGluZ3MgdHg7CisJc3RydWN0IGNvbmZfY29ubl9zZXR0aW5ncyBjb25uOworCXN0cnVjdCBjb25mX2l0cmltX3NldHRpbmdzIGl0cmltOworCXN0cnVjdCBjb25mX3BtX2NvbmZpZ19zZXR0aW5ncyBwbV9jb25maWc7CisJc3RydWN0IGNvbmZfcm9hbV90cmlnZ2VyX3NldHRpbmdzIHJvYW1fdHJpZ2dlcjsKKwlzdHJ1Y3QgY29uZl9zY2FuX3NldHRpbmdzIHNjYW47CisJc3RydWN0IGNvbmZfcmZfc2V0dGluZ3MgcmY7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvZGVidWdmcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjNjA3NzcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvZGVidWdmcy5jCkBAIC0wLDAgKzEsNDgwIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMjcxCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogQ29udGFjdDogTHVjaWFubyBDb2VsaG8gPGx1Y2lhbm8uY29lbGhvQG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBCisgKgorICovCisKKyNpbmNsdWRlICJkZWJ1Z2ZzLmgiCisKKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKyNpbmNsdWRlICJ3bDEyeHguaCIKKyNpbmNsdWRlICJhY3guaCIKKyNpbmNsdWRlICJwcy5oIgorI2luY2x1ZGUgImlvLmgiCisKKy8qIG1zICovCisjZGVmaW5lIFdMMTI3MV9ERUJVR0ZTX1NUQVRTX0xJRkVUSU1FIDEwMDAKKworLyogZGVidWdmcyBtYWNyb3MgaWRlYSBmcm9tIG1hYzgwMjExICovCisjZGVmaW5lIERFQlVHRlNfRk9STUFUX0JVRkZFUl9TSVpFIDEwMAorc3RhdGljIGludCB3bDEyNzFfZm9ybWF0X2J1ZmZlcihjaGFyIF9fdXNlciAqdXNlcmJ1Ziwgc2l6ZV90IGNvdW50LAorCQkJCSAgICBsb2ZmX3QgKnBwb3MsIGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXJnczsKKwljaGFyIGJ1ZltERUJVR0ZTX0ZPUk1BVF9CVUZGRVJfU0laRV07CisJaW50IHJlczsKKworCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisJcmVzID0gdnNjbnByaW50ZihidWYsIHNpemVvZihidWYpLCBmbXQsIGFyZ3MpOworCXZhX2VuZChhcmdzKTsKKworCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyYnVmLCBjb3VudCwgcHBvcywgYnVmLCByZXMpOworfQorCisjZGVmaW5lIERFQlVHRlNfUkVBRE9OTFlfRklMRShuYW1lLCBmbXQsIHZhbHVlLi4uKQkJCVwKK3N0YXRpYyBzc2l6ZV90IG5hbWUjIyBfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJidWYsCVwKKwkJCSAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykJCQlcCit7CQkJCQkJCQkJXAorCXN0cnVjdCB3bDEyNzEgKndsID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwkJCQlcCisJcmV0dXJuIHdsMTI3MV9mb3JtYXRfYnVmZmVyKHVzZXJidWYsIGNvdW50LCBwcG9zLAkJXAorCQkJCSAgICBmbXQgIlxuIiwgIyN2YWx1ZSk7CQkJXAorfQkJCQkJCQkJCVwKKwkJCQkJCQkJCVwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG5hbWUjIyBfb3BzID0gewkJCVwKKwkucmVhZCA9IG5hbWUjIyBfcmVhZCwJCQkJCQlcCisJLm9wZW4gPSB3bDEyNzFfb3Blbl9maWxlX2dlbmVyaWMsCQkJCVwKKwkubGxzZWVrCT0gZ2VuZXJpY19maWxlX2xsc2VlaywJCQkJCVwKK307CisKKyNkZWZpbmUgREVCVUdGU19BREQobmFtZSwgcGFyZW50KQkJCQkJXAorCWVudHJ5ID0gZGVidWdmc19jcmVhdGVfZmlsZSgjbmFtZSwgMDQwMCwgcGFyZW50LAkJXAorCQkJCSAgICB3bCwgJm5hbWUjIyBfb3BzKTsJCQlcCisJaWYgKCFlbnRyeSB8fCBJU19FUlIoZW50cnkpKQkJCQkJXAorCQlnb3RvIGVycjsJCQkJCQlcCisKKyNkZWZpbmUgREVCVUdGU19GV1NUQVRTX0ZJTEUoc3ViLCBuYW1lLCBmbXQpCQkJCVwKK3N0YXRpYyBzc2l6ZV90IHN1YiMjIF8gIyNuYW1lIyMgX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsCQlcCisJCQkJICAgICAgY2hhciBfX3VzZXIgKnVzZXJidWYsCQlcCisJCQkJICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCVwKK3sJCQkJCQkJCQlcCisJc3RydWN0IHdsMTI3MSAqd2wgPSBmaWxlLT5wcml2YXRlX2RhdGE7CQkJCVwKKwkJCQkJCQkJCVwKKwl3bDEyNzFfZGVidWdmc191cGRhdGVfc3RhdHMod2wpOwkJCQlcCisJCQkJCQkJCQlcCisJcmV0dXJuIHdsMTI3MV9mb3JtYXRfYnVmZmVyKHVzZXJidWYsIGNvdW50LCBwcG9zLCBmbXQgIlxuIiwJXAorCQkJCSAgICB3bC0+c3RhdHMuZndfc3RhdHMtPnN1Yi5uYW1lKTsJXAorfQkJCQkJCQkJCVwKKwkJCQkJCQkJCVwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHN1YiMjIF8gIyNuYW1lIyMgX29wcyA9IHsJCVwKKwkucmVhZCA9IHN1YiMjIF8gIyNuYW1lIyMgX3JlYWQsCQkJCQlcCisJLm9wZW4gPSB3bDEyNzFfb3Blbl9maWxlX2dlbmVyaWMsCQkJCVwKKwkubGxzZWVrCT0gZ2VuZXJpY19maWxlX2xsc2VlaywJCQkJCVwKK307CisKKyNkZWZpbmUgREVCVUdGU19GV1NUQVRTX0FERChzdWIsIG5hbWUpCQkJCVwKKwlERUJVR0ZTX0FERChzdWIjIyBfICMjbmFtZSwgc3RhdHMpCisKK3N0YXRpYyB2b2lkIHdsMTI3MV9kZWJ1Z2ZzX3VwZGF0ZV9zdGF0cyhzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKKworCXJldCA9IHdsMTI3MV9wc19lbHBfd2FrZXVwKHdsLCBmYWxzZSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJaWYgKHdsLT5zdGF0ZSA9PSBXTDEyNzFfU1RBVEVfT04gJiYKKwkgICAgdGltZV9hZnRlcihqaWZmaWVzLCB3bC0+c3RhdHMuZndfc3RhdHNfdXBkYXRlICsKKwkJICAgICAgIG1zZWNzX3RvX2ppZmZpZXMoV0wxMjcxX0RFQlVHRlNfU1RBVFNfTElGRVRJTUUpKSkgeworCQl3bDEyNzFfYWN4X3N0YXRpc3RpY3Mod2wsIHdsLT5zdGF0cy5md19zdGF0cyk7CisJCXdsLT5zdGF0cy5md19zdGF0c191cGRhdGUgPSBqaWZmaWVzOworCX0KKworCXdsMTI3MV9wc19lbHBfc2xlZXAod2wpOworCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOworfQorCitzdGF0aWMgaW50IHdsMTI3MV9vcGVuX2ZpbGVfZ2VuZXJpYyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBpbm9kZS0+aV9wcml2YXRlOworCXJldHVybiAwOworfQorCitERUJVR0ZTX0ZXU1RBVFNfRklMRSh0eCwgaW50ZXJuYWxfZGVzY19vdmVyZmxvdywgIiV1Iik7CisKK0RFQlVHRlNfRldTVEFUU19GSUxFKHJ4LCBvdXRfb2ZfbWVtLCAiJXUiKTsKK0RFQlVHRlNfRldTVEFUU19GSUxFKHJ4LCBoZHJfb3ZlcmZsb3csICIldSIpOworREVCVUdGU19GV1NUQVRTX0ZJTEUocngsIGh3X3N0dWNrLCAiJXUiKTsKK0RFQlVHRlNfRldTVEFUU19GSUxFKHJ4LCBkcm9wcGVkLCAiJXUiKTsKK0RFQlVHRlNfRldTVEFUU19GSUxFKHJ4LCBmY3NfZXJyLCAiJXUiKTsKK0RFQlVHRlNfRldTVEFUU19GSUxFKHJ4LCB4ZnJfaGludF90cmlnLCAiJXUiKTsKK0RFQlVHRlNfRldTVEFUU19GSUxFKHJ4LCBwYXRoX3Jlc2V0LCAiJXUiKTsKK0RFQlVHRlNfRldTVEFUU19GSUxFKHJ4LCByZXNldF9jb3VudGVyLCAiJXUiKTsKKworREVCVUdGU19GV1NUQVRTX0ZJTEUoZG1hLCByeF9yZXF1ZXN0ZWQsICIldSIpOworREVCVUdGU19GV1NUQVRTX0ZJTEUoZG1hLCByeF9lcnJvcnMsICIldSIpOworREVCVUdGU19GV1NUQVRTX0ZJTEUoZG1hLCB0eF9yZXF1ZXN0ZWQsICIldSIpOworREVCVUdGU19GV1NUQVRTX0ZJTEUoZG1hLCB0eF9lcnJvcnMsICIldSIpOworCitERUJVR0ZTX0ZXU1RBVFNfRklMRShpc3IsIGNtZF9jbXBsdCwgIiV1Iik7CitERUJVR0ZTX0ZXU1RBVFNfRklMRShpc3IsIGZpcXMsICIldSIpOworREVCVUdGU19GV1NUQVRTX0ZJTEUoaXNyLCByeF9oZWFkZXJzLCAiJXUiKTsKK0RFQlVHRlNfRldTVEFUU19GSUxFKGlzciwgcnhfbWVtX292ZXJmbG93LCAiJXUiKTsKK0RFQlVHRlNfRldTVEFUU19GSUxFKGlzciwgcnhfcmR5cywgIiV1Iik7CitERUJVR0ZTX0ZXU1RBVFNfRklMRShpc3IsIGlycXMsICIldSIpOworREVCVUdGU19GV1NUQVRTX0ZJTEUoaXNyLCB0eF9wcm9jcywgIiV1Iik7CitERUJVR0ZTX0ZXU1RBVFNfRklMRShpc3IsIGRlY3J5cHRfZG9uZSwgIiV1Iik7CitERUJVR0ZTX0ZXU1RBVFNfRklMRShpc3IsIGRtYTBfZG9uZSwgIiV1Iik7CitERUJVR0ZTX0ZXU1RBVFNfRklMRShpc3IsIGRtYTFfZG9uZSwgIiV1Iik7CitERUJVR0ZTX0ZXU1RBVFNfRklMRShpc3IsIHR4X2V4Y2hfY29tcGxldGUsICIldSIpOworREVCVUdGU19GV1NUQVRTX0ZJTEUoaXNyLCBjb21tYW5kcywgIiV1Iik7CitERUJVR0ZTX0ZXU1RBVFNfRklMRShpc3IsIHJ4X3Byb2NzLCAiJXUiKTsKK0RFQlVHRlNfRldTVEFUU19GSUxFKGlzciwgaHdfcG1fbW9kZV9jaGFuZ2VzLCAiJXUiKTsKK0RFQlVHRlNfRldTVEFUU19GSUxFKGlzciwgaG9zdF9hY2tub3dsZWRnZXMsICIldSIpOworREVCVUdGU19GV1NUQVRTX0ZJTEUoaXNyLCBwY2lfcG0sICIldSIpOworREVCVUdGU19GV1NUQVRTX0ZJTEUoaXNyLCB3YWtldXBzLCAiJXUiKTsKK0RFQlVHRlNfRldTVEFUU19GSUxFKGlzciwgbG93X3Jzc2ksICIldSIpOworCitERUJVR0ZTX0ZXU1RBVFNfRklMRSh3ZXAsIGFkZHJfa2V5X2NvdW50LCAiJXUiKTsKK0RFQlVHRlNfRldTVEFUU19GSUxFKHdlcCwgZGVmYXVsdF9rZXlfY291bnQsICIldSIpOworLyogc2tpcHBpbmcgd2VwLnJlc2VydmVkICovCitERUJVR0ZTX0ZXU1RBVFNfRklMRSh3ZXAsIGtleV9ub3RfZm91bmQsICIldSIpOworREVCVUdGU19GV1NUQVRTX0ZJTEUod2VwLCBkZWNyeXB0X2ZhaWwsICIldSIpOworREVCVUdGU19GV1NUQVRTX0ZJTEUod2VwLCBwYWNrZXRzLCAiJXUiKTsKK0RFQlVHRlNfRldTVEFUU19GSUxFKHdlcCwgaW50ZXJydXB0LCAiJXUiKTsKKworREVCVUdGU19GV1NUQVRTX0ZJTEUocHdyLCBwc19lbnRlciwgIiV1Iik7CitERUJVR0ZTX0ZXU1RBVFNfRklMRShwd3IsIGVscF9lbnRlciwgIiV1Iik7CitERUJVR0ZTX0ZXU1RBVFNfRklMRShwd3IsIG1pc3NpbmdfYmNucywgIiV1Iik7CitERUJVR0ZTX0ZXU1RBVFNfRklMRShwd3IsIHdha2Vfb25faG9zdCwgIiV1Iik7CitERUJVR0ZTX0ZXU1RBVFNfRklMRShwd3IsIHdha2Vfb25fdGltZXJfZXhwLCAiJXUiKTsKK0RFQlVHRlNfRldTVEFUU19GSUxFKHB3ciwgdHhfd2l0aF9wcywgIiV1Iik7CitERUJVR0ZTX0ZXU1RBVFNfRklMRShwd3IsIHR4X3dpdGhvdXRfcHMsICIldSIpOworREVCVUdGU19GV1NUQVRTX0ZJTEUocHdyLCByY3ZkX2JlYWNvbnMsICIldSIpOworREVCVUdGU19GV1NUQVRTX0ZJTEUocHdyLCBwb3dlcl9zYXZlX29mZiwgIiV1Iik7CitERUJVR0ZTX0ZXU1RBVFNfRklMRShwd3IsIGVuYWJsZV9wcywgIiV1Iik7CitERUJVR0ZTX0ZXU1RBVFNfRklMRShwd3IsIGRpc2FibGVfcHMsICIldSIpOworREVCVUdGU19GV1NUQVRTX0ZJTEUocHdyLCBmaXhfdHNmX3BzLCAiJXUiKTsKKy8qIHNraXBwaW5nIGNvbnRfbWlzc19iY25zX3NwcmVhZCBmb3Igbm93ICovCitERUJVR0ZTX0ZXU1RBVFNfRklMRShwd3IsIHJjdmRfYXdha2VfYmVhY29ucywgIiV1Iik7CisKK0RFQlVHRlNfRldTVEFUU19GSUxFKG1pYywgcnhfcGt0cywgIiV1Iik7CitERUJVR0ZTX0ZXU1RBVFNfRklMRShtaWMsIGNhbGNfZmFpbHVyZSwgIiV1Iik7CisKK0RFQlVHRlNfRldTVEFUU19GSUxFKGFlcywgZW5jcnlwdF9mYWlsLCAiJXUiKTsKK0RFQlVHRlNfRldTVEFUU19GSUxFKGFlcywgZGVjcnlwdF9mYWlsLCAiJXUiKTsKK0RFQlVHRlNfRldTVEFUU19GSUxFKGFlcywgZW5jcnlwdF9wYWNrZXRzLCAiJXUiKTsKK0RFQlVHRlNfRldTVEFUU19GSUxFKGFlcywgZGVjcnlwdF9wYWNrZXRzLCAiJXUiKTsKK0RFQlVHRlNfRldTVEFUU19GSUxFKGFlcywgZW5jcnlwdF9pbnRlcnJ1cHQsICIldSIpOworREVCVUdGU19GV1NUQVRTX0ZJTEUoYWVzLCBkZWNyeXB0X2ludGVycnVwdCwgIiV1Iik7CisKK0RFQlVHRlNfRldTVEFUU19GSUxFKGV2ZW50LCBoZWFydF9iZWF0LCAiJXUiKTsKK0RFQlVHRlNfRldTVEFUU19GSUxFKGV2ZW50LCBjYWxpYnJhdGlvbiwgIiV1Iik7CitERUJVR0ZTX0ZXU1RBVFNfRklMRShldmVudCwgcnhfbWlzbWF0Y2gsICIldSIpOworREVCVUdGU19GV1NUQVRTX0ZJTEUoZXZlbnQsIHJ4X21lbV9lbXB0eSwgIiV1Iik7CitERUJVR0ZTX0ZXU1RBVFNfRklMRShldmVudCwgcnhfcG9vbCwgIiV1Iik7CitERUJVR0ZTX0ZXU1RBVFNfRklMRShldmVudCwgb29tX2xhdGUsICIldSIpOworREVCVUdGU19GV1NUQVRTX0ZJTEUoZXZlbnQsIHBoeV90cmFuc21pdF9lcnJvciwgIiV1Iik7CitERUJVR0ZTX0ZXU1RBVFNfRklMRShldmVudCwgdHhfc3R1Y2ssICIldSIpOworCitERUJVR0ZTX0ZXU1RBVFNfRklMRShwcywgcHNwb2xsX3RpbWVvdXRzLCAiJXUiKTsKK0RFQlVHRlNfRldTVEFUU19GSUxFKHBzLCB1cHNkX3RpbWVvdXRzLCAiJXUiKTsKK0RFQlVHRlNfRldTVEFUU19GSUxFKHBzLCB1cHNkX21heF9zcHRpbWUsICIldSIpOworREVCVUdGU19GV1NUQVRTX0ZJTEUocHMsIHVwc2RfbWF4X2FwdHVybiwgIiV1Iik7CitERUJVR0ZTX0ZXU1RBVFNfRklMRShwcywgcHNwb2xsX21heF9hcHR1cm4sICIldSIpOworREVCVUdGU19GV1NUQVRTX0ZJTEUocHMsIHBzcG9sbF91dGlsaXphdGlvbiwgIiV1Iik7CitERUJVR0ZTX0ZXU1RBVFNfRklMRShwcywgdXBzZF91dGlsaXphdGlvbiwgIiV1Iik7CisKK0RFQlVHRlNfRldTVEFUU19GSUxFKHJ4cGlwZSwgcnhfcHJlcF9iZWFjb25fZHJvcCwgIiV1Iik7CitERUJVR0ZTX0ZXU1RBVFNfRklMRShyeHBpcGUsIGRlc2NyX2hvc3RfaW50X3RyaWdfcnhfZGF0YSwgIiV1Iik7CitERUJVR0ZTX0ZXU1RBVFNfRklMRShyeHBpcGUsIGJlYWNvbl9idWZmZXJfdGhyZXNfaG9zdF9pbnRfdHJpZ19yeF9kYXRhLCAiJXUiKTsKK0RFQlVHRlNfRldTVEFUU19GSUxFKHJ4cGlwZSwgbWlzc2VkX2JlYWNvbl9ob3N0X2ludF90cmlnX3J4X2RhdGEsICIldSIpOworREVCVUdGU19GV1NUQVRTX0ZJTEUocnhwaXBlLCB0eF94ZnJfaG9zdF9pbnRfdHJpZ19yeF9kYXRhLCAiJXUiKTsKKworREVCVUdGU19SRUFET05MWV9GSUxFKHJldHJ5X2NvdW50LCAiJXUiLCB3bC0+c3RhdHMucmV0cnlfY291bnQpOworREVCVUdGU19SRUFET05MWV9GSUxFKGV4Y2Vzc2l2ZV9yZXRyaWVzLCAiJXUiLAorCQkgICAgICB3bC0+c3RhdHMuZXhjZXNzaXZlX3JldHJpZXMpOworCitzdGF0aWMgc3NpemVfdCB0eF9xdWV1ZV9sZW5fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJidWYsCisJCQkJIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCB3bDEyNzEgKndsID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXUzMiBxdWV1ZV9sZW47CisJY2hhciBidWZbMjBdOworCWludCByZXM7CisKKwlxdWV1ZV9sZW4gPSB3bC0+dHhfcXVldWVfY291bnQ7CisKKwlyZXMgPSBzY25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiV1XG4iLCBxdWV1ZV9sZW4pOworCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyYnVmLCBjb3VudCwgcHBvcywgYnVmLCByZXMpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0eF9xdWV1ZV9sZW5fb3BzID0geworCS5yZWFkID0gdHhfcXVldWVfbGVuX3JlYWQsCisJLm9wZW4gPSB3bDEyNzFfb3Blbl9maWxlX2dlbmVyaWMsCisJLmxsc2VlayA9IGRlZmF1bHRfbGxzZWVrLAorfTsKKworc3RhdGljIHNzaXplX3QgZ3Bpb19wb3dlcl9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCisJCQkgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCB3bDEyNzEgKndsID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWJvb2wgc3RhdGUgPSB0ZXN0X2JpdChXTDEyNzFfRkxBR19HUElPX1BPV0VSLCAmd2wtPmZsYWdzKTsKKworCWludCByZXM7CisJY2hhciBidWZbMTBdOworCisJcmVzID0gc2NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlZFxuIiwgc3RhdGUpOworCisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCByZXMpOworfQorCitzdGF0aWMgc3NpemVfdCBncGlvX3Bvd2VyX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICAgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IHdsMTI3MSAqd2wgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJY2hhciBidWZbMTBdOworCXNpemVfdCBsZW47CisJdW5zaWduZWQgbG9uZyB2YWx1ZTsKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKKworCWxlbiA9IG1pbihjb3VudCwgc2l6ZW9mKGJ1ZikgLSAxKTsKKwlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1c2VyX2J1ZiwgbGVuKSkgeworCQlyZXQgPSAtRUZBVUxUOworCQlnb3RvIG91dDsKKwl9CisJYnVmW2xlbl0gPSAnXDAnOworCisJcmV0ID0gc3RyaWN0X3N0cnRvdWwoYnVmLCAwLCAmdmFsdWUpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV93YXJuaW5nKCJpbGxlZ2FsIHZhbHVlIGluIGdwaW9fcG93ZXIiKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKHZhbHVlKQorCQl3bDEyNzFfcG93ZXJfb24od2wpOworCWVsc2UKKwkJd2wxMjcxX3Bvd2VyX29mZih3bCk7CisKK291dDoKKwltdXRleF91bmxvY2soJndsLT5tdXRleCk7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBncGlvX3Bvd2VyX29wcyA9IHsKKwkucmVhZCA9IGdwaW9fcG93ZXJfcmVhZCwKKwkud3JpdGUgPSBncGlvX3Bvd2VyX3dyaXRlLAorCS5vcGVuID0gd2wxMjcxX29wZW5fZmlsZV9nZW5lcmljLAorCS5sbHNlZWsgPSBkZWZhdWx0X2xsc2VlaywKK307CisKK3N0YXRpYyBpbnQgd2wxMjcxX2RlYnVnZnNfYWRkX2ZpbGVzKHN0cnVjdCB3bDEyNzEgKndsKQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBkZW50cnkgKmVudHJ5LCAqc3RhdHM7CisKKwlzdGF0cyA9IGRlYnVnZnNfY3JlYXRlX2RpcigiZnctc3RhdGlzdGljcyIsIHdsLT5yb290ZGlyKTsKKwlpZiAoIXN0YXRzIHx8IElTX0VSUihzdGF0cykpIHsKKwkJZW50cnkgPSBzdGF0czsKKwkJZ290byBlcnI7CisJfQorCisJREVCVUdGU19GV1NUQVRTX0FERCh0eCwgaW50ZXJuYWxfZGVzY19vdmVyZmxvdyk7CisKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKHJ4LCBvdXRfb2ZfbWVtKTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKHJ4LCBoZHJfb3ZlcmZsb3cpOworCURFQlVHRlNfRldTVEFUU19BREQocngsIGh3X3N0dWNrKTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKHJ4LCBkcm9wcGVkKTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKHJ4LCBmY3NfZXJyKTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKHJ4LCB4ZnJfaGludF90cmlnKTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKHJ4LCBwYXRoX3Jlc2V0KTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKHJ4LCByZXNldF9jb3VudGVyKTsKKworCURFQlVHRlNfRldTVEFUU19BREQoZG1hLCByeF9yZXF1ZXN0ZWQpOworCURFQlVHRlNfRldTVEFUU19BREQoZG1hLCByeF9lcnJvcnMpOworCURFQlVHRlNfRldTVEFUU19BREQoZG1hLCB0eF9yZXF1ZXN0ZWQpOworCURFQlVHRlNfRldTVEFUU19BREQoZG1hLCB0eF9lcnJvcnMpOworCisJREVCVUdGU19GV1NUQVRTX0FERChpc3IsIGNtZF9jbXBsdCk7CisJREVCVUdGU19GV1NUQVRTX0FERChpc3IsIGZpcXMpOworCURFQlVHRlNfRldTVEFUU19BREQoaXNyLCByeF9oZWFkZXJzKTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKGlzciwgcnhfbWVtX292ZXJmbG93KTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKGlzciwgcnhfcmR5cyk7CisJREVCVUdGU19GV1NUQVRTX0FERChpc3IsIGlycXMpOworCURFQlVHRlNfRldTVEFUU19BREQoaXNyLCB0eF9wcm9jcyk7CisJREVCVUdGU19GV1NUQVRTX0FERChpc3IsIGRlY3J5cHRfZG9uZSk7CisJREVCVUdGU19GV1NUQVRTX0FERChpc3IsIGRtYTBfZG9uZSk7CisJREVCVUdGU19GV1NUQVRTX0FERChpc3IsIGRtYTFfZG9uZSk7CisJREVCVUdGU19GV1NUQVRTX0FERChpc3IsIHR4X2V4Y2hfY29tcGxldGUpOworCURFQlVHRlNfRldTVEFUU19BREQoaXNyLCBjb21tYW5kcyk7CisJREVCVUdGU19GV1NUQVRTX0FERChpc3IsIHJ4X3Byb2NzKTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKGlzciwgaHdfcG1fbW9kZV9jaGFuZ2VzKTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKGlzciwgaG9zdF9hY2tub3dsZWRnZXMpOworCURFQlVHRlNfRldTVEFUU19BREQoaXNyLCBwY2lfcG0pOworCURFQlVHRlNfRldTVEFUU19BREQoaXNyLCB3YWtldXBzKTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKGlzciwgbG93X3Jzc2kpOworCisJREVCVUdGU19GV1NUQVRTX0FERCh3ZXAsIGFkZHJfa2V5X2NvdW50KTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKHdlcCwgZGVmYXVsdF9rZXlfY291bnQpOworCS8qIHNraXBwaW5nIHdlcC5yZXNlcnZlZCAqLworCURFQlVHRlNfRldTVEFUU19BREQod2VwLCBrZXlfbm90X2ZvdW5kKTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKHdlcCwgZGVjcnlwdF9mYWlsKTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKHdlcCwgcGFja2V0cyk7CisJREVCVUdGU19GV1NUQVRTX0FERCh3ZXAsIGludGVycnVwdCk7CisKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKHB3ciwgcHNfZW50ZXIpOworCURFQlVHRlNfRldTVEFUU19BREQocHdyLCBlbHBfZW50ZXIpOworCURFQlVHRlNfRldTVEFUU19BREQocHdyLCBtaXNzaW5nX2JjbnMpOworCURFQlVHRlNfRldTVEFUU19BREQocHdyLCB3YWtlX29uX2hvc3QpOworCURFQlVHRlNfRldTVEFUU19BREQocHdyLCB3YWtlX29uX3RpbWVyX2V4cCk7CisJREVCVUdGU19GV1NUQVRTX0FERChwd3IsIHR4X3dpdGhfcHMpOworCURFQlVHRlNfRldTVEFUU19BREQocHdyLCB0eF93aXRob3V0X3BzKTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKHB3ciwgcmN2ZF9iZWFjb25zKTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKHB3ciwgcG93ZXJfc2F2ZV9vZmYpOworCURFQlVHRlNfRldTVEFUU19BREQocHdyLCBlbmFibGVfcHMpOworCURFQlVHRlNfRldTVEFUU19BREQocHdyLCBkaXNhYmxlX3BzKTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKHB3ciwgZml4X3RzZl9wcyk7CisJLyogc2tpcHBpbmcgY29udF9taXNzX2JjbnNfc3ByZWFkIGZvciBub3cgKi8KKwlERUJVR0ZTX0ZXU1RBVFNfQUREKHB3ciwgcmN2ZF9hd2FrZV9iZWFjb25zKTsKKworCURFQlVHRlNfRldTVEFUU19BREQobWljLCByeF9wa3RzKTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKG1pYywgY2FsY19mYWlsdXJlKTsKKworCURFQlVHRlNfRldTVEFUU19BREQoYWVzLCBlbmNyeXB0X2ZhaWwpOworCURFQlVHRlNfRldTVEFUU19BREQoYWVzLCBkZWNyeXB0X2ZhaWwpOworCURFQlVHRlNfRldTVEFUU19BREQoYWVzLCBlbmNyeXB0X3BhY2tldHMpOworCURFQlVHRlNfRldTVEFUU19BREQoYWVzLCBkZWNyeXB0X3BhY2tldHMpOworCURFQlVHRlNfRldTVEFUU19BREQoYWVzLCBlbmNyeXB0X2ludGVycnVwdCk7CisJREVCVUdGU19GV1NUQVRTX0FERChhZXMsIGRlY3J5cHRfaW50ZXJydXB0KTsKKworCURFQlVHRlNfRldTVEFUU19BREQoZXZlbnQsIGhlYXJ0X2JlYXQpOworCURFQlVHRlNfRldTVEFUU19BREQoZXZlbnQsIGNhbGlicmF0aW9uKTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKGV2ZW50LCByeF9taXNtYXRjaCk7CisJREVCVUdGU19GV1NUQVRTX0FERChldmVudCwgcnhfbWVtX2VtcHR5KTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKGV2ZW50LCByeF9wb29sKTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKGV2ZW50LCBvb21fbGF0ZSk7CisJREVCVUdGU19GV1NUQVRTX0FERChldmVudCwgcGh5X3RyYW5zbWl0X2Vycm9yKTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKGV2ZW50LCB0eF9zdHVjayk7CisKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKHBzLCBwc3BvbGxfdGltZW91dHMpOworCURFQlVHRlNfRldTVEFUU19BREQocHMsIHVwc2RfdGltZW91dHMpOworCURFQlVHRlNfRldTVEFUU19BREQocHMsIHVwc2RfbWF4X3NwdGltZSk7CisJREVCVUdGU19GV1NUQVRTX0FERChwcywgdXBzZF9tYXhfYXB0dXJuKTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKHBzLCBwc3BvbGxfbWF4X2FwdHVybik7CisJREVCVUdGU19GV1NUQVRTX0FERChwcywgcHNwb2xsX3V0aWxpemF0aW9uKTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKHBzLCB1cHNkX3V0aWxpemF0aW9uKTsKKworCURFQlVHRlNfRldTVEFUU19BREQocnhwaXBlLCByeF9wcmVwX2JlYWNvbl9kcm9wKTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKHJ4cGlwZSwgZGVzY3JfaG9zdF9pbnRfdHJpZ19yeF9kYXRhKTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKHJ4cGlwZSwgYmVhY29uX2J1ZmZlcl90aHJlc19ob3N0X2ludF90cmlnX3J4X2RhdGEpOworCURFQlVHRlNfRldTVEFUU19BREQocnhwaXBlLCBtaXNzZWRfYmVhY29uX2hvc3RfaW50X3RyaWdfcnhfZGF0YSk7CisJREVCVUdGU19GV1NUQVRTX0FERChyeHBpcGUsIHR4X3hmcl9ob3N0X2ludF90cmlnX3J4X2RhdGEpOworCisJREVCVUdGU19BREQodHhfcXVldWVfbGVuLCB3bC0+cm9vdGRpcik7CisJREVCVUdGU19BREQocmV0cnlfY291bnQsIHdsLT5yb290ZGlyKTsKKwlERUJVR0ZTX0FERChleGNlc3NpdmVfcmV0cmllcywgd2wtPnJvb3RkaXIpOworCisJREVCVUdGU19BREQoZ3Bpb19wb3dlciwgd2wtPnJvb3RkaXIpOworCisJZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV94MzIoImRlYnVnX2xldmVsIiwgMDYwMCwgd2wtPnJvb3RkaXIsCisJCQkJICAgJndsMTJ4eF9kZWJ1Z19sZXZlbCk7CisJaWYgKCFlbnRyeSB8fCBJU19FUlIoZW50cnkpKQorCQlnb3RvIGVycjsKKworCXJldHVybiAwOworCitlcnI6CisJaWYgKElTX0VSUihlbnRyeSkpCisJCXJldCA9IFBUUl9FUlIoZW50cnkpOworCWVsc2UKKwkJcmV0ID0gLUVOT01FTTsKKworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgd2wxMjcxX2RlYnVnZnNfcmVzZXQoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJaWYgKCF3bC0+cm9vdGRpcikKKwkJcmV0dXJuOworCisJbWVtc2V0KHdsLT5zdGF0cy5md19zdGF0cywgMCwgc2l6ZW9mKCp3bC0+c3RhdHMuZndfc3RhdHMpKTsKKwl3bC0+c3RhdHMucmV0cnlfY291bnQgPSAwOworCXdsLT5zdGF0cy5leGNlc3NpdmVfcmV0cmllcyA9IDA7Cit9CisKK2ludCB3bDEyNzFfZGVidWdmc19pbml0KHN0cnVjdCB3bDEyNzEgKndsKQoreworCWludCByZXQ7CisKKwl3bC0+cm9vdGRpciA9IGRlYnVnZnNfY3JlYXRlX2RpcihLQlVJTERfTU9ETkFNRSwKKwkJCQkJIHdsLT5ody0+d2lwaHktPmRlYnVnZnNkaXIpOworCisJaWYgKElTX0VSUih3bC0+cm9vdGRpcikpIHsKKwkJcmV0ID0gUFRSX0VSUih3bC0+cm9vdGRpcik7CisJCXdsLT5yb290ZGlyID0gTlVMTDsKKwkJZ290byBlcnI7CisJfQorCisJd2wtPnN0YXRzLmZ3X3N0YXRzID0ga3phbGxvYyhzaXplb2YoKndsLT5zdGF0cy5md19zdGF0cyksCisJCQkJICAgICAgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIXdsLT5zdGF0cy5md19zdGF0cykgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycl9mdzsKKwl9CisKKwl3bC0+c3RhdHMuZndfc3RhdHNfdXBkYXRlID0gamlmZmllczsKKworCXJldCA9IHdsMTI3MV9kZWJ1Z2ZzX2FkZF9maWxlcyh3bCk7CisKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJfZmlsZTsKKworCXJldHVybiAwOworCitlcnJfZmlsZToKKwlrZnJlZSh3bC0+c3RhdHMuZndfc3RhdHMpOworCXdsLT5zdGF0cy5md19zdGF0cyA9IE5VTEw7CisKK2Vycl9mdzoKKwlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUod2wtPnJvb3RkaXIpOworCXdsLT5yb290ZGlyID0gTlVMTDsKKworZXJyOgorCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgd2wxMjcxX2RlYnVnZnNfZXhpdChzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlrZnJlZSh3bC0+c3RhdHMuZndfc3RhdHMpOworCXdsLT5zdGF0cy5md19zdGF0cyA9IE5VTEw7CisKKwlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUod2wtPnJvb3RkaXIpOworCXdsLT5yb290ZGlyID0gTlVMTDsKKworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2RlYnVnZnMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9kZWJ1Z2ZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU0YzViMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9kZWJ1Z2ZzLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdsMTI3MQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIENvbnRhY3Q6IEx1Y2lhbm8gQ29lbGhvIDxsdWNpYW5vLmNvZWxob0Bub2tpYS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQQorICoKKyAqLworCisjaWZuZGVmIF9fREVCVUdGU19IX18KKyNkZWZpbmUgX19ERUJVR0ZTX0hfXworCisjaW5jbHVkZSAid2wxMnh4LmgiCisKK2ludCB3bDEyNzFfZGVidWdmc19pbml0KHN0cnVjdCB3bDEyNzEgKndsKTsKK3ZvaWQgd2wxMjcxX2RlYnVnZnNfZXhpdChzdHJ1Y3Qgd2wxMjcxICp3bCk7Cit2b2lkIHdsMTI3MV9kZWJ1Z2ZzX3Jlc2V0KHN0cnVjdCB3bDEyNzEgKndsKTsKKworI2VuZGlmIC8qIFdMMTI3MV9ERUJVR0ZTX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9ldmVudC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2V2ZW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkxNDZmNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9ldmVudC5jCkBAIC0wLDAgKzEsMjkzIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMjcxCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBDb250YWN0OiBMdWNpYW5vIENvZWxobyA8bHVjaWFuby5jb2VsaG9Abm9raWEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgIndsMTJ4eC5oIgorI2luY2x1ZGUgInJlZy5oIgorI2luY2x1ZGUgImlvLmgiCisjaW5jbHVkZSAiZXZlbnQuaCIKKyNpbmNsdWRlICJwcy5oIgorI2luY2x1ZGUgInNjYW4uaCIKKyNpbmNsdWRlICJ3bDEyeHhfODAyMTEuaCIKKwordm9pZCB3bDEyNzFfcHNwb2xsX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBkZWxheWVkX3dvcmsgKmR3b3JrOworCXN0cnVjdCB3bDEyNzEgKndsOworCisJZHdvcmsgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGRlbGF5ZWRfd29yaywgd29yayk7CisJd2wgPSBjb250YWluZXJfb2YoZHdvcmssIHN0cnVjdCB3bDEyNzEsIHBzcG9sbF93b3JrKTsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19FVkVOVCwgInBzcG9sbCB3b3JrIik7CisKKwltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOworCisJaWYgKHVubGlrZWx5KHdsLT5zdGF0ZSA9PSBXTDEyNzFfU1RBVEVfT0ZGKSkKKwkJZ290byBvdXQ7CisKKwlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXTDEyNzFfRkxBR19QU1BPTExfRkFJTFVSRSwgJndsLT5mbGFncykpCisJCWdvdG8gb3V0OworCisJaWYgKCF0ZXN0X2JpdChXTDEyNzFfRkxBR19TVEFfQVNTT0NJQVRFRCwgJndsLT5mbGFncykpCisJCWdvdG8gb3V0OworCisJLyoKKwkgKiBpZiB3ZSBlbmQgdXAgaGVyZSwgdGhlbiB3ZSB3ZXJlIGluIHBvd2Vyc2F2ZSB3aGVuIHRoZSBwc3BvbGwKKwkgKiBkZWxpdmVyeSBmYWlsdXJlIG9jY3VycmVkLCBhbmQgbm8tb25lIGNoYW5nZWQgc3RhdGUgc2luY2UsIHNvCisJICogd2Ugc2hvdWxkIGdvIGJhY2sgdG8gcG93ZXJzYXZlLgorCSAqLworCXdsMTI3MV9wc19zZXRfbW9kZSh3bCwgU1RBVElPTl9QT1dFUl9TQVZFX01PREUsIHdsLT5iYXNpY19yYXRlLCB0cnVlKTsKKworb3V0OgorCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKK307CisKK3N0YXRpYyB2b2lkIHdsMTI3MV9ldmVudF9wc3BvbGxfZGVsaXZlcnlfZmFpbChzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlpbnQgZGVsYXkgPSB3bC0+Y29uZi5jb25uLnBzX3BvbGxfcmVjb3ZlcnlfcGVyaW9kOworCWludCByZXQ7CisKKwl3bC0+cHNfcG9sbF9mYWlsdXJlcysrOworCWlmICh3bC0+cHNfcG9sbF9mYWlsdXJlcyA9PSAxKQorCQl3bDEyNzFfaW5mbygiQVAgd2l0aCBkeXNmdW5jdGlvbmFsIHBzLXBvbGwsICIKKwkJCSAgICAidHJ5aW5nIHRvIHdvcmsgYXJvdW5kIGl0LiIpOworCisJLyogZm9yY2UgYWN0aXZlIG1vZGUgcmVjZWl2ZSBkYXRhIGZyb20gdGhlIEFQICovCisJaWYgKHRlc3RfYml0KFdMMTI3MV9GTEFHX1BTTSwgJndsLT5mbGFncykpIHsKKwkJcmV0ID0gd2wxMjcxX3BzX3NldF9tb2RlKHdsLCBTVEFUSU9OX0FDVElWRV9NT0RFLAorCQkJCQkgd2wtPmJhc2ljX3JhdGUsIHRydWUpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybjsKKwkJc2V0X2JpdChXTDEyNzFfRkxBR19QU1BPTExfRkFJTFVSRSwgJndsLT5mbGFncyk7CisJCWllZWU4MDIxMV9xdWV1ZV9kZWxheWVkX3dvcmsod2wtPmh3LCAmd2wtPnBzcG9sbF93b3JrLAorCQkJCQkgICAgIG1zZWNzX3RvX2ppZmZpZXMoZGVsYXkpKTsKKwl9CisKKwkvKgorCSAqIElmIGFscmVhZHkgaW4gYWN0aXZlIG1vZGUsIGxldHMgd2Ugc2hvdWxkIGJlIGdldHRpbmcgZGF0YSBmcm9tCisJICogdGhlIEFQIHJpZ2h0IGF3YXkuIElmIHdlIGVudGVyIFBTTSB0b28gZmFzdCBhZnRlciB0aGlzLCBhbmQgZGF0YQorCSAqIHJlbWFpbnMgb24gdGhlIEFQLCB3ZSB3aWxsIGdldCBhbm90aGVyIGV2ZW50IGxpa2UgdGhpcywgYW5kIHdlJ2xsCisJICogZ28gaW50byBhY3RpdmUgb25jZSBtb3JlLgorCSAqLworfQorCitzdGF0aWMgaW50IHdsMTI3MV9ldmVudF9wc19yZXBvcnQoc3RydWN0IHdsMTI3MSAqd2wsCisJCQkJICBzdHJ1Y3QgZXZlbnRfbWFpbGJveCAqbWJveCwKKwkJCQkgIGJvb2wgKmJlYWNvbl9sb3NzKQoreworCWludCByZXQgPSAwOworCXUzMiB0b3RhbF9yZXRyaWVzID0gd2wtPmNvbmYuY29ubi5wc21fZW50cnlfcmV0cmllczsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19FVkVOVCwgInBzX3N0YXR1czogMHgleCIsIG1ib3gtPnBzX3N0YXR1cyk7CisKKwlzd2l0Y2ggKG1ib3gtPnBzX3N0YXR1cykgeworCWNhc2UgRVZFTlRfRU5URVJfUE9XRVJfU0FWRV9GQUlMOgorCQl3bDEyNzFfZGVidWcoREVCVUdfUFNNLCAiUFNNIGVudHJ5IGZhaWxlZCIpOworCisJCWlmICghdGVzdF9iaXQoV0wxMjcxX0ZMQUdfUFNNLCAmd2wtPmZsYWdzKSkgeworCQkJLyogcmVtYWluIGluIGFjdGl2ZSBtb2RlICovCisJCQl3bC0+cHNtX2VudHJ5X3JldHJ5ID0gMDsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHdsLT5wc21fZW50cnlfcmV0cnkgPCB0b3RhbF9yZXRyaWVzKSB7CisJCQl3bC0+cHNtX2VudHJ5X3JldHJ5Kys7CisJCQlyZXQgPSB3bDEyNzFfcHNfc2V0X21vZGUod2wsIFNUQVRJT05fUE9XRVJfU0FWRV9NT0RFLAorCQkJCQkJIHdsLT5iYXNpY19yYXRlLCB0cnVlKTsKKwkJfSBlbHNlIHsKKwkJCXdsMTI3MV9pbmZvKCJObyBhY2sgdG8gbnVsbGZ1bmMgZnJvbSBBUC4iKTsKKwkJCXdsLT5wc21fZW50cnlfcmV0cnkgPSAwOworCQkJKmJlYWNvbl9sb3NzID0gdHJ1ZTsKKwkJfQorCQlicmVhazsKKwljYXNlIEVWRU5UX0VOVEVSX1BPV0VSX1NBVkVfU1VDQ0VTUzoKKwkJd2wtPnBzbV9lbnRyeV9yZXRyeSA9IDA7CisKKwkJLyogZW5hYmxlIGJlYWNvbiBmaWx0ZXJpbmcgKi8KKwkJcmV0ID0gd2wxMjcxX2FjeF9iZWFjb25fZmlsdGVyX29wdCh3bCwgdHJ1ZSk7CisJCWlmIChyZXQgPCAwKQorCQkJYnJlYWs7CisKKwkJLyogZW5hYmxlIGJlYWNvbiBlYXJseSB0ZXJtaW5hdGlvbiAqLworCQlyZXQgPSB3bDEyNzFfYWN4X2JldF9lbmFibGUod2wsIHRydWUpOworCQlpZiAocmV0IDwgMCkKKwkJCWJyZWFrOworCisJCS8qIGdvIHRvIGV4dHJlbWVseSBsb3cgcG93ZXIgbW9kZSAqLworCQl3bDEyNzFfcHNfZWxwX3NsZWVwKHdsKTsKKwkJYnJlYWs7CisJY2FzZSBFVkVOVF9FWElUX1BPV0VSX1NBVkVfRkFJTDoKKwkJd2wxMjcxX2RlYnVnKERFQlVHX1BTTSwgIlBTTSBleGl0IGZhaWxlZCIpOworCisJCWlmICh0ZXN0X2JpdChXTDEyNzFfRkxBR19QU00sICZ3bC0+ZmxhZ3MpKSB7CisJCQl3bC0+cHNtX2VudHJ5X3JldHJ5ID0gMDsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogbWFrZSBzdXJlIHRoZSBmaXJtd2FyZSBnb2VzIHRvIGFjdGl2ZSBtb2RlIC0gdGhlIGZyYW1lIHRvCisJCSAgIGJlIHNlbnQgbmV4dCB3aWxsIGluZGljYXRlIHRvIHRoZSBBUCwgdGhhdCB3ZSBhcmUgYWN0aXZlLiAqLworCQlyZXQgPSB3bDEyNzFfcHNfc2V0X21vZGUod2wsIFNUQVRJT05fQUNUSVZFX01PREUsCisJCQkJCSB3bC0+YmFzaWNfcmF0ZSwgZmFsc2UpOworCQlicmVhazsKKwljYXNlIEVWRU5UX0VYSVRfUE9XRVJfU0FWRV9TVUNDRVNTOgorCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHdsMTI3MV9ldmVudF9yc3NpX3RyaWdnZXIoc3RydWN0IHdsMTI3MSAqd2wsCisJCQkJICAgICAgc3RydWN0IGV2ZW50X21haWxib3ggKm1ib3gpCit7CisJZW51bSBubDgwMjExX2NxbV9yc3NpX3RocmVzaG9sZF9ldmVudCBldmVudDsKKwlzOCBtZXRyaWMgPSBtYm94LT5yc3NpX3Nucl90cmlnZ2VyX21ldHJpY1swXTsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19FVkVOVCwgIlJTU0kgdHJpZ2dlciBtZXRyaWM6ICVkIiwgbWV0cmljKTsKKworCWlmIChtZXRyaWMgPD0gd2wtPnJzc2lfdGhvbGQpCisJCWV2ZW50ID0gTkw4MDIxMV9DUU1fUlNTSV9USFJFU0hPTERfRVZFTlRfTE9XOworCWVsc2UKKwkJZXZlbnQgPSBOTDgwMjExX0NRTV9SU1NJX1RIUkVTSE9MRF9FVkVOVF9ISUdIOworCisJaWYgKGV2ZW50ICE9IHdsLT5sYXN0X3Jzc2lfZXZlbnQpCisJCWllZWU4MDIxMV9jcW1fcnNzaV9ub3RpZnkod2wtPnZpZiwgZXZlbnQsIEdGUF9LRVJORUwpOworCXdsLT5sYXN0X3Jzc2lfZXZlbnQgPSBldmVudDsKK30KKworc3RhdGljIHZvaWQgd2wxMjcxX2V2ZW50X21ib3hfZHVtcChzdHJ1Y3QgZXZlbnRfbWFpbGJveCAqbWJveCkKK3sKKwl3bDEyNzFfZGVidWcoREVCVUdfRVZFTlQsICJNQk9YIERVTVA6Iik7CisJd2wxMjcxX2RlYnVnKERFQlVHX0VWRU5ULCAiXHR2ZWN0b3I6IDB4JXgiLCBtYm94LT5ldmVudHNfdmVjdG9yKTsKKwl3bDEyNzFfZGVidWcoREVCVUdfRVZFTlQsICJcdG1hc2s6IDB4JXgiLCBtYm94LT5ldmVudHNfbWFzayk7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjcxX2V2ZW50X3Byb2Nlc3Moc3RydWN0IHdsMTI3MSAqd2wsIHN0cnVjdCBldmVudF9tYWlsYm94ICptYm94KQoreworCWludCByZXQ7CisJdTMyIHZlY3RvcjsKKwlib29sIGJlYWNvbl9sb3NzID0gZmFsc2U7CisKKwl3bDEyNzFfZXZlbnRfbWJveF9kdW1wKG1ib3gpOworCisJdmVjdG9yID0gbGUzMl90b19jcHUobWJveC0+ZXZlbnRzX3ZlY3Rvcik7CisJdmVjdG9yICY9IH4obGUzMl90b19jcHUobWJveC0+ZXZlbnRzX21hc2spKTsKKwl3bDEyNzFfZGVidWcoREVCVUdfRVZFTlQsICJ2ZWN0b3I6IDB4JXgiLCB2ZWN0b3IpOworCisJaWYgKHZlY3RvciAmIFNDQU5fQ09NUExFVEVfRVZFTlRfSUQpIHsKKwkJd2wxMjcxX2RlYnVnKERFQlVHX0VWRU5ULCAic3RhdHVzOiAweCV4IiwKKwkJCSAgICAgbWJveC0+c2NoZWR1bGVkX3NjYW5fc3RhdHVzKTsKKworCQl3bDEyNzFfc2Nhbl9zdG0od2wpOworCX0KKworCS8qIGRpc2FibGUgZHluYW1pYyBQUyB3aGVuIHJlcXVlc3RlZCBieSB0aGUgZmlybXdhcmUgKi8KKwlpZiAodmVjdG9yICYgU09GVF9HRU1JTklfU0VOU0VfRVZFTlRfSUQgJiYKKwkgICAgd2wtPmJzc190eXBlID09IEJTU19UWVBFX1NUQV9CU1MpIHsKKwkJaWYgKG1ib3gtPnNvZnRfZ2VtaW5pX3NlbnNlX2luZm8pCisJCQlpZWVlODAyMTFfZGlzYWJsZV9keW5fcHMod2wtPnZpZik7CisJCWVsc2UKKwkJCWllZWU4MDIxMV9lbmFibGVfZHluX3BzKHdsLT52aWYpOworCX0KKworCS8qCisJICogVGhlIEJTU19MT1NFX0VWRU5UX0lEIGlzIG9ubHkgbmVlZGVkIHdoaWxlIHBzbSAoYW5kIGhlbmNlIGJlYWNvbgorCSAqIGZpbHRlcmluZykgaXMgZW5hYmxlZC4gV2l0aG91dCBQU00sIHRoZSBzdGFjayB3aWxsIHJlY2VpdmUgYWxsCisJICogYmVhY29ucyBhbmQgY2FuIGRldGVjdCBiZWFjb24gbG9zcyBieSBpdHNlbGYuCisJICoKKwkgKiBBcyB0aGVyZSdzIHBvc3NpYmlsaXR5IHRoYXQgdGhlIGRyaXZlciBkaXNhYmxlcyBQU00gYmVmb3JlIHJlY2VpdmluZworCSAqIEJTU19MT1NFX0VWRU5ULCBiZWFjb24gbG9zcyBoYXMgdG8gYmUgcmVwb3J0ZWQgdG8gdGhlIHN0YWNrLgorCSAqCisJICovCisJaWYgKHZlY3RvciAmIEJTU19MT1NFX0VWRU5UX0lEKSB7CisJCXdsMTI3MV9pbmZvKCJCZWFjb24gbG9zcyBkZXRlY3RlZC4iKTsKKworCQkvKiBpbmRpY2F0ZSB0byB0aGUgc3RhY2ssIHRoYXQgYmVhY29ucyBoYXZlIGJlZW4gbG9zdCAqLworCQliZWFjb25fbG9zcyA9IHRydWU7CisJfQorCisJaWYgKHZlY3RvciAmIFBTX1JFUE9SVF9FVkVOVF9JRCkgeworCQl3bDEyNzFfZGVidWcoREVCVUdfRVZFTlQsICJQU19SRVBPUlRfRVZFTlQiKTsKKwkJcmV0ID0gd2wxMjcxX2V2ZW50X3BzX3JlcG9ydCh3bCwgbWJveCwgJmJlYWNvbl9sb3NzKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCX0KKworCWlmICh2ZWN0b3IgJiBQU1BPTExfREVMSVZFUllfRkFJTFVSRV9FVkVOVF9JRCkKKwkJd2wxMjcxX2V2ZW50X3BzcG9sbF9kZWxpdmVyeV9mYWlsKHdsKTsKKworCWlmICh2ZWN0b3IgJiBSU1NJX1NOUl9UUklHR0VSXzBfRVZFTlRfSUQpIHsKKwkJd2wxMjcxX2RlYnVnKERFQlVHX0VWRU5ULCAiUlNTSV9TTlJfVFJJR0dFUl8wX0VWRU5UIik7CisJCWlmICh3bC0+dmlmKQorCQkJd2wxMjcxX2V2ZW50X3Jzc2lfdHJpZ2dlcih3bCwgbWJveCk7CisJfQorCisJaWYgKHdsLT52aWYgJiYgYmVhY29uX2xvc3MpCisJCWllZWU4MDIxMV9jb25uZWN0aW9uX2xvc3Mod2wtPnZpZik7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHdsMTI3MV9ldmVudF91bm1hc2soc3RydWN0IHdsMTI3MSAqd2wpCit7CisJaW50IHJldDsKKworCXJldCA9IHdsMTI3MV9hY3hfZXZlbnRfbWJveF9tYXNrKHdsLCB+KHdsLT5ldmVudF9tYXNrKSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCB3bDEyNzFfZXZlbnRfbWJveF9jb25maWcoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJd2wtPm1ib3hfcHRyWzBdID0gd2wxMjcxX3JlYWQzMih3bCwgUkVHX0VWRU5UX01BSUxCT1hfUFRSKTsKKwl3bC0+bWJveF9wdHJbMV0gPSB3bC0+bWJveF9wdHJbMF0gKyBzaXplb2Yoc3RydWN0IGV2ZW50X21haWxib3gpOworCisJd2wxMjcxX2RlYnVnKERFQlVHX0VWRU5ULCAiTUJPWCBwdHJzOiAweCV4IDB4JXgiLAorCQkgICAgIHdsLT5tYm94X3B0clswXSwgd2wtPm1ib3hfcHRyWzFdKTsKK30KKworaW50IHdsMTI3MV9ldmVudF9oYW5kbGUoc3RydWN0IHdsMTI3MSAqd2wsIHU4IG1ib3hfbnVtKQoreworCXN0cnVjdCBldmVudF9tYWlsYm94IG1ib3g7CisJaW50IHJldDsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19FVkVOVCwgIkVWRU5UIG9uIG1ib3ggJWQiLCBtYm94X251bSk7CisKKwlpZiAobWJveF9udW0gPiAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIGZpcnN0IHdlIHJlYWQgdGhlIG1ib3ggZGVzY3JpcHRvciAqLworCXdsMTI3MV9yZWFkKHdsLCB3bC0+bWJveF9wdHJbbWJveF9udW1dLCAmbWJveCwKKwkJICAgIHNpemVvZihzdHJ1Y3QgZXZlbnRfbWFpbGJveCksIGZhbHNlKTsKKworCS8qIHByb2Nlc3MgdGhlIGRlc2NyaXB0b3IgKi8KKwlyZXQgPSB3bDEyNzFfZXZlbnRfcHJvY2Vzcyh3bCwgJm1ib3gpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJLyogdGhlbiB3ZSBsZXQgdGhlIGZpcm13YXJlIGtub3cgaXQgY2FuIGdvIG9uLi4uKi8KKwl3bDEyNzFfd3JpdGUzMih3bCwgQUNYX1JFR19JTlRFUlJVUFRfVFJJRywgSU5UUl9UUklHX0VWRU5UX0FDSyk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9ldmVudC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2V2ZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNjZTAxNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9ldmVudC5oCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMjcxCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4LTIwMDkgVGV4YXMgSW5zdHJ1bWVudHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIENvbnRhY3Q6IEx1Y2lhbm8gQ29lbGhvIDxsdWNpYW5vLmNvZWxob0Bub2tpYS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQQorICoKKyAqLworCisjaWZuZGVmIF9fRVZFTlRfSF9fCisjZGVmaW5lIF9fRVZFTlRfSF9fCisKKy8qCisgKiBNYm94IGV2ZW50cworICoKKyAqIFRoZSBldmVudCBtZWNoYW5pc20gaXMgYmFzZWQgb24gYSBwYWlyIG9mIGV2ZW50IGJ1ZmZlcnMgKGJ1ZmZlcnMgQSBhbmQKKyAqIEIpIGF0IGZpeGVkIGxvY2F0aW9ucyBpbiB0aGUgdGFyZ2V0J3MgbWVtb3J5LiBUaGUgaG9zdCBwcm9jZXNzZXMgb25lCisgKiBidWZmZXIgd2hpbGUgdGhlIG90aGVyIGJ1ZmZlciBjb250aW51ZXMgdG8gY29sbGVjdCBldmVudHMuIElmIHRoZSBob3N0CisgKiBpcyBub3QgcHJvY2Vzc2luZyBldmVudHMsIGFuIGludGVycnVwdCBpcyBpc3N1ZWQgdG8gc2lnbmFsIHRoYXQgYSBidWZmZXIKKyAqIGlzIHJlYWR5LiBPbmNlIHRoZSBob3N0IGlzIGRvbmUgd2l0aCBwcm9jZXNzaW5nIGV2ZW50cyBmcm9tIG9uZSBidWZmZXIsCisgKiBpdCBzaWduYWxzIHRoZSB0YXJnZXQgKHdpdGggYW4gQUNLIGludGVycnVwdCkgdGhhdCB0aGUgZXZlbnQgYnVmZmVyIGlzCisgKiBmcmVlLgorICovCisKK2VudW0geworCVJTU0lfU05SX1RSSUdHRVJfMF9FVkVOVF9JRCAgICAgICAgICAgICAgPSBCSVQoMCksCisJUlNTSV9TTlJfVFJJR0dFUl8xX0VWRU5UX0lEICAgICAgICAgICAgICA9IEJJVCgxKSwKKwlSU1NJX1NOUl9UUklHR0VSXzJfRVZFTlRfSUQgICAgICAgICAgICAgID0gQklUKDIpLAorCVJTU0lfU05SX1RSSUdHRVJfM19FVkVOVF9JRCAgICAgICAgICAgICAgPSBCSVQoMyksCisJUlNTSV9TTlJfVFJJR0dFUl80X0VWRU5UX0lEICAgICAgICAgICAgICA9IEJJVCg0KSwKKwlSU1NJX1NOUl9UUklHR0VSXzVfRVZFTlRfSUQgICAgICAgICAgICAgID0gQklUKDUpLAorCVJTU0lfU05SX1RSSUdHRVJfNl9FVkVOVF9JRCAgICAgICAgICAgICAgPSBCSVQoNiksCisJUlNTSV9TTlJfVFJJR0dFUl83X0VWRU5UX0lEICAgICAgICAgICAgICA9IEJJVCg3KSwKKwlNRUFTVVJFTUVOVF9TVEFSVF9FVkVOVF9JRAkJID0gQklUKDgpLAorCU1FQVNVUkVNRU5UX0NPTVBMRVRFX0VWRU5UX0lECQkgPSBCSVQoOSksCisJU0NBTl9DT01QTEVURV9FVkVOVF9JRAkJCSA9IEJJVCgxMCksCisJU0NIRURVTEVEX1NDQU5fQ09NUExFVEVfRVZFTlRfSUQJID0gQklUKDExKSwKKwlBUF9ESVNDT1ZFUllfQ09NUExFVEVfRVZFTlRfSUQJCSA9IEJJVCgxMiksCisJUFNfUkVQT1JUX0VWRU5UX0lECQkJID0gQklUKDEzKSwKKwlQU1BPTExfREVMSVZFUllfRkFJTFVSRV9FVkVOVF9JRAkgPSBCSVQoMTQpLAorCURJU0NPTk5FQ1RfRVZFTlRfQ09NUExFVEVfSUQJCSA9IEJJVCgxNSksCisJSk9JTl9FVkVOVF9DT01QTEVURV9JRAkJCSA9IEJJVCgxNiksCisJQ0hBTk5FTF9TV0lUQ0hfQ09NUExFVEVfRVZFTlRfSUQJID0gQklUKDE3KSwKKwlCU1NfTE9TRV9FVkVOVF9JRAkJCSA9IEJJVCgxOCksCisJUkVHQUlORURfQlNTX0VWRU5UX0lECQkJID0gQklUKDE5KSwKKwlST0FNSU5HX1RSSUdHRVJfTUFYX1RYX1JFVFJZX0VWRU5UX0lECSA9IEJJVCgyMCksCisJU09GVF9HRU1JTklfU0VOU0VfRVZFTlRfSUQJCSA9IEJJVCgyMiksCisJU09GVF9HRU1JTklfUFJFRElDVElPTl9FVkVOVF9JRAkJID0gQklUKDIzKSwKKwlTT0ZUX0dFTUlOSV9BVkFMQU5DSEVfRVZFTlRfSUQJCSA9IEJJVCgyNCksCisJUExUX1JYX0NBTElCUkFUSU9OX0NPTVBMRVRFX0VWRU5UX0lECSA9IEJJVCgyNSksCisJREJHX0VWRU5UX0lECQkJCSA9IEJJVCgyNiksCisJSEVBTFRIX0NIRUNLX1JFUExZX0VWRU5UX0lECQkgPSBCSVQoMjcpLAorCVBFUklPRElDX1NDQU5fQ09NUExFVEVfRVZFTlRfSUQJCSA9IEJJVCgyOCksCisJUEVSSU9ESUNfU0NBTl9SRVBPUlRfRVZFTlRfSUQJCSA9IEJJVCgyOSksCisJQkFfU0VTU0lPTl9URUFSX0RPV05fRVZFTlRfSUQJCSA9IEJJVCgzMCksCisJRVZFTlRfTUJPWF9BTExfRVZFTlRfSUQJCQkgPSAweDdmZmZmZmZmLAorfTsKKworZW51bSB7CisJRVZFTlRfRU5URVJfUE9XRVJfU0FWRV9GQUlMID0gMCwKKwlFVkVOVF9FTlRFUl9QT1dFUl9TQVZFX1NVQ0NFU1MsCisJRVZFTlRfRVhJVF9QT1dFUl9TQVZFX0ZBSUwsCisJRVZFTlRfRVhJVF9QT1dFUl9TQVZFX1NVQ0NFU1MsCit9OworCitzdHJ1Y3QgZXZlbnRfZGVidWdfcmVwb3J0IHsKKwl1OCBkZWJ1Z19ldmVudF9pZDsKKwl1OCBudW1fcGFyYW1zOworCV9fbGUxNiBwYWQ7CisJX19sZTMyIHJlcG9ydF8xOworCV9fbGUzMiByZXBvcnRfMjsKKwlfX2xlMzIgcmVwb3J0XzM7Cit9IF9fcGFja2VkOworCisjZGVmaW5lIE5VTV9PRl9SU1NJX1NOUl9UUklHR0VSUyA4CisKK3N0cnVjdCBldmVudF9tYWlsYm94IHsKKwlfX2xlMzIgZXZlbnRzX3ZlY3RvcjsKKwlfX2xlMzIgZXZlbnRzX21hc2s7CisJX19sZTMyIHJlc2VydmVkXzE7CisJX19sZTMyIHJlc2VydmVkXzI7CisKKwl1OCBkYmdfZXZlbnRfaWQ7CisJdTggbnVtX3JlbGV2YW50X3BhcmFtczsKKwlfX2xlMTYgcmVzZXJ2ZWRfMzsKKwlfX2xlMzIgZXZlbnRfcmVwb3J0X3AxOworCV9fbGUzMiBldmVudF9yZXBvcnRfcDI7CisJX19sZTMyIGV2ZW50X3JlcG9ydF9wMzsKKworCXU4IG51bWJlcl9vZl9zY2FuX3Jlc3VsdHM7CisJdTggc2Nhbl90YWc7CisJdTggcmVzZXJ2ZWRfNFsyXTsKKwlfX2xlMzIgY29tcGxfc2NoZWR1bGVkX3NjYW5fc3RhdHVzOworCisJX19sZTE2IHNjaGVkdWxlZF9zY2FuX2F0dGVuZGVkX2NoYW5uZWxzOworCXU4IHNvZnRfZ2VtaW5pX3NlbnNlX2luZm87CisJdTggc29mdF9nZW1pbmlfcHJvdGVjdGl2ZV9pbmZvOworCXM4IHJzc2lfc25yX3RyaWdnZXJfbWV0cmljW05VTV9PRl9SU1NJX1NOUl9UUklHR0VSU107CisJdTggY2hhbm5lbF9zd2l0Y2hfc3RhdHVzOworCXU4IHNjaGVkdWxlZF9zY2FuX3N0YXR1czsKKwl1OCBwc19zdGF0dXM7CisKKwl1OCByZXNlcnZlZF81WzI5XTsKK30gX19wYWNrZWQ7CisKK2ludCB3bDEyNzFfZXZlbnRfdW5tYXNrKHN0cnVjdCB3bDEyNzEgKndsKTsKK3ZvaWQgd2wxMjcxX2V2ZW50X21ib3hfY29uZmlnKHN0cnVjdCB3bDEyNzEgKndsKTsKK2ludCB3bDEyNzFfZXZlbnRfaGFuZGxlKHN0cnVjdCB3bDEyNzEgKndsLCB1OCBtYm94KTsKK3ZvaWQgd2wxMjcxX3BzcG9sbF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2luaS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2luaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzMzBhMjUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvaW5pLmgKQEAgLTAsMCArMSwxMjMgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3bDEyNzEKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBDb250YWN0OiBMdWNpYW5vIENvZWxobyA8bHVjaWFuby5jb2VsaG9Abm9raWEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBfX0lOSV9IX18KKyNkZWZpbmUgX19JTklfSF9fCisKKyNkZWZpbmUgV0wxMjcxX0lOSV9NQVhfU01BUlRfUkVGTEVYX1BBUkFNIDE2CisKK3N0cnVjdCB3bDEyNzFfaW5pX2dlbmVyYWxfcGFyYW1zIHsKKwl1OCByZWZfY2xvY2s7CisJdTggc2V0dGxpbmdfdGltZTsKKwl1OCBjbGtfdmFsaWRfb25fd2FrZXVwOworCXU4IGRjMmRjX21vZGU7CisJdTggZHVhbF9tb2RlX3NlbGVjdDsKKwl1OCB0eF9iaXBfZmVtX2F1dG9fZGV0ZWN0OworCXU4IHR4X2JpcF9mZW1fbWFudWZhY3R1cmVyOworCXU4IGdlbmVyYWxfc2V0dGluZ3M7CisJdTggc3Jfc3RhdGU7CisJdTggc3JmMVtXTDEyNzFfSU5JX01BWF9TTUFSVF9SRUZMRVhfUEFSQU1dOworCXU4IHNyZjJbV0wxMjcxX0lOSV9NQVhfU01BUlRfUkVGTEVYX1BBUkFNXTsKKwl1OCBzcmYzW1dMMTI3MV9JTklfTUFYX1NNQVJUX1JFRkxFWF9QQVJBTV07Cit9IF9fcGFja2VkOworCisjZGVmaW5lIFdMMTI3MV9JTklfUlNTSV9QUk9DRVNTX0NPTVBFTlNfU0laRSAxNQorCitzdHJ1Y3Qgd2wxMjcxX2luaV9iYW5kX3BhcmFtc18yIHsKKwl1OCByeF90cmFjZV9pbnNlcnRpb25fbG9zczsKKwl1OCB0eF90cmFjZV9sb3NzOworCXU4IHJ4X3Jzc2lfcHJvY2Vzc19jb21wZW5zW1dMMTI3MV9JTklfUlNTSV9QUk9DRVNTX0NPTVBFTlNfU0laRV07Cit9IF9fcGFja2VkOworCisjZGVmaW5lIFdMMTI3MV9JTklfUkFURV9HUk9VUF9DT1VOVCA2CisjZGVmaW5lIFdMMTI3MV9JTklfQ0hBTk5FTF9DT1VOVF8yIDE0CisKK3N0cnVjdCB3bDEyNzFfaW5pX2ZlbV9wYXJhbXNfMiB7CisJX19sZTE2IHR4X2JpcF9yZWZfcGRfdm9sdGFnZTsKKwl1OCB0eF9iaXBfcmVmX3Bvd2VyOworCXU4IHR4X2JpcF9yZWZfb2Zmc2V0OworCXU4IHR4X3Blcl9yYXRlX3B3cl9saW1pdHNfbm9ybWFsW1dMMTI3MV9JTklfUkFURV9HUk9VUF9DT1VOVF07CisJdTggdHhfcGVyX3JhdGVfcHdyX2xpbWl0c19kZWdyYWRlZFtXTDEyNzFfSU5JX1JBVEVfR1JPVVBfQ09VTlRdOworCXU4IHR4X3Blcl9yYXRlX3B3cl9saW1pdHNfZXh0cmVtZVtXTDEyNzFfSU5JX1JBVEVfR1JPVVBfQ09VTlRdOworCXU4IHR4X3Blcl9jaGFuX3B3cl9saW1pdHNfMTFiW1dMMTI3MV9JTklfQ0hBTk5FTF9DT1VOVF8yXTsKKwl1OCB0eF9wZXJfY2hhbl9wd3JfbGltaXRzX29mZG1bV0wxMjcxX0lOSV9DSEFOTkVMX0NPVU5UXzJdOworCXU4IHR4X3BkX3ZzX3JhdGVfb2Zmc2V0c1tXTDEyNzFfSU5JX1JBVEVfR1JPVVBfQ09VTlRdOworCXU4IHR4X2liaWFzW1dMMTI3MV9JTklfUkFURV9HUk9VUF9DT1VOVF07CisJdTggcnhfZmVtX2luc2VydGlvbl9sb3NzOworCXU4IGRlZ3JhZGVkX2xvd190b19ub3JtYWxfdGhyOworCXU4IG5vcm1hbF90b19kZWdyYWRlZF9oaWdoX3RocjsKK30gX19wYWNrZWQ7CisKKyNkZWZpbmUgV0wxMjcxX0lOSV9DSEFOTkVMX0NPVU5UXzUgMzUKKyNkZWZpbmUgV0wxMjcxX0lOSV9TVUJfQkFORF9DT1VOVF81IDcKKworc3RydWN0IHdsMTI3MV9pbmlfYmFuZF9wYXJhbXNfNSB7CisJdTggcnhfdHJhY2VfaW5zZXJ0aW9uX2xvc3NbV0wxMjcxX0lOSV9TVUJfQkFORF9DT1VOVF81XTsKKwl1OCB0eF90cmFjZV9sb3NzW1dMMTI3MV9JTklfU1VCX0JBTkRfQ09VTlRfNV07CisJdTggcnhfcnNzaV9wcm9jZXNzX2NvbXBlbnNbV0wxMjcxX0lOSV9SU1NJX1BST0NFU1NfQ09NUEVOU19TSVpFXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCB3bDEyNzFfaW5pX2ZlbV9wYXJhbXNfNSB7CisJX19sZTE2IHR4X2JpcF9yZWZfcGRfdm9sdGFnZVtXTDEyNzFfSU5JX1NVQl9CQU5EX0NPVU5UXzVdOworCXU4IHR4X2JpcF9yZWZfcG93ZXJbV0wxMjcxX0lOSV9TVUJfQkFORF9DT1VOVF81XTsKKwl1OCB0eF9iaXBfcmVmX29mZnNldFtXTDEyNzFfSU5JX1NVQl9CQU5EX0NPVU5UXzVdOworCXU4IHR4X3Blcl9yYXRlX3B3cl9saW1pdHNfbm9ybWFsW1dMMTI3MV9JTklfUkFURV9HUk9VUF9DT1VOVF07CisJdTggdHhfcGVyX3JhdGVfcHdyX2xpbWl0c19kZWdyYWRlZFtXTDEyNzFfSU5JX1JBVEVfR1JPVVBfQ09VTlRdOworCXU4IHR4X3Blcl9yYXRlX3B3cl9saW1pdHNfZXh0cmVtZVtXTDEyNzFfSU5JX1JBVEVfR1JPVVBfQ09VTlRdOworCXU4IHR4X3Blcl9jaGFuX3B3cl9saW1pdHNfb2ZkbVtXTDEyNzFfSU5JX0NIQU5ORUxfQ09VTlRfNV07CisJdTggdHhfcGRfdnNfcmF0ZV9vZmZzZXRzW1dMMTI3MV9JTklfUkFURV9HUk9VUF9DT1VOVF07CisJdTggdHhfaWJpYXNbV0wxMjcxX0lOSV9SQVRFX0dST1VQX0NPVU5UXTsKKwl1OCByeF9mZW1faW5zZXJ0aW9uX2xvc3NbV0wxMjcxX0lOSV9TVUJfQkFORF9DT1VOVF81XTsKKwl1OCBkZWdyYWRlZF9sb3dfdG9fbm9ybWFsX3RocjsKKwl1OCBub3JtYWxfdG9fZGVncmFkZWRfaGlnaF90aHI7Cit9IF9fcGFja2VkOworCisKKy8qIE5WUyBkYXRhIHN0cnVjdHVyZSAqLworI2RlZmluZSBXTDEyNzFfSU5JX05WU19TRUNUSU9OX1NJWkUJCSAgICAgNDY4CisjZGVmaW5lIFdMMTI3MV9JTklfRkVNX01PRFVMRV9DT1VOVCAgICAgICAgICAgICAgICAgIDIKKworI2RlZmluZSBXTDEyNzFfSU5JX0xFR0FDWV9OVlNfRklMRV9TSVpFICAgICAgICAgICAgICA4MDAKKworc3RydWN0IHdsMTI3MV9udnNfZmlsZSB7CisJLyogTlZTIHNlY3Rpb24gKi8KKwl1OCBudnNbV0wxMjcxX0lOSV9OVlNfU0VDVElPTl9TSVpFXTsKKworCS8qIElOSSBzZWN0aW9uICovCisJc3RydWN0IHdsMTI3MV9pbmlfZ2VuZXJhbF9wYXJhbXMgZ2VuZXJhbF9wYXJhbXM7CisJdTggcGFkZGluZzE7CisJc3RydWN0IHdsMTI3MV9pbmlfYmFuZF9wYXJhbXNfMiBzdGF0X3JhZGlvX3BhcmFtc18yOworCXU4IHBhZGRpbmcyOworCXN0cnVjdCB7CisJCXN0cnVjdCB3bDEyNzFfaW5pX2ZlbV9wYXJhbXNfMiBwYXJhbXM7CisJCXU4IHBhZGRpbmc7CisJfSBkeW5fcmFkaW9fcGFyYW1zXzJbV0wxMjcxX0lOSV9GRU1fTU9EVUxFX0NPVU5UXTsKKwlzdHJ1Y3Qgd2wxMjcxX2luaV9iYW5kX3BhcmFtc181IHN0YXRfcmFkaW9fcGFyYW1zXzU7CisJdTggcGFkZGluZzM7CisJc3RydWN0IHsKKwkJc3RydWN0IHdsMTI3MV9pbmlfZmVtX3BhcmFtc181IHBhcmFtczsKKwkJdTggcGFkZGluZzsKKwl9IGR5bl9yYWRpb19wYXJhbXNfNVtXTDEyNzFfSU5JX0ZFTV9NT0RVTEVfQ09VTlRdOworfSBfX3BhY2tlZDsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvaW5pdC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2luaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODVhNTMwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2luaXQuYwpAQCAtMCwwICsxLDM3NCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdsMTI3MQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIENvbnRhY3Q6IEx1Y2lhbm8gQ29lbGhvIDxsdWNpYW5vLmNvZWxob0Bub2tpYS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorCisjaW5jbHVkZSAiaW5pdC5oIgorI2luY2x1ZGUgIndsMTJ4eF84MDIxMS5oIgorI2luY2x1ZGUgImFjeC5oIgorI2luY2x1ZGUgImNtZC5oIgorI2luY2x1ZGUgInJlZy5oIgorCitzdGF0aWMgaW50IHdsMTI3MV9pbml0X2h3ZW5jX2NvbmZpZyhzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gd2wxMjcxX2FjeF9mZWF0dXJlX2NmZyh3bCk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX3dhcm5pbmcoImNvdWxkbid0IHNldCBmZWF0dXJlIGNvbmZpZyIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHdsMTI3MV9jbWRfc2V0X2RlZmF1bHRfd2VwX2tleSh3bCwgd2wtPmRlZmF1bHRfa2V5KTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNzFfd2FybmluZygiY291bGRuJ3Qgc2V0IGRlZmF1bHQga2V5Iik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCB3bDEyNzFfaW5pdF90ZW1wbGF0ZXNfY29uZmlnKHN0cnVjdCB3bDEyNzEgKndsKQoreworCWludCByZXQsIGk7CisKKwkvKiBzZW5kIGVtcHR5IHRlbXBsYXRlcyBmb3IgZncgbWVtb3J5IHJlc2VydmF0aW9uICovCisJcmV0ID0gd2wxMjcxX2NtZF90ZW1wbGF0ZV9zZXQod2wsIENNRF9URU1QTF9DRkdfUFJPQkVfUkVRXzJfNCwgTlVMTCwKKwkJCQkgICAgICBXTDEyNzFfQ01EX1RFTVBMX01BWF9TSVpFLAorCQkJCSAgICAgIDAsIFdMMTI3MV9SQVRFX0FVVE9NQVRJQyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSB3bDEyNzFfY21kX3RlbXBsYXRlX3NldCh3bCwgQ01EX1RFTVBMX0NGR19QUk9CRV9SRVFfNSwKKwkJCQkgICAgICBOVUxMLCBXTDEyNzFfQ01EX1RFTVBMX01BWF9TSVpFLCAwLAorCQkJCSAgICAgIFdMMTI3MV9SQVRFX0FVVE9NQVRJQyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSB3bDEyNzFfY21kX3RlbXBsYXRlX3NldCh3bCwgQ01EX1RFTVBMX05VTExfREFUQSwgTlVMTCwKKwkJCQkgICAgICBzaXplb2Yoc3RydWN0IHdsMTJ4eF9udWxsX2RhdGFfdGVtcGxhdGUpLAorCQkJCSAgICAgIDAsIFdMMTI3MV9SQVRFX0FVVE9NQVRJQyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSB3bDEyNzFfY21kX3RlbXBsYXRlX3NldCh3bCwgQ01EX1RFTVBMX1BTX1BPTEwsIE5VTEwsCisJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCB3bDEyeHhfcHNfcG9sbF90ZW1wbGF0ZSksCisJCQkJICAgICAgMCwgV0wxMjcxX1JBVEVfQVVUT01BVElDKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHdsMTI3MV9jbWRfdGVtcGxhdGVfc2V0KHdsLCBDTURfVEVNUExfUU9TX05VTExfREFUQSwgTlVMTCwKKwkJCQkgICAgICBzaXplb2YKKwkJCQkgICAgICAoc3RydWN0IHdsMTJ4eF9xb3NfbnVsbF9kYXRhX3RlbXBsYXRlKSwKKwkJCQkgICAgICAwLCBXTDEyNzFfUkFURV9BVVRPTUFUSUMpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gd2wxMjcxX2NtZF90ZW1wbGF0ZV9zZXQod2wsIENNRF9URU1QTF9QUk9CRV9SRVNQT05TRSwgTlVMTCwKKwkJCQkgICAgICBzaXplb2YKKwkJCQkgICAgICAoc3RydWN0IHdsMTJ4eF9wcm9iZV9yZXNwX3RlbXBsYXRlKSwKKwkJCQkgICAgICAwLCBXTDEyNzFfUkFURV9BVVRPTUFUSUMpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gd2wxMjcxX2NtZF90ZW1wbGF0ZV9zZXQod2wsIENNRF9URU1QTF9CRUFDT04sIE5VTEwsCisJCQkJICAgICAgc2l6ZW9mCisJCQkJICAgICAgKHN0cnVjdCB3bDEyeHhfYmVhY29uX3RlbXBsYXRlKSwKKwkJCQkgICAgICAwLCBXTDEyNzFfUkFURV9BVVRPTUFUSUMpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gd2wxMjcxX2NtZF90ZW1wbGF0ZV9zZXQod2wsIENNRF9URU1QTF9BUlBfUlNQLCBOVUxMLAorCQkJCSAgICAgIHNpemVvZgorCQkJCSAgICAgIChzdHJ1Y3Qgd2wxMnh4X2FycF9yc3BfdGVtcGxhdGUpLAorCQkJCSAgICAgIDAsIFdMMTI3MV9SQVRFX0FVVE9NQVRJQyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgQ01EX1RFTVBMX0tMVl9JRFhfTUFYOyBpKyspIHsKKwkJcmV0ID0gd2wxMjcxX2NtZF90ZW1wbGF0ZV9zZXQod2wsIENNRF9URU1QTF9LTFYsIE5VTEwsCisJCQkJCSAgICAgIFdMMTI3MV9DTURfVEVNUExfTUFYX1NJWkUsIGksCisJCQkJCSAgICAgIFdMMTI3MV9SQVRFX0FVVE9NQVRJQyk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bDEyNzFfaW5pdF9yeF9jb25maWcoc3RydWN0IHdsMTI3MSAqd2wsIHUzMiBjb25maWcsIHUzMiBmaWx0ZXIpCit7CisJaW50IHJldDsKKworCXJldCA9IHdsMTI3MV9hY3hfcnhfbXNkdV9saWZlX3RpbWUod2wpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gd2wxMjcxX2FjeF9yeF9jb25maWcod2wsIGNvbmZpZywgZmlsdGVyKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiAwOworfQorCitpbnQgd2wxMjcxX2luaXRfcGh5X2NvbmZpZyhzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gd2wxMjcxX2FjeF9wZF90aHJlc2hvbGQod2wpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gd2wxMjcxX2FjeF9zbG90KHdsLCBERUZBVUxUX1NMT1RfVElNRSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSB3bDEyNzFfYWN4X2dyb3VwX2FkZHJlc3NfdGJsKHdsLCB0cnVlLCBOVUxMLCAwKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHdsMTI3MV9hY3hfc2VydmljZV9wZXJpb2RfdGltZW91dCh3bCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSB3bDEyNzFfYWN4X3J0c190aHJlc2hvbGQod2wsIHdsLT5jb25mLnJ4LnJ0c190aHJlc2hvbGQpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjcxX2luaXRfYmVhY29uX2ZpbHRlcihzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlpbnQgcmV0OworCisJLyogZGlzYWJsZSBiZWFjb24gZmlsdGVyaW5nIGF0IHRoaXMgc3RhZ2UgKi8KKwlyZXQgPSB3bDEyNzFfYWN4X2JlYWNvbl9maWx0ZXJfb3B0KHdsLCBmYWxzZSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSB3bDEyNzFfYWN4X2JlYWNvbl9maWx0ZXJfdGFibGUod2wpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CisKK2ludCB3bDEyNzFfaW5pdF9wdGEoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJaW50IHJldDsKKworCXJldCA9IHdsMTI3MV9hY3hfc2dfY2ZnKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHdsMTI3MV9hY3hfc2dfZW5hYmxlKHdsLCB3bC0+c2dfZW5hYmxlZCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHdsMTI3MV9pbml0X2VuZXJneV9kZXRlY3Rpb24oc3RydWN0IHdsMTI3MSAqd2wpCit7CisJaW50IHJldDsKKworCXJldCA9IHdsMTI3MV9hY3hfY2NhX3RocmVzaG9sZCh3bCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bDEyNzFfaW5pdF9iZWFjb25fYnJvYWRjYXN0KHN0cnVjdCB3bDEyNzEgKndsKQoreworCWludCByZXQ7CisKKwlyZXQgPSB3bDEyNzFfYWN4X2Jjbl9kdGltX29wdGlvbnMod2wpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CisKK2ludCB3bDEyNzFfaHdfaW5pdChzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlzdHJ1Y3QgY29uZl90eF9hY19jYXRlZ29yeSAqY29uZl9hYzsKKwlzdHJ1Y3QgY29uZl90eF90aWQgKmNvbmZfdGlkOworCWludCByZXQsIGk7CisKKwlyZXQgPSB3bDEyNzFfY21kX2dlbmVyYWxfcGFybXMod2wpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gd2wxMjcxX2NtZF9yYWRpb19wYXJtcyh3bCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSB3bDEyNzFfY21kX2V4dF9yYWRpb19wYXJtcyh3bCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBUZW1wbGF0ZSBzZXR0aW5ncyAqLworCXJldCA9IHdsMTI3MV9pbml0X3RlbXBsYXRlc19jb25maWcod2wpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJLyogRGVmYXVsdCBtZW1vcnkgY29uZmlndXJhdGlvbiAqLworCXJldCA9IHdsMTI3MV9hY3hfaW5pdF9tZW1fY29uZmlnKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIFJYIGNvbmZpZyAqLworCXJldCA9IHdsMTI3MV9pbml0X3J4X2NvbmZpZyh3bCwKKwkJCQkgICAgUlhfQ0ZHX1BST01JU0NVT1VTIHwgUlhfQ0ZHX1RTRiwKKwkJCQkgICAgUlhfRklMVEVSX09QVElPTl9ERUYpOworCS8qIFJYX0NPTkZJR19PUFRJT05fQU5ZX0RTVF9BTllfQlNTLAorCSAgIFJYX0ZJTFRFUl9PUFRJT05fRklMVEVSX0FMTCk7ICovCisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0X2ZyZWVfbWVtbWFwOworCisJLyogUEhZIGxheWVyIGNvbmZpZyAqLworCXJldCA9IHdsMTI3MV9pbml0X3BoeV9jb25maWcod2wpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dF9mcmVlX21lbW1hcDsKKworCXJldCA9IHdsMTI3MV9hY3hfZGNvX2l0cmltX3BhcmFtcyh3bCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0X2ZyZWVfbWVtbWFwOworCisJLyogSW5pdGlhbGl6ZSBjb25uZWN0aW9uIG1vbml0b3JpbmcgdGhyZXNob2xkcyAqLworCXJldCA9IHdsMTI3MV9hY3hfY29ubl9tb25pdF9wYXJhbXMod2wsIGZhbHNlKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXRfZnJlZV9tZW1tYXA7CisKKwkvKiBCZWFjb24gZmlsdGVyaW5nICovCisJcmV0ID0gd2wxMjcxX2luaXRfYmVhY29uX2ZpbHRlcih3bCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0X2ZyZWVfbWVtbWFwOworCisJLyogQ29uZmlndXJlIFRYIHBhdGNoIGNvbXBsZXRlIGludGVycnVwdCBiZWhhdmlvciAqLworCXJldCA9IHdsMTI3MV9hY3hfdHhfY29uZmlnX29wdGlvbnMod2wpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dF9mcmVlX21lbW1hcDsKKworCS8qIFJYIGNvbXBsZXRlIGludGVycnVwdCBwYWNpbmcgKi8KKwlyZXQgPSB3bDEyNzFfYWN4X2luaXRfcnhfaW50ZXJydXB0KHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXRfZnJlZV9tZW1tYXA7CisKKwkvKiBCbHVldG9vdGggV0xBTiBjb2V4aXN0ZW5jZSAqLworCXJldCA9IHdsMTI3MV9pbml0X3B0YSh3bCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0X2ZyZWVfbWVtbWFwOworCisJLyogRW5lcmd5IGRldGVjdGlvbiAqLworCXJldCA9IHdsMTI3MV9pbml0X2VuZXJneV9kZXRlY3Rpb24od2wpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dF9mcmVlX21lbW1hcDsKKworCS8qIEJlYWNvbnMgYW5kIGJvcmFkY2FzdCBzZXR0aW5ncyAqLworCXJldCA9IHdsMTI3MV9pbml0X2JlYWNvbl9icm9hZGNhc3Qod2wpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dF9mcmVlX21lbW1hcDsKKworCS8qIERlZmF1bHQgZnJhZ21lbnRhdGlvbiB0aHJlc2hvbGQgKi8KKwlyZXQgPSB3bDEyNzFfYWN4X2ZyYWdfdGhyZXNob2xkKHdsLCB3bC0+Y29uZi50eC5mcmFnX3RocmVzaG9sZCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0X2ZyZWVfbWVtbWFwOworCisJLyogRGVmYXVsdCBUSUQvQUMgY29uZmlndXJhdGlvbiAqLworCUJVR19PTih3bC0+Y29uZi50eC50aWRfY29uZl9jb3VudCAhPSB3bC0+Y29uZi50eC5hY19jb25mX2NvdW50KTsKKwlmb3IgKGkgPSAwOyBpIDwgd2wtPmNvbmYudHgudGlkX2NvbmZfY291bnQ7IGkrKykgeworCQljb25mX2FjID0gJndsLT5jb25mLnR4LmFjX2NvbmZbaV07CisJCXJldCA9IHdsMTI3MV9hY3hfYWNfY2ZnKHdsLCBjb25mX2FjLT5hYywgY29uZl9hYy0+Y3dfbWluLAorCQkJCQljb25mX2FjLT5jd19tYXgsIGNvbmZfYWMtPmFpZnNuLAorCQkJCQljb25mX2FjLT50eF9vcF9saW1pdCk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdXRfZnJlZV9tZW1tYXA7CisKKwkJY29uZl90aWQgPSAmd2wtPmNvbmYudHgudGlkX2NvbmZbaV07CisJCXJldCA9IHdsMTI3MV9hY3hfdGlkX2NmZyh3bCwgY29uZl90aWQtPnF1ZXVlX2lkLAorCQkJCQkgY29uZl90aWQtPmNoYW5uZWxfdHlwZSwKKwkJCQkJIGNvbmZfdGlkLT50c2lkLAorCQkJCQkgY29uZl90aWQtPnBzX3NjaGVtZSwKKwkJCQkJIGNvbmZfdGlkLT5hY2tfcG9saWN5LAorCQkJCQkgY29uZl90aWQtPmFwc2RfY29uZlswXSwKKwkJCQkJIGNvbmZfdGlkLT5hcHNkX2NvbmZbMV0pOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gb3V0X2ZyZWVfbWVtbWFwOworCX0KKworCS8qIENvbmZpZ3VyZSBUWCByYXRlIGNsYXNzZXMgKi8KKwlyZXQgPSB3bDEyNzFfYWN4X3JhdGVfcG9saWNpZXMod2wpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dF9mcmVlX21lbW1hcDsKKworCS8qIEVuYWJsZSBkYXRhIHBhdGggKi8KKwlyZXQgPSB3bDEyNzFfY21kX2RhdGFfcGF0aCh3bCwgMSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0X2ZyZWVfbWVtbWFwOworCisJLyogQ29uZmlndXJlIGZvciBFTFAgcG93ZXIgc2F2aW5nICovCisJcmV0ID0gd2wxMjcxX2FjeF9zbGVlcF9hdXRoKHdsLCBXTDEyNzFfUFNNX0VMUCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0X2ZyZWVfbWVtbWFwOworCisJLyogQ29uZmlndXJlIEhXIGVuY3J5cHRpb24gKi8KKwlyZXQgPSB3bDEyNzFfaW5pdF9od2VuY19jb25maWcod2wpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dF9mcmVlX21lbW1hcDsKKworCS8qIGNvbmZpZ3VyZSBQTSAqLworCXJldCA9IHdsMTI3MV9hY3hfcG1fY29uZmlnKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXRfZnJlZV9tZW1tYXA7CisKKwkvKiBkaXNhYmxlIGFsbCBrZWVwLWFsaXZlIHRlbXBsYXRlcyAqLworCWZvciAoaSA9IDA7IGkgPCBDTURfVEVNUExfS0xWX0lEWF9NQVg7IGkrKykgeworCQlyZXQgPSB3bDEyNzFfYWN4X2tlZXBfYWxpdmVfY29uZmlnKHdsLCBpLAorCQkJCQkJICAgQUNYX0tFRVBfQUxJVkVfVFBMX0lOVkFMSUQpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gb3V0X2ZyZWVfbWVtbWFwOworCX0KKworCS8qIGRpc2FibGUgdGhlIGtlZXAtYWxpdmUgZmVhdHVyZSAqLworCXJldCA9IHdsMTI3MV9hY3hfa2VlcF9hbGl2ZV9tb2RlKHdsLCBmYWxzZSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0X2ZyZWVfbWVtbWFwOworCisJLyogQ29uZmlndXJlIHJzc2kvc25yIGF2ZXJhZ2luZyB3ZWlnaHRzICovCisJcmV0ID0gd2wxMjcxX2FjeF9yc3NpX3Nucl9hdmdfd2VpZ2h0cyh3bCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0X2ZyZWVfbWVtbWFwOworCisJcmV0dXJuIDA7CisKKyBvdXRfZnJlZV9tZW1tYXA6CisJa2ZyZWUod2wtPnRhcmdldF9tZW1fbWFwKTsKKwl3bC0+dGFyZ2V0X21lbV9tYXAgPSBOVUxMOworCisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9pbml0LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvaW5pdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3NjI0MjEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvaW5pdC5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3bDEyNzEKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBDb250YWN0OiBMdWNpYW5vIENvZWxobyA8bHVjaWFuby5jb2VsaG9Abm9raWEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBfX0lOSVRfSF9fCisjZGVmaW5lIF9fSU5JVF9IX18KKworI2luY2x1ZGUgIndsMTJ4eC5oIgorCitpbnQgd2wxMjcxX2h3X2luaXRfcG93ZXJfYXV0aChzdHJ1Y3Qgd2wxMjcxICp3bCk7CitpbnQgd2wxMjcxX2luaXRfdGVtcGxhdGVzX2NvbmZpZyhzdHJ1Y3Qgd2wxMjcxICp3bCk7CitpbnQgd2wxMjcxX2luaXRfcGh5X2NvbmZpZyhzdHJ1Y3Qgd2wxMjcxICp3bCk7CitpbnQgd2wxMjcxX2luaXRfcHRhKHN0cnVjdCB3bDEyNzEgKndsKTsKK2ludCB3bDEyNzFfaW5pdF9lbmVyZ3lfZGV0ZWN0aW9uKHN0cnVjdCB3bDEyNzEgKndsKTsKK2ludCB3bDEyNzFfaHdfaW5pdChzdHJ1Y3Qgd2wxMjcxICp3bCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2lvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTU3ZjczCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2lvLmMKQEAgLTAsMCArMSwxNzEgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3bDEyNzEKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIENvbnRhY3Q6IEx1Y2lhbm8gQ29lbGhvIDxsdWNpYW5vLmNvZWxob0Bub2tpYS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvY3JjNy5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKworI2luY2x1ZGUgIndsMTJ4eC5oIgorI2luY2x1ZGUgIndsMTJ4eF84MDIxMS5oIgorI2luY2x1ZGUgImlvLmgiCisKKyNkZWZpbmUgT0NQX0NNRF9MT09QICAzMgorCisjZGVmaW5lIE9DUF9DTURfV1JJVEUgMHgxCisjZGVmaW5lIE9DUF9DTURfUkVBRCAgMHgyCisKKyNkZWZpbmUgT0NQX1JFQURZX01BU0sgIEJJVCgxOCkKKyNkZWZpbmUgT0NQX1NUQVRVU19NQVNLIChCSVQoMTYpIHwgQklUKDE3KSkKKworI2RlZmluZSBPQ1BfU1RBVFVTX05PX1JFU1AgICAgMHgwMDAwMAorI2RlZmluZSBPQ1BfU1RBVFVTX09LICAgICAgICAgMHgxMDAwMAorI2RlZmluZSBPQ1BfU1RBVFVTX1JFUV9GQUlMRUQgMHgyMDAwMAorI2RlZmluZSBPQ1BfU1RBVFVTX1JFU1BfRVJST1IgMHgzMDAwMAorCit2b2lkIHdsMTI3MV9kaXNhYmxlX2ludGVycnVwdHMoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJd2wtPmlmX29wcy0+ZGlzYWJsZV9pcnEod2wpOworfQorCit2b2lkIHdsMTI3MV9lbmFibGVfaW50ZXJydXB0cyhzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwl3bC0+aWZfb3BzLT5lbmFibGVfaXJxKHdsKTsKK30KKworLyogU2V0IHRoZSBTUEkgcGFydGl0aW9ucyB0byBhY2Nlc3MgdGhlIGNoaXAgYWRkcmVzc2VzCisgKgorICogVG8gc2ltcGxpZnkgZHJpdmVyIGNvZGUsIGEgZml4ZWQgKHZpcnR1YWwpIG1lbW9yeSBtYXAgaXMgZGVmaW5lZCBmb3IKKyAqIHJlZ2lzdGVyIGFuZCBtZW1vcnkgYWRkcmVzc2VzLiBCZWNhdXNlIGluIHRoZSBjaGlwc2V0LCBpbiBkaWZmZXJlbnQgc3RhZ2VzCisgKiBvZiBvcGVyYXRpb24sIHRob3NlIGFkZHJlc3NlcyB3aWxsIG1vdmUgYXJvdW5kLCBhbiBhZGRyZXNzIHRyYW5zbGF0aW9uCisgKiBtZWNoYW5pc20gaXMgcmVxdWlyZWQuCisgKgorICogVGhlcmUgYXJlIGZvdXIgcGFydGl0aW9ucyAodGhyZWUgbWVtb3J5IGFuZCBvbmUgcmVnaXN0ZXIgcGFydGl0aW9uKSwKKyAqIHdoaWNoIGFyZSBtYXBwZWQgdG8gdHdvIGRpZmZlcmVudCBhcmVhcyBvZiB0aGUgaGFyZHdhcmUgbWVtb3J5LgorICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsIGFkZHJlc3MKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYWNlCisgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKy0tLS0rLS0+IG1lbS5zdGFydAorICogICAgICAgICAgUGh5c2ljYWwgYWRkcmVzcyAgICAuLi4gICB8ICAgIHwKKyAqICAgICAgICAgICAgICAgc3BhY2UgICAgICAgLi4uICAgICAgfCAgICB8IFtQQVJUXzBdCisgKiAgICAgICAgICAgICAgICAgICAgICAgIC4uLiAgICAgICAgIHwgICAgfAorICogIDAwMDAwMDAwICA8LS0rLS0tLSsuLi4gICAgICAgICAuLi4rLS0tLSstLT4gbWVtLnN0YXJ0ICsgbWVtLnNpemUKKyAqICAgICAgICAgICAgICAgfCAgICB8ICAgICAgICAgLi4uICAgfCAgICB8CisgKiAgICAgICAgICAgICAgIHxNRU0gfCAgICAgIC4uLiAgICAgIHwgICAgfAorICogICAgICAgICAgICAgICB8ICAgIHwgICAuLi4gICAgICAgICB8ICAgIHwKKyAqICBtZW0uc2l6ZSAgPC0tKy0tLS0rLi4uICAgICAgICAgICAgfCAgICB8IHt1bnVzZWQgYXJlYSkKKyAqICAgICAgICAgICAgICAgfCAgICB8ICAgLi4uICAgICAgICAgfCAgICB8CisgKiAgICAgICAgICAgICAgIHxSRUcgfCAgICAgIC4uLiAgICAgIHwgICAgfAorICogIG1lbS5zaXplICAgICB8ICAgIHwgICAgICAgICAuLi4gICB8ICAgIHwKKyAqICAgICAgKyAgICAgPC0tKy0tLS0rLi4uICAgICAgICAgLi4uKy0tLS0rLS0+IHJlZy5zdGFydAorICogIHJlZy5zaXplICAgICB8ICAgIHwgICAuLi4gICAgICAgICB8ICAgIHwKKyAqICAgICAgICAgICAgICAgfE1FTTJ8ICAgICAgLi4uICAgICAgfCAgICB8IFtQQVJUXzFdCisgKiAgICAgICAgICAgICAgIHwgICAgfCAgICAgICAgIC4uLiAgIHwgICAgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4rLS0tLSstLT4gcmVnLnN0YXJ0ICsgcmVnLnNpemUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICB8CisgKgorICovCitpbnQgd2wxMjcxX3NldF9wYXJ0aXRpb24oc3RydWN0IHdsMTI3MSAqd2wsCisJCQkgc3RydWN0IHdsMTI3MV9wYXJ0aXRpb25fc2V0ICpwKQoreworCS8qIGNvcHkgcGFydGl0aW9uIGluZm8gKi8KKwltZW1jcHkoJndsLT5wYXJ0LCBwLCBzaXplb2YoKnApKTsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19TUEksICJtZW1fc3RhcnQgJTA4WCBtZW1fc2l6ZSAlMDhYIiwKKwkJICAgICBwLT5tZW0uc3RhcnQsIHAtPm1lbS5zaXplKTsKKwl3bDEyNzFfZGVidWcoREVCVUdfU1BJLCAicmVnX3N0YXJ0ICUwOFggcmVnX3NpemUgJTA4WCIsCisJCSAgICAgcC0+cmVnLnN0YXJ0LCBwLT5yZWcuc2l6ZSk7CisJd2wxMjcxX2RlYnVnKERFQlVHX1NQSSwgIm1lbTJfc3RhcnQgJTA4WCBtZW0yX3NpemUgJTA4WCIsCisJCSAgICAgcC0+bWVtMi5zdGFydCwgcC0+bWVtMi5zaXplKTsKKwl3bDEyNzFfZGVidWcoREVCVUdfU1BJLCAibWVtM19zdGFydCAlMDhYIG1lbTNfc2l6ZSAlMDhYIiwKKwkJICAgICBwLT5tZW0zLnN0YXJ0LCBwLT5tZW0zLnNpemUpOworCisJLyogd3JpdGUgcGFydGl0aW9uIGluZm8gdG8gdGhlIGNoaXBzZXQgKi8KKwl3bDEyNzFfcmF3X3dyaXRlMzIod2wsIEhXX1BBUlQwX1NUQVJUX0FERFIsIHAtPm1lbS5zdGFydCk7CisJd2wxMjcxX3Jhd193cml0ZTMyKHdsLCBIV19QQVJUMF9TSVpFX0FERFIsIHAtPm1lbS5zaXplKTsKKwl3bDEyNzFfcmF3X3dyaXRlMzIod2wsIEhXX1BBUlQxX1NUQVJUX0FERFIsIHAtPnJlZy5zdGFydCk7CisJd2wxMjcxX3Jhd193cml0ZTMyKHdsLCBIV19QQVJUMV9TSVpFX0FERFIsIHAtPnJlZy5zaXplKTsKKwl3bDEyNzFfcmF3X3dyaXRlMzIod2wsIEhXX1BBUlQyX1NUQVJUX0FERFIsIHAtPm1lbTIuc3RhcnQpOworCXdsMTI3MV9yYXdfd3JpdGUzMih3bCwgSFdfUEFSVDJfU0laRV9BRERSLCBwLT5tZW0yLnNpemUpOworCXdsMTI3MV9yYXdfd3JpdGUzMih3bCwgSFdfUEFSVDNfU1RBUlRfQUREUiwgcC0+bWVtMy5zdGFydCk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHdsMTI3MV9zZXRfcGFydGl0aW9uKTsKKwordm9pZCB3bDEyNzFfaW9fcmVzZXQoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJd2wtPmlmX29wcy0+cmVzZXQod2wpOworfQorCit2b2lkIHdsMTI3MV9pb19pbml0KHN0cnVjdCB3bDEyNzEgKndsKQoreworCXdsLT5pZl9vcHMtPmluaXQod2wpOworfQorCit2b2lkIHdsMTI3MV90b3BfcmVnX3dyaXRlKHN0cnVjdCB3bDEyNzEgKndsLCBpbnQgYWRkciwgdTE2IHZhbCkKK3sKKwkvKiB3cml0ZSBhZGRyZXNzID4+IDEgKyAweDMwMDAwIHRvIE9DUF9QT1JfQ1RSICovCisJYWRkciA9IChhZGRyID4+IDEpICsgMHgzMDAwMDsKKwl3bDEyNzFfd3JpdGUzMih3bCwgT0NQX1BPUl9DVFIsIGFkZHIpOworCisJLyogd3JpdGUgdmFsdWUgdG8gT0NQX1BPUl9XREFUQSAqLworCXdsMTI3MV93cml0ZTMyKHdsLCBPQ1BfREFUQV9XUklURSwgdmFsKTsKKworCS8qIHdyaXRlIDEgdG8gT0NQX0NNRCAqLworCXdsMTI3MV93cml0ZTMyKHdsLCBPQ1BfQ01ELCBPQ1BfQ01EX1dSSVRFKTsKK30KKwordTE2IHdsMTI3MV90b3BfcmVnX3JlYWQoc3RydWN0IHdsMTI3MSAqd2wsIGludCBhZGRyKQoreworCXUzMiB2YWw7CisJaW50IHRpbWVvdXQgPSBPQ1BfQ01EX0xPT1A7CisKKwkvKiB3cml0ZSBhZGRyZXNzID4+IDEgKyAweDMwMDAwIHRvIE9DUF9QT1JfQ1RSICovCisJYWRkciA9IChhZGRyID4+IDEpICsgMHgzMDAwMDsKKwl3bDEyNzFfd3JpdGUzMih3bCwgT0NQX1BPUl9DVFIsIGFkZHIpOworCisJLyogd3JpdGUgMiB0byBPQ1BfQ01EICovCisJd2wxMjcxX3dyaXRlMzIod2wsIE9DUF9DTUQsIE9DUF9DTURfUkVBRCk7CisKKwkvKiBwb2xsIGZvciBkYXRhIHJlYWR5ICovCisJZG8geworCQl2YWwgPSB3bDEyNzFfcmVhZDMyKHdsLCBPQ1BfREFUQV9SRUFEKTsKKwl9IHdoaWxlICghKHZhbCAmIE9DUF9SRUFEWV9NQVNLKSAmJiAtLXRpbWVvdXQpOworCisJaWYgKCF0aW1lb3V0KSB7CisJCXdsMTI3MV93YXJuaW5nKCJUb3AgcmVnaXN0ZXIgYWNjZXNzIHRpbWVkIG91dC4iKTsKKwkJcmV0dXJuIDB4ZmZmZjsKKwl9CisKKwkvKiBjaGVjayBkYXRhIHN0YXR1cyBhbmQgcmV0dXJuIGlmIE9LICovCisJaWYgKCh2YWwgJiBPQ1BfU1RBVFVTX01BU0spID09IE9DUF9TVEFUVVNfT0spCisJCXJldHVybiB2YWwgJiAweGZmZmY7CisJZWxzZSB7CisJCXdsMTI3MV93YXJuaW5nKCJUb3AgcmVnaXN0ZXIgYWNjZXNzIHJldHVybmVkIGVycm9yLiIpOworCQlyZXR1cm4gMHhmZmZmOworCX0KK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2lvLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDRiMzJiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2lvLmgKQEAgLTAsMCArMSwxNzIgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3bDEyNzEKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwOSBUZXhhcyBJbnN0cnVtZW50cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDEwIE5va2lhIENvcnBvcmF0aW9uCisgKgorICogQ29udGFjdDogTHVjaWFubyBDb2VsaG8gPGx1Y2lhbm8uY29lbGhvQG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBCisgKgorICovCisKKyNpZm5kZWYgX19JT19IX18KKyNkZWZpbmUgX19JT19IX18KKworI2luY2x1ZGUgInJlZy5oIgorCisjZGVmaW5lIEhXX0FDQ0VTU19NRU1PUllfTUFYX1JBTkdFCTB4MUZGQzAKKworI2RlZmluZSBIV19QQVJUSVRJT05fUkVHSVNURVJTX0FERFIgICAgIDB4MUZGQzAKKyNkZWZpbmUgSFdfUEFSVDBfU0laRV9BRERSICAgICAgICAgICAgICAoSFdfUEFSVElUSU9OX1JFR0lTVEVSU19BRERSKQorI2RlZmluZSBIV19QQVJUMF9TVEFSVF9BRERSICAgICAgICAgICAgIChIV19QQVJUSVRJT05fUkVHSVNURVJTX0FERFIgKyA0KQorI2RlZmluZSBIV19QQVJUMV9TSVpFX0FERFIgICAgICAgICAgICAgIChIV19QQVJUSVRJT05fUkVHSVNURVJTX0FERFIgKyA4KQorI2RlZmluZSBIV19QQVJUMV9TVEFSVF9BRERSICAgICAgICAgICAgIChIV19QQVJUSVRJT05fUkVHSVNURVJTX0FERFIgKyAxMikKKyNkZWZpbmUgSFdfUEFSVDJfU0laRV9BRERSICAgICAgICAgICAgICAoSFdfUEFSVElUSU9OX1JFR0lTVEVSU19BRERSICsgMTYpCisjZGVmaW5lIEhXX1BBUlQyX1NUQVJUX0FERFIgICAgICAgICAgICAgKEhXX1BBUlRJVElPTl9SRUdJU1RFUlNfQUREUiArIDIwKQorI2RlZmluZSBIV19QQVJUM19TVEFSVF9BRERSICAgICAgICAgICAgIChIV19QQVJUSVRJT05fUkVHSVNURVJTX0FERFIgKyAyNCkKKworI2RlZmluZSBIV19BQ0NFU1NfUkVHSVNURVJfU0laRSAgICAgICAgIDQKKworI2RlZmluZSBIV19BQ0NFU1NfUFJBTV9NQVhfUkFOR0UJMHgzYzAwMAorCitzdHJ1Y3Qgd2wxMjcxOworCit2b2lkIHdsMTI3MV9kaXNhYmxlX2ludGVycnVwdHMoc3RydWN0IHdsMTI3MSAqd2wpOwordm9pZCB3bDEyNzFfZW5hYmxlX2ludGVycnVwdHMoc3RydWN0IHdsMTI3MSAqd2wpOworCit2b2lkIHdsMTI3MV9pb19yZXNldChzdHJ1Y3Qgd2wxMjcxICp3bCk7Cit2b2lkIHdsMTI3MV9pb19pbml0KHN0cnVjdCB3bDEyNzEgKndsKTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZGV2aWNlICp3bDEyNzFfd2xfdG9fZGV2KHN0cnVjdCB3bDEyNzEgKndsKQoreworCXJldHVybiB3bC0+aWZfb3BzLT5kZXYod2wpOworfQorCisKKy8qIFJhdyB0YXJnZXQgSU8sIGFkZHJlc3MgaXMgbm90IHRyYW5zbGF0ZWQgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB3bDEyNzFfcmF3X3dyaXRlKHN0cnVjdCB3bDEyNzEgKndsLCBpbnQgYWRkciwgdm9pZCAqYnVmLAorCQkJCSAgICBzaXplX3QgbGVuLCBib29sIGZpeGVkKQoreworCXdsLT5pZl9vcHMtPndyaXRlKHdsLCBhZGRyLCBidWYsIGxlbiwgZml4ZWQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgd2wxMjcxX3Jhd19yZWFkKHN0cnVjdCB3bDEyNzEgKndsLCBpbnQgYWRkciwgdm9pZCAqYnVmLAorCQkJCSAgIHNpemVfdCBsZW4sIGJvb2wgZml4ZWQpCit7CisJd2wtPmlmX29wcy0+cmVhZCh3bCwgYWRkciwgYnVmLCBsZW4sIGZpeGVkKTsKK30KKworc3RhdGljIGlubGluZSB1MzIgd2wxMjcxX3Jhd19yZWFkMzIoc3RydWN0IHdsMTI3MSAqd2wsIGludCBhZGRyKQoreworCXdsMTI3MV9yYXdfcmVhZCh3bCwgYWRkciwgJndsLT5idWZmZXJfMzIsCisJCQkgICAgc2l6ZW9mKHdsLT5idWZmZXJfMzIpLCBmYWxzZSk7CisKKwlyZXR1cm4gbGUzMl90b19jcHUod2wtPmJ1ZmZlcl8zMik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB3bDEyNzFfcmF3X3dyaXRlMzIoc3RydWN0IHdsMTI3MSAqd2wsIGludCBhZGRyLCB1MzIgdmFsKQoreworCXdsLT5idWZmZXJfMzIgPSBjcHVfdG9fbGUzMih2YWwpOworCXdsMTI3MV9yYXdfd3JpdGUod2wsIGFkZHIsICZ3bC0+YnVmZmVyXzMyLAorCQkJICAgICBzaXplb2Yod2wtPmJ1ZmZlcl8zMiksIGZhbHNlKTsKK30KKworLyogVHJhbnNsYXRlZCB0YXJnZXQgSU8gKi8KK3N0YXRpYyBpbmxpbmUgaW50IHdsMTI3MV90cmFuc2xhdGVfYWRkcihzdHJ1Y3Qgd2wxMjcxICp3bCwgaW50IGFkZHIpCit7CisJLyoKKwkgKiBUbyB0cmFuc2xhdGUsIGZpcnN0IGNoZWNrIHRvIHdoaWNoIHdpbmRvdyBvZiBhZGRyZXNzZXMgdGhlCisJICogcGFydGljdWxhciBhZGRyZXNzIGJlbG9uZ3MuIFRoZW4gc3VidHJhY3QgdGhlIHN0YXJ0aW5nIGFkZHJlc3MKKwkgKiBvZiB0aGF0IHdpbmRvdyBmcm9tIHRoZSBhZGRyZXNzLiBUaGVuLCBhZGQgb2Zmc2V0IG9mIHRoZQorCSAqIHRyYW5zbGF0ZWQgcmVnaW9uLgorCSAqCisJICogVGhlIHRyYW5zbGF0ZWQgcmVnaW9ucyBvY2N1ciBuZXh0IHRvIGVhY2ggb3RoZXIgaW4gcGh5c2ljYWwgZGV2aWNlCisJICogbWVtb3J5LCBzbyBqdXN0IGFkZCB0aGUgc2l6ZXMgb2YgdGhlIHByZWNlZWRpbmcgYWRkcmVzcyByZWdpb25zIHRvCisJICogZ2V0IHRoZSBvZmZzZXQgdG8gdGhlIG5ldyByZWdpb24uCisJICoKKwkgKiBDdXJyZW50bHksIG9ubHkgdGhlIHR3byBmaXJzdCByZWdpb25zIGFyZSBhZGRyZXNzZWQsIGFuZCB0aGUKKwkgKiBhc3N1bXB0aW9uIGlzIHRoYXQgYWxsIGFkZHJlc3NlcyB3aWxsIGZhbGwgaW50byBlaXRoZXIgb2YgdGhvc2UKKwkgKiB0d28uCisJICovCisJaWYgKChhZGRyID49IHdsLT5wYXJ0LnJlZy5zdGFydCkgJiYKKwkgICAgKGFkZHIgPCB3bC0+cGFydC5yZWcuc3RhcnQgKyB3bC0+cGFydC5yZWcuc2l6ZSkpCisJCXJldHVybiBhZGRyIC0gd2wtPnBhcnQucmVnLnN0YXJ0ICsgd2wtPnBhcnQubWVtLnNpemU7CisJZWxzZQorCQlyZXR1cm4gYWRkciAtIHdsLT5wYXJ0Lm1lbS5zdGFydDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHdsMTI3MV9yZWFkKHN0cnVjdCB3bDEyNzEgKndsLCBpbnQgYWRkciwgdm9pZCAqYnVmLAorCQkJICAgICAgIHNpemVfdCBsZW4sIGJvb2wgZml4ZWQpCit7CisJaW50IHBoeXNpY2FsOworCisJcGh5c2ljYWwgPSB3bDEyNzFfdHJhbnNsYXRlX2FkZHIod2wsIGFkZHIpOworCisJd2wxMjcxX3Jhd19yZWFkKHdsLCBwaHlzaWNhbCwgYnVmLCBsZW4sIGZpeGVkKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHdsMTI3MV93cml0ZShzdHJ1Y3Qgd2wxMjcxICp3bCwgaW50IGFkZHIsIHZvaWQgKmJ1ZiwKKwkJCQlzaXplX3QgbGVuLCBib29sIGZpeGVkKQoreworCWludCBwaHlzaWNhbDsKKworCXBoeXNpY2FsID0gd2wxMjcxX3RyYW5zbGF0ZV9hZGRyKHdsLCBhZGRyKTsKKworCXdsMTI3MV9yYXdfd3JpdGUod2wsIHBoeXNpY2FsLCBidWYsIGxlbiwgZml4ZWQpOworfQorCitzdGF0aWMgaW5saW5lIHUzMiB3bDEyNzFfcmVhZDMyKHN0cnVjdCB3bDEyNzEgKndsLCBpbnQgYWRkcikKK3sKKwlyZXR1cm4gd2wxMjcxX3Jhd19yZWFkMzIod2wsIHdsMTI3MV90cmFuc2xhdGVfYWRkcih3bCwgYWRkcikpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgd2wxMjcxX3dyaXRlMzIoc3RydWN0IHdsMTI3MSAqd2wsIGludCBhZGRyLCB1MzIgdmFsKQoreworCXdsMTI3MV9yYXdfd3JpdGUzMih3bCwgd2wxMjcxX3RyYW5zbGF0ZV9hZGRyKHdsLCBhZGRyKSwgdmFsKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHdsMTI3MV9wb3dlcl9vZmYoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJd2wtPmlmX29wcy0+cG93ZXIod2wsIGZhbHNlKTsKKwljbGVhcl9iaXQoV0wxMjcxX0ZMQUdfR1BJT19QT1dFUiwgJndsLT5mbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHdsMTI3MV9wb3dlcl9vbihzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlpbnQgcmV0ID0gd2wtPmlmX29wcy0+cG93ZXIod2wsIHRydWUpOworCWlmIChyZXQgPT0gMCkKKwkJc2V0X2JpdChXTDEyNzFfRkxBR19HUElPX1BPV0VSLCAmd2wtPmZsYWdzKTsKKworCXJldHVybiByZXQ7Cit9CisKKworLyogVG9wIFJlZ2lzdGVyIElPICovCit2b2lkIHdsMTI3MV90b3BfcmVnX3dyaXRlKHN0cnVjdCB3bDEyNzEgKndsLCBpbnQgYWRkciwgdTE2IHZhbCk7Cit1MTYgd2wxMjcxX3RvcF9yZWdfcmVhZChzdHJ1Y3Qgd2wxMjcxICp3bCwgaW50IGFkZHIpOworCitpbnQgd2wxMjcxX3NldF9wYXJ0aXRpb24oc3RydWN0IHdsMTI3MSAqd2wsCisJCQkgc3RydWN0IHdsMTI3MV9wYXJ0aXRpb25fc2V0ICpwKTsKKworLyogRnVuY3Rpb25zIGZyb20gd2wxMjcxX21haW4uYyAqLworCitpbnQgd2wxMjcxX3JlZ2lzdGVyX2h3KHN0cnVjdCB3bDEyNzEgKndsKTsKK3ZvaWQgd2wxMjcxX3VucmVnaXN0ZXJfaHcoc3RydWN0IHdsMTI3MSAqd2wpOworaW50IHdsMTI3MV9pbml0X2llZWU4MDIxMShzdHJ1Y3Qgd2wxMjcxICp3bCk7CitzdHJ1Y3QgaWVlZTgwMjExX2h3ICp3bDEyNzFfYWxsb2NfaHcodm9pZCk7CitpbnQgd2wxMjcxX2ZyZWVfaHcoc3RydWN0IHdsMTI3MSAqd2wpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2MjI0N2UKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvbWFpbi5jCkBAIC0wLDAgKzEsMjg0NyBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdsMTI3MQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDEwIE5va2lhIENvcnBvcmF0aW9uCisgKgorICogQ29udGFjdDogTHVjaWFubyBDb2VsaG8gPGx1Y2lhbm8uY29lbGhvQG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorCisjaW5jbHVkZSAid2wxMnh4LmgiCisjaW5jbHVkZSAid2wxMnh4XzgwMjExLmgiCisjaW5jbHVkZSAicmVnLmgiCisjaW5jbHVkZSAiaW8uaCIKKyNpbmNsdWRlICJldmVudC5oIgorI2luY2x1ZGUgInR4LmgiCisjaW5jbHVkZSAicnguaCIKKyNpbmNsdWRlICJwcy5oIgorI2luY2x1ZGUgImluaXQuaCIKKyNpbmNsdWRlICJkZWJ1Z2ZzLmgiCisjaW5jbHVkZSAiY21kLmgiCisjaW5jbHVkZSAiYm9vdC5oIgorI2luY2x1ZGUgInRlc3Rtb2RlLmgiCisjaW5jbHVkZSAic2Nhbi5oIgorCisjZGVmaW5lIFdMMTI3MV9CT09UX1JFVFJJRVMgMworCitzdGF0aWMgc3RydWN0IGNvbmZfZHJ2X3NldHRpbmdzIGRlZmF1bHRfY29uZiA9IHsKKwkuc2cgPSB7CisJCS5wYXJhbXMgPSB7CisJCQlbQ09ORl9TR19CVF9QRVJfVEhSRVNIT0xEXSAgICAgICAgICAgICAgICAgID0gNzUwMCwKKwkJCVtDT05GX1NHX0hWM19NQVhfT1ZFUlJJREVdICAgICAgICAgICAgICAgICAgPSAwLAorCQkJW0NPTkZfU0dfQlRfTkZTX1NBTVBMRV9JTlRFUlZBTF0gICAgICAgICAgICA9IDQwMCwKKwkJCVtDT05GX1NHX0JUX0xPQURfUkFUSU9dICAgICAgICAgICAgICAgICAgICAgPSA1MCwKKwkJCVtDT05GX1NHX0FVVE9fUFNfTU9ERV0gICAgICAgICAgICAgICAgICAgICAgPSAxLAorCQkJW0NPTkZfU0dfQVVUT19TQ0FOX1BST0JFX1JFUV0gICAgICAgICAgICAgICA9IDE3MCwKKwkJCVtDT05GX1NHX0FDVElWRV9TQ0FOX0RVUkFUSU9OX0ZBQ1RPUl9IVjNdICAgPSA1MCwKKwkJCVtDT05GX1NHX0FOVEVOTkFfQ09ORklHVVJBVElPTl0gICAgICAgICAgICAgPSAwLAorCQkJW0NPTkZfU0dfQkVBQ09OX01JU1NfUEVSQ0VOVF0gICAgICAgICAgICAgICA9IDYwLAorCQkJW0NPTkZfU0dfUkFURV9BREFQVF9USFJFU0hdICAgICAgICAgICAgICAgICA9IDEyLAorCQkJW0NPTkZfU0dfUkFURV9BREFQVF9TTlJdICAgICAgICAgICAgICAgICAgICA9IDAsCisJCQlbQ09ORl9TR19XTEFOX1BTX0JUX0FDTF9NQVNURVJfTUlOX0JSXSAgICAgID0gMTAsCisJCQlbQ09ORl9TR19XTEFOX1BTX0JUX0FDTF9NQVNURVJfTUFYX0JSXSAgICAgID0gMzAsCisJCQlbQ09ORl9TR19XTEFOX1BTX01BWF9CVF9BQ0xfTUFTVEVSX0JSXSAgICAgID0gOCwKKwkJCVtDT05GX1NHX1dMQU5fUFNfQlRfQUNMX1NMQVZFX01JTl9CUl0gICAgICAgPSAyMCwKKwkJCVtDT05GX1NHX1dMQU5fUFNfQlRfQUNMX1NMQVZFX01BWF9CUl0gICAgICAgPSA1MCwKKwkJCS8qIE5vdGU6IHdpdGggVVBTRCwgdGhpcyBzaG91bGQgYmUgNCAqLworCQkJW0NPTkZfU0dfV0xBTl9QU19NQVhfQlRfQUNMX1NMQVZFX0JSXSAgICAgICA9IDgsCisJCQlbQ09ORl9TR19XTEFOX1BTX0JUX0FDTF9NQVNURVJfTUlOX0VEUl0gICAgID0gNywKKwkJCVtDT05GX1NHX1dMQU5fUFNfQlRfQUNMX01BU1RFUl9NQVhfRURSXSAgICAgPSAyNSwKKwkJCVtDT05GX1NHX1dMQU5fUFNfTUFYX0JUX0FDTF9NQVNURVJfRURSXSAgICAgPSAyMCwKKwkJCS8qIE5vdGU6IHdpdGggVVBEUywgdGhpcyBzaG91bGQgYmUgMTUgKi8KKwkJCVtDT05GX1NHX1dMQU5fUFNfQlRfQUNMX1NMQVZFX01JTl9FRFJdICAgICAgPSA4LAorCQkJLyogTm90ZTogd2l0aCBVUERTLCB0aGlzIHNob3VsZCBiZSA1MCAqLworCQkJW0NPTkZfU0dfV0xBTl9QU19CVF9BQ0xfU0xBVkVfTUFYX0VEUl0gICAgICA9IDQwLAorCQkJLyogTm90ZTogd2l0aCBVUERTLCB0aGlzIHNob3VsZCBiZSAxMCAqLworCQkJW0NPTkZfU0dfV0xBTl9QU19NQVhfQlRfQUNMX1NMQVZFX0VEUl0gICAgICA9IDIwLAorCQkJW0NPTkZfU0dfUlhUXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDEyMDAsCisJCQlbQ09ORl9TR19UWFRdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMTAwMCwKKwkJCVtDT05GX1NHX0FEQVBUSVZFX1JYVF9UWFRdICAgICAgICAgICAgICAgICAgPSAxLAorCQkJW0NPTkZfU0dfUFNfUE9MTF9USU1FT1VUXSAgICAgICAgICAgICAgICAgICA9IDEwLAorCQkJW0NPTkZfU0dfVVBTRF9USU1FT1VUXSAgICAgICAgICAgICAgICAgICAgICA9IDEwLAorCQkJW0NPTkZfU0dfV0xBTl9BQ1RJVkVfQlRfQUNMX01BU1RFUl9NSU5fRURSXSA9IDcsCisJCQlbQ09ORl9TR19XTEFOX0FDVElWRV9CVF9BQ0xfTUFTVEVSX01BWF9FRFJdID0gMTUsCisJCQlbQ09ORl9TR19XTEFOX0FDVElWRV9NQVhfQlRfQUNMX01BU1RFUl9FRFJdID0gMTUsCisJCQlbQ09ORl9TR19XTEFOX0FDVElWRV9CVF9BQ0xfU0xBVkVfTUlOX0VEUl0gID0gOCwKKwkJCVtDT05GX1NHX1dMQU5fQUNUSVZFX0JUX0FDTF9TTEFWRV9NQVhfRURSXSAgPSAyMCwKKwkJCVtDT05GX1NHX1dMQU5fQUNUSVZFX01BWF9CVF9BQ0xfU0xBVkVfRURSXSAgPSAxNSwKKwkJCVtDT05GX1NHX1dMQU5fQUNUSVZFX0JUX0FDTF9NSU5fQlJdICAgICAgICAgPSAyMCwKKwkJCVtDT05GX1NHX1dMQU5fQUNUSVZFX0JUX0FDTF9NQVhfQlJdICAgICAgICAgPSA1MCwKKwkJCVtDT05GX1NHX1dMQU5fQUNUSVZFX01BWF9CVF9BQ0xfQlJdICAgICAgICAgPSAxMCwKKwkJCVtDT05GX1NHX1BBU1NJVkVfU0NBTl9EVVJBVElPTl9GQUNUT1JfSFYzXSAgPSAyMDAsCisJCQlbQ09ORl9TR19QQVNTSVZFX1NDQU5fRFVSQVRJT05fRkFDVE9SX0EyRFBdID0gODAwLAorCQkJW0NPTkZfU0dfUEFTU0lWRV9TQ0FOX0EyRFBfQlRfVElNRV0gICAgICAgICA9IDc1LAorCQkJW0NPTkZfU0dfUEFTU0lWRV9TQ0FOX0EyRFBfV0xBTl9USU1FXSAgICAgICA9IDE1LAorCQkJW0NPTkZfU0dfSFYzX01BWF9TRVJWRURdICAgICAgICAgICAgICAgICAgICA9IDYsCisJCQlbQ09ORl9TR19ESENQX1RJTUVdICAgICAgICAgICAgICAgICAgICAgICAgID0gNTAwMCwKKwkJCVtDT05GX1NHX0FDVElWRV9TQ0FOX0RVUkFUSU9OX0ZBQ1RPUl9BMkRQXSAgPSAxMDAsCisJCX0sCisJCS5zdGF0ZSA9IENPTkZfU0dfUFJPVEVDVElWRSwKKwl9LAorCS5yeCA9IHsKKwkJLnJ4X21zZHVfbGlmZV90aW1lICAgICAgICAgICA9IDUxMjAwMCwKKwkJLnBhY2tldF9kZXRlY3Rpb25fdGhyZXNob2xkICA9IDAsCisJCS5wc19wb2xsX3RpbWVvdXQgICAgICAgICAgICAgPSAxNSwKKwkJLnVwc2RfdGltZW91dCAgICAgICAgICAgICAgICA9IDE1LAorCQkucnRzX3RocmVzaG9sZCAgICAgICAgICAgICAgID0gMjM0NywKKwkJLnJ4X2NjYV90aHJlc2hvbGQgICAgICAgICAgICA9IDAsCisJCS5pcnFfYmxrX3RocmVzaG9sZCAgICAgICAgICAgPSAweEZGRkYsCisJCS5pcnFfcGt0X3RocmVzaG9sZCAgICAgICAgICAgPSAwLAorCQkuaXJxX3RpbWVvdXQgICAgICAgICAgICAgICAgID0gNjAwLAorCQkucXVldWVfdHlwZSAgICAgICAgICAgICAgICAgID0gQ09ORl9SWF9RVUVVRV9UWVBFX0xPV19QUklPUklUWSwKKwl9LAorCS50eCA9IHsKKwkJLnR4X2VuZXJneV9kZXRlY3Rpb24gICAgICAgICA9IDAsCisJCS5yY19jb25mICAgICAgICAgICAgICAgICAgICAgPSB7CisJCQkuZW5hYmxlZF9yYXRlcyAgICAgICA9IDAsCisJCQkuc2hvcnRfcmV0cnlfbGltaXQgICA9IDEwLAorCQkJLmxvbmdfcmV0cnlfbGltaXQgICAgPSAxMCwKKwkJCS5hZmxhZ3MgICAgICAgICAgICAgID0gMAorCQl9LAorCQkuYWNfY29uZl9jb3VudCAgICAgICAgICAgICAgID0gNCwKKwkJLmFjX2NvbmYgICAgICAgICAgICAgICAgICAgICA9IHsKKwkJCVtDT05GX1RYX0FDX0JFXSA9IHsKKwkJCQkuYWMgICAgICAgICAgPSBDT05GX1RYX0FDX0JFLAorCQkJCS5jd19taW4gICAgICA9IDE1LAorCQkJCS5jd19tYXggICAgICA9IDYzLAorCQkJCS5haWZzbiAgICAgICA9IDMsCisJCQkJLnR4X29wX2xpbWl0ID0gMCwKKwkJCX0sCisJCQlbQ09ORl9UWF9BQ19CS10gPSB7CisJCQkJLmFjICAgICAgICAgID0gQ09ORl9UWF9BQ19CSywKKwkJCQkuY3dfbWluICAgICAgPSAxNSwKKwkJCQkuY3dfbWF4ICAgICAgPSA2MywKKwkJCQkuYWlmc24gICAgICAgPSA3LAorCQkJCS50eF9vcF9saW1pdCA9IDAsCisJCQl9LAorCQkJW0NPTkZfVFhfQUNfVkldID0geworCQkJCS5hYyAgICAgICAgICA9IENPTkZfVFhfQUNfVkksCisJCQkJLmN3X21pbiAgICAgID0gMTUsCisJCQkJLmN3X21heCAgICAgID0gNjMsCisJCQkJLmFpZnNuICAgICAgID0gQ09ORl9UWF9BSUZTX1BJRlMsCisJCQkJLnR4X29wX2xpbWl0ID0gMzAwOCwKKwkJCX0sCisJCQlbQ09ORl9UWF9BQ19WT10gPSB7CisJCQkJLmFjICAgICAgICAgID0gQ09ORl9UWF9BQ19WTywKKwkJCQkuY3dfbWluICAgICAgPSAxNSwKKwkJCQkuY3dfbWF4ICAgICAgPSA2MywKKwkJCQkuYWlmc24gICAgICAgPSBDT05GX1RYX0FJRlNfUElGUywKKwkJCQkudHhfb3BfbGltaXQgPSAxNTA0LAorCQkJfSwKKwkJfSwKKwkJLnRpZF9jb25mX2NvdW50ID0gNCwKKwkJLnRpZF9jb25mID0geworCQkJW0NPTkZfVFhfQUNfQkVdID0geworCQkJCS5xdWV1ZV9pZCAgICA9IENPTkZfVFhfQUNfQkUsCisJCQkJLmNoYW5uZWxfdHlwZSA9IENPTkZfQ0hBTk5FTF9UWVBFX0VEQ0YsCisJCQkJLnRzaWQgICAgICAgID0gQ09ORl9UWF9BQ19CRSwKKwkJCQkucHNfc2NoZW1lICAgPSBDT05GX1BTX1NDSEVNRV9MRUdBQ1ksCisJCQkJLmFja19wb2xpY3kgID0gQ09ORl9BQ0tfUE9MSUNZX0xFR0FDWSwKKwkJCQkuYXBzZF9jb25mICAgPSB7MCwgMH0sCisJCQl9LAorCQkJW0NPTkZfVFhfQUNfQktdID0geworCQkJCS5xdWV1ZV9pZCAgICA9IENPTkZfVFhfQUNfQkssCisJCQkJLmNoYW5uZWxfdHlwZSA9IENPTkZfQ0hBTk5FTF9UWVBFX0VEQ0YsCisJCQkJLnRzaWQgICAgICAgID0gQ09ORl9UWF9BQ19CSywKKwkJCQkucHNfc2NoZW1lICAgPSBDT05GX1BTX1NDSEVNRV9MRUdBQ1ksCisJCQkJLmFja19wb2xpY3kgID0gQ09ORl9BQ0tfUE9MSUNZX0xFR0FDWSwKKwkJCQkuYXBzZF9jb25mICAgPSB7MCwgMH0sCisJCQl9LAorCQkJW0NPTkZfVFhfQUNfVkldID0geworCQkJCS5xdWV1ZV9pZCAgICA9IENPTkZfVFhfQUNfVkksCisJCQkJLmNoYW5uZWxfdHlwZSA9IENPTkZfQ0hBTk5FTF9UWVBFX0VEQ0YsCisJCQkJLnRzaWQgICAgICAgID0gQ09ORl9UWF9BQ19WSSwKKwkJCQkucHNfc2NoZW1lICAgPSBDT05GX1BTX1NDSEVNRV9MRUdBQ1ksCisJCQkJLmFja19wb2xpY3kgID0gQ09ORl9BQ0tfUE9MSUNZX0xFR0FDWSwKKwkJCQkuYXBzZF9jb25mICAgPSB7MCwgMH0sCisJCQl9LAorCQkJW0NPTkZfVFhfQUNfVk9dID0geworCQkJCS5xdWV1ZV9pZCAgICA9IENPTkZfVFhfQUNfVk8sCisJCQkJLmNoYW5uZWxfdHlwZSA9IENPTkZfQ0hBTk5FTF9UWVBFX0VEQ0YsCisJCQkJLnRzaWQgICAgICAgID0gQ09ORl9UWF9BQ19WTywKKwkJCQkucHNfc2NoZW1lICAgPSBDT05GX1BTX1NDSEVNRV9MRUdBQ1ksCisJCQkJLmFja19wb2xpY3kgID0gQ09ORl9BQ0tfUE9MSUNZX0xFR0FDWSwKKwkJCQkuYXBzZF9jb25mICAgPSB7MCwgMH0sCisJCQl9LAorCQl9LAorCQkuZnJhZ190aHJlc2hvbGQgICAgICAgICAgICAgID0gSUVFRTgwMjExX01BWF9GUkFHX1RIUkVTSE9MRCwKKwkJLnR4X2NvbXBsX3RpbWVvdXQgICAgICAgICAgICA9IDcwMCwKKwkJLnR4X2NvbXBsX3RocmVzaG9sZCAgICAgICAgICA9IDQsCisJCS5iYXNpY19yYXRlICAgICAgICAgICAgICAgICAgPSBDT05GX0hXX0JJVF9SQVRFXzFNQlBTLAorCQkuYmFzaWNfcmF0ZV81ICAgICAgICAgICAgICAgID0gQ09ORl9IV19CSVRfUkFURV82TUJQUywKKwl9LAorCS5jb25uID0geworCQkud2FrZV91cF9ldmVudCAgICAgICAgICAgICAgID0gQ09ORl9XQUtFX1VQX0VWRU5UX0RUSU0sCisJCS5saXN0ZW5faW50ZXJ2YWwgICAgICAgICAgICAgPSAxLAorCQkuYmNuX2ZpbHRfbW9kZSAgICAgICAgICAgICAgID0gQ09ORl9CQ05fRklMVF9NT0RFX0VOQUJMRUQsCisJCS5iY25fZmlsdF9pZV9jb3VudCAgICAgICAgICAgPSAxLAorCQkuYmNuX2ZpbHRfaWUgPSB7CisJCQlbMF0gPSB7CisJCQkJLmllICAgICAgICAgID0gV0xBTl9FSURfQ0hBTk5FTF9TV0lUQ0gsCisJCQkJLnJ1bGUgICAgICAgID0gQ09ORl9CQ05fUlVMRV9QQVNTX09OX0FQUEVBUkFOQ0UsCisJCQl9CisJCX0sCisJCS5zeW5jaF9mYWlsX3Rob2xkICAgICAgICAgICAgPSAxMCwKKwkJLmJzc19sb3NlX3RpbWVvdXQgICAgICAgICAgICA9IDEwMCwKKwkJLmJlYWNvbl9yeF90aW1lb3V0ICAgICAgICAgICA9IDEwMDAwLAorCQkuYnJvYWRjYXN0X3RpbWVvdXQgICAgICAgICAgID0gMjAwMDAsCisJCS5yeF9icm9hZGNhc3RfaW5fcHMgICAgICAgICAgPSAxLAorCQkucHNfcG9sbF90aHJlc2hvbGQgICAgICAgICAgID0gMTAsCisJCS5wc19wb2xsX3JlY292ZXJ5X3BlcmlvZCAgICAgPSA3MDAsCisJCS5iZXRfZW5hYmxlICAgICAgICAgICAgICAgICAgPSBDT05GX0JFVF9NT0RFX0VOQUJMRSwKKwkJLmJldF9tYXhfY29uc2VjdXRpdmUgICAgICAgICA9IDEwLAorCQkucHNtX2VudHJ5X3JldHJpZXMgICAgICAgICAgID0gNSwKKwkJLnBzbV9lbnRyeV9udWxsZnVuY19yZXRyaWVzICA9IDMsCisJCS5wc21fZW50cnlfaGFuZ292ZXJfcGVyaW9kICAgPSAxLAorCQkua2VlcF9hbGl2ZV9pbnRlcnZhbCAgICAgICAgID0gNTUwMDAsCisJCS5tYXhfbGlzdGVuX2ludGVydmFsICAgICAgICAgPSAyMCwKKwl9LAorCS5pdHJpbSA9IHsKKwkJLmVuYWJsZSA9IGZhbHNlLAorCQkudGltZW91dCA9IDUwMDAwLAorCX0sCisJLnBtX2NvbmZpZyA9IHsKKwkJLmhvc3RfY2xrX3NldHRsaW5nX3RpbWUgPSA1MDAwLAorCQkuaG9zdF9mYXN0X3dha2V1cF9zdXBwb3J0ID0gZmFsc2UKKwl9LAorCS5yb2FtX3RyaWdnZXIgPSB7CisJCS50cmlnZ2VyX3BhY2luZyAgICAgICAgICAgICAgID0gMSwKKwkJLmF2Z193ZWlnaHRfcnNzaV9iZWFjb24gICAgICAgPSAyMCwKKwkJLmF2Z193ZWlnaHRfcnNzaV9kYXRhICAgICAgICAgPSAxMCwKKwkJLmF2Z193ZWlnaHRfc25yX2JlYWNvbiAgICAgICAgPSAyMCwKKwkJLmF2Z193ZWlnaHRfc25yX2RhdGEgICAgICAgICAgPSAxMAorCX0sCisJLnNjYW4gPSB7CisJCS5taW5fZHdlbGxfdGltZV9hY3RpdmUgICAgICAgID0gNzUwMCwKKwkJLm1heF9kd2VsbF90aW1lX2FjdGl2ZSAgICAgICAgPSAzMDAwMCwKKwkJLm1pbl9kd2VsbF90aW1lX3Bhc3NpdmUgICAgICAgPSAzMDAwMCwKKwkJLm1heF9kd2VsbF90aW1lX3Bhc3NpdmUgICAgICAgPSA2MDAwMCwKKwkJLm51bV9wcm9iZV9yZXFzICAgICAgICAgICAgICAgPSAyLAorCX0sCisJLnJmID0geworCQkudHhfcGVyX2NoYW5uZWxfcG93ZXJfY29tcGVuc2F0aW9uXzIgPSB7CisJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQl9LAorCQkudHhfcGVyX2NoYW5uZWxfcG93ZXJfY29tcGVuc2F0aW9uXzUgPSB7CisJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCX0sCisJfSwKK307CisKK3N0YXRpYyB2b2lkIF9fd2wxMjcxX29wX3JlbW92ZV9pbnRlcmZhY2Uoc3RydWN0IHdsMTI3MSAqd2wpOworCisKK3N0YXRpYyB2b2lkIHdsMTI3MV9kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugd2wxMjcxX2RldmljZSA9IHsKKwkubmFtZSAgICAgICAgICAgPSAid2wxMjcxIiwKKwkuaWQgICAgICAgICAgICAgPSAtMSwKKworCS8qIGRldmljZSBtb2RlbCBpbnNpc3RzIHRvIGhhdmUgYSByZWxlYXNlIGZ1bmN0aW9uICovCisJLmRldiAgICAgICAgICAgID0geworCQkucmVsZWFzZSA9IHdsMTI3MV9kZXZpY2VfcmVsZWFzZSwKKwl9LAorfTsKKworc3RhdGljIExJU1RfSEVBRCh3bF9saXN0KTsKKworc3RhdGljIGludCB3bDEyNzFfZGV2X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm1lLCB1bnNpZ25lZCBsb25nIHdoYXQsCisJCQkgICAgIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYXJnOworCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXY7CisJc3RydWN0IHdpcGh5ICp3aXBoeTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKKwlzdHJ1Y3Qgd2wxMjcxICp3bDsKKwlzdHJ1Y3Qgd2wxMjcxICp3bF90ZW1wOworCWludCByZXQgPSAwOworCisJLyogQ2hlY2sgdGhhdCB0aGlzIG5vdGlmaWNhdGlvbiBpcyBmb3IgdXMuICovCisJaWYgKHdoYXQgIT0gTkVUREVWX0NIQU5HRSkKKwkJcmV0dXJuIE5PVElGWV9ET05FOworCisJd2RldiA9IGRldi0+aWVlZTgwMjExX3B0cjsKKwlpZiAod2RldiA9PSBOVUxMKQorCQlyZXR1cm4gTk9USUZZX0RPTkU7CisKKwl3aXBoeSA9IHdkZXYtPndpcGh5OworCWlmICh3aXBoeSA9PSBOVUxMKQorCQlyZXR1cm4gTk9USUZZX0RPTkU7CisKKwlodyA9IHdpcGh5X3ByaXYod2lwaHkpOworCWlmIChodyA9PSBOVUxMKQorCQlyZXR1cm4gTk9USUZZX0RPTkU7CisKKwl3bF90ZW1wID0gaHctPnByaXY7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh3bCwgJndsX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHdsID09IHdsX3RlbXApCisJCQlicmVhazsKKwl9CisJaWYgKHdsICE9IHdsX3RlbXApCisJCXJldHVybiBOT1RJRllfRE9ORTsKKworCW11dGV4X2xvY2soJndsLT5tdXRleCk7CisKKwlpZiAod2wtPnN0YXRlID09IFdMMTI3MV9TVEFURV9PRkYpCisJCWdvdG8gb3V0OworCisJaWYgKCF0ZXN0X2JpdChXTDEyNzFfRkxBR19TVEFfQVNTT0NJQVRFRCwgJndsLT5mbGFncykpCisJCWdvdG8gb3V0OworCisJcmV0ID0gd2wxMjcxX3BzX2VscF93YWtldXAod2wsIGZhbHNlKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwlpZiAoKGRldi0+b3BlcnN0YXRlID09IElGX09QRVJfVVApICYmCisJICAgICF0ZXN0X2FuZF9zZXRfYml0KFdMMTI3MV9GTEFHX1NUQV9TVEFURV9TRU5ULCAmd2wtPmZsYWdzKSkgeworCQl3bDEyNzFfY21kX3NldF9zdGFfc3RhdGUod2wpOworCQl3bDEyNzFfaW5mbygiQXNzb2NpYXRpb24gY29tcGxldGVkLiIpOworCX0KKworCXdsMTI3MV9wc19lbHBfc2xlZXAod2wpOworCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOworCisJcmV0dXJuIE5PVElGWV9PSzsKK30KKworc3RhdGljIGludCB3bDEyNzFfcmVnX25vdGlmeShzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJICAgICBzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICpyZXF1ZXN0KQoreworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKmJhbmQ7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaDsKKwlpbnQgaTsKKworCWJhbmQgPSB3aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl07CisJZm9yIChpID0gMDsgaSA8IGJhbmQtPm5fY2hhbm5lbHM7IGkrKykgeworCQljaCA9ICZiYW5kLT5jaGFubmVsc1tpXTsKKwkJaWYgKGNoLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX0RJU0FCTEVEKQorCQkJY29udGludWU7CisKKwkJaWYgKGNoLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX1JBREFSKQorCQkJY2gtPmZsYWdzIHw9IElFRUU4MDIxMV9DSEFOX05PX0lCU1MgfAorCQkJCSAgICAgSUVFRTgwMjExX0NIQU5fUEFTU0lWRV9TQ0FOOworCisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHdsMTI3MV9jb25mX2luaXQoc3RydWN0IHdsMTI3MSAqd2wpCit7CisKKwkvKgorCSAqIFRoaXMgZnVuY3Rpb24gYXBwbGllcyB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIHRvIHRoZSBkcml2ZXIuIFRoaXMKKwkgKiBmdW5jdGlvbiBpcyBpbnZva2VkIHVwb24gZHJpdmVyIGxvYWQgKHNwaSBwcm9iZS4pCisJICoKKwkgKiBUaGUgY29uZmlndXJhdGlvbiBpcyBzdG9yZWQgaW4gYSBydW4tdGltZSBzdHJ1Y3R1cmUgaW4gb3JkZXIgdG8KKwkgKiBmYWNpbGl0YXRlIGZvciBydW4tdGltZSBhZGp1c3RtZW50IG9mIGFueSBvZiB0aGUgcGFyYW1ldGVycy4gTWFraW5nCisJICogY2hhbmdlcyB0byB0aGUgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgd2lsbCBhcHBseSB0aGUgbmV3IHZhbHVlcyBvbgorCSAqIHRoZSBuZXh0IGludGVyZmFjZSB1cCAod2wxMjcxX29wX3N0YXJ0LikKKwkgKi8KKworCS8qIGFwcGx5IGRyaXZlciBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gKi8KKwltZW1jcHkoJndsLT5jb25mLCAmZGVmYXVsdF9jb25mLCBzaXplb2YoZGVmYXVsdF9jb25mKSk7Cit9CisKKworc3RhdGljIGludCB3bDEyNzFfcGx0X2luaXQoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJc3RydWN0IGNvbmZfdHhfYWNfY2F0ZWdvcnkgKmNvbmZfYWM7CisJc3RydWN0IGNvbmZfdHhfdGlkICpjb25mX3RpZDsKKwlpbnQgcmV0LCBpOworCisJcmV0ID0gd2wxMjcxX2NtZF9nZW5lcmFsX3Bhcm1zKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHdsMTI3MV9jbWRfcmFkaW9fcGFybXMod2wpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gd2wxMjcxX2NtZF9leHRfcmFkaW9fcGFybXMod2wpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gd2wxMjcxX2luaXRfdGVtcGxhdGVzX2NvbmZpZyh3bCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSB3bDEyNzFfYWN4X2luaXRfbWVtX2NvbmZpZyh3bCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBQSFkgbGF5ZXIgY29uZmlnICovCisJcmV0ID0gd2wxMjcxX2luaXRfcGh5X2NvbmZpZyh3bCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0X2ZyZWVfbWVtbWFwOworCisJcmV0ID0gd2wxMjcxX2FjeF9kY29faXRyaW1fcGFyYW1zKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXRfZnJlZV9tZW1tYXA7CisKKwkvKiBJbml0aWFsaXplIGNvbm5lY3Rpb24gbW9uaXRvcmluZyB0aHJlc2hvbGRzICovCisJcmV0ID0gd2wxMjcxX2FjeF9jb25uX21vbml0X3BhcmFtcyh3bCwgZmFsc2UpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dF9mcmVlX21lbW1hcDsKKworCS8qIEJsdWV0b290aCBXTEFOIGNvZXhpc3RlbmNlICovCisJcmV0ID0gd2wxMjcxX2luaXRfcHRhKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXRfZnJlZV9tZW1tYXA7CisKKwkvKiBFbmVyZ3kgZGV0ZWN0aW9uICovCisJcmV0ID0gd2wxMjcxX2luaXRfZW5lcmd5X2RldGVjdGlvbih3bCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0X2ZyZWVfbWVtbWFwOworCisJLyogRGVmYXVsdCBmcmFnbWVudGF0aW9uIHRocmVzaG9sZCAqLworCXJldCA9IHdsMTI3MV9hY3hfZnJhZ190aHJlc2hvbGQod2wsIHdsLT5jb25mLnR4LmZyYWdfdGhyZXNob2xkKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXRfZnJlZV9tZW1tYXA7CisKKwkvKiBEZWZhdWx0IFRJRC9BQyBjb25maWd1cmF0aW9uICovCisJQlVHX09OKHdsLT5jb25mLnR4LnRpZF9jb25mX2NvdW50ICE9IHdsLT5jb25mLnR4LmFjX2NvbmZfY291bnQpOworCWZvciAoaSA9IDA7IGkgPCB3bC0+Y29uZi50eC50aWRfY29uZl9jb3VudDsgaSsrKSB7CisJCWNvbmZfYWMgPSAmd2wtPmNvbmYudHguYWNfY29uZltpXTsKKwkJcmV0ID0gd2wxMjcxX2FjeF9hY19jZmcod2wsIGNvbmZfYWMtPmFjLCBjb25mX2FjLT5jd19taW4sCisJCQkJCWNvbmZfYWMtPmN3X21heCwgY29uZl9hYy0+YWlmc24sCisJCQkJCWNvbmZfYWMtPnR4X29wX2xpbWl0KTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIG91dF9mcmVlX21lbW1hcDsKKworCQljb25mX3RpZCA9ICZ3bC0+Y29uZi50eC50aWRfY29uZltpXTsKKwkJcmV0ID0gd2wxMjcxX2FjeF90aWRfY2ZnKHdsLCBjb25mX3RpZC0+cXVldWVfaWQsCisJCQkJCSBjb25mX3RpZC0+Y2hhbm5lbF90eXBlLAorCQkJCQkgY29uZl90aWQtPnRzaWQsCisJCQkJCSBjb25mX3RpZC0+cHNfc2NoZW1lLAorCQkJCQkgY29uZl90aWQtPmFja19wb2xpY3ksCisJCQkJCSBjb25mX3RpZC0+YXBzZF9jb25mWzBdLAorCQkJCQkgY29uZl90aWQtPmFwc2RfY29uZlsxXSk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdXRfZnJlZV9tZW1tYXA7CisJfQorCisJLyogRW5hYmxlIGRhdGEgcGF0aCAqLworCXJldCA9IHdsMTI3MV9jbWRfZGF0YV9wYXRoKHdsLCAxKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXRfZnJlZV9tZW1tYXA7CisKKwkvKiBDb25maWd1cmUgZm9yIENBTSBwb3dlciBzYXZpbmcgKGllLiBhbHdheXMgYWN0aXZlKSAqLworCXJldCA9IHdsMTI3MV9hY3hfc2xlZXBfYXV0aCh3bCwgV0wxMjcxX1BTTV9DQU0pOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dF9mcmVlX21lbW1hcDsKKworCS8qIGNvbmZpZ3VyZSBQTSAqLworCXJldCA9IHdsMTI3MV9hY3hfcG1fY29uZmlnKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXRfZnJlZV9tZW1tYXA7CisKKwlyZXR1cm4gMDsKKworIG91dF9mcmVlX21lbW1hcDoKKwlrZnJlZSh3bC0+dGFyZ2V0X21lbV9tYXApOworCXdsLT50YXJnZXRfbWVtX21hcCA9IE5VTEw7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCB3bDEyNzFfZndfc3RhdHVzKHN0cnVjdCB3bDEyNzEgKndsLAorCQkJICAgICBzdHJ1Y3Qgd2wxMjcxX2Z3X3N0YXR1cyAqc3RhdHVzKQoreworCXN0cnVjdCB0aW1lc3BlYyB0czsKKwl1MzIgdG90YWwgPSAwOworCWludCBpOworCisJd2wxMjcxX3Jhd19yZWFkKHdsLCBGV19TVEFUVVNfQUREUiwgc3RhdHVzLCBzaXplb2YoKnN0YXR1cyksIGZhbHNlKTsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19JUlEsICJpbnRyOiAweCV4IChmd19yeF9jb3VudGVyID0gJWQsICIKKwkJICAgICAiZHJ2X3J4X2NvdW50ZXIgPSAlZCwgdHhfcmVzdWx0c19jb3VudGVyID0gJWQpIiwKKwkJICAgICBzdGF0dXMtPmludHIsCisJCSAgICAgc3RhdHVzLT5md19yeF9jb3VudGVyLAorCQkgICAgIHN0YXR1cy0+ZHJ2X3J4X2NvdW50ZXIsCisJCSAgICAgc3RhdHVzLT50eF9yZXN1bHRzX2NvdW50ZXIpOworCisJLyogdXBkYXRlIG51bWJlciBvZiBhdmFpbGFibGUgVFggYmxvY2tzICovCisJZm9yIChpID0gMDsgaSA8IE5VTV9UWF9RVUVVRVM7IGkrKykgeworCQl1MzIgY250ID0gbGUzMl90b19jcHUoc3RhdHVzLT50eF9yZWxlYXNlZF9ibGtzW2ldKSAtCisJCQl3bC0+dHhfYmxvY2tzX2ZyZWVkW2ldOworCisJCXdsLT50eF9ibG9ja3NfZnJlZWRbaV0gPQorCQkJbGUzMl90b19jcHUoc3RhdHVzLT50eF9yZWxlYXNlZF9ibGtzW2ldKTsKKwkJd2wtPnR4X2Jsb2Nrc19hdmFpbGFibGUgKz0gY250OworCQl0b3RhbCArPSBjbnQ7CisJfQorCisJLyogaWYgbW9yZSBibG9ja3MgYXJlIGF2YWlsYWJsZSBub3csIHR4IHdvcmsgY2FuIGJlIHNjaGVkdWxlZCAqLworCWlmICh0b3RhbCkKKwkJY2xlYXJfYml0KFdMMTI3MV9GTEFHX0ZXX1RYX0JVU1ksICZ3bC0+ZmxhZ3MpOworCisJLyogdXBkYXRlIHRoZSBob3N0LWNoaXBzZXQgdGltZSBvZmZzZXQgKi8KKwlnZXRuc3RpbWVvZmRheSgmdHMpOworCXdsLT50aW1lX29mZnNldCA9ICh0aW1lc3BlY190b19ucygmdHMpID4+IDEwKSAtCisJCShzNjQpbGUzMl90b19jcHUoc3RhdHVzLT5md19sb2NhbHRpbWUpOworfQorCisjZGVmaW5lIFdMMTI3MV9JUlFfTUFYX0xPT1BTIDEwCisKK3N0YXRpYyB2b2lkIHdsMTI3MV9pcnFfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJaW50IHJldDsKKwl1MzIgaW50cjsKKwlpbnQgbG9vcGNvdW50ID0gV0wxMjcxX0lSUV9NQVhfTE9PUFM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3Qgd2wxMjcxICp3bCA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd2wxMjcxLCBpcnFfd29yayk7CisKKwltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOworCisJd2wxMjcxX2RlYnVnKERFQlVHX0lSUSwgIklSUSB3b3JrIik7CisKKwlpZiAodW5saWtlbHkod2wtPnN0YXRlID09IFdMMTI3MV9TVEFURV9PRkYpKQorCQlnb3RvIG91dDsKKworCXJldCA9IHdsMTI3MV9wc19lbHBfd2FrZXVwKHdsLCB0cnVlKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmd2wtPndsX2xvY2ssIGZsYWdzKTsKKwl3aGlsZSAodGVzdF9iaXQoV0wxMjcxX0ZMQUdfSVJRX1BFTkRJTkcsICZ3bC0+ZmxhZ3MpICYmIGxvb3Bjb3VudCkgeworCQljbGVhcl9iaXQoV0wxMjcxX0ZMQUdfSVJRX1BFTkRJTkcsICZ3bC0+ZmxhZ3MpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3bC0+d2xfbG9jaywgZmxhZ3MpOworCQlsb29wY291bnQtLTsKKworCQl3bDEyNzFfZndfc3RhdHVzKHdsLCB3bC0+Zndfc3RhdHVzKTsKKwkJaW50ciA9IGxlMzJfdG9fY3B1KHdsLT5md19zdGF0dXMtPmludHIpOworCQlpZiAoIWludHIpIHsKKwkJCXdsMTI3MV9kZWJ1ZyhERUJVR19JUlEsICJaZXJvIGludGVycnVwdCByZWNlaXZlZC4iKTsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZ3bC0+d2xfbG9jaywgZmxhZ3MpOworCQkJY29udGludWU7CisJCX0KKworCQlpbnRyICY9IFdMMTI3MV9JTlRSX01BU0s7CisKKwkJaWYgKHVubGlrZWx5KGludHIgJiBXTDEyNzFfQUNYX0lOVFJfV0FUQ0hET0cpKSB7CisJCQl3bDEyNzFfZXJyb3IoIndhdGNoZG9nIGludGVycnVwdCByZWNlaXZlZCEgIgorCQkJCSAgICAgInN0YXJ0aW5nIHJlY292ZXJ5LiIpOworCQkJaWVlZTgwMjExX3F1ZXVlX3dvcmsod2wtPmh3LCAmd2wtPnJlY292ZXJ5X3dvcmspOworCisJCQkvKiByZXN0YXJ0aW5nIHRoZSBjaGlwLiBpZ25vcmUgYW55IG90aGVyIGludGVycnVwdC4gKi8KKwkJCWdvdG8gb3V0OworCQl9CisKKwkJaWYgKGludHIgJiBXTDEyNzFfQUNYX0lOVFJfREFUQSkgeworCQkJd2wxMjcxX2RlYnVnKERFQlVHX0lSUSwgIldMMTI3MV9BQ1hfSU5UUl9EQVRBIik7CisKKwkJCS8qIGNoZWNrIGZvciB0eCByZXN1bHRzICovCisJCQlpZiAod2wtPmZ3X3N0YXR1cy0+dHhfcmVzdWx0c19jb3VudGVyICE9CisJCQkgICAgKHdsLT50eF9yZXN1bHRzX2NvdW50ICYgMHhmZikpCisJCQkJd2wxMjcxX3R4X2NvbXBsZXRlKHdsKTsKKworCQkJLyogQ2hlY2sgaWYgYW55IHR4IGJsb2NrcyB3ZXJlIGZyZWVkICovCisJCQlpZiAoIXRlc3RfYml0KFdMMTI3MV9GTEFHX0ZXX1RYX0JVU1ksICZ3bC0+ZmxhZ3MpICYmCisJCQkgICAgd2wtPnR4X3F1ZXVlX2NvdW50KSB7CisJCQkJLyoKKwkJCQkgKiBJbiBvcmRlciB0byBhdm9pZCBzdGFydmF0aW9uIG9mIHRoZSBUWCBwYXRoLAorCQkJCSAqIGNhbGwgdGhlIHdvcmsgZnVuY3Rpb24gZGlyZWN0bHkuCisJCQkJICovCisJCQkJd2wxMjcxX3R4X3dvcmtfbG9ja2VkKHdsKTsKKwkJCX0KKworCQkJd2wxMjcxX3J4KHdsLCB3bC0+Zndfc3RhdHVzKTsKKwkJfQorCisJCWlmIChpbnRyICYgV0wxMjcxX0FDWF9JTlRSX0VWRU5UX0EpIHsKKwkJCXdsMTI3MV9kZWJ1ZyhERUJVR19JUlEsICJXTDEyNzFfQUNYX0lOVFJfRVZFTlRfQSIpOworCQkJd2wxMjcxX2V2ZW50X2hhbmRsZSh3bCwgMCk7CisJCX0KKworCQlpZiAoaW50ciAmIFdMMTI3MV9BQ1hfSU5UUl9FVkVOVF9CKSB7CisJCQl3bDEyNzFfZGVidWcoREVCVUdfSVJRLCAiV0wxMjcxX0FDWF9JTlRSX0VWRU5UX0IiKTsKKwkJCXdsMTI3MV9ldmVudF9oYW5kbGUod2wsIDEpOworCQl9CisKKwkJaWYgKGludHIgJiBXTDEyNzFfQUNYX0lOVFJfSU5JVF9DT01QTEVURSkKKwkJCXdsMTI3MV9kZWJ1ZyhERUJVR19JUlEsCisJCQkJICAgICAiV0wxMjcxX0FDWF9JTlRSX0lOSVRfQ09NUExFVEUiKTsKKworCQlpZiAoaW50ciAmIFdMMTI3MV9BQ1hfSU5UUl9IV19BVkFJTEFCTEUpCisJCQl3bDEyNzFfZGVidWcoREVCVUdfSVJRLCAiV0wxMjcxX0FDWF9JTlRSX0hXX0FWQUlMQUJMRSIpOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZ3bC0+d2xfbG9jaywgZmxhZ3MpOworCX0KKworCWlmICh0ZXN0X2JpdChXTDEyNzFfRkxBR19JUlFfUEVORElORywgJndsLT5mbGFncykpCisJCWllZWU4MDIxMV9xdWV1ZV93b3JrKHdsLT5odywgJndsLT5pcnFfd29yayk7CisJZWxzZQorCQljbGVhcl9iaXQoV0wxMjcxX0ZMQUdfSVJRX1JVTk5JTkcsICZ3bC0+ZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndsLT53bF9sb2NrLCBmbGFncyk7CisKKwl3bDEyNzFfcHNfZWxwX3NsZWVwKHdsKTsKKworb3V0OgorCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKK30KKworc3RhdGljIGludCB3bDEyNzFfZmV0Y2hfZmlybXdhcmUoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKKwlpbnQgcmV0OworCisJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIFdMMTI3MV9GV19OQU1FLCB3bDEyNzFfd2xfdG9fZGV2KHdsKSk7CisKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNzFfZXJyb3IoImNvdWxkIG5vdCBnZXQgZmlybXdhcmU6ICVkIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlpZiAoZnctPnNpemUgJSA0KSB7CisJCXdsMTI3MV9lcnJvcigiZmlybXdhcmUgc2l6ZSBpcyBub3QgbXVsdGlwbGUgb2YgMzIgYml0czogJXp1IiwKKwkJCSAgICAgZnctPnNpemUpOworCQlyZXQgPSAtRUlMU0VROworCQlnb3RvIG91dDsKKwl9CisKKwl3bC0+ZndfbGVuID0gZnctPnNpemU7CisJd2wtPmZ3ID0gdm1hbGxvYyh3bC0+ZndfbGVuKTsKKworCWlmICghd2wtPmZ3KSB7CisJCXdsMTI3MV9lcnJvcigiY291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGZpcm13YXJlIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCW1lbWNweSh3bC0+ZncsIGZ3LT5kYXRhLCB3bC0+ZndfbGVuKTsKKworCXJldCA9IDA7CisKK291dDoKKwlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjcxX2ZldGNoX252cyhzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OworCWludCByZXQ7CisKKwlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgV0wxMjcxX05WU19OQU1FLCB3bDEyNzFfd2xfdG9fZGV2KHdsKSk7CisKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNzFfZXJyb3IoImNvdWxkIG5vdCBnZXQgbnZzIGZpbGU6ICVkIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwl3bC0+bnZzID0ga21lbWR1cChmdy0+ZGF0YSwgc2l6ZW9mKHN0cnVjdCB3bDEyNzFfbnZzX2ZpbGUpLCBHRlBfS0VSTkVMKTsKKworCWlmICghd2wtPm52cykgeworCQl3bDEyNzFfZXJyb3IoImNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBudnMgZmlsZSIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwl3bC0+bnZzX2xlbiA9IGZ3LT5zaXplOworCitvdXQ6CisJcmVsZWFzZV9maXJtd2FyZShmdyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCB3bDEyNzFfcmVjb3Zlcnlfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHdsMTI3MSAqd2wgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHdsMTI3MSwgcmVjb3Zlcnlfd29yayk7CisKKwltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOworCisJaWYgKHdsLT5zdGF0ZSAhPSBXTDEyNzFfU1RBVEVfT04pCisJCWdvdG8gb3V0OworCisJd2wxMjcxX2luZm8oIkhhcmR3YXJlIHJlY292ZXJ5IGluIHByb2dyZXNzLiIpOworCisJaWYgKHRlc3RfYml0KFdMMTI3MV9GTEFHX1NUQV9BU1NPQ0lBVEVELCAmd2wtPmZsYWdzKSkKKwkJaWVlZTgwMjExX2Nvbm5lY3Rpb25fbG9zcyh3bC0+dmlmKTsKKworCS8qIHJlYm9vdCB0aGUgY2hpcHNldCAqLworCV9fd2wxMjcxX29wX3JlbW92ZV9pbnRlcmZhY2Uod2wpOworCWllZWU4MDIxMV9yZXN0YXJ0X2h3KHdsLT5odyk7CisKK291dDoKKwltdXRleF91bmxvY2soJndsLT5tdXRleCk7Cit9CisKK3N0YXRpYyB2b2lkIHdsMTI3MV9md193YWtldXAoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJdTMyIGVscF9yZWc7CisKKwllbHBfcmVnID0gRUxQQ1RSTF9XQUtFX1VQOworCXdsMTI3MV9yYXdfd3JpdGUzMih3bCwgSFdfQUNDRVNTX0VMUF9DVFJMX1JFR19BRERSLCBlbHBfcmVnKTsKK30KKworc3RhdGljIGludCB3bDEyNzFfc2V0dXAoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJd2wtPmZ3X3N0YXR1cyA9IGttYWxsb2Moc2l6ZW9mKCp3bC0+Zndfc3RhdHVzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF3bC0+Zndfc3RhdHVzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXdsLT50eF9yZXNfaWYgPSBrbWFsbG9jKHNpemVvZigqd2wtPnR4X3Jlc19pZiksIEdGUF9LRVJORUwpOworCWlmICghd2wtPnR4X3Jlc19pZikgeworCQlrZnJlZSh3bC0+Zndfc3RhdHVzKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjcxX2NoaXBfd2FrZXVwKHN0cnVjdCB3bDEyNzEgKndsKQoreworCXN0cnVjdCB3bDEyNzFfcGFydGl0aW9uX3NldCBwYXJ0aXRpb247CisJaW50IHJldCA9IDA7CisKKwltc2xlZXAoV0wxMjcxX1BSRV9QT1dFUl9PTl9TTEVFUCk7CisJcmV0ID0gd2wxMjcxX3Bvd2VyX29uKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisJbXNsZWVwKFdMMTI3MV9QT1dFUl9PTl9TTEVFUCk7CisJd2wxMjcxX2lvX3Jlc2V0KHdsKTsKKwl3bDEyNzFfaW9faW5pdCh3bCk7CisKKwkvKiBXZSBkb24ndCBuZWVkIGEgcmVhbCBtZW1vcnkgcGFydGl0aW9uIGhlcmUsIGJlY2F1c2Ugd2Ugb25seSB3YW50CisJICogdG8gdXNlIHRoZSByZWdpc3RlcnMgYXQgdGhpcyBwb2ludC4gKi8KKwltZW1zZXQoJnBhcnRpdGlvbiwgMCwgc2l6ZW9mKHBhcnRpdGlvbikpOworCXBhcnRpdGlvbi5yZWcuc3RhcnQgPSBSRUdJU1RFUlNfQkFTRTsKKwlwYXJ0aXRpb24ucmVnLnNpemUgPSBSRUdJU1RFUlNfRE9XTl9TSVpFOworCXdsMTI3MV9zZXRfcGFydGl0aW9uKHdsLCAmcGFydGl0aW9uKTsKKworCS8qIEVMUCBtb2R1bGUgd2FrZSB1cCAqLworCXdsMTI3MV9md193YWtldXAod2wpOworCisJLyogd2hhbF9Gd0N0cmxfQm9vdFNtKCkgKi8KKworCS8qIDAuIHJlYWQgY2hpcCBpZCBmcm9tIENISVBfSUQgKi8KKwl3bC0+Y2hpcC5pZCA9IHdsMTI3MV9yZWFkMzIod2wsIENISVBfSURfQik7CisKKwkvKiAxLiBjaGVjayBpZiBjaGlwIGlkIGlzIHZhbGlkICovCisKKwlzd2l0Y2ggKHdsLT5jaGlwLmlkKSB7CisJY2FzZSBDSElQX0lEXzEyNzFfUEcxMDoKKwkJd2wxMjcxX3dhcm5pbmcoImNoaXAgaWQgMHgleCAoMTI3MSBQRzEwKSBzdXBwb3J0IGlzIG9ic29sZXRlIiwKKwkJCSAgICAgICB3bC0+Y2hpcC5pZCk7CisKKwkJcmV0ID0gd2wxMjcxX3NldHVwKHdsKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIG91dDsKKwkJYnJlYWs7CisJY2FzZSBDSElQX0lEXzEyNzFfUEcyMDoKKwkJd2wxMjcxX2RlYnVnKERFQlVHX0JPT1QsICJjaGlwIGlkIDB4JXggKDEyNzEgUEcyMCkiLAorCQkJICAgICB3bC0+Y2hpcC5pZCk7CisKKwkJcmV0ID0gd2wxMjcxX3NldHVwKHdsKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIG91dDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJd2wxMjcxX3dhcm5pbmcoInVuc3VwcG9ydGVkIGNoaXAgaWQ6IDB4JXgiLCB3bC0+Y2hpcC5pZCk7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0OworCX0KKworCWlmICh3bC0+ZncgPT0gTlVMTCkgeworCQlyZXQgPSB3bDEyNzFfZmV0Y2hfZmlybXdhcmUod2wpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gb3V0OworCX0KKworCS8qIE5vIE5WUyBmcm9tIG5ldGxpbmssIHRyeSB0byBnZXQgaXQgZnJvbSB0aGUgZmlsZXN5c3RlbSAqLworCWlmICh3bC0+bnZzID09IE5VTEwpIHsKKwkJcmV0ID0gd2wxMjcxX2ZldGNoX252cyh3bCk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI3MV9wbHRfc3RhcnQoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJaW50IHJldHJpZXMgPSBXTDEyNzFfQk9PVF9SRVRSSUVTOworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOworCisJd2wxMjcxX25vdGljZSgicG93ZXIgdXAiKTsKKworCWlmICh3bC0+c3RhdGUgIT0gV0wxMjcxX1NUQVRFX09GRikgeworCQl3bDEyNzFfZXJyb3IoImNhbm5vdCBnbyBpbnRvIFBMVCBzdGF0ZSBiZWNhdXNlIG5vdCAiCisJCQkgICAgICJpbiBvZmYgc3RhdGU6ICVkIiwgd2wtPnN0YXRlKTsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIG91dDsKKwl9CisKKwl3aGlsZSAocmV0cmllcykgeworCQlyZXRyaWVzLS07CisJCXJldCA9IHdsMTI3MV9jaGlwX3dha2V1cCh3bCk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBwb3dlcl9vZmY7CisKKwkJcmV0ID0gd2wxMjcxX2Jvb3Qod2wpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gcG93ZXJfb2ZmOworCisJCXJldCA9IHdsMTI3MV9wbHRfaW5pdCh3bCk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBpcnFfZGlzYWJsZTsKKworCQl3bC0+c3RhdGUgPSBXTDEyNzFfU1RBVEVfUExUOworCQl3bDEyNzFfbm90aWNlKCJmaXJtd2FyZSBib290ZWQgaW4gUExUIG1vZGUgKCVzKSIsCisJCQkgICAgICB3bC0+Y2hpcC5md192ZXIpOworCQlnb3RvIG91dDsKKworaXJxX2Rpc2FibGU6CisJCXdsMTI3MV9kaXNhYmxlX2ludGVycnVwdHMod2wpOworCQltdXRleF91bmxvY2soJndsLT5tdXRleCk7CisJCS8qIFVubG9ja2luZyB0aGUgbXV0ZXggaW4gdGhlIG1pZGRsZSBvZiBoYW5kbGluZyBpcworCQkgICBpbmhlcmVudGx5IHVuc2FmZS4gSW4gdGhpcyBjYXNlIHdlIGRlZW0gaXQgc2FmZSB0byBkbywKKwkJICAgYmVjYXVzZSB3ZSBuZWVkIHRvIGxldCBhbnkgcG9zc2libHkgcGVuZGluZyBJUlEgb3V0IG9mCisJCSAgIHRoZSBzeXN0ZW0gKGFuZCB3aGlsZSB3ZSBhcmUgV0wxMjcxX1NUQVRFX09GRiB0aGUgSVJRCisJCSAgIHdvcmsgZnVuY3Rpb24gd2lsbCBub3QgZG8gYW55dGhpbmcuKSBBbHNvLCBhbnkgb3RoZXIKKwkJICAgcG9zc2libGUgY29uY3VycmVudCBvcGVyYXRpb25zIHdpbGwgZmFpbCBkdWUgdG8gdGhlCisJCSAgIGN1cnJlbnQgc3RhdGUsIGhlbmNlIHRoZSB3bDEyNzEgc3RydWN0IHNob3VsZCBiZSBzYWZlLiAqLworCQljYW5jZWxfd29ya19zeW5jKCZ3bC0+aXJxX3dvcmspOworCQltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOworcG93ZXJfb2ZmOgorCQl3bDEyNzFfcG93ZXJfb2ZmKHdsKTsKKwl9CisKKwl3bDEyNzFfZXJyb3IoImZpcm13YXJlIGJvb3QgaW4gUExUIG1vZGUgZmFpbGVkIGRlc3BpdGUgJWQgcmV0cmllcyIsCisJCSAgICAgV0wxMjcxX0JPT1RfUkVUUklFUyk7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOworCisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI3MV9wbHRfc3RvcChzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlpbnQgcmV0ID0gMDsKKworCW11dGV4X2xvY2soJndsLT5tdXRleCk7CisKKwl3bDEyNzFfbm90aWNlKCJwb3dlciBkb3duIik7CisKKwlpZiAod2wtPnN0YXRlICE9IFdMMTI3MV9TVEFURV9QTFQpIHsKKwkJd2wxMjcxX2Vycm9yKCJjYW5ub3QgcG93ZXIgZG93biBiZWNhdXNlIG5vdCBpbiBQTFQgIgorCQkJICAgICAic3RhdGU6ICVkIiwgd2wtPnN0YXRlKTsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIG91dDsKKwl9CisKKwl3bDEyNzFfZGlzYWJsZV9pbnRlcnJ1cHRzKHdsKTsKKwl3bDEyNzFfcG93ZXJfb2ZmKHdsKTsKKworCXdsLT5zdGF0ZSA9IFdMMTI3MV9TVEFURV9PRkY7CisJd2wtPnJ4X2NvdW50ZXIgPSAwOworCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOworCisJY2FuY2VsX3dvcmtfc3luYygmd2wtPmlycV93b3JrKTsKKwljYW5jZWxfd29ya19zeW5jKCZ3bC0+cmVjb3Zlcnlfd29yayk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHdsMTI3MV9vcF90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3Qgd2wxMjcxICp3bCA9IGh3LT5wcml2OworCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZody0+Y29uZjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4aW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhID0gdHhpbmZvLT5jb250cm9sLnN0YTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBxOworCisJLyoKKwkgKiBwZWVrIGludG8gdGhlIHJhdGVzIGNvbmZpZ3VyZWQgaW4gdGhlIFNUQSBlbnRyeS4KKwkgKiBUaGUgcmF0ZXMgc2V0IGFmdGVyIGNvbm5lY3Rpb24gc3RhZ2UsIFRoZSBmaXJzdCBibG9jayBvbmx5IEJHIHNldHM6CisJICogdGhlIGNvbXBhcmUgaXMgZm9yIGJpdCAwLTE2IG9mIHN0YV9yYXRlX3NldC4gVGhlIHNlY29uZCBibG9jayBhZGQKKwkgKiBIVCByYXRlcyBpbiBjYXNlIG9mIEhUIHN1cHBvcnRlZC4KKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmd2wtPndsX2xvY2ssIGZsYWdzKTsKKwlpZiAoc3RhICYmCisJICAgIChzdGEtPnN1cHBfcmF0ZXNbY29uZi0+Y2hhbm5lbC0+YmFuZF0gIT0KKwkgICAgKHdsLT5zdGFfcmF0ZV9zZXQgJiBIV19CR19SQVRFU19NQVNLKSkpIHsKKwkJd2wtPnN0YV9yYXRlX3NldCA9IHN0YS0+c3VwcF9yYXRlc1tjb25mLT5jaGFubmVsLT5iYW5kXTsKKwkJc2V0X2JpdChXTDEyNzFfRkxBR19TVEFfUkFURVNfQ0hBTkdFRCwgJndsLT5mbGFncyk7CisJfQorCisjaWZkZWYgQ09ORklHX1dMMTJYWF9IVAorCWlmIChzdGEgJiYKKwkgICAgc3RhLT5odF9jYXAuaHRfc3VwcG9ydGVkICYmCisJICAgICgod2wtPnN0YV9yYXRlX3NldCA+PiBIV19IVF9SQVRFU19PRkZTRVQpICE9CisJICAgICAgc3RhLT5odF9jYXAubWNzLnJ4X21hc2tbMF0pKSB7CisJCS8qIENsZWFuIE1DUyBiaXRzIGJlZm9yZSBzZXR0aW5nIHRoZW0gKi8KKwkJd2wtPnN0YV9yYXRlX3NldCAmPSBIV19CR19SQVRFU19NQVNLOworCQl3bC0+c3RhX3JhdGVfc2V0IHw9CisJCQkoc3RhLT5odF9jYXAubWNzLnJ4X21hc2tbMF0gPDwgSFdfSFRfUkFURVNfT0ZGU0VUKTsKKwkJc2V0X2JpdChXTDEyNzFfRkxBR19TVEFfUkFURVNfQ0hBTkdFRCwgJndsLT5mbGFncyk7CisJfQorI2VuZGlmCisJd2wtPnR4X3F1ZXVlX2NvdW50Kys7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2wtPndsX2xvY2ssIGZsYWdzKTsKKworCS8qIHF1ZXVlIHRoZSBwYWNrZXQgKi8KKwlxID0gd2wxMjcxX3R4X2dldF9xdWV1ZShza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKSk7CisJc2tiX3F1ZXVlX3RhaWwoJndsLT50eF9xdWV1ZVtxXSwgc2tiKTsKKworCS8qCisJICogVGhlIGNoaXAgc3BlY2lmaWMgc2V0dXAgbXVzdCBydW4gYmVmb3JlIHRoZSBmaXJzdCBUWCBwYWNrZXQgLQorCSAqIGJlZm9yZSB0aGF0LCB0aGUgdHhfd29yayB3aWxsIG5vdCBiZSBpbml0aWFsaXplZCEKKwkgKi8KKworCWlmICghdGVzdF9iaXQoV0wxMjcxX0ZMQUdfRldfVFhfQlVTWSwgJndsLT5mbGFncykpCisJCWllZWU4MDIxMV9xdWV1ZV93b3JrKHdsLT5odywgJndsLT50eF93b3JrKTsKKworCS8qCisJICogVGhlIHdvcmtxdWV1ZSBpcyBzbG93IHRvIHByb2Nlc3MgdGhlIHR4X3F1ZXVlIGFuZCB3ZSBuZWVkIHN0b3AKKwkgKiB0aGUgcXVldWUgaGVyZSwgb3RoZXJ3aXNlIHRoZSBxdWV1ZSB3aWxsIGdldCB0b28gbG9uZy4KKwkgKi8KKwlpZiAod2wtPnR4X3F1ZXVlX2NvdW50ID49IFdMMTI3MV9UWF9RVUVVRV9ISUdIX1dBVEVSTUFSSykgeworCQl3bDEyNzFfZGVidWcoREVCVUdfVFgsICJvcF90eDogc3RvcHBpbmcgcXVldWVzIik7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJndsLT53bF9sb2NrLCBmbGFncyk7CisJCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyh3bC0+aHcpOworCQlzZXRfYml0KFdMMTI3MV9GTEFHX1RYX1FVRVVFX1NUT1BQRUQsICZ3bC0+ZmxhZ3MpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3bC0+d2xfbG9jaywgZmxhZ3MpOworCX0KKworCXJldHVybiBORVRERVZfVFhfT0s7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgd2wxMjcxX2Rldl9ub3RpZmllciA9IHsKKwkubm90aWZpZXJfY2FsbCA9IHdsMTI3MV9kZXZfbm90aWZ5LAorfTsKKworc3RhdGljIGludCB3bDEyNzFfb3Bfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJd2wxMjcxX2RlYnVnKERFQlVHX01BQzgwMjExLCAibWFjODAyMTEgc3RhcnQiKTsKKworCS8qCisJICogV2UgaGF2ZSB0byBkZWxheSB0aGUgYm9vdGluZyBvZiB0aGUgaGFyZHdhcmUgYmVjYXVzZQorCSAqIHdlIG5lZWQgdG8ga25vdyB0aGUgbG9jYWwgTUFDIGFkZHJlc3MgYmVmb3JlIGRvd25sb2FkaW5nIGFuZAorCSAqIGluaXRpYWxpemluZyB0aGUgZmlybXdhcmUuIFRoZSBNQUMgYWRkcmVzcyBjYW5ub3QgYmUgY2hhbmdlZAorCSAqIGFmdGVyIGJvb3QsIGFuZCB3aXRob3V0IHRoZSBwcm9wZXIgTUFDIGFkZHJlc3MsIHRoZSBmaXJtd2FyZQorCSAqIHdpbGwgbm90IGZ1bmN0aW9uIHByb3Blcmx5LgorCSAqCisJICogVGhlIE1BQyBhZGRyZXNzIGlzIGZpcnN0IGtub3duIHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcgaW50ZXJmYWNlCisJICogaXMgYWRkZWQuIFRoYXQgaXMgd2hlcmUgd2Ugd2lsbCBpbml0aWFsaXplIHRoZSBoYXJkd2FyZS4KKwkgKi8KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB3bDEyNzFfb3Bfc3RvcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwl3bDEyNzFfZGVidWcoREVCVUdfTUFDODAyMTEsICJtYWM4MDIxMSBzdG9wIik7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjcxX29wX2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKK3sKKwlzdHJ1Y3Qgd2wxMjcxICp3bCA9IGh3LT5wcml2OworCXN0cnVjdCB3aXBoeSAqd2lwaHkgPSBody0+d2lwaHk7CisJaW50IHJldHJpZXMgPSBXTDEyNzFfQk9PVF9SRVRSSUVTOworCWludCByZXQgPSAwOworCWJvb2wgYm9vdGVkID0gZmFsc2U7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfTUFDODAyMTEsICJtYWM4MDIxMSBhZGQgaW50ZXJmYWNlIHR5cGUgJWQgbWFjICVwTSIsCisJCSAgICAgdmlmLT50eXBlLCB2aWYtPmFkZHIpOworCisJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKKwlpZiAod2wtPnZpZikgeworCQl3bDEyNzFfZGVidWcoREVCVUdfTUFDODAyMTEsCisJCQkgICAgICJtdWx0aXBsZSB2aWZzIGFyZSBub3Qgc3VwcG9ydGVkIHlldCIpOworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gb3V0OworCX0KKworCXN3aXRjaCAodmlmLT50eXBlKSB7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgorCQl3bC0+YnNzX3R5cGUgPSBCU1NfVFlQRV9TVEFfQlNTOworCQl3bC0+c2V0X2Jzc190eXBlID0gQlNTX1RZUEVfU1RBX0JTUzsKKwkJYnJlYWs7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKKwkJd2wtPmJzc190eXBlID0gQlNTX1RZUEVfSUJTUzsKKwkJd2wtPnNldF9ic3NfdHlwZSA9IEJTU19UWVBFX1NUQV9CU1M7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FT1BOT1RTVVBQOworCQlnb3RvIG91dDsKKwl9CisKKwltZW1jcHkod2wtPm1hY19hZGRyLCB2aWYtPmFkZHIsIEVUSF9BTEVOKTsKKworCWlmICh3bC0+c3RhdGUgIT0gV0wxMjcxX1NUQVRFX09GRikgeworCQl3bDEyNzFfZXJyb3IoImNhbm5vdCBzdGFydCBiZWNhdXNlIG5vdCBpbiBvZmYgc3RhdGU6ICVkIiwKKwkJCSAgICAgd2wtPnN0YXRlKTsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIG91dDsKKwl9CisKKwl3aGlsZSAocmV0cmllcykgeworCQlyZXRyaWVzLS07CisJCXJldCA9IHdsMTI3MV9jaGlwX3dha2V1cCh3bCk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBwb3dlcl9vZmY7CisKKwkJcmV0ID0gd2wxMjcxX2Jvb3Qod2wpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gcG93ZXJfb2ZmOworCisJCXJldCA9IHdsMTI3MV9od19pbml0KHdsKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGlycV9kaXNhYmxlOworCisJCWJvb3RlZCA9IHRydWU7CisJCWJyZWFrOworCitpcnFfZGlzYWJsZToKKwkJd2wxMjcxX2Rpc2FibGVfaW50ZXJydXB0cyh3bCk7CisJCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKKwkJLyogVW5sb2NraW5nIHRoZSBtdXRleCBpbiB0aGUgbWlkZGxlIG9mIGhhbmRsaW5nIGlzCisJCSAgIGluaGVyZW50bHkgdW5zYWZlLiBJbiB0aGlzIGNhc2Ugd2UgZGVlbSBpdCBzYWZlIHRvIGRvLAorCQkgICBiZWNhdXNlIHdlIG5lZWQgdG8gbGV0IGFueSBwb3NzaWJseSBwZW5kaW5nIElSUSBvdXQgb2YKKwkJICAgdGhlIHN5c3RlbSAoYW5kIHdoaWxlIHdlIGFyZSBXTDEyNzFfU1RBVEVfT0ZGIHRoZSBJUlEKKwkJICAgd29yayBmdW5jdGlvbiB3aWxsIG5vdCBkbyBhbnl0aGluZy4pIEFsc28sIGFueSBvdGhlcgorCQkgICBwb3NzaWJsZSBjb25jdXJyZW50IG9wZXJhdGlvbnMgd2lsbCBmYWlsIGR1ZSB0byB0aGUKKwkJICAgY3VycmVudCBzdGF0ZSwgaGVuY2UgdGhlIHdsMTI3MSBzdHJ1Y3Qgc2hvdWxkIGJlIHNhZmUuICovCisJCWNhbmNlbF93b3JrX3N5bmMoJndsLT5pcnFfd29yayk7CisJCW11dGV4X2xvY2soJndsLT5tdXRleCk7Citwb3dlcl9vZmY6CisJCXdsMTI3MV9wb3dlcl9vZmYod2wpOworCX0KKworCWlmICghYm9vdGVkKSB7CisJCXdsMTI3MV9lcnJvcigiZmlybXdhcmUgYm9vdCBmYWlsZWQgZGVzcGl0ZSAlZCByZXRyaWVzIiwKKwkJCSAgICAgV0wxMjcxX0JPT1RfUkVUUklFUyk7CisJCWdvdG8gb3V0OworCX0KKworCXdsLT52aWYgPSB2aWY7CisJd2wtPnN0YXRlID0gV0wxMjcxX1NUQVRFX09OOworCXdsMTI3MV9pbmZvKCJmaXJtd2FyZSBib290ZWQgKCVzKSIsIHdsLT5jaGlwLmZ3X3Zlcik7CisKKwkvKiB1cGRhdGUgaHcvZncgdmVyc2lvbiBpbmZvIGluIHdpcGh5IHN0cnVjdCAqLworCXdpcGh5LT5od192ZXJzaW9uID0gd2wtPmNoaXAuaWQ7CisJc3RybmNweSh3aXBoeS0+ZndfdmVyc2lvbiwgd2wtPmNoaXAuZndfdmVyLAorCQlzaXplb2Yod2lwaHktPmZ3X3ZlcnNpb24pKTsKKworCS8qCisJICogTm93IHdlIGtub3cgaWYgMTFhIGlzIHN1cHBvcnRlZCAoaW5mbyBmcm9tIHRoZSBOVlMpLCBzbyBkaXNhYmxlCisJICogMTFhIGNoYW5uZWxzIGlmIG5vdCBzdXBwb3J0ZWQKKwkgKi8KKwlpZiAoIXdsLT5lbmFibGVfMTFhKQorCQl3aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0tPm5fY2hhbm5lbHMgPSAwOworCisJd2wxMjcxX2RlYnVnKERFQlVHX01BQzgwMjExLCAiMTFhIGlzICVzc3VwcG9ydGVkIiwKKwkJICAgICB3bC0+ZW5hYmxlXzExYSA/ICIiIDogIm5vdCAiKTsKKworb3V0OgorCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKKworCWlmICghcmV0KQorCQlsaXN0X2FkZCgmd2wtPmxpc3QsICZ3bF9saXN0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fd2wxMjcxX29wX3JlbW92ZV9pbnRlcmZhY2Uoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJaW50IGk7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfTUFDODAyMTEsICJtYWM4MDIxMSByZW1vdmUgaW50ZXJmYWNlIik7CisKKwl3bDEyNzFfaW5mbygiZG93biIpOworCisJbGlzdF9kZWwoJndsLT5saXN0KTsKKworCVdBUk5fT04od2wtPnN0YXRlICE9IFdMMTI3MV9TVEFURV9PTik7CisKKwkvKiBlbmFibGUgZHluIHBzIGp1c3QgaW4gY2FzZSAoaWYgbGVmdCBvbiBkdWUgdG8gZncgY3Jhc2ggZXRjKSAqLworCWlmICh3bC0+YnNzX3R5cGUgPT0gQlNTX1RZUEVfU1RBX0JTUykKKwkJaWVlZTgwMjExX2VuYWJsZV9keW5fcHMod2wtPnZpZik7CisKKwlpZiAod2wtPnNjYW4uc3RhdGUgIT0gV0wxMjcxX1NDQU5fU1RBVEVfSURMRSkgeworCQl3bC0+c2Nhbi5zdGF0ZSA9IFdMMTI3MV9TQ0FOX1NUQVRFX0lETEU7CisJCWtmcmVlKHdsLT5zY2FuLnNjYW5uZWRfY2gpOworCQl3bC0+c2Nhbi5zY2FubmVkX2NoID0gTlVMTDsKKwkJd2wtPnNjYW4ucmVxID0gTlVMTDsKKwkJaWVlZTgwMjExX3NjYW5fY29tcGxldGVkKHdsLT5odywgdHJ1ZSk7CisJfQorCisJd2wtPnN0YXRlID0gV0wxMjcxX1NUQVRFX09GRjsKKworCXdsMTI3MV9kaXNhYmxlX2ludGVycnVwdHMod2wpOworCisJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOworCisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZ3bC0+c2Nhbl9jb21wbGV0ZV93b3JrKTsKKwljYW5jZWxfd29ya19zeW5jKCZ3bC0+aXJxX3dvcmspOworCWNhbmNlbF93b3JrX3N5bmMoJndsLT50eF93b3JrKTsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJndsLT5wc3BvbGxfd29yayk7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZ3bC0+ZWxwX3dvcmspOworCisJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKKworCS8qIGxldCdzIG5vdGlmeSBNQUM4MDIxMSBhYm91dCB0aGUgcmVtYWluaW5nIHBlbmRpbmcgVFggZnJhbWVzICovCisJd2wxMjcxX3R4X3Jlc2V0KHdsKTsKKwl3bDEyNzFfcG93ZXJfb2ZmKHdsKTsKKworCW1lbXNldCh3bC0+YnNzaWQsIDAsIEVUSF9BTEVOKTsKKwltZW1zZXQod2wtPnNzaWQsIDAsIElXX0VTU0lEX01BWF9TSVpFICsgMSk7CisJd2wtPnNzaWRfbGVuID0gMDsKKwl3bC0+YnNzX3R5cGUgPSBNQVhfQlNTX1RZUEU7CisJd2wtPnNldF9ic3NfdHlwZSA9IE1BWF9CU1NfVFlQRTsKKwl3bC0+YmFuZCA9IElFRUU4MDIxMV9CQU5EXzJHSFo7CisKKwl3bC0+cnhfY291bnRlciA9IDA7CisJd2wtPnBzbV9lbnRyeV9yZXRyeSA9IDA7CisJd2wtPnBvd2VyX2xldmVsID0gV0wxMjcxX0RFRkFVTFRfUE9XRVJfTEVWRUw7CisJd2wtPnR4X2Jsb2Nrc19hdmFpbGFibGUgPSAwOworCXdsLT50eF9yZXN1bHRzX2NvdW50ID0gMDsKKwl3bC0+dHhfcGFja2V0c19jb3VudCA9IDA7CisJd2wtPnR4X3NlY3VyaXR5X2xhc3Rfc2VxID0gMDsKKwl3bC0+dHhfc2VjdXJpdHlfc2VxID0gMDsKKwl3bC0+dGltZV9vZmZzZXQgPSAwOworCXdsLT5zZXNzaW9uX2NvdW50ZXIgPSAwOworCXdsLT5yYXRlX3NldCA9IENPTkZfVFhfUkFURV9NQVNLX0JBU0lDOworCXdsLT5zdGFfcmF0ZV9zZXQgPSAwOworCXdsLT5mbGFncyA9IDA7CisJd2wtPnZpZiA9IE5VTEw7CisJd2wtPmZpbHRlcnMgPSAwOworCisJZm9yIChpID0gMDsgaSA8IE5VTV9UWF9RVUVVRVM7IGkrKykKKwkJd2wtPnR4X2Jsb2Nrc19mcmVlZFtpXSA9IDA7CisKKwl3bDEyNzFfZGVidWdmc19yZXNldCh3bCk7CisKKwlrZnJlZSh3bC0+Zndfc3RhdHVzKTsKKwl3bC0+Zndfc3RhdHVzID0gTlVMTDsKKwlrZnJlZSh3bC0+dHhfcmVzX2lmKTsKKwl3bC0+dHhfcmVzX2lmID0gTlVMTDsKKwlrZnJlZSh3bC0+dGFyZ2V0X21lbV9tYXApOworCXdsLT50YXJnZXRfbWVtX21hcCA9IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIHdsMTI3MV9vcF9yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQoreworCXN0cnVjdCB3bDEyNzEgKndsID0gaHctPnByaXY7CisKKwltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOworCS8qCisJICogd2wtPnZpZiBjYW4gYmUgbnVsbCBoZXJlIGlmIHNvbWVvbmUgc2h1dHMgZG93biB0aGUgaW50ZXJmYWNlCisJICoganVzdCB3aGVuIGhhcmR3YXJlIHJlY292ZXJ5IGhhcyBiZWVuIHN0YXJ0ZWQuCisJICovCisJaWYgKHdsLT52aWYpIHsKKwkJV0FSTl9PTih3bC0+dmlmICE9IHZpZik7CisJCV9fd2wxMjcxX29wX3JlbW92ZV9pbnRlcmZhY2Uod2wpOworCX0KKworCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKKwljYW5jZWxfd29ya19zeW5jKCZ3bC0+cmVjb3Zlcnlfd29yayk7Cit9CisKK3N0YXRpYyB2b2lkIHdsMTI3MV9jb25maWd1cmVfZmlsdGVycyhzdHJ1Y3Qgd2wxMjcxICp3bCwgdW5zaWduZWQgaW50IGZpbHRlcnMpCit7CisJd2wtPnJ4X2NvbmZpZyA9IFdMMTI3MV9ERUZBVUxUX1JYX0NPTkZJRzsKKwl3bC0+cnhfZmlsdGVyID0gV0wxMjcxX0RFRkFVTFRfUlhfRklMVEVSOworCisJLyogY29tYmluZSByZXF1ZXN0ZWQgZmlsdGVycyB3aXRoIGN1cnJlbnQgZmlsdGVyIGNvbmZpZyAqLworCWZpbHRlcnMgPSB3bC0+ZmlsdGVycyB8IGZpbHRlcnM7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfRklMVEVSUywgIlJYIGZpbHRlcnMgc2V0OiAiKTsKKworCWlmIChmaWx0ZXJzICYgRklGX1BST01JU0NfSU5fQlNTKSB7CisJCXdsMTI3MV9kZWJ1ZyhERUJVR19GSUxURVJTLCAiIC0gRklGX1BST01JU0NfSU5fQlNTIik7CisJCXdsLT5yeF9jb25maWcgJj0gfkNGR19VTklfRklMVEVSX0VOOworCQl3bC0+cnhfY29uZmlnIHw9IENGR19CU1NJRF9GSUxURVJfRU47CisJfQorCWlmIChmaWx0ZXJzICYgRklGX0JDTl9QUkJSRVNQX1BST01JU0MpIHsKKwkJd2wxMjcxX2RlYnVnKERFQlVHX0ZJTFRFUlMsICIgLSBGSUZfQkNOX1BSQlJFU1BfUFJPTUlTQyIpOworCQl3bC0+cnhfY29uZmlnICY9IH5DRkdfQlNTSURfRklMVEVSX0VOOworCQl3bC0+cnhfY29uZmlnICY9IH5DRkdfU1NJRF9GSUxURVJfRU47CisJfQorCWlmIChmaWx0ZXJzICYgRklGX09USEVSX0JTUykgeworCQl3bDEyNzFfZGVidWcoREVCVUdfRklMVEVSUywgIiAtIEZJRl9PVEhFUl9CU1MiKTsKKwkJd2wtPnJ4X2NvbmZpZyAmPSB+Q0ZHX0JTU0lEX0ZJTFRFUl9FTjsKKwl9CisJaWYgKGZpbHRlcnMgJiBGSUZfQ09OVFJPTCkgeworCQl3bDEyNzFfZGVidWcoREVCVUdfRklMVEVSUywgIiAtIEZJRl9DT05UUk9MIik7CisJCXdsLT5yeF9maWx0ZXIgfD0gQ0ZHX1JYX0NUTF9FTjsKKwl9CisJaWYgKGZpbHRlcnMgJiBGSUZfRkNTRkFJTCkgeworCQl3bDEyNzFfZGVidWcoREVCVUdfRklMVEVSUywgIiAtIEZJRl9GQ1NGQUlMIik7CisJCXdsLT5yeF9maWx0ZXIgfD0gQ0ZHX1JYX0ZDU19FUlJPUjsKKwl9Cit9CisKK3N0YXRpYyBpbnQgd2wxMjcxX2R1bW15X2pvaW4oc3RydWN0IHdsMTI3MSAqd2wpCit7CisJaW50IHJldCA9IDA7CisJLyogd2UgbmVlZCB0byB1c2UgYSBkdW1teSBCU1NJRCBmb3Igbm93ICovCisJc3RhdGljIGNvbnN0IHU4IGR1bW15X2Jzc2lkW0VUSF9BTEVOXSA9IHsgMHgwYiwgMHhhZCwgMHhkZSwKKwkJCQkJCSAgMHhhZCwgMHhiZSwgMHhlZiB9OworCisJbWVtY3B5KHdsLT5ic3NpZCwgZHVtbXlfYnNzaWQsIEVUSF9BTEVOKTsKKworCS8qIHBhc3MgdGhyb3VnaCBmcmFtZXMgZnJvbSBhbGwgQlNTICovCisJd2wxMjcxX2NvbmZpZ3VyZV9maWx0ZXJzKHdsLCBGSUZfT1RIRVJfQlNTKTsKKworCXJldCA9IHdsMTI3MV9jbWRfam9pbih3bCwgd2wtPnNldF9ic3NfdHlwZSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJc2V0X2JpdChXTDEyNzFfRkxBR19KT0lORUQsICZ3bC0+ZmxhZ3MpOworCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB3bDEyNzFfam9pbihzdHJ1Y3Qgd2wxMjcxICp3bCwgYm9vbCBzZXRfYXNzb2MpCit7CisJaW50IHJldDsKKworCS8qCisJICogT25lIG9mIHRoZSBzaWRlIGVmZmVjdHMgb2YgdGhlIEpPSU4gY29tbWFuZCBpcyB0aGF0IGlzIGNsZWFycworCSAqIFdQQS9XUEEyIGtleXMgZnJvbSB0aGUgY2hpcHNldC4gUGVyZm9ybWluZyBhIEpPSU4gd2hpbGUgYXNzb2NpYXRlZAorCSAqIHRvIGEgV1BBL1dQQTIgYWNjZXNzIHBvaW50IHdpbGwgdGhlcmVmb3JlIGtpbGwgdGhlIGRhdGEtcGF0aC4KKwkgKiBDdXJyZW50bHkgdGhlcmUgaXMgbm8gc3VwcG9ydGVkIHNjZW5hcmlvIGZvciBKT0lOIGR1cmluZworCSAqIGFzc29jaWF0aW9uIC0gaWYgaXQgYmVjb21lcyBhIHN1cHBvcnRlZCBzY2VuYXJpbywgdGhlIFdQQS9XUEEyIGtleXMKKwkgKiBtdXN0IGJlIGhhbmRsZWQgc29tZWhvdy4KKwkgKgorCSAqLworCWlmICh0ZXN0X2JpdChXTDEyNzFfRkxBR19TVEFfQVNTT0NJQVRFRCwgJndsLT5mbGFncykpCisJCXdsMTI3MV9pbmZvKCJKT0lOIHdoaWxlIGFzc29jaWF0ZWQuIik7CisKKwlpZiAoc2V0X2Fzc29jKQorCQlzZXRfYml0KFdMMTI3MV9GTEFHX1NUQV9BU1NPQ0lBVEVELCAmd2wtPmZsYWdzKTsKKworCXJldCA9IHdsMTI3MV9jbWRfam9pbih3bCwgd2wtPnNldF9ic3NfdHlwZSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJc2V0X2JpdChXTDEyNzFfRkxBR19KT0lORUQsICZ3bC0+ZmxhZ3MpOworCisJaWYgKCF0ZXN0X2JpdChXTDEyNzFfRkxBR19TVEFfQVNTT0NJQVRFRCwgJndsLT5mbGFncykpCisJCWdvdG8gb3V0OworCisJLyoKKwkgKiBUaGUgam9pbiBjb21tYW5kIGRpc2FibGUgdGhlIGtlZXAtYWxpdmUgbW9kZSwgc2h1dCBkb3duIGl0cyBwcm9jZXNzLAorCSAqIGFuZCBhbHNvIGNsZWFyIHRoZSB0ZW1wbGF0ZSBjb25maWcsIHNvIHdlIG5lZWQgdG8gcmVzZXQgaXQgYWxsIGFmdGVyCisJICogdGhlIGpvaW4uIFRoZSBhY3hfYWlkIHN0YXJ0cyB0aGUga2VlcC1hbGl2ZSBwcm9jZXNzLCBhbmQgdGhlIG9yZGVyCisJICogb2YgdGhlIGNvbW1hbmRzIGJlbG93IGlzIHJlbGV2YW50LgorCSAqLworCXJldCA9IHdsMTI3MV9hY3hfa2VlcF9hbGl2ZV9tb2RlKHdsLCB0cnVlKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSB3bDEyNzFfYWN4X2FpZCh3bCwgd2wtPmFpZCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJcmV0ID0gd2wxMjcxX2NtZF9idWlsZF9rbHZfbnVsbF9kYXRhKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSB3bDEyNzFfYWN4X2tlZXBfYWxpdmVfY29uZmlnKHdsLCBDTURfVEVNUExfS0xWX0lEWF9OVUxMX0RBVEEsCisJCQkJCSAgIEFDWF9LRUVQX0FMSVZFX1RQTF9WQUxJRCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB3bDEyNzFfdW5qb2luKHN0cnVjdCB3bDEyNzEgKndsKQoreworCWludCByZXQ7CisKKwkvKiB0byBzdG9wIGxpc3RlbmluZyB0byBhIGNoYW5uZWwsIHdlIGRpc2Nvbm5lY3QgKi8KKwlyZXQgPSB3bDEyNzFfY21kX2Rpc2Nvbm5lY3Qod2wpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCWNsZWFyX2JpdChXTDEyNzFfRkxBR19KT0lORUQsICZ3bC0+ZmxhZ3MpOworCW1lbXNldCh3bC0+YnNzaWQsIDAsIEVUSF9BTEVOKTsKKworCS8qIHN0b3AgZmlsdGVydGluZyBwYWNrZXRzIGJhc2VkIG9uIGJzc2lkICovCisJd2wxMjcxX2NvbmZpZ3VyZV9maWx0ZXJzKHdsLCBGSUZfT1RIRVJfQlNTKTsKKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHdsMTI3MV9zZXRfYmFuZF9yYXRlKHN0cnVjdCB3bDEyNzEgKndsKQoreworCWlmICh3bC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haKQorCQl3bC0+YmFzaWNfcmF0ZV9zZXQgPSB3bC0+Y29uZi50eC5iYXNpY19yYXRlOworCWVsc2UKKwkJd2wtPmJhc2ljX3JhdGVfc2V0ID0gd2wtPmNvbmYudHguYmFzaWNfcmF0ZV81OworfQorCitzdGF0aWMgdTMyIHdsMTI3MV9taW5fcmF0ZV9nZXQoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJaW50IGk7CisJdTMyIHJhdGUgPSAwOworCisJaWYgKCF3bC0+YmFzaWNfcmF0ZV9zZXQpIHsKKwkJV0FSTl9PTigxKTsKKwkJd2wtPmJhc2ljX3JhdGVfc2V0ID0gd2wtPmNvbmYudHguYmFzaWNfcmF0ZTsKKwl9CisKKwlmb3IgKGkgPSAwOyAhcmF0ZTsgaSsrKSB7CisJCWlmICgod2wtPmJhc2ljX3JhdGVfc2V0ID4+IGkpICYgMHgxKQorCQkJcmF0ZSA9IDEgPDwgaTsKKwl9CisKKwlyZXR1cm4gcmF0ZTsKK30KKworc3RhdGljIGludCB3bDEyNzFfaGFuZGxlX2lkbGUoc3RydWN0IHdsMTI3MSAqd2wsIGJvb2wgaWRsZSkKK3sKKwlpbnQgcmV0OworCisJaWYgKGlkbGUpIHsKKwkJaWYgKHRlc3RfYml0KFdMMTI3MV9GTEFHX0pPSU5FRCwgJndsLT5mbGFncykpIHsKKwkJCXJldCA9IHdsMTI3MV91bmpvaW4od2wpOworCQkJaWYgKHJldCA8IDApCisJCQkJZ290byBvdXQ7CisJCX0KKwkJd2wtPnJhdGVfc2V0ID0gd2wxMjcxX21pbl9yYXRlX2dldCh3bCk7CisJCXdsLT5zdGFfcmF0ZV9zZXQgPSAwOworCQlyZXQgPSB3bDEyNzFfYWN4X3JhdGVfcG9saWNpZXMod2wpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gb3V0OworCQlyZXQgPSB3bDEyNzFfYWN4X2tlZXBfYWxpdmVfY29uZmlnKAorCQkJd2wsIENNRF9URU1QTF9LTFZfSURYX05VTExfREFUQSwKKwkJCUFDWF9LRUVQX0FMSVZFX1RQTF9JTlZBTElEKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIG91dDsKKwkJc2V0X2JpdChXTDEyNzFfRkxBR19JRExFLCAmd2wtPmZsYWdzKTsKKwl9IGVsc2UgeworCQkvKiBpbmNyZW1lbnQgdGhlIHNlc3Npb24gY291bnRlciAqLworCQl3bC0+c2Vzc2lvbl9jb3VudGVyKys7CisJCWlmICh3bC0+c2Vzc2lvbl9jb3VudGVyID49IFNFU1NJT05fQ09VTlRFUl9NQVgpCisJCQl3bC0+c2Vzc2lvbl9jb3VudGVyID0gMDsKKwkJcmV0ID0gd2wxMjcxX2R1bW15X2pvaW4od2wpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gb3V0OworCQljbGVhcl9iaXQoV0wxMjcxX0ZMQUdfSURMRSwgJndsLT5mbGFncyk7CisJfQorCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB3bDEyNzFfb3BfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgY2hhbmdlZCkKK3sKKwlzdHJ1Y3Qgd2wxMjcxICp3bCA9IGh3LT5wcml2OworCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZody0+Y29uZjsKKwlpbnQgY2hhbm5lbCwgcmV0ID0gMDsKKworCWNoYW5uZWwgPSBpZWVlODAyMTFfZnJlcXVlbmN5X3RvX2NoYW5uZWwoY29uZi0+Y2hhbm5lbC0+Y2VudGVyX2ZyZXEpOworCisJd2wxMjcxX2RlYnVnKERFQlVHX01BQzgwMjExLCAibWFjODAyMTEgY29uZmlnIGNoICVkIHBzbSAlcyBwb3dlciAlZCAlcyIsCisJCSAgICAgY2hhbm5lbCwKKwkJICAgICBjb25mLT5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTID8gIm9uIiA6ICJvZmYiLAorCQkgICAgIGNvbmYtPnBvd2VyX2xldmVsLAorCQkgICAgIGNvbmYtPmZsYWdzICYgSUVFRTgwMjExX0NPTkZfSURMRSA/ICJpZGxlIiA6ICJpbiB1c2UiKTsKKworCS8qCisJICogbWFjODAyMTEgd2lsbCBnbyB0byBpZGxlIG5lYXJseSBpbW1lZGlhdGVseSBhZnRlciB0cmFuc21pdHRpbmcgc29tZQorCSAqIGZyYW1lcywgc3VjaCBhcyB0aGUgZGVhdXRoLiBUbyBtYWtlIHN1cmUgdGhvc2UgZnJhbWVzIHJlYWNoIHRoZSBhaXIsCisJICogd2FpdCBoZXJlIHVudGlsIHRoZSBUWCBxdWV1ZSBpcyBmdWxseSBmbHVzaGVkLgorCSAqLworCWlmICgoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9JRExFKSAmJgorCSAgICAoY29uZi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9JRExFKSkKKwkJd2wxMjcxX3R4X2ZsdXNoKHdsKTsKKworCW11dGV4X2xvY2soJndsLT5tdXRleCk7CisKKwlpZiAodW5saWtlbHkod2wtPnN0YXRlID09IFdMMTI3MV9TVEFURV9PRkYpKSB7CisJCXJldCA9IC1FQUdBSU47CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IHdsMTI3MV9wc19lbHBfd2FrZXVwKHdsLCBmYWxzZSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJLyogaWYgdGhlIGNoYW5uZWwgY2hhbmdlcyB3aGlsZSBqb2luZWQsIGpvaW4gYWdhaW4gKi8KKwlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9DSEFOTkVMICYmCisJICAgICgod2wtPmJhbmQgIT0gY29uZi0+Y2hhbm5lbC0+YmFuZCkgfHwKKwkgICAgICh3bC0+Y2hhbm5lbCAhPSBjaGFubmVsKSkpIHsKKwkJd2wtPmJhbmQgPSBjb25mLT5jaGFubmVsLT5iYW5kOworCQl3bC0+Y2hhbm5lbCA9IGNoYW5uZWw7CisKKwkJLyoKKwkJICogRklYTUU6IHRoZSBtYWM4MDIxMSBzaG91bGQgcmVhbGx5IHByb3ZpZGUgYSBmaXhlZCByYXRlCisJCSAqIHRvIHVzZSBoZXJlLiBmb3Igbm93LCBqdXN0IHVzZSB0aGUgc21hbGxlc3QgcG9zc2libGUgcmF0ZQorCQkgKiBmb3IgdGhlIGJhbmQgYXMgYSBmaXhlZCByYXRlIGZvciBhc3NvY2lhdGlvbiBmcmFtZXMgYW5kCisJCSAqIG90aGVyIGNvbnRyb2wgbWVzc2FnZXMuCisJCSAqLworCQlpZiAoIXRlc3RfYml0KFdMMTI3MV9GTEFHX1NUQV9BU1NPQ0lBVEVELCAmd2wtPmZsYWdzKSkKKwkJCXdsMTI3MV9zZXRfYmFuZF9yYXRlKHdsKTsKKworCQl3bC0+YmFzaWNfcmF0ZSA9IHdsMTI3MV9taW5fcmF0ZV9nZXQod2wpOworCQlyZXQgPSB3bDEyNzFfYWN4X3JhdGVfcG9saWNpZXMod2wpOworCQlpZiAocmV0IDwgMCkKKwkJCXdsMTI3MV93YXJuaW5nKCJyYXRlIHBvbGljeSBmb3IgdXBkYXRlIGNoYW5uZWwgIgorCQkJCSAgICAgICAiZmFpbGVkICVkIiwgcmV0KTsKKworCQlpZiAodGVzdF9iaXQoV0wxMjcxX0ZMQUdfSk9JTkVELCAmd2wtPmZsYWdzKSkgeworCQkJcmV0ID0gd2wxMjcxX2pvaW4od2wsIGZhbHNlKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCXdsMTI3MV93YXJuaW5nKCJjbWQgam9pbiB0byB1cGRhdGUgY2hhbm5lbCAiCisJCQkJCSAgICAgICAiZmFpbGVkICVkIiwgcmV0KTsKKwkJfQorCX0KKworCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0lETEUpIHsKKwkJcmV0ID0gd2wxMjcxX2hhbmRsZV9pZGxlKHdsLCBjb25mLT5mbGFncyAmIElFRUU4MDIxMV9DT05GX0lETEUpOworCQlpZiAocmV0IDwgMCkKKwkJCXdsMTI3MV93YXJuaW5nKCJpZGxlIG1vZGUgY2hhbmdlIGZhaWxlZCAlZCIsIHJldCk7CisJfQorCisJLyoKKwkgKiBpZiBtYWM4MDIxMSBjaGFuZ2VzIHRoZSBQU00gbW9kZSwgbWFrZSBzdXJlIHRoZSBtb2RlIGlzIG5vdAorCSAqIGluY29ycmVjdGx5IGNoYW5nZWQgYWZ0ZXIgdGhlIHBzcG9sbCBmYWlsdXJlIGFjdGl2ZSB3aW5kb3cuCisJICovCisJaWYgKGNoYW5nZWQgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUFMpCisJCWNsZWFyX2JpdChXTDEyNzFfRkxBR19QU1BPTExfRkFJTFVSRSwgJndsLT5mbGFncyk7CisKKwlpZiAoY29uZi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUyAmJgorCSAgICAhdGVzdF9iaXQoV0wxMjcxX0ZMQUdfUFNNX1JFUVVFU1RFRCwgJndsLT5mbGFncykpIHsKKwkJc2V0X2JpdChXTDEyNzFfRkxBR19QU01fUkVRVUVTVEVELCAmd2wtPmZsYWdzKTsKKworCQkvKgorCQkgKiBXZSBlbnRlciBQU00gb25seSBpZiB3ZSdyZSBhbHJlYWR5IGFzc29jaWF0ZWQuCisJCSAqIElmIHdlJ3JlIG5vdCwgd2UnbGwgZW50ZXIgaXQgd2hlbiBqb2luaW5nIGFuIFNTSUQsCisJCSAqIHRocm91Z2ggdGhlIGJzc19pbmZvX2NoYW5nZWQoKSBob29rLgorCQkgKi8KKwkJaWYgKHRlc3RfYml0KFdMMTI3MV9GTEFHX1NUQV9BU1NPQ0lBVEVELCAmd2wtPmZsYWdzKSkgeworCQkJd2wxMjcxX2RlYnVnKERFQlVHX1BTTSwgInBzbSBlbmFibGVkIik7CisJCQlyZXQgPSB3bDEyNzFfcHNfc2V0X21vZGUod2wsIFNUQVRJT05fUE9XRVJfU0FWRV9NT0RFLAorCQkJCQkJIHdsLT5iYXNpY19yYXRlLCB0cnVlKTsKKwkJfQorCX0gZWxzZSBpZiAoIShjb25mLT5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTKSAmJgorCQkgICB0ZXN0X2JpdChXTDEyNzFfRkxBR19QU01fUkVRVUVTVEVELCAmd2wtPmZsYWdzKSkgeworCQl3bDEyNzFfZGVidWcoREVCVUdfUFNNLCAicHNtIGRpc2FibGVkIik7CisKKwkJY2xlYXJfYml0KFdMMTI3MV9GTEFHX1BTTV9SRVFVRVNURUQsICZ3bC0+ZmxhZ3MpOworCisJCWlmICh0ZXN0X2JpdChXTDEyNzFfRkxBR19QU00sICZ3bC0+ZmxhZ3MpKQorCQkJcmV0ID0gd2wxMjcxX3BzX3NldF9tb2RlKHdsLCBTVEFUSU9OX0FDVElWRV9NT0RFLAorCQkJCQkJIHdsLT5iYXNpY19yYXRlLCB0cnVlKTsKKwl9CisKKwlpZiAoY29uZi0+cG93ZXJfbGV2ZWwgIT0gd2wtPnBvd2VyX2xldmVsKSB7CisJCXJldCA9IHdsMTI3MV9hY3hfdHhfcG93ZXIod2wsIGNvbmYtPnBvd2VyX2xldmVsKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIG91dF9zbGVlcDsKKworCQl3bC0+cG93ZXJfbGV2ZWwgPSBjb25mLT5wb3dlcl9sZXZlbDsKKwl9CisKK291dF9zbGVlcDoKKwl3bDEyNzFfcHNfZWxwX3NsZWVwKHdsKTsKKworb3V0OgorCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0cnVjdCB3bDEyNzFfZmlsdGVyX3BhcmFtcyB7CisJYm9vbCBlbmFibGVkOworCWludCBtY19saXN0X2xlbmd0aDsKKwl1OCBtY19saXN0W0FDWF9NQ19BRERSRVNTX0dST1VQX01BWF1bRVRIX0FMRU5dOworfTsKKworc3RhdGljIHU2NCB3bDEyNzFfb3BfcHJlcGFyZV9tdWx0aWNhc3Qoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgICAgIHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICptY19saXN0KQoreworCXN0cnVjdCB3bDEyNzFfZmlsdGVyX3BhcmFtcyAqZnA7CisJc3RydWN0IG5ldGRldl9od19hZGRyICpoYTsKKwlzdHJ1Y3Qgd2wxMjcxICp3bCA9IGh3LT5wcml2OworCisJaWYgKHVubGlrZWx5KHdsLT5zdGF0ZSA9PSBXTDEyNzFfU1RBVEVfT0ZGKSkKKwkJcmV0dXJuIDA7CisKKwlmcCA9IGt6YWxsb2Moc2l6ZW9mKCpmcCksIEdGUF9BVE9NSUMpOworCWlmICghZnApIHsKKwkJd2wxMjcxX2Vycm9yKCJPdXQgb2YgbWVtb3J5IHNldHRpbmcgZmlsdGVycy4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogdXBkYXRlIG11bHRpY2FzdCBmaWx0ZXJpbmcgcGFyYW1ldGVycyAqLworCWZwLT5tY19saXN0X2xlbmd0aCA9IDA7CisJaWYgKG5ldGRldl9od19hZGRyX2xpc3RfY291bnQobWNfbGlzdCkgPiBBQ1hfTUNfQUREUkVTU19HUk9VUF9NQVgpIHsKKwkJZnAtPmVuYWJsZWQgPSBmYWxzZTsKKwl9IGVsc2UgeworCQlmcC0+ZW5hYmxlZCA9IHRydWU7CisJCW5ldGRldl9od19hZGRyX2xpc3RfZm9yX2VhY2goaGEsIG1jX2xpc3QpIHsKKwkJCW1lbWNweShmcC0+bWNfbGlzdFtmcC0+bWNfbGlzdF9sZW5ndGhdLAorCQkJCQloYS0+YWRkciwgRVRIX0FMRU4pOworCQkJZnAtPm1jX2xpc3RfbGVuZ3RoKys7CisJCX0KKwl9CisKKwlyZXR1cm4gKHU2NCkodW5zaWduZWQgbG9uZylmcDsKK30KKworI2RlZmluZSBXTDEyNzFfU1VQUE9SVEVEX0ZJTFRFUlMgKEZJRl9QUk9NSVNDX0lOX0JTUyB8IFwKKwkJCQkgIEZJRl9BTExNVUxUSSB8IFwKKwkJCQkgIEZJRl9GQ1NGQUlMIHwgXAorCQkJCSAgRklGX0JDTl9QUkJSRVNQX1BST01JU0MgfCBcCisJCQkJICBGSUZfQ09OVFJPTCB8IFwKKwkJCQkgIEZJRl9PVEhFUl9CU1MpCisKK3N0YXRpYyB2b2lkIHdsMTI3MV9vcF9jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgY2hhbmdlZCwKKwkJCQkgICAgICAgdW5zaWduZWQgaW50ICp0b3RhbCwgdTY0IG11bHRpY2FzdCkKK3sKKwlzdHJ1Y3Qgd2wxMjcxX2ZpbHRlcl9wYXJhbXMgKmZwID0gKHZvaWQgKikodW5zaWduZWQgbG9uZyltdWx0aWNhc3Q7CisJc3RydWN0IHdsMTI3MSAqd2wgPSBody0+cHJpdjsKKwlpbnQgcmV0OworCisJd2wxMjcxX2RlYnVnKERFQlVHX01BQzgwMjExLCAibWFjODAyMTEgY29uZmlndXJlIGZpbHRlciIpOworCisJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKKworCSp0b3RhbCAmPSBXTDEyNzFfU1VQUE9SVEVEX0ZJTFRFUlM7CisJY2hhbmdlZCAmPSBXTDEyNzFfU1VQUE9SVEVEX0ZJTFRFUlM7CisKKwlpZiAodW5saWtlbHkod2wtPnN0YXRlID09IFdMMTI3MV9TVEFURV9PRkYpKQorCQlnb3RvIG91dDsKKworCXJldCA9IHdsMTI3MV9wc19lbHBfd2FrZXVwKHdsLCBmYWxzZSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisKKwlpZiAoKnRvdGFsICYgRklGX0FMTE1VTFRJKQorCQlyZXQgPSB3bDEyNzFfYWN4X2dyb3VwX2FkZHJlc3NfdGJsKHdsLCBmYWxzZSwgTlVMTCwgMCk7CisJZWxzZSBpZiAoZnApCisJCXJldCA9IHdsMTI3MV9hY3hfZ3JvdXBfYWRkcmVzc190Ymwod2wsIGZwLT5lbmFibGVkLAorCQkJCQkJICAgZnAtPm1jX2xpc3QsCisJCQkJCQkgICBmcC0+bWNfbGlzdF9sZW5ndGgpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dF9zbGVlcDsKKworCS8qIGRldGVybWluZSwgd2hldGhlciBzdXBwb3J0ZWQgZmlsdGVyIHZhbHVlcyBoYXZlIGNoYW5nZWQgKi8KKwlpZiAoY2hhbmdlZCA9PSAwKQorCQlnb3RvIG91dF9zbGVlcDsKKworCS8qIGNvbmZpZ3VyZSBmaWx0ZXJzICovCisJd2wtPmZpbHRlcnMgPSAqdG90YWw7CisJd2wxMjcxX2NvbmZpZ3VyZV9maWx0ZXJzKHdsLCAwKTsKKworCS8qIGFwcGx5IGNvbmZpZ3VyZWQgZmlsdGVycyAqLworCXJldCA9IHdsMTI3MV9hY3hfcnhfY29uZmlnKHdsLCB3bC0+cnhfY29uZmlnLCB3bC0+cnhfZmlsdGVyKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXRfc2xlZXA7CisKK291dF9zbGVlcDoKKwl3bDEyNzFfcHNfZWxwX3NsZWVwKHdsKTsKKworb3V0OgorCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKKwlrZnJlZShmcCk7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjcxX29wX3NldF9rZXkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGVudW0gc2V0X2tleV9jbWQgY21kLAorCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAorCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXlfY29uZikKK3sKKwlzdHJ1Y3Qgd2wxMjcxICp3bCA9IGh3LT5wcml2OworCWNvbnN0IHU4ICphZGRyOworCWludCByZXQ7CisJdTMyIHR4X3NlcV8zMiA9IDA7CisJdTE2IHR4X3NlcV8xNiA9IDA7CisJdTgga2V5X3R5cGU7CisKKwlzdGF0aWMgY29uc3QgdTggYmNhc3RfYWRkcltFVEhfQUxFTl0gPQorCQl7IDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYgfTsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19NQUM4MDIxMSwgIm1hYzgwMjExIHNldCBrZXkiKTsKKworCWFkZHIgPSBzdGEgPyBzdGEtPmFkZHIgOiBiY2FzdF9hZGRyOworCisJd2wxMjcxX2RlYnVnKERFQlVHX0NSWVBULCAiQ01EOiAweCV4IiwgY21kKTsKKwl3bDEyNzFfZHVtcChERUJVR19DUllQVCwgIkFERFI6ICIsIGFkZHIsIEVUSF9BTEVOKTsKKwl3bDEyNzFfZGVidWcoREVCVUdfQ1JZUFQsICJLZXk6IGFsZ286MHgleCwgaWQ6JWQsIGxlbjolZCBmbGFncyAweCV4IiwKKwkJICAgICBrZXlfY29uZi0+Y2lwaGVyLCBrZXlfY29uZi0+a2V5aWR4LAorCQkgICAgIGtleV9jb25mLT5rZXlsZW4sIGtleV9jb25mLT5mbGFncyk7CisJd2wxMjcxX2R1bXAoREVCVUdfQ1JZUFQsICJLRVk6ICIsIGtleV9jb25mLT5rZXksIGtleV9jb25mLT5rZXlsZW4pOworCisJaWYgKGlzX3plcm9fZXRoZXJfYWRkcihhZGRyKSkgeworCQkvKiBXZSBkb250IHN1cHBvcnQgVFggb25seSBlbmNyeXB0aW9uICovCisJCXJldCA9IC1FT1BOT1RTVVBQOworCQlnb3RvIG91dDsKKwl9CisKKwltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOworCisJaWYgKHVubGlrZWx5KHdsLT5zdGF0ZSA9PSBXTDEyNzFfU1RBVEVfT0ZGKSkgeworCQlyZXQgPSAtRUFHQUlOOworCQlnb3RvIG91dF91bmxvY2s7CisJfQorCisJcmV0ID0gd2wxMjcxX3BzX2VscF93YWtldXAod2wsIGZhbHNlKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXRfdW5sb2NrOworCisJc3dpdGNoIChrZXlfY29uZi0+Y2lwaGVyKSB7CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MDoKKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDEwNDoKKwkJa2V5X3R5cGUgPSBLRVlfV0VQOworCisJCWtleV9jb25mLT5od19rZXlfaWR4ID0ga2V5X2NvbmYtPmtleWlkeDsKKwkJYnJlYWs7CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9US0lQOgorCQlrZXlfdHlwZSA9IEtFWV9US0lQOworCisJCWtleV9jb25mLT5od19rZXlfaWR4ID0ga2V5X2NvbmYtPmtleWlkeDsKKwkJdHhfc2VxXzMyID0gV0wxMjcxX1RYX1NFQ1VSSVRZX0hJMzIod2wtPnR4X3NlY3VyaXR5X3NlcSk7CisJCXR4X3NlcV8xNiA9IFdMMTI3MV9UWF9TRUNVUklUWV9MTzE2KHdsLT50eF9zZWN1cml0eV9zZXEpOworCQlicmVhazsKKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0NDTVA6CisJCWtleV90eXBlID0gS0VZX0FFUzsKKworCQlrZXlfY29uZi0+ZmxhZ3MgfD0gSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX0lWOworCQl0eF9zZXFfMzIgPSBXTDEyNzFfVFhfU0VDVVJJVFlfSEkzMih3bC0+dHhfc2VjdXJpdHlfc2VxKTsKKwkJdHhfc2VxXzE2ID0gV0wxMjcxX1RYX1NFQ1VSSVRZX0xPMTYod2wtPnR4X3NlY3VyaXR5X3NlcSk7CisJCWJyZWFrOworCWNhc2UgV0wxMjcxX0NJUEhFUl9TVUlURV9HRU06CisJCWtleV90eXBlID0gS0VZX0dFTTsKKwkJdHhfc2VxXzMyID0gV0wxMjcxX1RYX1NFQ1VSSVRZX0hJMzIod2wtPnR4X3NlY3VyaXR5X3NlcSk7CisJCXR4X3NlcV8xNiA9IFdMMTI3MV9UWF9TRUNVUklUWV9MTzE2KHdsLT50eF9zZWN1cml0eV9zZXEpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl3bDEyNzFfZXJyb3IoIlVua25vd24ga2V5IGFsZ28gMHgleCIsIGtleV9jb25mLT5jaXBoZXIpOworCisJCXJldCA9IC1FT1BOT1RTVVBQOworCQlnb3RvIG91dF9zbGVlcDsKKwl9CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU0VUX0tFWToKKwkJcmV0ID0gd2wxMjcxX2NtZF9zZXRfa2V5KHdsLCBLRVlfQUREX09SX1JFUExBQ0UsCisJCQkJCSBrZXlfY29uZi0+a2V5aWR4LCBrZXlfdHlwZSwKKwkJCQkJIGtleV9jb25mLT5rZXlsZW4sIGtleV9jb25mLT5rZXksCisJCQkJCSBhZGRyLCB0eF9zZXFfMzIsIHR4X3NlcV8xNik7CisJCWlmIChyZXQgPCAwKSB7CisJCQl3bDEyNzFfZXJyb3IoIkNvdWxkIG5vdCBhZGQgb3IgcmVwbGFjZSBrZXkiKTsKKwkJCWdvdG8gb3V0X3NsZWVwOworCQl9CisKKwkJLyogdGhlIGRlZmF1bHQgV0VQIGtleSBuZWVkcyB0byBiZSBjb25maWd1cmVkIGF0IGxlYXN0IG9uY2UgKi8KKwkJaWYgKGtleV90eXBlID09IEtFWV9XRVApIHsKKwkJCXJldCA9IHdsMTI3MV9jbWRfc2V0X2RlZmF1bHRfd2VwX2tleSh3bCwKKwkJCQkJCQkgICAgIHdsLT5kZWZhdWx0X2tleSk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlnb3RvIG91dF9zbGVlcDsKKwkJfQorCQlicmVhazsKKworCWNhc2UgRElTQUJMRV9LRVk6CisJCS8qIFRoZSB3bDEyNzEgZG9lcyBub3QgYWxsb3cgdG8gcmVtb3ZlIHVuaWNhc3Qga2V5cyAtIHRoZXkKKwkJICAgd2lsbCBiZSBjbGVhcmVkIGF1dG9tYXRpY2FsbHkgb24gbmV4dCBDTURfSk9JTi4gSWdub3JlIHRoZQorCQkgICByZXF1ZXN0IHNpbGVudGx5LCBhcyB3ZSBkb250IHdhbnQgdGhlIG1hYzgwMjExIHRvIGVtaXQKKwkJICAgYW4gZXJyb3IgbWVzc2FnZS4gKi8KKwkJaWYgKCFpc19icm9hZGNhc3RfZXRoZXJfYWRkcihhZGRyKSkKKwkJCWJyZWFrOworCisJCXJldCA9IHdsMTI3MV9jbWRfc2V0X2tleSh3bCwgS0VZX1JFTU9WRSwKKwkJCQkJIGtleV9jb25mLT5rZXlpZHgsIGtleV90eXBlLAorCQkJCQkga2V5X2NvbmYtPmtleWxlbiwga2V5X2NvbmYtPmtleSwKKwkJCQkJIGFkZHIsIDAsIDApOworCQlpZiAocmV0IDwgMCkgeworCQkJd2wxMjcxX2Vycm9yKCJDb3VsZCBub3QgcmVtb3ZlIGtleSIpOworCQkJZ290byBvdXRfc2xlZXA7CisJCX0KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQl3bDEyNzFfZXJyb3IoIlVuc3VwcG9ydGVkIGtleSBjbWQgMHgleCIsIGNtZCk7CisJCXJldCA9IC1FT1BOT1RTVVBQOworCQlicmVhazsKKwl9CisKK291dF9zbGVlcDoKKwl3bDEyNzFfcHNfZWxwX3NsZWVwKHdsKTsKKworb3V0X3VubG9jazoKKwltdXRleF91bmxvY2soJndsLT5tdXRleCk7CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHdsMTI3MV9vcF9od19zY2FuKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJICAgICBzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IHdsMTI3MSAqd2wgPSBody0+cHJpdjsKKwlpbnQgcmV0OworCXU4ICpzc2lkID0gTlVMTDsKKwlzaXplX3QgbGVuID0gMDsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19NQUM4MDIxMSwgIm1hYzgwMjExIGh3IHNjYW4iKTsKKworCWlmIChyZXEtPm5fc3NpZHMpIHsKKwkJc3NpZCA9IHJlcS0+c3NpZHNbMF0uc3NpZDsKKwkJbGVuID0gcmVxLT5zc2lkc1swXS5zc2lkX2xlbjsKKwl9CisKKwltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOworCisJaWYgKHdsLT5zdGF0ZSA9PSBXTDEyNzFfU1RBVEVfT0ZGKSB7CisJCS8qCisJCSAqIFdlIGNhbm5vdCByZXR1cm4gLUVCVVNZIGhlcmUgYmVjYXVzZSBjZmc4MDIxMSB3aWxsIGV4cGVjdAorCQkgKiBhIGNhbGwgdG8gaWVlZTgwMjExX3NjYW5fY29tcGxldGVkIGlmIHdlIGRvIC0gaW4gdGhpcyBjYXNlCisJCSAqIHRoZXJlIHdvbid0IGJlIGFueSBjYWxsLgorCQkgKi8KKwkJcmV0ID0gLUVBR0FJTjsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gd2wxMjcxX3BzX2VscF93YWtldXAod2wsIGZhbHNlKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSB3bDEyNzFfc2Nhbihody0+cHJpdiwgc3NpZCwgbGVuLCByZXEpOworCisJd2wxMjcxX3BzX2VscF9zbGVlcCh3bCk7CisKK291dDoKKwltdXRleF91bmxvY2soJndsLT5tdXRleCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHdsMTI3MV9vcF9zZXRfZnJhZ190aHJlc2hvbGQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiB2YWx1ZSkKK3sKKwlzdHJ1Y3Qgd2wxMjcxICp3bCA9IGh3LT5wcml2OworCWludCByZXQgPSAwOworCisJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKKworCWlmICh1bmxpa2VseSh3bC0+c3RhdGUgPT0gV0wxMjcxX1NUQVRFX09GRikpIHsKKwkJcmV0ID0gLUVBR0FJTjsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gd2wxMjcxX3BzX2VscF93YWtldXAod2wsIGZhbHNlKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSB3bDEyNzFfYWN4X2ZyYWdfdGhyZXNob2xkKHdsLCAodTE2KXZhbHVlKTsKKwlpZiAocmV0IDwgMCkKKwkJd2wxMjcxX3dhcm5pbmcoIndsMTI3MV9vcF9zZXRfZnJhZ190aHJlc2hvbGQgZmFpbGVkOiAlZCIsIHJldCk7CisKKwl3bDEyNzFfcHNfZWxwX3NsZWVwKHdsKTsKKworb3V0OgorCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjcxX29wX3NldF9ydHNfdGhyZXNob2xkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgdmFsdWUpCit7CisJc3RydWN0IHdsMTI3MSAqd2wgPSBody0+cHJpdjsKKwlpbnQgcmV0ID0gMDsKKworCW11dGV4X2xvY2soJndsLT5tdXRleCk7CisKKwlpZiAodW5saWtlbHkod2wtPnN0YXRlID09IFdMMTI3MV9TVEFURV9PRkYpKSB7CisJCXJldCA9IC1FQUdBSU47CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IHdsMTI3MV9wc19lbHBfd2FrZXVwKHdsLCBmYWxzZSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJcmV0ID0gd2wxMjcxX2FjeF9ydHNfdGhyZXNob2xkKHdsLCAodTE2KSB2YWx1ZSk7CisJaWYgKHJldCA8IDApCisJCXdsMTI3MV93YXJuaW5nKCJ3bDEyNzFfb3Bfc2V0X3J0c190aHJlc2hvbGQgZmFpbGVkOiAlZCIsIHJldCk7CisKKwl3bDEyNzFfcHNfZWxwX3NsZWVwKHdsKTsKKworb3V0OgorCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHdsMTI3MV9zc2lkX3NldChzdHJ1Y3Qgd2wxMjcxICp3bCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgICBpbnQgb2Zmc2V0KQoreworCXU4ICpwdHIgPSBza2ItPmRhdGEgKyBvZmZzZXQ7CisKKwkvKiBmaW5kIHRoZSBsb2NhdGlvbiBvZiB0aGUgc3NpZCBpbiB0aGUgYmVhY29uICovCisJd2hpbGUgKHB0ciA8IHNrYi0+ZGF0YSArIHNrYi0+bGVuKSB7CisJCWlmIChwdHJbMF0gPT0gV0xBTl9FSURfU1NJRCkgeworCQkJd2wtPnNzaWRfbGVuID0gcHRyWzFdOworCQkJbWVtY3B5KHdsLT5zc2lkLCBwdHIrMiwgd2wtPnNzaWRfbGVuKTsKKwkJCXJldHVybjsKKwkJfQorCQlwdHIgKz0gKHB0clsxXSArIDIpOworCX0KKwl3bDEyNzFfZXJyb3IoIk5vIFNTSUQgaW4gSUVzIVxuIik7Cit9CisKK3N0YXRpYyB2b2lkIHdsMTI3MV9vcF9ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpic3NfY29uZiwKKwkJCQkgICAgICAgdTMyIGNoYW5nZWQpCit7CisJZW51bSB3bDEyNzFfY21kX3BzX21vZGUgbW9kZTsKKwlzdHJ1Y3Qgd2wxMjcxICp3bCA9IGh3LT5wcml2OworCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEgPSBpZWVlODAyMTFfZmluZF9zdGEodmlmLCBic3NfY29uZi0+YnNzaWQpOworCWJvb2wgZG9fam9pbiA9IGZhbHNlOworCWJvb2wgc2V0X2Fzc29jID0gZmFsc2U7CisJaW50IHJldDsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19NQUM4MDIxMSwgIm1hYzgwMjExIGJzcyBpbmZvIGNoYW5nZWQiKTsKKworCW11dGV4X2xvY2soJndsLT5tdXRleCk7CisKKwlpZiAodW5saWtlbHkod2wtPnN0YXRlID09IFdMMTI3MV9TVEFURV9PRkYpKQorCQlnb3RvIG91dDsKKworCXJldCA9IHdsMTI3MV9wc19lbHBfd2FrZXVwKHdsLCBmYWxzZSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJaWYgKChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQkVBQ09OX0lOVCkgJiYKKwkgICAgKHdsLT5ic3NfdHlwZSA9PSBCU1NfVFlQRV9JQlNTKSkgeworCQl3bDEyNzFfZGVidWcoREVCVUdfQURIT0MsICJhZC1ob2MgYmVhY29uIGludGVydmFsIHVwZGF0ZWQ6ICVkIiwKKwkJCWJzc19jb25mLT5iZWFjb25faW50KTsKKworCQl3bC0+YmVhY29uX2ludCA9IGJzc19jb25mLT5iZWFjb25faW50OworCQlkb19qb2luID0gdHJ1ZTsKKwl9CisKKwlpZiAoKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9CRUFDT04pICYmCisJICAgICh3bC0+YnNzX3R5cGUgPT0gQlNTX1RZUEVfSUJTUykpIHsKKwkJc3RydWN0IHNrX2J1ZmYgKmJlYWNvbiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KGh3LCB2aWYpOworCisJCXdsMTI3MV9kZWJ1ZyhERUJVR19BREhPQywgImFkLWhvYyBiZWFjb24gdXBkYXRlZCIpOworCisJCWlmIChiZWFjb24pIHsKKwkJCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CisJCQlpbnQgaWVvZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgaWVlZTgwMjExX21nbXQsCisJCQkJCQl1LmJlYWNvbi52YXJpYWJsZSk7CisKKwkJCXdsMTI3MV9zc2lkX3NldCh3bCwgYmVhY29uLCBpZW9mZnNldCk7CisKKwkJCXJldCA9IHdsMTI3MV9jbWRfdGVtcGxhdGVfc2V0KHdsLCBDTURfVEVNUExfQkVBQ09OLAorCQkJCQkJICAgICAgYmVhY29uLT5kYXRhLAorCQkJCQkJICAgICAgYmVhY29uLT5sZW4sIDAsCisJCQkJCQkgICAgICB3bDEyNzFfbWluX3JhdGVfZ2V0KHdsKSk7CisKKwkJCWlmIChyZXQgPCAwKSB7CisJCQkJZGV2X2tmcmVlX3NrYihiZWFjb24pOworCQkJCWdvdG8gb3V0X3NsZWVwOworCQkJfQorCisJCQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgYmVhY29uLT5kYXRhOworCQkJaGRyLT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoCisJCQkJSUVFRTgwMjExX0ZUWVBFX01HTVQgfAorCQkJCUlFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVNQKTsKKworCQkJcmV0ID0gd2wxMjcxX2NtZF90ZW1wbGF0ZV9zZXQod2wsCisJCQkJCQkgICAgICBDTURfVEVNUExfUFJPQkVfUkVTUE9OU0UsCisJCQkJCQkgICAgICBiZWFjb24tPmRhdGEsCisJCQkJCQkgICAgICBiZWFjb24tPmxlbiwgMCwKKwkJCQkJCSAgICAgIHdsMTI3MV9taW5fcmF0ZV9nZXQod2wpKTsKKwkJCWRldl9rZnJlZV9za2IoYmVhY29uKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCWdvdG8gb3V0X3NsZWVwOworCisJCQkvKiBOZWVkIHRvIHVwZGF0ZSB0aGUgU1NJRCAoZm9yIGZpbHRlcmluZyBldGMpICovCisJCQlkb19qb2luID0gdHJ1ZTsKKwkJfQorCX0KKworCWlmICgoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0JFQUNPTl9FTkFCTEVEKSAmJgorCSAgICAod2wtPmJzc190eXBlID09IEJTU19UWVBFX0lCU1MpKSB7CisJCXdsMTI3MV9kZWJ1ZyhERUJVR19BREhPQywgImFkLWhvYyBiZWFjb25pbmc6ICVzIiwKKwkJCSAgICAgYnNzX2NvbmYtPmVuYWJsZV9iZWFjb24gPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKTsKKworCQlpZiAoYnNzX2NvbmYtPmVuYWJsZV9iZWFjb24pCisJCQl3bC0+c2V0X2Jzc190eXBlID0gQlNTX1RZUEVfSUJTUzsKKwkJZWxzZQorCQkJd2wtPnNldF9ic3NfdHlwZSA9IEJTU19UWVBFX1NUQV9CU1M7CisJCWRvX2pvaW4gPSB0cnVlOworCX0KKworCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQ1FNKSB7CisJCWJvb2wgZW5hYmxlID0gZmFsc2U7CisJCWlmIChic3NfY29uZi0+Y3FtX3Jzc2lfdGhvbGQpCisJCQllbmFibGUgPSB0cnVlOworCQlyZXQgPSB3bDEyNzFfYWN4X3Jzc2lfc25yX3RyaWdnZXIod2wsIGVuYWJsZSwKKwkJCQkJCSAgYnNzX2NvbmYtPmNxbV9yc3NpX3Rob2xkLAorCQkJCQkJICBic3NfY29uZi0+Y3FtX3Jzc2lfaHlzdCk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdXQ7CisJCXdsLT5yc3NpX3Rob2xkID0gYnNzX2NvbmYtPmNxbV9yc3NpX3Rob2xkOworCX0KKworCWlmICgoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0JTU0lEKSAmJgorCSAgICAvKgorCSAgICAgKiBOb3cgd2Uga25vdyB0aGUgY29ycmVjdCBic3NpZCwgc28gd2Ugc2VuZCBhIG5ldyBqb2luIGNvbW1hbmQKKwkgICAgICogYW5kIGVuYWJsZSB0aGUgQlNTSUQgZmlsdGVyCisJICAgICAqLworCSAgICBtZW1jbXAod2wtPmJzc2lkLCBic3NfY29uZi0+YnNzaWQsIEVUSF9BTEVOKSkgeworCQkJbWVtY3B5KHdsLT5ic3NpZCwgYnNzX2NvbmYtPmJzc2lkLCBFVEhfQUxFTik7CisKKwkJCXJldCA9IHdsMTI3MV9jbWRfYnVpbGRfbnVsbF9kYXRhKHdsKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCWdvdG8gb3V0X3NsZWVwOworCisJCQlyZXQgPSB3bDEyNzFfYnVpbGRfcW9zX251bGxfZGF0YSh3bCk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlnb3RvIG91dF9zbGVlcDsKKworCQkJLyogZmlsdGVyIG91dCBhbGwgcGFja2V0cyBub3QgZnJvbSB0aGlzIEJTU0lEICovCisJCQl3bDEyNzFfY29uZmlndXJlX2ZpbHRlcnMod2wsIDApOworCisJCQkvKiBOZWVkIHRvIHVwZGF0ZSB0aGUgQlNTSUQgKGZvciBmaWx0ZXJpbmcgZXRjKSAqLworCQkJZG9fam9pbiA9IHRydWU7CisJfQorCisJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9BU1NPQykgeworCQlpZiAoYnNzX2NvbmYtPmFzc29jKSB7CisJCQl1MzIgcmF0ZXM7CisJCQlpbnQgaWVvZmZzZXQ7CisJCQl3bC0+YWlkID0gYnNzX2NvbmYtPmFpZDsKKwkJCXNldF9hc3NvYyA9IHRydWU7CisKKwkJCXdsLT5wc19wb2xsX2ZhaWx1cmVzID0gMDsKKworCQkJLyoKKwkJCSAqIHVzZSBiYXNpYyByYXRlcyBmcm9tIEFQLCBhbmQgZGV0ZXJtaW5lIGxvd2VzdCByYXRlCisJCQkgKiB0byB1c2Ugd2l0aCBjb250cm9sIGZyYW1lcy4KKwkJCSAqLworCQkJcmF0ZXMgPSBic3NfY29uZi0+YmFzaWNfcmF0ZXM7CisJCQl3bC0+YmFzaWNfcmF0ZV9zZXQgPSB3bDEyNzFfdHhfZW5hYmxlZF9yYXRlc19nZXQod2wsCisJCQkJCQkJCQkgcmF0ZXMpOworCQkJd2wtPmJhc2ljX3JhdGUgPSB3bDEyNzFfbWluX3JhdGVfZ2V0KHdsKTsKKwkJCXJldCA9IHdsMTI3MV9hY3hfcmF0ZV9wb2xpY2llcyh3bCk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlnb3RvIG91dF9zbGVlcDsKKworCQkJLyoKKwkJCSAqIHdpdGggd2wxMjcxLCB3ZSBkb24ndCBuZWVkIHRvIHVwZGF0ZSB0aGUKKwkJCSAqIGJlYWNvbl9pbnQgYW5kIGR0aW1fcGVyaW9kLCBiZWNhdXNlIHRoZSBmaXJtd2FyZQorCQkJICogdXBkYXRlcyBpdCBieSBpdHNlbGYgd2hlbiB0aGUgZmlyc3QgYmVhY29uIGlzCisJCQkgKiByZWNlaXZlZCBhZnRlciBhIGpvaW4uCisJCQkgKi8KKwkJCXJldCA9IHdsMTI3MV9jbWRfYnVpbGRfcHNfcG9sbCh3bCwgd2wtPmFpZCk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlnb3RvIG91dF9zbGVlcDsKKworCQkJLyoKKwkJCSAqIEdldCBhIHRlbXBsYXRlIGZvciBoYXJkd2FyZSBjb25uZWN0aW9uIG1haW50ZW5hbmNlCisJCQkgKi8KKwkJCWRldl9rZnJlZV9za2Iod2wtPnByb2JlcmVxKTsKKwkJCXdsLT5wcm9iZXJlcSA9IHdsMTI3MV9jbWRfYnVpbGRfYXBfcHJvYmVfcmVxKHdsLCBOVUxMKTsKKwkJCWllb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IGllZWU4MDIxMV9tZ210LAorCQkJCQkgICAgdS5wcm9iZV9yZXEudmFyaWFibGUpOworCQkJd2wxMjcxX3NzaWRfc2V0KHdsLCB3bC0+cHJvYmVyZXEsIGllb2Zmc2V0KTsKKworCQkJLyogZW5hYmxlIHRoZSBjb25uZWN0aW9uIG1vbml0b3JpbmcgZmVhdHVyZSAqLworCQkJcmV0ID0gd2wxMjcxX2FjeF9jb25uX21vbml0X3BhcmFtcyh3bCwgdHJ1ZSk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlnb3RvIG91dF9zbGVlcDsKKworCQkJLyogSWYgd2Ugd2FudCB0byBnbyBpbiBQU00gYnV0IHdlJ3JlIG5vdCB0aGVyZSB5ZXQgKi8KKwkJCWlmICh0ZXN0X2JpdChXTDEyNzFfRkxBR19QU01fUkVRVUVTVEVELCAmd2wtPmZsYWdzKSAmJgorCQkJICAgICF0ZXN0X2JpdChXTDEyNzFfRkxBR19QU00sICZ3bC0+ZmxhZ3MpKSB7CisJCQkJbW9kZSA9IFNUQVRJT05fUE9XRVJfU0FWRV9NT0RFOworCQkJCXJldCA9IHdsMTI3MV9wc19zZXRfbW9kZSh3bCwgbW9kZSwKKwkJCQkJCQkgd2wtPmJhc2ljX3JhdGUsCisJCQkJCQkJIHRydWUpOworCQkJCWlmIChyZXQgPCAwKQorCQkJCQlnb3RvIG91dF9zbGVlcDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qIHVzZSBkZWZhdWx0cyB3aGVuIG5vdCBhc3NvY2lhdGVkICovCisJCQljbGVhcl9iaXQoV0wxMjcxX0ZMQUdfU1RBX1NUQVRFX1NFTlQsICZ3bC0+ZmxhZ3MpOworCQkJY2xlYXJfYml0KFdMMTI3MV9GTEFHX1NUQV9BU1NPQ0lBVEVELCAmd2wtPmZsYWdzKTsKKwkJCXdsLT5haWQgPSAwOworCisJCQkvKiBmcmVlIHByb2JlLXJlcXVlc3QgdGVtcGxhdGUgKi8KKwkJCWRldl9rZnJlZV9za2Iod2wtPnByb2JlcmVxKTsKKwkJCXdsLT5wcm9iZXJlcSA9IE5VTEw7CisKKwkJCS8qIHJlLWVuYWJsZSBkeW5hbWljIHBzIC0ganVzdCBpbiBjYXNlICovCisJCQlpZWVlODAyMTFfZW5hYmxlX2R5bl9wcyh3bC0+dmlmKTsKKworCQkJLyogcmV2ZXJ0IGJhY2sgdG8gbWluaW11bSByYXRlcyBmb3IgdGhlIGN1cnJlbnQgYmFuZCAqLworCQkJd2wxMjcxX3NldF9iYW5kX3JhdGUod2wpOworCQkJd2wtPmJhc2ljX3JhdGUgPSB3bDEyNzFfbWluX3JhdGVfZ2V0KHdsKTsKKwkJCXJldCA9IHdsMTI3MV9hY3hfcmF0ZV9wb2xpY2llcyh3bCk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlnb3RvIG91dF9zbGVlcDsKKworCQkJLyogZGlzYWJsZSBjb25uZWN0aW9uIG1vbml0b3IgZmVhdHVyZXMgKi8KKwkJCXJldCA9IHdsMTI3MV9hY3hfY29ubl9tb25pdF9wYXJhbXMod2wsIGZhbHNlKTsKKworCQkJLyogRGlzYWJsZSB0aGUga2VlcC1hbGl2ZSBmZWF0dXJlICovCisJCQlyZXQgPSB3bDEyNzFfYWN4X2tlZXBfYWxpdmVfbW9kZSh3bCwgZmFsc2UpOworCQkJaWYgKHJldCA8IDApCisJCQkJZ290byBvdXRfc2xlZXA7CisKKwkJCS8qIHJlc3RvcmUgdGhlIGJzc2lkIGZpbHRlciBhbmQgZ28gdG8gZHVtbXkgYnNzaWQgKi8KKwkJCXdsMTI3MV91bmpvaW4od2wpOworCQkJd2wxMjcxX2R1bW15X2pvaW4od2wpOworCQl9CisKKwl9CisKKwlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0VSUF9TTE9UKSB7CisJCWlmIChic3NfY29uZi0+dXNlX3Nob3J0X3Nsb3QpCisJCQlyZXQgPSB3bDEyNzFfYWN4X3Nsb3Qod2wsIFNMT1RfVElNRV9TSE9SVCk7CisJCWVsc2UKKwkJCXJldCA9IHdsMTI3MV9hY3hfc2xvdCh3bCwgU0xPVF9USU1FX0xPTkcpOworCQlpZiAocmV0IDwgMCkgeworCQkJd2wxMjcxX3dhcm5pbmcoIlNldCBzbG90IHRpbWUgZmFpbGVkICVkIiwgcmV0KTsKKwkJCWdvdG8gb3V0X3NsZWVwOworCQl9CisJfQorCisJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9FUlBfUFJFQU1CTEUpIHsKKwkJaWYgKGJzc19jb25mLT51c2Vfc2hvcnRfcHJlYW1ibGUpCisJCQl3bDEyNzFfYWN4X3NldF9wcmVhbWJsZSh3bCwgQUNYX1BSRUFNQkxFX1NIT1JUKTsKKwkJZWxzZQorCQkJd2wxMjcxX2FjeF9zZXRfcHJlYW1ibGUod2wsIEFDWF9QUkVBTUJMRV9MT05HKTsKKwl9CisKKwlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0VSUF9DVFNfUFJPVCkgeworCQlpZiAoYnNzX2NvbmYtPnVzZV9jdHNfcHJvdCkKKwkJCXJldCA9IHdsMTI3MV9hY3hfY3RzX3Byb3RlY3Qod2wsIENUU1BST1RFQ1RfRU5BQkxFKTsKKwkJZWxzZQorCQkJcmV0ID0gd2wxMjcxX2FjeF9jdHNfcHJvdGVjdCh3bCwgQ1RTUFJPVEVDVF9ESVNBQkxFKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXdsMTI3MV93YXJuaW5nKCJTZXQgY3RzcHJvdGVjdCBmYWlsZWQgJWQiLCByZXQpOworCQkJZ290byBvdXRfc2xlZXA7CisJCX0KKwl9CisKKwkvKgorCSAqIFRha2VzIGNhcmUgb2Y6IE5ldyBhc3NvY2lhdGlvbiB3aXRoIEhUIGVuYWJsZSwKKwkgKiAgICAgICAgICAgICAgICBIVCBpbmZvcm1hdGlvbiBjaGFuZ2UgaW4gYmVhY29uLgorCSAqLworCWlmIChzdGEgJiYKKwkgICAgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9IVCkgJiYKKwkgICAgKGJzc19jb25mLT5jaGFubmVsX3R5cGUgIT0gTkw4MDIxMV9DSEFOX05PX0hUKSkgeworCQlyZXQgPSB3bDEyNzFfYWN4X3NldF9odF9jYXBhYmlsaXRpZXMod2wsICZzdGEtPmh0X2NhcCwgdHJ1ZSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQl3bDEyNzFfd2FybmluZygiU2V0IGh0IGNhcCB0cnVlIGZhaWxlZCAlZCIsIHJldCk7CisJCQlnb3RvIG91dF9zbGVlcDsKKwkJfQorCQkJcmV0ID0gd2wxMjcxX2FjeF9zZXRfaHRfaW5mb3JtYXRpb24od2wsCisJCQkJYnNzX2NvbmYtPmh0X29wZXJhdGlvbl9tb2RlKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXdsMTI3MV93YXJuaW5nKCJTZXQgaHQgaW5mb3JtYXRpb24gZmFpbGVkICVkIiwgcmV0KTsKKwkJCWdvdG8gb3V0X3NsZWVwOworCQl9CisJfQorCS8qCisJICogVGFrZXMgY2FyZSBvZjogTmV3IGFzc29jaWF0aW9uIHdpdGhvdXQgSFQsCisJICogICAgICAgICAgICAgICAgRGlzYXNzb2NpYXRpb24uCisJICovCisJZWxzZSBpZiAoc3RhICYmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQVNTT0MpKSB7CisJCXJldCA9IHdsMTI3MV9hY3hfc2V0X2h0X2NhcGFiaWxpdGllcyh3bCwgJnN0YS0+aHRfY2FwLCBmYWxzZSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQl3bDEyNzFfd2FybmluZygiU2V0IGh0IGNhcCBmYWxzZSBmYWlsZWQgJWQiLCByZXQpOworCQkJZ290byBvdXRfc2xlZXA7CisJCX0KKwl9CisKKwlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0FSUF9GSUxURVIpIHsKKwkJX19iZTMyIGFkZHIgPSBic3NfY29uZi0+YXJwX2FkZHJfbGlzdFswXTsKKwkJV0FSTl9PTih3bC0+YnNzX3R5cGUgIT0gQlNTX1RZUEVfU1RBX0JTUyk7CisKKwkJaWYgKGJzc19jb25mLT5hcnBfYWRkcl9jbnQgPT0gMSAmJgorCQkgICAgYnNzX2NvbmYtPmFycF9maWx0ZXJfZW5hYmxlZCkgeworCQkJLyoKKwkJCSAqIFRoZSB0ZW1wbGF0ZSBzaG91bGQgaGF2ZSBiZWVuIGNvbmZpZ3VyZWQgb25seSB1cG9uCisJCQkgKiBhc3NvY2lhdGlvbi4gaG93ZXZlciwgaXQgc2VlbXMgdGhhdCB0aGUgY29ycmVjdCBpcAorCQkJICogaXNuJ3QgYmVpbmcgc2V0ICh3aGVuIHNlbmRpbmcpLCBzbyB3ZSBoYXZlIHRvCisJCQkgKiByZWNvbmZpZ3VyZSB0aGUgdGVtcGxhdGUgdXBvbiBldmVyeSBpcCBjaGFuZ2UuCisJCQkgKi8KKwkJCXJldCA9IHdsMTI3MV9jbWRfYnVpbGRfYXJwX3JzcCh3bCwgYWRkcik7CisJCQlpZiAocmV0IDwgMCkgeworCQkJCXdsMTI3MV93YXJuaW5nKCJidWlsZCBhcnAgcnNwIGZhaWxlZDogJWQiLCByZXQpOworCQkJCWdvdG8gb3V0X3NsZWVwOworCQkJfQorCisJCQlyZXQgPSB3bDEyNzFfYWN4X2FycF9pcF9maWx0ZXIod2wsCisJCQkJKEFDWF9BUlBfRklMVEVSX0FSUF9GSUxURVJJTkcgfAorCQkJCSBBQ1hfQVJQX0ZJTFRFUl9BVVRPX0FSUCksCisJCQkJYWRkcik7CisJCX0gZWxzZQorCQkJcmV0ID0gd2wxMjcxX2FjeF9hcnBfaXBfZmlsdGVyKHdsLCAwLCBhZGRyKTsKKworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gb3V0X3NsZWVwOworCX0KKworCWlmIChkb19qb2luKSB7CisJCXJldCA9IHdsMTI3MV9qb2luKHdsLCBzZXRfYXNzb2MpOworCQlpZiAocmV0IDwgMCkgeworCQkJd2wxMjcxX3dhcm5pbmcoImNtZCBqb2luIGZhaWxlZCAlZCIsIHJldCk7CisJCQlnb3RvIG91dF9zbGVlcDsKKwkJfQorCX0KKworb3V0X3NsZWVwOgorCXdsMTI3MV9wc19lbHBfc2xlZXAod2wpOworCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOworfQorCitzdGF0aWMgaW50IHdsMTI3MV9vcF9jb25mX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MTYgcXVldWUsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfcGFyYW1zICpwYXJhbXMpCit7CisJc3RydWN0IHdsMTI3MSAqd2wgPSBody0+cHJpdjsKKwl1OCBwc19zY2hlbWU7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJndsLT5tdXRleCk7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfTUFDODAyMTEsICJtYWM4MDIxMSBjb25mIHR4ICVkIiwgcXVldWUpOworCisJaWYgKHVubGlrZWx5KHdsLT5zdGF0ZSA9PSBXTDEyNzFfU1RBVEVfT0ZGKSkgeworCQlyZXQgPSAtRUFHQUlOOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSB3bDEyNzFfcHNfZWxwX3dha2V1cCh3bCwgZmFsc2UpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCS8qIHRoZSB0eG9wIGlzIGNvbmZlZCBpbiB1bml0cyBvZiAzMnVzIGJ5IHRoZSBtYWM4MDIxMSwgd2UgbmVlZCB1cyAqLworCXJldCA9IHdsMTI3MV9hY3hfYWNfY2ZnKHdsLCB3bDEyNzFfdHhfZ2V0X3F1ZXVlKHF1ZXVlKSwKKwkJCQlwYXJhbXMtPmN3X21pbiwgcGFyYW1zLT5jd19tYXgsCisJCQkJcGFyYW1zLT5haWZzLCBwYXJhbXMtPnR4b3AgPDwgNSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0X3NsZWVwOworCisJaWYgKHBhcmFtcy0+dWFwc2QpCisJCXBzX3NjaGVtZSA9IENPTkZfUFNfU0NIRU1FX1VQU0RfVFJJR0dFUjsKKwllbHNlCisJCXBzX3NjaGVtZSA9IENPTkZfUFNfU0NIRU1FX0xFR0FDWTsKKworCXJldCA9IHdsMTI3MV9hY3hfdGlkX2NmZyh3bCwgd2wxMjcxX3R4X2dldF9xdWV1ZShxdWV1ZSksCisJCQkJIENPTkZfQ0hBTk5FTF9UWVBFX0VEQ0YsCisJCQkJIHdsMTI3MV90eF9nZXRfcXVldWUocXVldWUpLAorCQkJCSBwc19zY2hlbWUsIENPTkZfQUNLX1BPTElDWV9MRUdBQ1ksIDAsIDApOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dF9zbGVlcDsKKworb3V0X3NsZWVwOgorCXdsMTI3MV9wc19lbHBfc2xlZXAod2wpOworCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHU2NCB3bDEyNzFfb3BfZ2V0X3RzZihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKworCXN0cnVjdCB3bDEyNzEgKndsID0gaHctPnByaXY7CisJdTY0IG1hY3RpbWUgPSBVTExPTkdfTUFYOworCWludCByZXQ7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfTUFDODAyMTEsICJtYWM4MDIxMSBnZXQgdHNmIik7CisKKwltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOworCisJaWYgKHVubGlrZWx5KHdsLT5zdGF0ZSA9PSBXTDEyNzFfU1RBVEVfT0ZGKSkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSB3bDEyNzFfcHNfZWxwX3dha2V1cCh3bCwgZmFsc2UpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCXJldCA9IHdsMTI3MV9hY3hfdHNmX2luZm8od2wsICZtYWN0aW1lKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXRfc2xlZXA7CisKK291dF9zbGVlcDoKKwl3bDEyNzFfcHNfZWxwX3NsZWVwKHdsKTsKKworb3V0OgorCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKKwlyZXR1cm4gbWFjdGltZTsKK30KKworc3RhdGljIGludCB3bDEyNzFfb3BfZ2V0X3N1cnZleShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgaW50IGlkeCwKKwkJCQlzdHJ1Y3Qgc3VydmV5X2luZm8gKnN1cnZleSkKK3sKKwlzdHJ1Y3Qgd2wxMjcxICp3bCA9IGh3LT5wcml2OworCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZody0+Y29uZjsKKworCWlmIChpZHggIT0gMCkKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwlzdXJ2ZXktPmNoYW5uZWwgPSBjb25mLT5jaGFubmVsOworCXN1cnZleS0+ZmlsbGVkID0gU1VSVkVZX0lORk9fTk9JU0VfREJNOworCXN1cnZleS0+bm9pc2UgPSB3bC0+bm9pc2U7CisKKwlyZXR1cm4gMDsKK30KKworLyogY2FuJ3QgYmUgY29uc3QsIG1hYzgwMjExIHdyaXRlcyB0byB0aGlzICovCitzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9yYXRlIHdsMTI3MV9yYXRlc1tdID0geworCXsgLmJpdHJhdGUgPSAxMCwKKwkgIC5od192YWx1ZSA9IENPTkZfSFdfQklUX1JBVEVfMU1CUFMsCisJICAuaHdfdmFsdWVfc2hvcnQgPSBDT05GX0hXX0JJVF9SQVRFXzFNQlBTLCB9LAorCXsgLmJpdHJhdGUgPSAyMCwKKwkgIC5od192YWx1ZSA9IENPTkZfSFdfQklUX1JBVEVfMk1CUFMsCisJICAuaHdfdmFsdWVfc2hvcnQgPSBDT05GX0hXX0JJVF9SQVRFXzJNQlBTLAorCSAgLmZsYWdzID0gSUVFRTgwMjExX1JBVEVfU0hPUlRfUFJFQU1CTEUgfSwKKwl7IC5iaXRyYXRlID0gNTUsCisJICAuaHdfdmFsdWUgPSBDT05GX0hXX0JJVF9SQVRFXzVfNU1CUFMsCisJICAuaHdfdmFsdWVfc2hvcnQgPSBDT05GX0hXX0JJVF9SQVRFXzVfNU1CUFMsCisJICAuZmxhZ3MgPSBJRUVFODAyMTFfUkFURV9TSE9SVF9QUkVBTUJMRSB9LAorCXsgLmJpdHJhdGUgPSAxMTAsCisJICAuaHdfdmFsdWUgPSBDT05GX0hXX0JJVF9SQVRFXzExTUJQUywKKwkgIC5od192YWx1ZV9zaG9ydCA9IENPTkZfSFdfQklUX1JBVEVfMTFNQlBTLAorCSAgLmZsYWdzID0gSUVFRTgwMjExX1JBVEVfU0hPUlRfUFJFQU1CTEUgfSwKKwl7IC5iaXRyYXRlID0gNjAsCisJICAuaHdfdmFsdWUgPSBDT05GX0hXX0JJVF9SQVRFXzZNQlBTLAorCSAgLmh3X3ZhbHVlX3Nob3J0ID0gQ09ORl9IV19CSVRfUkFURV82TUJQUywgfSwKKwl7IC5iaXRyYXRlID0gOTAsCisJICAuaHdfdmFsdWUgPSBDT05GX0hXX0JJVF9SQVRFXzlNQlBTLAorCSAgLmh3X3ZhbHVlX3Nob3J0ID0gQ09ORl9IV19CSVRfUkFURV85TUJQUywgfSwKKwl7IC5iaXRyYXRlID0gMTIwLAorCSAgLmh3X3ZhbHVlID0gQ09ORl9IV19CSVRfUkFURV8xMk1CUFMsCisJICAuaHdfdmFsdWVfc2hvcnQgPSBDT05GX0hXX0JJVF9SQVRFXzEyTUJQUywgfSwKKwl7IC5iaXRyYXRlID0gMTgwLAorCSAgLmh3X3ZhbHVlID0gQ09ORl9IV19CSVRfUkFURV8xOE1CUFMsCisJICAuaHdfdmFsdWVfc2hvcnQgPSBDT05GX0hXX0JJVF9SQVRFXzE4TUJQUywgfSwKKwl7IC5iaXRyYXRlID0gMjQwLAorCSAgLmh3X3ZhbHVlID0gQ09ORl9IV19CSVRfUkFURV8yNE1CUFMsCisJICAuaHdfdmFsdWVfc2hvcnQgPSBDT05GX0hXX0JJVF9SQVRFXzI0TUJQUywgfSwKKwl7IC5iaXRyYXRlID0gMzYwLAorCSAuaHdfdmFsdWUgPSBDT05GX0hXX0JJVF9SQVRFXzM2TUJQUywKKwkgLmh3X3ZhbHVlX3Nob3J0ID0gQ09ORl9IV19CSVRfUkFURV8zNk1CUFMsIH0sCisJeyAuYml0cmF0ZSA9IDQ4MCwKKwkgIC5od192YWx1ZSA9IENPTkZfSFdfQklUX1JBVEVfNDhNQlBTLAorCSAgLmh3X3ZhbHVlX3Nob3J0ID0gQ09ORl9IV19CSVRfUkFURV80OE1CUFMsIH0sCisJeyAuYml0cmF0ZSA9IDU0MCwKKwkgIC5od192YWx1ZSA9IENPTkZfSFdfQklUX1JBVEVfNTRNQlBTLAorCSAgLmh3X3ZhbHVlX3Nob3J0ID0gQ09ORl9IV19CSVRfUkFURV81NE1CUFMsIH0sCit9OworCisvKiBjYW4ndCBiZSBjb25zdCwgbWFjODAyMTEgd3JpdGVzIHRvIHRoaXMgKi8KK3N0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgd2wxMjcxX2NoYW5uZWxzW10gPSB7CisJeyAuaHdfdmFsdWUgPSAxLCAuY2VudGVyX2ZyZXEgPSAyNDEyLCAubWF4X3Bvd2VyID0gMjUgfSwKKwl7IC5od192YWx1ZSA9IDIsIC5jZW50ZXJfZnJlcSA9IDI0MTcsIC5tYXhfcG93ZXIgPSAyNSB9LAorCXsgLmh3X3ZhbHVlID0gMywgLmNlbnRlcl9mcmVxID0gMjQyMiwgLm1heF9wb3dlciA9IDI1IH0sCisJeyAuaHdfdmFsdWUgPSA0LCAuY2VudGVyX2ZyZXEgPSAyNDI3LCAubWF4X3Bvd2VyID0gMjUgfSwKKwl7IC5od192YWx1ZSA9IDUsIC5jZW50ZXJfZnJlcSA9IDI0MzIsIC5tYXhfcG93ZXIgPSAyNSB9LAorCXsgLmh3X3ZhbHVlID0gNiwgLmNlbnRlcl9mcmVxID0gMjQzNywgLm1heF9wb3dlciA9IDI1IH0sCisJeyAuaHdfdmFsdWUgPSA3LCAuY2VudGVyX2ZyZXEgPSAyNDQyLCAubWF4X3Bvd2VyID0gMjUgfSwKKwl7IC5od192YWx1ZSA9IDgsIC5jZW50ZXJfZnJlcSA9IDI0NDcsIC5tYXhfcG93ZXIgPSAyNSB9LAorCXsgLmh3X3ZhbHVlID0gOSwgLmNlbnRlcl9mcmVxID0gMjQ1MiwgLm1heF9wb3dlciA9IDI1IH0sCisJeyAuaHdfdmFsdWUgPSAxMCwgLmNlbnRlcl9mcmVxID0gMjQ1NywgLm1heF9wb3dlciA9IDI1IH0sCisJeyAuaHdfdmFsdWUgPSAxMSwgLmNlbnRlcl9mcmVxID0gMjQ2MiwgLm1heF9wb3dlciA9IDI1IH0sCisJeyAuaHdfdmFsdWUgPSAxMiwgLmNlbnRlcl9mcmVxID0gMjQ2NywgLm1heF9wb3dlciA9IDI1IH0sCisJeyAuaHdfdmFsdWUgPSAxMywgLmNlbnRlcl9mcmVxID0gMjQ3MiwgLm1heF9wb3dlciA9IDI1IH0sCit9OworCisvKiBtYXBwaW5nIHRvIGluZGV4ZXMgZm9yIHdsMTI3MV9yYXRlcyAqLworc3RhdGljIGNvbnN0IHU4IHdsMTI3MV9yYXRlX3RvX2lkeF8yZ2h6W10gPSB7CisJLyogTUNTIHJhdGVzIGFyZSB1c2VkIG9ubHkgd2l0aCAxMW4gKi8KKwk3LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDT05GX0hXX1JYVFhfUkFURV9NQ1M3ICovCisJNiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ09ORl9IV19SWFRYX1JBVEVfTUNTNiAqLworCTUsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENPTkZfSFdfUlhUWF9SQVRFX01DUzUgKi8KKwk0LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDT05GX0hXX1JYVFhfUkFURV9NQ1M0ICovCisJMywgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ09ORl9IV19SWFRYX1JBVEVfTUNTMyAqLworCTIsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENPTkZfSFdfUlhUWF9SQVRFX01DUzIgKi8KKwkxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDT05GX0hXX1JYVFhfUkFURV9NQ1MxICovCisJMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ09ORl9IV19SWFRYX1JBVEVfTUNTMCAqLworCisJMTEsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENPTkZfSFdfUlhUWF9SQVRFXzU0ICAgKi8KKwkxMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ09ORl9IV19SWFRYX1JBVEVfNDggICAqLworCTksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDT05GX0hXX1JYVFhfUkFURV8zNiAgICovCisJOCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENPTkZfSFdfUlhUWF9SQVRFXzI0ICAgKi8KKworCS8qIFRJLXNwZWNpZmljIHJhdGUgKi8KKwlDT05GX0hXX1JYVFhfUkFURV9VTlNVUFBPUlRFRCwgLyogQ09ORl9IV19SWFRYX1JBVEVfMjIgICAqLworCisJNywgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENPTkZfSFdfUlhUWF9SQVRFXzE4ICAgKi8KKwk2LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ09ORl9IV19SWFRYX1JBVEVfMTIgICAqLworCTMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDT05GX0hXX1JYVFhfUkFURV8xMSAgICovCisJNSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENPTkZfSFdfUlhUWF9SQVRFXzkgICAgKi8KKwk0LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ09ORl9IV19SWFRYX1JBVEVfNiAgICAqLworCTIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDT05GX0hXX1JYVFhfUkFURV81XzUgICovCisJMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENPTkZfSFdfUlhUWF9SQVRFXzIgICAgKi8KKwkwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ09ORl9IV19SWFRYX1JBVEVfMSAgICAqLworfTsKKworLyogMTFuIFNUQSBjYXBhYmlsaXRpZXMgKi8KKyNkZWZpbmUgSFdfUlhfSElHSEVTVF9SQVRFCTcyCisKKyNpZmRlZiBDT05GSUdfV0wxMlhYX0hUCisjZGVmaW5lIFdMMTJYWF9IVF9DQVAgeyBcCisJLmNhcCA9IElFRUU4MDIxMV9IVF9DQVBfR1JOX0ZMRCB8IElFRUU4MDIxMV9IVF9DQVBfU0dJXzIwLCBcCisJLmh0X3N1cHBvcnRlZCA9IHRydWUsIFwKKwkuYW1wZHVfZmFjdG9yID0gSUVFRTgwMjExX0hUX01BWF9BTVBEVV84SywgXAorCS5hbXBkdV9kZW5zaXR5ID0gSUVFRTgwMjExX0hUX01QRFVfREVOU0lUWV84LCBcCisJLm1jcyA9IHsgXAorCQkucnhfbWFzayA9IHsgMHhmZiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgfSwgXAorCQkucnhfaGlnaGVzdCA9IGNwdV90b19sZTE2KEhXX1JYX0hJR0hFU1RfUkFURSksIFwKKwkJLnR4X3BhcmFtcyA9IElFRUU4MDIxMV9IVF9NQ1NfVFhfREVGSU5FRCwgXAorCQl9LCBcCit9CisjZWxzZQorI2RlZmluZSBXTDEyWFhfSFRfQ0FQIHsgXAorCS5odF9zdXBwb3J0ZWQgPSBmYWxzZSwgXAorfQorI2VuZGlmCisKKy8qIGNhbid0IGJlIGNvbnN0LCBtYWM4MDIxMSB3cml0ZXMgdG8gdGhpcyAqLworc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgd2wxMjcxX2JhbmRfMmdoeiA9IHsKKwkuY2hhbm5lbHMgPSB3bDEyNzFfY2hhbm5lbHMsCisJLm5fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKHdsMTI3MV9jaGFubmVscyksCisJLmJpdHJhdGVzID0gd2wxMjcxX3JhdGVzLAorCS5uX2JpdHJhdGVzID0gQVJSQVlfU0laRSh3bDEyNzFfcmF0ZXMpLAorCS5odF9jYXAJPSBXTDEyWFhfSFRfQ0FQLAorfTsKKworLyogNSBHSHogZGF0YSByYXRlcyBmb3IgV0wxMjczICovCitzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9yYXRlIHdsMTI3MV9yYXRlc181Z2h6W10gPSB7CisJeyAuYml0cmF0ZSA9IDYwLAorCSAgLmh3X3ZhbHVlID0gQ09ORl9IV19CSVRfUkFURV82TUJQUywKKwkgIC5od192YWx1ZV9zaG9ydCA9IENPTkZfSFdfQklUX1JBVEVfNk1CUFMsIH0sCisJeyAuYml0cmF0ZSA9IDkwLAorCSAgLmh3X3ZhbHVlID0gQ09ORl9IV19CSVRfUkFURV85TUJQUywKKwkgIC5od192YWx1ZV9zaG9ydCA9IENPTkZfSFdfQklUX1JBVEVfOU1CUFMsIH0sCisJeyAuYml0cmF0ZSA9IDEyMCwKKwkgIC5od192YWx1ZSA9IENPTkZfSFdfQklUX1JBVEVfMTJNQlBTLAorCSAgLmh3X3ZhbHVlX3Nob3J0ID0gQ09ORl9IV19CSVRfUkFURV8xMk1CUFMsIH0sCisJeyAuYml0cmF0ZSA9IDE4MCwKKwkgIC5od192YWx1ZSA9IENPTkZfSFdfQklUX1JBVEVfMThNQlBTLAorCSAgLmh3X3ZhbHVlX3Nob3J0ID0gQ09ORl9IV19CSVRfUkFURV8xOE1CUFMsIH0sCisJeyAuYml0cmF0ZSA9IDI0MCwKKwkgIC5od192YWx1ZSA9IENPTkZfSFdfQklUX1JBVEVfMjRNQlBTLAorCSAgLmh3X3ZhbHVlX3Nob3J0ID0gQ09ORl9IV19CSVRfUkFURV8yNE1CUFMsIH0sCisJeyAuYml0cmF0ZSA9IDM2MCwKKwkgLmh3X3ZhbHVlID0gQ09ORl9IV19CSVRfUkFURV8zNk1CUFMsCisJIC5od192YWx1ZV9zaG9ydCA9IENPTkZfSFdfQklUX1JBVEVfMzZNQlBTLCB9LAorCXsgLmJpdHJhdGUgPSA0ODAsCisJICAuaHdfdmFsdWUgPSBDT05GX0hXX0JJVF9SQVRFXzQ4TUJQUywKKwkgIC5od192YWx1ZV9zaG9ydCA9IENPTkZfSFdfQklUX1JBVEVfNDhNQlBTLCB9LAorCXsgLmJpdHJhdGUgPSA1NDAsCisJICAuaHdfdmFsdWUgPSBDT05GX0hXX0JJVF9SQVRFXzU0TUJQUywKKwkgIC5od192YWx1ZV9zaG9ydCA9IENPTkZfSFdfQklUX1JBVEVfNTRNQlBTLCB9LAorfTsKKworLyogNSBHSHogYmFuZCBjaGFubmVscyBmb3IgV0wxMjczICovCitzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIHdsMTI3MV9jaGFubmVsc181Z2h6W10gPSB7CisJeyAuaHdfdmFsdWUgPSA3LCAuY2VudGVyX2ZyZXEgPSA1MDM1fSwKKwl7IC5od192YWx1ZSA9IDgsIC5jZW50ZXJfZnJlcSA9IDUwNDB9LAorCXsgLmh3X3ZhbHVlID0gOSwgLmNlbnRlcl9mcmVxID0gNTA0NX0sCisJeyAuaHdfdmFsdWUgPSAxMSwgLmNlbnRlcl9mcmVxID0gNTA1NX0sCisJeyAuaHdfdmFsdWUgPSAxMiwgLmNlbnRlcl9mcmVxID0gNTA2MH0sCisJeyAuaHdfdmFsdWUgPSAxNiwgLmNlbnRlcl9mcmVxID0gNTA4MH0sCisJeyAuaHdfdmFsdWUgPSAzNCwgLmNlbnRlcl9mcmVxID0gNTE3MH0sCisJeyAuaHdfdmFsdWUgPSAzNiwgLmNlbnRlcl9mcmVxID0gNTE4MH0sCisJeyAuaHdfdmFsdWUgPSAzOCwgLmNlbnRlcl9mcmVxID0gNTE5MH0sCisJeyAuaHdfdmFsdWUgPSA0MCwgLmNlbnRlcl9mcmVxID0gNTIwMH0sCisJeyAuaHdfdmFsdWUgPSA0MiwgLmNlbnRlcl9mcmVxID0gNTIxMH0sCisJeyAuaHdfdmFsdWUgPSA0NCwgLmNlbnRlcl9mcmVxID0gNTIyMH0sCisJeyAuaHdfdmFsdWUgPSA0NiwgLmNlbnRlcl9mcmVxID0gNTIzMH0sCisJeyAuaHdfdmFsdWUgPSA0OCwgLmNlbnRlcl9mcmVxID0gNTI0MH0sCisJeyAuaHdfdmFsdWUgPSA1MiwgLmNlbnRlcl9mcmVxID0gNTI2MH0sCisJeyAuaHdfdmFsdWUgPSA1NiwgLmNlbnRlcl9mcmVxID0gNTI4MH0sCisJeyAuaHdfdmFsdWUgPSA2MCwgLmNlbnRlcl9mcmVxID0gNTMwMH0sCisJeyAuaHdfdmFsdWUgPSA2NCwgLmNlbnRlcl9mcmVxID0gNTMyMH0sCisJeyAuaHdfdmFsdWUgPSAxMDAsIC5jZW50ZXJfZnJlcSA9IDU1MDB9LAorCXsgLmh3X3ZhbHVlID0gMTA0LCAuY2VudGVyX2ZyZXEgPSA1NTIwfSwKKwl7IC5od192YWx1ZSA9IDEwOCwgLmNlbnRlcl9mcmVxID0gNTU0MH0sCisJeyAuaHdfdmFsdWUgPSAxMTIsIC5jZW50ZXJfZnJlcSA9IDU1NjB9LAorCXsgLmh3X3ZhbHVlID0gMTE2LCAuY2VudGVyX2ZyZXEgPSA1NTgwfSwKKwl7IC5od192YWx1ZSA9IDEyMCwgLmNlbnRlcl9mcmVxID0gNTYwMH0sCisJeyAuaHdfdmFsdWUgPSAxMjQsIC5jZW50ZXJfZnJlcSA9IDU2MjB9LAorCXsgLmh3X3ZhbHVlID0gMTI4LCAuY2VudGVyX2ZyZXEgPSA1NjQwfSwKKwl7IC5od192YWx1ZSA9IDEzMiwgLmNlbnRlcl9mcmVxID0gNTY2MH0sCisJeyAuaHdfdmFsdWUgPSAxMzYsIC5jZW50ZXJfZnJlcSA9IDU2ODB9LAorCXsgLmh3X3ZhbHVlID0gMTQwLCAuY2VudGVyX2ZyZXEgPSA1NzAwfSwKKwl7IC5od192YWx1ZSA9IDE0OSwgLmNlbnRlcl9mcmVxID0gNTc0NX0sCisJeyAuaHdfdmFsdWUgPSAxNTMsIC5jZW50ZXJfZnJlcSA9IDU3NjV9LAorCXsgLmh3X3ZhbHVlID0gMTU3LCAuY2VudGVyX2ZyZXEgPSA1Nzg1fSwKKwl7IC5od192YWx1ZSA9IDE2MSwgLmNlbnRlcl9mcmVxID0gNTgwNX0sCisJeyAuaHdfdmFsdWUgPSAxNjUsIC5jZW50ZXJfZnJlcSA9IDU4MjV9LAorfTsKKworLyogbWFwcGluZyB0byBpbmRleGVzIGZvciB3bDEyNzFfcmF0ZXNfNWdoeiAqLworc3RhdGljIGNvbnN0IHU4IHdsMTI3MV9yYXRlX3RvX2lkeF81Z2h6W10gPSB7CisJLyogTUNTIHJhdGVzIGFyZSB1c2VkIG9ubHkgd2l0aCAxMW4gKi8KKwk3LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDT05GX0hXX1JYVFhfUkFURV9NQ1M3ICovCisJNiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ09ORl9IV19SWFRYX1JBVEVfTUNTNiAqLworCTUsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENPTkZfSFdfUlhUWF9SQVRFX01DUzUgKi8KKwk0LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDT05GX0hXX1JYVFhfUkFURV9NQ1M0ICovCisJMywgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ09ORl9IV19SWFRYX1JBVEVfTUNTMyAqLworCTIsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENPTkZfSFdfUlhUWF9SQVRFX01DUzIgKi8KKwkxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDT05GX0hXX1JYVFhfUkFURV9NQ1MxICovCisJMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ09ORl9IV19SWFRYX1JBVEVfTUNTMCAqLworCisJNywgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENPTkZfSFdfUlhUWF9SQVRFXzU0ICAgKi8KKwk2LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ09ORl9IV19SWFRYX1JBVEVfNDggICAqLworCTUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDT05GX0hXX1JYVFhfUkFURV8zNiAgICovCisJNCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENPTkZfSFdfUlhUWF9SQVRFXzI0ICAgKi8KKworCS8qIFRJLXNwZWNpZmljIHJhdGUgKi8KKwlDT05GX0hXX1JYVFhfUkFURV9VTlNVUFBPUlRFRCwgLyogQ09ORl9IV19SWFRYX1JBVEVfMjIgICAqLworCisJMywgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENPTkZfSFdfUlhUWF9SQVRFXzE4ICAgKi8KKwkyLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ09ORl9IV19SWFRYX1JBVEVfMTIgICAqLworCUNPTkZfSFdfUlhUWF9SQVRFX1VOU1VQUE9SVEVELCAvKiBDT05GX0hXX1JYVFhfUkFURV8xMSAgICovCisJMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENPTkZfSFdfUlhUWF9SQVRFXzkgICAgKi8KKwkwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ09ORl9IV19SWFRYX1JBVEVfNiAgICAqLworCUNPTkZfSFdfUlhUWF9SQVRFX1VOU1VQUE9SVEVELCAvKiBDT05GX0hXX1JYVFhfUkFURV81XzUgICovCisJQ09ORl9IV19SWFRYX1JBVEVfVU5TVVBQT1JURUQsIC8qIENPTkZfSFdfUlhUWF9SQVRFXzIgICAgKi8KKwlDT05GX0hXX1JYVFhfUkFURV9VTlNVUFBPUlRFRCAgLyogQ09ORl9IV19SWFRYX1JBVEVfMSAgICAqLworfTsKKworc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgd2wxMjcxX2JhbmRfNWdoeiA9IHsKKwkuY2hhbm5lbHMgPSB3bDEyNzFfY2hhbm5lbHNfNWdoeiwKKwkubl9jaGFubmVscyA9IEFSUkFZX1NJWkUod2wxMjcxX2NoYW5uZWxzXzVnaHopLAorCS5iaXRyYXRlcyA9IHdsMTI3MV9yYXRlc181Z2h6LAorCS5uX2JpdHJhdGVzID0gQVJSQVlfU0laRSh3bDEyNzFfcmF0ZXNfNWdoeiksCisJLmh0X2NhcAk9IFdMMTJYWF9IVF9DQVAsCit9OworCitzdGF0aWMgY29uc3QgdTggKndsMTI3MV9iYW5kX3JhdGVfdG9faWR4W10gPSB7CisJW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0gd2wxMjcxX3JhdGVfdG9faWR4XzJnaHosCisJW0lFRUU4MDIxMV9CQU5EXzVHSFpdID0gd2wxMjcxX3JhdGVfdG9faWR4XzVnaHoKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX29wcyB3bDEyNzFfb3BzID0geworCS5zdGFydCA9IHdsMTI3MV9vcF9zdGFydCwKKwkuc3RvcCA9IHdsMTI3MV9vcF9zdG9wLAorCS5hZGRfaW50ZXJmYWNlID0gd2wxMjcxX29wX2FkZF9pbnRlcmZhY2UsCisJLnJlbW92ZV9pbnRlcmZhY2UgPSB3bDEyNzFfb3BfcmVtb3ZlX2ludGVyZmFjZSwKKwkuY29uZmlnID0gd2wxMjcxX29wX2NvbmZpZywKKwkucHJlcGFyZV9tdWx0aWNhc3QgPSB3bDEyNzFfb3BfcHJlcGFyZV9tdWx0aWNhc3QsCisJLmNvbmZpZ3VyZV9maWx0ZXIgPSB3bDEyNzFfb3BfY29uZmlndXJlX2ZpbHRlciwKKwkudHggPSB3bDEyNzFfb3BfdHgsCisJLnNldF9rZXkgPSB3bDEyNzFfb3Bfc2V0X2tleSwKKwkuaHdfc2NhbiA9IHdsMTI3MV9vcF9od19zY2FuLAorCS5ic3NfaW5mb19jaGFuZ2VkID0gd2wxMjcxX29wX2Jzc19pbmZvX2NoYW5nZWQsCisJLnNldF9mcmFnX3RocmVzaG9sZCA9IHdsMTI3MV9vcF9zZXRfZnJhZ190aHJlc2hvbGQsCisJLnNldF9ydHNfdGhyZXNob2xkID0gd2wxMjcxX29wX3NldF9ydHNfdGhyZXNob2xkLAorCS5jb25mX3R4ID0gd2wxMjcxX29wX2NvbmZfdHgsCisJLmdldF90c2YgPSB3bDEyNzFfb3BfZ2V0X3RzZiwKKwkuZ2V0X3N1cnZleSA9IHdsMTI3MV9vcF9nZXRfc3VydmV5LAorCUNGRzgwMjExX1RFU1RNT0RFX0NNRCh3bDEyNzFfdG1fY21kKQorfTsKKworCit1OCB3bDEyNzFfcmF0ZV90b19pZHgoaW50IHJhdGUsIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCkKK3sKKwl1OCBpZHg7CisKKwlCVUdfT04oYmFuZCA+PSBzaXplb2Yod2wxMjcxX2JhbmRfcmF0ZV90b19pZHgpL3NpemVvZih1OCAqKSk7CisKKwlpZiAodW5saWtlbHkocmF0ZSA+PSBDT05GX0hXX1JYVFhfUkFURV9NQVgpKSB7CisJCXdsMTI3MV9lcnJvcigiSWxsZWdhbCBSWCByYXRlIGZyb20gSFc6ICVkIiwgcmF0ZSk7CisJCXJldHVybiAwOworCX0KKworCWlkeCA9IHdsMTI3MV9iYW5kX3JhdGVfdG9faWR4W2JhbmRdW3JhdGVdOworCWlmICh1bmxpa2VseShpZHggPT0gQ09ORl9IV19SWFRYX1JBVEVfVU5TVVBQT1JURUQpKSB7CisJCXdsMTI3MV9lcnJvcigiVW5zdXBwb3J0ZWQgUlggcmF0ZSBmcm9tIEhXOiAlZCIsIHJhdGUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gaWR4OworfQorCitzdGF0aWMgc3NpemVfdCB3bDEyNzFfc3lzZnNfc2hvd19idF9jb2V4X3N0YXRlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQkgICAgICAgY2hhciAqYnVmKQoreworCXN0cnVjdCB3bDEyNzEgKndsID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3NpemVfdCBsZW47CisKKwlsZW4gPSBQQUdFX1NJWkU7CisKKwltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOworCWxlbiA9IHNucHJpbnRmKGJ1ZiwgbGVuLCAiJWRcblxuMCAtIG9mZlxuMSAtIG9uXG4iLAorCQkgICAgICAgd2wtPnNnX2VuYWJsZWQpOworCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKKworCXJldHVybiBsZW47CisKK30KKworc3RhdGljIHNzaXplX3Qgd2wxMjcxX3N5c2ZzX3N0b3JlX2J0X2NvZXhfc3RhdGUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3Qgd2wxMjcxICp3bCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIGxvbmcgcmVzOworCWludCByZXQ7CisKKwlyZXQgPSBzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmcmVzKTsKKworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV93YXJuaW5nKCJpbmNvcnJlY3QgdmFsdWUgd3JpdHRlbiB0byBidF9jb2V4X21vZGUiKTsKKwkJcmV0dXJuIGNvdW50OworCX0KKworCW11dGV4X2xvY2soJndsLT5tdXRleCk7CisKKwlyZXMgPSAhIXJlczsKKworCWlmIChyZXMgPT0gd2wtPnNnX2VuYWJsZWQpCisJCWdvdG8gb3V0OworCisJd2wtPnNnX2VuYWJsZWQgPSByZXM7CisKKwlpZiAod2wtPnN0YXRlID09IFdMMTI3MV9TVEFURV9PRkYpCisJCWdvdG8gb3V0OworCisJcmV0ID0gd2wxMjcxX3BzX2VscF93YWtldXAod2wsIGZhbHNlKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwl3bDEyNzFfYWN4X3NnX2VuYWJsZSh3bCwgd2wtPnNnX2VuYWJsZWQpOworCXdsMTI3MV9wc19lbHBfc2xlZXAod2wpOworCisgb3V0OgorCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihidF9jb2V4X3N0YXRlLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJICAgd2wxMjcxX3N5c2ZzX3Nob3dfYnRfY29leF9zdGF0ZSwKKwkJICAgd2wxMjcxX3N5c2ZzX3N0b3JlX2J0X2NvZXhfc3RhdGUpOworCitzdGF0aWMgc3NpemVfdCB3bDEyNzFfc3lzZnNfc2hvd19od19wZ192ZXIoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJICAgY2hhciAqYnVmKQoreworCXN0cnVjdCB3bDEyNzEgKndsID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3NpemVfdCBsZW47CisKKwlsZW4gPSBQQUdFX1NJWkU7CisKKwltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOworCWlmICh3bC0+aHdfcGdfdmVyID49IDApCisJCWxlbiA9IHNucHJpbnRmKGJ1ZiwgbGVuLCAiJWRcbiIsIHdsLT5od19wZ192ZXIpOworCWVsc2UKKwkJbGVuID0gc25wcmludGYoYnVmLCBsZW4sICJuL2FcbiIpOworCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKKworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihod19wZ192ZXIsIFNfSVJVR08gfCBTX0lXVVNSLAorCQkgICB3bDEyNzFfc3lzZnNfc2hvd19od19wZ192ZXIsIE5VTEwpOworCitpbnQgd2wxMjcxX3JlZ2lzdGVyX2h3KHN0cnVjdCB3bDEyNzEgKndsKQoreworCWludCByZXQ7CisKKwlpZiAod2wtPm1hYzgwMjExX3JlZ2lzdGVyZWQpCisJCXJldHVybiAwOworCisJU0VUX0lFRUU4MDIxMV9QRVJNX0FERFIod2wtPmh3LCB3bC0+bWFjX2FkZHIpOworCisJcmV0ID0gaWVlZTgwMjExX3JlZ2lzdGVyX2h3KHdsLT5odyk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX2Vycm9yKCJ1bmFibGUgdG8gcmVnaXN0ZXIgbWFjODAyMTEgaHc6ICVkIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwl3bC0+bWFjODAyMTFfcmVnaXN0ZXJlZCA9IHRydWU7CisKKwl3bDEyNzFfZGVidWdmc19pbml0KHdsKTsKKworCXJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmd2wxMjcxX2Rldl9ub3RpZmllcik7CisKKwl3bDEyNzFfbm90aWNlKCJsb2FkZWQiKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwod2wxMjcxX3JlZ2lzdGVyX2h3KTsKKwordm9pZCB3bDEyNzFfdW5yZWdpc3Rlcl9odyhzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwl1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmd2wxMjcxX2Rldl9ub3RpZmllcik7CisJaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcod2wtPmh3KTsKKwl3bC0+bWFjODAyMTFfcmVnaXN0ZXJlZCA9IGZhbHNlOworCit9CitFWFBPUlRfU1lNQk9MX0dQTCh3bDEyNzFfdW5yZWdpc3Rlcl9odyk7CisKK2ludCB3bDEyNzFfaW5pdF9pZWVlODAyMTEoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJc3RhdGljIGNvbnN0IHUzMiBjaXBoZXJfc3VpdGVzW10gPSB7CisJCVdMQU5fQ0lQSEVSX1NVSVRFX1dFUDQwLAorCQlXTEFOX0NJUEhFUl9TVUlURV9XRVAxMDQsCisJCVdMQU5fQ0lQSEVSX1NVSVRFX1RLSVAsCisJCVdMQU5fQ0lQSEVSX1NVSVRFX0NDTVAsCisJCVdMMTI3MV9DSVBIRVJfU1VJVEVfR0VNLAorCX07CisKKwkvKiBUaGUgdHggZGVzY3JpcHRvciBidWZmZXIgYW5kIHRoZSBUS0lQIHNwYWNlLiAqLworCXdsLT5ody0+ZXh0cmFfdHhfaGVhZHJvb20gPSBXTDEyNzFfVEtJUF9JVl9TUEFDRSArCisJCXNpemVvZihzdHJ1Y3Qgd2wxMjcxX3R4X2h3X2Rlc2NyKTsKKworCS8qIHVuaXQgdXMgKi8KKwkvKiBGSVhNRTogZmluZCBhIHByb3BlciB2YWx1ZSAqLworCXdsLT5ody0+Y2hhbm5lbF9jaGFuZ2VfdGltZSA9IDEwMDAwOworCXdsLT5ody0+bWF4X2xpc3Rlbl9pbnRlcnZhbCA9IHdsLT5jb25mLmNvbm4ubWF4X2xpc3Rlbl9pbnRlcnZhbDsKKworCXdsLT5ody0+ZmxhZ3MgPSBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSB8CisJCUlFRUU4MDIxMV9IV19CRUFDT05fRklMVEVSIHwKKwkJSUVFRTgwMjExX0hXX1NVUFBPUlRTX1BTIHwKKwkJSUVFRTgwMjExX0hXX1NVUFBPUlRTX1VBUFNEIHwKKwkJSUVFRTgwMjExX0hXX0hBU19SQVRFX0NPTlRST0wgfAorCQlJRUVFODAyMTFfSFdfQ09OTkVDVElPTl9NT05JVE9SIHwKKwkJSUVFRTgwMjExX0hXX1NVUFBPUlRTX0NRTV9SU1NJOworCisJd2wtPmh3LT53aXBoeS0+Y2lwaGVyX3N1aXRlcyA9IGNpcGhlcl9zdWl0ZXM7CisJd2wtPmh3LT53aXBoeS0+bl9jaXBoZXJfc3VpdGVzID0gQVJSQVlfU0laRShjaXBoZXJfc3VpdGVzKTsKKworCXdsLT5ody0+d2lwaHktPmludGVyZmFjZV9tb2RlcyA9IEJJVChOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB8CisJCUJJVChOTDgwMjExX0lGVFlQRV9BREhPQyk7CisJd2wtPmh3LT53aXBoeS0+bWF4X3NjYW5fc3NpZHMgPSAxOworCS8qCisJICogTWF4aW11bSBsZW5ndGggb2YgZWxlbWVudHMgaW4gc2Nhbm5pbmcgcHJvYmUgcmVxdWVzdCB0ZW1wbGF0ZXMKKwkgKiBzaG91bGQgYmUgdGhlIG1heGltdW0gbGVuZ3RoIHBvc3NpYmxlIGZvciBhIHRlbXBsYXRlLCB3aXRob3V0CisJICogdGhlIElFRUU4MDIxMSBoZWFkZXIgb2YgdGhlIHRlbXBsYXRlCisJICovCisJd2wtPmh3LT53aXBoeS0+bWF4X3NjYW5faWVfbGVuID0gV0wxMjcxX0NNRF9URU1QTF9NQVhfU0laRSAtCisJCQlzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZWFkZXIpOworCXdsLT5ody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0gJndsMTI3MV9iYW5kXzJnaHo7CisJd2wtPmh3LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0gPSAmd2wxMjcxX2JhbmRfNWdoejsKKworCXdsLT5ody0+cXVldWVzID0gNDsKKwl3bC0+aHctPm1heF9yYXRlcyA9IDE7CisKKwl3bC0+aHctPndpcGh5LT5yZWdfbm90aWZpZXIgPSB3bDEyNzFfcmVnX25vdGlmeTsKKworCVNFVF9JRUVFODAyMTFfREVWKHdsLT5odywgd2wxMjcxX3dsX3RvX2Rldih3bCkpOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh3bDEyNzFfaW5pdF9pZWVlODAyMTEpOworCisjZGVmaW5lIFdMMTI3MV9ERUZBVUxUX0NIQU5ORUwgMAorCitzdHJ1Y3QgaWVlZTgwMjExX2h3ICp3bDEyNzFfYWxsb2NfaHcodm9pZCkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0X2RldiA9IE5VTEw7CisJc3RydWN0IHdsMTI3MSAqd2w7CisJaW50IGksIHJldDsKKwl1bnNpZ25lZCBpbnQgb3JkZXI7CisKKwlodyA9IGllZWU4MDIxMV9hbGxvY19odyhzaXplb2YoKndsKSwgJndsMTI3MV9vcHMpOworCWlmICghaHcpIHsKKwkJd2wxMjcxX2Vycm9yKCJjb3VsZCBub3QgYWxsb2MgaWVlZTgwMjExX2h3Iik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2h3X2FsbG9jOworCX0KKworCXBsYXRfZGV2ID0ga21lbWR1cCgmd2wxMjcxX2RldmljZSwgc2l6ZW9mKHdsMTI3MV9kZXZpY2UpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBsYXRfZGV2KSB7CisJCXdsMTI3MV9lcnJvcigiY291bGQgbm90IGFsbG9jYXRlIHBsYXRmb3JtX2RldmljZSIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycl9wbGF0X2FsbG9jOworCX0KKworCXdsID0gaHctPnByaXY7CisJbWVtc2V0KHdsLCAwLCBzaXplb2YoKndsKSk7CisKKwlJTklUX0xJU1RfSEVBRCgmd2wtPmxpc3QpOworCisJd2wtPmh3ID0gaHc7CisJd2wtPnBsYXRfZGV2ID0gcGxhdF9kZXY7CisKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX1RYX1FVRVVFUzsgaSsrKQorCQlza2JfcXVldWVfaGVhZF9pbml0KCZ3bC0+dHhfcXVldWVbaV0pOworCisJSU5JVF9ERUxBWUVEX1dPUksoJndsLT5lbHBfd29yaywgd2wxMjcxX2VscF93b3JrKTsKKwlJTklUX0RFTEFZRURfV09SSygmd2wtPnBzcG9sbF93b3JrLCB3bDEyNzFfcHNwb2xsX3dvcmspOworCUlOSVRfV09SSygmd2wtPmlycV93b3JrLCB3bDEyNzFfaXJxX3dvcmspOworCUlOSVRfV09SSygmd2wtPnR4X3dvcmssIHdsMTI3MV90eF93b3JrKTsKKwlJTklUX1dPUksoJndsLT5yZWNvdmVyeV93b3JrLCB3bDEyNzFfcmVjb3Zlcnlfd29yayk7CisJSU5JVF9ERUxBWUVEX1dPUksoJndsLT5zY2FuX2NvbXBsZXRlX3dvcmssIHdsMTI3MV9zY2FuX2NvbXBsZXRlX3dvcmspOworCXdsLT5jaGFubmVsID0gV0wxMjcxX0RFRkFVTFRfQ0hBTk5FTDsKKwl3bC0+YmVhY29uX2ludCA9IFdMMTI3MV9ERUZBVUxUX0JFQUNPTl9JTlQ7CisJd2wtPmRlZmF1bHRfa2V5ID0gMDsKKwl3bC0+cnhfY291bnRlciA9IDA7CisJd2wtPnJ4X2NvbmZpZyA9IFdMMTI3MV9ERUZBVUxUX1JYX0NPTkZJRzsKKwl3bC0+cnhfZmlsdGVyID0gV0wxMjcxX0RFRkFVTFRfUlhfRklMVEVSOworCXdsLT5wc21fZW50cnlfcmV0cnkgPSAwOworCXdsLT5wb3dlcl9sZXZlbCA9IFdMMTI3MV9ERUZBVUxUX1BPV0VSX0xFVkVMOworCXdsLT5iYXNpY19yYXRlX3NldCA9IENPTkZfVFhfUkFURV9NQVNLX0JBU0lDOworCXdsLT5iYXNpY19yYXRlID0gQ09ORl9UWF9SQVRFX01BU0tfQkFTSUM7CisJd2wtPnJhdGVfc2V0ID0gQ09ORl9UWF9SQVRFX01BU0tfQkFTSUM7CisJd2wtPnN0YV9yYXRlX3NldCA9IDA7CisJd2wtPmJhbmQgPSBJRUVFODAyMTFfQkFORF8yR0haOworCXdsLT52aWYgPSBOVUxMOworCXdsLT5mbGFncyA9IDA7CisJd2wtPnNnX2VuYWJsZWQgPSB0cnVlOworCXdsLT5od19wZ192ZXIgPSAtMTsKKworCW1lbXNldCh3bC0+dHhfZnJhbWVzX21hcCwgMCwgc2l6ZW9mKHdsLT50eF9mcmFtZXNfbWFwKSk7CisJZm9yIChpID0gMDsgaSA8IEFDWF9UWF9ERVNDUklQVE9SUzsgaSsrKQorCQl3bC0+dHhfZnJhbWVzW2ldID0gTlVMTDsKKworCXNwaW5fbG9ja19pbml0KCZ3bC0+d2xfbG9jayk7CisKKwl3bC0+c3RhdGUgPSBXTDEyNzFfU1RBVEVfT0ZGOworCW11dGV4X2luaXQoJndsLT5tdXRleCk7CisKKwkvKiBBcHBseSBkZWZhdWx0IGRyaXZlciBjb25maWd1cmF0aW9uLiAqLworCXdsMTI3MV9jb25mX2luaXQod2wpOworCisJb3JkZXIgPSBnZXRfb3JkZXIoV0wxMjcxX0FHR1JfQlVGRkVSX1NJWkUpOworCXdsLT5hZ2dyX2J1ZiA9ICh1OCAqKV9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCwgb3JkZXIpOworCWlmICghd2wtPmFnZ3JfYnVmKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2h3OworCX0KKworCS8qIFJlZ2lzdGVyIHBsYXRmb3JtIGRldmljZSAqLworCXJldCA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcih3bC0+cGxhdF9kZXYpOworCWlmIChyZXQpIHsKKwkJd2wxMjcxX2Vycm9yKCJjb3VsZG4ndCByZWdpc3RlciBwbGF0Zm9ybSBkZXZpY2UiKTsKKwkJZ290byBlcnJfYWdncjsKKwl9CisJZGV2X3NldF9kcnZkYXRhKCZ3bC0+cGxhdF9kZXYtPmRldiwgd2wpOworCisJLyogQ3JlYXRlIHN5c2ZzIGZpbGUgdG8gY29udHJvbCBidCBjb2V4IHN0YXRlICovCisJcmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZ3bC0+cGxhdF9kZXYtPmRldiwgJmRldl9hdHRyX2J0X2NvZXhfc3RhdGUpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV9lcnJvcigiZmFpbGVkIHRvIGNyZWF0ZSBzeXNmcyBmaWxlIGJ0X2NvZXhfc3RhdGUiKTsKKwkJZ290byBlcnJfcGxhdGZvcm07CisJfQorCisJLyogQ3JlYXRlIHN5c2ZzIGZpbGUgdG8gZ2V0IEhXIFBHIHZlcnNpb24gKi8KKwlyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJndsLT5wbGF0X2Rldi0+ZGV2LCAmZGV2X2F0dHJfaHdfcGdfdmVyKTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNzFfZXJyb3IoImZhaWxlZCB0byBjcmVhdGUgc3lzZnMgZmlsZSBod19wZ192ZXIiKTsKKwkJZ290byBlcnJfYnRfY29leF9zdGF0ZTsKKwl9CisKKwlyZXR1cm4gaHc7CisKK2Vycl9idF9jb2V4X3N0YXRlOgorCWRldmljZV9yZW1vdmVfZmlsZSgmd2wtPnBsYXRfZGV2LT5kZXYsICZkZXZfYXR0cl9idF9jb2V4X3N0YXRlKTsKKworZXJyX3BsYXRmb3JtOgorCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHdsLT5wbGF0X2Rldik7CisKK2Vycl9hZ2dyOgorCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpd2wtPmFnZ3JfYnVmLCBvcmRlcik7CisKK2Vycl9odzoKKwl3bDEyNzFfZGVidWdmc19leGl0KHdsKTsKKwlrZnJlZShwbGF0X2Rldik7CisKK2Vycl9wbGF0X2FsbG9jOgorCWllZWU4MDIxMV9mcmVlX2h3KGh3KTsKKworZXJyX2h3X2FsbG9jOgorCisJcmV0dXJuIEVSUl9QVFIocmV0KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHdsMTI3MV9hbGxvY19odyk7CisKK2ludCB3bDEyNzFfZnJlZV9odyhzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcih3bC0+cGxhdF9kZXYpOworCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpd2wtPmFnZ3JfYnVmLAorCQkJZ2V0X29yZGVyKFdMMTI3MV9BR0dSX0JVRkZFUl9TSVpFKSk7CisJa2ZyZWUod2wtPnBsYXRfZGV2KTsKKworCXdsMTI3MV9kZWJ1Z2ZzX2V4aXQod2wpOworCisJdmZyZWUod2wtPmZ3KTsKKwl3bC0+ZncgPSBOVUxMOworCWtmcmVlKHdsLT5udnMpOworCXdsLT5udnMgPSBOVUxMOworCisJa2ZyZWUod2wtPmZ3X3N0YXR1cyk7CisJa2ZyZWUod2wtPnR4X3Jlc19pZik7CisKKwlpZWVlODAyMTFfZnJlZV9odyh3bC0+aHcpOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh3bDEyNzFfZnJlZV9odyk7CisKK3UzMiB3bDEyeHhfZGVidWdfbGV2ZWw7CitFWFBPUlRfU1lNQk9MX0dQTCh3bDEyeHhfZGVidWdfbGV2ZWwpOworbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnX2xldmVsLCB3bDEyeHhfZGVidWdfbGV2ZWwsIHVpbnQsIERFQlVHX05PTkUpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1Z19sZXZlbCwgIndsMTJ4eCBkZWJ1Z2dpbmcgbGV2ZWwiKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiTHVjaWFubyBDb2VsaG8gPGx1Y2lhbm8uY29lbGhvQG5va2lhLmNvbT4iKTsKK01PRFVMRV9BVVRIT1IoIkp1dXNvIE9pa2FyaW5lbiA8anV1c28ub2lrYXJpbmVuQG5va2lhLmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9wcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3BzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBhMzczOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9wcy5jCkBAIC0wLDAgKzEsMTc4IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMjcxCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBDb250YWN0OiBMdWNpYW5vIENvZWxobyA8bHVjaWFuby5jb2VsaG9Abm9raWEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgInJlZy5oIgorI2luY2x1ZGUgInBzLmgiCisjaW5jbHVkZSAiaW8uaCIKKworI2RlZmluZSBXTDEyNzFfV0FLRVVQX1RJTUVPVVQgNTAwCisKK3ZvaWQgd2wxMjcxX2VscF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgZGVsYXllZF93b3JrICpkd29yazsKKwlzdHJ1Y3Qgd2wxMjcxICp3bDsKKworCWR3b3JrID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkZWxheWVkX3dvcmssIHdvcmspOworCXdsID0gY29udGFpbmVyX29mKGR3b3JrLCBzdHJ1Y3Qgd2wxMjcxLCBlbHBfd29yayk7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfUFNNLCAiZWxwIHdvcmsiKTsKKworCW11dGV4X2xvY2soJndsLT5tdXRleCk7CisKKwlpZiAodW5saWtlbHkod2wtPnN0YXRlID09IFdMMTI3MV9TVEFURV9PRkYpKQorCQlnb3RvIG91dDsKKworCWlmICh0ZXN0X2JpdChXTDEyNzFfRkxBR19JTl9FTFAsICZ3bC0+ZmxhZ3MpIHx8CisJICAgICghdGVzdF9iaXQoV0wxMjcxX0ZMQUdfUFNNLCAmd2wtPmZsYWdzKSAmJgorCSAgICAgIXRlc3RfYml0KFdMMTI3MV9GTEFHX0lETEUsICZ3bC0+ZmxhZ3MpKSkKKwkJZ290byBvdXQ7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfUFNNLCAiY2hpcCB0byBlbHAiKTsKKwl3bDEyNzFfcmF3X3dyaXRlMzIod2wsIEhXX0FDQ0VTU19FTFBfQ1RSTF9SRUdfQUREUiwgRUxQQ1RSTF9TTEVFUCk7CisJc2V0X2JpdChXTDEyNzFfRkxBR19JTl9FTFAsICZ3bC0+ZmxhZ3MpOworCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOworfQorCisjZGVmaW5lIEVMUF9FTlRSWV9ERUxBWSAgNQorCisvKiBSb3V0aW5lcyB0byB0b2dnbGUgc2xlZXAgbW9kZSB3aGlsZSBpbiBFTFAgKi8KK3ZvaWQgd2wxMjcxX3BzX2VscF9zbGVlcChzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlpZiAodGVzdF9iaXQoV0wxMjcxX0ZMQUdfUFNNLCAmd2wtPmZsYWdzKSB8fAorCSAgICB0ZXN0X2JpdChXTDEyNzFfRkxBR19JRExFLCAmd2wtPmZsYWdzKSkgeworCQljYW5jZWxfZGVsYXllZF93b3JrKCZ3bC0+ZWxwX3dvcmspOworCQlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKHdsLT5odywgJndsLT5lbHBfd29yaywKKwkJCQkJICAgICBtc2Vjc190b19qaWZmaWVzKEVMUF9FTlRSWV9ERUxBWSkpOworCX0KK30KKworaW50IHdsMTI3MV9wc19lbHBfd2FrZXVwKHN0cnVjdCB3bDEyNzEgKndsLCBib29sIGNoaXBfYXdha2UpCit7CisJREVDTEFSRV9DT01QTEVUSU9OX09OU1RBQ0soY29tcGwpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldDsKKwl1MzIgc3RhcnRfdGltZSA9IGppZmZpZXM7CisJYm9vbCBwZW5kaW5nID0gZmFsc2U7CisKKwlpZiAoIXRlc3RfYml0KFdMMTI3MV9GTEFHX0lOX0VMUCwgJndsLT5mbGFncykpCisJCXJldHVybiAwOworCisJd2wxMjcxX2RlYnVnKERFQlVHX1BTTSwgIndha2luZyB1cCBjaGlwIGZyb20gZWxwIik7CisKKwkvKgorCSAqIFRoZSBzcGlubG9jayBpcyByZXF1aXJlZCBoZXJlIHRvIHN5bmNocm9uaXplIGJvdGggdGhlIHdvcmsgYW5kCisJICogdGhlIGNvbXBsZXRpb24gdmFyaWFibGUgaW4gb25lIGVudGl0eS4KKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmd2wtPndsX2xvY2ssIGZsYWdzKTsKKwlpZiAod29ya19wZW5kaW5nKCZ3bC0+aXJxX3dvcmspIHx8IGNoaXBfYXdha2UpCisJCXBlbmRpbmcgPSB0cnVlOworCWVsc2UKKwkJd2wtPmVscF9jb21wbCA9ICZjb21wbDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3bC0+d2xfbG9jaywgZmxhZ3MpOworCisJd2wxMjcxX3Jhd193cml0ZTMyKHdsLCBIV19BQ0NFU1NfRUxQX0NUUkxfUkVHX0FERFIsIEVMUENUUkxfV0FLRV9VUCk7CisKKwlpZiAoIXBlbmRpbmcpIHsKKwkJcmV0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KAorCQkJJmNvbXBsLCBtc2Vjc190b19qaWZmaWVzKFdMMTI3MV9XQUtFVVBfVElNRU9VVCkpOworCQlpZiAocmV0ID09IDApIHsKKwkJCXdsMTI3MV9lcnJvcigiRUxQIHdha2V1cCB0aW1lb3V0ISIpOworCQkJaWVlZTgwMjExX3F1ZXVlX3dvcmsod2wtPmh3LCAmd2wtPnJlY292ZXJ5X3dvcmspOworCQkJcmV0ID0gLUVUSU1FRE9VVDsKKwkJCWdvdG8gZXJyOworCQl9IGVsc2UgaWYgKHJldCA8IDApIHsKKwkJCXdsMTI3MV9lcnJvcigiRUxQIHdha2V1cCBjb21wbGV0aW9uIGVycm9yLiIpOworCQkJZ290byBlcnI7CisJCX0KKwl9CisKKwljbGVhcl9iaXQoV0wxMjcxX0ZMQUdfSU5fRUxQLCAmd2wtPmZsYWdzKTsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19QU00sICJ3YWtldXAgdGltZTogJXUgbXMiLAorCQkgICAgIGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtIHN0YXJ0X3RpbWUpKTsKKwlnb3RvIG91dDsKKworZXJyOgorCXNwaW5fbG9ja19pcnFzYXZlKCZ3bC0+d2xfbG9jaywgZmxhZ3MpOworCXdsLT5lbHBfY29tcGwgPSBOVUxMOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndsLT53bF9sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJldDsKKworb3V0OgorCXJldHVybiAwOworfQorCitpbnQgd2wxMjcxX3BzX3NldF9tb2RlKHN0cnVjdCB3bDEyNzEgKndsLCBlbnVtIHdsMTI3MV9jbWRfcHNfbW9kZSBtb2RlLAorCQkgICAgICAgdTMyIHJhdGVzLCBib29sIHNlbmQpCit7CisJaW50IHJldDsKKworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgU1RBVElPTl9QT1dFUl9TQVZFX01PREU6CisJCXdsMTI3MV9kZWJ1ZyhERUJVR19QU00sICJlbnRlcmluZyBwc20iKTsKKworCQlyZXQgPSB3bDEyNzFfYWN4X3dha2VfdXBfY29uZGl0aW9ucyh3bCk7CisJCWlmIChyZXQgPCAwKSB7CisJCQl3bDEyNzFfZXJyb3IoImNvdWxkbid0IHNldCB3YWtlIHVwIGNvbmRpdGlvbnMiKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQlyZXQgPSB3bDEyNzFfY21kX3BzX21vZGUod2wsIFNUQVRJT05fUE9XRVJfU0FWRV9NT0RFLAorCQkJCQkgcmF0ZXMsIHNlbmQpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisKKwkJc2V0X2JpdChXTDEyNzFfRkxBR19QU00sICZ3bC0+ZmxhZ3MpOworCQlicmVhazsKKwljYXNlIFNUQVRJT05fQUNUSVZFX01PREU6CisJZGVmYXVsdDoKKwkJd2wxMjcxX2RlYnVnKERFQlVHX1BTTSwgImxlYXZpbmcgcHNtIik7CisJCXJldCA9IHdsMTI3MV9wc19lbHBfd2FrZXVwKHdsLCBmYWxzZSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKworCQkvKiBkaXNhYmxlIGJlYWNvbiBlYXJseSB0ZXJtaW5hdGlvbiAqLworCQlyZXQgPSB3bDEyNzFfYWN4X2JldF9lbmFibGUod2wsIGZhbHNlKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCisJCS8qIGRpc2FibGUgYmVhY29uIGZpbHRlcmluZyAqLworCQlyZXQgPSB3bDEyNzFfYWN4X2JlYWNvbl9maWx0ZXJfb3B0KHdsLCBmYWxzZSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKworCQlyZXQgPSB3bDEyNzFfY21kX3BzX21vZGUod2wsIFNUQVRJT05fQUNUSVZFX01PREUsCisJCQkJCSByYXRlcywgc2VuZCk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKworCQljbGVhcl9iaXQoV0wxMjcxX0ZMQUdfUFNNLCAmd2wtPmZsYWdzKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvcHMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9wcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0MTUwNjAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvcHMuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMjcxCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBDb250YWN0OiBMdWNpYW5vIENvZWxobyA8bHVjaWFuby5jb2VsaG9Abm9raWEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBfX1BTX0hfXworI2RlZmluZSBfX1BTX0hfXworCisjaW5jbHVkZSAid2wxMnh4LmgiCisjaW5jbHVkZSAiYWN4LmgiCisKK2ludCB3bDEyNzFfcHNfc2V0X21vZGUoc3RydWN0IHdsMTI3MSAqd2wsIGVudW0gd2wxMjcxX2NtZF9wc19tb2RlIG1vZGUsCisJCSAgICAgICB1MzIgcmF0ZXMsIGJvb2wgc2VuZCk7Cit2b2lkIHdsMTI3MV9wc19lbHBfc2xlZXAoc3RydWN0IHdsMTI3MSAqd2wpOworaW50IHdsMTI3MV9wc19lbHBfd2FrZXVwKHN0cnVjdCB3bDEyNzEgKndsLCBib29sIGNoaXBfYXdha2UpOwordm9pZCB3bDEyNzFfZWxwX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKKworI2VuZGlmIC8qIF9fV0wxMjcxX1BTX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9yZWcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9yZWcuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9yZWcuaApyZW5hbWUgdG8gZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3JlZy5oCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9yeC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4MjMwNGMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvcnguYwpAQCAtMCwwICsxLDIwMyBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdsMTI3MQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIENvbnRhY3Q6IEx1Y2lhbm8gQ29lbGhvIDxsdWNpYW5vLmNvZWxob0Bub2tpYS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvZ2ZwLmg+CisKKyNpbmNsdWRlICJ3bDEyeHguaCIKKyNpbmNsdWRlICJhY3guaCIKKyNpbmNsdWRlICJyZWcuaCIKKyNpbmNsdWRlICJyeC5oIgorI2luY2x1ZGUgImlvLmgiCisKK3N0YXRpYyB1OCB3bDEyNzFfcnhfZ2V0X21lbV9ibG9jayhzdHJ1Y3Qgd2wxMjcxX2Z3X3N0YXR1cyAqc3RhdHVzLAorCQkJCSAgdTMyIGRydl9yeF9jb3VudGVyKQoreworCXJldHVybiBsZTMyX3RvX2NwdShzdGF0dXMtPnJ4X3BrdF9kZXNjc1tkcnZfcnhfY291bnRlcl0pICYKKwkJUlhfTUVNX0JMT0NLX01BU0s7Cit9CisKK3N0YXRpYyB1MzIgd2wxMjcxX3J4X2dldF9idWZfc2l6ZShzdHJ1Y3Qgd2wxMjcxX2Z3X3N0YXR1cyAqc3RhdHVzLAorCQkJCSB1MzIgZHJ2X3J4X2NvdW50ZXIpCit7CisJcmV0dXJuIChsZTMyX3RvX2NwdShzdGF0dXMtPnJ4X3BrdF9kZXNjc1tkcnZfcnhfY291bnRlcl0pICYKKwkJUlhfQlVGX1NJWkVfTUFTSykgPj4gUlhfQlVGX1NJWkVfU0hJRlRfRElWOworfQorCitzdGF0aWMgdm9pZCB3bDEyNzFfcnhfc3RhdHVzKHN0cnVjdCB3bDEyNzEgKndsLAorCQkJICAgICBzdHJ1Y3Qgd2wxMjcxX3J4X2Rlc2NyaXB0b3IgKmRlc2MsCisJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMsCisJCQkgICAgIHU4IGJlYWNvbikKK3sKKwllbnVtIGllZWU4MDIxMV9iYW5kIGRlc2NfYmFuZDsKKworCW1lbXNldChzdGF0dXMsIDAsIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cykpOworCisJc3RhdHVzLT5iYW5kID0gd2wtPmJhbmQ7CisKKwlpZiAoKGRlc2MtPmZsYWdzICYgV0wxMjcxX1JYX0RFU0NfQkFORF9NQVNLKSA9PSBXTDEyNzFfUlhfREVTQ19CQU5EX0JHKQorCQlkZXNjX2JhbmQgPSBJRUVFODAyMTFfQkFORF8yR0haOworCWVsc2UKKwkJZGVzY19iYW5kID0gSUVFRTgwMjExX0JBTkRfNUdIWjsKKworCXN0YXR1cy0+cmF0ZV9pZHggPSB3bDEyNzFfcmF0ZV90b19pZHgoZGVzYy0+cmF0ZSwgZGVzY19iYW5kKTsKKworI2lmZGVmIENPTkZJR19XTDEyWFhfSFQKKwkvKiAxMW4gc3VwcG9ydCAqLworCWlmIChkZXNjLT5yYXRlIDw9IENPTkZfSFdfUlhUWF9SQVRFX01DUzApCisJCXN0YXR1cy0+ZmxhZyB8PSBSWF9GTEFHX0hUOworI2VuZGlmCisKKwlzdGF0dXMtPnNpZ25hbCA9IGRlc2MtPnJzc2k7CisKKwkvKgorCSAqIEZJWE1FOiBJbiB3bDEyNTEsIHRoZSBTTlIgc2hvdWxkIGJlIGRpdmlkZWQgYnkgdHdvLiAgSW4gd2wxMjcxIHdlCisJICogbmVlZCB0byBkaXZpZGUgYnkgdHdvIGZvciBub3csIGJ1dCBUSSBoYXMgYmVlbiBkaXNjdXNzaW5nIGFib3V0CisJICogY2hhbmdpbmcgaXQuICBUaGlzIG5lZWRzIHRvIGJlIHJlY2hlY2tlZC4KKwkgKi8KKwl3bC0+bm9pc2UgPSBkZXNjLT5yc3NpIC0gKGRlc2MtPnNuciA+PiAxKTsKKworCXN0YXR1cy0+ZnJlcSA9IGllZWU4MDIxMV9jaGFubmVsX3RvX2ZyZXF1ZW5jeShkZXNjLT5jaGFubmVsKTsKKworCWlmIChkZXNjLT5mbGFncyAmIFdMMTI3MV9SWF9ERVNDX0VOQ1JZUFRfTUFTSykgeworCQlzdGF0dXMtPmZsYWcgfD0gUlhfRkxBR19JVl9TVFJJUFBFRCB8IFJYX0ZMQUdfTU1JQ19TVFJJUFBFRDsKKworCQlpZiAobGlrZWx5KCEoZGVzYy0+c3RhdHVzICYgV0wxMjcxX1JYX0RFU0NfREVDUllQVF9GQUlMKSkpCisJCQlzdGF0dXMtPmZsYWcgfD0gUlhfRkxBR19ERUNSWVBURUQ7CisJCWlmICh1bmxpa2VseShkZXNjLT5zdGF0dXMgJiBXTDEyNzFfUlhfREVTQ19NSUNfRkFJTCkpCisJCQlzdGF0dXMtPmZsYWcgfD0gUlhfRkxBR19NTUlDX0VSUk9SOworCX0KK30KKworc3RhdGljIGludCB3bDEyNzFfcnhfaGFuZGxlX2RhdGEoc3RydWN0IHdsMTI3MSAqd2wsIHU4ICpkYXRhLCB1MzIgbGVuZ3RoKQoreworCXN0cnVjdCB3bDEyNzFfcnhfZGVzY3JpcHRvciAqZGVzYzsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXUxNiAqZmM7CisJdTggKmJ1ZjsKKwl1OCBiZWFjb24gPSAwOworCisJLyoKKwkgKiBJbiBQTFQgbW9kZSB3ZSBzZWVtIHRvIGdldCBmcmFtZXMgYW5kIG1hYzgwMjExIHdhcm5zIGFib3V0IHRoZW0sCisJICogd29ya2Fyb3VuZCB0aGlzIGJ5IG5vdCByZXRyaWV2aW5nIHRoZW0gYXQgYWxsLgorCSAqLworCWlmICh1bmxpa2VseSh3bC0+c3RhdGUgPT0gV0wxMjcxX1NUQVRFX1BMVCkpCisJCXJldHVybiAtRUlOVkFMOworCisJc2tiID0gX19kZXZfYWxsb2Nfc2tiKGxlbmd0aCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFza2IpIHsKKwkJd2wxMjcxX2Vycm9yKCJDb3VsZG4ndCBhbGxvY2F0ZSBSWCBmcmFtZSIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlidWYgPSBza2JfcHV0KHNrYiwgbGVuZ3RoKTsKKwltZW1jcHkoYnVmLCBkYXRhLCBsZW5ndGgpOworCisJLyogdGhlIGRhdGEgcmVhZCBzdGFydHMgd2l0aCB0aGUgZGVzY3JpcHRvciAqLworCWRlc2MgPSAoc3RydWN0IHdsMTI3MV9yeF9kZXNjcmlwdG9yICopIGJ1ZjsKKworCS8qIG5vdyB3ZSBwdWxsIHRoZSBkZXNjcmlwdG9yIG91dCBvZiB0aGUgYnVmZmVyICovCisJc2tiX3B1bGwoc2tiLCBzaXplb2YoKmRlc2MpKTsKKworCWZjID0gKHUxNiAqKXNrYi0+ZGF0YTsKKwlpZiAoKCpmYyAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKSA9PSBJRUVFODAyMTFfU1RZUEVfQkVBQ09OKQorCQliZWFjb24gPSAxOworCisJd2wxMjcxX3J4X3N0YXR1cyh3bCwgZGVzYywgSUVFRTgwMjExX1NLQl9SWENCKHNrYiksIGJlYWNvbik7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfUlgsICJyeCBza2IgMHglcDogJWQgQiAlcyIsIHNrYiwgc2tiLT5sZW4sCisJCSAgICAgYmVhY29uID8gImJlYWNvbiIgOiAiIik7CisKKwlza2JfdHJpbShza2IsIHNrYi0+bGVuIC0gZGVzYy0+cGFkX2xlbik7CisKKwlpZWVlODAyMTFfcnhfbmkod2wtPmh3LCBza2IpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgd2wxMjcxX3J4KHN0cnVjdCB3bDEyNzEgKndsLCBzdHJ1Y3Qgd2wxMjcxX2Z3X3N0YXR1cyAqc3RhdHVzKQoreworCXN0cnVjdCB3bDEyNzFfYWN4X21lbV9tYXAgKndsX21lbV9tYXAgPSB3bC0+dGFyZ2V0X21lbV9tYXA7CisJdTMyIGJ1Zl9zaXplOworCXUzMiBmd19yeF9jb3VudGVyICA9IHN0YXR1cy0+ZndfcnhfY291bnRlciAmIE5VTV9SWF9QS1RfREVTQ19NT0RfTUFTSzsKKwl1MzIgZHJ2X3J4X2NvdW50ZXIgPSB3bC0+cnhfY291bnRlciAmIE5VTV9SWF9QS1RfREVTQ19NT0RfTUFTSzsKKwl1MzIgcnhfY291bnRlcjsKKwl1MzIgbWVtX2Jsb2NrOworCXUzMiBwa3RfbGVuZ3RoOworCXUzMiBwa3Rfb2Zmc2V0OworCisJd2hpbGUgKGRydl9yeF9jb3VudGVyICE9IGZ3X3J4X2NvdW50ZXIpIHsKKwkJYnVmX3NpemUgPSAwOworCQlyeF9jb3VudGVyID0gZHJ2X3J4X2NvdW50ZXI7CisJCXdoaWxlIChyeF9jb3VudGVyICE9IGZ3X3J4X2NvdW50ZXIpIHsKKwkJCXBrdF9sZW5ndGggPSB3bDEyNzFfcnhfZ2V0X2J1Zl9zaXplKHN0YXR1cywgcnhfY291bnRlcik7CisJCQlpZiAoYnVmX3NpemUgKyBwa3RfbGVuZ3RoID4gV0wxMjcxX0FHR1JfQlVGRkVSX1NJWkUpCisJCQkJYnJlYWs7CisJCQlidWZfc2l6ZSArPSBwa3RfbGVuZ3RoOworCQkJcnhfY291bnRlcisrOworCQkJcnhfY291bnRlciAmPSBOVU1fUlhfUEtUX0RFU0NfTU9EX01BU0s7CisJCX0KKworCQlpZiAoYnVmX3NpemUgPT0gMCkgeworCQkJd2wxMjcxX3dhcm5pbmcoInJlY2VpdmVkIGVtcHR5IGRhdGEiKTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyoKKwkJICogQ2hvb3NlIHRoZSBibG9jayB3ZSB3YW50IHRvIHJlYWQKKwkJICogRm9yIGFnZ3JlZ2F0ZWQgcGFja2V0cywgb25seSB0aGUgZmlyc3QgbWVtb3J5IGJsb2NrIHNob3VsZAorCQkgKiBiZSByZXRyaWV2ZWQuIFRoZSBGVyB0YWtlcyBjYXJlIG9mIHRoZSByZXN0LgorCQkgKi8KKwkJbWVtX2Jsb2NrID0gd2wxMjcxX3J4X2dldF9tZW1fYmxvY2soc3RhdHVzLCBkcnZfcnhfY291bnRlcik7CisJCXdsLT5yeF9tZW1fcG9vbF9hZGRyLmFkZHIgPSAobWVtX2Jsb2NrIDw8IDgpICsKKwkJCWxlMzJfdG9fY3B1KHdsX21lbV9tYXAtPnBhY2tldF9tZW1vcnlfcG9vbF9zdGFydCk7CisJCXdsLT5yeF9tZW1fcG9vbF9hZGRyLmFkZHJfZXh0cmEgPQorCQkJd2wtPnJ4X21lbV9wb29sX2FkZHIuYWRkciArIDQ7CisJCXdsMTI3MV93cml0ZSh3bCwgV0wxMjcxX1NMVl9SRUdfREFUQSwgJndsLT5yeF9tZW1fcG9vbF9hZGRyLAorCQkJCXNpemVvZih3bC0+cnhfbWVtX3Bvb2xfYWRkciksIGZhbHNlKTsKKworCQkvKiBSZWFkIGFsbCBhdmFpbGFibGUgcGFja2V0cyBhdCBvbmNlICovCisJCXdsMTI3MV9yZWFkKHdsLCBXTDEyNzFfU0xWX01FTV9EQVRBLCB3bC0+YWdncl9idWYsCisJCQkJYnVmX3NpemUsIHRydWUpOworCisJCS8qIFNwbGl0IGRhdGEgaW50byBzZXBhcmF0ZSBwYWNrZXRzICovCisJCXBrdF9vZmZzZXQgPSAwOworCQl3aGlsZSAocGt0X29mZnNldCA8IGJ1Zl9zaXplKSB7CisJCQlwa3RfbGVuZ3RoID0gd2wxMjcxX3J4X2dldF9idWZfc2l6ZShzdGF0dXMsCisJCQkJCWRydl9yeF9jb3VudGVyKTsKKwkJCS8qCisJCQkgKiB0aGUgaGFuZGxlIGRhdGEgY2FsbCBjYW4gb25seSBmYWlsIGluIG1lbW9yeS1vdXRhZ2UKKwkJCSAqIGNvbmRpdGlvbnMsIGluIHRoYXQgY2FzZSB0aGUgcmVjZWl2ZWQgZnJhbWUgd2lsbCBqdXN0CisJCQkgKiBiZSBkcm9wcGVkLgorCQkJICovCisJCQl3bDEyNzFfcnhfaGFuZGxlX2RhdGEod2wsCisJCQkJCSAgICAgIHdsLT5hZ2dyX2J1ZiArIHBrdF9vZmZzZXQsCisJCQkJCSAgICAgIHBrdF9sZW5ndGgpOworCQkJd2wtPnJ4X2NvdW50ZXIrKzsKKwkJCWRydl9yeF9jb3VudGVyKys7CisJCQlkcnZfcnhfY291bnRlciAmPSBOVU1fUlhfUEtUX0RFU0NfTU9EX01BU0s7CisJCQlwa3Rfb2Zmc2V0ICs9IHBrdF9sZW5ndGg7CisJCX0KKwl9CisJd2wxMjcxX3dyaXRlMzIod2wsIFJYX0RSSVZFUl9DT1VOVEVSX0FERFJFU1MsCisJCQljcHVfdG9fbGUzMih3bC0+cnhfY291bnRlcikpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3J4LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvcnguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWJiMjZmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3J4LmgKQEAgLTAsMCArMSwxMjEgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3bDEyNzEKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwOSBUZXhhcyBJbnN0cnVtZW50cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogQ29udGFjdDogTHVjaWFubyBDb2VsaG8gPGx1Y2lhbm8uY29lbGhvQG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBCisgKgorICovCisKKyNpZm5kZWYgX19SWF9IX18KKyNkZWZpbmUgX19SWF9IX18KKworI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorCisjZGVmaW5lIFdMMTI3MV9SWF9NQVhfUlNTSSAtMzAKKyNkZWZpbmUgV0wxMjcxX1JYX01JTl9SU1NJIC05NQorCisjZGVmaW5lIFdMMTI3MV9SWF9BTElHTl9UTyA0CisjZGVmaW5lIFdMMTI3MV9SWF9BTElHTihsZW4pICgoKGxlbikgKyBXTDEyNzFfUlhfQUxJR05fVE8gLSAxKSAmIFwKKwkJCSAgICAgfihXTDEyNzFfUlhfQUxJR05fVE8gLSAxKSkKKworI2RlZmluZSBTSE9SVF9QUkVBTUJMRV9CSVQgICBCSVQoMCkKKyNkZWZpbmUgT0ZETV9SQVRFX0JJVCAgICAgICAgQklUKDYpCisjZGVmaW5lIFBCQ0NfUkFURV9CSVQgICAgICAgIEJJVCg3KQorCisjZGVmaW5lIFBMQ1BfSEVBREVSX0xFTkdUSCA4CisjZGVmaW5lIFJYX0RFU0NfUEFDS0VUSURfU0hJRlQgMTEKKyNkZWZpbmUgUlhfTUFYX1BBQ0tFVF9JRCAzCisKKyNkZWZpbmUgTlVNX1JYX1BLVF9ERVNDX01PRF9NQVNLICAgNworCisjZGVmaW5lIFJYX0RFU0NfVkFMSURfRkNTICAgICAgICAgMHgwMDAxCisjZGVmaW5lIFJYX0RFU0NfTUFUQ0hfUlhBRERSMSAgICAgMHgwMDAyCisjZGVmaW5lIFJYX0RFU0NfTUNBU1QgICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIFJYX0RFU0NfU1RBSU5USU0gICAgICAgICAgMHgwMDA4CisjZGVmaW5lIFJYX0RFU0NfVklSVFVBTF9CTSAgICAgICAgMHgwMDEwCisjZGVmaW5lIFJYX0RFU0NfQkNBU1QgICAgICAgICAgICAgMHgwMDIwCisjZGVmaW5lIFJYX0RFU0NfTUFUQ0hfU1NJRCAgICAgICAgMHgwMDQwCisjZGVmaW5lIFJYX0RFU0NfTUFUQ0hfQlNTSUQgICAgICAgMHgwMDgwCisjZGVmaW5lIFJYX0RFU0NfRU5DUllQVElPTl9NQVNLICAgMHgwMzAwCisjZGVmaW5lIFJYX0RFU0NfTUVBU1VSTUVOVCAgICAgICAgMHgwNDAwCisjZGVmaW5lIFJYX0RFU0NfU0VRTlVNX01BU0sgICAgICAgMHgxODAwCisjZGVmaW5lCVJYX0RFU0NfTUlDX0ZBSUwJICAweDIwMDAKKyNkZWZpbmUJUlhfREVTQ19ERUNSWVBUX0ZBSUwJICAweDQwMDAKKworLyoKKyAqIFJYIERlc2NyaXB0b3IgZmxhZ3M6CisgKgorICogQml0cyAwLTEgLSBiYW5kCisgKiBCaXQgIDIgICAtIFNUQkMKKyAqIEJpdCAgMyAgIC0gQS1NUERVCisgKiBCaXQgIDQgICAtIEhUCisgKiBCaXRzIDUtNyAtIGVuY3J5cHRpb24KKyAqLworI2RlZmluZSBXTDEyNzFfUlhfREVTQ19CQU5EX01BU0sgICAgMHgwMworI2RlZmluZSBXTDEyNzFfUlhfREVTQ19FTkNSWVBUX01BU0sgMHhFMAorCisjZGVmaW5lIFdMMTI3MV9SWF9ERVNDX0JBTkRfQkcgICAgICAweDAwCisjZGVmaW5lIFdMMTI3MV9SWF9ERVNDX0JBTkRfSiAgICAgICAweDAxCisjZGVmaW5lIFdMMTI3MV9SWF9ERVNDX0JBTkRfQSAgICAgICAweDAyCisKKyNkZWZpbmUgV0wxMjcxX1JYX0RFU0NfU1RCQyAgICAgICAgIEJJVCgyKQorI2RlZmluZSBXTDEyNzFfUlhfREVTQ19BX01QRFUgICAgICAgQklUKDMpCisjZGVmaW5lIFdMMTI3MV9SWF9ERVNDX0hUICAgICAgICAgICBCSVQoNCkKKworI2RlZmluZSBXTDEyNzFfUlhfREVTQ19FTkNSWVBUX1dFUCAgMHgyMAorI2RlZmluZSBXTDEyNzFfUlhfREVTQ19FTkNSWVBUX1RLSVAgMHg0MAorI2RlZmluZSBXTDEyNzFfUlhfREVTQ19FTkNSWVBUX0FFUyAgMHg2MAorI2RlZmluZSBXTDEyNzFfUlhfREVTQ19FTkNSWVBUX0dFTSAgMHg4MAorCisvKgorICogUlggRGVzY3JpcHRvciBzdGF0dXMKKyAqCisgKiBCaXRzIDAtMiAtIHN0YXR1cworICogQml0cyAzLTcgLSByZXNlcnZlZAorICovCisjZGVmaW5lIFdMMTI3MV9SWF9ERVNDX1NUQVRVU19NQVNLICAgICAgMHgwNworCisjZGVmaW5lIFdMMTI3MV9SWF9ERVNDX1NVQ0NFU1MgICAgICAgICAgMHgwMAorI2RlZmluZSBXTDEyNzFfUlhfREVTQ19ERUNSWVBUX0ZBSUwgICAgIDB4MDEKKyNkZWZpbmUgV0wxMjcxX1JYX0RFU0NfTUlDX0ZBSUwgICAgICAgICAweDAyCisjZGVmaW5lIFdMMTI3MV9SWF9ERVNDX0RSSVZFUl9SWF9RX0ZBSUwgMHgwMworCisjZGVmaW5lIFJYX01FTV9CTE9DS19NQVNLICAgICAweEZGCisjZGVmaW5lIFJYX0JVRl9TSVpFX01BU0sgICAgICAweEZGRjAwCisjZGVmaW5lIFJYX0JVRl9TSVpFX1NISUZUX0RJViA2CisKK3N0cnVjdCB3bDEyNzFfcnhfZGVzY3JpcHRvciB7CisJX19sZTE2IGxlbmd0aDsKKwl1OCAgc3RhdHVzOworCXU4ICBmbGFnczsKKwl1OCAgcmF0ZTsKKwl1OCAgY2hhbm5lbDsKKwlzOCAgcnNzaTsKKwl1OCAgc25yOworCV9fbGUzMiB0aW1lc3RhbXA7CisJdTggIHBhY2tldF9jbGFzczsKKwl1OCAgcHJvY2Vzc19pZDsKKwl1OCAgcGFkX2xlbjsKKwl1OCAgcmVzZXJ2ZWQ7Cit9IF9fcGFja2VkOworCit2b2lkIHdsMTI3MV9yeChzdHJ1Y3Qgd2wxMjcxICp3bCwgc3RydWN0IHdsMTI3MV9md19zdGF0dXMgKnN0YXR1cyk7Cit1OCB3bDEyNzFfcmF0ZV90b19pZHgoaW50IHJhdGUsIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3NjYW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9zY2FuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY4OTdiOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9zY2FuLmMKQEAgLTAsMCArMSwzMTEgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3bDEyNzEKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIENvbnRhY3Q6IEx1Y2lhbm8gQ29lbGhvIDxsdWNpYW5vLmNvZWxob0Bub2tpYS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvaWVlZTgwMjExLmg+CisKKyNpbmNsdWRlICJ3bDEyeHguaCIKKyNpbmNsdWRlICJjbWQuaCIKKyNpbmNsdWRlICJzY2FuLmgiCisjaW5jbHVkZSAiYWN4LmgiCisKK3ZvaWQgd2wxMjcxX3NjYW5fY29tcGxldGVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGRlbGF5ZWRfd29yayAqZHdvcms7CisJc3RydWN0IHdsMTI3MSAqd2w7CisKKwlkd29yayA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZGVsYXllZF93b3JrLCB3b3JrKTsKKwl3bCA9IGNvbnRhaW5lcl9vZihkd29yaywgc3RydWN0IHdsMTI3MSwgc2Nhbl9jb21wbGV0ZV93b3JrKTsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19TQ0FOLCAiU2Nhbm5pbmcgY29tcGxldGUiKTsKKworCW11dGV4X2xvY2soJndsLT5tdXRleCk7CisKKwlpZiAod2wtPnNjYW4uc3RhdGUgPT0gV0wxMjcxX1NDQU5fU1RBVEVfSURMRSkgeworCQltdXRleF91bmxvY2soJndsLT5tdXRleCk7CisJCXJldHVybjsKKwl9CisKKwl3bC0+c2Nhbi5zdGF0ZSA9IFdMMTI3MV9TQ0FOX1NUQVRFX0lETEU7CisJa2ZyZWUod2wtPnNjYW4uc2Nhbm5lZF9jaCk7CisJd2wtPnNjYW4uc2Nhbm5lZF9jaCA9IE5VTEw7CisJd2wtPnNjYW4ucmVxID0gTlVMTDsKKwlpZWVlODAyMTFfc2Nhbl9jb21wbGV0ZWQod2wtPmh3LCBmYWxzZSk7CisKKwkvKiByZXN0b3JlIGhhcmR3YXJlIGNvbm5lY3Rpb24gbW9uaXRvcmluZyB0ZW1wbGF0ZSAqLworCWlmICh0ZXN0X2JpdChXTDEyNzFfRkxBR19TVEFfQVNTT0NJQVRFRCwgJndsLT5mbGFncykpCisJCXdsMTI3MV9jbWRfYnVpbGRfYXBfcHJvYmVfcmVxKHdsLCB3bC0+cHJvYmVyZXEpOworCisJaWYgKHdsLT5zY2FuLmZhaWxlZCkgeworCQl3bDEyNzFfaW5mbygiU2NhbiBjb21wbGV0ZWQgZHVlIHRvIGVycm9yLiIpOworCQlpZWVlODAyMTFfcXVldWVfd29yayh3bC0+aHcsICZ3bC0+cmVjb3Zlcnlfd29yayk7CisJfQorCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKKworfQorCisKK3N0YXRpYyBpbnQgd2wxMjcxX2dldF9zY2FuX2NoYW5uZWxzKHN0cnVjdCB3bDEyNzEgKndsLAorCQkJCSAgICBzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXEsCisJCQkJICAgIHN0cnVjdCBiYXNpY19zY2FuX2NoYW5uZWxfcGFyYW1zICpjaGFubmVscywKKwkJCQkgICAgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kLCBib29sIHBhc3NpdmUpCit7CisJc3RydWN0IGNvbmZfc2Nhbl9zZXR0aW5ncyAqYyA9ICZ3bC0+Y29uZi5zY2FuOworCWludCBpLCBqOworCXUzMiBmbGFnczsKKworCWZvciAoaSA9IDAsIGogPSAwOworCSAgICAgaSA8IHJlcS0+bl9jaGFubmVscyAmJiBqIDwgV0wxMjcxX1NDQU5fTUFYX0NIQU5ORUxTOworCSAgICAgaSsrKSB7CisKKwkJZmxhZ3MgPSByZXEtPmNoYW5uZWxzW2ldLT5mbGFnczsKKworCQlpZiAoIXdsLT5zY2FuLnNjYW5uZWRfY2hbaV0gJiYKKwkJICAgICEoZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRCkgJiYKKwkJICAgICgoISEoZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9QQVNTSVZFX1NDQU4pKSA9PSBwYXNzaXZlKSAmJgorCQkgICAgKHJlcS0+Y2hhbm5lbHNbaV0tPmJhbmQgPT0gYmFuZCkpIHsKKworCQkJd2wxMjcxX2RlYnVnKERFQlVHX1NDQU4sICJiYW5kICVkLCBjZW50ZXJfZnJlcSAlZCAiLAorCQkJCSAgICAgcmVxLT5jaGFubmVsc1tpXS0+YmFuZCwKKwkJCQkgICAgIHJlcS0+Y2hhbm5lbHNbaV0tPmNlbnRlcl9mcmVxKTsKKwkJCXdsMTI3MV9kZWJ1ZyhERUJVR19TQ0FOLCAiaHdfdmFsdWUgJWQsIGZsYWdzICVYIiwKKwkJCQkgICAgIHJlcS0+Y2hhbm5lbHNbaV0tPmh3X3ZhbHVlLAorCQkJCSAgICAgcmVxLT5jaGFubmVsc1tpXS0+ZmxhZ3MpOworCQkJd2wxMjcxX2RlYnVnKERFQlVHX1NDQU4sCisJCQkJICAgICAibWF4X2FudGVubmFfZ2FpbiAlZCwgbWF4X3Bvd2VyICVkIiwKKwkJCQkgICAgIHJlcS0+Y2hhbm5lbHNbaV0tPm1heF9hbnRlbm5hX2dhaW4sCisJCQkJICAgICByZXEtPmNoYW5uZWxzW2ldLT5tYXhfcG93ZXIpOworCQkJd2wxMjcxX2RlYnVnKERFQlVHX1NDQU4sICJiZWFjb25fZm91bmQgJWQiLAorCQkJCSAgICAgcmVxLT5jaGFubmVsc1tpXS0+YmVhY29uX2ZvdW5kKTsKKworCQkJaWYgKCFwYXNzaXZlKSB7CisJCQkJY2hhbm5lbHNbal0ubWluX2R1cmF0aW9uID0KKwkJCQkJY3B1X3RvX2xlMzIoYy0+bWluX2R3ZWxsX3RpbWVfYWN0aXZlKTsKKwkJCQljaGFubmVsc1tqXS5tYXhfZHVyYXRpb24gPQorCQkJCQljcHVfdG9fbGUzMihjLT5tYXhfZHdlbGxfdGltZV9hY3RpdmUpOworCQkJfSBlbHNlIHsKKwkJCQljaGFubmVsc1tqXS5taW5fZHVyYXRpb24gPQorCQkJCQljcHVfdG9fbGUzMihjLT5taW5fZHdlbGxfdGltZV9wYXNzaXZlKTsKKwkJCQljaGFubmVsc1tqXS5tYXhfZHVyYXRpb24gPQorCQkJCQljcHVfdG9fbGUzMihjLT5tYXhfZHdlbGxfdGltZV9wYXNzaXZlKTsKKwkJCX0KKwkJCWNoYW5uZWxzW2pdLmVhcmx5X3Rlcm1pbmF0aW9uID0gMDsKKwkJCWNoYW5uZWxzW2pdLnR4X3Bvd2VyX2F0dCA9IHJlcS0+Y2hhbm5lbHNbaV0tPm1heF9wb3dlcjsKKwkJCWNoYW5uZWxzW2pdLmNoYW5uZWwgPSByZXEtPmNoYW5uZWxzW2ldLT5od192YWx1ZTsKKworCQkJbWVtc2V0KCZjaGFubmVsc1tqXS5ic3NpZF9sc2IsIDB4ZmYsIDQpOworCQkJbWVtc2V0KCZjaGFubmVsc1tqXS5ic3NpZF9tc2IsIDB4ZmYsIDIpOworCisJCQkvKiBNYXJrIHRoZSBjaGFubmVscyB3ZSBhbHJlYWR5IHVzZWQgKi8KKwkJCXdsLT5zY2FuLnNjYW5uZWRfY2hbaV0gPSB0cnVlOworCisJCQlqKys7CisJCX0KKwl9CisKKwlyZXR1cm4gajsKK30KKworI2RlZmluZSBXTDEyNzFfTk9USElOR19UT19TQ0FOIDEKKworc3RhdGljIGludCB3bDEyNzFfc2Nhbl9zZW5kKHN0cnVjdCB3bDEyNzEgKndsLCBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQsCisJCQkgICAgIGJvb2wgcGFzc2l2ZSwgdTMyIGJhc2ljX3JhdGUpCit7CisJc3RydWN0IHdsMTI3MV9jbWRfc2NhbiAqY21kOworCXN0cnVjdCB3bDEyNzFfY21kX3RyaWdnZXJfc2Nhbl90byAqdHJpZ2dlcjsKKwlpbnQgcmV0OworCXUxNiBzY2FuX29wdGlvbnMgPSAwOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCXRyaWdnZXIgPSBremFsbG9jKHNpemVvZigqdHJpZ2dlciksIEdGUF9LRVJORUwpOworCWlmICghY21kIHx8ICF0cmlnZ2VyKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCS8qIFdlIGFsd2F5cyB1c2UgaGlnaCBwcmlvcml0eSBzY2FucyAqLworCXNjYW5fb3B0aW9ucyA9IFdMMTI3MV9TQ0FOX09QVF9QUklPUklUWV9ISUdIOworCisJLyogTm8gU1NJRHMgbWVhbnMgdGhhdCB3ZSBoYXZlIGEgZm9yY2VkIHBhc3NpdmUgc2NhbiAqLworCWlmIChwYXNzaXZlIHx8IHdsLT5zY2FuLnJlcS0+bl9zc2lkcyA9PSAwKQorCQlzY2FuX29wdGlvbnMgfD0gV0wxMjcxX1NDQU5fT1BUX1BBU1NJVkU7CisKKwljbWQtPnBhcmFtcy5zY2FuX29wdGlvbnMgPSBjcHVfdG9fbGUxNihzY2FuX29wdGlvbnMpOworCisJY21kLT5wYXJhbXMubl9jaCA9IHdsMTI3MV9nZXRfc2Nhbl9jaGFubmVscyh3bCwgd2wtPnNjYW4ucmVxLAorCQkJCQkJICAgIGNtZC0+Y2hhbm5lbHMsCisJCQkJCQkgICAgYmFuZCwgcGFzc2l2ZSk7CisJaWYgKGNtZC0+cGFyYW1zLm5fY2ggPT0gMCkgeworCQlyZXQgPSBXTDEyNzFfTk9USElOR19UT19TQ0FOOworCQlnb3RvIG91dDsKKwl9CisKKwljbWQtPnBhcmFtcy50eF9yYXRlID0gY3B1X3RvX2xlMzIoYmFzaWNfcmF0ZSk7CisJY21kLT5wYXJhbXMucnhfY29uZmlnX29wdGlvbnMgPSBjcHVfdG9fbGUzMihDRkdfUlhfQUxMX0dPT0QpOworCWNtZC0+cGFyYW1zLnJ4X2ZpbHRlcl9vcHRpb25zID0KKwkJY3B1X3RvX2xlMzIoQ0ZHX1JYX1BSU1BfRU4gfCBDRkdfUlhfTUdNVF9FTiB8IENGR19SWF9CQ05fRU4pOworCisJY21kLT5wYXJhbXMubl9wcm9iZV9yZXFzID0gd2wtPmNvbmYuc2Nhbi5udW1fcHJvYmVfcmVxczsKKwljbWQtPnBhcmFtcy50eF9yYXRlID0gY3B1X3RvX2xlMzIoYmFzaWNfcmF0ZSk7CisJY21kLT5wYXJhbXMudGlkX3RyaWdnZXIgPSAwOworCWNtZC0+cGFyYW1zLnNjYW5fdGFnID0gV0wxMjcxX1NDQU5fREVGQVVMVF9UQUc7CisKKwlpZiAoYmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haKQorCQljbWQtPnBhcmFtcy5iYW5kID0gV0wxMjcxX1NDQU5fQkFORF8yXzRfR0haOworCWVsc2UKKwkJY21kLT5wYXJhbXMuYmFuZCA9IFdMMTI3MV9TQ0FOX0JBTkRfNV9HSFo7CisKKwlpZiAod2wtPnNjYW4uc3NpZF9sZW4gJiYgd2wtPnNjYW4uc3NpZCkgeworCQljbWQtPnBhcmFtcy5zc2lkX2xlbiA9IHdsLT5zY2FuLnNzaWRfbGVuOworCQltZW1jcHkoY21kLT5wYXJhbXMuc3NpZCwgd2wtPnNjYW4uc3NpZCwgd2wtPnNjYW4uc3NpZF9sZW4pOworCX0KKworCXJldCA9IHdsMTI3MV9jbWRfYnVpbGRfcHJvYmVfcmVxKHdsLCB3bC0+c2Nhbi5zc2lkLCB3bC0+c2Nhbi5zc2lkX2xlbiwKKwkJCQkJIHdsLT5zY2FuLnJlcS0+aWUsIHdsLT5zY2FuLnJlcS0+aWVfbGVuLAorCQkJCQkgYmFuZCk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX2Vycm9yKCJQUk9CRSByZXF1ZXN0IHRlbXBsYXRlIGZhaWxlZCIpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBkaXNhYmxlIHRoZSB0aW1lb3V0ICovCisJdHJpZ2dlci0+dGltZW91dCA9IDA7CisJcmV0ID0gd2wxMjcxX2NtZF9zZW5kKHdsLCBDTURfVFJJR0dFUl9TQ0FOX1RPLCB0cmlnZ2VyLAorCQkJICAgICAgc2l6ZW9mKCp0cmlnZ2VyKSwgMCk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX2Vycm9yKCJ0cmlnZ2VyIHNjYW4gdG8gZmFpbGVkIGZvciBodyBzY2FuIik7CisJCWdvdG8gb3V0OworCX0KKworCXdsMTI3MV9kdW1wKERFQlVHX1NDQU4sICJTQ0FOOiAiLCBjbWQsIHNpemVvZigqY21kKSk7CisKKwlyZXQgPSB3bDEyNzFfY21kX3NlbmQod2wsIENNRF9TQ0FOLCBjbWQsIHNpemVvZigqY21kKSwgMCk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX2Vycm9yKCJTQ0FOIGZhaWxlZCIpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZShjbWQpOworCWtmcmVlKHRyaWdnZXIpOworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgd2wxMjcxX3NjYW5fc3RtKHN0cnVjdCB3bDEyNzEgKndsKQoreworCWludCByZXQgPSAwOworCisJc3dpdGNoICh3bC0+c2Nhbi5zdGF0ZSkgeworCWNhc2UgV0wxMjcxX1NDQU5fU1RBVEVfSURMRToKKwkJYnJlYWs7CisKKwljYXNlIFdMMTI3MV9TQ0FOX1NUQVRFXzJHSFpfQUNUSVZFOgorCQlyZXQgPSB3bDEyNzFfc2Nhbl9zZW5kKHdsLCBJRUVFODAyMTFfQkFORF8yR0haLCBmYWxzZSwKKwkJCQkgICAgICAgd2wtPmNvbmYudHguYmFzaWNfcmF0ZSk7CisJCWlmIChyZXQgPT0gV0wxMjcxX05PVEhJTkdfVE9fU0NBTikgeworCQkJd2wtPnNjYW4uc3RhdGUgPSBXTDEyNzFfU0NBTl9TVEFURV8yR0haX1BBU1NJVkU7CisJCQl3bDEyNzFfc2Nhbl9zdG0od2wpOworCQl9CisKKwkJYnJlYWs7CisKKwljYXNlIFdMMTI3MV9TQ0FOX1NUQVRFXzJHSFpfUEFTU0lWRToKKwkJcmV0ID0gd2wxMjcxX3NjYW5fc2VuZCh3bCwgSUVFRTgwMjExX0JBTkRfMkdIWiwgdHJ1ZSwKKwkJCQkgICAgICAgd2wtPmNvbmYudHguYmFzaWNfcmF0ZSk7CisJCWlmIChyZXQgPT0gV0wxMjcxX05PVEhJTkdfVE9fU0NBTikgeworCQkJaWYgKHdsLT5lbmFibGVfMTFhKQorCQkJCXdsLT5zY2FuLnN0YXRlID0gV0wxMjcxX1NDQU5fU1RBVEVfNUdIWl9BQ1RJVkU7CisJCQllbHNlCisJCQkJd2wtPnNjYW4uc3RhdGUgPSBXTDEyNzFfU0NBTl9TVEFURV9ET05FOworCQkJd2wxMjcxX3NjYW5fc3RtKHdsKTsKKwkJfQorCisJCWJyZWFrOworCisJY2FzZSBXTDEyNzFfU0NBTl9TVEFURV81R0haX0FDVElWRToKKwkJcmV0ID0gd2wxMjcxX3NjYW5fc2VuZCh3bCwgSUVFRTgwMjExX0JBTkRfNUdIWiwgZmFsc2UsCisJCQkJICAgICAgIHdsLT5jb25mLnR4LmJhc2ljX3JhdGVfNSk7CisJCWlmIChyZXQgPT0gV0wxMjcxX05PVEhJTkdfVE9fU0NBTikgeworCQkJd2wtPnNjYW4uc3RhdGUgPSBXTDEyNzFfU0NBTl9TVEFURV81R0haX1BBU1NJVkU7CisJCQl3bDEyNzFfc2Nhbl9zdG0od2wpOworCQl9CisKKwkJYnJlYWs7CisKKwljYXNlIFdMMTI3MV9TQ0FOX1NUQVRFXzVHSFpfUEFTU0lWRToKKwkJcmV0ID0gd2wxMjcxX3NjYW5fc2VuZCh3bCwgSUVFRTgwMjExX0JBTkRfNUdIWiwgdHJ1ZSwKKwkJCQkgICAgICAgd2wtPmNvbmYudHguYmFzaWNfcmF0ZV81KTsKKwkJaWYgKHJldCA9PSBXTDEyNzFfTk9USElOR19UT19TQ0FOKSB7CisJCQl3bC0+c2Nhbi5zdGF0ZSA9IFdMMTI3MV9TQ0FOX1NUQVRFX0RPTkU7CisJCQl3bDEyNzFfc2Nhbl9zdG0od2wpOworCQl9CisKKwkJYnJlYWs7CisKKwljYXNlIFdMMTI3MV9TQ0FOX1NUQVRFX0RPTkU6CisJCXdsLT5zY2FuLmZhaWxlZCA9IGZhbHNlOworCQljYW5jZWxfZGVsYXllZF93b3JrKCZ3bC0+c2Nhbl9jb21wbGV0ZV93b3JrKTsKKwkJaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayh3bC0+aHcsICZ3bC0+c2Nhbl9jb21wbGV0ZV93b3JrLAorCQkJCQkgICAgIG1zZWNzX3RvX2ppZmZpZXMoMCkpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXdsMTI3MV9lcnJvcigiaW52YWxpZCBzY2FuIHN0YXRlIik7CisJCWJyZWFrOworCX0KKworCWlmIChyZXQgPCAwKSB7CisJCWNhbmNlbF9kZWxheWVkX3dvcmsoJndsLT5zY2FuX2NvbXBsZXRlX3dvcmspOworCQlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKHdsLT5odywgJndsLT5zY2FuX2NvbXBsZXRlX3dvcmssCisJCQkJCSAgICAgbXNlY3NfdG9famlmZmllcygwKSk7CisJfQorfQorCitpbnQgd2wxMjcxX3NjYW4oc3RydWN0IHdsMTI3MSAqd2wsIGNvbnN0IHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4sCisJCXN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcSkKK3sKKwlpZiAod2wtPnNjYW4uc3RhdGUgIT0gV0wxMjcxX1NDQU5fU1RBVEVfSURMRSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCXdsLT5zY2FuLnN0YXRlID0gV0wxMjcxX1NDQU5fU1RBVEVfMkdIWl9BQ1RJVkU7CisKKwlpZiAoc3NpZF9sZW4gJiYgc3NpZCkgeworCQl3bC0+c2Nhbi5zc2lkX2xlbiA9IHNzaWRfbGVuOworCQltZW1jcHkod2wtPnNjYW4uc3NpZCwgc3NpZCwgc3NpZF9sZW4pOworCX0gZWxzZSB7CisJCXdsLT5zY2FuLnNzaWRfbGVuID0gMDsKKwl9CisKKwl3bC0+c2Nhbi5yZXEgPSByZXE7CisKKwl3bC0+c2Nhbi5zY2FubmVkX2NoID0ga2NhbGxvYyhyZXEtPm5fY2hhbm5lbHMsCisJCQkJICAgICAgc2l6ZW9mKCp3bC0+c2Nhbi5zY2FubmVkX2NoKSwKKwkJCQkgICAgICBHRlBfS0VSTkVMKTsKKwkvKiB3ZSBhc3N1bWUgZmFpbHVyZSBzbyB0aGF0IHRpbWVvdXQgc2NlbmFyaW9zIGFyZSBoYW5kbGVkIGNvcnJlY3RseSAqLworCXdsLT5zY2FuLmZhaWxlZCA9IHRydWU7CisJaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayh3bC0+aHcsICZ3bC0+c2Nhbl9jb21wbGV0ZV93b3JrLAorCQkJCSAgICAgbXNlY3NfdG9famlmZmllcyhXTDEyNzFfU0NBTl9USU1FT1VUKSk7CisKKwl3bDEyNzFfc2Nhbl9zdG0od2wpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvc2Nhbi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3NjYW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjFhNzUwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3NjYW4uaApAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdsMTI3MQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIE5va2lhIENvcnBvcmF0aW9uCisgKgorICogQ29udGFjdDogTHVjaWFubyBDb2VsaG8gPGx1Y2lhbm8uY29lbGhvQG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBCisgKgorICovCisKKyNpZm5kZWYgX19TQ0FOX0hfXworI2RlZmluZSBfX1NDQU5fSF9fCisKKyNpbmNsdWRlICJ3bDEyeHguaCIKKworaW50IHdsMTI3MV9zY2FuKHN0cnVjdCB3bDEyNzEgKndsLCBjb25zdCB1OCAqc3NpZCwgc2l6ZV90IHNzaWRfbGVuLAorCQlzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXEpOworaW50IHdsMTI3MV9zY2FuX2J1aWxkX3Byb2JlX3JlcShzdHJ1Y3Qgd2wxMjcxICp3bCwKKwkJCQljb25zdCB1OCAqc3NpZCwgc2l6ZV90IHNzaWRfbGVuLAorCQkJCWNvbnN0IHU4ICppZSwgc2l6ZV90IGllX2xlbiwgdTggYmFuZCk7Cit2b2lkIHdsMTI3MV9zY2FuX3N0bShzdHJ1Y3Qgd2wxMjcxICp3bCk7Cit2b2lkIHdsMTI3MV9zY2FuX2NvbXBsZXRlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKKworI2RlZmluZSBXTDEyNzFfU0NBTl9NQVhfQ0hBTk5FTFMgICAgICAgMjQKKyNkZWZpbmUgV0wxMjcxX1NDQU5fREVGQVVMVF9UQUcgICAgICAgIDEKKyNkZWZpbmUgV0wxMjcxX1NDQU5fQ1VSUkVOVF9UWF9QV1IgICAgIDAKKyNkZWZpbmUgV0wxMjcxX1NDQU5fT1BUX0FDVElWRSAgICAgICAgIDAKKyNkZWZpbmUgV0wxMjcxX1NDQU5fT1BUX1BBU1NJVkUJICAgICAgIDEKKyNkZWZpbmUgV0wxMjcxX1NDQU5fT1BUX1BSSU9SSVRZX0hJR0ggIDQKKyNkZWZpbmUgV0wxMjcxX1NDQU5fQkFORF8yXzRfR0haIDAKKyNkZWZpbmUgV0wxMjcxX1NDQU5fQkFORF81X0dIWiAxCisKKyNkZWZpbmUgV0wxMjcxX1NDQU5fVElNRU9VVCAgICAxMDAwMCAvKiBtc2VjICovCisKK2VudW0geworCVdMMTI3MV9TQ0FOX1NUQVRFX0lETEUsCisJV0wxMjcxX1NDQU5fU1RBVEVfMkdIWl9BQ1RJVkUsCisJV0wxMjcxX1NDQU5fU1RBVEVfMkdIWl9QQVNTSVZFLAorCVdMMTI3MV9TQ0FOX1NUQVRFXzVHSFpfQUNUSVZFLAorCVdMMTI3MV9TQ0FOX1NUQVRFXzVHSFpfUEFTU0lWRSwKKwlXTDEyNzFfU0NBTl9TVEFURV9ET05FCit9OworCitzdHJ1Y3QgYmFzaWNfc2Nhbl9wYXJhbXMgeworCV9fbGUzMiByeF9jb25maWdfb3B0aW9uczsKKwlfX2xlMzIgcnhfZmlsdGVyX29wdGlvbnM7CisJLyogU2NhbiBvcHRpb24gZmxhZ3MgKFdMMTI3MV9TQ0FOX09QVF8qKSAqLworCV9fbGUxNiBzY2FuX29wdGlvbnM7CisJLyogTnVtYmVyIG9mIHNjYW4gY2hhbm5lbHMgaW4gdGhlIGxpc3QgKG1heGltdW0gMzApICovCisJdTggbl9jaDsKKwkvKiBUaGlzIGZpZWxkIGluZGljYXRlcyB0aGUgbnVtYmVyIG9mIHByb2JlIHJlcXVlc3RzIHRvIHNlbmQKKwkgICBwZXIgY2hhbm5lbCBmb3IgYW4gYWN0aXZlIHNjYW4gKi8KKwl1OCBuX3Byb2JlX3JlcXM7CisJLyogUmF0ZSBiaXQgZmllbGQgZm9yIHNlbmRpbmcgdGhlIHByb2JlcyAqLworCV9fbGUzMiB0eF9yYXRlOworCXU4IHRpZF90cmlnZ2VyOworCXU4IHNzaWRfbGVuOworCS8qIGluIG9yZGVyIHRvIGFsaWduICovCisJdTggcGFkZGluZzFbMl07CisJdTggc3NpZFtJV19FU1NJRF9NQVhfU0laRV07CisJLyogQmFuZCB0byBzY2FuICovCisJdTggYmFuZDsKKwl1OCB1c2Vfc3NpZF9saXN0OworCXU4IHNjYW5fdGFnOworCXU4IHBhZGRpbmcyOworfSBfX3BhY2tlZDsKKworc3RydWN0IGJhc2ljX3NjYW5fY2hhbm5lbF9wYXJhbXMgeworCS8qIER1cmF0aW9uIGluIFRVIHRvIHdhaXQgZm9yIGZyYW1lcyBvbiBhIGNoYW5uZWwgZm9yIGFjdGl2ZSBzY2FuICovCisJX19sZTMyIG1pbl9kdXJhdGlvbjsKKwlfX2xlMzIgbWF4X2R1cmF0aW9uOworCV9fbGUzMiBic3NpZF9sc2I7CisJX19sZTE2IGJzc2lkX21zYjsKKwl1OCBlYXJseV90ZXJtaW5hdGlvbjsKKwl1OCB0eF9wb3dlcl9hdHQ7CisJdTggY2hhbm5lbDsKKwkvKiBGVyBpbnRlcm5hbCB1c2Ugb25seSEgKi8KKwl1OCBkZnNfY2FuZGlkYXRlOworCXU4IGFjdGl2aXR5X2RldGVjdGVkOworCXU4IHBhZDsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCB3bDEyNzFfY21kX3NjYW4geworCXN0cnVjdCB3bDEyNzFfY21kX2hlYWRlciBoZWFkZXI7CisKKwlzdHJ1Y3QgYmFzaWNfc2Nhbl9wYXJhbXMgcGFyYW1zOworCXN0cnVjdCBiYXNpY19zY2FuX2NoYW5uZWxfcGFyYW1zIGNoYW5uZWxzW1dMMTI3MV9TQ0FOX01BWF9DSEFOTkVMU107Cit9IF9fcGFja2VkOworCitzdHJ1Y3Qgd2wxMjcxX2NtZF90cmlnZ2VyX3NjYW5fdG8geworCXN0cnVjdCB3bDEyNzFfY21kX2hlYWRlciBoZWFkZXI7CisKKwlfX2xlMzIgdGltZW91dDsKK30gX19wYWNrZWQ7CisKKyNlbmRpZiAvKiBfX1dMMTI3MV9TQ0FOX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3NkaW8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9zZGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNjYmI4ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9zZGlvLmMKQEAgLTAsMCArMSwzNDcgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3bDEyNzEKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIENvbnRhY3Q6IEx1Y2lhbm8gQ29lbGhvIDxsdWNpYW5vLmNvZWxob0Bub2tpYS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvY3JjNy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9tbWMvc2Rpb19mdW5jLmg+CisjaW5jbHVkZSA8bGludXgvbW1jL3NkaW9faWRzLmg+CisjaW5jbHVkZSA8bGludXgvbW1jL2NhcmQuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvd2wxMnh4Lmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgorCisjaW5jbHVkZSAid2wxMnh4LmgiCisjaW5jbHVkZSAid2wxMnh4XzgwMjExLmgiCisjaW5jbHVkZSAiaW8uaCIKKworI2lmbmRlZiBTRElPX1ZFTkRPUl9JRF9USQorI2RlZmluZSBTRElPX1ZFTkRPUl9JRF9USQkJMHgwMDk3CisjZW5kaWYKKworI2lmbmRlZiBTRElPX0RFVklDRV9JRF9USV9XTDEyNzEKKyNkZWZpbmUgU0RJT19ERVZJQ0VfSURfVElfV0wxMjcxCTB4NDA3NgorI2VuZGlmCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2Rpb19kZXZpY2VfaWQgd2wxMjcxX2RldmljZXNbXSA9IHsKKwl7IFNESU9fREVWSUNFKFNESU9fVkVORE9SX0lEX1RJLCBTRElPX0RFVklDRV9JRF9USV9XTDEyNzEpIH0sCisJe30KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHNkaW8sIHdsMTI3MV9kZXZpY2VzKTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2Rpb19mdW5jICp3bF90b19mdW5jKHN0cnVjdCB3bDEyNzEgKndsKQoreworCXJldHVybiB3bC0+aWZfcHJpdjsKK30KKworc3RhdGljIHN0cnVjdCBkZXZpY2UgKndsMTI3MV9zZGlvX3dsX3RvX2RldihzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlyZXR1cm4gJih3bF90b19mdW5jKHdsKS0+ZGV2KTsKK30KKworc3RhdGljIGlycXJldHVybl90IHdsMTI3MV9pcnEoaW50IGlycSwgdm9pZCAqY29va2llKQoreworCXN0cnVjdCB3bDEyNzEgKndsID0gY29va2llOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfSVJRLCAiSVJRIik7CisKKwkvKiBjb21wbGV0ZSB0aGUgRUxQIGNvbXBsZXRpb24gKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmd2wtPndsX2xvY2ssIGZsYWdzKTsKKwlpZiAod2wtPmVscF9jb21wbCkgeworCQljb21wbGV0ZSh3bC0+ZWxwX2NvbXBsKTsKKwkJd2wtPmVscF9jb21wbCA9IE5VTEw7CisJfQorCisJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdMMTI3MV9GTEFHX0lSUV9SVU5OSU5HLCAmd2wtPmZsYWdzKSkKKwkJaWVlZTgwMjExX3F1ZXVlX3dvcmsod2wtPmh3LCAmd2wtPmlycV93b3JrKTsKKwlzZXRfYml0KFdMMTI3MV9GTEFHX0lSUV9QRU5ESU5HLCAmd2wtPmZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3bC0+d2xfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCB3bDEyNzFfc2Rpb19kaXNhYmxlX2ludGVycnVwdHMoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJZGlzYWJsZV9pcnEod2wtPmlycSk7Cit9CisKK3N0YXRpYyB2b2lkIHdsMTI3MV9zZGlvX2VuYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCB3bDEyNzEgKndsKQoreworCWVuYWJsZV9pcnEod2wtPmlycSk7Cit9CisKK3N0YXRpYyB2b2lkIHdsMTI3MV9zZGlvX3Jlc2V0KHN0cnVjdCB3bDEyNzEgKndsKQoreworfQorCitzdGF0aWMgdm9pZCB3bDEyNzFfc2Rpb19pbml0KHN0cnVjdCB3bDEyNzEgKndsKQoreworfQorCitzdGF0aWMgdm9pZCB3bDEyNzFfc2Rpb19yYXdfcmVhZChzdHJ1Y3Qgd2wxMjcxICp3bCwgaW50IGFkZHIsIHZvaWQgKmJ1ZiwKKwkJCQkgc2l6ZV90IGxlbiwgYm9vbCBmaXhlZCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMgPSB3bF90b19mdW5jKHdsKTsKKworCXNkaW9fY2xhaW1faG9zdChmdW5jKTsKKworCWlmICh1bmxpa2VseShhZGRyID09IEhXX0FDQ0VTU19FTFBfQ1RSTF9SRUdfQUREUikpIHsKKwkJKCh1OCAqKWJ1ZilbMF0gPSBzZGlvX2YwX3JlYWRiKGZ1bmMsIGFkZHIsICZyZXQpOworCQl3bDEyNzFfZGVidWcoREVCVUdfU0RJTywgInNkaW8gcmVhZCA1MiBhZGRyIDB4JXgsIGJ5dGUgMHglMDJ4IiwKKwkJCSAgICAgYWRkciwgKCh1OCAqKWJ1ZilbMF0pOworCX0gZWxzZSB7CisJCWlmIChmaXhlZCkKKwkJCXJldCA9IHNkaW9fcmVhZHNiKGZ1bmMsIGJ1ZiwgYWRkciwgbGVuKTsKKwkJZWxzZQorCQkJcmV0ID0gc2Rpb19tZW1jcHlfZnJvbWlvKGZ1bmMsIGJ1ZiwgYWRkciwgbGVuKTsKKworCQl3bDEyNzFfZGVidWcoREVCVUdfU0RJTywgInNkaW8gcmVhZCA1MyBhZGRyIDB4JXgsICV6dSBieXRlcyIsCisJCQkgICAgIGFkZHIsIGxlbik7CisJCXdsMTI3MV9kdW1wX2FzY2lpKERFQlVHX1NESU8sICJkYXRhOiAiLCBidWYsIGxlbik7CisJfQorCisJc2Rpb19yZWxlYXNlX2hvc3QoZnVuYyk7CisKKwlpZiAocmV0KQorCQl3bDEyNzFfZXJyb3IoInNkaW8gcmVhZCBmYWlsZWQgKCVkKSIsIHJldCk7Cit9CisKK3N0YXRpYyB2b2lkIHdsMTI3MV9zZGlvX3Jhd193cml0ZShzdHJ1Y3Qgd2wxMjcxICp3bCwgaW50IGFkZHIsIHZvaWQgKmJ1ZiwKKwkJCQkgIHNpemVfdCBsZW4sIGJvb2wgZml4ZWQpCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jID0gd2xfdG9fZnVuYyh3bCk7CisKKwlzZGlvX2NsYWltX2hvc3QoZnVuYyk7CisKKwlpZiAodW5saWtlbHkoYWRkciA9PSBIV19BQ0NFU1NfRUxQX0NUUkxfUkVHX0FERFIpKSB7CisJCXNkaW9fZjBfd3JpdGViKGZ1bmMsICgodTggKilidWYpWzBdLCBhZGRyLCAmcmV0KTsKKwkJd2wxMjcxX2RlYnVnKERFQlVHX1NESU8sICJzZGlvIHdyaXRlIDUyIGFkZHIgMHgleCwgYnl0ZSAweCUwMngiLAorCQkJICAgICBhZGRyLCAoKHU4ICopYnVmKVswXSk7CisJfSBlbHNlIHsKKwkJd2wxMjcxX2RlYnVnKERFQlVHX1NESU8sICJzZGlvIHdyaXRlIDUzIGFkZHIgMHgleCwgJXp1IGJ5dGVzIiwKKwkJCSAgICAgYWRkciwgbGVuKTsKKwkJd2wxMjcxX2R1bXBfYXNjaWkoREVCVUdfU0RJTywgImRhdGE6ICIsIGJ1ZiwgbGVuKTsKKworCQlpZiAoZml4ZWQpCisJCQlyZXQgPSBzZGlvX3dyaXRlc2IoZnVuYywgYWRkciwgYnVmLCBsZW4pOworCQllbHNlCisJCQlyZXQgPSBzZGlvX21lbWNweV90b2lvKGZ1bmMsIGFkZHIsIGJ1ZiwgbGVuKTsKKwl9CisKKwlzZGlvX3JlbGVhc2VfaG9zdChmdW5jKTsKKworCWlmIChyZXQpCisJCXdsMTI3MV9lcnJvcigic2RpbyB3cml0ZSBmYWlsZWQgKCVkKSIsIHJldCk7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjcxX3NkaW9fcG93ZXJfb24oc3RydWN0IHdsMTI3MSAqd2wpCit7CisJc3RydWN0IHNkaW9fZnVuYyAqZnVuYyA9IHdsX3RvX2Z1bmMod2wpOworCWludCByZXQ7CisKKwkvKiBQb3dlciB1cCB0aGUgY2FyZCAqLworCXJldCA9IHBtX3J1bnRpbWVfZ2V0X3N5bmMoJmZ1bmMtPmRldik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJc2Rpb19jbGFpbV9ob3N0KGZ1bmMpOworCXNkaW9fZW5hYmxlX2Z1bmMoZnVuYyk7CisJc2Rpb19yZWxlYXNlX2hvc3QoZnVuYyk7CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHdsMTI3MV9zZGlvX3Bvd2VyX29mZihzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jID0gd2xfdG9fZnVuYyh3bCk7CisKKwlzZGlvX2NsYWltX2hvc3QoZnVuYyk7CisJc2Rpb19kaXNhYmxlX2Z1bmMoZnVuYyk7CisJc2Rpb19yZWxlYXNlX2hvc3QoZnVuYyk7CisKKwkvKiBQb3dlciBkb3duIHRoZSBjYXJkICovCisJcmV0dXJuIHBtX3J1bnRpbWVfcHV0X3N5bmMoJmZ1bmMtPmRldik7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjcxX3NkaW9fc2V0X3Bvd2VyKHN0cnVjdCB3bDEyNzEgKndsLCBib29sIGVuYWJsZSkKK3sKKwlpZiAoZW5hYmxlKQorCQlyZXR1cm4gd2wxMjcxX3NkaW9fcG93ZXJfb24od2wpOworCWVsc2UKKwkJcmV0dXJuIHdsMTI3MV9zZGlvX3Bvd2VyX29mZih3bCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgd2wxMjcxX2lmX29wZXJhdGlvbnMgc2Rpb19vcHMgPSB7CisJLnJlYWQJCT0gd2wxMjcxX3NkaW9fcmF3X3JlYWQsCisJLndyaXRlCQk9IHdsMTI3MV9zZGlvX3Jhd193cml0ZSwKKwkucmVzZXQJCT0gd2wxMjcxX3NkaW9fcmVzZXQsCisJLmluaXQJCT0gd2wxMjcxX3NkaW9faW5pdCwKKwkucG93ZXIJCT0gd2wxMjcxX3NkaW9fc2V0X3Bvd2VyLAorCS5kZXYJCT0gd2wxMjcxX3NkaW9fd2xfdG9fZGV2LAorCS5lbmFibGVfaXJxCT0gd2wxMjcxX3NkaW9fZW5hYmxlX2ludGVycnVwdHMsCisJLmRpc2FibGVfaXJxCT0gd2wxMjcxX3NkaW9fZGlzYWJsZV9pbnRlcnJ1cHRzCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCB3bDEyNzFfcHJvYmUoc3RydWN0IHNkaW9fZnVuYyAqZnVuYywKKwkJCQkgIGNvbnN0IHN0cnVjdCBzZGlvX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CisJY29uc3Qgc3RydWN0IHdsMTJ4eF9wbGF0Zm9ybV9kYXRhICp3bGFuX2RhdGE7CisJc3RydWN0IHdsMTI3MSAqd2w7CisJaW50IHJldDsKKworCS8qIFdlIGFyZSBvbmx5IGFibGUgdG8gaGFuZGxlIHRoZSB3bGFuIGZ1bmN0aW9uICovCisJaWYgKGZ1bmMtPm51bSAhPSAweDAyKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWh3ID0gd2wxMjcxX2FsbG9jX2h3KCk7CisJaWYgKElTX0VSUihodykpCisJCXJldHVybiBQVFJfRVJSKGh3KTsKKworCXdsID0gaHctPnByaXY7CisKKwl3bC0+aWZfcHJpdiA9IGZ1bmM7CisJd2wtPmlmX29wcyA9ICZzZGlvX29wczsKKworCS8qIEdyYWIgYWNjZXNzIHRvIEZOMCBmb3IgRUxQIHJlZy4gKi8KKwlmdW5jLT5jYXJkLT5xdWlya3MgfD0gTU1DX1FVSVJLX0xFTklFTlRfRk4wOworCisJd2xhbl9kYXRhID0gd2wxMnh4X2dldF9wbGF0Zm9ybV9kYXRhKCk7CisJaWYgKElTX0VSUih3bGFuX2RhdGEpKSB7CisJCXJldCA9IFBUUl9FUlIod2xhbl9kYXRhKTsKKwkJd2wxMjcxX2Vycm9yKCJtaXNzaW5nIHdsYW4gcGxhdGZvcm0gZGF0YTogJWQiLCByZXQpOworCQlnb3RvIG91dF9mcmVlOworCX0KKworCXdsLT5pcnEgPSB3bGFuX2RhdGEtPmlycTsKKwl3bC0+cmVmX2Nsb2NrID0gd2xhbl9kYXRhLT5ib2FyZF9yZWZfY2xvY2s7CisKKwlyZXQgPSByZXF1ZXN0X2lycSh3bC0+aXJxLCB3bDEyNzFfaXJxLCAwLCBEUklWRVJfTkFNRSwgd2wpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV9lcnJvcigicmVxdWVzdF9pcnEoKSBmYWlsZWQ6ICVkIiwgcmV0KTsKKwkJZ290byBvdXRfZnJlZTsKKwl9CisKKwlzZXRfaXJxX3R5cGUod2wtPmlycSwgSVJRX1RZUEVfRURHRV9SSVNJTkcpOworCisJZGlzYWJsZV9pcnEod2wtPmlycSk7CisKKwlyZXQgPSB3bDEyNzFfaW5pdF9pZWVlODAyMTEod2wpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2lycTsKKworCXJldCA9IHdsMTI3MV9yZWdpc3Rlcl9odyh3bCk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfaXJxOworCisJc2Rpb19zZXRfZHJ2ZGF0YShmdW5jLCB3bCk7CisKKwkvKiBUZWxsIFBNIGNvcmUgdGhhdCB3ZSBkb24ndCBuZWVkIHRoZSBjYXJkIHRvIGJlIHBvd2VyZWQgbm93ICovCisJcG1fcnVudGltZV9wdXRfbm9pZGxlKCZmdW5jLT5kZXYpOworCisJd2wxMjcxX25vdGljZSgiaW5pdGlhbGl6ZWQiKTsKKworCXJldHVybiAwOworCisgb3V0X2lycToKKwlmcmVlX2lycSh3bC0+aXJxLCB3bCk7CisKKworIG91dF9mcmVlOgorCXdsMTI3MV9mcmVlX2h3KHdsKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCB3bDEyNzFfcmVtb3ZlKHN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMpCit7CisJc3RydWN0IHdsMTI3MSAqd2wgPSBzZGlvX2dldF9kcnZkYXRhKGZ1bmMpOworCisJLyogVW5kbyBkZWNyZW1lbnQgZG9uZSBhYm92ZSBpbiB3bDEyNzFfcHJvYmUgKi8KKwlwbV9ydW50aW1lX2dldF9ub3Jlc3VtZSgmZnVuYy0+ZGV2KTsKKworCXdsMTI3MV91bnJlZ2lzdGVyX2h3KHdsKTsKKwlmcmVlX2lycSh3bC0+aXJxLCB3bCk7CisJd2wxMjcxX2ZyZWVfaHcod2wpOworfQorCitzdGF0aWMgaW50IHdsMTI3MV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwkvKiBUZWxsIE1NQy9TRElPIGNvcmUgaXQncyBPSyB0byBwb3dlciBkb3duIHRoZSBjYXJkCisJICogKGlmIGl0IGlzbid0IGFscmVhZHkpLCBidXQgbm90IHRvIHJlbW92ZSBpdCBjb21wbGV0ZWx5ICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjcxX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyB3bDEyNzFfc2Rpb19wbV9vcHMgPSB7CisJLnN1c3BlbmQJPSB3bDEyNzFfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHdsMTI3MV9yZXN1bWUsCit9OworCitzdGF0aWMgc3RydWN0IHNkaW9fZHJpdmVyIHdsMTI3MV9zZGlvX2RyaXZlciA9IHsKKwkubmFtZQkJPSAid2wxMjcxX3NkaW8iLAorCS5pZF90YWJsZQk9IHdsMTI3MV9kZXZpY2VzLAorCS5wcm9iZQkJPSB3bDEyNzFfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcCh3bDEyNzFfcmVtb3ZlKSwKKwkuZHJ2ID0geworCQkucG0gPSAmd2wxMjcxX3NkaW9fcG1fb3BzLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCB3bDEyNzFfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSBzZGlvX3JlZ2lzdGVyX2RyaXZlcigmd2wxMjcxX3NkaW9fZHJpdmVyKTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNzFfZXJyb3IoImZhaWxlZCB0byByZWdpc3RlciBzZGlvIGRyaXZlcjogJWQiLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgd2wxMjcxX2V4aXQodm9pZCkKK3sKKwlzZGlvX3VucmVnaXN0ZXJfZHJpdmVyKCZ3bDEyNzFfc2Rpb19kcml2ZXIpOworCisJd2wxMjcxX25vdGljZSgidW5sb2FkZWQiKTsKK30KKworbW9kdWxlX2luaXQod2wxMjcxX2luaXQpOworbW9kdWxlX2V4aXQod2wxMjcxX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJMdWNpYW5vIENvZWxobyA8bHVjaWFuby5jb2VsaG9Abm9raWEuY29tPiIpOworTU9EVUxFX0FVVEhPUigiSnV1c28gT2lrYXJpbmVuIDxqdXVzby5vaWthcmluZW5Abm9raWEuY29tPiIpOworTU9EVUxFX0ZJUk1XQVJFKFdMMTI3MV9GV19OQU1FKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9zZGlvX3Rlc3QuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9zZGlvX3Rlc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmNiZDNkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3NkaW9fdGVzdC5jCkBAIC0wLDAgKzEsNTIwIEBACisvKgorICogU0RJTyB0ZXN0aW5nIGRyaXZlciBmb3Igd2wxMnh4CisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uCisgKgorICogQ29udGFjdDogUm9nZXIgUXVhZHJvcyA8cm9nZXIucXVhZHJvc0Bub2tpYS5jb20+CisgKgorICogd2wxMnh4IHJlYWQvd3JpdGUgcm91dGluZXMgdGFrZW4gZnJvbSB0aGUgbWFpbiBtb2R1bGUKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9jcmM3Lmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L21tYy9zZGlvX2Z1bmMuaD4KKyNpbmNsdWRlIDxsaW51eC9tbWMvc2Rpb19pZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9tbWMvY2FyZC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC93bDEyeHguaD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CisKKyNpbmNsdWRlICJ3bDEyeHguaCIKKyNpbmNsdWRlICJpby5oIgorI2luY2x1ZGUgImJvb3QuaCIKKworI2lmbmRlZiBTRElPX1ZFTkRPUl9JRF9USQorI2RlZmluZSBTRElPX1ZFTkRPUl9JRF9USQkJMHgwMDk3CisjZW5kaWYKKworI2lmbmRlZiBTRElPX0RFVklDRV9JRF9USV9XTDEyNzEKKyNkZWZpbmUgU0RJT19ERVZJQ0VfSURfVElfV0wxMjcxCTB4NDA3NgorI2VuZGlmCisKK3N0YXRpYyBib29sIHJ4LCB0eDsKKworbW9kdWxlX3BhcmFtKHJ4LCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKHJ4LCAiUGVyZm9ybSByeCB0ZXN0LiBEZWZhdWx0ICgwKS4gIgorCSJUaGlzIHRlc3QgY29udGludW91c2x5IHJlYWRzIGRhdGEgZnJvbSB0aGUgU0RJTyBkZXZpY2UuXG4iKTsKKworbW9kdWxlX3BhcmFtKHR4LCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKHR4LCAiUGVyZm9ybSB0eCB0ZXN0LiBEZWZhdWx0ICgwKS4gIgorCSJUaGlzIHRlc3QgY29udGludW91c2x5IHdyaXRlcyBkYXRhIHRvIHRoZSBTRElPIGRldmljZS5cbiIpOworCitzdHJ1Y3Qgd2wxMjcxX3Rlc3QgeworCXN0cnVjdCB3bDEyNzEgd2w7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0ZXN0X3Rhc2s7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNkaW9fZGV2aWNlX2lkIHdsMTI3MV9kZXZpY2VzW10gPSB7CisJeyBTRElPX0RFVklDRShTRElPX1ZFTkRPUl9JRF9USSwgU0RJT19ERVZJQ0VfSURfVElfV0wxMjcxKSB9LAorCXt9Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzZGlvX2Z1bmMgKndsX3RvX2Z1bmMoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJcmV0dXJuIHdsLT5pZl9wcml2OworfQorCitzdGF0aWMgc3RydWN0IGRldmljZSAqd2wxMjcxX3NkaW9fd2xfdG9fZGV2KHN0cnVjdCB3bDEyNzEgKndsKQoreworCXJldHVybiAmKHdsX3RvX2Z1bmMod2wpLT5kZXYpOworfQorCitzdGF0aWMgdm9pZCB3bDEyNzFfc2Rpb19yYXdfcmVhZChzdHJ1Y3Qgd2wxMjcxICp3bCwgaW50IGFkZHIsIHZvaWQgKmJ1ZiwKKwkJc2l6ZV90IGxlbiwgYm9vbCBmaXhlZCkKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jID0gd2xfdG9fZnVuYyh3bCk7CisKKwlpZiAodW5saWtlbHkoYWRkciA9PSBIV19BQ0NFU1NfRUxQX0NUUkxfUkVHX0FERFIpKSB7CisJCSgodTggKilidWYpWzBdID0gc2Rpb19mMF9yZWFkYihmdW5jLCBhZGRyLCAmcmV0KTsKKwkJd2wxMjcxX2RlYnVnKERFQlVHX1NESU8sICJzZGlvIHJlYWQgNTIgYWRkciAweCV4LCBieXRlIDB4JTAyeCIsCisJCQkJYWRkciwgKCh1OCAqKWJ1ZilbMF0pOworCX0gZWxzZSB7CisJCWlmIChmaXhlZCkKKwkJCXJldCA9IHNkaW9fcmVhZHNiKGZ1bmMsIGJ1ZiwgYWRkciwgbGVuKTsKKwkJZWxzZQorCQkJcmV0ID0gc2Rpb19tZW1jcHlfZnJvbWlvKGZ1bmMsIGJ1ZiwgYWRkciwgbGVuKTsKKworCQl3bDEyNzFfZGVidWcoREVCVUdfU0RJTywgInNkaW8gcmVhZCA1MyBhZGRyIDB4JXgsICV6dSBieXRlcyIsCisJCQkJYWRkciwgbGVuKTsKKwkJd2wxMjcxX2R1bXBfYXNjaWkoREVCVUdfU0RJTywgImRhdGE6ICIsIGJ1ZiwgbGVuKTsKKwl9CisKKwlpZiAocmV0KQorCQl3bDEyNzFfZXJyb3IoInNkaW8gcmVhZCBmYWlsZWQgKCVkKSIsIHJldCk7Cit9CisKK3N0YXRpYyB2b2lkIHdsMTI3MV9zZGlvX3Jhd193cml0ZShzdHJ1Y3Qgd2wxMjcxICp3bCwgaW50IGFkZHIsIHZvaWQgKmJ1ZiwKKwkJc2l6ZV90IGxlbiwgYm9vbCBmaXhlZCkKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jID0gd2xfdG9fZnVuYyh3bCk7CisKKwlpZiAodW5saWtlbHkoYWRkciA9PSBIV19BQ0NFU1NfRUxQX0NUUkxfUkVHX0FERFIpKSB7CisJCXNkaW9fZjBfd3JpdGViKGZ1bmMsICgodTggKilidWYpWzBdLCBhZGRyLCAmcmV0KTsKKwkJd2wxMjcxX2RlYnVnKERFQlVHX1NESU8sICJzZGlvIHdyaXRlIDUyIGFkZHIgMHgleCwgYnl0ZSAweCUwMngiLAorCQkJCWFkZHIsICgodTggKilidWYpWzBdKTsKKwl9IGVsc2UgeworCQl3bDEyNzFfZGVidWcoREVCVUdfU0RJTywgInNkaW8gd3JpdGUgNTMgYWRkciAweCV4LCAlenUgYnl0ZXMiLAorCQkJCWFkZHIsIGxlbik7CisJCXdsMTI3MV9kdW1wX2FzY2lpKERFQlVHX1NESU8sICJkYXRhOiAiLCBidWYsIGxlbik7CisKKwkJaWYgKGZpeGVkKQorCQkJcmV0ID0gc2Rpb193cml0ZXNiKGZ1bmMsIGFkZHIsIGJ1ZiwgbGVuKTsKKwkJZWxzZQorCQkJcmV0ID0gc2Rpb19tZW1jcHlfdG9pbyhmdW5jLCBhZGRyLCBidWYsIGxlbik7CisJfQorCWlmIChyZXQpCisJCXdsMTI3MV9lcnJvcigic2RpbyB3cml0ZSBmYWlsZWQgKCVkKSIsIHJldCk7CisKK30KKworc3RhdGljIGludCB3bDEyNzFfc2Rpb19zZXRfcG93ZXIoc3RydWN0IHdsMTI3MSAqd2wsIGJvb2wgZW5hYmxlKQoreworCXN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMgPSB3bF90b19mdW5jKHdsKTsKKwlpbnQgcmV0OworCisJLyogTGV0IHRoZSBTRElPIHN0YWNrIGhhbmRsZSB3bGFuX2VuYWJsZSBjb250cm9sLCBzbyB3ZQorCSAqIGtlZXAgaG9zdCBjbGFpbWVkIHdoaWxlIHdsYW4gaXMgaW4gdXNlIHRvIGtlZXAgd2wxMjcxCisJICogYWxpdmUuCisJICovCisJaWYgKGVuYWJsZSkgeworCQkvKiBQb3dlciB1cCB0aGUgY2FyZCAqLworCQlyZXQgPSBwbV9ydW50aW1lX2dldF9zeW5jKCZmdW5jLT5kZXYpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gb3V0OworCQlzZGlvX2NsYWltX2hvc3QoZnVuYyk7CisJCXNkaW9fZW5hYmxlX2Z1bmMoZnVuYyk7CisJCXNkaW9fcmVsZWFzZV9ob3N0KGZ1bmMpOworCX0gZWxzZSB7CisJCXNkaW9fY2xhaW1faG9zdChmdW5jKTsKKwkJc2Rpb19kaXNhYmxlX2Z1bmMoZnVuYyk7CisJCXNkaW9fcmVsZWFzZV9ob3N0KGZ1bmMpOworCisJCS8qIFBvd2VyIGRvd24gdGhlIGNhcmQgKi8KKwkJcmV0ID0gcG1fcnVudGltZV9wdXRfc3luYygmZnVuYy0+ZGV2KTsKKwl9CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCB3bDEyNzFfc2Rpb19kaXNhYmxlX2ludGVycnVwdHMoc3RydWN0IHdsMTI3MSAqd2wpCit7Cit9CisKK3N0YXRpYyB2b2lkIHdsMTI3MV9zZGlvX2VuYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCB3bDEyNzEgKndsKQoreworfQorCisKK3N0YXRpYyBzdHJ1Y3Qgd2wxMjcxX2lmX29wZXJhdGlvbnMgc2Rpb19vcHMgPSB7CisJLnJlYWQJCT0gd2wxMjcxX3NkaW9fcmF3X3JlYWQsCisJLndyaXRlCQk9IHdsMTI3MV9zZGlvX3Jhd193cml0ZSwKKwkucG93ZXIJCT0gd2wxMjcxX3NkaW9fc2V0X3Bvd2VyLAorCS5kZXYJCT0gd2wxMjcxX3NkaW9fd2xfdG9fZGV2LAorCS5lbmFibGVfaXJxCT0gd2wxMjcxX3NkaW9fZW5hYmxlX2ludGVycnVwdHMsCisJLmRpc2FibGVfaXJxCT0gd2wxMjcxX3NkaW9fZGlzYWJsZV9pbnRlcnJ1cHRzLAorfTsKKworc3RhdGljIHZvaWQgd2wxMjcxX2Z3X3dha2V1cChzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwl1MzIgZWxwX3JlZzsKKworCWVscF9yZWcgPSBFTFBDVFJMX1dBS0VfVVA7CisJd2wxMjcxX3Jhd193cml0ZTMyKHdsLCBIV19BQ0NFU1NfRUxQX0NUUkxfUkVHX0FERFIsIGVscF9yZWcpOworfQorCitzdGF0aWMgaW50IHdsMTI3MV9mZXRjaF9maXJtd2FyZShzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OworCWludCByZXQ7CisKKwlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgV0wxMjcxX0ZXX05BTUUsIHdsMTI3MV93bF90b19kZXYod2wpKTsKKworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV9lcnJvcigiY291bGQgbm90IGdldCBmaXJtd2FyZTogJWQiLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWlmIChmdy0+c2l6ZSAlIDQpIHsKKwkJd2wxMjcxX2Vycm9yKCJmaXJtd2FyZSBzaXplIGlzIG5vdCBtdWx0aXBsZSBvZiAzMiBiaXRzOiAlenUiLAorCQkJCWZ3LT5zaXplKTsKKwkJcmV0ID0gLUVJTFNFUTsKKwkJZ290byBvdXQ7CisJfQorCisJd2wtPmZ3X2xlbiA9IGZ3LT5zaXplOworCXdsLT5mdyA9IHZtYWxsb2Mod2wtPmZ3X2xlbik7CisKKwlpZiAoIXdsLT5mdykgeworCQl3bDEyNzFfZXJyb3IoImNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBmaXJtd2FyZSIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwltZW1jcHkod2wtPmZ3LCBmdy0+ZGF0YSwgd2wtPmZ3X2xlbik7CisKKwlyZXQgPSAwOworCitvdXQ6CisJcmVsZWFzZV9maXJtd2FyZShmdyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHdsMTI3MV9mZXRjaF9udnMoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKKwlpbnQgcmV0OworCisJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIFdMMTI3MV9OVlNfTkFNRSwgd2wxMjcxX3dsX3RvX2Rldih3bCkpOworCisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX2Vycm9yKCJjb3VsZCBub3QgZ2V0IG52cyBmaWxlOiAlZCIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJd2wtPm52cyA9IGttZW1kdXAoZnctPmRhdGEsIHNpemVvZihzdHJ1Y3Qgd2wxMjcxX252c19maWxlKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIXdsLT5udnMpIHsKKwkJd2wxMjcxX2Vycm9yKCJjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgbnZzIGZpbGUiKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJd2wtPm52c19sZW4gPSBmdy0+c2l6ZTsKKworb3V0OgorCXJlbGVhc2VfZmlybXdhcmUoZncpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB3bDEyNzFfY2hpcF93YWtldXAoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJc3RydWN0IHdsMTI3MV9wYXJ0aXRpb25fc2V0IHBhcnRpdGlvbjsKKwlpbnQgcmV0OworCisJbXNsZWVwKFdMMTI3MV9QUkVfUE9XRVJfT05fU0xFRVApOworCXJldCA9IHdsMTI3MV9wb3dlcl9vbih3bCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCW1zbGVlcChXTDEyNzFfUE9XRVJfT05fU0xFRVApOworCisJLyogV2UgZG9uJ3QgbmVlZCBhIHJlYWwgbWVtb3J5IHBhcnRpdGlvbiBoZXJlLCBiZWNhdXNlIHdlIG9ubHkgd2FudAorCSAqIHRvIHVzZSB0aGUgcmVnaXN0ZXJzIGF0IHRoaXMgcG9pbnQuICovCisJbWVtc2V0KCZwYXJ0aXRpb24sIDAsIHNpemVvZihwYXJ0aXRpb24pKTsKKwlwYXJ0aXRpb24ucmVnLnN0YXJ0ID0gUkVHSVNURVJTX0JBU0U7CisJcGFydGl0aW9uLnJlZy5zaXplID0gUkVHSVNURVJTX0RPV05fU0laRTsKKwl3bDEyNzFfc2V0X3BhcnRpdGlvbih3bCwgJnBhcnRpdGlvbik7CisKKwkvKiBFTFAgbW9kdWxlIHdha2UgdXAgKi8KKwl3bDEyNzFfZndfd2FrZXVwKHdsKTsKKworCS8qIHdoYWxfRndDdHJsX0Jvb3RTbSgpICovCisKKwkvKiAwLiByZWFkIGNoaXAgaWQgZnJvbSBDSElQX0lEICovCisJd2wtPmNoaXAuaWQgPSB3bDEyNzFfcmVhZDMyKHdsLCBDSElQX0lEX0IpOworCisJLyogMS4gY2hlY2sgaWYgY2hpcCBpZCBpcyB2YWxpZCAqLworCisJc3dpdGNoICh3bC0+Y2hpcC5pZCkgeworCWNhc2UgQ0hJUF9JRF8xMjcxX1BHMTA6CisJCXdsMTI3MV93YXJuaW5nKCJjaGlwIGlkIDB4JXggKDEyNzEgUEcxMCkgc3VwcG9ydCBpcyBvYnNvbGV0ZSIsCisJCQkJd2wtPmNoaXAuaWQpOworCQlicmVhazsKKwljYXNlIENISVBfSURfMTI3MV9QRzIwOgorCQl3bDEyNzFfbm90aWNlKCJjaGlwIGlkIDB4JXggKDEyNzEgUEcyMCkiLAorCQkJCXdsLT5jaGlwLmlkKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJd2wxMjcxX3dhcm5pbmcoInVuc3VwcG9ydGVkIGNoaXAgaWQ6IDB4JXgiLCB3bC0+Y2hpcC5pZCk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgd2wxMjcxX3BhcnRpdGlvbl9zZXQgcGFydF9kb3duID0geworCS5tZW0gPSB7CisJCS5zdGFydCA9IDB4MDAwMDAwMDAsCisJCS5zaXplICA9IDB4MDAwMTc3YzAKKwl9LAorCS5yZWcgPSB7CisJCS5zdGFydCA9IFJFR0lTVEVSU19CQVNFLAorCQkuc2l6ZSAgPSAweDAwMDA4ODAwCisJfSwKKwkubWVtMiA9IHsKKwkJLnN0YXJ0ID0gMHgwMDAwMDAwMCwKKwkJLnNpemUgID0gMHgwMDAwMDAwMAorCX0sCisJLm1lbTMgPSB7CisJCS5zdGFydCA9IDB4MDAwMDAwMDAsCisJCS5zaXplICA9IDB4MDAwMDAwMDAKKwl9LAorfTsKKworc3RhdGljIGludCB0ZXN0ZXIodm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3Qgd2wxMjcxICp3bCA9IGRhdGE7CisJc3RydWN0IHNkaW9fZnVuYyAqZnVuYyA9IHdsX3RvX2Z1bmMod2wpOworCXN0cnVjdCBkZXZpY2UgKnBkZXYgPSAmZnVuYy0+ZGV2OworCWludCByZXQgPSAwOworCWJvb2wgcnhfc3RhcnRlZCA9IDA7CisJYm9vbCB0eF9zdGFydGVkID0gMDsKKwl1aW50OF90ICp0eF9idWYsICpyeF9idWY7CisJaW50IHRlc3Rfc2l6ZSA9IFBBR0VfU0laRTsKKwl1MzIgYWRkciA9IDA7CisJc3RydWN0IHdsMTI3MV9wYXJ0aXRpb25fc2V0IHBhcnRpdGlvbjsKKworCS8qIFdlIGFzc3VtZSBjaGlwIGlzIHBvd2VyZWQgdXAgYW5kIGZpcm13YXJlIGZldGNoZWQgKi8KKworCW1lbWNweSgmcGFydGl0aW9uLCAmcGFydF9kb3duLCBzaXplb2YocGFydGl0aW9uKSk7CisJcGFydGl0aW9uLm1lbS5zdGFydCA9IGFkZHI7CisJd2wxMjcxX3NldF9wYXJ0aXRpb24od2wsICZwYXJ0aXRpb24pOworCisJdHhfYnVmID0ga21hbGxvYyh0ZXN0X3NpemUsIEdGUF9LRVJORUwpOworCXJ4X2J1ZiA9IGttYWxsb2ModGVzdF9zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXR4X2J1ZiB8fCAhcnhfYnVmKSB7CisJCWRldl9lcnIocGRldiwKKwkJCSJDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5LiBUZXN0IHdpbGwgbm90IHJ1bi5cbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGZyZWU7CisJfQorCisJbWVtc2V0KHR4X2J1ZiwgMHg1YSwgdGVzdF9zaXplKTsKKworCS8qIHdyaXRlIHNvbWV0aGluZyBpbiBkYXRhIGFyZWEgc28gd2UgY2FuIHJlYWQgaXQgYmFjayAqLworCXdsMTI3MV93cml0ZSh3bCwgYWRkciwgdHhfYnVmLCB0ZXN0X3NpemUsIGZhbHNlKTsKKworCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7CisJCWlmIChyeCAmJiAhcnhfc3RhcnRlZCkgeworCQkJZGV2X2luZm8ocGRldiwgInN0YXJ0aW5nIHJ4IHRlc3RcbiIpOworCQkJcnhfc3RhcnRlZCA9IDE7CisJCX0gZWxzZSBpZiAoIXJ4ICYmIHJ4X3N0YXJ0ZWQpIHsKKwkJCWRldl9pbmZvKHBkZXYsICJzdG9wcGluZyByeCB0ZXN0XG4iKTsKKwkJCXJ4X3N0YXJ0ZWQgPSAwOworCQl9CisKKwkJaWYgKHR4ICYmICF0eF9zdGFydGVkKSB7CisJCQlkZXZfaW5mbyhwZGV2LCAic3RhcnRpbmcgdHggdGVzdFxuIik7CisJCQl0eF9zdGFydGVkID0gMTsKKwkJfSBlbHNlIGlmICghdHggJiYgdHhfc3RhcnRlZCkgeworCQkJZGV2X2luZm8ocGRldiwgInN0b3BwaW5nIHR4IHRlc3RcbiIpOworCQkJdHhfc3RhcnRlZCA9IDA7CisJCX0KKworCQlpZiAocnhfc3RhcnRlZCkKKwkJCXdsMTI3MV9yZWFkKHdsLCBhZGRyLCByeF9idWYsIHRlc3Rfc2l6ZSwgZmFsc2UpOworCisJCWlmICh0eF9zdGFydGVkKQorCQkJd2wxMjcxX3dyaXRlKHdsLCBhZGRyLCB0eF9idWYsIHRlc3Rfc2l6ZSwgZmFsc2UpOworCisJCWlmICghcnhfc3RhcnRlZCAmJiAhdHhfc3RhcnRlZCkKKwkJCW1zbGVlcCgxMDApOworCX0KKworZnJlZToKKwlrZnJlZSh0eF9idWYpOworCWtmcmVlKHJ4X2J1Zik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgd2wxMjcxX3Byb2JlKHN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMsCisJCWNvbnN0IHN0cnVjdCBzZGlvX2RldmljZV9pZCAqaWQpCit7CisJY29uc3Qgc3RydWN0IHdsMTJ4eF9wbGF0Zm9ybV9kYXRhICp3bGFuX2RhdGE7CisJc3RydWN0IHdsMTI3MSAqd2w7CisJc3RydWN0IHdsMTI3MV90ZXN0ICp3bF90ZXN0OworCWludCByZXQgPSAwOworCisJLyogd2wxMjcxIGhhcyAyIHNkaW8gZnVuY3Rpb25zIHdlIGhhbmRsZSBqdXN0IHRoZSB3bGFuIHBhcnQgKi8KKwlpZiAoZnVuYy0+bnVtICE9IDB4MDIpCisJCXJldHVybiAtRU5PREVWOworCisJd2xfdGVzdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB3bDEyNzFfdGVzdCksIEdGUF9LRVJORUwpOworCWlmICghd2xfdGVzdCkgeworCQlkZXZfZXJyKCZmdW5jLT5kZXYsICJDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJd2wgPSAmd2xfdGVzdC0+d2w7CisKKwl3bC0+aWZfcHJpdiA9IGZ1bmM7CisJd2wtPmlmX29wcyA9ICZzZGlvX29wczsKKworCS8qIEdyYWIgYWNjZXNzIHRvIEZOMCBmb3IgRUxQIHJlZy4gKi8KKwlmdW5jLT5jYXJkLT5xdWlya3MgfD0gTU1DX1FVSVJLX0xFTklFTlRfRk4wOworCisJd2xhbl9kYXRhID0gd2wxMnh4X2dldF9wbGF0Zm9ybV9kYXRhKCk7CisJaWYgKElTX0VSUih3bGFuX2RhdGEpKSB7CisJCXJldCA9IFBUUl9FUlIod2xhbl9kYXRhKTsKKwkJZGV2X2VycigmZnVuYy0+ZGV2LCAibWlzc2luZyB3bGFuIHBsYXRmb3JtIGRhdGE6ICVkXG4iLCByZXQpOworCQlnb3RvIG91dF9mcmVlOworCX0KKworCXdsLT5pcnEgPSB3bGFuX2RhdGEtPmlycTsKKwl3bC0+cmVmX2Nsb2NrID0gd2xhbl9kYXRhLT5ib2FyZF9yZWZfY2xvY2s7CisKKwlzZGlvX3NldF9kcnZkYXRhKGZ1bmMsIHdsX3Rlc3QpOworCisKKwkvKiBwb3dlciB1cCB0aGUgZGV2aWNlICovCisJcmV0ID0gd2wxMjcxX2NoaXBfd2FrZXVwKHdsKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJmZ1bmMtPmRldiwgImNvdWxkIG5vdCB3YWtlIHVwIGNoaXBcbiIpOworCQlnb3RvIG91dF9mcmVlOworCX0KKworCWlmICh3bC0+ZncgPT0gTlVMTCkgeworCQlyZXQgPSB3bDEyNzFfZmV0Y2hfZmlybXdhcmUod2wpOworCQlpZiAocmV0IDwgMCkgeworCQkJZGV2X2VycigmZnVuYy0+ZGV2LCAiZmlybXdhcmUgZmV0Y2ggZXJyb3JcbiIpOworCQkJZ290byBvdXRfb2ZmOworCQl9CisJfQorCisJLyogZmV0Y2ggTlZTICovCisJaWYgKHdsLT5udnMgPT0gTlVMTCkgeworCQlyZXQgPSB3bDEyNzFfZmV0Y2hfbnZzKHdsKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWRldl9lcnIoJmZ1bmMtPmRldiwgIk5WUyBmZXRjaCBlcnJvclxuIik7CisJCQlnb3RvIG91dF9vZmY7CisJCX0KKwl9CisKKwlyZXQgPSB3bDEyNzFfbG9hZF9maXJtd2FyZSh3bCk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmZnVuYy0+ZGV2LCAiZmlybXdhcmUgbG9hZCBlcnJvcjogJWRcbiIsIHJldCk7CisJCWdvdG8gb3V0X2ZyZWU7CisJfQorCisJZGV2X2luZm8oJmZ1bmMtPmRldiwgImluaXRpYWxpemVkXG4iKTsKKworCS8qIEkvTyB0ZXN0aW5nIHdpbGwgYmUgZG9uZSBpbiB0aGUgdGVzdGVyIHRocmVhZCAqLworCisJd2xfdGVzdC0+dGVzdF90YXNrID0ga3RocmVhZF9ydW4odGVzdGVyLCB3bCwgInNkaW9fdGVzdGVyIik7CisJaWYgKElTX0VSUih3bF90ZXN0LT50ZXN0X3Rhc2spKSB7CisJCWRldl9lcnIoJmZ1bmMtPmRldiwgInVuYWJsZSB0byBjcmVhdGUga2VybmVsIHRocmVhZFxuIik7CisJCXJldCA9IFBUUl9FUlIod2xfdGVzdC0+dGVzdF90YXNrKTsKKwkJZ290byBvdXRfZnJlZTsKKwl9CisKKwlyZXR1cm4gMDsKKworb3V0X29mZjoKKwkvKiBwb3dlciBvZmYgdGhlIGNoaXAgKi8KKwl3bDEyNzFfcG93ZXJfb2ZmKHdsKTsKKworb3V0X2ZyZWU6CisJa2ZyZWUod2xfdGVzdCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IHdsMTI3MV9yZW1vdmUoc3RydWN0IHNkaW9fZnVuYyAqZnVuYykKK3sKKwlzdHJ1Y3Qgd2wxMjcxX3Rlc3QgKndsX3Rlc3QgPSBzZGlvX2dldF9kcnZkYXRhKGZ1bmMpOworCisJLyogc3RvcCB0aGUgSS9PIHRlc3QgdGhyZWFkICovCisJa3RocmVhZF9zdG9wKHdsX3Rlc3QtPnRlc3RfdGFzayk7CisKKwkvKiBwb3dlciBvZmYgdGhlIGNoaXAgKi8KKwl3bDEyNzFfcG93ZXJfb2ZmKCZ3bF90ZXN0LT53bCk7CisKKwl2ZnJlZSh3bF90ZXN0LT53bC5mdyk7CisJd2xfdGVzdC0+d2wuZncgPSBOVUxMOworCWtmcmVlKHdsX3Rlc3QtPndsLm52cyk7CisJd2xfdGVzdC0+d2wubnZzID0gTlVMTDsKKworCWtmcmVlKHdsX3Rlc3QpOworfQorCitzdGF0aWMgc3RydWN0IHNkaW9fZHJpdmVyIHdsMTI3MV9zZGlvX2RyaXZlciA9IHsKKwkubmFtZQkJPSAid2wxMnh4X3NkaW9fdGVzdCIsCisJLmlkX3RhYmxlCT0gd2wxMjcxX2RldmljZXMsCisJLnByb2JlCQk9IHdsMTI3MV9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHdsMTI3MV9yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgd2wxMjcxX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gc2Rpb19yZWdpc3Rlcl9kcml2ZXIoJndsMTI3MV9zZGlvX2RyaXZlcik7CisJaWYgKHJldCA8IDApCisJCXByX2VycigiZmFpbGVkIHRvIHJlZ2lzdGVyIHNkaW8gZHJpdmVyOiAlZFxuIiwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9Cittb2R1bGVfaW5pdCh3bDEyNzFfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB3bDEyNzFfZXhpdCh2b2lkKQoreworCXNkaW9fdW5yZWdpc3Rlcl9kcml2ZXIoJndsMTI3MV9zZGlvX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdCh3bDEyNzFfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIlJvZ2VyIFF1YWRyb3MgPHJvZ2VyLnF1YWRyb3NAbm9raWEuY29tPiIpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvc3BpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvc3BpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY3MTQ5MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9zcGkuYwpAQCAtMCwwICsxLDQ5OCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdsMTI3MQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogQ29udGFjdDogTHVjaWFubyBDb2VsaG8gPGx1Y2lhbm8uY29lbGhvQG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9jcmM3Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3dsMTJ4eC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworI2luY2x1ZGUgIndsMTJ4eC5oIgorI2luY2x1ZGUgIndsMTJ4eF84MDIxMS5oIgorI2luY2x1ZGUgImlvLmgiCisKKyNpbmNsdWRlICJyZWcuaCIKKworI2RlZmluZSBXU1BJX0NNRF9SRUFEICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIFdTUElfQ01EX1dSSVRFICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgV1NQSV9DTURfRklYRUQgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBXU1BJX0NNRF9CWVRFX0xFTkdUSCAgICAgICAgICAweDFGRkUwMDAwCisjZGVmaW5lIFdTUElfQ01EX0JZVEVfTEVOR1RIX09GRlNFVCAgIDE3CisjZGVmaW5lIFdTUElfQ01EX0JZVEVfQUREUiAgICAgICAgICAgIDB4MDAwMUZGRkYKKworI2RlZmluZSBXU1BJX0lOSVRfQ01EX0NSQ19MRU4gICAgICAgNQorCisjZGVmaW5lIFdTUElfSU5JVF9DTURfU1RBUlQgICAgICAgICAweDAwCisjZGVmaW5lIFdTUElfSU5JVF9DTURfVFggICAgICAgICAgICAweDQwCisvKiB0aGUgZXh0cmEgYnlwYXNzIGJpdCBpcyBzYW1wbGVkIGJ5IHRoZSBUTkVUIGFzICcxJyAqLworI2RlZmluZSBXU1BJX0lOSVRfQ01EX0JZUEFTU19CSVQgICAgMHg4MAorI2RlZmluZSBXU1BJX0lOSVRfQ01EX0ZJWEVEQlVTWV9MRU4gMHgwNworI2RlZmluZSBXU1BJX0lOSVRfQ01EX0VOX0ZJWEVEQlVTWSAgMHg4MAorI2RlZmluZSBXU1BJX0lOSVRfQ01EX0RJU19GSVhFREJVU1kgMHgwMAorI2RlZmluZSBXU1BJX0lOSVRfQ01EX0lPRCAgICAgICAgICAgMHg0MAorI2RlZmluZSBXU1BJX0lOSVRfQ01EX0lQICAgICAgICAgICAgMHgyMAorI2RlZmluZSBXU1BJX0lOSVRfQ01EX0NTICAgICAgICAgICAgMHgxMAorI2RlZmluZSBXU1BJX0lOSVRfQ01EX1dTICAgICAgICAgICAgMHgwOAorI2RlZmluZSBXU1BJX0lOSVRfQ01EX1dTUEkgICAgICAgICAgMHgwMQorI2RlZmluZSBXU1BJX0lOSVRfQ01EX0VORCAgICAgICAgICAgMHgwMQorCisjZGVmaW5lIFdTUElfSU5JVF9DTURfTEVOICAgICAgICAgICA4CisKKyNkZWZpbmUgSFdfQUNDRVNTX1dTUElfRklYRURfQlVTWV9MRU4gXAorCQkoKFdMMTI3MV9CVVNZX1dPUkRfTEVOIC0gNCkgLyBzaXplb2YodTMyKSkKKyNkZWZpbmUgSFdfQUNDRVNTX1dTUElfSU5JVF9DTURfTUFTSyAgMAorCisvKiBIVyBsaW1pdGF0aW9uOiBtYXhpbXVtIHBvc3NpYmxlIGNodW5rIHNpemUgaXMgNDA5NSBieXRlcyAqLworI2RlZmluZSBXU1BJX01BWF9DSFVOS19TSVpFICAgIDQwOTIKKworI2RlZmluZSBXU1BJX01BWF9OVU1fT0ZfQ0hVTktTIChXTDEyNzFfQUdHUl9CVUZGRVJfU0laRSAvIFdTUElfTUFYX0NIVU5LX1NJWkUpCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNwaV9kZXZpY2UgKndsX3RvX3NwaShzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlyZXR1cm4gd2wtPmlmX3ByaXY7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlICp3bDEyNzFfc3BpX3dsX3RvX2RldihzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlyZXR1cm4gJih3bF90b19zcGkod2wpLT5kZXYpOworfQorCitzdGF0aWMgdm9pZCB3bDEyNzFfc3BpX2Rpc2FibGVfaW50ZXJydXB0cyhzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlkaXNhYmxlX2lycSh3bC0+aXJxKTsKK30KKworc3RhdGljIHZvaWQgd2wxMjcxX3NwaV9lbmFibGVfaW50ZXJydXB0cyhzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwllbmFibGVfaXJxKHdsLT5pcnEpOworfQorCitzdGF0aWMgdm9pZCB3bDEyNzFfc3BpX3Jlc2V0KHN0cnVjdCB3bDEyNzEgKndsKQoreworCXU4ICpjbWQ7CisJc3RydWN0IHNwaV90cmFuc2ZlciB0OworCXN0cnVjdCBzcGlfbWVzc2FnZSBtOworCisJY21kID0ga3phbGxvYyhXU1BJX0lOSVRfQ01EX0xFTiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjbWQpIHsKKwkJd2wxMjcxX2Vycm9yKCJjb3VsZCBub3QgYWxsb2NhdGUgY21kIGZvciBzcGkgcmVzZXQiKTsKKwkJcmV0dXJuOworCX0KKworCW1lbXNldCgmdCwgMCwgc2l6ZW9mKHQpKTsKKwlzcGlfbWVzc2FnZV9pbml0KCZtKTsKKworCW1lbXNldChjbWQsIDB4ZmYsIFdTUElfSU5JVF9DTURfTEVOKTsKKworCXQudHhfYnVmID0gY21kOworCXQubGVuID0gV1NQSV9JTklUX0NNRF9MRU47CisJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnQsICZtKTsKKworCXNwaV9zeW5jKHdsX3RvX3NwaSh3bCksICZtKTsKKwlrZnJlZShjbWQpOworCisJd2wxMjcxX2R1bXAoREVCVUdfU1BJLCAic3BpIHJlc2V0IC0+ICIsIGNtZCwgV1NQSV9JTklUX0NNRF9MRU4pOworfQorCitzdGF0aWMgdm9pZCB3bDEyNzFfc3BpX2luaXQoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJdTggY3JjW1dTUElfSU5JVF9DTURfQ1JDX0xFTl0sICpjbWQ7CisJc3RydWN0IHNwaV90cmFuc2ZlciB0OworCXN0cnVjdCBzcGlfbWVzc2FnZSBtOworCisJY21kID0ga3phbGxvYyhXU1BJX0lOSVRfQ01EX0xFTiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjbWQpIHsKKwkJd2wxMjcxX2Vycm9yKCJjb3VsZCBub3QgYWxsb2NhdGUgY21kIGZvciBzcGkgaW5pdCIpOworCQlyZXR1cm47CisJfQorCisJbWVtc2V0KGNyYywgMCwgc2l6ZW9mKGNyYykpOworCW1lbXNldCgmdCwgMCwgc2l6ZW9mKHQpKTsKKwlzcGlfbWVzc2FnZV9pbml0KCZtKTsKKworCS8qCisJICogU2V0IFdTUElfSU5JVF9DT01NQU5ECisJICogdGhlIGRhdGEgaXMgYmVpbmcgc2VuZCBmcm9tIHRoZSBNU0IgdG8gTFNCCisJICovCisJY21kWzJdID0gMHhmZjsKKwljbWRbM10gPSAweGZmOworCWNtZFsxXSA9IFdTUElfSU5JVF9DTURfU1RBUlQgfCBXU1BJX0lOSVRfQ01EX1RYOworCWNtZFswXSA9IDA7CisJY21kWzddID0gMDsKKwljbWRbNl0gfD0gSFdfQUNDRVNTX1dTUElfSU5JVF9DTURfTUFTSyA8PCAzOworCWNtZFs2XSB8PSBIV19BQ0NFU1NfV1NQSV9GSVhFRF9CVVNZX0xFTiAmIFdTUElfSU5JVF9DTURfRklYRURCVVNZX0xFTjsKKworCWlmIChIV19BQ0NFU1NfV1NQSV9GSVhFRF9CVVNZX0xFTiA9PSAwKQorCQljbWRbNV0gfD0gIFdTUElfSU5JVF9DTURfRElTX0ZJWEVEQlVTWTsKKwllbHNlCisJCWNtZFs1XSB8PSBXU1BJX0lOSVRfQ01EX0VOX0ZJWEVEQlVTWTsKKworCWNtZFs1XSB8PSBXU1BJX0lOSVRfQ01EX0lPRCB8IFdTUElfSU5JVF9DTURfSVAgfCBXU1BJX0lOSVRfQ01EX0NTCisJCXwgV1NQSV9JTklUX0NNRF9XU1BJIHwgV1NQSV9JTklUX0NNRF9XUzsKKworCWNyY1swXSA9IGNtZFsxXTsKKwljcmNbMV0gPSBjbWRbMF07CisJY3JjWzJdID0gY21kWzddOworCWNyY1szXSA9IGNtZFs2XTsKKwljcmNbNF0gPSBjbWRbNV07CisKKwljbWRbNF0gfD0gY3JjNygwLCBjcmMsIFdTUElfSU5JVF9DTURfQ1JDX0xFTikgPDwgMTsKKwljbWRbNF0gfD0gV1NQSV9JTklUX0NNRF9FTkQ7CisKKwl0LnR4X2J1ZiA9IGNtZDsKKwl0LmxlbiA9IFdTUElfSU5JVF9DTURfTEVOOworCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0LCAmbSk7CisKKwlzcGlfc3luYyh3bF90b19zcGkod2wpLCAmbSk7CisJd2wxMjcxX2R1bXAoREVCVUdfU1BJLCAic3BpIGluaXQgLT4gIiwgY21kLCBXU1BJX0lOSVRfQ01EX0xFTik7CisJa2ZyZWUoY21kKTsKK30KKworI2RlZmluZSBXTDEyNzFfQlVTWV9XT1JEX1RJTUVPVVQgMTAwMAorCitzdGF0aWMgaW50IHdsMTI3MV9zcGlfcmVhZF9idXN5KHN0cnVjdCB3bDEyNzEgKndsKQoreworCXN0cnVjdCBzcGlfdHJhbnNmZXIgdFsxXTsKKwlzdHJ1Y3Qgc3BpX21lc3NhZ2UgbTsKKwl1MzIgKmJ1c3lfYnVmOworCWludCBudW1fYnVzeV9ieXRlcyA9IDA7CisKKwkvKgorCSAqIFJlYWQgZnVydGhlciBidXN5IHdvcmRzIGZyb20gU1BJIHVudGlsIGEgbm9uLWJ1c3kgd29yZCBpcworCSAqIGVuY291bnRlcmVkLCB0aGVuIHJlYWQgdGhlIGRhdGEgaXRzZWxmIGludG8gdGhlIGJ1ZmZlci4KKwkgKi8KKworCW51bV9idXN5X2J5dGVzID0gV0wxMjcxX0JVU1lfV09SRF9USU1FT1VUOworCWJ1c3lfYnVmID0gd2wtPmJ1ZmZlcl9idXN5d29yZDsKKwl3aGlsZSAobnVtX2J1c3lfYnl0ZXMpIHsKKwkJbnVtX2J1c3lfYnl0ZXMtLTsKKwkJc3BpX21lc3NhZ2VfaW5pdCgmbSk7CisJCW1lbXNldCh0LCAwLCBzaXplb2YodCkpOworCQl0WzBdLnJ4X2J1ZiA9IGJ1c3lfYnVmOworCQl0WzBdLmxlbiA9IHNpemVvZih1MzIpOworCQl0WzBdLmNzX2NoYW5nZSA9IHRydWU7CisJCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0WzBdLCAmbSk7CisJCXNwaV9zeW5jKHdsX3RvX3NwaSh3bCksICZtKTsKKworCQlpZiAoKmJ1c3lfYnVmICYgMHgxKQorCQkJcmV0dXJuIDA7CisJfQorCisJLyogVGhlIFNQSSBidXMgaXMgdW5yZXNwb25zaXZlLCB0aGUgcmVhZCBmYWlsZWQuICovCisJd2wxMjcxX2Vycm9yKCJTUEkgcmVhZCBidXN5LXdvcmQgdGltZW91dCFcbiIpOworCXJldHVybiAtRVRJTUVET1VUOworfQorCitzdGF0aWMgdm9pZCB3bDEyNzFfc3BpX3Jhd19yZWFkKHN0cnVjdCB3bDEyNzEgKndsLCBpbnQgYWRkciwgdm9pZCAqYnVmLAorCQkJCXNpemVfdCBsZW4sIGJvb2wgZml4ZWQpCit7CisJc3RydWN0IHNwaV90cmFuc2ZlciB0WzJdOworCXN0cnVjdCBzcGlfbWVzc2FnZSBtOworCXUzMiAqYnVzeV9idWY7CisJdTMyICpjbWQ7CisJdTMyIGNodW5rX2xlbjsKKworCXdoaWxlIChsZW4gPiAwKSB7CisJCWNodW5rX2xlbiA9IG1pbigoc2l6ZV90KVdTUElfTUFYX0NIVU5LX1NJWkUsIGxlbik7CisKKwkJY21kID0gJndsLT5idWZmZXJfY21kOworCQlidXN5X2J1ZiA9IHdsLT5idWZmZXJfYnVzeXdvcmQ7CisKKwkJKmNtZCA9IDA7CisJCSpjbWQgfD0gV1NQSV9DTURfUkVBRDsKKwkJKmNtZCB8PSAoY2h1bmtfbGVuIDw8IFdTUElfQ01EX0JZVEVfTEVOR1RIX09GRlNFVCkgJgorCQkJV1NQSV9DTURfQllURV9MRU5HVEg7CisJCSpjbWQgfD0gYWRkciAmIFdTUElfQ01EX0JZVEVfQUREUjsKKworCQlpZiAoZml4ZWQpCisJCQkqY21kIHw9IFdTUElfQ01EX0ZJWEVEOworCisJCXNwaV9tZXNzYWdlX2luaXQoJm0pOworCQltZW1zZXQodCwgMCwgc2l6ZW9mKHQpKTsKKworCQl0WzBdLnR4X2J1ZiA9IGNtZDsKKwkJdFswXS5sZW4gPSA0OworCQl0WzBdLmNzX2NoYW5nZSA9IHRydWU7CisJCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0WzBdLCAmbSk7CisKKwkJLyogQnVzeSBhbmQgbm9uIGJ1c3kgd29yZHMgcmVhZCAqLworCQl0WzFdLnJ4X2J1ZiA9IGJ1c3lfYnVmOworCQl0WzFdLmxlbiA9IFdMMTI3MV9CVVNZX1dPUkRfTEVOOworCQl0WzFdLmNzX2NoYW5nZSA9IHRydWU7CisJCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0WzFdLCAmbSk7CisKKwkJc3BpX3N5bmMod2xfdG9fc3BpKHdsKSwgJm0pOworCisJCWlmICghKGJ1c3lfYnVmW1dMMTI3MV9CVVNZX1dPUkRfQ05UIC0gMV0gJiAweDEpICYmCisJCSAgICB3bDEyNzFfc3BpX3JlYWRfYnVzeSh3bCkpIHsKKwkJCW1lbXNldChidWYsIDAsIGNodW5rX2xlbik7CisJCQlyZXR1cm47CisJCX0KKworCQlzcGlfbWVzc2FnZV9pbml0KCZtKTsKKwkJbWVtc2V0KHQsIDAsIHNpemVvZih0KSk7CisKKwkJdFswXS5yeF9idWYgPSBidWY7CisJCXRbMF0ubGVuID0gY2h1bmtfbGVuOworCQl0WzBdLmNzX2NoYW5nZSA9IHRydWU7CisJCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0WzBdLCAmbSk7CisKKwkJc3BpX3N5bmMod2xfdG9fc3BpKHdsKSwgJm0pOworCisJCXdsMTI3MV9kdW1wKERFQlVHX1NQSSwgInNwaV9yZWFkIGNtZCAtPiAiLCBjbWQsIHNpemVvZigqY21kKSk7CisJCXdsMTI3MV9kdW1wKERFQlVHX1NQSSwgInNwaV9yZWFkIGJ1ZiA8LSAiLCBidWYsIGNodW5rX2xlbik7CisKKwkJaWYgKCFmaXhlZCkKKwkJCWFkZHIgKz0gY2h1bmtfbGVuOworCQlidWYgKz0gY2h1bmtfbGVuOworCQlsZW4gLT0gY2h1bmtfbGVuOworCX0KK30KKworc3RhdGljIHZvaWQgd2wxMjcxX3NwaV9yYXdfd3JpdGUoc3RydWN0IHdsMTI3MSAqd2wsIGludCBhZGRyLCB2b2lkICpidWYsCisJCQkgIHNpemVfdCBsZW4sIGJvb2wgZml4ZWQpCit7CisJc3RydWN0IHNwaV90cmFuc2ZlciB0WzIgKiBXU1BJX01BWF9OVU1fT0ZfQ0hVTktTXTsKKwlzdHJ1Y3Qgc3BpX21lc3NhZ2UgbTsKKwl1MzIgY29tbWFuZHNbV1NQSV9NQVhfTlVNX09GX0NIVU5LU107CisJdTMyICpjbWQ7CisJdTMyIGNodW5rX2xlbjsKKwlpbnQgaTsKKworCVdBUk5fT04obGVuID4gV0wxMjcxX0FHR1JfQlVGRkVSX1NJWkUpOworCisJc3BpX21lc3NhZ2VfaW5pdCgmbSk7CisJbWVtc2V0KHQsIDAsIHNpemVvZih0KSk7CisKKwljbWQgPSAmY29tbWFuZHNbMF07CisJaSA9IDA7CisJd2hpbGUgKGxlbiA+IDApIHsKKwkJY2h1bmtfbGVuID0gbWluKChzaXplX3QpV1NQSV9NQVhfQ0hVTktfU0laRSwgbGVuKTsKKworCQkqY21kID0gMDsKKwkJKmNtZCB8PSBXU1BJX0NNRF9XUklURTsKKwkJKmNtZCB8PSAoY2h1bmtfbGVuIDw8IFdTUElfQ01EX0JZVEVfTEVOR1RIX09GRlNFVCkgJgorCQkJV1NQSV9DTURfQllURV9MRU5HVEg7CisJCSpjbWQgfD0gYWRkciAmIFdTUElfQ01EX0JZVEVfQUREUjsKKworCQlpZiAoZml4ZWQpCisJCQkqY21kIHw9IFdTUElfQ01EX0ZJWEVEOworCisJCXRbaV0udHhfYnVmID0gY21kOworCQl0W2ldLmxlbiA9IHNpemVvZigqY21kKTsKKwkJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnRbaSsrXSwgJm0pOworCisJCXRbaV0udHhfYnVmID0gYnVmOworCQl0W2ldLmxlbiA9IGNodW5rX2xlbjsKKwkJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnRbaSsrXSwgJm0pOworCisJCXdsMTI3MV9kdW1wKERFQlVHX1NQSSwgInNwaV93cml0ZSBjbWQgLT4gIiwgY21kLCBzaXplb2YoKmNtZCkpOworCQl3bDEyNzFfZHVtcChERUJVR19TUEksICJzcGlfd3JpdGUgYnVmIC0+ICIsIGJ1ZiwgY2h1bmtfbGVuKTsKKworCQlpZiAoIWZpeGVkKQorCQkJYWRkciArPSBjaHVua19sZW47CisJCWJ1ZiArPSBjaHVua19sZW47CisJCWxlbiAtPSBjaHVua19sZW47CisJCWNtZCsrOworCX0KKworCXNwaV9zeW5jKHdsX3RvX3NwaSh3bCksICZtKTsKK30KKworc3RhdGljIGlycXJldHVybl90IHdsMTI3MV9pcnEoaW50IGlycSwgdm9pZCAqY29va2llKQoreworCXN0cnVjdCB3bDEyNzEgKndsOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfSVJRLCAiSVJRIik7CisKKwl3bCA9IGNvb2tpZTsKKworCS8qIGNvbXBsZXRlIHRoZSBFTFAgY29tcGxldGlvbiAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZ3bC0+d2xfbG9jaywgZmxhZ3MpOworCWlmICh3bC0+ZWxwX2NvbXBsKSB7CisJCWNvbXBsZXRlKHdsLT5lbHBfY29tcGwpOworCQl3bC0+ZWxwX2NvbXBsID0gTlVMTDsKKwl9CisKKwlpZiAoIXRlc3RfYW5kX3NldF9iaXQoV0wxMjcxX0ZMQUdfSVJRX1JVTk5JTkcsICZ3bC0+ZmxhZ3MpKQorCQlpZWVlODAyMTFfcXVldWVfd29yayh3bC0+aHcsICZ3bC0+aXJxX3dvcmspOworCXNldF9iaXQoV0wxMjcxX0ZMQUdfSVJRX1BFTkRJTkcsICZ3bC0+ZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndsLT53bF9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjcxX3NwaV9zZXRfcG93ZXIoc3RydWN0IHdsMTI3MSAqd2wsIGJvb2wgZW5hYmxlKQoreworCWlmICh3bC0+c2V0X3Bvd2VyKQorCQl3bC0+c2V0X3Bvd2VyKGVuYWJsZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCB3bDEyNzFfaWZfb3BlcmF0aW9ucyBzcGlfb3BzID0geworCS5yZWFkCQk9IHdsMTI3MV9zcGlfcmF3X3JlYWQsCisJLndyaXRlCQk9IHdsMTI3MV9zcGlfcmF3X3dyaXRlLAorCS5yZXNldAkJPSB3bDEyNzFfc3BpX3Jlc2V0LAorCS5pbml0CQk9IHdsMTI3MV9zcGlfaW5pdCwKKwkucG93ZXIJCT0gd2wxMjcxX3NwaV9zZXRfcG93ZXIsCisJLmRldgkJPSB3bDEyNzFfc3BpX3dsX3RvX2RldiwKKwkuZW5hYmxlX2lycQk9IHdsMTI3MV9zcGlfZW5hYmxlX2ludGVycnVwdHMsCisJLmRpc2FibGVfaXJxCT0gd2wxMjcxX3NwaV9kaXNhYmxlX2ludGVycnVwdHMKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHdsMTI3MV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCB3bDEyeHhfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CisJc3RydWN0IHdsMTI3MSAqd2w7CisJaW50IHJldDsKKworCXBkYXRhID0gc3BpLT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpZiAoIXBkYXRhKSB7CisJCXdsMTI3MV9lcnJvcigibm8gcGxhdGZvcm0gZGF0YSIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlodyA9IHdsMTI3MV9hbGxvY19odygpOworCWlmIChJU19FUlIoaHcpKQorCQlyZXR1cm4gUFRSX0VSUihodyk7CisKKwl3bCA9IGh3LT5wcml2OworCisJZGV2X3NldF9kcnZkYXRhKCZzcGktPmRldiwgd2wpOworCXdsLT5pZl9wcml2ID0gc3BpOworCisJd2wtPmlmX29wcyA9ICZzcGlfb3BzOworCisJLyogVGhpcyBpcyB0aGUgb25seSBTUEkgdmFsdWUgdGhhdCB3ZSBuZWVkIHRvIHNldCBoZXJlLCB0aGUgcmVzdAorCSAqIGNvbWVzIGZyb20gdGhlIGJvYXJkLXBlcmlwaGVyYWxzIGZpbGUgKi8KKwlzcGktPmJpdHNfcGVyX3dvcmQgPSAzMjsKKworCXJldCA9IHNwaV9zZXR1cChzcGkpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV9lcnJvcigic3BpX3NldHVwIGZhaWxlZCIpOworCQlnb3RvIG91dF9mcmVlOworCX0KKworCXdsLT5zZXRfcG93ZXIgPSBwZGF0YS0+c2V0X3Bvd2VyOworCWlmICghd2wtPnNldF9wb3dlcikgeworCQl3bDEyNzFfZXJyb3IoInNldCBwb3dlciBmdW5jdGlvbiBtaXNzaW5nIGluIHBsYXRmb3JtIGRhdGEiKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXRfZnJlZTsKKwl9CisKKwl3bC0+cmVmX2Nsb2NrID0gcGRhdGEtPmJvYXJkX3JlZl9jbG9jazsKKworCXdsLT5pcnEgPSBzcGktPmlycTsKKwlpZiAod2wtPmlycSA8IDApIHsKKwkJd2wxMjcxX2Vycm9yKCJpcnEgbWlzc2luZyBpbiBwbGF0Zm9ybSBkYXRhIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0X2ZyZWU7CisJfQorCisJcmV0ID0gcmVxdWVzdF9pcnEod2wtPmlycSwgd2wxMjcxX2lycSwgMCwgRFJJVkVSX05BTUUsIHdsKTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNzFfZXJyb3IoInJlcXVlc3RfaXJxKCkgZmFpbGVkOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0X2ZyZWU7CisJfQorCisJc2V0X2lycV90eXBlKHdsLT5pcnEsIElSUV9UWVBFX0VER0VfUklTSU5HKTsKKworCWRpc2FibGVfaXJxKHdsLT5pcnEpOworCisJcmV0ID0gd2wxMjcxX2luaXRfaWVlZTgwMjExKHdsKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9pcnE7CisKKwlyZXQgPSB3bDEyNzFfcmVnaXN0ZXJfaHcod2wpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2lycTsKKworCXdsMTI3MV9ub3RpY2UoImluaXRpYWxpemVkIik7CisKKwlyZXR1cm4gMDsKKworIG91dF9pcnE6CisJZnJlZV9pcnEod2wtPmlycSwgd2wpOworCisgb3V0X2ZyZWU6CisJd2wxMjcxX2ZyZWVfaHcod2wpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgd2wxMjcxX3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCB3bDEyNzEgKndsID0gZGV2X2dldF9kcnZkYXRhKCZzcGktPmRldik7CisKKwl3bDEyNzFfdW5yZWdpc3Rlcl9odyh3bCk7CisJZnJlZV9pcnEod2wtPmlycSwgd2wpOworCXdsMTI3MV9mcmVlX2h3KHdsKTsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciB3bDEyNzFfc3BpX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQkJPSAid2wxMjcxX3NwaSIsCisJCS5idXMJCT0gJnNwaV9idXNfdHlwZSwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCX0sCisKKwkucHJvYmUJCT0gd2wxMjcxX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aod2wxMjcxX3JlbW92ZSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCB3bDEyNzFfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSBzcGlfcmVnaXN0ZXJfZHJpdmVyKCZ3bDEyNzFfc3BpX2RyaXZlcik7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX2Vycm9yKCJmYWlsZWQgdG8gcmVnaXN0ZXIgc3BpIGRyaXZlcjogJWQiLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgd2wxMjcxX2V4aXQodm9pZCkKK3sKKwlzcGlfdW5yZWdpc3Rlcl9kcml2ZXIoJndsMTI3MV9zcGlfZHJpdmVyKTsKKworCXdsMTI3MV9ub3RpY2UoInVubG9hZGVkIik7Cit9CisKK21vZHVsZV9pbml0KHdsMTI3MV9pbml0KTsKK21vZHVsZV9leGl0KHdsMTI3MV9leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiTHVjaWFubyBDb2VsaG8gPGx1Y2lhbm8uY29lbGhvQG5va2lhLmNvbT4iKTsKK01PRFVMRV9BVVRIT1IoIkp1dXNvIE9pa2FyaW5lbiA8anV1c28ub2lrYXJpbmVuQG5va2lhLmNvbT4iKTsKK01PRFVMRV9GSVJNV0FSRShXTDEyNzFfRldfTkFNRSk7CitNT0RVTEVfQUxJQVMoInNwaTp3bDEyNzEiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC90ZXN0bW9kZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3Rlc3Rtb2RlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY0NDAzYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC90ZXN0bW9kZS5jCkBAIC0wLDAgKzEsMjkwIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMjcxCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uCisgKgorICogQ29udGFjdDogTHVjaWFubyBDb2VsaG8gPGx1Y2lhbm8uY29lbGhvQG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBCisgKgorICovCisjaW5jbHVkZSAidGVzdG1vZGUuaCIKKworI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxuZXQvZ2VuZXRsaW5rLmg+CisKKyNpbmNsdWRlICJ3bDEyeHguaCIKKyNpbmNsdWRlICJhY3guaCIKKworI2RlZmluZSBXTDEyNzFfVE1fTUFYX0RBVEFfTEVOR1RIIDEwMjQKKworZW51bSB3bDEyNzFfdG1fY29tbWFuZHMgeworCVdMMTI3MV9UTV9DTURfVU5TUEVDLAorCVdMMTI3MV9UTV9DTURfVEVTVCwKKwlXTDEyNzFfVE1fQ01EX0lOVEVSUk9HQVRFLAorCVdMMTI3MV9UTV9DTURfQ09ORklHVVJFLAorCVdMMTI3MV9UTV9DTURfTlZTX1BVU0gsCisJV0wxMjcxX1RNX0NNRF9TRVRfUExUX01PREUsCisJV0wxMjcxX1RNX0NNRF9SRUNPVkVSLAorCisJX19XTDEyNzFfVE1fQ01EX0FGVEVSX0xBU1QKK307CisjZGVmaW5lIFdMMTI3MV9UTV9DTURfTUFYIChfX1dMMTI3MV9UTV9DTURfQUZURVJfTEFTVCAtIDEpCisKK2VudW0gd2wxMjcxX3RtX2F0dHJzIHsKKwlXTDEyNzFfVE1fQVRUUl9VTlNQRUMsCisJV0wxMjcxX1RNX0FUVFJfQ01EX0lELAorCVdMMTI3MV9UTV9BVFRSX0FOU1dFUiwKKwlXTDEyNzFfVE1fQVRUUl9EQVRBLAorCVdMMTI3MV9UTV9BVFRSX0lFX0lELAorCVdMMTI3MV9UTV9BVFRSX1BMVF9NT0RFLAorCisJX19XTDEyNzFfVE1fQVRUUl9BRlRFUl9MQVNUCit9OworI2RlZmluZSBXTDEyNzFfVE1fQVRUUl9NQVggKF9fV0wxMjcxX1RNX0FUVFJfQUZURVJfTEFTVCAtIDEpCisKK3N0YXRpYyBzdHJ1Y3QgbmxhX3BvbGljeSB3bDEyNzFfdG1fcG9saWN5W1dMMTI3MV9UTV9BVFRSX01BWCArIDFdID0geworCVtXTDEyNzFfVE1fQVRUUl9DTURfSURdID0JeyAudHlwZSA9IE5MQV9VMzIgfSwKKwlbV0wxMjcxX1RNX0FUVFJfQU5TV0VSXSA9CXsgLnR5cGUgPSBOTEFfVTggfSwKKwlbV0wxMjcxX1RNX0FUVFJfREFUQV0gPQkJeyAudHlwZSA9IE5MQV9CSU5BUlksCisJCQkJCSAgLmxlbiA9IFdMMTI3MV9UTV9NQVhfREFUQV9MRU5HVEggfSwKKwlbV0wxMjcxX1RNX0FUVFJfSUVfSURdID0JeyAudHlwZSA9IE5MQV9VMzIgfSwKKwlbV0wxMjcxX1RNX0FUVFJfUExUX01PREVdID0JeyAudHlwZSA9IE5MQV9VMzIgfSwKK307CisKKworc3RhdGljIGludCB3bDEyNzFfdG1fY21kX3Rlc3Qoc3RydWN0IHdsMTI3MSAqd2wsIHN0cnVjdCBubGF0dHIgKnRiW10pCit7CisJaW50IGJ1Zl9sZW4sIHJldCwgbGVuOworCXN0cnVjdCBza19idWZmICpza2I7CisJdm9pZCAqYnVmOworCXU4IGFuc3dlciA9IDA7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfVEVTVE1PREUsICJ0ZXN0bW9kZSBjbWQgdGVzdCIpOworCisJaWYgKCF0YltXTDEyNzFfVE1fQVRUUl9EQVRBXSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlidWYgPSBubGFfZGF0YSh0YltXTDEyNzFfVE1fQVRUUl9EQVRBXSk7CisJYnVmX2xlbiA9IG5sYV9sZW4odGJbV0wxMjcxX1RNX0FUVFJfREFUQV0pOworCisJaWYgKHRiW1dMMTI3MV9UTV9BVFRSX0FOU1dFUl0pCisJCWFuc3dlciA9IG5sYV9nZXRfdTgodGJbV0wxMjcxX1RNX0FUVFJfQU5TV0VSXSk7CisKKwlpZiAoYnVmX2xlbiA+IHNpemVvZihzdHJ1Y3Qgd2wxMjcxX2NvbW1hbmQpKQorCQlyZXR1cm4gLUVNU0dTSVpFOworCisJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKKwlyZXQgPSB3bDEyNzFfY21kX3Rlc3Qod2wsIGJ1ZiwgYnVmX2xlbiwgYW5zd2VyKTsKKwltdXRleF91bmxvY2soJndsLT5tdXRleCk7CisKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNzFfd2FybmluZygidGVzdG1vZGUgY21kIHRlc3QgZmFpbGVkOiAlZCIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYgKGFuc3dlcikgeworCQlsZW4gPSBubGFfdG90YWxfc2l6ZShidWZfbGVuKTsKKwkJc2tiID0gY2ZnODAyMTFfdGVzdG1vZGVfYWxsb2NfcmVwbHlfc2tiKHdsLT5ody0+d2lwaHksIGxlbik7CisJCWlmICghc2tiKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJTkxBX1BVVChza2IsIFdMMTI3MV9UTV9BVFRSX0RBVEEsIGJ1Zl9sZW4sIGJ1Zik7CisJCXJldCA9IGNmZzgwMjExX3Rlc3Rtb2RlX3JlcGx5KHNrYik7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKKworbmxhX3B1dF9mYWlsdXJlOgorCWtmcmVlX3NrYihza2IpOworCXJldHVybiAtRU1TR1NJWkU7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjcxX3RtX2NtZF9pbnRlcnJvZ2F0ZShzdHJ1Y3Qgd2wxMjcxICp3bCwgc3RydWN0IG5sYXR0ciAqdGJbXSkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCB3bDEyNzFfY29tbWFuZCAqY21kOworCXN0cnVjdCBza19idWZmICpza2I7CisJdTggaWVfaWQ7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfVEVTVE1PREUsICJ0ZXN0bW9kZSBjbWQgaW50ZXJyb2dhdGUiKTsKKworCWlmICghdGJbV0wxMjcxX1RNX0FUVFJfSUVfSURdKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWllX2lkID0gbmxhX2dldF91OCh0YltXTDEyNzFfVE1fQVRUUl9JRV9JRF0pOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmICghY21kKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW11dGV4X2xvY2soJndsLT5tdXRleCk7CisJcmV0ID0gd2wxMjcxX2NtZF9pbnRlcnJvZ2F0ZSh3bCwgaWVfaWQsIGNtZCwgc2l6ZW9mKCpjbWQpKTsKKwltdXRleF91bmxvY2soJndsLT5tdXRleCk7CisKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNzFfd2FybmluZygidGVzdG1vZGUgY21kIGludGVycm9nYXRlIGZhaWxlZDogJWQiLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXNrYiA9IGNmZzgwMjExX3Rlc3Rtb2RlX2FsbG9jX3JlcGx5X3NrYih3bC0+aHctPndpcGh5LCBzaXplb2YoKmNtZCkpOworCWlmICghc2tiKQorCQlyZXR1cm4gLUVOT01FTTsKKworCU5MQV9QVVQoc2tiLCBXTDEyNzFfVE1fQVRUUl9EQVRBLCBzaXplb2YoKmNtZCksIGNtZCk7CisKKwlyZXR1cm4gMDsKKworbmxhX3B1dF9mYWlsdXJlOgorCWtmcmVlX3NrYihza2IpOworCXJldHVybiAtRU1TR1NJWkU7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjcxX3RtX2NtZF9jb25maWd1cmUoc3RydWN0IHdsMTI3MSAqd2wsIHN0cnVjdCBubGF0dHIgKnRiW10pCit7CisJaW50IGJ1Zl9sZW4sIHJldDsKKwl2b2lkICpidWY7CisJdTggaWVfaWQ7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfVEVTVE1PREUsICJ0ZXN0bW9kZSBjbWQgY29uZmlndXJlIik7CisKKwlpZiAoIXRiW1dMMTI3MV9UTV9BVFRSX0RBVEFdKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIXRiW1dMMTI3MV9UTV9BVFRSX0lFX0lEXSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZV9pZCA9IG5sYV9nZXRfdTgodGJbV0wxMjcxX1RNX0FUVFJfSUVfSURdKTsKKwlidWYgPSBubGFfZGF0YSh0YltXTDEyNzFfVE1fQVRUUl9EQVRBXSk7CisJYnVmX2xlbiA9IG5sYV9sZW4odGJbV0wxMjcxX1RNX0FUVFJfREFUQV0pOworCisJaWYgKGJ1Zl9sZW4gPiBzaXplb2Yoc3RydWN0IHdsMTI3MV9jb21tYW5kKSkKKwkJcmV0dXJuIC1FTVNHU0laRTsKKworCW11dGV4X2xvY2soJndsLT5tdXRleCk7CisJcmV0ID0gd2wxMjcxX2NtZF9jb25maWd1cmUod2wsIGllX2lkLCBidWYsIGJ1Zl9sZW4pOworCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKKworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV93YXJuaW5nKCJ0ZXN0bW9kZSBjbWQgY29uZmlndXJlIGZhaWxlZDogJWQiLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdsMTI3MV90bV9jbWRfbnZzX3B1c2goc3RydWN0IHdsMTI3MSAqd2wsIHN0cnVjdCBubGF0dHIgKnRiW10pCit7CisJaW50IHJldCA9IDA7CisJc2l6ZV90IGxlbjsKKwl2b2lkICpidWY7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfVEVTVE1PREUsICJ0ZXN0bW9kZSBjbWQgbnZzIHB1c2giKTsKKworCWlmICghdGJbV0wxMjcxX1RNX0FUVFJfREFUQV0pCisJCXJldHVybiAtRUlOVkFMOworCisJYnVmID0gbmxhX2RhdGEodGJbV0wxMjcxX1RNX0FUVFJfREFUQV0pOworCWxlbiA9IG5sYV9sZW4odGJbV0wxMjcxX1RNX0FUVFJfREFUQV0pOworCisJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKKworCWtmcmVlKHdsLT5udnMpOworCisJd2wtPm52cyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB3bDEyNzFfbnZzX2ZpbGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXdsLT5udnMpIHsKKwkJd2wxMjcxX2Vycm9yKCJjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgbnZzIGZpbGUiKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJbWVtY3B5KHdsLT5udnMsIGJ1ZiwgbGVuKTsKKwl3bC0+bnZzX2xlbiA9IGxlbjsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19URVNUTU9ERSwgInRlc3Rtb2RlIHB1c2hlZCBudnMiKTsKKworb3V0OgorCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjcxX3RtX2NtZF9zZXRfcGx0X21vZGUoc3RydWN0IHdsMTI3MSAqd2wsIHN0cnVjdCBubGF0dHIgKnRiW10pCit7CisJdTMyIHZhbDsKKwlpbnQgcmV0OworCisJd2wxMjcxX2RlYnVnKERFQlVHX1RFU1RNT0RFLCAidGVzdG1vZGUgY21kIHNldCBwbHQgbW9kZSIpOworCisJaWYgKCF0YltXTDEyNzFfVE1fQVRUUl9QTFRfTU9ERV0pCisJCXJldHVybiAtRUlOVkFMOworCisJdmFsID0gbmxhX2dldF91MzIodGJbV0wxMjcxX1RNX0FUVFJfUExUX01PREVdKTsKKworCXN3aXRjaCAodmFsKSB7CisJY2FzZSAwOgorCQlyZXQgPSB3bDEyNzFfcGx0X3N0b3Aod2wpOworCQlicmVhazsKKwljYXNlIDE6CisJCXJldCA9IHdsMTI3MV9wbHRfc3RhcnQod2wpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHdsMTI3MV90bV9jbWRfcmVjb3ZlcihzdHJ1Y3Qgd2wxMjcxICp3bCwgc3RydWN0IG5sYXR0ciAqdGJbXSkKK3sKKwl3bDEyNzFfZGVidWcoREVCVUdfVEVTVE1PREUsICJ0ZXN0bW9kZSBjbWQgcmVjb3ZlciIpOworCisJaWVlZTgwMjExX3F1ZXVlX3dvcmsod2wtPmh3LCAmd2wtPnJlY292ZXJ5X3dvcmspOworCisJcmV0dXJuIDA7Cit9CisKK2ludCB3bDEyNzFfdG1fY21kKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB2b2lkICpkYXRhLCBpbnQgbGVuKQoreworCXN0cnVjdCB3bDEyNzEgKndsID0gaHctPnByaXY7CisJc3RydWN0IG5sYXR0ciAqdGJbV0wxMjcxX1RNX0FUVFJfTUFYICsgMV07CisJaW50IGVycjsKKworCWVyciA9IG5sYV9wYXJzZSh0YiwgV0wxMjcxX1RNX0FUVFJfTUFYLCBkYXRhLCBsZW4sIHdsMTI3MV90bV9wb2xpY3kpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlpZiAoIXRiW1dMMTI3MV9UTV9BVFRSX0NNRF9JRF0pCisJCXJldHVybiAtRUlOVkFMOworCisJc3dpdGNoIChubGFfZ2V0X3UzMih0YltXTDEyNzFfVE1fQVRUUl9DTURfSURdKSkgeworCWNhc2UgV0wxMjcxX1RNX0NNRF9URVNUOgorCQlyZXR1cm4gd2wxMjcxX3RtX2NtZF90ZXN0KHdsLCB0Yik7CisJY2FzZSBXTDEyNzFfVE1fQ01EX0lOVEVSUk9HQVRFOgorCQlyZXR1cm4gd2wxMjcxX3RtX2NtZF9pbnRlcnJvZ2F0ZSh3bCwgdGIpOworCWNhc2UgV0wxMjcxX1RNX0NNRF9DT05GSUdVUkU6CisJCXJldHVybiB3bDEyNzFfdG1fY21kX2NvbmZpZ3VyZSh3bCwgdGIpOworCWNhc2UgV0wxMjcxX1RNX0NNRF9OVlNfUFVTSDoKKwkJcmV0dXJuIHdsMTI3MV90bV9jbWRfbnZzX3B1c2god2wsIHRiKTsKKwljYXNlIFdMMTI3MV9UTV9DTURfU0VUX1BMVF9NT0RFOgorCQlyZXR1cm4gd2wxMjcxX3RtX2NtZF9zZXRfcGx0X21vZGUod2wsIHRiKTsKKwljYXNlIFdMMTI3MV9UTV9DTURfUkVDT1ZFUjoKKwkJcmV0dXJuIHdsMTI3MV90bV9jbWRfcmVjb3Zlcih3bCwgdGIpOworCWRlZmF1bHQ6CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvdGVzdG1vZGUuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC90ZXN0bW9kZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwNzE2NTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvdGVzdG1vZGUuaApAQCAtMCwwICsxLDMxIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMjcxCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uCisgKgorICogQ29udGFjdDogTHVjaWFubyBDb2VsaG8gPGx1Y2lhbm8uY29lbGhvQG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBCisgKgorICovCisKKyNpZm5kZWYgX19URVNUTU9ERV9IX18KKyNkZWZpbmUgX19URVNUTU9ERV9IX18KKworI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgorCitpbnQgd2wxMjcxX3RtX2NtZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdm9pZCAqZGF0YSwgaW50IGxlbik7CisKKyNlbmRpZiAvKiBfX1dMMTI3MV9URVNUTU9ERV9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC90eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3R4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ0Yzc1YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC90eC5jCkBAIC0wLDAgKzEsNTIzIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMjcxCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogQ29udGFjdDogTHVjaWFubyBDb2VsaG8gPGx1Y2lhbm8uY29lbGhvQG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworI2luY2x1ZGUgIndsMTJ4eC5oIgorI2luY2x1ZGUgImlvLmgiCisjaW5jbHVkZSAicmVnLmgiCisjaW5jbHVkZSAicHMuaCIKKyNpbmNsdWRlICJ0eC5oIgorCitzdGF0aWMgaW50IHdsMTI3MV9hbGxvY190eF9pZChzdHJ1Y3Qgd2wxMjcxICp3bCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlpbnQgaWQ7CisKKwlpZCA9IGZpbmRfZmlyc3RfemVyb19iaXQod2wtPnR4X2ZyYW1lc19tYXAsIEFDWF9UWF9ERVNDUklQVE9SUyk7CisJaWYgKGlkID49IEFDWF9UWF9ERVNDUklQVE9SUykKKwkJcmV0dXJuIC1FQlVTWTsKKworCV9fc2V0X2JpdChpZCwgd2wtPnR4X2ZyYW1lc19tYXApOworCXdsLT50eF9mcmFtZXNbaWRdID0gc2tiOworCXdsLT50eF9mcmFtZXNfY250Kys7CisJcmV0dXJuIGlkOworfQorCitzdGF0aWMgdm9pZCB3bDEyNzFfZnJlZV90eF9pZChzdHJ1Y3Qgd2wxMjcxICp3bCwgaW50IGlkKQoreworCWlmIChfX3Rlc3RfYW5kX2NsZWFyX2JpdChpZCwgd2wtPnR4X2ZyYW1lc19tYXApKSB7CisJCXdsLT50eF9mcmFtZXNbaWRdID0gTlVMTDsKKwkJd2wtPnR4X2ZyYW1lc19jbnQtLTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgd2wxMjcxX3R4X2FsbG9jYXRlKHN0cnVjdCB3bDEyNzEgKndsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgZXh0cmEsCisJCQkJdTMyIGJ1Zl9vZmZzZXQpCit7CisJc3RydWN0IHdsMTI3MV90eF9od19kZXNjciAqZGVzYzsKKwl1MzIgdG90YWxfbGVuID0gc2tiLT5sZW4gKyBzaXplb2Yoc3RydWN0IHdsMTI3MV90eF9od19kZXNjcikgKyBleHRyYTsKKwl1MzIgdG90YWxfYmxvY2tzOworCWludCBpZCwgcmV0ID0gLUVCVVNZOworCisJaWYgKGJ1Zl9vZmZzZXQgKyB0b3RhbF9sZW4gPiBXTDEyNzFfQUdHUl9CVUZGRVJfU0laRSkKKwkJcmV0dXJuIC1FQUdBSU47CisKKwkvKiBhbGxvY2F0ZSBmcmVlIGlkZW50aWZpZXIgZm9yIHRoZSBwYWNrZXQgKi8KKwlpZCA9IHdsMTI3MV9hbGxvY190eF9pZCh3bCwgc2tiKTsKKwlpZiAoaWQgPCAwKQorCQlyZXR1cm4gaWQ7CisKKwkvKiBhcHByb3hpbWF0ZSB0aGUgbnVtYmVyIG9mIGJsb2NrcyByZXF1aXJlZCBmb3IgdGhpcyBwYWNrZXQKKwkgICBpbiB0aGUgZmlybXdhcmUgKi8KKwl0b3RhbF9ibG9ja3MgPSB0b3RhbF9sZW4gKyBUWF9IV19CTE9DS19TSVpFIC0gMTsKKwl0b3RhbF9ibG9ja3MgPSB0b3RhbF9ibG9ja3MgLyBUWF9IV19CTE9DS19TSVpFICsgVFhfSFdfQkxPQ0tfU1BBUkU7CisJaWYgKHRvdGFsX2Jsb2NrcyA8PSB3bC0+dHhfYmxvY2tzX2F2YWlsYWJsZSkgeworCQlkZXNjID0gKHN0cnVjdCB3bDEyNzFfdHhfaHdfZGVzY3IgKilza2JfcHVzaCgKKwkJCXNrYiwgdG90YWxfbGVuIC0gc2tiLT5sZW4pOworCisJCWRlc2MtPmV4dHJhX21lbV9ibG9ja3MgPSBUWF9IV19CTE9DS19TUEFSRTsKKwkJZGVzYy0+dG90YWxfbWVtX2Jsb2NrcyA9IHRvdGFsX2Jsb2NrczsKKwkJZGVzYy0+aWQgPSBpZDsKKworCQl3bC0+dHhfYmxvY2tzX2F2YWlsYWJsZSAtPSB0b3RhbF9ibG9ja3M7CisKKwkJcmV0ID0gMDsKKworCQl3bDEyNzFfZGVidWcoREVCVUdfVFgsCisJCQkgICAgICJ0eF9hbGxvY2F0ZTogc2l6ZTogJWQsIGJsb2NrczogJWQsIGlkOiAlZCIsCisJCQkgICAgIHRvdGFsX2xlbiwgdG90YWxfYmxvY2tzLCBpZCk7CisJfSBlbHNlIHsKKwkJd2wxMjcxX2ZyZWVfdHhfaWQod2wsIGlkKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCB3bDEyNzFfdHhfZmlsbF9oZHIoc3RydWN0IHdsMTI3MSAqd2wsIHN0cnVjdCBza19idWZmICpza2IsCisJCQkgICAgICB1MzIgZXh0cmEsIHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqY29udHJvbCkKK3sKKwlzdHJ1Y3QgdGltZXNwZWMgdHM7CisJc3RydWN0IHdsMTI3MV90eF9od19kZXNjciAqZGVzYzsKKwlpbnQgcGFkLCBhYzsKKwlzNjQgaG9zdHRpbWU7CisJdTE2IHR4X2F0dHI7CisKKwlkZXNjID0gKHN0cnVjdCB3bDEyNzFfdHhfaHdfZGVzY3IgKikgc2tiLT5kYXRhOworCisJLyogcmVsb2NhdGUgc3BhY2UgZm9yIHNlY3VyaXR5IGhlYWRlciAqLworCWlmIChleHRyYSkgeworCQl2b2lkICpmcmFtZXN0YXJ0ID0gc2tiLT5kYXRhICsgc2l6ZW9mKCpkZXNjKTsKKwkJdTE2IGZjID0gKih1MTYgKikoZnJhbWVzdGFydCArIGV4dHJhKTsKKwkJaW50IGhkcmxlbiA9IGllZWU4MDIxMV9oZHJsZW4oY3B1X3RvX2xlMTYoZmMpKTsKKwkJbWVtbW92ZShmcmFtZXN0YXJ0LCBmcmFtZXN0YXJ0ICsgZXh0cmEsIGhkcmxlbik7CisJfQorCisJLyogY29uZmlndXJlIHBhY2tldCBsaWZlIHRpbWUgKi8KKwlnZXRuc3RpbWVvZmRheSgmdHMpOworCWhvc3R0aW1lID0gKHRpbWVzcGVjX3RvX25zKCZ0cykgPj4gMTApOworCWRlc2MtPnN0YXJ0X3RpbWUgPSBjcHVfdG9fbGUzMihob3N0dGltZSAtIHdsLT50aW1lX29mZnNldCk7CisJZGVzYy0+bGlmZV90aW1lID0gY3B1X3RvX2xlMTYoVFhfSFdfTUdNVF9QS1RfTElGRVRJTUVfVFUpOworCisJLyogY29uZmlndXJlIHRoZSB0eCBhdHRyaWJ1dGVzICovCisJdHhfYXR0ciA9IHdsLT5zZXNzaW9uX2NvdW50ZXIgPDwgVFhfSFdfQVRUUl9PRlNUX1NFU1NJT05fQ09VTlRFUjsKKworCS8qIHF1ZXVlICh3ZSB1c2Ugc2FtZSBpZGVudGlmaWVycyBmb3IgdGlkJ3MgYW5kIGFjJ3MgKi8KKwlhYyA9IHdsMTI3MV90eF9nZXRfcXVldWUoc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpOworCWRlc2MtPnRpZCA9IGFjOworCWRlc2MtPmFpZCA9IFRYX0hXX0RFRkFVTFRfQUlEOworCWRlc2MtPnJlc2VydmVkID0gMDsKKworCS8qIGFsaWduIHRoZSBsZW5ndGggKGFuZCBzdG9yZSBpbiB0ZXJtcyBvZiB3b3JkcykgKi8KKwlwYWQgPSBXTDEyNzFfVFhfQUxJR04oc2tiLT5sZW4pOworCWRlc2MtPmxlbmd0aCA9IGNwdV90b19sZTE2KHBhZCA+PiAyKTsKKworCS8qIGNhbGN1bGF0ZSBudW1iZXIgb2YgcGFkZGluZyBieXRlcyAqLworCXBhZCA9IHBhZCAtIHNrYi0+bGVuOworCXR4X2F0dHIgfD0gcGFkIDw8IFRYX0hXX0FUVFJfT0ZTVF9MQVNUX1dPUkRfUEFEOworCisJLyogaWYgdGhlIHBhY2tldHMgYXJlIGRlc3RpbmVkIGZvciBBUCAoaGF2ZSBhIFNUQSBlbnRyeSkgc2VuZCB0aGVtCisJICAgd2l0aCBBUCByYXRlIHBvbGljaWVzLCBvdGhlcndpc2UgdXNlIGRlZmF1bHQgYmFzaWMgcmF0ZXMgKi8KKwlpZiAoY29udHJvbC0+Y29udHJvbC5zdGEpCisJCXR4X2F0dHIgfD0gQUNYX1RYX0FQX0ZVTExfUkFURSA8PCBUWF9IV19BVFRSX09GU1RfUkFURV9QT0xJQ1k7CisKKwlkZXNjLT50eF9hdHRyID0gY3B1X3RvX2xlMTYodHhfYXR0cik7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfVFgsICJ0eF9maWxsX2hkcjogcGFkOiAlZCIsIHBhZCk7Cit9CisKKy8qIGNhbGxlciBtdXN0IGhvbGQgd2wtPm11dGV4ICovCitzdGF0aWMgaW50IHdsMTI3MV9wcmVwYXJlX3R4X2ZyYW1lKHN0cnVjdCB3bDEyNzEgKndsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkJCXUzMiBidWZfb2Zmc2V0KQoreworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbzsKKwl1MzIgZXh0cmEgPSAwOworCWludCByZXQgPSAwOworCXU4IGlkeDsKKwl1MzIgdG90YWxfbGVuOworCisJaWYgKCFza2IpCisJCXJldHVybiAtRUlOVkFMOworCisJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKworCWlmIChpbmZvLT5jb250cm9sLmh3X2tleSAmJgorCSAgICBpbmZvLT5jb250cm9sLmh3X2tleS0+Y2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX1RLSVApCisJCWV4dHJhID0gV0wxMjcxX1RLSVBfSVZfU1BBQ0U7CisKKwlpZiAoaW5mby0+Y29udHJvbC5od19rZXkpIHsKKwkJaWR4ID0gaW5mby0+Y29udHJvbC5od19rZXktPmh3X2tleV9pZHg7CisKKwkJLyogRklYTUU6IGRvIHdlIGhhdmUgdG8gZG8gdGhpcyBpZiB3ZSdyZSBub3QgdXNpbmcgV0VQPyAqLworCQlpZiAodW5saWtlbHkod2wtPmRlZmF1bHRfa2V5ICE9IGlkeCkpIHsKKwkJCXJldCA9IHdsMTI3MV9jbWRfc2V0X2RlZmF1bHRfd2VwX2tleSh3bCwgaWR4KTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCXJldHVybiByZXQ7CisJCQl3bC0+ZGVmYXVsdF9rZXkgPSBpZHg7CisJCX0KKwl9CisKKwlyZXQgPSB3bDEyNzFfdHhfYWxsb2NhdGUod2wsIHNrYiwgZXh0cmEsIGJ1Zl9vZmZzZXQpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJd2wxMjcxX3R4X2ZpbGxfaGRyKHdsLCBza2IsIGV4dHJhLCBpbmZvKTsKKworCS8qCisJICogVGhlIGxlbmd0aCBvZiBlYWNoIHBhY2tldCBpcyBzdG9yZWQgaW4gdGVybXMgb2Ygd29yZHMuIFRodXMsIHdlIG11c3QKKwkgKiBwYWQgdGhlIHNrYiBkYXRhIHRvIG1ha2Ugc3VyZSBpdHMgbGVuZ3RoIGlzIGFsaWduZWQuCisJICogVGhlIG51bWJlciBvZiBwYWRkaW5nIGJ5dGVzIGlzIGNvbXB1dGVkIGFuZCBzZXQgaW4gd2wxMjcxX3R4X2ZpbGxfaGRyCisJICovCisJdG90YWxfbGVuID0gV0wxMjcxX1RYX0FMSUdOKHNrYi0+bGVuKTsKKwltZW1jcHkod2wtPmFnZ3JfYnVmICsgYnVmX29mZnNldCwgc2tiLT5kYXRhLCBza2ItPmxlbik7CisJbWVtc2V0KHdsLT5hZ2dyX2J1ZiArIGJ1Zl9vZmZzZXQgKyBza2ItPmxlbiwgMCwgdG90YWxfbGVuIC0gc2tiLT5sZW4pOworCisJcmV0dXJuIHRvdGFsX2xlbjsKK30KKwordTMyIHdsMTI3MV90eF9lbmFibGVkX3JhdGVzX2dldChzdHJ1Y3Qgd2wxMjcxICp3bCwgdTMyIHJhdGVfc2V0KQoreworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKmJhbmQ7CisJdTMyIGVuYWJsZWRfcmF0ZXMgPSAwOworCWludCBiaXQ7CisKKwliYW5kID0gd2wtPmh3LT53aXBoeS0+YmFuZHNbd2wtPmJhbmRdOworCWZvciAoYml0ID0gMDsgYml0IDwgYmFuZC0+bl9iaXRyYXRlczsgYml0KyspIHsKKwkJaWYgKHJhdGVfc2V0ICYgMHgxKQorCQkJZW5hYmxlZF9yYXRlcyB8PSBiYW5kLT5iaXRyYXRlc1tiaXRdLmh3X3ZhbHVlOworCQlyYXRlX3NldCA+Pj0gMTsKKwl9CisKKyNpZmRlZiBDT05GSUdfV0wxMlhYX0hUCisJLyogTUNTIHJhdGVzIGluZGljYXRpb24gYXJlIG9uIGJpdHMgMTYgLSAyMyAqLworCXJhdGVfc2V0ID4+PSBIV19IVF9SQVRFU19PRkZTRVQgLSBiYW5kLT5uX2JpdHJhdGVzOworCisJZm9yIChiaXQgPSAwOyBiaXQgPCA4OyBiaXQrKykgeworCQlpZiAocmF0ZV9zZXQgJiAweDEpCisJCQllbmFibGVkX3JhdGVzIHw9IChDT05GX0hXX0JJVF9SQVRFX01DU18wIDw8IGJpdCk7CisJCXJhdGVfc2V0ID4+PSAxOworCX0KKyNlbmRpZgorCisJcmV0dXJuIGVuYWJsZWRfcmF0ZXM7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV90eF9sb3dfd2F0ZXJtYXJrKHN0cnVjdCB3bDEyNzEgKndsKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAodGVzdF9iaXQoV0wxMjcxX0ZMQUdfVFhfUVVFVUVfU1RPUFBFRCwgJndsLT5mbGFncykgJiYKKwkgICAgd2wtPnR4X3F1ZXVlX2NvdW50IDw9IFdMMTI3MV9UWF9RVUVVRV9MT1dfV0FURVJNQVJLKSB7CisJCS8qIGZpcm13YXJlIGJ1ZmZlciBoYXMgc3BhY2UsIHJlc3RhcnQgcXVldWVzICovCisJCXNwaW5fbG9ja19pcnFzYXZlKCZ3bC0+d2xfbG9jaywgZmxhZ3MpOworCQlpZWVlODAyMTFfd2FrZV9xdWV1ZXMod2wtPmh3KTsKKwkJY2xlYXJfYml0KFdMMTI3MV9GTEFHX1RYX1FVRVVFX1NUT1BQRUQsICZ3bC0+ZmxhZ3MpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3bC0+d2xfbG9jaywgZmxhZ3MpOworCX0KK30KKworc3RhdGljIHN0cnVjdCBza19idWZmICp3bDEyNzFfc2tiX2RlcXVldWUoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNrYiA9IHNrYl9kZXF1ZXVlKCZ3bC0+dHhfcXVldWVbQ09ORl9UWF9BQ19WT10pOworCWlmIChza2IpCisJCWdvdG8gb3V0OworCXNrYiA9IHNrYl9kZXF1ZXVlKCZ3bC0+dHhfcXVldWVbQ09ORl9UWF9BQ19WSV0pOworCWlmIChza2IpCisJCWdvdG8gb3V0OworCXNrYiA9IHNrYl9kZXF1ZXVlKCZ3bC0+dHhfcXVldWVbQ09ORl9UWF9BQ19CRV0pOworCWlmIChza2IpCisJCWdvdG8gb3V0OworCXNrYiA9IHNrYl9kZXF1ZXVlKCZ3bC0+dHhfcXVldWVbQ09ORl9UWF9BQ19CS10pOworCitvdXQ6CisJaWYgKHNrYikgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmd2wtPndsX2xvY2ssIGZsYWdzKTsKKwkJd2wtPnR4X3F1ZXVlX2NvdW50LS07CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndsLT53bF9sb2NrLCBmbGFncyk7CisJfQorCisJcmV0dXJuIHNrYjsKK30KKworc3RhdGljIHZvaWQgd2wxMjcxX3NrYl9xdWV1ZV9oZWFkKHN0cnVjdCB3bDEyNzEgKndsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHEgPSB3bDEyNzFfdHhfZ2V0X3F1ZXVlKHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpKTsKKworCXNrYl9xdWV1ZV9oZWFkKCZ3bC0+dHhfcXVldWVbcV0sIHNrYik7CisJc3Bpbl9sb2NrX2lycXNhdmUoJndsLT53bF9sb2NrLCBmbGFncyk7CisJd2wtPnR4X3F1ZXVlX2NvdW50Kys7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2wtPndsX2xvY2ssIGZsYWdzKTsKK30KKwordm9pZCB3bDEyNzFfdHhfd29ya19sb2NrZWQoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlib29sIHdva2VuX3VwID0gZmFsc2U7CisJdTMyIHN0YV9yYXRlcyA9IDA7CisJdTMyIGJ1Zl9vZmZzZXQgPSAwOworCWJvb2wgc2VudF9wYWNrZXRzID0gZmFsc2U7CisJaW50IHJldDsKKworCS8qIGNoZWNrIGlmIHRoZSByYXRlcyBzdXBwb3J0ZWQgYnkgdGhlIEFQIGhhdmUgY2hhbmdlZCAqLworCWlmICh1bmxpa2VseSh0ZXN0X2FuZF9jbGVhcl9iaXQoV0wxMjcxX0ZMQUdfU1RBX1JBVEVTX0NIQU5HRUQsCisJCQkJCSZ3bC0+ZmxhZ3MpKSkgeworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZ3bC0+d2xfbG9jaywgZmxhZ3MpOworCQlzdGFfcmF0ZXMgPSB3bC0+c3RhX3JhdGVfc2V0OworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3bC0+d2xfbG9jaywgZmxhZ3MpOworCX0KKworCWlmICh1bmxpa2VseSh3bC0+c3RhdGUgPT0gV0wxMjcxX1NUQVRFX09GRikpCisJCWdvdG8gb3V0OworCisJLyogaWYgcmF0ZXMgaGF2ZSBjaGFuZ2VkLCByZS1jb25maWd1cmUgdGhlIHJhdGUgcG9saWN5ICovCisJaWYgKHVubGlrZWx5KHN0YV9yYXRlcykpIHsKKwkJcmV0ID0gd2wxMjcxX3BzX2VscF93YWtldXAod2wsIGZhbHNlKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIG91dDsKKwkJd29rZW5fdXAgPSB0cnVlOworCisJCXdsLT5yYXRlX3NldCA9IHdsMTI3MV90eF9lbmFibGVkX3JhdGVzX2dldCh3bCwgc3RhX3JhdGVzKTsKKwkJd2wxMjcxX2FjeF9yYXRlX3BvbGljaWVzKHdsKTsKKwl9CisKKwl3aGlsZSAoKHNrYiA9IHdsMTI3MV9za2JfZGVxdWV1ZSh3bCkpKSB7CisJCWlmICghd29rZW5fdXApIHsKKwkJCXJldCA9IHdsMTI3MV9wc19lbHBfd2FrZXVwKHdsLCBmYWxzZSk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlnb3RvIG91dF9hY2s7CisJCQl3b2tlbl91cCA9IHRydWU7CisJCX0KKworCQlyZXQgPSB3bDEyNzFfcHJlcGFyZV90eF9mcmFtZSh3bCwgc2tiLCBidWZfb2Zmc2V0KTsKKwkJaWYgKHJldCA9PSAtRUFHQUlOKSB7CisJCQkvKgorCQkJICogQWdncmVnYXRpb24gYnVmZmVyIGlzIGZ1bGwuCisJCQkgKiBGbHVzaCBidWZmZXIgYW5kIHRyeSBhZ2Fpbi4KKwkJCSAqLworCQkJd2wxMjcxX3NrYl9xdWV1ZV9oZWFkKHdsLCBza2IpOworCQkJd2wxMjcxX3dyaXRlKHdsLCBXTDEyNzFfU0xWX01FTV9EQVRBLCB3bC0+YWdncl9idWYsCisJCQkJICAgICBidWZfb2Zmc2V0LCB0cnVlKTsKKwkJCXNlbnRfcGFja2V0cyA9IHRydWU7CisJCQlidWZfb2Zmc2V0ID0gMDsKKwkJCWNvbnRpbnVlOworCQl9IGVsc2UgaWYgKHJldCA9PSAtRUJVU1kpIHsKKwkJCS8qCisJCQkgKiBGaXJtd2FyZSBidWZmZXIgaXMgZnVsbC4KKwkJCSAqIFF1ZXVlIGJhY2sgbGFzdCBza2IsIGFuZCBzdG9wIGFnZ3JlZ2F0aW5nLgorCQkJICovCisJCQl3bDEyNzFfc2tiX3F1ZXVlX2hlYWQod2wsIHNrYik7CisJCQkvKiBObyB3b3JrIGxlZnQsIGF2b2lkIHNjaGVkdWxpbmcgcmVkdW5kYW50IHR4IHdvcmsgKi8KKwkJCXNldF9iaXQoV0wxMjcxX0ZMQUdfRldfVFhfQlVTWSwgJndsLT5mbGFncyk7CisJCQlnb3RvIG91dF9hY2s7CisJCX0gZWxzZSBpZiAocmV0IDwgMCkgeworCQkJZGV2X2tmcmVlX3NrYihza2IpOworCQkJZ290byBvdXRfYWNrOworCQl9CisJCWJ1Zl9vZmZzZXQgKz0gcmV0OworCQl3bC0+dHhfcGFja2V0c19jb3VudCsrOworCX0KKworb3V0X2FjazoKKwlpZiAoYnVmX29mZnNldCkgeworCQl3bDEyNzFfd3JpdGUod2wsIFdMMTI3MV9TTFZfTUVNX0RBVEEsIHdsLT5hZ2dyX2J1ZiwKKwkJCQlidWZfb2Zmc2V0LCB0cnVlKTsKKwkJc2VudF9wYWNrZXRzID0gdHJ1ZTsKKwl9CisJaWYgKHNlbnRfcGFja2V0cykgeworCQkvKiBpbnRlcnJ1cHQgdGhlIGZpcm13YXJlIHdpdGggdGhlIG5ldyBwYWNrZXRzICovCisJCXdsMTI3MV93cml0ZTMyKHdsLCBXTDEyNzFfSE9TVF9XUl9BQ0NFU1MsIHdsLT50eF9wYWNrZXRzX2NvdW50KTsKKwkJaGFuZGxlX3R4X2xvd193YXRlcm1hcmsod2wpOworCX0KKworb3V0OgorCWlmICh3b2tlbl91cCkKKwkJd2wxMjcxX3BzX2VscF9zbGVlcCh3bCk7Cit9CisKK3ZvaWQgd2wxMjcxX3R4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCB3bDEyNzEgKndsID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3bDEyNzEsIHR4X3dvcmspOworCisJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKKwl3bDEyNzFfdHhfd29ya19sb2NrZWQod2wpOworCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKK30KKworc3RhdGljIHZvaWQgd2wxMjcxX3R4X2NvbXBsZXRlX3BhY2tldChzdHJ1Y3Qgd2wxMjcxICp3bCwKKwkJCQkgICAgICBzdHJ1Y3Qgd2wxMjcxX3R4X2h3X3Jlc19kZXNjciAqcmVzdWx0KQoreworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbzsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCWludCBpZCA9IHJlc3VsdC0+aWQ7CisJaW50IHJhdGUgPSAtMTsKKwl1OCByZXRyaWVzID0gMDsKKworCS8qIGNoZWNrIGZvciBpZCBsZWdhbGl0eSAqLworCWlmICh1bmxpa2VseShpZCA+PSBBQ1hfVFhfREVTQ1JJUFRPUlMgfHwgd2wtPnR4X2ZyYW1lc1tpZF0gPT0gTlVMTCkpIHsKKwkJd2wxMjcxX3dhcm5pbmcoIlRYIHJlc3VsdCBpbGxlZ2FsIGlkOiAlZCIsIGlkKTsKKwkJcmV0dXJuOworCX0KKworCXNrYiA9IHdsLT50eF9mcmFtZXNbaWRdOworCWluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisKKwkvKiB1cGRhdGUgdGhlIFRYIHN0YXR1cyBpbmZvICovCisJaWYgKHJlc3VsdC0+c3RhdHVzID09IFRYX1NVQ0NFU1MpIHsKKwkJaWYgKCEoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSykpCisJCQlpbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9BQ0s7CisJCXJhdGUgPSB3bDEyNzFfcmF0ZV90b19pZHgocmVzdWx0LT5yYXRlX2NsYXNzX2luZGV4LCB3bC0+YmFuZCk7CisJCXJldHJpZXMgPSByZXN1bHQtPmFja19mYWlsdXJlczsKKwl9IGVsc2UgaWYgKHJlc3VsdC0+c3RhdHVzID09IFRYX1JFVFJZX0VYQ0VFREVEKSB7CisJCXdsLT5zdGF0cy5leGNlc3NpdmVfcmV0cmllcysrOworCQlyZXRyaWVzID0gcmVzdWx0LT5hY2tfZmFpbHVyZXM7CisJfQorCisJaW5mby0+c3RhdHVzLnJhdGVzWzBdLmlkeCA9IHJhdGU7CisJaW5mby0+c3RhdHVzLnJhdGVzWzBdLmNvdW50ID0gcmV0cmllczsKKwlpbmZvLT5zdGF0dXMucmF0ZXNbMF0uZmxhZ3MgPSAwOworCWluZm8tPnN0YXR1cy5hY2tfc2lnbmFsID0gLTE7CisKKwl3bC0+c3RhdHMucmV0cnlfY291bnQgKz0gcmVzdWx0LT5hY2tfZmFpbHVyZXM7CisKKwkvKiB1cGRhdGUgc2VjdXJpdHkgc2VxdWVuY2UgbnVtYmVyICovCisJd2wtPnR4X3NlY3VyaXR5X3NlcSArPSAocmVzdWx0LT5sc2Jfc2VjdXJpdHlfc2VxdWVuY2VfbnVtYmVyIC0KKwkJCQl3bC0+dHhfc2VjdXJpdHlfbGFzdF9zZXEpOworCXdsLT50eF9zZWN1cml0eV9sYXN0X3NlcSA9IHJlc3VsdC0+bHNiX3NlY3VyaXR5X3NlcXVlbmNlX251bWJlcjsKKworCS8qIHJlbW92ZSBwcml2YXRlIGhlYWRlciBmcm9tIHBhY2tldCAqLworCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCB3bDEyNzFfdHhfaHdfZGVzY3IpKTsKKworCS8qIHJlbW92ZSBUS0lQIGhlYWRlciBzcGFjZSBpZiBwcmVzZW50ICovCisJaWYgKGluZm8tPmNvbnRyb2wuaHdfa2V5ICYmCisJICAgIGluZm8tPmNvbnRyb2wuaHdfa2V5LT5jaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfVEtJUCkgeworCQlpbnQgaGRybGVuID0gaWVlZTgwMjExX2dldF9oZHJsZW5fZnJvbV9za2Ioc2tiKTsKKwkJbWVtbW92ZShza2ItPmRhdGEgKyBXTDEyNzFfVEtJUF9JVl9TUEFDRSwgc2tiLT5kYXRhLCBoZHJsZW4pOworCQlza2JfcHVsbChza2IsIFdMMTI3MV9US0lQX0lWX1NQQUNFKTsKKwl9CisKKwl3bDEyNzFfZGVidWcoREVCVUdfVFgsICJ0eCBzdGF0dXMgaWQgJXUgc2tiIDB4JXAgZmFpbHVyZXMgJXUgcmF0ZSAweCV4IgorCQkgICAgICIgc3RhdHVzIDB4JXgiLAorCQkgICAgIHJlc3VsdC0+aWQsIHNrYiwgcmVzdWx0LT5hY2tfZmFpbHVyZXMsCisJCSAgICAgcmVzdWx0LT5yYXRlX2NsYXNzX2luZGV4LCByZXN1bHQtPnN0YXR1cyk7CisKKwkvKiByZXR1cm4gdGhlIHBhY2tldCB0byB0aGUgc3RhY2sgKi8KKwlpZWVlODAyMTFfdHhfc3RhdHVzKHdsLT5odywgc2tiKTsKKwl3bDEyNzFfZnJlZV90eF9pZCh3bCwgcmVzdWx0LT5pZCk7Cit9CisKKy8qIENhbGxlZCB1cG9uIHJlY2VwdGlvbiBvZiBhIFRYIGNvbXBsZXRlIGludGVycnVwdCAqLwordm9pZCB3bDEyNzFfdHhfY29tcGxldGUoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJc3RydWN0IHdsMTI3MV9hY3hfbWVtX21hcCAqbWVtbWFwID0KKwkJKHN0cnVjdCB3bDEyNzFfYWN4X21lbV9tYXAgKil3bC0+dGFyZ2V0X21lbV9tYXA7CisJdTMyIGNvdW50LCBmd19jb3VudGVyOworCXUzMiBpOworCisJLyogcmVhZCB0aGUgdHggcmVzdWx0cyBmcm9tIHRoZSBjaGlwc2V0ICovCisJd2wxMjcxX3JlYWQod2wsIGxlMzJfdG9fY3B1KG1lbW1hcC0+dHhfcmVzdWx0KSwKKwkJICAgIHdsLT50eF9yZXNfaWYsIHNpemVvZigqd2wtPnR4X3Jlc19pZiksIGZhbHNlKTsKKwlmd19jb3VudGVyID0gbGUzMl90b19jcHUod2wtPnR4X3Jlc19pZi0+dHhfcmVzdWx0X2Z3X2NvdW50ZXIpOworCisJLyogd3JpdGUgaG9zdCBjb3VudGVyIHRvIGNoaXBzZXQgKHRvIGFjaykgKi8KKwl3bDEyNzFfd3JpdGUzMih3bCwgbGUzMl90b19jcHUobWVtbWFwLT50eF9yZXN1bHQpICsKKwkJICAgICAgIG9mZnNldG9mKHN0cnVjdCB3bDEyNzFfdHhfaHdfcmVzX2lmLAorCQkJCXR4X3Jlc3VsdF9ob3N0X2NvdW50ZXIpLCBmd19jb3VudGVyKTsKKworCWNvdW50ID0gZndfY291bnRlciAtIHdsLT50eF9yZXN1bHRzX2NvdW50OworCXdsMTI3MV9kZWJ1ZyhERUJVR19UWCwgInR4X2NvbXBsZXRlIHJlY2VpdmVkLCBwYWNrZXRzOiAlZCIsIGNvdW50KTsKKworCS8qIHZlcmlmeSB0aGF0IHRoZSByZXN1bHQgYnVmZmVyIGlzIG5vdCBnZXR0aW5nIG92ZXJydW4gKi8KKwlpZiAodW5saWtlbHkoY291bnQgPiBUWF9IV19SRVNVTFRfUVVFVUVfTEVOKSkKKwkJd2wxMjcxX3dhcm5pbmcoIlRYIHJlc3VsdCBvdmVyZmxvdyBmcm9tIGNoaXBzZXQ6ICVkIiwgY291bnQpOworCisJLyogcHJvY2VzcyB0aGUgcmVzdWx0cyAqLworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCXN0cnVjdCB3bDEyNzFfdHhfaHdfcmVzX2Rlc2NyICpyZXN1bHQ7CisJCXU4IG9mZnNldCA9IHdsLT50eF9yZXN1bHRzX2NvdW50ICYgVFhfSFdfUkVTVUxUX1FVRVVFX0xFTl9NQVNLOworCisJCS8qIHByb2Nlc3MgdGhlIHBhY2tldCAqLworCQlyZXN1bHQgPSAgJih3bC0+dHhfcmVzX2lmLT50eF9yZXN1bHRzX3F1ZXVlW29mZnNldF0pOworCQl3bDEyNzFfdHhfY29tcGxldGVfcGFja2V0KHdsLCByZXN1bHQpOworCisJCXdsLT50eF9yZXN1bHRzX2NvdW50Kys7CisJfQorfQorCisvKiBjYWxsZXIgbXVzdCBob2xkIHdsLT5tdXRleCAqLwordm9pZCB3bDEyNzFfdHhfcmVzZXQoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJaW50IGk7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCS8qIFRYIGZhaWx1cmUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTlVNX1RYX1FVRVVFUzsgaSsrKSB7CisJCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJndsLT50eF9xdWV1ZVtpXSkpKSB7CisJCQl3bDEyNzFfZGVidWcoREVCVUdfVFgsICJmcmVlaW5nIHNrYiAweCVwIiwgc2tiKTsKKwkJCWllZWU4MDIxMV90eF9zdGF0dXMod2wtPmh3LCBza2IpOworCQl9CisJfQorCXdsLT50eF9xdWV1ZV9jb3VudCA9IDA7CisKKwkvKgorCSAqIE1ha2Ugc3VyZSB0aGUgZHJpdmVyIGlzIGF0IGEgY29uc2lzdGVudCBzdGF0ZSwgaW4gY2FzZSB0aGlzCisJICogZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gYSBjb250ZXh0IG90aGVyIHRoYW4gaW50ZXJmYWNlIHJlbW92YWwuCisJICovCisJaGFuZGxlX3R4X2xvd193YXRlcm1hcmsod2wpOworCisJZm9yIChpID0gMDsgaSA8IEFDWF9UWF9ERVNDUklQVE9SUzsgaSsrKQorCQlpZiAod2wtPnR4X2ZyYW1lc1tpXSAhPSBOVUxMKSB7CisJCQlza2IgPSB3bC0+dHhfZnJhbWVzW2ldOworCQkJd2wxMjcxX2ZyZWVfdHhfaWQod2wsIGkpOworCQkJd2wxMjcxX2RlYnVnKERFQlVHX1RYLCAiZnJlZWluZyBza2IgMHglcCIsIHNrYik7CisJCQlpZWVlODAyMTFfdHhfc3RhdHVzKHdsLT5odywgc2tiKTsKKwkJfQorfQorCisjZGVmaW5lIFdMMTI3MV9UWF9GTFVTSF9USU1FT1VUIDUwMDAwMAorCisvKiBjYWxsZXIgbXVzdCAqTk9UKiBob2xkIHdsLT5tdXRleCAqLwordm9pZCB3bDEyNzFfdHhfZmx1c2goc3RydWN0IHdsMTI3MSAqd2wpCit7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OworCXRpbWVvdXQgPSBqaWZmaWVzICsgdXNlY3NfdG9famlmZmllcyhXTDEyNzFfVFhfRkxVU0hfVElNRU9VVCk7CisKKwl3aGlsZSAoIXRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHsKKwkJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKKwkJd2wxMjcxX2RlYnVnKERFQlVHX1RYLCAiZmx1c2hpbmcgdHggYnVmZmVyOiAlZCIsCisJCQkgICAgIHdsLT50eF9mcmFtZXNfY250KTsKKwkJaWYgKCh3bC0+dHhfZnJhbWVzX2NudCA9PSAwKSAmJiAod2wtPnR4X3F1ZXVlX2NvdW50ID09IDApKSB7CisJCQltdXRleF91bmxvY2soJndsLT5tdXRleCk7CisJCQlyZXR1cm47CisJCX0KKwkJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOworCQltc2xlZXAoMSk7CisJfQorCisJd2wxMjcxX3dhcm5pbmcoIlVuYWJsZSB0byBmbHVzaCBhbGwgVFggYnVmZmVycywgdGltZWQgb3V0LiIpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3R4LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvdHguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDNlNWRjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3R4LmgKQEAgLTAsMCArMSwxNTAgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3bDEyNzEKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwOSBUZXhhcyBJbnN0cnVtZW50cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIENvbnRhY3Q6IEx1Y2lhbm8gQ29lbGhvIDxsdWNpYW5vLmNvZWxob0Bub2tpYS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQQorICoKKyAqLworCisjaWZuZGVmIF9fVFhfSF9fCisjZGVmaW5lIF9fVFhfSF9fCisKKyNkZWZpbmUgVFhfSFdfQkxPQ0tfU1BBUkUgICAgICAgICAgICAgICAgMgorI2RlZmluZSBUWF9IV19CTE9DS19TSVpFICAgICAgICAgICAgICAgICAyNTIKKworI2RlZmluZSBUWF9IV19NR01UX1BLVF9MSUZFVElNRV9UVSAgICAgICAyMDAwCisvKiBUaGUgY2hpcHNldCByZWZlcmVuY2UgZHJpdmVyIHN0YXRlcywgdGhhdCB0aGUgImFpZCIgdmFsdWUgMQorICogaXMgZm9yIGluZnJhLUJTUywgYnV0IGlzIHN0aWxsIGFsd2F5cyB1c2VkICovCisjZGVmaW5lIFRYX0hXX0RFRkFVTFRfQUlEICAgICAgICAgICAgICAgIDEKKworI2RlZmluZSBUWF9IV19BVFRSX1NBVkVfUkVUUklFUyAgICAgICAgICBCSVQoMCkKKyNkZWZpbmUgVFhfSFdfQVRUUl9IRUFERVJfUEFEICAgICAgICAgICAgQklUKDEpCisjZGVmaW5lIFRYX0hXX0FUVFJfU0VTU0lPTl9DT1VOVEVSICAgICAgIChCSVQoMikgfCBCSVQoMykgfCBCSVQoNCkpCisjZGVmaW5lIFRYX0hXX0FUVFJfUkFURV9QT0xJQ1kgICAgICAgICAgIChCSVQoNSkgfCBCSVQoNikgfCBCSVQoNykgfCBcCisJCQkJCSAgQklUKDgpIHwgQklUKDkpKQorI2RlZmluZSBUWF9IV19BVFRSX0xBU1RfV09SRF9QQUQgICAgICAgICAoQklUKDEwKSB8IEJJVCgxMSkpCisjZGVmaW5lIFRYX0hXX0FUVFJfVFhfQ01QTFRfUkVRICAgICAgICAgIEJJVCgxMikKKworI2RlZmluZSBUWF9IV19BVFRSX09GU1RfU0FWRV9SRVRSSUVTICAgICAwCisjZGVmaW5lIFRYX0hXX0FUVFJfT0ZTVF9IRUFERVJfUEFEICAgICAgIDEKKyNkZWZpbmUgVFhfSFdfQVRUUl9PRlNUX1NFU1NJT05fQ09VTlRFUiAgMgorI2RlZmluZSBUWF9IV19BVFRSX09GU1RfUkFURV9QT0xJQ1kgICAgICA1CisjZGVmaW5lIFRYX0hXX0FUVFJfT0ZTVF9MQVNUX1dPUkRfUEFEICAgIDEwCisjZGVmaW5lIFRYX0hXX0FUVFJfT0ZTVF9UWF9DTVBMVF9SRVEgICAgIDEyCisKKyNkZWZpbmUgVFhfSFdfUkVTVUxUX1FVRVVFX0xFTiAgICAgICAgICAgMTYKKyNkZWZpbmUgVFhfSFdfUkVTVUxUX1FVRVVFX0xFTl9NQVNLICAgICAgMHhmCisKKyNkZWZpbmUgV0wxMjcxX1RYX0FMSUdOX1RPIDQKKyNkZWZpbmUgV0wxMjcxX1RYX0FMSUdOKGxlbikgKCgobGVuKSArIFdMMTI3MV9UWF9BTElHTl9UTyAtIDEpICYgXAorCQkJICAgICB+KFdMMTI3MV9UWF9BTElHTl9UTyAtIDEpKQorI2RlZmluZSBXTDEyNzFfVEtJUF9JVl9TUEFDRSA0CisKK3N0cnVjdCB3bDEyNzFfdHhfaHdfZGVzY3IgeworCS8qIExlbmd0aCBvZiBwYWNrZXQgaW4gd29yZHMsIGluY2x1ZGluZyBkZXNjcmlwdG9yK2hlYWRlcitkYXRhICovCisJX19sZTE2IGxlbmd0aDsKKwkvKiBOdW1iZXIgb2YgZXh0cmEgbWVtb3J5IGJsb2NrcyB0byBhbGxvY2F0ZSBmb3IgdGhpcyBwYWNrZXQgaW4KKwkgICBhZGRpdGlvbiB0byB0aGUgbnVtYmVyIG9mIGJsb2NrcyBkZXJpdmVkIGZyb20gdGhlIHBhY2tldCBsZW5ndGggKi8KKwl1OCBleHRyYV9tZW1fYmxvY2tzOworCS8qIFRvdGFsIG51bWJlciBvZiBtZW1vcnkgYmxvY2tzIGFsbG9jYXRlZCBieSB0aGUgaG9zdCBmb3IgdGhpcyBwYWNrZXQuCisJICAgTXVzdCBiZSBlcXVhbCBvciBncmVhdGVyIHRoYW4gdGhlIGFjdHVhbCBibG9ja3MgbnVtYmVyIGFsbG9jYXRlZCBieQorCSAgIEhXISEgKi8KKwl1OCB0b3RhbF9tZW1fYmxvY2tzOworCS8qIERldmljZSB0aW1lIChpbiB1cykgd2hlbiB0aGUgcGFja2V0IGFycml2ZWQgdG8gdGhlIGRyaXZlciAqLworCV9fbGUzMiBzdGFydF90aW1lOworCS8qIE1heCBkZWxheSBpbiBUVXMgdW50aWwgdHJhbnNtaXNzaW9uLiBUaGUgbGFzdCBkZXZpY2UgdGltZSB0aGUKKwkgICBwYWNrZXQgY2FuIGJlIHRyYW5zbWl0dGVkIGlzOiBzdGFydFRpbWUrKDEwMjQqTGlmZVRpbWUpICovCisJX19sZTE2IGxpZmVfdGltZTsKKwkvKiBCaXR3aXNlIGZpZWxkcyAtIHNlZSBUWF9BVFRSLi4uIGRlZmluaXRpb25zIGFib3ZlLiAqLworCV9fbGUxNiB0eF9hdHRyOworCS8qIFBhY2tldCBpZGVudGlmaWVyIHVzZWQgYWxzbyBpbiB0aGUgVHgtUmVzdWx0LiAqLworCXU4IGlkOworCS8qIFRoZSBwYWNrZXQgVElEIHZhbHVlIChhcyBVc2VyLVByaW9yaXR5KSAqLworCXU4IHRpZDsKKwkvKiBJZGVudGlmaWVyIG9mIHRoZSByZW1vdGUgU1RBIGluIElCU1MsIDEgaW4gaW5mcmEtQlNTICovCisJdTggYWlkOworCXU4IHJlc2VydmVkOworfSBfX3BhY2tlZDsKKworZW51bSB3bDEyNzFfdHhfaHdfcmVzX3N0YXR1cyB7CisJVFhfU1VDQ0VTUyAgICAgICAgICA9IDAsCisJVFhfSFdfRVJST1IgICAgICAgICA9IDEsCisJVFhfRElTQUJMRUQgICAgICAgICA9IDIsCisJVFhfUkVUUllfRVhDRUVERUQgICA9IDMsCisJVFhfVElNRU9VVCAgICAgICAgICA9IDQsCisJVFhfS0VZX05PVF9GT1VORCAgICA9IDUsCisJVFhfUEVFUl9OT1RfRk9VTkQgICA9IDYsCisJVFhfU0VTU0lPTl9NSVNNQVRDSCA9IDcKK307CisKK3N0cnVjdCB3bDEyNzFfdHhfaHdfcmVzX2Rlc2NyIHsKKwkvKiBQYWNrZXQgSWRlbnRpZmllciAtIHNhbWUgdmFsdWUgdXNlZCBpbiB0aGUgVHggZGVzY3JpcHRvci4qLworCXU4IGlkOworCS8qIFRoZSBzdGF0dXMgb2YgdGhlIHRyYW5zbWlzc2lvbiwgaW5kaWNhdGluZyBzdWNjZXNzIG9yIG9uZSBvZgorCSAgIHNldmVyYWwgcG9zc2libGUgcmVhc29ucyBmb3IgZmFpbHVyZS4gKi8KKwl1OCBzdGF0dXM7CisJLyogVG90YWwgYWlyIGFjY2VzcyBkdXJhdGlvbiBpbmNsdWRpbmcgYWxsIHJldHJ5cyBhbmQgb3ZlcmhlYWRzLiovCisJX19sZTE2IG1lZGl1bV91c2FnZTsKKwkvKiBUaGUgdGltZSBwYXNzZWQgZnJvbSBob3N0IHhmZXIgdG8gVHgtY29tcGxldGUuKi8KKwlfX2xlMzIgZndfaGFuZGxpbmdfdGltZTsKKwkvKiBUb3RhbCBtZWRpYSBkZWxheQorCSAgIChmcm9tIDFzdCBFRENBIEFJRlMgY291bnRlciB1bnRpbCBUWCBDb21wbGV0ZSkuICovCisJX19sZTMyIG1lZGl1bV9kZWxheTsKKwkvKiBMUy1ieXRlIG9mIGxhc3QgVEtJUCBzZXEtbnVtIChzYXZlZCBwZXIgQUMgZm9yIHJlY292ZXJ5KS4gKi8KKwl1OCBsc2Jfc2VjdXJpdHlfc2VxdWVuY2VfbnVtYmVyOworCS8qIFJldHJ5IGNvdW50IC0gbnVtYmVyIG9mIHRyYW5zbWlzc2lvbnMgd2l0aG91dCBzdWNjZXNzZnVsIEFDSy4qLworCXU4IGFja19mYWlsdXJlczsKKwkvKiBUaGUgcmF0ZSB0aGF0IHN1Y2NlZWRlZCBnZXR0aW5nIEFDSworCSAgIChWYWxpZCBvbmx5IGlmIHN0YXR1cz1TVUNDRVNTKS4gKi8KKwl1OCByYXRlX2NsYXNzX2luZGV4OworCS8qIGZvciA0LWJ5dGUgYWxpZ25tZW50LiAqLworCXU4IHNwYXJlOworfSBfX3BhY2tlZDsKKworc3RydWN0IHdsMTI3MV90eF9od19yZXNfaWYgeworCV9fbGUzMiB0eF9yZXN1bHRfZndfY291bnRlcjsKKwlfX2xlMzIgdHhfcmVzdWx0X2hvc3RfY291bnRlcjsKKwlzdHJ1Y3Qgd2wxMjcxX3R4X2h3X3Jlc19kZXNjciB0eF9yZXN1bHRzX3F1ZXVlW1RYX0hXX1JFU1VMVF9RVUVVRV9MRU5dOworfSBfX3BhY2tlZDsKKworc3RhdGljIGlubGluZSBpbnQgd2wxMjcxX3R4X2dldF9xdWV1ZShpbnQgcXVldWUpCit7CisJc3dpdGNoIChxdWV1ZSkgeworCWNhc2UgMDoKKwkJcmV0dXJuIENPTkZfVFhfQUNfVk87CisJY2FzZSAxOgorCQlyZXR1cm4gQ09ORl9UWF9BQ19WSTsKKwljYXNlIDI6CisJCXJldHVybiBDT05GX1RYX0FDX0JFOworCWNhc2UgMzoKKwkJcmV0dXJuIENPTkZfVFhfQUNfQks7CisJZGVmYXVsdDoKKwkJcmV0dXJuIENPTkZfVFhfQUNfQkU7CisJfQorfQorCit2b2lkIHdsMTI3MV90eF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Cit2b2lkIHdsMTI3MV90eF93b3JrX2xvY2tlZChzdHJ1Y3Qgd2wxMjcxICp3bCk7Cit2b2lkIHdsMTI3MV90eF9jb21wbGV0ZShzdHJ1Y3Qgd2wxMjcxICp3bCk7Cit2b2lkIHdsMTI3MV90eF9yZXNldChzdHJ1Y3Qgd2wxMjcxICp3bCk7Cit2b2lkIHdsMTI3MV90eF9mbHVzaChzdHJ1Y3Qgd2wxMjcxICp3bCk7Cit1OCB3bDEyNzFfcmF0ZV90b19pZHgoaW50IHJhdGUsIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCk7Cit1MzIgd2wxMjcxX3R4X2VuYWJsZWRfcmF0ZXNfZ2V0KHN0cnVjdCB3bDEyNzEgKndsLCB1MzIgcmF0ZV9zZXQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzEuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGE0Y2Q3Ni4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MTIgKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdsMTI3MQotICoKLSAqIENvcHlyaWdodCAoQykgMTk5OC0yMDA5IFRleGFzIEluc3RydW1lbnRzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgTm9raWEgQ29ycG9yYXRpb24KLSAqCi0gKiBDb250YWN0OiBMdWNpYW5vIENvZWxobyA8bHVjaWFuby5jb2VsaG9Abm9raWEuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQotICogMDIxMTAtMTMwMSBVU0EKLSAqCi0gKi8KLQotI2lmbmRlZiBfX1dMMTI3MV9IX18KLSNkZWZpbmUgX19XTDEyNzFfSF9fCi0KLSNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KLSNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KLQotI2luY2x1ZGUgIndsMTI3MV9jb25mLmgiCi0jaW5jbHVkZSAid2wxMjcxX2luaS5oIgotCi0jZGVmaW5lIERSSVZFUl9OQU1FICJ3bDEyNzEiCi0jZGVmaW5lIERSSVZFUl9QUkVGSVggRFJJVkVSX05BTUUgIjogIgotCi1lbnVtIHsKLQlERUJVR19OT05FCT0gMCwKLQlERUJVR19JUlEJPSBCSVQoMCksCi0JREVCVUdfU1BJCT0gQklUKDEpLAotCURFQlVHX0JPT1QJPSBCSVQoMiksCi0JREVCVUdfTUFJTEJPWAk9IEJJVCgzKSwKLQlERUJVR19URVNUTU9ERQk9IEJJVCg0KSwKLQlERUJVR19FVkVOVAk9IEJJVCg1KSwKLQlERUJVR19UWAk9IEJJVCg2KSwKLQlERUJVR19SWAk9IEJJVCg3KSwKLQlERUJVR19TQ0FOCT0gQklUKDgpLAotCURFQlVHX0NSWVBUCT0gQklUKDkpLAotCURFQlVHX1BTTQk9IEJJVCgxMCksCi0JREVCVUdfTUFDODAyMTEJPSBCSVQoMTEpLAotCURFQlVHX0NNRAk9IEJJVCgxMiksCi0JREVCVUdfQUNYCT0gQklUKDEzKSwKLQlERUJVR19TRElPCT0gQklUKDE0KSwKLQlERUJVR19GSUxURVJTICAgPSBCSVQoMTUpLAotCURFQlVHX0FESE9DICAgICA9IEJJVCgxNiksCi0JREVCVUdfQUxMCT0gfjAsCi19OwotCi0jZGVmaW5lIERFQlVHX0xFVkVMIChERUJVR19OT05FKQotCi0jZGVmaW5lIERFQlVHX0RVTVBfTElNSVQgMTAyNAotCi0jZGVmaW5lIHdsMTI3MV9lcnJvcihmbXQsIGFyZy4uLikgXAotCXByaW50ayhLRVJOX0VSUiBEUklWRVJfUFJFRklYICJFUlJPUiAiIGZtdCAiXG4iLCAjI2FyZykKLQotI2RlZmluZSB3bDEyNzFfd2FybmluZyhmbXQsIGFyZy4uLikgXAotCXByaW50ayhLRVJOX1dBUk5JTkcgRFJJVkVSX1BSRUZJWCAiV0FSTklORyAiIGZtdCAiXG4iLCAjI2FyZykKLQotI2RlZmluZSB3bDEyNzFfbm90aWNlKGZtdCwgYXJnLi4uKSBcCi0JcHJpbnRrKEtFUk5fSU5GTyBEUklWRVJfUFJFRklYIGZtdCAiXG4iLCAjI2FyZykKLQotI2RlZmluZSB3bDEyNzFfaW5mbyhmbXQsIGFyZy4uLikgXAotCXByaW50ayhLRVJOX0RFQlVHIERSSVZFUl9QUkVGSVggZm10ICJcbiIsICMjYXJnKQotCi0jZGVmaW5lIHdsMTI3MV9kZWJ1ZyhsZXZlbCwgZm10LCBhcmcuLi4pIFwKLQlkbyB7IFwKLQkJaWYgKGxldmVsICYgREVCVUdfTEVWRUwpIFwKLQkJCXByaW50ayhLRVJOX0RFQlVHIERSSVZFUl9QUkVGSVggZm10ICJcbiIsICMjYXJnKTsgXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgd2wxMjcxX2R1bXAobGV2ZWwsIHByZWZpeCwgYnVmLCBsZW4pCVwKLQlkbyB7IFwKLQkJaWYgKGxldmVsICYgREVCVUdfTEVWRUwpIFwKLQkJCXByaW50X2hleF9kdW1wKEtFUk5fREVCVUcsIERSSVZFUl9QUkVGSVggcHJlZml4LCBcCi0JCQkJICAgICAgIERVTVBfUFJFRklYX09GRlNFVCwgMTYsIDEsCVwKLQkJCQkgICAgICAgYnVmLAkJCQlcCi0JCQkJICAgICAgIG1pbl90KHNpemVfdCwgbGVuLCBERUJVR19EVU1QX0xJTUlUKSwgXAotCQkJCSAgICAgICAwKTsJCQkJXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgd2wxMjcxX2R1bXBfYXNjaWkobGV2ZWwsIHByZWZpeCwgYnVmLCBsZW4pCVwKLQlkbyB7IFwKLQkJaWYgKGxldmVsICYgREVCVUdfTEVWRUwpIFwKLQkJCXByaW50X2hleF9kdW1wKEtFUk5fREVCVUcsIERSSVZFUl9QUkVGSVggcHJlZml4LCBcCi0JCQkJICAgICAgIERVTVBfUFJFRklYX09GRlNFVCwgMTYsIDEsCVwKLQkJCQkgICAgICAgYnVmLAkJCQlcCi0JCQkJICAgICAgIG1pbl90KHNpemVfdCwgbGVuLCBERUJVR19EVU1QX0xJTUlUKSwgXAotCQkJCSAgICAgICB0cnVlKTsJCQkJXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgV0wxMjcxX0RFRkFVTFRfUlhfQ09ORklHIChDRkdfVU5JX0ZJTFRFUl9FTiB8CVwKLQkJCQkgIENGR19CU1NJRF9GSUxURVJfRU4gfCBcCi0JCQkJICBDRkdfTUNfRklMVEVSX0VOKQotCi0jZGVmaW5lIFdMMTI3MV9ERUZBVUxUX1JYX0ZJTFRFUiAoQ0ZHX1JYX1JDVFNfQUNLIHwgQ0ZHX1JYX1BSU1BfRU4gfCAgXAotCQkJCSAgQ0ZHX1JYX01HTVRfRU4gfCBDRkdfUlhfREFUQV9FTiB8ICAgXAotCQkJCSAgQ0ZHX1JYX0NUTF9FTiB8IENGR19SWF9CQ05fRU4gfCAgICAgXAotCQkJCSAgQ0ZHX1JYX0FVVEhfRU4gfCBDRkdfUlhfQVNTT0NfRU4pCi0KLSNkZWZpbmUgV0wxMjcxX0ZXX05BTUUgIndsMTI3MS1mdy5iaW4iCi0jZGVmaW5lIFdMMTI3MV9OVlNfTkFNRSAid2wxMjcxLW52cy5iaW4iCi0KLSNkZWZpbmUgV0wxMjcxX1RYX1NFQ1VSSVRZX0xPMTYocykgKCh1MTYpKChzKSAmIDB4ZmZmZikpCi0jZGVmaW5lIFdMMTI3MV9UWF9TRUNVUklUWV9ISTMyKHMpICgodTMyKSgoKHMpID4+IDE2KSAmIDB4ZmZmZmZmZmYpKQotCi0jZGVmaW5lIFdMMTI3MV9DSVBIRVJfU1VJVEVfR0VNIDB4MDAxNDcyMDEKLQotI2RlZmluZSBXTDEyNzFfQlVTWV9XT1JEX0NOVCAxCi0jZGVmaW5lIFdMMTI3MV9CVVNZX1dPUkRfTEVOIChXTDEyNzFfQlVTWV9XT1JEX0NOVCAqIHNpemVvZih1MzIpKQotCi0jZGVmaW5lIFdMMTI3MV9FTFBfSFdfU1RBVEVfQVNMRUVQIDAKLSNkZWZpbmUgV0wxMjcxX0VMUF9IV19TVEFURV9JUlEgICAgMQotCi0jZGVmaW5lIFdMMTI3MV9ERUZBVUxUX0JFQUNPTl9JTlQgIDEwMAotI2RlZmluZSBXTDEyNzFfREVGQVVMVF9EVElNX1BFUklPRCAxCi0KLSNkZWZpbmUgQUNYX1RYX0RFU0NSSVBUT1JTICAgICAgICAgMzIKLQotI2RlZmluZSBXTDEyNzFfQUdHUl9CVUZGRVJfU0laRSAoNCAqIFBBR0VfU0laRSkKLQotZW51bSB3bDEyNzFfc3RhdGUgewotCVdMMTI3MV9TVEFURV9PRkYsCi0JV0wxMjcxX1NUQVRFX09OLAotCVdMMTI3MV9TVEFURV9QTFQsCi19OwotCi1lbnVtIHdsMTI3MV9wYXJ0aXRpb25fdHlwZSB7Ci0JUEFSVF9ET1dOLAotCVBBUlRfV09SSywKLQlQQVJUX0RSUFcsCi0KLQlQQVJUX1RBQkxFX0xFTgotfTsKLQotc3RydWN0IHdsMTI3MV9wYXJ0aXRpb24gewotCXUzMiBzaXplOwotCXUzMiBzdGFydDsKLX07Ci0KLXN0cnVjdCB3bDEyNzFfcGFydGl0aW9uX3NldCB7Ci0Jc3RydWN0IHdsMTI3MV9wYXJ0aXRpb24gbWVtOwotCXN0cnVjdCB3bDEyNzFfcGFydGl0aW9uIHJlZzsKLQlzdHJ1Y3Qgd2wxMjcxX3BhcnRpdGlvbiBtZW0yOwotCXN0cnVjdCB3bDEyNzFfcGFydGl0aW9uIG1lbTM7Ci19OwotCi1zdHJ1Y3Qgd2wxMjcxOwotCi0vKiBGSVhNRTogSSdtIG5vdCBzdXJlIGFib3V0IHRoaXMgc3RydWN0dXJlIG5hbWUgKi8KLXN0cnVjdCB3bDEyNzFfY2hpcCB7Ci0JdTMyIGlkOwotCWNoYXIgZndfdmVyWzIxXTsKLX07Ci0KLXN0cnVjdCB3bDEyNzFfc3RhdHMgewotCXN0cnVjdCBhY3hfc3RhdGlzdGljcyAqZndfc3RhdHM7Ci0JdW5zaWduZWQgbG9uZyBmd19zdGF0c191cGRhdGU7Ci0KLQl1bnNpZ25lZCBpbnQgcmV0cnlfY291bnQ7Ci0JdW5zaWduZWQgaW50IGV4Y2Vzc2l2ZV9yZXRyaWVzOwotfTsKLQotc3RydWN0IHdsMTI3MV9kZWJ1Z2ZzIHsKLQlzdHJ1Y3QgZGVudHJ5ICpyb290ZGlyOwotCXN0cnVjdCBkZW50cnkgKmZ3X3N0YXRpc3RpY3M7Ci0KLQlzdHJ1Y3QgZGVudHJ5ICp0eF9pbnRlcm5hbF9kZXNjX292ZXJmbG93OwotCi0Jc3RydWN0IGRlbnRyeSAqcnhfb3V0X29mX21lbTsKLQlzdHJ1Y3QgZGVudHJ5ICpyeF9oZHJfb3ZlcmZsb3c7Ci0Jc3RydWN0IGRlbnRyeSAqcnhfaHdfc3R1Y2s7Ci0Jc3RydWN0IGRlbnRyeSAqcnhfZHJvcHBlZDsKLQlzdHJ1Y3QgZGVudHJ5ICpyeF9mY3NfZXJyOwotCXN0cnVjdCBkZW50cnkgKnJ4X3hmcl9oaW50X3RyaWc7Ci0Jc3RydWN0IGRlbnRyeSAqcnhfcGF0aF9yZXNldDsKLQlzdHJ1Y3QgZGVudHJ5ICpyeF9yZXNldF9jb3VudGVyOwotCi0Jc3RydWN0IGRlbnRyeSAqZG1hX3J4X3JlcXVlc3RlZDsKLQlzdHJ1Y3QgZGVudHJ5ICpkbWFfcnhfZXJyb3JzOwotCXN0cnVjdCBkZW50cnkgKmRtYV90eF9yZXF1ZXN0ZWQ7Ci0Jc3RydWN0IGRlbnRyeSAqZG1hX3R4X2Vycm9yczsKLQotCXN0cnVjdCBkZW50cnkgKmlzcl9jbWRfY21wbHQ7Ci0Jc3RydWN0IGRlbnRyeSAqaXNyX2ZpcXM7Ci0Jc3RydWN0IGRlbnRyeSAqaXNyX3J4X2hlYWRlcnM7Ci0Jc3RydWN0IGRlbnRyeSAqaXNyX3J4X21lbV9vdmVyZmxvdzsKLQlzdHJ1Y3QgZGVudHJ5ICppc3JfcnhfcmR5czsKLQlzdHJ1Y3QgZGVudHJ5ICppc3JfaXJxczsKLQlzdHJ1Y3QgZGVudHJ5ICppc3JfdHhfcHJvY3M7Ci0Jc3RydWN0IGRlbnRyeSAqaXNyX2RlY3J5cHRfZG9uZTsKLQlzdHJ1Y3QgZGVudHJ5ICppc3JfZG1hMF9kb25lOwotCXN0cnVjdCBkZW50cnkgKmlzcl9kbWExX2RvbmU7Ci0Jc3RydWN0IGRlbnRyeSAqaXNyX3R4X2V4Y2hfY29tcGxldGU7Ci0Jc3RydWN0IGRlbnRyeSAqaXNyX2NvbW1hbmRzOwotCXN0cnVjdCBkZW50cnkgKmlzcl9yeF9wcm9jczsKLQlzdHJ1Y3QgZGVudHJ5ICppc3JfaHdfcG1fbW9kZV9jaGFuZ2VzOwotCXN0cnVjdCBkZW50cnkgKmlzcl9ob3N0X2Fja25vd2xlZGdlczsKLQlzdHJ1Y3QgZGVudHJ5ICppc3JfcGNpX3BtOwotCXN0cnVjdCBkZW50cnkgKmlzcl93YWtldXBzOwotCXN0cnVjdCBkZW50cnkgKmlzcl9sb3dfcnNzaTsKLQotCXN0cnVjdCBkZW50cnkgKndlcF9hZGRyX2tleV9jb3VudDsKLQlzdHJ1Y3QgZGVudHJ5ICp3ZXBfZGVmYXVsdF9rZXlfY291bnQ7Ci0JLyogc2tpcHBpbmcgd2VwLnJlc2VydmVkICovCi0Jc3RydWN0IGRlbnRyeSAqd2VwX2tleV9ub3RfZm91bmQ7Ci0Jc3RydWN0IGRlbnRyeSAqd2VwX2RlY3J5cHRfZmFpbDsKLQlzdHJ1Y3QgZGVudHJ5ICp3ZXBfcGFja2V0czsKLQlzdHJ1Y3QgZGVudHJ5ICp3ZXBfaW50ZXJydXB0OwotCi0Jc3RydWN0IGRlbnRyeSAqcHdyX3BzX2VudGVyOwotCXN0cnVjdCBkZW50cnkgKnB3cl9lbHBfZW50ZXI7Ci0Jc3RydWN0IGRlbnRyeSAqcHdyX21pc3NpbmdfYmNuczsKLQlzdHJ1Y3QgZGVudHJ5ICpwd3Jfd2FrZV9vbl9ob3N0OwotCXN0cnVjdCBkZW50cnkgKnB3cl93YWtlX29uX3RpbWVyX2V4cDsKLQlzdHJ1Y3QgZGVudHJ5ICpwd3JfdHhfd2l0aF9wczsKLQlzdHJ1Y3QgZGVudHJ5ICpwd3JfdHhfd2l0aG91dF9wczsKLQlzdHJ1Y3QgZGVudHJ5ICpwd3JfcmN2ZF9iZWFjb25zOwotCXN0cnVjdCBkZW50cnkgKnB3cl9wb3dlcl9zYXZlX29mZjsKLQlzdHJ1Y3QgZGVudHJ5ICpwd3JfZW5hYmxlX3BzOwotCXN0cnVjdCBkZW50cnkgKnB3cl9kaXNhYmxlX3BzOwotCXN0cnVjdCBkZW50cnkgKnB3cl9maXhfdHNmX3BzOwotCS8qIHNraXBwaW5nIGNvbnRfbWlzc19iY25zX3NwcmVhZCBmb3Igbm93ICovCi0Jc3RydWN0IGRlbnRyeSAqcHdyX3JjdmRfYXdha2VfYmVhY29uczsKLQotCXN0cnVjdCBkZW50cnkgKm1pY19yeF9wa3RzOwotCXN0cnVjdCBkZW50cnkgKm1pY19jYWxjX2ZhaWx1cmU7Ci0KLQlzdHJ1Y3QgZGVudHJ5ICphZXNfZW5jcnlwdF9mYWlsOwotCXN0cnVjdCBkZW50cnkgKmFlc19kZWNyeXB0X2ZhaWw7Ci0Jc3RydWN0IGRlbnRyeSAqYWVzX2VuY3J5cHRfcGFja2V0czsKLQlzdHJ1Y3QgZGVudHJ5ICphZXNfZGVjcnlwdF9wYWNrZXRzOwotCXN0cnVjdCBkZW50cnkgKmFlc19lbmNyeXB0X2ludGVycnVwdDsKLQlzdHJ1Y3QgZGVudHJ5ICphZXNfZGVjcnlwdF9pbnRlcnJ1cHQ7Ci0KLQlzdHJ1Y3QgZGVudHJ5ICpldmVudF9oZWFydF9iZWF0OwotCXN0cnVjdCBkZW50cnkgKmV2ZW50X2NhbGlicmF0aW9uOwotCXN0cnVjdCBkZW50cnkgKmV2ZW50X3J4X21pc21hdGNoOwotCXN0cnVjdCBkZW50cnkgKmV2ZW50X3J4X21lbV9lbXB0eTsKLQlzdHJ1Y3QgZGVudHJ5ICpldmVudF9yeF9wb29sOwotCXN0cnVjdCBkZW50cnkgKmV2ZW50X29vbV9sYXRlOwotCXN0cnVjdCBkZW50cnkgKmV2ZW50X3BoeV90cmFuc21pdF9lcnJvcjsKLQlzdHJ1Y3QgZGVudHJ5ICpldmVudF90eF9zdHVjazsKLQotCXN0cnVjdCBkZW50cnkgKnBzX3BzcG9sbF90aW1lb3V0czsKLQlzdHJ1Y3QgZGVudHJ5ICpwc191cHNkX3RpbWVvdXRzOwotCXN0cnVjdCBkZW50cnkgKnBzX3Vwc2RfbWF4X3NwdGltZTsKLQlzdHJ1Y3QgZGVudHJ5ICpwc191cHNkX21heF9hcHR1cm47Ci0Jc3RydWN0IGRlbnRyeSAqcHNfcHNwb2xsX21heF9hcHR1cm47Ci0Jc3RydWN0IGRlbnRyeSAqcHNfcHNwb2xsX3V0aWxpemF0aW9uOwotCXN0cnVjdCBkZW50cnkgKnBzX3Vwc2RfdXRpbGl6YXRpb247Ci0KLQlzdHJ1Y3QgZGVudHJ5ICpyeHBpcGVfcnhfcHJlcF9iZWFjb25fZHJvcDsKLQlzdHJ1Y3QgZGVudHJ5ICpyeHBpcGVfZGVzY3JfaG9zdF9pbnRfdHJpZ19yeF9kYXRhOwotCXN0cnVjdCBkZW50cnkgKnJ4cGlwZV9iZWFjb25fYnVmZmVyX3RocmVzX2hvc3RfaW50X3RyaWdfcnhfZGF0YTsKLQlzdHJ1Y3QgZGVudHJ5ICpyeHBpcGVfbWlzc2VkX2JlYWNvbl9ob3N0X2ludF90cmlnX3J4X2RhdGE7Ci0Jc3RydWN0IGRlbnRyeSAqcnhwaXBlX3R4X3hmcl9ob3N0X2ludF90cmlnX3J4X2RhdGE7Ci0KLQlzdHJ1Y3QgZGVudHJ5ICp0eF9xdWV1ZV9sZW47Ci0KLQlzdHJ1Y3QgZGVudHJ5ICpyZXRyeV9jb3VudDsKLQlzdHJ1Y3QgZGVudHJ5ICpleGNlc3NpdmVfcmV0cmllczsKLQlzdHJ1Y3QgZGVudHJ5ICpncGlvX3Bvd2VyOwotfTsKLQotI2RlZmluZSBOVU1fVFhfUVVFVUVTICAgICAgICAgICAgICA0Ci0jZGVmaW5lIE5VTV9SWF9QS1RfREVTQyAgICAgICAgICAgIDgKLQotLyogRlcgc3RhdHVzIHJlZ2lzdGVycyAqLwotc3RydWN0IHdsMTI3MV9md19zdGF0dXMgewotCV9fbGUzMiBpbnRyOwotCXU4ICBmd19yeF9jb3VudGVyOwotCXU4ICBkcnZfcnhfY291bnRlcjsKLQl1OCAgcmVzZXJ2ZWQ7Ci0JdTggIHR4X3Jlc3VsdHNfY291bnRlcjsKLQlfX2xlMzIgcnhfcGt0X2Rlc2NzW05VTV9SWF9QS1RfREVTQ107Ci0JX19sZTMyIHR4X3JlbGVhc2VkX2Jsa3NbTlVNX1RYX1FVRVVFU107Ci0JX19sZTMyIGZ3X2xvY2FsdGltZTsKLQlfX2xlMzIgcGFkZGluZ1syXTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCB3bDEyNzFfcnhfbWVtX3Bvb2xfYWRkciB7Ci0JdTMyIGFkZHI7Ci0JdTMyIGFkZHJfZXh0cmE7Ci19OwotCi1zdHJ1Y3Qgd2wxMjcxX3NjYW4gewotCXN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcTsKLQlib29sICpzY2FubmVkX2NoOwotCWJvb2wgZmFpbGVkOwotCXU4IHN0YXRlOwotCXU4IHNzaWRbSVdfRVNTSURfTUFYX1NJWkUrMV07Ci0Jc2l6ZV90IHNzaWRfbGVuOwotfTsKLQotc3RydWN0IHdsMTI3MV9pZl9vcGVyYXRpb25zIHsKLQl2b2lkICgqcmVhZCkoc3RydWN0IHdsMTI3MSAqd2wsIGludCBhZGRyLCB2b2lkICpidWYsIHNpemVfdCBsZW4sCi0JCSAgICAgYm9vbCBmaXhlZCk7Ci0Jdm9pZCAoKndyaXRlKShzdHJ1Y3Qgd2wxMjcxICp3bCwgaW50IGFkZHIsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbiwKLQkJICAgICBib29sIGZpeGVkKTsKLQl2b2lkICgqcmVzZXQpKHN0cnVjdCB3bDEyNzEgKndsKTsKLQl2b2lkICgqaW5pdCkoc3RydWN0IHdsMTI3MSAqd2wpOwotCWludCAoKnBvd2VyKShzdHJ1Y3Qgd2wxMjcxICp3bCwgYm9vbCBlbmFibGUpOwotCXN0cnVjdCBkZXZpY2UqICgqZGV2KShzdHJ1Y3Qgd2wxMjcxICp3bCk7Ci0Jdm9pZCAoKmVuYWJsZV9pcnEpKHN0cnVjdCB3bDEyNzEgKndsKTsKLQl2b2lkICgqZGlzYWJsZV9pcnEpKHN0cnVjdCB3bDEyNzEgKndsKTsKLX07Ci0KLXN0cnVjdCB3bDEyNzEgewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRfZGV2OwotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OwotCWJvb2wgbWFjODAyMTFfcmVnaXN0ZXJlZDsKLQotCXZvaWQgKmlmX3ByaXY7Ci0KLQlzdHJ1Y3Qgd2wxMjcxX2lmX29wZXJhdGlvbnMgKmlmX29wczsKLQotCXZvaWQgKCpzZXRfcG93ZXIpKGJvb2wgZW5hYmxlKTsKLQlpbnQgaXJxOwotCWludCByZWZfY2xvY2s7Ci0KLQlzcGlubG9ja190IHdsX2xvY2s7Ci0KLQllbnVtIHdsMTI3MV9zdGF0ZSBzdGF0ZTsKLQlzdHJ1Y3QgbXV0ZXggbXV0ZXg7Ci0KLSNkZWZpbmUgV0wxMjcxX0ZMQUdfU1RBX1JBVEVTX0NIQU5HRUQgICgwKQotI2RlZmluZSBXTDEyNzFfRkxBR19TVEFfQVNTT0NJQVRFRCAgICAgKDEpCi0jZGVmaW5lIFdMMTI3MV9GTEFHX0pPSU5FRCAgICAgICAgICAgICAoMikKLSNkZWZpbmUgV0wxMjcxX0ZMQUdfR1BJT19QT1dFUiAgICAgICAgICgzKQotI2RlZmluZSBXTDEyNzFfRkxBR19UWF9RVUVVRV9TVE9QUEVEICAgKDQpCi0jZGVmaW5lIFdMMTI3MV9GTEFHX0lOX0VMUCAgICAgICAgICAgICAoNSkKLSNkZWZpbmUgV0wxMjcxX0ZMQUdfUFNNICAgICAgICAgICAgICAgICg2KQotI2RlZmluZSBXTDEyNzFfRkxBR19QU01fUkVRVUVTVEVEICAgICAgKDcpCi0jZGVmaW5lIFdMMTI3MV9GTEFHX0lSUV9QRU5ESU5HICAgICAgICAoOCkKLSNkZWZpbmUgV0wxMjcxX0ZMQUdfSVJRX1JVTk5JTkcgICAgICAgICg5KQotI2RlZmluZSBXTDEyNzFfRkxBR19JRExFICAgICAgICAgICAgICAoMTApCi0jZGVmaW5lIFdMMTI3MV9GTEFHX0lETEVfUkVRVUVTVEVEICAgICgxMSkKLSNkZWZpbmUgV0wxMjcxX0ZMQUdfUFNQT0xMX0ZBSUxVUkUgICAgKDEyKQotI2RlZmluZSBXTDEyNzFfRkxBR19TVEFfU1RBVEVfU0VOVCAgICAoMTMpCi0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXN0cnVjdCB3bDEyNzFfcGFydGl0aW9uX3NldCBwYXJ0OwotCi0Jc3RydWN0IHdsMTI3MV9jaGlwIGNoaXA7Ci0KLQlpbnQgY21kX2JveF9hZGRyOwotCWludCBldmVudF9ib3hfYWRkcjsKLQotCXU4ICpmdzsKLQlzaXplX3QgZndfbGVuOwotCXN0cnVjdCB3bDEyNzFfbnZzX2ZpbGUgKm52czsKLQlzaXplX3QgbnZzX2xlbjsKLQotCXM4IGh3X3BnX3ZlcjsKLQotCXU4IGJzc2lkW0VUSF9BTEVOXTsKLQl1OCBtYWNfYWRkcltFVEhfQUxFTl07Ci0JdTggYnNzX3R5cGU7Ci0JdTggc2V0X2Jzc190eXBlOwotCXU4IHNzaWRbSVdfRVNTSURfTUFYX1NJWkUgKyAxXTsKLQl1OCBzc2lkX2xlbjsKLQlpbnQgY2hhbm5lbDsKLQotCXN0cnVjdCB3bDEyNzFfYWN4X21lbV9tYXAgKnRhcmdldF9tZW1fbWFwOwotCi0JLyogQWNjb3VudGluZyBmb3IgYWxsb2NhdGVkIC8gYXZhaWxhYmxlIFRYIGJsb2NrcyBvbiBIVyAqLwotCXUzMiB0eF9ibG9ja3NfZnJlZWRbTlVNX1RYX1FVRVVFU107Ci0JdTMyIHR4X2Jsb2Nrc19hdmFpbGFibGU7Ci0JdTMyIHR4X3Jlc3VsdHNfY291bnQ7Ci0KLQkvKiBUcmFuc21pdHRlZCBUWCBwYWNrZXRzIGNvdW50ZXIgZm9yIGNoaXBzZXQgaW50ZXJmYWNlICovCi0JdTMyIHR4X3BhY2tldHNfY291bnQ7Ci0KLQkvKiBUaW1lLW9mZnNldCBiZXR3ZWVuIGhvc3QgYW5kIGNoaXBzZXQgY2xvY2tzICovCi0JczY0IHRpbWVfb2Zmc2V0OwotCi0JLyogU2Vzc2lvbiBjb3VudGVyIGZvciB0aGUgY2hpcHNldCAqLwotCWludCBzZXNzaW9uX2NvdW50ZXI7Ci0KLQkvKiBGcmFtZXMgc2NoZWR1bGVkIGZvciB0cmFuc21pc3Npb24sIG5vdCBoYW5kbGVkIHlldCAqLwotCXN0cnVjdCBza19idWZmX2hlYWQgdHhfcXVldWU7Ci0KLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgdHhfd29yazsKLQotCS8qIFBlbmRpbmcgVFggZnJhbWVzICovCi0Jc3RydWN0IHNrX2J1ZmYgKnR4X2ZyYW1lc1tBQ1hfVFhfREVTQ1JJUFRPUlNdOwotCWludCB0eF9mcmFtZXNfY250OwotCi0JLyogU2VjdXJpdHkgc2VxdWVuY2UgbnVtYmVyIGNvdW50ZXJzICovCi0JdTggdHhfc2VjdXJpdHlfbGFzdF9zZXE7Ci0JczY0IHR4X3NlY3VyaXR5X3NlcTsKLQotCS8qIEZXIFJ4IGNvdW50ZXIgKi8KLQl1MzIgcnhfY291bnRlcjsKLQotCS8qIFJ4IG1lbW9yeSBwb29sIGFkZHJlc3MgKi8KLQlzdHJ1Y3Qgd2wxMjcxX3J4X21lbV9wb29sX2FkZHIgcnhfbWVtX3Bvb2xfYWRkcjsKLQotCS8qIEludGVybWVkaWF0ZSBidWZmZXIsIHVzZWQgZm9yIHBhY2tldCBhZ2dyZWdhdGlvbiAqLwotCXU4ICphZ2dyX2J1ZjsKLQotCS8qIFRoZSB0YXJnZXQgaW50ZXJydXB0IG1hc2sgKi8KLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgaXJxX3dvcms7Ci0KLQkvKiBIYXJkd2FyZSByZWNvdmVyeSB3b3JrICovCi0Jc3RydWN0IHdvcmtfc3RydWN0IHJlY292ZXJ5X3dvcms7Ci0KLQkvKiBUaGUgbWJveCBldmVudCBtYXNrICovCi0JdTMyIGV2ZW50X21hc2s7Ci0KLQkvKiBNYWlsYm94IHBvaW50ZXJzICovCi0JdTMyIG1ib3hfcHRyWzJdOwotCi0JLyogQXJlIHdlIGN1cnJlbnRseSBzY2FubmluZyAqLwotCXN0cnVjdCB3bDEyNzFfc2NhbiBzY2FuOwotCXN0cnVjdCBkZWxheWVkX3dvcmsgc2Nhbl9jb21wbGV0ZV93b3JrOwotCi0JLyogT3VyIGFzc29jaWF0aW9uIElEICovCi0JdTE2IGFpZDsKLQotCS8qIGN1cnJlbnRseSBjb25maWd1cmVkIHJhdGUgc2V0ICovCi0JdTMyIHN0YV9yYXRlX3NldDsKLQl1MzIgYmFzaWNfcmF0ZV9zZXQ7Ci0JdTMyIGJhc2ljX3JhdGU7Ci0JdTMyIHJhdGVfc2V0OwotCi0JLyogVGhlIGN1cnJlbnQgYmFuZCAqLwotCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZDsKLQotCS8qIEJlYWNvbmluZyBpbnRlcnZhbCAobmVlZGVkIGZvciBhZC1ob2MpICovCi0JdTMyIGJlYWNvbl9pbnQ7Ci0KLQkvKiBEZWZhdWx0IGtleSAoZm9yIFdFUCkgKi8KLQl1MzIgZGVmYXVsdF9rZXk7Ci0KLQl1bnNpZ25lZCBpbnQgZmlsdGVyczsKLQl1bnNpZ25lZCBpbnQgcnhfY29uZmlnOwotCXVuc2lnbmVkIGludCByeF9maWx0ZXI7Ci0KLQlzdHJ1Y3QgY29tcGxldGlvbiAqZWxwX2NvbXBsOwotCXN0cnVjdCBkZWxheWVkX3dvcmsgZWxwX3dvcms7Ci0Jc3RydWN0IGRlbGF5ZWRfd29yayBwc3BvbGxfd29yazsKLQotCS8qIGNvdW50ZXIgZm9yIHBzLXBvbGwgZGVsaXZlcnkgZmFpbHVyZXMgKi8KLQlpbnQgcHNfcG9sbF9mYWlsdXJlczsKLQotCS8qIHJldHJ5IGNvdW50ZXIgZm9yIFBTTSBlbnRyaWVzICovCi0JdTggcHNtX2VudHJ5X3JldHJ5OwotCi0JLyogaW4gZEJtICovCi0JaW50IHBvd2VyX2xldmVsOwotCi0JaW50IHJzc2lfdGhvbGQ7Ci0JaW50IGxhc3RfcnNzaV9ldmVudDsKLQotCXN0cnVjdCB3bDEyNzFfc3RhdHMgc3RhdHM7Ci0Jc3RydWN0IHdsMTI3MV9kZWJ1Z2ZzIGRlYnVnZnM7Ci0KLQlfX2xlMzIgYnVmZmVyXzMyOwotCXUzMiBidWZmZXJfY21kOwotCXUzMiBidWZmZXJfYnVzeXdvcmRbV0wxMjcxX0JVU1lfV09SRF9DTlRdOwotCi0Jc3RydWN0IHdsMTI3MV9md19zdGF0dXMgKmZ3X3N0YXR1czsKLQlzdHJ1Y3Qgd2wxMjcxX3R4X2h3X3Jlc19pZiAqdHhfcmVzX2lmOwotCi0Jc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZjsKLQotCS8qIEN1cnJlbnQgY2hpcHNldCBjb25maWd1cmF0aW9uICovCi0Jc3RydWN0IGNvbmZfZHJ2X3NldHRpbmdzIGNvbmY7Ci0KLQlib29sIHNnX2VuYWJsZWQ7Ci0KLQlib29sIGVuYWJsZV8xMWE7Ci0KLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0KLQkvKiBNb3N0IHJlY2VudGx5IHJlcG9ydGVkIG5vaXNlIGluIGRCbSAqLwotCXM4IG5vaXNlOwotfTsKLQotaW50IHdsMTI3MV9wbHRfc3RhcnQoc3RydWN0IHdsMTI3MSAqd2wpOwotaW50IHdsMTI3MV9wbHRfc3RvcChzdHJ1Y3Qgd2wxMjcxICp3bCk7Ci0KLSNkZWZpbmUgSk9JTl9USU1FT1VUIDUwMDAgLyogNTAwMCBtaWxsaXNlY29uZHMgdG8gam9pbiAqLwotCi0jZGVmaW5lIFNFU1NJT05fQ09VTlRFUl9NQVggNyAvKiBtYXhpbXVtIHZhbHVlIGZvciB0aGUgc2Vzc2lvbiBjb3VudGVyICovCi0KLSNkZWZpbmUgV0wxMjcxX0RFRkFVTFRfUE9XRVJfTEVWRUwgMAotCi0jZGVmaW5lIFdMMTI3MV9UWF9RVUVVRV9MT1dfV0FURVJNQVJLICAxMAotI2RlZmluZSBXTDEyNzFfVFhfUVVFVUVfSElHSF9XQVRFUk1BUksgMjUKLQotLyogV0wxMjcxIG5lZWRzIGEgMjAwbXMgc2xlZXAgYWZ0ZXIgcG93ZXIgb24sIGFuZCBhIDIwbXMgc2xlZXAgYmVmb3JlIHBvd2VyCi0gICBvbiBpbiBjYXNlIGlzIGhhcyBiZWVuIHNodXQgZG93biBzaG9ydGx5IGJlZm9yZSAqLwotI2RlZmluZSBXTDEyNzFfUFJFX1BPV0VSX09OX1NMRUVQIDIwIC8qIGluIG1pbGlzZWNvbmRzICovCi0jZGVmaW5lIFdMMTI3MV9QT1dFUl9PTl9TTEVFUCAyMDAgLyogaW4gbWlsaXNlY29uZHMgKi8KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2FjeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9hY3guYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjE4OTkzNC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2FjeC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTI1MyArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMjcxCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgTm9raWEgQ29ycG9yYXRpb24KLSAqCi0gKiBDb250YWN0OiBMdWNpYW5vIENvZWxobyA8bHVjaWFuby5jb2VsaG9Abm9raWEuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQotICogMDIxMTAtMTMwMSBVU0EKLSAqCi0gKi8KLQotI2luY2x1ZGUgIndsMTI3MV9hY3guaCIKLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2NyYzcuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotCi0jaW5jbHVkZSAid2wxMjcxLmgiCi0jaW5jbHVkZSAid2wxMnh4XzgwMjExLmgiCi0jaW5jbHVkZSAid2wxMjcxX3JlZy5oIgotI2luY2x1ZGUgIndsMTI3MV9wcy5oIgotCi1pbnQgd2wxMjcxX2FjeF93YWtlX3VwX2NvbmRpdGlvbnMoc3RydWN0IHdsMTI3MSAqd2wpCi17Ci0Jc3RydWN0IGFjeF93YWtlX3VwX2NvbmRpdGlvbiAqd2FrZV91cDsKLQlpbnQgcmV0OwotCi0Jd2wxMjcxX2RlYnVnKERFQlVHX0FDWCwgImFjeCB3YWtlIHVwIGNvbmRpdGlvbnMiKTsKLQotCXdha2VfdXAgPSBremFsbG9jKHNpemVvZigqd2FrZV91cCksIEdGUF9LRVJORUwpOwotCWlmICghd2FrZV91cCkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dDsKLQl9Ci0KLQl3YWtlX3VwLT53YWtlX3VwX2V2ZW50ID0gd2wtPmNvbmYuY29ubi53YWtlX3VwX2V2ZW50OwotCXdha2VfdXAtPmxpc3Rlbl9pbnRlcnZhbCA9IHdsLT5jb25mLmNvbm4ubGlzdGVuX2ludGVydmFsOwotCi0JcmV0ID0gd2wxMjcxX2NtZF9jb25maWd1cmUod2wsIEFDWF9XQUtFX1VQX0NPTkRJVElPTlMsCi0JCQkJICAgd2FrZV91cCwgc2l6ZW9mKCp3YWtlX3VwKSk7Ci0JaWYgKHJldCA8IDApIHsKLQkJd2wxMjcxX3dhcm5pbmcoImNvdWxkIG5vdCBzZXQgd2FrZSB1cCBjb25kaXRpb25zOiAlZCIsIHJldCk7Ci0JCWdvdG8gb3V0OwotCX0KLQotb3V0OgotCWtmcmVlKHdha2VfdXApOwotCXJldHVybiByZXQ7Ci19Ci0KLWludCB3bDEyNzFfYWN4X3NsZWVwX2F1dGgoc3RydWN0IHdsMTI3MSAqd2wsIHU4IHNsZWVwX2F1dGgpCi17Ci0Jc3RydWN0IGFjeF9zbGVlcF9hdXRoICphdXRoOwotCWludCByZXQ7Ci0KLQl3bDEyNzFfZGVidWcoREVCVUdfQUNYLCAiYWN4IHNsZWVwIGF1dGgiKTsKLQotCWF1dGggPSBremFsbG9jKHNpemVvZigqYXV0aCksIEdGUF9LRVJORUwpOwotCWlmICghYXV0aCkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlhdXRoLT5zbGVlcF9hdXRoID0gc2xlZXBfYXV0aDsKLQotCXJldCA9IHdsMTI3MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfU0xFRVBfQVVUSCwgYXV0aCwgc2l6ZW9mKCphdXRoKSk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLW91dDoKLQlrZnJlZShhdXRoKTsKLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgd2wxMjcxX2FjeF90eF9wb3dlcihzdHJ1Y3Qgd2wxMjcxICp3bCwgaW50IHBvd2VyKQotewotCXN0cnVjdCBhY3hfY3VycmVudF90eF9wb3dlciAqYWN4OwotCWludCByZXQ7Ci0KLQl3bDEyNzFfZGVidWcoREVCVUdfQUNYLCAiYWN4IGRvdDExX2N1cl90eF9wd3IiKTsKLQotCWlmIChwb3dlciA8IDAgfHwgcG93ZXIgPiAyNSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlhY3ggPSBremFsbG9jKHNpemVvZigqYWN4KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFhY3gpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JYWN4LT5jdXJyZW50X3R4X3Bvd2VyID0gcG93ZXIgKiAxMDsKLQotCXJldCA9IHdsMTI3MV9jbWRfY29uZmlndXJlKHdsLCBET1QxMV9DVVJfVFhfUFdSLCBhY3gsIHNpemVvZigqYWN4KSk7Ci0JaWYgKHJldCA8IDApIHsKLQkJd2wxMjcxX3dhcm5pbmcoImNvbmZpZ3VyZSBvZiB0eCBwb3dlciBmYWlsZWQ6ICVkIiwgcmV0KTsKLQkJZ290byBvdXQ7Ci0JfQotCi1vdXQ6Ci0Ja2ZyZWUoYWN4KTsKLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgd2wxMjcxX2FjeF9mZWF0dXJlX2NmZyhzdHJ1Y3Qgd2wxMjcxICp3bCkKLXsKLQlzdHJ1Y3QgYWN4X2ZlYXR1cmVfY29uZmlnICpmZWF0dXJlOwotCWludCByZXQ7Ci0KLQl3bDEyNzFfZGVidWcoREVCVUdfQUNYLCAiYWN4IGZlYXR1cmUgY2ZnIik7Ci0KLQlmZWF0dXJlID0ga3phbGxvYyhzaXplb2YoKmZlYXR1cmUpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWZlYXR1cmUpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JLyogREZfRU5DUllQVElPTl9ESVNBQkxFIGFuZCBERl9TTklGRl9NT0RFX0VOQUJMRSBhcmUgZGlzYWJsZWQgKi8KLQlmZWF0dXJlLT5kYXRhX2Zsb3dfb3B0aW9ucyA9IDA7Ci0JZmVhdHVyZS0+b3B0aW9ucyA9IDA7Ci0KLQlyZXQgPSB3bDEyNzFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX0ZFQVRVUkVfQ0ZHLAotCQkJCSAgIGZlYXR1cmUsIHNpemVvZigqZmVhdHVyZSkpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXdsMTI3MV9lcnJvcigiQ291bGRudCBzZXQgSFcgZW5jcnlwdGlvbiIpOwotCQlnb3RvIG91dDsKLQl9Ci0KLW91dDoKLQlrZnJlZShmZWF0dXJlKTsKLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgd2wxMjcxX2FjeF9tZW1fbWFwKHN0cnVjdCB3bDEyNzEgKndsLCBzdHJ1Y3QgYWN4X2hlYWRlciAqbWVtX21hcCwKLQkJICAgICAgIHNpemVfdCBsZW4pCi17Ci0JaW50IHJldDsKLQotCXdsMTI3MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggbWVtIG1hcCIpOwotCi0JcmV0ID0gd2wxMjcxX2NtZF9pbnRlcnJvZ2F0ZSh3bCwgQUNYX01FTV9NQVAsIG1lbV9tYXAsIGxlbik7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IHdsMTI3MV9hY3hfcnhfbXNkdV9saWZlX3RpbWUoc3RydWN0IHdsMTI3MSAqd2wpCi17Ci0Jc3RydWN0IGFjeF9yeF9tc2R1X2xpZmV0aW1lICphY3g7Ci0JaW50IHJldDsKLQotCXdsMTI3MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggcnggbXNkdSBsaWZlIHRpbWUiKTsKLQotCWFjeCA9IGt6YWxsb2Moc2l6ZW9mKCphY3gpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWFjeCkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlhY3gtPmxpZmV0aW1lID0gY3B1X3RvX2xlMzIod2wtPmNvbmYucngucnhfbXNkdV9saWZlX3RpbWUpOwotCXJldCA9IHdsMTI3MV9jbWRfY29uZmlndXJlKHdsLCBET1QxMV9SWF9NU0RVX0xJRkVfVElNRSwKLQkJCQkgICBhY3gsIHNpemVvZigqYWN4KSk7Ci0JaWYgKHJldCA8IDApIHsKLQkJd2wxMjcxX3dhcm5pbmcoImZhaWxlZCB0byBzZXQgcnggbXNkdSBsaWZlIHRpbWU6ICVkIiwgcmV0KTsKLQkJZ290byBvdXQ7Ci0JfQotCi1vdXQ6Ci0Ja2ZyZWUoYWN4KTsKLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgd2wxMjcxX2FjeF9yeF9jb25maWcoc3RydWN0IHdsMTI3MSAqd2wsIHUzMiBjb25maWcsIHUzMiBmaWx0ZXIpCi17Ci0Jc3RydWN0IGFjeF9yeF9jb25maWcgKnJ4X2NvbmZpZzsKLQlpbnQgcmV0OwotCi0Jd2wxMjcxX2RlYnVnKERFQlVHX0FDWCwgImFjeCByeCBjb25maWciKTsKLQotCXJ4X2NvbmZpZyA9IGt6YWxsb2Moc2l6ZW9mKCpyeF9jb25maWcpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXJ4X2NvbmZpZykgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlyeF9jb25maWctPmNvbmZpZ19vcHRpb25zID0gY3B1X3RvX2xlMzIoY29uZmlnKTsKLQlyeF9jb25maWctPmZpbHRlcl9vcHRpb25zID0gY3B1X3RvX2xlMzIoZmlsdGVyKTsKLQotCXJldCA9IHdsMTI3MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfUlhfQ0ZHLAotCQkJCSAgIHJ4X2NvbmZpZywgc2l6ZW9mKCpyeF9jb25maWcpKTsKLQlpZiAocmV0IDwgMCkgewotCQl3bDEyNzFfd2FybmluZygiZmFpbGVkIHRvIHNldCByeCBjb25maWc6ICVkIiwgcmV0KTsKLQkJZ290byBvdXQ7Ci0JfQotCi1vdXQ6Ci0Ja2ZyZWUocnhfY29uZmlnKTsKLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgd2wxMjcxX2FjeF9wZF90aHJlc2hvbGQoc3RydWN0IHdsMTI3MSAqd2wpCi17Ci0Jc3RydWN0IGFjeF9wYWNrZXRfZGV0ZWN0aW9uICpwZDsKLQlpbnQgcmV0OwotCi0Jd2wxMjcxX2RlYnVnKERFQlVHX0FDWCwgImFjeCBkYXRhIHBkIHRocmVzaG9sZCIpOwotCi0JcGQgPSBremFsbG9jKHNpemVvZigqcGQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXBkKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0OwotCX0KLQotCXBkLT50aHJlc2hvbGQgPSBjcHVfdG9fbGUzMih3bC0+Y29uZi5yeC5wYWNrZXRfZGV0ZWN0aW9uX3RocmVzaG9sZCk7Ci0KLQlyZXQgPSB3bDEyNzFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX1BEX1RIUkVTSE9MRCwgcGQsIHNpemVvZigqcGQpKTsKLQlpZiAocmV0IDwgMCkgewotCQl3bDEyNzFfd2FybmluZygiZmFpbGVkIHRvIHNldCBwZCB0aHJlc2hvbGQ6ICVkIiwgcmV0KTsKLQkJZ290byBvdXQ7Ci0JfQotCi1vdXQ6Ci0Ja2ZyZWUocGQpOwotCXJldHVybiByZXQ7Ci19Ci0KLWludCB3bDEyNzFfYWN4X3Nsb3Qoc3RydWN0IHdsMTI3MSAqd2wsIGVudW0gYWN4X3Nsb3RfdHlwZSBzbG90X3RpbWUpCi17Ci0Jc3RydWN0IGFjeF9zbG90ICpzbG90OwotCWludCByZXQ7Ci0KLQl3bDEyNzFfZGVidWcoREVCVUdfQUNYLCAiYWN4IHNsb3QiKTsKLQotCXNsb3QgPSBremFsbG9jKHNpemVvZigqc2xvdCksIEdGUF9LRVJORUwpOwotCWlmICghc2xvdCkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlzbG90LT53b25lX2luZGV4ID0gU1RBVElPTl9XT05FX0lOREVYOwotCXNsb3QtPnNsb3RfdGltZSA9IHNsb3RfdGltZTsKLQotCXJldCA9IHdsMTI3MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfU0xPVCwgc2xvdCwgc2l6ZW9mKCpzbG90KSk7Ci0JaWYgKHJldCA8IDApIHsKLQkJd2wxMjcxX3dhcm5pbmcoImZhaWxlZCB0byBzZXQgc2xvdCB0aW1lOiAlZCIsIHJldCk7Ci0JCWdvdG8gb3V0OwotCX0KLQotb3V0OgotCWtmcmVlKHNsb3QpOwotCXJldHVybiByZXQ7Ci19Ci0KLWludCB3bDEyNzFfYWN4X2dyb3VwX2FkZHJlc3NfdGJsKHN0cnVjdCB3bDEyNzEgKndsLCBib29sIGVuYWJsZSwKLQkJCQkgdm9pZCAqbWNfbGlzdCwgdTMyIG1jX2xpc3RfbGVuKQotewotCXN0cnVjdCBhY3hfZG90MTFfZ3JwX2FkZHJfdGJsICphY3g7Ci0JaW50IHJldDsKLQotCXdsMTI3MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggZ3JvdXAgYWRkcmVzcyB0YmwiKTsKLQotCWFjeCA9IGt6YWxsb2Moc2l6ZW9mKCphY3gpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWFjeCkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dDsKLQl9Ci0KLQkvKiBNQUMgZmlsdGVyaW5nICovCi0JYWN4LT5lbmFibGVkID0gZW5hYmxlOwotCWFjeC0+bnVtX2dyb3VwcyA9IG1jX2xpc3RfbGVuOwotCW1lbWNweShhY3gtPm1hY190YWJsZSwgbWNfbGlzdCwgbWNfbGlzdF9sZW4gKiBFVEhfQUxFTik7Ci0KLQlyZXQgPSB3bDEyNzFfY21kX2NvbmZpZ3VyZSh3bCwgRE9UMTFfR1JPVVBfQUREUkVTU19UQkwsCi0JCQkJICAgYWN4LCBzaXplb2YoKmFjeCkpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXdsMTI3MV93YXJuaW5nKCJmYWlsZWQgdG8gc2V0IGdyb3VwIGFkZHIgdGFibGU6ICVkIiwgcmV0KTsKLQkJZ290byBvdXQ7Ci0JfQotCi1vdXQ6Ci0Ja2ZyZWUoYWN4KTsKLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgd2wxMjcxX2FjeF9zZXJ2aWNlX3BlcmlvZF90aW1lb3V0KHN0cnVjdCB3bDEyNzEgKndsKQotewotCXN0cnVjdCBhY3hfcnhfdGltZW91dCAqcnhfdGltZW91dDsKLQlpbnQgcmV0OwotCi0JcnhfdGltZW91dCA9IGt6YWxsb2Moc2l6ZW9mKCpyeF90aW1lb3V0KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFyeF90aW1lb3V0KSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0OwotCX0KLQotCXdsMTI3MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggc2VydmljZSBwZXJpb2QgdGltZW91dCIpOwotCi0JcnhfdGltZW91dC0+cHNfcG9sbF90aW1lb3V0ID0gY3B1X3RvX2xlMTYod2wtPmNvbmYucngucHNfcG9sbF90aW1lb3V0KTsKLQlyeF90aW1lb3V0LT51cHNkX3RpbWVvdXQgPSBjcHVfdG9fbGUxNih3bC0+Y29uZi5yeC51cHNkX3RpbWVvdXQpOwotCi0JcmV0ID0gd2wxMjcxX2NtZF9jb25maWd1cmUod2wsIEFDWF9TRVJWSUNFX1BFUklPRF9USU1FT1VULAotCQkJCSAgIHJ4X3RpbWVvdXQsIHNpemVvZigqcnhfdGltZW91dCkpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXdsMTI3MV93YXJuaW5nKCJmYWlsZWQgdG8gc2V0IHNlcnZpY2UgcGVyaW9kIHRpbWVvdXQ6ICVkIiwKLQkJCSAgICAgICByZXQpOwotCQlnb3RvIG91dDsKLQl9Ci0KLW91dDoKLQlrZnJlZShyeF90aW1lb3V0KTsKLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgd2wxMjcxX2FjeF9ydHNfdGhyZXNob2xkKHN0cnVjdCB3bDEyNzEgKndsLCB1MTYgcnRzX3RocmVzaG9sZCkKLXsKLQlzdHJ1Y3QgYWN4X3J0c190aHJlc2hvbGQgKnJ0czsKLQlpbnQgcmV0OwotCi0Jd2wxMjcxX2RlYnVnKERFQlVHX0FDWCwgImFjeCBydHMgdGhyZXNob2xkIik7Ci0KLQlydHMgPSBremFsbG9jKHNpemVvZigqcnRzKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFydHMpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JcnRzLT50aHJlc2hvbGQgPSBjcHVfdG9fbGUxNihydHNfdGhyZXNob2xkKTsKLQotCXJldCA9IHdsMTI3MV9jbWRfY29uZmlndXJlKHdsLCBET1QxMV9SVFNfVEhSRVNIT0xELCBydHMsIHNpemVvZigqcnRzKSk7Ci0JaWYgKHJldCA8IDApIHsKLQkJd2wxMjcxX3dhcm5pbmcoImZhaWxlZCB0byBzZXQgcnRzIHRocmVzaG9sZDogJWQiLCByZXQpOwotCQlnb3RvIG91dDsKLQl9Ci0KLW91dDoKLQlrZnJlZShydHMpOwotCXJldHVybiByZXQ7Ci19Ci0KLWludCB3bDEyNzFfYWN4X2Rjb19pdHJpbV9wYXJhbXMoc3RydWN0IHdsMTI3MSAqd2wpCi17Ci0Jc3RydWN0IGFjeF9kY29faXRyaW1fcGFyYW1zICpkY287Ci0Jc3RydWN0IGNvbmZfaXRyaW1fc2V0dGluZ3MgKmMgPSAmd2wtPmNvbmYuaXRyaW07Ci0JaW50IHJldDsKLQotCXdsMTI3MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggZGNvIGl0cmltIHBhcmFtZXRlcnMiKTsKLQotCWRjbyA9IGt6YWxsb2Moc2l6ZW9mKCpkY28pLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRjbykgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlkY28tPmVuYWJsZSA9IGMtPmVuYWJsZTsKLQlkY28tPnRpbWVvdXQgPSBjcHVfdG9fbGUzMihjLT50aW1lb3V0KTsKLQotCXJldCA9IHdsMTI3MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfU0VUX0RDT19JVFJJTV9QQVJBTVMsCi0JCQkJICAgZGNvLCBzaXplb2YoKmRjbykpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXdsMTI3MV93YXJuaW5nKCJmYWlsZWQgdG8gc2V0IGRjbyBpdHJpbSBwYXJhbWV0ZXJzOiAlZCIsIHJldCk7Ci0JCWdvdG8gb3V0OwotCX0KLQotb3V0OgotCWtmcmVlKGRjbyk7Ci0JcmV0dXJuIHJldDsKLX0KLQotaW50IHdsMTI3MV9hY3hfYmVhY29uX2ZpbHRlcl9vcHQoc3RydWN0IHdsMTI3MSAqd2wsIGJvb2wgZW5hYmxlX2ZpbHRlcikKLXsKLQlzdHJ1Y3QgYWN4X2JlYWNvbl9maWx0ZXJfb3B0aW9uICpiZWFjb25fZmlsdGVyID0gTlVMTDsKLQlpbnQgcmV0ID0gMDsKLQotCXdsMTI3MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggYmVhY29uIGZpbHRlciBvcHQiKTsKLQotCWlmIChlbmFibGVfZmlsdGVyICYmCi0JICAgIHdsLT5jb25mLmNvbm4uYmNuX2ZpbHRfbW9kZSA9PSBDT05GX0JDTl9GSUxUX01PREVfRElTQUJMRUQpCi0JCWdvdG8gb3V0OwotCi0JYmVhY29uX2ZpbHRlciA9IGt6YWxsb2Moc2l6ZW9mKCpiZWFjb25fZmlsdGVyKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFiZWFjb25fZmlsdGVyKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0OwotCX0KLQotCWJlYWNvbl9maWx0ZXItPmVuYWJsZSA9IGVuYWJsZV9maWx0ZXI7Ci0KLQkvKgotCSAqIFdoZW4gc2V0IHRvIHplcm8sIGFuZCB0aGUgZmlsdGVyIGlzIGVuYWJsZWQsIGJlYWNvbnMKLQkgKiB3aXRob3V0IHRoZSB1bmljYXN0IFRJTSBiaXQgc2V0IGFyZSBkcm9wcGVkLgotCSAqLwotCWJlYWNvbl9maWx0ZXItPm1heF9udW1fYmVhY29ucyA9IDA7Ci0KLQlyZXQgPSB3bDEyNzFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX0JFQUNPTl9GSUxURVJfT1BULAotCQkJCSAgIGJlYWNvbl9maWx0ZXIsIHNpemVvZigqYmVhY29uX2ZpbHRlcikpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXdsMTI3MV93YXJuaW5nKCJmYWlsZWQgdG8gc2V0IGJlYWNvbiBmaWx0ZXIgb3B0OiAlZCIsIHJldCk7Ci0JCWdvdG8gb3V0OwotCX0KLQotb3V0OgotCWtmcmVlKGJlYWNvbl9maWx0ZXIpOwotCXJldHVybiByZXQ7Ci19Ci0KLWludCB3bDEyNzFfYWN4X2JlYWNvbl9maWx0ZXJfdGFibGUoc3RydWN0IHdsMTI3MSAqd2wpCi17Ci0Jc3RydWN0IGFjeF9iZWFjb25fZmlsdGVyX2llX3RhYmxlICppZV90YWJsZTsKLQlpbnQgaSwgaWR4ID0gMDsKLQlpbnQgcmV0OwotCWJvb2wgdmVuZG9yX3NwZWMgPSBmYWxzZTsKLQotCXdsMTI3MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggYmVhY29uIGZpbHRlciB0YWJsZSIpOwotCi0JaWVfdGFibGUgPSBremFsbG9jKHNpemVvZigqaWVfdGFibGUpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWllX3RhYmxlKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qIGNvbmZpZ3VyZSBkZWZhdWx0IGJlYWNvbiBwYXNzLXRocm91Z2ggcnVsZXMgKi8KLQlpZV90YWJsZS0+bnVtX2llID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgd2wtPmNvbmYuY29ubi5iY25fZmlsdF9pZV9jb3VudDsgaSsrKSB7Ci0JCXN0cnVjdCBjb25mX2Jjbl9maWx0X3J1bGUgKnIgPSAmKHdsLT5jb25mLmNvbm4uYmNuX2ZpbHRfaWVbaV0pOwotCQlpZV90YWJsZS0+dGFibGVbaWR4KytdID0gci0+aWU7Ci0JCWllX3RhYmxlLT50YWJsZVtpZHgrK10gPSByLT5ydWxlOwotCi0JCWlmIChyLT5pZSA9PSBXTEFOX0VJRF9WRU5ET1JfU1BFQ0lGSUMpIHsKLQkJCS8qIG9ubHkgb25lIHZlbmRvciBzcGVjaWZpYyBpZSBhbGxvd2VkICovCi0JCQlpZiAodmVuZG9yX3NwZWMpCi0JCQkJY29udGludWU7Ci0KLQkJCS8qIGZvciB2ZW5kb3Igc3BlY2lmaWMgcnVsZXMgY29uZmlndXJlIHRoZQotCQkJICAgYWRkaXRpb25hbCBmaWVsZHMgKi8KLQkJCW1lbWNweSgmKGllX3RhYmxlLT50YWJsZVtpZHhdKSwgci0+b3VpLAotCQkJICAgICAgIENPTkZfQkNOX0lFX09VSV9MRU4pOwotCQkJaWR4ICs9IENPTkZfQkNOX0lFX09VSV9MRU47Ci0JCQlpZV90YWJsZS0+dGFibGVbaWR4KytdID0gci0+dHlwZTsKLQkJCW1lbWNweSgmKGllX3RhYmxlLT50YWJsZVtpZHhdKSwgci0+dmVyc2lvbiwKLQkJCSAgICAgICBDT05GX0JDTl9JRV9WRVJfTEVOKTsKLQkJCWlkeCArPSBDT05GX0JDTl9JRV9WRVJfTEVOOwotCQkJdmVuZG9yX3NwZWMgPSB0cnVlOwotCQl9Ci0KLQkJaWVfdGFibGUtPm51bV9pZSsrOwotCX0KLQotCXJldCA9IHdsMTI3MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfQkVBQ09OX0ZJTFRFUl9UQUJMRSwKLQkJCQkgICBpZV90YWJsZSwgc2l6ZW9mKCppZV90YWJsZSkpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXdsMTI3MV93YXJuaW5nKCJmYWlsZWQgdG8gc2V0IGJlYWNvbiBmaWx0ZXIgdGFibGU6ICVkIiwgcmV0KTsKLQkJZ290byBvdXQ7Ci0JfQotCi1vdXQ6Ci0Ja2ZyZWUoaWVfdGFibGUpOwotCXJldHVybiByZXQ7Ci19Ci0KLSNkZWZpbmUgQUNYX0NPTk5fTU9OSVRfRElTQUJMRV9WQUxVRSAgMHhmZmZmZmZmZgotCi1pbnQgd2wxMjcxX2FjeF9jb25uX21vbml0X3BhcmFtcyhzdHJ1Y3Qgd2wxMjcxICp3bCwgYm9vbCBlbmFibGUpCi17Ci0Jc3RydWN0IGFjeF9jb25uX21vbml0X3BhcmFtcyAqYWN4OwotCXUzMiB0aHJlc2hvbGQgPSBBQ1hfQ09OTl9NT05JVF9ESVNBQkxFX1ZBTFVFOwotCXUzMiB0aW1lb3V0ID0gQUNYX0NPTk5fTU9OSVRfRElTQUJMRV9WQUxVRTsKLQlpbnQgcmV0OwotCi0Jd2wxMjcxX2RlYnVnKERFQlVHX0FDWCwgImFjeCBjb25uZWN0aW9uIG1vbml0b3IgcGFyYW1ldGVyczogJXMiLAotCQkgICAgIGVuYWJsZSA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpOwotCi0JYWN4ID0ga3phbGxvYyhzaXplb2YoKmFjeCksIEdGUF9LRVJORUwpOwotCWlmICghYWN4KSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmIChlbmFibGUpIHsKLQkJdGhyZXNob2xkID0gd2wtPmNvbmYuY29ubi5zeW5jaF9mYWlsX3Rob2xkOwotCQl0aW1lb3V0ID0gd2wtPmNvbmYuY29ubi5ic3NfbG9zZV90aW1lb3V0OwotCX0KLQotCWFjeC0+c3luY2hfZmFpbF90aG9sZCA9IGNwdV90b19sZTMyKHRocmVzaG9sZCk7Ci0JYWN4LT5ic3NfbG9zZV90aW1lb3V0ID0gY3B1X3RvX2xlMzIodGltZW91dCk7Ci0KLQlyZXQgPSB3bDEyNzFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX0NPTk5fTU9OSVRfUEFSQU1TLAotCQkJCSAgIGFjeCwgc2l6ZW9mKCphY3gpKTsKLQlpZiAocmV0IDwgMCkgewotCQl3bDEyNzFfd2FybmluZygiZmFpbGVkIHRvIHNldCBjb25uZWN0aW9uIG1vbml0b3IgIgotCQkJICAgICAgICJwYXJhbWV0ZXJzOiAlZCIsIHJldCk7Ci0JCWdvdG8gb3V0OwotCX0KLQotb3V0OgotCWtmcmVlKGFjeCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotCi1pbnQgd2wxMjcxX2FjeF9zZ19lbmFibGUoc3RydWN0IHdsMTI3MSAqd2wsIGJvb2wgZW5hYmxlKQotewotCXN0cnVjdCBhY3hfYnRfd2xhbl9jb2V4ICpwdGE7Ci0JaW50IHJldDsKLQotCXdsMTI3MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggc2cgZW5hYmxlIik7Ci0KLQlwdGEgPSBremFsbG9jKHNpemVvZigqcHRhKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFwdGEpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKGVuYWJsZSkKLQkJcHRhLT5lbmFibGUgPSB3bC0+Y29uZi5zZy5zdGF0ZTsKLQllbHNlCi0JCXB0YS0+ZW5hYmxlID0gQ09ORl9TR19ESVNBQkxFOwotCi0JcmV0ID0gd2wxMjcxX2NtZF9jb25maWd1cmUod2wsIEFDWF9TR19FTkFCTEUsIHB0YSwgc2l6ZW9mKCpwdGEpKTsKLQlpZiAocmV0IDwgMCkgewotCQl3bDEyNzFfd2FybmluZygiZmFpbGVkIHRvIHNldCBzb2Z0Z2VtaW5pIGVuYWJsZTogJWQiLCByZXQpOwotCQlnb3RvIG91dDsKLQl9Ci0KLW91dDoKLQlrZnJlZShwdGEpOwotCXJldHVybiByZXQ7Ci19Ci0KLWludCB3bDEyNzFfYWN4X3NnX2NmZyhzdHJ1Y3Qgd2wxMjcxICp3bCkKLXsKLQlzdHJ1Y3QgYWN4X2J0X3dsYW5fY29leF9wYXJhbSAqcGFyYW07Ci0Jc3RydWN0IGNvbmZfc2dfc2V0dGluZ3MgKmMgPSAmd2wtPmNvbmYuc2c7Ci0JaW50IGksIHJldDsKLQotCXdsMTI3MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggc2cgY2ZnIik7Ci0KLQlwYXJhbSA9IGt6YWxsb2Moc2l6ZW9mKCpwYXJhbSksIEdGUF9LRVJORUwpOwotCWlmICghcGFyYW0pIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JLyogQlQtV0xBTiBjb2V4dCBwYXJhbWV0ZXJzICovCi0JZm9yIChpID0gMDsgaSA8IENPTkZfU0dfUEFSQU1TX01BWDsgaSsrKQotCQlwYXJhbS0+cGFyYW1zW2ldID0gY3B1X3RvX2xlMzIoYy0+cGFyYW1zW2ldKTsKLQlwYXJhbS0+cGFyYW1faWR4ID0gQ09ORl9TR19QQVJBTVNfQUxMOwotCi0JcmV0ID0gd2wxMjcxX2NtZF9jb25maWd1cmUod2wsIEFDWF9TR19DRkcsIHBhcmFtLCBzaXplb2YoKnBhcmFtKSk7Ci0JaWYgKHJldCA8IDApIHsKLQkJd2wxMjcxX3dhcm5pbmcoImZhaWxlZCB0byBzZXQgc2cgY29uZmlnOiAlZCIsIHJldCk7Ci0JCWdvdG8gb3V0OwotCX0KLQotb3V0OgotCWtmcmVlKHBhcmFtKTsKLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgd2wxMjcxX2FjeF9jY2FfdGhyZXNob2xkKHN0cnVjdCB3bDEyNzEgKndsKQotewotCXN0cnVjdCBhY3hfZW5lcmd5X2RldGVjdGlvbiAqZGV0ZWN0aW9uOwotCWludCByZXQ7Ci0KLQl3bDEyNzFfZGVidWcoREVCVUdfQUNYLCAiYWN4IGNjYSB0aHJlc2hvbGQiKTsKLQotCWRldGVjdGlvbiA9IGt6YWxsb2Moc2l6ZW9mKCpkZXRlY3Rpb24pLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRldGVjdGlvbikgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlkZXRlY3Rpb24tPnJ4X2NjYV90aHJlc2hvbGQgPSBjcHVfdG9fbGUxNih3bC0+Y29uZi5yeC5yeF9jY2FfdGhyZXNob2xkKTsKLQlkZXRlY3Rpb24tPnR4X2VuZXJneV9kZXRlY3Rpb24gPSB3bC0+Y29uZi50eC50eF9lbmVyZ3lfZGV0ZWN0aW9uOwotCi0JcmV0ID0gd2wxMjcxX2NtZF9jb25maWd1cmUod2wsIEFDWF9DQ0FfVEhSRVNIT0xELAotCQkJCSAgIGRldGVjdGlvbiwgc2l6ZW9mKCpkZXRlY3Rpb24pKTsKLQlpZiAocmV0IDwgMCkgewotCQl3bDEyNzFfd2FybmluZygiZmFpbGVkIHRvIHNldCBjY2EgdGhyZXNob2xkOiAlZCIsIHJldCk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi1vdXQ6Ci0Ja2ZyZWUoZGV0ZWN0aW9uKTsKLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgd2wxMjcxX2FjeF9iY25fZHRpbV9vcHRpb25zKHN0cnVjdCB3bDEyNzEgKndsKQotewotCXN0cnVjdCBhY3hfYmVhY29uX2Jyb2FkY2FzdCAqYmI7Ci0JaW50IHJldDsKLQotCXdsMTI3MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggYmNuIGR0aW0gb3B0aW9ucyIpOwotCi0JYmIgPSBremFsbG9jKHNpemVvZigqYmIpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWJiKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0OwotCX0KLQotCWJiLT5iZWFjb25fcnhfdGltZW91dCA9IGNwdV90b19sZTE2KHdsLT5jb25mLmNvbm4uYmVhY29uX3J4X3RpbWVvdXQpOwotCWJiLT5icm9hZGNhc3RfdGltZW91dCA9IGNwdV90b19sZTE2KHdsLT5jb25mLmNvbm4uYnJvYWRjYXN0X3RpbWVvdXQpOwotCWJiLT5yeF9icm9hZGNhc3RfaW5fcHMgPSB3bC0+Y29uZi5jb25uLnJ4X2Jyb2FkY2FzdF9pbl9wczsKLQliYi0+cHNfcG9sbF90aHJlc2hvbGQgPSB3bC0+Y29uZi5jb25uLnBzX3BvbGxfdGhyZXNob2xkOwotCi0JcmV0ID0gd2wxMjcxX2NtZF9jb25maWd1cmUod2wsIEFDWF9CQ05fRFRJTV9PUFRJT05TLCBiYiwgc2l6ZW9mKCpiYikpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXdsMTI3MV93YXJuaW5nKCJmYWlsZWQgdG8gc2V0IHJ4IGNvbmZpZzogJWQiLCByZXQpOwotCQlnb3RvIG91dDsKLQl9Ci0KLW91dDoKLQlrZnJlZShiYik7Ci0JcmV0dXJuIHJldDsKLX0KLQotaW50IHdsMTI3MV9hY3hfYWlkKHN0cnVjdCB3bDEyNzEgKndsLCB1MTYgYWlkKQotewotCXN0cnVjdCBhY3hfYWlkICphY3hfYWlkOwotCWludCByZXQ7Ci0KLQl3bDEyNzFfZGVidWcoREVCVUdfQUNYLCAiYWN4IGFpZCIpOwotCi0JYWN4X2FpZCA9IGt6YWxsb2Moc2l6ZW9mKCphY3hfYWlkKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFhY3hfYWlkKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0OwotCX0KLQotCWFjeF9haWQtPmFpZCA9IGNwdV90b19sZTE2KGFpZCk7Ci0KLQlyZXQgPSB3bDEyNzFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX0FJRCwgYWN4X2FpZCwgc2l6ZW9mKCphY3hfYWlkKSk7Ci0JaWYgKHJldCA8IDApIHsKLQkJd2wxMjcxX3dhcm5pbmcoImZhaWxlZCB0byBzZXQgYWlkOiAlZCIsIHJldCk7Ci0JCWdvdG8gb3V0OwotCX0KLQotb3V0OgotCWtmcmVlKGFjeF9haWQpOwotCXJldHVybiByZXQ7Ci19Ci0KLWludCB3bDEyNzFfYWN4X2V2ZW50X21ib3hfbWFzayhzdHJ1Y3Qgd2wxMjcxICp3bCwgdTMyIGV2ZW50X21hc2spCi17Ci0Jc3RydWN0IGFjeF9ldmVudF9tYXNrICptYXNrOwotCWludCByZXQ7Ci0KLQl3bDEyNzFfZGVidWcoREVCVUdfQUNYLCAiYWN4IGV2ZW50IG1ib3ggbWFzayIpOwotCi0JbWFzayA9IGt6YWxsb2Moc2l6ZW9mKCptYXNrKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFtYXNrKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qIGhpZ2ggZXZlbnQgbWFzayBpcyB1bnVzZWQgKi8KLQltYXNrLT5oaWdoX2V2ZW50X21hc2sgPSBjcHVfdG9fbGUzMigweGZmZmZmZmZmKTsKLQltYXNrLT5ldmVudF9tYXNrID0gY3B1X3RvX2xlMzIoZXZlbnRfbWFzayk7Ci0KLQlyZXQgPSB3bDEyNzFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX0VWRU5UX01CT1hfTUFTSywKLQkJCQkgICBtYXNrLCBzaXplb2YoKm1hc2spKTsKLQlpZiAocmV0IDwgMCkgewotCQl3bDEyNzFfd2FybmluZygiZmFpbGVkIHRvIHNldCBhY3hfZXZlbnRfbWJveF9tYXNrOiAlZCIsIHJldCk7Ci0JCWdvdG8gb3V0OwotCX0KLQotb3V0OgotCWtmcmVlKG1hc2spOwotCXJldHVybiByZXQ7Ci19Ci0KLWludCB3bDEyNzFfYWN4X3NldF9wcmVhbWJsZShzdHJ1Y3Qgd2wxMjcxICp3bCwgZW51bSBhY3hfcHJlYW1ibGVfdHlwZSBwcmVhbWJsZSkKLXsKLQlzdHJ1Y3QgYWN4X3ByZWFtYmxlICphY3g7Ci0JaW50IHJldDsKLQotCXdsMTI3MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3hfc2V0X3ByZWFtYmxlIik7Ci0KLQlhY3ggPSBremFsbG9jKHNpemVvZigqYWN4KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFhY3gpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JYWN4LT5wcmVhbWJsZSA9IHByZWFtYmxlOwotCi0JcmV0ID0gd2wxMjcxX2NtZF9jb25maWd1cmUod2wsIEFDWF9QUkVBTUJMRV9UWVBFLCBhY3gsIHNpemVvZigqYWN4KSk7Ci0JaWYgKHJldCA8IDApIHsKLQkJd2wxMjcxX3dhcm5pbmcoIlNldHRpbmcgb2YgcHJlYW1ibGUgZmFpbGVkOiAlZCIsIHJldCk7Ci0JCWdvdG8gb3V0OwotCX0KLQotb3V0OgotCWtmcmVlKGFjeCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotaW50IHdsMTI3MV9hY3hfY3RzX3Byb3RlY3Qoc3RydWN0IHdsMTI3MSAqd2wsCi0JCQkgICBlbnVtIGFjeF9jdHNwcm90ZWN0X3R5cGUgY3RzcHJvdGVjdCkKLXsKLQlzdHJ1Y3QgYWN4X2N0c3Byb3RlY3QgKmFjeDsKLQlpbnQgcmV0OwotCi0Jd2wxMjcxX2RlYnVnKERFQlVHX0FDWCwgImFjeF9zZXRfY3RzcHJvdGVjdCIpOwotCi0JYWN4ID0ga3phbGxvYyhzaXplb2YoKmFjeCksIEdGUF9LRVJORUwpOwotCWlmICghYWN4KSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0OwotCX0KLQotCWFjeC0+Y3RzcHJvdGVjdCA9IGN0c3Byb3RlY3Q7Ci0KLQlyZXQgPSB3bDEyNzFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX0NUU19QUk9URUNUSU9OLCBhY3gsIHNpemVvZigqYWN4KSk7Ci0JaWYgKHJldCA8IDApIHsKLQkJd2wxMjcxX3dhcm5pbmcoIlNldHRpbmcgb2YgY3RzcHJvdGVjdCBmYWlsZWQ6ICVkIiwgcmV0KTsKLQkJZ290byBvdXQ7Ci0JfQotCi1vdXQ6Ci0Ja2ZyZWUoYWN4KTsKLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgd2wxMjcxX2FjeF9zdGF0aXN0aWNzKHN0cnVjdCB3bDEyNzEgKndsLCBzdHJ1Y3QgYWN4X3N0YXRpc3RpY3MgKnN0YXRzKQotewotCWludCByZXQ7Ci0KLQl3bDEyNzFfZGVidWcoREVCVUdfQUNYLCAiYWN4IHN0YXRpc3RpY3MiKTsKLQotCXJldCA9IHdsMTI3MV9jbWRfaW50ZXJyb2dhdGUod2wsIEFDWF9TVEFUSVNUSUNTLCBzdGF0cywKLQkJCQkgICAgIHNpemVvZigqc3RhdHMpKTsKLQlpZiAocmV0IDwgMCkgewotCQl3bDEyNzFfd2FybmluZygiYWN4IHN0YXRpc3RpY3MgZmFpbGVkOiAlZCIsIHJldCk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCXJldHVybiAwOwotfQotCi1pbnQgd2wxMjcxX2FjeF9yYXRlX3BvbGljaWVzKHN0cnVjdCB3bDEyNzEgKndsKQotewotCXN0cnVjdCBhY3hfcmF0ZV9wb2xpY3kgKmFjeDsKLQlzdHJ1Y3QgY29uZl90eF9yYXRlX2NsYXNzICpjID0gJndsLT5jb25mLnR4LnJjX2NvbmY7Ci0JaW50IGlkeCA9IDA7Ci0JaW50IHJldCA9IDA7Ci0KLQl3bDEyNzFfZGVidWcoREVCVUdfQUNYLCAiYWN4IHJhdGUgcG9saWNpZXMiKTsKLQotCWFjeCA9IGt6YWxsb2Moc2l6ZW9mKCphY3gpLCBHRlBfS0VSTkVMKTsKLQotCWlmICghYWN4KSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qIGNvbmZpZ3VyZSBvbmUgYmFzaWMgcmF0ZSBjbGFzcyAqLwotCWlkeCA9IEFDWF9UWF9CQVNJQ19SQVRFOwotCWFjeC0+cmF0ZV9jbGFzc1tpZHhdLmVuYWJsZWRfcmF0ZXMgPSBjcHVfdG9fbGUzMih3bC0+YmFzaWNfcmF0ZSk7Ci0JYWN4LT5yYXRlX2NsYXNzW2lkeF0uc2hvcnRfcmV0cnlfbGltaXQgPSBjLT5zaG9ydF9yZXRyeV9saW1pdDsKLQlhY3gtPnJhdGVfY2xhc3NbaWR4XS5sb25nX3JldHJ5X2xpbWl0ID0gYy0+bG9uZ19yZXRyeV9saW1pdDsKLQlhY3gtPnJhdGVfY2xhc3NbaWR4XS5hZmxhZ3MgPSBjLT5hZmxhZ3M7Ci0KLQkvKiBjb25maWd1cmUgb25lIEFQIHN1cHBvcnRlZCByYXRlIGNsYXNzICovCi0JaWR4ID0gQUNYX1RYX0FQX0ZVTExfUkFURTsKLQlhY3gtPnJhdGVfY2xhc3NbaWR4XS5lbmFibGVkX3JhdGVzID0gY3B1X3RvX2xlMzIod2wtPnJhdGVfc2V0KTsKLQlhY3gtPnJhdGVfY2xhc3NbaWR4XS5zaG9ydF9yZXRyeV9saW1pdCA9IGMtPnNob3J0X3JldHJ5X2xpbWl0OwotCWFjeC0+cmF0ZV9jbGFzc1tpZHhdLmxvbmdfcmV0cnlfbGltaXQgPSBjLT5sb25nX3JldHJ5X2xpbWl0OwotCWFjeC0+cmF0ZV9jbGFzc1tpZHhdLmFmbGFncyA9IGMtPmFmbGFnczsKLQotCWFjeC0+cmF0ZV9jbGFzc19jbnQgPSBjcHVfdG9fbGUzMihBQ1hfVFhfUkFURV9QT0xJQ1lfQ05UKTsKLQotCXJldCA9IHdsMTI3MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfUkFURV9QT0xJQ1ksIGFjeCwgc2l6ZW9mKCphY3gpKTsKLQlpZiAocmV0IDwgMCkgewotCQl3bDEyNzFfd2FybmluZygiU2V0dGluZyBvZiByYXRlIHBvbGljaWVzIGZhaWxlZDogJWQiLCByZXQpOwotCQlnb3RvIG91dDsKLQl9Ci0KLW91dDoKLQlrZnJlZShhY3gpOwotCXJldHVybiByZXQ7Ci19Ci0KLWludCB3bDEyNzFfYWN4X2FjX2NmZyhzdHJ1Y3Qgd2wxMjcxICp3bCwgdTggYWMsIHU4IGN3X21pbiwgdTE2IGN3X21heCwKLQkJICAgICAgdTggYWlmc24sIHUxNiB0eG9wKQotewotCXN0cnVjdCBhY3hfYWNfY2ZnICphY3g7Ci0JaW50IHJldCA9IDA7Ci0KLQl3bDEyNzFfZGVidWcoREVCVUdfQUNYLCAiYWN4IGFjIGNmZyAlZCBjd19taW5nICVkIGN3X21heCAlZCAiCi0JCSAgICAgImFpZnMgJWQgdHhvcCAlZCIsIGFjLCBjd19taW4sIGN3X21heCwgYWlmc24sIHR4b3ApOwotCi0JYWN4ID0ga3phbGxvYyhzaXplb2YoKmFjeCksIEdGUF9LRVJORUwpOwotCi0JaWYgKCFhY3gpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JYWN4LT5hYyA9IGFjOwotCWFjeC0+Y3dfbWluID0gY3dfbWluOwotCWFjeC0+Y3dfbWF4ID0gY3B1X3RvX2xlMTYoY3dfbWF4KTsKLQlhY3gtPmFpZnNuID0gYWlmc247Ci0JYWN4LT50eF9vcF9saW1pdCA9IGNwdV90b19sZTE2KHR4b3ApOwotCi0JcmV0ID0gd2wxMjcxX2NtZF9jb25maWd1cmUod2wsIEFDWF9BQ19DRkcsIGFjeCwgc2l6ZW9mKCphY3gpKTsKLQlpZiAocmV0IDwgMCkgewotCQl3bDEyNzFfd2FybmluZygiYWN4IGFjIGNmZyBmYWlsZWQ6ICVkIiwgcmV0KTsKLQkJZ290byBvdXQ7Ci0JfQotCi1vdXQ6Ci0Ja2ZyZWUoYWN4KTsKLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgd2wxMjcxX2FjeF90aWRfY2ZnKHN0cnVjdCB3bDEyNzEgKndsLCB1OCBxdWV1ZV9pZCwgdTggY2hhbm5lbF90eXBlLAotCQkgICAgICAgdTggdHNpZCwgdTggcHNfc2NoZW1lLCB1OCBhY2tfcG9saWN5LAotCQkgICAgICAgdTMyIGFwc2RfY29uZjAsIHUzMiBhcHNkX2NvbmYxKQotewotCXN0cnVjdCBhY3hfdGlkX2NvbmZpZyAqYWN4OwotCWludCByZXQgPSAwOwotCi0Jd2wxMjcxX2RlYnVnKERFQlVHX0FDWCwgImFjeCB0aWQgY29uZmlnIik7Ci0KLQlhY3ggPSBremFsbG9jKHNpemVvZigqYWN4KSwgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAoIWFjeCkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlhY3gtPnF1ZXVlX2lkID0gcXVldWVfaWQ7Ci0JYWN4LT5jaGFubmVsX3R5cGUgPSBjaGFubmVsX3R5cGU7Ci0JYWN4LT50c2lkID0gdHNpZDsKLQlhY3gtPnBzX3NjaGVtZSA9IHBzX3NjaGVtZTsKLQlhY3gtPmFja19wb2xpY3kgPSBhY2tfcG9saWN5OwotCWFjeC0+YXBzZF9jb25mWzBdID0gY3B1X3RvX2xlMzIoYXBzZF9jb25mMCk7Ci0JYWN4LT5hcHNkX2NvbmZbMV0gPSBjcHVfdG9fbGUzMihhcHNkX2NvbmYxKTsKLQotCXJldCA9IHdsMTI3MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfVElEX0NGRywgYWN4LCBzaXplb2YoKmFjeCkpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXdsMTI3MV93YXJuaW5nKCJTZXR0aW5nIG9mIHRpZCBjb25maWcgZmFpbGVkOiAlZCIsIHJldCk7Ci0JCWdvdG8gb3V0OwotCX0KLQotb3V0OgotCWtmcmVlKGFjeCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotaW50IHdsMTI3MV9hY3hfZnJhZ190aHJlc2hvbGQoc3RydWN0IHdsMTI3MSAqd2wpCi17Ci0Jc3RydWN0IGFjeF9mcmFnX3RocmVzaG9sZCAqYWN4OwotCWludCByZXQgPSAwOwotCi0Jd2wxMjcxX2RlYnVnKERFQlVHX0FDWCwgImFjeCBmcmFnIHRocmVzaG9sZCIpOwotCi0JYWN4ID0ga3phbGxvYyhzaXplb2YoKmFjeCksIEdGUF9LRVJORUwpOwotCi0JaWYgKCFhY3gpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JYWN4LT5mcmFnX3RocmVzaG9sZCA9IGNwdV90b19sZTE2KHdsLT5jb25mLnR4LmZyYWdfdGhyZXNob2xkKTsKLQlyZXQgPSB3bDEyNzFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX0ZSQUdfQ0ZHLCBhY3gsIHNpemVvZigqYWN4KSk7Ci0JaWYgKHJldCA8IDApIHsKLQkJd2wxMjcxX3dhcm5pbmcoIlNldHRpbmcgb2YgZnJhZyB0aHJlc2hvbGQgZmFpbGVkOiAlZCIsIHJldCk7Ci0JCWdvdG8gb3V0OwotCX0KLQotb3V0OgotCWtmcmVlKGFjeCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotaW50IHdsMTI3MV9hY3hfdHhfY29uZmlnX29wdGlvbnMoc3RydWN0IHdsMTI3MSAqd2wpCi17Ci0Jc3RydWN0IGFjeF90eF9jb25maWdfb3B0aW9ucyAqYWN4OwotCWludCByZXQgPSAwOwotCi0Jd2wxMjcxX2RlYnVnKERFQlVHX0FDWCwgImFjeCB0eCBjb25maWcgb3B0aW9ucyIpOwotCi0JYWN4ID0ga3phbGxvYyhzaXplb2YoKmFjeCksIEdGUF9LRVJORUwpOwotCi0JaWYgKCFhY3gpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JYWN4LT50eF9jb21wbF90aW1lb3V0ID0gY3B1X3RvX2xlMTYod2wtPmNvbmYudHgudHhfY29tcGxfdGltZW91dCk7Ci0JYWN4LT50eF9jb21wbF90aHJlc2hvbGQgPSBjcHVfdG9fbGUxNih3bC0+Y29uZi50eC50eF9jb21wbF90aHJlc2hvbGQpOwotCXJldCA9IHdsMTI3MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfVFhfQ09ORklHX09QVCwgYWN4LCBzaXplb2YoKmFjeCkpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXdsMTI3MV93YXJuaW5nKCJTZXR0aW5nIG9mIHR4IG9wdGlvbnMgZmFpbGVkOiAlZCIsIHJldCk7Ci0JCWdvdG8gb3V0OwotCX0KLQotb3V0OgotCWtmcmVlKGFjeCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotaW50IHdsMTI3MV9hY3hfbWVtX2NmZyhzdHJ1Y3Qgd2wxMjcxICp3bCkKLXsKLQlzdHJ1Y3Qgd2wxMjcxX2FjeF9jb25maWdfbWVtb3J5ICptZW1fY29uZjsKLQlpbnQgcmV0OwotCi0Jd2wxMjcxX2RlYnVnKERFQlVHX0FDWCwgIndsMTI3MSBtZW0gY2ZnIik7Ci0KLQltZW1fY29uZiA9IGt6YWxsb2Moc2l6ZW9mKCptZW1fY29uZiksIEdGUF9LRVJORUwpOwotCWlmICghbWVtX2NvbmYpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JLyogbWVtb3J5IGNvbmZpZyAqLwotCW1lbV9jb25mLT5udW1fc3RhdGlvbnMgPSBERUZBVUxUX05VTV9TVEFUSU9OUzsKLQltZW1fY29uZi0+cnhfbWVtX2Jsb2NrX251bSA9IEFDWF9SWF9NRU1fQkxPQ0tTOwotCW1lbV9jb25mLT50eF9taW5fbWVtX2Jsb2NrX251bSA9IEFDWF9UWF9NSU5fTUVNX0JMT0NLUzsKLQltZW1fY29uZi0+bnVtX3NzaWRfcHJvZmlsZXMgPSBBQ1hfTlVNX1NTSURfUFJPRklMRVM7Ci0JbWVtX2NvbmYtPnRvdGFsX3R4X2Rlc2NyaXB0b3JzID0gY3B1X3RvX2xlMzIoQUNYX1RYX0RFU0NSSVBUT1JTKTsKLQotCXJldCA9IHdsMTI3MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfTUVNX0NGRywgbWVtX2NvbmYsCi0JCQkJICAgc2l6ZW9mKCptZW1fY29uZikpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXdsMTI3MV93YXJuaW5nKCJ3bDEyNzEgbWVtIGNvbmZpZyBmYWlsZWQ6ICVkIiwgcmV0KTsKLQkJZ290byBvdXQ7Ci0JfQotCi1vdXQ6Ci0Ja2ZyZWUobWVtX2NvbmYpOwotCXJldHVybiByZXQ7Ci19Ci0KLWludCB3bDEyNzFfYWN4X2luaXRfbWVtX2NvbmZpZyhzdHJ1Y3Qgd2wxMjcxICp3bCkKLXsKLQlpbnQgcmV0OwotCi0JcmV0ID0gd2wxMjcxX2FjeF9tZW1fY2ZnKHdsKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXdsLT50YXJnZXRfbWVtX21hcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB3bDEyNzFfYWN4X21lbV9tYXApLAotCQkJCSAgICAgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF3bC0+dGFyZ2V0X21lbV9tYXApIHsKLQkJd2wxMjcxX2Vycm9yKCJjb3VsZG4ndCBhbGxvY2F0ZSB0YXJnZXQgbWVtb3J5IG1hcCIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQkvKiB3ZSBub3cgYXNrIGZvciB0aGUgZmlybXdhcmUgYnVpbHQgbWVtb3J5IG1hcCAqLwotCXJldCA9IHdsMTI3MV9hY3hfbWVtX21hcCh3bCwgKHZvaWQgKil3bC0+dGFyZ2V0X21lbV9tYXAsCi0JCQkJIHNpemVvZihzdHJ1Y3Qgd2wxMjcxX2FjeF9tZW1fbWFwKSk7Ci0JaWYgKHJldCA8IDApIHsKLQkJd2wxMjcxX2Vycm9yKCJjb3VsZG4ndCByZXRyaWV2ZSBmaXJtd2FyZSBtZW1vcnkgbWFwIik7Ci0JCWtmcmVlKHdsLT50YXJnZXRfbWVtX21hcCk7Ci0JCXdsLT50YXJnZXRfbWVtX21hcCA9IE5VTEw7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JLyogaW5pdGlhbGl6ZSBUWCBibG9jayBib29rIGtlZXBpbmcgKi8KLQl3bC0+dHhfYmxvY2tzX2F2YWlsYWJsZSA9Ci0JCWxlMzJfdG9fY3B1KHdsLT50YXJnZXRfbWVtX21hcC0+bnVtX3R4X21lbV9ibG9ja3MpOwotCXdsMTI3MV9kZWJ1ZyhERUJVR19UWCwgImF2YWlsYWJsZSB0eCBibG9ja3M6ICVkIiwKLQkJICAgICB3bC0+dHhfYmxvY2tzX2F2YWlsYWJsZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IHdsMTI3MV9hY3hfaW5pdF9yeF9pbnRlcnJ1cHQoc3RydWN0IHdsMTI3MSAqd2wpCi17Ci0Jc3RydWN0IHdsMTI3MV9hY3hfcnhfY29uZmlnX29wdCAqcnhfY29uZjsKLQlpbnQgcmV0OwotCi0Jd2wxMjcxX2RlYnVnKERFQlVHX0FDWCwgIndsMTI3MSByeCBpbnRlcnJ1cHQgY29uZmlnIik7Ci0KLQlyeF9jb25mID0ga3phbGxvYyhzaXplb2YoKnJ4X2NvbmYpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXJ4X2NvbmYpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JcnhfY29uZi0+dGhyZXNob2xkID0gY3B1X3RvX2xlMTYod2wtPmNvbmYucnguaXJxX3BrdF90aHJlc2hvbGQpOwotCXJ4X2NvbmYtPnRpbWVvdXQgPSBjcHVfdG9fbGUxNih3bC0+Y29uZi5yeC5pcnFfdGltZW91dCk7Ci0JcnhfY29uZi0+bWJsa190aHJlc2hvbGQgPSBjcHVfdG9fbGUxNih3bC0+Y29uZi5yeC5pcnFfYmxrX3RocmVzaG9sZCk7Ci0JcnhfY29uZi0+cXVldWVfdHlwZSA9IHdsLT5jb25mLnJ4LnF1ZXVlX3R5cGU7Ci0KLQlyZXQgPSB3bDEyNzFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX1JYX0NPTkZJR19PUFQsIHJ4X2NvbmYsCi0JCQkJICAgc2l6ZW9mKCpyeF9jb25mKSk7Ci0JaWYgKHJldCA8IDApIHsKLQkJd2wxMjcxX3dhcm5pbmcoIndsMTI3MSByeCBjb25maWcgb3B0IGZhaWxlZDogJWQiLCByZXQpOwotCQlnb3RvIG91dDsKLQl9Ci0KLW91dDoKLQlrZnJlZShyeF9jb25mKTsKLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgd2wxMjcxX2FjeF9iZXRfZW5hYmxlKHN0cnVjdCB3bDEyNzEgKndsLCBib29sIGVuYWJsZSkKLXsKLQlzdHJ1Y3Qgd2wxMjcxX2FjeF9iZXRfZW5hYmxlICphY3ggPSBOVUxMOwotCWludCByZXQgPSAwOwotCi0Jd2wxMjcxX2RlYnVnKERFQlVHX0FDWCwgImFjeCBiZXQgZW5hYmxlIik7Ci0KLQlpZiAoZW5hYmxlICYmIHdsLT5jb25mLmNvbm4uYmV0X2VuYWJsZSA9PSBDT05GX0JFVF9NT0RFX0RJU0FCTEUpCi0JCWdvdG8gb3V0OwotCi0JYWN4ID0ga3phbGxvYyhzaXplb2YoKmFjeCksIEdGUF9LRVJORUwpOwotCWlmICghYWN4KSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0OwotCX0KLQotCWFjeC0+ZW5hYmxlID0gZW5hYmxlID8gQ09ORl9CRVRfTU9ERV9FTkFCTEUgOiBDT05GX0JFVF9NT0RFX0RJU0FCTEU7Ci0JYWN4LT5tYXhfY29uc2VjdXRpdmUgPSB3bC0+Y29uZi5jb25uLmJldF9tYXhfY29uc2VjdXRpdmU7Ci0KLQlyZXQgPSB3bDEyNzFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX0JFVF9FTkFCTEUsIGFjeCwgc2l6ZW9mKCphY3gpKTsKLQlpZiAocmV0IDwgMCkgewotCQl3bDEyNzFfd2FybmluZygiYWN4IGJldCBlbmFibGUgZmFpbGVkOiAlZCIsIHJldCk7Ci0JCWdvdG8gb3V0OwotCX0KLQotb3V0OgotCWtmcmVlKGFjeCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotaW50IHdsMTI3MV9hY3hfYXJwX2lwX2ZpbHRlcihzdHJ1Y3Qgd2wxMjcxICp3bCwgYm9vbCBlbmFibGUsIF9fYmUzMiBhZGRyZXNzKQotewotCXN0cnVjdCB3bDEyNzFfYWN4X2FycF9maWx0ZXIgKmFjeDsKLQlpbnQgcmV0OwotCi0Jd2wxMjcxX2RlYnVnKERFQlVHX0FDWCwgImFjeCBhcnAgaXAgZmlsdGVyLCBlbmFibGU6ICVkIiwgZW5hYmxlKTsKLQotCWFjeCA9IGt6YWxsb2Moc2l6ZW9mKCphY3gpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWFjeCkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlhY3gtPnZlcnNpb24gPSBBQ1hfSVBWNF9WRVJTSU9OOwotCWFjeC0+ZW5hYmxlID0gZW5hYmxlOwotCi0JaWYgKGVuYWJsZSA9PSB0cnVlKQotCQltZW1jcHkoYWN4LT5hZGRyZXNzLCAmYWRkcmVzcywgQUNYX0lQVjRfQUREUl9TSVpFKTsKLQotCXJldCA9IHdsMTI3MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfQVJQX0lQX0ZJTFRFUiwKLQkJCQkgICBhY3gsIHNpemVvZigqYWN4KSk7Ci0JaWYgKHJldCA8IDApIHsKLQkJd2wxMjcxX3dhcm5pbmcoImZhaWxlZCB0byBzZXQgYXJwIGlwIGZpbHRlcjogJWQiLCByZXQpOwotCQlnb3RvIG91dDsKLQl9Ci0KLW91dDoKLQlrZnJlZShhY3gpOwotCXJldHVybiByZXQ7Ci19Ci0KLWludCB3bDEyNzFfYWN4X3BtX2NvbmZpZyhzdHJ1Y3Qgd2wxMjcxICp3bCkKLXsKLQlzdHJ1Y3Qgd2wxMjcxX2FjeF9wbV9jb25maWcgKmFjeCA9IE5VTEw7Ci0Jc3RydWN0ICBjb25mX3BtX2NvbmZpZ19zZXR0aW5ncyAqYyA9ICZ3bC0+Y29uZi5wbV9jb25maWc7Ci0JaW50IHJldCA9IDA7Ci0KLQl3bDEyNzFfZGVidWcoREVCVUdfQUNYLCAiYWN4IHBtIGNvbmZpZyIpOwotCi0JYWN4ID0ga3phbGxvYyhzaXplb2YoKmFjeCksIEdGUF9LRVJORUwpOwotCWlmICghYWN4KSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0OwotCX0KLQotCWFjeC0+aG9zdF9jbGtfc2V0dGxpbmdfdGltZSA9IGNwdV90b19sZTMyKGMtPmhvc3RfY2xrX3NldHRsaW5nX3RpbWUpOwotCWFjeC0+aG9zdF9mYXN0X3dha2V1cF9zdXBwb3J0ID0gYy0+aG9zdF9mYXN0X3dha2V1cF9zdXBwb3J0OwotCi0JcmV0ID0gd2wxMjcxX2NtZF9jb25maWd1cmUod2wsIEFDWF9QTV9DT05GSUcsIGFjeCwgc2l6ZW9mKCphY3gpKTsKLQlpZiAocmV0IDwgMCkgewotCQl3bDEyNzFfd2FybmluZygiYWN4IHBtIGNvbmZpZyBmYWlsZWQ6ICVkIiwgcmV0KTsKLQkJZ290byBvdXQ7Ci0JfQotCi1vdXQ6Ci0Ja2ZyZWUoYWN4KTsKLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgd2wxMjcxX2FjeF9rZWVwX2FsaXZlX21vZGUoc3RydWN0IHdsMTI3MSAqd2wsIGJvb2wgZW5hYmxlKQotewotCXN0cnVjdCB3bDEyNzFfYWN4X2tlZXBfYWxpdmVfbW9kZSAqYWN4ID0gTlVMTDsKLQlpbnQgcmV0ID0gMDsKLQotCXdsMTI3MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3gga2VlcCBhbGl2ZSBtb2RlOiAlZCIsIGVuYWJsZSk7Ci0KLQlhY3ggPSBremFsbG9jKHNpemVvZigqYWN4KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFhY3gpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JYWN4LT5lbmFibGVkID0gZW5hYmxlOwotCi0JcmV0ID0gd2wxMjcxX2NtZF9jb25maWd1cmUod2wsIEFDWF9LRUVQX0FMSVZFX01PREUsIGFjeCwgc2l6ZW9mKCphY3gpKTsKLQlpZiAocmV0IDwgMCkgewotCQl3bDEyNzFfd2FybmluZygiYWN4IGtlZXAgYWxpdmUgbW9kZSBmYWlsZWQ6ICVkIiwgcmV0KTsKLQkJZ290byBvdXQ7Ci0JfQotCi1vdXQ6Ci0Ja2ZyZWUoYWN4KTsKLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgd2wxMjcxX2FjeF9rZWVwX2FsaXZlX2NvbmZpZyhzdHJ1Y3Qgd2wxMjcxICp3bCwgdTggaW5kZXgsIHU4IHRwbF92YWxpZCkKLXsKLQlzdHJ1Y3Qgd2wxMjcxX2FjeF9rZWVwX2FsaXZlX2NvbmZpZyAqYWN4ID0gTlVMTDsKLQlpbnQgcmV0ID0gMDsKLQotCXdsMTI3MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3gga2VlcCBhbGl2ZSBjb25maWciKTsKLQotCWFjeCA9IGt6YWxsb2Moc2l6ZW9mKCphY3gpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWFjeCkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlhY3gtPnBlcmlvZCA9IGNwdV90b19sZTMyKHdsLT5jb25mLmNvbm4ua2VlcF9hbGl2ZV9pbnRlcnZhbCk7Ci0JYWN4LT5pbmRleCA9IGluZGV4OwotCWFjeC0+dHBsX3ZhbGlkYXRpb24gPSB0cGxfdmFsaWQ7Ci0JYWN4LT50cmlnZ2VyID0gQUNYX0tFRVBfQUxJVkVfTk9fVFg7Ci0KLQlyZXQgPSB3bDEyNzFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX1NFVF9LRUVQX0FMSVZFX0NPTkZJRywKLQkJCQkgICBhY3gsIHNpemVvZigqYWN4KSk7Ci0JaWYgKHJldCA8IDApIHsKLQkJd2wxMjcxX3dhcm5pbmcoImFjeCBrZWVwIGFsaXZlIGNvbmZpZyBmYWlsZWQ6ICVkIiwgcmV0KTsKLQkJZ290byBvdXQ7Ci0JfQotCi1vdXQ6Ci0Ja2ZyZWUoYWN4KTsKLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgd2wxMjcxX2FjeF9yc3NpX3Nucl90cmlnZ2VyKHN0cnVjdCB3bDEyNzEgKndsLCBib29sIGVuYWJsZSwKLQkJCQlzMTYgdGhvbGQsIHU4IGh5c3QpCi17Ci0Jc3RydWN0IHdsMTI3MV9hY3hfcnNzaV9zbnJfdHJpZ2dlciAqYWN4ID0gTlVMTDsKLQlpbnQgcmV0ID0gMDsKLQotCXdsMTI3MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggcnNzaSBzbnIgdHJpZ2dlciIpOwotCi0JYWN4ID0ga3phbGxvYyhzaXplb2YoKmFjeCksIEdGUF9LRVJORUwpOwotCWlmICghYWN4KSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0OwotCX0KLQotCXdsLT5sYXN0X3Jzc2lfZXZlbnQgPSAtMTsKLQotCWFjeC0+cGFjaW5nID0gY3B1X3RvX2xlMTYod2wtPmNvbmYucm9hbV90cmlnZ2VyLnRyaWdnZXJfcGFjaW5nKTsKLQlhY3gtPm1ldHJpYyA9IFdMMTI3MV9BQ1hfVFJJR19NRVRSSUNfUlNTSV9CRUFDT047Ci0JYWN4LT50eXBlID0gV0wxMjcxX0FDWF9UUklHX1RZUEVfRURHRTsKLQlpZiAoZW5hYmxlKQotCQlhY3gtPmVuYWJsZSA9IFdMMTI3MV9BQ1hfVFJJR19FTkFCTEU7Ci0JZWxzZQotCQlhY3gtPmVuYWJsZSA9IFdMMTI3MV9BQ1hfVFJJR19ESVNBQkxFOwotCi0JYWN4LT5pbmRleCA9IFdMMTI3MV9BQ1hfVFJJR19JRFhfUlNTSTsKLQlhY3gtPmRpciA9IFdMMTI3MV9BQ1hfVFJJR19ESVJfQklESVI7Ci0JYWN4LT50aHJlc2hvbGQgPSBjcHVfdG9fbGUxNih0aG9sZCk7Ci0JYWN4LT5oeXN0ZXJlc2lzID0gaHlzdDsKLQotCXJldCA9IHdsMTI3MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfUlNTSV9TTlJfVFJJR0dFUiwgYWN4LCBzaXplb2YoKmFjeCkpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXdsMTI3MV93YXJuaW5nKCJhY3ggcnNzaSBzbnIgdHJpZ2dlciBzZXR0aW5nIGZhaWxlZDogJWQiLCByZXQpOwotCQlnb3RvIG91dDsKLQl9Ci0KLW91dDoKLQlrZnJlZShhY3gpOwotCXJldHVybiByZXQ7Ci19Ci0KLWludCB3bDEyNzFfYWN4X3Jzc2lfc25yX2F2Z193ZWlnaHRzKHN0cnVjdCB3bDEyNzEgKndsKQotewotCXN0cnVjdCB3bDEyNzFfYWN4X3Jzc2lfc25yX2F2Z193ZWlnaHRzICphY3ggPSBOVUxMOwotCXN0cnVjdCBjb25mX3JvYW1fdHJpZ2dlcl9zZXR0aW5ncyAqYyA9ICZ3bC0+Y29uZi5yb2FtX3RyaWdnZXI7Ci0JaW50IHJldCA9IDA7Ci0KLQl3bDEyNzFfZGVidWcoREVCVUdfQUNYLCAiYWN4IHJzc2kgc25yIGF2ZyB3ZWlnaHRzIik7Ci0KLQlhY3ggPSBremFsbG9jKHNpemVvZigqYWN4KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFhY3gpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JYWN4LT5yc3NpX2JlYWNvbiA9IGMtPmF2Z193ZWlnaHRfcnNzaV9iZWFjb247Ci0JYWN4LT5yc3NpX2RhdGEgPSBjLT5hdmdfd2VpZ2h0X3Jzc2lfZGF0YTsKLQlhY3gtPnNucl9iZWFjb24gPSBjLT5hdmdfd2VpZ2h0X3Nucl9iZWFjb247Ci0JYWN4LT5zbnJfZGF0YSA9IGMtPmF2Z193ZWlnaHRfc25yX2RhdGE7Ci0KLQlyZXQgPSB3bDEyNzFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX1JTU0lfU05SX1dFSUdIVFMsIGFjeCwgc2l6ZW9mKCphY3gpKTsKLQlpZiAocmV0IDwgMCkgewotCQl3bDEyNzFfd2FybmluZygiYWN4IHJzc2kgc25yIHRyaWdnZXIgd2VpZ2h0cyBmYWlsZWQ6ICVkIiwgcmV0KTsKLQkJZ290byBvdXQ7Ci0JfQotCi1vdXQ6Ci0Ja2ZyZWUoYWN4KTsKLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgd2wxMjcxX2FjeF90c2ZfaW5mbyhzdHJ1Y3Qgd2wxMjcxICp3bCwgdTY0ICptYWN0aW1lKQotewotCXN0cnVjdCB3bDEyNzFfYWN4X2Z3X3RzZl9pbmZvcm1hdGlvbiAqdHNmX2luZm87Ci0JaW50IHJldDsKLQotCXRzZl9pbmZvID0ga3phbGxvYyhzaXplb2YoKnRzZl9pbmZvKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF0c2ZfaW5mbykgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlyZXQgPSB3bDEyNzFfY21kX2ludGVycm9nYXRlKHdsLCBBQ1hfVFNGX0lORk8sCi0JCQkJICAgICB0c2ZfaW5mbywgc2l6ZW9mKCp0c2ZfaW5mbykpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXdsMTI3MV93YXJuaW5nKCJhY3ggdHNmIGluZm8gaW50ZXJyb2dhdGUgZmFpbGVkIik7Ci0JCWdvdG8gb3V0OwotCX0KLQotCSptYWN0aW1lID0gbGUzMl90b19jcHUodHNmX2luZm8tPmN1cnJlbnRfdHNmX2xvdykgfAotCQkoKHU2NCkgbGUzMl90b19jcHUodHNmX2luZm8tPmN1cnJlbnRfdHNmX2hpZ2gpIDw8IDMyKTsKLQotb3V0OgotCWtmcmVlKHRzZl9pbmZvKTsKLQlyZXR1cm4gcmV0OwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9hY3guaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfYWN4LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViYjM0MWQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9hY3guaAorKysgL2Rldi9udWxsCkBAIC0xLDEwOTggKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdsMTI3MQotICoKLSAqIENvcHlyaWdodCAoQykgMTk5OC0yMDA5IFRleGFzIEluc3RydW1lbnRzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTAgTm9raWEgQ29ycG9yYXRpb24KLSAqCi0gKiBDb250YWN0OiBMdWNpYW5vIENvZWxobyA8bHVjaWFuby5jb2VsaG9Abm9raWEuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQotICogMDIxMTAtMTMwMSBVU0EKLSAqCi0gKi8KLQotI2lmbmRlZiBfX1dMMTI3MV9BQ1hfSF9fCi0jZGVmaW5lIF9fV0wxMjcxX0FDWF9IX18KLQotI2luY2x1ZGUgIndsMTI3MS5oIgotI2luY2x1ZGUgIndsMTI3MV9jbWQuaCIKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLQotICAgIEhvc3QgSW50ZXJydXB0IFJlZ2lzdGVyIChXaUxpbmsgLT4gSG9zdCkKLQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBIVyBJbml0aWF0ZWQgaW50ZXJydXB0IFdhdGNoZG9nIHRpbWVyIGV4cGlyYXRpb24gKi8KLSNkZWZpbmUgV0wxMjcxX0FDWF9JTlRSX1dBVENIRE9HICAgICAgICAgICBCSVQoMCkKLS8qIEluaXQgc2VxdWVuY2UgaXMgZG9uZSAobWFza2VkIGludGVycnVwdCwgZGV0ZWN0aW9uIHRocm91Z2ggcG9sbGluZyBvbmx5ICkgKi8KLSNkZWZpbmUgV0wxMjcxX0FDWF9JTlRSX0lOSVRfQ09NUExFVEUgICAgICBCSVQoMSkKLS8qIEV2ZW50IHdhcyBlbnRlcmVkIHRvIEV2ZW50IE1CT1ggI0EqLwotI2RlZmluZSBXTDEyNzFfQUNYX0lOVFJfRVZFTlRfQSAgICAgICAgICAgIEJJVCgyKQotLyogRXZlbnQgd2FzIGVudGVyZWQgdG8gRXZlbnQgTUJPWCAjQiovCi0jZGVmaW5lIFdMMTI3MV9BQ1hfSU5UUl9FVkVOVF9CICAgICAgICAgICAgQklUKDMpCi0vKiBDb21tYW5kIHByb2Nlc3NpbmcgY29tcGxldGlvbiovCi0jZGVmaW5lIFdMMTI3MV9BQ1hfSU5UUl9DTURfQ09NUExFVEUgICAgICAgQklUKDQpCi0vKiBTaWduYWxpbmcgdGhlIGhvc3Qgb24gSFcgd2FrZXVwICovCi0jZGVmaW5lIFdMMTI3MV9BQ1hfSU5UUl9IV19BVkFJTEFCTEUgICAgICAgQklUKDUpCi0vKiBUaGUgTUlTQyBiaXQgaXMgdXNlZCBmb3IgYWdncmVnYXRpb24gb2YgUlgsIFR4Q29tcGxldGUgYW5kIFRYIHJhdGUgdXBkYXRlICovCi0jZGVmaW5lIFdMMTI3MV9BQ1hfSU5UUl9EQVRBICAgICAgICAgICAgICAgQklUKDYpCi0vKiBUcmFjZSBtZWFzc2dlIG9uIE1CT1ggI0EgKi8KLSNkZWZpbmUgV0wxMjcxX0FDWF9JTlRSX1RSQUNFX0EgICAgICAgICAgICBCSVQoNykKLS8qIFRyYWNlIG1lYXNzZ2Ugb24gTUJPWCAjQiAqLwotI2RlZmluZSBXTDEyNzFfQUNYX0lOVFJfVFJBQ0VfQiAgICAgICAgICAgIEJJVCg4KQotCi0jZGVmaW5lIFdMMTI3MV9BQ1hfSU5UUl9BTEwJCSAgIDB4RkZGRkZGRkYKLSNkZWZpbmUgV0wxMjcxX0FDWF9BTExfRVZFTlRTX1ZFQ1RPUiAgICAgICAoV0wxMjcxX0FDWF9JTlRSX1dBVENIRE9HICAgICAgfCBcCi0JCQkJCSAgICBXTDEyNzFfQUNYX0lOVFJfSU5JVF9DT01QTEVURSB8IFwKLQkJCQkJICAgIFdMMTI3MV9BQ1hfSU5UUl9FVkVOVF9BICAgICAgIHwgXAotCQkJCQkgICAgV0wxMjcxX0FDWF9JTlRSX0VWRU5UX0IgICAgICAgfCBcCi0JCQkJCSAgICBXTDEyNzFfQUNYX0lOVFJfQ01EX0NPTVBMRVRFICB8IFwKLQkJCQkJICAgIFdMMTI3MV9BQ1hfSU5UUl9IV19BVkFJTEFCTEUgIHwgXAotCQkJCQkgICAgV0wxMjcxX0FDWF9JTlRSX0RBVEEpCi0KLSNkZWZpbmUgV0wxMjcxX0lOVFJfTUFTSyAgICAgICAgICAgICAgICAgICAoV0wxMjcxX0FDWF9JTlRSX0VWRU5UX0EgICAgICB8IFwKLQkJCQkJICAgIFdMMTI3MV9BQ1hfSU5UUl9FVkVOVF9CICAgICAgfCBcCi0JCQkJCSAgICBXTDEyNzFfQUNYX0lOVFJfSFdfQVZBSUxBQkxFIHwgXAotCQkJCQkgICAgV0wxMjcxX0FDWF9JTlRSX0RBVEEpCi0KLS8qIFRhcmdldCdzIGluZm9ybWF0aW9uIGVsZW1lbnQgKi8KLXN0cnVjdCBhY3hfaGVhZGVyIHsKLQlzdHJ1Y3Qgd2wxMjcxX2NtZF9oZWFkZXIgY21kOwotCi0JLyogYWN4IChvciBpbmZvcm1hdGlvbiBlbGVtZW50KSBoZWFkZXIgKi8KLQlfX2xlMTYgaWQ7Ci0KLQkvKiBwYXlsb2FkIGxlbmd0aCAobm90IGluY2x1ZGluZyBoZWFkZXJzICovCi0JX19sZTE2IGxlbjsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBhY3hfZXJyb3JfY291bnRlciB7Ci0Jc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOwotCi0JLyogVGhlIG51bWJlciBvZiBQTENQIGVycm9ycyBzaW5jZSB0aGUgbGFzdCB0aW1lIHRoaXMgKi8KLQkvKiBpbmZvcm1hdGlvbiBlbGVtZW50IHdhcyBpbnRlcnJvZ2F0ZWQuIFRoaXMgZmllbGQgaXMgKi8KLQkvKiBhdXRvbWF0aWNhbGx5IGNsZWFyZWQgd2hlbiBpdCBpcyBpbnRlcnJvZ2F0ZWQuKi8KLQlfX2xlMzIgUExDUF9lcnJvcjsKLQotCS8qIFRoZSBudW1iZXIgb2YgRkNTIGVycm9ycyBzaW5jZSB0aGUgbGFzdCB0aW1lIHRoaXMgKi8KLQkvKiBpbmZvcm1hdGlvbiBlbGVtZW50IHdhcyBpbnRlcnJvZ2F0ZWQuIFRoaXMgZmllbGQgaXMgKi8KLQkvKiBhdXRvbWF0aWNhbGx5IGNsZWFyZWQgd2hlbiBpdCBpcyBpbnRlcnJvZ2F0ZWQuKi8KLQlfX2xlMzIgRkNTX2Vycm9yOwotCi0JLyogVGhlIG51bWJlciBvZiBNUERVcyB3aXRob3V0IFBMQ1AgaGVhZGVyIGVycm9ycyByZWNlaXZlZCovCi0JLyogc2luY2UgdGhlIGxhc3QgdGltZSB0aGlzIGluZm9ybWF0aW9uIGVsZW1lbnQgd2FzIGludGVycm9nYXRlZC4gKi8KLQkvKiBUaGlzIGZpZWxkIGlzIGF1dG9tYXRpY2FsbHkgY2xlYXJlZCB3aGVuIGl0IGlzIGludGVycm9nYXRlZC4qLwotCV9fbGUzMiB2YWxpZF9mcmFtZTsKLQotCS8qIHRoZSBudW1iZXIgb2YgbWlzc2VkIHNlcXVlbmNlIG51bWJlcnMgaW4gdGhlIHNxdWVudGlhbGx5ICovCi0JLyogdmFsdWVzIG9mIGZyYW1lcyBzZXEgbnVtYmVycyAqLwotCV9fbGUzMiBzZXFfbnVtX21pc3M7Ci19IF9fcGFja2VkOwotCi1lbnVtIHdsMTI3MV9wc21fbW9kZSB7Ci0JLyogQWN0aXZlIG1vZGUgKi8KLQlXTDEyNzFfUFNNX0NBTSA9IDAsCi0KLQkvKiBQb3dlciBzYXZlIG1vZGUgKi8KLQlXTDEyNzFfUFNNX1BTID0gMSwKLQotCS8qIEV4dHJlbWUgbG93IHBvd2VyICovCi0JV0wxMjcxX1BTTV9FTFAgPSAyLAotfTsKLQotc3RydWN0IGFjeF9zbGVlcF9hdXRoIHsKLQlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7Ci0KLQkvKiBUaGUgc2xlZXAgbGV2ZWwgYXV0aG9yaXphdGlvbiBvZiB0aGUgZGV2aWNlLiAqLwotCS8qIDAgLSBBbHdheXMgYWN0aXZlKi8KLQkvKiAxIC0gUG93ZXIgZG93biBtb2RlOiBsaWdodCAvIGZhc3Qgc2xlZXAqLwotCS8qIDIgLSBFTFAgbW9kZTogRGVlcCAvIE1heCBzbGVlcCovCi0JdTggIHNsZWVwX2F1dGg7Ci0JdTggIHBhZGRpbmdbM107Ci19IF9fcGFja2VkOwotCi1lbnVtIHsKLQlIT1NUSUZfUENJX01BU1RFUl9IT1NUX0lORElSRUNULAotCUhPU1RJRl9QQ0lfTUFTVEVSX0hPU1RfRElSRUNULAotCUhPU1RJRl9TTEFWRSwKLQlIT1NUSUZfUEtUX1JJTkcsCi0JSE9TVElGX0RPTlRDQVJFID0gMHhGRgotfTsKLQotI2RlZmluZSBERUZBVUxUX1VDQVNUX1BSSU9SSVRZICAgICAgICAgIDAKLSNkZWZpbmUgREVGQVVMVF9SWF9RX1BSSU9SSVRZICAgICAgICAgICAwCi0jZGVmaW5lIERFRkFVTFRfTlVNX1NUQVRJT05TICAgICAgICAgICAgMQotI2RlZmluZSBERUZBVUxUX1JYUV9QUklPUklUWSAgICAgICAgICAgIDAgLyogbG93IDAgLi4gMTUgaGlnaCAgKi8KLSNkZWZpbmUgREVGQVVMVF9SWFFfVFlQRSAgICAgICAgICAgICAgICAweDA3ICAgIC8qIEFsbCBmcmFtZXMsIERhdGEvQ3RybC9NZ210ICovCi0jZGVmaW5lIFRSQUNFX0JVRkZFUl9NQVhfU0laRSAgICAgICAgICAgMjU2Ci0KLSNkZWZpbmUgIERQX1JYX1BBQ0tFVF9SSU5HX0NIVU5LX1NJWkUgMTYwMAotI2RlZmluZSAgRFBfVFhfUEFDS0VUX1JJTkdfQ0hVTktfU0laRSAxNjAwCi0jZGVmaW5lICBEUF9SWF9QQUNLRVRfUklOR19DSFVOS19OVU0gMgotI2RlZmluZSAgRFBfVFhfUEFDS0VUX1JJTkdfQ0hVTktfTlVNIDIKLSNkZWZpbmUgIERQX1RYX0NPTVBMRVRFX1RJTUVfT1VUIDIwCi0KLSNkZWZpbmUgVFhfTVNEVV9MSUZFVElNRV9NSU4gICAgICAgMAotI2RlZmluZSBUWF9NU0RVX0xJRkVUSU1FX01BWCAgICAgICAzMDAwCi0jZGVmaW5lIFRYX01TRFVfTElGRVRJTUVfREVGICAgICAgIDUxMgotI2RlZmluZSBSWF9NU0RVX0xJRkVUSU1FX01JTiAgICAgICAwCi0jZGVmaW5lIFJYX01TRFVfTElGRVRJTUVfTUFYICAgICAgIDB4RkZGRkZGRkYKLSNkZWZpbmUgUlhfTVNEVV9MSUZFVElNRV9ERUYgICAgICAgNTEyMDAwCi0KLXN0cnVjdCBhY3hfcnhfbXNkdV9saWZldGltZSB7Ci0Jc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOwotCi0JLyoKLQkgKiBUaGUgbWF4aW11bSBhbW91bnQgb2YgdGltZSwgaW4gVFUsIGJlZm9yZSB0aGUKLQkgKiBmaXJtd2FyZSBkaXNjYXJkcyB0aGUgTVNEVS4KLQkgKi8KLQlfX2xlMzIgbGlmZXRpbWU7Ci19IF9fcGFja2VkOwotCi0vKgotICogUlggQ29uZmlnIE9wdGlvbnMgVGFibGUKLSAqIEJpdAkJRGVmaW5pdGlvbgotICogPT09CQk9PT09PT09PT09Ci0gKiAzMToxNAkJUmVzZXJ2ZWQKLSAqIDEzCQlDb3B5IFJYIFN0YXR1cyAtIHdoZW4gc2V0LCB3cml0ZSB0aHJlZSByZWNlaXZlIHN0YXR1cyB3b3JkcwotICoJCXRvIHRvcCBvZiByeCdkIE1QRFVzLgotICoJCVdoZW4gY2xlYXJlZCwgZG8gbm90IHdyaXRlIHRocmVlIHN0YXR1cyB3b3JkcyAoYWRkZWQgcmV2IDEuNSkKLSAqIDEyCQlSZXNlcnZlZAotICogMTEJCVJYIENvbXBsZXRlIHVwb24gRkNTIGVycm9yIC0gd2hlbiBzZXQsIGdpdmUgcnggY29tcGxldGUKLSAqCQlpbnRlcnJ1cHQgZm9yIEZDUyBlcnJvcnMsIGFmdGVyIHRoZSByeCBmaWx0ZXJpbmcsIGUuZy4gdW5pY2FzdAotICoJCWZyYW1lcyBub3QgdG8gdXMgd2l0aCBGQ1MgZXJyb3Igd2lsbCBub3QgZ2VuZXJhdGUgYW4gaW50ZXJydXB0LgotICogMTAJCVNTSUQgRmlsdGVyIEVuYWJsZSAtIFdoZW4gc2V0LCB0aGUgV2lMaW5rIGRpc2NhcmRzIGFsbCBiZWFjb24sCi0gKgkgICAgICAgIHByb2JlIHJlcXVlc3QsIGFuZCBwcm9iZSByZXNwb25zZSBmcmFtZXMgd2l0aCBhbiBTU0lEIHRoYXQgZG9lcwotICoJCW5vdCBtYXRjaCB0aGUgU1NJRCBzcGVjaWZpZWQgYnkgdGhlIGhvc3QgaW4gdGhlIFNUQVJUL0pPSU4KLSAqCQljb21tYW5kLgotICoJCVdoZW4gY2xlYXIsIHRoZSBXaUxpbmsgcmVjZWl2ZXMgZnJhbWVzIHdpdGggYW55IFNTSUQuCi0gKiA5CQlCcm9hZGNhc3QgRmlsdGVyIEVuYWJsZSAtIFdoZW4gc2V0LCB0aGUgV2lMaW5rIGRpc2NhcmRzIGFsbAotICoJCWJyb2FkY2FzdCBmcmFtZXMuIFdoZW4gY2xlYXIsIHRoZSBXaUxpbmsgcmVjZWl2ZXMgYWxsIHJlY2VpdmVkCi0gKgkJYnJvYWRjYXN0IGZyYW1lcy4KLSAqIDg6NgkJUmVzZXJ2ZWQKLSAqIDUJCUJTU0lEIEZpbHRlciBFbmFibGUgLSBXaGVuIHNldCwgdGhlIFdpTGluayBkaXNjYXJkcyBhbnkgZnJhbWVzCi0gKgkJd2l0aCBhIEJTU0lEIHRoYXQgZG9lcyBub3QgbWF0Y2ggdGhlIEJTU0lEIHNwZWNpZmllZCBieSB0aGUKLSAqCQlob3N0LgotICoJCVdoZW4gY2xlYXIsIHRoZSBXaUxpbmsgcmVjZWl2ZXMgZnJhbWVzIGZyb20gYW55IEJTU0lELgotICogNAkJTUFDIEFkZHIgRmlsdGVyIC0gV2hlbiBzZXQsIHRoZSBXaUxpbmsgZGlzY2FyZHMgYW55IGZyYW1lcwotICoJCXdpdGggYSBkZXN0aW5hdGlvbiBhZGRyZXNzIHRoYXQgZG9lcyBub3QgbWF0Y2ggdGhlIE1BQyBhZGRyZXNzCi0gKgkJb2YgdGhlIGFkYXB0b3IuCi0gKgkJV2hlbiBjbGVhciwgdGhlIFdpTGluayByZWNlaXZlcyBmcmFtZXMgZGVzdGluZWQgdG8gYW55IE1BQwotICoJCWFkZHJlc3MuCi0gKiAzCQlQcm9taXNjdW91cyAtIFdoZW4gc2V0LCB0aGUgV2lMaW5rIHJlY2VpdmVzIGFsbCB2YWxpZCBmcmFtZXMKLSAqCQkoaS5lLiwgYWxsIGZyYW1lcyB0aGF0IHBhc3MgdGhlIEZDUyBjaGVjaykuCi0gKgkJV2hlbiBjbGVhciwgb25seSBmcmFtZXMgdGhhdCBwYXNzIHRoZSBvdGhlciBmaWx0ZXJzIHNwZWNpZmllZAotICoJCWFyZSByZWNlaXZlZC4KLSAqIDIJCUZDUyAtIFdoZW4gc2V0LCB0aGUgV2lMaW5rIGluY2x1ZGVzIHRoZSBGQ1Mgd2l0aCB0aGUgcmVjZWl2ZWQKLSAqCQlmcmFtZS4KLSAqCQlXaGVuIGNsZWFyZWQsIHRoZSBGQ1MgaXMgZGlzY2FyZGVkLgotICogMQkJUExDUCBoZWFkZXIgLSBXaGVuIHNldCwgd3JpdGUgYWxsIGRhdGEgZnJvbSBiYXNlYmFuZCB0byBmcmFtZQotICoJCWJ1ZmZlciBpbmNsdWRpbmcgUEhZIGhlYWRlci4KLSAqIDAJCVJlc2VydmVkIC0gQWx3YXlzIGVxdWFsIHRvIDAuCi0gKgotICogUlggRmlsdGVyIE9wdGlvbnMgVGFibGUKLSAqIEJpdAkJRGVmaW5pdGlvbgotICogPT09CQk9PT09PT09PT09Ci0gKiAzMToxMgkJUmVzZXJ2ZWQgLSBBbHdheXMgZXF1YWwgdG8gMC4KLSAqIDExCQlBc3NvY2lhdGlvbiAtIFdoZW4gc2V0LCB0aGUgV2lMaW5rIHJlY2VpdmVzIGFsbCBhc3NvY2lhdGlvbgotICoJCXJlbGF0ZWQgZnJhbWVzIChhc3NvY2lhdGlvbiByZXF1ZXN0L3Jlc3BvbnNlLCByZWFzc29jYXRpb24KLSAqCQlyZXF1ZXN0L3Jlc3BvbnNlLCBhbmQgZGlzYXNzb2NpYXRpb24pLiBXaGVuIGNsZWFyLCB0aGVzZSBmcmFtZXMKLSAqCQlhcmUgZGlzY2FyZGVkLgotICogMTAJCUF1dGgvRGUgYXV0aCAtIFdoZW4gc2V0LCB0aGUgV2lMaW5rIHJlY2VpdmVzIGFsbCBhdXRoZW50aWNhdGlvbgotICoJCWFuZCBkZS1hdXRoZW50aWNhdGlvbiBmcmFtZXMuIFdoZW4gY2xlYXIsIHRoZXNlIGZyYW1lcyBhcmUKLSAqCQlkaXNjYXJkZWQuCi0gKiA5CQlCZWFjb24gLSBXaGVuIHNldCwgdGhlIFdpTGluayByZWNlaXZlcyBhbGwgYmVhY29uIGZyYW1lcy4KLSAqCQlXaGVuIGNsZWFyLCB0aGVzZSBmcmFtZXMgYXJlIGRpc2NhcmRlZC4KLSAqIDgJCUNvbnRlbnRpb24gRnJlZSAtIFdoZW4gc2V0LCB0aGUgV2lMaW5rIHJlY2VpdmVzIGFsbCBjb250ZW50aW9uCi0gKgkJZnJlZSBmcmFtZXMuCi0gKgkJV2hlbiBjbGVhciwgdGhlc2UgZnJhbWVzIGFyZSBkaXNjYXJkZWQuCi0gKiA3CQlDb250cm9sIC0gV2hlbiBzZXQsIHRoZSBXaUxpbmsgcmVjZWl2ZXMgYWxsIGNvbnRyb2wgZnJhbWVzLgotICoJCVdoZW4gY2xlYXIsIHRoZXNlIGZyYW1lcyBhcmUgZGlzY2FyZGVkLgotICogNgkJRGF0YSAtIFdoZW4gc2V0LCB0aGUgV2lMaW5rIHJlY2VpdmVzIGFsbCBkYXRhIGZyYW1lcy4KLSAqCQlXaGVuIGNsZWFyLCB0aGVzZSBmcmFtZXMgYXJlIGRpc2NhcmRlZC4KLSAqIDUJCUZDUyBFcnJvciAtIFdoZW4gc2V0LCB0aGUgV2lMaW5rIHJlY2VpdmVzIGZyYW1lcyB0aGF0IGhhdmUgRkNTCi0gKgkJZXJyb3JzLgotICoJCVdoZW4gY2xlYXIsIHRoZXNlIGZyYW1lcyBhcmUgZGlzY2FyZGVkLgotICogNAkJTWFuYWdlbWVudCAtIFdoZW4gc2V0LCB0aGUgV2lMaW5rIHJlY2VpdmVzIGFsbCBtYW5hZ2VtZW50Ci0gKgkJZnJhbWVzLgotICoJCVdoZW4gY2xlYXIsIHRoZXNlIGZyYW1lcyBhcmUgZGlzY2FyZGVkLgotICogMwkJUHJvYmUgUmVxdWVzdCAtIFdoZW4gc2V0LCB0aGUgV2lMaW5rIHJlY2VpdmVzIGFsbCBwcm9iZSByZXF1ZXN0Ci0gKgkJZnJhbWVzLgotICoJCVdoZW4gY2xlYXIsIHRoZXNlIGZyYW1lcyBhcmUgZGlzY2FyZGVkLgotICogMgkJUHJvYmUgUmVzcG9uc2UgLSBXaGVuIHNldCwgdGhlIFdpTGluayByZWNlaXZlcyBhbGwgcHJvYmUKLSAqCQlyZXNwb25zZSBmcmFtZXMuCi0gKgkJV2hlbiBjbGVhciwgdGhlc2UgZnJhbWVzIGFyZSBkaXNjYXJkZWQuCi0gKiAxCQlSVFMvQ1RTL0FDSyAtIFdoZW4gc2V0LCB0aGUgV2lMaW5rIHJlY2VpdmVzIGFsbCBSVFMsIENUUyBhbmQgQUNLCi0gKgkJZnJhbWVzLgotICoJCVdoZW4gY2xlYXIsIHRoZXNlIGZyYW1lcyBhcmUgZGlzY2FyZGVkLgotICogMAkJUnN2ZCBUeXBlL1N1YiBUeXBlIC0gV2hlbiBzZXQsIHRoZSBXaUxpbmsgcmVjZWl2ZXMgYWxsIGZyYW1lcwotICoJCXRoYXQgaGF2ZSByZXNlcnZlZCBmcmFtZSB0eXBlcyBhbmQgc3ViIHR5cGVzIGFzIGRlZmluZWQgYnkgdGhlCi0gKgkJODAyLjExIHNwZWNpZmljYXRpb24uCi0gKgkJV2hlbiBjbGVhciwgdGhlc2UgZnJhbWVzIGFyZSBkaXNjYXJkZWQuCi0gKi8KLXN0cnVjdCBhY3hfcnhfY29uZmlnIHsKLQlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7Ci0KLQlfX2xlMzIgY29uZmlnX29wdGlvbnM7Ci0JX19sZTMyIGZpbHRlcl9vcHRpb25zOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGFjeF9wYWNrZXRfZGV0ZWN0aW9uIHsKLQlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7Ci0KLQlfX2xlMzIgdGhyZXNob2xkOwotfSBfX3BhY2tlZDsKLQotCi1lbnVtIGFjeF9zbG90X3R5cGUgewotCVNMT1RfVElNRV9MT05HID0gMCwKLQlTTE9UX1RJTUVfU0hPUlQgPSAxLAotCURFRkFVTFRfU0xPVF9USU1FID0gU0xPVF9USU1FX1NIT1JULAotCU1BWF9TTE9UX1RJTUVTID0gMHhGRgotfTsKLQotI2RlZmluZSBTVEFUSU9OX1dPTkVfSU5ERVggMAotCi1zdHJ1Y3QgYWN4X3Nsb3QgewotCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKLQotCXU4IHdvbmVfaW5kZXg7IC8qIFJlc2VydmVkICovCi0JdTggc2xvdF90aW1lOwotCXU4IHJlc2VydmVkWzZdOwotfSBfX3BhY2tlZDsKLQotCi0jZGVmaW5lIEFDWF9NQ19BRERSRVNTX0dST1VQX01BWAkoOCkKLSNkZWZpbmUgQUREUkVTU19HUk9VUF9NQVhfTEVOCSAgICAgICAgKEVUSF9BTEVOICogQUNYX01DX0FERFJFU1NfR1JPVVBfTUFYKQotCi1zdHJ1Y3QgYWN4X2RvdDExX2dycF9hZGRyX3RibCB7Ci0Jc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOwotCi0JdTggZW5hYmxlZDsKLQl1OCBudW1fZ3JvdXBzOwotCXU4IHBhZFsyXTsKLQl1OCBtYWNfdGFibGVbQUREUkVTU19HUk9VUF9NQVhfTEVOXTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBhY3hfcnhfdGltZW91dCB7Ci0Jc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOwotCi0JX19sZTE2IHBzX3BvbGxfdGltZW91dDsKLQlfX2xlMTYgdXBzZF90aW1lb3V0OwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGFjeF9ydHNfdGhyZXNob2xkIHsKLQlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7Ci0KLQlfX2xlMTYgdGhyZXNob2xkOwotCXU4IHBhZFsyXTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBhY3hfYmVhY29uX2ZpbHRlcl9vcHRpb24gewotCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKLQotCXU4IGVuYWJsZTsKLQotCS8qCi0JICogVGhlIG51bWJlciBvZiBiZWFjb25zIHdpdGhvdXQgdGhlIHVuaWNhc3QgVElNCi0JICogYml0IHNldCB0aGF0IHRoZSBmaXJtd2FyZSBidWZmZXJzIGJlZm9yZQotCSAqIHNpZ25hbGluZyB0aGUgaG9zdCBhYm91dCByZWFkeSBmcmFtZXMuCi0JICogV2hlbiBzZXQgdG8gMCBhbmQgdGhlIGZpbHRlciBpcyBlbmFibGVkLCBiZWFjb25zCi0JICogd2l0aG91dCB0aGUgdW5pY2FzdCBUSU0gYml0IHNldCBhcmUgZHJvcHBlZC4KLQkgKi8KLQl1OCBtYXhfbnVtX2JlYWNvbnM7Ci0JdTggcGFkWzJdOwotfSBfX3BhY2tlZDsKLQotLyoKLSAqIEFDWEJlYWNvbkZpbHRlckVudHJ5IChub3QgMjIxKQotICogQnl0ZSBPZmZzZXQgICAgIFNpemUgKEJ5dGVzKSAgICBEZWZpbml0aW9uCi0gKiA9PT09PT09PT09PSAgICAgPT09PT09PT09PT09ICAgID09PT09PT09PT0KLSAqIDAgICAgICAgICAgICAgICAxICAgICAgICAgICAgICAgSUUgaWRlbnRpZmllcgotICogMSAgICAgICAgICAgICAgIDEgICAgICAgICAgICAgICBUcmVhdG1lbnQgYml0IG1hc2sKLSAqCi0gKiBBQ1hCZWFjb25GaWx0ZXJFbnRyeSAoMjIxKQotICogQnl0ZSBPZmZzZXQgICAgIFNpemUgKEJ5dGVzKSAgICBEZWZpbml0aW9uCi0gKiA9PT09PT09PT09PSAgICAgPT09PT09PT09PT09ICAgID09PT09PT09PT0KLSAqIDAgICAgICAgICAgICAgICAxICAgICAgICAgICAgICAgSUUgaWRlbnRpZmllcgotICogMSAgICAgICAgICAgICAgIDEgICAgICAgICAgICAgICBUcmVhdG1lbnQgYml0IG1hc2sKLSAqIDIgICAgICAgICAgICAgICAzICAgICAgICAgICAgICAgT1VJCi0gKiA1ICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgIFR5cGUKLSAqIDYgICAgICAgICAgICAgICAyICAgICAgICAgICAgICAgVmVyc2lvbgotICoKLSAqCi0gKiBUcmVhdG1lbnQgYml0IG1hc2sgLSBUaGUgaW5mb3JtYXRpb24gZWxlbWVudCBoYW5kbGluZzoKLSAqIGJpdCAwIC0gVGhlIGluZm9ybWF0aW9uIGVsZW1lbnQgaXMgY29tcGFyZWQgYW5kIHRyYW5zZmVycmVkCi0gKiBpbiBjYXNlIG9mIGNoYW5nZS4KLSAqIGJpdCAxIC0gVGhlIGluZm9ybWF0aW9uIGVsZW1lbnQgaXMgdHJhbnNmZXJyZWQgdG8gdGhlIGhvc3QKLSAqIHdpdGggZWFjaCBhcHBlYXJhbmNlIG9yIGRpc2FwcGVhcmFuY2UuCi0gKiBOb3RlIHRoYXQgYm90aCBiaXRzIGNhbiBiZSBzZXQgYXQgdGhlIHNhbWUgdGltZS4KLSAqLwotI2RlZmluZQlCRUFDT05fRklMVEVSX1RBQkxFX01BWF9JRV9OVU0JCSAgICAgICAoMzIpCi0jZGVmaW5lIEJFQUNPTl9GSUxURVJfVEFCTEVfTUFYX1ZFTkRPUl9TUEVDSUZJQ19JRV9OVU0gKDYpCi0jZGVmaW5lIEJFQUNPTl9GSUxURVJfVEFCTEVfSUVfRU5UUllfU0laRQkgICAgICAgKDIpCi0jZGVmaW5lIEJFQUNPTl9GSUxURVJfVEFCTEVfRVhUUkFfVkVORE9SX1NQRUNJRklDX0lFX1NJWkUgKDYpCi0jZGVmaW5lIEJFQUNPTl9GSUxURVJfVEFCTEVfTUFYX1NJWkUgKChCRUFDT05fRklMVEVSX1RBQkxFX01BWF9JRV9OVU0gKiBcCi0JCQkgICAgQkVBQ09OX0ZJTFRFUl9UQUJMRV9JRV9FTlRSWV9TSVpFKSArIFwKLQkJCSAgIChCRUFDT05fRklMVEVSX1RBQkxFX01BWF9WRU5ET1JfU1BFQ0lGSUNfSUVfTlVNICogXAotCQkJICAgIEJFQUNPTl9GSUxURVJfVEFCTEVfRVhUUkFfVkVORE9SX1NQRUNJRklDX0lFX1NJWkUpKQotCi1zdHJ1Y3QgYWN4X2JlYWNvbl9maWx0ZXJfaWVfdGFibGUgewotCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKLQotCXU4IG51bV9pZTsKLQl1OCBwYWRbM107Ci0JdTggdGFibGVbQkVBQ09OX0ZJTFRFUl9UQUJMRV9NQVhfU0laRV07Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgYWN4X2Nvbm5fbW9uaXRfcGFyYW1zIHsKLSAgICAgICBzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7Ci0KLSAgICAgICBfX2xlMzIgc3luY2hfZmFpbF90aG9sZDsgLyogbnVtYmVyIG9mIGJlYWNvbnMgbWlzc2VkICovCi0gICAgICAgX19sZTMyIGJzc19sb3NlX3RpbWVvdXQ7IC8qIG51bWJlciBvZiBUVSdzIGZyb20gc3luY2ggZmFpbCAqLwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGFjeF9idF93bGFuX2NvZXggewotCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKLQotCXU4IGVuYWJsZTsKLQl1OCBwYWRbM107Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgYWN4X2J0X3dsYW5fY29leF9wYXJhbSB7Ci0Jc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOwotCi0JX19sZTMyIHBhcmFtc1tDT05GX1NHX1BBUkFNU19NQVhdOwotCXU4IHBhcmFtX2lkeDsKLQl1OCBwYWRkaW5nWzNdOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGFjeF9kY29faXRyaW1fcGFyYW1zIHsKLQlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7Ci0KLQl1OCBlbmFibGU7Ci0JdTggcGFkZGluZ1szXTsKLQlfX2xlMzIgdGltZW91dDsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBhY3hfZW5lcmd5X2RldGVjdGlvbiB7Ci0Jc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOwotCi0JLyogVGhlIFJYIENsZWFyIENoYW5uZWwgQXNzZXNzbWVudCB0aHJlc2hvbGQgaW4gdGhlIFBIWSAqLwotCV9fbGUxNiByeF9jY2FfdGhyZXNob2xkOwotCXU4IHR4X2VuZXJneV9kZXRlY3Rpb247Ci0JdTggcGFkOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGFjeF9iZWFjb25fYnJvYWRjYXN0IHsKLQlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7Ci0KLQlfX2xlMTYgYmVhY29uX3J4X3RpbWVvdXQ7Ci0JX19sZTE2IGJyb2FkY2FzdF90aW1lb3V0OwotCi0JLyogRW5hYmxlcyByZWNlaXZpbmcgb2YgYnJvYWRjYXN0IHBhY2tldHMgaW4gUFMgbW9kZSAqLwotCXU4IHJ4X2Jyb2FkY2FzdF9pbl9wczsKLQotCS8qIENvbnNlY3V0aXZlIFBTIFBvbGwgZmFpbHVyZXMgYmVmb3JlIHVwZGF0aW5nIHRoZSBob3N0ICovCi0JdTggcHNfcG9sbF90aHJlc2hvbGQ7Ci0JdTggcGFkWzJdOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGFjeF9ldmVudF9tYXNrIHsKLQlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7Ci0KLQlfX2xlMzIgZXZlbnRfbWFzazsKLQlfX2xlMzIgaGlnaF9ldmVudF9tYXNrOyAvKiBVbnVzZWQgKi8KLX0gX19wYWNrZWQ7Ci0KLSNkZWZpbmUgQ0ZHX1JYX0ZDUwkJQklUKDIpCi0jZGVmaW5lIENGR19SWF9BTExfR09PRAkJQklUKDMpCi0jZGVmaW5lIENGR19VTklfRklMVEVSX0VOCUJJVCg0KQotI2RlZmluZSBDRkdfQlNTSURfRklMVEVSX0VOCUJJVCg1KQotI2RlZmluZSBDRkdfTUNfRklMVEVSX0VOCUJJVCg2KQotI2RlZmluZSBDRkdfTUNfQUREUjBfRU4JCUJJVCg3KQotI2RlZmluZSBDRkdfTUNfQUREUjFfRU4JCUJJVCg4KQotI2RlZmluZSBDRkdfQkNfUkVKRUNUX0VOCUJJVCg5KQotI2RlZmluZSBDRkdfU1NJRF9GSUxURVJfRU4JQklUKDEwKQotI2RlZmluZSBDRkdfUlhfSU5UX0ZDU19FUlJPUglCSVQoMTEpCi0jZGVmaW5lIENGR19SWF9JTlRfRU5DUllQVEVECUJJVCgxMikKLSNkZWZpbmUgQ0ZHX1JYX1dSX1JYX1NUQVRVUwlCSVQoMTMpCi0jZGVmaW5lIENGR19SWF9GSUxURVJfTlVMVEkJQklUKDE0KQotI2RlZmluZSBDRkdfUlhfUkVTRVJWRQkJQklUKDE1KQotI2RlZmluZSBDRkdfUlhfVElNRVNUQU1QX1RTRglCSVQoMTYpCi0KLSNkZWZpbmUgQ0ZHX1JYX1JTVl9FTgkJQklUKDApCi0jZGVmaW5lIENGR19SWF9SQ1RTX0FDSwkJQklUKDEpCi0jZGVmaW5lIENGR19SWF9QUlNQX0VOCQlCSVQoMikKLSNkZWZpbmUgQ0ZHX1JYX1BSRVFfRU4JCUJJVCgzKQotI2RlZmluZSBDRkdfUlhfTUdNVF9FTgkJQklUKDQpCi0jZGVmaW5lIENGR19SWF9GQ1NfRVJST1IJQklUKDUpCi0jZGVmaW5lIENGR19SWF9EQVRBX0VOCQlCSVQoNikKLSNkZWZpbmUgQ0ZHX1JYX0NUTF9FTgkJQklUKDcpCi0jZGVmaW5lIENGR19SWF9DRl9FTgkJQklUKDgpCi0jZGVmaW5lIENGR19SWF9CQ05fRU4JCUJJVCg5KQotI2RlZmluZSBDRkdfUlhfQVVUSF9FTgkJQklUKDEwKQotI2RlZmluZSBDRkdfUlhfQVNTT0NfRU4JCUJJVCgxMSkKLQotI2RlZmluZSBTQ0FOX1BBU1NJVkUJCUJJVCgwKQotI2RlZmluZSBTQ0FOXzVHSFpfQkFORAkJQklUKDEpCi0jZGVmaW5lIFNDQU5fVFJJR0dFUkVECQlCSVQoMikKLSNkZWZpbmUgU0NBTl9QUklPUklUWV9ISUdICUJJVCgzKQotCi0vKiBXaGVuIHNldCwgZGlzYWJsZSBIVyBlbmNyeXB0aW9uICovCi0jZGVmaW5lIERGX0VOQ1JZUFRJT05fRElTQUJMRSAgICAgIDB4MDEKLSNkZWZpbmUgREZfU05JRkZfTU9ERV9FTkFCTEUgICAgICAgMHg4MAotCi1zdHJ1Y3QgYWN4X2ZlYXR1cmVfY29uZmlnIHsKLQlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7Ci0KLQlfX2xlMzIgb3B0aW9uczsKLQlfX2xlMzIgZGF0YV9mbG93X29wdGlvbnM7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgYWN4X2N1cnJlbnRfdHhfcG93ZXIgewotCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKLQotCXU4ICBjdXJyZW50X3R4X3Bvd2VyOwotCXU4ICBwYWRkaW5nWzNdOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGFjeF93YWtlX3VwX2NvbmRpdGlvbiB7Ci0Jc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOwotCi0JdTggd2FrZV91cF9ldmVudDsgLyogT25seSBvbmUgYml0IGNhbiBiZSBzZXQgKi8KLQl1OCBsaXN0ZW5faW50ZXJ2YWw7Ci0JdTggcGFkWzJdOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGFjeF9haWQgewotCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKLQotCS8qCi0JICogVG8gYmUgc2V0IHdoZW4gYXNzb2NpYXRlZCB3aXRoIGFuIEFQLgotCSAqLwotCV9fbGUxNiBhaWQ7Ci0JdTggcGFkWzJdOwotfSBfX3BhY2tlZDsKLQotZW51bSBhY3hfcHJlYW1ibGVfdHlwZSB7Ci0JQUNYX1BSRUFNQkxFX0xPTkcgPSAwLAotCUFDWF9QUkVBTUJMRV9TSE9SVCA9IDEKLX07Ci0KLXN0cnVjdCBhY3hfcHJlYW1ibGUgewotCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKLQotCS8qCi0JICogV2hlbiBzZXQsIHRoZSBXaUxpbmsgdHJhbnNtaXRzIHRoZSBmcmFtZXMgd2l0aCBhIHNob3J0IHByZWFtYmxlIGFuZAotCSAqIHdoZW4gY2xlYXJlZCwgdGhlIFdpTGluayB0cmFuc21pdHMgdGhlIGZyYW1lcyB3aXRoIGEgbG9uZyBwcmVhbWJsZS4KLQkgKi8KLQl1OCBwcmVhbWJsZTsKLQl1OCBwYWRkaW5nWzNdOwotfSBfX3BhY2tlZDsKLQotZW51bSBhY3hfY3RzcHJvdGVjdF90eXBlIHsKLQlDVFNQUk9URUNUX0RJU0FCTEUgPSAwLAotCUNUU1BST1RFQ1RfRU5BQkxFID0gMQotfTsKLQotc3RydWN0IGFjeF9jdHNwcm90ZWN0IHsKLQlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7Ci0JdTggY3RzcHJvdGVjdDsKLQl1OCBwYWRkaW5nWzNdOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGFjeF90eF9zdGF0aXN0aWNzIHsKLQlfX2xlMzIgaW50ZXJuYWxfZGVzY19vdmVyZmxvdzsKLX0gIF9fcGFja2VkOwotCi1zdHJ1Y3QgYWN4X3J4X3N0YXRpc3RpY3MgewotCV9fbGUzMiBvdXRfb2ZfbWVtOwotCV9fbGUzMiBoZHJfb3ZlcmZsb3c7Ci0JX19sZTMyIGh3X3N0dWNrOwotCV9fbGUzMiBkcm9wcGVkOwotCV9fbGUzMiBmY3NfZXJyOwotCV9fbGUzMiB4ZnJfaGludF90cmlnOwotCV9fbGUzMiBwYXRoX3Jlc2V0OwotCV9fbGUzMiByZXNldF9jb3VudGVyOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGFjeF9kbWFfc3RhdGlzdGljcyB7Ci0JX19sZTMyIHJ4X3JlcXVlc3RlZDsKLQlfX2xlMzIgcnhfZXJyb3JzOwotCV9fbGUzMiB0eF9yZXF1ZXN0ZWQ7Ci0JX19sZTMyIHR4X2Vycm9yczsKLX0gIF9fcGFja2VkOwotCi1zdHJ1Y3QgYWN4X2lzcl9zdGF0aXN0aWNzIHsKLQkvKiBob3N0IGNvbW1hbmQgY29tcGxldGUgKi8KLQlfX2xlMzIgY21kX2NtcGx0OwotCi0JLyogZmlxaXNyKCkgKi8KLQlfX2xlMzIgZmlxczsKLQotCS8qIChJTlRfU1RTX05EICYgSU5UX1RSSUdfUlhfSEVBREVSKSAqLwotCV9fbGUzMiByeF9oZWFkZXJzOwotCi0JLyogKElOVF9TVFNfTkQgJiBJTlRfVFJJR19SWF9DTVBMVCkgKi8KLQlfX2xlMzIgcnhfY29tcGxldGVzOwotCi0JLyogKElOVF9TVFNfTkQgJiBJTlRfVFJJR19OT19SWF9CVUYpICovCi0JX19sZTMyIHJ4X21lbV9vdmVyZmxvdzsKLQotCS8qIChJTlRfU1RTX05EICYgSU5UX1RSSUdfU19SWF9SRFkpICovCi0JX19sZTMyIHJ4X3JkeXM7Ci0KLQkvKiBpcnFpc3IoKSAqLwotCV9fbGUzMiBpcnFzOwotCi0JLyogKElOVF9TVFNfTkQgJiBJTlRfVFJJR19UWF9QUk9DKSAqLwotCV9fbGUzMiB0eF9wcm9jczsKLQotCS8qIChJTlRfU1RTX05EICYgSU5UX1RSSUdfREVDUllQVF9ET05FKSAqLwotCV9fbGUzMiBkZWNyeXB0X2RvbmU7Ci0KLQkvKiAoSU5UX1NUU19ORCAmIElOVF9UUklHX0RNQTApICovCi0JX19sZTMyIGRtYTBfZG9uZTsKLQotCS8qIChJTlRfU1RTX05EICYgSU5UX1RSSUdfRE1BMSkgKi8KLQlfX2xlMzIgZG1hMV9kb25lOwotCi0JLyogKElOVF9TVFNfTkQgJiBJTlRfVFJJR19UWF9FWENfQ01QTFQpICovCi0JX19sZTMyIHR4X2V4Y2hfY29tcGxldGU7Ci0KLQkvKiAoSU5UX1NUU19ORCAmIElOVF9UUklHX0NPTU1BTkQpICovCi0JX19sZTMyIGNvbW1hbmRzOwotCi0JLyogKElOVF9TVFNfTkQgJiBJTlRfVFJJR19SWF9QUk9DKSAqLwotCV9fbGUzMiByeF9wcm9jczsKLQotCS8qIChJTlRfU1RTX05EICYgSU5UX1RSSUdfUE1fODAyKSAqLwotCV9fbGUzMiBod19wbV9tb2RlX2NoYW5nZXM7Ci0KLQkvKiAoSU5UX1NUU19ORCAmIElOVF9UUklHX0FDS05PV0xFREdFKSAqLwotCV9fbGUzMiBob3N0X2Fja25vd2xlZGdlczsKLQotCS8qIChJTlRfU1RTX05EICYgSU5UX1RSSUdfUE1fUENJKSAqLwotCV9fbGUzMiBwY2lfcG07Ci0KLQkvKiAoSU5UX1NUU19ORCAmIElOVF9UUklHX0FDTV9XQUtFVVApICovCi0JX19sZTMyIHdha2V1cHM7Ci0KLQkvKiAoSU5UX1NUU19ORCAmIElOVF9UUklHX0xPV19SU1NJKSAqLwotCV9fbGUzMiBsb3dfcnNzaTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBhY3hfd2VwX3N0YXRpc3RpY3MgewotCS8qIFdFUCBhZGRyZXNzIGtleXMgY29uZmlndXJlZCAqLwotCV9fbGUzMiBhZGRyX2tleV9jb3VudDsKLQotCS8qIGRlZmF1bHQga2V5cyBjb25maWd1cmVkICovCi0JX19sZTMyIGRlZmF1bHRfa2V5X2NvdW50OwotCi0JX19sZTMyIHJlc2VydmVkOwotCi0JLyogbnVtYmVyIG9mIHRpbWVzIHRoYXQgV0VQIGtleSBub3QgZm91bmQgb24gbG9va3VwICovCi0JX19sZTMyIGtleV9ub3RfZm91bmQ7Ci0KLQkvKiBudW1iZXIgb2YgdGltZXMgdGhhdCBXRVAga2V5IGRlY3J5cHRpb24gZmFpbGVkICovCi0JX19sZTMyIGRlY3J5cHRfZmFpbDsKLQotCS8qIFdFUCBwYWNrZXRzIGRlY3J5cHRlZCAqLwotCV9fbGUzMiBwYWNrZXRzOwotCi0JLyogV0VQIGRlY3J5cHQgaW50ZXJydXB0cyAqLwotCV9fbGUzMiBpbnRlcnJ1cHQ7Ci19IF9fcGFja2VkOwotCi0jZGVmaW5lIEFDWF9NSVNTRURfQkVBQ09OU19TUFJFQUQgMTAKLQotc3RydWN0IGFjeF9wd3Jfc3RhdGlzdGljcyB7Ci0JLyogdGhlIGFtb3VudCBvZiBlbnRlcnMgaW50byBwb3dlciBzYXZlIG1vZGUgKGJvdGggUEQgJiBFTFApICovCi0JX19sZTMyIHBzX2VudGVyOwotCi0JLyogdGhlIGFtb3VudCBvZiBlbnRlcnMgaW50byBFTFAgbW9kZSAqLwotCV9fbGUzMiBlbHBfZW50ZXI7Ci0KLQkvKiB0aGUgYW1vdW50IG9mIG1pc3NpbmcgYmVhY29uIGludGVycnVwdHMgdG8gdGhlIGhvc3QgKi8KLQlfX2xlMzIgbWlzc2luZ19iY25zOwotCi0JLyogdGhlIGFtb3VudCBvZiB3YWtlIG9uIGhvc3QtYWNjZXNzIHRpbWVzICovCi0JX19sZTMyIHdha2Vfb25faG9zdDsKLQotCS8qIHRoZSBhbW91bnQgb2Ygd2FrZSBvbiB0aW1lci1leHBpcmUgKi8KLQlfX2xlMzIgd2FrZV9vbl90aW1lcl9leHA7Ci0KLQkvKiB0aGUgbnVtYmVyIG9mIHBhY2tldHMgdGhhdCB3ZXJlIHRyYW5zbWl0dGVkIHdpdGggUFMgYml0IHNldCAqLwotCV9fbGUzMiB0eF93aXRoX3BzOwotCi0JLyogdGhlIG51bWJlciBvZiBwYWNrZXRzIHRoYXQgd2VyZSB0cmFuc21pdHRlZCB3aXRoIFBTIGJpdCBjbGVhciAqLwotCV9fbGUzMiB0eF93aXRob3V0X3BzOwotCi0JLyogdGhlIG51bWJlciBvZiByZWNlaXZlZCBiZWFjb25zICovCi0JX19sZTMyIHJjdmRfYmVhY29uczsKLQotCS8qIHRoZSBudW1iZXIgb2YgZW50ZXJpbmcgaW50byBQb3dlck9uIChwb3dlciBzYXZlIG9mZikgKi8KLQlfX2xlMzIgcG93ZXJfc2F2ZV9vZmY7Ci0KLQkvKiB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW50byBwb3dlciBzYXZlIG1vZGUgKi8KLQlfX2xlMTYgZW5hYmxlX3BzOwotCi0JLyoKLQkgKiB0aGUgbnVtYmVyIG9mIGV4aXRzIGZyb20gcG93ZXIgc2F2ZSwgbm90IGluY2x1ZGluZyBmYWlsZWQgUFMKLQkgKiB0cmFuc2l0aW9ucwotCSAqLwotCV9fbGUxNiBkaXNhYmxlX3BzOwotCi0JLyoKLQkgKiB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoZSBUU0YgY291bnRlciB3YXMgYWRqdXN0ZWQgYmVjYXVzZQotCSAqIG9mIGRyaWZ0Ci0JICovCi0JX19sZTMyIGZpeF90c2ZfcHM7Ci0KLQkvKiBHaXZlcyBzdGF0aXN0aWNzIGFib3V0IHRoZSBzcHJlYWQgY29udGludW91cyBtaXNzZWQgYmVhY29ucy4KLQkgKiBUaGUgMTYgTFNCIGFyZSBkZWRpY2F0ZWQgZm9yIHRoZSBQUyBtb2RlLgotCSAqIFRoZSAxNiBNU0IgYXJlIGRlZGljYXRlZCBmb3IgdGhlIFBTIG1vZGUuCi0JICogY29udF9taXNzX2JjbnNfc3ByZWFkWzBdIC0gc2luZ2xlIG1pc3NlZCBiZWFjb24uCi0JICogY29udF9taXNzX2JjbnNfc3ByZWFkWzFdIC0gdHdvIGNvbnRpbnVvdXMgbWlzc2VkIGJlYWNvbnMuCi0JICogY29udF9taXNzX2JjbnNfc3ByZWFkWzJdIC0gdGhyZWUgY29udGludW91cyBtaXNzZWQgYmVhY29ucy4KLQkgKiAuLi4KLQkgKiBjb250X21pc3NfYmNuc19zcHJlYWRbOV0gLSB0ZW4gYW5kIG1vcmUgY29udGludW91cyBtaXNzZWQgYmVhY29ucy4KLQkqLwotCV9fbGUzMiBjb250X21pc3NfYmNuc19zcHJlYWRbQUNYX01JU1NFRF9CRUFDT05TX1NQUkVBRF07Ci0KLQkvKiB0aGUgbnVtYmVyIG9mIGJlYWNvbnMgaW4gYXdha2UgbW9kZSAqLwotCV9fbGUzMiByY3ZkX2F3YWtlX2JlYWNvbnM7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgYWN4X21pY19zdGF0aXN0aWNzIHsKLQlfX2xlMzIgcnhfcGt0czsKLQlfX2xlMzIgY2FsY19mYWlsdXJlOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGFjeF9hZXNfc3RhdGlzdGljcyB7Ci0JX19sZTMyIGVuY3J5cHRfZmFpbDsKLQlfX2xlMzIgZGVjcnlwdF9mYWlsOwotCV9fbGUzMiBlbmNyeXB0X3BhY2tldHM7Ci0JX19sZTMyIGRlY3J5cHRfcGFja2V0czsKLQlfX2xlMzIgZW5jcnlwdF9pbnRlcnJ1cHQ7Ci0JX19sZTMyIGRlY3J5cHRfaW50ZXJydXB0OwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGFjeF9ldmVudF9zdGF0aXN0aWNzIHsKLQlfX2xlMzIgaGVhcnRfYmVhdDsKLQlfX2xlMzIgY2FsaWJyYXRpb247Ci0JX19sZTMyIHJ4X21pc21hdGNoOwotCV9fbGUzMiByeF9tZW1fZW1wdHk7Ci0JX19sZTMyIHJ4X3Bvb2w7Ci0JX19sZTMyIG9vbV9sYXRlOwotCV9fbGUzMiBwaHlfdHJhbnNtaXRfZXJyb3I7Ci0JX19sZTMyIHR4X3N0dWNrOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGFjeF9wc19zdGF0aXN0aWNzIHsKLQlfX2xlMzIgcHNwb2xsX3RpbWVvdXRzOwotCV9fbGUzMiB1cHNkX3RpbWVvdXRzOwotCV9fbGUzMiB1cHNkX21heF9zcHRpbWU7Ci0JX19sZTMyIHVwc2RfbWF4X2FwdHVybjsKLQlfX2xlMzIgcHNwb2xsX21heF9hcHR1cm47Ci0JX19sZTMyIHBzcG9sbF91dGlsaXphdGlvbjsKLQlfX2xlMzIgdXBzZF91dGlsaXphdGlvbjsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBhY3hfcnhwaXBlX3N0YXRpc3RpY3MgewotCV9fbGUzMiByeF9wcmVwX2JlYWNvbl9kcm9wOwotCV9fbGUzMiBkZXNjcl9ob3N0X2ludF90cmlnX3J4X2RhdGE7Ci0JX19sZTMyIGJlYWNvbl9idWZmZXJfdGhyZXNfaG9zdF9pbnRfdHJpZ19yeF9kYXRhOwotCV9fbGUzMiBtaXNzZWRfYmVhY29uX2hvc3RfaW50X3RyaWdfcnhfZGF0YTsKLQlfX2xlMzIgdHhfeGZyX2hvc3RfaW50X3RyaWdfcnhfZGF0YTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBhY3hfc3RhdGlzdGljcyB7Ci0Jc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOwotCi0Jc3RydWN0IGFjeF90eF9zdGF0aXN0aWNzIHR4OwotCXN0cnVjdCBhY3hfcnhfc3RhdGlzdGljcyByeDsKLQlzdHJ1Y3QgYWN4X2RtYV9zdGF0aXN0aWNzIGRtYTsKLQlzdHJ1Y3QgYWN4X2lzcl9zdGF0aXN0aWNzIGlzcjsKLQlzdHJ1Y3QgYWN4X3dlcF9zdGF0aXN0aWNzIHdlcDsKLQlzdHJ1Y3QgYWN4X3B3cl9zdGF0aXN0aWNzIHB3cjsKLQlzdHJ1Y3QgYWN4X2Flc19zdGF0aXN0aWNzIGFlczsKLQlzdHJ1Y3QgYWN4X21pY19zdGF0aXN0aWNzIG1pYzsKLQlzdHJ1Y3QgYWN4X2V2ZW50X3N0YXRpc3RpY3MgZXZlbnQ7Ci0Jc3RydWN0IGFjeF9wc19zdGF0aXN0aWNzIHBzOwotCXN0cnVjdCBhY3hfcnhwaXBlX3N0YXRpc3RpY3MgcnhwaXBlOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGFjeF9yYXRlX2NsYXNzIHsKLQlfX2xlMzIgZW5hYmxlZF9yYXRlczsKLQl1OCBzaG9ydF9yZXRyeV9saW1pdDsKLQl1OCBsb25nX3JldHJ5X2xpbWl0OwotCXU4IGFmbGFnczsKLQl1OCByZXNlcnZlZDsKLX07Ci0KLSNkZWZpbmUgQUNYX1RYX0JBU0lDX1JBVEUgICAgICAwCi0jZGVmaW5lIEFDWF9UWF9BUF9GVUxMX1JBVEUgICAgMQotI2RlZmluZSBBQ1hfVFhfUkFURV9QT0xJQ1lfQ05UIDIKLXN0cnVjdCBhY3hfcmF0ZV9wb2xpY3kgewotCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKLQotCV9fbGUzMiByYXRlX2NsYXNzX2NudDsKLQlzdHJ1Y3QgYWN4X3JhdGVfY2xhc3MgcmF0ZV9jbGFzc1tDT05GX1RYX01BWF9SQVRFX0NMQVNTRVNdOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGFjeF9hY19jZmcgewotCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKLQl1OCBhYzsKLQl1OCBjd19taW47Ci0JX19sZTE2IGN3X21heDsKLQl1OCBhaWZzbjsKLQl1OCByZXNlcnZlZDsKLQlfX2xlMTYgdHhfb3BfbGltaXQ7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgYWN4X3RpZF9jb25maWcgewotCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKLQl1OCBxdWV1ZV9pZDsKLQl1OCBjaGFubmVsX3R5cGU7Ci0JdTggdHNpZDsKLQl1OCBwc19zY2hlbWU7Ci0JdTggYWNrX3BvbGljeTsKLQl1OCBwYWRkaW5nWzNdOwotCV9fbGUzMiBhcHNkX2NvbmZbMl07Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgYWN4X2ZyYWdfdGhyZXNob2xkIHsKLQlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7Ci0JX19sZTE2IGZyYWdfdGhyZXNob2xkOwotCXU4IHBhZGRpbmdbMl07Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgYWN4X3R4X2NvbmZpZ19vcHRpb25zIHsKLQlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7Ci0JX19sZTE2IHR4X2NvbXBsX3RpbWVvdXQ7ICAgICAvKiBtc2VjICovCi0JX19sZTE2IHR4X2NvbXBsX3RocmVzaG9sZDsgICAvKiBudW1iZXIgb2YgcGFja2V0cyAqLwotfSBfX3BhY2tlZDsKLQotI2RlZmluZSBBQ1hfUlhfTUVNX0JMT0NLUyAgICAgNzAKLSNkZWZpbmUgQUNYX1RYX01JTl9NRU1fQkxPQ0tTIDQwCi0jZGVmaW5lIEFDWF9UWF9ERVNDUklQVE9SUyAgICAzMgotI2RlZmluZSBBQ1hfTlVNX1NTSURfUFJPRklMRVMgMQotCi1zdHJ1Y3Qgd2wxMjcxX2FjeF9jb25maWdfbWVtb3J5IHsKLQlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7Ci0KLQl1OCByeF9tZW1fYmxvY2tfbnVtOwotCXU4IHR4X21pbl9tZW1fYmxvY2tfbnVtOwotCXU4IG51bV9zdGF0aW9uczsKLQl1OCBudW1fc3NpZF9wcm9maWxlczsKLQlfX2xlMzIgdG90YWxfdHhfZGVzY3JpcHRvcnM7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3Qgd2wxMjcxX2FjeF9tZW1fbWFwIHsKLQlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7Ci0KLQlfX2xlMzIgY29kZV9zdGFydDsKLQlfX2xlMzIgY29kZV9lbmQ7Ci0KLQlfX2xlMzIgd2VwX2RlZmtleV9zdGFydDsKLQlfX2xlMzIgd2VwX2RlZmtleV9lbmQ7Ci0KLQlfX2xlMzIgc3RhX3RhYmxlX3N0YXJ0OwotCV9fbGUzMiBzdGFfdGFibGVfZW5kOwotCi0JX19sZTMyIHBhY2tldF90ZW1wbGF0ZV9zdGFydDsKLQlfX2xlMzIgcGFja2V0X3RlbXBsYXRlX2VuZDsKLQotCS8qIEFkZHJlc3Mgb2YgdGhlIFRYIHJlc3VsdCBpbnRlcmZhY2UgKGNvbnRyb2wgYmxvY2spICovCi0JX19sZTMyIHR4X3Jlc3VsdDsKLQlfX2xlMzIgdHhfcmVzdWx0X3F1ZXVlX3N0YXJ0OwotCi0JX19sZTMyIHF1ZXVlX21lbW9yeV9zdGFydDsKLQlfX2xlMzIgcXVldWVfbWVtb3J5X2VuZDsKLQotCV9fbGUzMiBwYWNrZXRfbWVtb3J5X3Bvb2xfc3RhcnQ7Ci0JX19sZTMyIHBhY2tldF9tZW1vcnlfcG9vbF9lbmQ7Ci0KLQlfX2xlMzIgZGVidWdfYnVmZmVyMV9zdGFydDsKLQlfX2xlMzIgZGVidWdfYnVmZmVyMV9lbmQ7Ci0KLQlfX2xlMzIgZGVidWdfYnVmZmVyMl9zdGFydDsKLQlfX2xlMzIgZGVidWdfYnVmZmVyMl9lbmQ7Ci0KLQkvKiBOdW1iZXIgb2YgYmxvY2tzIEZXIGFsbG9jYXRlZCBmb3IgVFggcGFja2V0cyAqLwotCV9fbGUzMiBudW1fdHhfbWVtX2Jsb2NrczsKLQotCS8qIE51bWJlciBvZiBibG9ja3MgRlcgYWxsb2NhdGVkIGZvciBSWCBwYWNrZXRzICovCi0JX19sZTMyIG51bV9yeF9tZW1fYmxvY2tzOwotCi0JLyogdGhlIGZvbGxvd2luZyA0IGZpZWxkcyBhcmUgdmFsaWQgaW4gU0xBVkUgbW9kZSBvbmx5ICovCi0JdTggKnR4X2NidWY7Ci0JdTggKnJ4X2NidWY7Ci0JX19sZTMyIHJ4X2N0cmw7Ci0JX19sZTMyIHR4X2N0cmw7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3Qgd2wxMjcxX2FjeF9yeF9jb25maWdfb3B0IHsKLQlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7Ci0KLQlfX2xlMTYgbWJsa190aHJlc2hvbGQ7Ci0JX19sZTE2IHRocmVzaG9sZDsKLQlfX2xlMTYgdGltZW91dDsKLQl1OCBxdWV1ZV90eXBlOwotCXU4IHJlc2VydmVkOwotfSBfX3BhY2tlZDsKLQotCi1zdHJ1Y3Qgd2wxMjcxX2FjeF9iZXRfZW5hYmxlIHsKLQlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7Ci0KLQl1OCBlbmFibGU7Ci0JdTggbWF4X2NvbnNlY3V0aXZlOwotCXU4IHBhZGRpbmdbMl07Ci19IF9fcGFja2VkOwotCi0jZGVmaW5lIEFDWF9JUFY0X1ZFUlNJT04gNAotI2RlZmluZSBBQ1hfSVBWNl9WRVJTSU9OIDYKLSNkZWZpbmUgQUNYX0lQVjRfQUREUl9TSVpFIDQKLXN0cnVjdCB3bDEyNzFfYWN4X2FycF9maWx0ZXIgewotCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKLQl1OCB2ZXJzaW9uOyAgICAgICAgIC8qIEFDWF9JUFY0X1ZFUlNJT04sIEFDWF9JUFY2X1ZFUlNJT04gKi8KLQl1OCBlbmFibGU7ICAgICAgICAgIC8qIDEgdG8gZW5hYmxlIEFSUCBmaWx0ZXJpbmcsIDAgdG8gZGlzYWJsZSAqLwotCXU4IHBhZGRpbmdbMl07Ci0JdTggYWRkcmVzc1sxNl07ICAgICAvKiBUaGUgY29uZmlndXJlZCBkZXZpY2UgSVAgYWRkcmVzcyAtIGFsbCBBUlAKLQkJCSAgICAgICByZXF1ZXN0cyBkaXJlY3RlZCB0byB0aGlzIElQIGFkZHJlc3Mgd2lsbCBwYXNzCi0JCQkgICAgICAgdGhyb3VnaC4gRm9yIElQdjQsIHRoZSBmaXJzdCBmb3VyIGJ5dGVzIGFyZQotCQkJICAgICAgIHVzZWQuICovCi19IF9fcGFja2VkOwotCi1zdHJ1Y3Qgd2wxMjcxX2FjeF9wbV9jb25maWcgewotCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKLQotCV9fbGUzMiBob3N0X2Nsa19zZXR0bGluZ190aW1lOwotCXU4IGhvc3RfZmFzdF93YWtldXBfc3VwcG9ydDsKLQl1OCBwYWRkaW5nWzNdOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IHdsMTI3MV9hY3hfa2VlcF9hbGl2ZV9tb2RlIHsKLQlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7Ci0KLQl1OCBlbmFibGVkOwotCXU4IHBhZGRpbmdbM107Ci19IF9fcGFja2VkOwotCi1lbnVtIHsKLQlBQ1hfS0VFUF9BTElWRV9OT19UWCA9IDAsCi0JQUNYX0tFRVBfQUxJVkVfUEVSSU9EX09OTFkKLX07Ci0KLWVudW0gewotCUFDWF9LRUVQX0FMSVZFX1RQTF9JTlZBTElEID0gMCwKLQlBQ1hfS0VFUF9BTElWRV9UUExfVkFMSUQKLX07Ci0KLXN0cnVjdCB3bDEyNzFfYWN4X2tlZXBfYWxpdmVfY29uZmlnIHsKLQlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7Ci0KLQlfX2xlMzIgcGVyaW9kOwotCXU4IGluZGV4OwotCXU4IHRwbF92YWxpZGF0aW9uOwotCXU4IHRyaWdnZXI7Ci0JdTggcGFkZGluZzsKLX0gX19wYWNrZWQ7Ci0KLWVudW0gewotCVdMMTI3MV9BQ1hfVFJJR19UWVBFX0xFVkVMID0gMCwKLQlXTDEyNzFfQUNYX1RSSUdfVFlQRV9FREdFLAotfTsKLQotZW51bSB7Ci0JV0wxMjcxX0FDWF9UUklHX0RJUl9MT1cgPSAwLAotCVdMMTI3MV9BQ1hfVFJJR19ESVJfSElHSCwKLQlXTDEyNzFfQUNYX1RSSUdfRElSX0JJRElSLAotfTsKLQotZW51bSB7Ci0JV0wxMjcxX0FDWF9UUklHX0VOQUJMRSA9IDEsCi0JV0wxMjcxX0FDWF9UUklHX0RJU0FCTEUsCi19OwotCi1lbnVtIHsKLQlXTDEyNzFfQUNYX1RSSUdfTUVUUklDX1JTU0lfQkVBQ09OID0gMCwKLQlXTDEyNzFfQUNYX1RSSUdfTUVUUklDX1JTU0lfREFUQSwKLQlXTDEyNzFfQUNYX1RSSUdfTUVUUklDX1NOUl9CRUFDT04sCi0JV0wxMjcxX0FDWF9UUklHX01FVFJJQ19TTlJfREFUQSwKLX07Ci0KLWVudW0gewotCVdMMTI3MV9BQ1hfVFJJR19JRFhfUlNTSSA9IDAsCi0JV0wxMjcxX0FDWF9UUklHX0NPVU5UID0gOCwKLX07Ci0KLXN0cnVjdCB3bDEyNzFfYWN4X3Jzc2lfc25yX3RyaWdnZXIgewotCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKLQotCV9fbGUxNiB0aHJlc2hvbGQ7Ci0JX19sZTE2IHBhY2luZzsgLyogMCAtIDYwMDAwIG1zICovCi0JdTggbWV0cmljOwotCXU4IHR5cGU7Ci0JdTggZGlyOwotCXU4IGh5c3RlcmVzaXM7Ci0JdTggaW5kZXg7Ci0JdTggZW5hYmxlOwotCXU4IHBhZGRpbmdbMl07Ci19OwotCi1zdHJ1Y3Qgd2wxMjcxX2FjeF9yc3NpX3Nucl9hdmdfd2VpZ2h0cyB7Ci0Jc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOwotCi0JdTggcnNzaV9iZWFjb247Ci0JdTggcnNzaV9kYXRhOwotCXU4IHNucl9iZWFjb247Ci0JdTggc25yX2RhdGE7Ci19OwotCi1zdHJ1Y3Qgd2wxMjcxX2FjeF9md190c2ZfaW5mb3JtYXRpb24gewotCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKLQotCV9fbGUzMiBjdXJyZW50X3RzZl9oaWdoOwotCV9fbGUzMiBjdXJyZW50X3RzZl9sb3c7Ci0JX19sZTMyIGxhc3RfYnR0dF9oaWdoOwotCV9fbGUzMiBsYXN0X3RidHRfbG93OwotCXU4IGxhc3RfZHRpbV9jb3VudDsKLQl1OCBwYWRkaW5nWzNdOwotfSBfX3BhY2tlZDsKLQotZW51bSB7Ci0JQUNYX1dBS0VfVVBfQ09ORElUSU9OUyAgICAgID0gMHgwMDAyLAotCUFDWF9NRU1fQ0ZHICAgICAgICAgICAgICAgICA9IDB4MDAwMywKLQlBQ1hfU0xPVCAgICAgICAgICAgICAgICAgICAgPSAweDAwMDQsCi0JQUNYX0FDX0NGRyAgICAgICAgICAgICAgICAgID0gMHgwMDA3LAotCUFDWF9NRU1fTUFQICAgICAgICAgICAgICAgICA9IDB4MDAwOCwKLQlBQ1hfQUlEICAgICAgICAgICAgICAgICAgICAgPSAweDAwMEEsCi0JLyogQUNYX0ZXX1JFViBpcyBtaXNzaW5nIGluIHRoZSByZWYgZHJpdmVyLCBidXQgc2VlbXMgdG8gd29yayAqLwotCUFDWF9GV19SRVYgICAgICAgICAgICAgICAgICA9IDB4MDAwRCwKLQlBQ1hfTUVESVVNX1VTQUdFICAgICAgICAgICAgPSAweDAwMEYsCi0JQUNYX1JYX0NGRyAgICAgICAgICAgICAgICAgID0gMHgwMDEwLAotCUFDWF9UWF9RVUVVRV9DRkcgICAgICAgICAgICA9IDB4MDAxMSwgLyogRklYTUU6IG9ubHkgdXNlZCBieSB3bDEyNTEgKi8KLQlBQ1hfU1RBVElTVElDUyAgICAgICAgICAgICAgPSAweDAwMTMsIC8qIERlYnVnIEFQSSAqLwotCUFDWF9QV1JfQ09OU1VNUFRJT05fU1RBVElTVElDUyA9IDB4MDAxNCwKLQlBQ1hfRkVBVFVSRV9DRkcgICAgICAgICAgICAgPSAweDAwMTUsCi0JQUNYX1RJRF9DRkcgICAgICAgICAgICAgICAgID0gMHgwMDFBLAotCUFDWF9QU19SWF9TVFJFQU1JTkcgICAgICAgICA9IDB4MDAxQiwKLQlBQ1hfQkVBQ09OX0ZJTFRFUl9PUFQgICAgICAgPSAweDAwMUYsCi0JQUNYX05PSVNFX0hJU1QgICAgICAgICAgICAgID0gMHgwMDIxLAotCUFDWF9IREtfVkVSU0lPTiAgICAgICAgICAgICA9IDB4MDAyMiwgLyogPz8/ICovCi0JQUNYX1BEX1RIUkVTSE9MRCAgICAgICAgICAgID0gMHgwMDIzLAotCUFDWF9UWF9DT05GSUdfT1BUICAgICAgICAgICA9IDB4MDAyNCwKLQlBQ1hfQ0NBX1RIUkVTSE9MRCAgICAgICAgICAgPSAweDAwMjUsCi0JQUNYX0VWRU5UX01CT1hfTUFTSyAgICAgICAgID0gMHgwMDI2LAotCUFDWF9DT05OX01PTklUX1BBUkFNUyAgICAgICA9IDB4MDAyRCwKLQlBQ1hfQ09OU19UWF9GQUlMVVJFICAgICAgICAgPSAweDAwMkYsCi0JQUNYX0JDTl9EVElNX09QVElPTlMgICAgICAgID0gMHgwMDMxLAotCUFDWF9TR19FTkFCTEUgICAgICAgICAgICAgICA9IDB4MDAzMiwKLQlBQ1hfU0dfQ0ZHICAgICAgICAgICAgICAgICAgPSAweDAwMzMsCi0JQUNYX0JFQUNPTl9GSUxURVJfVEFCTEUgICAgID0gMHgwMDM4LAotCUFDWF9BUlBfSVBfRklMVEVSICAgICAgICAgICA9IDB4MDAzOSwKLQlBQ1hfUk9BTUlOR19TVEFUSVNUSUNTX1RCTCAgPSAweDAwM0IsCi0JQUNYX1JBVEVfUE9MSUNZICAgICAgICAgICAgID0gMHgwMDNELAotCUFDWF9DVFNfUFJPVEVDVElPTiAgICAgICAgICA9IDB4MDAzRSwKLQlBQ1hfU0xFRVBfQVVUSCAgICAgICAgICAgICAgPSAweDAwM0YsCi0JQUNYX1BSRUFNQkxFX1RZUEUJICAgID0gMHgwMDQwLAotCUFDWF9FUlJPUl9DTlQgICAgICAgICAgICAgICA9IDB4MDA0MSwKLQlBQ1hfSUJTU19GSUxURVIJCSAgICA9IDB4MDA0NCwKLQlBQ1hfU0VSVklDRV9QRVJJT0RfVElNRU9VVCAgPSAweDAwNDUsCi0JQUNYX1RTRl9JTkZPICAgICAgICAgICAgICAgID0gMHgwMDQ2LAotCUFDWF9DT05GSUdfUFNfV01NICAgICAgICAgICA9IDB4MDA0OSwKLQlBQ1hfRU5BQkxFX1JYX0RBVEFfRklMVEVSICAgPSAweDAwNEEsCi0JQUNYX1NFVF9SWF9EQVRBX0ZJTFRFUiAgICAgID0gMHgwMDRCLAotCUFDWF9HRVRfREFUQV9GSUxURVJfU1RBVElTVElDUyA9IDB4MDA0QywKLQlBQ1hfUlhfQ09ORklHX09QVCAgICAgICAgICAgPSAweDAwNEUsCi0JQUNYX0ZSQUdfQ0ZHICAgICAgICAgICAgICAgID0gMHgwMDRGLAotCUFDWF9CRVRfRU5BQkxFICAgICAgICAgICAgICA9IDB4MDA1MCwKLQlBQ1hfUlNTSV9TTlJfVFJJR0dFUiAgICAgICAgPSAweDAwNTEsCi0JQUNYX1JTU0lfU05SX1dFSUdIVFMgICAgICAgID0gMHgwMDUyLAotCUFDWF9LRUVQX0FMSVZFX01PREUgICAgICAgICA9IDB4MDA1MywKLQlBQ1hfU0VUX0tFRVBfQUxJVkVfQ09ORklHICAgPSAweDAwNTQsCi0JQUNYX0JBX1NFU1NJT05fUkVTUE9OREVSX1BPTElDWSA9IDB4MDA1NSwKLQlBQ1hfQkFfU0VTU0lPTl9JTklUSUFUT1JfUE9MSUNZID0gMHgwMDU2LAotCUFDWF9QRUVSX0hUX0NBUCAgICAgICAgICAgICA9IDB4MDA1NywKLQlBQ1hfSFRfQlNTX09QRVJBVElPTiAgICAgICAgPSAweDAwNTgsCi0JQUNYX0NPRVhfQUNUSVZJVFkgICAgICAgICAgID0gMHgwMDU5LAotCUFDWF9TRVRfRENPX0lUUklNX1BBUkFNUyAgICA9IDB4MDA2MSwKLQlET1QxMV9SWF9NU0RVX0xJRkVfVElNRSAgICAgPSAweDEwMDQsCi0JRE9UMTFfQ1VSX1RYX1BXUiAgICAgICAgICAgID0gMHgxMDBELAotCURPVDExX1JYX0RPVDExX01PREUgICAgICAgICA9IDB4MTAxMiwKLQlET1QxMV9SVFNfVEhSRVNIT0xEICAgICAgICAgPSAweDEwMTMsCi0JRE9UMTFfR1JPVVBfQUREUkVTU19UQkwgICAgID0gMHgxMDE0LAotCUFDWF9QTV9DT05GSUcgICAgICAgICAgICAgICA9IDB4MTAxNiwKLQotCU1BWF9ET1QxMV9JRSA9IERPVDExX0dST1VQX0FERFJFU1NfVEJMLAotCi0JTUFYX0lFID0gMHhGRkZGCi19OwotCi0KLWludCB3bDEyNzFfYWN4X3dha2VfdXBfY29uZGl0aW9ucyhzdHJ1Y3Qgd2wxMjcxICp3bCk7Ci1pbnQgd2wxMjcxX2FjeF9zbGVlcF9hdXRoKHN0cnVjdCB3bDEyNzEgKndsLCB1OCBzbGVlcF9hdXRoKTsKLWludCB3bDEyNzFfYWN4X3R4X3Bvd2VyKHN0cnVjdCB3bDEyNzEgKndsLCBpbnQgcG93ZXIpOwotaW50IHdsMTI3MV9hY3hfZmVhdHVyZV9jZmcoc3RydWN0IHdsMTI3MSAqd2wpOwotaW50IHdsMTI3MV9hY3hfbWVtX21hcChzdHJ1Y3Qgd2wxMjcxICp3bCwKLQkJICAgICAgIHN0cnVjdCBhY3hfaGVhZGVyICptZW1fbWFwLCBzaXplX3QgbGVuKTsKLWludCB3bDEyNzFfYWN4X3J4X21zZHVfbGlmZV90aW1lKHN0cnVjdCB3bDEyNzEgKndsKTsKLWludCB3bDEyNzFfYWN4X3J4X2NvbmZpZyhzdHJ1Y3Qgd2wxMjcxICp3bCwgdTMyIGNvbmZpZywgdTMyIGZpbHRlcik7Ci1pbnQgd2wxMjcxX2FjeF9wZF90aHJlc2hvbGQoc3RydWN0IHdsMTI3MSAqd2wpOwotaW50IHdsMTI3MV9hY3hfc2xvdChzdHJ1Y3Qgd2wxMjcxICp3bCwgZW51bSBhY3hfc2xvdF90eXBlIHNsb3RfdGltZSk7Ci1pbnQgd2wxMjcxX2FjeF9ncm91cF9hZGRyZXNzX3RibChzdHJ1Y3Qgd2wxMjcxICp3bCwgYm9vbCBlbmFibGUsCi0JCQkJIHZvaWQgKm1jX2xpc3QsIHUzMiBtY19saXN0X2xlbik7Ci1pbnQgd2wxMjcxX2FjeF9zZXJ2aWNlX3BlcmlvZF90aW1lb3V0KHN0cnVjdCB3bDEyNzEgKndsKTsKLWludCB3bDEyNzFfYWN4X3J0c190aHJlc2hvbGQoc3RydWN0IHdsMTI3MSAqd2wsIHUxNiBydHNfdGhyZXNob2xkKTsKLWludCB3bDEyNzFfYWN4X2Rjb19pdHJpbV9wYXJhbXMoc3RydWN0IHdsMTI3MSAqd2wpOwotaW50IHdsMTI3MV9hY3hfYmVhY29uX2ZpbHRlcl9vcHQoc3RydWN0IHdsMTI3MSAqd2wsIGJvb2wgZW5hYmxlX2ZpbHRlcik7Ci1pbnQgd2wxMjcxX2FjeF9iZWFjb25fZmlsdGVyX3RhYmxlKHN0cnVjdCB3bDEyNzEgKndsKTsKLWludCB3bDEyNzFfYWN4X2Nvbm5fbW9uaXRfcGFyYW1zKHN0cnVjdCB3bDEyNzEgKndsLCBib29sIGVuYWJsZSk7Ci1pbnQgd2wxMjcxX2FjeF9zZ19lbmFibGUoc3RydWN0IHdsMTI3MSAqd2wsIGJvb2wgZW5hYmxlKTsKLWludCB3bDEyNzFfYWN4X3NnX2NmZyhzdHJ1Y3Qgd2wxMjcxICp3bCk7Ci1pbnQgd2wxMjcxX2FjeF9jY2FfdGhyZXNob2xkKHN0cnVjdCB3bDEyNzEgKndsKTsKLWludCB3bDEyNzFfYWN4X2Jjbl9kdGltX29wdGlvbnMoc3RydWN0IHdsMTI3MSAqd2wpOwotaW50IHdsMTI3MV9hY3hfYWlkKHN0cnVjdCB3bDEyNzEgKndsLCB1MTYgYWlkKTsKLWludCB3bDEyNzFfYWN4X2V2ZW50X21ib3hfbWFzayhzdHJ1Y3Qgd2wxMjcxICp3bCwgdTMyIGV2ZW50X21hc2spOwotaW50IHdsMTI3MV9hY3hfc2V0X3ByZWFtYmxlKHN0cnVjdCB3bDEyNzEgKndsLCBlbnVtIGFjeF9wcmVhbWJsZV90eXBlIHByZWFtYmxlKTsKLWludCB3bDEyNzFfYWN4X2N0c19wcm90ZWN0KHN0cnVjdCB3bDEyNzEgKndsLAotCQkJICAgZW51bSBhY3hfY3RzcHJvdGVjdF90eXBlIGN0c3Byb3RlY3QpOwotaW50IHdsMTI3MV9hY3hfc3RhdGlzdGljcyhzdHJ1Y3Qgd2wxMjcxICp3bCwgc3RydWN0IGFjeF9zdGF0aXN0aWNzICpzdGF0cyk7Ci1pbnQgd2wxMjcxX2FjeF9yYXRlX3BvbGljaWVzKHN0cnVjdCB3bDEyNzEgKndsKTsKLWludCB3bDEyNzFfYWN4X2FjX2NmZyhzdHJ1Y3Qgd2wxMjcxICp3bCwgdTggYWMsIHU4IGN3X21pbiwgdTE2IGN3X21heCwKLQkJICAgICAgdTggYWlmc24sIHUxNiB0eG9wKTsKLWludCB3bDEyNzFfYWN4X3RpZF9jZmcoc3RydWN0IHdsMTI3MSAqd2wsIHU4IHF1ZXVlX2lkLCB1OCBjaGFubmVsX3R5cGUsCi0JCSAgICAgICB1OCB0c2lkLCB1OCBwc19zY2hlbWUsIHU4IGFja19wb2xpY3ksCi0JCSAgICAgICB1MzIgYXBzZF9jb25mMCwgdTMyIGFwc2RfY29uZjEpOwotaW50IHdsMTI3MV9hY3hfZnJhZ190aHJlc2hvbGQoc3RydWN0IHdsMTI3MSAqd2wpOwotaW50IHdsMTI3MV9hY3hfdHhfY29uZmlnX29wdGlvbnMoc3RydWN0IHdsMTI3MSAqd2wpOwotaW50IHdsMTI3MV9hY3hfbWVtX2NmZyhzdHJ1Y3Qgd2wxMjcxICp3bCk7Ci1pbnQgd2wxMjcxX2FjeF9pbml0X21lbV9jb25maWcoc3RydWN0IHdsMTI3MSAqd2wpOwotaW50IHdsMTI3MV9hY3hfaW5pdF9yeF9pbnRlcnJ1cHQoc3RydWN0IHdsMTI3MSAqd2wpOwotaW50IHdsMTI3MV9hY3hfc21hcnRfcmVmbGV4KHN0cnVjdCB3bDEyNzEgKndsKTsKLWludCB3bDEyNzFfYWN4X2JldF9lbmFibGUoc3RydWN0IHdsMTI3MSAqd2wsIGJvb2wgZW5hYmxlKTsKLWludCB3bDEyNzFfYWN4X2FycF9pcF9maWx0ZXIoc3RydWN0IHdsMTI3MSAqd2wsIGJvb2wgZW5hYmxlLCBfX2JlMzIgYWRkcmVzcyk7Ci1pbnQgd2wxMjcxX2FjeF9wbV9jb25maWcoc3RydWN0IHdsMTI3MSAqd2wpOwotaW50IHdsMTI3MV9hY3hfa2VlcF9hbGl2ZV9tb2RlKHN0cnVjdCB3bDEyNzEgKndsLCBib29sIGVuYWJsZSk7Ci1pbnQgd2wxMjcxX2FjeF9rZWVwX2FsaXZlX2NvbmZpZyhzdHJ1Y3Qgd2wxMjcxICp3bCwgdTggaW5kZXgsIHU4IHRwbF92YWxpZCk7Ci1pbnQgd2wxMjcxX2FjeF9yc3NpX3Nucl90cmlnZ2VyKHN0cnVjdCB3bDEyNzEgKndsLCBib29sIGVuYWJsZSwKLQkJCQlzMTYgdGhvbGQsIHU4IGh5c3QpOwotaW50IHdsMTI3MV9hY3hfcnNzaV9zbnJfYXZnX3dlaWdodHMoc3RydWN0IHdsMTI3MSAqd2wpOwotaW50IHdsMTI3MV9hY3hfdHNmX2luZm8oc3RydWN0IHdsMTI3MSAqd2wsIHU2NCAqbWFjdGltZSk7Ci0KLSNlbmRpZiAvKiBfX1dMMTI3MV9BQ1hfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2Jvb3QuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfYm9vdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOTEwMjEyLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfYm9vdC5jCisrKyAvZGV2L251bGwKQEAgLTEsNTkzICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3bDEyNzEKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgotICoKLSAqIENvbnRhY3Q6IEx1Y2lhbm8gQ29lbGhvIDxsdWNpYW5vLmNvZWxob0Bub2tpYS5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0gKiAwMjExMC0xMzAxIFVTQQotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLQotI2luY2x1ZGUgIndsMTI3MV9hY3guaCIKLSNpbmNsdWRlICJ3bDEyNzFfcmVnLmgiCi0jaW5jbHVkZSAid2wxMjcxX2Jvb3QuaCIKLSNpbmNsdWRlICJ3bDEyNzFfaW8uaCIKLSNpbmNsdWRlICJ3bDEyNzFfZXZlbnQuaCIKLQotc3RhdGljIHN0cnVjdCB3bDEyNzFfcGFydGl0aW9uX3NldCBwYXJ0X3RhYmxlW1BBUlRfVEFCTEVfTEVOXSA9IHsKLQlbUEFSVF9ET1dOXSA9IHsKLQkJLm1lbSA9IHsKLQkJCS5zdGFydCA9IDB4MDAwMDAwMDAsCi0JCQkuc2l6ZSAgPSAweDAwMDE3N2MwCi0JCX0sCi0JCS5yZWcgPSB7Ci0JCQkuc3RhcnQgPSBSRUdJU1RFUlNfQkFTRSwKLQkJCS5zaXplICA9IDB4MDAwMDg4MDAKLQkJfSwKLQkJLm1lbTIgPSB7Ci0JCQkuc3RhcnQgPSAweDAwMDAwMDAwLAotCQkJLnNpemUgID0gMHgwMDAwMDAwMAotCQl9LAotCQkubWVtMyA9IHsKLQkJCS5zdGFydCA9IDB4MDAwMDAwMDAsCi0JCQkuc2l6ZSAgPSAweDAwMDAwMDAwCi0JCX0sCi0JfSwKLQotCVtQQVJUX1dPUktdID0gewotCQkubWVtID0gewotCQkJLnN0YXJ0ID0gMHgwMDA0MDAwMCwKLQkJCS5zaXplICA9IDB4MDAwMTRmYzAKLQkJfSwKLQkJLnJlZyA9IHsKLQkJCS5zdGFydCA9IFJFR0lTVEVSU19CQVNFLAotCQkJLnNpemUgID0gMHgwMDAwYTAwMAotCQl9LAotCQkubWVtMiA9IHsKLQkJCS5zdGFydCA9IDB4MDAzMDA0ZjgsCi0JCQkuc2l6ZSAgPSAweDAwMDAwMDA0Ci0JCX0sCi0JCS5tZW0zID0gewotCQkJLnN0YXJ0ID0gMHgwMDA0MDQwNCwKLQkJCS5zaXplICA9IDB4MDAwMDAwMDAKLQkJfSwKLQl9LAotCi0JW1BBUlRfRFJQV10gPSB7Ci0JCS5tZW0gPSB7Ci0JCQkuc3RhcnQgPSAweDAwMDQwMDAwLAotCQkJLnNpemUgID0gMHgwMDAxNGZjMAotCQl9LAotCQkucmVnID0gewotCQkJLnN0YXJ0ID0gRFJQV19CQVNFLAotCQkJLnNpemUgID0gMHgwMDAwNjAwMAotCQl9LAotCQkubWVtMiA9IHsKLQkJCS5zdGFydCA9IDB4MDAwMDAwMDAsCi0JCQkuc2l6ZSAgPSAweDAwMDAwMDAwCi0JCX0sCi0JCS5tZW0zID0gewotCQkJLnN0YXJ0ID0gMHgwMDAwMDAwMCwKLQkJCS5zaXplICA9IDB4MDAwMDAwMDAKLQkJfQotCX0KLX07Ci0KLXN0YXRpYyB2b2lkIHdsMTI3MV9ib290X3NldF9lY3B1X2N0cmwoc3RydWN0IHdsMTI3MSAqd2wsIHUzMiBmbGFnKQotewotCXUzMiBjcHVfY3RybDsKLQotCS8qIDEwLjUuMCBydW4gdGhlIGZpcm13YXJlIChJKSAqLwotCWNwdV9jdHJsID0gd2wxMjcxX3JlYWQzMih3bCwgQUNYX1JFR19FQ1BVX0NPTlRST0wpOwotCi0JLyogMTAuNS4xIHJ1biB0aGUgZmlybXdhcmUgKElJKSAqLwotCWNwdV9jdHJsIHw9IGZsYWc7Ci0Jd2wxMjcxX3dyaXRlMzIod2wsIEFDWF9SRUdfRUNQVV9DT05UUk9MLCBjcHVfY3RybCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdsMTI3MV9ib290X2Z3X3ZlcnNpb24oc3RydWN0IHdsMTI3MSAqd2wpCi17Ci0Jc3RydWN0IHdsMTI3MV9zdGF0aWNfZGF0YSBzdGF0aWNfZGF0YTsKLQotCXdsMTI3MV9yZWFkKHdsLCB3bC0+Y21kX2JveF9hZGRyLCAmc3RhdGljX2RhdGEsIHNpemVvZihzdGF0aWNfZGF0YSksCi0JCSAgICBmYWxzZSk7Ci0KLQlzdHJuY3B5KHdsLT5jaGlwLmZ3X3Zlciwgc3RhdGljX2RhdGEuZndfdmVyc2lvbiwKLQkJc2l6ZW9mKHdsLT5jaGlwLmZ3X3ZlcikpOwotCi0JLyogbWFrZSBzdXJlIHRoZSBzdHJpbmcgaXMgTlVMTC10ZXJtaW5hdGVkICovCi0Jd2wtPmNoaXAuZndfdmVyW3NpemVvZih3bC0+Y2hpcC5md192ZXIpIC0gMV0gPSAnXDAnOwotfQotCi1zdGF0aWMgaW50IHdsMTI3MV9ib290X3VwbG9hZF9maXJtd2FyZV9jaHVuayhzdHJ1Y3Qgd2wxMjcxICp3bCwgdm9pZCAqYnVmLAotCQkJCQkgICAgIHNpemVfdCBmd19kYXRhX2xlbiwgdTMyIGRlc3QpCi17Ci0Jc3RydWN0IHdsMTI3MV9wYXJ0aXRpb25fc2V0IHBhcnRpdGlvbjsKLQlpbnQgYWRkciwgY2h1bmtfbnVtLCBwYXJ0aXRpb25fbGltaXQ7Ci0JdTggKnAsICpjaHVuazsKLQotCS8qIHdoYWxfRndDdHJsX0xvYWRGd0ltYWdlU20oKSAqLwotCi0Jd2wxMjcxX2RlYnVnKERFQlVHX0JPT1QsICJzdGFydGluZyBmaXJtd2FyZSB1cGxvYWQiKTsKLQotCXdsMTI3MV9kZWJ1ZyhERUJVR19CT09ULCAiZndfZGF0YV9sZW4gJXpkIGNodW5rX3NpemUgJWQiLAotCQkgICAgIGZ3X2RhdGFfbGVuLCBDSFVOS19TSVpFKTsKLQotCWlmICgoZndfZGF0YV9sZW4gJSA0KSAhPSAwKSB7Ci0JCXdsMTI3MV9lcnJvcigiZmlybXdhcmUgbGVuZ3RoIG5vdCBtdWx0aXBsZSBvZiBmb3VyIik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCWNodW5rID0ga21hbGxvYyhDSFVOS19TSVpFLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNodW5rKSB7Ci0JCXdsMTI3MV9lcnJvcigiYWxsb2NhdGlvbiBmb3IgZmlybXdhcmUgdXBsb2FkIGNodW5rIGZhaWxlZCIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQltZW1jcHkoJnBhcnRpdGlvbiwgJnBhcnRfdGFibGVbUEFSVF9ET1dOXSwgc2l6ZW9mKHBhcnRpdGlvbikpOwotCXBhcnRpdGlvbi5tZW0uc3RhcnQgPSBkZXN0OwotCXdsMTI3MV9zZXRfcGFydGl0aW9uKHdsLCAmcGFydGl0aW9uKTsKLQotCS8qIDEwLjEgc2V0IHBhcnRpdGlvbiBsaW1pdCBhbmQgY2h1bmsgbnVtICovCi0JY2h1bmtfbnVtID0gMDsKLQlwYXJ0aXRpb25fbGltaXQgPSBwYXJ0X3RhYmxlW1BBUlRfRE9XTl0ubWVtLnNpemU7Ci0KLQl3aGlsZSAoY2h1bmtfbnVtIDwgZndfZGF0YV9sZW4gLyBDSFVOS19TSVpFKSB7Ci0JCS8qIDEwLjIgdXBkYXRlIHBhcnRpdGlvbiwgaWYgbmVlZGVkICovCi0JCWFkZHIgPSBkZXN0ICsgKGNodW5rX251bSArIDIpICogQ0hVTktfU0laRTsKLQkJaWYgKGFkZHIgPiBwYXJ0aXRpb25fbGltaXQpIHsKLQkJCWFkZHIgPSBkZXN0ICsgY2h1bmtfbnVtICogQ0hVTktfU0laRTsKLQkJCXBhcnRpdGlvbl9saW1pdCA9IGNodW5rX251bSAqIENIVU5LX1NJWkUgKwotCQkJCXBhcnRfdGFibGVbUEFSVF9ET1dOXS5tZW0uc2l6ZTsKLQkJCXBhcnRpdGlvbi5tZW0uc3RhcnQgPSBhZGRyOwotCQkJd2wxMjcxX3NldF9wYXJ0aXRpb24od2wsICZwYXJ0aXRpb24pOwotCQl9Ci0KLQkJLyogMTAuMyB1cGxvYWQgdGhlIGNodW5rICovCi0JCWFkZHIgPSBkZXN0ICsgY2h1bmtfbnVtICogQ0hVTktfU0laRTsKLQkJcCA9IGJ1ZiArIGNodW5rX251bSAqIENIVU5LX1NJWkU7Ci0JCW1lbWNweShjaHVuaywgcCwgQ0hVTktfU0laRSk7Ci0JCXdsMTI3MV9kZWJ1ZyhERUJVR19CT09ULCAidXBsb2FkaW5nIGZ3IGNodW5rIDB4JXAgdG8gMHgleCIsCi0JCQkgICAgIHAsIGFkZHIpOwotCQl3bDEyNzFfd3JpdGUod2wsIGFkZHIsIGNodW5rLCBDSFVOS19TSVpFLCBmYWxzZSk7Ci0KLQkJY2h1bmtfbnVtKys7Ci0JfQotCi0JLyogMTAuNCB1cGxvYWQgdGhlIGxhc3QgY2h1bmsgKi8KLQlhZGRyID0gZGVzdCArIGNodW5rX251bSAqIENIVU5LX1NJWkU7Ci0JcCA9IGJ1ZiArIGNodW5rX251bSAqIENIVU5LX1NJWkU7Ci0JbWVtY3B5KGNodW5rLCBwLCBmd19kYXRhX2xlbiAlIENIVU5LX1NJWkUpOwotCXdsMTI3MV9kZWJ1ZyhERUJVR19CT09ULCAidXBsb2FkaW5nIGZ3IGxhc3QgY2h1bmsgKCV6ZCBCKSAweCVwIHRvIDB4JXgiLAotCQkgICAgIGZ3X2RhdGFfbGVuICUgQ0hVTktfU0laRSwgcCwgYWRkcik7Ci0Jd2wxMjcxX3dyaXRlKHdsLCBhZGRyLCBjaHVuaywgZndfZGF0YV9sZW4gJSBDSFVOS19TSVpFLCBmYWxzZSk7Ci0KLQlrZnJlZShjaHVuayk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgd2wxMjcxX2Jvb3RfdXBsb2FkX2Zpcm13YXJlKHN0cnVjdCB3bDEyNzEgKndsKQotewotCXUzMiBjaHVua3MsIGFkZHIsIGxlbjsKLQlpbnQgcmV0ID0gMDsKLQl1OCAqZnc7Ci0KLQlmdyA9IHdsLT5mdzsKLQljaHVua3MgPSBiZTMyX3RvX2NwdXAoKF9fYmUzMiAqKSBmdyk7Ci0JZncgKz0gc2l6ZW9mKHUzMik7Ci0KLQl3bDEyNzFfZGVidWcoREVCVUdfQk9PVCwgImZpcm13YXJlIGNodW5rcyB0byBiZSB1cGxvYWRlZDogJXUiLCBjaHVua3MpOwotCi0Jd2hpbGUgKGNodW5rcy0tKSB7Ci0JCWFkZHIgPSBiZTMyX3RvX2NwdXAoKF9fYmUzMiAqKSBmdyk7Ci0JCWZ3ICs9IHNpemVvZih1MzIpOwotCQlsZW4gPSBiZTMyX3RvX2NwdXAoKF9fYmUzMiAqKSBmdyk7Ci0JCWZ3ICs9IHNpemVvZih1MzIpOwotCi0JCWlmIChsZW4gPiAzMDAwMDApIHsKLQkJCXdsMTI3MV9pbmZvKCJmaXJtd2FyZSBjaHVuayB0b28gbG9uZzogJXUiLCBsZW4pOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJd2wxMjcxX2RlYnVnKERFQlVHX0JPT1QsICJjaHVuayAlZCBhZGRyIDB4JXggbGVuICV1IiwKLQkJCSAgICAgY2h1bmtzLCBhZGRyLCBsZW4pOwotCQlyZXQgPSB3bDEyNzFfYm9vdF91cGxvYWRfZmlybXdhcmVfY2h1bmsod2wsIGZ3LCBsZW4sIGFkZHIpOwotCQlpZiAocmV0ICE9IDApCi0JCQlicmVhazsKLQkJZncgKz0gbGVuOwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgd2wxMjcxX2Jvb3RfdXBsb2FkX252cyhzdHJ1Y3Qgd2wxMjcxICp3bCkKLXsKLQlzaXplX3QgbnZzX2xlbiwgYnVyc3RfbGVuOwotCWludCBpOwotCXUzMiBkZXN0X2FkZHIsIHZhbDsKLQl1OCAqbnZzX3B0ciwgKm52c19hbGlnbmVkOwotCi0JaWYgKHdsLT5udnMgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQkvKgotCSAqIEZJWE1FOiB0aGUgTEVHQUNZIE5WUyBpbWFnZSBzdXBwb3J0IChOVlMncyBtaXNzaW5nIHRoZSA1R0h6IGJhbmQKLQkgKiBjb25maWd1cmF0aW9ucykgY2FuIGJlIHJlbW92ZWQgd2hlbiB0aG9zZSBOVlMgZmlsZXMgc3RvcCBmbG9hdGluZwotCSAqIGFyb3VuZC4KLQkgKi8KLQlpZiAod2wtPm52c19sZW4gPT0gc2l6ZW9mKHN0cnVjdCB3bDEyNzFfbnZzX2ZpbGUpIHx8Ci0JICAgIHdsLT5udnNfbGVuID09IFdMMTI3MV9JTklfTEVHQUNZX05WU19GSUxFX1NJWkUpIHsKLQkJaWYgKHdsLT5udnMtPmdlbmVyYWxfcGFyYW1zLmR1YWxfbW9kZV9zZWxlY3QpCi0JCQl3bC0+ZW5hYmxlXzExYSA9IHRydWU7Ci0JfQotCi0JaWYgKHdsLT5udnNfbGVuICE9IHNpemVvZihzdHJ1Y3Qgd2wxMjcxX252c19maWxlKSAmJgotCSAgICAod2wtPm52c19sZW4gIT0gV0wxMjcxX0lOSV9MRUdBQ1lfTlZTX0ZJTEVfU0laRSB8fAotCSAgICAgd2wtPmVuYWJsZV8xMWEpKSB7Ci0JCXdsMTI3MV9lcnJvcigibnZzIHNpemUgaXMgbm90IGFzIGV4cGVjdGVkOiAlenUgIT0gJXp1IiwKLQkJCSAgICAgd2wtPm52c19sZW4sIHNpemVvZihzdHJ1Y3Qgd2wxMjcxX252c19maWxlKSk7Ci0JCWtmcmVlKHdsLT5udnMpOwotCQl3bC0+bnZzID0gTlVMTDsKLQkJd2wtPm52c19sZW4gPSAwOwotCQlyZXR1cm4gLUVJTFNFUTsKLQl9Ci0KLQkvKiBvbmx5IHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBOVlMgbmVlZHMgdG8gYmUgdXBsb2FkZWQgKi8KLQludnNfbGVuID0gc2l6ZW9mKHdsLT5udnMtPm52cyk7Ci0JbnZzX3B0ciA9ICh1OCAqKXdsLT5udnMtPm52czsKLQotCS8qIHVwZGF0ZSBjdXJyZW50IE1BQyBhZGRyZXNzIHRvIE5WUyAqLwotCW52c19wdHJbMTFdID0gd2wtPm1hY19hZGRyWzBdOwotCW52c19wdHJbMTBdID0gd2wtPm1hY19hZGRyWzFdOwotCW52c19wdHJbNl0gPSB3bC0+bWFjX2FkZHJbMl07Ci0JbnZzX3B0cls1XSA9IHdsLT5tYWNfYWRkclszXTsKLQludnNfcHRyWzRdID0gd2wtPm1hY19hZGRyWzRdOwotCW52c19wdHJbM10gPSB3bC0+bWFjX2FkZHJbNV07Ci0KLQkvKgotCSAqIExheW91dCBiZWZvcmUgdGhlIGFjdHVhbCBOVlMgdGFibGVzOgotCSAqIDEgYnl0ZSA6IGJ1cnN0IGxlbmd0aC4KLQkgKiAyIGJ5dGVzOiBkZXN0aW5hdGlvbiBhZGRyZXNzLgotCSAqIG4gYnl0ZXM6IGRhdGEgdG8gYnVyc3QgY29weS4KLQkgKgotCSAqIFRoaXMgaXMgZW5kZWQgYnkgYSAwIGxlbmd0aCwgdGhlbiB0aGUgTlZTIHRhYmxlcy4KLQkgKi8KLQotCS8qIEZJWE1FOiBEbyB3ZSBuZWVkIHRvIGNoZWNrIGhlcmUgd2hldGhlciB0aGUgTFNCIGlzIDE/ICovCi0Jd2hpbGUgKG52c19wdHJbMF0pIHsKLQkJYnVyc3RfbGVuID0gbnZzX3B0clswXTsKLQkJZGVzdF9hZGRyID0gKG52c19wdHJbMV0gJiAweGZlKSB8ICgodTMyKShudnNfcHRyWzJdIDw8IDgpKTsKLQotCQkvKgotCQkgKiBEdWUgdG8gb3VyIG5ldyB3bDEyNzFfdHJhbnNsYXRlX3JlZ19hZGRyIGZ1bmN0aW9uLAotCQkgKiB3ZSBuZWVkIHRvIGFkZCB0aGUgUkVHSVNURVJfQkFTRSB0byB0aGUgZGVzdGluYXRpb24KLQkJICovCi0JCWRlc3RfYWRkciArPSBSRUdJU1RFUlNfQkFTRTsKLQotCQkvKiBXZSBtb3ZlIG91ciBwb2ludGVyIHRvIHRoZSBkYXRhICovCi0JCW52c19wdHIgKz0gMzsKLQotCQlmb3IgKGkgPSAwOyBpIDwgYnVyc3RfbGVuOyBpKyspIHsKLQkJCXZhbCA9IChudnNfcHRyWzBdIHwgKG52c19wdHJbMV0gPDwgOCkKLQkJCSAgICAgICB8IChudnNfcHRyWzJdIDw8IDE2KSB8IChudnNfcHRyWzNdIDw8IDI0KSk7Ci0KLQkJCXdsMTI3MV9kZWJ1ZyhERUJVR19CT09ULAotCQkJCSAgICAgIm52cyBidXJzdCB3cml0ZSAweCV4OiAweCV4IiwKLQkJCQkgICAgIGRlc3RfYWRkciwgdmFsKTsKLQkJCXdsMTI3MV93cml0ZTMyKHdsLCBkZXN0X2FkZHIsIHZhbCk7Ci0KLQkJCW52c19wdHIgKz0gNDsKLQkJCWRlc3RfYWRkciArPSA0OwotCQl9Ci0JfQotCi0JLyoKLQkgKiBXZSd2ZSByZWFjaGVkIHRoZSBmaXJzdCB6ZXJvIGxlbmd0aCwgdGhlIGZpcnN0IE5WUyB0YWJsZQotCSAqIGlzIGxvY2F0ZWQgYXQgYW4gYWxpZ25lZCBvZmZzZXQgd2hpY2ggaXMgYXQgbGVhc3QgNyBieXRlcyBmdXJ0aGVyLgotCSAqLwotCW52c19wdHIgPSAodTggKil3bC0+bnZzLT5udnMgKwotCQkJQUxJR04obnZzX3B0ciAtICh1OCAqKXdsLT5udnMtPm52cyArIDcsIDQpOwotCW52c19sZW4gLT0gbnZzX3B0ciAtICh1OCAqKXdsLT5udnMtPm52czsKLQotCS8qIE5vdyB3ZSBtdXN0IHNldCB0aGUgcGFydGl0aW9uIGNvcnJlY3RseSAqLwotCXdsMTI3MV9zZXRfcGFydGl0aW9uKHdsLCAmcGFydF90YWJsZVtQQVJUX1dPUktdKTsKLQotCS8qIENvcHkgdGhlIE5WUyB0YWJsZXMgdG8gYSBuZXcgYmxvY2sgdG8gZW5zdXJlIGFsaWdubWVudCAqLwotCW52c19hbGlnbmVkID0ga21lbWR1cChudnNfcHRyLCBudnNfbGVuLCBHRlBfS0VSTkVMKTsKLQlpZiAoIW52c19hbGlnbmVkKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCS8qIEFuZCBmaW5hbGx5IHdlIHVwbG9hZCB0aGUgTlZTIHRhYmxlcyAqLwotCXdsMTI3MV93cml0ZSh3bCwgQ01EX01CT1hfQUREUkVTUywgbnZzX2FsaWduZWQsIG52c19sZW4sIGZhbHNlKTsKLQotCWtmcmVlKG52c19hbGlnbmVkKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgd2wxMjcxX2Jvb3RfZW5hYmxlX2ludGVycnVwdHMoc3RydWN0IHdsMTI3MSAqd2wpCi17Ci0Jd2wxMjcxX2VuYWJsZV9pbnRlcnJ1cHRzKHdsKTsKLQl3bDEyNzFfd3JpdGUzMih3bCwgQUNYX1JFR19JTlRFUlJVUFRfTUFTSywKLQkJICAgICAgIFdMMTI3MV9BQ1hfSU5UUl9BTEwgJiB+KFdMMTI3MV9JTlRSX01BU0spKTsKLQl3bDEyNzFfd3JpdGUzMih3bCwgSElfQ0ZHLCBISV9DRkdfREVGX1ZBTCk7Ci19Ci0KLXN0YXRpYyBpbnQgd2wxMjcxX2Jvb3Rfc29mdF9yZXNldChzdHJ1Y3Qgd2wxMjcxICp3bCkKLXsKLQl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7Ci0JdTMyIGJvb3RfZGF0YTsKLQotCS8qIHBlcmZvcm0gc29mdCByZXNldCAqLwotCXdsMTI3MV93cml0ZTMyKHdsLCBBQ1hfUkVHX1NMVl9TT0ZUX1JFU0VULCBBQ1hfU0xWX1NPRlRfUkVTRVRfQklUKTsKLQotCS8qIFNPRlRfUkVTRVQgaXMgc2VsZiBjbGVhcmluZyAqLwotCXRpbWVvdXQgPSBqaWZmaWVzICsgdXNlY3NfdG9famlmZmllcyhTT0ZUX1JFU0VUX01BWF9USU1FKTsKLQl3aGlsZSAoMSkgewotCQlib290X2RhdGEgPSB3bDEyNzFfcmVhZDMyKHdsLCBBQ1hfUkVHX1NMVl9TT0ZUX1JFU0VUKTsKLQkJd2wxMjcxX2RlYnVnKERFQlVHX0JPT1QsICJzb2Z0IHJlc2V0IGJvb3RkYXRhIDB4JXgiLCBib290X2RhdGEpOwotCQlpZiAoKGJvb3RfZGF0YSAmIEFDWF9TTFZfU09GVF9SRVNFVF9CSVQpID09IDApCi0JCQlicmVhazsKLQotCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgewotCQkJLyogMS4yIGNoZWNrIHBXaGFsQnVzLT51U2VsZkNsZWFyVGltZSBpZiB0aGUKLQkJCSAqIHRpbWVvdXQgd2FzIHJlYWNoZWQgKi8KLQkJCXdsMTI3MV9lcnJvcigic29mdCByZXNldCB0aW1lb3V0Iik7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQotCQl1ZGVsYXkoU09GVF9SRVNFVF9TVEFMTF9USU1FKTsKLQl9Ci0KLQkvKiBkaXNhYmxlIFJ4L1R4ICovCi0Jd2wxMjcxX3dyaXRlMzIod2wsIEVOQUJMRSwgMHgwKTsKLQotCS8qIGRpc2FibGUgYXV0byBjYWxpYnJhdGlvbiBvbiBzdGFydCovCi0Jd2wxMjcxX3dyaXRlMzIod2wsIFNQQVJFX0EyLCAweGZmZmYpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgd2wxMjcxX2Jvb3RfcnVuX2Zpcm13YXJlKHN0cnVjdCB3bDEyNzEgKndsKQotewotCWludCBsb29wLCByZXQ7Ci0JdTMyIGNoaXBfaWQsIGludHI7Ci0KLQl3bDEyNzFfYm9vdF9zZXRfZWNwdV9jdHJsKHdsLCBFQ1BVX0NPTlRST0xfSEFMVCk7Ci0KLQljaGlwX2lkID0gd2wxMjcxX3JlYWQzMih3bCwgQ0hJUF9JRF9CKTsKLQotCXdsMTI3MV9kZWJ1ZyhERUJVR19CT09ULCAiY2hpcCBpZCBhZnRlciBmaXJtd2FyZSBib290OiAweCV4IiwgY2hpcF9pZCk7Ci0KLQlpZiAoY2hpcF9pZCAhPSB3bC0+Y2hpcC5pZCkgewotCQl3bDEyNzFfZXJyb3IoImNoaXAgaWQgZG9lc24ndCBtYXRjaCBhZnRlciBmaXJtd2FyZSBib290Iik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCS8qIHdhaXQgZm9yIGluaXQgdG8gY29tcGxldGUgKi8KLQlsb29wID0gMDsKLQl3aGlsZSAobG9vcCsrIDwgSU5JVF9MT09QKSB7Ci0JCXVkZWxheShJTklUX0xPT1BfREVMQVkpOwotCQlpbnRyID0gd2wxMjcxX3JlYWQzMih3bCwgQUNYX1JFR19JTlRFUlJVUFRfTk9fQ0xFQVIpOwotCi0JCWlmIChpbnRyID09IDB4ZmZmZmZmZmYpIHsKLQkJCXdsMTI3MV9lcnJvcigiZXJyb3IgcmVhZGluZyBoYXJkd2FyZSBjb21wbGV0ZSAiCi0JCQkJICAgICAiaW5pdCBpbmRpY2F0aW9uIik7Ci0JCQlyZXR1cm4gLUVJTzsKLQkJfQotCQkvKiBjaGVjayB0aGF0IEFDWF9JTlRSX0lOSVRfQ09NUExFVEUgaXMgZW5hYmxlZCAqLwotCQllbHNlIGlmIChpbnRyICYgV0wxMjcxX0FDWF9JTlRSX0lOSVRfQ09NUExFVEUpIHsKLQkJCXdsMTI3MV93cml0ZTMyKHdsLCBBQ1hfUkVHX0lOVEVSUlVQVF9BQ0ssCi0JCQkJICAgICAgIFdMMTI3MV9BQ1hfSU5UUl9JTklUX0NPTVBMRVRFKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JaWYgKGxvb3AgPiBJTklUX0xPT1ApIHsKLQkJd2wxMjcxX2Vycm9yKCJ0aW1lb3V0IHdhaXRpbmcgZm9yIHRoZSBoYXJkd2FyZSB0byAiCi0JCQkgICAgICJjb21wbGV0ZSBpbml0aWFsaXphdGlvbiIpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQkvKiBnZXQgaGFyZHdhcmUgY29uZmlnIGNvbW1hbmQgbWFpbCBib3ggKi8KLQl3bC0+Y21kX2JveF9hZGRyID0gd2wxMjcxX3JlYWQzMih3bCwgUkVHX0NPTU1BTkRfTUFJTEJPWF9QVFIpOwotCi0JLyogZ2V0IGhhcmR3YXJlIGNvbmZpZyBldmVudCBtYWlsIGJveCAqLwotCXdsLT5ldmVudF9ib3hfYWRkciA9IHdsMTI3MV9yZWFkMzIod2wsIFJFR19FVkVOVF9NQUlMQk9YX1BUUik7Ci0KLQkvKiBzZXQgdGhlIHdvcmtpbmcgcGFydGl0aW9uIHRvIGl0cyAicnVubmluZyIgbW9kZSBvZmZzZXQgKi8KLQl3bDEyNzFfc2V0X3BhcnRpdGlvbih3bCwgJnBhcnRfdGFibGVbUEFSVF9XT1JLXSk7Ci0KLQl3bDEyNzFfZGVidWcoREVCVUdfTUFJTEJPWCwgImNtZF9ib3hfYWRkciAweCV4IGV2ZW50X2JveF9hZGRyIDB4JXgiLAotCQkgICAgIHdsLT5jbWRfYm94X2FkZHIsIHdsLT5ldmVudF9ib3hfYWRkcik7Ci0KLQl3bDEyNzFfYm9vdF9md192ZXJzaW9uKHdsKTsKLQotCS8qCi0JICogaW4gY2FzZSBvZiBmdWxsIGFzeW5jaHJvbm91cyBtb2RlIHRoZSBmaXJtd2FyZSBldmVudCBtdXN0IGJlCi0JICogcmVhZHkgdG8gcmVjZWl2ZSBldmVudCBmcm9tIHRoZSBjb21tYW5kIG1haWxib3gKLQkgKi8KLQotCS8qIHVubWFzayByZXF1aXJlZCBtYm94IGV2ZW50cyAgKi8KLQl3bC0+ZXZlbnRfbWFzayA9IEJTU19MT1NFX0VWRU5UX0lEIHwKLQkJU0NBTl9DT01QTEVURV9FVkVOVF9JRCB8Ci0JCVBTX1JFUE9SVF9FVkVOVF9JRCB8Ci0JCUpPSU5fRVZFTlRfQ09NUExFVEVfSUQgfAotCQlESVNDT05ORUNUX0VWRU5UX0NPTVBMRVRFX0lEIHwKLQkJUlNTSV9TTlJfVFJJR0dFUl8wX0VWRU5UX0lEIHwKLQkJUFNQT0xMX0RFTElWRVJZX0ZBSUxVUkVfRVZFTlRfSUQgfAotCQlTT0ZUX0dFTUlOSV9TRU5TRV9FVkVOVF9JRDsKLQotCXJldCA9IHdsMTI3MV9ldmVudF91bm1hc2sod2wpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXdsMTI3MV9lcnJvcigiRVZFTlQgbWFzayBzZXR0aW5nIGZhaWxlZCIpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXdsMTI3MV9ldmVudF9tYm94X2NvbmZpZyh3bCk7Ci0KLQkvKiBmaXJtd2FyZSBzdGFydHVwIGNvbXBsZXRlZCAqLwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHdsMTI3MV9ib290X3dyaXRlX2lycV9wb2xhcml0eShzdHJ1Y3Qgd2wxMjcxICp3bCkKLXsKLQl1MzIgcG9sYXJpdHk7Ci0KLQlwb2xhcml0eSA9IHdsMTI3MV90b3BfcmVnX3JlYWQod2wsIE9DUF9SRUdfUE9MQVJJVFkpOwotCi0JLyogV2UgdXNlIEhJR0ggcG9sYXJpdHksIHNvIHVuc2V0IHRoZSBMT1cgYml0ICovCi0JcG9sYXJpdHkgJj0gflBPTEFSSVRZX0xPVzsKLQl3bDEyNzFfdG9wX3JlZ193cml0ZSh3bCwgT0NQX1JFR19QT0xBUklUWSwgcG9sYXJpdHkpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHdsMTI3MV9ib290X2h3X3ZlcnNpb24oc3RydWN0IHdsMTI3MSAqd2wpCi17Ci0JdTMyIGZ1c2U7Ci0KLQlmdXNlID0gd2wxMjcxX3RvcF9yZWdfcmVhZCh3bCwgUkVHX0ZVU0VfREFUQV8yXzEpOwotCWZ1c2UgPSAoZnVzZSAmIFBHX1ZFUl9NQVNLKSA+PiBQR19WRVJfT0ZGU0VUOwotCi0Jd2wtPmh3X3BnX3ZlciA9IChzOClmdXNlOwotfQotCi1pbnQgd2wxMjcxX2Jvb3Qoc3RydWN0IHdsMTI3MSAqd2wpCi17Ci0JaW50IHJldCA9IDA7Ci0JdTMyIHRtcCwgY2xrLCBwYXVzZTsKLQlpbnQgcmVmX2Nsb2NrID0gd2wtPnJlZl9jbG9jazsKLQotCXdsMTI3MV9ib290X2h3X3ZlcnNpb24od2wpOwotCi0JaWYgKHJlZl9jbG9jayA9PSAwIHx8IHJlZl9jbG9jayA9PSAyIHx8IHJlZl9jbG9jayA9PSA0KQotCQkvKiByZWYgY2xrOiAxOS4yLzM4LjQvMzguNC1YVEFMICovCi0JCWNsayA9IDB4MzsKLQllbHNlIGlmIChyZWZfY2xvY2sgPT0gMSB8fCByZWZfY2xvY2sgPT0gMykKLQkJLyogcmVmIGNsazogMjYvNTIgKi8KLQkJY2xrID0gMHg1OwotCWVsc2UKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAocmVmX2Nsb2NrICE9IDApIHsKLQkJdTE2IHZhbDsKLQkJLyogU2V0IGNsb2NrIHR5cGUgKG9wZW4gZHJhaW4pICovCi0JCXZhbCA9IHdsMTI3MV90b3BfcmVnX3JlYWQod2wsIE9DUF9SRUdfQ0xLX1RZUEUpOwotCQl2YWwgJj0gRlJFRl9DTEtfVFlQRV9CSVRTOwotCQl3bDEyNzFfdG9wX3JlZ193cml0ZSh3bCwgT0NQX1JFR19DTEtfVFlQRSwgdmFsKTsKLQotCQkvKiBTZXQgY2xvY2sgcHVsbCBtb2RlIChubyBwdWxsKSAqLwotCQl2YWwgPSB3bDEyNzFfdG9wX3JlZ19yZWFkKHdsLCBPQ1BfUkVHX0NMS19QVUxMKTsKLQkJdmFsIHw9IE5PX1BVTEw7Ci0JCXdsMTI3MV90b3BfcmVnX3dyaXRlKHdsLCBPQ1BfUkVHX0NMS19QVUxMLCB2YWwpOwotCX0gZWxzZSB7Ci0JCXUxNiB2YWw7Ci0JCS8qIFNldCBjbG9jayBwb2xhcml0eSAqLwotCQl2YWwgPSB3bDEyNzFfdG9wX3JlZ19yZWFkKHdsLCBPQ1BfUkVHX0NMS19QT0xBUklUWSk7Ci0JCXZhbCAmPSBGUkVGX0NMS19QT0xBUklUWV9CSVRTOwotCQl2YWwgfD0gQ0xLX1JFUV9PVVROX1NFTDsKLQkJd2wxMjcxX3RvcF9yZWdfd3JpdGUod2wsIE9DUF9SRUdfQ0xLX1BPTEFSSVRZLCB2YWwpOwotCX0KLQotCXdsMTI3MV93cml0ZTMyKHdsLCBQTExfUEFSQU1FVEVSUywgY2xrKTsKLQotCXBhdXNlID0gd2wxMjcxX3JlYWQzMih3bCwgUExMX1BBUkFNRVRFUlMpOwotCi0Jd2wxMjcxX2RlYnVnKERFQlVHX0JPT1QsICJwYXVzZTEgMHgleCIsIHBhdXNlKTsKLQotCXBhdXNlICY9IH4oV1VfQ09VTlRFUl9QQVVTRV9WQUwpOwotCXBhdXNlIHw9IFdVX0NPVU5URVJfUEFVU0VfVkFMOwotCXdsMTI3MV93cml0ZTMyKHdsLCBXVV9DT1VOVEVSX1BBVVNFLCBwYXVzZSk7Ci0KLQkvKiBDb250aW51ZSB0aGUgRUxQIHdha2UgdXAgc2VxdWVuY2UgKi8KLQl3bDEyNzFfd3JpdGUzMih3bCwgV0VMUF9BUk1fQ09NTUFORCwgV0VMUF9BUk1fQ09NTUFORF9WQUwpOwotCXVkZWxheSg1MDApOwotCi0Jd2wxMjcxX3NldF9wYXJ0aXRpb24od2wsICZwYXJ0X3RhYmxlW1BBUlRfRFJQV10pOwotCi0JLyogUmVhZC1tb2RpZnktd3JpdGUgRFJQV19TQ1JBVENIX1NUQVJUIHJlZ2lzdGVyIChzZWUgbmV4dCBzdGF0ZSkKLQkgICB0byBiZSB1c2VkIGJ5IERSUHcgRlcuIFRoZSBSVFJJTSB2YWx1ZSB3aWxsIGJlIGFkZGVkIGJ5IHRoZSBGVwotCSAgIGJlZm9yZSB0YWtpbmcgRFJQdyBvdXQgb2YgcmVzZXQgKi8KLQotCXdsMTI3MV9kZWJ1ZyhERUJVR19CT09ULCAiRFJQV19TQ1JBVENIX1NUQVJUICUwOHgiLCBEUlBXX1NDUkFUQ0hfU1RBUlQpOwotCWNsayA9IHdsMTI3MV9yZWFkMzIod2wsIERSUFdfU0NSQVRDSF9TVEFSVCk7Ci0KLQl3bDEyNzFfZGVidWcoREVCVUdfQk9PVCwgImNsazIgMHgleCIsIGNsayk7Ci0KLQkvKiAyICovCi0JY2xrIHw9IChyZWZfY2xvY2sgPDwgMSkgPDwgNDsKLQl3bDEyNzFfd3JpdGUzMih3bCwgRFJQV19TQ1JBVENIX1NUQVJULCBjbGspOwotCi0Jd2wxMjcxX3NldF9wYXJ0aXRpb24od2wsICZwYXJ0X3RhYmxlW1BBUlRfV09SS10pOwotCi0JLyogRGlzYWJsZSBpbnRlcnJ1cHRzICovCi0Jd2wxMjcxX3dyaXRlMzIod2wsIEFDWF9SRUdfSU5URVJSVVBUX01BU0ssIFdMMTI3MV9BQ1hfSU5UUl9BTEwpOwotCi0JcmV0ID0gd2wxMjcxX2Jvb3Rfc29mdF9yZXNldCh3bCk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gb3V0OwotCi0JLyogMi4gc3RhcnQgcHJvY2Vzc2luZyBOVlMgZmlsZSAqLwotCXJldCA9IHdsMTI3MV9ib290X3VwbG9hZF9udnMod2wpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dDsKLQotCS8qIHdyaXRlIGZpcm13YXJlJ3MgbGFzdCBhZGRyZXNzIChpZS4gaXQncyBsZW5ndGgpIHRvCi0JICogQUNYX0VFUFJPTUxFU1NfSU5EX1JFRyAqLwotCXdsMTI3MV9kZWJ1ZyhERUJVR19CT09ULCAiQUNYX0VFUFJPTUxFU1NfSU5EX1JFRyIpOwotCi0Jd2wxMjcxX3dyaXRlMzIod2wsIEFDWF9FRVBST01MRVNTX0lORF9SRUcsIEFDWF9FRVBST01MRVNTX0lORF9SRUcpOwotCi0JdG1wID0gd2wxMjcxX3JlYWQzMih3bCwgQ0hJUF9JRF9CKTsKLQotCXdsMTI3MV9kZWJ1ZyhERUJVR19CT09ULCAiY2hpcCBpZCAweCV4IiwgdG1wKTsKLQotCS8qIDYuIHJlYWQgdGhlIEVFUFJPTSBwYXJhbWV0ZXJzICovCi0JdG1wID0gd2wxMjcxX3JlYWQzMih3bCwgU0NSX1BBRDIpOwotCi0JcmV0ID0gd2wxMjcxX2Jvb3Rfd3JpdGVfaXJxX3BvbGFyaXR5KHdsKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBvdXQ7Ci0KLQl3bDEyNzFfd3JpdGUzMih3bCwgQUNYX1JFR19JTlRFUlJVUFRfTUFTSywKLQkJICAgICAgIFdMMTI3MV9BQ1hfQUxMX0VWRU5UU19WRUNUT1IpOwotCi0JLyogV0wxMjcxOiBUaGUgcmVmZXJlbmNlIGRyaXZlciBza2lwcyBzdGVwcyA3IHRvIDEwIChqdW1wcyBkaXJlY3RseQotCSAqIHRvIHVwbG9hZF9mdykgKi8KLQotCXJldCA9IHdsMTI3MV9ib290X3VwbG9hZF9maXJtd2FyZSh3bCk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gb3V0OwotCi0JLyogMTAuNSBzdGFydCBmaXJtd2FyZSAqLwotCXJldCA9IHdsMTI3MV9ib290X3J1bl9maXJtd2FyZSh3bCk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gb3V0OwotCi0JLyogRW5hYmxlIGZpcm13YXJlIGludGVycnVwdHMgbm93ICovCi0Jd2wxMjcxX2Jvb3RfZW5hYmxlX2ludGVycnVwdHMod2wpOwotCi0JLyogc2V0IHRoZSB3bDEyNzEgZGVmYXVsdCBmaWx0ZXJzICovCi0Jd2wtPnJ4X2NvbmZpZyA9IFdMMTI3MV9ERUZBVUxUX1JYX0NPTkZJRzsKLQl3bC0+cnhfZmlsdGVyID0gV0wxMjcxX0RFRkFVTFRfUlhfRklMVEVSOwotCi0Jd2wxMjcxX2V2ZW50X21ib3hfY29uZmlnKHdsKTsKLQotb3V0OgotCXJldHVybiByZXQ7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2Jvb3QuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfYm9vdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzNiMGIxLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfYm9vdC5oCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdsMTI3MQotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IE5va2lhIENvcnBvcmF0aW9uCi0gKgotICogQ29udGFjdDogTHVjaWFubyBDb2VsaG8gPGx1Y2lhbm8uY29lbGhvQG5va2lhLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKLSAqIDAyMTEwLTEzMDEgVVNBCi0gKgotICovCi0KLSNpZm5kZWYgX19CT09UX0hfXwotI2RlZmluZSBfX0JPT1RfSF9fCi0KLSNpbmNsdWRlICJ3bDEyNzEuaCIKLQotaW50IHdsMTI3MV9ib290KHN0cnVjdCB3bDEyNzEgKndsKTsKLQotI2RlZmluZSBXTDEyNzFfTk9fU1VCQkFORFMgOAotI2RlZmluZSBXTDEyNzFfTk9fUE9XRVJfTEVWRUxTIDQKLSNkZWZpbmUgV0wxMjcxX0ZXX1ZFUlNJT05fTUFYX0xFTiAyMAotCi1zdHJ1Y3Qgd2wxMjcxX3N0YXRpY19kYXRhIHsKLQl1OCBtYWNfYWRkcmVzc1tFVEhfQUxFTl07Ci0JdTggcGFkZGluZ1syXTsKLQl1OCBmd192ZXJzaW9uW1dMMTI3MV9GV19WRVJTSU9OX01BWF9MRU5dOwotCXUzMiBod192ZXJzaW9uOwotCXU4IHR4X3Bvd2VyX3RhYmxlW1dMMTI3MV9OT19TVUJCQU5EU11bV0wxMjcxX05PX1BPV0VSX0xFVkVMU107Ci19OwotCi0vKiBudW1iZXIgb2YgdGltZXMgd2UgdHJ5IHRvIHJlYWQgdGhlIElOSVQgaW50ZXJydXB0ICovCi0jZGVmaW5lIElOSVRfTE9PUCAyMDAwMAotCi0vKiBkZWxheSBiZXR3ZWVuIHJldHJpZXMgKi8KLSNkZWZpbmUgSU5JVF9MT09QX0RFTEFZIDUwCi0KLSNkZWZpbmUgV1VfQ09VTlRFUl9QQVVTRV9WQUwgMHgzRkYKLSNkZWZpbmUgV0VMUF9BUk1fQ09NTUFORF9WQUwgMHg0Ci0KLSNkZWZpbmUgT0NQX1JFR19QT0xBUklUWSAgICAgMHgwMDY0Ci0jZGVmaW5lIE9DUF9SRUdfQ0xLX1RZUEUgICAgIDB4MDQ0OAotI2RlZmluZSBPQ1BfUkVHX0NMS19QT0xBUklUWSAweDBjYjIKLSNkZWZpbmUgT0NQX1JFR19DTEtfUFVMTCAgICAgMHgwY2I0Ci0KLSNkZWZpbmUgUkVHX0ZVU0VfREFUQV8yXzEgICAgMHgwNTBhCi0jZGVmaW5lIFBHX1ZFUl9NQVNLICAgICAgICAgIDB4M2MKLSNkZWZpbmUgUEdfVkVSX09GRlNFVCAgICAgICAgMgotCi0jZGVmaW5lIENNRF9NQk9YX0FERFJFU1MgICAgIDB4NDA3QjQKLQotI2RlZmluZSBQT0xBUklUWV9MT1cgICAgICAgICBCSVQoMSkKLSNkZWZpbmUgTk9fUFVMTCAgICAgICAgICAgICAgKEJJVCgxNCkgfCBCSVQoMTUpKQotCi0jZGVmaW5lIEZSRUZfQ0xLX1RZUEVfQklUUyAgICAgMHhmZmZmZmU3ZgotI2RlZmluZSBDTEtfUkVRX1BSQ00gICAgICAgICAgIDB4MTAwCi0jZGVmaW5lIEZSRUZfQ0xLX1BPTEFSSVRZX0JJVFMgMHhmZmZmZjhmZgotI2RlZmluZSBDTEtfUkVRX09VVE5fU0VMICAgICAgIDB4NzAwCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9jbWQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfY21kLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkM2U4NDguLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9jbWQuYworKysgL2Rldi9udWxsCkBAIC0xLDc4MyArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMjcxCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgTm9raWEgQ29ycG9yYXRpb24KLSAqCi0gKiBDb250YWN0OiBMdWNpYW5vIENvZWxobyA8bHVjaWFuby5jb2VsaG9Abm9raWEuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQotICogMDIxMTAtMTMwMSBVU0EKLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2NyYzcuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+Ci0jaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9pZWVlODAyMTEuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0KLSNpbmNsdWRlICJ3bDEyNzEuaCIKLSNpbmNsdWRlICJ3bDEyNzFfcmVnLmgiCi0jaW5jbHVkZSAid2wxMjcxX2lvLmgiCi0jaW5jbHVkZSAid2wxMjcxX2FjeC5oIgotI2luY2x1ZGUgIndsMTJ4eF84MDIxMS5oIgotI2luY2x1ZGUgIndsMTI3MV9jbWQuaCIKLSNpbmNsdWRlICJ3bDEyNzFfZXZlbnQuaCIKLQotI2RlZmluZSBXTDEyNzFfQ01EX0ZBU1RfUE9MTF9DT1VOVCAgICAgICA1MAotCi0vKgotICogc2VuZCBjb21tYW5kIHRvIGZpcm13YXJlCi0gKgotICogQHdsOiB3bCBzdHJ1Y3QKLSAqIEBpZDogY29tbWFuZCBpZAotICogQGJ1ZjogYnVmZmVyIGNvbnRhaW5pbmcgdGhlIGNvbW1hbmQsIG11c3Qgd29yayB3aXRoIGRtYQotICogQGxlbjogbGVuZ3RoIG9mIHRoZSBidWZmZXIKLSAqLwotaW50IHdsMTI3MV9jbWRfc2VuZChzdHJ1Y3Qgd2wxMjcxICp3bCwgdTE2IGlkLCB2b2lkICpidWYsIHNpemVfdCBsZW4sCi0JCSAgICBzaXplX3QgcmVzX2xlbikKLXsKLQlzdHJ1Y3Qgd2wxMjcxX2NtZF9oZWFkZXIgKmNtZDsKLQl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7Ci0JdTMyIGludHI7Ci0JaW50IHJldCA9IDA7Ci0JdTE2IHN0YXR1czsKLQl1MTYgcG9sbF9jb3VudCA9IDA7Ci0KLQljbWQgPSBidWY7Ci0JY21kLT5pZCA9IGNwdV90b19sZTE2KGlkKTsKLQljbWQtPnN0YXR1cyA9IDA7Ci0KLQlXQVJOX09OKGxlbiAlIDQgIT0gMCk7Ci0KLQl3bDEyNzFfd3JpdGUod2wsIHdsLT5jbWRfYm94X2FkZHIsIGJ1ZiwgbGVuLCBmYWxzZSk7Ci0KLQl3bDEyNzFfd3JpdGUzMih3bCwgQUNYX1JFR19JTlRFUlJVUFRfVFJJRywgSU5UUl9UUklHX0NNRCk7Ci0KLQl0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoV0wxMjcxX0NPTU1BTkRfVElNRU9VVCk7Ci0KLQlpbnRyID0gd2wxMjcxX3JlYWQzMih3bCwgQUNYX1JFR19JTlRFUlJVUFRfTk9fQ0xFQVIpOwotCXdoaWxlICghKGludHIgJiBXTDEyNzFfQUNYX0lOVFJfQ01EX0NPTVBMRVRFKSkgewotCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgewotCQkJd2wxMjcxX2Vycm9yKCJjb21tYW5kIGNvbXBsZXRlIHRpbWVvdXQiKTsKLQkJCXJldCA9IC1FVElNRURPVVQ7Ci0JCQlnb3RvIG91dDsKLQkJfQotCi0JCXBvbGxfY291bnQrKzsKLQkJaWYgKHBvbGxfY291bnQgPCBXTDEyNzFfQ01EX0ZBU1RfUE9MTF9DT1VOVCkKLQkJCXVkZWxheSgxMCk7Ci0JCWVsc2UKLQkJCW1zbGVlcCgxKTsKLQotCQlpbnRyID0gd2wxMjcxX3JlYWQzMih3bCwgQUNYX1JFR19JTlRFUlJVUFRfTk9fQ0xFQVIpOwotCX0KLQotCS8qIHJlYWQgYmFjayB0aGUgc3RhdHVzIGNvZGUgb2YgdGhlIGNvbW1hbmQgKi8KLQlpZiAocmVzX2xlbiA9PSAwKQotCQlyZXNfbGVuID0gc2l6ZW9mKHN0cnVjdCB3bDEyNzFfY21kX2hlYWRlcik7Ci0Jd2wxMjcxX3JlYWQod2wsIHdsLT5jbWRfYm94X2FkZHIsIGNtZCwgcmVzX2xlbiwgZmFsc2UpOwotCi0Jc3RhdHVzID0gbGUxNl90b19jcHUoY21kLT5zdGF0dXMpOwotCWlmIChzdGF0dXMgIT0gQ01EX1NUQVRVU19TVUNDRVNTKSB7Ci0JCXdsMTI3MV9lcnJvcigiY29tbWFuZCBleGVjdXRlIGZhaWx1cmUgJWQiLCBzdGF0dXMpOwotCQlpZWVlODAyMTFfcXVldWVfd29yayh3bC0+aHcsICZ3bC0+cmVjb3Zlcnlfd29yayk7Ci0JCXJldCA9IC1FSU87Ci0JfQotCi0Jd2wxMjcxX3dyaXRlMzIod2wsIEFDWF9SRUdfSU5URVJSVVBUX0FDSywKLQkJICAgICAgIFdMMTI3MV9BQ1hfSU5UUl9DTURfQ09NUExFVEUpOwotCi1vdXQ6Ci0JcmV0dXJuIHJldDsKLX0KLQotaW50IHdsMTI3MV9jbWRfZ2VuZXJhbF9wYXJtcyhzdHJ1Y3Qgd2wxMjcxICp3bCkKLXsKLQlzdHJ1Y3Qgd2wxMjcxX2dlbmVyYWxfcGFybXNfY21kICpnZW5fcGFybXM7Ci0Jc3RydWN0IHdsMTI3MV9pbmlfZ2VuZXJhbF9wYXJhbXMgKmdwID0gJndsLT5udnMtPmdlbmVyYWxfcGFyYW1zOwotCWJvb2wgYW5zd2VyID0gZmFsc2U7Ci0JaW50IHJldDsKLQotCWlmICghd2wtPm52cykKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlnZW5fcGFybXMgPSBremFsbG9jKHNpemVvZigqZ2VuX3Bhcm1zKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFnZW5fcGFybXMpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JZ2VuX3Bhcm1zLT50ZXN0LmlkID0gVEVTVF9DTURfSU5JX0ZJTEVfR0VORVJBTF9QQVJBTTsKLQotCW1lbWNweSgmZ2VuX3Bhcm1zLT5nZW5lcmFsX3BhcmFtcywgZ3AsIHNpemVvZigqZ3ApKTsKLQotCWlmIChncC0+dHhfYmlwX2ZlbV9hdXRvX2RldGVjdCkKLQkJYW5zd2VyID0gdHJ1ZTsKLQotCXJldCA9IHdsMTI3MV9jbWRfdGVzdCh3bCwgZ2VuX3Bhcm1zLCBzaXplb2YoKmdlbl9wYXJtcyksIGFuc3dlcik7Ci0JaWYgKHJldCA8IDApIHsKLQkJd2wxMjcxX3dhcm5pbmcoIkNNRF9JTklfRklMRV9HRU5FUkFMX1BBUkFNIGZhaWxlZCIpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlncC0+dHhfYmlwX2ZlbV9tYW51ZmFjdHVyZXIgPQotCQlnZW5fcGFybXMtPmdlbmVyYWxfcGFyYW1zLnR4X2JpcF9mZW1fbWFudWZhY3R1cmVyOwotCi0Jd2wxMjcxX2RlYnVnKERFQlVHX0NNRCwgIkZFTSBhdXRvZGV0ZWN0OiAlcywgbWFudWZhY3R1cmVyOiAlZFxuIiwKLQkJICAgICBhbnN3ZXIgPyAiYXV0byIgOiAibWFudWFsIiwgZ3AtPnR4X2JpcF9mZW1fbWFudWZhY3R1cmVyKTsKLQotb3V0OgotCWtmcmVlKGdlbl9wYXJtcyk7Ci0JcmV0dXJuIHJldDsKLX0KLQotaW50IHdsMTI3MV9jbWRfcmFkaW9fcGFybXMoc3RydWN0IHdsMTI3MSAqd2wpCi17Ci0Jc3RydWN0IHdsMTI3MV9yYWRpb19wYXJtc19jbWQgKnJhZGlvX3Bhcm1zOwotCXN0cnVjdCB3bDEyNzFfaW5pX2dlbmVyYWxfcGFyYW1zICpncCA9ICZ3bC0+bnZzLT5nZW5lcmFsX3BhcmFtczsKLQlpbnQgcmV0OwotCi0JaWYgKCF3bC0+bnZzKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCXJhZGlvX3Bhcm1zID0ga3phbGxvYyhzaXplb2YoKnJhZGlvX3Bhcm1zKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFyYWRpb19wYXJtcykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlyYWRpb19wYXJtcy0+dGVzdC5pZCA9IFRFU1RfQ01EX0lOSV9GSUxFX1JBRElPX1BBUkFNOwotCi0JLyogMi40R0h6IHBhcmFtZXRlcnMgKi8KLQltZW1jcHkoJnJhZGlvX3Bhcm1zLT5zdGF0aWNfcGFyYW1zXzIsICZ3bC0+bnZzLT5zdGF0X3JhZGlvX3BhcmFtc18yLAotCSAgICAgICBzaXplb2Yoc3RydWN0IHdsMTI3MV9pbmlfYmFuZF9wYXJhbXNfMikpOwotCW1lbWNweSgmcmFkaW9fcGFybXMtPmR5bl9wYXJhbXNfMiwKLQkgICAgICAgJndsLT5udnMtPmR5bl9yYWRpb19wYXJhbXNfMltncC0+dHhfYmlwX2ZlbV9tYW51ZmFjdHVyZXJdLnBhcmFtcywKLQkgICAgICAgc2l6ZW9mKHN0cnVjdCB3bDEyNzFfaW5pX2ZlbV9wYXJhbXNfMikpOwotCi0JLyogNUdIeiBwYXJhbWV0ZXJzICovCi0JbWVtY3B5KCZyYWRpb19wYXJtcy0+c3RhdGljX3BhcmFtc181LAotCSAgICAgICAmd2wtPm52cy0+c3RhdF9yYWRpb19wYXJhbXNfNSwKLQkgICAgICAgc2l6ZW9mKHN0cnVjdCB3bDEyNzFfaW5pX2JhbmRfcGFyYW1zXzUpKTsKLQltZW1jcHkoJnJhZGlvX3Bhcm1zLT5keW5fcGFyYW1zXzUsCi0JICAgICAgICZ3bC0+bnZzLT5keW5fcmFkaW9fcGFyYW1zXzVbZ3AtPnR4X2JpcF9mZW1fbWFudWZhY3R1cmVyXS5wYXJhbXMsCi0JICAgICAgIHNpemVvZihzdHJ1Y3Qgd2wxMjcxX2luaV9mZW1fcGFyYW1zXzUpKTsKLQotCXdsMTI3MV9kdW1wKERFQlVHX0NNRCwgIlRFU1RfQ01EX0lOSV9GSUxFX1JBRElPX1BBUkFNOiAiLAotCQkgICAgcmFkaW9fcGFybXMsIHNpemVvZigqcmFkaW9fcGFybXMpKTsKLQotCXJldCA9IHdsMTI3MV9jbWRfdGVzdCh3bCwgcmFkaW9fcGFybXMsIHNpemVvZigqcmFkaW9fcGFybXMpLCAwKTsKLQlpZiAocmV0IDwgMCkKLQkJd2wxMjcxX3dhcm5pbmcoIkNNRF9JTklfRklMRV9SQURJT19QQVJBTSBmYWlsZWQiKTsKLQotCWtmcmVlKHJhZGlvX3Bhcm1zKTsKLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgd2wxMjcxX2NtZF9leHRfcmFkaW9fcGFybXMoc3RydWN0IHdsMTI3MSAqd2wpCi17Ci0Jc3RydWN0IHdsMTI3MV9leHRfcmFkaW9fcGFybXNfY21kICpleHRfcmFkaW9fcGFybXM7Ci0Jc3RydWN0IGNvbmZfcmZfc2V0dGluZ3MgKnJmID0gJndsLT5jb25mLnJmOwotCWludCByZXQ7Ci0KLQlpZiAoIXdsLT5udnMpCi0JCXJldHVybiAtRU5PREVWOwotCi0JZXh0X3JhZGlvX3Bhcm1zID0ga3phbGxvYyhzaXplb2YoKmV4dF9yYWRpb19wYXJtcyksIEdGUF9LRVJORUwpOwotCWlmICghZXh0X3JhZGlvX3Bhcm1zKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWV4dF9yYWRpb19wYXJtcy0+dGVzdC5pZCA9IFRFU1RfQ01EX0lOSV9GSUxFX1JGX0VYVEVOREVEX1BBUkFNOwotCi0JbWVtY3B5KGV4dF9yYWRpb19wYXJtcy0+dHhfcGVyX2NoYW5uZWxfcG93ZXJfY29tcGVuc2F0aW9uXzIsCi0JICAgICAgIHJmLT50eF9wZXJfY2hhbm5lbF9wb3dlcl9jb21wZW5zYXRpb25fMiwKLQkgICAgICAgQ09ORl9UWF9QV1JfQ09NUEVOU0FUSU9OX0xFTl8yKTsKLQltZW1jcHkoZXh0X3JhZGlvX3Bhcm1zLT50eF9wZXJfY2hhbm5lbF9wb3dlcl9jb21wZW5zYXRpb25fNSwKLQkgICAgICAgcmYtPnR4X3Blcl9jaGFubmVsX3Bvd2VyX2NvbXBlbnNhdGlvbl81LAotCSAgICAgICBDT05GX1RYX1BXUl9DT01QRU5TQVRJT05fTEVOXzUpOwotCi0Jd2wxMjcxX2R1bXAoREVCVUdfQ01ELCAiVEVTVF9DTURfSU5JX0ZJTEVfRVhUX1JBRElPX1BBUkFNOiAiLAotCQkgICAgZXh0X3JhZGlvX3Bhcm1zLCBzaXplb2YoKmV4dF9yYWRpb19wYXJtcykpOwotCi0JcmV0ID0gd2wxMjcxX2NtZF90ZXN0KHdsLCBleHRfcmFkaW9fcGFybXMsIHNpemVvZigqZXh0X3JhZGlvX3Bhcm1zKSwgMCk7Ci0JaWYgKHJldCA8IDApCi0JCXdsMTI3MV93YXJuaW5nKCJURVNUX0NNRF9JTklfRklMRV9SRl9FWFRFTkRFRF9QQVJBTSBmYWlsZWQiKTsKLQotCWtmcmVlKGV4dF9yYWRpb19wYXJtcyk7Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoKLSAqIFBvbGwgdGhlIG1haWxib3ggZXZlbnQgZmllbGQgdW50aWwgYW55IG9mIHRoZSBiaXRzIGluIHRoZSBtYXNrIGlzIHNldCBvciBhCi0gKiB0aW1lb3V0IG9jY3VycyAoV0wxMjcxX0VWRU5UX1RJTUVPVVQgaW4gbXNlY3MpCi0gKi8KLXN0YXRpYyBpbnQgd2wxMjcxX2NtZF93YWl0X2Zvcl9ldmVudChzdHJ1Y3Qgd2wxMjcxICp3bCwgdTMyIG1hc2spCi17Ci0JdTMyIGV2ZW50c192ZWN0b3IsIGV2ZW50OwotCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKLQotCXRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhXTDEyNzFfRVZFTlRfVElNRU9VVCk7Ci0KLQlkbyB7Ci0JCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7Ci0JCQlpZWVlODAyMTFfcXVldWVfd29yayh3bC0+aHcsICZ3bC0+cmVjb3Zlcnlfd29yayk7Ci0JCQlyZXR1cm4gLUVUSU1FRE9VVDsKLQkJfQotCi0JCW1zbGVlcCgxKTsKLQotCQkvKiByZWFkIGZyb20gYm90aCBldmVudCBmaWVsZHMgKi8KLQkJd2wxMjcxX3JlYWQod2wsIHdsLT5tYm94X3B0clswXSwgJmV2ZW50c192ZWN0b3IsCi0JCQkgICAgc2l6ZW9mKGV2ZW50c192ZWN0b3IpLCBmYWxzZSk7Ci0JCWV2ZW50ID0gZXZlbnRzX3ZlY3RvciAmIG1hc2s7Ci0JCXdsMTI3MV9yZWFkKHdsLCB3bC0+bWJveF9wdHJbMV0sICZldmVudHNfdmVjdG9yLAotCQkJICAgIHNpemVvZihldmVudHNfdmVjdG9yKSwgZmFsc2UpOwotCQlldmVudCB8PSBldmVudHNfdmVjdG9yICYgbWFzazsKLQl9IHdoaWxlICghZXZlbnQpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCB3bDEyNzFfY21kX2pvaW4oc3RydWN0IHdsMTI3MSAqd2wsIHU4IGJzc190eXBlKQotewotCXN0cnVjdCB3bDEyNzFfY21kX2pvaW4gKmpvaW47Ci0JaW50IHJldCwgaTsKLQl1OCAqYnNzaWQ7Ci0KLQlqb2luID0ga3phbGxvYyhzaXplb2YoKmpvaW4pLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWpvaW4pIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXQ7Ci0JfQotCi0Jd2wxMjcxX2RlYnVnKERFQlVHX0NNRCwgImNtZCBqb2luIik7Ci0KLQkvKiBSZXZlcnNlIG9yZGVyIEJTU0lEICovCi0JYnNzaWQgPSAodTggKikgJmpvaW4tPmJzc2lkX2xzYjsKLQlmb3IgKGkgPSAwOyBpIDwgRVRIX0FMRU47IGkrKykKLQkJYnNzaWRbaV0gPSB3bC0+YnNzaWRbRVRIX0FMRU4gLSBpIC0gMV07Ci0KLQlqb2luLT5yeF9jb25maWdfb3B0aW9ucyA9IGNwdV90b19sZTMyKHdsLT5yeF9jb25maWcpOwotCWpvaW4tPnJ4X2ZpbHRlcl9vcHRpb25zID0gY3B1X3RvX2xlMzIod2wtPnJ4X2ZpbHRlcik7Ci0Jam9pbi0+YnNzX3R5cGUgPSBic3NfdHlwZTsKLQlqb2luLT5iYXNpY19yYXRlX3NldCA9IGNwdV90b19sZTMyKHdsLT5iYXNpY19yYXRlX3NldCk7Ci0KLQlpZiAod2wtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikKLQkJam9pbi0+YnNzX3R5cGUgfD0gV0wxMjcxX0pPSU5fQ01EX0JTU19UWVBFXzVHSFo7Ci0KLQlqb2luLT5iZWFjb25faW50ZXJ2YWwgPSBjcHVfdG9fbGUxNih3bC0+YmVhY29uX2ludCk7Ci0Jam9pbi0+ZHRpbV9pbnRlcnZhbCA9IFdMMTI3MV9ERUZBVUxUX0RUSU1fUEVSSU9EOwotCi0Jam9pbi0+Y2hhbm5lbCA9IHdsLT5jaGFubmVsOwotCWpvaW4tPnNzaWRfbGVuID0gd2wtPnNzaWRfbGVuOwotCW1lbWNweShqb2luLT5zc2lkLCB3bC0+c3NpZCwgd2wtPnNzaWRfbGVuKTsKLQotCWpvaW4tPmN0cmwgfD0gd2wtPnNlc3Npb25fY291bnRlciA8PCBXTDEyNzFfSk9JTl9DTURfVFhfU0VTU0lPTl9PRkZTRVQ7Ci0KLQkvKiByZXNldCBUWCBzZWN1cml0eSBjb3VudGVycyAqLwotCXdsLT50eF9zZWN1cml0eV9sYXN0X3NlcSA9IDA7Ci0Jd2wtPnR4X3NlY3VyaXR5X3NlcSA9IDA7Ci0KLQlyZXQgPSB3bDEyNzFfY21kX3NlbmQod2wsIENNRF9TVEFSVF9KT0lOLCBqb2luLCBzaXplb2YoKmpvaW4pLCAwKTsKLQlpZiAocmV0IDwgMCkgewotCQl3bDEyNzFfZXJyb3IoImZhaWxlZCB0byBpbml0aWF0ZSBjbWQgam9pbiIpOwotCQlnb3RvIG91dF9mcmVlOwotCX0KLQotCXJldCA9IHdsMTI3MV9jbWRfd2FpdF9mb3JfZXZlbnQod2wsIEpPSU5fRVZFTlRfQ09NUExFVEVfSUQpOwotCWlmIChyZXQgPCAwKQotCQl3bDEyNzFfZXJyb3IoImNtZCBqb2luIGV2ZW50IGNvbXBsZXRpb24gZXJyb3IiKTsKLQotb3V0X2ZyZWU6Ci0Ja2ZyZWUoam9pbik7Ci0KLW91dDoKLQlyZXR1cm4gcmV0OwotfQotCi0vKioKLSAqIHNlbmQgdGVzdCBjb21tYW5kIHRvIGZpcm13YXJlCi0gKgotICogQHdsOiB3bCBzdHJ1Y3QKLSAqIEBidWY6IGJ1ZmZlciBjb250YWluaW5nIHRoZSBjb21tYW5kLCB3aXRoIGFsbCBoZWFkZXJzLCBtdXN0IHdvcmsgd2l0aCBkbWEKLSAqIEBsZW46IGxlbmd0aCBvZiB0aGUgYnVmZmVyCi0gKiBAYW5zd2VyOiBpcyBhbnN3ZXIgbmVlZGVkCi0gKi8KLWludCB3bDEyNzFfY21kX3Rlc3Qoc3RydWN0IHdsMTI3MSAqd2wsIHZvaWQgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4sIHU4IGFuc3dlcikKLXsKLQlpbnQgcmV0OwotCXNpemVfdCByZXNfbGVuID0gMDsKLQotCXdsMTI3MV9kZWJ1ZyhERUJVR19DTUQsICJjbWQgdGVzdCIpOwotCi0JaWYgKGFuc3dlcikKLQkJcmVzX2xlbiA9IGJ1Zl9sZW47Ci0KLQlyZXQgPSB3bDEyNzFfY21kX3NlbmQod2wsIENNRF9URVNULCBidWYsIGJ1Zl9sZW4sIHJlc19sZW4pOwotCi0JaWYgKHJldCA8IDApIHsKLQkJd2wxMjcxX3dhcm5pbmcoIlRFU1QgY29tbWFuZCBmYWlsZWQiKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0vKioKLSAqIHJlYWQgYWN4IGZyb20gZmlybXdhcmUKLSAqCi0gKiBAd2w6IHdsIHN0cnVjdAotICogQGlkOiBhY3ggaWQKLSAqIEBidWY6IGJ1ZmZlciBmb3IgdGhlIHJlc3BvbnNlLCBpbmNsdWRpbmcgYWxsIGhlYWRlcnMsIG11c3Qgd29yayB3aXRoIGRtYQotICogQGxlbjogbGVuZ2h0IG9mIGJ1ZgotICovCi1pbnQgd2wxMjcxX2NtZF9pbnRlcnJvZ2F0ZShzdHJ1Y3Qgd2wxMjcxICp3bCwgdTE2IGlkLCB2b2lkICpidWYsIHNpemVfdCBsZW4pCi17Ci0Jc3RydWN0IGFjeF9oZWFkZXIgKmFjeCA9IGJ1ZjsKLQlpbnQgcmV0OwotCi0Jd2wxMjcxX2RlYnVnKERFQlVHX0NNRCwgImNtZCBpbnRlcnJvZ2F0ZSIpOwotCi0JYWN4LT5pZCA9IGNwdV90b19sZTE2KGlkKTsKLQotCS8qIHBheWxvYWQgbGVuZ3RoLCBkb2VzIG5vdCBpbmNsdWRlIGFueSBoZWFkZXJzICovCi0JYWN4LT5sZW4gPSBjcHVfdG9fbGUxNihsZW4gLSBzaXplb2YoKmFjeCkpOwotCi0JcmV0ID0gd2wxMjcxX2NtZF9zZW5kKHdsLCBDTURfSU5URVJST0dBVEUsIGFjeCwgc2l6ZW9mKCphY3gpLCBsZW4pOwotCWlmIChyZXQgPCAwKQotCQl3bDEyNzFfZXJyb3IoIklOVEVSUk9HQVRFIGNvbW1hbmQgZmFpbGVkIik7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0vKioKLSAqIHdyaXRlIGFjeCB2YWx1ZSB0byBmaXJtd2FyZQotICoKLSAqIEB3bDogd2wgc3RydWN0Ci0gKiBAaWQ6IGFjeCBpZAotICogQGJ1ZjogYnVmZmVyIGNvbnRhaW5pbmcgYWN4LCBpbmNsdWRpbmcgYWxsIGhlYWRlcnMsIG11c3Qgd29yayB3aXRoIGRtYQotICogQGxlbjogbGVuZ3RoIG9mIGJ1ZgotICovCi1pbnQgd2wxMjcxX2NtZF9jb25maWd1cmUoc3RydWN0IHdsMTI3MSAqd2wsIHUxNiBpZCwgdm9pZCAqYnVmLCBzaXplX3QgbGVuKQotewotCXN0cnVjdCBhY3hfaGVhZGVyICphY3ggPSBidWY7Ci0JaW50IHJldDsKLQotCXdsMTI3MV9kZWJ1ZyhERUJVR19DTUQsICJjbWQgY29uZmlndXJlIik7Ci0KLQlhY3gtPmlkID0gY3B1X3RvX2xlMTYoaWQpOwotCi0JLyogcGF5bG9hZCBsZW5ndGgsIGRvZXMgbm90IGluY2x1ZGUgYW55IGhlYWRlcnMgKi8KLQlhY3gtPmxlbiA9IGNwdV90b19sZTE2KGxlbiAtIHNpemVvZigqYWN4KSk7Ci0KLQlyZXQgPSB3bDEyNzFfY21kX3NlbmQod2wsIENNRF9DT05GSUdVUkUsIGFjeCwgbGVuLCAwKTsKLQlpZiAocmV0IDwgMCkgewotCQl3bDEyNzFfd2FybmluZygiQ09ORklHVVJFIGNvbW1hbmQgTk9LIik7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCB3bDEyNzFfY21kX2RhdGFfcGF0aChzdHJ1Y3Qgd2wxMjcxICp3bCwgYm9vbCBlbmFibGUpCi17Ci0Jc3RydWN0IGNtZF9lbmFibGVkaXNhYmxlX3BhdGggKmNtZDsKLQlpbnQgcmV0OwotCXUxNiBjbWRfcngsIGNtZF90eDsKLQotCXdsMTI3MV9kZWJ1ZyhERUJVR19DTUQsICJjbWQgZGF0YSBwYXRoIik7Ci0KLQljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjbWQpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JLyogdGhlIGNoYW5uZWwgaGVyZSBpcyBvbmx5IHVzZWQgZm9yIGNhbGlicmF0aW9uLCBzbyBoYXJkY29kZWQgdG8gMSAqLwotCWNtZC0+Y2hhbm5lbCA9IDE7Ci0KLQlpZiAoZW5hYmxlKSB7Ci0JCWNtZF9yeCA9IENNRF9FTkFCTEVfUlg7Ci0JCWNtZF90eCA9IENNRF9FTkFCTEVfVFg7Ci0JfSBlbHNlIHsKLQkJY21kX3J4ID0gQ01EX0RJU0FCTEVfUlg7Ci0JCWNtZF90eCA9IENNRF9ESVNBQkxFX1RYOwotCX0KLQotCXJldCA9IHdsMTI3MV9jbWRfc2VuZCh3bCwgY21kX3J4LCBjbWQsIHNpemVvZigqY21kKSwgMCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJd2wxMjcxX2Vycm9yKCJyeCAlcyBjbWQgZm9yIGNoYW5uZWwgJWQgZmFpbGVkIiwKLQkJCSAgICAgZW5hYmxlID8gInN0YXJ0IiA6ICJzdG9wIiwgY21kLT5jaGFubmVsKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0Jd2wxMjcxX2RlYnVnKERFQlVHX0JPT1QsICJyeCAlcyBjbWQgY2hhbm5lbCAlZCIsCi0JCSAgICAgZW5hYmxlID8gInN0YXJ0IiA6ICJzdG9wIiwgY21kLT5jaGFubmVsKTsKLQotCXJldCA9IHdsMTI3MV9jbWRfc2VuZCh3bCwgY21kX3R4LCBjbWQsIHNpemVvZigqY21kKSwgMCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJd2wxMjcxX2Vycm9yKCJ0eCAlcyBjbWQgZm9yIGNoYW5uZWwgJWQgZmFpbGVkIiwKLQkJCSAgICAgZW5hYmxlID8gInN0YXJ0IiA6ICJzdG9wIiwgY21kLT5jaGFubmVsKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0Jd2wxMjcxX2RlYnVnKERFQlVHX0JPT1QsICJ0eCAlcyBjbWQgY2hhbm5lbCAlZCIsCi0JCSAgICAgZW5hYmxlID8gInN0YXJ0IiA6ICJzdG9wIiwgY21kLT5jaGFubmVsKTsKLQotb3V0OgotCWtmcmVlKGNtZCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotaW50IHdsMTI3MV9jbWRfcHNfbW9kZShzdHJ1Y3Qgd2wxMjcxICp3bCwgdTggcHNfbW9kZSwgdTMyIHJhdGVzLCBib29sIHNlbmQpCi17Ci0Jc3RydWN0IHdsMTI3MV9jbWRfcHNfcGFyYW1zICpwc19wYXJhbXMgPSBOVUxMOwotCWludCByZXQgPSAwOwotCi0Jd2wxMjcxX2RlYnVnKERFQlVHX0NNRCwgImNtZCBzZXQgcHMgbW9kZSIpOwotCi0JcHNfcGFyYW1zID0ga3phbGxvYyhzaXplb2YoKnBzX3BhcmFtcyksIEdGUF9LRVJORUwpOwotCWlmICghcHNfcGFyYW1zKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0OwotCX0KLQotCXBzX3BhcmFtcy0+cHNfbW9kZSA9IHBzX21vZGU7Ci0JcHNfcGFyYW1zLT5zZW5kX251bGxfZGF0YSA9IHNlbmQ7Ci0JcHNfcGFyYW1zLT5yZXRyaWVzID0gd2wtPmNvbmYuY29ubi5wc21fZW50cnlfbnVsbGZ1bmNfcmV0cmllczsKLQlwc19wYXJhbXMtPmhhbmdfb3Zlcl9wZXJpb2QgPSB3bC0+Y29uZi5jb25uLnBzbV9lbnRyeV9oYW5nb3Zlcl9wZXJpb2Q7Ci0JcHNfcGFyYW1zLT5udWxsX2RhdGFfcmF0ZSA9IGNwdV90b19sZTMyKHJhdGVzKTsKLQotCXJldCA9IHdsMTI3MV9jbWRfc2VuZCh3bCwgQ01EX1NFVF9QU19NT0RFLCBwc19wYXJhbXMsCi0JCQkgICAgICBzaXplb2YoKnBzX3BhcmFtcyksIDApOwotCWlmIChyZXQgPCAwKSB7Ci0JCXdsMTI3MV9lcnJvcigiY21kIHNldF9wc19tb2RlIGZhaWxlZCIpOwotCQlnb3RvIG91dDsKLQl9Ci0KLW91dDoKLQlrZnJlZShwc19wYXJhbXMpOwotCXJldHVybiByZXQ7Ci19Ci0KLWludCB3bDEyNzFfY21kX3RlbXBsYXRlX3NldChzdHJ1Y3Qgd2wxMjcxICp3bCwgdTE2IHRlbXBsYXRlX2lkLAotCQkJICAgIHZvaWQgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4sIGludCBpbmRleCwgdTMyIHJhdGVzKQotewotCXN0cnVjdCB3bDEyNzFfY21kX3RlbXBsYXRlX3NldCAqY21kOwotCWludCByZXQgPSAwOwotCi0Jd2wxMjcxX2RlYnVnKERFQlVHX0NNRCwgImNtZCB0ZW1wbGF0ZV9zZXQgJWQiLCB0ZW1wbGF0ZV9pZCk7Ci0KLQlXQVJOX09OKGJ1Zl9sZW4gPiBXTDEyNzFfQ01EX1RFTVBMX01BWF9TSVpFKTsKLQlidWZfbGVuID0gbWluX3Qoc2l6ZV90LCBidWZfbGVuLCBXTDEyNzFfQ01EX1RFTVBMX01BWF9TSVpFKTsKLQotCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNtZCkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dDsKLQl9Ci0KLQljbWQtPmxlbiA9IGNwdV90b19sZTE2KGJ1Zl9sZW4pOwotCWNtZC0+dGVtcGxhdGVfdHlwZSA9IHRlbXBsYXRlX2lkOwotCWNtZC0+ZW5hYmxlZF9yYXRlcyA9IGNwdV90b19sZTMyKHJhdGVzKTsKLQljbWQtPnNob3J0X3JldHJ5X2xpbWl0ID0gd2wtPmNvbmYudHgucmNfY29uZi5zaG9ydF9yZXRyeV9saW1pdDsKLQljbWQtPmxvbmdfcmV0cnlfbGltaXQgPSB3bC0+Y29uZi50eC5yY19jb25mLmxvbmdfcmV0cnlfbGltaXQ7Ci0JY21kLT5pbmRleCA9IGluZGV4OwotCi0JaWYgKGJ1ZikKLQkJbWVtY3B5KGNtZC0+dGVtcGxhdGVfZGF0YSwgYnVmLCBidWZfbGVuKTsKLQotCXJldCA9IHdsMTI3MV9jbWRfc2VuZCh3bCwgQ01EX1NFVF9URU1QTEFURSwgY21kLCBzaXplb2YoKmNtZCksIDApOwotCWlmIChyZXQgPCAwKSB7Ci0JCXdsMTI3MV93YXJuaW5nKCJjbWQgc2V0X3RlbXBsYXRlIGZhaWxlZDogJWQiLCByZXQpOwotCQlnb3RvIG91dF9mcmVlOwotCX0KLQotb3V0X2ZyZWU6Ci0Ja2ZyZWUoY21kKTsKLQotb3V0OgotCXJldHVybiByZXQ7Ci19Ci0KLWludCB3bDEyNzFfY21kX2J1aWxkX251bGxfZGF0YShzdHJ1Y3Qgd2wxMjcxICp3bCkKLXsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKLQlpbnQgc2l6ZTsKLQl2b2lkICpwdHI7Ci0JaW50IHJldCA9IC1FTk9NRU07Ci0KLQotCWlmICh3bC0+YnNzX3R5cGUgPT0gQlNTX1RZUEVfSUJTUykgewotCQlzaXplID0gc2l6ZW9mKHN0cnVjdCB3bDEyeHhfbnVsbF9kYXRhX3RlbXBsYXRlKTsKLQkJcHRyID0gTlVMTDsKLQl9IGVsc2UgewotCQlza2IgPSBpZWVlODAyMTFfbnVsbGZ1bmNfZ2V0KHdsLT5odywgd2wtPnZpZik7Ci0JCWlmICghc2tiKQotCQkJZ290byBvdXQ7Ci0JCXNpemUgPSBza2ItPmxlbjsKLQkJcHRyID0gc2tiLT5kYXRhOwotCX0KLQotCXJldCA9IHdsMTI3MV9jbWRfdGVtcGxhdGVfc2V0KHdsLCBDTURfVEVNUExfTlVMTF9EQVRBLCBwdHIsIHNpemUsIDAsCi0JCQkJICAgICAgd2wtPmJhc2ljX3JhdGUpOwotCi1vdXQ6Ci0JZGV2X2tmcmVlX3NrYihza2IpOwotCWlmIChyZXQpCi0JCXdsMTI3MV93YXJuaW5nKCJjbWQgYnVsZCBudWxsIGRhdGEgZmFpbGVkICVkIiwgcmV0KTsKLQotCXJldHVybiByZXQ7Ci0KLX0KLQotaW50IHdsMTI3MV9jbWRfYnVpbGRfa2x2X251bGxfZGF0YShzdHJ1Y3Qgd2wxMjcxICp3bCkKLXsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKLQlpbnQgcmV0ID0gLUVOT01FTTsKLQotCXNrYiA9IGllZWU4MDIxMV9udWxsZnVuY19nZXQod2wtPmh3LCB3bC0+dmlmKTsKLQlpZiAoIXNrYikKLQkJZ290byBvdXQ7Ci0KLQlyZXQgPSB3bDEyNzFfY21kX3RlbXBsYXRlX3NldCh3bCwgQ01EX1RFTVBMX0tMViwKLQkJCQkgICAgICBza2ItPmRhdGEsIHNrYi0+bGVuLAotCQkJCSAgICAgIENNRF9URU1QTF9LTFZfSURYX05VTExfREFUQSwKLQkJCQkgICAgICB3bC0+YmFzaWNfcmF0ZSk7Ci0KLW91dDoKLQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JaWYgKHJldCkKLQkJd2wxMjcxX3dhcm5pbmcoImNtZCBidWlsZCBrbHYgbnVsbCBkYXRhIGZhaWxlZCAlZCIsIHJldCk7Ci0KLQlyZXR1cm4gcmV0OwotCi19Ci0KLWludCB3bDEyNzFfY21kX2J1aWxkX3BzX3BvbGwoc3RydWN0IHdsMTI3MSAqd2wsIHUxNiBhaWQpCi17Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlpbnQgcmV0ID0gMDsKLQotCXNrYiA9IGllZWU4MDIxMV9wc3BvbGxfZ2V0KHdsLT5odywgd2wtPnZpZik7Ci0JaWYgKCFza2IpCi0JCWdvdG8gb3V0OwotCi0JcmV0ID0gd2wxMjcxX2NtZF90ZW1wbGF0ZV9zZXQod2wsIENNRF9URU1QTF9QU19QT0xMLCBza2ItPmRhdGEsCi0JCQkJICAgICAgc2tiLT5sZW4sIDAsIHdsLT5iYXNpY19yYXRlX3NldCk7Ci0KLW91dDoKLQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JcmV0dXJuIHJldDsKLX0KLQotaW50IHdsMTI3MV9jbWRfYnVpbGRfcHJvYmVfcmVxKHN0cnVjdCB3bDEyNzEgKndsLAotCQkJICAgICAgIGNvbnN0IHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4sCi0JCQkgICAgICAgY29uc3QgdTggKmllLCBzaXplX3QgaWVfbGVuLCB1OCBiYW5kKQotewotCXN0cnVjdCBza19idWZmICpza2I7Ci0JaW50IHJldDsKLQotCXNrYiA9IGllZWU4MDIxMV9wcm9iZXJlcV9nZXQod2wtPmh3LCB3bC0+dmlmLCBzc2lkLCBzc2lkX2xlbiwKLQkJCQkgICAgIGllLCBpZV9sZW4pOwotCWlmICghc2tiKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0OwotCX0KLQotCXdsMTI3MV9kdW1wKERFQlVHX1NDQU4sICJQUk9CRSBSRVE6ICIsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOwotCi0JaWYgKGJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikKLQkJcmV0ID0gd2wxMjcxX2NtZF90ZW1wbGF0ZV9zZXQod2wsIENNRF9URU1QTF9DRkdfUFJPQkVfUkVRXzJfNCwKLQkJCQkJICAgICAgc2tiLT5kYXRhLCBza2ItPmxlbiwgMCwKLQkJCQkJICAgICAgd2wtPmNvbmYudHguYmFzaWNfcmF0ZSk7Ci0JZWxzZQotCQlyZXQgPSB3bDEyNzFfY21kX3RlbXBsYXRlX3NldCh3bCwgQ01EX1RFTVBMX0NGR19QUk9CRV9SRVFfNSwKLQkJCQkJICAgICAgc2tiLT5kYXRhLCBza2ItPmxlbiwgMCwKLQkJCQkJICAgICAgd2wtPmNvbmYudHguYmFzaWNfcmF0ZV81KTsKLQotb3V0OgotCWRldl9rZnJlZV9za2Ioc2tiKTsKLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgd2wxMjcxX2J1aWxkX3Fvc19udWxsX2RhdGEoc3RydWN0IHdsMTI3MSAqd2wpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9xb3NfaGRyIHRlbXBsYXRlOwotCi0JbWVtc2V0KCZ0ZW1wbGF0ZSwgMCwgc2l6ZW9mKHRlbXBsYXRlKSk7Ci0KLQltZW1jcHkodGVtcGxhdGUuYWRkcjEsIHdsLT5ic3NpZCwgRVRIX0FMRU4pOwotCW1lbWNweSh0ZW1wbGF0ZS5hZGRyMiwgd2wtPm1hY19hZGRyLCBFVEhfQUxFTik7Ci0JbWVtY3B5KHRlbXBsYXRlLmFkZHIzLCB3bC0+YnNzaWQsIEVUSF9BTEVOKTsKLQotCXRlbXBsYXRlLmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfREFUQSB8Ci0JCQkJCSAgICAgSUVFRTgwMjExX1NUWVBFX1FPU19OVUxMRlVOQyB8Ci0JCQkJCSAgICAgSUVFRTgwMjExX0ZDVExfVE9EUyk7Ci0KLQkvKiBGSVhNRTogbm90IHN1cmUgd2hhdCBwcmlvcml0eSB0byB1c2UgaGVyZSAqLwotCXRlbXBsYXRlLnFvc19jdHJsID0gY3B1X3RvX2xlMTYoMCk7Ci0KLQlyZXR1cm4gd2wxMjcxX2NtZF90ZW1wbGF0ZV9zZXQod2wsIENNRF9URU1QTF9RT1NfTlVMTF9EQVRBLCAmdGVtcGxhdGUsCi0JCQkJICAgICAgIHNpemVvZih0ZW1wbGF0ZSksIDAsCi0JCQkJICAgICAgIHdsLT5iYXNpY19yYXRlKTsKLX0KLQotaW50IHdsMTI3MV9jbWRfc2V0X2RlZmF1bHRfd2VwX2tleShzdHJ1Y3Qgd2wxMjcxICp3bCwgdTggaWQpCi17Ci0Jc3RydWN0IHdsMTI3MV9jbWRfc2V0X2tleXMgKmNtZDsKLQlpbnQgcmV0ID0gMDsKLQotCXdsMTI3MV9kZWJ1ZyhERUJVR19DTUQsICJjbWQgc2V0X2RlZmF1bHRfd2VwX2tleSAlZCIsIGlkKTsKLQotCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNtZCkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dDsKLQl9Ci0KLQljbWQtPmlkID0gaWQ7Ci0JY21kLT5rZXlfYWN0aW9uID0gY3B1X3RvX2xlMTYoS0VZX1NFVF9JRCk7Ci0JY21kLT5rZXlfdHlwZSA9IEtFWV9XRVA7Ci0KLQlyZXQgPSB3bDEyNzFfY21kX3NlbmQod2wsIENNRF9TRVRfS0VZUywgY21kLCBzaXplb2YoKmNtZCksIDApOwotCWlmIChyZXQgPCAwKSB7Ci0JCXdsMTI3MV93YXJuaW5nKCJjbWQgc2V0X2RlZmF1bHRfd2VwX2tleSBmYWlsZWQ6ICVkIiwgcmV0KTsKLQkJZ290byBvdXQ7Ci0JfQotCi1vdXQ6Ci0Ja2ZyZWUoY21kKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLWludCB3bDEyNzFfY21kX3NldF9rZXkoc3RydWN0IHdsMTI3MSAqd2wsIHUxNiBhY3Rpb24sIHU4IGlkLCB1OCBrZXlfdHlwZSwKLQkJICAgICAgIHU4IGtleV9zaXplLCBjb25zdCB1OCAqa2V5LCBjb25zdCB1OCAqYWRkciwKLQkJICAgICAgIHUzMiB0eF9zZXFfMzIsIHUxNiB0eF9zZXFfMTYpCi17Ci0Jc3RydWN0IHdsMTI3MV9jbWRfc2V0X2tleXMgKmNtZDsKLQlpbnQgcmV0ID0gMDsKLQotCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNtZCkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAoa2V5X3R5cGUgIT0gS0VZX1dFUCkKLQkJbWVtY3B5KGNtZC0+YWRkciwgYWRkciwgRVRIX0FMRU4pOwotCi0JY21kLT5rZXlfYWN0aW9uID0gY3B1X3RvX2xlMTYoYWN0aW9uKTsKLQljbWQtPmtleV9zaXplID0ga2V5X3NpemU7Ci0JY21kLT5rZXlfdHlwZSA9IGtleV90eXBlOwotCi0JY21kLT5hY19zZXFfbnVtMTZbMF0gPSBjcHVfdG9fbGUxNih0eF9zZXFfMTYpOwotCWNtZC0+YWNfc2VxX251bTMyWzBdID0gY3B1X3RvX2xlMzIodHhfc2VxXzMyKTsKLQotCS8qIHdlIGhhdmUgb25seSBvbmUgU1NJRCBwcm9maWxlICovCi0JY21kLT5zc2lkX3Byb2ZpbGUgPSAwOwotCi0JY21kLT5pZCA9IGlkOwotCi0JaWYgKGtleV90eXBlID09IEtFWV9US0lQKSB7Ci0JCS8qCi0JCSAqIFdlIGdldCB0aGUga2V5IGluIHRoZSBmb2xsb3dpbmcgZm9ybToKLQkJICogVEtJUCAoMTYgYnl0ZXMpIC0gVFggTUlDICg4IGJ5dGVzKSAtIFJYIE1JQyAoOCBieXRlcykKLQkJICogYnV0IHRoZSB0YXJnZXQgaXMgZXhwZWN0aW5nOgotCQkgKiBUS0lQIC0gUlggTUlDIC0gVFggTUlDCi0JCSAqLwotCQltZW1jcHkoY21kLT5rZXksIGtleSwgMTYpOwotCQltZW1jcHkoY21kLT5rZXkgKyAxNiwga2V5ICsgMjQsIDgpOwotCQltZW1jcHkoY21kLT5rZXkgKyAyNCwga2V5ICsgMTYsIDgpOwotCi0JfSBlbHNlIHsKLQkJbWVtY3B5KGNtZC0+a2V5LCBrZXksIGtleV9zaXplKTsKLQl9Ci0KLQl3bDEyNzFfZHVtcChERUJVR19DUllQVCwgIlRBUkdFVCBLRVk6ICIsIGNtZCwgc2l6ZW9mKCpjbWQpKTsKLQotCXJldCA9IHdsMTI3MV9jbWRfc2VuZCh3bCwgQ01EX1NFVF9LRVlTLCBjbWQsIHNpemVvZigqY21kKSwgMCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJd2wxMjcxX3dhcm5pbmcoImNvdWxkIG5vdCBzZXQga2V5cyIpOwotCWdvdG8gb3V0OwotCX0KLQotb3V0OgotCWtmcmVlKGNtZCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgd2wxMjcxX2NtZF9kaXNjb25uZWN0KHN0cnVjdCB3bDEyNzEgKndsKQotewotCXN0cnVjdCB3bDEyNzFfY21kX2Rpc2Nvbm5lY3QgKmNtZDsKLQlpbnQgcmV0ID0gMDsKLQotCXdsMTI3MV9kZWJ1ZyhERUJVR19DTUQsICJjbWQgZGlzY29ubmVjdCIpOwotCi0JY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOwotCWlmICghY21kKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0OwotCX0KLQotCWNtZC0+cnhfY29uZmlnX29wdGlvbnMgPSBjcHVfdG9fbGUzMih3bC0+cnhfY29uZmlnKTsKLQljbWQtPnJ4X2ZpbHRlcl9vcHRpb25zID0gY3B1X3RvX2xlMzIod2wtPnJ4X2ZpbHRlcik7Ci0JLyogZGlzY29ubmVjdCByZWFzb24gaXMgbm90IHVzZWQgaW4gaW1tZWRpYXRlIGRpc2Nvbm5lY3Rpb25zICovCi0JY21kLT50eXBlID0gRElTQ09OTkVDVF9JTU1FRElBVEU7Ci0KLQlyZXQgPSB3bDEyNzFfY21kX3NlbmQod2wsIENNRF9ESVNDT05ORUNULCBjbWQsIHNpemVvZigqY21kKSwgMCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJd2wxMjcxX2Vycm9yKCJmYWlsZWQgdG8gc2VuZCBkaXNjb25uZWN0IGNvbW1hbmQiKTsKLQkJZ290byBvdXRfZnJlZTsKLQl9Ci0KLQlyZXQgPSB3bDEyNzFfY21kX3dhaXRfZm9yX2V2ZW50KHdsLCBESVNDT05ORUNUX0VWRU5UX0NPTVBMRVRFX0lEKTsKLQlpZiAocmV0IDwgMCkKLQkJd2wxMjcxX2Vycm9yKCJjbWQgZGlzY29ubmVjdCBldmVudCBjb21wbGV0aW9uIGVycm9yIik7Ci0KLW91dF9mcmVlOgotCWtmcmVlKGNtZCk7Ci0KLW91dDoKLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgd2wxMjcxX2NtZF9zZXRfc3RhX3N0YXRlKHN0cnVjdCB3bDEyNzEgKndsKQotewotCXN0cnVjdCB3bDEyNzFfY21kX3NldF9zdGFfc3RhdGUgKmNtZDsKLQlpbnQgcmV0ID0gMDsKLQotCXdsMTI3MV9kZWJ1ZyhERUJVR19DTUQsICJjbWQgc2V0IHN0YSBzdGF0ZSIpOwotCi0JY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOwotCWlmICghY21kKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0OwotCX0KLQotCWNtZC0+c3RhdGUgPSBXTDEyNzFfQ01EX1NUQV9TVEFURV9DT05ORUNURUQ7Ci0KLQlyZXQgPSB3bDEyNzFfY21kX3NlbmQod2wsIENNRF9TRVRfU1RBX1NUQVRFLCBjbWQsIHNpemVvZigqY21kKSwgMCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJd2wxMjcxX2Vycm9yKCJmYWlsZWQgdG8gc2VuZCBzZXQgU1RBIHN0YXRlIGNvbW1hbmQiKTsKLQkJZ290byBvdXRfZnJlZTsKLQl9Ci0KLW91dF9mcmVlOgotCWtmcmVlKGNtZCk7Ci0KLW91dDoKLQlyZXR1cm4gcmV0OwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9jbWQuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfY21kLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwY2FmNGYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9jbWQuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ1OSArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMjcxCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk4LTIwMDkgVGV4YXMgSW5zdHJ1bWVudHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24KLSAqCi0gKiBDb250YWN0OiBMdWNpYW5vIENvZWxobyA8bHVjaWFuby5jb2VsaG9Abm9raWEuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQotICogMDIxMTAtMTMwMSBVU0EKLSAqCi0gKi8KLQotI2lmbmRlZiBfX1dMMTI3MV9DTURfSF9fCi0jZGVmaW5lIF9fV0wxMjcxX0NNRF9IX18KLQotI2luY2x1ZGUgIndsMTI3MS5oIgotCi1zdHJ1Y3QgYWN4X2hlYWRlcjsKLQotaW50IHdsMTI3MV9jbWRfc2VuZChzdHJ1Y3Qgd2wxMjcxICp3bCwgdTE2IGlkLCB2b2lkICpidWYsIHNpemVfdCBsZW4sCi0JCSAgICBzaXplX3QgcmVzX2xlbik7Ci1pbnQgd2wxMjcxX2NtZF9nZW5lcmFsX3Bhcm1zKHN0cnVjdCB3bDEyNzEgKndsKTsKLWludCB3bDEyNzFfY21kX3JhZGlvX3Bhcm1zKHN0cnVjdCB3bDEyNzEgKndsKTsKLWludCB3bDEyNzFfY21kX2V4dF9yYWRpb19wYXJtcyhzdHJ1Y3Qgd2wxMjcxICp3bCk7Ci1pbnQgd2wxMjcxX2NtZF9qb2luKHN0cnVjdCB3bDEyNzEgKndsLCB1OCBic3NfdHlwZSk7Ci1pbnQgd2wxMjcxX2NtZF90ZXN0KHN0cnVjdCB3bDEyNzEgKndsLCB2b2lkICpidWYsIHNpemVfdCBidWZfbGVuLCB1OCBhbnN3ZXIpOwotaW50IHdsMTI3MV9jbWRfaW50ZXJyb2dhdGUoc3RydWN0IHdsMTI3MSAqd2wsIHUxNiBpZCwgdm9pZCAqYnVmLCBzaXplX3QgbGVuKTsKLWludCB3bDEyNzFfY21kX2NvbmZpZ3VyZShzdHJ1Y3Qgd2wxMjcxICp3bCwgdTE2IGlkLCB2b2lkICpidWYsIHNpemVfdCBsZW4pOwotaW50IHdsMTI3MV9jbWRfZGF0YV9wYXRoKHN0cnVjdCB3bDEyNzEgKndsLCBib29sIGVuYWJsZSk7Ci1pbnQgd2wxMjcxX2NtZF9wc19tb2RlKHN0cnVjdCB3bDEyNzEgKndsLCB1OCBwc19tb2RlLCB1MzIgcmF0ZXMsIGJvb2wgc2VuZCk7Ci1pbnQgd2wxMjcxX2NtZF9yZWFkX21lbW9yeShzdHJ1Y3Qgd2wxMjcxICp3bCwgdTMyIGFkZHIsIHZvaWQgKmFuc3dlciwKLQkJCSAgIHNpemVfdCBsZW4pOwotaW50IHdsMTI3MV9jbWRfdGVtcGxhdGVfc2V0KHN0cnVjdCB3bDEyNzEgKndsLCB1MTYgdGVtcGxhdGVfaWQsCi0JCQkgICAgdm9pZCAqYnVmLCBzaXplX3QgYnVmX2xlbiwgaW50IGluZGV4LCB1MzIgcmF0ZXMpOwotaW50IHdsMTI3MV9jbWRfYnVpbGRfbnVsbF9kYXRhKHN0cnVjdCB3bDEyNzEgKndsKTsKLWludCB3bDEyNzFfY21kX2J1aWxkX3BzX3BvbGwoc3RydWN0IHdsMTI3MSAqd2wsIHUxNiBhaWQpOwotaW50IHdsMTI3MV9jbWRfYnVpbGRfcHJvYmVfcmVxKHN0cnVjdCB3bDEyNzEgKndsLAotCQkJICAgICAgIGNvbnN0IHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4sCi0JCQkgICAgICAgY29uc3QgdTggKmllLCBzaXplX3QgaWVfbGVuLCB1OCBiYW5kKTsKLWludCB3bDEyNzFfYnVpbGRfcW9zX251bGxfZGF0YShzdHJ1Y3Qgd2wxMjcxICp3bCk7Ci1pbnQgd2wxMjcxX2NtZF9idWlsZF9rbHZfbnVsbF9kYXRhKHN0cnVjdCB3bDEyNzEgKndsKTsKLWludCB3bDEyNzFfY21kX3NldF9kZWZhdWx0X3dlcF9rZXkoc3RydWN0IHdsMTI3MSAqd2wsIHU4IGlkKTsKLWludCB3bDEyNzFfY21kX3NldF9rZXkoc3RydWN0IHdsMTI3MSAqd2wsIHUxNiBhY3Rpb24sIHU4IGlkLCB1OCBrZXlfdHlwZSwKLQkJICAgICAgIHU4IGtleV9zaXplLCBjb25zdCB1OCAqa2V5LCBjb25zdCB1OCAqYWRkciwKLQkJICAgICAgIHUzMiB0eF9zZXFfMzIsIHUxNiB0eF9zZXFfMTYpOwotaW50IHdsMTI3MV9jbWRfZGlzY29ubmVjdChzdHJ1Y3Qgd2wxMjcxICp3bCk7Ci1pbnQgd2wxMjcxX2NtZF9zZXRfc3RhX3N0YXRlKHN0cnVjdCB3bDEyNzEgKndsKTsKLQotZW51bSB3bDEyNzFfY29tbWFuZHMgewotCUNNRF9JTlRFUlJPR0FURSAgICAgPSAxLCAgICAvKnVzZSB0aGlzIHRvIHJlYWQgaW5mb3JtYXRpb24gZWxlbWVudHMqLwotCUNNRF9DT05GSUdVUkUgICAgICAgPSAyLCAgICAvKnVzZSB0aGlzIHRvIHdyaXRlIGluZm9ybWF0aW9uIGVsZW1lbnRzKi8KLQlDTURfRU5BQkxFX1JYICAgICAgID0gMywKLQlDTURfRU5BQkxFX1RYICAgICAgID0gNCwKLQlDTURfRElTQUJMRV9SWCAgICAgID0gNSwKLQlDTURfRElTQUJMRV9UWCAgICAgID0gNiwKLQlDTURfU0NBTiAgICAgICAgICAgID0gOCwKLQlDTURfU1RPUF9TQ0FOICAgICAgID0gOSwKLQlDTURfU1RBUlRfSk9JTiAgICAgID0gMTEsCi0JQ01EX1NFVF9LRVlTICAgICAgICA9IDEyLAotCUNNRF9SRUFEX01FTU9SWSAgICAgPSAxMywKLQlDTURfV1JJVEVfTUVNT1JZICAgID0gMTQsCi0JQ01EX1NFVF9URU1QTEFURSAgICA9IDE5LAotCUNNRF9URVNUICAgICAgICAgICAgPSAyMywKLQlDTURfTk9JU0VfSElTVCAgICAgID0gMjgsCi0JQ01EX0xOQV9DT05UUk9MICAgICA9IDMyLAotCUNNRF9TRVRfQkNOX01PREUgICAgPSAzMywKLQlDTURfTUVBU1VSRU1FTlQgICAgICA9IDM0LAotCUNNRF9TVE9QX01FQVNVUkVNRU5UID0gMzUsCi0JQ01EX0RJU0NPTk5FQ1QgICAgICAgPSAzNiwKLQlDTURfU0VUX1BTX01PREUgICAgICA9IDM3LAotCUNNRF9DSEFOTkVMX1NXSVRDSCAgID0gMzgsCi0JQ01EX1NUT1BfQ0hBTk5FTF9TV0lDVEggPSAzOSwKLQlDTURfQVBfRElTQ09WRVJZICAgICA9IDQwLAotCUNNRF9TVE9QX0FQX0RJU0NPVkVSWSA9IDQxLAotCUNNRF9TUFNfU0NBTiA9IDQyLAotCUNNRF9TVE9QX1NQU19TQ0FOID0gNDMsCi0JQ01EX0hFQUxUSF9DSEVDSyAgICAgPSA0NSwKLQlDTURfREVCVUcgICAgICAgICAgICA9IDQ2LAotCUNNRF9UUklHR0VSX1NDQU5fVE8gID0gNDcsCi0JQ01EX0NPTk5FQ1RJT05fU0NBTl9DRkcgICAgICA9IDQ4LAotCUNNRF9DT05ORUNUSU9OX1NDQU5fU1NJRF9DRkcgPSA0OSwKLQlDTURfU1RBUlRfUEVSSU9ESUNfU0NBTiAgICAgID0gNTAsCi0JQ01EX1NUT1BfUEVSSU9ESUNfU0NBTiAgICAgICA9IDUxLAotCUNNRF9TRVRfU1RBX1NUQVRFICAgICAgICAgICAgPSA1MiwKLQotCU5VTV9DT01NQU5EUywKLQlNQVhfQ09NTUFORF9JRCA9IDB4RkZGRiwKLX07Ci0KLSNkZWZpbmUgTUFYX0NNRF9QQVJBTVMgNTcyCi0KLWVudW0gewotCUNNRF9URU1QTF9LTFZfSURYX05VTExfREFUQSA9IDAsCi0JQ01EX1RFTVBMX0tMVl9JRFhfTUFYID0gNAotfTsKLQotZW51bSBjbWRfdGVtcGwgewotCUNNRF9URU1QTF9OVUxMX0RBVEEgPSAwLAotCUNNRF9URU1QTF9CRUFDT04sCi0JQ01EX1RFTVBMX0NGR19QUk9CRV9SRVFfMl80LAotCUNNRF9URU1QTF9DRkdfUFJPQkVfUkVRXzUsCi0JQ01EX1RFTVBMX1BST0JFX1JFU1BPTlNFLAotCUNNRF9URU1QTF9RT1NfTlVMTF9EQVRBLAotCUNNRF9URU1QTF9QU19QT0xMLAotCUNNRF9URU1QTF9LTFYsCi0JQ01EX1RFTVBMX0RJU0NPTk5FQ1QsCi0JQ01EX1RFTVBMX1BST0JFX1JFUV8yXzQsIC8qIGZvciBmaXJtd2FyZSBpbnRlcm5hbCB1c2Ugb25seSAqLwotCUNNRF9URU1QTF9QUk9CRV9SRVFfNSwgICAvKiBmb3IgZmlybXdhcmUgaW50ZXJuYWwgdXNlIG9ubHkgKi8KLQlDTURfVEVNUExfQkFSLCAgICAgICAgICAgLyogZm9yIGZpcm13YXJlIGludGVybmFsIHVzZSBvbmx5ICovCi0JQ01EX1RFTVBMX0NUUywgICAgICAgICAgIC8qCi0JCQkJICAqIEZvciBDVFMtdG8tc2VsZiAoRmFzdENUUykgbWVjaGFuaXNtCi0JCQkJICAqIGZvciBCVC9XTEFOIGNvZXhpc3RlbmNlIChTb2Z0R2VtaW5pKS4gKi8KLQlDTURfVEVNUExfTUFYID0gMHhmZgotfTsKLQotLyogdW5pdCBtcyAqLwotI2RlZmluZSBXTDEyNzFfQ09NTUFORF9USU1FT1VUICAgICAyMDAwCi0jZGVmaW5lIFdMMTI3MV9DTURfVEVNUExfTUFYX1NJWkUgIDI1MgotI2RlZmluZSBXTDEyNzFfRVZFTlRfVElNRU9VVCAgICAgICA3NTAKLQotc3RydWN0IHdsMTI3MV9jbWRfaGVhZGVyIHsKLQlfX2xlMTYgaWQ7Ci0JX19sZTE2IHN0YXR1czsKLQkvKiBwYXlsb2FkICovCi0JdTggZGF0YVswXTsKLX0gX19wYWNrZWQ7Ci0KLSNkZWZpbmUgV0wxMjcxX0NNRF9NQVhfUEFSQU1TIDU3MgotCi1zdHJ1Y3Qgd2wxMjcxX2NvbW1hbmQgewotCXN0cnVjdCB3bDEyNzFfY21kX2hlYWRlciBoZWFkZXI7Ci0JdTggIHBhcmFtZXRlcnNbV0wxMjcxX0NNRF9NQVhfUEFSQU1TXTsKLX0gX19wYWNrZWQ7Ci0KLWVudW0gewotCUNNRF9NQUlMQk9YX0lETEUJCT0gIDAsCi0JQ01EX1NUQVRVU19TVUNDRVNTCQk9ICAxLAotCUNNRF9TVEFUVVNfVU5LTk9XTl9DTUQJCT0gIDIsCi0JQ01EX1NUQVRVU19VTktOT1dOX0lFCQk9ICAzLAotCUNNRF9TVEFUVVNfUkVKRUNUX01FQVNfU0dfQUNUSVZFCT0gMTEsCi0JQ01EX1NUQVRVU19SWF9CVVNZCQk9IDEzLAotCUNNRF9TVEFUVVNfSU5WQUxJRF9QQVJBTQkJPSAxNCwKLQlDTURfU1RBVFVTX1RFTVBMQVRFX1RPT19MQVJHRQkJPSAxNSwKLQlDTURfU1RBVFVTX09VVF9PRl9NRU1PUlkJCT0gMTYsCi0JQ01EX1NUQVRVU19TVEFfVEFCTEVfRlVMTAkJPSAxNywKLQlDTURfU1RBVFVTX1JBRElPX0VSUk9SCQk9IDE4LAotCUNNRF9TVEFUVVNfV1JPTkdfTkVTVElORwkJPSAxOSwKLQlDTURfU1RBVFVTX1RJTUVPVVQJCT0gMjEsIC8qIERyaXZlciBpbnRlcm5hbCB1c2UuKi8KLQlDTURfU1RBVFVTX0ZXX1JFU0VUCQk9IDIyLCAvKiBEcml2ZXIgaW50ZXJuYWwgdXNlLiovCi0JTUFYX0NPTU1BTkRfU1RBVFVTCQk9IDB4ZmYKLX07Ci0KLSNkZWZpbmUgQ01ETUJPWF9IRUFERVJfTEVOIDQKLSNkZWZpbmUgQ01ETUJPWF9JTkZPX0VMRU1fSEVBREVSX0xFTiA0Ci0KLWVudW0gewotCUJTU19UWVBFX0lCU1MgPSAwLAotCUJTU19UWVBFX1NUQV9CU1MgPSAyLAotCUJTU19UWVBFX0FQX0JTUyA9IDMsCi0JTUFYX0JTU19UWVBFID0gMHhGRgotfTsKLQotI2RlZmluZSBXTDEyNzFfSk9JTl9DTURfQ1RSTF9UWF9GTFVTSCAgICAgMHg4MCAvKiBGaXJtd2FyZSBmbHVzaGVzIGFsbCBUeCAqLwotI2RlZmluZSBXTDEyNzFfSk9JTl9DTURfVFhfU0VTU0lPTl9PRkZTRVQgMQotI2RlZmluZSBXTDEyNzFfSk9JTl9DTURfQlNTX1RZUEVfNUdIWiAweDEwCi0KLXN0cnVjdCB3bDEyNzFfY21kX2pvaW4gewotCXN0cnVjdCB3bDEyNzFfY21kX2hlYWRlciBoZWFkZXI7Ci0KLQlfX2xlMzIgYnNzaWRfbHNiOwotCV9fbGUxNiBic3NpZF9tc2I7Ci0JX19sZTE2IGJlYWNvbl9pbnRlcnZhbDsgLyogaW4gVEJUVHMgKi8KLQlfX2xlMzIgcnhfY29uZmlnX29wdGlvbnM7Ci0JX19sZTMyIHJ4X2ZpbHRlcl9vcHRpb25zOwotCi0JLyoKLQkgKiBUaGUgdGFyZ2V0IHVzZXMgdGhpcyBmaWVsZCB0byBkZXRlcm1pbmUgdGhlIHJhdGUgYXQKLQkgKiB3aGljaCB0byB0cmFuc21pdCBjb250cm9sIGZyYW1lIHJlc3BvbnNlcyAoc3VjaCBhcwotCSAqIEFDSyBvciBDVFMgZnJhbWVzKS4KLQkgKi8KLQlfX2xlMzIgYmFzaWNfcmF0ZV9zZXQ7Ci0JdTggZHRpbV9pbnRlcnZhbDsKLQkvKgotCSAqIGJpdHMgMC0yOiBUaGlzIGJpdHdpc2UgZmllbGQgc3BlY2lmaWVzIHRoZSB0eXBlCi0JICogb2YgQlNTIHRvIHN0YXJ0IG9yIGpvaW4gKEJTU19UWVBFXyopLgotCSAqIGJpdCA0OiBCYW5kIC0gVGhlIHJhZGlvIGJhbmQgaW4gd2hpY2ggdG8gam9pbgotCSAqIG9yIHN0YXJ0LgotCSAqICAwIC0gMi40R0h6IGJhbmQKLQkgKiAgMSAtIDVHSHogYmFuZAotCSAqIGJpdHMgMywgNS03OiBSZXNlcnZlZAotCSAqLwotCXU4IGJzc190eXBlOwotCXU4IGNoYW5uZWw7Ci0JdTggc3NpZF9sZW47Ci0JdTggc3NpZFtJV19FU1NJRF9NQVhfU0laRV07Ci0JdTggY3RybDsgLyogSk9JTl9DTURfQ1RSTF8qICovCi0JdTggcmVzZXJ2ZWRbM107Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgY21kX2VuYWJsZWRpc2FibGVfcGF0aCB7Ci0Jc3RydWN0IHdsMTI3MV9jbWRfaGVhZGVyIGhlYWRlcjsKLQotCXU4IGNoYW5uZWw7Ci0JdTggcGFkZGluZ1szXTsKLX0gX19wYWNrZWQ7Ci0KLSNkZWZpbmUgV0wxMjcxX1JBVEVfQVVUT01BVElDICAwCi0KLXN0cnVjdCB3bDEyNzFfY21kX3RlbXBsYXRlX3NldCB7Ci0Jc3RydWN0IHdsMTI3MV9jbWRfaGVhZGVyIGhlYWRlcjsKLQotCV9fbGUxNiBsZW47Ci0JdTggdGVtcGxhdGVfdHlwZTsKLQl1OCBpbmRleDsgIC8qIHJlbGV2YW50IG9ubHkgZm9yIEtMVl9URU1QTEFURSB0eXBlICovCi0JX19sZTMyIGVuYWJsZWRfcmF0ZXM7Ci0JdTggc2hvcnRfcmV0cnlfbGltaXQ7Ci0JdTggbG9uZ19yZXRyeV9saW1pdDsKLQl1OCBhZmxhZ3M7Ci0JdTggcmVzZXJ2ZWQ7Ci0JdTggdGVtcGxhdGVfZGF0YVtXTDEyNzFfQ01EX1RFTVBMX01BWF9TSVpFXTsKLX0gX19wYWNrZWQ7Ci0KLSNkZWZpbmUgVElNX0VMRV9JRCAgICA1Ci0jZGVmaW5lIFBBUlRJQUxfVkJNX01BWCAgICAyNTEKLQotc3RydWN0IHdsMTI3MV90aW0gewotCXU4IGlkZW50aXR5OwotCXU4IGxlbmd0aDsKLQl1OCBkdGltX2NvdW50OwotCXU4IGR0aW1fcGVyaW9kOwotCXU4IGJpdG1hcF9jdHJsOwotCXU4IHB2Yl9maWVsZFtQQVJUSUFMX1ZCTV9NQVhdOyAvKiBQYXJ0aWFsIFZpcnR1YWwgQml0bWFwICovCi19IF9fcGFja2VkOwotCi1lbnVtIHdsMTI3MV9jbWRfcHNfbW9kZSB7Ci0JU1RBVElPTl9BQ1RJVkVfTU9ERSwKLQlTVEFUSU9OX1BPV0VSX1NBVkVfTU9ERQotfTsKLQotc3RydWN0IHdsMTI3MV9jbWRfcHNfcGFyYW1zIHsKLQlzdHJ1Y3Qgd2wxMjcxX2NtZF9oZWFkZXIgaGVhZGVyOwotCi0JdTggcHNfbW9kZTsgLyogU1RBVElPTl8qICovCi0JdTggc2VuZF9udWxsX2RhdGE7IC8qIERvIHdlIGhhdmUgdG8gc2VuZCBOVUxMIGRhdGEgcGFja2V0ID8gKi8KLQl1OCByZXRyaWVzOyAvKiBOdW1iZXIgb2YgcmV0aXJlcyBmb3IgdGhlIGluaXRpYWwgTlVMTCBkYXRhIHBhY2tldCAqLwotCi0JIC8qCi0JICAqIFRVcyBkdXJpbmcgd2hpY2ggdGhlIHRhcmdldCBzdGF5cyBhd2FrZSBhZnRlciBzd2l0Y2hpbmcKLQkgICogdG8gcG93ZXIgc2F2ZSBtb2RlLgotCSAgKi8KLQl1OCBoYW5nX292ZXJfcGVyaW9kOwotCV9fbGUzMiBudWxsX2RhdGFfcmF0ZTsKLX0gX19wYWNrZWQ7Ci0KLS8qIEhXIGVuY3J5cHRpb24ga2V5cyAqLwotI2RlZmluZSBOVU1fQUNDRVNTX0NBVEVHT1JJRVNfQ09QWSA0Ci0jZGVmaW5lIE1BWF9LRVlfU0laRSAzMgotCi1lbnVtIHdsMTI3MV9jbWRfa2V5X2FjdGlvbiB7Ci0JS0VZX0FERF9PUl9SRVBMQUNFID0gMSwKLQlLRVlfUkVNT1ZFICAgICAgICAgPSAyLAotCUtFWV9TRVRfSUQgICAgICAgICA9IDMsCi0JTUFYX0tFWV9BQ1RJT04gICAgID0gMHhmZmZmLAotfTsKLQotZW51bSB3bDEyNzFfY21kX2tleV90eXBlIHsKLQlLRVlfTk9ORSA9IDAsCi0JS0VZX1dFUCAgPSAxLAotCUtFWV9US0lQID0gMiwKLQlLRVlfQUVTICA9IDMsCi0JS0VZX0dFTSAgPSA0LAotfTsKLQotLyogRklYTUU6IEFkZCBkZXNjcmlwdGlvbiBmb3Iga2V5LXR5cGVzICovCi0KLXN0cnVjdCB3bDEyNzFfY21kX3NldF9rZXlzIHsKLQlzdHJ1Y3Qgd2wxMjcxX2NtZF9oZWFkZXIgaGVhZGVyOwotCi0JLyogSWdub3JlZCBmb3IgZGVmYXVsdCBXRVAga2V5ICovCi0JdTggYWRkcltFVEhfQUxFTl07Ci0KLQkvKiBrZXlfYWN0aW9uX2UgKi8KLQlfX2xlMTYga2V5X2FjdGlvbjsKLQotCV9fbGUxNiByZXNlcnZlZF8xOwotCi0JLyoga2V5IHNpemUgaW4gYnl0ZXMgKi8KLQl1OCBrZXlfc2l6ZTsKLQotCS8qIGtleV90eXBlX2UgKi8KLQl1OCBrZXlfdHlwZTsKLQl1OCBzc2lkX3Byb2ZpbGU7Ci0KLQkvKgotCSAqIFRLSVAsIEFFUzogZnJhbWUncyBrZXkgaWQgZmllbGQuCi0JICogRm9yIFdFUCBkZWZhdWx0IGtleToga2V5IGlkOwotCSAqLwotCXU4IGlkOwotCXU4IHJlc2VydmVkXzJbNl07Ci0JdTgga2V5W01BWF9LRVlfU0laRV07Ci0JX19sZTE2IGFjX3NlcV9udW0xNltOVU1fQUNDRVNTX0NBVEVHT1JJRVNfQ09QWV07Ci0JX19sZTMyIGFjX3NlcV9udW0zMltOVU1fQUNDRVNTX0NBVEVHT1JJRVNfQ09QWV07Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3Qgd2wxMjcxX2NtZF90ZXN0X2hlYWRlciB7Ci0JdTggaWQ7Ci0JdTggcGFkZGluZ1szXTsKLX0gX19wYWNrZWQ7Ci0KLWVudW0gd2wxMjcxX2NoYW5uZWxfdHVuZV9iYW5kcyB7Ci0JV0wxMjcxX0NIQU5ORUxfVFVORV9CQU5EXzJfNCwKLQlXTDEyNzFfQ0hBTk5FTF9UVU5FX0JBTkRfNSwKLQlXTDEyNzFfQ0hBTk5FTF9UVU5FX0JBTkRfNF85Ci19OwotCi0jZGVmaW5lIFdMMTI3MV9QRF9SRUZFUkVOQ0VfUE9JTlRfQkFORF9CX0cgIDAKLQotI2RlZmluZSBURVNUX0NNRF9QMkdfQ0FMICAgICAgICAgICAgICAgICAgICAweDAyCi0jZGVmaW5lIFRFU1RfQ01EX0NIQU5ORUxfVFVORSAgICAgICAgICAgICAgIDB4MGQKLSNkZWZpbmUgVEVTVF9DTURfVVBEQVRFX1BEX1JFRkVSRU5DRV9QT0lOVCAgMHgxZAotI2RlZmluZSBURVNUX0NNRF9JTklfRklMRV9SQURJT19QQVJBTSAgICAgICAweDE5Ci0jZGVmaW5lIFRFU1RfQ01EX0lOSV9GSUxFX0dFTkVSQUxfUEFSQU0gICAgIDB4MUUKLSNkZWZpbmUgVEVTVF9DTURfSU5JX0ZJTEVfUkZfRVhURU5ERURfUEFSQU0gMHgyNgotCi1zdHJ1Y3Qgd2wxMjcxX2dlbmVyYWxfcGFybXNfY21kIHsKLQlzdHJ1Y3Qgd2wxMjcxX2NtZF9oZWFkZXIgaGVhZGVyOwotCi0Jc3RydWN0IHdsMTI3MV9jbWRfdGVzdF9oZWFkZXIgdGVzdDsKLQotCXN0cnVjdCB3bDEyNzFfaW5pX2dlbmVyYWxfcGFyYW1zIGdlbmVyYWxfcGFyYW1zOwotCi0JdTggc3JfZGVidWdfdGFibGVbV0wxMjcxX0lOSV9NQVhfU01BUlRfUkVGTEVYX1BBUkFNXTsKLQl1OCBzcl9zZW5fbl9wOwotCXU4IHNyX3Nlbl9uX3BfZ2FpbjsKLQl1OCBzcl9zZW5fbnJuOwotCXU4IHNyX3Nlbl9wcm47Ci0JdTggcGFkZGluZ1szXTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCB3bDEyNzFfcmFkaW9fcGFybXNfY21kIHsKLQlzdHJ1Y3Qgd2wxMjcxX2NtZF9oZWFkZXIgaGVhZGVyOwotCi0Jc3RydWN0IHdsMTI3MV9jbWRfdGVzdF9oZWFkZXIgdGVzdDsKLQotCS8qIFN0YXRpYyByYWRpbyBwYXJhbWV0ZXJzICovCi0Jc3RydWN0IHdsMTI3MV9pbmlfYmFuZF9wYXJhbXNfMiBzdGF0aWNfcGFyYW1zXzI7Ci0Jc3RydWN0IHdsMTI3MV9pbmlfYmFuZF9wYXJhbXNfNSBzdGF0aWNfcGFyYW1zXzU7Ci0KLQkvKiBEeW5hbWljIHJhZGlvIHBhcmFtZXRlcnMgKi8KLQlzdHJ1Y3Qgd2wxMjcxX2luaV9mZW1fcGFyYW1zXzIgZHluX3BhcmFtc18yOwotCXU4IHBhZGRpbmcyOwotCXN0cnVjdCB3bDEyNzFfaW5pX2ZlbV9wYXJhbXNfNSBkeW5fcGFyYW1zXzU7Ci0JdTggcGFkZGluZzNbMl07Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3Qgd2wxMjcxX2V4dF9yYWRpb19wYXJtc19jbWQgewotCXN0cnVjdCB3bDEyNzFfY21kX2hlYWRlciBoZWFkZXI7Ci0KLQlzdHJ1Y3Qgd2wxMjcxX2NtZF90ZXN0X2hlYWRlciB0ZXN0OwotCi0JdTggdHhfcGVyX2NoYW5uZWxfcG93ZXJfY29tcGVuc2F0aW9uXzJbQ09ORl9UWF9QV1JfQ09NUEVOU0FUSU9OX0xFTl8yXTsKLQl1OCB0eF9wZXJfY2hhbm5lbF9wb3dlcl9jb21wZW5zYXRpb25fNVtDT05GX1RYX1BXUl9DT01QRU5TQVRJT05fTEVOXzVdOwotCXU4IHBhZGRpbmdbM107Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3Qgd2wxMjcxX2NtZF9jYWxfY2hhbm5lbF90dW5lIHsKLQlzdHJ1Y3Qgd2wxMjcxX2NtZF9oZWFkZXIgaGVhZGVyOwotCi0Jc3RydWN0IHdsMTI3MV9jbWRfdGVzdF9oZWFkZXIgdGVzdDsKLQotCXU4IGJhbmQ7Ci0JdTggY2hhbm5lbDsKLQotCV9fbGUxNiByYWRpb19zdGF0dXM7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3Qgd2wxMjcxX2NtZF9jYWxfdXBkYXRlX3JlZl9wb2ludCB7Ci0Jc3RydWN0IHdsMTI3MV9jbWRfaGVhZGVyIGhlYWRlcjsKLQotCXN0cnVjdCB3bDEyNzFfY21kX3Rlc3RfaGVhZGVyIHRlc3Q7Ci0KLQlfX2xlMzIgcmVmX3Bvd2VyOwotCV9fbGUzMiByZWZfZGV0ZWN0b3I7Ci0JdTggIHN1Yl9iYW5kOwotCXU4ICBwYWRkaW5nWzNdOwotfSBfX3BhY2tlZDsKLQotI2RlZmluZSBNQVhfVExWX0xFTkdUSCAgICAgICAgIDQwMAotI2RlZmluZQlNQVhfTlZTX1ZFUlNJT05fTEVOR1RIIDEyCi0KLSNkZWZpbmUgV0wxMjcxX0NBTF9QMkdfQkFORF9CX0cgQklUKDApCi0KLXN0cnVjdCB3bDEyNzFfY21kX2NhbF9wMmcgewotCXN0cnVjdCB3bDEyNzFfY21kX2hlYWRlciBoZWFkZXI7Ci0KLQlzdHJ1Y3Qgd2wxMjcxX2NtZF90ZXN0X2hlYWRlciB0ZXN0OwotCi0JX19sZTE2IGxlbjsKLQl1OCAgYnVmW01BWF9UTFZfTEVOR1RIXTsKLQl1OCAgdHlwZTsKLQl1OCAgcGFkZGluZzsKLQotCV9fbGUxNiByYWRpb19zdGF0dXM7Ci0JdTggIG52c192ZXJzaW9uW01BWF9OVlNfVkVSU0lPTl9MRU5HVEhdOwotCi0JdTggIHN1Yl9iYW5kX21hc2s7Ci0JdTggIHBhZGRpbmcyOwotfSBfX3BhY2tlZDsKLQotCi0vKgotICogVGhlcmUgYXJlIHRocmVlIHR5cGVzIG9mIGRpc2Nvbm5lY3Rpb25zOgotICoKLSAqIERJU0NPTk5FQ1RfSU1NRURJQVRFOiB0aGUgZncgZG9lc24ndCBzZW5kIGFueSBmcmFtZXMKLSAqIERJU0NPTk5FQ1RfREVBVVRIOiAgICB0aGUgZncgZ2VuZXJhdGVzIGEgREVBVVRIIHJlcXVlc3Qgd2l0aCB0aGUgcmVhc29uCi0gKiAgICAgICAgICAgICAgICAgICAgICAgd2UgaGF2ZSBwYXNzZWQKLSAqIERJU0NPTk5FQ1RfRElTQVNTT0M6ICB0aGUgZncgZ2VuZXJhdGVzIGEgREVTQVNTT0MgcmVxdWVzdCB3aXRoIHRoZSByZWFzb24KLSAqICAgICAgICAgICAgICAgICAgICAgICB3ZSBoYXZlIHBhc3NlZAotICovCi1lbnVtIHdsMTI3MV9kaXNjb25uZWN0X3R5cGUgewotCURJU0NPTk5FQ1RfSU1NRURJQVRFLAotCURJU0NPTk5FQ1RfREVBVVRILAotCURJU0NPTk5FQ1RfRElTQVNTT0MKLX07Ci0KLXN0cnVjdCB3bDEyNzFfY21kX2Rpc2Nvbm5lY3QgewotCXN0cnVjdCB3bDEyNzFfY21kX2hlYWRlciBoZWFkZXI7Ci0KLQlfX2xlMzIgcnhfY29uZmlnX29wdGlvbnM7Ci0JX19sZTMyIHJ4X2ZpbHRlcl9vcHRpb25zOwotCi0JX19sZTE2IHJlYXNvbjsKLQl1OCAgdHlwZTsKLQotCXU4ICBwYWRkaW5nOwotfSBfX3BhY2tlZDsKLQotI2RlZmluZSBXTDEyNzFfQ01EX1NUQV9TVEFURV9DT05ORUNURUQgIDEKLQotc3RydWN0IHdsMTI3MV9jbWRfc2V0X3N0YV9zdGF0ZSB7Ci0Jc3RydWN0IHdsMTI3MV9jbWRfaGVhZGVyIGhlYWRlcjsKLQotCXU4IHN0YXRlOwotCXU4IHBhZGRpbmdbM107Ci19IF9fcGFja2VkOwotCi0jZW5kaWYgLyogX19XTDEyNzFfQ01EX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9jb25mLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2NvbmYuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWY3OGE2Yy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2NvbmYuaAorKysgL2Rldi9udWxsCkBAIC0xLDExMDUgKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdsMTI3MQotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgotICoKLSAqIENvbnRhY3Q6IEx1Y2lhbm8gQ29lbGhvIDxsdWNpYW5vLmNvZWxob0Bub2tpYS5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0gKiAwMjExMC0xMzAxIFVTQQotICoKLSAqLwotCi0jaWZuZGVmIF9fV0wxMjcxX0NPTkZfSF9fCi0jZGVmaW5lIF9fV0wxMjcxX0NPTkZfSF9fCi0KLWVudW0gewotCUNPTkZfSFdfQklUX1JBVEVfMU1CUFMgICA9IEJJVCgwKSwKLQlDT05GX0hXX0JJVF9SQVRFXzJNQlBTICAgPSBCSVQoMSksCi0JQ09ORl9IV19CSVRfUkFURV81XzVNQlBTID0gQklUKDIpLAotCUNPTkZfSFdfQklUX1JBVEVfNk1CUFMgICA9IEJJVCgzKSwKLQlDT05GX0hXX0JJVF9SQVRFXzlNQlBTICAgPSBCSVQoNCksCi0JQ09ORl9IV19CSVRfUkFURV8xMU1CUFMgID0gQklUKDUpLAotCUNPTkZfSFdfQklUX1JBVEVfMTJNQlBTICA9IEJJVCg2KSwKLQlDT05GX0hXX0JJVF9SQVRFXzE4TUJQUyAgPSBCSVQoNyksCi0JQ09ORl9IV19CSVRfUkFURV8yMk1CUFMgID0gQklUKDgpLAotCUNPTkZfSFdfQklUX1JBVEVfMjRNQlBTICA9IEJJVCg5KSwKLQlDT05GX0hXX0JJVF9SQVRFXzM2TUJQUyAgPSBCSVQoMTApLAotCUNPTkZfSFdfQklUX1JBVEVfNDhNQlBTICA9IEJJVCgxMSksCi0JQ09ORl9IV19CSVRfUkFURV81NE1CUFMgID0gQklUKDEyKSwKLQlDT05GX0hXX0JJVF9SQVRFX01DU18wICAgPSBCSVQoMTMpLAotCUNPTkZfSFdfQklUX1JBVEVfTUNTXzEgICA9IEJJVCgxNCksCi0JQ09ORl9IV19CSVRfUkFURV9NQ1NfMiAgID0gQklUKDE1KSwKLQlDT05GX0hXX0JJVF9SQVRFX01DU18zICAgPSBCSVQoMTYpLAotCUNPTkZfSFdfQklUX1JBVEVfTUNTXzQgICA9IEJJVCgxNyksCi0JQ09ORl9IV19CSVRfUkFURV9NQ1NfNSAgID0gQklUKDE4KSwKLQlDT05GX0hXX0JJVF9SQVRFX01DU182ICAgPSBCSVQoMTkpLAotCUNPTkZfSFdfQklUX1JBVEVfTUNTXzcgICA9IEJJVCgyMCkKLX07Ci0KLWVudW0gewotCUNPTkZfSFdfUkFURV9JTkRFWF8xTUJQUyAgID0gMCwKLQlDT05GX0hXX1JBVEVfSU5ERVhfMk1CUFMgICA9IDEsCi0JQ09ORl9IV19SQVRFX0lOREVYXzVfNU1CUFMgPSAyLAotCUNPTkZfSFdfUkFURV9JTkRFWF82TUJQUyAgID0gMywKLQlDT05GX0hXX1JBVEVfSU5ERVhfOU1CUFMgICA9IDQsCi0JQ09ORl9IV19SQVRFX0lOREVYXzExTUJQUyAgPSA1LAotCUNPTkZfSFdfUkFURV9JTkRFWF8xMk1CUFMgID0gNiwKLQlDT05GX0hXX1JBVEVfSU5ERVhfMThNQlBTICA9IDcsCi0JQ09ORl9IV19SQVRFX0lOREVYXzIyTUJQUyAgPSA4LAotCUNPTkZfSFdfUkFURV9JTkRFWF8yNE1CUFMgID0gOSwKLQlDT05GX0hXX1JBVEVfSU5ERVhfMzZNQlBTICA9IDEwLAotCUNPTkZfSFdfUkFURV9JTkRFWF80OE1CUFMgID0gMTEsCi0JQ09ORl9IV19SQVRFX0lOREVYXzU0TUJQUyAgPSAxMiwKLQlDT05GX0hXX1JBVEVfSU5ERVhfTUFYICAgICA9IENPTkZfSFdfUkFURV9JTkRFWF81NE1CUFMsCi19OwotCi1lbnVtIHsKLQlDT05GX0hXX1JYVFhfUkFURV9NQ1M3ID0gMCwKLQlDT05GX0hXX1JYVFhfUkFURV9NQ1M2LAotCUNPTkZfSFdfUlhUWF9SQVRFX01DUzUsCi0JQ09ORl9IV19SWFRYX1JBVEVfTUNTNCwKLQlDT05GX0hXX1JYVFhfUkFURV9NQ1MzLAotCUNPTkZfSFdfUlhUWF9SQVRFX01DUzIsCi0JQ09ORl9IV19SWFRYX1JBVEVfTUNTMSwKLQlDT05GX0hXX1JYVFhfUkFURV9NQ1MwLAotCUNPTkZfSFdfUlhUWF9SQVRFXzU0LAotCUNPTkZfSFdfUlhUWF9SQVRFXzQ4LAotCUNPTkZfSFdfUlhUWF9SQVRFXzM2LAotCUNPTkZfSFdfUlhUWF9SQVRFXzI0LAotCUNPTkZfSFdfUlhUWF9SQVRFXzIyLAotCUNPTkZfSFdfUlhUWF9SQVRFXzE4LAotCUNPTkZfSFdfUlhUWF9SQVRFXzEyLAotCUNPTkZfSFdfUlhUWF9SQVRFXzExLAotCUNPTkZfSFdfUlhUWF9SQVRFXzksCi0JQ09ORl9IV19SWFRYX1JBVEVfNiwKLQlDT05GX0hXX1JYVFhfUkFURV81XzUsCi0JQ09ORl9IV19SWFRYX1JBVEVfMiwKLQlDT05GX0hXX1JYVFhfUkFURV8xLAotCUNPTkZfSFdfUlhUWF9SQVRFX01BWCwKLQlDT05GX0hXX1JYVFhfUkFURV9VTlNVUFBPUlRFRCA9IDB4ZmYKLX07Ci0KLWVudW0gewotCUNPTkZfU0dfRElTQUJMRSA9IDAsCi0JQ09ORl9TR19QUk9URUNUSVZFLAotCUNPTkZfU0dfT1BQT1JUVU5JU1RJQwotfTsKLQotZW51bSB7Ci0JLyoKLQkgKiBQRVIgdGhyZXNob2xkIGluIFBQTSBvZiB0aGUgQlQgdm9pY2UKLQkgKgotCSAqIFJhbmdlOiAwIC0gMTAwMDAwMDAKLQkgKi8KLQlDT05GX1NHX0JUX1BFUl9USFJFU0hPTEQgPSAwLAotCi0JLyoKLQkgKiBOdW1iZXIgb2YgY29uc2VxdWVudCBSWF9BQ1RJVkUgYWN0aXZpdGllcyB0byBvdmVycmlkZSBCVCB2b2ljZQotCSAqIGZyYW1lcyB0byBlbnN1cmUgV0xBTiBjb25uZWN0aW9uCi0JICoKLQkgKiBSYW5nZTogMCAtIDEwMAotCSAqLwotCUNPTkZfU0dfSFYzX01BWF9PVkVSUklERSwKLQotCS8qCi0JICogRGVmaW5lcyB0aGUgUEVSIHRocmVzaG9sZCBvZiB0aGUgQlQgdm9pY2UKLQkgKgotCSAqIFJhbmdlOiAwIC0gNjUwMDAKLQkgKi8KLQlDT05GX1NHX0JUX05GU19TQU1QTEVfSU5URVJWQUwsCi0KLQkvKgotCSAqIERlZmluZXMgdGhlIGxvYWQgcmF0aW8gb2YgQlQKLQkgKgotCSAqIFJhbmdlOiAwIC0gMTAwICglKQotCSAqLwotCUNPTkZfU0dfQlRfTE9BRF9SQVRJTywKLQotCS8qCi0JICogRGVmaW5lcyB3aGV0aGVyIHRoZSBTRyB3aWxsIGZvcmNlIFdMQU4gaG9zdCB0byBlbnRlci9leGl0IFBTTQotCSAqCi0JICogUmFuZ2U6IDEgLSBTRyBjYW4gZm9yY2UsIDAgLSBob3N0IGhhbmRsZXMgUFNNCi0JICovCi0JQ09ORl9TR19BVVRPX1BTX01PREUsCi0KLQkvKgotCSAqIENvbXBlbnNhdGlvbiBwZXJjZW50YWdlIG9mIHByb2JlIHJlcXVlc3RzIHdoZW4gc2NhbiBpbml0aWF0ZWQKLQkgKiBkdXJpbmcgQlQgdm9pY2UvQUNMIGxpbmsuCi0JICoKLQkgKiBSYW5nZTogMCAtIDI1NSAoJSkKLQkgKi8KLQlDT05GX1NHX0FVVE9fU0NBTl9QUk9CRV9SRVEsCi0KLQkvKgotCSAqIENvbXBlbnNhdGlvbiBwZXJjZW50YWdlIG9mIHByb2JlIHJlcXVlc3RzIHdoZW4gYWN0aXZlIHNjYW4gaW5pdGlhdGVkCi0JICogZHVyaW5nIEJUIHZvaWNlCi0JICoKLQkgKiBSYW5nZTogMCAtIDI1NSAoJSkKLQkgKi8KLQlDT05GX1NHX0FDVElWRV9TQ0FOX0RVUkFUSU9OX0ZBQ1RPUl9IVjMsCi0KLQkvKgotCSAqIERlZmluZXMgYW50ZW5uYSBjb25maWd1cmF0aW9uIChzaW5nbGUvZHVhbCBhbnRlbm5hKQotCSAqCi0JICogUmFuZ2U6IDAgLSBzaW5nbGUgYW50ZW5uYSwgMSAtIGR1YWwgYW50ZW5uYQotCSAqLwotCUNPTkZfU0dfQU5URU5OQV9DT05GSUdVUkFUSU9OLAotCi0JLyoKLQkgKiBUaGUgdGhyZXNob2xkIChwZXJjZW50KSBvZiBtYXggY29uc2VxdXRpdmUgYmVhY29uIG1pc3NlcyBiZWZvcmUKLQkgKiBpbmNyZWFzaW5nIHByaW9yaXR5IG9mIGJlYWNvbiByZWNlcHRpb24uCi0JICoKLQkgKiBSYW5nZTogMCAtIDEwMCAoJSkKLQkgKi8KLQlDT05GX1NHX0JFQUNPTl9NSVNTX1BFUkNFTlQsCi0KLQkvKgotCSAqIFRoZSByYXRlIHRocmVzaG9sZCBiZWxvdyB3aGljaCByZWNlaXZpbmcgYSBkYXRhIGZyYW1lIGZyb20gdGhlIEFQCi0JICogd2lsbCBpbmNyZWFzZSB0aGUgcHJpb3JpdHkgb2YgdGhlIGRhdGEgZnJhbWUgYWJvdmUgQlQgdHJhZmZpYy4KLQkgKgotCSAqIFJhbmdlOiAwLDIsIDUoPTUuNSksIDYsIDksIDExLCAxMiwgMTgsIDI0LCAzNiwgNDgsIDU0Ci0JICovCi0JQ09ORl9TR19SQVRFX0FEQVBUX1RIUkVTSCwKLQotCS8qCi0JICogTm90IHVzZWQgY3VycmVudGx5LgotCSAqCi0JICogUmFuZ2U6IDAKLQkgKi8KLQlDT05GX1NHX1JBVEVfQURBUFRfU05SLAotCi0JLyoKLQkgKiBDb25maWd1cmUgdGhlIG1pbiBhbmQgbWF4IHRpbWUgQlQgZ2FpbnMgdGhlIGFudGVubmEKLQkgKiBpbiBXTEFOIFBTTSAvIEJUIG1hc3RlciBiYXNpYyByYXRlCi0JICoKLQkgKiBSYW5nZTogMCAtIDI1NSAobXMpCi0JICovCi0JQ09ORl9TR19XTEFOX1BTX0JUX0FDTF9NQVNURVJfTUlOX0JSLAotCUNPTkZfU0dfV0xBTl9QU19CVF9BQ0xfTUFTVEVSX01BWF9CUiwKLQotCS8qCi0JICogVGhlIHRpbWUgYWZ0ZXIgaXQgZXhwaXJlcyBubyBuZXcgV0xBTiB0cmlnZ2VyIGZyYW1lIGlzIHRyYXNtaXR0ZWQKLQkgKiBpbiBXTEFOIFBTTSAvIEJUIG1hc3RlciBiYXNpYyByYXRlCi0JICoKLQkgKiBSYW5nZTogMCAtIDI1NSAobXMpCi0JICovCi0JQ09ORl9TR19XTEFOX1BTX01BWF9CVF9BQ0xfTUFTVEVSX0JSLAotCi0JLyoKLQkgKiBDb25maWd1cmUgdGhlIG1pbiBhbmQgbWF4IHRpbWUgQlQgZ2FpbnMgdGhlIGFudGVubmEKLQkgKiBpbiBXTEFOIFBTTSAvIEJUIHNsYXZlIGJhc2ljIHJhdGUKLQkgKgotCSAqIFJhbmdlOiAwIC0gMjU1IChtcykKLQkgKi8KLQlDT05GX1NHX1dMQU5fUFNfQlRfQUNMX1NMQVZFX01JTl9CUiwKLQlDT05GX1NHX1dMQU5fUFNfQlRfQUNMX1NMQVZFX01BWF9CUiwKLQotCS8qCi0JICogVGhlIHRpbWUgYWZ0ZXIgaXQgZXhwaXJlcyBubyBuZXcgV0xBTiB0cmlnZ2VyIGZyYW1lIGlzIHRyYXNtaXR0ZWQKLQkgKiBpbiBXTEFOIFBTTSAvIEJUIHNsYXZlIGJhc2ljIHJhdGUKLQkgKgotCSAqIFJhbmdlOiAwIC0gMjU1IChtcykKLQkgKi8KLQlDT05GX1NHX1dMQU5fUFNfTUFYX0JUX0FDTF9TTEFWRV9CUiwKLQotCS8qCi0JICogQ29uZmlndXJlIHRoZSBtaW4gYW5kIG1heCB0aW1lIEJUIGdhaW5zIHRoZSBhbnRlbm5hCi0JICogaW4gV0xBTiBQU00gLyBCVCBtYXN0ZXIgRURSCi0JICoKLQkgKiBSYW5nZTogMCAtIDI1NSAobXMpCi0JICovCi0JQ09ORl9TR19XTEFOX1BTX0JUX0FDTF9NQVNURVJfTUlOX0VEUiwKLQlDT05GX1NHX1dMQU5fUFNfQlRfQUNMX01BU1RFUl9NQVhfRURSLAotCi0JLyoKLQkgKiBUaGUgdGltZSBhZnRlciBpdCBleHBpcmVzIG5vIG5ldyBXTEFOIHRyaWdnZXIgZnJhbWUgaXMgdHJhc21pdHRlZAotCSAqIGluIFdMQU4gUFNNIC8gQlQgbWFzdGVyIEVEUgotCSAqCi0JICogUmFuZ2U6IDAgLSAyNTUgKG1zKQotCSAqLwotCUNPTkZfU0dfV0xBTl9QU19NQVhfQlRfQUNMX01BU1RFUl9FRFIsCi0KLQkvKgotCSAqIENvbmZpZ3VyZSB0aGUgbWluIGFuZCBtYXggdGltZSBCVCBnYWlucyB0aGUgYW50ZW5uYQotCSAqIGluIFdMQU4gUFNNIC8gQlQgc2xhdmUgRURSCi0JICoKLQkgKiBSYW5nZTogMCAtIDI1NSAobXMpCi0JICovCi0JQ09ORl9TR19XTEFOX1BTX0JUX0FDTF9TTEFWRV9NSU5fRURSLAotCUNPTkZfU0dfV0xBTl9QU19CVF9BQ0xfU0xBVkVfTUFYX0VEUiwKLQotCS8qCi0JICogVGhlIHRpbWUgYWZ0ZXIgaXQgZXhwaXJlcyBubyBuZXcgV0xBTiB0cmlnZ2VyIGZyYW1lIGlzIHRyYXNtaXR0ZWQKLQkgKiBpbiBXTEFOIFBTTSAvIEJUIHNsYXZlIEVEUgotCSAqCi0JICogUmFuZ2U6IDAgLSAyNTUgKG1zKQotCSAqLwotCUNPTkZfU0dfV0xBTl9QU19NQVhfQlRfQUNMX1NMQVZFX0VEUiwKLQotCS8qCi0JICogUlggZ3VhcmQgdGltZSBiZWZvcmUgdGhlIGJlZ2lubmluZyBvZiBhIG5ldyBCVCB2b2ljZSBmcmFtZSBkdXJpbmcKLQkgKiB3aGljaCBubyBuZXcgV0xBTiB0cmlnZ2VyIGZyYW1lIGlzIHRyYW5zbWl0dGVkLgotCSAqCi0JICogUmFuZ2U6IDAgLSAxMDAwMDAgKHVzKQotCSAqLwotCUNPTkZfU0dfUlhULAotCi0JLyoKLQkgKiBUWCBndWFyZCB0aW1lIGJlZm9yZSB0aGUgYmVnaW5uaW5nIG9mIGEgbmV3IEJUIHZvaWNlIGZyYW1lIGR1cmluZwotCSAqIHdoaWNoIG5vIG5ldyBXTEFOIGZyYW1lIGlzIHRyYW5zbWl0dGVkLgotCSAqCi0JICogUmFuZ2U6IDAgLSAxMDAwMDAgKHVzKQotCSAqLwotCi0JQ09ORl9TR19UWFQsCi0KLQkvKgotCSAqIEVuYWJsZSBhZGFwdGl2ZSBSWFQvVFhUIGFsZ29yaXRobS4gSWYgZGlzYWJsZWQsIHRoZSBob3N0IHZhbHVlcwotCSAqIHdpbGwgYmUgdXRpbGl6ZWQuCi0JICoKLQkgKiBSYW5nZTogMCAtIGRpc2FibGUsIDEgLSBlbmFibGUKLQkgKi8KLQlDT05GX1NHX0FEQVBUSVZFX1JYVF9UWFQsCi0KLQkvKgotCSAqIFRoZSB1c2VkIFdMQU4gbGVnYWN5IHNlcnZpY2UgcGVyaW9kIGR1cmluZyBhY3RpdmUgQlQgQUNMIGxpbmsKLQkgKgotCSAqIFJhbmdlOiAwIC0gMjU1IChtcykKLQkgKi8KLQlDT05GX1NHX1BTX1BPTExfVElNRU9VVCwKLQotCS8qCi0JICogVGhlIHVzZWQgV0xBTiBVUFNEIHNlcnZpY2UgcGVyaW9kIGR1cmluZyBhY3RpdmUgQlQgQUNMIGxpbmsKLQkgKgotCSAqIFJhbmdlOiAwIC0gMjU1IChtcykKLQkgKi8KLQlDT05GX1NHX1VQU0RfVElNRU9VVCwKLQotCS8qCi0JICogQ29uZmlndXJlIHRoZSBtaW4gYW5kIG1heCB0aW1lIEJUIGdhaW5zIHRoZSBhbnRlbm5hCi0JICogaW4gV0xBTiBBY3RpdmUgLyBCVCBtYXN0ZXIgRURSCi0JICoKLQkgKiBSYW5nZTogMCAtIDI1NSAobXMpCi0JICovCi0JQ09ORl9TR19XTEFOX0FDVElWRV9CVF9BQ0xfTUFTVEVSX01JTl9FRFIsCi0JQ09ORl9TR19XTEFOX0FDVElWRV9CVF9BQ0xfTUFTVEVSX01BWF9FRFIsCi0KLQkvKgotCSAqIFRoZSBtYXhpbXVtIHRpbWUgV0xBTiBjYW4gZ2FpbiB0aGUgYW50ZW5uYSBmb3IKLQkgKiBpbiBXTEFOIEFjdGl2ZSAvIEJUIG1hc3RlciBFRFIKLQkgKgotCSAqIFJhbmdlOiAwIC0gMjU1IChtcykKLQkgKi8KLQlDT05GX1NHX1dMQU5fQUNUSVZFX01BWF9CVF9BQ0xfTUFTVEVSX0VEUiwKLQotCS8qCi0JICogQ29uZmlndXJlIHRoZSBtaW4gYW5kIG1heCB0aW1lIEJUIGdhaW5zIHRoZSBhbnRlbm5hCi0JICogaW4gV0xBTiBBY3RpdmUgLyBCVCBzbGF2ZSBFRFIKLQkgKgotCSAqIFJhbmdlOiAwIC0gMjU1IChtcykKLQkgKi8KLQlDT05GX1NHX1dMQU5fQUNUSVZFX0JUX0FDTF9TTEFWRV9NSU5fRURSLAotCUNPTkZfU0dfV0xBTl9BQ1RJVkVfQlRfQUNMX1NMQVZFX01BWF9FRFIsCi0KLQkvKgotCSAqIFRoZSBtYXhpbXVtIHRpbWUgV0xBTiBjYW4gZ2FpbiB0aGUgYW50ZW5uYSBmb3IKLQkgKiBpbiBXTEFOIEFjdGl2ZSAvIEJUIHNsYXZlIEVEUgotCSAqCi0JICogUmFuZ2U6IDAgLSAyNTUgKG1zKQotCSAqLwotCUNPTkZfU0dfV0xBTl9BQ1RJVkVfTUFYX0JUX0FDTF9TTEFWRV9FRFIsCi0KLQkvKgotCSAqIENvbmZpZ3VyZSB0aGUgbWluIGFuZCBtYXggdGltZSBCVCBnYWlucyB0aGUgYW50ZW5uYQotCSAqIGluIFdMQU4gQWN0aXZlIC8gQlQgYmFzaWMgcmF0ZQotCSAqCi0JICogUmFuZ2U6IDAgLSAyNTUgKG1zKQotCSAqLwotCUNPTkZfU0dfV0xBTl9BQ1RJVkVfQlRfQUNMX01JTl9CUiwKLQlDT05GX1NHX1dMQU5fQUNUSVZFX0JUX0FDTF9NQVhfQlIsCi0KLQkvKgotCSAqIFRoZSBtYXhpbXVtIHRpbWUgV0xBTiBjYW4gZ2FpbiB0aGUgYW50ZW5uYSBmb3IKLQkgKiBpbiBXTEFOIEFjdGl2ZSAvIEJUIGJhc2ljIHJhdGUKLQkgKgotCSAqIFJhbmdlOiAwIC0gMjU1IChtcykKLQkgKi8KLQlDT05GX1NHX1dMQU5fQUNUSVZFX01BWF9CVF9BQ0xfQlIsCi0KLQkvKgotCSAqIENvbXBlbnNhdGlvbiBwZXJjZW50YWdlIG9mIFdMQU4gcGFzc2l2ZSBzY2FuIHdpbmRvdyBpZiBpbml0aWF0ZWQKLQkgKiBkdXJpbmcgQlQgdm9pY2UKLQkgKgotCSAqIFJhbmdlOiAwIC0gMTAwMCAoJSkKLQkgKi8KLQlDT05GX1NHX1BBU1NJVkVfU0NBTl9EVVJBVElPTl9GQUNUT1JfSFYzLAotCi0JLyoKLQkgKiBDb21wZW5zYXRpb24gcGVyY2VudGFnZSBvZiBXTEFOIHBhc3NpdmUgc2NhbiB3aW5kb3cgaWYgaW5pdGlhdGVkCi0JICogZHVyaW5nIEJUIEEyRFAKLQkgKgotCSAqIFJhbmdlOiAwIC0gMTAwMCAoJSkKLQkgKi8KLQlDT05GX1NHX1BBU1NJVkVfU0NBTl9EVVJBVElPTl9GQUNUT1JfQTJEUCwKLQotCS8qCi0JICogRml4ZWQgdGltZSBlbnN1cmVkIGZvciBCVCB0cmFmZmljIHRvIGdhaW4gdGhlIGFudGVubmEgZHVyaW5nIFdMQU4KLQkgKiBwYXNzaXZlIHNjYW4uCi0JICoKLQkgKiBSYW5nZTogMCAtIDEwMDAgbXMKLQkgKi8KLQlDT05GX1NHX1BBU1NJVkVfU0NBTl9BMkRQX0JUX1RJTUUsCi0KLQkvKgotCSAqIEZpeGVkIHRpbWUgZW5zdXJlZCBmb3IgV0xBTiB0cmFmZmljIHRvIGdhaW4gdGhlIGFudGVubmEgZHVyaW5nIFdMQU4KLQkgKiBwYXNzaXZlIHNjYW4uCi0JICoKLQkgKiBSYW5nZTogMCAtIDEwMDAgbXMKLQkgKi8KLQlDT05GX1NHX1BBU1NJVkVfU0NBTl9BMkRQX1dMQU5fVElNRSwKLQotCS8qCi0JICogTnVtYmVyIG9mIGNvbnNlcXVlbnQgQlQgdm9pY2UgZnJhbWVzIG5vdCBpbnRlcnJ1cHRlZCBieSBXTEFOCi0JICoKLQkgKiBSYW5nZTogMCAtIDEwMAotCSAqLwotCUNPTkZfU0dfSFYzX01BWF9TRVJWRUQsCi0KLQkvKgotCSAqIFByb3RlY3Rpb24gdGltZSBvZiB0aGUgREhDUCBwcm9jZWR1cmUuCi0JICoKLQkgKiBSYW5nZTogMCAtIDEwMDAwMCAobXMpCi0JICovCi0JQ09ORl9TR19ESENQX1RJTUUsCi0KLQkvKgotCSAqIENvbXBlbnNhdGlvbiBwZXJjZW50YWdlIG9mIFdMQU4gYWN0aXZlIHNjYW4gd2luZG93IGlmIGluaXRpYXRlZAotCSAqIGR1cmluZyBCVCBBMkRQCi0JICoKLQkgKiBSYW5nZTogMCAtIDEwMDAgKCUpCi0JICovCi0JQ09ORl9TR19BQ1RJVkVfU0NBTl9EVVJBVElPTl9GQUNUT1JfQTJEUCwKLQlDT05GX1NHX1RFTVBfUEFSQU1fMSwKLQlDT05GX1NHX1RFTVBfUEFSQU1fMiwKLQlDT05GX1NHX1RFTVBfUEFSQU1fMywKLQlDT05GX1NHX1RFTVBfUEFSQU1fNCwKLQlDT05GX1NHX1RFTVBfUEFSQU1fNSwKLQlDT05GX1NHX1BBUkFNU19NQVgsCi0JQ09ORl9TR19QQVJBTVNfQUxMID0gMHhmZgotfTsKLQotc3RydWN0IGNvbmZfc2dfc2V0dGluZ3MgewotCXUzMiBwYXJhbXNbQ09ORl9TR19QQVJBTVNfTUFYXTsKLQl1OCBzdGF0ZTsKLX07Ci0KLWVudW0gY29uZl9yeF9xdWV1ZV90eXBlIHsKLQlDT05GX1JYX1FVRVVFX1RZUEVfTE9XX1BSSU9SSVRZLCAgLyogQWxsIGV4Y2VwdCB0aGUgaGlnaCBwcmlvcml0eSAqLwotCUNPTkZfUlhfUVVFVUVfVFlQRV9ISUdIX1BSSU9SSVRZLCAvKiBNYW5hZ2VtZW50IGFuZCB2b2ljZSBwYWNrZXRzICovCi19OwotCi1zdHJ1Y3QgY29uZl9yeF9zZXR0aW5ncyB7Ci0JLyoKLQkgKiBUaGUgbWF4aW11bSBhbW91bnQgb2YgdGltZSwgaW4gVFUsIGJlZm9yZSB0aGUKLQkgKiBmaXJtd2FyZSBkaXNjYXJkcyB0aGUgTVNEVS4KLQkgKgotCSAqIFJhbmdlOiAwIC0gMHhGRkZGRkZGRgotCSAqLwotCXUzMiByeF9tc2R1X2xpZmVfdGltZTsKLQotCS8qCi0JICogUGFja2V0IGRldGVjdGlvbiB0aHJlc2hvbGQgaW4gdGhlIFBIWS4KLQkgKgotCSAqIEZJWE1FOiBkZXRhaWxzIHVua25vd24uCi0JICovCi0JdTMyIHBhY2tldF9kZXRlY3Rpb25fdGhyZXNob2xkOwotCi0JLyoKLQkgKiBUaGUgbG9uZ2VzdCB0aW1lIHRoZSBTVEEgd2lsbCB3YWl0IHRvIHJlY2VpdmUgdHJhZmZpYyBmcm9tIHRoZSBBUAotCSAqIGFmdGVyIGEgUFMtcG9sbCBoYXMgYmVlbiB0cmFuc21pdHRlZC4KLQkgKgotCSAqIFJhbmdlOiAwIC0gMjAwMDAwCi0JICovCi0JdTE2IHBzX3BvbGxfdGltZW91dDsKLQkvKgotCSAqIFRoZSBsb25nZXN0IHRpbWUgdGhlIFNUQSB3aWxsIHdhaXQgdG8gcmVjZWl2ZSB0cmFmZmljIGZyb20gdGhlIEFQCi0JICogYWZ0ZXIgYSBmcmFtZSBoYXMgYmVlbiBzZW50IGZyb20gYW4gVVBTRCBlbmFibGVkIHF1ZXVlLgotCSAqCi0JICogUmFuZ2U6IDAgLSAyMDAwMDAKLQkgKi8KLQl1MTYgdXBzZF90aW1lb3V0OwotCi0JLyoKLQkgKiBUaGUgbnVtYmVyIG9mIG9jdGV0cyBpbiBhbiBNUERVLCBiZWxvdyB3aGljaCBhbiBSVFMvQ1RTCi0JICogaGFuZHNoYWtlIGlzIG5vdCBwZXJmb3JtZWQuCi0JICoKLQkgKiBSYW5nZTogMCAtIDQwOTYKLQkgKi8KLQl1MTYgcnRzX3RocmVzaG9sZDsKLQotCS8qCi0JICogVGhlIFJYIENsZWFyIENoYW5uZWwgQXNzZXNzbWVudCB0aHJlc2hvbGQgaW4gdGhlIFBIWQotCSAqICh0aGUgZW5lcmd5IHRocmVzaG9sZCkuCi0JICoKLQkgKiBSYW5nZTogRU5BQkxFX0VORVJHWV9EICA9PSAweDE0MEEKLQkgKiAgICAgICAgRElTQUJMRV9FTkVSR1lfRCA9PSAweEZGRUYKLQkgKi8KLQl1MTYgcnhfY2NhX3RocmVzaG9sZDsKLQotCS8qCi0JICogT2NjdXBpZWQgUnggbWVtLWJsb2NrcyBudW1iZXIgd2hpY2ggcmVxdWlyZXMgaW50ZXJydXB0aW5nIHRoZSBob3N0Ci0JICogKDAgPSBubyBidWZmZXJpbmcsIDB4ZmZmZiA9IGRpc2FibGVkKS4KLQkgKgotCSAqIFJhbmdlOiB1MTYKLQkgKi8KLQl1MTYgaXJxX2Jsa190aHJlc2hvbGQ7Ci0KLQkvKgotCSAqIFJ4IHBhY2tldHMgbnVtYmVyIHdoaWNoIHJlcXVpcmVzIGludGVycnVwdGluZyB0aGUgaG9zdAotCSAqICgwID0gbm8gYnVmZmVyaW5nKS4KLQkgKgotCSAqIFJhbmdlOiB1MTYKLQkgKi8KLQl1MTYgaXJxX3BrdF90aHJlc2hvbGQ7Ci0KLQkvKgotCSAqIE1heCB0aW1lIGluIG1zZWMgdGhlIEZXIG1heSBkZWxheSBSWC1Db21wbGV0ZSBpbnRlcnJ1cHQuCi0JICoKLQkgKiBSYW5nZTogMSAtIDEwMAotCSAqLwotCXUxNiBpcnFfdGltZW91dDsKLQotCS8qCi0JICogVGhlIFJYIHF1ZXVlIHR5cGUuCi0JICoKLQkgKiBSYW5nZTogUlhfUVVFVUVfVFlQRV9SWF9MT1dfUFJJT1JJVFksIFJYX1FVRVVFX1RZUEVfUlhfSElHSF9QUklPUklUWSwKLQkgKi8KLQl1OCBxdWV1ZV90eXBlOwotfTsKLQotI2RlZmluZSBDT05GX1RYX01BWF9SQVRFX0NMQVNTRVMgICAgICAgOAotCi0jZGVmaW5lIENPTkZfVFhfUkFURV9NQVNLX1VOU1BFQ0lGSUVEICAwCi0jZGVmaW5lIENPTkZfVFhfUkFURV9NQVNLX0JBU0lDICAgICAgICAoQ09ORl9IV19CSVRfUkFURV8xTUJQUyB8IFwKLQkJCQkJQ09ORl9IV19CSVRfUkFURV8yTUJQUykKLSNkZWZpbmUgQ09ORl9UWF9SQVRFX1JFVFJZX0xJTUlUICAgICAgIDEwCi0KLXN0cnVjdCBjb25mX3R4X3JhdGVfY2xhc3MgewotCi0JLyoKLQkgKiBUaGUgcmF0ZXMgZW5hYmxlZCBmb3IgdGhpcyByYXRlIGNsYXNzLgotCSAqCi0JICogUmFuZ2U6IENPTkZfSFdfQklUX1JBVEVfKiBiaXQgbWFzawotCSAqLwotCXUzMiBlbmFibGVkX3JhdGVzOwotCi0JLyoKLQkgKiBUaGUgZG90MTEgc2hvcnQgcmV0cnkgbGltaXQgdXNlZCBmb3IgVFggcmV0cmllcy4KLQkgKgotCSAqIFJhbmdlOiB1OAotCSAqLwotCXU4IHNob3J0X3JldHJ5X2xpbWl0OwotCi0JLyoKLQkgKiBUaGUgZG90MTEgbG9uZyByZXRyeSBsaW1pdCB1c2VkIGZvciBUWCByZXRyaWVzLgotCSAqCi0JICogUmFuZ2U6IHU4Ci0JICovCi0JdTggbG9uZ19yZXRyeV9saW1pdDsKLQotCS8qCi0JICogRmxhZ3MgY29udHJvbGxpbmcgdGhlIGF0dHJpYnV0ZXMgb2YgVFggdHJhbnNtaXNzaW9uLgotCSAqCi0JICogUmFuZ2U6IGJpdCAwOiBUcnVuY2F0ZSAtIHdoZW4gc2V0LCBGVyBhdHRlbXB0cyB0byBzZW5kIGEgZnJhbWUgc3RvcAotCSAqICAgICAgICAgICAgICAgd2hlbiB0aGUgdG90YWwgdmFsaWQgcGVyLXJhdGUgYXR0ZW1wdHMgaGF2ZQotCSAqICAgICAgICAgICAgICAgYmVlbiBleGhhdXN0ZWQ7IG90aGVyd2lzZSB0cmFuc21pc3Npb25zCi0JICogICAgICAgICAgICAgICB3aWxsIGNvbnRpbnVlIGF0IHRoZSBsb3dlc3QgYXZhaWxhYmxlIHJhdGUKLQkgKiAgICAgICAgICAgICAgIHVudGlsIHRoZSBhcHByb3ByaWF0ZSBvbmUgb2YgdGhlCi0JICogICAgICAgICAgICAgICBzaG9ydF9yZXRyeV9saW1pdCwgbG9uZ19yZXRyeV9saW1pdCwKLQkgKiAgICAgICAgICAgICAgIGRvdDExX21heF90cmFuc21pdF9tc2R1X2xpZmVfdGltZSwgb3IKLQkgKiAgICAgICAgICAgICAgIG1heF90eF9saWZlX3RpbWUsIGlzIGV4aGF1c3RlZC4KLQkgKiAgICAgICAgICAgIDE6IFByZWFtYmxlIE92ZXJyaWRlIC0gaW5kaWNhdGVzIGlmIHRoZSBwcmVhbWJsZSB0eXBlCi0JICogICAgICAgICAgICAgICBzaG91bGQgYmUgdXNlZCBpbiBUWC4KLQkgKiAgICAgICAgICAgIDI6IFByZWFtYmxlIFR5cGUgLSB0aGUgdHlwZSBvZiB0aGUgcHJlYW1ibGUgdG8gYmUgdXNlZCBieQotCSAqICAgICAgICAgICAgICAgdGhlIHBvbGljeSAoMCAtIGxvbmcgcHJlYW1ibGUsIDEgLSBzaG9ydCBwcmVhbWJsZS4KLQkgKi8KLQl1OCBhZmxhZ3M7Ci19OwotCi0jZGVmaW5lIENPTkZfVFhfTUFYX0FDX0NPVU5UIDQKLQotLyogU2xvdCBudW1iZXIgc2V0dGluZyB0byBzdGFydCB0cmFuc21pc3Npb24gYXQgUElGUyBpbnRlcnZhbCAqLwotI2RlZmluZSBDT05GX1RYX0FJRlNfUElGUyAxCi0vKiBTbG90IG51bWJlciBzZXR0aW5nIHRvIHN0YXJ0IHRyYW5zbWlzc2lvbiBhdCBESUZTIGludGVydmFsIG5vcm1hbAotICogRENGIGFjY2VzcyAqLwotI2RlZmluZSBDT05GX1RYX0FJRlNfRElGUyAyCi0KLQotZW51bSBjb25mX3R4X2FjIHsKLQlDT05GX1RYX0FDX0JFID0gMCwgICAgICAgICAvKiBiZXN0IGVmZm9ydCAvIGxlZ2FjeSAqLwotCUNPTkZfVFhfQUNfQksgPSAxLCAgICAgICAgIC8qIGJhY2tncm91bmQgKi8KLQlDT05GX1RYX0FDX1ZJID0gMiwgICAgICAgICAvKiB2aWRlbyAqLwotCUNPTkZfVFhfQUNfVk8gPSAzLCAgICAgICAgIC8qIHZvaWNlICovCi0JQ09ORl9UWF9BQ19DVFMyU0VMRiA9IDQsICAgLyogZmljdGlvdXMgQUMsIGZvbGxvd3MgQUNfVk8gKi8KLQlDT05GX1RYX0FDX0FOWV9USUQgPSAweDFmCi19OwotCi1zdHJ1Y3QgY29uZl90eF9hY19jYXRlZ29yeSB7Ci0JLyoKLQkgKiBUaGUgQUMgY2xhc3MgaWRlbnRpZmllci4KLQkgKgotCSAqIFJhbmdlOiBlbnVtIGNvbmZfdHhfYWMKLQkgKi8KLQl1OCBhYzsKLQotCS8qCi0JICogVGhlIGNvbnRlbnRpb24gd2luZG93IG1pbmltdW0gc2l6ZSAoaW4gc2xvdHMpIGZvciB0aGUgYWNjZXNzCi0JICogY2xhc3MuCi0JICoKLQkgKiBSYW5nZTogdTgKLQkgKi8KLQl1OCBjd19taW47Ci0KLQkvKgotCSAqIFRoZSBjb250ZW50aW9uIHdpbmRvdyBtYXhpbXVtIHNpemUgKGluIHNsb3RzKSBmb3IgdGhlIGFjY2VzcwotCSAqIGNsYXNzLgotCSAqCi0JICogUmFuZ2U6IHU4Ci0JICovCi0JdTE2IGN3X21heDsKLQotCS8qCi0JICogVGhlIEFJRiB2YWx1ZSAoaW4gc2xvdHMpIGZvciB0aGUgYWNjZXNzIGNsYXNzLgotCSAqCi0JICogUmFuZ2U6IHU4Ci0JICovCi0JdTggYWlmc247Ci0KLQkvKgotCSAqIFRoZSBUWCBPcCBMaW1pdCAoaW4gbWljcm9zZWNvbmRzKSBmb3IgdGhlIGFjY2VzcyBjbGFzcy4KLQkgKgotCSAqIFJhbmdlOiB1MTYKLQkgKi8KLQl1MTYgdHhfb3BfbGltaXQ7Ci19OwotCi0jZGVmaW5lIENPTkZfVFhfTUFYX1RJRF9DT1VOVCA4Ci0KLWVudW0gewotCUNPTkZfQ0hBTk5FTF9UWVBFX0RDRiA9IDAsICAgLyogREMvTEVHQUNZKi8KLQlDT05GX0NIQU5ORUxfVFlQRV9FRENGID0gMSwgIC8qIEVEQ0EqLwotCUNPTkZfQ0hBTk5FTF9UWVBFX0hDQ0EgPSAyLCAgLyogSENDQSovCi19OwotCi1lbnVtIHsKLQlDT05GX1BTX1NDSEVNRV9MRUdBQ1kgPSAwLAotCUNPTkZfUFNfU0NIRU1FX1VQU0RfVFJJR0dFUiA9IDEsCi0JQ09ORl9QU19TQ0hFTUVfTEVHQUNZX1BTUE9MTCA9IDIsCi0JQ09ORl9QU19TQ0hFTUVfU0FQU0QgPSAzLAotfTsKLQotZW51bSB7Ci0JQ09ORl9BQ0tfUE9MSUNZX0xFR0FDWSA9IDAsCi0JQ09ORl9BQ0tfUE9MSUNZX05PX0FDSyA9IDEsCi0JQ09ORl9BQ0tfUE9MSUNZX0JMT0NLID0gMiwKLX07Ci0KLQotc3RydWN0IGNvbmZfdHhfdGlkIHsKLQl1OCBxdWV1ZV9pZDsKLQl1OCBjaGFubmVsX3R5cGU7Ci0JdTggdHNpZDsKLQl1OCBwc19zY2hlbWU7Ci0JdTggYWNrX3BvbGljeTsKLQl1MzIgYXBzZF9jb25mWzJdOwotfTsKLQotc3RydWN0IGNvbmZfdHhfc2V0dGluZ3MgewotCS8qCi0JICogVGhlIFRYIEVEIHZhbHVlIGZvciBURUxFQyBFbmFibGUvRGlzYWJsZS4KLQkgKgotCSAqIFJhbmdlOiAwLCAxCi0JICovCi0JdTggdHhfZW5lcmd5X2RldGVjdGlvbjsKLQotCS8qCi0JICogQ29uZmlndXJhdGlvbiBmb3IgcmF0ZSBjbGFzc2VzIGZvciBUWCAoY3VycmVudGx5IG9ubHkgb25lCi0JICogcmF0ZSBjbGFzcyBzdXBwb3J0ZWQuKQotCSAqLwotCXN0cnVjdCBjb25mX3R4X3JhdGVfY2xhc3MgcmNfY29uZjsKLQotCS8qCi0JICogQ29uZmlndXJhdGlvbiBmb3IgYWNjZXNzIGNhdGVnb3JpZXMgZm9yIFRYIHJhdGUgY29udHJvbC4KLQkgKi8KLQl1OCBhY19jb25mX2NvdW50OwotCXN0cnVjdCBjb25mX3R4X2FjX2NhdGVnb3J5IGFjX2NvbmZbQ09ORl9UWF9NQVhfQUNfQ09VTlRdOwotCi0JLyoKLQkgKiBDb25maWd1cmF0aW9uIGZvciBUSUQgcGFyYW1ldGVycy4KLQkgKi8KLQl1OCB0aWRfY29uZl9jb3VudDsKLQlzdHJ1Y3QgY29uZl90eF90aWQgdGlkX2NvbmZbQ09ORl9UWF9NQVhfVElEX0NPVU5UXTsKLQotCS8qCi0JICogVGhlIFRYIGZyYWdtZW50YXRpb24gdGhyZXNob2xkLgotCSAqCi0JICogUmFuZ2U6IHUxNgotCSAqLwotCXUxNiBmcmFnX3RocmVzaG9sZDsKLQotCS8qCi0JICogTWF4IHRpbWUgaW4gbXNlYyB0aGUgRlcgbWF5IGRlbGF5IGZyYW1lIFRYLUNvbXBsZXRlIGludGVycnVwdC4KLQkgKgotCSAqIFJhbmdlOiB1MTYKLQkgKi8KLQl1MTYgdHhfY29tcGxfdGltZW91dDsKLQotCS8qCi0JICogQ29tcGxldGVkIFRYIHBhY2tldCBjb3VudCB3aGljaCByZXF1aXJlcyB0byBpc3N1ZSB0aGUgVFgtQ29tcGxldGUKLQkgKiBpbnRlcnJ1cHQuCi0JICoKLQkgKiBSYW5nZTogdTE2Ci0JICovCi0JdTE2IHR4X2NvbXBsX3RocmVzaG9sZDsKLQotCS8qCi0JICogVGhlIHJhdGUgdXNlZCBmb3IgY29udHJvbCBtZXNzYWdlcyBhbmQgc2Nhbm5pbmcgb24gdGhlIDIuNEdIeiBiYW5kCi0JICoKLQkgKiBSYW5nZTogQ09ORl9IV19CSVRfUkFURV8qIGJpdCBtYXNrCi0JICovCi0JdTMyIGJhc2ljX3JhdGU7Ci0KLQkvKgotCSAqIFRoZSByYXRlIHVzZWQgZm9yIGNvbnRyb2wgbWVzc2FnZXMgYW5kIHNjYW5uaW5nIG9uIHRoZSA1R0h6IGJhbmQKLQkgKgotCSAqIFJhbmdlOiBDT05GX0hXX0JJVF9SQVRFXyogYml0IG1hc2sKLQkgKi8KLQl1MzIgYmFzaWNfcmF0ZV81OwotfTsKLQotZW51bSB7Ci0JQ09ORl9XQUtFX1VQX0VWRU5UX0JFQUNPTiAgICA9IDB4MDEsIC8qIFdha2Ugb24gZXZlcnkgQmVhY29uKi8KLQlDT05GX1dBS0VfVVBfRVZFTlRfRFRJTSAgICAgID0gMHgwMiwgLyogV2FrZSBvbiBldmVyeSBEVElNKi8KLQlDT05GX1dBS0VfVVBfRVZFTlRfTl9EVElNICAgID0gMHgwNCwgLyogV2FrZSBldmVyeSBOdGggRFRJTSAqLwotCUNPTkZfV0FLRV9VUF9FVkVOVF9OX0JFQUNPTlMgPSAweDA4LCAvKiBXYWtlIGV2ZXJ5IE50aCBiZWFjb24gKi8KLQlDT05GX1dBS0VfVVBfRVZFTlRfQklUU19NQVNLID0gMHgwRgotfTsKLQotI2RlZmluZSBDT05GX01BWF9CQ05fRklMVF9JRV9DT1VOVCAzMgotCi0jZGVmaW5lIENPTkZfQkNOX1JVTEVfUEFTU19PTl9DSEFOR0UgICAgICAgICBCSVQoMCkKLSNkZWZpbmUgQ09ORl9CQ05fUlVMRV9QQVNTX09OX0FQUEVBUkFOQ0UgICAgIEJJVCgxKQotCi0jZGVmaW5lIENPTkZfQkNOX0lFX09VSV9MRU4gICAgMwotI2RlZmluZSBDT05GX0JDTl9JRV9WRVJfTEVOICAgIDIKLQotc3RydWN0IGNvbmZfYmNuX2ZpbHRfcnVsZSB7Ci0JLyoKLQkgKiBJRSBudW1iZXIgdG8gd2hpY2ggdG8gYXNzb2NpYXRlIGEgcnVsZS4KLQkgKgotCSAqIFJhbmdlOiB1OAotCSAqLwotCXU4IGllOwotCi0JLyoKLQkgKiBSdWxlIHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBzcGVjaWZpYyBpZS4KLQkgKgotCSAqIFJhbmdlOiBDT05GX0JDTl9SVUxFX1BBU1NfT05fKgotCSAqLwotCXU4IHJ1bGU7Ci0KLQkvKgotCSAqIE9VSSBmb3IgdGhlIHZlbmRvciBzcGVjaWZpZSBJRSAoMjIxKQotCSAqLwotCXU4IG91aVtDT05GX0JDTl9JRV9PVUlfTEVOXTsKLQotCS8qCi0JICogVHlwZSBmb3IgdGhlIHZlbmRvciBzcGVjaWZpZSBJRSAoMjIxKQotCSAqLwotCXU4IHR5cGU7Ci0KLQkvKgotCSAqIFZlcnNpb24gZm9yIHRoZSB2ZW5kb3Igc3BlY2lmaWUgSUUgKDIyMSkKLQkgKi8KLQl1OCB2ZXJzaW9uW0NPTkZfQkNOX0lFX1ZFUl9MRU5dOwotfTsKLQotI2RlZmluZSBDT05GX01BWF9SU1NJX1NOUl9UUklHR0VSUyA4Ci0KLWVudW0gewotCUNPTkZfVFJJR19NRVRSSUNfUlNTSV9CRUFDT04gPSAwLAotCUNPTkZfVFJJR19NRVRSSUNfUlNTSV9EQVRBLAotCUNPTkZfVFJJR19NRVRSSUNfU05SX0JFQUNPTiwKLQlDT05GX1RSSUdfTUVUUklDX1NOUl9EQVRBCi19OwotCi1lbnVtIHsKLQlDT05GX1RSSUdfRVZFTlRfVFlQRV9MRVZFTCA9IDAsCi0JQ09ORl9UUklHX0VWRU5UX1RZUEVfRURHRQotfTsKLQotZW51bSB7Ci0JQ09ORl9UUklHX0VWRU5UX0RJUl9MT1cgPSAwLAotCUNPTkZfVFJJR19FVkVOVF9ESVJfSElHSCwKLQlDT05GX1RSSUdfRVZFTlRfRElSX0JJRElSCi19OwotCi1zdHJ1Y3QgY29uZl9zaWdfd2VpZ2h0cyB7Ci0KLQkvKgotCSAqIFJTU0kgZnJvbSBiZWFjb25zIGF2ZXJhZ2Ugd2VpZ2h0LgotCSAqCi0JICogUmFuZ2U6IHU4Ci0JICovCi0JdTggcnNzaV9iY25fYXZnX3dlaWdodDsKLQotCS8qCi0JICogUlNTSSBmcm9tIGRhdGEgYXZlcmFnZSB3ZWlnaHQuCi0JICoKLQkgKiBSYW5nZTogdTgKLQkgKi8KLQl1OCByc3NpX3BrdF9hdmdfd2VpZ2h0OwotCi0JLyoKLQkgKiBTTlIgZnJvbSBiZWFjb25zIGF2ZXJhZ2Ugd2VpZ2h0LgotCSAqCi0JICogUmFuZ2U6IHU4Ci0JICovCi0JdTggc25yX2Jjbl9hdmdfd2VpZ2h0OwotCi0JLyoKLQkgKiBTTlIgZnJvbSBkYXRhIGF2ZXJhZ2Ugd2VpZ2h0LgotCSAqCi0JICogUmFuZ2U6IHU4Ci0JICovCi0JdTggc25yX3BrdF9hdmdfd2VpZ2h0OwotfTsKLQotZW51bSBjb25mX2Jjbl9maWx0X21vZGUgewotCUNPTkZfQkNOX0ZJTFRfTU9ERV9ESVNBQkxFRCA9IDAsCi0JQ09ORl9CQ05fRklMVF9NT0RFX0VOQUJMRUQgPSAxCi19OwotCi1lbnVtIGNvbmZfYmV0X21vZGUgewotCUNPTkZfQkVUX01PREVfRElTQUJMRSA9IDAsCi0JQ09ORl9CRVRfTU9ERV9FTkFCTEUgPSAxLAotfTsKLQotc3RydWN0IGNvbmZfY29ubl9zZXR0aW5ncyB7Ci0JLyoKLQkgKiBGaXJtd2FyZSB3YWtldXAgY29uZGl0aW9ucyBjb25maWd1cmF0aW9uLiBUaGUgaG9zdCBtYXkgc2V0IG9ubHkKLQkgKiBvbmUgYml0LgotCSAqCi0JICogUmFuZ2U6IENPTkZfV0FLRV9VUF9FVkVOVF8qCi0JICovCi0JdTggd2FrZV91cF9ldmVudDsKLQotCS8qCi0JICogTGlzdGVuIGludGVydmFsIGZvciBiZWFjb25zIG9yIER0aW1zLgotCSAqCi0JICogUmFuZ2U6IDAgZm9yIGJlYWNvbiBhbmQgRHRpbSB3YWtldXAKLQkgKiAgICAgICAgMS0xMCBmb3IgeCBEdGltcwotCSAqICAgICAgICAxLTI1NSBmb3IgeCBiZWFjb25zCi0JICovCi0JdTggbGlzdGVuX2ludGVydmFsOwotCi0JLyoKLQkgKiBFbmFibGUgb3IgZGlzYWJsZSB0aGUgYmVhY29uIGZpbHRlcmluZy4KLQkgKgotCSAqIFJhbmdlOiBDT05GX0JDTl9GSUxUX01PREVfKgotCSAqLwotCWVudW0gY29uZl9iY25fZmlsdF9tb2RlIGJjbl9maWx0X21vZGU7Ci0KLQkvKgotCSAqIENvbmZpZ3VyZSBCZWFjb24gZmlsdGVyIHBhc3MtdGhydSBydWxlcy4KLQkgKi8KLQl1OCBiY25fZmlsdF9pZV9jb3VudDsKLQlzdHJ1Y3QgY29uZl9iY25fZmlsdF9ydWxlIGJjbl9maWx0X2llW0NPTkZfTUFYX0JDTl9GSUxUX0lFX0NPVU5UXTsKLQotCS8qCi0JICogVGhlIG51bWJlciBvZiBjb25zZXF1dGl2ZSBiZWFjb25zIHRvIGxvc2UsIGJlZm9yZSB0aGUgZmlybXdhcmUKLQkgKiBiZWNvbWVzIG91dCBvZiBzeW5jaC4KLQkgKgotCSAqIFJhbmdlOiB1MzIKLQkgKi8KLQl1MzIgc3luY2hfZmFpbF90aG9sZDsKLQotCS8qCi0JICogQWZ0ZXIgb3V0LW9mLXN5bmNoLCB0aGUgbnVtYmVyIG9mIFRVJ3MgdG8gd2FpdCB3aXRob3V0IGEgZnVydGhlcgotCSAqIHJlY2VpdmVkIGJlYWNvbiAob3IgcHJvYmUgcmVzcG9uc2UpIGJlZm9yZSBpc3N1aW5nIHRoZSBCU1NfRVZFTlRfTE9TRQotCSAqIGV2ZW50LgotCSAqCi0JICogUmFuZ2U6IHUzMgotCSAqLwotCXUzMiBic3NfbG9zZV90aW1lb3V0OwotCi0JLyoKLQkgKiBCZWFjb24gcmVjZWl2ZSB0aW1lb3V0LgotCSAqCi0JICogUmFuZ2U6IHUzMgotCSAqLwotCXUzMiBiZWFjb25fcnhfdGltZW91dDsKLQotCS8qCi0JICogQnJvYWRjYXN0IHJlY2VpdmUgdGltZW91dC4KLQkgKgotCSAqIFJhbmdlOiB1MzIKLQkgKi8KLQl1MzIgYnJvYWRjYXN0X3RpbWVvdXQ7Ci0KLQkvKgotCSAqIEVuYWJsZS9kaXNhYmxlIHJlY2VwdGlvbiBvZiBicm9hZGNhc3QgcGFja2V0cyBpbiBwb3dlciBzYXZlIG1vZGUKLQkgKgotCSAqIFJhbmdlOiAxIC0gZW5hYmxlLCAwIC0gZGlzYWJsZQotCSAqLwotCXU4IHJ4X2Jyb2FkY2FzdF9pbl9wczsKLQotCS8qCi0JICogQ29uc2VxdXRpdmUgUFMgUG9sbCBmYWlsdXJlcyBiZWZvcmUgc2VuZGluZyBldmVudCB0byBkcml2ZXIKLQkgKgotCSAqIFJhbmdlOiB1OAotCSAqLwotCXU4IHBzX3BvbGxfdGhyZXNob2xkOwotCi0JLyoKLQkgKiBQUyBQb2xsIGZhaWx1cmUgcmVjb3ZlcnkgQUNUSVZFIHBlcmlvZCBsZW5ndGgKLQkgKgotCSAqIFJhbmdlOiB1MzIgKG1zKQotCSAqLwotCXUzMiBwc19wb2xsX3JlY292ZXJ5X3BlcmlvZDsKLQotCS8qCi0JICogQ29uZmlndXJhdGlvbiBvZiBzaWduYWwgYXZlcmFnZSB3ZWlnaHRzLgotCSAqLwotCXN0cnVjdCBjb25mX3NpZ193ZWlnaHRzIHNpZ193ZWlnaHRzOwotCi0JLyoKLQkgKiBTcGVjaWZpZXMgaWYgYmVhY29uIGVhcmx5IHRlcm1pbmF0aW9uIHByb2NlZHVyZSBpcyBlbmFibGVkIG9yCi0JICogZGlzYWJsZWQuCi0JICoKLQkgKiBSYW5nZTogQ09ORl9CRVRfTU9ERV8qCi0JICovCi0JdTggYmV0X2VuYWJsZTsKLQotCS8qCi0JICogU3BlY2lmaWVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjb25zZWN1dGl2ZSBiZWFjb25zIHRoYXQgbWF5IGJlCi0JICogZWFybHkgdGVybWluYXRlZC4gQWZ0ZXIgdGhpcyBudW1iZXIgaXMgcmVhY2hlZCBhdCBsZWFzdCBvbmUgZnVsbAotCSAqIGJlYWNvbiBtdXN0IGJlIGNvcnJlY3RseSByZWNlaXZlZCBpbiBGVyBiZWZvcmUgYmVhY29uIEVUCi0JICogcmVzdW1lcy4KLQkgKgotCSAqIFJhbmdlIDAgLSAyNTUKLQkgKi8KLQl1OCBiZXRfbWF4X2NvbnNlY3V0aXZlOwotCi0JLyoKLQkgKiBTcGVjaWZpZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHRpbWVzIHRvIHRyeSBQU00gZW50cnkgaWYgaXQgZmFpbHMKLQkgKiAoaWYgc2VuZGluZyB0aGUgYXBwcm9wcmlhdGUgbnVsbC1mdW5jIG1lc3NhZ2UgZmFpbHMuKQotCSAqCi0JICogUmFuZ2UgMCAtIDI1NQotCSAqLwotCXU4IHBzbV9lbnRyeV9yZXRyaWVzOwotCi0JLyoKLQkgKiBTcGVjaWZpZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHRpbWVzIHRvIHRyeSB0cmFuc21pdCB0aGUgUFNNIGVudHJ5Ci0JICogbnVsbC1mdW5jIGZyYW1lIGZvciBlYWNoIFBTTSBlbnRyeSBhdHRlbXB0Ci0JICoKLQkgKiBSYW5nZSAwIC0gMjU1Ci0JICovCi0JdTggcHNtX2VudHJ5X251bGxmdW5jX3JldHJpZXM7Ci0KLQkvKgotCSAqIFNwZWNpZmllcyB0aGUgdGltZSB0byBsaW5nZXIgaW4gYWN0aXZlIG1vZGUgYWZ0ZXIgc3VjY2Vzc2Z1bGx5Ci0JICogdHJhbnNtaXR0aW5nIHRoZSBQU00gZW50cnkgbnVsbC1mdW5jIGZyYW1lLgotCSAqCi0JICogUmFuZ2UgMCAtIDI1NSBUVSdzCi0JICovCi0JdTggcHNtX2VudHJ5X2hhbmdvdmVyX3BlcmlvZDsKLQotCS8qCi0JICoKLQkgKiBTcGVjaWZpZXMgdGhlIGludGVydmFsIG9mIHRoZSBjb25uZWN0aW9uIGtlZXAtYWxpdmUgbnVsbC1mdW5jCi0JICogZnJhbWUgaW4gbXMuCi0JICoKLQkgKiBSYW5nZTogMTAwMCAtIDM2MDAwMDAKLQkgKi8KLQl1MzIga2VlcF9hbGl2ZV9pbnRlcnZhbDsKLQotCS8qCi0JICogTWF4aW11bSBsaXN0ZW4gaW50ZXJ2YWwgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgaW4gdW5pdHMgb2YgYmVhY29ucy4KLQkgKgotCSAqIFJhbmdlOiB1MTYKLQkgKi8KLQl1OCBtYXhfbGlzdGVuX2ludGVydmFsOwotfTsKLQotZW51bSB7Ci0JQ09ORl9SRUZfQ0xLXzE5XzJfRSwKLQlDT05GX1JFRl9DTEtfMjZfRSwKLQlDT05GX1JFRl9DTEtfMzhfNF9FLAotCUNPTkZfUkVGX0NMS181Ml9FCi19OwotCi1lbnVtIHNpbmdsZV9kdWFsX2JhbmRfZW51bSB7Ci0JQ09ORl9TSU5HTEVfQkFORCwKLQlDT05GX0RVQUxfQkFORAotfTsKLQotI2RlZmluZSBDT05GX1JTU0lfQU5EX1BST0NFU1NfQ09NUEVOU0FUSU9OX1NJWkUgMTUKLSNkZWZpbmUgQ09ORl9OVU1CRVJfT0ZfU1VCX0JBTkRTXzUgIDcKLSNkZWZpbmUgQ09ORl9OVU1CRVJfT0ZfUkFURV9HUk9VUFMgIDYKLSNkZWZpbmUgQ09ORl9OVU1CRVJfT0ZfQ0hBTk5FTFNfMl80IDE0Ci0jZGVmaW5lIENPTkZfTlVNQkVSX09GX0NIQU5ORUxTXzUgICAzNQotCi1zdHJ1Y3QgY29uZl9yYWRpb19wYXJtcyB7Ci0JLyoKLQkgKiBGRU0gcGFyYW1ldGVyIHNldCB0byB1c2UKLQkgKgotCSAqIFJhbmdlOiAwIG9yIDEKLQkgKi8KLQl1OCBmZW07Ci19OwotCi1zdHJ1Y3QgY29uZl9pdHJpbV9zZXR0aW5ncyB7Ci0JLyogZW5hYmxlIGRjbyBpdHJpbSAqLwotCXU4IGVuYWJsZTsKLQotCS8qIG1vZGVyYXRpb24gdGltZW91dCBpbiBtaWNyb3NlY3MgZnJvbSB0aGUgbGFzdCBUWCAqLwotCXUzMiB0aW1lb3V0OwotfTsKLQotc3RydWN0IGNvbmZfcG1fY29uZmlnX3NldHRpbmdzIHsKLQkvKgotCSAqIEhvc3QgY2xvY2sgc2V0dGxpbmcgdGltZQotCSAqCi0JICogUmFuZ2U6IDAgLSAzMDAwMCB1cwotCSAqLwotCXUzMiBob3N0X2Nsa19zZXR0bGluZ190aW1lOwotCi0JLyoKLQkgKiBIb3N0IGZhc3Qgd2FrZXVwIHN1cHBvcnQKLQkgKgotCSAqIFJhbmdlOiB0cnVlLCBmYWxzZQotCSAqLwotCWJvb2wgaG9zdF9mYXN0X3dha2V1cF9zdXBwb3J0OwotfTsKLQotc3RydWN0IGNvbmZfcm9hbV90cmlnZ2VyX3NldHRpbmdzIHsKLQkvKgotCSAqIFRoZSBtaW5pbXVtIGludGVydmFsIGJldHdlZW4gdHdvIHRyaWdnZXIgZXZlbnRzLgotCSAqCi0JICogUmFuZ2U6IDAgLSA2MDAwMCBtcwotCSAqLwotCXUxNiB0cmlnZ2VyX3BhY2luZzsKLQotCS8qCi0JICogVGhlIHdlaWdodCBmb3IgcnNzaS9iZWFjb24gYXZlcmFnZSBjYWxjdWxhdGlvbgotCSAqCi0JICogUmFuZ2U6IDAgLSAyNTUKLQkgKi8KLQl1OCBhdmdfd2VpZ2h0X3Jzc2lfYmVhY29uOwotCi0JLyoKLQkgKiBUaGUgd2VpZ2h0IGZvciByc3NpL2RhdGEgZnJhbWUgYXZlcmFnZSBjYWxjdWxhdGlvbgotCSAqCi0JICogUmFuZ2U6IDAgLSAyNTUKLQkgKi8KLQl1OCBhdmdfd2VpZ2h0X3Jzc2lfZGF0YTsKLQotCS8qCi0JICogVGhlIHdlaWdodCBmb3Igc25yL2JlYWNvbiBhdmVyYWdlIGNhbGN1bGF0aW9uCi0JICoKLQkgKiBSYW5nZTogMCAtIDI1NQotCSAqLwotCXU4IGF2Z193ZWlnaHRfc25yX2JlYWNvbjsKLQotCS8qCi0JICogVGhlIHdlaWdodCBmb3Igc25yL2RhdGEgZnJhbWUgYXZlcmFnZSBjYWxjdWxhdGlvbgotCSAqCi0JICogUmFuZ2U6IDAgLSAyNTUKLQkgKi8KLQl1OCBhdmdfd2VpZ2h0X3Nucl9kYXRhOwotfTsKLQotc3RydWN0IGNvbmZfc2Nhbl9zZXR0aW5ncyB7Ci0JLyoKLQkgKiBUaGUgbWluaW11bSB0aW1lIHRvIHdhaXQgb24gZWFjaCBjaGFubmVsIGZvciBhY3RpdmUgc2NhbnMKLQkgKgotCSAqIFJhbmdlOiAwIC0gNjU1MzYgdHUKLQkgKi8KLQl1MTYgbWluX2R3ZWxsX3RpbWVfYWN0aXZlOwotCi0JLyoKLQkgKiBUaGUgbWF4aW11bSB0aW1lIHRvIHdhaXQgb24gZWFjaCBjaGFubmVsIGZvciBhY3RpdmUgc2NhbnMKLQkgKgotCSAqIFJhbmdlOiAwIC0gNjU1MzYgdHUKLQkgKi8KLQl1MTYgbWF4X2R3ZWxsX3RpbWVfYWN0aXZlOwotCi0JLyoKLQkgKiBUaGUgbWF4aW11bSB0aW1lIHRvIHdhaXQgb24gZWFjaCBjaGFubmVsIGZvciBwYXNzaXZlIHNjYW5zCi0JICoKLQkgKiBSYW5nZTogMCAtIDY1NTM2IHR1Ci0JICovCi0JdTE2IG1pbl9kd2VsbF90aW1lX3Bhc3NpdmU7Ci0KLQkvKgotCSAqIFRoZSBtYXhpbXVtIHRpbWUgdG8gd2FpdCBvbiBlYWNoIGNoYW5uZWwgZm9yIHBhc3NpdmUgc2NhbnMKLQkgKgotCSAqIFJhbmdlOiAwIC0gNjU1MzYgdHUKLQkgKi8KLQl1MTYgbWF4X2R3ZWxsX3RpbWVfcGFzc2l2ZTsKLQotCS8qCi0JICogTnVtYmVyIG9mIHByb2JlIHJlcXVlc3RzIHRvIHRyYW5zbWl0IG9uIGVhY2ggYWN0aXZlIHNjYW4gY2hhbm5lbAotCSAqCi0JICogUmFuZ2U6IHU4Ci0JICovCi0JdTE2IG51bV9wcm9iZV9yZXFzOwotCi19OwotCi0vKiB0aGVzZSBhcmUgbnVtYmVyIG9mIGNoYW5uZWxzIG9uIHRoZSBiYW5kIGRpdmlkZWQgYnkgdHdvLCByb3VuZGVkIHVwICovCi0jZGVmaW5lIENPTkZfVFhfUFdSX0NPTVBFTlNBVElPTl9MRU5fMiA3Ci0jZGVmaW5lIENPTkZfVFhfUFdSX0NPTVBFTlNBVElPTl9MRU5fNSAxOAotCi1zdHJ1Y3QgY29uZl9yZl9zZXR0aW5ncyB7Ci0JLyoKLQkgKiBQZXIgY2hhbm5lbCBwb3dlciBjb21wZW5zYXRpb24gZm9yIDIuNEdIegotCSAqCi0JICogUmFuZ2U6IHM4Ci0JICovCi0JdTggdHhfcGVyX2NoYW5uZWxfcG93ZXJfY29tcGVuc2F0aW9uXzJbQ09ORl9UWF9QV1JfQ09NUEVOU0FUSU9OX0xFTl8yXTsKLQotCS8qCi0JICogUGVyIGNoYW5uZWwgcG93ZXIgY29tcGVuc2F0aW9uIGZvciA1R0h6Ci0JICoKLQkgKiBSYW5nZTogczgKLQkgKi8KLQl1OCB0eF9wZXJfY2hhbm5lbF9wb3dlcl9jb21wZW5zYXRpb25fNVtDT05GX1RYX1BXUl9DT01QRU5TQVRJT05fTEVOXzVdOwotfTsKLQotc3RydWN0IGNvbmZfZHJ2X3NldHRpbmdzIHsKLQlzdHJ1Y3QgY29uZl9zZ19zZXR0aW5ncyBzZzsKLQlzdHJ1Y3QgY29uZl9yeF9zZXR0aW5ncyByeDsKLQlzdHJ1Y3QgY29uZl90eF9zZXR0aW5ncyB0eDsKLQlzdHJ1Y3QgY29uZl9jb25uX3NldHRpbmdzIGNvbm47Ci0Jc3RydWN0IGNvbmZfaXRyaW1fc2V0dGluZ3MgaXRyaW07Ci0Jc3RydWN0IGNvbmZfcG1fY29uZmlnX3NldHRpbmdzIHBtX2NvbmZpZzsKLQlzdHJ1Y3QgY29uZl9yb2FtX3RyaWdnZXJfc2V0dGluZ3Mgcm9hbV90cmlnZ2VyOwotCXN0cnVjdCBjb25mX3NjYW5fc2V0dGluZ3Mgc2NhbjsKLQlzdHJ1Y3QgY29uZl9yZl9zZXR0aW5ncyByZjsKLX07Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2RlYnVnZnMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjZjMmI5MC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2RlYnVnZnMuYworKysgL2Rldi9udWxsCkBAIC0xLDU4MyArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMjcxCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uCi0gKgotICogQ29udGFjdDogTHVjaWFubyBDb2VsaG8gPGx1Y2lhbm8uY29lbGhvQG5va2lhLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKLSAqIDAyMTEwLTEzMDEgVVNBCi0gKgotICovCi0KLSNpbmNsdWRlICJ3bDEyNzFfZGVidWdmcy5oIgotCi0jaW5jbHVkZSA8bGludXgvc2tidWZmLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotCi0jaW5jbHVkZSAid2wxMjcxLmgiCi0jaW5jbHVkZSAid2wxMjcxX2FjeC5oIgotI2luY2x1ZGUgIndsMTI3MV9wcy5oIgotI2luY2x1ZGUgIndsMTI3MV9pby5oIgotCi0vKiBtcyAqLwotI2RlZmluZSBXTDEyNzFfREVCVUdGU19TVEFUU19MSUZFVElNRSAxMDAwCi0KLS8qIGRlYnVnZnMgbWFjcm9zIGlkZWEgZnJvbSBtYWM4MDIxMSAqLwotCi0jZGVmaW5lIERFQlVHRlNfUkVBRE9OTFlfRklMRShuYW1lLCBidWZsZW4sIGZtdCwgdmFsdWUuLi4pCQlcCi1zdGF0aWMgc3NpemVfdCBuYW1lIyMgX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyYnVmLAlcCi0JCQkgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCQkJXAotewkJCQkJCQkJCVwKLQlzdHJ1Y3Qgd2wxMjcxICp3bCA9IGZpbGUtPnByaXZhdGVfZGF0YTsJCQkJXAotCWNoYXIgYnVmW2J1Zmxlbl07CQkJCQkJXAotCWludCByZXM7CQkJCQkJCVwKLQkJCQkJCQkJCVwKLQlyZXMgPSBzY25wcmludGYoYnVmLCBidWZsZW4sIGZtdCAiXG4iLCAjI3ZhbHVlKTsJCVwKLQlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcmJ1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcmVzKTsJXAotfQkJCQkJCQkJCVwKLQkJCQkJCQkJCVwKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG5hbWUjIyBfb3BzID0gewkJCVwKLQkucmVhZCA9IG5hbWUjIyBfcmVhZCwJCQkJCQlcCi0JLm9wZW4gPSB3bDEyNzFfb3Blbl9maWxlX2dlbmVyaWMsCQkJCVwKLQkubGxzZWVrCT0gZ2VuZXJpY19maWxlX2xsc2VlaywJCQkJCVwKLX07Ci0KLSNkZWZpbmUgREVCVUdGU19BREQobmFtZSwgcGFyZW50KQkJCQkJXAotCXdsLT5kZWJ1Z2ZzLm5hbWUgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCNuYW1lLCAwNDAwLCBwYXJlbnQsCVwKLQkJCQkJICAgICAgIHdsLCAmbmFtZSMjIF9vcHMpOwlcCi0JaWYgKElTX0VSUih3bC0+ZGVidWdmcy5uYW1lKSkgewkJCQkJXAotCQlyZXQgPSBQVFJfRVJSKHdsLT5kZWJ1Z2ZzLm5hbWUpOwkJCVwKLQkJd2wtPmRlYnVnZnMubmFtZSA9IE5VTEw7CQkJCVwKLQkJZ290byBvdXQ7CQkJCQkJXAotCX0KLQotI2RlZmluZSBERUJVR0ZTX0RFTChuYW1lKQkJCQkJCVwKLQlkbyB7CQkJCQkJCQlcCi0JCWRlYnVnZnNfcmVtb3ZlKHdsLT5kZWJ1Z2ZzLm5hbWUpOwkJCVwKLQkJd2wtPmRlYnVnZnMubmFtZSA9IE5VTEw7CQkJCVwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIERFQlVHRlNfRldTVEFUU19GSUxFKHN1YiwgbmFtZSwgYnVmbGVuLCBmbXQpCQkJXAotc3RhdGljIHNzaXplX3Qgc3ViIyMgXyAjI25hbWUjIyBfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwJCVwKLQkJCQkgICAgICBjaGFyIF9fdXNlciAqdXNlcmJ1ZiwJCVwKLQkJCQkgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykJXAotewkJCQkJCQkJCVwKLQlzdHJ1Y3Qgd2wxMjcxICp3bCA9IGZpbGUtPnByaXZhdGVfZGF0YTsJCQkJXAotCWNoYXIgYnVmW2J1Zmxlbl07CQkJCQkJXAotCWludCByZXM7CQkJCQkJCVwKLQkJCQkJCQkJCVwKLQl3bDEyNzFfZGVidWdmc191cGRhdGVfc3RhdHMod2wpOwkJCQlcCi0JCQkJCQkJCQlcCi0JcmVzID0gc2NucHJpbnRmKGJ1ZiwgYnVmbGVuLCBmbXQgIlxuIiwJCQkJXAotCQkJd2wtPnN0YXRzLmZ3X3N0YXRzLT5zdWIubmFtZSk7CQkJXAotCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyYnVmLCBjb3VudCwgcHBvcywgYnVmLCByZXMpOwlcCi19CQkJCQkJCQkJXAotCQkJCQkJCQkJXAotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3ViIyMgXyAjI25hbWUjIyBfb3BzID0gewkJXAotCS5yZWFkID0gc3ViIyMgXyAjI25hbWUjIyBfcmVhZCwJCQkJCVwKLQkub3BlbiA9IHdsMTI3MV9vcGVuX2ZpbGVfZ2VuZXJpYywJCQkJXAotCS5sbHNlZWsJPSBnZW5lcmljX2ZpbGVfbGxzZWVrLAkJCQkJXAotfTsKLQotI2RlZmluZSBERUJVR0ZTX0ZXU1RBVFNfQUREKHN1YiwgbmFtZSkJCQkJXAotCURFQlVHRlNfQUREKHN1YiMjIF8gIyNuYW1lLCB3bC0+ZGVidWdmcy5md19zdGF0aXN0aWNzKQotCi0jZGVmaW5lIERFQlVHRlNfRldTVEFUU19ERUwoc3ViLCBuYW1lKQkJCQlcCi0JREVCVUdGU19ERUwoc3ViIyMgXyAjI25hbWUpCi0KLXN0YXRpYyB2b2lkIHdsMTI3MV9kZWJ1Z2ZzX3VwZGF0ZV9zdGF0cyhzdHJ1Y3Qgd2wxMjcxICp3bCkKLXsKLQlpbnQgcmV0OwotCi0JbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKLQotCXJldCA9IHdsMTI3MV9wc19lbHBfd2FrZXVwKHdsLCBmYWxzZSk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gb3V0OwotCi0JaWYgKHdsLT5zdGF0ZSA9PSBXTDEyNzFfU1RBVEVfT04gJiYKLQkgICAgdGltZV9hZnRlcihqaWZmaWVzLCB3bC0+c3RhdHMuZndfc3RhdHNfdXBkYXRlICsKLQkJICAgICAgIG1zZWNzX3RvX2ppZmZpZXMoV0wxMjcxX0RFQlVHRlNfU1RBVFNfTElGRVRJTUUpKSkgewotCQl3bDEyNzFfYWN4X3N0YXRpc3RpY3Mod2wsIHdsLT5zdGF0cy5md19zdGF0cyk7Ci0JCXdsLT5zdGF0cy5md19zdGF0c191cGRhdGUgPSBqaWZmaWVzOwotCX0KLQotCXdsMTI3MV9wc19lbHBfc2xlZXAod2wpOwotCi1vdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOwotfQotCi1zdGF0aWMgaW50IHdsMTI3MV9vcGVuX2ZpbGVfZ2VuZXJpYyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlmaWxlLT5wcml2YXRlX2RhdGEgPSBpbm9kZS0+aV9wcml2YXRlOwotCXJldHVybiAwOwotfQotCi1ERUJVR0ZTX0ZXU1RBVFNfRklMRSh0eCwgaW50ZXJuYWxfZGVzY19vdmVyZmxvdywgMjAsICIldSIpOwotCi1ERUJVR0ZTX0ZXU1RBVFNfRklMRShyeCwgb3V0X29mX21lbSwgMjAsICIldSIpOwotREVCVUdGU19GV1NUQVRTX0ZJTEUocngsIGhkcl9vdmVyZmxvdywgMjAsICIldSIpOwotREVCVUdGU19GV1NUQVRTX0ZJTEUocngsIGh3X3N0dWNrLCAyMCwgIiV1Iik7Ci1ERUJVR0ZTX0ZXU1RBVFNfRklMRShyeCwgZHJvcHBlZCwgMjAsICIldSIpOwotREVCVUdGU19GV1NUQVRTX0ZJTEUocngsIGZjc19lcnIsIDIwLCAiJXUiKTsKLURFQlVHRlNfRldTVEFUU19GSUxFKHJ4LCB4ZnJfaGludF90cmlnLCAyMCwgIiV1Iik7Ci1ERUJVR0ZTX0ZXU1RBVFNfRklMRShyeCwgcGF0aF9yZXNldCwgMjAsICIldSIpOwotREVCVUdGU19GV1NUQVRTX0ZJTEUocngsIHJlc2V0X2NvdW50ZXIsIDIwLCAiJXUiKTsKLQotREVCVUdGU19GV1NUQVRTX0ZJTEUoZG1hLCByeF9yZXF1ZXN0ZWQsIDIwLCAiJXUiKTsKLURFQlVHRlNfRldTVEFUU19GSUxFKGRtYSwgcnhfZXJyb3JzLCAyMCwgIiV1Iik7Ci1ERUJVR0ZTX0ZXU1RBVFNfRklMRShkbWEsIHR4X3JlcXVlc3RlZCwgMjAsICIldSIpOwotREVCVUdGU19GV1NUQVRTX0ZJTEUoZG1hLCB0eF9lcnJvcnMsIDIwLCAiJXUiKTsKLQotREVCVUdGU19GV1NUQVRTX0ZJTEUoaXNyLCBjbWRfY21wbHQsIDIwLCAiJXUiKTsKLURFQlVHRlNfRldTVEFUU19GSUxFKGlzciwgZmlxcywgMjAsICIldSIpOwotREVCVUdGU19GV1NUQVRTX0ZJTEUoaXNyLCByeF9oZWFkZXJzLCAyMCwgIiV1Iik7Ci1ERUJVR0ZTX0ZXU1RBVFNfRklMRShpc3IsIHJ4X21lbV9vdmVyZmxvdywgMjAsICIldSIpOwotREVCVUdGU19GV1NUQVRTX0ZJTEUoaXNyLCByeF9yZHlzLCAyMCwgIiV1Iik7Ci1ERUJVR0ZTX0ZXU1RBVFNfRklMRShpc3IsIGlycXMsIDIwLCAiJXUiKTsKLURFQlVHRlNfRldTVEFUU19GSUxFKGlzciwgdHhfcHJvY3MsIDIwLCAiJXUiKTsKLURFQlVHRlNfRldTVEFUU19GSUxFKGlzciwgZGVjcnlwdF9kb25lLCAyMCwgIiV1Iik7Ci1ERUJVR0ZTX0ZXU1RBVFNfRklMRShpc3IsIGRtYTBfZG9uZSwgMjAsICIldSIpOwotREVCVUdGU19GV1NUQVRTX0ZJTEUoaXNyLCBkbWExX2RvbmUsIDIwLCAiJXUiKTsKLURFQlVHRlNfRldTVEFUU19GSUxFKGlzciwgdHhfZXhjaF9jb21wbGV0ZSwgMjAsICIldSIpOwotREVCVUdGU19GV1NUQVRTX0ZJTEUoaXNyLCBjb21tYW5kcywgMjAsICIldSIpOwotREVCVUdGU19GV1NUQVRTX0ZJTEUoaXNyLCByeF9wcm9jcywgMjAsICIldSIpOwotREVCVUdGU19GV1NUQVRTX0ZJTEUoaXNyLCBod19wbV9tb2RlX2NoYW5nZXMsIDIwLCAiJXUiKTsKLURFQlVHRlNfRldTVEFUU19GSUxFKGlzciwgaG9zdF9hY2tub3dsZWRnZXMsIDIwLCAiJXUiKTsKLURFQlVHRlNfRldTVEFUU19GSUxFKGlzciwgcGNpX3BtLCAyMCwgIiV1Iik7Ci1ERUJVR0ZTX0ZXU1RBVFNfRklMRShpc3IsIHdha2V1cHMsIDIwLCAiJXUiKTsKLURFQlVHRlNfRldTVEFUU19GSUxFKGlzciwgbG93X3Jzc2ksIDIwLCAiJXUiKTsKLQotREVCVUdGU19GV1NUQVRTX0ZJTEUod2VwLCBhZGRyX2tleV9jb3VudCwgMjAsICIldSIpOwotREVCVUdGU19GV1NUQVRTX0ZJTEUod2VwLCBkZWZhdWx0X2tleV9jb3VudCwgMjAsICIldSIpOwotLyogc2tpcHBpbmcgd2VwLnJlc2VydmVkICovCi1ERUJVR0ZTX0ZXU1RBVFNfRklMRSh3ZXAsIGtleV9ub3RfZm91bmQsIDIwLCAiJXUiKTsKLURFQlVHRlNfRldTVEFUU19GSUxFKHdlcCwgZGVjcnlwdF9mYWlsLCAyMCwgIiV1Iik7Ci1ERUJVR0ZTX0ZXU1RBVFNfRklMRSh3ZXAsIHBhY2tldHMsIDIwLCAiJXUiKTsKLURFQlVHRlNfRldTVEFUU19GSUxFKHdlcCwgaW50ZXJydXB0LCAyMCwgIiV1Iik7Ci0KLURFQlVHRlNfRldTVEFUU19GSUxFKHB3ciwgcHNfZW50ZXIsIDIwLCAiJXUiKTsKLURFQlVHRlNfRldTVEFUU19GSUxFKHB3ciwgZWxwX2VudGVyLCAyMCwgIiV1Iik7Ci1ERUJVR0ZTX0ZXU1RBVFNfRklMRShwd3IsIG1pc3NpbmdfYmNucywgMjAsICIldSIpOwotREVCVUdGU19GV1NUQVRTX0ZJTEUocHdyLCB3YWtlX29uX2hvc3QsIDIwLCAiJXUiKTsKLURFQlVHRlNfRldTVEFUU19GSUxFKHB3ciwgd2FrZV9vbl90aW1lcl9leHAsIDIwLCAiJXUiKTsKLURFQlVHRlNfRldTVEFUU19GSUxFKHB3ciwgdHhfd2l0aF9wcywgMjAsICIldSIpOwotREVCVUdGU19GV1NUQVRTX0ZJTEUocHdyLCB0eF93aXRob3V0X3BzLCAyMCwgIiV1Iik7Ci1ERUJVR0ZTX0ZXU1RBVFNfRklMRShwd3IsIHJjdmRfYmVhY29ucywgMjAsICIldSIpOwotREVCVUdGU19GV1NUQVRTX0ZJTEUocHdyLCBwb3dlcl9zYXZlX29mZiwgMjAsICIldSIpOwotREVCVUdGU19GV1NUQVRTX0ZJTEUocHdyLCBlbmFibGVfcHMsIDIwLCAiJXUiKTsKLURFQlVHRlNfRldTVEFUU19GSUxFKHB3ciwgZGlzYWJsZV9wcywgMjAsICIldSIpOwotREVCVUdGU19GV1NUQVRTX0ZJTEUocHdyLCBmaXhfdHNmX3BzLCAyMCwgIiV1Iik7Ci0vKiBza2lwcGluZyBjb250X21pc3NfYmNuc19zcHJlYWQgZm9yIG5vdyAqLwotREVCVUdGU19GV1NUQVRTX0ZJTEUocHdyLCByY3ZkX2F3YWtlX2JlYWNvbnMsIDIwLCAiJXUiKTsKLQotREVCVUdGU19GV1NUQVRTX0ZJTEUobWljLCByeF9wa3RzLCAyMCwgIiV1Iik7Ci1ERUJVR0ZTX0ZXU1RBVFNfRklMRShtaWMsIGNhbGNfZmFpbHVyZSwgMjAsICIldSIpOwotCi1ERUJVR0ZTX0ZXU1RBVFNfRklMRShhZXMsIGVuY3J5cHRfZmFpbCwgMjAsICIldSIpOwotREVCVUdGU19GV1NUQVRTX0ZJTEUoYWVzLCBkZWNyeXB0X2ZhaWwsIDIwLCAiJXUiKTsKLURFQlVHRlNfRldTVEFUU19GSUxFKGFlcywgZW5jcnlwdF9wYWNrZXRzLCAyMCwgIiV1Iik7Ci1ERUJVR0ZTX0ZXU1RBVFNfRklMRShhZXMsIGRlY3J5cHRfcGFja2V0cywgMjAsICIldSIpOwotREVCVUdGU19GV1NUQVRTX0ZJTEUoYWVzLCBlbmNyeXB0X2ludGVycnVwdCwgMjAsICIldSIpOwotREVCVUdGU19GV1NUQVRTX0ZJTEUoYWVzLCBkZWNyeXB0X2ludGVycnVwdCwgMjAsICIldSIpOwotCi1ERUJVR0ZTX0ZXU1RBVFNfRklMRShldmVudCwgaGVhcnRfYmVhdCwgMjAsICIldSIpOwotREVCVUdGU19GV1NUQVRTX0ZJTEUoZXZlbnQsIGNhbGlicmF0aW9uLCAyMCwgIiV1Iik7Ci1ERUJVR0ZTX0ZXU1RBVFNfRklMRShldmVudCwgcnhfbWlzbWF0Y2gsIDIwLCAiJXUiKTsKLURFQlVHRlNfRldTVEFUU19GSUxFKGV2ZW50LCByeF9tZW1fZW1wdHksIDIwLCAiJXUiKTsKLURFQlVHRlNfRldTVEFUU19GSUxFKGV2ZW50LCByeF9wb29sLCAyMCwgIiV1Iik7Ci1ERUJVR0ZTX0ZXU1RBVFNfRklMRShldmVudCwgb29tX2xhdGUsIDIwLCAiJXUiKTsKLURFQlVHRlNfRldTVEFUU19GSUxFKGV2ZW50LCBwaHlfdHJhbnNtaXRfZXJyb3IsIDIwLCAiJXUiKTsKLURFQlVHRlNfRldTVEFUU19GSUxFKGV2ZW50LCB0eF9zdHVjaywgMjAsICIldSIpOwotCi1ERUJVR0ZTX0ZXU1RBVFNfRklMRShwcywgcHNwb2xsX3RpbWVvdXRzLCAyMCwgIiV1Iik7Ci1ERUJVR0ZTX0ZXU1RBVFNfRklMRShwcywgdXBzZF90aW1lb3V0cywgMjAsICIldSIpOwotREVCVUdGU19GV1NUQVRTX0ZJTEUocHMsIHVwc2RfbWF4X3NwdGltZSwgMjAsICIldSIpOwotREVCVUdGU19GV1NUQVRTX0ZJTEUocHMsIHVwc2RfbWF4X2FwdHVybiwgMjAsICIldSIpOwotREVCVUdGU19GV1NUQVRTX0ZJTEUocHMsIHBzcG9sbF9tYXhfYXB0dXJuLCAyMCwgIiV1Iik7Ci1ERUJVR0ZTX0ZXU1RBVFNfRklMRShwcywgcHNwb2xsX3V0aWxpemF0aW9uLCAyMCwgIiV1Iik7Ci1ERUJVR0ZTX0ZXU1RBVFNfRklMRShwcywgdXBzZF91dGlsaXphdGlvbiwgMjAsICIldSIpOwotCi1ERUJVR0ZTX0ZXU1RBVFNfRklMRShyeHBpcGUsIHJ4X3ByZXBfYmVhY29uX2Ryb3AsIDIwLCAiJXUiKTsKLURFQlVHRlNfRldTVEFUU19GSUxFKHJ4cGlwZSwgZGVzY3JfaG9zdF9pbnRfdHJpZ19yeF9kYXRhLCAyMCwgIiV1Iik7Ci1ERUJVR0ZTX0ZXU1RBVFNfRklMRShyeHBpcGUsIGJlYWNvbl9idWZmZXJfdGhyZXNfaG9zdF9pbnRfdHJpZ19yeF9kYXRhLAotCQkgICAgIDIwLCAiJXUiKTsKLURFQlVHRlNfRldTVEFUU19GSUxFKHJ4cGlwZSwgbWlzc2VkX2JlYWNvbl9ob3N0X2ludF90cmlnX3J4X2RhdGEsIDIwLCAiJXUiKTsKLURFQlVHRlNfRldTVEFUU19GSUxFKHJ4cGlwZSwgdHhfeGZyX2hvc3RfaW50X3RyaWdfcnhfZGF0YSwgMjAsICIldSIpOwotCi1ERUJVR0ZTX1JFQURPTkxZX0ZJTEUocmV0cnlfY291bnQsIDIwLCAiJXUiLCB3bC0+c3RhdHMucmV0cnlfY291bnQpOwotREVCVUdGU19SRUFET05MWV9GSUxFKGV4Y2Vzc2l2ZV9yZXRyaWVzLCAyMCwgIiV1IiwKLQkJICAgICAgd2wtPnN0YXRzLmV4Y2Vzc2l2ZV9yZXRyaWVzKTsKLQotc3RhdGljIHNzaXplX3QgdHhfcXVldWVfbGVuX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyYnVmLAotCQkJCSBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKLXsKLQlzdHJ1Y3Qgd2wxMjcxICp3bCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQl1MzIgcXVldWVfbGVuOwotCWNoYXIgYnVmWzIwXTsKLQlpbnQgcmVzOwotCi0JcXVldWVfbGVuID0gc2tiX3F1ZXVlX2xlbigmd2wtPnR4X3F1ZXVlKTsKLQotCXJlcyA9IHNjbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXVcbiIsIHF1ZXVlX2xlbik7Ci0JcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJidWYsIGNvdW50LCBwcG9zLCBidWYsIHJlcyk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHR4X3F1ZXVlX2xlbl9vcHMgPSB7Ci0JLnJlYWQgPSB0eF9xdWV1ZV9sZW5fcmVhZCwKLQkub3BlbiA9IHdsMTI3MV9vcGVuX2ZpbGVfZ2VuZXJpYywKLQkubGxzZWVrID0gZGVmYXVsdF9sbHNlZWssCi19OwotCi1zdGF0aWMgc3NpemVfdCBncGlvX3Bvd2VyX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKLQkJCSAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCi17Ci0Jc3RydWN0IHdsMTI3MSAqd2wgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JYm9vbCBzdGF0ZSA9IHRlc3RfYml0KFdMMTI3MV9GTEFHX0dQSU9fUE9XRVIsICZ3bC0+ZmxhZ3MpOwotCi0JaW50IHJlczsKLQljaGFyIGJ1ZlsxMF07Ci0KLQlyZXMgPSBzY25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVkXG4iLCBzdGF0ZSk7Ci0KLQlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIHJlcyk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGdwaW9fcG93ZXJfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkgICBjb25zdCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCi0JCQkgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKLXsKLQlzdHJ1Y3Qgd2wxMjcxICp3bCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQljaGFyIGJ1ZlsxMF07Ci0Jc2l6ZV90IGxlbjsKLQl1bnNpZ25lZCBsb25nIHZhbHVlOwotCWludCByZXQ7Ci0KLQltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOwotCi0JbGVuID0gbWluKGNvdW50LCBzaXplb2YoYnVmKSAtIDEpOwotCWlmIChjb3B5X2Zyb21fdXNlcihidWYsIHVzZXJfYnVmLCBsZW4pKSB7Ci0JCXJldCA9IC1FRkFVTFQ7Ci0JCWdvdG8gb3V0OwotCX0KLQlidWZbbGVuXSA9ICdcMCc7Ci0KLQlyZXQgPSBzdHJpY3Rfc3RydG91bChidWYsIDAsICZ2YWx1ZSk7Ci0JaWYgKHJldCA8IDApIHsKLQkJd2wxMjcxX3dhcm5pbmcoImlsbGVnYWwgdmFsdWUgaW4gZ3Bpb19wb3dlciIpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAodmFsdWUpCi0JCXdsMTI3MV9wb3dlcl9vbih3bCk7Ci0JZWxzZQotCQl3bDEyNzFfcG93ZXJfb2ZmKHdsKTsKLQotb3V0OgotCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGdwaW9fcG93ZXJfb3BzID0gewotCS5yZWFkID0gZ3Bpb19wb3dlcl9yZWFkLAotCS53cml0ZSA9IGdwaW9fcG93ZXJfd3JpdGUsCi0JLm9wZW4gPSB3bDEyNzFfb3Blbl9maWxlX2dlbmVyaWMsCi0JLmxsc2VlayA9IGRlZmF1bHRfbGxzZWVrLAotfTsKLQotc3RhdGljIHZvaWQgd2wxMjcxX2RlYnVnZnNfZGVsZXRlX2ZpbGVzKHN0cnVjdCB3bDEyNzEgKndsKQotewotCURFQlVHRlNfRldTVEFUU19ERUwodHgsIGludGVybmFsX2Rlc2Nfb3ZlcmZsb3cpOwotCi0JREVCVUdGU19GV1NUQVRTX0RFTChyeCwgb3V0X29mX21lbSk7Ci0JREVCVUdGU19GV1NUQVRTX0RFTChyeCwgaGRyX292ZXJmbG93KTsKLQlERUJVR0ZTX0ZXU1RBVFNfREVMKHJ4LCBod19zdHVjayk7Ci0JREVCVUdGU19GV1NUQVRTX0RFTChyeCwgZHJvcHBlZCk7Ci0JREVCVUdGU19GV1NUQVRTX0RFTChyeCwgZmNzX2Vycik7Ci0JREVCVUdGU19GV1NUQVRTX0RFTChyeCwgeGZyX2hpbnRfdHJpZyk7Ci0JREVCVUdGU19GV1NUQVRTX0RFTChyeCwgcGF0aF9yZXNldCk7Ci0JREVCVUdGU19GV1NUQVRTX0RFTChyeCwgcmVzZXRfY291bnRlcik7Ci0KLQlERUJVR0ZTX0ZXU1RBVFNfREVMKGRtYSwgcnhfcmVxdWVzdGVkKTsKLQlERUJVR0ZTX0ZXU1RBVFNfREVMKGRtYSwgcnhfZXJyb3JzKTsKLQlERUJVR0ZTX0ZXU1RBVFNfREVMKGRtYSwgdHhfcmVxdWVzdGVkKTsKLQlERUJVR0ZTX0ZXU1RBVFNfREVMKGRtYSwgdHhfZXJyb3JzKTsKLQotCURFQlVHRlNfRldTVEFUU19ERUwoaXNyLCBjbWRfY21wbHQpOwotCURFQlVHRlNfRldTVEFUU19ERUwoaXNyLCBmaXFzKTsKLQlERUJVR0ZTX0ZXU1RBVFNfREVMKGlzciwgcnhfaGVhZGVycyk7Ci0JREVCVUdGU19GV1NUQVRTX0RFTChpc3IsIHJ4X21lbV9vdmVyZmxvdyk7Ci0JREVCVUdGU19GV1NUQVRTX0RFTChpc3IsIHJ4X3JkeXMpOwotCURFQlVHRlNfRldTVEFUU19ERUwoaXNyLCBpcnFzKTsKLQlERUJVR0ZTX0ZXU1RBVFNfREVMKGlzciwgdHhfcHJvY3MpOwotCURFQlVHRlNfRldTVEFUU19ERUwoaXNyLCBkZWNyeXB0X2RvbmUpOwotCURFQlVHRlNfRldTVEFUU19ERUwoaXNyLCBkbWEwX2RvbmUpOwotCURFQlVHRlNfRldTVEFUU19ERUwoaXNyLCBkbWExX2RvbmUpOwotCURFQlVHRlNfRldTVEFUU19ERUwoaXNyLCB0eF9leGNoX2NvbXBsZXRlKTsKLQlERUJVR0ZTX0ZXU1RBVFNfREVMKGlzciwgY29tbWFuZHMpOwotCURFQlVHRlNfRldTVEFUU19ERUwoaXNyLCByeF9wcm9jcyk7Ci0JREVCVUdGU19GV1NUQVRTX0RFTChpc3IsIGh3X3BtX21vZGVfY2hhbmdlcyk7Ci0JREVCVUdGU19GV1NUQVRTX0RFTChpc3IsIGhvc3RfYWNrbm93bGVkZ2VzKTsKLQlERUJVR0ZTX0ZXU1RBVFNfREVMKGlzciwgcGNpX3BtKTsKLQlERUJVR0ZTX0ZXU1RBVFNfREVMKGlzciwgd2FrZXVwcyk7Ci0JREVCVUdGU19GV1NUQVRTX0RFTChpc3IsIGxvd19yc3NpKTsKLQotCURFQlVHRlNfRldTVEFUU19ERUwod2VwLCBhZGRyX2tleV9jb3VudCk7Ci0JREVCVUdGU19GV1NUQVRTX0RFTCh3ZXAsIGRlZmF1bHRfa2V5X2NvdW50KTsKLQkvKiBza2lwcGluZyB3ZXAucmVzZXJ2ZWQgKi8KLQlERUJVR0ZTX0ZXU1RBVFNfREVMKHdlcCwga2V5X25vdF9mb3VuZCk7Ci0JREVCVUdGU19GV1NUQVRTX0RFTCh3ZXAsIGRlY3J5cHRfZmFpbCk7Ci0JREVCVUdGU19GV1NUQVRTX0RFTCh3ZXAsIHBhY2tldHMpOwotCURFQlVHRlNfRldTVEFUU19ERUwod2VwLCBpbnRlcnJ1cHQpOwotCi0JREVCVUdGU19GV1NUQVRTX0RFTChwd3IsIHBzX2VudGVyKTsKLQlERUJVR0ZTX0ZXU1RBVFNfREVMKHB3ciwgZWxwX2VudGVyKTsKLQlERUJVR0ZTX0ZXU1RBVFNfREVMKHB3ciwgbWlzc2luZ19iY25zKTsKLQlERUJVR0ZTX0ZXU1RBVFNfREVMKHB3ciwgd2FrZV9vbl9ob3N0KTsKLQlERUJVR0ZTX0ZXU1RBVFNfREVMKHB3ciwgd2FrZV9vbl90aW1lcl9leHApOwotCURFQlVHRlNfRldTVEFUU19ERUwocHdyLCB0eF93aXRoX3BzKTsKLQlERUJVR0ZTX0ZXU1RBVFNfREVMKHB3ciwgdHhfd2l0aG91dF9wcyk7Ci0JREVCVUdGU19GV1NUQVRTX0RFTChwd3IsIHJjdmRfYmVhY29ucyk7Ci0JREVCVUdGU19GV1NUQVRTX0RFTChwd3IsIHBvd2VyX3NhdmVfb2ZmKTsKLQlERUJVR0ZTX0ZXU1RBVFNfREVMKHB3ciwgZW5hYmxlX3BzKTsKLQlERUJVR0ZTX0ZXU1RBVFNfREVMKHB3ciwgZGlzYWJsZV9wcyk7Ci0JREVCVUdGU19GV1NUQVRTX0RFTChwd3IsIGZpeF90c2ZfcHMpOwotCS8qIHNraXBwaW5nIGNvbnRfbWlzc19iY25zX3NwcmVhZCBmb3Igbm93ICovCi0JREVCVUdGU19GV1NUQVRTX0RFTChwd3IsIHJjdmRfYXdha2VfYmVhY29ucyk7Ci0KLQlERUJVR0ZTX0ZXU1RBVFNfREVMKG1pYywgcnhfcGt0cyk7Ci0JREVCVUdGU19GV1NUQVRTX0RFTChtaWMsIGNhbGNfZmFpbHVyZSk7Ci0KLQlERUJVR0ZTX0ZXU1RBVFNfREVMKGFlcywgZW5jcnlwdF9mYWlsKTsKLQlERUJVR0ZTX0ZXU1RBVFNfREVMKGFlcywgZGVjcnlwdF9mYWlsKTsKLQlERUJVR0ZTX0ZXU1RBVFNfREVMKGFlcywgZW5jcnlwdF9wYWNrZXRzKTsKLQlERUJVR0ZTX0ZXU1RBVFNfREVMKGFlcywgZGVjcnlwdF9wYWNrZXRzKTsKLQlERUJVR0ZTX0ZXU1RBVFNfREVMKGFlcywgZW5jcnlwdF9pbnRlcnJ1cHQpOwotCURFQlVHRlNfRldTVEFUU19ERUwoYWVzLCBkZWNyeXB0X2ludGVycnVwdCk7Ci0KLQlERUJVR0ZTX0ZXU1RBVFNfREVMKGV2ZW50LCBoZWFydF9iZWF0KTsKLQlERUJVR0ZTX0ZXU1RBVFNfREVMKGV2ZW50LCBjYWxpYnJhdGlvbik7Ci0JREVCVUdGU19GV1NUQVRTX0RFTChldmVudCwgcnhfbWlzbWF0Y2gpOwotCURFQlVHRlNfRldTVEFUU19ERUwoZXZlbnQsIHJ4X21lbV9lbXB0eSk7Ci0JREVCVUdGU19GV1NUQVRTX0RFTChldmVudCwgcnhfcG9vbCk7Ci0JREVCVUdGU19GV1NUQVRTX0RFTChldmVudCwgb29tX2xhdGUpOwotCURFQlVHRlNfRldTVEFUU19ERUwoZXZlbnQsIHBoeV90cmFuc21pdF9lcnJvcik7Ci0JREVCVUdGU19GV1NUQVRTX0RFTChldmVudCwgdHhfc3R1Y2spOwotCi0JREVCVUdGU19GV1NUQVRTX0RFTChwcywgcHNwb2xsX3RpbWVvdXRzKTsKLQlERUJVR0ZTX0ZXU1RBVFNfREVMKHBzLCB1cHNkX3RpbWVvdXRzKTsKLQlERUJVR0ZTX0ZXU1RBVFNfREVMKHBzLCB1cHNkX21heF9zcHRpbWUpOwotCURFQlVHRlNfRldTVEFUU19ERUwocHMsIHVwc2RfbWF4X2FwdHVybik7Ci0JREVCVUdGU19GV1NUQVRTX0RFTChwcywgcHNwb2xsX21heF9hcHR1cm4pOwotCURFQlVHRlNfRldTVEFUU19ERUwocHMsIHBzcG9sbF91dGlsaXphdGlvbik7Ci0JREVCVUdGU19GV1NUQVRTX0RFTChwcywgdXBzZF91dGlsaXphdGlvbik7Ci0KLQlERUJVR0ZTX0ZXU1RBVFNfREVMKHJ4cGlwZSwgcnhfcHJlcF9iZWFjb25fZHJvcCk7Ci0JREVCVUdGU19GV1NUQVRTX0RFTChyeHBpcGUsIGRlc2NyX2hvc3RfaW50X3RyaWdfcnhfZGF0YSk7Ci0JREVCVUdGU19GV1NUQVRTX0RFTChyeHBpcGUsIGJlYWNvbl9idWZmZXJfdGhyZXNfaG9zdF9pbnRfdHJpZ19yeF9kYXRhKTsKLQlERUJVR0ZTX0ZXU1RBVFNfREVMKHJ4cGlwZSwgbWlzc2VkX2JlYWNvbl9ob3N0X2ludF90cmlnX3J4X2RhdGEpOwotCURFQlVHRlNfRldTVEFUU19ERUwocnhwaXBlLCB0eF94ZnJfaG9zdF9pbnRfdHJpZ19yeF9kYXRhKTsKLQotCURFQlVHRlNfREVMKHR4X3F1ZXVlX2xlbik7Ci0JREVCVUdGU19ERUwocmV0cnlfY291bnQpOwotCURFQlVHRlNfREVMKGV4Y2Vzc2l2ZV9yZXRyaWVzKTsKLQotCURFQlVHRlNfREVMKGdwaW9fcG93ZXIpOwotfQotCi1zdGF0aWMgaW50IHdsMTI3MV9kZWJ1Z2ZzX2FkZF9maWxlcyhzdHJ1Y3Qgd2wxMjcxICp3bCkKLXsKLQlpbnQgcmV0ID0gMDsKLQotCURFQlVHRlNfRldTVEFUU19BREQodHgsIGludGVybmFsX2Rlc2Nfb3ZlcmZsb3cpOwotCi0JREVCVUdGU19GV1NUQVRTX0FERChyeCwgb3V0X29mX21lbSk7Ci0JREVCVUdGU19GV1NUQVRTX0FERChyeCwgaGRyX292ZXJmbG93KTsKLQlERUJVR0ZTX0ZXU1RBVFNfQUREKHJ4LCBod19zdHVjayk7Ci0JREVCVUdGU19GV1NUQVRTX0FERChyeCwgZHJvcHBlZCk7Ci0JREVCVUdGU19GV1NUQVRTX0FERChyeCwgZmNzX2Vycik7Ci0JREVCVUdGU19GV1NUQVRTX0FERChyeCwgeGZyX2hpbnRfdHJpZyk7Ci0JREVCVUdGU19GV1NUQVRTX0FERChyeCwgcGF0aF9yZXNldCk7Ci0JREVCVUdGU19GV1NUQVRTX0FERChyeCwgcmVzZXRfY291bnRlcik7Ci0KLQlERUJVR0ZTX0ZXU1RBVFNfQUREKGRtYSwgcnhfcmVxdWVzdGVkKTsKLQlERUJVR0ZTX0ZXU1RBVFNfQUREKGRtYSwgcnhfZXJyb3JzKTsKLQlERUJVR0ZTX0ZXU1RBVFNfQUREKGRtYSwgdHhfcmVxdWVzdGVkKTsKLQlERUJVR0ZTX0ZXU1RBVFNfQUREKGRtYSwgdHhfZXJyb3JzKTsKLQotCURFQlVHRlNfRldTVEFUU19BREQoaXNyLCBjbWRfY21wbHQpOwotCURFQlVHRlNfRldTVEFUU19BREQoaXNyLCBmaXFzKTsKLQlERUJVR0ZTX0ZXU1RBVFNfQUREKGlzciwgcnhfaGVhZGVycyk7Ci0JREVCVUdGU19GV1NUQVRTX0FERChpc3IsIHJ4X21lbV9vdmVyZmxvdyk7Ci0JREVCVUdGU19GV1NUQVRTX0FERChpc3IsIHJ4X3JkeXMpOwotCURFQlVHRlNfRldTVEFUU19BREQoaXNyLCBpcnFzKTsKLQlERUJVR0ZTX0ZXU1RBVFNfQUREKGlzciwgdHhfcHJvY3MpOwotCURFQlVHRlNfRldTVEFUU19BREQoaXNyLCBkZWNyeXB0X2RvbmUpOwotCURFQlVHRlNfRldTVEFUU19BREQoaXNyLCBkbWEwX2RvbmUpOwotCURFQlVHRlNfRldTVEFUU19BREQoaXNyLCBkbWExX2RvbmUpOwotCURFQlVHRlNfRldTVEFUU19BREQoaXNyLCB0eF9leGNoX2NvbXBsZXRlKTsKLQlERUJVR0ZTX0ZXU1RBVFNfQUREKGlzciwgY29tbWFuZHMpOwotCURFQlVHRlNfRldTVEFUU19BREQoaXNyLCByeF9wcm9jcyk7Ci0JREVCVUdGU19GV1NUQVRTX0FERChpc3IsIGh3X3BtX21vZGVfY2hhbmdlcyk7Ci0JREVCVUdGU19GV1NUQVRTX0FERChpc3IsIGhvc3RfYWNrbm93bGVkZ2VzKTsKLQlERUJVR0ZTX0ZXU1RBVFNfQUREKGlzciwgcGNpX3BtKTsKLQlERUJVR0ZTX0ZXU1RBVFNfQUREKGlzciwgd2FrZXVwcyk7Ci0JREVCVUdGU19GV1NUQVRTX0FERChpc3IsIGxvd19yc3NpKTsKLQotCURFQlVHRlNfRldTVEFUU19BREQod2VwLCBhZGRyX2tleV9jb3VudCk7Ci0JREVCVUdGU19GV1NUQVRTX0FERCh3ZXAsIGRlZmF1bHRfa2V5X2NvdW50KTsKLQkvKiBza2lwcGluZyB3ZXAucmVzZXJ2ZWQgKi8KLQlERUJVR0ZTX0ZXU1RBVFNfQUREKHdlcCwga2V5X25vdF9mb3VuZCk7Ci0JREVCVUdGU19GV1NUQVRTX0FERCh3ZXAsIGRlY3J5cHRfZmFpbCk7Ci0JREVCVUdGU19GV1NUQVRTX0FERCh3ZXAsIHBhY2tldHMpOwotCURFQlVHRlNfRldTVEFUU19BREQod2VwLCBpbnRlcnJ1cHQpOwotCi0JREVCVUdGU19GV1NUQVRTX0FERChwd3IsIHBzX2VudGVyKTsKLQlERUJVR0ZTX0ZXU1RBVFNfQUREKHB3ciwgZWxwX2VudGVyKTsKLQlERUJVR0ZTX0ZXU1RBVFNfQUREKHB3ciwgbWlzc2luZ19iY25zKTsKLQlERUJVR0ZTX0ZXU1RBVFNfQUREKHB3ciwgd2FrZV9vbl9ob3N0KTsKLQlERUJVR0ZTX0ZXU1RBVFNfQUREKHB3ciwgd2FrZV9vbl90aW1lcl9leHApOwotCURFQlVHRlNfRldTVEFUU19BREQocHdyLCB0eF93aXRoX3BzKTsKLQlERUJVR0ZTX0ZXU1RBVFNfQUREKHB3ciwgdHhfd2l0aG91dF9wcyk7Ci0JREVCVUdGU19GV1NUQVRTX0FERChwd3IsIHJjdmRfYmVhY29ucyk7Ci0JREVCVUdGU19GV1NUQVRTX0FERChwd3IsIHBvd2VyX3NhdmVfb2ZmKTsKLQlERUJVR0ZTX0ZXU1RBVFNfQUREKHB3ciwgZW5hYmxlX3BzKTsKLQlERUJVR0ZTX0ZXU1RBVFNfQUREKHB3ciwgZGlzYWJsZV9wcyk7Ci0JREVCVUdGU19GV1NUQVRTX0FERChwd3IsIGZpeF90c2ZfcHMpOwotCS8qIHNraXBwaW5nIGNvbnRfbWlzc19iY25zX3NwcmVhZCBmb3Igbm93ICovCi0JREVCVUdGU19GV1NUQVRTX0FERChwd3IsIHJjdmRfYXdha2VfYmVhY29ucyk7Ci0KLQlERUJVR0ZTX0ZXU1RBVFNfQUREKG1pYywgcnhfcGt0cyk7Ci0JREVCVUdGU19GV1NUQVRTX0FERChtaWMsIGNhbGNfZmFpbHVyZSk7Ci0KLQlERUJVR0ZTX0ZXU1RBVFNfQUREKGFlcywgZW5jcnlwdF9mYWlsKTsKLQlERUJVR0ZTX0ZXU1RBVFNfQUREKGFlcywgZGVjcnlwdF9mYWlsKTsKLQlERUJVR0ZTX0ZXU1RBVFNfQUREKGFlcywgZW5jcnlwdF9wYWNrZXRzKTsKLQlERUJVR0ZTX0ZXU1RBVFNfQUREKGFlcywgZGVjcnlwdF9wYWNrZXRzKTsKLQlERUJVR0ZTX0ZXU1RBVFNfQUREKGFlcywgZW5jcnlwdF9pbnRlcnJ1cHQpOwotCURFQlVHRlNfRldTVEFUU19BREQoYWVzLCBkZWNyeXB0X2ludGVycnVwdCk7Ci0KLQlERUJVR0ZTX0ZXU1RBVFNfQUREKGV2ZW50LCBoZWFydF9iZWF0KTsKLQlERUJVR0ZTX0ZXU1RBVFNfQUREKGV2ZW50LCBjYWxpYnJhdGlvbik7Ci0JREVCVUdGU19GV1NUQVRTX0FERChldmVudCwgcnhfbWlzbWF0Y2gpOwotCURFQlVHRlNfRldTVEFUU19BREQoZXZlbnQsIHJ4X21lbV9lbXB0eSk7Ci0JREVCVUdGU19GV1NUQVRTX0FERChldmVudCwgcnhfcG9vbCk7Ci0JREVCVUdGU19GV1NUQVRTX0FERChldmVudCwgb29tX2xhdGUpOwotCURFQlVHRlNfRldTVEFUU19BREQoZXZlbnQsIHBoeV90cmFuc21pdF9lcnJvcik7Ci0JREVCVUdGU19GV1NUQVRTX0FERChldmVudCwgdHhfc3R1Y2spOwotCi0JREVCVUdGU19GV1NUQVRTX0FERChwcywgcHNwb2xsX3RpbWVvdXRzKTsKLQlERUJVR0ZTX0ZXU1RBVFNfQUREKHBzLCB1cHNkX3RpbWVvdXRzKTsKLQlERUJVR0ZTX0ZXU1RBVFNfQUREKHBzLCB1cHNkX21heF9zcHRpbWUpOwotCURFQlVHRlNfRldTVEFUU19BREQocHMsIHVwc2RfbWF4X2FwdHVybik7Ci0JREVCVUdGU19GV1NUQVRTX0FERChwcywgcHNwb2xsX21heF9hcHR1cm4pOwotCURFQlVHRlNfRldTVEFUU19BREQocHMsIHBzcG9sbF91dGlsaXphdGlvbik7Ci0JREVCVUdGU19GV1NUQVRTX0FERChwcywgdXBzZF91dGlsaXphdGlvbik7Ci0KLQlERUJVR0ZTX0ZXU1RBVFNfQUREKHJ4cGlwZSwgcnhfcHJlcF9iZWFjb25fZHJvcCk7Ci0JREVCVUdGU19GV1NUQVRTX0FERChyeHBpcGUsIGRlc2NyX2hvc3RfaW50X3RyaWdfcnhfZGF0YSk7Ci0JREVCVUdGU19GV1NUQVRTX0FERChyeHBpcGUsIGJlYWNvbl9idWZmZXJfdGhyZXNfaG9zdF9pbnRfdHJpZ19yeF9kYXRhKTsKLQlERUJVR0ZTX0ZXU1RBVFNfQUREKHJ4cGlwZSwgbWlzc2VkX2JlYWNvbl9ob3N0X2ludF90cmlnX3J4X2RhdGEpOwotCURFQlVHRlNfRldTVEFUU19BREQocnhwaXBlLCB0eF94ZnJfaG9zdF9pbnRfdHJpZ19yeF9kYXRhKTsKLQotCURFQlVHRlNfQUREKHR4X3F1ZXVlX2xlbiwgd2wtPmRlYnVnZnMucm9vdGRpcik7Ci0JREVCVUdGU19BREQocmV0cnlfY291bnQsIHdsLT5kZWJ1Z2ZzLnJvb3RkaXIpOwotCURFQlVHRlNfQUREKGV4Y2Vzc2l2ZV9yZXRyaWVzLCB3bC0+ZGVidWdmcy5yb290ZGlyKTsKLQotCURFQlVHRlNfQUREKGdwaW9fcG93ZXIsIHdsLT5kZWJ1Z2ZzLnJvb3RkaXIpOwotCi1vdXQ6Ci0JaWYgKHJldCA8IDApCi0JCXdsMTI3MV9kZWJ1Z2ZzX2RlbGV0ZV9maWxlcyh3bCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi12b2lkIHdsMTI3MV9kZWJ1Z2ZzX3Jlc2V0KHN0cnVjdCB3bDEyNzEgKndsKQotewotCW1lbXNldCh3bC0+c3RhdHMuZndfc3RhdHMsIDAsIHNpemVvZigqd2wtPnN0YXRzLmZ3X3N0YXRzKSk7Ci0Jd2wtPnN0YXRzLnJldHJ5X2NvdW50ID0gMDsKLQl3bC0+c3RhdHMuZXhjZXNzaXZlX3JldHJpZXMgPSAwOwotfQotCi1pbnQgd2wxMjcxX2RlYnVnZnNfaW5pdChzdHJ1Y3Qgd2wxMjcxICp3bCkKLXsKLQlpbnQgcmV0OwotCi0Jd2wtPmRlYnVnZnMucm9vdGRpciA9IGRlYnVnZnNfY3JlYXRlX2RpcihLQlVJTERfTU9ETkFNRSwgTlVMTCk7Ci0KLQlpZiAoSVNfRVJSKHdsLT5kZWJ1Z2ZzLnJvb3RkaXIpKSB7Ci0JCXJldCA9IFBUUl9FUlIod2wtPmRlYnVnZnMucm9vdGRpcik7Ci0JCXdsLT5kZWJ1Z2ZzLnJvb3RkaXIgPSBOVUxMOwotCQlnb3RvIGVycjsKLQl9Ci0KLQl3bC0+ZGVidWdmcy5md19zdGF0aXN0aWNzID0gZGVidWdmc19jcmVhdGVfZGlyKCJmdy1zdGF0aXN0aWNzIiwKLQkJCQkJCSAgICAgICB3bC0+ZGVidWdmcy5yb290ZGlyKTsKLQotCWlmIChJU19FUlIod2wtPmRlYnVnZnMuZndfc3RhdGlzdGljcykpIHsKLQkJcmV0ID0gUFRSX0VSUih3bC0+ZGVidWdmcy5md19zdGF0aXN0aWNzKTsKLQkJd2wtPmRlYnVnZnMuZndfc3RhdGlzdGljcyA9IE5VTEw7Ci0JCWdvdG8gZXJyX3Jvb3Q7Ci0JfQotCi0Jd2wtPnN0YXRzLmZ3X3N0YXRzID0ga3phbGxvYyhzaXplb2YoKndsLT5zdGF0cy5md19zdGF0cyksCi0JCQkJICAgICAgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAoIXdsLT5zdGF0cy5md19zdGF0cykgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycl9mdzsKLQl9Ci0KLQl3bC0+c3RhdHMuZndfc3RhdHNfdXBkYXRlID0gamlmZmllczsKLQotCXJldCA9IHdsMTI3MV9kZWJ1Z2ZzX2FkZF9maWxlcyh3bCk7Ci0KLQlpZiAocmV0IDwgMCkKLQkJZ290byBlcnJfZmlsZTsKLQotCXJldHVybiAwOwotCi1lcnJfZmlsZToKLQlrZnJlZSh3bC0+c3RhdHMuZndfc3RhdHMpOwotCXdsLT5zdGF0cy5md19zdGF0cyA9IE5VTEw7Ci0KLWVycl9mdzoKLQlkZWJ1Z2ZzX3JlbW92ZSh3bC0+ZGVidWdmcy5md19zdGF0aXN0aWNzKTsKLQl3bC0+ZGVidWdmcy5md19zdGF0aXN0aWNzID0gTlVMTDsKLQotZXJyX3Jvb3Q6Ci0JZGVidWdmc19yZW1vdmUod2wtPmRlYnVnZnMucm9vdGRpcik7Ci0Jd2wtPmRlYnVnZnMucm9vdGRpciA9IE5VTEw7Ci0KLWVycjoKLQlyZXR1cm4gcmV0OwotfQotCi12b2lkIHdsMTI3MV9kZWJ1Z2ZzX2V4aXQoc3RydWN0IHdsMTI3MSAqd2wpCi17Ci0Jd2wxMjcxX2RlYnVnZnNfZGVsZXRlX2ZpbGVzKHdsKTsKLQotCWtmcmVlKHdsLT5zdGF0cy5md19zdGF0cyk7Ci0Jd2wtPnN0YXRzLmZ3X3N0YXRzID0gTlVMTDsKLQotCWRlYnVnZnNfcmVtb3ZlKHdsLT5kZWJ1Z2ZzLmZ3X3N0YXRpc3RpY3MpOwotCXdsLT5kZWJ1Z2ZzLmZ3X3N0YXRpc3RpY3MgPSBOVUxMOwotCi0JZGVidWdmc19yZW1vdmUod2wtPmRlYnVnZnMucm9vdGRpcik7Ci0Jd2wtPmRlYnVnZnMucm9vdGRpciA9IE5VTEw7Ci0KLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfZGVidWdmcy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9kZWJ1Z2ZzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwYTQ1YjIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9kZWJ1Z2ZzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMjcxCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uCi0gKgotICogQ29udGFjdDogTHVjaWFubyBDb2VsaG8gPGx1Y2lhbm8uY29lbGhvQG5va2lhLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKLSAqIDAyMTEwLTEzMDEgVVNBCi0gKgotICovCi0KLSNpZm5kZWYgV0wxMjcxX0RFQlVHRlNfSAotI2RlZmluZSBXTDEyNzFfREVCVUdGU19ICi0KLSNpbmNsdWRlICJ3bDEyNzEuaCIKLQotaW50IHdsMTI3MV9kZWJ1Z2ZzX2luaXQoc3RydWN0IHdsMTI3MSAqd2wpOwotdm9pZCB3bDEyNzFfZGVidWdmc19leGl0KHN0cnVjdCB3bDEyNzEgKndsKTsKLXZvaWQgd2wxMjcxX2RlYnVnZnNfcmVzZXQoc3RydWN0IHdsMTI3MSAqd2wpOwotCi0jZW5kaWYgLyogV0wxMjcxX0RFQlVHRlNfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9ldmVudC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9ldmVudC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YjNmNTAzLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfZXZlbnQuYworKysgL2Rldi9udWxsCkBAIC0xLDI5NSArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMjcxCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgTm9raWEgQ29ycG9yYXRpb24KLSAqCi0gKiBDb250YWN0OiBMdWNpYW5vIENvZWxobyA8bHVjaWFuby5jb2VsaG9Abm9raWEuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQotICogMDIxMTAtMTMwMSBVU0EKLSAqCi0gKi8KLQotI2luY2x1ZGUgIndsMTI3MS5oIgotI2luY2x1ZGUgIndsMTI3MV9yZWcuaCIKLSNpbmNsdWRlICJ3bDEyNzFfaW8uaCIKLSNpbmNsdWRlICJ3bDEyNzFfZXZlbnQuaCIKLSNpbmNsdWRlICJ3bDEyNzFfcHMuaCIKLSNpbmNsdWRlICJ3bDEyNzFfc2Nhbi5oIgotI2luY2x1ZGUgIndsMTJ4eF84MDIxMS5oIgotCi12b2lkIHdsMTI3MV9wc3BvbGxfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IGRlbGF5ZWRfd29yayAqZHdvcms7Ci0Jc3RydWN0IHdsMTI3MSAqd2w7Ci0KLQlkd29yayA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZGVsYXllZF93b3JrLCB3b3JrKTsKLQl3bCA9IGNvbnRhaW5lcl9vZihkd29yaywgc3RydWN0IHdsMTI3MSwgcHNwb2xsX3dvcmspOwotCi0Jd2wxMjcxX2RlYnVnKERFQlVHX0VWRU5ULCAicHNwb2xsIHdvcmsiKTsKLQotCW11dGV4X2xvY2soJndsLT5tdXRleCk7Ci0KLQlpZiAodW5saWtlbHkod2wtPnN0YXRlID09IFdMMTI3MV9TVEFURV9PRkYpKQotCQlnb3RvIG91dDsKLQotCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KFdMMTI3MV9GTEFHX1BTUE9MTF9GQUlMVVJFLCAmd2wtPmZsYWdzKSkKLQkJZ290byBvdXQ7Ci0KLQlpZiAoIXRlc3RfYml0KFdMMTI3MV9GTEFHX1NUQV9BU1NPQ0lBVEVELCAmd2wtPmZsYWdzKSkKLQkJZ290byBvdXQ7Ci0KLQkvKgotCSAqIGlmIHdlIGVuZCB1cCBoZXJlLCB0aGVuIHdlIHdlcmUgaW4gcG93ZXJzYXZlIHdoZW4gdGhlIHBzcG9sbAotCSAqIGRlbGl2ZXJ5IGZhaWx1cmUgb2NjdXJyZWQsIGFuZCBuby1vbmUgY2hhbmdlZCBzdGF0ZSBzaW5jZSwgc28KLQkgKiB3ZSBzaG91bGQgZ28gYmFjayB0byBwb3dlcnNhdmUuCi0JICovCi0Jd2wxMjcxX3BzX3NldF9tb2RlKHdsLCBTVEFUSU9OX1BPV0VSX1NBVkVfTU9ERSwgd2wtPmJhc2ljX3JhdGUsIHRydWUpOwotCi1vdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOwotfTsKLQotc3RhdGljIHZvaWQgd2wxMjcxX2V2ZW50X3BzcG9sbF9kZWxpdmVyeV9mYWlsKHN0cnVjdCB3bDEyNzEgKndsKQotewotCWludCBkZWxheSA9IHdsLT5jb25mLmNvbm4ucHNfcG9sbF9yZWNvdmVyeV9wZXJpb2Q7Ci0JaW50IHJldDsKLQotCXdsLT5wc19wb2xsX2ZhaWx1cmVzKys7Ci0JaWYgKHdsLT5wc19wb2xsX2ZhaWx1cmVzID09IDEpCi0JCXdsMTI3MV9pbmZvKCJBUCB3aXRoIGR5c2Z1bmN0aW9uYWwgcHMtcG9sbCwgIgotCQkJICAgICJ0cnlpbmcgdG8gd29yayBhcm91bmQgaXQuIik7Ci0KLQkvKiBmb3JjZSBhY3RpdmUgbW9kZSByZWNlaXZlIGRhdGEgZnJvbSB0aGUgQVAgKi8KLQlpZiAodGVzdF9iaXQoV0wxMjcxX0ZMQUdfUFNNLCAmd2wtPmZsYWdzKSkgewotCQlyZXQgPSB3bDEyNzFfcHNfc2V0X21vZGUod2wsIFNUQVRJT05fQUNUSVZFX01PREUsCi0JCQkJCSB3bC0+YmFzaWNfcmF0ZSwgdHJ1ZSk7Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuOwotCQlzZXRfYml0KFdMMTI3MV9GTEFHX1BTUE9MTF9GQUlMVVJFLCAmd2wtPmZsYWdzKTsKLQkJaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayh3bC0+aHcsICZ3bC0+cHNwb2xsX3dvcmssCi0JCQkJCSAgICAgbXNlY3NfdG9famlmZmllcyhkZWxheSkpOwotCX0KLQotCS8qCi0JICogSWYgYWxyZWFkeSBpbiBhY3RpdmUgbW9kZSwgbGV0cyB3ZSBzaG91bGQgYmUgZ2V0dGluZyBkYXRhIGZyb20KLQkgKiB0aGUgQVAgcmlnaHQgYXdheS4gSWYgd2UgZW50ZXIgUFNNIHRvbyBmYXN0IGFmdGVyIHRoaXMsIGFuZCBkYXRhCi0JICogcmVtYWlucyBvbiB0aGUgQVAsIHdlIHdpbGwgZ2V0IGFub3RoZXIgZXZlbnQgbGlrZSB0aGlzLCBhbmQgd2UnbGwKLQkgKiBnbyBpbnRvIGFjdGl2ZSBvbmNlIG1vcmUuCi0JICovCi19Ci0KLXN0YXRpYyBpbnQgd2wxMjcxX2V2ZW50X3BzX3JlcG9ydChzdHJ1Y3Qgd2wxMjcxICp3bCwKLQkJCQkgIHN0cnVjdCBldmVudF9tYWlsYm94ICptYm94LAotCQkJCSAgYm9vbCAqYmVhY29uX2xvc3MpCi17Ci0JaW50IHJldCA9IDA7Ci0JdTMyIHRvdGFsX3JldHJpZXMgPSB3bC0+Y29uZi5jb25uLnBzbV9lbnRyeV9yZXRyaWVzOwotCi0Jd2wxMjcxX2RlYnVnKERFQlVHX0VWRU5ULCAicHNfc3RhdHVzOiAweCV4IiwgbWJveC0+cHNfc3RhdHVzKTsKLQotCXN3aXRjaCAobWJveC0+cHNfc3RhdHVzKSB7Ci0JY2FzZSBFVkVOVF9FTlRFUl9QT1dFUl9TQVZFX0ZBSUw6Ci0JCXdsMTI3MV9kZWJ1ZyhERUJVR19QU00sICJQU00gZW50cnkgZmFpbGVkIik7Ci0KLQkJaWYgKCF0ZXN0X2JpdChXTDEyNzFfRkxBR19QU00sICZ3bC0+ZmxhZ3MpKSB7Ci0JCQkvKiByZW1haW4gaW4gYWN0aXZlIG1vZGUgKi8KLQkJCXdsLT5wc21fZW50cnlfcmV0cnkgPSAwOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlpZiAod2wtPnBzbV9lbnRyeV9yZXRyeSA8IHRvdGFsX3JldHJpZXMpIHsKLQkJCXdsLT5wc21fZW50cnlfcmV0cnkrKzsKLQkJCXJldCA9IHdsMTI3MV9wc19zZXRfbW9kZSh3bCwgU1RBVElPTl9QT1dFUl9TQVZFX01PREUsCi0JCQkJCQkgd2wtPmJhc2ljX3JhdGUsIHRydWUpOwotCQl9IGVsc2UgewotCQkJd2wxMjcxX2luZm8oIk5vIGFjayB0byBudWxsZnVuYyBmcm9tIEFQLiIpOwotCQkJd2wtPnBzbV9lbnRyeV9yZXRyeSA9IDA7Ci0JCQkqYmVhY29uX2xvc3MgPSB0cnVlOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgRVZFTlRfRU5URVJfUE9XRVJfU0FWRV9TVUNDRVNTOgotCQl3bC0+cHNtX2VudHJ5X3JldHJ5ID0gMDsKLQotCQkvKiBlbmFibGUgYmVhY29uIGZpbHRlcmluZyAqLwotCQlyZXQgPSB3bDEyNzFfYWN4X2JlYWNvbl9maWx0ZXJfb3B0KHdsLCB0cnVlKTsKLQkJaWYgKHJldCA8IDApCi0JCQlicmVhazsKLQotCQkvKiBlbmFibGUgYmVhY29uIGVhcmx5IHRlcm1pbmF0aW9uICovCi0JCXJldCA9IHdsMTI3MV9hY3hfYmV0X2VuYWJsZSh3bCwgdHJ1ZSk7Ci0JCWlmIChyZXQgPCAwKQotCQkJYnJlYWs7Ci0KLQkJLyogZ28gdG8gZXh0cmVtZWx5IGxvdyBwb3dlciBtb2RlICovCi0JCXdsMTI3MV9wc19lbHBfc2xlZXAod2wpOwotCQlpZiAocmV0IDwgMCkKLQkJCWJyZWFrOwotCQlicmVhazsKLQljYXNlIEVWRU5UX0VYSVRfUE9XRVJfU0FWRV9GQUlMOgotCQl3bDEyNzFfZGVidWcoREVCVUdfUFNNLCAiUFNNIGV4aXQgZmFpbGVkIik7Ci0KLQkJaWYgKHRlc3RfYml0KFdMMTI3MV9GTEFHX1BTTSwgJndsLT5mbGFncykpIHsKLQkJCXdsLT5wc21fZW50cnlfcmV0cnkgPSAwOwotCQkJYnJlYWs7Ci0JCX0KLQotCQkvKiBtYWtlIHN1cmUgdGhlIGZpcm13YXJlIGdvZXMgdG8gYWN0aXZlIG1vZGUgLSB0aGUgZnJhbWUgdG8KLQkJICAgYmUgc2VudCBuZXh0IHdpbGwgaW5kaWNhdGUgdG8gdGhlIEFQLCB0aGF0IHdlIGFyZSBhY3RpdmUuICovCi0JCXJldCA9IHdsMTI3MV9wc19zZXRfbW9kZSh3bCwgU1RBVElPTl9BQ1RJVkVfTU9ERSwKLQkJCQkJIHdsLT5iYXNpY19yYXRlLCBmYWxzZSk7Ci0JCWJyZWFrOwotCWNhc2UgRVZFTlRfRVhJVF9QT1dFUl9TQVZFX1NVQ0NFU1M6Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgd2wxMjcxX2V2ZW50X3Jzc2lfdHJpZ2dlcihzdHJ1Y3Qgd2wxMjcxICp3bCwKLQkJCQkgICAgICBzdHJ1Y3QgZXZlbnRfbWFpbGJveCAqbWJveCkKLXsKLQllbnVtIG5sODAyMTFfY3FtX3Jzc2lfdGhyZXNob2xkX2V2ZW50IGV2ZW50OwotCXM4IG1ldHJpYyA9IG1ib3gtPnJzc2lfc25yX3RyaWdnZXJfbWV0cmljWzBdOwotCi0Jd2wxMjcxX2RlYnVnKERFQlVHX0VWRU5ULCAiUlNTSSB0cmlnZ2VyIG1ldHJpYzogJWQiLCBtZXRyaWMpOwotCi0JaWYgKG1ldHJpYyA8PSB3bC0+cnNzaV90aG9sZCkKLQkJZXZlbnQgPSBOTDgwMjExX0NRTV9SU1NJX1RIUkVTSE9MRF9FVkVOVF9MT1c7Ci0JZWxzZQotCQlldmVudCA9IE5MODAyMTFfQ1FNX1JTU0lfVEhSRVNIT0xEX0VWRU5UX0hJR0g7Ci0KLQlpZiAoZXZlbnQgIT0gd2wtPmxhc3RfcnNzaV9ldmVudCkKLQkJaWVlZTgwMjExX2NxbV9yc3NpX25vdGlmeSh3bC0+dmlmLCBldmVudCwgR0ZQX0tFUk5FTCk7Ci0Jd2wtPmxhc3RfcnNzaV9ldmVudCA9IGV2ZW50OwotfQotCi1zdGF0aWMgdm9pZCB3bDEyNzFfZXZlbnRfbWJveF9kdW1wKHN0cnVjdCBldmVudF9tYWlsYm94ICptYm94KQotewotCXdsMTI3MV9kZWJ1ZyhERUJVR19FVkVOVCwgIk1CT1ggRFVNUDoiKTsKLQl3bDEyNzFfZGVidWcoREVCVUdfRVZFTlQsICJcdHZlY3RvcjogMHgleCIsIG1ib3gtPmV2ZW50c192ZWN0b3IpOwotCXdsMTI3MV9kZWJ1ZyhERUJVR19FVkVOVCwgIlx0bWFzazogMHgleCIsIG1ib3gtPmV2ZW50c19tYXNrKTsKLX0KLQotc3RhdGljIGludCB3bDEyNzFfZXZlbnRfcHJvY2VzcyhzdHJ1Y3Qgd2wxMjcxICp3bCwgc3RydWN0IGV2ZW50X21haWxib3ggKm1ib3gpCi17Ci0JaW50IHJldDsKLQl1MzIgdmVjdG9yOwotCWJvb2wgYmVhY29uX2xvc3MgPSBmYWxzZTsKLQotCXdsMTI3MV9ldmVudF9tYm94X2R1bXAobWJveCk7Ci0KLQl2ZWN0b3IgPSBsZTMyX3RvX2NwdShtYm94LT5ldmVudHNfdmVjdG9yKTsKLQl2ZWN0b3IgJj0gfihsZTMyX3RvX2NwdShtYm94LT5ldmVudHNfbWFzaykpOwotCXdsMTI3MV9kZWJ1ZyhERUJVR19FVkVOVCwgInZlY3RvcjogMHgleCIsIHZlY3Rvcik7Ci0KLQlpZiAodmVjdG9yICYgU0NBTl9DT01QTEVURV9FVkVOVF9JRCkgewotCQl3bDEyNzFfZGVidWcoREVCVUdfRVZFTlQsICJzdGF0dXM6IDB4JXgiLAotCQkJICAgICBtYm94LT5zY2hlZHVsZWRfc2Nhbl9zdGF0dXMpOwotCi0JCXdsMTI3MV9zY2FuX3N0bSh3bCk7Ci0JfQotCi0JLyogZGlzYWJsZSBkeW5hbWljIFBTIHdoZW4gcmVxdWVzdGVkIGJ5IHRoZSBmaXJtd2FyZSAqLwotCWlmICh2ZWN0b3IgJiBTT0ZUX0dFTUlOSV9TRU5TRV9FVkVOVF9JRCAmJgotCSAgICB3bC0+YnNzX3R5cGUgPT0gQlNTX1RZUEVfU1RBX0JTUykgewotCQlpZiAobWJveC0+c29mdF9nZW1pbmlfc2Vuc2VfaW5mbykKLQkJCWllZWU4MDIxMV9kaXNhYmxlX2R5bl9wcyh3bC0+dmlmKTsKLQkJZWxzZQotCQkJaWVlZTgwMjExX2VuYWJsZV9keW5fcHMod2wtPnZpZik7Ci0JfQotCi0JLyoKLQkgKiBUaGUgQlNTX0xPU0VfRVZFTlRfSUQgaXMgb25seSBuZWVkZWQgd2hpbGUgcHNtIChhbmQgaGVuY2UgYmVhY29uCi0JICogZmlsdGVyaW5nKSBpcyBlbmFibGVkLiBXaXRob3V0IFBTTSwgdGhlIHN0YWNrIHdpbGwgcmVjZWl2ZSBhbGwKLQkgKiBiZWFjb25zIGFuZCBjYW4gZGV0ZWN0IGJlYWNvbiBsb3NzIGJ5IGl0c2VsZi4KLQkgKgotCSAqIEFzIHRoZXJlJ3MgcG9zc2liaWxpdHkgdGhhdCB0aGUgZHJpdmVyIGRpc2FibGVzIFBTTSBiZWZvcmUgcmVjZWl2aW5nCi0JICogQlNTX0xPU0VfRVZFTlQsIGJlYWNvbiBsb3NzIGhhcyB0byBiZSByZXBvcnRlZCB0byB0aGUgc3RhY2suCi0JICoKLQkgKi8KLQlpZiAodmVjdG9yICYgQlNTX0xPU0VfRVZFTlRfSUQpIHsKLQkJd2wxMjcxX2luZm8oIkJlYWNvbiBsb3NzIGRldGVjdGVkLiIpOwotCi0JCS8qIGluZGljYXRlIHRvIHRoZSBzdGFjaywgdGhhdCBiZWFjb25zIGhhdmUgYmVlbiBsb3N0ICovCi0JCWJlYWNvbl9sb3NzID0gdHJ1ZTsKLQl9Ci0KLQlpZiAodmVjdG9yICYgUFNfUkVQT1JUX0VWRU5UX0lEKSB7Ci0JCXdsMTI3MV9kZWJ1ZyhERUJVR19FVkVOVCwgIlBTX1JFUE9SVF9FVkVOVCIpOwotCQlyZXQgPSB3bDEyNzFfZXZlbnRfcHNfcmVwb3J0KHdsLCBtYm94LCAmYmVhY29uX2xvc3MpOwotCQlpZiAocmV0IDwgMCkKLQkJCXJldHVybiByZXQ7Ci0JfQotCi0JaWYgKHZlY3RvciAmIFBTUE9MTF9ERUxJVkVSWV9GQUlMVVJFX0VWRU5UX0lEKQotCQl3bDEyNzFfZXZlbnRfcHNwb2xsX2RlbGl2ZXJ5X2ZhaWwod2wpOwotCi0JaWYgKHZlY3RvciAmIFJTU0lfU05SX1RSSUdHRVJfMF9FVkVOVF9JRCkgewotCQl3bDEyNzFfZGVidWcoREVCVUdfRVZFTlQsICJSU1NJX1NOUl9UUklHR0VSXzBfRVZFTlQiKTsKLQkJaWYgKHdsLT52aWYpCi0JCQl3bDEyNzFfZXZlbnRfcnNzaV90cmlnZ2VyKHdsLCBtYm94KTsKLQl9Ci0KLQlpZiAod2wtPnZpZiAmJiBiZWFjb25fbG9zcykKLQkJaWVlZTgwMjExX2Nvbm5lY3Rpb25fbG9zcyh3bC0+dmlmKTsKLQotCXJldHVybiAwOwotfQotCi1pbnQgd2wxMjcxX2V2ZW50X3VubWFzayhzdHJ1Y3Qgd2wxMjcxICp3bCkKLXsKLQlpbnQgcmV0OwotCi0JcmV0ID0gd2wxMjcxX2FjeF9ldmVudF9tYm94X21hc2sod2wsIH4od2wtPmV2ZW50X21hc2spKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldHVybiAwOwotfQotCi12b2lkIHdsMTI3MV9ldmVudF9tYm94X2NvbmZpZyhzdHJ1Y3Qgd2wxMjcxICp3bCkKLXsKLQl3bC0+bWJveF9wdHJbMF0gPSB3bDEyNzFfcmVhZDMyKHdsLCBSRUdfRVZFTlRfTUFJTEJPWF9QVFIpOwotCXdsLT5tYm94X3B0clsxXSA9IHdsLT5tYm94X3B0clswXSArIHNpemVvZihzdHJ1Y3QgZXZlbnRfbWFpbGJveCk7Ci0KLQl3bDEyNzFfZGVidWcoREVCVUdfRVZFTlQsICJNQk9YIHB0cnM6IDB4JXggMHgleCIsCi0JCSAgICAgd2wtPm1ib3hfcHRyWzBdLCB3bC0+bWJveF9wdHJbMV0pOwotfQotCi1pbnQgd2wxMjcxX2V2ZW50X2hhbmRsZShzdHJ1Y3Qgd2wxMjcxICp3bCwgdTggbWJveF9udW0pCi17Ci0Jc3RydWN0IGV2ZW50X21haWxib3ggbWJveDsKLQlpbnQgcmV0OwotCi0Jd2wxMjcxX2RlYnVnKERFQlVHX0VWRU5ULCAiRVZFTlQgb24gbWJveCAlZCIsIG1ib3hfbnVtKTsKLQotCWlmIChtYm94X251bSA+IDEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JLyogZmlyc3Qgd2UgcmVhZCB0aGUgbWJveCBkZXNjcmlwdG9yICovCi0Jd2wxMjcxX3JlYWQod2wsIHdsLT5tYm94X3B0clttYm94X251bV0sICZtYm94LAotCQkgICAgc2l6ZW9mKHN0cnVjdCBldmVudF9tYWlsYm94KSwgZmFsc2UpOwotCi0JLyogcHJvY2VzcyB0aGUgZGVzY3JpcHRvciAqLwotCXJldCA9IHdsMTI3MV9ldmVudF9wcm9jZXNzKHdsLCAmbWJveCk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQkvKiB0aGVuIHdlIGxldCB0aGUgZmlybXdhcmUga25vdyBpdCBjYW4gZ28gb24uLi4qLwotCXdsMTI3MV93cml0ZTMyKHdsLCBBQ1hfUkVHX0lOVEVSUlVQVF9UUklHLCBJTlRSX1RSSUdfRVZFTlRfQUNLKTsKLQotCXJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9ldmVudC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9ldmVudC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNDc1MTY2Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfZXZlbnQuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyNiArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMjcxCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk4LTIwMDkgVGV4YXMgSW5zdHJ1bWVudHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgotICoKLSAqIENvbnRhY3Q6IEx1Y2lhbm8gQ29lbGhvIDxsdWNpYW5vLmNvZWxob0Bub2tpYS5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0gKiAwMjExMC0xMzAxIFVTQQotICoKLSAqLwotCi0jaWZuZGVmIF9fV0wxMjcxX0VWRU5UX0hfXwotI2RlZmluZSBfX1dMMTI3MV9FVkVOVF9IX18KLQotLyoKLSAqIE1ib3ggZXZlbnRzCi0gKgotICogVGhlIGV2ZW50IG1lY2hhbmlzbSBpcyBiYXNlZCBvbiBhIHBhaXIgb2YgZXZlbnQgYnVmZmVycyAoYnVmZmVycyBBIGFuZAotICogQikgYXQgZml4ZWQgbG9jYXRpb25zIGluIHRoZSB0YXJnZXQncyBtZW1vcnkuIFRoZSBob3N0IHByb2Nlc3NlcyBvbmUKLSAqIGJ1ZmZlciB3aGlsZSB0aGUgb3RoZXIgYnVmZmVyIGNvbnRpbnVlcyB0byBjb2xsZWN0IGV2ZW50cy4gSWYgdGhlIGhvc3QKLSAqIGlzIG5vdCBwcm9jZXNzaW5nIGV2ZW50cywgYW4gaW50ZXJydXB0IGlzIGlzc3VlZCB0byBzaWduYWwgdGhhdCBhIGJ1ZmZlcgotICogaXMgcmVhZHkuIE9uY2UgdGhlIGhvc3QgaXMgZG9uZSB3aXRoIHByb2Nlc3NpbmcgZXZlbnRzIGZyb20gb25lIGJ1ZmZlciwKLSAqIGl0IHNpZ25hbHMgdGhlIHRhcmdldCAod2l0aCBhbiBBQ0sgaW50ZXJydXB0KSB0aGF0IHRoZSBldmVudCBidWZmZXIgaXMKLSAqIGZyZWUuCi0gKi8KLQotZW51bSB7Ci0JUlNTSV9TTlJfVFJJR0dFUl8wX0VWRU5UX0lEICAgICAgICAgICAgICA9IEJJVCgwKSwKLQlSU1NJX1NOUl9UUklHR0VSXzFfRVZFTlRfSUQgICAgICAgICAgICAgID0gQklUKDEpLAotCVJTU0lfU05SX1RSSUdHRVJfMl9FVkVOVF9JRCAgICAgICAgICAgICAgPSBCSVQoMiksCi0JUlNTSV9TTlJfVFJJR0dFUl8zX0VWRU5UX0lEICAgICAgICAgICAgICA9IEJJVCgzKSwKLQlSU1NJX1NOUl9UUklHR0VSXzRfRVZFTlRfSUQgICAgICAgICAgICAgID0gQklUKDQpLAotCVJTU0lfU05SX1RSSUdHRVJfNV9FVkVOVF9JRCAgICAgICAgICAgICAgPSBCSVQoNSksCi0JUlNTSV9TTlJfVFJJR0dFUl82X0VWRU5UX0lEICAgICAgICAgICAgICA9IEJJVCg2KSwKLQlSU1NJX1NOUl9UUklHR0VSXzdfRVZFTlRfSUQgICAgICAgICAgICAgID0gQklUKDcpLAotCU1FQVNVUkVNRU5UX1NUQVJUX0VWRU5UX0lECQkgPSBCSVQoOCksCi0JTUVBU1VSRU1FTlRfQ09NUExFVEVfRVZFTlRfSUQJCSA9IEJJVCg5KSwKLQlTQ0FOX0NPTVBMRVRFX0VWRU5UX0lECQkJID0gQklUKDEwKSwKLQlTQ0hFRFVMRURfU0NBTl9DT01QTEVURV9FVkVOVF9JRAkgPSBCSVQoMTEpLAotCUFQX0RJU0NPVkVSWV9DT01QTEVURV9FVkVOVF9JRAkJID0gQklUKDEyKSwKLQlQU19SRVBPUlRfRVZFTlRfSUQJCQkgPSBCSVQoMTMpLAotCVBTUE9MTF9ERUxJVkVSWV9GQUlMVVJFX0VWRU5UX0lECSA9IEJJVCgxNCksCi0JRElTQ09OTkVDVF9FVkVOVF9DT01QTEVURV9JRAkJID0gQklUKDE1KSwKLQlKT0lOX0VWRU5UX0NPTVBMRVRFX0lECQkJID0gQklUKDE2KSwKLQlDSEFOTkVMX1NXSVRDSF9DT01QTEVURV9FVkVOVF9JRAkgPSBCSVQoMTcpLAotCUJTU19MT1NFX0VWRU5UX0lECQkJID0gQklUKDE4KSwKLQlSRUdBSU5FRF9CU1NfRVZFTlRfSUQJCQkgPSBCSVQoMTkpLAotCVJPQU1JTkdfVFJJR0dFUl9NQVhfVFhfUkVUUllfRVZFTlRfSUQJID0gQklUKDIwKSwKLQlTT0ZUX0dFTUlOSV9TRU5TRV9FVkVOVF9JRAkJID0gQklUKDIyKSwKLQlTT0ZUX0dFTUlOSV9QUkVESUNUSU9OX0VWRU5UX0lECQkgPSBCSVQoMjMpLAotCVNPRlRfR0VNSU5JX0FWQUxBTkNIRV9FVkVOVF9JRAkJID0gQklUKDI0KSwKLQlQTFRfUlhfQ0FMSUJSQVRJT05fQ09NUExFVEVfRVZFTlRfSUQJID0gQklUKDI1KSwKLQlEQkdfRVZFTlRfSUQJCQkJID0gQklUKDI2KSwKLQlIRUFMVEhfQ0hFQ0tfUkVQTFlfRVZFTlRfSUQJCSA9IEJJVCgyNyksCi0JUEVSSU9ESUNfU0NBTl9DT01QTEVURV9FVkVOVF9JRAkJID0gQklUKDI4KSwKLQlQRVJJT0RJQ19TQ0FOX1JFUE9SVF9FVkVOVF9JRAkJID0gQklUKDI5KSwKLQlCQV9TRVNTSU9OX1RFQVJfRE9XTl9FVkVOVF9JRAkJID0gQklUKDMwKSwKLQlFVkVOVF9NQk9YX0FMTF9FVkVOVF9JRAkJCSA9IDB4N2ZmZmZmZmYsCi19OwotCi1lbnVtIHsKLQlFVkVOVF9FTlRFUl9QT1dFUl9TQVZFX0ZBSUwgPSAwLAotCUVWRU5UX0VOVEVSX1BPV0VSX1NBVkVfU1VDQ0VTUywKLQlFVkVOVF9FWElUX1BPV0VSX1NBVkVfRkFJTCwKLQlFVkVOVF9FWElUX1BPV0VSX1NBVkVfU1VDQ0VTUywKLX07Ci0KLXN0cnVjdCBldmVudF9kZWJ1Z19yZXBvcnQgewotCXU4IGRlYnVnX2V2ZW50X2lkOwotCXU4IG51bV9wYXJhbXM7Ci0JX19sZTE2IHBhZDsKLQlfX2xlMzIgcmVwb3J0XzE7Ci0JX19sZTMyIHJlcG9ydF8yOwotCV9fbGUzMiByZXBvcnRfMzsKLX0gX19wYWNrZWQ7Ci0KLSNkZWZpbmUgTlVNX09GX1JTU0lfU05SX1RSSUdHRVJTIDgKLQotc3RydWN0IGV2ZW50X21haWxib3ggewotCV9fbGUzMiBldmVudHNfdmVjdG9yOwotCV9fbGUzMiBldmVudHNfbWFzazsKLQlfX2xlMzIgcmVzZXJ2ZWRfMTsKLQlfX2xlMzIgcmVzZXJ2ZWRfMjsKLQotCXU4IGRiZ19ldmVudF9pZDsKLQl1OCBudW1fcmVsZXZhbnRfcGFyYW1zOwotCV9fbGUxNiByZXNlcnZlZF8zOwotCV9fbGUzMiBldmVudF9yZXBvcnRfcDE7Ci0JX19sZTMyIGV2ZW50X3JlcG9ydF9wMjsKLQlfX2xlMzIgZXZlbnRfcmVwb3J0X3AzOwotCi0JdTggbnVtYmVyX29mX3NjYW5fcmVzdWx0czsKLQl1OCBzY2FuX3RhZzsKLQl1OCByZXNlcnZlZF80WzJdOwotCV9fbGUzMiBjb21wbF9zY2hlZHVsZWRfc2Nhbl9zdGF0dXM7Ci0KLQlfX2xlMTYgc2NoZWR1bGVkX3NjYW5fYXR0ZW5kZWRfY2hhbm5lbHM7Ci0JdTggc29mdF9nZW1pbmlfc2Vuc2VfaW5mbzsKLQl1OCBzb2Z0X2dlbWluaV9wcm90ZWN0aXZlX2luZm87Ci0JczggcnNzaV9zbnJfdHJpZ2dlcl9tZXRyaWNbTlVNX09GX1JTU0lfU05SX1RSSUdHRVJTXTsKLQl1OCBjaGFubmVsX3N3aXRjaF9zdGF0dXM7Ci0JdTggc2NoZWR1bGVkX3NjYW5fc3RhdHVzOwotCXU4IHBzX3N0YXR1czsKLQotCXU4IHJlc2VydmVkXzVbMjldOwotfSBfX3BhY2tlZDsKLQotaW50IHdsMTI3MV9ldmVudF91bm1hc2soc3RydWN0IHdsMTI3MSAqd2wpOwotdm9pZCB3bDEyNzFfZXZlbnRfbWJveF9jb25maWcoc3RydWN0IHdsMTI3MSAqd2wpOwotaW50IHdsMTI3MV9ldmVudF9oYW5kbGUoc3RydWN0IHdsMTI3MSAqd2wsIHU4IG1ib3gpOwotdm9pZCB3bDEyNzFfcHNwb2xsX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2luaS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9pbmkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjMxMzA0Ny4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2luaS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIzICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3bDEyNzEKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24KLSAqCi0gKiBDb250YWN0OiBMdWNpYW5vIENvZWxobyA8bHVjaWFuby5jb2VsaG9Abm9raWEuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQotICogMDIxMTAtMTMwMSBVU0EKLSAqCi0gKi8KLQotI2lmbmRlZiBfX1dMMTI3MV9JTklfSF9fCi0jZGVmaW5lIF9fV0wxMjcxX0lOSV9IX18KLQotI2RlZmluZSBXTDEyNzFfSU5JX01BWF9TTUFSVF9SRUZMRVhfUEFSQU0gMTYKLQotc3RydWN0IHdsMTI3MV9pbmlfZ2VuZXJhbF9wYXJhbXMgewotCXU4IHJlZl9jbG9jazsKLQl1OCBzZXR0bGluZ190aW1lOwotCXU4IGNsa192YWxpZF9vbl93YWtldXA7Ci0JdTggZGMyZGNfbW9kZTsKLQl1OCBkdWFsX21vZGVfc2VsZWN0OwotCXU4IHR4X2JpcF9mZW1fYXV0b19kZXRlY3Q7Ci0JdTggdHhfYmlwX2ZlbV9tYW51ZmFjdHVyZXI7Ci0JdTggZ2VuZXJhbF9zZXR0aW5nczsKLQl1OCBzcl9zdGF0ZTsKLQl1OCBzcmYxW1dMMTI3MV9JTklfTUFYX1NNQVJUX1JFRkxFWF9QQVJBTV07Ci0JdTggc3JmMltXTDEyNzFfSU5JX01BWF9TTUFSVF9SRUZMRVhfUEFSQU1dOwotCXU4IHNyZjNbV0wxMjcxX0lOSV9NQVhfU01BUlRfUkVGTEVYX1BBUkFNXTsKLX0gX19wYWNrZWQ7Ci0KLSNkZWZpbmUgV0wxMjcxX0lOSV9SU1NJX1BST0NFU1NfQ09NUEVOU19TSVpFIDE1Ci0KLXN0cnVjdCB3bDEyNzFfaW5pX2JhbmRfcGFyYW1zXzIgewotCXU4IHJ4X3RyYWNlX2luc2VydGlvbl9sb3NzOwotCXU4IHR4X3RyYWNlX2xvc3M7Ci0JdTggcnhfcnNzaV9wcm9jZXNzX2NvbXBlbnNbV0wxMjcxX0lOSV9SU1NJX1BST0NFU1NfQ09NUEVOU19TSVpFXTsKLX0gX19wYWNrZWQ7Ci0KLSNkZWZpbmUgV0wxMjcxX0lOSV9SQVRFX0dST1VQX0NPVU5UIDYKLSNkZWZpbmUgV0wxMjcxX0lOSV9DSEFOTkVMX0NPVU5UXzIgMTQKLQotc3RydWN0IHdsMTI3MV9pbmlfZmVtX3BhcmFtc18yIHsKLQlfX2xlMTYgdHhfYmlwX3JlZl9wZF92b2x0YWdlOwotCXU4IHR4X2JpcF9yZWZfcG93ZXI7Ci0JdTggdHhfYmlwX3JlZl9vZmZzZXQ7Ci0JdTggdHhfcGVyX3JhdGVfcHdyX2xpbWl0c19ub3JtYWxbV0wxMjcxX0lOSV9SQVRFX0dST1VQX0NPVU5UXTsKLQl1OCB0eF9wZXJfcmF0ZV9wd3JfbGltaXRzX2RlZ3JhZGVkW1dMMTI3MV9JTklfUkFURV9HUk9VUF9DT1VOVF07Ci0JdTggdHhfcGVyX3JhdGVfcHdyX2xpbWl0c19leHRyZW1lW1dMMTI3MV9JTklfUkFURV9HUk9VUF9DT1VOVF07Ci0JdTggdHhfcGVyX2NoYW5fcHdyX2xpbWl0c18xMWJbV0wxMjcxX0lOSV9DSEFOTkVMX0NPVU5UXzJdOwotCXU4IHR4X3Blcl9jaGFuX3B3cl9saW1pdHNfb2ZkbVtXTDEyNzFfSU5JX0NIQU5ORUxfQ09VTlRfMl07Ci0JdTggdHhfcGRfdnNfcmF0ZV9vZmZzZXRzW1dMMTI3MV9JTklfUkFURV9HUk9VUF9DT1VOVF07Ci0JdTggdHhfaWJpYXNbV0wxMjcxX0lOSV9SQVRFX0dST1VQX0NPVU5UXTsKLQl1OCByeF9mZW1faW5zZXJ0aW9uX2xvc3M7Ci0JdTggZGVncmFkZWRfbG93X3RvX25vcm1hbF90aHI7Ci0JdTggbm9ybWFsX3RvX2RlZ3JhZGVkX2hpZ2hfdGhyOwotfSBfX3BhY2tlZDsKLQotI2RlZmluZSBXTDEyNzFfSU5JX0NIQU5ORUxfQ09VTlRfNSAzNQotI2RlZmluZSBXTDEyNzFfSU5JX1NVQl9CQU5EX0NPVU5UXzUgNwotCi1zdHJ1Y3Qgd2wxMjcxX2luaV9iYW5kX3BhcmFtc181IHsKLQl1OCByeF90cmFjZV9pbnNlcnRpb25fbG9zc1tXTDEyNzFfSU5JX1NVQl9CQU5EX0NPVU5UXzVdOwotCXU4IHR4X3RyYWNlX2xvc3NbV0wxMjcxX0lOSV9TVUJfQkFORF9DT1VOVF81XTsKLQl1OCByeF9yc3NpX3Byb2Nlc3NfY29tcGVuc1tXTDEyNzFfSU5JX1JTU0lfUFJPQ0VTU19DT01QRU5TX1NJWkVdOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IHdsMTI3MV9pbmlfZmVtX3BhcmFtc181IHsKLQlfX2xlMTYgdHhfYmlwX3JlZl9wZF92b2x0YWdlW1dMMTI3MV9JTklfU1VCX0JBTkRfQ09VTlRfNV07Ci0JdTggdHhfYmlwX3JlZl9wb3dlcltXTDEyNzFfSU5JX1NVQl9CQU5EX0NPVU5UXzVdOwotCXU4IHR4X2JpcF9yZWZfb2Zmc2V0W1dMMTI3MV9JTklfU1VCX0JBTkRfQ09VTlRfNV07Ci0JdTggdHhfcGVyX3JhdGVfcHdyX2xpbWl0c19ub3JtYWxbV0wxMjcxX0lOSV9SQVRFX0dST1VQX0NPVU5UXTsKLQl1OCB0eF9wZXJfcmF0ZV9wd3JfbGltaXRzX2RlZ3JhZGVkW1dMMTI3MV9JTklfUkFURV9HUk9VUF9DT1VOVF07Ci0JdTggdHhfcGVyX3JhdGVfcHdyX2xpbWl0c19leHRyZW1lW1dMMTI3MV9JTklfUkFURV9HUk9VUF9DT1VOVF07Ci0JdTggdHhfcGVyX2NoYW5fcHdyX2xpbWl0c19vZmRtW1dMMTI3MV9JTklfQ0hBTk5FTF9DT1VOVF81XTsKLQl1OCB0eF9wZF92c19yYXRlX29mZnNldHNbV0wxMjcxX0lOSV9SQVRFX0dST1VQX0NPVU5UXTsKLQl1OCB0eF9pYmlhc1tXTDEyNzFfSU5JX1JBVEVfR1JPVVBfQ09VTlRdOwotCXU4IHJ4X2ZlbV9pbnNlcnRpb25fbG9zc1tXTDEyNzFfSU5JX1NVQl9CQU5EX0NPVU5UXzVdOwotCXU4IGRlZ3JhZGVkX2xvd190b19ub3JtYWxfdGhyOwotCXU4IG5vcm1hbF90b19kZWdyYWRlZF9oaWdoX3RocjsKLX0gX19wYWNrZWQ7Ci0KLQotLyogTlZTIGRhdGEgc3RydWN0dXJlICovCi0jZGVmaW5lIFdMMTI3MV9JTklfTlZTX1NFQ1RJT05fU0laRQkJICAgICA0NjgKLSNkZWZpbmUgV0wxMjcxX0lOSV9GRU1fTU9EVUxFX0NPVU5UICAgICAgICAgICAgICAgICAgMgotCi0jZGVmaW5lIFdMMTI3MV9JTklfTEVHQUNZX05WU19GSUxFX1NJWkUgICAgICAgICAgICAgIDgwMAotCi1zdHJ1Y3Qgd2wxMjcxX252c19maWxlIHsKLQkvKiBOVlMgc2VjdGlvbiAqLwotCXU4IG52c1tXTDEyNzFfSU5JX05WU19TRUNUSU9OX1NJWkVdOwotCi0JLyogSU5JIHNlY3Rpb24gKi8KLQlzdHJ1Y3Qgd2wxMjcxX2luaV9nZW5lcmFsX3BhcmFtcyBnZW5lcmFsX3BhcmFtczsKLQl1OCBwYWRkaW5nMTsKLQlzdHJ1Y3Qgd2wxMjcxX2luaV9iYW5kX3BhcmFtc18yIHN0YXRfcmFkaW9fcGFyYW1zXzI7Ci0JdTggcGFkZGluZzI7Ci0Jc3RydWN0IHsKLQkJc3RydWN0IHdsMTI3MV9pbmlfZmVtX3BhcmFtc18yIHBhcmFtczsKLQkJdTggcGFkZGluZzsKLQl9IGR5bl9yYWRpb19wYXJhbXNfMltXTDEyNzFfSU5JX0ZFTV9NT0RVTEVfQ09VTlRdOwotCXN0cnVjdCB3bDEyNzFfaW5pX2JhbmRfcGFyYW1zXzUgc3RhdF9yYWRpb19wYXJhbXNfNTsKLQl1OCBwYWRkaW5nMzsKLQlzdHJ1Y3QgewotCQlzdHJ1Y3Qgd2wxMjcxX2luaV9mZW1fcGFyYW1zXzUgcGFyYW1zOwotCQl1OCBwYWRkaW5nOwotCX0gZHluX3JhZGlvX3BhcmFtc181W1dMMTI3MV9JTklfRkVNX01PRFVMRV9DT1VOVF07Ci19IF9fcGFja2VkOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfaW5pdC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9pbml0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwNDRiYmEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9pbml0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNjkgKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdsMTI3MQotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgotICoKLSAqIENvbnRhY3Q6IEx1Y2lhbm8gQ29lbGhvIDxsdWNpYW5vLmNvZWxob0Bub2tpYS5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0gKiAwMjExMC0xMzAxIFVTQQotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotCi0jaW5jbHVkZSAid2wxMjcxX2luaXQuaCIKLSNpbmNsdWRlICJ3bDEyeHhfODAyMTEuaCIKLSNpbmNsdWRlICJ3bDEyNzFfYWN4LmgiCi0jaW5jbHVkZSAid2wxMjcxX2NtZC5oIgotI2luY2x1ZGUgIndsMTI3MV9yZWcuaCIKLQotc3RhdGljIGludCB3bDEyNzFfaW5pdF9od2VuY19jb25maWcoc3RydWN0IHdsMTI3MSAqd2wpCi17Ci0JaW50IHJldDsKLQotCXJldCA9IHdsMTI3MV9hY3hfZmVhdHVyZV9jZmcod2wpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXdsMTI3MV93YXJuaW5nKCJjb3VsZG4ndCBzZXQgZmVhdHVyZSBjb25maWciKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlyZXQgPSB3bDEyNzFfY21kX3NldF9kZWZhdWx0X3dlcF9rZXkod2wsIHdsLT5kZWZhdWx0X2tleSk7Ci0JaWYgKHJldCA8IDApIHsKLQkJd2wxMjcxX3dhcm5pbmcoImNvdWxkbid0IHNldCBkZWZhdWx0IGtleSIpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXJldHVybiAwOwotfQotCi1pbnQgd2wxMjcxX2luaXRfdGVtcGxhdGVzX2NvbmZpZyhzdHJ1Y3Qgd2wxMjcxICp3bCkKLXsKLQlpbnQgcmV0LCBpOwotCXNpemVfdCBzaXplOwotCi0JLyogc2VuZCBlbXB0eSB0ZW1wbGF0ZXMgZm9yIGZ3IG1lbW9yeSByZXNlcnZhdGlvbiAqLwotCXJldCA9IHdsMTI3MV9jbWRfdGVtcGxhdGVfc2V0KHdsLCBDTURfVEVNUExfQ0ZHX1BST0JFX1JFUV8yXzQsIE5VTEwsCi0JCQkJICAgICAgc2l6ZW9mKHN0cnVjdCB3bDEyeHhfcHJvYmVfcmVxX3RlbXBsYXRlKSwKLQkJCQkgICAgICAwLCBXTDEyNzFfUkFURV9BVVRPTUFUSUMpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0Jc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgd2wxMnh4X3Byb2JlX3JlcV90ZW1wbGF0ZSk7Ci0JcmV0ID0gd2wxMjcxX2NtZF90ZW1wbGF0ZV9zZXQod2wsIENNRF9URU1QTF9DRkdfUFJPQkVfUkVRXzUsCi0JCQkJICAgICAgTlVMTCwgc2l6ZSwgMCwKLQkJCQkgICAgICBXTDEyNzFfUkFURV9BVVRPTUFUSUMpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JcmV0ID0gd2wxMjcxX2NtZF90ZW1wbGF0ZV9zZXQod2wsIENNRF9URU1QTF9OVUxMX0RBVEEsIE5VTEwsCi0JCQkJICAgICAgc2l6ZW9mKHN0cnVjdCB3bDEyeHhfbnVsbF9kYXRhX3RlbXBsYXRlKSwKLQkJCQkgICAgICAwLCBXTDEyNzFfUkFURV9BVVRPTUFUSUMpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JcmV0ID0gd2wxMjcxX2NtZF90ZW1wbGF0ZV9zZXQod2wsIENNRF9URU1QTF9QU19QT0xMLCBOVUxMLAotCQkJCSAgICAgIHNpemVvZihzdHJ1Y3Qgd2wxMnh4X3BzX3BvbGxfdGVtcGxhdGUpLAotCQkJCSAgICAgIDAsIFdMMTI3MV9SQVRFX0FVVE9NQVRJQyk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSB3bDEyNzFfY21kX3RlbXBsYXRlX3NldCh3bCwgQ01EX1RFTVBMX1FPU19OVUxMX0RBVEEsIE5VTEwsCi0JCQkJICAgICAgc2l6ZW9mCi0JCQkJICAgICAgKHN0cnVjdCB3bDEyeHhfcW9zX251bGxfZGF0YV90ZW1wbGF0ZSksCi0JCQkJICAgICAgMCwgV0wxMjcxX1JBVEVfQVVUT01BVElDKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IHdsMTI3MV9jbWRfdGVtcGxhdGVfc2V0KHdsLCBDTURfVEVNUExfUFJPQkVfUkVTUE9OU0UsIE5VTEwsCi0JCQkJICAgICAgc2l6ZW9mCi0JCQkJICAgICAgKHN0cnVjdCB3bDEyeHhfcHJvYmVfcmVzcF90ZW1wbGF0ZSksCi0JCQkJICAgICAgMCwgV0wxMjcxX1JBVEVfQVVUT01BVElDKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IHdsMTI3MV9jbWRfdGVtcGxhdGVfc2V0KHdsLCBDTURfVEVNUExfQkVBQ09OLCBOVUxMLAotCQkJCSAgICAgIHNpemVvZgotCQkJCSAgICAgIChzdHJ1Y3Qgd2wxMnh4X2JlYWNvbl90ZW1wbGF0ZSksCi0JCQkJICAgICAgMCwgV0wxMjcxX1JBVEVfQVVUT01BVElDKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCWZvciAoaSA9IDA7IGkgPCBDTURfVEVNUExfS0xWX0lEWF9NQVg7IGkrKykgewotCQlyZXQgPSB3bDEyNzFfY21kX3RlbXBsYXRlX3NldCh3bCwgQ01EX1RFTVBMX0tMViwgTlVMTCwKLQkJCQkJICAgICAgV0wxMjcxX0NNRF9URU1QTF9NQVhfU0laRSwgaSwKLQkJCQkJICAgICAgV0wxMjcxX1JBVEVfQVVUT01BVElDKTsKLQkJaWYgKHJldCA8IDApCi0JCQlyZXR1cm4gcmV0OwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHdsMTI3MV9pbml0X3J4X2NvbmZpZyhzdHJ1Y3Qgd2wxMjcxICp3bCwgdTMyIGNvbmZpZywgdTMyIGZpbHRlcikKLXsKLQlpbnQgcmV0OwotCi0JcmV0ID0gd2wxMjcxX2FjeF9yeF9tc2R1X2xpZmVfdGltZSh3bCk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSB3bDEyNzFfYWN4X3J4X2NvbmZpZyh3bCwgY29uZmlnLCBmaWx0ZXIpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCB3bDEyNzFfaW5pdF9waHlfY29uZmlnKHN0cnVjdCB3bDEyNzEgKndsKQotewotCWludCByZXQ7Ci0KLQlyZXQgPSB3bDEyNzFfYWN4X3BkX3RocmVzaG9sZCh3bCk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSB3bDEyNzFfYWN4X3Nsb3Qod2wsIERFRkFVTFRfU0xPVF9USU1FKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IHdsMTI3MV9hY3hfZ3JvdXBfYWRkcmVzc190Ymwod2wsIHRydWUsIE5VTEwsIDApOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JcmV0ID0gd2wxMjcxX2FjeF9zZXJ2aWNlX3BlcmlvZF90aW1lb3V0KHdsKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IHdsMTI3MV9hY3hfcnRzX3RocmVzaG9sZCh3bCwgd2wtPmNvbmYucngucnRzX3RocmVzaG9sZCk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB3bDEyNzFfaW5pdF9iZWFjb25fZmlsdGVyKHN0cnVjdCB3bDEyNzEgKndsKQotewotCWludCByZXQ7Ci0KLQkvKiBkaXNhYmxlIGJlYWNvbiBmaWx0ZXJpbmcgYXQgdGhpcyBzdGFnZSAqLwotCXJldCA9IHdsMTI3MV9hY3hfYmVhY29uX2ZpbHRlcl9vcHQod2wsIGZhbHNlKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IHdsMTI3MV9hY3hfYmVhY29uX2ZpbHRlcl90YWJsZSh3bCk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IHdsMTI3MV9pbml0X3B0YShzdHJ1Y3Qgd2wxMjcxICp3bCkKLXsKLQlpbnQgcmV0OwotCi0JcmV0ID0gd2wxMjcxX2FjeF9zZ19jZmcod2wpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JcmV0ID0gd2wxMjcxX2FjeF9zZ19lbmFibGUod2wsIHdsLT5zZ19lbmFibGVkKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldHVybiAwOwotfQotCi1pbnQgd2wxMjcxX2luaXRfZW5lcmd5X2RldGVjdGlvbihzdHJ1Y3Qgd2wxMjcxICp3bCkKLXsKLQlpbnQgcmV0OwotCi0JcmV0ID0gd2wxMjcxX2FjeF9jY2FfdGhyZXNob2xkKHdsKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHdsMTI3MV9pbml0X2JlYWNvbl9icm9hZGNhc3Qoc3RydWN0IHdsMTI3MSAqd2wpCi17Ci0JaW50IHJldDsKLQotCXJldCA9IHdsMTI3MV9hY3hfYmNuX2R0aW1fb3B0aW9ucyh3bCk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IHdsMTI3MV9od19pbml0KHN0cnVjdCB3bDEyNzEgKndsKQotewotCXN0cnVjdCBjb25mX3R4X2FjX2NhdGVnb3J5ICpjb25mX2FjOwotCXN0cnVjdCBjb25mX3R4X3RpZCAqY29uZl90aWQ7Ci0JaW50IHJldCwgaTsKLQotCXJldCA9IHdsMTI3MV9jbWRfZ2VuZXJhbF9wYXJtcyh3bCk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSB3bDEyNzFfY21kX3JhZGlvX3Bhcm1zKHdsKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IHdsMTI3MV9jbWRfZXh0X3JhZGlvX3Bhcm1zKHdsKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCS8qIFRlbXBsYXRlIHNldHRpbmdzICovCi0JcmV0ID0gd2wxMjcxX2luaXRfdGVtcGxhdGVzX2NvbmZpZyh3bCk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQkvKiBEZWZhdWx0IG1lbW9yeSBjb25maWd1cmF0aW9uICovCi0JcmV0ID0gd2wxMjcxX2FjeF9pbml0X21lbV9jb25maWcod2wpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JLyogUlggY29uZmlnICovCi0JcmV0ID0gd2wxMjcxX2luaXRfcnhfY29uZmlnKHdsLAotCQkJCSAgICBSWF9DRkdfUFJPTUlTQ1VPVVMgfCBSWF9DRkdfVFNGLAotCQkJCSAgICBSWF9GSUxURVJfT1BUSU9OX0RFRik7Ci0JLyogUlhfQ09ORklHX09QVElPTl9BTllfRFNUX0FOWV9CU1MsCi0JICAgUlhfRklMVEVSX09QVElPTl9GSUxURVJfQUxMKTsgKi8KLQlpZiAocmV0IDwgMCkKLQkJZ290byBvdXRfZnJlZV9tZW1tYXA7Ci0KLQkvKiBQSFkgbGF5ZXIgY29uZmlnICovCi0JcmV0ID0gd2wxMjcxX2luaXRfcGh5X2NvbmZpZyh3bCk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gb3V0X2ZyZWVfbWVtbWFwOwotCi0JcmV0ID0gd2wxMjcxX2FjeF9kY29faXRyaW1fcGFyYW1zKHdsKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBvdXRfZnJlZV9tZW1tYXA7Ci0KLQkvKiBJbml0aWFsaXplIGNvbm5lY3Rpb24gbW9uaXRvcmluZyB0aHJlc2hvbGRzICovCi0JcmV0ID0gd2wxMjcxX2FjeF9jb25uX21vbml0X3BhcmFtcyh3bCwgZmFsc2UpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dF9mcmVlX21lbW1hcDsKLQotCS8qIEJlYWNvbiBmaWx0ZXJpbmcgKi8KLQlyZXQgPSB3bDEyNzFfaW5pdF9iZWFjb25fZmlsdGVyKHdsKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBvdXRfZnJlZV9tZW1tYXA7Ci0KLQkvKiBDb25maWd1cmUgVFggcGF0Y2ggY29tcGxldGUgaW50ZXJydXB0IGJlaGF2aW9yICovCi0JcmV0ID0gd2wxMjcxX2FjeF90eF9jb25maWdfb3B0aW9ucyh3bCk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gb3V0X2ZyZWVfbWVtbWFwOwotCi0JLyogUlggY29tcGxldGUgaW50ZXJydXB0IHBhY2luZyAqLwotCXJldCA9IHdsMTI3MV9hY3hfaW5pdF9yeF9pbnRlcnJ1cHQod2wpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dF9mcmVlX21lbW1hcDsKLQotCS8qIEJsdWV0b290aCBXTEFOIGNvZXhpc3RlbmNlICovCi0JcmV0ID0gd2wxMjcxX2luaXRfcHRhKHdsKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBvdXRfZnJlZV9tZW1tYXA7Ci0KLQkvKiBFbmVyZ3kgZGV0ZWN0aW9uICovCi0JcmV0ID0gd2wxMjcxX2luaXRfZW5lcmd5X2RldGVjdGlvbih3bCk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gb3V0X2ZyZWVfbWVtbWFwOwotCi0JLyogQmVhY29ucyBhbmQgYm9yYWRjYXN0IHNldHRpbmdzICovCi0JcmV0ID0gd2wxMjcxX2luaXRfYmVhY29uX2Jyb2FkY2FzdCh3bCk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gb3V0X2ZyZWVfbWVtbWFwOwotCi0JLyogRGVmYXVsdCBmcmFnbWVudGF0aW9uIHRocmVzaG9sZCAqLwotCXJldCA9IHdsMTI3MV9hY3hfZnJhZ190aHJlc2hvbGQod2wpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dF9mcmVlX21lbW1hcDsKLQotCS8qIERlZmF1bHQgVElEL0FDIGNvbmZpZ3VyYXRpb24gKi8KLQlCVUdfT04od2wtPmNvbmYudHgudGlkX2NvbmZfY291bnQgIT0gd2wtPmNvbmYudHguYWNfY29uZl9jb3VudCk7Ci0JZm9yIChpID0gMDsgaSA8IHdsLT5jb25mLnR4LnRpZF9jb25mX2NvdW50OyBpKyspIHsKLQkJY29uZl9hYyA9ICZ3bC0+Y29uZi50eC5hY19jb25mW2ldOwotCQlyZXQgPSB3bDEyNzFfYWN4X2FjX2NmZyh3bCwgY29uZl9hYy0+YWMsIGNvbmZfYWMtPmN3X21pbiwKLQkJCQkJY29uZl9hYy0+Y3dfbWF4LCBjb25mX2FjLT5haWZzbiwKLQkJCQkJY29uZl9hYy0+dHhfb3BfbGltaXQpOwotCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gb3V0X2ZyZWVfbWVtbWFwOwotCi0JCWNvbmZfdGlkID0gJndsLT5jb25mLnR4LnRpZF9jb25mW2ldOwotCQlyZXQgPSB3bDEyNzFfYWN4X3RpZF9jZmcod2wsIGNvbmZfdGlkLT5xdWV1ZV9pZCwKLQkJCQkJIGNvbmZfdGlkLT5jaGFubmVsX3R5cGUsCi0JCQkJCSBjb25mX3RpZC0+dHNpZCwKLQkJCQkJIGNvbmZfdGlkLT5wc19zY2hlbWUsCi0JCQkJCSBjb25mX3RpZC0+YWNrX3BvbGljeSwKLQkJCQkJIGNvbmZfdGlkLT5hcHNkX2NvbmZbMF0sCi0JCQkJCSBjb25mX3RpZC0+YXBzZF9jb25mWzFdKTsKLQkJaWYgKHJldCA8IDApCi0JCQlnb3RvIG91dF9mcmVlX21lbW1hcDsKLQl9Ci0KLQkvKiBDb25maWd1cmUgVFggcmF0ZSBjbGFzc2VzICovCi0JcmV0ID0gd2wxMjcxX2FjeF9yYXRlX3BvbGljaWVzKHdsKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBvdXRfZnJlZV9tZW1tYXA7Ci0KLQkvKiBFbmFibGUgZGF0YSBwYXRoICovCi0JcmV0ID0gd2wxMjcxX2NtZF9kYXRhX3BhdGgod2wsIDEpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dF9mcmVlX21lbW1hcDsKLQotCS8qIENvbmZpZ3VyZSBmb3IgRUxQIHBvd2VyIHNhdmluZyAqLwotCXJldCA9IHdsMTI3MV9hY3hfc2xlZXBfYXV0aCh3bCwgV0wxMjcxX1BTTV9FTFApOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dF9mcmVlX21lbW1hcDsKLQotCS8qIENvbmZpZ3VyZSBIVyBlbmNyeXB0aW9uICovCi0JcmV0ID0gd2wxMjcxX2luaXRfaHdlbmNfY29uZmlnKHdsKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBvdXRfZnJlZV9tZW1tYXA7Ci0KLQkvKiBjb25maWd1cmUgUE0gKi8KLQlyZXQgPSB3bDEyNzFfYWN4X3BtX2NvbmZpZyh3bCk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gb3V0X2ZyZWVfbWVtbWFwOwotCi0JLyogZGlzYWJsZSBhbGwga2VlcC1hbGl2ZSB0ZW1wbGF0ZXMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgQ01EX1RFTVBMX0tMVl9JRFhfTUFYOyBpKyspIHsKLQkJcmV0ID0gd2wxMjcxX2FjeF9rZWVwX2FsaXZlX2NvbmZpZyh3bCwgaSwKLQkJCQkJCSAgIEFDWF9LRUVQX0FMSVZFX1RQTF9JTlZBTElEKTsKLQkJaWYgKHJldCA8IDApCi0JCQlnb3RvIG91dF9mcmVlX21lbW1hcDsKLQl9Ci0KLQkvKiBkaXNhYmxlIHRoZSBrZWVwLWFsaXZlIGZlYXR1cmUgKi8KLQlyZXQgPSB3bDEyNzFfYWN4X2tlZXBfYWxpdmVfbW9kZSh3bCwgZmFsc2UpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dF9mcmVlX21lbW1hcDsKLQotCS8qIENvbmZpZ3VyZSByc3NpL3NuciBhdmVyYWdpbmcgd2VpZ2h0cyAqLwotCXJldCA9IHdsMTI3MV9hY3hfcnNzaV9zbnJfYXZnX3dlaWdodHMod2wpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dF9mcmVlX21lbW1hcDsKLQotCXJldHVybiAwOwotCi0gb3V0X2ZyZWVfbWVtbWFwOgotCWtmcmVlKHdsLT50YXJnZXRfbWVtX21hcCk7Ci0Jd2wtPnRhcmdldF9tZW1fbWFwID0gTlVMTDsKLQotCXJldHVybiByZXQ7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2luaXQuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfaW5pdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzI2ZjhjLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfaW5pdC5oCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdsMTI3MQotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgotICoKLSAqIENvbnRhY3Q6IEx1Y2lhbm8gQ29lbGhvIDxsdWNpYW5vLmNvZWxob0Bub2tpYS5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0gKiAwMjExMC0xMzAxIFVTQQotICoKLSAqLwotCi0jaWZuZGVmIF9fV0wxMjcxX0lOSVRfSF9fCi0jZGVmaW5lIF9fV0wxMjcxX0lOSVRfSF9fCi0KLSNpbmNsdWRlICJ3bDEyNzEuaCIKLQotaW50IHdsMTI3MV9od19pbml0X3Bvd2VyX2F1dGgoc3RydWN0IHdsMTI3MSAqd2wpOwotaW50IHdsMTI3MV9pbml0X3RlbXBsYXRlc19jb25maWcoc3RydWN0IHdsMTI3MSAqd2wpOwotaW50IHdsMTI3MV9pbml0X3BoeV9jb25maWcoc3RydWN0IHdsMTI3MSAqd2wpOwotaW50IHdsMTI3MV9pbml0X3B0YShzdHJ1Y3Qgd2wxMjcxICp3bCk7Ci1pbnQgd2wxMjcxX2luaXRfZW5lcmd5X2RldGVjdGlvbihzdHJ1Y3Qgd2wxMjcxICp3bCk7Ci1pbnQgd2wxMjcxX2h3X2luaXQoc3RydWN0IHdsMTI3MSAqd2wpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfaW8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfaW8uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzg3NTlhYy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2lvLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNzAgKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdsMTI3MQotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDEwIE5va2lhIENvcnBvcmF0aW9uCi0gKgotICogQ29udGFjdDogTHVjaWFubyBDb2VsaG8gPGx1Y2lhbm8uY29lbGhvQG5va2lhLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKLSAqIDAyMTEwLTEzMDEgVVNBCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9jcmM3Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgotCi0jaW5jbHVkZSAid2wxMjcxLmgiCi0jaW5jbHVkZSAid2wxMnh4XzgwMjExLmgiCi0jaW5jbHVkZSAid2wxMjcxX2lvLmgiCi0KLSNkZWZpbmUgT0NQX0NNRF9MT09QICAzMgotCi0jZGVmaW5lIE9DUF9DTURfV1JJVEUgMHgxCi0jZGVmaW5lIE9DUF9DTURfUkVBRCAgMHgyCi0KLSNkZWZpbmUgT0NQX1JFQURZX01BU0sgIEJJVCgxOCkKLSNkZWZpbmUgT0NQX1NUQVRVU19NQVNLIChCSVQoMTYpIHwgQklUKDE3KSkKLQotI2RlZmluZSBPQ1BfU1RBVFVTX05PX1JFU1AgICAgMHgwMDAwMAotI2RlZmluZSBPQ1BfU1RBVFVTX09LICAgICAgICAgMHgxMDAwMAotI2RlZmluZSBPQ1BfU1RBVFVTX1JFUV9GQUlMRUQgMHgyMDAwMAotI2RlZmluZSBPQ1BfU1RBVFVTX1JFU1BfRVJST1IgMHgzMDAwMAotCi12b2lkIHdsMTI3MV9kaXNhYmxlX2ludGVycnVwdHMoc3RydWN0IHdsMTI3MSAqd2wpCi17Ci0Jd2wtPmlmX29wcy0+ZGlzYWJsZV9pcnEod2wpOwotfQotCi12b2lkIHdsMTI3MV9lbmFibGVfaW50ZXJydXB0cyhzdHJ1Y3Qgd2wxMjcxICp3bCkKLXsKLQl3bC0+aWZfb3BzLT5lbmFibGVfaXJxKHdsKTsKLX0KLQotLyogU2V0IHRoZSBTUEkgcGFydGl0aW9ucyB0byBhY2Nlc3MgdGhlIGNoaXAgYWRkcmVzc2VzCi0gKgotICogVG8gc2ltcGxpZnkgZHJpdmVyIGNvZGUsIGEgZml4ZWQgKHZpcnR1YWwpIG1lbW9yeSBtYXAgaXMgZGVmaW5lZCBmb3IKLSAqIHJlZ2lzdGVyIGFuZCBtZW1vcnkgYWRkcmVzc2VzLiBCZWNhdXNlIGluIHRoZSBjaGlwc2V0LCBpbiBkaWZmZXJlbnQgc3RhZ2VzCi0gKiBvZiBvcGVyYXRpb24sIHRob3NlIGFkZHJlc3NlcyB3aWxsIG1vdmUgYXJvdW5kLCBhbiBhZGRyZXNzIHRyYW5zbGF0aW9uCi0gKiBtZWNoYW5pc20gaXMgcmVxdWlyZWQuCi0gKgotICogVGhlcmUgYXJlIGZvdXIgcGFydGl0aW9ucyAodGhyZWUgbWVtb3J5IGFuZCBvbmUgcmVnaXN0ZXIgcGFydGl0aW9uKSwKLSAqIHdoaWNoIGFyZSBtYXBwZWQgdG8gdHdvIGRpZmZlcmVudCBhcmVhcyBvZiB0aGUgaGFyZHdhcmUgbWVtb3J5LgotICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsIGFkZHJlc3MKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYWNlCi0gKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIHwKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKy0tLS0rLS0+IG1lbS5zdGFydAotICogICAgICAgICAgUGh5c2ljYWwgYWRkcmVzcyAgICAuLi4gICB8ICAgIHwKLSAqICAgICAgICAgICAgICAgc3BhY2UgICAgICAgLi4uICAgICAgfCAgICB8IFtQQVJUXzBdCi0gKiAgICAgICAgICAgICAgICAgICAgICAgIC4uLiAgICAgICAgIHwgICAgfAotICogIDAwMDAwMDAwICA8LS0rLS0tLSsuLi4gICAgICAgICAuLi4rLS0tLSstLT4gbWVtLnN0YXJ0ICsgbWVtLnNpemUKLSAqICAgICAgICAgICAgICAgfCAgICB8ICAgICAgICAgLi4uICAgfCAgICB8Ci0gKiAgICAgICAgICAgICAgIHxNRU0gfCAgICAgIC4uLiAgICAgIHwgICAgfAotICogICAgICAgICAgICAgICB8ICAgIHwgICAuLi4gICAgICAgICB8ICAgIHwKLSAqICBtZW0uc2l6ZSAgPC0tKy0tLS0rLi4uICAgICAgICAgICAgfCAgICB8IHt1bnVzZWQgYXJlYSkKLSAqICAgICAgICAgICAgICAgfCAgICB8ICAgLi4uICAgICAgICAgfCAgICB8Ci0gKiAgICAgICAgICAgICAgIHxSRUcgfCAgICAgIC4uLiAgICAgIHwgICAgfAotICogIG1lbS5zaXplICAgICB8ICAgIHwgICAgICAgICAuLi4gICB8ICAgIHwKLSAqICAgICAgKyAgICAgPC0tKy0tLS0rLi4uICAgICAgICAgLi4uKy0tLS0rLS0+IHJlZy5zdGFydAotICogIHJlZy5zaXplICAgICB8ICAgIHwgICAuLi4gICAgICAgICB8ICAgIHwKLSAqICAgICAgICAgICAgICAgfE1FTTJ8ICAgICAgLi4uICAgICAgfCAgICB8IFtQQVJUXzFdCi0gKiAgICAgICAgICAgICAgIHwgICAgfCAgICAgICAgIC4uLiAgIHwgICAgfAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4rLS0tLSstLT4gcmVnLnN0YXJ0ICsgcmVnLnNpemUKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICB8Ci0gKgotICovCi1pbnQgd2wxMjcxX3NldF9wYXJ0aXRpb24oc3RydWN0IHdsMTI3MSAqd2wsCi0JCQkgc3RydWN0IHdsMTI3MV9wYXJ0aXRpb25fc2V0ICpwKQotewotCS8qIGNvcHkgcGFydGl0aW9uIGluZm8gKi8KLQltZW1jcHkoJndsLT5wYXJ0LCBwLCBzaXplb2YoKnApKTsKLQotCXdsMTI3MV9kZWJ1ZyhERUJVR19TUEksICJtZW1fc3RhcnQgJTA4WCBtZW1fc2l6ZSAlMDhYIiwKLQkJICAgICBwLT5tZW0uc3RhcnQsIHAtPm1lbS5zaXplKTsKLQl3bDEyNzFfZGVidWcoREVCVUdfU1BJLCAicmVnX3N0YXJ0ICUwOFggcmVnX3NpemUgJTA4WCIsCi0JCSAgICAgcC0+cmVnLnN0YXJ0LCBwLT5yZWcuc2l6ZSk7Ci0Jd2wxMjcxX2RlYnVnKERFQlVHX1NQSSwgIm1lbTJfc3RhcnQgJTA4WCBtZW0yX3NpemUgJTA4WCIsCi0JCSAgICAgcC0+bWVtMi5zdGFydCwgcC0+bWVtMi5zaXplKTsKLQl3bDEyNzFfZGVidWcoREVCVUdfU1BJLCAibWVtM19zdGFydCAlMDhYIG1lbTNfc2l6ZSAlMDhYIiwKLQkJICAgICBwLT5tZW0zLnN0YXJ0LCBwLT5tZW0zLnNpemUpOwotCi0JLyogd3JpdGUgcGFydGl0aW9uIGluZm8gdG8gdGhlIGNoaXBzZXQgKi8KLQl3bDEyNzFfcmF3X3dyaXRlMzIod2wsIEhXX1BBUlQwX1NUQVJUX0FERFIsIHAtPm1lbS5zdGFydCk7Ci0Jd2wxMjcxX3Jhd193cml0ZTMyKHdsLCBIV19QQVJUMF9TSVpFX0FERFIsIHAtPm1lbS5zaXplKTsKLQl3bDEyNzFfcmF3X3dyaXRlMzIod2wsIEhXX1BBUlQxX1NUQVJUX0FERFIsIHAtPnJlZy5zdGFydCk7Ci0Jd2wxMjcxX3Jhd193cml0ZTMyKHdsLCBIV19QQVJUMV9TSVpFX0FERFIsIHAtPnJlZy5zaXplKTsKLQl3bDEyNzFfcmF3X3dyaXRlMzIod2wsIEhXX1BBUlQyX1NUQVJUX0FERFIsIHAtPm1lbTIuc3RhcnQpOwotCXdsMTI3MV9yYXdfd3JpdGUzMih3bCwgSFdfUEFSVDJfU0laRV9BRERSLCBwLT5tZW0yLnNpemUpOwotCXdsMTI3MV9yYXdfd3JpdGUzMih3bCwgSFdfUEFSVDNfU1RBUlRfQUREUiwgcC0+bWVtMy5zdGFydCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotdm9pZCB3bDEyNzFfaW9fcmVzZXQoc3RydWN0IHdsMTI3MSAqd2wpCi17Ci0Jd2wtPmlmX29wcy0+cmVzZXQod2wpOwotfQotCi12b2lkIHdsMTI3MV9pb19pbml0KHN0cnVjdCB3bDEyNzEgKndsKQotewotCXdsLT5pZl9vcHMtPmluaXQod2wpOwotfQotCi12b2lkIHdsMTI3MV90b3BfcmVnX3dyaXRlKHN0cnVjdCB3bDEyNzEgKndsLCBpbnQgYWRkciwgdTE2IHZhbCkKLXsKLQkvKiB3cml0ZSBhZGRyZXNzID4+IDEgKyAweDMwMDAwIHRvIE9DUF9QT1JfQ1RSICovCi0JYWRkciA9IChhZGRyID4+IDEpICsgMHgzMDAwMDsKLQl3bDEyNzFfd3JpdGUzMih3bCwgT0NQX1BPUl9DVFIsIGFkZHIpOwotCi0JLyogd3JpdGUgdmFsdWUgdG8gT0NQX1BPUl9XREFUQSAqLwotCXdsMTI3MV93cml0ZTMyKHdsLCBPQ1BfREFUQV9XUklURSwgdmFsKTsKLQotCS8qIHdyaXRlIDEgdG8gT0NQX0NNRCAqLwotCXdsMTI3MV93cml0ZTMyKHdsLCBPQ1BfQ01ELCBPQ1BfQ01EX1dSSVRFKTsKLX0KLQotdTE2IHdsMTI3MV90b3BfcmVnX3JlYWQoc3RydWN0IHdsMTI3MSAqd2wsIGludCBhZGRyKQotewotCXUzMiB2YWw7Ci0JaW50IHRpbWVvdXQgPSBPQ1BfQ01EX0xPT1A7Ci0KLQkvKiB3cml0ZSBhZGRyZXNzID4+IDEgKyAweDMwMDAwIHRvIE9DUF9QT1JfQ1RSICovCi0JYWRkciA9IChhZGRyID4+IDEpICsgMHgzMDAwMDsKLQl3bDEyNzFfd3JpdGUzMih3bCwgT0NQX1BPUl9DVFIsIGFkZHIpOwotCi0JLyogd3JpdGUgMiB0byBPQ1BfQ01EICovCi0Jd2wxMjcxX3dyaXRlMzIod2wsIE9DUF9DTUQsIE9DUF9DTURfUkVBRCk7Ci0KLQkvKiBwb2xsIGZvciBkYXRhIHJlYWR5ICovCi0JZG8gewotCQl2YWwgPSB3bDEyNzFfcmVhZDMyKHdsLCBPQ1BfREFUQV9SRUFEKTsKLQl9IHdoaWxlICghKHZhbCAmIE9DUF9SRUFEWV9NQVNLKSAmJiAtLXRpbWVvdXQpOwotCi0JaWYgKCF0aW1lb3V0KSB7Ci0JCXdsMTI3MV93YXJuaW5nKCJUb3AgcmVnaXN0ZXIgYWNjZXNzIHRpbWVkIG91dC4iKTsKLQkJcmV0dXJuIDB4ZmZmZjsKLQl9Ci0KLQkvKiBjaGVjayBkYXRhIHN0YXR1cyBhbmQgcmV0dXJuIGlmIE9LICovCi0JaWYgKCh2YWwgJiBPQ1BfU1RBVFVTX01BU0spID09IE9DUF9TVEFUVVNfT0spCi0JCXJldHVybiB2YWwgJiAweGZmZmY7Ci0JZWxzZSB7Ci0JCXdsMTI3MV93YXJuaW5nKCJUb3AgcmVnaXN0ZXIgYWNjZXNzIHJldHVybmVkIGVycm9yLiIpOwotCQlyZXR1cm4gMHhmZmZmOwotCX0KLX0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9pby5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9pby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMWY5MmU2Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfaW8uaAorKysgL2Rldi9udWxsCkBAIC0xLDE3MiArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMjcxCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk4LTIwMDkgVGV4YXMgSW5zdHJ1bWVudHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgotICoKLSAqIENvbnRhY3Q6IEx1Y2lhbm8gQ29lbGhvIDxsdWNpYW5vLmNvZWxob0Bub2tpYS5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0gKiAwMjExMC0xMzAxIFVTQQotICoKLSAqLwotCi0jaWZuZGVmIF9fV0wxMjcxX0lPX0hfXwotI2RlZmluZSBfX1dMMTI3MV9JT19IX18KLQotI2luY2x1ZGUgIndsMTI3MV9yZWcuaCIKLQotI2RlZmluZSBIV19BQ0NFU1NfTUVNT1JZX01BWF9SQU5HRQkweDFGRkMwCi0KLSNkZWZpbmUgSFdfUEFSVElUSU9OX1JFR0lTVEVSU19BRERSICAgICAweDFGRkMwCi0jZGVmaW5lIEhXX1BBUlQwX1NJWkVfQUREUiAgICAgICAgICAgICAgKEhXX1BBUlRJVElPTl9SRUdJU1RFUlNfQUREUikKLSNkZWZpbmUgSFdfUEFSVDBfU1RBUlRfQUREUiAgICAgICAgICAgICAoSFdfUEFSVElUSU9OX1JFR0lTVEVSU19BRERSICsgNCkKLSNkZWZpbmUgSFdfUEFSVDFfU0laRV9BRERSICAgICAgICAgICAgICAoSFdfUEFSVElUSU9OX1JFR0lTVEVSU19BRERSICsgOCkKLSNkZWZpbmUgSFdfUEFSVDFfU1RBUlRfQUREUiAgICAgICAgICAgICAoSFdfUEFSVElUSU9OX1JFR0lTVEVSU19BRERSICsgMTIpCi0jZGVmaW5lIEhXX1BBUlQyX1NJWkVfQUREUiAgICAgICAgICAgICAgKEhXX1BBUlRJVElPTl9SRUdJU1RFUlNfQUREUiArIDE2KQotI2RlZmluZSBIV19QQVJUMl9TVEFSVF9BRERSICAgICAgICAgICAgIChIV19QQVJUSVRJT05fUkVHSVNURVJTX0FERFIgKyAyMCkKLSNkZWZpbmUgSFdfUEFSVDNfU1RBUlRfQUREUiAgICAgICAgICAgICAoSFdfUEFSVElUSU9OX1JFR0lTVEVSU19BRERSICsgMjQpCi0KLSNkZWZpbmUgSFdfQUNDRVNTX1JFR0lTVEVSX1NJWkUgICAgICAgICA0Ci0KLSNkZWZpbmUgSFdfQUNDRVNTX1BSQU1fTUFYX1JBTkdFCTB4M2MwMDAKLQotc3RydWN0IHdsMTI3MTsKLQotdm9pZCB3bDEyNzFfZGlzYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCB3bDEyNzEgKndsKTsKLXZvaWQgd2wxMjcxX2VuYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCB3bDEyNzEgKndsKTsKLQotdm9pZCB3bDEyNzFfaW9fcmVzZXQoc3RydWN0IHdsMTI3MSAqd2wpOwotdm9pZCB3bDEyNzFfaW9faW5pdChzdHJ1Y3Qgd2wxMjcxICp3bCk7Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IGRldmljZSAqd2wxMjcxX3dsX3RvX2RldihzdHJ1Y3Qgd2wxMjcxICp3bCkKLXsKLQlyZXR1cm4gd2wtPmlmX29wcy0+ZGV2KHdsKTsKLX0KLQotCi0vKiBSYXcgdGFyZ2V0IElPLCBhZGRyZXNzIGlzIG5vdCB0cmFuc2xhdGVkICovCi1zdGF0aWMgaW5saW5lIHZvaWQgd2wxMjcxX3Jhd193cml0ZShzdHJ1Y3Qgd2wxMjcxICp3bCwgaW50IGFkZHIsIHZvaWQgKmJ1ZiwKLQkJCQkgICAgc2l6ZV90IGxlbiwgYm9vbCBmaXhlZCkKLXsKLQl3bC0+aWZfb3BzLT53cml0ZSh3bCwgYWRkciwgYnVmLCBsZW4sIGZpeGVkKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHdsMTI3MV9yYXdfcmVhZChzdHJ1Y3Qgd2wxMjcxICp3bCwgaW50IGFkZHIsIHZvaWQgKmJ1ZiwKLQkJCQkgICBzaXplX3QgbGVuLCBib29sIGZpeGVkKQotewotCXdsLT5pZl9vcHMtPnJlYWQod2wsIGFkZHIsIGJ1ZiwgbGVuLCBmaXhlZCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTMyIHdsMTI3MV9yYXdfcmVhZDMyKHN0cnVjdCB3bDEyNzEgKndsLCBpbnQgYWRkcikKLXsKLQl3bDEyNzFfcmF3X3JlYWQod2wsIGFkZHIsICZ3bC0+YnVmZmVyXzMyLAotCQkJICAgIHNpemVvZih3bC0+YnVmZmVyXzMyKSwgZmFsc2UpOwotCi0JcmV0dXJuIGxlMzJfdG9fY3B1KHdsLT5idWZmZXJfMzIpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgd2wxMjcxX3Jhd193cml0ZTMyKHN0cnVjdCB3bDEyNzEgKndsLCBpbnQgYWRkciwgdTMyIHZhbCkKLXsKLQl3bC0+YnVmZmVyXzMyID0gY3B1X3RvX2xlMzIodmFsKTsKLQl3bDEyNzFfcmF3X3dyaXRlKHdsLCBhZGRyLCAmd2wtPmJ1ZmZlcl8zMiwKLQkJCSAgICAgc2l6ZW9mKHdsLT5idWZmZXJfMzIpLCBmYWxzZSk7Ci19Ci0KLS8qIFRyYW5zbGF0ZWQgdGFyZ2V0IElPICovCi1zdGF0aWMgaW5saW5lIGludCB3bDEyNzFfdHJhbnNsYXRlX2FkZHIoc3RydWN0IHdsMTI3MSAqd2wsIGludCBhZGRyKQotewotCS8qCi0JICogVG8gdHJhbnNsYXRlLCBmaXJzdCBjaGVjayB0byB3aGljaCB3aW5kb3cgb2YgYWRkcmVzc2VzIHRoZQotCSAqIHBhcnRpY3VsYXIgYWRkcmVzcyBiZWxvbmdzLiBUaGVuIHN1YnRyYWN0IHRoZSBzdGFydGluZyBhZGRyZXNzCi0JICogb2YgdGhhdCB3aW5kb3cgZnJvbSB0aGUgYWRkcmVzcy4gVGhlbiwgYWRkIG9mZnNldCBvZiB0aGUKLQkgKiB0cmFuc2xhdGVkIHJlZ2lvbi4KLQkgKgotCSAqIFRoZSB0cmFuc2xhdGVkIHJlZ2lvbnMgb2NjdXIgbmV4dCB0byBlYWNoIG90aGVyIGluIHBoeXNpY2FsIGRldmljZQotCSAqIG1lbW9yeSwgc28ganVzdCBhZGQgdGhlIHNpemVzIG9mIHRoZSBwcmVjZWVkaW5nIGFkZHJlc3MgcmVnaW9ucyB0bwotCSAqIGdldCB0aGUgb2Zmc2V0IHRvIHRoZSBuZXcgcmVnaW9uLgotCSAqCi0JICogQ3VycmVudGx5LCBvbmx5IHRoZSB0d28gZmlyc3QgcmVnaW9ucyBhcmUgYWRkcmVzc2VkLCBhbmQgdGhlCi0JICogYXNzdW1wdGlvbiBpcyB0aGF0IGFsbCBhZGRyZXNzZXMgd2lsbCBmYWxsIGludG8gZWl0aGVyIG9mIHRob3NlCi0JICogdHdvLgotCSAqLwotCWlmICgoYWRkciA+PSB3bC0+cGFydC5yZWcuc3RhcnQpICYmCi0JICAgIChhZGRyIDwgd2wtPnBhcnQucmVnLnN0YXJ0ICsgd2wtPnBhcnQucmVnLnNpemUpKQotCQlyZXR1cm4gYWRkciAtIHdsLT5wYXJ0LnJlZy5zdGFydCArIHdsLT5wYXJ0Lm1lbS5zaXplOwotCWVsc2UKLQkJcmV0dXJuIGFkZHIgLSB3bC0+cGFydC5tZW0uc3RhcnQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB3bDEyNzFfcmVhZChzdHJ1Y3Qgd2wxMjcxICp3bCwgaW50IGFkZHIsIHZvaWQgKmJ1ZiwKLQkJCSAgICAgICBzaXplX3QgbGVuLCBib29sIGZpeGVkKQotewotCWludCBwaHlzaWNhbDsKLQotCXBoeXNpY2FsID0gd2wxMjcxX3RyYW5zbGF0ZV9hZGRyKHdsLCBhZGRyKTsKLQotCXdsMTI3MV9yYXdfcmVhZCh3bCwgcGh5c2ljYWwsIGJ1ZiwgbGVuLCBmaXhlZCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB3bDEyNzFfd3JpdGUoc3RydWN0IHdsMTI3MSAqd2wsIGludCBhZGRyLCB2b2lkICpidWYsCi0JCQkJc2l6ZV90IGxlbiwgYm9vbCBmaXhlZCkKLXsKLQlpbnQgcGh5c2ljYWw7Ci0KLQlwaHlzaWNhbCA9IHdsMTI3MV90cmFuc2xhdGVfYWRkcih3bCwgYWRkcik7Ci0KLQl3bDEyNzFfcmF3X3dyaXRlKHdsLCBwaHlzaWNhbCwgYnVmLCBsZW4sIGZpeGVkKTsKLX0KLQotc3RhdGljIGlubGluZSB1MzIgd2wxMjcxX3JlYWQzMihzdHJ1Y3Qgd2wxMjcxICp3bCwgaW50IGFkZHIpCi17Ci0JcmV0dXJuIHdsMTI3MV9yYXdfcmVhZDMyKHdsLCB3bDEyNzFfdHJhbnNsYXRlX2FkZHIod2wsIGFkZHIpKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHdsMTI3MV93cml0ZTMyKHN0cnVjdCB3bDEyNzEgKndsLCBpbnQgYWRkciwgdTMyIHZhbCkKLXsKLQl3bDEyNzFfcmF3X3dyaXRlMzIod2wsIHdsMTI3MV90cmFuc2xhdGVfYWRkcih3bCwgYWRkciksIHZhbCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB3bDEyNzFfcG93ZXJfb2ZmKHN0cnVjdCB3bDEyNzEgKndsKQotewotCXdsLT5pZl9vcHMtPnBvd2VyKHdsLCBmYWxzZSk7Ci0JY2xlYXJfYml0KFdMMTI3MV9GTEFHX0dQSU9fUE9XRVIsICZ3bC0+ZmxhZ3MpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCB3bDEyNzFfcG93ZXJfb24oc3RydWN0IHdsMTI3MSAqd2wpCi17Ci0JaW50IHJldCA9IHdsLT5pZl9vcHMtPnBvd2VyKHdsLCB0cnVlKTsKLQlpZiAocmV0ID09IDApCi0JCXNldF9iaXQoV0wxMjcxX0ZMQUdfR1BJT19QT1dFUiwgJndsLT5mbGFncyk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0KLS8qIFRvcCBSZWdpc3RlciBJTyAqLwotdm9pZCB3bDEyNzFfdG9wX3JlZ193cml0ZShzdHJ1Y3Qgd2wxMjcxICp3bCwgaW50IGFkZHIsIHUxNiB2YWwpOwotdTE2IHdsMTI3MV90b3BfcmVnX3JlYWQoc3RydWN0IHdsMTI3MSAqd2wsIGludCBhZGRyKTsKLQotaW50IHdsMTI3MV9zZXRfcGFydGl0aW9uKHN0cnVjdCB3bDEyNzEgKndsLAotCQkJIHN0cnVjdCB3bDEyNzFfcGFydGl0aW9uX3NldCAqcCk7Ci0KLS8qIEZ1bmN0aW9ucyBmcm9tIHdsMTI3MV9tYWluLmMgKi8KLQotaW50IHdsMTI3MV9yZWdpc3Rlcl9odyhzdHJ1Y3Qgd2wxMjcxICp3bCk7Ci12b2lkIHdsMTI3MV91bnJlZ2lzdGVyX2h3KHN0cnVjdCB3bDEyNzEgKndsKTsKLWludCB3bDEyNzFfaW5pdF9pZWVlODAyMTEoc3RydWN0IHdsMTI3MSAqd2wpOwotc3RydWN0IGllZWU4MDIxMV9odyAqd2wxMjcxX2FsbG9jX2h3KHZvaWQpOwotaW50IHdsMTI3MV9mcmVlX2h3KHN0cnVjdCB3bDEyNzEgKndsKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfbWFpbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OGE0Yjk5Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfbWFpbi5jCisrKyAvZGV2L251bGwKQEAgLTEsMjYxNSArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMjcxCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTAgTm9raWEgQ29ycG9yYXRpb24KLSAqCi0gKiBDb250YWN0OiBMdWNpYW5vIENvZWxobyA8bHVjaWFuby5jb2VsaG9Abm9raWEuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQotICogMDIxMTAtMTMwMSBVU0EKLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+Ci0jaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KLSNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0KLSNpbmNsdWRlICJ3bDEyNzEuaCIKLSNpbmNsdWRlICJ3bDEyeHhfODAyMTEuaCIKLSNpbmNsdWRlICJ3bDEyNzFfcmVnLmgiCi0jaW5jbHVkZSAid2wxMjcxX2lvLmgiCi0jaW5jbHVkZSAid2wxMjcxX2V2ZW50LmgiCi0jaW5jbHVkZSAid2wxMjcxX3R4LmgiCi0jaW5jbHVkZSAid2wxMjcxX3J4LmgiCi0jaW5jbHVkZSAid2wxMjcxX3BzLmgiCi0jaW5jbHVkZSAid2wxMjcxX2luaXQuaCIKLSNpbmNsdWRlICJ3bDEyNzFfZGVidWdmcy5oIgotI2luY2x1ZGUgIndsMTI3MV9jbWQuaCIKLSNpbmNsdWRlICJ3bDEyNzFfYm9vdC5oIgotI2luY2x1ZGUgIndsMTI3MV90ZXN0bW9kZS5oIgotI2luY2x1ZGUgIndsMTI3MV9zY2FuLmgiCi0KLSNkZWZpbmUgV0wxMjcxX0JPT1RfUkVUUklFUyAzCi0KLXN0YXRpYyBzdHJ1Y3QgY29uZl9kcnZfc2V0dGluZ3MgZGVmYXVsdF9jb25mID0gewotCS5zZyA9IHsKLQkJLnBhcmFtcyA9IHsKLQkJCVtDT05GX1NHX0JUX1BFUl9USFJFU0hPTERdICAgICAgICAgICAgICAgICAgPSA3NTAwLAotCQkJW0NPTkZfU0dfSFYzX01BWF9PVkVSUklERV0gICAgICAgICAgICAgICAgICA9IDAsCi0JCQlbQ09ORl9TR19CVF9ORlNfU0FNUExFX0lOVEVSVkFMXSAgICAgICAgICAgID0gNDAwLAotCQkJW0NPTkZfU0dfQlRfTE9BRF9SQVRJT10gICAgICAgICAgICAgICAgICAgICA9IDUwLAotCQkJW0NPTkZfU0dfQVVUT19QU19NT0RFXSAgICAgICAgICAgICAgICAgICAgICA9IDEsCi0JCQlbQ09ORl9TR19BVVRPX1NDQU5fUFJPQkVfUkVRXSAgICAgICAgICAgICAgID0gMTcwLAotCQkJW0NPTkZfU0dfQUNUSVZFX1NDQU5fRFVSQVRJT05fRkFDVE9SX0hWM10gICA9IDUwLAotCQkJW0NPTkZfU0dfQU5URU5OQV9DT05GSUdVUkFUSU9OXSAgICAgICAgICAgICA9IDAsCi0JCQlbQ09ORl9TR19CRUFDT05fTUlTU19QRVJDRU5UXSAgICAgICAgICAgICAgID0gNjAsCi0JCQlbQ09ORl9TR19SQVRFX0FEQVBUX1RIUkVTSF0gICAgICAgICAgICAgICAgID0gMTIsCi0JCQlbQ09ORl9TR19SQVRFX0FEQVBUX1NOUl0gICAgICAgICAgICAgICAgICAgID0gMCwKLQkJCVtDT05GX1NHX1dMQU5fUFNfQlRfQUNMX01BU1RFUl9NSU5fQlJdICAgICAgPSAxMCwKLQkJCVtDT05GX1NHX1dMQU5fUFNfQlRfQUNMX01BU1RFUl9NQVhfQlJdICAgICAgPSAzMCwKLQkJCVtDT05GX1NHX1dMQU5fUFNfTUFYX0JUX0FDTF9NQVNURVJfQlJdICAgICAgPSA4LAotCQkJW0NPTkZfU0dfV0xBTl9QU19CVF9BQ0xfU0xBVkVfTUlOX0JSXSAgICAgICA9IDIwLAotCQkJW0NPTkZfU0dfV0xBTl9QU19CVF9BQ0xfU0xBVkVfTUFYX0JSXSAgICAgICA9IDUwLAotCQkJLyogTm90ZTogd2l0aCBVUFNELCB0aGlzIHNob3VsZCBiZSA0ICovCi0JCQlbQ09ORl9TR19XTEFOX1BTX01BWF9CVF9BQ0xfU0xBVkVfQlJdICAgICAgID0gOCwKLQkJCVtDT05GX1NHX1dMQU5fUFNfQlRfQUNMX01BU1RFUl9NSU5fRURSXSAgICAgPSA3LAotCQkJW0NPTkZfU0dfV0xBTl9QU19CVF9BQ0xfTUFTVEVSX01BWF9FRFJdICAgICA9IDI1LAotCQkJW0NPTkZfU0dfV0xBTl9QU19NQVhfQlRfQUNMX01BU1RFUl9FRFJdICAgICA9IDIwLAotCQkJLyogTm90ZTogd2l0aCBVUERTLCB0aGlzIHNob3VsZCBiZSAxNSAqLwotCQkJW0NPTkZfU0dfV0xBTl9QU19CVF9BQ0xfU0xBVkVfTUlOX0VEUl0gICAgICA9IDgsCi0JCQkvKiBOb3RlOiB3aXRoIFVQRFMsIHRoaXMgc2hvdWxkIGJlIDUwICovCi0JCQlbQ09ORl9TR19XTEFOX1BTX0JUX0FDTF9TTEFWRV9NQVhfRURSXSAgICAgID0gNDAsCi0JCQkvKiBOb3RlOiB3aXRoIFVQRFMsIHRoaXMgc2hvdWxkIGJlIDEwICovCi0JCQlbQ09ORl9TR19XTEFOX1BTX01BWF9CVF9BQ0xfU0xBVkVfRURSXSAgICAgID0gMjAsCi0JCQlbQ09ORl9TR19SWFRdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMTIwMCwKLQkJCVtDT05GX1NHX1RYVF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAxMDAwLAotCQkJW0NPTkZfU0dfQURBUFRJVkVfUlhUX1RYVF0gICAgICAgICAgICAgICAgICA9IDEsCi0JCQlbQ09ORl9TR19QU19QT0xMX1RJTUVPVVRdICAgICAgICAgICAgICAgICAgID0gMTAsCi0JCQlbQ09ORl9TR19VUFNEX1RJTUVPVVRdICAgICAgICAgICAgICAgICAgICAgID0gMTAsCi0JCQlbQ09ORl9TR19XTEFOX0FDVElWRV9CVF9BQ0xfTUFTVEVSX01JTl9FRFJdID0gNywKLQkJCVtDT05GX1NHX1dMQU5fQUNUSVZFX0JUX0FDTF9NQVNURVJfTUFYX0VEUl0gPSAxNSwKLQkJCVtDT05GX1NHX1dMQU5fQUNUSVZFX01BWF9CVF9BQ0xfTUFTVEVSX0VEUl0gPSAxNSwKLQkJCVtDT05GX1NHX1dMQU5fQUNUSVZFX0JUX0FDTF9TTEFWRV9NSU5fRURSXSAgPSA4LAotCQkJW0NPTkZfU0dfV0xBTl9BQ1RJVkVfQlRfQUNMX1NMQVZFX01BWF9FRFJdICA9IDIwLAotCQkJW0NPTkZfU0dfV0xBTl9BQ1RJVkVfTUFYX0JUX0FDTF9TTEFWRV9FRFJdICA9IDE1LAotCQkJW0NPTkZfU0dfV0xBTl9BQ1RJVkVfQlRfQUNMX01JTl9CUl0gICAgICAgICA9IDIwLAotCQkJW0NPTkZfU0dfV0xBTl9BQ1RJVkVfQlRfQUNMX01BWF9CUl0gICAgICAgICA9IDUwLAotCQkJW0NPTkZfU0dfV0xBTl9BQ1RJVkVfTUFYX0JUX0FDTF9CUl0gICAgICAgICA9IDEwLAotCQkJW0NPTkZfU0dfUEFTU0lWRV9TQ0FOX0RVUkFUSU9OX0ZBQ1RPUl9IVjNdICA9IDIwMCwKLQkJCVtDT05GX1NHX1BBU1NJVkVfU0NBTl9EVVJBVElPTl9GQUNUT1JfQTJEUF0gPSA4MDAsCi0JCQlbQ09ORl9TR19QQVNTSVZFX1NDQU5fQTJEUF9CVF9USU1FXSAgICAgICAgID0gNzUsCi0JCQlbQ09ORl9TR19QQVNTSVZFX1NDQU5fQTJEUF9XTEFOX1RJTUVdICAgICAgID0gMTUsCi0JCQlbQ09ORl9TR19IVjNfTUFYX1NFUlZFRF0gICAgICAgICAgICAgICAgICAgID0gNiwKLQkJCVtDT05GX1NHX0RIQ1BfVElNRV0gICAgICAgICAgICAgICAgICAgICAgICAgPSA1MDAwLAotCQkJW0NPTkZfU0dfQUNUSVZFX1NDQU5fRFVSQVRJT05fRkFDVE9SX0EyRFBdICA9IDEwMCwKLQkJfSwKLQkJLnN0YXRlID0gQ09ORl9TR19QUk9URUNUSVZFLAotCX0sCi0JLnJ4ID0gewotCQkucnhfbXNkdV9saWZlX3RpbWUgICAgICAgICAgID0gNTEyMDAwLAotCQkucGFja2V0X2RldGVjdGlvbl90aHJlc2hvbGQgID0gMCwKLQkJLnBzX3BvbGxfdGltZW91dCAgICAgICAgICAgICA9IDE1LAotCQkudXBzZF90aW1lb3V0ICAgICAgICAgICAgICAgID0gMTUsCi0JCS5ydHNfdGhyZXNob2xkICAgICAgICAgICAgICAgPSAyMzQ3LAotCQkucnhfY2NhX3RocmVzaG9sZCAgICAgICAgICAgID0gMCwKLQkJLmlycV9ibGtfdGhyZXNob2xkICAgICAgICAgICA9IDB4RkZGRiwKLQkJLmlycV9wa3RfdGhyZXNob2xkICAgICAgICAgICA9IDAsCi0JCS5pcnFfdGltZW91dCAgICAgICAgICAgICAgICAgPSA2MDAsCi0JCS5xdWV1ZV90eXBlICAgICAgICAgICAgICAgICAgPSBDT05GX1JYX1FVRVVFX1RZUEVfTE9XX1BSSU9SSVRZLAotCX0sCi0JLnR4ID0gewotCQkudHhfZW5lcmd5X2RldGVjdGlvbiAgICAgICAgID0gMCwKLQkJLnJjX2NvbmYgICAgICAgICAgICAgICAgICAgICA9IHsKLQkJCS5lbmFibGVkX3JhdGVzICAgICAgID0gMCwKLQkJCS5zaG9ydF9yZXRyeV9saW1pdCAgID0gMTAsCi0JCQkubG9uZ19yZXRyeV9saW1pdCAgICA9IDEwLAotCQkJLmFmbGFncyAgICAgICAgICAgICAgPSAwCi0JCX0sCi0JCS5hY19jb25mX2NvdW50ICAgICAgICAgICAgICAgPSA0LAotCQkuYWNfY29uZiAgICAgICAgICAgICAgICAgICAgID0gewotCQkJW0NPTkZfVFhfQUNfQkVdID0gewotCQkJCS5hYyAgICAgICAgICA9IENPTkZfVFhfQUNfQkUsCi0JCQkJLmN3X21pbiAgICAgID0gMTUsCi0JCQkJLmN3X21heCAgICAgID0gNjMsCi0JCQkJLmFpZnNuICAgICAgID0gMywKLQkJCQkudHhfb3BfbGltaXQgPSAwLAotCQkJfSwKLQkJCVtDT05GX1RYX0FDX0JLXSA9IHsKLQkJCQkuYWMgICAgICAgICAgPSBDT05GX1RYX0FDX0JLLAotCQkJCS5jd19taW4gICAgICA9IDE1LAotCQkJCS5jd19tYXggICAgICA9IDYzLAotCQkJCS5haWZzbiAgICAgICA9IDcsCi0JCQkJLnR4X29wX2xpbWl0ID0gMCwKLQkJCX0sCi0JCQlbQ09ORl9UWF9BQ19WSV0gPSB7Ci0JCQkJLmFjICAgICAgICAgID0gQ09ORl9UWF9BQ19WSSwKLQkJCQkuY3dfbWluICAgICAgPSAxNSwKLQkJCQkuY3dfbWF4ICAgICAgPSA2MywKLQkJCQkuYWlmc24gICAgICAgPSBDT05GX1RYX0FJRlNfUElGUywKLQkJCQkudHhfb3BfbGltaXQgPSAzMDA4LAotCQkJfSwKLQkJCVtDT05GX1RYX0FDX1ZPXSA9IHsKLQkJCQkuYWMgICAgICAgICAgPSBDT05GX1RYX0FDX1ZPLAotCQkJCS5jd19taW4gICAgICA9IDE1LAotCQkJCS5jd19tYXggICAgICA9IDYzLAotCQkJCS5haWZzbiAgICAgICA9IENPTkZfVFhfQUlGU19QSUZTLAotCQkJCS50eF9vcF9saW1pdCA9IDE1MDQsCi0JCQl9LAotCQl9LAotCQkudGlkX2NvbmZfY291bnQgPSA0LAotCQkudGlkX2NvbmYgPSB7Ci0JCQlbQ09ORl9UWF9BQ19CRV0gPSB7Ci0JCQkJLnF1ZXVlX2lkICAgID0gQ09ORl9UWF9BQ19CRSwKLQkJCQkuY2hhbm5lbF90eXBlID0gQ09ORl9DSEFOTkVMX1RZUEVfRURDRiwKLQkJCQkudHNpZCAgICAgICAgPSBDT05GX1RYX0FDX0JFLAotCQkJCS5wc19zY2hlbWUgICA9IENPTkZfUFNfU0NIRU1FX0xFR0FDWSwKLQkJCQkuYWNrX3BvbGljeSAgPSBDT05GX0FDS19QT0xJQ1lfTEVHQUNZLAotCQkJCS5hcHNkX2NvbmYgICA9IHswLCAwfSwKLQkJCX0sCi0JCQlbQ09ORl9UWF9BQ19CS10gPSB7Ci0JCQkJLnF1ZXVlX2lkICAgID0gQ09ORl9UWF9BQ19CSywKLQkJCQkuY2hhbm5lbF90eXBlID0gQ09ORl9DSEFOTkVMX1RZUEVfRURDRiwKLQkJCQkudHNpZCAgICAgICAgPSBDT05GX1RYX0FDX0JLLAotCQkJCS5wc19zY2hlbWUgICA9IENPTkZfUFNfU0NIRU1FX0xFR0FDWSwKLQkJCQkuYWNrX3BvbGljeSAgPSBDT05GX0FDS19QT0xJQ1lfTEVHQUNZLAotCQkJCS5hcHNkX2NvbmYgICA9IHswLCAwfSwKLQkJCX0sCi0JCQlbQ09ORl9UWF9BQ19WSV0gPSB7Ci0JCQkJLnF1ZXVlX2lkICAgID0gQ09ORl9UWF9BQ19WSSwKLQkJCQkuY2hhbm5lbF90eXBlID0gQ09ORl9DSEFOTkVMX1RZUEVfRURDRiwKLQkJCQkudHNpZCAgICAgICAgPSBDT05GX1RYX0FDX1ZJLAotCQkJCS5wc19zY2hlbWUgICA9IENPTkZfUFNfU0NIRU1FX0xFR0FDWSwKLQkJCQkuYWNrX3BvbGljeSAgPSBDT05GX0FDS19QT0xJQ1lfTEVHQUNZLAotCQkJCS5hcHNkX2NvbmYgICA9IHswLCAwfSwKLQkJCX0sCi0JCQlbQ09ORl9UWF9BQ19WT10gPSB7Ci0JCQkJLnF1ZXVlX2lkICAgID0gQ09ORl9UWF9BQ19WTywKLQkJCQkuY2hhbm5lbF90eXBlID0gQ09ORl9DSEFOTkVMX1RZUEVfRURDRiwKLQkJCQkudHNpZCAgICAgICAgPSBDT05GX1RYX0FDX1ZPLAotCQkJCS5wc19zY2hlbWUgICA9IENPTkZfUFNfU0NIRU1FX0xFR0FDWSwKLQkJCQkuYWNrX3BvbGljeSAgPSBDT05GX0FDS19QT0xJQ1lfTEVHQUNZLAotCQkJCS5hcHNkX2NvbmYgICA9IHswLCAwfSwKLQkJCX0sCi0JCX0sCi0JCS5mcmFnX3RocmVzaG9sZCAgICAgICAgICAgICAgPSBJRUVFODAyMTFfTUFYX0ZSQUdfVEhSRVNIT0xELAotCQkudHhfY29tcGxfdGltZW91dCAgICAgICAgICAgID0gNzAwLAotCQkudHhfY29tcGxfdGhyZXNob2xkICAgICAgICAgID0gNCwKLQkJLmJhc2ljX3JhdGUgICAgICAgICAgICAgICAgICA9IENPTkZfSFdfQklUX1JBVEVfMU1CUFMsCi0JCS5iYXNpY19yYXRlXzUgICAgICAgICAgICAgICAgPSBDT05GX0hXX0JJVF9SQVRFXzZNQlBTLAotCX0sCi0JLmNvbm4gPSB7Ci0JCS53YWtlX3VwX2V2ZW50ICAgICAgICAgICAgICAgPSBDT05GX1dBS0VfVVBfRVZFTlRfRFRJTSwKLQkJLmxpc3Rlbl9pbnRlcnZhbCAgICAgICAgICAgICA9IDEsCi0JCS5iY25fZmlsdF9tb2RlICAgICAgICAgICAgICAgPSBDT05GX0JDTl9GSUxUX01PREVfRU5BQkxFRCwKLQkJLmJjbl9maWx0X2llX2NvdW50ICAgICAgICAgICA9IDEsCi0JCS5iY25fZmlsdF9pZSA9IHsKLQkJCVswXSA9IHsKLQkJCQkuaWUgICAgICAgICAgPSBXTEFOX0VJRF9DSEFOTkVMX1NXSVRDSCwKLQkJCQkucnVsZSAgICAgICAgPSBDT05GX0JDTl9SVUxFX1BBU1NfT05fQVBQRUFSQU5DRSwKLQkJCX0KLQkJfSwKLQkJLnN5bmNoX2ZhaWxfdGhvbGQgICAgICAgICAgICA9IDEwLAotCQkuYnNzX2xvc2VfdGltZW91dCAgICAgICAgICAgID0gMTAwLAotCQkuYmVhY29uX3J4X3RpbWVvdXQgICAgICAgICAgID0gMTAwMDAsCi0JCS5icm9hZGNhc3RfdGltZW91dCAgICAgICAgICAgPSAyMDAwMCwKLQkJLnJ4X2Jyb2FkY2FzdF9pbl9wcyAgICAgICAgICA9IDEsCi0JCS5wc19wb2xsX3RocmVzaG9sZCAgICAgICAgICAgPSAxMCwKLQkJLnBzX3BvbGxfcmVjb3ZlcnlfcGVyaW9kICAgICA9IDcwMCwKLQkJLmJldF9lbmFibGUgICAgICAgICAgICAgICAgICA9IENPTkZfQkVUX01PREVfRU5BQkxFLAotCQkuYmV0X21heF9jb25zZWN1dGl2ZSAgICAgICAgID0gMTAsCi0JCS5wc21fZW50cnlfcmV0cmllcyAgICAgICAgICAgPSA1LAotCQkucHNtX2VudHJ5X251bGxmdW5jX3JldHJpZXMgID0gMywKLQkJLnBzbV9lbnRyeV9oYW5nb3Zlcl9wZXJpb2QgICA9IDEsCi0JCS5rZWVwX2FsaXZlX2ludGVydmFsICAgICAgICAgPSA1NTAwMCwKLQkJLm1heF9saXN0ZW5faW50ZXJ2YWwgICAgICAgICA9IDIwLAotCX0sCi0JLml0cmltID0gewotCQkuZW5hYmxlID0gZmFsc2UsCi0JCS50aW1lb3V0ID0gNTAwMDAsCi0JfSwKLQkucG1fY29uZmlnID0gewotCQkuaG9zdF9jbGtfc2V0dGxpbmdfdGltZSA9IDUwMDAsCi0JCS5ob3N0X2Zhc3Rfd2FrZXVwX3N1cHBvcnQgPSBmYWxzZQotCX0sCi0JLnJvYW1fdHJpZ2dlciA9IHsKLQkJLnRyaWdnZXJfcGFjaW5nICAgICAgICAgICAgICAgPSAxLAotCQkuYXZnX3dlaWdodF9yc3NpX2JlYWNvbiAgICAgICA9IDIwLAotCQkuYXZnX3dlaWdodF9yc3NpX2RhdGEgICAgICAgICA9IDEwLAotCQkuYXZnX3dlaWdodF9zbnJfYmVhY29uICAgICAgICA9IDIwLAotCQkuYXZnX3dlaWdodF9zbnJfZGF0YSAgICAgICAgICA9IDEwCi0JfSwKLQkuc2NhbiA9IHsKLQkJLm1pbl9kd2VsbF90aW1lX2FjdGl2ZSAgICAgICAgPSA3NTAwLAotCQkubWF4X2R3ZWxsX3RpbWVfYWN0aXZlICAgICAgICA9IDMwMDAwLAotCQkubWluX2R3ZWxsX3RpbWVfcGFzc2l2ZSAgICAgICA9IDMwMDAwLAotCQkubWF4X2R3ZWxsX3RpbWVfcGFzc2l2ZSAgICAgICA9IDYwMDAwLAotCQkubnVtX3Byb2JlX3JlcXMgICAgICAgICAgICAgICA9IDIsCi0JfSwKLQkucmYgPSB7Ci0JCS50eF9wZXJfY2hhbm5lbF9wb3dlcl9jb21wZW5zYXRpb25fMiA9IHsKLQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JCX0sCi0JCS50eF9wZXJfY2hhbm5lbF9wb3dlcl9jb21wZW5zYXRpb25fNSA9IHsKLQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkJfSwKLQl9LAotfTsKLQotc3RhdGljIHZvaWQgX193bDEyNzFfb3BfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3Qgd2wxMjcxICp3bCk7Ci0KLQotc3RhdGljIHZvaWQgd2wxMjcxX2RldmljZV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQotfQotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB3bDEyNzFfZGV2aWNlID0gewotCS5uYW1lICAgICAgICAgICA9ICJ3bDEyNzEiLAotCS5pZCAgICAgICAgICAgICA9IC0xLAotCi0JLyogZGV2aWNlIG1vZGVsIGluc2lzdHMgdG8gaGF2ZSBhIHJlbGVhc2UgZnVuY3Rpb24gKi8KLQkuZGV2ICAgICAgICAgICAgPSB7Ci0JCS5yZWxlYXNlID0gd2wxMjcxX2RldmljZV9yZWxlYXNlLAotCX0sCi19OwotCi1zdGF0aWMgTElTVF9IRUFEKHdsX2xpc3QpOwotCi1zdGF0aWMgaW50IHdsMTI3MV9kZXZfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbWUsIHVuc2lnbmVkIGxvbmcgd2hhdCwKLQkJCSAgICAgdm9pZCAqYXJnKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBhcmc7Ci0Jc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldjsKLQlzdHJ1Y3Qgd2lwaHkgKndpcGh5OwotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OwotCXN0cnVjdCB3bDEyNzEgKndsOwotCXN0cnVjdCB3bDEyNzEgKndsX3RlbXA7Ci0JaW50IHJldCA9IDA7Ci0KLQkvKiBDaGVjayB0aGF0IHRoaXMgbm90aWZpY2F0aW9uIGlzIGZvciB1cy4gKi8KLQlpZiAod2hhdCAhPSBORVRERVZfQ0hBTkdFKQotCQlyZXR1cm4gTk9USUZZX0RPTkU7Ci0KLQl3ZGV2ID0gZGV2LT5pZWVlODAyMTFfcHRyOwotCWlmICh3ZGV2ID09IE5VTEwpCi0JCXJldHVybiBOT1RJRllfRE9ORTsKLQotCXdpcGh5ID0gd2Rldi0+d2lwaHk7Ci0JaWYgKHdpcGh5ID09IE5VTEwpCi0JCXJldHVybiBOT1RJRllfRE9ORTsKLQotCWh3ID0gd2lwaHlfcHJpdih3aXBoeSk7Ci0JaWYgKGh3ID09IE5VTEwpCi0JCXJldHVybiBOT1RJRllfRE9ORTsKLQotCXdsX3RlbXAgPSBody0+cHJpdjsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHdsLCAmd2xfbGlzdCwgbGlzdCkgewotCQlpZiAod2wgPT0gd2xfdGVtcCkKLQkJCWJyZWFrOwotCX0KLQlpZiAod2wgIT0gd2xfdGVtcCkKLQkJcmV0dXJuIE5PVElGWV9ET05FOwotCi0JbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKLQotCWlmICh3bC0+c3RhdGUgPT0gV0wxMjcxX1NUQVRFX09GRikKLQkJZ290byBvdXQ7Ci0KLQlpZiAoIXRlc3RfYml0KFdMMTI3MV9GTEFHX1NUQV9BU1NPQ0lBVEVELCAmd2wtPmZsYWdzKSkKLQkJZ290byBvdXQ7Ci0KLQlyZXQgPSB3bDEyNzFfcHNfZWxwX3dha2V1cCh3bCwgZmFsc2UpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dDsKLQotCWlmICgoZGV2LT5vcGVyc3RhdGUgPT0gSUZfT1BFUl9VUCkgJiYKLQkgICAgIXRlc3RfYW5kX3NldF9iaXQoV0wxMjcxX0ZMQUdfU1RBX1NUQVRFX1NFTlQsICZ3bC0+ZmxhZ3MpKSB7Ci0JCXdsMTI3MV9jbWRfc2V0X3N0YV9zdGF0ZSh3bCk7Ci0JCXdsMTI3MV9pbmZvKCJBc3NvY2lhdGlvbiBjb21wbGV0ZWQuIik7Ci0JfQotCi0Jd2wxMjcxX3BzX2VscF9zbGVlcCh3bCk7Ci0KLW91dDoKLQltdXRleF91bmxvY2soJndsLT5tdXRleCk7Ci0KLQlyZXR1cm4gTk9USUZZX09LOwotfQotCi1zdGF0aWMgdm9pZCB3bDEyNzFfY29uZl9pbml0KHN0cnVjdCB3bDEyNzEgKndsKQotewotCi0JLyoKLQkgKiBUaGlzIGZ1bmN0aW9uIGFwcGxpZXMgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiB0byB0aGUgZHJpdmVyLiBUaGlzCi0JICogZnVuY3Rpb24gaXMgaW52b2tlZCB1cG9uIGRyaXZlciBsb2FkIChzcGkgcHJvYmUuKQotCSAqCi0JICogVGhlIGNvbmZpZ3VyYXRpb24gaXMgc3RvcmVkIGluIGEgcnVuLXRpbWUgc3RydWN0dXJlIGluIG9yZGVyIHRvCi0JICogZmFjaWxpdGF0ZSBmb3IgcnVuLXRpbWUgYWRqdXN0bWVudCBvZiBhbnkgb2YgdGhlIHBhcmFtZXRlcnMuIE1ha2luZwotCSAqIGNoYW5nZXMgdG8gdGhlIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlIHdpbGwgYXBwbHkgdGhlIG5ldyB2YWx1ZXMgb24KLQkgKiB0aGUgbmV4dCBpbnRlcmZhY2UgdXAgKHdsMTI3MV9vcF9zdGFydC4pCi0JICovCi0KLQkvKiBhcHBseSBkcml2ZXIgZGVmYXVsdCBjb25maWd1cmF0aW9uICovCi0JbWVtY3B5KCZ3bC0+Y29uZiwgJmRlZmF1bHRfY29uZiwgc2l6ZW9mKGRlZmF1bHRfY29uZikpOwotfQotCi0KLXN0YXRpYyBpbnQgd2wxMjcxX3BsdF9pbml0KHN0cnVjdCB3bDEyNzEgKndsKQotewotCXN0cnVjdCBjb25mX3R4X2FjX2NhdGVnb3J5ICpjb25mX2FjOwotCXN0cnVjdCBjb25mX3R4X3RpZCAqY29uZl90aWQ7Ci0JaW50IHJldCwgaTsKLQotCXJldCA9IHdsMTI3MV9jbWRfZ2VuZXJhbF9wYXJtcyh3bCk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSB3bDEyNzFfY21kX3JhZGlvX3Bhcm1zKHdsKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IHdsMTI3MV9jbWRfZXh0X3JhZGlvX3Bhcm1zKHdsKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IHdsMTI3MV9pbml0X3RlbXBsYXRlc19jb25maWcod2wpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JcmV0ID0gd2wxMjcxX2FjeF9pbml0X21lbV9jb25maWcod2wpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JLyogUEhZIGxheWVyIGNvbmZpZyAqLwotCXJldCA9IHdsMTI3MV9pbml0X3BoeV9jb25maWcod2wpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dF9mcmVlX21lbW1hcDsKLQotCXJldCA9IHdsMTI3MV9hY3hfZGNvX2l0cmltX3BhcmFtcyh3bCk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gb3V0X2ZyZWVfbWVtbWFwOwotCi0JLyogSW5pdGlhbGl6ZSBjb25uZWN0aW9uIG1vbml0b3JpbmcgdGhyZXNob2xkcyAqLwotCXJldCA9IHdsMTI3MV9hY3hfY29ubl9tb25pdF9wYXJhbXMod2wsIGZhbHNlKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBvdXRfZnJlZV9tZW1tYXA7Ci0KLQkvKiBCbHVldG9vdGggV0xBTiBjb2V4aXN0ZW5jZSAqLwotCXJldCA9IHdsMTI3MV9pbml0X3B0YSh3bCk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gb3V0X2ZyZWVfbWVtbWFwOwotCi0JLyogRW5lcmd5IGRldGVjdGlvbiAqLwotCXJldCA9IHdsMTI3MV9pbml0X2VuZXJneV9kZXRlY3Rpb24od2wpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dF9mcmVlX21lbW1hcDsKLQotCS8qIERlZmF1bHQgZnJhZ21lbnRhdGlvbiB0aHJlc2hvbGQgKi8KLQlyZXQgPSB3bDEyNzFfYWN4X2ZyYWdfdGhyZXNob2xkKHdsKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBvdXRfZnJlZV9tZW1tYXA7Ci0KLQkvKiBEZWZhdWx0IFRJRC9BQyBjb25maWd1cmF0aW9uICovCi0JQlVHX09OKHdsLT5jb25mLnR4LnRpZF9jb25mX2NvdW50ICE9IHdsLT5jb25mLnR4LmFjX2NvbmZfY291bnQpOwotCWZvciAoaSA9IDA7IGkgPCB3bC0+Y29uZi50eC50aWRfY29uZl9jb3VudDsgaSsrKSB7Ci0JCWNvbmZfYWMgPSAmd2wtPmNvbmYudHguYWNfY29uZltpXTsKLQkJcmV0ID0gd2wxMjcxX2FjeF9hY19jZmcod2wsIGNvbmZfYWMtPmFjLCBjb25mX2FjLT5jd19taW4sCi0JCQkJCWNvbmZfYWMtPmN3X21heCwgY29uZl9hYy0+YWlmc24sCi0JCQkJCWNvbmZfYWMtPnR4X29wX2xpbWl0KTsKLQkJaWYgKHJldCA8IDApCi0JCQlnb3RvIG91dF9mcmVlX21lbW1hcDsKLQotCQljb25mX3RpZCA9ICZ3bC0+Y29uZi50eC50aWRfY29uZltpXTsKLQkJcmV0ID0gd2wxMjcxX2FjeF90aWRfY2ZnKHdsLCBjb25mX3RpZC0+cXVldWVfaWQsCi0JCQkJCSBjb25mX3RpZC0+Y2hhbm5lbF90eXBlLAotCQkJCQkgY29uZl90aWQtPnRzaWQsCi0JCQkJCSBjb25mX3RpZC0+cHNfc2NoZW1lLAotCQkJCQkgY29uZl90aWQtPmFja19wb2xpY3ksCi0JCQkJCSBjb25mX3RpZC0+YXBzZF9jb25mWzBdLAotCQkJCQkgY29uZl90aWQtPmFwc2RfY29uZlsxXSk7Ci0JCWlmIChyZXQgPCAwKQotCQkJZ290byBvdXRfZnJlZV9tZW1tYXA7Ci0JfQotCi0JLyogRW5hYmxlIGRhdGEgcGF0aCAqLwotCXJldCA9IHdsMTI3MV9jbWRfZGF0YV9wYXRoKHdsLCAxKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBvdXRfZnJlZV9tZW1tYXA7Ci0KLQkvKiBDb25maWd1cmUgZm9yIENBTSBwb3dlciBzYXZpbmcgKGllLiBhbHdheXMgYWN0aXZlKSAqLwotCXJldCA9IHdsMTI3MV9hY3hfc2xlZXBfYXV0aCh3bCwgV0wxMjcxX1BTTV9DQU0pOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dF9mcmVlX21lbW1hcDsKLQotCS8qIGNvbmZpZ3VyZSBQTSAqLwotCXJldCA9IHdsMTI3MV9hY3hfcG1fY29uZmlnKHdsKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBvdXRfZnJlZV9tZW1tYXA7Ci0KLQlyZXR1cm4gMDsKLQotIG91dF9mcmVlX21lbW1hcDoKLQlrZnJlZSh3bC0+dGFyZ2V0X21lbV9tYXApOwotCXdsLT50YXJnZXRfbWVtX21hcCA9IE5VTEw7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCB3bDEyNzFfZndfc3RhdHVzKHN0cnVjdCB3bDEyNzEgKndsLAotCQkJICAgICBzdHJ1Y3Qgd2wxMjcxX2Z3X3N0YXR1cyAqc3RhdHVzKQotewotCXN0cnVjdCB0aW1lc3BlYyB0czsKLQl1MzIgdG90YWwgPSAwOwotCWludCBpOwotCi0Jd2wxMjcxX3Jhd19yZWFkKHdsLCBGV19TVEFUVVNfQUREUiwgc3RhdHVzLCBzaXplb2YoKnN0YXR1cyksIGZhbHNlKTsKLQotCXdsMTI3MV9kZWJ1ZyhERUJVR19JUlEsICJpbnRyOiAweCV4IChmd19yeF9jb3VudGVyID0gJWQsICIKLQkJICAgICAiZHJ2X3J4X2NvdW50ZXIgPSAlZCwgdHhfcmVzdWx0c19jb3VudGVyID0gJWQpIiwKLQkJICAgICBzdGF0dXMtPmludHIsCi0JCSAgICAgc3RhdHVzLT5md19yeF9jb3VudGVyLAotCQkgICAgIHN0YXR1cy0+ZHJ2X3J4X2NvdW50ZXIsCi0JCSAgICAgc3RhdHVzLT50eF9yZXN1bHRzX2NvdW50ZXIpOwotCi0JLyogdXBkYXRlIG51bWJlciBvZiBhdmFpbGFibGUgVFggYmxvY2tzICovCi0JZm9yIChpID0gMDsgaSA8IE5VTV9UWF9RVUVVRVM7IGkrKykgewotCQl1MzIgY250ID0gbGUzMl90b19jcHUoc3RhdHVzLT50eF9yZWxlYXNlZF9ibGtzW2ldKSAtCi0JCQl3bC0+dHhfYmxvY2tzX2ZyZWVkW2ldOwotCi0JCXdsLT50eF9ibG9ja3NfZnJlZWRbaV0gPQotCQkJbGUzMl90b19jcHUoc3RhdHVzLT50eF9yZWxlYXNlZF9ibGtzW2ldKTsKLQkJd2wtPnR4X2Jsb2Nrc19hdmFpbGFibGUgKz0gY250OwotCQl0b3RhbCArPSBjbnQ7Ci0JfQotCi0JLyogaWYgbW9yZSBibG9ja3MgYXJlIGF2YWlsYWJsZSBub3csIHNjaGVkdWxlIHNvbWUgdHggd29yayAqLwotCWlmICh0b3RhbCAmJiAhc2tiX3F1ZXVlX2VtcHR5KCZ3bC0+dHhfcXVldWUpKQotCQlpZWVlODAyMTFfcXVldWVfd29yayh3bC0+aHcsICZ3bC0+dHhfd29yayk7Ci0KLQkvKiB1cGRhdGUgdGhlIGhvc3QtY2hpcHNldCB0aW1lIG9mZnNldCAqLwotCWdldG5zdGltZW9mZGF5KCZ0cyk7Ci0Jd2wtPnRpbWVfb2Zmc2V0ID0gKHRpbWVzcGVjX3RvX25zKCZ0cykgPj4gMTApIC0KLQkJKHM2NClsZTMyX3RvX2NwdShzdGF0dXMtPmZ3X2xvY2FsdGltZSk7Ci19Ci0KLSNkZWZpbmUgV0wxMjcxX0lSUV9NQVhfTE9PUFMgMTAKLQotc3RhdGljIHZvaWQgd2wxMjcxX2lycV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlpbnQgcmV0OwotCXUzMiBpbnRyOwotCWludCBsb29wY291bnQgPSBXTDEyNzFfSVJRX01BWF9MT09QUzsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCB3bDEyNzEgKndsID0KLQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3bDEyNzEsIGlycV93b3JrKTsKLQotCW11dGV4X2xvY2soJndsLT5tdXRleCk7Ci0KLQl3bDEyNzFfZGVidWcoREVCVUdfSVJRLCAiSVJRIHdvcmsiKTsKLQotCWlmICh1bmxpa2VseSh3bC0+c3RhdGUgPT0gV0wxMjcxX1NUQVRFX09GRikpCi0JCWdvdG8gb3V0OwotCi0JcmV0ID0gd2wxMjcxX3BzX2VscF93YWtldXAod2wsIHRydWUpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZ3bC0+d2xfbG9jaywgZmxhZ3MpOwotCXdoaWxlICh0ZXN0X2JpdChXTDEyNzFfRkxBR19JUlFfUEVORElORywgJndsLT5mbGFncykgJiYgbG9vcGNvdW50KSB7Ci0JCWNsZWFyX2JpdChXTDEyNzFfRkxBR19JUlFfUEVORElORywgJndsLT5mbGFncyk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndsLT53bF9sb2NrLCBmbGFncyk7Ci0JCWxvb3Bjb3VudC0tOwotCi0JCXdsMTI3MV9md19zdGF0dXMod2wsIHdsLT5md19zdGF0dXMpOwotCQlpbnRyID0gbGUzMl90b19jcHUod2wtPmZ3X3N0YXR1cy0+aW50cik7Ci0JCWlmICghaW50cikgewotCQkJd2wxMjcxX2RlYnVnKERFQlVHX0lSUSwgIlplcm8gaW50ZXJydXB0IHJlY2VpdmVkLiIpOwotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJndsLT53bF9sb2NrLCBmbGFncyk7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCWludHIgJj0gV0wxMjcxX0lOVFJfTUFTSzsKLQotCQlpZiAoaW50ciAmIFdMMTI3MV9BQ1hfSU5UUl9EQVRBKSB7Ci0JCQl3bDEyNzFfZGVidWcoREVCVUdfSVJRLCAiV0wxMjcxX0FDWF9JTlRSX0RBVEEiKTsKLQotCQkJLyogY2hlY2sgZm9yIHR4IHJlc3VsdHMgKi8KLQkJCWlmICh3bC0+Zndfc3RhdHVzLT50eF9yZXN1bHRzX2NvdW50ZXIgIT0KLQkJCSAgICAod2wtPnR4X3Jlc3VsdHNfY291bnQgJiAweGZmKSkKLQkJCQl3bDEyNzFfdHhfY29tcGxldGUod2wpOwotCi0JCQl3bDEyNzFfcngod2wsIHdsLT5md19zdGF0dXMpOwotCQl9Ci0KLQkJaWYgKGludHIgJiBXTDEyNzFfQUNYX0lOVFJfRVZFTlRfQSkgewotCQkJd2wxMjcxX2RlYnVnKERFQlVHX0lSUSwgIldMMTI3MV9BQ1hfSU5UUl9FVkVOVF9BIik7Ci0JCQl3bDEyNzFfZXZlbnRfaGFuZGxlKHdsLCAwKTsKLQkJfQotCi0JCWlmIChpbnRyICYgV0wxMjcxX0FDWF9JTlRSX0VWRU5UX0IpIHsKLQkJCXdsMTI3MV9kZWJ1ZyhERUJVR19JUlEsICJXTDEyNzFfQUNYX0lOVFJfRVZFTlRfQiIpOwotCQkJd2wxMjcxX2V2ZW50X2hhbmRsZSh3bCwgMSk7Ci0JCX0KLQotCQlpZiAoaW50ciAmIFdMMTI3MV9BQ1hfSU5UUl9JTklUX0NPTVBMRVRFKQotCQkJd2wxMjcxX2RlYnVnKERFQlVHX0lSUSwKLQkJCQkgICAgICJXTDEyNzFfQUNYX0lOVFJfSU5JVF9DT01QTEVURSIpOwotCi0JCWlmIChpbnRyICYgV0wxMjcxX0FDWF9JTlRSX0hXX0FWQUlMQUJMRSkKLQkJCXdsMTI3MV9kZWJ1ZyhERUJVR19JUlEsICJXTDEyNzFfQUNYX0lOVFJfSFdfQVZBSUxBQkxFIik7Ci0KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJndsLT53bF9sb2NrLCBmbGFncyk7Ci0JfQotCi0JaWYgKHRlc3RfYml0KFdMMTI3MV9GTEFHX0lSUV9QRU5ESU5HLCAmd2wtPmZsYWdzKSkKLQkJaWVlZTgwMjExX3F1ZXVlX3dvcmsod2wtPmh3LCAmd2wtPmlycV93b3JrKTsKLQllbHNlCi0JCWNsZWFyX2JpdChXTDEyNzFfRkxBR19JUlFfUlVOTklORywgJndsLT5mbGFncyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2wtPndsX2xvY2ssIGZsYWdzKTsKLQotCXdsMTI3MV9wc19lbHBfc2xlZXAod2wpOwotCi1vdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOwotfQotCi1zdGF0aWMgaW50IHdsMTI3MV9mZXRjaF9maXJtd2FyZShzdHJ1Y3Qgd2wxMjcxICp3bCkKLXsKLQljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OwotCWludCByZXQ7Ci0KLQlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgV0wxMjcxX0ZXX05BTUUsIHdsMTI3MV93bF90b19kZXYod2wpKTsKLQotCWlmIChyZXQgPCAwKSB7Ci0JCXdsMTI3MV9lcnJvcigiY291bGQgbm90IGdldCBmaXJtd2FyZTogJWQiLCByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCWlmIChmdy0+c2l6ZSAlIDQpIHsKLQkJd2wxMjcxX2Vycm9yKCJmaXJtd2FyZSBzaXplIGlzIG5vdCBtdWx0aXBsZSBvZiAzMiBiaXRzOiAlenUiLAotCQkJICAgICBmdy0+c2l6ZSk7Ci0JCXJldCA9IC1FSUxTRVE7Ci0JCWdvdG8gb3V0OwotCX0KLQotCXdsLT5md19sZW4gPSBmdy0+c2l6ZTsKLQl3bC0+ZncgPSB2bWFsbG9jKHdsLT5md19sZW4pOwotCi0JaWYgKCF3bC0+ZncpIHsKLQkJd2wxMjcxX2Vycm9yKCJjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgZmlybXdhcmUiKTsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JbWVtY3B5KHdsLT5mdywgZnctPmRhdGEsIHdsLT5md19sZW4pOwotCi0JcmV0ID0gMDsKLQotb3V0OgotCXJlbGVhc2VfZmlybXdhcmUoZncpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCB3bDEyNzFfZmV0Y2hfbnZzKHN0cnVjdCB3bDEyNzEgKndsKQotewotCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7Ci0JaW50IHJldDsKLQotCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBXTDEyNzFfTlZTX05BTUUsIHdsMTI3MV93bF90b19kZXYod2wpKTsKLQotCWlmIChyZXQgPCAwKSB7Ci0JCXdsMTI3MV9lcnJvcigiY291bGQgbm90IGdldCBudnMgZmlsZTogJWQiLCByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXdsLT5udnMgPSBrbWVtZHVwKGZ3LT5kYXRhLCBzaXplb2Yoc3RydWN0IHdsMTI3MV9udnNfZmlsZSksIEdGUF9LRVJORUwpOwotCi0JaWYgKCF3bC0+bnZzKSB7Ci0JCXdsMTI3MV9lcnJvcigiY291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIG52cyBmaWxlIik7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0OwotCX0KLQotCXdsLT5udnNfbGVuID0gZnctPnNpemU7Ci0KLW91dDoKLQlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHdsMTI3MV9yZWNvdmVyeV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3Qgd2wxMjcxICp3bCA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd2wxMjcxLCByZWNvdmVyeV93b3JrKTsKLQotCW11dGV4X2xvY2soJndsLT5tdXRleCk7Ci0KLQlpZiAod2wtPnN0YXRlICE9IFdMMTI3MV9TVEFURV9PTikKLQkJZ290byBvdXQ7Ci0KLQl3bDEyNzFfaW5mbygiSGFyZHdhcmUgcmVjb3ZlcnkgaW4gcHJvZ3Jlc3MuIik7Ci0KLQlpZiAodGVzdF9iaXQoV0wxMjcxX0ZMQUdfU1RBX0FTU09DSUFURUQsICZ3bC0+ZmxhZ3MpKQotCQlpZWVlODAyMTFfY29ubmVjdGlvbl9sb3NzKHdsLT52aWYpOwotCi0JLyogcmVib290IHRoZSBjaGlwc2V0ICovCi0JX193bDEyNzFfb3BfcmVtb3ZlX2ludGVyZmFjZSh3bCk7Ci0JaWVlZTgwMjExX3Jlc3RhcnRfaHcod2wtPmh3KTsKLQotb3V0OgotCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKLX0KLQotc3RhdGljIHZvaWQgd2wxMjcxX2Z3X3dha2V1cChzdHJ1Y3Qgd2wxMjcxICp3bCkKLXsKLQl1MzIgZWxwX3JlZzsKLQotCWVscF9yZWcgPSBFTFBDVFJMX1dBS0VfVVA7Ci0Jd2wxMjcxX3Jhd193cml0ZTMyKHdsLCBIV19BQ0NFU1NfRUxQX0NUUkxfUkVHX0FERFIsIGVscF9yZWcpOwotfQotCi1zdGF0aWMgaW50IHdsMTI3MV9zZXR1cChzdHJ1Y3Qgd2wxMjcxICp3bCkKLXsKLQl3bC0+Zndfc3RhdHVzID0ga21hbGxvYyhzaXplb2YoKndsLT5md19zdGF0dXMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXdsLT5md19zdGF0dXMpCi0JCXJldHVybiAtRU5PTUVNOwotCi0Jd2wtPnR4X3Jlc19pZiA9IGttYWxsb2Moc2l6ZW9mKCp3bC0+dHhfcmVzX2lmKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF3bC0+dHhfcmVzX2lmKSB7Ci0JCWtmcmVlKHdsLT5md19zdGF0dXMpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB3bDEyNzFfY2hpcF93YWtldXAoc3RydWN0IHdsMTI3MSAqd2wpCi17Ci0Jc3RydWN0IHdsMTI3MV9wYXJ0aXRpb25fc2V0IHBhcnRpdGlvbjsKLQlpbnQgcmV0ID0gMDsKLQotCW1zbGVlcChXTDEyNzFfUFJFX1BPV0VSX09OX1NMRUVQKTsKLQlyZXQgPSB3bDEyNzFfcG93ZXJfb24od2wpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dDsKLQltc2xlZXAoV0wxMjcxX1BPV0VSX09OX1NMRUVQKTsKLQl3bDEyNzFfaW9fcmVzZXQod2wpOwotCXdsMTI3MV9pb19pbml0KHdsKTsKLQotCS8qIFdlIGRvbid0IG5lZWQgYSByZWFsIG1lbW9yeSBwYXJ0aXRpb24gaGVyZSwgYmVjYXVzZSB3ZSBvbmx5IHdhbnQKLQkgKiB0byB1c2UgdGhlIHJlZ2lzdGVycyBhdCB0aGlzIHBvaW50LiAqLwotCW1lbXNldCgmcGFydGl0aW9uLCAwLCBzaXplb2YocGFydGl0aW9uKSk7Ci0JcGFydGl0aW9uLnJlZy5zdGFydCA9IFJFR0lTVEVSU19CQVNFOwotCXBhcnRpdGlvbi5yZWcuc2l6ZSA9IFJFR0lTVEVSU19ET1dOX1NJWkU7Ci0Jd2wxMjcxX3NldF9wYXJ0aXRpb24od2wsICZwYXJ0aXRpb24pOwotCi0JLyogRUxQIG1vZHVsZSB3YWtlIHVwICovCi0Jd2wxMjcxX2Z3X3dha2V1cCh3bCk7Ci0KLQkvKiB3aGFsX0Z3Q3RybF9Cb290U20oKSAqLwotCi0JLyogMC4gcmVhZCBjaGlwIGlkIGZyb20gQ0hJUF9JRCAqLwotCXdsLT5jaGlwLmlkID0gd2wxMjcxX3JlYWQzMih3bCwgQ0hJUF9JRF9CKTsKLQotCS8qIDEuIGNoZWNrIGlmIGNoaXAgaWQgaXMgdmFsaWQgKi8KLQotCXN3aXRjaCAod2wtPmNoaXAuaWQpIHsKLQljYXNlIENISVBfSURfMTI3MV9QRzEwOgotCQl3bDEyNzFfd2FybmluZygiY2hpcCBpZCAweCV4ICgxMjcxIFBHMTApIHN1cHBvcnQgaXMgb2Jzb2xldGUiLAotCQkJICAgICAgIHdsLT5jaGlwLmlkKTsKLQotCQlyZXQgPSB3bDEyNzFfc2V0dXAod2wpOwotCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gb3V0OwotCQlicmVhazsKLQljYXNlIENISVBfSURfMTI3MV9QRzIwOgotCQl3bDEyNzFfZGVidWcoREVCVUdfQk9PVCwgImNoaXAgaWQgMHgleCAoMTI3MSBQRzIwKSIsCi0JCQkgICAgIHdsLT5jaGlwLmlkKTsKLQotCQlyZXQgPSB3bDEyNzFfc2V0dXAod2wpOwotCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gb3V0OwotCQlicmVhazsKLQlkZWZhdWx0OgotCQl3bDEyNzFfd2FybmluZygidW5zdXBwb3J0ZWQgY2hpcCBpZDogMHgleCIsIHdsLT5jaGlwLmlkKTsKLQkJcmV0ID0gLUVOT0RFVjsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKHdsLT5mdyA9PSBOVUxMKSB7Ci0JCXJldCA9IHdsMTI3MV9mZXRjaF9maXJtd2FyZSh3bCk7Ci0JCWlmIChyZXQgPCAwKQotCQkJZ290byBvdXQ7Ci0JfQotCi0JLyogTm8gTlZTIGZyb20gbmV0bGluaywgdHJ5IHRvIGdldCBpdCBmcm9tIHRoZSBmaWxlc3lzdGVtICovCi0JaWYgKHdsLT5udnMgPT0gTlVMTCkgewotCQlyZXQgPSB3bDEyNzFfZmV0Y2hfbnZzKHdsKTsKLQkJaWYgKHJldCA8IDApCi0JCQlnb3RvIG91dDsKLQl9Ci0KLW91dDoKLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgd2wxMjcxX3BsdF9zdGFydChzdHJ1Y3Qgd2wxMjcxICp3bCkKLXsKLQlpbnQgcmV0cmllcyA9IFdMMTI3MV9CT09UX1JFVFJJRVM7Ci0JaW50IHJldDsKLQotCW11dGV4X2xvY2soJndsLT5tdXRleCk7Ci0KLQl3bDEyNzFfbm90aWNlKCJwb3dlciB1cCIpOwotCi0JaWYgKHdsLT5zdGF0ZSAhPSBXTDEyNzFfU1RBVEVfT0ZGKSB7Ci0JCXdsMTI3MV9lcnJvcigiY2Fubm90IGdvIGludG8gUExUIHN0YXRlIGJlY2F1c2Ugbm90ICIKLQkJCSAgICAgImluIG9mZiBzdGF0ZTogJWQiLCB3bC0+c3RhdGUpOwotCQlyZXQgPSAtRUJVU1k7Ci0JCWdvdG8gb3V0OwotCX0KLQotCXdoaWxlIChyZXRyaWVzKSB7Ci0JCXJldHJpZXMtLTsKLQkJcmV0ID0gd2wxMjcxX2NoaXBfd2FrZXVwKHdsKTsKLQkJaWYgKHJldCA8IDApCi0JCQlnb3RvIHBvd2VyX29mZjsKLQotCQlyZXQgPSB3bDEyNzFfYm9vdCh3bCk7Ci0JCWlmIChyZXQgPCAwKQotCQkJZ290byBwb3dlcl9vZmY7Ci0KLQkJcmV0ID0gd2wxMjcxX3BsdF9pbml0KHdsKTsKLQkJaWYgKHJldCA8IDApCi0JCQlnb3RvIGlycV9kaXNhYmxlOwotCi0JCXdsLT5zdGF0ZSA9IFdMMTI3MV9TVEFURV9QTFQ7Ci0JCXdsMTI3MV9ub3RpY2UoImZpcm13YXJlIGJvb3RlZCBpbiBQTFQgbW9kZSAoJXMpIiwKLQkJCSAgICAgIHdsLT5jaGlwLmZ3X3Zlcik7Ci0JCWdvdG8gb3V0OwotCi1pcnFfZGlzYWJsZToKLQkJd2wxMjcxX2Rpc2FibGVfaW50ZXJydXB0cyh3bCk7Ci0JCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKLQkJLyogVW5sb2NraW5nIHRoZSBtdXRleCBpbiB0aGUgbWlkZGxlIG9mIGhhbmRsaW5nIGlzCi0JCSAgIGluaGVyZW50bHkgdW5zYWZlLiBJbiB0aGlzIGNhc2Ugd2UgZGVlbSBpdCBzYWZlIHRvIGRvLAotCQkgICBiZWNhdXNlIHdlIG5lZWQgdG8gbGV0IGFueSBwb3NzaWJseSBwZW5kaW5nIElSUSBvdXQgb2YKLQkJICAgdGhlIHN5c3RlbSAoYW5kIHdoaWxlIHdlIGFyZSBXTDEyNzFfU1RBVEVfT0ZGIHRoZSBJUlEKLQkJICAgd29yayBmdW5jdGlvbiB3aWxsIG5vdCBkbyBhbnl0aGluZy4pIEFsc28sIGFueSBvdGhlcgotCQkgICBwb3NzaWJsZSBjb25jdXJyZW50IG9wZXJhdGlvbnMgd2lsbCBmYWlsIGR1ZSB0byB0aGUKLQkJICAgY3VycmVudCBzdGF0ZSwgaGVuY2UgdGhlIHdsMTI3MSBzdHJ1Y3Qgc2hvdWxkIGJlIHNhZmUuICovCi0JCWNhbmNlbF93b3JrX3N5bmMoJndsLT5pcnFfd29yayk7Ci0JCW11dGV4X2xvY2soJndsLT5tdXRleCk7Ci1wb3dlcl9vZmY6Ci0JCXdsMTI3MV9wb3dlcl9vZmYod2wpOwotCX0KLQotCXdsMTI3MV9lcnJvcigiZmlybXdhcmUgYm9vdCBpbiBQTFQgbW9kZSBmYWlsZWQgZGVzcGl0ZSAlZCByZXRyaWVzIiwKLQkJICAgICBXTDEyNzFfQk9PVF9SRVRSSUVTKTsKLW91dDoKLQltdXRleF91bmxvY2soJndsLT5tdXRleCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgd2wxMjcxX3BsdF9zdG9wKHN0cnVjdCB3bDEyNzEgKndsKQotewotCWludCByZXQgPSAwOwotCi0JbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKLQotCXdsMTI3MV9ub3RpY2UoInBvd2VyIGRvd24iKTsKLQotCWlmICh3bC0+c3RhdGUgIT0gV0wxMjcxX1NUQVRFX1BMVCkgewotCQl3bDEyNzFfZXJyb3IoImNhbm5vdCBwb3dlciBkb3duIGJlY2F1c2Ugbm90IGluIFBMVCAiCi0JCQkgICAgICJzdGF0ZTogJWQiLCB3bC0+c3RhdGUpOwotCQlyZXQgPSAtRUJVU1k7Ci0JCWdvdG8gb3V0OwotCX0KLQotCXdsMTI3MV9kaXNhYmxlX2ludGVycnVwdHMod2wpOwotCXdsMTI3MV9wb3dlcl9vZmYod2wpOwotCi0Jd2wtPnN0YXRlID0gV0wxMjcxX1NUQVRFX09GRjsKLQl3bC0+cnhfY291bnRlciA9IDA7Ci0KLW91dDoKLQltdXRleF91bmxvY2soJndsLT5tdXRleCk7Ci0KLQljYW5jZWxfd29ya19zeW5jKCZ3bC0+aXJxX3dvcmspOwotCWNhbmNlbF93b3JrX3N5bmMoJndsLT5yZWNvdmVyeV93b3JrKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgd2wxMjcxX29wX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCB3bDEyNzEgKndsID0gaHctPnByaXY7Ci0Jc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmh3LT5jb25mOwotCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwotCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEgPSB0eGluZm8tPmNvbnRyb2wuc3RhOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkvKiBwZWVrIGludG8gdGhlIHJhdGVzIGNvbmZpZ3VyZWQgaW4gdGhlIFNUQSBlbnRyeSAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZ3bC0+d2xfbG9jaywgZmxhZ3MpOwotCWlmIChzdGEgJiYgc3RhLT5zdXBwX3JhdGVzW2NvbmYtPmNoYW5uZWwtPmJhbmRdICE9IHdsLT5zdGFfcmF0ZV9zZXQpIHsKLQkJd2wtPnN0YV9yYXRlX3NldCA9IHN0YS0+c3VwcF9yYXRlc1tjb25mLT5jaGFubmVsLT5iYW5kXTsKLQkJc2V0X2JpdChXTDEyNzFfRkxBR19TVEFfUkFURVNfQ0hBTkdFRCwgJndsLT5mbGFncyk7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndsLT53bF9sb2NrLCBmbGFncyk7Ci0KLQkvKiBxdWV1ZSB0aGUgcGFja2V0ICovCi0Jc2tiX3F1ZXVlX3RhaWwoJndsLT50eF9xdWV1ZSwgc2tiKTsKLQotCS8qCi0JICogVGhlIGNoaXAgc3BlY2lmaWMgc2V0dXAgbXVzdCBydW4gYmVmb3JlIHRoZSBmaXJzdCBUWCBwYWNrZXQgLQotCSAqIGJlZm9yZSB0aGF0LCB0aGUgdHhfd29yayB3aWxsIG5vdCBiZSBpbml0aWFsaXplZCEKLQkgKi8KLQotCWllZWU4MDIxMV9xdWV1ZV93b3JrKHdsLT5odywgJndsLT50eF93b3JrKTsKLQotCS8qCi0JICogVGhlIHdvcmtxdWV1ZSBpcyBzbG93IHRvIHByb2Nlc3MgdGhlIHR4X3F1ZXVlIGFuZCB3ZSBuZWVkIHN0b3AKLQkgKiB0aGUgcXVldWUgaGVyZSwgb3RoZXJ3aXNlIHRoZSBxdWV1ZSB3aWxsIGdldCB0b28gbG9uZy4KLQkgKi8KLQlpZiAoc2tiX3F1ZXVlX2xlbigmd2wtPnR4X3F1ZXVlKSA+PSBXTDEyNzFfVFhfUVVFVUVfSElHSF9XQVRFUk1BUkspIHsKLQkJd2wxMjcxX2RlYnVnKERFQlVHX1RYLCAib3BfdHg6IHN0b3BwaW5nIHF1ZXVlcyIpOwotCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZ3bC0+d2xfbG9jaywgZmxhZ3MpOwotCQlpZWVlODAyMTFfc3RvcF9xdWV1ZXMod2wtPmh3KTsKLQkJc2V0X2JpdChXTDEyNzFfRkxBR19UWF9RVUVVRV9TVE9QUEVELCAmd2wtPmZsYWdzKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2wtPndsX2xvY2ssIGZsYWdzKTsKLQl9Ci0KLQlyZXR1cm4gTkVUREVWX1RYX09LOwotfQotCi1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHdsMTI3MV9kZXZfbm90aWZpZXIgPSB7Ci0JLm5vdGlmaWVyX2NhbGwgPSB3bDEyNzFfZGV2X25vdGlmeSwKLX07Ci0KLXN0YXRpYyBpbnQgd2wxMjcxX29wX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQotewotCXdsMTI3MV9kZWJ1ZyhERUJVR19NQUM4MDIxMSwgIm1hYzgwMjExIHN0YXJ0Iik7Ci0KLQkvKgotCSAqIFdlIGhhdmUgdG8gZGVsYXkgdGhlIGJvb3Rpbmcgb2YgdGhlIGhhcmR3YXJlIGJlY2F1c2UKLQkgKiB3ZSBuZWVkIHRvIGtub3cgdGhlIGxvY2FsIE1BQyBhZGRyZXNzIGJlZm9yZSBkb3dubG9hZGluZyBhbmQKLQkgKiBpbml0aWFsaXppbmcgdGhlIGZpcm13YXJlLiBUaGUgTUFDIGFkZHJlc3MgY2Fubm90IGJlIGNoYW5nZWQKLQkgKiBhZnRlciBib290LCBhbmQgd2l0aG91dCB0aGUgcHJvcGVyIE1BQyBhZGRyZXNzLCB0aGUgZmlybXdhcmUKLQkgKiB3aWxsIG5vdCBmdW5jdGlvbiBwcm9wZXJseS4KLQkgKgotCSAqIFRoZSBNQUMgYWRkcmVzcyBpcyBmaXJzdCBrbm93biB3aGVuIHRoZSBjb3JyZXNwb25kaW5nIGludGVyZmFjZQotCSAqIGlzIGFkZGVkLiBUaGF0IGlzIHdoZXJlIHdlIHdpbGwgaW5pdGlhbGl6ZSB0aGUgaGFyZHdhcmUuCi0JICovCi0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgd2wxMjcxX29wX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCi17Ci0Jd2wxMjcxX2RlYnVnKERFQlVHX01BQzgwMjExLCAibWFjODAyMTEgc3RvcCIpOwotfQotCi1zdGF0aWMgaW50IHdsMTI3MV9vcF9hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCi17Ci0Jc3RydWN0IHdsMTI3MSAqd2wgPSBody0+cHJpdjsKLQlzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gaHctPndpcGh5OwotCWludCByZXRyaWVzID0gV0wxMjcxX0JPT1RfUkVUUklFUzsKLQlpbnQgcmV0ID0gMDsKLQotCXdsMTI3MV9kZWJ1ZyhERUJVR19NQUM4MDIxMSwgIm1hYzgwMjExIGFkZCBpbnRlcmZhY2UgdHlwZSAlZCBtYWMgJXBNIiwKLQkJICAgICB2aWYtPnR5cGUsIHZpZi0+YWRkcik7Ci0KLQltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOwotCWlmICh3bC0+dmlmKSB7Ci0JCXJldCA9IC1FQlVTWTsKLQkJZ290byBvdXQ7Ci0JfQotCi0Jd2wtPnZpZiA9IHZpZjsKLQotCXN3aXRjaCAodmlmLT50eXBlKSB7Ci0JY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgotCQl3bC0+YnNzX3R5cGUgPSBCU1NfVFlQRV9TVEFfQlNTOwotCQl3bC0+c2V0X2Jzc190eXBlID0gQlNTX1RZUEVfU1RBX0JTUzsKLQkJYnJlYWs7Ci0JY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKLQkJd2wtPmJzc190eXBlID0gQlNTX1RZUEVfSUJTUzsKLQkJd2wtPnNldF9ic3NfdHlwZSA9IEJTU19UWVBFX1NUQV9CU1M7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldCA9IC1FT1BOT1RTVVBQOwotCQlnb3RvIG91dDsKLQl9Ci0KLQltZW1jcHkod2wtPm1hY19hZGRyLCB2aWYtPmFkZHIsIEVUSF9BTEVOKTsKLQotCWlmICh3bC0+c3RhdGUgIT0gV0wxMjcxX1NUQVRFX09GRikgewotCQl3bDEyNzFfZXJyb3IoImNhbm5vdCBzdGFydCBiZWNhdXNlIG5vdCBpbiBvZmYgc3RhdGU6ICVkIiwKLQkJCSAgICAgd2wtPnN0YXRlKTsKLQkJcmV0ID0gLUVCVVNZOwotCQlnb3RvIG91dDsKLQl9Ci0KLQl3aGlsZSAocmV0cmllcykgewotCQlyZXRyaWVzLS07Ci0JCXJldCA9IHdsMTI3MV9jaGlwX3dha2V1cCh3bCk7Ci0JCWlmIChyZXQgPCAwKQotCQkJZ290byBwb3dlcl9vZmY7Ci0KLQkJcmV0ID0gd2wxMjcxX2Jvb3Qod2wpOwotCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gcG93ZXJfb2ZmOwotCi0JCXJldCA9IHdsMTI3MV9od19pbml0KHdsKTsKLQkJaWYgKHJldCA8IDApCi0JCQlnb3RvIGlycV9kaXNhYmxlOwotCi0JCXdsLT5zdGF0ZSA9IFdMMTI3MV9TVEFURV9PTjsKLQkJd2wxMjcxX2luZm8oImZpcm13YXJlIGJvb3RlZCAoJXMpIiwgd2wtPmNoaXAuZndfdmVyKTsKLQotCQkvKiB1cGRhdGUgaHcvZncgdmVyc2lvbiBpbmZvIGluIHdpcGh5IHN0cnVjdCAqLwotCQl3aXBoeS0+aHdfdmVyc2lvbiA9IHdsLT5jaGlwLmlkOwotCQlzdHJuY3B5KHdpcGh5LT5md192ZXJzaW9uLCB3bC0+Y2hpcC5md192ZXIsCi0JCQlzaXplb2Yod2lwaHktPmZ3X3ZlcnNpb24pKTsKLQotCQlnb3RvIG91dDsKLQotaXJxX2Rpc2FibGU6Ci0JCXdsMTI3MV9kaXNhYmxlX2ludGVycnVwdHMod2wpOwotCQltdXRleF91bmxvY2soJndsLT5tdXRleCk7Ci0JCS8qIFVubG9ja2luZyB0aGUgbXV0ZXggaW4gdGhlIG1pZGRsZSBvZiBoYW5kbGluZyBpcwotCQkgICBpbmhlcmVudGx5IHVuc2FmZS4gSW4gdGhpcyBjYXNlIHdlIGRlZW0gaXQgc2FmZSB0byBkbywKLQkJICAgYmVjYXVzZSB3ZSBuZWVkIHRvIGxldCBhbnkgcG9zc2libHkgcGVuZGluZyBJUlEgb3V0IG9mCi0JCSAgIHRoZSBzeXN0ZW0gKGFuZCB3aGlsZSB3ZSBhcmUgV0wxMjcxX1NUQVRFX09GRiB0aGUgSVJRCi0JCSAgIHdvcmsgZnVuY3Rpb24gd2lsbCBub3QgZG8gYW55dGhpbmcuKSBBbHNvLCBhbnkgb3RoZXIKLQkJICAgcG9zc2libGUgY29uY3VycmVudCBvcGVyYXRpb25zIHdpbGwgZmFpbCBkdWUgdG8gdGhlCi0JCSAgIGN1cnJlbnQgc3RhdGUsIGhlbmNlIHRoZSB3bDEyNzEgc3RydWN0IHNob3VsZCBiZSBzYWZlLiAqLwotCQljYW5jZWxfd29ya19zeW5jKCZ3bC0+aXJxX3dvcmspOwotCQltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOwotcG93ZXJfb2ZmOgotCQl3bDEyNzFfcG93ZXJfb2ZmKHdsKTsKLQl9Ci0KLQl3bDEyNzFfZXJyb3IoImZpcm13YXJlIGJvb3QgZmFpbGVkIGRlc3BpdGUgJWQgcmV0cmllcyIsCi0JCSAgICAgV0wxMjcxX0JPT1RfUkVUUklFUyk7Ci1vdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOwotCi0JaWYgKCFyZXQpCi0JCWxpc3RfYWRkKCZ3bC0+bGlzdCwgJndsX2xpc3QpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgX193bDEyNzFfb3BfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3Qgd2wxMjcxICp3bCkKLXsKLQlpbnQgaTsKLQotCXdsMTI3MV9kZWJ1ZyhERUJVR19NQUM4MDIxMSwgIm1hYzgwMjExIHJlbW92ZSBpbnRlcmZhY2UiKTsKLQotCXdsMTI3MV9pbmZvKCJkb3duIik7Ci0KLQlsaXN0X2RlbCgmd2wtPmxpc3QpOwotCi0JV0FSTl9PTih3bC0+c3RhdGUgIT0gV0wxMjcxX1NUQVRFX09OKTsKLQotCS8qIGVuYWJsZSBkeW4gcHMganVzdCBpbiBjYXNlIChpZiBsZWZ0IG9uIGR1ZSB0byBmdyBjcmFzaCBldGMpICovCi0JaWYgKHdsLT5ic3NfdHlwZSA9PSBCU1NfVFlQRV9TVEFfQlNTKQotCQlpZWVlODAyMTFfZW5hYmxlX2R5bl9wcyh3bC0+dmlmKTsKLQotCWlmICh3bC0+c2Nhbi5zdGF0ZSAhPSBXTDEyNzFfU0NBTl9TVEFURV9JRExFKSB7Ci0JCXdsLT5zY2FuLnN0YXRlID0gV0wxMjcxX1NDQU5fU1RBVEVfSURMRTsKLQkJa2ZyZWUod2wtPnNjYW4uc2Nhbm5lZF9jaCk7Ci0JCXdsLT5zY2FuLnNjYW5uZWRfY2ggPSBOVUxMOwotCQlpZWVlODAyMTFfc2Nhbl9jb21wbGV0ZWQod2wtPmh3LCB0cnVlKTsKLQl9Ci0KLQl3bC0+c3RhdGUgPSBXTDEyNzFfU1RBVEVfT0ZGOwotCi0Jd2wxMjcxX2Rpc2FibGVfaW50ZXJydXB0cyh3bCk7Ci0KLQltdXRleF91bmxvY2soJndsLT5tdXRleCk7Ci0KLQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJndsLT5zY2FuX2NvbXBsZXRlX3dvcmspOwotCWNhbmNlbF93b3JrX3N5bmMoJndsLT5pcnFfd29yayk7Ci0JY2FuY2VsX3dvcmtfc3luYygmd2wtPnR4X3dvcmspOwotCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmd2wtPnBzcG9sbF93b3JrKTsKLQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJndsLT5lbHBfd29yayk7Ci0KLQltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOwotCi0JLyogbGV0J3Mgbm90aWZ5IE1BQzgwMjExIGFib3V0IHRoZSByZW1haW5pbmcgcGVuZGluZyBUWCBmcmFtZXMgKi8KLQl3bDEyNzFfdHhfcmVzZXQod2wpOwotCXdsMTI3MV9wb3dlcl9vZmYod2wpOwotCi0JbWVtc2V0KHdsLT5ic3NpZCwgMCwgRVRIX0FMRU4pOwotCW1lbXNldCh3bC0+c3NpZCwgMCwgSVdfRVNTSURfTUFYX1NJWkUgKyAxKTsKLQl3bC0+c3NpZF9sZW4gPSAwOwotCXdsLT5ic3NfdHlwZSA9IE1BWF9CU1NfVFlQRTsKLQl3bC0+c2V0X2Jzc190eXBlID0gTUFYX0JTU19UWVBFOwotCXdsLT5iYW5kID0gSUVFRTgwMjExX0JBTkRfMkdIWjsKLQotCXdsLT5yeF9jb3VudGVyID0gMDsKLQl3bC0+cHNtX2VudHJ5X3JldHJ5ID0gMDsKLQl3bC0+cG93ZXJfbGV2ZWwgPSBXTDEyNzFfREVGQVVMVF9QT1dFUl9MRVZFTDsKLQl3bC0+dHhfYmxvY2tzX2F2YWlsYWJsZSA9IDA7Ci0Jd2wtPnR4X3Jlc3VsdHNfY291bnQgPSAwOwotCXdsLT50eF9wYWNrZXRzX2NvdW50ID0gMDsKLQl3bC0+dHhfc2VjdXJpdHlfbGFzdF9zZXEgPSAwOwotCXdsLT50eF9zZWN1cml0eV9zZXEgPSAwOwotCXdsLT50aW1lX29mZnNldCA9IDA7Ci0Jd2wtPnNlc3Npb25fY291bnRlciA9IDA7Ci0Jd2wtPnJhdGVfc2V0ID0gQ09ORl9UWF9SQVRFX01BU0tfQkFTSUM7Ci0Jd2wtPnN0YV9yYXRlX3NldCA9IDA7Ci0Jd2wtPmZsYWdzID0gMDsKLQl3bC0+dmlmID0gTlVMTDsKLQl3bC0+ZmlsdGVycyA9IDA7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTlVNX1RYX1FVRVVFUzsgaSsrKQotCQl3bC0+dHhfYmxvY2tzX2ZyZWVkW2ldID0gMDsKLQotCXdsMTI3MV9kZWJ1Z2ZzX3Jlc2V0KHdsKTsKLQotCWtmcmVlKHdsLT5md19zdGF0dXMpOwotCXdsLT5md19zdGF0dXMgPSBOVUxMOwotCWtmcmVlKHdsLT50eF9yZXNfaWYpOwotCXdsLT50eF9yZXNfaWYgPSBOVUxMOwotCWtmcmVlKHdsLT50YXJnZXRfbWVtX21hcCk7Ci0Jd2wtPnRhcmdldF9tZW1fbWFwID0gTlVMTDsKLX0KLQotc3RhdGljIHZvaWQgd2wxMjcxX29wX3JlbW92ZV9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCi17Ci0Jc3RydWN0IHdsMTI3MSAqd2wgPSBody0+cHJpdjsKLQotCW11dGV4X2xvY2soJndsLT5tdXRleCk7Ci0JV0FSTl9PTih3bC0+dmlmICE9IHZpZik7Ci0JX193bDEyNzFfb3BfcmVtb3ZlX2ludGVyZmFjZSh3bCk7Ci0JbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOwotCi0JY2FuY2VsX3dvcmtfc3luYygmd2wtPnJlY292ZXJ5X3dvcmspOwotfQotCi1zdGF0aWMgdm9pZCB3bDEyNzFfY29uZmlndXJlX2ZpbHRlcnMoc3RydWN0IHdsMTI3MSAqd2wsIHVuc2lnbmVkIGludCBmaWx0ZXJzKQotewotCXdsLT5yeF9jb25maWcgPSBXTDEyNzFfREVGQVVMVF9SWF9DT05GSUc7Ci0Jd2wtPnJ4X2ZpbHRlciA9IFdMMTI3MV9ERUZBVUxUX1JYX0ZJTFRFUjsKLQotCS8qIGNvbWJpbmUgcmVxdWVzdGVkIGZpbHRlcnMgd2l0aCBjdXJyZW50IGZpbHRlciBjb25maWcgKi8KLQlmaWx0ZXJzID0gd2wtPmZpbHRlcnMgfCBmaWx0ZXJzOwotCi0Jd2wxMjcxX2RlYnVnKERFQlVHX0ZJTFRFUlMsICJSWCBmaWx0ZXJzIHNldDogIik7Ci0KLQlpZiAoZmlsdGVycyAmIEZJRl9QUk9NSVNDX0lOX0JTUykgewotCQl3bDEyNzFfZGVidWcoREVCVUdfRklMVEVSUywgIiAtIEZJRl9QUk9NSVNDX0lOX0JTUyIpOwotCQl3bC0+cnhfY29uZmlnICY9IH5DRkdfVU5JX0ZJTFRFUl9FTjsKLQkJd2wtPnJ4X2NvbmZpZyB8PSBDRkdfQlNTSURfRklMVEVSX0VOOwotCX0KLQlpZiAoZmlsdGVycyAmIEZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDKSB7Ci0JCXdsMTI3MV9kZWJ1ZyhERUJVR19GSUxURVJTLCAiIC0gRklGX0JDTl9QUkJSRVNQX1BST01JU0MiKTsKLQkJd2wtPnJ4X2NvbmZpZyAmPSB+Q0ZHX0JTU0lEX0ZJTFRFUl9FTjsKLQkJd2wtPnJ4X2NvbmZpZyAmPSB+Q0ZHX1NTSURfRklMVEVSX0VOOwotCX0KLQlpZiAoZmlsdGVycyAmIEZJRl9PVEhFUl9CU1MpIHsKLQkJd2wxMjcxX2RlYnVnKERFQlVHX0ZJTFRFUlMsICIgLSBGSUZfT1RIRVJfQlNTIik7Ci0JCXdsLT5yeF9jb25maWcgJj0gfkNGR19CU1NJRF9GSUxURVJfRU47Ci0JfQotCWlmIChmaWx0ZXJzICYgRklGX0NPTlRST0wpIHsKLQkJd2wxMjcxX2RlYnVnKERFQlVHX0ZJTFRFUlMsICIgLSBGSUZfQ09OVFJPTCIpOwotCQl3bC0+cnhfZmlsdGVyIHw9IENGR19SWF9DVExfRU47Ci0JfQotCWlmIChmaWx0ZXJzICYgRklGX0ZDU0ZBSUwpIHsKLQkJd2wxMjcxX2RlYnVnKERFQlVHX0ZJTFRFUlMsICIgLSBGSUZfRkNTRkFJTCIpOwotCQl3bC0+cnhfZmlsdGVyIHw9IENGR19SWF9GQ1NfRVJST1I7Ci0JfQotfQotCi1zdGF0aWMgaW50IHdsMTI3MV9kdW1teV9qb2luKHN0cnVjdCB3bDEyNzEgKndsKQotewotCWludCByZXQgPSAwOwotCS8qIHdlIG5lZWQgdG8gdXNlIGEgZHVtbXkgQlNTSUQgZm9yIG5vdyAqLwotCXN0YXRpYyBjb25zdCB1OCBkdW1teV9ic3NpZFtFVEhfQUxFTl0gPSB7IDB4MGIsIDB4YWQsIDB4ZGUsCi0JCQkJCQkgIDB4YWQsIDB4YmUsIDB4ZWYgfTsKLQotCW1lbWNweSh3bC0+YnNzaWQsIGR1bW15X2Jzc2lkLCBFVEhfQUxFTik7Ci0KLQkvKiBwYXNzIHRocm91Z2ggZnJhbWVzIGZyb20gYWxsIEJTUyAqLwotCXdsMTI3MV9jb25maWd1cmVfZmlsdGVycyh3bCwgRklGX09USEVSX0JTUyk7Ci0KLQlyZXQgPSB3bDEyNzFfY21kX2pvaW4od2wsIHdsLT5zZXRfYnNzX3R5cGUpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dDsKLQotCXNldF9iaXQoV0wxMjcxX0ZMQUdfSk9JTkVELCAmd2wtPmZsYWdzKTsKLQotb3V0OgotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgd2wxMjcxX2pvaW4oc3RydWN0IHdsMTI3MSAqd2wsIGJvb2wgc2V0X2Fzc29jKQotewotCWludCByZXQ7Ci0KLQkvKgotCSAqIE9uZSBvZiB0aGUgc2lkZSBlZmZlY3RzIG9mIHRoZSBKT0lOIGNvbW1hbmQgaXMgdGhhdCBpcyBjbGVhcnMKLQkgKiBXUEEvV1BBMiBrZXlzIGZyb20gdGhlIGNoaXBzZXQuIFBlcmZvcm1pbmcgYSBKT0lOIHdoaWxlIGFzc29jaWF0ZWQKLQkgKiB0byBhIFdQQS9XUEEyIGFjY2VzcyBwb2ludCB3aWxsIHRoZXJlZm9yZSBraWxsIHRoZSBkYXRhLXBhdGguCi0JICogQ3VycmVudGx5IHRoZXJlIGlzIG5vIHN1cHBvcnRlZCBzY2VuYXJpbyBmb3IgSk9JTiBkdXJpbmcKLQkgKiBhc3NvY2lhdGlvbiAtIGlmIGl0IGJlY29tZXMgYSBzdXBwb3J0ZWQgc2NlbmFyaW8sIHRoZSBXUEEvV1BBMiBrZXlzCi0JICogbXVzdCBiZSBoYW5kbGVkIHNvbWVob3cuCi0JICoKLQkgKi8KLQlpZiAodGVzdF9iaXQoV0wxMjcxX0ZMQUdfU1RBX0FTU09DSUFURUQsICZ3bC0+ZmxhZ3MpKQotCQl3bDEyNzFfaW5mbygiSk9JTiB3aGlsZSBhc3NvY2lhdGVkLiIpOwotCi0JaWYgKHNldF9hc3NvYykKLQkJc2V0X2JpdChXTDEyNzFfRkxBR19TVEFfQVNTT0NJQVRFRCwgJndsLT5mbGFncyk7Ci0KLQlyZXQgPSB3bDEyNzFfY21kX2pvaW4od2wsIHdsLT5zZXRfYnNzX3R5cGUpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dDsKLQotCXNldF9iaXQoV0wxMjcxX0ZMQUdfSk9JTkVELCAmd2wtPmZsYWdzKTsKLQotCWlmICghdGVzdF9iaXQoV0wxMjcxX0ZMQUdfU1RBX0FTU09DSUFURUQsICZ3bC0+ZmxhZ3MpKQotCQlnb3RvIG91dDsKLQotCS8qCi0JICogVGhlIGpvaW4gY29tbWFuZCBkaXNhYmxlIHRoZSBrZWVwLWFsaXZlIG1vZGUsIHNodXQgZG93biBpdHMgcHJvY2VzcywKLQkgKiBhbmQgYWxzbyBjbGVhciB0aGUgdGVtcGxhdGUgY29uZmlnLCBzbyB3ZSBuZWVkIHRvIHJlc2V0IGl0IGFsbCBhZnRlcgotCSAqIHRoZSBqb2luLiBUaGUgYWN4X2FpZCBzdGFydHMgdGhlIGtlZXAtYWxpdmUgcHJvY2VzcywgYW5kIHRoZSBvcmRlcgotCSAqIG9mIHRoZSBjb21tYW5kcyBiZWxvdyBpcyByZWxldmFudC4KLQkgKi8KLQlyZXQgPSB3bDEyNzFfYWN4X2tlZXBfYWxpdmVfbW9kZSh3bCwgdHJ1ZSk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gb3V0OwotCi0JcmV0ID0gd2wxMjcxX2FjeF9haWQod2wsIHdsLT5haWQpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dDsKLQotCXJldCA9IHdsMTI3MV9jbWRfYnVpbGRfa2x2X251bGxfZGF0YSh3bCk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gb3V0OwotCi0JcmV0ID0gd2wxMjcxX2FjeF9rZWVwX2FsaXZlX2NvbmZpZyh3bCwgQ01EX1RFTVBMX0tMVl9JRFhfTlVMTF9EQVRBLAotCQkJCQkgICBBQ1hfS0VFUF9BTElWRV9UUExfVkFMSUQpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dDsKLQotb3V0OgotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgd2wxMjcxX3Vuam9pbihzdHJ1Y3Qgd2wxMjcxICp3bCkKLXsKLQlpbnQgcmV0OwotCi0JLyogdG8gc3RvcCBsaXN0ZW5pbmcgdG8gYSBjaGFubmVsLCB3ZSBkaXNjb25uZWN0ICovCi0JcmV0ID0gd2wxMjcxX2NtZF9kaXNjb25uZWN0KHdsKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBvdXQ7Ci0KLQljbGVhcl9iaXQoV0wxMjcxX0ZMQUdfSk9JTkVELCAmd2wtPmZsYWdzKTsKLQltZW1zZXQod2wtPmJzc2lkLCAwLCBFVEhfQUxFTik7Ci0KLQkvKiBzdG9wIGZpbHRlcnRpbmcgcGFja2V0cyBiYXNlZCBvbiBic3NpZCAqLwotCXdsMTI3MV9jb25maWd1cmVfZmlsdGVycyh3bCwgRklGX09USEVSX0JTUyk7Ci0KLW91dDoKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCB3bDEyNzFfc2V0X2JhbmRfcmF0ZShzdHJ1Y3Qgd2wxMjcxICp3bCkKLXsKLQlpZiAod2wtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikKLQkJd2wtPmJhc2ljX3JhdGVfc2V0ID0gd2wtPmNvbmYudHguYmFzaWNfcmF0ZTsKLQllbHNlCi0JCXdsLT5iYXNpY19yYXRlX3NldCA9IHdsLT5jb25mLnR4LmJhc2ljX3JhdGVfNTsKLX0KLQotc3RhdGljIHUzMiB3bDEyNzFfbWluX3JhdGVfZ2V0KHN0cnVjdCB3bDEyNzEgKndsKQotewotCWludCBpOwotCXUzMiByYXRlID0gMDsKLQotCWlmICghd2wtPmJhc2ljX3JhdGVfc2V0KSB7Ci0JCVdBUk5fT04oMSk7Ci0JCXdsLT5iYXNpY19yYXRlX3NldCA9IHdsLT5jb25mLnR4LmJhc2ljX3JhdGU7Ci0JfQotCi0JZm9yIChpID0gMDsgIXJhdGU7IGkrKykgewotCQlpZiAoKHdsLT5iYXNpY19yYXRlX3NldCA+PiBpKSAmIDB4MSkKLQkJCXJhdGUgPSAxIDw8IGk7Ci0JfQotCi0JcmV0dXJuIHJhdGU7Ci19Ci0KLXN0YXRpYyBpbnQgd2wxMjcxX2hhbmRsZV9pZGxlKHN0cnVjdCB3bDEyNzEgKndsLCBib29sIGlkbGUpCi17Ci0JaW50IHJldDsKLQotCWlmIChpZGxlKSB7Ci0JCWlmICh0ZXN0X2JpdChXTDEyNzFfRkxBR19KT0lORUQsICZ3bC0+ZmxhZ3MpKSB7Ci0JCQlyZXQgPSB3bDEyNzFfdW5qb2luKHdsKTsKLQkJCWlmIChyZXQgPCAwKQotCQkJCWdvdG8gb3V0OwotCQl9Ci0JCXdsLT5yYXRlX3NldCA9IHdsMTI3MV9taW5fcmF0ZV9nZXQod2wpOwotCQl3bC0+c3RhX3JhdGVfc2V0ID0gMDsKLQkJcmV0ID0gd2wxMjcxX2FjeF9yYXRlX3BvbGljaWVzKHdsKTsKLQkJaWYgKHJldCA8IDApCi0JCQlnb3RvIG91dDsKLQkJcmV0ID0gd2wxMjcxX2FjeF9rZWVwX2FsaXZlX2NvbmZpZygKLQkJCXdsLCBDTURfVEVNUExfS0xWX0lEWF9OVUxMX0RBVEEsCi0JCQlBQ1hfS0VFUF9BTElWRV9UUExfSU5WQUxJRCk7Ci0JCWlmIChyZXQgPCAwKQotCQkJZ290byBvdXQ7Ci0JCXNldF9iaXQoV0wxMjcxX0ZMQUdfSURMRSwgJndsLT5mbGFncyk7Ci0JfSBlbHNlIHsKLQkJLyogaW5jcmVtZW50IHRoZSBzZXNzaW9uIGNvdW50ZXIgKi8KLQkJd2wtPnNlc3Npb25fY291bnRlcisrOwotCQlpZiAod2wtPnNlc3Npb25fY291bnRlciA+PSBTRVNTSU9OX0NPVU5URVJfTUFYKQotCQkJd2wtPnNlc3Npb25fY291bnRlciA9IDA7Ci0JCXJldCA9IHdsMTI3MV9kdW1teV9qb2luKHdsKTsKLQkJaWYgKHJldCA8IDApCi0JCQlnb3RvIG91dDsKLQkJY2xlYXJfYml0KFdMMTI3MV9GTEFHX0lETEUsICZ3bC0+ZmxhZ3MpOwotCX0KLQotb3V0OgotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgd2wxMjcxX29wX2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIGNoYW5nZWQpCi17Ci0Jc3RydWN0IHdsMTI3MSAqd2wgPSBody0+cHJpdjsKLQlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmaHctPmNvbmY7Ci0JaW50IGNoYW5uZWwsIHJldCA9IDA7Ci0KLQljaGFubmVsID0gaWVlZTgwMjExX2ZyZXF1ZW5jeV90b19jaGFubmVsKGNvbmYtPmNoYW5uZWwtPmNlbnRlcl9mcmVxKTsKLQotCXdsMTI3MV9kZWJ1ZyhERUJVR19NQUM4MDIxMSwgIm1hYzgwMjExIGNvbmZpZyBjaCAlZCBwc20gJXMgcG93ZXIgJWQgJXMiLAotCQkgICAgIGNoYW5uZWwsCi0JCSAgICAgY29uZi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUyA/ICJvbiIgOiAib2ZmIiwKLQkJICAgICBjb25mLT5wb3dlcl9sZXZlbCwKLQkJICAgICBjb25mLT5mbGFncyAmIElFRUU4MDIxMV9DT05GX0lETEUgPyAiaWRsZSIgOiAiaW4gdXNlIik7Ci0KLQkvKgotCSAqIG1hYzgwMjExIHdpbGwgZ28gdG8gaWRsZSBuZWFybHkgaW1tZWRpYXRlbHkgYWZ0ZXIgdHJhbnNtaXR0aW5nIHNvbWUKLQkgKiBmcmFtZXMsIHN1Y2ggYXMgdGhlIGRlYXV0aC4gVG8gbWFrZSBzdXJlIHRob3NlIGZyYW1lcyByZWFjaCB0aGUgYWlyLAotCSAqIHdhaXQgaGVyZSB1bnRpbCB0aGUgVFggcXVldWUgaXMgZnVsbHkgZmx1c2hlZC4KLQkgKi8KLQlpZiAoKGNoYW5nZWQgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfSURMRSkgJiYKLQkgICAgKGNvbmYtPmZsYWdzICYgSUVFRTgwMjExX0NPTkZfSURMRSkpCi0JCXdsMTI3MV90eF9mbHVzaCh3bCk7Ci0KLQltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOwotCi0JaWYgKHVubGlrZWx5KHdsLT5zdGF0ZSA9PSBXTDEyNzFfU1RBVEVfT0ZGKSkKLQkJZ290byBvdXQ7Ci0KLQlyZXQgPSB3bDEyNzFfcHNfZWxwX3dha2V1cCh3bCwgZmFsc2UpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dDsKLQotCS8qIGlmIHRoZSBjaGFubmVsIGNoYW5nZXMgd2hpbGUgam9pbmVkLCBqb2luIGFnYWluICovCi0JaWYgKGNoYW5nZWQgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfQ0hBTk5FTCAmJgotCSAgICAoKHdsLT5iYW5kICE9IGNvbmYtPmNoYW5uZWwtPmJhbmQpIHx8Ci0JICAgICAod2wtPmNoYW5uZWwgIT0gY2hhbm5lbCkpKSB7Ci0JCXdsLT5iYW5kID0gY29uZi0+Y2hhbm5lbC0+YmFuZDsKLQkJd2wtPmNoYW5uZWwgPSBjaGFubmVsOwotCi0JCS8qCi0JCSAqIEZJWE1FOiB0aGUgbWFjODAyMTEgc2hvdWxkIHJlYWxseSBwcm92aWRlIGEgZml4ZWQgcmF0ZQotCQkgKiB0byB1c2UgaGVyZS4gZm9yIG5vdywganVzdCB1c2UgdGhlIHNtYWxsZXN0IHBvc3NpYmxlIHJhdGUKLQkJICogZm9yIHRoZSBiYW5kIGFzIGEgZml4ZWQgcmF0ZSBmb3IgYXNzb2NpYXRpb24gZnJhbWVzIGFuZAotCQkgKiBvdGhlciBjb250cm9sIG1lc3NhZ2VzLgotCQkgKi8KLQkJaWYgKCF0ZXN0X2JpdChXTDEyNzFfRkxBR19TVEFfQVNTT0NJQVRFRCwgJndsLT5mbGFncykpCi0JCQl3bDEyNzFfc2V0X2JhbmRfcmF0ZSh3bCk7Ci0KLQkJd2wtPmJhc2ljX3JhdGUgPSB3bDEyNzFfbWluX3JhdGVfZ2V0KHdsKTsKLQkJcmV0ID0gd2wxMjcxX2FjeF9yYXRlX3BvbGljaWVzKHdsKTsKLQkJaWYgKHJldCA8IDApCi0JCQl3bDEyNzFfd2FybmluZygicmF0ZSBwb2xpY3kgZm9yIHVwZGF0ZSBjaGFubmVsICIKLQkJCQkgICAgICAgImZhaWxlZCAlZCIsIHJldCk7Ci0KLQkJaWYgKHRlc3RfYml0KFdMMTI3MV9GTEFHX0pPSU5FRCwgJndsLT5mbGFncykpIHsKLQkJCXJldCA9IHdsMTI3MV9qb2luKHdsLCBmYWxzZSk7Ci0JCQlpZiAocmV0IDwgMCkKLQkJCQl3bDEyNzFfd2FybmluZygiY21kIGpvaW4gdG8gdXBkYXRlIGNoYW5uZWwgIgotCQkJCQkgICAgICAgImZhaWxlZCAlZCIsIHJldCk7Ci0JCX0KLQl9Ci0KLQlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9JRExFKSB7Ci0JCXJldCA9IHdsMTI3MV9oYW5kbGVfaWRsZSh3bCwgY29uZi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9JRExFKTsKLQkJaWYgKHJldCA8IDApCi0JCQl3bDEyNzFfd2FybmluZygiaWRsZSBtb2RlIGNoYW5nZSBmYWlsZWQgJWQiLCByZXQpOwotCX0KLQotCS8qCi0JICogaWYgbWFjODAyMTEgY2hhbmdlcyB0aGUgUFNNIG1vZGUsIG1ha2Ugc3VyZSB0aGUgbW9kZSBpcyBub3QKLQkgKiBpbmNvcnJlY3RseSBjaGFuZ2VkIGFmdGVyIHRoZSBwc3BvbGwgZmFpbHVyZSBhY3RpdmUgd2luZG93LgotCSAqLwotCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BTKQotCQljbGVhcl9iaXQoV0wxMjcxX0ZMQUdfUFNQT0xMX0ZBSUxVUkUsICZ3bC0+ZmxhZ3MpOwotCi0JaWYgKGNvbmYtPmZsYWdzICYgSUVFRTgwMjExX0NPTkZfUFMgJiYKLQkgICAgIXRlc3RfYml0KFdMMTI3MV9GTEFHX1BTTV9SRVFVRVNURUQsICZ3bC0+ZmxhZ3MpKSB7Ci0JCXNldF9iaXQoV0wxMjcxX0ZMQUdfUFNNX1JFUVVFU1RFRCwgJndsLT5mbGFncyk7Ci0KLQkJLyoKLQkJICogV2UgZW50ZXIgUFNNIG9ubHkgaWYgd2UncmUgYWxyZWFkeSBhc3NvY2lhdGVkLgotCQkgKiBJZiB3ZSdyZSBub3QsIHdlJ2xsIGVudGVyIGl0IHdoZW4gam9pbmluZyBhbiBTU0lELAotCQkgKiB0aHJvdWdoIHRoZSBic3NfaW5mb19jaGFuZ2VkKCkgaG9vay4KLQkJICovCi0JCWlmICh0ZXN0X2JpdChXTDEyNzFfRkxBR19TVEFfQVNTT0NJQVRFRCwgJndsLT5mbGFncykpIHsKLQkJCXdsMTI3MV9kZWJ1ZyhERUJVR19QU00sICJwc20gZW5hYmxlZCIpOwotCQkJcmV0ID0gd2wxMjcxX3BzX3NldF9tb2RlKHdsLCBTVEFUSU9OX1BPV0VSX1NBVkVfTU9ERSwKLQkJCQkJCSB3bC0+YmFzaWNfcmF0ZSwgdHJ1ZSk7Ci0JCX0KLQl9IGVsc2UgaWYgKCEoY29uZi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUykgJiYKLQkJICAgdGVzdF9iaXQoV0wxMjcxX0ZMQUdfUFNNX1JFUVVFU1RFRCwgJndsLT5mbGFncykpIHsKLQkJd2wxMjcxX2RlYnVnKERFQlVHX1BTTSwgInBzbSBkaXNhYmxlZCIpOwotCi0JCWNsZWFyX2JpdChXTDEyNzFfRkxBR19QU01fUkVRVUVTVEVELCAmd2wtPmZsYWdzKTsKLQotCQlpZiAodGVzdF9iaXQoV0wxMjcxX0ZMQUdfUFNNLCAmd2wtPmZsYWdzKSkKLQkJCXJldCA9IHdsMTI3MV9wc19zZXRfbW9kZSh3bCwgU1RBVElPTl9BQ1RJVkVfTU9ERSwKLQkJCQkJCSB3bC0+YmFzaWNfcmF0ZSwgdHJ1ZSk7Ci0JfQotCi0JaWYgKGNvbmYtPnBvd2VyX2xldmVsICE9IHdsLT5wb3dlcl9sZXZlbCkgewotCQlyZXQgPSB3bDEyNzFfYWN4X3R4X3Bvd2VyKHdsLCBjb25mLT5wb3dlcl9sZXZlbCk7Ci0JCWlmIChyZXQgPCAwKQotCQkJZ290byBvdXRfc2xlZXA7Ci0KLQkJd2wtPnBvd2VyX2xldmVsID0gY29uZi0+cG93ZXJfbGV2ZWw7Ci0JfQotCi1vdXRfc2xlZXA6Ci0Jd2wxMjcxX3BzX2VscF9zbGVlcCh3bCk7Ci0KLW91dDoKLQltdXRleF91bmxvY2soJndsLT5tdXRleCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdHJ1Y3Qgd2wxMjcxX2ZpbHRlcl9wYXJhbXMgewotCWJvb2wgZW5hYmxlZDsKLQlpbnQgbWNfbGlzdF9sZW5ndGg7Ci0JdTggbWNfbGlzdFtBQ1hfTUNfQUREUkVTU19HUk9VUF9NQVhdW0VUSF9BTEVOXTsKLX07Ci0KLXN0YXRpYyB1NjQgd2wxMjcxX29wX3ByZXBhcmVfbXVsdGljYXN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCSAgICAgICBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbWNfbGlzdCkKLXsKLQlzdHJ1Y3Qgd2wxMjcxX2ZpbHRlcl9wYXJhbXMgKmZwOwotCXN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7Ci0Jc3RydWN0IHdsMTI3MSAqd2wgPSBody0+cHJpdjsKLQotCWlmICh1bmxpa2VseSh3bC0+c3RhdGUgPT0gV0wxMjcxX1NUQVRFX09GRikpCi0JCXJldHVybiAwOwotCi0JZnAgPSBremFsbG9jKHNpemVvZigqZnApLCBHRlBfQVRPTUlDKTsKLQlpZiAoIWZwKSB7Ci0JCXdsMTI3MV9lcnJvcigiT3V0IG9mIG1lbW9yeSBzZXR0aW5nIGZpbHRlcnMuIik7Ci0JCXJldHVybiAwOwotCX0KLQotCS8qIHVwZGF0ZSBtdWx0aWNhc3QgZmlsdGVyaW5nIHBhcmFtZXRlcnMgKi8KLQlmcC0+bWNfbGlzdF9sZW5ndGggPSAwOwotCWlmIChuZXRkZXZfaHdfYWRkcl9saXN0X2NvdW50KG1jX2xpc3QpID4gQUNYX01DX0FERFJFU1NfR1JPVVBfTUFYKSB7Ci0JCWZwLT5lbmFibGVkID0gZmFsc2U7Ci0JfSBlbHNlIHsKLQkJZnAtPmVuYWJsZWQgPSB0cnVlOwotCQluZXRkZXZfaHdfYWRkcl9saXN0X2Zvcl9lYWNoKGhhLCBtY19saXN0KSB7Ci0JCQltZW1jcHkoZnAtPm1jX2xpc3RbZnAtPm1jX2xpc3RfbGVuZ3RoXSwKLQkJCQkJaGEtPmFkZHIsIEVUSF9BTEVOKTsKLQkJCWZwLT5tY19saXN0X2xlbmd0aCsrOwotCQl9Ci0JfQotCi0JcmV0dXJuICh1NjQpKHVuc2lnbmVkIGxvbmcpZnA7Ci19Ci0KLSNkZWZpbmUgV0wxMjcxX1NVUFBPUlRFRF9GSUxURVJTIChGSUZfUFJPTUlTQ19JTl9CU1MgfCBcCi0JCQkJICBGSUZfQUxMTVVMVEkgfCBcCi0JCQkJICBGSUZfRkNTRkFJTCB8IFwKLQkJCQkgIEZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDIHwgXAotCQkJCSAgRklGX0NPTlRST0wgfCBcCi0JCQkJICBGSUZfT1RIRVJfQlNTKQotCi1zdGF0aWMgdm9pZCB3bDEyNzFfb3BfY29uZmlndXJlX2ZpbHRlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkgICAgICAgdW5zaWduZWQgaW50IGNoYW5nZWQsCi0JCQkJICAgICAgIHVuc2lnbmVkIGludCAqdG90YWwsIHU2NCBtdWx0aWNhc3QpCi17Ci0Jc3RydWN0IHdsMTI3MV9maWx0ZXJfcGFyYW1zICpmcCA9ICh2b2lkICopKHVuc2lnbmVkIGxvbmcpbXVsdGljYXN0OwotCXN0cnVjdCB3bDEyNzEgKndsID0gaHctPnByaXY7Ci0JaW50IHJldDsKLQotCXdsMTI3MV9kZWJ1ZyhERUJVR19NQUM4MDIxMSwgIm1hYzgwMjExIGNvbmZpZ3VyZSBmaWx0ZXIiKTsKLQotCW11dGV4X2xvY2soJndsLT5tdXRleCk7Ci0KLQkqdG90YWwgJj0gV0wxMjcxX1NVUFBPUlRFRF9GSUxURVJTOwotCWNoYW5nZWQgJj0gV0wxMjcxX1NVUFBPUlRFRF9GSUxURVJTOwotCi0JaWYgKHVubGlrZWx5KHdsLT5zdGF0ZSA9PSBXTDEyNzFfU1RBVEVfT0ZGKSkKLQkJZ290byBvdXQ7Ci0KLQlyZXQgPSB3bDEyNzFfcHNfZWxwX3dha2V1cCh3bCwgZmFsc2UpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dDsKLQotCi0JaWYgKCp0b3RhbCAmIEZJRl9BTExNVUxUSSkKLQkJcmV0ID0gd2wxMjcxX2FjeF9ncm91cF9hZGRyZXNzX3RibCh3bCwgZmFsc2UsIE5VTEwsIDApOwotCWVsc2UgaWYgKGZwKQotCQlyZXQgPSB3bDEyNzFfYWN4X2dyb3VwX2FkZHJlc3NfdGJsKHdsLCBmcC0+ZW5hYmxlZCwKLQkJCQkJCSAgIGZwLT5tY19saXN0LAotCQkJCQkJICAgZnAtPm1jX2xpc3RfbGVuZ3RoKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBvdXRfc2xlZXA7Ci0KLQkvKiBkZXRlcm1pbmUsIHdoZXRoZXIgc3VwcG9ydGVkIGZpbHRlciB2YWx1ZXMgaGF2ZSBjaGFuZ2VkICovCi0JaWYgKGNoYW5nZWQgPT0gMCkKLQkJZ290byBvdXRfc2xlZXA7Ci0KLQkvKiBjb25maWd1cmUgZmlsdGVycyAqLwotCXdsLT5maWx0ZXJzID0gKnRvdGFsOwotCXdsMTI3MV9jb25maWd1cmVfZmlsdGVycyh3bCwgMCk7Ci0KLQkvKiBhcHBseSBjb25maWd1cmVkIGZpbHRlcnMgKi8KLQlyZXQgPSB3bDEyNzFfYWN4X3J4X2NvbmZpZyh3bCwgd2wtPnJ4X2NvbmZpZywgd2wtPnJ4X2ZpbHRlcik7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gb3V0X3NsZWVwOwotCi1vdXRfc2xlZXA6Ci0Jd2wxMjcxX3BzX2VscF9zbGVlcCh3bCk7Ci0KLW91dDoKLQltdXRleF91bmxvY2soJndsLT5tdXRleCk7Ci0Ja2ZyZWUoZnApOwotfQotCi1zdGF0aWMgaW50IHdsMTI3MV9vcF9zZXRfa2V5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBlbnVtIHNldF9rZXlfY21kIGNtZCwKLQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKLQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKLQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5X2NvbmYpCi17Ci0Jc3RydWN0IHdsMTI3MSAqd2wgPSBody0+cHJpdjsKLQljb25zdCB1OCAqYWRkcjsKLQlpbnQgcmV0OwotCXUzMiB0eF9zZXFfMzIgPSAwOwotCXUxNiB0eF9zZXFfMTYgPSAwOwotCXU4IGtleV90eXBlOwotCi0Jc3RhdGljIGNvbnN0IHU4IGJjYXN0X2FkZHJbRVRIX0FMRU5dID0KLQkJeyAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmIH07Ci0KLQl3bDEyNzFfZGVidWcoREVCVUdfTUFDODAyMTEsICJtYWM4MDIxMSBzZXQga2V5Iik7Ci0KLQlhZGRyID0gc3RhID8gc3RhLT5hZGRyIDogYmNhc3RfYWRkcjsKLQotCXdsMTI3MV9kZWJ1ZyhERUJVR19DUllQVCwgIkNNRDogMHgleCIsIGNtZCk7Ci0Jd2wxMjcxX2R1bXAoREVCVUdfQ1JZUFQsICJBRERSOiAiLCBhZGRyLCBFVEhfQUxFTik7Ci0Jd2wxMjcxX2RlYnVnKERFQlVHX0NSWVBULCAiS2V5OiBhbGdvOjB4JXgsIGlkOiVkLCBsZW46JWQgZmxhZ3MgMHgleCIsCi0JCSAgICAga2V5X2NvbmYtPmNpcGhlciwga2V5X2NvbmYtPmtleWlkeCwKLQkJICAgICBrZXlfY29uZi0+a2V5bGVuLCBrZXlfY29uZi0+ZmxhZ3MpOwotCXdsMTI3MV9kdW1wKERFQlVHX0NSWVBULCAiS0VZOiAiLCBrZXlfY29uZi0+a2V5LCBrZXlfY29uZi0+a2V5bGVuKTsKLQotCWlmIChpc196ZXJvX2V0aGVyX2FkZHIoYWRkcikpIHsKLQkJLyogV2UgZG9udCBzdXBwb3J0IFRYIG9ubHkgZW5jcnlwdGlvbiAqLwotCQlyZXQgPSAtRU9QTk9UU1VQUDsKLQkJZ290byBvdXQ7Ci0JfQotCi0JbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKLQotCXJldCA9IHdsMTI3MV9wc19lbHBfd2FrZXVwKHdsLCBmYWxzZSk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gb3V0X3VubG9jazsKLQotCXN3aXRjaCAoa2V5X2NvbmYtPmNpcGhlcikgewotCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfV0VQNDA6Ci0JY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9XRVAxMDQ6Ci0JCWtleV90eXBlID0gS0VZX1dFUDsKLQotCQlrZXlfY29uZi0+aHdfa2V5X2lkeCA9IGtleV9jb25mLT5rZXlpZHg7Ci0JCWJyZWFrOwotCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfVEtJUDoKLQkJa2V5X3R5cGUgPSBLRVlfVEtJUDsKLQotCQlrZXlfY29uZi0+aHdfa2V5X2lkeCA9IGtleV9jb25mLT5rZXlpZHg7Ci0JCXR4X3NlcV8zMiA9IFdMMTI3MV9UWF9TRUNVUklUWV9ISTMyKHdsLT50eF9zZWN1cml0eV9zZXEpOwotCQl0eF9zZXFfMTYgPSBXTDEyNzFfVFhfU0VDVVJJVFlfTE8xNih3bC0+dHhfc2VjdXJpdHlfc2VxKTsKLQkJYnJlYWs7Ci0JY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9DQ01QOgotCQlrZXlfdHlwZSA9IEtFWV9BRVM7Ci0KLQkJa2V5X2NvbmYtPmZsYWdzIHw9IElFRUU4MDIxMV9LRVlfRkxBR19HRU5FUkFURV9JVjsKLQkJdHhfc2VxXzMyID0gV0wxMjcxX1RYX1NFQ1VSSVRZX0hJMzIod2wtPnR4X3NlY3VyaXR5X3NlcSk7Ci0JCXR4X3NlcV8xNiA9IFdMMTI3MV9UWF9TRUNVUklUWV9MTzE2KHdsLT50eF9zZWN1cml0eV9zZXEpOwotCQlicmVhazsKLQljYXNlIFdMMTI3MV9DSVBIRVJfU1VJVEVfR0VNOgotCQlrZXlfdHlwZSA9IEtFWV9HRU07Ci0JCXR4X3NlcV8zMiA9IFdMMTI3MV9UWF9TRUNVUklUWV9ISTMyKHdsLT50eF9zZWN1cml0eV9zZXEpOwotCQl0eF9zZXFfMTYgPSBXTDEyNzFfVFhfU0VDVVJJVFlfTE8xNih3bC0+dHhfc2VjdXJpdHlfc2VxKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJd2wxMjcxX2Vycm9yKCJVbmtub3duIGtleSBhbGdvIDB4JXgiLCBrZXlfY29uZi0+Y2lwaGVyKTsKLQotCQlyZXQgPSAtRU9QTk9UU1VQUDsKLQkJZ290byBvdXRfc2xlZXA7Ci0JfQotCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFNFVF9LRVk6Ci0JCXJldCA9IHdsMTI3MV9jbWRfc2V0X2tleSh3bCwgS0VZX0FERF9PUl9SRVBMQUNFLAotCQkJCQkga2V5X2NvbmYtPmtleWlkeCwga2V5X3R5cGUsCi0JCQkJCSBrZXlfY29uZi0+a2V5bGVuLCBrZXlfY29uZi0+a2V5LAotCQkJCQkgYWRkciwgdHhfc2VxXzMyLCB0eF9zZXFfMTYpOwotCQlpZiAocmV0IDwgMCkgewotCQkJd2wxMjcxX2Vycm9yKCJDb3VsZCBub3QgYWRkIG9yIHJlcGxhY2Uga2V5Iik7Ci0JCQlnb3RvIG91dF9zbGVlcDsKLQkJfQotCi0JCS8qIHRoZSBkZWZhdWx0IFdFUCBrZXkgbmVlZHMgdG8gYmUgY29uZmlndXJlZCBhdCBsZWFzdCBvbmNlICovCi0JCWlmIChrZXlfdHlwZSA9PSBLRVlfV0VQKSB7Ci0JCQlyZXQgPSB3bDEyNzFfY21kX3NldF9kZWZhdWx0X3dlcF9rZXkod2wsCi0JCQkJCQkJICAgICB3bC0+ZGVmYXVsdF9rZXkpOwotCQkJaWYgKHJldCA8IDApCi0JCQkJZ290byBvdXRfc2xlZXA7Ci0JCX0KLQkJYnJlYWs7Ci0KLQljYXNlIERJU0FCTEVfS0VZOgotCQkvKiBUaGUgd2wxMjcxIGRvZXMgbm90IGFsbG93IHRvIHJlbW92ZSB1bmljYXN0IGtleXMgLSB0aGV5Ci0JCSAgIHdpbGwgYmUgY2xlYXJlZCBhdXRvbWF0aWNhbGx5IG9uIG5leHQgQ01EX0pPSU4uIElnbm9yZSB0aGUKLQkJICAgcmVxdWVzdCBzaWxlbnRseSwgYXMgd2UgZG9udCB3YW50IHRoZSBtYWM4MDIxMSB0byBlbWl0Ci0JCSAgIGFuIGVycm9yIG1lc3NhZ2UuICovCi0JCWlmICghaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIoYWRkcikpCi0JCQlicmVhazsKLQotCQlyZXQgPSB3bDEyNzFfY21kX3NldF9rZXkod2wsIEtFWV9SRU1PVkUsCi0JCQkJCSBrZXlfY29uZi0+a2V5aWR4LCBrZXlfdHlwZSwKLQkJCQkJIGtleV9jb25mLT5rZXlsZW4sIGtleV9jb25mLT5rZXksCi0JCQkJCSBhZGRyLCAwLCAwKTsKLQkJaWYgKHJldCA8IDApIHsKLQkJCXdsMTI3MV9lcnJvcigiQ291bGQgbm90IHJlbW92ZSBrZXkiKTsKLQkJCWdvdG8gb3V0X3NsZWVwOwotCQl9Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJd2wxMjcxX2Vycm9yKCJVbnN1cHBvcnRlZCBrZXkgY21kIDB4JXgiLCBjbWQpOwotCQlyZXQgPSAtRU9QTk9UU1VQUDsKLQkJYnJlYWs7Ci0JfQotCi1vdXRfc2xlZXA6Ci0Jd2wxMjcxX3BzX2VscF9zbGVlcCh3bCk7Ci0KLW91dF91bmxvY2s6Ci0JbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOwotCi1vdXQ6Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCB3bDEyNzFfb3BfaHdfc2NhbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKLQkJCSAgICAgc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCAqcmVxKQotewotCXN0cnVjdCB3bDEyNzEgKndsID0gaHctPnByaXY7Ci0JaW50IHJldDsKLQl1OCAqc3NpZCA9IE5VTEw7Ci0Jc2l6ZV90IGxlbiA9IDA7Ci0KLQl3bDEyNzFfZGVidWcoREVCVUdfTUFDODAyMTEsICJtYWM4MDIxMSBodyBzY2FuIik7Ci0KLQlpZiAocmVxLT5uX3NzaWRzKSB7Ci0JCXNzaWQgPSByZXEtPnNzaWRzWzBdLnNzaWQ7Ci0JCWxlbiA9IHJlcS0+c3NpZHNbMF0uc3NpZF9sZW47Ci0JfQotCi0JbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKLQotCXJldCA9IHdsMTI3MV9wc19lbHBfd2FrZXVwKHdsLCBmYWxzZSk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gb3V0OwotCi0JcmV0ID0gd2wxMjcxX3NjYW4oaHctPnByaXYsIHNzaWQsIGxlbiwgcmVxKTsKLQotCXdsMTI3MV9wc19lbHBfc2xlZXAod2wpOwotCi1vdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCB3bDEyNzFfb3Bfc2V0X3J0c190aHJlc2hvbGQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiB2YWx1ZSkKLXsKLQlzdHJ1Y3Qgd2wxMjcxICp3bCA9IGh3LT5wcml2OwotCWludCByZXQgPSAwOwotCi0JbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKLQotCWlmICh1bmxpa2VseSh3bC0+c3RhdGUgPT0gV0wxMjcxX1NUQVRFX09GRikpCi0JCWdvdG8gb3V0OwotCi0JcmV0ID0gd2wxMjcxX3BzX2VscF93YWtldXAod2wsIGZhbHNlKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBvdXQ7Ci0KLQlyZXQgPSB3bDEyNzFfYWN4X3J0c190aHJlc2hvbGQod2wsICh1MTYpIHZhbHVlKTsKLQlpZiAocmV0IDwgMCkKLQkJd2wxMjcxX3dhcm5pbmcoIndsMTI3MV9vcF9zZXRfcnRzX3RocmVzaG9sZCBmYWlsZWQ6ICVkIiwgcmV0KTsKLQotCXdsMTI3MV9wc19lbHBfc2xlZXAod2wpOwotCi1vdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgd2wxMjcxX3NzaWRfc2V0KHN0cnVjdCB3bDEyNzEgKndsLCBzdHJ1Y3Qgc2tfYnVmZiAqYmVhY29uKQotewotCXU4ICpwdHIgPSBiZWFjb24tPmRhdGEgKwotCQlvZmZzZXRvZihzdHJ1Y3QgaWVlZTgwMjExX21nbXQsIHUuYmVhY29uLnZhcmlhYmxlKTsKLQotCS8qIGZpbmQgdGhlIGxvY2F0aW9uIG9mIHRoZSBzc2lkIGluIHRoZSBiZWFjb24gKi8KLQl3aGlsZSAocHRyIDwgYmVhY29uLT5kYXRhICsgYmVhY29uLT5sZW4pIHsKLQkJaWYgKHB0clswXSA9PSBXTEFOX0VJRF9TU0lEKSB7Ci0JCQl3bC0+c3NpZF9sZW4gPSBwdHJbMV07Ci0JCQltZW1jcHkod2wtPnNzaWQsIHB0cisyLCB3bC0+c3NpZF9sZW4pOwotCQkJcmV0dXJuOwotCQl9Ci0JCXB0ciArPSBwdHJbMV07Ci0JfQotCXdsMTI3MV9lcnJvcigiYWQtaG9jIGJlYWNvbiB0ZW1wbGF0ZSBoYXMgbm8gU1NJRCFcbiIpOwotfQotCi1zdGF0aWMgdm9pZCB3bDEyNzFfb3BfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKLQkJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqYnNzX2NvbmYsCi0JCQkJICAgICAgIHUzMiBjaGFuZ2VkKQotewotCWVudW0gd2wxMjcxX2NtZF9wc19tb2RlIG1vZGU7Ci0Jc3RydWN0IHdsMTI3MSAqd2wgPSBody0+cHJpdjsKLQlib29sIGRvX2pvaW4gPSBmYWxzZTsKLQlib29sIHNldF9hc3NvYyA9IGZhbHNlOwotCWludCByZXQ7Ci0KLQl3bDEyNzFfZGVidWcoREVCVUdfTUFDODAyMTEsICJtYWM4MDIxMSBic3MgaW5mbyBjaGFuZ2VkIik7Ci0KLQltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOwotCi0JcmV0ID0gd2wxMjcxX3BzX2VscF93YWtldXAod2wsIGZhbHNlKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBvdXQ7Ci0KLQlpZiAoKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9CRUFDT05fSU5UKSAmJgotCSAgICAod2wtPmJzc190eXBlID09IEJTU19UWVBFX0lCU1MpKSB7Ci0JCXdsMTI3MV9kZWJ1ZyhERUJVR19BREhPQywgImFkLWhvYyBiZWFjb24gaW50ZXJ2YWwgdXBkYXRlZDogJWQiLAotCQkJYnNzX2NvbmYtPmJlYWNvbl9pbnQpOwotCi0JCXdsLT5iZWFjb25faW50ID0gYnNzX2NvbmYtPmJlYWNvbl9pbnQ7Ci0JCWRvX2pvaW4gPSB0cnVlOwotCX0KLQotCWlmICgoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0JFQUNPTikgJiYKLQkgICAgKHdsLT5ic3NfdHlwZSA9PSBCU1NfVFlQRV9JQlNTKSkgewotCQlzdHJ1Y3Qgc2tfYnVmZiAqYmVhY29uID0gaWVlZTgwMjExX2JlYWNvbl9nZXQoaHcsIHZpZik7Ci0KLQkJd2wxMjcxX2RlYnVnKERFQlVHX0FESE9DLCAiYWQtaG9jIGJlYWNvbiB1cGRhdGVkIik7Ci0KLQkJaWYgKGJlYWNvbikgewotCQkJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKLQotCQkJd2wxMjcxX3NzaWRfc2V0KHdsLCBiZWFjb24pOwotCQkJcmV0ID0gd2wxMjcxX2NtZF90ZW1wbGF0ZV9zZXQod2wsIENNRF9URU1QTF9CRUFDT04sCi0JCQkJCQkgICAgICBiZWFjb24tPmRhdGEsCi0JCQkJCQkgICAgICBiZWFjb24tPmxlbiwgMCwKLQkJCQkJCSAgICAgIHdsMTI3MV9taW5fcmF0ZV9nZXQod2wpKTsKLQotCQkJaWYgKHJldCA8IDApIHsKLQkJCQlkZXZfa2ZyZWVfc2tiKGJlYWNvbik7Ci0JCQkJZ290byBvdXRfc2xlZXA7Ci0JCQl9Ci0KLQkJCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBiZWFjb24tPmRhdGE7Ci0JCQloZHItPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNigKLQkJCQlJRUVFODAyMTFfRlRZUEVfTUdNVCB8Ci0JCQkJSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFU1ApOwotCi0JCQlyZXQgPSB3bDEyNzFfY21kX3RlbXBsYXRlX3NldCh3bCwKLQkJCQkJCSAgICAgIENNRF9URU1QTF9QUk9CRV9SRVNQT05TRSwKLQkJCQkJCSAgICAgIGJlYWNvbi0+ZGF0YSwKLQkJCQkJCSAgICAgIGJlYWNvbi0+bGVuLCAwLAotCQkJCQkJICAgICAgd2wxMjcxX21pbl9yYXRlX2dldCh3bCkpOwotCQkJZGV2X2tmcmVlX3NrYihiZWFjb24pOwotCQkJaWYgKHJldCA8IDApCi0JCQkJZ290byBvdXRfc2xlZXA7Ci0KLQkJCS8qIE5lZWQgdG8gdXBkYXRlIHRoZSBTU0lEIChmb3IgZmlsdGVyaW5nIGV0YykgKi8KLQkJCWRvX2pvaW4gPSB0cnVlOwotCQl9Ci0JfQotCi0JaWYgKChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQkVBQ09OX0VOQUJMRUQpICYmCi0JICAgICh3bC0+YnNzX3R5cGUgPT0gQlNTX1RZUEVfSUJTUykpIHsKLQkJd2wxMjcxX2RlYnVnKERFQlVHX0FESE9DLCAiYWQtaG9jIGJlYWNvbmluZzogJXMiLAotCQkJICAgICBic3NfY29uZi0+ZW5hYmxlX2JlYWNvbiA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpOwotCi0JCWlmIChic3NfY29uZi0+ZW5hYmxlX2JlYWNvbikKLQkJCXdsLT5zZXRfYnNzX3R5cGUgPSBCU1NfVFlQRV9JQlNTOwotCQllbHNlCi0JCQl3bC0+c2V0X2Jzc190eXBlID0gQlNTX1RZUEVfU1RBX0JTUzsKLQkJZG9fam9pbiA9IHRydWU7Ci0JfQotCi0JaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9DUU0pIHsKLQkJYm9vbCBlbmFibGUgPSBmYWxzZTsKLQkJaWYgKGJzc19jb25mLT5jcW1fcnNzaV90aG9sZCkKLQkJCWVuYWJsZSA9IHRydWU7Ci0JCXJldCA9IHdsMTI3MV9hY3hfcnNzaV9zbnJfdHJpZ2dlcih3bCwgZW5hYmxlLAotCQkJCQkJICBic3NfY29uZi0+Y3FtX3Jzc2lfdGhvbGQsCi0JCQkJCQkgIGJzc19jb25mLT5jcW1fcnNzaV9oeXN0KTsKLQkJaWYgKHJldCA8IDApCi0JCQlnb3RvIG91dDsKLQkJd2wtPnJzc2lfdGhvbGQgPSBic3NfY29uZi0+Y3FtX3Jzc2lfdGhvbGQ7Ci0JfQotCi0JaWYgKChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQlNTSUQpICYmCi0JICAgIC8qCi0JICAgICAqIE5vdyB3ZSBrbm93IHRoZSBjb3JyZWN0IGJzc2lkLCBzbyB3ZSBzZW5kIGEgbmV3IGpvaW4gY29tbWFuZAotCSAgICAgKiBhbmQgZW5hYmxlIHRoZSBCU1NJRCBmaWx0ZXIKLQkgICAgICovCi0JICAgIG1lbWNtcCh3bC0+YnNzaWQsIGJzc19jb25mLT5ic3NpZCwgRVRIX0FMRU4pKSB7Ci0JCQltZW1jcHkod2wtPmJzc2lkLCBic3NfY29uZi0+YnNzaWQsIEVUSF9BTEVOKTsKLQotCQkJcmV0ID0gd2wxMjcxX2NtZF9idWlsZF9udWxsX2RhdGEod2wpOwotCQkJaWYgKHJldCA8IDApCi0JCQkJZ290byBvdXRfc2xlZXA7Ci0KLQkJCXJldCA9IHdsMTI3MV9idWlsZF9xb3NfbnVsbF9kYXRhKHdsKTsKLQkJCWlmIChyZXQgPCAwKQotCQkJCWdvdG8gb3V0X3NsZWVwOwotCi0JCQkvKiBmaWx0ZXIgb3V0IGFsbCBwYWNrZXRzIG5vdCBmcm9tIHRoaXMgQlNTSUQgKi8KLQkJCXdsMTI3MV9jb25maWd1cmVfZmlsdGVycyh3bCwgMCk7Ci0KLQkJCS8qIE5lZWQgdG8gdXBkYXRlIHRoZSBCU1NJRCAoZm9yIGZpbHRlcmluZyBldGMpICovCi0JCQlkb19qb2luID0gdHJ1ZTsKLQl9Ci0KLQlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0FTU09DKSB7Ci0JCWlmIChic3NfY29uZi0+YXNzb2MpIHsKLQkJCXUzMiByYXRlczsKLQkJCXdsLT5haWQgPSBic3NfY29uZi0+YWlkOwotCQkJc2V0X2Fzc29jID0gdHJ1ZTsKLQotCQkJd2wtPnBzX3BvbGxfZmFpbHVyZXMgPSAwOwotCi0JCQkvKgotCQkJICogdXNlIGJhc2ljIHJhdGVzIGZyb20gQVAsIGFuZCBkZXRlcm1pbmUgbG93ZXN0IHJhdGUKLQkJCSAqIHRvIHVzZSB3aXRoIGNvbnRyb2wgZnJhbWVzLgotCQkJICovCi0JCQlyYXRlcyA9IGJzc19jb25mLT5iYXNpY19yYXRlczsKLQkJCXdsLT5iYXNpY19yYXRlX3NldCA9IHdsMTI3MV90eF9lbmFibGVkX3JhdGVzX2dldCh3bCwKLQkJCQkJCQkJCSByYXRlcyk7Ci0JCQl3bC0+YmFzaWNfcmF0ZSA9IHdsMTI3MV9taW5fcmF0ZV9nZXQod2wpOwotCQkJcmV0ID0gd2wxMjcxX2FjeF9yYXRlX3BvbGljaWVzKHdsKTsKLQkJCWlmIChyZXQgPCAwKQotCQkJCWdvdG8gb3V0X3NsZWVwOwotCi0JCQkvKgotCQkJICogd2l0aCB3bDEyNzEsIHdlIGRvbid0IG5lZWQgdG8gdXBkYXRlIHRoZQotCQkJICogYmVhY29uX2ludCBhbmQgZHRpbV9wZXJpb2QsIGJlY2F1c2UgdGhlIGZpcm13YXJlCi0JCQkgKiB1cGRhdGVzIGl0IGJ5IGl0c2VsZiB3aGVuIHRoZSBmaXJzdCBiZWFjb24gaXMKLQkJCSAqIHJlY2VpdmVkIGFmdGVyIGEgam9pbi4KLQkJCSAqLwotCQkJcmV0ID0gd2wxMjcxX2NtZF9idWlsZF9wc19wb2xsKHdsLCB3bC0+YWlkKTsKLQkJCWlmIChyZXQgPCAwKQotCQkJCWdvdG8gb3V0X3NsZWVwOwotCi0JCQkvKgotCQkJICogVGhlIFNTSUQgaXMgaW50ZW50aW9uYWxseSBzZXQgdG8gTlVMTCBoZXJlIC0gdGhlCi0JCQkgKiBmaXJtd2FyZSB3aWxsIHNldCB0aGUgcHJvYmUgcmVxdWVzdCB3aXRoIGEKLQkJCSAqIGJyb2FkY2FzdCBTU0lEIHJlZ2FyZGxlc3Mgb2Ygd2hhdCB3ZSBzZXQgaW4gdGhlCi0JCQkgKiB0ZW1wbGF0ZS4KLQkJCSAqLwotCQkJcmV0ID0gd2wxMjcxX2NtZF9idWlsZF9wcm9iZV9yZXEod2wsIE5VTEwsIDAsCi0JCQkJCQkJIE5VTEwsIDAsIHdsLT5iYW5kKTsKLQotCQkJLyogZW5hYmxlIHRoZSBjb25uZWN0aW9uIG1vbml0b3JpbmcgZmVhdHVyZSAqLwotCQkJcmV0ID0gd2wxMjcxX2FjeF9jb25uX21vbml0X3BhcmFtcyh3bCwgdHJ1ZSk7Ci0JCQlpZiAocmV0IDwgMCkKLQkJCQlnb3RvIG91dF9zbGVlcDsKLQotCQkJLyogSWYgd2Ugd2FudCB0byBnbyBpbiBQU00gYnV0IHdlJ3JlIG5vdCB0aGVyZSB5ZXQgKi8KLQkJCWlmICh0ZXN0X2JpdChXTDEyNzFfRkxBR19QU01fUkVRVUVTVEVELCAmd2wtPmZsYWdzKSAmJgotCQkJICAgICF0ZXN0X2JpdChXTDEyNzFfRkxBR19QU00sICZ3bC0+ZmxhZ3MpKSB7Ci0JCQkJbW9kZSA9IFNUQVRJT05fUE9XRVJfU0FWRV9NT0RFOwotCQkJCXJldCA9IHdsMTI3MV9wc19zZXRfbW9kZSh3bCwgbW9kZSwKLQkJCQkJCQkgd2wtPmJhc2ljX3JhdGUsCi0JCQkJCQkJIHRydWUpOwotCQkJCWlmIChyZXQgPCAwKQotCQkJCQlnb3RvIG91dF9zbGVlcDsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCS8qIHVzZSBkZWZhdWx0cyB3aGVuIG5vdCBhc3NvY2lhdGVkICovCi0JCQljbGVhcl9iaXQoV0wxMjcxX0ZMQUdfU1RBX1NUQVRFX1NFTlQsICZ3bC0+ZmxhZ3MpOwotCQkJY2xlYXJfYml0KFdMMTI3MV9GTEFHX1NUQV9BU1NPQ0lBVEVELCAmd2wtPmZsYWdzKTsKLQkJCXdsLT5haWQgPSAwOwotCi0JCQkvKiByZS1lbmFibGUgZHluYW1pYyBwcyAtIGp1c3QgaW4gY2FzZSAqLwotCQkJaWVlZTgwMjExX2VuYWJsZV9keW5fcHMod2wtPnZpZik7Ci0KLQkJCS8qIHJldmVydCBiYWNrIHRvIG1pbmltdW0gcmF0ZXMgZm9yIHRoZSBjdXJyZW50IGJhbmQgKi8KLQkJCXdsMTI3MV9zZXRfYmFuZF9yYXRlKHdsKTsKLQkJCXdsLT5iYXNpY19yYXRlID0gd2wxMjcxX21pbl9yYXRlX2dldCh3bCk7Ci0JCQlyZXQgPSB3bDEyNzFfYWN4X3JhdGVfcG9saWNpZXMod2wpOwotCQkJaWYgKHJldCA8IDApCi0JCQkJZ290byBvdXRfc2xlZXA7Ci0KLQkJCS8qIGRpc2FibGUgY29ubmVjdGlvbiBtb25pdG9yIGZlYXR1cmVzICovCi0JCQlyZXQgPSB3bDEyNzFfYWN4X2Nvbm5fbW9uaXRfcGFyYW1zKHdsLCBmYWxzZSk7Ci0KLQkJCS8qIERpc2FibGUgdGhlIGtlZXAtYWxpdmUgZmVhdHVyZSAqLwotCQkJcmV0ID0gd2wxMjcxX2FjeF9rZWVwX2FsaXZlX21vZGUod2wsIGZhbHNlKTsKLQotCQkJaWYgKHJldCA8IDApCi0JCQkJZ290byBvdXRfc2xlZXA7Ci0JCX0KLQotCX0KLQotCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfRVJQX1NMT1QpIHsKLQkJaWYgKGJzc19jb25mLT51c2Vfc2hvcnRfc2xvdCkKLQkJCXJldCA9IHdsMTI3MV9hY3hfc2xvdCh3bCwgU0xPVF9USU1FX1NIT1JUKTsKLQkJZWxzZQotCQkJcmV0ID0gd2wxMjcxX2FjeF9zbG90KHdsLCBTTE9UX1RJTUVfTE9ORyk7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQl3bDEyNzFfd2FybmluZygiU2V0IHNsb3QgdGltZSBmYWlsZWQgJWQiLCByZXQpOwotCQkJZ290byBvdXRfc2xlZXA7Ci0JCX0KLQl9Ci0KLQlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0VSUF9QUkVBTUJMRSkgewotCQlpZiAoYnNzX2NvbmYtPnVzZV9zaG9ydF9wcmVhbWJsZSkKLQkJCXdsMTI3MV9hY3hfc2V0X3ByZWFtYmxlKHdsLCBBQ1hfUFJFQU1CTEVfU0hPUlQpOwotCQllbHNlCi0JCQl3bDEyNzFfYWN4X3NldF9wcmVhbWJsZSh3bCwgQUNYX1BSRUFNQkxFX0xPTkcpOwotCX0KLQotCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfRVJQX0NUU19QUk9UKSB7Ci0JCWlmIChic3NfY29uZi0+dXNlX2N0c19wcm90KQotCQkJcmV0ID0gd2wxMjcxX2FjeF9jdHNfcHJvdGVjdCh3bCwgQ1RTUFJPVEVDVF9FTkFCTEUpOwotCQllbHNlCi0JCQlyZXQgPSB3bDEyNzFfYWN4X2N0c19wcm90ZWN0KHdsLCBDVFNQUk9URUNUX0RJU0FCTEUpOwotCQlpZiAocmV0IDwgMCkgewotCQkJd2wxMjcxX3dhcm5pbmcoIlNldCBjdHNwcm90ZWN0IGZhaWxlZCAlZCIsIHJldCk7Ci0JCQlnb3RvIG91dF9zbGVlcDsKLQkJfQotCX0KLQotCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQVJQX0ZJTFRFUikgewotCQlfX2JlMzIgYWRkciA9IGJzc19jb25mLT5hcnBfYWRkcl9saXN0WzBdOwotCQlXQVJOX09OKHdsLT5ic3NfdHlwZSAhPSBCU1NfVFlQRV9TVEFfQlNTKTsKLQotCQlpZiAoYnNzX2NvbmYtPmFycF9hZGRyX2NudCA9PSAxICYmIGJzc19jb25mLT5hcnBfZmlsdGVyX2VuYWJsZWQpCi0JCQlyZXQgPSB3bDEyNzFfYWN4X2FycF9pcF9maWx0ZXIod2wsIHRydWUsIGFkZHIpOwotCQllbHNlCi0JCQlyZXQgPSB3bDEyNzFfYWN4X2FycF9pcF9maWx0ZXIod2wsIGZhbHNlLCBhZGRyKTsKLQotCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gb3V0X3NsZWVwOwotCX0KLQotCWlmIChkb19qb2luKSB7Ci0JCXJldCA9IHdsMTI3MV9qb2luKHdsLCBzZXRfYXNzb2MpOwotCQlpZiAocmV0IDwgMCkgewotCQkJd2wxMjcxX3dhcm5pbmcoImNtZCBqb2luIGZhaWxlZCAlZCIsIHJldCk7Ci0JCQlnb3RvIG91dF9zbGVlcDsKLQkJfQotCX0KLQotb3V0X3NsZWVwOgotCXdsMTI3MV9wc19lbHBfc2xlZXAod2wpOwotCi1vdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOwotfQotCi1zdGF0aWMgaW50IHdsMTI3MV9vcF9jb25mX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MTYgcXVldWUsCi0JCQkgICAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfcGFyYW1zICpwYXJhbXMpCi17Ci0Jc3RydWN0IHdsMTI3MSAqd2wgPSBody0+cHJpdjsKLQl1OCBwc19zY2hlbWU7Ci0JaW50IHJldDsKLQotCW11dGV4X2xvY2soJndsLT5tdXRleCk7Ci0KLQl3bDEyNzFfZGVidWcoREVCVUdfTUFDODAyMTEsICJtYWM4MDIxMSBjb25mIHR4ICVkIiwgcXVldWUpOwotCi0JcmV0ID0gd2wxMjcxX3BzX2VscF93YWtldXAod2wsIGZhbHNlKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBvdXQ7Ci0KLQkvKiB0aGUgdHhvcCBpcyBjb25mZWQgaW4gdW5pdHMgb2YgMzJ1cyBieSB0aGUgbWFjODAyMTEsIHdlIG5lZWQgdXMgKi8KLQlyZXQgPSB3bDEyNzFfYWN4X2FjX2NmZyh3bCwgd2wxMjcxX3R4X2dldF9xdWV1ZShxdWV1ZSksCi0JCQkJcGFyYW1zLT5jd19taW4sIHBhcmFtcy0+Y3dfbWF4LAotCQkJCXBhcmFtcy0+YWlmcywgcGFyYW1zLT50eG9wIDw8IDUpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dF9zbGVlcDsKLQotCWlmIChwYXJhbXMtPnVhcHNkKQotCQlwc19zY2hlbWUgPSBDT05GX1BTX1NDSEVNRV9VUFNEX1RSSUdHRVI7Ci0JZWxzZQotCQlwc19zY2hlbWUgPSBDT05GX1BTX1NDSEVNRV9MRUdBQ1k7Ci0KLQlyZXQgPSB3bDEyNzFfYWN4X3RpZF9jZmcod2wsIHdsMTI3MV90eF9nZXRfcXVldWUocXVldWUpLAotCQkJCSBDT05GX0NIQU5ORUxfVFlQRV9FRENGLAotCQkJCSB3bDEyNzFfdHhfZ2V0X3F1ZXVlKHF1ZXVlKSwKLQkJCQkgcHNfc2NoZW1lLCBDT05GX0FDS19QT0xJQ1lfTEVHQUNZLCAwLCAwKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBvdXRfc2xlZXA7Ci0KLW91dF9zbGVlcDoKLQl3bDEyNzFfcHNfZWxwX3NsZWVwKHdsKTsKLQotb3V0OgotCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB1NjQgd2wxMjcxX29wX2dldF90c2Yoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCi17Ci0KLQlzdHJ1Y3Qgd2wxMjcxICp3bCA9IGh3LT5wcml2OwotCXU2NCBtYWN0aW1lID0gVUxMT05HX01BWDsKLQlpbnQgcmV0OwotCi0Jd2wxMjcxX2RlYnVnKERFQlVHX01BQzgwMjExLCAibWFjODAyMTEgZ2V0IHRzZiIpOwotCi0JbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKLQotCXJldCA9IHdsMTI3MV9wc19lbHBfd2FrZXVwKHdsLCBmYWxzZSk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gb3V0OwotCi0JcmV0ID0gd2wxMjcxX2FjeF90c2ZfaW5mbyh3bCwgJm1hY3RpbWUpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dF9zbGVlcDsKLQotb3V0X3NsZWVwOgotCXdsMTI3MV9wc19lbHBfc2xlZXAod2wpOwotCi1vdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOwotCXJldHVybiBtYWN0aW1lOwotfQotCi1zdGF0aWMgaW50IHdsMTI3MV9vcF9nZXRfc3VydmV5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgaWR4LAotCQkJCXN0cnVjdCBzdXJ2ZXlfaW5mbyAqc3VydmV5KQotewotCXN0cnVjdCB3bDEyNzEgKndsID0gaHctPnByaXY7Ci0Jc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmh3LT5jb25mOwotIAotCWlmIChpZHggIT0gMCkKLQkJcmV0dXJuIC1FTk9FTlQ7Ci0gCi0Jc3VydmV5LT5jaGFubmVsID0gY29uZi0+Y2hhbm5lbDsKLQlzdXJ2ZXktPmZpbGxlZCA9IFNVUlZFWV9JTkZPX05PSVNFX0RCTTsKLQlzdXJ2ZXktPm5vaXNlID0gd2wtPm5vaXNlOwotIAotCXJldHVybiAwOwotfQotCi0vKiBjYW4ndCBiZSBjb25zdCwgbWFjODAyMTEgd3JpdGVzIHRvIHRoaXMgKi8KLXN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgd2wxMjcxX3JhdGVzW10gPSB7Ci0JeyAuYml0cmF0ZSA9IDEwLAotCSAgLmh3X3ZhbHVlID0gQ09ORl9IV19CSVRfUkFURV8xTUJQUywKLQkgIC5od192YWx1ZV9zaG9ydCA9IENPTkZfSFdfQklUX1JBVEVfMU1CUFMsIH0sCi0JeyAuYml0cmF0ZSA9IDIwLAotCSAgLmh3X3ZhbHVlID0gQ09ORl9IV19CSVRfUkFURV8yTUJQUywKLQkgIC5od192YWx1ZV9zaG9ydCA9IENPTkZfSFdfQklUX1JBVEVfMk1CUFMsCi0JICAuZmxhZ3MgPSBJRUVFODAyMTFfUkFURV9TSE9SVF9QUkVBTUJMRSB9LAotCXsgLmJpdHJhdGUgPSA1NSwKLQkgIC5od192YWx1ZSA9IENPTkZfSFdfQklUX1JBVEVfNV81TUJQUywKLQkgIC5od192YWx1ZV9zaG9ydCA9IENPTkZfSFdfQklUX1JBVEVfNV81TUJQUywKLQkgIC5mbGFncyA9IElFRUU4MDIxMV9SQVRFX1NIT1JUX1BSRUFNQkxFIH0sCi0JeyAuYml0cmF0ZSA9IDExMCwKLQkgIC5od192YWx1ZSA9IENPTkZfSFdfQklUX1JBVEVfMTFNQlBTLAotCSAgLmh3X3ZhbHVlX3Nob3J0ID0gQ09ORl9IV19CSVRfUkFURV8xMU1CUFMsCi0JICAuZmxhZ3MgPSBJRUVFODAyMTFfUkFURV9TSE9SVF9QUkVBTUJMRSB9LAotCXsgLmJpdHJhdGUgPSA2MCwKLQkgIC5od192YWx1ZSA9IENPTkZfSFdfQklUX1JBVEVfNk1CUFMsCi0JICAuaHdfdmFsdWVfc2hvcnQgPSBDT05GX0hXX0JJVF9SQVRFXzZNQlBTLCB9LAotCXsgLmJpdHJhdGUgPSA5MCwKLQkgIC5od192YWx1ZSA9IENPTkZfSFdfQklUX1JBVEVfOU1CUFMsCi0JICAuaHdfdmFsdWVfc2hvcnQgPSBDT05GX0hXX0JJVF9SQVRFXzlNQlBTLCB9LAotCXsgLmJpdHJhdGUgPSAxMjAsCi0JICAuaHdfdmFsdWUgPSBDT05GX0hXX0JJVF9SQVRFXzEyTUJQUywKLQkgIC5od192YWx1ZV9zaG9ydCA9IENPTkZfSFdfQklUX1JBVEVfMTJNQlBTLCB9LAotCXsgLmJpdHJhdGUgPSAxODAsCi0JICAuaHdfdmFsdWUgPSBDT05GX0hXX0JJVF9SQVRFXzE4TUJQUywKLQkgIC5od192YWx1ZV9zaG9ydCA9IENPTkZfSFdfQklUX1JBVEVfMThNQlBTLCB9LAotCXsgLmJpdHJhdGUgPSAyNDAsCi0JICAuaHdfdmFsdWUgPSBDT05GX0hXX0JJVF9SQVRFXzI0TUJQUywKLQkgIC5od192YWx1ZV9zaG9ydCA9IENPTkZfSFdfQklUX1JBVEVfMjRNQlBTLCB9LAotCXsgLmJpdHJhdGUgPSAzNjAsCi0JIC5od192YWx1ZSA9IENPTkZfSFdfQklUX1JBVEVfMzZNQlBTLAotCSAuaHdfdmFsdWVfc2hvcnQgPSBDT05GX0hXX0JJVF9SQVRFXzM2TUJQUywgfSwKLQl7IC5iaXRyYXRlID0gNDgwLAotCSAgLmh3X3ZhbHVlID0gQ09ORl9IV19CSVRfUkFURV80OE1CUFMsCi0JICAuaHdfdmFsdWVfc2hvcnQgPSBDT05GX0hXX0JJVF9SQVRFXzQ4TUJQUywgfSwKLQl7IC5iaXRyYXRlID0gNTQwLAotCSAgLmh3X3ZhbHVlID0gQ09ORl9IV19CSVRfUkFURV81NE1CUFMsCi0JICAuaHdfdmFsdWVfc2hvcnQgPSBDT05GX0hXX0JJVF9SQVRFXzU0TUJQUywgfSwKLX07Ci0KLS8qCi0gKiBDYW4ndCBiZSBjb25zdCwgbWFjODAyMTEgd3JpdGVzIHRvIHRoaXMuIFRoZSBvcmRlciBvZiB0aGUgY2hhbm5lbHMgaGVyZQotICogaXMgZGVzaWduZWQgdG8gaW1wcm92ZSBzY2FubmluZy4KLSAqLwotc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCB3bDEyNzFfY2hhbm5lbHNbXSA9IHsKLQl7IC5od192YWx1ZSA9IDEsIC5jZW50ZXJfZnJlcSA9IDI0MTIsIC5tYXhfcG93ZXIgPSAyNSB9LAotCXsgLmh3X3ZhbHVlID0gNSwgLmNlbnRlcl9mcmVxID0gMjQzMiwgLm1heF9wb3dlciA9IDI1IH0sCi0JeyAuaHdfdmFsdWUgPSA5LCAuY2VudGVyX2ZyZXEgPSAyNDUyLCAubWF4X3Bvd2VyID0gMjUgfSwKLQl7IC5od192YWx1ZSA9IDEzLCAuY2VudGVyX2ZyZXEgPSAyNDcyLCAubWF4X3Bvd2VyID0gMjUgfSwKLQl7IC5od192YWx1ZSA9IDQsIC5jZW50ZXJfZnJlcSA9IDI0MjcsIC5tYXhfcG93ZXIgPSAyNSB9LAotCXsgLmh3X3ZhbHVlID0gOCwgLmNlbnRlcl9mcmVxID0gMjQ0NywgLm1heF9wb3dlciA9IDI1IH0sCi0JeyAuaHdfdmFsdWUgPSAxMiwgLmNlbnRlcl9mcmVxID0gMjQ2NywgLm1heF9wb3dlciA9IDI1IH0sCi0JeyAuaHdfdmFsdWUgPSAzLCAuY2VudGVyX2ZyZXEgPSAyNDIyLCAubWF4X3Bvd2VyID0gMjUgfSwKLQl7IC5od192YWx1ZSA9IDcsIC5jZW50ZXJfZnJlcSA9IDI0NDIsIC5tYXhfcG93ZXIgPSAyNSB9LAotCXsgLmh3X3ZhbHVlID0gMTEsIC5jZW50ZXJfZnJlcSA9IDI0NjIsIC5tYXhfcG93ZXIgPSAyNSB9LAotCXsgLmh3X3ZhbHVlID0gMiwgLmNlbnRlcl9mcmVxID0gMjQxNywgLm1heF9wb3dlciA9IDI1IH0sCi0JeyAuaHdfdmFsdWUgPSA2LCAuY2VudGVyX2ZyZXEgPSAyNDM3LCAubWF4X3Bvd2VyID0gMjUgfSwKLQl7IC5od192YWx1ZSA9IDEwLCAuY2VudGVyX2ZyZXEgPSAyNDU3LCAubWF4X3Bvd2VyID0gMjUgfSwKLX07Ci0KLS8qIG1hcHBpbmcgdG8gaW5kZXhlcyBmb3Igd2wxMjcxX3JhdGVzICovCi1zdGF0aWMgY29uc3QgdTggd2wxMjcxX3JhdGVfdG9faWR4XzJnaHpbXSA9IHsKLQkvKiBNQ1MgcmF0ZXMgYXJlIHVzZWQgb25seSB3aXRoIDExbiAqLwotCUNPTkZfSFdfUlhUWF9SQVRFX1VOU1VQUE9SVEVELCAvKiBDT05GX0hXX1JYVFhfUkFURV9NQ1M3ICovCi0JQ09ORl9IV19SWFRYX1JBVEVfVU5TVVBQT1JURUQsIC8qIENPTkZfSFdfUlhUWF9SQVRFX01DUzYgKi8KLQlDT05GX0hXX1JYVFhfUkFURV9VTlNVUFBPUlRFRCwgLyogQ09ORl9IV19SWFRYX1JBVEVfTUNTNSAqLwotCUNPTkZfSFdfUlhUWF9SQVRFX1VOU1VQUE9SVEVELCAvKiBDT05GX0hXX1JYVFhfUkFURV9NQ1M0ICovCi0JQ09ORl9IV19SWFRYX1JBVEVfVU5TVVBQT1JURUQsIC8qIENPTkZfSFdfUlhUWF9SQVRFX01DUzMgKi8KLQlDT05GX0hXX1JYVFhfUkFURV9VTlNVUFBPUlRFRCwgLyogQ09ORl9IV19SWFRYX1JBVEVfTUNTMiAqLwotCUNPTkZfSFdfUlhUWF9SQVRFX1VOU1VQUE9SVEVELCAvKiBDT05GX0hXX1JYVFhfUkFURV9NQ1MxICovCi0JQ09ORl9IV19SWFRYX1JBVEVfVU5TVVBQT1JURUQsIC8qIENPTkZfSFdfUlhUWF9SQVRFX01DUzAgKi8KLQotCTExLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDT05GX0hXX1JYVFhfUkFURV81NCAgICovCi0JMTAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENPTkZfSFdfUlhUWF9SQVRFXzQ4ICAgKi8KLQk5LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ09ORl9IV19SWFRYX1JBVEVfMzYgICAqLwotCTgsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDT05GX0hXX1JYVFhfUkFURV8yNCAgICovCi0KLQkvKiBUSS1zcGVjaWZpYyByYXRlICovCi0JQ09ORl9IV19SWFRYX1JBVEVfVU5TVVBQT1JURUQsIC8qIENPTkZfSFdfUlhUWF9SQVRFXzIyICAgKi8KLQotCTcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDT05GX0hXX1JYVFhfUkFURV8xOCAgICovCi0JNiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENPTkZfSFdfUlhUWF9SQVRFXzEyICAgKi8KLQkzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ09ORl9IV19SWFRYX1JBVEVfMTEgICAqLwotCTUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDT05GX0hXX1JYVFhfUkFURV85ICAgICovCi0JNCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENPTkZfSFdfUlhUWF9SQVRFXzYgICAgKi8KLQkyLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ09ORl9IV19SWFRYX1JBVEVfNV81ICAqLwotCTEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDT05GX0hXX1JYVFhfUkFURV8yICAgICovCi0JMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENPTkZfSFdfUlhUWF9SQVRFXzEgICAgKi8KLX07Ci0KLS8qIGNhbid0IGJlIGNvbnN0LCBtYWM4MDIxMSB3cml0ZXMgdG8gdGhpcyAqLwotc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgd2wxMjcxX2JhbmRfMmdoeiA9IHsKLQkuY2hhbm5lbHMgPSB3bDEyNzFfY2hhbm5lbHMsCi0JLm5fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKHdsMTI3MV9jaGFubmVscyksCi0JLmJpdHJhdGVzID0gd2wxMjcxX3JhdGVzLAotCS5uX2JpdHJhdGVzID0gQVJSQVlfU0laRSh3bDEyNzFfcmF0ZXMpLAotfTsKLQotLyogNSBHSHogZGF0YSByYXRlcyBmb3IgV0wxMjczICovCi1zdGF0aWMgc3RydWN0IGllZWU4MDIxMV9yYXRlIHdsMTI3MV9yYXRlc181Z2h6W10gPSB7Ci0JeyAuYml0cmF0ZSA9IDYwLAotCSAgLmh3X3ZhbHVlID0gQ09ORl9IV19CSVRfUkFURV82TUJQUywKLQkgIC5od192YWx1ZV9zaG9ydCA9IENPTkZfSFdfQklUX1JBVEVfNk1CUFMsIH0sCi0JeyAuYml0cmF0ZSA9IDkwLAotCSAgLmh3X3ZhbHVlID0gQ09ORl9IV19CSVRfUkFURV85TUJQUywKLQkgIC5od192YWx1ZV9zaG9ydCA9IENPTkZfSFdfQklUX1JBVEVfOU1CUFMsIH0sCi0JeyAuYml0cmF0ZSA9IDEyMCwKLQkgIC5od192YWx1ZSA9IENPTkZfSFdfQklUX1JBVEVfMTJNQlBTLAotCSAgLmh3X3ZhbHVlX3Nob3J0ID0gQ09ORl9IV19CSVRfUkFURV8xMk1CUFMsIH0sCi0JeyAuYml0cmF0ZSA9IDE4MCwKLQkgIC5od192YWx1ZSA9IENPTkZfSFdfQklUX1JBVEVfMThNQlBTLAotCSAgLmh3X3ZhbHVlX3Nob3J0ID0gQ09ORl9IV19CSVRfUkFURV8xOE1CUFMsIH0sCi0JeyAuYml0cmF0ZSA9IDI0MCwKLQkgIC5od192YWx1ZSA9IENPTkZfSFdfQklUX1JBVEVfMjRNQlBTLAotCSAgLmh3X3ZhbHVlX3Nob3J0ID0gQ09ORl9IV19CSVRfUkFURV8yNE1CUFMsIH0sCi0JeyAuYml0cmF0ZSA9IDM2MCwKLQkgLmh3X3ZhbHVlID0gQ09ORl9IV19CSVRfUkFURV8zNk1CUFMsCi0JIC5od192YWx1ZV9zaG9ydCA9IENPTkZfSFdfQklUX1JBVEVfMzZNQlBTLCB9LAotCXsgLmJpdHJhdGUgPSA0ODAsCi0JICAuaHdfdmFsdWUgPSBDT05GX0hXX0JJVF9SQVRFXzQ4TUJQUywKLQkgIC5od192YWx1ZV9zaG9ydCA9IENPTkZfSFdfQklUX1JBVEVfNDhNQlBTLCB9LAotCXsgLmJpdHJhdGUgPSA1NDAsCi0JICAuaHdfdmFsdWUgPSBDT05GX0hXX0JJVF9SQVRFXzU0TUJQUywKLQkgIC5od192YWx1ZV9zaG9ydCA9IENPTkZfSFdfQklUX1JBVEVfNTRNQlBTLCB9LAotfTsKLQotLyoKLSAqIDUgR0h6IGJhbmQgY2hhbm5lbHMgZm9yIFdMMTI3MyAtIGNhbid0IGJlIGNvbnN0LCBtYWM4MDIxMSB3cml0ZXMgdG8gdGhpcy4KLSAqIFRoZSBvcmRlciBvZiB0aGUgY2hhbm5lbHMgaGVyZSBpcyBkZXNpZ25lZCB0byBpbXByb3ZlIHNjYW5uaW5nLgotICovCi1zdGF0aWMgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIHdsMTI3MV9jaGFubmVsc181Z2h6W10gPSB7Ci0JeyAuaHdfdmFsdWUgPSAxODMsIC5jZW50ZXJfZnJlcSA9IDQ5MTV9LAotCXsgLmh3X3ZhbHVlID0gMTg4LCAuY2VudGVyX2ZyZXEgPSA0OTQwfSwKLQl7IC5od192YWx1ZSA9IDgsIC5jZW50ZXJfZnJlcSA9IDUwNDB9LAotCXsgLmh3X3ZhbHVlID0gMzQsIC5jZW50ZXJfZnJlcSA9IDUxNzB9LAotCXsgLmh3X3ZhbHVlID0gNDQsIC5jZW50ZXJfZnJlcSA9IDUyMjB9LAotCXsgLmh3X3ZhbHVlID0gNjAsIC5jZW50ZXJfZnJlcSA9IDUzMDB9LAotCXsgLmh3X3ZhbHVlID0gMTEyLCAuY2VudGVyX2ZyZXEgPSA1NTYwfSwKLQl7IC5od192YWx1ZSA9IDEzMiwgLmNlbnRlcl9mcmVxID0gNTY2MH0sCi0JeyAuaHdfdmFsdWUgPSAxNTcsIC5jZW50ZXJfZnJlcSA9IDU3ODV9LAotCXsgLmh3X3ZhbHVlID0gMTg0LCAuY2VudGVyX2ZyZXEgPSA0OTIwfSwKLQl7IC5od192YWx1ZSA9IDE4OSwgLmNlbnRlcl9mcmVxID0gNDk0NX0sCi0JeyAuaHdfdmFsdWUgPSA5LCAuY2VudGVyX2ZyZXEgPSA1MDQ1fSwKLQl7IC5od192YWx1ZSA9IDM2LCAuY2VudGVyX2ZyZXEgPSA1MTgwfSwKLQl7IC5od192YWx1ZSA9IDQ2LCAuY2VudGVyX2ZyZXEgPSA1MjMwfSwKLQl7IC5od192YWx1ZSA9IDY0LCAuY2VudGVyX2ZyZXEgPSA1MzIwfSwKLQl7IC5od192YWx1ZSA9IDExNiwgLmNlbnRlcl9mcmVxID0gNTU4MH0sCi0JeyAuaHdfdmFsdWUgPSAxMzYsIC5jZW50ZXJfZnJlcSA9IDU2ODB9LAotCXsgLmh3X3ZhbHVlID0gMTkyLCAuY2VudGVyX2ZyZXEgPSA0OTYwfSwKLQl7IC5od192YWx1ZSA9IDExLCAuY2VudGVyX2ZyZXEgPSA1MDU1fSwKLQl7IC5od192YWx1ZSA9IDM4LCAuY2VudGVyX2ZyZXEgPSA1MTkwfSwKLQl7IC5od192YWx1ZSA9IDQ4LCAuY2VudGVyX2ZyZXEgPSA1MjQwfSwKLQl7IC5od192YWx1ZSA9IDEwMCwgLmNlbnRlcl9mcmVxID0gNTUwMH0sCi0JeyAuaHdfdmFsdWUgPSAxMjAsIC5jZW50ZXJfZnJlcSA9IDU2MDB9LAotCXsgLmh3X3ZhbHVlID0gMTQwLCAuY2VudGVyX2ZyZXEgPSA1NzAwfSwKLQl7IC5od192YWx1ZSA9IDE4NSwgLmNlbnRlcl9mcmVxID0gNDkyNX0sCi0JeyAuaHdfdmFsdWUgPSAxOTYsIC5jZW50ZXJfZnJlcSA9IDQ5ODB9LAotCXsgLmh3X3ZhbHVlID0gMTIsIC5jZW50ZXJfZnJlcSA9IDUwNjB9LAotCXsgLmh3X3ZhbHVlID0gNDAsIC5jZW50ZXJfZnJlcSA9IDUyMDB9LAotCXsgLmh3X3ZhbHVlID0gNTIsIC5jZW50ZXJfZnJlcSA9IDUyNjB9LAotCXsgLmh3X3ZhbHVlID0gMTA0LCAuY2VudGVyX2ZyZXEgPSA1NTIwfSwKLQl7IC5od192YWx1ZSA9IDEyNCwgLmNlbnRlcl9mcmVxID0gNTYyMH0sCi0JeyAuaHdfdmFsdWUgPSAxNDksIC5jZW50ZXJfZnJlcSA9IDU3NDV9LAotCXsgLmh3X3ZhbHVlID0gMTYxLCAuY2VudGVyX2ZyZXEgPSA1ODA1fSwKLQl7IC5od192YWx1ZSA9IDE4NywgLmNlbnRlcl9mcmVxID0gNDkzNX0sCi0JeyAuaHdfdmFsdWUgPSA3LCAuY2VudGVyX2ZyZXEgPSA1MDM1fSwKLQl7IC5od192YWx1ZSA9IDE2LCAuY2VudGVyX2ZyZXEgPSA1MDgwfSwKLQl7IC5od192YWx1ZSA9IDQyLCAuY2VudGVyX2ZyZXEgPSA1MjEwfSwKLQl7IC5od192YWx1ZSA9IDU2LCAuY2VudGVyX2ZyZXEgPSA1MjgwfSwKLQl7IC5od192YWx1ZSA9IDEwOCwgLmNlbnRlcl9mcmVxID0gNTU0MH0sCi0JeyAuaHdfdmFsdWUgPSAxMjgsIC5jZW50ZXJfZnJlcSA9IDU2NDB9LAotCXsgLmh3X3ZhbHVlID0gMTUzLCAuY2VudGVyX2ZyZXEgPSA1NzY1fSwKLQl7IC5od192YWx1ZSA9IDE2NSwgLmNlbnRlcl9mcmVxID0gNTgyNX0sCi19OwotCi0vKiBtYXBwaW5nIHRvIGluZGV4ZXMgZm9yIHdsMTI3MV9yYXRlc181Z2h6ICovCi1zdGF0aWMgY29uc3QgdTggd2wxMjcxX3JhdGVfdG9faWR4XzVnaHpbXSA9IHsKLQkvKiBNQ1MgcmF0ZXMgYXJlIHVzZWQgb25seSB3aXRoIDExbiAqLwotCUNPTkZfSFdfUlhUWF9SQVRFX1VOU1VQUE9SVEVELCAvKiBDT05GX0hXX1JYVFhfUkFURV9NQ1M3ICovCi0JQ09ORl9IV19SWFRYX1JBVEVfVU5TVVBQT1JURUQsIC8qIENPTkZfSFdfUlhUWF9SQVRFX01DUzYgKi8KLQlDT05GX0hXX1JYVFhfUkFURV9VTlNVUFBPUlRFRCwgLyogQ09ORl9IV19SWFRYX1JBVEVfTUNTNSAqLwotCUNPTkZfSFdfUlhUWF9SQVRFX1VOU1VQUE9SVEVELCAvKiBDT05GX0hXX1JYVFhfUkFURV9NQ1M0ICovCi0JQ09ORl9IV19SWFRYX1JBVEVfVU5TVVBQT1JURUQsIC8qIENPTkZfSFdfUlhUWF9SQVRFX01DUzMgKi8KLQlDT05GX0hXX1JYVFhfUkFURV9VTlNVUFBPUlRFRCwgLyogQ09ORl9IV19SWFRYX1JBVEVfTUNTMiAqLwotCUNPTkZfSFdfUlhUWF9SQVRFX1VOU1VQUE9SVEVELCAvKiBDT05GX0hXX1JYVFhfUkFURV9NQ1MxICovCi0JQ09ORl9IV19SWFRYX1JBVEVfVU5TVVBQT1JURUQsIC8qIENPTkZfSFdfUlhUWF9SQVRFX01DUzAgKi8KLQotCTcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDT05GX0hXX1JYVFhfUkFURV81NCAgICovCi0JNiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENPTkZfSFdfUlhUWF9SQVRFXzQ4ICAgKi8KLQk1LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ09ORl9IV19SWFRYX1JBVEVfMzYgICAqLwotCTQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDT05GX0hXX1JYVFhfUkFURV8yNCAgICovCi0KLQkvKiBUSS1zcGVjaWZpYyByYXRlICovCi0JQ09ORl9IV19SWFRYX1JBVEVfVU5TVVBQT1JURUQsIC8qIENPTkZfSFdfUlhUWF9SQVRFXzIyICAgKi8KLQotCTMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDT05GX0hXX1JYVFhfUkFURV8xOCAgICovCi0JMiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENPTkZfSFdfUlhUWF9SQVRFXzEyICAgKi8KLQlDT05GX0hXX1JYVFhfUkFURV9VTlNVUFBPUlRFRCwgLyogQ09ORl9IV19SWFRYX1JBVEVfMTEgICAqLwotCTEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDT05GX0hXX1JYVFhfUkFURV85ICAgICovCi0JMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENPTkZfSFdfUlhUWF9SQVRFXzYgICAgKi8KLQlDT05GX0hXX1JYVFhfUkFURV9VTlNVUFBPUlRFRCwgLyogQ09ORl9IV19SWFRYX1JBVEVfNV81ICAqLwotCUNPTkZfSFdfUlhUWF9SQVRFX1VOU1VQUE9SVEVELCAvKiBDT05GX0hXX1JYVFhfUkFURV8yICAgICovCi0JQ09ORl9IV19SWFRYX1JBVEVfVU5TVVBQT1JURUQgIC8qIENPTkZfSFdfUlhUWF9SQVRFXzEgICAgKi8KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kIHdsMTI3MV9iYW5kXzVnaHogPSB7Ci0JLmNoYW5uZWxzID0gd2wxMjcxX2NoYW5uZWxzXzVnaHosCi0JLm5fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKHdsMTI3MV9jaGFubmVsc181Z2h6KSwKLQkuYml0cmF0ZXMgPSB3bDEyNzFfcmF0ZXNfNWdoeiwKLQkubl9iaXRyYXRlcyA9IEFSUkFZX1NJWkUod2wxMjcxX3JhdGVzXzVnaHopLAotfTsKLQotc3RhdGljIGNvbnN0IHU4ICp3bDEyNzFfYmFuZF9yYXRlX3RvX2lkeFtdID0gewotCVtJRUVFODAyMTFfQkFORF8yR0haXSA9IHdsMTI3MV9yYXRlX3RvX2lkeF8yZ2h6LAotCVtJRUVFODAyMTFfQkFORF81R0haXSA9IHdsMTI3MV9yYXRlX3RvX2lkeF81Z2h6Ci19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgd2wxMjcxX29wcyA9IHsKLQkuc3RhcnQgPSB3bDEyNzFfb3Bfc3RhcnQsCi0JLnN0b3AgPSB3bDEyNzFfb3Bfc3RvcCwKLQkuYWRkX2ludGVyZmFjZSA9IHdsMTI3MV9vcF9hZGRfaW50ZXJmYWNlLAotCS5yZW1vdmVfaW50ZXJmYWNlID0gd2wxMjcxX29wX3JlbW92ZV9pbnRlcmZhY2UsCi0JLmNvbmZpZyA9IHdsMTI3MV9vcF9jb25maWcsCi0JLnByZXBhcmVfbXVsdGljYXN0ID0gd2wxMjcxX29wX3ByZXBhcmVfbXVsdGljYXN0LAotCS5jb25maWd1cmVfZmlsdGVyID0gd2wxMjcxX29wX2NvbmZpZ3VyZV9maWx0ZXIsCi0JLnR4ID0gd2wxMjcxX29wX3R4LAotCS5zZXRfa2V5ID0gd2wxMjcxX29wX3NldF9rZXksCi0JLmh3X3NjYW4gPSB3bDEyNzFfb3BfaHdfc2NhbiwKLQkuYnNzX2luZm9fY2hhbmdlZCA9IHdsMTI3MV9vcF9ic3NfaW5mb19jaGFuZ2VkLAotCS5zZXRfcnRzX3RocmVzaG9sZCA9IHdsMTI3MV9vcF9zZXRfcnRzX3RocmVzaG9sZCwKLQkuY29uZl90eCA9IHdsMTI3MV9vcF9jb25mX3R4LAotCS5nZXRfdHNmID0gd2wxMjcxX29wX2dldF90c2YsCi0JLmdldF9zdXJ2ZXkgPSB3bDEyNzFfb3BfZ2V0X3N1cnZleSwKLQlDRkc4MDIxMV9URVNUTU9ERV9DTUQod2wxMjcxX3RtX2NtZCkKLX07Ci0KLQotdTggd2wxMjcxX3JhdGVfdG9faWR4KHN0cnVjdCB3bDEyNzEgKndsLCBpbnQgcmF0ZSkKLXsKLQl1OCBpZHg7Ci0KLQlCVUdfT04od2wtPmJhbmQgPj0gc2l6ZW9mKHdsMTI3MV9iYW5kX3JhdGVfdG9faWR4KS9zaXplb2YodTggKikpOwotCi0JaWYgKHVubGlrZWx5KHJhdGUgPj0gQ09ORl9IV19SWFRYX1JBVEVfTUFYKSkgewotCQl3bDEyNzFfZXJyb3IoIklsbGVnYWwgUlggcmF0ZSBmcm9tIEhXOiAlZCIsIHJhdGUpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZHggPSB3bDEyNzFfYmFuZF9yYXRlX3RvX2lkeFt3bC0+YmFuZF1bcmF0ZV07Ci0JaWYgKHVubGlrZWx5KGlkeCA9PSBDT05GX0hXX1JYVFhfUkFURV9VTlNVUFBPUlRFRCkpIHsKLQkJd2wxMjcxX2Vycm9yKCJVbnN1cHBvcnRlZCBSWCByYXRlIGZyb20gSFc6ICVkIiwgcmF0ZSk7Ci0JCXJldHVybiAwOwotCX0KLQotCXJldHVybiBpZHg7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHdsMTI3MV9zeXNmc19zaG93X2J0X2NvZXhfc3RhdGUoc3RydWN0IGRldmljZSAqZGV2LAotCQkJCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJCSAgICAgICBjaGFyICpidWYpCi17Ci0Jc3RydWN0IHdsMTI3MSAqd2wgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzc2l6ZV90IGxlbjsKLQotCWxlbiA9IFBBR0VfU0laRTsKLQotCW11dGV4X2xvY2soJndsLT5tdXRleCk7Ci0JbGVuID0gc25wcmludGYoYnVmLCBsZW4sICIlZFxuXG4wIC0gb2ZmXG4xIC0gb25cbiIsCi0JCSAgICAgICB3bC0+c2dfZW5hYmxlZCk7Ci0JbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOwotCi0JcmV0dXJuIGxlbjsKLQotfQotCi1zdGF0aWMgc3NpemVfdCB3bDEyNzFfc3lzZnNfc3RvcmVfYnRfY29leF9zdGF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQotewotCXN0cnVjdCB3bDEyNzEgKndsID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0JdW5zaWduZWQgbG9uZyByZXM7Ci0JaW50IHJldDsKLQotCXJldCA9IHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZyZXMpOwotCi0JaWYgKHJldCA8IDApIHsKLQkJd2wxMjcxX3dhcm5pbmcoImluY29ycmVjdCB2YWx1ZSB3cml0dGVuIHRvIGJ0X2NvZXhfbW9kZSIpOwotCQlyZXR1cm4gY291bnQ7Ci0JfQotCi0JbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKLQotCXJlcyA9ICEhcmVzOwotCi0JaWYgKHJlcyA9PSB3bC0+c2dfZW5hYmxlZCkKLQkJZ290byBvdXQ7Ci0KLQl3bC0+c2dfZW5hYmxlZCA9IHJlczsKLQotCWlmICh3bC0+c3RhdGUgPT0gV0wxMjcxX1NUQVRFX09GRikKLQkJZ290byBvdXQ7Ci0KLQlyZXQgPSB3bDEyNzFfcHNfZWxwX3dha2V1cCh3bCwgZmFsc2UpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dDsKLQotCXdsMTI3MV9hY3hfc2dfZW5hYmxlKHdsLCB3bC0+c2dfZW5hYmxlZCk7Ci0Jd2wxMjcxX3BzX2VscF9zbGVlcCh3bCk7Ci0KLSBvdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOwotCXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIERFVklDRV9BVFRSKGJ0X2NvZXhfc3RhdGUsIFNfSVJVR08gfCBTX0lXVVNSLAotCQkgICB3bDEyNzFfc3lzZnNfc2hvd19idF9jb2V4X3N0YXRlLAotCQkgICB3bDEyNzFfc3lzZnNfc3RvcmVfYnRfY29leF9zdGF0ZSk7Ci0KLXN0YXRpYyBzc2l6ZV90IHdsMTI3MV9zeXNmc19zaG93X2h3X3BnX3ZlcihzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJCQkgICBjaGFyICpidWYpCi17Ci0Jc3RydWN0IHdsMTI3MSAqd2wgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzc2l6ZV90IGxlbjsKLQotCWxlbiA9IFBBR0VfU0laRTsKLQotCW11dGV4X2xvY2soJndsLT5tdXRleCk7Ci0JaWYgKHdsLT5od19wZ192ZXIgPj0gMCkKLQkJbGVuID0gc25wcmludGYoYnVmLCBsZW4sICIlZFxuIiwgd2wtPmh3X3BnX3Zlcik7Ci0JZWxzZQotCQlsZW4gPSBzbnByaW50ZihidWYsIGxlbiwgIm4vYVxuIik7Ci0JbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOwotCi0JcmV0dXJuIGxlbjsKLX0KLQotc3RhdGljIERFVklDRV9BVFRSKGh3X3BnX3ZlciwgU19JUlVHTyB8IFNfSVdVU1IsCi0JCSAgIHdsMTI3MV9zeXNmc19zaG93X2h3X3BnX3ZlciwgTlVMTCk7Ci0KLWludCB3bDEyNzFfcmVnaXN0ZXJfaHcoc3RydWN0IHdsMTI3MSAqd2wpCi17Ci0JaW50IHJldDsKLQotCWlmICh3bC0+bWFjODAyMTFfcmVnaXN0ZXJlZCkKLQkJcmV0dXJuIDA7Ci0KLQlTRVRfSUVFRTgwMjExX1BFUk1fQUREUih3bC0+aHcsIHdsLT5tYWNfYWRkcik7Ci0KLQlyZXQgPSBpZWVlODAyMTFfcmVnaXN0ZXJfaHcod2wtPmh3KTsKLQlpZiAocmV0IDwgMCkgewotCQl3bDEyNzFfZXJyb3IoInVuYWJsZSB0byByZWdpc3RlciBtYWM4MDIxMSBodzogJWQiLCByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXdsLT5tYWM4MDIxMV9yZWdpc3RlcmVkID0gdHJ1ZTsKLQotCXJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmd2wxMjcxX2Rldl9ub3RpZmllcik7Ci0KLQl3bDEyNzFfbm90aWNlKCJsb2FkZWQiKTsKLQotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTF9HUEwod2wxMjcxX3JlZ2lzdGVyX2h3KTsKLQotdm9pZCB3bDEyNzFfdW5yZWdpc3Rlcl9odyhzdHJ1Y3Qgd2wxMjcxICp3bCkKLXsKLQl1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmd2wxMjcxX2Rldl9ub3RpZmllcik7Ci0JaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcod2wtPmh3KTsKLQl3bC0+bWFjODAyMTFfcmVnaXN0ZXJlZCA9IGZhbHNlOwotCi19Ci1FWFBPUlRfU1lNQk9MX0dQTCh3bDEyNzFfdW5yZWdpc3Rlcl9odyk7Ci0KLWludCB3bDEyNzFfaW5pdF9pZWVlODAyMTEoc3RydWN0IHdsMTI3MSAqd2wpCi17Ci0Jc3RhdGljIGNvbnN0IHUzMiBjaXBoZXJfc3VpdGVzW10gPSB7Ci0JCVdMQU5fQ0lQSEVSX1NVSVRFX1dFUDQwLAotCQlXTEFOX0NJUEhFUl9TVUlURV9XRVAxMDQsCi0JCVdMQU5fQ0lQSEVSX1NVSVRFX1RLSVAsCi0JCVdMQU5fQ0lQSEVSX1NVSVRFX0NDTVAsCi0JCVdMMTI3MV9DSVBIRVJfU1VJVEVfR0VNLAotCX07Ci0KLQkvKiBUaGUgdHggZGVzY3JpcHRvciBidWZmZXIgYW5kIHRoZSBUS0lQIHNwYWNlLiAqLwotCXdsLT5ody0+ZXh0cmFfdHhfaGVhZHJvb20gPSBXTDEyNzFfVEtJUF9JVl9TUEFDRSArCi0JCXNpemVvZihzdHJ1Y3Qgd2wxMjcxX3R4X2h3X2Rlc2NyKTsKLQotCS8qIHVuaXQgdXMgKi8KLQkvKiBGSVhNRTogZmluZCBhIHByb3BlciB2YWx1ZSAqLwotCXdsLT5ody0+Y2hhbm5lbF9jaGFuZ2VfdGltZSA9IDEwMDAwOwotCXdsLT5ody0+bWF4X2xpc3Rlbl9pbnRlcnZhbCA9IHdsLT5jb25mLmNvbm4ubWF4X2xpc3Rlbl9pbnRlcnZhbDsKLQotCXdsLT5ody0+ZmxhZ3MgPSBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSB8Ci0JCUlFRUU4MDIxMV9IV19CRUFDT05fRklMVEVSIHwKLQkJSUVFRTgwMjExX0hXX1NVUFBPUlRTX1BTIHwKLQkJSUVFRTgwMjExX0hXX1NVUFBPUlRTX1VBUFNEIHwKLQkJSUVFRTgwMjExX0hXX0hBU19SQVRFX0NPTlRST0wgfAotCQlJRUVFODAyMTFfSFdfQ09OTkVDVElPTl9NT05JVE9SIHwKLQkJSUVFRTgwMjExX0hXX1NVUFBPUlRTX0NRTV9SU1NJOwotCi0Jd2wtPmh3LT53aXBoeS0+Y2lwaGVyX3N1aXRlcyA9IGNpcGhlcl9zdWl0ZXM7Ci0Jd2wtPmh3LT53aXBoeS0+bl9jaXBoZXJfc3VpdGVzID0gQVJSQVlfU0laRShjaXBoZXJfc3VpdGVzKTsKLQotCXdsLT5ody0+d2lwaHktPmludGVyZmFjZV9tb2RlcyA9IEJJVChOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB8Ci0JCUJJVChOTDgwMjExX0lGVFlQRV9BREhPQyk7Ci0Jd2wtPmh3LT53aXBoeS0+bWF4X3NjYW5fc3NpZHMgPSAxOwotCXdsLT5ody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0gJndsMTI3MV9iYW5kXzJnaHo7Ci0Jd2wtPmh3LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0gPSAmd2wxMjcxX2JhbmRfNWdoejsKLQotCXdsLT5ody0+cXVldWVzID0gNDsKLQl3bC0+aHctPm1heF9yYXRlcyA9IDE7Ci0KLQlTRVRfSUVFRTgwMjExX0RFVih3bC0+aHcsIHdsMTI3MV93bF90b19kZXYod2wpKTsKLQotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTF9HUEwod2wxMjcxX2luaXRfaWVlZTgwMjExKTsKLQotI2RlZmluZSBXTDEyNzFfREVGQVVMVF9DSEFOTkVMIDAKLQotc3RydWN0IGllZWU4MDIxMV9odyAqd2wxMjcxX2FsbG9jX2h3KHZvaWQpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqaHc7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdF9kZXYgPSBOVUxMOwotCXN0cnVjdCB3bDEyNzEgKndsOwotCWludCBpLCByZXQ7Ci0JdW5zaWduZWQgaW50IG9yZGVyOwotCi0JaHcgPSBpZWVlODAyMTFfYWxsb2NfaHcoc2l6ZW9mKCp3bCksICZ3bDEyNzFfb3BzKTsKLQlpZiAoIWh3KSB7Ci0JCXdsMTI3MV9lcnJvcigiY291bGQgbm90IGFsbG9jIGllZWU4MDIxMV9odyIpOwotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycl9od19hbGxvYzsKLQl9Ci0KLQlwbGF0X2RldiA9IGttZW1kdXAoJndsMTI3MV9kZXZpY2UsIHNpemVvZih3bDEyNzFfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFwbGF0X2RldikgewotCQl3bDEyNzFfZXJyb3IoImNvdWxkIG5vdCBhbGxvY2F0ZSBwbGF0Zm9ybV9kZXZpY2UiKTsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBlcnJfcGxhdF9hbGxvYzsKLQl9Ci0KLQl3bCA9IGh3LT5wcml2OwotCW1lbXNldCh3bCwgMCwgc2l6ZW9mKCp3bCkpOwotCi0JSU5JVF9MSVNUX0hFQUQoJndsLT5saXN0KTsKLQotCXdsLT5odyA9IGh3OwotCXdsLT5wbGF0X2RldiA9IHBsYXRfZGV2OwotCi0Jc2tiX3F1ZXVlX2hlYWRfaW5pdCgmd2wtPnR4X3F1ZXVlKTsKLQotCUlOSVRfREVMQVlFRF9XT1JLKCZ3bC0+ZWxwX3dvcmssIHdsMTI3MV9lbHBfd29yayk7Ci0JSU5JVF9ERUxBWUVEX1dPUksoJndsLT5wc3BvbGxfd29yaywgd2wxMjcxX3BzcG9sbF93b3JrKTsKLQlJTklUX1dPUksoJndsLT5pcnFfd29yaywgd2wxMjcxX2lycV93b3JrKTsKLQlJTklUX1dPUksoJndsLT50eF93b3JrLCB3bDEyNzFfdHhfd29yayk7Ci0JSU5JVF9XT1JLKCZ3bC0+cmVjb3Zlcnlfd29yaywgd2wxMjcxX3JlY292ZXJ5X3dvcmspOwotCUlOSVRfREVMQVlFRF9XT1JLKCZ3bC0+c2Nhbl9jb21wbGV0ZV93b3JrLCB3bDEyNzFfc2Nhbl9jb21wbGV0ZV93b3JrKTsKLQl3bC0+Y2hhbm5lbCA9IFdMMTI3MV9ERUZBVUxUX0NIQU5ORUw7Ci0Jd2wtPmJlYWNvbl9pbnQgPSBXTDEyNzFfREVGQVVMVF9CRUFDT05fSU5UOwotCXdsLT5kZWZhdWx0X2tleSA9IDA7Ci0Jd2wtPnJ4X2NvdW50ZXIgPSAwOwotCXdsLT5yeF9jb25maWcgPSBXTDEyNzFfREVGQVVMVF9SWF9DT05GSUc7Ci0Jd2wtPnJ4X2ZpbHRlciA9IFdMMTI3MV9ERUZBVUxUX1JYX0ZJTFRFUjsKLQl3bC0+cHNtX2VudHJ5X3JldHJ5ID0gMDsKLQl3bC0+cG93ZXJfbGV2ZWwgPSBXTDEyNzFfREVGQVVMVF9QT1dFUl9MRVZFTDsKLQl3bC0+YmFzaWNfcmF0ZV9zZXQgPSBDT05GX1RYX1JBVEVfTUFTS19CQVNJQzsKLQl3bC0+YmFzaWNfcmF0ZSA9IENPTkZfVFhfUkFURV9NQVNLX0JBU0lDOwotCXdsLT5yYXRlX3NldCA9IENPTkZfVFhfUkFURV9NQVNLX0JBU0lDOwotCXdsLT5zdGFfcmF0ZV9zZXQgPSAwOwotCXdsLT5iYW5kID0gSUVFRTgwMjExX0JBTkRfMkdIWjsKLQl3bC0+dmlmID0gTlVMTDsKLQl3bC0+ZmxhZ3MgPSAwOwotCXdsLT5zZ19lbmFibGVkID0gdHJ1ZTsKLQl3bC0+aHdfcGdfdmVyID0gLTE7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQUNYX1RYX0RFU0NSSVBUT1JTOyBpKyspCi0JCXdsLT50eF9mcmFtZXNbaV0gPSBOVUxMOwotCi0Jc3Bpbl9sb2NrX2luaXQoJndsLT53bF9sb2NrKTsKLQotCXdsLT5zdGF0ZSA9IFdMMTI3MV9TVEFURV9PRkY7Ci0JbXV0ZXhfaW5pdCgmd2wtPm11dGV4KTsKLQotCS8qIEFwcGx5IGRlZmF1bHQgZHJpdmVyIGNvbmZpZ3VyYXRpb24uICovCi0Jd2wxMjcxX2NvbmZfaW5pdCh3bCk7Ci0KLQl3bDEyNzFfZGVidWdmc19pbml0KHdsKTsKLQotCW9yZGVyID0gZ2V0X29yZGVyKFdMMTI3MV9BR0dSX0JVRkZFUl9TSVpFKTsKLQl3bC0+YWdncl9idWYgPSAodTggKilfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwsIG9yZGVyKTsKLQlpZiAoIXdsLT5hZ2dyX2J1ZikgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycl9odzsKLQl9Ci0KLQkvKiBSZWdpc3RlciBwbGF0Zm9ybSBkZXZpY2UgKi8KLQlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIod2wtPnBsYXRfZGV2KTsKLQlpZiAocmV0KSB7Ci0JCXdsMTI3MV9lcnJvcigiY291bGRuJ3QgcmVnaXN0ZXIgcGxhdGZvcm0gZGV2aWNlIik7Ci0JCWdvdG8gZXJyX2FnZ3I7Ci0JfQotCWRldl9zZXRfZHJ2ZGF0YSgmd2wtPnBsYXRfZGV2LT5kZXYsIHdsKTsKLQotCS8qIENyZWF0ZSBzeXNmcyBmaWxlIHRvIGNvbnRyb2wgYnQgY29leCBzdGF0ZSAqLwotCXJldCA9IGRldmljZV9jcmVhdGVfZmlsZSgmd2wtPnBsYXRfZGV2LT5kZXYsICZkZXZfYXR0cl9idF9jb2V4X3N0YXRlKTsKLQlpZiAocmV0IDwgMCkgewotCQl3bDEyNzFfZXJyb3IoImZhaWxlZCB0byBjcmVhdGUgc3lzZnMgZmlsZSBidF9jb2V4X3N0YXRlIik7Ci0JCWdvdG8gZXJyX3BsYXRmb3JtOwotCX0KLQotCS8qIENyZWF0ZSBzeXNmcyBmaWxlIHRvIGdldCBIVyBQRyB2ZXJzaW9uICovCi0JcmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZ3bC0+cGxhdF9kZXYtPmRldiwgJmRldl9hdHRyX2h3X3BnX3Zlcik7Ci0JaWYgKHJldCA8IDApIHsKLQkJd2wxMjcxX2Vycm9yKCJmYWlsZWQgdG8gY3JlYXRlIHN5c2ZzIGZpbGUgaHdfcGdfdmVyIik7Ci0JCWdvdG8gZXJyX2J0X2NvZXhfc3RhdGU7Ci0JfQotCi0JcmV0dXJuIGh3OwotCi1lcnJfYnRfY29leF9zdGF0ZToKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJndsLT5wbGF0X2Rldi0+ZGV2LCAmZGV2X2F0dHJfYnRfY29leF9zdGF0ZSk7Ci0KLWVycl9wbGF0Zm9ybToKLQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcih3bC0+cGxhdF9kZXYpOwotCi1lcnJfYWdncjoKLQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXdsLT5hZ2dyX2J1Ziwgb3JkZXIpOwotCi1lcnJfaHc6Ci0Jd2wxMjcxX2RlYnVnZnNfZXhpdCh3bCk7Ci0Ja2ZyZWUocGxhdF9kZXYpOwotCi1lcnJfcGxhdF9hbGxvYzoKLQlpZWVlODAyMTFfZnJlZV9odyhodyk7Ci0KLWVycl9od19hbGxvYzoKLQotCXJldHVybiBFUlJfUFRSKHJldCk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTCh3bDEyNzFfYWxsb2NfaHcpOwotCi1pbnQgd2wxMjcxX2ZyZWVfaHcoc3RydWN0IHdsMTI3MSAqd2wpCi17Ci0JcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIod2wtPnBsYXRfZGV2KTsKLQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXdsLT5hZ2dyX2J1ZiwKLQkJCWdldF9vcmRlcihXTDEyNzFfQUdHUl9CVUZGRVJfU0laRSkpOwotCWtmcmVlKHdsLT5wbGF0X2Rldik7Ci0KLQl3bDEyNzFfZGVidWdmc19leGl0KHdsKTsKLQotCXZmcmVlKHdsLT5mdyk7Ci0Jd2wtPmZ3ID0gTlVMTDsKLQlrZnJlZSh3bC0+bnZzKTsKLQl3bC0+bnZzID0gTlVMTDsKLQotCWtmcmVlKHdsLT5md19zdGF0dXMpOwotCWtmcmVlKHdsLT50eF9yZXNfaWYpOwotCi0JaWVlZTgwMjExX2ZyZWVfaHcod2wtPmh3KTsKLQotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTF9HUEwod2wxMjcxX2ZyZWVfaHcpOwotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJMdWNpYW5vIENvZWxobyA8bHVjaWFuby5jb2VsaG9Abm9raWEuY29tPiIpOwotTU9EVUxFX0FVVEhPUigiSnV1c28gT2lrYXJpbmVuIDxqdXVzby5vaWthcmluZW5Abm9raWEuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9wcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9wcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlM2MzMzJlLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfcHMuYworKysgL2Rldi9udWxsCkBAIC0xLDE3OCArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMjcxCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgTm9raWEgQ29ycG9yYXRpb24KLSAqCi0gKiBDb250YWN0OiBMdWNpYW5vIENvZWxobyA8bHVjaWFuby5jb2VsaG9Abm9raWEuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQotICogMDIxMTAtMTMwMSBVU0EKLSAqCi0gKi8KLQotI2luY2x1ZGUgIndsMTI3MV9yZWcuaCIKLSNpbmNsdWRlICJ3bDEyNzFfcHMuaCIKLSNpbmNsdWRlICJ3bDEyNzFfaW8uaCIKLQotI2RlZmluZSBXTDEyNzFfV0FLRVVQX1RJTUVPVVQgNTAwCi0KLXZvaWQgd2wxMjcxX2VscF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgZGVsYXllZF93b3JrICpkd29yazsKLQlzdHJ1Y3Qgd2wxMjcxICp3bDsKLQotCWR3b3JrID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkZWxheWVkX3dvcmssIHdvcmspOwotCXdsID0gY29udGFpbmVyX29mKGR3b3JrLCBzdHJ1Y3Qgd2wxMjcxLCBlbHBfd29yayk7Ci0KLQl3bDEyNzFfZGVidWcoREVCVUdfUFNNLCAiZWxwIHdvcmsiKTsKLQotCW11dGV4X2xvY2soJndsLT5tdXRleCk7Ci0KLQlpZiAodW5saWtlbHkod2wtPnN0YXRlID09IFdMMTI3MV9TVEFURV9PRkYpKQotCQlnb3RvIG91dDsKLQotCWlmICh0ZXN0X2JpdChXTDEyNzFfRkxBR19JTl9FTFAsICZ3bC0+ZmxhZ3MpIHx8Ci0JICAgICghdGVzdF9iaXQoV0wxMjcxX0ZMQUdfUFNNLCAmd2wtPmZsYWdzKSAmJgotCSAgICAgIXRlc3RfYml0KFdMMTI3MV9GTEFHX0lETEUsICZ3bC0+ZmxhZ3MpKSkKLQkJZ290byBvdXQ7Ci0KLQl3bDEyNzFfZGVidWcoREVCVUdfUFNNLCAiY2hpcCB0byBlbHAiKTsKLQl3bDEyNzFfcmF3X3dyaXRlMzIod2wsIEhXX0FDQ0VTU19FTFBfQ1RSTF9SRUdfQUREUiwgRUxQQ1RSTF9TTEVFUCk7Ci0Jc2V0X2JpdChXTDEyNzFfRkxBR19JTl9FTFAsICZ3bC0+ZmxhZ3MpOwotCi1vdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOwotfQotCi0jZGVmaW5lIEVMUF9FTlRSWV9ERUxBWSAgNQotCi0vKiBSb3V0aW5lcyB0byB0b2dnbGUgc2xlZXAgbW9kZSB3aGlsZSBpbiBFTFAgKi8KLXZvaWQgd2wxMjcxX3BzX2VscF9zbGVlcChzdHJ1Y3Qgd2wxMjcxICp3bCkKLXsKLQlpZiAodGVzdF9iaXQoV0wxMjcxX0ZMQUdfUFNNLCAmd2wtPmZsYWdzKSB8fAotCSAgICB0ZXN0X2JpdChXTDEyNzFfRkxBR19JRExFLCAmd2wtPmZsYWdzKSkgewotCQljYW5jZWxfZGVsYXllZF93b3JrKCZ3bC0+ZWxwX3dvcmspOwotCQlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKHdsLT5odywgJndsLT5lbHBfd29yaywKLQkJCQkJICAgICBtc2Vjc190b19qaWZmaWVzKEVMUF9FTlRSWV9ERUxBWSkpOwotCX0KLX0KLQotaW50IHdsMTI3MV9wc19lbHBfd2FrZXVwKHN0cnVjdCB3bDEyNzEgKndsLCBib29sIGNoaXBfYXdha2UpCi17Ci0JREVDTEFSRV9DT01QTEVUSU9OX09OU1RBQ0soY29tcGwpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldDsKLQl1MzIgc3RhcnRfdGltZSA9IGppZmZpZXM7Ci0JYm9vbCBwZW5kaW5nID0gZmFsc2U7Ci0KLQlpZiAoIXRlc3RfYml0KFdMMTI3MV9GTEFHX0lOX0VMUCwgJndsLT5mbGFncykpCi0JCXJldHVybiAwOwotCi0Jd2wxMjcxX2RlYnVnKERFQlVHX1BTTSwgIndha2luZyB1cCBjaGlwIGZyb20gZWxwIik7Ci0KLQkvKgotCSAqIFRoZSBzcGlubG9jayBpcyByZXF1aXJlZCBoZXJlIHRvIHN5bmNocm9uaXplIGJvdGggdGhlIHdvcmsgYW5kCi0JICogdGhlIGNvbXBsZXRpb24gdmFyaWFibGUgaW4gb25lIGVudGl0eS4KLQkgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmd2wtPndsX2xvY2ssIGZsYWdzKTsKLQlpZiAod29ya19wZW5kaW5nKCZ3bC0+aXJxX3dvcmspIHx8IGNoaXBfYXdha2UpCi0JCXBlbmRpbmcgPSB0cnVlOwotCWVsc2UKLQkJd2wtPmVscF9jb21wbCA9ICZjb21wbDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3bC0+d2xfbG9jaywgZmxhZ3MpOwotCi0Jd2wxMjcxX3Jhd193cml0ZTMyKHdsLCBIV19BQ0NFU1NfRUxQX0NUUkxfUkVHX0FERFIsIEVMUENUUkxfV0FLRV9VUCk7Ci0KLQlpZiAoIXBlbmRpbmcpIHsKLQkJcmV0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KAotCQkJJmNvbXBsLCBtc2Vjc190b19qaWZmaWVzKFdMMTI3MV9XQUtFVVBfVElNRU9VVCkpOwotCQlpZiAocmV0ID09IDApIHsKLQkJCXdsMTI3MV9lcnJvcigiRUxQIHdha2V1cCB0aW1lb3V0ISIpOwotCQkJaWVlZTgwMjExX3F1ZXVlX3dvcmsod2wtPmh3LCAmd2wtPnJlY292ZXJ5X3dvcmspOwotCQkJcmV0ID0gLUVUSU1FRE9VVDsKLQkJCWdvdG8gZXJyOwotCQl9IGVsc2UgaWYgKHJldCA8IDApIHsKLQkJCXdsMTI3MV9lcnJvcigiRUxQIHdha2V1cCBjb21wbGV0aW9uIGVycm9yLiIpOwotCQkJZ290byBlcnI7Ci0JCX0KLQl9Ci0KLQljbGVhcl9iaXQoV0wxMjcxX0ZMQUdfSU5fRUxQLCAmd2wtPmZsYWdzKTsKLQotCXdsMTI3MV9kZWJ1ZyhERUJVR19QU00sICJ3YWtldXAgdGltZTogJXUgbXMiLAotCQkgICAgIGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtIHN0YXJ0X3RpbWUpKTsKLQlnb3RvIG91dDsKLQotZXJyOgotCXNwaW5fbG9ja19pcnFzYXZlKCZ3bC0+d2xfbG9jaywgZmxhZ3MpOwotCXdsLT5lbHBfY29tcGwgPSBOVUxMOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndsLT53bF9sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIHJldDsKLQotb3V0OgotCXJldHVybiAwOwotfQotCi1pbnQgd2wxMjcxX3BzX3NldF9tb2RlKHN0cnVjdCB3bDEyNzEgKndsLCBlbnVtIHdsMTI3MV9jbWRfcHNfbW9kZSBtb2RlLAotCQkgICAgICAgdTMyIHJhdGVzLCBib29sIHNlbmQpCi17Ci0JaW50IHJldDsKLQotCXN3aXRjaCAobW9kZSkgewotCWNhc2UgU1RBVElPTl9QT1dFUl9TQVZFX01PREU6Ci0JCXdsMTI3MV9kZWJ1ZyhERUJVR19QU00sICJlbnRlcmluZyBwc20iKTsKLQotCQlyZXQgPSB3bDEyNzFfYWN4X3dha2VfdXBfY29uZGl0aW9ucyh3bCk7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQl3bDEyNzFfZXJyb3IoImNvdWxkbid0IHNldCB3YWtlIHVwIGNvbmRpdGlvbnMiKTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KLQotCQlyZXQgPSB3bDEyNzFfY21kX3BzX21vZGUod2wsIFNUQVRJT05fUE9XRVJfU0FWRV9NT0RFLAotCQkJCQkgcmF0ZXMsIHNlbmQpOwotCQlpZiAocmV0IDwgMCkKLQkJCXJldHVybiByZXQ7Ci0KLQkJc2V0X2JpdChXTDEyNzFfRkxBR19QU00sICZ3bC0+ZmxhZ3MpOwotCQlicmVhazsKLQljYXNlIFNUQVRJT05fQUNUSVZFX01PREU6Ci0JZGVmYXVsdDoKLQkJd2wxMjcxX2RlYnVnKERFQlVHX1BTTSwgImxlYXZpbmcgcHNtIik7Ci0JCXJldCA9IHdsMTI3MV9wc19lbHBfd2FrZXVwKHdsLCBmYWxzZSk7Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIHJldDsKLQotCQkvKiBkaXNhYmxlIGJlYWNvbiBlYXJseSB0ZXJtaW5hdGlvbiAqLwotCQlyZXQgPSB3bDEyNzFfYWN4X2JldF9lbmFibGUod2wsIGZhbHNlKTsKLQkJaWYgKHJldCA8IDApCi0JCQlyZXR1cm4gcmV0OwotCi0JCS8qIGRpc2FibGUgYmVhY29uIGZpbHRlcmluZyAqLwotCQlyZXQgPSB3bDEyNzFfYWN4X2JlYWNvbl9maWx0ZXJfb3B0KHdsLCBmYWxzZSk7Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIHJldDsKLQotCQlyZXQgPSB3bDEyNzFfY21kX3BzX21vZGUod2wsIFNUQVRJT05fQUNUSVZFX01PREUsCi0JCQkJCSByYXRlcywgc2VuZCk7Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIHJldDsKLQotCQljbGVhcl9iaXQoV0wxMjcxX0ZMQUdfUFNNLCAmd2wtPmZsYWdzKTsKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3BzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3BzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiYTdiMDMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9wcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdsMTI3MQotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IE5va2lhIENvcnBvcmF0aW9uCi0gKgotICogQ29udGFjdDogTHVjaWFubyBDb2VsaG8gPGx1Y2lhbm8uY29lbGhvQG5va2lhLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKLSAqIDAyMTEwLTEzMDEgVVNBCi0gKgotICovCi0KLSNpZm5kZWYgX19XTDEyNzFfUFNfSF9fCi0jZGVmaW5lIF9fV0wxMjcxX1BTX0hfXwotCi0jaW5jbHVkZSAid2wxMjcxLmgiCi0jaW5jbHVkZSAid2wxMjcxX2FjeC5oIgotCi1pbnQgd2wxMjcxX3BzX3NldF9tb2RlKHN0cnVjdCB3bDEyNzEgKndsLCBlbnVtIHdsMTI3MV9jbWRfcHNfbW9kZSBtb2RlLAotCQkgICAgICAgdTMyIHJhdGVzLCBib29sIHNlbmQpOwotdm9pZCB3bDEyNzFfcHNfZWxwX3NsZWVwKHN0cnVjdCB3bDEyNzEgKndsKTsKLWludCB3bDEyNzFfcHNfZWxwX3dha2V1cChzdHJ1Y3Qgd2wxMjcxICp3bCwgYm9vbCBjaGlwX2F3YWtlKTsKLXZvaWQgd2wxMjcxX2VscF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Ci0KLSNlbmRpZiAvKiBfX1dMMTI3MV9QU19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfcnguYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmVhMTMzYi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3J4LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxODUgKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdsMTI3MQotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgotICoKLSAqIENvbnRhY3Q6IEx1Y2lhbm8gQ29lbGhvIDxsdWNpYW5vLmNvZWxob0Bub2tpYS5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0gKiAwMjExMC0xMzAxIFVTQQotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvZ2ZwLmg+Ci0KLSNpbmNsdWRlICJ3bDEyNzEuaCIKLSNpbmNsdWRlICJ3bDEyNzFfYWN4LmgiCi0jaW5jbHVkZSAid2wxMjcxX3JlZy5oIgotI2luY2x1ZGUgIndsMTI3MV9yeC5oIgotI2luY2x1ZGUgIndsMTI3MV9pby5oIgotCi1zdGF0aWMgdTggd2wxMjcxX3J4X2dldF9tZW1fYmxvY2soc3RydWN0IHdsMTI3MV9md19zdGF0dXMgKnN0YXR1cywKLQkJCQkgIHUzMiBkcnZfcnhfY291bnRlcikKLXsKLQlyZXR1cm4gbGUzMl90b19jcHUoc3RhdHVzLT5yeF9wa3RfZGVzY3NbZHJ2X3J4X2NvdW50ZXJdKSAmCi0JCVJYX01FTV9CTE9DS19NQVNLOwotfQotCi1zdGF0aWMgdTMyIHdsMTI3MV9yeF9nZXRfYnVmX3NpemUoc3RydWN0IHdsMTI3MV9md19zdGF0dXMgKnN0YXR1cywKLQkJCQkgdTMyIGRydl9yeF9jb3VudGVyKQotewotCXJldHVybiAobGUzMl90b19jcHUoc3RhdHVzLT5yeF9wa3RfZGVzY3NbZHJ2X3J4X2NvdW50ZXJdKSAmCi0JCVJYX0JVRl9TSVpFX01BU0spID4+IFJYX0JVRl9TSVpFX1NISUZUX0RJVjsKLX0KLQotc3RhdGljIHZvaWQgd2wxMjcxX3J4X3N0YXR1cyhzdHJ1Y3Qgd2wxMjcxICp3bCwKLQkJCSAgICAgc3RydWN0IHdsMTI3MV9yeF9kZXNjcmlwdG9yICpkZXNjLAotCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzLAotCQkJICAgICB1OCBiZWFjb24pCi17Ci0JbWVtc2V0KHN0YXR1cywgMCwgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzKSk7Ci0KLQlzdGF0dXMtPmJhbmQgPSB3bC0+YmFuZDsKLQlzdGF0dXMtPnJhdGVfaWR4ID0gd2wxMjcxX3JhdGVfdG9faWR4KHdsLCBkZXNjLT5yYXRlKTsKLQotCXN0YXR1cy0+c2lnbmFsID0gZGVzYy0+cnNzaTsKLQotCS8qCi0JICogRklYTUU6IEluIHdsMTI1MSwgdGhlIFNOUiBzaG91bGQgYmUgZGl2aWRlZCBieSB0d28uICBJbiB3bDEyNzEgd2UKLQkgKiBuZWVkIHRvIGRpdmlkZSBieSB0d28gZm9yIG5vdywgYnV0IFRJIGhhcyBiZWVuIGRpc2N1c3NpbmcgYWJvdXQKLQkgKiBjaGFuZ2luZyBpdC4gIFRoaXMgbmVlZHMgdG8gYmUgcmVjaGVja2VkLgotCSAqLwotCXdsLT5ub2lzZSA9IGRlc2MtPnJzc2kgLSAoZGVzYy0+c25yID4+IDEpOwotCi0Jc3RhdHVzLT5mcmVxID0gaWVlZTgwMjExX2NoYW5uZWxfdG9fZnJlcXVlbmN5KGRlc2MtPmNoYW5uZWwpOwotCi0JaWYgKGRlc2MtPmZsYWdzICYgV0wxMjcxX1JYX0RFU0NfRU5DUllQVF9NQVNLKSB7Ci0JCXN0YXR1cy0+ZmxhZyB8PSBSWF9GTEFHX0lWX1NUUklQUEVEIHwgUlhfRkxBR19NTUlDX1NUUklQUEVEOwotCi0JCWlmIChsaWtlbHkoIShkZXNjLT5zdGF0dXMgJiBXTDEyNzFfUlhfREVTQ19ERUNSWVBUX0ZBSUwpKSkKLQkJCXN0YXR1cy0+ZmxhZyB8PSBSWF9GTEFHX0RFQ1JZUFRFRDsKLQkJaWYgKHVubGlrZWx5KGRlc2MtPnN0YXR1cyAmIFdMMTI3MV9SWF9ERVNDX01JQ19GQUlMKSkKLQkJCXN0YXR1cy0+ZmxhZyB8PSBSWF9GTEFHX01NSUNfRVJST1I7Ci0JfQotfQotCi1zdGF0aWMgaW50IHdsMTI3MV9yeF9oYW5kbGVfZGF0YShzdHJ1Y3Qgd2wxMjcxICp3bCwgdTggKmRhdGEsIHUzMiBsZW5ndGgpCi17Ci0Jc3RydWN0IHdsMTI3MV9yeF9kZXNjcmlwdG9yICpkZXNjOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0JdTE2ICpmYzsKLQl1OCAqYnVmOwotCXU4IGJlYWNvbiA9IDA7Ci0KLQkvKgotCSAqIEluIFBMVCBtb2RlIHdlIHNlZW0gdG8gZ2V0IGZyYW1lcyBhbmQgbWFjODAyMTEgd2FybnMgYWJvdXQgdGhlbSwKLQkgKiB3b3JrYXJvdW5kIHRoaXMgYnkgbm90IHJldHJpZXZpbmcgdGhlbSBhdCBhbGwuCi0JICovCi0JaWYgKHVubGlrZWx5KHdsLT5zdGF0ZSA9PSBXTDEyNzFfU1RBVEVfUExUKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlza2IgPSBfX2Rldl9hbGxvY19za2IobGVuZ3RoLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXNrYikgewotCQl3bDEyNzFfZXJyb3IoIkNvdWxkbid0IGFsbG9jYXRlIFJYIGZyYW1lIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCWJ1ZiA9IHNrYl9wdXQoc2tiLCBsZW5ndGgpOwotCW1lbWNweShidWYsIGRhdGEsIGxlbmd0aCk7Ci0KLQkvKiB0aGUgZGF0YSByZWFkIHN0YXJ0cyB3aXRoIHRoZSBkZXNjcmlwdG9yICovCi0JZGVzYyA9IChzdHJ1Y3Qgd2wxMjcxX3J4X2Rlc2NyaXB0b3IgKikgYnVmOwotCi0JLyogbm93IHdlIHB1bGwgdGhlIGRlc2NyaXB0b3Igb3V0IG9mIHRoZSBidWZmZXIgKi8KLQlza2JfcHVsbChza2IsIHNpemVvZigqZGVzYykpOwotCi0JZmMgPSAodTE2ICopc2tiLT5kYXRhOwotCWlmICgoKmZjICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpID09IElFRUU4MDIxMV9TVFlQRV9CRUFDT04pCi0JCWJlYWNvbiA9IDE7Ci0KLQl3bDEyNzFfcnhfc3RhdHVzKHdsLCBkZXNjLCBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKSwgYmVhY29uKTsKLQotCXdsMTI3MV9kZWJ1ZyhERUJVR19SWCwgInJ4IHNrYiAweCVwOiAlZCBCICVzIiwgc2tiLCBza2ItPmxlbiwKLQkJICAgICBiZWFjb24gPyAiYmVhY29uIiA6ICIiKTsKLQotCXNrYl90cmltKHNrYiwgc2tiLT5sZW4gLSBkZXNjLT5wYWRfbGVuKTsKLQotCWllZWU4MDIxMV9yeF9uaSh3bC0+aHcsIHNrYik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotdm9pZCB3bDEyNzFfcngoc3RydWN0IHdsMTI3MSAqd2wsIHN0cnVjdCB3bDEyNzFfZndfc3RhdHVzICpzdGF0dXMpCi17Ci0Jc3RydWN0IHdsMTI3MV9hY3hfbWVtX21hcCAqd2xfbWVtX21hcCA9IHdsLT50YXJnZXRfbWVtX21hcDsKLQl1MzIgYnVmX3NpemU7Ci0JdTMyIGZ3X3J4X2NvdW50ZXIgID0gc3RhdHVzLT5md19yeF9jb3VudGVyICYgTlVNX1JYX1BLVF9ERVNDX01PRF9NQVNLOwotCXUzMiBkcnZfcnhfY291bnRlciA9IHdsLT5yeF9jb3VudGVyICYgTlVNX1JYX1BLVF9ERVNDX01PRF9NQVNLOwotCXUzMiByeF9jb3VudGVyOwotCXUzMiBtZW1fYmxvY2s7Ci0JdTMyIHBrdF9sZW5ndGg7Ci0JdTMyIHBrdF9vZmZzZXQ7Ci0KLQl3aGlsZSAoZHJ2X3J4X2NvdW50ZXIgIT0gZndfcnhfY291bnRlcikgewotCQlidWZfc2l6ZSA9IDA7Ci0JCXJ4X2NvdW50ZXIgPSBkcnZfcnhfY291bnRlcjsKLQkJd2hpbGUgKHJ4X2NvdW50ZXIgIT0gZndfcnhfY291bnRlcikgewotCQkJcGt0X2xlbmd0aCA9IHdsMTI3MV9yeF9nZXRfYnVmX3NpemUoc3RhdHVzLCByeF9jb3VudGVyKTsKLQkJCWlmIChidWZfc2l6ZSArIHBrdF9sZW5ndGggPiBXTDEyNzFfQUdHUl9CVUZGRVJfU0laRSkKLQkJCQlicmVhazsKLQkJCWJ1Zl9zaXplICs9IHBrdF9sZW5ndGg7Ci0JCQlyeF9jb3VudGVyKys7Ci0JCQlyeF9jb3VudGVyICY9IE5VTV9SWF9QS1RfREVTQ19NT0RfTUFTSzsKLQkJfQotCi0JCWlmIChidWZfc2l6ZSA9PSAwKSB7Ci0JCQl3bDEyNzFfd2FybmluZygicmVjZWl2ZWQgZW1wdHkgZGF0YSIpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQkvKgotCQkgKiBDaG9vc2UgdGhlIGJsb2NrIHdlIHdhbnQgdG8gcmVhZAotCQkgKiBGb3IgYWdncmVnYXRlZCBwYWNrZXRzLCBvbmx5IHRoZSBmaXJzdCBtZW1vcnkgYmxvY2sgc2hvdWxkCi0JCSAqIGJlIHJldHJpZXZlZC4gVGhlIEZXIHRha2VzIGNhcmUgb2YgdGhlIHJlc3QuCi0JCSAqLwotCQltZW1fYmxvY2sgPSB3bDEyNzFfcnhfZ2V0X21lbV9ibG9jayhzdGF0dXMsIGRydl9yeF9jb3VudGVyKTsKLQkJd2wtPnJ4X21lbV9wb29sX2FkZHIuYWRkciA9IChtZW1fYmxvY2sgPDwgOCkgKwotCQkJbGUzMl90b19jcHUod2xfbWVtX21hcC0+cGFja2V0X21lbW9yeV9wb29sX3N0YXJ0KTsKLQkJd2wtPnJ4X21lbV9wb29sX2FkZHIuYWRkcl9leHRyYSA9Ci0JCQl3bC0+cnhfbWVtX3Bvb2xfYWRkci5hZGRyICsgNDsKLQkJd2wxMjcxX3dyaXRlKHdsLCBXTDEyNzFfU0xWX1JFR19EQVRBLCAmd2wtPnJ4X21lbV9wb29sX2FkZHIsCi0JCQkJc2l6ZW9mKHdsLT5yeF9tZW1fcG9vbF9hZGRyKSwgZmFsc2UpOwotCi0JCS8qIFJlYWQgYWxsIGF2YWlsYWJsZSBwYWNrZXRzIGF0IG9uY2UgKi8KLQkJd2wxMjcxX3JlYWQod2wsIFdMMTI3MV9TTFZfTUVNX0RBVEEsIHdsLT5hZ2dyX2J1ZiwKLQkJCQlidWZfc2l6ZSwgdHJ1ZSk7Ci0KLQkJLyogU3BsaXQgZGF0YSBpbnRvIHNlcGFyYXRlIHBhY2tldHMgKi8KLQkJcGt0X29mZnNldCA9IDA7Ci0JCXdoaWxlIChwa3Rfb2Zmc2V0IDwgYnVmX3NpemUpIHsKLQkJCXBrdF9sZW5ndGggPSB3bDEyNzFfcnhfZ2V0X2J1Zl9zaXplKHN0YXR1cywKLQkJCQkJZHJ2X3J4X2NvdW50ZXIpOwotCQkJaWYgKHdsMTI3MV9yeF9oYW5kbGVfZGF0YSh3bCwKLQkJCQkJd2wtPmFnZ3JfYnVmICsgcGt0X29mZnNldCwKLQkJCQkJcGt0X2xlbmd0aCkgPCAwKQotCQkJCWJyZWFrOwotCQkJd2wtPnJ4X2NvdW50ZXIrKzsKLQkJCWRydl9yeF9jb3VudGVyKys7Ci0JCQlkcnZfcnhfY291bnRlciAmPSBOVU1fUlhfUEtUX0RFU0NfTU9EX01BU0s7Ci0JCQlwa3Rfb2Zmc2V0ICs9IHBrdF9sZW5ndGg7Ci0JCX0KLQl9Ci0Jd2wxMjcxX3dyaXRlMzIod2wsIFJYX0RSSVZFUl9DT1VOVEVSX0FERFJFU1MsCi0JCQljcHVfdG9fbGUzMih3bC0+cnhfY291bnRlcikpOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9yeC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9yeC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxM2EyMzIzLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfcnguaAorKysgL2Rldi9udWxsCkBAIC0xLDEyMSArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMjcxCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk4LTIwMDkgVGV4YXMgSW5zdHJ1bWVudHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgotICoKLSAqIENvbnRhY3Q6IEx1Y2lhbm8gQ29lbGhvIDxsdWNpYW5vLmNvZWxob0Bub2tpYS5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0gKiAwMjExMC0xMzAxIFVTQQotICoKLSAqLwotCi0jaWZuZGVmIF9fV0wxMjcxX1JYX0hfXwotI2RlZmluZSBfX1dMMTI3MV9SWF9IX18KLQotI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgotCi0jZGVmaW5lIFdMMTI3MV9SWF9NQVhfUlNTSSAtMzAKLSNkZWZpbmUgV0wxMjcxX1JYX01JTl9SU1NJIC05NQotCi0jZGVmaW5lIFdMMTI3MV9SWF9BTElHTl9UTyA0Ci0jZGVmaW5lIFdMMTI3MV9SWF9BTElHTihsZW4pICgoKGxlbikgKyBXTDEyNzFfUlhfQUxJR05fVE8gLSAxKSAmIFwKLQkJCSAgICAgfihXTDEyNzFfUlhfQUxJR05fVE8gLSAxKSkKLQotI2RlZmluZSBTSE9SVF9QUkVBTUJMRV9CSVQgICBCSVQoMCkKLSNkZWZpbmUgT0ZETV9SQVRFX0JJVCAgICAgICAgQklUKDYpCi0jZGVmaW5lIFBCQ0NfUkFURV9CSVQgICAgICAgIEJJVCg3KQotCi0jZGVmaW5lIFBMQ1BfSEVBREVSX0xFTkdUSCA4Ci0jZGVmaW5lIFJYX0RFU0NfUEFDS0VUSURfU0hJRlQgMTEKLSNkZWZpbmUgUlhfTUFYX1BBQ0tFVF9JRCAzCi0KLSNkZWZpbmUgTlVNX1JYX1BLVF9ERVNDX01PRF9NQVNLICAgNwotCi0jZGVmaW5lIFJYX0RFU0NfVkFMSURfRkNTICAgICAgICAgMHgwMDAxCi0jZGVmaW5lIFJYX0RFU0NfTUFUQ0hfUlhBRERSMSAgICAgMHgwMDAyCi0jZGVmaW5lIFJYX0RFU0NfTUNBU1QgICAgICAgICAgICAgMHgwMDA0Ci0jZGVmaW5lIFJYX0RFU0NfU1RBSU5USU0gICAgICAgICAgMHgwMDA4Ci0jZGVmaW5lIFJYX0RFU0NfVklSVFVBTF9CTSAgICAgICAgMHgwMDEwCi0jZGVmaW5lIFJYX0RFU0NfQkNBU1QgICAgICAgICAgICAgMHgwMDIwCi0jZGVmaW5lIFJYX0RFU0NfTUFUQ0hfU1NJRCAgICAgICAgMHgwMDQwCi0jZGVmaW5lIFJYX0RFU0NfTUFUQ0hfQlNTSUQgICAgICAgMHgwMDgwCi0jZGVmaW5lIFJYX0RFU0NfRU5DUllQVElPTl9NQVNLICAgMHgwMzAwCi0jZGVmaW5lIFJYX0RFU0NfTUVBU1VSTUVOVCAgICAgICAgMHgwNDAwCi0jZGVmaW5lIFJYX0RFU0NfU0VRTlVNX01BU0sgICAgICAgMHgxODAwCi0jZGVmaW5lCVJYX0RFU0NfTUlDX0ZBSUwJICAweDIwMDAKLSNkZWZpbmUJUlhfREVTQ19ERUNSWVBUX0ZBSUwJICAweDQwMDAKLQotLyoKLSAqIFJYIERlc2NyaXB0b3IgZmxhZ3M6Ci0gKgotICogQml0cyAwLTEgLSBiYW5kCi0gKiBCaXQgIDIgICAtIFNUQkMKLSAqIEJpdCAgMyAgIC0gQS1NUERVCi0gKiBCaXQgIDQgICAtIEhUCi0gKiBCaXRzIDUtNyAtIGVuY3J5cHRpb24KLSAqLwotI2RlZmluZSBXTDEyNzFfUlhfREVTQ19CQU5EX01BU0sgICAgMHgwMwotI2RlZmluZSBXTDEyNzFfUlhfREVTQ19FTkNSWVBUX01BU0sgMHhFMAotCi0jZGVmaW5lIFdMMTI3MV9SWF9ERVNDX0JBTkRfQkcgICAgICAweDAwCi0jZGVmaW5lIFdMMTI3MV9SWF9ERVNDX0JBTkRfSiAgICAgICAweDAxCi0jZGVmaW5lIFdMMTI3MV9SWF9ERVNDX0JBTkRfQSAgICAgICAweDAyCi0KLSNkZWZpbmUgV0wxMjcxX1JYX0RFU0NfU1RCQyAgICAgICAgIEJJVCgyKQotI2RlZmluZSBXTDEyNzFfUlhfREVTQ19BX01QRFUgICAgICAgQklUKDMpCi0jZGVmaW5lIFdMMTI3MV9SWF9ERVNDX0hUICAgICAgICAgICBCSVQoNCkKLQotI2RlZmluZSBXTDEyNzFfUlhfREVTQ19FTkNSWVBUX1dFUCAgMHgyMAotI2RlZmluZSBXTDEyNzFfUlhfREVTQ19FTkNSWVBUX1RLSVAgMHg0MAotI2RlZmluZSBXTDEyNzFfUlhfREVTQ19FTkNSWVBUX0FFUyAgMHg2MAotI2RlZmluZSBXTDEyNzFfUlhfREVTQ19FTkNSWVBUX0dFTSAgMHg4MAotCi0vKgotICogUlggRGVzY3JpcHRvciBzdGF0dXMKLSAqCi0gKiBCaXRzIDAtMiAtIHN0YXR1cwotICogQml0cyAzLTcgLSByZXNlcnZlZAotICovCi0jZGVmaW5lIFdMMTI3MV9SWF9ERVNDX1NUQVRVU19NQVNLICAgICAgMHgwNwotCi0jZGVmaW5lIFdMMTI3MV9SWF9ERVNDX1NVQ0NFU1MgICAgICAgICAgMHgwMAotI2RlZmluZSBXTDEyNzFfUlhfREVTQ19ERUNSWVBUX0ZBSUwgICAgIDB4MDEKLSNkZWZpbmUgV0wxMjcxX1JYX0RFU0NfTUlDX0ZBSUwgICAgICAgICAweDAyCi0jZGVmaW5lIFdMMTI3MV9SWF9ERVNDX0RSSVZFUl9SWF9RX0ZBSUwgMHgwMwotCi0jZGVmaW5lIFJYX01FTV9CTE9DS19NQVNLICAgICAweEZGCi0jZGVmaW5lIFJYX0JVRl9TSVpFX01BU0sgICAgICAweEZGRjAwCi0jZGVmaW5lIFJYX0JVRl9TSVpFX1NISUZUX0RJViA2Ci0KLXN0cnVjdCB3bDEyNzFfcnhfZGVzY3JpcHRvciB7Ci0JX19sZTE2IGxlbmd0aDsKLQl1OCAgc3RhdHVzOwotCXU4ICBmbGFnczsKLQl1OCAgcmF0ZTsKLQl1OCAgY2hhbm5lbDsKLQlzOCAgcnNzaTsKLQl1OCAgc25yOwotCV9fbGUzMiB0aW1lc3RhbXA7Ci0JdTggIHBhY2tldF9jbGFzczsKLQl1OCAgcHJvY2Vzc19pZDsKLQl1OCAgcGFkX2xlbjsKLQl1OCAgcmVzZXJ2ZWQ7Ci19IF9fcGFja2VkOwotCi12b2lkIHdsMTI3MV9yeChzdHJ1Y3Qgd2wxMjcxICp3bCwgc3RydWN0IHdsMTI3MV9md19zdGF0dXMgKnN0YXR1cyk7Ci11OCB3bDEyNzFfcmF0ZV90b19pZHgoc3RydWN0IHdsMTI3MSAqd2wsIGludCByYXRlKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3NjYW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfc2Nhbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MDliYjQ3Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfc2Nhbi5jCisrKyAvZGV2L251bGwKQEAgLTEsMzA2ICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3bDEyNzEKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgotICoKLSAqIENvbnRhY3Q6IEx1Y2lhbm8gQ29lbGhvIDxsdWNpYW5vLmNvZWxob0Bub2tpYS5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0gKiAwMjExMC0xMzAxIFVTQQotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaWVlZTgwMjExLmg+Ci0KLSNpbmNsdWRlICJ3bDEyNzEuaCIKLSNpbmNsdWRlICJ3bDEyNzFfY21kLmgiCi0jaW5jbHVkZSAid2wxMjcxX3NjYW4uaCIKLSNpbmNsdWRlICJ3bDEyNzFfYWN4LmgiCi0KLXZvaWQgd2wxMjcxX3NjYW5fY29tcGxldGVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IGRlbGF5ZWRfd29yayAqZHdvcms7Ci0Jc3RydWN0IHdsMTI3MSAqd2w7Ci0KLQlkd29yayA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZGVsYXllZF93b3JrLCB3b3JrKTsKLQl3bCA9IGNvbnRhaW5lcl9vZihkd29yaywgc3RydWN0IHdsMTI3MSwgc2Nhbl9jb21wbGV0ZV93b3JrKTsKLQotCXdsMTI3MV9kZWJ1ZyhERUJVR19TQ0FOLCAiU2Nhbm5pbmcgY29tcGxldGUiKTsKLQotCW11dGV4X2xvY2soJndsLT5tdXRleCk7Ci0KLQlpZiAod2wtPnNjYW4uc3RhdGUgPT0gV0wxMjcxX1NDQU5fU1RBVEVfSURMRSkgewotCQltdXRleF91bmxvY2soJndsLT5tdXRleCk7Ci0JCXJldHVybjsKLQl9Ci0KLQl3bC0+c2Nhbi5zdGF0ZSA9IFdMMTI3MV9TQ0FOX1NUQVRFX0lETEU7Ci0Ja2ZyZWUod2wtPnNjYW4uc2Nhbm5lZF9jaCk7Ci0Jd2wtPnNjYW4uc2Nhbm5lZF9jaCA9IE5VTEw7Ci0JbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOwotCi0JaWVlZTgwMjExX3NjYW5fY29tcGxldGVkKHdsLT5odywgZmFsc2UpOwotCi0JaWYgKHdsLT5zY2FuLmZhaWxlZCkgewotCQl3bDEyNzFfaW5mbygiU2NhbiBjb21wbGV0ZWQgZHVlIHRvIGVycm9yLiIpOwotCQlpZWVlODAyMTFfcXVldWVfd29yayh3bC0+aHcsICZ3bC0+cmVjb3Zlcnlfd29yayk7Ci0JfQotfQotCi0KLXN0YXRpYyBpbnQgd2wxMjcxX2dldF9zY2FuX2NoYW5uZWxzKHN0cnVjdCB3bDEyNzEgKndsLAotCQkJCSAgICBzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXEsCi0JCQkJICAgIHN0cnVjdCBiYXNpY19zY2FuX2NoYW5uZWxfcGFyYW1zICpjaGFubmVscywKLQkJCQkgICAgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kLCBib29sIHBhc3NpdmUpCi17Ci0Jc3RydWN0IGNvbmZfc2Nhbl9zZXR0aW5ncyAqYyA9ICZ3bC0+Y29uZi5zY2FuOwotCWludCBpLCBqOwotCXUzMiBmbGFnczsKLQotCWZvciAoaSA9IDAsIGogPSAwOwotCSAgICAgaSA8IHJlcS0+bl9jaGFubmVscyAmJiBqIDwgV0wxMjcxX1NDQU5fTUFYX0NIQU5ORUxTOwotCSAgICAgaSsrKSB7Ci0KLQkJZmxhZ3MgPSByZXEtPmNoYW5uZWxzW2ldLT5mbGFnczsKLQotCQlpZiAoIXdsLT5zY2FuLnNjYW5uZWRfY2hbaV0gJiYKLQkJICAgICEoZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRCkgJiYKLQkJICAgICgoISEoZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9QQVNTSVZFX1NDQU4pKSA9PSBwYXNzaXZlKSAmJgotCQkgICAgKHJlcS0+Y2hhbm5lbHNbaV0tPmJhbmQgPT0gYmFuZCkpIHsKLQotCQkJd2wxMjcxX2RlYnVnKERFQlVHX1NDQU4sICJiYW5kICVkLCBjZW50ZXJfZnJlcSAlZCAiLAotCQkJCSAgICAgcmVxLT5jaGFubmVsc1tpXS0+YmFuZCwKLQkJCQkgICAgIHJlcS0+Y2hhbm5lbHNbaV0tPmNlbnRlcl9mcmVxKTsKLQkJCXdsMTI3MV9kZWJ1ZyhERUJVR19TQ0FOLCAiaHdfdmFsdWUgJWQsIGZsYWdzICVYIiwKLQkJCQkgICAgIHJlcS0+Y2hhbm5lbHNbaV0tPmh3X3ZhbHVlLAotCQkJCSAgICAgcmVxLT5jaGFubmVsc1tpXS0+ZmxhZ3MpOwotCQkJd2wxMjcxX2RlYnVnKERFQlVHX1NDQU4sCi0JCQkJICAgICAibWF4X2FudGVubmFfZ2FpbiAlZCwgbWF4X3Bvd2VyICVkIiwKLQkJCQkgICAgIHJlcS0+Y2hhbm5lbHNbaV0tPm1heF9hbnRlbm5hX2dhaW4sCi0JCQkJICAgICByZXEtPmNoYW5uZWxzW2ldLT5tYXhfcG93ZXIpOwotCQkJd2wxMjcxX2RlYnVnKERFQlVHX1NDQU4sICJiZWFjb25fZm91bmQgJWQiLAotCQkJCSAgICAgcmVxLT5jaGFubmVsc1tpXS0+YmVhY29uX2ZvdW5kKTsKLQotCQkJaWYgKCFwYXNzaXZlKSB7Ci0JCQkJY2hhbm5lbHNbal0ubWluX2R1cmF0aW9uID0KLQkJCQkJY3B1X3RvX2xlMzIoYy0+bWluX2R3ZWxsX3RpbWVfYWN0aXZlKTsKLQkJCQljaGFubmVsc1tqXS5tYXhfZHVyYXRpb24gPQotCQkJCQljcHVfdG9fbGUzMihjLT5tYXhfZHdlbGxfdGltZV9hY3RpdmUpOwotCQkJfSBlbHNlIHsKLQkJCQljaGFubmVsc1tqXS5taW5fZHVyYXRpb24gPQotCQkJCQljcHVfdG9fbGUzMihjLT5taW5fZHdlbGxfdGltZV9wYXNzaXZlKTsKLQkJCQljaGFubmVsc1tqXS5tYXhfZHVyYXRpb24gPQotCQkJCQljcHVfdG9fbGUzMihjLT5tYXhfZHdlbGxfdGltZV9wYXNzaXZlKTsKLQkJCX0KLQkJCWNoYW5uZWxzW2pdLmVhcmx5X3Rlcm1pbmF0aW9uID0gMDsKLQkJCWNoYW5uZWxzW2pdLnR4X3Bvd2VyX2F0dCA9IHJlcS0+Y2hhbm5lbHNbaV0tPm1heF9wb3dlcjsKLQkJCWNoYW5uZWxzW2pdLmNoYW5uZWwgPSByZXEtPmNoYW5uZWxzW2ldLT5od192YWx1ZTsKLQotCQkJbWVtc2V0KCZjaGFubmVsc1tqXS5ic3NpZF9sc2IsIDB4ZmYsIDQpOwotCQkJbWVtc2V0KCZjaGFubmVsc1tqXS5ic3NpZF9tc2IsIDB4ZmYsIDIpOwotCi0JCQkvKiBNYXJrIHRoZSBjaGFubmVscyB3ZSBhbHJlYWR5IHVzZWQgKi8KLQkJCXdsLT5zY2FuLnNjYW5uZWRfY2hbaV0gPSB0cnVlOwotCi0JCQlqKys7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gajsKLX0KLQotI2RlZmluZSBXTDEyNzFfTk9USElOR19UT19TQ0FOIDEKLQotc3RhdGljIGludCB3bDEyNzFfc2Nhbl9zZW5kKHN0cnVjdCB3bDEyNzEgKndsLCBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQsCi0JCQkgICAgIGJvb2wgcGFzc2l2ZSwgdTMyIGJhc2ljX3JhdGUpCi17Ci0Jc3RydWN0IHdsMTI3MV9jbWRfc2NhbiAqY21kOwotCXN0cnVjdCB3bDEyNzFfY21kX3RyaWdnZXJfc2Nhbl90byAqdHJpZ2dlcjsKLQlpbnQgcmV0OwotCXUxNiBzY2FuX29wdGlvbnMgPSAwOwotCi0JY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOwotCXRyaWdnZXIgPSBremFsbG9jKHNpemVvZigqdHJpZ2dlciksIEdGUF9LRVJORUwpOwotCWlmICghY21kIHx8ICF0cmlnZ2VyKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qIFdlIGFsd2F5cyB1c2UgaGlnaCBwcmlvcml0eSBzY2FucyAqLwotCXNjYW5fb3B0aW9ucyA9IFdMMTI3MV9TQ0FOX09QVF9QUklPUklUWV9ISUdIOwotCi0JLyogTm8gU1NJRHMgbWVhbnMgdGhhdCB3ZSBoYXZlIGEgZm9yY2VkIHBhc3NpdmUgc2NhbiAqLwotCWlmIChwYXNzaXZlIHx8IHdsLT5zY2FuLnJlcS0+bl9zc2lkcyA9PSAwKQotCQlzY2FuX29wdGlvbnMgfD0gV0wxMjcxX1NDQU5fT1BUX1BBU1NJVkU7Ci0KLQljbWQtPnBhcmFtcy5zY2FuX29wdGlvbnMgPSBjcHVfdG9fbGUxNihzY2FuX29wdGlvbnMpOwotCi0JY21kLT5wYXJhbXMubl9jaCA9IHdsMTI3MV9nZXRfc2Nhbl9jaGFubmVscyh3bCwgd2wtPnNjYW4ucmVxLAotCQkJCQkJICAgIGNtZC0+Y2hhbm5lbHMsCi0JCQkJCQkgICAgYmFuZCwgcGFzc2l2ZSk7Ci0JaWYgKGNtZC0+cGFyYW1zLm5fY2ggPT0gMCkgewotCQlyZXQgPSBXTDEyNzFfTk9USElOR19UT19TQ0FOOwotCQlnb3RvIG91dDsKLQl9Ci0KLQljbWQtPnBhcmFtcy50eF9yYXRlID0gY3B1X3RvX2xlMzIoYmFzaWNfcmF0ZSk7Ci0JY21kLT5wYXJhbXMucnhfY29uZmlnX29wdGlvbnMgPSBjcHVfdG9fbGUzMihDRkdfUlhfQUxMX0dPT0QpOwotCWNtZC0+cGFyYW1zLnJ4X2ZpbHRlcl9vcHRpb25zID0KLQkJY3B1X3RvX2xlMzIoQ0ZHX1JYX1BSU1BfRU4gfCBDRkdfUlhfTUdNVF9FTiB8IENGR19SWF9CQ05fRU4pOwotCi0JY21kLT5wYXJhbXMubl9wcm9iZV9yZXFzID0gd2wtPmNvbmYuc2Nhbi5udW1fcHJvYmVfcmVxczsKLQljbWQtPnBhcmFtcy50eF9yYXRlID0gY3B1X3RvX2xlMzIoYmFzaWNfcmF0ZSk7Ci0JY21kLT5wYXJhbXMudGlkX3RyaWdnZXIgPSAwOwotCWNtZC0+cGFyYW1zLnNjYW5fdGFnID0gV0wxMjcxX1NDQU5fREVGQVVMVF9UQUc7Ci0KLQlpZiAoYmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haKQotCQljbWQtPnBhcmFtcy5iYW5kID0gV0wxMjcxX1NDQU5fQkFORF8yXzRfR0haOwotCWVsc2UKLQkJY21kLT5wYXJhbXMuYmFuZCA9IFdMMTI3MV9TQ0FOX0JBTkRfNV9HSFo7Ci0KLQlpZiAod2wtPnNjYW4uc3NpZF9sZW4gJiYgd2wtPnNjYW4uc3NpZCkgewotCQljbWQtPnBhcmFtcy5zc2lkX2xlbiA9IHdsLT5zY2FuLnNzaWRfbGVuOwotCQltZW1jcHkoY21kLT5wYXJhbXMuc3NpZCwgd2wtPnNjYW4uc3NpZCwgd2wtPnNjYW4uc3NpZF9sZW4pOwotCX0KLQotCXJldCA9IHdsMTI3MV9jbWRfYnVpbGRfcHJvYmVfcmVxKHdsLCB3bC0+c2Nhbi5zc2lkLCB3bC0+c2Nhbi5zc2lkX2xlbiwKLQkJCQkJIHdsLT5zY2FuLnJlcS0+aWUsIHdsLT5zY2FuLnJlcS0+aWVfbGVuLAotCQkJCQkgYmFuZCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJd2wxMjcxX2Vycm9yKCJQUk9CRSByZXF1ZXN0IHRlbXBsYXRlIGZhaWxlZCIpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQkvKiBkaXNhYmxlIHRoZSB0aW1lb3V0ICovCi0JdHJpZ2dlci0+dGltZW91dCA9IDA7Ci0JcmV0ID0gd2wxMjcxX2NtZF9zZW5kKHdsLCBDTURfVFJJR0dFUl9TQ0FOX1RPLCB0cmlnZ2VyLAotCQkJICAgICAgc2l6ZW9mKCp0cmlnZ2VyKSwgMCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJd2wxMjcxX2Vycm9yKCJ0cmlnZ2VyIHNjYW4gdG8gZmFpbGVkIGZvciBodyBzY2FuIik7Ci0JCWdvdG8gb3V0OwotCX0KLQotCXdsMTI3MV9kdW1wKERFQlVHX1NDQU4sICJTQ0FOOiAiLCBjbWQsIHNpemVvZigqY21kKSk7Ci0KLQlyZXQgPSB3bDEyNzFfY21kX3NlbmQod2wsIENNRF9TQ0FOLCBjbWQsIHNpemVvZigqY21kKSwgMCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJd2wxMjcxX2Vycm9yKCJTQ0FOIGZhaWxlZCIpOwotCQlnb3RvIG91dDsKLQl9Ci0KLW91dDoKLQlrZnJlZShjbWQpOwotCWtmcmVlKHRyaWdnZXIpOwotCXJldHVybiByZXQ7Ci19Ci0KLXZvaWQgd2wxMjcxX3NjYW5fc3RtKHN0cnVjdCB3bDEyNzEgKndsKQotewotCWludCByZXQgPSAwOwotCi0Jc3dpdGNoICh3bC0+c2Nhbi5zdGF0ZSkgewotCWNhc2UgV0wxMjcxX1NDQU5fU1RBVEVfSURMRToKLQkJYnJlYWs7Ci0KLQljYXNlIFdMMTI3MV9TQ0FOX1NUQVRFXzJHSFpfQUNUSVZFOgotCQlyZXQgPSB3bDEyNzFfc2Nhbl9zZW5kKHdsLCBJRUVFODAyMTFfQkFORF8yR0haLCBmYWxzZSwKLQkJCQkgICAgICAgd2wtPmNvbmYudHguYmFzaWNfcmF0ZSk7Ci0JCWlmIChyZXQgPT0gV0wxMjcxX05PVEhJTkdfVE9fU0NBTikgewotCQkJd2wtPnNjYW4uc3RhdGUgPSBXTDEyNzFfU0NBTl9TVEFURV8yR0haX1BBU1NJVkU7Ci0JCQl3bDEyNzFfc2Nhbl9zdG0od2wpOwotCQl9Ci0KLQkJYnJlYWs7Ci0KLQljYXNlIFdMMTI3MV9TQ0FOX1NUQVRFXzJHSFpfUEFTU0lWRToKLQkJcmV0ID0gd2wxMjcxX3NjYW5fc2VuZCh3bCwgSUVFRTgwMjExX0JBTkRfMkdIWiwgdHJ1ZSwKLQkJCQkgICAgICAgd2wtPmNvbmYudHguYmFzaWNfcmF0ZSk7Ci0JCWlmIChyZXQgPT0gV0wxMjcxX05PVEhJTkdfVE9fU0NBTikgewotCQkJaWYgKHdsLT5lbmFibGVfMTFhKQotCQkJCXdsLT5zY2FuLnN0YXRlID0gV0wxMjcxX1NDQU5fU1RBVEVfNUdIWl9BQ1RJVkU7Ci0JCQllbHNlCi0JCQkJd2wtPnNjYW4uc3RhdGUgPSBXTDEyNzFfU0NBTl9TVEFURV9ET05FOwotCQkJd2wxMjcxX3NjYW5fc3RtKHdsKTsKLQkJfQotCi0JCWJyZWFrOwotCi0JY2FzZSBXTDEyNzFfU0NBTl9TVEFURV81R0haX0FDVElWRToKLQkJcmV0ID0gd2wxMjcxX3NjYW5fc2VuZCh3bCwgSUVFRTgwMjExX0JBTkRfNUdIWiwgZmFsc2UsCi0JCQkJICAgICAgIHdsLT5jb25mLnR4LmJhc2ljX3JhdGVfNSk7Ci0JCWlmIChyZXQgPT0gV0wxMjcxX05PVEhJTkdfVE9fU0NBTikgewotCQkJd2wtPnNjYW4uc3RhdGUgPSBXTDEyNzFfU0NBTl9TVEFURV81R0haX1BBU1NJVkU7Ci0JCQl3bDEyNzFfc2Nhbl9zdG0od2wpOwotCQl9Ci0KLQkJYnJlYWs7Ci0KLQljYXNlIFdMMTI3MV9TQ0FOX1NUQVRFXzVHSFpfUEFTU0lWRToKLQkJcmV0ID0gd2wxMjcxX3NjYW5fc2VuZCh3bCwgSUVFRTgwMjExX0JBTkRfNUdIWiwgdHJ1ZSwKLQkJCQkgICAgICAgd2wtPmNvbmYudHguYmFzaWNfcmF0ZV81KTsKLQkJaWYgKHJldCA9PSBXTDEyNzFfTk9USElOR19UT19TQ0FOKSB7Ci0JCQl3bC0+c2Nhbi5zdGF0ZSA9IFdMMTI3MV9TQ0FOX1NUQVRFX0RPTkU7Ci0JCQl3bDEyNzFfc2Nhbl9zdG0od2wpOwotCQl9Ci0KLQkJYnJlYWs7Ci0KLQljYXNlIFdMMTI3MV9TQ0FOX1NUQVRFX0RPTkU6Ci0JCXdsLT5zY2FuLmZhaWxlZCA9IGZhbHNlOwotCQljYW5jZWxfZGVsYXllZF93b3JrKCZ3bC0+c2Nhbl9jb21wbGV0ZV93b3JrKTsKLQkJaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayh3bC0+aHcsICZ3bC0+c2Nhbl9jb21wbGV0ZV93b3JrLAotCQkJCQkgICAgIG1zZWNzX3RvX2ppZmZpZXMoMCkpOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCXdsMTI3MV9lcnJvcigiaW52YWxpZCBzY2FuIHN0YXRlIik7Ci0JCWJyZWFrOwotCX0KLQotCWlmIChyZXQgPCAwKSB7Ci0JCWNhbmNlbF9kZWxheWVkX3dvcmsoJndsLT5zY2FuX2NvbXBsZXRlX3dvcmspOwotCQlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKHdsLT5odywgJndsLT5zY2FuX2NvbXBsZXRlX3dvcmssCi0JCQkJCSAgICAgbXNlY3NfdG9famlmZmllcygwKSk7Ci0JfQotfQotCi1pbnQgd2wxMjcxX3NjYW4oc3RydWN0IHdsMTI3MSAqd2wsIGNvbnN0IHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4sCi0JCXN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcSkKLXsKLQlpZiAod2wtPnNjYW4uc3RhdGUgIT0gV0wxMjcxX1NDQU5fU1RBVEVfSURMRSkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCXdsLT5zY2FuLnN0YXRlID0gV0wxMjcxX1NDQU5fU1RBVEVfMkdIWl9BQ1RJVkU7Ci0KLQlpZiAoc3NpZF9sZW4gJiYgc3NpZCkgewotCQl3bC0+c2Nhbi5zc2lkX2xlbiA9IHNzaWRfbGVuOwotCQltZW1jcHkod2wtPnNjYW4uc3NpZCwgc3NpZCwgc3NpZF9sZW4pOwotCX0gZWxzZSB7Ci0JCXdsLT5zY2FuLnNzaWRfbGVuID0gMDsKLQl9Ci0KLQl3bC0+c2Nhbi5yZXEgPSByZXE7Ci0KLQl3bC0+c2Nhbi5zY2FubmVkX2NoID0ga2NhbGxvYyhyZXEtPm5fY2hhbm5lbHMsCi0JCQkJICAgICAgc2l6ZW9mKCp3bC0+c2Nhbi5zY2FubmVkX2NoKSwKLQkJCQkgICAgICBHRlBfS0VSTkVMKTsKLQkvKiB3ZSBhc3N1bWUgZmFpbHVyZSBzbyB0aGF0IHRpbWVvdXQgc2NlbmFyaW9zIGFyZSBoYW5kbGVkIGNvcnJlY3RseSAqLwotCXdsLT5zY2FuLmZhaWxlZCA9IHRydWU7Ci0JaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayh3bC0+aHcsICZ3bC0+c2Nhbl9jb21wbGV0ZV93b3JrLAotCQkJCSAgICAgbXNlY3NfdG9famlmZmllcyhXTDEyNzFfU0NBTl9USU1FT1VUKSk7Ci0KLQl3bDEyNzFfc2Nhbl9zdG0od2wpOwotCi0JcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3NjYW4uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfc2Nhbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZDU3MTI3Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfc2Nhbi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTA5ICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3bDEyNzEKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgotICoKLSAqIENvbnRhY3Q6IEx1Y2lhbm8gQ29lbGhvIDxsdWNpYW5vLmNvZWxob0Bub2tpYS5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0gKiAwMjExMC0xMzAxIFVTQQotICoKLSAqLwotCi0jaWZuZGVmIF9fV0wxMjcxX1NDQU5fSF9fCi0jZGVmaW5lIF9fV0wxMjcxX1NDQU5fSF9fCi0KLSNpbmNsdWRlICJ3bDEyNzEuaCIKLQotaW50IHdsMTI3MV9zY2FuKHN0cnVjdCB3bDEyNzEgKndsLCBjb25zdCB1OCAqc3NpZCwgc2l6ZV90IHNzaWRfbGVuLAotCQlzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXEpOwotaW50IHdsMTI3MV9zY2FuX2J1aWxkX3Byb2JlX3JlcShzdHJ1Y3Qgd2wxMjcxICp3bCwKLQkJCQljb25zdCB1OCAqc3NpZCwgc2l6ZV90IHNzaWRfbGVuLAotCQkJCWNvbnN0IHU4ICppZSwgc2l6ZV90IGllX2xlbiwgdTggYmFuZCk7Ci12b2lkIHdsMTI3MV9zY2FuX3N0bShzdHJ1Y3Qgd2wxMjcxICp3bCk7Ci12b2lkIHdsMTI3MV9zY2FuX2NvbXBsZXRlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKLQotI2RlZmluZSBXTDEyNzFfU0NBTl9NQVhfQ0hBTk5FTFMgICAgICAgMjQKLSNkZWZpbmUgV0wxMjcxX1NDQU5fREVGQVVMVF9UQUcgICAgICAgIDEKLSNkZWZpbmUgV0wxMjcxX1NDQU5fQ1VSUkVOVF9UWF9QV1IgICAgIDAKLSNkZWZpbmUgV0wxMjcxX1NDQU5fT1BUX0FDVElWRSAgICAgICAgIDAKLSNkZWZpbmUgV0wxMjcxX1NDQU5fT1BUX1BBU1NJVkUJICAgICAgIDEKLSNkZWZpbmUgV0wxMjcxX1NDQU5fT1BUX1BSSU9SSVRZX0hJR0ggIDQKLSNkZWZpbmUgV0wxMjcxX1NDQU5fQkFORF8yXzRfR0haIDAKLSNkZWZpbmUgV0wxMjcxX1NDQU5fQkFORF81X0dIWiAxCi0KLSNkZWZpbmUgV0wxMjcxX1NDQU5fVElNRU9VVCAgICAxMDAwMCAvKiBtc2VjICovCi0KLWVudW0gewotCVdMMTI3MV9TQ0FOX1NUQVRFX0lETEUsCi0JV0wxMjcxX1NDQU5fU1RBVEVfMkdIWl9BQ1RJVkUsCi0JV0wxMjcxX1NDQU5fU1RBVEVfMkdIWl9QQVNTSVZFLAotCVdMMTI3MV9TQ0FOX1NUQVRFXzVHSFpfQUNUSVZFLAotCVdMMTI3MV9TQ0FOX1NUQVRFXzVHSFpfUEFTU0lWRSwKLQlXTDEyNzFfU0NBTl9TVEFURV9ET05FCi19OwotCi1zdHJ1Y3QgYmFzaWNfc2Nhbl9wYXJhbXMgewotCV9fbGUzMiByeF9jb25maWdfb3B0aW9uczsKLQlfX2xlMzIgcnhfZmlsdGVyX29wdGlvbnM7Ci0JLyogU2NhbiBvcHRpb24gZmxhZ3MgKFdMMTI3MV9TQ0FOX09QVF8qKSAqLwotCV9fbGUxNiBzY2FuX29wdGlvbnM7Ci0JLyogTnVtYmVyIG9mIHNjYW4gY2hhbm5lbHMgaW4gdGhlIGxpc3QgKG1heGltdW0gMzApICovCi0JdTggbl9jaDsKLQkvKiBUaGlzIGZpZWxkIGluZGljYXRlcyB0aGUgbnVtYmVyIG9mIHByb2JlIHJlcXVlc3RzIHRvIHNlbmQKLQkgICBwZXIgY2hhbm5lbCBmb3IgYW4gYWN0aXZlIHNjYW4gKi8KLQl1OCBuX3Byb2JlX3JlcXM7Ci0JLyogUmF0ZSBiaXQgZmllbGQgZm9yIHNlbmRpbmcgdGhlIHByb2JlcyAqLwotCV9fbGUzMiB0eF9yYXRlOwotCXU4IHRpZF90cmlnZ2VyOwotCXU4IHNzaWRfbGVuOwotCS8qIGluIG9yZGVyIHRvIGFsaWduICovCi0JdTggcGFkZGluZzFbMl07Ci0JdTggc3NpZFtJV19FU1NJRF9NQVhfU0laRV07Ci0JLyogQmFuZCB0byBzY2FuICovCi0JdTggYmFuZDsKLQl1OCB1c2Vfc3NpZF9saXN0OwotCXU4IHNjYW5fdGFnOwotCXU4IHBhZGRpbmcyOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGJhc2ljX3NjYW5fY2hhbm5lbF9wYXJhbXMgewotCS8qIER1cmF0aW9uIGluIFRVIHRvIHdhaXQgZm9yIGZyYW1lcyBvbiBhIGNoYW5uZWwgZm9yIGFjdGl2ZSBzY2FuICovCi0JX19sZTMyIG1pbl9kdXJhdGlvbjsKLQlfX2xlMzIgbWF4X2R1cmF0aW9uOwotCV9fbGUzMiBic3NpZF9sc2I7Ci0JX19sZTE2IGJzc2lkX21zYjsKLQl1OCBlYXJseV90ZXJtaW5hdGlvbjsKLQl1OCB0eF9wb3dlcl9hdHQ7Ci0JdTggY2hhbm5lbDsKLQkvKiBGVyBpbnRlcm5hbCB1c2Ugb25seSEgKi8KLQl1OCBkZnNfY2FuZGlkYXRlOwotCXU4IGFjdGl2aXR5X2RldGVjdGVkOwotCXU4IHBhZDsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCB3bDEyNzFfY21kX3NjYW4gewotCXN0cnVjdCB3bDEyNzFfY21kX2hlYWRlciBoZWFkZXI7Ci0KLQlzdHJ1Y3QgYmFzaWNfc2Nhbl9wYXJhbXMgcGFyYW1zOwotCXN0cnVjdCBiYXNpY19zY2FuX2NoYW5uZWxfcGFyYW1zIGNoYW5uZWxzW1dMMTI3MV9TQ0FOX01BWF9DSEFOTkVMU107Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3Qgd2wxMjcxX2NtZF90cmlnZ2VyX3NjYW5fdG8gewotCXN0cnVjdCB3bDEyNzFfY21kX2hlYWRlciBoZWFkZXI7Ci0KLQlfX2xlMzIgdGltZW91dDsKLX0gX19wYWNrZWQ7Ci0KLSNlbmRpZiAvKiBfX1dMMTI3MV9TQ0FOX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9zZGlvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3NkaW8uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzg0ZWYzNC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3NkaW8uYworKysgL2Rldi9udWxsCkBAIC0xLDM0NyArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMjcxCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgTm9raWEgQ29ycG9yYXRpb24KLSAqCi0gKiBDb250YWN0OiBMdWNpYW5vIENvZWxobyA8bHVjaWFuby5jb2VsaG9Abm9raWEuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQotICogMDIxMTAtMTMwMSBVU0EKLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2NyYzcuaD4KLSNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+Ci0jaW5jbHVkZSA8bGludXgvbW1jL3NkaW9fZnVuYy5oPgotI2luY2x1ZGUgPGxpbnV4L21tYy9zZGlvX2lkcy5oPgotI2luY2x1ZGUgPGxpbnV4L21tYy9jYXJkLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L3dsMTJ4eC5oPgotI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KLQotI2luY2x1ZGUgIndsMTI3MS5oIgotI2luY2x1ZGUgIndsMTJ4eF84MDIxMS5oIgotI2luY2x1ZGUgIndsMTI3MV9pby5oIgotCi0jaWZuZGVmIFNESU9fVkVORE9SX0lEX1RJCi0jZGVmaW5lIFNESU9fVkVORE9SX0lEX1RJCQkweDAwOTcKLSNlbmRpZgotCi0jaWZuZGVmIFNESU9fREVWSUNFX0lEX1RJX1dMMTI3MQotI2RlZmluZSBTRElPX0RFVklDRV9JRF9USV9XTDEyNzEJMHg0MDc2Ci0jZW5kaWYKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBzZGlvX2RldmljZV9pZCB3bDEyNzFfZGV2aWNlc1tdID0gewotCXsgU0RJT19ERVZJQ0UoU0RJT19WRU5ET1JfSURfVEksIFNESU9fREVWSUNFX0lEX1RJX1dMMTI3MSkgfSwKLQl7fQotfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUoc2Rpbywgd2wxMjcxX2RldmljZXMpOwotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBzZGlvX2Z1bmMgKndsX3RvX2Z1bmMoc3RydWN0IHdsMTI3MSAqd2wpCi17Ci0JcmV0dXJuIHdsLT5pZl9wcml2OwotfQotCi1zdGF0aWMgc3RydWN0IGRldmljZSAqd2wxMjcxX3NkaW9fd2xfdG9fZGV2KHN0cnVjdCB3bDEyNzEgKndsKQotewotCXJldHVybiAmKHdsX3RvX2Z1bmMod2wpLT5kZXYpOwotfQotCi1zdGF0aWMgaXJxcmV0dXJuX3Qgd2wxMjcxX2lycShpbnQgaXJxLCB2b2lkICpjb29raWUpCi17Ci0Jc3RydWN0IHdsMTI3MSAqd2wgPSBjb29raWU7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXdsMTI3MV9kZWJ1ZyhERUJVR19JUlEsICJJUlEiKTsKLQotCS8qIGNvbXBsZXRlIHRoZSBFTFAgY29tcGxldGlvbiAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZ3bC0+d2xfbG9jaywgZmxhZ3MpOwotCWlmICh3bC0+ZWxwX2NvbXBsKSB7Ci0JCWNvbXBsZXRlKHdsLT5lbHBfY29tcGwpOwotCQl3bC0+ZWxwX2NvbXBsID0gTlVMTDsKLQl9Ci0KLQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoV0wxMjcxX0ZMQUdfSVJRX1JVTk5JTkcsICZ3bC0+ZmxhZ3MpKQotCQlpZWVlODAyMTFfcXVldWVfd29yayh3bC0+aHcsICZ3bC0+aXJxX3dvcmspOwotCXNldF9iaXQoV0wxMjcxX0ZMQUdfSVJRX1BFTkRJTkcsICZ3bC0+ZmxhZ3MpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndsLT53bF9sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHdsMTI3MV9zZGlvX2Rpc2FibGVfaW50ZXJydXB0cyhzdHJ1Y3Qgd2wxMjcxICp3bCkKLXsKLQlkaXNhYmxlX2lycSh3bC0+aXJxKTsKLX0KLQotc3RhdGljIHZvaWQgd2wxMjcxX3NkaW9fZW5hYmxlX2ludGVycnVwdHMoc3RydWN0IHdsMTI3MSAqd2wpCi17Ci0JZW5hYmxlX2lycSh3bC0+aXJxKTsKLX0KLQotc3RhdGljIHZvaWQgd2wxMjcxX3NkaW9fcmVzZXQoc3RydWN0IHdsMTI3MSAqd2wpCi17Ci19Ci0KLXN0YXRpYyB2b2lkIHdsMTI3MV9zZGlvX2luaXQoc3RydWN0IHdsMTI3MSAqd2wpCi17Ci19Ci0KLXN0YXRpYyB2b2lkIHdsMTI3MV9zZGlvX3Jhd19yZWFkKHN0cnVjdCB3bDEyNzEgKndsLCBpbnQgYWRkciwgdm9pZCAqYnVmLAotCQkJCSBzaXplX3QgbGVuLCBib29sIGZpeGVkKQotewotCWludCByZXQ7Ci0Jc3RydWN0IHNkaW9fZnVuYyAqZnVuYyA9IHdsX3RvX2Z1bmMod2wpOwotCi0Jc2Rpb19jbGFpbV9ob3N0KGZ1bmMpOwotCi0JaWYgKHVubGlrZWx5KGFkZHIgPT0gSFdfQUNDRVNTX0VMUF9DVFJMX1JFR19BRERSKSkgewotCQkoKHU4ICopYnVmKVswXSA9IHNkaW9fZjBfcmVhZGIoZnVuYywgYWRkciwgJnJldCk7Ci0JCXdsMTI3MV9kZWJ1ZyhERUJVR19TRElPLCAic2RpbyByZWFkIDUyIGFkZHIgMHgleCwgYnl0ZSAweCUwMngiLAotCQkJICAgICBhZGRyLCAoKHU4ICopYnVmKVswXSk7Ci0JfSBlbHNlIHsKLQkJaWYgKGZpeGVkKQotCQkJcmV0ID0gc2Rpb19yZWFkc2IoZnVuYywgYnVmLCBhZGRyLCBsZW4pOwotCQllbHNlCi0JCQlyZXQgPSBzZGlvX21lbWNweV9mcm9taW8oZnVuYywgYnVmLCBhZGRyLCBsZW4pOwotCi0JCXdsMTI3MV9kZWJ1ZyhERUJVR19TRElPLCAic2RpbyByZWFkIDUzIGFkZHIgMHgleCwgJXp1IGJ5dGVzIiwKLQkJCSAgICAgYWRkciwgbGVuKTsKLQkJd2wxMjcxX2R1bXBfYXNjaWkoREVCVUdfU0RJTywgImRhdGE6ICIsIGJ1ZiwgbGVuKTsKLQl9Ci0KLQlzZGlvX3JlbGVhc2VfaG9zdChmdW5jKTsKLQotCWlmIChyZXQpCi0JCXdsMTI3MV9lcnJvcigic2RpbyByZWFkIGZhaWxlZCAoJWQpIiwgcmV0KTsKLX0KLQotc3RhdGljIHZvaWQgd2wxMjcxX3NkaW9fcmF3X3dyaXRlKHN0cnVjdCB3bDEyNzEgKndsLCBpbnQgYWRkciwgdm9pZCAqYnVmLAotCQkJCSAgc2l6ZV90IGxlbiwgYm9vbCBmaXhlZCkKLXsKLQlpbnQgcmV0OwotCXN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMgPSB3bF90b19mdW5jKHdsKTsKLQotCXNkaW9fY2xhaW1faG9zdChmdW5jKTsKLQotCWlmICh1bmxpa2VseShhZGRyID09IEhXX0FDQ0VTU19FTFBfQ1RSTF9SRUdfQUREUikpIHsKLQkJc2Rpb19mMF93cml0ZWIoZnVuYywgKCh1OCAqKWJ1ZilbMF0sIGFkZHIsICZyZXQpOwotCQl3bDEyNzFfZGVidWcoREVCVUdfU0RJTywgInNkaW8gd3JpdGUgNTIgYWRkciAweCV4LCBieXRlIDB4JTAyeCIsCi0JCQkgICAgIGFkZHIsICgodTggKilidWYpWzBdKTsKLQl9IGVsc2UgewotCQl3bDEyNzFfZGVidWcoREVCVUdfU0RJTywgInNkaW8gd3JpdGUgNTMgYWRkciAweCV4LCAlenUgYnl0ZXMiLAotCQkJICAgICBhZGRyLCBsZW4pOwotCQl3bDEyNzFfZHVtcF9hc2NpaShERUJVR19TRElPLCAiZGF0YTogIiwgYnVmLCBsZW4pOwotCi0JCWlmIChmaXhlZCkKLQkJCXJldCA9IHNkaW9fd3JpdGVzYihmdW5jLCBhZGRyLCBidWYsIGxlbik7Ci0JCWVsc2UKLQkJCXJldCA9IHNkaW9fbWVtY3B5X3RvaW8oZnVuYywgYWRkciwgYnVmLCBsZW4pOwotCX0KLQotCXNkaW9fcmVsZWFzZV9ob3N0KGZ1bmMpOwotCi0JaWYgKHJldCkKLQkJd2wxMjcxX2Vycm9yKCJzZGlvIHdyaXRlIGZhaWxlZCAoJWQpIiwgcmV0KTsKLX0KLQotc3RhdGljIGludCB3bDEyNzFfc2Rpb19wb3dlcl9vbihzdHJ1Y3Qgd2wxMjcxICp3bCkKLXsKLQlzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jID0gd2xfdG9fZnVuYyh3bCk7Ci0JaW50IHJldDsKLQotCS8qIFBvd2VyIHVwIHRoZSBjYXJkICovCi0JcmV0ID0gcG1fcnVudGltZV9nZXRfc3luYygmZnVuYy0+ZGV2KTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBvdXQ7Ci0KLQlzZGlvX2NsYWltX2hvc3QoZnVuYyk7Ci0Jc2Rpb19lbmFibGVfZnVuYyhmdW5jKTsKLQlzZGlvX3JlbGVhc2VfaG9zdChmdW5jKTsKLQotb3V0OgotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgd2wxMjcxX3NkaW9fcG93ZXJfb2ZmKHN0cnVjdCB3bDEyNzEgKndsKQotewotCXN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMgPSB3bF90b19mdW5jKHdsKTsKLQotCXNkaW9fY2xhaW1faG9zdChmdW5jKTsKLQlzZGlvX2Rpc2FibGVfZnVuYyhmdW5jKTsKLQlzZGlvX3JlbGVhc2VfaG9zdChmdW5jKTsKLQotCS8qIFBvd2VyIGRvd24gdGhlIGNhcmQgKi8KLQlyZXR1cm4gcG1fcnVudGltZV9wdXRfc3luYygmZnVuYy0+ZGV2KTsKLX0KLQotc3RhdGljIGludCB3bDEyNzFfc2Rpb19zZXRfcG93ZXIoc3RydWN0IHdsMTI3MSAqd2wsIGJvb2wgZW5hYmxlKQotewotCWlmIChlbmFibGUpCi0JCXJldHVybiB3bDEyNzFfc2Rpb19wb3dlcl9vbih3bCk7Ci0JZWxzZQotCQlyZXR1cm4gd2wxMjcxX3NkaW9fcG93ZXJfb2ZmKHdsKTsKLX0KLQotc3RhdGljIHN0cnVjdCB3bDEyNzFfaWZfb3BlcmF0aW9ucyBzZGlvX29wcyA9IHsKLQkucmVhZAkJPSB3bDEyNzFfc2Rpb19yYXdfcmVhZCwKLQkud3JpdGUJCT0gd2wxMjcxX3NkaW9fcmF3X3dyaXRlLAotCS5yZXNldAkJPSB3bDEyNzFfc2Rpb19yZXNldCwKLQkuaW5pdAkJPSB3bDEyNzFfc2Rpb19pbml0LAotCS5wb3dlcgkJPSB3bDEyNzFfc2Rpb19zZXRfcG93ZXIsCi0JLmRldgkJPSB3bDEyNzFfc2Rpb193bF90b19kZXYsCi0JLmVuYWJsZV9pcnEJPSB3bDEyNzFfc2Rpb19lbmFibGVfaW50ZXJydXB0cywKLQkuZGlzYWJsZV9pcnEJPSB3bDEyNzFfc2Rpb19kaXNhYmxlX2ludGVycnVwdHMKLX07Ci0KLXN0YXRpYyBpbnQgX19kZXZpbml0IHdsMTI3MV9wcm9iZShzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jLAotCQkJCSAgY29uc3Qgc3RydWN0IHNkaW9fZGV2aWNlX2lkICppZCkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKLQljb25zdCBzdHJ1Y3Qgd2wxMnh4X3BsYXRmb3JtX2RhdGEgKndsYW5fZGF0YTsKLQlzdHJ1Y3Qgd2wxMjcxICp3bDsKLQlpbnQgcmV0OwotCi0JLyogV2UgYXJlIG9ubHkgYWJsZSB0byBoYW5kbGUgdGhlIHdsYW4gZnVuY3Rpb24gKi8KLQlpZiAoZnVuYy0+bnVtICE9IDB4MDIpCi0JCXJldHVybiAtRU5PREVWOwotCi0JaHcgPSB3bDEyNzFfYWxsb2NfaHcoKTsKLQlpZiAoSVNfRVJSKGh3KSkKLQkJcmV0dXJuIFBUUl9FUlIoaHcpOwotCi0Jd2wgPSBody0+cHJpdjsKLQotCXdsLT5pZl9wcml2ID0gZnVuYzsKLQl3bC0+aWZfb3BzID0gJnNkaW9fb3BzOwotCi0JLyogR3JhYiBhY2Nlc3MgdG8gRk4wIGZvciBFTFAgcmVnLiAqLwotCWZ1bmMtPmNhcmQtPnF1aXJrcyB8PSBNTUNfUVVJUktfTEVOSUVOVF9GTjA7Ci0KLQl3bGFuX2RhdGEgPSB3bDEyeHhfZ2V0X3BsYXRmb3JtX2RhdGEoKTsKLQlpZiAoSVNfRVJSKHdsYW5fZGF0YSkpIHsKLQkJcmV0ID0gUFRSX0VSUih3bGFuX2RhdGEpOwotCQl3bDEyNzFfZXJyb3IoIm1pc3Npbmcgd2xhbiBwbGF0Zm9ybSBkYXRhOiAlZCIsIHJldCk7Ci0JCWdvdG8gb3V0X2ZyZWU7Ci0JfQotCi0Jd2wtPmlycSA9IHdsYW5fZGF0YS0+aXJxOwotCXdsLT5yZWZfY2xvY2sgPSB3bGFuX2RhdGEtPmJvYXJkX3JlZl9jbG9jazsKLQotCXJldCA9IHJlcXVlc3RfaXJxKHdsLT5pcnEsIHdsMTI3MV9pcnEsIDAsIERSSVZFUl9OQU1FLCB3bCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJd2wxMjcxX2Vycm9yKCJyZXF1ZXN0X2lycSgpIGZhaWxlZDogJWQiLCByZXQpOwotCQlnb3RvIG91dF9mcmVlOwotCX0KLQotCXNldF9pcnFfdHlwZSh3bC0+aXJxLCBJUlFfVFlQRV9FREdFX1JJU0lORyk7Ci0KLQlkaXNhYmxlX2lycSh3bC0+aXJxKTsKLQotCXJldCA9IHdsMTI3MV9pbml0X2llZWU4MDIxMSh3bCk7Ci0JaWYgKHJldCkKLQkJZ290byBvdXRfaXJxOwotCi0JcmV0ID0gd2wxMjcxX3JlZ2lzdGVyX2h3KHdsKTsKLQlpZiAocmV0KQotCQlnb3RvIG91dF9pcnE7Ci0KLQlzZGlvX3NldF9kcnZkYXRhKGZ1bmMsIHdsKTsKLQotCS8qIFRlbGwgUE0gY29yZSB0aGF0IHdlIGRvbid0IG5lZWQgdGhlIGNhcmQgdG8gYmUgcG93ZXJlZCBub3cgKi8KLQlwbV9ydW50aW1lX3B1dF9ub2lkbGUoJmZ1bmMtPmRldik7Ci0KLQl3bDEyNzFfbm90aWNlKCJpbml0aWFsaXplZCIpOwotCi0JcmV0dXJuIDA7Ci0KLSBvdXRfaXJxOgotCWZyZWVfaXJxKHdsLT5pcnEsIHdsKTsKLQotCi0gb3V0X2ZyZWU6Ci0Jd2wxMjcxX2ZyZWVfaHcod2wpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgX19kZXZleGl0IHdsMTI3MV9yZW1vdmUoc3RydWN0IHNkaW9fZnVuYyAqZnVuYykKLXsKLQlzdHJ1Y3Qgd2wxMjcxICp3bCA9IHNkaW9fZ2V0X2RydmRhdGEoZnVuYyk7Ci0KLQkvKiBVbmRvIGRlY3JlbWVudCBkb25lIGFib3ZlIGluIHdsMTI3MV9wcm9iZSAqLwotCXBtX3J1bnRpbWVfZ2V0X25vcmVzdW1lKCZmdW5jLT5kZXYpOwotCi0Jd2wxMjcxX3VucmVnaXN0ZXJfaHcod2wpOwotCWZyZWVfaXJxKHdsLT5pcnEsIHdsKTsKLQl3bDEyNzFfZnJlZV9odyh3bCk7Ci19Ci0KLXN0YXRpYyBpbnQgd2wxMjcxX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQotewotCS8qIFRlbGwgTU1DL1NESU8gY29yZSBpdCdzIE9LIHRvIHBvd2VyIGRvd24gdGhlIGNhcmQKLQkgKiAoaWYgaXQgaXNuJ3QgYWxyZWFkeSksIGJ1dCBub3QgdG8gcmVtb3ZlIGl0IGNvbXBsZXRlbHkgKi8KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB3bDEyNzFfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHdsMTI3MV9zZGlvX3BtX29wcyA9IHsKLQkuc3VzcGVuZAk9IHdsMTI3MV9zdXNwZW5kLAotCS5yZXN1bWUJCT0gd2wxMjcxX3Jlc3VtZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2Rpb19kcml2ZXIgd2wxMjcxX3NkaW9fZHJpdmVyID0gewotCS5uYW1lCQk9ICJ3bDEyNzFfc2RpbyIsCi0JLmlkX3RhYmxlCT0gd2wxMjcxX2RldmljZXMsCi0JLnByb2JlCQk9IHdsMTI3MV9wcm9iZSwKLQkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHdsMTI3MV9yZW1vdmUpLAotCS5kcnYgPSB7Ci0JCS5wbSA9ICZ3bDEyNzFfc2Rpb19wbV9vcHMsCi0JfSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IHdsMTI3MV9pbml0KHZvaWQpCi17Ci0JaW50IHJldDsKLQotCXJldCA9IHNkaW9fcmVnaXN0ZXJfZHJpdmVyKCZ3bDEyNzFfc2Rpb19kcml2ZXIpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXdsMTI3MV9lcnJvcigiZmFpbGVkIHRvIHJlZ2lzdGVyIHNkaW8gZHJpdmVyOiAlZCIsIHJldCk7Ci0JCWdvdG8gb3V0OwotCX0KLQotb3V0OgotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCB3bDEyNzFfZXhpdCh2b2lkKQotewotCXNkaW9fdW5yZWdpc3Rlcl9kcml2ZXIoJndsMTI3MV9zZGlvX2RyaXZlcik7Ci0KLQl3bDEyNzFfbm90aWNlKCJ1bmxvYWRlZCIpOwotfQotCi1tb2R1bGVfaW5pdCh3bDEyNzFfaW5pdCk7Ci1tb2R1bGVfZXhpdCh3bDEyNzFfZXhpdCk7Ci0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IoIkx1Y2lhbm8gQ29lbGhvIDxsdWNpYW5vLmNvZWxob0Bub2tpYS5jb20+Iik7Ci1NT0RVTEVfQVVUSE9SKCJKdXVzbyBPaWthcmluZW4gPGp1dXNvLm9pa2FyaW5lbkBub2tpYS5jb20+Iik7Ci1NT0RVTEVfRklSTVdBUkUoV0wxMjcxX0ZXX05BTUUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9zcGkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfc3BpLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmODAxNjguLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9zcGkuYworKysgL2Rldi9udWxsCkBAIC0xLDQ5OCArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMjcxCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgTm9raWEgQ29ycG9yYXRpb24KLSAqCi0gKiBDb250YWN0OiBMdWNpYW5vIENvZWxobyA8bHVjaWFuby5jb2VsaG9Abm9raWEuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQotICogMDIxMTAtMTMwMSBVU0EKLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2NyYzcuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+Ci0jaW5jbHVkZSA8bGludXgvd2wxMnh4Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotCi0jaW5jbHVkZSAid2wxMjcxLmgiCi0jaW5jbHVkZSAid2wxMnh4XzgwMjExLmgiCi0jaW5jbHVkZSAid2wxMjcxX2lvLmgiCi0KLSNpbmNsdWRlICJ3bDEyNzFfcmVnLmgiCi0KLSNkZWZpbmUgV1NQSV9DTURfUkVBRCAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAotI2RlZmluZSBXU1BJX0NNRF9XUklURSAgICAgICAgICAgICAgICAweDAwMDAwMDAwCi0jZGVmaW5lIFdTUElfQ01EX0ZJWEVEICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKLSNkZWZpbmUgV1NQSV9DTURfQllURV9MRU5HVEggICAgICAgICAgMHgxRkZFMDAwMAotI2RlZmluZSBXU1BJX0NNRF9CWVRFX0xFTkdUSF9PRkZTRVQgICAxNwotI2RlZmluZSBXU1BJX0NNRF9CWVRFX0FERFIgICAgICAgICAgICAweDAwMDFGRkZGCi0KLSNkZWZpbmUgV1NQSV9JTklUX0NNRF9DUkNfTEVOICAgICAgIDUKLQotI2RlZmluZSBXU1BJX0lOSVRfQ01EX1NUQVJUICAgICAgICAgMHgwMAotI2RlZmluZSBXU1BJX0lOSVRfQ01EX1RYICAgICAgICAgICAgMHg0MAotLyogdGhlIGV4dHJhIGJ5cGFzcyBiaXQgaXMgc2FtcGxlZCBieSB0aGUgVE5FVCBhcyAnMScgKi8KLSNkZWZpbmUgV1NQSV9JTklUX0NNRF9CWVBBU1NfQklUICAgIDB4ODAKLSNkZWZpbmUgV1NQSV9JTklUX0NNRF9GSVhFREJVU1lfTEVOIDB4MDcKLSNkZWZpbmUgV1NQSV9JTklUX0NNRF9FTl9GSVhFREJVU1kgIDB4ODAKLSNkZWZpbmUgV1NQSV9JTklUX0NNRF9ESVNfRklYRURCVVNZIDB4MDAKLSNkZWZpbmUgV1NQSV9JTklUX0NNRF9JT0QgICAgICAgICAgIDB4NDAKLSNkZWZpbmUgV1NQSV9JTklUX0NNRF9JUCAgICAgICAgICAgIDB4MjAKLSNkZWZpbmUgV1NQSV9JTklUX0NNRF9DUyAgICAgICAgICAgIDB4MTAKLSNkZWZpbmUgV1NQSV9JTklUX0NNRF9XUyAgICAgICAgICAgIDB4MDgKLSNkZWZpbmUgV1NQSV9JTklUX0NNRF9XU1BJICAgICAgICAgIDB4MDEKLSNkZWZpbmUgV1NQSV9JTklUX0NNRF9FTkQgICAgICAgICAgIDB4MDEKLQotI2RlZmluZSBXU1BJX0lOSVRfQ01EX0xFTiAgICAgICAgICAgOAotCi0jZGVmaW5lIEhXX0FDQ0VTU19XU1BJX0ZJWEVEX0JVU1lfTEVOIFwKLQkJKChXTDEyNzFfQlVTWV9XT1JEX0xFTiAtIDQpIC8gc2l6ZW9mKHUzMikpCi0jZGVmaW5lIEhXX0FDQ0VTU19XU1BJX0lOSVRfQ01EX01BU0sgIDAKLQotLyogSFcgbGltaXRhdGlvbjogbWF4aW11bSBwb3NzaWJsZSBjaHVuayBzaXplIGlzIDQwOTUgYnl0ZXMgKi8KLSNkZWZpbmUgV1NQSV9NQVhfQ0hVTktfU0laRSAgICA0MDkyCi0KLSNkZWZpbmUgV1NQSV9NQVhfTlVNX09GX0NIVU5LUyAoV0wxMjcxX0FHR1JfQlVGRkVSX1NJWkUgLyBXU1BJX01BWF9DSFVOS19TSVpFKQotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBzcGlfZGV2aWNlICp3bF90b19zcGkoc3RydWN0IHdsMTI3MSAqd2wpCi17Ci0JcmV0dXJuIHdsLT5pZl9wcml2OwotfQotCi1zdGF0aWMgc3RydWN0IGRldmljZSAqd2wxMjcxX3NwaV93bF90b19kZXYoc3RydWN0IHdsMTI3MSAqd2wpCi17Ci0JcmV0dXJuICYod2xfdG9fc3BpKHdsKS0+ZGV2KTsKLX0KLQotc3RhdGljIHZvaWQgd2wxMjcxX3NwaV9kaXNhYmxlX2ludGVycnVwdHMoc3RydWN0IHdsMTI3MSAqd2wpCi17Ci0JZGlzYWJsZV9pcnEod2wtPmlycSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdsMTI3MV9zcGlfZW5hYmxlX2ludGVycnVwdHMoc3RydWN0IHdsMTI3MSAqd2wpCi17Ci0JZW5hYmxlX2lycSh3bC0+aXJxKTsKLX0KLQotc3RhdGljIHZvaWQgd2wxMjcxX3NwaV9yZXNldChzdHJ1Y3Qgd2wxMjcxICp3bCkKLXsKLQl1OCAqY21kOwotCXN0cnVjdCBzcGlfdHJhbnNmZXIgdDsKLQlzdHJ1Y3Qgc3BpX21lc3NhZ2UgbTsKLQotCWNtZCA9IGt6YWxsb2MoV1NQSV9JTklUX0NNRF9MRU4sIEdGUF9LRVJORUwpOwotCWlmICghY21kKSB7Ci0JCXdsMTI3MV9lcnJvcigiY291bGQgbm90IGFsbG9jYXRlIGNtZCBmb3Igc3BpIHJlc2V0Iik7Ci0JCXJldHVybjsKLQl9Ci0KLQltZW1zZXQoJnQsIDAsIHNpemVvZih0KSk7Ci0Jc3BpX21lc3NhZ2VfaW5pdCgmbSk7Ci0KLQltZW1zZXQoY21kLCAweGZmLCBXU1BJX0lOSVRfQ01EX0xFTik7Ci0KLQl0LnR4X2J1ZiA9IGNtZDsKLQl0LmxlbiA9IFdTUElfSU5JVF9DTURfTEVOOwotCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0LCAmbSk7Ci0KLQlzcGlfc3luYyh3bF90b19zcGkod2wpLCAmbSk7Ci0Ja2ZyZWUoY21kKTsKLQotCXdsMTI3MV9kdW1wKERFQlVHX1NQSSwgInNwaSByZXNldCAtPiAiLCBjbWQsIFdTUElfSU5JVF9DTURfTEVOKTsKLX0KLQotc3RhdGljIHZvaWQgd2wxMjcxX3NwaV9pbml0KHN0cnVjdCB3bDEyNzEgKndsKQotewotCXU4IGNyY1tXU1BJX0lOSVRfQ01EX0NSQ19MRU5dLCAqY21kOwotCXN0cnVjdCBzcGlfdHJhbnNmZXIgdDsKLQlzdHJ1Y3Qgc3BpX21lc3NhZ2UgbTsKLQotCWNtZCA9IGt6YWxsb2MoV1NQSV9JTklUX0NNRF9MRU4sIEdGUF9LRVJORUwpOwotCWlmICghY21kKSB7Ci0JCXdsMTI3MV9lcnJvcigiY291bGQgbm90IGFsbG9jYXRlIGNtZCBmb3Igc3BpIGluaXQiKTsKLQkJcmV0dXJuOwotCX0KLQotCW1lbXNldChjcmMsIDAsIHNpemVvZihjcmMpKTsKLQltZW1zZXQoJnQsIDAsIHNpemVvZih0KSk7Ci0Jc3BpX21lc3NhZ2VfaW5pdCgmbSk7Ci0KLQkvKgotCSAqIFNldCBXU1BJX0lOSVRfQ09NTUFORAotCSAqIHRoZSBkYXRhIGlzIGJlaW5nIHNlbmQgZnJvbSB0aGUgTVNCIHRvIExTQgotCSAqLwotCWNtZFsyXSA9IDB4ZmY7Ci0JY21kWzNdID0gMHhmZjsKLQljbWRbMV0gPSBXU1BJX0lOSVRfQ01EX1NUQVJUIHwgV1NQSV9JTklUX0NNRF9UWDsKLQljbWRbMF0gPSAwOwotCWNtZFs3XSA9IDA7Ci0JY21kWzZdIHw9IEhXX0FDQ0VTU19XU1BJX0lOSVRfQ01EX01BU0sgPDwgMzsKLQljbWRbNl0gfD0gSFdfQUNDRVNTX1dTUElfRklYRURfQlVTWV9MRU4gJiBXU1BJX0lOSVRfQ01EX0ZJWEVEQlVTWV9MRU47Ci0KLQlpZiAoSFdfQUNDRVNTX1dTUElfRklYRURfQlVTWV9MRU4gPT0gMCkKLQkJY21kWzVdIHw9ICBXU1BJX0lOSVRfQ01EX0RJU19GSVhFREJVU1k7Ci0JZWxzZQotCQljbWRbNV0gfD0gV1NQSV9JTklUX0NNRF9FTl9GSVhFREJVU1k7Ci0KLQljbWRbNV0gfD0gV1NQSV9JTklUX0NNRF9JT0QgfCBXU1BJX0lOSVRfQ01EX0lQIHwgV1NQSV9JTklUX0NNRF9DUwotCQl8IFdTUElfSU5JVF9DTURfV1NQSSB8IFdTUElfSU5JVF9DTURfV1M7Ci0KLQljcmNbMF0gPSBjbWRbMV07Ci0JY3JjWzFdID0gY21kWzBdOwotCWNyY1syXSA9IGNtZFs3XTsKLQljcmNbM10gPSBjbWRbNl07Ci0JY3JjWzRdID0gY21kWzVdOwotCi0JY21kWzRdIHw9IGNyYzcoMCwgY3JjLCBXU1BJX0lOSVRfQ01EX0NSQ19MRU4pIDw8IDE7Ci0JY21kWzRdIHw9IFdTUElfSU5JVF9DTURfRU5EOwotCi0JdC50eF9idWYgPSBjbWQ7Ci0JdC5sZW4gPSBXU1BJX0lOSVRfQ01EX0xFTjsKLQlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdCwgJm0pOwotCi0Jc3BpX3N5bmMod2xfdG9fc3BpKHdsKSwgJm0pOwotCXdsMTI3MV9kdW1wKERFQlVHX1NQSSwgInNwaSBpbml0IC0+ICIsIGNtZCwgV1NQSV9JTklUX0NNRF9MRU4pOwotCWtmcmVlKGNtZCk7Ci19Ci0KLSNkZWZpbmUgV0wxMjcxX0JVU1lfV09SRF9USU1FT1VUIDEwMDAKLQotc3RhdGljIGludCB3bDEyNzFfc3BpX3JlYWRfYnVzeShzdHJ1Y3Qgd2wxMjcxICp3bCkKLXsKLQlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHRbMV07Ci0Jc3RydWN0IHNwaV9tZXNzYWdlIG07Ci0JdTMyICpidXN5X2J1ZjsKLQlpbnQgbnVtX2J1c3lfYnl0ZXMgPSAwOwotCi0JLyoKLQkgKiBSZWFkIGZ1cnRoZXIgYnVzeSB3b3JkcyBmcm9tIFNQSSB1bnRpbCBhIG5vbi1idXN5IHdvcmQgaXMKLQkgKiBlbmNvdW50ZXJlZCwgdGhlbiByZWFkIHRoZSBkYXRhIGl0c2VsZiBpbnRvIHRoZSBidWZmZXIuCi0JICovCi0KLQludW1fYnVzeV9ieXRlcyA9IFdMMTI3MV9CVVNZX1dPUkRfVElNRU9VVDsKLQlidXN5X2J1ZiA9IHdsLT5idWZmZXJfYnVzeXdvcmQ7Ci0Jd2hpbGUgKG51bV9idXN5X2J5dGVzKSB7Ci0JCW51bV9idXN5X2J5dGVzLS07Ci0JCXNwaV9tZXNzYWdlX2luaXQoJm0pOwotCQltZW1zZXQodCwgMCwgc2l6ZW9mKHQpKTsKLQkJdFswXS5yeF9idWYgPSBidXN5X2J1ZjsKLQkJdFswXS5sZW4gPSBzaXplb2YodTMyKTsKLQkJdFswXS5jc19jaGFuZ2UgPSB0cnVlOwotCQlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdFswXSwgJm0pOwotCQlzcGlfc3luYyh3bF90b19zcGkod2wpLCAmbSk7Ci0KLQkJaWYgKCpidXN5X2J1ZiAmIDB4MSkKLQkJCXJldHVybiAwOwotCX0KLQotCS8qIFRoZSBTUEkgYnVzIGlzIHVucmVzcG9uc2l2ZSwgdGhlIHJlYWQgZmFpbGVkLiAqLwotCXdsMTI3MV9lcnJvcigiU1BJIHJlYWQgYnVzeS13b3JkIHRpbWVvdXQhXG4iKTsKLQlyZXR1cm4gLUVUSU1FRE9VVDsKLX0KLQotc3RhdGljIHZvaWQgd2wxMjcxX3NwaV9yYXdfcmVhZChzdHJ1Y3Qgd2wxMjcxICp3bCwgaW50IGFkZHIsIHZvaWQgKmJ1ZiwKLQkJCQlzaXplX3QgbGVuLCBib29sIGZpeGVkKQotewotCXN0cnVjdCBzcGlfdHJhbnNmZXIgdFsyXTsKLQlzdHJ1Y3Qgc3BpX21lc3NhZ2UgbTsKLQl1MzIgKmJ1c3lfYnVmOwotCXUzMiAqY21kOwotCXUzMiBjaHVua19sZW47Ci0KLQl3aGlsZSAobGVuID4gMCkgewotCQljaHVua19sZW4gPSBtaW4oKHNpemVfdClXU1BJX01BWF9DSFVOS19TSVpFLCBsZW4pOwotCi0JCWNtZCA9ICZ3bC0+YnVmZmVyX2NtZDsKLQkJYnVzeV9idWYgPSB3bC0+YnVmZmVyX2J1c3l3b3JkOwotCi0JCSpjbWQgPSAwOwotCQkqY21kIHw9IFdTUElfQ01EX1JFQUQ7Ci0JCSpjbWQgfD0gKGNodW5rX2xlbiA8PCBXU1BJX0NNRF9CWVRFX0xFTkdUSF9PRkZTRVQpICYKLQkJCVdTUElfQ01EX0JZVEVfTEVOR1RIOwotCQkqY21kIHw9IGFkZHIgJiBXU1BJX0NNRF9CWVRFX0FERFI7Ci0KLQkJaWYgKGZpeGVkKQotCQkJKmNtZCB8PSBXU1BJX0NNRF9GSVhFRDsKLQotCQlzcGlfbWVzc2FnZV9pbml0KCZtKTsKLQkJbWVtc2V0KHQsIDAsIHNpemVvZih0KSk7Ci0KLQkJdFswXS50eF9idWYgPSBjbWQ7Ci0JCXRbMF0ubGVuID0gNDsKLQkJdFswXS5jc19jaGFuZ2UgPSB0cnVlOwotCQlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdFswXSwgJm0pOwotCi0JCS8qIEJ1c3kgYW5kIG5vbiBidXN5IHdvcmRzIHJlYWQgKi8KLQkJdFsxXS5yeF9idWYgPSBidXN5X2J1ZjsKLQkJdFsxXS5sZW4gPSBXTDEyNzFfQlVTWV9XT1JEX0xFTjsKLQkJdFsxXS5jc19jaGFuZ2UgPSB0cnVlOwotCQlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdFsxXSwgJm0pOwotCi0JCXNwaV9zeW5jKHdsX3RvX3NwaSh3bCksICZtKTsKLQotCQlpZiAoIShidXN5X2J1ZltXTDEyNzFfQlVTWV9XT1JEX0NOVCAtIDFdICYgMHgxKSAmJgotCQkgICAgd2wxMjcxX3NwaV9yZWFkX2J1c3kod2wpKSB7Ci0JCQltZW1zZXQoYnVmLCAwLCBjaHVua19sZW4pOwotCQkJcmV0dXJuOwotCQl9Ci0KLQkJc3BpX21lc3NhZ2VfaW5pdCgmbSk7Ci0JCW1lbXNldCh0LCAwLCBzaXplb2YodCkpOwotCi0JCXRbMF0ucnhfYnVmID0gYnVmOwotCQl0WzBdLmxlbiA9IGNodW5rX2xlbjsKLQkJdFswXS5jc19jaGFuZ2UgPSB0cnVlOwotCQlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdFswXSwgJm0pOwotCi0JCXNwaV9zeW5jKHdsX3RvX3NwaSh3bCksICZtKTsKLQotCQl3bDEyNzFfZHVtcChERUJVR19TUEksICJzcGlfcmVhZCBjbWQgLT4gIiwgY21kLCBzaXplb2YoKmNtZCkpOwotCQl3bDEyNzFfZHVtcChERUJVR19TUEksICJzcGlfcmVhZCBidWYgPC0gIiwgYnVmLCBjaHVua19sZW4pOwotCi0JCWlmICghZml4ZWQpCi0JCQlhZGRyICs9IGNodW5rX2xlbjsKLQkJYnVmICs9IGNodW5rX2xlbjsKLQkJbGVuIC09IGNodW5rX2xlbjsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIHdsMTI3MV9zcGlfcmF3X3dyaXRlKHN0cnVjdCB3bDEyNzEgKndsLCBpbnQgYWRkciwgdm9pZCAqYnVmLAotCQkJICBzaXplX3QgbGVuLCBib29sIGZpeGVkKQotewotCXN0cnVjdCBzcGlfdHJhbnNmZXIgdFsyICogV1NQSV9NQVhfTlVNX09GX0NIVU5LU107Ci0Jc3RydWN0IHNwaV9tZXNzYWdlIG07Ci0JdTMyIGNvbW1hbmRzW1dTUElfTUFYX05VTV9PRl9DSFVOS1NdOwotCXUzMiAqY21kOwotCXUzMiBjaHVua19sZW47Ci0JaW50IGk7Ci0KLQlXQVJOX09OKGxlbiA+IFdMMTI3MV9BR0dSX0JVRkZFUl9TSVpFKTsKLQotCXNwaV9tZXNzYWdlX2luaXQoJm0pOwotCW1lbXNldCh0LCAwLCBzaXplb2YodCkpOwotCi0JY21kID0gJmNvbW1hbmRzWzBdOwotCWkgPSAwOwotCXdoaWxlIChsZW4gPiAwKSB7Ci0JCWNodW5rX2xlbiA9IG1pbigoc2l6ZV90KVdTUElfTUFYX0NIVU5LX1NJWkUsIGxlbik7Ci0KLQkJKmNtZCA9IDA7Ci0JCSpjbWQgfD0gV1NQSV9DTURfV1JJVEU7Ci0JCSpjbWQgfD0gKGNodW5rX2xlbiA8PCBXU1BJX0NNRF9CWVRFX0xFTkdUSF9PRkZTRVQpICYKLQkJCVdTUElfQ01EX0JZVEVfTEVOR1RIOwotCQkqY21kIHw9IGFkZHIgJiBXU1BJX0NNRF9CWVRFX0FERFI7Ci0KLQkJaWYgKGZpeGVkKQotCQkJKmNtZCB8PSBXU1BJX0NNRF9GSVhFRDsKLQotCQl0W2ldLnR4X2J1ZiA9IGNtZDsKLQkJdFtpXS5sZW4gPSBzaXplb2YoKmNtZCk7Ci0JCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0W2krK10sICZtKTsKLQotCQl0W2ldLnR4X2J1ZiA9IGJ1ZjsKLQkJdFtpXS5sZW4gPSBjaHVua19sZW47Ci0JCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0W2krK10sICZtKTsKLQotCQl3bDEyNzFfZHVtcChERUJVR19TUEksICJzcGlfd3JpdGUgY21kIC0+ICIsIGNtZCwgc2l6ZW9mKCpjbWQpKTsKLQkJd2wxMjcxX2R1bXAoREVCVUdfU1BJLCAic3BpX3dyaXRlIGJ1ZiAtPiAiLCBidWYsIGNodW5rX2xlbik7Ci0KLQkJaWYgKCFmaXhlZCkKLQkJCWFkZHIgKz0gY2h1bmtfbGVuOwotCQlidWYgKz0gY2h1bmtfbGVuOwotCQlsZW4gLT0gY2h1bmtfbGVuOwotCQljbWQrKzsKLQl9Ci0KLQlzcGlfc3luYyh3bF90b19zcGkod2wpLCAmbSk7Ci19Ci0KLXN0YXRpYyBpcnFyZXR1cm5fdCB3bDEyNzFfaXJxKGludCBpcnEsIHZvaWQgKmNvb2tpZSkKLXsKLQlzdHJ1Y3Qgd2wxMjcxICp3bDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jd2wxMjcxX2RlYnVnKERFQlVHX0lSUSwgIklSUSIpOwotCi0Jd2wgPSBjb29raWU7Ci0KLQkvKiBjb21wbGV0ZSB0aGUgRUxQIGNvbXBsZXRpb24gKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmd2wtPndsX2xvY2ssIGZsYWdzKTsKLQlpZiAod2wtPmVscF9jb21wbCkgewotCQljb21wbGV0ZSh3bC0+ZWxwX2NvbXBsKTsKLQkJd2wtPmVscF9jb21wbCA9IE5VTEw7Ci0JfQotCi0JaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdMMTI3MV9GTEFHX0lSUV9SVU5OSU5HLCAmd2wtPmZsYWdzKSkKLQkJaWVlZTgwMjExX3F1ZXVlX3dvcmsod2wtPmh3LCAmd2wtPmlycV93b3JrKTsKLQlzZXRfYml0KFdMMTI3MV9GTEFHX0lSUV9QRU5ESU5HLCAmd2wtPmZsYWdzKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3bC0+d2xfbG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIElSUV9IQU5ETEVEOwotfQotCi1zdGF0aWMgaW50IHdsMTI3MV9zcGlfc2V0X3Bvd2VyKHN0cnVjdCB3bDEyNzEgKndsLCBib29sIGVuYWJsZSkKLXsKLQlpZiAod2wtPnNldF9wb3dlcikKLQkJd2wtPnNldF9wb3dlcihlbmFibGUpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgd2wxMjcxX2lmX29wZXJhdGlvbnMgc3BpX29wcyA9IHsKLQkucmVhZAkJPSB3bDEyNzFfc3BpX3Jhd19yZWFkLAotCS53cml0ZQkJPSB3bDEyNzFfc3BpX3Jhd193cml0ZSwKLQkucmVzZXQJCT0gd2wxMjcxX3NwaV9yZXNldCwKLQkuaW5pdAkJPSB3bDEyNzFfc3BpX2luaXQsCi0JLnBvd2VyCQk9IHdsMTI3MV9zcGlfc2V0X3Bvd2VyLAotCS5kZXYJCT0gd2wxMjcxX3NwaV93bF90b19kZXYsCi0JLmVuYWJsZV9pcnEJPSB3bDEyNzFfc3BpX2VuYWJsZV9pbnRlcnJ1cHRzLAotCS5kaXNhYmxlX2lycQk9IHdsMTI3MV9zcGlfZGlzYWJsZV9pbnRlcnJ1cHRzCi19OwotCi1zdGF0aWMgaW50IF9fZGV2aW5pdCB3bDEyNzFfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKLXsKLQlzdHJ1Y3Qgd2wxMnh4X3BsYXRmb3JtX2RhdGEgKnBkYXRhOwotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OwotCXN0cnVjdCB3bDEyNzEgKndsOwotCWludCByZXQ7Ci0KLQlwZGF0YSA9IHNwaS0+ZGV2LnBsYXRmb3JtX2RhdGE7Ci0JaWYgKCFwZGF0YSkgewotCQl3bDEyNzFfZXJyb3IoIm5vIHBsYXRmb3JtIGRhdGEiKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JaHcgPSB3bDEyNzFfYWxsb2NfaHcoKTsKLQlpZiAoSVNfRVJSKGh3KSkKLQkJcmV0dXJuIFBUUl9FUlIoaHcpOwotCi0Jd2wgPSBody0+cHJpdjsKLQotCWRldl9zZXRfZHJ2ZGF0YSgmc3BpLT5kZXYsIHdsKTsKLQl3bC0+aWZfcHJpdiA9IHNwaTsKLQotCXdsLT5pZl9vcHMgPSAmc3BpX29wczsKLQotCS8qIFRoaXMgaXMgdGhlIG9ubHkgU1BJIHZhbHVlIHRoYXQgd2UgbmVlZCB0byBzZXQgaGVyZSwgdGhlIHJlc3QKLQkgKiBjb21lcyBmcm9tIHRoZSBib2FyZC1wZXJpcGhlcmFscyBmaWxlICovCi0Jc3BpLT5iaXRzX3Blcl93b3JkID0gMzI7Ci0KLQlyZXQgPSBzcGlfc2V0dXAoc3BpKTsKLQlpZiAocmV0IDwgMCkgewotCQl3bDEyNzFfZXJyb3IoInNwaV9zZXR1cCBmYWlsZWQiKTsKLQkJZ290byBvdXRfZnJlZTsKLQl9Ci0KLQl3bC0+c2V0X3Bvd2VyID0gcGRhdGEtPnNldF9wb3dlcjsKLQlpZiAoIXdsLT5zZXRfcG93ZXIpIHsKLQkJd2wxMjcxX2Vycm9yKCJzZXQgcG93ZXIgZnVuY3Rpb24gbWlzc2luZyBpbiBwbGF0Zm9ybSBkYXRhIik7Ci0JCXJldCA9IC1FTk9ERVY7Ci0JCWdvdG8gb3V0X2ZyZWU7Ci0JfQotCi0Jd2wtPnJlZl9jbG9jayA9IHBkYXRhLT5ib2FyZF9yZWZfY2xvY2s7Ci0KLQl3bC0+aXJxID0gc3BpLT5pcnE7Ci0JaWYgKHdsLT5pcnEgPCAwKSB7Ci0JCXdsMTI3MV9lcnJvcigiaXJxIG1pc3NpbmcgaW4gcGxhdGZvcm0gZGF0YSIpOwotCQlyZXQgPSAtRU5PREVWOwotCQlnb3RvIG91dF9mcmVlOwotCX0KLQotCXJldCA9IHJlcXVlc3RfaXJxKHdsLT5pcnEsIHdsMTI3MV9pcnEsIDAsIERSSVZFUl9OQU1FLCB3bCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJd2wxMjcxX2Vycm9yKCJyZXF1ZXN0X2lycSgpIGZhaWxlZDogJWQiLCByZXQpOwotCQlnb3RvIG91dF9mcmVlOwotCX0KLQotCXNldF9pcnFfdHlwZSh3bC0+aXJxLCBJUlFfVFlQRV9FREdFX1JJU0lORyk7Ci0KLQlkaXNhYmxlX2lycSh3bC0+aXJxKTsKLQotCXJldCA9IHdsMTI3MV9pbml0X2llZWU4MDIxMSh3bCk7Ci0JaWYgKHJldCkKLQkJZ290byBvdXRfaXJxOwotCi0JcmV0ID0gd2wxMjcxX3JlZ2lzdGVyX2h3KHdsKTsKLQlpZiAocmV0KQotCQlnb3RvIG91dF9pcnE7Ci0KLQl3bDEyNzFfbm90aWNlKCJpbml0aWFsaXplZCIpOwotCi0JcmV0dXJuIDA7Ci0KLSBvdXRfaXJxOgotCWZyZWVfaXJxKHdsLT5pcnEsIHdsKTsKLQotIG91dF9mcmVlOgotCXdsMTI3MV9mcmVlX2h3KHdsKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgX19kZXZleGl0IHdsMTI3MV9yZW1vdmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKLXsKLQlzdHJ1Y3Qgd2wxMjcxICp3bCA9IGRldl9nZXRfZHJ2ZGF0YSgmc3BpLT5kZXYpOwotCi0Jd2wxMjcxX3VucmVnaXN0ZXJfaHcod2wpOwotCWZyZWVfaXJxKHdsLT5pcnEsIHdsKTsKLQl3bDEyNzFfZnJlZV9odyh3bCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgc3RydWN0IHNwaV9kcml2ZXIgd2wxMjcxX3NwaV9kcml2ZXIgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm5hbWUJCT0gIndsMTI3MV9zcGkiLAotCQkuYnVzCQk9ICZzcGlfYnVzX3R5cGUsCi0JCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQl9LAotCi0JLnByb2JlCQk9IHdsMTI3MV9wcm9iZSwKLQkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHdsMTI3MV9yZW1vdmUpLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgd2wxMjcxX2luaXQodm9pZCkKLXsKLQlpbnQgcmV0OwotCi0JcmV0ID0gc3BpX3JlZ2lzdGVyX2RyaXZlcigmd2wxMjcxX3NwaV9kcml2ZXIpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXdsMTI3MV9lcnJvcigiZmFpbGVkIHRvIHJlZ2lzdGVyIHNwaSBkcml2ZXI6ICVkIiwgcmV0KTsKLQkJZ290byBvdXQ7Ci0JfQotCi1vdXQ6Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IHdsMTI3MV9leGl0KHZvaWQpCi17Ci0Jc3BpX3VucmVnaXN0ZXJfZHJpdmVyKCZ3bDEyNzFfc3BpX2RyaXZlcik7Ci0KLQl3bDEyNzFfbm90aWNlKCJ1bmxvYWRlZCIpOwotfQotCi1tb2R1bGVfaW5pdCh3bDEyNzFfaW5pdCk7Ci1tb2R1bGVfZXhpdCh3bDEyNzFfZXhpdCk7Ci0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IoIkx1Y2lhbm8gQ29lbGhvIDxsdWNpYW5vLmNvZWxob0Bub2tpYS5jb20+Iik7Ci1NT0RVTEVfQVVUSE9SKCJKdXVzbyBPaWthcmluZW4gPGp1dXNvLm9pa2FyaW5lbkBub2tpYS5jb20+Iik7Ci1NT0RVTEVfRklSTVdBUkUoV0wxMjcxX0ZXX05BTUUpOwotTU9EVUxFX0FMSUFTKCJzcGk6d2wxMjcxIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3Rlc3Rtb2RlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3Rlc3Rtb2RlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzYWE4NDMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV90ZXN0bW9kZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjc4ICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3bDEyNzEKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24KLSAqCi0gKiBDb250YWN0OiBMdWNpYW5vIENvZWxobyA8bHVjaWFuby5jb2VsaG9Abm9raWEuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQotICogMDIxMTAtMTMwMSBVU0EKLSAqCi0gKi8KLSNpbmNsdWRlICJ3bDEyNzFfdGVzdG1vZGUuaCIKLQotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxuZXQvZ2VuZXRsaW5rLmg+Ci0KLSNpbmNsdWRlICJ3bDEyNzEuaCIKLSNpbmNsdWRlICJ3bDEyNzFfYWN4LmgiCi0KLSNkZWZpbmUgV0wxMjcxX1RNX01BWF9EQVRBX0xFTkdUSCAxMDI0Ci0KLWVudW0gd2wxMjcxX3RtX2NvbW1hbmRzIHsKLQlXTDEyNzFfVE1fQ01EX1VOU1BFQywKLQlXTDEyNzFfVE1fQ01EX1RFU1QsCi0JV0wxMjcxX1RNX0NNRF9JTlRFUlJPR0FURSwKLQlXTDEyNzFfVE1fQ01EX0NPTkZJR1VSRSwKLQlXTDEyNzFfVE1fQ01EX05WU19QVVNILAotCVdMMTI3MV9UTV9DTURfU0VUX1BMVF9NT0RFLAotCi0JX19XTDEyNzFfVE1fQ01EX0FGVEVSX0xBU1QKLX07Ci0jZGVmaW5lIFdMMTI3MV9UTV9DTURfTUFYIChfX1dMMTI3MV9UTV9DTURfQUZURVJfTEFTVCAtIDEpCi0KLWVudW0gd2wxMjcxX3RtX2F0dHJzIHsKLQlXTDEyNzFfVE1fQVRUUl9VTlNQRUMsCi0JV0wxMjcxX1RNX0FUVFJfQ01EX0lELAotCVdMMTI3MV9UTV9BVFRSX0FOU1dFUiwKLQlXTDEyNzFfVE1fQVRUUl9EQVRBLAotCVdMMTI3MV9UTV9BVFRSX0lFX0lELAotCVdMMTI3MV9UTV9BVFRSX1BMVF9NT0RFLAotCi0JX19XTDEyNzFfVE1fQVRUUl9BRlRFUl9MQVNUCi19OwotI2RlZmluZSBXTDEyNzFfVE1fQVRUUl9NQVggKF9fV0wxMjcxX1RNX0FUVFJfQUZURVJfTEFTVCAtIDEpCi0KLXN0YXRpYyBzdHJ1Y3QgbmxhX3BvbGljeSB3bDEyNzFfdG1fcG9saWN5W1dMMTI3MV9UTV9BVFRSX01BWCArIDFdID0gewotCVtXTDEyNzFfVE1fQVRUUl9DTURfSURdID0JeyAudHlwZSA9IE5MQV9VMzIgfSwKLQlbV0wxMjcxX1RNX0FUVFJfQU5TV0VSXSA9CXsgLnR5cGUgPSBOTEFfVTggfSwKLQlbV0wxMjcxX1RNX0FUVFJfREFUQV0gPQkJeyAudHlwZSA9IE5MQV9CSU5BUlksCi0JCQkJCSAgLmxlbiA9IFdMMTI3MV9UTV9NQVhfREFUQV9MRU5HVEggfSwKLQlbV0wxMjcxX1RNX0FUVFJfSUVfSURdID0JeyAudHlwZSA9IE5MQV9VMzIgfSwKLQlbV0wxMjcxX1RNX0FUVFJfUExUX01PREVdID0JeyAudHlwZSA9IE5MQV9VMzIgfSwKLX07Ci0KLQotc3RhdGljIGludCB3bDEyNzFfdG1fY21kX3Rlc3Qoc3RydWN0IHdsMTI3MSAqd2wsIHN0cnVjdCBubGF0dHIgKnRiW10pCi17Ci0JaW50IGJ1Zl9sZW4sIHJldCwgbGVuOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0Jdm9pZCAqYnVmOwotCXU4IGFuc3dlciA9IDA7Ci0KLQl3bDEyNzFfZGVidWcoREVCVUdfVEVTVE1PREUsICJ0ZXN0bW9kZSBjbWQgdGVzdCIpOwotCi0JaWYgKCF0YltXTDEyNzFfVE1fQVRUUl9EQVRBXSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlidWYgPSBubGFfZGF0YSh0YltXTDEyNzFfVE1fQVRUUl9EQVRBXSk7Ci0JYnVmX2xlbiA9IG5sYV9sZW4odGJbV0wxMjcxX1RNX0FUVFJfREFUQV0pOwotCi0JaWYgKHRiW1dMMTI3MV9UTV9BVFRSX0FOU1dFUl0pCi0JCWFuc3dlciA9IG5sYV9nZXRfdTgodGJbV0wxMjcxX1RNX0FUVFJfQU5TV0VSXSk7Ci0KLQlpZiAoYnVmX2xlbiA+IHNpemVvZihzdHJ1Y3Qgd2wxMjcxX2NvbW1hbmQpKQotCQlyZXR1cm4gLUVNU0dTSVpFOwotCi0JbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKLQlyZXQgPSB3bDEyNzFfY21kX3Rlc3Qod2wsIGJ1ZiwgYnVmX2xlbiwgYW5zd2VyKTsKLQltdXRleF91bmxvY2soJndsLT5tdXRleCk7Ci0KLQlpZiAocmV0IDwgMCkgewotCQl3bDEyNzFfd2FybmluZygidGVzdG1vZGUgY21kIHRlc3QgZmFpbGVkOiAlZCIsIHJldCk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JaWYgKGFuc3dlcikgewotCQlsZW4gPSBubGFfdG90YWxfc2l6ZShidWZfbGVuKTsKLQkJc2tiID0gY2ZnODAyMTFfdGVzdG1vZGVfYWxsb2NfcmVwbHlfc2tiKHdsLT5ody0+d2lwaHksIGxlbik7Ci0JCWlmICghc2tiKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkJTkxBX1BVVChza2IsIFdMMTI3MV9UTV9BVFRSX0RBVEEsIGJ1Zl9sZW4sIGJ1Zik7Ci0JCXJldCA9IGNmZzgwMjExX3Rlc3Rtb2RlX3JlcGx5KHNrYik7Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlyZXR1cm4gMDsKLQotbmxhX3B1dF9mYWlsdXJlOgotCWtmcmVlX3NrYihza2IpOwotCXJldHVybiAtRU1TR1NJWkU7Ci19Ci0KLXN0YXRpYyBpbnQgd2wxMjcxX3RtX2NtZF9pbnRlcnJvZ2F0ZShzdHJ1Y3Qgd2wxMjcxICp3bCwgc3RydWN0IG5sYXR0ciAqdGJbXSkKLXsKLQlpbnQgcmV0OwotCXN0cnVjdCB3bDEyNzFfY29tbWFuZCAqY21kOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0JdTggaWVfaWQ7Ci0KLQl3bDEyNzFfZGVidWcoREVCVUdfVEVTVE1PREUsICJ0ZXN0bW9kZSBjbWQgaW50ZXJyb2dhdGUiKTsKLQotCWlmICghdGJbV0wxMjcxX1RNX0FUVFJfSUVfSURdKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWllX2lkID0gbmxhX2dldF91OCh0YltXTDEyNzFfVE1fQVRUUl9JRV9JRF0pOwotCi0JY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOwotCWlmICghY21kKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCW11dGV4X2xvY2soJndsLT5tdXRleCk7Ci0JcmV0ID0gd2wxMjcxX2NtZF9pbnRlcnJvZ2F0ZSh3bCwgaWVfaWQsIGNtZCwgc2l6ZW9mKCpjbWQpKTsKLQltdXRleF91bmxvY2soJndsLT5tdXRleCk7Ci0KLQlpZiAocmV0IDwgMCkgewotCQl3bDEyNzFfd2FybmluZygidGVzdG1vZGUgY21kIGludGVycm9nYXRlIGZhaWxlZDogJWQiLCByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXNrYiA9IGNmZzgwMjExX3Rlc3Rtb2RlX2FsbG9jX3JlcGx5X3NrYih3bC0+aHctPndpcGh5LCBzaXplb2YoKmNtZCkpOwotCWlmICghc2tiKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCU5MQV9QVVQoc2tiLCBXTDEyNzFfVE1fQVRUUl9EQVRBLCBzaXplb2YoKmNtZCksIGNtZCk7Ci0KLQlyZXR1cm4gMDsKLQotbmxhX3B1dF9mYWlsdXJlOgotCWtmcmVlX3NrYihza2IpOwotCXJldHVybiAtRU1TR1NJWkU7Ci19Ci0KLXN0YXRpYyBpbnQgd2wxMjcxX3RtX2NtZF9jb25maWd1cmUoc3RydWN0IHdsMTI3MSAqd2wsIHN0cnVjdCBubGF0dHIgKnRiW10pCi17Ci0JaW50IGJ1Zl9sZW4sIHJldDsKLQl2b2lkICpidWY7Ci0JdTggaWVfaWQ7Ci0KLQl3bDEyNzFfZGVidWcoREVCVUdfVEVTVE1PREUsICJ0ZXN0bW9kZSBjbWQgY29uZmlndXJlIik7Ci0KLQlpZiAoIXRiW1dMMTI3MV9UTV9BVFRSX0RBVEFdKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoIXRiW1dMMTI3MV9UTV9BVFRSX0lFX0lEXSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZV9pZCA9IG5sYV9nZXRfdTgodGJbV0wxMjcxX1RNX0FUVFJfSUVfSURdKTsKLQlidWYgPSBubGFfZGF0YSh0YltXTDEyNzFfVE1fQVRUUl9EQVRBXSk7Ci0JYnVmX2xlbiA9IG5sYV9sZW4odGJbV0wxMjcxX1RNX0FUVFJfREFUQV0pOwotCi0JaWYgKGJ1Zl9sZW4gPiBzaXplb2Yoc3RydWN0IHdsMTI3MV9jb21tYW5kKSkKLQkJcmV0dXJuIC1FTVNHU0laRTsKLQotCW11dGV4X2xvY2soJndsLT5tdXRleCk7Ci0JcmV0ID0gd2wxMjcxX2NtZF9jb25maWd1cmUod2wsIGllX2lkLCBidWYsIGJ1Zl9sZW4pOwotCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKLQotCWlmIChyZXQgPCAwKSB7Ci0JCXdsMTI3MV93YXJuaW5nKCJ0ZXN0bW9kZSBjbWQgY29uZmlndXJlIGZhaWxlZDogJWQiLCByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHdsMTI3MV90bV9jbWRfbnZzX3B1c2goc3RydWN0IHdsMTI3MSAqd2wsIHN0cnVjdCBubGF0dHIgKnRiW10pCi17Ci0JaW50IHJldCA9IDA7Ci0Jc2l6ZV90IGxlbjsKLQl2b2lkICpidWY7Ci0KLQl3bDEyNzFfZGVidWcoREVCVUdfVEVTVE1PREUsICJ0ZXN0bW9kZSBjbWQgbnZzIHB1c2giKTsKLQotCWlmICghdGJbV0wxMjcxX1RNX0FUVFJfREFUQV0pCi0JCXJldHVybiAtRUlOVkFMOwotCi0JYnVmID0gbmxhX2RhdGEodGJbV0wxMjcxX1RNX0FUVFJfREFUQV0pOwotCWxlbiA9IG5sYV9sZW4odGJbV0wxMjcxX1RNX0FUVFJfREFUQV0pOwotCi0JbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKLQotCWtmcmVlKHdsLT5udnMpOwotCi0Jd2wtPm52cyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB3bDEyNzFfbnZzX2ZpbGUpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXdsLT5udnMpIHsKLQkJd2wxMjcxX2Vycm9yKCJjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgbnZzIGZpbGUiKTsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JbWVtY3B5KHdsLT5udnMsIGJ1ZiwgbGVuKTsKLQl3bC0+bnZzX2xlbiA9IGxlbjsKLQotCXdsMTI3MV9kZWJ1ZyhERUJVR19URVNUTU9ERSwgInRlc3Rtb2RlIHB1c2hlZCBudnMiKTsKLQotb3V0OgotCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgd2wxMjcxX3RtX2NtZF9zZXRfcGx0X21vZGUoc3RydWN0IHdsMTI3MSAqd2wsIHN0cnVjdCBubGF0dHIgKnRiW10pCi17Ci0JdTMyIHZhbDsKLQlpbnQgcmV0OwotCi0Jd2wxMjcxX2RlYnVnKERFQlVHX1RFU1RNT0RFLCAidGVzdG1vZGUgY21kIHNldCBwbHQgbW9kZSIpOwotCi0JaWYgKCF0YltXTDEyNzFfVE1fQVRUUl9QTFRfTU9ERV0pCi0JCXJldHVybiAtRUlOVkFMOwotCi0JdmFsID0gbmxhX2dldF91MzIodGJbV0wxMjcxX1RNX0FUVFJfUExUX01PREVdKTsKLQotCXN3aXRjaCAodmFsKSB7Ci0JY2FzZSAwOgotCQlyZXQgPSB3bDEyNzFfcGx0X3N0b3Aod2wpOwotCQlicmVhazsKLQljYXNlIDE6Ci0JCXJldCA9IHdsMTI3MV9wbHRfc3RhcnQod2wpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXQgPSAtRUlOVkFMOwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgd2wxMjcxX3RtX2NtZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdm9pZCAqZGF0YSwgaW50IGxlbikKLXsKLQlzdHJ1Y3Qgd2wxMjcxICp3bCA9IGh3LT5wcml2OwotCXN0cnVjdCBubGF0dHIgKnRiW1dMMTI3MV9UTV9BVFRSX01BWCArIDFdOwotCWludCBlcnI7Ci0KLQllcnIgPSBubGFfcGFyc2UodGIsIFdMMTI3MV9UTV9BVFRSX01BWCwgZGF0YSwgbGVuLCB3bDEyNzFfdG1fcG9saWN5KTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JaWYgKCF0YltXTDEyNzFfVE1fQVRUUl9DTURfSURdKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXN3aXRjaCAobmxhX2dldF91MzIodGJbV0wxMjcxX1RNX0FUVFJfQ01EX0lEXSkpIHsKLQljYXNlIFdMMTI3MV9UTV9DTURfVEVTVDoKLQkJcmV0dXJuIHdsMTI3MV90bV9jbWRfdGVzdCh3bCwgdGIpOwotCWNhc2UgV0wxMjcxX1RNX0NNRF9JTlRFUlJPR0FURToKLQkJcmV0dXJuIHdsMTI3MV90bV9jbWRfaW50ZXJyb2dhdGUod2wsIHRiKTsKLQljYXNlIFdMMTI3MV9UTV9DTURfQ09ORklHVVJFOgotCQlyZXR1cm4gd2wxMjcxX3RtX2NtZF9jb25maWd1cmUod2wsIHRiKTsKLQljYXNlIFdMMTI3MV9UTV9DTURfTlZTX1BVU0g6Ci0JCXJldHVybiB3bDEyNzFfdG1fY21kX252c19wdXNoKHdsLCB0Yik7Ci0JY2FzZSBXTDEyNzFfVE1fQ01EX1NFVF9QTFRfTU9ERToKLQkJcmV0dXJuIHdsMTI3MV90bV9jbWRfc2V0X3BsdF9tb2RlKHdsLCB0Yik7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCX0KLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfdGVzdG1vZGUuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfdGVzdG1vZGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzE5NmQyOC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3Rlc3Rtb2RlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMjcxCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uCi0gKgotICogQ29udGFjdDogTHVjaWFubyBDb2VsaG8gPGx1Y2lhbm8uY29lbGhvQG5va2lhLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKLSAqIDAyMTEwLTEzMDEgVVNBCi0gKgotICovCi0KLSNpZm5kZWYgX19XTDEyNzFfVEVTVE1PREVfSF9fCi0jZGVmaW5lIF9fV0wxMjcxX1RFU1RNT0RFX0hfXwotCi0jaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+Ci0KLWludCB3bDEyNzFfdG1fY21kKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB2b2lkICpkYXRhLCBpbnQgbGVuKTsKLQotI2VuZGlmIC8qIF9fV0wxMjcxX1RFU1RNT0RFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV90eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV90eC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlM2RjMTNjLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfdHguYworKysgL2Rldi9udWxsCkBAIC0xLDQzNyArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMjcxCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uCi0gKgotICogQ29udGFjdDogTHVjaWFubyBDb2VsaG8gPGx1Y2lhbm8uY29lbGhvQG5va2lhLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKLSAqIDAyMTEwLTEzMDEgVVNBCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLQotI2luY2x1ZGUgIndsMTI3MS5oIgotI2luY2x1ZGUgIndsMTI3MV9pby5oIgotI2luY2x1ZGUgIndsMTI3MV9yZWcuaCIKLSNpbmNsdWRlICJ3bDEyNzFfcHMuaCIKLSNpbmNsdWRlICJ3bDEyNzFfdHguaCIKLQotc3RhdGljIGludCB3bDEyNzFfdHhfaWQoc3RydWN0IHdsMTI3MSAqd2wsIHN0cnVjdCBza19idWZmICpza2IpCi17Ci0JaW50IGk7Ci0JZm9yIChpID0gMDsgaSA8IEFDWF9UWF9ERVNDUklQVE9SUzsgaSsrKQotCQlpZiAod2wtPnR4X2ZyYW1lc1tpXSA9PSBOVUxMKSB7Ci0JCQl3bC0+dHhfZnJhbWVzW2ldID0gc2tiOwotCQkJd2wtPnR4X2ZyYW1lc19jbnQrKzsKLQkJCXJldHVybiBpOwotCQl9Ci0KLQlyZXR1cm4gLUVCVVNZOwotfQotCi1zdGF0aWMgaW50IHdsMTI3MV90eF9hbGxvY2F0ZShzdHJ1Y3Qgd2wxMjcxICp3bCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGV4dHJhLAotCQkJCXUzMiBidWZfb2Zmc2V0KQotewotCXN0cnVjdCB3bDEyNzFfdHhfaHdfZGVzY3IgKmRlc2M7Ci0JdTMyIHRvdGFsX2xlbiA9IHNrYi0+bGVuICsgc2l6ZW9mKHN0cnVjdCB3bDEyNzFfdHhfaHdfZGVzY3IpICsgZXh0cmE7Ci0JdTMyIHRvdGFsX2Jsb2NrczsKLQlpbnQgaWQsIHJldCA9IC1FQlVTWTsKLQotCWlmIChidWZfb2Zmc2V0ICsgdG90YWxfbGVuID4gV0wxMjcxX0FHR1JfQlVGRkVSX1NJWkUpCi0JCXJldHVybiAtRUJVU1k7Ci0KLQkvKiBhbGxvY2F0ZSBmcmVlIGlkZW50aWZpZXIgZm9yIHRoZSBwYWNrZXQgKi8KLQlpZCA9IHdsMTI3MV90eF9pZCh3bCwgc2tiKTsKLQlpZiAoaWQgPCAwKQotCQlyZXR1cm4gaWQ7Ci0KLQkvKiBhcHByb3hpbWF0ZSB0aGUgbnVtYmVyIG9mIGJsb2NrcyByZXF1aXJlZCBmb3IgdGhpcyBwYWNrZXQKLQkgICBpbiB0aGUgZmlybXdhcmUgKi8KLQl0b3RhbF9ibG9ja3MgPSB0b3RhbF9sZW4gKyBUWF9IV19CTE9DS19TSVpFIC0gMTsKLQl0b3RhbF9ibG9ja3MgPSB0b3RhbF9ibG9ja3MgLyBUWF9IV19CTE9DS19TSVpFICsgVFhfSFdfQkxPQ0tfU1BBUkU7Ci0JaWYgKHRvdGFsX2Jsb2NrcyA8PSB3bC0+dHhfYmxvY2tzX2F2YWlsYWJsZSkgewotCQlkZXNjID0gKHN0cnVjdCB3bDEyNzFfdHhfaHdfZGVzY3IgKilza2JfcHVzaCgKLQkJCXNrYiwgdG90YWxfbGVuIC0gc2tiLT5sZW4pOwotCi0JCWRlc2MtPmV4dHJhX21lbV9ibG9ja3MgPSBUWF9IV19CTE9DS19TUEFSRTsKLQkJZGVzYy0+dG90YWxfbWVtX2Jsb2NrcyA9IHRvdGFsX2Jsb2NrczsKLQkJZGVzYy0+aWQgPSBpZDsKLQotCQl3bC0+dHhfYmxvY2tzX2F2YWlsYWJsZSAtPSB0b3RhbF9ibG9ja3M7Ci0KLQkJcmV0ID0gMDsKLQotCQl3bDEyNzFfZGVidWcoREVCVUdfVFgsCi0JCQkgICAgICJ0eF9hbGxvY2F0ZTogc2l6ZTogJWQsIGJsb2NrczogJWQsIGlkOiAlZCIsCi0JCQkgICAgIHRvdGFsX2xlbiwgdG90YWxfYmxvY2tzLCBpZCk7Ci0JfSBlbHNlIHsKLQkJd2wtPnR4X2ZyYW1lc1tpZF0gPSBOVUxMOwotCQl3bC0+dHhfZnJhbWVzX2NudC0tOwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHdsMTI3MV90eF9maWxsX2hkcihzdHJ1Y3Qgd2wxMjcxICp3bCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgICAgIHUzMiBleHRyYSwgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICpjb250cm9sKQotewotCXN0cnVjdCB0aW1lc3BlYyB0czsKLQlzdHJ1Y3Qgd2wxMjcxX3R4X2h3X2Rlc2NyICpkZXNjOwotCWludCBwYWQsIGFjOwotCXM2NCBob3N0dGltZTsKLQl1MTYgdHhfYXR0cjsKLQotCWRlc2MgPSAoc3RydWN0IHdsMTI3MV90eF9od19kZXNjciAqKSBza2ItPmRhdGE7Ci0KLQkvKiByZWxvY2F0ZSBzcGFjZSBmb3Igc2VjdXJpdHkgaGVhZGVyICovCi0JaWYgKGV4dHJhKSB7Ci0JCXZvaWQgKmZyYW1lc3RhcnQgPSBza2ItPmRhdGEgKyBzaXplb2YoKmRlc2MpOwotCQl1MTYgZmMgPSAqKHUxNiAqKShmcmFtZXN0YXJ0ICsgZXh0cmEpOwotCQlpbnQgaGRybGVuID0gaWVlZTgwMjExX2hkcmxlbihjcHVfdG9fbGUxNihmYykpOwotCQltZW1tb3ZlKGZyYW1lc3RhcnQsIGZyYW1lc3RhcnQgKyBleHRyYSwgaGRybGVuKTsKLQl9Ci0KLQkvKiBjb25maWd1cmUgcGFja2V0IGxpZmUgdGltZSAqLwotCWdldG5zdGltZW9mZGF5KCZ0cyk7Ci0JaG9zdHRpbWUgPSAodGltZXNwZWNfdG9fbnMoJnRzKSA+PiAxMCk7Ci0JZGVzYy0+c3RhcnRfdGltZSA9IGNwdV90b19sZTMyKGhvc3R0aW1lIC0gd2wtPnRpbWVfb2Zmc2V0KTsKLQlkZXNjLT5saWZlX3RpbWUgPSBjcHVfdG9fbGUxNihUWF9IV19NR01UX1BLVF9MSUZFVElNRV9UVSk7Ci0KLQkvKiBjb25maWd1cmUgdGhlIHR4IGF0dHJpYnV0ZXMgKi8KLQl0eF9hdHRyID0gd2wtPnNlc3Npb25fY291bnRlciA8PCBUWF9IV19BVFRSX09GU1RfU0VTU0lPTl9DT1VOVEVSOwotCi0JLyogcXVldWUgKHdlIHVzZSBzYW1lIGlkZW50aWZpZXJzIGZvciB0aWQncyBhbmQgYWMncyAqLwotCWFjID0gd2wxMjcxX3R4X2dldF9xdWV1ZShza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKSk7Ci0JZGVzYy0+dGlkID0gYWM7Ci0KLQlkZXNjLT5haWQgPSBUWF9IV19ERUZBVUxUX0FJRDsKLQlkZXNjLT5yZXNlcnZlZCA9IDA7Ci0KLQkvKiBhbGlnbiB0aGUgbGVuZ3RoIChhbmQgc3RvcmUgaW4gdGVybXMgb2Ygd29yZHMpICovCi0JcGFkID0gV0wxMjcxX1RYX0FMSUdOKHNrYi0+bGVuKTsKLQlkZXNjLT5sZW5ndGggPSBjcHVfdG9fbGUxNihwYWQgPj4gMik7Ci0KLQkvKiBjYWxjdWxhdGUgbnVtYmVyIG9mIHBhZGRpbmcgYnl0ZXMgKi8KLQlwYWQgPSBwYWQgLSBza2ItPmxlbjsKLQl0eF9hdHRyIHw9IHBhZCA8PCBUWF9IV19BVFRSX09GU1RfTEFTVF9XT1JEX1BBRDsKLQotCS8qIGlmIHRoZSBwYWNrZXRzIGFyZSBkZXN0aW5lZCBmb3IgQVAgKGhhdmUgYSBTVEEgZW50cnkpIHNlbmQgdGhlbQotCSAgIHdpdGggQVAgcmF0ZSBwb2xpY2llcywgb3RoZXJ3aXNlIHVzZSBkZWZhdWx0IGJhc2ljIHJhdGVzICovCi0JaWYgKGNvbnRyb2wtPmNvbnRyb2wuc3RhKQotCQl0eF9hdHRyIHw9IEFDWF9UWF9BUF9GVUxMX1JBVEUgPDwgVFhfSFdfQVRUUl9PRlNUX1JBVEVfUE9MSUNZOwotCi0JZGVzYy0+dHhfYXR0ciA9IGNwdV90b19sZTE2KHR4X2F0dHIpOwotCi0Jd2wxMjcxX2RlYnVnKERFQlVHX1RYLCAidHhfZmlsbF9oZHI6IHBhZDogJWQiLCBwYWQpOwotfQotCi0vKiBjYWxsZXIgbXVzdCBob2xkIHdsLT5tdXRleCAqLwotc3RhdGljIGludCB3bDEyNzFfcHJlcGFyZV90eF9mcmFtZShzdHJ1Y3Qgd2wxMjcxICp3bCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkJCQl1MzIgYnVmX29mZnNldCkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm87Ci0JdTMyIGV4dHJhID0gMDsKLQlpbnQgcmV0ID0gMDsKLQl1OCBpZHg7Ci0JdTMyIHRvdGFsX2xlbjsKLQotCWlmICghc2tiKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7Ci0KLQlpZiAoaW5mby0+Y29udHJvbC5od19rZXkgJiYKLQkgICAgaW5mby0+Y29udHJvbC5od19rZXktPmNpcGhlciA9PSBXTEFOX0NJUEhFUl9TVUlURV9US0lQKQotCQlleHRyYSA9IFdMMTI3MV9US0lQX0lWX1NQQUNFOwotCi0JaWYgKGluZm8tPmNvbnRyb2wuaHdfa2V5KSB7Ci0JCWlkeCA9IGluZm8tPmNvbnRyb2wuaHdfa2V5LT5od19rZXlfaWR4OwotCi0JCS8qIEZJWE1FOiBkbyB3ZSBoYXZlIHRvIGRvIHRoaXMgaWYgd2UncmUgbm90IHVzaW5nIFdFUD8gKi8KLQkJaWYgKHVubGlrZWx5KHdsLT5kZWZhdWx0X2tleSAhPSBpZHgpKSB7Ci0JCQlyZXQgPSB3bDEyNzFfY21kX3NldF9kZWZhdWx0X3dlcF9rZXkod2wsIGlkeCk7Ci0JCQlpZiAocmV0IDwgMCkKLQkJCQlyZXR1cm4gcmV0OwotCQkJd2wtPmRlZmF1bHRfa2V5ID0gaWR4OwotCQl9Ci0JfQotCi0JcmV0ID0gd2wxMjcxX3R4X2FsbG9jYXRlKHdsLCBza2IsIGV4dHJhLCBidWZfb2Zmc2V0KTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXdsMTI3MV90eF9maWxsX2hkcih3bCwgc2tiLCBleHRyYSwgaW5mbyk7Ci0KLQkvKgotCSAqIFRoZSBsZW5ndGggb2YgZWFjaCBwYWNrZXQgaXMgc3RvcmVkIGluIHRlcm1zIG9mIHdvcmRzLiBUaHVzLCB3ZSBtdXN0Ci0JICogcGFkIHRoZSBza2IgZGF0YSB0byBtYWtlIHN1cmUgaXRzIGxlbmd0aCBpcyBhbGlnbmVkLgotCSAqIFRoZSBudW1iZXIgb2YgcGFkZGluZyBieXRlcyBpcyBjb21wdXRlZCBhbmQgc2V0IGluIHdsMTI3MV90eF9maWxsX2hkcgotCSAqLwotCXRvdGFsX2xlbiA9IFdMMTI3MV9UWF9BTElHTihza2ItPmxlbik7Ci0JbWVtY3B5KHdsLT5hZ2dyX2J1ZiArIGJ1Zl9vZmZzZXQsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOwotCW1lbXNldCh3bC0+YWdncl9idWYgKyBidWZfb2Zmc2V0ICsgc2tiLT5sZW4sIDAsIHRvdGFsX2xlbiAtIHNrYi0+bGVuKTsKLQotCXJldHVybiB0b3RhbF9sZW47Ci19Ci0KLXUzMiB3bDEyNzFfdHhfZW5hYmxlZF9yYXRlc19nZXQoc3RydWN0IHdsMTI3MSAqd2wsIHUzMiByYXRlX3NldCkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpiYW5kOwotCXUzMiBlbmFibGVkX3JhdGVzID0gMDsKLQlpbnQgYml0OwotCi0JYmFuZCA9IHdsLT5ody0+d2lwaHktPmJhbmRzW3dsLT5iYW5kXTsKLQlmb3IgKGJpdCA9IDA7IGJpdCA8IGJhbmQtPm5fYml0cmF0ZXM7IGJpdCsrKSB7Ci0JCWlmIChyYXRlX3NldCAmIDB4MSkKLQkJCWVuYWJsZWRfcmF0ZXMgfD0gYmFuZC0+Yml0cmF0ZXNbYml0XS5od192YWx1ZTsKLQkJcmF0ZV9zZXQgPj49IDE7Ci0JfQotCi0JcmV0dXJuIGVuYWJsZWRfcmF0ZXM7Ci19Ci0KLXZvaWQgd2wxMjcxX3R4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCB3bDEyNzEgKndsID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3bDEyNzEsIHR4X3dvcmspOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0JYm9vbCB3b2tlbl91cCA9IGZhbHNlOwotCXUzMiBzdGFfcmF0ZXMgPSAwOwotCXUzMiBidWZfb2Zmc2V0OwotCWludCByZXQ7Ci0KLQkvKiBjaGVjayBpZiB0aGUgcmF0ZXMgc3VwcG9ydGVkIGJ5IHRoZSBBUCBoYXZlIGNoYW5nZWQgKi8KLQlpZiAodW5saWtlbHkodGVzdF9hbmRfY2xlYXJfYml0KFdMMTI3MV9GTEFHX1NUQV9SQVRFU19DSEFOR0VELAotCQkJCQkmd2wtPmZsYWdzKSkpIHsKLQkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJndsLT53bF9sb2NrLCBmbGFncyk7Ci0JCXN0YV9yYXRlcyA9IHdsLT5zdGFfcmF0ZV9zZXQ7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndsLT53bF9sb2NrLCBmbGFncyk7Ci0JfQotCi0JbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKLQotCWlmICh1bmxpa2VseSh3bC0+c3RhdGUgPT0gV0wxMjcxX1NUQVRFX09GRikpCi0JCWdvdG8gb3V0OwotCi0JLyogaWYgcmF0ZXMgaGF2ZSBjaGFuZ2VkLCByZS1jb25maWd1cmUgdGhlIHJhdGUgcG9saWN5ICovCi0JaWYgKHVubGlrZWx5KHN0YV9yYXRlcykpIHsKLQkJd2wtPnJhdGVfc2V0ID0gd2wxMjcxX3R4X2VuYWJsZWRfcmF0ZXNfZ2V0KHdsLCBzdGFfcmF0ZXMpOwotCQl3bDEyNzFfYWN4X3JhdGVfcG9saWNpZXMod2wpOwotCX0KLQotCS8qIFByZXBhcmUgdGhlIHRyYW5zZmVyIGJ1ZmZlciwgYnkgYWdncmVnYXRpbmcgYWxsCi0JICogYXZhaWxhYmxlIHBhY2tldHMgKi8KLQlidWZfb2Zmc2V0ID0gMDsKLQl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZ3bC0+dHhfcXVldWUpKSkgewotCQlpZiAoIXdva2VuX3VwKSB7Ci0JCQlyZXQgPSB3bDEyNzFfcHNfZWxwX3dha2V1cCh3bCwgZmFsc2UpOwotCQkJaWYgKHJldCA8IDApCi0JCQkJZ290byBvdXRfYWNrOwotCQkJd29rZW5fdXAgPSB0cnVlOwotCQl9Ci0KLQkJcmV0ID0gd2wxMjcxX3ByZXBhcmVfdHhfZnJhbWUod2wsIHNrYiwgYnVmX29mZnNldCk7Ci0JCWlmIChyZXQgPT0gLUVCVVNZKSB7Ci0JCQkvKgotCQkJICogRWl0aGVyIHRoZSBmaXJtd2FyZSBidWZmZXIgaXMgZnVsbCwgb3IgdGhlCi0JCQkgKiBhZ2dyZWdhdGlvbiBidWZmZXIgaXMuCi0JCQkgKiBRdWV1ZSBiYWNrIGxhc3Qgc2tiLCBhbmQgc3RvcCBhZ2dyZWdhdGluZy4KLQkJCSAqLwotCQkJc2tiX3F1ZXVlX2hlYWQoJndsLT50eF9xdWV1ZSwgc2tiKTsKLQkJCWdvdG8gb3V0X2FjazsKLQkJfSBlbHNlIGlmIChyZXQgPCAwKSB7Ci0JCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCQlnb3RvIG91dF9hY2s7Ci0JCX0KLQkJYnVmX29mZnNldCArPSByZXQ7Ci0JCXdsLT50eF9wYWNrZXRzX2NvdW50Kys7Ci0JfQotCi1vdXRfYWNrOgotCWlmIChidWZfb2Zmc2V0KSB7Ci0JCXdsMTI3MV93cml0ZSh3bCwgV0wxMjcxX1NMVl9NRU1fREFUQSwgd2wtPmFnZ3JfYnVmLAotCQkJCWJ1Zl9vZmZzZXQsIHRydWUpOwotCQkvKiBpbnRlcnJ1cHQgdGhlIGZpcm13YXJlIHdpdGggdGhlIG5ldyBwYWNrZXRzICovCi0JCXdsMTI3MV93cml0ZTMyKHdsLCBXTDEyNzFfSE9TVF9XUl9BQ0NFU1MsIHdsLT50eF9wYWNrZXRzX2NvdW50KTsKLQl9Ci0KLW91dDoKLQlpZiAod29rZW5fdXApCi0JCXdsMTI3MV9wc19lbHBfc2xlZXAod2wpOwotCi0JbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOwotfQotCi1zdGF0aWMgdm9pZCB3bDEyNzFfdHhfY29tcGxldGVfcGFja2V0KHN0cnVjdCB3bDEyNzEgKndsLAotCQkJCSAgICAgIHN0cnVjdCB3bDEyNzFfdHhfaHdfcmVzX2Rlc2NyICpyZXN1bHQpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0JaW50IGlkID0gcmVzdWx0LT5pZDsKLQlpbnQgcmF0ZSA9IC0xOwotCXU4IHJldHJpZXMgPSAwOwotCi0JLyogY2hlY2sgZm9yIGlkIGxlZ2FsaXR5ICovCi0JaWYgKHVubGlrZWx5KGlkID49IEFDWF9UWF9ERVNDUklQVE9SUyB8fCB3bC0+dHhfZnJhbWVzW2lkXSA9PSBOVUxMKSkgewotCQl3bDEyNzFfd2FybmluZygiVFggcmVzdWx0IGlsbGVnYWwgaWQ6ICVkIiwgaWQpOwotCQlyZXR1cm47Ci0JfQotCi0Jc2tiID0gd2wtPnR4X2ZyYW1lc1tpZF07Ci0JaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKLQotCS8qIHVwZGF0ZSB0aGUgVFggc3RhdHVzIGluZm8gKi8KLQlpZiAocmVzdWx0LT5zdGF0dXMgPT0gVFhfU1VDQ0VTUykgewotCQlpZiAoIShpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfTk9fQUNLKSkKLQkJCWluZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUX0FDSzsKLQkJcmF0ZSA9IHdsMTI3MV9yYXRlX3RvX2lkeCh3bCwgcmVzdWx0LT5yYXRlX2NsYXNzX2luZGV4KTsKLQkJcmV0cmllcyA9IHJlc3VsdC0+YWNrX2ZhaWx1cmVzOwotCX0gZWxzZSBpZiAocmVzdWx0LT5zdGF0dXMgPT0gVFhfUkVUUllfRVhDRUVERUQpIHsKLQkJd2wtPnN0YXRzLmV4Y2Vzc2l2ZV9yZXRyaWVzKys7Ci0JCXJldHJpZXMgPSByZXN1bHQtPmFja19mYWlsdXJlczsKLQl9Ci0KLQlpbmZvLT5zdGF0dXMucmF0ZXNbMF0uaWR4ID0gcmF0ZTsKLQlpbmZvLT5zdGF0dXMucmF0ZXNbMF0uY291bnQgPSByZXRyaWVzOwotCWluZm8tPnN0YXR1cy5yYXRlc1swXS5mbGFncyA9IDA7Ci0JaW5mby0+c3RhdHVzLmFja19zaWduYWwgPSAtMTsKLQotCXdsLT5zdGF0cy5yZXRyeV9jb3VudCArPSByZXN1bHQtPmFja19mYWlsdXJlczsKLQotCS8qIHVwZGF0ZSBzZWN1cml0eSBzZXF1ZW5jZSBudW1iZXIgKi8KLQl3bC0+dHhfc2VjdXJpdHlfc2VxICs9IChyZXN1bHQtPmxzYl9zZWN1cml0eV9zZXF1ZW5jZV9udW1iZXIgLQotCQkJCXdsLT50eF9zZWN1cml0eV9sYXN0X3NlcSk7Ci0Jd2wtPnR4X3NlY3VyaXR5X2xhc3Rfc2VxID0gcmVzdWx0LT5sc2Jfc2VjdXJpdHlfc2VxdWVuY2VfbnVtYmVyOwotCi0JLyogcmVtb3ZlIHByaXZhdGUgaGVhZGVyIGZyb20gcGFja2V0ICovCi0Jc2tiX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IHdsMTI3MV90eF9od19kZXNjcikpOwotCi0JLyogcmVtb3ZlIFRLSVAgaGVhZGVyIHNwYWNlIGlmIHByZXNlbnQgKi8KLQlpZiAoaW5mby0+Y29udHJvbC5od19rZXkgJiYKLQkgICAgaW5mby0+Y29udHJvbC5od19rZXktPmNpcGhlciA9PSBXTEFOX0NJUEhFUl9TVUlURV9US0lQKSB7Ci0JCWludCBoZHJsZW4gPSBpZWVlODAyMTFfZ2V0X2hkcmxlbl9mcm9tX3NrYihza2IpOwotCQltZW1tb3ZlKHNrYi0+ZGF0YSArIFdMMTI3MV9US0lQX0lWX1NQQUNFLCBza2ItPmRhdGEsIGhkcmxlbik7Ci0JCXNrYl9wdWxsKHNrYiwgV0wxMjcxX1RLSVBfSVZfU1BBQ0UpOwotCX0KLQotCXdsMTI3MV9kZWJ1ZyhERUJVR19UWCwgInR4IHN0YXR1cyBpZCAldSBza2IgMHglcCBmYWlsdXJlcyAldSByYXRlIDB4JXgiCi0JCSAgICAgIiBzdGF0dXMgMHgleCIsCi0JCSAgICAgcmVzdWx0LT5pZCwgc2tiLCByZXN1bHQtPmFja19mYWlsdXJlcywKLQkJICAgICByZXN1bHQtPnJhdGVfY2xhc3NfaW5kZXgsIHJlc3VsdC0+c3RhdHVzKTsKLQotCS8qIHJldHVybiB0aGUgcGFja2V0IHRvIHRoZSBzdGFjayAqLwotCWllZWU4MDIxMV90eF9zdGF0dXMod2wtPmh3LCBza2IpOwotCXdsLT50eF9mcmFtZXNbcmVzdWx0LT5pZF0gPSBOVUxMOwotCXdsLT50eF9mcmFtZXNfY250LS07Ci19Ci0KLS8qIENhbGxlZCB1cG9uIHJlY2VwdGlvbiBvZiBhIFRYIGNvbXBsZXRlIGludGVycnVwdCAqLwotdm9pZCB3bDEyNzFfdHhfY29tcGxldGUoc3RydWN0IHdsMTI3MSAqd2wpCi17Ci0Jc3RydWN0IHdsMTI3MV9hY3hfbWVtX21hcCAqbWVtbWFwID0KLQkJKHN0cnVjdCB3bDEyNzFfYWN4X21lbV9tYXAgKil3bC0+dGFyZ2V0X21lbV9tYXA7Ci0JdTMyIGNvdW50LCBmd19jb3VudGVyOwotCXUzMiBpOwotCi0JLyogcmVhZCB0aGUgdHggcmVzdWx0cyBmcm9tIHRoZSBjaGlwc2V0ICovCi0Jd2wxMjcxX3JlYWQod2wsIGxlMzJfdG9fY3B1KG1lbW1hcC0+dHhfcmVzdWx0KSwKLQkJICAgIHdsLT50eF9yZXNfaWYsIHNpemVvZigqd2wtPnR4X3Jlc19pZiksIGZhbHNlKTsKLQlmd19jb3VudGVyID0gbGUzMl90b19jcHUod2wtPnR4X3Jlc19pZi0+dHhfcmVzdWx0X2Z3X2NvdW50ZXIpOwotCi0JLyogd3JpdGUgaG9zdCBjb3VudGVyIHRvIGNoaXBzZXQgKHRvIGFjaykgKi8KLQl3bDEyNzFfd3JpdGUzMih3bCwgbGUzMl90b19jcHUobWVtbWFwLT50eF9yZXN1bHQpICsKLQkJICAgICAgIG9mZnNldG9mKHN0cnVjdCB3bDEyNzFfdHhfaHdfcmVzX2lmLAotCQkJCXR4X3Jlc3VsdF9ob3N0X2NvdW50ZXIpLCBmd19jb3VudGVyKTsKLQotCWNvdW50ID0gZndfY291bnRlciAtIHdsLT50eF9yZXN1bHRzX2NvdW50OwotCXdsMTI3MV9kZWJ1ZyhERUJVR19UWCwgInR4X2NvbXBsZXRlIHJlY2VpdmVkLCBwYWNrZXRzOiAlZCIsIGNvdW50KTsKLQotCS8qIHZlcmlmeSB0aGF0IHRoZSByZXN1bHQgYnVmZmVyIGlzIG5vdCBnZXR0aW5nIG92ZXJydW4gKi8KLQlpZiAodW5saWtlbHkoY291bnQgPiBUWF9IV19SRVNVTFRfUVVFVUVfTEVOKSkKLQkJd2wxMjcxX3dhcm5pbmcoIlRYIHJlc3VsdCBvdmVyZmxvdyBmcm9tIGNoaXBzZXQ6ICVkIiwgY291bnQpOwotCi0JLyogcHJvY2VzcyB0aGUgcmVzdWx0cyAqLwotCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0JCXN0cnVjdCB3bDEyNzFfdHhfaHdfcmVzX2Rlc2NyICpyZXN1bHQ7Ci0JCXU4IG9mZnNldCA9IHdsLT50eF9yZXN1bHRzX2NvdW50ICYgVFhfSFdfUkVTVUxUX1FVRVVFX0xFTl9NQVNLOwotCi0JCS8qIHByb2Nlc3MgdGhlIHBhY2tldCAqLwotCQlyZXN1bHQgPSAgJih3bC0+dHhfcmVzX2lmLT50eF9yZXN1bHRzX3F1ZXVlW29mZnNldF0pOwotCQl3bDEyNzFfdHhfY29tcGxldGVfcGFja2V0KHdsLCByZXN1bHQpOwotCi0JCXdsLT50eF9yZXN1bHRzX2NvdW50Kys7Ci0JfQotCi0JaWYgKHRlc3RfYml0KFdMMTI3MV9GTEFHX1RYX1FVRVVFX1NUT1BQRUQsICZ3bC0+ZmxhZ3MpICYmCi0JICAgIHNrYl9xdWV1ZV9sZW4oJndsLT50eF9xdWV1ZSkgPD0gV0wxMjcxX1RYX1FVRVVFX0xPV19XQVRFUk1BUkspIHsKLQkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCQkvKiBmaXJtd2FyZSBidWZmZXIgaGFzIHNwYWNlLCByZXN0YXJ0IHF1ZXVlcyAqLwotCQl3bDEyNzFfZGVidWcoREVCVUdfVFgsICJ0eF9jb21wbGV0ZTogd2FraW5nIHF1ZXVlcyIpOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmd2wtPndsX2xvY2ssIGZsYWdzKTsKLQkJaWVlZTgwMjExX3dha2VfcXVldWVzKHdsLT5odyk7Ci0JCWNsZWFyX2JpdChXTDEyNzFfRkxBR19UWF9RVUVVRV9TVE9QUEVELCAmd2wtPmZsYWdzKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2wtPndsX2xvY2ssIGZsYWdzKTsKLQkJaWVlZTgwMjExX3F1ZXVlX3dvcmsod2wtPmh3LCAmd2wtPnR4X3dvcmspOwotCX0KLX0KLQotLyogY2FsbGVyIG11c3QgaG9sZCB3bC0+bXV0ZXggKi8KLXZvaWQgd2wxMjcxX3R4X3Jlc2V0KHN0cnVjdCB3bDEyNzEgKndsKQotewotCWludCBpOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0KLQkvKiBUWCBmYWlsdXJlICovCi0Jd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmd2wtPnR4X3F1ZXVlKSkpIHsKLQkJd2wxMjcxX2RlYnVnKERFQlVHX1RYLCAiZnJlZWluZyBza2IgMHglcCIsIHNrYik7Ci0JCWllZWU4MDIxMV90eF9zdGF0dXMod2wtPmh3LCBza2IpOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBBQ1hfVFhfREVTQ1JJUFRPUlM7IGkrKykKLQkJaWYgKHdsLT50eF9mcmFtZXNbaV0gIT0gTlVMTCkgewotCQkJc2tiID0gd2wtPnR4X2ZyYW1lc1tpXTsKLQkJCXdsLT50eF9mcmFtZXNbaV0gPSBOVUxMOwotCQkJd2wxMjcxX2RlYnVnKERFQlVHX1RYLCAiZnJlZWluZyBza2IgMHglcCIsIHNrYik7Ci0JCQlpZWVlODAyMTFfdHhfc3RhdHVzKHdsLT5odywgc2tiKTsKLQkJfQotCXdsLT50eF9mcmFtZXNfY250ID0gMDsKLX0KLQotI2RlZmluZSBXTDEyNzFfVFhfRkxVU0hfVElNRU9VVCA1MDAwMDAKLQotLyogY2FsbGVyIG11c3QgKk5PVCogaG9sZCB3bC0+bXV0ZXggKi8KLXZvaWQgd2wxMjcxX3R4X2ZsdXNoKHN0cnVjdCB3bDEyNzEgKndsKQotewotCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKLQl0aW1lb3V0ID0gamlmZmllcyArIHVzZWNzX3RvX2ppZmZpZXMoV0wxMjcxX1RYX0ZMVVNIX1RJTUVPVVQpOwotCi0Jd2hpbGUgKCF0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7Ci0JCW11dGV4X2xvY2soJndsLT5tdXRleCk7Ci0JCXdsMTI3MV9kZWJ1ZyhERUJVR19UWCwgImZsdXNoaW5nIHR4IGJ1ZmZlcjogJWQiLAotCQkJICAgICB3bC0+dHhfZnJhbWVzX2NudCk7Ci0JCWlmICgod2wtPnR4X2ZyYW1lc19jbnQgPT0gMCkgJiYKLQkJICAgIHNrYl9xdWV1ZV9lbXB0eSgmd2wtPnR4X3F1ZXVlKSkgewotCQkJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOwotCQkJcmV0dXJuOwotCQl9Ci0JCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKLQkJbXNsZWVwKDEpOwotCX0KLQotCXdsMTI3MV93YXJuaW5nKCJVbmFibGUgdG8gZmx1c2ggYWxsIFRYIGJ1ZmZlcnMsIHRpbWVkIG91dC4iKTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfdHguaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfdHguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDEyYTEyOS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3R4LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNDkgKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdsMTI3MQotICoKLSAqIENvcHlyaWdodCAoQykgMTk5OC0yMDA5IFRleGFzIEluc3RydW1lbnRzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uCi0gKgotICogQ29udGFjdDogTHVjaWFubyBDb2VsaG8gPGx1Y2lhbm8uY29lbGhvQG5va2lhLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKLSAqIDAyMTEwLTEzMDEgVVNBCi0gKgotICovCi0KLSNpZm5kZWYgX19XTDEyNzFfVFhfSF9fCi0jZGVmaW5lIF9fV0wxMjcxX1RYX0hfXwotCi0jZGVmaW5lIFRYX0hXX0JMT0NLX1NQQVJFICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgVFhfSFdfQkxPQ0tfU0laRSAgICAgICAgICAgICAgICAgMjUyCi0KLSNkZWZpbmUgVFhfSFdfTUdNVF9QS1RfTElGRVRJTUVfVFUgICAgICAgMjAwMAotLyogVGhlIGNoaXBzZXQgcmVmZXJlbmNlIGRyaXZlciBzdGF0ZXMsIHRoYXQgdGhlICJhaWQiIHZhbHVlIDEKLSAqIGlzIGZvciBpbmZyYS1CU1MsIGJ1dCBpcyBzdGlsbCBhbHdheXMgdXNlZCAqLwotI2RlZmluZSBUWF9IV19ERUZBVUxUX0FJRCAgICAgICAgICAgICAgICAxCi0KLSNkZWZpbmUgVFhfSFdfQVRUUl9TQVZFX1JFVFJJRVMgICAgICAgICAgQklUKDApCi0jZGVmaW5lIFRYX0hXX0FUVFJfSEVBREVSX1BBRCAgICAgICAgICAgIEJJVCgxKQotI2RlZmluZSBUWF9IV19BVFRSX1NFU1NJT05fQ09VTlRFUiAgICAgICAoQklUKDIpIHwgQklUKDMpIHwgQklUKDQpKQotI2RlZmluZSBUWF9IV19BVFRSX1JBVEVfUE9MSUNZICAgICAgICAgICAoQklUKDUpIHwgQklUKDYpIHwgQklUKDcpIHwgXAotCQkJCQkgIEJJVCg4KSB8IEJJVCg5KSkKLSNkZWZpbmUgVFhfSFdfQVRUUl9MQVNUX1dPUkRfUEFEICAgICAgICAgKEJJVCgxMCkgfCBCSVQoMTEpKQotI2RlZmluZSBUWF9IV19BVFRSX1RYX0NNUExUX1JFUSAgICAgICAgICBCSVQoMTIpCi0KLSNkZWZpbmUgVFhfSFdfQVRUUl9PRlNUX1NBVkVfUkVUUklFUyAgICAgMAotI2RlZmluZSBUWF9IV19BVFRSX09GU1RfSEVBREVSX1BBRCAgICAgICAxCi0jZGVmaW5lIFRYX0hXX0FUVFJfT0ZTVF9TRVNTSU9OX0NPVU5URVIgIDIKLSNkZWZpbmUgVFhfSFdfQVRUUl9PRlNUX1JBVEVfUE9MSUNZICAgICAgNQotI2RlZmluZSBUWF9IV19BVFRSX09GU1RfTEFTVF9XT1JEX1BBRCAgICAxMAotI2RlZmluZSBUWF9IV19BVFRSX09GU1RfVFhfQ01QTFRfUkVRICAgICAxMgotCi0jZGVmaW5lIFRYX0hXX1JFU1VMVF9RVUVVRV9MRU4gICAgICAgICAgIDE2Ci0jZGVmaW5lIFRYX0hXX1JFU1VMVF9RVUVVRV9MRU5fTUFTSyAgICAgIDB4ZgotCi0jZGVmaW5lIFdMMTI3MV9UWF9BTElHTl9UTyA0Ci0jZGVmaW5lIFdMMTI3MV9UWF9BTElHTihsZW4pICgoKGxlbikgKyBXTDEyNzFfVFhfQUxJR05fVE8gLSAxKSAmIFwKLQkJCSAgICAgfihXTDEyNzFfVFhfQUxJR05fVE8gLSAxKSkKLSNkZWZpbmUgV0wxMjcxX1RLSVBfSVZfU1BBQ0UgNAotCi1zdHJ1Y3Qgd2wxMjcxX3R4X2h3X2Rlc2NyIHsKLQkvKiBMZW5ndGggb2YgcGFja2V0IGluIHdvcmRzLCBpbmNsdWRpbmcgZGVzY3JpcHRvcitoZWFkZXIrZGF0YSAqLwotCV9fbGUxNiBsZW5ndGg7Ci0JLyogTnVtYmVyIG9mIGV4dHJhIG1lbW9yeSBibG9ja3MgdG8gYWxsb2NhdGUgZm9yIHRoaXMgcGFja2V0IGluCi0JICAgYWRkaXRpb24gdG8gdGhlIG51bWJlciBvZiBibG9ja3MgZGVyaXZlZCBmcm9tIHRoZSBwYWNrZXQgbGVuZ3RoICovCi0JdTggZXh0cmFfbWVtX2Jsb2NrczsKLQkvKiBUb3RhbCBudW1iZXIgb2YgbWVtb3J5IGJsb2NrcyBhbGxvY2F0ZWQgYnkgdGhlIGhvc3QgZm9yIHRoaXMgcGFja2V0LgotCSAgIE11c3QgYmUgZXF1YWwgb3IgZ3JlYXRlciB0aGFuIHRoZSBhY3R1YWwgYmxvY2tzIG51bWJlciBhbGxvY2F0ZWQgYnkKLQkgICBIVyEhICovCi0JdTggdG90YWxfbWVtX2Jsb2NrczsKLQkvKiBEZXZpY2UgdGltZSAoaW4gdXMpIHdoZW4gdGhlIHBhY2tldCBhcnJpdmVkIHRvIHRoZSBkcml2ZXIgKi8KLQlfX2xlMzIgc3RhcnRfdGltZTsKLQkvKiBNYXggZGVsYXkgaW4gVFVzIHVudGlsIHRyYW5zbWlzc2lvbi4gVGhlIGxhc3QgZGV2aWNlIHRpbWUgdGhlCi0JICAgcGFja2V0IGNhbiBiZSB0cmFuc21pdHRlZCBpczogc3RhcnRUaW1lKygxMDI0KkxpZmVUaW1lKSAqLwotCV9fbGUxNiBsaWZlX3RpbWU7Ci0JLyogQml0d2lzZSBmaWVsZHMgLSBzZWUgVFhfQVRUUi4uLiBkZWZpbml0aW9ucyBhYm92ZS4gKi8KLQlfX2xlMTYgdHhfYXR0cjsKLQkvKiBQYWNrZXQgaWRlbnRpZmllciB1c2VkIGFsc28gaW4gdGhlIFR4LVJlc3VsdC4gKi8KLQl1OCBpZDsKLQkvKiBUaGUgcGFja2V0IFRJRCB2YWx1ZSAoYXMgVXNlci1Qcmlvcml0eSkgKi8KLQl1OCB0aWQ7Ci0JLyogSWRlbnRpZmllciBvZiB0aGUgcmVtb3RlIFNUQSBpbiBJQlNTLCAxIGluIGluZnJhLUJTUyAqLwotCXU4IGFpZDsKLQl1OCByZXNlcnZlZDsKLX0gX19wYWNrZWQ7Ci0KLWVudW0gd2wxMjcxX3R4X2h3X3Jlc19zdGF0dXMgewotCVRYX1NVQ0NFU1MgICAgICAgICAgPSAwLAotCVRYX0hXX0VSUk9SICAgICAgICAgPSAxLAotCVRYX0RJU0FCTEVEICAgICAgICAgPSAyLAotCVRYX1JFVFJZX0VYQ0VFREVEICAgPSAzLAotCVRYX1RJTUVPVVQgICAgICAgICAgPSA0LAotCVRYX0tFWV9OT1RfRk9VTkQgICAgPSA1LAotCVRYX1BFRVJfTk9UX0ZPVU5EICAgPSA2LAotCVRYX1NFU1NJT05fTUlTTUFUQ0ggPSA3Ci19OwotCi1zdHJ1Y3Qgd2wxMjcxX3R4X2h3X3Jlc19kZXNjciB7Ci0JLyogUGFja2V0IElkZW50aWZpZXIgLSBzYW1lIHZhbHVlIHVzZWQgaW4gdGhlIFR4IGRlc2NyaXB0b3IuKi8KLQl1OCBpZDsKLQkvKiBUaGUgc3RhdHVzIG9mIHRoZSB0cmFuc21pc3Npb24sIGluZGljYXRpbmcgc3VjY2VzcyBvciBvbmUgb2YKLQkgICBzZXZlcmFsIHBvc3NpYmxlIHJlYXNvbnMgZm9yIGZhaWx1cmUuICovCi0JdTggc3RhdHVzOwotCS8qIFRvdGFsIGFpciBhY2Nlc3MgZHVyYXRpb24gaW5jbHVkaW5nIGFsbCByZXRyeXMgYW5kIG92ZXJoZWFkcy4qLwotCV9fbGUxNiBtZWRpdW1fdXNhZ2U7Ci0JLyogVGhlIHRpbWUgcGFzc2VkIGZyb20gaG9zdCB4ZmVyIHRvIFR4LWNvbXBsZXRlLiovCi0JX19sZTMyIGZ3X2hhbmRsaW5nX3RpbWU7Ci0JLyogVG90YWwgbWVkaWEgZGVsYXkKLQkgICAoZnJvbSAxc3QgRURDQSBBSUZTIGNvdW50ZXIgdW50aWwgVFggQ29tcGxldGUpLiAqLwotCV9fbGUzMiBtZWRpdW1fZGVsYXk7Ci0JLyogTFMtYnl0ZSBvZiBsYXN0IFRLSVAgc2VxLW51bSAoc2F2ZWQgcGVyIEFDIGZvciByZWNvdmVyeSkuICovCi0JdTggbHNiX3NlY3VyaXR5X3NlcXVlbmNlX251bWJlcjsKLQkvKiBSZXRyeSBjb3VudCAtIG51bWJlciBvZiB0cmFuc21pc3Npb25zIHdpdGhvdXQgc3VjY2Vzc2Z1bCBBQ0suKi8KLQl1OCBhY2tfZmFpbHVyZXM7Ci0JLyogVGhlIHJhdGUgdGhhdCBzdWNjZWVkZWQgZ2V0dGluZyBBQ0sKLQkgICAoVmFsaWQgb25seSBpZiBzdGF0dXM9U1VDQ0VTUykuICovCi0JdTggcmF0ZV9jbGFzc19pbmRleDsKLQkvKiBmb3IgNC1ieXRlIGFsaWdubWVudC4gKi8KLQl1OCBzcGFyZTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCB3bDEyNzFfdHhfaHdfcmVzX2lmIHsKLQlfX2xlMzIgdHhfcmVzdWx0X2Z3X2NvdW50ZXI7Ci0JX19sZTMyIHR4X3Jlc3VsdF9ob3N0X2NvdW50ZXI7Ci0Jc3RydWN0IHdsMTI3MV90eF9od19yZXNfZGVzY3IgdHhfcmVzdWx0c19xdWV1ZVtUWF9IV19SRVNVTFRfUVVFVUVfTEVOXTsKLX0gX19wYWNrZWQ7Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHdsMTI3MV90eF9nZXRfcXVldWUoaW50IHF1ZXVlKQotewotCXN3aXRjaCAocXVldWUpIHsKLQljYXNlIDA6Ci0JCXJldHVybiBDT05GX1RYX0FDX1ZPOwotCWNhc2UgMToKLQkJcmV0dXJuIENPTkZfVFhfQUNfVkk7Ci0JY2FzZSAyOgotCQlyZXR1cm4gQ09ORl9UWF9BQ19CRTsKLQljYXNlIDM6Ci0JCXJldHVybiBDT05GX1RYX0FDX0JLOwotCWRlZmF1bHQ6Ci0JCXJldHVybiBDT05GX1RYX0FDX0JFOwotCX0KLX0KLQotdm9pZCB3bDEyNzFfdHhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwotdm9pZCB3bDEyNzFfdHhfY29tcGxldGUoc3RydWN0IHdsMTI3MSAqd2wpOwotdm9pZCB3bDEyNzFfdHhfcmVzZXQoc3RydWN0IHdsMTI3MSAqd2wpOwotdm9pZCB3bDEyNzFfdHhfZmx1c2goc3RydWN0IHdsMTI3MSAqd2wpOwotdTggd2wxMjcxX3JhdGVfdG9faWR4KHN0cnVjdCB3bDEyNzEgKndsLCBpbnQgcmF0ZSk7Ci11MzIgd2wxMjcxX3R4X2VuYWJsZWRfcmF0ZXNfZ2V0KHN0cnVjdCB3bDEyNzEgKndsLCB1MzIgcmF0ZV9zZXQpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyeHguaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyeHguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTNkMzFmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTJ4eC5oCkBAIC0wLDAgKzEsNDI2IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMjcxCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4LTIwMDkgVGV4YXMgSW5zdHJ1bWVudHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIENvbnRhY3Q6IEx1Y2lhbm8gQ29lbGhvIDxsdWNpYW5vLmNvZWxob0Bub2tpYS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQQorICoKKyAqLworCisjaWZuZGVmIF9fV0wxMlhYX0hfXworI2RlZmluZSBfX1dMMTJYWF9IX18KKworI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgorCisjaW5jbHVkZSAiY29uZi5oIgorI2luY2x1ZGUgImluaS5oIgorCisjZGVmaW5lIERSSVZFUl9OQU1FICJ3bDEyNzEiCisjZGVmaW5lIERSSVZFUl9QUkVGSVggRFJJVkVSX05BTUUgIjogIgorCitlbnVtIHsKKwlERUJVR19OT05FCT0gMCwKKwlERUJVR19JUlEJPSBCSVQoMCksCisJREVCVUdfU1BJCT0gQklUKDEpLAorCURFQlVHX0JPT1QJPSBCSVQoMiksCisJREVCVUdfTUFJTEJPWAk9IEJJVCgzKSwKKwlERUJVR19URVNUTU9ERQk9IEJJVCg0KSwKKwlERUJVR19FVkVOVAk9IEJJVCg1KSwKKwlERUJVR19UWAk9IEJJVCg2KSwKKwlERUJVR19SWAk9IEJJVCg3KSwKKwlERUJVR19TQ0FOCT0gQklUKDgpLAorCURFQlVHX0NSWVBUCT0gQklUKDkpLAorCURFQlVHX1BTTQk9IEJJVCgxMCksCisJREVCVUdfTUFDODAyMTEJPSBCSVQoMTEpLAorCURFQlVHX0NNRAk9IEJJVCgxMiksCisJREVCVUdfQUNYCT0gQklUKDEzKSwKKwlERUJVR19TRElPCT0gQklUKDE0KSwKKwlERUJVR19GSUxURVJTICAgPSBCSVQoMTUpLAorCURFQlVHX0FESE9DICAgICA9IEJJVCgxNiksCisJREVCVUdfQUxMCT0gfjAsCit9OworCitleHRlcm4gdTMyIHdsMTJ4eF9kZWJ1Z19sZXZlbDsKKworI2RlZmluZSBERUJVR19EVU1QX0xJTUlUIDEwMjQKKworI2RlZmluZSB3bDEyNzFfZXJyb3IoZm10LCBhcmcuLi4pIFwKKwlwcl9lcnIoRFJJVkVSX1BSRUZJWCAiRVJST1IgIiBmbXQgIlxuIiwgIyNhcmcpCisKKyNkZWZpbmUgd2wxMjcxX3dhcm5pbmcoZm10LCBhcmcuLi4pIFwKKwlwcl93YXJuaW5nKERSSVZFUl9QUkVGSVggIldBUk5JTkcgIiBmbXQgIlxuIiwgIyNhcmcpCisKKyNkZWZpbmUgd2wxMjcxX25vdGljZShmbXQsIGFyZy4uLikgXAorCXByX2luZm8oRFJJVkVSX1BSRUZJWCBmbXQgIlxuIiwgIyNhcmcpCisKKyNkZWZpbmUgd2wxMjcxX2luZm8oZm10LCBhcmcuLi4pIFwKKwlwcl9pbmZvKERSSVZFUl9QUkVGSVggZm10ICJcbiIsICMjYXJnKQorCisjZGVmaW5lIHdsMTI3MV9kZWJ1ZyhsZXZlbCwgZm10LCBhcmcuLi4pIFwKKwlkbyB7IFwKKwkJaWYgKGxldmVsICYgd2wxMnh4X2RlYnVnX2xldmVsKSBcCisJCQlwcl9kZWJ1ZyhEUklWRVJfUFJFRklYIGZtdCAiXG4iLCAjI2FyZyk7IFwKKwl9IHdoaWxlICgwKQorCisvKiBUT0RPOiB1c2UgcHJfZGVidWdfaGV4X2R1bXAgd2hlbiBpdCB3aWxsIGJlIGF2YWlsYWJsZSAqLworI2RlZmluZSB3bDEyNzFfZHVtcChsZXZlbCwgcHJlZml4LCBidWYsIGxlbikJXAorCWRvIHsgXAorCQlpZiAobGV2ZWwgJiB3bDEyeHhfZGVidWdfbGV2ZWwpIFwKKwkJCXByaW50X2hleF9kdW1wKEtFUk5fREVCVUcsIERSSVZFUl9QUkVGSVggcHJlZml4LCBcCisJCQkJICAgICAgIERVTVBfUFJFRklYX09GRlNFVCwgMTYsIDEsCVwKKwkJCQkgICAgICAgYnVmLAkJCQlcCisJCQkJICAgICAgIG1pbl90KHNpemVfdCwgbGVuLCBERUJVR19EVU1QX0xJTUlUKSwgXAorCQkJCSAgICAgICAwKTsJCQkJXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgd2wxMjcxX2R1bXBfYXNjaWkobGV2ZWwsIHByZWZpeCwgYnVmLCBsZW4pCVwKKwlkbyB7IFwKKwkJaWYgKGxldmVsICYgd2wxMnh4X2RlYnVnX2xldmVsKSBcCisJCQlwcmludF9oZXhfZHVtcChLRVJOX0RFQlVHLCBEUklWRVJfUFJFRklYIHByZWZpeCwgXAorCQkJCSAgICAgICBEVU1QX1BSRUZJWF9PRkZTRVQsIDE2LCAxLAlcCisJCQkJICAgICAgIGJ1ZiwJCQkJXAorCQkJCSAgICAgICBtaW5fdChzaXplX3QsIGxlbiwgREVCVUdfRFVNUF9MSU1JVCksIFwKKwkJCQkgICAgICAgdHJ1ZSk7CQkJCVwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIFdMMTI3MV9ERUZBVUxUX1JYX0NPTkZJRyAoQ0ZHX1VOSV9GSUxURVJfRU4gfAlcCisJCQkJICBDRkdfQlNTSURfRklMVEVSX0VOIHwgXAorCQkJCSAgQ0ZHX01DX0ZJTFRFUl9FTikKKworI2RlZmluZSBXTDEyNzFfREVGQVVMVF9SWF9GSUxURVIgKENGR19SWF9SQ1RTX0FDSyB8IENGR19SWF9QUlNQX0VOIHwgIFwKKwkJCQkgIENGR19SWF9NR01UX0VOIHwgQ0ZHX1JYX0RBVEFfRU4gfCAgIFwKKwkJCQkgIENGR19SWF9DVExfRU4gfCBDRkdfUlhfQkNOX0VOIHwgICAgIFwKKwkJCQkgIENGR19SWF9BVVRIX0VOIHwgQ0ZHX1JYX0FTU09DX0VOKQorCisjZGVmaW5lIFdMMTI3MV9GV19OQU1FICJ3bDEyNzEtZncuYmluIgorI2RlZmluZSBXTDEyNzFfTlZTX05BTUUgIndsMTI3MS1udnMuYmluIgorCisjZGVmaW5lIFdMMTI3MV9UWF9TRUNVUklUWV9MTzE2KHMpICgodTE2KSgocykgJiAweGZmZmYpKQorI2RlZmluZSBXTDEyNzFfVFhfU0VDVVJJVFlfSEkzMihzKSAoKHUzMikoKChzKSA+PiAxNikgJiAweGZmZmZmZmZmKSkKKworI2RlZmluZSBXTDEyNzFfQ0lQSEVSX1NVSVRFX0dFTSAweDAwMTQ3MjAxCisKKyNkZWZpbmUgV0wxMjcxX0JVU1lfV09SRF9DTlQgMQorI2RlZmluZSBXTDEyNzFfQlVTWV9XT1JEX0xFTiAoV0wxMjcxX0JVU1lfV09SRF9DTlQgKiBzaXplb2YodTMyKSkKKworI2RlZmluZSBXTDEyNzFfRUxQX0hXX1NUQVRFX0FTTEVFUCAwCisjZGVmaW5lIFdMMTI3MV9FTFBfSFdfU1RBVEVfSVJRICAgIDEKKworI2RlZmluZSBXTDEyNzFfREVGQVVMVF9CRUFDT05fSU5UICAxMDAKKyNkZWZpbmUgV0wxMjcxX0RFRkFVTFRfRFRJTV9QRVJJT0QgMQorCisjZGVmaW5lIEFDWF9UWF9ERVNDUklQVE9SUyAgICAgICAgIDMyCisKKyNkZWZpbmUgV0wxMjcxX0FHR1JfQlVGRkVSX1NJWkUgKDQgKiBQQUdFX1NJWkUpCisKK2VudW0gd2wxMjcxX3N0YXRlIHsKKwlXTDEyNzFfU1RBVEVfT0ZGLAorCVdMMTI3MV9TVEFURV9PTiwKKwlXTDEyNzFfU1RBVEVfUExULAorfTsKKworZW51bSB3bDEyNzFfcGFydGl0aW9uX3R5cGUgeworCVBBUlRfRE9XTiwKKwlQQVJUX1dPUkssCisJUEFSVF9EUlBXLAorCisJUEFSVF9UQUJMRV9MRU4KK307CisKK3N0cnVjdCB3bDEyNzFfcGFydGl0aW9uIHsKKwl1MzIgc2l6ZTsKKwl1MzIgc3RhcnQ7Cit9OworCitzdHJ1Y3Qgd2wxMjcxX3BhcnRpdGlvbl9zZXQgeworCXN0cnVjdCB3bDEyNzFfcGFydGl0aW9uIG1lbTsKKwlzdHJ1Y3Qgd2wxMjcxX3BhcnRpdGlvbiByZWc7CisJc3RydWN0IHdsMTI3MV9wYXJ0aXRpb24gbWVtMjsKKwlzdHJ1Y3Qgd2wxMjcxX3BhcnRpdGlvbiBtZW0zOworfTsKKworc3RydWN0IHdsMTI3MTsKKworLyogRklYTUU6IEknbSBub3Qgc3VyZSBhYm91dCB0aGlzIHN0cnVjdHVyZSBuYW1lICovCitzdHJ1Y3Qgd2wxMjcxX2NoaXAgeworCXUzMiBpZDsKKwljaGFyIGZ3X3ZlclsyMV07Cit9OworCitzdHJ1Y3Qgd2wxMjcxX3N0YXRzIHsKKwlzdHJ1Y3QgYWN4X3N0YXRpc3RpY3MgKmZ3X3N0YXRzOworCXVuc2lnbmVkIGxvbmcgZndfc3RhdHNfdXBkYXRlOworCisJdW5zaWduZWQgaW50IHJldHJ5X2NvdW50OworCXVuc2lnbmVkIGludCBleGNlc3NpdmVfcmV0cmllczsKK307CisKKyNkZWZpbmUgTlVNX1RYX1FVRVVFUyAgICAgICAgICAgICAgNAorI2RlZmluZSBOVU1fUlhfUEtUX0RFU0MgICAgICAgICAgICA4CisKKy8qIEZXIHN0YXR1cyByZWdpc3RlcnMgKi8KK3N0cnVjdCB3bDEyNzFfZndfc3RhdHVzIHsKKwlfX2xlMzIgaW50cjsKKwl1OCAgZndfcnhfY291bnRlcjsKKwl1OCAgZHJ2X3J4X2NvdW50ZXI7CisJdTggIHJlc2VydmVkOworCXU4ICB0eF9yZXN1bHRzX2NvdW50ZXI7CisJX19sZTMyIHJ4X3BrdF9kZXNjc1tOVU1fUlhfUEtUX0RFU0NdOworCV9fbGUzMiB0eF9yZWxlYXNlZF9ibGtzW05VTV9UWF9RVUVVRVNdOworCV9fbGUzMiBmd19sb2NhbHRpbWU7CisJX19sZTMyIHBhZGRpbmdbMl07Cit9IF9fcGFja2VkOworCitzdHJ1Y3Qgd2wxMjcxX3J4X21lbV9wb29sX2FkZHIgeworCXUzMiBhZGRyOworCXUzMiBhZGRyX2V4dHJhOworfTsKKworc3RydWN0IHdsMTI3MV9zY2FuIHsKKwlzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXE7CisJYm9vbCAqc2Nhbm5lZF9jaDsKKwlib29sIGZhaWxlZDsKKwl1OCBzdGF0ZTsKKwl1OCBzc2lkW0lXX0VTU0lEX01BWF9TSVpFKzFdOworCXNpemVfdCBzc2lkX2xlbjsKK307CisKK3N0cnVjdCB3bDEyNzFfaWZfb3BlcmF0aW9ucyB7CisJdm9pZCAoKnJlYWQpKHN0cnVjdCB3bDEyNzEgKndsLCBpbnQgYWRkciwgdm9pZCAqYnVmLCBzaXplX3QgbGVuLAorCQkgICAgIGJvb2wgZml4ZWQpOworCXZvaWQgKCp3cml0ZSkoc3RydWN0IHdsMTI3MSAqd2wsIGludCBhZGRyLCB2b2lkICpidWYsIHNpemVfdCBsZW4sCisJCSAgICAgYm9vbCBmaXhlZCk7CisJdm9pZCAoKnJlc2V0KShzdHJ1Y3Qgd2wxMjcxICp3bCk7CisJdm9pZCAoKmluaXQpKHN0cnVjdCB3bDEyNzEgKndsKTsKKwlpbnQgKCpwb3dlcikoc3RydWN0IHdsMTI3MSAqd2wsIGJvb2wgZW5hYmxlKTsKKwlzdHJ1Y3QgZGV2aWNlKiAoKmRldikoc3RydWN0IHdsMTI3MSAqd2wpOworCXZvaWQgKCplbmFibGVfaXJxKShzdHJ1Y3Qgd2wxMjcxICp3bCk7CisJdm9pZCAoKmRpc2FibGVfaXJxKShzdHJ1Y3Qgd2wxMjcxICp3bCk7Cit9OworCitzdHJ1Y3Qgd2wxMjcxIHsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0X2RldjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKKwlib29sIG1hYzgwMjExX3JlZ2lzdGVyZWQ7CisKKwl2b2lkICppZl9wcml2OworCisJc3RydWN0IHdsMTI3MV9pZl9vcGVyYXRpb25zICppZl9vcHM7CisKKwl2b2lkICgqc2V0X3Bvd2VyKShib29sIGVuYWJsZSk7CisJaW50IGlycTsKKwlpbnQgcmVmX2Nsb2NrOworCisJc3BpbmxvY2tfdCB3bF9sb2NrOworCisJZW51bSB3bDEyNzFfc3RhdGUgc3RhdGU7CisJc3RydWN0IG11dGV4IG11dGV4OworCisjZGVmaW5lIFdMMTI3MV9GTEFHX1NUQV9SQVRFU19DSEFOR0VEICAoMCkKKyNkZWZpbmUgV0wxMjcxX0ZMQUdfU1RBX0FTU09DSUFURUQgICAgICgxKQorI2RlZmluZSBXTDEyNzFfRkxBR19KT0lORUQgICAgICAgICAgICAgKDIpCisjZGVmaW5lIFdMMTI3MV9GTEFHX0dQSU9fUE9XRVIgICAgICAgICAoMykKKyNkZWZpbmUgV0wxMjcxX0ZMQUdfVFhfUVVFVUVfU1RPUFBFRCAgICg0KQorI2RlZmluZSBXTDEyNzFfRkxBR19JTl9FTFAgICAgICAgICAgICAgKDUpCisjZGVmaW5lIFdMMTI3MV9GTEFHX1BTTSAgICAgICAgICAgICAgICAoNikKKyNkZWZpbmUgV0wxMjcxX0ZMQUdfUFNNX1JFUVVFU1RFRCAgICAgICg3KQorI2RlZmluZSBXTDEyNzFfRkxBR19JUlFfUEVORElORyAgICAgICAgKDgpCisjZGVmaW5lIFdMMTI3MV9GTEFHX0lSUV9SVU5OSU5HICAgICAgICAoOSkKKyNkZWZpbmUgV0wxMjcxX0ZMQUdfSURMRSAgICAgICAgICAgICAgKDEwKQorI2RlZmluZSBXTDEyNzFfRkxBR19JRExFX1JFUVVFU1RFRCAgICAoMTEpCisjZGVmaW5lIFdMMTI3MV9GTEFHX1BTUE9MTF9GQUlMVVJFICAgICgxMikKKyNkZWZpbmUgV0wxMjcxX0ZMQUdfU1RBX1NUQVRFX1NFTlQgICAgKDEzKQorI2RlZmluZSBXTDEyNzFfRkxBR19GV19UWF9CVVNZICAgICAgICAoMTQpCisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXN0cnVjdCB3bDEyNzFfcGFydGl0aW9uX3NldCBwYXJ0OworCisJc3RydWN0IHdsMTI3MV9jaGlwIGNoaXA7CisKKwlpbnQgY21kX2JveF9hZGRyOworCWludCBldmVudF9ib3hfYWRkcjsKKworCXU4ICpmdzsKKwlzaXplX3QgZndfbGVuOworCXN0cnVjdCB3bDEyNzFfbnZzX2ZpbGUgKm52czsKKwlzaXplX3QgbnZzX2xlbjsKKworCXM4IGh3X3BnX3ZlcjsKKworCXU4IGJzc2lkW0VUSF9BTEVOXTsKKwl1OCBtYWNfYWRkcltFVEhfQUxFTl07CisJdTggYnNzX3R5cGU7CisJdTggc2V0X2Jzc190eXBlOworCXU4IHNzaWRbSVdfRVNTSURfTUFYX1NJWkUgKyAxXTsKKwl1OCBzc2lkX2xlbjsKKwlpbnQgY2hhbm5lbDsKKworCXN0cnVjdCB3bDEyNzFfYWN4X21lbV9tYXAgKnRhcmdldF9tZW1fbWFwOworCisJLyogQWNjb3VudGluZyBmb3IgYWxsb2NhdGVkIC8gYXZhaWxhYmxlIFRYIGJsb2NrcyBvbiBIVyAqLworCXUzMiB0eF9ibG9ja3NfZnJlZWRbTlVNX1RYX1FVRVVFU107CisJdTMyIHR4X2Jsb2Nrc19hdmFpbGFibGU7CisJdTMyIHR4X3Jlc3VsdHNfY291bnQ7CisKKwkvKiBUcmFuc21pdHRlZCBUWCBwYWNrZXRzIGNvdW50ZXIgZm9yIGNoaXBzZXQgaW50ZXJmYWNlICovCisJdTMyIHR4X3BhY2tldHNfY291bnQ7CisKKwkvKiBUaW1lLW9mZnNldCBiZXR3ZWVuIGhvc3QgYW5kIGNoaXBzZXQgY2xvY2tzICovCisJczY0IHRpbWVfb2Zmc2V0OworCisJLyogU2Vzc2lvbiBjb3VudGVyIGZvciB0aGUgY2hpcHNldCAqLworCWludCBzZXNzaW9uX2NvdW50ZXI7CisKKwkvKiBGcmFtZXMgc2NoZWR1bGVkIGZvciB0cmFuc21pc3Npb24sIG5vdCBoYW5kbGVkIHlldCAqLworCXN0cnVjdCBza19idWZmX2hlYWQgdHhfcXVldWVbTlVNX1RYX1FVRVVFU107CisJaW50IHR4X3F1ZXVlX2NvdW50OworCisJc3RydWN0IHdvcmtfc3RydWN0IHR4X3dvcms7CisKKwkvKiBQZW5kaW5nIFRYIGZyYW1lcyAqLworCXVuc2lnbmVkIGxvbmcgdHhfZnJhbWVzX21hcFtCSVRTX1RPX0xPTkdTKEFDWF9UWF9ERVNDUklQVE9SUyldOworCXN0cnVjdCBza19idWZmICp0eF9mcmFtZXNbQUNYX1RYX0RFU0NSSVBUT1JTXTsKKwlpbnQgdHhfZnJhbWVzX2NudDsKKworCS8qIFNlY3VyaXR5IHNlcXVlbmNlIG51bWJlciBjb3VudGVycyAqLworCXU4IHR4X3NlY3VyaXR5X2xhc3Rfc2VxOworCXM2NCB0eF9zZWN1cml0eV9zZXE7CisKKwkvKiBGVyBSeCBjb3VudGVyICovCisJdTMyIHJ4X2NvdW50ZXI7CisKKwkvKiBSeCBtZW1vcnkgcG9vbCBhZGRyZXNzICovCisJc3RydWN0IHdsMTI3MV9yeF9tZW1fcG9vbF9hZGRyIHJ4X21lbV9wb29sX2FkZHI7CisKKwkvKiBJbnRlcm1lZGlhdGUgYnVmZmVyLCB1c2VkIGZvciBwYWNrZXQgYWdncmVnYXRpb24gKi8KKwl1OCAqYWdncl9idWY7CisKKwkvKiBUaGUgdGFyZ2V0IGludGVycnVwdCBtYXNrICovCisJc3RydWN0IHdvcmtfc3RydWN0IGlycV93b3JrOworCisJLyogSGFyZHdhcmUgcmVjb3Zlcnkgd29yayAqLworCXN0cnVjdCB3b3JrX3N0cnVjdCByZWNvdmVyeV93b3JrOworCisJLyogVGhlIG1ib3ggZXZlbnQgbWFzayAqLworCXUzMiBldmVudF9tYXNrOworCisJLyogTWFpbGJveCBwb2ludGVycyAqLworCXUzMiBtYm94X3B0clsyXTsKKworCS8qIEFyZSB3ZSBjdXJyZW50bHkgc2Nhbm5pbmcgKi8KKwlzdHJ1Y3Qgd2wxMjcxX3NjYW4gc2NhbjsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIHNjYW5fY29tcGxldGVfd29yazsKKworCS8qIHByb2JlLXJlcSB0ZW1wbGF0ZSBmb3IgdGhlIGN1cnJlbnQgQVAgKi8KKwlzdHJ1Y3Qgc2tfYnVmZiAqcHJvYmVyZXE7CisKKwkvKiBPdXIgYXNzb2NpYXRpb24gSUQgKi8KKwl1MTYgYWlkOworCisJLyoKKwkgKiBjdXJyZW50bHkgY29uZmlndXJlZCByYXRlIHNldDoKKwkgKgliaXRzICAwLTE1IC0gODAyLjExYWJnIHJhdGVzCisJICoJYml0cyAxNi0yMyAtIDgwMi4xMW4gICBNQ1MgaW5kZXggbWFzaworCSAqIHN1cHBvcnQgb25seSAxIHN0cmVhbSwgdGh1cyBvbmx5IDggYml0cyBmb3IgdGhlIE1DUyByYXRlcyAoMC03KS4KKwkgKi8KKwl1MzIgc3RhX3JhdGVfc2V0OworCXUzMiBiYXNpY19yYXRlX3NldDsKKwl1MzIgYmFzaWNfcmF0ZTsKKwl1MzIgcmF0ZV9zZXQ7CisKKwkvKiBUaGUgY3VycmVudCBiYW5kICovCisJZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kOworCisJLyogQmVhY29uaW5nIGludGVydmFsIChuZWVkZWQgZm9yIGFkLWhvYykgKi8KKwl1MzIgYmVhY29uX2ludDsKKworCS8qIERlZmF1bHQga2V5IChmb3IgV0VQKSAqLworCXUzMiBkZWZhdWx0X2tleTsKKworCXVuc2lnbmVkIGludCBmaWx0ZXJzOworCXVuc2lnbmVkIGludCByeF9jb25maWc7CisJdW5zaWduZWQgaW50IHJ4X2ZpbHRlcjsKKworCXN0cnVjdCBjb21wbGV0aW9uICplbHBfY29tcGw7CisJc3RydWN0IGRlbGF5ZWRfd29yayBlbHBfd29yazsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIHBzcG9sbF93b3JrOworCisJLyogY291bnRlciBmb3IgcHMtcG9sbCBkZWxpdmVyeSBmYWlsdXJlcyAqLworCWludCBwc19wb2xsX2ZhaWx1cmVzOworCisJLyogcmV0cnkgY291bnRlciBmb3IgUFNNIGVudHJpZXMgKi8KKwl1OCBwc21fZW50cnlfcmV0cnk7CisKKwkvKiBpbiBkQm0gKi8KKwlpbnQgcG93ZXJfbGV2ZWw7CisKKwlpbnQgcnNzaV90aG9sZDsKKwlpbnQgbGFzdF9yc3NpX2V2ZW50OworCisJc3RydWN0IHdsMTI3MV9zdGF0cyBzdGF0czsKKwlzdHJ1Y3QgZGVudHJ5ICpyb290ZGlyOworCisJX19sZTMyIGJ1ZmZlcl8zMjsKKwl1MzIgYnVmZmVyX2NtZDsKKwl1MzIgYnVmZmVyX2J1c3l3b3JkW1dMMTI3MV9CVVNZX1dPUkRfQ05UXTsKKworCXN0cnVjdCB3bDEyNzFfZndfc3RhdHVzICpmd19zdGF0dXM7CisJc3RydWN0IHdsMTI3MV90eF9od19yZXNfaWYgKnR4X3Jlc19pZjsKKworCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWY7CisKKwkvKiBDdXJyZW50IGNoaXBzZXQgY29uZmlndXJhdGlvbiAqLworCXN0cnVjdCBjb25mX2Rydl9zZXR0aW5ncyBjb25mOworCisJYm9vbCBzZ19lbmFibGVkOworCisJYm9vbCBlbmFibGVfMTFhOworCisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCisJLyogTW9zdCByZWNlbnRseSByZXBvcnRlZCBub2lzZSBpbiBkQm0gKi8KKwlzOCBub2lzZTsKK307CisKK2ludCB3bDEyNzFfcGx0X3N0YXJ0KHN0cnVjdCB3bDEyNzEgKndsKTsKK2ludCB3bDEyNzFfcGx0X3N0b3Aoc3RydWN0IHdsMTI3MSAqd2wpOworCisjZGVmaW5lIEpPSU5fVElNRU9VVCA1MDAwIC8qIDUwMDAgbWlsbGlzZWNvbmRzIHRvIGpvaW4gKi8KKworI2RlZmluZSBTRVNTSU9OX0NPVU5URVJfTUFYIDcgLyogbWF4aW11bSB2YWx1ZSBmb3IgdGhlIHNlc3Npb24gY291bnRlciAqLworCisjZGVmaW5lIFdMMTI3MV9ERUZBVUxUX1BPV0VSX0xFVkVMIDAKKworI2RlZmluZSBXTDEyNzFfVFhfUVVFVUVfTE9XX1dBVEVSTUFSSyAgMTAKKyNkZWZpbmUgV0wxMjcxX1RYX1FVRVVFX0hJR0hfV0FURVJNQVJLIDI1CisKKy8qIFdMMTI3MSBuZWVkcyBhIDIwMG1zIHNsZWVwIGFmdGVyIHBvd2VyIG9uLCBhbmQgYSAyMG1zIHNsZWVwIGJlZm9yZSBwb3dlcgorICAgb24gaW4gY2FzZSBpcyBoYXMgYmVlbiBzaHV0IGRvd24gc2hvcnRseSBiZWZvcmUgKi8KKyNkZWZpbmUgV0wxMjcxX1BSRV9QT1dFUl9PTl9TTEVFUCAyMCAvKiBpbiBtaWxpc2Vjb25kcyAqLworI2RlZmluZSBXTDEyNzFfUE9XRVJfT05fU0xFRVAgMjAwIC8qIGluIG1pbGlzZWNvbmRzICovCisKKy8qIE1hY3JvcyB0byBoYW5kbGUgd2wxMjcxLnN0YV9yYXRlX3NldCAqLworI2RlZmluZSBIV19CR19SQVRFU19NQVNLCTB4ZmZmZgorI2RlZmluZSBIV19IVF9SQVRFU19PRkZTRVQJMTYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMnh4XzgwMjExLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMnh4XzgwMjExLmgKaW5kZXggMTg0NjI4MC4uYmUyMTAzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTJ4eF84MDIxMS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyeHhfODAyMTEuaApAQCAtMiw2ICsyLDcgQEAKICNkZWZpbmUgX19XTDEyWFhfODAyMTFfSF9fCiAKICNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgkvKiBFVEhfQUxFTiAqLworI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgogCiAvKiBSQVRFUyAqLwogI2RlZmluZSBJRUVFODAyMTFfQ0NLX1JBVEVfMU1CCQkgICAgICAgIDB4MDIKQEAgLTEzMywxMSArMTM0LDE3IEBACiAJX19sZTE2IHFvc19jdGw7CiB9IF9fcGFja2VkOwogCi1zdHJ1Y3Qgd2wxMnh4X3Byb2JlX3JlcV90ZW1wbGF0ZSB7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZWFkZXIgaGVhZGVyOwotCXN0cnVjdCB3bDEyeHhfaWVfc3NpZCBzc2lkOwotCXN0cnVjdCB3bDEyeHhfaWVfcmF0ZXMgcmF0ZXM7Ci0Jc3RydWN0IHdsMTJ4eF9pZV9yYXRlcyBleHRfcmF0ZXM7CitzdHJ1Y3Qgd2wxMnh4X2FycF9yc3BfdGVtcGxhdGUgeworCXN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyIGhkcjsKKworCXU4IGxsY19oZHJbc2l6ZW9mKHJmYzEwNDJfaGVhZGVyKV07CisJdTE2IGxsY190eXBlOworCisJc3RydWN0IGFycGhkciBhcnBfaGRyOworCXU4IHNlbmRlcl9od1tFVEhfQUxFTl07CisJdTMyIHNlbmRlcl9pcDsKKwl1OCB0YXJnZXRfaHdbRVRIX0FMRU5dOworCXUzMiB0YXJnZXRfaXA7CiB9IF9fcGFja2VkOwogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIwMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjAxLmMKaW5kZXggMzkwZDc3Zi4uNDE1ZWVjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjAxLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjAxLmMKQEAgLTMwLDYgKzMwLDcgQEAKIAl7VVNCX0RFVklDRSgweDBhY2UsIDB4MTIwMSl9LCAvKiBaeURBUyBaRDEyMDEgV2lyZWxlc3MgVVNCIEFkYXB0ZXIgKi8KIAl7VVNCX0RFVklDRSgweDA1MGQsIDB4NjA1MSl9LCAvKiBCZWxraW4gRjVENjA1MSB1c2IgIGFkYXB0ZXIgKi8KIAl7VVNCX0RFVklDRSgweDBkYjAsIDB4NjgyMyl9LCAvKiBNU0kgVUIxMUIgdXNiICBhZGFwdGVyICovCisJe1VTQl9ERVZJQ0UoMHgxMDQ0LCAweDgwMDQpfSwgLyogR2lnYWJ5dGUgR04tV0xCWjEwMSAqLwogCXtVU0JfREVWSUNFKDB4MTA0NCwgMHg4MDA1KX0sIC8qIEdJR0FCWVRFIEdOLVdMQloyMDEgdXNiIGFkYXB0ZXIgKi8KIAl7fQogfTsKQEAgLTE4MjksNyArMTgzMCw3IEBACiAKIHN0YXRpYyB2b2lkIHpkMTIwMV9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCiB7Ci0Jc3RydWN0IHpkMTIwMSAqemQ9KHN0cnVjdCB6ZDEyMDEgKil1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisJc3RydWN0IHpkMTIwMSAqemQgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CiAJc3RydWN0IGhsaXN0X25vZGUgKm5vZGUsICpub2RlMjsKIAlzdHJ1Y3QgemQxMjAxX2ZyYWcgKmZyYWc7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX2NoaXAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX2NoaXAuYwppbmRleCA4N2E5NWJjLi42YTliNjYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9jaGlwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfY2hpcC5jCkBAIC0xMTcsNiArMTE3LDcgQEAKIAogCS8qIEFsbG9jYXRlIGEgc2luZ2xlIG1lbW9yeSBibG9jayBmb3IgdmFsdWVzIGFuZCBhZGRyZXNzZXMuICovCiAJY291bnQxNiA9IDIqY291bnQ7CisJLyogemRfYWRkcl90IGlzIF9fbm9jYXN0LCBzbyB0aGUga21hbGxvYyBuZWVkcyBhbiBleHBsaWNpdCBjYXN0ICovCiAJYTE2ID0gKHpkX2FkZHJfdCAqKSBrbWFsbG9jKGNvdW50MTYgKiAoc2l6ZW9mKHpkX2FkZHJfdCkgKyBzaXplb2YodTE2KSksCiAJCSAgICAgICAgICAgICAgICAgICBHRlBfS0VSTkVMKTsKIAlpZiAoIWExNikgewpAQCAtMTQ0OCw3ICsxNDQ5LDcgQEAKICAqLwogaW50IHpkX3Jmd3JpdGVfY3JfbG9ja2VkKHN0cnVjdCB6ZF9jaGlwICpjaGlwLCB1MzIgdmFsdWUpCiB7Ci0Jc3RydWN0IHpkX2lvcmVxMTYgaW9yZXFzW10gPSB7CisJY29uc3Qgc3RydWN0IHpkX2lvcmVxMTYgaW9yZXFzW10gPSB7CiAJCXsgQ1IyNDQsICh2YWx1ZSA+PiAxNikgJiAweGZmIH0sCiAJCXsgQ1IyNDMsICh2YWx1ZSA+PiAgOCkgJiAweGZmIH0sCiAJCXsgQ1IyNDIsICB2YWx1ZSAgICAgICAgJiAweGZmIH0sCkBAIC0xNDc1LDcgKzE0NzYsNyBAQAogaW50IHpkX2NoaXBfc2V0X211bHRpY2FzdF9oYXNoKHN0cnVjdCB6ZF9jaGlwICpjaGlwLAogCSAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHpkX21jX2hhc2ggKmhhc2gpCiB7Ci0Jc3RydWN0IHpkX2lvcmVxMzIgaW9yZXFzW10gPSB7CisJY29uc3Qgc3RydWN0IHpkX2lvcmVxMzIgaW9yZXFzW10gPSB7CiAJCXsgQ1JfR1JPVVBfSEFTSF9QMSwgaGFzaC0+bG93IH0sCiAJCXsgQ1JfR1JPVVBfSEFTSF9QMiwgaGFzaC0+aGlnaCB9LAogCX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9tYWMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX21hYy5jCmluZGV4IDQzMzA3YmQuLjYxMDczMDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX21hYy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX21hYy5jCkBAIC0xMjA3LDcgKzEyMDcsNiBAQAogc3RhdGljIHZvaWQgaG91c2VrZWVwaW5nX2Rpc2FibGUoc3RydWN0IHpkX21hYyAqbWFjKQogewogCWRldl9kYmdfZih6ZF9tYWNfZGV2KG1hYyksICJcbiIpOwotCWNhbmNlbF9yZWFybWluZ19kZWxheWVkX3dvcmtxdWV1ZSh6ZF93b3JrcXVldWUsCi0JCSZtYWMtPmhvdXNla2VlcGluZy5saW5rX2xlZF93b3JrKTsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJm1hYy0+aG91c2VrZWVwaW5nLmxpbmtfbGVkX3dvcmspOwogCXpkX2NoaXBfY29udHJvbF9sZWRzKCZtYWMtPmNoaXAsIFpEX0xFRF9PRkYpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfdXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF91c2IuYwppbmRleCA4MThlMTQ4MC4uMDYwNDFjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfdXNiLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfdXNiLmMKQEAgLTU1LDYgKzU1LDcgQEAKIAl7IFVTQl9ERVZJQ0UoMHgxMjliLCAweDE2NjYpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExIH0sCiAJeyBVU0JfREVWSUNFKDB4MTNiMSwgMHgwMDFlKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMSB9LAogCXsgVVNCX0RFVklDRSgweDE0MzUsIDB4MDcxMSksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTEgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxNGVhLCAweGFiMTApLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExIH0sCiAJeyBVU0JfREVWSUNFKDB4MTRlYSwgMHhhYjEzKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMSB9LAogCXsgVVNCX0RFVklDRSgweDE1N2UsIDB4MzAwYSksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTEgfSwKIAl7IFVTQl9ERVZJQ0UoMHgxNTdlLCAweDMwMGIpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExIH0sCkBAIC05Miw2ICs5Myw3IEBACiAJeyBVU0JfREVWSUNFKDB4MTU3ZSwgMHgzMDBkKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMUIgfSwKIAl7IFVTQl9ERVZJQ0UoMHgxNTgyLCAweDYwMDMpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExQiB9LAogCXsgVVNCX0RFVklDRSgweDIwMTksIDB4NTMwMyksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTFCIH0sCisJeyBVU0JfREVWSUNFKDB4MjAxOSwgMHhlZDAxKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMUIgfSwKIAkvKiAiRHJpdmVybGVzcyIgZGV2aWNlcyB0aGF0IG5lZWQgZWplY3RpbmcgKi8KIAl7IFVTQl9ERVZJQ0UoMHgwYWNlLCAweDIwMTEpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfSU5TVEFMTEVSIH0sCiAJeyBVU0JfREVWSUNFKDB4MGFjZSwgMHgyMGZmKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX0lOU1RBTExFUiB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQveGlsaW54X2VtYWNsaXRlLmMgYi9kcml2ZXJzL25ldC94aWxpbnhfZW1hY2xpdGUuYwppbmRleCAxNGYwOTU1Li5kZTZjMzA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC94aWxpbnhfZW1hY2xpdGUuYworKysgYi9kcml2ZXJzL25ldC94aWxpbnhfZW1hY2xpdGUuYwpAQCAtNTE1LDcgKzUxNSw3IEBACiAgKi8KIHN0YXRpYyBpbnQgeGVtYWNsaXRlX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICphZGRyZXNzKQogewotCXN0cnVjdCBuZXRfbG9jYWwgKmxwID0gKHN0cnVjdCBuZXRfbG9jYWwgKikgbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IHNvY2thZGRyICphZGRyID0gYWRkcmVzczsKIAogCWlmIChuZXRpZl9ydW5uaW5nKGRldikpCkBAIC01MzQsNyArNTM0LDcgQEAKICAqLwogc3RhdGljIHZvaWQgeGVtYWNsaXRlX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgbmV0X2xvY2FsICpscCA9IChzdHJ1Y3QgbmV0X2xvY2FsICopIG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlkZXZfZXJyKCZscC0+bmRldi0+ZGV2LCAiRXhjZWVkZWQgdHJhbnNtaXQgdGltZW91dCBvZiAlbHUgbXNcbiIsCkBAIC01NzgsNyArNTc4LDcgQEAKICAqLwogc3RhdGljIHZvaWQgeGVtYWNsaXRlX3R4X2hhbmRsZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgbmV0X2xvY2FsICpscCA9IChzdHJ1Y3QgbmV0X2xvY2FsICopIG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CiAJaWYgKGxwLT5kZWZlcnJlZF9za2IpIHsKQEAgLTYwNSw3ICs2MDUsNyBAQAogICovCiBzdGF0aWMgdm9pZCB4ZW1hY2xpdGVfcnhfaGFuZGxlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBuZXRfbG9jYWwgKmxwID0gKHN0cnVjdCBuZXRfbG9jYWwgKikgbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAl1bnNpZ25lZCBpbnQgYWxpZ247CiAJdTMyIGxlbjsKQEAgLTY2MSw3ICs2NjEsNyBAQAogewogCWJvb2wgdHhfY29tcGxldGUgPSAwOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkZXZfaWQ7Ci0Jc3RydWN0IG5ldF9sb2NhbCAqbHAgPSAoc3RydWN0IG5ldF9sb2NhbCAqKSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl2b2lkIF9faW9tZW0gKmJhc2VfYWRkciA9IGxwLT5iYXNlX2FkZHI7CiAJdTMyIHR4X3N0YXR1czsKIApAQCAtOTE4LDcgKzkxOCw3IEBACiAgKi8KIHN0YXRpYyBpbnQgeGVtYWNsaXRlX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgbmV0X2xvY2FsICpscCA9IChzdHJ1Y3QgbmV0X2xvY2FsICopIG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCByZXR2YWw7CiAKIAkvKiBKdXN0IHRvIGJlIHNhZmUsIHN0b3AgdGhlIGRldmljZSBmaXJzdCAqLwpAQCAtOTg3LDcgKzk4Nyw3IEBACiAgKi8KIHN0YXRpYyBpbnQgeGVtYWNsaXRlX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IG5ldF9sb2NhbCAqbHAgPSAoc3RydWN0IG5ldF9sb2NhbCAqKSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAl4ZW1hY2xpdGVfZGlzYWJsZV9pbnRlcnJ1cHRzKGxwKTsKQEAgLTEwMDEsMjEgKzEwMDEsNiBAQAogfQogCiAvKioKLSAqIHhlbWFjbGl0ZV9nZXRfc3RhdHMgLSBHZXQgdGhlIHN0YXRzIGZvciB0aGUgbmV0X2RldmljZQotICogQGRldjoJUG9pbnRlciB0byB0aGUgbmV0d29yayBkZXZpY2UKLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGFkZHJlc3Mgb2YgdGhlICduZXRfZGV2aWNlX3N0YXRzJyBzdHJ1Y3R1cmUgZm9yIHRoZQotICogZ2l2ZW4gbmV0d29yayBkZXZpY2UuIFRoaXMgc3RydWN0dXJlIGhvbGRzIHVzYWdlIHN0YXRpc3RpY3MgZm9yIHRoZSBuZXR3b3JrCi0gKiBkZXZpY2UuCi0gKgotICogUmV0dXJuOglQb2ludGVyIHRvIHRoZSBuZXRfZGV2aWNlX3N0YXRzIHN0cnVjdHVyZS4KLSAqLwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICp4ZW1hY2xpdGVfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuICZkZXYtPnN0YXRzOwotfQotCi0vKioKICAqIHhlbWFjbGl0ZV9zZW5kIC0gVHJhbnNtaXQgYSBmcmFtZQogICogQG9yaWdfc2tiOglQb2ludGVyIHRvIHRoZSBzb2NrZXQgYnVmZmVyIHRvIGJlIHRyYW5zbWl0dGVkCiAgKiBAZGV2OglQb2ludGVyIHRvIHRoZSBuZXR3b3JrIGRldmljZQpAQCAtMTAzMSw3ICsxMDE2LDcgQEAKICAqLwogc3RhdGljIGludCB4ZW1hY2xpdGVfc2VuZChzdHJ1Y3Qgc2tfYnVmZiAqb3JpZ19za2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IG5ldF9sb2NhbCAqbHAgPSAoc3RydWN0IG5ldF9sb2NhbCAqKSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqbmV3X3NrYjsKIAl1bnNpZ25lZCBpbnQgbGVuOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0xMDY4LDcgKzEwNTMsNyBAQAogc3RhdGljIHZvaWQgeGVtYWNsaXRlX3JlbW92ZV9uZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogewogCWlmIChuZGV2KSB7Ci0JCXN0cnVjdCBuZXRfbG9jYWwgKmxwID0gKHN0cnVjdCBuZXRfbG9jYWwgKikgbmV0ZGV2X3ByaXYobmRldik7CisJCXN0cnVjdCBuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYobmRldik7CiAKIAkJaWYgKGxwLT5iYXNlX2FkZHIpCiAJCQlpb3VubWFwKCh2b2lkIF9faW9tZW0gX19mb3JjZSAqKSAobHAtPmJhc2VfYWRkcikpOwpAQCAtMTI0NSw3ICsxMjMwLDcgQEAKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmb2ZfZGV2LT5kZXY7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAotCXN0cnVjdCBuZXRfbG9jYWwgKmxwID0gKHN0cnVjdCBuZXRfbG9jYWwgKikgbmV0ZGV2X3ByaXYobmRldik7CisJc3RydWN0IG5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAogCS8qIFVuLXJlZ2lzdGVyIHRoZSBtaWlfYnVzLCBpZiBjb25maWd1cmVkICovCiAJaWYgKGxwLT5oYXNfbWRpbykgewpAQCAtMTI4NSw3ICsxMjcwLDYgQEAKIAkubmRvX3N0YXJ0X3htaXQJCT0geGVtYWNsaXRlX3NlbmQsCiAJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSB4ZW1hY2xpdGVfc2V0X21hY19hZGRyZXNzLAogCS5uZG9fdHhfdGltZW91dAkJPSB4ZW1hY2xpdGVfdHhfdGltZW91dCwKLQkubmRvX2dldF9zdGF0cwkJPSB4ZW1hY2xpdGVfZ2V0X3N0YXRzLAogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCiAJLm5kb19wb2xsX2NvbnRyb2xsZXIgPSB4ZW1hY2xpdGVfcG9sbF9jb250cm9sbGVyLAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC96bmV0LmMgYi9kcml2ZXJzL25ldC96bmV0LmMKaW5kZXggYzNhMzI5Mi4uYWUwN2IzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvem5ldC5jCisrKyBiL2RyaXZlcnMvbmV0L3puZXQuYwpAQCAtMTI0LDcgKzEyNCw3IEBACiAjZGVmaW5lIFRYX0JVRl9TSVpFIDgxOTIKICNkZWZpbmUgRE1BX0JVRl9TSVpFIChSWF9CVUZfU0laRSArIDE2KQkvKiA4ayArIDE2IGJ5dGVzIGZvciB0cmFpbGVycyAqLwogCi0jZGVmaW5lIFRYX1RJTUVPVVQJMTAKKyNkZWZpbmUgVFhfVElNRU9VVAkoSFovMTApCiAKIHN0cnVjdCB6bmV0X3ByaXZhdGUgewogCWludCByeF9kbWEsIHR4X2RtYTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL0tjb25maWcgYi9kcml2ZXJzL3BjbWNpYS9LY29uZmlnCmluZGV4IGM4MGE3YTYuLmRlODg2ZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL0tjb25maWcKKysrIGIvZHJpdmVycy9wY21jaWEvS2NvbmZpZwpAQCAtMjE1LDcgKzIxNSw4IEBACiAJZGVwZW5kcyBvbiAoQVJDSF9MVUJCT0NLIHx8IE1BQ0hfTUFJTlNUT05FIHx8IFBYQV9TSEFSUFNMIFwKIAkJICAgIHx8IE1BQ0hfQVJNQ09SRSB8fCBBUkNIX1BYQV9QQUxNIHx8IFRSSVpFUFNfUENNQ0lBIFwKIAkJICAgIHx8IEFSQ09NX1BDTUNJQSB8fCBBUkNIX1BYQV9FU0VSSUVTIHx8IE1BQ0hfU1RBUkdBVEUyIFwKLQkJICAgIHx8IE1BQ0hfVlBBQzI3MCB8fCBNQUNIX0JBTExPT04zKQorCQkgICAgfHwgTUFDSF9WUEFDMjcwIHx8IE1BQ0hfQkFMTE9PTjMgfHwgTUFDSF9DT0xJQlJJIFwKKwkJICAgIHx8IE1BQ0hfQ09MSUJSSTMyMCkKIAlzZWxlY3QgUENNQ0lBX1NPQ19DT01NT04KIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIFBYQTJ4eCBQQ01DSUEgY29udHJvbGxlcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvTWFrZWZpbGUgYi9kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZQppbmRleCA4ZDkzODZhLi4yOTkzNWVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZQpAQCAtNTAsOCArNTAsOSBAQAogc2ExMTAwX2NzLXkJCQkJCSs9IHNhMTEwMF9nZW5lcmljLm8KIHNhMTEwMF9jcy0kKENPTkZJR19TQTExMDBfQVNTQUJFVCkJCSs9IHNhMTEwMF9hc3NhYmV0Lm8KIHNhMTEwMF9jcy0kKENPTkZJR19TQTExMDBfQ0VSRikJCQkrPSBzYTExMDBfY2VyZi5vCi1zYTExMDBfY3MtJChDT05GSUdfU0ExMTAwX0NPTExJRSkgICAgICAgICAgICAgICs9IHB4YTJ4eF9zaGFycHNsLm8KK3NhMTEwMF9jcy0kKENPTkZJR19TQTExMDBfQ09MTElFKQkJKz0gcHhhMnh4X3NoYXJwc2wubwogc2ExMTAwX2NzLSQoQ09ORklHX1NBMTEwMF9IMzYwMCkJCSs9IHNhMTEwMF9oMzYwMC5vCitzYTExMDBfY3MtJChDT05GSUdfU0ExMTAwX05BTk9FTkdJTkUpCQkrPSBzYTExMDBfbmFub2VuZ2luZS5vCiBzYTExMDBfY3MtJChDT05GSUdfU0ExMTAwX1NIQU5OT04pCQkrPSBzYTExMDBfc2hhbm5vbi5vCiBzYTExMDBfY3MtJChDT05GSUdfU0ExMTAwX1NJTVBBRCkJCSs9IHNhMTEwMF9zaW1wYWQubwogCkBAIC03MCw2ICs3MSw4IEBACiBweGEyeHgtb2JqLSQoQ09ORklHX01BQ0hfU1RBUkdBVEUyKQkJKz0gcHhhMnh4X3N0YXJnYXRlMi5vCiBweGEyeHgtb2JqLSQoQ09ORklHX01BQ0hfVlBBQzI3MCkJCSs9IHB4YTJ4eF92cGFjMjcwLm8KIHB4YTJ4eC1vYmotJChDT05GSUdfTUFDSF9CQUxMT09OMykJCSs9IHB4YTJ4eF9iYWxsb29uMy5vCitweGEyeHgtb2JqLSQoQ09ORklHX01BQ0hfQ09MSUJSSSkJCSs9IHB4YTJ4eF9jb2xpYnJpLm8KK3B4YTJ4eC1vYmotJChDT05GSUdfTUFDSF9DT0xJQlJJMzIwKQkJKz0gcHhhMnh4X2NvbGlicmkubwogCiBvYmotJChDT05GSUdfUENNQ0lBX1BYQTJYWCkJCQkrPSBweGEyeHhfYmFzZS5vICQocHhhMnh4LW9iai15KQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfYmFsbG9vbjMuYyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9iYWxsb29uMy5jCmluZGV4IGRiYmRkMDAuLjQ1M2M1NGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9iYWxsb29uMy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9iYWxsb29uMy5jCkBAIC0zOSwxMiArMzksMTAgQEAKIHN0YXRpYyBpbnQgYmFsbG9vbjNfcGNtY2lhX2h3X2luaXQoc3RydWN0IHNvY19wY21jaWFfc29ja2V0ICpza3QpCiB7CiAJdWludDE2X3QgdmVyOwotCWludCByZXQ7Ci0Jc3RhdGljIHZvaWQgX19pb21lbSAqZnBnYV92ZXI7CiAKIAl2ZXIgPSBfX3Jhd19yZWFkdyhCQUxMT09OM19GUEdBX1ZFUik7Ci0JaWYgKHZlciA+IDB4MDIwMSkKLQkJcHJfd2FybigiVGhlIEZQR0EgY29kZSwgdmVyc2lvbiAweCUwNHgsIGlzIG5ld2VyIHRoYW4gcmVsLTAuMy4gIgorCWlmICh2ZXIgPCAweDRmMDgpCisJCXByX3dhcm4oIlRoZSBGUEdBIGNvZGUsIHZlcnNpb24gMHglMDR4LCBpcyB0b28gb2xkLiAiCiAJCQkiUENNQ0lBL0NGIHN1cHBvcnQgbWlnaHQgYmUgYnJva2VuIGluIHRoaXMgdmVyc2lvbiEiLAogCQkJdmVyKTsKIApAQCAtOTcsOCArOTUsOSBAQAogc3RhdGljIGludCBiYWxsb29uM19wY21jaWFfY29uZmlndXJlX3NvY2tldChzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQgKnNrdCwKIAkJCQkgICAgICAgY29uc3Qgc29ja2V0X3N0YXRlX3QgKnN0YXRlKQogewotCV9fcmF3X3dyaXRldygoc3RhdGUtPmZsYWdzICYgU1NfUkVTRVQpID8gQkFMTE9PTjNfQ0ZfUkVTRVQgOiAwLAotCQkJQkFMTE9PTjNfQ0ZfQ09OVFJPTF9SRUcpOworCV9fcmF3X3dyaXRldyhCQUxMT09OM19DRl9SRVNFVCwgQkFMTE9PTjNfQ0ZfQ09OVFJPTF9SRUcgfAorCQkJKChzdGF0ZS0+ZmxhZ3MgJiBTU19SRVNFVCkgPworCQkJQkFMTE9PTjNfRlBHQV9TRVRuQ0xSIDogMCkpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfYmFzZS5jIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X2Jhc2UuYwppbmRleCBhZTA3YjRkLi4zNzU1ZTdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfYmFzZS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9iYXNlLmMKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL3NtZW1jLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KQEAgLTExNiwzNyArMTE3LDQ5IEBACiAKIHN0YXRpYyBpbnQgcHhhMnh4X3BjbWNpYV9zZXRfbWNtZW0oIGludCBzb2NrLCBpbnQgc3BlZWQsIGludCBjbG9jayApCiB7Ci0JTUNNRU0oc29jaykgPSAoKHB4YTJ4eF9tY3h4X3NldHVwKHNwZWVkLCBjbG9jaykKKwl1aW50MzJfdCB2YWw7CisKKwl2YWwgPSAoKHB4YTJ4eF9tY3h4X3NldHVwKHNwZWVkLCBjbG9jaykKIAkJJiBNQ1hYX1NFVFVQX01BU0spIDw8IE1DWFhfU0VUVVBfU0hJRlQpCiAJCXwgKChweGEyeHhfbWN4eF9hc3N0KHNwZWVkLCBjbG9jaykKIAkJJiBNQ1hYX0FTU1RfTUFTSykgPDwgTUNYWF9BU1NUX1NISUZUKQogCQl8ICgocHhhMnh4X21jeHhfaG9sZChzcGVlZCwgY2xvY2spCiAJCSYgTUNYWF9IT0xEX01BU0spIDw8IE1DWFhfSE9MRF9TSElGVCk7CiAKKwlfX3Jhd193cml0ZWwodmFsLCBNQ01FTShzb2NrKSk7CisKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBweGEyeHhfcGNtY2lhX3NldF9tY2lvKCBpbnQgc29jaywgaW50IHNwZWVkLCBpbnQgY2xvY2sgKQogewotCU1DSU8oc29jaykgPSAoKHB4YTJ4eF9tY3h4X3NldHVwKHNwZWVkLCBjbG9jaykKKwl1aW50MzJfdCB2YWw7CisKKwl2YWwgPSAoKHB4YTJ4eF9tY3h4X3NldHVwKHNwZWVkLCBjbG9jaykKIAkJJiBNQ1hYX1NFVFVQX01BU0spIDw8IE1DWFhfU0VUVVBfU0hJRlQpCiAJCXwgKChweGEyeHhfbWN4eF9hc3N0KHNwZWVkLCBjbG9jaykKIAkJJiBNQ1hYX0FTU1RfTUFTSykgPDwgTUNYWF9BU1NUX1NISUZUKQogCQl8ICgocHhhMnh4X21jeHhfaG9sZChzcGVlZCwgY2xvY2spCiAJCSYgTUNYWF9IT0xEX01BU0spIDw8IE1DWFhfSE9MRF9TSElGVCk7CiAKKwlfX3Jhd193cml0ZWwodmFsLCBNQ0lPKHNvY2spKTsKKwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHB4YTJ4eF9wY21jaWFfc2V0X21jYXR0KCBpbnQgc29jaywgaW50IHNwZWVkLCBpbnQgY2xvY2sgKQogewotCU1DQVRUKHNvY2spID0gKChweGEyeHhfbWN4eF9zZXR1cChzcGVlZCwgY2xvY2spCisJdWludDMyX3QgdmFsOworCisJdmFsID0gKChweGEyeHhfbWN4eF9zZXR1cChzcGVlZCwgY2xvY2spCiAJCSYgTUNYWF9TRVRVUF9NQVNLKSA8PCBNQ1hYX1NFVFVQX1NISUZUKQogCQl8ICgocHhhMnh4X21jeHhfYXNzdChzcGVlZCwgY2xvY2spCiAJCSYgTUNYWF9BU1NUX01BU0spIDw8IE1DWFhfQVNTVF9TSElGVCkKIAkJfCAoKHB4YTJ4eF9tY3h4X2hvbGQoc3BlZWQsIGNsb2NrKQogCQkmIE1DWFhfSE9MRF9NQVNLKSA8PCBNQ1hYX0hPTERfU0hJRlQpOwogCisJX19yYXdfd3JpdGVsKHZhbCwgTUNBVFQoc29jaykpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE2Niw4ICsxNzksOCBAQAogCiBzdGF0aWMgaW50IHB4YTJ4eF9wY21jaWFfc2V0X3RpbWluZyhzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQgKnNrdCkKIHsKLQl1bnNpZ25lZCBpbnQgY2xrID0gZ2V0X21lbWNsa19mcmVxdWVuY3lfMTBraHooKTsKLQlyZXR1cm4gcHhhMnh4X3BjbWNpYV9zZXRfbWN4eChza3QsIGNsayk7CisJdW5zaWduZWQgbG9uZyBjbGsgPSBjbGtfZ2V0X3JhdGUoc2t0LT5jbGspOworCXJldHVybiBweGEyeHhfcGNtY2lhX3NldF9tY3h4KHNrdCwgY2xrIC8gMTAwMDApOwogfQogCiAjaWZkZWYgQ09ORklHX0NQVV9GUkVRCkBAIC0yMDUsMTkgKzIxOCwxOCBAQAogc3RhdGljIHZvaWQgcHhhMnh4X2NvbmZpZ3VyZV9zb2NrZXRzKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgcGNtY2lhX2xvd19sZXZlbCAqb3BzID0gZGV2LT5wbGF0Zm9ybV9kYXRhOwotCiAJLyoKIAkgKiBXZSBoYXZlIGF0IGxlYXN0IG9uZSBzb2NrZXQsIHNvIHNldCBNRUNSOkNJVAogCSAqIChDYXJkIElzIFRoZXJlKQogCSAqLwotCU1FQ1IgfD0gTUVDUl9DSVQ7CisJdWludDMyX3QgbWVjciA9IE1FQ1JfQ0lUOwogCiAJLyogU2V0IE1FQ1I6Tk9TIChOdW1iZXIgT2YgU29ja2V0cykgKi8KIAlpZiAoKG9wcy0+Zmlyc3QgKyBvcHMtPm5yKSA+IDEgfHwKIAkgICAgbWFjaGluZV9pc192aXBlcigpIHx8IG1hY2hpbmVfaXNfYXJjb21femV1cygpKQotCQlNRUNSIHw9IE1FQ1JfTk9TOwotCWVsc2UKLQkJTUVDUiAmPSB+TUVDUl9OT1M7CisJCW1lY3IgfD0gTUVDUl9OT1M7CisKKwlfX3Jhd193cml0ZWwobWVjciwgTUVDUik7CiB9CiAKIHN0YXRpYyBjb25zdCBjaGFyICpza3RfbmFtZXNbXSA9IHsKQEAgLTI3MCwyNCArMjgyLDQxIEBACiAJc3RydWN0IHBjbWNpYV9sb3dfbGV2ZWwgKm9wczsKIAlzdHJ1Y3Qgc2t0X2Rldl9pbmZvICpzaW5mbzsKIAlzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQgKnNrdDsKKwlzdHJ1Y3QgY2xrICpjbGs7CiAKIAlvcHMgPSAoc3RydWN0IHBjbWNpYV9sb3dfbGV2ZWwgKilkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwotCWlmICghb3BzKQorCWlmICghb3BzKSB7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyMDsKKwl9CisKKwlpZiAoY3B1X2lzX3B4YTMyMCgpICYmIG9wcy0+bnIgPiAxKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAicHhhMzIwIHN1cHBvcnRzIG9ubHkgb25lIHBjbWNpYSBzbG90Iik7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyMDsKKwl9CisKKwljbGsgPSBjbGtfZ2V0KCZkZXYtPmRldiwgTlVMTCk7CisJaWYgKCFjbGspCiAJCXJldHVybiAtRU5PREVWOwogCiAJcHhhMnh4X2Rydl9wY21jaWFfb3BzKG9wcyk7CiAKIAlzaW5mbyA9IGt6YWxsb2MoU0tUX0RFVl9JTkZPX1NJWkUob3BzLT5uciksIEdGUF9LRVJORUwpOwotCWlmICghc2luZm8pCisJaWYgKCFzaW5mbykgeworCQljbGtfcHV0KGNsayk7CiAJCXJldHVybiAtRU5PTUVNOworCX0KIAogCXNpbmZvLT5uc2t0ID0gb3BzLT5ucjsKKwlzaW5mby0+Y2xrID0gY2xrOwogCiAJLyogSW5pdGlhbGl6ZSBwcm9jZXNzb3Igc3BlY2lmaWMgcGFyYW1ldGVycyAqLwogCWZvciAoaSA9IDA7IGkgPCBvcHMtPm5yOyBpKyspIHsKIAkJc2t0ID0gJnNpbmZvLT5za3RbaV07CiAKIAkJc2t0LT5uciA9IG9wcy0+Zmlyc3QgKyBpOworCQlza3QtPmNsayA9IGNsazsKIAkJc2t0LT5vcHMgPSBvcHM7CiAJCXNrdC0+c29ja2V0Lm93bmVyID0gb3BzLT5vd25lcjsKIAkJc2t0LT5zb2NrZXQuZGV2LnBhcmVudCA9ICZkZXYtPmRldjsKQEAgLTI5NSwxOCArMzI0LDI2IEBACiAKIAkJcmV0ID0gcHhhMnh4X2Rydl9wY21jaWFfYWRkX29uZShza3QpOwogCQlpZiAocmV0KQotCQkJYnJlYWs7CisJCQlnb3RvIGVycjE7CiAJfQogCiAJaWYgKHJldCkgewogCQl3aGlsZSAoLS1pID49IDApCiAJCQlzb2NfcGNtY2lhX3JlbW92ZV9vbmUoJnNpbmZvLT5za3RbaV0pOwogCQlrZnJlZShzaW5mbyk7CisJCWNsa19wdXQoY2xrKTsKIAl9IGVsc2UgewogCQlweGEyeHhfY29uZmlndXJlX3NvY2tldHMoJmRldi0+ZGV2KTsKIAkJZGV2X3NldF9kcnZkYXRhKCZkZXYtPmRldiwgc2luZm8pOwogCX0KIAorCXJldHVybiAwOworCitlcnIxOgorCXdoaWxlICgtLWkgPj0gMCkKKwkJc29jX3BjbWNpYV9yZW1vdmVfb25lKCZzaW5mby0+c2t0W2ldKTsKKwlrZnJlZShzaW5mbyk7CitlcnIwOgogCXJldHVybiByZXQ7CiB9CiAKQEAgLTMyMCw2ICszNTcsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBzaW5mby0+bnNrdDsgaSsrKQogCQlzb2NfcGNtY2lhX3JlbW92ZV9vbmUoJnNpbmZvLT5za3RbaV0pOwogCisJY2xrX3B1dChzaW5mby0+Y2xrKTsKIAlrZnJlZShzaW5mbyk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfY29saWJyaS5jIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X2NvbGlicmkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2Y3MjE5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X2NvbGlicmkuYwpAQCAtMCwwICsxLDIyOSBAQAorLyoKKyAqIGxpbnV4L2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9jb2xpYnJpLmMKKyAqCisgKiBEcml2ZXIgZm9yIFRvcmFkZXggQ29saWJyaSBQWEEyNzAgQ0Ygc29ja2V0CisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIE1hcmVrIFZhc3V0IDxtYXJlay52YXN1dEBnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworI2luY2x1ZGUgInNvY19jb21tb24uaCIKKworI2RlZmluZQlDT0xJQlJJMjcwX1JFU0VUX0dQSU8JNTMKKyNkZWZpbmUJQ09MSUJSSTI3MF9QUEVOX0dQSU8JMTA3CisjZGVmaW5lCUNPTElCUkkyNzBfQlZEMV9HUElPCTgzCisjZGVmaW5lCUNPTElCUkkyNzBfQlZEMl9HUElPCTgyCisjZGVmaW5lCUNPTElCUkkyNzBfREVURUNUX0dQSU8JODQKKyNkZWZpbmUJQ09MSUJSSTI3MF9SRUFEWV9HUElPCTEKKworI2RlZmluZQlDT0xJQlJJMzIwX1JFU0VUX0dQSU8JNzcKKyNkZWZpbmUJQ09MSUJSSTMyMF9QUEVOX0dQSU8JNTcKKyNkZWZpbmUJQ09MSUJSSTMyMF9CVkQxX0dQSU8JNTMKKyNkZWZpbmUJQ09MSUJSSTMyMF9CVkQyX0dQSU8JNzkKKyNkZWZpbmUJQ09MSUJSSTMyMF9ERVRFQ1RfR1BJTwk4MQorI2RlZmluZQlDT0xJQlJJMzIwX1JFQURZX0dQSU8JMjkKKworc3RhdGljIHN0cnVjdCB7CisJaW50CXJlc2V0X2dwaW87CisJaW50CXBwZW5fZ3BpbzsKKwlpbnQJYnZkMV9ncGlvOworCWludAlidmQyX2dwaW87CisJaW50CWRldGVjdF9ncGlvOworCWludAlyZWFkeV9ncGlvOworfSBjb2xpYnJpX3BjbWNpYV9ncGlvOworCitzdGF0aWMgc3RydWN0IHBjbWNpYV9pcnFzIGNvbGlicmlfaXJxc1tdID0geworCXsKKwkJLnNvY2sgPSAwLAorCQkuc3RyICA9ICJQQ01DSUEgQ0QiCisJfSwKK307CisKK3N0YXRpYyBpbnQgY29saWJyaV9wY21jaWFfaHdfaW5pdChzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQgKnNrdCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KGNvbGlicmlfcGNtY2lhX2dwaW8uZGV0ZWN0X2dwaW8sICJERVRFQ1QiKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjE7CisJcmV0ID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQoY29saWJyaV9wY21jaWFfZ3Bpby5kZXRlY3RfZ3Bpbyk7CisJaWYgKHJldCkKKwkJZ290byBlcnIyOworCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KGNvbGlicmlfcGNtY2lhX2dwaW8ucmVhZHlfZ3BpbywgIlJFQURZIik7CisJaWYgKHJldCkKKwkJZ290byBlcnIyOworCXJldCA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KGNvbGlicmlfcGNtY2lhX2dwaW8ucmVhZHlfZ3Bpbyk7CisJaWYgKHJldCkKKwkJZ290byBlcnIzOworCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KGNvbGlicmlfcGNtY2lhX2dwaW8uYnZkMV9ncGlvLCAiQlZEMSIpOworCWlmIChyZXQpCisJCWdvdG8gZXJyMzsKKwlyZXQgPSBncGlvX2RpcmVjdGlvbl9pbnB1dChjb2xpYnJpX3BjbWNpYV9ncGlvLmJ2ZDFfZ3Bpbyk7CisJaWYgKHJldCkKKwkJZ290byBlcnI0OworCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KGNvbGlicmlfcGNtY2lhX2dwaW8uYnZkMl9ncGlvLCAiQlZEMiIpOworCWlmIChyZXQpCisJCWdvdG8gZXJyNDsKKwlyZXQgPSBncGlvX2RpcmVjdGlvbl9pbnB1dChjb2xpYnJpX3BjbWNpYV9ncGlvLmJ2ZDJfZ3Bpbyk7CisJaWYgKHJldCkKKwkJZ290byBlcnI1OworCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KGNvbGlicmlfcGNtY2lhX2dwaW8ucHBlbl9ncGlvLCAiUFBFTiIpOworCWlmIChyZXQpCisJCWdvdG8gZXJyNTsKKwlyZXQgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoY29saWJyaV9wY21jaWFfZ3Bpby5wcGVuX2dwaW8sIDApOworCWlmIChyZXQpCisJCWdvdG8gZXJyNjsKKworCXJldCA9IGdwaW9fcmVxdWVzdChjb2xpYnJpX3BjbWNpYV9ncGlvLnJlc2V0X2dwaW8sICJSRVNFVCIpOworCWlmIChyZXQpCisJCWdvdG8gZXJyNjsKKwlyZXQgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoY29saWJyaV9wY21jaWFfZ3Bpby5yZXNldF9ncGlvLCAxKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjc7CisKKwljb2xpYnJpX2lycXNbMF0uaXJxID0gZ3Bpb190b19pcnEoY29saWJyaV9wY21jaWFfZ3Bpby5kZXRlY3RfZ3Bpbyk7CisJc2t0LT5zb2NrZXQucGNpX2lycSA9IGdwaW9fdG9faXJxKGNvbGlicmlfcGNtY2lhX2dwaW8ucmVhZHlfZ3Bpbyk7CisKKwlyZXR1cm4gc29jX3BjbWNpYV9yZXF1ZXN0X2lycXMoc2t0LCBjb2xpYnJpX2lycXMsCisJCQkJCUFSUkFZX1NJWkUoY29saWJyaV9pcnFzKSk7CisKK2Vycjc6CisJZ3Bpb19mcmVlKGNvbGlicmlfcGNtY2lhX2dwaW8uZGV0ZWN0X2dwaW8pOworZXJyNjoKKwlncGlvX2ZyZWUoY29saWJyaV9wY21jaWFfZ3Bpby5yZWFkeV9ncGlvKTsKK2VycjU6CisJZ3Bpb19mcmVlKGNvbGlicmlfcGNtY2lhX2dwaW8uYnZkMV9ncGlvKTsKK2VycjQ6CisJZ3Bpb19mcmVlKGNvbGlicmlfcGNtY2lhX2dwaW8uYnZkMl9ncGlvKTsKK2VycjM6CisJZ3Bpb19mcmVlKGNvbGlicmlfcGNtY2lhX2dwaW8ucmVzZXRfZ3Bpbyk7CitlcnIyOgorCWdwaW9fZnJlZShjb2xpYnJpX3BjbWNpYV9ncGlvLnBwZW5fZ3Bpbyk7CitlcnIxOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGNvbGlicmlfcGNtY2lhX2h3X3NodXRkb3duKHN0cnVjdCBzb2NfcGNtY2lhX3NvY2tldCAqc2t0KQoreworCWdwaW9fZnJlZShjb2xpYnJpX3BjbWNpYV9ncGlvLmRldGVjdF9ncGlvKTsKKwlncGlvX2ZyZWUoY29saWJyaV9wY21jaWFfZ3Bpby5yZWFkeV9ncGlvKTsKKwlncGlvX2ZyZWUoY29saWJyaV9wY21jaWFfZ3Bpby5idmQxX2dwaW8pOworCWdwaW9fZnJlZShjb2xpYnJpX3BjbWNpYV9ncGlvLmJ2ZDJfZ3Bpbyk7CisJZ3Bpb19mcmVlKGNvbGlicmlfcGNtY2lhX2dwaW8ucmVzZXRfZ3Bpbyk7CisJZ3Bpb19mcmVlKGNvbGlicmlfcGNtY2lhX2dwaW8ucHBlbl9ncGlvKTsKK30KKworc3RhdGljIHZvaWQgY29saWJyaV9wY21jaWFfc29ja2V0X3N0YXRlKHN0cnVjdCBzb2NfcGNtY2lhX3NvY2tldCAqc2t0LAorCQkJCQlzdHJ1Y3QgcGNtY2lhX3N0YXRlICpzdGF0ZSkKK3sKKworCXN0YXRlLT5kZXRlY3QgPSAhIWdwaW9fZ2V0X3ZhbHVlKGNvbGlicmlfcGNtY2lhX2dwaW8uZGV0ZWN0X2dwaW8pOworCXN0YXRlLT5yZWFkeSAgPSAhIWdwaW9fZ2V0X3ZhbHVlKGNvbGlicmlfcGNtY2lhX2dwaW8ucmVhZHlfZ3Bpbyk7CisJc3RhdGUtPmJ2ZDEgICA9ICEhZ3Bpb19nZXRfdmFsdWUoY29saWJyaV9wY21jaWFfZ3Bpby5idmQxX2dwaW8pOworCXN0YXRlLT5idmQyICAgPSAhIWdwaW9fZ2V0X3ZhbHVlKGNvbGlicmlfcGNtY2lhX2dwaW8uYnZkMl9ncGlvKTsKKwlzdGF0ZS0+d3Jwcm90ID0gMDsKKwlzdGF0ZS0+dnNfM3YgID0gMTsKKwlzdGF0ZS0+dnNfWHYgID0gMDsKK30KKworc3RhdGljIGludAorY29saWJyaV9wY21jaWFfY29uZmlndXJlX3NvY2tldChzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQgKnNrdCwKKwkJCQljb25zdCBzb2NrZXRfc3RhdGVfdCAqc3RhdGUpCit7CisJZ3Bpb19zZXRfdmFsdWUoY29saWJyaV9wY21jaWFfZ3Bpby5wcGVuX2dwaW8sCisJCQkhKHN0YXRlLT5WY2MgPT0gMzMgJiYgc3RhdGUtPlZwcCA8IDUwKSk7CisJZ3Bpb19zZXRfdmFsdWUoY29saWJyaV9wY21jaWFfZ3Bpby5yZXNldF9ncGlvLCBzdGF0ZS0+ZmxhZ3MgJiBTU19SRVNFVCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNvbGlicmlfcGNtY2lhX3NvY2tldF9pbml0KHN0cnVjdCBzb2NfcGNtY2lhX3NvY2tldCAqc2t0KQoreworfQorCitzdGF0aWMgdm9pZCBjb2xpYnJpX3BjbWNpYV9zb2NrZXRfc3VzcGVuZChzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQgKnNrdCkKK3sKK30KKworc3RhdGljIHN0cnVjdCBwY21jaWFfbG93X2xldmVsIGNvbGlicmlfcGNtY2lhX29wcyA9IHsKKwkub3duZXIJCQk9IFRISVNfTU9EVUxFLAorCisJLmZpcnN0CQkJPSAwLAorCS5ucgkJCT0gMSwKKworCS5od19pbml0CQk9IGNvbGlicmlfcGNtY2lhX2h3X2luaXQsCisJLmh3X3NodXRkb3duCQk9IGNvbGlicmlfcGNtY2lhX2h3X3NodXRkb3duLAorCisJLnNvY2tldF9zdGF0ZQkJPSBjb2xpYnJpX3BjbWNpYV9zb2NrZXRfc3RhdGUsCisJLmNvbmZpZ3VyZV9zb2NrZXQJPSBjb2xpYnJpX3BjbWNpYV9jb25maWd1cmVfc29ja2V0LAorCisJLnNvY2tldF9pbml0CQk9IGNvbGlicmlfcGNtY2lhX3NvY2tldF9pbml0LAorCS5zb2NrZXRfc3VzcGVuZAkJPSBjb2xpYnJpX3BjbWNpYV9zb2NrZXRfc3VzcGVuZCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpjb2xpYnJpX3BjbWNpYV9kZXZpY2U7CisKK3N0YXRpYyBpbnQgX19pbml0IGNvbGlicmlfcGNtY2lhX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJY29saWJyaV9wY21jaWFfZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJweGEyeHgtcGNtY2lhIiwgLTEpOworCWlmICghY29saWJyaV9wY21jaWFfZGV2aWNlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIENvbGlicmkgUFhBMjcwICovCisJaWYgKG1hY2hpbmVfaXNfY29saWJyaSgpKSB7CisJCWNvbGlicmlfcGNtY2lhX2dwaW8ucmVzZXRfZ3Bpbwk9IENPTElCUkkyNzBfUkVTRVRfR1BJTzsKKwkJY29saWJyaV9wY21jaWFfZ3Bpby5wcGVuX2dwaW8JPSBDT0xJQlJJMjcwX1BQRU5fR1BJTzsKKwkJY29saWJyaV9wY21jaWFfZ3Bpby5idmQxX2dwaW8JPSBDT0xJQlJJMjcwX0JWRDFfR1BJTzsKKwkJY29saWJyaV9wY21jaWFfZ3Bpby5idmQyX2dwaW8JPSBDT0xJQlJJMjcwX0JWRDJfR1BJTzsKKwkJY29saWJyaV9wY21jaWFfZ3Bpby5kZXRlY3RfZ3Bpbwk9IENPTElCUkkyNzBfREVURUNUX0dQSU87CisJCWNvbGlicmlfcGNtY2lhX2dwaW8ucmVhZHlfZ3Bpbwk9IENPTElCUkkyNzBfUkVBRFlfR1BJTzsKKwkvKiBDb2xpYnJpIFBYQTMyMCAqLworCX0gZWxzZSBpZiAobWFjaGluZV9pc19jb2xpYnJpMzIwKCkpIHsKKwkJY29saWJyaV9wY21jaWFfZ3Bpby5yZXNldF9ncGlvCT0gQ09MSUJSSTMyMF9SRVNFVF9HUElPOworCQljb2xpYnJpX3BjbWNpYV9ncGlvLnBwZW5fZ3Bpbwk9IENPTElCUkkzMjBfUFBFTl9HUElPOworCQljb2xpYnJpX3BjbWNpYV9ncGlvLmJ2ZDFfZ3Bpbwk9IENPTElCUkkzMjBfQlZEMV9HUElPOworCQljb2xpYnJpX3BjbWNpYV9ncGlvLmJ2ZDJfZ3Bpbwk9IENPTElCUkkzMjBfQlZEMl9HUElPOworCQljb2xpYnJpX3BjbWNpYV9ncGlvLmRldGVjdF9ncGlvCT0gQ09MSUJSSTMyMF9ERVRFQ1RfR1BJTzsKKwkJY29saWJyaV9wY21jaWFfZ3Bpby5yZWFkeV9ncGlvCT0gQ09MSUJSSTMyMF9SRUFEWV9HUElPOworCX0KKworCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGRfZGF0YShjb2xpYnJpX3BjbWNpYV9kZXZpY2UsCisJCSZjb2xpYnJpX3BjbWNpYV9vcHMsIHNpemVvZihjb2xpYnJpX3BjbWNpYV9vcHMpKTsKKworCWlmICghcmV0KQorCQlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKGNvbGlicmlfcGNtY2lhX2RldmljZSk7CisKKwlpZiAocmV0KQorCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KGNvbGlicmlfcGNtY2lhX2RldmljZSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgY29saWJyaV9wY21jaWFfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGNvbGlicmlfcGNtY2lhX2RldmljZSk7Cit9CisKK21vZHVsZV9pbml0KGNvbGlicmlfcGNtY2lhX2luaXQpOworbW9kdWxlX2V4aXQoY29saWJyaV9wY21jaWFfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIk1hcmVrIFZhc3V0IDxtYXJlay52YXN1dEBnbWFpbC5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlBDTUNJQSBzdXBwb3J0IGZvciBUb3JhZGV4IENvbGlicmkgUFhBMjcwL1BYQTMyMCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpweGEyeHgtcGNtY2lhIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9zYTExMDBfZ2VuZXJpYy5jIGIvZHJpdmVycy9wY21jaWEvc2ExMTAwX2dlbmVyaWMuYwppbmRleCA2YjIyODU5Li5mYjk3NDBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9zYTExMDBfZ2VuZXJpYy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3NhMTEwMF9nZW5lcmljLmMKQEAgLTUzLDYgKzUzLDkgQEAKICNpZiBkZWZpbmVkKENPTkZJR19TQTExMDBfSDMxMDApIHx8IGRlZmluZWQoQ09ORklHX1NBMTEwMF9IMzYwMCkKIAlwY21jaWFfaDM2MDBfaW5pdCwKICNlbmRpZgorI2lmZGVmIENPTkZJR19TQTExMDBfTkFOT0VOR0lORQorCXBjbWNpYV9uYW5vZW5naW5lX2luaXQsCisjZW5kaWYKICNpZmRlZiBDT05GSUdfU0ExMTAwX1NIQU5OT04KIAlwY21jaWFfc2hhbm5vbl9pbml0LAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9zYTExMDBfZ2VuZXJpYy5oIGIvZHJpdmVycy9wY21jaWEvc2ExMTAwX2dlbmVyaWMuaAppbmRleCA3OTRmOTZhLi5hZGIwOGRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9zYTExMDBfZ2VuZXJpYy5oCisrKyBiL2RyaXZlcnMvcGNtY2lhL3NhMTEwMF9nZW5lcmljLmgKQEAgLTEzLDYgKzEzLDcgQEAKIGV4dGVybiBpbnQgcGNtY2lhX2djcGx1c19pbml0KHN0cnVjdCBkZXZpY2UgKik7CiBleHRlcm4gaW50IHBjbWNpYV9ncmFwaGljc21hc3Rlcl9pbml0KHN0cnVjdCBkZXZpY2UgKik7CiBleHRlcm4gaW50IHBjbWNpYV9oMzYwMF9pbml0KHN0cnVjdCBkZXZpY2UgKik7CitleHRlcm4gaW50IHBjbWNpYV9uYW5vZW5naW5lX2luaXQoc3RydWN0IGRldmljZSAqKTsKIGV4dGVybiBpbnQgcGNtY2lhX3BhbmdvbGluX2luaXQoc3RydWN0IGRldmljZSAqKTsKIGV4dGVybiBpbnQgcGNtY2lhX3BmczE2OF9pbml0KHN0cnVjdCBkZXZpY2UgKik7CiBleHRlcm4gaW50IHBjbWNpYV9zaGFubm9uX2luaXQoc3RydWN0IGRldmljZSAqKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3NhMTEwMF9uYW5vZW5naW5lLmMgYi9kcml2ZXJzL3BjbWNpYS9zYTExMDBfbmFub2VuZ2luZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkMjY1MmUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3BjbWNpYS9zYTExMDBfbmFub2VuZ2luZS5jCkBAIC0wLDAgKzEsMjE5IEBACisvKgorICogZHJpdmVycy9wY21jaWEvc2ExMTAwX25hbm9lbmdpbmUuYworICoKKyAqIFBDTUNJQSBpbXBsZW1lbnRhdGlvbiByb3V0aW5lcyBmb3IgQlNJIG5hbm9FbmdpbmUuCisgKgorICogSW4gb3JkZXIgdG8gaGF2ZSBhIGZ1bGx5IGZ1bmN0aW9uYWwgcGNtY2lhIHN1YnN5c3RlbSBpbiBhIEJTRSBuYW5vRW5naW5lCisgKiBib2FyZCB5b3Ugc2hvdWxkIGNhcmVmdWxseSByZWFkIHRoaXM6CisgKiBodHRwOi8vY2FtYnVjYS5sZGhzLmNldHVjLnB1Yy1yaW8uYnIvbmFub2VuZ2luZS8KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTWFyY2VsbyBSb2JlcnRvIEppbWVuZXogPG1yb2JlcnRvQGNwdGkuY2V0dWMucHVjLXJpby5icj4KKyAqCisgKiBCYXNlZCBvbiBvcmlnaW5hbCB3b3JrIGZvciBrZXJuZWwgMi40IGJ5CisgKiBNaWd1ZWwgRnJlaXRhcyA8bWlndWVsQGNwdGkuY2V0dWMucHVjLXJpby5icj4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9uYW5vZW5naW5lLmg+CisKKyNpbmNsdWRlICJzYTExMDBfZ2VuZXJpYy5oIgorCitzdGF0aWMgc3RydWN0IHBjbWNpYV9pcnFzIGlycXNfc2t0MFtdID0geworCS8qIHNvY2tldCwgSVJRLCBuYW1lICovCisJeyAwLCBOQU5PRU5HSU5FX0lSUV9HUElPX1BDX0NEMCwgIlBDIENEMCIgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGNtY2lhX2lycXMgaXJxc19za3QxW10gPSB7CisJLyogc29ja2V0LCBJUlEsIG5hbWUgKi8KKwl7IDEsIE5BTk9FTkdJTkVfSVJRX0dQSU9fUENfQ0QxLCAiUEMgQ0QxIiB9LAorfTsKKworc3RydWN0IG5hbm9lbmdpbmVfcGlucyB7CisJdW5zaWduZWQgaW5wdXRfcGluczsKKwl1bnNpZ25lZCBvdXRwdXRfcGluczsKKwl1bnNpZ25lZCBjbGVhcl9vdXRwdXRzOworCXVuc2lnbmVkIHRyYW5zaXRpb25fcGluczsKKwl1bnNpZ25lZCBwY2lfaXJxOworCXN0cnVjdCBwY21jaWFfaXJxcyAqcGNtY2lhX2lycXM7CisJdW5zaWduZWQgcGNtY2lhX2lycXNfc2l6ZTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgbmFub2VuZ2luZV9waW5zIG5hbm9fc2t0c1tdID0geworCXsKKwkJLmlucHV0X3BpbnMJCT0gR1BJT19QQ19SRUFEWTAgfCBHUElPX1BDX0NEMCwKKwkJLm91dHB1dF9waW5zCQk9IEdQSU9fUENfUkVTRVQwLAorCQkuY2xlYXJfb3V0cHV0cwkJPSBHUElPX1BDX1JFU0VUMCwKKwkJLnRyYW5zaXRpb25fcGlucwk9IE5BTk9FTkdJTkVfSVJRX0dQSU9fUENfQ0QwLAorCQkucGNpX2lycQkJPSBOQU5PRU5HSU5FX0lSUV9HUElPX1BDX1JFQURZMCwKKwkJLnBjbWNpYV9pcnFzCQk9IGlycXNfc2t0MCwKKwkJLnBjbWNpYV9pcnFzX3NpemUJPSBBUlJBWV9TSVpFKGlycXNfc2t0MCkKKwl9LCB7CisJCS5pbnB1dF9waW5zCQk9IEdQSU9fUENfUkVBRFkxIHwgR1BJT19QQ19DRDEsCisJCS5vdXRwdXRfcGlucwkJPSBHUElPX1BDX1JFU0VUMSwKKwkJLmNsZWFyX291dHB1dHMJCT0gR1BJT19QQ19SRVNFVDEsCisJCS50cmFuc2l0aW9uX3BpbnMJPSBOQU5PRU5HSU5FX0lSUV9HUElPX1BDX0NEMSwKKwkJLnBjaV9pcnEJCT0gTkFOT0VOR0lORV9JUlFfR1BJT19QQ19SRUFEWTEsCisJCS5wY21jaWFfaXJxcwkJPSBpcnFzX3NrdDEsCisJCS5wY21jaWFfaXJxc19zaXplCT0gQVJSQVlfU0laRShpcnFzX3NrdDEpCisJfQorfTsKKwordW5zaWduZWQgbnVtX25hbm9fcGNtY2lhX3NvY2tldHMgPSBBUlJBWV9TSVpFKG5hbm9fc2t0cyk7CisKK3N0YXRpYyBpbnQgbmFub2VuZ2luZV9wY21jaWFfaHdfaW5pdChzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQgKnNrdCkKK3sKKwl1bnNpZ25lZCBpID0gc2t0LT5ucjsKKworCWlmIChpID49IG51bV9uYW5vX3BjbWNpYV9zb2NrZXRzKQorCQlyZXR1cm4gLUVOWElPOworCisJR1BEUiAmPSB+bmFub19za3RzW2ldLmlucHV0X3BpbnM7CisJR1BEUiB8PSBuYW5vX3NrdHNbaV0ub3V0cHV0X3BpbnM7CisJR1BDUiA9IG5hbm9fc2t0c1tpXS5jbGVhcl9vdXRwdXRzOworCXNldF9pcnFfdHlwZShuYW5vX3NrdHNbaV0udHJhbnNpdGlvbl9waW5zLCBJUlFfVFlQRV9FREdFX0JPVEgpOworCXNrdC0+c29ja2V0LnBjaV9pcnEgPSBuYW5vX3NrdHNbaV0ucGNpX2lycTsKKworCXJldHVybiBzb2NfcGNtY2lhX3JlcXVlc3RfaXJxcyhza3QsCisJCW5hbm9fc2t0c1tpXS5wY21jaWFfaXJxcywgbmFub19za3RzW2ldLnBjbWNpYV9pcnFzX3NpemUpOworfQorCisvKgorICogUmVsZWFzZSBhbGwgcmVzb3VyY2VzLgorICovCitzdGF0aWMgdm9pZCBuYW5vZW5naW5lX3BjbWNpYV9od19zaHV0ZG93bihzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQgKnNrdCkKK3sKKwl1bnNpZ25lZCBpID0gc2t0LT5ucjsKKworCWlmIChpID49IG51bV9uYW5vX3BjbWNpYV9zb2NrZXRzKQorCQlyZXR1cm47CisKKwlzb2NfcGNtY2lhX2ZyZWVfaXJxcyhza3QsCisJCW5hbm9fc2t0c1tpXS5wY21jaWFfaXJxcywgbmFub19za3RzW2ldLnBjbWNpYV9pcnFzX3NpemUpOworfQorCitzdGF0aWMgaW50IG5hbm9lbmdpbmVfcGNtY2lhX2NvbmZpZ3VyZV9zb2NrZXQoCisJc3RydWN0IHNvY19wY21jaWFfc29ja2V0ICpza3QsIGNvbnN0IHNvY2tldF9zdGF0ZV90ICpzdGF0ZSkKK3sKKwl1bnNpZ25lZCByZXNldDsKKwl1bnNpZ25lZCBpID0gc2t0LT5ucjsKKworCWlmIChpID49IG51bV9uYW5vX3BjbWNpYV9zb2NrZXRzKQorCQlyZXR1cm4gLUVOWElPOworCisJc3dpdGNoIChpKSB7CisJY2FzZSAwOgorCQlyZXNldCA9IEdQSU9fUENfUkVTRVQwOworCQlicmVhazsKKwljYXNlIDE6CisJCXJlc2V0ID0gR1BJT19QQ19SRVNFVDE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRU5YSU87CisJfQorCisJaWYgKHN0YXRlLT5mbGFncyAmIFNTX1JFU0VUKQorCQlHUFNSID0gcmVzZXQ7CisJZWxzZQorCQlHUENSID0gcmVzZXQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbmFub2VuZ2luZV9wY21jaWFfc29ja2V0X3N0YXRlKAorCXN0cnVjdCBzb2NfcGNtY2lhX3NvY2tldCAqc2t0LCBzdHJ1Y3QgcGNtY2lhX3N0YXRlICpzdGF0ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGxldmVscyA9IEdQTFI7CisJdW5zaWduZWQgaSA9IHNrdC0+bnI7CisKKwlpZiAoaSA+PSBudW1fbmFub19wY21jaWFfc29ja2V0cykKKwkJcmV0dXJuOworCisJbWVtc2V0KHN0YXRlLCAwLCBzaXplb2Yoc3RydWN0IHBjbWNpYV9zdGF0ZSkpOworCXN3aXRjaCAoaSkgeworCWNhc2UgMDoKKwkJc3RhdGUtPnJlYWR5ID0gKGxldmVscyAmIEdQSU9fUENfUkVBRFkwKSA/IDEgOiAwOworCQlzdGF0ZS0+ZGV0ZWN0ID0gIShsZXZlbHMgJiBHUElPX1BDX0NEMCkgPyAxIDogMDsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlzdGF0ZS0+cmVhZHkgPSAobGV2ZWxzICYgR1BJT19QQ19SRUFEWTEpID8gMSA6IDA7CisJCXN0YXRlLT5kZXRlY3QgPSAhKGxldmVscyAmIEdQSU9fUENfQ0QxKSA/IDEgOiAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm47CisJfQorCXN0YXRlLT5idmQxID0gMTsKKwlzdGF0ZS0+YnZkMiA9IDE7CisJc3RhdGUtPndycHJvdCA9IDA7IC8qIE5vdCBhdmFpbGFibGUgKi8KKwlzdGF0ZS0+dnNfM3YgPSAxOyAvKiBDYW4gb25seSBhcHBseSAzLjNWICovCisJc3RhdGUtPnZzX1h2ID0gMDsKK30KKworLyoKKyAqIEVuYWJsZSBjYXJkIHN0YXR1cyBJUlFzIG9uIChyZS0paW5pdGlhbGlzYXRpb24uICBUaGlzIGNhbgorICogYmUgY2FsbGVkIGF0IGluaXRpYWxpc2F0aW9uLCBwb3dlciBtYW5hZ2VtZW50IGV2ZW50LCBvcgorICogcGNtY2lhIGV2ZW50LgorICovCitzdGF0aWMgdm9pZCBuYW5vZW5naW5lX3BjbWNpYV9zb2NrZXRfaW5pdChzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQgKnNrdCkKK3sKKwl1bnNpZ25lZCBpID0gc2t0LT5ucjsKKworCWlmIChpID49IG51bV9uYW5vX3BjbWNpYV9zb2NrZXRzKQorCQlyZXR1cm47CisKKwlzb2NfcGNtY2lhX2VuYWJsZV9pcnFzKHNrdCwKKwkJbmFub19za3RzW2ldLnBjbWNpYV9pcnFzLCBuYW5vX3NrdHNbaV0ucGNtY2lhX2lycXNfc2l6ZSk7Cit9CisKKy8qCisgKiBEaXNhYmxlIGNhcmQgc3RhdHVzIElSUXMgb24gc3VzcGVuZC4KKyAqLworc3RhdGljIHZvaWQgbmFub2VuZ2luZV9wY21jaWFfc29ja2V0X3N1c3BlbmQoc3RydWN0IHNvY19wY21jaWFfc29ja2V0ICpza3QpCit7CisJdW5zaWduZWQgaSA9IHNrdC0+bnI7CisKKwlpZiAoaSA+PSBudW1fbmFub19wY21jaWFfc29ja2V0cykKKwkJcmV0dXJuOworCisJc29jX3BjbWNpYV9kaXNhYmxlX2lycXMoc2t0LAorCQluYW5vX3NrdHNbaV0ucGNtY2lhX2lycXMsIG5hbm9fc2t0c1tpXS5wY21jaWFfaXJxc19zaXplKTsKK30KKworc3RhdGljIHN0cnVjdCBwY21jaWFfbG93X2xldmVsIG5hbm9lbmdpbmVfcGNtY2lhX29wcyA9IHsKKwkub3duZXIJCQk9IFRISVNfTU9EVUxFLAorCisJLmh3X2luaXQJCT0gbmFub2VuZ2luZV9wY21jaWFfaHdfaW5pdCwKKwkuaHdfc2h1dGRvd24JCT0gbmFub2VuZ2luZV9wY21jaWFfaHdfc2h1dGRvd24sCisKKwkuY29uZmlndXJlX3NvY2tldAk9IG5hbm9lbmdpbmVfcGNtY2lhX2NvbmZpZ3VyZV9zb2NrZXQsCisJLnNvY2tldF9zdGF0ZQkJPSBuYW5vZW5naW5lX3BjbWNpYV9zb2NrZXRfc3RhdGUsCisJLnNvY2tldF9pbml0CQk9IG5hbm9lbmdpbmVfcGNtY2lhX3NvY2tldF9pbml0LAorCS5zb2NrZXRfc3VzcGVuZAkJPSBuYW5vZW5naW5lX3BjbWNpYV9zb2NrZXRfc3VzcGVuZCwKK307CisKK2ludCBwY21jaWFfbmFub2VuZ2luZV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpbnQgcmV0ID0gLUVOT0RFVjsKKworCWlmIChtYWNoaW5lX2lzX25hbm9lbmdpbmUoKSkKKwkJcmV0ID0gc2ExMXh4X2Rydl9wY21jaWFfcHJvYmUoCisJCQlkZXYsICZuYW5vZW5naW5lX3BjbWNpYV9vcHMsIDAsIDIpOworCisJcmV0dXJuIHJldDsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5jIGIvZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5jCmluZGV4IDJmZThjYjguLjVhOWEzOTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3NvY19jb21tb24uYworKysgYi9kcml2ZXJzL3BjbWNpYS9zb2NfY29tbW9uLmMKQEAgLTMxLDIwICszMSwyMCBAQAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIAorI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvY3B1ZnJlcS5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCiAjaW5jbHVkZSAic29jX2NvbW1vbi5oIgpAQCAtNzQsNyArNzQsOCBAQAogCiAjZW5kaWYKIAotI2RlZmluZSB0b19zb2NfcGNtY2lhX3NvY2tldCh4KQljb250YWluZXJfb2YoeCwgc3RydWN0IHNvY19wY21jaWFfc29ja2V0LCBzb2NrZXQpCisjZGVmaW5lIHRvX3NvY19wY21jaWFfc29ja2V0KHgpCVwKKwljb250YWluZXJfb2YoeCwgc3RydWN0IHNvY19wY21jaWFfc29ja2V0LCBzb2NrZXQpCiAKIHN0YXRpYyB1bnNpZ25lZCBzaG9ydAogY2FsY19zcGVlZCh1bnNpZ25lZCBzaG9ydCAqc3BkcywgaW50IG51bSwgdW5zaWduZWQgc2hvcnQgZGZsdCkKQEAgLTkxLDExICs5MiwxNSBAQAogCXJldHVybiBzcGVlZDsKIH0KIAotdm9pZCBzb2NfY29tbW9uX3BjbWNpYV9nZXRfdGltaW5nKHN0cnVjdCBzb2NfcGNtY2lhX3NvY2tldCAqc2t0LCBzdHJ1Y3Qgc29jX3BjbWNpYV90aW1pbmcgKnRpbWluZykKK3ZvaWQgc29jX2NvbW1vbl9wY21jaWFfZ2V0X3RpbWluZyhzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQgKnNrdCwKKwlzdHJ1Y3Qgc29jX3BjbWNpYV90aW1pbmcgKnRpbWluZykKIHsKLQl0aW1pbmctPmlvID0gY2FsY19zcGVlZChza3QtPnNwZF9pbywgTUFYX0lPX1dJTiwgU09DX1BDTUNJQV9JT19BQ0NFU1MpOwotCXRpbWluZy0+bWVtID0gY2FsY19zcGVlZChza3QtPnNwZF9tZW0sIE1BWF9XSU4sIFNPQ19QQ01DSUFfM1ZfTUVNX0FDQ0VTUyk7Ci0JdGltaW5nLT5hdHRyID0gY2FsY19zcGVlZChza3QtPnNwZF9hdHRyLCBNQVhfV0lOLCBTT0NfUENNQ0lBXzNWX01FTV9BQ0NFU1MpOworCXRpbWluZy0+aW8gPQorCQljYWxjX3NwZWVkKHNrdC0+c3BkX2lvLCBNQVhfSU9fV0lOLCBTT0NfUENNQ0lBX0lPX0FDQ0VTUyk7CisJdGltaW5nLT5tZW0gPQorCQljYWxjX3NwZWVkKHNrdC0+c3BkX21lbSwgTUFYX1dJTiwgU09DX1BDTUNJQV8zVl9NRU1fQUNDRVNTKTsKKwl0aW1pbmctPmF0dHIgPQorCQljYWxjX3NwZWVkKHNrdC0+c3BkX2F0dHIsIE1BWF9XSU4sIFNPQ19QQ01DSUFfM1ZfTUVNX0FDQ0VTUyk7CiB9CiBFWFBPUlRfU1lNQk9MKHNvY19jb21tb25fcGNtY2lhX2dldF90aW1pbmcpOwogCkBAIC0xMzcsOCArMTQyLDggQEAKICAqCiAgKiBDb252ZXJ0IFBDTUNJQSBzb2NrZXQgc3RhdGUgdG8gb3VyIHNvY2tldCBjb25maWd1cmUgc3RydWN0dXJlLgogICovCi1zdGF0aWMgaW50Ci1zb2NfY29tbW9uX3BjbWNpYV9jb25maWdfc2t0KHN0cnVjdCBzb2NfcGNtY2lhX3NvY2tldCAqc2t0LCBzb2NrZXRfc3RhdGVfdCAqc3RhdGUpCitzdGF0aWMgaW50IHNvY19jb21tb25fcGNtY2lhX2NvbmZpZ19za3QoCisJc3RydWN0IHNvY19wY21jaWFfc29ja2V0ICpza3QsIHNvY2tldF9zdGF0ZV90ICpzdGF0ZSkKIHsKIAlpbnQgcmV0OwogCkBAIC0xNTAsNyArMTU1LDggQEAKIAkJICovCiAJCWlmIChza3QtPmlycV9zdGF0ZSAhPSAxICYmIHN0YXRlLT5pb19pcnEpIHsKIAkJCXNrdC0+aXJxX3N0YXRlID0gMTsKLQkJCXNldF9pcnFfdHlwZShza3QtPnNvY2tldC5wY2lfaXJxLCBJUlFfVFlQRV9FREdFX0ZBTExJTkcpOworCQkJc2V0X2lycV90eXBlKHNrdC0+c29ja2V0LnBjaV9pcnEsCisJCQkJSVJRX1RZUEVfRURHRV9GQUxMSU5HKTsKIAkJfSBlbHNlIGlmIChza3QtPmlycV9zdGF0ZSA9PSAxICYmIHN0YXRlLT5pb19pcnEgPT0gMCkgewogCQkJc2t0LT5pcnFfc3RhdGUgPSAwOwogCQkJc2V0X2lycV90eXBlKHNrdC0+c29ja2V0LnBjaV9pcnEsIElSUV9UWVBFX05PTkUpOwpAQCAtMzA0LDI0ICszMTAsMjQgQEAKICAqIG9mIHBvd2VyIGNvbmZpZ3VyYXRpb24sIHJlc2V0LCAmYy4gV2UgYWxzbyByZWNvcmQgdGhlIHZhbHVlIG9mCiAgKiBgc3RhdGUnIGluIG9yZGVyIHRvIHJlZ3VyZ2l0YXRlIGl0IHRvIHRoZSBQQ01DSUEgY29yZSBsYXRlci4KICAqLwotc3RhdGljIGludAotc29jX2NvbW1vbl9wY21jaWFfc2V0X3NvY2tldChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc29jaywgc29ja2V0X3N0YXRlX3QgKnN0YXRlKQorc3RhdGljIGludCBzb2NfY29tbW9uX3BjbWNpYV9zZXRfc29ja2V0KAorCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzb2NrLCBzb2NrZXRfc3RhdGVfdCAqc3RhdGUpCiB7CiAJc3RydWN0IHNvY19wY21jaWFfc29ja2V0ICpza3QgPSB0b19zb2NfcGNtY2lhX3NvY2tldChzb2NrKTsKIAotCWRlYnVnKHNrdCwgMiwgIm1hc2s6ICVzJXMlcyVzJXMlc2ZsYWdzOiAlcyVzJXMlcyVzJXNWY2MgJWQgVnBwICVkIGlycSAlZFxuIiwKLQkJCShzdGF0ZS0+Y3NjX21hc2s9PTApPyI8Tk9ORT4gIjoiIiwKLQkJCShzdGF0ZS0+Y3NjX21hc2smU1NfREVURUNUKT8iREVURUNUICI6IiIsCi0JCQkoc3RhdGUtPmNzY19tYXNrJlNTX1JFQURZKT8iUkVBRFkgIjoiIiwKLQkJCShzdGF0ZS0+Y3NjX21hc2smU1NfQkFUREVBRCk/IkJBVERFQUQgIjoiIiwKLQkJCShzdGF0ZS0+Y3NjX21hc2smU1NfQkFUV0FSTik/IkJBVFdBUk4gIjoiIiwKLQkJCShzdGF0ZS0+Y3NjX21hc2smU1NfU1RTQ0hHKT8iU1RTQ0hHICI6IiIsCi0JCQkoc3RhdGUtPmZsYWdzPT0wKT8iPE5PTkU+ICI6IiIsCi0JCQkoc3RhdGUtPmZsYWdzJlNTX1BXUl9BVVRPKT8iUFdSX0FVVE8gIjoiIiwKLQkJCShzdGF0ZS0+ZmxhZ3MmU1NfSU9DQVJEKT8iSU9DQVJEICI6IiIsCi0JCQkoc3RhdGUtPmZsYWdzJlNTX1JFU0VUKT8iUkVTRVQgIjoiIiwKLQkJCShzdGF0ZS0+ZmxhZ3MmU1NfU1BLUl9FTkEpPyJTUEtSX0VOQSAiOiIiLAotCQkJKHN0YXRlLT5mbGFncyZTU19PVVRQVVRfRU5BKT8iT1VUUFVUX0VOQSAiOiIiLAorCWRlYnVnKHNrdCwgMiwgIm1hc2s6ICVzJXMlcyVzJXMlcyBmbGFnczogJXMlcyVzJXMlcyVzIFZjYyAlZCBWcHAgJWQgaXJxICVkXG4iLAorCQkJKHN0YXRlLT5jc2NfbWFzayA9PSAwKQkJPyAiPE5PTkU+ICIgOgkiIiwKKwkJCShzdGF0ZS0+Y3NjX21hc2sgJiBTU19ERVRFQ1QpCT8gIkRFVEVDVCAiIDoJIiIsCisJCQkoc3RhdGUtPmNzY19tYXNrICYgU1NfUkVBRFkpCT8gIlJFQURZICIgOgkiIiwKKwkJCShzdGF0ZS0+Y3NjX21hc2sgJiBTU19CQVRERUFEKQk/ICJCQVRERUFEICIgOgkiIiwKKwkJCShzdGF0ZS0+Y3NjX21hc2sgJiBTU19CQVRXQVJOKQk/ICJCQVRXQVJOICIgOgkiIiwKKwkJCShzdGF0ZS0+Y3NjX21hc2sgJiBTU19TVFNDSEcpCT8gIlNUU0NIRyAiIDoJIiIsCisJCQkoc3RhdGUtPmZsYWdzID09IDApCQk/ICI8Tk9ORT4gIiA6CSIiLAorCQkJKHN0YXRlLT5mbGFncyAmIFNTX1BXUl9BVVRPKQk/ICJQV1JfQVVUTyAiIDoJIiIsCisJCQkoc3RhdGUtPmZsYWdzICYgU1NfSU9DQVJEKQk/ICJJT0NBUkQgIiA6CSIiLAorCQkJKHN0YXRlLT5mbGFncyAmIFNTX1JFU0VUKQk/ICJSRVNFVCAiIDoJIiIsCisJCQkoc3RhdGUtPmZsYWdzICYgU1NfU1BLUl9FTkEpCT8gIlNQS1JfRU5BICIgOgkiIiwKKwkJCShzdGF0ZS0+ZmxhZ3MgJiBTU19PVVRQVVRfRU5BKQk/ICJPVVRQVVRfRU5BICIgOiAiIiwKIAkJCXN0YXRlLT5WY2MsIHN0YXRlLT5WcHAsIHN0YXRlLT5pb19pcnEpOwogCiAJcmV0dXJuIHNvY19jb21tb25fcGNtY2lhX2NvbmZpZ19za3Qoc2t0LCBzdGF0ZSk7CkBAIC0zMzYsOCArMzQyLDggQEAKICAqCiAgKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9yCiAgKi8KLXN0YXRpYyBpbnQKLXNvY19jb21tb25fcGNtY2lhX3NldF9pb19tYXAoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNvY2ssIHN0cnVjdCBwY2NhcmRfaW9fbWFwICptYXApCitzdGF0aWMgaW50IHNvY19jb21tb25fcGNtY2lhX3NldF9pb19tYXAoCisJc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNvY2ssIHN0cnVjdCBwY2NhcmRfaW9fbWFwICptYXApCiB7CiAJc3RydWN0IHNvY19wY21jaWFfc29ja2V0ICpza3QgPSB0b19zb2NfcGNtY2lhX3NvY2tldChzb2NrKTsKIAl1bnNpZ25lZCBzaG9ydCBzcGVlZCA9IG1hcC0+c3BlZWQ7CkBAIC0zNDYsMTQgKzM1MiwxNCBAQAogCQltYXAtPm1hcCwgbWFwLT5zcGVlZCwgKHVuc2lnbmVkIGxvbmcgbG9uZyltYXAtPnN0YXJ0LAogCQkodW5zaWduZWQgbG9uZyBsb25nKW1hcC0+c3RvcCk7CiAJZGVidWcoc2t0LCAyLCAiZmxhZ3M6ICVzJXMlcyVzJXMlcyVzJXNcbiIsCi0JCShtYXAtPmZsYWdzPT0wKT8iPE5PTkU+IjoiIiwKLQkJKG1hcC0+ZmxhZ3MmTUFQX0FDVElWRSk/IkFDVElWRSAiOiIiLAotCQkobWFwLT5mbGFncyZNQVBfMTZCSVQpPyIxNkJJVCAiOiIiLAotCQkobWFwLT5mbGFncyZNQVBfQVVUT1NaKT8iQVVUT1NaICI6IiIsCi0JCShtYXAtPmZsYWdzJk1BUF8wV1MpPyIwV1MgIjoiIiwKLQkJKG1hcC0+ZmxhZ3MmTUFQX1dSUFJPVCk/IldSUFJPVCAiOiIiLAotCQkobWFwLT5mbGFncyZNQVBfVVNFX1dBSVQpPyJVU0VfV0FJVCAiOiIiLAotCQkobWFwLT5mbGFncyZNQVBfUFJFRkVUQ0gpPyJQUkVGRVRDSCAiOiIiKTsKKwkJKG1hcC0+ZmxhZ3MgPT0gMCkJCT8gIjxOT05FPiIJOiAiIiwKKwkJKG1hcC0+ZmxhZ3MgJiBNQVBfQUNUSVZFKQk/ICJBQ1RJVkUgIgk6ICIiLAorCQkobWFwLT5mbGFncyAmIE1BUF8xNkJJVCkJPyAiMTZCSVQgIgk6ICIiLAorCQkobWFwLT5mbGFncyAmIE1BUF9BVVRPU1opCT8gIkFVVE9TWiAiCTogIiIsCisJCShtYXAtPmZsYWdzICYgTUFQXzBXUykJCT8gIjBXUyAiCTogIiIsCisJCShtYXAtPmZsYWdzICYgTUFQX1dSUFJPVCkJPyAiV1JQUk9UICIJOiAiIiwKKwkJKG1hcC0+ZmxhZ3MgJiBNQVBfVVNFX1dBSVQpCT8gIlVTRV9XQUlUICIJOiAiIiwKKwkJKG1hcC0+ZmxhZ3MgJiBNQVBfUFJFRkVUQ0gpCT8gIlBSRUZFVENIICIJOiAiIik7CiAKIAlpZiAobWFwLT5tYXAgPj0gTUFYX0lPX1dJTikgewogCQlwcmludGsoS0VSTl9FUlIgIiVzKCk6IG1hcCAoJWQpIG91dCBvZiByYW5nZVxuIiwgX19mdW5jX18sCkBAIC0zOTAsOCArMzk2LDggQEAKICAqCiAgKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIC1FUlJOTyBvbiBlcnJvcgogICovCi1zdGF0aWMgaW50Ci1zb2NfY29tbW9uX3BjbWNpYV9zZXRfbWVtX21hcChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc29jaywgc3RydWN0IHBjY2FyZF9tZW1fbWFwICptYXApCitzdGF0aWMgaW50IHNvY19jb21tb25fcGNtY2lhX3NldF9tZW1fbWFwKAorCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzb2NrLCBzdHJ1Y3QgcGNjYXJkX21lbV9tYXAgKm1hcCkKIHsKIAlzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQgKnNrdCA9IHRvX3NvY19wY21jaWFfc29ja2V0KHNvY2spOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwpAQCAtNDAwLDE0ICs0MDYsMTQgQEAKIAlkZWJ1Zyhza3QsIDIsICJtYXAgJXUgc3BlZWQgJXUgY2FyZF9zdGFydCAlMDh4XG4iLAogCQltYXAtPm1hcCwgbWFwLT5zcGVlZCwgbWFwLT5jYXJkX3N0YXJ0KTsKIAlkZWJ1Zyhza3QsIDIsICJmbGFnczogJXMlcyVzJXMlcyVzJXMlc1xuIiwKLQkJKG1hcC0+ZmxhZ3M9PTApPyI8Tk9ORT4iOiIiLAotCQkobWFwLT5mbGFncyZNQVBfQUNUSVZFKT8iQUNUSVZFICI6IiIsCi0JCShtYXAtPmZsYWdzJk1BUF8xNkJJVCk/IjE2QklUICI6IiIsCi0JCShtYXAtPmZsYWdzJk1BUF9BVVRPU1opPyJBVVRPU1ogIjoiIiwKLQkJKG1hcC0+ZmxhZ3MmTUFQXzBXUyk/IjBXUyAiOiIiLAotCQkobWFwLT5mbGFncyZNQVBfV1JQUk9UKT8iV1JQUk9UICI6IiIsCi0JCShtYXAtPmZsYWdzJk1BUF9BVFRSSUIpPyJBVFRSSUIgIjoiIiwKLQkJKG1hcC0+ZmxhZ3MmTUFQX1VTRV9XQUlUKT8iVVNFX1dBSVQgIjoiIik7CisJCShtYXAtPmZsYWdzID09IDApCQk/ICI8Tk9ORT4iCTogIiIsCisJCShtYXAtPmZsYWdzICYgTUFQX0FDVElWRSkJPyAiQUNUSVZFICIJOiAiIiwKKwkJKG1hcC0+ZmxhZ3MgJiBNQVBfMTZCSVQpCT8gIjE2QklUICIJOiAiIiwKKwkJKG1hcC0+ZmxhZ3MgJiBNQVBfQVVUT1NaKQk/ICJBVVRPU1ogIgk6ICIiLAorCQkobWFwLT5mbGFncyAmIE1BUF8wV1MpCQk/ICIwV1MgIgk6ICIiLAorCQkobWFwLT5mbGFncyAmIE1BUF9XUlBST1QpCT8gIldSUFJPVCAiCTogIiIsCisJCShtYXAtPmZsYWdzICYgTUFQX0FUVFJJQikJPyAiQVRUUklCICIJOiAiIiwKKwkJKG1hcC0+ZmxhZ3MgJiBNQVBfVVNFX1dBSVQpCT8gIlVTRV9XQUlUICIJOiAiIik7CiAKIAlpZiAobWFwLT5tYXAgPj0gTUFYX1dJTikKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC00NjIsOCArNDY4LDggQEAKIAl7IFNTX09VVFBVVF9FTkEsCSJTU19PVVRQVVRfRU5BIgl9LAogfTsKIAotc3RhdGljIHZvaWQKLWR1bXBfYml0cyhjaGFyICoqcCwgY29uc3QgY2hhciAqcHJlZml4LCB1bnNpZ25lZCBpbnQgdmFsLCBzdHJ1Y3QgYml0dGJsICpiaXRzLCBpbnQgc3opCitzdGF0aWMgdm9pZCBkdW1wX2JpdHMoY2hhciAqKnAsIGNvbnN0IGNoYXIgKnByZWZpeCwKKwl1bnNpZ25lZCBpbnQgdmFsLCBzdHJ1Y3QgYml0dGJsICpiaXRzLCBpbnQgc3opCiB7CiAJY2hhciAqYiA9ICpwOwogCWludCBpOwpAQCAtNDgxLDEzICs0ODcsMTQgQEAKICAqCiAgKiBSZXR1cm5zOiB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgYWRkZWQgdG8gdGhlIGJ1ZmZlcgogICovCi1zdGF0aWMgc3NpemVfdCBzaG93X3N0YXR1cyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBzaG93X3N0YXR1cygKKwlzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IHNvY19wY21jaWFfc29ja2V0ICpza3QgPQogCQljb250YWluZXJfb2YoZGV2LCBzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQsIHNvY2tldC5kZXYpOwogCWNoYXIgKnAgPSBidWY7CiAKLQlwKz1zcHJpbnRmKHAsICJzbG90ICAgICA6ICVkXG4iLCBza3QtPm5yKTsKKwlwICs9IHNwcmludGYocCwgInNsb3QgICAgIDogJWRcbiIsIHNrdC0+bnIpOwogCiAJZHVtcF9iaXRzKCZwLCAic3RhdHVzIiwgc2t0LT5zdGF0dXMsCiAJCSAgc3RhdHVzX2JpdHMsIEFSUkFZX1NJWkUoc3RhdHVzX2JpdHMpKTsKQEAgLTQ5NiwxMiArNTAzLDEyIEBACiAJZHVtcF9iaXRzKCZwLCAiY3NfZmxhZ3MiLCBza3QtPmNzX3N0YXRlLmZsYWdzLAogCQkgIGNvbmZfYml0cywgQVJSQVlfU0laRShjb25mX2JpdHMpKTsKIAotCXArPXNwcmludGYocCwgIlZjYyAgICAgIDogJWRcbiIsIHNrdC0+Y3Nfc3RhdGUuVmNjKTsKLQlwKz1zcHJpbnRmKHAsICJWcHAgICAgICA6ICVkXG4iLCBza3QtPmNzX3N0YXRlLlZwcCk7Ci0JcCs9c3ByaW50ZihwLCAiSVJRICAgICAgOiAlZCAoJWQpXG4iLCBza3QtPmNzX3N0YXRlLmlvX2lycSwKKwlwICs9IHNwcmludGYocCwgIlZjYyAgICAgIDogJWRcbiIsIHNrdC0+Y3Nfc3RhdGUuVmNjKTsKKwlwICs9IHNwcmludGYocCwgIlZwcCAgICAgIDogJWRcbiIsIHNrdC0+Y3Nfc3RhdGUuVnBwKTsKKwlwICs9IHNwcmludGYocCwgIklSUSAgICAgIDogJWQgKCVkKVxuIiwgc2t0LT5jc19zdGF0ZS5pb19pcnEsCiAJCXNrdC0+c29ja2V0LnBjaV9pcnEpOwogCWlmIChza3QtPm9wcy0+c2hvd190aW1pbmcpCi0JCXArPXNrdC0+b3BzLT5zaG93X3RpbWluZyhza3QsIHApOworCQlwICs9IHNrdC0+b3BzLT5zaG93X3RpbWluZyhza3QsIHApOwogCiAJcmV0dXJuIHAtYnVmOwogfQpAQCAtNTk0LDcgKzYwMSw3IEBACiAKIAltdXRleF9sb2NrKCZzb2NfcGNtY2lhX3NvY2tldHNfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShza3QsICZzb2NfcGNtY2lhX3NvY2tldHMsIG5vZGUpCi0JCWlmICggc2t0LT5vcHMtPmZyZXF1ZW5jeV9jaGFuZ2UgKQorCQlpZiAoc2t0LT5vcHMtPmZyZXF1ZW5jeV9jaGFuZ2UpCiAJCQlyZXQgKz0gc2t0LT5vcHMtPmZyZXF1ZW5jeV9jaGFuZ2Uoc2t0LCB2YWwsIGZyZXFzKTsKIAltdXRleF91bmxvY2soJnNvY19wY21jaWFfc29ja2V0c19sb2NrKTsKIApAQCAtNjIwLDcgKzYyNyw4IEBACiAKIHN0YXRpYyB2b2lkIHNvY19wY21jaWFfY3B1ZnJlcV91bnJlZ2lzdGVyKHZvaWQpCiB7Ci0JY3B1ZnJlcV91bnJlZ2lzdGVyX25vdGlmaWVyKCZzb2NfcGNtY2lhX25vdGlmaWVyX2Jsb2NrLCBDUFVGUkVRX1RSQU5TSVRJT05fTk9USUZJRVIpOworCWNwdWZyZXFfdW5yZWdpc3Rlcl9ub3RpZmllcigmc29jX3BjbWNpYV9ub3RpZmllcl9ibG9jaywKKwkJQ1BVRlJFUV9UUkFOU0lUSU9OX05PVElGSUVSKTsKIH0KIG1vZHVsZV9leGl0KHNvY19wY21jaWFfY3B1ZnJlcV91bnJlZ2lzdGVyKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5oIGIvZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5oCmluZGV4IGJiY2Q1MzguLjlkYWE3MzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3NvY19jb21tb24uaAorKysgYi9kcml2ZXJzL3BjbWNpYS9zb2NfY29tbW9uLmgKQEAgLTEwLDYgKzEwLDcgQEAKICNkZWZpbmUgX0FTTV9BUkNIX1BDTUNJQQogCiAvKiBpbmNsdWRlIHRoZSB3b3JsZCAqLworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KICNpbmNsdWRlIDxwY21jaWEvc3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CkBAIC0yOSw2ICszMCw3IEBACiAJICogSW5mbyBmcm9tIGxvdyBsZXZlbCBoYW5kbGVyCiAJICovCiAJdW5zaWduZWQgaW50CQlucjsKKwlzdHJ1Y3QgY2xrCQkqY2xrOwogCiAJLyoKIAkgKiBDb3JlIFBDTUNJQSBzdGF0ZQpAQCAtNTYsNiArNTgsNyBAQAogCiBzdHJ1Y3Qgc2t0X2Rldl9pbmZvIHsKIAlpbnQgbnNrdDsKKwlzdHJ1Y3QgY2xrICpjbGs7CiAJc3RydWN0IHNvY19wY21jaWFfc29ja2V0IHNrdFswXTsKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2ludGVsX3NjdV9pcGMuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2ludGVsX3NjdV9pcGMuYwppbmRleCA0MWE5ZTM0Li5jYTM1YjBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9pbnRlbF9zY3VfaXBjLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvaW50ZWxfc2N1X2lwYy5jCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSA8bGludXgvc2ZpLmg+CiAjaW5jbHVkZSA8YXNtL21yc3QuaD4KICNpbmNsdWRlIDxhc20vaW50ZWxfc2N1X2lwYy5oPgorI2luY2x1ZGUgPGFzbS9tcnN0Lmg+CiAKIC8qIElQQyBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgbWVzc2FnZSB0eXBlcyAqLwogI2RlZmluZSBJUENNU0dfV0FUQ0hET0dfVElNRVIgMHhGOCAvKiBTZXQgS2VybmVsIFdhdGNoZG9nIFRocmVzaG9sZCAqLwpAQCAtNjk5LDYgKzcwMCw5IEBACiAJCWlvdW5tYXAoaXBjZGV2LmlwY19iYXNlKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQorCisJaW50ZWxfc2N1X2RldmljZXNfY3JlYXRlKCk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzIwLDYgKzcyNCw3IEBACiAJaW91bm1hcChpcGNkZXYuaXBjX2Jhc2UpOwogCWlvdW5tYXAoaXBjZGV2LmkyY19iYXNlKTsKIAlpcGNkZXYucGRldiA9IE5VTEw7CisJaW50ZWxfc2N1X2RldmljZXNfZGVzdHJveSgpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGNpX2lkc1tdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wb3dlci9kczI3NjBfYmF0dGVyeS5jIGIvZHJpdmVycy9wb3dlci9kczI3NjBfYmF0dGVyeS5jCmluZGV4IGIzYzAxYzEuLmU3Zjg5NzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG93ZXIvZHMyNzYwX2JhdHRlcnkuYworKysgYi9kcml2ZXJzL3Bvd2VyL2RzMjc2MF9iYXR0ZXJ5LmMKQEAgLTU4MCwxMCArNTgwLDggQEAKIHsKIAlzdHJ1Y3QgZHMyNzYwX2RldmljZV9pbmZvICpkaSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCi0JY2FuY2VsX3JlYXJtaW5nX2RlbGF5ZWRfd29ya3F1ZXVlKGRpLT5tb25pdG9yX3dxdWV1ZSwKLQkJCQkJICAmZGktPm1vbml0b3Jfd29yayk7Ci0JY2FuY2VsX3JlYXJtaW5nX2RlbGF5ZWRfd29ya3F1ZXVlKGRpLT5tb25pdG9yX3dxdWV1ZSwKLQkJCQkJICAmZGktPnNldF9jaGFyZ2VkX3dvcmspOworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmZGktPm1vbml0b3Jfd29yayk7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZkaS0+c2V0X2NoYXJnZWRfd29yayk7CiAJZGVzdHJveV93b3JrcXVldWUoZGktPm1vbml0b3Jfd3F1ZXVlKTsKIAlwb3dlcl9zdXBwbHlfdW5yZWdpc3RlcigmZGktPmJhdCk7CiAJa2ZyZWUoZGkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wb3dlci9pbnRlbF9taWRfYmF0dGVyeS5jIGIvZHJpdmVycy9wb3dlci9pbnRlbF9taWRfYmF0dGVyeS5jCmluZGV4IDJhMTBjZDMuLjM2Y2Y0MDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG93ZXIvaW50ZWxfbWlkX2JhdHRlcnkuYworKysgYi9kcml2ZXJzL3Bvd2VyL2ludGVsX21pZF9iYXR0ZXJ5LmMKQEAgLTczMCw4ICs3MzAsNyBAQAogcG93ZXJfcmVnX2ZhaWxlZF8xOgogCXBvd2VyX3N1cHBseV91bnJlZ2lzdGVyKCZwYmktPmJhdHQpOwogcG93ZXJfcmVnX2ZhaWxlZDoKLQljYW5jZWxfcmVhcm1pbmdfZGVsYXllZF93b3JrcXVldWUocGJpLT5tb25pdG9yX3dxdWV1ZSwKLQkJCQkJCSZwYmktPm1vbml0b3JfYmF0dGVyeSk7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZwYmktPm1vbml0b3JfYmF0dGVyeSk7CiByZXF1ZXN0aXJxX2ZhaWxlZDoKIAlkZXN0cm95X3dvcmtxdWV1ZShwYmktPm1vbml0b3Jfd3F1ZXVlKTsKIHdxdWV1ZV9mYWlsZWQ6CkBAIC03NjAsOCArNzU5LDcgQEAKIAlzdHJ1Y3QgcG1pY19wb3dlcl9tb2R1bGVfaW5mbyAqcGJpID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOwogCiAJZnJlZV9pcnEocGJpLT5pcnEsIHBiaSk7Ci0JY2FuY2VsX3JlYXJtaW5nX2RlbGF5ZWRfd29ya3F1ZXVlKHBiaS0+bW9uaXRvcl93cXVldWUsCi0JCQkJCSZwYmktPm1vbml0b3JfYmF0dGVyeSk7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZwYmktPm1vbml0b3JfYmF0dGVyeSk7CiAJZGVzdHJveV93b3JrcXVldWUocGJpLT5tb25pdG9yX3dxdWV1ZSk7CiAKIAlwb3dlcl9zdXBwbHlfdW5yZWdpc3RlcigmcGJpLT51c2IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvS2NvbmZpZyBiL2RyaXZlcnMvcnRjL0tjb25maWcKaW5kZXggMjg4MzQyOC4uNDk0MWNhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvS2NvbmZpZworKysgYi9kcml2ZXJzL3J0Yy9LY29uZmlnCkBAIC00NjMsNiArNDYzLDE4IEBACiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gSWYgc28sIHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIHJ0Yy1jbW9zLgogCitjb25maWcgUlRDX0RSVl9WUlRDCisJdHJpc3RhdGUgIlZpcnR1YWwgUlRDIGZvciBNb29yZXN0b3duIHBsYXRmb3JtcyIKKwlkZXBlbmRzIG9uIFg4Nl9NUlNUCisJZGVmYXVsdCB5IGlmIFg4Nl9NUlNUCisKKwloZWxwCisJU2F5ICJ5ZXMiIGhlcmUgdG8gZ2V0IGRpcmVjdCBzdXBwb3J0IGZvciB0aGUgcmVhbCB0aW1lIGNsb2NrCisJZm91bmQgb24gTW9vcmVzdG93biBwbGF0Zm9ybXMuIFRoZSBWUlRDIGlzIGEgZW11bGF0ZWQgUlRDIHRoYXQKKwlkZXJpdmVzIGl0cyBjbG9jayBzb3VyY2UgZnJvbSBhIHJlYWwgUlRDIGluIHRoZSBQTUlDLiBUaGUgTUMxNDY4MTgKKwlzdHlsZSBwcm9ncmFtbWluZyBpbnRlcmZhY2UgaXMgbW9zdGx5IGNvbnNlcnZlZCwgYnV0IGFueQorCXVwZGF0ZXMgYXJlIGRvbmUgdmlhIElQQyBjYWxscyB0byB0aGUgc3lzdGVtIGNvbnRyb2xsZXIgRlcuCisKIGNvbmZpZyBSVENfRFJWX0RTMTIxNgogCXRyaXN0YXRlICJEYWxsYXMgRFMxMjE2IgogCWRlcGVuZHMgb24gU05JX1JNCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9NYWtlZmlsZSBiL2RyaXZlcnMvcnRjL01ha2VmaWxlCmluZGV4IDRjMjgzMmQuLjJhZmRhZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvcnRjL01ha2VmaWxlCkBAIC0zMCw2ICszMCw3IEBACiBvYmotJChDT05GSUdfUlRDX0RSVl9DT0g5MDEzMzEpCSs9IHJ0Yy1jb2g5MDEzMzEubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfREFWSU5DSSkJKz0gcnRjLWRhdmluY2kubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfRE0zNTVFVk0pCSs9IHJ0Yy1kbTM1NWV2bS5vCitvYmotJChDT05GSUdfUlRDX0RSVl9WUlRDKQkrPSBydGMtbXJzdC5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9EUzEyMTYpCSs9IHJ0Yy1kczEyMTYubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfRFMxMjg2KQkrPSBydGMtZHMxMjg2Lm8KIG9iai0kKENPTkZJR19SVENfRFJWX0RTMTMwMikJKz0gcnRjLWRzMTMwMi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtZGV2LmMgYi9kcml2ZXJzL3J0Yy9ydGMtZGV2LmMKaW5kZXggNjIyMjdjZC4uMGNjMDk4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWRldi5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1kZXYuYwpAQCAtMTA0LDcgKzEwNCw3IEBACiAJCX0KIAkJaWYgKHJ0Yy0+dWllX3Rhc2tfYWN0aXZlKSB7CiAJCQlzcGluX3VubG9ja19pcnEoJnJ0Yy0+aXJxX2xvY2spOwotCQkJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwkJCWZsdXNoX3dvcmtfc3luYygmcnRjLT51aWVfdGFzayk7CiAJCQlzcGluX2xvY2tfaXJxKCZydGMtPmlycV9sb2NrKTsKIAkJfQogCQlydGMtPnVpZV9pcnFfYWN0aXZlID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1kczEzMDUuYyBiL2RyaXZlcnMvcnRjL3J0Yy1kczEzMDUuYwppbmRleCA0OGRhODVlLi4wNzdhZjFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtZHMxMzA1LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWRzMTMwNS5jCkBAIC04MTMsNyArODEzLDcgQEAKIAlpZiAoc3BpLT5pcnEpIHsKIAkJc2V0X2JpdChGTEFHX0VYSVRJTkcsICZkczEzMDUtPmZsYWdzKTsKIAkJZnJlZV9pcnEoc3BpLT5pcnEsIGRzMTMwNSk7Ci0JCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisJCWNhbmNlbF93b3JrX3N5bmMoJmRzMTMwNS0+d29yayk7CiAJfQogCiAJcnRjX2RldmljZV91bnJlZ2lzdGVyKGRzMTMwNS0+cnRjKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1kczEzNzQuYyBiL2RyaXZlcnMvcnRjL3J0Yy1kczEzNzQuYwppbmRleCAxZjAwMDdmLi40N2ZiNjM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtZHMxMzc0LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWRzMTM3NC5jCkBAIC00MTcsNyArNDE3LDcgQEAKIAkJbXV0ZXhfdW5sb2NrKCZkczEzNzQtPm11dGV4KTsKIAogCQlmcmVlX2lycShjbGllbnQtPmlycSwgY2xpZW50KTsKLQkJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwkJY2FuY2VsX3dvcmtfc3luYygmZHMxMzc0LT53b3JrKTsKIAl9CiAKIAlydGNfZGV2aWNlX3VucmVnaXN0ZXIoZHMxMzc0LT5ydGMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWRzMzIzMi5jIGIvZHJpdmVycy9ydGMvcnRjLWRzMzIzMi5jCmluZGV4IDU3MDYzNTUuLjIzYTllZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1kczMyMzIuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtZHMzMjMyLmMKQEAgLTQ2Myw3ICs0NjMsNyBAQAogCQltdXRleF91bmxvY2soJmRzMzIzMi0+bXV0ZXgpOwogCiAJCWZyZWVfaXJxKGNsaWVudC0+aXJxLCBjbGllbnQpOwotCQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCQljYW5jZWxfd29ya19zeW5jKCZkczMyMzItPndvcmspOwogCX0KIAogCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihkczMyMzItPnJ0Yyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtbXJzdC5jIGIvZHJpdmVycy9ydGMvcnRjLW1yc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2QwY2Y2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ydGMvcnRjLW1yc3QuYwpAQCAtMCwwICsxLDU4MiBAQAorLyoKKyAqIHJ0Yy1tcnN0LmM6IERyaXZlciBmb3IgTW9vcmVzdG93biB2aXJ0dWFsIFJUQworICoKKyAqIChDKSBDb3B5cmlnaHQgMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbgorICogQXV0aG9yOiBKYWNvYiBQYW4gKGphY29iLmp1bi5wYW5AaW50ZWwuY29tKQorICoJICAgRmVuZyBUYW5nIChmZW5nLnRhbmdAaW50ZWwuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBOb3RlOgorICogVlJUQyBpcyBlbXVsYXRlZCBieSBzeXN0ZW0gY29udHJvbGxlciBmaXJtd2FyZSwgdGhlIHJlYWwgSFcKKyAqIFJUQyBpcyBsb2NhdGVkIGluIHRoZSBQTUlDIGRldmljZS4gU0NVIEZXIHNoYWRvd3MgUE1JQyBSVEMKKyAqIGluIGEgbWVtb3J5IG1hcHBlZCBJTyBzcGFjZSB0aGF0IGlzIHZpc2libGUgdG8gdGhlIGhvc3QgSUEKKyAqIHByb2Nlc3Nvci4KKyAqCisgKiBUaGlzIGRyaXZlciBpcyBiYXNlZCB1cG9uIGRyaXZlcnMvcnRjL3J0Yy1jbW9zLmMKKyAqLworCisvKgorICogTm90ZToKKyAqICAqIHZSVEMgb25seSBzdXBwb3J0cyBiaW5hcnkgbW9kZSBhbmQgMjRIIG1vZGUKKyAqICAqIHZSVEMgb25seSBzdXBwb3J0IFBJRSBhbmQgQUlFLCBubyBVSUUsIGFuZCBpdHMgUElFIG9ubHkgaGFwcGVucworICogICAgYXQgMjM6NTk6NTlwbSBldmVyeWRheSwgbm8gc3VwcG9ydCBmb3IgYWRqdXN0YWJsZSBmcmVxdWVuY3kKKyAqICAqIEFsYXJtIGZ1bmN0aW9uIGlzIGFsc28gbGltaXRlZCB0byBoci9taW4vc2VjLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2RfZGV2aWNldGFibGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zZmkuaD4KKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3J0Yy5oPgorI2luY2x1ZGUgPGFzbS9pbnRlbF9zY3VfaXBjLmg+CisjaW5jbHVkZSA8YXNtL21yc3QuaD4KKyNpbmNsdWRlIDxhc20vbXJzdC12cnRjLmg+CisKK3N0cnVjdCBtcnN0X3J0YyB7CisJc3RydWN0IHJ0Y19kZXZpY2UJKnJ0YzsKKwlzdHJ1Y3QgZGV2aWNlCQkqZGV2OworCWludAkJCWlycTsKKwlzdHJ1Y3QgcmVzb3VyY2UJCSppb21lbTsKKworCXU4CQkJZW5hYmxlZF93YWtlOworCXU4CQkJc3VzcGVuZF9jdHJsOworfTsKKworc3RhdGljIGNvbnN0IGNoYXIgZHJpdmVyX25hbWVbXSA9ICJydGNfbXJzdCI7CisKKyNkZWZpbmUJUlRDX0lSUU1BU0sJKFJUQ19QRiB8IFJUQ19BRikKKworc3RhdGljIGlubGluZSBpbnQgaXNfaW50cih1OCBydGNfaW50cikKK3sKKwlpZiAoIShydGNfaW50ciAmIFJUQ19JUlFGKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHJ0Y19pbnRyICYgUlRDX0lSUU1BU0s7Cit9CisKKy8qCisgKiBydGNfdGltZSdzIHllYXIgY29udGFpbnMgdGhlIGluY3JlbWVudCBvdmVyIDE5MDAsIGJ1dCB2UlRDJ3MgWUVBUgorICogcmVnaXN0ZXIgY2FuJ3QgYmUgcHJvZ3JhbW1lZCB0byB2YWx1ZSBsYXJnZXIgdGhhbiAweDY0LCBzbyB2UlRDCisgKiBkcml2ZXIgY2hvc2UgdG8gdXNlIDE5NjAgKDE5NzAgaXMgVU5JWCB0aW1lIHN0YXJ0IHBvaW50KSBhcyB0aGUgYmFzZSwKKyAqIGFuZCBkb2VzIHRoZSB0cmFuc2xhdGlvbiBhdCByZWFkL3dyaXRlIHRpbWUuCisgKgorICogV2h5IG5vdCBqdXN0IHVzZSAxOTcwIGFzIHRoZSBvZmZzZXQ/IGl0J3MgYmVjYXVzZSB1c2luZyAxOTYwIHdpbGwKKyAqIG1ha2UgaXQgY29uc2lzdGVudCBpbiBsZWFwIHllYXIgc2V0dGluZyBmb3IgYm90aCB2cnRjIGFuZCBsb3ctbGV2ZWwKKyAqIHBoeXNpY2FsIHJ0YyBkZXZpY2VzLgorICovCitzdGF0aWMgaW50IG1yc3RfcmVhZF90aW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y190aW1lICp0aW1lKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAocnRjX2lzX3VwZGF0aW5nKCkpCisJCW1kZWxheSgyMCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcnRjX2xvY2ssIGZsYWdzKTsKKwl0aW1lLT50bV9zZWMgPSB2cnRjX2Ntb3NfcmVhZChSVENfU0VDT05EUyk7CisJdGltZS0+dG1fbWluID0gdnJ0Y19jbW9zX3JlYWQoUlRDX01JTlVURVMpOworCXRpbWUtPnRtX2hvdXIgPSB2cnRjX2Ntb3NfcmVhZChSVENfSE9VUlMpOworCXRpbWUtPnRtX21kYXkgPSB2cnRjX2Ntb3NfcmVhZChSVENfREFZX09GX01PTlRIKTsKKwl0aW1lLT50bV9tb24gPSB2cnRjX2Ntb3NfcmVhZChSVENfTU9OVEgpOworCXRpbWUtPnRtX3llYXIgPSB2cnRjX2Ntb3NfcmVhZChSVENfWUVBUik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnRjX2xvY2ssIGZsYWdzKTsKKworCS8qIEFkanVzdCBmb3IgdGhlIDE5NjAvMTkwMCAqLworCXRpbWUtPnRtX3llYXIgKz0gNjA7CisJdGltZS0+dG1fbW9uLS07CisJcmV0dXJuIFJUQ18yNEg7Cit9CisKK3N0YXRpYyBpbnQgbXJzdF9zZXRfdGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfdGltZSAqdGltZSkKK3sKKwlpbnQgcmV0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgY2hhciBtb24sIGRheSwgaHJzLCBtaW4sIHNlYzsKKwl1bnNpZ25lZCBpbnQgeXJzOworCisJeXJzID0gdGltZS0+dG1feWVhcjsKKwltb24gPSB0aW1lLT50bV9tb24gKyAxOyAgIC8qIHRtX21vbiBzdGFydHMgYXQgemVybyAqLworCWRheSA9IHRpbWUtPnRtX21kYXk7CisJaHJzID0gdGltZS0+dG1faG91cjsKKwltaW4gPSB0aW1lLT50bV9taW47CisJc2VjID0gdGltZS0+dG1fc2VjOworCisJaWYgKHlycyA8IDcwIHx8IHlycyA+IDEzOCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJeXJzIC09IDYwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJ0Y19sb2NrLCBmbGFncyk7CisKKwl2cnRjX2Ntb3Nfd3JpdGUoeXJzLCBSVENfWUVBUik7CisJdnJ0Y19jbW9zX3dyaXRlKG1vbiwgUlRDX01PTlRIKTsKKwl2cnRjX2Ntb3Nfd3JpdGUoZGF5LCBSVENfREFZX09GX01PTlRIKTsKKwl2cnRjX2Ntb3Nfd3JpdGUoaHJzLCBSVENfSE9VUlMpOworCXZydGNfY21vc193cml0ZShtaW4sIFJUQ19NSU5VVEVTKTsKKwl2cnRjX2Ntb3Nfd3JpdGUoc2VjLCBSVENfU0VDT05EUyk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGNfbG9jaywgZmxhZ3MpOworCisJcmV0ID0gaW50ZWxfc2N1X2lwY19zaW1wbGVfY29tbWFuZChJUENNU0dfVlJUQywgSVBDX0NNRF9WUlRDX1NFVFRJTUUpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbXJzdF9yZWFkX2FsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y193a2Fscm0gKnQpCit7CisJc3RydWN0IG1yc3RfcnRjCSptcnN0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJdW5zaWduZWQgY2hhciBydGNfY29udHJvbDsKKworCWlmIChtcnN0LT5pcnEgPD0gMCkKKwkJcmV0dXJuIC1FSU87CisKKwkvKiBCYXNpYyBhbGFybXMgb25seSBzdXBwb3J0IGhvdXIsIG1pbnV0ZSwgYW5kIHNlY29uZHMgZmllbGRzLgorCSAqIFNvbWUgYWxzbyBzdXBwb3J0IGRheSBhbmQgbW9udGgsIGZvciBhbGFybXMgdXAgdG8gYSB5ZWFyIGluCisJICogdGhlIGZ1dHVyZS4KKwkgKi8KKwl0LT50aW1lLnRtX21kYXkgPSAtMTsKKwl0LT50aW1lLnRtX21vbiA9IC0xOworCXQtPnRpbWUudG1feWVhciA9IC0xOworCisJLyogdlJUQyBvbmx5IHN1cHBvcnRzIGJpbmFyeSBtb2RlICovCisJc3Bpbl9sb2NrX2lycSgmcnRjX2xvY2spOworCXQtPnRpbWUudG1fc2VjID0gdnJ0Y19jbW9zX3JlYWQoUlRDX1NFQ09ORFNfQUxBUk0pOworCXQtPnRpbWUudG1fbWluID0gdnJ0Y19jbW9zX3JlYWQoUlRDX01JTlVURVNfQUxBUk0pOworCXQtPnRpbWUudG1faG91ciA9IHZydGNfY21vc19yZWFkKFJUQ19IT1VSU19BTEFSTSk7CisKKwlydGNfY29udHJvbCA9IHZydGNfY21vc19yZWFkKFJUQ19DT05UUk9MKTsKKwlzcGluX3VubG9ja19pcnEoJnJ0Y19sb2NrKTsKKworCXQtPmVuYWJsZWQgPSAhIShydGNfY29udHJvbCAmIFJUQ19BSUUpOworCXQtPnBlbmRpbmcgPSAwOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG1yc3RfY2hlY2tpbnRyKHN0cnVjdCBtcnN0X3J0YyAqbXJzdCwgdW5zaWduZWQgY2hhciBydGNfY29udHJvbCkKK3sKKwl1bnNpZ25lZCBjaGFyCXJ0Y19pbnRyOworCisJLyoKKwkgKiBOT1RFIGFmdGVyIGNoYW5naW5nIFJUQ194SUUgYml0cyB3ZSBhbHdheXMgcmVhZCBJTlRSX0ZMQUdTOworCSAqIGFsbGVnZWRseSBzb21lIG9sZGVyIHJ0Y3MgbmVlZCB0aGF0IHRvIGhhbmRsZSBpcnFzIHByb3Blcmx5CisJICovCisJcnRjX2ludHIgPSB2cnRjX2Ntb3NfcmVhZChSVENfSU5UUl9GTEFHUyk7CisJcnRjX2ludHIgJj0gKHJ0Y19jb250cm9sICYgUlRDX0lSUU1BU0spIHwgUlRDX0lSUUY7CisJaWYgKGlzX2ludHIocnRjX2ludHIpKQorCQlydGNfdXBkYXRlX2lycShtcnN0LT5ydGMsIDEsIHJ0Y19pbnRyKTsKK30KKworc3RhdGljIHZvaWQgbXJzdF9pcnFfZW5hYmxlKHN0cnVjdCBtcnN0X3J0YyAqbXJzdCwgdW5zaWduZWQgY2hhciBtYXNrKQoreworCXVuc2lnbmVkIGNoYXIJcnRjX2NvbnRyb2w7CisKKwkvKgorCSAqIEZsdXNoIGFueSBwZW5kaW5nIElSUSBzdGF0dXMsIG5vdGFibHkgZm9yIHVwZGF0ZSBpcnFzLAorCSAqIGJlZm9yZSB3ZSBlbmFibGUgbmV3IElSUXMKKwkgKi8KKwlydGNfY29udHJvbCA9IHZydGNfY21vc19yZWFkKFJUQ19DT05UUk9MKTsKKwltcnN0X2NoZWNraW50cihtcnN0LCBydGNfY29udHJvbCk7CisKKwlydGNfY29udHJvbCB8PSBtYXNrOworCXZydGNfY21vc193cml0ZShydGNfY29udHJvbCwgUlRDX0NPTlRST0wpOworCisJbXJzdF9jaGVja2ludHIobXJzdCwgcnRjX2NvbnRyb2wpOworfQorCitzdGF0aWMgdm9pZCBtcnN0X2lycV9kaXNhYmxlKHN0cnVjdCBtcnN0X3J0YyAqbXJzdCwgdW5zaWduZWQgY2hhciBtYXNrKQoreworCXVuc2lnbmVkIGNoYXIJcnRjX2NvbnRyb2w7CisKKwlydGNfY29udHJvbCA9IHZydGNfY21vc19yZWFkKFJUQ19DT05UUk9MKTsKKwlydGNfY29udHJvbCAmPSB+bWFzazsKKwl2cnRjX2Ntb3Nfd3JpdGUocnRjX2NvbnRyb2wsIFJUQ19DT05UUk9MKTsKKwltcnN0X2NoZWNraW50cihtcnN0LCBydGNfY29udHJvbCk7Cit9CisKK3N0YXRpYyBpbnQgbXJzdF9zZXRfYWxhcm0oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3drYWxybSAqdCkKK3sKKwlzdHJ1Y3QgbXJzdF9ydGMJKm1yc3QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1bnNpZ25lZCBjaGFyIGhycywgbWluLCBzZWM7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIW1yc3QtPmlycSkKKwkJcmV0dXJuIC1FSU87CisKKwlocnMgPSB0LT50aW1lLnRtX2hvdXI7CisJbWluID0gdC0+dGltZS50bV9taW47CisJc2VjID0gdC0+dGltZS50bV9zZWM7CisKKwlzcGluX2xvY2tfaXJxKCZydGNfbG9jayk7CisJLyogTmV4dCBydGMgaXJxIG11c3Qgbm90IGJlIGZyb20gcHJldmlvdXMgYWxhcm0gc2V0dGluZyAqLworCW1yc3RfaXJxX2Rpc2FibGUobXJzdCwgUlRDX0FJRSk7CisKKwkvKiBVcGRhdGUgYWxhcm0gKi8KKwl2cnRjX2Ntb3Nfd3JpdGUoaHJzLCBSVENfSE9VUlNfQUxBUk0pOworCXZydGNfY21vc193cml0ZShtaW4sIFJUQ19NSU5VVEVTX0FMQVJNKTsKKwl2cnRjX2Ntb3Nfd3JpdGUoc2VjLCBSVENfU0VDT05EU19BTEFSTSk7CisKKwlzcGluX3VubG9ja19pcnEoJnJ0Y19sb2NrKTsKKworCXJldCA9IGludGVsX3NjdV9pcGNfc2ltcGxlX2NvbW1hbmQoSVBDTVNHX1ZSVEMsIElQQ19DTURfVlJUQ19TRVRBTEFSTSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXNwaW5fbG9ja19pcnEoJnJ0Y19sb2NrKTsKKwlpZiAodC0+ZW5hYmxlZCkKKwkJbXJzdF9pcnFfZW5hYmxlKG1yc3QsIFJUQ19BSUUpOworCisJc3Bpbl91bmxvY2tfaXJxKCZydGNfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtcnN0X2lycV9zZXRfc3RhdGUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgZW5hYmxlZCkKK3sKKwlzdHJ1Y3QgbXJzdF9ydGMJKm1yc3QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCisJaWYgKCFtcnN0LT5pcnEpCisJCXJldHVybiAtRU5YSU87CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcnRjX2xvY2ssIGZsYWdzKTsKKworCWlmIChlbmFibGVkKQorCQltcnN0X2lycV9lbmFibGUobXJzdCwgUlRDX1BJRSk7CisJZWxzZQorCQltcnN0X2lycV9kaXNhYmxlKG1yc3QsIFJUQ19QSUUpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnRjX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworI2lmIGRlZmluZWQoQ09ORklHX1JUQ19JTlRGX0RFVikgfHwgZGVmaW5lZChDT05GSUdfUlRDX0lOVEZfREVWX01PRFVMRSkKKworLyogQ3VycmVudGx5LCB0aGUgdlJUQyBkb2Vzbid0IHN1cHBvcnQgVUlFIE9OL09GRiAqLworc3RhdGljIGludAorbXJzdF9ydGNfaW9jdGwoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgbXJzdF9ydGMJKm1yc3QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFJUQ19BSUVfT0ZGOgorCWNhc2UgUlRDX0FJRV9PTjoKKwkJaWYgKCFtcnN0LT5pcnEpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogUElFIE9OL09GRiBpcyBoYW5kbGVkIGJ5IG1yc3RfaXJxX3NldF9zdGF0ZSgpICovCisJCXJldHVybiAtRU5PSU9DVExDTUQ7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJ0Y19sb2NrLCBmbGFncyk7CisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFJUQ19BSUVfT0ZGOgkvKiBhbGFybSBvZmYgKi8KKwkJbXJzdF9pcnFfZGlzYWJsZShtcnN0LCBSVENfQUlFKTsKKwkJYnJlYWs7CisJY2FzZSBSVENfQUlFX09OOgkvKiBhbGFybSBvbiAqLworCQltcnN0X2lycV9lbmFibGUobXJzdCwgUlRDX0FJRSk7CisJCWJyZWFrOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGNfbG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorCisjZWxzZQorI2RlZmluZQltcnN0X3J0Y19pb2N0bAlOVUxMCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX1JUQ19JTlRGX1BST0MpIHx8IGRlZmluZWQoQ09ORklHX1JUQ19JTlRGX1BST0NfTU9EVUxFKQorCitzdGF0aWMgaW50IG1yc3RfcHJvY2ZzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNlcV9maWxlICpzZXEpCit7CisJdW5zaWduZWQgY2hhcglydGNfY29udHJvbCwgdmFsaWQ7CisKKwlzcGluX2xvY2tfaXJxKCZydGNfbG9jayk7CisJcnRjX2NvbnRyb2wgPSB2cnRjX2Ntb3NfcmVhZChSVENfQ09OVFJPTCk7CisJdmFsaWQgPSB2cnRjX2Ntb3NfcmVhZChSVENfVkFMSUQpOworCXNwaW5fdW5sb2NrX2lycSgmcnRjX2xvY2spOworCisJcmV0dXJuIHNlcV9wcmludGYoc2VxLAorCQkJInBlcmlvZGljX0lSUVx0OiAlc1xuIgorCQkJImFsYXJtXHRcdDogJXNcbiIKKwkJCSJCQ0RcdFx0OiBub1xuIgorCQkJInBlcmlvZGljX2ZyZXFcdDogZGFpbHkgKG5vdCBhZGp1c3RhYmxlKVxuIiwKKwkJCShydGNfY29udHJvbCAmIFJUQ19QSUUpID8gIm9uIiA6ICJvZmYiLAorCQkJKHJ0Y19jb250cm9sICYgUlRDX0FJRSkgPyAib24iIDogIm9mZiIpOworfQorCisjZWxzZQorI2RlZmluZQltcnN0X3Byb2NmcwlOVUxMCisjZW5kaWYKKworc3RhdGljIGNvbnN0IHN0cnVjdCBydGNfY2xhc3Nfb3BzIG1yc3RfcnRjX29wcyA9IHsKKwkuaW9jdGwJCT0gbXJzdF9ydGNfaW9jdGwsCisJLnJlYWRfdGltZQk9IG1yc3RfcmVhZF90aW1lLAorCS5zZXRfdGltZQk9IG1yc3Rfc2V0X3RpbWUsCisJLnJlYWRfYWxhcm0JPSBtcnN0X3JlYWRfYWxhcm0sCisJLnNldF9hbGFybQk9IG1yc3Rfc2V0X2FsYXJtLAorCS5wcm9jCQk9IG1yc3RfcHJvY2ZzLAorCS5pcnFfc2V0X3N0YXRlCT0gbXJzdF9pcnFfc2V0X3N0YXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBtcnN0X3J0YwltcnN0X3J0YzsKKworLyoKKyAqIFdoZW4gdlJUQyBJUlEgaXMgY2FwdHVyZWQgYnkgU0NVIEZXLCBGVyB3aWxsIGNsZWFyIHRoZSBBSUUgYml0IGluCisgKiBSZWcgQiwgc28gbm8gbmVlZCBmb3IgdGhpcyBkcml2ZXIgdG8gY2xlYXIgaXQKKyAqLworc3RhdGljIGlycXJldHVybl90IG1yc3RfcnRjX2lycShpbnQgaXJxLCB2b2lkICpwKQoreworCXU4IGlycXN0YXQ7CisKKwlzcGluX2xvY2soJnJ0Y19sb2NrKTsKKwkvKiBUaGlzIHJlYWQgd2lsbCBjbGVhciBhbGwgSVJRIGZsYWdzIGluc2lkZSBSZWcgQyAqLworCWlycXN0YXQgPSB2cnRjX2Ntb3NfcmVhZChSVENfSU5UUl9GTEFHUyk7CisJc3Bpbl91bmxvY2soJnJ0Y19sb2NrKTsKKworCWlycXN0YXQgJj0gUlRDX0lSUU1BU0sgfCBSVENfSVJRRjsKKwlpZiAoaXNfaW50cihpcnFzdGF0KSkgeworCQlydGNfdXBkYXRlX2lycShwLCAxLCBpcnFzdGF0KTsKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0KKwlyZXR1cm4gSVJRX05PTkU7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0Cit2cnRjX21yc3RfZG9fcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcmVzb3VyY2UgKmlvbWVtLCBpbnQgcnRjX2lycSkKK3sKKwlpbnQgcmV0dmFsID0gMDsKKwl1bnNpZ25lZCBjaGFyIHJ0Y19jb250cm9sOworCisJLyogVGhlcmUgY2FuIGJlIG9ubHkgb25lIC4uLiAqLworCWlmIChtcnN0X3J0Yy5kZXYpCisJCXJldHVybiAtRUJVU1k7CisKKwlpZiAoIWlvbWVtKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlvbWVtID0gcmVxdWVzdF9tZW1fcmVnaW9uKGlvbWVtLT5zdGFydCwKKwkJCWlvbWVtLT5lbmQgKyAxIC0gaW9tZW0tPnN0YXJ0LAorCQkJZHJpdmVyX25hbWUpOworCWlmICghaW9tZW0pIHsKKwkJZGV2X2RiZyhkZXYsICJpL28gbWVtIGFscmVhZHkgaW4gdXNlLlxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJbXJzdF9ydGMuaXJxID0gcnRjX2lycTsKKwltcnN0X3J0Yy5pb21lbSA9IGlvbWVtOworCisJbXJzdF9ydGMucnRjID0gcnRjX2RldmljZV9yZWdpc3Rlcihkcml2ZXJfbmFtZSwgZGV2LAorCQkJCSZtcnN0X3J0Y19vcHMsIFRISVNfTU9EVUxFKTsKKwlpZiAoSVNfRVJSKG1yc3RfcnRjLnJ0YykpIHsKKwkJcmV0dmFsID0gUFRSX0VSUihtcnN0X3J0Yy5ydGMpOworCQlnb3RvIGNsZWFudXAwOworCX0KKworCW1yc3RfcnRjLmRldiA9IGRldjsKKwlkZXZfc2V0X2RydmRhdGEoZGV2LCAmbXJzdF9ydGMpOworCXJlbmFtZV9yZWdpb24oaW9tZW0sIGRldl9uYW1lKCZtcnN0X3J0Yy5ydGMtPmRldikpOworCisJc3Bpbl9sb2NrX2lycSgmcnRjX2xvY2spOworCW1yc3RfaXJxX2Rpc2FibGUoJm1yc3RfcnRjLCBSVENfUElFIHwgUlRDX0FJRSk7CisJcnRjX2NvbnRyb2wgPSB2cnRjX2Ntb3NfcmVhZChSVENfQ09OVFJPTCk7CisJc3Bpbl91bmxvY2tfaXJxKCZydGNfbG9jayk7CisKKwlpZiAoIShydGNfY29udHJvbCAmIFJUQ18yNEgpIHx8IChydGNfY29udHJvbCAmIChSVENfRE1fQklOQVJZKSkpCisJCWRldl9kYmcoZGV2LCAiVE9ETzogc3VwcG9ydCBtb3JlIHRoYW4gMjQtaHIgQkNEIG1vZGVcbiIpOworCisJaWYgKHJ0Y19pcnEpIHsKKwkJcmV0dmFsID0gcmVxdWVzdF9pcnEocnRjX2lycSwgbXJzdF9ydGNfaXJxLAorCQkJCUlSUUZfRElTQUJMRUQsIGRldl9uYW1lKCZtcnN0X3J0Yy5ydGMtPmRldiksCisJCQkJbXJzdF9ydGMucnRjKTsKKwkJaWYgKHJldHZhbCA8IDApIHsKKwkJCWRldl9kYmcoZGV2LCAiSVJRICVkIGlzIGFscmVhZHkgaW4gdXNlLCBlcnIgJWRcbiIsCisJCQkJcnRjX2lycSwgcmV0dmFsKTsKKwkJCWdvdG8gY2xlYW51cDE7CisJCX0KKwl9CisJZGV2X2RiZyhkZXYsICJpbml0aWFsaXNlZFxuIik7CisJcmV0dXJuIDA7CisKK2NsZWFudXAxOgorCW1yc3RfcnRjLmRldiA9IE5VTEw7CisJcnRjX2RldmljZV91bnJlZ2lzdGVyKG1yc3RfcnRjLnJ0Yyk7CitjbGVhbnVwMDoKKwlyZWxlYXNlX3JlZ2lvbihpb21lbS0+c3RhcnQsIGlvbWVtLT5lbmQgKyAxIC0gaW9tZW0tPnN0YXJ0KTsKKwlkZXZfZXJyKGRldiwgInJ0Yy1tcnN0OiB1bmFibGUgdG8gaW5pdGlhbGlzZVxuIik7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgcnRjX21yc3RfZG9fc2h1dGRvd24odm9pZCkKK3sKKwlzcGluX2xvY2tfaXJxKCZydGNfbG9jayk7CisJbXJzdF9pcnFfZGlzYWJsZSgmbXJzdF9ydGMsIFJUQ19JUlFNQVNLKTsKKwlzcGluX3VubG9ja19pcnEoJnJ0Y19sb2NrKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHJ0Y19tcnN0X2RvX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG1yc3RfcnRjCSptcnN0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHJlc291cmNlICppb21lbTsKKworCXJ0Y19tcnN0X2RvX3NodXRkb3duKCk7CisKKwlpZiAobXJzdC0+aXJxKQorCQlmcmVlX2lycShtcnN0LT5pcnEsIG1yc3QtPnJ0Yyk7CisKKwlydGNfZGV2aWNlX3VucmVnaXN0ZXIobXJzdC0+cnRjKTsKKwltcnN0LT5ydGMgPSBOVUxMOworCisJaW9tZW0gPSBtcnN0LT5pb21lbTsKKwlyZWxlYXNlX3JlZ2lvbihpb21lbS0+c3RhcnQsIGlvbWVtLT5lbmQgKyAxIC0gaW9tZW0tPnN0YXJ0KTsKKwltcnN0LT5pb21lbSA9IE5VTEw7CisKKwltcnN0LT5kZXYgPSBOVUxMOworCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworfQorCisjaWZkZWYJQ09ORklHX1BNCitzdGF0aWMgaW50IG1yc3Rfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBtZXNnKQoreworCXN0cnVjdCBtcnN0X3J0YwkqbXJzdCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIGNoYXIJdG1wOworCisJLyogT25seSB0aGUgYWxhcm0gbWlnaHQgYmUgYSB3YWtldXAgZXZlbnQgc291cmNlICovCisJc3Bpbl9sb2NrX2lycSgmcnRjX2xvY2spOworCW1yc3QtPnN1c3BlbmRfY3RybCA9IHRtcCA9IHZydGNfY21vc19yZWFkKFJUQ19DT05UUk9MKTsKKwlpZiAodG1wICYgKFJUQ19QSUUgfCBSVENfQUlFKSkgeworCQl1bnNpZ25lZCBjaGFyCW1hc2s7CisKKwkJaWYgKGRldmljZV9tYXlfd2FrZXVwKGRldikpCisJCQltYXNrID0gUlRDX0lSUU1BU0sgJiB+UlRDX0FJRTsKKwkJZWxzZQorCQkJbWFzayA9IFJUQ19JUlFNQVNLOworCQl0bXAgJj0gfm1hc2s7CisJCXZydGNfY21vc193cml0ZSh0bXAsIFJUQ19DT05UUk9MKTsKKworCQltcnN0X2NoZWNraW50cihtcnN0LCB0bXApOworCX0KKwlzcGluX3VubG9ja19pcnEoJnJ0Y19sb2NrKTsKKworCWlmICh0bXAgJiBSVENfQUlFKSB7CisJCW1yc3QtPmVuYWJsZWRfd2FrZSA9IDE7CisJCWVuYWJsZV9pcnFfd2FrZShtcnN0LT5pcnEpOworCX0KKworCWRldl9kYmcoJm1yc3RfcnRjLnJ0Yy0+ZGV2LCAic3VzcGVuZCVzLCBjdHJsICUwMnhcbiIsCisJCQkodG1wICYgUlRDX0FJRSkgPyAiLCBhbGFybSBtYXkgd2FrZSIgOiAiIiwKKwkJCXRtcCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFdlIHdhbnQgUlRDIGFsYXJtcyB0byB3YWtlIHVzIGZyb20gdGhlIGRlZXAgcG93ZXIgc2F2aW5nIHN0YXRlCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IG1yc3RfcG93ZXJvZmYoc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiBtcnN0X3N1c3BlbmQoZGV2LCBQTVNHX0hJQkVSTkFURSk7Cit9CisKK3N0YXRpYyBpbnQgbXJzdF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBtcnN0X3J0YwkqbXJzdCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIGNoYXIgdG1wID0gbXJzdC0+c3VzcGVuZF9jdHJsOworCisJLyogUmUtZW5hYmxlIGFueSBpcnFzIHByZXZpb3VzbHkgYWN0aXZlICovCisJaWYgKHRtcCAmIFJUQ19JUlFNQVNLKSB7CisJCXVuc2lnbmVkIGNoYXIJbWFzazsKKworCQlpZiAobXJzdC0+ZW5hYmxlZF93YWtlKSB7CisJCQlkaXNhYmxlX2lycV93YWtlKG1yc3QtPmlycSk7CisJCQltcnN0LT5lbmFibGVkX3dha2UgPSAwOworCQl9CisKKwkJc3Bpbl9sb2NrX2lycSgmcnRjX2xvY2spOworCQlkbyB7CisJCQl2cnRjX2Ntb3Nfd3JpdGUodG1wLCBSVENfQ09OVFJPTCk7CisKKwkJCW1hc2sgPSB2cnRjX2Ntb3NfcmVhZChSVENfSU5UUl9GTEFHUyk7CisJCQltYXNrICY9ICh0bXAgJiBSVENfSVJRTUFTSykgfCBSVENfSVJRRjsKKwkJCWlmICghaXNfaW50cihtYXNrKSkKKwkJCQlicmVhazsKKworCQkJcnRjX3VwZGF0ZV9pcnEobXJzdC0+cnRjLCAxLCBtYXNrKTsKKwkJCXRtcCAmPSB+UlRDX0FJRTsKKwkJfSB3aGlsZSAobWFzayAmIFJUQ19BSUUpOworCQlzcGluX3VubG9ja19pcnEoJnJ0Y19sb2NrKTsKKwl9CisKKwlkZXZfZGJnKCZtcnN0X3J0Yy5ydGMtPmRldiwgInJlc3VtZSwgY3RybCAlMDJ4XG4iLCB0bXApOworCisJcmV0dXJuIDA7Cit9CisKKyNlbHNlCisjZGVmaW5lCW1yc3Rfc3VzcGVuZAlOVUxMCisjZGVmaW5lCW1yc3RfcmVzdW1lCU5VTEwKKworc3RhdGljIGlubGluZSBpbnQgbXJzdF9wb3dlcm9mZihzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIC1FTk9TWVM7Cit9CisKKyNlbmRpZgorCitzdGF0aWMgaW50IF9faW5pdCB2cnRjX21yc3RfcGxhdGZvcm1fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gdnJ0Y19tcnN0X2RvX3Byb2JlKCZwZGV2LT5kZXYsCisJCQlwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApLAorCQkJcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKSk7Cit9CisKK3N0YXRpYyBpbnQgX19leGl0IHZydGNfbXJzdF9wbGF0Zm9ybV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlydGNfbXJzdF9kb19yZW1vdmUoJnBkZXYtPmRldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHZydGNfbXJzdF9wbGF0Zm9ybV9zaHV0ZG93bihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWlmIChzeXN0ZW1fc3RhdGUgPT0gU1lTVEVNX1BPV0VSX09GRiAmJiAhbXJzdF9wb3dlcm9mZigmcGRldi0+ZGV2KSkKKwkJcmV0dXJuOworCisJcnRjX21yc3RfZG9fc2h1dGRvd24oKTsKK30KKworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTp2cnRjX21yc3QiKTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdnJ0Y19tcnN0X3BsYXRmb3JtX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gdnJ0Y19tcnN0X3BsYXRmb3JtX3Byb2JlLAorCS5yZW1vdmUJCT0gX19leGl0X3AodnJ0Y19tcnN0X3BsYXRmb3JtX3JlbW92ZSksCisJLnNodXRkb3duCT0gdnJ0Y19tcnN0X3BsYXRmb3JtX3NodXRkb3duLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lCQk9IChjaGFyICopIGRyaXZlcl9uYW1lLAorCQkuc3VzcGVuZAk9IG1yc3Rfc3VzcGVuZCwKKwkJLnJlc3VtZQkJPSBtcnN0X3Jlc3VtZSwKKwl9Cit9OworCitzdGF0aWMgaW50IF9faW5pdCB2cnRjX21yc3RfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnZydGNfbXJzdF9wbGF0Zm9ybV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdnJ0Y19tcnN0X2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdnJ0Y19tcnN0X3BsYXRmb3JtX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHZydGNfbXJzdF9pbml0KTsKK21vZHVsZV9leGl0KHZydGNfbXJzdF9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiSmFjb2IgUGFuOyBGZW5nIFRhbmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBNb29yZXN0b3duIHZpcnR1YWwgUlRDIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtcng4MDI1LmMgYi9kcml2ZXJzL3J0Yy9ydGMtcng4MDI1LmMKaW5kZXggMTE0NmUzNS4uYWYzMmE2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXJ4ODAyNS5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1yeDgwMjUuYwpAQCAtNjUwLDcgKzY1MCw3IEBACiAJCW11dGV4X3VubG9jayhsb2NrKTsKIAogCQlmcmVlX2lycShjbGllbnQtPmlycSwgY2xpZW50KTsKLQkJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwkJY2FuY2VsX3dvcmtfc3luYygmcng4MDI1LT53b3JrKTsKIAl9CiAKIAlyeDgwMjVfc3lzZnNfdW5yZWdpc3RlcigmY2xpZW50LT5kZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXNhMTEwMC5jIGIvZHJpdmVycy9ydGMvcnRjLXNhMTEwMC5jCmluZGV4IGU0YTQ0YjYuLjg4ZWE1MmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1zYTExMDAuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtc2ExMTAwLmMKQEAgLTM5LDEwICszOSwxMCBAQAogI2luY2x1ZGUgPG1hY2gvcmVncy1vc3QuaD4KICNlbmRpZgogCi0jZGVmaW5lIFJUQ19ERUZfRElWSURFUgkJMzI3NjggLSAxCisjZGVmaW5lIFJUQ19ERUZfRElWSURFUgkJKDMyNzY4IC0gMSkKICNkZWZpbmUgUlRDX0RFRl9UUklNCQkwCiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHJ0Y19mcmVxID0gMTAyNDsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIFJUQ19GUkVRID0gMTAyNDsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHRpbWVyX2ZyZXE7CiBzdGF0aWMgc3RydWN0IHJ0Y190aW1lIHJ0Y19hbGFybTsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soc2ExMTAwX3J0Y19sb2NrKTsKQEAgLTYxLDcgKzYxLDggQEAKICAqIENhbGN1bGF0ZSB0aGUgbmV4dCBhbGFybSB0aW1lIGdpdmVuIHRoZSByZXF1ZXN0ZWQgYWxhcm0gdGltZSBtYXNrCiAgKiBhbmQgdGhlIGN1cnJlbnQgdGltZS4KICAqLwotc3RhdGljIHZvaWQgcnRjX25leHRfYWxhcm1fdGltZShzdHJ1Y3QgcnRjX3RpbWUgKm5leHQsIHN0cnVjdCBydGNfdGltZSAqbm93LCBzdHJ1Y3QgcnRjX3RpbWUgKmFscm0pCitzdGF0aWMgdm9pZCBydGNfbmV4dF9hbGFybV90aW1lKHN0cnVjdCBydGNfdGltZSAqbmV4dCwgc3RydWN0IHJ0Y190aW1lICpub3csCisJc3RydWN0IHJ0Y190aW1lICphbHJtKQogewogCXVuc2lnbmVkIGxvbmcgbmV4dF90aW1lOwogCXVuc2lnbmVkIGxvbmcgbm93X3RpbWU7CkBAIC0xMTYsNyArMTE3LDIzIEBACiAJcnRzciA9IFJUU1I7CiAJLyogY2xlYXIgaW50ZXJydXB0IHNvdXJjZXMgKi8KIAlSVFNSID0gMDsKLQlSVFNSID0gKFJUU1JfQUwgfCBSVFNSX0haKSAmIChydHNyID4+IDIpOworCS8qIEZpeCBmb3IgYSBuYXN0eSBpbml0aWFsaXphdGlvbiBwcm9ibGVtIHRoZSBpbiBTQTExeHggUlRTUiByZWdpc3Rlci4KKwkgKiBTZWUgYWxzbyB0aGUgY29tbWVudHMgaW4gc2ExMTAwX3J0Y19wcm9iZSgpLiAqLworCWlmIChydHNyICYgKFJUU1JfQUxFIHwgUlRTUl9IWkUpKSB7CisJCS8qIFRoaXMgaXMgdGhlIG9yaWdpbmFsIGNvZGUsIGJlZm9yZSB0aGVyZSB3YXMgdGhlIGlmIHRlc3QKKwkJICogYWJvdmUuIFRoaXMgY29kZSBkb2VzIG5vdCBjbGVhciBpbnRlcnJ1cHRzIHRoYXQgd2VyZSBub3QKKwkJICogZW5hYmxlZC4gKi8KKwkJUlRTUiA9IChSVFNSX0FMIHwgUlRTUl9IWikgJiAocnRzciA+PiAyKTsKKwl9IGVsc2UgeworCQkvKiBGb3Igc29tZSByZWFzb24sIGl0IGlzIHBvc3NpYmxlIHRvIGVudGVyIHRoaXMgcm91dGluZQorCQkgKiB3aXRob3V0IGludGVycnVwdGlvbnMgZW5hYmxlZCwgaXQgaGFzIGJlZW4gdGVzdGVkIHdpdGgKKwkJICogc2V2ZXJhbCB1bml0cyAoQnVnIGluIFNBMTF4eCBjaGlwPykuCisJCSAqCisJCSAqIFRoaXMgc2l0dWF0aW9uIGxlYWRzIHRvIGFuIGluZmluaXRlICJsb29wIiBvZiBpbnRlcnJ1cHQKKwkJICogcm91dGluZSBjYWxsaW5nIGFuZCBhcyBhIHJlc3VsdCB0aGUgcHJvY2Vzc29yIHNlZW1zIHRvCisJCSAqIGxvY2sgb24gaXRzIGZpcnN0IGNhbGwgdG8gb3BlbigpLiAqLworCQlSVFNSID0gUlRTUl9BTCB8IFJUU1JfSFo7CisJfQogCiAJLyogY2xlYXIgYWxhcm0gaW50ZXJydXB0IGlmIGl0IGhhcyBvY2N1cnJlZCAqLwogCWlmIChydHNyICYgUlRTUl9BTCkKQEAgLTEzOSw4ICsxNTYsNTggQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKK3N0YXRpYyBpbnQgc2ExMTAwX2lycV9zZXRfZnJlcShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBmcmVxKQoreworCWlmIChmcmVxIDwgMSB8fCBmcmVxID4gdGltZXJfZnJlcSkgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9IGVsc2UgeworCQlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjID0gKHN0cnVjdCBydGNfZGV2aWNlICopZGV2OworCisJCXJ0Yy0+aXJxX2ZyZXEgPSBmcmVxOworCisJCXJldHVybiAwOworCX0KK30KKwogc3RhdGljIGludCBydGNfdGltZXIxX2NvdW50OwogCitzdGF0aWMgaW50IHNhMTEwMF9pcnFfc2V0X3N0YXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IGVuYWJsZWQpCit7CisJc3Bpbl9sb2NrX2lycSgmc2ExMTAwX3J0Y19sb2NrKTsKKwlpZiAoZW5hYmxlZCkgeworCQlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjID0gKHN0cnVjdCBydGNfZGV2aWNlICopZGV2OworCisJCU9TTVIxID0gdGltZXJfZnJlcSAvIHJ0Yy0+aXJxX2ZyZXEgKyBPU0NSOworCQlPSUVSIHw9IE9JRVJfRTE7CisJCXJ0Y190aW1lcjFfY291bnQgPSAxOworCX0gZWxzZSB7CisJCU9JRVIgJj0gfk9JRVJfRTE7CisJfQorCXNwaW5fdW5sb2NrX2lycSgmc2ExMTAwX3J0Y19sb2NrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBzYTExMDBfdGltZXIxX3JldHJpZ2dlcihzdHJ1Y3QgcnRjX2RldmljZSAqcnRjKQoreworCXVuc2lnbmVkIGxvbmcgZGlmZjsKKwl1bnNpZ25lZCBsb25nIHBlcmlvZCA9IHRpbWVyX2ZyZXEgLyBydGMtPmlycV9mcmVxOworCisJc3Bpbl9sb2NrX2lycSgmc2ExMTAwX3J0Y19sb2NrKTsKKworCWRvIHsKKwkJT1NNUjEgKz0gcGVyaW9kOworCQlkaWZmID0gT1NNUjEgLSBPU0NSOworCQkvKiBJZiBPU0NSID4gT1NNUjEsIGRpZmYgaXMgYSB2ZXJ5IGxhcmdlIG51bWJlciAodW5zaWduZWQKKwkJICogbWF0aCkuIFRoaXMgbWVhbnMgd2UgaGF2ZSBhIGxvc3QgaW50ZXJydXB0LiAqLworCX0gd2hpbGUgKGRpZmYgPiBwZXJpb2QpOworCU9JRVIgfD0gT0lFUl9FMTsKKworCXNwaW5fdW5sb2NrX2lycSgmc2ExMTAwX3J0Y19sb2NrKTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaXJxcmV0dXJuX3QgdGltZXIxX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXZfaWQpOwpAQCAtMTU4LDcgKzIyNSwxMSBAQAogCXJ0Y191cGRhdGVfaXJxKHJ0YywgcnRjX3RpbWVyMV9jb3VudCwgUlRDX1BGIHwgUlRDX0lSUUYpOwogCiAJaWYgKHJ0Y190aW1lcjFfY291bnQgPT0gMSkKLQkJcnRjX3RpbWVyMV9jb3VudCA9IChydGNfZnJlcSAqICgoMSA8PCAzMCkgLyAodGltZXJfZnJlcSA+PiAyKSkpOworCQlydGNfdGltZXIxX2NvdW50ID0KKwkJCShydGMtPmlycV9mcmVxICogKCgxIDw8IDMwKSAvICh0aW1lcl9mcmVxID4+IDIpKSk7CisKKwkvKiByZXRyaWdnZXIuICovCisJc2ExMTAwX3RpbWVyMV9yZXRyaWdnZXIocnRjKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTE2Niw4ICsyMzcsMTAgQEAKIHN0YXRpYyBpbnQgc2ExMTAwX3J0Y19yZWFkX2NhbGxiYWNrKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IGRhdGEpCiB7CiAJaWYgKGRhdGEgJiBSVENfUEYpIHsKKwkJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YyA9IChzdHJ1Y3QgcnRjX2RldmljZSAqKWRldjsKKwogCQkvKiBpbnRlcnBvbGF0ZSBtaXNzZWQgcGVyaW9kcyBhbmQgc2V0IG1hdGNoIGZvciB0aGUgbmV4dCAqLwotCQl1bnNpZ25lZCBsb25nIHBlcmlvZCA9IHRpbWVyX2ZyZXEgLyBydGNfZnJlcTsKKwkJdW5zaWduZWQgbG9uZyBwZXJpb2QgPSB0aW1lcl9mcmVxIC8gcnRjLT5pcnFfZnJlcTsKIAkJdW5zaWduZWQgbG9uZyBvc2NyID0gT1NDUjsKIAkJdW5zaWduZWQgbG9uZyBvc21yMSA9IE9TTVIxOwogCQl1bnNpZ25lZCBsb25nIG1pc3NlZCA9IChvc2NyIC0gb3NtcjEpL3BlcmlvZDsKQEAgLTE3OCw3ICsyNTEsNyBAQAogCQkgKiBIZXJlIHdlIGNvbXBhcmUgKG1hdGNoIC0gT1NDUikgOCBpbnN0ZWFkIG9mIDAgLS0KIAkJICogc2VlIGNvbW1lbnQgaW4gcHhhX3RpbWVyX2ludGVycnVwdCgpIGZvciBleHBsYW5hdGlvbi4KIAkJICovCi0JCXdoaWxlKCAoc2lnbmVkIGxvbmcpKChvc21yMSA9IE9TTVIxKSAtIE9TQ1IpIDw9IDggKSB7CisJCXdoaWxlICgoc2lnbmVkIGxvbmcpKChvc21yMSA9IE9TTVIxKSAtIE9TQ1IpIDw9IDgpIHsKIAkJCWRhdGEgKz0gMHgxMDA7CiAJCQlPU1NSID0gT1NTUl9NMTsJLyogY2xlYXIgbWF0Y2ggb24gdGltZXIgMSAqLwogCQkJT1NNUjEgPSBvc21yMSArIHBlcmlvZDsKQEAgLTE5MCwyNSArMjYzLDI5IEBACiBzdGF0aWMgaW50IHNhMTEwMF9ydGNfb3BlbihzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJaW50IHJldDsKKwlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjID0gKHN0cnVjdCBydGNfZGV2aWNlICopZGV2OwogCiAJcmV0ID0gcmVxdWVzdF9pcnEoSVJRX1JUQzFIeiwgc2ExMTAwX3J0Y19pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUQsCi0JCQkJInJ0YyAxSHoiLCBkZXYpOworCQkicnRjIDFIeiIsIGRldik7CiAJaWYgKHJldCkgewogCQlkZXZfZXJyKGRldiwgIklSUSAlZCBhbHJlYWR5IGluIHVzZS5cbiIsIElSUV9SVEMxSHopOwogCQlnb3RvIGZhaWxfdWk7CiAJfQogCXJldCA9IHJlcXVlc3RfaXJxKElSUV9SVENBbHJtLCBzYTExMDBfcnRjX2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRCwKLQkJCQkicnRjIEFscm0iLCBkZXYpOworCQkicnRjIEFscm0iLCBkZXYpOwogCWlmIChyZXQpIHsKIAkJZGV2X2VycihkZXYsICJJUlEgJWQgYWxyZWFkeSBpbiB1c2UuXG4iLCBJUlFfUlRDQWxybSk7CiAJCWdvdG8gZmFpbF9haTsKIAl9CiAJcmV0ID0gcmVxdWVzdF9pcnEoSVJRX09TVDEsIHRpbWVyMV9pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUQsCi0JCQkJInJ0YyB0aW1lciIsIGRldik7CisJCSJydGMgdGltZXIiLCBkZXYpOwogCWlmIChyZXQpIHsKIAkJZGV2X2VycihkZXYsICJJUlEgJWQgYWxyZWFkeSBpbiB1c2UuXG4iLCBJUlFfT1NUMSk7CiAJCWdvdG8gZmFpbF9waTsKIAl9CisJcnRjLT5tYXhfdXNlcl9mcmVxID0gUlRDX0ZSRVE7CisJc2ExMTAwX2lycV9zZXRfZnJlcShkZXYsIFJUQ19GUkVRKTsKKwogCXJldHVybiAwOwogCiAgZmFpbF9waToKQEAgLTIzNiw3ICszMTMsNyBAQAogc3RhdGljIGludCBzYTExMDBfcnRjX2lvY3RsKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGNtZCwKIAkJdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0Jc3dpdGNoKGNtZCkgeworCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBSVENfQUlFX09GRjoKIAkJc3Bpbl9sb2NrX2lycSgmc2ExMTAwX3J0Y19sb2NrKTsKIAkJUlRTUiAmPSB+UlRTUl9BTEU7CkBAIC0yNTcsMjUgKzMzNCw2IEBACiAJCVJUU1IgfD0gUlRTUl9IWkU7CiAJCXNwaW5fdW5sb2NrX2lycSgmc2ExMTAwX3J0Y19sb2NrKTsKIAkJcmV0dXJuIDA7Ci0JY2FzZSBSVENfUElFX09GRjoKLQkJc3Bpbl9sb2NrX2lycSgmc2ExMTAwX3J0Y19sb2NrKTsKLQkJT0lFUiAmPSB+T0lFUl9FMTsKLQkJc3Bpbl91bmxvY2tfaXJxKCZzYTExMDBfcnRjX2xvY2spOwotCQlyZXR1cm4gMDsKLQljYXNlIFJUQ19QSUVfT046Ci0JCXNwaW5fbG9ja19pcnEoJnNhMTEwMF9ydGNfbG9jayk7Ci0JCU9TTVIxID0gdGltZXJfZnJlcSAvIHJ0Y19mcmVxICsgT1NDUjsKLQkJT0lFUiB8PSBPSUVSX0UxOwotCQlydGNfdGltZXIxX2NvdW50ID0gMTsKLQkJc3Bpbl91bmxvY2tfaXJxKCZzYTExMDBfcnRjX2xvY2spOwotCQlyZXR1cm4gMDsKLQljYXNlIFJUQ19JUlFQX1JFQUQ6Ci0JCXJldHVybiBwdXRfdXNlcihydGNfZnJlcSwgKHVuc2lnbmVkIGxvbmcgKilhcmcpOwotCWNhc2UgUlRDX0lSUVBfU0VUOgotCQlpZiAoYXJnIDwgMSB8fCBhcmcgPiB0aW1lcl9mcmVxKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCXJ0Y19mcmVxID0gYXJnOwotCQlyZXR1cm4gMDsKIAl9CiAJcmV0dXJuIC1FTk9JT0NUTENNRDsKIH0KQEAgLTMyNywxMiArMzg1LDE1IEBACiAKIHN0YXRpYyBpbnQgc2ExMTAwX3J0Y19wcm9jKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNlcV9maWxlICpzZXEpCiB7CisJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YyA9IChzdHJ1Y3QgcnRjX2RldmljZSAqKWRldjsKKwogCXNlcV9wcmludGYoc2VxLCAidHJpbS9kaXZpZGVyXHQ6IDB4JTA4eFxuIiwgKHUzMikgUlRUUik7CiAJc2VxX3ByaW50ZihzZXEsICJ1cGRhdGVfSVJRXHQ6ICVzXG4iLAogCQkJKFJUU1IgJiBSVFNSX0haRSkgPyAieWVzIiA6ICJubyIpOwogCXNlcV9wcmludGYoc2VxLCAicGVyaW9kaWNfSVJRXHQ6ICVzXG4iLAogCQkJKE9JRVIgJiBPSUVSX0UxKSA/ICJ5ZXMiIDogIm5vIik7Ci0Jc2VxX3ByaW50ZihzZXEsICJwZXJpb2RpY19mcmVxXHQ6ICVsZFxuIiwgcnRjX2ZyZXEpOworCXNlcV9wcmludGYoc2VxLCAicGVyaW9kaWNfZnJlcVx0OiAlZFxuIiwgcnRjLT5pcnFfZnJlcSk7CisJc2VxX3ByaW50ZihzZXEsICJSVFNSXHRcdDogMHglMDh4XG4iLCAodTMyKVJUU1IpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zNDcsNiArNDA4LDggQEAKIAkucmVhZF9hbGFybSA9IHNhMTEwMF9ydGNfcmVhZF9hbGFybSwKIAkuc2V0X2FsYXJtID0gc2ExMTAwX3J0Y19zZXRfYWxhcm0sCiAJLnByb2MgPSBzYTExMDBfcnRjX3Byb2MsCisJLmlycV9zZXRfZnJlcSA9IHNhMTEwMF9pcnFfc2V0X2ZyZXEsCisJLmlycV9zZXRfc3RhdGUgPSBzYTExMDBfaXJxX3NldF9zdGF0ZSwKIH07CiAKIHN0YXRpYyBpbnQgc2ExMTAwX3J0Y19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQpAQCAtMzY0LDcgKzQyNyw4IEBACiAJICovCiAJaWYgKFJUVFIgPT0gMCkgewogCQlSVFRSID0gUlRDX0RFRl9ESVZJREVSICsgKFJUQ19ERUZfVFJJTSA8PCAxNik7Ci0JCWRldl93YXJuKCZwZGV2LT5kZXYsICJ3YXJuaW5nOiBpbml0aWFsaXppbmcgZGVmYXVsdCBjbG9jayBkaXZpZGVyL3RyaW0gdmFsdWVcbiIpOworCQlkZXZfd2FybigmcGRldi0+ZGV2LCAid2FybmluZzogIgorCQkJImluaXRpYWxpemluZyBkZWZhdWx0IGNsb2NrIGRpdmlkZXIvdHJpbSB2YWx1ZVxuIik7CiAJCS8qIFRoZSBjdXJyZW50IFJUQyB2YWx1ZSBwcm9iYWJseSBkb2Vzbid0IG1ha2Ugc2Vuc2UgZWl0aGVyICovCiAJCVJDTlIgPSAwOwogCX0KQEAgLTM3MiwxMyArNDM2LDQyIEBACiAJZGV2aWNlX2luaXRfd2FrZXVwKCZwZGV2LT5kZXYsIDEpOwogCiAJcnRjID0gcnRjX2RldmljZV9yZWdpc3RlcihwZGV2LT5uYW1lLCAmcGRldi0+ZGV2LCAmc2ExMTAwX3J0Y19vcHMsCi0JCQkJVEhJU19NT0RVTEUpOworCQlUSElTX01PRFVMRSk7CiAKIAlpZiAoSVNfRVJSKHJ0YykpCiAJCXJldHVybiBQVFJfRVJSKHJ0Yyk7CiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBydGMpOwogCisJLyogU2V0IHRoZSBpcnFfZnJlcSAqLworCS8qVE9ETzogRmluZCBvdXQgd2hvIGlzIG1lc3Npbmcgd2l0aCB0aGlzIHZhbHVlIGFmdGVyIHdlIGluaXRpYWxpemUKKwkgKiBpdCBoZXJlLiovCisJcnRjLT5pcnFfZnJlcSA9IFJUQ19GUkVROworCisJLyogRml4IGZvciBhIG5hc3R5IGluaXRpYWxpemF0aW9uIHByb2JsZW0gdGhlIGluIFNBMTF4eCBSVFNSIHJlZ2lzdGVyLgorCSAqIFNlZSBhbHNvIHRoZSBjb21tZW50cyBpbiBzYTExMDBfcnRjX2ludGVycnVwdCgpLgorCSAqCisJICogU29tZXRpbWVzIGJpdCAxIG9mIHRoZSBSVFNSIChSVFNSX0haKSB3aWxsIHdha2UgdXAgMSwgd2hpY2ggbWVhbnMgYW4KKwkgKiBpbnRlcnJ1cHQgcGVuZGluZywgZXZlbiB0aG91Z2ggaW50ZXJydXB0cyB3ZXJlIG5ldmVyIGVuYWJsZWQuCisJICogSW4gdGhpcyBjYXNlLCB0aGlzIGJpdCBpdCBtdXN0IGJlIHJlc2V0IGJlZm9yZSBlbmFibGluZworCSAqIGludGVycnVwdGlvbnMgdG8gYXZvaWQgYSBub25leGlzdGVudCBpbnRlcnJ1cHQgdG8gb2NjdXIuCisJICoKKwkgKiBJbiBwcmluY2lwbGUsIHRoZSBzYW1lIHByb2JsZW0gd291bGQgYXBwbHkgdG8gYml0IDAsIGFsdGhvdWdoIGl0IGhhcworCSAqIG5ldmVyIGJlZW4gb2JzZXJ2ZWQgdG8gaGFwcGVuLgorCSAqCisJICogVGhpcyBpc3N1ZSBpcyBhZGRyZXNzZWQgYm90aCBoZXJlIGFuZCBpbiBzYTExMDBfcnRjX2ludGVycnVwdCgpLgorCSAqIElmIHRoZSBpc3N1ZSBpcyBub3QgYWRkcmVzc2VkIGhlcmUsIGluIHRoZSB0aW1lcyB3aGVuIHRoZSBwcm9jZXNzb3IKKwkgKiB3YWtlcyB1cCB3aXRoIHRoZSBiaXQgc2V0IHRoZXJlIHdpbGwgYmUgb25lIHNwdXJpb3VzIGludGVycnVwdC4KKwkgKgorCSAqIFRoZSBpc3N1ZSBpcyBhbHNvIGRlYWx0IHdpdGggaW4gc2ExMTAwX3J0Y19pbnRlcnJ1cHQoKSB0byBiZSBvbiB0aGUKKwkgKiBzYWZlIHNpZGUsIG9uY2UgdGhlIGNvbmRpdGlvbiB0aGF0IGxlYWQgdG8gdGhpcyBzdHJhbmdlCisJICogaW5pdGlhbGl6YXRpb24gaXMgdW5rbm93biBhbmQgY291bGQgaW4gcHJpbmNpcGxlIGhhcHBlbiBkdXJpbmcKKwkgKiBub3JtYWwgcHJvY2Vzc2luZy4KKwkgKgorCSAqIE5vdGljZSB0aGF0IGNsZWFyaW5nIGJpdCAxIGFuZCAwIGlzIGFjY29tcGxpc2hlZCBieSB3cml0dGluZyBPTkVTIHRvCisJICogdGhlIGNvcnJlc3BvbmRpbmcgYml0cyBpbiBSVFNSLiAqLworCVJUU1IgPSBSVFNSX0FMIHwgUlRTUl9IWjsKKwogCXJldHVybiAwOwogfQogCkBAIC0zODYsNyArNDc5LDcgQEAKIHsKIAlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKLSAJaWYgKHJ0YykKKwlpZiAocnRjKQogCQlydGNfZGV2aWNlX3VucmVnaXN0ZXIocnRjKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL0tjb25maWcgYi9kcml2ZXJzL3MzOTAvYmxvY2svS2NvbmZpZwppbmRleCAwNzg4MzE5Li44ZTQ3N2JiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svS2NvbmZpZworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svS2NvbmZpZwpAQCAtMiw3ICsyLDggQEAKIAlkZXBlbmRzIG9uIFMzOTAgJiYgQkxPQ0sKIAogY29uZmlnIEJMS19ERVZfWFBSQU0KLQl0cmlzdGF0ZSAiWFBSQU0gZGlzayBzdXBwb3J0IgorCWRlZl90cmlzdGF0ZSBtCisJcHJvbXB0ICJYUFJBTSBkaXNrIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBTMzkwICYmIEJMT0NLCiAJaGVscAogCSAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIHVzZSB5b3VyIGV4cGFuZGVkIHN0b3JhZ2Ugb24gUy8zOTAKQEAgLTEyLDEzICsxMywxNSBAQAogCSAgeHByYW0uICBJZiB1bnN1cmUsIHNheSAiTiIuCiAKIGNvbmZpZyBEQ1NTQkxLCi0JdHJpc3RhdGUgIkRDU1NCTEsgc3VwcG9ydCIKKwlkZWZfdHJpc3RhdGUgbQorCXByb21wdCAiRENTU0JMSyBzdXBwb3J0IgogCWRlcGVuZHMgb24gUzM5MCAmJiBCTE9DSwogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIGRjc3MgYmxvY2sgZGV2aWNlCiAKIGNvbmZpZyBEQVNECi0JdHJpc3RhdGUgIlN1cHBvcnQgZm9yIERBU0QgZGV2aWNlcyIKKwlkZWZfdHJpc3RhdGUgeQorCXByb21wdCAiU3VwcG9ydCBmb3IgREFTRCBkZXZpY2VzIgogCWRlcGVuZHMgb24gQ0NXICYmIEJMT0NLCiAJc2VsZWN0IElPU0NIRURfREVBRExJTkUKIAloZWxwCkBAIC0yNywyOCArMzAsMzIgQEAKIAkgIG5hdGl2ZWx5IG9uIGEgc2luZ2xlIGltYWdlIG9yIGFuIExQQVIuCiAKIGNvbmZpZyBEQVNEX1BST0ZJTEUKLQlib29sICJQcm9maWxpbmcgc3VwcG9ydCBmb3IgZGFzZCBkZXZpY2VzIgorCWRlZl9ib29sIHkKKwlwcm9tcHQgIlByb2ZpbGluZyBzdXBwb3J0IGZvciBkYXNkIGRldmljZXMiCiAJZGVwZW5kcyBvbiBEQVNECiAJaGVscAogCSAgRW5hYmxlIHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIHNlZSBwcm9maWxpbmcgaW5mb3JtYXRpb24KICAgICAgICAgICBpbiAvcHJvYy9kYXNkL3N0YXRpc3RpY3MuCiAKIGNvbmZpZyBEQVNEX0VDS0QKLQl0cmlzdGF0ZSAiU3VwcG9ydCBmb3IgRUNLRCBEaXNrcyIKKwlkZWZfdHJpc3RhdGUgeQorCXByb21wdCAiU3VwcG9ydCBmb3IgRUNLRCBEaXNrcyIKIAlkZXBlbmRzIG9uIERBU0QKIAloZWxwCiAJICBFQ0tEIGRldmljZXMgYXJlIHRoZSBtb3N0IGNvbW1vbmx5IHVzZWQgZGV2aWNlcy4gWW91IHNob3VsZCBlbmFibGUKIAkgIHRoaXMgb3B0aW9uIHVubGVzcyB5b3UgYXJlIHZlcnkgc3VyZSB0byBoYXZlIG5vIEVDS0QgZGV2aWNlLgogCiBjb25maWcgREFTRF9GQkEKLQl0cmlzdGF0ZSAiU3VwcG9ydCBmb3IgRkJBICBEaXNrcyIKKwlkZWZfdHJpc3RhdGUgeQorCXByb21wdCAiU3VwcG9ydCBmb3IgRkJBICBEaXNrcyIKIAlkZXBlbmRzIG9uIERBU0QKIAloZWxwCiAJICBTZWxlY3QgdGhpcyBvcHRpb24gdG8gYmUgYWJsZSB0byBhY2Nlc3MgRkJBIGRldmljZXMuIEl0IGlzIHNhZmUgdG8KIAkgIHNheSAiWSIuCiAKIGNvbmZpZyBEQVNEX0RJQUcKLQl0cmlzdGF0ZSAiU3VwcG9ydCBmb3IgRElBRyBhY2Nlc3MgdG8gRGlza3MiCisJZGVmX3RyaXN0YXRlIHkKKwlwcm9tcHQgIlN1cHBvcnQgZm9yIERJQUcgYWNjZXNzIHRvIERpc2tzIgogCWRlcGVuZHMgb24gREFTRAogCWhlbHAKIAkgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byB1c2UgRGlhZ25vc2UyNTAgY29tbWFuZCB0byBhY2Nlc3MKQEAgLTU2LDcgKzYzLDggQEAKIAkgIHNheSAiTiIuCiAKIGNvbmZpZyBEQVNEX0VFUgotCWJvb2wgIkV4dGVuZGVkIGVycm9yIHJlcG9ydGluZyAoRUVSKSIKKwlkZWZfYm9vbCB5CisJcHJvbXB0ICJFeHRlbmRlZCBlcnJvciByZXBvcnRpbmcgKEVFUikiCiAJZGVwZW5kcyBvbiBEQVNECiAJaGVscAogCSAgVGhpcyBkcml2ZXIgcHJvdmlkZXMgYSBjaGFyYWN0ZXIgZGV2aWNlIGludGVyZmFjZSB0byB0aGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jCmluZGV4IGZiNjEzZDcuLjc5NGJmZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYwpAQCAtMTEsNiArMTEsNyBAQAogI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAiZGFzZCIKICNkZWZpbmUgcHJfZm10KGZtdCkgS01TR19DT01QT05FTlQgIjogIiBmbXQKIAorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CiAjaW5jbHVkZSA8bGludXgva21vZC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KQEAgLTM2OCw2ICszNjksMTEgQEAKIAlkZXZpY2UtPnN0YXRlID0gREFTRF9TVEFURV9PTkxJTkU7CiAJaWYgKGRldmljZS0+YmxvY2spIHsKIAkJZGFzZF9zY2hlZHVsZV9ibG9ja19iaChkZXZpY2UtPmJsb2NrKTsKKwkJaWYgKChkZXZpY2UtPmZlYXR1cmVzICYgREFTRF9GRUFUVVJFX1VTRVJBVykpIHsKKwkJCWRpc2sgPSBkZXZpY2UtPmJsb2NrLT5nZHA7CisJCQlrb2JqZWN0X3VldmVudCgmZGlza190b19kZXYoZGlzayktPmtvYmosIEtPQkpfQ0hBTkdFKTsKKwkJCXJldHVybiAwOworCQl9CiAJCWRpc2sgPSBkZXZpY2UtPmJsb2NrLT5iZGV2LT5iZF9kaXNrOwogCQlkaXNrX3BhcnRfaXRlcl9pbml0KCZwaXRlciwgZGlzaywgRElTS19QSVRFUl9JTkNMX1BBUlQwKTsKIAkJd2hpbGUgKChwYXJ0ID0gZGlza19wYXJ0X2l0ZXJfbmV4dCgmcGl0ZXIpKSkKQEAgLTM5Myw3ICszOTksNyBAQAogCQkJcmV0dXJuIHJjOwogCX0KIAlkZXZpY2UtPnN0YXRlID0gREFTRF9TVEFURV9SRUFEWTsKLQlpZiAoZGV2aWNlLT5ibG9jaykgeworCWlmIChkZXZpY2UtPmJsb2NrICYmICEoZGV2aWNlLT5mZWF0dXJlcyAmIERBU0RfRkVBVFVSRV9VU0VSQVcpKSB7CiAJCWRpc2sgPSBkZXZpY2UtPmJsb2NrLT5iZGV2LT5iZF9kaXNrOwogCQlkaXNrX3BhcnRfaXRlcl9pbml0KCZwaXRlciwgZGlzaywgRElTS19QSVRFUl9JTkNMX1BBUlQwKTsKIAkJd2hpbGUgKChwYXJ0ID0gZGlza19wYXJ0X2l0ZXJfbmV4dCgmcGl0ZXIpKSkKQEAgLTc0NCwxMCArNzUwLDYgQEAKIAljaGFyICpkYXRhOwogCWludCBzaXplOwogCi0JLyogU2FuaXR5IGNoZWNrcyAqLwotCUJVR19PTihkYXRhc2l6ZSA+IFBBR0VfU0laRSB8fAotCSAgICAgKGNwbGVuZ3RoKnNpemVvZihzdHJ1Y3QgY2N3MSkpID4gUEFHRV9TSVpFKTsKLQogCXNpemUgPSAoc2l6ZW9mKHN0cnVjdCBkYXNkX2Njd19yZXEpICsgN0wpICYgLThMOwogCWlmIChjcGxlbmd0aCA+IDApCiAJCXNpemUgKz0gY3BsZW5ndGggKiBzaXplb2Yoc3RydWN0IGNjdzEpOwpAQCAtODUzLDcgKzg1NSw2IEBACiAJCXJjID0gY2N3X2RldmljZV9jbGVhcihkZXZpY2UtPmNkZXYsIChsb25nKSBjcXIpOwogCQlzd2l0Y2ggKHJjKSB7CiAJCWNhc2UgMDoJLyogdGVybWluYXRpb24gc3VjY2Vzc2Z1bCAqLwotCQkJY3FyLT5yZXRyaWVzLS07CiAJCQljcXItPnN0YXR1cyA9IERBU0RfQ1FSX0NMRUFSX1BFTkRJTkc7CiAJCQljcXItPnN0b3BjbGsgPSBnZXRfY2xvY2soKTsKIAkJCWNxci0+c3RhcnR0aW1lID0gMDsKQEAgLTkwNSw2ICs5MDYsMTYgQEAKIAkJcmV0dXJuIHJjOwogCX0KIAlkZXZpY2UgPSAoc3RydWN0IGRhc2RfZGV2aWNlICopIGNxci0+c3RhcnRkZXY7CisJaWYgKCgoY3FyLT5ibG9jayAmJgorCSAgICAgIHRlc3RfYml0KERBU0RfRkxBR19MT0NLX1NUT0xFTiwgJmNxci0+YmxvY2stPmJhc2UtPmZsYWdzKSkgfHwKKwkgICAgIHRlc3RfYml0KERBU0RfRkxBR19MT0NLX1NUT0xFTiwgJmRldmljZS0+ZmxhZ3MpKSAmJgorCSAgICAhdGVzdF9iaXQoREFTRF9DUVJfQUxMT1dfU0xPQ0ssICZjcXItPmZsYWdzKSkgeworCQlEQkZfREVWX0VWRU5UKERCRl9ERUJVRywgZGV2aWNlLCAic3RhcnRfSU86IHJldHVybiByZXF1ZXN0ICVwICIKKwkJCSAgICAgICJiZWNhdXNlIG9mIHN0b2xlbiBsb2NrIiwgY3FyKTsKKwkJY3FyLT5zdGF0dXMgPSBEQVNEX0NRUl9FUlJPUjsKKwkJY3FyLT5pbnRyYyA9IC1FUEVSTTsKKwkJcmV0dXJuIC1FUEVSTTsKKwl9CiAJaWYgKGNxci0+cmV0cmllcyA8IDApIHsKIAkJLyogaW50ZXJuYWwgZXJyb3IgMTQgLSBzdGFydF9JTyBydW4gb3V0IG9mIHJldHJpZXMgKi8KIAkJc3ByaW50ZihlcnJvcnN0cmluZywgIjE0ICVwIiwgY3FyKTsKQEAgLTkxNiw2ICs5MjcsMTEgQEAKIAljcXItPnN0YXJ0Y2xrID0gZ2V0X2Nsb2NrKCk7CiAJY3FyLT5zdGFydHRpbWUgPSBqaWZmaWVzOwogCWNxci0+cmV0cmllcy0tOworCWlmICghdGVzdF9iaXQoREFTRF9DUVJfVkVSSUZZX1BBVEgsICZjcXItPmZsYWdzKSkgeworCQljcXItPmxwbSAmPSBkZXZpY2UtPnBhdGhfZGF0YS5vcG07CisJCWlmICghY3FyLT5scG0pCisJCQljcXItPmxwbSA9IGRldmljZS0+cGF0aF9kYXRhLm9wbTsKKwl9CiAJaWYgKGNxci0+Y3Btb2RlID09IDEpIHsKIAkJcmMgPSBjY3dfZGV2aWNlX3RtX3N0YXJ0KGRldmljZS0+Y2RldiwgY3FyLT5jcGFkZHIsCiAJCQkJCSAobG9uZykgY3FyLCBjcXItPmxwbSk7CkBAIC05MjgsMzUgKzk0NCw1MyBAQAogCQljcXItPnN0YXR1cyA9IERBU0RfQ1FSX0lOX0lPOwogCQlicmVhazsKIAljYXNlIC1FQlVTWToKLQkJREJGX0RFVl9FVkVOVChEQkZfREVCVUcsIGRldmljZSwgIiVzIiwKKwkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAogCQkJICAgICAgInN0YXJ0X0lPOiBkZXZpY2UgYnVzeSwgcmV0cnkgbGF0ZXIiKTsKIAkJYnJlYWs7CiAJY2FzZSAtRVRJTUVET1VUOgotCQlEQkZfREVWX0VWRU5UKERCRl9ERUJVRywgZGV2aWNlLCAiJXMiLAorCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCiAJCQkgICAgICAic3RhcnRfSU86IHJlcXVlc3QgdGltZW91dCwgcmV0cnkgbGF0ZXIiKTsKIAkJYnJlYWs7CiAJY2FzZSAtRUFDQ0VTOgotCQkvKiAtRUFDQ0VTIGluZGljYXRlcyB0aGF0IHRoZSByZXF1ZXN0IHVzZWQgb25seSBhCi0JCSAqIHN1YnNldCBvZiB0aGUgYXZhaWxhYmxlIHBhdGhlcyBhbmQgYWxsIHRoZXNlCi0JCSAqIHBhdGhlcyBhcmUgZ29uZS4KLQkJICogRG8gYSByZXRyeSB3aXRoIGFsbCBhdmFpbGFibGUgcGF0aGVzLgorCQkvKiAtRUFDQ0VTIGluZGljYXRlcyB0aGF0IHRoZSByZXF1ZXN0IHVzZWQgb25seSBhIHN1YnNldCBvZiB0aGUKKwkJICogYXZhaWxhYmxlIHBhdGhzIGFuZCBhbGwgdGhlc2UgcGF0aHMgYXJlIGdvbmUuIElmIHRoZSBscG0gb2YKKwkJICogdGhpcyByZXF1ZXN0IHdhcyBvbmx5IGEgc3Vic2V0IG9mIHRoZSBvcG0gKGUuZy4gdGhlIHBwbSkgdGhlbgorCQkgKiB3ZSBqdXN0IGRvIGEgcmV0cnkgd2l0aCBhbGwgYXZhaWxhYmxlIHBhdGhzLgorCQkgKiBJZiB3ZSBhbHJlYWR5IHVzZSB0aGUgZnVsbCBvcG0sIHNvbWV0aGluZyBpcyBhbWlzcywgYW5kIHdlCisJCSAqIG5lZWQgYSBmdWxsIHBhdGggdmVyaWZpY2F0aW9uLgogCQkgKi8KLQkJY3FyLT5scG0gPSBMUE1fQU5ZUEFUSDsKLQkJREJGX0RFVl9FVkVOVChEQkZfREVCVUcsIGRldmljZSwgIiVzIiwKLQkJCSAgICAgICJzdGFydF9JTzogc2VsZWN0ZWQgcGF0aGVzIGdvbmUsIgotCQkJICAgICAgIiByZXRyeSBvbiBhbGwgcGF0aGVzIik7CisJCWlmICh0ZXN0X2JpdChEQVNEX0NRUl9WRVJJRllfUEFUSCwgJmNxci0+ZmxhZ3MpKSB7CisJCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsCisJCQkJICAgICAgInN0YXJ0X0lPOiBzZWxlY3RlZCBwYXRocyBnb25lICgleCkiLAorCQkJCSAgICAgIGNxci0+bHBtKTsKKwkJfSBlbHNlIGlmIChjcXItPmxwbSAhPSBkZXZpY2UtPnBhdGhfZGF0YS5vcG0pIHsKKwkJCWNxci0+bHBtID0gZGV2aWNlLT5wYXRoX2RhdGEub3BtOworCQkJREJGX0RFVl9FVkVOVChEQkZfREVCVUcsIGRldmljZSwgIiVzIiwKKwkJCQkgICAgICAic3RhcnRfSU86IHNlbGVjdGVkIHBhdGhzIGdvbmUsIgorCQkJCSAgICAgICIgcmV0cnkgb24gYWxsIHBhdGhzIik7CisJCX0gZWxzZSB7CisJCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCisJCQkJICAgICAgInN0YXJ0X0lPOiBhbGwgcGF0aHMgaW4gb3BtIGdvbmUsIgorCQkJCSAgICAgICIgZG8gcGF0aCB2ZXJpZmljYXRpb24iKTsKKwkJCWRhc2RfZ2VuZXJpY19sYXN0X3BhdGhfZ29uZShkZXZpY2UpOworCQkJZGV2aWNlLT5wYXRoX2RhdGEub3BtID0gMDsKKwkJCWRldmljZS0+cGF0aF9kYXRhLnBwbSA9IDA7CisJCQlkZXZpY2UtPnBhdGhfZGF0YS5ucG0gPSAwOworCQkJZGV2aWNlLT5wYXRoX2RhdGEudGJ2cG0gPQorCQkJCWNjd19kZXZpY2VfZ2V0X3BhdGhfbWFzayhkZXZpY2UtPmNkZXYpOworCQl9CiAJCWJyZWFrOwogCWNhc2UgLUVOT0RFVjoKLQkJREJGX0RFVl9FVkVOVChEQkZfREVCVUcsIGRldmljZSwgIiVzIiwKKwkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAogCQkJICAgICAgInN0YXJ0X0lPOiAtRU5PREVWIGRldmljZSBnb25lLCByZXRyeSIpOwogCQlicmVhazsKIAljYXNlIC1FSU86Ci0JCURCRl9ERVZfRVZFTlQoREJGX0RFQlVHLCBkZXZpY2UsICIlcyIsCisJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKIAkJCSAgICAgICJzdGFydF9JTzogLUVJTyBkZXZpY2UgZ29uZSwgcmV0cnkiKTsKIAkJYnJlYWs7CiAJY2FzZSAtRUlOVkFMOgogCQkvKiBtb3N0IGxpa2VseSBjYXVzZWQgaW4gcG93ZXIgbWFuYWdlbWVudCBjb250ZXh0ICovCi0JCURCRl9ERVZfRVZFTlQoREJGX0RFQlVHLCBkZXZpY2UsICIlcyIsCisJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKIAkJCSAgICAgICJzdGFydF9JTzogLUVJTlZBTCBkZXZpY2UgY3VycmVudGx5ICIKIAkJCSAgICAgICJub3QgYWNjZXNzaWJsZSIpOwogCQlicmVhazsKQEAgLTEwNzYsNiArMTExMCw3IEBACiAJdW5zaWduZWQgbG9uZyBsb25nIG5vdzsKIAlpbnQgZXhwaXJlczsKIAorCWtzdGF0X2NwdShzbXBfcHJvY2Vzc29yX2lkKCkpLmlycXNbSU9JTlRfREFTXSsrOwogCWlmIChJU19FUlIoaXJiKSkgewogCQlzd2l0Y2ggKFBUUl9FUlIoaXJiKSkgewogCQljYXNlIC1FSU86CkBAIC0xMDk0LDE2ICsxMTI5LDExIEBACiAJfQogCiAJbm93ID0gZ2V0X2Nsb2NrKCk7Ci0KLQkvKiBjaGVjayBmb3IgdW5zb2xpY2l0ZWQgaW50ZXJydXB0cyAqLwogCWNxciA9IChzdHJ1Y3QgZGFzZF9jY3dfcmVxICopIGludHBhcm07Ci0JaWYgKCFjcXIgfHwgKChzY3N3X2NjKCZpcmItPnNjc3cpID09IDEpICYmCi0JCSAgICAgKHNjc3dfZmN0bCgmaXJiLT5zY3N3KSAmIFNDU1dfRkNUTF9TVEFSVF9GVU5DKSAmJgotCQkgICAgICgoc2Nzd19zdGN0bCgmaXJiLT5zY3N3KSA9PSBTQ1NXX1NUQ1RMX1NUQVRVU19QRU5EKSB8fAotCQkgICAgICAoc2Nzd19zdGN0bCgmaXJiLT5zY3N3KSA9PSAoU0NTV19TVENUTF9TVEFUVVNfUEVORCB8Ci0JCQkJCQkgIFNDU1dfU1RDVExfQUxFUlRfU1RBVFVTKSkpKSkgewotCQlpZiAoY3FyICYmIGNxci0+c3RhdHVzID09IERBU0RfQ1FSX0lOX0lPKQotCQkJY3FyLT5zdGF0dXMgPSBEQVNEX0NRUl9RVUVVRUQ7CisJLyogY2hlY2sgZm9yIGNvbmRpdGlvbnMgdGhhdCBzaG91bGQgYmUgaGFuZGxlZCBpbW1lZGlhdGVseSAqLworCWlmICghY3FyIHx8CisJICAgICEoc2Nzd19kc3RhdCgmaXJiLT5zY3N3KSA9PSAoREVWX1NUQVRfQ0hOX0VORCB8IERFVl9TVEFUX0RFVl9FTkQpICYmCisJICAgICAgc2Nzd19jc3RhdCgmaXJiLT5zY3N3KSA9PSAwKSkgewogCQlpZiAoY3FyKQogCQkJbWVtY3B5KCZjcXItPmlyYiwgaXJiLCBzaXplb2YoKmlyYikpOwogCQlkZXZpY2UgPSBkYXNkX2RldmljZV9mcm9tX2NkZXZfbG9ja2VkKGNkZXYpOwpAQCAtMTExNCwxNyArMTE0NCwxNCBAQAogCQkJZGFzZF9wdXRfZGV2aWNlKGRldmljZSk7CiAJCQlyZXR1cm47CiAJCX0KLQkJZGV2aWNlLT5kaXNjaXBsaW5lLT5kdW1wX3NlbnNlX2RiZihkZXZpY2UsIGlyYiwKLQkJCQkJCSAgICJ1bnNvbGljaXRlZCIpOwotCQlpZiAoKGRldmljZS0+ZmVhdHVyZXMgJiBEQVNEX0ZFQVRVUkVfRVJQTE9HKSkKLQkJCWRldmljZS0+ZGlzY2lwbGluZS0+ZHVtcF9zZW5zZShkZXZpY2UsIGNxciwKLQkJCQkJCSAgICAgICBpcmIpOwotCQlkYXNkX2RldmljZV9jbGVhcl90aW1lcihkZXZpY2UpOwotCQlkZXZpY2UtPmRpc2NpcGxpbmUtPmhhbmRsZV91bnNvbGljaXRlZF9pbnRlcnJ1cHQoZGV2aWNlLAotCQkJCQkJCQkgaXJiKTsKKwkJZGV2aWNlLT5kaXNjaXBsaW5lLT5kdW1wX3NlbnNlX2RiZihkZXZpY2UsIGlyYiwgImludCIpOworCQlpZiAoZGV2aWNlLT5mZWF0dXJlcyAmIERBU0RfRkVBVFVSRV9FUlBMT0cpCisJCQlkZXZpY2UtPmRpc2NpcGxpbmUtPmR1bXBfc2Vuc2UoZGV2aWNlLCBjcXIsIGlyYik7CisJCWRldmljZS0+ZGlzY2lwbGluZS0+Y2hlY2tfZm9yX2RldmljZV9jaGFuZ2UoZGV2aWNlLCBjcXIsIGlyYik7CiAJCWRhc2RfcHV0X2RldmljZShkZXZpY2UpOwotCQlyZXR1cm47CiAJfQorCWlmICghY3FyKQorCQlyZXR1cm47CiAKIAlkZXZpY2UgPSAoc3RydWN0IGRhc2RfZGV2aWNlICopIGNxci0+c3RhcnRkZXY7CiAJaWYgKCFkZXZpY2UgfHwKQEAgLTExNjQsMjUgKzExOTEsMTkgQEAKIAkJCQkJICBzdHJ1Y3QgZGFzZF9jY3dfcmVxLCBkZXZsaXN0KTsKIAkJfQogCX0gZWxzZSB7ICAvKiBlcnJvciAqLwotCQltZW1jcHkoJmNxci0+aXJiLCBpcmIsIHNpemVvZihzdHJ1Y3QgaXJiKSk7Ci0JCS8qIGxvZyBzZW5zZSBmb3IgZXZlcnkgZmFpbGVkIEkvTyB0byBzMzkwIGRlYnVnZmVhdHVyZSAqLwotCQlkYXNkX2xvZ19zZW5zZV9kYmYoY3FyLCBpcmIpOwotCQlpZiAoZGV2aWNlLT5mZWF0dXJlcyAmIERBU0RfRkVBVFVSRV9FUlBMT0cpIHsKLQkJCWRhc2RfbG9nX3NlbnNlKGNxciwgaXJiKTsKLQkJfQotCiAJCS8qCiAJCSAqIElmIHdlIGRvbid0IHdhbnQgY29tcGxleCBFUlAgZm9yIHRoaXMgcmVxdWVzdCwgdGhlbiBqdXN0CiAJCSAqIHJlc2V0IHRoaXMgYW5kIHJldHJ5IGl0IGluIHRoZSBmYXN0cGF0aAogCQkgKi8KIAkJaWYgKCF0ZXN0X2JpdChEQVNEX0NRUl9GTEFHU19VU0VfRVJQLCAmY3FyLT5mbGFncykgJiYKIAkJICAgIGNxci0+cmV0cmllcyA+IDApIHsKLQkJCWlmIChjcXItPmxwbSA9PSBMUE1fQU5ZUEFUSCkKKwkJCWlmIChjcXItPmxwbSA9PSBkZXZpY2UtPnBhdGhfZGF0YS5vcG0pCiAJCQkJREJGX0RFVl9FVkVOVChEQkZfREVCVUcsIGRldmljZSwKIAkJCQkJICAgICAgImRlZmF1bHQgRVJQIGluIGZhc3RwYXRoICIKIAkJCQkJICAgICAgIiglaSByZXRyaWVzIGxlZnQpIiwKIAkJCQkJICAgICAgY3FyLT5yZXRyaWVzKTsKLQkJCWNxci0+bHBtICAgID0gTFBNX0FOWVBBVEg7CisJCQlpZiAoIXRlc3RfYml0KERBU0RfQ1FSX1ZFUklGWV9QQVRILCAmY3FyLT5mbGFncykpCisJCQkJY3FyLT5scG0gPSBkZXZpY2UtPnBhdGhfZGF0YS5vcG07CiAJCQljcXItPnN0YXR1cyA9IERBU0RfQ1FSX1FVRVVFRDsKIAkJCW5leHQgPSBjcXI7CiAJCX0gZWxzZQpAQCAtMTIxMCwxMyArMTIzMSwxMyBAQAogCQlnb3RvIG91dDsKIAlpZiAodGVzdF9iaXQoREFTRF9GTEFHX09GRkxJTkUsICZkZXZpY2UtPmZsYWdzKSB8fAogCSAgIGRldmljZS0+c3RhdGUgIT0gZGV2aWNlLT50YXJnZXQgfHwKLQkgICAhZGV2aWNlLT5kaXNjaXBsaW5lLT5oYW5kbGVfdW5zb2xpY2l0ZWRfaW50ZXJydXB0KXsKKwkgICAhZGV2aWNlLT5kaXNjaXBsaW5lLT5jaGVja19mb3JfZGV2aWNlX2NoYW5nZSl7CiAJCWRhc2RfcHV0X2RldmljZShkZXZpY2UpOwogCQlnb3RvIG91dDsKIAl9Ci0KLQlkYXNkX2RldmljZV9jbGVhcl90aW1lcihkZXZpY2UpOwotCWRldmljZS0+ZGlzY2lwbGluZS0+aGFuZGxlX3Vuc29saWNpdGVkX2ludGVycnVwdChkZXZpY2UsIGlyYik7CisJaWYgKGRldmljZS0+ZGlzY2lwbGluZS0+ZHVtcF9zZW5zZV9kYmYpCisJCWRldmljZS0+ZGlzY2lwbGluZS0+ZHVtcF9zZW5zZV9kYmYoZGV2aWNlLCBpcmIsICJ1YyIpOworCWRldmljZS0+ZGlzY2lwbGluZS0+Y2hlY2tfZm9yX2RldmljZV9jaGFuZ2UoZGV2aWNlLCBOVUxMLCBpcmIpOwogCWRhc2RfcHV0X2RldmljZShkZXZpY2UpOwogb3V0OgogCXJldHVybiBVQ19UT0RPX1JFVFJZOwpAQCAtMTM2Niw4ICsxMzg3LDE0IEBACiAJY3FyID0gbGlzdF9lbnRyeShkZXZpY2UtPmNjd19xdWV1ZS5uZXh0LCBzdHJ1Y3QgZGFzZF9jY3dfcmVxLCBkZXZsaXN0KTsKIAlpZiAoY3FyLT5zdGF0dXMgIT0gREFTRF9DUVJfUVVFVUVEKQogCQlyZXR1cm47Ci0JLyogd2hlbiBkZXZpY2UgaXMgc3RvcHBlZCwgcmV0dXJuIHJlcXVlc3QgdG8gcHJldmlvdXMgbGF5ZXIgKi8KLQlpZiAoZGV2aWNlLT5zdG9wcGVkKSB7CisJLyogd2hlbiBkZXZpY2UgaXMgc3RvcHBlZCwgcmV0dXJuIHJlcXVlc3QgdG8gcHJldmlvdXMgbGF5ZXIKKwkgKiBleGNlcHRpb246IG9ubHkgdGhlIGRpc2Nvbm5lY3Qgb3IgdW5yZXN1bWVkIGJpdHMgYXJlIHNldCBhbmQgdGhlCisJICogY3FyIGlzIGEgcGF0aCB2ZXJpZmljYXRpb24gcmVxdWVzdAorCSAqLworCWlmIChkZXZpY2UtPnN0b3BwZWQgJiYKKwkgICAgISghKGRldmljZS0+c3RvcHBlZCAmIH4oREFTRF9TVE9QUEVEX0RDX1dBSVQgfCBEQVNEX1VOUkVTVU1FRF9QTSkpCisJICAgICAgJiYgdGVzdF9iaXQoREFTRF9DUVJfVkVSSUZZX1BBVEgsICZjcXItPmZsYWdzKSkpIHsKKwkJY3FyLT5pbnRyYyA9IC1FQUdBSU47CiAJCWNxci0+c3RhdHVzID0gREFTRF9DUVJfQ0xFQVJFRDsKIAkJZGFzZF9zY2hlZHVsZV9kZXZpY2VfYmgoZGV2aWNlKTsKIAkJcmV0dXJuOwpAQCAtMTM4Myw2ICsxNDEwLDIzIEBACiAJCWRhc2RfZGV2aWNlX3NldF90aW1lcihkZXZpY2UsIDUwKTsKIH0KIAorc3RhdGljIHZvaWQgX19kYXNkX2RldmljZV9jaGVja19wYXRoX2V2ZW50cyhzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSkKK3sKKwlpbnQgcmM7CisKKwlpZiAoZGV2aWNlLT5wYXRoX2RhdGEudGJ2cG0pIHsKKwkJaWYgKGRldmljZS0+c3RvcHBlZCAmIH4oREFTRF9TVE9QUEVEX0RDX1dBSVQgfAorCQkJCQlEQVNEX1VOUkVTVU1FRF9QTSkpCisJCQlyZXR1cm47CisJCXJjID0gZGV2aWNlLT5kaXNjaXBsaW5lLT52ZXJpZnlfcGF0aCgKKwkJCWRldmljZSwgZGV2aWNlLT5wYXRoX2RhdGEudGJ2cG0pOworCQlpZiAocmMpCisJCQlkYXNkX2RldmljZV9zZXRfdGltZXIoZGV2aWNlLCA1MCk7CisJCWVsc2UKKwkJCWRldmljZS0+cGF0aF9kYXRhLnRidnBtID0gMDsKKwl9Cit9OworCiAvKgogICogR28gdGhyb3VnaCBhbGwgcmVxdWVzdCBvbiB0aGUgZGFzZF9kZXZpY2UgcmVxdWVzdCBxdWV1ZSwKICAqIHRlcm1pbmF0ZSB0aGVtIG9uIHRoZSBjZGV2IGlmIG5lY2Vzc2FyeSwgYW5kIHJldHVybiB0aGVtIHRvIHRoZQpAQCAtMTQ1Nyw2ICsxNTAxLDcgQEAKIAlfX2Rhc2RfZGV2aWNlX2NoZWNrX2V4cGlyZShkZXZpY2UpOwogCS8qIGZpbmQgZmluYWwgcmVxdWVzdHMgb24gY2N3IHF1ZXVlICovCiAJX19kYXNkX2RldmljZV9wcm9jZXNzX2Njd19xdWV1ZShkZXZpY2UsICZmaW5hbF9xdWV1ZSk7CisJX19kYXNkX2RldmljZV9jaGVja19wYXRoX2V2ZW50cyhkZXZpY2UpOwogCXNwaW5fdW5sb2NrX2lycShnZXRfY2N3ZGV2X2xvY2soZGV2aWNlLT5jZGV2KSk7CiAJLyogTm93IGNhbGwgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIG9mIHJlcXVlc3RzIHdpdGggZmluYWwgc3RhdHVzICovCiAJX19kYXNkX2RldmljZV9wcm9jZXNzX2ZpbmFsX3F1ZXVlKGRldmljZSwgJmZpbmFsX3F1ZXVlKTsKQEAgLTE2MTMsNyArMTY1OCwxMiBAQAogCQkJY29udGludWU7CiAJCWlmIChjcXItPnN0YXR1cyAhPSBEQVNEX0NRUl9GSUxMRUQpIC8qIGNvdWxkIGJlIGZhaWxlZCAqLwogCQkJY29udGludWU7Ci0KKwkJaWYgKHRlc3RfYml0KERBU0RfRkxBR19MT0NLX1NUT0xFTiwgJmRldmljZS0+ZmxhZ3MpICYmCisJCSAgICAhdGVzdF9iaXQoREFTRF9DUVJfQUxMT1dfU0xPQ0ssICZjcXItPmZsYWdzKSkgeworCQkJY3FyLT5zdGF0dXMgPSBEQVNEX0NRUl9GQUlMRUQ7CisJCQljcXItPmludHJjID0gLUVQRVJNOworCQkJY29udGludWU7CisJCX0KIAkJLyogTm9uLXRlbXBvcmFyeSBzdG9wIGNvbmRpdGlvbiB3aWxsIHRyaWdnZXIgZmFpbCBmYXN0ICovCiAJCWlmIChkZXZpY2UtPnN0b3BwZWQgJiB+REFTRF9TVE9QUEVEX1BFTkRJTkcgJiYKIAkJICAgIHRlc3RfYml0KERBU0RfQ1FSX0ZMQUdTX0ZBSUxGQVNULCAmY3FyLT5mbGFncykgJiYKQEAgLTE2MjEsNyArMTY3MSw2IEBACiAJCQljcXItPnN0YXR1cyA9IERBU0RfQ1FSX0ZBSUxFRDsKIAkJCWNvbnRpbnVlOwogCQl9Ci0KIAkJLyogRG9uJ3QgdHJ5IHRvIHN0YXJ0IHJlcXVlc3RzIGlmIGRldmljZSBpcyBzdG9wcGVkICovCiAJCWlmIChpbnRlcnJ1cHRpYmxlKSB7CiAJCQlyYyA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZSgKQEAgLTE3MDYsMTMgKzE3NTUsMTggQEAKIAlpbnQgcmM7CiAKIAlkZXZpY2UgPSBjcXItPnN0YXJ0ZGV2OworCWlmICh0ZXN0X2JpdChEQVNEX0ZMQUdfTE9DS19TVE9MRU4sICZkZXZpY2UtPmZsYWdzKSAmJgorCSAgICAhdGVzdF9iaXQoREFTRF9DUVJfQUxMT1dfU0xPQ0ssICZjcXItPmZsYWdzKSkgeworCQljcXItPnN0YXR1cyA9IERBU0RfQ1FSX0ZBSUxFRDsKKwkJY3FyLT5pbnRyYyA9IC1FUEVSTTsKKwkJcmV0dXJuIC1FSU87CisJfQogCXNwaW5fbG9ja19pcnEoZ2V0X2Njd2Rldl9sb2NrKGRldmljZS0+Y2RldikpOwogCXJjID0gX2Rhc2RfdGVybV9ydW5uaW5nX2NxcihkZXZpY2UpOwogCWlmIChyYykgewogCQlzcGluX3VubG9ja19pcnEoZ2V0X2Njd2Rldl9sb2NrKGRldmljZS0+Y2RldikpOwogCQlyZXR1cm4gcmM7CiAJfQotCiAJY3FyLT5jYWxsYmFjayA9IGRhc2Rfd2FrZXVwX2NiOwogCWNxci0+Y2FsbGJhY2tfZGF0YSA9IERBU0RfU0xFRVBPTl9TVEFSVF9UQUc7CiAJY3FyLT5zdGF0dXMgPSBEQVNEX0NRUl9RVUVVRUQ7CkBAIC0yMDE2LDYgKzIwNzAsMTMgQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNxciwgJmJsb2NrLT5jY3dfcXVldWUsIGJsb2NrbGlzdCkgewogCQlpZiAoY3FyLT5zdGF0dXMgIT0gREFTRF9DUVJfRklMTEVEKQogCQkJY29udGludWU7CisJCWlmICh0ZXN0X2JpdChEQVNEX0ZMQUdfTE9DS19TVE9MRU4sICZibG9jay0+YmFzZS0+ZmxhZ3MpICYmCisJCSAgICAhdGVzdF9iaXQoREFTRF9DUVJfQUxMT1dfU0xPQ0ssICZjcXItPmZsYWdzKSkgeworCQkJY3FyLT5zdGF0dXMgPSBEQVNEX0NRUl9GQUlMRUQ7CisJCQljcXItPmludHJjID0gLUVQRVJNOworCQkJZGFzZF9zY2hlZHVsZV9ibG9ja19iaChibG9jayk7CisJCQljb250aW51ZTsKKwkJfQogCQkvKiBOb24tdGVtcG9yYXJ5IHN0b3AgY29uZGl0aW9uIHdpbGwgdHJpZ2dlciBmYWlsIGZhc3QgKi8KIAkJaWYgKGJsb2NrLT5iYXNlLT5zdG9wcGVkICYgfkRBU0RfU1RPUFBFRF9QRU5ESU5HICYmCiAJCSAgICB0ZXN0X2JpdChEQVNEX0NRUl9GTEFHU19GQUlMRkFTVCwgJmNxci0+ZmxhZ3MpICYmCkBAIC0yMjAxLDggKzIyNjIsMjAgQEAKIHsKIAlpbnQgbWF4OwogCi0JYmxrX3F1ZXVlX2xvZ2ljYWxfYmxvY2tfc2l6ZShibG9jay0+cmVxdWVzdF9xdWV1ZSwgYmxvY2stPmJwX2Jsb2NrKTsKLQltYXggPSBibG9jay0+YmFzZS0+ZGlzY2lwbGluZS0+bWF4X2Jsb2NrcyA8PCBibG9jay0+czJiX3NoaWZ0OworCWlmIChibG9jay0+YmFzZS0+ZmVhdHVyZXMgJiBEQVNEX0ZFQVRVUkVfVVNFUkFXKSB7CisJCS8qCisJCSAqIHRoZSBtYXhfYmxvY2tzIHZhbHVlIGZvciByYXdfdHJhY2sgYWNjZXNzIGlzIDI1NgorCQkgKiBpdCBpcyBoaWdoZXIgdGhhbiB0aGUgbmF0aXZlIEVDS0QgdmFsdWUgYmVjYXVzZSB3ZQorCQkgKiBvbmx5IG5lZWQgb25lIGNjdyBwZXIgdHJhY2sKKwkJICogc28gdGhlIG1heF9od19zZWN0b3JzIGFyZQorCQkgKiAyMDQ4IHggNTEyQiA9IDEwMjRrQiA9IDE2IHRyYWNrcworCQkgKi8KKwkJbWF4ID0gMjA0ODsKKwl9IGVsc2UgeworCQltYXggPSBibG9jay0+YmFzZS0+ZGlzY2lwbGluZS0+bWF4X2Jsb2NrcyA8PCBibG9jay0+czJiX3NoaWZ0OworCX0KKwlibGtfcXVldWVfbG9naWNhbF9ibG9ja19zaXplKGJsb2NrLT5yZXF1ZXN0X3F1ZXVlLAorCQkJCSAgICAgYmxvY2stPmJwX2Jsb2NrKTsKIAlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMoYmxvY2stPnJlcXVlc3RfcXVldWUsIG1heCk7CiAJYmxrX3F1ZXVlX21heF9zZWdtZW50cyhibG9jay0+cmVxdWVzdF9xdWV1ZSwgLTFMKTsKIAkvKiB3aXRoIHBhZ2Ugc2l6ZWQgc2VnbWVudHMgd2UgY2FuIHRyYW5zbGF0ZSBlYWNoIHNlZ2VtZW50IGludG8KQEAgLTI1ODgsMTAgKzI2NjEsNTMgQEAKIAlyZXR1cm4gMDsKIH0KIAoraW50IGRhc2RfZ2VuZXJpY19sYXN0X3BhdGhfZ29uZShzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1Y3QgZGFzZF9jY3dfcmVxICpjcXI7CisKKwlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsICJObyBvcGVyYXRpb25hbCBjaGFubmVsIHBhdGggaXMgbGVmdCAiCisJCSAiZm9yIHRoZSBkZXZpY2VcbiIpOworCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwgImxhc3QgcGF0aCBnb25lIik7CisJLyogRmlyc3Qgb2YgYWxsIGNhbGwgZXh0ZW5kZWQgZXJyb3IgcmVwb3J0aW5nLiAqLworCWRhc2RfZWVyX3dyaXRlKGRldmljZSwgTlVMTCwgREFTRF9FRVJfTk9QQVRIKTsKKworCWlmIChkZXZpY2UtPnN0YXRlIDwgREFTRF9TVEFURV9CQVNJQykKKwkJcmV0dXJuIDA7CisJLyogRGV2aWNlIGlzIGFjdGl2ZS4gV2Ugd2FudCB0byBrZWVwIGl0LiAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoY3FyLCAmZGV2aWNlLT5jY3dfcXVldWUsIGRldmxpc3QpCisJCWlmICgoY3FyLT5zdGF0dXMgPT0gREFTRF9DUVJfSU5fSU8pIHx8CisJCSAgICAoY3FyLT5zdGF0dXMgPT0gREFTRF9DUVJfQ0xFQVJfUEVORElORykpIHsKKwkJCWNxci0+c3RhdHVzID0gREFTRF9DUVJfUVVFVUVEOworCQkJY3FyLT5yZXRyaWVzKys7CisJCX0KKwlkYXNkX2RldmljZV9zZXRfc3RvcF9iaXRzKGRldmljZSwgREFTRF9TVE9QUEVEX0RDX1dBSVQpOworCWRhc2RfZGV2aWNlX2NsZWFyX3RpbWVyKGRldmljZSk7CisJZGFzZF9zY2hlZHVsZV9kZXZpY2VfYmgoZGV2aWNlKTsKKwlyZXR1cm4gMTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRhc2RfZ2VuZXJpY19sYXN0X3BhdGhfZ29uZSk7CisKK2ludCBkYXNkX2dlbmVyaWNfcGF0aF9vcGVyYXRpb25hbChzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSkKK3sKKwlkZXZfaW5mbygmZGV2aWNlLT5jZGV2LT5kZXYsICJBIGNoYW5uZWwgcGF0aCB0byB0aGUgZGV2aWNlIGhhcyBiZWNvbWUgIgorCQkgIm9wZXJhdGlvbmFsXG4iKTsKKwlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsICJwYXRoIG9wZXJhdGlvbmFsIik7CisJZGFzZF9kZXZpY2VfcmVtb3ZlX3N0b3BfYml0cyhkZXZpY2UsIERBU0RfU1RPUFBFRF9EQ19XQUlUKTsKKwlpZiAoZGV2aWNlLT5zdG9wcGVkICYgREFTRF9VTlJFU1VNRURfUE0pIHsKKwkJZGFzZF9kZXZpY2VfcmVtb3ZlX3N0b3BfYml0cyhkZXZpY2UsIERBU0RfVU5SRVNVTUVEX1BNKTsKKwkJZGFzZF9yZXN0b3JlX2RldmljZShkZXZpY2UpOworCQlyZXR1cm4gMTsKKwl9CisJZGFzZF9zY2hlZHVsZV9kZXZpY2VfYmgoZGV2aWNlKTsKKwlpZiAoZGV2aWNlLT5ibG9jaykKKwkJZGFzZF9zY2hlZHVsZV9ibG9ja19iaChkZXZpY2UtPmJsb2NrKTsKKwlyZXR1cm4gMTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRhc2RfZ2VuZXJpY19wYXRoX29wZXJhdGlvbmFsKTsKKwogaW50IGRhc2RfZ2VuZXJpY19ub3RpZnkoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYsIGludCBldmVudCkKIHsKIAlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZTsKLQlzdHJ1Y3QgZGFzZF9jY3dfcmVxICpjcXI7CiAJaW50IHJldDsKIAogCWRldmljZSA9IGRhc2RfZGV2aWNlX2Zyb21fY2Rldl9sb2NrZWQoY2Rldik7CkBAIC0yNjAyLDQxICsyNzE4LDY0IEBACiAJY2FzZSBDSU9fR09ORToKIAljYXNlIENJT19CT1hFRDoKIAljYXNlIENJT19OT19QQVRIOgotCQkvKiBGaXJzdCBvZiBhbGwgY2FsbCBleHRlbmRlZCBlcnJvciByZXBvcnRpbmcuICovCi0JCWRhc2RfZWVyX3dyaXRlKGRldmljZSwgTlVMTCwgREFTRF9FRVJfTk9QQVRIKTsKLQotCQlpZiAoZGV2aWNlLT5zdGF0ZSA8IERBU0RfU1RBVEVfQkFTSUMpCi0JCQlicmVhazsKLQkJLyogRGV2aWNlIGlzIGFjdGl2ZS4gV2Ugd2FudCB0byBrZWVwIGl0LiAqLwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNxciwgJmRldmljZS0+Y2N3X3F1ZXVlLCBkZXZsaXN0KQotCQkJaWYgKGNxci0+c3RhdHVzID09IERBU0RfQ1FSX0lOX0lPKSB7Ci0JCQkJY3FyLT5zdGF0dXMgPSBEQVNEX0NRUl9RVUVVRUQ7Ci0JCQkJY3FyLT5yZXRyaWVzKys7Ci0JCQl9Ci0JCWRhc2RfZGV2aWNlX3NldF9zdG9wX2JpdHMoZGV2aWNlLCBEQVNEX1NUT1BQRURfRENfV0FJVCk7Ci0JCWRhc2RfZGV2aWNlX2NsZWFyX3RpbWVyKGRldmljZSk7Ci0JCWRhc2Rfc2NoZWR1bGVfZGV2aWNlX2JoKGRldmljZSk7Ci0JCXJldCA9IDE7CisJCWRldmljZS0+cGF0aF9kYXRhLm9wbSA9IDA7CisJCWRldmljZS0+cGF0aF9kYXRhLnBwbSA9IDA7CisJCWRldmljZS0+cGF0aF9kYXRhLm5wbSA9IDA7CisJCXJldCA9IGRhc2RfZ2VuZXJpY19sYXN0X3BhdGhfZ29uZShkZXZpY2UpOwogCQlicmVhazsKIAljYXNlIENJT19PUEVSOgotCQkvKiBGSVhNRTogYWRkIGEgc2FuaXR5IGNoZWNrLiAqLwotCQlkYXNkX2RldmljZV9yZW1vdmVfc3RvcF9iaXRzKGRldmljZSwgREFTRF9TVE9QUEVEX0RDX1dBSVQpOwotCQlpZiAoZGV2aWNlLT5zdG9wcGVkICYgREFTRF9VTlJFU1VNRURfUE0pIHsKLQkJCWRhc2RfZGV2aWNlX3JlbW92ZV9zdG9wX2JpdHMoZGV2aWNlLCBEQVNEX1VOUkVTVU1FRF9QTSk7Ci0JCQlkYXNkX3Jlc3RvcmVfZGV2aWNlKGRldmljZSk7Ci0JCQlyZXQgPSAxOwotCQkJYnJlYWs7Ci0JCX0KLQkJZGFzZF9zY2hlZHVsZV9kZXZpY2VfYmgoZGV2aWNlKTsKLQkJaWYgKGRldmljZS0+YmxvY2spCi0JCQlkYXNkX3NjaGVkdWxlX2Jsb2NrX2JoKGRldmljZS0+YmxvY2spOwogCQlyZXQgPSAxOworCQlpZiAoZGV2aWNlLT5wYXRoX2RhdGEub3BtKQorCQkJcmV0ID0gZGFzZF9nZW5lcmljX3BhdGhfb3BlcmF0aW9uYWwoZGV2aWNlKTsKIAkJYnJlYWs7CiAJfQogCWRhc2RfcHV0X2RldmljZShkZXZpY2UpOwogCXJldHVybiByZXQ7CiB9CiAKK3ZvaWQgZGFzZF9nZW5lcmljX3BhdGhfZXZlbnQoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYsIGludCAqcGF0aF9ldmVudCkKK3sKKwlpbnQgY2hwOworCV9fdTggb2xkb3BtLCBldmVudGxwbTsKKwlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZTsKKworCWRldmljZSA9IGRhc2RfZGV2aWNlX2Zyb21fY2Rldl9sb2NrZWQoY2Rldik7CisJaWYgKElTX0VSUihkZXZpY2UpKQorCQlyZXR1cm47CisJZm9yIChjaHAgPSAwOyBjaHAgPCA4OyBjaHArKykgeworCQlldmVudGxwbSA9IDB4ODAgPj4gY2hwOworCQlpZiAocGF0aF9ldmVudFtjaHBdICYgUEVfUEFUSF9HT05FKSB7CisJCQlvbGRvcG0gPSBkZXZpY2UtPnBhdGhfZGF0YS5vcG07CisJCQlkZXZpY2UtPnBhdGhfZGF0YS5vcG0gJj0gfmV2ZW50bHBtOworCQkJZGV2aWNlLT5wYXRoX2RhdGEucHBtICY9IH5ldmVudGxwbTsKKwkJCWRldmljZS0+cGF0aF9kYXRhLm5wbSAmPSB+ZXZlbnRscG07CisJCQlpZiAob2xkb3BtICYmICFkZXZpY2UtPnBhdGhfZGF0YS5vcG0pCisJCQkJZGFzZF9nZW5lcmljX2xhc3RfcGF0aF9nb25lKGRldmljZSk7CisJCX0KKwkJaWYgKHBhdGhfZXZlbnRbY2hwXSAmIFBFX1BBVEhfQVZBSUxBQkxFKSB7CisJCQlkZXZpY2UtPnBhdGhfZGF0YS5vcG0gJj0gfmV2ZW50bHBtOworCQkJZGV2aWNlLT5wYXRoX2RhdGEucHBtICY9IH5ldmVudGxwbTsKKwkJCWRldmljZS0+cGF0aF9kYXRhLm5wbSAmPSB+ZXZlbnRscG07CisJCQlkZXZpY2UtPnBhdGhfZGF0YS50YnZwbSB8PSBldmVudGxwbTsKKwkJCWRhc2Rfc2NoZWR1bGVfZGV2aWNlX2JoKGRldmljZSk7CisJCX0KKwl9CisJZGFzZF9wdXRfZGV2aWNlKGRldmljZSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChkYXNkX2dlbmVyaWNfcGF0aF9ldmVudCk7CisKK2ludCBkYXNkX2dlbmVyaWNfdmVyaWZ5X3BhdGgoc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UsIF9fdTggbHBtKQoreworCWlmICghZGV2aWNlLT5wYXRoX2RhdGEub3BtICYmIGxwbSkgeworCQlkZXZpY2UtPnBhdGhfZGF0YS5vcG0gPSBscG07CisJCWRhc2RfZ2VuZXJpY19wYXRoX29wZXJhdGlvbmFsKGRldmljZSk7CisJfSBlbHNlCisJCWRldmljZS0+cGF0aF9kYXRhLm9wbSB8PSBscG07CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChkYXNkX2dlbmVyaWNfdmVyaWZ5X3BhdGgpOworCisKIGludCBkYXNkX2dlbmVyaWNfcG1fZnJlZXplKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KQogewogCXN0cnVjdCBkYXNkX2Njd19yZXEgKmNxciwgKm47CkBAIC0yNjQ2LDYgKzI3ODUsMTAgQEAKIAogCWlmIChJU19FUlIoZGV2aWNlKSkKIAkJcmV0dXJuIFBUUl9FUlIoZGV2aWNlKTsKKworCWlmIChkZXZpY2UtPmRpc2NpcGxpbmUtPmZyZWV6ZSkKKwkJcmMgPSBkZXZpY2UtPmRpc2NpcGxpbmUtPmZyZWV6ZShkZXZpY2UpOworCiAJLyogZGlzYWxsb3cgbmV3IEkvTyAgKi8KIAlkYXNkX2RldmljZV9zZXRfc3RvcF9iaXRzKGRldmljZSwgREFTRF9TVE9QUEVEX1BNKTsKIAkvKiBjbGVhciBhY3RpdmUgcmVxdWVzdHMgKi8KQEAgLTI2ODIsOSArMjgyNSw2IEBACiAJbGlzdF9zcGxpY2VfdGFpbCgmZnJlZXplX3F1ZXVlLCAmZGV2aWNlLT5jY3dfcXVldWUpOwogCXNwaW5fdW5sb2NrX2lycShnZXRfY2N3ZGV2X2xvY2soY2RldikpOwogCi0JaWYgKGRldmljZS0+ZGlzY2lwbGluZS0+ZnJlZXplKQotCQlyYyA9IGRldmljZS0+ZGlzY2lwbGluZS0+ZnJlZXplKGRldmljZSk7Ci0KIAlkYXNkX3B1dF9kZXZpY2UoZGV2aWNlKTsKIAlyZXR1cm4gcmM7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF8zOTkwX2VycC5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfMzk5MF9lcnAuYwppbmRleCA5NjhjNzZjLi4xNjU0YTI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF8zOTkwX2VycC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkXzM5OTBfZXJwLmMKQEAgLTE1Miw5ICsxNTIsOSBAQAogCXNwaW5fbG9ja19pcnFzYXZlKGdldF9jY3dkZXZfbG9jayhkZXZpY2UtPmNkZXYpLCBmbGFncyk7CiAJb3BtID0gY2N3X2RldmljZV9nZXRfcGF0aF9tYXNrKGRldmljZS0+Y2Rldik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShnZXRfY2N3ZGV2X2xvY2soZGV2aWNlLT5jZGV2KSwgZmxhZ3MpOwotCS8vRklYTUU6IHN0YXJ0IHdpdGggZ2V0X29wbSA/CiAJaWYgKGVycC0+bHBtID09IDApCi0JCWVycC0+bHBtID0gTFBNX0FOWVBBVEggJiB+KGVycC0+aXJiLmVzdy5lc3cwLnN1YmxvZy5scHVtKTsKKwkJZXJwLT5scG0gPSBkZXZpY2UtPnBhdGhfZGF0YS5vcG0gJgorCQkJfihlcnAtPmlyYi5lc3cuZXN3MC5zdWJsb2cubHB1bSk7CiAJZWxzZQogCQllcnAtPmxwbSAmPSB+KGVycC0+aXJiLmVzdy5lc3cwLnN1YmxvZy5scHVtKTsKIApAQCAtMjcwLDEwICsyNzAsMTEgQEAKIHsKIAllcnAtPmZ1bmN0aW9uID0gZGFzZF8zOTkwX2VycF9hY3Rpb25fMTsKIAlkYXNkXzM5OTBfZXJwX2FsdGVybmF0ZV9wYXRoKGVycCk7Ci0JaWYgKGVycC0+c3RhdHVzID09IERBU0RfQ1FSX0ZBSUxFRCkgeworCWlmIChlcnAtPnN0YXR1cyA9PSBEQVNEX0NRUl9GQUlMRUQgJiYKKwkgICAgIXRlc3RfYml0KERBU0RfQ1FSX1ZFUklGWV9QQVRILCAmZXJwLT5mbGFncykpIHsKIAkJZXJwLT5zdGF0dXMgPSBEQVNEX0NRUl9GSUxMRUQ7CiAJCWVycC0+cmV0cmllcyA9IDEwOwotCQllcnAtPmxwbSA9IExQTV9BTllQQVRIOworCQllcnAtPmxwbSA9IGVycC0+c3RhcnRkZXYtPnBhdGhfZGF0YS5vcG07CiAJCWVycC0+ZnVuY3Rpb24gPSBkYXNkXzM5OTBfZXJwX2FjdGlvbl8xX3NlYzsKIAl9CiAJcmV0dXJuIGVycDsKQEAgLTE5MDcsMTUgKzE5MDgsMTQgQEAKIHN0YXRpYyB2b2lkCiBkYXNkXzM5OTBfZXJwX2NvbXBvdW5kX3BhdGgoc3RydWN0IGRhc2RfY2N3X3JlcSAqIGVycCwgY2hhciAqc2Vuc2UpCiB7Ci0KIAlpZiAoc2Vuc2VbMjVdICYgREFTRF9TRU5TRV9CSVRfMykgewogCQlkYXNkXzM5OTBfZXJwX2FsdGVybmF0ZV9wYXRoKGVycCk7CiAKLQkJaWYgKGVycC0+c3RhdHVzID09IERBU0RfQ1FSX0ZBSUxFRCkgeworCQlpZiAoZXJwLT5zdGF0dXMgPT0gREFTRF9DUVJfRkFJTEVEICYmCisJCSAgICAhdGVzdF9iaXQoREFTRF9DUVJfVkVSSUZZX1BBVEgsICZlcnAtPmZsYWdzKSkgewogCQkJLyogcmVzZXQgdGhlIGxwbSBhbmQgdGhlIHN0YXR1cyB0byBiZSBhYmxlIHRvCiAJCQkgKiB0cnkgZnVydGhlciBhY3Rpb25zLiAqLwotCi0JCQllcnAtPmxwbSA9IDA7CisJCQllcnAtPmxwbSA9IGVycC0+c3RhcnRkZXYtPnBhdGhfZGF0YS5vcG07CiAJCQllcnAtPnN0YXR1cyA9IERBU0RfQ1FSX05FRURfRVJQOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGV2bWFwLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYwppbmRleCA4ZDQxZjNlLi5jYjZhNjdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYwpAQCAtMjA4LDYgKzIwOCw4IEBACiAJCQlmZWF0dXJlcyB8PSBEQVNEX0ZFQVRVUkVfUkVBRE9OTFk7CiAJCWVsc2UgaWYgKGxlbiA9PSA0ICYmICFzdHJuY21wKHN0ciwgImRpYWciLCA0KSkKIAkJCWZlYXR1cmVzIHw9IERBU0RfRkVBVFVSRV9VU0VESUFHOworCQllbHNlIGlmIChsZW4gPT0gMyAmJiAhc3RybmNtcChzdHIsICJyYXciLCAzKSkKKwkJCWZlYXR1cmVzIHw9IERBU0RfRkVBVFVSRV9VU0VSQVc7CiAJCWVsc2UgaWYgKGxlbiA9PSA2ICYmICFzdHJuY21wKHN0ciwgImVycGxvZyIsIDYpKQogCQkJZmVhdHVyZXMgfD0gREFTRF9GRUFUVVJFX0VSUExPRzsKIAkJZWxzZSBpZiAobGVuID09IDggJiYgIXN0cm5jbXAoc3RyLCAiZmFpbGZhc3QiLCA4KSkKQEAgLTYzOSw2ICs2NDEsNyBAQAogewogCXdha2VfdXAoJmRhc2RfZGVsZXRlX3dxKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGRhc2RfcHV0X2RldmljZV93YWtlKTsKIAogLyoKICAqIFJldHVybiBkYXNkX2RldmljZSBzdHJ1Y3R1cmUgYXNzb2NpYXRlZCB3aXRoIGNkZXYuCkBAIC04NTYsNyArODU5LDcgQEAKIAlzcGluX2xvY2soJmRhc2RfZGV2bWFwX2xvY2spOwogCS8qIENoYW5naW5nIGRpYWcgZGlzY2lwbGluZSBmbGFnIGlzIG9ubHkgYWxsb3dlZCBpbiBvZmZsaW5lIHN0YXRlLiAqLwogCXJjID0gY291bnQ7Ci0JaWYgKCFkZXZtYXAtPmRldmljZSkgeworCWlmICghZGV2bWFwLT5kZXZpY2UgJiYgIShkZXZtYXAtPmZlYXR1cmVzICYgREFTRF9GRUFUVVJFX1VTRVJBVykpIHsKIAkJaWYgKHZhbCkKIAkJCWRldm1hcC0+ZmVhdHVyZXMgfD0gREFTRF9GRUFUVVJFX1VTRURJQUc7CiAJCWVsc2UKQEAgLTg2OSw2ICs4NzIsNTYgQEAKIAogc3RhdGljIERFVklDRV9BVFRSKHVzZV9kaWFnLCAwNjQ0LCBkYXNkX3VzZV9kaWFnX3Nob3csIGRhc2RfdXNlX2RpYWdfc3RvcmUpOwogCisvKgorICogdXNlX3JhdyBjb250cm9scyB3aGV0aGVyIHRoZSBkcml2ZXIgc2hvdWxkIGdpdmUgYWNjZXNzIHRvIHJhdyBlY2tkIGRhdGEgb3IKKyAqIG9wZXJhdGUgaW4gc3RhbmRhcmQgbW9kZQorICovCitzdGF0aWMgc3NpemVfdAorZGFzZF91c2VfcmF3X3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBkYXNkX2Rldm1hcCAqZGV2bWFwOworCWludCB1c2VfcmF3OworCisJZGV2bWFwID0gZGFzZF9maW5kX2J1c2lkKGRldl9uYW1lKGRldikpOworCWlmICghSVNfRVJSKGRldm1hcCkpCisJCXVzZV9yYXcgPSAoZGV2bWFwLT5mZWF0dXJlcyAmIERBU0RfRkVBVFVSRV9VU0VSQVcpICE9IDA7CisJZWxzZQorCQl1c2VfcmF3ID0gKERBU0RfRkVBVFVSRV9ERUZBVUxUICYgREFTRF9GRUFUVVJFX1VTRVJBVykgIT0gMDsKKwlyZXR1cm4gc3ByaW50ZihidWYsIHVzZV9yYXcgPyAiMVxuIiA6ICIwXG4iKTsKK30KKworc3RhdGljIHNzaXplX3QKK2Rhc2RfdXNlX3Jhd19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGRhc2RfZGV2bWFwICpkZXZtYXA7CisJc3NpemVfdCByYzsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKworCWRldm1hcCA9IGRhc2RfZGV2bWFwX2Zyb21fY2Rldih0b19jY3dkZXYoZGV2KSk7CisJaWYgKElTX0VSUihkZXZtYXApKQorCQlyZXR1cm4gUFRSX0VSUihkZXZtYXApOworCisJaWYgKChzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsKSAhPSAwKSB8fCB2YWwgPiAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNwaW5fbG9jaygmZGFzZF9kZXZtYXBfbG9jayk7CisJLyogQ2hhbmdpbmcgZGlhZyBkaXNjaXBsaW5lIGZsYWcgaXMgb25seSBhbGxvd2VkIGluIG9mZmxpbmUgc3RhdGUuICovCisJcmMgPSBjb3VudDsKKwlpZiAoIWRldm1hcC0+ZGV2aWNlICYmICEoZGV2bWFwLT5mZWF0dXJlcyAmIERBU0RfRkVBVFVSRV9VU0VESUFHKSkgeworCQlpZiAodmFsKQorCQkJZGV2bWFwLT5mZWF0dXJlcyB8PSBEQVNEX0ZFQVRVUkVfVVNFUkFXOworCQllbHNlCisJCQlkZXZtYXAtPmZlYXR1cmVzICY9IH5EQVNEX0ZFQVRVUkVfVVNFUkFXOworCX0gZWxzZQorCQlyYyA9IC1FUEVSTTsKKwlzcGluX3VubG9jaygmZGFzZF9kZXZtYXBfbG9jayk7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIocmF3X3RyYWNrX2FjY2VzcywgMDY0NCwgZGFzZF91c2VfcmF3X3Nob3csCisJCSAgIGRhc2RfdXNlX3Jhd19zdG9yZSk7CisKIHN0YXRpYyBzc2l6ZV90CiBkYXNkX2Rpc2NpcGxpbmVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkgICAgIGNoYXIgKmJ1ZikKQEAgLTExMjYsNiArMTE3OSwxMDMgQEAKIAogc3RhdGljIERFVklDRV9BVFRSKGV4cGlyZXMsIDA2NDQsIGRhc2RfZXhwaXJlc19zaG93LCBkYXNkX2V4cGlyZXNfc3RvcmUpOwogCitzdGF0aWMgc3NpemVfdCBkYXNkX3Jlc2VydmF0aW9uX3BvbGljeV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQkgICAgY2hhciAqYnVmKQoreworCXN0cnVjdCBkYXNkX2Rldm1hcCAqZGV2bWFwOworCWludCByYyA9IDA7CisKKwlkZXZtYXAgPSBkYXNkX2ZpbmRfYnVzaWQoZGV2X25hbWUoZGV2KSk7CisJaWYgKElTX0VSUihkZXZtYXApKSB7CisJCXJjID0gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICJpZ25vcmVcbiIpOworCX0gZWxzZSB7CisJCXNwaW5fbG9jaygmZGFzZF9kZXZtYXBfbG9jayk7CisJCWlmIChkZXZtYXAtPmZlYXR1cmVzICYgREFTRF9GRUFUVVJFX0ZBSUxPTlNMQ0spCisJCQlyYyA9IHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiZmFpbFxuIik7CisJCWVsc2UKKwkJCXJjID0gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICJpZ25vcmVcbiIpOworCQlzcGluX3VubG9jaygmZGFzZF9kZXZtYXBfbG9jayk7CisJfQorCXJldHVybiByYzsKK30KKworc3RhdGljIHNzaXplX3QgZGFzZF9yZXNlcnZhdGlvbl9wb2xpY3lfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQkgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBkYXNkX2Rldm1hcCAqZGV2bWFwOworCWludCByYzsKKworCWRldm1hcCA9IGRhc2RfZGV2bWFwX2Zyb21fY2Rldih0b19jY3dkZXYoZGV2KSk7CisJaWYgKElTX0VSUihkZXZtYXApKQorCQlyZXR1cm4gUFRSX0VSUihkZXZtYXApOworCXJjID0gMDsKKwlzcGluX2xvY2soJmRhc2RfZGV2bWFwX2xvY2spOworCWlmIChzeXNmc19zdHJlcSgiaWdub3JlIiwgYnVmKSkKKwkJZGV2bWFwLT5mZWF0dXJlcyAmPSB+REFTRF9GRUFUVVJFX0ZBSUxPTlNMQ0s7CisJZWxzZSBpZiAoc3lzZnNfc3RyZXEoImZhaWwiLCBidWYpKQorCQlkZXZtYXAtPmZlYXR1cmVzIHw9IERBU0RfRkVBVFVSRV9GQUlMT05TTENLOworCWVsc2UKKwkJcmMgPSAtRUlOVkFMOworCWlmIChkZXZtYXAtPmRldmljZSkKKwkJZGV2bWFwLT5kZXZpY2UtPmZlYXR1cmVzID0gZGV2bWFwLT5mZWF0dXJlczsKKwlzcGluX3VubG9jaygmZGFzZF9kZXZtYXBfbG9jayk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisJZWxzZQorCQlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihyZXNlcnZhdGlvbl9wb2xpY3ksIDA2NDQsCisJCSAgIGRhc2RfcmVzZXJ2YXRpb25fcG9saWN5X3Nob3csIGRhc2RfcmVzZXJ2YXRpb25fcG9saWN5X3N0b3JlKTsKKworc3RhdGljIHNzaXplX3QgZGFzZF9yZXNlcnZhdGlvbl9zdGF0ZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCSAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZTsKKwlpbnQgcmMgPSAwOworCisJZGV2aWNlID0gZGFzZF9kZXZpY2VfZnJvbV9jZGV2KHRvX2Njd2RldihkZXYpKTsKKwlpZiAoSVNfRVJSKGRldmljZSkpCisJCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIm5vbmVcbiIpOworCisJaWYgKHRlc3RfYml0KERBU0RfRkxBR19JU19SRVNFUlZFRCwgJmRldmljZS0+ZmxhZ3MpKQorCQlyYyA9IHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAicmVzZXJ2ZWRcbiIpOworCWVsc2UgaWYgKHRlc3RfYml0KERBU0RfRkxBR19MT0NLX1NUT0xFTiwgJmRldmljZS0+ZmxhZ3MpKQorCQlyYyA9IHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAibG9zdFxuIik7CisJZWxzZQorCQlyYyA9IHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAibm9uZVxuIik7CisJZGFzZF9wdXRfZGV2aWNlKGRldmljZSk7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgc3NpemVfdCBkYXNkX3Jlc2VydmF0aW9uX3N0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQkgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2U7CisJaW50IHJjID0gMDsKKworCWRldmljZSA9IGRhc2RfZGV2aWNlX2Zyb21fY2Rldih0b19jY3dkZXYoZGV2KSk7CisJaWYgKElTX0VSUihkZXZpY2UpKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAoc3lzZnNfc3RyZXEoInJlc2V0IiwgYnVmKSkKKwkJY2xlYXJfYml0KERBU0RfRkxBR19MT0NLX1NUT0xFTiwgJmRldmljZS0+ZmxhZ3MpOworCWVsc2UKKwkJcmMgPSAtRUlOVkFMOworCWRhc2RfcHV0X2RldmljZShkZXZpY2UpOworCisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisJZWxzZQorCQlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihsYXN0X2tub3duX3Jlc2VydmF0aW9uX3N0YXRlLCAwNjQ0LAorCQkgICBkYXNkX3Jlc2VydmF0aW9uX3N0YXRlX3Nob3csIGRhc2RfcmVzZXJ2YXRpb25fc3RhdGVfc3RvcmUpOworCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqIGRhc2RfYXR0cnNbXSA9IHsKIAkmZGV2X2F0dHJfcmVhZG9ubHkuYXR0ciwKIAkmZGV2X2F0dHJfZGlzY2lwbGluZS5hdHRyLApAQCAtMTEzNCwxMCArMTI4NCwxMyBAQAogCSZkZXZfYXR0cl92ZW5kb3IuYXR0ciwKIAkmZGV2X2F0dHJfdWlkLmF0dHIsCiAJJmRldl9hdHRyX3VzZV9kaWFnLmF0dHIsCisJJmRldl9hdHRyX3Jhd190cmFja19hY2Nlc3MuYXR0ciwKIAkmZGV2X2F0dHJfZWVyX2VuYWJsZWQuYXR0ciwKIAkmZGV2X2F0dHJfZXJwbG9nLmF0dHIsCiAJJmRldl9hdHRyX2ZhaWxmYXN0LmF0dHIsCiAJJmRldl9hdHRyX2V4cGlyZXMuYXR0ciwKKwkmZGV2X2F0dHJfcmVzZXJ2YXRpb25fcG9saWN5LmF0dHIsCisJJmRldl9hdHRyX2xhc3Rfa25vd25fcmVzZXJ2YXRpb25fc3RhdGUuYXR0ciwKIAlOVUxMLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5jCmluZGV4IDI2NmIzNGIuLjI5MTQzZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2RpYWcuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kaWFnLmMKQEAgLTEwLDYgKzEwLDcgQEAKIAogI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAiZGFzZCIKIAorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpAQCAtMjM4LDYgKzIzOSw3IEBACiAJYWRkcl90IGlwOwogCWludCByYzsKIAorCWtzdGF0X2NwdShzbXBfcHJvY2Vzc29yX2lkKCkpLmlycXNbRVhUSU5UX0RTRF0rKzsKIAlzd2l0Y2ggKGV4dF9pbnRfY29kZSA+PiAyNCkgewogCWNhc2UgREFTRF9ESUFHX0NPREVfMzFCSVQ6CiAJCWlwID0gKGFkZHJfdCkgcGFyYW0zMjsKQEAgLTYxNyw2ICs2MTksNyBAQAogCS5lYmNuYW1lID0gIkRJQUciLAogCS5tYXhfYmxvY2tzID0gRElBR19NQVhfQkxPQ0tTLAogCS5jaGVja19kZXZpY2UgPSBkYXNkX2RpYWdfY2hlY2tfZGV2aWNlLAorCS52ZXJpZnlfcGF0aCA9IGRhc2RfZ2VuZXJpY192ZXJpZnlfcGF0aCwKIAkuZmlsbF9nZW9tZXRyeSA9IGRhc2RfZGlhZ19maWxsX2dlb21ldHJ5LAogCS5zdGFydF9JTyA9IGRhc2Rfc3RhcnRfZGlhZywKIAkudGVybV9JTyA9IGRhc2RfZGlhZ190ZXJtX0lPLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jCmluZGV4IGJmNjEyNzRhLi4zMTg2NzJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jCkBAIC01NCw2ICs1NCwxNSBAQAogI2RlZmluZSBFQ0tEX0Y3KGkpIChpLT5mYWN0b3I3KQogI2RlZmluZSBFQ0tEX0Y4KGkpIChpLT5mYWN0b3I4KQogCisvKgorICogcmF3IHRyYWNrIGFjY2VzcyBhbHdheXMgbWFwIHRvIDY0ayBpbiBtZW1vcnkKKyAqIHNvIGl0IG1hcHMgdG8gMTYgYmxvY2tzIG9mIDRrIHBlciB0cmFjaworICovCisjZGVmaW5lIERBU0RfUkFXX0JMT0NLX1BFUl9UUkFDSyAxNgorI2RlZmluZSBEQVNEX1JBV19CTE9DS1NJWkUgNDA5NgorLyogNjRrIGFyZSAxMjggeCA1MTIgYnl0ZSBzZWN0b3JzICAqLworI2RlZmluZSBEQVNEX1JBV19TRUNUT1JTX1BFUl9UUkFDSyAxMjgKKwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiBzdGF0aWMgc3RydWN0IGRhc2RfZGlzY2lwbGluZSBkYXNkX2Vja2RfZGlzY2lwbGluZTsKQEAgLTkwLDYgKzk5LDE4IEBACiB9ICpkYXNkX3Jlc2VydmVfcmVxOwogc3RhdGljIERFRklORV9NVVRFWChkYXNkX3Jlc2VydmVfbXV0ZXgpOwogCisvKiBkZWZpbml0aW9ucyBmb3IgdGhlIHBhdGggdmVyaWZpY2F0aW9uIHdvcmtlciAqLworc3RydWN0IHBhdGhfdmVyaWZpY2F0aW9uX3dvcmtfZGF0YSB7CisJc3RydWN0IHdvcmtfc3RydWN0IHdvcmtlcjsKKwlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZTsKKwlzdHJ1Y3QgZGFzZF9jY3dfcmVxIGNxcjsKKwlzdHJ1Y3QgY2N3MSBjY3c7CisJX191OCByY2RfYnVmZmVyW0RBU0RfRUNLRF9SQ0RfREFUQV9TSVpFXTsKKwlpbnQgaXNnbG9iYWw7CisJX191OCB0YnZwbTsKK307CitzdGF0aWMgc3RydWN0IHBhdGhfdmVyaWZpY2F0aW9uX3dvcmtfZGF0YSAqcGF0aF92ZXJpZmljYXRpb25fd29ya2VyOworc3RhdGljIERFRklORV9NVVRFWChkYXNkX3BhdGhfdmVyaWZpY2F0aW9uX211dGV4KTsKIAogLyogaW5pdGlhbCBhdHRlbXB0IGF0IGEgcHJvYmUgZnVuY3Rpb24uIHRoaXMgY2FuIGJlIHNpbXBsaWZpZWQgb25jZQogICogdGhlIG90aGVyIGRldGVjdGlvbiBjb2RlIGlzIGdvbmUgKi8KQEAgLTM3Myw2ICszOTQsMjMgQEAKIAkJZGF0YS0+bGVuZ3RoID0gcmVjbGVuOwogCQlkYXRhLT5vcGVyYXRpb24ub3BlcmF0aW9uID0gMHgwMzsKIAkJYnJlYWs7CisJY2FzZSBEQVNEX0VDS0RfQ0NXX1dSSVRFX0ZVTExfVFJBQ0s6CisJCWRhdGEtPm9wZXJhdGlvbi5vcmllbnRhdGlvbiA9IDB4MDsKKwkJZGF0YS0+b3BlcmF0aW9uLm9wZXJhdGlvbiA9IDB4M0Y7CisJCWRhdGEtPmV4dGVuZGVkX29wZXJhdGlvbiA9IDB4MTE7CisJCWRhdGEtPmxlbmd0aCA9IDA7CisJCWRhdGEtPmV4dGVuZGVkX3BhcmFtZXRlcl9sZW5ndGggPSAweDAyOworCQlpZiAoZGF0YS0+Y291bnQgPiA4KSB7CisJCQlkYXRhLT5leHRlbmRlZF9wYXJhbWV0ZXJbMF0gPSAweEZGOworCQkJZGF0YS0+ZXh0ZW5kZWRfcGFyYW1ldGVyWzFdID0gMHhGRjsKKwkJCWRhdGEtPmV4dGVuZGVkX3BhcmFtZXRlclsxXSA8PD0gKDE2IC0gY291bnQpOworCQl9IGVsc2UgeworCQkJZGF0YS0+ZXh0ZW5kZWRfcGFyYW1ldGVyWzBdID0gMHhGRjsKKwkJCWRhdGEtPmV4dGVuZGVkX3BhcmFtZXRlclswXSA8PD0gKDggLSBjb3VudCk7CisJCQlkYXRhLT5leHRlbmRlZF9wYXJhbWV0ZXJbMV0gPSAweDAwOworCQl9CisJCWRhdGEtPnNlY3RvciA9IDB4RkY7CisJCWJyZWFrOwogCWNhc2UgREFTRF9FQ0tEX0NDV19XUklURV9UUkFDS19EQVRBOgogCQlkYXRhLT5hdXhpbGlhcnkubGVuZ3RoX3ZhbGlkID0gMHgxOwogCQlkYXRhLT5sZW5ndGggPSByZWNsZW47CS8qIG5vdCB0bGYsIGFzIG9uZSBtaWdodCB0aGluayAqLwpAQCAtMzk2LDYgKzQzNCwxMiBAQAogCWNhc2UgREFTRF9FQ0tEX0NDV19SRUFEX0NPVU5UOgogCQlkYXRhLT5vcGVyYXRpb24ub3BlcmF0aW9uID0gMHgwNjsKIAkJYnJlYWs7CisJY2FzZSBEQVNEX0VDS0RfQ0NXX1JFQURfVFJBQ0s6CisJCWRhdGEtPm9wZXJhdGlvbi5vcmllbnRhdGlvbiA9IDB4MTsKKwkJZGF0YS0+b3BlcmF0aW9uLm9wZXJhdGlvbiA9IDB4MEM7CisJCWRhdGEtPmV4dGVuZGVkX3BhcmFtZXRlcl9sZW5ndGggPSAwOworCQlkYXRhLT5zZWN0b3IgPSAweEZGOworCQlicmVhazsKIAljYXNlIERBU0RfRUNLRF9DQ1dfUkVBRF9UUkFDS19EQVRBOgogCQlkYXRhLT5hdXhpbGlhcnkubGVuZ3RoX3ZhbGlkID0gMHgxOwogCQlkYXRhLT5sZW5ndGggPSB0bGY7CkBAIC00MzksMTAgKzQ4MywxNiBAQAogCiAJY2N3LT5jbWRfY29kZSA9IERBU0RfRUNLRF9DQ1dfUEZYOwogCWNjdy0+ZmxhZ3MgPSAwOwotCWNjdy0+Y291bnQgPSBzaXplb2YoKnBmeGRhdGEpOwotCWNjdy0+Y2RhID0gKF9fdTMyKSBfX3BhKHBmeGRhdGEpOworCWlmIChjbWQgPT0gREFTRF9FQ0tEX0NDV19XUklURV9GVUxMX1RSQUNLKSB7CisJCWNjdy0+Y291bnQgPSBzaXplb2YoKnBmeGRhdGEpICsgMjsKKwkJY2N3LT5jZGEgPSAoX191MzIpIF9fcGEocGZ4ZGF0YSk7CisJCW1lbXNldChwZnhkYXRhLCAwLCBzaXplb2YoKnBmeGRhdGEpICsgMik7CisJfSBlbHNlIHsKKwkJY2N3LT5jb3VudCA9IHNpemVvZigqcGZ4ZGF0YSk7CisJCWNjdy0+Y2RhID0gKF9fdTMyKSBfX3BhKHBmeGRhdGEpOworCQltZW1zZXQocGZ4ZGF0YSwgMCwgc2l6ZW9mKCpwZnhkYXRhKSk7CisJfQogCi0JbWVtc2V0KHBmeGRhdGEsIDAsIHNpemVvZigqcGZ4ZGF0YSkpOwogCS8qIHByZWZpeCBkYXRhICovCiAJaWYgKGZvcm1hdCA+IDEpIHsKIAkJREJGX0RFVl9FVkVOVChEQkZfRVJSLCBiYXNlZGV2LApAQCAtNDc2LDYgKzUyNiw3IEBACiAJCWRlZGF0YS0+bWFzay5wZXJtID0gMHgxOwogCQlkZWRhdGEtPmF0dHJpYnV0ZXMub3BlcmF0aW9uID0gYmFzZXByaXYtPmF0dHJpYi5vcGVyYXRpb247CiAJCWJyZWFrOworCWNhc2UgREFTRF9FQ0tEX0NDV19SRUFEX1RSQUNLOgogCWNhc2UgREFTRF9FQ0tEX0NDV19SRUFEX1RSQUNLX0RBVEE6CiAJCWRlZGF0YS0+bWFzay5wZXJtID0gMHgxOwogCQlkZWRhdGEtPmF0dHJpYnV0ZXMub3BlcmF0aW9uID0gYmFzZXByaXYtPmF0dHJpYi5vcGVyYXRpb247CkBAIC01MDIsNiArNTUzLDExIEBACiAJCWRlZGF0YS0+YXR0cmlidXRlcy5vcGVyYXRpb24gPSBEQVNEX0JZUEFTU19DQUNIRTsKIAkJcmMgPSBjaGVja19YUkNfb25fcHJlZml4KHBmeGRhdGEsIGJhc2VkZXYpOwogCQlicmVhazsKKwljYXNlIERBU0RfRUNLRF9DQ1dfV1JJVEVfRlVMTF9UUkFDSzoKKwkJZGVkYXRhLT5tYXNrLnBlcm0gPSAweDAzOworCQlkZWRhdGEtPmF0dHJpYnV0ZXMub3BlcmF0aW9uID0gYmFzZXByaXYtPmF0dHJpYi5vcGVyYXRpb247CisJCWRlZGF0YS0+YmxrX3NpemUgPSAwOworCQlicmVhazsKIAljYXNlIERBU0RfRUNLRF9DQ1dfV1JJVEVfVFJBQ0tfREFUQToKIAkJZGVkYXRhLT5tYXNrLnBlcm0gPSAweDAyOwogCQlkZWRhdGEtPmF0dHJpYnV0ZXMub3BlcmF0aW9uID0gYmFzZXByaXYtPmF0dHJpYi5vcGVyYXRpb247CkBAIC03NTUsMjYgKzgxMSwyNyBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgc3RydWN0IGRhc2RfY2N3X3JlcSAqZGFzZF9lY2tkX2J1aWxkX3JjZF9scG0oc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UsCi0JCQkJCQkgICAgdm9pZCAqcmNkX2J1ZmZlciwKLQkJCQkJCSAgICBzdHJ1Y3QgY2l3ICpjaXcsIF9fdTggbHBtKQorc3RhdGljIHZvaWQgZGFzZF9lY2tkX2ZpbGxfcmNkX2NxcihzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSwKKwkJCQkgICBzdHJ1Y3QgZGFzZF9jY3dfcmVxICpjcXIsCisJCQkJICAgX191OCAqcmNkX2J1ZmZlciwKKwkJCQkgICBfX3U4IGxwbSkKIHsKLQlzdHJ1Y3QgZGFzZF9jY3dfcmVxICpjcXI7CiAJc3RydWN0IGNjdzEgKmNjdzsKLQotCWNxciA9IGRhc2Rfc21hbGxvY19yZXF1ZXN0KERBU0RfRUNLRF9NQUdJQywgMSAvKiBSQ0QgKi8sIGNpdy0+Y291bnQsCi0JCQkJICAgZGV2aWNlKTsKLQotCWlmIChJU19FUlIoY3FyKSkgewotCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkgICAgICAiQ291bGQgbm90IGFsbG9jYXRlIFJDRCByZXF1ZXN0Iik7Ci0JCXJldHVybiBjcXI7Ci0JfQorCS8qCisJICogYnVmZmVyIGhhcyB0byBzdGFydCB3aXRoIEVCQ0RJQyAiVjEuMCIgdG8gc2hvdworCSAqIHN1cHBvcnQgZm9yIHZpcnR1YWwgZGV2aWNlIFNORVEKKwkgKi8KKwlyY2RfYnVmZmVyWzBdID0gMHhFNTsKKwlyY2RfYnVmZmVyWzFdID0gMHhGMTsKKwlyY2RfYnVmZmVyWzJdID0gMHg0QjsKKwlyY2RfYnVmZmVyWzNdID0gMHhGMDsKIAogCWNjdyA9IGNxci0+Y3BhZGRyOwotCWNjdy0+Y21kX2NvZGUgPSBjaXctPmNtZDsKKwljY3ctPmNtZF9jb2RlID0gREFTRF9FQ0tEX0NDV19SQ0Q7CisJY2N3LT5mbGFncyA9IDA7CiAJY2N3LT5jZGEgPSAoX191MzIpKGFkZHJfdClyY2RfYnVmZmVyOwotCWNjdy0+Y291bnQgPSBjaXctPmNvdW50OworCWNjdy0+Y291bnQgPSBEQVNEX0VDS0RfUkNEX0RBVEFfU0laRTsKKwljcXItPm1hZ2ljID0gREFTRF9FQ0tEX01BR0lDOwogCiAJY3FyLT5zdGFydGRldiA9IGRldmljZTsKIAljcXItPm1lbWRldiA9IGRldmljZTsKQEAgLTc4NCw3ICs4NDEsMzAgQEAKIAljcXItPnJldHJpZXMgPSAyNTY7CiAJY3FyLT5idWlsZGNsayA9IGdldF9jbG9jaygpOwogCWNxci0+c3RhdHVzID0gREFTRF9DUVJfRklMTEVEOwotCXJldHVybiBjcXI7CisJc2V0X2JpdChEQVNEX0NRUl9WRVJJRllfUEFUSCwgJmNxci0+ZmxhZ3MpOworfQorCitzdGF0aWMgaW50IGRhc2RfZWNrZF9yZWFkX2NvbmZfaW1tZWRpYXRlbHkoc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UsCisJCQkJCSAgIHN0cnVjdCBkYXNkX2Njd19yZXEgKmNxciwKKwkJCQkJICAgX191OCAqcmNkX2J1ZmZlciwKKwkJCQkJICAgX191OCBscG0pCit7CisJc3RydWN0IGNpdyAqY2l3OworCWludCByYzsKKwkvKgorCSAqIHNhbml0eSBjaGVjazogc2NhbiBmb3IgUkNEIGNvbW1hbmQgaW4gZXh0ZW5kZWQgU2Vuc2VJRCBkYXRhCisJICogc29tZSBkZXZpY2VzIGRvIG5vdCBzdXBwb3J0IFJDRAorCSAqLworCWNpdyA9IGNjd19kZXZpY2VfZ2V0X2NpdyhkZXZpY2UtPmNkZXYsIENJV19UWVBFX1JDRCk7CisJaWYgKCFjaXcgfHwgY2l3LT5jbWQgIT0gREFTRF9FQ0tEX0NDV19SQ0QpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWRhc2RfZWNrZF9maWxsX3JjZF9jcXIoZGV2aWNlLCBjcXIsIHJjZF9idWZmZXIsIGxwbSk7CisJY2xlYXJfYml0KERBU0RfQ1FSX0ZMQUdTX1VTRV9FUlAsICZjcXItPmZsYWdzKTsKKwlzZXRfYml0KERBU0RfQ1FSX0FMTE9XX1NMT0NLLCAmY3FyLT5mbGFncyk7CisJY3FyLT5yZXRyaWVzID0gNTsKKwlyYyA9IGRhc2Rfc2xlZXBfb25faW1tZWRpYXRseShjcXIpOworCXJldHVybiByYzsKIH0KIAogc3RhdGljIGludCBkYXNkX2Vja2RfcmVhZF9jb25mX2xwbShzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSwKQEAgLTc5NywzMiArODc3LDI5IEBACiAJc3RydWN0IGRhc2RfY2N3X3JlcSAqY3FyOwogCiAJLyoKLQkgKiBzY2FuIGZvciBSQ0QgY29tbWFuZCBpbiBleHRlbmRlZCBTZW5zZUlEIGRhdGEKKwkgKiBzYW5pdHkgY2hlY2s6IHNjYW4gZm9yIFJDRCBjb21tYW5kIGluIGV4dGVuZGVkIFNlbnNlSUQgZGF0YQorCSAqIHNvbWUgZGV2aWNlcyBkbyBub3Qgc3VwcG9ydCBSQ0QKIAkgKi8KIAljaXcgPSBjY3dfZGV2aWNlX2dldF9jaXcoZGV2aWNlLT5jZGV2LCBDSVdfVFlQRV9SQ0QpOwotCWlmICghY2l3IHx8IGNpdy0+Y21kID09IDApIHsKKwlpZiAoIWNpdyB8fCBjaXctPmNtZCAhPSBEQVNEX0VDS0RfQ0NXX1JDRCkgewogCQlyZXQgPSAtRU9QTk9UU1VQUDsKIAkJZ290byBvdXRfZXJyb3I7CiAJfQotCXJjZF9idWYgPSBremFsbG9jKGNpdy0+Y291bnQsIEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKKwlyY2RfYnVmID0ga3phbGxvYyhEQVNEX0VDS0RfUkNEX0RBVEFfU0laRSwgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpOwogCWlmICghcmNkX2J1ZikgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIG91dF9lcnJvcjsKIAl9Ci0KLQkvKgotCSAqIGJ1ZmZlciBoYXMgdG8gc3RhcnQgd2l0aCBFQkNESUMgIlYxLjAiIHRvIHNob3cKLQkgKiBzdXBwb3J0IGZvciB2aXJ0dWFsIGRldmljZSBTTkVRCi0JICovCi0JcmNkX2J1ZlswXSA9IDB4RTU7Ci0JcmNkX2J1ZlsxXSA9IDB4RjE7Ci0JcmNkX2J1ZlsyXSA9IDB4NEI7Ci0JcmNkX2J1ZlszXSA9IDB4RjA7Ci0JY3FyID0gZGFzZF9lY2tkX2J1aWxkX3JjZF9scG0oZGV2aWNlLCByY2RfYnVmLCBjaXcsIGxwbSk7CisJY3FyID0gZGFzZF9zbWFsbG9jX3JlcXVlc3QoREFTRF9FQ0tEX01BR0lDLCAxIC8qIFJDRCAqLywKKwkJCQkgICAwLCAvKiB1c2UgcmNkX2J1ZiBhcyBkYXRhIGFyYSAqLworCQkJCSAgIGRldmljZSk7CiAJaWYgKElTX0VSUihjcXIpKSB7Ci0JCXJldCA9ICBQVFJfRVJSKGNxcik7CisJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKKwkJCSAgICAgICJDb3VsZCBub3QgYWxsb2NhdGUgUkNEIHJlcXVlc3QiKTsKKwkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBvdXRfZXJyb3I7CiAJfQorCWRhc2RfZWNrZF9maWxsX3JjZF9jcXIoZGV2aWNlLCBjcXIsIHJjZF9idWYsIGxwbSk7CiAJcmV0ID0gZGFzZF9zbGVlcF9vbihjcXIpOwogCS8qCiAJICogb24gc3VjY2VzcyB3ZSB1cGRhdGUgdGhlIHVzZXIgaW5wdXQgcGFybXMKQEAgLTgzMSw3ICs5MDgsNyBAQAogCWlmIChyZXQpCiAJCWdvdG8gb3V0X2Vycm9yOwogCi0JKnJjZF9idWZmZXJfc2l6ZSA9IGNpdy0+Y291bnQ7CisJKnJjZF9idWZmZXJfc2l6ZSA9IERBU0RfRUNLRF9SQ0RfREFUQV9TSVpFOwogCSpyY2RfYnVmZmVyID0gcmNkX2J1ZjsKIAlyZXR1cm4gMDsKIG91dF9lcnJvcjoKQEAgLTkwMSwxOCArOTc4LDE4IEBACiAJdm9pZCAqY29uZl9kYXRhOwogCWludCBjb25mX2xlbiwgY29uZl9kYXRhX3NhdmVkOwogCWludCByYzsKLQlfX3U4IGxwbTsKKwlfX3U4IGxwbSwgb3BtOwogCXN0cnVjdCBkYXNkX2Vja2RfcHJpdmF0ZSAqcHJpdmF0ZTsKLQlzdHJ1Y3QgZGFzZF9lY2tkX3BhdGggKnBhdGhfZGF0YTsKKwlzdHJ1Y3QgZGFzZF9wYXRoICpwYXRoX2RhdGE7CiAKIAlwcml2YXRlID0gKHN0cnVjdCBkYXNkX2Vja2RfcHJpdmF0ZSAqKSBkZXZpY2UtPnByaXZhdGU7Ci0JcGF0aF9kYXRhID0gKHN0cnVjdCBkYXNkX2Vja2RfcGF0aCAqKSAmcHJpdmF0ZS0+cGF0aF9kYXRhOwotCXBhdGhfZGF0YS0+b3BtID0gY2N3X2RldmljZV9nZXRfcGF0aF9tYXNrKGRldmljZS0+Y2Rldik7CisJcGF0aF9kYXRhID0gJmRldmljZS0+cGF0aF9kYXRhOworCW9wbSA9IGNjd19kZXZpY2VfZ2V0X3BhdGhfbWFzayhkZXZpY2UtPmNkZXYpOwogCWxwbSA9IDB4ODA7CiAJY29uZl9kYXRhX3NhdmVkID0gMDsKIAkvKiBnZXQgY29uZmlndXJhdGlvbiBkYXRhIHBlciBvcGVyYXRpb25hbCBwYXRoICovCiAJZm9yIChscG0gPSAweDgwOyBscG07IGxwbT4+PSAxKSB7Ci0JCWlmIChscG0gJiBwYXRoX2RhdGEtPm9wbSl7CisJCWlmIChscG0gJiBvcG0pIHsKIAkJCXJjID0gZGFzZF9lY2tkX3JlYWRfY29uZl9scG0oZGV2aWNlLCAmY29uZl9kYXRhLAogCQkJCQkJICAgICAmY29uZl9sZW4sIGxwbSk7CiAJCQlpZiAocmMgJiYgcmMgIT0gLUVPUE5PVFNVUFApIHsJLyogLUVPUE5PVFNVUFAgaXMgb2sgKi8KQEAgLTkyNSw2ICsxMDAyLDggQEAKIAkJCQlEQkZfRVZFTlRfREVWSUQoREJGX1dBUk5JTkcsIGRldmljZS0+Y2RldiwgIiVzIiwKIAkJCQkJCSJObyBjb25maWd1cmF0aW9uIGRhdGEgIgogCQkJCQkJInJldHJpZXZlZCIpOworCQkJCS8qIG5vIGZ1cnRoZXIgYW5hbHlzaXMgcG9zc2libGUgKi8KKwkJCQlwYXRoX2RhdGEtPm9wbSB8PSBscG07CiAJCQkJY29udGludWU7CS8qIG5vIGVycm9yICovCiAJCQl9CiAJCQkvKiBzYXZlIGZpcnN0IHZhbGlkIGNvbmZpZ3VyYXRpb24gZGF0YSAqLwpAQCAtOTQ4LDYgKzEwMjcsNyBAQAogCQkJCXBhdGhfZGF0YS0+cHBtIHw9IGxwbTsKIAkJCQlicmVhazsKIAkJCX0KKwkJCXBhdGhfZGF0YS0+b3BtIHw9IGxwbTsKIAkJCWlmIChjb25mX2RhdGEgIT0gcHJpdmF0ZS0+Y29uZl9kYXRhKQogCQkJCWtmcmVlKGNvbmZfZGF0YSk7CiAJCX0KQEAgLTk1NSw2ICsxMDM1LDE0MCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHZlcmlmeV9mY3hfbWF4X2RhdGEoc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UsIF9fdTggbHBtKQoreworCXN0cnVjdCBkYXNkX2Vja2RfcHJpdmF0ZSAqcHJpdmF0ZTsKKwlpbnQgbWRjOworCXUzMiBmY3hfbWF4X2RhdGE7CisKKwlwcml2YXRlID0gKHN0cnVjdCBkYXNkX2Vja2RfcHJpdmF0ZSAqKSBkZXZpY2UtPnByaXZhdGU7CisJaWYgKHByaXZhdGUtPmZjeF9tYXhfZGF0YSkgeworCQltZGMgPSBjY3dfZGV2aWNlX2dldF9tZGMoZGV2aWNlLT5jZGV2LCBscG0pOworCQlpZiAoKG1kYyA8IDApKSB7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJICJEZXRlY3RpbmcgdGhlIG1heGltdW0gZGF0YSBzaXplIGZvciB6SFBGICIKKwkJCQkgInJlcXVlc3RzIGZhaWxlZCAocmM9JWQpIGZvciBhIG5ldyBwYXRoICV4XG4iLAorCQkJCSBtZGMsIGxwbSk7CisJCQlyZXR1cm4gbWRjOworCQl9CisJCWZjeF9tYXhfZGF0YSA9IG1kYyAqIEZDWF9NQVhfREFUQV9GQUNUT1I7CisJCWlmIChmY3hfbWF4X2RhdGEgPCBwcml2YXRlLT5mY3hfbWF4X2RhdGEpIHsKKwkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkgIlRoZSBtYXhpbXVtIGRhdGEgc2l6ZSBmb3IgekhQRiByZXF1ZXN0cyAldSAiCisJCQkJICJvbiBhIG5ldyBwYXRoICV4IGlzIGJlbG93IHRoZSBhY3RpdmUgbWF4aW11bSAiCisJCQkJICIldVxuIiwgZmN4X21heF9kYXRhLCBscG0sCisJCQkJIHByaXZhdGUtPmZjeF9tYXhfZGF0YSk7CisJCQlyZXR1cm4gLUVBQ0NFUzsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZG9fcGF0aF92ZXJpZmljYXRpb25fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHBhdGhfdmVyaWZpY2F0aW9uX3dvcmtfZGF0YSAqZGF0YTsKKwlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZTsKKwlfX3U4IGxwbSwgb3BtLCBucG0sIHBwbSwgZXBtOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJjOworCisJZGF0YSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcGF0aF92ZXJpZmljYXRpb25fd29ya19kYXRhLCB3b3JrZXIpOworCWRldmljZSA9IGRhdGEtPmRldmljZTsKKworCW9wbSA9IDA7CisJbnBtID0gMDsKKwlwcG0gPSAwOworCWVwbSA9IDA7CisJZm9yIChscG0gPSAweDgwOyBscG07IGxwbSA+Pj0gMSkgeworCQlpZiAobHBtICYgZGF0YS0+dGJ2cG0pIHsKKwkJCW1lbXNldChkYXRhLT5yY2RfYnVmZmVyLCAwLCBzaXplb2YoZGF0YS0+cmNkX2J1ZmZlcikpOworCQkJbWVtc2V0KCZkYXRhLT5jcXIsIDAsIHNpemVvZihkYXRhLT5jcXIpKTsKKwkJCWRhdGEtPmNxci5jcGFkZHIgPSAmZGF0YS0+Y2N3OworCQkJcmMgPSBkYXNkX2Vja2RfcmVhZF9jb25mX2ltbWVkaWF0ZWx5KGRldmljZSwgJmRhdGEtPmNxciwKKwkJCQkJCQkgICAgIGRhdGEtPnJjZF9idWZmZXIsCisJCQkJCQkJICAgICBscG0pOworCQkJaWYgKCFyYykgeworCQkJCXN3aXRjaCAoZGFzZF9lY2tkX3BhdGhfYWNjZXNzKGRhdGEtPnJjZF9idWZmZXIsCisJCQkJCQkgICAgIERBU0RfRUNLRF9SQ0RfREFUQV9TSVpFKSkgeworCQkJCWNhc2UgMHgwMjoKKwkJCQkJbnBtIHw9IGxwbTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAweDAzOgorCQkJCQlwcG0gfD0gbHBtOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJb3BtIHw9IGxwbTsKKwkJCX0gZWxzZSBpZiAocmMgPT0gLUVPUE5PVFNVUFApIHsKKwkJCQlEQkZfRVZFTlRfREVWSUQoREJGX1dBUk5JTkcsIGRldmljZS0+Y2RldiwgIiVzIiwKKwkJCQkgICAgICAgInBhdGggdmVyaWZpY2F0aW9uOiBObyBjb25maWd1cmF0aW9uICIKKwkJCQkgICAgICAgImRhdGEgcmV0cmlldmVkIik7CisJCQkJb3BtIHw9IGxwbTsKKwkJCX0gZWxzZSBpZiAocmMgPT0gLUVBR0FJTikgeworCQkJCURCRl9FVkVOVF9ERVZJRChEQkZfV0FSTklORywgZGV2aWNlLT5jZGV2LCAiJXMiLAorCQkJCQkicGF0aCB2ZXJpZmljYXRpb246IGRldmljZSBpcyBzdG9wcGVkLCIKKwkJCQkJIiB0cnkgYWdhaW4gbGF0ZXIiKTsKKwkJCQllcG0gfD0gbHBtOworCQkJfSBlbHNlIHsKKwkJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJCSAiUmVhZGluZyBkZXZpY2UgZmVhdHVyZSBjb2RlcyBmYWlsZWQgIgorCQkJCQkgIihyYz0lZCkgZm9yIG5ldyBwYXRoICV4XG4iLCByYywgbHBtKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICh2ZXJpZnlfZmN4X21heF9kYXRhKGRldmljZSwgbHBtKSkgeworCQkJCW9wbSAmPSB+bHBtOworCQkJCW5wbSAmPSB+bHBtOworCQkJCXBwbSAmPSB+bHBtOworCQkJfQorCQl9CisJfQorCS8qCisJICogVGhlcmUgaXMgYSBzbWFsbCBjaGFuY2UgdGhhdCBhIHBhdGggaXMgbG9zdCBhZ2FpbiBiZXR3ZWVuCisJICogYWJvdmUgcGF0aCB2ZXJpZmljYXRpb24gYW5kIHRoZSBmb2xsb3dpbmcgbW9kaWZpY2F0aW9uIG9mCisJICogdGhlIGRldmljZSBvcG0gbWFzay4gV2UgY291bGQgYXZvaWQgdGhhdCByYWNlIGhlcmUgYnkgdXNpbmcKKwkgKiB5ZXQgYW5vdGhlciBwYXRoIG1hc2ssIGJ1dCB3ZSByYXRoZXIgZGVhbCB3aXRoIHRoaXMgdW5saWtlbHkKKwkgKiBzaXR1YXRpb24gaW4gZGFzZF9zdGFydF9JTy4KKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZShnZXRfY2N3ZGV2X2xvY2soZGV2aWNlLT5jZGV2KSwgZmxhZ3MpOworCWlmICghZGV2aWNlLT5wYXRoX2RhdGEub3BtICYmIG9wbSkgeworCQlkZXZpY2UtPnBhdGhfZGF0YS5vcG0gPSBvcG07CisJCWRhc2RfZ2VuZXJpY19wYXRoX29wZXJhdGlvbmFsKGRldmljZSk7CisJfSBlbHNlCisJCWRldmljZS0+cGF0aF9kYXRhLm9wbSB8PSBvcG07CisJZGV2aWNlLT5wYXRoX2RhdGEubnBtIHw9IG5wbTsKKwlkZXZpY2UtPnBhdGhfZGF0YS5wcG0gfD0gcHBtOworCWRldmljZS0+cGF0aF9kYXRhLnRidnBtIHw9IGVwbTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKGdldF9jY3dkZXZfbG9jayhkZXZpY2UtPmNkZXYpLCBmbGFncyk7CisKKwlkYXNkX3B1dF9kZXZpY2UoZGV2aWNlKTsKKwlpZiAoZGF0YS0+aXNnbG9iYWwpCisJCW11dGV4X3VubG9jaygmZGFzZF9wYXRoX3ZlcmlmaWNhdGlvbl9tdXRleCk7CisJZWxzZQorCQlrZnJlZShkYXRhKTsKK30KKworc3RhdGljIGludCBkYXNkX2Vja2RfdmVyaWZ5X3BhdGgoc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UsIF9fdTggbHBtKQoreworCXN0cnVjdCBwYXRoX3ZlcmlmaWNhdGlvbl93b3JrX2RhdGEgKmRhdGE7CisKKwlkYXRhID0ga21hbGxvYyhzaXplb2YoKmRhdGEpLCBHRlBfQVRPTUlDIHwgR0ZQX0RNQSk7CisJaWYgKCFkYXRhKSB7CisJCWlmIChtdXRleF90cnlsb2NrKCZkYXNkX3BhdGhfdmVyaWZpY2F0aW9uX211dGV4KSkgeworCQkJZGF0YSA9IHBhdGhfdmVyaWZpY2F0aW9uX3dvcmtlcjsKKwkJCWRhdGEtPmlzZ2xvYmFsID0gMTsKKwkJfSBlbHNlCisJCQlyZXR1cm4gLUVOT01FTTsKKwl9IGVsc2UgeworCQltZW1zZXQoZGF0YSwgMCwgc2l6ZW9mKCpkYXRhKSk7CisJCWRhdGEtPmlzZ2xvYmFsID0gMDsKKwl9CisJSU5JVF9XT1JLKCZkYXRhLT53b3JrZXIsIGRvX3BhdGhfdmVyaWZpY2F0aW9uX3dvcmspOworCWRhc2RfZ2V0X2RldmljZShkZXZpY2UpOworCWRhdGEtPmRldmljZSA9IGRldmljZTsKKwlkYXRhLT50YnZwbSA9IGxwbTsKKwlzY2hlZHVsZV93b3JrKCZkYXRhLT53b3JrZXIpOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGRhc2RfZWNrZF9yZWFkX2ZlYXR1cmVzKHN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlKQogewogCXN0cnVjdCBkYXNkX3BzZl9wcnNzZF9kYXRhICpwcnNzZHA7CkBAIC0xMTA1LDYgKzEzMTksMzcgQEAKIAkJCSJyZXR1cm5lZCByYz0lZCIsIHByaXZhdGUtPnVpZC5zc2lkLCByYyk7CiB9CiAKK3N0YXRpYyB1MzIgZ2V0X2ZjeF9tYXhfZGF0YShzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSkKK3sKKyNpZiBkZWZpbmVkKENPTkZJR182NEJJVCkKKwlpbnQgdHBtLCBtZGM7CisJaW50IGZjeF9pbl9jc3MsIGZjeF9pbl9nbmVxLCBmY3hfaW5fZmVhdHVyZXM7CisJc3RydWN0IGRhc2RfZWNrZF9wcml2YXRlICpwcml2YXRlOworCisJaWYgKGRhc2Rfbm9mY3gpCisJCXJldHVybiAwOworCS8qIGlzIHRyYW5zcG9ydCBtb2RlIHN1cHBvcnRlZD8gKi8KKwlwcml2YXRlID0gKHN0cnVjdCBkYXNkX2Vja2RfcHJpdmF0ZSAqKSBkZXZpY2UtPnByaXZhdGU7CisJZmN4X2luX2NzcyA9IGNzc19nZW5lcmFsX2NoYXJhY3RlcmlzdGljcy5mY3g7CisJZmN4X2luX2duZXEgPSBwcml2YXRlLT5nbmVxLT5yZXNlcnZlZDJbN10gJiAweDA0OworCWZjeF9pbl9mZWF0dXJlcyA9IHByaXZhdGUtPmZlYXR1cmVzLmZlYXR1cmVbNDBdICYgMHg4MDsKKwl0cG0gPSBmY3hfaW5fY3NzICYmIGZjeF9pbl9nbmVxICYmIGZjeF9pbl9mZWF0dXJlczsKKworCWlmICghdHBtKQorCQlyZXR1cm4gMDsKKworCW1kYyA9IGNjd19kZXZpY2VfZ2V0X21kYyhkZXZpY2UtPmNkZXYsIDApOworCWlmIChtZGMgPCAwKSB7CisJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwgIkRldGVjdGluZyB0aGUgbWF4aW11bSBzdXBwb3J0ZWQiCisJCQkgIiBkYXRhIHNpemUgZm9yIHpIUEYgcmVxdWVzdHMgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlCisJCXJldHVybiBtZGMgKiBGQ1hfTUFYX0RBVEFfRkFDVE9SOworI2Vsc2UKKwlyZXR1cm4gMDsKKyNlbmRpZgorfQorCiAvKgogICogQ2hlY2sgZGV2aWNlIGNoYXJhY3RlcmlzdGljcy4KICAqIElmIHRoZSBkZXZpY2UgaXMgYWNjZXNzaWJsZSB1c2luZyBFQ0tEIGRpc2NpcGxpbmUsIHRoZSBkZXZpY2UgaXMgZW5hYmxlZC4KQEAgLTEyMjMsNiArMTQ2OCw4IEBACiAJZWxzZQogCQlwcml2YXRlLT5yZWFsX2N5bCA9IHByaXZhdGUtPnJkY19kYXRhLm5vX2N5bDsKIAorCXByaXZhdGUtPmZjeF9tYXhfZGF0YSA9IGdldF9mY3hfbWF4X2RhdGEoZGV2aWNlKTsKKwogCXJlYWRvbmx5ID0gZGFzZF9kZXZpY2VfaXNfcm8oZGV2aWNlKTsKIAlpZiAocmVhZG9ubHkpCiAJCXNldF9iaXQoREFTRF9GTEFHX0RFVklDRV9STywgJmRldmljZS0+ZmxhZ3MpOwpAQCAtMTQwNCw2ICsxNjUxLDEzIEBACiAJCWRhc2Rfc2ZyZWVfcmVxdWVzdChpbml0X2NxciwgZGV2aWNlKTsKIAl9CiAKKwlpZiAoZGV2aWNlLT5mZWF0dXJlcyAmIERBU0RfRkVBVFVSRV9VU0VSQVcpIHsKKwkJYmxvY2stPmJwX2Jsb2NrID0gREFTRF9SQVdfQkxPQ0tTSVpFOworCQlibGtfcGVyX3RyayA9IERBU0RfUkFXX0JMT0NLX1BFUl9UUkFDSzsKKwkJYmxvY2stPnMyYl9zaGlmdCA9IDM7CisJCWdvdG8gcmF3OworCX0KKwogCWlmIChzdGF0dXMgPT0gSU5JVF9DUVJfVU5GT1JNQVRURUQpIHsKIAkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LCAiVGhlIERBU0QgaXMgbm90IGZvcm1hdHRlZFxuIik7CiAJCXJldHVybiAtRU1FRElVTVRZUEU7CkBAIC0xNDQxLDYgKzE2OTUsNyBAQAogCQkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkJCSAiVHJhY2sgMCBoYXMgbm8gcmVjb3JkcyBmb2xsb3dpbmcgdGhlIFZUT0NcbiIpOwogCX0KKwogCWlmIChjb3VudF9hcmVhICE9IE5VTEwgJiYgY291bnRfYXJlYS0+a2wgPT0gMCkgewogCQkvKiB3ZSBmb3VuZCBub3R0aGluZyB2aW9sYXRpbmcgb3VyIGRpc2sgbGF5b3V0ICovCiAJCWlmIChkYXNkX2NoZWNrX2Jsb2Nrc2l6ZShjb3VudF9hcmVhLT5kbCkgPT0gMCkKQEAgLTE0NTYsNiArMTcxMSw4IEBACiAJCWJsb2NrLT5zMmJfc2hpZnQrKzsKIAogCWJsa19wZXJfdHJrID0gcmVjc19wZXJfdHJhY2soJnByaXZhdGUtPnJkY19kYXRhLCAwLCBibG9jay0+YnBfYmxvY2spOworCityYXc6CiAJYmxvY2stPmJsb2NrcyA9IChwcml2YXRlLT5yZWFsX2N5bCAqCiAJCQkgIHByaXZhdGUtPnJkY19kYXRhLnRya19wZXJfY3lsICoKIAkJCSAgYmxrX3Blcl90cmspOwpAQCAtMTcxNiw2ICsxOTczLDcgQEAKIAlpZiAoY3FyLT5ibG9jayAmJiAoY3FyLT5zdGFydGRldiAhPSBjcXItPmJsb2NrLT5iYXNlKSkgewogCQlkYXNkX2Vja2RfcmVzZXRfY2N3X3RvX2Jhc2VfaW8oY3FyKTsKIAkJY3FyLT5zdGFydGRldiA9IGNxci0+YmxvY2stPmJhc2U7CisJCWNxci0+bHBtID0gY3FyLT5ibG9jay0+YmFzZS0+cGF0aF9kYXRhLm9wbTsKIAl9CiB9OwogCkBAIC0xNzQ0LDkgKzIwMDIsOSBAQAogCXJldHVybiBkYXNkX2RlZmF1bHRfZXJwX3Bvc3RhY3Rpb247CiB9CiAKLQotc3RhdGljIHZvaWQgZGFzZF9lY2tkX2hhbmRsZV91bnNvbGljaXRlZF9pbnRlcnJ1cHQoc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UsCi0JCQkJCQkgICBzdHJ1Y3QgaXJiICppcmIpCitzdGF0aWMgdm9pZCBkYXNkX2Vja2RfY2hlY2tfZm9yX2RldmljZV9jaGFuZ2Uoc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UsCisJCQkJCSAgICAgIHN0cnVjdCBkYXNkX2Njd19yZXEgKmNxciwKKwkJCQkJICAgICAgc3RydWN0IGlyYiAqaXJiKQogewogCWNoYXIgbWFzazsKIAljaGFyICpzZW5zZSA9IE5VTEw7CkBAIC0xNzcwLDQwICsyMDI4LDQxIEBACiAJCQkvKiBzY2hlZHVsZSB3b3JrZXIgdG8gcmVsb2FkIGRldmljZSAqLwogCQkJZGFzZF9yZWxvYWRfZGV2aWNlKGRldmljZSk7CiAJCX0KLQogCQlkYXNkX2dlbmVyaWNfaGFuZGxlX3N0YXRlX2NoYW5nZShkZXZpY2UpOwogCQlyZXR1cm47CiAJfQogCi0JLyogc3VtbWFyeSB1bml0IGNoZWNrICovCiAJc2Vuc2UgPSBkYXNkX2dldF9zZW5zZShpcmIpOwotCWlmIChzZW5zZSAmJiAoc2Vuc2VbN10gPT0gMHgwRCkgJiYKKwlpZiAoIXNlbnNlKQorCQlyZXR1cm47CisKKwkvKiBzdW1tYXJ5IHVuaXQgY2hlY2sgKi8KKwlpZiAoKHNlbnNlWzddID09IDB4MEQpICYmCiAJICAgIChzY3N3X2RzdGF0KCZpcmItPnNjc3cpICYgREVWX1NUQVRfVU5JVF9DSEVDSykpIHsKIAkJZGFzZF9hbGlhc19oYW5kbGVfc3VtbWFyeV91bml0X2NoZWNrKGRldmljZSwgaXJiKTsKIAkJcmV0dXJuOwogCX0KIAogCS8qIHNlcnZpY2UgaW5mb3JtYXRpb24gbWVzc2FnZSBTSU0gKi8KLQlpZiAoc2Vuc2UgJiYgIShzZW5zZVsyN10gJiBEQVNEX1NFTlNFX0JJVF8wKSAmJgorCWlmICghY3FyICYmICEoc2Vuc2VbMjddICYgREFTRF9TRU5TRV9CSVRfMCkgJiYKIAkgICAgKChzZW5zZVs2XSAmIERBU0RfU0lNX1NFTlNFKSA9PSBEQVNEX1NJTV9TRU5TRSkpIHsKIAkJZGFzZF8zOTkwX2VycF9oYW5kbGVfc2ltKGRldmljZSwgc2Vuc2UpOwotCQlkYXNkX3NjaGVkdWxlX2RldmljZV9iaChkZXZpY2UpOwogCQlyZXR1cm47CiAJfQogCi0JaWYgKChzY3N3X2NjKCZpcmItPnNjc3cpID09IDEpICYmICFzZW5zZSAmJgotCSAgICAoc2Nzd19mY3RsKCZpcmItPnNjc3cpID09IFNDU1dfRkNUTF9TVEFSVF9GVU5DKSAmJgotCSAgICAoc2Nzd19hY3RsKCZpcmItPnNjc3cpID09IFNDU1dfQUNUTF9TVEFSVF9QRU5EKSAmJgotCSAgICAoc2Nzd19zdGN0bCgmaXJiLT5zY3N3KSA9PSBTQ1NXX1NUQ1RMX1NUQVRVU19QRU5EKSkgewotCQkvKiBmYWtlIGlyYiBkbyBub3RoaW5nLCB0aGV5IGFyZSBoYW5kbGVkIGVsc2V3aGVyZSAqLwotCQlkYXNkX3NjaGVkdWxlX2RldmljZV9iaChkZXZpY2UpOwotCQlyZXR1cm47CisJLyogbG9zcyBvZiBkZXZpY2UgcmVzZXJ2YXRpb24gaXMgaGFuZGxlZCB2aWEgYmFzZSBkZXZpY2VzIG9ubHkKKwkgKiBhcyBhbGlhcyBkZXZpY2VzIG1heSBiZSB1c2VkIHdpdGggc2V2ZXJhbCBiYXNlcworCSAqLworCWlmIChkZXZpY2UtPmJsb2NrICYmIChzZW5zZVs3XSA9PSAweDNGKSAmJgorCSAgICAoc2Nzd19kc3RhdCgmaXJiLT5zY3N3KSAmIERFVl9TVEFUX1VOSVRfQ0hFQ0spICYmCisJICAgIHRlc3RfYml0KERBU0RfRkxBR19JU19SRVNFUlZFRCwgJmRldmljZS0+ZmxhZ3MpKSB7CisJCWlmIChkZXZpY2UtPmZlYXR1cmVzICYgREFTRF9GRUFUVVJFX0ZBSUxPTlNMQ0spCisJCQlzZXRfYml0KERBU0RfRkxBR19MT0NLX1NUT0xFTiwgJmRldmljZS0+ZmxhZ3MpOworCQljbGVhcl9iaXQoREFTRF9GTEFHX0lTX1JFU0VSVkVELCAmZGV2aWNlLT5mbGFncyk7CisJCWRldl9lcnIoJmRldmljZS0+Y2Rldi0+ZGV2LAorCQkJIlRoZSBkZXZpY2UgcmVzZXJ2YXRpb24gd2FzIGxvc3RcbiIpOwogCX0KLQotCWRhc2Rfc2NoZWR1bGVfZGV2aWNlX2JoKGRldmljZSk7Ci0JcmV0dXJuOwotfTsKLQorfQogCiBzdGF0aWMgc3RydWN0IGRhc2RfY2N3X3JlcSAqZGFzZF9lY2tkX2J1aWxkX2NwX2NtZF9zaW5nbGUoCiAJCQkJCSAgICAgICBzdHJ1Y3QgZGFzZF9kZXZpY2UgKnN0YXJ0ZGV2LApAQCAtMTk4NCw3ICsyMjQzLDcgQEAKIAljcXItPm1lbWRldiA9IHN0YXJ0ZGV2OwogCWNxci0+YmxvY2sgPSBibG9jazsKIAljcXItPmV4cGlyZXMgPSBzdGFydGRldi0+ZGVmYXVsdF9leHBpcmVzICogSFo7CS8qIGRlZmF1bHQgNSBtaW51dGVzICovCi0JY3FyLT5scG0gPSBwcml2YXRlLT5wYXRoX2RhdGEucHBtOworCWNxci0+bHBtID0gc3RhcnRkZXYtPnBhdGhfZGF0YS5wcG07CiAJY3FyLT5yZXRyaWVzID0gMjU2OwogCWNxci0+YnVpbGRjbGsgPSBnZXRfY2xvY2soKTsKIAljcXItPnN0YXR1cyA9IERBU0RfQ1FSX0ZJTExFRDsKQEAgLTIxNjEsNyArMjQyMCw3IEBACiAJY3FyLT5tZW1kZXYgPSBzdGFydGRldjsKIAljcXItPmJsb2NrID0gYmxvY2s7CiAJY3FyLT5leHBpcmVzID0gc3RhcnRkZXYtPmRlZmF1bHRfZXhwaXJlcyAqIEhaOwkvKiBkZWZhdWx0IDUgbWludXRlcyAqLwotCWNxci0+bHBtID0gcHJpdmF0ZS0+cGF0aF9kYXRhLnBwbTsKKwljcXItPmxwbSA9IHN0YXJ0ZGV2LT5wYXRoX2RhdGEucHBtOwogCWNxci0+cmV0cmllcyA9IDI1NjsKIAljcXItPmJ1aWxkY2xrID0gZ2V0X2Nsb2NrKCk7CiAJY3FyLT5zdGF0dXMgPSBEQVNEX0NRUl9GSUxMRUQ7CkBAIC0yMzI2LDYgKzI1ODUsMTIgQEAKIAlzdHJ1Y3QgdGlkYXcgKmxhc3RfdGlkYXcgPSBOVUxMOwogCWludCBpdGN3X29wOwogCXNpemVfdCBpdGN3X3NpemU7CisJdTggdGlkYXdfZmxhZ3M7CisJdW5zaWduZWQgaW50IHNlZ19sZW4sIHBhcnRfbGVuLCBsZW5fdG9fdHJhY2tfZW5kOworCXVuc2lnbmVkIGNoYXIgbmV3X3RyYWNrOworCXNlY3Rvcl90IHJlY2lkLCB0cmtpZDsKKwl1bnNpZ25lZCBpbnQgb2ZmczsKKwl1bnNpZ25lZCBpbnQgY291bnQsIGNvdW50X3RvX3Rya19lbmQ7CiAKIAliYXNlZGV2ID0gYmxvY2stPmJhc2U7CiAJcHJpdmF0ZSA9IChzdHJ1Y3QgZGFzZF9lY2tkX3ByaXZhdGUgKikgYmFzZWRldi0+cHJpdmF0ZTsKQEAgLTIzNDEsMTIgKzI2MDYsMTYgQEAKIAkvKiB0cmFja2Jhc2VkIEkvTyBuZWVkcyBhZGRyZXNzIGFsbCBtZW1vcnkgdmlhIFRJREFXcywKIAkgKiBub3QganVzdCBmb3IgNjQgYml0IGFkZHJlc3Nlcy4gVGhpcyBhbGxvd3MgdXMgdG8gbWFwCiAJICogZWFjaCBzZWdtZW50IGRpcmVjdGx5IHRvIG9uZSB0aWRhdy4KKwkgKiBJbiB0aGUgY2FzZSBvZiB3cml0ZSByZXF1ZXN0cywgYWRkaXRpb25hbCB0aWRhd3MgbWF5CisJICogYmUgbmVlZGVkIHdoZW4gYSBzZWdtZW50IGNyb3NzZXMgYSB0cmFjayBib3VuZGFyeS4KIAkgKi8KIAl0cmtjb3VudCA9IGxhc3RfdHJrIC0gZmlyc3RfdHJrICsgMTsKIAljdGlkYXcgPSAwOwogCXJxX2Zvcl9lYWNoX3NlZ21lbnQoYnYsIHJlcSwgaXRlcikgewogCQkrK2N0aWRhdzsKIAl9CisJaWYgKHJxX2RhdGFfZGlyKHJlcSkgPT0gV1JJVEUpCisJCWN0aWRhdyArPSAobGFzdF90cmsgLSBmaXJzdF90cmspOwogCiAJLyogQWxsb2NhdGUgdGhlIGNjdyByZXF1ZXN0LiAqLwogCWl0Y3dfc2l6ZSA9IGl0Y3dfY2FsY19zaXplKDAsIGN0aWRhdywgMCk7CkBAIC0yMzU0LDE1ICsyNjIzLDYgQEAKIAlpZiAoSVNfRVJSKGNxcikpCiAJCXJldHVybiBjcXI7CiAKLQljcXItPmNwbW9kZSA9IDE7Ci0JY3FyLT5zdGFydGRldiA9IHN0YXJ0ZGV2OwotCWNxci0+bWVtZGV2ID0gc3RhcnRkZXY7Ci0JY3FyLT5ibG9jayA9IGJsb2NrOwotCWNxci0+ZXhwaXJlcyA9IDEwMCpIWjsKLQljcXItPmJ1aWxkY2xrID0gZ2V0X2Nsb2NrKCk7Ci0JY3FyLT5zdGF0dXMgPSBEQVNEX0NRUl9GSUxMRUQ7Ci0JY3FyLT5yZXRyaWVzID0gMTA7Ci0KIAkvKiB0cmFuc2ZlciBsZW5ndGggZmFjdG9yOiBob3cgbWFueSBieXRlcyB0byByZWFkIGZyb20gdGhlIGxhc3QgdHJhY2sgKi8KIAlpZiAoZmlyc3RfdHJrID09IGxhc3RfdHJrKQogCQl0bGYgPSBsYXN0X29mZnMgLSBmaXJzdF9vZmZzICsgMTsKQEAgLTIzNzEsOCArMjYzMSwxMSBAQAogCXRsZiAqPSBibGtzaXplOwogCiAJaXRjdyA9IGl0Y3dfaW5pdChjcXItPmRhdGEsIGl0Y3dfc2l6ZSwgaXRjd19vcCwgMCwgY3RpZGF3LCAwKTsKKwlpZiAoSVNfRVJSKGl0Y3cpKSB7CisJCWRhc2Rfc2ZyZWVfcmVxdWVzdChjcXIsIHN0YXJ0ZGV2KTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJfQogCWNxci0+Y3BhZGRyID0gaXRjd19nZXRfdGN3KGl0Y3cpOwotCiAJaWYgKHByZXBhcmVfaXRjdyhpdGN3LCBmaXJzdF90cmssIGxhc3RfdHJrLAogCQkJIGNtZCwgYmFzZWRldiwgc3RhcnRkZXYsCiAJCQkgZmlyc3Rfb2ZmcyArIDEsCkBAIC0yMzg1LDMxICsyNjQ4LDY5IEBACiAJCWRhc2Rfc2ZyZWVfcmVxdWVzdChjcXIsIHN0YXJ0ZGV2KTsKIAkJcmV0dXJuIEVSUl9QVFIoLUVBR0FJTik7CiAJfQotCiAJLyoKIAkgKiBBIHRpZGF3IGNhbiBhZGRyZXNzIDRrIG9mIG1lbW9yeSwgYnV0IG11c3Qgbm90IGNyb3NzIHBhZ2UgYm91bmRhcmllcwogCSAqIFdlIGNhbiBsZXQgdGhlIGJsb2NrIGxheWVyIGhhbmRsZSB0aGlzIGJ5IHNldHRpbmcKIAkgKiBibGtfcXVldWVfc2VnbWVudF9ib3VuZGFyeSB0byBwYWdlIGJvdW5kYXJpZXMgYW5kCiAJICogYmxrX21heF9zZWdtZW50X3NpemUgdG8gcGFnZSBzaXplIHdoZW4gc2V0dGluZyB1cCB0aGUgcmVxdWVzdCBxdWV1ZS4KKwkgKiBGb3Igd3JpdGUgcmVxdWVzdHMsIGEgVElEQVcgbXVzdCBub3QgY3Jvc3MgdHJhY2sgYm91bmRhcmllcywgYmVjYXVzZQorCSAqIHdlIGhhdmUgdG8gc2V0IHRoZSBDQkMgZmxhZyBvbiB0aGUgbGFzdCB0aWRhdyBmb3IgZWFjaCB0cmFjay4KIAkgKi8KLQlycV9mb3JfZWFjaF9zZWdtZW50KGJ2LCByZXEsIGl0ZXIpIHsKLQkJZHN0ID0gcGFnZV9hZGRyZXNzKGJ2LT5idl9wYWdlKSArIGJ2LT5idl9vZmZzZXQ7Ci0JCWxhc3RfdGlkYXcgPSBpdGN3X2FkZF90aWRhdyhpdGN3LCAweDAwLCBkc3QsIGJ2LT5idl9sZW4pOwotCQlpZiAoSVNfRVJSKGxhc3RfdGlkYXcpKQotCQkJcmV0dXJuIChzdHJ1Y3QgZGFzZF9jY3dfcmVxICopbGFzdF90aWRhdzsKKwlpZiAocnFfZGF0YV9kaXIocmVxKSA9PSBXUklURSkgeworCQluZXdfdHJhY2sgPSAxOworCQlyZWNpZCA9IGZpcnN0X3JlYzsKKwkJcnFfZm9yX2VhY2hfc2VnbWVudChidiwgcmVxLCBpdGVyKSB7CisJCQlkc3QgPSBwYWdlX2FkZHJlc3MoYnYtPmJ2X3BhZ2UpICsgYnYtPmJ2X29mZnNldDsKKwkJCXNlZ19sZW4gPSBidi0+YnZfbGVuOworCQkJd2hpbGUgKHNlZ19sZW4pIHsKKwkJCQlpZiAobmV3X3RyYWNrKSB7CisJCQkJCXRya2lkID0gcmVjaWQ7CisJCQkJCW9mZnMgPSBzZWN0b3JfZGl2KHRya2lkLCBibGtfcGVyX3Ryayk7CisJCQkJCWNvdW50X3RvX3Rya19lbmQgPSBibGtfcGVyX3RyayAtIG9mZnM7CisJCQkJCWNvdW50ID0gbWluKChsYXN0X3JlYyAtIHJlY2lkICsgMSksCisJCQkJCQkgICAgKHNlY3Rvcl90KWNvdW50X3RvX3Rya19lbmQpOworCQkJCQlsZW5fdG9fdHJhY2tfZW5kID0gY291bnQgKiBibGtzaXplOworCQkJCQlyZWNpZCArPSBjb3VudDsKKwkJCQkJbmV3X3RyYWNrID0gMDsKKwkJCQl9CisJCQkJcGFydF9sZW4gPSBtaW4oc2VnX2xlbiwgbGVuX3RvX3RyYWNrX2VuZCk7CisJCQkJc2VnX2xlbiAtPSBwYXJ0X2xlbjsKKwkJCQlsZW5fdG9fdHJhY2tfZW5kIC09IHBhcnRfbGVuOworCQkJCS8qIFdlIG5lZWQgdG8gZW5kIHRoZSB0aWRhdyBhdCB0cmFjayBlbmQgKi8KKwkJCQlpZiAoIWxlbl90b190cmFja19lbmQpIHsKKwkJCQkJbmV3X3RyYWNrID0gMTsKKwkJCQkJdGlkYXdfZmxhZ3MgPSBUSURBV19GTEFHU19JTlNFUlRfQ0JDOworCQkJCX0gZWxzZQorCQkJCQl0aWRhd19mbGFncyA9IDA7CisJCQkJbGFzdF90aWRhdyA9IGl0Y3dfYWRkX3RpZGF3KGl0Y3csIHRpZGF3X2ZsYWdzLAorCQkJCQkJCSAgICBkc3QsIHBhcnRfbGVuKTsKKwkJCQlpZiAoSVNfRVJSKGxhc3RfdGlkYXcpKQorCQkJCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKwkJCQlkc3QgKz0gcGFydF9sZW47CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQlycV9mb3JfZWFjaF9zZWdtZW50KGJ2LCByZXEsIGl0ZXIpIHsKKwkJCWRzdCA9IHBhZ2VfYWRkcmVzcyhidi0+YnZfcGFnZSkgKyBidi0+YnZfb2Zmc2V0OworCQkJbGFzdF90aWRhdyA9IGl0Y3dfYWRkX3RpZGF3KGl0Y3csIDB4MDAsCisJCQkJCQkgICAgZHN0LCBidi0+YnZfbGVuKTsKKwkJCWlmIChJU19FUlIobGFzdF90aWRhdykpCisJCQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJCX0KIAl9Ci0KLQlsYXN0X3RpZGF3LT5mbGFncyB8PSAweDgwOworCWxhc3RfdGlkYXctPmZsYWdzIHw9IFRJREFXX0ZMQUdTX0xBU1Q7CisJbGFzdF90aWRhdy0+ZmxhZ3MgJj0gflRJREFXX0ZMQUdTX0lOU0VSVF9DQkM7CiAJaXRjd19maW5hbGl6ZShpdGN3KTsKIAogCWlmIChibGtfbm9yZXRyeV9yZXF1ZXN0KHJlcSkgfHwKIAkgICAgYmxvY2stPmJhc2UtPmZlYXR1cmVzICYgREFTRF9GRUFUVVJFX0ZBSUxGQVNUKQogCQlzZXRfYml0KERBU0RfQ1FSX0ZMQUdTX0ZBSUxGQVNULCAmY3FyLT5mbGFncyk7CisJY3FyLT5jcG1vZGUgPSAxOwogCWNxci0+c3RhcnRkZXYgPSBzdGFydGRldjsKIAljcXItPm1lbWRldiA9IHN0YXJ0ZGV2OwogCWNxci0+YmxvY2sgPSBibG9jazsKIAljcXItPmV4cGlyZXMgPSBzdGFydGRldi0+ZGVmYXVsdF9leHBpcmVzICogSFo7CS8qIGRlZmF1bHQgNSBtaW51dGVzICovCi0JY3FyLT5scG0gPSBwcml2YXRlLT5wYXRoX2RhdGEucHBtOworCWNxci0+bHBtID0gc3RhcnRkZXYtPnBhdGhfZGF0YS5wcG07CiAJY3FyLT5yZXRyaWVzID0gMjU2OwogCWNxci0+YnVpbGRjbGsgPSBnZXRfY2xvY2soKTsKIAljcXItPnN0YXR1cyA9IERBU0RfQ1FSX0ZJTExFRDsKQEAgLTI0MjAsMTEgKzI3MjEsOSBAQAogCQkJCQkgICAgICAgc3RydWN0IGRhc2RfYmxvY2sgKmJsb2NrLAogCQkJCQkgICAgICAgc3RydWN0IHJlcXVlc3QgKnJlcSkKIHsKLQlpbnQgdHBtLCBjbWRydGQsIGNtZHd0ZDsKKwlpbnQgY21kcnRkLCBjbWR3dGQ7CiAJaW50IHVzZV9wcmVmaXg7Ci0jaWYgZGVmaW5lZChDT05GSUdfNjRCSVQpCi0JaW50IGZjeF9pbl9jc3MsIGZjeF9pbl9nbmVxLCBmY3hfaW5fZmVhdHVyZXM7Ci0jZW5kaWYKKwlpbnQgZmN4X211bHRpdHJhY2s7CiAJc3RydWN0IGRhc2RfZWNrZF9wcml2YXRlICpwcml2YXRlOwogCXN0cnVjdCBkYXNkX2RldmljZSAqYmFzZWRldjsKIAlzZWN0b3JfdCBmaXJzdF9yZWMsIGxhc3RfcmVjOwpAQCAtMjQzMiw2ICsyNzMxLDcgQEAKIAl1bnNpZ25lZCBpbnQgZmlyc3Rfb2ZmcywgbGFzdF9vZmZzOwogCXVuc2lnbmVkIGludCBibGtfcGVyX3RyaywgYmxrc2l6ZTsKIAlpbnQgY2Rsc3BlY2lhbDsKKwl1bnNpZ25lZCBpbnQgZGF0YV9zaXplOwogCXN0cnVjdCBkYXNkX2Njd19yZXEgKmNxcjsKIAogCWJhc2VkZXYgPSBibG9jay0+YmFzZTsKQEAgLTI0NTAsMTUgKzI3NTAsMTEgQEAKIAlsYXN0X29mZnMgPSBzZWN0b3JfZGl2KGxhc3RfdHJrLCBibGtfcGVyX3Ryayk7CiAJY2Rsc3BlY2lhbCA9IChwcml2YXRlLT51c2VzX2NkbCAmJiBmaXJzdF9yZWMgPCAyKmJsa19wZXJfdHJrKTsKIAotCS8qIGlzIHRyYW5zcG9ydCBtb2RlIHN1cHBvcnRlZD8gKi8KLSNpZiBkZWZpbmVkKENPTkZJR182NEJJVCkKLQlmY3hfaW5fY3NzID0gY3NzX2dlbmVyYWxfY2hhcmFjdGVyaXN0aWNzLmZjeDsKLQlmY3hfaW5fZ25lcSA9IHByaXZhdGUtPmduZXEtPnJlc2VydmVkMls3XSAmIDB4MDQ7Ci0JZmN4X2luX2ZlYXR1cmVzID0gcHJpdmF0ZS0+ZmVhdHVyZXMuZmVhdHVyZVs0MF0gJiAweDgwOwotCXRwbSA9IGZjeF9pbl9jc3MgJiYgZmN4X2luX2duZXEgJiYgZmN4X2luX2ZlYXR1cmVzOwotI2Vsc2UKLQl0cG0gPSAwOwotI2VuZGlmCisJZmN4X211bHRpdHJhY2sgPSBwcml2YXRlLT5mZWF0dXJlcy5mZWF0dXJlWzQwXSAmIDB4MjA7CisJZGF0YV9zaXplID0gYmxrX3JxX2J5dGVzKHJlcSk7CisJLyogdHBtIHdyaXRlIHJlcXVlc3QgYWRkIENCQyBkYXRhIG9uIGVhY2ggdHJhY2sgYm91bmRhcnkgKi8KKwlpZiAocnFfZGF0YV9kaXIocmVxKSA9PSBXUklURSkKKwkJZGF0YV9zaXplICs9IChsYXN0X3RyayAtIGZpcnN0X3RyaykgKiA0OwogCiAJLyogaXMgcmVhZCB0cmFjayBkYXRhIGFuZCB3cml0ZSB0cmFjayBkYXRhIGluIGNvbW1hbmQgbW9kZSBzdXBwb3J0ZWQ/ICovCiAJY21kcnRkID0gcHJpdmF0ZS0+ZmVhdHVyZXMuZmVhdHVyZVs5XSAmIDB4MjA7CkBAIC0yNDY4LDEzICsyNzY0LDE1IEBACiAJY3FyID0gTlVMTDsKIAlpZiAoY2Rsc3BlY2lhbCB8fCBkYXNkX3BhZ2VfY2FjaGUpIHsKIAkJLyogZG8gbm90aGluZywganVzdCBmYWxsIHRocm91Z2ggdG8gdGhlIGNtZCBtb2RlIHNpbmdsZSBjYXNlICovCi0JfSBlbHNlIGlmICghZGFzZF9ub2ZjeCAmJiB0cG0gJiYgKGZpcnN0X3RyayA9PSBsYXN0X3RyaykpIHsKKwl9IGVsc2UgaWYgKChkYXRhX3NpemUgPD0gcHJpdmF0ZS0+ZmN4X21heF9kYXRhKQorCQkgICAmJiAoZmN4X211bHRpdHJhY2sgfHwgKGZpcnN0X3RyayA9PSBsYXN0X3RyaykpKSB7CiAJCWNxciA9IGRhc2RfZWNrZF9idWlsZF9jcF90cG1fdHJhY2soc3RhcnRkZXYsIGJsb2NrLCByZXEsCiAJCQkJCQkgICAgZmlyc3RfcmVjLCBsYXN0X3JlYywKIAkJCQkJCSAgICBmaXJzdF90cmssIGxhc3RfdHJrLAogCQkJCQkJICAgIGZpcnN0X29mZnMsIGxhc3Rfb2ZmcywKIAkJCQkJCSAgICBibGtfcGVyX3RyaywgYmxrc2l6ZSk7Ci0JCWlmIChJU19FUlIoY3FyKSAmJiBQVFJfRVJSKGNxcikgIT0gLUVBR0FJTikKKwkJaWYgKElTX0VSUihjcXIpICYmIChQVFJfRVJSKGNxcikgIT0gLUVBR0FJTikgJiYKKwkJICAgIChQVFJfRVJSKGNxcikgIT0gLUVOT01FTSkpCiAJCQljcXIgPSBOVUxMOwogCX0gZWxzZSBpZiAodXNlX3ByZWZpeCAmJgogCQkgICAoKChycV9kYXRhX2RpcihyZXEpID09IFJFQUQpICYmIGNtZHJ0ZCkgfHwKQEAgLTI0ODQsNyArMjc4Miw4IEBACiAJCQkJCQkgICBmaXJzdF90cmssIGxhc3RfdHJrLAogCQkJCQkJICAgZmlyc3Rfb2ZmcywgbGFzdF9vZmZzLAogCQkJCQkJICAgYmxrX3Blcl90cmssIGJsa3NpemUpOwotCQlpZiAoSVNfRVJSKGNxcikgJiYgUFRSX0VSUihjcXIpICE9IC1FQUdBSU4pCisJCWlmIChJU19FUlIoY3FyKSAmJiAoUFRSX0VSUihjcXIpICE9IC1FQUdBSU4pICYmCisJCSAgICAoUFRSX0VSUihjcXIpICE9IC1FTk9NRU0pKQogCQkJY3FyID0gTlVMTDsKIAl9CiAJaWYgKCFjcXIpCkBAIC0yNDk2LDYgKzI3OTUsMTM1IEBACiAJcmV0dXJuIGNxcjsKIH0KIAorc3RhdGljIHN0cnVjdCBkYXNkX2Njd19yZXEgKmRhc2RfcmF3X2J1aWxkX2NwKHN0cnVjdCBkYXNkX2RldmljZSAqc3RhcnRkZXYsCisJCQkJCSAgICAgICBzdHJ1Y3QgZGFzZF9ibG9jayAqYmxvY2ssCisJCQkJCSAgICAgICBzdHJ1Y3QgcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCBkYXNkX2Vja2RfcHJpdmF0ZSAqcHJpdmF0ZTsKKwl1bnNpZ25lZCBsb25nICppZGF3czsKKwlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmJhc2VkZXY7CisJc3RydWN0IGRhc2RfY2N3X3JlcSAqY3FyOworCXN0cnVjdCBjY3cxICpjY3c7CisJc3RydWN0IHJlcV9pdGVyYXRvciBpdGVyOworCXN0cnVjdCBiaW9fdmVjICpidjsKKwljaGFyICpkc3Q7CisJdW5zaWduZWQgY2hhciBjbWQ7CisJdW5zaWduZWQgaW50IHRya2NvdW50OworCXVuc2lnbmVkIGludCBzZWdfbGVuLCBsZW5fdG9fdHJhY2tfZW5kOworCXVuc2lnbmVkIGludCBmaXJzdF9vZmZzOworCXVuc2lnbmVkIGludCBjaWRhdywgY3BsZW5ndGgsIGRhdGFzaXplOworCXNlY3Rvcl90IGZpcnN0X3RyaywgbGFzdF90cms7CisJdW5zaWduZWQgaW50IHBmeF9kYXRhc2l6ZTsKKworCS8qCisJICogcmF3IHRyYWNrIGFjY2VzcyBuZWVkcyB0byBiZSBtdXRpcGxlIG9mIDY0ayBhbmQgb24gNjRrIGJvdW5kYXJ5CisJICovCisJaWYgKChibGtfcnFfcG9zKHJlcSkgJSBEQVNEX1JBV19TRUNUT1JTX1BFUl9UUkFDSykgIT0gMCkgeworCQljcXIgPSBFUlJfUFRSKC1FSU5WQUwpOworCQlnb3RvIG91dDsKKwl9CisJaWYgKCgoYmxrX3JxX3BvcyhyZXEpICsgYmxrX3JxX3NlY3RvcnMocmVxKSkgJQorCSAgICAgREFTRF9SQVdfU0VDVE9SU19QRVJfVFJBQ0spICE9IDApIHsKKwkJY3FyID0gRVJSX1BUUigtRUlOVkFMKTsKKwkJZ290byBvdXQ7CisJfQorCisJZmlyc3RfdHJrID0gYmxrX3JxX3BvcyhyZXEpIC8gREFTRF9SQVdfU0VDVE9SU19QRVJfVFJBQ0s7CisJbGFzdF90cmsgPSAoYmxrX3JxX3BvcyhyZXEpICsgYmxrX3JxX3NlY3RvcnMocmVxKSAtIDEpIC8KKwkJREFTRF9SQVdfU0VDVE9SU19QRVJfVFJBQ0s7CisJdHJrY291bnQgPSBsYXN0X3RyayAtIGZpcnN0X3RyayArIDE7CisJZmlyc3Rfb2ZmcyA9IDA7CisJYmFzZWRldiA9IGJsb2NrLT5iYXNlOworCXByaXZhdGUgPSAoc3RydWN0IGRhc2RfZWNrZF9wcml2YXRlICopIGJhc2VkZXYtPnByaXZhdGU7CisKKwlpZiAocnFfZGF0YV9kaXIocmVxKSA9PSBSRUFEKQorCQljbWQgPSBEQVNEX0VDS0RfQ0NXX1JFQURfVFJBQ0s7CisJZWxzZSBpZiAocnFfZGF0YV9kaXIocmVxKSA9PSBXUklURSkKKwkJY21kID0gREFTRF9FQ0tEX0NDV19XUklURV9GVUxMX1RSQUNLOworCWVsc2UgeworCQljcXIgPSBFUlJfUFRSKC1FSU5WQUwpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKgorCSAqIFJhdyB0cmFjayBiYXNlZCBJL08gbmVlZHMgSURBV3MgZm9yIGVhY2ggcGFnZSwKKwkgKiBhbmQgbm90IGp1c3QgZm9yIDY0IGJpdCBhZGRyZXNzZXMuCisJICovCisJY2lkYXcgPSB0cmtjb3VudCAqIERBU0RfUkFXX0JMT0NLX1BFUl9UUkFDSzsKKworCS8qIDF4IHByZWZpeCArIG9uZSByZWFkL3dyaXRlIGNjdyBwZXIgdHJhY2sgKi8KKwljcGxlbmd0aCA9IDEgKyB0cmtjb3VudDsKKworCS8qCisJICogc3RydWN0IFBGWF9lY2tkX2RhdGEgaGFzIHVwIHRvIDIgYnl0ZSBhcyBleHRlbmRlZCBwYXJhbWV0ZXIKKwkgKiB0aGlzIGlzIG5lZWRlZCBmb3Igd3JpdGUgZnVsbCB0cmFjayBhbmQgaGFzIHRvIGJlIG1lbnRpb25lZAorCSAqIHNlcGVyYXRlbHkKKwkgKiBhZGQgOCBpbnN0ZWFkIG9mIDIgdG8ga2VlcCA4IGJ5dGUgYm91bmRhcnkKKwkgKi8KKwlwZnhfZGF0YXNpemUgPSBzaXplb2Yoc3RydWN0IFBGWF9lY2tkX2RhdGEpICsgODsKKworCWRhdGFzaXplID0gcGZ4X2RhdGFzaXplICsgY2lkYXcgKiBzaXplb2YodW5zaWduZWQgbG9uZyBsb25nKTsKKworCS8qIEFsbG9jYXRlIHRoZSBjY3cgcmVxdWVzdC4gKi8KKwljcXIgPSBkYXNkX3NtYWxsb2NfcmVxdWVzdChEQVNEX0VDS0RfTUFHSUMsIGNwbGVuZ3RoLAorCQkJCSAgIGRhdGFzaXplLCBzdGFydGRldik7CisJaWYgKElTX0VSUihjcXIpKQorCQlnb3RvIG91dDsKKwljY3cgPSBjcXItPmNwYWRkcjsKKworCWlmIChwcmVmaXhfTFJFKGNjdysrLCBjcXItPmRhdGEsIGZpcnN0X3RyaywgbGFzdF90cmssIGNtZCwKKwkJICAgICAgIGJhc2VkZXYsIHN0YXJ0ZGV2LCAxIC8qIGZvcm1hdCAqLywgZmlyc3Rfb2ZmcyArIDEsCisJCSAgICAgICB0cmtjb3VudCwgMCwgMCkgPT0gLUVBR0FJTikgeworCQkvKiBDbG9jayBub3QgaW4gc3luYyBhbmQgWFJDIGlzIGVuYWJsZWQuCisJCSAqIFRyeSBhZ2FpbiBsYXRlci4KKwkJICovCisJCWRhc2Rfc2ZyZWVfcmVxdWVzdChjcXIsIHN0YXJ0ZGV2KTsKKwkJY3FyID0gRVJSX1BUUigtRUFHQUlOKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWRhd3MgPSAodW5zaWduZWQgbG9uZyAqKShjcXItPmRhdGEgKyBwZnhfZGF0YXNpemUpOworCisJbGVuX3RvX3RyYWNrX2VuZCA9IDA7CisKKwlycV9mb3JfZWFjaF9zZWdtZW50KGJ2LCByZXEsIGl0ZXIpIHsKKwkJZHN0ID0gcGFnZV9hZGRyZXNzKGJ2LT5idl9wYWdlKSArIGJ2LT5idl9vZmZzZXQ7CisJCXNlZ19sZW4gPSBidi0+YnZfbGVuOworCQlpZiAoIWxlbl90b190cmFja19lbmQpIHsKKwkJCWNjd1stMV0uZmxhZ3MgfD0gQ0NXX0ZMQUdfQ0M7CisJCQljY3ctPmNtZF9jb2RlID0gY21kOworCQkJLyogbWF4aW11bSAzMzkwIHRyYWNrIHNpemUgKi8KKwkJCWNjdy0+Y291bnQgPSA1NzMyNjsKKwkJCS8qIDY0ayBtYXAgdG8gb25lIHRyYWNrICovCisJCQlsZW5fdG9fdHJhY2tfZW5kID0gNjU1MzY7CisJCQljY3ctPmNkYSA9IChfX3UzMikoYWRkcl90KWlkYXdzOworCQkJY2N3LT5mbGFncyB8PSBDQ1dfRkxBR19JREE7CisJCQljY3ctPmZsYWdzIHw9IENDV19GTEFHX1NMSTsKKwkJCWNjdysrOworCQl9CisJCWxlbl90b190cmFja19lbmQgLT0gc2VnX2xlbjsKKwkJaWRhd3MgPSBpZGFsX2NyZWF0ZV93b3JkcyhpZGF3cywgZHN0LCBzZWdfbGVuKTsKKwl9CisKKwlpZiAoYmxrX25vcmV0cnlfcmVxdWVzdChyZXEpIHx8CisJICAgIGJsb2NrLT5iYXNlLT5mZWF0dXJlcyAmIERBU0RfRkVBVFVSRV9GQUlMRkFTVCkKKwkJc2V0X2JpdChEQVNEX0NRUl9GTEFHU19GQUlMRkFTVCwgJmNxci0+ZmxhZ3MpOworCWNxci0+c3RhcnRkZXYgPSBzdGFydGRldjsKKwljcXItPm1lbWRldiA9IHN0YXJ0ZGV2OworCWNxci0+YmxvY2sgPSBibG9jazsKKwljcXItPmV4cGlyZXMgPSBzdGFydGRldi0+ZGVmYXVsdF9leHBpcmVzICogSFo7CisJY3FyLT5scG0gPSBzdGFydGRldi0+cGF0aF9kYXRhLnBwbTsKKwljcXItPnJldHJpZXMgPSAyNTY7CisJY3FyLT5idWlsZGNsayA9IGdldF9jbG9jaygpOworCWNxci0+c3RhdHVzID0gREFTRF9DUVJfRklMTEVEOworCisJaWYgKElTX0VSUihjcXIpICYmIFBUUl9FUlIoY3FyKSAhPSAtRUFHQUlOKQorCQljcXIgPSBOVUxMOworb3V0OgorCXJldHVybiBjcXI7Cit9CisKKwogc3RhdGljIGludAogZGFzZF9lY2tkX2ZyZWVfY3Aoc3RydWN0IGRhc2RfY2N3X3JlcSAqY3FyLCBzdHJ1Y3QgcmVxdWVzdCAqcmVxKQogewpAQCAtMjYwMCw3ICszMDI4LDEwIEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZShnZXRfY2N3ZGV2X2xvY2soc3RhcnRkZXYtPmNkZXYpLCBmbGFncyk7CiAJcHJpdmF0ZS0+Y291bnQrKzsKLQljcXIgPSBkYXNkX2Vja2RfYnVpbGRfY3Aoc3RhcnRkZXYsIGJsb2NrLCByZXEpOworCWlmICgoYmFzZS0+ZmVhdHVyZXMgJiBEQVNEX0ZFQVRVUkVfVVNFUkFXKSkKKwkJY3FyID0gZGFzZF9yYXdfYnVpbGRfY3Aoc3RhcnRkZXYsIGJsb2NrLCByZXEpOworCWVsc2UKKwkJY3FyID0gZGFzZF9lY2tkX2J1aWxkX2NwKHN0YXJ0ZGV2LCBibG9jaywgcmVxKTsKIAlpZiAoSVNfRVJSKGNxcikpCiAJCXByaXZhdGUtPmNvdW50LS07CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShnZXRfY2N3ZGV2X2xvY2soc3RhcnRkZXYtPmNkZXYpLCBmbGFncyk7CkBAIC0yNjg4LDYgKzMxMTksOCBAQAogCWNxci0+c3RhdHVzID0gREFTRF9DUVJfRklMTEVEOwogCiAJcmMgPSBkYXNkX3NsZWVwX29uX2ltbWVkaWF0bHkoY3FyKTsKKwlpZiAoIXJjKQorCQljbGVhcl9iaXQoREFTRF9GTEFHX0lTX1JFU0VSVkVELCAmZGV2aWNlLT5mbGFncyk7CiAKIAlpZiAodXNlZ2xvYmFsKQogCQltdXRleF91bmxvY2soJmRhc2RfcmVzZXJ2ZV9tdXRleCk7CkBAIC0yNzQxLDYgKzMxNzQsOCBAQAogCWNxci0+c3RhdHVzID0gREFTRF9DUVJfRklMTEVEOwogCiAJcmMgPSBkYXNkX3NsZWVwX29uX2ltbWVkaWF0bHkoY3FyKTsKKwlpZiAoIXJjKQorCQlzZXRfYml0KERBU0RfRkxBR19JU19SRVNFUlZFRCwgJmRldmljZS0+ZmxhZ3MpOwogCiAJaWYgKHVzZWdsb2JhbCkKIAkJbXV0ZXhfdW5sb2NrKCZkYXNkX3Jlc2VydmVfbXV0ZXgpOwpAQCAtMjc5Myw2ICszMjI4LDggQEAKIAljcXItPnN0YXR1cyA9IERBU0RfQ1FSX0ZJTExFRDsKIAogCXJjID0gZGFzZF9zbGVlcF9vbl9pbW1lZGlhdGx5KGNxcik7CisJaWYgKCFyYykKKwkJc2V0X2JpdChEQVNEX0ZMQUdfSVNfUkVTRVJWRUQsICZkZXZpY2UtPmZsYWdzKTsKIAogCWlmICh1c2VnbG9iYWwpCiAJCW11dGV4X3VubG9jaygmZGFzZF9yZXNlcnZlX211dGV4KTsKQEAgLTI4NDUsNiArMzI4Miw3IEBACiAJY3FyLT5tZW1kZXYgPSBkZXZpY2U7CiAJY2xlYXJfYml0KERBU0RfQ1FSX0ZMQUdTX1VTRV9FUlAsICZjcXItPmZsYWdzKTsKIAlzZXRfYml0KERBU0RfQ1FSX0ZMQUdTX0ZBSUxGQVNULCAmY3FyLT5mbGFncyk7CisJc2V0X2JpdChEQVNEX0NRUl9BTExPV19TTE9DSywgJmNxci0+ZmxhZ3MpOwogCWNxci0+cmV0cmllcyA9IDU7CiAJY3FyLT5leHBpcmVzID0gMTAgKiBIWjsKIAljcXItPmJ1aWxkY2xrID0gZ2V0X2Nsb2NrKCk7CkBAIC0zMjc5LDEwICszNzE3LDggQEAKIHsKIAljaGFyICpwYWdlOwogCWludCBsZW4sIHNsLCBzY3QsIHJlc2lkdWFsOwotCiAJc3RydWN0IHRzYiAqdHNiOwotCXU4ICpzZW5zZTsKLQorCXU4ICpzZW5zZSwgKnJjcTsKIAogCXBhZ2UgPSAoY2hhciAqKSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0FUT01JQyk7CiAJaWYgKHBhZ2UgPT0gTlVMTCkgewpAQCAtMzM0OCwxMiArMzc4NCwxNSBAQAogCQljYXNlIDI6IC8qIHRzX2RkcGMgKi8KIAkJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sIEtFUk5fRVJSIFBSSU5US19IRUFERVIKIAkJCSAgICAgICAiIHRzYi0+dHNhLmRkcGMucmMgJWRcbiIsIHRzYi0+dHNhLmRkcGMucmMpOwotCQkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgS0VSTl9FUlIgUFJJTlRLX0hFQURFUgotCQkJICAgICAgICIgdHNiLT50c2EuZGRwYy5yY3E6ICAiKTsKLQkJCWZvciAoc2wgPSAwOyBzbCA8IDE2OyBzbCsrKSB7CisJCQlmb3IgKHNsID0gMDsgc2wgPCAyOyBzbCsrKSB7CisJCQkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwKKwkJCQkJICAgICAgIEtFUk5fRVJSIFBSSU5US19IRUFERVIKKwkJCQkJICAgICAgICIgdHNiLT50c2EuZGRwYy5yY3EgJTJkLSUyZDogIiwKKwkJCQkJICAgICAgICg4ICogc2wpLCAoKDggKiBzbCkgKyA3KSk7CisJCQkJcmNxID0gdHNiLT50c2EuZGRwYy5yY3E7CiAJCQkJZm9yIChzY3QgPSAwOyBzY3QgPCA4OyBzY3QrKykgewogCQkJCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiICUwMngiLAotCQkJCQkJICAgICAgIHRzYi0+dHNhLmRkcGMucmNxW3NsXSk7CisJCQkJCQkgICAgICAgcmNxWzggKiBzbCArIHNjdF0pOwogCQkJCX0KIAkJCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiXG4iKTsKIAkJCX0KQEAgLTM1NTAsNiArMzk4OSw3IEBACiAJLnNldF9vZmZsaW5lID0gZGFzZF9nZW5lcmljX3NldF9vZmZsaW5lLAogCS5zZXRfb25saW5lICA9IGRhc2RfZWNrZF9zZXRfb25saW5lLAogCS5ub3RpZnkgICAgICA9IGRhc2RfZ2VuZXJpY19ub3RpZnksCisJLnBhdGhfZXZlbnQgID0gZGFzZF9nZW5lcmljX3BhdGhfZXZlbnQsCiAJLmZyZWV6ZSAgICAgID0gZGFzZF9nZW5lcmljX3BtX2ZyZWV6ZSwKIAkudGhhdwkgICAgID0gZGFzZF9nZW5lcmljX3Jlc3RvcmVfZGV2aWNlLAogCS5yZXN0b3JlICAgICA9IGRhc2RfZ2VuZXJpY19yZXN0b3JlX2RldmljZSwKQEAgLTM1NzMsMTAgKzQwMTMsMTEgQEAKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkubmFtZSA9ICJFQ0tEIiwKIAkuZWJjbmFtZSA9ICJFQ0tEIiwKLQkubWF4X2Jsb2NrcyA9IDI0MCwKKwkubWF4X2Jsb2NrcyA9IDE5MCwKIAkuY2hlY2tfZGV2aWNlID0gZGFzZF9lY2tkX2NoZWNrX2NoYXJhY3RlcmlzdGljcywKIAkudW5jaGVja19kZXZpY2UgPSBkYXNkX2Vja2RfdW5jaGVja19kZXZpY2UsCiAJLmRvX2FuYWx5c2lzID0gZGFzZF9lY2tkX2RvX2FuYWx5c2lzLAorCS52ZXJpZnlfcGF0aCA9IGRhc2RfZWNrZF92ZXJpZnlfcGF0aCwKIAkucmVhZHlfdG9fb25saW5lID0gZGFzZF9lY2tkX3JlYWR5X3RvX29ubGluZSwKIAkub25saW5lX3RvX3JlYWR5ID0gZGFzZF9lY2tkX29ubGluZV90b19yZWFkeSwKIAkuZmlsbF9nZW9tZXRyeSA9IGRhc2RfZWNrZF9maWxsX2dlb21ldHJ5LApAQCAtMzU4Niw3ICs0MDI3LDcgQEAKIAkuZm9ybWF0X2RldmljZSA9IGRhc2RfZWNrZF9mb3JtYXRfZGV2aWNlLAogCS5lcnBfYWN0aW9uID0gZGFzZF9lY2tkX2VycF9hY3Rpb24sCiAJLmVycF9wb3N0YWN0aW9uID0gZGFzZF9lY2tkX2VycF9wb3N0YWN0aW9uLAotCS5oYW5kbGVfdW5zb2xpY2l0ZWRfaW50ZXJydXB0ID0gZGFzZF9lY2tkX2hhbmRsZV91bnNvbGljaXRlZF9pbnRlcnJ1cHQsCisJLmNoZWNrX2Zvcl9kZXZpY2VfY2hhbmdlID0gZGFzZF9lY2tkX2NoZWNrX2Zvcl9kZXZpY2VfY2hhbmdlLAogCS5idWlsZF9jcCA9IGRhc2RfZWNrZF9idWlsZF9hbGlhc19jcCwKIAkuZnJlZV9jcCA9IGRhc2RfZWNrZF9mcmVlX2FsaWFzX2NwLAogCS5kdW1wX3NlbnNlID0gZGFzZF9lY2tkX2R1bXBfc2Vuc2UsCkBAIC0zNjA5LDExICs0MDUwLDE5IEBACiAJCQkJICAgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpOwogCWlmICghZGFzZF9yZXNlcnZlX3JlcSkKIAkJcmV0dXJuIC1FTk9NRU07CisJcGF0aF92ZXJpZmljYXRpb25fd29ya2VyID0ga21hbGxvYyhzaXplb2YoKnBhdGhfdmVyaWZpY2F0aW9uX3dvcmtlciksCisJCQkJICAgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpOworCWlmICghcGF0aF92ZXJpZmljYXRpb25fd29ya2VyKSB7CisJCWtmcmVlKGRhc2RfcmVzZXJ2ZV9yZXEpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CiAJcmV0ID0gY2N3X2RyaXZlcl9yZWdpc3RlcigmZGFzZF9lY2tkX2RyaXZlcik7CiAJaWYgKCFyZXQpCiAJCXdhaXRfZm9yX2RldmljZV9wcm9iZSgpOwotCWVsc2UKKwllbHNlIHsKKwkJa2ZyZWUocGF0aF92ZXJpZmljYXRpb25fd29ya2VyKTsKIAkJa2ZyZWUoZGFzZF9yZXNlcnZlX3JlcSk7CisJfQogCXJldHVybiByZXQ7CiB9CiAKQEAgLTM2MjEsNiArNDA3MCw3IEBACiBkYXNkX2Vja2RfY2xlYW51cCh2b2lkKQogewogCWNjd19kcml2ZXJfdW5yZWdpc3RlcigmZGFzZF9lY2tkX2RyaXZlcik7CisJa2ZyZWUocGF0aF92ZXJpZmljYXRpb25fd29ya2VyKTsKIAlrZnJlZShkYXNkX3Jlc2VydmVfcmVxKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5oIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5oCmluZGV4IDEyMDk3YzIuLjRhNjg4YTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuaAorKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmgKQEAgLTM3LDE0ICszNywxNyBAQAogI2RlZmluZSBEQVNEX0VDS0RfQ0NXX1dSSVRFX0tEX01UCSAweDhkCiAjZGVmaW5lIERBU0RfRUNLRF9DQ1dfUkVBRF9LRF9NVAkgMHg4ZQogI2RlZmluZSBEQVNEX0VDS0RfQ0NXX1JFTEVBU0UJCSAweDk0CisjZGVmaW5lIERBU0RfRUNLRF9DQ1dfV1JJVEVfRlVMTF9UUkFDSwkgMHg5NQogI2RlZmluZSBEQVNEX0VDS0RfQ0NXX1JFQURfQ0tEX01UCSAweDllCiAjZGVmaW5lIERBU0RfRUNLRF9DQ1dfV1JJVEVfQ0tEX01UCSAweDlkCiAjZGVmaW5lIERBU0RfRUNLRF9DQ1dfV1JJVEVfVFJBQ0tfREFUQQkgMHhBNQogI2RlZmluZSBEQVNEX0VDS0RfQ0NXX1JFQURfVFJBQ0tfREFUQQkgMHhBNgogI2RlZmluZSBEQVNEX0VDS0RfQ0NXX1JFU0VSVkUJCSAweEI0CisjZGVmaW5lIERBU0RfRUNLRF9DQ1dfUkVBRF9UUkFDSwkgMHhERQogI2RlZmluZSBEQVNEX0VDS0RfQ0NXX1BGWAkJIDB4RTcKICNkZWZpbmUgREFTRF9FQ0tEX0NDV19QRlhfUkVBRAkJIDB4RUEKICNkZWZpbmUgREFTRF9FQ0tEX0NDV19SU0NLCQkgMHhGOQorI2RlZmluZSBEQVNEX0VDS0RfQ0NXX1JDRAkJIDB4RkEKIAogLyoKICAqIFBlcmZvcm0gU3Vic3lzdGVtIEZ1bmN0aW9uIC8gU3ViLU9yZGVycwpAQCAtNTcsNiArNjAsMTEgQEAKICAqLwogI2RlZmluZSBMVl9DT01QQVRfQ1lMIDB4RkZGRQogCisKKyNkZWZpbmUgRkNYX01BWF9EQVRBX0ZBQ1RPUiA2NTUzNgorI2RlZmluZSBEQVNEX0VDS0RfUkNEX0RBVEFfU0laRSAyNTYKKworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFNFQ1RJT046IFR5cGUgRGVmaW5pdGlvbnMKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMzMxLDEyICszMzksNiBAQAogCV9fdTggcmVzZXJ2ZWQyWzIyXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi1zdHJ1Y3QgZGFzZF9lY2tkX3BhdGggewotCV9fdTggb3BtOwotCV9fdTggcHBtOwotCV9fdTggbnBtOwotfTsKLQogc3RydWN0IGRhc2RfcnNzZF9mZWF0dXJlcyB7CiAJY2hhciBmZWF0dXJlWzI1Nl07CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwpAQCAtNDQyLDcgKzQ0NCw2IEBACiAJc3RydWN0IHZkX3NuZXEgKnZkc25lcTsKIAlzdHJ1Y3QgZGFzZF9nbmVxICpnbmVxOwogCi0Jc3RydWN0IGRhc2RfZWNrZF9wYXRoIHBhdGhfZGF0YTsKIAlzdHJ1Y3QgZWNrZF9jb3VudCBjb3VudF9hcmVhWzVdOwogCWludCBpbml0X2Nxcl9zdGF0dXM7CiAJaW50IHVzZXNfY2RsOwpAQCAtNDU1LDYgKzQ1Niw4IEBACiAJc3RydWN0IGFsaWFzX3Bhdl9ncm91cCAqcGF2Z3JvdXA7CiAJc3RydWN0IGFsaWFzX2xjdSAqbGN1OwogCWludCBjb3VudDsKKworCXUzMiBmY3hfbWF4X2RhdGE7CiB9OwogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vlci5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWVyLmMKaW5kZXggODNiNDYxNS4uNzdmNzc4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWVyLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWVyLmMKQEAgLTQ3Myw2ICs0NzMsNyBAQAogCWNxci0+cmV0cmllcyA9IDI1NTsKIAljcXItPmV4cGlyZXMgPSAxMCAqIEhaOwogCWNsZWFyX2JpdChEQVNEX0NRUl9GTEFHU19VU0VfRVJQLCAmY3FyLT5mbGFncyk7CisJc2V0X2JpdChEQVNEX0NRUl9BTExPV19TTE9DSywgJmNxci0+ZmxhZ3MpOwogCiAJY2N3ID0gY3FyLT5jcGFkZHI7CiAJY2N3LT5jbWRfY29kZSA9IERBU0RfRUNLRF9DQ1dfU05TUzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2VycC5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZXJwLmMKaW5kZXggNzY1NjM4NC4uMGVhZmUyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZXJwLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZXJwLmMKQEAgLTk2LDcgKzk2LDggQEAKIAkJREJGX0RFVl9FVkVOVChEQkZfREVCVUcsIGRldmljZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlZmF1bHQgRVJQIGNhbGxlZCAoJWkgcmV0cmllcyBsZWZ0KSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNxci0+cmV0cmllcyk7Ci0JCWNxci0+bHBtICAgID0gTFBNX0FOWVBBVEg7CisJCWlmICghdGVzdF9iaXQoREFTRF9DUVJfVkVSSUZZX1BBVEgsICZjcXItPmZsYWdzKSkKKwkJCWNxci0+bHBtID0gZGV2aWNlLT5wYXRoX2RhdGEub3BtOwogCQljcXItPnN0YXR1cyA9IERBU0RfQ1FSX0ZJTExFRDsKICAgICAgICAgfSBlbHNlIHsKIAkJcHJfZXJyKCIlczogZGVmYXVsdCBFUlAgaGFzIHJ1biBvdXQgb2YgcmV0cmllcyBhbmQgZmFpbGVkXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZmJhLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9mYmEuYwppbmRleCBiZWM1NDg2ZS4uYmU4OWIzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZmJhLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZmJhLmMKQEAgLTczLDYgKzczLDcgQEAKIAkuc2V0X29mZmxpbmUgPSBkYXNkX2dlbmVyaWNfc2V0X29mZmxpbmUsCiAJLnNldF9vbmxpbmUgID0gZGFzZF9mYmFfc2V0X29ubGluZSwKIAkubm90aWZ5ICAgICAgPSBkYXNkX2dlbmVyaWNfbm90aWZ5LAorCS5wYXRoX2V2ZW50ICA9IGRhc2RfZ2VuZXJpY19wYXRoX2V2ZW50LAogCS5mcmVlemUgICAgICA9IGRhc2RfZ2VuZXJpY19wbV9mcmVlemUsCiAJLnRoYXcJICAgICA9IGRhc2RfZ2VuZXJpY19yZXN0b3JlX2RldmljZSwKIAkucmVzdG9yZSAgICAgPSBkYXNkX2dlbmVyaWNfcmVzdG9yZV9kZXZpY2UsCkBAIC0xNjQsNiArMTY1LDcgQEAKIAl9CiAKIAlkZXZpY2UtPmRlZmF1bHRfZXhwaXJlcyA9IERBU0RfRVhQSVJFUzsKKwlkZXZpY2UtPnBhdGhfZGF0YS5vcG0gPSBMUE1fQU5ZUEFUSDsKIAogCXJlYWRvbmx5ID0gZGFzZF9kZXZpY2VfaXNfcm8oZGV2aWNlKTsKIAlpZiAocmVhZG9ubHkpCkBAIC0yMzEsMjQgKzIzMywxNiBAQAogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgdm9pZCBkYXNkX2ZiYV9oYW5kbGVfdW5zb2xpY2l0ZWRfaW50ZXJydXB0KHN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlLAotCQkJCQkJICAgc3RydWN0IGlyYiAqaXJiKQorc3RhdGljIHZvaWQgZGFzZF9mYmFfY2hlY2tfZm9yX2RldmljZV9jaGFuZ2Uoc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UsCisJCQkJCSAgICAgc3RydWN0IGRhc2RfY2N3X3JlcSAqY3FyLAorCQkJCQkgICAgIHN0cnVjdCBpcmIgKmlyYikKIHsKIAljaGFyIG1hc2s7CiAKIAkvKiBmaXJzdCBvZiBhbGwgY2hlY2sgZm9yIHN0YXRlIGNoYW5nZSBwZW5kaW5nIGludGVycnVwdCAqLwogCW1hc2sgPSBERVZfU1RBVF9BVFRFTlRJT04gfCBERVZfU1RBVF9ERVZfRU5EIHwgREVWX1NUQVRfVU5JVF9FWENFUDsKLQlpZiAoKGlyYi0+c2Nzdy5jbWQuZHN0YXQgJiBtYXNrKSA9PSBtYXNrKSB7CisJaWYgKChpcmItPnNjc3cuY21kLmRzdGF0ICYgbWFzaykgPT0gbWFzaykKIAkJZGFzZF9nZW5lcmljX2hhbmRsZV9zdGF0ZV9jaGFuZ2UoZGV2aWNlKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qIGNoZWNrIGZvciB1bnNvbGljaXRlZCBpbnRlcnJ1cHRzICovCi0JREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkgICAgInVuc29saWNpdGVkIGludGVycnVwdCByZWNlaXZlZCIpOwotCWRldmljZS0+ZGlzY2lwbGluZS0+ZHVtcF9zZW5zZV9kYmYoZGV2aWNlLCBpcmIsICJ1bnNvbGljaXRlZCIpOwotCWRhc2Rfc2NoZWR1bGVfZGV2aWNlX2JoKGRldmljZSk7Ci0JcmV0dXJuOwogfTsKIAogc3RhdGljIHN0cnVjdCBkYXNkX2Njd19yZXEgKmRhc2RfZmJhX2J1aWxkX2NwKHN0cnVjdCBkYXNkX2RldmljZSAqIG1lbWRldiwKQEAgLTU5NiwxMyArNTkwLDE0IEBACiAJLm1heF9ibG9ja3MgPSA5NiwKIAkuY2hlY2tfZGV2aWNlID0gZGFzZF9mYmFfY2hlY2tfY2hhcmFjdGVyaXN0aWNzLAogCS5kb19hbmFseXNpcyA9IGRhc2RfZmJhX2RvX2FuYWx5c2lzLAorCS52ZXJpZnlfcGF0aCA9IGRhc2RfZ2VuZXJpY192ZXJpZnlfcGF0aCwKIAkuZmlsbF9nZW9tZXRyeSA9IGRhc2RfZmJhX2ZpbGxfZ2VvbWV0cnksCiAJLnN0YXJ0X0lPID0gZGFzZF9zdGFydF9JTywKIAkudGVybV9JTyA9IGRhc2RfdGVybV9JTywKIAkuaGFuZGxlX3Rlcm1pbmF0ZWRfcmVxdWVzdCA9IGRhc2RfZmJhX2hhbmRsZV90ZXJtaW5hdGVkX3JlcXVlc3QsCiAJLmVycF9hY3Rpb24gPSBkYXNkX2ZiYV9lcnBfYWN0aW9uLAogCS5lcnBfcG9zdGFjdGlvbiA9IGRhc2RfZmJhX2VycF9wb3N0YWN0aW9uLAotCS5oYW5kbGVfdW5zb2xpY2l0ZWRfaW50ZXJydXB0ID0gZGFzZF9mYmFfaGFuZGxlX3Vuc29saWNpdGVkX2ludGVycnVwdCwKKwkuY2hlY2tfZm9yX2RldmljZV9jaGFuZ2UgPSBkYXNkX2ZiYV9jaGVja19mb3JfZGV2aWNlX2NoYW5nZSwKIAkuYnVpbGRfY3AgPSBkYXNkX2ZiYV9idWlsZF9jcCwKIAkuZnJlZV9jcCA9IGRhc2RfZmJhX2ZyZWVfY3AsCiAJLmR1bXBfc2Vuc2UgPSBkYXNkX2ZiYV9kdW1wX3NlbnNlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW50LmggYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pbnQuaAppbmRleCA1MDA2NzhkLi5kZjlmNjk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pbnQuaAorKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pbnQuaApAQCAtMjMxLDYgKzIzMSwxMSBAQAogLyogcGVyIGRhc2RfY2N3X3JlcSBmbGFncyAqLwogI2RlZmluZSBEQVNEX0NRUl9GTEFHU19VU0VfRVJQICAgMAkvKiB1c2UgRVJQIGZvciB0aGlzIHJlcXVlc3QgKi8KICNkZWZpbmUgREFTRF9DUVJfRkxBR1NfRkFJTEZBU1QgIDEJLyogRkFJTEZBU1QgKi8KKyNkZWZpbmUgREFTRF9DUVJfVkVSSUZZX1BBVEgJIDIJLyogcGF0aCB2ZXJpZmljYXRpb24gcmVxdWVzdCAqLworI2RlZmluZSBEQVNEX0NRUl9BTExPV19TTE9DSwkgMwkvKiBUcnkgdGhpcyByZXF1ZXN0IGV2ZW4gd2hlbiBsb2NrIHdhcworCQkJCQkgKiBzdG9sZW4uIFNob3VsZCBub3QgYmUgY29tYmluZWQgd2l0aAorCQkJCQkgKiBEQVNEX0NRUl9GTEFHU19VU0VfRVJQCisJCQkJCSAqLwogCiAvKiBTaWduYXR1cmUgZm9yIGVycm9yIHJlY292ZXJ5IGZ1bmN0aW9ucy4gKi8KIHR5cGVkZWYgc3RydWN0IGRhc2RfY2N3X3JlcSAqKCpkYXNkX2VycF9mbl90KSAoc3RydWN0IGRhc2RfY2N3X3JlcSAqKTsKQEAgLTI4Nyw2ICsyOTIsMTQgQEAKIAlpbnQgKCpkb19hbmFseXNpcykgKHN0cnVjdCBkYXNkX2Jsb2NrICopOwogCiAJLyoKKwkgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCwgd2hlbiBuZXcgcGF0aHMgYmVjb21lIGF2YWlsYWJsZS4KKwkgKiBEaXNjaXBsaW5zIG1heSB1c2UgdGhpcyBjYWxsYmFjayB0byBkbyBuZWNlc3Nhcnkgc2V0dXAgd29yaywKKwkgKiBlLmcuIHZlcmlmeSB0aGF0IG5ldyBwYXRoIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgY3VycmVudAorCSAqIGNvbmZpZ3VyYXRpb24uCisJICovCisJaW50ICgqdmVyaWZ5X3BhdGgpKHN0cnVjdCBkYXNkX2RldmljZSAqLCBfX3U4KTsKKworCS8qCiAJICogTGFzdCB0aGluZ3MgdG8gZG8gd2hlbiBhIGRldmljZSBpcyBzZXQgb25saW5lLCBhbmQgZmlyc3QgdGhpbmdzCiAJICogd2hlbiBpdCBpcyBzZXQgb2ZmbGluZS4KIAkgKi8KQEAgLTMyNSw5ICszMzgsOSBAQAogCXZvaWQgKCpkdW1wX3NlbnNlKSAoc3RydWN0IGRhc2RfZGV2aWNlICosIHN0cnVjdCBkYXNkX2Njd19yZXEgKiwKIAkJCSAgICBzdHJ1Y3QgaXJiICopOwogCXZvaWQgKCpkdW1wX3NlbnNlX2RiZikgKHN0cnVjdCBkYXNkX2RldmljZSAqLCBzdHJ1Y3QgaXJiICosIGNoYXIgKik7Ci0KLQl2b2lkICgqaGFuZGxlX3Vuc29saWNpdGVkX2ludGVycnVwdCkgKHN0cnVjdCBkYXNkX2RldmljZSAqLAotCQkJCQkgICAgICBzdHJ1Y3QgaXJiICopOworCXZvaWQgKCpjaGVja19mb3JfZGV2aWNlX2NoYW5nZSkgKHN0cnVjdCBkYXNkX2RldmljZSAqLAorCQkJCQkgc3RydWN0IGRhc2RfY2N3X3JlcSAqLAorCQkJCQkgc3RydWN0IGlyYiAqKTsKIAogICAgICAgICAvKiBpL28gY29udHJvbCBmdW5jdGlvbnMuICovCiAJaW50ICgqZmlsbF9nZW9tZXRyeSkgKHN0cnVjdCBkYXNkX2Jsb2NrICosIHN0cnVjdCBoZF9nZW9tZXRyeSAqKTsKQEAgLTM2Miw2ICszNzUsMTMgQEAKICNkZWZpbmUgREFTRF9FRVJfU1RBVEVDSEFOR0UgMwogI2RlZmluZSBEQVNEX0VFUl9QUFJDU1VTUEVORCA0CiAKK3N0cnVjdCBkYXNkX3BhdGggeworCV9fdTggb3BtOworCV9fdTggdGJ2cG07CisJX191OCBwcG07CisJX191OCBucG07Cit9OworCiBzdHJ1Y3QgZGFzZF9kZXZpY2UgewogCS8qIEJsb2NrIGRldmljZSBzdHVmZi4gKi8KIAlzdHJ1Y3QgZGFzZF9ibG9jayAqYmxvY2s7CkBAIC0zNzcsNiArMzk3LDcgQEAKIAlzdHJ1Y3QgZGFzZF9kaXNjaXBsaW5lICpkaXNjaXBsaW5lOwogCXN0cnVjdCBkYXNkX2Rpc2NpcGxpbmUgKmJhc2VfZGlzY2lwbGluZTsKIAljaGFyICpwcml2YXRlOworCXN0cnVjdCBkYXNkX3BhdGggcGF0aF9kYXRhOwogCiAJLyogRGV2aWNlIHN0YXRlIGFuZCB0YXJnZXQgc3RhdGUuICovCiAJaW50IHN0YXRlLCB0YXJnZXQ7CkBAIC00NTYsNiArNDc3LDkgQEAKIAkJCQkJICogY29uZnVzZSB0aGlzIHdpdGggdGhlIHVzZXIgc3BlY2lmaWVkCiAJCQkJCSAqIHJlYWQtb25seSBmZWF0dXJlLgogCQkJCQkgKi8KKyNkZWZpbmUgREFTRF9GTEFHX0lTX1JFU0VSVkVECTcJLyogVGhlIGRldmljZSBpcyByZXNlcnZlZCAqLworI2RlZmluZSBEQVNEX0ZMQUdfTE9DS19TVE9MRU4JOAkvKiBUaGUgZGV2aWNlIGxvY2sgd2FzIHN0b2xlbiAqLworCiAKIHZvaWQgZGFzZF9wdXRfZGV2aWNlX3dha2Uoc3RydWN0IGRhc2RfZGV2aWNlICopOwogCkBAIC02MjAsMTAgKzY0NCwxNSBAQAogaW50IGRhc2RfZ2VuZXJpY19zZXRfb25saW5lKHN0cnVjdCBjY3dfZGV2aWNlICosIHN0cnVjdCBkYXNkX2Rpc2NpcGxpbmUgKik7CiBpbnQgZGFzZF9nZW5lcmljX3NldF9vZmZsaW5lIChzdHJ1Y3QgY2N3X2RldmljZSAqY2Rldik7CiBpbnQgZGFzZF9nZW5lcmljX25vdGlmeShzdHJ1Y3QgY2N3X2RldmljZSAqLCBpbnQpOworaW50IGRhc2RfZ2VuZXJpY19sYXN0X3BhdGhfZ29uZShzdHJ1Y3QgZGFzZF9kZXZpY2UgKik7CitpbnQgZGFzZF9nZW5lcmljX3BhdGhfb3BlcmF0aW9uYWwoc3RydWN0IGRhc2RfZGV2aWNlICopOworCiB2b2lkIGRhc2RfZ2VuZXJpY19oYW5kbGVfc3RhdGVfY2hhbmdlKHN0cnVjdCBkYXNkX2RldmljZSAqKTsKIGludCBkYXNkX2dlbmVyaWNfcG1fZnJlZXplKHN0cnVjdCBjY3dfZGV2aWNlICopOwogaW50IGRhc2RfZ2VuZXJpY19yZXN0b3JlX2RldmljZShzdHJ1Y3QgY2N3X2RldmljZSAqKTsKIGVudW0gdWNfdG9kbyBkYXNkX2dlbmVyaWNfdWNfaGFuZGxlcihzdHJ1Y3QgY2N3X2RldmljZSAqLCBzdHJ1Y3QgaXJiICopOwordm9pZCBkYXNkX2dlbmVyaWNfcGF0aF9ldmVudChzdHJ1Y3QgY2N3X2RldmljZSAqLCBpbnQgKik7CitpbnQgZGFzZF9nZW5lcmljX3ZlcmlmeV9wYXRoKHN0cnVjdCBkYXNkX2RldmljZSAqLCBfX3U4KTsKIAogaW50IGRhc2RfZ2VuZXJpY19yZWFkX2Rldl9jaGFycyhzdHJ1Y3QgZGFzZF9kZXZpY2UgKiwgaW50LCB2b2lkICosIGludCk7CiBjaGFyICpkYXNkX2dldF9zZW5zZShzdHJ1Y3QgaXJiICopOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvS2NvbmZpZyBiL2RyaXZlcnMvczM5MC9jaGFyL0tjb25maWcKaW5kZXggNDA4MzRmMS4uZGNlZTNjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvS2NvbmZpZworKysgYi9kcml2ZXJzL3MzOTAvY2hhci9LY29uZmlnCkBAIC0yLDc2ICsyLDg1IEBACiAJZGVwZW5kcyBvbiBTMzkwCiAKIGNvbmZpZyBUTjMyNzAKLQl0cmlzdGF0ZSAiU3VwcG9ydCBmb3IgbG9jYWxseSBhdHRhY2hlZCAzMjcwIHRlcm1pbmFscyIKKwlkZWZfdHJpc3RhdGUgeQorCXByb21wdCAiU3VwcG9ydCBmb3IgbG9jYWxseSBhdHRhY2hlZCAzMjcwIHRlcm1pbmFscyIKIAlkZXBlbmRzIG9uIENDVwogCWhlbHAKIAkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgSUJNIDMyNzAgdGVybWluYWxzLgogCiBjb25maWcgVE4zMjcwX1RUWQotCXRyaXN0YXRlICJTdXBwb3J0IGZvciB0dHkgaW5wdXQvb3V0cHV0IG9uIDMyNzAgdGVybWluYWxzIgorCWRlZl90cmlzdGF0ZSB5CisJcHJvbXB0ICJTdXBwb3J0IGZvciB0dHkgaW5wdXQvb3V0cHV0IG9uIDMyNzAgdGVybWluYWxzIgogCWRlcGVuZHMgb24gVE4zMjcwCiAJaGVscAogCSAgSW5jbHVkZSBzdXBwb3J0IGZvciB1c2luZyBhbiBJQk0gMzI3MCB0ZXJtaW5hbCBhcyBhIExpbnV4IHR0eS4KIAogY29uZmlnIFROMzI3MF9GUwotCXRyaXN0YXRlICJTdXBwb3J0IGZvciBmdWxsc2NyZWVuIGFwcGxpY2F0aW9ucyBvbiAzMjcwIHRlcm1pbmFscyIKKwlkZWZfdHJpc3RhdGUgbQorCXByb21wdCAiU3VwcG9ydCBmb3IgZnVsbHNjcmVlbiBhcHBsaWNhdGlvbnMgb24gMzI3MCB0ZXJtaW5hbHMiCiAJZGVwZW5kcyBvbiBUTjMyNzAKIAloZWxwCiAJICBJbmNsdWRlIHN1cHBvcnQgZm9yIGZ1bGxzY3JlZW4gYXBwbGljYXRpb25zIG9uIGFuIElCTSAzMjcwIHRlcm1pbmFsLgogCiBjb25maWcgVE4zMjcwX0NPTlNPTEUKLQlib29sICJTdXBwb3J0IGZvciBjb25zb2xlIG9uIDMyNzAgdGVybWluYWwiCisJZGVmX2Jvb2wgeQorCXByb21wdCAiU3VwcG9ydCBmb3IgY29uc29sZSBvbiAzMjcwIHRlcm1pbmFsIgogCWRlcGVuZHMgb24gVE4zMjcwPXkgJiYgVE4zMjcwX1RUWT15CiAJaGVscAogCSAgSW5jbHVkZSBzdXBwb3J0IGZvciB1c2luZyBhbiBJQk0gMzI3MCB0ZXJtaW5hbCBhcyBhIExpbnV4IHN5c3RlbQogCSAgY29uc29sZS4gIEF2YWlsYWJsZSBvbmx5IGlmIDMyNzAgc3VwcG9ydCBpcyBjb21waWxlZCBpbiBzdGF0aWNhbGx5LgogCiBjb25maWcgVE4zMjE1Ci0JYm9vbCAiU3VwcG9ydCBmb3IgMzIxNSBsaW5lIG1vZGUgdGVybWluYWwiCisJZGVmX2Jvb2wgeQorCXByb21wdCAiU3VwcG9ydCBmb3IgMzIxNSBsaW5lIG1vZGUgdGVybWluYWwiCiAJZGVwZW5kcyBvbiBDQ1cKIAloZWxwCiAJICBJbmNsdWRlIHN1cHBvcnQgZm9yIElCTSAzMjE1IGxpbmUtbW9kZSB0ZXJtaW5hbHMuCiAKIGNvbmZpZyBUTjMyMTVfQ09OU09MRQotCWJvb2wgIlN1cHBvcnQgZm9yIGNvbnNvbGUgb24gMzIxNSBsaW5lIG1vZGUgdGVybWluYWwiCisJZGVmX2Jvb2wgeQorCXByb21wdCAiU3VwcG9ydCBmb3IgY29uc29sZSBvbiAzMjE1IGxpbmUgbW9kZSB0ZXJtaW5hbCIKIAlkZXBlbmRzIG9uIFROMzIxNQogCWhlbHAKIAkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgdXNpbmcgYW4gSUJNIDMyMTUgbGluZS1tb2RlIHRlcm1pbmFsIGFzIGEKIAkgIExpbnV4IHN5c3RlbSBjb25zb2xlLgogCiBjb25maWcgQ0NXX0NPTlNPTEUKLQlib29sCi0JZGVwZW5kcyBvbiBUTjMyMTVfQ09OU09MRSB8fCBUTjMyNzBfQ09OU09MRQotCWRlZmF1bHQgeQorCWRlZl9ib29sIHkgaWYgVE4zMjE1X0NPTlNPTEUgfHwgVE4zMjcwX0NPTlNPTEUKIAogY29uZmlnIFNDTFBfVFRZCi0JYm9vbCAiU3VwcG9ydCBmb3IgU0NMUCBsaW5lIG1vZGUgdGVybWluYWwiCisJZGVmX2Jvb2wgeQorCXByb21wdCAiU3VwcG9ydCBmb3IgU0NMUCBsaW5lIG1vZGUgdGVybWluYWwiCiAJZGVwZW5kcyBvbiBTMzkwCiAJaGVscAogCSAgSW5jbHVkZSBzdXBwb3J0IGZvciBJQk0gU0NMUCBsaW5lLW1vZGUgdGVybWluYWxzLgogCiBjb25maWcgU0NMUF9DT05TT0xFCi0JYm9vbCAiU3VwcG9ydCBmb3IgY29uc29sZSBvbiBTQ0xQIGxpbmUgbW9kZSB0ZXJtaW5hbCIKKwlkZWZfYm9vbCB5CisJcHJvbXB0ICJTdXBwb3J0IGZvciBjb25zb2xlIG9uIFNDTFAgbGluZSBtb2RlIHRlcm1pbmFsIgogCWRlcGVuZHMgb24gU0NMUF9UVFkKIAloZWxwCiAJICBJbmNsdWRlIHN1cHBvcnQgZm9yIHVzaW5nIGFuIElCTSBIV0MgbGluZS1tb2RlIHRlcm1pbmFsIGFzIHRoZSBMaW51eAogCSAgc3lzdGVtIGNvbnNvbGUuCiAKIGNvbmZpZyBTQ0xQX1ZUMjIwX1RUWQotCWJvb2wgIlN1cHBvcnQgZm9yIFNDTFAgVlQyMjAtY29tcGF0aWJsZSB0ZXJtaW5hbCIKKwlkZWZfYm9vbCB5CisJcHJvbXB0ICJTdXBwb3J0IGZvciBTQ0xQIFZUMjIwLWNvbXBhdGlibGUgdGVybWluYWwiCiAJZGVwZW5kcyBvbiBTMzkwCiAJaGVscAogCSAgSW5jbHVkZSBzdXBwb3J0IGZvciBhbiBJQk0gU0NMUCBWVDIyMC1jb21wYXRpYmxlIHRlcm1pbmFsLgogCiBjb25maWcgU0NMUF9WVDIyMF9DT05TT0xFCi0JYm9vbCAiU3VwcG9ydCBmb3IgY29uc29sZSBvbiBTQ0xQIFZUMjIwLWNvbXBhdGlibGUgdGVybWluYWwiCisJZGVmX2Jvb2wgeQorCXByb21wdCAiU3VwcG9ydCBmb3IgY29uc29sZSBvbiBTQ0xQIFZUMjIwLWNvbXBhdGlibGUgdGVybWluYWwiCiAJZGVwZW5kcyBvbiBTQ0xQX1ZUMjIwX1RUWQogCWhlbHAKIAkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgdXNpbmcgYW4gSUJNIFNDTFAgVlQyMjAtY29tcGF0aWJsZSB0ZXJtaW5hbCBhcyBhCiAJICBMaW51eCBzeXN0ZW0gY29uc29sZS4KIAogY29uZmlnIFNDTFBfQ1BJCi0JdHJpc3RhdGUgIkNvbnRyb2wtUHJvZ3JhbSBJZGVudGlmaWNhdGlvbiIKKwlkZWZfdHJpc3RhdGUgbQorCXByb21wdCAiQ29udHJvbC1Qcm9ncmFtIElkZW50aWZpY2F0aW9uIgogCWRlcGVuZHMgb24gUzM5MAogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGhhcmR3YXJlIGNvbnNvbGUgaW50ZXJmYWNlIGZvciBzeXN0ZW0KQEAgLTgzLDcgKzkyLDggQEAKIAkgIG5lZWQgdGhpcyBmZWF0dXJlIGFuZCBpbnRlbmQgdG8gcnVuIHlvdXIga2VybmVsIGluIExQQVIuCiAKIGNvbmZpZyBTQ0xQX0FTWU5DCi0JdHJpc3RhdGUgIlN1cHBvcnQgZm9yIENhbGwgSG9tZSB2aWEgQXN5bmNocm9ub3VzIFNDTFAgUmVjb3JkcyIKKwlkZWZfdHJpc3RhdGUgbQorCXByb21wdCAiU3VwcG9ydCBmb3IgQ2FsbCBIb21lIHZpYSBBc3luY2hyb25vdXMgU0NMUCBSZWNvcmRzIgogCWRlcGVuZHMgb24gUzM5MAogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGNhbGwgaG9tZSBmdW5jdGlvbiwgd2hpY2ggaXMgYWJsZSB0byBpbmZvcm0KQEAgLTkzLDcgKzEwMyw4IEBACiAJICBuZWVkIHRoaXMgZmVhdHVyZSBhbmQgaW50ZW5kIHRvIHJ1biB5b3VyIGtlcm5lbCBpbiBMUEFSLgogCiBjb25maWcgUzM5MF9UQVBFCi0JdHJpc3RhdGUgIlMvMzkwIHRhcGUgZGV2aWNlIHN1cHBvcnQiCisJZGVmX3RyaXN0YXRlIG0KKwlwcm9tcHQgIlMvMzkwIHRhcGUgZGV2aWNlIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBDQ1cKIAloZWxwCiAJICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gYWNjZXNzIGNoYW5uZWwtYXR0YWNoZWQgdGFwZQpAQCAtMTA5LDcgKzEyMCw4IEBACiAJZGVwZW5kcyBvbiBTMzkwX1RBUEUKIAogY29uZmlnIFMzOTBfVEFQRV9CTE9DSwotCWJvb2wgIlN1cHBvcnQgZm9yIHRhcGUgYmxvY2sgZGV2aWNlcyIKKwlkZWZfYm9vbCB5CisJcHJvbXB0ICJTdXBwb3J0IGZvciB0YXBlIGJsb2NrIGRldmljZXMiCiAJZGVwZW5kcyBvbiBTMzkwX1RBUEUgJiYgQkxPQ0sKIAloZWxwCiAJICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gYWNjZXNzIHlvdXIgY2hhbm5lbC1hdHRhY2hlZCB0YXBlCkBAIC0xMjMsNyArMTM1LDggQEAKIAlkZXBlbmRzIG9uIFMzOTBfVEFQRQogCiBjb25maWcgUzM5MF9UQVBFXzM0WFgKLQl0cmlzdGF0ZSAiU3VwcG9ydCBmb3IgMzQ4MC8zNDkwIHRhcGUgaGFyZHdhcmUiCisJZGVmX3RyaXN0YXRlIG0KKwlwcm9tcHQgIlN1cHBvcnQgZm9yIDM0ODAvMzQ5MCB0YXBlIGhhcmR3YXJlIgogCWRlcGVuZHMgb24gUzM5MF9UQVBFCiAJaGVscAogCSAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIGFjY2VzcyBJQk0gMzQ4MC8zNDkwIG1hZ25ldGljCkBAIC0xMzEsNyArMTQ0LDggQEAKIAkgIEl0IGlzIHNhZmUgdG8gc2F5ICJZIiBoZXJlLgogCiBjb25maWcgUzM5MF9UQVBFXzM1OTAKLQl0cmlzdGF0ZSAiU3VwcG9ydCBmb3IgMzU5MCB0YXBlIGhhcmR3YXJlIgorCWRlZl90cmlzdGF0ZSBtCisJcHJvbXB0ICJTdXBwb3J0IGZvciAzNTkwIHRhcGUgaGFyZHdhcmUiCiAJZGVwZW5kcyBvbiBTMzkwX1RBUEUKIAloZWxwCiAJICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gYWNjZXNzIElCTSAzNTkwIG1hZ25ldGljCkBAIC0xMzksNyArMTUzLDggQEAKIAkgIEl0IGlzIHNhZmUgdG8gc2F5ICJZIiBoZXJlLgogCiBjb25maWcgVk1MT0dSRFIKLQl0cmlzdGF0ZSAiU3VwcG9ydCBmb3IgdGhlIHovVk0gcmVjb3JkaW5nIHN5c3RlbSBzZXJ2aWNlcyAoVk0gb25seSkiCisJZGVmX3RyaXN0YXRlIG0KKwlwcm9tcHQgIlN1cHBvcnQgZm9yIHRoZSB6L1ZNIHJlY29yZGluZyBzeXN0ZW0gc2VydmljZXMgKFZNIG9ubHkpIgogCWRlcGVuZHMgb24gSVVDVgogCWhlbHAKIAkgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byBiZSBhYmxlIHRvIHJlY2VpdmUgcmVjb3JkcyBjb2xsZWN0ZWQKQEAgLTE0OCwyOSArMTYzLDMxIEBACiAJICBUaGlzIGRyaXZlciBkZXBlbmRzIG9uIHRoZSBJVUNWIHN1cHBvcnQgZHJpdmVyLgogCiBjb25maWcgVk1DUAotCWJvb2wgIlN1cHBvcnQgZm9yIHRoZSB6L1ZNIENQIGludGVyZmFjZSIKKwlkZWZfYm9vbCB5CisJcHJvbXB0ICJTdXBwb3J0IGZvciB0aGUgei9WTSBDUCBpbnRlcmZhY2UiCiAJZGVwZW5kcyBvbiBTMzkwCiAJaGVscAogCSAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgY29udHJvbAogCSAgcHJvZ3JhbSBvbiB6L1ZNCiAKIGNvbmZpZyBNT05SRUFERVIKLQl0cmlzdGF0ZSAiQVBJIGZvciByZWFkaW5nIHovVk0gbW9uaXRvciBzZXJ2aWNlIHJlY29yZHMiCisJZGVmX3RyaXN0YXRlIG0KKwlwcm9tcHQgIkFQSSBmb3IgcmVhZGluZyB6L1ZNIG1vbml0b3Igc2VydmljZSByZWNvcmRzIgogCWRlcGVuZHMgb24gSVVDVgogCWhlbHAKIAkgIENoYXJhY3RlciBkZXZpY2UgZHJpdmVyIGZvciByZWFkaW5nIHovVk0gbW9uaXRvciBzZXJ2aWNlIHJlY29yZHMKIAogY29uZmlnIE1PTldSSVRFUgotCXRyaXN0YXRlICJBUEkgZm9yIHdyaXRpbmcgei9WTSBtb25pdG9yIHNlcnZpY2UgcmVjb3JkcyIKKwlkZWZfdHJpc3RhdGUgbQorCXByb21wdCAiQVBJIGZvciB3cml0aW5nIHovVk0gbW9uaXRvciBzZXJ2aWNlIHJlY29yZHMiCiAJZGVwZW5kcyBvbiBTMzkwCi0JZGVmYXVsdCAibSIKIAloZWxwCiAJICBDaGFyYWN0ZXIgZGV2aWNlIGRyaXZlciBmb3Igd3JpdGluZyB6L1ZNIG1vbml0b3Igc2VydmljZSByZWNvcmRzCiAKIGNvbmZpZyBTMzkwX1ZNVVIKLQl0cmlzdGF0ZSAiei9WTSB1bml0IHJlY29yZCBkZXZpY2UgZHJpdmVyIgorCWRlZl90cmlzdGF0ZSBtCisJcHJvbXB0ICJ6L1ZNIHVuaXQgcmVjb3JkIGRldmljZSBkcml2ZXIiCiAJZGVwZW5kcyBvbiBTMzkwCi0JZGVmYXVsdCAibSIKIAloZWxwCiAJICBDaGFyYWN0ZXIgZGV2aWNlIGRyaXZlciBmb3Igei9WTSByZWFkZXIsIHB1bmNoZXIgYW5kIHByaW50ZXIuCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL2NvbjMyMTUuYyBiL2RyaXZlcnMvczM5MC9jaGFyL2NvbjMyMTUuYwppbmRleCA1OWVjMDczLi4zZmI0MzM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci9jb24zMjE1LmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvY29uMzIxNS5jCkBAIC05LDYgKzksNyBAQAogICoJICAgICAgRGFuIE1vcnJpc29uLCBJQk0gQ29ycG9yYXRpb24gPGRtb3JyaXNvQGNzZS5idWZmYWxvLmVkdT4KICAqLwogCisjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tkZXZfdC5oPgpAQCAtMzYxLDYgKzM2Miw3IEBACiAJaW50IGNzdGF0LCBkc3RhdDsKIAlpbnQgY291bnQ7CiAKKwlrc3RhdF9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpKS5pcnFzW0lPSU5UX0MxNV0rKzsKIAlyYXcgPSBkZXZfZ2V0X2RydmRhdGEoJmNkZXYtPmRldik7CiAJcmVxID0gKHN0cnVjdCByYXczMjE1X3JlcSAqKSBpbnRwYXJtOwogCWNzdGF0ID0gaXJiLT5zY3N3LmNtZC5jc3RhdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3JhdzMyNzAuYyBiL2RyaXZlcnMvczM5MC9jaGFyL3JhdzMyNzAuYwppbmRleCAyYTRjNTY2Li45NmJhMmZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci9yYXczMjcwLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvcmF3MzI3MC5jCkBAIC03LDYgKzcsNyBAQAogICogICAgIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwMywgMjAwOQogICovCiAKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTMyOSw2ICszMzAsNyBAQAogCXN0cnVjdCByYXczMjcwX3JlcXVlc3QgKnJxOwogCWludCByYzsKIAorCWtzdGF0X2NwdShzbXBfcHJvY2Vzc29yX2lkKCkpLmlycXNbSU9JTlRfQzcwXSsrOwogCXJwID0gZGV2X2dldF9kcnZkYXRhKCZjZGV2LT5kZXYpOwogCWlmICghcnApCiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3NjbHAuYyBiL2RyaXZlcnMvczM5MC9jaGFyL3NjbHAuYwppbmRleCAzNWNjNDY4Li5iNzZjNjFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci9zY2xwLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvc2NscC5jCkBAIC03LDYgKzcsNyBAQAogICoJICAgICAgTWFydGluIFNjaHdpZGVmc2t5IDxzY2h3aWRlZnNreUBkZS5pYm0uY29tPgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CkBAIC0xOCwxNiArMTksMTQgQEAKICNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9zMzkwX2V4dC5oPgorI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KIAogI2luY2x1ZGUgInNjbHAuaCIKIAogI2RlZmluZSBTQ0xQX0hFQURFUgkJInNjbHA6ICIKIAotLyogU3RydWN0dXJlIGZvciByZWdpc3Rlcl9lYXJseV9leHRlcm5hbF9pbnRlcnJ1cHQuICovCi1zdGF0aWMgZXh0X2ludF9pbmZvX3QgZXh0X2ludF9pbmZvX2h3YzsKLQogLyogTG9jayB0byBwcm90ZWN0IGludGVybmFsIGRhdGEgY29uc2lzdGVuY3kuICovCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHNjbHBfbG9jayk7CiAKQEAgLTQwMiw2ICs0MDEsNyBAQAogCXUzMiBmaW5pc2hlZF9zY2NiOwogCXUzMiBldmJ1Zl9wZW5kaW5nOwogCisJa3N0YXRfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSkuaXJxc1tFWFRJTlRfU0NQXSsrOwogCXNwaW5fbG9jaygmc2NscF9sb2NrKTsKIAlmaW5pc2hlZF9zY2NiID0gcGFyYW0zMiAmIDB4ZmZmZmZmZjg7CiAJZXZidWZfcGVuZGluZyA9IHBhcmFtMzIgJiAweDM7CkBAIC04MjQsNiArODI0LDcgQEAKIHsKIAl1MzIgZmluaXNoZWRfc2NjYjsKIAorCWtzdGF0X2NwdShzbXBfcHJvY2Vzc29yX2lkKCkpLmlycXNbRVhUSU5UX1NDUF0rKzsKIAlmaW5pc2hlZF9zY2NiID0gcGFyYW0zMiAmIDB4ZmZmZmZmZjg7CiAJLyogSXMgdGhpcyB0aGUgaW50ZXJydXB0IHdlIGFyZSB3YWl0aW5nIGZvcj8gKi8KIAlpZiAoZmluaXNoZWRfc2NjYiA9PSAwKQpAQCAtODY2LDggKzg2Nyw3IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc2NscF9sb2NrLCBmbGFncyk7CiAJLyogUHJlcGFyZSBpbml0IG1hc2sgY29tbWFuZCAqLwotCXJjID0gcmVnaXN0ZXJfZWFybHlfZXh0ZXJuYWxfaW50ZXJydXB0KDB4MjQwMSwgc2NscF9jaGVja19oYW5kbGVyLAotCQkJCQkgICAgICAgJmV4dF9pbnRfaW5mb19od2MpOworCXJjID0gcmVnaXN0ZXJfZXh0ZXJuYWxfaW50ZXJydXB0KDB4MjQwMSwgc2NscF9jaGVja19oYW5kbGVyKTsKIAlpZiAocmMpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2NscF9sb2NrLCBmbGFncyk7CiAJCXJldHVybiByYzsKQEAgLTkwMCw4ICs5MDAsNyBAQAogCQl9IGVsc2UKIAkJCXJjID0gLUVCVVNZOwogCX0KLQl1bnJlZ2lzdGVyX2Vhcmx5X2V4dGVybmFsX2ludGVycnVwdCgweDI0MDEsIHNjbHBfY2hlY2tfaGFuZGxlciwKLQkJCQkJICAgICZleHRfaW50X2luZm9faHdjKTsKKwl1bnJlZ2lzdGVyX2V4dGVybmFsX2ludGVycnVwdCgweDI0MDEsIHNjbHBfY2hlY2tfaGFuZGxlcik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2NscF9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIHJjOwogfQpAQCAtMTA2NCw4ICsxMDYzLDcgQEAKIAlpZiAocmMpCiAJCWdvdG8gZmFpbF9pbml0X3N0YXRlX3VuaW5pdGlhbGl6ZWQ7CiAJLyogUmVnaXN0ZXIgaW50ZXJydXB0IGhhbmRsZXIgKi8KLQlyYyA9IHJlZ2lzdGVyX2Vhcmx5X2V4dGVybmFsX2ludGVycnVwdCgweDI0MDEsIHNjbHBfaW50ZXJydXB0X2hhbmRsZXIsCi0JCQkJCSAgICAgICAmZXh0X2ludF9pbmZvX2h3Yyk7CisJcmMgPSByZWdpc3Rlcl9leHRlcm5hbF9pbnRlcnJ1cHQoMHgyNDAxLCBzY2xwX2ludGVycnVwdF9oYW5kbGVyKTsKIAlpZiAocmMpCiAJCWdvdG8gZmFpbF91bnJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcjsKIAlzY2xwX2luaXRfc3RhdGUgPSBzY2xwX2luaXRfc3RhdGVfaW5pdGlhbGl6ZWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX2NvbmZpZy5jIGIvZHJpdmVycy9zMzkwL2NoYXIvc2NscF9jb25maWcuYwppbmRleCBiNDk3YWZlLi4xNmUyMzJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX2NvbmZpZy5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3NjbHBfY29uZmlnLmMKQEAgLTMzLDYgKzMzLDcgQEAKIAlpbnQgY3B1OwogCXN0cnVjdCBzeXNfZGV2aWNlICpzeXNkZXY7CiAKKwlzMzkwX2FkanVzdF9qaWZmaWVzKCk7CiAJcHJfd2FybmluZygiY3B1IGNhcGFiaWxpdHkgY2hhbmdlZC5cbiIpOwogCWdldF9vbmxpbmVfY3B1cygpOwogCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlXzM1OTAuYyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfMzU5MC5jCmluZGV4IGRlZmYyYzMuLmZiZTM2MWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfMzU5MC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfMzU5MC5jCkBAIC0yNCw2ICsyNCw4IEBACiAjaW5jbHVkZSAidGFwZV9zdGQuaCIKICNpbmNsdWRlICJ0YXBlXzM1OTAuaCIKIAorc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp0YXBlXzM1OTBfd3E7CisKIC8qCiAgKiBQb2ludGVyIHRvIGRlYnVnIGFyZWEuCiAgKi8KQEAgLTYxMyw3ICs2MTUsNyBAQAogCXAtPmRldmljZSA9IHRhcGVfZ2V0X2RldmljZShkZXZpY2UpOwogCXAtPm9wID0gb3A7CiAKLQlzY2hlZHVsZV93b3JrKCZwLT53b3JrKTsKKwlxdWV1ZV93b3JrKHRhcGVfMzU5MF93cSwgJnAtPndvcmspOwogCXJldHVybiAwOwogfQogCkBAIC0xNjI5LDcgKzE2MzEsNyBAQAogc3RhdGljIHZvaWQKIHRhcGVfMzU5MF9jbGVhbnVwX2RldmljZShzdHJ1Y3QgdGFwZV9kZXZpY2UgKmRldmljZSkKIHsKLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCWZsdXNoX3dvcmtxdWV1ZSh0YXBlXzM1OTBfd3EpOwogCXRhcGVfc3RkX3VuYXNzaWduKGRldmljZSk7CiAKIAlrZnJlZShkZXZpY2UtPmRpc2NkYXRhKTsKQEAgLTE3MzMsMTEgKzE3MzUsMTcgQEAKICNlbmRpZgogCiAJREJGX0VWRU5UKDMsICIzNTkwIGluaXRcbiIpOworCisJdGFwZV8zNTkwX3dxID0gYWxsb2Nfd29ya3F1ZXVlKCJ0YXBlXzM1OTAiLCAwLCAwKTsKKwlpZiAoIXRhcGVfMzU5MF93cSkKKwkJcmV0dXJuIC1FTk9NRU07CisKIAkvKiBSZWdpc3RlciBkcml2ZXIgZm9yIDM1OTAgdGFwZXMuICovCiAJcmMgPSBjY3dfZHJpdmVyX3JlZ2lzdGVyKCZ0YXBlXzM1OTBfZHJpdmVyKTsKLQlpZiAocmMpCisJaWYgKHJjKSB7CisJCWRlc3Ryb3lfd29ya3F1ZXVlKHRhcGVfMzU5MF93cSk7CiAJCURCRl9FVkVOVCgzLCAiMzU5MCBpbml0IGZhaWxlZFxuIik7Ci0JZWxzZQorCX0gZWxzZQogCQlEQkZfRVZFTlQoMywgIjM1OTAgcmVnaXN0ZXJlZFxuIik7CiAJcmV0dXJuIHJjOwogfQpAQCAtMTc0Niw3ICsxNzU0LDcgQEAKIHRhcGVfMzU5MF9leGl0KHZvaWQpCiB7CiAJY2N3X2RyaXZlcl91bnJlZ2lzdGVyKCZ0YXBlXzM1OTBfZHJpdmVyKTsKLQorCWRlc3Ryb3lfd29ya3F1ZXVlKHRhcGVfMzU5MF93cSk7CiAJZGVidWdfdW5yZWdpc3RlcihUQVBFX0RCRl9BUkVBKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9ibG9jay5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9ibG9jay5jCmluZGV4IGYwZmE5Y2EuLjU1ZDJkMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfYmxvY2suYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2Jsb2NrLmMKQEAgLTI2NCw3ICsyNjQsNyBAQAogdm9pZAogdGFwZWJsb2NrX2NsZWFudXBfZGV2aWNlKHN0cnVjdCB0YXBlX2RldmljZSAqZGV2aWNlKQogewotCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisJZmx1c2hfd29ya19zeW5jKCZkZXZpY2UtPmJsa19kYXRhLnJlcXVldWVfdGFzayk7CiAJdGFwZV9wdXRfZGV2aWNlKGRldmljZSk7CiAKIAlpZiAoIWRldmljZS0+YmxrX2RhdGEuZGlzaykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jb3JlLmMgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2NvcmUuYwppbmRleCBiM2EzZThlLi43OTc4YTBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2NvcmUuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2NvcmUuYwpAQCAtMTQsNiArMTQsNyBAQAogI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAidGFwZSIKICNkZWZpbmUgcHJfZm10KGZtdCkgS01TR19DT01QT05FTlQgIjogIiBmbXQKIAorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgkgICAgIC8vIGZvciBrZXJuZWwgcGFyYW1ldGVycwogI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4JICAgICAvLyBmb3IgcmVxdWVzdGluZyBtb2R1bGVzCkBAIC0xMTE0LDYgKzExMTUsNyBAQAogCXN0cnVjdCB0YXBlX3JlcXVlc3QgKnJlcXVlc3Q7CiAJaW50IHJjOwogCisJa3N0YXRfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSkuaXJxc1tJT0lOVF9UQVBdKys7CiAJZGV2aWNlID0gZGV2X2dldF9kcnZkYXRhKCZjZGV2LT5kZXYpOwogCWlmIChkZXZpY2UgPT0gTlVMTCkgewogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci92bXVyLmMgYi9kcml2ZXJzL3MzOTAvY2hhci92bXVyLmMKaW5kZXggZjdlNGFlNi4uY2FlZjE3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdm11ci5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3ZtdXIuYwpAQCAtMTEsNiArMTEsNyBAQAogI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAidm11ciIKICNkZWZpbmUgcHJfZm10KGZtdCkgS01TR19DT01QT05FTlQgIjogIiBmbXQKIAorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvY2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIApAQCAtMzAyLDYgKzMwMyw3IEBACiB7CiAJc3RydWN0IHVyZGV2ICp1cmQ7CiAKKwlrc3RhdF9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpKS5pcnFzW0lPSU5UX1ZNUl0rKzsKIAlUUkFDRSgidXJfaW50X2hhbmRsZXI6IGludHBhcm09MHglbHggY3N0YXQ9JTAyeCBkc3RhdD0lMDJ4IHJlcz0ldVxuIiwKIAkgICAgICBpbnRwYXJtLCBpcmItPnNjc3cuY21kLmNzdGF0LCBpcmItPnNjc3cuY21kLmRzdGF0LAogCSAgICAgIGlyYi0+c2Nzdy5jbWQuY291bnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9jY3dncm91cC5jIGIvZHJpdmVycy9zMzkwL2Npby9jY3dncm91cC5jCmluZGV4IDk3YjI1ZDYuLjI4NjQ1ODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vY2N3Z3JvdXAuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2Njd2dyb3VwLmMKQEAgLTY3LDYgKzY3LDI3IEBACiB9CiAKIC8qCisgKiBSZW1vdmUgcmVmZXJlbmNlcyBmcm9tIGNjdyBkZXZpY2VzIHRvIGNjdyBncm91cCBkZXZpY2UgYW5kIGZyb20KKyAqIGNjdyBncm91cCBkZXZpY2UgdG8gY2N3IGRldmljZXMuCisgKi8KK3N0YXRpYyB2b2lkIF9fY2N3Z3JvdXBfcmVtb3ZlX2NkZXZfcmVmcyhzdHJ1Y3QgY2N3Z3JvdXBfZGV2aWNlICpnZGV2KQoreworCXN0cnVjdCBjY3dfZGV2aWNlICpjZGV2OworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGdkZXYtPmNvdW50OyBpKyspIHsKKwkJY2RldiA9IGdkZXYtPmNkZXZbaV07CisJCWlmICghY2RldikKKwkJCWNvbnRpbnVlOworCQlzcGluX2xvY2tfaXJxKGNkZXYtPmNjd2xvY2spOworCQlkZXZfc2V0X2RydmRhdGEoJmNkZXYtPmRldiwgTlVMTCk7CisJCXNwaW5fdW5sb2NrX2lycShjZGV2LT5jY3dsb2NrKTsKKwkJZ2Rldi0+Y2RldltpXSA9IE5VTEw7CisJCXB1dF9kZXZpY2UoJmNkZXYtPmRldik7CisJfQorfQorCisvKgogICogUHJvdmlkZSBhbiAndW5ncm91cCcgYXR0cmlidXRlIHNvIHRoZSB1c2VyIGNhbiByZW1vdmUgZ3JvdXAgZGV2aWNlcyBubwogICogbG9uZ2VyIG5lZWRlZCBvciBhY2NpZGVudGlhbGx5IGNyZWF0ZWQuIFNhdmVzIG1lbW9yeSA6KQogICovCkBAIC03OCw2ICs5OSw3IEBACiAJaWYgKGRldmljZV9pc19yZWdpc3RlcmVkKCZnZGV2LT5kZXYpKSB7CiAJCV9fY2N3Z3JvdXBfcmVtb3ZlX3N5bWxpbmtzKGdkZXYpOwogCQlkZXZpY2VfdW5yZWdpc3RlcihkZXYpOworCQlfX2Njd2dyb3VwX3JlbW92ZV9jZGV2X3JlZnMoZ2Rldik7CiAJfQogCW11dGV4X3VubG9jaygmZ2Rldi0+cmVnX211dGV4KTsKIH0KQEAgLTExNiwyMSArMTM4LDcgQEAKIHN0YXRpYyB2b2lkCiBjY3dncm91cF9yZWxlYXNlIChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGNjd2dyb3VwX2RldmljZSAqZ2RldjsKLQlpbnQgaTsKLQotCWdkZXYgPSB0b19jY3dncm91cGRldihkZXYpOwotCi0JZm9yIChpID0gMDsgaSA8IGdkZXYtPmNvdW50OyBpKyspIHsKLQkJaWYgKGdkZXYtPmNkZXZbaV0pIHsKLQkJCXNwaW5fbG9ja19pcnEoZ2Rldi0+Y2RldltpXS0+Y2N3bG9jayk7Ci0JCQlpZiAoZGV2X2dldF9kcnZkYXRhKCZnZGV2LT5jZGV2W2ldLT5kZXYpID09IGdkZXYpCi0JCQkJZGV2X3NldF9kcnZkYXRhKCZnZGV2LT5jZGV2W2ldLT5kZXYsIE5VTEwpOwotCQkJc3Bpbl91bmxvY2tfaXJxKGdkZXYtPmNkZXZbaV0tPmNjd2xvY2spOwotCQkJcHV0X2RldmljZSgmZ2Rldi0+Y2RldltpXS0+ZGV2KTsKLQkJfQotCX0KLQlrZnJlZShnZGV2KTsKKwlrZnJlZSh0b19jY3dncm91cGRldihkZXYpKTsKIH0KIAogc3RhdGljIGludApAQCAtNjM5LDYgKzY0Nyw3IEBACiAJCW11dGV4X2xvY2soJmdkZXYtPnJlZ19tdXRleCk7CiAJCV9fY2N3Z3JvdXBfcmVtb3ZlX3N5bWxpbmtzKGdkZXYpOwogCQlkZXZpY2VfdW5yZWdpc3RlcihkZXYpOworCQlfX2Njd2dyb3VwX3JlbW92ZV9jZGV2X3JlZnMoZ2Rldik7CiAJCW11dGV4X3VubG9jaygmZ2Rldi0+cmVnX211dGV4KTsKIAkJcHV0X2RldmljZShkZXYpOwogCX0KQEAgLTY2MCwyNSArNjY5LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBjY3dncm91cF9kZXZpY2UgKgotX19jY3dncm91cF9nZXRfZ2Rldl9ieV9jZGV2KHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KQotewotCXN0cnVjdCBjY3dncm91cF9kZXZpY2UgKmdkZXY7Ci0KLQlnZGV2ID0gZGV2X2dldF9kcnZkYXRhKCZjZGV2LT5kZXYpOwotCWlmIChnZGV2KSB7Ci0JCWlmIChnZXRfZGV2aWNlKCZnZGV2LT5kZXYpKSB7Ci0JCQltdXRleF9sb2NrKCZnZGV2LT5yZWdfbXV0ZXgpOwotCQkJaWYgKGRldmljZV9pc19yZWdpc3RlcmVkKCZnZGV2LT5kZXYpKQotCQkJCXJldHVybiBnZGV2OwotCQkJbXV0ZXhfdW5sb2NrKCZnZGV2LT5yZWdfbXV0ZXgpOwotCQkJcHV0X2RldmljZSgmZ2Rldi0+ZGV2KTsKLQkJfQotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KIC8qKgogICogY2N3Z3JvdXBfcmVtb3ZlX2Njd2RldigpIC0gcmVtb3ZlIGZ1bmN0aW9uIGZvciBzbGF2ZSBkZXZpY2VzCiAgKiBAY2RldjogY2N3IGRldmljZSB0byBiZSByZW1vdmVkCkBAIC02OTQsMTMgKzY4NCwyNSBAQAogCS8qIElnbm9yZSBvZmZsaW5pbmcgZXJyb3JzLCBkZXZpY2UgaXMgZ29uZSBhbnl3YXkuICovCiAJY2N3X2RldmljZV9zZXRfb2ZmbGluZShjZGV2KTsKIAkvKiBJZiBvbmUgb2YgaXRzIGRldmljZXMgaXMgZ29uZSwgdGhlIHdob2xlIGdyb3VwIGlzIGRvbmUgZm9yLiAqLwotCWdkZXYgPSBfX2Njd2dyb3VwX2dldF9nZGV2X2J5X2NkZXYoY2Rldik7Ci0JaWYgKGdkZXYpIHsKKwlzcGluX2xvY2tfaXJxKGNkZXYtPmNjd2xvY2spOworCWdkZXYgPSBkZXZfZ2V0X2RydmRhdGEoJmNkZXYtPmRldik7CisJaWYgKCFnZGV2KSB7CisJCXNwaW5fdW5sb2NrX2lycShjZGV2LT5jY3dsb2NrKTsKKwkJcmV0dXJuOworCX0KKwkvKiBHZXQgY2N3Z3JvdXAgZGV2aWNlIHJlZmVyZW5jZSBmb3IgbG9jYWwgcHJvY2Vzc2luZy4gKi8KKwlnZXRfZGV2aWNlKCZnZGV2LT5kZXYpOworCXNwaW5fdW5sb2NrX2lycShjZGV2LT5jY3dsb2NrKTsKKwkvKiBVbnJlZ2lzdGVyIGdyb3VwIGRldmljZS4gKi8KKwltdXRleF9sb2NrKCZnZGV2LT5yZWdfbXV0ZXgpOworCWlmIChkZXZpY2VfaXNfcmVnaXN0ZXJlZCgmZ2Rldi0+ZGV2KSkgewogCQlfX2Njd2dyb3VwX3JlbW92ZV9zeW1saW5rcyhnZGV2KTsKIAkJZGV2aWNlX3VucmVnaXN0ZXIoJmdkZXYtPmRldik7Ci0JCW11dGV4X3VubG9jaygmZ2Rldi0+cmVnX211dGV4KTsKLQkJcHV0X2RldmljZSgmZ2Rldi0+ZGV2KTsKKwkJX19jY3dncm91cF9yZW1vdmVfY2Rldl9yZWZzKGdkZXYpOwogCX0KKwltdXRleF91bmxvY2soJmdkZXYtPnJlZ19tdXRleCk7CisJLyogUmVsZWFzZSBjY3dncm91cCBkZXZpY2UgcmVmZXJlbmNlIGZvciBsb2NhbCBwcm9jZXNzaW5nLiAqLworCXB1dF9kZXZpY2UoJmdkZXYtPmRldik7CiB9CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vY2hzYy5jIGIvZHJpdmVycy9zMzkwL2Npby9jaHNjLmMKaW5kZXggMWFhZGRlYS4uMDY4OWZjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9jaHNjLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9jaHNjLmMKQEAgLTY5NSw2ICs2OTUsMjUgQEAKIAlyZXR1cm4gcmV0OwogfQogCitpbnQgY2hzY19kZXRlcm1pbmVfZm10MV9jaGFubmVsX3BhdGhfZGVzYyhzdHJ1Y3QgY2hwX2lkIGNocGlkLAorCQkJCQkgIHN0cnVjdCBjaGFubmVsX3BhdGhfZGVzY19mbXQxICpkZXNjKQoreworCXN0cnVjdCBjaHNjX3Jlc3BvbnNlX3N0cnVjdCAqY2hzY19yZXNwOworCXN0cnVjdCBjaHNjX3NjcGQgKnNjcGRfYXJlYTsKKwlpbnQgcmV0OworCisJc3Bpbl9sb2NrX2lycSgmY2hzY19wYWdlX2xvY2spOworCXNjcGRfYXJlYSA9IGNoc2NfcGFnZTsKKwlyZXQgPSBjaHNjX2RldGVybWluZV9jaGFubmVsX3BhdGhfZGVzYyhjaHBpZCwgMCwgMCwgMSwgMCwgc2NwZF9hcmVhKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKwljaHNjX3Jlc3AgPSAodm9pZCAqKSZzY3BkX2FyZWEtPnJlc3BvbnNlOworCW1lbWNweShkZXNjLCAmY2hzY19yZXNwLT5kYXRhLCBzaXplb2YoKmRlc2MpKTsKK291dDoKKwlzcGluX3VubG9ja19pcnEoJmNoc2NfcGFnZV9sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgdm9pZAogY2hzY19pbml0aWFsaXplX2NtZ19jaGFycyhzdHJ1Y3QgY2hhbm5lbF9wYXRoICpjaHAsIHU4IGNtY3YsCiAJCQkgIHN0cnVjdCBjbWdfY2hhcnMgKmNoYXJzKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9jaHNjLmggYi9kcml2ZXJzL3MzOTAvY2lvL2Noc2MuaAppbmRleCA2NjkzZjVlLi4zZjE1YjJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2Noc2MuaAorKysgYi9kcml2ZXJzL3MzOTAvY2lvL2Noc2MuaApAQCAtMzUsNiArMzUsMjIgQEAKIAl1OCBjaHBwOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKK3N0cnVjdCBjaGFubmVsX3BhdGhfZGVzY19mbXQxIHsKKwl1OCBmbGFnczsKKwl1OCBsc247CisJdTggZGVzYzsKKwl1OCBjaHBpZDsKKwl1MzI6MjQ7CisJdTggY2hwcDsKKwl1MzIgdW51c2VkWzNdOworCXUxNiBtZGM7CisJdTE2OjEzOworCXU4IHI6MTsKKwl1OCBzOjE7CisJdTggZjoxOworCXUzMiB6ZXJvc1syXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCiBzdHJ1Y3QgY2hhbm5lbF9wYXRoOwogCiBzdHJ1Y3QgY3NzX2Noc2NfY2hhciB7CkBAIC05Miw2ICsxMDgsOCBAQAogCQkJCSAgICAgaW50IGMsIGludCBtLCB2b2lkICpwYWdlKTsKIGludCBjaHNjX2RldGVybWluZV9iYXNlX2NoYW5uZWxfcGF0aF9kZXNjKHN0cnVjdCBjaHBfaWQgY2hwaWQsCiAJCQkJCSAgc3RydWN0IGNoYW5uZWxfcGF0aF9kZXNjICpkZXNjKTsKK2ludCBjaHNjX2RldGVybWluZV9mbXQxX2NoYW5uZWxfcGF0aF9kZXNjKHN0cnVjdCBjaHBfaWQgY2hwaWQsCisJCQkJCSAgc3RydWN0IGNoYW5uZWxfcGF0aF9kZXNjX2ZtdDEgKmRlc2MpOwogdm9pZCBjaHNjX2NocF9vbmxpbmUoc3RydWN0IGNocF9pZCBjaHBpZCk7CiB2b2lkIGNoc2NfY2hwX29mZmxpbmUoc3RydWN0IGNocF9pZCBjaHBpZCk7CiBpbnQgY2hzY19nZXRfY2hhbm5lbF9tZWFzdXJlbWVudF9jaGFycyhzdHJ1Y3QgY2hhbm5lbF9wYXRoICpjaHApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9jaW8uYyBiL2RyaXZlcnMvczM5MC9jaW8vY2lvLmMKaW5kZXggZjRlNmNmMy4uNDMwZjg3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9jaW8uYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2Npby5jCkBAIC02MTksNyArNjE5LDcgQEAKIAlzMzkwX2lkbGVfY2hlY2socmVncywgUzM5MF9sb3djb3JlLmludF9jbG9jaywKIAkJCVMzOTBfbG93Y29yZS5hc3luY19lbnRlcl90aW1lcik7CiAJaXJxX2VudGVyKCk7Ci0JX19nZXRfY3B1X3ZhcihzMzkwX2lkbGUpLm5vaHpfZGVsYXkgPSAxOworCV9fdGhpc19jcHVfd3JpdGUoczM5MF9pZGxlLm5vaHpfZGVsYXksIDEpOwogCWlmIChTMzkwX2xvd2NvcmUuaW50X2Nsb2NrID49IFMzOTBfbG93Y29yZS5jbG9ja19jb21wYXJhdG9yKQogCQkvKiBTZXJ2ZSB0aW1lciBpbnRlcnJ1cHRzIGZpcnN0LiAqLwogCQljbG9ja19jb21wYXJhdG9yX3dvcmsoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vY3NzLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2Nzcy5jCmluZGV4IDgyNTk1MWIuLjI0ZDhlOTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vY3NzLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9jc3MuYwpAQCAtNjE4LDYgKzYxOCw3IEBACiBzdGF0aWMgdm9pZCBjc3NfcHJvY2Vzc19jcncoc3RydWN0IGNydyAqY3J3MCwgc3RydWN0IGNydyAqY3J3MSwgaW50IG92ZXJmbG93KQogewogCXN0cnVjdCBzdWJjaGFubmVsX2lkIG1jaGtfc2NoaWQ7CisJc3RydWN0IHN1YmNoYW5uZWwgKnNjaDsKIAogCWlmIChvdmVyZmxvdykgewogCQljc3Nfc2NoZWR1bGVfZXZhbF9hbGwoKTsKQEAgLTYzNyw2ICs2MzgsMTMgQEAKIAlpZiAoY3J3MSkKIAkJbWNoa19zY2hpZC5zc2lkID0gKGNydzEtPnJzaWQgPj4gNCkgJiAzOwogCisJaWYgKGNydzAtPmVyYyA9PSBDUldfRVJDX1BNT0QpIHsKKwkJc2NoID0gZ2V0X3N1YmNoYW5uZWxfYnlfc2NoaWQobWNoa19zY2hpZCk7CisJCWlmIChzY2gpIHsKKwkJCWNzc191cGRhdGVfc3NkX2luZm8oc2NoKTsKKwkJCXB1dF9kZXZpY2UoJnNjaC0+ZGV2KTsKKwkJfQorCX0KIAkvKgogCSAqIFNpbmNlIHdlIGFyZSBhbHdheXMgcHJlc2VudGVkIHdpdGggSVBJIGluIHRoZSBDUlcsIHdlIGhhdmUgdG8KIAkgKiB1c2Ugc3RzY2goKSB0byBmaW5kIG91dCBpZiB0aGUgc3ViY2hhbm5lbCBpbiBxdWVzdGlvbiBoYXMgY29tZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2Vfb3BzLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9vcHMuYwppbmRleCA2ZGE4NDU0Li42NTE5NzZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9vcHMuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9vcHMuYwpAQCAtNjg3LDYgKzY4Nyw0NiBAQAogRVhQT1JUX1NZTUJPTChjY3dfZGV2aWNlX3RtX3N0YXJ0X3RpbWVvdXQpOwogCiAvKioKKyAqIGNjd19kZXZpY2VfZ2V0X21kYyAtIGFjY3VtdWxhdGUgbWF4IGRhdGEgY291bnQKKyAqIEBjZGV2OiBjY3cgZGV2aWNlIGZvciB3aGljaCB0aGUgbWF4IGRhdGEgY291bnQgaXMgYWNjdW11bGF0ZWQKKyAqIEBtYXNrOiBtYXNrIG9mIHBhdGhzIHRvIHVzZQorICoKKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIDY0Sy1ieXRlcyBibG9ja3MgYWxsIHBhdGhzIGF0IGxlYXN0IHN1cHBvcnQKKyAqIGZvciBhIHRyYW5zcG9ydCBjb21tYW5kLiBSZXR1cm4gdmFsdWVzIDw9IDAgaW5kaWNhdGUgZmFpbHVyZXMuCisgKi8KK2ludCBjY3dfZGV2aWNlX2dldF9tZGMoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYsIHU4IG1hc2spCit7CisJc3RydWN0IHN1YmNoYW5uZWwgKnNjaCA9IHRvX3N1YmNoYW5uZWwoY2Rldi0+ZGV2LnBhcmVudCk7CisJc3RydWN0IGNoYW5uZWxfcGF0aF9kZXNjX2ZtdDEgZGVzYzsKKwlzdHJ1Y3QgY2hwX2lkIGNocGlkOworCWludCBtZGMgPSAwLCByZXQsIGk7CisKKwkvKiBBZGp1c3QgcmVxdWVzdGVkIHBhdGggbWFzayB0byBleGNsdWRlZCB2YXJpZWQgb2ZmIHBhdGhzLiAqLworCWlmIChtYXNrKQorCQltYXNrICY9IHNjaC0+bHBtOworCWVsc2UKKwkJbWFzayA9IHNjaC0+bHBtOworCisJY2hwX2lkX2luaXQoJmNocGlkKTsKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCWlmICghKG1hc2sgJiAoMHg4MCA+PiBpKSkpCisJCQljb250aW51ZTsKKwkJY2hwaWQuaWQgPSBzY2gtPnNjaGliLnBtY3cuY2hwaWRbaV07CisJCXJldCA9IGNoc2NfZGV0ZXJtaW5lX2ZtdDFfY2hhbm5lbF9wYXRoX2Rlc2MoY2hwaWQsICZkZXNjKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJCWlmICghZGVzYy5mKQorCQkJcmV0dXJuIDA7CisJCWlmICghZGVzYy5yKQorCQkJbWRjID0gMTsKKwkJbWRjID0gbWRjID8gbWluKG1kYywgKGludClkZXNjLm1kYykgOiBkZXNjLm1kYzsKKwl9CisKKwlyZXR1cm4gbWRjOworfQorRVhQT1JUX1NZTUJPTChjY3dfZGV2aWNlX2dldF9tZGMpOworCisvKioKICAqIGNjd19kZXZpY2VfdG1faW50cmcgLSBwZXJmb3JtIGludGVycm9nYXRlIGZ1bmN0aW9uCiAgKiBAY2RldjogY2N3IGRldmljZSBvbiB3aGljaCB0byBwZXJmb3JtIHRoZSBpbnRlcnJvZ2F0ZSBmdW5jdGlvbgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vaXRjdy5jIGIvZHJpdmVycy9zMzkwL2Npby9pdGN3LmMKaW5kZXggYTBhZTI5NS4uMzU4ZWUxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9pdGN3LmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9pdGN3LmMKQEAgLTkzLDYgKzkzLDcgQEAKIHNpemVfdCBpdGN3X2NhbGNfc2l6ZShpbnQgaW50cmcsIGludCBtYXhfdGlkYXdzLCBpbnQgaW50cmdfbWF4X3RpZGF3cykKIHsKIAlzaXplX3QgbGVuOworCWludCBjcm9zc19jb3VudDsKIAogCS8qIE1haW4gZGF0YS4gKi8KIAlsZW4gPSBzaXplb2Yoc3RydWN0IGl0Y3cpOwpAQCAtMTA1LDEyICsxMDYsMjcgQEAKIAkJICAgICAgIC8qIFRTQiAqLyBzaXplb2Yoc3RydWN0IHRzYikgKwogCQkgICAgICAgLyogVElEQUwgKi8gaW50cmdfbWF4X3RpZGF3cyAqIHNpemVvZihzdHJ1Y3QgdGlkYXcpOwogCX0KKwogCS8qIE1heGltdW0gcmVxdWlyZWQgYWxpZ25tZW50IHBhZGRpbmcuICovCiAJbGVuICs9IC8qIEluaXRpYWwgVENXICovIDYzICsgLyogSW50ZXJyb2dhdGUgVENDQiAqLyA3OwotCS8qIE1heGltdW0gcGFkZGluZyBmb3Igc3RydWN0dXJlcyB0aGF0IG1heSBub3QgY3Jvc3MgNGsgYm91bmRhcnkuICovCi0JaWYgKChtYXhfdGlkYXdzID4gMCkgfHwgKGludHJnX21heF90aWRhd3MgPiAwKSkKLQkJbGVuICs9IG1heChtYXhfdGlkYXdzLCBpbnRyZ19tYXhfdGlkYXdzKSAqCi0JCSAgICAgICBzaXplb2Yoc3RydWN0IHRpZGF3KSAtIDE7CisKKwkvKiBUSURBVyBsaXN0cyBtYXkgbm90IGNyb3NzIGEgNGsgYm91bmRhcnkuIFRvIGNyb3NzIGEKKwkgKiBib3VuZGFyeSB3ZSBuZWVkIHRvIGFkZCBhIFRUSUMgVElEQVcuIFdlIG5lZWQgdG8gcmVzZXJ2ZQorCSAqIG9uZSBhZGRpdGlvbmFsIFRJREFXIGZvciBhIFRUSUMgdGhhdCB3ZSBtYXkgbmVlZCB0byBhZGQgZHVlCisJICogdG8gdGhlIHBsYWNlbWVudCBvZiB0aGUgZGF0YSBjaHVuayBpbiBtZW1vcnksIGFuZCBhIGZ1cnRoZXIKKwkgKiBUSURBVyBmb3IgZWFjaCBwYWdlIGJvdW5kYXJ5IHRoYXQgdGhlIFRJREFXIGxpc3QgbWF5IGNyb3NzCisJICogZHVlIHRvIGl0J3Mgb3duIHNpemUuCisJICovCisJaWYgKG1heF90aWRhd3MpIHsKKwkJY3Jvc3NfY291bnQgPSAxICsgKChtYXhfdGlkYXdzICogc2l6ZW9mKHN0cnVjdCB0aWRhdykgLSAxKQorCQkJCSAgID4+IFBBR0VfU0hJRlQpOworCQlsZW4gKz0gY3Jvc3NfY291bnQgKiBzaXplb2Yoc3RydWN0IHRpZGF3KTsKKwl9CisJaWYgKGludHJnX21heF90aWRhd3MpIHsKKwkJY3Jvc3NfY291bnQgPSAxICsgKChpbnRyZ19tYXhfdGlkYXdzICogc2l6ZW9mKHN0cnVjdCB0aWRhdykgLSAxKQorCQkJCSAgID4+IFBBR0VfU0hJRlQpOworCQlsZW4gKz0gY3Jvc3NfY291bnQgKiBzaXplb2Yoc3RydWN0IHRpZGF3KTsKKwl9CiAJcmV0dXJuIGxlbjsKIH0KIEVYUE9SVF9TWU1CT0woaXRjd19jYWxjX3NpemUpOwpAQCAtMTY1LDYgKzE4MSw3IEBACiAJdm9pZCAqY2h1bms7CiAJYWRkcl90IHN0YXJ0OwogCWFkZHJfdCBlbmQ7CisJaW50IGNyb3NzX2NvdW50OwogCiAJLyogQ2hlY2sgZm9yIDJHIGxpbWl0LiAqLwogCXN0YXJ0ID0gKGFkZHJfdCkgYnVmZmVyOwpAQCAtMTc3LDggKzE5NCwxNyBAQAogCWlmIChJU19FUlIoY2h1bmspKQogCQlyZXR1cm4gY2h1bms7CiAJaXRjdyA9IGNodW5rOwotCWl0Y3ctPm1heF90aWRhd3MgPSBtYXhfdGlkYXdzOwotCWl0Y3ctPmludHJnX21heF90aWRhd3MgPSBpbnRyZ19tYXhfdGlkYXdzOworCS8qIGFsbG93IGZvciBUVElDIHRpZGF3cyB0aGF0IG1heSBiZSBuZWVkZWQgdG8gY3Jvc3MgYSBwYWdlIGJvdW5kYXJ5ICovCisJY3Jvc3NfY291bnQgPSAwOworCWlmIChtYXhfdGlkYXdzKQorCQljcm9zc19jb3VudCA9IDEgKyAoKG1heF90aWRhd3MgKiBzaXplb2Yoc3RydWN0IHRpZGF3KSAtIDEpCisJCQkJICAgPj4gUEFHRV9TSElGVCk7CisJaXRjdy0+bWF4X3RpZGF3cyA9IG1heF90aWRhd3MgKyBjcm9zc19jb3VudDsKKwljcm9zc19jb3VudCA9IDA7CisJaWYgKGludHJnX21heF90aWRhd3MpCisJCWNyb3NzX2NvdW50ID0gMSArICgoaW50cmdfbWF4X3RpZGF3cyAqIHNpemVvZihzdHJ1Y3QgdGlkYXcpIC0gMSkKKwkJCQkgICA+PiBQQUdFX1NISUZUKTsKKwlpdGN3LT5pbnRyZ19tYXhfdGlkYXdzID0gaW50cmdfbWF4X3RpZGF3cyArIGNyb3NzX2NvdW50OwogCS8qIE1haW4gVENXLiAqLwogCWNodW5rID0gZml0X2NodW5rKCZzdGFydCwgZW5kLCBzaXplb2Yoc3RydWN0IHRjdyksIDY0LCAwKTsKIAlpZiAoSVNfRVJSKGNodW5rKSkKQEAgLTE5OCw3ICsyMjQsNyBAQAogCS8qIERhdGEgVElEQUwuICovCiAJaWYgKG1heF90aWRhd3MgPiAwKSB7CiAJCWNodW5rID0gZml0X2NodW5rKCZzdGFydCwgZW5kLCBzaXplb2Yoc3RydWN0IHRpZGF3KSAqCi0JCQkJICBtYXhfdGlkYXdzLCAxNiwgMSk7CisJCQkJICBpdGN3LT5tYXhfdGlkYXdzLCAxNiwgMCk7CiAJCWlmIChJU19FUlIoY2h1bmspKQogCQkJcmV0dXJuIGNodW5rOwogCQl0Y3dfc2V0X2RhdGEoaXRjdy0+dGN3LCBjaHVuaywgMSk7CkBAIC0yMDYsNyArMjMyLDcgQEAKIAkvKiBJbnRlcnJvZ2F0ZSBkYXRhIFRJREFMLiAqLwogCWlmIChpbnRyZyAmJiAoaW50cmdfbWF4X3RpZGF3cyA+IDApKSB7CiAJCWNodW5rID0gZml0X2NodW5rKCZzdGFydCwgZW5kLCBzaXplb2Yoc3RydWN0IHRpZGF3KSAqCi0JCQkJICBpbnRyZ19tYXhfdGlkYXdzLCAxNiwgMSk7CisJCQkJICBpdGN3LT5pbnRyZ19tYXhfdGlkYXdzLCAxNiwgMCk7CiAJCWlmIChJU19FUlIoY2h1bmspKQogCQkJcmV0dXJuIGNodW5rOwogCQl0Y3dfc2V0X2RhdGEoaXRjdy0+aW50cmdfdGN3LCBjaHVuaywgMSk7CkBAIC0yODMsMTMgKzMwOSwyOSBAQAogICogdGhlIG5ldyB0aWRhdyBvbiBzdWNjZXNzIG9yIC0lRU5PU1BDIGlmIHRoZSBuZXcgdGlkYXcgd291bGQgZXhjZWVkIHRoZQogICogYXZhaWxhYmxlIHNwYWNlLgogICoKLSAqIE5vdGU6IHRoZSB0aWRhdy1saXN0IGlzIGFzc3VtZWQgdG8gYmUgY29udGlndW91cyB3aXRoIG5vIHR0aWNzLiBUaGUKLSAqIGxhc3QtdGlkYXcgZmxhZyBmb3IgdGhlIGxhc3QgdGlkYXcgaW4gdGhlIGxpc3Qgd2lsbCBiZSBzZXQgYnkgaXRjd19maW5hbGl6ZS4KKyAqIE5vdGU6IFRUSUMgdGlkYXdzIGFyZSBhdXRvbWF0aWNhbGx5IGFkZGVkIHdoZW4gbmVlZGVkLCBzbyBleHBsaWNpdGx5IGNhbGxpbmcKKyAqIHRoaXMgaW50ZXJmYWNlIHdpdGggdGhlIFRUSUMgZmxhZyBpcyBub3Qgc3VwcG9ydGVkLiBUaGUgbGFzdC10aWRhdyBmbGFnCisgKiBmb3IgdGhlIGxhc3QgdGlkYXcgaW4gdGhlIGxpc3Qgd2lsbCBiZSBzZXQgYnkgaXRjd19maW5hbGl6ZS4KICAqLwogc3RydWN0IHRpZGF3ICppdGN3X2FkZF90aWRhdyhzdHJ1Y3QgaXRjdyAqaXRjdywgdTggZmxhZ3MsIHZvaWQgKmFkZHIsIHUzMiBjb3VudCkKIHsKKwlzdHJ1Y3QgdGlkYXcgKmZvbGxvd2luZzsKKwogCWlmIChpdGN3LT5udW1fdGlkYXdzID49IGl0Y3ctPm1heF90aWRhd3MpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9TUEMpOworCS8qCisJICogSXMgdGhlIHRpZGF3LCB3aGljaCBmb2xsb3dzIHRoZSBvbmUgd2UgYXJlIGFib3V0IHRvIGZpbGwsIG9uIHRoZSBuZXh0CisJICogcGFnZT8gVGhlbiB3ZSBoYXZlIHRvIGluc2VydCBhIFRUSUMgdGlkYXcgZmlyc3QsIHRoYXQgcG9pbnRzIHRvIHRoZQorCSAqIHRpZGF3IG9uIHRoZSBuZXcgcGFnZS4KKwkgKi8KKwlmb2xsb3dpbmcgPSAoKHN0cnVjdCB0aWRhdyAqKSB0Y3dfZ2V0X2RhdGEoaXRjdy0+dGN3KSkKKwkJKyBpdGN3LT5udW1fdGlkYXdzICsgMTsKKwlpZiAoaXRjdy0+bnVtX3RpZGF3cyAmJiAhKCh1bnNpZ25lZCBsb25nKSBmb2xsb3dpbmcgJiB+UEFHRV9NQVNLKSkgeworCQl0Y3dfYWRkX3RpZGF3KGl0Y3ctPnRjdywgaXRjdy0+bnVtX3RpZGF3cysrLAorCQkJICAgICAgVElEQVdfRkxBR1NfVFRJQywgZm9sbG93aW5nLCAwKTsKKwkJaWYgKGl0Y3ctPm51bV90aWRhd3MgPj0gaXRjdy0+bWF4X3RpZGF3cykKKwkJCXJldHVybiBFUlJfUFRSKC1FTk9TUEMpOworCX0KIAlyZXR1cm4gdGN3X2FkZF90aWRhdyhpdGN3LT50Y3csIGl0Y3ctPm51bV90aWRhd3MrKywgZmxhZ3MsIGFkZHIsIGNvdW50KTsKIH0KIEVYUE9SVF9TWU1CT0woaXRjd19hZGRfdGlkYXcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9xZGlvLmggYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW8uaAppbmRleCAwZjRlZjg3Li43YmM2NDNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW8uaAorKysgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW8uaApAQCAtOTEsNiArOTEsMTIgQEAKICNkZWZpbmUgQUMxX1NDX1FFQlNNX0FWQUlMQUJMRQkJMHgwMgkvKiBhdmFpbGFibGUgZm9yIHN1YmNoYW5uZWwgKi8KICNkZWZpbmUgQUMxX1NDX1FFQlNNX0VOQUJMRUQJCTB4MDEJLyogZW5hYmxlZCBmb3Igc3ViY2hhbm5lbCAqLwogCisvKiBTSUdBIGZsYWdzICovCisjZGVmaW5lIFFESU9fU0lHQV9XUklURQkJMHgwMAorI2RlZmluZSBRRElPX1NJR0FfUkVBRAkJMHgwMQorI2RlZmluZSBRRElPX1NJR0FfU1lOQwkJMHgwMgorI2RlZmluZSBRRElPX1NJR0FfUUVCU01fRkxBRwkweDgwCisKICNpZmRlZiBDT05GSUdfNjRCSVQKIHN0YXRpYyBpbmxpbmUgaW50IGRvX3NxYnModTY0IHRva2VuLCB1bnNpZ25lZCBjaGFyIHN0YXRlLCBpbnQgcXVldWUsCiAJCQkgIGludCAqc3RhcnQsIGludCAqY291bnQpCkBAIC0xNDIsMTAgKzE0OCw5IEBACiAJdTggaW5wdXQ6MTsKIAl1OCBvdXRwdXQ6MTsKIAl1OCBzeW5jOjE7Ci0JdTggbm9fc3luY190aToxOwotCXU4IG5vX3N5bmNfb3V0X3RpOjE7Ci0JdTggbm9fc3luY19vdXRfcGNpOjE7Ci0JdTg6MjsKKwl1OCBzeW5jX2FmdGVyX2FpOjE7CisJdTggc3luY19vdXRfYWZ0ZXJfcGNpOjE7CisJdTg6MzsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiBzdHJ1Y3QgY2hzY19zc3FkX2FyZWEgewpAQCAtMjAyLDYgKzIwNyw3IEBACiAJdW5zaWduZWQgaW50IGluYm91bmRfcXVldWVfZnVsbDsKIAl1bnNpZ25lZCBpbnQgb3V0Ym91bmRfY2FsbDsKIAl1bnNpZ25lZCBpbnQgb3V0Ym91bmRfaGFuZGxlcjsKKwl1bnNpZ25lZCBpbnQgb3V0Ym91bmRfcXVldWVfZnVsbDsKIAl1bnNpZ25lZCBpbnQgZmFzdF9yZXF1ZXVlOwogCXVuc2lnbmVkIGludCB0YXJnZXRfZnVsbDsKIAl1bnNpZ25lZCBpbnQgZXFiczsKQEAgLTI0NSwxMCArMjUxLDEwIEBACiBzdHJ1Y3QgcWRpb19vdXRwdXRfcSB7CiAJLyogUENJcyBhcmUgZW5hYmxlZCBmb3IgdGhlIHF1ZXVlICovCiAJaW50IHBjaV9vdXRfZW5hYmxlZDsKLQkvKiBJUURJTzogb3V0cHV0IG11bHRpcGxlIGJ1ZmZlcnMgKGVuaGFuY2VkIFNJR0EpICovCi0JaW50IHVzZV9lbmhfc2lnYTsKIAkvKiB0aW1lciB0byBjaGVjayBmb3IgbW9yZSBvdXRib3VuZCB3b3JrICovCiAJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CisJLyogdXNlZCBTQkFMcyBiZWZvcmUgdGFza2xldCBzY2hlZHVsZSAqLworCWludCBzY2FuX3RocmVzaG9sZDsKIH07CiAKIC8qCkBAIC0zODMsMTIgKzM4OSwxMyBAQAogCShxLT5pcnFfcHRyLT5xaWIuYWMgJiBRSUJfQUNfT1VUQk9VTkRfUENJX1NVUFBPUlRFRCkKICNkZWZpbmUgaXNfcWVic20ocSkJCQkocS0+aXJxX3B0ci0+c2NoX3Rva2VuICE9IDApCiAKLSNkZWZpbmUgbmVlZF9zaWdhX3N5bmNfdGhpbmludChxKQkoIXEtPmlycV9wdHItPnNpZ2FfZmxhZy5ub19zeW5jX3RpKQotI2RlZmluZSBuZWVkX3NpZ2Ffc3luY19vdXRfdGhpbmludChxKQkoIXEtPmlycV9wdHItPnNpZ2FfZmxhZy5ub19zeW5jX291dF90aSkKICNkZWZpbmUgbmVlZF9zaWdhX2luKHEpCQkJKHEtPmlycV9wdHItPnNpZ2FfZmxhZy5pbnB1dCkKICNkZWZpbmUgbmVlZF9zaWdhX291dChxKQkJKHEtPmlycV9wdHItPnNpZ2FfZmxhZy5vdXRwdXQpCi0jZGVmaW5lIG5lZWRfc2lnYV9zeW5jKHEpCQkocS0+aXJxX3B0ci0+c2lnYV9mbGFnLnN5bmMpCi0jZGVmaW5lIHNpZ2Ffc3luY3Nfb3V0X3BjaShxKQkJKHEtPmlycV9wdHItPnNpZ2FfZmxhZy5ub19zeW5jX291dF9wY2kpCisjZGVmaW5lIG5lZWRfc2lnYV9zeW5jKHEpCQkodW5saWtlbHkocS0+aXJxX3B0ci0+c2lnYV9mbGFnLnN5bmMpKQorI2RlZmluZSBuZWVkX3NpZ2Ffc3luY19hZnRlcl9haShxKQlcCisJKHVubGlrZWx5KHEtPmlycV9wdHItPnNpZ2FfZmxhZy5zeW5jX2FmdGVyX2FpKSkKKyNkZWZpbmUgbmVlZF9zaWdhX3N5bmNfb3V0X2FmdGVyX3BjaShxKQlcCisJKHVubGlrZWx5KHEtPmlycV9wdHItPnNpZ2FfZmxhZy5zeW5jX291dF9hZnRlcl9wY2kpKQogCiAjZGVmaW5lIGZvcl9lYWNoX2lucHV0X3F1ZXVlKGlycV9wdHIsIHEsIGkpCVwKIAlmb3IgKGkgPSAwLCBxID0gaXJxX3B0ci0+aW5wdXRfcXNbMF07CVwKQEAgLTQyMyw5ICs0MzAsOSBAQAogCiBleHRlcm4gc3RydWN0IGluZGljYXRvcl90ICpxX2luZGljYXRvcnM7CiAKLXN0YXRpYyBpbmxpbmUgaW50IHNoYXJlZF9pbmQoc3RydWN0IHFkaW9faXJxICppcnFfcHRyKQorc3RhdGljIGlubGluZSBpbnQgc2hhcmVkX2luZCh1MzIgKmRzY2kpCiB7Ci0JcmV0dXJuIGlycV9wdHItPmRzY2kgPT0gJnFfaW5kaWNhdG9yc1tUSVFESU9fU0hBUkVEX0lORF0uaW5kOworCXJldHVybiBkc2NpID09ICZxX2luZGljYXRvcnNbVElRRElPX1NIQVJFRF9JTkRdLmluZDsKIH0KIAogLyogcHJvdG90eXBlcyBmb3IgdGhpbiBpbnRlcnJ1cHQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19kZWJ1Zy5jIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX2RlYnVnLmMKaW5kZXggMjg4NjhlNy4uZjhiMDNhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX2RlYnVnLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX2RlYnVnLmMKQEAgLTE1MSw2ICsxNTEsNyBAQAogCSJJbmJvdW5kIHF1ZXVlIGZ1bGwiLAogCSJPdXRib3VuZCBjYWxscyIsCiAJIk91dGJvdW5kIGhhbmRsZXIiLAorCSJPdXRib3VuZCBxdWV1ZSBmdWxsIiwKIAkiT3V0Ym91bmQgZmFzdF9yZXF1ZXVlIiwKIAkiT3V0Ym91bmQgdGFyZ2V0X2Z1bGwiLAogCSJRRUJTTSBlcWJzIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19tYWluLmMgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fbWFpbi5jCmluZGV4IDVmY2ZhN2YuLmU5ZmZmMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19tYWluLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX21haW4uYwpAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9nZnAuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxhc20vZGVidWcuaD4KICNpbmNsdWRlIDxhc20vcWRpby5oPgpAQCAtMjksMTEgKzMwLDEyIEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIlFESU8gYmFzZSBzdXBwb3J0Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLXN0YXRpYyBpbmxpbmUgaW50IGRvX3NpZ2Ffc3luYyhzdHJ1Y3Qgc3ViY2hhbm5lbF9pZCBzY2hpZCwKLQkJCSAgICAgICB1bnNpZ25lZCBpbnQgb3V0X21hc2ssIHVuc2lnbmVkIGludCBpbl9tYXNrKQorc3RhdGljIGlubGluZSBpbnQgZG9fc2lnYV9zeW5jKHVuc2lnbmVkIGxvbmcgc2NoaWQsCisJCQkgICAgICAgdW5zaWduZWQgaW50IG91dF9tYXNrLCB1bnNpZ25lZCBpbnQgaW5fbWFzaywKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgZmMpCiB7Ci0JcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX2ZjIGFzbSAoIjAiKSA9IDI7Ci0JcmVnaXN0ZXIgc3RydWN0IHN1YmNoYW5uZWxfaWQgX19zY2hpZCBhc20gKCIxIikgPSBzY2hpZDsKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fZmMgYXNtICgiMCIpID0gZmM7CisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3NjaGlkIGFzbSAoIjEiKSA9IHNjaGlkOwogCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgb3V0IGFzbSAoIjIiKSA9IG91dF9tYXNrOwogCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgaW4gYXNtICgiMyIpID0gaW5fbWFzazsKIAlpbnQgY2M7CkBAIC00NywxMCArNDksMTEgQEAKIAlyZXR1cm4gY2M7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGRvX3NpZ2FfaW5wdXQoc3RydWN0IHN1YmNoYW5uZWxfaWQgc2NoaWQsIHVuc2lnbmVkIGludCBtYXNrKQorc3RhdGljIGlubGluZSBpbnQgZG9fc2lnYV9pbnB1dCh1bnNpZ25lZCBsb25nIHNjaGlkLCB1bnNpZ25lZCBpbnQgbWFzaywKKwkJCQl1bnNpZ25lZCBpbnQgZmMpCiB7Ci0JcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX2ZjIGFzbSAoIjAiKSA9IDE7Ci0JcmVnaXN0ZXIgc3RydWN0IHN1YmNoYW5uZWxfaWQgX19zY2hpZCBhc20gKCIxIikgPSBzY2hpZDsKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fZmMgYXNtICgiMCIpID0gZmM7CisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3NjaGlkIGFzbSAoIjEiKSA9IHNjaGlkOwogCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19tYXNrIGFzbSAoIjIiKSA9IG1hc2s7CiAJaW50IGNjOwogCkBAIC0yNzksMTYgKzI4MiwyMCBAQAogc3RhdGljIGlubGluZSBpbnQgcWRpb19zaWdhX3N5bmMoc3RydWN0IHFkaW9fcSAqcSwgdW5zaWduZWQgaW50IG91dHB1dCwKIAkJCSAgdW5zaWduZWQgaW50IGlucHV0KQogeworCXVuc2lnbmVkIGxvbmcgc2NoaWQgPSAqKCh1MzIgKikgJnEtPmlycV9wdHItPnNjaGlkKTsKKwl1bnNpZ25lZCBpbnQgZmMgPSBRRElPX1NJR0FfU1lOQzsKIAlpbnQgY2M7CiAKLQlpZiAoIW5lZWRfc2lnYV9zeW5jKHEpKQotCQlyZXR1cm4gMDsKLQogCURCRl9ERVZfRVZFTlQoREJGX0lORk8sIHEtPmlycV9wdHIsICJzaWdhLXM6JTFkIiwgcS0+bnIpOwogCXFwZXJmX2luYyhxLCBzaWdhX3N5bmMpOwogCi0JY2MgPSBkb19zaWdhX3N5bmMocS0+aXJxX3B0ci0+c2NoaWQsIG91dHB1dCwgaW5wdXQpOwotCWlmIChjYykKKwlpZiAoaXNfcWVic20ocSkpIHsKKwkJc2NoaWQgPSBxLT5pcnFfcHRyLT5zY2hfdG9rZW47CisJCWZjIHw9IFFESU9fU0lHQV9RRUJTTV9GTEFHOworCX0KKworCWNjID0gZG9fc2lnYV9zeW5jKHNjaGlkLCBvdXRwdXQsIGlucHV0LCBmYyk7CisJaWYgKHVubGlrZWx5KGNjKSkKIAkJREJGX0VSUk9SKCIlNHggU0lHQS1TOiUyZCIsIFNDSF9OTyhxKSwgY2MpOwogCXJldHVybiBjYzsKIH0KQEAgLTMwMSwzOCArMzA4LDIyIEBACiAJCXJldHVybiBxZGlvX3NpZ2Ffc3luYyhxLCBxLT5tYXNrLCAwKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgcWRpb19zaWdhX3N5bmNfb3V0KHN0cnVjdCBxZGlvX3EgKnEpCi17Ci0JcmV0dXJuIHFkaW9fc2lnYV9zeW5jKHEsIH4wVSwgMCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHFkaW9fc2lnYV9zeW5jX2FsbChzdHJ1Y3QgcWRpb19xICpxKQotewotCXJldHVybiBxZGlvX3NpZ2Ffc3luYyhxLCB+MFUsIH4wVSk7Ci19Ci0KIHN0YXRpYyBpbnQgcWRpb19zaWdhX291dHB1dChzdHJ1Y3QgcWRpb19xICpxLCB1bnNpZ25lZCBpbnQgKmJ1c3lfYml0KQogewotCXVuc2lnbmVkIGxvbmcgc2NoaWQ7Ci0JdW5zaWduZWQgaW50IGZjID0gMDsKKwl1bnNpZ25lZCBsb25nIHNjaGlkID0gKigodTMyICopICZxLT5pcnFfcHRyLT5zY2hpZCk7CisJdW5zaWduZWQgaW50IGZjID0gUURJT19TSUdBX1dSSVRFOwogCXU2NCBzdGFydF90aW1lID0gMDsKIAlpbnQgY2M7CiAKLQlpZiAocS0+dS5vdXQudXNlX2VuaF9zaWdhKQotCQlmYyA9IDM7Ci0KIAlpZiAoaXNfcWVic20ocSkpIHsKIAkJc2NoaWQgPSBxLT5pcnFfcHRyLT5zY2hfdG9rZW47Ci0JCWZjIHw9IDB4ODA7CisJCWZjIHw9IFFESU9fU0lHQV9RRUJTTV9GTEFHOwogCX0KLQllbHNlCi0JCXNjaGlkID0gKigodTMyICopJnEtPmlycV9wdHItPnNjaGlkKTsKLQogYWdhaW46CiAJY2MgPSBkb19zaWdhX291dHB1dChzY2hpZCwgcS0+bWFzaywgYnVzeV9iaXQsIGZjKTsKIAogCS8qIGhpcGVyc29ja2V0IGJ1c3kgY29uZGl0aW9uICovCi0JaWYgKCpidXN5X2JpdCkgeworCWlmICh1bmxpa2VseSgqYnVzeV9iaXQpKSB7CiAJCVdBUk5fT04ocXVldWVfdHlwZShxKSAhPSBRRElPX0lRRElPX1FGTVQgfHwgY2MgIT0gMik7CiAKIAkJaWYgKCFzdGFydF90aW1lKSB7CkBAIC0zNDcsMzIgKzMzOCw0MSBAQAogCiBzdGF0aWMgaW5saW5lIGludCBxZGlvX3NpZ2FfaW5wdXQoc3RydWN0IHFkaW9fcSAqcSkKIHsKKwl1bnNpZ25lZCBsb25nIHNjaGlkID0gKigodTMyICopICZxLT5pcnFfcHRyLT5zY2hpZCk7CisJdW5zaWduZWQgaW50IGZjID0gUURJT19TSUdBX1JFQUQ7CiAJaW50IGNjOwogCiAJREJGX0RFVl9FVkVOVChEQkZfSU5GTywgcS0+aXJxX3B0ciwgInNpZ2EtcjolMWQiLCBxLT5ucik7CiAJcXBlcmZfaW5jKHEsIHNpZ2FfcmVhZCk7CiAKLQljYyA9IGRvX3NpZ2FfaW5wdXQocS0+aXJxX3B0ci0+c2NoaWQsIHEtPm1hc2spOwotCWlmIChjYykKKwlpZiAoaXNfcWVic20ocSkpIHsKKwkJc2NoaWQgPSBxLT5pcnFfcHRyLT5zY2hfdG9rZW47CisJCWZjIHw9IFFESU9fU0lHQV9RRUJTTV9GTEFHOworCX0KKworCWNjID0gZG9fc2lnYV9pbnB1dChzY2hpZCwgcS0+bWFzaywgZmMpOworCWlmICh1bmxpa2VseShjYykpCiAJCURCRl9FUlJPUigiJTR4IFNJR0EtUjolMmQiLCBTQ0hfTk8ocSksIGNjKTsKIAlyZXR1cm4gY2M7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBxZGlvX3N5bmNfYWZ0ZXJfdGhpbmludChzdHJ1Y3QgcWRpb19xICpxKQorI2RlZmluZSBxZGlvX3NpZ2Ffc3luY19vdXQocSkgcWRpb19zaWdhX3N5bmMocSwgfjBVLCAwKQorI2RlZmluZSBxZGlvX3NpZ2Ffc3luY19hbGwocSkgcWRpb19zaWdhX3N5bmMocSwgfjBVLCB+MFUpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBxZGlvX3N5bmNfcXVldWVzKHN0cnVjdCBxZGlvX3EgKnEpCiB7Ci0JaWYgKHBjaV9vdXRfc3VwcG9ydGVkKHEpKSB7Ci0JCWlmIChuZWVkX3NpZ2Ffc3luY190aGluaW50KHEpKQotCQkJcWRpb19zaWdhX3N5bmNfYWxsKHEpOwotCQllbHNlIGlmIChuZWVkX3NpZ2Ffc3luY19vdXRfdGhpbmludChxKSkKLQkJCXFkaW9fc2lnYV9zeW5jX291dChxKTsKLQl9IGVsc2UKKwkvKiBQQ0kgY2FwYWJsZSBvdXRib3VuZCBxdWV1ZXMgd2lsbCBhbHNvIGJlIHNjYW5uZWQgc28gc3luYyB0aGVtIHRvbyAqLworCWlmIChwY2lfb3V0X3N1cHBvcnRlZChxKSkKKwkJcWRpb19zaWdhX3N5bmNfYWxsKHEpOworCWVsc2UKIAkJcWRpb19zaWdhX3N5bmNfcShxKTsKIH0KIAogaW50IGRlYnVnX2dldF9idWZfc3RhdGUoc3RydWN0IHFkaW9fcSAqcSwgdW5zaWduZWQgaW50IGJ1Zm5yLAogCQkJdW5zaWduZWQgY2hhciAqc3RhdGUpCiB7Ci0JcWRpb19zaWdhX3N5bmNfcShxKTsKKwlpZiAobmVlZF9zaWdhX3N5bmMocSkpCisJCXFkaW9fc2lnYV9zeW5jX3EocSk7CiAJcmV0dXJuIGdldF9idWZfc3RhdGVzKHEsIGJ1Zm5yLCBzdGF0ZSwgMSwgMCk7CiB9CiAKQEAgLTU0OSw3ICs1NDksOCBAQAogCWlmICghYXRvbWljX3JlYWQoJnEtPm5yX2J1Zl91c2VkKSkKIAkJcmV0dXJuIDE7CiAKLQlxZGlvX3NpZ2Ffc3luY19xKHEpOworCWlmIChuZWVkX3NpZ2Ffc3luYyhxKSkKKwkJcWRpb19zaWdhX3N5bmNfcShxKTsKIAlnZXRfYnVmX3N0YXRlKHEsIHEtPmZpcnN0X3RvX2NoZWNrLCAmc3RhdGUsIDApOwogCiAJaWYgKHN0YXRlID09IFNMU0JfUF9JTlBVVF9QUklNRUQgfHwgc3RhdGUgPT0gU0xTQl9QX0lOUFVUX0VSUk9SKQpAQCAtNjQ0LDkgKzY0NSwxMiBAQAogCWludCBjb3VudCwgc3RvcDsKIAl1bnNpZ25lZCBjaGFyIHN0YXRlOwogCi0JaWYgKCgocXVldWVfdHlwZShxKSAhPSBRRElPX0lRRElPX1FGTVQpICYmICFwY2lfb3V0X3N1cHBvcnRlZChxKSkgfHwKLQkgICAgKHF1ZXVlX3R5cGUocSkgPT0gUURJT19JUURJT19RRk1UICYmIG11bHRpY2FzdF9vdXRib3VuZChxKSkpCi0JCXFkaW9fc2lnYV9zeW5jX3EocSk7CisJaWYgKG5lZWRfc2lnYV9zeW5jKHEpKQorCQlpZiAoKChxdWV1ZV90eXBlKHEpICE9IFFESU9fSVFESU9fUUZNVCkgJiYKKwkJICAgICFwY2lfb3V0X3N1cHBvcnRlZChxKSkgfHwKKwkJICAgIChxdWV1ZV90eXBlKHEpID09IFFESU9fSVFESU9fUUZNVCAmJgorCQkgICAgbXVsdGljYXN0X291dGJvdW5kKHEpKSkKKwkJCXFkaW9fc2lnYV9zeW5jX3EocSk7CiAKIAkvKgogCSAqIERvbid0IGNoZWNrIDEyOCBidWZmZXJzLCBhcyBvdGhlcndpc2UgcWRpb19pbmJvdW5kX3FfbW92ZWQKQEAgLTgxOCw3ICs4MjIsOCBAQAogc3RhdGljIHZvaWQgX190aXFkaW9faW5ib3VuZF9wcm9jZXNzaW5nKHN0cnVjdCBxZGlvX3EgKnEpCiB7CiAJcXBlcmZfaW5jKHEsIHRhc2tsZXRfaW5ib3VuZCk7Ci0JcWRpb19zeW5jX2FmdGVyX3RoaW5pbnQocSk7CisJaWYgKG5lZWRfc2lnYV9zeW5jKHEpICYmIG5lZWRfc2lnYV9zeW5jX2FmdGVyX2FpKHEpKQorCQlxZGlvX3N5bmNfcXVldWVzKHEpOwogCiAJLyoKIAkgKiBUaGUgaW50ZXJydXB0IGNvdWxkIGJlIGNhdXNlZCBieSBhIFBDSSByZXF1ZXN0LiBDaGVjayB0aGUKQEAgLTg5OCwxNiArOTAzLDE0IEBACiAJCQl0YXNrbGV0X3NjaGVkdWxlKCZxLT50YXNrbGV0KTsKIAl9CiAKLQlpZiAoIShpcnFfcHRyLT5xaWIuYWMgJiBRSUJfQUNfT1VUQk9VTkRfUENJX1NVUFBPUlRFRCkpCisJaWYgKCFwY2lfb3V0X3N1cHBvcnRlZChxKSkKIAkJcmV0dXJuOwogCiAJZm9yX2VhY2hfb3V0cHV0X3F1ZXVlKGlycV9wdHIsIHEsIGkpIHsKIAkJaWYgKHFkaW9fb3V0Ym91bmRfcV9kb25lKHEpKQogCQkJY29udGludWU7Ci0KLQkJaWYgKCFzaWdhX3N5bmNzX291dF9wY2kocSkpCisJCWlmIChuZWVkX3NpZ2Ffc3luYyhxKSAmJiBuZWVkX3NpZ2Ffc3luY19vdXRfYWZ0ZXJfcGNpKHEpKQogCQkJcWRpb19zaWdhX3N5bmNfcShxKTsKLQogCQl0YXNrbGV0X3NjaGVkdWxlKCZxLT50YXNrbGV0KTsKIAl9CiB9CkBAIC05NzAsNiArOTczLDcgQEAKIAkJcmV0dXJuOwogCX0KIAorCWtzdGF0X2NwdShzbXBfcHJvY2Vzc29yX2lkKCkpLmlycXNbSU9JTlRfUURJXSsrOwogCWlmIChpcnFfcHRyLT5wZXJmX3N0YXRfZW5hYmxlZCkKIAkJaXJxX3B0ci0+cGVyZl9zdGF0LnFkaW9faW50Kys7CiAKQEAgLTEyNzMsNyArMTI3Nyw2IEBACiAJfQogCiAJcWRpb19zZXR1cF9zc3FkX2luZm8oaXJxX3B0cik7Ci0JREJGX0VWRU5UKCJxRG1td2M6JTJ4IiwgaXJxX3B0ci0+c3NxZF9kZXNjLm1td2MpOwogCURCRl9FVkVOVCgicWliIGFjOiU0eCIsIGlycV9wdHItPnFpYi5hYyk7CiAKIAkvKiBxZWJzbSBpcyBub3cgc2V0dXAgaWYgYXZhaWxhYmxlLCBpbml0aWFsaXplIGJ1ZmZlciBzdGF0ZXMgKi8KQEAgLTE0NDUsNTIgKzE0NDgsMzggQEAKIAl1c2VkID0gYXRvbWljX2FkZF9yZXR1cm4oY291bnQsICZxLT5ucl9idWZfdXNlZCk7CiAJQlVHX09OKHVzZWQgPiBRRElPX01BWF9CVUZGRVJTX1BFUl9RKTsKIAorCWlmICh1c2VkID09IFFESU9fTUFYX0JVRkZFUlNfUEVSX1EpCisJCXFwZXJmX2luYyhxLCBvdXRib3VuZF9xdWV1ZV9mdWxsKTsKKwogCWlmIChjYWxsZmxhZ3MgJiBRRElPX0ZMQUdfUENJX09VVCkgewogCQlxLT51Lm91dC5wY2lfb3V0X2VuYWJsZWQgPSAxOwogCQlxcGVyZl9pbmMocSwgcGNpX3JlcXVlc3RfaW50KTsKLQl9Ci0JZWxzZQorCX0gZWxzZQogCQlxLT51Lm91dC5wY2lfb3V0X2VuYWJsZWQgPSAwOwogCiAJaWYgKHF1ZXVlX3R5cGUocSkgPT0gUURJT19JUURJT19RRk1UKSB7Ci0JCWlmIChtdWx0aWNhc3Rfb3V0Ym91bmQocSkpCisJCS8qIE9uZSBTSUdBLVcgcGVyIGJ1ZmZlciByZXF1aXJlZCBmb3IgdW5pY2FzdCBIaXBlclNvY2tldHMuICovCisJCVdBUk5fT05fT05DRShjb3VudCA+IDEgJiYgIW11bHRpY2FzdF9vdXRib3VuZChxKSk7CisKKwkJcmMgPSBxZGlvX2tpY2tfb3V0Ym91bmRfcShxKTsKKwl9IGVsc2UgaWYgKG5lZWRfc2lnYV9zeW5jKHEpKSB7CisJCXJjID0gcWRpb19zaWdhX3N5bmNfcShxKTsKKwl9IGVsc2UgeworCQkvKiB0cnkgdG8gZmFzdCByZXF1ZXVlIGJ1ZmZlcnMgKi8KKwkJZ2V0X2J1Zl9zdGF0ZShxLCBwcmV2X2J1ZihidWZuciksICZzdGF0ZSwgMCk7CisJCWlmIChzdGF0ZSAhPSBTTFNCX0NVX09VVFBVVF9QUklNRUQpCiAJCQlyYyA9IHFkaW9fa2lja19vdXRib3VuZF9xKHEpOwogCQllbHNlCi0JCQlpZiAoKHEtPmlycV9wdHItPnNzcWRfZGVzYy5tbXdjID4gMSkgJiYKLQkJCSAgICAoY291bnQgPiAxKSAmJgotCQkJICAgIChjb3VudCA8PSBxLT5pcnFfcHRyLT5zc3FkX2Rlc2MubW13YykpIHsKLQkJCQkvKiBleHBsb2l0IGVuaGFuY2VkIFNJR0EgKi8KLQkJCQlxLT51Lm91dC51c2VfZW5oX3NpZ2EgPSAxOwotCQkJCXJjID0gcWRpb19raWNrX291dGJvdW5kX3EocSk7Ci0JCQl9IGVsc2UgewotCQkJCS8qCi0JCQkJKiBPbmUgc2lnYS13IHBlciBidWZmZXIgcmVxdWlyZWQgZm9yIHVuaWNhc3QKLQkJCQkqIEhpcGVyU29ja2V0cy4KLQkJCQkqLwotCQkJCXEtPnUub3V0LnVzZV9lbmhfc2lnYSA9IDA7Ci0JCQkJd2hpbGUgKGNvdW50LS0pIHsKLQkJCQkJcmMgPSBxZGlvX2tpY2tfb3V0Ym91bmRfcShxKTsKLQkJCQkJaWYgKHJjKQotCQkJCQkJZ290byBvdXQ7Ci0JCQkJfQotCQkJfQotCQlnb3RvIG91dDsKKwkJCXFwZXJmX2luYyhxLCBmYXN0X3JlcXVldWUpOwogCX0KIAotCWlmIChuZWVkX3NpZ2Ffc3luYyhxKSkgewotCQlxZGlvX3NpZ2Ffc3luY19xKHEpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQkvKiB0cnkgdG8gZmFzdCByZXF1ZXVlIGJ1ZmZlcnMgKi8KLQlnZXRfYnVmX3N0YXRlKHEsIHByZXZfYnVmKGJ1Zm5yKSwgJnN0YXRlLCAwKTsKLQlpZiAoc3RhdGUgIT0gU0xTQl9DVV9PVVRQVVRfUFJJTUVEKQotCQlyYyA9IHFkaW9fa2lja19vdXRib3VuZF9xKHEpOworCS8qIGluIGNhc2Ugb2YgU0lHQSBlcnJvcnMgd2UgbXVzdCBwcm9jZXNzIHRoZSBlcnJvciBpbW1lZGlhdGVseSAqLworCWlmICh1c2VkID49IHEtPnUub3V0LnNjYW5fdGhyZXNob2xkIHx8IHJjKQorCQl0YXNrbGV0X3NjaGVkdWxlKCZxLT50YXNrbGV0KTsKIAllbHNlCi0JCXFwZXJmX2luYyhxLCBmYXN0X3JlcXVldWUpOwotCi1vdXQ6Ci0JdGFza2xldF9zY2hlZHVsZSgmcS0+dGFza2xldCk7CisJCS8qIGZyZWUgdGhlIFNCQUxzIGluIGNhc2Ugb2Ygbm8gZnVydGhlciB0cmFmZmljICovCisJCWlmICghdGltZXJfcGVuZGluZygmcS0+dS5vdXQudGltZXIpKQorCQkJbW9kX3RpbWVyKCZxLT51Lm91dC50aW1lciwgamlmZmllcyArIEhaKTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTE1NTAsNyArMTUzOSw3IEBACiAKIAlXQVJOX09OKHF1ZXVlX2lycXNfZW5hYmxlZChxKSk7CiAKLQlpZiAoIXNoYXJlZF9pbmQocS0+aXJxX3B0cikpCisJaWYgKCFzaGFyZWRfaW5kKHEtPmlycV9wdHItPmRzY2kpKQogCQl4Y2hnKHEtPmlycV9wdHItPmRzY2ksIDApOwogCiAJcWRpb19zdG9wX3BvbGxpbmcocSk7CkBAIC0xNTYwLDcgKzE1NDksNyBAQAogCSAqIFdlIG5lZWQgdG8gY2hlY2sgYWdhaW4gdG8gbm90IGxvc2UgaW5pdGlhdGl2ZSBhZnRlcgogCSAqIHJlc2V0dGluZyB0aGUgQUNLIHN0YXRlLgogCSAqLwotCWlmICghc2hhcmVkX2luZChxLT5pcnFfcHRyKSAmJiAqcS0+aXJxX3B0ci0+ZHNjaSkKKwlpZiAoIXNoYXJlZF9pbmQocS0+aXJxX3B0ci0+ZHNjaSkgJiYgKnEtPmlycV9wdHItPmRzY2kpCiAJCWdvdG8gcmVzY2FuOwogCWlmICghcWRpb19pbmJvdW5kX3FfZG9uZShxKSkKIAkJZ290byByZXNjYW47CkBAIC0xNjAwLDEyICsxNTg5LDE0IEBACiAJcSA9IGlycV9wdHItPmlucHV0X3FzW25yXTsKIAlXQVJOX09OKHF1ZXVlX2lycXNfZW5hYmxlZChxKSk7CiAKLQlxZGlvX3N5bmNfYWZ0ZXJfdGhpbmludChxKTsKLQogCS8qCi0JICogVGhlIGludGVycnVwdCBjb3VsZCBiZSBjYXVzZWQgYnkgYSBQQ0kgcmVxdWVzdC4gQ2hlY2sgdGhlCi0JICogUENJIGNhcGFibGUgb3V0Ym91bmQgcXVldWVzLgorCSAqIENhbm5vdCByZWx5IG9uIGF1dG9tYXRpYyBzeW5jIGFmdGVyIGludGVycnVwdCBzaW5jZSBxdWV1ZXMgbWF5CisJICogYWxzbyBiZSBleGFtaW5lZCB3aXRob3V0IGludGVycnVwdC4KIAkgKi8KKwlpZiAobmVlZF9zaWdhX3N5bmMocSkpCisJCXFkaW9fc3luY19xdWV1ZXMocSk7CisKKwkvKiBjaGVjayB0aGUgUENJIGNhcGFibGUgb3V0Ym91bmQgcXVldWVzLiAqLwogCXFkaW9fY2hlY2tfb3V0Ym91bmRfYWZ0ZXJfdGhpbmludChxKTsKIAogCWlmICghcWRpb19pbmJvdW5kX3FfbW92ZWQocSkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fc2V0dXAuYyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19zZXR1cC5jCmluZGV4IGExM2NmN2UuLjg5MTA3ZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19zZXR1cC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19zZXR1cC5jCkBAIC0xNzgsNiArMTc4LDcgQEAKIAkJc2V0dXBfcXVldWVzX21pc2MocSwgaXJxX3B0ciwgcWRpb19pbml0LT5vdXRwdXRfaGFuZGxlciwgaSk7CiAKIAkJcS0+aXNfaW5wdXRfcSA9IDA7CisJCXEtPnUub3V0LnNjYW5fdGhyZXNob2xkID0gcWRpb19pbml0LT5zY2FuX3RocmVzaG9sZDsKIAkJc2V0dXBfc3RvcmFnZV9saXN0cyhxLCBpcnFfcHRyLCBvdXRwdXRfc2JhbF9hcnJheSwgaSk7CiAJCW91dHB1dF9zYmFsX2FycmF5ICs9IFFESU9fTUFYX0JVRkZFUlNfUEVSX1E7CiAKQEAgLTE5NiwxNCArMTk3LDEwIEBACiAJCWlycV9wdHItPnNpZ2FfZmxhZy5vdXRwdXQgPSAxOwogCWlmIChxZGlvYWMgJiBBQzFfU0lHQV9TWU5DX05FRURFRCkKIAkJaXJxX3B0ci0+c2lnYV9mbGFnLnN5bmMgPSAxOwotCWlmIChxZGlvYWMgJiBBQzFfQVVUT01BVElDX1NZTkNfT05fVEhJTklOVCkKLQkJaXJxX3B0ci0+c2lnYV9mbGFnLm5vX3N5bmNfdGkgPSAxOwotCWlmIChxZGlvYWMgJiBBQzFfQVVUT01BVElDX1NZTkNfT05fT1VUX1BDSSkKLQkJaXJxX3B0ci0+c2lnYV9mbGFnLm5vX3N5bmNfb3V0X3BjaSA9IDE7Ci0KLQlpZiAoaXJxX3B0ci0+c2lnYV9mbGFnLm5vX3N5bmNfb3V0X3BjaSAmJgotCSAgICBpcnFfcHRyLT5zaWdhX2ZsYWcubm9fc3luY190aSkKLQkJaXJxX3B0ci0+c2lnYV9mbGFnLm5vX3N5bmNfb3V0X3RpID0gMTsKKwlpZiAoIShxZGlvYWMgJiBBQzFfQVVUT01BVElDX1NZTkNfT05fVEhJTklOVCkpCisJCWlycV9wdHItPnNpZ2FfZmxhZy5zeW5jX2FmdGVyX2FpID0gMTsKKwlpZiAoIShxZGlvYWMgJiBBQzFfQVVUT01BVElDX1NZTkNfT05fT1VUX1BDSSkpCisJCWlycV9wdHItPnNpZ2FfZmxhZy5zeW5jX291dF9hZnRlcl9wY2kgPSAxOwogfQogCiBzdGF0aWMgdm9pZCBjaGVja19hbmRfc2V0dXBfcWVic20oc3RydWN0IHFkaW9faXJxICppcnFfcHRyLApAQCAtNDUxLDcgKzQ0OCw3IEBACiAJY2hhciBzWzgwXTsKIAogCXNucHJpbnRmKHMsIDgwLCAicWRpbzogJXMgJXMgb24gU0MgJXggdXNpbmcgIgotCQkgIkFJOiVkIFFFQlNNOiVkIFBDSTolZCBUREQ6JWQgU0lHQTolcyVzJXMlcyVzJXNcbiIsCisJCSAiQUk6JWQgUUVCU006JWQgUENJOiVkIFRERDolZCBTSUdBOiVzJXMlcyVzJXNcbiIsCiAJCSBkZXZfbmFtZSgmY2Rldi0+ZGV2KSwKIAkJIChpcnFfcHRyLT5xaWIucWZtdCA9PSBRRElPX1FFVEhfUUZNVCkgPyAiT1NBIiA6CiAJCQkoKGlycV9wdHItPnFpYi5xZm10ID09IFFESU9fWkZDUF9RRk1UKSA/ICJaRkNQIiA6ICJIUyIpLApAQCAtNDYzLDkgKzQ2MCw4IEBACiAJCSAoaXJxX3B0ci0+c2lnYV9mbGFnLmlucHV0KSA/ICJSIiA6ICIgIiwKIAkJIChpcnFfcHRyLT5zaWdhX2ZsYWcub3V0cHV0KSA/ICJXIiA6ICIgIiwKIAkJIChpcnFfcHRyLT5zaWdhX2ZsYWcuc3luYykgPyAiUyIgOiAiICIsCi0JCSAoIWlycV9wdHItPnNpZ2FfZmxhZy5ub19zeW5jX3RpKSA/ICJBIiA6ICIgIiwKLQkJICghaXJxX3B0ci0+c2lnYV9mbGFnLm5vX3N5bmNfb3V0X3RpKSA/ICJPIiA6ICIgIiwKLQkJICghaXJxX3B0ci0+c2lnYV9mbGFnLm5vX3N5bmNfb3V0X3BjaSkgPyAiUCIgOiAiICIpOworCQkgKGlycV9wdHItPnNpZ2FfZmxhZy5zeW5jX2FmdGVyX2FpKSA/ICJBIiA6ICIgIiwKKwkJIChpcnFfcHRyLT5zaWdhX2ZsYWcuc3luY19vdXRfYWZ0ZXJfcGNpKSA/ICJQIiA6ICIgIik7CiAJcHJpbnRrKEtFUk5fSU5GTyAiJXMiLCBzKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX3RoaW5pbnQuYyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb190aGluaW50LmMKaW5kZXggNWQ5YzY2Ni4uNWM0ZTc0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX3RoaW5pbnQuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fdGhpbmludC5jCkBAIC04LDYgKzgsNyBAQAogICovCiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAjaW5jbHVkZSA8YXNtL2RlYnVnLmg+CiAjaW5jbHVkZSA8YXNtL3FkaW8uaD4KQEAgLTM1LDIyICszNiw4IEBACiAKIHN0cnVjdCBpbmRpY2F0b3JfdCAqcV9pbmRpY2F0b3JzOwogCi1zdGF0aWMgaW50IGNzc19xZGlvX29taXRfc3ZzOwotCiBzdGF0aWMgdTY0IGxhc3RfYWlfdGltZTsKIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGRvX2NsZWFyX2dsb2JhbF9zdW1tYXJ5KHZvaWQpCi17Ci0JcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX2ZuIGFzbSgiMSIpID0gMzsKLQlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fdG1wIGFzbSgiMiIpOwotCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX190aW1lIGFzbSgiMyIpOwotCi0JYXNtIHZvbGF0aWxlKAotCQkiCS5pbnNuCXJyZSwweGIyNjUwMDAwLDIsMCIKLQkJOiAiK2QiIChfX2ZuKSwgIj1kIiAoX190bXApLCAiPWQiIChfX3RpbWUpKTsKLQlyZXR1cm4gX190aW1lOwotfQotCiAvKiByZXR1cm5zIGFkZHIgZm9yIHRoZSBkZXZpY2Ugc3RhdGUgY2hhbmdlIGluZGljYXRvciAqLwogc3RhdGljIHUzMiAqZ2V0X2luZGljYXRvcih2b2lkKQogewpAQCAtODMsMTAgKzcwLDYgQEAKIAlzdHJ1Y3QgcWRpb19xICpxOwogCWludCBpOwogCi0JLyogTm8gVEREIGZhY2lsaXR5PyBJZiB3ZSBtdXN0IHVzZSBTSUdBLXMgd2UgY2FuIGFsc28gb21pdCBTVlMuICovCi0JaWYgKCFjc3NfcWRpb19vbWl0X3N2cyAmJiBpcnFfcHRyLT5zaWdhX2ZsYWcuc3luYykKLQkJY3NzX3FkaW9fb21pdF9zdnMgPSAxOwotCiAJbXV0ZXhfbG9jaygmdGlxX2xpc3RfbG9jayk7CiAJZm9yX2VhY2hfaW5wdXRfcXVldWUoaXJxX3B0ciwgcSwgaSkKIAkJbGlzdF9hZGRfcmN1KCZxLT5lbnRyeSwgJnRpcV9saXN0KTsKQEAgLTExMiw5ICs5NSw5IEBACiAJfQogfQogCi1zdGF0aWMgaW5saW5lIGludCBzaGFyZWRfaW5kX3VzZWQodm9pZCkKK3N0YXRpYyBpbmxpbmUgdTMyIHNoYXJlZF9pbmRfc2V0KHZvaWQpCiB7Ci0JcmV0dXJuIGF0b21pY19yZWFkKCZxX2luZGljYXRvcnNbVElRRElPX1NIQVJFRF9JTkRdLmNvdW50KTsKKwlyZXR1cm4gcV9pbmRpY2F0b3JzW1RJUURJT19TSEFSRURfSU5EXS5pbmQ7CiB9CiAKIC8qKgpAQCAtMTI0LDIwICsxMDcsMTEgQEAKICAqLwogc3RhdGljIHZvaWQgdGlxZGlvX3RoaW5pbnRfaGFuZGxlcih2b2lkICphbHNpLCB2b2lkICpkYXRhKQogeworCXUzMiBzaV91c2VkID0gc2hhcmVkX2luZF9zZXQoKTsKIAlzdHJ1Y3QgcWRpb19xICpxOwogCiAJbGFzdF9haV90aW1lID0gUzM5MF9sb3djb3JlLmludF9jbG9jazsKLQotCS8qCi0JICogU1ZTIG9ubHkgd2hlbiBuZWVkZWQ6IGlzc3VlIFNWUyB0byBiZW5lZml0IGZyb20gaXFkaW8gaW50ZXJydXB0Ci0JICogYXZvaWRhbmNlIChTVlMgY2xlYXJzIGFkYXB0ZXIgaW50ZXJydXB0IHN1cHByZXNzaW9uIG92ZXJ3cml0ZSkuCi0JICovCi0JaWYgKCFjc3NfcWRpb19vbWl0X3N2cykKLQkJZG9fY2xlYXJfZ2xvYmFsX3N1bW1hcnkoKTsKLQotCS8qIHJlc2V0IGxvY2FsIHN1bW1hcnkgaW5kaWNhdG9yICovCi0JaWYgKHNoYXJlZF9pbmRfdXNlZCgpKQotCQl4Y2hnKHRpcWRpb19hbHNpLCAwKTsKKwlrc3RhdF9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpKS5pcnFzW0lPSU5UX1FBSV0rKzsKIAogCS8qIHByb3RlY3QgdGlxX2xpc3QgZW50cmllcywgb25seSBjaGFuZ2VkIGluIGFjdGl2YXRlIG9yIHNodXRkb3duICovCiAJcmN1X3JlYWRfbG9jaygpOwpAQCAtMTQ2LDcgKzEyMCwxMCBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHEsICZ0aXFfbGlzdCwgZW50cnkpIHsKIAogCQkvKiBvbmx5IHByb2Nlc3MgcXVldWVzIGZyb20gY2hhbmdlZCBzZXRzICovCi0JCWlmICghKnEtPmlycV9wdHItPmRzY2kpCisJCWlmICh1bmxpa2VseShzaGFyZWRfaW5kKHEtPmlycV9wdHItPmRzY2kpKSkgeworCQkJaWYgKCFzaV91c2VkKQorCQkJCWNvbnRpbnVlOworCQl9IGVsc2UgaWYgKCEqcS0+aXJxX3B0ci0+ZHNjaSkKIAkJCWNvbnRpbnVlOwogCiAJCWlmIChxLT51LmluLnF1ZXVlX3N0YXJ0X3BvbGwpIHsKQEAgLTE2Miw3ICsxMzksNyBAQAogCQkJCQkJIHEtPmlycV9wdHItPmludF9wYXJtKTsKIAkJfSBlbHNlIHsKIAkJCS8qIG9ubHkgY2xlYXIgaXQgaWYgdGhlIGluZGljYXRvciBpcyBub24tc2hhcmVkICovCi0JCQlpZiAoIXNoYXJlZF9pbmQocS0+aXJxX3B0cikpCisJCQlpZiAoIXNoYXJlZF9pbmQocS0+aXJxX3B0ci0+ZHNjaSkpCiAJCQkJeGNoZyhxLT5pcnFfcHRyLT5kc2NpLCAwKTsKIAkJCS8qCiAJCQkgKiBDYWxsIGluYm91bmQgcHJvY2Vzc2luZyBidXQgbm90IGRpcmVjdGx5CkBAIC0xNzgsMTMgKzE1NSw4IEBACiAJICogSWYgdGhlIHNoYXJlZCBpbmRpY2F0b3Igd2FzIHVzZWQgY2xlYXIgaXQgbm93IGFmdGVyIGFsbCBxdWV1ZXMKIAkgKiB3ZXJlIHByb2Nlc3NlZC4KIAkgKi8KLQlpZiAoc2hhcmVkX2luZF91c2VkKCkpIHsKKwlpZiAoc2lfdXNlZCAmJiBzaGFyZWRfaW5kX3NldCgpKQogCQl4Y2hnKCZxX2luZGljYXRvcnNbVElRRElPX1NIQVJFRF9JTkRdLmluZCwgMCk7Ci0KLQkJLyogcHJldmVudCByYWNpbmcgKi8KLQkJaWYgKCp0aXFkaW9fYWxzaSkKLQkJCXhjaGcoJnFfaW5kaWNhdG9yc1tUSVFESU9fU0hBUkVEX0lORF0uaW5kLCAxIDw8IDcpOwotCX0KIH0KIAogc3RhdGljIGludCBzZXRfc3ViY2hhbm5lbF9pbmQoc3RydWN0IHFkaW9faXJxICppcnFfcHRyLCBpbnQgcmVzZXQpCkBAIC0yNjksMTIgKzI0MSw2IEBACiB7CiAJaWYgKCFpc190aGluaW50X2lycShpcnFfcHRyKSkKIAkJcmV0dXJuIDA7Ci0KLQkvKiBDaGVjayBmb3IgYWlmIHRpbWUgZGVsYXkgZGlzYWJsZW1lbnQuIElmIGluc3RhbGxlZCwKLQkgKiBvbWl0IFNWUyBldmVuIHVuZGVyIExQQVIKLQkgKi8KLQlpZiAoY3NzX2dlbmVyYWxfY2hhcmFjdGVyaXN0aWNzLmFpZl90ZGQpCi0JCWNzc19xZGlvX29taXRfc3ZzID0gMTsKIAlyZXR1cm4gc2V0X3N1YmNoYW5uZWxfaW5kKGlycV9wdHIsIDApOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jIGIvZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYwppbmRleCA4ZmQ4YzYyLi42NzMwMmI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jCisrKyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMKQEAgLTI3LDYgKzI3LDcgQEAKICNkZWZpbmUgS01TR19DT01QT05FTlQgImFwIgogI2RlZmluZSBwcl9mbXQoZm10KSBLTVNHX0NPTVBPTkVOVCAiOiAiIGZtdAogCisjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KQEAgLTE1NCw3ICsxNTUsNyBAQAogICovCiBzdGF0aWMgaW50IGFwX2ludGVycnVwdHNfYXZhaWxhYmxlKHZvaWQpCiB7Ci0JcmV0dXJuIHRlc3RfZmFjaWxpdHkoMSkgJiYgdGVzdF9mYWNpbGl0eSgyKTsKKwlyZXR1cm4gdGVzdF9mYWNpbGl0eSgyKSAmJiB0ZXN0X2ZhY2lsaXR5KDY1KTsKIH0KIAogLyoqCkBAIC0yMjEsNiArMjIyLDY5IEBACiB9CiAjZW5kaWYKIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgYXBfcXVldWVfc3RhdHVzIF9fYXBfNDA5Nl9jb21tYW5kc19hdmFpbGFibGUoYXBfcWlkX3QgcWlkLAorCQkJCQkJCQkgIGludCAqc3VwcG9ydCkKK3sKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIHJlZzAgYXNtICgiMCIpID0gMFVMIHwgcWlkIHwgKDFVTCA8PCAyMyk7CisJcmVnaXN0ZXIgc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyByZWcxIGFzbSAoIjEiKTsKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIHJlZzIgYXNtICgiMiIpID0gMFVMOworCisJYXNtIHZvbGF0aWxlKAorCQkiLmxvbmcgMHhiMmFmMDAwMFxuIgorCQkiMDogbGEgICAgJTEsMFxuIgorCQkiMTpcbiIKKwkJRVhfVEFCTEUoMGIsIDFiKQorCQk6ICIrZCIgKHJlZzApLCAiPWQiIChyZWcxKSwgIj1kIiAocmVnMikKKwkJOgorCQk6ICJjYyIpOworCisJaWYgKHJlZzIgJiAweDYwMDAwMDAwMDAwMDAwMDBVTEwpCisJCSpzdXBwb3J0ID0gMTsKKwllbHNlCisJCSpzdXBwb3J0ID0gMDsKKworCXJldHVybiByZWcxOworfQorCisvKioKKyAqIGFwXzQwOTZfY29tbWFuZHNfYXZhaWxhYmxlbigpOiBDaGVjayBmb3IgYXZhaWxhYmlsaXR5IG9mIDQwOTYgYml0IFJTQQorICogc3VwcG9ydC4KKyAqIEBxaWQ6IFRoZSBBUCBxdWV1ZSBudW1iZXIKKyAqCisgKiBSZXR1cm5zIDEgaWYgNDA5NiBiaXQgUlNBIGtleXMgYXJlIHN1cHBvcnQgZm8gdGhlIEFQLCByZXR1cm5zIDAgaWYgbm90LgorICovCitpbnQgYXBfNDA5Nl9jb21tYW5kc19hdmFpbGFibGUoYXBfcWlkX3QgcWlkKQoreworCXN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMgc3RhdHVzOworCWludCBpLCBzdXBwb3J0ID0gMDsKKwlzdGF0dXMgPSBfX2FwXzQwOTZfY29tbWFuZHNfYXZhaWxhYmxlKHFpZCwgJnN1cHBvcnQpOworCisJZm9yIChpID0gMDsgaSA8IEFQX01BWF9SRVNFVDsgaSsrKSB7CisJCXN3aXRjaCAoc3RhdHVzLnJlc3BvbnNlX2NvZGUpIHsKKwkJY2FzZSBBUF9SRVNQT05TRV9OT1JNQUw6CisJCQlyZXR1cm4gc3VwcG9ydDsKKwkJY2FzZSBBUF9SRVNQT05TRV9SRVNFVF9JTl9QUk9HUkVTUzoKKwkJY2FzZSBBUF9SRVNQT05TRV9CVVNZOgorCQkJYnJlYWs7CisJCWNhc2UgQVBfUkVTUE9OU0VfUV9OT1RfQVZBSUw6CisJCWNhc2UgQVBfUkVTUE9OU0VfREVDT05GSUdVUkVEOgorCQljYXNlIEFQX1JFU1BPTlNFX0NIRUNLU1RPUFBFRDoKKwkJY2FzZSBBUF9SRVNQT05TRV9JTlZBTElEX0FERFJFU1M6CisJCQlyZXR1cm4gMDsKKwkJY2FzZSBBUF9SRVNQT05TRV9PVEhFUldJU0VfQ0hBTkdFRDoKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwkJaWYgKGkgPCBBUF9NQVhfUkVTRVQgLSAxKSB7CisJCQl1ZGVsYXkoNSk7CisJCQlzdGF0dXMgPSBfX2FwXzQwOTZfY29tbWFuZHNfYXZhaWxhYmxlKHFpZCwgJnN1cHBvcnQpOworCQl9CisJfQorCXJldHVybiBzdXBwb3J0OworfQorRVhQT1JUX1NZTUJPTChhcF80MDk2X2NvbW1hbmRzX2F2YWlsYWJsZSk7CisKIC8qKgogICogYXBfcXVldWVfZW5hYmxlX2ludGVycnVwdGlvbigpOiBFbmFibGUgaW50ZXJydXB0aW9uIG9uIGFuIEFQLgogICogQHFpZDogVGhlIEFQIHF1ZXVlIG51bWJlcgpAQCAtMTA0Miw2ICsxMTA2LDcgQEAKIAogc3RhdGljIHZvaWQgYXBfaW50ZXJydXB0X2hhbmRsZXIodm9pZCAqdW51c2VkMSwgdm9pZCAqdW51c2VkMikKIHsKKwlrc3RhdF9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpKS5pcnFzW0lPSU5UX0FQQl0rKzsKIAl0YXNrbGV0X3NjaGVkdWxlKCZhcF90YXNrbGV0KTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuaCBiL2RyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmgKaW5kZXggNDc4NWQwNy4uMDhiOTczOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuaAorKysgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5oCkBAIC0xOTYsNCArMTk2LDYgQEAKIGludCBhcF9tb2R1bGVfaW5pdCh2b2lkKTsKIHZvaWQgYXBfbW9kdWxlX2V4aXQodm9pZCk7CiAKK2ludCBhcF80MDk2X2NvbW1hbmRzX2F2YWlsYWJsZShhcF9xaWRfdCBxaWQpOworCiAjZW5kaWYgLyogX0FQX0JVU19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfYXBpLmMgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9hcGkuYwppbmRleCA3ZmNhOWMxLi44ZTY1NDQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9hcGkuYworKysgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9hcGkuYwpAQCAtMzk2LDggKzM5NiwxNSBAQAogCQkJaWYgKGNvcGllZCA9PSAwKSB7CiAJCQkJdW5zaWduZWQgaW50IGxlbjsKIAkJCQlzcGluX3VubG9ja19iaCgmemNyeXB0X2RldmljZV9sb2NrKTsKLQkJCQkvKiBsZW4gaXMgbWF4IDI1NiAvIDIgLSAxMjAgPSA4ICovCi0JCQkJbGVuID0gY3J0LT5pbnB1dGRhdGFsZW5ndGggLyAyIC0gMTIwOworCQkJCS8qIGxlbiBpcyBtYXggMjU2IC8gMiAtIDEyMCA9IDgKKwkJCQkgKiBGb3IgYmlnZ2VyIGRldmljZSBqdXN0IGFzc3VtZSBsZW4gb2YgbGVhZGluZworCQkJCSAqIDBzIGlzIDggYXMgc3RhdGVkIGluIHRoZSByZXF1aXJlbWVudHMgZm9yCisJCQkJICogaWNhX3JzYV9tb2RleHBvX2NydCBzdHJ1Y3QgaW4gemNyeXB0LmguCisJCQkJICovCisJCQkJaWYgKGNydC0+aW5wdXRkYXRhbGVuZ3RoIDw9IDI1NikKKwkJCQkJbGVuID0gY3J0LT5pbnB1dGRhdGFsZW5ndGggLyAyIC0gMTIwOworCQkJCWVsc2UKKwkJCQkJbGVuID0gODsKIAkJCQlpZiAobGVuID4gc2l6ZW9mKHoxKSkKIAkJCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCQkJejEgPSB6MiA9IHozID0gMDsKQEAgLTQwNSw2ICs0MTIsNyBAQAogCQkJCSAgICBjb3B5X2Zyb21fdXNlcigmejIsIGNydC0+YnBfa2V5LCBsZW4pIHx8CiAJCQkJICAgIGNvcHlfZnJvbV91c2VyKCZ6MywgY3J0LT51X211bHRfaW52LCBsZW4pKQogCQkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCQl6MSA9IHoyID0gejMgPSAwOwogCQkJCWNvcGllZCA9IDE7CiAJCQkJLyoKIAkJCQkgKiBXZSBoYXZlIHRvIHJlc3RhcnQgZGV2aWNlIGxvb2t1cCAtCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9hcGkuaCBiL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X2FwaS5oCmluZGV4IDhlN2ZmYmYuLjg4ZWJkMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X2FwaS5oCisrKyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X2FwaS5oCkBAIC0xMDksNiArMTA5LDcgQEAKIAlpbnQgcmVxdWVzdF9jb3VudDsJCS8qICMgY3VycmVudCByZXF1ZXN0cy4gKi8KIAogCXN0cnVjdCBhcF9tZXNzYWdlIHJlcGx5OwkvKiBQZXItZGV2aWNlIHJlcGx5IHN0cnVjdHVyZS4gKi8KKwlpbnQgbWF4X2V4cF9iaXRfbGVuZ3RoOwogfTsKIAogc3RydWN0IHpjcnlwdF9kZXZpY2UgKnpjcnlwdF9kZXZpY2VfYWxsb2Moc2l6ZV90KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X2NleDJhLmMgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9jZXgyYS5jCmluZGV4IDljNDA5ZWYuLjIxNzZkMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X2NleDJhLmMKKysrIGIvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfY2V4MmEuYwpAQCAtNDEsNyArNDEsNyBAQAogI2RlZmluZSBDRVgyQV9NSU5fTU9EX1NJWkUJICAxCS8qICAgIDggYml0cwkqLwogI2RlZmluZSBDRVgyQV9NQVhfTU9EX1NJWkUJMjU2CS8qIDIwNDggYml0cwkqLwogI2RlZmluZSBDRVgzQV9NSU5fTU9EX1NJWkUJQ0VYMkFfTUlOX01PRF9TSVpFCi0jZGVmaW5lIENFWDNBX01BWF9NT0RfU0laRQlDRVgyQV9NQVhfTU9EX1NJWkUKKyNkZWZpbmUgQ0VYM0FfTUFYX01PRF9TSVpFCTUxMgkvKiA0MDk2IGJpdHMJKi8KIAogI2RlZmluZSBDRVgyQV9TUEVFRF9SQVRJTkcJOTcwCiAjZGVmaW5lIENFWDNBX1NQRUVEX1JBVElORwk5MDAgLyogRml4bWU6IE5lZWRzIGZpbmV0dW5pbmcgKi8KQEAgLTQ5LDggKzQ5LDEwIEBACiAjZGVmaW5lIENFWDJBX01BWF9NRVNTQUdFX1NJWkUJMHgzOTAJLyogc2l6ZW9mKHN0cnVjdCB0eXBlNTBfY3JiMl9tc2cpICAgICovCiAjZGVmaW5lIENFWDJBX01BWF9SRVNQT05TRV9TSVpFIDB4MTEwCS8qIG1heCBvdXRwdXRkYXRhbGVuZ3RoICsgdHlwZTgwX2hkciAqLwogCi0jZGVmaW5lIENFWDNBX01BWF9NRVNTQUdFX1NJWkUJQ0VYMkFfTUFYX01FU1NBR0VfU0laRQotI2RlZmluZSBDRVgzQV9NQVhfUkVTUE9OU0VfU0laRQlDRVgyQV9NQVhfUkVTUE9OU0VfU0laRQorI2RlZmluZSBDRVgzQV9NQVhfUkVTUE9OU0VfU0laRQkweDIxMAkvKiA1MTIgYml0IG1vZHVsdXMKKwkJCQkJICogKG1heCBvdXRwdXRkYXRhbGVuZ3RoKSArCisJCQkJCSAqIHR5cGU4MF9oZHIqLworI2RlZmluZSBDRVgzQV9NQVhfTUVTU0FHRV9TSVpFCXNpemVvZihzdHJ1Y3QgdHlwZTUwX2NyYjNfbXNnKQogCiAjZGVmaW5lIENFWDJBX0NMRUFOVVBfVElNRQkoMTUqSFopCiAjZGVmaW5lIENFWDNBX0NMRUFOVVBfVElNRQlDRVgyQV9DTEVBTlVQX1RJTUUKQEAgLTExMCw3ICsxMTIsNyBAQAogCQltb2QgPSBtZWIxLT5tb2R1bHVzICsgc2l6ZW9mKG1lYjEtPm1vZHVsdXMpIC0gbW9kX2xlbjsKIAkJZXhwID0gbWViMS0+ZXhwb25lbnQgKyBzaXplb2YobWViMS0+ZXhwb25lbnQpIC0gbW9kX2xlbjsKIAkJaW5wID0gbWViMS0+bWVzc2FnZSArIHNpemVvZihtZWIxLT5tZXNzYWdlKSAtIG1vZF9sZW47Ci0JfSBlbHNlIHsKKwl9IGVsc2UgaWYgKG1vZF9sZW4gPD0gMjU2KSB7CiAJCXN0cnVjdCB0eXBlNTBfbWViMl9tc2cgKm1lYjIgPSBhcF9tc2ctPm1lc3NhZ2U7CiAJCW1lbXNldChtZWIyLCAwLCBzaXplb2YoKm1lYjIpKTsKIAkJYXBfbXNnLT5sZW5ndGggPSBzaXplb2YoKm1lYjIpOwpAQCAtMTIwLDYgKzEyMiwxNyBAQAogCQltb2QgPSBtZWIyLT5tb2R1bHVzICsgc2l6ZW9mKG1lYjItPm1vZHVsdXMpIC0gbW9kX2xlbjsKIAkJZXhwID0gbWViMi0+ZXhwb25lbnQgKyBzaXplb2YobWViMi0+ZXhwb25lbnQpIC0gbW9kX2xlbjsKIAkJaW5wID0gbWViMi0+bWVzc2FnZSArIHNpemVvZihtZWIyLT5tZXNzYWdlKSAtIG1vZF9sZW47CisJfSBlbHNlIHsKKwkJLyogbW9kX2xlbiA+IDI1NiA9IDQwOTYgYml0IFJTQSBLZXkgKi8KKwkJc3RydWN0IHR5cGU1MF9tZWIzX21zZyAqbWViMyA9IGFwX21zZy0+bWVzc2FnZTsKKwkJbWVtc2V0KG1lYjMsIDAsIHNpemVvZigqbWViMykpOworCQlhcF9tc2ctPmxlbmd0aCA9IHNpemVvZigqbWViMyk7CisJCW1lYjMtPmhlYWRlci5tc2dfdHlwZV9jb2RlID0gVFlQRTUwX1RZUEVfQ09ERTsKKwkJbWViMy0+aGVhZGVyLm1zZ19sZW4gPSBzaXplb2YoKm1lYjMpOworCQltZWIzLT5rZXlibG9ja190eXBlID0gVFlQRTUwX01FQjNfRk1UOworCQltb2QgPSBtZWIzLT5tb2R1bHVzICsgc2l6ZW9mKG1lYjMtPm1vZHVsdXMpIC0gbW9kX2xlbjsKKwkJZXhwID0gbWViMy0+ZXhwb25lbnQgKyBzaXplb2YobWViMy0+ZXhwb25lbnQpIC0gbW9kX2xlbjsKKwkJaW5wID0gbWViMy0+bWVzc2FnZSArIHNpemVvZihtZWIzLT5tZXNzYWdlKSAtIG1vZF9sZW47CiAJfQogCiAJaWYgKGNvcHlfZnJvbV91c2VyKG1vZCwgbWV4LT5uX21vZHVsdXMsIG1vZF9sZW4pIHx8CkBAIC0xNDIsNyArMTU1LDcgQEAKIAkJCQkgICAgICAgc3RydWN0IGFwX21lc3NhZ2UgKmFwX21zZywKIAkJCQkgICAgICAgc3RydWN0IGljYV9yc2FfbW9kZXhwb19jcnQgKmNydCkKIHsKLQlpbnQgbW9kX2xlbiwgc2hvcnRfbGVuLCBsb25nX2xlbiwgbG9uZ19vZmZzZXQ7CisJaW50IG1vZF9sZW4sIHNob3J0X2xlbiwgbG9uZ19sZW4sIGxvbmdfb2Zmc2V0LCBsaW1pdDsKIAl1bnNpZ25lZCBjaGFyICpwLCAqcSwgKmRwLCAqZHEsICp1LCAqaW5wOwogCiAJbW9kX2xlbiA9IGNydC0+aW5wdXRkYXRhbGVuZ3RoOwpAQCAtMTUyLDE0ICsxNjUsMjAgQEAKIAkvKgogCSAqIENFWDJBIGNhbm5vdCBoYW5kbGUgcCwgZHAsIG9yIFUgPiAxMjggYnl0ZXMuCiAJICogSWYgd2UgaGF2ZSBvbmUgb2YgdGhlc2UsIHdlIG5lZWQgdG8gZG8gZXh0cmEgY2hlY2tpbmcuCisJICogRm9yIENFWDNBIHRoZSBsaW1pdCBpcyAyNTYgYnl0ZXMuCiAJICovCi0JaWYgKGxvbmdfbGVuID4gMTI4KSB7CisJaWYgKHpkZXYtPm1heF9tb2Rfc2l6ZSA9PSBDRVgzQV9NQVhfTU9EX1NJWkUpCisJCWxpbWl0ID0gMjU2OworCWVsc2UKKwkJbGltaXQgPSAxMjg7CisKKwlpZiAobG9uZ19sZW4gPiBsaW1pdCkgewogCQkvKgogCQkgKiB6Y3J5cHRfcnNhX2NydCBhbHJlYWR5IGNoZWNrZWQgZm9yIHRoZSBsZWFkaW5nCiAJCSAqIHplcm9lcyBvZiBucF9wcmltZSwgYnBfa2V5IGFuZCB1X211bHRfaW5jLgogCQkgKi8KLQkJbG9uZ19vZmZzZXQgPSBsb25nX2xlbiAtIDEyODsKLQkJbG9uZ19sZW4gPSAxMjg7CisJCWxvbmdfb2Zmc2V0ID0gbG9uZ19sZW4gLSBsaW1pdDsKKwkJbG9uZ19sZW4gPSBsaW1pdDsKIAl9IGVsc2UKIAkJbG9uZ19vZmZzZXQgPSAwOwogCkBAIC0xODAsNyArMTk5LDcgQEAKIAkJZHEgPSBjcmIxLT5kcSArIHNpemVvZihjcmIxLT5kcSkgLSBzaG9ydF9sZW47CiAJCXUgPSBjcmIxLT51ICsgc2l6ZW9mKGNyYjEtPnUpIC0gbG9uZ19sZW47CiAJCWlucCA9IGNyYjEtPm1lc3NhZ2UgKyBzaXplb2YoY3JiMS0+bWVzc2FnZSkgLSBtb2RfbGVuOwotCX0gZWxzZSB7CisJfSBlbHNlIGlmIChsb25nX2xlbiA8PSAxMjgpIHsKIAkJc3RydWN0IHR5cGU1MF9jcmIyX21zZyAqY3JiMiA9IGFwX21zZy0+bWVzc2FnZTsKIAkJbWVtc2V0KGNyYjIsIDAsIHNpemVvZigqY3JiMikpOwogCQlhcF9tc2ctPmxlbmd0aCA9IHNpemVvZigqY3JiMik7CkBAIC0xOTMsNiArMjEyLDIwIEBACiAJCWRxID0gY3JiMi0+ZHEgKyBzaXplb2YoY3JiMi0+ZHEpIC0gc2hvcnRfbGVuOwogCQl1ID0gY3JiMi0+dSArIHNpemVvZihjcmIyLT51KSAtIGxvbmdfbGVuOwogCQlpbnAgPSBjcmIyLT5tZXNzYWdlICsgc2l6ZW9mKGNyYjItPm1lc3NhZ2UpIC0gbW9kX2xlbjsKKwl9IGVsc2UgeworCQkvKiBsb25nX2xlbiA+PSAyNTYgKi8KKwkJc3RydWN0IHR5cGU1MF9jcmIzX21zZyAqY3JiMyA9IGFwX21zZy0+bWVzc2FnZTsKKwkJbWVtc2V0KGNyYjMsIDAsIHNpemVvZigqY3JiMykpOworCQlhcF9tc2ctPmxlbmd0aCA9IHNpemVvZigqY3JiMyk7CisJCWNyYjMtPmhlYWRlci5tc2dfdHlwZV9jb2RlID0gVFlQRTUwX1RZUEVfQ09ERTsKKwkJY3JiMy0+aGVhZGVyLm1zZ19sZW4gPSBzaXplb2YoKmNyYjMpOworCQljcmIzLT5rZXlibG9ja190eXBlID0gVFlQRTUwX0NSQjNfRk1UOworCQlwID0gY3JiMy0+cCArIHNpemVvZihjcmIzLT5wKSAtIGxvbmdfbGVuOworCQlxID0gY3JiMy0+cSArIHNpemVvZihjcmIzLT5xKSAtIHNob3J0X2xlbjsKKwkJZHAgPSBjcmIzLT5kcCArIHNpemVvZihjcmIzLT5kcCkgLSBsb25nX2xlbjsKKwkJZHEgPSBjcmIzLT5kcSArIHNpemVvZihjcmIzLT5kcSkgLSBzaG9ydF9sZW47CisJCXUgPSBjcmIzLT51ICsgc2l6ZW9mKGNyYjMtPnUpIC0gbG9uZ19sZW47CisJCWlucCA9IGNyYjMtPm1lc3NhZ2UgKyBzaXplb2YoY3JiMy0+bWVzc2FnZSkgLSBtb2RfbGVuOwogCX0KIAogCWlmIChjb3B5X2Zyb21fdXNlcihwLCBjcnQtPm5wX3ByaW1lICsgbG9uZ19vZmZzZXQsIGxvbmdfbGVuKSB8fApAQCAtMjAzLDcgKzIzNiw2IEBACiAJICAgIGNvcHlfZnJvbV91c2VyKGlucCwgY3J0LT5pbnB1dGRhdGEsIG1vZF9sZW4pKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIzMCw3ICsyNjIsMTAgQEAKIAkJemRldi0+b25saW5lID0gMDsKIAkJcmV0dXJuIC1FQUdBSU47CS8qIHJlcGVhdCB0aGUgcmVxdWVzdCBvbiBhIGRpZmZlcmVudCBkZXZpY2UuICovCiAJfQotCUJVR19PTih0ODBoLT5sZW4gPiBDRVgyQV9NQVhfUkVTUE9OU0VfU0laRSk7CisJaWYgKHpkZXYtPnVzZXJfc3BhY2VfdHlwZSA9PSBaQ1JZUFRfQ0VYMkEpCisJCUJVR19PTih0ODBoLT5sZW4gPiBDRVgyQV9NQVhfUkVTUE9OU0VfU0laRSk7CisJZWxzZQorCQlCVUdfT04odDgwaC0+bGVuID4gQ0VYM0FfTUFYX1JFU1BPTlNFX1NJWkUpOwogCWRhdGEgPSByZXBseS0+bWVzc2FnZSArIHQ4MGgtPmxlbiAtIG91dHB1dGRhdGFsZW5ndGg7CiAJaWYgKGNvcHlfdG9fdXNlcihvdXRwdXRkYXRhLCBkYXRhLCBvdXRwdXRkYXRhbGVuZ3RoKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CkBAIC0yODIsNyArMzE3LDEwIEBACiAJfQogCXQ4MGggPSByZXBseS0+bWVzc2FnZTsKIAlpZiAodDgwaC0+dHlwZSA9PSBUWVBFODBfUlNQX0NPREUpIHsKLQkJbGVuZ3RoID0gbWluKENFWDJBX01BWF9SRVNQT05TRV9TSVpFLCAoaW50KSB0ODBoLT5sZW4pOworCQlpZiAoYXBfZGV2LT5kZXZpY2VfdHlwZSA9PSBBUF9ERVZJQ0VfVFlQRV9DRVgyQSkKKwkJCWxlbmd0aCA9IG1pbihDRVgyQV9NQVhfUkVTUE9OU0VfU0laRSwgKGludCkgdDgwaC0+bGVuKTsKKwkJZWxzZQorCQkJbGVuZ3RoID0gbWluKENFWDNBX01BWF9SRVNQT05TRV9TSVpFLCAoaW50KSB0ODBoLT5sZW4pOwogCQltZW1jcHkobXNnLT5tZXNzYWdlLCByZXBseS0+bWVzc2FnZSwgbGVuZ3RoKTsKIAl9IGVsc2UKIAkJbWVtY3B5KG1zZy0+bWVzc2FnZSwgcmVwbHktPm1lc3NhZ2UsIHNpemVvZiBlcnJvcl9yZXBseSk7CkBAIC0zMDcsNyArMzQ1LDEwIEBACiAJaW50IHJjOwogCiAJYXBfaW5pdF9tZXNzYWdlKCZhcF9tc2cpOwotCWFwX21zZy5tZXNzYWdlID0ga21hbGxvYyhDRVgyQV9NQVhfTUVTU0FHRV9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoemRldi0+dXNlcl9zcGFjZV90eXBlID09IFpDUllQVF9DRVgyQSkKKwkJYXBfbXNnLm1lc3NhZ2UgPSBrbWFsbG9jKENFWDJBX01BWF9NRVNTQUdFX1NJWkUsIEdGUF9LRVJORUwpOworCWVsc2UKKwkJYXBfbXNnLm1lc3NhZ2UgPSBrbWFsbG9jKENFWDNBX01BWF9NRVNTQUdFX1NJWkUsIEdGUF9LRVJORUwpOwogCWlmICghYXBfbXNnLm1lc3NhZ2UpCiAJCXJldHVybiAtRU5PTUVNOwogCWFwX21zZy5wc21pZCA9ICgoKHVuc2lnbmVkIGxvbmcgbG9uZykgY3VycmVudC0+cGlkKSA8PCAzMikgKwpAQCAtMzQ1LDcgKzM4NiwxMCBAQAogCWludCByYzsKIAogCWFwX2luaXRfbWVzc2FnZSgmYXBfbXNnKTsKLQlhcF9tc2cubWVzc2FnZSA9IGttYWxsb2MoQ0VYMkFfTUFYX01FU1NBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKHpkZXYtPnVzZXJfc3BhY2VfdHlwZSA9PSBaQ1JZUFRfQ0VYMkEpCisJCWFwX21zZy5tZXNzYWdlID0ga21hbGxvYyhDRVgyQV9NQVhfTUVTU0FHRV9TSVpFLCBHRlBfS0VSTkVMKTsKKwllbHNlCisJCWFwX21zZy5tZXNzYWdlID0ga21hbGxvYyhDRVgzQV9NQVhfTUVTU0FHRV9TSVpFLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWFwX21zZy5tZXNzYWdlKQogCQlyZXR1cm4gLUVOT01FTTsKIAlhcF9tc2cucHNtaWQgPSAoKCh1bnNpZ25lZCBsb25nIGxvbmcpIGN1cnJlbnQtPnBpZCkgPDwgMzIpICsKQEAgLTM5Nyw2ICs0NDEsNyBAQAogCQl6ZGV2LT5tYXhfbW9kX3NpemUgPSBDRVgyQV9NQVhfTU9EX1NJWkU7CiAJCXpkZXYtPnNob3J0X2NydCA9IDE7CiAJCXpkZXYtPnNwZWVkX3JhdGluZyA9IENFWDJBX1NQRUVEX1JBVElORzsKKwkJemRldi0+bWF4X2V4cF9iaXRfbGVuZ3RoID0gQ0VYMkFfTUFYX01PRF9TSVpFOwogCQlicmVhazsKIAljYXNlIEFQX0RFVklDRV9UWVBFX0NFWDNBOgogCQl6ZGV2ID0gemNyeXB0X2RldmljZV9hbGxvYyhDRVgzQV9NQVhfUkVTUE9OU0VfU0laRSk7CkBAIC00MDQsOCArNDQ5LDEzIEBACiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJemRldi0+dXNlcl9zcGFjZV90eXBlID0gWkNSWVBUX0NFWDNBOwogCQl6ZGV2LT50eXBlX3N0cmluZyA9ICJDRVgzQSI7Ci0JCXpkZXYtPm1pbl9tb2Rfc2l6ZSA9IENFWDNBX01JTl9NT0RfU0laRTsKLQkJemRldi0+bWF4X21vZF9zaXplID0gQ0VYM0FfTUFYX01PRF9TSVpFOworCQl6ZGV2LT5taW5fbW9kX3NpemUgPSBDRVgyQV9NSU5fTU9EX1NJWkU7CisJCXpkZXYtPm1heF9tb2Rfc2l6ZSA9IENFWDJBX01BWF9NT0RfU0laRTsKKwkJemRldi0+bWF4X2V4cF9iaXRfbGVuZ3RoID0gQ0VYMkFfTUFYX01PRF9TSVpFOworCQlpZiAoYXBfNDA5Nl9jb21tYW5kc19hdmFpbGFibGUoYXBfZGV2LT5xaWQpKSB7CisJCQl6ZGV2LT5tYXhfbW9kX3NpemUgPSBDRVgzQV9NQVhfTU9EX1NJWkU7CisJCQl6ZGV2LT5tYXhfZXhwX2JpdF9sZW5ndGggPSBDRVgzQV9NQVhfTU9EX1NJWkU7CisJCX0KIAkJemRldi0+c2hvcnRfY3J0ID0gMTsKIAkJemRldi0+c3BlZWRfcmF0aW5nID0gQ0VYM0FfU1BFRURfUkFUSU5HOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X2NleDJhLmggYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9jZXgyYS5oCmluZGV4IDhmNjlkMWQuLjAzNTA2NjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X2NleDJhLmgKKysrIGIvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfY2V4MmEuaApAQCAtNTEsOCArNTEsMTAgQEAKIAogI2RlZmluZSBUWVBFNTBfTUVCMV9GTVQJCTB4MDAwMQogI2RlZmluZSBUWVBFNTBfTUVCMl9GTVQJCTB4MDAwMgorI2RlZmluZSBUWVBFNTBfTUVCM19GTVQJCTB4MDAwMwogI2RlZmluZSBUWVBFNTBfQ1JCMV9GTVQJCTB4MDAxMQogI2RlZmluZSBUWVBFNTBfQ1JCMl9GTVQJCTB4MDAxMgorI2RlZmluZSBUWVBFNTBfQ1JCM19GTVQJCTB4MDAxMwogCiAvKiBNb2QtRXhwLCB3aXRoIGEgc21hbGwgbW9kdWx1cyAqLwogc3RydWN0IHR5cGU1MF9tZWIxX21zZyB7CkBAIC03NCw2ICs3NiwxNiBAQAogCXVuc2lnbmVkIGNoYXIJbWVzc2FnZVsyNTZdOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAorLyogTW9kLUV4cCwgd2l0aCBhIGxhcmdlciBtb2R1bHVzICovCitzdHJ1Y3QgdHlwZTUwX21lYjNfbXNnIHsKKwlzdHJ1Y3QgdHlwZTUwX2hkciBoZWFkZXI7CisJdW5zaWduZWQgc2hvcnQJa2V5YmxvY2tfdHlwZTsJLyogMHgwMDAzICovCisJdW5zaWduZWQgY2hhcglyZXNlcnZlZFs2XTsKKwl1bnNpZ25lZCBjaGFyCWV4cG9uZW50WzUxMl07CisJdW5zaWduZWQgY2hhcgltb2R1bHVzWzUxMl07CisJdW5zaWduZWQgY2hhcgltZXNzYWdlWzUxMl07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCiAvKiBDUlQsIHdpdGggYSBzbWFsbCBtb2R1bHVzICovCiBzdHJ1Y3QgdHlwZTUwX2NyYjFfbXNnIHsKIAlzdHJ1Y3QgdHlwZTUwX2hkciBoZWFkZXI7CkBAIC0xMDAsNiArMTEyLDE5IEBACiAJdW5zaWduZWQgY2hhcgltZXNzYWdlWzI1Nl07CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCisvKiBDUlQsIHdpdGggYSBsYXJnZXIgbW9kdWx1cyAqLworc3RydWN0IHR5cGU1MF9jcmIzX21zZyB7CisJc3RydWN0IHR5cGU1MF9oZHIgaGVhZGVyOworCXVuc2lnbmVkIHNob3J0CWtleWJsb2NrX3R5cGU7CS8qIDB4MDAxMyAqLworCXVuc2lnbmVkIGNoYXIJcmVzZXJ2ZWRbNl07CisJdW5zaWduZWQgY2hhcglwWzI1Nl07CisJdW5zaWduZWQgY2hhcglxWzI1Nl07CisJdW5zaWduZWQgY2hhcglkcFsyNTZdOworCXVuc2lnbmVkIGNoYXIJZHFbMjU2XTsKKwl1bnNpZ25lZCBjaGFyCXVbMjU2XTsKKwl1bnNpZ25lZCBjaGFyCW1lc3NhZ2VbNTEyXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKIC8qKgogICogVGhlIHR5cGUgODAgcmVzcG9uc2UgZmFtaWx5IGlzIGFzc29jaWF0ZWQgd2l0aCBhIENFWDJBIGNhcmQuCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfcGNpY2EuYyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X3BjaWNhLmMKaW5kZXggMDllOTM0Yi4uMWFmYjY5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfcGNpY2EuYworKysgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9wY2ljYS5jCkBAIC0zNzMsNiArMzczLDcgQEAKIAl6ZGV2LT5taW5fbW9kX3NpemUgPSBQQ0lDQV9NSU5fTU9EX1NJWkU7CiAJemRldi0+bWF4X21vZF9zaXplID0gUENJQ0FfTUFYX01PRF9TSVpFOwogCXpkZXYtPnNwZWVkX3JhdGluZyA9IFBDSUNBX1NQRUVEX1JBVElORzsKKwl6ZGV2LT5tYXhfZXhwX2JpdF9sZW5ndGggPSBQQ0lDQV9NQVhfTU9EX1NJWkU7CiAJYXBfZGV2LT5yZXBseSA9ICZ6ZGV2LT5yZXBseTsKIAlhcF9kZXYtPnByaXZhdGUgPSB6ZGV2OwogCXJjID0gemNyeXB0X2RldmljZV9yZWdpc3Rlcih6ZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X3BjaWNjLmMgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9wY2ljYy5jCmluZGV4IDlkZWM1YzcuLmFhNGMwNTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X3BjaWNjLmMKKysrIGIvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfcGNpY2MuYwpAQCAtNTc5LDYgKzU3OSw3IEBACiAJemRldi0+bWluX21vZF9zaXplID0gUENJQ0NfTUlOX01PRF9TSVpFOwogCXpkZXYtPm1heF9tb2Rfc2l6ZSA9IFBDSUNDX01BWF9NT0RfU0laRTsKIAl6ZGV2LT5zcGVlZF9yYXRpbmcgPSBQQ0lDQ19TUEVFRF9SQVRJTkc7CisJemRldi0+bWF4X2V4cF9iaXRfbGVuZ3RoID0gUENJQ0NfTUFYX01PRF9TSVpFOwogCWFwX2Rldi0+cmVwbHkgPSAmemRldi0+cmVwbHk7CiAJYXBfZGV2LT5wcml2YXRlID0gemRldjsKIAlyYyA9IHpjcnlwdF9kZXZpY2VfcmVnaXN0ZXIoemRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9wY2l4Y2MuYyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X3BjaXhjYy5jCmluZGV4IDUxMGZhYjQuLjRmODVlYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X3BjaXhjYy5jCisrKyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X3BjaXhjYy5jCkBAIC00NSwxMiArNDUsMTIgQEAKICNkZWZpbmUgUENJWENDX01JTl9NT0RfU0laRV9PTEQJIDY0CS8qICA1MTIgYml0cwkqLwogI2RlZmluZSBQQ0lYQ0NfTUFYX01PRF9TSVpFCTI1NgkvKiAyMDQ4IGJpdHMJKi8KICNkZWZpbmUgQ0VYM0NfTUlOX01PRF9TSVpFCVBDSVhDQ19NSU5fTU9EX1NJWkUKLSNkZWZpbmUgQ0VYM0NfTUFYX01PRF9TSVpFCVBDSVhDQ19NQVhfTU9EX1NJWkUKKyNkZWZpbmUgQ0VYM0NfTUFYX01PRF9TSVpFCTUxMgkvKiA0MDk2IGJpdHMJKi8KIAogI2RlZmluZSBQQ0lYQ0NfTUNMMl9TUEVFRF9SQVRJTkcJNzg3MAogI2RlZmluZSBQQ0lYQ0NfTUNMM19TUEVFRF9SQVRJTkcJNzg3MAogI2RlZmluZSBDRVgyQ19TUEVFRF9SQVRJTkcJCTcwMDAKLSNkZWZpbmUgQ0VYM0NfU1BFRURfUkFUSU5HCQk2NTAwCS8qIEZJWE1FOiBuZWVkcyBmaW5ldHVuaW5nICovCisjZGVmaW5lIENFWDNDX1NQRUVEX1JBVElORwkJNjUwMAogCiAjZGVmaW5lIFBDSVhDQ19NQVhfSUNBX01FU1NBR0VfU0laRSAweDc3YyAgLyogbWF4IHNpemUgdHlwZTYgdjIgY3J0IG1lc3NhZ2UgKi8KICNkZWZpbmUgUENJWENDX01BWF9JQ0FfUkVTUE9OU0VfU0laRSAweDc3YyAvKiBtYXggc2l6ZSB0eXBlODYgdjIgcmVwbHkJICAgICovCkBAIC01NjcsNiArNTY3LDE1IEBACiAJY2FzZSBUWVBFODhfUlNQX0NPREU6CiAJCXJldHVybiBjb252ZXJ0X2Vycm9yKHpkZXYsIHJlcGx5KTsKIAljYXNlIFRZUEU4Nl9SU1BfQ09ERToKKwkJaWYgKG1zZy0+Y3ByYnguY2NwX3J0Y29kZSAmJgorCQkgICAobXNnLT5jcHJieC5jY3BfcnNjb2RlID09IDB4MTRmKSAmJgorCQkgICAob3V0cHV0ZGF0YWxlbmd0aCA+IDI1NikpIHsKKwkJCWlmICh6ZGV2LT5tYXhfZXhwX2JpdF9sZW5ndGggPD0gMTcpIHsKKwkJCQl6ZGV2LT5tYXhfZXhwX2JpdF9sZW5ndGggPSAxNzsKKwkJCQlyZXR1cm4gLUVBR0FJTjsKKwkJCX0gZWxzZQorCQkJCXJldHVybiAtRUlOVkFMOworCQl9CiAJCWlmIChtc2ctPmhkci5yZXBseV9jb2RlKQogCQkJcmV0dXJuIGNvbnZlcnRfZXJyb3IoemRldiwgcmVwbHkpOwogCQlpZiAobXNnLT5jcHJieC5jcHJiX3Zlcl9pZCA9PSAweDAyKQpAQCAtMTA1MiwxMSArMTA2MSwxMyBAQAogCQkJemRldi0+c3BlZWRfcmF0aW5nID0gUENJWENDX01DTDJfU1BFRURfUkFUSU5HOwogCQkJemRldi0+bWluX21vZF9zaXplID0gUENJWENDX01JTl9NT0RfU0laRV9PTEQ7CiAJCQl6ZGV2LT5tYXhfbW9kX3NpemUgPSBQQ0lYQ0NfTUFYX01PRF9TSVpFOworCQkJemRldi0+bWF4X2V4cF9iaXRfbGVuZ3RoID0gUENJWENDX01BWF9NT0RfU0laRTsKIAkJfSBlbHNlIHsKIAkJCXpkZXYtPnR5cGVfc3RyaW5nID0gIlBDSVhDQ19NQ0wzIjsKIAkJCXpkZXYtPnNwZWVkX3JhdGluZyA9IFBDSVhDQ19NQ0wzX1NQRUVEX1JBVElORzsKIAkJCXpkZXYtPm1pbl9tb2Rfc2l6ZSA9IFBDSVhDQ19NSU5fTU9EX1NJWkU7CiAJCQl6ZGV2LT5tYXhfbW9kX3NpemUgPSBQQ0lYQ0NfTUFYX01PRF9TSVpFOworCQkJemRldi0+bWF4X2V4cF9iaXRfbGVuZ3RoID0gUENJWENDX01BWF9NT0RfU0laRTsKIAkJfQogCQlicmVhazsKIAljYXNlIEFQX0RFVklDRV9UWVBFX0NFWDJDOgpAQCAtMTA2NSw2ICsxMDc2LDcgQEAKIAkJemRldi0+c3BlZWRfcmF0aW5nID0gQ0VYMkNfU1BFRURfUkFUSU5HOwogCQl6ZGV2LT5taW5fbW9kX3NpemUgPSBQQ0lYQ0NfTUlOX01PRF9TSVpFOwogCQl6ZGV2LT5tYXhfbW9kX3NpemUgPSBQQ0lYQ0NfTUFYX01PRF9TSVpFOworCQl6ZGV2LT5tYXhfZXhwX2JpdF9sZW5ndGggPSBQQ0lYQ0NfTUFYX01PRF9TSVpFOwogCQlicmVhazsKIAljYXNlIEFQX0RFVklDRV9UWVBFX0NFWDNDOgogCQl6ZGV2LT51c2VyX3NwYWNlX3R5cGUgPSBaQ1JZUFRfQ0VYM0M7CkBAIC0xMDcyLDYgKzEwODQsNyBAQAogCQl6ZGV2LT5zcGVlZF9yYXRpbmcgPSBDRVgzQ19TUEVFRF9SQVRJTkc7CiAJCXpkZXYtPm1pbl9tb2Rfc2l6ZSA9IENFWDNDX01JTl9NT0RfU0laRTsKIAkJemRldi0+bWF4X21vZF9zaXplID0gQ0VYM0NfTUFYX01PRF9TSVpFOworCQl6ZGV2LT5tYXhfZXhwX2JpdF9sZW5ndGggPSBDRVgzQ19NQVhfTU9EX1NJWkU7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWdvdG8gb3V0X2ZyZWU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAva3ZtL2t2bV92aXJ0aW8uYyBiL2RyaXZlcnMvczM5MC9rdm0va3ZtX3ZpcnRpby5jCmluZGV4IDM3NWFlZWEuLjQxNDQyN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9rdm0va3ZtX3ZpcnRpby5jCisrKyBiL2RyaXZlcnMvczM5MC9rdm0va3ZtX3ZpcnRpby5jCkBAIC0xMCw2ICsxMCw3IEBACiAgKiAgICBBdXRob3Iocyk6IENocmlzdGlhbiBCb3JudHJhZWdlciA8Ym9ybnRyYWVnZXJAZGUuaWJtLmNvbT4KICAqLwogCisjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgpAQCAtMjUsNiArMjYsNyBAQAogI2luY2x1ZGUgPGFzbS9rdm1fdmlydGlvLmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL3MzOTBfZXh0Lmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgogCiAjZGVmaW5lIFZJUlRJT19TVUJDT0RFXzY0IDB4MEQwMAogCkBAIC0zNzksNiArMzgxLDcgQEAKIAl1MTYgc3ViY29kZTsKIAl1MzIgcGFyYW07CiAKKwlrc3RhdF9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpKS5pcnFzW0VYVElOVF9WUlRdKys7CiAJc3ViY29kZSA9IGV4dF9pbnRfY29kZSA+PiAxNjsKIAlpZiAoKHN1YmNvZGUgJiAweGZmMDApICE9IFZJUlRJT19TVUJDT0RFXzY0KQogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L0tjb25maWcgYi9kcml2ZXJzL3MzOTAvbmV0L0tjb25maWcKaW5kZXggNDU2YjE4Ny4uZmE4MGJhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9LY29uZmlnCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvS2NvbmZpZwpAQCAtMiw3ICsyLDggQEAKIAlkZXBlbmRzIG9uIE5FVERFVklDRVMgJiYgUzM5MAogCiBjb25maWcgTENTCi0JdHJpc3RhdGUgIkxhbiBDaGFubmVsIFN0YXRpb24gSW50ZXJmYWNlIgorCWRlZl90cmlzdGF0ZSBtCisJcHJvbXB0ICJMYW4gQ2hhbm5lbCBTdGF0aW9uIEludGVyZmFjZSIKIAlkZXBlbmRzIG9uIENDVyAmJiBORVRERVZJQ0VTICYmIChORVRfRVRIRVJORVQgfHwgVFIgfHwgRkRESSkKIAloZWxwCiAJICAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIHVzZSBMQ1MgbmV0d29ya2luZyBvbiBJQk0gU3lzdGVtIHouCkBAIC0xMiw3ICsxMyw4IEBACiAJICAgSWYgeW91IGRvIG5vdCBrbm93IHdoYXQgaXQgaXMsIGl0J3Mgc2FmZSB0byBjaG9vc2UgWS4KIAogY29uZmlnIENUQ00KLQl0cmlzdGF0ZSAiQ1RDIGFuZCBNUEMgU05BIGRldmljZSBzdXBwb3J0IgorCWRlZl90cmlzdGF0ZSBtCisJcHJvbXB0ICJDVEMgYW5kIE1QQyBTTkEgZGV2aWNlIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBDQ1cgJiYgTkVUREVWSUNFUwogCWhlbHAKIAkgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byB1c2UgY2hhbm5lbC10by1jaGFubmVsCkBAIC0yNiw3ICsyOCw4IEBACiAJICBJZiB5b3UgZG8gbm90IG5lZWQgYW55IGNoYW5uZWwtdG8tY2hhbm5lbCBjb25uZWN0aW9uLCBjaG9vc2UgTi4KIAogY29uZmlnIE5FVElVQ1YKLQl0cmlzdGF0ZSAiSVVDViBuZXR3b3JrIGRldmljZSBzdXBwb3J0IChWTSBvbmx5KSIKKwlkZWZfdHJpc3RhdGUgbQorCXByb21wdCAiSVVDViBuZXR3b3JrIGRldmljZSBzdXBwb3J0IChWTSBvbmx5KSIKIAlkZXBlbmRzIG9uIElVQ1YgJiYgTkVUREVWSUNFUwogCWhlbHAKIAkgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byB1c2UgaW50ZXItdXNlciBjb21tdW5pY2F0aW9uCkBAIC0zNywxNCArNDAsMTYgQEAKIAkgIFRoZSBtb2R1bGUgbmFtZSBpcyBuZXRpdWN2LiBJZiB1bnN1cmUsIGNob29zZSBZLgogCiBjb25maWcgU01TR0lVQ1YKLQl0cmlzdGF0ZSAiSVVDViBzcGVjaWFsIG1lc3NhZ2Ugc3VwcG9ydCAoVk0gb25seSkiCisJZGVmX3RyaXN0YXRlIG0KKwlwcm9tcHQgIklVQ1Ygc3BlY2lhbCBtZXNzYWdlIHN1cHBvcnQgKFZNIG9ubHkpIgogCWRlcGVuZHMgb24gSVVDVgogCWhlbHAKIAkgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byBiZSBhYmxlIHRvIHJlY2VpdmUgU01TRyBtZXNzYWdlcwogCSAgZnJvbSBvdGhlciBWTSBndWVzdCBzeXN0ZW1zLgogCiBjb25maWcgU01TR0lVQ1ZfRVZFTlQKLQl0cmlzdGF0ZSAiRGVsaXZlciBJVUNWIHNwZWNpYWwgbWVzc2FnZXMgYXMgdWV2ZW50cyAoVk0gb25seSkiCisJZGVmX3RyaXN0YXRlIG0KKwlwcm9tcHQgIkRlbGl2ZXIgSVVDViBzcGVjaWFsIG1lc3NhZ2VzIGFzIHVldmVudHMgKFZNIG9ubHkpIgogCWRlcGVuZHMgb24gU01TR0lVQ1YKIAloZWxwCiAJICBTZWxlY3QgdGhpcyBvcHRpb24gdG8gZGVsaXZlciBDUCBzcGVjaWFsIG1lc3NhZ2VzIChTTVNHcykgYXMKQEAgLTU0LDcgKzU5LDggQEAKIAkgIFRvIGNvbXBpbGUgYXMgYSBtb2R1bGUsIGNob29zZSBNLiBUaGUgbW9kdWxlIG5hbWUgaXMgInNtc2dpdWN2X2FwcCIuCiAKIGNvbmZpZyBDTEFXCi0JdHJpc3RhdGUgIkNMQVcgZGV2aWNlIHN1cHBvcnQiCisJZGVmX3RyaXN0YXRlIG0KKwlwcm9tcHQgIkNMQVcgZGV2aWNlIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBDQ1cgJiYgTkVUREVWSUNFUwogCWhlbHAKIAkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIGNoYW5uZWwgYXR0YWNoZWQgQ0xBVyBkZXZpY2VzLgpAQCAtNjQsNyArNzAsOCBAQAogCSAgVG8gY29tcGlsZSBpbnRvIHRoZSBrZXJuZWwsIGNob29zZSBZLgogCiBjb25maWcgUUVUSAotCXRyaXN0YXRlICJHaWdhYml0IEV0aGVybmV0IGRldmljZSBzdXBwb3J0IgorCWRlZl90cmlzdGF0ZSB5CisJcHJvbXB0ICJHaWdhYml0IEV0aGVybmV0IGRldmljZSBzdXBwb3J0IgogCWRlcGVuZHMgb24gQ0NXICYmIE5FVERFVklDRVMgJiYgSVBfTVVMVElDQVNUICYmIFFESU8KIAloZWxwCiAJICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgSUJNIFN5c3RlbSB6IE9TQSBFeHByZXNzIGFkYXB0ZXJzCkBAIC03OCwyNSArODUsMjUgQEAKIAkgIFRoZSBtb2R1bGUgbmFtZSBpcyBxZXRoLgogCiBjb25maWcgUUVUSF9MMgotICAgICAgICB0cmlzdGF0ZSAicWV0aCBsYXllciAyIGRldmljZSBzdXBwb3J0IgotICAgICAgICBkZXBlbmRzIG9uIFFFVEgKLSAgICAgICAgaGVscAotICAgICAgICAgIFNlbGVjdCB0aGlzIG9wdGlvbiB0byBiZSBhYmxlIHRvIHJ1biBxZXRoIGRldmljZXMgaW4gbGF5ZXIgMiBtb2RlLgotICAgICAgICAgIFRvIGNvbXBpbGUgYXMgYSBtb2R1bGUsIGNob29zZSBNLiBUaGUgbW9kdWxlIG5hbWUgaXMgcWV0aF9sMi4KLSAgICAgICAgICBJZiB1bnN1cmUsIGNob29zZSB5LgorCWRlZl90cmlzdGF0ZSB5CisJcHJvbXB0ICJxZXRoIGxheWVyIDIgZGV2aWNlIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBRRVRICisJaGVscAorCSAgU2VsZWN0IHRoaXMgb3B0aW9uIHRvIGJlIGFibGUgdG8gcnVuIHFldGggZGV2aWNlcyBpbiBsYXllciAyIG1vZGUuCisJICBUbyBjb21waWxlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTS4gVGhlIG1vZHVsZSBuYW1lIGlzIHFldGhfbDIuCisJICBJZiB1bnN1cmUsIGNob29zZSB5LgogCiBjb25maWcgUUVUSF9MMwotICAgICAgICB0cmlzdGF0ZSAicWV0aCBsYXllciAzIGRldmljZSBzdXBwb3J0IgotICAgICAgICBkZXBlbmRzIG9uIFFFVEgKLSAgICAgICAgaGVscAotICAgICAgICAgIFNlbGVjdCB0aGlzIG9wdGlvbiB0byBiZSBhYmxlIHRvIHJ1biBxZXRoIGRldmljZXMgaW4gbGF5ZXIgMyBtb2RlLgotICAgICAgICAgIFRvIGNvbXBpbGUgYXMgYSBtb2R1bGUgY2hvb3NlIE0uIFRoZSBtb2R1bGUgbmFtZSBpcyBxZXRoX2wzLgotICAgICAgICAgIElmIHVuc3VyZSwgY2hvb3NlIFkuCisJZGVmX3RyaXN0YXRlIHkKKwlwcm9tcHQgInFldGggbGF5ZXIgMyBkZXZpY2Ugc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFFFVEgKKwloZWxwCisJICBTZWxlY3QgdGhpcyBvcHRpb24gdG8gYmUgYWJsZSB0byBydW4gcWV0aCBkZXZpY2VzIGluIGxheWVyIDMgbW9kZS4KKwkgIFRvIGNvbXBpbGUgYXMgYSBtb2R1bGUgY2hvb3NlIE0uIFRoZSBtb2R1bGUgbmFtZSBpcyBxZXRoX2wzLgorCSAgSWYgdW5zdXJlLCBjaG9vc2UgWS4KIAogY29uZmlnIFFFVEhfSVBWNgotICAgICAgICBib29sCi0gICAgICAgIGRlcGVuZHMgb24gKFFFVEhfTDMgPSBJUFY2KSB8fCAoUUVUSF9MMyAmJiBJUFY2ID0gJ3knKQotICAgICAgICBkZWZhdWx0IHkKKwlkZWZfYm9vbCB5IGlmIChRRVRIX0wzID0gSVBWNikgfHwgKFFFVEhfTDMgJiYgSVBWNiA9ICd5JykKIAogY29uZmlnIENDV0dST1VQCiAJdHJpc3RhdGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvY2xhdy5jIGIvZHJpdmVycy9zMzkwL25ldC9jbGF3LmMKaW5kZXggOGU0MTUzZC4uY2UzYTVjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9jbGF3LmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9jbGF3LmMKQEAgLTYzLDYgKzYzLDcgQEAKIAogI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAiY2xhdyIKIAorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CiAjaW5jbHVkZSA8YXNtL2Njd2Rldi5oPgogI2luY2x1ZGUgPGFzbS9jY3dncm91cC5oPgogI2luY2x1ZGUgPGFzbS9kZWJ1Zy5oPgpAQCAtNjQwLDYgKzY0MSw3IEBACiAgICAgICAgIHN0cnVjdCBjbGF3X2VudiAgKnBfZW52OwogICAgICAgICBzdHJ1Y3QgY2hiayAqcF9jaF9yPU5VTEw7CiAKKwlrc3RhdF9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpKS5pcnFzW0lPSU5UX0NMV10rKzsKIAlDTEFXX0RCRl9URVhUKDQsIHRyYWNlLCAiY2xhd2lycSIpOwogICAgICAgICAvKiBCeXBhc3MgYWxsICd1bnNvbGljaXRlZCBpbnRlcnJ1cHRzJyAqLwogCXByaXZwdHIgPSBkZXZfZ2V0X2RydmRhdGEoJmNkZXYtPmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L2N0Y21fbWFpbi5jIGIvZHJpdmVycy9zMzkwL25ldC9jdGNtX21haW4uYwppbmRleCAyYzdkMmQ5Li40YzI4NDU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L2N0Y21fbWFpbi5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvY3RjbV9tYWluLmMKQEAgLTI0LDYgKzI0LDcgQEAKICNkZWZpbmUgS01TR19DT01QT05FTlQgImN0Y20iCiAjZGVmaW5lIHByX2ZtdChmbXQpIEtNU0dfQ09NUE9ORU5UICI6ICIgZm10CiAKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTEyMDQsNiArMTIwNSw3IEBACiAJaW50IGNzdGF0OwogCWludCBkc3RhdDsKIAorCWtzdGF0X2NwdShzbXBfcHJvY2Vzc29yX2lkKCkpLmlycXNbSU9JTlRfQ1RDXSsrOwogCUNUQ01fREJGX1RFWFRfKFRSQUNFLCBDVENfREJGX0RFQlVHLAogCQkiRW50ZXIgJXMoJXMpIiwgQ1RDTV9GVU5UQUlMLCBkZXZfbmFtZSgmY2Rldi0+ZGV2KSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvbGNzLmMgYi9kcml2ZXJzL3MzOTAvbmV0L2xjcy5jCmluZGV4IDBmMTlkNTQuLjA5ZTdhMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvbGNzLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9sY3MuYwpAQCAtMjYsNiArMjYsNyBAQAogI2RlZmluZSBLTVNHX0NPTVBPTkVOVAkJImxjcyIKICNkZWZpbmUgcHJfZm10KGZtdCkgS01TR19DT01QT05FTlQgIjogIiBmbXQKIAorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaWYuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KQEAgLTExODgsNyArMTE4OSw4IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmlwbV9sb2NrLCBmbGFncyk7CiAJbGlzdF9mb3JfZWFjaChsLCAmY2FyZC0+aXBtX2xpc3QpIHsKIAkJaXBtID0gbGlzdF9lbnRyeShsLCBzdHJ1Y3QgbGNzX2lwbV9saXN0LCBsaXN0KTsKLQkJZm9yIChpbTQgPSBpbjRfZGV2LT5tY19saXN0OyBpbTQgIT0gTlVMTDsgaW00ID0gaW00LT5uZXh0KSB7CisJCWZvciAoaW00ID0gcmN1X2RlcmVmZXJlbmNlKGluNF9kZXYtPm1jX2xpc3QpOworCQkgICAgIGltNCAhPSBOVUxMOyBpbTQgPSByY3VfZGVyZWZlcmVuY2UoaW00LT5uZXh0X3JjdSkpIHsKIAkJCWxjc19nZXRfbWFjX2Zvcl9pcG0oaW00LT5tdWx0aWFkZHIsIGJ1ZiwgY2FyZC0+ZGV2KTsKIAkJCWlmICggKGlwbS0+aXBtLmlwX2FkZHIgPT0gaW00LT5tdWx0aWFkZHIpICYmCiAJCQkgICAgIChtZW1jbXAoYnVmLCAmaXBtLT5pcG0ubWFjX2FkZHIsCkBAIC0xMjMzLDcgKzEyMzUsOCBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlMQ1NfREJGX1RFWFQoNCwgdHJhY2UsICJzZXRtY2xzdCIpOwotCWZvciAoaW00ID0gaW40X2Rldi0+bWNfbGlzdDsgaW00OyBpbTQgPSBpbTQtPm5leHQpIHsKKwlmb3IgKGltNCA9IHJjdV9kZXJlZmVyZW5jZShpbjRfZGV2LT5tY19saXN0KTsgaW00ICE9IE5VTEw7CisJICAgICBpbTQgPSByY3VfZGVyZWZlcmVuY2UoaW00LT5uZXh0X3JjdSkpIHsKIAkJbGNzX2dldF9tYWNfZm9yX2lwbShpbTQtPm11bHRpYWRkciwgYnVmLCBjYXJkLT5kZXYpOwogCQlpcG0gPSBsY3NfY2hlY2tfYWRkcl9lbnRyeShjYXJkLCBpbTQsIGJ1Zik7CiAJCWlmIChpcG0gIT0gTlVMTCkKQEAgLTEyNjksMTAgKzEyNzIsMTAgQEAKIAlpbjRfZGV2ID0gaW5fZGV2X2dldChjYXJkLT5kZXYpOwogCWlmIChpbjRfZGV2ID09IE5VTEwpCiAJCWdvdG8gb3V0OwotCXJlYWRfbG9jaygmaW40X2Rldi0+bWNfbGlzdF9sb2NrKTsKKwlyY3VfcmVhZF9sb2NrKCk7CiAJbGNzX3JlbW92ZV9tY19hZGRyZXNzZXMoY2FyZCxpbjRfZGV2KTsKIAlsY3Nfc2V0X21jX2FkZHJlc3NlcyhjYXJkLCBpbjRfZGV2KTsKLQlyZWFkX3VubG9jaygmaW40X2Rldi0+bWNfbGlzdF9sb2NrKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIAlpbl9kZXZfcHV0KGluNF9kZXYpOwogCiAJbmV0aWZfY2Fycmllcl9vZmYoY2FyZC0+ZGV2KTsKQEAgLTEzOTYsNiArMTM5OSw3IEBACiAJaW50IHJjLCBpbmRleDsKIAlpbnQgY3N0YXQsIGRzdGF0OwogCisJa3N0YXRfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSkuaXJxc1tJT0lOVF9MQ1NdKys7CiAJaWYgKGxjc19jaGVja19pcmJfZXJyb3IoY2RldiwgaXJiKSkKIAkJcmV0dXJuOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmMgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmMKaW5kZXggZTZiMmRmMC4uMjlmODQ4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbWFpbi5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21haW4uYwpAQCAtMjg0MCw2ICsyODQwLDcgQEAKIAkJcXVldWUtPmNhcmQtPnBlcmZfc3RhdHMub3V0Ym91bmRfZG9fcWRpb190aW1lICs9CiAJCQlxZXRoX2dldF9taWNyb3MoKSAtCiAJCQlxdWV1ZS0+Y2FyZC0+cGVyZl9zdGF0cy5vdXRib3VuZF9kb19xZGlvX3N0YXJ0X3RpbWU7CisJYXRvbWljX2FkZChjb3VudCwgJnF1ZXVlLT51c2VkX2J1ZmZlcnMpOwogCWlmIChyYykgewogCQlxdWV1ZS0+Y2FyZC0+c3RhdHMudHhfZXJyb3JzICs9IGNvdW50OwogCQkvKiBpZ25vcmUgdGVtcG9yYXJ5IFNJR0EgZXJyb3JzIHdpdGhvdXQgYnVzeSBjb25kaXRpb24gKi8KQEAgLTI4NTMsNyArMjg1NCw2IEBACiAJCXFldGhfc2NoZWR1bGVfcmVjb3ZlcnkocXVldWUtPmNhcmQpOwogCQlyZXR1cm47CiAJfQotCWF0b21pY19hZGQoY291bnQsICZxdWV1ZS0+dXNlZF9idWZmZXJzKTsKIAlpZiAocXVldWUtPmNhcmQtPm9wdGlvbnMucGVyZm9ybWFuY2Vfc3RhdHMpCiAJCXF1ZXVlLT5jYXJkLT5wZXJmX3N0YXRzLmJ1ZnNfc2VudCArPSBjb3VudDsKIH0KQEAgLTM4MzEsNiArMzgzMSw4IEBACiAJaW5pdF9kYXRhLmludF9wYXJtICAgICAgICAgICAgICAgPSAodW5zaWduZWQgbG9uZykgY2FyZDsKIAlpbml0X2RhdGEuaW5wdXRfc2JhbF9hZGRyX2FycmF5ICA9ICh2b2lkICoqKSBpbl9zYmFsX3B0cnM7CiAJaW5pdF9kYXRhLm91dHB1dF9zYmFsX2FkZHJfYXJyYXkgPSAodm9pZCAqKikgb3V0X3NiYWxfcHRyczsKKwlpbml0X2RhdGEuc2Nhbl90aHJlc2hvbGQgPQorCQkoY2FyZC0+aW5mby50eXBlID09IFFFVEhfQ0FSRF9UWVBFX0lRRCkgPyA4IDogMzI7CiAKIAlpZiAoYXRvbWljX2NtcHhjaGcoJmNhcmQtPnFkaW8uc3RhdGUsIFFFVEhfUURJT19BTExPQ0FURUQsCiAJCVFFVEhfUURJT19FU1RBQkxJU0hFRCkgPT0gUUVUSF9RRElPX0FMTE9DQVRFRCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbXBjLmggYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tcGMuaAppbmRleCBlMzdkZDhjLi4wN2Q1ODg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tcGMuaAorKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tcGMuaApAQCAtMzMzLDcgKzMzMyw3IEBACiAJX191MTYgcmVxdWVzdF9iaXRzOwogCV9fdTE2IHJlcGx5X2JpdHM7CiAJX191MzIgbm9fZW50cmllczsKLQljaGFyIGRhdGE7CisJY2hhciBkYXRhOyAvKiBvbmx5IGZvciByZXBsaWVzICovCiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiAvKiB1c2VkIGFzIHBhcmFtZXRlciBmb3IgYXJwX3F1ZXJ5IHJlcGx5ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9zeXMuYyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX3N5cy5jCmluZGV4IDQyZmE3ODMuLmI1ZTk2N2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX3N5cy5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX3N5cy5jCkBAIC0zNzIsNyArMzcyLDcgQEAKIAlpID0gc2ltcGxlX3N0cnRvdWwoYnVmLCAmdG1wLCAxNik7CiAJaWYgKChpID09IDApIHx8IChpID09IDEpKSB7CiAJCWlmIChpID09IGNhcmQtPm9wdGlvbnMucGVyZm9ybWFuY2Vfc3RhdHMpCi0JCQlnb3RvIG91dDs7CisJCQlnb3RvIG91dDsKIAkJY2FyZC0+b3B0aW9ucy5wZXJmb3JtYW5jZV9zdGF0cyA9IGk7CiAJCWlmIChpID09IDApCiAJCQltZW1zZXQoJmNhcmQtPnBlcmZfc3RhdHMsIDAsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wyX21haW4uYwppbmRleCA4NDdlODc5Li43YTdhMWI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmMKQEAgLTg0OSw4ICs4NDksNiBAQAogCWNhcmQtPnN0YXRlID0gQ0FSRF9TVEFURV9VUDsKIAluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwogCi0JaWYgKCFjYXJkLT5sYW5fb25saW5lICYmIG5ldGlmX2NhcnJpZXJfb2soZGV2KSkKLQkJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKIAlpZiAocWRpb19zdG9wX2lycShjYXJkLT5kYXRhLmNjd2RldiwgMCkgPj0gMCkgewogCQluYXBpX2VuYWJsZSgmY2FyZC0+bmFwaSk7CiAJCW5hcGlfc2NoZWR1bGUoJmNhcmQtPm5hcGkpOwpAQCAtMTAxMywxMyArMTAxMSwxNCBAQAogCQkJZGV2X3dhcm4oJmNhcmQtPmdkZXYtPmRldiwKIAkJCQkiVGhlIExBTiBpcyBvZmZsaW5lXG4iKTsKIAkJCWNhcmQtPmxhbl9vbmxpbmUgPSAwOwotCQkJZ290byBvdXQ7CisJCQlnb3RvIGNvbnRpbjsKIAkJfQogCQlyYyA9IC1FTk9ERVY7CiAJCWdvdG8gb3V0X3JlbW92ZTsKIAl9IGVsc2UKIAkJY2FyZC0+bGFuX29ubGluZSA9IDE7CiAKK2NvbnRpbjoKIAlpZiAoKGNhcmQtPmluZm8udHlwZSA9PSBRRVRIX0NBUkRfVFlQRV9PU0QpIHx8CiAJICAgIChjYXJkLT5pbmZvLnR5cGUgPT0gUUVUSF9DQVJEX1RZUEVfT1NYKSkKIAkJLyogY29uZmlndXJlIGlzb2xhdGlvbiBsZXZlbCAqLwpAQCAtMTAzOCw3ICsxMDM3LDEwIEBACiAJCWdvdG8gb3V0X3JlbW92ZTsKIAl9CiAJY2FyZC0+c3RhdGUgPSBDQVJEX1NUQVRFX1NPRlRTRVRVUDsKLQluZXRpZl9jYXJyaWVyX29uKGNhcmQtPmRldik7CisJaWYgKGNhcmQtPmxhbl9vbmxpbmUpCisJCW5ldGlmX2NhcnJpZXJfb24oY2FyZC0+ZGV2KTsKKwllbHNlCisJCW5ldGlmX2NhcnJpZXJfb2ZmKGNhcmQtPmRldik7CiAKIAlxZXRoX3NldF9hbGxvd2VkX3RocmVhZHMoY2FyZCwgMHhmZmZmZmZmZiwgMCk7CiAJaWYgKHJlY292ZXJfZmxhZyA9PSBDQVJEX1NUQVRFX1JFQ09WRVIpIHsKQEAgLTEwNTUsNyArMTA1Nyw2IEBACiAJfQogCS8qIGxldCB1c2VyX3NwYWNlIGtub3cgdGhhdCBkZXZpY2UgaXMgb25saW5lICovCiAJa29iamVjdF91ZXZlbnQoJmdkZXYtPmRldi5rb2JqLCBLT0JKX0NIQU5HRSk7Ci1vdXQ6CiAJbXV0ZXhfdW5sb2NrKCZjYXJkLT5jb25mX211dGV4KTsKIAltdXRleF91bmxvY2soJmNhcmQtPmRpc2NpcGxpbmVfbXV0ZXgpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wzX21haW4uYyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sM19tYWluLmMKaW5kZXggNzRkMTQwMS4uZTIyN2U0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wzX21haW4uYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDNfbWFpbi5jCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJxZXRoX2wzLmgiCiAKKwogc3RhdGljIGludCBxZXRoX2wzX3NldF9vZmZsaW5lKHN0cnVjdCBjY3dncm91cF9kZXZpY2UgKik7CiBzdGF0aWMgaW50IHFldGhfbDNfcmVjb3Zlcih2b2lkICopOwogc3RhdGljIGludCBxZXRoX2wzX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKik7CkBAIC00NTUsOCArNDU2LDExIEBACiAJUUVUSF9DQVJEX1RFWFQoY2FyZCwgMiwgInNkaXBsaXN0Iik7CiAJUUVUSF9DQVJEX0hFWChjYXJkLCAyLCAmY2FyZCwgc2l6ZW9mKHZvaWQgKikpOwogCi0JaWYgKGNhcmQtPm9wdGlvbnMuc25pZmZlcikKKwlpZiAoKGNhcmQtPnN0YXRlICE9IENBUkRfU1RBVEVfVVAgJiYKKwkgICAgIGNhcmQtPnN0YXRlICE9IENBUkRfU1RBVEVfU09GVFNFVFVQKSB8fCBjYXJkLT5vcHRpb25zLnNuaWZmZXIpIHsKIAkJcmV0dXJuOworCX0KKwogCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5pcF9sb2NrLCBmbGFncyk7CiAJdGJkX2xpc3QgPSBjYXJkLT5pcF90YmRfbGlzdDsKIAljYXJkLT5pcF90YmRfbGlzdCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBsaXN0X2hlYWQpLCBHRlBfQVRPTUlDKTsKQEAgLTE3OTYsNyArMTgwMCw4IEBACiAJY2hhciBidWZbTUFYX0FERFJfTEVOXTsKIAogCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDQsICJhZGRtYyIpOwotCWZvciAoaW00ID0gaW40X2Rldi0+bWNfbGlzdDsgaW00OyBpbTQgPSBpbTQtPm5leHQpIHsKKwlmb3IgKGltNCA9IHJjdV9kZXJlZmVyZW5jZShpbjRfZGV2LT5tY19saXN0KTsgaW00ICE9IE5VTEw7CisJICAgICBpbTQgPSByY3VfZGVyZWZlcmVuY2UoaW00LT5uZXh0X3JjdSkpIHsKIAkJcWV0aF9sM19nZXRfbWFjX2Zvcl9pcG0oaW00LT5tdWx0aWFkZHIsIGJ1ZiwgaW40X2Rldi0+ZGV2KTsKIAkJaXBtID0gcWV0aF9sM19nZXRfYWRkcl9idWZmZXIoUUVUSF9QUk9UX0lQVjQpOwogCQlpZiAoIWlwbSkKQEAgLTE4MjgsOSArMTgzMyw5IEBACiAJCWluX2RldiA9IGluX2Rldl9nZXQobmV0ZGV2KTsKIAkJaWYgKCFpbl9kZXYpCiAJCQljb250aW51ZTsKLQkJcmVhZF9sb2NrKCZpbl9kZXYtPm1jX2xpc3RfbG9jayk7CisJCXJjdV9yZWFkX2xvY2soKTsKIAkJcWV0aF9sM19hZGRfbWMoY2FyZCwgaW5fZGV2KTsKLQkJcmVhZF91bmxvY2soJmluX2Rldi0+bWNfbGlzdF9sb2NrKTsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCWluX2Rldl9wdXQoaW5fZGV2KTsKIAl9CiB9CkBAIC0xODQzLDEwICsxODQ4LDEwIEBACiAJaW40X2RldiA9IGluX2Rldl9nZXQoY2FyZC0+ZGV2KTsKIAlpZiAoaW40X2RldiA9PSBOVUxMKQogCQlyZXR1cm47Ci0JcmVhZF9sb2NrKCZpbjRfZGV2LT5tY19saXN0X2xvY2spOworCXJjdV9yZWFkX2xvY2soKTsKIAlxZXRoX2wzX2FkZF9tYyhjYXJkLCBpbjRfZGV2KTsKIAlxZXRoX2wzX2FkZF92bGFuX21jKGNhcmQpOwotCXJlYWRfdW5sb2NrKCZpbjRfZGV2LT5tY19saXN0X2xvY2spOworCXJjdV9yZWFkX3VubG9jaygpOwogCWluX2Rldl9wdXQoaW40X2Rldik7CiB9CiAKQEAgLTI0NTQsMjIgKzI0NTksNDYgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyB2b2lkIHFldGhfbDNfY29weV9hcnBfZW50cmllc19zdHJpcHBlZChzdHJ1Y3QgcWV0aF9hcnBfcXVlcnlfaW5mbyAqcWluZm8sCi0JCXN0cnVjdCBxZXRoX2FycF9xdWVyeV9kYXRhICpxZGF0YSwgaW50IGVudHJ5X3NpemUsCi0JCWludCB1ZW50cnlfc2l6ZSkKK3N0YXRpYyBfX3UzMiBnZXRfYXJwX2VudHJ5X3NpemUoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwKKwkJCXN0cnVjdCBxZXRoX2FycF9xdWVyeV9kYXRhICpxZGF0YSwKKwkJCXN0cnVjdCBxZXRoX2FycF9lbnRyeXR5cGUgKnR5cGUsIF9fdTggc3RyaXBfZW50cmllcykKIHsKLQljaGFyICplbnRyeV9wdHI7Ci0JY2hhciAqdWVudHJ5X3B0cjsKLQlpbnQgaTsKKwlfX3UzMiByYzsKKwlfX3U4IGlzX2hzaTsKIAotCWVudHJ5X3B0ciA9IChjaGFyICopJnFkYXRhLT5kYXRhOwotCXVlbnRyeV9wdHIgPSAoY2hhciAqKShxaW5mby0+dWRhdGEgKyBxaW5mby0+dWRhdGFfb2Zmc2V0KTsKLQlmb3IgKGkgPSAwOyBpIDwgcWRhdGEtPm5vX2VudHJpZXM7ICsraSkgewotCQkvKiBzdHJpcCBvZmYgMzIgYnl0ZXMgIm1lZGlhIHNwZWNpZmljIGluZm9ybWF0aW9uIiAqLwotCQltZW1jcHkodWVudHJ5X3B0ciwgKGVudHJ5X3B0ciArIDMyKSwgZW50cnlfc2l6ZSAtIDMyKTsKLQkJZW50cnlfcHRyICs9IGVudHJ5X3NpemU7Ci0JCXVlbnRyeV9wdHIgKz0gdWVudHJ5X3NpemU7CisJaXNfaHNpID0gcWRhdGEtPnJlcGx5X2JpdHMgPT0gNTsKKwlpZiAodHlwZS0+aXAgPT0gUUVUSEFSUF9JUF9BRERSX1Y0KSB7CisJCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDQsICJhcnBldjQiKTsKKwkJaWYgKHN0cmlwX2VudHJpZXMpIHsKKwkJCXJjID0gaXNfaHNpID8gc2l6ZW9mKHN0cnVjdCBxZXRoX2FycF9xaV9lbnRyeTVfc2hvcnQpIDoKKwkJCQlzaXplb2Yoc3RydWN0IHFldGhfYXJwX3FpX2VudHJ5N19zaG9ydCk7CisJCX0gZWxzZSB7CisJCQlyYyA9IGlzX2hzaSA/IHNpemVvZihzdHJ1Y3QgcWV0aF9hcnBfcWlfZW50cnk1KSA6CisJCQkJc2l6ZW9mKHN0cnVjdCBxZXRoX2FycF9xaV9lbnRyeTcpOworCQl9CisJfSBlbHNlIGlmICh0eXBlLT5pcCA9PSBRRVRIQVJQX0lQX0FERFJfVjYpIHsKKwkJUUVUSF9DQVJEX1RFWFQoY2FyZCwgNCwgImFycGV2NiIpOworCQlpZiAoc3RyaXBfZW50cmllcykgeworCQkJcmMgPSBpc19oc2kgPworCQkJCXNpemVvZihzdHJ1Y3QgcWV0aF9hcnBfcWlfZW50cnk1X3Nob3J0X2lwdjYpIDoKKwkJCQlzaXplb2Yoc3RydWN0IHFldGhfYXJwX3FpX2VudHJ5N19zaG9ydF9pcHY2KTsKKwkJfSBlbHNlIHsKKwkJCXJjID0gaXNfaHNpID8KKwkJCQlzaXplb2Yoc3RydWN0IHFldGhfYXJwX3FpX2VudHJ5NV9pcHY2KSA6CisJCQkJc2l6ZW9mKHN0cnVjdCBxZXRoX2FycF9xaV9lbnRyeTdfaXB2Nik7CisJCX0KKwl9IGVsc2UgeworCQlRRVRIX0NBUkRfVEVYVChjYXJkLCA0LCAiYXJwaW52Iik7CisJCXJjID0gMDsKIAl9CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgYXJwZW50cnlfbWF0Y2hlc19wcm90KHN0cnVjdCBxZXRoX2FycF9lbnRyeXR5cGUgKnR5cGUsIF9fdTE2IHByb3QpCit7CisJcmV0dXJuICh0eXBlLT5pcCA9PSBRRVRIQVJQX0lQX0FERFJfVjQgJiYgcHJvdCA9PSBRRVRIX1BST1RfSVBWNCkgfHwKKwkJKHR5cGUtPmlwID09IFFFVEhBUlBfSVBfQUREUl9WNiAmJiBwcm90ID09IFFFVEhfUFJPVF9JUFY2KTsKIH0KIAogc3RhdGljIGludCBxZXRoX2wzX2FycF9xdWVyeV9jYihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLApAQCAtMjQ3OCw3MiArMjUwNyw3NyBAQAogCXN0cnVjdCBxZXRoX2lwYV9jbWQgKmNtZDsKIAlzdHJ1Y3QgcWV0aF9hcnBfcXVlcnlfZGF0YSAqcWRhdGE7CiAJc3RydWN0IHFldGhfYXJwX3F1ZXJ5X2luZm8gKnFpbmZvOwotCWludCBlbnRyeV9zaXplOwotCWludCB1ZW50cnlfc2l6ZTsKIAlpbnQgaTsKKwlpbnQgZTsKKwlpbnQgZW50cnlieXRlc19kb25lOworCWludCBzdHJpcHBlZF9ieXRlczsKKwlfX3U4IGRvX3N0cmlwX2VudHJpZXM7CiAKLQlRRVRIX0NBUkRfVEVYVChjYXJkLCA0LCAiYXJwcXVlY2IiKTsKKwlRRVRIX0NBUkRfVEVYVChjYXJkLCAzLCAiYXJwcXVlY2IiKTsKIAogCXFpbmZvID0gKHN0cnVjdCBxZXRoX2FycF9xdWVyeV9pbmZvICopIHJlcGx5LT5wYXJhbTsKIAljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKSBkYXRhOworCVFFVEhfQ0FSRF9URVhUXyhjYXJkLCA0LCAiJWkiLCBjbWQtPmhkci5wcm90X3ZlcnNpb24pOwogCWlmIChjbWQtPmhkci5yZXR1cm5fY29kZSkgewotCQlRRVRIX0NBUkRfVEVYVF8oY2FyZCwgNCwgInFhZXIxJWkiLCBjbWQtPmhkci5yZXR1cm5fY29kZSk7CisJCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDQsICJhcnBjYmVyciIpOworCQlRRVRIX0NBUkRfVEVYVF8oY2FyZCwgNCwgIiVpIiwgY21kLT5oZHIucmV0dXJuX2NvZGUpOwogCQlyZXR1cm4gMDsKIAl9CiAJaWYgKGNtZC0+ZGF0YS5zZXRhc3NwYXJtcy5oZHIucmV0dXJuX2NvZGUpIHsKIAkJY21kLT5oZHIucmV0dXJuX2NvZGUgPSBjbWQtPmRhdGEuc2V0YXNzcGFybXMuaGRyLnJldHVybl9jb2RlOwotCQlRRVRIX0NBUkRfVEVYVF8oY2FyZCwgNCwgInFhZXIyJWkiLCBjbWQtPmhkci5yZXR1cm5fY29kZSk7CisJCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDQsICJzZXRhcGVyciIpOworCQlRRVRIX0NBUkRfVEVYVF8oY2FyZCwgNCwgIiVpIiwgY21kLT5oZHIucmV0dXJuX2NvZGUpOwogCQlyZXR1cm4gMDsKIAl9CiAJcWRhdGEgPSAmY21kLT5kYXRhLnNldGFzc3Bhcm1zLmRhdGEucXVlcnlfYXJwOwotCXN3aXRjaCAocWRhdGEtPnJlcGx5X2JpdHMpIHsKLQljYXNlIDU6Ci0JCXVlbnRyeV9zaXplID0gZW50cnlfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcWV0aF9hcnBfcWlfZW50cnk1KTsKLQkJaWYgKHFpbmZvLT5tYXNrX2JpdHMgJiBRRVRIX1FBUlBfU1RSSVBfRU5UUklFUykKLQkJCXVlbnRyeV9zaXplID0gc2l6ZW9mKHN0cnVjdCBxZXRoX2FycF9xaV9lbnRyeTVfc2hvcnQpOwotCQlicmVhazsKLQljYXNlIDc6Ci0JCS8qIGZhbGwgdGhyb3VnaCB0byBkZWZhdWx0ICovCi0JZGVmYXVsdDoKLQkJLyogdHIgaXMgdGhlIHNhbWUgYXMgZXRoIC0+IGVudHJ5NyAqLwotCQl1ZW50cnlfc2l6ZSA9IGVudHJ5X3NpemUgPSBzaXplb2Yoc3RydWN0IHFldGhfYXJwX3FpX2VudHJ5Nyk7Ci0JCWlmIChxaW5mby0+bWFza19iaXRzICYgUUVUSF9RQVJQX1NUUklQX0VOVFJJRVMpCi0JCQl1ZW50cnlfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcWV0aF9hcnBfcWlfZW50cnk3X3Nob3J0KTsKLQkJYnJlYWs7Ci0JfQotCS8qIGNoZWNrIGlmIHRoZXJlIGlzIGVub3VnaCByb29tIGluIHVzZXJzcGFjZSAqLwotCWlmICgocWluZm8tPnVkYXRhX2xlbiAtIHFpbmZvLT51ZGF0YV9vZmZzZXQpIDwKLQkJCXFkYXRhLT5ub19lbnRyaWVzICogdWVudHJ5X3NpemUpewotCQlRRVRIX0NBUkRfVEVYVF8oY2FyZCwgNCwgInFhZXIzJWkiLCAtRU5PTUVNKTsKLQkJY21kLT5oZHIucmV0dXJuX2NvZGUgPSAtRU5PTUVNOwotCQlnb3RvIG91dF9lcnJvcjsKLQl9Ci0JUUVUSF9DQVJEX1RFWFRfKGNhcmQsIDQsICJhbm9yZSVpIiwKLQkJICAgICAgIGNtZC0+ZGF0YS5zZXRhc3NwYXJtcy5oZHIubnVtYmVyX29mX3JlcGxpZXMpOwotCVFFVEhfQ0FSRF9URVhUXyhjYXJkLCA0LCAiYXNlcW4laSIsIGNtZC0+ZGF0YS5zZXRhc3NwYXJtcy5oZHIuc2VxX25vKTsKIAlRRVRIX0NBUkRfVEVYVF8oY2FyZCwgNCwgImFub2VuJWkiLCBxZGF0YS0+bm9fZW50cmllcyk7CiAKLQlpZiAocWluZm8tPm1hc2tfYml0cyAmIFFFVEhfUUFSUF9TVFJJUF9FTlRSSUVTKSB7Ci0JCS8qIHN0cmlwIG9mZiAibWVkaWEgc3BlY2lmaWMgaW5mb3JtYXRpb24iICovCi0JCXFldGhfbDNfY29weV9hcnBfZW50cmllc19zdHJpcHBlZChxaW5mbywgcWRhdGEsIGVudHJ5X3NpemUsCi0JCQkJCSAgICAgICB1ZW50cnlfc2l6ZSk7Ci0JfSBlbHNlCi0JCS8qY29weSBlbnRyaWVzIHRvIHVzZXIgYnVmZmVyKi8KLQkJbWVtY3B5KHFpbmZvLT51ZGF0YSArIHFpbmZvLT51ZGF0YV9vZmZzZXQsCi0JCSAgICAgICAoY2hhciAqKSZxZGF0YS0+ZGF0YSwgcWRhdGEtPm5vX2VudHJpZXMqdWVudHJ5X3NpemUpOworCWRvX3N0cmlwX2VudHJpZXMgPSAocWluZm8tPm1hc2tfYml0cyAmIFFFVEhfUUFSUF9TVFJJUF9FTlRSSUVTKSA+IDA7CisJc3RyaXBwZWRfYnl0ZXMgPSBkb19zdHJpcF9lbnRyaWVzID8gUUVUSF9RQVJQX01FRElBU1BFQ0lGSUNfQllURVMgOiAwOworCWVudHJ5Ynl0ZXNfZG9uZSA9IDA7CisJZm9yIChlID0gMDsgZSA8IHFkYXRhLT5ub19lbnRyaWVzOyArK2UpIHsKKwkJY2hhciAqY3VyX2VudHJ5OworCQlfX3UzMiBlc2l6ZTsKKwkJc3RydWN0IHFldGhfYXJwX2VudHJ5dHlwZSAqZXR5cGU7CiAKLQlxaW5mby0+bm9fZW50cmllcyArPSBxZGF0YS0+bm9fZW50cmllczsKLQlxaW5mby0+dWRhdGFfb2Zmc2V0ICs9IChxZGF0YS0+bm9fZW50cmllcyp1ZW50cnlfc2l6ZSk7CisJCWN1cl9lbnRyeSA9ICZxZGF0YS0+ZGF0YSArIGVudHJ5Ynl0ZXNfZG9uZTsKKwkJZXR5cGUgPSAmKChzdHJ1Y3QgcWV0aF9hcnBfcWlfZW50cnk1ICopIGN1cl9lbnRyeSktPnR5cGU7CisJCWlmICghYXJwZW50cnlfbWF0Y2hlc19wcm90KGV0eXBlLCBjbWQtPmhkci5wcm90X3ZlcnNpb24pKSB7CisJCQlRRVRIX0NBUkRfVEVYVChjYXJkLCA0LCAicG1pcyIpOworCQkJUUVUSF9DQVJEX1RFWFRfKGNhcmQsIDQsICIlaSIsIGV0eXBlLT5pcCk7CisJCQlicmVhazsKKwkJfQorCQllc2l6ZSA9IGdldF9hcnBfZW50cnlfc2l6ZShjYXJkLCBxZGF0YSwgZXR5cGUsCisJCQlkb19zdHJpcF9lbnRyaWVzKTsKKwkJUUVUSF9DQVJEX1RFWFRfKGNhcmQsIDUsICJlc3olaSIsIGVzaXplKTsKKwkJaWYgKCFlc2l6ZSkKKwkJCWJyZWFrOworCisJCWlmICgocWluZm8tPnVkYXRhX2xlbiAtIHFpbmZvLT51ZGF0YV9vZmZzZXQpIDwgZXNpemUpIHsKKwkJCVFFVEhfQ0FSRF9URVhUXyhjYXJkLCA0LCAicWFlcjMlaSIsIC1FTk9NRU0pOworCQkJY21kLT5oZHIucmV0dXJuX2NvZGUgPSAtRU5PTUVNOworCQkJZ290byBvdXRfZXJyb3I7CisJCX0KKworCQltZW1jcHkocWluZm8tPnVkYXRhICsgcWluZm8tPnVkYXRhX29mZnNldCwKKwkJCSZxZGF0YS0+ZGF0YSArIGVudHJ5Ynl0ZXNfZG9uZSArIHN0cmlwcGVkX2J5dGVzLAorCQkJZXNpemUpOworCQllbnRyeWJ5dGVzX2RvbmUgKz0gZXNpemUgKyBzdHJpcHBlZF9ieXRlczsKKwkJcWluZm8tPnVkYXRhX29mZnNldCArPSBlc2l6ZTsKKwkJKytxaW5mby0+bm9fZW50cmllczsKKwl9CiAJLyogY2hlY2sgaWYgYWxsIHJlcGxpZXMgcmVjZWl2ZWQgLi4uICovCiAJaWYgKGNtZC0+ZGF0YS5zZXRhc3NwYXJtcy5oZHIuc2VxX25vIDwKIAkgICAgY21kLT5kYXRhLnNldGFzc3Bhcm1zLmhkci5udW1iZXJfb2ZfcmVwbGllcykKIAkJcmV0dXJuIDE7CisJUUVUSF9DQVJEX1RFWFRfKGNhcmQsIDQsICJub3ZlJWkiLCBxaW5mby0+bm9fZW50cmllcyk7CiAJbWVtY3B5KHFpbmZvLT51ZGF0YSwgJnFpbmZvLT5ub19lbnRyaWVzLCA0KTsKIAkvKiBrZWVwIFNUUklQX0VOVFJJRVMgZmxhZyBzbyB0aGUgdXNlciBwcm9ncmFtIGNhbiBkaXN0aW5ndWlzaAogCSAqIHN0cmlwcGVkIGVudHJpZXMgZnJvbSBub3JtYWwgb25lcyAqLwogCWlmIChxaW5mby0+bWFza19iaXRzICYgUUVUSF9RQVJQX1NUUklQX0VOVFJJRVMpCiAJCXFkYXRhLT5yZXBseV9iaXRzIHw9IFFFVEhfUUFSUF9TVFJJUF9FTlRSSUVTOwogCW1lbWNweShxaW5mby0+dWRhdGEgKyBRRVRIX1FBUlBfTUFTS19PRkZTRVQsICZxZGF0YS0+cmVwbHlfYml0cywgMik7CisJUUVUSF9DQVJEX1RFWFRfKGNhcmQsIDQsICJyYyVpIiwgMCk7CiAJcmV0dXJuIDA7CiBvdXRfZXJyb3I6CiAJaSA9IDA7CkBAIC0yNTY2LDQ1ICsyNjAwLDg2IEBACiAJCQkJICAgICAgcmVwbHlfY2IsIHJlcGx5X3BhcmFtKTsKIH0KIAotc3RhdGljIGludCBxZXRoX2wzX2FycF9xdWVyeShzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBjaGFyIF9fdXNlciAqdWRhdGEpCitzdGF0aWMgaW50IHFldGhfbDNfcXVlcnlfYXJwX2NhY2hlX2luZm8oc3RydWN0IHFldGhfY2FyZCAqY2FyZCwKKwllbnVtIHFldGhfcHJvdF92ZXJzaW9ucyBwcm90LAorCXN0cnVjdCBxZXRoX2FycF9xdWVyeV9pbmZvICpxaW5mbykKIHsKIAlzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICppb2I7Ci0Jc3RydWN0IHFldGhfYXJwX3F1ZXJ5X2luZm8gcWluZm8gPSB7MCwgfTsKKwlzdHJ1Y3QgcWV0aF9pcGFfY21kICpjbWQ7CiAJaW50IHRtcDsKIAlpbnQgcmM7CiAKKwlRRVRIX0NBUkRfVEVYVF8oY2FyZCwgMywgInFhcnBpcHYlaSIsIHByb3QpOworCisJaW9iID0gcWV0aF9sM19nZXRfc2V0YXNzcGFybXNfY21kKGNhcmQsIElQQV9BUlBfUFJPQ0VTU0lORywKKwkJCUlQQV9DTURfQVNTX0FSUF9RVUVSWV9JTkZPLAorCQkJc2l6ZW9mKHN0cnVjdCBxZXRoX2FycF9xdWVyeV9kYXRhKSAtIHNpemVvZihjaGFyKSwKKwkJCXByb3QpOworCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopKGlvYi0+ZGF0YStJUEFfUERVX0hFQURFUl9TSVpFKTsKKwljbWQtPmRhdGEuc2V0YXNzcGFybXMuZGF0YS5xdWVyeV9hcnAucmVxdWVzdF9iaXRzID0gMHgwMDBGOworCWNtZC0+ZGF0YS5zZXRhc3NwYXJtcy5kYXRhLnF1ZXJ5X2FycC5yZXBseV9iaXRzID0gMDsKKwljbWQtPmRhdGEuc2V0YXNzcGFybXMuZGF0YS5xdWVyeV9hcnAubm9fZW50cmllcyA9IDA7CisJcmMgPSBxZXRoX2wzX3NlbmRfaXBhX2FycF9jbWQoY2FyZCwgaW9iLAorCQkJICAgUUVUSF9TRVRBU1NfQkFTRV9MRU4rUUVUSF9BUlBfQ01EX0xFTiwKKwkJCSAgIHFldGhfbDNfYXJwX3F1ZXJ5X2NiLCAodm9pZCAqKXFpbmZvKTsKKwlpZiAocmMpIHsKKwkJdG1wID0gcmM7CisJCVFFVEhfREJGX01FU1NBR0UoMiwKKwkJCSJFcnJvciB3aGlsZSBxdWVyeWluZyBBUlAgY2FjaGUgb24gJXM6ICVzICIKKwkJCSIoMHgleC8lZClcbiIsIFFFVEhfQ0FSRF9JRk5BTUUoY2FyZCksCisJCQlxZXRoX2wzX2FycF9nZXRfZXJyb3JfY2F1c2UoJnJjKSwgdG1wLCB0bXApOworCX0KKworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBxZXRoX2wzX2FycF9xdWVyeShzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBjaGFyIF9fdXNlciAqdWRhdGEpCit7CisJc3RydWN0IHFldGhfYXJwX3F1ZXJ5X2luZm8gcWluZm8gPSB7MCwgfTsKKwlpbnQgcmM7CisKIAlRRVRIX0NBUkRfVEVYVChjYXJkLCAzLCAiYXJwcXVlcnkiKTsKIAogCWlmICghcWV0aF9pc19zdXBwb3J0ZWQoY2FyZCwvKklQQV9RVUVSWV9BUlBfQUREUl9JTkZPKi8KIAkJCSAgICAgICBJUEFfQVJQX1BST0NFU1NJTkcpKSB7Ci0JCXJldHVybiAtRU9QTk9UU1VQUDsKKwkJUUVUSF9DQVJEX1RFWFQoY2FyZCwgMywgImFycHFuc3VwIik7CisJCXJjID0gLUVPUE5PVFNVUFA7CisJCWdvdG8gb3V0OwogCX0KIAkvKiBnZXQgc2l6ZSBvZiB1c2Vyc3BhY2UgYnVmZmVyIGFuZCBtYXNrX2JpdHMgLT4gNiBieXRlcyAqLwotCWlmIChjb3B5X2Zyb21fdXNlcigmcWluZm8sIHVkYXRhLCA2KSkKLQkJcmV0dXJuIC1FRkFVTFQ7CisJaWYgKGNvcHlfZnJvbV91c2VyKCZxaW5mbywgdWRhdGEsIDYpKSB7CisJCXJjID0gLUVGQVVMVDsKKwkJZ290byBvdXQ7CisJfQogCXFpbmZvLnVkYXRhID0ga3phbGxvYyhxaW5mby51ZGF0YV9sZW4sIEdGUF9LRVJORUwpOwotCWlmICghcWluZm8udWRhdGEpCi0JCXJldHVybiAtRU5PTUVNOworCWlmICghcWluZm8udWRhdGEpIHsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CiAJcWluZm8udWRhdGFfb2Zmc2V0ID0gUUVUSF9RQVJQX0VOVFJJRVNfT0ZGU0VUOwotCWlvYiA9IHFldGhfbDNfZ2V0X3NldGFzc3Bhcm1zX2NtZChjYXJkLCBJUEFfQVJQX1BST0NFU1NJTkcsCi0JCQkJICAgICAgIElQQV9DTURfQVNTX0FSUF9RVUVSWV9JTkZPLAotCQkJCSAgICAgICBzaXplb2YoaW50KSwgUUVUSF9QUk9UX0lQVjQpOwotCi0JcmMgPSBxZXRoX2wzX3NlbmRfaXBhX2FycF9jbWQoY2FyZCwgaW9iLAotCQkJCSAgIFFFVEhfU0VUQVNTX0JBU0VfTEVOK1FFVEhfQVJQX0NNRF9MRU4sCi0JCQkJICAgcWV0aF9sM19hcnBfcXVlcnlfY2IsICh2b2lkICopJnFpbmZvKTsKKwlyYyA9IHFldGhfbDNfcXVlcnlfYXJwX2NhY2hlX2luZm8oY2FyZCwgUUVUSF9QUk9UX0lQVjQsICZxaW5mbyk7CiAJaWYgKHJjKSB7Ci0JCXRtcCA9IHJjOwotCQlRRVRIX0RCRl9NRVNTQUdFKDIsICJFcnJvciB3aGlsZSBxdWVyeWluZyBBUlAgY2FjaGUgb24gJXM6ICVzICIKLQkJCSIoMHgleC8lZClcbiIsIFFFVEhfQ0FSRF9JRk5BTUUoY2FyZCksCi0JCQlxZXRoX2wzX2FycF9nZXRfZXJyb3JfY2F1c2UoJnJjKSwgdG1wLCB0bXApOwogCQlpZiAoY29weV90b191c2VyKHVkYXRhLCBxaW5mby51ZGF0YSwgNCkpCiAJCQlyYyA9IC1FRkFVTFQ7CisJCQlnb3RvIGZyZWVfYW5kX291dDsKIAl9IGVsc2UgewotCQlpZiAoY29weV90b191c2VyKHVkYXRhLCBxaW5mby51ZGF0YSwgcWluZm8udWRhdGFfbGVuKSkKKyNpZmRlZiBDT05GSUdfUUVUSF9JUFY2CisJCWlmIChxaW5mby5tYXNrX2JpdHMgJiBRRVRIX1FBUlBfV0lUSF9JUFY2KSB7CisJCQkvKiBmYWlscyBpbiBjYXNlIG9mIEd1ZXN0TEFOIFFESU8gbW9kZSAqLworCQkJcWV0aF9sM19xdWVyeV9hcnBfY2FjaGVfaW5mbyhjYXJkLCBRRVRIX1BST1RfSVBWNiwKKwkJCQkmcWluZm8pOworCQl9CisjZW5kaWYKKwkJaWYgKGNvcHlfdG9fdXNlcih1ZGF0YSwgcWluZm8udWRhdGEsIHFpbmZvLnVkYXRhX2xlbikpIHsKKwkJCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDQsICJxYWN0ZiIpOwogCQkJcmMgPSAtRUZBVUxUOworCQkJZ290byBmcmVlX2FuZF9vdXQ7CisJCX0KKwkJUUVUSF9DQVJEX1RFWFRfKGNhcmQsIDQsICJxYWN0cyIpOwogCX0KK2ZyZWVfYW5kX291dDoKIAlrZnJlZShxaW5mby51ZGF0YSk7CitvdXQ6CiAJcmV0dXJuIHJjOwogfQogCkBAIC0yOTM4LDYgKzMwMTMsNyBAQAogCiAJLypmaXggaGVhZGVyIHRvIFRTTyB2YWx1ZXMgLi4uKi8KIAloZHItPmhkci5oZHIubDMuaWQgPSBRRVRIX0hFQURFUl9UWVBFX1RTTzsKKwloZHItPmhkci5oZHIubDMubGVuZ3RoID0gc2tiLT5sZW4gLSBzaXplb2Yoc3RydWN0IHFldGhfaGRyX3Rzbyk7CiAJLypzZXQgdmFsdWVzIHdoaWNoIGFyZSBmaXggZm9yIHRoZSBmaXJzdCBhcHByb2FjaCAuLi4qLwogCWhkci0+ZXh0Lmhkcl90b3RfbGVuID0gKF9fdTE2KSBzaXplb2Yoc3RydWN0IHFldGhfaGRyX2V4dF90c28pOwogCWhkci0+ZXh0LmltYl9oZHJfbm8gID0gMTsKQEAgLTMwMzksNyArMzExNSw3IEBACiAJCQkJc2tiX3B1bGwobmV3X3NrYiwgRVRIX0hMRU4pOwogCQl9CiAKLQkJaWYgKGlwdiA9PSA2ICYmIGNhcmQtPnZsYW5ncnAgJiYKKwkJaWYgKGlwdiAhPSA0ICYmIGNhcmQtPnZsYW5ncnAgJiYKIAkJCQl2bGFuX3R4X3RhZ19wcmVzZW50KG5ld19za2IpKSB7CiAJCQlza2JfcHVzaChuZXdfc2tiLCBWTEFOX0hMRU4pOwogCQkJc2tiX2NvcHlfdG9fbGluZWFyX2RhdGEobmV3X3NrYiwgbmV3X3NrYi0+ZGF0YSArIDQsIDQpOwpAQCAtMzE3Niw4ICszMjUyLDYgQEAKIAljYXJkLT5zdGF0ZSA9IENBUkRfU1RBVEVfVVA7CiAJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKIAotCWlmICghY2FyZC0+bGFuX29ubGluZSAmJiBuZXRpZl9jYXJyaWVyX29rKGRldikpCi0JCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CiAJaWYgKHFkaW9fc3RvcF9pcnEoY2FyZC0+ZGF0YS5jY3dkZXYsIDApID49IDApIHsKIAkJbmFwaV9lbmFibGUoJmNhcmQtPm5hcGkpOwogCQluYXBpX3NjaGVkdWxlKCZjYXJkLT5uYXBpKTsKQEAgLTM0NDksMTMgKzM1MjMsMTQgQEAKIAkJCWRldl93YXJuKCZjYXJkLT5nZGV2LT5kZXYsCiAJCQkJIlRoZSBMQU4gaXMgb2ZmbGluZVxuIik7CiAJCQljYXJkLT5sYW5fb25saW5lID0gMDsKLQkJCWdvdG8gb3V0OworCQkJZ290byBjb250aW47CiAJCX0KIAkJcmMgPSAtRU5PREVWOwogCQlnb3RvIG91dF9yZW1vdmU7CiAJfSBlbHNlCiAJCWNhcmQtPmxhbl9vbmxpbmUgPSAxOwogCitjb250aW46CiAJcmMgPSBxZXRoX2wzX3NldGFkYXB0ZXJfcGFybXMoY2FyZCk7CiAJaWYgKHJjKQogCQlRRVRIX0RCRl9URVhUXyhTRVRVUCwgMiwgIjJlcnIlZCIsIHJjKTsKQEAgLTM0ODAsMTAgKzM1NTUsMTMgQEAKIAkJZ290byBvdXRfcmVtb3ZlOwogCX0KIAljYXJkLT5zdGF0ZSA9IENBUkRfU1RBVEVfU09GVFNFVFVQOwotCW5ldGlmX2NhcnJpZXJfb24oY2FyZC0+ZGV2KTsKIAogCXFldGhfc2V0X2FsbG93ZWRfdGhyZWFkcyhjYXJkLCAweGZmZmZmZmZmLCAwKTsKIAlxZXRoX2wzX3NldF9pcF9hZGRyX2xpc3QoY2FyZCk7CisJaWYgKGNhcmQtPmxhbl9vbmxpbmUpCisJCW5ldGlmX2NhcnJpZXJfb24oY2FyZC0+ZGV2KTsKKwllbHNlCisJCW5ldGlmX2NhcnJpZXJfb2ZmKGNhcmQtPmRldik7CiAJaWYgKHJlY292ZXJfZmxhZyA9PSBDQVJEX1NUQVRFX1JFQ09WRVIpIHsKIAkJaWYgKHJlY292ZXJ5X21vZGUpCiAJCQlxZXRoX2wzX29wZW4oY2FyZC0+ZGV2KTsKQEAgLTM0OTYsNyArMzU3NCw2IEBACiAJfQogCS8qIGxldCB1c2VyX3NwYWNlIGtub3cgdGhhdCBkZXZpY2UgaXMgb25saW5lICovCiAJa29iamVjdF91ZXZlbnQoJmdkZXYtPmRldi5rb2JqLCBLT0JKX0NIQU5HRSk7Ci1vdXQ6CiAJbXV0ZXhfdW5sb2NrKCZjYXJkLT5jb25mX211dGV4KTsKIAltdXRleF91bmxvY2soJmNhcmQtPmRpc2NpcGxpbmVfbXV0ZXgpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9hdXguYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfYXV4LmMKaW5kZXggMDQ0ZmIyMi4uNTFjNjY2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9hdXguYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2F1eC5jCkBAIC00NSw4ICs0NSw4IEBACiBtb2R1bGVfcGFyYW1fbmFtZWQoZGV2aWNlLCBpbml0X2RldmljZSwgY2hhcnAsIDA0MDApOwogTU9EVUxFX1BBUk1fREVTQyhkZXZpY2UsICJzcGVjaWZ5IGluaXRpYWwgZGV2aWNlIik7CiAKLXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqemZjcF9jYWNoZV9od19hbGlnbihjb25zdCBjaGFyICpuYW1lLAotCQkJCQkgICAgICB1bnNpZ25lZCBsb25nIHNpemUpCitzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKiBfX2luaXQgemZjcF9jYWNoZV9od19hbGlnbihjb25zdCBjaGFyICpuYW1lLAorCQkJCQkJICAgICAgdW5zaWduZWQgbG9uZyBzaXplKQogewogCXJldHVybiBrbWVtX2NhY2hlX2NyZWF0ZShuYW1lLCBzaXplLCByb3VuZHVwX3Bvd19vZl90d28oc2l6ZSksIDAsIE5VTEwpOwogfQpAQCAtMzExLDggKzMxMSw3IEBACiAJCWlmICh6ZmNwX2ZzZl9zdGF0dXNfcmVhZChhZGFwdGVyLT5xZGlvKSkgewogCQkJaWYgKGF0b21pY19yZWFkKCZhZGFwdGVyLT5zdGF0X21pc3MpID49CiAJCQkgICAgYWRhcHRlci0+c3RhdF9yZWFkX2J1Zl9udW0pIHsKLQkJCQl6ZmNwX2VycF9hZGFwdGVyX3Jlb3BlbihhZGFwdGVyLCAwLCAiYXhzcmVmMSIsCi0JCQkJCQkJTlVMTCk7CisJCQkJemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4oYWRhcHRlciwgMCwgImF4c3JlZjEiKTsKIAkJCQlyZXR1cm4gMTsKIAkJCX0KIAkJCWJyZWFrOwpAQCAtNDU5LDcgKzQ1OCw3IEBACiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZjZGV2LT5kZXYua29iaiwgJnpmY3Bfc3lzZnNfYWRhcHRlcl9hdHRycyk7CiAKIAl6ZmNwX2VycF90aHJlYWRfa2lsbChhZGFwdGVyKTsKLQl6ZmNwX2RiZl9hZGFwdGVyX3VucmVnaXN0ZXIoYWRhcHRlci0+ZGJmKTsKKwl6ZmNwX2RiZl9hZGFwdGVyX3VucmVnaXN0ZXIoYWRhcHRlcik7CiAJemZjcF9xZGlvX2Rlc3Ryb3koYWRhcHRlci0+cWRpbyk7CiAKIAl6ZmNwX2Njd19hZGFwdGVyX3B1dChhZGFwdGVyKTsgLyogZmluYWwgcHV0IHRvIHJlbGVhc2UgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfY2N3LmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2Njdy5jCmluZGV4IDA4MzNjMmIuLjRmNzg1MmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfY2N3LmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9jY3cuYwpAQCAtNDgsNyArNDgsNyBAQAogCiAJemZjcF9lcnBfc2V0X2FkYXB0ZXJfc3RhdHVzKGFkYXB0ZXIsIFpGQ1BfU1RBVFVTX0NPTU1PTl9SVU5OSU5HKTsKIAl6ZmNwX2VycF9hZGFwdGVyX3Jlb3BlbihhZGFwdGVyLCBaRkNQX1NUQVRVU19DT01NT05fRVJQX0ZBSUxFRCwKLQkJCQkiY2NyZXN1MiIsIE5VTEwpOworCQkJCSJjY3Jlc3UyIik7CiAJemZjcF9lcnBfd2FpdChhZGFwdGVyKTsKIAlmbHVzaF93b3JrKCZhZGFwdGVyLT5zY2FuX3dvcmspOwogCkBAIC0xODIsNyArMTgyLDcgQEAKIAlpZiAoIWFkYXB0ZXIpCiAJCXJldHVybiAwOwogCi0JemZjcF9lcnBfYWRhcHRlcl9zaHV0ZG93bihhZGFwdGVyLCAwLCAiY2Nzb2ZmMSIsIE5VTEwpOworCXpmY3BfZXJwX2FkYXB0ZXJfc2h1dGRvd24oYWRhcHRlciwgMCwgImNjc29mZjEiKTsKIAl6ZmNwX2VycF93YWl0KGFkYXB0ZXIpOwogCiAJemZjcF9jY3dfYWRhcHRlcl9wdXQoYWRhcHRlcik7CkBAIC0yMDcsMjQgKzIwNywyNCBAQAogCXN3aXRjaCAoZXZlbnQpIHsKIAljYXNlIENJT19HT05FOgogCQlkZXZfd2FybigmY2Rldi0+ZGV2LCAiVGhlIEZDUCBkZXZpY2UgaGFzIGJlZW4gZGV0YWNoZWRcbiIpOwotCQl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKGFkYXB0ZXIsIDAsICJjY25vdGkxIiwgTlVMTCk7CisJCXpmY3BfZXJwX2FkYXB0ZXJfc2h1dGRvd24oYWRhcHRlciwgMCwgImNjbm90aTEiKTsKIAkJYnJlYWs7CiAJY2FzZSBDSU9fTk9fUEFUSDoKIAkJZGV2X3dhcm4oJmNkZXYtPmRldiwKIAkJCSAiVGhlIENIUElEIGZvciB0aGUgRkNQIGRldmljZSBpcyBvZmZsaW5lXG4iKTsKLQkJemZjcF9lcnBfYWRhcHRlcl9zaHV0ZG93bihhZGFwdGVyLCAwLCAiY2Nub3RpMiIsIE5VTEwpOworCQl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKGFkYXB0ZXIsIDAsICJjY25vdGkyIik7CiAJCWJyZWFrOwogCWNhc2UgQ0lPX09QRVI6CiAJCWRldl9pbmZvKCZjZGV2LT5kZXYsICJUaGUgRkNQIGRldmljZSBpcyBvcGVyYXRpb25hbCBhZ2FpblxuIik7CiAJCXpmY3BfZXJwX3NldF9hZGFwdGVyX3N0YXR1cyhhZGFwdGVyLAogCQkJCQkgICAgWkZDUF9TVEFUVVNfQ09NTU9OX1JVTk5JTkcpOwogCQl6ZmNwX2VycF9hZGFwdGVyX3Jlb3BlbihhZGFwdGVyLCBaRkNQX1NUQVRVU19DT01NT05fRVJQX0ZBSUxFRCwKLQkJCQkJImNjbm90aTQiLCBOVUxMKTsKKwkJCQkJImNjbm90aTQiKTsKIAkJYnJlYWs7CiAJY2FzZSBDSU9fQk9YRUQ6CiAJCWRldl93YXJuKCZjZGV2LT5kZXYsICJUaGUgRkNQIGRldmljZSBkaWQgbm90IHJlc3BvbmQgd2l0aGluICIKIAkJCQkgICAgICJ0aGUgc3BlY2lmaWVkIHRpbWVcbiIpOwotCQl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKGFkYXB0ZXIsIDAsICJjY25vdGk1IiwgTlVMTCk7CisJCXpmY3BfZXJwX2FkYXB0ZXJfc2h1dGRvd24oYWRhcHRlciwgMCwgImNjbm90aTUiKTsKIAkJYnJlYWs7CiAJfQogCkBAIC0yNDMsNyArMjQzLDcgQEAKIAlpZiAoIWFkYXB0ZXIpCiAJCXJldHVybjsKIAotCXpmY3BfZXJwX2FkYXB0ZXJfc2h1dGRvd24oYWRhcHRlciwgMCwgImNjc2h1dDEiLCBOVUxMKTsKKwl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKGFkYXB0ZXIsIDAsICJjY3NodXQxIik7CiAJemZjcF9lcnBfd2FpdChhZGFwdGVyKTsKIAl6ZmNwX2VycF90aHJlYWRfa2lsbChhZGFwdGVyKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9jZmRjLmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2NmZGMuYwppbmRleCBkNjkyZTIyLi40NjM0MmZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2NmZGMuYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2NmZGMuYwpAQCAtMjg4LDcgKzI4OCw3IEBACiAJCSAgICAoc3RhdHVzICYgWkZDUF9TVEFUVVNfQ09NTU9OX0FDQ0VTU19CT1hFRCkpCiAJCQl6ZmNwX2VycF9wb3J0X3Jlb3Blbihwb3J0LAogCQkJCQkgICAgIFpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfRkFJTEVELAotCQkJCQkgICAgICJjZmFhY18xIiwgTlVMTCk7CisJCQkJCSAgICAgImNmYWFjXzEiKTsKIAl9CiAJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+cG9ydF9saXN0X2xvY2ssIGZsYWdzKTsKIApAQCAtMjk5LDcgKzI5OSw3IEBACiAJCSAgICAoc3RhdHVzICYgWkZDUF9TVEFUVVNfQ09NTU9OX0FDQ0VTU19CT1hFRCkpCiAJCQl6ZmNwX2VycF9sdW5fcmVvcGVuKHNkZXYsCiAJCQkJCSAgICBaRkNQX1NUQVRVU19DT01NT05fRVJQX0ZBSUxFRCwKLQkJCQkJICAgICJjZmFhY18yIiwgTlVMTCk7CisJCQkJCSAgICAiY2ZhYWNfMiIpOwogCX0KIH0KIApAQCAtNDI2LDcgKzQyNiw3IEBACiAJCQl6ZmNwX3Njc2lfZGV2X2x1bihzZGV2KSwKIAkJCSh1bnNpZ25lZCBsb25nIGxvbmcpemZjcF9zZGV2LT5wb3J0LT53d3BuKTsKIAkJemZjcF9lcnBfc2V0X2x1bl9zdGF0dXMoc2RldiwgWkZDUF9TVEFUVVNfQ09NTU9OX0VSUF9GQUlMRUQpOwotCQl6ZmNwX2VycF9sdW5fc2h1dGRvd24oc2RldiwgMCwgImZzb3VoXzYiLCBOVUxMKTsKKwkJemZjcF9lcnBfbHVuX3NodXRkb3duKHNkZXYsIDAsICJmc291aF82Iik7CiAJCXJldHVybiAtRUFDQ0VTOwogCX0KIApAQCAtNDM3LDcgKzQzNyw3IEBACiAJCQl6ZmNwX3Njc2lfZGV2X2x1bihzZGV2KSwKIAkJCSh1bnNpZ25lZCBsb25nIGxvbmcpemZjcF9zZGV2LT5wb3J0LT53d3BuKTsKIAkJemZjcF9lcnBfc2V0X2x1bl9zdGF0dXMoc2RldiwgWkZDUF9TVEFUVVNfQ09NTU9OX0VSUF9GQUlMRUQpOwotCQl6ZmNwX2VycF9sdW5fc2h1dGRvd24oc2RldiwgMCwgImZzb3NoXzgiLCBOVUxMKTsKKwkJemZjcF9lcnBfbHVuX3NodXRkb3duKHNkZXYsIDAsICJmc29zaF84Iik7CiAJCXJldHVybiAtRUFDQ0VTOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9kYmYuYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZGJmLmMKaW5kZXggMmNkZDZiMi4uOTZkMTQ2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9kYmYuYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2RiZi5jCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIERlYnVnIHRyYWNlcyBmb3IgemZjcC4KICAqCi0gKiBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDIsIDIwMDkKKyAqIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMiwgMjAxMAogICovCiAKICNkZWZpbmUgS01TR19DT01QT05FTlQgInpmY3AiCkBAIC0yMiw5ODAgKzIyLDM5MiBAQAogTU9EVUxFX1BBUk1fREVTQyhkYmZzaXplLAogCQkgIm51bWJlciBvZiBwYWdlcyBmb3IgZWFjaCBkZWJ1ZyBmZWF0dXJlIGFyZWEgKGRlZmF1bHQgNCkiKTsKIAotc3RhdGljIHZvaWQgemZjcF9kYmZfaGV4ZHVtcChkZWJ1Z19pbmZvX3QgKmRiZiwgdm9pZCAqdG8sIGludCB0b19sZW4sCi0JCQkgICAgIGludCBsZXZlbCwgY2hhciAqZnJvbSwgaW50IGZyb21fbGVuKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgemZjcF9kYmZfcGxlbih1bnNpZ25lZCBpbnQgb2Zmc2V0KQogewotCWludCBvZmZzZXQ7Ci0Jc3RydWN0IHpmY3BfZGJmX2R1bXAgKmR1bXAgPSB0bzsKLQlpbnQgcm9vbSA9IHRvX2xlbiAtIHNpemVvZigqZHVtcCk7CisJcmV0dXJuIHNpemVvZihzdHJ1Y3QgemZjcF9kYmZfcGF5KSArIG9mZnNldCAtIFpGQ1BfREJGX1BBWV9NQVhfUkVDOworfQogCi0JZm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgPCBmcm9tX2xlbjsgb2Zmc2V0ICs9IGR1bXAtPnNpemUpIHsKLQkJbWVtc2V0KHRvLCAwLCB0b19sZW4pOwotCQlzdHJuY3B5KGR1bXAtPnRhZywgImR1bXAiLCBaRkNQX0RCRl9UQUdfU0laRSk7Ci0JCWR1bXAtPnRvdGFsX3NpemUgPSBmcm9tX2xlbjsKLQkJZHVtcC0+b2Zmc2V0ID0gb2Zmc2V0OwotCQlkdW1wLT5zaXplID0gbWluKGZyb21fbGVuIC0gb2Zmc2V0LCByb29tKTsKLQkJbWVtY3B5KGR1bXAtPmRhdGEsIGZyb20gKyBvZmZzZXQsIGR1bXAtPnNpemUpOwotCQlkZWJ1Z19ldmVudChkYmYsIGxldmVsLCBkdW1wLCBkdW1wLT5zaXplICsgc2l6ZW9mKCpkdW1wKSk7CitzdGF0aWMgaW5saW5lCit2b2lkIHpmY3BfZGJmX3BsX3dyaXRlKHN0cnVjdCB6ZmNwX2RiZiAqZGJmLCB2b2lkICpkYXRhLCB1MTYgbGVuZ3RoLCBjaGFyICphcmVhLAorCQkgICAgICAgdTY0IHJlcV9pZCkKK3sKKwlzdHJ1Y3QgemZjcF9kYmZfcGF5ICpwbCA9ICZkYmYtPnBheV9idWY7CisJdTE2IG9mZnNldCA9IDAsIHJlY19sZW5ndGg7CisKKwlzcGluX2xvY2soJmRiZi0+cGF5X2xvY2spOworCW1lbXNldChwbCwgMCwgc2l6ZW9mKCpwbCkpOworCXBsLT5mc2ZfcmVxX2lkID0gcmVxX2lkOworCW1lbWNweShwbC0+YXJlYSwgYXJlYSwgWkZDUF9EQkZfVEFHX0xFTik7CisKKwl3aGlsZSAob2Zmc2V0IDwgbGVuZ3RoKSB7CisJCXJlY19sZW5ndGggPSBtaW4oKHUxNikgWkZDUF9EQkZfUEFZX01BWF9SRUMsCisJCQkJICh1MTYpIChsZW5ndGggLSBvZmZzZXQpKTsKKwkJbWVtY3B5KHBsLT5kYXRhLCBkYXRhICsgb2Zmc2V0LCByZWNfbGVuZ3RoKTsKKwkJZGVidWdfZXZlbnQoZGJmLT5wYXksIDEsIHBsLCB6ZmNwX2RiZl9wbGVuKHJlY19sZW5ndGgpKTsKKworCQlvZmZzZXQgKz0gcmVjX2xlbmd0aDsKKwkJcGwtPmNvdW50ZXIrKzsKIAl9CisKKwlzcGluX3VubG9jaygmZGJmLT5wYXlfbG9jayk7CiB9CiAKLXN0YXRpYyB2b2lkIHpmY3BfZGJmX3RhZyhjaGFyICoqcCwgY29uc3QgY2hhciAqbGFiZWwsIGNvbnN0IGNoYXIgKnRhZykKKy8qKgorICogemZjcF9kYmZfaGJhX2ZzZl9yZXMgLSB0cmFjZSBldmVudCBmb3IgZnNmIHJlc3BvbnNlcworICogQHRhZzogdGFnIGluZGljYXRpbmcgd2hpY2gga2luZCBvZiB1bnNvbGljaXRlZCBzdGF0dXMgaGFzIGJlZW4gcmVjZWl2ZWQKKyAqIEByZXE6IHJlcXVlc3QgZm9yIHdoaWNoIGEgcmVzcG9uc2Ugd2FzIHJlY2VpdmVkCisgKi8KK3ZvaWQgemZjcF9kYmZfaGJhX2ZzZl9yZXMoY2hhciAqdGFnLCBzdHJ1Y3QgemZjcF9mc2ZfcmVxICpyZXEpCiB7Ci0JaW50IGk7Ci0KLQkqcCArPSBzcHJpbnRmKCpwLCAiJS0yNHMiLCBsYWJlbCk7Ci0JZm9yIChpID0gMDsgaSA8IFpGQ1BfREJGX1RBR19TSVpFOyBpKyspCi0JCSpwICs9IHNwcmludGYoKnAsICIlYyIsIHRhZ1tpXSk7Ci0JKnAgKz0gc3ByaW50ZigqcCwgIlxuIik7Ci19Ci0KLXN0YXRpYyB2b2lkIHpmY3BfZGJmX291dHMoY2hhciAqKmJ1ZiwgY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyKQotewotCSpidWYgKz0gc3ByaW50ZigqYnVmLCAiJS0yNHMlc1xuIiwgczEsIHMyKTsKLX0KLQotc3RhdGljIHZvaWQgemZjcF9kYmZfb3V0KGNoYXIgKipidWYsIGNvbnN0IGNoYXIgKnMsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQotewotCXZhX2xpc3QgYXJnOwotCi0JKmJ1ZiArPSBzcHJpbnRmKCpidWYsICIlLTI0cyIsIHMpOwotCXZhX3N0YXJ0KGFyZywgZm9ybWF0KTsKLQkqYnVmICs9IHZzcHJpbnRmKCpidWYsIGZvcm1hdCwgYXJnKTsKLQl2YV9lbmQoYXJnKTsKLQkqYnVmICs9IHNwcmludGYoKmJ1ZiwgIlxuIik7Ci19Ci0KLXN0YXRpYyB2b2lkIHpmY3BfZGJmX291dGQoY2hhciAqKnAsIGNvbnN0IGNoYXIgKmxhYmVsLCBjaGFyICpidWZmZXIsCi0JCQkgIGludCBidWZsZW4sIGludCBvZmZzZXQsIGludCB0b3RhbF9zaXplKQotewotCWlmICghb2Zmc2V0KQotCQkqcCArPSBzcHJpbnRmKCpwLCAiJS0yNHMgICIsIGxhYmVsKTsKLQl3aGlsZSAoYnVmbGVuLS0pIHsKLQkJaWYgKG9mZnNldCA+IDApIHsKLQkJCWlmICgob2Zmc2V0ICUgMzIpID09IDApCi0JCQkJKnAgKz0gc3ByaW50ZigqcCwgIlxuJS0yNGMgICIsICcgJyk7Ci0JCQllbHNlIGlmICgob2Zmc2V0ICUgNCkgPT0gMCkKLQkJCQkqcCArPSBzcHJpbnRmKCpwLCAiICIpOwotCQl9Ci0JCSpwICs9IHNwcmludGYoKnAsICIlMDJ4IiwgKmJ1ZmZlcisrKTsKLQkJaWYgKCsrb2Zmc2V0ID09IHRvdGFsX3NpemUpIHsKLQkJCSpwICs9IHNwcmludGYoKnAsICJcbiIpOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JaWYgKCF0b3RhbF9zaXplKQotCQkqcCArPSBzcHJpbnRmKCpwLCAiXG4iKTsKLX0KLQotc3RhdGljIGludCB6ZmNwX2RiZl92aWV3X2hlYWRlcihkZWJ1Z19pbmZvX3QgKmlkLCBzdHJ1Y3QgZGVidWdfdmlldyAqdmlldywKLQkJCQlpbnQgYXJlYSwgZGVidWdfZW50cnlfdCAqZW50cnksIGNoYXIgKm91dF9idWYpCi17Ci0Jc3RydWN0IHpmY3BfZGJmX2R1bXAgKmR1bXAgPSAoc3RydWN0IHpmY3BfZGJmX2R1bXAgKilERUJVR19EQVRBKGVudHJ5KTsKLQlzdHJ1Y3QgdGltZXNwZWMgdDsKLQljaGFyICpwID0gb3V0X2J1ZjsKLQotCWlmIChzdHJuY21wKGR1bXAtPnRhZywgImR1bXAiLCBaRkNQX0RCRl9UQUdfU0laRSkgIT0gMCkgewotCQlzdGNrX3RvX3RpbWVzcGVjKGVudHJ5LT5pZC5zdGNrLCAmdCk7Ci0JCXpmY3BfZGJmX291dCgmcCwgInRpbWVzdGFtcCIsICIlMDExbHU6JTA2bHUiLAotCQkJICAgICB0LnR2X3NlYywgdC50dl9uc2VjKTsKLQkJemZjcF9kYmZfb3V0KCZwLCAiY3B1IiwgIiUwMmkiLCBlbnRyeS0+aWQuZmllbGRzLmNwdWlkKTsKLQl9IGVsc2UJewotCQl6ZmNwX2RiZl9vdXRkKCZwLCAiIiwgZHVtcC0+ZGF0YSwgZHVtcC0+c2l6ZSwgZHVtcC0+b2Zmc2V0LAotCQkJICAgICAgZHVtcC0+dG90YWxfc2l6ZSk7Ci0JCWlmICgoZHVtcC0+b2Zmc2V0ICsgZHVtcC0+c2l6ZSkgPT0gZHVtcC0+dG90YWxfc2l6ZSkKLQkJCXAgKz0gc3ByaW50ZihwLCAiXG4iKTsKLQl9Ci0JcmV0dXJuIHAgLSBvdXRfYnVmOwotfQotCi12b2lkIF96ZmNwX2RiZl9oYmFfZnNmX3Jlc3BvbnNlKGNvbnN0IGNoYXIgKnRhZzIsIGludCBsZXZlbCwKLQkJCQlzdHJ1Y3QgemZjcF9mc2ZfcmVxICpmc2ZfcmVxLAotCQkJCXN0cnVjdCB6ZmNwX2RiZiAqZGJmKQotewotCXN0cnVjdCBmc2ZfcXRjYiAqcXRjYiA9IGZzZl9yZXEtPnF0Y2I7Ci0JdW5pb24gZnNmX3Byb3Rfc3RhdHVzX3F1YWwgKnByb3Rfc3RhdHVzX3F1YWwgPQotCQkJCQkmcXRjYi0+cHJlZml4LnByb3Rfc3RhdHVzX3F1YWw7Ci0JdW5pb24gZnNmX3N0YXR1c19xdWFsICpmc2Zfc3RhdHVzX3F1YWwgPSAmcXRjYi0+aGVhZGVyLmZzZl9zdGF0dXNfcXVhbDsKLQlzdHJ1Y3Qgc2NzaV9jbW5kICpzY3NpX2NtbmQ7Ci0Jc3RydWN0IHpmY3BfcG9ydCAqcG9ydDsKLQlzdHJ1Y3QgemZjcF91bml0ICp1bml0OwotCXN0cnVjdCB6ZmNwX3NlbmRfZWxzICpzZW5kX2VsczsKLQlzdHJ1Y3QgemZjcF9kYmZfaGJhX3JlY29yZCAqcmVjID0gJmRiZi0+aGJhX2J1ZjsKLQlzdHJ1Y3QgemZjcF9kYmZfaGJhX3JlY29yZF9yZXNwb25zZSAqcmVzcG9uc2UgPSAmcmVjLT51LnJlc3BvbnNlOworCXN0cnVjdCB6ZmNwX2RiZiAqZGJmID0gcmVxLT5hZGFwdGVyLT5kYmY7CisJc3RydWN0IGZzZl9xdGNiX3ByZWZpeCAqcV9wcmVmID0gJnJlcS0+cXRjYi0+cHJlZml4OworCXN0cnVjdCBmc2ZfcXRjYl9oZWFkZXIgKnFfaGVhZCA9ICZyZXEtPnF0Y2ItPmhlYWRlcjsKKwlzdHJ1Y3QgemZjcF9kYmZfaGJhICpyZWMgPSAmZGJmLT5oYmFfYnVmOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGJmLT5oYmFfbG9jaywgZmxhZ3MpOwogCW1lbXNldChyZWMsIDAsIHNpemVvZigqcmVjKSk7Ci0Jc3RybmNweShyZWMtPnRhZywgInJlc3AiLCBaRkNQX0RCRl9UQUdfU0laRSk7Ci0Jc3RybmNweShyZWMtPnRhZzIsIHRhZzIsIFpGQ1BfREJGX1RBR19TSVpFKTsKIAotCXJlc3BvbnNlLT5mc2ZfY29tbWFuZCA9IGZzZl9yZXEtPmZzZl9jb21tYW5kOwotCXJlc3BvbnNlLT5mc2ZfcmVxaWQgPSBmc2ZfcmVxLT5yZXFfaWQ7Ci0JcmVzcG9uc2UtPmZzZl9zZXFubyA9IGZzZl9yZXEtPnNlcV9ubzsKLQlyZXNwb25zZS0+ZnNmX2lzc3VlZCA9IGZzZl9yZXEtPmlzc3VlZDsKLQlyZXNwb25zZS0+ZnNmX3Byb3Rfc3RhdHVzID0gcXRjYi0+cHJlZml4LnByb3Rfc3RhdHVzOwotCXJlc3BvbnNlLT5mc2Zfc3RhdHVzID0gcXRjYi0+aGVhZGVyLmZzZl9zdGF0dXM7Ci0JbWVtY3B5KHJlc3BvbnNlLT5mc2ZfcHJvdF9zdGF0dXNfcXVhbCwKLQkgICAgICAgcHJvdF9zdGF0dXNfcXVhbCwgRlNGX1BST1RfU1RBVFVTX1FVQUxfU0laRSk7Ci0JbWVtY3B5KHJlc3BvbnNlLT5mc2Zfc3RhdHVzX3F1YWwsCi0JICAgICAgIGZzZl9zdGF0dXNfcXVhbCwgRlNGX1NUQVRVU19RVUFMSUZJRVJfU0laRSk7Ci0JcmVzcG9uc2UtPmZzZl9yZXFfc3RhdHVzID0gZnNmX3JlcS0+c3RhdHVzOwotCXJlc3BvbnNlLT5zYmFsX2ZpcnN0ID0gZnNmX3JlcS0+cWRpb19yZXEuc2JhbF9maXJzdDsKLQlyZXNwb25zZS0+c2JhbF9sYXN0ID0gZnNmX3JlcS0+cWRpb19yZXEuc2JhbF9sYXN0OwotCXJlc3BvbnNlLT5zYmFsX3Jlc3BvbnNlID0gZnNmX3JlcS0+cWRpb19yZXEuc2JhbF9yZXNwb25zZTsKLQlyZXNwb25zZS0+cG9vbCA9IGZzZl9yZXEtPnBvb2wgIT0gTlVMTDsKLQlyZXNwb25zZS0+ZXJwX2FjdGlvbiA9ICh1bnNpZ25lZCBsb25nKWZzZl9yZXEtPmVycF9hY3Rpb247CisJbWVtY3B5KHJlYy0+dGFnLCB0YWcsIFpGQ1BfREJGX1RBR19MRU4pOworCXJlYy0+aWQgPSBaRkNQX0RCRl9IQkFfUkVTOworCXJlYy0+ZnNmX3JlcV9pZCA9IHJlcS0+cmVxX2lkOworCXJlYy0+ZnNmX3JlcV9zdGF0dXMgPSByZXEtPnN0YXR1czsKKwlyZWMtPmZzZl9jbWQgPSByZXEtPmZzZl9jb21tYW5kOworCXJlYy0+ZnNmX3NlcV9ubyA9IHJlcS0+c2VxX25vOworCXJlYy0+dS5yZXMucmVxX2lzc3VlZCA9IHJlcS0+aXNzdWVkOworCXJlYy0+dS5yZXMucHJvdF9zdGF0dXMgPSBxX3ByZWYtPnByb3Rfc3RhdHVzOworCXJlYy0+dS5yZXMuZnNmX3N0YXR1cyA9IHFfaGVhZC0+ZnNmX3N0YXR1czsKIAotCXN3aXRjaCAoZnNmX3JlcS0+ZnNmX2NvbW1hbmQpIHsKLQljYXNlIEZTRl9RVENCX0ZDUF9DTU5EOgotCQlpZiAoZnNmX3JlcS0+c3RhdHVzICYgWkZDUF9TVEFUVVNfRlNGUkVRX1RBU0tfTUFOQUdFTUVOVCkKLQkJCWJyZWFrOwotCQlzY3NpX2NtbmQgPSAoc3RydWN0IHNjc2lfY21uZCAqKWZzZl9yZXEtPmRhdGE7Ci0JCWlmIChzY3NpX2NtbmQpIHsKLQkJCXJlc3BvbnNlLT51LmZjcC5jbW5kID0gKHVuc2lnbmVkIGxvbmcpc2NzaV9jbW5kOwotCQkJcmVzcG9uc2UtPnUuZmNwLmRhdGFfZGlyID0KLQkJCQlxdGNiLT5ib3R0b20uaW8uZGF0YV9kaXJlY3Rpb247Ci0JCX0KLQkJYnJlYWs7CisJbWVtY3B5KHJlYy0+dS5yZXMucHJvdF9zdGF0dXNfcXVhbCwgJnFfcHJlZi0+cHJvdF9zdGF0dXNfcXVhbCwKKwkgICAgICAgRlNGX1BST1RfU1RBVFVTX1FVQUxfU0laRSk7CisJbWVtY3B5KHJlYy0+dS5yZXMuZnNmX3N0YXR1c19xdWFsLCAmcV9oZWFkLT5mc2Zfc3RhdHVzX3F1YWwsCisJICAgICAgIEZTRl9TVEFUVVNfUVVBTElGSUVSX1NJWkUpOwogCi0JY2FzZSBGU0ZfUVRDQl9PUEVOX1BPUlRfV0lUSF9ESUQ6Ci0JY2FzZSBGU0ZfUVRDQl9DTE9TRV9QT1JUOgotCWNhc2UgRlNGX1FUQ0JfQ0xPU0VfUEhZU0lDQUxfUE9SVDoKLQkJcG9ydCA9IChzdHJ1Y3QgemZjcF9wb3J0ICopZnNmX3JlcS0+ZGF0YTsKLQkJcmVzcG9uc2UtPnUucG9ydC53d3BuID0gcG9ydC0+d3dwbjsKLQkJcmVzcG9uc2UtPnUucG9ydC5kX2lkID0gcG9ydC0+ZF9pZDsKLQkJcmVzcG9uc2UtPnUucG9ydC5wb3J0X2hhbmRsZSA9IHF0Y2ItPmhlYWRlci5wb3J0X2hhbmRsZTsKLQkJYnJlYWs7Ci0KLQljYXNlIEZTRl9RVENCX09QRU5fTFVOOgotCWNhc2UgRlNGX1FUQ0JfQ0xPU0VfTFVOOgotCQl1bml0ID0gKHN0cnVjdCB6ZmNwX3VuaXQgKilmc2ZfcmVxLT5kYXRhOwotCQlwb3J0ID0gdW5pdC0+cG9ydDsKLQkJcmVzcG9uc2UtPnUudW5pdC53d3BuID0gcG9ydC0+d3dwbjsKLQkJcmVzcG9uc2UtPnUudW5pdC5mY3BfbHVuID0gdW5pdC0+ZmNwX2x1bjsKLQkJcmVzcG9uc2UtPnUudW5pdC5wb3J0X2hhbmRsZSA9IHF0Y2ItPmhlYWRlci5wb3J0X2hhbmRsZTsKLQkJcmVzcG9uc2UtPnUudW5pdC5sdW5faGFuZGxlID0gcXRjYi0+aGVhZGVyLmx1bl9oYW5kbGU7Ci0JCWJyZWFrOwotCi0JY2FzZSBGU0ZfUVRDQl9TRU5EX0VMUzoKLQkJc2VuZF9lbHMgPSAoc3RydWN0IHpmY3Bfc2VuZF9lbHMgKilmc2ZfcmVxLT5kYXRhOwotCQlyZXNwb25zZS0+dS5lbHMuZF9pZCA9IG50b2gyNChxdGNiLT5ib3R0b20uc3VwcG9ydC5kX2lkKTsKLQkJYnJlYWs7Ci0KLQljYXNlIEZTRl9RVENCX0FCT1JUX0ZDUF9DTU5EOgotCWNhc2UgRlNGX1FUQ0JfU0VORF9HRU5FUklDOgotCWNhc2UgRlNGX1FUQ0JfRVhDSEFOR0VfQ09ORklHX0RBVEE6Ci0JY2FzZSBGU0ZfUVRDQl9FWENIQU5HRV9QT1JUX0RBVEE6Ci0JY2FzZSBGU0ZfUVRDQl9ET1dOTE9BRF9DT05UUk9MX0ZJTEU6Ci0JY2FzZSBGU0ZfUVRDQl9VUExPQURfQ09OVFJPTF9GSUxFOgotCQlicmVhazsKKwlpZiAocmVxLT5mc2ZfY29tbWFuZCAhPSBGU0ZfUVRDQl9GQ1BfQ01ORCkgeworCQlyZWMtPnBsX2xlbiA9IHFfaGVhZC0+bG9nX2xlbmd0aDsKKwkJemZjcF9kYmZfcGxfd3JpdGUoZGJmLCAoY2hhciAqKXFfcHJlZiArIHFfaGVhZC0+bG9nX3N0YXJ0LAorCQkJCSAgcmVjLT5wbF9sZW4sICJmc2ZfcmVzIiwgcmVxLT5yZXFfaWQpOwogCX0KIAotCWRlYnVnX2V2ZW50KGRiZi0+aGJhLCBsZXZlbCwgcmVjLCBzaXplb2YoKnJlYykpOwotCi0JLyogaGF2ZSBmY3AgY2hhbm5lbCBtaWNyb2NvZGUgZml4ZWQgdG8gdXNlIGFzIGxpdHRsZSBhcyBwb3NzaWJsZSAqLwotCWlmIChmc2ZfcmVxLT5mc2ZfY29tbWFuZCAhPSBGU0ZfUVRDQl9GQ1BfQ01ORCkgewotCQkvKiBhZGp1c3QgbGVuZ3RoIHNraXBwaW5nIHRyYWlsaW5nIHplcm9zICovCi0JCWNoYXIgKmJ1ZiA9IChjaGFyICopcXRjYiArIHF0Y2ItPmhlYWRlci5sb2dfc3RhcnQ7Ci0JCWludCBsZW4gPSBxdGNiLT5oZWFkZXIubG9nX2xlbmd0aDsKLQkJZm9yICg7IGxlbiAmJiAhYnVmW2xlbiAtIDFdOyBsZW4tLSk7Ci0JCXpmY3BfZGJmX2hleGR1bXAoZGJmLT5oYmEsIHJlYywgc2l6ZW9mKCpyZWMpLCBsZXZlbCwgYnVmLAotCQkJCSBsZW4pOwotCX0KLQorCWRlYnVnX2V2ZW50KGRiZi0+aGJhLCAxLCByZWMsIHNpemVvZigqcmVjKSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGJmLT5oYmFfbG9jaywgZmxhZ3MpOwogfQogCi12b2lkIF96ZmNwX2RiZl9oYmFfZnNmX3Vuc29sKGNvbnN0IGNoYXIgKnRhZywgaW50IGxldmVsLCBzdHJ1Y3QgemZjcF9kYmYgKmRiZiwKLQkJCSAgICAgc3RydWN0IGZzZl9zdGF0dXNfcmVhZF9idWZmZXIgKnN0YXR1c19idWZmZXIpCisvKioKKyAqIHpmY3BfZGJmX2hiYV9mc2ZfdXNzIC0gdHJhY2UgZXZlbnQgZm9yIGFuIHVuc29saWNpdGVkIHN0YXR1cyBidWZmZXIKKyAqIEB0YWc6IHRhZyBpbmRpY2F0aW5nIHdoaWNoIGtpbmQgb2YgdW5zb2xpY2l0ZWQgc3RhdHVzIGhhcyBiZWVuIHJlY2VpdmVkCisgKiBAcmVxOiByZXF1ZXN0IHByb3ZpZGluZyB0aGUgdW5zb2xpY2l0ZWQgc3RhdHVzCisgKi8KK3ZvaWQgemZjcF9kYmZfaGJhX2ZzZl91c3MoY2hhciAqdGFnLCBzdHJ1Y3QgemZjcF9mc2ZfcmVxICpyZXEpCiB7Ci0Jc3RydWN0IHpmY3BfZGJmX2hiYV9yZWNvcmQgKnJlYyA9ICZkYmYtPmhiYV9idWY7CisJc3RydWN0IHpmY3BfZGJmICpkYmYgPSByZXEtPmFkYXB0ZXItPmRiZjsKKwlzdHJ1Y3QgZnNmX3N0YXR1c19yZWFkX2J1ZmZlciAqc3JiID0gcmVxLT5kYXRhOworCXN0cnVjdCB6ZmNwX2RiZl9oYmEgKnJlYyA9ICZkYmYtPmhiYV9idWY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZkYmYtPmhiYV9sb2NrLCBmbGFncyk7CiAJbWVtc2V0KHJlYywgMCwgc2l6ZW9mKCpyZWMpKTsKLQlzdHJuY3B5KHJlYy0+dGFnLCAic3RhdCIsIFpGQ1BfREJGX1RBR19TSVpFKTsKLQlzdHJuY3B5KHJlYy0+dGFnMiwgdGFnLCBaRkNQX0RCRl9UQUdfU0laRSk7CiAKLQlyZWMtPnUuc3RhdHVzLmZhaWxlZCA9IGF0b21pY19yZWFkKCZkYmYtPmFkYXB0ZXItPnN0YXRfbWlzcyk7Ci0JaWYgKHN0YXR1c19idWZmZXIgIT0gTlVMTCkgewotCQlyZWMtPnUuc3RhdHVzLnN0YXR1c190eXBlID0gc3RhdHVzX2J1ZmZlci0+c3RhdHVzX3R5cGU7Ci0JCXJlYy0+dS5zdGF0dXMuc3RhdHVzX3N1YnR5cGUgPSBzdGF0dXNfYnVmZmVyLT5zdGF0dXNfc3VidHlwZTsKLQkJbWVtY3B5KCZyZWMtPnUuc3RhdHVzLnF1ZXVlX2Rlc2lnbmF0b3IsCi0JCSAgICAgICAmc3RhdHVzX2J1ZmZlci0+cXVldWVfZGVzaWduYXRvciwKLQkJICAgICAgIHNpemVvZihzdHJ1Y3QgZnNmX3F1ZXVlX2Rlc2lnbmF0b3IpKTsKKwltZW1jcHkocmVjLT50YWcsIHRhZywgWkZDUF9EQkZfVEFHX0xFTik7CisJcmVjLT5pZCA9IFpGQ1BfREJGX0hCQV9VU1M7CisJcmVjLT5mc2ZfcmVxX2lkID0gcmVxLT5yZXFfaWQ7CisJcmVjLT5mc2ZfcmVxX3N0YXR1cyA9IHJlcS0+c3RhdHVzOworCXJlYy0+ZnNmX2NtZCA9IHJlcS0+ZnNmX2NvbW1hbmQ7CiAKLQkJc3dpdGNoIChzdGF0dXNfYnVmZmVyLT5zdGF0dXNfdHlwZSkgewotCQljYXNlIEZTRl9TVEFUVVNfUkVBRF9TRU5TRV9EQVRBX0FWQUlMOgotCQkJcmVjLT51LnN0YXR1cy5wYXlsb2FkX3NpemUgPQotCQkJICAgIFpGQ1BfREJGX1VOU09MX1BBWUxPQURfU0VOU0VfREFUQV9BVkFJTDsKLQkJCWJyZWFrOworCWlmICghc3JiKQorCQlnb3RvIGxvZzsKIAotCQljYXNlIEZTRl9TVEFUVVNfUkVBRF9CSVRfRVJST1JfVEhSRVNIT0xEOgotCQkJcmVjLT51LnN0YXR1cy5wYXlsb2FkX3NpemUgPQotCQkJICAgIFpGQ1BfREJGX1VOU09MX1BBWUxPQURfQklUX0VSUk9SX1RIUkVTSE9MRDsKLQkJCWJyZWFrOworCXJlYy0+dS51c3Muc3RhdHVzX3R5cGUgPSBzcmItPnN0YXR1c190eXBlOworCXJlYy0+dS51c3Muc3RhdHVzX3N1YnR5cGUgPSBzcmItPnN0YXR1c19zdWJ0eXBlOworCXJlYy0+dS51c3MuZF9pZCA9IG50b2gyNChzcmItPmRfaWQpOworCXJlYy0+dS51c3MubHVuID0gc3JiLT5mY3BfbHVuOworCW1lbWNweSgmcmVjLT51LnVzcy5xdWV1ZV9kZXNpZ25hdG9yLCAmc3JiLT5xdWV1ZV9kZXNpZ25hdG9yLAorCSAgICAgICBzaXplb2YocmVjLT51LnVzcy5xdWV1ZV9kZXNpZ25hdG9yKSk7CiAKLQkJY2FzZSBGU0ZfU1RBVFVTX1JFQURfTElOS19ET1dOOgotCQkJc3dpdGNoIChzdGF0dXNfYnVmZmVyLT5zdGF0dXNfc3VidHlwZSkgewotCQkJY2FzZSBGU0ZfU1RBVFVTX1JFQURfU1VCX05PX1BIWVNJQ0FMX0xJTks6Ci0JCQljYXNlIEZTRl9TVEFUVVNfUkVBRF9TVUJfRkRJU0NfRkFJTEVEOgotCQkJCXJlYy0+dS5zdGF0dXMucGF5bG9hZF9zaXplID0KLQkJCQkJc2l6ZW9mKHN0cnVjdCBmc2ZfbGlua19kb3duX2luZm8pOwotCQkJfQotCQkJYnJlYWs7CisJLyogc3RhdHVzIHJlYWQgYnVmZmVyIHBheWxvYWQgbGVuZ3RoICovCisJcmVjLT5wbF9sZW4gPSAoIXNyYi0+bGVuZ3RoKSA/IDAgOiBzcmItPmxlbmd0aCAtCisJCQlvZmZzZXRvZihzdHJ1Y3QgZnNmX3N0YXR1c19yZWFkX2J1ZmZlciwgcGF5bG9hZCk7CiAKLQkJY2FzZSBGU0ZfU1RBVFVTX1JFQURfRkVBVFVSRV9VUERBVEVfQUxFUlQ6Ci0JCQlyZWMtPnUuc3RhdHVzLnBheWxvYWRfc2l6ZSA9Ci0JCQkgICAgWkZDUF9EQkZfVU5TT0xfUEFZTE9BRF9GRUFUVVJFX1VQREFURV9BTEVSVDsKLQkJCWJyZWFrOwotCQl9Ci0JCW1lbWNweSgmcmVjLT51LnN0YXR1cy5wYXlsb2FkLAotCQkgICAgICAgJnN0YXR1c19idWZmZXItPnBheWxvYWQsIHJlYy0+dS5zdGF0dXMucGF5bG9hZF9zaXplKTsKLQl9Ci0KLQlkZWJ1Z19ldmVudChkYmYtPmhiYSwgbGV2ZWwsIHJlYywgc2l6ZW9mKCpyZWMpKTsKKwlpZiAocmVjLT5wbF9sZW4pCisJCXpmY3BfZGJmX3BsX3dyaXRlKGRiZiwgc3JiLT5wYXlsb2FkLmRhdGEsIHJlYy0+cGxfbGVuLAorCQkJCSAgImZzZl91c3MiLCByZXEtPnJlcV9pZCk7Citsb2c6CisJZGVidWdfZXZlbnQoZGJmLT5oYmEsIDIsIHJlYywgc2l6ZW9mKCpyZWMpKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkYmYtPmhiYV9sb2NrLCBmbGFncyk7CiB9CiAKIC8qKgotICogemZjcF9kYmZfaGJhX3FkaW8gLSB0cmFjZSBldmVudCBmb3IgUURJTyByZWxhdGVkIGZhaWx1cmUKLSAqIEBxZGlvOiBxZGlvIHN0cnVjdHVyZSBhZmZlY3RlZCBieSB0aGlzIFFESU8gcmVsYXRlZCBldmVudAotICogQHFkaW9fZXJyb3I6IGFzIHBhc3NlZCBieSBxZGlvIG1vZHVsZQotICogQHNiYWxfaW5kZXg6IGZpcnN0IGJ1ZmZlciB3aXRoIGVycm9yIGNvbmRpdGlvbiwgYXMgcGFzc2VkIGJ5IHFkaW8gbW9kdWxlCi0gKiBAc2JhbF9jb3VudDogbnVtYmVyIG9mIGJ1ZmZlcnMgYWZmZWN0ZWQsIGFzIHBhc3NlZCBieSBxZGlvIG1vZHVsZQorICogemZjcF9kYmZfaGJhX2JpdF9lcnIgLSB0cmFjZSBldmVudCBmb3IgYml0IGVycm9yIGNvbmRpdGlvbnMKKyAqIEB0YWc6IHRhZyBpbmRpY2F0aW5nIHdoaWNoIGtpbmQgb2YgdW5zb2xpY2l0ZWQgc3RhdHVzIGhhcyBiZWVuIHJlY2VpdmVkCisgKiBAcmVxOiByZXF1ZXN0IHdoaWNoIGNhdXNlZCB0aGUgYml0X2Vycm9yIGNvbmRpdGlvbgogICovCi12b2lkIHpmY3BfZGJmX2hiYV9xZGlvKHN0cnVjdCB6ZmNwX2RiZiAqZGJmLCB1bnNpZ25lZCBpbnQgcWRpb19lcnJvciwKLQkJICAgICAgIGludCBzYmFsX2luZGV4LCBpbnQgc2JhbF9jb3VudCkKK3ZvaWQgemZjcF9kYmZfaGJhX2JpdF9lcnIoY2hhciAqdGFnLCBzdHJ1Y3QgemZjcF9mc2ZfcmVxICpyZXEpCiB7Ci0Jc3RydWN0IHpmY3BfZGJmX2hiYV9yZWNvcmQgKnIgPSAmZGJmLT5oYmFfYnVmOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGJmLT5oYmFfbG9jaywgZmxhZ3MpOwotCW1lbXNldChyLCAwLCBzaXplb2YoKnIpKTsKLQlzdHJuY3B5KHItPnRhZywgInFkaW8iLCBaRkNQX0RCRl9UQUdfU0laRSk7Ci0Jci0+dS5xZGlvLnFkaW9fZXJyb3IgPSBxZGlvX2Vycm9yOwotCXItPnUucWRpby5zYmFsX2luZGV4ID0gc2JhbF9pbmRleDsKLQlyLT51LnFkaW8uc2JhbF9jb3VudCA9IHNiYWxfY291bnQ7Ci0JZGVidWdfZXZlbnQoZGJmLT5oYmEsIDAsIHIsIHNpemVvZigqcikpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRiZi0+aGJhX2xvY2ssIGZsYWdzKTsKLX0KLQotLyoqCi0gKiB6ZmNwX2RiZl9oYmFfYmVyciAtIHRyYWNlIGV2ZW50IGZvciBiaXQgZXJyb3IgdGhyZXNob2xkCi0gKiBAZGJmOiBkYmYgc3RydWN0dXJlIGFmZmVjdGVkIGJ5IHRoaXMgUURJTyByZWxhdGVkIGV2ZW50Ci0gKiBAcmVxOiBmc2YgcmVxdWVzdAotICovCi12b2lkIHpmY3BfZGJmX2hiYV9iZXJyKHN0cnVjdCB6ZmNwX2RiZiAqZGJmLCBzdHJ1Y3QgemZjcF9mc2ZfcmVxICpyZXEpCi17Ci0Jc3RydWN0IHpmY3BfZGJmX2hiYV9yZWNvcmQgKnIgPSAmZGJmLT5oYmFfYnVmOworCXN0cnVjdCB6ZmNwX2RiZiAqZGJmID0gcmVxLT5hZGFwdGVyLT5kYmY7CisJc3RydWN0IHpmY3BfZGJmX2hiYSAqcmVjID0gJmRiZi0+aGJhX2J1ZjsKIAlzdHJ1Y3QgZnNmX3N0YXR1c19yZWFkX2J1ZmZlciAqc3JfYnVmID0gcmVxLT5kYXRhOwotCXN0cnVjdCBmc2ZfYml0X2Vycm9yX3BheWxvYWQgKmVyciA9ICZzcl9idWYtPnBheWxvYWQuYml0X2Vycm9yOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGJmLT5oYmFfbG9jaywgZmxhZ3MpOwotCW1lbXNldChyLCAwLCBzaXplb2YoKnIpKTsKLQlzdHJuY3B5KHItPnRhZywgImJlcnIiLCBaRkNQX0RCRl9UQUdfU0laRSk7Ci0JbWVtY3B5KCZyLT51LmJlcnIsIGVyciwgc2l6ZW9mKHN0cnVjdCBmc2ZfYml0X2Vycm9yX3BheWxvYWQpKTsKLQlkZWJ1Z19ldmVudChkYmYtPmhiYSwgMCwgciwgc2l6ZW9mKCpyKSk7CisJbWVtc2V0KHJlYywgMCwgc2l6ZW9mKCpyZWMpKTsKKworCW1lbWNweShyZWMtPnRhZywgdGFnLCBaRkNQX0RCRl9UQUdfTEVOKTsKKwlyZWMtPmlkID0gWkZDUF9EQkZfSEJBX0JJVDsKKwlyZWMtPmZzZl9yZXFfaWQgPSByZXEtPnJlcV9pZDsKKwlyZWMtPmZzZl9yZXFfc3RhdHVzID0gcmVxLT5zdGF0dXM7CisJcmVjLT5mc2ZfY21kID0gcmVxLT5mc2ZfY29tbWFuZDsKKwltZW1jcHkoJnJlYy0+dS5iZSwgJnNyX2J1Zi0+cGF5bG9hZC5iaXRfZXJyb3IsCisJICAgICAgIHNpemVvZihzdHJ1Y3QgZnNmX2JpdF9lcnJvcl9wYXlsb2FkKSk7CisKKwlkZWJ1Z19ldmVudChkYmYtPmhiYSwgMSwgcmVjLCBzaXplb2YoKnJlYykpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRiZi0+aGJhX2xvY2ssIGZsYWdzKTsKIH0KLXN0YXRpYyB2b2lkIHpmY3BfZGJmX2hiYV92aWV3X3Jlc3BvbnNlKGNoYXIgKipwLAotCQkJCSAgICAgICBzdHJ1Y3QgemZjcF9kYmZfaGJhX3JlY29yZF9yZXNwb25zZSAqcikKKworc3RhdGljIHZvaWQgemZjcF9kYmZfc2V0X2NvbW1vbihzdHJ1Y3QgemZjcF9kYmZfcmVjICpyZWMsCisJCQkJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciwKKwkJCQlzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0LAorCQkJCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKIHsKLQlzdHJ1Y3QgdGltZXNwZWMgdDsKLQotCXpmY3BfZGJmX291dChwLCAiZnNmX2NvbW1hbmQiLCAiMHglMDh4Iiwgci0+ZnNmX2NvbW1hbmQpOwotCXpmY3BfZGJmX291dChwLCAiZnNmX3JlcWlkIiwgIjB4JTBMeCIsIHItPmZzZl9yZXFpZCk7Ci0JemZjcF9kYmZfb3V0KHAsICJmc2Zfc2Vxbm8iLCAiMHglMDh4Iiwgci0+ZnNmX3NlcW5vKTsKLQlzdGNrX3RvX3RpbWVzcGVjKHItPmZzZl9pc3N1ZWQsICZ0KTsKLQl6ZmNwX2RiZl9vdXQocCwgImZzZl9pc3N1ZWQiLCAiJTAxMWx1OiUwNmx1IiwgdC50dl9zZWMsIHQudHZfbnNlYyk7Ci0JemZjcF9kYmZfb3V0KHAsICJmc2ZfcHJvdF9zdGF0dXMiLCAiMHglMDh4Iiwgci0+ZnNmX3Byb3Rfc3RhdHVzKTsKLQl6ZmNwX2RiZl9vdXQocCwgImZzZl9zdGF0dXMiLCAiMHglMDh4Iiwgci0+ZnNmX3N0YXR1cyk7Ci0JemZjcF9kYmZfb3V0ZChwLCAiZnNmX3Byb3Rfc3RhdHVzX3F1YWwiLCByLT5mc2ZfcHJvdF9zdGF0dXNfcXVhbCwKLQkJICAgICAgRlNGX1BST1RfU1RBVFVTX1FVQUxfU0laRSwgMCwgRlNGX1BST1RfU1RBVFVTX1FVQUxfU0laRSk7Ci0JemZjcF9kYmZfb3V0ZChwLCAiZnNmX3N0YXR1c19xdWFsIiwgci0+ZnNmX3N0YXR1c19xdWFsLAotCQkgICAgICBGU0ZfU1RBVFVTX1FVQUxJRklFUl9TSVpFLCAwLCBGU0ZfU1RBVFVTX1FVQUxJRklFUl9TSVpFKTsKLQl6ZmNwX2RiZl9vdXQocCwgImZzZl9yZXFfc3RhdHVzIiwgIjB4JTA4eCIsIHItPmZzZl9yZXFfc3RhdHVzKTsKLQl6ZmNwX2RiZl9vdXQocCwgInNiYWxfZmlyc3QiLCAiMHglMDJ4Iiwgci0+c2JhbF9maXJzdCk7Ci0JemZjcF9kYmZfb3V0KHAsICJzYmFsX2xhc3QiLCAiMHglMDJ4Iiwgci0+c2JhbF9sYXN0KTsKLQl6ZmNwX2RiZl9vdXQocCwgInNiYWxfcmVzcG9uc2UiLCAiMHglMDJ4Iiwgci0+c2JhbF9yZXNwb25zZSk7Ci0JemZjcF9kYmZfb3V0KHAsICJwb29sIiwgIjB4JTAyeCIsIHItPnBvb2wpOwotCi0Jc3dpdGNoIChyLT5mc2ZfY29tbWFuZCkgewotCWNhc2UgRlNGX1FUQ0JfRkNQX0NNTkQ6Ci0JCWlmIChyLT5mc2ZfcmVxX3N0YXR1cyAmIFpGQ1BfU1RBVFVTX0ZTRlJFUV9UQVNLX01BTkFHRU1FTlQpCi0JCQlicmVhazsKLQkJemZjcF9kYmZfb3V0KHAsICJkYXRhX2RpcmVjdGlvbiIsICIweCUwNHgiLCByLT51LmZjcC5kYXRhX2Rpcik7Ci0JCXpmY3BfZGJmX291dChwLCAic2NzaV9jbW5kIiwgIjB4JTBMeCIsIHItPnUuZmNwLmNtbmQpOwotCQkqcCArPSBzcHJpbnRmKCpwLCAiXG4iKTsKLQkJYnJlYWs7Ci0KLQljYXNlIEZTRl9RVENCX09QRU5fUE9SVF9XSVRIX0RJRDoKLQljYXNlIEZTRl9RVENCX0NMT1NFX1BPUlQ6Ci0JY2FzZSBGU0ZfUVRDQl9DTE9TRV9QSFlTSUNBTF9QT1JUOgotCQl6ZmNwX2RiZl9vdXQocCwgInd3cG4iLCAiMHglMDE2THgiLCByLT51LnBvcnQud3dwbik7Ci0JCXpmY3BfZGJmX291dChwLCAiZF9pZCIsICIweCUwNngiLCByLT51LnBvcnQuZF9pZCk7Ci0JCXpmY3BfZGJmX291dChwLCAicG9ydF9oYW5kbGUiLCAiMHglMDh4Iiwgci0+dS5wb3J0LnBvcnRfaGFuZGxlKTsKLQkJYnJlYWs7Ci0KLQljYXNlIEZTRl9RVENCX09QRU5fTFVOOgotCWNhc2UgRlNGX1FUQ0JfQ0xPU0VfTFVOOgotCQl6ZmNwX2RiZl9vdXQocCwgInd3cG4iLCAiMHglMDE2THgiLCByLT51LnVuaXQud3dwbik7Ci0JCXpmY3BfZGJmX291dChwLCAiZmNwX2x1biIsICIweCUwMTZMeCIsIHItPnUudW5pdC5mY3BfbHVuKTsKLQkJemZjcF9kYmZfb3V0KHAsICJwb3J0X2hhbmRsZSIsICIweCUwOHgiLCByLT51LnVuaXQucG9ydF9oYW5kbGUpOwotCQl6ZmNwX2RiZl9vdXQocCwgImx1bl9oYW5kbGUiLCAiMHglMDh4Iiwgci0+dS51bml0Lmx1bl9oYW5kbGUpOwotCQlicmVhazsKLQotCWNhc2UgRlNGX1FUQ0JfU0VORF9FTFM6Ci0JCXpmY3BfZGJmX291dChwLCAiZF9pZCIsICIweCUwNngiLCByLT51LmVscy5kX2lkKTsKLQkJYnJlYWs7Ci0KLQljYXNlIEZTRl9RVENCX0FCT1JUX0ZDUF9DTU5EOgotCWNhc2UgRlNGX1FUQ0JfU0VORF9HRU5FUklDOgotCWNhc2UgRlNGX1FUQ0JfRVhDSEFOR0VfQ09ORklHX0RBVEE6Ci0JY2FzZSBGU0ZfUVRDQl9FWENIQU5HRV9QT1JUX0RBVEE6Ci0JY2FzZSBGU0ZfUVRDQl9ET1dOTE9BRF9DT05UUk9MX0ZJTEU6Ci0JY2FzZSBGU0ZfUVRDQl9VUExPQURfQ09OVFJPTF9GSUxFOgotCQlicmVhazsKKwlyZWMtPmFkYXB0ZXJfc3RhdHVzID0gYXRvbWljX3JlYWQoJmFkYXB0ZXItPnN0YXR1cyk7CisJaWYgKHBvcnQpIHsKKwkJcmVjLT5wb3J0X3N0YXR1cyA9IGF0b21pY19yZWFkKCZwb3J0LT5zdGF0dXMpOworCQlyZWMtPnd3cG4gPSBwb3J0LT53d3BuOworCQlyZWMtPmRfaWQgPSBwb3J0LT5kX2lkOworCX0KKwlpZiAoc2RldikgeworCQlyZWMtPmx1bl9zdGF0dXMgPSBhdG9taWNfcmVhZCgmc2Rldl90b196ZmNwKHNkZXYpLT5zdGF0dXMpOworCQlyZWMtPmx1biA9IHpmY3Bfc2NzaV9kZXZfbHVuKHNkZXYpOwogCX0KIH0KIAotc3RhdGljIHZvaWQgemZjcF9kYmZfaGJhX3ZpZXdfc3RhdHVzKGNoYXIgKipwLAotCQkJCSAgICAgc3RydWN0IHpmY3BfZGJmX2hiYV9yZWNvcmRfc3RhdHVzICpyKQotewotCXpmY3BfZGJmX291dChwLCAiZmFpbGVkIiwgIjB4JTAyeCIsIHItPmZhaWxlZCk7Ci0JemZjcF9kYmZfb3V0KHAsICJzdGF0dXNfdHlwZSIsICIweCUwOHgiLCByLT5zdGF0dXNfdHlwZSk7Ci0JemZjcF9kYmZfb3V0KHAsICJzdGF0dXNfc3VidHlwZSIsICIweCUwOHgiLCByLT5zdGF0dXNfc3VidHlwZSk7Ci0JemZjcF9kYmZfb3V0ZChwLCAicXVldWVfZGVzaWduYXRvciIsIChjaGFyICopJnItPnF1ZXVlX2Rlc2lnbmF0b3IsCi0JCSAgICAgIHNpemVvZihzdHJ1Y3QgZnNmX3F1ZXVlX2Rlc2lnbmF0b3IpLCAwLAotCQkgICAgICBzaXplb2Yoc3RydWN0IGZzZl9xdWV1ZV9kZXNpZ25hdG9yKSk7Ci0JemZjcF9kYmZfb3V0ZChwLCAicGF5bG9hZCIsIChjaGFyICopJnItPnBheWxvYWQsIHItPnBheWxvYWRfc2l6ZSwgMCwKLQkJICAgICAgci0+cGF5bG9hZF9zaXplKTsKLX0KLQotc3RhdGljIHZvaWQgemZjcF9kYmZfaGJhX3ZpZXdfcWRpbyhjaGFyICoqcCwgc3RydWN0IHpmY3BfZGJmX2hiYV9yZWNvcmRfcWRpbyAqcikKLXsKLQl6ZmNwX2RiZl9vdXQocCwgInFkaW9fZXJyb3IiLCAiMHglMDh4Iiwgci0+cWRpb19lcnJvcik7Ci0JemZjcF9kYmZfb3V0KHAsICJzYmFsX2luZGV4IiwgIjB4JTAyeCIsIHItPnNiYWxfaW5kZXgpOwotCXpmY3BfZGJmX291dChwLCAic2JhbF9jb3VudCIsICIweCUwMngiLCByLT5zYmFsX2NvdW50KTsKLX0KLQotc3RhdGljIHZvaWQgemZjcF9kYmZfaGJhX3ZpZXdfYmVycihjaGFyICoqcCwgc3RydWN0IGZzZl9iaXRfZXJyb3JfcGF5bG9hZCAqcikKLXsKLQl6ZmNwX2RiZl9vdXQocCwgImxpbmtfZmFpbHVyZXMiLCAiJWQiLCByLT5saW5rX2ZhaWx1cmVfZXJyb3JfY291bnQpOwotCXpmY3BfZGJmX291dChwLCAibG9zc19vZl9zeW5jX2VyciIsICIlZCIsIHItPmxvc3Nfb2Zfc3luY19lcnJvcl9jb3VudCk7Ci0JemZjcF9kYmZfb3V0KHAsICJsb3NzX29mX3NpZ19lcnIiLCAiJWQiLCByLT5sb3NzX29mX3NpZ25hbF9lcnJvcl9jb3VudCk7Ci0JemZjcF9kYmZfb3V0KHAsICJwcmltX3NlcV9lcnIiLCAiJWQiLAotCQkgICAgIHItPnByaW1pdGl2ZV9zZXF1ZW5jZV9lcnJvcl9jb3VudCk7Ci0JemZjcF9kYmZfb3V0KHAsICJpbnZhbF90cmFuc193b3JkX2VyciIsICIlZCIsCi0JCSAgICAgci0+aW52YWxpZF90cmFuc21pc3Npb25fd29yZF9lcnJvcl9jb3VudCk7Ci0JemZjcF9kYmZfb3V0KHAsICJDUkNfZXJyb3JzIiwgIiVkIiwgci0+Y3JjX2Vycm9yX2NvdW50KTsKLQl6ZmNwX2RiZl9vdXQocCwgInByaW1fc2VxX2V2ZW50X3RvIiwgIiVkIiwKLQkJICAgICByLT5wcmltaXRpdmVfc2VxdWVuY2VfZXZlbnRfdGltZW91dF9jb3VudCk7Ci0JemZjcF9kYmZfb3V0KHAsICJlbGFzdF9idWZfb3ZlcnJ1bl9lcnIiLCAiJWQiLAotCQkgICAgIHItPmVsYXN0aWNfYnVmZmVyX292ZXJydW5fZXJyb3JfY291bnQpOwotCXpmY3BfZGJmX291dChwLCAiYWR2X3JlY19idWYyYnVmX2NyZWQiLCAiJWQiLAotCQkgICAgIHItPmFkdmVydGlzZWRfcmVjZWl2ZV9iMmJfY3JlZGl0KTsKLQl6ZmNwX2RiZl9vdXQocCwgImN1cnJfcmVjX2J1ZjJidWZfY3JlZCIsICIlZCIsCi0JCSAgICAgci0+Y3VycmVudF9yZWNlaXZlX2IyYl9jcmVkaXQpOwotCXpmY3BfZGJmX291dChwLCAiYWR2X3RyYW5zX2J1ZjJidWZfY3JlZCIsICIlZCIsCi0JCSAgICAgci0+YWR2ZXJ0aXNlZF90cmFuc21pdF9iMmJfY3JlZGl0KTsKLQl6ZmNwX2RiZl9vdXQocCwgImN1cnJfdHJhbnNfYnVmMmJ1Zl9jcmVkIiwgIiVkIiwKLQkJICAgICByLT5jdXJyZW50X3RyYW5zbWl0X2IyYl9jcmVkaXQpOwotfQotCi1zdGF0aWMgaW50IHpmY3BfZGJmX2hiYV92aWV3X2Zvcm1hdChkZWJ1Z19pbmZvX3QgKmlkLCBzdHJ1Y3QgZGVidWdfdmlldyAqdmlldywKLQkJCQkgICAgY2hhciAqb3V0X2J1ZiwgY29uc3QgY2hhciAqaW5fYnVmKQotewotCXN0cnVjdCB6ZmNwX2RiZl9oYmFfcmVjb3JkICpyID0gKHN0cnVjdCB6ZmNwX2RiZl9oYmFfcmVjb3JkICopaW5fYnVmOwotCWNoYXIgKnAgPSBvdXRfYnVmOwotCi0JaWYgKHN0cm5jbXAoci0+dGFnLCAiZHVtcCIsIFpGQ1BfREJGX1RBR19TSVpFKSA9PSAwKQotCQlyZXR1cm4gMDsKLQotCXpmY3BfZGJmX3RhZygmcCwgInRhZyIsIHItPnRhZyk7Ci0JaWYgKGlzYWxwaGEoci0+dGFnMlswXSkpCi0JCXpmY3BfZGJmX3RhZygmcCwgInRhZzIiLCByLT50YWcyKTsKLQotCWlmIChzdHJuY21wKHItPnRhZywgInJlc3AiLCBaRkNQX0RCRl9UQUdfU0laRSkgPT0gMCkKLQkJemZjcF9kYmZfaGJhX3ZpZXdfcmVzcG9uc2UoJnAsICZyLT51LnJlc3BvbnNlKTsKLQllbHNlIGlmIChzdHJuY21wKHItPnRhZywgInN0YXQiLCBaRkNQX0RCRl9UQUdfU0laRSkgPT0gMCkKLQkJemZjcF9kYmZfaGJhX3ZpZXdfc3RhdHVzKCZwLCAmci0+dS5zdGF0dXMpOwotCWVsc2UgaWYgKHN0cm5jbXAoci0+dGFnLCAicWRpbyIsIFpGQ1BfREJGX1RBR19TSVpFKSA9PSAwKQotCQl6ZmNwX2RiZl9oYmFfdmlld19xZGlvKCZwLCAmci0+dS5xZGlvKTsKLQllbHNlIGlmIChzdHJuY21wKHItPnRhZywgImJlcnIiLCBaRkNQX0RCRl9UQUdfU0laRSkgPT0gMCkKLQkJemZjcF9kYmZfaGJhX3ZpZXdfYmVycigmcCwgJnItPnUuYmVycik7Ci0KLQlpZiAoc3RybmNtcChyLT50YWcsICJyZXNwIiwgWkZDUF9EQkZfVEFHX1NJWkUpICE9IDApCi0JCXAgKz0gc3ByaW50ZihwLCAiXG4iKTsKLQlyZXR1cm4gcCAtIG91dF9idWY7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZGVidWdfdmlldyB6ZmNwX2RiZl9oYmFfdmlldyA9IHsKLQkubmFtZSA9ICJzdHJ1Y3R1cmVkIiwKLQkuaGVhZGVyX3Byb2MgPSB6ZmNwX2RiZl92aWV3X2hlYWRlciwKLQkuZm9ybWF0X3Byb2MgPSB6ZmNwX2RiZl9oYmFfdmlld19mb3JtYXQsCi19OwotCi1zdGF0aWMgY29uc3QgY2hhciAqemZjcF9kYmZfcmVjX3RhZ3NbXSA9IHsKLQlbWkZDUF9SRUNfREJGX0lEX1RIUkVBRF0gPSAidGhyZWFkIiwKLQlbWkZDUF9SRUNfREJGX0lEX1RBUkdFVF0gPSAidGFyZ2V0IiwKLQlbWkZDUF9SRUNfREJGX0lEX1RSSUdHRVJdID0gInRyaWdnZXIiLAotCVtaRkNQX1JFQ19EQkZfSURfQUNUSU9OXSA9ICJhY3Rpb24iLAotfTsKLQotc3RhdGljIGludCB6ZmNwX2RiZl9yZWNfdmlld19mb3JtYXQoZGVidWdfaW5mb190ICppZCwgc3RydWN0IGRlYnVnX3ZpZXcgKnZpZXcsCi0JCQkJICAgIGNoYXIgKmJ1ZiwgY29uc3QgY2hhciAqX3JlYykKLXsKLQlzdHJ1Y3QgemZjcF9kYmZfcmVjX3JlY29yZCAqciA9IChzdHJ1Y3QgemZjcF9kYmZfcmVjX3JlY29yZCAqKV9yZWM7Ci0JY2hhciAqcCA9IGJ1ZjsKLQljaGFyIGhpbnRbWkZDUF9EQkZfSURfU0laRSArIDFdOwotCi0JbWVtY3B5KGhpbnQsIHItPmlkMiwgWkZDUF9EQkZfSURfU0laRSk7Ci0JaGludFtaRkNQX0RCRl9JRF9TSVpFXSA9IDA7Ci0JemZjcF9kYmZfb3V0cygmcCwgInRhZyIsIHpmY3BfZGJmX3JlY190YWdzW3ItPmlkXSk7Ci0JemZjcF9kYmZfb3V0cygmcCwgImhpbnQiLCBoaW50KTsKLQlzd2l0Y2ggKHItPmlkKSB7Ci0JY2FzZSBaRkNQX1JFQ19EQkZfSURfVEhSRUFEOgotCQl6ZmNwX2RiZl9vdXQoJnAsICJ0b3RhbCIsICIlZCIsIHItPnUudGhyZWFkLnRvdGFsKTsKLQkJemZjcF9kYmZfb3V0KCZwLCAicmVhZHkiLCAiJWQiLCByLT51LnRocmVhZC5yZWFkeSk7Ci0JCXpmY3BfZGJmX291dCgmcCwgInJ1bm5pbmciLCAiJWQiLCByLT51LnRocmVhZC5ydW5uaW5nKTsKLQkJYnJlYWs7Ci0JY2FzZSBaRkNQX1JFQ19EQkZfSURfVEFSR0VUOgotCQl6ZmNwX2RiZl9vdXQoJnAsICJyZWZlcmVuY2UiLCAiMHglMDE2THgiLCByLT51LnRhcmdldC5yZWYpOwotCQl6ZmNwX2RiZl9vdXQoJnAsICJzdGF0dXMiLCAiMHglMDh4Iiwgci0+dS50YXJnZXQuc3RhdHVzKTsKLQkJemZjcF9kYmZfb3V0KCZwLCAiZXJwX2NvdW50IiwgIiVkIiwgci0+dS50YXJnZXQuZXJwX2NvdW50KTsKLQkJemZjcF9kYmZfb3V0KCZwLCAiZF9pZCIsICIweCUwNngiLCByLT51LnRhcmdldC5kX2lkKTsKLQkJemZjcF9kYmZfb3V0KCZwLCAid3dwbiIsICIweCUwMTZMeCIsIHItPnUudGFyZ2V0Lnd3cG4pOwotCQl6ZmNwX2RiZl9vdXQoJnAsICJmY3BfbHVuIiwgIjB4JTAxNkx4Iiwgci0+dS50YXJnZXQuZmNwX2x1bik7Ci0JCWJyZWFrOwotCWNhc2UgWkZDUF9SRUNfREJGX0lEX1RSSUdHRVI6Ci0JCXpmY3BfZGJmX291dCgmcCwgInJlZmVyZW5jZSIsICIweCUwMTZMeCIsIHItPnUudHJpZ2dlci5yZWYpOwotCQl6ZmNwX2RiZl9vdXQoJnAsICJlcnBfYWN0aW9uIiwgIjB4JTAxNkx4Iiwgci0+dS50cmlnZ2VyLmFjdGlvbik7Ci0JCXpmY3BfZGJmX291dCgmcCwgInJlcXVlc3RlZCIsICIlZCIsIHItPnUudHJpZ2dlci53YW50KTsKLQkJemZjcF9kYmZfb3V0KCZwLCAiZXhlY3V0ZWQiLCAiJWQiLCByLT51LnRyaWdnZXIubmVlZCk7Ci0JCXpmY3BfZGJmX291dCgmcCwgInd3cG4iLCAiMHglMDE2THgiLCByLT51LnRyaWdnZXIud3dwbik7Ci0JCXpmY3BfZGJmX291dCgmcCwgImZjcF9sdW4iLCAiMHglMDE2THgiLCByLT51LnRyaWdnZXIuZmNwX2x1bik7Ci0JCXpmY3BfZGJmX291dCgmcCwgImFkYXB0ZXJfc3RhdHVzIiwgIjB4JTA4eCIsIHItPnUudHJpZ2dlci5hcyk7Ci0JCXpmY3BfZGJmX291dCgmcCwgInBvcnRfc3RhdHVzIiwgIjB4JTA4eCIsIHItPnUudHJpZ2dlci5wcyk7Ci0JCXpmY3BfZGJmX291dCgmcCwgImx1bl9zdGF0dXMiLCAiMHglMDh4Iiwgci0+dS50cmlnZ2VyLmxzKTsKLQkJYnJlYWs7Ci0JY2FzZSBaRkNQX1JFQ19EQkZfSURfQUNUSU9OOgotCQl6ZmNwX2RiZl9vdXQoJnAsICJlcnBfYWN0aW9uIiwgIjB4JTAxNkx4Iiwgci0+dS5hY3Rpb24uYWN0aW9uKTsKLQkJemZjcF9kYmZfb3V0KCZwLCAiZnNmX3JlcSIsICIweCUwMTZMeCIsIHItPnUuYWN0aW9uLmZzZl9yZXEpOwotCQl6ZmNwX2RiZl9vdXQoJnAsICJzdGF0dXMiLCAiMHglMDhMeCIsIHItPnUuYWN0aW9uLnN0YXR1cyk7Ci0JCXpmY3BfZGJmX291dCgmcCwgInN0ZXAiLCAiMHglMDhMeCIsIHItPnUuYWN0aW9uLnN0ZXApOwotCQlicmVhazsKLQl9Ci0JcCArPSBzcHJpbnRmKHAsICJcbiIpOwotCXJldHVybiBwIC0gYnVmOwotfQotCi1zdGF0aWMgc3RydWN0IGRlYnVnX3ZpZXcgemZjcF9kYmZfcmVjX3ZpZXcgPSB7Ci0JLm5hbWUgPSAic3RydWN0dXJlZCIsCi0JLmhlYWRlcl9wcm9jID0gemZjcF9kYmZfdmlld19oZWFkZXIsCi0JLmZvcm1hdF9wcm9jID0gemZjcF9kYmZfcmVjX3ZpZXdfZm9ybWF0LAotfTsKLQogLyoqCi0gKiB6ZmNwX2RiZl9yZWNfdGhyZWFkIC0gdHJhY2UgZXZlbnQgcmVsYXRlZCB0byByZWNvdmVyeSB0aHJlYWQgb3BlcmF0aW9uCi0gKiBAaWQyOiBpZGVudGlmaWVyIGZvciBldmVudAotICogQGRiZjogcmVmZXJlbmNlIHRvIGRiZiBzdHJ1Y3R1cmUKLSAqIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IHRoZSBjYWxsZXIgaXMgaG9sZGluZyBlcnBfbG9jay4KKyAqIHpmY3BfZGJmX3JlY190cmlnIC0gdHJhY2UgZXZlbnQgcmVsYXRlZCB0byB0cmlnZ2VyZWQgcmVjb3ZlcnkKKyAqIEB0YWc6IGlkZW50aWZpZXIgZm9yIGV2ZW50CisgKiBAYWRhcHRlcjogYWRhcHRlciBvbiB3aGljaCB0aGUgZXJwX2FjdGlvbiBzaG91bGQgcnVuCisgKiBAcG9ydDogcmVtb3RlIHBvcnQgaW52b2x2ZWQgaW4gdGhlIGVycF9hY3Rpb24KKyAqIEBzZGV2OiBzY3NpIGRldmljZSBpbnZvbHZlZCBpbiB0aGUgZXJwX2FjdGlvbgorICogQHdhbnQ6IHdhbnRlZCBlcnBfYWN0aW9uCisgKiBAbmVlZDogcmVxdWlyZWQgZXJwX2FjdGlvbgorICoKKyAqIFRoZSBhZGFwdGVyLT5lcnBfbG9jayBoYXMgdG8gYmUgaGVsZC4KICAqLwotdm9pZCB6ZmNwX2RiZl9yZWNfdGhyZWFkKGNoYXIgKmlkMiwgc3RydWN0IHpmY3BfZGJmICpkYmYpCit2b2lkIHpmY3BfZGJmX3JlY190cmlnKGNoYXIgKnRhZywgc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciwKKwkJICAgICAgIHN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQsIHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwKKwkJICAgICAgIHU4IHdhbnQsIHU4IG5lZWQpCiB7Ci0Jc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IGRiZi0+YWRhcHRlcjsKLQlzdHJ1Y3QgemZjcF9kYmZfcmVjX3JlY29yZCAqciA9ICZkYmYtPnJlY19idWY7Ci0JdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CisJc3RydWN0IHpmY3BfZGJmICpkYmYgPSBhZGFwdGVyLT5kYmY7CisJc3RydWN0IHpmY3BfZGJmX3JlYyAqcmVjID0gJmRiZi0+cmVjX2J1ZjsKIAlzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeTsKLQl1bnNpZ25lZCByZWFkeSA9IDAsIHJ1bm5pbmcgPSAwLCB0b3RhbDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRiZi0+cmVjX2xvY2ssIGZsYWdzKTsKKwltZW1zZXQocmVjLCAwLCBzaXplb2YoKnJlYykpOworCisJcmVjLT5pZCA9IFpGQ1BfREJGX1JFQ19UUklHOworCW1lbWNweShyZWMtPnRhZywgdGFnLCBaRkNQX0RCRl9UQUdfTEVOKTsKKwl6ZmNwX2RiZl9zZXRfY29tbW9uKHJlYywgYWRhcHRlciwgcG9ydCwgc2Rldik7CiAKIAlsaXN0X2Zvcl9lYWNoKGVudHJ5LCAmYWRhcHRlci0+ZXJwX3JlYWR5X2hlYWQpCi0JCXJlYWR5Kys7CisJCXJlYy0+dS50cmlnLnJlYWR5Kys7CisKIAlsaXN0X2Zvcl9lYWNoKGVudHJ5LCAmYWRhcHRlci0+ZXJwX3J1bm5pbmdfaGVhZCkKLQkJcnVubmluZysrOwotCXRvdGFsID0gYWRhcHRlci0+ZXJwX3RvdGFsX2NvdW50OworCQlyZWMtPnUudHJpZy5ydW5uaW5nKys7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGJmLT5yZWNfbG9jaywgZmxhZ3MpOwotCW1lbXNldChyLCAwLCBzaXplb2YoKnIpKTsKLQlyLT5pZCA9IFpGQ1BfUkVDX0RCRl9JRF9USFJFQUQ7Ci0JbWVtY3B5KHItPmlkMiwgaWQyLCBaRkNQX0RCRl9JRF9TSVpFKTsKLQlyLT51LnRocmVhZC50b3RhbCA9IHRvdGFsOwotCXItPnUudGhyZWFkLnJlYWR5ID0gcmVhZHk7Ci0Jci0+dS50aHJlYWQucnVubmluZyA9IHJ1bm5pbmc7Ci0JZGVidWdfZXZlbnQoZGJmLT5yZWMsIDYsIHIsIHNpemVvZigqcikpOworCXJlYy0+dS50cmlnLndhbnQgPSB3YW50OworCXJlYy0+dS50cmlnLm5lZWQgPSBuZWVkOworCisJZGVidWdfZXZlbnQoZGJmLT5yZWMsIDEsIHJlYywgc2l6ZW9mKCpyZWMpKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkYmYtPnJlY19sb2NrLCBmbGFncyk7CiB9CiAKKwogLyoqCi0gKiB6ZmNwX2RiZl9yZWNfdGhyZWFkIC0gdHJhY2UgZXZlbnQgcmVsYXRlZCB0byByZWNvdmVyeSB0aHJlYWQgb3BlcmF0aW9uCi0gKiBAaWQyOiBpZGVudGlmaWVyIGZvciBldmVudAotICogQGFkYXB0ZXI6IGFkYXB0ZXIKLSAqIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IHRoZSBjYWxsZXIgZG9lcyBub3QgaG9sZCBlcnBfbG9jay4KKyAqIHpmY3BfZGJmX3JlY19ydW4gLSB0cmFjZSBldmVudCByZWxhdGVkIHRvIHJ1bm5pbmcgcmVjb3ZlcnkKKyAqIEB0YWc6IGlkZW50aWZpZXIgZm9yIGV2ZW50CisgKiBAZXJwOiBlcnBfYWN0aW9uIHJ1bm5pbmcKICAqLwotdm9pZCB6ZmNwX2RiZl9yZWNfdGhyZWFkX2xvY2soY2hhciAqaWQyLCBzdHJ1Y3QgemZjcF9kYmYgKmRiZikKK3ZvaWQgemZjcF9kYmZfcmVjX3J1bihjaGFyICp0YWcsIHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKmVycCkKIHsKLQlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gZGJmLT5hZGFwdGVyOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlyZWFkX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+ZXJwX2xvY2ssIGZsYWdzKTsKLQl6ZmNwX2RiZl9yZWNfdGhyZWFkKGlkMiwgZGJmKTsKLQlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5lcnBfbG9jaywgZmxhZ3MpOwotfQotCi1zdGF0aWMgdm9pZCB6ZmNwX2RiZl9yZWNfdGFyZ2V0KGNoYXIgKmlkMiwgdm9pZCAqcmVmLCBzdHJ1Y3QgemZjcF9kYmYgKmRiZiwKLQkJCQlhdG9taWNfdCAqc3RhdHVzLCBhdG9taWNfdCAqZXJwX2NvdW50LCB1NjQgd3dwbiwKLQkJCQl1MzIgZF9pZCwgdTY0IGZjcF9sdW4pCi17Ci0Jc3RydWN0IHpmY3BfZGJmX3JlY19yZWNvcmQgKnIgPSAmZGJmLT5yZWNfYnVmOworCXN0cnVjdCB6ZmNwX2RiZiAqZGJmID0gZXJwLT5hZGFwdGVyLT5kYmY7CisJc3RydWN0IHpmY3BfZGJmX3JlYyAqcmVjID0gJmRiZi0+cmVjX2J1ZjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRiZi0+cmVjX2xvY2ssIGZsYWdzKTsKLQltZW1zZXQociwgMCwgc2l6ZW9mKCpyKSk7Ci0Jci0+aWQgPSBaRkNQX1JFQ19EQkZfSURfVEFSR0VUOwotCW1lbWNweShyLT5pZDIsIGlkMiwgWkZDUF9EQkZfSURfU0laRSk7Ci0Jci0+dS50YXJnZXQucmVmID0gKHVuc2lnbmVkIGxvbmcpcmVmOwotCXItPnUudGFyZ2V0LnN0YXR1cyA9IGF0b21pY19yZWFkKHN0YXR1cyk7Ci0Jci0+dS50YXJnZXQud3dwbiA9IHd3cG47Ci0Jci0+dS50YXJnZXQuZF9pZCA9IGRfaWQ7Ci0Jci0+dS50YXJnZXQuZmNwX2x1biA9IGZjcF9sdW47Ci0Jci0+dS50YXJnZXQuZXJwX2NvdW50ID0gYXRvbWljX3JlYWQoZXJwX2NvdW50KTsKLQlkZWJ1Z19ldmVudChkYmYtPnJlYywgMywgciwgc2l6ZW9mKCpyKSk7CisJbWVtc2V0KHJlYywgMCwgc2l6ZW9mKCpyZWMpKTsKKworCXJlYy0+aWQgPSBaRkNQX0RCRl9SRUNfUlVOOworCW1lbWNweShyZWMtPnRhZywgdGFnLCBaRkNQX0RCRl9UQUdfTEVOKTsKKwl6ZmNwX2RiZl9zZXRfY29tbW9uKHJlYywgZXJwLT5hZGFwdGVyLCBlcnAtPnBvcnQsIGVycC0+c2Rldik7CisKKwlyZWMtPnUucnVuLmZzZl9yZXFfaWQgPSBlcnAtPmZzZl9yZXFfaWQ7CisJcmVjLT51LnJ1bi5yZWNfc3RhdHVzID0gZXJwLT5zdGF0dXM7CisJcmVjLT51LnJ1bi5yZWNfc3RlcCA9IGVycC0+c3RlcDsKKwlyZWMtPnUucnVuLnJlY19hY3Rpb24gPSBlcnAtPmFjdGlvbjsKKworCWlmIChlcnAtPnNkZXYpCisJCXJlYy0+dS5ydW4ucmVjX2NvdW50ID0KKwkJCWF0b21pY19yZWFkKCZzZGV2X3RvX3pmY3AoZXJwLT5zZGV2KS0+ZXJwX2NvdW50ZXIpOworCWVsc2UgaWYgKGVycC0+cG9ydCkKKwkJcmVjLT51LnJ1bi5yZWNfY291bnQgPSBhdG9taWNfcmVhZCgmZXJwLT5wb3J0LT5lcnBfY291bnRlcik7CisJZWxzZQorCQlyZWMtPnUucnVuLnJlY19jb3VudCA9IGF0b21pY19yZWFkKCZlcnAtPmFkYXB0ZXItPmVycF9jb3VudGVyKTsKKworCWRlYnVnX2V2ZW50KGRiZi0+cmVjLCAxLCByZWMsIHNpemVvZigqcmVjKSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGJmLT5yZWNfbG9jaywgZmxhZ3MpOwogfQogCi0vKioKLSAqIHpmY3BfZGJmX3JlY19hZGFwdGVyIC0gdHJhY2UgZXZlbnQgZm9yIGFkYXB0ZXIgc3RhdGUgY2hhbmdlCi0gKiBAaWQ6IGlkZW50aWZpZXIgZm9yIHRyaWdnZXIgb2Ygc3RhdGUgY2hhbmdlCi0gKiBAcmVmOiBhZGRpdGlvbmFsIHJlZmVyZW5jZSAoZS5nLiByZXF1ZXN0KQotICogQGRiZjogcmVmZXJlbmNlIHRvIGRiZiBzdHJ1Y3R1cmUKLSAqLwotdm9pZCB6ZmNwX2RiZl9yZWNfYWRhcHRlcihjaGFyICppZCwgdm9pZCAqcmVmLCBzdHJ1Y3QgemZjcF9kYmYgKmRiZikKK3N0YXRpYyBpbmxpbmUKK3ZvaWQgemZjcF9kYmZfc2FuKGNoYXIgKnRhZywgc3RydWN0IHpmY3BfZGJmICpkYmYsIHZvaWQgKmRhdGEsIHU4IGlkLCB1MTYgbGVuLAorCQkgIHU2NCByZXFfaWQsIHUzMiBkX2lkKQogewotCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBkYmYtPmFkYXB0ZXI7Ci0KLQl6ZmNwX2RiZl9yZWNfdGFyZ2V0KGlkLCByZWYsIGRiZiwgJmFkYXB0ZXItPnN0YXR1cywKLQkJCSAgICAmYWRhcHRlci0+ZXJwX2NvdW50ZXIsIDAsIDAsCi0JCQkgICAgWkZDUF9EQkZfSU5WQUxJRF9MVU4pOwotfQotCi0vKioKLSAqIHpmY3BfZGJmX3JlY19wb3J0IC0gdHJhY2UgZXZlbnQgZm9yIHBvcnQgc3RhdGUgY2hhbmdlCi0gKiBAaWQ6IGlkZW50aWZpZXIgZm9yIHRyaWdnZXIgb2Ygc3RhdGUgY2hhbmdlCi0gKiBAcmVmOiBhZGRpdGlvbmFsIHJlZmVyZW5jZSAoZS5nLiByZXF1ZXN0KQotICogQHBvcnQ6IHBvcnQKLSAqLwotdm9pZCB6ZmNwX2RiZl9yZWNfcG9ydChjaGFyICppZCwgdm9pZCAqcmVmLCBzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0KQotewotCXN0cnVjdCB6ZmNwX2RiZiAqZGJmID0gcG9ydC0+YWRhcHRlci0+ZGJmOwotCi0JemZjcF9kYmZfcmVjX3RhcmdldChpZCwgcmVmLCBkYmYsICZwb3J0LT5zdGF0dXMsCi0JCQkgICAgJnBvcnQtPmVycF9jb3VudGVyLCBwb3J0LT53d3BuLCBwb3J0LT5kX2lkLAotCQkJICAgIFpGQ1BfREJGX0lOVkFMSURfTFVOKTsKLX0KLQotLyoqCi0gKiB6ZmNwX2RiZl9yZWNfbHVuIC0gdHJhY2UgZXZlbnQgZm9yIExVTiBzdGF0ZSBjaGFuZ2UKLSAqIEBpZDogaWRlbnRpZmllciBmb3IgdHJpZ2dlciBvZiBzdGF0ZSBjaGFuZ2UKLSAqIEByZWY6IGFkZGl0aW9uYWwgcmVmZXJlbmNlIChlLmcuIHJlcXVlc3QpCi0gKiBAc2RldjogU0NTSSBkZXZpY2UKLSAqLwotdm9pZCB6ZmNwX2RiZl9yZWNfbHVuKGNoYXIgKmlkLCB2b2lkICpyZWYsIHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKLXsKLQlzdHJ1Y3QgemZjcF9zY3NpX2RldiAqemZjcF9zZGV2ID0gc2Rldl90b196ZmNwKHNkZXYpOwotCXN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQgPSB6ZmNwX3NkZXYtPnBvcnQ7Ci0Jc3RydWN0IHpmY3BfZGJmICpkYmYgPSBwb3J0LT5hZGFwdGVyLT5kYmY7Ci0KLQl6ZmNwX2RiZl9yZWNfdGFyZ2V0KGlkLCByZWYsIGRiZiwgJnpmY3Bfc2Rldi0+c3RhdHVzLAotCQkJICAgICZ6ZmNwX3NkZXYtPmVycF9jb3VudGVyLCBwb3J0LT53d3BuLCBwb3J0LT5kX2lkLAotCQkJICAgIHpmY3Bfc2NzaV9kZXZfbHVuKHNkZXYpKTsKLX0KLQotLyoqCi0gKiB6ZmNwX2RiZl9yZWNfdHJpZ2dlciAtIHRyYWNlIGV2ZW50IGZvciB0cmlnZ2VyZWQgZXJyb3IgcmVjb3ZlcnkKLSAqIEBpZDI6IGlkZW50aWZpZXIgZm9yIGVycm9yIHJlY292ZXJ5IHRyaWdnZXIKLSAqIEByZWY6IGFkZGl0aW9uYWwgcmVmZXJlbmNlIChlLmcuIHJlcXVlc3QpCi0gKiBAd2FudDogb3JpZ2luYWxseSByZXF1ZXN0ZWQgZXJyb3IgcmVjb3ZlcnkgYWN0aW9uCi0gKiBAbmVlZDogZXJyb3IgcmVjb3ZlcnkgYWN0aW9uIGFjdHVhbGx5IGluaXRpYXRlZAotICogQGFjdGlvbjogYWRkcmVzcyBvZiBlcnJvciByZWNvdmVyeSBhY3Rpb24gc3RydWN0Ci0gKiBAYWRhcHRlcjogYWRhcHRlcgotICogQHBvcnQ6IHBvcnQKLSAqIEBzZGV2OiBTQ1NJIGRldmljZQotICovCi12b2lkIHpmY3BfZGJmX3JlY190cmlnZ2VyKGNoYXIgKmlkMiwgdm9pZCAqcmVmLCB1OCB3YW50LCB1OCBuZWVkLCB2b2lkICphY3Rpb24sCi0JCQkgIHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQsCi0JCQkgIHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKLXsKLQlzdHJ1Y3QgemZjcF9kYmYgKmRiZiA9IGFkYXB0ZXItPmRiZjsKLQlzdHJ1Y3QgemZjcF9kYmZfcmVjX3JlY29yZCAqciA9ICZkYmYtPnJlY19idWY7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZkYmYtPnJlY19sb2NrLCBmbGFncyk7Ci0JbWVtc2V0KHIsIDAsIHNpemVvZigqcikpOwotCXItPmlkID0gWkZDUF9SRUNfREJGX0lEX1RSSUdHRVI7Ci0JbWVtY3B5KHItPmlkMiwgaWQyLCBaRkNQX0RCRl9JRF9TSVpFKTsKLQlyLT51LnRyaWdnZXIucmVmID0gKHVuc2lnbmVkIGxvbmcpcmVmOwotCXItPnUudHJpZ2dlci53YW50ID0gd2FudDsKLQlyLT51LnRyaWdnZXIubmVlZCA9IG5lZWQ7Ci0Jci0+dS50cmlnZ2VyLmFjdGlvbiA9ICh1bnNpZ25lZCBsb25nKWFjdGlvbjsKLQlyLT51LnRyaWdnZXIuYXMgPSBhdG9taWNfcmVhZCgmYWRhcHRlci0+c3RhdHVzKTsKLQlpZiAocG9ydCkgewotCQlyLT51LnRyaWdnZXIucHMgPSBhdG9taWNfcmVhZCgmcG9ydC0+c3RhdHVzKTsKLQkJci0+dS50cmlnZ2VyLnd3cG4gPSBwb3J0LT53d3BuOwotCX0KLQlpZiAoc2RldikKLQkJci0+dS50cmlnZ2VyLmxzID0gYXRvbWljX3JlYWQoJnNkZXZfdG9femZjcChzZGV2KS0+c3RhdHVzKTsKLQlyLT51LnRyaWdnZXIuZmNwX2x1biA9IHNkZXYgPyB6ZmNwX3Njc2lfZGV2X2x1bihzZGV2KSA6Ci0JCQkJICAgICAgWkZDUF9EQkZfSU5WQUxJRF9MVU47Ci0JZGVidWdfZXZlbnQoZGJmLT5yZWMsIGFjdGlvbiA/IDEgOiA0LCByLCBzaXplb2YoKnIpKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkYmYtPnJlY19sb2NrLCBmbGFncyk7Ci19Ci0KLS8qKgotICogemZjcF9kYmZfcmVjX2FjdGlvbiAtIHRyYWNlIGV2ZW50IHNob3dpbmcgcHJvZ3Jlc3Mgb2YgcmVjb3ZlcnkgYWN0aW9uCi0gKiBAaWQyOiBpZGVudGlmaWVyCi0gKiBAZXJwX2FjdGlvbjogZXJyb3IgcmVjb3ZlcnkgYWN0aW9uIHN0cnVjdCBwb2ludGVyCi0gKi8KLXZvaWQgemZjcF9kYmZfcmVjX2FjdGlvbihjaGFyICppZDIsIHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKmVycF9hY3Rpb24pCi17Ci0Jc3RydWN0IHpmY3BfZGJmICpkYmYgPSBlcnBfYWN0aW9uLT5hZGFwdGVyLT5kYmY7Ci0Jc3RydWN0IHpmY3BfZGJmX3JlY19yZWNvcmQgKnIgPSAmZGJmLT5yZWNfYnVmOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGJmLT5yZWNfbG9jaywgZmxhZ3MpOwotCW1lbXNldChyLCAwLCBzaXplb2YoKnIpKTsKLQlyLT5pZCA9IFpGQ1BfUkVDX0RCRl9JRF9BQ1RJT047Ci0JbWVtY3B5KHItPmlkMiwgaWQyLCBaRkNQX0RCRl9JRF9TSVpFKTsKLQlyLT51LmFjdGlvbi5hY3Rpb24gPSAodW5zaWduZWQgbG9uZyllcnBfYWN0aW9uOwotCXItPnUuYWN0aW9uLnN0YXR1cyA9IGVycF9hY3Rpb24tPnN0YXR1czsKLQlyLT51LmFjdGlvbi5zdGVwID0gZXJwX2FjdGlvbi0+c3RlcDsKLQlyLT51LmFjdGlvbi5mc2ZfcmVxID0gZXJwX2FjdGlvbi0+ZnNmX3JlcV9pZDsKLQlkZWJ1Z19ldmVudChkYmYtPnJlYywgNSwgciwgc2l6ZW9mKCpyKSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGJmLT5yZWNfbG9jaywgZmxhZ3MpOwotfQotCi0vKioKLSAqIHpmY3BfZGJmX3Nhbl9jdF9yZXF1ZXN0IC0gdHJhY2UgZXZlbnQgZm9yIGlzc3VlZCBDVCByZXF1ZXN0Ci0gKiBAZnNmX3JlcTogcmVxdWVzdCBjb250YWluaW5nIGlzc3VlZCBDVCBkYXRhCi0gKiBAZF9pZDogZGVzdGluYXRpb24gaWQgd2hlcmUgY3QgcmVxdWVzdCBpcyBzZW50IHRvCi0gKi8KLXZvaWQgemZjcF9kYmZfc2FuX2N0X3JlcXVlc3Qoc3RydWN0IHpmY3BfZnNmX3JlcSAqZnNmX3JlcSwgdTMyIGRfaWQpCi17Ci0Jc3RydWN0IHpmY3BfZnNmX2N0X2VscyAqY3QgPSAoc3RydWN0IHpmY3BfZnNmX2N0X2VscyAqKWZzZl9yZXEtPmRhdGE7Ci0Jc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IGZzZl9yZXEtPmFkYXB0ZXI7Ci0Jc3RydWN0IHpmY3BfZGJmICpkYmYgPSBhZGFwdGVyLT5kYmY7Ci0Jc3RydWN0IGZjX2N0X2hkciAqaGRyID0gc2dfdmlydChjdC0+cmVxKTsKLQlzdHJ1Y3QgemZjcF9kYmZfc2FuX3JlY29yZCAqciA9ICZkYmYtPnNhbl9idWY7Ci0Jc3RydWN0IHpmY3BfZGJmX3Nhbl9yZWNvcmRfY3RfcmVxdWVzdCAqb2N0ID0gJnItPnUuY3RfcmVxOwotCWludCBsZXZlbCA9IDM7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZkYmYtPnNhbl9sb2NrLCBmbGFncyk7Ci0JbWVtc2V0KHIsIDAsIHNpemVvZigqcikpOwotCXN0cm5jcHkoci0+dGFnLCAib2N0YyIsIFpGQ1BfREJGX1RBR19TSVpFKTsKLQlyLT5mc2ZfcmVxaWQgPSBmc2ZfcmVxLT5yZXFfaWQ7Ci0Jci0+ZnNmX3NlcW5vID0gZnNmX3JlcS0+c2VxX25vOwotCW9jdC0+ZF9pZCA9IGRfaWQ7Ci0Jb2N0LT5jbWRfcmVxX2NvZGUgPSBoZHItPmN0X2NtZDsKLQlvY3QtPnJldmlzaW9uID0gaGRyLT5jdF9yZXY7Ci0Jb2N0LT5nc190eXBlID0gaGRyLT5jdF9mc190eXBlOwotCW9jdC0+Z3Nfc3VidHlwZSA9IGhkci0+Y3RfZnNfc3VidHlwZTsKLQlvY3QtPm9wdGlvbnMgPSBoZHItPmN0X29wdGlvbnM7Ci0Jb2N0LT5tYXhfcmVzX3NpemUgPSBoZHItPmN0X21yX3NpemU7Ci0Jb2N0LT5sZW4gPSBtaW4oKGludCljdC0+cmVxLT5sZW5ndGggLSAoaW50KXNpemVvZihzdHJ1Y3QgZmNfY3RfaGRyKSwKLQkJICAgICAgIFpGQ1BfREJGX1NBTl9NQVhfUEFZTE9BRCk7Ci0JZGVidWdfZXZlbnQoZGJmLT5zYW4sIGxldmVsLCByLCBzaXplb2YoKnIpKTsKLQl6ZmNwX2RiZl9oZXhkdW1wKGRiZi0+c2FuLCByLCBzaXplb2YoKnIpLCBsZXZlbCwKLQkJCSAodm9pZCAqKWhkciArIHNpemVvZihzdHJ1Y3QgZmNfY3RfaGRyKSwgb2N0LT5sZW4pOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRiZi0+c2FuX2xvY2ssIGZsYWdzKTsKLX0KLQotLyoqCi0gKiB6ZmNwX2RiZl9zYW5fY3RfcmVzcG9uc2UgLSB0cmFjZSBldmVudCBmb3IgY29tcGxldGlvbiBvZiBDVCByZXF1ZXN0Ci0gKiBAZnNmX3JlcTogcmVxdWVzdCBjb250YWluaW5nIENUIHJlc3BvbnNlCi0gKi8KLXZvaWQgemZjcF9kYmZfc2FuX2N0X3Jlc3BvbnNlKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKmZzZl9yZXEpCi17Ci0Jc3RydWN0IHpmY3BfZnNmX2N0X2VscyAqY3QgPSAoc3RydWN0IHpmY3BfZnNmX2N0X2VscyAqKWZzZl9yZXEtPmRhdGE7Ci0Jc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IGZzZl9yZXEtPmFkYXB0ZXI7Ci0Jc3RydWN0IGZjX2N0X2hkciAqaGRyID0gc2dfdmlydChjdC0+cmVzcCk7Ci0Jc3RydWN0IHpmY3BfZGJmICpkYmYgPSBhZGFwdGVyLT5kYmY7Ci0Jc3RydWN0IHpmY3BfZGJmX3Nhbl9yZWNvcmQgKnIgPSAmZGJmLT5zYW5fYnVmOwotCXN0cnVjdCB6ZmNwX2RiZl9zYW5fcmVjb3JkX2N0X3Jlc3BvbnNlICpyY3QgPSAmci0+dS5jdF9yZXNwOwotCWludCBsZXZlbCA9IDM7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZkYmYtPnNhbl9sb2NrLCBmbGFncyk7Ci0JbWVtc2V0KHIsIDAsIHNpemVvZigqcikpOwotCXN0cm5jcHkoci0+dGFnLCAicmN0YyIsIFpGQ1BfREJGX1RBR19TSVpFKTsKLQlyLT5mc2ZfcmVxaWQgPSBmc2ZfcmVxLT5yZXFfaWQ7Ci0Jci0+ZnNmX3NlcW5vID0gZnNmX3JlcS0+c2VxX25vOwotCXJjdC0+Y21kX3JzcF9jb2RlID0gaGRyLT5jdF9jbWQ7Ci0JcmN0LT5yZXZpc2lvbiA9IGhkci0+Y3RfcmV2OwotCXJjdC0+cmVhc29uX2NvZGUgPSBoZHItPmN0X3JlYXNvbjsKLQlyY3QtPmV4cGwgPSBoZHItPmN0X2V4cGxhbjsKLQlyY3QtPnZlbmRvcl91bmlxdWUgPSBoZHItPmN0X3ZlbmRvcjsKLQlyY3QtPm1heF9yZXNfc2l6ZSA9IGhkci0+Y3RfbXJfc2l6ZTsKLQlyY3QtPmxlbiA9IG1pbigoaW50KWN0LT5yZXNwLT5sZW5ndGggLSAoaW50KXNpemVvZihzdHJ1Y3QgZmNfY3RfaGRyKSwKLQkJICAgICAgIFpGQ1BfREJGX1NBTl9NQVhfUEFZTE9BRCk7Ci0JZGVidWdfZXZlbnQoZGJmLT5zYW4sIGxldmVsLCByLCBzaXplb2YoKnIpKTsKLQl6ZmNwX2RiZl9oZXhkdW1wKGRiZi0+c2FuLCByLCBzaXplb2YoKnIpLCBsZXZlbCwKLQkJCSAodm9pZCAqKWhkciArIHNpemVvZihzdHJ1Y3QgZmNfY3RfaGRyKSwgcmN0LT5sZW4pOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRiZi0+c2FuX2xvY2ssIGZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQgemZjcF9kYmZfc2FuX2Vscyhjb25zdCBjaGFyICp0YWcsIGludCBsZXZlbCwKLQkJCSAgICAgc3RydWN0IHpmY3BfZnNmX3JlcSAqZnNmX3JlcSwgdTMyIGRfaWQsCi0JCQkgICAgIHZvaWQgKmJ1ZmZlciwgaW50IGJ1ZmxlbikKLXsKLQlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gZnNmX3JlcS0+YWRhcHRlcjsKLQlzdHJ1Y3QgemZjcF9kYmYgKmRiZiA9IGFkYXB0ZXItPmRiZjsKLQlzdHJ1Y3QgemZjcF9kYmZfc2FuX3JlY29yZCAqcmVjID0gJmRiZi0+c2FuX2J1ZjsKKwlzdHJ1Y3QgemZjcF9kYmZfc2FuICpyZWMgPSAmZGJmLT5zYW5fYnVmOworCXUxNiByZWNfbGVuOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGJmLT5zYW5fbG9jaywgZmxhZ3MpOwogCW1lbXNldChyZWMsIDAsIHNpemVvZigqcmVjKSk7Ci0Jc3RybmNweShyZWMtPnRhZywgdGFnLCBaRkNQX0RCRl9UQUdfU0laRSk7Ci0JcmVjLT5mc2ZfcmVxaWQgPSBmc2ZfcmVxLT5yZXFfaWQ7Ci0JcmVjLT5mc2Zfc2Vxbm8gPSBmc2ZfcmVxLT5zZXFfbm87Ci0JcmVjLT51LmVscy5kX2lkID0gZF9pZDsKLQlkZWJ1Z19ldmVudChkYmYtPnNhbiwgbGV2ZWwsIHJlYywgc2l6ZW9mKCpyZWMpKTsKLQl6ZmNwX2RiZl9oZXhkdW1wKGRiZi0+c2FuLCByZWMsIHNpemVvZigqcmVjKSwgbGV2ZWwsCi0JCQkgYnVmZmVyLCBtaW4oYnVmbGVuLCBaRkNQX0RCRl9TQU5fTUFYX1BBWUxPQUQpKTsKKworCXJlYy0+aWQgPSBpZDsKKwlyZWMtPmZzZl9yZXFfaWQgPSByZXFfaWQ7CisJcmVjLT5kX2lkID0gZF9pZDsKKwlyZWNfbGVuID0gbWluKGxlbiwgKHUxNilaRkNQX0RCRl9TQU5fTUFYX1BBWUxPQUQpOworCW1lbWNweShyZWMtPnBheWxvYWQsIGRhdGEsIHJlY19sZW4pOworCW1lbWNweShyZWMtPnRhZywgdGFnLCBaRkNQX0RCRl9UQUdfTEVOKTsKKworCWRlYnVnX2V2ZW50KGRiZi0+c2FuLCAxLCByZWMsIHNpemVvZigqcmVjKSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGJmLT5zYW5fbG9jaywgZmxhZ3MpOwogfQogCiAvKioKLSAqIHpmY3BfZGJmX3Nhbl9lbHNfcmVxdWVzdCAtIHRyYWNlIGV2ZW50IGZvciBpc3N1ZWQgRUxTCi0gKiBAZnNmX3JlcTogcmVxdWVzdCBjb250YWluaW5nIGlzc3VlZCBFTFMKKyAqIHpmY3BfZGJmX3Nhbl9yZXEgLSB0cmFjZSBldmVudCBmb3IgaXNzdWVkIFNBTiByZXF1ZXN0CisgKiBAdGFnOiBpbmRlbnRpZmllciBmb3IgZXZlbnQKKyAqIEBmc2ZfcmVxOiByZXF1ZXN0IGNvbnRhaW5pbmcgaXNzdWVkIENUIGRhdGEKKyAqIGRfaWQ6IGRlc3RpbmF0aW9uIElECiAgKi8KLXZvaWQgemZjcF9kYmZfc2FuX2Vsc19yZXF1ZXN0KHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKmZzZl9yZXEpCit2b2lkIHpmY3BfZGJmX3Nhbl9yZXEoY2hhciAqdGFnLCBzdHJ1Y3QgemZjcF9mc2ZfcmVxICpmc2YsIHUzMiBkX2lkKQogewotCXN0cnVjdCB6ZmNwX2ZzZl9jdF9lbHMgKmVscyA9IChzdHJ1Y3QgemZjcF9mc2ZfY3RfZWxzICopZnNmX3JlcS0+ZGF0YTsKLQl1MzIgZF9pZCA9IG50b2gyNChmc2ZfcmVxLT5xdGNiLT5ib3R0b20uc3VwcG9ydC5kX2lkKTsKKwlzdHJ1Y3QgemZjcF9kYmYgKmRiZiA9IGZzZi0+YWRhcHRlci0+ZGJmOworCXN0cnVjdCB6ZmNwX2ZzZl9jdF9lbHMgKmN0X2VscyA9IGZzZi0+ZGF0YTsKKwl1MTYgbGVuZ3RoOwogCi0JemZjcF9kYmZfc2FuX2Vscygib2VscyIsIDIsIGZzZl9yZXEsIGRfaWQsCi0JCQkgc2dfdmlydChlbHMtPnJlcSksIGVscy0+cmVxLT5sZW5ndGgpOworCWxlbmd0aCA9ICh1MTYpKGN0X2Vscy0+cmVxLT5sZW5ndGggKyBGQ19DVF9IRFJfTEVOKTsKKwl6ZmNwX2RiZl9zYW4odGFnLCBkYmYsIHNnX3ZpcnQoY3RfZWxzLT5yZXEpLCBaRkNQX0RCRl9TQU5fUkVRLCBsZW5ndGgsCisJCSAgICAgZnNmLT5yZXFfaWQsIGRfaWQpOwogfQogCiAvKioKLSAqIHpmY3BfZGJmX3Nhbl9lbHNfcmVzcG9uc2UgLSB0cmFjZSBldmVudCBmb3IgY29tcGxldGVkIEVMUwotICogQGZzZl9yZXE6IHJlcXVlc3QgY29udGFpbmluZyBFTFMgcmVzcG9uc2UKKyAqIHpmY3BfZGJmX3Nhbl9yZXMgLSB0cmFjZSBldmVudCBmb3IgcmVjZWl2ZWQgU0FOIHJlcXVlc3QKKyAqIEB0YWc6IGluZGVudGlmaWVyIGZvciBldmVudAorICogQGZzZl9yZXE6IHJlcXVlc3QgY29udGFpbmluZyBpc3N1ZWQgQ1QgZGF0YQogICovCi12b2lkIHpmY3BfZGJmX3Nhbl9lbHNfcmVzcG9uc2Uoc3RydWN0IHpmY3BfZnNmX3JlcSAqZnNmX3JlcSkKK3ZvaWQgemZjcF9kYmZfc2FuX3JlcyhjaGFyICp0YWcsIHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKmZzZikKIHsKLQlzdHJ1Y3QgemZjcF9mc2ZfY3RfZWxzICplbHMgPSAoc3RydWN0IHpmY3BfZnNmX2N0X2VscyAqKWZzZl9yZXEtPmRhdGE7Ci0JdTMyIGRfaWQgPSBudG9oMjQoZnNmX3JlcS0+cXRjYi0+Ym90dG9tLnN1cHBvcnQuZF9pZCk7CisJc3RydWN0IHpmY3BfZGJmICpkYmYgPSBmc2YtPmFkYXB0ZXItPmRiZjsKKwlzdHJ1Y3QgemZjcF9mc2ZfY3RfZWxzICpjdF9lbHMgPSBmc2YtPmRhdGE7CisJdTE2IGxlbmd0aDsKIAotCXpmY3BfZGJmX3Nhbl9lbHMoInJlbHMiLCAyLCBmc2ZfcmVxLCBkX2lkLAotCQkJICAgICAgIHNnX3ZpcnQoZWxzLT5yZXNwKSwgZWxzLT5yZXNwLT5sZW5ndGgpOworCWxlbmd0aCA9ICh1MTYpKGN0X2Vscy0+cmVzcC0+bGVuZ3RoICsgRkNfQ1RfSERSX0xFTik7CisJemZjcF9kYmZfc2FuKHRhZywgZGJmLCBzZ192aXJ0KGN0X2Vscy0+cmVzcCksIFpGQ1BfREJGX1NBTl9SRVMsIGxlbmd0aCwKKwkJICAgICBmc2YtPnJlcV9pZCwgMCk7CiB9CiAKIC8qKgotICogemZjcF9kYmZfc2FuX2luY29taW5nX2VscyAtIHRyYWNlIGV2ZW50IGZvciBpbmNvbWlnIEVMUwotICogQGZzZl9yZXE6IHJlcXVlc3QgY29udGFpbmluZyB1bnNvbGljaXRlZCBzdGF0dXMgYnVmZmVyIHdpdGggaW5jb21pbmcgRUxTCisgKiB6ZmNwX2RiZl9zYW5faW5fZWxzIC0gdHJhY2UgZXZlbnQgZm9yIGluY29taW5nIEVMUworICogQHRhZzogaW5kZW50aWZpZXIgZm9yIGV2ZW50CisgKiBAZnNmX3JlcTogcmVxdWVzdCBjb250YWluaW5nIGlzc3VlZCBDVCBkYXRhCiAgKi8KLXZvaWQgemZjcF9kYmZfc2FuX2luY29taW5nX2VscyhzdHJ1Y3QgemZjcF9mc2ZfcmVxICpmc2ZfcmVxKQordm9pZCB6ZmNwX2RiZl9zYW5faW5fZWxzKGNoYXIgKnRhZywgc3RydWN0IHpmY3BfZnNmX3JlcSAqZnNmKQogewotCXN0cnVjdCBmc2Zfc3RhdHVzX3JlYWRfYnVmZmVyICpidWYgPQotCQkJKHN0cnVjdCBmc2Zfc3RhdHVzX3JlYWRfYnVmZmVyICopZnNmX3JlcS0+ZGF0YTsKLQlpbnQgbGVuZ3RoID0gKGludClidWYtPmxlbmd0aCAtCi0JCSAgICAgKGludCkoKHZvaWQgKikmYnVmLT5wYXlsb2FkIC0gKHZvaWQgKilidWYpOworCXN0cnVjdCB6ZmNwX2RiZiAqZGJmID0gZnNmLT5hZGFwdGVyLT5kYmY7CisJc3RydWN0IGZzZl9zdGF0dXNfcmVhZF9idWZmZXIgKnNyYiA9CisJCShzdHJ1Y3QgZnNmX3N0YXR1c19yZWFkX2J1ZmZlciAqKSBmc2YtPmRhdGE7CisJdTE2IGxlbmd0aDsKIAotCXpmY3BfZGJmX3Nhbl9lbHMoImllbHMiLCAxLCBmc2ZfcmVxLCBudG9oMjQoYnVmLT5kX2lkKSwKLQkJCSAgICAgICAodm9pZCAqKWJ1Zi0+cGF5bG9hZC5kYXRhLCBsZW5ndGgpOworCWxlbmd0aCA9ICh1MTYpKHNyYi0+bGVuZ3RoIC0KKwkJCW9mZnNldG9mKHN0cnVjdCBmc2Zfc3RhdHVzX3JlYWRfYnVmZmVyLCBwYXlsb2FkKSk7CisJemZjcF9kYmZfc2FuKHRhZywgZGJmLCBzcmItPnBheWxvYWQuZGF0YSwgWkZDUF9EQkZfU0FOX0VMUywgbGVuZ3RoLAorCQkgICAgIGZzZi0+cmVxX2lkLCBudG9oMjQoc3JiLT5kX2lkKSk7CiB9CiAKLXN0YXRpYyBpbnQgemZjcF9kYmZfc2FuX3ZpZXdfZm9ybWF0KGRlYnVnX2luZm9fdCAqaWQsIHN0cnVjdCBkZWJ1Z192aWV3ICp2aWV3LAotCQkJCSAgICBjaGFyICpvdXRfYnVmLCBjb25zdCBjaGFyICppbl9idWYpCisvKioKKyAqIHpmY3BfZGJmX3Njc2kgLSB0cmFjZSBldmVudCBmb3Igc2NzaSBjb21tYW5kcworICogQHRhZzogaWRlbnRpZmllciBmb3IgZXZlbnQKKyAqIEBzYzogcG9pbnRlciB0byBzdHJ1Y3Qgc2NzaV9jbW5kCisgKiBAZnNmOiBwb2ludGVyIHRvIHN0cnVjdCB6ZmNwX2ZzZl9yZXEKKyAqLwordm9pZCB6ZmNwX2RiZl9zY3NpKGNoYXIgKnRhZywgc3RydWN0IHNjc2lfY21uZCAqc2MsIHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKmZzZikKIHsKLQlzdHJ1Y3QgemZjcF9kYmZfc2FuX3JlY29yZCAqciA9IChzdHJ1Y3QgemZjcF9kYmZfc2FuX3JlY29yZCAqKWluX2J1ZjsKLQljaGFyICpwID0gb3V0X2J1ZjsKLQotCWlmIChzdHJuY21wKHItPnRhZywgImR1bXAiLCBaRkNQX0RCRl9UQUdfU0laRSkgPT0gMCkKLQkJcmV0dXJuIDA7Ci0KLQl6ZmNwX2RiZl90YWcoJnAsICJ0YWciLCByLT50YWcpOwotCXpmY3BfZGJmX291dCgmcCwgImZzZl9yZXFpZCIsICIweCUwTHgiLCByLT5mc2ZfcmVxaWQpOwotCXpmY3BfZGJmX291dCgmcCwgImZzZl9zZXFubyIsICIweCUwOHgiLCByLT5mc2Zfc2Vxbm8pOwotCi0JaWYgKHN0cm5jbXAoci0+dGFnLCAib2N0YyIsIFpGQ1BfREJGX1RBR19TSVpFKSA9PSAwKSB7Ci0JCXN0cnVjdCB6ZmNwX2RiZl9zYW5fcmVjb3JkX2N0X3JlcXVlc3QgKmN0ID0gJnItPnUuY3RfcmVxOwotCQl6ZmNwX2RiZl9vdXQoJnAsICJkX2lkIiwgIjB4JTA2eCIsIGN0LT5kX2lkKTsKLQkJemZjcF9kYmZfb3V0KCZwLCAiY21kX3JlcV9jb2RlIiwgIjB4JTA0eCIsIGN0LT5jbWRfcmVxX2NvZGUpOwotCQl6ZmNwX2RiZl9vdXQoJnAsICJyZXZpc2lvbiIsICIweCUwMngiLCBjdC0+cmV2aXNpb24pOwotCQl6ZmNwX2RiZl9vdXQoJnAsICJnc190eXBlIiwgIjB4JTAyeCIsIGN0LT5nc190eXBlKTsKLQkJemZjcF9kYmZfb3V0KCZwLCAiZ3Nfc3VidHlwZSIsICIweCUwMngiLCBjdC0+Z3Nfc3VidHlwZSk7Ci0JCXpmY3BfZGJmX291dCgmcCwgIm9wdGlvbnMiLCAiMHglMDJ4IiwgY3QtPm9wdGlvbnMpOwotCQl6ZmNwX2RiZl9vdXQoJnAsICJtYXhfcmVzX3NpemUiLCAiMHglMDR4IiwgY3QtPm1heF9yZXNfc2l6ZSk7Ci0JfSBlbHNlIGlmIChzdHJuY21wKHItPnRhZywgInJjdGMiLCBaRkNQX0RCRl9UQUdfU0laRSkgPT0gMCkgewotCQlzdHJ1Y3QgemZjcF9kYmZfc2FuX3JlY29yZF9jdF9yZXNwb25zZSAqY3QgPSAmci0+dS5jdF9yZXNwOwotCQl6ZmNwX2RiZl9vdXQoJnAsICJjbWRfcnNwX2NvZGUiLCAiMHglMDR4IiwgY3QtPmNtZF9yc3BfY29kZSk7Ci0JCXpmY3BfZGJmX291dCgmcCwgInJldmlzaW9uIiwgIjB4JTAyeCIsIGN0LT5yZXZpc2lvbik7Ci0JCXpmY3BfZGJmX291dCgmcCwgInJlYXNvbl9jb2RlIiwgIjB4JTAyeCIsIGN0LT5yZWFzb25fY29kZSk7Ci0JCXpmY3BfZGJmX291dCgmcCwgInJlYXNvbl9jb2RlX2V4cGwiLCAiMHglMDJ4IiwgY3QtPmV4cGwpOwotCQl6ZmNwX2RiZl9vdXQoJnAsICJ2ZW5kb3JfdW5pcXVlIiwgIjB4JTAyeCIsIGN0LT52ZW5kb3JfdW5pcXVlKTsKLQkJemZjcF9kYmZfb3V0KCZwLCAibWF4X3Jlc19zaXplIiwgIjB4JTA0eCIsIGN0LT5tYXhfcmVzX3NpemUpOwotCX0gZWxzZSBpZiAoc3RybmNtcChyLT50YWcsICJvZWxzIiwgWkZDUF9EQkZfVEFHX1NJWkUpID09IDAgfHwKLQkJICAgc3RybmNtcChyLT50YWcsICJyZWxzIiwgWkZDUF9EQkZfVEFHX1NJWkUpID09IDAgfHwKLQkJICAgc3RybmNtcChyLT50YWcsICJpZWxzIiwgWkZDUF9EQkZfVEFHX1NJWkUpID09IDApIHsKLQkJc3RydWN0IHpmY3BfZGJmX3Nhbl9yZWNvcmRfZWxzICplbHMgPSAmci0+dS5lbHM7Ci0JCXpmY3BfZGJmX291dCgmcCwgImRfaWQiLCAiMHglMDZ4IiwgZWxzLT5kX2lkKTsKLQl9Ci0JcmV0dXJuIHAgLSBvdXRfYnVmOwotfQotCi1zdGF0aWMgc3RydWN0IGRlYnVnX3ZpZXcgemZjcF9kYmZfc2FuX3ZpZXcgPSB7Ci0JLm5hbWUgPSAic3RydWN0dXJlZCIsCi0JLmhlYWRlcl9wcm9jID0gemZjcF9kYmZfdmlld19oZWFkZXIsCi0JLmZvcm1hdF9wcm9jID0gemZjcF9kYmZfc2FuX3ZpZXdfZm9ybWF0LAotfTsKLQotdm9pZCBfemZjcF9kYmZfc2NzaShjb25zdCBjaGFyICp0YWcsIGNvbnN0IGNoYXIgKnRhZzIsIGludCBsZXZlbCwKLQkJICAgIHN0cnVjdCB6ZmNwX2RiZiAqZGJmLCBzdHJ1Y3Qgc2NzaV9jbW5kICpzY3NpX2NtbmQsCi0JCSAgICBzdHJ1Y3QgemZjcF9mc2ZfcmVxICpmc2ZfcmVxLCB1bnNpZ25lZCBsb25nIG9sZF9yZXFfaWQpCi17Ci0Jc3RydWN0IHpmY3BfZGJmX3Njc2lfcmVjb3JkICpyZWMgPSAmZGJmLT5zY3NpX2J1ZjsKLQlzdHJ1Y3QgemZjcF9kYmZfZHVtcCAqZHVtcCA9IChzdHJ1Y3QgemZjcF9kYmZfZHVtcCAqKXJlYzsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPQorCQkoc3RydWN0IHpmY3BfYWRhcHRlciAqKSBzYy0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YVswXTsKKwlzdHJ1Y3QgemZjcF9kYmYgKmRiZiA9IGFkYXB0ZXItPmRiZjsKKwlzdHJ1Y3QgemZjcF9kYmZfc2NzaSAqcmVjID0gJmRiZi0+c2NzaV9idWY7CiAJc3RydWN0IGZjcF9yZXNwX3dpdGhfZXh0ICpmY3BfcnNwOwotCXN0cnVjdCBmY3BfcmVzcF9yc3BfaW5mbyAqZmNwX3JzcF9pbmZvID0gTlVMTDsKLQljaGFyICpmY3Bfc25zX2luZm8gPSBOVUxMOwotCWludCBvZmZzZXQgPSAwLCBidWZsZW4gPSAwOworCXN0cnVjdCBmY3BfcmVzcF9yc3BfaW5mbyAqZmNwX3JzcF9pbmZvOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGJmLT5zY3NpX2xvY2ssIGZsYWdzKTsKLQlkbyB7Ci0JCW1lbXNldChyZWMsIDAsIHNpemVvZigqcmVjKSk7Ci0JCWlmIChvZmZzZXQgPT0gMCkgewotCQkJc3RybmNweShyZWMtPnRhZywgdGFnLCBaRkNQX0RCRl9UQUdfU0laRSk7Ci0JCQlzdHJuY3B5KHJlYy0+dGFnMiwgdGFnMiwgWkZDUF9EQkZfVEFHX1NJWkUpOwotCQkJaWYgKHNjc2lfY21uZCAhPSBOVUxMKSB7Ci0JCQkJaWYgKHNjc2lfY21uZC0+ZGV2aWNlKSB7Ci0JCQkJCXJlYy0+c2NzaV9pZCA9IHNjc2lfY21uZC0+ZGV2aWNlLT5pZDsKLQkJCQkJcmVjLT5zY3NpX2x1biA9IHNjc2lfY21uZC0+ZGV2aWNlLT5sdW47Ci0JCQkJfQotCQkJCXJlYy0+c2NzaV9yZXN1bHQgPSBzY3NpX2NtbmQtPnJlc3VsdDsKLQkJCQlyZWMtPnNjc2lfY21uZCA9ICh1bnNpZ25lZCBsb25nKXNjc2lfY21uZDsKLQkJCQltZW1jcHkocmVjLT5zY3NpX29wY29kZSwgc2NzaV9jbW5kLT5jbW5kLAotCQkJCQltaW4oKGludClzY3NpX2NtbmQtPmNtZF9sZW4sCi0JCQkJCQlaRkNQX0RCRl9TQ1NJX09QQ09ERSkpOwotCQkJCXJlYy0+c2NzaV9yZXRyaWVzID0gc2NzaV9jbW5kLT5yZXRyaWVzOwotCQkJCXJlYy0+c2NzaV9hbGxvd2VkID0gc2NzaV9jbW5kLT5hbGxvd2VkOwotCQkJfQotCQkJaWYgKGZzZl9yZXEgIT0gTlVMTCkgewotCQkJCWZjcF9yc3AgPSAoc3RydWN0IGZjcF9yZXNwX3dpdGhfZXh0ICopCi0JCQkJCSYoZnNmX3JlcS0+cXRjYi0+Ym90dG9tLmlvLmZjcF9yc3ApOwotCQkJCWZjcF9yc3BfaW5mbyA9IChzdHJ1Y3QgZmNwX3Jlc3BfcnNwX2luZm8gKikKLQkJCQkJJmZjcF9yc3BbMV07Ci0JCQkJZmNwX3Nuc19pbmZvID0gKGNoYXIgKikgJmZjcF9yc3BbMV07Ci0JCQkJaWYgKGZjcF9yc3AtPnJlc3AuZnJfZmxhZ3MgJiBGQ1BfUlNQX0xFTl9WQUwpCi0JCQkJCWZjcF9zbnNfaW5mbyArPSBmY3BfcnNwLT5leHQuZnJfc25zX2xlbjsKKwltZW1zZXQocmVjLCAwLCBzaXplb2YoKnJlYykpOwogCi0JCQkJcmVjLT5yc3BfdmFsaWRpdHkgPSBmY3BfcnNwLT5yZXNwLmZyX2ZsYWdzOwotCQkJCXJlYy0+cnNwX3Njc2lfc3RhdHVzID0gZmNwX3JzcC0+cmVzcC5mcl9zdGF0dXM7Ci0JCQkJcmVjLT5yc3BfcmVzaWQgPSBmY3BfcnNwLT5leHQuZnJfcmVzaWQ7Ci0JCQkJaWYgKGZjcF9yc3AtPnJlc3AuZnJfZmxhZ3MgJiBGQ1BfUlNQX0xFTl9WQUwpCi0JCQkJCXJlYy0+cnNwX2NvZGUgPSBmY3BfcnNwX2luZm8tPnJzcF9jb2RlOwotCQkJCWlmIChmY3BfcnNwLT5yZXNwLmZyX2ZsYWdzICYgRkNQX1NOU19MRU5fVkFMKSB7Ci0JCQkJCWJ1ZmxlbiA9IG1pbihmY3BfcnNwLT5leHQuZnJfc25zX2xlbiwKLQkJCQkJICAgKHUzMilaRkNQX0RCRl9TQ1NJX01BWF9GQ1BfU05TX0lORk8pOwotCQkJCQlyZWMtPnNuc19pbmZvX2xlbiA9IGJ1ZmxlbjsKLQkJCQkJbWVtY3B5KHJlYy0+c25zX2luZm8sIGZjcF9zbnNfaW5mbywKLQkJCQkJICAgICAgIG1pbihidWZsZW4sCi0JCQkJCQkgICBaRkNQX0RCRl9TQ1NJX0ZDUF9TTlNfSU5GTykpOwotCQkJCQlvZmZzZXQgKz0gbWluKGJ1ZmxlbiwKLQkJCQkJCSAgICAgIFpGQ1BfREJGX1NDU0lfRkNQX1NOU19JTkZPKTsKLQkJCQl9CisJbWVtY3B5KHJlYy0+dGFnLCB0YWcsIFpGQ1BfREJGX1RBR19MRU4pOworCXJlYy0+aWQgPSBaRkNQX0RCRl9TQ1NJX0NNTkQ7CisJcmVjLT5zY3NpX3Jlc3VsdCA9IHNjLT5yZXN1bHQ7CisJcmVjLT5zY3NpX3JldHJpZXMgPSBzYy0+cmV0cmllczsKKwlyZWMtPnNjc2lfYWxsb3dlZCA9IHNjLT5hbGxvd2VkOworCXJlYy0+c2NzaV9pZCA9IHNjLT5kZXZpY2UtPmlkOworCXJlYy0+c2NzaV9sdW4gPSBzYy0+ZGV2aWNlLT5sdW47CisJcmVjLT5ob3N0X3NjcmliYmxlID0gKHVuc2lnbmVkIGxvbmcpc2MtPmhvc3Rfc2NyaWJibGU7CiAKLQkJCQlyZWMtPmZzZl9yZXFpZCA9IGZzZl9yZXEtPnJlcV9pZDsKLQkJCQlyZWMtPmZzZl9zZXFubyA9IGZzZl9yZXEtPnNlcV9ubzsKLQkJCQlyZWMtPmZzZl9pc3N1ZWQgPSBmc2ZfcmVxLT5pc3N1ZWQ7Ci0JCQl9Ci0JCQlyZWMtPm9sZF9mc2ZfcmVxaWQgPSBvbGRfcmVxX2lkOwotCQl9IGVsc2UgewotCQkJc3RybmNweShkdW1wLT50YWcsICJkdW1wIiwgWkZDUF9EQkZfVEFHX1NJWkUpOwotCQkJZHVtcC0+dG90YWxfc2l6ZSA9IGJ1ZmxlbjsKLQkJCWR1bXAtPm9mZnNldCA9IG9mZnNldDsKLQkJCWR1bXAtPnNpemUgPSBtaW4oYnVmbGVuIC0gb2Zmc2V0LAotCQkJCQkgKGludClzaXplb2Yoc3RydWN0Ci0JCQkJCQkgICAgIHpmY3BfZGJmX3Njc2lfcmVjb3JkKSAtCi0JCQkJCSAoaW50KXNpemVvZihzdHJ1Y3QgemZjcF9kYmZfZHVtcCkpOwotCQkJbWVtY3B5KGR1bXAtPmRhdGEsIGZjcF9zbnNfaW5mbyArIG9mZnNldCwgZHVtcC0+c2l6ZSk7Ci0JCQlvZmZzZXQgKz0gZHVtcC0+c2l6ZTsKKwltZW1jcHkocmVjLT5zY3NpX29wY29kZSwgc2MtPmNtbmQsCisJICAgICAgIG1pbigoaW50KXNjLT5jbWRfbGVuLCBaRkNQX0RCRl9TQ1NJX09QQ09ERSkpOworCisJaWYgKGZzZikgeworCQlyZWMtPmZzZl9yZXFfaWQgPSBmc2YtPnJlcV9pZDsKKwkJZmNwX3JzcCA9IChzdHJ1Y3QgZmNwX3Jlc3Bfd2l0aF9leHQgKikKKwkJCQkmKGZzZi0+cXRjYi0+Ym90dG9tLmlvLmZjcF9yc3ApOworCQltZW1jcHkoJnJlYy0+ZmNwX3JzcCwgZmNwX3JzcCwgRkNQX1JFU1BfV0lUSF9FWFQpOworCQlpZiAoZmNwX3JzcC0+cmVzcC5mcl9mbGFncyAmIEZDUF9SU1BfTEVOX1ZBTCkgeworCQkJZmNwX3JzcF9pbmZvID0gKHN0cnVjdCBmY3BfcmVzcF9yc3BfaW5mbyAqKSAmZmNwX3JzcFsxXTsKKwkJCXJlYy0+ZmNwX3JzcF9pbmZvID0gZmNwX3JzcF9pbmZvLT5yc3BfY29kZTsKIAkJfQotCQlkZWJ1Z19ldmVudChkYmYtPnNjc2ksIGxldmVsLCByZWMsIHNpemVvZigqcmVjKSk7Ci0JfSB3aGlsZSAob2Zmc2V0IDwgYnVmbGVuKTsKKwkJaWYgKGZjcF9yc3AtPnJlc3AuZnJfZmxhZ3MgJiBGQ1BfU05TX0xFTl9WQUwpIHsKKwkJCXJlYy0+cGxfbGVuID0gbWluKCh1MTYpU0NTSV9TRU5TRV9CVUZGRVJTSVpFLAorCQkJCQkgICh1MTYpWkZDUF9EQkZfUEFZX01BWF9SRUMpOworCQkJemZjcF9kYmZfcGxfd3JpdGUoZGJmLCBzYy0+c2Vuc2VfYnVmZmVyLCByZWMtPnBsX2xlbiwKKwkJCQkJICAiZmNwX3NucyIsIGZzZi0+cmVxX2lkKTsKKwkJfQorCX0KKworCWRlYnVnX2V2ZW50KGRiZi0+c2NzaSwgMSwgcmVjLCBzaXplb2YoKnJlYykpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRiZi0+c2NzaV9sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyBpbnQgemZjcF9kYmZfc2NzaV92aWV3X2Zvcm1hdChkZWJ1Z19pbmZvX3QgKmlkLCBzdHJ1Y3QgZGVidWdfdmlldyAqdmlldywKLQkJCQkgICAgIGNoYXIgKm91dF9idWYsIGNvbnN0IGNoYXIgKmluX2J1ZikKLXsKLQlzdHJ1Y3QgemZjcF9kYmZfc2NzaV9yZWNvcmQgKnIgPSAoc3RydWN0IHpmY3BfZGJmX3Njc2lfcmVjb3JkICopaW5fYnVmOwotCXN0cnVjdCB0aW1lc3BlYyB0OwotCWNoYXIgKnAgPSBvdXRfYnVmOwotCi0JaWYgKHN0cm5jbXAoci0+dGFnLCAiZHVtcCIsIFpGQ1BfREJGX1RBR19TSVpFKSA9PSAwKQotCQlyZXR1cm4gMDsKLQotCXpmY3BfZGJmX3RhZygmcCwgInRhZyIsIHItPnRhZyk7Ci0JemZjcF9kYmZfdGFnKCZwLCAidGFnMiIsIHItPnRhZzIpOwotCXpmY3BfZGJmX291dCgmcCwgInNjc2lfaWQiLCAiMHglMDh4Iiwgci0+c2NzaV9pZCk7Ci0JemZjcF9kYmZfb3V0KCZwLCAic2NzaV9sdW4iLCAiMHglMDh4Iiwgci0+c2NzaV9sdW4pOwotCXpmY3BfZGJmX291dCgmcCwgInNjc2lfcmVzdWx0IiwgIjB4JTA4eCIsIHItPnNjc2lfcmVzdWx0KTsKLQl6ZmNwX2RiZl9vdXQoJnAsICJzY3NpX2NtbmQiLCAiMHglMEx4Iiwgci0+c2NzaV9jbW5kKTsKLQl6ZmNwX2RiZl9vdXRkKCZwLCAic2NzaV9vcGNvZGUiLCByLT5zY3NpX29wY29kZSwgWkZDUF9EQkZfU0NTSV9PUENPREUsCi0JCSAgICAgIDAsIFpGQ1BfREJGX1NDU0lfT1BDT0RFKTsKLQl6ZmNwX2RiZl9vdXQoJnAsICJzY3NpX3JldHJpZXMiLCAiMHglMDJ4Iiwgci0+c2NzaV9yZXRyaWVzKTsKLQl6ZmNwX2RiZl9vdXQoJnAsICJzY3NpX2FsbG93ZWQiLCAiMHglMDJ4Iiwgci0+c2NzaV9hbGxvd2VkKTsKLQlpZiAoc3RybmNtcChyLT50YWcsICJhYnJ0IiwgWkZDUF9EQkZfVEFHX1NJWkUpID09IDApCi0JCXpmY3BfZGJmX291dCgmcCwgIm9sZF9mc2ZfcmVxaWQiLCAiMHglMEx4Iiwgci0+b2xkX2ZzZl9yZXFpZCk7Ci0JemZjcF9kYmZfb3V0KCZwLCAiZnNmX3JlcWlkIiwgIjB4JTBMeCIsIHItPmZzZl9yZXFpZCk7Ci0JemZjcF9kYmZfb3V0KCZwLCAiZnNmX3NlcW5vIiwgIjB4JTA4eCIsIHItPmZzZl9zZXFubyk7Ci0Jc3Rja190b190aW1lc3BlYyhyLT5mc2ZfaXNzdWVkLCAmdCk7Ci0JemZjcF9kYmZfb3V0KCZwLCAiZnNmX2lzc3VlZCIsICIlMDExbHU6JTA2bHUiLCB0LnR2X3NlYywgdC50dl9uc2VjKTsKLQotCWlmIChzdHJuY21wKHItPnRhZywgInJzbHQiLCBaRkNQX0RCRl9UQUdfU0laRSkgPT0gMCkgewotCQl6ZmNwX2RiZl9vdXQoJnAsICJmY3BfcnNwX3ZhbGlkaXR5IiwgIjB4JTAyeCIsIHItPnJzcF92YWxpZGl0eSk7Ci0JCXpmY3BfZGJmX291dCgmcCwgImZjcF9yc3Bfc2NzaV9zdGF0dXMiLCAiMHglMDJ4IiwKLQkJCSAgICAgci0+cnNwX3Njc2lfc3RhdHVzKTsKLQkJemZjcF9kYmZfb3V0KCZwLCAiZmNwX3JzcF9yZXNpZCIsICIweCUwOHgiLCByLT5yc3BfcmVzaWQpOwotCQl6ZmNwX2RiZl9vdXQoJnAsICJmY3BfcnNwX2NvZGUiLCAiMHglMDh4Iiwgci0+cnNwX2NvZGUpOwotCQl6ZmNwX2RiZl9vdXQoJnAsICJmY3Bfc25zX2luZm9fbGVuIiwgIjB4JTA4eCIsIHItPnNuc19pbmZvX2xlbik7Ci0JCXpmY3BfZGJmX291dGQoJnAsICJmY3Bfc25zX2luZm8iLCByLT5zbnNfaW5mbywKLQkJCSAgICAgIG1pbigoaW50KXItPnNuc19pbmZvX2xlbiwKLQkJCSAgICAgIFpGQ1BfREJGX1NDU0lfRkNQX1NOU19JTkZPKSwgMCwKLQkJCSAgICAgIHItPnNuc19pbmZvX2xlbik7Ci0JfQotCXAgKz0gc3ByaW50ZihwLCAiXG4iKTsKLQlyZXR1cm4gcCAtIG91dF9idWY7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZGVidWdfdmlldyB6ZmNwX2RiZl9zY3NpX3ZpZXcgPSB7Ci0JLm5hbWUgPSAic3RydWN0dXJlZCIsCi0JLmhlYWRlcl9wcm9jID0gemZjcF9kYmZfdmlld19oZWFkZXIsCi0JLmZvcm1hdF9wcm9jID0gemZjcF9kYmZfc2NzaV92aWV3X2Zvcm1hdCwKLX07Ci0KLXN0YXRpYyBkZWJ1Z19pbmZvX3QgKnpmY3BfZGJmX3JlZyhjb25zdCBjaGFyICpuYW1lLCBpbnQgbGV2ZWwsCi0JCQkJICBzdHJ1Y3QgZGVidWdfdmlldyAqdmlldywgaW50IHNpemUpCitzdGF0aWMgZGVidWdfaW5mb190ICp6ZmNwX2RiZl9yZWcoY29uc3QgY2hhciAqbmFtZSwgaW50IHNpemUsIGludCByZWNfc2l6ZSkKIHsKIAlzdHJ1Y3QgZGVidWdfaW5mbyAqZDsKIAotCWQgPSBkZWJ1Z19yZWdpc3RlcihuYW1lLCBkYmZzaXplLCBsZXZlbCwgc2l6ZSk7CisJZCA9IGRlYnVnX3JlZ2lzdGVyKG5hbWUsIHNpemUsIDEsIHJlY19zaXplKTsKIAlpZiAoIWQpCiAJCXJldHVybiBOVUxMOwogCiAJZGVidWdfcmVnaXN0ZXJfdmlldyhkLCAmZGVidWdfaGV4X2FzY2lpX3ZpZXcpOwotCWRlYnVnX3JlZ2lzdGVyX3ZpZXcoZCwgdmlldyk7Ci0JZGVidWdfc2V0X2xldmVsKGQsIGxldmVsKTsKKwlkZWJ1Z19zZXRfbGV2ZWwoZCwgMyk7CiAKIAlyZXR1cm4gZDsKIH0KIAorc3RhdGljIHZvaWQgemZjcF9kYmZfdW5yZWdpc3RlcihzdHJ1Y3QgemZjcF9kYmYgKmRiZikKK3sKKwlpZiAoIWRiZikKKwkJcmV0dXJuOworCisJZGVidWdfdW5yZWdpc3RlcihkYmYtPnNjc2kpOworCWRlYnVnX3VucmVnaXN0ZXIoZGJmLT5zYW4pOworCWRlYnVnX3VucmVnaXN0ZXIoZGJmLT5oYmEpOworCWRlYnVnX3VucmVnaXN0ZXIoZGJmLT5wYXkpOworCWRlYnVnX3VucmVnaXN0ZXIoZGJmLT5yZWMpOworCWtmcmVlKGRiZik7Cit9CisKIC8qKgogICogemZjcF9hZGFwdGVyX2RlYnVnX3JlZ2lzdGVyIC0gcmVnaXN0ZXJzIGRlYnVnIGZlYXR1cmUgZm9yIGFuIGFkYXB0ZXIKICAqIEBhZGFwdGVyOiBwb2ludGVyIHRvIGFkYXB0ZXIgZm9yIHdoaWNoIGRlYnVnIGZlYXR1cmVzIHNob3VsZCBiZSByZWdpc3RlcmVkCkBAIC0xMDAzLDY5ICs0MTUsNjYgQEAKICAqLwogaW50IHpmY3BfZGJmX2FkYXB0ZXJfcmVnaXN0ZXIoc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcikKIHsKLQljaGFyIGRiZl9uYW1lW0RFQlVHX01BWF9OQU1FX0xFTl07CisJY2hhciBuYW1lW0RFQlVHX01BWF9OQU1FX0xFTl07CiAJc3RydWN0IHpmY3BfZGJmICpkYmY7CiAKIAlkYmYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgemZjcF9kYmYpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWRiZikKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlkYmYtPmFkYXB0ZXIgPSBhZGFwdGVyOwotCisJc3Bpbl9sb2NrX2luaXQoJmRiZi0+cGF5X2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZkYmYtPmhiYV9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmZGJmLT5zYW5fbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmRiZi0+c2NzaV9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmZGJmLT5yZWNfbG9jayk7CiAKIAkvKiBkZWJ1ZyBmZWF0dXJlIGFyZWEgd2hpY2ggcmVjb3JkcyByZWNvdmVyeSBhY3Rpdml0eSAqLwotCXNwcmludGYoZGJmX25hbWUsICJ6ZmNwXyVzX3JlYyIsIGRldl9uYW1lKCZhZGFwdGVyLT5jY3dfZGV2aWNlLT5kZXYpKTsKLQlkYmYtPnJlYyA9IHpmY3BfZGJmX3JlZyhkYmZfbmFtZSwgMywgJnpmY3BfZGJmX3JlY192aWV3LAotCQkJCXNpemVvZihzdHJ1Y3QgemZjcF9kYmZfcmVjX3JlY29yZCkpOworCXNwcmludGYobmFtZSwgInpmY3BfJXNfcmVjIiwgZGV2X25hbWUoJmFkYXB0ZXItPmNjd19kZXZpY2UtPmRldikpOworCWRiZi0+cmVjID0gemZjcF9kYmZfcmVnKG5hbWUsIGRiZnNpemUsIHNpemVvZihzdHJ1Y3QgemZjcF9kYmZfcmVjKSk7CiAJaWYgKCFkYmYtPnJlYykKIAkJZ290byBlcnJfb3V0OwogCiAJLyogZGVidWcgZmVhdHVyZSBhcmVhIHdoaWNoIHJlY29yZHMgSEJBIChGU0YgYW5kIFFESU8pIGNvbmRpdGlvbnMgKi8KLQlzcHJpbnRmKGRiZl9uYW1lLCAiemZjcF8lc19oYmEiLCBkZXZfbmFtZSgmYWRhcHRlci0+Y2N3X2RldmljZS0+ZGV2KSk7Ci0JZGJmLT5oYmEgPSB6ZmNwX2RiZl9yZWcoZGJmX25hbWUsIDMsICZ6ZmNwX2RiZl9oYmFfdmlldywKLQkJCQlzaXplb2Yoc3RydWN0IHpmY3BfZGJmX2hiYV9yZWNvcmQpKTsKKwlzcHJpbnRmKG5hbWUsICJ6ZmNwXyVzX2hiYSIsIGRldl9uYW1lKCZhZGFwdGVyLT5jY3dfZGV2aWNlLT5kZXYpKTsKKwlkYmYtPmhiYSA9IHpmY3BfZGJmX3JlZyhuYW1lLCBkYmZzaXplLCBzaXplb2Yoc3RydWN0IHpmY3BfZGJmX2hiYSkpOwogCWlmICghZGJmLT5oYmEpCiAJCWdvdG8gZXJyX291dDsKIAorCS8qIGRlYnVnIGZlYXR1cmUgYXJlYSB3aGljaCByZWNvcmRzIHBheWxvYWQgaW5mbyAqLworCXNwcmludGYobmFtZSwgInpmY3BfJXNfcGF5IiwgZGV2X25hbWUoJmFkYXB0ZXItPmNjd19kZXZpY2UtPmRldikpOworCWRiZi0+cGF5ID0gemZjcF9kYmZfcmVnKG5hbWUsIGRiZnNpemUgKiAyLCBzaXplb2Yoc3RydWN0IHpmY3BfZGJmX3BheSkpOworCWlmICghZGJmLT5wYXkpCisJCWdvdG8gZXJyX291dDsKKwogCS8qIGRlYnVnIGZlYXR1cmUgYXJlYSB3aGljaCByZWNvcmRzIFNBTiBjb21tYW5kIGZhaWx1cmVzIGFuZCByZWNvdmVyeSAqLwotCXNwcmludGYoZGJmX25hbWUsICJ6ZmNwXyVzX3NhbiIsIGRldl9uYW1lKCZhZGFwdGVyLT5jY3dfZGV2aWNlLT5kZXYpKTsKLQlkYmYtPnNhbiA9IHpmY3BfZGJmX3JlZyhkYmZfbmFtZSwgNiwgJnpmY3BfZGJmX3Nhbl92aWV3LAotCQkJCXNpemVvZihzdHJ1Y3QgemZjcF9kYmZfc2FuX3JlY29yZCkpOworCXNwcmludGYobmFtZSwgInpmY3BfJXNfc2FuIiwgZGV2X25hbWUoJmFkYXB0ZXItPmNjd19kZXZpY2UtPmRldikpOworCWRiZi0+c2FuID0gemZjcF9kYmZfcmVnKG5hbWUsIGRiZnNpemUsIHNpemVvZihzdHJ1Y3QgemZjcF9kYmZfc2FuKSk7CiAJaWYgKCFkYmYtPnNhbikKIAkJZ290byBlcnJfb3V0OwogCiAJLyogZGVidWcgZmVhdHVyZSBhcmVhIHdoaWNoIHJlY29yZHMgU0NTSSBjb21tYW5kIGZhaWx1cmVzIGFuZCByZWNvdmVyeSAqLwotCXNwcmludGYoZGJmX25hbWUsICJ6ZmNwXyVzX3Njc2kiLCBkZXZfbmFtZSgmYWRhcHRlci0+Y2N3X2RldmljZS0+ZGV2KSk7Ci0JZGJmLT5zY3NpID0gemZjcF9kYmZfcmVnKGRiZl9uYW1lLCAzLCAmemZjcF9kYmZfc2NzaV92aWV3LAotCQkJCSBzaXplb2Yoc3RydWN0IHpmY3BfZGJmX3Njc2lfcmVjb3JkKSk7CisJc3ByaW50ZihuYW1lLCAiemZjcF8lc19zY3NpIiwgZGV2X25hbWUoJmFkYXB0ZXItPmNjd19kZXZpY2UtPmRldikpOworCWRiZi0+c2NzaSA9IHpmY3BfZGJmX3JlZyhuYW1lLCBkYmZzaXplLCBzaXplb2Yoc3RydWN0IHpmY3BfZGJmX3Njc2kpKTsKIAlpZiAoIWRiZi0+c2NzaSkKIAkJZ290byBlcnJfb3V0OwogCiAJYWRhcHRlci0+ZGJmID0gZGJmOwotCXJldHVybiAwOwogCisJcmV0dXJuIDA7CiBlcnJfb3V0OgotCXpmY3BfZGJmX2FkYXB0ZXJfdW5yZWdpc3RlcihkYmYpOworCXpmY3BfZGJmX3VucmVnaXN0ZXIoZGJmKTsKIAlyZXR1cm4gLUVOT01FTTsKIH0KIAogLyoqCiAgKiB6ZmNwX2FkYXB0ZXJfZGVidWdfdW5yZWdpc3RlciAtIHVucmVnaXN0ZXJzIGRlYnVnIGZlYXR1cmUgZm9yIGFuIGFkYXB0ZXIKLSAqIEBkYmY6IHBvaW50ZXIgdG8gZGJmIGZvciB3aGljaCBkZWJ1ZyBmZWF0dXJlcyBzaG91bGQgYmUgdW5yZWdpc3RlcmVkCisgKiBAYWRhcHRlcjogcG9pbnRlciB0byBhZGFwdGVyIGZvciB3aGljaCBkZWJ1ZyBmZWF0dXJlcyBzaG91bGQgYmUgdW5yZWdpc3RlcmVkCiAgKi8KLXZvaWQgemZjcF9kYmZfYWRhcHRlcl91bnJlZ2lzdGVyKHN0cnVjdCB6ZmNwX2RiZiAqZGJmKQordm9pZCB6ZmNwX2RiZl9hZGFwdGVyX3VucmVnaXN0ZXIoc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcikKIHsKLQlpZiAoIWRiZikKLQkJcmV0dXJuOwotCWRlYnVnX3VucmVnaXN0ZXIoZGJmLT5zY3NpKTsKLQlkZWJ1Z191bnJlZ2lzdGVyKGRiZi0+c2FuKTsKLQlkZWJ1Z191bnJlZ2lzdGVyKGRiZi0+aGJhKTsKLQlkZWJ1Z191bnJlZ2lzdGVyKGRiZi0+cmVjKTsKLQlkYmYtPmFkYXB0ZXItPmRiZiA9IE5VTEw7Ci0Ja2ZyZWUoZGJmKTsKKwlzdHJ1Y3QgemZjcF9kYmYgKmRiZiA9IGFkYXB0ZXItPmRiZjsKKworCWFkYXB0ZXItPmRiZiA9IE5VTEw7CisJemZjcF9kYmZfdW5yZWdpc3RlcihkYmYpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2RiZi5oIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9kYmYuaAppbmRleCAwNDA4MWIxLi43MTRmMDg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2RiZi5oCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZGJmLmgKQEAgLTEsMjIgKzEsOCBAQAogLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSB6ZmNwIGRldmljZSBkcml2ZXIgZm9yCi0gKiBGQ1AgYWRhcHRlcnMgZm9yIElCTSBTeXN0ZW0gejkgYW5kIHpTZXJpZXMuCisgKiB6ZmNwIGRldmljZSBkcml2ZXIKKyAqIGRlYnVnIGZlYXR1cmUgZGVjbGFyYXRpb25zCiAgKgotICogQ29weXJpZ2h0IElCTSBDb3JwLiAyMDA4LCAyMDA5Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKiBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDgsIDIwMTAKICAqLwogCiAjaWZuZGVmIFpGQ1BfREJGX0gKQEAgLTI3LDMyMiArMTMsMzUwIEBACiAjaW5jbHVkZSAiemZjcF9mc2YuaCIKICNpbmNsdWRlICJ6ZmNwX2RlZi5oIgogCi0jZGVmaW5lIFpGQ1BfREJGX1RBR19TSVpFICAgICAgNAotI2RlZmluZSBaRkNQX0RCRl9JRF9TSVpFICAgICAgIDcKKyNkZWZpbmUgWkZDUF9EQkZfVEFHX0xFTiAgICAgICA3CiAKICNkZWZpbmUgWkZDUF9EQkZfSU5WQUxJRF9MVU4JMHhGRkZGRkZGRkZGRkZGRkZGdWxsCiAKLXN0cnVjdCB6ZmNwX2RiZl9kdW1wIHsKLQl1OCB0YWdbWkZDUF9EQkZfVEFHX1NJWkVdOwotCXUzMiB0b3RhbF9zaXplOwkJLyogc2l6ZSBvZiB0b3RhbCBkdW1wIGRhdGEgKi8KLQl1MzIgb2Zmc2V0OwkJLyogaG93IG11Y2ggZGF0YSBoYXMgYmVpbmcgYWxyZWFkeSBkdW1wZWQgKi8KLQl1MzIgc2l6ZTsJCS8qIGhvdyBtdWNoIGRhdGEgY29tZXMgd2l0aCB0aGlzIHJlY29yZCAqLwotCXU4IGRhdGFbXTsJCS8qIGR1bXAgZGF0YSAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCB6ZmNwX2RiZl9yZWNfcmVjb3JkX3RocmVhZCB7Ci0JdTMyIHRvdGFsOworLyoqCisgKiBzdHJ1Y3QgemZjcF9kYmZfcmVjX3RyaWdnZXIgLSB0cmFjZSByZWNvcmQgZm9yIHRyaWdnZXJlZCByZWNvdmVyeSBhY3Rpb24KKyAqIEByZWFkeTogbnVtYmVyIG9mIHJlYWR5IHJlY292ZXJ5IGFjdGlvbnMKKyAqIEBydW5uaW5nOiBudW1iZXIgb2YgcnVubmluZyByZWNvdmVyeSBhY3Rpb25zCisgKiBAd2FudDogd2FudGVkIHJlY292ZXJ5IGFjdGlvbgorICogQG5lZWQ6IG5lZWRlZCByZWNvdmVyeSBhY3Rpb24KKyAqLworc3RydWN0IHpmY3BfZGJmX3JlY190cmlnZ2VyIHsKIAl1MzIgcmVhZHk7CiAJdTMyIHJ1bm5pbmc7Ci19OwotCi1zdHJ1Y3QgemZjcF9kYmZfcmVjX3JlY29yZF90YXJnZXQgewotCXU2NCByZWY7Ci0JdTMyIHN0YXR1czsKLQl1MzIgZF9pZDsKLQl1NjQgd3dwbjsKLQl1NjQgZmNwX2x1bjsKLQl1MzIgZXJwX2NvdW50OwotfTsKLQotc3RydWN0IHpmY3BfZGJmX3JlY19yZWNvcmRfdHJpZ2dlciB7CiAJdTggd2FudDsKIAl1OCBuZWVkOwotCXUzMiBhczsKLQl1MzIgcHM7Ci0JdTMyIGxzOwotCXU2NCByZWY7Ci0JdTY0IGFjdGlvbjsKLQl1NjQgd3dwbjsKLQl1NjQgZmNwX2x1bjsKK30gX19wYWNrZWQ7CisKKy8qKgorICogc3RydWN0IHpmY3BfZGJmX3JlY19ydW5uaW5nIC0gdHJhY2UgcmVjb3JkIGZvciBydW5uaW5nIHJlY292ZXJ5CisgKiBAZnNmX3JlcV9pZDogcmVxdWVzdCBpZCBmb3IgZnNmIHJlcXVlc3RzCisgKiBAcmVjX3N0YXR1czogc3RhdHVzIG9mIHRoZSBmc2YgcmVxdWVzdAorICogQHJlY19zdGVwOiBjdXJyZW50IHN0ZXAgb2YgdGhlIHJlY292ZXJ5IGFjdGlvbgorICogcmVjX2NvdW50OiByZWNvdmVyeSBjb3VudGVyCisgKi8KK3N0cnVjdCB6ZmNwX2RiZl9yZWNfcnVubmluZyB7CisJdTY0IGZzZl9yZXFfaWQ7CisJdTMyIHJlY19zdGF0dXM7CisJdTE2IHJlY19zdGVwOworCXU4IHJlY19hY3Rpb247CisJdTggcmVjX2NvdW50OworfSBfX3BhY2tlZDsKKworLyoqCisgKiBlbnVtIHpmY3BfZGJmX3JlY19pZCAtIHJlY292ZXJ5IHRyYWNlIHJlY29yZCBpZAorICogQFpGQ1BfREJGX1JFQ19UUklHOiB0cmlnZ2VyZWQgcmVjb3ZlcnkgaWRlbnRpZmllcgorICogQFpGQ1BfREJGX1JFQ19SVU46IHJ1bm5pbmcgcmVjb3ZlcnkgaWRlbnRpZmllcgorICovCitlbnVtIHpmY3BfZGJmX3JlY19pZCB7CisJWkZDUF9EQkZfUkVDX1RSSUcJPSAxLAorCVpGQ1BfREJGX1JFQ19SVU4JPSAyLAogfTsKIAotc3RydWN0IHpmY3BfZGJmX3JlY19yZWNvcmRfYWN0aW9uIHsKLQl1MzIgc3RhdHVzOwotCXUzMiBzdGVwOwotCXU2NCBhY3Rpb247Ci0JdTY0IGZzZl9yZXE7Ci19OwotCi1zdHJ1Y3QgemZjcF9kYmZfcmVjX3JlY29yZCB7CisvKioKKyAqIHN0cnVjdCB6ZmNwX2RiZl9yZWMgLSB0cmFjZSByZWNvcmQgZm9yIGVycm9yIHJlY292ZXJ5IGFjdGlvbnMKKyAqIEBpZDogdW5pcXVlIG51bWJlciBvZiByZWNvdmVyeSByZWNvcmQgdHlwZQorICogQHRhZzogaWRlbnRpZmllciBzdHJpbmcgc3BlY2lmeWluZyB0aGUgbG9jYXRpb24gb2YgaW5pdGlhdGlvbgorICogQGx1bjogbG9naWNhbCB1bml0IG51bWJlcgorICogQHd3cG46IHdvcmQgd2lkZSBwb3J0IG51bWJlcgorICogQGRfaWQ6IGRlc3RpbmF0aW9uIElECisgKiBAYWRhcHRlcl9zdGF0dXM6IGN1cnJlbnQgc3RhdHVzIG9mIHRoZSBhZGFwdGVyCisgKiBAcG9ydF9zdGF0dXM6IGN1cnJlbnQgc3RhdHVzIG9mIHRoZSBwb3J0CisgKiBAbHVuX3N0YXR1czogY3VycmVudCBzdGF0dXMgb2YgdGhlIGx1bgorICogQHUudHJpZzogc3RydWN0dXJlIHpmY3BfZGJmX3JlY190cmlnZ2VyCisgKiBAdS5ydW46IHN0cnVjdHVyZSB6ZmNwX2RiZl9yZWNfcnVubmluZworICovCitzdHJ1Y3QgemZjcF9kYmZfcmVjIHsKIAl1OCBpZDsKLQljaGFyIGlkMls3XTsKKwljaGFyIHRhZ1taRkNQX0RCRl9UQUdfTEVOXTsKKwl1NjQgbHVuOworCXU2NCB3d3BuOworCXUzMiBkX2lkOworCXUzMiBhZGFwdGVyX3N0YXR1czsKKwl1MzIgcG9ydF9zdGF0dXM7CisJdTMyIGx1bl9zdGF0dXM7CiAJdW5pb24gewotCQlzdHJ1Y3QgemZjcF9kYmZfcmVjX3JlY29yZF9hY3Rpb24gYWN0aW9uOwotCQlzdHJ1Y3QgemZjcF9kYmZfcmVjX3JlY29yZF90aHJlYWQgdGhyZWFkOwotCQlzdHJ1Y3QgemZjcF9kYmZfcmVjX3JlY29yZF90YXJnZXQgdGFyZ2V0OwotCQlzdHJ1Y3QgemZjcF9kYmZfcmVjX3JlY29yZF90cmlnZ2VyIHRyaWdnZXI7CisJCXN0cnVjdCB6ZmNwX2RiZl9yZWNfdHJpZ2dlciB0cmlnOworCQlzdHJ1Y3QgemZjcF9kYmZfcmVjX3J1bm5pbmcgcnVuOwogCX0gdTsKK30gX19wYWNrZWQ7CisKKy8qKgorICogZW51bSB6ZmNwX2RiZl9zYW5faWQgLSBTQU4gdHJhY2UgcmVjb3JkIGlkZW50aWZpZXIKKyAqIEBaRkNQX0RCRl9TQU5fUkVROiByZXF1ZXN0IHRyYWNlIHJlY29yZCBpZAorICogQFpGQ1BfREJGX1NBTl9SRVM6IHJlc3BvbnNlIHRyYWNlIHJlY29yZCBpZAorICogQFpGQ1BfREJGX1NBTl9FTFM6IGV4dGVuZGVkIGxpbmsgc2VydmljZSByZWNvcmQgaWQKKyAqLworZW51bSB6ZmNwX2RiZl9zYW5faWQgeworCVpGQ1BfREJGX1NBTl9SRVEJPSAxLAorCVpGQ1BfREJGX1NBTl9SRVMJPSAyLAorCVpGQ1BfREJGX1NBTl9FTFMJPSAzLAogfTsKIAotZW51bSB7Ci0JWkZDUF9SRUNfREJGX0lEX0FDVElPTiwKLQlaRkNQX1JFQ19EQkZfSURfVEhSRUFELAotCVpGQ1BfUkVDX0RCRl9JRF9UQVJHRVQsCi0JWkZDUF9SRUNfREJGX0lEX1RSSUdHRVIsCi19OworLyoqIHN0cnVjdCB6ZmNwX2RiZl9zYW4gLSB0cmFjZSByZWNvcmQgZm9yIFNBTiByZXF1ZXN0cyBhbmQgcmVzcG9uc2VzCisgKiBAaWQ6IHVuaXF1ZSBudW1iZXIgb2YgcmVjb3ZlcnkgcmVjb3JkIHR5cGUKKyAqIEB0YWc6IGlkZW50aWZpZXIgc3RyaW5nIHNwZWNpZnlpbmcgdGhlIGxvY2F0aW9uIG9mIGluaXRpYXRpb24KKyAqIEBmc2ZfcmVxX2lkOiByZXF1ZXN0IGlkIGZvciBmc2YgcmVxdWVzdHMKKyAqIEBwYXlsb2FkOiB1bmZvcm1hdHRlZCBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIHJlcXVlc3QvcmVzcG9uc2UKKyAqIEBkX2lkOiBkZXN0aW5hdGlvbiBpZAorICovCitzdHJ1Y3QgemZjcF9kYmZfc2FuIHsKKwl1OCBpZDsKKwljaGFyIHRhZ1taRkNQX0RCRl9UQUdfTEVOXTsKKwl1NjQgZnNmX3JlcV9pZDsKKwl1MzIgZF9pZDsKKyNkZWZpbmUgWkZDUF9EQkZfU0FOX01BWF9QQVlMT0FEIChGQ19DVF9IRFJfTEVOICsgMzIpCisJY2hhciBwYXlsb2FkW1pGQ1BfREJGX1NBTl9NQVhfUEFZTE9BRF07Cit9IF9fcGFja2VkOwogCi1zdHJ1Y3QgemZjcF9kYmZfaGJhX3JlY29yZF9yZXNwb25zZSB7Ci0JdTMyIGZzZl9jb21tYW5kOwotCXU2NCBmc2ZfcmVxaWQ7Ci0JdTMyIGZzZl9zZXFubzsKLQl1NjQgZnNmX2lzc3VlZDsKLQl1MzIgZnNmX3Byb3Rfc3RhdHVzOworLyoqCisgKiBzdHJ1Y3QgemZjcF9kYmZfaGJhX3JlcyAtIHRyYWNlIHJlY29yZCBmb3IgaGJhIHJlc3BvbnNlcworICogQHJlcV9pc3N1ZWQ6IHRpbWVzdGFtcCB3aGVuIHJlcXVlc3Qgd2FzIGlzc3VlZAorICogQHByb3Rfc3RhdHVzOiBwcm90b2NvbCBzdGF0dXMKKyAqIEBwcm90X3N0YXR1c19xdWFsOiBwcm90b2NvbCBzdGF0dXMgcXVhbGlmaWVyCisgKiBAZnNmX3N0YXR1czogZnNmIHN0YXR1cworICogQGZzZl9zdGF0dXNfcXVhbDogZnNmIHN0YXR1cyBxdWFsaWZpZXIKKyAqLworc3RydWN0IHpmY3BfZGJmX2hiYV9yZXMgeworCXU2NCByZXFfaXNzdWVkOworCXUzMiBwcm90X3N0YXR1czsKKwl1OCAgcHJvdF9zdGF0dXNfcXVhbFtGU0ZfUFJPVF9TVEFUVVNfUVVBTF9TSVpFXTsKIAl1MzIgZnNmX3N0YXR1czsKLQl1OCBmc2ZfcHJvdF9zdGF0dXNfcXVhbFtGU0ZfUFJPVF9TVEFUVVNfUVVBTF9TSVpFXTsKLQl1OCBmc2Zfc3RhdHVzX3F1YWxbRlNGX1NUQVRVU19RVUFMSUZJRVJfU0laRV07Ci0JdTMyIGZzZl9yZXFfc3RhdHVzOwotCXU4IHNiYWxfZmlyc3Q7Ci0JdTggc2JhbF9sYXN0OwotCXU4IHNiYWxfcmVzcG9uc2U7Ci0JdTggcG9vbDsKLQl1NjQgZXJwX2FjdGlvbjsKLQl1bmlvbiB7Ci0JCXN0cnVjdCB7Ci0JCQl1NjQgY21uZDsKLQkJCXUzMiBkYXRhX2RpcjsKLQkJfSBmY3A7Ci0JCXN0cnVjdCB7Ci0JCQl1NjQgd3dwbjsKLQkJCXUzMiBkX2lkOwotCQkJdTMyIHBvcnRfaGFuZGxlOwotCQl9IHBvcnQ7Ci0JCXN0cnVjdCB7Ci0JCQl1NjQgd3dwbjsKLQkJCXU2NCBmY3BfbHVuOwotCQkJdTMyIHBvcnRfaGFuZGxlOwotCQkJdTMyIGx1bl9oYW5kbGU7Ci0JCX0gdW5pdDsKLQkJc3RydWN0IHsKLQkJCXUzMiBkX2lkOwotCQl9IGVsczsKLQl9IHU7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwl1OCAgZnNmX3N0YXR1c19xdWFsW0ZTRl9TVEFUVVNfUVVBTElGSUVSX1NJWkVdOworfSBfX3BhY2tlZDsKIAotc3RydWN0IHpmY3BfZGJmX2hiYV9yZWNvcmRfc3RhdHVzIHsKLQl1OCBmYWlsZWQ7CisvKioKKyAqIHN0cnVjdCB6ZmNwX2RiZl9oYmFfdXNzIC0gdHJhY2UgcmVjb3JkIGZvciB1bnNvbGljaXRlZCBzdGF0dXMKKyAqIEBzdGF0dXNfdHlwZTogdHlwZSBvZiB1bnNvbGljaXRlZCBzdGF0dXMKKyAqIEBzdGF0dXNfc3VidHlwZTogc3VidHlwZSBvZiB1bnNvbGljaXRlZCBzdGF0dXMKKyAqIEBkX2lkOiBkZXN0aW5hdGlvbiBJRAorICogQGx1bjogbG9naWNhbCB1bml0IG51bWJlcgorICogQHF1ZXVlX2Rlc2lnbmF0b3I6IHF1ZXVlIGRlc2lnbmF0b3IKKyAqLworc3RydWN0IHpmY3BfZGJmX2hiYV91c3MgewogCXUzMiBzdGF0dXNfdHlwZTsKIAl1MzIgc3RhdHVzX3N1YnR5cGU7Ci0Jc3RydWN0IGZzZl9xdWV1ZV9kZXNpZ25hdG9yCi0JIHF1ZXVlX2Rlc2lnbmF0b3I7Ci0JdTMyIHBheWxvYWRfc2l6ZTsKLSNkZWZpbmUgWkZDUF9EQkZfVU5TT0xfUEFZTE9BRAkJCQk4MAotI2RlZmluZSBaRkNQX0RCRl9VTlNPTF9QQVlMT0FEX1NFTlNFX0RBVEFfQVZBSUwJCTMyCi0jZGVmaW5lIFpGQ1BfREJGX1VOU09MX1BBWUxPQURfQklUX0VSUk9SX1RIUkVTSE9MRAk1NgotI2RlZmluZSBaRkNQX0RCRl9VTlNPTF9QQVlMT0FEX0ZFQVRVUkVfVVBEQVRFX0FMRVJUCTIgKiBzaXplb2YodTMyKQotCXU4IHBheWxvYWRbWkZDUF9EQkZfVU5TT0xfUEFZTE9BRF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IHpmY3BfZGJmX2hiYV9yZWNvcmRfcWRpbyB7Ci0JdTMyIHFkaW9fZXJyb3I7Ci0JdTggc2JhbF9pbmRleDsKLQl1OCBzYmFsX2NvdW50OwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCB6ZmNwX2RiZl9oYmFfcmVjb3JkIHsKLQl1OCB0YWdbWkZDUF9EQkZfVEFHX1NJWkVdOwotCXU4IHRhZzJbWkZDUF9EQkZfVEFHX1NJWkVdOwotCXVuaW9uIHsKLQkJc3RydWN0IHpmY3BfZGJmX2hiYV9yZWNvcmRfcmVzcG9uc2UgcmVzcG9uc2U7Ci0JCXN0cnVjdCB6ZmNwX2RiZl9oYmFfcmVjb3JkX3N0YXR1cyBzdGF0dXM7Ci0JCXN0cnVjdCB6ZmNwX2RiZl9oYmFfcmVjb3JkX3FkaW8gcWRpbzsKLQkJc3RydWN0IGZzZl9iaXRfZXJyb3JfcGF5bG9hZCBiZXJyOwotCX0gdTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgemZjcF9kYmZfc2FuX3JlY29yZF9jdF9yZXF1ZXN0IHsKLQl1MTYgY21kX3JlcV9jb2RlOwotCXU4IHJldmlzaW9uOwotCXU4IGdzX3R5cGU7Ci0JdTggZ3Nfc3VidHlwZTsKLQl1OCBvcHRpb25zOwotCXUxNiBtYXhfcmVzX3NpemU7Ci0JdTMyIGxlbjsKIAl1MzIgZF9pZDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCXU2NCBsdW47CisJdTY0IHF1ZXVlX2Rlc2lnbmF0b3I7Cit9IF9fcGFja2VkOwogCi1zdHJ1Y3QgemZjcF9kYmZfc2FuX3JlY29yZF9jdF9yZXNwb25zZSB7Ci0JdTE2IGNtZF9yc3BfY29kZTsKLQl1OCByZXZpc2lvbjsKLQl1OCByZWFzb25fY29kZTsKLQl1OCBleHBsOwotCXU4IHZlbmRvcl91bmlxdWU7Ci0JdTE2IG1heF9yZXNfc2l6ZTsKLQl1MzIgbGVuOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisvKioKKyAqIGVudW0gemZjcF9kYmZfaGJhX2lkIC0gSEJBIHRyYWNlIHJlY29yZCBpZGVudGlmaWVyCisgKiBAWkZDUF9EQkZfSEJBX1JFUzogcmVzcG9uc2UgdHJhY2UgcmVjb3JkCisgKiBAWkZDUF9EQkZfSEJBX1VTUzogdW5zb2xpY2l0ZWQgc3RhdHVzIHRyYWNlIHJlY29yZAorICogQFpGQ1BfREJGX0hCQV9CSVQ6IGJpdCBlcnJvciB0cmFjZSByZWNvcmQKKyAqLworZW51bSB6ZmNwX2RiZl9oYmFfaWQgeworCVpGQ1BfREJGX0hCQV9SRVMJPSAxLAorCVpGQ1BfREJGX0hCQV9VU1MJPSAyLAorCVpGQ1BfREJGX0hCQV9CSVQJPSAzLAorfTsKIAotc3RydWN0IHpmY3BfZGJmX3Nhbl9yZWNvcmRfZWxzIHsKLQl1MzIgZF9pZDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgemZjcF9kYmZfc2FuX3JlY29yZCB7Ci0JdTggdGFnW1pGQ1BfREJGX1RBR19TSVpFXTsKLQl1NjQgZnNmX3JlcWlkOwotCXUzMiBmc2Zfc2Vxbm87CisvKioKKyAqIHN0cnVjdCB6ZmNwX2RiZl9oYmEgLSBjb21tb24gdHJhY2UgcmVjb3JkIGZvciBIQkEgcmVjb3JkcworICogQGlkOiB1bmlxdWUgbnVtYmVyIG9mIHJlY292ZXJ5IHJlY29yZCB0eXBlCisgKiBAdGFnOiBpZGVudGlmaWVyIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSBsb2NhdGlvbiBvZiBpbml0aWF0aW9uCisgKiBAZnNmX3JlcV9pZDogcmVxdWVzdCBpZCBmb3IgZnNmIHJlcXVlc3RzCisgKiBAZnNmX3JlcV9zdGF0dXM6IHN0YXR1cyBvZiBmc2YgcmVxdWVzdAorICogQGZzZl9jbWQ6IGZzZiBjb21tYW5kCisgKiBAZnNmX3NlcV9ubzogZnNmIHNlcXVlbmNlIG51bWJlcgorICogQHBsX2xlbjogbGVuZ3RoIG9mIHBheWxvYWQgc3RvcmVkIGFzIHpmY3BfZGJmX3BheQorICogQHU6IHJlY29yZCB0eXBlIHNwZWNpZmljIGRhdGEKKyAqLworc3RydWN0IHpmY3BfZGJmX2hiYSB7CisJdTggaWQ7CisJY2hhciB0YWdbWkZDUF9EQkZfVEFHX0xFTl07CisJdTY0IGZzZl9yZXFfaWQ7CisJdTMyIGZzZl9yZXFfc3RhdHVzOworCXUzMiBmc2ZfY21kOworCXUzMiBmc2Zfc2VxX25vOworCXUxNiBwbF9sZW47CiAJdW5pb24gewotCQlzdHJ1Y3QgemZjcF9kYmZfc2FuX3JlY29yZF9jdF9yZXF1ZXN0IGN0X3JlcTsKLQkJc3RydWN0IHpmY3BfZGJmX3Nhbl9yZWNvcmRfY3RfcmVzcG9uc2UgY3RfcmVzcDsKLQkJc3RydWN0IHpmY3BfZGJmX3Nhbl9yZWNvcmRfZWxzIGVsczsKKwkJc3RydWN0IHpmY3BfZGJmX2hiYV9yZXMgcmVzOworCQlzdHJ1Y3QgemZjcF9kYmZfaGJhX3VzcyB1c3M7CisJCXN0cnVjdCBmc2ZfYml0X2Vycm9yX3BheWxvYWQgYmU7CiAJfSB1OwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCi0jZGVmaW5lIFpGQ1BfREJGX1NBTl9NQVhfUEFZTE9BRCAxMDI0CisvKioKKyAqIGVudW0gemZjcF9kYmZfc2NzaV9pZCAtIHNjc2kgdHJhY2UgcmVjb3JkIGlkZW50aWZpZXIKKyAqIEBaRkNQX0RCRl9TQ1NJX0NNTkQ6IHNjc2kgY29tbWFuZCB0cmFjZSByZWNvcmQKKyAqLworZW51bSB6ZmNwX2RiZl9zY3NpX2lkIHsKKwlaRkNQX0RCRl9TQ1NJX0NNTkQJPSAxLAorfTsKIAotc3RydWN0IHpmY3BfZGJmX3Njc2lfcmVjb3JkIHsKLQl1OCB0YWdbWkZDUF9EQkZfVEFHX1NJWkVdOwotCXU4IHRhZzJbWkZDUF9EQkZfVEFHX1NJWkVdOworLyoqCisgKiBzdHJ1Y3QgemZjcF9kYmZfc2NzaSAtIGNvbW1vbiB0cmFjZSByZWNvcmQgZm9yIFNDU0kgcmVjb3JkcworICogQGlkOiB1bmlxdWUgbnVtYmVyIG9mIHJlY292ZXJ5IHJlY29yZCB0eXBlCisgKiBAdGFnOiBpZGVudGlmaWVyIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSBsb2NhdGlvbiBvZiBpbml0aWF0aW9uCisgKiBAc2NzaV9pZDogc2NzaSBkZXZpY2UgaWQKKyAqIEBzY3NpX2x1bjogc2NzaSBkZXZpY2UgbG9naWNhbCB1bml0IG51bWJlcgorICogQHNjc2lfcmVzdWx0OiBzY3NpIHJlc3VsdAorICogQHNjc2lfcmV0cmllczogY3VycmVudCByZXRyeSBudW1iZXIgb2Ygc2NzaSByZXF1ZXN0CisgKiBAc2NzaV9hbGxvd2VkOiBhbGxvd2VkIHJldHJpZXMKKyAqIEBmY3BfcnNwX2luZm86IEZDUCByZXNwb25zZSBpbmZvCisgKiBAc2NzaV9vcGNvZGU6IHNjc2kgb3Bjb2RlCisgKiBAZnNmX3JlcV9pZDogcmVxdWVzdCBpZCBvZiBmc2YgcmVxdWVzdAorICogQGhvc3Rfc2NyaWJibGU6IExMRCBzcGVjaWZpYyBkYXRhIGF0dGFjaGVkIHRvIFNDU0kgcmVxdWVzdAorICogQHBsX2xlbjogbGVuZ3RoIG9mIHBhbG9hZCBzdG9yZWQgYXMgemZjcF9kYmZfcGF5CisgKiBAZnNmX3JzcDogcmVzcG9uc2UgZm9yIGZzZiByZXF1ZXN0CisgKi8KK3N0cnVjdCB6ZmNwX2RiZl9zY3NpIHsKKwl1OCBpZDsKKwljaGFyIHRhZ1taRkNQX0RCRl9UQUdfTEVOXTsKIAl1MzIgc2NzaV9pZDsKIAl1MzIgc2NzaV9sdW47CiAJdTMyIHNjc2lfcmVzdWx0OwotCXU2NCBzY3NpX2NtbmQ7Ci0jZGVmaW5lIFpGQ1BfREJGX1NDU0lfT1BDT0RFCTE2Ci0JdTggc2NzaV9vcGNvZGVbWkZDUF9EQkZfU0NTSV9PUENPREVdOwogCXU4IHNjc2lfcmV0cmllczsKIAl1OCBzY3NpX2FsbG93ZWQ7Ci0JdTY0IGZzZl9yZXFpZDsKLQl1MzIgZnNmX3NlcW5vOwotCXU2NCBmc2ZfaXNzdWVkOwotCXU2NCBvbGRfZnNmX3JlcWlkOwotCXU4IHJzcF92YWxpZGl0eTsKLQl1OCByc3Bfc2NzaV9zdGF0dXM7Ci0JdTMyIHJzcF9yZXNpZDsKLQl1OCByc3BfY29kZTsKLSNkZWZpbmUgWkZDUF9EQkZfU0NTSV9GQ1BfU05TX0lORk8JMTYKLSNkZWZpbmUgWkZDUF9EQkZfU0NTSV9NQVhfRkNQX1NOU19JTkZPCTI1NgotCXUzMiBzbnNfaW5mb19sZW47Ci0JdTggc25zX2luZm9bWkZDUF9EQkZfU0NTSV9GQ1BfU05TX0lORk9dOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisJdTggZmNwX3JzcF9pbmZvOworI2RlZmluZSBaRkNQX0RCRl9TQ1NJX09QQ09ERQkxNgorCXU4IHNjc2lfb3Bjb2RlW1pGQ1BfREJGX1NDU0lfT1BDT0RFXTsKKwl1NjQgZnNmX3JlcV9pZDsKKwl1NjQgaG9zdF9zY3JpYmJsZTsKKwl1MTYgcGxfbGVuOworCXN0cnVjdCBmY3BfcmVzcF93aXRoX2V4dCBmY3BfcnNwOworfSBfX3BhY2tlZDsKIAorLyoqCisgKiBzdHJ1Y3QgemZjcF9kYmZfcGF5IC0gdHJhY2UgcmVjb3JkIGZvciB1bmZvcm1hdHRlZCBwYXlsb2FkIGluZm9ybWF0aW9uCisgKiBAYXJlYTogYXJlYSB0aGlzIHJlY29yZCBpcyBvcmlnaW5hdGVkIGZyb20KKyAqIEBjb3VudGVyOiBhc2NlbmRpbmcgcmVjb3JkIG51bWJlcgorICogQGZzZl9yZXFfaWQ6IHJlcXVlc3QgaWQgb2YgZnNmIHJlcXVlc3QKKyAqIEBkYXRhOiB1bmZvcm1hdHRlZCBkYXRhCisgKi8KK3N0cnVjdCB6ZmNwX2RiZl9wYXkgeworCXU4IGNvdW50ZXI7CisJY2hhciBhcmVhW1pGQ1BfREJGX1RBR19MRU5dOworCXU2NCBmc2ZfcmVxX2lkOworI2RlZmluZSBaRkNQX0RCRl9QQVlfTUFYX1JFQyAweDEwMAorCWNoYXIgZGF0YVtaRkNQX0RCRl9QQVlfTUFYX1JFQ107Cit9IF9fcGFja2VkOworCisvKioKKyAqIHN0cnVjdCB6ZmNwX2RiZiAtIG1haW4gZGJmIHRyYWNlIHN0cnVjdHVyZQorICogQHBheTogcmVmZXJlbmNlIHRvIHBheWxvYWQgdHJhY2UgYXJlYQorICogQHJlYzogcmVmZXJlbmNlIHRvIHJlY292ZXJ5IHRyYWNlIGFyZWEKKyAqIEBoYmE6IHJlZmVyZW5jZSB0byBoYmEgdHJhY2UgYXJlYQorICogQHNhbjogcmVmZXJlbmNlIHRvIHNhbiB0cmFjZSBhcmVhCisgKiBAc2NzaTogcmVmZXJlbmNlIHRvIHNjc2kgdHJhY2UgYXJlYQorICogQHBheV9sb2NrOiBsb2NrIHByb3RlY3RpbmcgcGF5bG9hZCB0cmFjZSBidWZmZXIKKyAqIEByZWNfbG9jazogbG9jayBwcm90ZWN0aW5nIHJlY292ZXJ5IHRyYWNlIGJ1ZmZlcgorICogQGhiYV9sb2NrOiBsb2NrIHByb3RlY3RpbmcgaGJhIHRyYWNlIGJ1ZmZlcgorICogQHNhbl9sb2NrOiBsb2NrIHByb3RlY3Rpbmcgc2FuIHRyYWNlIGJ1ZmZlcgorICogQHNjc2lfbG9jazogbG9jayBwcm90ZWN0aW5nIHNjc2kgdHJhY2UgYnVmZmVyCisgKiBAcGF5X2J1ZjogcHJlLWFsbG9jYXRlZCBidWZmZXIgZm9yIHBheWxvYWQKKyAqIEByZWNfYnVmOiBwcmUtYWxsb2NhdGVkIGJ1ZmZlciBmb3IgcmVjb3ZlcnkKKyAqIEBoYmFfYnVmOiBwcmUtYWxsb2NhdGVkIGJ1ZmZlciBmb3IgaGJhCisgKiBAc2FuX2J1ZjogcHJlLWFsbG9jYXRlZCBidWZmZXIgZm9yIHNhbgorICogQHNjc2lfYnVmOiBwcmUtYWxsb2NhdGVkIGJ1ZmZlciBmb3Igc2NzaQorICovCiBzdHJ1Y3QgemZjcF9kYmYgeworCWRlYnVnX2luZm9fdAkJCSpwYXk7CiAJZGVidWdfaW5mb190CQkJKnJlYzsKIAlkZWJ1Z19pbmZvX3QJCQkqaGJhOwogCWRlYnVnX2luZm9fdAkJCSpzYW47CiAJZGVidWdfaW5mb190CQkJKnNjc2k7CisJc3BpbmxvY2tfdAkJCXBheV9sb2NrOwogCXNwaW5sb2NrX3QJCQlyZWNfbG9jazsKIAlzcGlubG9ja190CQkJaGJhX2xvY2s7CiAJc3BpbmxvY2tfdAkJCXNhbl9sb2NrOwogCXNwaW5sb2NrX3QJCQlzY3NpX2xvY2s7Ci0Jc3RydWN0IHpmY3BfZGJmX3JlY19yZWNvcmQJcmVjX2J1ZjsKLQlzdHJ1Y3QgemZjcF9kYmZfaGJhX3JlY29yZAloYmFfYnVmOwotCXN0cnVjdCB6ZmNwX2RiZl9zYW5fcmVjb3JkCXNhbl9idWY7Ci0Jc3RydWN0IHpmY3BfZGJmX3Njc2lfcmVjb3JkCXNjc2lfYnVmOwotCXN0cnVjdCB6ZmNwX2FkYXB0ZXIJCSphZGFwdGVyOworCXN0cnVjdCB6ZmNwX2RiZl9wYXkJCXBheV9idWY7CisJc3RydWN0IHpmY3BfZGJmX3JlYwkJcmVjX2J1ZjsKKwlzdHJ1Y3QgemZjcF9kYmZfaGJhCQloYmFfYnVmOworCXN0cnVjdCB6ZmNwX2RiZl9zYW4JCXNhbl9idWY7CisJc3RydWN0IHpmY3BfZGJmX3Njc2kJCXNjc2lfYnVmOwogfTsKIAogc3RhdGljIGlubGluZQotdm9pZCB6ZmNwX2RiZl9oYmFfZnNmX3Jlc3AoY29uc3QgY2hhciAqdGFnMiwgaW50IGxldmVsLAotCQkJICAgc3RydWN0IHpmY3BfZnNmX3JlcSAqcmVxLCBzdHJ1Y3QgemZjcF9kYmYgKmRiZikKK3ZvaWQgemZjcF9kYmZfaGJhX2ZzZl9yZXNwKGNoYXIgKnRhZywgaW50IGxldmVsLCBzdHJ1Y3QgemZjcF9mc2ZfcmVxICpyZXEpCiB7Ci0JaWYgKGxldmVsIDw9IGRiZi0+aGJhLT5sZXZlbCkKLQkJX3pmY3BfZGJmX2hiYV9mc2ZfcmVzcG9uc2UodGFnMiwgbGV2ZWwsIHJlcSwgZGJmKTsKKwlpZiAobGV2ZWwgPD0gcmVxLT5hZGFwdGVyLT5kYmYtPmhiYS0+bGV2ZWwpCisJCXpmY3BfZGJmX2hiYV9mc2ZfcmVzKHRhZywgcmVxKTsKIH0KIAogLyoqCiAgKiB6ZmNwX2RiZl9oYmFfZnNmX3Jlc3BvbnNlIC0gdHJhY2UgZXZlbnQgZm9yIHJlcXVlc3QgY29tcGxldGlvbgotICogQGZzZl9yZXE6IHJlcXVlc3QgdGhhdCBoYXMgYmVlbiBjb21wbGV0ZWQKKyAqIEByZXE6IHJlcXVlc3QgdGhhdCBoYXMgYmVlbiBjb21wbGV0ZWQKICAqLwotc3RhdGljIGlubGluZSB2b2lkIHpmY3BfZGJmX2hiYV9mc2ZfcmVzcG9uc2Uoc3RydWN0IHpmY3BfZnNmX3JlcSAqcmVxKQorc3RhdGljIGlubGluZQordm9pZCB6ZmNwX2RiZl9oYmFfZnNmX3Jlc3BvbnNlKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnJlcSkKIHsKLQlzdHJ1Y3QgemZjcF9kYmYgKmRiZiA9IHJlcS0+YWRhcHRlci0+ZGJmOwogCXN0cnVjdCBmc2ZfcXRjYiAqcXRjYiA9IHJlcS0+cXRjYjsKIAogCWlmICgocXRjYi0+cHJlZml4LnByb3Rfc3RhdHVzICE9IEZTRl9QUk9UX0dPT0QpICYmCiAJICAgIChxdGNiLT5wcmVmaXgucHJvdF9zdGF0dXMgIT0gRlNGX1BST1RfRlNGX1NUQVRVU19QUkVTRU5URUQpKSB7Ci0JCXpmY3BfZGJmX2hiYV9mc2ZfcmVzcCgicGVyciIsIDEsIHJlcSwgZGJmKTsKKwkJemZjcF9kYmZfaGJhX2ZzZl9yZXNwKCJmc19wZXJyIiwgMSwgcmVxKTsKIAogCX0gZWxzZSBpZiAocXRjYi0+aGVhZGVyLmZzZl9zdGF0dXMgIT0gRlNGX0dPT0QpIHsKLQkJemZjcF9kYmZfaGJhX2ZzZl9yZXNwKCJmZXJyIiwgMSwgcmVxLCBkYmYpOworCQl6ZmNwX2RiZl9oYmFfZnNmX3Jlc3AoImZzX2ZlcnIiLCAxLCByZXEpOwogCiAJfSBlbHNlIGlmICgocmVxLT5mc2ZfY29tbWFuZCA9PSBGU0ZfUVRDQl9PUEVOX1BPUlRfV0lUSF9ESUQpIHx8CiAJCSAgIChyZXEtPmZzZl9jb21tYW5kID09IEZTRl9RVENCX09QRU5fTFVOKSkgewotCQl6ZmNwX2RiZl9oYmFfZnNmX3Jlc3AoIm9wZW4iLCA0LCByZXEsIGRiZik7CisJCXpmY3BfZGJmX2hiYV9mc2ZfcmVzcCgiZnNfb3BlbiIsIDQsIHJlcSk7CiAKIAl9IGVsc2UgaWYgKHF0Y2ItPmhlYWRlci5sb2dfbGVuZ3RoKSB7Ci0JCXpmY3BfZGJmX2hiYV9mc2ZfcmVzcCgicXRjYiIsIDUsIHJlcSwgZGJmKTsKKwkJemZjcF9kYmZfaGJhX2ZzZl9yZXNwKCJmc19xdGNiIiwgNSwgcmVxKTsKIAogCX0gZWxzZSB7Ci0JCXpmY3BfZGJmX2hiYV9mc2ZfcmVzcCgibm9ybSIsIDYsIHJlcSwgZGJmKTsKKwkJemZjcF9kYmZfaGJhX2ZzZl9yZXNwKCJmc19ub3JtIiwgNiwgcmVxKTsKIAl9Ci0gfQotCi0vKioKLSAqIHpmY3BfZGJmX2hiYV9mc2ZfdW5zb2wgLSB0cmFjZSBldmVudCBmb3IgYW4gdW5zb2xpY2l0ZWQgc3RhdHVzIGJ1ZmZlcgotICogQHRhZzogdGFnIGluZGljYXRpbmcgd2hpY2gga2luZCBvZiB1bnNvbGljaXRlZCBzdGF0dXMgaGFzIGJlZW4gcmVjZWl2ZWQKLSAqIEBkYmY6IHJlZmVyZW5jZSB0byBkYmYgc3RydWN0dXJlCi0gKiBAc3RhdHVzX2J1ZmZlcjogYnVmZmVyIGNvbnRhaW5pbmcgcGF5bG9hZCBvZiB1bnNvbGljaXRlZCBzdGF0dXMKLSAqLwotc3RhdGljIGlubGluZQotdm9pZCB6ZmNwX2RiZl9oYmFfZnNmX3Vuc29sKGNvbnN0IGNoYXIgKnRhZywgc3RydWN0IHpmY3BfZGJmICpkYmYsCi0JCQkgICAgc3RydWN0IGZzZl9zdGF0dXNfcmVhZF9idWZmZXIgKmJ1ZikKLXsKLQlpbnQgbGV2ZWwgPSAyOwotCi0JaWYgKGxldmVsIDw9IGRiZi0+aGJhLT5sZXZlbCkKLQkJX3pmY3BfZGJmX2hiYV9mc2ZfdW5zb2wodGFnLCBsZXZlbCwgZGJmLCBidWYpOwogfQogCiBzdGF0aWMgaW5saW5lCi12b2lkIHpmY3BfZGJmX3Njc2koY29uc3QgY2hhciAqdGFnLCBjb25zdCBjaGFyICp0YWcyLCBpbnQgbGV2ZWwsCi0JCSAgIHN0cnVjdCB6ZmNwX2RiZiAqZGJmLCBzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kLAotCQkgICBzdHJ1Y3QgemZjcF9mc2ZfcmVxICpyZXEsIHVuc2lnbmVkIGxvbmcgb2xkX2lkKQordm9pZCBfemZjcF9kYmZfc2NzaShjaGFyICp0YWcsIGludCBsZXZlbCwgc3RydWN0IHNjc2lfY21uZCAqc2NtZCwKKwkJICAgc3RydWN0IHpmY3BfZnNmX3JlcSAqcmVxKQogewotCWlmIChsZXZlbCA8PSBkYmYtPnNjc2ktPmxldmVsKQotCQlfemZjcF9kYmZfc2NzaSh0YWcsIHRhZzIsIGxldmVsLCBkYmYsIHNjbWQsIHJlcSwgb2xkX2lkKTsKKwlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKikKKwkJCQkJc2NtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YVswXTsKKworCWlmIChsZXZlbCA8PSBhZGFwdGVyLT5kYmYtPnNjc2ktPmxldmVsKQorCQl6ZmNwX2RiZl9zY3NpKHRhZywgc2NtZCwgcmVxKTsKIH0KIAogLyoqCiAgKiB6ZmNwX2RiZl9zY3NpX3Jlc3VsdCAtIHRyYWNlIGV2ZW50IGZvciBTQ1NJIGNvbW1hbmQgY29tcGxldGlvbgotICogQGRiZjogYWRhcHRlciBkYmYgdHJhY2UKICAqIEBzY21kOiBTQ1NJIGNvbW1hbmQgcG9pbnRlcgogICogQHJlcTogRlNGIHJlcXVlc3QgdXNlZCB0byBpc3N1ZSBTQ1NJIGNvbW1hbmQKICAqLwogc3RhdGljIGlubGluZQotdm9pZCB6ZmNwX2RiZl9zY3NpX3Jlc3VsdChzdHJ1Y3QgemZjcF9kYmYgKmRiZiwgc3RydWN0IHNjc2lfY21uZCAqc2NtZCwKLQkJCSAgc3RydWN0IHpmY3BfZnNmX3JlcSAqcmVxKQordm9pZCB6ZmNwX2RiZl9zY3NpX3Jlc3VsdChzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kLCBzdHJ1Y3QgemZjcF9mc2ZfcmVxICpyZXEpCiB7CiAJaWYgKHNjbWQtPnJlc3VsdCAhPSAwKQotCQl6ZmNwX2RiZl9zY3NpKCJyc2x0IiwgImVycm8iLCAzLCBkYmYsIHNjbWQsIHJlcSwgMCk7CisJCV96ZmNwX2RiZl9zY3NpKCJyc2xfZXJyIiwgMywgc2NtZCwgcmVxKTsKIAllbHNlIGlmIChzY21kLT5yZXRyaWVzID4gMCkKLQkJemZjcF9kYmZfc2NzaSgicnNsdCIsICJyZXRyIiwgNCwgZGJmLCBzY21kLCByZXEsIDApOworCQlfemZjcF9kYmZfc2NzaSgicnNsX3JldCIsIDQsIHNjbWQsIHJlcSk7CiAJZWxzZQotCQl6ZmNwX2RiZl9zY3NpKCJyc2x0IiwgIm5vcm0iLCA2LCBkYmYsIHNjbWQsIHJlcSwgMCk7CisJCV96ZmNwX2RiZl9zY3NpKCJyc2xfbm9yIiwgNiwgc2NtZCwgcmVxKTsKIH0KIAogLyoqCiAgKiB6ZmNwX2RiZl9zY3NpX2ZhaWxfc2VuZCAtIHRyYWNlIGV2ZW50IGZvciBmYWlsdXJlIHRvIHNlbmQgU0NTSSBjb21tYW5kCi0gKiBAZGJmOiBhZGFwdGVyIGRiZiB0cmFjZQogICogQHNjbWQ6IFNDU0kgY29tbWFuZCBwb2ludGVyCiAgKi8KIHN0YXRpYyBpbmxpbmUKLXZvaWQgemZjcF9kYmZfc2NzaV9mYWlsX3NlbmQoc3RydWN0IHpmY3BfZGJmICpkYmYsIHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQpCit2b2lkIHpmY3BfZGJmX3Njc2lfZmFpbF9zZW5kKHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQpCiB7Ci0JemZjcF9kYmZfc2NzaSgicnNsdCIsICJmYWlsIiwgNCwgZGJmLCBzY21kLCBOVUxMLCAwKTsKKwlfemZjcF9kYmZfc2NzaSgicnNsX2ZhaSIsIDQsIHNjbWQsIE5VTEwpOwogfQogCiAvKioKICAqIHpmY3BfZGJmX3Njc2lfYWJvcnQgLSB0cmFjZSBldmVudCBmb3IgU0NTSSBjb21tYW5kIGFib3J0CiAgKiBAdGFnOiB0YWcgaW5kaWNhdGluZyBzdWNjZXNzIG9yIGZhaWx1cmUgb2YgYWJvcnQgb3BlcmF0aW9uCi0gKiBAYWRhcHRlcjogYWRhcHRlciB0aGFzIGhhcyBiZWVuIHVzZWQgdG8gaXNzdWUgU0NTSSBjb21tYW5kIHRvIGJlIGFib3J0ZWQKICAqIEBzY21kOiBTQ1NJIGNvbW1hbmQgdG8gYmUgYWJvcnRlZAotICogQG5ld19yZXE6IHJlcXVlc3QgY29udGFpbmluZyBhYm9ydCAobWlnaHQgYmUgTlVMTCkKLSAqIEBvbGRfaWQ6IGlkZW50aWZpZXIgb2YgcmVxdWVzdCBjb250YWluZyBTQ1NJIGNvbW1hbmQgdG8gYmUgYWJvcnRlZAorICogQGZzZl9yZXE6IHJlcXVlc3QgY29udGFpbmluZyBhYm9ydCAobWlnaHQgYmUgTlVMTCkKICAqLwogc3RhdGljIGlubGluZQotdm9pZCB6ZmNwX2RiZl9zY3NpX2Fib3J0KGNvbnN0IGNoYXIgKnRhZywgc3RydWN0IHpmY3BfZGJmICpkYmYsCi0JCQkgc3RydWN0IHNjc2lfY21uZCAqc2NtZCwgc3RydWN0IHpmY3BfZnNmX3JlcSAqbmV3X3JlcSwKLQkJCSB1bnNpZ25lZCBsb25nIG9sZF9pZCkKK3ZvaWQgemZjcF9kYmZfc2NzaV9hYm9ydChjaGFyICp0YWcsIHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQsCisJCQkgc3RydWN0IHpmY3BfZnNmX3JlcSAqZnNmX3JlcSkKIHsKLQl6ZmNwX2RiZl9zY3NpKCJhYnJ0IiwgdGFnLCAxLCBkYmYsIHNjbWQsIG5ld19yZXEsIG9sZF9pZCk7CisJX3pmY3BfZGJmX3Njc2kodGFnLCAxLCBzY21kLCBmc2ZfcmVxKTsKIH0KIAogLyoqCkBAIC0zNTIsMTIgKzM2NiwxNyBAQAogICogQGZsYWc6IGluZGljYXRlcyB0eXBlIG9mIHJlc2V0IChUYXJnZXQgUmVzZXQsIExvZ2ljYWwgVW5pdCBSZXNldCkKICAqLwogc3RhdGljIGlubGluZQotdm9pZCB6ZmNwX2RiZl9zY3NpX2RldnJlc2V0KGNvbnN0IGNoYXIgKnRhZywgc3RydWN0IHNjc2lfY21uZCAqc2NtbmQsIHU4IGZsYWcpCit2b2lkIHpmY3BfZGJmX3Njc2lfZGV2cmVzZXQoY2hhciAqdGFnLCBzdHJ1Y3Qgc2NzaV9jbW5kICpzY21uZCwgdTggZmxhZykKIHsKLQlzdHJ1Y3QgemZjcF9zY3NpX2RldiAqemZjcF9zZGV2ID0gc2Rldl90b196ZmNwKHNjbW5kLT5kZXZpY2UpOworCWNoYXIgdG1wX3RhZ1taRkNQX0RCRl9UQUdfTEVOXTsKIAotCXpmY3BfZGJmX3Njc2koZmxhZyA9PSBGQ1BfVE1GX1RHVF9SRVNFVCA/ICJ0cnN0IiA6ICJscnN0IiwgdGFnLCAxLAotCQkgICAgICB6ZmNwX3NkZXYtPnBvcnQtPmFkYXB0ZXItPmRiZiwgc2NtbmQsIE5VTEwsIDApOworCWlmIChmbGFnID09IEZDUF9UTUZfVEdUX1JFU0VUKQorCQltZW1jcHkodG1wX3RhZywgInRyXyIsIDMpOworCWVsc2UKKwkJbWVtY3B5KHRtcF90YWcsICJscl8iLCAzKTsKKworCW1lbWNweSgmdG1wX3RhZ1szXSwgdGFnLCA0KTsKKwlfemZjcF9kYmZfc2NzaSh0bXBfdGFnLCAxLCBzY21uZCwgTlVMTCk7CiB9CiAKICNlbmRpZiAvKiBaRkNQX0RCRl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2VycC5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9lcnAuYwppbmRleCAwYmNkNTgwLi5lMDAzZTMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2VycC5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmMKQEAgLTc2LDkgKzc2LDkgQEAKIAlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gYWN0LT5hZGFwdGVyOwogCiAJbGlzdF9tb3ZlKCZhY3QtPmxpc3QsICZhY3QtPmFkYXB0ZXItPmVycF9yZWFkeV9oZWFkKTsKLQl6ZmNwX2RiZl9yZWNfYWN0aW9uKCJlcmFyZHkxIiwgYWN0KTsKKwl6ZmNwX2RiZl9yZWNfcnVuKCJlcmFyZHkxIiwgYWN0KTsKIAl3YWtlX3VwKCZhZGFwdGVyLT5lcnBfcmVhZHlfd3EpOwotCXpmY3BfZGJmX3JlY190aHJlYWQoImVyYXJkeTIiLCBhZGFwdGVyLT5kYmYpOworCXpmY3BfZGJmX3JlY19ydW4oImVyYXJkeTIiLCBhY3QpOwogfQogCiBzdGF0aWMgdm9pZCB6ZmNwX2VycF9hY3Rpb25fZGlzbWlzcyhzdHJ1Y3QgemZjcF9lcnBfYWN0aW9uICphY3QpCkBAIC0yMzYsMTAgKzIzNiwxMCBAQAogc3RhdGljIGludCB6ZmNwX2VycF9hY3Rpb25fZW5xdWV1ZShpbnQgd2FudCwgc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciwKIAkJCQkgICBzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0LAogCQkJCSAgIHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwKLQkJCQkgICBjaGFyICppZCwgdm9pZCAqcmVmLCB1MzIgYWN0X3N0YXR1cykKKwkJCQkgICBjaGFyICppZCwgdTMyIGFjdF9zdGF0dXMpCiB7CiAJaW50IHJldHZhbCA9IDEsIG5lZWQ7Ci0Jc3RydWN0IHpmY3BfZXJwX2FjdGlvbiAqYWN0ID0gTlVMTDsKKwlzdHJ1Y3QgemZjcF9lcnBfYWN0aW9uICphY3Q7CiAKIAlpZiAoIWFkYXB0ZXItPmVycF90aHJlYWQpCiAJCXJldHVybiAtRUlPOwpAQCAtMjU1LDE1ICsyNTUsMTQgQEAKIAkrK2FkYXB0ZXItPmVycF90b3RhbF9jb3VudDsKIAlsaXN0X2FkZF90YWlsKCZhY3QtPmxpc3QsICZhZGFwdGVyLT5lcnBfcmVhZHlfaGVhZCk7CiAJd2FrZV91cCgmYWRhcHRlci0+ZXJwX3JlYWR5X3dxKTsKLQl6ZmNwX2RiZl9yZWNfdGhyZWFkKCJlcmFjdGUxIiwgYWRhcHRlci0+ZGJmKTsKIAlyZXR2YWwgPSAwOwogIG91dDoKLQl6ZmNwX2RiZl9yZWNfdHJpZ2dlcihpZCwgcmVmLCB3YW50LCBuZWVkLCBhY3QsIGFkYXB0ZXIsIHBvcnQsIHNkZXYpOworCXpmY3BfZGJmX3JlY190cmlnKGlkLCBhZGFwdGVyLCBwb3J0LCBzZGV2LCB3YW50LCBuZWVkKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCiBzdGF0aWMgaW50IF96ZmNwX2VycF9hZGFwdGVyX3Jlb3BlbihzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyLAotCQkJCSAgICBpbnQgY2xlYXJfbWFzaywgY2hhciAqaWQsIHZvaWQgKnJlZikKKwkJCQkgICAgaW50IGNsZWFyX21hc2ssIGNoYXIgKmlkKQogewogCXpmY3BfZXJwX2FkYXB0ZXJfYmxvY2soYWRhcHRlciwgY2xlYXJfbWFzayk7CiAJemZjcF9zY3NpX3NjaGVkdWxlX3Jwb3J0c19ibG9jayhhZGFwdGVyKTsKQEAgLTI3NSw3ICsyNzQsNyBAQAogCQlyZXR1cm4gLUVJTzsKIAl9CiAJcmV0dXJuIHpmY3BfZXJwX2FjdGlvbl9lbnF1ZXVlKFpGQ1BfRVJQX0FDVElPTl9SRU9QRU5fQURBUFRFUiwKLQkJCQkgICAgICAgYWRhcHRlciwgTlVMTCwgTlVMTCwgaWQsIHJlZiwgMCk7CisJCQkJICAgICAgIGFkYXB0ZXIsIE5VTEwsIE5VTEwsIGlkLCAwKTsKIH0KIAogLyoqCkBAIC0yODMsMTAgKzI4Miw4IEBACiAgKiBAYWRhcHRlcjogQWRhcHRlciB0byByZW9wZW4uCiAgKiBAY2xlYXI6IFN0YXR1cyBmbGFncyB0byBjbGVhci4KICAqIEBpZDogSWQgZm9yIGRlYnVnIHRyYWNlIGV2ZW50LgotICogQHJlZjogUmVmZXJlbmNlIGZvciBkZWJ1ZyB0cmFjZSBldmVudC4KICAqLwotdm9pZCB6ZmNwX2VycF9hZGFwdGVyX3Jlb3BlbihzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyLCBpbnQgY2xlYXIsCi0JCQkgICAgIGNoYXIgKmlkLCB2b2lkICpyZWYpCit2b2lkIHpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBjbGVhciwgY2hhciAqaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtMjk5LDcgKzI5Niw3IEBACiAJCQkJCSAgICBaRkNQX1NUQVRVU19DT01NT05fRVJQX0ZBSUxFRCk7CiAJZWxzZQogCQl6ZmNwX2VycF9hY3Rpb25fZW5xdWV1ZShaRkNQX0VSUF9BQ1RJT05fUkVPUEVOX0FEQVBURVIsIGFkYXB0ZXIsCi0JCQkJCU5VTEwsIE5VTEwsIGlkLCByZWYsIDApOworCQkJCQlOVUxMLCBOVUxMLCBpZCwgMCk7CiAJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmVycF9sb2NrLCBmbGFncyk7CiB9CiAKQEAgLTMwOCwxMyArMzA1LDEyIEBACiAgKiBAYWRhcHRlcjogQWRhcHRlciB0byBzaHV0IGRvd24uCiAgKiBAY2xlYXI6IFN0YXR1cyBmbGFncyB0byBjbGVhci4KICAqIEBpZDogSWQgZm9yIGRlYnVnIHRyYWNlIGV2ZW50LgotICogQHJlZjogUmVmZXJlbmNlIGZvciBkZWJ1ZyB0cmFjZSBldmVudC4KICAqLwogdm9pZCB6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBjbGVhciwKLQkJCSAgICAgICBjaGFyICppZCwgdm9pZCAqcmVmKQorCQkJICAgICAgIGNoYXIgKmlkKQogewogCWludCBmbGFncyA9IFpGQ1BfU1RBVFVTX0NPTU1PTl9SVU5OSU5HIHwgWkZDUF9TVEFUVVNfQ09NTU9OX0VSUF9GQUlMRUQ7Ci0JemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4oYWRhcHRlciwgY2xlYXIgfCBmbGFncywgaWQsIHJlZik7CisJemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4oYWRhcHRlciwgY2xlYXIgfCBmbGFncywgaWQpOwogfQogCiAvKioKQEAgLTMyMiwxMyArMzE4LDExIEBACiAgKiBAcG9ydDogUG9ydCB0byBzaHV0IGRvd24uCiAgKiBAY2xlYXI6IFN0YXR1cyBmbGFncyB0byBjbGVhci4KICAqIEBpZDogSWQgZm9yIGRlYnVnIHRyYWNlIGV2ZW50LgotICogQHJlZjogUmVmZXJlbmNlIGZvciBkZWJ1ZyB0cmFjZSBldmVudC4KICAqLwotdm9pZCB6ZmNwX2VycF9wb3J0X3NodXRkb3duKHN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQsIGludCBjbGVhciwgY2hhciAqaWQsCi0JCQkgICAgdm9pZCAqcmVmKQordm9pZCB6ZmNwX2VycF9wb3J0X3NodXRkb3duKHN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQsIGludCBjbGVhciwgY2hhciAqaWQpCiB7CiAJaW50IGZsYWdzID0gWkZDUF9TVEFUVVNfQ09NTU9OX1JVTk5JTkcgfCBaRkNQX1NUQVRVU19DT01NT05fRVJQX0ZBSUxFRDsKLQl6ZmNwX2VycF9wb3J0X3Jlb3Blbihwb3J0LCBjbGVhciB8IGZsYWdzLCBpZCwgcmVmKTsKKwl6ZmNwX2VycF9wb3J0X3Jlb3Blbihwb3J0LCBjbGVhciB8IGZsYWdzLCBpZCk7CiB9CiAKIHN0YXRpYyB2b2lkIHpmY3BfZXJwX3BvcnRfYmxvY2soc3RydWN0IHpmY3BfcG9ydCAqcG9ydCwgaW50IGNsZWFyKQpAQCAtMzM3LDggKzMzMSw4IEBACiAJCQkJICAgIFpGQ1BfU1RBVFVTX0NPTU1PTl9VTkJMT0NLRUQgfCBjbGVhcik7CiB9CiAKLXN0YXRpYyB2b2lkIF96ZmNwX2VycF9wb3J0X2ZvcmNlZF9yZW9wZW4oc3RydWN0IHpmY3BfcG9ydCAqcG9ydCwKLQkJCQkJIGludCBjbGVhciwgY2hhciAqaWQsIHZvaWQgKnJlZikKK3N0YXRpYyB2b2lkIF96ZmNwX2VycF9wb3J0X2ZvcmNlZF9yZW9wZW4oc3RydWN0IHpmY3BfcG9ydCAqcG9ydCwgaW50IGNsZWFyLAorCQkJCQkgY2hhciAqaWQpCiB7CiAJemZjcF9lcnBfcG9ydF9ibG9jayhwb3J0LCBjbGVhcik7CiAJemZjcF9zY3NpX3NjaGVkdWxlX3Jwb3J0X2Jsb2NrKHBvcnQpOwpAQCAtMzQ3LDI4ICszNDEsMjYgQEAKIAkJcmV0dXJuOwogCiAJemZjcF9lcnBfYWN0aW9uX2VucXVldWUoWkZDUF9FUlBfQUNUSU9OX1JFT1BFTl9QT1JUX0ZPUkNFRCwKLQkJCQlwb3J0LT5hZGFwdGVyLCBwb3J0LCBOVUxMLCBpZCwgcmVmLCAwKTsKKwkJCQlwb3J0LT5hZGFwdGVyLCBwb3J0LCBOVUxMLCBpZCwgMCk7CiB9CiAKIC8qKgogICogemZjcF9lcnBfcG9ydF9mb3JjZWRfcmVvcGVuIC0gRm9yY2VkIGNsb3NlIG9mIHBvcnQgYW5kIG9wZW4gYWdhaW4KICAqIEBwb3J0OiBQb3J0IHRvIGZvcmNlIGNsb3NlIGFuZCB0byByZW9wZW4uCisgKiBAY2xlYXI6IFN0YXR1cyBmbGFncyB0byBjbGVhci4KICAqIEBpZDogSWQgZm9yIGRlYnVnIHRyYWNlIGV2ZW50LgotICogQHJlZjogUmVmZXJlbmNlIGZvciBkZWJ1ZyB0cmFjZSBldmVudC4KICAqLwotdm9pZCB6ZmNwX2VycF9wb3J0X2ZvcmNlZF9yZW9wZW4oc3RydWN0IHpmY3BfcG9ydCAqcG9ydCwgaW50IGNsZWFyLCBjaGFyICppZCwKLQkJCQkgdm9pZCAqcmVmKQordm9pZCB6ZmNwX2VycF9wb3J0X2ZvcmNlZF9yZW9wZW4oc3RydWN0IHpmY3BfcG9ydCAqcG9ydCwgaW50IGNsZWFyLCBjaGFyICppZCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwb3J0LT5hZGFwdGVyOwogCiAJd3JpdGVfbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5lcnBfbG9jaywgZmxhZ3MpOwotCV96ZmNwX2VycF9wb3J0X2ZvcmNlZF9yZW9wZW4ocG9ydCwgY2xlYXIsIGlkLCByZWYpOworCV96ZmNwX2VycF9wb3J0X2ZvcmNlZF9yZW9wZW4ocG9ydCwgY2xlYXIsIGlkKTsKIAl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+ZXJwX2xvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIGludCBfemZjcF9lcnBfcG9ydF9yZW9wZW4oc3RydWN0IHpmY3BfcG9ydCAqcG9ydCwgaW50IGNsZWFyLCBjaGFyICppZCwKLQkJCQkgdm9pZCAqcmVmKQorc3RhdGljIGludCBfemZjcF9lcnBfcG9ydF9yZW9wZW4oc3RydWN0IHpmY3BfcG9ydCAqcG9ydCwgaW50IGNsZWFyLCBjaGFyICppZCkKIHsKIAl6ZmNwX2VycF9wb3J0X2Jsb2NrKHBvcnQsIGNsZWFyKTsKIAl6ZmNwX3Njc2lfc2NoZWR1bGVfcnBvcnRfYmxvY2socG9ydCk7CkBAIC0zODAsMjQgKzM3MiwyNSBAQAogCX0KIAogCXJldHVybiB6ZmNwX2VycF9hY3Rpb25fZW5xdWV1ZShaRkNQX0VSUF9BQ1RJT05fUkVPUEVOX1BPUlQsCi0JCQkJICAgICAgIHBvcnQtPmFkYXB0ZXIsIHBvcnQsIE5VTEwsIGlkLCByZWYsIDApOworCQkJCSAgICAgICBwb3J0LT5hZGFwdGVyLCBwb3J0LCBOVUxMLCBpZCwgMCk7CiB9CiAKIC8qKgogICogemZjcF9lcnBfcG9ydF9yZW9wZW4gLSB0cmlnZ2VyIHJlbW90ZSBwb3J0IHJlY292ZXJ5CiAgKiBAcG9ydDogcG9ydCB0byByZWNvdmVyCiAgKiBAY2xlYXJfbWFzazogZmxhZ3MgaW4gcG9ydCBzdGF0dXMgdG8gYmUgY2xlYXJlZAorICogQGlkOiBJZCBmb3IgZGVidWcgdHJhY2UgZXZlbnQuCiAgKgogICogUmV0dXJucyAwIGlmIHJlY292ZXJ5IGhhcyBiZWVuIHRyaWdnZXJlZCwgPCAwIGlmIG5vdC4KICAqLwotaW50IHpmY3BfZXJwX3BvcnRfcmVvcGVuKHN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQsIGludCBjbGVhciwgY2hhciAqaWQsIHZvaWQgKnJlZikKK2ludCB6ZmNwX2VycF9wb3J0X3Jlb3BlbihzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0LCBpbnQgY2xlYXIsIGNoYXIgKmlkKQogewogCWludCByZXR2YWw7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gcG9ydC0+YWRhcHRlcjsKIAogCXdyaXRlX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+ZXJwX2xvY2ssIGZsYWdzKTsKLQlyZXR2YWwgPSBfemZjcF9lcnBfcG9ydF9yZW9wZW4ocG9ydCwgY2xlYXIsIGlkLCByZWYpOworCXJldHZhbCA9IF96ZmNwX2VycF9wb3J0X3Jlb3Blbihwb3J0LCBjbGVhciwgaWQpOwogCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5lcnBfbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIHJldHZhbDsKQEAgLTQxMCw3ICs0MDMsNyBAQAogfQogCiBzdGF0aWMgdm9pZCBfemZjcF9lcnBfbHVuX3Jlb3BlbihzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBjbGVhciwgY2hhciAqaWQsCi0JCQkJIHZvaWQgKnJlZiwgdTMyIGFjdF9zdGF0dXMpCisJCQkJIHUzMiBhY3Rfc3RhdHVzKQogewogCXN0cnVjdCB6ZmNwX3Njc2lfZGV2ICp6ZmNwX3NkZXYgPSBzZGV2X3RvX3pmY3Aoc2Rldik7CiAJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IHpmY3Bfc2Rldi0+cG9ydC0+YWRhcHRlcjsKQEAgLTQyMSwxNyArNDE0LDE4IEBACiAJCXJldHVybjsKIAogCXpmY3BfZXJwX2FjdGlvbl9lbnF1ZXVlKFpGQ1BfRVJQX0FDVElPTl9SRU9QRU5fTFVOLCBhZGFwdGVyLAotCQkJCXpmY3Bfc2Rldi0+cG9ydCwgc2RldiwgaWQsIHJlZiwgYWN0X3N0YXR1cyk7CisJCQkJemZjcF9zZGV2LT5wb3J0LCBzZGV2LCBpZCwgYWN0X3N0YXR1cyk7CiB9CiAKIC8qKgogICogemZjcF9lcnBfbHVuX3Jlb3BlbiAtIGluaXRpYXRlIHJlb3BlbiBvZiBhIExVTgogICogQHNkZXY6IFNDU0kgZGV2aWNlIC8gTFVOIHRvIGJlIHJlb3BlbmVkCiAgKiBAY2xlYXJfbWFzazogc3BlY2lmaWVzIGZsYWdzIGluIExVTiBzdGF0dXMgdG8gYmUgY2xlYXJlZAorICogQGlkOiBJZCBmb3IgZGVidWcgdHJhY2UgZXZlbnQuCisgKgogICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIDwgMCBvbiBlcnJvcgogICovCi12b2lkIHpmY3BfZXJwX2x1bl9yZW9wZW4oc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgY2xlYXIsIGNoYXIgKmlkLAotCQkJIHZvaWQgKnJlZikKK3ZvaWQgemZjcF9lcnBfbHVuX3Jlb3BlbihzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBjbGVhciwgY2hhciAqaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgemZjcF9zY3NpX2RldiAqemZjcF9zZGV2ID0gc2Rldl90b196ZmNwKHNkZXYpOwpAQCAtNDM5LDcgKzQzMyw3IEBACiAJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IHBvcnQtPmFkYXB0ZXI7CiAKIAl3cml0ZV9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmVycF9sb2NrLCBmbGFncyk7Ci0JX3pmY3BfZXJwX2x1bl9yZW9wZW4oc2RldiwgY2xlYXIsIGlkLCByZWYsIDApOworCV96ZmNwX2VycF9sdW5fcmVvcGVuKHNkZXYsIGNsZWFyLCBpZCwgMCk7CiAJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmVycF9sb2NrLCBmbGFncyk7CiB9CiAKQEAgLTQ0OCwxMyArNDQyLDExIEBACiAgKiBAc2RldjogU0NTSSBkZXZpY2UgLyBMVU4gdG8gc2h1dCBkb3duLgogICogQGNsZWFyOiBTdGF0dXMgZmxhZ3MgdG8gY2xlYXIuCiAgKiBAaWQ6IElkIGZvciBkZWJ1ZyB0cmFjZSBldmVudC4KLSAqIEByZWY6IFJlZmVyZW5jZSBmb3IgZGVidWcgdHJhY2UgZXZlbnQuCiAgKi8KLXZvaWQgemZjcF9lcnBfbHVuX3NodXRkb3duKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IGNsZWFyLCBjaGFyICppZCwKLQkJCSAgIHZvaWQgKnJlZikKK3ZvaWQgemZjcF9lcnBfbHVuX3NodXRkb3duKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IGNsZWFyLCBjaGFyICppZCkKIHsKIAlpbnQgZmxhZ3MgPSBaRkNQX1NUQVRVU19DT01NT05fUlVOTklORyB8IFpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfRkFJTEVEOwotCXpmY3BfZXJwX2x1bl9yZW9wZW4oc2RldiwgY2xlYXIgfCBmbGFncywgaWQsIHJlZik7CisJemZjcF9lcnBfbHVuX3Jlb3BlbihzZGV2LCBjbGVhciB8IGZsYWdzLCBpZCk7CiB9CiAKIC8qKgpAQCAtNDc2LDcgKzQ2OCw3IEBACiAJaW50IGNsZWFyID0gWkZDUF9TVEFUVVNfQ09NTU9OX1JVTk5JTkcgfCBaRkNQX1NUQVRVU19DT01NT05fRVJQX0ZBSUxFRDsKIAogCXdyaXRlX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+ZXJwX2xvY2ssIGZsYWdzKTsKLQlfemZjcF9lcnBfbHVuX3Jlb3BlbihzZGV2LCBjbGVhciwgaWQsIE5VTEwsIFpGQ1BfU1RBVFVTX0VSUF9OT19SRUYpOworCV96ZmNwX2VycF9sdW5fcmVvcGVuKHNkZXYsIGNsZWFyLCBpZCwgWkZDUF9TVEFUVVNfRVJQX05PX1JFRik7CiAJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmVycF9sb2NrLCBmbGFncyk7CiAKIAl6ZmNwX2VycF93YWl0KGFkYXB0ZXIpOwpAQCAtNDkwLDE0ICs0ODIsMTQgQEAKIHN0YXRpYyB2b2lkIHpmY3BfZXJwX2FkYXB0ZXJfdW5ibG9jayhzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyKQogewogCWlmIChzdGF0dXNfY2hhbmdlX3NldChaRkNQX1NUQVRVU19DT01NT05fVU5CTE9DS0VELCAmYWRhcHRlci0+c3RhdHVzKSkKLQkJemZjcF9kYmZfcmVjX2FkYXB0ZXIoImVyYXVibDEiLCBOVUxMLCBhZGFwdGVyLT5kYmYpOworCQl6ZmNwX2RiZl9yZWNfcnVuKCJlcmF1YmwxIiwgJmFkYXB0ZXItPmVycF9hY3Rpb24pOwogCWF0b21pY19zZXRfbWFzayhaRkNQX1NUQVRVU19DT01NT05fVU5CTE9DS0VELCAmYWRhcHRlci0+c3RhdHVzKTsKIH0KIAogc3RhdGljIHZvaWQgemZjcF9lcnBfcG9ydF91bmJsb2NrKHN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQpCiB7CiAJaWYgKHN0YXR1c19jaGFuZ2Vfc2V0KFpGQ1BfU1RBVFVTX0NPTU1PTl9VTkJMT0NLRUQsICZwb3J0LT5zdGF0dXMpKQotCQl6ZmNwX2RiZl9yZWNfcG9ydCgiZXJwdWJsMSIsIE5VTEwsIHBvcnQpOworCQl6ZmNwX2RiZl9yZWNfcnVuKCJlcnB1YmwxIiwgJnBvcnQtPmVycF9hY3Rpb24pOwogCWF0b21pY19zZXRfbWFzayhaRkNQX1NUQVRVU19DT01NT05fVU5CTE9DS0VELCAmcG9ydC0+c3RhdHVzKTsKIH0KIApAQCAtNTA2LDE0ICs0OTgsMTQgQEAKIAlzdHJ1Y3QgemZjcF9zY3NpX2RldiAqemZjcF9zZGV2ID0gc2Rldl90b196ZmNwKHNkZXYpOwogCiAJaWYgKHN0YXR1c19jaGFuZ2Vfc2V0KFpGQ1BfU1RBVFVTX0NPTU1PTl9VTkJMT0NLRUQsICZ6ZmNwX3NkZXYtPnN0YXR1cykpCi0JCXpmY3BfZGJmX3JlY19sdW4oImVybHVibDEiLCBOVUxMLCBzZGV2KTsKKwkJemZjcF9kYmZfcmVjX3J1bigiZXJsdWJsMSIsICZzZGV2X3RvX3pmY3Aoc2RldiktPmVycF9hY3Rpb24pOwogCWF0b21pY19zZXRfbWFzayhaRkNQX1NUQVRVU19DT01NT05fVU5CTE9DS0VELCAmemZjcF9zZGV2LT5zdGF0dXMpOwogfQogCiBzdGF0aWMgdm9pZCB6ZmNwX2VycF9hY3Rpb25fdG9fcnVubmluZyhzdHJ1Y3QgemZjcF9lcnBfYWN0aW9uICplcnBfYWN0aW9uKQogewogCWxpc3RfbW92ZSgmZXJwX2FjdGlvbi0+bGlzdCwgJmVycF9hY3Rpb24tPmFkYXB0ZXItPmVycF9ydW5uaW5nX2hlYWQpOwotCXpmY3BfZGJmX3JlY19hY3Rpb24oImVyYXRvcjEiLCBlcnBfYWN0aW9uKTsKKwl6ZmNwX2RiZl9yZWNfcnVuKCJlcmF0b3IxIiwgZXJwX2FjdGlvbik7CiB9CiAKIHN0YXRpYyB2b2lkIHpmY3BfZXJwX3N0cmF0ZWd5X2NoZWNrX2ZzZnJlcShzdHJ1Y3QgemZjcF9lcnBfYWN0aW9uICphY3QpCkBAIC01MzAsMTEgKzUyMiwxMSBAQAogCQlpZiAoYWN0LT5zdGF0dXMgJiAoWkZDUF9TVEFUVVNfRVJQX0RJU01JU1NFRCB8CiAJCQkJICAgWkZDUF9TVEFUVVNfRVJQX1RJTUVET1VUKSkgewogCQkJcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0RJU01JU1NFRDsKLQkJCXpmY3BfZGJmX3JlY19hY3Rpb24oImVyc2NmXzEiLCBhY3QpOworCQkJemZjcF9kYmZfcmVjX3J1bigiZXJzY2ZfMSIsIGFjdCk7CiAJCQlyZXEtPmVycF9hY3Rpb24gPSBOVUxMOwogCQl9CiAJCWlmIChhY3QtPnN0YXR1cyAmIFpGQ1BfU1RBVFVTX0VSUF9USU1FRE9VVCkKLQkJCXpmY3BfZGJmX3JlY19hY3Rpb24oImVyc2NmXzIiLCBhY3QpOworCQkJemZjcF9kYmZfcmVjX3J1bigiZXJzY2ZfMiIsIGFjdCk7CiAJCWlmIChyZXEtPnN0YXR1cyAmIFpGQ1BfU1RBVFVTX0ZTRlJFUV9ESVNNSVNTRUQpCiAJCQlhY3QtPmZzZl9yZXFfaWQgPSAwOwogCX0gZWxzZQpAQCAtNTg1LDQwICs1NzcsNDAgQEAKIH0KIAogc3RhdGljIHZvaWQgX3pmY3BfZXJwX3BvcnRfcmVvcGVuX2FsbChzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyLAotCQkJCSAgICAgIGludCBjbGVhciwgY2hhciAqaWQsIHZvaWQgKnJlZikKKwkJCQkgICAgICBpbnQgY2xlYXIsIGNoYXIgKmlkKQogewogCXN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQ7CiAKIAlyZWFkX2xvY2soJmFkYXB0ZXItPnBvcnRfbGlzdF9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcnQsICZhZGFwdGVyLT5wb3J0X2xpc3QsIGxpc3QpCi0JCV96ZmNwX2VycF9wb3J0X3Jlb3Blbihwb3J0LCBjbGVhciwgaWQsIHJlZik7CisJCV96ZmNwX2VycF9wb3J0X3Jlb3Blbihwb3J0LCBjbGVhciwgaWQpOwogCXJlYWRfdW5sb2NrKCZhZGFwdGVyLT5wb3J0X2xpc3RfbG9jayk7CiB9CiAKIHN0YXRpYyB2b2lkIF96ZmNwX2VycF9sdW5fcmVvcGVuX2FsbChzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0LCBpbnQgY2xlYXIsCi0JCQkJICAgICBjaGFyICppZCwgdm9pZCAqcmVmKQorCQkJCSAgICAgY2hhciAqaWQpCiB7CiAJc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2OwogCiAJc2hvc3RfZm9yX2VhY2hfZGV2aWNlKHNkZXYsIHBvcnQtPmFkYXB0ZXItPnNjc2lfaG9zdCkKIAkJaWYgKHNkZXZfdG9femZjcChzZGV2KS0+cG9ydCA9PSBwb3J0KQotCQkJX3pmY3BfZXJwX2x1bl9yZW9wZW4oc2RldiwgY2xlYXIsIGlkLCByZWYsIDApOworCQkJX3pmY3BfZXJwX2x1bl9yZW9wZW4oc2RldiwgY2xlYXIsIGlkLCAwKTsKIH0KIAogc3RhdGljIHZvaWQgemZjcF9lcnBfc3RyYXRlZ3lfZm9sbG93dXBfZmFpbGVkKHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKmFjdCkKIHsKIAlzd2l0Y2ggKGFjdC0+YWN0aW9uKSB7CiAJY2FzZSBaRkNQX0VSUF9BQ1RJT05fUkVPUEVOX0FEQVBURVI6Ci0JCV96ZmNwX2VycF9hZGFwdGVyX3Jlb3BlbihhY3QtPmFkYXB0ZXIsIDAsICJlcnNmZl8xIiwgTlVMTCk7CisJCV96ZmNwX2VycF9hZGFwdGVyX3Jlb3BlbihhY3QtPmFkYXB0ZXIsIDAsICJlcnNmZl8xIik7CiAJCWJyZWFrOwogCWNhc2UgWkZDUF9FUlBfQUNUSU9OX1JFT1BFTl9QT1JUX0ZPUkNFRDoKLQkJX3pmY3BfZXJwX3BvcnRfZm9yY2VkX3Jlb3BlbihhY3QtPnBvcnQsIDAsICJlcnNmZl8yIiwgTlVMTCk7CisJCV96ZmNwX2VycF9wb3J0X2ZvcmNlZF9yZW9wZW4oYWN0LT5wb3J0LCAwLCAiZXJzZmZfMiIpOwogCQlicmVhazsKIAljYXNlIFpGQ1BfRVJQX0FDVElPTl9SRU9QRU5fUE9SVDoKLQkJX3pmY3BfZXJwX3BvcnRfcmVvcGVuKGFjdC0+cG9ydCwgMCwgImVyc2ZmXzMiLCBOVUxMKTsKKwkJX3pmY3BfZXJwX3BvcnRfcmVvcGVuKGFjdC0+cG9ydCwgMCwgImVyc2ZmXzMiKTsKIAkJYnJlYWs7CiAJY2FzZSBaRkNQX0VSUF9BQ1RJT05fUkVPUEVOX0xVTjoKLQkJX3pmY3BfZXJwX2x1bl9yZW9wZW4oYWN0LT5zZGV2LCAwLCAiZXJzZmZfNCIsIE5VTEwsIDApOworCQlfemZjcF9lcnBfbHVuX3Jlb3BlbihhY3QtPnNkZXYsIDAsICJlcnNmZl80IiwgMCk7CiAJCWJyZWFrOwogCX0KIH0KQEAgLTYyNywxMyArNjE5LDEzIEBACiB7CiAJc3dpdGNoIChhY3QtPmFjdGlvbikgewogCWNhc2UgWkZDUF9FUlBfQUNUSU9OX1JFT1BFTl9BREFQVEVSOgotCQlfemZjcF9lcnBfcG9ydF9yZW9wZW5fYWxsKGFjdC0+YWRhcHRlciwgMCwgImVyc2ZzXzEiLCBOVUxMKTsKKwkJX3pmY3BfZXJwX3BvcnRfcmVvcGVuX2FsbChhY3QtPmFkYXB0ZXIsIDAsICJlcnNmc18xIik7CiAJCWJyZWFrOwogCWNhc2UgWkZDUF9FUlBfQUNUSU9OX1JFT1BFTl9QT1JUX0ZPUkNFRDoKLQkJX3pmY3BfZXJwX3BvcnRfcmVvcGVuKGFjdC0+cG9ydCwgMCwgImVyc2ZzXzIiLCBOVUxMKTsKKwkJX3pmY3BfZXJwX3BvcnRfcmVvcGVuKGFjdC0+cG9ydCwgMCwgImVyc2ZzXzIiKTsKIAkJYnJlYWs7CiAJY2FzZSBaRkNQX0VSUF9BQ1RJT05fUkVPUEVOX1BPUlQ6Ci0JCV96ZmNwX2VycF9sdW5fcmVvcGVuX2FsbChhY3QtPnBvcnQsIDAsICJlcnNmc18zIiwgTlVMTCk7CisJCV96ZmNwX2VycF9sdW5fcmVvcGVuX2FsbChhY3QtPnBvcnQsIDAsICJlcnNmc18zIik7CiAJCWJyZWFrOwogCX0KIH0KQEAgLTY1MiwxNyArNjQ0LDYgQEAKIAlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5lcnBfbG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgaW50IHpmY3BfZXJwX2FkYXB0ZXJfc3RyYXRlZ3lfb3Blbl9xZGlvKHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKmFjdCkKLXsKLQlzdHJ1Y3QgemZjcF9xZGlvICpxZGlvID0gYWN0LT5hZGFwdGVyLT5xZGlvOwotCi0JaWYgKHpmY3BfcWRpb19vcGVuKHFkaW8pKQotCQlyZXR1cm4gWkZDUF9FUlBfRkFJTEVEOwotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnFkaW8tPnJlcV9xX3dxKTsKLQlhdG9taWNfc2V0X21hc2soWkZDUF9TVEFUVVNfQURBUFRFUl9RRElPVVAsICZhY3QtPmFkYXB0ZXItPnN0YXR1cyk7Ci0JcmV0dXJuIFpGQ1BfRVJQX1NVQ0NFRURFRDsKLX0KLQogc3RhdGljIHZvaWQgemZjcF9lcnBfZW5xdWV1ZV9wdHBfcG9ydChzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyKQogewogCXN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQ7CkBAIC02NzAsNyArNjUxLDcgQEAKIAkJCQkgYWRhcHRlci0+cGVlcl9kX2lkKTsKIAlpZiAoSVNfRVJSKHBvcnQpKSAvKiBlcnJvciBvciBwb3J0IGFscmVhZHkgYXR0YWNoZWQgKi8KIAkJcmV0dXJuOwotCV96ZmNwX2VycF9wb3J0X3Jlb3Blbihwb3J0LCAwLCAiZXJlcHRwMSIsIE5VTEwpOworCV96ZmNwX2VycF9wb3J0X3Jlb3Blbihwb3J0LCAwLCAiZXJlcHRwMSIpOwogfQogCiBzdGF0aWMgaW50IHpmY3BfZXJwX2FkYXB0ZXJfc3RyYXRfZnNmX3hjb25mKHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKmVycF9hY3Rpb24pCkBAIC02OTMsMTAgKzY3NCw4IEBACiAJCQlyZXR1cm4gWkZDUF9FUlBfRkFJTEVEOwogCQl9CiAKLQkJemZjcF9kYmZfcmVjX3RocmVhZF9sb2NrKCJlcmFzZngxIiwgYWRhcHRlci0+ZGJmKTsKIAkJd2FpdF9ldmVudChhZGFwdGVyLT5lcnBfcmVhZHlfd3EsCiAJCQkgICAhbGlzdF9lbXB0eSgmYWRhcHRlci0+ZXJwX3JlYWR5X2hlYWQpKTsKLQkJemZjcF9kYmZfcmVjX3RocmVhZF9sb2NrKCJlcmFzZngyIiwgYWRhcHRlci0+ZGJmKTsKIAkJaWYgKGVycF9hY3Rpb24tPnN0YXR1cyAmIFpGQ1BfU1RBVFVTX0VSUF9USU1FRE9VVCkKIAkJCWJyZWFrOwogCkBAIC03MzUsMTAgKzcxNCwxMCBAQAogCWlmIChyZXQpCiAJCXJldHVybiBaRkNQX0VSUF9GQUlMRUQ7CiAKLQl6ZmNwX2RiZl9yZWNfdGhyZWFkX2xvY2soImVyYXNveDEiLCBhZGFwdGVyLT5kYmYpOworCXpmY3BfZGJmX3JlY19ydW4oImVyYXNveDEiLCBhY3QpOwogCXdhaXRfZXZlbnQoYWRhcHRlci0+ZXJwX3JlYWR5X3dxLAogCQkgICAhbGlzdF9lbXB0eSgmYWRhcHRlci0+ZXJwX3JlYWR5X2hlYWQpKTsKLQl6ZmNwX2RiZl9yZWNfdGhyZWFkX2xvY2soImVyYXNveDIiLCBhZGFwdGVyLT5kYmYpOworCXpmY3BfZGJmX3JlY19ydW4oImVyYXNveDIiLCBhY3QpOwogCWlmIChhY3QtPnN0YXR1cyAmIFpGQ1BfU1RBVFVTX0VSUF9USU1FRE9VVCkKIAkJcmV0dXJuIFpGQ1BfRVJQX0ZBSUxFRDsKIApAQCAtNzg4LDcgKzc2Nyw3IEBACiB7CiAJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IGFjdC0+YWRhcHRlcjsKIAotCWlmICh6ZmNwX2VycF9hZGFwdGVyX3N0cmF0ZWd5X29wZW5fcWRpbyhhY3QpKSB7CisJaWYgKHpmY3BfcWRpb19vcGVuKGFkYXB0ZXItPnFkaW8pKSB7CiAJCWF0b21pY19jbGVhcl9tYXNrKFpGQ1BfU1RBVFVTX0FEQVBURVJfWENPTkZJR19PSyB8CiAJCQkJICBaRkNQX1NUQVRVU19BREFQVEVSX0xJTktfVU5QTFVHR0VELAogCQkJCSAgJmFkYXB0ZXItPnN0YXR1cyk7CkBAIC0xMTY2LDcgKzExNDUsNyBAQAogCQlpZiAoemZjcF9lcnBfc3RyYXRfY2hhbmdlX2RldCgmYWRhcHRlci0+c3RhdHVzLCBlcnBfc3RhdHVzKSkgewogCQkJX3pmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKGFkYXB0ZXIsCiAJCQkJCQkgWkZDUF9TVEFUVVNfQ09NTU9OX0VSUF9GQUlMRUQsCi0JCQkJCQkgImVyc3NjZzEiLCBOVUxMKTsKKwkJCQkJCSAiZXJzc2NnMSIpOwogCQkJcmV0dXJuIFpGQ1BfRVJQX0VYSVQ7CiAJCX0KIAkJYnJlYWs7CkBAIC0xMTc2LDcgKzExNTUsNyBAQAogCQlpZiAoemZjcF9lcnBfc3RyYXRfY2hhbmdlX2RldCgmcG9ydC0+c3RhdHVzLCBlcnBfc3RhdHVzKSkgewogCQkJX3pmY3BfZXJwX3BvcnRfcmVvcGVuKHBvcnQsCiAJCQkJCSAgICAgIFpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfRkFJTEVELAotCQkJCQkgICAgICAiZXJzc2NnMiIsIE5VTEwpOworCQkJCQkgICAgICAiZXJzc2NnMiIpOwogCQkJcmV0dXJuIFpGQ1BfRVJQX0VYSVQ7CiAJCX0KIAkJYnJlYWs7CkBAIC0xMTg2LDcgKzExNjUsNyBAQAogCQlpZiAoemZjcF9lcnBfc3RyYXRfY2hhbmdlX2RldCgmemZjcF9zZGV2LT5zdGF0dXMsIGVycF9zdGF0dXMpKSB7CiAJCQlfemZjcF9lcnBfbHVuX3Jlb3BlbihzZGV2LAogCQkJCQkgICAgIFpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfRkFJTEVELAotCQkJCQkgICAgICJlcnNzY2czIiwgTlVMTCwgMCk7CisJCQkJCSAgICAgImVyc3NjZzMiLCAwKTsKIAkJCXJldHVybiBaRkNQX0VSUF9FWElUOwogCQl9CiAJCWJyZWFrOwpAQCAtMTIwNiw3ICsxMTg1LDcgQEAKIAl9CiAKIAlsaXN0X2RlbCgmZXJwX2FjdGlvbi0+bGlzdCk7Ci0JemZjcF9kYmZfcmVjX2FjdGlvbigiZXJhY3RkMSIsIGVycF9hY3Rpb24pOworCXpmY3BfZGJmX3JlY19ydW4oImVyYWN0ZDEiLCBlcnBfYWN0aW9uKTsKIAogCXN3aXRjaCAoZXJwX2FjdGlvbi0+YWN0aW9uKSB7CiAJY2FzZSBaRkNQX0VSUF9BQ1RJT05fUkVPUEVOX0xVTjoKQEAgLTEzMTMsNyArMTI5Miw3IEBACiAJCQllcnBfYWN0aW9uLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRVJQX0xPV01FTTsKIAkJfQogCQlpZiAoYWRhcHRlci0+ZXJwX3RvdGFsX2NvdW50ID09IGFkYXB0ZXItPmVycF9sb3dfbWVtX2NvdW50KQotCQkJX3pmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKGFkYXB0ZXIsIDAsICJlcnN0Z3kxIiwgTlVMTCk7CisJCQlfemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4oYWRhcHRlciwgMCwgImVyc3RneTEiKTsKIAkJZWxzZSB7CiAJCQl6ZmNwX2VycF9zdHJhdGVneV9tZW13YWl0KGVycF9hY3Rpb24pOwogCQkJcmV0dmFsID0gWkZDUF9FUlBfQ09OVElOVUVTOwpAQCAtMTM1NywxMSArMTMzNiw5IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWZvciAoOzspIHsKLQkJemZjcF9kYmZfcmVjX3RocmVhZF9sb2NrKCJlcnRocmQxIiwgYWRhcHRlci0+ZGJmKTsKIAkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGFkYXB0ZXItPmVycF9yZWFkeV93cSwKIAkJCSAgICFsaXN0X2VtcHR5KCZhZGFwdGVyLT5lcnBfcmVhZHlfaGVhZCkgfHwKIAkJCSAgIGt0aHJlYWRfc2hvdWxkX3N0b3AoKSk7Ci0JCXpmY3BfZGJmX3JlY190aHJlYWRfbG9jaygiZXJ0aHJkMiIsIGFkYXB0ZXItPmRiZik7CiAKIAkJaWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9leHQuaCBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXh0LmgKaW5kZXggYmY4ZjNlNS4uNmUzMjUyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9leHQuaAorKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2V4dC5oCkBAIC00NSw0NyArNDUsMzMgQEAKIAogLyogemZjcF9kYmYuYyAqLwogZXh0ZXJuIGludCB6ZmNwX2RiZl9hZGFwdGVyX3JlZ2lzdGVyKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKik7Ci1leHRlcm4gdm9pZCB6ZmNwX2RiZl9hZGFwdGVyX3VucmVnaXN0ZXIoc3RydWN0IHpmY3BfZGJmICopOwotZXh0ZXJuIHZvaWQgemZjcF9kYmZfcmVjX3RocmVhZChjaGFyICosIHN0cnVjdCB6ZmNwX2RiZiAqKTsKLWV4dGVybiB2b2lkIHpmY3BfZGJmX3JlY190aHJlYWRfbG9jayhjaGFyICosIHN0cnVjdCB6ZmNwX2RiZiAqKTsKLWV4dGVybiB2b2lkIHpmY3BfZGJmX3JlY19hZGFwdGVyKGNoYXIgKiwgdm9pZCAqLCBzdHJ1Y3QgemZjcF9kYmYgKik7Ci1leHRlcm4gdm9pZCB6ZmNwX2RiZl9yZWNfcG9ydChjaGFyICosIHZvaWQgKiwgc3RydWN0IHpmY3BfcG9ydCAqKTsKLWV4dGVybiB2b2lkIHpmY3BfZGJmX3JlY19sdW4oY2hhciAqLCB2b2lkICosIHN0cnVjdCBzY3NpX2RldmljZSAqKTsKLWV4dGVybiB2b2lkIHpmY3BfZGJmX3JlY190cmlnZ2VyKGNoYXIgKiwgdm9pZCAqLCB1OCwgdTgsIHZvaWQgKiwKLQkJCQkgc3RydWN0IHpmY3BfYWRhcHRlciAqLCBzdHJ1Y3QgemZjcF9wb3J0ICosCi0JCQkJIHN0cnVjdCBzY3NpX2RldmljZSAqKTsKLWV4dGVybiB2b2lkIHpmY3BfZGJmX3JlY19hY3Rpb24oY2hhciAqLCBzdHJ1Y3QgemZjcF9lcnBfYWN0aW9uICopOwotZXh0ZXJuIHZvaWQgX3pmY3BfZGJmX2hiYV9mc2ZfcmVzcG9uc2UoY29uc3QgY2hhciAqLCBpbnQsIHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKiwKLQkJCQkgICAgICAgc3RydWN0IHpmY3BfZGJmICopOwotZXh0ZXJuIHZvaWQgX3pmY3BfZGJmX2hiYV9mc2ZfdW5zb2woY29uc3QgY2hhciAqLCBpbnQgbGV2ZWwsIHN0cnVjdCB6ZmNwX2RiZiAqLAotCQkJCQkgIHN0cnVjdCBmc2Zfc3RhdHVzX3JlYWRfYnVmZmVyICopOwotZXh0ZXJuIHZvaWQgemZjcF9kYmZfaGJhX3FkaW8oc3RydWN0IHpmY3BfZGJmICosIHVuc2lnbmVkIGludCwgaW50LCBpbnQpOworZXh0ZXJuIHZvaWQgemZjcF9kYmZfYWRhcHRlcl91bnJlZ2lzdGVyKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKik7CitleHRlcm4gdm9pZCB6ZmNwX2RiZl9yZWNfdHJpZyhjaGFyICosIHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKiwKKwkJCSAgICAgIHN0cnVjdCB6ZmNwX3BvcnQgKiwgc3RydWN0IHNjc2lfZGV2aWNlICosIHU4LCB1OCk7CitleHRlcm4gdm9pZCB6ZmNwX2RiZl9yZWNfcnVuKGNoYXIgKiwgc3RydWN0IHpmY3BfZXJwX2FjdGlvbiAqKTsKK2V4dGVybiB2b2lkIHpmY3BfZGJmX2hiYV9mc2ZfdXNzKGNoYXIgKiwgc3RydWN0IHpmY3BfZnNmX3JlcSAqKTsKK2V4dGVybiB2b2lkIHpmY3BfZGJmX2hiYV9mc2ZfcmVzKGNoYXIgKiwgc3RydWN0IHpmY3BfZnNmX3JlcSAqKTsKK2V4dGVybiB2b2lkIHpmY3BfZGJmX2hiYV9iaXRfZXJyKGNoYXIgKiwgc3RydWN0IHpmY3BfZnNmX3JlcSAqKTsKIGV4dGVybiB2b2lkIHpmY3BfZGJmX2hiYV9iZXJyKHN0cnVjdCB6ZmNwX2RiZiAqLCBzdHJ1Y3QgemZjcF9mc2ZfcmVxICopOwotZXh0ZXJuIHZvaWQgemZjcF9kYmZfc2FuX2N0X3JlcXVlc3Qoc3RydWN0IHpmY3BfZnNmX3JlcSAqLCB1MzIpOwotZXh0ZXJuIHZvaWQgemZjcF9kYmZfc2FuX2N0X3Jlc3BvbnNlKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKik7Ci1leHRlcm4gdm9pZCB6ZmNwX2RiZl9zYW5fZWxzX3JlcXVlc3Qoc3RydWN0IHpmY3BfZnNmX3JlcSAqKTsKLWV4dGVybiB2b2lkIHpmY3BfZGJmX3Nhbl9lbHNfcmVzcG9uc2Uoc3RydWN0IHpmY3BfZnNmX3JlcSAqKTsKLWV4dGVybiB2b2lkIHpmY3BfZGJmX3Nhbl9pbmNvbWluZ19lbHMoc3RydWN0IHpmY3BfZnNmX3JlcSAqKTsKLWV4dGVybiB2b2lkIF96ZmNwX2RiZl9zY3NpKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQsIHN0cnVjdCB6ZmNwX2RiZiAqLAotCQkJICAgc3RydWN0IHNjc2lfY21uZCAqLCBzdHJ1Y3QgemZjcF9mc2ZfcmVxICosCi0JCQkgICB1bnNpZ25lZCBsb25nKTsKK2V4dGVybiB2b2lkIHpmY3BfZGJmX3Nhbl9yZXEoY2hhciAqLCBzdHJ1Y3QgemZjcF9mc2ZfcmVxICosIHUzMik7CitleHRlcm4gdm9pZCB6ZmNwX2RiZl9zYW5fcmVzKGNoYXIgKiwgc3RydWN0IHpmY3BfZnNmX3JlcSAqKTsKK2V4dGVybiB2b2lkIHpmY3BfZGJmX3Nhbl9pbl9lbHMoY2hhciAqLCBzdHJ1Y3QgemZjcF9mc2ZfcmVxICopOworZXh0ZXJuIHZvaWQgemZjcF9kYmZfc2NzaShjaGFyICosIHN0cnVjdCBzY3NpX2NtbmQgKiwgc3RydWN0IHpmY3BfZnNmX3JlcSAqKTsKIAogLyogemZjcF9lcnAuYyAqLwogZXh0ZXJuIHZvaWQgemZjcF9lcnBfc2V0X2FkYXB0ZXJfc3RhdHVzKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKiwgdTMyKTsKIGV4dGVybiB2b2lkIHpmY3BfZXJwX2NsZWFyX2FkYXB0ZXJfc3RhdHVzKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKiwgdTMyKTsKLWV4dGVybiB2b2lkIHpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKiwgaW50LCBjaGFyICosIHZvaWQgKik7Ci1leHRlcm4gdm9pZCB6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKiwgaW50LCBjaGFyICosCi0JCQkJICAgICAgdm9pZCAqKTsKK2V4dGVybiB2b2lkIHpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKiwgaW50LCBjaGFyICopOworZXh0ZXJuIHZvaWQgemZjcF9lcnBfYWRhcHRlcl9zaHV0ZG93bihzdHJ1Y3QgemZjcF9hZGFwdGVyICosIGludCwgY2hhciAqKTsKIGV4dGVybiB2b2lkIHpmY3BfZXJwX3NldF9wb3J0X3N0YXR1cyhzdHJ1Y3QgemZjcF9wb3J0ICosIHUzMik7CiBleHRlcm4gdm9pZCB6ZmNwX2VycF9jbGVhcl9wb3J0X3N0YXR1cyhzdHJ1Y3QgemZjcF9wb3J0ICosIHUzMik7Ci1leHRlcm4gaW50ICB6ZmNwX2VycF9wb3J0X3Jlb3BlbihzdHJ1Y3QgemZjcF9wb3J0ICosIGludCwgY2hhciAqLCB2b2lkICopOwotZXh0ZXJuIHZvaWQgemZjcF9lcnBfcG9ydF9zaHV0ZG93bihzdHJ1Y3QgemZjcF9wb3J0ICosIGludCwgY2hhciAqLCB2b2lkICopOwotZXh0ZXJuIHZvaWQgemZjcF9lcnBfcG9ydF9mb3JjZWRfcmVvcGVuKHN0cnVjdCB6ZmNwX3BvcnQgKiwgaW50LCBjaGFyICosCi0JCQkJCXZvaWQgKik7CitleHRlcm4gaW50ICB6ZmNwX2VycF9wb3J0X3Jlb3BlbihzdHJ1Y3QgemZjcF9wb3J0ICosIGludCwgY2hhciAqKTsKK2V4dGVybiB2b2lkIHpmY3BfZXJwX3BvcnRfc2h1dGRvd24oc3RydWN0IHpmY3BfcG9ydCAqLCBpbnQsIGNoYXIgKik7CitleHRlcm4gdm9pZCB6ZmNwX2VycF9wb3J0X2ZvcmNlZF9yZW9wZW4oc3RydWN0IHpmY3BfcG9ydCAqLCBpbnQsIGNoYXIgKik7CiBleHRlcm4gdm9pZCB6ZmNwX2VycF9zZXRfbHVuX3N0YXR1cyhzdHJ1Y3Qgc2NzaV9kZXZpY2UgKiwgdTMyKTsKIGV4dGVybiB2b2lkIHpmY3BfZXJwX2NsZWFyX2x1bl9zdGF0dXMoc3RydWN0IHNjc2lfZGV2aWNlICosIHUzMik7Ci1leHRlcm4gdm9pZCB6ZmNwX2VycF9sdW5fcmVvcGVuKHN0cnVjdCBzY3NpX2RldmljZSAqLCBpbnQsIGNoYXIgKiwgdm9pZCAqKTsKLWV4dGVybiB2b2lkIHpmY3BfZXJwX2x1bl9zaHV0ZG93bihzdHJ1Y3Qgc2NzaV9kZXZpY2UgKiwgaW50LCBjaGFyICosIHZvaWQgKik7CitleHRlcm4gdm9pZCB6ZmNwX2VycF9sdW5fcmVvcGVuKHN0cnVjdCBzY3NpX2RldmljZSAqLCBpbnQsIGNoYXIgKik7CitleHRlcm4gdm9pZCB6ZmNwX2VycF9sdW5fc2h1dGRvd24oc3RydWN0IHNjc2lfZGV2aWNlICosIGludCwgY2hhciAqKTsKIGV4dGVybiB2b2lkIHpmY3BfZXJwX2x1bl9zaHV0ZG93bl93YWl0KHN0cnVjdCBzY3NpX2RldmljZSAqLCBjaGFyICopOwogZXh0ZXJuIGludCAgemZjcF9lcnBfdGhyZWFkX3NldHVwKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKik7CiBleHRlcm4gdm9pZCB6ZmNwX2VycF90aHJlYWRfa2lsbChzdHJ1Y3QgemZjcF9hZGFwdGVyICopOwpAQCAtMTQ5LDYgKzEzNSw4IEBACiBleHRlcm4gaW50IHpmY3BfcWRpb19vcGVuKHN0cnVjdCB6ZmNwX3FkaW8gKik7CiBleHRlcm4gdm9pZCB6ZmNwX3FkaW9fY2xvc2Uoc3RydWN0IHpmY3BfcWRpbyAqKTsKIGV4dGVybiB2b2lkIHpmY3BfcWRpb19zaW9zbChzdHJ1Y3QgemZjcF9hZGFwdGVyICopOworZXh0ZXJuIHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnpmY3BfZnNmX2dldF9yZXEoc3RydWN0IHpmY3BfcWRpbyAqLAorCQkJCQkgICAgIHN0cnVjdCBxZGlvX2J1ZmZlciAqKTsKIAogLyogemZjcF9zY3NpLmMgKi8KIGV4dGVybiBzdHJ1Y3QgemZjcF9kYXRhIHpmY3BfZGF0YTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZmMuYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZmMuYwppbmRleCA4NmZkOTA1Li4zMGNmOTFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZjLmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mYy5jCkBAIC0xNzQsNyArMTc0LDcgQEAKIAkJaWYgKCFwb3J0LT5kX2lkKQogCQkJemZjcF9lcnBfcG9ydF9yZW9wZW4ocG9ydCwKIAkJCQkJICAgICBaRkNQX1NUQVRVU19DT01NT05fRVJQX0ZBSUxFRCwKLQkJCQkJICAgICAiZmNyc2NuMSIsIE5VTEwpOworCQkJCQkgICAgICJmY3JzY24xIik7CiAJfQogCXJlYWRfdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnBvcnRfbGlzdF9sb2NrLCBmbGFncyk7CiB9CkBAIC0yMTUsNyArMjE1LDcgQEAKIAlyZWFkX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+cG9ydF9saXN0X2xvY2ssIGZsYWdzKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcnQsICZhZGFwdGVyLT5wb3J0X2xpc3QsIGxpc3QpCiAJCWlmIChwb3J0LT53d3BuID09IHd3cG4pIHsKLQkJCXpmY3BfZXJwX3BvcnRfZm9yY2VkX3Jlb3Blbihwb3J0LCAwLCAiZmNpd3dwMSIsIHJlcSk7CisJCQl6ZmNwX2VycF9wb3J0X2ZvcmNlZF9yZW9wZW4ocG9ydCwgMCwgImZjaXd3cDEiKTsKIAkJCWJyZWFrOwogCQl9CiAJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+cG9ydF9saXN0X2xvY2ssIGZsYWdzKTsKQEAgLTI1MSw3ICsyNTEsNyBAQAogCQkoc3RydWN0IGZzZl9zdGF0dXNfcmVhZF9idWZmZXIgKikgZnNmX3JlcS0+ZGF0YTsKIAl1bnNpZ25lZCBpbnQgZWxzX3R5cGUgPSBzdGF0dXNfYnVmZmVyLT5wYXlsb2FkLmRhdGFbMF07CiAKLQl6ZmNwX2RiZl9zYW5faW5jb21pbmdfZWxzKGZzZl9yZXEpOworCXpmY3BfZGJmX3Nhbl9pbl9lbHMoImZjaWVsczEiLCBmc2ZfcmVxKTsKIAlpZiAoZWxzX3R5cGUgPT0gRUxTX1BMT0dJKQogCQl6ZmNwX2ZjX2luY29taW5nX3Bsb2dpKGZzZl9yZXEpOwogCWVsc2UgaWYgKGVsc190eXBlID09IEVMU19MT0dPKQpAQCAtMzYwLDcgKzM2MCw3IEBACiAJcmV0ID0gemZjcF9mY19uc19naWRfcG4ocG9ydCk7CiAJaWYgKHJldCkgewogCQkvKiBjb3VsZCBub3QgaXNzdWUgZ2lkX3BuIGZvciBzb21lIHJlYXNvbiAqLwotCQl6ZmNwX2VycF9hZGFwdGVyX3Jlb3Blbihwb3J0LT5hZGFwdGVyLCAwLCAiZmNncG5fMSIsIE5VTEwpOworCQl6ZmNwX2VycF9hZGFwdGVyX3Jlb3Blbihwb3J0LT5hZGFwdGVyLCAwLCAiZmNncG5fMSIpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTM2OSw3ICszNjksNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQl6ZmNwX2VycF9wb3J0X3Jlb3Blbihwb3J0LCAwLCAiZmNncG5fMyIsIE5VTEwpOworCXpmY3BfZXJwX3BvcnRfcmVvcGVuKHBvcnQsIDAsICJmY2dwbl8zIik7CiBvdXQ6CiAJcHV0X2RldmljZSgmcG9ydC0+ZGV2KTsKIH0KQEAgLTQyNiw3ICs0MjYsNyBAQAogCWlmIChhZGlzYy0+ZWxzLnN0YXR1cykgewogCQkvKiByZXF1ZXN0IHJlamVjdGVkIG9yIHRpbWVkIG91dCAqLwogCQl6ZmNwX2VycF9wb3J0X2ZvcmNlZF9yZW9wZW4ocG9ydCwgWkZDUF9TVEFUVVNfQ09NTU9OX0VSUF9GQUlMRUQsCi0JCQkJCSAgICAiZmNhZGhfMSIsIE5VTEwpOworCQkJCQkgICAgImZjYWRoXzEiKTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC00MzYsNyArNDM2LDcgQEAKIAlpZiAoKHBvcnQtPnd3cG4gIT0gYWRpc2NfcmVzcC0+YWRpc2Nfd3dwbikgfHwKIAkgICAgIShhdG9taWNfcmVhZCgmcG9ydC0+c3RhdHVzKSAmIFpGQ1BfU1RBVFVTX0NPTU1PTl9PUEVOKSkgewogCQl6ZmNwX2VycF9wb3J0X3Jlb3Blbihwb3J0LCBaRkNQX1NUQVRVU19DT01NT05fRVJQX0ZBSUxFRCwKLQkJCQkgICAgICJmY2FkaF8yIiwgTlVMTCk7CisJCQkJICAgICAiZmNhZGhfMiIpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTUwNyw3ICs1MDcsNyBAQAogCiAJLyogc2VuZCBvZiBBRElTQyB3YXMgbm90IHBvc3NpYmxlICovCiAJYXRvbWljX2NsZWFyX21hc2soWkZDUF9TVEFUVVNfUE9SVF9MSU5LX1RFU1QsICZwb3J0LT5zdGF0dXMpOwotCXpmY3BfZXJwX3BvcnRfZm9yY2VkX3Jlb3Blbihwb3J0LCAwLCAiZmNsdHdrMSIsIE5VTEwpOworCXpmY3BfZXJwX3BvcnRfZm9yY2VkX3Jlb3Blbihwb3J0LCAwLCAiZmNsdHdrMSIpOwogCiBvdXQ6CiAJcHV0X2RldmljZSgmcG9ydC0+ZGV2KTsKQEAgLTY1OSw3ICs2NTksNyBAQAogCQlwb3J0ID0gemZjcF9wb3J0X2VucXVldWUoYWRhcHRlciwgYWNjLT5mcF93d3BuLAogCQkJCQkgWkZDUF9TVEFUVVNfQ09NTU9OX05PRVNDLCBkX2lkKTsKIAkJaWYgKCFJU19FUlIocG9ydCkpCi0JCQl6ZmNwX2VycF9wb3J0X3Jlb3Blbihwb3J0LCAwLCAiZmNlZ3BmMSIsIE5VTEwpOworCQkJemZjcF9lcnBfcG9ydF9yZW9wZW4ocG9ydCwgMCwgImZjZWdwZjEiKTsKIAkJZWxzZSBpZiAoUFRSX0VSUihwb3J0KSAhPSAtRUVYSVNUKQogCQkJcmV0ID0gUFRSX0VSUihwb3J0KTsKIAl9CkBAIC02NzEsNyArNjcxLDcgQEAKIAl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+cG9ydF9saXN0X2xvY2ssIGZsYWdzKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwb3J0LCB0bXAsICZyZW1vdmVfbGgsIGxpc3QpIHsKLQkJemZjcF9lcnBfcG9ydF9zaHV0ZG93bihwb3J0LCAwLCAiZmNlZ3BmMiIsIE5VTEwpOworCQl6ZmNwX2VycF9wb3J0X3NodXRkb3duKHBvcnQsIDAsICJmY2VncGYyIik7CiAJCXpmY3BfZGV2aWNlX3VucmVnaXN0ZXIoJnBvcnQtPmRldiwgJnpmY3Bfc3lzZnNfcG9ydF9hdHRycyk7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuYwppbmRleCAyZWI3ZGQ1Li42MGZmOWQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmMKQEAgLTIzLDcgKzIzLDcgQEAKIAlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKikgZGF0YTsKIAl6ZmNwX3FkaW9fc2lvc2woYWRhcHRlcik7CiAJemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4oYWRhcHRlciwgWkZDUF9TVEFUVVNfQ09NTU9OX0VSUF9GQUlMRUQsCi0JCQkJImZzcnRoXzEiLCBOVUxMKTsKKwkJCQkiZnNydGhfMSIpOwogfQogCiBzdGF0aWMgdm9pZCB6ZmNwX2ZzZl9zdGFydF90aW1lcihzdHJ1Y3QgemZjcF9mc2ZfcmVxICpmc2ZfcmVxLApAQCAtNjUsNyArNjUsNyBAQAogewogCWRldl9lcnIoJnJlcS0+YWRhcHRlci0+Y2N3X2RldmljZS0+ZGV2LCAiRkNQIGRldmljZSBub3QgIgogCQkib3BlcmF0aW9uYWwgYmVjYXVzZSBvZiBhbiB1bnN1cHBvcnRlZCBGQyBjbGFzc1xuIik7Ci0JemZjcF9lcnBfYWRhcHRlcl9zaHV0ZG93bihyZXEtPmFkYXB0ZXIsIDAsICJmc2Nuc18xIiwgcmVxKTsKKwl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKHJlcS0+YWRhcHRlciwgMCwgImZzY25zXzEiKTsKIAlyZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1I7CiB9CiAKQEAgLTk4LDcgKzk4LDcgQEAKIAlyZWFkX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+cG9ydF9saXN0X2xvY2ssIGZsYWdzKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcnQsICZhZGFwdGVyLT5wb3J0X2xpc3QsIGxpc3QpCiAJCWlmIChwb3J0LT5kX2lkID09IGRfaWQpIHsKLQkJCXpmY3BfZXJwX3BvcnRfcmVvcGVuKHBvcnQsIDAsICJmc3NycGMxIiwgcmVxKTsKKwkJCXpmY3BfZXJwX3BvcnRfcmVvcGVuKHBvcnQsIDAsICJmc3NycGMxIik7CiAJCQlicmVhazsKIAkJfQogCXJlYWRfdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnBvcnRfbGlzdF9sb2NrLCBmbGFncyk7CkBAIC0yMTEsMTMgKzIxMSwxMyBAQAogCXN0cnVjdCBmc2Zfc3RhdHVzX3JlYWRfYnVmZmVyICpzcl9idWYgPSByZXEtPmRhdGE7CiAKIAlpZiAocmVxLT5zdGF0dXMgJiBaRkNQX1NUQVRVU19GU0ZSRVFfRElTTUlTU0VEKSB7Ci0JCXpmY3BfZGJmX2hiYV9mc2ZfdW5zb2woImRpc20iLCBhZGFwdGVyLT5kYmYsIHNyX2J1Zik7CisJCXpmY3BfZGJmX2hiYV9mc2ZfdXNzKCJmc3NyaF8xIiwgcmVxKTsKIAkJbWVtcG9vbF9mcmVlKHNyX2J1ZiwgYWRhcHRlci0+cG9vbC5zdGF0dXNfcmVhZF9kYXRhKTsKIAkJemZjcF9mc2ZfcmVxX2ZyZWUocmVxKTsKIAkJcmV0dXJuOwogCX0KIAotCXpmY3BfZGJmX2hiYV9mc2ZfdW5zb2woInJlYWQiLCBhZGFwdGVyLT5kYmYsIHNyX2J1Zik7CisJemZjcF9kYmZfaGJhX2ZzZl91c3MoImZzc3JoXzIiLCByZXEpOwogCiAJc3dpdGNoIChzcl9idWYtPnN0YXR1c190eXBlKSB7CiAJY2FzZSBGU0ZfU1RBVFVTX1JFQURfUE9SVF9DTE9TRUQ6CkBAIC0yMzIsNyArMjMyLDcgQEAKIAkJZGV2X3dhcm4oJmFkYXB0ZXItPmNjd19kZXZpY2UtPmRldiwKIAkJCSAiVGhlIGVycm9yIHRocmVzaG9sZCBmb3IgY2hlY2tzdW0gc3RhdGlzdGljcyAiCiAJCQkgImhhcyBiZWVuIGV4Y2VlZGVkXG4iKTsKLQkJemZjcF9kYmZfaGJhX2JlcnIoYWRhcHRlci0+ZGJmLCByZXEpOworCQl6ZmNwX2RiZl9oYmFfYml0X2VycigiZnNzcmhfMyIsIHJlcSk7CiAJCWJyZWFrOwogCWNhc2UgRlNGX1NUQVRVU19SRUFEX0xJTktfRE9XTjoKIAkJemZjcF9mc2Zfc3RhdHVzX3JlYWRfbGlua19kb3duKHJlcSk7CkBAIC0yNDcsNyArMjQ3LDcgQEAKIAkJemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4oYWRhcHRlciwKIAkJCQkJWkZDUF9TVEFUVVNfQURBUFRFUl9MSU5LX1VOUExVR0dFRCB8CiAJCQkJCVpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfRkFJTEVELAotCQkJCQkiZnNzcmhfMiIsIHJlcSk7CisJCQkJCSJmc3NyaF8yIik7CiAJCXpmY3BfZmNfZW5xdWV1ZV9ldmVudChhZGFwdGVyLCBGQ0hfRVZUX0xJTktVUCwgMCk7CiAKIAkJYnJlYWs7CkBAIC0yODcsNyArMjg3LDcgQEAKIAkJCSJUaGUgRkNQIGFkYXB0ZXIgcmVwb3J0ZWQgYSBwcm9ibGVtICIKIAkJCSJ0aGF0IGNhbm5vdCBiZSByZWNvdmVyZWRcbiIpOwogCQl6ZmNwX3FkaW9fc2lvc2wocmVxLT5hZGFwdGVyKTsKLQkJemZjcF9lcnBfYWRhcHRlcl9zaHV0ZG93bihyZXEtPmFkYXB0ZXIsIDAsICJmc2ZzcWUxIiwgcmVxKTsKKwkJemZjcF9lcnBfYWRhcHRlcl9zaHV0ZG93bihyZXEtPmFkYXB0ZXIsIDAsICJmc2ZzcWUxIik7CiAJCWJyZWFrOwogCX0KIAkvKiBhbGwgbm9uLXJldHVybiBzdGF0cyBzZXQgRlNGUkVRX0VSUk9SKi8KQEAgLTMwNCw3ICszMDQsNyBAQAogCQlkZXZfZXJyKCZyZXEtPmFkYXB0ZXItPmNjd19kZXZpY2UtPmRldiwKIAkJCSJUaGUgRkNQIGFkYXB0ZXIgZG9lcyBub3QgcmVjb2duaXplIHRoZSBjb21tYW5kIDB4JXhcbiIsCiAJCQlyZXEtPnF0Y2ItPmhlYWRlci5mc2ZfY29tbWFuZCk7Ci0JCXpmY3BfZXJwX2FkYXB0ZXJfc2h1dGRvd24ocmVxLT5hZGFwdGVyLCAwLCAiZnNmc2VfMSIsIHJlcSk7CisJCXpmY3BfZXJwX2FkYXB0ZXJfc2h1dGRvd24ocmVxLT5hZGFwdGVyLCAwLCAiZnNmc2VfMSIpOwogCQlyZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1I7CiAJCWJyZWFrOwogCWNhc2UgRlNGX0FEQVBURVJfU1RBVFVTX0FWQUlMQUJMRToKQEAgLTMzNSwxNyArMzM1LDE3IEBACiAJCQkiUVRDQiB2ZXJzaW9uIDB4JXggbm90IHN1cHBvcnRlZCBieSBGQ1AgYWRhcHRlciAiCiAJCQkiKDB4JXggdG8gMHgleClcbiIsIEZTRl9RVENCX0NVUlJFTlRfVkVSU0lPTiwKIAkJCXBzcS0+d29yZFswXSwgcHNxLT53b3JkWzFdKTsKLQkJemZjcF9lcnBfYWRhcHRlcl9zaHV0ZG93bihhZGFwdGVyLCAwLCAiZnNwc2VfMSIsIHJlcSk7CisJCXpmY3BfZXJwX2FkYXB0ZXJfc2h1dGRvd24oYWRhcHRlciwgMCwgImZzcHNlXzEiKTsKIAkJYnJlYWs7CiAJY2FzZSBGU0ZfUFJPVF9FUlJPUl9TVEFURToKIAljYXNlIEZTRl9QUk9UX1NFUV9OVU1CX0VSUk9SOgotCQl6ZmNwX2VycF9hZGFwdGVyX3Jlb3BlbihhZGFwdGVyLCAwLCAiZnNwc2VfMiIsIHJlcSk7CisJCXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKGFkYXB0ZXIsIDAsICJmc3BzZV8yIik7CiAJCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUjsKIAkJYnJlYWs7CiAJY2FzZSBGU0ZfUFJPVF9VTlNVUFBfUVRDQl9UWVBFOgogCQlkZXZfZXJyKCZhZGFwdGVyLT5jY3dfZGV2aWNlLT5kZXYsCiAJCQkiVGhlIFFUQ0IgdHlwZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBGQ1AgYWRhcHRlclxuIik7Ci0JCXpmY3BfZXJwX2FkYXB0ZXJfc2h1dGRvd24oYWRhcHRlciwgMCwgImZzcHNlXzMiLCByZXEpOworCQl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKGFkYXB0ZXIsIDAsICJmc3BzZV8zIik7CiAJCWJyZWFrOwogCWNhc2UgRlNGX1BST1RfSE9TVF9DT05ORUNUSU9OX0lOSVRJQUxJWklORzoKIAkJYXRvbWljX3NldF9tYXNrKFpGQ1BfU1RBVFVTX0FEQVBURVJfSE9TVF9DT05fSU5JVCwKQEAgLTM1NSwxMiArMzU1LDEyIEBACiAJCWRldl9lcnIoJmFkYXB0ZXItPmNjd19kZXZpY2UtPmRldiwKIAkJCSIweCVMeCBpcyBhbiBhbWJpZ3VvdXMgcmVxdWVzdCBpZGVudGlmaWVyXG4iLAogCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylxdGNiLT5ib3R0b20uc3VwcG9ydC5yZXFfaGFuZGxlKTsKLQkJemZjcF9lcnBfYWRhcHRlcl9zaHV0ZG93bihhZGFwdGVyLCAwLCAiZnNwc2VfNCIsIHJlcSk7CisJCXpmY3BfZXJwX2FkYXB0ZXJfc2h1dGRvd24oYWRhcHRlciwgMCwgImZzcHNlXzQiKTsKIAkJYnJlYWs7CiAJY2FzZSBGU0ZfUFJPVF9MSU5LX0RPV046CiAJCXpmY3BfZnNmX2xpbmtfZG93bl9pbmZvX2V2YWwocmVxLCAmcHNxLT5saW5rX2Rvd25faW5mbyk7CiAJCS8qIGdvIHRocm91Z2ggcmVvcGVuIHRvIGZsdXNoIHBlbmRpbmcgcmVxdWVzdHMgKi8KLQkJemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4oYWRhcHRlciwgMCwgImZzcHNlXzYiLCByZXEpOworCQl6ZmNwX2VycF9hZGFwdGVyX3Jlb3BlbihhZGFwdGVyLCAwLCAiZnNwc2VfNiIpOwogCQlicmVhazsKIAljYXNlIEZTRl9QUk9UX1JFRVNUX1FVRVVFOgogCQkvKiBBbGwgcG9ydHMgc2hvdWxkIGJlIG1hcmtlZCBhcyByZWFkeSB0byBydW4gYWdhaW4gKi8KQEAgLTM2OSwxNCArMzY5LDE0IEBACiAJCXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKGFkYXB0ZXIsCiAJCQkJCVpGQ1BfU1RBVFVTX0FEQVBURVJfTElOS19VTlBMVUdHRUQgfAogCQkJCQlaRkNQX1NUQVRVU19DT01NT05fRVJQX0ZBSUxFRCwKLQkJCQkJImZzcHNlXzgiLCByZXEpOworCQkJCQkiZnNwc2VfOCIpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlkZXZfZXJyKCZhZGFwdGVyLT5jY3dfZGV2aWNlLT5kZXYsCiAJCQkiMHgleCBpcyBub3QgYSB2YWxpZCB0cmFuc2ZlciBwcm90b2NvbCBzdGF0dXNcbiIsCiAJCQlxdGNiLT5wcmVmaXgucHJvdF9zdGF0dXMpOwogCQl6ZmNwX3FkaW9fc2lvc2woYWRhcHRlcik7Ci0JCXpmY3BfZXJwX2FkYXB0ZXJfc2h1dGRvd24oYWRhcHRlciwgMCwgImZzcHNlXzkiLCByZXEpOworCQl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKGFkYXB0ZXIsIDAsICJmc3BzZV85Iik7CiAJfQogCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUjsKIH0KQEAgLTQ4Miw3ICs0ODIsNyBAQAogCQlkZXZfZXJyKCZhZGFwdGVyLT5jY3dfZGV2aWNlLT5kZXYsCiAJCQkiVW5rbm93biBvciB1bnN1cHBvcnRlZCBhcmJpdHJhdGVkIGxvb3AgIgogCQkJImZpYnJlIGNoYW5uZWwgdG9wb2xvZ3kgZGV0ZWN0ZWRcbiIpOwotCQl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKGFkYXB0ZXIsIDAsICJmc2VjZV8xIiwgcmVxKTsKKwkJemZjcF9lcnBfYWRhcHRlcl9zaHV0ZG93bihhZGFwdGVyLCAwLCAiZnNlY2VfMSIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTUxOCw3ICs1MTgsNyBAQAogCQkJCSJGQ1AgYWRhcHRlciBtYXhpbXVtIFFUQ0Igc2l6ZSAoJWQgYnl0ZXMpICIKIAkJCQkiaXMgdG9vIHNtYWxsXG4iLAogCQkJCWJvdHRvbS0+bWF4X3F0Y2Jfc2l6ZSk7Ci0JCQl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKGFkYXB0ZXIsIDAsICJmc2VjZGgxIiwgcmVxKTsKKwkJCXpmY3BfZXJwX2FkYXB0ZXJfc2h1dGRvd24oYWRhcHRlciwgMCwgImZzZWNkaDEiKTsKIAkJCXJldHVybjsKIAkJfQogCQlhdG9taWNfc2V0X21hc2soWkZDUF9TVEFUVVNfQURBUFRFUl9YQ09ORklHX09LLApAQCAtNTM2LDcgKzUzNiw3IEBACiAJCQkmcXRjYi0+aGVhZGVyLmZzZl9zdGF0dXNfcXVhbC5saW5rX2Rvd25faW5mbyk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXpmY3BfZXJwX2FkYXB0ZXJfc2h1dGRvd24oYWRhcHRlciwgMCwgImZzZWNkaDMiLCByZXEpOworCQl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKGFkYXB0ZXIsIDAsICJmc2VjZGgzIik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTU1MiwxNCArNTUyLDE0IEBACiAJCWRldl9lcnIoJmFkYXB0ZXItPmNjd19kZXZpY2UtPmRldiwKIAkJCSJUaGUgRkNQIGFkYXB0ZXIgb25seSBzdXBwb3J0cyBuZXdlciAiCiAJCQkiY29udHJvbCBibG9jayB2ZXJzaW9uc1xuIik7Ci0JCXpmY3BfZXJwX2FkYXB0ZXJfc2h1dGRvd24oYWRhcHRlciwgMCwgImZzZWNkaDQiLCByZXEpOworCQl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKGFkYXB0ZXIsIDAsICJmc2VjZGg0Iik7CiAJCXJldHVybjsKIAl9CiAJaWYgKEZTRl9RVENCX0NVUlJFTlRfVkVSU0lPTiA+IGJvdHRvbS0+aGlnaF9xdGNiX3ZlcnNpb24pIHsKIAkJZGV2X2VycigmYWRhcHRlci0+Y2N3X2RldmljZS0+ZGV2LAogCQkJIlRoZSBGQ1AgYWRhcHRlciBvbmx5IHN1cHBvcnRzIG9sZGVyICIKIAkJCSJjb250cm9sIGJsb2NrIHZlcnNpb25zXG4iKTsKLQkJemZjcF9lcnBfYWRhcHRlcl9zaHV0ZG93bihhZGFwdGVyLCAwLCAiZnNlY2RoNSIsIHJlcSk7CisJCXpmY3BfZXJwX2FkYXB0ZXJfc2h1dGRvd24oYWRhcHRlciwgMCwgImZzZWNkaDUiKTsKIAl9CiB9CiAKQEAgLTcwMCw3ICs3MDAsNyBAQAogCQlkZWxfdGltZXIoJnJlcS0+dGltZXIpOwogCQkvKiBsb29rdXAgcmVxdWVzdCBhZ2FpbiwgbGlzdCBtaWdodCBoYXZlIGNoYW5nZWQgKi8KIAkJemZjcF9yZXFsaXN0X2ZpbmRfcm0oYWRhcHRlci0+cmVxX2xpc3QsIHJlcV9pZCk7Ci0JCXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKGFkYXB0ZXIsIDAsICJmc3JzX18xIiwgcmVxKTsKKwkJemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4oYWRhcHRlciwgMCwgImZzcnNfXzEiKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC03NTQsMTAgKzc1NCwxMSBAQAogCWdvdG8gb3V0OwogCiBmYWlsZWRfcmVxX3NlbmQ6CisJcmVxLT5kYXRhID0gTlVMTDsKIAltZW1wb29sX2ZyZWUoc3JfYnVmLCBhZGFwdGVyLT5wb29sLnN0YXR1c19yZWFkX2RhdGEpOwogZmFpbGVkX2J1ZjoKKwl6ZmNwX2RiZl9oYmFfZnNmX3VzcygiZnNzcl9fMSIsIHJlcSk7CiAJemZjcF9mc2ZfcmVxX2ZyZWUocmVxKTsKLQl6ZmNwX2RiZl9oYmFfZnNmX3Vuc29sKCJmYWlsIiwgYWRhcHRlci0+ZGJmLCBOVUxMKTsKIG91dDoKIAlzcGluX3VubG9ja19pcnEoJnFkaW8tPnJlcV9xX2xvY2spOwogCXJldHVybiByZXR2YWw7CkBAIC03NzYsMTQgKzc3NywxMyBAQAogCWNhc2UgRlNGX1BPUlRfSEFORExFX05PVF9WQUxJRDoKIAkJaWYgKGZzcS0+d29yZFswXSA9PSBmc3EtPndvcmRbMV0pIHsKIAkJCXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKHpmY3Bfc2Rldi0+cG9ydC0+YWRhcHRlciwgMCwKLQkJCQkJCSJmc2FmY2gxIiwgcmVxKTsKKwkJCQkJCSJmc2FmY2gxIik7CiAJCQlyZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1I7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBGU0ZfTFVOX0hBTkRMRV9OT1RfVkFMSUQ6CiAJCWlmIChmc3EtPndvcmRbMF0gPT0gZnNxLT53b3JkWzFdKSB7Ci0JCQl6ZmNwX2VycF9wb3J0X3Jlb3Blbih6ZmNwX3NkZXYtPnBvcnQsIDAsICJmc2FmY2gyIiwKLQkJCQkJICAgICByZXEpOworCQkJemZjcF9lcnBfcG9ydF9yZW9wZW4oemZjcF9zZGV2LT5wb3J0LCAwLCAiZnNhZmNoMiIpOwogCQkJcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SOwogCQl9CiAJCWJyZWFrOwpAQCAtNzk0LDE0ICs3OTQsMTMgQEAKIAkJemZjcF9lcnBfc2V0X3BvcnRfc3RhdHVzKHpmY3Bfc2Rldi0+cG9ydCwKIAkJCQkJIFpGQ1BfU1RBVFVTX0NPTU1PTl9BQ0NFU1NfQk9YRUQpOwogCQl6ZmNwX2VycF9wb3J0X3Jlb3Blbih6ZmNwX3NkZXYtPnBvcnQsCi0JCQkJICAgICBaRkNQX1NUQVRVU19DT01NT05fRVJQX0ZBSUxFRCwgImZzYWZjaDMiLAotCQkJCSAgICAgcmVxKTsKKwkJCQkgICAgIFpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfRkFJTEVELCAiZnNhZmNoMyIpOwogCQlyZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1I7CiAJCWJyZWFrOwogCWNhc2UgRlNGX0xVTl9CT1hFRDoKIAkJemZjcF9lcnBfc2V0X2x1bl9zdGF0dXMoc2RldiwgWkZDUF9TVEFUVVNfQ09NTU9OX0FDQ0VTU19CT1hFRCk7CiAJCXpmY3BfZXJwX2x1bl9yZW9wZW4oc2RldiwgWkZDUF9TVEFUVVNfQ09NTU9OX0VSUF9GQUlMRUQsCi0JCQkJICAgICJmc2FmY2g0IiwgcmVxKTsKKwkJCQkgICAgImZzYWZjaDQiKTsKIAkJcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCWNhc2UgRlNGX0FEQVBURVJfU1RBVFVTX0FWQUlMQUJMRToKQEAgLTg4Miw3ICs4ODEsNyBAQAogCiAJc3dpdGNoIChoZWFkZXItPmZzZl9zdGF0dXMpIHsKICAgICAgICAgY2FzZSBGU0ZfR09PRDoKLQkJemZjcF9kYmZfc2FuX2N0X3Jlc3BvbnNlKHJlcSk7CisJCXpmY3BfZGJmX3Nhbl9yZXMoImZzc2N0aDEiLCByZXEpOwogCQljdC0+c3RhdHVzID0gMDsKIAkJYnJlYWs7CiAgICAgICAgIGNhc2UgRlNGX1NFUlZJQ0VfQ0xBU1NfTk9UX1NVUFBPUlRFRDoKQEAgLTkwMiw3ICs5MDEsNyBAQAogCQlyZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1I7CiAJCWJyZWFrOwogCWNhc2UgRlNGX1BPUlRfSEFORExFX05PVF9WQUxJRDoKLQkJemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4oYWRhcHRlciwgMCwgImZzc2N0aDEiLCByZXEpOworCQl6ZmNwX2VycF9hZGFwdGVyX3Jlb3BlbihhZGFwdGVyLCAwLCAiZnNzY3RoMSIpOwogCQkvKiBmYWxsIHRocm91Z2ggKi8KIAljYXNlIEZTRl9HRU5FUklDX0NPTU1BTkRfUkVKRUNURUQ6CiAJY2FzZSBGU0ZfUEFZTE9BRF9TSVpFX01JU01BVENIOgpAQCAtMTAyNSw3ICsxMDI0LDcgQEAKIAlyZXEtPnF0Y2ItPmhlYWRlci5wb3J0X2hhbmRsZSA9IHdrYV9wb3J0LT5oYW5kbGU7CiAJcmVxLT5kYXRhID0gY3Q7CiAKLQl6ZmNwX2RiZl9zYW5fY3RfcmVxdWVzdChyZXEsIHdrYV9wb3J0LT5kX2lkKTsKKwl6ZmNwX2RiZl9zYW5fcmVxKCJmc3NjdF8xIiwgcmVxLCB3a2FfcG9ydC0+ZF9pZCk7CiAKIAlyZXQgPSB6ZmNwX2ZzZl9yZXFfc2VuZChyZXEpOwogCWlmIChyZXQpCkBAIC0xMDUzLDcgKzEwNTIsNyBAQAogCiAJc3dpdGNoIChoZWFkZXItPmZzZl9zdGF0dXMpIHsKIAljYXNlIEZTRl9HT09EOgotCQl6ZmNwX2RiZl9zYW5fZWxzX3Jlc3BvbnNlKHJlcSk7CisJCXpmY3BfZGJmX3Nhbl9yZXMoImZzc2VsaDEiLCByZXEpOwogCQlzZW5kX2Vscy0+c3RhdHVzID0gMDsKIAkJYnJlYWs7CiAJY2FzZSBGU0ZfU0VSVklDRV9DTEFTU19OT1RfU1VQUE9SVEVEOgpAQCAtMTEyNyw3ICsxMTI2LDcgQEAKIAlyZXEtPmhhbmRsZXIgPSB6ZmNwX2ZzZl9zZW5kX2Vsc19oYW5kbGVyOwogCXJlcS0+ZGF0YSA9IGVsczsKIAotCXpmY3BfZGJmX3Nhbl9lbHNfcmVxdWVzdChyZXEpOworCXpmY3BfZGJmX3Nhbl9yZXEoImZzc2VsczEiLCByZXEsIGRfaWQpOwogCiAJcmV0ID0gemZjcF9mc2ZfcmVxX3NlbmQocmVxKTsKIAlpZiAocmV0KQpAQCAtMTQ0OCw3ICsxNDQ3LDcgQEAKIAogCXN3aXRjaCAocmVxLT5xdGNiLT5oZWFkZXIuZnNmX3N0YXR1cykgewogCWNhc2UgRlNGX1BPUlRfSEFORExFX05PVF9WQUxJRDoKLQkJemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4ocG9ydC0+YWRhcHRlciwgMCwgImZzY3BoXzEiLCByZXEpOworCQl6ZmNwX2VycF9hZGFwdGVyX3Jlb3Blbihwb3J0LT5hZGFwdGVyLCAwLCAiZnNjcGhfMSIpOwogCQlyZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1I7CiAJCWJyZWFrOwogCWNhc2UgRlNGX0FEQVBURVJfU1RBVFVTX0FWQUlMQUJMRToKQEAgLTE1ODAsNyArMTU3OSw3IEBACiAKIAlpZiAocmVxLT5xdGNiLT5oZWFkZXIuZnNmX3N0YXR1cyA9PSBGU0ZfUE9SVF9IQU5ETEVfTk9UX1ZBTElEKSB7CiAJCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUjsKLQkJemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4od2thX3BvcnQtPmFkYXB0ZXIsIDAsICJmc2N3cGgxIiwgcmVxKTsKKwkJemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4od2thX3BvcnQtPmFkYXB0ZXIsIDAsICJmc2N3cGgxIik7CiAJfQogCiAJd2thX3BvcnQtPnN0YXR1cyA9IFpGQ1BfRkNfV0tBX1BPUlRfT0ZGTElORTsKQEAgLTE2MzgsNyArMTYzNyw3IEBACiAKIAlzd2l0Y2ggKGhlYWRlci0+ZnNmX3N0YXR1cykgewogCWNhc2UgRlNGX1BPUlRfSEFORExFX05PVF9WQUxJRDoKLQkJemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4ocG9ydC0+YWRhcHRlciwgMCwgImZzY3BwaDEiLCByZXEpOworCQl6ZmNwX2VycF9hZGFwdGVyX3Jlb3Blbihwb3J0LT5hZGFwdGVyLCAwLCAiZnNjcHBoMSIpOwogCQlyZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1I7CiAJCWJyZWFrOwogCWNhc2UgRlNGX0FDQ0VTU19ERU5JRUQ6CkBAIC0xNjU0LDcgKzE2NTMsNyBAQAogCQkJCQkJICAmc2Rldl90b196ZmNwKHNkZXYpLT5zdGF0dXMpOwogCQl6ZmNwX2VycF9zZXRfcG9ydF9zdGF0dXMocG9ydCwgWkZDUF9TVEFUVVNfQ09NTU9OX0FDQ0VTU19CT1hFRCk7CiAJCXpmY3BfZXJwX3BvcnRfcmVvcGVuKHBvcnQsIFpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfRkFJTEVELAotCQkJCSAgICAgImZzY3BwaDIiLCByZXEpOworCQkJCSAgICAgImZzY3BwaDIiKTsKIAkJcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SOwogCQlicmVhazsKIAljYXNlIEZTRl9BREFQVEVSX1NUQVRVU19BVkFJTEFCTEU6CkBAIC0xNzQzLDcgKzE3NDIsNyBAQAogCXN3aXRjaCAoaGVhZGVyLT5mc2Zfc3RhdHVzKSB7CiAKIAljYXNlIEZTRl9QT1JUX0hBTkRMRV9OT1RfVkFMSUQ6Ci0JCXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKGFkYXB0ZXIsIDAsICJmc291aF8xIiwgcmVxKTsKKwkJemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4oYWRhcHRlciwgMCwgImZzb3VoXzEiKTsKIAkJLyogZmFsbCB0aHJvdWdoICovCiAJY2FzZSBGU0ZfTFVOX0FMUkVBRFlfT1BFTjoKIAkJYnJlYWs7CkBAIC0xNzU1LDggKzE3NTQsNyBAQAogCQl6ZmNwX2VycF9zZXRfcG9ydF9zdGF0dXMoemZjcF9zZGV2LT5wb3J0LAogCQkJCQkgWkZDUF9TVEFUVVNfQ09NTU9OX0FDQ0VTU19CT1hFRCk7CiAJCXpmY3BfZXJwX3BvcnRfcmVvcGVuKHpmY3Bfc2Rldi0+cG9ydCwKLQkJCQkgICAgIFpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfRkFJTEVELCAiZnNvdWhfMiIsCi0JCQkJICAgICByZXEpOworCQkJCSAgICAgWkZDUF9TVEFUVVNfQ09NTU9OX0VSUF9GQUlMRUQsICJmc291aF8yIik7CiAJCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUjsKIAkJYnJlYWs7CiAJY2FzZSBGU0ZfTFVOX1NIQVJJTkdfVklPTEFUSU9OOgpAQCAtMTg1MiwyMCArMTg1MCwxOCBAQAogCiAJc3dpdGNoIChyZXEtPnF0Y2ItPmhlYWRlci5mc2Zfc3RhdHVzKSB7CiAJY2FzZSBGU0ZfUE9SVF9IQU5ETEVfTk9UX1ZBTElEOgotCQl6ZmNwX2VycF9hZGFwdGVyX3Jlb3Blbih6ZmNwX3NkZXYtPnBvcnQtPmFkYXB0ZXIsIDAsICJmc2N1aF8xIiwKLQkJCQkJcmVxKTsKKwkJemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4oemZjcF9zZGV2LT5wb3J0LT5hZGFwdGVyLCAwLCAiZnNjdWhfMSIpOwogCQlyZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1I7CiAJCWJyZWFrOwogCWNhc2UgRlNGX0xVTl9IQU5ETEVfTk9UX1ZBTElEOgotCQl6ZmNwX2VycF9wb3J0X3Jlb3Blbih6ZmNwX3NkZXYtPnBvcnQsIDAsICJmc2N1aF8yIiwgcmVxKTsKKwkJemZjcF9lcnBfcG9ydF9yZW9wZW4oemZjcF9zZGV2LT5wb3J0LCAwLCAiZnNjdWhfMiIpOwogCQlyZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1I7CiAJCWJyZWFrOwogCWNhc2UgRlNGX1BPUlRfQk9YRUQ6CiAJCXpmY3BfZXJwX3NldF9wb3J0X3N0YXR1cyh6ZmNwX3NkZXYtPnBvcnQsCiAJCQkJCSBaRkNQX1NUQVRVU19DT01NT05fQUNDRVNTX0JPWEVEKTsKIAkJemZjcF9lcnBfcG9ydF9yZW9wZW4oemZjcF9zZGV2LT5wb3J0LAotCQkJCSAgICAgWkZDUF9TVEFUVVNfQ09NTU9OX0VSUF9GQUlMRUQsICJmc2N1aF8zIiwKLQkJCQkgICAgIHJlcSk7CisJCQkJICAgICBaRkNQX1NUQVRVU19DT01NT05fRVJQX0ZBSUxFRCwgImZzY3VoXzMiKTsKIAkJcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SOwogCQlicmVhazsKIAljYXNlIEZTRl9BREFQVEVSX1NUQVRVU19BVkFJTEFCTEU6CkBAIC0yMDAyLDEzICsxOTk4LDEyIEBACiAJc3dpdGNoIChoZWFkZXItPmZzZl9zdGF0dXMpIHsKIAljYXNlIEZTRl9IQU5ETEVfTUlTTUFUQ0g6CiAJY2FzZSBGU0ZfUE9SVF9IQU5ETEVfTk9UX1ZBTElEOgotCQl6ZmNwX2VycF9hZGFwdGVyX3Jlb3Blbih6ZmNwX3NkZXYtPnBvcnQtPmFkYXB0ZXIsIDAsICJmc3NmY2gxIiwKLQkJCQkJcmVxKTsKKwkJemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4oemZjcF9zZGV2LT5wb3J0LT5hZGFwdGVyLCAwLCAiZnNzZmNoMSIpOwogCQlyZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1I7CiAJCWJyZWFrOwogCWNhc2UgRlNGX0ZDUExVTl9OT1RfVkFMSUQ6CiAJY2FzZSBGU0ZfTFVOX0hBTkRMRV9OT1RfVkFMSUQ6Ci0JCXpmY3BfZXJwX3BvcnRfcmVvcGVuKHpmY3Bfc2Rldi0+cG9ydCwgMCwgImZzc2ZjaDIiLCByZXEpOworCQl6ZmNwX2VycF9wb3J0X3Jlb3Blbih6ZmNwX3NkZXYtPnBvcnQsIDAsICJmc3NmY2gyIik7CiAJCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUjsKIAkJYnJlYWs7CiAJY2FzZSBGU0ZfU0VSVklDRV9DTEFTU19OT1RfU1VQUE9SVEVEOgpAQCAtMjAyNiw3ICsyMDIxLDcgQEAKIAkJCSh1bnNpZ25lZCBsb25nIGxvbmcpemZjcF9zY3NpX2Rldl9sdW4oc2RldiksCiAJCQkodW5zaWduZWQgbG9uZyBsb25nKXpmY3Bfc2Rldi0+cG9ydC0+d3dwbik7CiAJCXpmY3BfZXJwX2FkYXB0ZXJfc2h1dGRvd24oemZjcF9zZGV2LT5wb3J0LT5hZGFwdGVyLCAwLAotCQkJCQkgICJmc3NmY2gzIiwgcmVxKTsKKwkJCQkJICAiZnNzZmNoMyIpOwogCQlyZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1I7CiAJCWJyZWFrOwogCWNhc2UgRlNGX0NNTkRfTEVOR1RIX05PVF9WQUxJRDoKQEAgLTIwMzcsMjEgKzIwMzIsMjAgQEAKIAkJCSh1bnNpZ25lZCBsb25nIGxvbmcpemZjcF9zY3NpX2Rldl9sdW4oc2RldiksCiAJCQkodW5zaWduZWQgbG9uZyBsb25nKXpmY3Bfc2Rldi0+cG9ydC0+d3dwbik7CiAJCXpmY3BfZXJwX2FkYXB0ZXJfc2h1dGRvd24oemZjcF9zZGV2LT5wb3J0LT5hZGFwdGVyLCAwLAotCQkJCQkgICJmc3NmY2g0IiwgcmVxKTsKKwkJCQkJICAiZnNzZmNoNCIpOwogCQlyZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1I7CiAJCWJyZWFrOwogCWNhc2UgRlNGX1BPUlRfQk9YRUQ6CiAJCXpmY3BfZXJwX3NldF9wb3J0X3N0YXR1cyh6ZmNwX3NkZXYtPnBvcnQsCiAJCQkJCSBaRkNQX1NUQVRVU19DT01NT05fQUNDRVNTX0JPWEVEKTsKIAkJemZjcF9lcnBfcG9ydF9yZW9wZW4oemZjcF9zZGV2LT5wb3J0LAotCQkJCSAgICAgWkZDUF9TVEFUVVNfQ09NTU9OX0VSUF9GQUlMRUQsICJmc3NmY2g1IiwKLQkJCQkgICAgIHJlcSk7CisJCQkJICAgICBaRkNQX1NUQVRVU19DT01NT05fRVJQX0ZBSUxFRCwgImZzc2ZjaDUiKTsKIAkJcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SOwogCQlicmVhazsKIAljYXNlIEZTRl9MVU5fQk9YRUQ6CiAJCXpmY3BfZXJwX3NldF9sdW5fc3RhdHVzKHNkZXYsIFpGQ1BfU1RBVFVTX0NPTU1PTl9BQ0NFU1NfQk9YRUQpOwogCQl6ZmNwX2VycF9sdW5fcmVvcGVuKHNkZXYsIFpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfRkFJTEVELAotCQkJCSAgICAiZnNzZmNoNiIsIHJlcSk7CisJCQkJICAgICJmc3NmY2g2Iik7CiAJCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUjsKIAkJYnJlYWs7CiAJY2FzZSBGU0ZfQURBUFRFUl9TVEFUVVNfQVZBSUxBQkxFOgpAQCAtMjEwNCw3ICsyMDk4LDcgQEAKIAogc2tpcF9mc2ZzdGF0dXM6CiAJemZjcF9mc2ZfcmVxX3RyYWNlKHJlcSwgc2NwbnQpOwotCXpmY3BfZGJmX3Njc2lfcmVzdWx0KHJlcS0+YWRhcHRlci0+ZGJmLCBzY3BudCwgcmVxKTsKKwl6ZmNwX2RiZl9zY3NpX3Jlc3VsdChzY3BudCwgcmVxKTsKIAogCXNjcG50LT5ob3N0X3NjcmliYmxlID0gTlVMTDsKIAkoc2NwbnQtPnNjc2lfZG9uZSkgKHNjcG50KTsKQEAgLTI0MjAsMyArMjQxNCwxMiBAQAogCQkJYnJlYWs7CiAJfQogfQorCitzdHJ1Y3QgemZjcF9mc2ZfcmVxICp6ZmNwX2ZzZl9nZXRfcmVxKHN0cnVjdCB6ZmNwX3FkaW8gKnFkaW8sCisJCQkJICAgICAgc3RydWN0IHFkaW9fYnVmZmVyICpzYmFsKQoreworCXN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50ICpzYmFsZSA9ICZzYmFsLT5lbGVtZW50WzBdOworCXU2NCByZXFfaWQgPSAodW5zaWduZWQgbG9uZykgc2JhbGUtPmFkZHI7CisKKwlyZXR1cm4gemZjcF9yZXFsaXN0X2ZpbmQocWRpby0+YWRhcHRlci0+cmVxX2xpc3QsIHJlcV9pZCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3FkaW8uYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfcWRpby5jCmluZGV4IGEwNTU0YmUuLjhkYTVlZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfcWRpby5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfcWRpby5jCkBAIC00MSw3ICs0MSw3IEBACiAJCXpmY3BfcWRpb19zaW9zbChhZGFwdGVyKTsKIAl6ZmNwX2VycF9hZGFwdGVyX3Jlb3BlbihhZGFwdGVyLAogCQkJCVpGQ1BfU1RBVFVTX0FEQVBURVJfTElOS19VTlBMVUdHRUQgfAotCQkJCVpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfRkFJTEVELCBpZCwgTlVMTCk7CisJCQkJWkZDUF9TVEFUVVNfQ09NTU9OX0VSUF9GQUlMRUQsIGlkKTsKIH0KIAogc3RhdGljIHZvaWQgemZjcF9xZGlvX3plcm9fc2JhbHMoc3RydWN0IHFkaW9fYnVmZmVyICpzYmFsW10sIGludCBmaXJzdCwgaW50IGNudCkKQEAgLTc0LDcgKzc0LDYgQEAKIAlzdHJ1Y3QgemZjcF9xZGlvICpxZGlvID0gKHN0cnVjdCB6ZmNwX3FkaW8gKikgcGFybTsKIAogCWlmICh1bmxpa2VseShxZGlvX2VycikpIHsKLQkJemZjcF9kYmZfaGJhX3FkaW8ocWRpby0+YWRhcHRlci0+ZGJmLCBxZGlvX2VyciwgaWR4LCBjb3VudCk7CiAJCXpmY3BfcWRpb19oYW5kbGVyX2Vycm9yKHFkaW8sICJxZGlyZXExIiwgcWRpb19lcnIpOwogCQlyZXR1cm47CiAJfQpAQCAtOTcsNyArOTYsNiBAQAogCWludCBzYmFsX2lkeCwgc2JhbF9ubzsKIAogCWlmICh1bmxpa2VseShxZGlvX2VycikpIHsKLQkJemZjcF9kYmZfaGJhX3FkaW8ocWRpby0+YWRhcHRlci0+ZGJmLCBxZGlvX2VyciwgaWR4LCBjb3VudCk7CiAJCXpmY3BfcWRpb19oYW5kbGVyX2Vycm9yKHFkaW8sICJxZGlyZXMxIiwgcWRpb19lcnIpOwogCQlyZXR1cm47CiAJfQpAQCAtMTE2LDcgKzExNCw3IEBACiAJICogcHV0IFNCQUxzIGJhY2sgdG8gcmVzcG9uc2UgcXVldWUKIAkgKi8KIAlpZiAoZG9fUURJTyhjZGV2LCBRRElPX0ZMQUdfU1lOQ19JTlBVVCwgMCwgaWR4LCBjb3VudCkpCi0JCXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKHFkaW8tPmFkYXB0ZXIsIDAsICJxZGlyZXMyIiwgTlVMTCk7CisJCXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKHFkaW8tPmFkYXB0ZXIsIDAsICJxZGlyZXMyIik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcWRpb19idWZmZXJfZWxlbWVudCAqCkBAIC0yMzYsNyArMjM0LDcgQEAKIAlpZiAoIXJldCkgewogCQlhdG9taWNfaW5jKCZxZGlvLT5yZXFfcV9mdWxsKTsKIAkJLyogYXNzdW1lIGhhbmdpbmcgb3V0Ym91bmQgcXVldWUsIHRyeSBxdWV1ZSByZWNvdmVyeSAqLwotCQl6ZmNwX2VycF9hZGFwdGVyX3Jlb3BlbihxZGlvLT5hZGFwdGVyLCAwLCAicWRzYmdfMSIsIE5VTEwpOworCQl6ZmNwX2VycF9hZGFwdGVyX3Jlb3BlbihxZGlvLT5hZGFwdGVyLCAwLCAicWRzYmdfMSIpOwogCX0KIAogCXNwaW5fbG9ja19pcnEoJnFkaW8tPnJlcV9xX2xvY2spOwpAQCAtMjkyLDYgKzI5MCw4IEBACiAJaWQtPmludF9wYXJtID0gKHVuc2lnbmVkIGxvbmcpIHFkaW87CiAJaWQtPmlucHV0X3NiYWxfYWRkcl9hcnJheSA9ICh2b2lkICoqKSAocWRpby0+cmVzX3EpOwogCWlkLT5vdXRwdXRfc2JhbF9hZGRyX2FycmF5ID0gKHZvaWQgKiopIChxZGlvLT5yZXFfcSk7CisJaWQtPnNjYW5fdGhyZXNob2xkID0KKwkJUURJT19NQVhfQlVGRkVSU19QRVJfUSAtIFpGQ1BfUURJT19NQVhfU0JBTFNfUEVSX1JFUSAqIDI7CiB9CiAKIC8qKgpAQCAtMzA5LDYgKzMwOSw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJemZjcF9xZGlvX3NldHVwX2luaXRfZGF0YSgmaW5pdF9kYXRhLCBxZGlvKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZxZGlvLT5yZXFfcV93cSk7CiAKIAlyZXR1cm4gcWRpb19hbGxvY2F0ZSgmaW5pdF9kYXRhKTsKIH0KQEAgLTM5Myw2ICszOTQsNyBAQAogCS8qIHNldCBpbmRleCBvZiBmaXJzdCBhdmFsYWJsZSBTQkFMUyAvIG51bWJlciBvZiBhdmFpbGFibGUgU0JBTFMgKi8KIAlxZGlvLT5yZXFfcV9pZHggPSAwOwogCWF0b21pY19zZXQoJnFkaW8tPnJlcV9xX2ZyZWUsIFFESU9fTUFYX0JVRkZFUlNfUEVSX1EpOworCWF0b21pY19zZXRfbWFzayhaRkNQX1NUQVRVU19BREFQVEVSX1FESU9VUCwgJnFkaW8tPmFkYXB0ZXItPnN0YXR1cyk7CiAKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zY3NpLmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3Njc2kuYwppbmRleCA2MzUyOWVkLi5kZGI1ODAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3Njc2kuYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3Njc2kuYwpAQCAtMzAsNiArMzAsMTAgQEAKIE1PRFVMRV9QQVJNX0RFU0MoZGlmLCAiRW5hYmxlIERJRi9ESVggZGF0YSBpbnRlZ3JpdHkgc3VwcG9ydCIpOwogI2VuZGlmCiAKK3N0YXRpYyBib29sIGFsbG93X2x1bl9zY2FuID0gMTsKK21vZHVsZV9wYXJhbShhbGxvd19sdW5fc2NhbiwgYm9vbCwgMDYwMCk7CitNT0RVTEVfUEFSTV9ERVNDKGFsbG93X2x1bl9zY2FuLCAiRm9yIE5QSVYsIHNjYW4gYW5kIGF0dGFjaCBhbGwgc3RvcmFnZSBMVU5zIik7CisKIHN0YXRpYyBpbnQgemZjcF9zY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBkZXB0aCwKIAkJCQkJaW50IHJlYXNvbikKIHsKQEAgLTY4LDExICs3Miw4IEBACiAKIHN0YXRpYyB2b2lkIHpmY3Bfc2NzaV9jb21tYW5kX2ZhaWwoc3RydWN0IHNjc2lfY21uZCAqc2NwbnQsIGludCByZXN1bHQpCiB7Ci0Jc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9Ci0JCShzdHJ1Y3QgemZjcF9hZGFwdGVyICopIHNjcG50LT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhWzBdOwotCiAJc2V0X2hvc3RfYnl0ZShzY3BudCwgcmVzdWx0KTsKLQl6ZmNwX2RiZl9zY3NpX2ZhaWxfc2VuZChhZGFwdGVyLT5kYmYsIHNjcG50KTsKKwl6ZmNwX2RiZl9zY3NpX2ZhaWxfc2VuZChzY3BudCk7CiAJc2NwbnQtPnNjc2lfZG9uZShzY3BudCk7CiB9CiAKQEAgLTgwLDcgKzgxLDYgQEAKIGludCB6ZmNwX3Njc2lfcXVldWVjb21tYW5kKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0LCBzdHJ1Y3Qgc2NzaV9jbW5kICpzY3BudCkKIHsKIAlzdHJ1Y3QgemZjcF9zY3NpX2RldiAqemZjcF9zZGV2ID0gc2Rldl90b196ZmNwKHNjcG50LT5kZXZpY2UpOwotCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSB6ZmNwX3NkZXYtPnBvcnQtPmFkYXB0ZXI7CiAJc3RydWN0IGZjX3Jwb3J0ICpycG9ydCA9IHN0YXJnZXRfdG9fcnBvcnQoc2NzaV90YXJnZXQoc2NwbnQtPmRldmljZSkpOwogCWludCAgICBzdGF0dXMsIHNjc2lfcmVzdWx0LCByZXQ7CiAKQEAgLTkxLDcgKzkxLDcgQEAKIAlzY3NpX3Jlc3VsdCA9IGZjX3JlbW90ZV9wb3J0X2Noa3JlYWR5KHJwb3J0KTsKIAlpZiAodW5saWtlbHkoc2NzaV9yZXN1bHQpKSB7CiAJCXNjcG50LT5yZXN1bHQgPSBzY3NpX3Jlc3VsdDsKLQkJemZjcF9kYmZfc2NzaV9mYWlsX3NlbmQoYWRhcHRlci0+ZGJmLCBzY3BudCk7CisJCXpmY3BfZGJmX3Njc2lfZmFpbF9zZW5kKHNjcG50KTsKIAkJc2NwbnQtPnNjc2lfZG9uZShzY3BudCk7CiAJCXJldHVybiAwOwogCX0KQEAgLTEzNCw2ICsxMzQsNyBAQAogCXN0cnVjdCB6ZmNwX3Njc2lfZGV2ICp6ZmNwX3NkZXYgPSBzZGV2X3RvX3pmY3Aoc2Rldik7CiAJc3RydWN0IHpmY3BfcG9ydCAqcG9ydDsKIAlzdHJ1Y3QgemZjcF91bml0ICp1bml0OworCWludCBucGl2ID0gYWRhcHRlci0+Y29ubmVjdGlvbl9mZWF0dXJlcyAmIEZTRl9GRUFUVVJFX05QSVZfTU9ERTsKIAogCXBvcnQgPSB6ZmNwX2dldF9wb3J0X2J5X3d3cG4oYWRhcHRlciwgcnBvcnQtPnBvcnRfbmFtZSk7CiAJaWYgKCFwb3J0KQpAQCAtMTQzLDcgKzE0NCw3IEBACiAJaWYgKHVuaXQpCiAJCXB1dF9kZXZpY2UoJnVuaXQtPmRldik7CiAKLQlpZiAoIXVuaXQgJiYgIShhZGFwdGVyLT5jb25uZWN0aW9uX2ZlYXR1cmVzICYgRlNGX0ZFQVRVUkVfTlBJVl9NT0RFKSkgeworCWlmICghdW5pdCAmJiAhKGFsbG93X2x1bl9zY2FuICYmIG5waXYpKSB7CiAJCXB1dF9kZXZpY2UoJnBvcnQtPmRldik7CiAJCXJldHVybiAtRU5YSU87CiAJfQpAQCAtMTU4LDcgKzE1OSw3IEBACiAJc3Bpbl9sb2NrX2luaXQoJnpmY3Bfc2Rldi0+bGF0ZW5jaWVzLmxvY2spOwogCiAJemZjcF9lcnBfc2V0X2x1bl9zdGF0dXMoc2RldiwgWkZDUF9TVEFUVVNfQ09NTU9OX1JVTk5JTkcpOwotCXpmY3BfZXJwX2x1bl9yZW9wZW4oc2RldiwgMCwgInNjc2xhXzEiLCBOVUxMKTsKKwl6ZmNwX2VycF9sdW5fcmVvcGVuKHNkZXYsIDAsICJzY3NsYV8xIik7CiAJemZjcF9lcnBfd2FpdChwb3J0LT5hZGFwdGVyKTsKIAogCXJldHVybiAwOwpAQCAtMTgyLDggKzE4Myw3IEBACiAJb2xkX3JlcSA9IHpmY3BfcmVxbGlzdF9maW5kKGFkYXB0ZXItPnJlcV9saXN0LCBvbGRfcmVxaWQpOwogCWlmICghb2xkX3JlcSkgewogCQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+YWJvcnRfbG9jaywgZmxhZ3MpOwotCQl6ZmNwX2RiZl9zY3NpX2Fib3J0KCJsdGUxIiwgYWRhcHRlci0+ZGJmLCBzY3BudCwgTlVMTCwKLQkJCQkgICAgb2xkX3JlcWlkKTsKKwkJemZjcF9kYmZfc2NzaV9hYm9ydCgiYWJydF9vciIsIHNjcG50LCBOVUxMKTsKIAkJcmV0dXJuIEZBSUxFRDsgLyogY29tcGxldGlvbiBjb3VsZCBiZSBpbiBwcm9ncmVzcyAqLwogCX0KIAlvbGRfcmVxLT5kYXRhID0gTlVMTDsKQEAgLTE5OCwyOSArMTk4LDMyIEBACiAKIAkJemZjcF9lcnBfd2FpdChhZGFwdGVyKTsKIAkJcmV0ID0gZmNfYmxvY2tfc2NzaV9laChzY3BudCk7Ci0JCWlmIChyZXQpCisJCWlmIChyZXQpIHsKKwkJCXpmY3BfZGJmX3Njc2lfYWJvcnQoImFicnRfYmwiLCBzY3BudCwgTlVMTCk7CiAJCQlyZXR1cm4gcmV0OworCQl9CiAJCWlmICghKGF0b21pY19yZWFkKCZhZGFwdGVyLT5zdGF0dXMpICYKIAkJICAgICAgWkZDUF9TVEFUVVNfQ09NTU9OX1JVTk5JTkcpKSB7Ci0JCQl6ZmNwX2RiZl9zY3NpX2Fib3J0KCJucmVzIiwgYWRhcHRlci0+ZGJmLCBzY3BudCwgTlVMTCwKLQkJCQkJICAgIG9sZF9yZXFpZCk7CisJCQl6ZmNwX2RiZl9zY3NpX2Fib3J0KCJhYnJ0X3J1Iiwgc2NwbnQsIE5VTEwpOwogCQkJcmV0dXJuIFNVQ0NFU1M7CiAJCX0KIAl9Ci0JaWYgKCFhYnJ0X3JlcSkKKwlpZiAoIWFicnRfcmVxKSB7CisJCXpmY3BfZGJmX3Njc2lfYWJvcnQoImFicnRfYXIiLCBzY3BudCwgTlVMTCk7CiAJCXJldHVybiBGQUlMRUQ7CisJfQogCiAJd2FpdF9mb3JfY29tcGxldGlvbigmYWJydF9yZXEtPmNvbXBsZXRpb24pOwogCiAJaWYgKGFicnRfcmVxLT5zdGF0dXMgJiBaRkNQX1NUQVRVU19GU0ZSRVFfQUJPUlRTVUNDRUVERUQpCi0JCWRiZl90YWcgPSAib2theSI7CisJCWRiZl90YWcgPSAiYWJydF9vayI7CiAJZWxzZSBpZiAoYWJydF9yZXEtPnN0YXR1cyAmIFpGQ1BfU1RBVFVTX0ZTRlJFUV9BQk9SVE5PVE5FRURFRCkKLQkJZGJmX3RhZyA9ICJsdGUyIjsKKwkJZGJmX3RhZyA9ICJhYnJ0X25uIjsKIAllbHNlIHsKLQkJZGJmX3RhZyA9ICJmYWlsIjsKKwkJZGJmX3RhZyA9ICJhYnJ0X2ZhIjsKIAkJcmV0dmFsID0gRkFJTEVEOwogCX0KLQl6ZmNwX2RiZl9zY3NpX2Fib3J0KGRiZl90YWcsIGFkYXB0ZXItPmRiZiwgc2NwbnQsIGFicnRfcmVxLCBvbGRfcmVxaWQpOworCXpmY3BfZGJmX3Njc2lfYWJvcnQoZGJmX3RhZywgc2NwbnQsIGFicnRfcmVxKTsKIAl6ZmNwX2ZzZl9yZXFfZnJlZShhYnJ0X3JlcSk7CiAJcmV0dXJuIHJldHZhbDsKIH0KQEAgLTI4MCw3ICsyODMsNyBAQAogCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSB6ZmNwX3NkZXYtPnBvcnQtPmFkYXB0ZXI7CiAJaW50IHJldDsKIAotCXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKGFkYXB0ZXIsIDAsICJzY2hyaF8xIiwgc2NwbnQpOworCXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKGFkYXB0ZXIsIDAsICJzY2hyaF8xIik7CiAJemZjcF9lcnBfd2FpdChhZGFwdGVyKTsKIAlyZXQgPSBmY19ibG9ja19zY3NpX2VoKHNjcG50KTsKIAlpZiAocmV0KQpAQCAtNTE4LDcgKzUyMSw3IEBACiAJcG9ydCA9IHpmY3BfZ2V0X3BvcnRfYnlfd3dwbihhZGFwdGVyLCBycG9ydC0+cG9ydF9uYW1lKTsKIAogCWlmIChwb3J0KSB7Ci0JCXpmY3BfZXJwX3BvcnRfZm9yY2VkX3Jlb3Blbihwb3J0LCAwLCAic2N0cnBpMSIsIE5VTEwpOworCQl6ZmNwX2VycF9wb3J0X2ZvcmNlZF9yZW9wZW4ocG9ydCwgMCwgInNjdHJwaTEiKTsKIAkJcHV0X2RldmljZSgmcG9ydC0+ZGV2KTsKIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3N5c2ZzLmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3N5c2ZzLmMKaW5kZXggMmYyYzU0Zi4uY2RjNGZmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zeXNmcy5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3Bfc3lzZnMuYwpAQCAtMTA1LDggKzEwNSw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJemZjcF9lcnBfc2V0X3BvcnRfc3RhdHVzKHBvcnQsIFpGQ1BfU1RBVFVTX0NPTU1PTl9SVU5OSU5HKTsKLQl6ZmNwX2VycF9wb3J0X3Jlb3Blbihwb3J0LCBaRkNQX1NUQVRVU19DT01NT05fRVJQX0ZBSUxFRCwgInN5cGZhaTIiLAotCQkJICAgICBOVUxMKTsKKwl6ZmNwX2VycF9wb3J0X3Jlb3Blbihwb3J0LCBaRkNQX1NUQVRVU19DT01NT05fRVJQX0ZBSUxFRCwgInN5cGZhaTIiKTsKIAl6ZmNwX2VycF93YWl0KHBvcnQtPmFkYXB0ZXIpOwogCiAJcmV0dXJuIGNvdW50OwpAQCAtMTQ4LDcgKzE0Nyw3IEBACiAJaWYgKHNkZXYpIHsKIAkJemZjcF9lcnBfc2V0X2x1bl9zdGF0dXMoc2RldiwgWkZDUF9TVEFUVVNfQ09NTU9OX1JVTk5JTkcpOwogCQl6ZmNwX2VycF9sdW5fcmVvcGVuKHNkZXYsIFpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfRkFJTEVELAotCQkJCSAgICAic3l1ZmFpMiIsIE5VTEwpOworCQkJCSAgICAic3l1ZmFpMiIpOwogCQl6ZmNwX2VycF93YWl0KHVuaXQtPnBvcnQtPmFkYXB0ZXIpOwogCX0gZWxzZQogCQl6ZmNwX3VuaXRfc2NzaV9zY2FuKHVuaXQpOwpAQCAtMTk4LDcgKzE5Nyw3IEBACiAKIAl6ZmNwX2VycF9zZXRfYWRhcHRlcl9zdGF0dXMoYWRhcHRlciwgWkZDUF9TVEFUVVNfQ09NTU9OX1JVTk5JTkcpOwogCXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKGFkYXB0ZXIsIFpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfRkFJTEVELAotCQkJCSJzeWFmYWkyIiwgTlVMTCk7CisJCQkJInN5YWZhaTIiKTsKIAl6ZmNwX2VycF93YWl0KGFkYXB0ZXIpOwogb3V0OgogCXpmY3BfY2N3X2FkYXB0ZXJfcHV0KGFkYXB0ZXIpOwpAQCAtMjU2LDcgKzI1NSw3IEBACiAKIAlwdXRfZGV2aWNlKCZwb3J0LT5kZXYpOwogCi0JemZjcF9lcnBfcG9ydF9zaHV0ZG93bihwb3J0LCAwLCAic3lwcnNfMSIsIE5VTEwpOworCXpmY3BfZXJwX3BvcnRfc2h1dGRvd24ocG9ydCwgMCwgInN5cHJzXzEiKTsKIAl6ZmNwX2RldmljZV91bnJlZ2lzdGVyKCZwb3J0LT5kZXYsICZ6ZmNwX3N5c2ZzX3BvcnRfYXR0cnMpOwogIG91dDoKIAl6ZmNwX2Njd19hZGFwdGVyX3B1dChhZGFwdGVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hcmNtc3IvYXJjbXNyX2hiYS5jIGIvZHJpdmVycy9zY3NpL2FyY21zci9hcmNtc3JfaGJhLmMKaW5kZXggMTdlM2RmNC4uMWNhZGNkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FyY21zci9hcmNtc3JfaGJhLmMKKysrIGIvZHJpdmVycy9zY3NpL2FyY21zci9hcmNtc3JfaGJhLmMKQEAgLTExNzEsOSArMTE3MSw4IEBACiAJYXJjbXNyX2NkYi0+bXNnUGFnZXMgPSBhcmNjZGJzaXplLzB4MTAwICsgKGFyY2NkYnNpemUgJSAweDEwMCA/IDEgOiAwKTsKIAlpZiAoIGFyY2NkYnNpemUgPiAyNTYpCiAJCWFyY21zcl9jZGItPkZsYWdzIHw9IEFSQ01TUl9DREJfRkxBR19TR0xfQlNJWkU7Ci0JaWYgKHBjbWQtPmNtbmRbMF18V1JJVEVfNiB8fCBwY21kLT5jbW5kWzBdfFdSSVRFXzEwIHx8IHBjbWQtPmNtbmRbMF18V1JJVEVfMTIgKXsKKwlpZiAocGNtZC0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gRE1BX1RPX0RFVklDRSkKIAkJYXJjbXNyX2NkYi0+RmxhZ3MgfD0gQVJDTVNSX0NEQl9GTEFHX1dSSVRFOwotCX0KIAljY2ItPmFyY19jZGJfc2l6ZSA9IGFyY2NkYnNpemU7CiAJcmV0dXJuIFNVQ0NFU1M7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWFpbi5jIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21haW4uYwppbmRleCA3NWE4NWFhLi43OWNlZmJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWFpbi5jCisrKyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tYWluLmMKQEAgLTM3ODUsNyArMzc4NSw3IEBACiAJZG1hX2FkZHJfdCBwYWRkcjsKIAogCWlvX3Rhc2stPmNtZF9iaHMgPSBwY2lfcG9vbF9hbGxvYyhiZWlzY3NpX3Nlc3MtPmJoc19wb29sLAotCQkJCQkgIEdGUF9LRVJORUwsICZwYWRkcik7CisJCQkJCSAgR0ZQX0FUT01JQywgJnBhZGRyKTsKIAlpZiAoIWlvX3Rhc2stPmNtZF9iaHMpCiAJCXJldHVybiAtRU5PTUVNOwogCWlvX3Rhc2stPmJoc19wYS51LmE2NC5hZGRyZXNzID0gcGFkZHI7CkBAIC0zOTE0LDcgKzM5MTQsOCBAQAogCQkJaW9fdGFzay0+cHNnbF9oYW5kbGUgPSBOVUxMOwogCQl9CiAJfSBlbHNlIHsKLQkJaWYgKCh0YXNrLT5oZHItPm9wY29kZSAmIElTQ1NJX09QQ09ERV9NQVNLKSA9PSBJU0NTSV9PUF9MT0dJTikKKwkJaWYgKHRhc2stPmhkciAmJgorCQkgICAoKHRhc2stPmhkci0+b3Bjb2RlICYgSVNDU0lfT1BDT0RFX01BU0spID09IElTQ1NJX09QX0xPR0lOKSkKIAkJCXJldHVybjsKIAkJaWYgKGlvX3Rhc2stPnBzZ2xfaGFuZGxlKSB7CiAJCQlzcGluX2xvY2soJnBoYmEtPm1nbXRfc2dsX2xvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9NYWtlZmlsZSBiL2RyaXZlcnMvc2NzaS9iZmEvTWFrZWZpbGUKaW5kZXggZDJlZWZkMy4uNGNlNmY0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JmYS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3Njc2kvYmZhL01ha2VmaWxlCkBAIC0zLDYgKzMsNCBAQAogYmZhLXkgOj0gYmZhZC5vIGJmYWRfaW0ubyBiZmFkX2F0dHIubyBiZmFkX2RlYnVnZnMubwogYmZhLXkgKz0gYmZhX2lvYy5vIGJmYV9pb2NfY2IubyBiZmFfaW9jX2N0Lm8gYmZhX2h3X2NiLm8gYmZhX2h3X2N0Lm8KIGJmYS15ICs9IGJmYV9mY3MubyBiZmFfZmNzX2xwb3J0Lm8gYmZhX2Zjc19ycG9ydC5vIGJmYV9mY3NfZmNwaW0ubyBiZmFfZmNidWlsZC5vCi1iZmEteSArPSBiZmFfcG9ydC5vIGJmYV9mY3BpbS5vIGJmYV9jb3JlLm8gYmZhX2Rydi5vIGJmYV9zdmMubwotCi1jY2ZsYWdzLXkgOj0gLURCRkFfUEVSRl9CVUlMRAorYmZhLXkgKz0gYmZhX3BvcnQubyBiZmFfZmNwaW0ubyBiZmFfY29yZS5vIGJmYV9zdmMubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmEuaCBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhLmgKaW5kZXggZmYyYmQwNy4uN2JlNmI1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JmYS9iZmEuaAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYS5oCkBAIC0xNyw3ICsxNyw3IEBACiAjaWZuZGVmIF9fQkZBX0hfXwogI2RlZmluZSBfX0JGQV9IX18KIAotI2luY2x1ZGUgImJmYV9vc19pbmMuaCIKKyNpbmNsdWRlICJiZmFkX2Rydi5oIgogI2luY2x1ZGUgImJmYV9jcy5oIgogI2luY2x1ZGUgImJmYV9wbG9nLmgiCiAjaW5jbHVkZSAiYmZhX2RlZnNfc3ZjLmgiCkBAIC0zMyw3ICszMyw2IEBACiAgKiBJbnRlcnJ1cHQgbWVzc2FnZSBoYW5kbGVycwogICovCiB2b2lkIGJmYV9pc3JfdW5oYW5kbGVkKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZpX21zZ19zICptKTsKLXZvaWQgYmZhX2lzcl9iaW5kKGVudW0gYmZpX21jbGFzcyBtYywgYmZhX2lzcl9mdW5jX3QgaXNyX2Z1bmMpOwogCiAvKgogICogUmVxdWVzdCBhbmQgcmVzcG9uc2UgcXVldWUgcmVsYXRlZCBkZWZpbmVzCkBAIC0xMjEsOCArMTIwLDggQEAKIAkJCQkJCQkJCVwKIAkJc3RydWN0IGxpc3RfaGVhZCAqd2FpdHEgPSBiZmFfcmVxcShfX2JmYSwgX19yZXFxKTsgICAgICBcCiAJCQkJCQkJCQlcCi0JCWJmYV9hc3NlcnQoKChfX3JlcXEpIDwgQkZJX0lPQ19NQVhfQ1FTKSk7ICAgICAgXAotCQliZmFfYXNzZXJ0KChfX3dxZSktPnFyZXN1bWUgJiYgKF9fd3FlKS0+Y2JhcmcpOyAgICAgIFwKKwkJV0FSTl9PTigoKF9fcmVxcSkgPj0gQkZJX0lPQ19NQVhfQ1FTKSk7CQkJXAorCQlXQVJOX09OKCEoKF9fd3FlKS0+cXJlc3VtZSAmJiAoX193cWUpLT5jYmFyZykpOwkJXAogCQkJCQkJCQkJXAogCQlsaXN0X2FkZF90YWlsKCYoX193cWUpLT5xZSwgd2FpdHEpOyAgICAgIFwKIAl9IHdoaWxlICgwKQpAQCAtMjk3LDcgKzI5Niw2IEBACiAJCSAgICAgIHN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgKmNmZywKIAkJICAgICAgc3RydWN0IGJmYV9tZW1pbmZvX3MgKm1lbWluZm8sCiAJCSAgICAgIHN0cnVjdCBiZmFfcGNpZGV2X3MgKnBjaWRldik7Ci12b2lkIGJmYV9pb2NmY19kZXRhY2goc3RydWN0IGJmYV9zICpiZmEpOwogdm9pZCBiZmFfaW9jZmNfaW5pdChzdHJ1Y3QgYmZhX3MgKmJmYSk7CiB2b2lkIGJmYV9pb2NmY19zdGFydChzdHJ1Y3QgYmZhX3MgKmJmYSk7CiB2b2lkIGJmYV9pb2NmY19zdG9wKHN0cnVjdCBiZmFfcyAqYmZhKTsKQEAgLTMzMywxMiArMzMxLDkgQEAKIAkJCSAgIHUzMiAqbWF4dmVjKTsKIHZvaWQgYmZhX2h3Y3RfbXNpeF9nZXRfcm1lX3JhbmdlKHN0cnVjdCBiZmFfcyAqYmZhLCB1MzIgKnN0YXJ0LAogCQkJCSB1MzIgKmVuZCk7Ci12b2lkIGJmYV9jb21fcG9ydF9hdHRhY2goc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmFfbWVtaW5mb19zICptaSk7CiB2b2lkIGJmYV9pb2NmY19nZXRfYm9vdHd3bnMoc3RydWN0IGJmYV9zICpiZmEsIHU4ICpud3ducywgd3duX3QgKnd3bnMpOwogd3duX3QgYmZhX2lvY2ZjX2dldF9wd3duKHN0cnVjdCBiZmFfcyAqYmZhKTsKIHd3bl90IGJmYV9pb2NmY19nZXRfbnd3bihzdHJ1Y3QgYmZhX3MgKmJmYSk7Ci12b2lkIGJmYV9pb2NmY19nZXRfcGJjX2Jvb3RfY2ZnKHN0cnVjdCBiZmFfcyAqYmZhLAotCQkJCXN0cnVjdCBiZmFfYm9vdF9wYmNfcyAqcGJjZmcpOwogaW50IGJmYV9pb2NmY19nZXRfcGJjX3Zwb3J0cyhzdHJ1Y3QgYmZhX3MgKmJmYSwKIAkJCQlzdHJ1Y3QgYmZpX3BiY192cG9ydF9zICpwYmNfdnBvcnQpOwogCkBAIC0zODYsMTkgKzM4MSwxMSBAQAogdm9pZCBiZmFfYXR0YWNoKHN0cnVjdCBiZmFfcyAqYmZhLCB2b2lkICpiZmFkLCBzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcsCiAJCXN0cnVjdCBiZmFfbWVtaW5mb19zICptZW1pbmZvLAogCQlzdHJ1Y3QgYmZhX3BjaWRldl9zICpwY2lkZXYpOwotdm9pZCBiZmFfaW5pdF90cmMoc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmFfdHJjX21vZF9zICp0cmNtb2QpOwotdm9pZCBiZmFfaW5pdF9wbG9nKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZhX3Bsb2dfcyAqcGxvZyk7CiB2b2lkIGJmYV9kZXRhY2goc3RydWN0IGJmYV9zICpiZmEpOwotdm9pZCBiZmFfaW5pdChzdHJ1Y3QgYmZhX3MgKmJmYSk7Ci12b2lkIGJmYV9zdGFydChzdHJ1Y3QgYmZhX3MgKmJmYSk7Ci12b2lkIGJmYV9zdG9wKHN0cnVjdCBiZmFfcyAqYmZhKTsKLXZvaWQgYmZhX2F0dGFjaF9mY3Moc3RydWN0IGJmYV9zICpiZmEpOwogdm9pZCBiZmFfY2JfaW5pdCh2b2lkICpiZmFkLCBiZmFfc3RhdHVzX3Qgc3RhdHVzKTsKIHZvaWQgYmZhX2NiX3VwZGF0ZXEodm9pZCAqYmZhZCwgYmZhX3N0YXR1c190IHN0YXR1cyk7CiAKIGJmYV9ib29sZWFuX3QgYmZhX2ludHgoc3RydWN0IGJmYV9zICpiZmEpOwotdm9pZCBiZmFfaW50eF9kaXNhYmxlKHN0cnVjdCBiZmFfcyAqYmZhKTsKLXZvaWQgYmZhX2ludHhfZW5hYmxlKHN0cnVjdCBiZmFfcyAqYmZhKTsKIHZvaWQgYmZhX2lzcl9lbmFibGUoc3RydWN0IGJmYV9zICpiZmEpOwogdm9pZCBiZmFfaXNyX2Rpc2FibGUoc3RydWN0IGJmYV9zICpiZmEpOwogCkBAIC00MDgsMzEgKzM5NSwxNCBAQAogCiB0eXBlZGVmIHZvaWQgKCpiZmFfY2JfaW9jX3QpICh2b2lkICpjYmFyZywgZW51bSBiZmFfc3RhdHVzIHN0YXR1cyk7CiB2b2lkIGJmYV9pb2NmY19nZXRfYXR0cihzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYV9pb2NmY19hdHRyX3MgKmF0dHIpOwotdm9pZCBiZmFfZ2V0X2F0dHIoc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmFfaW9jX2F0dHJfcyAqaW9jX2F0dHIpOwogCi12b2lkIGJmYV9hZGFwdGVyX2dldF9hdHRyKHN0cnVjdCBiZmFfcyAqYmZhLAotCQkJICBzdHJ1Y3QgYmZhX2FkYXB0ZXJfYXR0cl9zICphZF9hdHRyKTsKLXU2NCBiZmFfYWRhcHRlcl9nZXRfaWQoc3RydWN0IGJmYV9zICpiZmEpOwogCiBiZmFfc3RhdHVzX3QgYmZhX2lvY2ZjX2lzcmF0dHJfc2V0KHN0cnVjdCBiZmFfcyAqYmZhLAogCQkJCSAgIHN0cnVjdCBiZmFfaW9jZmNfaW50cl9hdHRyX3MgKmF0dHIpOwogCiB2b2lkIGJmYV9pb2NmY19lbmFibGUoc3RydWN0IGJmYV9zICpiZmEpOwogdm9pZCBiZmFfaW9jZmNfZGlzYWJsZShzdHJ1Y3QgYmZhX3MgKmJmYSk7Ci12b2lkIGJmYV9jaGlwX3Jlc2V0KHN0cnVjdCBiZmFfcyAqYmZhKTsKLXZvaWQgYmZhX3RpbWVyX3RpY2soc3RydWN0IGJmYV9zICpiZmEpOwogI2RlZmluZSBiZmFfdGltZXJfc3RhcnQoX2JmYSwgX3RpbWVyLCBfdGltZXJjYiwgX2FyZywgX3RpbWVvdXQpCQlcCiAJYmZhX3RpbWVyX2JlZ2luKCYoX2JmYSktPnRpbWVyX21vZCwgX3RpbWVyLCBfdGltZXJjYiwgX2FyZywgX3RpbWVvdXQpCiAKLS8qCi0gKiBCRkEgZGVidWcgQVBJIGZ1bmN0aW9ucwotICovCi1iZmFfc3RhdHVzX3QgYmZhX2RlYnVnX2Z3dHJjKHN0cnVjdCBiZmFfcyAqYmZhLCB2b2lkICp0cmNkYXRhLCBpbnQgKnRyY2xlbik7Ci1iZmFfc3RhdHVzX3QgYmZhX2RlYnVnX2Z3c2F2ZShzdHJ1Y3QgYmZhX3MgKmJmYSwgdm9pZCAqdHJjZGF0YSwgaW50ICp0cmNsZW4pOwotYmZhX3N0YXR1c190IGJmYV9kZWJ1Z19md2NvcmUoc3RydWN0IGJmYV9zICpiZmEsIHZvaWQgKmJ1ZiwKLQkJCSAgICAgIHUzMiAqb2Zmc2V0LCBpbnQgKmJ1Zmxlbik7Ci12b2lkIGJmYV9kZWJ1Z19md3NhdmVfY2xlYXIoc3RydWN0IGJmYV9zICpiZmEpOwotYmZhX3N0YXR1c190IGJmYV9md19zdGF0c19nZXQoc3RydWN0IGJmYV9zICpiZmEsIHZvaWQgKmRhdGEpOwotYmZhX3N0YXR1c190IGJmYV9md19zdGF0c19jbGVhcihzdHJ1Y3QgYmZhX3MgKmJmYSk7Ci0KICNlbmRpZiAvKiBfX0JGQV9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2NiX2lvaW0uaCBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2NiX2lvaW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmYwMjEwMS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9jYl9pb2ltLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwNS0yMDEwIEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZAotICogd3d3LmJyb2NhZGUuY29tCi0gKgotICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqLwotCi0jaWZuZGVmIF9fQkZBX0hDQl9JT0lNX0hfXwotI2RlZmluZSBfX0JGQV9IQ0JfSU9JTV9IX18KLQotI2luY2x1ZGUgImJmYV9vc19pbmMuaCIKLS8qCi0gKiB0YXNrIGF0dHJpYnV0ZSB2YWx1ZXMgaW4gRkNQLTIgRkNQX0NNTkQgSVUKLSAqLwotI2RlZmluZSBTSU1QTEVfUSAgICAwCi0jZGVmaW5lIEhFQURfT0ZfUSAgIDEKLSNkZWZpbmUgT1JERVJFRF9RICAgMgotI2RlZmluZSBBQ0FfUQkgICAgNAotI2RlZmluZSBVTlRBR0dFRCAgICA1Ci0KLXN0YXRpYyBpbmxpbmUgbHVuX3QKLWJmYWRfaW50X3RvX2x1bih1MzIgbHVubykKLXsKLQl1bmlvbiB7Ci0JCXUxNglzY3NpX2x1bls0XTsKLQkJbHVuX3QJCWJmYV9sdW47Ci0JfSBsdW47Ci0KLQlsdW4uYmZhX2x1biAgICAgPSAwOwotCWx1bi5zY3NpX2x1blswXSA9IGNwdV90b19iZTE2KGx1bm8pOwotCi0JcmV0dXJuIGx1bi5iZmFfbHVuOwotfQotCi0vKgotICogR2V0IExVTiBmb3IgdGhlIEkvTyByZXF1ZXN0Ci0gKi8KLSNkZWZpbmUgYmZhX2NiX2lvaW1fZ2V0X2x1bihfX2RpbykJXAotCWJmYWRfaW50X3RvX2x1bigoKHN0cnVjdCBzY3NpX2NtbmQgKilfX2RpbyktPmRldmljZS0+bHVuKQotCi0vKgotICogR2V0IENEQiBmb3IgdGhlIEkvTyByZXF1ZXN0Ci0gKi8KLXN0YXRpYyBpbmxpbmUgdTggKgotYmZhX2NiX2lvaW1fZ2V0X2NkYihzdHJ1Y3QgYmZhZF9pb2ltX3MgKmRpbykKLXsKLQlzdHJ1Y3Qgc2NzaV9jbW5kICpjbW5kID0gKHN0cnVjdCBzY3NpX2NtbmQgKilkaW87Ci0KLQlyZXR1cm4gKHU4ICopIGNtbmQtPmNtbmQ7Ci19Ci0KLS8qCi0gKiBHZXQgSS9PIGRpcmVjdGlvbiAocmVhZC93cml0ZSkgZm9yIHRoZSBJL08gcmVxdWVzdAotICovCi1zdGF0aWMgaW5saW5lIGVudW0gZmNwX2lvZGlyCi1iZmFfY2JfaW9pbV9nZXRfaW9kaXIoc3RydWN0IGJmYWRfaW9pbV9zICpkaW8pCi17Ci0Jc3RydWN0IHNjc2lfY21uZCAqY21uZCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopZGlvOwotCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRtYWRpcjsKLQotCWRtYWRpciA9IGNtbmQtPnNjX2RhdGFfZGlyZWN0aW9uOwotCWlmIChkbWFkaXIgPT0gRE1BX1RPX0RFVklDRSkKLQkJcmV0dXJuIEZDUF9JT0RJUl9XUklURTsKLQllbHNlIGlmIChkbWFkaXIgPT0gRE1BX0ZST01fREVWSUNFKQotCQlyZXR1cm4gRkNQX0lPRElSX1JFQUQ7Ci0JZWxzZQotCQlyZXR1cm4gRkNQX0lPRElSX05PTkU7Ci19Ci0KLS8qCi0gKiBHZXQgSU8gc2l6ZSBpbiBieXRlcyBmb3IgdGhlIEkvTyByZXF1ZXN0Ci0gKi8KLXN0YXRpYyBpbmxpbmUgdTMyCi1iZmFfY2JfaW9pbV9nZXRfc2l6ZShzdHJ1Y3QgYmZhZF9pb2ltX3MgKmRpbykKLXsKLQlzdHJ1Y3Qgc2NzaV9jbW5kICpjbW5kID0gKHN0cnVjdCBzY3NpX2NtbmQgKilkaW87Ci0KLQlyZXR1cm4gc2NzaV9idWZmbGVuKGNtbmQpOwotfQotCi0vKgotICogR2V0IHRpbWVvdXQgZm9yIHRoZSBJL08gcmVxdWVzdAotICovCi1zdGF0aWMgaW5saW5lIHU4Ci1iZmFfY2JfaW9pbV9nZXRfdGltZW91dChzdHJ1Y3QgYmZhZF9pb2ltX3MgKmRpbykKLXsKLQlzdHJ1Y3Qgc2NzaV9jbW5kICpjbW5kID0gKHN0cnVjdCBzY3NpX2NtbmQgKilkaW87Ci0JLyoKLQkgKiBUQkQ6IG5lZWQgYSB0aW1lb3V0IGZvciBzY3NpIHBhc3N0aHJ1Ci0JICovCi0JaWYgKGNtbmQtPmRldmljZS0+aG9zdCA9PSBOVUxMKQotCQlyZXR1cm4gNDsKLQotCXJldHVybiAwOwotfQotCi0vKgotICogR2V0IENvbW1hbmQgUmVmZXJlbmNlIE51bWJlciBmb3IgdGhlIEkvTyByZXF1ZXN0LiAwIGlmIG5vbmUuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdTgKLWJmYV9jYl9pb2ltX2dldF9jcm4oc3RydWN0IGJmYWRfaW9pbV9zICpkaW8pCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBHZXQgU0FNLTMgcHJpb3JpdHkgZm9yIHRoZSBJL08gcmVxdWVzdC4gMCBpcyBkZWZhdWx0LgotICovCi1zdGF0aWMgaW5saW5lIHU4Ci1iZmFfY2JfaW9pbV9nZXRfcHJpb3JpdHkoc3RydWN0IGJmYWRfaW9pbV9zICpkaW8pCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBHZXQgdGFzayBhdHRyaWJ1dGVzIGZvciB0aGUgSS9PIHJlcXVlc3QuIERlZmF1bHQgaXMgRkNQX1RBU0tfQVRUUl9TSU1QTEUoMCkuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdTgKLWJmYV9jYl9pb2ltX2dldF90YXNrYXR0cihzdHJ1Y3QgYmZhZF9pb2ltX3MgKmRpbykKLXsKLQlzdHJ1Y3Qgc2NzaV9jbW5kICpjbW5kID0gKHN0cnVjdCBzY3NpX2NtbmQgKilkaW87Ci0JdTgJdGFza19hdHRyID0gVU5UQUdHRUQ7Ci0KLQlpZiAoY21uZC0+ZGV2aWNlLT50YWdnZWRfc3VwcG9ydGVkKSB7Ci0JCXN3aXRjaCAoY21uZC0+dGFnKSB7Ci0JCWNhc2UgSEVBRF9PRl9RVUVVRV9UQUc6Ci0JCQl0YXNrX2F0dHIgPSBIRUFEX09GX1E7Ci0JCQlicmVhazsKLQkJY2FzZSBPUkRFUkVEX1FVRVVFX1RBRzoKLQkJCXRhc2tfYXR0ciA9IE9SREVSRURfUTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJdGFza19hdHRyID0gU0lNUExFX1E7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCXJldHVybiB0YXNrX2F0dHI7Ci19Ci0KLS8qCi0gKiBHZXQgQ0RCIGxlbmd0aCBpbiBieXRlcyBmb3IgdGhlIEkvTyByZXF1ZXN0LiBEZWZhdWx0IGlzIEZDUF9DTU5EX0NEQl9MRU4oMTYpLgotICovCi1zdGF0aWMgaW5saW5lIHU4Ci1iZmFfY2JfaW9pbV9nZXRfY2RibGVuKHN0cnVjdCBiZmFkX2lvaW1fcyAqZGlvKQotewotCXN0cnVjdCBzY3NpX2NtbmQgKmNtbmQgPSAoc3RydWN0IHNjc2lfY21uZCAqKWRpbzsKLQotCXJldHVybiBjbW5kLT5jbWRfbGVuOwotfQotCi0vKgotICogQXNzaWduIHF1ZXVlIHRvIGJlIHVzZWQgZm9yIHRoZSBJL08gcmVxdWVzdC4gVGhpcyB2YWx1ZSBkZXBlbmRzIG9uIHdoZXRoZXIKLSAqIHRoZSBkcml2ZXIgd2FudHMgdG8gdXNlIHRoZSBxdWV1ZXMgdmlhIGFueSBzcGVjaWZpYyBhbGdvcml0aG0uIEN1cnJlbnRseSwKLSAqIHRoaXMgaXMgbm90IHN1cHBvcnRlZC4KLSAqLwotI2RlZmluZSBiZmFfY2JfaW9pbV9nZXRfcmVxcShfX2RpbykgQkZBX0ZBTFNFCi0KLSNlbmRpZiAvKiBfX0JGQV9IQ0JfSU9JTV9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2NvcmUuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2NvcmUuYwppbmRleCAyMzQ1ZjQ4Li4xY2Q1YzhiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9jb3JlLmMKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfY29yZS5jCkBAIC0xNSwxMyArMTUsMTAwIEBACiAgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAgKi8KIAorI2luY2x1ZGUgImJmYWRfZHJ2LmgiCiAjaW5jbHVkZSAiYmZhX21vZHVsZXMuaCIKICNpbmNsdWRlICJiZmlfY3RyZWcuaCIKLSNpbmNsdWRlICJiZmFkX2Rydi5oIgogCiBCRkFfVFJDX0ZJTEUoSEFMLCBDT1JFKTsKIAogLyoKKyAqIEJGQSBtb2R1bGUgbGlzdCB0ZXJtaW5hdGVkIGJ5IE5VTEwKKyAqLworc3RhdGljIHN0cnVjdCBiZmFfbW9kdWxlX3MgKmhhbF9tb2RzW10gPSB7CisJJmhhbF9tb2Rfc2dwZywKKwkmaGFsX21vZF9mY3BvcnQsCisJJmhhbF9tb2RfZmN4cCwKKwkmaGFsX21vZF9scHMsCisJJmhhbF9tb2RfdWYsCisJJmhhbF9tb2RfcnBvcnQsCisJJmhhbF9tb2RfZmNwaW0sCisJTlVMTAorfTsKKworLyoKKyAqIE1lc3NhZ2UgaGFuZGxlcnMgZm9yIHZhcmlvdXMgbW9kdWxlcy4KKyAqLworc3RhdGljIGJmYV9pc3JfZnVuY190ICBiZmFfaXNyc1tCRklfTUNfTUFYXSA9IHsKKwliZmFfaXNyX3VuaGFuZGxlZCwJLyogTk9ORSAqLworCWJmYV9pc3JfdW5oYW5kbGVkLAkvKiBCRklfTUNfSU9DICovCisJYmZhX2lzcl91bmhhbmRsZWQsCS8qIEJGSV9NQ19ESUFHICovCisJYmZhX2lzcl91bmhhbmRsZWQsCS8qIEJGSV9NQ19GTEFTSCAqLworCWJmYV9pc3JfdW5oYW5kbGVkLAkvKiBCRklfTUNfQ0VFICovCisJYmZhX2ZjcG9ydF9pc3IsCQkvKiBCRklfTUNfRkNQT1JUICovCisJYmZhX2lzcl91bmhhbmRsZWQsCS8qIEJGSV9NQ19JT0NGQyAqLworCWJmYV9pc3JfdW5oYW5kbGVkLAkvKiBCRklfTUNfTEwgKi8KKwliZmFfdWZfaXNyLAkJLyogQkZJX01DX1VGICovCisJYmZhX2ZjeHBfaXNyLAkJLyogQkZJX01DX0ZDWFAgKi8KKwliZmFfbHBzX2lzciwJCS8qIEJGSV9NQ19MUFMgKi8KKwliZmFfcnBvcnRfaXNyLAkJLyogQkZJX01DX1JQT1JUICovCisJYmZhX2l0bmltX2lzciwJCS8qIEJGSV9NQ19JVE5JTSAqLworCWJmYV9pc3JfdW5oYW5kbGVkLAkvKiBCRklfTUNfSU9JTV9SRUFEICovCisJYmZhX2lzcl91bmhhbmRsZWQsCS8qIEJGSV9NQ19JT0lNX1dSSVRFICovCisJYmZhX2lzcl91bmhhbmRsZWQsCS8qIEJGSV9NQ19JT0lNX0lPICovCisJYmZhX2lvaW1faXNyLAkJLyogQkZJX01DX0lPSU0gKi8KKwliZmFfaW9pbV9nb29kX2NvbXBfaXNyLAkvKiBCRklfTUNfSU9JTV9JT0NPTSAqLworCWJmYV90c2tpbV9pc3IsCQkvKiBCRklfTUNfVFNLSU0gKi8KKwliZmFfaXNyX3VuaGFuZGxlZCwJLyogQkZJX01DX1NCT09UICovCisJYmZhX2lzcl91bmhhbmRsZWQsCS8qIEJGSV9NQ19JUEZDICovCisJYmZhX2lzcl91bmhhbmRsZWQsCS8qIEJGSV9NQ19QT1JUICovCisJYmZhX2lzcl91bmhhbmRsZWQsCS8qIC0tLS0tLS0tLSAqLworCWJmYV9pc3JfdW5oYW5kbGVkLAkvKiAtLS0tLS0tLS0gKi8KKwliZmFfaXNyX3VuaGFuZGxlZCwJLyogLS0tLS0tLS0tICovCisJYmZhX2lzcl91bmhhbmRsZWQsCS8qIC0tLS0tLS0tLSAqLworCWJmYV9pc3JfdW5oYW5kbGVkLAkvKiAtLS0tLS0tLS0gKi8KKwliZmFfaXNyX3VuaGFuZGxlZCwJLyogLS0tLS0tLS0tICovCisJYmZhX2lzcl91bmhhbmRsZWQsCS8qIC0tLS0tLS0tLSAqLworCWJmYV9pc3JfdW5oYW5kbGVkLAkvKiAtLS0tLS0tLS0gKi8KKwliZmFfaXNyX3VuaGFuZGxlZCwJLyogLS0tLS0tLS0tICovCisJYmZhX2lzcl91bmhhbmRsZWQsCS8qIC0tLS0tLS0tLSAqLworfTsKKy8qCisgKiBNZXNzYWdlIGhhbmRsZXJzIGZvciBtYWlsYm94IGNvbW1hbmQgY2xhc3NlcworICovCitzdGF0aWMgYmZhX2lvY19tYm94X21jZnVuY190ICBiZmFfbWJveF9pc3JzW0JGSV9NQ19NQVhdID0geworCU5VTEwsCisJTlVMTCwJCS8qIEJGSV9NQ19JT0MgICAqLworCU5VTEwsCQkvKiBCRklfTUNfRElBRyAgKi8KKwlOVUxMLAkJLyogQkZJX01DX0ZMQVNIICovCisJTlVMTCwJCS8qIEJGSV9NQ19DRUUgICAqLworCU5VTEwsCQkvKiBCRklfTUNfUE9SVCAgKi8KKwliZmFfaW9jZmNfaXNyLAkvKiBCRklfTUNfSU9DRkMgKi8KKwlOVUxMLAorfTsKKworCisKK3N0YXRpYyB2b2lkCitiZmFfY29tX3BvcnRfYXR0YWNoKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWkpCit7CisJc3RydWN0IGJmYV9wb3J0X3MJKnBvcnQgPSAmYmZhLT5tb2R1bGVzLnBvcnQ7CisJdTMyCQkJZG1fbGVuOworCXU4CQkJKmRtX2t2YTsKKwl1NjQJCQlkbV9wYTsKKworCWRtX2xlbiA9IGJmYV9wb3J0X21lbWluZm8oKTsKKwlkbV9rdmEgPSBiZmFfbWVtaW5mb19kbWFfdmlydChtaSk7CisJZG1fcGEgID0gYmZhX21lbWluZm9fZG1hX3BoeXMobWkpOworCisJbWVtc2V0KHBvcnQsIDAsIHNpemVvZihzdHJ1Y3QgYmZhX3BvcnRfcykpOworCWJmYV9wb3J0X2F0dGFjaChwb3J0LCAmYmZhLT5pb2MsIGJmYSwgYmZhLT50cmNtb2QpOworCWJmYV9wb3J0X21lbV9jbGFpbShwb3J0LCBkbV9rdmEsIGRtX3BhKTsKKworCWJmYV9tZW1pbmZvX2RtYV92aXJ0KG1pKSA9IGRtX2t2YSArIGRtX2xlbjsKKwliZmFfbWVtaW5mb19kbWFfcGh5cyhtaSkgPSBkbV9wYSArIGRtX2xlbjsKK30KKworLyoKICAqIEJGQSBJT0MgRkMgcmVsYXRlZCBkZWZpbml0aW9ucwogICovCiAKQEAgLTY3LDE4ICsxNTQsNiBAQAogICogQkZBIEludGVycnVwdCBoYW5kbGluZyBmdW5jdGlvbnMKICAqLwogc3RhdGljIHZvaWQKLWJmYV9tc2l4X2VycmludChzdHJ1Y3QgYmZhX3MgKmJmYSwgdTMyIGludHIpCi17Ci0JYmZhX2lvY19lcnJvcl9pc3IoJmJmYS0+aW9jKTsKLX0KLQotc3RhdGljIHZvaWQKLWJmYV9tc2l4X2xwdShzdHJ1Y3QgYmZhX3MgKmJmYSkKLXsKLQliZmFfaW9jX21ib3hfaXNyKCZiZmEtPmlvYyk7Ci19Ci0KLXN0YXRpYyB2b2lkCiBiZmFfcmVxcV9yZXN1bWUoc3RydWN0IGJmYV9zICpiZmEsIGludCBxaWQpCiB7CiAJc3RydWN0IGxpc3RfaGVhZCAqd2FpdHEsICpxZSwgKnFlbjsKQEAgLTEwNCw5ICsxNzksNiBAQAogCWJmYV9pbnR4KGJmYSk7CiB9CiAKLS8qCi0gKiAgaGFsX2ludHJfYXBpCi0gKi8KIGJmYV9ib29sZWFuX3QKIGJmYV9pbnR4KHN0cnVjdCBiZmFfcyAqYmZhKQogewpAQCAtMTUxLDE4ICsyMjMsNiBAQAogfQogCiB2b2lkCi1iZmFfaW50eF9lbmFibGUoc3RydWN0IGJmYV9zICpiZmEpCi17Ci0Jd3JpdGVsKGJmYS0+aW9jZmMuaW50cl9tYXNrLCBiZmEtPmlvY2ZjLmJmYV9yZWdzLmludHJfbWFzayk7Ci19Ci0KLXZvaWQKLWJmYV9pbnR4X2Rpc2FibGUoc3RydWN0IGJmYV9zICpiZmEpCi17Ci0Jd3JpdGVsKC0xTCwgYmZhLT5pb2NmYy5iZmFfcmVncy5pbnRyX21hc2spOwotfQotCi12b2lkCiBiZmFfaXNyX2VuYWJsZShzdHJ1Y3QgYmZhX3MgKmJmYSkKIHsKIAl1MzIgaW50cl91bm1hc2s7CkBAIC0yMjUsNyArMjg1LDcgQEAKIAliZmFfdHJjKGJmYSwgbS0+bWhkci5tc2dfY2xhc3MpOwogCWJmYV90cmMoYmZhLCBtLT5taGRyLm1zZ19pZCk7CiAJYmZhX3RyYyhiZmEsIG0tPm1oZHIubXRhZy5pMmh0b2spOwotCWJmYV9hc3NlcnQoMCk7CisJV0FSTl9PTigxKTsKIAliZmFfdHJjX3N0b3AoYmZhLT50cmNtb2QpOwogfQogCkBAIC0yMzYsOCArMjk2LDYgQEAKIAl1MzIgcGksIGNpOwogCXN0cnVjdCBsaXN0X2hlYWQgKndhaXRxOwogCi0JYmZhX3RyY19mcChiZmEsIHFpZCk7Ci0KIAlxaWQgJj0gKEJGSV9JT0NfTUFYX0NRUyAtIDEpOwogCiAJYmZhLT5pb2NmYy5od2lmLmh3X3JzcHFfYWNrKGJmYSwgcWlkKTsKQEAgLTI0NSwxNiArMzAzLDEwIEBACiAJY2kgPSBiZmFfcnNwcV9jaShiZmEsIHFpZCk7CiAJcGkgPSBiZmFfcnNwcV9waShiZmEsIHFpZCk7CiAKLQliZmFfdHJjX2ZwKGJmYSwgY2kpOwotCWJmYV90cmNfZnAoYmZhLCBwaSk7Ci0KIAlpZiAoYmZhLT5ybWVfcHJvY2VzcykgewogCQl3aGlsZSAoY2kgIT0gcGkpIHsKIAkJCW0gPSBiZmFfcnNwcV9lbGVtKGJmYSwgcWlkLCBjaSk7Ci0JCQliZmFfYXNzZXJ0X2ZwKG0tPm1oZHIubXNnX2NsYXNzIDwgQkZJX01DX01BWCk7Ci0KIAkJCWJmYV9pc3JzW20tPm1oZHIubXNnX2NsYXNzXSAoYmZhLCBtKTsKLQogCQkJQ1FfSU5DUihjaSwgYmZhLT5pb2NmYy5jZmcuZHJ2Y2ZnLm51bV9yc3BxX2VsZW1zKTsKIAkJfQogCX0KQEAgLTI4Miw3ICszMzQsNyBAQAogCWludHIgPSByZWFkbChiZmEtPmlvY2ZjLmJmYV9yZWdzLmludHJfc3RhdHVzKTsKIAogCWlmIChpbnRyICYgKF9fSEZOX0lOVF9NQk9YX0xQVTAgfCBfX0hGTl9JTlRfTUJPWF9MUFUxKSkKLQkJYmZhX21zaXhfbHB1KGJmYSk7CisJCWJmYV9pb2NfbWJveF9pc3IoJmJmYS0+aW9jKTsKIAogCWludHIgJj0gKF9fSEZOX0lOVF9FUlJfRU1DIHwgX19IRk5fSU5UX0VSUl9MUFUwIHwKIAkJX19IRk5fSU5UX0VSUl9MUFUxIHwgX19IRk5fSU5UX0VSUl9QU1MgfCBfX0hGTl9JTlRfTExfSEFMVCk7CkBAIC0zMTMsMjIgKzM2NSwxNiBAQAogCQl9CiAKIAkJd3JpdGVsKGludHIsIGJmYS0+aW9jZmMuYmZhX3JlZ3MuaW50cl9zdGF0dXMpOwotCQliZmFfbXNpeF9lcnJpbnQoYmZhLCBpbnRyKTsKKwkJYmZhX2lvY19lcnJvcl9pc3IoJmJmYS0+aW9jKTsKIAl9CiB9CiAKLXZvaWQKLWJmYV9pc3JfYmluZChlbnVtIGJmaV9tY2xhc3MgbWMsIGJmYV9pc3JfZnVuY190IGlzcl9mdW5jKQotewotCWJmYV9pc3JzW21jXSA9IGlzcl9mdW5jOwotfQotCiAvKgogICogQkZBIElPQyBGQyByZWxhdGVkIGZ1bmN0aW9ucwogICovCiAKIC8qCi0gKiAgaGFsX2lvY19wdnQgQkZBIElPQyBwcml2YXRlIGZ1bmN0aW9ucworICogIEJGQSBJT0MgcHJpdmF0ZSBmdW5jdGlvbnMKICAqLwogCiBzdGF0aWMgdm9pZApAQCAtMzc5LDcgKzQyNSw3IEBACiAJc3RydWN0IGJmYV9pb2NmY19jZmdfcwkqY2ZnID0gJmlvY2ZjLT5jZmc7CiAJaW50CQlpOwogCi0JYmZhX2Fzc2VydChjZmctPmZ3Y2ZnLm51bV9jcXMgPD0gQkZJX0lPQ19NQVhfQ1FTKTsKKwlXQVJOX09OKGNmZy0+ZndjZmcubnVtX2NxcyA+IEJGSV9JT0NfTUFYX0NRUyk7CiAJYmZhX3RyYyhiZmEsIGNmZy0+ZndjZmcubnVtX2Nxcyk7CiAKIAliZmFfaW9jZmNfcmVzZXRfcXVldWVzKGJmYSk7CkBAIC00ODgsOCArNTM0LDggQEAKIAkgKiBGaXJzdCBhbGxvY2F0ZSBkbWEgbWVtb3J5IGZvciBJT0MuCiAJICovCiAJYmZhX2lvY19tZW1fY2xhaW0oJmJmYS0+aW9jLCBkbV9rdmEsIGRtX3BhKTsKLQlkbV9rdmEgKz0gYmZhX2lvY19tZW1pbmZvKCk7Ci0JZG1fcGEgICs9IGJmYV9pb2NfbWVtaW5mbygpOworCWRtX2t2YSArPSBCRkFfUk9VTkRVUChzaXplb2Yoc3RydWN0IGJmaV9pb2NfYXR0cl9zKSwgQkZBX0RNQV9BTElHTl9TWik7CisJZG1fcGEgICs9IEJGQV9ST1VORFVQKHNpemVvZihzdHJ1Y3QgYmZpX2lvY19hdHRyX3MpLCBCRkFfRE1BX0FMSUdOX1NaKTsKIAogCS8qCiAJICogQ2xhaW0gRE1BLWFibGUgbWVtb3J5IGZvciB0aGUgcmVxdWVzdC9yZXNwb25zZSBxdWV1ZXMgYW5kIGZvciBzaGFkb3cKQEAgLTU1Miw3ICs1OTgsNyBAQAogCWJmYV9tZW1pbmZvX2RtYV92aXJ0KG1lbWluZm8pID0gZG1fa3ZhOwogCWJmYV9tZW1pbmZvX2RtYV9waHlzKG1lbWluZm8pID0gZG1fcGE7CiAKLQlkYmdzeiA9IGJmYV9pb2NfZGVidWdfdHJjc3ooYmZhX2F1dG9fcmVjb3Zlcik7CisJZGJnc3ogPSAoYmZhX2F1dG9fcmVjb3ZlcikgPyBCRkFfREJHX0ZXVFJDX0xFTiA6IDA7CiAJaWYgKGRiZ3N6ID4gMCkgewogCQliZmFfaW9jX2RlYnVnX21lbWNsYWltKCZiZmEtPmlvYywgYmZhX21lbWluZm9fa3ZhKG1lbWluZm8pKTsKIAkJYmZhX21lbWluZm9fa3ZhKG1lbWluZm8pICs9IGRiZ3N6OwpAQCAtNjk5LDcgKzc0NSw3IEBACiAJCWJmYV9jYl9xdWV1ZShiZmEsICZiZmEtPmlvY2ZjLnN0b3BfaGNiX3FlLCBiZmFfaW9jZmNfc3RvcF9jYiwKIAkJCSAgICAgYmZhKTsKIAllbHNlIHsKLQkJYmZhX2Fzc2VydChiZmEtPmlvY2ZjLmFjdGlvbiA9PSBCRkFfSU9DRkNfQUNUX0RJU0FCTEUpOworCQlXQVJOX09OKGJmYS0+aW9jZmMuYWN0aW9uICE9IEJGQV9JT0NGQ19BQ1RfRElTQUJMRSk7CiAJCWJmYV9jYl9xdWV1ZShiZmEsICZiZmEtPmlvY2ZjLmRpc19oY2JfcWUsIGJmYV9pb2NmY19kaXNhYmxlX2NiLAogCQkJICAgICBiZmEpOwogCX0KQEAgLTczNSw5ICs3ODEsNiBAQAogCWJmYV9pc3JfZW5hYmxlKGJmYSk7CiB9CiAKLS8qCi0gKiAgaGFsX2lvY19wdWJsaWMKLSAqLwogCiAvKgogICogUXVlcnkgSU9DIG1lbW9yeSByZXF1aXJlbWVudCBpbmZvcm1hdGlvbi4KQEAgLTc0NywxMSArNzkwLDExIEBACiAJCSAgdTMyICpkbV9sZW4pCiB7CiAJLyogZG1hIG1lbW9yeSBmb3IgSU9DICovCi0JKmRtX2xlbiArPSBiZmFfaW9jX21lbWluZm8oKTsKKwkqZG1fbGVuICs9IEJGQV9ST1VORFVQKHNpemVvZihzdHJ1Y3QgYmZpX2lvY19hdHRyX3MpLCBCRkFfRE1BX0FMSUdOX1NaKTsKIAogCWJmYV9pb2NmY19md19jZmdfc3ooY2ZnLCBkbV9sZW4pOwogCWJmYV9pb2NmY19jcXNfc3ooY2ZnLCBkbV9sZW4pOwotCSprbV9sZW4gKz0gYmZhX2lvY19kZWJ1Z190cmNzeihiZmFfYXV0b19yZWNvdmVyKTsKKwkqa21fbGVuICs9IChiZmFfYXV0b19yZWNvdmVyKSA/IEJGQV9EQkdfRldUUkNfTEVOIDogMDsKIH0KIAogLyoKQEAgLTc4Myw3ICs4MjYsNyBAQAogCiAJYmZhX2lvY2ZjX2luaXRfbWVtKGJmYSwgYmZhZCwgY2ZnLCBwY2lkZXYpOwogCWJmYV9pb2NmY19tZW1fY2xhaW0oYmZhLCBjZmcsIG1lbWluZm8pOwotCWJmYV90aW1lcl9pbml0KCZiZmEtPnRpbWVyX21vZCk7CisJSU5JVF9MSVNUX0hFQUQoJmJmYS0+dGltZXJfbW9kLnRpbWVyX3EpOwogCiAJSU5JVF9MSVNUX0hFQUQoJmJmYS0+Y29tcF9xKTsKIAlmb3IgKGkgPSAwOyBpIDwgQkZJX0lPQ19NQVhfQ1FTOyBpKyspCkBAIC03OTQsMTUgKzgzNyw2IEBACiAgKiBRdWVyeSBJT0MgbWVtb3J5IHJlcXVpcmVtZW50IGluZm9ybWF0aW9uLgogICovCiB2b2lkCi1iZmFfaW9jZmNfZGV0YWNoKHN0cnVjdCBiZmFfcyAqYmZhKQotewotCWJmYV9pb2NfZGV0YWNoKCZiZmEtPmlvYyk7Ci19Ci0KLS8qCi0gKiBRdWVyeSBJT0MgbWVtb3J5IHJlcXVpcmVtZW50IGluZm9ybWF0aW9uLgotICovCi12b2lkCiBiZmFfaW9jZmNfaW5pdChzdHJ1Y3QgYmZhX3MgKmJmYSkKIHsKIAliZmEtPmlvY2ZjLmFjdGlvbiA9IEJGQV9JT0NGQ19BQ1RfSU5JVDsKQEAgLTg1MiwyMyArODg2LDExIEBACiAJCWlvY2ZjLT51cGRhdGVxX2NiZm4oaW9jZmMtPnVwZGF0ZXFfY2JhcmcsIEJGQV9TVEFUVVNfT0spOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQliZmFfYXNzZXJ0KDApOworCQlXQVJOX09OKDEpOwogCX0KIH0KIAogdm9pZAotYmZhX2FkYXB0ZXJfZ2V0X2F0dHIoc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmFfYWRhcHRlcl9hdHRyX3MgKmFkX2F0dHIpCi17Ci0JYmZhX2lvY19nZXRfYWRhcHRlcl9hdHRyKCZiZmEtPmlvYywgYWRfYXR0cik7Ci19Ci0KLXU2NAotYmZhX2FkYXB0ZXJfZ2V0X2lkKHN0cnVjdCBiZmFfcyAqYmZhKQotewotCXJldHVybiBiZmFfaW9jX2dldF9hZGlkKCZiZmEtPmlvYyk7Ci19Ci0KLXZvaWQKIGJmYV9pb2NmY19nZXRfYXR0cihzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYV9pb2NmY19hdHRyX3MgKmF0dHIpCiB7CiAJc3RydWN0IGJmYV9pb2NmY19zCSppb2NmYyA9ICZiZmEtPmlvY2ZjOwpAQCAtOTc2LDE4ICs5OTgsNiBAQAogCW1lbWNweSh3d25zLCBjZmdyc3AtPmJvb3R3d25zLnd3biwgc2l6ZW9mKGNmZ3JzcC0+Ym9vdHd3bnMud3duKSk7CiB9CiAKLXZvaWQKLWJmYV9pb2NmY19nZXRfcGJjX2Jvb3RfY2ZnKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZhX2Jvb3RfcGJjX3MgKnBiY2ZnKQotewotCXN0cnVjdCBiZmFfaW9jZmNfcyAqaW9jZmMgPSAmYmZhLT5pb2NmYzsKLQlzdHJ1Y3QgYmZpX2lvY2ZjX2NmZ3JzcF9zICpjZmdyc3AgPSBpb2NmYy0+Y2ZncnNwOwotCi0JcGJjZmctPmVuYWJsZSA9IGNmZ3JzcC0+cGJjX2NmZy5ib290X2VuYWJsZWQ7Ci0JcGJjZmctPm5ibHVucyA9IGNmZ3JzcC0+cGJjX2NmZy5uYmx1bnM7Ci0JcGJjZmctPnNwZWVkID0gY2ZncnNwLT5wYmNfY2ZnLnBvcnRfc3BlZWQ7Ci0JbWVtY3B5KHBiY2ZnLT5wYmx1biwgY2ZncnNwLT5wYmNfY2ZnLmJsdW4sIHNpemVvZihwYmNmZy0+cGJsdW4pKTsKLX0KLQogaW50CiBiZmFfaW9jZmNfZ2V0X3BiY192cG9ydHMoc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmlfcGJjX3Zwb3J0X3MgKnBiY192cG9ydCkKIHsKQEAgLTk5OCw5ICsxMDA4LDYgQEAKIAlyZXR1cm4gY2ZncnNwLT5wYmNfY2ZnLm52cG9ydHM7CiB9CiAKLS8qCi0gKiAgaGFsX2FwaQotICovCiAKIC8qCiAgKiBVc2UgdGhpcyBmdW5jdGlvbiBxdWVyeSB0aGUgbWVtb3J5IHJlcXVpcmVtZW50IG9mIHRoZSBCRkEgbGlicmFyeS4KQEAgLTEwMzYsNyArMTA0Myw3IEBACiAJaW50CQlpOwogCXUzMglrbV9sZW4gPSAwLCBkbV9sZW4gPSAwOwogCi0JYmZhX2Fzc2VydCgoY2ZnICE9IE5VTEwpICYmIChtZW1pbmZvICE9IE5VTEwpKTsKKwlXQVJOX09OKChjZmcgPT0gTlVMTCkgfHwgKG1lbWluZm8gPT0gTlVMTCkpOwogCiAJbWVtc2V0KCh2b2lkICopbWVtaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBiZmFfbWVtaW5mb19zKSk7CiAJbWVtaW5mby0+bWVtaW5mb1tCRkFfTUVNX1RZUEVfS1ZBIC0gMV0ubWVtX3R5cGUgPQpAQCAtMTA5MCw3ICsxMDk3LDcgQEAKIAogCWJmYS0+ZmNzID0gQkZBX0ZBTFNFOwogCi0JYmZhX2Fzc2VydCgoY2ZnICE9IE5VTEwpICYmIChtZW1pbmZvICE9IE5VTEwpKTsKKwlXQVJOX09OKChjZmcgPT0gTlVMTCkgfHwgKG1lbWluZm8gPT0gTlVMTCkpOwogCiAJLyoKIAkgKiBpbml0aWFsaXplIGFsbCBtZW1vcnkgcG9pbnRlcnMgZm9yIGl0ZXJhdGl2ZSBhbGxvY2F0aW9uCkBAIC0xMTI5LDc5ICsxMTM2LDcgQEAKIAogCWZvciAoaSA9IDA7IGhhbF9tb2RzW2ldOyBpKyspCiAJCWhhbF9tb2RzW2ldLT5kZXRhY2goYmZhKTsKLQotCWJmYV9pb2NmY19kZXRhY2goYmZhKTsKLX0KLQotCi12b2lkCi1iZmFfaW5pdF90cmMoc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmFfdHJjX21vZF9zICp0cmNtb2QpCi17Ci0JYmZhLT50cmNtb2QgPSB0cmNtb2Q7Ci19Ci0KLXZvaWQKLWJmYV9pbml0X3Bsb2coc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmFfcGxvZ19zICpwbG9nKQotewotCWJmYS0+cGxvZyA9IHBsb2c7Ci19Ci0KLS8qCi0gKiBJbml0aWFsaXplIElPQy4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGltbWVkaWF0ZWx5LCB3aGVuIHRoZSBJT0MgaW5pdGlhbGl6YXRpb24gaXMKLSAqIGNvbXBsZXRlZCwgdGhlIGJmYV9jYl9pbml0KCkgd2lsbCBiZSBjYWxsZWQuCi0gKgotICogQHBhcmFtW2luXQliZmEJaW5zdGFuY2UKLSAqCi0gKiBAcmV0dXJuIHZvaWQKLSAqCi0gKiBTcGVjaWFsIENvbnNpZGVyYXRpb25zOgotICoKLSAqIEBub3RlCi0gKiBXaGVuIHRoaXMgZnVuY3Rpb24gcmV0dXJucywgdGhlIGRyaXZlciBzaG91bGQgcmVnaXN0ZXIgdGhlIGludGVycnVwdCBzZXJ2aWNlCi0gKiByb3V0aW5lKHMpIGFuZCBlbmFibGUgdGhlIGRldmljZSBpbnRlcnJ1cHRzLiBJZiB0aGlzIGlzIG5vdCBkb25lLAotICogYmZhX2NiX2luaXQoKSB3aWxsIG5ldmVyIGdldCBjYWxsZWQKLSAqLwotdm9pZAotYmZhX2luaXQoc3RydWN0IGJmYV9zICpiZmEpCi17Ci0JYmZhX2lvY2ZjX2luaXQoYmZhKTsKLX0KLQotLyoKLSAqIFVzZSB0aGlzIGZ1bmN0aW9uIGluaXRpYXRlIHRoZSBJT0MgY29uZmlndXJhdGlvbiBzZXR1cC4gVGhpcyBmdW5jdGlvbgotICogd2lsbCByZXR1cm4gaW1tZWRpYXRlbHkuCi0gKgotICogQHBhcmFtW2luXQliZmEJaW5zdGFuY2UKLSAqCi0gKiBAcmV0dXJuIE5vbmUKLSAqLwotdm9pZAotYmZhX3N0YXJ0KHN0cnVjdCBiZmFfcyAqYmZhKQotewotCWJmYV9pb2NmY19zdGFydChiZmEpOwotfQotCi0vKgotICogVXNlIHRoaXMgZnVuY3Rpb24gcXVpZXNlIHRoZSBJT0MuIFRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gaW1tZWRpYXRlbHksCi0gKiB3aGVuIHRoZSBJT0MgaXMgYWN0dWFsbHkgc3RvcHBlZCwgdGhlIGJmYWQtPmNvbXAgd2lsbCBiZSBzZXQuCi0gKgotICogQHBhcmFtW2luXWJmYSAtIHBvaW50ZXIgdG8gYmZhX3QuCi0gKgotICogQHJldHVybiBOb25lCi0gKgotICogU3BlY2lhbCBDb25zaWRlcmF0aW9uczoKLSAqIGJmYWQtPmNvbXAgY2FuIGJlIHNldCBiZWZvcmUgb3IgYWZ0ZXIgYmZhX3N0b3AoKSByZXR1cm5zLgotICoKLSAqIEBub3RlCi0gKiBJbiBjYXNlIG9mIGFueSBmYWlsdXJlLCB3ZSBjb3VsZCBoYW5kbGUgaXQgYXV0b21hdGljYWxseSBieSBkb2luZyBhCi0gKiByZXNldCBhbmQgdGhlbiBzdWNjZWVkIHRoZSBiZmFfc3RvcCgpIGNhbGwuCi0gKi8KLXZvaWQKLWJmYV9zdG9wKHN0cnVjdCBiZmFfcyAqYmZhKQotewotCWJmYV9pb2NmY19zdG9wKGJmYSk7CisJYmZhX2lvY19kZXRhY2goJmJmYS0+aW9jKTsKIH0KIAogdm9pZApAQCAtMTIzNywyMCArMTE3Miw2IEBACiAJfQogfQogCi12b2lkCi1iZmFfYXR0YWNoX2ZjcyhzdHJ1Y3QgYmZhX3MgKmJmYSkKLXsKLQliZmEtPmZjcyA9IEJGQV9UUlVFOwotfQotCi0vKgotICogUGVyaW9kaWMgdGltZXIgaGVhcnQgYmVhdCBmcm9tIGRyaXZlcgotICovCi12b2lkCi1iZmFfdGltZXJfdGljayhzdHJ1Y3QgYmZhX3MgKmJmYSkKLXsKLQliZmFfdGltZXJfYmVhdCgmYmZhLT50aW1lcl9tb2QpOwotfQogCiAvKgogICogUmV0dXJuIHRoZSBsaXN0IG9mIFBDSSB2ZW5kb3IvZGV2aWNlIGlkIGxpc3RzIHN1cHBvcnRlZCBieSB0aGlzCkBAIC0xMzIxLDg5ICsxMjQyLDMgQEAKIAljZmctPmRydmNmZy5udW1fcnNwcV9lbGVtcyA9IEJGQV9SU1BRX05FTEVNU19NSU47CiAJY2ZnLT5kcnZjZmcubWluX2NmZwkgICA9IEJGQV9UUlVFOwogfQotCi12b2lkCi1iZmFfZ2V0X2F0dHIoc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmFfaW9jX2F0dHJfcyAqaW9jX2F0dHIpCi17Ci0JYmZhX2lvY19nZXRfYXR0cigmYmZhLT5pb2MsIGlvY19hdHRyKTsKLX0KLQotLyoKLSAqIFJldHJpZXZlIGZpcm13YXJlIHRyYWNlIGluZm9ybWF0aW9uIG9uIElPQyBmYWlsdXJlLgotICovCi1iZmFfc3RhdHVzX3QKLWJmYV9kZWJ1Z19md3NhdmUoc3RydWN0IGJmYV9zICpiZmEsIHZvaWQgKnRyY2RhdGEsIGludCAqdHJjbGVuKQotewotCXJldHVybiBiZmFfaW9jX2RlYnVnX2Z3c2F2ZSgmYmZhLT5pb2MsIHRyY2RhdGEsIHRyY2xlbik7Ci19Ci0KLS8qCi0gKiBDbGVhciB0aGUgc2F2ZWQgZmlybXdhcmUgdHJhY2UgaW5mb3JtYXRpb24gb2YgYW4gSU9DLgotICovCi12b2lkCi1iZmFfZGVidWdfZndzYXZlX2NsZWFyKHN0cnVjdCBiZmFfcyAqYmZhKQotewotCWJmYV9pb2NfZGVidWdfZndzYXZlX2NsZWFyKCZiZmEtPmlvYyk7Ci19Ci0KLS8qCi0gKiBGZXRjaCBmaXJtd2FyZSB0cmFjZSBkYXRhLgotICoKLSAqIEBwYXJhbVtpbl0JCWJmYQkJCUJGQSBpbnN0YW5jZQotICogQHBhcmFtW291dF0JCXRyY2RhdGEJCUZpcm13YXJlIHRyYWNlIGJ1ZmZlcgotICogQHBhcmFtW2luLG91dF0JdHJjbGVuCQlGaXJtd2FyZSB0cmFjZSBidWZmZXIgbGVuCi0gKgotICogQHJldHZhbCBCRkFfU1RBVFVTX09LCQkJRmlybXdhcmUgdHJhY2UgaXMgZmV0Y2hlZC4KLSAqIEByZXR2YWwgQkZBX1NUQVRVU19JTlBST0dSRVNTCUZpcm13YXJlIHRyYWNlIGZldGNoIGlzIGluIHByb2dyZXNzLgotICovCi1iZmFfc3RhdHVzX3QKLWJmYV9kZWJ1Z19md3RyYyhzdHJ1Y3QgYmZhX3MgKmJmYSwgdm9pZCAqdHJjZGF0YSwgaW50ICp0cmNsZW4pCi17Ci0JcmV0dXJuIGJmYV9pb2NfZGVidWdfZnd0cmMoJmJmYS0+aW9jLCB0cmNkYXRhLCB0cmNsZW4pOwotfQotCi0vKgotICogRHVtcCBmaXJtd2FyZSBtZW1vcnkuCi0gKgotICogQHBhcmFtW2luXQkJYmZhCQlCRkEgaW5zdGFuY2UKLSAqIEBwYXJhbVtvdXRdCQlidWYJCWJ1ZmZlciBmb3IgZHVtcAotICogQHBhcmFtW2luLG91dF0Jb2Zmc2V0CQlzbWVtIG9mZnNldCB0byBzdGFydCByZWFkCi0gKiBAcGFyYW1baW4sb3V0XQlidWZsZW4JCWxlbmd0aCBvZiBidWZmZXIKLSAqCi0gKiBAcmV0dmFsIEJGQV9TVEFUVVNfT0sJCUZpcm13YXJlIG1lbW9yeSBpcyBkdW1wZWQuCi0gKiBAcmV0dmFsIEJGQV9TVEFUVVNfSU5QUk9HUkVTUwlGaXJtd2FyZSBtZW1vcnkgZHVtcCBpcyBpbiBwcm9ncmVzcy4KLSAqLwotYmZhX3N0YXR1c190Ci1iZmFfZGVidWdfZndjb3JlKHN0cnVjdCBiZmFfcyAqYmZhLCB2b2lkICpidWYsIHUzMiAqb2Zmc2V0LCBpbnQgKmJ1ZmxlbikKLXsKLQlyZXR1cm4gYmZhX2lvY19kZWJ1Z19md2NvcmUoJmJmYS0+aW9jLCBidWYsIG9mZnNldCwgYnVmbGVuKTsKLX0KLS8qCi0gKiBSZXNldCBodyBzZW1hcGhvcmUgJiB1c2FnZSBjbnQgcmVncyBhbmQgaW5pdGlhbGl6ZS4KLSAqLwotdm9pZAotYmZhX2NoaXBfcmVzZXQoc3RydWN0IGJmYV9zICpiZmEpCi17Ci0JYmZhX2lvY19vd25lcnNoaXBfcmVzZXQoJmJmYS0+aW9jKTsKLQliZmFfaW9jX3BsbF9pbml0KCZiZmEtPmlvYyk7Ci19Ci0KLS8qCi0gKiBGZXRjaCBmaXJtd2FyZSBzdGF0aXN0aWNzIGRhdGEuCi0gKgotICogQHBhcmFtW2luXQkJYmZhCQlCRkEgaW5zdGFuY2UKLSAqIEBwYXJhbVtvdXRdCQlkYXRhCQlGaXJtd2FyZSBzdGF0cyBidWZmZXIKLSAqCi0gKiBAcmV0dmFsIEJGQV9TVEFUVVNfT0sJCUZpcm13YXJlIHRyYWNlIGlzIGZldGNoZWQuCi0gKi8KLWJmYV9zdGF0dXNfdAotYmZhX2Z3X3N0YXRzX2dldChzdHJ1Y3QgYmZhX3MgKmJmYSwgdm9pZCAqZGF0YSkKLXsKLQlyZXR1cm4gYmZhX2lvY19md19zdGF0c19nZXQoJmJmYS0+aW9jLCBkYXRhKTsKLX0KLQotYmZhX3N0YXR1c190Ci1iZmFfZndfc3RhdHNfY2xlYXIoc3RydWN0IGJmYV9zICpiZmEpCi17Ci0JcmV0dXJuIGJmYV9pb2NfZndfc3RhdHNfY2xlYXIoJmJmYS0+aW9jKTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2NzLmggYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9jcy5oCmluZGV4IDk5ZjI0MmIuLjEyYmZlZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2NzLmgKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfY3MuaApAQCAtMjIsNyArMjIsNyBAQAogI2lmbmRlZiBfX0JGQV9DU19IX18KICNkZWZpbmUgX19CRkFfQ1NfSF9fCiAKLSNpbmNsdWRlICJiZmFfb3NfaW5jLmgiCisjaW5jbHVkZSAiYmZhZF9kcnYuaCIKIAogLyoKICAqIEJGQSBUUkMKQEAgLTMyLDEyICszMiwyMCBAQAogI2RlZmluZSBCRkFfVFJDX01BWAkoNCAqIDEwMjQpCiAjZW5kaWYKIAorI2RlZmluZSBCRkFfVFJDX1RTKF90cmNtKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQlzdHJ1Y3QgdGltZXZhbCB0djsgICAgICAgICAgICAgICAgICAgICAgXAorCQkJCQkJCVwKKwkJZG9fZ2V0dGltZW9mZGF5KCZ0dik7ICAgICAgICAgICAgICAgICAgIFwKKwkJKHR2LnR2X3NlYyoxMDAwMDAwK3R2LnR2X3VzZWMpOyAgICAgICAgIFwKKwl9KQorCiAjaWZuZGVmIEJGQV9UUkNfVFMKICNkZWZpbmUgQkZBX1RSQ19UUyhfdHJjbSkJKChfdHJjbSktPnRpY2tzKyspCiAjZW5kaWYKIAogc3RydWN0IGJmYV90cmNfcyB7Ci0jaWZkZWYgX19CSUdFTkRJQU4KKyNpZmRlZiBfX0JJR19FTkRJQU4KIAl1MTYJZmlsZW5vOwogCXUxNglsaW5lOwogI2Vsc2UKQEAgLTk5LDEzICsxMDcsNiBAQAogCXRyY20tPnN0b3BwZWQgPSAxOwogfQogCi0jaWZkZWYgRldUUkMKLWV4dGVybiB2b2lkIGRjX2ZsdXNoKHZvaWQgKmRhdGEpOwotI2Vsc2UKLSNkZWZpbmUgZGNfZmx1c2goZGF0YSkKLSNlbmRpZgotCi0KIHN0YXRpYyBpbmxpbmUgdm9pZAogX19iZmFfdHJjKHN0cnVjdCBiZmFfdHJjX21vZF9zICp0cmNtLCBpbnQgZmlsZW5vLCBpbnQgbGluZSwgdTY0IGRhdGEpCiB7CkBAIC0xMTksMTIgKzEyMCwxMCBAQAogCXRyYy0+bGluZSA9ICh1MTYpIGxpbmU7CiAJdHJjLT5kYXRhLnU2NCA9IGRhdGE7CiAJdHJjLT50aW1lc3RhbXAgPSBCRkFfVFJDX1RTKHRyY20pOwotCWRjX2ZsdXNoKHRyYyk7CiAKIAl0cmNtLT50YWlsID0gKHRyY20tPnRhaWwgKyAxKSAmIChCRkFfVFJDX01BWCAtIDEpOwogCWlmICh0cmNtLT50YWlsID09IHRyY20tPmhlYWQpCiAJCXRyY20tPmhlYWQgPSAodHJjbS0+aGVhZCArIDEpICYgKEJGQV9UUkNfTUFYIC0gMSk7Ci0JZGNfZmx1c2godHJjbSk7CiB9CiAKIApAQCAtMTQxLDQyICsxNDAsMTggQEAKIAl0cmMtPmxpbmUgPSAodTE2KSBsaW5lOwogCXRyYy0+ZGF0YS51MzIudTMyID0gZGF0YTsKIAl0cmMtPnRpbWVzdGFtcCA9IEJGQV9UUkNfVFModHJjbSk7Ci0JZGNfZmx1c2godHJjKTsKIAogCXRyY20tPnRhaWwgPSAodHJjbS0+dGFpbCArIDEpICYgKEJGQV9UUkNfTUFYIC0gMSk7CiAJaWYgKHRyY20tPnRhaWwgPT0gdHJjbS0+aGVhZCkKIAkJdHJjbS0+aGVhZCA9ICh0cmNtLT5oZWFkICsgMSkgJiAoQkZBX1RSQ19NQVggLSAxKTsKLQlkY19mbHVzaCh0cmNtKTsKIH0KIAotI2lmbmRlZiBCRkFfUEVSRl9CVUlMRAotI2RlZmluZSBiZmFfdHJjX2ZwKF90cmNwLCBfZGF0YSkJYmZhX3RyYyhfdHJjcCwgX2RhdGEpCi0jZWxzZQotI2RlZmluZSBiZmFfdHJjX2ZwKF90cmNwLCBfZGF0YSkKLSNlbmRpZgotCi0vKgotICogQCBCRkEgTE9HIGludGVyZmFjZXMKLSAqLwotI2RlZmluZSBiZmFfYXNzZXJ0KF9fY29uZCkJZG8gewkJCQkJXAotCWlmICghKF9fY29uZCkpIHsJCQkJCQlcCi0JCXByaW50ayhLRVJOX0VSUiAiYXNzZXJ0KCVzKSBmYWlsZWQgYXQgJXM6JWRcXG4iLCAgICAgICAgIFwKLQkJI19fY29uZCwgX19GSUxFX18sIF9fTElORV9fKTsJCQkJXAotCX0JCQkJCQkJCVwKLX0gd2hpbGUgKDApCi0KICNkZWZpbmUgYmZhX3NtX2ZhdWx0KF9fbW9kLCBfX2V2ZW50KQlkbyB7CQkJCVwKIAliZmFfdHJjKF9fbW9kLCAoKCh1MzIpMHhERUFEIDw8IDE2KSB8IF9fZXZlbnQpKTsJCVwKIAlwcmludGsoS0VSTl9FUlIJIkFzc2VydGlvbiBmYWlsdXJlOiAlczolZDogJWQiLAkJCVwKIAkJX19GSUxFX18sIF9fTElORV9fLCAoX19ldmVudCkpOwkJCQlcCiB9IHdoaWxlICgwKQogCi0jaWZuZGVmIEJGQV9QRVJGX0JVSUxECi0jZGVmaW5lIGJmYV9hc3NlcnRfZnAoX19jb25kKQliZmFfYXNzZXJ0KF9fY29uZCkKLSNlbHNlCi0jZGVmaW5lIGJmYV9hc3NlcnRfZnAoX19jb25kKQotI2VuZGlmCi0KIC8qIEJGQSBxdWV1ZSBkZWZpbml0aW9ucyAqLwogI2RlZmluZSBiZmFfcV9maXJzdChfcSkgKCh2b2lkICopKCgoc3RydWN0IGxpc3RfaGVhZCAqKSAoX3EpKS0+bmV4dCkpCiAjZGVmaW5lIGJmYV9xX25leHQoX3FlKSAoKChzdHJ1Y3QgbGlzdF9oZWFkICopIChfcWUpKS0+bmV4dCkKQEAgLTE5OSw3ICsxNzQsNiBAQAogCQliZmFfcV9wcmV2KGJmYV9xX25leHQoKigoc3RydWN0IGxpc3RfaGVhZCAqKikgX3FlKSkpID0JXAogCQkJCShzdHJ1Y3QgbGlzdF9oZWFkICopIChfcSk7CQlcCiAJCWJmYV9xX25leHQoX3EpID0gYmZhX3FfbmV4dCgqKChzdHJ1Y3QgbGlzdF9oZWFkICoqKSBfcWUpKTtcCi0JCUJGQV9RX0RCR19JTklUKCooKHN0cnVjdCBsaXN0X2hlYWQgKiopIF9xZSkpOwkJXAogCX0gZWxzZSB7CQkJCQkJCVwKIAkJKigoc3RydWN0IGxpc3RfaGVhZCAqKikgKF9xZSkpID0gKHN0cnVjdCBsaXN0X2hlYWQgKikgTlVMTDtcCiAJfQkJCQkJCQkJXApAQCAtMjE0LDcgKzE4OCw2IEBACiAJCWJmYV9xX25leHQoYmZhX3FfcHJldigqKChzdHJ1Y3QgbGlzdF9oZWFkICoqKSBfcWUpKSkgPQlcCiAJCQkoc3RydWN0IGxpc3RfaGVhZCAqKSAoX3EpOwkJCVwKIAkJYmZhX3FfcHJldihfcSkgPSBiZmFfcV9wcmV2KCooc3RydWN0IGxpc3RfaGVhZCAqKikgX3FlKTtcCi0JCUJGQV9RX0RCR19JTklUKCooKHN0cnVjdCBsaXN0X2hlYWQgKiopIF9xZSkpOwkJXAogCX0gZWxzZSB7CQkJCQkJCVwKIAkJKigoc3RydWN0IGxpc3RfaGVhZCAqKikgKF9xZSkpID0gKHN0cnVjdCBsaXN0X2hlYWQgKikgTlVMTDtcCiAJfQkJCQkJCQkJXApAQCAtMjM2LDE2ICsyMDksNiBAQAogCXJldHVybiAwOwogfQogCi0vKgotICogI2lmZGVmIEJGQV9ERUJVRyAoVXNpbmcgYmZhX2Fzc2VydCB0byBjaGVjayBmb3IgZGVidWdfYnVpbGQgaXMgbm90Ci0gKiBjb25zaXN0ZW50IGFjcm9zcyBtb2R1bGVzKQotICovCi0jaWZuZGVmIEJGQV9QRVJGX0JVSUxECi0jZGVmaW5lIEJGQV9RX0RCR19JTklUKF9xZSkgYmZhX3FfcWVfaW5pdChfcWUpCi0jZWxzZQotI2RlZmluZSBCRkFfUV9EQkdfSU5JVChfcWUpCi0jZW5kaWYKLQogI2RlZmluZSBiZmFfcV9pc19vbl9xKF9xLCBfcWUpICAgICAgXAogCWJmYV9xX2lzX29uX3FfZnVuYyhfcSwgKHN0cnVjdCBsaXN0X2hlYWQgKikoX3FlKSkKIApAQCAtMzYxLDQgKzMyNCw0MyBAQAogCWJmYV93Y19kb3duKHdjKTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkCit3d24yc3RyKGNoYXIgKnd3bl9zdHIsIHU2NCB3d24pCit7CisJdW5pb24geworCQl1NjQgd3duOworCQl1OCBieXRlWzhdOworCX0gdzsKKworCXcud3duID0gd3duOworCXNwcmludGYod3duX3N0ciwgIiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeCIsIHcuYnl0ZVswXSwKKwkJdy5ieXRlWzFdLCB3LmJ5dGVbMl0sIHcuYnl0ZVszXSwgdy5ieXRlWzRdLCB3LmJ5dGVbNV0sCisJCXcuYnl0ZVs2XSwgdy5ieXRlWzddKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitmY2lkMnN0cihjaGFyICpmY2lkX3N0ciwgdTMyIGZjaWQpCit7CisJdW5pb24geworCQl1MzIgZmNpZDsKKwkJdTggYnl0ZVs0XTsKKwl9IGY7CisKKwlmLmZjaWQgPSBmY2lkOworCXNwcmludGYoZmNpZF9zdHIsICIlMDJ4OiUwMng6JTAyeCIsIGYuYnl0ZVsxXSwgZi5ieXRlWzJdLCBmLmJ5dGVbM10pOworfQorCisjZGVmaW5lIGJmYV9zd2FwXzNiKF94KQkJCQlcCisJKCgoKF94KSAmIDB4ZmYpIDw8IDE2KSB8CQlcCisJKChfeCkgJiAweDAwZmYwMCkgfAkJCVwKKwkoKChfeCkgJiAweGZmMDAwMCkgPj4gMTYpKQorCisjaWZuZGVmIF9fQklHX0VORElBTgorI2RlZmluZSBiZmFfaHRvbjNiKF94KSAgYmZhX3N3YXBfM2IoX3gpCisjZWxzZQorI2RlZmluZSBiZmFfaHRvbjNiKF94KSAgKF94KQorI2VuZGlmCisKKyNkZWZpbmUgYmZhX250b2gzYihfeCkgIGJmYV9odG9uM2IoX3gpCisKICNlbmRpZiAvKiBfX0JGQV9DU19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2RlZnMuaCBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2RlZnMuaAppbmRleCA0YjViOWUzLi5kODVmOTNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9kZWZzLmgKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZGVmcy5oCkBAIC0xOSw3ICsxOSw3IEBACiAjZGVmaW5lIF9fQkZBX0RFRlNfSF9fCiAKICNpbmNsdWRlICJiZmFfZmMuaCIKLSNpbmNsdWRlICJiZmFfb3NfaW5jLmgiCisjaW5jbHVkZSAiYmZhZF9kcnYuaCIKIAogI2RlZmluZSBCRkFfTUZHX1NFUklBTE5VTV9TSVpFICAgICAgICAgICAgICAgICAgMTEKICNkZWZpbmUgU1RSU1ooX24pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKF9uKSArIDQpICYgfjMpCkBAIC00NDYsOCArNDQ2LDggQEAKICAqIEJvb3QgbHVuIGluZm9ybWF0aW9uLgogICovCiBzdHJ1Y3QgYmZhX2Jvb3RfYm9vdGx1bl9zIHsKLQl3d25fdCAgIHB3d247ICAgLyogIHBvcnQgd3duIG9mIHRhcmdldCAqLwotCWx1bl90ICAgbHVuOyAgICAvKiAgNjQtYml0IGx1biAqLworCXd3bl90ICAgcHd3bjsJCS8qICBwb3J0IHd3biBvZiB0YXJnZXQgKi8KKwlzdHJ1Y3Qgc2NzaV9sdW4gICBsdW47ICAvKiAgNjQtYml0IGx1biAqLwogfTsKICNwcmFnbWEgcGFjaygpCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2RlZnNfc3ZjLmggYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9kZWZzX3N2Yy5oCmluZGV4IGUyNGU5ZjcuLjY0OGM4NDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2RlZnNfc3ZjLmgKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZGVmc19zdmMuaApAQCAtMzQsOCArMzQsOCBAQAogc3RydWN0IGJmYV9pb2NmY19pbnRyX2F0dHJfcyB7CiAJdTgJCWNvYWxlc2NlOwkvKiAgZW5hYmxlL2Rpc2FibGUgY29hbGVzY2luZyAqLwogCXU4CQlyc3ZkWzNdOwotCXUxNglsYXRlbmN5OwkvKiAgbGF0ZW5jeSBpbiBtaWNyb3NlY29uZHMgICAqLwotCXUxNglkZWxheTsJCS8qICBkZWxheSBpbiBtaWNyb3NlY29uZHMgICAgICovCisJX19iZTE2CWxhdGVuY3k7CS8qICBsYXRlbmN5IGluIG1pY3Jvc2Vjb25kcyAgICovCisJX19iZTE2CWRlbGF5OwkJLyogIGRlbGF5IGluIG1pY3Jvc2Vjb25kcyAgICAgKi8KIH07CiAKIC8qCkBAIC03NDMsNyArNzQzLDcgQEAKIAl1OAkgcW9zX2VuYWJsZWQ7CS8qICBxb3MgZW5hYmxlZCBvciBub3QJCSovCiAJdTgJIGNmZ19oYXJkYWxwYTsJLyogIGlzIGhhcmQgYWxwYSBjb25maWd1cmVkCSovCiAJdTgJIGhhcmRhbHBhOwkvKiAgY29uZmlndXJlZCBoYXJkIGFscGEJKi8KLQl1MTYgbWF4ZnJzaXplOwkvKiAgbWF4aW11bSBmcmFtZSBzaXplCQkqLworCV9fYmUxNgkgbWF4ZnJzaXplOwkvKiAgbWF4aW11bSBmcmFtZSBzaXplCQkqLwogCXU4CSByeF9iYmNyZWRpdDsJLyogIHJlY2VpdmUgYnVmZmVyIGNyZWRpdHMJKi8KIAl1OAkgdHhfYmJjcmVkaXQ7CS8qICB0cmFuc21pdCBidWZmZXIgY3JlZGl0cwkqLwogCXU4CSByYXRlbGltaXQ7CS8qICByYXRlbGltaXQgZW5hYmxlZCBvciBub3QJKi8KQEAgLTg0Myw3ICs4NDMsNyBAQAogCXU4CSBma2FfZGlzYWJsZWQ7ICAgLyogIEZLQSBpcyBkaXNhYmxlZAkgICovCiAJdTgJIG1heHN6X3ZlcmlmaWVkOyAvKiAgRkNvRSBtYXggc2l6ZSB2ZXJpZmllZCAgICovCiAJdTgJIGZjX21hcFszXTsgICAgICAvKiAgRkMgbWFwCQkgICAqLwotCXUxNgl2bGFuOwkgICAvKiAgRkNvRSB2bGFuIHRhZy9wcmlvcml0eSAgICovCisJX19iZTE2CSB2bGFuOwkgICAvKiAgRkNvRSB2bGFuIHRhZy9wcmlvcml0eSAgICovCiAJdTMyCWZrYV9hZHZfcGVyOyAgICAvKiAgRklQICBrYSBhZHZlcnQuIHBlcmlvZCAgICovCiAJbWFjX3QJICAgbWFjOwkgICAgLyogIEZDRiBtYWMJCSAgKi8KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9kcnYuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2Rydi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjIyZDdjLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2Rydi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTA3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAxMCBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKLSAqIHd3dy5icm9jYWRlLmNvbQotICoKLSAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLQotI2luY2x1ZGUgImJmYV9tb2R1bGVzLmgiCi0KLS8qCi0gKiBCRkEgbW9kdWxlIGxpc3QgdGVybWluYXRlZCBieSBOVUxMCi0gKi8KLXN0cnVjdCBiZmFfbW9kdWxlX3MgKmhhbF9tb2RzW10gPSB7Ci0JJmhhbF9tb2Rfc2dwZywKLQkmaGFsX21vZF9mY3BvcnQsCi0JJmhhbF9tb2RfZmN4cCwKLQkmaGFsX21vZF9scHMsCi0JJmhhbF9tb2RfdWYsCi0JJmhhbF9tb2RfcnBvcnQsCi0JJmhhbF9tb2RfZmNwaW0sCi0JTlVMTAotfTsKLQotLyoKLSAqIE1lc3NhZ2UgaGFuZGxlcnMgZm9yIHZhcmlvdXMgbW9kdWxlcy4KLSAqLwotYmZhX2lzcl9mdW5jX3QgIGJmYV9pc3JzW0JGSV9NQ19NQVhdID0gewotCWJmYV9pc3JfdW5oYW5kbGVkLAkvKiBOT05FICovCi0JYmZhX2lzcl91bmhhbmRsZWQsCS8qIEJGSV9NQ19JT0MgKi8KLQliZmFfaXNyX3VuaGFuZGxlZCwJLyogQkZJX01DX0RJQUcgKi8KLQliZmFfaXNyX3VuaGFuZGxlZCwJLyogQkZJX01DX0ZMQVNIICovCi0JYmZhX2lzcl91bmhhbmRsZWQsCS8qIEJGSV9NQ19DRUUgKi8KLQliZmFfZmNwb3J0X2lzciwJCS8qIEJGSV9NQ19GQ1BPUlQgKi8KLQliZmFfaXNyX3VuaGFuZGxlZCwJLyogQkZJX01DX0lPQ0ZDICovCi0JYmZhX2lzcl91bmhhbmRsZWQsCS8qIEJGSV9NQ19MTCAqLwotCWJmYV91Zl9pc3IsCQkvKiBCRklfTUNfVUYgKi8KLQliZmFfZmN4cF9pc3IsCQkvKiBCRklfTUNfRkNYUCAqLwotCWJmYV9scHNfaXNyLAkJLyogQkZJX01DX0xQUyAqLwotCWJmYV9ycG9ydF9pc3IsCQkvKiBCRklfTUNfUlBPUlQgKi8KLQliZmFfaXRuaW1faXNyLAkJLyogQkZJX01DX0lUTklNICovCi0JYmZhX2lzcl91bmhhbmRsZWQsCS8qIEJGSV9NQ19JT0lNX1JFQUQgKi8KLQliZmFfaXNyX3VuaGFuZGxlZCwJLyogQkZJX01DX0lPSU1fV1JJVEUgKi8KLQliZmFfaXNyX3VuaGFuZGxlZCwJLyogQkZJX01DX0lPSU1fSU8gKi8KLQliZmFfaW9pbV9pc3IsCQkvKiBCRklfTUNfSU9JTSAqLwotCWJmYV9pb2ltX2dvb2RfY29tcF9pc3IsCS8qIEJGSV9NQ19JT0lNX0lPQ09NICovCi0JYmZhX3Rza2ltX2lzciwJCS8qIEJGSV9NQ19UU0tJTSAqLwotCWJmYV9pc3JfdW5oYW5kbGVkLAkvKiBCRklfTUNfU0JPT1QgKi8KLQliZmFfaXNyX3VuaGFuZGxlZCwJLyogQkZJX01DX0lQRkMgKi8KLQliZmFfaXNyX3VuaGFuZGxlZCwJLyogQkZJX01DX1BPUlQgKi8KLQliZmFfaXNyX3VuaGFuZGxlZCwJLyogLS0tLS0tLS0tICovCi0JYmZhX2lzcl91bmhhbmRsZWQsCS8qIC0tLS0tLS0tLSAqLwotCWJmYV9pc3JfdW5oYW5kbGVkLAkvKiAtLS0tLS0tLS0gKi8KLQliZmFfaXNyX3VuaGFuZGxlZCwJLyogLS0tLS0tLS0tICovCi0JYmZhX2lzcl91bmhhbmRsZWQsCS8qIC0tLS0tLS0tLSAqLwotCWJmYV9pc3JfdW5oYW5kbGVkLAkvKiAtLS0tLS0tLS0gKi8KLQliZmFfaXNyX3VuaGFuZGxlZCwJLyogLS0tLS0tLS0tICovCi0JYmZhX2lzcl91bmhhbmRsZWQsCS8qIC0tLS0tLS0tLSAqLwotCWJmYV9pc3JfdW5oYW5kbGVkLAkvKiAtLS0tLS0tLS0gKi8KLQliZmFfaXNyX3VuaGFuZGxlZCwJLyogLS0tLS0tLS0tICovCi19OwotCi0KLS8qCi0gKiBNZXNzYWdlIGhhbmRsZXJzIGZvciBtYWlsYm94IGNvbW1hbmQgY2xhc3NlcwotICovCi1iZmFfaW9jX21ib3hfbWNmdW5jX3QgIGJmYV9tYm94X2lzcnNbQkZJX01DX01BWF0gPSB7Ci0JTlVMTCwKLQlOVUxMLAkJCS8qIEJGSV9NQ19JT0MgICAqLwotCU5VTEwsCQkJLyogQkZJX01DX0RJQUcgICovCi0JTlVMTCwJCS8qIEJGSV9NQ19GTEFTSCAqLwotCU5VTEwsCQkJLyogQkZJX01DX0NFRSAgICovCi0JTlVMTCwJCQkvKiBCRklfTUNfUE9SVCAgKi8KLQliZmFfaW9jZmNfaXNyLAkJLyogQkZJX01DX0lPQ0ZDICovCi0JTlVMTCwKLX07Ci0KLQotCi12b2lkCi1iZmFfY29tX3BvcnRfYXR0YWNoKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWkpCi17Ci0Jc3RydWN0IGJmYV9wb3J0X3MJKnBvcnQgPSAmYmZhLT5tb2R1bGVzLnBvcnQ7Ci0JdTMyCQlkbV9sZW47Ci0JdTgJCQkqZG1fa3ZhOwotCXU2NAkJZG1fcGE7Ci0KLQlkbV9sZW4gPSBiZmFfcG9ydF9tZW1pbmZvKCk7Ci0JZG1fa3ZhID0gYmZhX21lbWluZm9fZG1hX3ZpcnQobWkpOwotCWRtX3BhICA9IGJmYV9tZW1pbmZvX2RtYV9waHlzKG1pKTsKLQotCW1lbXNldChwb3J0LCAwLCBzaXplb2Yoc3RydWN0IGJmYV9wb3J0X3MpKTsKLQliZmFfcG9ydF9hdHRhY2gocG9ydCwgJmJmYS0+aW9jLCBiZmEsIGJmYS0+dHJjbW9kKTsKLQliZmFfcG9ydF9tZW1fY2xhaW0ocG9ydCwgZG1fa3ZhLCBkbV9wYSk7Ci0KLQliZmFfbWVtaW5mb19kbWFfdmlydChtaSkgPSBkbV9rdmEgKyBkbV9sZW47Ci0JYmZhX21lbWluZm9fZG1hX3BoeXMobWkpID0gZG1fcGEgKyBkbV9sZW47Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mYy5oIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmMuaAppbmRleCBlOTI5ZDI1Li44ZTc2NGZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mYy5oCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2ZjLmgKQEAgLTE4LDE0ICsxOCwxMiBAQAogI2lmbmRlZiBfX0JGQV9GQ19IX18KICNkZWZpbmUgX19CRkFfRkNfSF9fCiAKLSNpbmNsdWRlICJiZmFfb3NfaW5jLmgiCisjaW5jbHVkZSAiYmZhZF9kcnYuaCIKIAogdHlwZWRlZiB1NjQgd3duX3Q7Ci10eXBlZGVmIHU2NCBsdW5fdDsKIAogI2RlZmluZSBXV05fTlVMTAkoMCkKICNkZWZpbmUgRkNfU1lNTkFNRV9NQVgJMjU2CS8qICBtYXggbmFtZSBzZXJ2ZXIgc3ltYm9saWMgbmFtZSBzaXplICovCi0jZGVmaW5lIEZDX0FMUEFfTUFYCTEyOAogCiAjcHJhZ21hIHBhY2soMSkKIApAQCAtNDAsNyArMzgsNiBAQAogc3RydWN0IHNjc2lfY2RiX3MgewogCXU4ICAgICAgICAgc2NzaV9jZGJbU0NTSV9NQVhfQ0RCTEVOXTsKIH07Ci0jZGVmaW5lIHNjc2lfY2RiX3Qgc3RydWN0IHNjc2lfY2RiX3MKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBTQ1NJIHN0YXR1cyBieXRlIHZhbHVlcwpAQCAtNjMsNyArNjAsNyBAQAogICogRmlicmUgQ2hhbm5lbCBIZWFkZXIgU3RydWN0dXJlIChGQ0hTKSBkZWZpbml0aW9uCiAgKi8KIHN0cnVjdCBmY2hzX3MgewotI2lmZGVmIF9fQklHRU5ESUFOCisjaWZkZWYgX19CSUdfRU5ESUFOCiAJdTMyICAgICAgICByb3V0aW5nOjQ7CS8qIHJvdXRpbmcgYml0cyAqLwogCXUzMiAgICAgICAgY2F0X2luZm86NDsJLyogY2F0ZWdvcnkgaW5mbyAqLwogI2Vsc2UKQEAgLTc1LDM0ICs3MiwxOSBAQAogCXUzMiAgICAgICAgY3NfY3RsOjg7CS8qIGNsYXNzIHNwZWNpZmljIGNvbnRyb2wgKi8KIAl1MzIgICAgICAgIHNfaWQ6MjQ7CS8qIHNvdXJjZSBpZGVudGlmaWVyICovCiAKLQl1MzIgICAgICAgIHR5cGU6ODsJCS8qIGRhdGEgc3RydWN0dXJlIHR5cGUgKi8KKwl1MzIgICAgICAgIHR5cGU6ODsJLyogZGF0YSBzdHJ1Y3R1cmUgdHlwZSAqLwogCXUzMiAgICAgICAgZl9jdGw6MjQ7CS8qIGluaXRpYWwgZnJhbWUgY29udHJvbCAqLwogCi0JdTggICAgICAgICBzZXFfaWQ7CQkvKiBzZXF1ZW5jZSBpZGVudGlmaWVyICovCi0JdTggICAgICAgICBkZl9jdGw7CQkvKiBkYXRhIGZpZWxkIGNvbnRyb2wgKi8KKwl1OCAgICAgICAgIHNlcV9pZDsJLyogc2VxdWVuY2UgaWRlbnRpZmllciAqLworCXU4ICAgICAgICAgZGZfY3RsOwkvKiBkYXRhIGZpZWxkIGNvbnRyb2wgKi8KIAl1MTYgICAgICAgIHNlcV9jbnQ7CS8qIHNlcXVlbmNlIGNvdW50ICovCiAKLQl1MTYgICAgICAgIG94X2lkOwkJLyogb3JpZ2luYXRvciBleGNoYW5nZSBJRCAqLwotCXUxNiAgICAgICAgcnhfaWQ7CQkvKiByZXNwb25kZXIgZXhjaGFuZ2UgSUQgKi8KKwlfX2JlMTYgICAgIG94X2lkOwkvKiBvcmlnaW5hdG9yIGV4Y2hhbmdlIElEICovCisJdTE2ICAgICAgICByeF9pZDsJLyogcmVzcG9uZGVyIGV4Y2hhbmdlIElEICovCiAKIAl1MzIgICAgICAgIHJvOwkJLyogcmVsYXRpdmUgb2Zmc2V0ICovCiB9OwogCi0jZGVmaW5lIEZDX1NPRl9MRU4JCTQKLSNkZWZpbmUgRkNfRU9GX0xFTgkJNAotI2RlZmluZSBGQ19DUkNfTEVOCQk0Ci0KLS8qCi0gKiBGaWJyZSBDaGFubmVsIEJCX0UgSGVhZGVyIFN0cnVjdHVyZQotICovCi1zdHJ1Y3QgZmNiYmVoc19zIHsKLQl1MTYJdmVyX3JzdmQ7Ci0JdTMyCXJzdmRbMl07Ci0JdTMyCXJzdmRfX3NvZjsKLX07Ci0KLSNkZWZpbmUgRkNfU0VRX0lEX01BWAkJMjU2Ci0KIC8qCiAgKiByb3V0aW5nIGJpdCBkZWZpbml0aW9ucwogICovCkBAIC0xNDksMjIgKzEzMSw2IEBACiB9OwogCiAvKgotICogaW5mb3JtYXRpb24gY2F0ZWdvcnkgZm9yIExpbmsgQ29udHJvbAotICovCi1lbnVtIHsKLQlGQ19DQVRfQUNLXzEJCT0gMHgwMCwKLQlGQ19DQVRfQUNLXzBfTgkJPSAweDAxLAotCUZDX0NBVF9QX1JKVAkJPSAweDAyLAotCUZDX0NBVF9GX1JKVAkJPSAweDAzLAotCUZDX0NBVF9QX0JTWQkJPSAweDA0LAotCUZDX0NBVF9GX0JTWV9EQVRBCT0gMHgwNSwKLQlGQ19DQVRfRl9CU1lfTElOS19DVEwJPSAweDA2LAotCUZDX0NBVF9GX0xDUgkJPSAweDA3LAotCUZDX0NBVF9OVFkJCT0gMHgwOCwKLQlGQ19DQVRfRU5ECQk9IDB4MDksCi19OwotCi0vKgogICogVHlwZSBGaWVsZCBEZWZpbml0aW9ucy4gRkMtUEggU2VjdGlvbiAxOC41IHBnLiAxNjUKICAqLwogZW51bSB7CkBAIC0xODIsMTAgKzE0OCw2IEBACiAJRkNfVFlQRV9NQVgJCT0gMjU2LAkvKiAyNTYgRkMtNCB0eXBlcyAqLwogfTsKIAotc3RydWN0IGZjX2ZjNHR5cGVzX3MgewotCXU4ICAgICAgICAgYml0c1tGQ19UWVBFX01BWCAvIDhdOwotfTsKLQogLyoKICAqIEZyYW1lIENvbnRyb2wgRGVmaW5pdGlvbnMuIEZDLVBIIFRhYmxlLTQ1LiBwZy4gMTY4CiAgKi8KQEAgLTI4OCw3ICsyNTAsNiBAQAogCUZDX0VMU19BVVRIID0gMHg5MCwJLyogQXV0aGVudGljYXRpb24uIFJlZiBGQy1TUCAqLwogCUZDX0VMU19SRkNOID0gMHg5NywJLyogUmVxdWVzdCBGYWJyaWMgQ2hhbmdlIE5vdGlmaWNhdGlvbi4gUmVmCiAJCQkJICpGQy1TUCAqLwotCiB9OwogCiAvKgpAQCAtMzE0LDEyICsyNzUsMTIgQEAKICAqIEZDLVBILXguIEZpZ3VyZS03Ni4gcGcuIDMwOC4KICAqLwogc3RydWN0IGZjX3Bsb2dpX2NzcF9zIHsKLQl1OCAgICAgICAgIHZlcmhpOwkvKiBGQy1QSCBoaWdoIHZlcnNpb24gKi8KLQl1OCAgICAgICAgIHZlcmxvOwkvKiBGQy1QSCBsb3cgdmVyc2lvbiAqLwotCXUxNiAgICAgICAgYmJjcmVkOwkvKiBCQl9DcmVkaXQgKi8KKwl1OAkJdmVyaGk7CQkvKiBGQy1QSCBoaWdoIHZlcnNpb24gKi8KKwl1OAkJdmVybG87CQkvKiBGQy1QSCBsb3cgdmVyc2lvbiAqLworCV9fYmUxNgkJYmJjcmVkOwkJLyogQkJfQ3JlZGl0ICovCiAKLSNpZmRlZiBfX0JJR0VORElBTgotCXU4ICAgICAgICAgY2lybzoxLAkJLyogY29udGludW91c2x5IGluY3JlYXNpbmcgUk8gKi8KKyNpZmRlZiBfX0JJR19FTkRJQU4KKwl1OAkJY2lybzoxLAkJLyogY29udGludW91c2x5IGluY3JlYXNpbmcgUk8gKi8KIAkJCXJybzoxLAkJLyogcmFuZG9tIHJlbGF0aXZlIG9mZnNldCAqLwogCQkJbnBpdl9zdXBwOjEsCS8qIE5QSVYgc3VwcG9ydGVkICovCiAJCQlwb3J0X3R5cGU6MSwJLyogTl9Qb3J0L0ZfcG9ydCAqLwpAQCAtMzI4LDcgKzI4OSw3IEBACiAJCQl2dmxfaW5mbzoxLAkvKiBWVkwgSW5mbyBpbmNsdWRlZCAqLwogCQkJcmVzZXJ2ZWQxOjE7CiAKLQl1OCAgICAgICAgIGhnX3N1cHA6MSwKKwl1OAkJaGdfc3VwcDoxLAogCQkJcXVlcnlfZGJjOjEsCiAJCQlzZWN1cml0eToxLAogCQkJc3luY19jYXA6MSwKQEAgLTMzNyw3ICsyOTgsNyBAQAogCQkJY2lzYzoxLAkJLyogY29udGludW91c2x5IGluY3JlYXNpbmcgc2VxIGNvdW50ICovCiAJCQlwYXlsb2FkOjE7CiAjZWxzZQotCXU4ICAgICAgICAgcmVzZXJ2ZWQyOjIsCisJdTgJCXJlc2VydmVkMjoyLAogCQkJcmVzb2x1dGlvbjoxLAkvKiBtcy9ucyBFRF9UT1YgcmVzb2x1dGlvbiAqLwogCQkJYWx0YmJjcmVkOjEsCS8qIGFsdGVybmF0ZSBCQl9DcmVkaXQgKi8KIAkJCXBvcnRfdHlwZToxLAkvKiBOX1BvcnQvRl9wb3J0ICovCkBAIC0zNDUsNyArMzA2LDcgQEAKIAkJCXJybzoxLAkJLyogcmFuZG9tIHJlbGF0aXZlIG9mZnNldCAqLwogCQkJY2lybzoxOwkJLyogY29udGludW91c2x5IGluY3JlYXNpbmcgUk8gKi8KIAotCXU4ICAgICAgICAgcGF5bG9hZDoxLAorCXU4CQlwYXlsb2FkOjEsCiAJCQljaXNjOjEsCQkvKiBjb250aW51b3VzbHkgaW5jcmVhc2luZyBzZXEgY291bnQgKi8KIAkJCWRoX2R1cF9zdXBwOjEsCiAJCQlyX3RfdG92OjEsCkBAIC0zNTQsMTMgKzMxNSwxMCBAQAogCQkJcXVlcnlfZGJjOjEsCiAJCQloZ19zdXBwOjE7CiAjZW5kaWYKLQotCXUxNiAgICAgICAgcnhzejsJCS8qIHJlY2lldmUgZGF0YV9maWVsZCBzaXplICovCi0KLQl1MTYgICAgICAgIGNvbnNlcTsKLQl1MTYgICAgICAgIHJvX2JpdG1hcDsKLQotCXUzMiAgICAgICAgZV9kX3RvdjsKKwlfX2JlMTYJCXJ4c3o7CQkvKiByZWNpZXZlIGRhdGFfZmllbGQgc2l6ZSAqLworCV9fYmUxNgkJY29uc2VxOworCV9fYmUxNgkJcm9fYml0bWFwOworCV9fYmUzMgkJZV9kX3RvdjsKIH07CiAKIC8qCkBAIC0zNjgsMTIgKzMyNiwxMSBAQAogICogRkMtUEgteC4gRmlndXJlIDc4LiBwZy4gMzE4LgogICovCiBzdHJ1Y3QgZmNfcGxvZ2lfY2xwX3MgewotI2lmZGVmIF9fQklHRU5ESUFOCisjaWZkZWYgX19CSUdfRU5ESUFOCiAJdTMyICAgICAgICBjbGFzc192YWxpZDoxOwogCXUzMiAgICAgICAgaW50ZXJtaXg6MTsJLyogY2xhc3MgaW50ZXJtaXggc3VwcG9ydGVkIGlmIHNldCA9MS4KLQkJCQkJICogdmFsaWQgb25seSBmb3IgY2xhc3MxLiBSZXNlcnZlZCBmb3IKLQkJCQkJICogY2xhc3MyICYgY2xhc3MzCi0JCQkJCSAqLworCQkJCSAqIHZhbGlkIG9ubHkgZm9yIGNsYXNzMS4gUmVzZXJ2ZWQgZm9yCisJCQkJICogY2xhc3MyICYgY2xhc3MzICovCiAJdTMyICAgICAgICByZXNlcnZlZDE6MjsKIAl1MzIgICAgICAgIHNlcXVlbnRpYWw6MTsKIAl1MzIgICAgICAgIHJlc2VydmVkMjozOwpAQCAtMzgyLDEyICszMzksMTAgQEAKIAl1MzIgICAgICAgIHNlcXVlbnRpYWw6MTsKIAl1MzIgICAgICAgIHJlc2VydmVkMToyOwogCXUzMiAgICAgICAgaW50ZXJtaXg6MTsJLyogY2xhc3MgaW50ZXJtaXggc3VwcG9ydGVkIGlmIHNldCA9MS4KLQkJCQkJICogdmFsaWQgb25seSBmb3IgY2xhc3MxLiBSZXNlcnZlZCBmb3IKLQkJCQkJICogY2xhc3MyICYgY2xhc3MzCi0JCQkJCSAqLworCQkJCSAqIHZhbGlkIG9ubHkgZm9yIGNsYXNzMS4gUmVzZXJ2ZWQgZm9yCisJCQkJICogY2xhc3MyICYgY2xhc3MzICovCiAJdTMyICAgICAgICBjbGFzc192YWxpZDoxOwogI2VuZGlmCi0KIAl1MzIgICAgICAgIHJlc2VydmVkMzoyNDsKIAogCXUzMiAgICAgICAgcmVzZXJ2ZWQ0OjE2OwpAQCAtMzk1LDcgKzM1MCw3IEBACiAKIAl1MzIgICAgICAgIHJlc2VydmVkNTo4OwogCXUzMiAgICAgICAgY29uc2VxOjg7Ci0JdTMyICAgICAgICBlMmVfY3JlZGl0OjE2OwkvKiBlbmQgdG8gZW5kIGNyZWRpdCAqLworCXUzMiAgICAgICAgZTJlX2NyZWRpdDoxNjsgLyogZW5kIHRvIGVuZCBjcmVkaXQgKi8KIAogCXUzMiAgICAgICAgcmVzZXJ2ZWQ3Ojg7CiAJdTMyICAgICAgICBvc3B4Ojg7CkBAIC00MDksMjQgKzM2NCwyNCBAQAogICogUExPR0kgZWxzIGNvbW1hbmQgYW5kIHJlcGx5IHBheWxvYWQKICAqLwogc3RydWN0IGZjX2xvZ2lfcyB7Ci0Jc3RydWN0IGZjX2Vsc19jbWRfcyBlbHNfY21kOwkvKiBFTFMgY29tbWFuZCBjb2RlICovCi0Jc3RydWN0IGZjX3Bsb2dpX2NzcF9zIGNzcDsJCS8qIGNvbW1vbiBzZXJ2aWNlIHBhcmFtcyAqLwotCXd3bl90ICAgICAgICAgICBwb3J0X25hbWU7Ci0Jd3duX3QgICAgICAgICAgIG5vZGVfbmFtZTsKLQlzdHJ1Y3QgZmNfcGxvZ2lfY2xwX3MgY2xhc3MxOwkJLyogY2xhc3MgMSBzZXJ2aWNlIHBhcmFtZXRlcnMgKi8KLQlzdHJ1Y3QgZmNfcGxvZ2lfY2xwX3MgY2xhc3MyOwkJLyogY2xhc3MgMiBzZXJ2aWNlIHBhcmFtZXRlcnMgKi8KLQlzdHJ1Y3QgZmNfcGxvZ2lfY2xwX3MgY2xhc3MzOwkJLyogY2xhc3MgMyBzZXJ2aWNlIHBhcmFtZXRlcnMgKi8KLQlzdHJ1Y3QgZmNfcGxvZ2lfY2xwX3MgY2xhc3M0OwkJLyogY2xhc3MgNCBzZXJ2aWNlIHBhcmFtZXRlcnMgKi8KLQl1OCAgICAgICAgIHZ2bFsxNl07CS8qIHZlbmRvciB2ZXJzaW9uIGxldmVsICovCisJc3RydWN0IGZjX2Vsc19jbWRfcwllbHNfY21kOwkvKiBFTFMgY29tbWFuZCBjb2RlICovCisJc3RydWN0IGZjX3Bsb2dpX2NzcF9zCWNzcDsJCS8qIGNvbW1vbiBzZXJ2aWNlIHBhcmFtcyAqLworCXd3bl90CQkJcG9ydF9uYW1lOworCXd3bl90CQkJbm9kZV9uYW1lOworCXN0cnVjdCBmY19wbG9naV9jbHBfcwljbGFzczE7CQkvKiBjbGFzcyAxIHNlcnZpY2UgcGFyYW1ldGVycyAqLworCXN0cnVjdCBmY19wbG9naV9jbHBfcwljbGFzczI7CQkvKiBjbGFzcyAyIHNlcnZpY2UgcGFyYW1ldGVycyAqLworCXN0cnVjdCBmY19wbG9naV9jbHBfcwljbGFzczM7CQkvKiBjbGFzcyAzIHNlcnZpY2UgcGFyYW1ldGVycyAqLworCXN0cnVjdCBmY19wbG9naV9jbHBfcwljbGFzczQ7CQkvKiBjbGFzcyA0IHNlcnZpY2UgcGFyYW1ldGVycyAqLworCXU4CQkJdnZsWzE2XTsJLyogdmVuZG9yIHZlcnNpb24gbGV2ZWwgKi8KIH07CiAKIC8qCiAgKiBMT0dPIGVscyBjb21tYW5kIHBheWxvYWQKICAqLwogc3RydWN0IGZjX2xvZ29fcyB7Ci0Jc3RydWN0IGZjX2Vsc19jbWRfcyBlbHNfY21kOwkvKiBFTFMgY29tbWFuZCBjb2RlICovCi0JdTMyICAgICAgICByZXMxOjg7Ci0JdTMyICAgICAgICBucG9ydF9pZDoyNDsJLyogTl9Qb3J0IGlkZW50aWZpZXIgb2Ygc291cmNlICovCisJc3RydWN0IGZjX2Vsc19jbWRfcwllbHNfY21kOwkvKiBFTFMgY29tbWFuZCBjb2RlICovCisJdTMyCQkJcmVzMTo4OworCXUzMgkJbnBvcnRfaWQ6MjQ7CS8qIE5fUG9ydCBpZGVudGlmaWVyIG9mIHNvdXJjZSAqLwogCXd3bl90ICAgICAgICAgICBvcmlnX3BvcnRfbmFtZTsJLyogUG9ydCBuYW1lIG9mIHRoZSBMT0dPIG9yaWdpbmF0b3IgKi8KIH07CiAKQEAgLTQzNSwxMiArMzkwLDEyIEBACiAgKi8KIHN0cnVjdCBmY19hZGlzY19zIHsKIAlzdHJ1Y3QgZmNfZWxzX2NtZF9zIGVsc19jbWQ7CS8qIEVMUyBjb21tYW5kIGNvZGUgKi8KLQl1MzIgICAgICAgIHJlczE6ODsKLQl1MzIgICAgICAgIG9yaWdfSEE6MjQ7CS8qIG9yaWdpbmF0b3IgaGFyZCBhZGRyZXNzICovCi0Jd3duX3QgICAgICAgICAgIG9yaWdfcG9ydF9uYW1lOwkvKiBvcmlnaW5hdG9yIHBvcnQgbmFtZSAqLwotCXd3bl90ICAgICAgICAgICBvcmlnX25vZGVfbmFtZTsJLyogb3JpZ2luYXRvciBub2RlIG5hbWUgKi8KLQl1MzIgICAgICAgIHJlczI6ODsKLQl1MzIgICAgICAgIG5wb3J0X2lkOjI0OwkvKiBvcmlnaW5hdG9yIE5Qb3J0SUQgKi8KKwl1MzIJCXJlczE6ODsKKwl1MzIJCW9yaWdfSEE6MjQ7CS8qIG9yaWdpbmF0b3IgaGFyZCBhZGRyZXNzICovCisJd3duX3QJCW9yaWdfcG9ydF9uYW1lOwkvKiBvcmlnaW5hdG9yIHBvcnQgbmFtZSAqLworCXd3bl90CQlvcmlnX25vZGVfbmFtZTsJLyogb3JpZ2luYXRvciBub2RlIG5hbWUgKi8KKwl1MzIJCXJlczI6ODsKKwl1MzIJCW5wb3J0X2lkOjI0OwkvKiBvcmlnaW5hdG9yIE5Qb3J0SUQgKi8KIH07CiAKIC8qCkBAIC00NjYsNyArNDIxLDcgQEAKIHN0cnVjdCBmY19yZXNfcyB7CiAJc3RydWN0IGZjX2Vsc19jbWRfcyBlbHNfY21kOwkvKiBFTFMgY29tbWFuZCBjb2RlICovCiAJdTMyICAgICAgICByZXMxOjg7Ci0JdTMyICAgICAgICBucG9ydF9pZDoyNDsJLyogTl9Qb3J0IGlkZW50aWZpZXIgb2Ygc291cmNlICovCisJdTMyICAgICAgICBucG9ydF9pZDoyNDsJCS8qIE5fUG9ydCBpZGVudGlmaWVyIG9mIHNvdXJjZSAqLwogCXUzMiAgICAgICAgb3hpZDoxNjsKIAl1MzIgICAgICAgIHJ4aWQ6MTY7CiAJdTggICAgICAgICBhc3NvY19oZHJbMzJdOwpAQCAtNTEyLDggKzQ2Nyw4IEBACiAJdTMyICAgICAgICBvcmlnX2lkOjI0OwkvKiBOX1BvcnQgaWQgb2YgZXhjaGFuZ2Ugb3JpZ2luYXRvciAqLwogCXUzMiAgICAgICAgcmVzMjo4OwogCXUzMiAgICAgICAgcmVzcF9pZDoyNDsJLyogTl9Qb3J0IGlkIG9mIGV4Y2hhbmdlIHJlc3BvbmRlciAqLwotCXUzMiAgICAgICAgY291bnQ7CQkvKiBkYXRhIHRyYW5zZmVyIGNvdW50ICovCi0JdTMyICAgICAgICBlX3N0YXQ7CQkvKiBleGNoYW5nZSBzdGF0dXMgKi8KKwl1MzIgICAgICAgIGNvdW50OwkvKiBkYXRhIHRyYW5zZmVyIGNvdW50ICovCisJdTMyICAgICAgICBlX3N0YXQ7CS8qIGV4Y2hhbmdlIHN0YXR1cyAqLwogfTsKIAogLyoKQEAgLTUzMyw3ICs0ODgsNyBAQAogICovCiBzdHJ1Y3QgZmNfcHJsaV9wYXJhbXNfcyB7CiAJdTMyICAgICAgICByZXNlcnZlZDoxNjsKLSNpZmRlZiBfX0JJR0VORElBTgorI2lmZGVmIF9fQklHX0VORElBTgogCXUzMiAgICAgICAgcmVzZXJ2ZWQxOjU7CiAJdTMyICAgICAgICByZWNfc3VwcG9ydDoxOwogCXUzMiAgICAgICAgdGFza19yZXRyeV9pZDoxOwpAQCAtNTc1LDcgKzUzMCw3IEBACiBzdHJ1Y3QgZmNfcHJsaV9wYXJhbXNfcGFnZV9zIHsKIAl1MzIgICAgICAgIHR5cGU6ODsKIAl1MzIgICAgICAgIGNvZGV4dDo4OwotI2lmZGVmIF9fQklHRU5ESUFOCisjaWZkZWYgX19CSUdfRU5ESUFOCiAJdTMyICAgICAgICBvcmlncHJvY2FzdjoxOwogCXUzMiAgICAgICAgcnNwcGF2OjE7CiAJdTMyICAgICAgICBpbWFnZXBhaXI6MTsKQEAgLTYxMSwxOCArNTY2LDE0IEBACiBzdHJ1Y3QgZmNfcHJsb19wYXJhbXNfcGFnZV9zIHsKIAl1MzIgICAgICAgIHR5cGU6ODsKIAl1MzIgICAgICAgIHR5cGVfZXh0Ojg7Ci0jaWZkZWYgX19CSUdFTkRJQU4KLQl1MzIgICAgICAgIG9wYV92YWxpZDoxOwkvKiBvcmlnaW5hdG9yIHByb2Nlc3MgYXNzb2NpYXRvcgotCQkJCQkgKiB2YWxpZAotCQkJCQkgKi8KKyNpZmRlZiBfX0JJR19FTkRJQU4KKwl1MzIgICAgICAgIG9wYV92YWxpZDoxOwkvKiBvcmlnaW5hdG9yIHByb2Nlc3MgYXNzb2NpYXRvciB2YWxpZCAqLwogCXUzMiAgICAgICAgcnBhX3ZhbGlkOjE7CS8qIHJlc3BvbmRlciBwcm9jZXNzIGFzc29jaWF0b3IgdmFsaWQgKi8KIAl1MzIgICAgICAgIHJlczE6MTQ7CiAjZWxzZQogCXUzMiAgICAgICAgcmVzMToxNDsKIAl1MzIgICAgICAgIHJwYV92YWxpZDoxOwkvKiByZXNwb25kZXIgcHJvY2VzcyBhc3NvY2lhdG9yIHZhbGlkICovCi0JdTMyICAgICAgICBvcGFfdmFsaWQ6MTsJLyogb3JpZ2luYXRvciBwcm9jZXNzIGFzc29jaWF0b3IKLQkJCQkJICogdmFsaWQKLQkJCQkJICovCisJdTMyICAgICAgICBvcGFfdmFsaWQ6MTsJLyogb3JpZ2luYXRvciBwcm9jZXNzIGFzc29jaWF0b3IgdmFsaWQgKi8KICNlbmRpZgogCXUzMiAgICAgICAgb3JpZ19wcm9jZXNzX2Fzc2M7CiAJdTMyICAgICAgICByZXNwX3Byb2Nlc3NfYXNzYzsKQEAgLTY0NywxOCArNTk4LDE0IEBACiAJdTMyICAgICAgICB0eXBlOjg7CiAJdTMyICAgICAgICB0eXBlX2V4dDo4OwogCi0jaWZkZWYgX19CSUdFTkRJQU4KLQl1MzIgICAgICAgIG9wYV92YWxpZDoxOwkvKiBvcmlnaW5hdG9yIHByb2Nlc3MgYXNzb2NpYXRvcgotCQkJCQkgKiB2YWxpZAotCQkJCQkgKi8KKyNpZmRlZiBfX0JJR19FTkRJQU4KKwl1MzIgICAgICAgIG9wYV92YWxpZDoxOwkvKiBvcmlnaW5hdG9yIHByb2Nlc3MgYXNzb2NpYXRvciB2YWxpZCAqLwogCXUzMiAgICAgICAgcnBhX3ZhbGlkOjE7CS8qIHJlc3BvbmRlciBwcm9jZXNzIGFzc29jaWF0b3IgdmFsaWQgKi8KIAl1MzIgICAgICAgIHJlczE6MTQ7CiAjZWxzZQogCXUzMiAgICAgICAgcmVzMToxNDsKIAl1MzIgICAgICAgIHJwYV92YWxpZDoxOwkvKiByZXNwb25kZXIgcHJvY2VzcyBhc3NvY2lhdG9yIHZhbGlkICovCi0JdTMyICAgICAgICBvcGFfdmFsaWQ6MTsJLyogb3JpZ2luYXRvciBwcm9jZXNzIGFzc29jaWF0b3IKLQkJCQkJICogdmFsaWQKLQkJCQkJICovCisJdTMyICAgICAgICBvcGFfdmFsaWQ6MTsJLyogb3JpZ2luYXRvciBwcm9jZXNzIGFzc29jaWF0b3IgdmFsaWQgKi8KICNlbmRpZgogCXUzMiAgICAgICAgb3JpZ19wcm9jZXNzX2Fzc2M7CiAJdTMyICAgICAgICByZXNwX3Byb2Nlc3NfYXNzYzsKQEAgLTcxNSw5ICs2NjIsOSBAQAogICogTFNfUkpUIGVscyByZXBseSBwYXlsb2FkCiAgKi8KIHN0cnVjdCBmY19sc19yanRfcyB7Ci0Jc3RydWN0IGZjX2Vsc19jbWRfcyBlbHNfY21kOwkJLyogRUxTIGNvbW1hbmQgY29kZSAqLworCXN0cnVjdCBmY19lbHNfY21kX3MgZWxzX2NtZDsJLyogRUxTIGNvbW1hbmQgY29kZSAqLwogCXUzMiAgICAgICAgcmVzMTo4OwotCXUzMiAgICAgICAgcmVhc29uX2NvZGU6ODsJCS8qIFJlYXNvbiBjb2RlIGZvciByZWplY3QgKi8KKwl1MzIgICAgICAgIHJlYXNvbl9jb2RlOjg7CS8qIFJlYXNvbiBjb2RlIGZvciByZWplY3QgKi8KIAl1MzIgICAgICAgIHJlYXNvbl9jb2RlX2V4cGw6ODsJLyogUmVhc29uIGNvZGUgZXhwbGFuYXRpb24gKi8KIAl1MzIgICAgICAgIHZlbmRvcl91bmlxdWU6ODsJLyogVmVuZG9yIHNwZWNpZmljICovCiB9OwpAQCAtNzc5LDEyICs3MjYsMTIgQEAKICAqLwogc3RydWN0IGZjX2JhX2FjY19zIHsKIAl1MzIgICAgICAgIHNlcV9pZF92YWxpZDo4OwkvKiBzZXQgdG8gMHgwMCBmb3IgQWJvcnQgRXhjaGFuZ2UgKi8KLQl1MzIgICAgICAgIHNlcV9pZDo4OwkvKiBpbnZhbGlkIGZvciBBYm9ydCBFeGNoYW5nZSAqLworCXUzMiAgICAgICAgc2VxX2lkOjg7CQkvKiBpbnZhbGlkIGZvciBBYm9ydCBFeGNoYW5nZSAqLwogCXUzMiAgICAgICAgcmVzMjoxNjsKLQl1MzIgICAgICAgIG94X2lkOjE2OwkvKiBPWF9JRCBmcm9tIEFCVFMgZnJhbWUgKi8KLQl1MzIgICAgICAgIHJ4X2lkOjE2OwkvKiBSWF9JRCBmcm9tIEFCVFMgZnJhbWUgKi8KKwl1MzIgICAgICAgIG94X2lkOjE2OwkJLyogT1hfSUQgZnJvbSBBQlRTIGZyYW1lICovCisJdTMyICAgICAgICByeF9pZDoxNjsJCS8qIFJYX0lEIGZyb20gQUJUUyBmcmFtZSAqLwogCXUzMiAgICAgICAgbG93X3NlcV9jbnQ6MTY7CS8qIHNldCB0byAweDAwMDAgZm9yIEFib3J0IEV4Y2hhbmdlICovCi0JdTMyICAgICAgICBoaWdoX3NlcV9jbnQ6MTY7Lyogc2V0IHRvIDB4RkZGRiBmb3IgQWJvcnQgRXhjaGFuZ2UgKi8KKwl1MzIgICAgICAgIGhpZ2hfc2VxX2NudDoxNjsJLyogc2V0IHRvIDB4RkZGRiBmb3IgQWJvcnQgRXhjaGFuZ2UgKi8KIH07CiAKIC8qCkBAIC03OTQsMTcgKzc0MSwxNyBAQAogCXUzMiAgICAgICAgcmVzMTo4OwkJLyogUmVzZXJ2ZWQgKi8KIAl1MzIgICAgICAgIHJlYXNvbl9jb2RlOjg7CS8qIHJlYXNvbiBjb2RlIGZvciByZWplY3QgKi8KIAl1MzIgICAgICAgIHJlYXNvbl9leHBsOjg7CS8qIHJlYXNvbiBjb2RlIGV4cGxhbmF0aW9uICovCi0JdTMyICAgICAgICB2ZW5kb3JfdW5pcXVlOjg7LyogdmVuZG9yIHVuaXF1ZSByZWFzb24gY29kZSxzZXQgdG8gMCAqLworCXUzMiAgICAgICAgdmVuZG9yX3VuaXF1ZTo4OyAvKiB2ZW5kb3IgdW5pcXVlIHJlYXNvbiBjb2RlLHNldCB0byAwICovCiB9OwogCiAvKgogICogVFBSTE8gbG9nb3V0IHBhcmFtZXRlciBwYWdlCiAgKi8KIHN0cnVjdCBmY190cHJsb19wYXJhbXNfcGFnZV9zIHsKLXUzMiAgICAgICAgdHlwZTo4OwotdTMyICAgICAgICB0eXBlX2V4dDo4OworCXUzMiAgICAgICAgdHlwZTo4OworCXUzMiAgICAgICAgdHlwZV9leHQ6ODsKIAotI2lmZGVmIF9fQklHRU5ESUFOCisjaWZkZWYgX19CSUdfRU5ESUFOCiAJdTMyICAgICAgICBvcGFfdmFsaWQ6MTsKIAl1MzIgICAgICAgIHJwYV92YWxpZDoxOwogCXUzMiAgICAgICAgdHBvX25wb3J0X3ZhbGlkOjE7CkBAIC04NjQsMTYgKzgxMSwxNiBAQAogfTsKIAogc3RydWN0IGZjX3JzY25fZXZlbnRfcyB7Ci0JdTMyICAgICAgICBmb3JtYXQ6MjsKLQl1MzIgICAgICAgIHF1YWxpZmllcjo0OwotCXUzMiAgICAgICAgcmVzdmQ6MjsKLQl1MzIgICAgICAgIHBvcnRpZDoyNDsKKwl1MzIJZm9ybWF0OjI7CisJdTMyCXF1YWxpZmllcjo0OworCXUzMglyZXN2ZDoyOworCXUzMglwb3J0aWQ6MjQ7CiB9OwogCiBzdHJ1Y3QgZmNfcnNjbl9wbF9zIHsKLQl1OCAgICAgICAgIGNvbW1hbmQ7Ci0JdTggICAgICAgICBwYWdlbGVuOwotCXUxNiAgICAgICAgcGF5bGRsZW47CisJdTgJY29tbWFuZDsKKwl1OAlwYWdlbGVuOworCV9fYmUxNglwYXlsZGxlbjsKIAlzdHJ1Y3QgZmNfcnNjbl9ldmVudF9zIGV2ZW50WzFdOwogfTsKIApAQCAtODg3LDcgKzgzNCw2IEBACiAvKgogICogUk5JRCBlbHMgY29tbWFuZAogICovCi0KICNkZWZpbmUgUk5JRF9OT0RFSURfREFUQV9GT1JNQVRfQ09NTU9OCQkJMHgwMAogI2RlZmluZSBSTklEX05PREVJRF9EQVRBX0ZPUk1BVF9GQ1AzCQkJMHgwOAogI2RlZmluZSBSTklEX05PREVJRF9EQVRBX0ZPUk1BVF9ESVNDT1ZFUlkJCTB4REYKQEAgLTkyMCwxNSArODY2LDE1IEBACiAgKi8KIAogc3RydWN0IGZjX3JuaWRfY29tbW9uX2lkX2RhdGFfcyB7Ci0Jd3duX3QgICAgICAgICAgIHBvcnRfbmFtZTsKKwl3d25fdAkJcG9ydF9uYW1lOwogCXd3bl90ICAgICAgICAgICBub2RlX25hbWU7CiB9OwogCiBzdHJ1Y3QgZmNfcm5pZF9nZW5lcmFsX3RvcG9sb2d5X2RhdGFfcyB7CiAJdTMyICAgICAgICB2ZW5kb3JfdW5pcXVlWzRdOwotCXUzMiAgICAgICAgYXNzb190eXBlOworCV9fYmUzMiAgICAgYXNzb190eXBlOwogCXUzMiAgICAgICAgcGh5X3BvcnRfbnVtOwotCXUzMiAgICAgICAgbnVtX2F0dGFjaGVkX25vZGVzOworCV9fYmUzMiAgICAgbnVtX2F0dGFjaGVkX25vZGVzOwogCXUzMiAgICAgICAgbm9kZV9tZ210Ojg7CiAJdTMyICAgICAgICBpcF92ZXJzaW9uOjg7CiAJdTMyICAgICAgICB1ZHBfdGNwX3BvcnRfbnVtOjE2OwpAQCAtOTgwLDU5ICs5MjYsMTcgQEAKIAlSUFNDX09QX1NQRUVEXzhHID0gMHgwODAwLAogCVJQU0NfT1BfU1BFRURfMTZHID0gMHgwNDAwLAogCi0JUlBTQ19PUF9TUEVFRF9OT1RfRVNUID0gMHgwMDAxLAkvKiEgc3BlZWQgbm90IGVzdGFibGlzaGVkICovCisJUlBTQ19PUF9TUEVFRF9OT1RfRVNUID0gMHgwMDAxLAkvKiBzcGVlZCBub3QgZXN0YWJsaXNoZWQgKi8KIH07CiAKIHN0cnVjdCBmY19ycHNjX3NwZWVkX2luZm9fcyB7Ci0JdTE2ICAgICAgICBwb3J0X3NwZWVkX2NhcDsJLyohIHNlZSBlbnVtIGZjX3Jwc2Nfc3BlZWRfY2FwICovCi0JdTE2ICAgICAgICBwb3J0X29wX3NwZWVkOwkvKiEgc2VlIGVudW0gZmNfcnBzY19vcF9zcGVlZCAqLwotfTsKLQotZW51bSBsaW5rX2UyZV9iZWFjb25fc3ViY21kIHsKLQlMSU5LX0UyRV9CRUFDT05fT04gPSAxLAotCUxJTktfRTJFX0JFQUNPTl9PRkYgPSAyCi19OwotCi1lbnVtIGJlYWNvbl90eXBlIHsKLQlCRUFDT05fVFlQRV9OT1JNQUwJPSAxLAkvKiEgTm9ybWFsIEJlYWNvbmluZy4gR3JlZW4gKi8KLQlCRUFDT05fVFlQRV9XQVJOCT0gMiwJLyohIFdhcm5pbmcgQmVhY29uaW5nLiBZZWxsb3cvQW1iZXIgKi8KLQlCRUFDT05fVFlQRV9DUklUSUNBTAk9IDMJLyohIENyaXRpY2FsIEJlYWNvbmluZy4gUmVkICovCi19OwotCi1zdHJ1Y3QgbGlua19lMmVfYmVhY29uX3BhcmFtX3MgewotCXU4ICAgICAgICAgYmVhY29uX3R5cGU7CS8qIEJlYWNvbiBUeXBlLiBTZWUgZW51bSBiZWFjb25fdHlwZSAqLwotCXU4ICAgICAgICAgYmVhY29uX2ZyZXF1ZW5jeTsKLQkJCQkJLyogQmVhY29uIGZyZXF1ZW5jeS4gTnVtYmVyIG9mIGJsaW5rcwotCQkJCQkgKiBwZXIgMTAgc2Vjb25kcwotCQkJCQkgKi8KLQl1MTYgICAgICAgIGJlYWNvbl9kdXJhdGlvbjsvKiBCZWFjb24gZHVyYXRpb24gKGluIFNlY29uZHMpLiBUaGUKLQkJCQkJICogY29tbWFuZCBvcGVyYXRpb24gc2hvdWxkIGJlCi0JCQkJCSAqIHRlcm1pbmF0ZWQgYXQgdGhlIGVuZCBvZiB0aGlzCi0JCQkJCSAqIHRpbWVvdXQgdmFsdWUuCi0JCQkJCSAqCi0JCQkJCSAqIElnbm9yZWQgaWYgZGlhZ19zdWJfY21kIGlzCi0JCQkJCSAqIExJTktfRTJFX0JFQUNPTl9PRkYuCi0JCQkJCSAqCi0JCQkJCSAqIElmIDAsIGJlYWNvbmluZyB3aWxsIGNvbnRpbnVlIHRpbGwgYQotCQkJCQkgKiBCRUFDT04gT0ZGIHJlcXVlc3QgaXMgcmVjZWl2ZWQKLQkJCQkJICovCi19OwotCi0vKgotICogTGluayBFMkUgYmVhY29uIHJlcXVlc3QvZ29vZCByZXNwb25zZSBmb3JtYXQuCi0gKiBGb3IgTFNfUkpUcyB1c2Ugc3RydWN0IGZjX2xzX3JqdF9zCi0gKi8KLXN0cnVjdCBsaW5rX2UyZV9iZWFjb25fcmVxX3MgewotCXUzMiAgICAgICAgbHNfY29kZTsJLyohIEZDX0VMU19FMkVfTEJFQUNPTiBpbiByZXF1ZXN0cyAqCi0JCQkJCSAqb3IgRkNfRUxTX0FDQyBpbiBnb29kIHJlcGxpZXMgKi8KLQl1MzIgICAgICAgIGxzX3N1Yl9jbWQ7CS8qISBTZWUgZW51bSBsaW5rX2UyZV9iZWFjb25fc3ViY21kICovCi0Jc3RydWN0IGxpbmtfZTJlX2JlYWNvbl9wYXJhbV9zIGJlYWNvbl9wYXJtOworCV9fYmUxNiAgICAgICAgcG9ydF9zcGVlZF9jYXA7CS8qIHNlZSBlbnVtIGZjX3Jwc2Nfc3BlZWRfY2FwICovCisJX19iZTE2ICAgICAgICBwb3J0X29wX3NwZWVkOwkvKiBzZWUgZW51bSBmY19ycHNjX29wX3NwZWVkICovCiB9OwogCiAvKgogICogSWYgUlBTQyByZXF1ZXN0IGlzIHNlbnQgdG8gdGhlIERvbWFpbiBDb250cm9sbGVyLCB0aGUgcmVxdWVzdCBpcyBmb3IKLSAqIGFsbCB0aGUgcG9ydHMgd2l0aGluIHRoYXQgZG9tYWluIChUT0RPIC0gSSBkb24ndCB0aGluayBGT1MgaW1wbGVtZW50cwotICogdGhpcy4uLikuCisgKiBhbGwgdGhlIHBvcnRzIHdpdGhpbiB0aGF0IGRvbWFpbi4KICAqLwogc3RydWN0IGZjX3Jwc2NfY21kX3MgewogCXN0cnVjdCBmY19lbHNfY21kX3MgZWxzX2NtZDsKQEAgLTEwNTYsOSArOTYwLDkgQEAKIAogc3RydWN0IGZjX3Jwc2MyX2NtZF9zIHsKIAlzdHJ1Y3QgZmNfZWxzX2NtZF9zIGVsc19jbWQ7Ci0JdTMyCXRva2VuOworCV9fYmUzMgl0b2tlbjsKIAl1MTYJcmVzdmQ7Ci0JdTE2CW51bV9waWRzOwkvKiBOdW1iZXIgb2YgcGlkcyBpbiB0aGUgcmVxdWVzdCAqLworCV9fYmUxNgludW1fcGlkczsJCS8qIE51bWJlciBvZiBwaWRzIGluIHRoZSByZXF1ZXN0ICovCiAJc3RydWN0ICB7CiAJCXUzMglyc3ZkMTo4OwogCQl1MzIJcGlkOjI0OwkJLyogcG9ydCBpZGVudGlmaWVyICovCkBAIC0xMDcyLDE2ICs5NzYsMTcgQEAKIAlSUFNDMl9QT1JUX1RZUEVfTlBJVl9QT1JUICA9IDB4NWYsCiAJUlBTQzJfUE9SVF9UWVBFX05QT1JUX1RSVU5LICA9IDB4NmYsCiB9OworCiAvKgogICogUlBTQzIgcG9ydEluZm8gZW50cnkgc3RydWN0dXJlCiAgKi8KIHN0cnVjdCBmY19ycHNjMl9wb3J0X2luZm9fcyB7Ci0gICAgdTMyICAgIHBpZDsgICAgICAgIC8qIFBJRCAqLwotICAgIHUxNiAgICByZXN2ZDE7Ci0gICAgdTE2ICAgIGluZGV4OyAgICAgIC8qIHBvcnQgbnVtYmVyIC8gaW5kZXggKi8KLSAgICB1OCAgICAgcmVzdmQyOwotICAgIHU4CSAgIHR5cGU7CS8qIHBvcnQgdHlwZSBOL05MLy4uLiAqLwotICAgIHUxNiAgICBzcGVlZDsgICAgICAvKiBwb3J0IE9wZXJhdGluZyBTcGVlZCAqLworCV9fYmUzMglwaWQ7CQkvKiBQSUQgKi8KKwl1MTYJcmVzdmQxOworCV9fYmUxNglpbmRleDsJCS8qIHBvcnQgbnVtYmVyIC8gaW5kZXggKi8KKwl1OAlyZXN2ZDI7CisJdTgJdHlwZTsJCS8qIHBvcnQgdHlwZSBOL05MLy4uLiAqLworCV9fYmUxNglzcGVlZDsJCS8qIHBvcnQgT3BlcmF0aW5nIFNwZWVkICovCiB9OwogCiAvKgpAQCAtMTA5MCw4ICs5OTUsOCBAQAogc3RydWN0IGZjX3Jwc2MyX2FjY19zIHsKIAl1OCAgICAgICAgZWxzX2NtZDsKIAl1OCAgICAgICAgcmVzdmQ7Ci0gICAgdTE2ICAgICAgIG51bV9waWRzOyAgLyogTnVtYmVyIG9mIHBpZHMgaW4gdGhlIHJlcXVlc3QgKi8KLSAgICBzdHJ1Y3QgZmNfcnBzYzJfcG9ydF9pbmZvX3MgcG9ydF9pbmZvWzFdOyAgICAvKiBwb3J0IGluZm9ybWF0aW9uICovCisJX19iZTE2ICAgIG51bV9waWRzOyAvKiBOdW1iZXIgb2YgcGlkcyBpbiB0aGUgcmVxdWVzdCAqLworCXN0cnVjdCBmY19ycHNjMl9wb3J0X2luZm9fcyBwb3J0X2luZm9bMV07IC8qIHBvcnQgaW5mb3JtYXRpb24gKi8KIH07CiAKIC8qCkBAIC0xMTEwLDE4ICsxMDE1LDE0IEBACiAJdTggICAgICAgICBzeW1uYW1lW0ZDX1NZTU5BTUVfTUFYXTsKIH07CiAKLXN0cnVjdCBmY19hbHBhYm1fcyB7Ci0JdTggICAgICAgICBhbHBhX2JtW0ZDX0FMUEFfTUFYIC8gOF07Ci19OwotCiAvKgogICogcHJvdG9jb2wgZGVmYXVsdCB0aW1lb3V0IHZhbHVlcwogICovCi0jZGVmaW5lIEZDX0VEX1RPVgkJMgotI2RlZmluZSBGQ19SRUNfVE9WCQkoRkNfRURfVE9WICsgMSkKLSNkZWZpbmUgRkNfUkFfVE9WCQkxMAotI2RlZmluZSBGQ19FTFNfVE9WCQkoMiAqIEZDX1JBX1RPVikKLSNkZWZpbmUgRkNfRkNDVF9UT1YJCSgzICogRkNfUkFfVE9WKQorI2RlZmluZSBGQ19FRF9UT1YJMgorI2RlZmluZSBGQ19SRUNfVE9WCShGQ19FRF9UT1YgKyAxKQorI2RlZmluZSBGQ19SQV9UT1YJMTAKKyNkZWZpbmUgRkNfRUxTX1RPVgkoMiAqIEZDX1JBX1RPVikKKyNkZWZpbmUgRkNfRkNDVF9UT1YJKDMgKiBGQ19SQV9UT1YpCiAKIC8qCiAgKiB2aXJ0dWFsIGZhYnJpYyByZWxhdGVkIGRlZmluZXMKQEAgLTExNTcsNTAgKzEwNTgsMzQgQEAKIH07CiAKIC8qCi0gKiBTUlIgRkMtNCBMUyBwYXlsb2FkCi0gKi8KLXN0cnVjdCBmY19zcnJfcyB7Ci0JdTMyCWxzX2NtZDsKLQl1MzIgICAgICAgIG94X2lkOjE2OwkvKiBveC1pZCAqLwotCXUzMiAgICAgICAgcnhfaWQ6MTY7CS8qIHJ4LWlkICovCi0JdTMyICAgICAgICBybzsJCS8qIHJlbGF0aXZlIG9mZnNldCAqLwotCXUzMiAgICAgICAgcl9jdGw6ODsJCS8qIFJfQ1RMIGZvciBJLlUuICovCi0JdTMyICAgICAgICByZXM6MjQ7Ci19OwotCi0KLS8qCiAgKiBGQ1BfQ01ORCBkZWZpbml0aW9ucwogICovCiAjZGVmaW5lIEZDUF9DTU5EX0NEQl9MRU4gICAgMTYKICNkZWZpbmUgRkNQX0NNTkRfTFVOX0xFTiAgICA4CiAKIHN0cnVjdCBmY3BfY21uZF9zIHsKLQlsdW5fdCAgICAgICAgICAgbHVuOwkJLyogNjQtYml0IExVIG51bWJlciAqLwotCXU4ICAgICAgICAgY3JuOwkJLyogY29tbWFuZCByZWZlcmVuY2UgbnVtYmVyICovCi0jaWZkZWYgX19CSUdFTkRJQU4KLQl1OCAgICAgICAgIHJlc3ZkOjEsCisJc3RydWN0IHNjc2lfbHVuCWx1bjsJCS8qIDY0LWJpdCBMVSBudW1iZXIgKi8KKwl1OAkJY3JuOwkJLyogY29tbWFuZCByZWZlcmVuY2UgbnVtYmVyICovCisjaWZkZWYgX19CSUdfRU5ESUFOCisJdTgJCXJlc3ZkOjEsCiAJCQlwcmlvcml0eTo0LAkvKiBGQ1AtMzogU0FNLTMgcHJpb3JpdHkgKi8KIAkJCXRhc2thdHRyOjM7CS8qIHNjc2kgdGFzayBhdHRyaWJ1dGUgKi8KICNlbHNlCi0JdTggICAgICAgICB0YXNrYXR0cjozLAkvKiBzY3NpIHRhc2sgYXR0cmlidXRlICovCisJdTgJCXRhc2thdHRyOjMsCS8qIHNjc2kgdGFzayBhdHRyaWJ1dGUgKi8KIAkJCXByaW9yaXR5OjQsCS8qIEZDUC0zOiBTQU0tMyBwcmlvcml0eSAqLwogCQkJcmVzdmQ6MTsKICNlbmRpZgotCXU4ICAgICAgICAgdG1fZmxhZ3M7CS8qIHRhc2sgbWFuYWdlbWVudCBmbGFncyAqLwotI2lmZGVmIF9fQklHRU5ESUFOCi0JdTggICAgICAgICBhZGRsX2NkYl9sZW46NiwJLyogYWRkaXRpb25hbCBDREIgbGVuZ3RoIHdvcmRzICovCisJdTgJCXRtX2ZsYWdzOwkvKiB0YXNrIG1hbmFnZW1lbnQgZmxhZ3MgKi8KKyNpZmRlZiBfX0JJR19FTkRJQU4KKwl1OAkJYWRkbF9jZGJfbGVuOjYsCS8qIGFkZGl0aW9uYWwgQ0RCIGxlbmd0aCB3b3JkcyAqLwogCQkJaW9kaXI6MjsJLyogcmVhZC93cml0ZSBGQ1BfREFUQSBJVXMgKi8KICNlbHNlCi0JdTggICAgICAgICBpb2RpcjoyLAkvKiByZWFkL3dyaXRlIEZDUF9EQVRBIElVcyAqLworCXU4CQlpb2RpcjoyLAkvKiByZWFkL3dyaXRlIEZDUF9EQVRBIElVcyAqLwogCQkJYWRkbF9jZGJfbGVuOjY7CS8qIGFkZGl0aW9uYWwgQ0RCIGxlbmd0aCAqLwogI2VuZGlmCi0Jc2NzaV9jZGJfdCAgICAgIGNkYjsKKwlzdHJ1Y3Qgc2NzaV9jZGJfcyAgICAgIGNkYjsKIAotCS8qCi0JICogISEhIGFkZGl0aW9uYWwgY2RiIGJ5dGVzIGZvbGxvd3MgaGVyZSEhIQotCSAqLwotCXUzMiAgICAgICAgZmNwX2RsOwkvKiBieXRlcyB0byBiZSB0cmFuc2ZlcnJlZCAqLworCV9fYmUzMiAgICAgICAgZmNwX2RsOwkvKiBieXRlcyB0byBiZSB0cmFuc2ZlcnJlZCAqLwogfTsKIAogI2RlZmluZSBmY3BfY21uZF9jZGJfbGVuKF9jbW5kKSAoKF9jbW5kKS0+YWRkbF9jZGJfbGVuICogNCArIEZDUF9DTU5EX0NEQl9MRU4pCkBAIC0xMjEwLDIxICsxMDk1LDEwIEBACiAgKiBzdHJ1Y3QgZmNwX2NtbmRfcyAuaW9kaXIgZmllbGQgdmFsdWVzCiAgKi8KIGVudW0gZmNwX2lvZGlyIHsKLQlGQ1BfSU9ESVJfTk9ORQk9IDAsCisJRkNQX0lPRElSX05PTkUgID0gMCwKIAlGQ1BfSU9ESVJfV1JJVEUgPSAxLAotCUZDUF9JT0RJUl9SRUFECT0gMiwKLQlGQ1BfSU9ESVJfUlcJPSAzLAotfTsKLQotLyoKLSAqIFRhc2sgYXR0cmlidXRlIGZpZWxkCi0gKi8KLWVudW0gewotCUZDUF9UQVNLX0FUVFJfU0lNUExFCT0gMCwKLQlGQ1BfVEFTS19BVFRSX0hPUQk9IDEsCi0JRkNQX1RBU0tfQVRUUl9PUkRFUkVECT0gMiwKLQlGQ1BfVEFTS19BVFRSX0FDQQk9IDQsCi0JRkNQX1RBU0tfQVRUUl9VTlRBR0dFRAk9IDUsCS8qIG9ic29sZXRlIGluIEZDUC0zICovCisJRkNQX0lPRElSX1JFQUQgID0gMiwKKwlGQ1BfSU9ESVJfUlcgICAgPSAzLAogfTsKIAogLyoKQEAgLTEyMzksNTggKzExMTMsNDAgQEAKIH07CiAKIC8qCi0gKiBGQ1BfWEZFUl9SRFkgSVUgZGVmaW5lcwotICovCi1zdHJ1Y3QgZmNwX3hmZXJfcmR5X3MgewotCXUzMiAgICAgICAgZGF0YV9ybzsKLQl1MzIgICAgICAgIGJ1cnN0X2xlbjsKLQl1MzIgICAgICAgIHJlc2VydmVkOwotfTsKLQotLyoKICAqIEZDUF9SU1AgcmVzaWR1ZSBmbGFncwogICovCiBlbnVtIGZjcF9yZXNpZHVlIHsKLQlGQ1BfTk9fUkVTSURVRSA9IDAsCS8qIG5vIHJlc2lkdWUgKi8KLQlGQ1BfUkVTSURfT1ZFUiA9IDEsCS8qIG1vcmUgZGF0YSBsZWZ0IHRoYXQgd2FzIG5vdCBzZW50ICovCi0JRkNQX1JFU0lEX1VOREVSID0gMiwJLyogbGVzcyBkYXRhIHRoYW4gcmVxdWVzdGVkICovCi19OwotCi1lbnVtIHsKLQlGQ1BfUlNQSU5GT19HT09EID0gMCwKLQlGQ1BfUlNQSU5GT19EQVRBTEVOX01JU01BVENIID0gMSwKLQlGQ1BfUlNQSU5GT19DTU5EX0lOVkFMSUQgPSAyLAotCUZDUF9SU1BJTkZPX1JPTEVOX01JU01BVENIID0gMywKLQlGQ1BfUlNQSU5GT19UTV9OT1RfU1VQUCA9IDQsCi0JRkNQX1JTUElORk9fVE1fRkFJTEVEID0gNSwKKwlGQ1BfTk9fUkVTSURVRSA9IDAsICAgICAvKiBubyByZXNpZHVlICovCisJRkNQX1JFU0lEX09WRVIgPSAxLCAgICAgLyogbW9yZSBkYXRhIGxlZnQgdGhhdCB3YXMgbm90IHNlbnQgKi8KKwlGQ1BfUkVTSURfVU5ERVIgPSAyLCAgICAvKiBsZXNzIGRhdGEgdGhhbiByZXF1ZXN0ZWQgKi8KIH07CiAKIHN0cnVjdCBmY3BfcnNwaW5mb19zIHsKIAl1MzIgICAgICAgIHJlczA6MjQ7Ci0JdTMyICAgICAgICByc3BfY29kZTo4OwkvKiByZXNwb25zZSBjb2RlIChhcyBhYm92ZSkgKi8KKwl1MzIgICAgICAgIHJzcF9jb2RlOjg7CQkvKiByZXNwb25zZSBjb2RlIChhcyBhYm92ZSkgKi8KIAl1MzIgICAgICAgIHJlczE7CiB9OwogCiBzdHJ1Y3QgZmNwX3Jlc3BfcyB7Ci0JdTMyICAgICAgICByZXNlcnZlZFsyXTsJLyogMiB3b3JkcyByZXNlcnZlZCAqLworCXUzMiAgICAgICAgcmVzZXJ2ZWRbMl07CQkvKiAyIHdvcmRzIHJlc2VydmVkICovCiAJdTE2ICAgICAgICByZXNlcnZlZDI7Ci0jaWZkZWYgX19CSUdFTkRJQU4KKyNpZmRlZiBfX0JJR19FTkRJQU4KIAl1OCAgICAgICAgIHJlc2VydmVkMzozOwogCXU4ICAgICAgICAgZmNwX2NvbmZfcmVxOjE7CS8qIEZDUF9DT05GIGlzIHJlcXVlc3RlZCAqLwogCXU4ICAgICAgICAgcmVzaWRfZmxhZ3M6MjsJLyogdW5kZXJmbG93L292ZXJmbG93ICovCi0JdTggICAgICAgICBzbnNfbGVuX3ZhbGlkOjE7Lyogc2Vuc2UgbGVuIGlzIHZhbGlkICovCi0JdTggICAgICAgICByc3BfbGVuX3ZhbGlkOjE7LyogcmVzcG9uc2UgbGVuIGlzIHZhbGlkICovCisJdTggICAgICAgICBzbnNfbGVuX3ZhbGlkOjE7CS8qIHNlbnNlIGxlbiBpcyB2YWxpZCAqLworCXU4ICAgICAgICAgcnNwX2xlbl92YWxpZDoxOwkvKiByZXNwb25zZSBsZW4gaXMgdmFsaWQgKi8KICNlbHNlCi0JdTggICAgICAgICByc3BfbGVuX3ZhbGlkOjE7LyogcmVzcG9uc2UgbGVuIGlzIHZhbGlkICovCi0JdTggICAgICAgICBzbnNfbGVuX3ZhbGlkOjE7Lyogc2Vuc2UgbGVuIGlzIHZhbGlkICovCisJdTggICAgICAgICByc3BfbGVuX3ZhbGlkOjE7CS8qIHJlc3BvbnNlIGxlbiBpcyB2YWxpZCAqLworCXU4ICAgICAgICAgc25zX2xlbl92YWxpZDoxOwkvKiBzZW5zZSBsZW4gaXMgdmFsaWQgKi8KIAl1OCAgICAgICAgIHJlc2lkX2ZsYWdzOjI7CS8qIHVuZGVyZmxvdy9vdmVyZmxvdyAqLwogCXU4ICAgICAgICAgZmNwX2NvbmZfcmVxOjE7CS8qIEZDUF9DT05GIGlzIHJlcXVlc3RlZCAqLwogCXU4ICAgICAgICAgcmVzZXJ2ZWQzOjM7CiAjZW5kaWYKLQl1OCAgICAgICAgIHNjc2lfc3RhdHVzOwkvKiBvbmUgYnl0ZSBTQ1NJIHN0YXR1cyAqLwotCXUzMiAgICAgICAgcmVzaWR1ZTsJLyogcmVzaWR1YWwgZGF0YSBieXRlcyAqLwotCXUzMiAgICAgICAgc25zX2xlbjsJLyogbGVuZ3RoIG9kIHNlbnNlIGluZm8gKi8KLQl1MzIgICAgICAgIHJzcF9sZW47CS8qIGxlbmd0aCBvZiByZXNwb25zZSBpbmZvICovCisJdTggICAgICAgICBzY3NpX3N0YXR1czsJCS8qIG9uZSBieXRlIFNDU0kgc3RhdHVzICovCisJdTMyICAgICAgICByZXNpZHVlOwkJLyogcmVzaWR1YWwgZGF0YSBieXRlcyAqLworCXUzMiAgICAgICAgc25zX2xlbjsJCS8qIGxlbmd0aCBvZCBzZW5zZSBpbmZvICovCisJdTMyICAgICAgICByc3BfbGVuOwkJLyogbGVuZ3RoIG9mIHJlc3BvbnNlIGluZm8gKi8KIH07CiAKICNkZWZpbmUgZmNwX3Nuc2xlbihfX2ZjcHJzcCkJKChfX2ZjcHJzcCktPnNuc19sZW5fdmFsaWQgPwkJXApAQCAtMTMwMCwxMiArMTE1Niw2IEBACiAjZGVmaW5lIGZjcF9yc3BpbmZvKF9fZmNwcnNwKQkoKHN0cnVjdCBmY3BfcnNwaW5mb19zICopKChfX2ZjcHJzcCkgKyAxKSkKICNkZWZpbmUgZmNwX3Nuc2luZm8oX19mY3Byc3ApCSgoKHU4ICopZmNwX3JzcGluZm8oX19mY3Byc3ApKSArCVwKIAkJCQkJCWZjcF9yc3BsZW4oX19mY3Byc3ApKQotCi1zdHJ1Y3QgZmNwX2NtbmRfZnJfcyB7Ci0Jc3RydWN0IGZjaHNfcyBmY2hzOwotCXN0cnVjdCBmY3BfY21uZF9zIGZjcDsKLX07Ci0KIC8qCiAgKiBDVAogICovCkBAIC0xMzc5LDcgKzEyMjksNyBAQAogCUNUX1JTTl9MT0dJQ0FMX0JVU1kJPSAweDA1LAogCUNUX1JTTl9QUk9UT19FUlIJPSAweDA3LAogCUNUX1JTTl9VTkFCTEVfVE9fUEVSRgk9IDB4MDksCi0JQ1RfUlNOX05PVF9TVVBQCQkJPSAweDBCLAorCUNUX1JTTl9OT1RfU1VQUAkJPSAweDBCLAogCUNUX1JTTl9TRVJWRVJfTk9UX0FWQkwgID0gMHgwRCwKIAlDVF9SU05fU0VTU0lPTl9DT1VMRF9OT1RfQkVfRVNUQkQgPSAweDBFLAogCUNUX1JTTl9WRU5ET1JfU1BFQ0lGSUMgID0gMHhGRiwKQEAgLTE0MTksMTAgKzEyNjksMTAgQEAKICAqIGRlZmludGlvbnMgZm9yIHRoZSBleHBsYW5hdGlvbiBjb2RlIGZvciBhbGwgc2VydmVycwogICovCiBlbnVtIHsKLQlDVF9FWFBfQVVUSF9FWENFUFRJT04JCQk9IDB4RjEsCi0JQ1RfRVhQX0RCX0ZVTEwJCQkJCT0gMHhGMiwKLQlDVF9FWFBfREJfRU1QVFkJCQkJCT0gMHhGMywKLQlDVF9FWFBfUFJPQ0VTU0lOR19SRVEJCQk9IDB4RjQsCisJQ1RfRVhQX0FVVEhfRVhDRVBUSU9OCQk9IDB4RjEsCisJQ1RfRVhQX0RCX0ZVTEwJCQk9IDB4RjIsCisJQ1RfRVhQX0RCX0VNUFRZCQkJPSAweEYzLAorCUNUX0VYUF9QUk9DRVNTSU5HX1JFUQkJPSAweEY0LAogCUNUX0VYUF9VTkFCTEVfVE9fVkVSSUZZX0NPTk4JPSAweEY1LAogCUNUX0VYUF9ERVZJQ0VTX05PVF9JTl9DTU5fWk9ORSAgPSAweEY2CiB9OwpAQCAtMTQ0Niw3ICsxMjk2LDcgQEAKIAlHU19SRkZfSUQJPSAweDAyMUYsCS8qIFJlZ2lzdGVyIEZDNCBGZWF0dXJlCQkqLwogfTsKIAotc3RydWN0IGZjZ3NfaWRfcmVxX3N7CitzdHJ1Y3QgZmNnc19pZF9yZXFfcyB7CiAJdTMyIHJzdmQ6ODsKIAl1MzIgZGFwOjI0OyAvKiBwb3J0IGlkZW50aWZpZXIgKi8KIH07CkBAIC0xNDYwLDcgKzEzMTAsNyBAQAogCiBzdHJ1Y3QgZmNnc19naWRwbl9yZXNwX3MgewogCXUzMglyc3ZkOjg7Ci0JdTMyCWRhcDoyNDsJLyogcG9ydCBpZGVudGlmaWVyICovCisJdTMyCWRhcDoyNDsJCS8qIHBvcnQgaWRlbnRpZmllciAqLwogfTsKIAogLyoKQEAgLTE0NjksMjIgKzEzMTksMjEgQEAKIHN0cnVjdCBmY2dzX3JmdGlkX3JlcV9zIHsKIAl1MzIJcnN2ZDo4OwogCXUzMglkYXA6MjQ7CQkvKiBwb3J0IGlkZW50aWZpZXIgKi8KLQl1MzIJZmM0X3R5cGVbOF07CS8qIGZjNCB0eXBlcyAqLworCV9fYmUzMglmYzRfdHlwZVs4XTsJLyogZmM0IHR5cGVzICovCiB9OwogCiAvKgogICogUkZGX0lEIDogUmVnaXN0ZXIgRkM0IGZlYXR1cmVzLgogICovCi0KICNkZWZpbmUgRkNfR1NfRkNQX0ZDNF9GRUFUVVJFX0lOSVRJQVRPUiAgMHgwMgogI2RlZmluZSBGQ19HU19GQ1BfRkM0X0ZFQVRVUkVfVEFSR0VUCSAweDAxCiAKIHN0cnVjdCBmY2dzX3JmZmlkX3JlcV9zIHsKLSAgICB1MzIgICAgcnN2ZDo4OwotICAgIHUzMiAgICBkYXA6MjQ7CQkvKiBwb3J0IGlkZW50aWZpZXIJKi8KLSAgICB1MzIgICAgcnN2ZDE6MTY7Ci0gICAgdTMyICAgIGZjNGZ0cl9iaXRzOjg7CQkvKiBmYzQgZmVhdHVyZSBiaXRzCSovCi0gICAgdTMyICAgIGZjNF90eXBlOjg7CQkvKiBjb3JyZXNwb25kaW5nIEZDNCBUeXBlICovCisJdTMyCXJzdmQ6ODsKKwl1MzIJZGFwOjI0OwkJLyogcG9ydCBpZGVudGlmaWVyICovCisJdTMyCXJzdmQxOjE2OworCXUzMglmYzRmdHJfYml0czo4OwkvKiBmYzQgZmVhdHVyZSBiaXRzICovCisJdTMyCWZjNF90eXBlOjg7CQkvKiBjb3JyZXNwb25kaW5nIEZDNCBUeXBlICovCiB9OwogCiAvKgpAQCAtMTQ5NSwxNiArMTM0NCwxNiBAQAogCXU4CWRvbWFpbl9pZDsJLyogZG9tYWluLCAwIC0gYWxsIGZhYnJpYyAqLwogCXU4CWFyZWFfaWQ7CS8qIGFyZWEsIDAgLSB3aG9sZSBkb21haW4gKi8KIAl1OAlmYzRfdHlwZTsJLyogRkNfVFlQRV9GQ1AgZm9yIFNDU0kgZGV2aWNlcyAqLwotfTsJCS8qIEdJRF9GVCBSZXF1ZXN0ICovCit9OwogCiAvKgogICogR0lEX0ZUIFJlc3BvbnNlCiAgKi8KIHN0cnVjdCBmY2dzX2dpZGZ0X3Jlc3BfcyB7Ci0JdTgJCWxhc3Q6MTsJLyogbGFzdCBwb3J0IGlkZW50aWZpZXIgZmxhZyAqLwotCXU4CQlyZXNlcnZlZDo3OwotCXUzMglwaWQ6MjQ7CS8qIHBvcnQgaWRlbnRpZmllciAqLwotfTsJCS8qIEdJRF9GVCBSZXNwb25zZSAqLworCXU4CWxhc3Q6MTsJCS8qIGxhc3QgcG9ydCBpZGVudGlmaWVyIGZsYWcgKi8KKwl1OAlyZXNlcnZlZDo3OworCXUzMglwaWQ6MjQ7CQkvKiBwb3J0IGlkZW50aWZpZXIgKi8KK307CiAKIC8qCiAgKiBSU1BOX0lECkBAIC0xNTEyLDggKzEzNjEsOCBAQAogc3RydWN0IGZjZ3NfcnNwbmlkX3JlcV9zIHsKIAl1MzIJcnN2ZDo4OwogCXUzMglkYXA6MjQ7CQkvKiBwb3J0IGlkZW50aWZpZXIgKi8KLQl1OAkJc3BuX2xlbjsJLyogc3ltYm9saWMgcG9ydCBuYW1lIGxlbmd0aCAqLwotCXU4CQlzcG5bMjU2XTsJLyogc3ltYm9saWMgcG9ydCBuYW1lICovCisJdTgJc3BuX2xlbjsJLyogc3ltYm9saWMgcG9ydCBuYW1lIGxlbmd0aCAqLworCXU4CXNwblsyNTZdOwkvKiBzeW1ib2xpYyBwb3J0IG5hbWUgKi8KIH07CiAKIC8qCkBAIC0xNTIyLDcgKzEzNzEsNyBAQAogc3RydWN0IGZjZ3NfcnBuaWRfcmVxX3MgewogCXUzMglyc3ZkOjg7CiAJdTMyCXBvcnRfaWQ6MjQ7Ci0Jd3duX3QJCXBvcnRfbmFtZTsKKwl3d25fdAlwb3J0X25hbWU7CiB9OwogCiAvKgpAQCAtMTUzMSw3ICsxMzgwLDcgQEAKIHN0cnVjdCBmY2dzX3JubmlkX3JlcV9zIHsKIAl1MzIJcnN2ZDo4OwogCXUzMglwb3J0X2lkOjI0OwotCXd3bl90CQlub2RlX25hbWU7CisJd3duX3QJbm9kZV9uYW1lOwogfTsKIAogLyoKQEAgLTE1NjUsOCArMTQxNCw4IEBACiAgKiBHQV9OWFQgUmVzcG9uc2UKICAqLwogc3RydWN0IGZjZ3NfZ2FueHRfcnNwX3MgewotCXUzMglwb3J0X3R5cGU6ODsJLyogUG9ydCBUeXBlICovCi0JdTMyCXBvcnRfaWQ6MjQ7CS8qIFBvcnQgSWRlbnRpZmllciAqLworCXUzMgkJcG9ydF90eXBlOjg7CS8qIFBvcnQgVHlwZSAqLworCXUzMgkJcG9ydF9pZDoyNDsJLyogUG9ydCBJZGVudGlmaWVyICovCiAJd3duX3QJCXBvcnRfbmFtZTsJLyogUG9ydCBOYW1lICovCiAJdTgJCXNwbl9sZW47CS8qIExlbmd0aCBvZiBTeW1ib2xpYyBQb3J0IE5hbWUgKi8KIAljaGFyCQlzcG5bMjU1XTsJLyogU3ltYm9saWMgUG9ydCBOYW1lICovCkBAIC0xNTc1LDE5ICsxNDI0LDE0IEBACiAJY2hhcgkJc25uWzI1NV07CS8qIFN5bWJvbGljIE5vZGUgTmFtZSAqLwogCXU4CQlpcGFbOF07CQkvKiBJbml0aWFsIFByb2Nlc3MgQXNzb2NpYXRvciAqLwogCXU4CQlpcFsxNl07CQkvKiBJUCBBZGRyZXNzICovCi0JdTMyCWNvczsJCS8qIENsYXNzIG9mIFNlcnZpY2UgKi8KLQl1MzIJZmM0dHlwZXNbOF07CS8qIEZDLTQgVFlQRXMgKi8KLQl3d25fdAkJZmFicmljX3BvcnRfbmFtZTsKLQkJCQkJLyogRmFicmljIFBvcnQgTmFtZSAqLwotCXUzMglyc3ZkOjg7CQkvKiBSZXNlcnZlZCAqLwotCXUzMgloYXJkX2FkZHI6MjQ7CS8qIEhhcmQgQWRkcmVzcyAqLworCXUzMgkJY29zOwkJLyogQ2xhc3Mgb2YgU2VydmljZSAqLworCXUzMgkJZmM0dHlwZXNbOF07CS8qIEZDLTQgVFlQRXMgKi8KKwl3d25fdAkJZmFicmljX3BvcnRfbmFtZTsgLyogRmFicmljIFBvcnQgTmFtZSAqLworCXUzMgkJcnN2ZDo4OwkJLyogUmVzZXJ2ZWQgKi8KKwl1MzIJCWhhcmRfYWRkcjoyNDsJLyogSGFyZCBBZGRyZXNzICovCiB9OwogCiAvKgotICogRmFicmljIENvbmZpZyBTZXJ2ZXIKLSAqLwotCi0vKgogICogQ29tbWFuZCBjb2RlcyBmb3IgRmFicmljIENvbmZpZ3VyYXRpb24gU2VydmVyCiAgKi8KIGVudW0gewpAQCAtMTU5OCwxNTkgKzE0NDIsOSBAQAogfTsKIAogLyoKLSAqIFNvdXJjZSBvciBEZXN0aW5hdGlvbiBQb3J0IFRhZ3MuCi0gKi8KLWVudW0gewotCUdTX0ZUUkFDRV9UQUdfTlBPUlRfSUQJCT0gMSwKLQlHU19GVFJBQ0VfVEFHX05QT1JUX05BTUUJPSAyLAotfTsKLQotLyoKLSogUG9ydCBWYWx1ZSA6IENvdWxkIGJlIGEgUG9ydCBpZCBvciB3d24KLSAqLwotdW5pb24gZmNnc19wb3J0X3ZhbF91IHsKLQl1MzIJbnBvcnRfaWQ7Ci0Jd3duX3QJCW5wb3J0X3d3bjsKLX07Ci0KLSNkZWZpbmUgR1NfRlRSQUNFX01BWF9IT1BfQ09VTlQJMjAKLSNkZWZpbmUgR1NfRlRSQUNFX1JFVklTSU9OCTEKLQotLyoKLSAqIEZ0cmFjZSBSZWxhdGVkIFN0cnVjdHVyZXMuCi0gKi8KLQotLyoKLSAqIFNUUiAoU3dpdGNoIFRyYWNlKSBSZWplY3QgUmVhc29uIENvZGVzLiBGcm9tIEZDLVNXLgotICovCi1lbnVtIHsKLQlHU19GVFJBQ0VfU1RSX0NNRF9DT01QTEVURURfU1VDQwk9IDAsCi0JR1NfRlRSQUNFX1NUUl9DTURfTk9UX1NVUFBfSU5fTkVYVF9TV0lUQ0gsCi0JR1NfRlRSQUNFX1NUUl9OT19SRVNQX0ZST01fTkVYVF9TV0lUQ0gsCi0JR1NfRlRSQUNFX1NUUl9NQVhfSE9QX0NOVF9SRUFDSEVELAotCUdTX0ZUUkFDRV9TVFJfU1JDX1BPUlRfTk9UX0ZPVU5ELAotCUdTX0ZUUkFDRV9TVFJfRFNUX1BPUlRfTk9UX0ZPVU5ELAotCUdTX0ZUUkFDRV9TVFJfREVWSUNFU19OT1RfSU5fQ09NTU9OX1pPTkUsCi0JR1NfRlRSQUNFX1NUUl9OT19ST1VURV9CV19QT1JUUywKLQlHU19GVFJBQ0VfU1RSX05PX0FERExfRVhQTE4sCi0JR1NfRlRSQUNFX1NUUl9GQUJSSUNfQlVTWSwKLQlHU19GVFJBQ0VfU1RSX0ZBQlJJQ19CVUlMRF9JTl9QUk9HUkVTUywKLQlHU19GVFJBQ0VfU1RSX1ZFTkRPUl9TUEVDSUZJQ19FUlJfU1RBUlQgPSAweGYwLAotCUdTX0ZUUkFDRV9TVFJfVkVORE9SX1NQRUNJRklDX0VSUl9FTkQgPSAweGZmLAotfTsKLQotLyoKLSAqIEZ0cmFjZSBSZXF1ZXN0Ci0gKi8KLXN0cnVjdCBmY2dzX2Z0cmFjZV9yZXFfcyB7Ci0JdTMyCXJldmlzaW9uOwotCXUxNglzcmNfcG9ydF90YWc7CS8qIFNvdXJjZSBQb3J0IHRhZyAqLwotCXUxNglzcmNfcG9ydF9sZW47CS8qIFNvdXJjZSBQb3J0IGxlbiAqLwotCXVuaW9uIGZjZ3NfcG9ydF92YWxfdSBzcmNfcG9ydF92YWw7CS8qIFNvdXJjZSBQb3J0IHZhbHVlICovCi0JdTE2CWRzdF9wb3J0X3RhZzsJLyogRGVzdGluYXRpb24gUG9ydCB0YWcgKi8KLQl1MTYJZHN0X3BvcnRfbGVuOwkvKiBEZXN0aW5hdGlvbiBQb3J0IGxlbiAqLwotCXVuaW9uIGZjZ3NfcG9ydF92YWxfdSBkc3RfcG9ydF92YWw7CS8qIERlc3RpbmF0aW9uIFBvcnQgdmFsdWUgKi8KLQl1MzIJdG9rZW47Ci0JdTgJCXZlbmRvcl9pZFs4XTsJLyogVDEwIFZlbmRvciBJZGVudGlmaWVyICovCi0JdTgJCXZlbmRvcl9pbmZvWzhdOwkvKiBWZW5kb3Igc3BlY2lmaWMgSW5mbyAqLwotCXUzMgltYXhfaG9wX2NudDsJLyogTWF4IEhvcCBDb3VudCAqLwotfTsKLQotLyoKLSAqIFBhdGggaW5mbyBzdHJ1Y3R1cmUKLSAqLwotc3RydWN0IGZjZ3NfZnRyYWNlX3BhdGhfaW5mb19zIHsKLQl3d25fdAkJc3dpdGNoX25hbWU7CQkvKiBTd2l0Y2ggV1dOICovCi0JdTMyCWRvbWFpbl9pZDsKLQl3d25fdAkJaW5ncmVzc19wb3J0X25hbWU7CS8qIEluZ3Jlc3MgcG9ydHMgd3duICovCi0JdTMyCWluZ3Jlc3NfcGh5c19wb3J0X251bTsJLyogSW5ncmVzcyBwb3J0cyBwaHlzaWNhbCBwb3J0Ci0JCQkJCQkgKiBudW1iZXIKLQkJCQkJCSAqLwotCXd3bl90CQllZ3Jlc3NfcG9ydF9uYW1lOwkvKiBJbmdyZXNzIHBvcnRzIHd3biAqLwotCXUzMgllZ3Jlc3NfcGh5c19wb3J0X251bTsJLyogSW5ncmVzcyBwb3J0cyBwaHlzaWNhbCBwb3J0Ci0JCQkJCQkgKiBudW1iZXIKLQkJCQkJCSAqLwotfTsKLQotLyoKLSAqIEZ0cmFjZSBBY2MgUmVzcG9uc2UKLSAqLwotc3RydWN0IGZjZ3NfZnRyYWNlX3Jlc3BfcyB7Ci0JdTMyCXJldmlzaW9uOwotCXUzMgl0b2tlbjsKLQl1OAkJdmVuZG9yX2lkWzhdOwkJLyogVDEwIFZlbmRvciBJZGVudGlmaWVyICovCi0JdTgJCXZlbmRvcl9pbmZvWzhdOwkJLyogVmVuZG9yIHNwZWNpZmljIEluZm8gKi8KLQl1MzIJc3RyX3Jlal9yZWFzb25fY29kZTsJLyogU1RSIFJlamVjdCBSZWFzb24gQ29kZSAqLwotCXUzMgludW1fcGF0aF9pbmZvX2VudHJpZXM7CS8qIE5vLiBvZiBwYXRoIGluZm8gZW50cmllcyAqLwotCS8qCi0JICogcGF0aCBpbmZvIGVudHJ5L2VudHJpZXMuCi0JICovCi0Jc3RydWN0IGZjZ3NfZnRyYWNlX3BhdGhfaW5mb19zIHBhdGhfaW5mb1sxXTsKLQotfTsKLQotLyoKLSogRmFicmljIENvbmZpZyBTZXJ2ZXIgOiBGQ1BpbmcKLSAqLwotCi0vKgotICogRkMgUGluZyBSZXF1ZXN0Ci0gKi8KLXN0cnVjdCBmY2dzX2ZjcGluZ19yZXFfcyB7Ci0JdTMyCXJldmlzaW9uOwotCXUxNglwb3J0X3RhZzsKLQl1MTYJcG9ydF9sZW47CS8qIFBvcnQgbGVuICovCi0JdW5pb24gZmNnc19wb3J0X3ZhbF91IHBvcnRfdmFsOwkvKiBQb3J0IHZhbHVlICovCi0JdTMyCXRva2VuOwotfTsKLQotLyoKLSAqIEZDIFBpbmcgUmVzcG9uc2UKLSAqLwotc3RydWN0IGZjZ3NfZmNwaW5nX3Jlc3BfcyB7Ci0JdTMyCXRva2VuOwotfTsKLQotLyoKLSAqIENvbW1hbmQgY29kZXMgZm9yIHpvbmUgc2VydmVyIHF1ZXJ5LgotICovCi1lbnVtIHsKLQlaU19HWk1FID0gMHgwMTI0LAkvKiBHZXQgem9uZSBtZW1iZXIgZXh0ZW5kZWQgKi8KLX07Ci0KLS8qCi0gKiBaUyBHWk1FIHJlcXVlc3QKLSAqLwotI2RlZmluZSBaU19HWk1FX1pOQU1FTEVOCTMyCi1zdHJ1Y3QgenNfZ3ptZV9yZXFfcyB7Ci0JdTgJem5hbWVsZW47Ci0JdTgJcnN2ZFszXTsKLQl1OAl6bmFtZVtaU19HWk1FX1pOQU1FTEVOXTsKLX07Ci0KLWVudW0genNfbWJyX3R5cGUgewotCVpTX01CUl9UWVBFX1BXV04JPSAxLAotCVpTX01CUl9UWVBFX0RPTVBPUlQJPSAyLAotCVpTX01CUl9UWVBFX1BPUlRJRAk9IDMsCi0JWlNfTUJSX1RZUEVfTldXTgk9IDQsCi19OwotCi1zdHJ1Y3QgenNfbWJyX3d3bl9zIHsKLQl1OAltYnJfdHlwZTsKLQl1OAlyc3ZkWzNdOwotCXd3bl90CXd3bjsKLX07Ci0KLXN0cnVjdCB6c19xdWVyeV9yZXNwX3MgewotCXUzMglubWJyczsJLyogIG51bWJlciBvZiB6b25lIG1lbWJlcnMgKi8KLQlzdHJ1Y3QgenNfbWJyX3d3bl9zCW1iclsxXTsKLX07Ci0KLS8qCiAgKiBHTUFMIENvbW1hbmQgKCBHZXQgKCBpbnRlcmNvbm5lY3QgRWxlbWVudCkgTWFuYWdlbWVudCBBZGRyZXNzIExpc3QpCiAgKiBUbyByZXRyaWV2ZSB0aGUgSVAgQWRkcmVzcyBvZiBhIFN3aXRjaC4KICAqLwotCiAjZGVmaW5lIENUX0dNQUxfUkVTUF9QUkVGSVhfVEVMTkVUCSAidGVsbmV0Oi8vIgogI2RlZmluZSBDVF9HTUFMX1JFU1BfUFJFRklYX0hUVFAJICJodHRwOi8vIgogCkBAIC0xNzY0LDcgKzE0NTgsNyBAQAogCiAvKiBBY2NlcHQgUmVzcG9uc2UgdG8gR01BTCAqLwogc3RydWN0IGZjZ3NfZ21hbF9yZXNwX3MgewotCXUzMgltc19sZW47ICAgLyogTnVtIG9mIGVudHJpZXMgKi8KKwlfX2JlMzIJbXNfbGVuOyAgIC8qIE51bSBvZiBlbnRyaWVzICovCiAJdTgJbXNfbWFbMjU2XTsKIH07CiAKQEAgLTE3NzUsOSArMTQ2OSw2IEBACiB9OwogCiAvKgotICogRkRNSQotICovCi0vKgogICogRkRNSSBDb21tYW5kIENvZGVzCiAgKi8KICNkZWZpbmUJRkRNSV9HUkhMCQkweDAxMDAKQEAgLTE4NTYsOCArMTU0Nyw4IEBACiAgKiBGRE1JIGF0dHJpYnV0ZQogICovCiBzdHJ1Y3QgZmRtaV9hdHRyX3MgewotCXUxNiAgICAgICAgdHlwZTsKLQl1MTYgICAgICAgIGxlbjsKKwlfX2JlMTYgICAgICAgIHR5cGU7CisJX19iZTE2ICAgICAgICBsZW47CiAJdTggICAgICAgICB2YWx1ZVsxXTsKIH07CiAKQEAgLTE4NjUsNyArMTU1Niw3IEBACiAgKiBIQkEgQXR0cmlidXRlIEJsb2NrCiAgKi8KIHN0cnVjdCBmZG1pX2hiYV9hdHRyX3MgewotCXUzMiAgICAgICAgYXR0cl9jb3VudDsJLyogIyBvZiBhdHRyaWJ1dGVzICovCisJX19iZTMyICAgICAgICBhdHRyX2NvdW50OwkvKiAjIG9mIGF0dHJpYnV0ZXMgKi8KIAlzdHJ1Y3QgZmRtaV9hdHRyX3MgaGJhX2F0dHI7CS8qIG4gYXR0cmlidXRlcyAqLwogfTsKIApAQCAtMTg3MywxNSArMTU2NCwxNSBAQAogICogUmVnaXN0ZXJlZCBQb3J0IExpc3QKICAqLwogc3RydWN0IGZkbWlfcG9ydF9saXN0X3MgewotCXUzMiAgICAgICAgbnVtX3BvcnRzOwkvKiBudW1iZXIgT2YgUG9ydCBFbnRyaWVzICovCi0Jd3duX3QgICAgICAgICAgIHBvcnRfZW50cnk7CS8qIG9uZSBvciBtb3JlICovCisJX19iZTMyCQludW1fcG9ydHM7CS8qIG51bWJlciBPZiBQb3J0IEVudHJpZXMgKi8KKwl3d25fdAkJcG9ydF9lbnRyeTsJLyogb25lIG9yIG1vcmUgKi8KIH07CiAKIC8qCiAgKiBQb3J0IEF0dHJpYnV0ZSBCbG9jawogICovCiBzdHJ1Y3QgZmRtaV9wb3J0X2F0dHJfcyB7Ci0JdTMyICAgICAgICBhdHRyX2NvdW50OwkvKiAjIG9mIGF0dHJpYnV0ZXMgKi8KKwlfX2JlMzIgICAgICAgIGF0dHJfY291bnQ7CS8qICMgb2YgYXR0cmlidXRlcyAqLwogCXN0cnVjdCBmZG1pX2F0dHJfcyBwb3J0X2F0dHI7CS8qIG4gYXR0cmlidXRlcyAqLwogfTsKIApAQCAtMTg4OSw3ICsxNTgwLDcgQEAKICAqIEZETUkgUmVnaXN0ZXIgSEJBIEF0dHJpYnV0ZXMKICAqLwogc3RydWN0IGZkbWlfcmhiYV9zIHsKLQl3d25fdCAgICAgICAgICAgaGJhX2lkOwkJLyogSEJBIElkZW50aWZpZXIgKi8KKwl3d25fdAkJCWhiYV9pZDsJCS8qIEhCQSBJZGVudGlmaWVyICovCiAJc3RydWN0IGZkbWlfcG9ydF9saXN0X3MgcG9ydF9saXN0OwkvKiBSZWdpc3RlcmVkIFBvcnQgTGlzdCAqLwogCXN0cnVjdCBmZG1pX2hiYV9hdHRyX3MgaGJhX2F0dHJfYmxrOwkvKiBIQkEgYXR0cmlidXRlIGJsb2NrICovCiB9OwpAQCAtMTg5OCw4ICsxNTg5LDggQEAKICAqIEZETUkgUmVnaXN0ZXIgUG9ydAogICovCiBzdHJ1Y3QgZmRtaV9ycHJ0X3MgewotCXd3bl90ICAgICAgICAgICBoYmFfaWQ7CQkvKiBIQkEgSWRlbnRpZmllciAqLwotCXd3bl90ICAgICAgICAgICBwb3J0X25hbWU7CS8qIFBvcnQgd3duICovCisJd3duX3QJCQloYmFfaWQ7CQkvKiBIQkEgSWRlbnRpZmllciAqLworCXd3bl90CQkJcG9ydF9uYW1lOwkvKiBQb3J0IHd3biAqLwogCXN0cnVjdCBmZG1pX3BvcnRfYXR0cl9zIHBvcnRfYXR0cl9ibGs7CS8qIFBvcnQgQXR0ciBCbG9jayAqLwogfTsKIApAQCAtMTkwNyw3ICsxNTk4LDcgQEAKICAqIEZETUkgUmVnaXN0ZXIgUG9ydCBBdHRyaWJ1dGVzCiAgKi8KIHN0cnVjdCBmZG1pX3JwYV9zIHsKLQl3d25fdCAgICAgICAgICAgcG9ydF9uYW1lOwkvKiBwb3J0IHd3biAqLworCXd3bl90CQkJcG9ydF9uYW1lOwkvKiBwb3J0IHd3biAqLwogCXN0cnVjdCBmZG1pX3BvcnRfYXR0cl9zIHBvcnRfYXR0cl9ibGs7CS8qIFBvcnQgQXR0ciBCbG9jayAqLwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNidWlsZC5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNidWlsZC5jCmluZGV4IDljNzI1MzEuLmI3ZTI1MzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2ZjYnVpbGQuYworKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY2J1aWxkLmMKQEAgLTE4LDE2ICsxOCwxNiBAQAogICogZmNidWlsZC5jIC0gRkMgbGluayBzZXJ2aWNlIGZyYW1lIGJ1aWxkaW5nIGFuZCBwYXJzaW5nIHJvdXRpbmVzCiAgKi8KIAotI2luY2x1ZGUgImJmYV9vc19pbmMuaCIKKyNpbmNsdWRlICJiZmFkX2Rydi5oIgogI2luY2x1ZGUgImJmYV9mY2J1aWxkLmgiCiAKIC8qCiAgKiBzdGF0aWMgYnVpbGQgZnVuY3Rpb25zCiAgKi8KIHN0YXRpYyB2b2lkICAgICBmY19lbHNfcnNwX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHUzMiBkX2lkLCB1MzIgc19pZCwKLQkJCQkgdTE2IG94X2lkKTsKKwkJCQkgX19iZTE2IG94X2lkKTsKIHN0YXRpYyB2b2lkICAgICBmY19ibHNfcnNwX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHUzMiBkX2lkLCB1MzIgc19pZCwKLQkJCQkgdTE2IG94X2lkKTsKKwkJCQkgX19iZTE2IG94X2lkKTsKIHN0YXRpYyBzdHJ1Y3QgZmNoc19zIGZjX2Vsc19yZXFfdG1wbDsKIHN0YXRpYyBzdHJ1Y3QgZmNoc19zIGZjX2Vsc19yc3BfdG1wbDsKIHN0YXRpYyBzdHJ1Y3QgZmNoc19zIGZjX2Jsc19yZXFfdG1wbDsKQEAgLTQ4LDcgKzQ4LDcgQEAKIAlmY19lbHNfcmVxX3RtcGwuY2F0X2luZm8gPSBGQ19DQVRfTERfUkVRVUVTVDsKIAlmY19lbHNfcmVxX3RtcGwudHlwZSA9IEZDX1RZUEVfRUxTOwogCWZjX2Vsc19yZXFfdG1wbC5mX2N0bCA9Ci0JCWJmYV9vc19odG9uM2IoRkNUTF9TRVFfSU5JIHwgRkNUTF9GU19FWENIIHwgRkNUTF9FTkRfU0VRIHwKKwkJYmZhX2h0b24zYihGQ1RMX1NFUV9JTkkgfCBGQ1RMX0ZTX0VYQ0ggfCBGQ1RMX0VORF9TRVEgfAogCQkJICAgICAgRkNUTF9TSV9YRkVSKTsKIAlmY19lbHNfcmVxX3RtcGwucnhfaWQgPSBGQ19SWElEX0FOWTsKIApAQCAtNTksNyArNTksNyBAQAogCWZjX2Vsc19yc3BfdG1wbC5jYXRfaW5mbyA9IEZDX0NBVF9MRF9SRVBMWTsKIAlmY19lbHNfcnNwX3RtcGwudHlwZSA9IEZDX1RZUEVfRUxTOwogCWZjX2Vsc19yc3BfdG1wbC5mX2N0bCA9Ci0JCWJmYV9vc19odG9uM2IoRkNUTF9FQ19SRVNQIHwgRkNUTF9TRVFfSU5JIHwgRkNUTF9MU19FWENIIHwKKwkJYmZhX2h0b24zYihGQ1RMX0VDX1JFU1AgfCBGQ1RMX1NFUV9JTkkgfCBGQ1RMX0xTX0VYQ0ggfAogCQkJICAgICAgRkNUTF9FTkRfU0VRIHwgRkNUTF9TSV9YRkVSKTsKIAlmY19lbHNfcnNwX3RtcGwucnhfaWQgPSBGQ19SWElEX0FOWTsKIApAQCAtNjgsNyArNjgsNyBAQAogCSAqLwogCWZjX2Jsc19yZXFfdG1wbC5yb3V0aW5nID0gRkNfUlRHX0JBU0lDX0xJTks7CiAJZmNfYmxzX3JlcV90bXBsLnR5cGUgPSBGQ19UWVBFX0JMUzsKLQlmY19ibHNfcmVxX3RtcGwuZl9jdGwgPSBiZmFfb3NfaHRvbjNiKEZDVExfRU5EX1NFUSB8IEZDVExfU0lfWEZFUik7CisJZmNfYmxzX3JlcV90bXBsLmZfY3RsID0gYmZhX2h0b24zYihGQ1RMX0VORF9TRVEgfCBGQ1RMX1NJX1hGRVIpOwogCWZjX2Jsc19yZXFfdG1wbC5yeF9pZCA9IEZDX1JYSURfQU5ZOwogCiAJLyoKQEAgLTc4LDcgKzc4LDcgQEAKIAlmY19ibHNfcnNwX3RtcGwuY2F0X2luZm8gPSBGQ19DQVRfQkFfQUNDOwogCWZjX2Jsc19yc3BfdG1wbC50eXBlID0gRkNfVFlQRV9CTFM7CiAJZmNfYmxzX3JzcF90bXBsLmZfY3RsID0KLQkJYmZhX29zX2h0b24zYihGQ1RMX0VDX1JFU1AgfCBGQ1RMX1NFUV9JTkkgfCBGQ1RMX0xTX0VYQ0ggfAorCQliZmFfaHRvbjNiKEZDVExfRUNfUkVTUCB8IEZDVExfU0VRX0lOSSB8IEZDVExfTFNfRVhDSCB8CiAJCQkgICAgICBGQ1RMX0VORF9TRVEgfCBGQ1RMX1NJX1hGRVIpOwogCWZjX2Jsc19yc3BfdG1wbC5yeF9pZCA9IEZDX1JYSURfQU5ZOwogCkBAIC0xMjksNyArMTI5LDcgQEAKIAlmY3BfZmNoc190bXBsLmNhdF9pbmZvID0gRkNfQ0FUX1VOU09MSUNJVF9DTUQ7CiAJZmNwX2ZjaHNfdG1wbC50eXBlID0gRkNfVFlQRV9GQ1A7CiAJZmNwX2ZjaHNfdG1wbC5mX2N0bCA9Ci0JCWJmYV9vc19odG9uM2IoRkNUTF9GU19FWENIIHwgRkNUTF9FTkRfU0VRIHwgRkNUTF9TSV9YRkVSKTsKKwkJYmZhX2h0b24zYihGQ1RMX0ZTX0VYQ0ggfCBGQ1RMX0VORF9TRVEgfCBGQ1RMX1NJX1hGRVIpOwogCWZjcF9mY2hzX3RtcGwuc2VxX2lkID0gMTsKIAlmY3BfZmNoc190bXBsLnJ4X2lkID0gRkNfUlhJRF9BTlk7CiB9CkBAIC0xNDMsNyArMTQzLDcgQEAKIAlmY2hzLT5jYXRfaW5mbyA9IEZDX0NBVF9VTlNPTElDSVRfQ1RSTDsKIAlmY2hzLT50eXBlID0gRkNfVFlQRV9TRVJWSUNFUzsKIAlmY2hzLT5mX2N0bCA9Ci0JCWJmYV9vc19odG9uM2IoRkNUTF9TRVFfSU5JIHwgRkNUTF9GU19FWENIIHwgRkNUTF9FTkRfU0VRIHwKKwkJYmZhX2h0b24zYihGQ1RMX1NFUV9JTkkgfCBGQ1RMX0ZTX0VYQ0ggfCBGQ1RMX0VORF9TRVEgfAogCQkJICAgICAgRkNUTF9TSV9YRkVSKTsKIAlmY2hzLT5yeF9pZCA9IEZDX1JYSURfQU5ZOwogCWZjaHMtPmRfaWQgPSAoZF9pZCk7CkBAIC0xNTcsNyArMTU3LDcgQEAKIH0KIAogdm9pZAotZmNfZWxzX3JlcV9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB1MzIgZF9pZCwgdTMyIHNfaWQsIHUxNiBveF9pZCkKK2ZjX2Vsc19yZXFfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdTMyIGRfaWQsIHUzMiBzX2lkLCBfX2JlMTYgb3hfaWQpCiB7CiAJbWVtY3B5KGZjaHMsICZmY19lbHNfcmVxX3RtcGwsIHNpemVvZihzdHJ1Y3QgZmNoc19zKSk7CiAJZmNocy0+ZF9pZCA9IChkX2lkKTsKQEAgLTE2Niw3ICsxNjYsNyBAQAogfQogCiBzdGF0aWMgdm9pZAotZmNfZWxzX3JzcF9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB1MzIgZF9pZCwgdTMyIHNfaWQsIHUxNiBveF9pZCkKK2ZjX2Vsc19yc3BfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdTMyIGRfaWQsIHUzMiBzX2lkLCBfX2JlMTYgb3hfaWQpCiB7CiAJbWVtY3B5KGZjaHMsICZmY19lbHNfcnNwX3RtcGwsIHNpemVvZihzdHJ1Y3QgZmNoc19zKSk7CiAJZmNocy0+ZF9pZCA9IGRfaWQ7CkBAIC0xOTYsNyArMTk2LDcgQEAKIH0KIAogc3RhdGljIHZvaWQKLWZjX2Jsc19yc3BfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdTMyIGRfaWQsIHUzMiBzX2lkLCB1MTYgb3hfaWQpCitmY19ibHNfcnNwX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHUzMiBkX2lkLCB1MzIgc19pZCwgX19iZTE2IG94X2lkKQogewogCW1lbWNweShmY2hzLCAmZmNfYmxzX3JzcF90bXBsLCBzaXplb2Yoc3RydWN0IGZjaHNfcykpOwogCWZjaHMtPmRfaWQgPSBkX2lkOwpAQCAtMjA2LDcgKzIwNiw3IEBACiAKIHN0YXRpYyAgICAgICAgICB1MTYKIGZjX3Bsb2dpX3hfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdm9pZCAqcGxkLCB1MzIgZF9pZCwgdTMyIHNfaWQsCi0JCSB1MTYgb3hfaWQsIHd3bl90IHBvcnRfbmFtZSwgd3duX3Qgbm9kZV9uYW1lLAorCQkgX19iZTE2IG94X2lkLCB3d25fdCBwb3J0X25hbWUsIHd3bl90IG5vZGVfbmFtZSwKIAkJIHUxNiBwZHVfc2l6ZSwgdTggZWxzX2NvZGUpCiB7CiAJc3RydWN0IGZjX2xvZ2lfcyAqcGxvZ2kgPSAoc3RydWN0IGZjX2xvZ2lfcyAqKSAocGxkKTsKQEAgLTIzMiw4ICsyMzIsOCBAQAogCQl1MTYgb3hfaWQsIHd3bl90IHBvcnRfbmFtZSwgd3duX3Qgbm9kZV9uYW1lLCB1MTYgcGR1X3NpemUsCiAJICAgICAgIHU4IHNldF9ucGl2LCB1OCBzZXRfYXV0aCwgdTE2IGxvY2FsX2JiX2NyZWRpdHMpCiB7Ci0JdTMyICAgICAgICBkX2lkID0gYmZhX29zX2h0b24zYihGQ19GQUJSSUNfUE9SVCk7Ci0JdTMyCSp2dmxfaW5mbzsKKwl1MzIgICAgICAgIGRfaWQgPSBiZmFfaHRvbjNiKEZDX0ZBQlJJQ19QT1JUKTsKKwlfX2JlMzIJKnZ2bF9pbmZvOwogCiAJbWVtY3B5KGZsb2dpLCAmcGxvZ2lfdG1wbCwgc2l6ZW9mKHN0cnVjdCBmY19sb2dpX3MpKTsKIApAQCAtMjY3LDcgKzI2Nyw3IEBACiAKIHUxNgogZmNfZmxvZ2lfYWNjX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHN0cnVjdCBmY19sb2dpX3MgKmZsb2dpLCB1MzIgc19pZCwKLQkJICAgdTE2IG94X2lkLCB3d25fdCBwb3J0X25hbWUsIHd3bl90IG5vZGVfbmFtZSwKKwkJICAgX19iZTE2IG94X2lkLCB3d25fdCBwb3J0X25hbWUsIHd3bl90IG5vZGVfbmFtZSwKIAkJICAgdTE2IHBkdV9zaXplLCB1MTYgbG9jYWxfYmJfY3JlZGl0cykKIHsKIAl1MzIgICAgICAgIGRfaWQgPSAwOwpAQCAtMjg5LDcgKzI4OSw3IEBACiBmY19mZGlzY19idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCBzdHJ1Y3QgZmNfbG9naV9zICpmbG9naSwgdTMyIHNfaWQsCiAJCXUxNiBveF9pZCwgd3duX3QgcG9ydF9uYW1lLCB3d25fdCBub2RlX25hbWUsIHUxNiBwZHVfc2l6ZSkKIHsKLQl1MzIgICAgICAgIGRfaWQgPSBiZmFfb3NfaHRvbjNiKEZDX0ZBQlJJQ19QT1JUKTsKKwl1MzIgICAgICAgIGRfaWQgPSBiZmFfaHRvbjNiKEZDX0ZBQlJJQ19QT1JUKTsKIAogCW1lbWNweShmbG9naSwgJnBsb2dpX3RtcGwsIHNpemVvZihzdHJ1Y3QgZmNfbG9naV9zKSk7CiAKQEAgLTM5Miw3ICszOTIsNyBAQAogCiB1MTYKIGZjX3BybGlfYWNjX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHZvaWQgKnBsZCwgdTMyIGRfaWQsIHUzMiBzX2lkLAotCQkgIHUxNiBveF9pZCwgZW51bSBiZmFfbHBvcnRfcm9sZSByb2xlKQorCQkgIF9fYmUxNiBveF9pZCwgZW51bSBiZmFfbHBvcnRfcm9sZSByb2xlKQogewogCXN0cnVjdCBmY19wcmxpX3MgKnBybGkgPSAoc3RydWN0IGZjX3BybGlfcyAqKSAocGxkKTsKIApAQCAtNDU2LDkgKzQ1Niw5IEBACiAJcmV0dXJuIHNpemVvZihzdHJ1Y3QgZmNfbG9nb19zKTsKIH0KIAotc3RhdGljICAgICAgICAgIHUxNgorc3RhdGljIHUxNgogZmNfYWRpc2NfeF9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCBzdHJ1Y3QgZmNfYWRpc2NfcyAqYWRpc2MsIHUzMiBkX2lkLAotCQkgdTMyIHNfaWQsIHUxNiBveF9pZCwgd3duX3QgcG9ydF9uYW1lLAorCQkgdTMyIHNfaWQsIF9fYmUxNiBveF9pZCwgd3duX3QgcG9ydF9uYW1lLAogCQkgd3duX3Qgbm9kZV9uYW1lLCB1OCBlbHNfY29kZSkKIHsKIAltZW1zZXQoYWRpc2MsICdcMCcsIHNpemVvZihzdHJ1Y3QgZmNfYWRpc2NfcykpOwpAQCAtNDgwLDcgKzQ4MCw3IEBACiAKIHUxNgogZmNfYWRpc2NfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgc3RydWN0IGZjX2FkaXNjX3MgKmFkaXNjLCB1MzIgZF9pZCwKLQkJdTMyIHNfaWQsIHUxNiBveF9pZCwgd3duX3QgcG9ydF9uYW1lLCB3d25fdCBub2RlX25hbWUpCisJCXUzMiBzX2lkLCBfX2JlMTYgb3hfaWQsIHd3bl90IHBvcnRfbmFtZSwgd3duX3Qgbm9kZV9uYW1lKQogewogCXJldHVybiBmY19hZGlzY194X2J1aWxkKGZjaHMsIGFkaXNjLCBkX2lkLCBzX2lkLCBveF9pZCwgcG9ydF9uYW1lLAogCQkJCW5vZGVfbmFtZSwgRkNfRUxTX0FESVNDKTsKQEAgLTQ4OCw3ICs0ODgsNyBAQAogCiB1MTYKIGZjX2FkaXNjX2FjY19idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCBzdHJ1Y3QgZmNfYWRpc2NfcyAqYWRpc2MsIHUzMiBkX2lkLAotCQkgICB1MzIgc19pZCwgdTE2IG94X2lkLCB3d25fdCBwb3J0X25hbWUsCisJCSAgIHUzMiBzX2lkLCBfX2JlMTYgb3hfaWQsIHd3bl90IHBvcnRfbmFtZSwKIAkJICAgd3duX3Qgbm9kZV9uYW1lKQogewogCXJldHVybiBmY19hZGlzY194X2J1aWxkKGZjaHMsIGFkaXNjLCBkX2lkLCBzX2lkLCBveF9pZCwgcG9ydF9uYW1lLApAQCAtNTkyLDcgKzU5Miw3IEBACiAKIHUxNgogZmNfbG9nb19hY2NfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdm9pZCAqcGxkLCB1MzIgZF9pZCwgdTMyIHNfaWQsCi0JCSAgdTE2IG94X2lkKQorCQkgIF9fYmUxNiBveF9pZCkKIHsKIAlzdHJ1Y3QgZmNfZWxzX2NtZF9zICphY2MgPSBwbGQ7CiAKQEAgLTYwNiw3ICs2MDYsNyBAQAogCiB1MTYKIGZjX2xzX3JqdF9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCBzdHJ1Y3QgZmNfbHNfcmp0X3MgKmxzX3JqdCwgdTMyIGRfaWQsCi0JCXUzMiBzX2lkLCB1MTYgb3hfaWQsIHU4IHJlYXNvbl9jb2RlLAorCQl1MzIgc19pZCwgX19iZTE2IG94X2lkLCB1OCByZWFzb25fY29kZSwKIAkJdTggcmVhc29uX2NvZGVfZXhwbCkKIHsKIAlmY19lbHNfcnNwX2J1aWxkKGZjaHMsIGRfaWQsIHNfaWQsIG94X2lkKTsKQEAgLTYyMiw3ICs2MjIsNyBAQAogCiB1MTYKIGZjX2JhX2FjY19idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCBzdHJ1Y3QgZmNfYmFfYWNjX3MgKmJhX2FjYywgdTMyIGRfaWQsCi0JCXUzMiBzX2lkLCB1MTYgb3hfaWQsIHUxNiByeF9pZCkKKwkJdTMyIHNfaWQsIF9fYmUxNiBveF9pZCwgdTE2IHJ4X2lkKQogewogCWZjX2Jsc19yc3BfYnVpbGQoZmNocywgZF9pZCwgc19pZCwgb3hfaWQpOwogCkBAIC02MzgsNyArNjM4LDcgQEAKIAogdTE2CiBmY19sc19hY2NfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgc3RydWN0IGZjX2Vsc19jbWRfcyAqZWxzX2NtZCwgdTMyIGRfaWQsCi0JCXUzMiBzX2lkLCB1MTYgb3hfaWQpCisJCXUzMiBzX2lkLCBfX2JlMTYgb3hfaWQpCiB7CiAJZmNfZWxzX3JzcF9idWlsZChmY2hzLCBkX2lkLCBzX2lkLCBveF9pZCk7CiAJbWVtc2V0KGVsc19jbWQsIDAsIHNpemVvZihzdHJ1Y3QgZmNfZWxzX2NtZF9zKSk7CkBAIC02NjYsNyArNjY2LDcgQEAKIAogdTE2CiBmY190cHJsb19hY2NfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgc3RydWN0IGZjX3RwcmxvX2FjY19zICp0cHJsb19hY2MsCi0JCXUzMiBkX2lkLCB1MzIgc19pZCwgdTE2IG94X2lkLCBpbnQgbnVtX3BhZ2VzKQorCQl1MzIgZF9pZCwgdTMyIHNfaWQsIF9fYmUxNiBveF9pZCwgaW50IG51bV9wYWdlcykKIHsKIAlpbnQgICAgICAgICAgICAgcGFnZTsKIApAQCAtNjkwLDcgKzY5MCw3IEBACiAKIHUxNgogZmNfcHJsb19hY2NfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgc3RydWN0IGZjX3BybG9fYWNjX3MgKnBybG9fYWNjLCB1MzIgZF9pZCwKLQkJICB1MzIgc19pZCwgdTE2IG94X2lkLCBpbnQgbnVtX3BhZ2VzKQorCQkgIHUzMiBzX2lkLCBfX2JlMTYgb3hfaWQsIGludCBudW1fcGFnZXMpCiB7CiAJaW50ICAgICAgICAgICAgIHBhZ2U7CiAKQEAgLTcyOCw3ICs3MjgsNyBAQAogCiB1MTYKIGZjX3JuaWRfYWNjX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHN0cnVjdCBmY19ybmlkX2FjY19zICpybmlkX2FjYywgdTMyIGRfaWQsCi0JCSAgdTMyIHNfaWQsIHUxNiBveF9pZCwgdTMyIGRhdGFfZm9ybWF0LAorCQkgIHUzMiBzX2lkLCBfX2JlMTYgb3hfaWQsIHUzMiBkYXRhX2Zvcm1hdCwKIAkJICBzdHJ1Y3QgZmNfcm5pZF9jb21tb25faWRfZGF0YV9zICpjb21tb25faWRfZGF0YSwKIAkJICBzdHJ1Y3QgZmNfcm5pZF9nZW5lcmFsX3RvcG9sb2d5X2RhdGFfcyAqZ2VuX3RvcG9fZGF0YSkKIHsKQEAgLTc3MCwxMCArNzcwLDEwIEBACiBmY19ycHNjMl9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCBzdHJ1Y3QgZmNfcnBzYzJfY21kX3MgKnJwc2MyLCB1MzIgZF9pZCwKIAkJdTMyIHNfaWQsIHUzMiAqcGlkX2xpc3QsIHUxNiBucGlkcykKIHsKLQl1MzIgZGN0bHJfaWQgPSBGQ19ET01BSU5fQ1RSTFIoYmZhX29zX2h0b24zYihkX2lkKSk7CisJdTMyIGRjdGxyX2lkID0gRkNfRE9NQUlOX0NUUkxSKGJmYV9odG9uM2IoZF9pZCkpOwogCWludCBpID0gMDsKIAotCWZjX2Vsc19yZXFfYnVpbGQoZmNocywgYmZhX29zX2h0b24zYihkY3Rscl9pZCksIHNfaWQsIDApOworCWZjX2Vsc19yZXFfYnVpbGQoZmNocywgYmZhX2h0b24zYihkY3Rscl9pZCksIHNfaWQsIDApOwogCiAJbWVtc2V0KHJwc2MyLCAwLCBzaXplb2Yoc3RydWN0IGZjX3Jwc2MyX2NtZF9zKSk7CiAKQEAgLTc4OCw3ICs3ODgsNyBAQAogCiB1MTYKIGZjX3Jwc2NfYWNjX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHN0cnVjdCBmY19ycHNjX2FjY19zICpycHNjX2FjYywKLQkJdTMyIGRfaWQsIHUzMiBzX2lkLCB1MTYgb3hfaWQsCisJCXUzMiBkX2lkLCB1MzIgc19pZCwgX19iZTE2IG94X2lkLAogCQkgIHN0cnVjdCBmY19ycHNjX3NwZWVkX2luZm9fcyAqb3Blcl9zcGVlZCkKIHsKIAltZW1zZXQocnBzY19hY2MsIDAsIHNpemVvZihzdHJ1Y3QgZmNfcnBzY19hY2NfcykpOwpAQCAtODA3LDExICs4MDcsNiBAQAogCXJldHVybiBzaXplb2Yoc3RydWN0IGZjX3Jwc2NfYWNjX3MpOwogfQogCi0vKgotICogVEJEIC0KLSAqIC4gZ2V0IHJpZCBvZiB1bm5lY2Vzc2FyeSBtZW1zZXRzCi0gKi8KLQogdTE2CiBmY19sb2dvX3JzcF9wYXJzZShzdHJ1Y3QgZmNoc19zICpmY2hzLCBpbnQgbGVuKQogewpAQCAtOTk1LDcgKzk5MCw3IEBACiB9CiAKIHUxNgotZmNfYmFfcmp0X2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHUzMiBkX2lkLCB1MzIgc19pZCwgdTE2IG94X2lkLAorZmNfYmFfcmp0X2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHUzMiBkX2lkLCB1MzIgc19pZCwgX19iZTE2IG94X2lkLAogCQl1MzIgcmVhc29uX2NvZGUsIHUzMiByZWFzb25fZXhwbCkKIHsKIAlzdHJ1Y3QgZmNfYmFfcmp0X3MgKmJhX3JqdCA9IChzdHJ1Y3QgZmNfYmFfcmp0X3MgKikgKGZjaHMgKyAxKTsKQEAgLTEwNDUsNyArMTA0MCw3IEBACiB7CiAJc3RydWN0IGN0X2hkcl9zICpjdGhkciA9IChzdHJ1Y3QgY3RfaGRyX3MgKikgcHlsZDsKIAlzdHJ1Y3QgZmNnc19naWRwbl9yZXFfcyAqZ2lkcG4gPSAoc3RydWN0IGZjZ3NfZ2lkcG5fcmVxX3MgKikoY3RoZHIgKyAxKTsKLQl1MzIgICAgICAgIGRfaWQgPSBiZmFfb3NfaHRvbjNiKEZDX05BTUVfU0VSVkVSKTsKKwl1MzIgICAgICAgIGRfaWQgPSBiZmFfaHRvbjNiKEZDX05BTUVfU0VSVkVSKTsKIAogCWZjX2dzX2ZjaGRyX2J1aWxkKGZjaHMsIGRfaWQsIHNfaWQsIG94X2lkKTsKIAlmY19nc19jdGhkcl9idWlsZChjdGhkciwgc19pZCwgR1NfR0lEX1BOKTsKQEAgLTEwNjEsNyArMTA1Niw3IEBACiB7CiAJc3RydWN0IGN0X2hkcl9zICpjdGhkciA9IChzdHJ1Y3QgY3RfaGRyX3MgKikgcHlsZDsKIAlmY2dzX2dwbmlkX3JlcV90ICpncG5pZCA9IChmY2dzX2dwbmlkX3JlcV90ICopIChjdGhkciArIDEpOwotCXUzMiAgICAgICAgZF9pZCA9IGJmYV9vc19odG9uM2IoRkNfTkFNRV9TRVJWRVIpOworCXUzMiAgICAgICAgZF9pZCA9IGJmYV9odG9uM2IoRkNfTkFNRV9TRVJWRVIpOwogCiAJZmNfZ3NfZmNoZHJfYnVpbGQoZmNocywgZF9pZCwgc19pZCwgb3hfaWQpOwogCWZjX2dzX2N0aGRyX2J1aWxkKGN0aGRyLCBzX2lkLCBHU19HUE5fSUQpOwpAQCAtMTA3Nyw3ICsxMDcyLDcgQEAKIHsKIAlzdHJ1Y3QgY3RfaGRyX3MgKmN0aGRyID0gKHN0cnVjdCBjdF9oZHJfcyAqKSBweWxkOwogCWZjZ3NfZ25uaWRfcmVxX3QgKmdubmlkID0gKGZjZ3NfZ25uaWRfcmVxX3QgKikgKGN0aGRyICsgMSk7Ci0JdTMyICAgICAgICBkX2lkID0gYmZhX29zX2h0b24zYihGQ19OQU1FX1NFUlZFUik7CisJdTMyICAgICAgICBkX2lkID0gYmZhX2h0b24zYihGQ19OQU1FX1NFUlZFUik7CiAKIAlmY19nc19mY2hkcl9idWlsZChmY2hzLCBkX2lkLCBzX2lkLCBveF9pZCk7CiAJZmNfZ3NfY3RoZHJfYnVpbGQoY3RoZHIsIHNfaWQsIEdTX0dOTl9JRCk7CkBAIC0xMTA0LDcgKzEwOTksNyBAQAogZmNfc2NyX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHN0cnVjdCBmY19zY3JfcyAqc2NyLAogCQl1OCBzZXRfYnJfcmVnLCB1MzIgc19pZCwgdTE2IG94X2lkKQogewotCXUzMiAgICAgICAgZF9pZCA9IGJmYV9vc19odG9uM2IoRkNfRkFCUklDX0NPTlRST0xMRVIpOworCXUzMiAgICAgICAgZF9pZCA9IGJmYV9odG9uM2IoRkNfRkFCUklDX0NPTlRST0xMRVIpOwogCiAJZmNfZWxzX3JlcV9idWlsZChmY2hzLCBkX2lkLCBzX2lkLCBveF9pZCk7CiAKQEAgLTExMjEsNyArMTExNiw3IEBACiBmY19yc2NuX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHN0cnVjdCBmY19yc2NuX3BsX3MgKnJzY24sCiAJCXUzMiBzX2lkLCB1MTYgb3hfaWQpCiB7Ci0JdTMyICAgICAgICBkX2lkID0gYmZhX29zX2h0b24zYihGQ19GQUJSSUNfQ09OVFJPTExFUik7CisJdTMyICAgICAgICBkX2lkID0gYmZhX2h0b24zYihGQ19GQUJSSUNfQ09OVFJPTExFUik7CiAJdTE2ICAgICAgICBwYXlsZGxlbjsKIAogCWZjX2Vsc19yZXFfYnVpbGQoZmNocywgZF9pZCwgc19pZCwgb3hfaWQpOwpAQCAtMTE0Myw3ICsxMTM4LDcgQEAKIHsKIAlzdHJ1Y3QgY3RfaGRyX3MgKmN0aGRyID0gKHN0cnVjdCBjdF9oZHJfcyAqKSBweWxkOwogCXN0cnVjdCBmY2dzX3JmdGlkX3JlcV9zICpyZnRpZCA9IChzdHJ1Y3QgZmNnc19yZnRpZF9yZXFfcyAqKShjdGhkciArIDEpOwotCXUzMiAgICAgICAgdHlwZV92YWx1ZSwgZF9pZCA9IGJmYV9vc19odG9uM2IoRkNfTkFNRV9TRVJWRVIpOworCXUzMiAgICAgICAgdHlwZV92YWx1ZSwgZF9pZCA9IGJmYV9odG9uM2IoRkNfTkFNRV9TRVJWRVIpOwogCXU4ICAgICAgICAgaW5kZXg7CiAKIAlmY19nc19mY2hkcl9idWlsZChmY2hzLCBkX2lkLCBzX2lkLCBveF9pZCk7CkBAIC0xMTY3LDcgKzExNjIsNyBAQAogewogCXN0cnVjdCBjdF9oZHJfcyAqY3RoZHIgPSAoc3RydWN0IGN0X2hkcl9zICopIHB5bGQ7CiAJc3RydWN0IGZjZ3NfcmZ0aWRfcmVxX3MgKnJmdGlkID0gKHN0cnVjdCBmY2dzX3JmdGlkX3JlcV9zICopKGN0aGRyICsgMSk7Ci0JdTMyICAgICAgICBkX2lkID0gYmZhX29zX2h0b24zYihGQ19OQU1FX1NFUlZFUik7CisJdTMyICAgICAgICBkX2lkID0gYmZhX2h0b24zYihGQ19OQU1FX1NFUlZFUik7CiAKIAlmY19nc19mY2hkcl9idWlsZChmY2hzLCBkX2lkLCBzX2lkLCBveF9pZCk7CiAJZmNfZ3NfY3RoZHJfYnVpbGQoY3RoZHIsIHNfaWQsIEdTX1JGVF9JRCk7CkBAIC0xMTg3LDcgKzExODIsNyBAQAogewogCXN0cnVjdCBjdF9oZHJfcyAqY3RoZHIgPSAoc3RydWN0IGN0X2hkcl9zICopIHB5bGQ7CiAJc3RydWN0IGZjZ3NfcmZmaWRfcmVxX3MgKnJmZmlkID0gKHN0cnVjdCBmY2dzX3JmZmlkX3JlcV9zICopKGN0aGRyICsgMSk7Ci0JdTMyICAgICAgICAgZF9pZCA9IGJmYV9vc19odG9uM2IoRkNfTkFNRV9TRVJWRVIpOworCXUzMiAgICAgICAgIGRfaWQgPSBiZmFfaHRvbjNiKEZDX05BTUVfU0VSVkVSKTsKIAogCWZjX2dzX2ZjaGRyX2J1aWxkKGZjaHMsIGRfaWQsIHNfaWQsIG94X2lkKTsKIAlmY19nc19jdGhkcl9idWlsZChjdGhkciwgc19pZCwgR1NfUkZGX0lEKTsKQEAgLTEyMDksNyArMTIwNCw3IEBACiAJc3RydWN0IGN0X2hkcl9zICpjdGhkciA9IChzdHJ1Y3QgY3RfaGRyX3MgKikgcHlsZDsKIAlzdHJ1Y3QgZmNnc19yc3BuaWRfcmVxX3MgKnJzcG5pZCA9CiAJCQkoc3RydWN0IGZjZ3NfcnNwbmlkX3JlcV9zICopKGN0aGRyICsgMSk7Ci0JdTMyICAgICAgICBkX2lkID0gYmZhX29zX2h0b24zYihGQ19OQU1FX1NFUlZFUik7CisJdTMyICAgICAgICBkX2lkID0gYmZhX2h0b24zYihGQ19OQU1FX1NFUlZFUik7CiAKIAlmY19nc19mY2hkcl9idWlsZChmY2hzLCBkX2lkLCBzX2lkLCBveF9pZCk7CiAJZmNfZ3NfY3RoZHJfYnVpbGQoY3RoZHIsIHNfaWQsIEdTX1JTUE5fSUQpOwpAQCAtMTIyOSw3ICsxMjI0LDcgQEAKIAogCXN0cnVjdCBjdF9oZHJfcyAqY3RoZHIgPSAoc3RydWN0IGN0X2hkcl9zICopIHB5bGQ7CiAJc3RydWN0IGZjZ3NfZ2lkZnRfcmVxX3MgKmdpZGZ0ID0gKHN0cnVjdCBmY2dzX2dpZGZ0X3JlcV9zICopKGN0aGRyICsgMSk7Ci0JdTMyICAgICAgICBkX2lkID0gYmZhX29zX2h0b24zYihGQ19OQU1FX1NFUlZFUik7CisJdTMyICAgICAgICBkX2lkID0gYmZhX2h0b24zYihGQ19OQU1FX1NFUlZFUik7CiAKIAlmY19nc19mY2hkcl9idWlsZChmY2hzLCBkX2lkLCBzX2lkLCAwKTsKIApAQCAtMTI0OSw3ICsxMjQ0LDcgQEAKIHsKIAlzdHJ1Y3QgY3RfaGRyX3MgKmN0aGRyID0gKHN0cnVjdCBjdF9oZHJfcyAqKSBweWxkOwogCXN0cnVjdCBmY2dzX3JwbmlkX3JlcV9zICpycG5pZCA9IChzdHJ1Y3QgZmNnc19ycG5pZF9yZXFfcyAqKShjdGhkciArIDEpOwotCXUzMiAgICAgICAgZF9pZCA9IGJmYV9vc19odG9uM2IoRkNfTkFNRV9TRVJWRVIpOworCXUzMiAgICAgICAgZF9pZCA9IGJmYV9odG9uM2IoRkNfTkFNRV9TRVJWRVIpOwogCiAJZmNfZ3NfZmNoZHJfYnVpbGQoZmNocywgZF9pZCwgc19pZCwgMCk7CiAJZmNfZ3NfY3RoZHJfYnVpbGQoY3RoZHIsIHNfaWQsIEdTX1JQTl9JRCk7CkBAIC0xMjY3LDcgKzEyNjIsNyBAQAogewogCXN0cnVjdCBjdF9oZHJfcyAqY3RoZHIgPSAoc3RydWN0IGN0X2hkcl9zICopIHB5bGQ7CiAJc3RydWN0IGZjZ3Nfcm5uaWRfcmVxX3MgKnJubmlkID0gKHN0cnVjdCBmY2dzX3JubmlkX3JlcV9zICopKGN0aGRyICsgMSk7Ci0JdTMyICAgICAgICBkX2lkID0gYmZhX29zX2h0b24zYihGQ19OQU1FX1NFUlZFUik7CisJdTMyICAgICAgICBkX2lkID0gYmZhX2h0b24zYihGQ19OQU1FX1NFUlZFUik7CiAKIAlmY19nc19mY2hkcl9idWlsZChmY2hzLCBkX2lkLCBzX2lkLCAwKTsKIAlmY19nc19jdGhkcl9idWlsZChjdGhkciwgc19pZCwgR1NfUk5OX0lEKTsKQEAgLTEyODYsNyArMTI4MSw3IEBACiAJc3RydWN0IGN0X2hkcl9zICpjdGhkciA9IChzdHJ1Y3QgY3RfaGRyX3MgKikgcHlsZDsKIAlzdHJ1Y3QgZmNnc19yY3NpZF9yZXFfcyAqcmNzaWQgPQogCQkJKHN0cnVjdCBmY2dzX3Jjc2lkX3JlcV9zICopIChjdGhkciArIDEpOwotCXUzMiAgICAgICAgZF9pZCA9IGJmYV9vc19odG9uM2IoRkNfTkFNRV9TRVJWRVIpOworCXUzMiAgICAgICAgZF9pZCA9IGJmYV9odG9uM2IoRkNfTkFNRV9TRVJWRVIpOwogCiAJZmNfZ3NfZmNoZHJfYnVpbGQoZmNocywgZF9pZCwgc19pZCwgMCk7CiAJZmNfZ3NfY3RoZHJfYnVpbGQoY3RoZHIsIHNfaWQsIEdTX1JDU19JRCk7CkBAIC0xMzA0LDcgKzEyOTksNyBAQAogewogCXN0cnVjdCBjdF9oZHJfcyAqY3RoZHIgPSAoc3RydWN0IGN0X2hkcl9zICopIHB5bGQ7CiAJc3RydWN0IGZjZ3NfcnB0aWRfcmVxX3MgKnJwdGlkID0gKHN0cnVjdCBmY2dzX3JwdGlkX3JlcV9zICopKGN0aGRyICsgMSk7Ci0JdTMyICAgICAgICBkX2lkID0gYmZhX29zX2h0b24zYihGQ19OQU1FX1NFUlZFUik7CisJdTMyICAgICAgICBkX2lkID0gYmZhX2h0b24zYihGQ19OQU1FX1NFUlZFUik7CiAKIAlmY19nc19mY2hkcl9idWlsZChmY2hzLCBkX2lkLCBzX2lkLCAwKTsKIAlmY19nc19jdGhkcl9idWlsZChjdGhkciwgc19pZCwgR1NfUlBUX0lEKTsKQEAgLTEzMjEsNyArMTMxNiw3IEBACiB7CiAJc3RydWN0IGN0X2hkcl9zICpjdGhkciA9IChzdHJ1Y3QgY3RfaGRyX3MgKikgcHlsZDsKIAlzdHJ1Y3QgZmNnc19nYW54dF9yZXFfcyAqZ2FueHQgPSAoc3RydWN0IGZjZ3NfZ2FueHRfcmVxX3MgKikoY3RoZHIgKyAxKTsKLQl1MzIgICAgICAgIGRfaWQgPSBiZmFfb3NfaHRvbjNiKEZDX05BTUVfU0VSVkVSKTsKKwl1MzIgICAgICAgIGRfaWQgPSBiZmFfaHRvbjNiKEZDX05BTUVfU0VSVkVSKTsKIAogCWZjX2dzX2ZjaGRyX2J1aWxkKGZjaHMsIGRfaWQsIHNfaWQsIDApOwogCWZjX2dzX2N0aGRyX2J1aWxkKGN0aGRyLCBzX2lkLCBHU19HQV9OWFQpOwpAQCAtMTM0MSw3ICsxMzM2LDcgQEAKIHsKIAogCXN0cnVjdCBjdF9oZHJfcyAqY3RoZHIgPSAoc3RydWN0IGN0X2hkcl9zICopIHB5bGQ7Ci0JdTMyICAgICAgICBkX2lkID0gYmZhX29zX2h0b24zYihGQ19NR01UX1NFUlZFUik7CisJdTMyICAgICAgICBkX2lkID0gYmZhX2h0b24zYihGQ19NR01UX1NFUlZFUik7CiAKIAlmY19nc19mY2hkcl9idWlsZChmY2hzLCBkX2lkLCBzX2lkLCAwKTsKIAlmY19nc19mZG1pX2N0aGRyX2J1aWxkKGN0aGRyLCBzX2lkLCBjbWRfY29kZSk7CkBAIC0xMzU2LDcgKzEzNTEsNyBAQAogZmNfZ2V0X2ZjNHR5cGVfYml0bWFzayh1OCBmYzRfdHlwZSwgdTggKmJpdF9tYXNrKQogewogCXU4ICAgICAgICAgaW5kZXg7Ci0JdTMyICAgICAgICpwdHIgPSAodTMyICopIGJpdF9tYXNrOworCV9fYmUzMiAgICAgICAqcHRyID0gKF9fYmUzMiAqKSBiaXRfbWFzazsKIAl1MzIgICAgICAgIHR5cGVfdmFsdWU7CiAKIAkvKgpAQCAtMTM3Nyw3ICsxMzcyLDcgQEAKIHsKIAlzdHJ1Y3QgY3RfaGRyX3MgKmN0aGRyID0gKHN0cnVjdCBjdF9oZHJfcyAqKSBweWxkOwogCWZjZ3NfZ21hbF9yZXFfdCAqZ21hbCA9IChmY2dzX2dtYWxfcmVxX3QgKikgKGN0aGRyICsgMSk7Ci0JdTMyICAgICAgICBkX2lkID0gYmZhX29zX2h0b24zYihGQ19NR01UX1NFUlZFUik7CisJdTMyICAgICAgICBkX2lkID0gYmZhX2h0b24zYihGQ19NR01UX1NFUlZFUik7CiAKIAlmY19nc19mY2hkcl9idWlsZChmY2hzLCBkX2lkLCBzX2lkLCAwKTsKIAlmY19nc19tc19jdGhkcl9idWlsZChjdGhkciwgc19pZCwgR1NfRkNfR01BTF9DTUQsCkBAIC0xMzk3LDcgKzEzOTIsNyBAQAogewogCXN0cnVjdCBjdF9oZHJfcyAqY3RoZHIgPSAoc3RydWN0IGN0X2hkcl9zICopIHB5bGQ7CiAJZmNnc19nZm5fcmVxX3QgKmdmbiA9IChmY2dzX2dmbl9yZXFfdCAqKSAoY3RoZHIgKyAxKTsKLQl1MzIgICAgICAgIGRfaWQgPSBiZmFfb3NfaHRvbjNiKEZDX01HTVRfU0VSVkVSKTsKKwl1MzIgICAgICAgIGRfaWQgPSBiZmFfaHRvbjNiKEZDX01HTVRfU0VSVkVSKTsKIAogCWZjX2dzX2ZjaGRyX2J1aWxkKGZjaHMsIGRfaWQsIHNfaWQsIDApOwogCWZjX2dzX21zX2N0aGRyX2J1aWxkKGN0aGRyLCBzX2lkLCBHU19GQ19HRk5fQ01ELApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNidWlsZC5oIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNidWlsZC5oCmluZGV4IDczYWJkMDIuLmVjZTUxZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2ZjYnVpbGQuaAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY2J1aWxkLmgKQEAgLTIxLDcgKzIxLDcgQEAKICNpZm5kZWYgX19GQ0JVSUxEX0hfXwogI2RlZmluZSBfX0ZDQlVJTERfSF9fCiAKLSNpbmNsdWRlICJiZmFfb3NfaW5jLmgiCisjaW5jbHVkZSAiYmZhZF9kcnYuaCIKICNpbmNsdWRlICJiZmFfZmMuaCIKICNpbmNsdWRlICJiZmFfZGVmc19mY3MuaCIKIApAQCAtMTM4LDcgKzEzOCw3IEBACiAJCQkgICAgICAgdTE2IHBkdV9zaXplKTsKIAogdTE2ICAgICAgICBmY19mbG9naV9hY2NfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgc3RydWN0IGZjX2xvZ2lfcyAqZmxvZ2ksCi0JCQkJICAgdTMyIHNfaWQsIHUxNiBveF9pZCwKKwkJCQkgICB1MzIgc19pZCwgX19iZTE2IG94X2lkLAogCQkJCSAgIHd3bl90IHBvcnRfbmFtZSwgd3duX3Qgbm9kZV9uYW1lLAogCQkJCSAgIHUxNiBwZHVfc2l6ZSwKIAkJCQkgICB1MTYgbG9jYWxfYmJfY3JlZGl0cyk7CkBAIC0xODYsNyArMTg2LDcgQEAKIAkJCQkgICB1MTYgcGR1X3NpemUpOwogCiB1MTYgICAgICAgIGZjX2FkaXNjX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHN0cnVjdCBmY19hZGlzY19zICphZGlzYywKLQkJCXUzMiBkX2lkLCB1MzIgc19pZCwgdTE2IG94X2lkLCB3d25fdCBwb3J0X25hbWUsCisJCQl1MzIgZF9pZCwgdTMyIHNfaWQsIF9fYmUxNiBveF9pZCwgd3duX3QgcG9ydF9uYW1lLAogCQkJICAgICAgIHd3bl90IG5vZGVfbmFtZSk7CiAKIGVudW0gZmNfcGFyc2Vfc3RhdHVzIGZjX2FkaXNjX3BhcnNlKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHZvaWQgKnBsZCwKQEAgLTE5NiwyMCArMTk2LDIwIEBACiAJCQkJIHd3bl90IHBvcnRfbmFtZSwgd3duX3Qgbm9kZV9uYW1lKTsKIAogdTE2ICAgICAgICBmY19hZGlzY19hY2NfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgc3RydWN0IGZjX2FkaXNjX3MgKmFkaXNjLAotCQkJCSAgIHUzMiBkX2lkLCB1MzIgc19pZCwgdTE2IG94X2lkLAorCQkJCSAgIHUzMiBkX2lkLCB1MzIgc19pZCwgX19iZTE2IG94X2lkLAogCQkJCSAgIHd3bl90IHBvcnRfbmFtZSwgd3duX3Qgbm9kZV9uYW1lKTsKIHUxNiAgICAgICAgZmNfbHNfcmp0X2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHN0cnVjdCBmY19sc19yanRfcyAqbHNfcmp0LAotCQkJCXUzMiBkX2lkLCB1MzIgc19pZCwgdTE2IG94X2lkLAorCQkJCXUzMiBkX2lkLCB1MzIgc19pZCwgX19iZTE2IG94X2lkLAogCQkJCXU4IHJlYXNvbl9jb2RlLCB1OCByZWFzb25fY29kZV9leHBsKTsKIHUxNiAgICAgICAgZmNfbHNfYWNjX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHN0cnVjdCBmY19lbHNfY21kX3MgKmVsc19jbWQsCi0JCQkJdTMyIGRfaWQsIHUzMiBzX2lkLCB1MTYgb3hfaWQpOworCQkJCXUzMiBkX2lkLCB1MzIgc19pZCwgX19iZTE2IG94X2lkKTsKIHUxNiAgICAgICAgZmNfcHJsaV9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB2b2lkICpwbGQsIHUzMiBkX2lkLAogCQkJICAgICAgdTMyIHNfaWQsIHUxNiBveF9pZCk7CiAKIGVudW0gZmNfcGFyc2Vfc3RhdHVzIGZjX3BybGlfcnNwX3BhcnNlKHN0cnVjdCBmY19wcmxpX3MgKnBybGksIGludCBsZW4pOwogCiB1MTYgICAgICAgIGZjX3BybGlfYWNjX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHZvaWQgKnBsZCwgdTMyIGRfaWQsCi0JCQkJICB1MzIgc19pZCwgdTE2IG94X2lkLAorCQkJCSAgdTMyIHNfaWQsIF9fYmUxNiBveF9pZCwKIAkJCQkgIGVudW0gYmZhX2xwb3J0X3JvbGUgcm9sZSk7CiAKIHUxNiAgICAgICAgZmNfcm5pZF9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCBzdHJ1Y3QgZmNfcm5pZF9jbWRfcyAqcm5pZCwKQEAgLTIxOCw3ICsyMTgsNyBAQAogCiB1MTYgICAgICAgIGZjX3JuaWRfYWNjX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsCiAJCQlzdHJ1Y3QgZmNfcm5pZF9hY2NfcyAqcm5pZF9hY2MsIHUzMiBkX2lkLCB1MzIgc19pZCwKLQkJCXUxNiBveF9pZCwgdTMyIGRhdGFfZm9ybWF0LAorCQkJX19iZTE2IG94X2lkLCB1MzIgZGF0YV9mb3JtYXQsCiAJCQlzdHJ1Y3QgZmNfcm5pZF9jb21tb25faWRfZGF0YV9zICpjb21tb25faWRfZGF0YSwKIAkJCXN0cnVjdCBmY19ybmlkX2dlbmVyYWxfdG9wb2xvZ3lfZGF0YV9zICpnZW5fdG9wb19kYXRhKTsKIApAQCAtMjI4LDcgKzIyOCw3IEBACiAJCQkgICAgICB1MzIgZF9pZCwgdTMyIHNfaWQsIHUxNiBveF9pZCk7CiB1MTYgICAgICAgIGZjX3Jwc2NfYWNjX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsCiAJCQlzdHJ1Y3QgZmNfcnBzY19hY2NfcyAqcnBzY19hY2MsIHUzMiBkX2lkLCB1MzIgc19pZCwKLQkJCXUxNiBveF9pZCwgc3RydWN0IGZjX3Jwc2Nfc3BlZWRfaW5mb19zICpvcGVyX3NwZWVkKTsKKwkJCV9fYmUxNiBveF9pZCwgc3RydWN0IGZjX3Jwc2Nfc3BlZWRfaW5mb19zICpvcGVyX3NwZWVkKTsKIHUxNiAgICAgICAgZmNfZ2lkX2Z0X2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHZvaWQgKnBsZCwgdTMyIHNfaWQsCiAJCQkJdTggZmM0X3R5cGUpOwogCkBAIC0yNTEsNyArMjUxLDcgQEAKIAkJCSAgICAgIHUzMiBzX2lkLCB1MTYgb3hfaWQsIHd3bl90IHBvcnRfbmFtZSk7CiAKIHUxNiAgICAgICAgZmNfbG9nb19hY2NfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdm9pZCAqcGxkLCB1MzIgZF9pZCwKLQkJCQkgIHUzMiBzX2lkLCB1MTYgb3hfaWQpOworCQkJCSAgdTMyIHNfaWQsIF9fYmUxNiBveF9pZCk7CiAKIHUxNiAgICAgICAgZmNfZmRtaV9yZXFoZHJfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdm9pZCAqcHlsZCwgdTMyIHNfaWQsCiAJCQkJICAgICB1MTYgY21kX2NvZGUpOwpAQCAtMjYxLDcgKzI2MSw3IEBACiB2b2lkCQlmY19nZXRfZmM0dHlwZV9iaXRtYXNrKHU4IGZjNF90eXBlLCB1OCAqYml0X21hc2spOwogCiB2b2lkCQlmY19lbHNfcmVxX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHUzMiBkX2lkLCB1MzIgc19pZCwKLQkJCQkJIHUxNiBveF9pZCk7CisJCQkJCSBfX2JlMTYgb3hfaWQpOwogCiBlbnVtIGZjX3BhcnNlX3N0YXR1cwlmY19lbHNfcnNwX3BhcnNlKHN0cnVjdCBmY2hzX3MgKmZjaHMsIGludCBsZW4pOwogCkBAIC0yNzQsMTUgKzI3NCwxNSBAQAogCQkJCQl3d25fdCBwb3J0X25hbWUpOwogCiB1MTYgZmNfYmFfYWNjX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHN0cnVjdCBmY19iYV9hY2NfcyAqYmFfYWNjLCB1MzIgZF9pZCwKLQkJdTMyIHNfaWQsIHUxNiBveF9pZCwgdTE2IHJ4X2lkKTsKKwkJdTMyIHNfaWQsIF9fYmUxNiBveF9pZCwgdTE2IHJ4X2lkKTsKIAogaW50IGZjX2xvZ291dF9wYXJhbXNfcGFnZXMoc3RydWN0IGZjaHNfcyAqZmNfZnJhbWUsIHU4IGVsc19jb2RlKTsKIAogdTE2IGZjX3RwcmxvX2FjY19idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCBzdHJ1Y3QgZmNfdHBybG9fYWNjX3MgKnRwcmxvX2FjYywKLQkJdTMyIGRfaWQsIHUzMiBzX2lkLCB1MTYgb3hfaWQsIGludCBudW1fcGFnZXMpOworCQl1MzIgZF9pZCwgdTMyIHNfaWQsIF9fYmUxNiBveF9pZCwgaW50IG51bV9wYWdlcyk7CiAKIHUxNiBmY19wcmxvX2FjY19idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCBzdHJ1Y3QgZmNfcHJsb19hY2NfcyAqcHJsb19hY2MsCi0JCXUzMiBkX2lkLCB1MzIgc19pZCwgdTE2IG94X2lkLCBpbnQgbnVtX3BhZ2VzKTsKKwkJdTMyIGRfaWQsIHUzMiBzX2lkLCBfX2JlMTYgb3hfaWQsIGludCBudW1fcGFnZXMpOwogCiB1MTYgZmNfbG9nb19yc3BfcGFyc2Uoc3RydWN0IGZjaHNfcyAqZmNocywgaW50IGxlbik7CiAKQEAgLTMwNCw3ICszMDQsNyBAQAogdTE2IGZjX3RwcmxvX3JzcF9wYXJzZShzdHJ1Y3QgZmNoc19zICpmY2hzLCBpbnQgbGVuKTsKIAogdTE2IGZjX2JhX3JqdF9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB1MzIgZF9pZCwgdTMyIHNfaWQsCi0JCXUxNiBveF9pZCwgdTMyIHJlYXNvbl9jb2RlLCB1MzIgcmVhc29uX2V4cGwpOworCQlfX2JlMTYgb3hfaWQsIHUzMiByZWFzb25fY29kZSwgdTMyIHJlYXNvbl9leHBsKTsKIAogdTE2IGZjX2dubmlkX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHZvaWQgKnB5bGQsIHUzMiBzX2lkLCB1MTYgb3hfaWQsCiAJCXUzMiBwb3J0X2lkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2ZjcGltLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3BpbS5jCmluZGV4IDEzNWM0NDIuLjljNDEwYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2ZjcGltLmMKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNwaW0uYwpAQCAtMTUsMTcgKzE1LDEyIEBACiAgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAgKi8KIAorI2luY2x1ZGUgImJmYWRfZHJ2LmgiCiAjaW5jbHVkZSAiYmZhX21vZHVsZXMuaCIKLSNpbmNsdWRlICJiZmFfY2JfaW9pbS5oIgogCiBCRkFfVFJDX0ZJTEUoSEFMLCBGQ1BJTSk7CiBCRkFfTU9EVUxFKGZjcGltKTsKIAotCi0jZGVmaW5lIGJmYV9mY3BpbV9hZGRfaW9zdGF0cyhfX2wsIF9fciwgX19zdGF0cykJXAotCShfX2wtPl9fc3RhdHMgKz0gX19yLT5fX3N0YXRzKQotCi0KIC8qCiAgKiAgQkZBIElUTklNIFJlbGF0ZWQgZGVmaW5pdGlvbnMKICAqLwpAQCAtMzcsMTIgKzMyLDEyIEBACiAjZGVmaW5lIGJmYV9mY3BpbV9hZGRpdG4oX19pdG5pbSkJCQkJCVwKIAlsaXN0X2FkZF90YWlsKCYoX19pdG5pbSktPnFlLCAmKF9faXRuaW0pLT5mY3BpbS0+aXRuaW1fcSkKICNkZWZpbmUgYmZhX2ZjcGltX2RlbGl0bihfX2l0bmltKQlkbyB7CQkJCVwKLQliZmFfYXNzZXJ0KGJmYV9xX2lzX29uX3EoJihfX2l0bmltKS0+ZmNwaW0tPml0bmltX3EsIF9faXRuaW0pKTsgICAgICBcCisJV0FSTl9PTighYmZhX3FfaXNfb25fcSgmKF9faXRuaW0pLT5mY3BpbS0+aXRuaW1fcSwgX19pdG5pbSkpOyAgIFwKIAliZmFfaXRuaW1fdXBkYXRlX2RlbF9pdG5fc3RhdHMoX19pdG5pbSk7ICAgICAgXAogCWxpc3RfZGVsKCYoX19pdG5pbSktPnFlKTsgICAgICBcCi0JYmZhX2Fzc2VydChsaXN0X2VtcHR5KCYoX19pdG5pbSktPmlvX3EpKTsgICAgICBcCi0JYmZhX2Fzc2VydChsaXN0X2VtcHR5KCYoX19pdG5pbSktPmlvX2NsZWFudXBfcSkpOyAgICAgIFwKLQliZmFfYXNzZXJ0KGxpc3RfZW1wdHkoJihfX2l0bmltKS0+cGVuZGluZ19xKSk7ICAgICAgXAorCVdBUk5fT04oIWxpc3RfZW1wdHkoJihfX2l0bmltKS0+aW9fcSkpOwkJCQlcCisJV0FSTl9PTighbGlzdF9lbXB0eSgmKF9faXRuaW0pLT5pb19jbGVhbnVwX3EpKTsJCQlcCisJV0FSTl9PTighbGlzdF9lbXB0eSgmKF9faXRuaW0pLT5wZW5kaW5nX3EpKTsJCQlcCiB9IHdoaWxlICgwKQogCiAjZGVmaW5lIGJmYV9pdG5pbV9vbmxpbmVfY2IoX19pdG5pbSkgZG8gewkJCQlcCkBAIC03MywxMCArNjgsOCBAQAogfSB3aGlsZSAoMCkKIAogLyoKLSAqICBiZmFfaXRuaW1fc20gQkZBIGl0bmltIHN0YXRlIG1hY2hpbmUKKyAqICBpdG5pbSBzdGF0ZSBtYWNoaW5lIGV2ZW50CiAgKi8KLQotCiBlbnVtIGJmYV9pdG5pbV9ldmVudCB7CiAJQkZBX0lUTklNX1NNX0NSRUFURSA9IDEsCS8qICBpdG5pbSBpcyBjcmVhdGVkICovCiAJQkZBX0lUTklNX1NNX09OTElORSA9IDIsCS8qICBpdG5pbSBpcyBvbmxpbmUgKi8KQEAgLTEwNyw5ICsxMDAsNiBAQAogCWlmICgoX19mY3BpbSktPnByb2ZpbGVfc3RhcnQpCQkJCQlcCiAJCShfX2ZjcGltKS0+cHJvZmlsZV9zdGFydChfX2lvaW0pOwkJCVwKIH0gd2hpbGUgKDApCi0vKgotICogIGhhbF9pb2ltX3NtCi0gKi8KIAogLyoKICAqIElPIHN0YXRlIG1hY2hpbmUgZXZlbnRzCkBAIC0yMjEsOCArMjExLDcgQEAKICAqIGZvcndhcmQgZGVjbGFyYXRpb24gZm9yIEJGQSBJT0lNIGZ1bmN0aW9ucwogICovCiBzdGF0aWMgYmZhX2Jvb2xlYW5fdAliZmFfaW9pbV9zZW5kX2lvcmVxKHN0cnVjdCBiZmFfaW9pbV9zICppb2ltKTsKLXN0YXRpYyBiZmFfYm9vbGVhbl90CWJmYV9pb2ltX3NnZV9zZXR1cChzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSk7Ci1zdGF0aWMgdm9pZAkJYmZhX2lvaW1fc2dwZ19zZXR1cChzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSk7CitzdGF0aWMgYmZhX2Jvb2xlYW5fdAliZmFfaW9pbV9zZ3BnX2FsbG9jKHN0cnVjdCBiZmFfaW9pbV9zICppb2ltKTsKIHN0YXRpYyBiZmFfYm9vbGVhbl90CWJmYV9pb2ltX3NlbmRfYWJvcnQoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0pOwogc3RhdGljIHZvaWQJCWJmYV9pb2ltX25vdGlmeV9jbGVhbnVwKHN0cnVjdCBiZmFfaW9pbV9zICppb2ltKTsKIHN0YXRpYyB2b2lkIF9fYmZhX2NiX2lvaW1fZ29vZF9jb21wKHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKTsKQEAgLTIzMiw3ICsyMjEsNiBAQAogc3RhdGljIHZvaWQgX19iZmFfY2JfaW9pbV9wYXRodG92KHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKTsKIHN0YXRpYyBiZmFfYm9vbGVhbl90ICAgIGJmYV9pb2ltX2lzX2Fib3J0YWJsZShzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSk7CiAKLQogLyoKICAqIGZvcndhcmQgZGVjbGFyYXRpb24gb2YgQkZBIElPIHN0YXRlIG1hY2hpbmUKICAqLwpAQCAtMjYwLDE0ICsyNDgsMTMgQEAKIAkJCQkJZW51bSBiZmFfaW9pbV9ldmVudCBldmVudCk7CiBzdGF0aWMgdm9pZAliZmFfaW9pbV9zbV9jbW5kX3JldHJ5KHN0cnVjdCBiZmFfaW9pbV9zICppb2ltLAogCQkJCQllbnVtIGJmYV9pb2ltX2V2ZW50IGV2ZW50KTsKLQogLyoKICAqIGZvcndhcmQgZGVjbGFyYXRpb24gZm9yIEJGQSBUU0tJTSBmdW5jdGlvbnMKICAqLwogc3RhdGljIHZvaWQgICAgIF9fYmZhX2NiX3Rza2ltX2RvbmUodm9pZCAqY2JhcmcsIGJmYV9ib29sZWFuX3QgY29tcGxldGUpOwogc3RhdGljIHZvaWQgICAgIF9fYmZhX2NiX3Rza2ltX2ZhaWxlZCh2b2lkICpjYmFyZywgYmZhX2Jvb2xlYW5fdCBjb21wbGV0ZSk7CiBzdGF0aWMgYmZhX2Jvb2xlYW5fdCBiZmFfdHNraW1fbWF0Y2hfc2NvcGUoc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSwKLQkJCQkJbHVuX3QgbHVuKTsKKwkJCQkJc3RydWN0IHNjc2lfbHVuIGx1bik7CiBzdGF0aWMgdm9pZCAgICAgYmZhX3Rza2ltX2dhdGhlcl9pb3Moc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSk7CiBzdGF0aWMgdm9pZCAgICAgYmZhX3Rza2ltX2NsZWFucF9jb21wKHZvaWQgKnRza2ltX2NiYXJnKTsKIHN0YXRpYyB2b2lkICAgICBiZmFfdHNraW1fY2xlYW51cF9pb3Moc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSk7CkBAIC0yNzUsNyArMjYyLDYgQEAKIHN0YXRpYyBiZmFfYm9vbGVhbl90IGJmYV90c2tpbV9zZW5kX2Fib3J0KHN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0pOwogc3RhdGljIHZvaWQgICAgIGJmYV90c2tpbV9pb2NkaXNhYmxlX2lvcyhzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltKTsKIAotCiAvKgogICogZm9yd2FyZCBkZWNsYXJhdGlvbiBvZiBCRkEgVFNLSU0gc3RhdGUgbWFjaGluZQogICovCkBAIC0yOTMsMTMgKzI3OSwxMiBAQAogCQkJCQllbnVtIGJmYV90c2tpbV9ldmVudCBldmVudCk7CiBzdGF0aWMgdm9pZCAgICAgYmZhX3Rza2ltX3NtX2hjYihzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltLAogCQkJCQllbnVtIGJmYV90c2tpbV9ldmVudCBldmVudCk7Ci0KIC8qCi0gKiAgaGFsX2ZjcGltX21vZCBCRkEgRkNQIEluaXRpYXRvciBNb2RlIG1vZHVsZQorICogIEJGQSBGQ1AgSW5pdGlhdG9yIE1vZGUgbW9kdWxlCiAgKi8KIAogLyoKLSAqCUNvbXB1dGUgYW5kIHJldHVybiBtZW1vcnkgbmVlZGVkIGJ5IEZDUChpbSkgbW9kdWxlLgorICogQ29tcHV0ZSBhbmQgcmV0dXJuIG1lbW9yeSBuZWVkZWQgYnkgRkNQKGltKSBtb2R1bGUuCiAgKi8KIHN0YXRpYyB2b2lkCiBiZmFfZmNwaW1fbWVtaW5mbyhzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcsIHUzMiAqa21fbGVuLApAQCAtMzU3LDEwICszNDIsNiBAQAogc3RhdGljIHZvaWQKIGJmYV9mY3BpbV9kZXRhY2goc3RydWN0IGJmYV9zICpiZmEpCiB7Ci0Jc3RydWN0IGJmYV9mY3BpbV9tb2RfcyAqZmNwaW0gPSBCRkFfRkNQSU1fTU9EKGJmYSk7Ci0KLQliZmFfaW9pbV9kZXRhY2goZmNwaW0pOwotCWJmYV90c2tpbV9kZXRhY2goZmNwaW0pOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMzg3LDU2ICszNjgsNiBAQAogfQogCiB2b2lkCi1iZmFfZmNwaW1fYWRkX3N0YXRzKHN0cnVjdCBiZmFfaXRuaW1faW9zdGF0c19zICpsc3RhdHMsCi0JCXN0cnVjdCBiZmFfaXRuaW1faW9zdGF0c19zICpyc3RhdHMpCi17Ci0JYmZhX2ZjcGltX2FkZF9pb3N0YXRzKGxzdGF0cywgcnN0YXRzLCB0b3RhbF9pb3MpOwotCWJmYV9mY3BpbV9hZGRfaW9zdGF0cyhsc3RhdHMsIHJzdGF0cywgcXJlc3VtZXMpOwotCWJmYV9mY3BpbV9hZGRfaW9zdGF0cyhsc3RhdHMsIHJzdGF0cywgbm9faW90YWdzKTsKLQliZmFfZmNwaW1fYWRkX2lvc3RhdHMobHN0YXRzLCByc3RhdHMsIGlvX2Fib3J0cyk7Ci0JYmZhX2ZjcGltX2FkZF9pb3N0YXRzKGxzdGF0cywgcnN0YXRzLCBub190c2tpbXMpOwotCWJmYV9mY3BpbV9hZGRfaW9zdGF0cyhsc3RhdHMsIHJzdGF0cywgaW9jb21wX29rKTsKLQliZmFfZmNwaW1fYWRkX2lvc3RhdHMobHN0YXRzLCByc3RhdHMsIGlvY29tcF91bmRlcnJ1bik7Ci0JYmZhX2ZjcGltX2FkZF9pb3N0YXRzKGxzdGF0cywgcnN0YXRzLCBpb2NvbXBfb3ZlcnJ1bik7Ci0JYmZhX2ZjcGltX2FkZF9pb3N0YXRzKGxzdGF0cywgcnN0YXRzLCBpb2NvbXBfYWJvcnRlZCk7Ci0JYmZhX2ZjcGltX2FkZF9pb3N0YXRzKGxzdGF0cywgcnN0YXRzLCBpb2NvbXBfdGltZWRvdXQpOwotCWJmYV9mY3BpbV9hZGRfaW9zdGF0cyhsc3RhdHMsIHJzdGF0cywgaW9jb21fbmV4dXNfYWJvcnQpOwotCWJmYV9mY3BpbV9hZGRfaW9zdGF0cyhsc3RhdHMsIHJzdGF0cywgaW9jb21fcHJvdG9fZXJyKTsKLQliZmFfZmNwaW1fYWRkX2lvc3RhdHMobHN0YXRzLCByc3RhdHMsIGlvY29tX2RpZl9lcnIpOwotCWJmYV9mY3BpbV9hZGRfaW9zdGF0cyhsc3RhdHMsIHJzdGF0cywgaW9jb21fc3Flcl9uZWVkZWQpOwotCWJmYV9mY3BpbV9hZGRfaW9zdGF0cyhsc3RhdHMsIHJzdGF0cywgaW9jb21fcmVzX2ZyZWUpOwotCWJmYV9mY3BpbV9hZGRfaW9zdGF0cyhsc3RhdHMsIHJzdGF0cywgaW9jb21faG9zdGFicnRzKTsKLQliZmFfZmNwaW1fYWRkX2lvc3RhdHMobHN0YXRzLCByc3RhdHMsIGlvY29tX3V0YWdzKTsKLQliZmFfZmNwaW1fYWRkX2lvc3RhdHMobHN0YXRzLCByc3RhdHMsIGlvX2NsZWFudXBzKTsKLQliZmFfZmNwaW1fYWRkX2lvc3RhdHMobHN0YXRzLCByc3RhdHMsIGlvX3RtYWJvcnRzKTsKLQliZmFfZmNwaW1fYWRkX2lvc3RhdHMobHN0YXRzLCByc3RhdHMsIG9ubGluZXMpOwotCWJmYV9mY3BpbV9hZGRfaW9zdGF0cyhsc3RhdHMsIHJzdGF0cywgb2ZmbGluZXMpOwotCWJmYV9mY3BpbV9hZGRfaW9zdGF0cyhsc3RhdHMsIHJzdGF0cywgY3JlYXRlcyk7Ci0JYmZhX2ZjcGltX2FkZF9pb3N0YXRzKGxzdGF0cywgcnN0YXRzLCBkZWxldGVzKTsKLQliZmFfZmNwaW1fYWRkX2lvc3RhdHMobHN0YXRzLCByc3RhdHMsIGNyZWF0ZV9jb21wcyk7Ci0JYmZhX2ZjcGltX2FkZF9pb3N0YXRzKGxzdGF0cywgcnN0YXRzLCBkZWxldGVfY29tcHMpOwotCWJmYV9mY3BpbV9hZGRfaW9zdGF0cyhsc3RhdHMsIHJzdGF0cywgc2xlcl9ldmVudHMpOwotCWJmYV9mY3BpbV9hZGRfaW9zdGF0cyhsc3RhdHMsIHJzdGF0cywgZndfY3JlYXRlKTsKLQliZmFfZmNwaW1fYWRkX2lvc3RhdHMobHN0YXRzLCByc3RhdHMsIGZ3X2RlbGV0ZSk7Ci0JYmZhX2ZjcGltX2FkZF9pb3N0YXRzKGxzdGF0cywgcnN0YXRzLCBpb2NfZGlzYWJsZWQpOwotCWJmYV9mY3BpbV9hZGRfaW9zdGF0cyhsc3RhdHMsIHJzdGF0cywgY2xlYW51cF9jb21wcyk7Ci0JYmZhX2ZjcGltX2FkZF9pb3N0YXRzKGxzdGF0cywgcnN0YXRzLCB0bV9jbW5kcyk7Ci0JYmZhX2ZjcGltX2FkZF9pb3N0YXRzKGxzdGF0cywgcnN0YXRzLCB0bV9md19yc3BzKTsKLQliZmFfZmNwaW1fYWRkX2lvc3RhdHMobHN0YXRzLCByc3RhdHMsIHRtX3N1Y2Nlc3MpOwotCWJmYV9mY3BpbV9hZGRfaW9zdGF0cyhsc3RhdHMsIHJzdGF0cywgdG1fZmFpbHVyZXMpOwotCWJmYV9mY3BpbV9hZGRfaW9zdGF0cyhsc3RhdHMsIHJzdGF0cywgdG1faW9fY29tcHMpOwotCWJmYV9mY3BpbV9hZGRfaW9zdGF0cyhsc3RhdHMsIHJzdGF0cywgdG1fcXJlc3VtZXMpOwotCWJmYV9mY3BpbV9hZGRfaW9zdGF0cyhsc3RhdHMsIHJzdGF0cywgdG1faW9jZG93bnMpOwotCWJmYV9mY3BpbV9hZGRfaW9zdGF0cyhsc3RhdHMsIHJzdGF0cywgdG1fY2xlYW51cHMpOwotCWJmYV9mY3BpbV9hZGRfaW9zdGF0cyhsc3RhdHMsIHJzdGF0cywgdG1fY2xlYW51cF9jb21wcyk7Ci0JYmZhX2ZjcGltX2FkZF9pb3N0YXRzKGxzdGF0cywgcnN0YXRzLCBpb19jb21wcyk7Ci0JYmZhX2ZjcGltX2FkZF9pb3N0YXRzKGxzdGF0cywgcnN0YXRzLCBpbnB1dF9yZXFzKTsKLQliZmFfZmNwaW1fYWRkX2lvc3RhdHMobHN0YXRzLCByc3RhdHMsIG91dHB1dF9yZXFzKTsKLQliZmFfZmNwaW1fYWRkX2lvc3RhdHMobHN0YXRzLCByc3RhdHMsIHJkX3Rocm91Z2hwdXQpOwotCWJmYV9mY3BpbV9hZGRfaW9zdGF0cyhsc3RhdHMsIHJzdGF0cywgd3JfdGhyb3VnaHB1dCk7Ci19Ci0KLXZvaWQKIGJmYV9mY3BpbV9wYXRoX3Rvdl9zZXQoc3RydWN0IGJmYV9zICpiZmEsIHUxNiBwYXRoX3RvdikKIHsKIAlzdHJ1Y3QgYmZhX2ZjcGltX21vZF9zICpmY3BpbSA9IEJGQV9GQ1BJTV9NT0QoYmZhKTsKQEAgLTQ1NCwxMjggKzM4NSw2IEBACiAJcmV0dXJuIGZjcGltLT5wYXRoX3RvdiAvIDEwMDA7CiB9CiAKLWJmYV9zdGF0dXNfdAotYmZhX2ZjcGltX3BvcnRfaW9zdGF0cyhzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYV9pdG5pbV9pb3N0YXRzX3MgKnN0YXRzLAotCXU4IGxwX3RhZykKLXsKLQlzdHJ1Y3QgYmZhX2ZjcGltX21vZF9zICpmY3BpbSA9IEJGQV9GQ1BJTV9NT0QoYmZhKTsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpxZSwgKnFlbjsKLQlzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltOwotCi0JLyogYWNjdW11bGF0ZSBJTyBzdGF0cyBmcm9tIGl0bmltICovCi0JbWVtc2V0KHN0YXRzLCAwLCBzaXplb2Yoc3RydWN0IGJmYV9pdG5pbV9pb3N0YXRzX3MpKTsKLQlsaXN0X2Zvcl9lYWNoX3NhZmUocWUsIHFlbiwgJmZjcGltLT5pdG5pbV9xKSB7Ci0JCWl0bmltID0gKHN0cnVjdCBiZmFfaXRuaW1fcyAqKSBxZTsKLQkJaWYgKGl0bmltLT5ycG9ydC0+cnBvcnRfaW5mby5scF90YWcgIT0gbHBfdGFnKQotCQkJY29udGludWU7Ci0JCWJmYV9mY3BpbV9hZGRfc3RhdHMoc3RhdHMsICYoaXRuaW0tPnN0YXRzKSk7Ci0JfQotCXJldHVybiBCRkFfU1RBVFVTX09LOwotfQotYmZhX3N0YXR1c190Ci1iZmFfZmNwaW1fZ2V0X21vZHN0YXRzKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZhX2l0bmltX2lvc3RhdHNfcyAqbW9kc3RhdHMpCi17Ci0Jc3RydWN0IGJmYV9mY3BpbV9tb2RfcyAqZmNwaW0gPSBCRkFfRkNQSU1fTU9EKGJmYSk7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqcWUsICpxZW47Ci0Jc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbTsKLQotCS8qIGFjY3VtdWxhdGUgSU8gc3RhdHMgZnJvbSBpdG5pbSAqLwotCW1lbXNldChtb2RzdGF0cywgMCwgc2l6ZW9mKHN0cnVjdCBiZmFfaXRuaW1faW9zdGF0c19zKSk7Ci0JbGlzdF9mb3JfZWFjaF9zYWZlKHFlLCBxZW4sICZmY3BpbS0+aXRuaW1fcSkgewotCQlpdG5pbSA9IChzdHJ1Y3QgYmZhX2l0bmltX3MgKikgcWU7Ci0JCWJmYV9mY3BpbV9hZGRfc3RhdHMobW9kc3RhdHMsICYoaXRuaW0tPnN0YXRzKSk7Ci0JfQotCXJldHVybiBCRkFfU1RBVFVTX09LOwotfQotCi1iZmFfc3RhdHVzX3QKLWJmYV9mY3BpbV9nZXRfZGVsX2l0bl9zdGF0cyhzdHJ1Y3QgYmZhX3MgKmJmYSwKLQkgc3RydWN0IGJmYV9mY3BpbV9kZWxfaXRuX3N0YXRzX3MgKm1vZHN0YXRzKQotewotCXN0cnVjdCBiZmFfZmNwaW1fbW9kX3MgKmZjcGltID0gQkZBX0ZDUElNX01PRChiZmEpOwotCi0JKm1vZHN0YXRzID0gZmNwaW0tPmRlbF9pdG5fc3RhdHM7Ci0KLQlyZXR1cm4gQkZBX1NUQVRVU19PSzsKLX0KLQotCi1iZmFfc3RhdHVzX3QKLWJmYV9mY3BpbV9wcm9maWxlX29uKHN0cnVjdCBiZmFfcyAqYmZhLCB1MzIgdGltZSkKLXsKLQlzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltOwotCXN0cnVjdCBiZmFfZmNwaW1fbW9kX3MgKmZjcGltID0gQkZBX0ZDUElNX01PRChiZmEpOwotCXN0cnVjdCBsaXN0X2hlYWQgKnFlLCAqcWVuOwotCi0JLyogYWNjdW11bGF0ZSBJTyBzdGF0cyBmcm9tIGl0bmltICovCi0JbGlzdF9mb3JfZWFjaF9zYWZlKHFlLCBxZW4sICZmY3BpbS0+aXRuaW1fcSkgewotCQlpdG5pbSA9IChzdHJ1Y3QgYmZhX2l0bmltX3MgKikgcWU7Ci0JCWJmYV9pdG5pbV9jbGVhcl9zdGF0cyhpdG5pbSk7Ci0JfQotCWZjcGltLT5pb19wcm9maWxlID0gQkZBX1RSVUU7Ci0JZmNwaW0tPmlvX3Byb2ZpbGVfc3RhcnRfdGltZSA9IHRpbWU7Ci0JZmNwaW0tPnByb2ZpbGVfY29tcCA9IGJmYV9pb2ltX3Byb2ZpbGVfY29tcDsKLQlmY3BpbS0+cHJvZmlsZV9zdGFydCA9IGJmYV9pb2ltX3Byb2ZpbGVfc3RhcnQ7Ci0KLQlyZXR1cm4gQkZBX1NUQVRVU19PSzsKLX0KLWJmYV9zdGF0dXNfdAotYmZhX2ZjcGltX3Byb2ZpbGVfb2ZmKHN0cnVjdCBiZmFfcyAqYmZhKQotewotCXN0cnVjdCBiZmFfZmNwaW1fbW9kX3MgKmZjcGltID0gQkZBX0ZDUElNX01PRChiZmEpOwotCWZjcGltLT5pb19wcm9maWxlID0gQkZBX0ZBTFNFOwotCWZjcGltLT5pb19wcm9maWxlX3N0YXJ0X3RpbWUgPSAwOwotCWZjcGltLT5wcm9maWxlX2NvbXAgPSBOVUxMOwotCWZjcGltLT5wcm9maWxlX3N0YXJ0ID0gTlVMTDsKLQlyZXR1cm4gQkZBX1NUQVRVU19PSzsKLX0KLQotYmZhX3N0YXR1c190Ci1iZmFfZmNwaW1fcG9ydF9jbGVhcl9pb3N0YXRzKHN0cnVjdCBiZmFfcyAqYmZhLCB1OCBscF90YWcpCi17Ci0Jc3RydWN0IGJmYV9mY3BpbV9tb2RfcyAqZmNwaW0gPSBCRkFfRkNQSU1fTU9EKGJmYSk7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqcWUsICpxZW47Ci0Jc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbTsKLQotCS8qIGNsZWFyIElPIHN0YXRzIGZyb20gYWxsIGFjdGl2ZSBpdG5pbXMgKi8KLQlsaXN0X2Zvcl9lYWNoX3NhZmUocWUsIHFlbiwgJmZjcGltLT5pdG5pbV9xKSB7Ci0JCWl0bmltID0gKHN0cnVjdCBiZmFfaXRuaW1fcyAqKSBxZTsKLQkJaWYgKGl0bmltLT5ycG9ydC0+cnBvcnRfaW5mby5scF90YWcgIT0gbHBfdGFnKQotCQkJY29udGludWU7Ci0JCWJmYV9pdG5pbV9jbGVhcl9zdGF0cyhpdG5pbSk7Ci0JfQotCXJldHVybiBCRkFfU1RBVFVTX09LOwotCi19Ci0KLWJmYV9zdGF0dXNfdAotYmZhX2ZjcGltX2Nscl9tb2RzdGF0cyhzdHJ1Y3QgYmZhX3MgKmJmYSkKLXsKLQlzdHJ1Y3QgYmZhX2ZjcGltX21vZF9zICpmY3BpbSA9IEJGQV9GQ1BJTV9NT0QoYmZhKTsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpxZSwgKnFlbjsKLQlzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltOwotCi0JLyogY2xlYXIgSU8gc3RhdHMgZnJvbSBhbGwgYWN0aXZlIGl0bmltcyAqLwotCWxpc3RfZm9yX2VhY2hfc2FmZShxZSwgcWVuLCAmZmNwaW0tPml0bmltX3EpIHsKLQkJaXRuaW0gPSAoc3RydWN0IGJmYV9pdG5pbV9zICopIHFlOwotCQliZmFfaXRuaW1fY2xlYXJfc3RhdHMoaXRuaW0pOwotCX0KLQltZW1zZXQoJmZjcGltLT5kZWxfaXRuX3N0YXRzLCAwLAotCQlzaXplb2Yoc3RydWN0IGJmYV9mY3BpbV9kZWxfaXRuX3N0YXRzX3MpKTsKLQotCXJldHVybiBCRkFfU1RBVFVTX09LOwotfQotCi12b2lkCi1iZmFfZmNwaW1fcWRlcHRoX3NldChzdHJ1Y3QgYmZhX3MgKmJmYSwgdTE2IHFfZGVwdGgpCi17Ci0Jc3RydWN0IGJmYV9mY3BpbV9tb2RfcyAqZmNwaW0gPSBCRkFfRkNQSU1fTU9EKGJmYSk7Ci0KLQliZmFfYXNzZXJ0KHFfZGVwdGggPD0gQkZBX0lPQ0ZDX1FERVBUSF9NQVgpOwotCi0JZmNwaW0tPnFfZGVwdGggPSBxX2RlcHRoOwotfQotCiB1MTYKIGJmYV9mY3BpbV9xZGVwdGhfZ2V0KHN0cnVjdCBiZmFfcyAqYmZhKQogewpAQCAtNTg0LDMyICszOTMsMTIgQEAKIAlyZXR1cm4gZmNwaW0tPnFfZGVwdGg7CiB9CiAKLXZvaWQKLWJmYV9mY3BpbV91cGRhdGVfaW9yZWRpcmVjdChzdHJ1Y3QgYmZhX3MgKmJmYSkKLXsKLQliZmFfYm9vbGVhbl90IGlvcmVkaXJlY3Q7Ci0KLQkvKgotCSAqIElPIHJlZGlyZWN0aW9uIGlzIHR1cm5lZCBvZmYgd2hlbiBRb1MgaXMgZW5hYmxlZCBhbmQgdmljZSB2ZXJzYQotCSAqLwotCWlvcmVkaXJlY3QgPSBiZmFfZmNwb3J0X2lzX3Fvc19lbmFibGVkKGJmYSkgPyBCRkFfRkFMU0UgOiBCRkFfVFJVRTsKLX0KLQotdm9pZAotYmZhX2ZjcGltX3NldF9pb3JlZGlyZWN0KHN0cnVjdCBiZmFfcyAqYmZhLCBiZmFfYm9vbGVhbl90IHN0YXRlKQotewotCXN0cnVjdCBiZmFfZmNwaW1fbW9kX3MgKmZjcGltID0gQkZBX0ZDUElNX01PRChiZmEpOwotCWZjcGltLT5pb3JlZGlyZWN0ID0gc3RhdGU7Ci19Ci0KLQotCiAvKgogICogIEJGQSBJVE5JTSBtb2R1bGUgc3RhdGUgbWFjaGluZSBmdW5jdGlvbnMKICAqLwogCiAvKgotICoJQmVnaW5uaW5nL3VuYWxsb2NhdGVkIHN0YXRlIC0gbm8gZXZlbnRzIGV4cGVjdGVkLgorICogQmVnaW5uaW5nL3VuYWxsb2NhdGVkIHN0YXRlIC0gbm8gZXZlbnRzIGV4cGVjdGVkLgogICovCiBzdGF0aWMgdm9pZAogYmZhX2l0bmltX3NtX3VuaW5pdChzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLCBlbnVtIGJmYV9pdG5pbV9ldmVudCBldmVudCkKQEAgLTYzMCw3ICs0MTksNyBAQAogfQogCiAvKgotICoJQmVnaW5uaW5nIHN0YXRlLCBvbmx5IG9ubGluZSBldmVudCBleHBlY3RlZC4KKyAqIEJlZ2lubmluZyBzdGF0ZSwgb25seSBvbmxpbmUgZXZlbnQgZXhwZWN0ZWQuCiAgKi8KIHN0YXRpYyB2b2lkCiBiZmFfaXRuaW1fc21fY3JlYXRlZChzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLCBlbnVtIGJmYV9pdG5pbV9ldmVudCBldmVudCkKQEAgLTczMyw3ICs1MjIsNyBAQAogfQogCiAvKgotICoJV2FpdGluZyBmb3IgaXRuaW0gY3JlYXRlIHJlc3BvbnNlIGZyb20gZmlybXdhcmUsIGEgZGVsZXRlIGlzIHBlbmRpbmcuCisgKiBXYWl0aW5nIGZvciBpdG5pbSBjcmVhdGUgcmVzcG9uc2UgZnJvbSBmaXJtd2FyZSwgYSBkZWxldGUgaXMgcGVuZGluZy4KICAqLwogc3RhdGljIHZvaWQKIGJmYV9pdG5pbV9zbV9kZWxldGVfcGVuZGluZyhzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLApAQCAtNzYxLDcgKzU1MCw3IEBACiB9CiAKIC8qCi0gKglPbmxpbmUgc3RhdGUgLSBub3JtYWwgcGFya2luZyBzdGF0ZS4KKyAqIE9ubGluZSBzdGF0ZSAtIG5vcm1hbCBwYXJraW5nIHN0YXRlLgogICovCiBzdGF0aWMgdm9pZAogYmZhX2l0bmltX3NtX29ubGluZShzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLCBlbnVtIGJmYV9pdG5pbV9ldmVudCBldmVudCkKQEAgLTgwMyw3ICs1OTIsNyBAQAogfQogCiAvKgotICoJU2Vjb25kIGxldmVsIGVycm9yIHJlY292ZXJ5IG5lZWQuCisgKiBTZWNvbmQgbGV2ZWwgZXJyb3IgcmVjb3ZlcnkgbmVlZC4KICAqLwogc3RhdGljIHZvaWQKIGJmYV9pdG5pbV9zbV9zbGVyKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sIGVudW0gYmZhX2l0bmltX2V2ZW50IGV2ZW50KQpAQCAtODM0LDcgKzYyMyw3IEBACiB9CiAKIC8qCi0gKglHb2luZyBvZmZsaW5lLiBXYWl0aW5nIGZvciBhY3RpdmUgSU8gY2xlYW51cC4KKyAqIEdvaW5nIG9mZmxpbmUuIFdhaXRpbmcgZm9yIGFjdGl2ZSBJTyBjbGVhbnVwLgogICovCiBzdGF0aWMgdm9pZAogYmZhX2l0bmltX3NtX2NsZWFudXBfb2ZmbGluZShzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLApAQCAtODcxLDcgKzY2MCw3IEBACiB9CiAKIC8qCi0gKglEZWxldGluZyBpdG5pbS4gV2FpdGluZyBmb3IgYWN0aXZlIElPIGNsZWFudXAuCisgKiBEZWxldGluZyBpdG5pbS4gV2FpdGluZyBmb3IgYWN0aXZlIElPIGNsZWFudXAuCiAgKi8KIHN0YXRpYyB2b2lkCiBiZmFfaXRuaW1fc21fY2xlYW51cF9kZWxldGUoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSwKQEAgLTk1Niw3ICs3NDUsNyBAQAogfQogCiAvKgotICoJT2ZmbGluZSBzdGF0ZS4KKyAqIE9mZmxpbmUgc3RhdGUuCiAgKi8KIHN0YXRpYyB2b2lkCiBiZmFfaXRuaW1fc21fb2ZmbGluZShzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLCBlbnVtIGJmYV9pdG5pbV9ldmVudCBldmVudCkKQEAgLTk4Nyw5ICs3NzYsNiBAQAogCX0KIH0KIAotLyoKLSAqCUlPQyBoL3cgZmFpbGVkIHN0YXRlLgotICovCiBzdGF0aWMgdm9pZAogYmZhX2l0bmltX3NtX2lvY2Rpc2FibGUoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSwKIAkJCQllbnVtIGJmYV9pdG5pbV9ldmVudCBldmVudCkKQEAgLTEwMjQsNyArODEwLDcgQEAKIH0KIAogLyoKLSAqCUl0bmltIGlzIGRlbGV0ZWQsIHdhaXRpbmcgZm9yIGZpcm13YXJlIHJlc3BvbnNlIHRvIGRlbGV0ZS4KKyAqIEl0bmltIGlzIGRlbGV0ZWQsIHdhaXRpbmcgZm9yIGZpcm13YXJlIHJlc3BvbnNlIHRvIGRlbGV0ZS4KICAqLwogc3RhdGljIHZvaWQKIGJmYV9pdG5pbV9zbV9kZWxldGluZyhzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLCBlbnVtIGJmYV9pdG5pbV9ldmVudCBldmVudCkKQEAgLTEwNjksNyArODU1LDcgQEAKIH0KIAogLyoKLSAqCUluaXRpYXRlIGNsZWFudXAgb2YgYWxsIElPcyBvbiBhbiBJT0MgZmFpbHVyZS4KKyAqIEluaXRpYXRlIGNsZWFudXAgb2YgYWxsIElPcyBvbiBhbiBJT0MgZmFpbHVyZS4KICAqLwogc3RhdGljIHZvaWQKIGJmYV9pdG5pbV9pb2NkaXNhYmxlX2NsZWFudXAoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSkKQEAgLTExMDMsNyArODg5LDcgQEAKIH0KIAogLyoKLSAqCUlPIGNsZWFudXAgY29tcGxldGlvbgorICogSU8gY2xlYW51cCBjb21wbGV0aW9uCiAgKi8KIHN0YXRpYyB2b2lkCiBiZmFfaXRuaW1fY2xlYW5wX2NvbXAodm9pZCAqaXRuaW1fY2JhcmcpCkBAIC0xMTE1LDcgKzkwMSw3IEBACiB9CiAKIC8qCi0gKglJbml0aWF0ZSBjbGVhbnVwIG9mIGFsbCBJT3MuCisgKiBJbml0aWF0ZSBjbGVhbnVwIG9mIGFsbCBJT3MuCiAgKi8KIHN0YXRpYyB2b2lkCiBiZmFfaXRuaW1fY2xlYW51cChzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltKQpAQCAtMTE4Nyw5ICs5NzMsNiBAQAogCWJmYV9zbV9zZW5kX2V2ZW50KGl0bmltLCBCRkFfSVROSU1fU01fUVJFU1VNRSk7CiB9CiAKLQotCi0KIC8qCiAgKiAgYmZhX2l0bmltX3B1YmxpYwogICovCkBAIC0xNDAxLDcgKzExODQsNyBAQAogCWlmIChpdG5pbS0+ZmNwaW0tPnBhdGhfdG92ID4gMCkgewogCiAJCWl0bmltLT5pb3Rvdl9hY3RpdmUgPSBCRkFfVFJVRTsKLQkJYmZhX2Fzc2VydChiZmFfaXRuaW1faG9sZF9pbyhpdG5pbSkpOworCQlXQVJOX09OKCFiZmFfaXRuaW1faG9sZF9pbyhpdG5pbSkpOwogCQliZmFfdGltZXJfc3RhcnQoaXRuaW0tPmJmYSwgJml0bmltLT50aW1lciwKIAkJCWJmYV9pdG5pbV9pb3RvdiwgaXRuaW0sIGl0bmltLT5mY3BpbS0+cGF0aF90b3YpOwogCX0KQEAgLTE0NTcsMTQgKzEyNDAsMTIgQEAKIAlmY3BpbS0+ZGVsX2l0bl9zdGF0cy5kZWxfdG1faW9jZG93bnMgKz0gaXRuaW0tPnN0YXRzLnRtX2lvY2Rvd25zOwogfQogCi0KLQogLyoKLSAqICBiZmFfaXRuaW1fcHVibGljCisgKiBiZmFfaXRuaW1fcHVibGljCiAgKi8KIAogLyoKLSAqCUl0bmltIGludGVycnVwdCBwcm9jZXNzaW5nLgorICogSXRuaW0gaW50ZXJydXB0IHByb2Nlc3NpbmcuCiAgKi8KIHZvaWQKIGJmYV9pdG5pbV9pc3Ioc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmlfbXNnX3MgKm0pCkBAIC0xNDgxLDcgKzEyNjIsNyBAQAogCWNhc2UgQkZJX0lUTklNX0kySF9DUkVBVEVfUlNQOgogCQlpdG5pbSA9IEJGQV9JVE5JTV9GUk9NX1RBRyhmY3BpbSwKIAkJCQkJCW1zZy5jcmVhdGVfcnNwLT5iZmFfaGFuZGxlKTsKLQkJYmZhX2Fzc2VydChtc2cuY3JlYXRlX3JzcC0+c3RhdHVzID09IEJGQV9TVEFUVVNfT0spOworCQlXQVJOX09OKG1zZy5jcmVhdGVfcnNwLT5zdGF0dXMgIT0gQkZBX1NUQVRVU19PSyk7CiAJCWJmYV9zdGF0cyhpdG5pbSwgY3JlYXRlX2NvbXBzKTsKIAkJYmZhX3NtX3NlbmRfZXZlbnQoaXRuaW0sIEJGQV9JVE5JTV9TTV9GV1JTUCk7CiAJCWJyZWFrOwpAQCAtMTQ4OSw3ICsxMjcwLDcgQEAKIAljYXNlIEJGSV9JVE5JTV9JMkhfREVMRVRFX1JTUDoKIAkJaXRuaW0gPSBCRkFfSVROSU1fRlJPTV9UQUcoZmNwaW0sCiAJCQkJCQltc2cuZGVsZXRlX3JzcC0+YmZhX2hhbmRsZSk7Ci0JCWJmYV9hc3NlcnQobXNnLmRlbGV0ZV9yc3AtPnN0YXR1cyA9PSBCRkFfU1RBVFVTX09LKTsKKwkJV0FSTl9PTihtc2cuZGVsZXRlX3JzcC0+c3RhdHVzICE9IEJGQV9TVEFUVVNfT0spOwogCQliZmFfc3RhdHMoaXRuaW0sIGRlbGV0ZV9jb21wcyk7CiAJCWJmYV9zbV9zZW5kX2V2ZW50KGl0bmltLCBCRkFfSVROSU1fU01fRldSU1ApOwogCQlicmVhazsKQEAgLTE1MDMsMTQgKzEyODQsMTIgQEAKIAogCWRlZmF1bHQ6CiAJCWJmYV90cmMoYmZhLCBtLT5taGRyLm1zZ19pZCk7Ci0JCWJmYV9hc3NlcnQoMCk7CisJCVdBUk5fT04oMSk7CiAJfQogfQogCi0KLQogLyoKLSAqICBiZmFfaXRuaW1fYXBpCisgKiBiZmFfaXRuaW1fYXBpCiAgKi8KIAogc3RydWN0IGJmYV9pdG5pbV9zICoKQEAgLTE1MjAsNyArMTI5OSw3IEBACiAJc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbTsKIAogCWl0bmltID0gQkZBX0lUTklNX0ZST01fVEFHKGZjcGltLCBycG9ydC0+cnBvcnRfdGFnKTsKLQliZmFfYXNzZXJ0KGl0bmltLT5ycG9ydCA9PSBycG9ydCk7CisJV0FSTl9PTihpdG5pbS0+cnBvcnQgIT0gcnBvcnQpOwogCiAJaXRuaW0tPmRpdG4gPSBkaXRuOwogCkBAIC0xNTY4LDMxICsxMzQ3LDYgQEAKIAkJIGJmYV9zbV9jbXBfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9pb2NkaXNhYmxlKSk7CiB9CiAKLWJmYV9zdGF0dXNfdAotYmZhX2l0bmltX2dldF9pb3Byb2ZpbGUoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSwKLQkJc3RydWN0IGJmYV9pdG5pbV9pb3Byb2ZpbGVfcyAqaW9wcm9maWxlKQotewotCXN0cnVjdCBiZmFfZmNwaW1fbW9kX3MgKmZjcGltID0gQkZBX0ZDUElNX01PRChpdG5pbS0+YmZhKTsKLQlpZiAoIWZjcGltLT5pb19wcm9maWxlKQotCQlyZXR1cm4gQkZBX1NUQVRVU19JT1BST0ZJTEVfT0ZGOwotCi0JaXRuaW0tPmlvcHJvZmlsZS5pbmRleCA9IEJGQV9JT0JVQ0tFVF9NQVg7Ci0JaXRuaW0tPmlvcHJvZmlsZS5pb19wcm9maWxlX3N0YXJ0X3RpbWUgPQotCQliZmFfaW9fcHJvZmlsZV9zdGFydF90aW1lKGl0bmltLT5iZmEpOwotCWl0bmltLT5pb3Byb2ZpbGUuY2xvY2tfcmVzX211bCA9IGJmYV9pb19sYXRfY2xvY2tfcmVzX211bDsKLQlpdG5pbS0+aW9wcm9maWxlLmNsb2NrX3Jlc19kaXYgPSBiZmFfaW9fbGF0X2Nsb2NrX3Jlc19kaXY7Ci0JKmlvcHJvZmlsZSA9IGl0bmltLT5pb3Byb2ZpbGU7Ci0KLQlyZXR1cm4gQkZBX1NUQVRVU19PSzsKLX0KLQotdm9pZAotYmZhX2l0bmltX2dldF9zdGF0cyhzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLAotCXN0cnVjdCBiZmFfaXRuaW1faW9zdGF0c19zICpzdGF0cykKLXsKLQkqc3RhdHMgPSBpdG5pbS0+c3RhdHM7Ci19Ci0KIHZvaWQKIGJmYV9pdG5pbV9jbGVhcl9zdGF0cyhzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltKQogewpAQCAtMTYwOCwxNCArMTM2MiwxMSBAQAogICovCiAKIC8qCi0gKglJTyBpcyBub3Qgc3RhcnRlZCAodW5hbGxvY2F0ZWQpLgorICogSU8gaXMgbm90IHN0YXJ0ZWQgKHVuYWxsb2NhdGVkKS4KICAqLwogc3RhdGljIHZvaWQKIGJmYV9pb2ltX3NtX3VuaW5pdChzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSwgZW51bSBiZmFfaW9pbV9ldmVudCBldmVudCkKIHsKLQliZmFfdHJjX2ZwKGlvaW0tPmJmYSwgaW9pbS0+aW90YWcpOwotCWJmYV90cmNfZnAoaW9pbS0+YmZhLCBldmVudCk7Ci0KIAlzd2l0Y2ggKGV2ZW50KSB7CiAJY2FzZSBCRkFfSU9JTV9TTV9TVEFSVDoKIAkJaWYgKCFiZmFfaXRuaW1faXNfb25saW5lKGlvaW0tPml0bmltKSkgewpAQCAtMTYzNSw3ICsxMzg2LDcgQEAKIAkJfQogCiAJCWlmIChpb2ltLT5uc2dlcyA+IEJGSV9TR0VfSU5MSU5FKSB7Ci0JCQlpZiAoIWJmYV9pb2ltX3NnZV9zZXR1cChpb2ltKSkgeworCQkJaWYgKCFiZmFfaW9pbV9zZ3BnX2FsbG9jKGlvaW0pKSB7CiAJCQkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9zZ2FsbG9jKTsKIAkJCQlyZXR1cm47CiAJCQl9CkBAIC0xNjYyLDcgKzE0MTMsNyBAQAogCQkgKiByZXF1ZXN0cyBpbW1lZGlhdGVseS4KIAkJICovCiAJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21faGNiKTsKLQkJYmZhX2Fzc2VydChiZmFfcV9pc19vbl9xKCZpb2ltLT5pdG5pbS0+cGVuZGluZ19xLCBpb2ltKSk7CisJCVdBUk5fT04oIWJmYV9xX2lzX29uX3EoJmlvaW0tPml0bmltLT5wZW5kaW5nX3EsIGlvaW0pKTsKIAkJYmZhX2NiX3F1ZXVlKGlvaW0tPmJmYSwgJmlvaW0tPmhjYl9xZSwKIAkJCQlfX2JmYV9jYl9pb2ltX2Fib3J0LCBpb2ltKTsKIAkJYnJlYWs7CkBAIC0xNjczLDcgKzE0MjQsNyBAQAogfQogCiAvKgotICoJSU8gaXMgd2FpdGluZyBmb3IgU0cgcGFnZXMuCisgKiBJTyBpcyB3YWl0aW5nIGZvciBTRyBwYWdlcy4KICAqLwogc3RhdGljIHZvaWQKIGJmYV9pb2ltX3NtX3NnYWxsb2Moc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0sIGVudW0gYmZhX2lvaW1fZXZlbnQgZXZlbnQpCkBAIC0xNzIwLDE0ICsxNDcxLDExIEBACiB9CiAKIC8qCi0gKglJTyBpcyBhY3RpdmUuCisgKiBJTyBpcyBhY3RpdmUuCiAgKi8KIHN0YXRpYyB2b2lkCiBiZmFfaW9pbV9zbV9hY3RpdmUoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0sIGVudW0gYmZhX2lvaW1fZXZlbnQgZXZlbnQpCiB7Ci0JYmZhX3RyY19mcChpb2ltLT5iZmEsIGlvaW0tPmlvdGFnKTsKLQliZmFfdHJjX2ZwKGlvaW0tPmJmYSwgZXZlbnQpOwotCiAJc3dpdGNoIChldmVudCkgewogCWNhc2UgQkZBX0lPSU1fU01fQ09NUF9HT09EOgogCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2hjYik7CkBAIC0xNzg2LDggKzE1MzQsOCBAQAogCQlicmVhazsKIAogCWNhc2UgQkZBX0lPSU1fU01fU1FSRVRSWToKLQkJaWYgKGJmYV9pb2ltX2dldF9pb3RhZyhpb2ltKSAhPSBCRkFfVFJVRSkgewotCQkJLyogbWF4IHJldHJ5IGNvbXBsZXRlZCBmcmVlIElPICovCisJCWlmIChiZmFfaW9pbV9tYXhyZXRyeV9yZWFjaGVkKGlvaW0pKSB7CisJCQkvKiBtYXggcmV0cnkgcmVhY2hlZCwgZnJlZSBJTyAqLwogCQkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9oY2JfZnJlZSk7CiAJCQliZmFfaW9pbV9tb3ZlX3RvX2NvbXBfcShpb2ltKTsKIAkJCWJmYV9jYl9xdWV1ZShpb2ltLT5iZmEsICZpb2ltLT5oY2JfcWUsCkBAIC0xODA0LDE3ICsxNTUyLDE1IEBACiB9CiAKIC8qCi0qCUlPIGlzIHJldHJpZWQgd2l0aCBuZXcgdGFnLgotKi8KKyAqIElPIGlzIHJldHJpZWQgd2l0aCBuZXcgdGFnLgorICovCiBzdGF0aWMgdm9pZAogYmZhX2lvaW1fc21fY21uZF9yZXRyeShzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSwgZW51bSBiZmFfaW9pbV9ldmVudCBldmVudCkKIHsKLQliZmFfdHJjX2ZwKGlvaW0tPmJmYSwgaW9pbS0+aW90YWcpOwotCWJmYV90cmNfZnAoaW9pbS0+YmZhLCBldmVudCk7Ci0KIAlzd2l0Y2ggKGV2ZW50KSB7CiAJY2FzZSBCRkFfSU9JTV9TTV9GUkVFOgogCQkvKiBhYnRzIGFuZCBycnEgZG9uZS4gTm93IHJldHJ5IHRoZSBJTyB3aXRoIG5ldyB0YWcgKi8KKwkJYmZhX2lvaW1fdXBkYXRlX2lvdGFnKGlvaW0pOwogCQlpZiAoIWJmYV9pb2ltX3NlbmRfaW9yZXEoaW9pbSkpIHsKIAkJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21fcWZ1bGwpOwogCQkJYnJlYWs7CkBAIC0xODU4LDcgKzE2MDQsNyBAQAogfQogCiAvKgotICoJSU8gaXMgYmVpbmcgYWJvcnRlZCwgd2FpdGluZyBmb3IgY29tcGxldGlvbiBmcm9tIGZpcm13YXJlLgorICogSU8gaXMgYmVpbmcgYWJvcnRlZCwgd2FpdGluZyBmb3IgY29tcGxldGlvbiBmcm9tIGZpcm13YXJlLgogICovCiBzdGF0aWMgdm9pZAogYmZhX2lvaW1fc21fYWJvcnQoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0sIGVudW0gYmZhX2lvaW1fZXZlbnQgZXZlbnQpCkBAIC0xODk0LDcgKzE2NDAsNyBAQAogCQlicmVhazsKIAogCWNhc2UgQkZBX0lPSU1fU01fQ0xFQU5VUDoKLQkJYmZhX2Fzc2VydChpb2ltLT5pb3NwLT5hYm9ydF9leHBsaWNpdCA9PSBCRkFfVFJVRSk7CisJCVdBUk5fT04oaW9pbS0+aW9zcC0+YWJvcnRfZXhwbGljaXQgIT0gQkZBX1RSVUUpOwogCQlpb2ltLT5pb3NwLT5hYm9ydF9leHBsaWNpdCA9IEJGQV9GQUxTRTsKIAogCQlpZiAoYmZhX2lvaW1fc2VuZF9hYm9ydChpb2ltKSkKQEAgLTE5ODEsNyArMTcyNyw3IEBACiB9CiAKIC8qCi0gKglJTyBpcyB3YWl0aW5nIGZvciByb29tIGluIHJlcXVlc3QgQ1EKKyAqIElPIGlzIHdhaXRpbmcgZm9yIHJvb20gaW4gcmVxdWVzdCBDUQogICovCiBzdGF0aWMgdm9pZAogYmZhX2lvaW1fc21fcWZ1bGwoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0sIGVudW0gYmZhX2lvaW1fZXZlbnQgZXZlbnQpCkBAIC0yMDI1LDcgKzE3NzEsNyBAQAogfQogCiAvKgotICoJQWN0aXZlIElPIGlzIGJlaW5nIGFib3J0ZWQsIHdhaXRpbmcgZm9yIHJvb20gaW4gcmVxdWVzdCBDUS4KKyAqIEFjdGl2ZSBJTyBpcyBiZWluZyBhYm9ydGVkLCB3YWl0aW5nIGZvciByb29tIGluIHJlcXVlc3QgQ1EuCiAgKi8KIHN0YXRpYyB2b2lkCiBiZmFfaW9pbV9zbV9hYm9ydF9xZnVsbChzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSwgZW51bSBiZmFfaW9pbV9ldmVudCBldmVudCkKQEAgLTIwNDAsNyArMTc4Niw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSBCRkFfSU9JTV9TTV9DTEVBTlVQOgotCQliZmFfYXNzZXJ0KGlvaW0tPmlvc3AtPmFib3J0X2V4cGxpY2l0ID09IEJGQV9UUlVFKTsKKwkJV0FSTl9PTihpb2ltLT5pb3NwLT5hYm9ydF9leHBsaWNpdCAhPSBCRkFfVFJVRSk7CiAJCWlvaW0tPmlvc3AtPmFib3J0X2V4cGxpY2l0ID0gQkZBX0ZBTFNFOwogCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2NsZWFudXBfcWZ1bGwpOwogCQlicmVhazsKQEAgLTIwNzYsNyArMTgyMiw3IEBACiB9CiAKIC8qCi0gKglBY3RpdmUgSU8gaXMgYmVpbmcgY2xlYW5lZCB1cCwgd2FpdGluZyBmb3Igcm9vbSBpbiByZXF1ZXN0IENRLgorICogQWN0aXZlIElPIGlzIGJlaW5nIGNsZWFuZWQgdXAsIHdhaXRpbmcgZm9yIHJvb20gaW4gcmVxdWVzdCBDUS4KICAqLwogc3RhdGljIHZvaWQKIGJmYV9pb2ltX3NtX2NsZWFudXBfcWZ1bGwoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0sIGVudW0gYmZhX2lvaW1fZXZlbnQgZXZlbnQpCkBAIC0yMTMxLDkgKzE4NzcsNiBAQAogc3RhdGljIHZvaWQKIGJmYV9pb2ltX3NtX2hjYihzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSwgZW51bSBiZmFfaW9pbV9ldmVudCBldmVudCkKIHsKLQliZmFfdHJjX2ZwKGlvaW0tPmJmYSwgaW9pbS0+aW90YWcpOwotCWJmYV90cmNfZnAoaW9pbS0+YmZhLCBldmVudCk7Ci0KIAlzd2l0Y2ggKGV2ZW50KSB7CiAJY2FzZSBCRkFfSU9JTV9TTV9IQ0I6CiAJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21fdW5pbml0KTsKQEAgLTIyMTMsMTEgKzE5NTYsNiBAQAogfQogCiAKLQotLyoKLSAqICBoYWxfaW9pbV9wcml2YXRlCi0gKi8KLQogc3RhdGljIHZvaWQKIF9fYmZhX2NiX2lvaW1fZ29vZF9jb21wKHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKQogewpAQCAtMjMyMyw3ICsyMDYxLDcgQEAKIAogCWlvaW0tPm5zZ3BncyA9IEJGQV9TR1BHX05QQUdFKGlvaW0tPm5zZ2VzKTsKIAlsaXN0X3NwbGljZV90YWlsX2luaXQoJmlvaW0tPmlvc3AtPnNncGdfd3FlLnNncGdfcSwgJmlvaW0tPnNncGdfcSk7Ci0JYmZhX2lvaW1fc2dwZ19zZXR1cChpb2ltKTsKKwlpb2ltLT5zZ3BnID0gYmZhX3FfZmlyc3QoJmlvaW0tPnNncGdfcSk7CiAJYmZhX3NtX3NlbmRfZXZlbnQoaW9pbSwgQkZBX0lPSU1fU01fU0dBTExPQ0VEKTsKIH0KIApAQCAtMjMzNSwxMyArMjA3MywxNiBAQAogewogCXN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0gPSBpb2ltLT5pdG5pbTsKIAlzdHJ1Y3QgYmZpX2lvaW1fcmVxX3MgKm07Ci0Jc3RhdGljIHN0cnVjdCBmY3BfY21uZF9zIGNtbmRfejAgPSB7IDAgfTsKLQlzdHJ1Y3QgYmZpX3NnZV9zICAgICAgKnNnZTsKKwlzdGF0aWMgc3RydWN0IGZjcF9jbW5kX3MgY21uZF96MCA9IHsgeyB7IDAgfSB9IH07CisJc3RydWN0IGJmaV9zZ2VfcyAqc2dlLCAqc2dwZ2U7CiAJdTMyCXBnZGxlbiA9IDA7CiAJdTMyCWZjcF9kbDsKIAl1NjQgYWRkcjsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOworCXN0cnVjdCBiZmFfc2dwZ19zICpzZ3BnOwogCXN0cnVjdCBzY3NpX2NtbmQgKmNtbmQgPSAoc3RydWN0IHNjc2lfY21uZCAqKSBpb2ltLT5kaW87CisJdTMyIGksIHNnZV9pZCwgcGdjdW1zejsKKwllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkbWFkaXI7CiAKIAkvKgogCSAqIGNoZWNrIGZvciByb29tIGluIHF1ZXVlIHRvIHNlbmQgcmVxdWVzdCBub3cKQEAgLTIzNTksMjIgKzIxMDAsNjEgQEAKIAkgKi8KIAltLT5pb190YWcgPSBjcHVfdG9fYmUxNihpb2ltLT5pb3RhZyk7CiAJbS0+cnBvcnRfaGRsID0gaW9pbS0+aXRuaW0tPnJwb3J0LT5md19oYW5kbGU7Ci0JbS0+aW9fdGltZW91dCA9IGJmYV9jYl9pb2ltX2dldF90aW1lb3V0KGlvaW0tPmRpbyk7CisJbS0+aW9fdGltZW91dCA9IDA7CiAKLQkvKgotCSAqIGJ1aWxkIGlubGluZSBJTyBTRyBlbGVtZW50IGhlcmUKLQkgKi8KIAlzZ2UgPSAmbS0+c2dlc1swXTsKLQlpZiAoaW9pbS0+bnNnZXMpIHsKLQkJc2cgPSAoc3RydWN0IHNjYXR0ZXJsaXN0ICopc2NzaV9zZ2xpc3QoY21uZCk7Ci0JCWFkZHIgPSBiZmFfb3Nfc2dhZGRyKHNnX2RtYV9hZGRyZXNzKHNnKSk7Ci0JCXNnZS0+c2dhID0gKih1bmlvbiBiZmlfYWRkcl91ICopICZhZGRyOwotCQlwZ2RsZW4gPSBzZ19kbWFfbGVuKHNnKTsKLQkJc2dlLT5zZ19sZW4gPSBwZ2RsZW47Ci0JCXNnZS0+ZmxhZ3MgPSAoaW9pbS0+bnNnZXMgPiBCRklfU0dFX0lOTElORSkgPworCXNncGcgPSBpb2ltLT5zZ3BnOworCXNnZV9pZCA9IDA7CisJc2dwZ2UgPSBOVUxMOworCXBnY3Vtc3ogPSAwOworCXNjc2lfZm9yX2VhY2hfc2coY21uZCwgc2csIGlvaW0tPm5zZ2VzLCBpKSB7CisJCWlmIChpID09IDApIHsKKwkJCS8qIGJ1aWxkIGlubGluZSBJTyBTRyBlbGVtZW50ICovCisJCQlhZGRyID0gYmZhX3NnYWRkcl9sZShzZ19kbWFfYWRkcmVzcyhzZykpOworCQkJc2dlLT5zZ2EgPSAqKHVuaW9uIGJmaV9hZGRyX3UgKikgJmFkZHI7CisJCQlwZ2RsZW4gPSBzZ19kbWFfbGVuKHNnKTsKKwkJCXNnZS0+c2dfbGVuID0gcGdkbGVuOworCQkJc2dlLT5mbGFncyA9IChpb2ltLT5uc2dlcyA+IEJGSV9TR0VfSU5MSU5FKSA/CiAJCQkJCUJGSV9TR0VfREFUQV9DUEwgOiBCRklfU0dFX0RBVEFfTEFTVDsKLQkJYmZhX3NnZV90b19iZShzZ2UpOwotCQlzZ2UrKzsKKwkJCWJmYV9zZ2VfdG9fYmUoc2dlKTsKKwkJCXNnZSsrOworCQl9IGVsc2UgeworCQkJaWYgKHNnZV9pZCA9PSAwKQorCQkJCXNncGdlID0gc2dwZy0+c2dwZy0+c2dlczsKKworCQkJYWRkciA9IGJmYV9zZ2FkZHJfbGUoc2dfZG1hX2FkZHJlc3Moc2cpKTsKKwkJCXNncGdlLT5zZ2EgPSAqKHVuaW9uIGJmaV9hZGRyX3UgKikgJmFkZHI7CisJCQlzZ3BnZS0+c2dfbGVuID0gc2dfZG1hX2xlbihzZyk7CisJCQlwZ2N1bXN6ICs9IHNncGdlLT5zZ19sZW47CisKKwkJCS8qIHNldCBmbGFncyAqLworCQkJaWYgKGkgPCAoaW9pbS0+bnNnZXMgLSAxKSAmJgorCQkJCQlzZ2VfaWQgPCAoQkZJX1NHUEdfREFUQV9TR0VTIC0gMSkpCisJCQkJc2dwZ2UtPmZsYWdzID0gQkZJX1NHRV9EQVRBOworCQkJZWxzZSBpZiAoaSA8IChpb2ltLT5uc2dlcyAtIDEpKQorCQkJCXNncGdlLT5mbGFncyA9IEJGSV9TR0VfREFUQV9DUEw7CisJCQllbHNlCisJCQkJc2dwZ2UtPmZsYWdzID0gQkZJX1NHRV9EQVRBX0xBU1Q7CisKKwkJCWJmYV9zZ2VfdG9fbGUoc2dwZ2UpOworCisJCQlzZ3BnZSsrOworCQkJaWYgKGkgPT0gKGlvaW0tPm5zZ2VzIC0gMSkpIHsKKwkJCQlzZ3BnZS0+ZmxhZ3MgPSBCRklfU0dFX1BHRExFTjsKKwkJCQlzZ3BnZS0+c2dhLmEzMi5hZGRyX2xvID0gMDsKKwkJCQlzZ3BnZS0+c2dhLmEzMi5hZGRyX2hpID0gMDsKKwkJCQlzZ3BnZS0+c2dfbGVuID0gcGdjdW1zejsKKwkJCQliZmFfc2dlX3RvX2xlKHNncGdlKTsKKwkJCX0gZWxzZSBpZiAoKytzZ2VfaWQgPT0gQkZJX1NHUEdfREFUQV9TR0VTKSB7CisJCQkJc2dwZyA9IChzdHJ1Y3QgYmZhX3NncGdfcyAqKSBiZmFfcV9uZXh0KHNncGcpOworCQkJCXNncGdlLT5mbGFncyA9IEJGSV9TR0VfTElOSzsKKwkJCQlzZ3BnZS0+c2dhID0gc2dwZy0+c2dwZ19wYTsKKwkJCQlzZ3BnZS0+c2dfbGVuID0gcGdjdW1zejsKKwkJCQliZmFfc2dlX3RvX2xlKHNncGdlKTsKKwkJCQlzZ2VfaWQgPSAwOworCQkJCXBnY3Vtc3ogPSAwOworCQkJfQorCQl9CiAJfQogCiAJaWYgKGlvaW0tPm5zZ2VzID4gQkZJX1NHRV9JTkxJTkUpIHsKQEAgLTIzOTEsMTAgKzIxNzEsMTcgQEAKIAkgKiBzZXQgdXAgSS9PIGNvbW1hbmQgcGFyYW1ldGVycwogCSAqLwogCW0tPmNtbmQgPSBjbW5kX3owOwotCW0tPmNtbmQubHVuID0gYmZhX2NiX2lvaW1fZ2V0X2x1bihpb2ltLT5kaW8pOwotCW0tPmNtbmQuaW9kaXIgPSBiZmFfY2JfaW9pbV9nZXRfaW9kaXIoaW9pbS0+ZGlvKTsKLQltLT5jbW5kLmNkYiA9ICooc2NzaV9jZGJfdCAqKWJmYV9jYl9pb2ltX2dldF9jZGIoaW9pbS0+ZGlvKTsKLQlmY3BfZGwgPSBiZmFfY2JfaW9pbV9nZXRfc2l6ZShpb2ltLT5kaW8pOworCWludF90b19zY3NpbHVuKGNtbmQtPmRldmljZS0+bHVuLCAmbS0+Y21uZC5sdW4pOworCWRtYWRpciA9IGNtbmQtPnNjX2RhdGFfZGlyZWN0aW9uOworCWlmIChkbWFkaXIgPT0gRE1BX1RPX0RFVklDRSkKKwkJbS0+Y21uZC5pb2RpciA9IEZDUF9JT0RJUl9XUklURTsKKwllbHNlIGlmIChkbWFkaXIgPT0gRE1BX0ZST01fREVWSUNFKQorCQltLT5jbW5kLmlvZGlyID0gRkNQX0lPRElSX1JFQUQ7CisJZWxzZQorCQltLT5jbW5kLmlvZGlyID0gRkNQX0lPRElSX05PTkU7CisKKwltLT5jbW5kLmNkYiA9ICooc3RydWN0IHNjc2lfY2RiX3MgKikgY21uZC0+Y21uZDsKKwlmY3BfZGwgPSBzY3NpX2J1ZmZsZW4oY21uZCk7CiAJbS0+Y21uZC5mY3BfZGwgPSBjcHVfdG9fYmUzMihmY3BfZGwpOwogCiAJLyoKQEAgLTI0MTgsMjggKzIyMDUsOSBAQAogCQliZmlfaDJpX3NldChtLT5taCwgQkZJX01DX0lPSU1fSU8sIDAsIGJmYV9scHVpZChpb2ltLT5iZmEpKTsKIAl9CiAJaWYgKGl0bmltLT5zZXFfcmVjIHx8Ci0JICAgIChiZmFfY2JfaW9pbV9nZXRfc2l6ZShpb2ltLT5kaW8pICYgKHNpemVvZih1MzIpIC0gMSkpKQorCSAgICAoc2NzaV9idWZmbGVuKGNtbmQpICYgKHNpemVvZih1MzIpIC0gMSkpKQogCQliZmlfaDJpX3NldChtLT5taCwgQkZJX01DX0lPSU1fSU8sIDAsIGJmYV9scHVpZChpb2ltLT5iZmEpKTsKIAotI2lmZGVmIElPSU1fQURWQU5DRUQKLQltLT5jbW5kLmNybiA9IGJmYV9jYl9pb2ltX2dldF9jcm4oaW9pbS0+ZGlvKTsKLQltLT5jbW5kLnByaW9yaXR5ID0gYmZhX2NiX2lvaW1fZ2V0X3ByaW9yaXR5KGlvaW0tPmRpbyk7Ci0JbS0+Y21uZC50YXNrYXR0ciA9IGJmYV9jYl9pb2ltX2dldF90YXNrYXR0cihpb2ltLT5kaW8pOwotCi0JLyoKLQkgKiBIYW5kbGUgbGFyZ2UgQ0RCICg+MTYgYnl0ZXMpLgotCSAqLwotCW0tPmNtbmQuYWRkbF9jZGJfbGVuID0gKGJmYV9jYl9pb2ltX2dldF9jZGJsZW4oaW9pbS0+ZGlvKSAtCi0JCQkJCUZDUF9DTU5EX0NEQl9MRU4pIC8gc2l6ZW9mKHUzMik7Ci0JaWYgKG0tPmNtbmQuYWRkbF9jZGJfbGVuKSB7Ci0JCW1lbWNweSgmbS0+Y21uZC5jZGIgKyAxLCAoc2NzaV9jZGJfdCAqKQotCQkJCWJmYV9jYl9pb2ltX2dldF9jZGIoaW9pbS0+ZGlvKSArIDEsCi0JCQkJbS0+Y21uZC5hZGRsX2NkYl9sZW4gKiBzaXplb2YodTMyKSk7Ci0JCWZjcF9jbW5kX2ZjcGRsKCZtLT5jbW5kKSA9Ci0JCQkJY3B1X3RvX2JlMzIoYmZhX2NiX2lvaW1fZ2V0X3NpemUoaW9pbS0+ZGlvKSk7Ci0JfQotI2VuZGlmCi0KIAkvKgogCSAqIHF1ZXVlIEkvTyBtZXNzYWdlIHRvIGZpcm13YXJlCiAJICovCkBAIC0yNDUyLDExICsyMjIwLDExIEBACiAgKiBhdCBxdWV1aW5nIHRpbWUuCiAgKi8KIHN0YXRpYyBiZmFfYm9vbGVhbl90Ci1iZmFfaW9pbV9zZ2Vfc2V0dXAoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0pCitiZmFfaW9pbV9zZ3BnX2FsbG9jKHN0cnVjdCBiZmFfaW9pbV9zICppb2ltKQogewogCXUxNgluc2dwZ3M7CiAKLQliZmFfYXNzZXJ0KGlvaW0tPm5zZ2VzID4gQkZJX1NHRV9JTkxJTkUpOworCVdBUk5fT04oaW9pbS0+bnNnZXMgPD0gQkZJX1NHRV9JTkxJTkUpOwogCiAJLyoKIAkgKiBhbGxvY2F0ZSBTRyBwYWdlcyBuZWVkZWQKQEAgLTI0NzIsNzMgKzIyNDAsMTEgQEAKIAl9CiAKIAlpb2ltLT5uc2dwZ3MgPSBuc2dwZ3M7Ci0JYmZhX2lvaW1fc2dwZ19zZXR1cChpb2ltKTsKKwlpb2ltLT5zZ3BnID0gYmZhX3FfZmlyc3QoJmlvaW0tPnNncGdfcSk7CiAKIAlyZXR1cm4gQkZBX1RSVUU7CiB9CiAKLXN0YXRpYyB2b2lkCi1iZmFfaW9pbV9zZ3BnX3NldHVwKHN0cnVjdCBiZmFfaW9pbV9zICppb2ltKQotewotCWludAkJc2dlaWQsIG5zZ2VzLCBpOwotCXN0cnVjdCBiZmlfc2dlX3MgICAgICAqc2dlOwotCXN0cnVjdCBiZmFfc2dwZ19zICpzZ3BnOwotCXUzMglwZ2N1bXN6OwotCXU2NCAgICAgICAgYWRkcjsKLQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwotCXN0cnVjdCBzY3NpX2NtbmQgKmNtbmQgPSAoc3RydWN0IHNjc2lfY21uZCAqKSBpb2ltLT5kaW87Ci0KLQlzZ2VpZCA9IEJGSV9TR0VfSU5MSU5FOwotCWlvaW0tPnNncGcgPSBzZ3BnID0gYmZhX3FfZmlyc3QoJmlvaW0tPnNncGdfcSk7Ci0KLQlzZyA9IHNjc2lfc2dsaXN0KGNtbmQpOwotCXNnID0gc2dfbmV4dChzZyk7Ci0KLQlkbyB7Ci0JCXNnZSA9IHNncGctPnNncGctPnNnZXM7Ci0JCW5zZ2VzID0gaW9pbS0+bnNnZXMgLSBzZ2VpZDsKLQkJaWYgKG5zZ2VzID4gQkZJX1NHUEdfREFUQV9TR0VTKQotCQkJbnNnZXMgPSBCRklfU0dQR19EQVRBX1NHRVM7Ci0KLQkJcGdjdW1zeiA9IDA7Ci0JCWZvciAoaSA9IDA7IGkgPCBuc2dlczsgaSsrLCBzZ2UrKywgc2dlaWQrKywgc2cgPSBzZ19uZXh0KHNnKSkgewotCQkJYWRkciA9IGJmYV9vc19zZ2FkZHIoc2dfZG1hX2FkZHJlc3Moc2cpKTsKLQkJCXNnZS0+c2dhID0gKih1bmlvbiBiZmlfYWRkcl91ICopICZhZGRyOwotCQkJc2dlLT5zZ19sZW4gPSBzZ19kbWFfbGVuKHNnKTsKLQkJCXBnY3Vtc3ogKz0gc2dlLT5zZ19sZW47Ci0KLQkJCS8qCi0JCQkgKiBzZXQgZmxhZ3MKLQkJCSAqLwotCQkJaWYgKGkgPCAobnNnZXMgLSAxKSkKLQkJCQlzZ2UtPmZsYWdzID0gQkZJX1NHRV9EQVRBOwotCQkJZWxzZSBpZiAoc2dlaWQgPCAoaW9pbS0+bnNnZXMgLSAxKSkKLQkJCQlzZ2UtPmZsYWdzID0gQkZJX1NHRV9EQVRBX0NQTDsKLQkJCWVsc2UKLQkJCQlzZ2UtPmZsYWdzID0gQkZJX1NHRV9EQVRBX0xBU1Q7Ci0KLQkJCWJmYV9zZ2VfdG9fbGUoc2dlKTsKLQkJfQotCi0JCXNncGcgPSAoc3RydWN0IGJmYV9zZ3BnX3MgKikgYmZhX3FfbmV4dChzZ3BnKTsKLQotCQkvKgotCQkgKiBzZXQgdGhlIGxpbmsgZWxlbWVudCBvZiBlYWNoIHBhZ2UKLQkJICovCi0JCWlmIChzZ2VpZCA9PSBpb2ltLT5uc2dlcykgewotCQkJc2dlLT5mbGFncyA9IEJGSV9TR0VfUEdETEVOOwotCQkJc2dlLT5zZ2EuYTMyLmFkZHJfbG8gPSAwOwotCQkJc2dlLT5zZ2EuYTMyLmFkZHJfaGkgPSAwOwotCQl9IGVsc2UgewotCQkJc2dlLT5mbGFncyA9IEJGSV9TR0VfTElOSzsKLQkJCXNnZS0+c2dhID0gc2dwZy0+c2dwZ19wYTsKLQkJfQotCQlzZ2UtPnNnX2xlbiA9IHBnY3Vtc3o7Ci0KLQkJYmZhX3NnZV90b19sZShzZ2UpOwotCX0gd2hpbGUgKHNnZWlkIDwgaW9pbS0+bnNnZXMpOwotfQotCiAvKgogICogU2VuZCBJL08gYWJvcnQgcmVxdWVzdCB0byBmaXJtd2FyZS4KICAqLwpAQCAtMjYwNSw3ICsyMzExLDcgQEAKIAkJfQogCQliZmFfaXRuaW1faW9kb25lKGlvaW0tPml0bmltKTsKIAl9IGVsc2UKLQkJYmZhX3Rza2ltX2lvZG9uZShpb2ltLT5pb3NwLT50c2tpbSk7CisJCWJmYV93Y19kb3duKCZpb2ltLT5pb3NwLT50c2tpbS0+d2MpOwogfQogCiBzdGF0aWMgYmZhX2Jvb2xlYW5fdApAQCAtMjYyMyw5ICsyMzI5LDYgQEAKIAlyZXR1cm4gQkZBX1RSVUU7CiB9CiAKLS8qCi0gKglvciBhZnRlciB0aGUgbGluayBjb21lcyBiYWNrLgotICovCiB2b2lkCiBiZmFfaW9pbV9kZWxheWVkX2NvbXAoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0sIGJmYV9ib29sZWFuX3QgaW90b3YpCiB7CkBAIC0yNjUzLDExICsyMzU2LDYgQEAKIH0KIAogCi0KLS8qCi0gKiAgaGFsX2lvaW1fZnJpZW5kCi0gKi8KLQogLyoKICAqIE1lbW9yeSBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbi4KICAqLwpAQCAtMjcyMiwxNCArMjQyMCw2IEBACiAJfQogfQogCi0vKgotICogRHJpdmVyIGRldGFjaCB0aW1lIGNhbGwuCi0gKi8KLXZvaWQKLWJmYV9pb2ltX2RldGFjaChzdHJ1Y3QgYmZhX2ZjcGltX21vZF9zICpmY3BpbSkKLXsKLX0KLQogdm9pZAogYmZhX2lvaW1faXNyKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZpX21zZ19zICptKQogewpAQCAtMjc0Miw3ICsyNDMyLDcgQEAKIAlpb3RhZyA9IGJlMTZfdG9fY3B1KHJzcC0+aW9fdGFnKTsKIAogCWlvaW0gPSBCRkFfSU9JTV9GUk9NX1RBRyhmY3BpbSwgaW90YWcpOwotCWJmYV9hc3NlcnQoaW9pbS0+aW90YWcgPT0gaW90YWcpOworCVdBUk5fT04oaW9pbS0+aW90YWcgIT0gaW90YWcpOwogCiAJYmZhX3RyYyhpb2ltLT5iZmEsIGlvaW0tPmlvdGFnKTsKIAliZmFfdHJjKGlvaW0tPmJmYSwgcnNwLT5pb19zdGF0dXMpOwpAQCAtMjc3MywxMyArMjQ2MywxMyBAQAogCiAJY2FzZSBCRklfSU9JTV9TVFNfUFJPVE9fRVJSOgogCQliZmFfc3RhdHMoaW9pbS0+aXRuaW0sIGlvY29tX3Byb3RvX2Vycik7Ci0JCWJmYV9hc3NlcnQocnNwLT5yZXVzZV9pb190YWcpOworCQlXQVJOX09OKCFyc3AtPnJldXNlX2lvX3RhZyk7CiAJCWV2dCA9IEJGQV9JT0lNX1NNX0NPTVA7CiAJCWJyZWFrOwogCiAJY2FzZSBCRklfSU9JTV9TVFNfU1FFUl9ORUVERUQ6CiAJCWJmYV9zdGF0cyhpb2ltLT5pdG5pbSwgaW9jb21fc3Flcl9uZWVkZWQpOwotCQliZmFfYXNzZXJ0KHJzcC0+cmV1c2VfaW9fdGFnID09IDApOworCQlXQVJOX09OKHJzcC0+cmV1c2VfaW9fdGFnICE9IDApOwogCQlldnQgPSBCRkFfSU9JTV9TTV9TUVJFVFJZOwogCQlicmVhazsKIApAQCAtMjgwOCw3ICsyNDk4LDcgQEAKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQliZmFfYXNzZXJ0KDApOworCQlXQVJOX09OKDEpOwogCX0KIAogCWJmYV9zbV9zZW5kX2V2ZW50KGlvaW0sIGV2dCk7CkBAIC0yODI1LDM5ICsyNTE1LDEyIEBACiAJaW90YWcgPSBiZTE2X3RvX2NwdShyc3AtPmlvX3RhZyk7CiAKIAlpb2ltID0gQkZBX0lPSU1fRlJPTV9UQUcoZmNwaW0sIGlvdGFnKTsKLQliZmFfYXNzZXJ0KGlvaW0tPmlvdGFnID09IGlvdGFnKTsKKwlXQVJOX09OKEJGQV9JT0lNX1RBR18yX0lEKGlvaW0tPmlvdGFnKSAhPSBpb3RhZyk7CiAKLQliZmFfdHJjX2ZwKGlvaW0tPmJmYSwgaW9pbS0+aW90YWcpOwogCWJmYV9pb2ltX2NiX3Byb2ZpbGVfY29tcChmY3BpbSwgaW9pbSk7Ci0KIAliZmFfc21fc2VuZF9ldmVudChpb2ltLCBCRkFfSU9JTV9TTV9DT01QX0dPT0QpOwogfQogCi12b2lkCi1iZmFfaW9pbV9wcm9maWxlX3N0YXJ0KHN0cnVjdCBiZmFfaW9pbV9zICppb2ltKQotewotCWlvaW0tPnN0YXJ0X3RpbWUgPSBqaWZmaWVzOwotfQotCi12b2lkCi1iZmFfaW9pbV9wcm9maWxlX2NvbXAoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0pCi17Ci0JdTMyIGZjcF9kbCA9IGJmYV9jYl9pb2ltX2dldF9zaXplKGlvaW0tPmRpbyk7Ci0JdTMyIGluZGV4ID0gYmZhX2lvaW1fZ2V0X2luZGV4KGZjcF9kbCk7Ci0JdTY0IGVuZF90aW1lID0gamlmZmllczsKLQlzdHJ1Y3QgYmZhX2l0bmltX2xhdGVuY3lfcyAqaW9fbGF0ID0KLQkJCSYoaW9pbS0+aXRuaW0tPmlvcHJvZmlsZS5pb19sYXRlbmN5KTsKLQl1MzIgdmFsID0gKHUzMikoZW5kX3RpbWUgLSBpb2ltLT5zdGFydF90aW1lKTsKLQotCWJmYV9pdG5pbV9pb3Byb2ZpbGVfdXBkYXRlKGlvaW0tPml0bmltLCBpbmRleCk7Ci0KLQlpb19sYXQtPmNvdW50W2luZGV4XSsrOwotCWlvX2xhdC0+bWluW2luZGV4XSA9IChpb19sYXQtPm1pbltpbmRleF0gPCB2YWwpID8KLQkJaW9fbGF0LT5taW5baW5kZXhdIDogdmFsOwotCWlvX2xhdC0+bWF4W2luZGV4XSA9IChpb19sYXQtPm1heFtpbmRleF0gPiB2YWwpID8KLQkJaW9fbGF0LT5tYXhbaW5kZXhdIDogdmFsOwotCWlvX2xhdC0+YXZnW2luZGV4XSArPSB2YWw7Ci19CiAvKgogICogQ2FsbGVkIGJ5IGl0bmltIHRvIGNsZWFuIHVwIElPIHdoaWxlIGdvaW5nIG9mZmxpbmUuCiAgKi8KQEAgLTI5MDMsMTEgKzI1NjYsNiBAQAogfQogCiAKLQotLyoKLSAqICBoYWxfaW9pbV9hcGkKLSAqLwotCiAvKgogICogQWxsb2NhdGUgSU9JTSByZXNvdXJjZSBmb3IgaW5pdGlhdG9yIG1vZGUgSS9PIHJlcXVlc3QuCiAgKi8KQEAgLTI5MzYsNyArMjU5NCw2IEBACiAJZmNwaW0tPmlvc19hY3RpdmUrKzsKIAogCWxpc3RfYWRkX3RhaWwoJmlvaW0tPnFlLCAmaXRuaW0tPmlvX3EpOwotCWJmYV90cmNfZnAoaW9pbS0+YmZhLCBpb2ltLT5pb3RhZyk7CiAKIAlyZXR1cm4gaW9pbTsKIH0KQEAgLTI5NDYsMTggKzI2MDMsMTMgQEAKIHsKIAlzdHJ1Y3QgYmZhX2ZjcGltX21vZF9zICpmY3BpbSA9IGlvaW0tPmZjcGltOwogCi0JYmZhX3RyY19mcChpb2ltLT5iZmEsIGlvaW0tPmlvdGFnKTsKLQliZmFfYXNzZXJ0X2ZwKGJmYV9zbV9jbXBfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21fdW5pbml0KSk7Ci0KLQliZmFfYXNzZXJ0X2ZwKGxpc3RfZW1wdHkoJmlvaW0tPnNncGdfcSkgfHwKLQkJCShpb2ltLT5uc2dlcyA+IEJGSV9TR0VfSU5MSU5FKSk7Ci0KIAlpZiAoaW9pbS0+bnNncGdzID4gMCkKIAkJYmZhX3NncGdfbWZyZWUoaW9pbS0+YmZhLCAmaW9pbS0+c2dwZ19xLCBpb2ltLT5uc2dwZ3MpOwogCiAJYmZhX3N0YXRzKGlvaW0tPml0bmltLCBpb19jb21wcyk7CiAJZmNwaW0tPmlvc19hY3RpdmUtLTsKIAorCWlvaW0tPmlvdGFnICY9IEJGQV9JT0lNX0lPVEFHX01BU0s7CiAJbGlzdF9kZWwoJmlvaW0tPnFlKTsKIAlsaXN0X2FkZF90YWlsKCZpb2ltLT5xZSwgJmZjcGltLT5pb2ltX2ZyZWVfcSk7CiB9CkBAIC0yOTY1LDE2ICsyNjE3LDEzIEBACiB2b2lkCiBiZmFfaW9pbV9zdGFydChzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSkKIHsKLQliZmFfdHJjX2ZwKGlvaW0tPmJmYSwgaW9pbS0+aW90YWcpOwotCiAJYmZhX2lvaW1fY2JfcHJvZmlsZV9zdGFydChpb2ltLT5mY3BpbSwgaW9pbSk7CiAKIAkvKgogCSAqIE9idGFpbiB0aGUgcXVldWUgb3ZlciB3aGljaCB0aGlzIHJlcXVlc3QgaGFzIHRvIGJlIGlzc3VlZAogCSAqLwogCWlvaW0tPnJlcXEgPSBiZmFfZmNwaW1faW9yZWRpcmVjdF9lbmFibGVkKGlvaW0tPmJmYSkgPwotCQkJYmZhX2NiX2lvaW1fZ2V0X3JlcXEoaW9pbS0+ZGlvKSA6Ci0JCQliZmFfaXRuaW1fZ2V0X3JlcXEoaW9pbSk7CisJCQlCRkFfRkFMU0UgOiBiZmFfaXRuaW1fZ2V0X3JlcXEoaW9pbSk7CiAKIAliZmFfc21fc2VuZF9ldmVudChpb2ltLCBCRkFfSU9JTV9TTV9TVEFSVCk7CiB9CkBAIC0yOTk3LDEzICsyNjQ2LDEyIEBACiAJcmV0dXJuIEJGQV9TVEFUVVNfT0s7CiB9CiAKLQogLyoKICAqICBCRkEgVFNLSU0gc3RhdGUgbWFjaGluZSBmdW5jdGlvbnMKICAqLwogCiAvKgotICoJVGFzayBtYW5hZ2VtZW50IGNvbW1hbmQgYmVnaW5uaW5nIHN0YXRlLgorICogVGFzayBtYW5hZ2VtZW50IGNvbW1hbmQgYmVnaW5uaW5nIHN0YXRlLgogICovCiBzdGF0aWMgdm9pZAogYmZhX3Rza2ltX3NtX3VuaW5pdChzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltLCBlbnVtIGJmYV90c2tpbV9ldmVudCBldmVudCkKQEAgLTMwNDAsOSArMjY4OCw4IEBACiB9CiAKIC8qCi0gKiBicmllZgotICoJVE0gY29tbWFuZCBpcyBhY3RpdmUsIGF3YWl0aW5nIGNvbXBsZXRpb24gZnJvbSBmaXJtd2FyZSB0bwotICoJY2xlYW51cCBJTyByZXF1ZXN0cyBpbiBUTSBzY29wZS4KKyAqIFRNIGNvbW1hbmQgaXMgYWN0aXZlLCBhd2FpdGluZyBjb21wbGV0aW9uIGZyb20gZmlybXdhcmUgdG8KKyAqIGNsZWFudXAgSU8gcmVxdWVzdHMgaW4gVE0gc2NvcGUuCiAgKi8KIHN0YXRpYyB2b2lkCiBiZmFfdHNraW1fc21fYWN0aXZlKHN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0sIGVudW0gYmZhX3Rza2ltX2V2ZW50IGV2ZW50KQpAQCAtMzA3Nyw4ICsyNzI0LDggQEAKIH0KIAogLyoKLSAqCUFuIGFjdGl2ZSBUTSBpcyBiZWluZyBjbGVhbmVkIHVwIHNpbmNlIElUTiBpcyBvZmZsaW5lLiBBd2FpdGluZyBjbGVhbnVwCi0gKgljb21wbGV0aW9uIGV2ZW50IGZyb20gZmlybXdhcmUuCisgKiBBbiBhY3RpdmUgVE0gaXMgYmVpbmcgY2xlYW5lZCB1cCBzaW5jZSBJVE4gaXMgb2ZmbGluZS4gQXdhaXRpbmcgY2xlYW51cAorICogY29tcGxldGlvbiBldmVudCBmcm9tIGZpcm13YXJlLgogICovCiBzdGF0aWMgdm9pZAogYmZhX3Rza2ltX3NtX2NsZWFudXAoc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSwgZW51bSBiZmFfdHNraW1fZXZlbnQgZXZlbnQpCkBAIC0zMTM4LDcgKzI3ODUsNyBAQAogfQogCiAvKgotICoJVGFzayBtYW5hZ2VtZW50IGNvbW1hbmQgaXMgd2FpdGluZyBmb3Igcm9vbSBpbiByZXF1ZXN0IENRCisgKiBUYXNrIG1hbmFnZW1lbnQgY29tbWFuZCBpcyB3YWl0aW5nIGZvciByb29tIGluIHJlcXVlc3QgQ1EKICAqLwogc3RhdGljIHZvaWQKIGJmYV90c2tpbV9zbV9xZnVsbChzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltLCBlbnVtIGJmYV90c2tpbV9ldmVudCBldmVudCkKQEAgLTMxNzMsOCArMjgyMCw4IEBACiB9CiAKIC8qCi0gKglUYXNrIG1hbmFnZW1lbnQgY29tbWFuZCBpcyBhY3RpdmUsIGF3YWl0aW5nIGZvciByb29tIGluIHJlcXVlc3QgQ1EKLSAqCXRvIHNlbmQgY2xlYW4gdXAgcmVxdWVzdC4KKyAqIFRhc2sgbWFuYWdlbWVudCBjb21tYW5kIGlzIGFjdGl2ZSwgYXdhaXRpbmcgZm9yIHJvb20gaW4gcmVxdWVzdCBDUQorICogdG8gc2VuZCBjbGVhbiB1cCByZXF1ZXN0LgogICovCiBzdGF0aWMgdm9pZAogYmZhX3Rza2ltX3NtX2NsZWFudXBfcWZ1bGwoc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSwKQEAgLTMxODYsMTAgKzI4MzMsOCBAQAogCWNhc2UgQkZBX1RTS0lNX1NNX0RPTkU6CiAJCWJmYV9yZXFxX3djYW5jZWwoJnRza2ltLT5yZXFxX3dhaXQpOwogCQkvKgotCQkgKgogCQkgKiBGYWxsIHRocm91Z2ggISEhCiAJCSAqLwotCiAJY2FzZSBCRkFfVFNLSU1fU01fUVJFU1VNRToKIAkJYmZhX3NtX3NldF9zdGF0ZSh0c2tpbSwgYmZhX3Rza2ltX3NtX2NsZWFudXApOwogCQliZmFfdHNraW1fc2VuZF9hYm9ydCh0c2tpbSk7CkBAIC0zMjA4LDcgKzI4NTMsNyBAQAogfQogCiAvKgotICoJQkZBIGNhbGxiYWNrIGlzIHBlbmRpbmcKKyAqIEJGQSBjYWxsYmFjayBpcyBwZW5kaW5nCiAgKi8KIHN0YXRpYyB2b2lkCiBiZmFfdHNraW1fc21faGNiKHN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0sIGVudW0gYmZhX3Rza2ltX2V2ZW50IGV2ZW50KQpAQCAtMzIzMywxMiArMjg3OCw2IEBACiAJfQogfQogCi0KLQotLyoKLSAqICBoYWxfdHNraW1fcHJpdmF0ZQotICovCi0KIHN0YXRpYyB2b2lkCiBfX2JmYV9jYl90c2tpbV9kb25lKHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKQogewpAQCAtMzI2OCw4ICsyOTA3LDggQEAKIAkJCQlCRklfVFNLSU1fU1RTX0ZBSUxFRCk7CiB9CiAKLXN0YXRpYwliZmFfYm9vbGVhbl90Ci1iZmFfdHNraW1fbWF0Y2hfc2NvcGUoc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSwgbHVuX3QgbHVuKQorc3RhdGljIGJmYV9ib29sZWFuX3QKK2JmYV90c2tpbV9tYXRjaF9zY29wZShzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltLCBzdHJ1Y3Qgc2NzaV9sdW4gbHVuKQogewogCXN3aXRjaCAodHNraW0tPnRtX2NtbmQpIHsKIAljYXNlIEZDUF9UTV9UQVJHRVRfUkVTRVQ6CkBAIC0zMjc5LDI0ICsyOTE4LDI2IEBACiAJY2FzZSBGQ1BfVE1fQ0xFQVJfVEFTS19TRVQ6CiAJY2FzZSBGQ1BfVE1fTFVOX1JFU0VUOgogCWNhc2UgRkNQX1RNX0NMRUFSX0FDQToKLQkJcmV0dXJuICh0c2tpbS0+bHVuID09IGx1bik7CisJCXJldHVybiAhbWVtY21wKCZ0c2tpbS0+bHVuLCAmbHVuLCBzaXplb2YobHVuKSk7CiAKIAlkZWZhdWx0OgotCQliZmFfYXNzZXJ0KDApOworCQlXQVJOX09OKDEpOwogCX0KIAogCXJldHVybiBCRkFfRkFMU0U7CiB9CiAKIC8qCi0gKglHYXRoZXIgYWZmZWN0ZWQgSU8gcmVxdWVzdHMgYW5kIHRhc2sgbWFuYWdlbWVudCBjb21tYW5kcy4KKyAqIEdhdGhlciBhZmZlY3RlZCBJTyByZXF1ZXN0cyBhbmQgdGFzayBtYW5hZ2VtZW50IGNvbW1hbmRzLgogICovCiBzdGF0aWMgdm9pZAogYmZhX3Rza2ltX2dhdGhlcl9pb3Moc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSkKIHsKIAlzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltID0gdHNraW0tPml0bmltOwogCXN0cnVjdCBiZmFfaW9pbV9zICppb2ltOwotCXN0cnVjdCBsaXN0X2hlYWQJKnFlLCAqcWVuOworCXN0cnVjdCBsaXN0X2hlYWQgKnFlLCAqcWVuOworCXN0cnVjdCBzY3NpX2NtbmQgKmNtbmQ7CisJc3RydWN0IHNjc2lfbHVuIHNjc2lsdW47CiAKIAlJTklUX0xJU1RfSEVBRCgmdHNraW0tPmlvX3EpOwogCkBAIC0zMzA1LDggKzI5NDYsOSBAQAogCSAqLwogCWxpc3RfZm9yX2VhY2hfc2FmZShxZSwgcWVuLCAmaXRuaW0tPmlvX3EpIHsKIAkJaW9pbSA9IChzdHJ1Y3QgYmZhX2lvaW1fcyAqKSBxZTsKLQkJaWYgKGJmYV90c2tpbV9tYXRjaF9zY29wZQotCQkJKHRza2ltLCBiZmFfY2JfaW9pbV9nZXRfbHVuKGlvaW0tPmRpbykpKSB7CisJCWNtbmQgPSAoc3RydWN0IHNjc2lfY21uZCAqKSBpb2ltLT5kaW87CisJCWludF90b19zY3NpbHVuKGNtbmQtPmRldmljZS0+bHVuLCAmc2NzaWx1bik7CisJCWlmIChiZmFfdHNraW1fbWF0Y2hfc2NvcGUodHNraW0sIHNjc2lsdW4pKSB7CiAJCQlsaXN0X2RlbCgmaW9pbS0+cWUpOwogCQkJbGlzdF9hZGRfdGFpbCgmaW9pbS0+cWUsICZ0c2tpbS0+aW9fcSk7CiAJCX0KQEAgLTMzMTcsOCArMjk1OSw5IEBACiAJICovCiAJbGlzdF9mb3JfZWFjaF9zYWZlKHFlLCBxZW4sICZpdG5pbS0+cGVuZGluZ19xKSB7CiAJCWlvaW0gPSAoc3RydWN0IGJmYV9pb2ltX3MgKikgcWU7Ci0JCWlmIChiZmFfdHNraW1fbWF0Y2hfc2NvcGUKLQkJCSh0c2tpbSwgYmZhX2NiX2lvaW1fZ2V0X2x1bihpb2ltLT5kaW8pKSkgeworCQljbW5kID0gKHN0cnVjdCBzY3NpX2NtbmQgKikgaW9pbS0+ZGlvOworCQlpbnRfdG9fc2NzaWx1bihjbW5kLT5kZXZpY2UtPmx1biwgJnNjc2lsdW4pOworCQlpZiAoYmZhX3Rza2ltX21hdGNoX3Njb3BlKHRza2ltLCBzY3NpbHVuKSkgewogCQkJbGlzdF9kZWwoJmlvaW0tPnFlKTsKIAkJCWxpc3RfYWRkX3RhaWwoJmlvaW0tPnFlLCAmaW9pbS0+ZmNwaW0tPmlvaW1fY29tcF9xKTsKIAkJCWJmYV9pb2ltX3Rvdihpb2ltKTsKQEAgLTMzMjcsNyArMjk3MCw3IEBACiB9CiAKIC8qCi0gKglJTyBjbGVhbnVwIGNvbXBsZXRpb24KKyAqIElPIGNsZWFudXAgY29tcGxldGlvbgogICovCiBzdGF0aWMgdm9pZAogYmZhX3Rza2ltX2NsZWFucF9jb21wKHZvaWQgKnRza2ltX2NiYXJnKQpAQCAtMzMzOSw3ICsyOTgyLDcgQEAKIH0KIAogLyoKLSAqCUdhdGhlciBhZmZlY3RlZCBJTyByZXF1ZXN0cyBhbmQgdGFzayBtYW5hZ2VtZW50IGNvbW1hbmRzLgorICogR2F0aGVyIGFmZmVjdGVkIElPIHJlcXVlc3RzIGFuZCB0YXNrIG1hbmFnZW1lbnQgY29tbWFuZHMuCiAgKi8KIHN0YXRpYyB2b2lkCiBiZmFfdHNraW1fY2xlYW51cF9pb3Moc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSkKQEAgLTMzNTksNyArMzAwMiw3IEBACiB9CiAKIC8qCi0gKglTZW5kIHRhc2sgbWFuYWdlbWVudCByZXF1ZXN0IHRvIGZpcm13YXJlLgorICogU2VuZCB0YXNrIG1hbmFnZW1lbnQgcmVxdWVzdCB0byBmaXJtd2FyZS4KICAqLwogc3RhdGljIGJmYV9ib29sZWFuX3QKIGJmYV90c2tpbV9zZW5kKHN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0pCkBAIC0zMzk0LDcgKzMwMzcsNyBAQAogfQogCiAvKgotICoJU2VuZCBhYm9ydCByZXF1ZXN0IHRvIGNsZWFudXAgYW4gYWN0aXZlIFRNIHRvIGZpcm13YXJlLgorICogU2VuZCBhYm9ydCByZXF1ZXN0IHRvIGNsZWFudXAgYW4gYWN0aXZlIFRNIHRvIGZpcm13YXJlLgogICovCiBzdGF0aWMgYmZhX2Jvb2xlYW5fdAogYmZhX3Rza2ltX3NlbmRfYWJvcnQoc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSkKQEAgLTM0MjUsNyArMzA2OCw3IEBACiB9CiAKIC8qCi0gKglDYWxsIHRvIHJlc3VtZSB0YXNrIG1hbmFnZW1lbnQgY21uZCB3YWl0aW5nIGZvciByb29tIGluIHJlcXVlc3QgcXVldWUuCisgKiBDYWxsIHRvIHJlc3VtZSB0YXNrIG1hbmFnZW1lbnQgY21uZCB3YWl0aW5nIGZvciByb29tIGluIHJlcXVlc3QgcXVldWUuCiAgKi8KIHN0YXRpYyB2b2lkCiBiZmFfdHNraW1fcXJlc3VtZSh2b2lkICpjYmFyZykKQEAgLTM0NTEsMTIgKzMwOTQsNiBAQAogCX0KIH0KIAotCi0KLS8qCi0gKiAgaGFsX3Rza2ltX2ZyaWVuZAotICovCi0KIC8qCiAgKiBOb3RpZmljYXRpb24gb24gY29tcGxldGlvbnMgZnJvbSByZWxhdGVkIGlvaW0uCiAgKi8KQEAgLTM0ODksNyArMzEyNiw3IEBACiB9CiAKIC8qCi0gKglNZW1vcnkgYWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24uCisgKiBNZW1vcnkgYWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24uCiAgKi8KIHZvaWQKIGJmYV90c2tpbV9hdHRhY2goc3RydWN0IGJmYV9mY3BpbV9tb2RfcyAqZmNwaW0sIHN0cnVjdCBiZmFfbWVtaW5mb19zICptaW5mbykKQEAgLTM1MjIsMTQgKzMxNTksNiBAQAogfQogCiB2b2lkCi1iZmFfdHNraW1fZGV0YWNoKHN0cnVjdCBiZmFfZmNwaW1fbW9kX3MgKmZjcGltKQotewotCS8qCi0JKiBAdG9kbwotCSovCi19Ci0KLXZvaWQKIGJmYV90c2tpbV9pc3Ioc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmlfbXNnX3MgKm0pCiB7CiAJc3RydWN0IGJmYV9mY3BpbV9tb2RfcyAqZmNwaW0gPSBCRkFfRkNQSU1fTU9EKGJmYSk7CkBAIC0zNTM4LDcgKzMxNjcsNyBAQAogCXUxNgl0c2tfdGFnID0gYmUxNl90b19jcHUocnNwLT50c2tfdGFnKTsKIAogCXRza2ltID0gQkZBX1RTS0lNX0ZST01fVEFHKGZjcGltLCB0c2tfdGFnKTsKLQliZmFfYXNzZXJ0KHRza2ltLT50c2tfdGFnID09IHRza190YWcpOworCVdBUk5fT04odHNraW0tPnRza190YWcgIT0gdHNrX3RhZyk7CiAKIAl0c2tpbS0+dHNrX3N0YXR1cyA9IHJzcC0+dHNrX3N0YXR1czsKIApAQCAtMzU1NiwxMiArMzE4NSw2IEBACiB9CiAKIAotCi0vKgotICogIGhhbF90c2tpbV9hcGkKLSAqLwotCi0KIHN0cnVjdCBiZmFfdHNraW1fcyAqCiBiZmFfdHNraW1fYWxsb2Moc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmFkX3Rza2ltX3MgKmR0c2spCiB7CkBAIC0zNTc5LDEzICszMjAyLDEzIEBACiB2b2lkCiBiZmFfdHNraW1fZnJlZShzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltKQogewotCWJmYV9hc3NlcnQoYmZhX3FfaXNfb25fcV9mdW5jKCZ0c2tpbS0+aXRuaW0tPnRza19xLCAmdHNraW0tPnFlKSk7CisJV0FSTl9PTighYmZhX3FfaXNfb25fcV9mdW5jKCZ0c2tpbS0+aXRuaW0tPnRza19xLCAmdHNraW0tPnFlKSk7CiAJbGlzdF9kZWwoJnRza2ltLT5xZSk7CiAJbGlzdF9hZGRfdGFpbCgmdHNraW0tPnFlLCAmdHNraW0tPmZjcGltLT50c2tpbV9mcmVlX3EpOwogfQogCiAvKgotICoJU3RhcnQgYSB0YXNrIG1hbmFnZW1lbnQgY29tbWFuZC4KKyAqIFN0YXJ0IGEgdGFzayBtYW5hZ2VtZW50IGNvbW1hbmQuCiAgKgogICogQHBhcmFtW2luXQl0c2tpbQlCRkEgdGFzayBtYW5hZ2VtZW50IGNvbW1hbmQgaW5zdGFuY2UKICAqIEBwYXJhbVtpbl0JaXRuaW0JaS10IG5leHVzIGZvciB0aGUgdGFzayBtYW5hZ2VtZW50IGNvbW1hbmQKQEAgLTM1OTYsNyArMzIxOSw4IEBACiAgKiBAcmV0dXJuIE5vbmUuCiAgKi8KIHZvaWQKLWJmYV90c2tpbV9zdGFydChzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltLCBzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLCBsdW5fdCBsdW4sCitiZmFfdHNraW1fc3RhcnQoc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSwgc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSwKKwkJCXN0cnVjdCBzY3NpX2x1biBsdW4sCiAJCQllbnVtIGZjcF90bV9jbW5kIHRtX2NtbmQsIHU4IHRzZWNzKQogewogCXRza2ltLT5pdG5pbQk9IGl0bmltOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNwaW0uaCBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2ZjcGltLmgKaW5kZXggZGI1MzcxNy4uMWUzOGRhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNwaW0uaAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3BpbS5oCkBAIC00MSw3ICs0MSw3IEBACiAJKF9faXRuaW0tPmlvcHJvZmlsZS5pb2NvbXBzW19faW5kZXhdKyspCiAKICNkZWZpbmUgQkZBX0lPSU1fUkVUUllfVEFHX09GRlNFVCAxMQotI2RlZmluZSBCRkFfSU9JTV9SRVRSWV9UQUdfTUFTSyAweDA3ZmYgLyogMksgSU9zICovCisjZGVmaW5lIEJGQV9JT0lNX0lPVEFHX01BU0sgMHgwN2ZmIC8qIDJLIElPcyAqLwogI2RlZmluZSBCRkFfSU9JTV9SRVRSWV9NQVggNwogCiAvKiBCdWNrZXRzIGFyZSBhcmUgNTEyIGJ5dGVzIHRvIDJNQiAqLwpAQCAtOTQsMTIgKzk0LDEyIEBACiAJc3RydWN0IGxpc3RfaGVhZAlpb2ltX3Jlc2ZyZWVfcTsgLyogIElPcyB3YWl0aW5nIGZvciBmL3cgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCWlvaW1fY29tcF9xOwkvKiAgSU8gZ2xvYmFsIGNvbXAgUQkqLwogCXN0cnVjdCBsaXN0X2hlYWQJdHNraW1fZnJlZV9xOwotCXUzMgkJaW9zX2FjdGl2ZTsJLyogIGN1cnJlbnQgYWN0aXZlIElPcwkqLwotCXUzMgkJZGVsYXlfY29tcDsKKwl1MzIJCQlpb3NfYWN0aXZlOwkvKiAgY3VycmVudCBhY3RpdmUgSU9zCSovCisJdTMyCQkJZGVsYXlfY29tcDsKIAlzdHJ1Y3QgYmZhX2ZjcGltX2RlbF9pdG5fc3RhdHNfcyBkZWxfaXRuX3N0YXRzOwogCWJmYV9ib29sZWFuX3QJCWlvcmVkaXJlY3Q7CiAJYmZhX2Jvb2xlYW5fdAkJaW9fcHJvZmlsZTsKLQl1MzIJCWlvX3Byb2ZpbGVfc3RhcnRfdGltZTsKKwl1MzIJCQlpb19wcm9maWxlX3N0YXJ0X3RpbWU7CiAJYmZhX2ZjcGltX3Byb2ZpbGVfdCAgICAgcHJvZmlsZV9jb21wOwogCWJmYV9mY3BpbV9wcm9maWxlX3QgICAgIHByb2ZpbGVfc3RhcnQ7CiB9OwpAQCAtMTE0LDI1ICsxMTQsMjQgQEAKIAlzdHJ1Y3QgYmZhX2ZjcGltX21vZF9zCSpmY3BpbTsJCS8qICBwYXJlbnQgZmNwaW0gbW9kdWxlICovCiAJc3RydWN0IGJmYV9pdG5pbV9zCSppdG5pbTsJCS8qICBpLXQtbiBuZXh1cyBmb3IgdGhpcyBJTyAgKi8KIAlzdHJ1Y3QgYmZhZF9pb2ltX3MJKmRpbzsJCS8qICBkcml2ZXIgSU8gaGFuZGxlCSovCi0JdTE2CQlpb3RhZzsJCS8qICBGV0kgSU8gdGFnCSovCi0JdTE2CQlhYm9ydF90YWc7CS8qICB1bnFpdWUgYWJvcnQgcmVxdWVzdCB0YWcgKi8KLQl1MTYJCW5zZ2VzOwkJLyogIG51bWJlciBvZiBTRyBlbGVtZW50cyAqLwotCXUxNgkJbnNncGdzOwkJLyogIG51bWJlciBvZiBTRyBwYWdlcwkqLworCXUxNgkJCWlvdGFnOwkJLyogIEZXSSBJTyB0YWcJKi8KKwl1MTYJCQlhYm9ydF90YWc7CS8qICB1bnFpdWUgYWJvcnQgcmVxdWVzdCB0YWcgKi8KKwl1MTYJCQluc2dlczsJCS8qICBudW1iZXIgb2YgU0cgZWxlbWVudHMgKi8KKwl1MTYJCQluc2dwZ3M7CQkvKiAgbnVtYmVyIG9mIFNHIHBhZ2VzCSovCiAJc3RydWN0IGJmYV9zZ3BnX3MJKnNncGc7CQkvKiAgZmlyc3QgU0cgcGFnZQkqLwogCXN0cnVjdCBsaXN0X2hlYWQJc2dwZ19xOwkJLyogIGFsbG9jYXRlZCBTRyBwYWdlcwkqLwogCXN0cnVjdCBiZmFfY2JfcWVfcwloY2JfcWU7CQkvKiAgYmZhIGNhbGxiYWNrIHFlbGVtCSovCiAJYmZhX2NiX2NiZm5fdAkJaW9fY2JmbjsJLyogIElPIGNvbXBsZXRpb24gaGFuZGxlciAqLwotCXN0cnVjdCBiZmFfaW9pbV9zcF9zICppb3NwOwkJLyogIHNsb3ctcGF0aCBJTyBoYW5kbGluZyAqLwotCXU4CQlyZXFxOwkJLyogIFJlcXVlc3QgcXVldWUgZm9yIEkvTyAqLwotCXU2NCBzdGFydF90aW1lOwkJCS8qICBJTydzIFByb2ZpbGUgc3RhcnQgdmFsICovCisJc3RydWN0IGJmYV9pb2ltX3NwX3MJKmlvc3A7CQkvKiAgc2xvdy1wYXRoIElPIGhhbmRsaW5nICovCisJdTgJCQlyZXFxOwkJLyogIFJlcXVlc3QgcXVldWUgZm9yIEkvTyAqLworCXU2NAkJCXN0YXJ0X3RpbWU7CS8qICBJTydzIFByb2ZpbGUgc3RhcnQgdmFsICovCiB9OwogCi0KIHN0cnVjdCBiZmFfaW9pbV9zcF9zIHsKIAlzdHJ1Y3QgYmZpX21zZ19zCWNvbXBfcnNwbXNnOwkvKiAgSU8gY29tcCBmL3cgcmVzcG9uc2UgKi8KIAl1OAkJCSpzbnNpbmZvOwkvKiAgc2Vuc2UgaW5mbyBmb3IgdGhpcyBJTyAgICovCi0Jc3RydWN0IGJmYV9zZ3BnX3dxZV9zIHNncGdfd3FlOwkvKiAgd2FpdHEgZWxlbSBmb3Igc2dwZwkqLwotCXN0cnVjdCBiZmFfcmVxcV93YWl0X3MgcmVxcV93YWl0OwkvKiAgdG8gd2FpdCBmb3Igcm9vbSBpbiByZXFxICovCisJc3RydWN0IGJmYV9zZ3BnX3dxZV9zCXNncGdfd3FlOwkvKiAgd2FpdHEgZWxlbSBmb3Igc2dwZwkqLworCXN0cnVjdCBiZmFfcmVxcV93YWl0X3MJcmVxcV93YWl0OwkvKiAgdG8gd2FpdCBmb3Igcm9vbSBpbiByZXFxICovCiAJYmZhX2Jvb2xlYW5fdAkJYWJvcnRfZXhwbGljaXQ7CS8qICBhYm9ydGVkIGJ5IE9TCSovCiAJc3RydWN0IGJmYV90c2tpbV9zCSp0c2tpbTsJCS8qICBSZWxldmFudCBUTSBjbWQJKi8KIH07CkBAIC0xNDMsMzUgKzE0MiwzNCBAQAogc3RydWN0IGJmYV90c2tpbV9zIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkCXFlOwogCWJmYV9zbV90CQlzbTsKLQlzdHJ1Y3QgYmZhX3MJKmJmYTsJLyogIEJGQSBtb2R1bGUgICovCisJc3RydWN0IGJmYV9zCQkqYmZhOwkvKiAgQkZBIG1vZHVsZSAgKi8KIAlzdHJ1Y3QgYmZhX2ZjcGltX21vZF9zICAqZmNwaW07CS8qICBwYXJlbnQgZmNwaW0gbW9kdWxlCSovCiAJc3RydWN0IGJmYV9pdG5pbV9zCSppdG5pbTsJLyogIGktdC1uIG5leHVzIGZvciB0aGlzIElPICAqLwotCXN0cnVjdCBiZmFkX3Rza2ltX3MJKmR0c2s7ICAgLyogIGRyaXZlciB0YXNrIG1nbXQgY21uZAkqLwotCWJmYV9ib29sZWFuX3QJbm90aWZ5OwkvKiAgbm90aWZ5IGl0bmltIG9uIFRNIGNvbXAgICovCi0JbHVuX3QJbHVuOwkvKiAgbHVuIGlmIGFwcGxpY2FibGUJKi8KLQllbnVtIGZjcF90bV9jbW5kCXRtX2NtbmQ7CS8qICB0YXNrIG1hbmFnZW1lbnQgY29tbWFuZCAgKi8KLQl1MTYJdHNrX3RhZzsJLyogIEZXSSBJTyB0YWcJKi8KLQl1OAl0c2VjczsJLyogIHRpbWVvdXQgaW4gc2Vjb25kcwkqLworCXN0cnVjdCBiZmFkX3Rza2ltX3MJKmR0c2s7ICAvKiAgZHJpdmVyIHRhc2sgbWdtdCBjbW5kCSovCisJYmZhX2Jvb2xlYW5fdAkJbm90aWZ5OwkvKiAgbm90aWZ5IGl0bmltIG9uIFRNIGNvbXAgICovCisJc3RydWN0IHNjc2lfbHVuCQlsdW47CS8qICBsdW4gaWYgYXBwbGljYWJsZQkqLworCWVudW0gZmNwX3RtX2NtbmQJdG1fY21uZDsgLyogIHRhc2sgbWFuYWdlbWVudCBjb21tYW5kICAqLworCXUxNgkJCXRza190YWc7IC8qICBGV0kgSU8gdGFnCSovCisJdTgJCQl0c2VjczsJLyogIHRpbWVvdXQgaW4gc2Vjb25kcwkqLwogCXN0cnVjdCBiZmFfcmVxcV93YWl0X3MgIHJlcXFfd2FpdDsgICAvKiAgdG8gd2FpdCBmb3Igcm9vbSBpbiByZXFxICovCiAJc3RydWN0IGxpc3RfaGVhZAlpb19xOwkvKiAgcXVldWUgb2YgYWZmZWN0ZWQgSU9zCSovCi0Jc3RydWN0IGJmYV93Y19zCXdjOwkvKiAgd2FpdGluZyBjb3VudGVyCSovCisJc3RydWN0IGJmYV93Y19zCQl3YzsJLyogIHdhaXRpbmcgY291bnRlcgkqLwogCXN0cnVjdCBiZmFfY2JfcWVfcwloY2JfcWU7CS8qICBiZmEgY2FsbGJhY2sgcWVsZW0JKi8KIAllbnVtIGJmaV90c2tpbV9zdGF0dXMgICB0c2tfc3RhdHVzOyAgLyogIFRNIHN0YXR1cwkqLwogfTsKIAotCiAvKgogICogQkZBIGktdC1uIChpbml0aWF0b3IgbW9kZSkKICAqLwogc3RydWN0IGJmYV9pdG5pbV9zIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkCXFlOwkJLyogIHF1ZXVlIGVsZW1lbnQJKi8KLQliZmFfc21fdAkgIHNtOwkJLyogIGktdC1uIGltIEJGQSBzdGF0ZSBtYWNoaW5lICAqLwotCXN0cnVjdCBiZmFfcwkqYmZhOwkJLyogIGJmYSBpbnN0YW5jZQkqLwotCXN0cnVjdCBiZmFfcnBvcnRfcyAqcnBvcnQ7CS8qICBiZmEgcnBvcnQJKi8KLQl2b2lkCSpkaXRuOwkJLyogIGRyaXZlciBpLXQtbiBzdHJ1Y3R1cmUJKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCXFlOwkvKiAgcXVldWUgZWxlbWVudAkqLworCWJmYV9zbV90CQlzbTsJLyogIGktdC1uIGltIEJGQSBzdGF0ZSBtYWNoaW5lICAqLworCXN0cnVjdCBiZmFfcwkJKmJmYTsJLyogIGJmYSBpbnN0YW5jZQkqLworCXN0cnVjdCBiZmFfcnBvcnRfcwkqcnBvcnQ7CS8qICBiZmEgcnBvcnQJKi8KKwl2b2lkCQkJKmRpdG47CS8qICBkcml2ZXIgaS10LW4gc3RydWN0dXJlCSovCiAJc3RydWN0IGJmaV9taGRyX3MJbWhkcjsJLyogIHByZS1idWlsdCBtaGRyCSovCi0JdTgJbXNnX25vOwkJLyogIGl0bmltL3Jwb3J0IGZpcm13YXJlIGhhbmRsZSAqLwotCXU4CXJlcXE7CQkvKiAgQ1EgZm9yIHJlcXVlc3RzCSovCisJdTgJCQltc2dfbm87CS8qICBpdG5pbS9ycG9ydCBmaXJtd2FyZSBoYW5kbGUgKi8KKwl1OAkJCXJlcXE7CS8qICBDUSBmb3IgcmVxdWVzdHMJKi8KIAlzdHJ1Y3QgYmZhX2NiX3FlX3MJaGNiX3FlOwkvKiAgYmZhIGNhbGxiYWNrIHFlbGVtCSovCiAJc3RydWN0IGxpc3RfaGVhZCBwZW5kaW5nX3E7CS8qICBxdWV1ZSBvZiBwZW5kaW5nIElPIHJlcXVlc3RzICovCiAJc3RydWN0IGxpc3RfaGVhZCBpb19xOwkJLyogIHF1ZXVlIG9mIGFjdGl2ZSBJTyByZXF1ZXN0cyAqLwpAQCAtMTgxLDE5ICsxNzksMTkgQEAKIAliZmFfYm9vbGVhbl90ICAgc2VxX3JlYzsJLyogIFNRRVIgc3VwcG9ydGVkCSovCiAJYmZhX2Jvb2xlYW5fdCAgIGlzX29ubGluZTsJLyogIGl0bmltIGlzIE9OTElORSBmb3IgSU8JKi8KIAliZmFfYm9vbGVhbl90ICAgaW90b3ZfYWN0aXZlOwkvKiAgSU8gVE9WIHRpbWVyIGlzIGFjdGl2ZQkgKi8KLQlzdHJ1Y3QgYmZhX3djX3MJd2M7CS8qICB3YWl0aW5nIGNvdW50ZXIJKi8KLQlzdHJ1Y3QgYmZhX3RpbWVyX3MgdGltZXI7CS8qICBwZW5kaW5nIElPIFRPVgkJICovCisJc3RydWN0IGJmYV93Y19zCXdjOwkJLyogIHdhaXRpbmcgY291bnRlcgkqLworCXN0cnVjdCBiZmFfdGltZXJfcyB0aW1lcjsJLyogIHBlbmRpbmcgSU8gVE9WCSAqLwogCXN0cnVjdCBiZmFfcmVxcV93YWl0X3MgcmVxcV93YWl0OyAvKiAgdG8gd2FpdCBmb3Igcm9vbSBpbiByZXFxICovCiAJc3RydWN0IGJmYV9mY3BpbV9tb2RfcyAqZmNwaW07CS8qICBmY3BpbSBtb2R1bGUJKi8KIAlzdHJ1Y3QgYmZhX2l0bmltX2lvc3RhdHNfcwlzdGF0czsKIAlzdHJ1Y3QgYmZhX2l0bmltX2lvcHJvZmlsZV9zICBpb3Byb2ZpbGU7CiB9OwogCi0KICNkZWZpbmUgYmZhX2l0bmltX2lzX29ubGluZShfaXRuaW0pICgoX2l0bmltKS0+aXNfb25saW5lKQogI2RlZmluZSBCRkFfRkNQSU1fTU9EKF9oYWwpICgmKF9oYWwpLT5tb2R1bGVzLmZjcGltX21vZCkKKyNkZWZpbmUgQkZBX0lPSU1fVEFHXzJfSUQoX2lvdGFnKQkoKF9pb3RhZykgJiBCRkFfSU9JTV9JT1RBR19NQVNLKQogI2RlZmluZSBCRkFfSU9JTV9GUk9NX1RBRyhfZmNwaW0sIF9pb3RhZykJXAotCSgmZmNwaW0tPmlvaW1fYXJyWyhfaW90YWcgJiBCRkFfSU9JTV9SRVRSWV9UQUdfTUFTSyldKQorCSgmZmNwaW0tPmlvaW1fYXJyWyhfaW90YWcgJiBCRkFfSU9JTV9JT1RBR19NQVNLKV0pCiAjZGVmaW5lIEJGQV9UU0tJTV9GUk9NX1RBRyhfZmNwaW0sIF90bXRhZykJXAogCSgmZmNwaW0tPnRza2ltX2FycltfdG10YWcgJiAoZmNwaW0tPm51bV90c2tpbV9yZXFzIC0gMSldKQogCkBAIC0yMDEsMjYgKzE5OSwyNiBAQAogCShfYmZhLT5tb2R1bGVzLmZjcGltX21vZC5pb19wcm9maWxlX3N0YXJ0X3RpbWUpCiAjZGVmaW5lIGJmYV9mY3BpbV9nZXRfaW9fcHJvZmlsZShfYmZhKQlcCiAJKF9iZmEtPm1vZHVsZXMuZmNwaW1fbW9kLmlvX3Byb2ZpbGUpCisjZGVmaW5lIGJmYV9pb2ltX3VwZGF0ZV9pb3RhZyhfX2lvaW0pIGRvIHsJCQkJXAorCXVpbnQxNl90IGsgPSAoX19pb2ltKS0+aW90YWcgPj4gQkZBX0lPSU1fUkVUUllfVEFHX09GRlNFVDsJXAorCWsrKzsgKF9faW9pbSktPmlvdGFnICY9IEJGQV9JT0lNX0lPVEFHX01BU0s7CQkJXAorCShfX2lvaW0pLT5pb3RhZyB8PSBrIDw8IEJGQV9JT0lNX1JFVFJZX1RBR19PRkZTRVQ7CQlcCit9IHdoaWxlICgwKQogCiBzdGF0aWMgaW5saW5lIGJmYV9ib29sZWFuX3QKLWJmYV9pb2ltX2dldF9pb3RhZyhzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSkKK2JmYV9pb2ltX21heHJldHJ5X3JlYWNoZWQoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0pCiB7Ci0JdTE2IGsgPSBpb2ltLT5pb3RhZzsKLQotCWsgPj49IEJGQV9JT0lNX1JFVFJZX1RBR19PRkZTRVQ7IGsrKzsKLQotCWlmIChrID4gQkZBX0lPSU1fUkVUUllfTUFYKQorCXVpbnQxNl90IGsgPSBpb2ltLT5pb3RhZyA+PiBCRkFfSU9JTV9SRVRSWV9UQUdfT0ZGU0VUOworCWlmIChrIDwgQkZBX0lPSU1fUkVUUllfTUFYKQogCQlyZXR1cm4gQkZBX0ZBTFNFOwotCWlvaW0tPmlvdGFnICY9IEJGQV9JT0lNX1JFVFJZX1RBR19NQVNLOwotCWlvaW0tPmlvdGFnIHw9IGs8PEJGQV9JT0lNX1JFVFJZX1RBR19PRkZTRVQ7CiAJcmV0dXJuIEJGQV9UUlVFOwogfQorCiAvKgogICogZnVuY3Rpb24gcHJvdG90eXBlcwogICovCiB2b2lkCWJmYV9pb2ltX2F0dGFjaChzdHJ1Y3QgYmZhX2ZjcGltX21vZF9zICpmY3BpbSwKIAkJCQkJc3RydWN0IGJmYV9tZW1pbmZvX3MgKm1pbmZvKTsKLXZvaWQJYmZhX2lvaW1fZGV0YWNoKHN0cnVjdCBiZmFfZmNwaW1fbW9kX3MgKmZjcGltKTsKIHZvaWQJYmZhX2lvaW1faXNyKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZpX21zZ19zICptc2cpOwogdm9pZAliZmFfaW9pbV9nb29kX2NvbXBfaXNyKHN0cnVjdCBiZmFfcyAqYmZhLAogCQkJCQlzdHJ1Y3QgYmZpX21zZ19zICptc2cpOwpAQCAtMjMyLDcgKzIzMCw2IEBACiAKIHZvaWQJYmZhX3Rza2ltX2F0dGFjaChzdHJ1Y3QgYmZhX2ZjcGltX21vZF9zICpmY3BpbSwKIAkJCQkJc3RydWN0IGJmYV9tZW1pbmZvX3MgKm1pbmZvKTsKLXZvaWQJYmZhX3Rza2ltX2RldGFjaChzdHJ1Y3QgYmZhX2ZjcGltX21vZF9zICpmY3BpbSk7CiB2b2lkCWJmYV90c2tpbV9pc3Ioc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmlfbXNnX3MgKm1zZyk7CiB2b2lkCWJmYV90c2tpbV9pb2RvbmUoc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSk7CiB2b2lkCWJmYV90c2tpbV9pb2NkaXNhYmxlKHN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0pOwpAQCAtMjQ4LDMyICsyNDUsMTQgQEAKIHZvaWQJYmZhX2l0bmltX2lvZG9uZShzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltKTsKIHZvaWQJYmZhX2l0bmltX3Rza2RvbmUoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSk7CiBiZmFfYm9vbGVhbl90ICAgYmZhX2l0bmltX2hvbGRfaW8oc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSk7Ci12b2lkIGJmYV9pb2ltX3Byb2ZpbGVfY29tcChzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSk7Ci12b2lkIGJmYV9pb2ltX3Byb2ZpbGVfc3RhcnQoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0pOwotCiAKIC8qCiAgKiBiZmEgZmNwaW0gbW9kdWxlIEFQSSBmdW5jdGlvbnMKICAqLwotdm9pZAkJYmZhX2ZjcGltX3BhdGhfdG92X3NldChzdHJ1Y3QgYmZhX3MgKmJmYSwgdTE2IHBhdGhfdG92KTsKK3ZvaWQJYmZhX2ZjcGltX3BhdGhfdG92X3NldChzdHJ1Y3QgYmZhX3MgKmJmYSwgdTE2IHBhdGhfdG92KTsKIHUxNgliZmFfZmNwaW1fcGF0aF90b3ZfZ2V0KHN0cnVjdCBiZmFfcyAqYmZhKTsKLXZvaWQJCWJmYV9mY3BpbV9xZGVwdGhfc2V0KHN0cnVjdCBiZmFfcyAqYmZhLCB1MTYgcV9kZXB0aCk7CiB1MTYJYmZhX2ZjcGltX3FkZXB0aF9nZXQoc3RydWN0IGJmYV9zICpiZmEpOwotYmZhX3N0YXR1c190IGJmYV9mY3BpbV9nZXRfbW9kc3RhdHMoc3RydWN0IGJmYV9zICpiZmEsCi0JIHN0cnVjdCBiZmFfaXRuaW1faW9zdGF0c19zICptb2RzdGF0cyk7Ci1iZmFfc3RhdHVzX3QgYmZhX2ZjcGltX3BvcnRfaW9zdGF0cyhzdHJ1Y3QgYmZhX3MgKmJmYSwKLQkJc3RydWN0IGJmYV9pdG5pbV9pb3N0YXRzX3MgKnN0YXRzLCB1OCBscF90YWcpOwotYmZhX3N0YXR1c190IGJmYV9mY3BpbV9nZXRfZGVsX2l0bl9zdGF0cyhzdHJ1Y3QgYmZhX3MgKmJmYSwKLQkgc3RydWN0IGJmYV9mY3BpbV9kZWxfaXRuX3N0YXRzX3MgKm1vZHN0YXRzKTsKLWJmYV9zdGF0dXNfdCBiZmFfZmNwaW1fcG9ydF9jbGVhcl9pb3N0YXRzKHN0cnVjdCBiZmFfcyAqYmZhLCB1OCBscF90YWcpOwotdm9pZCBiZmFfZmNwaW1fYWRkX3N0YXRzKHN0cnVjdCBiZmFfaXRuaW1faW9zdGF0c19zICpmY3BpbV9zdGF0cywKLQkJc3RydWN0IGJmYV9pdG5pbV9pb3N0YXRzX3MgKml0bmltX3N0YXRzKTsKLWJmYV9zdGF0dXNfdCBiZmFfZmNwaW1fY2xyX21vZHN0YXRzKHN0cnVjdCBiZmFfcyAqYmZhKTsKLXZvaWQJCWJmYV9mY3BpbV9zZXRfaW9yZWRpcmVjdChzdHJ1Y3QgYmZhX3MgKmJmYSwKLQkJCQliZmFfYm9vbGVhbl90IHN0YXRlKTsKLXZvaWQJCWJmYV9mY3BpbV91cGRhdGVfaW9yZWRpcmVjdChzdHJ1Y3QgYmZhX3MgKmJmYSk7Ci1iZmFfc3RhdHVzX3QgYmZhX2ZjcGltX3Byb2ZpbGVfb24oc3RydWN0IGJmYV9zICpiZmEsIHUzMiB0aW1lKTsKLWJmYV9zdGF0dXNfdCBiZmFfZmNwaW1fcHJvZmlsZV9vZmYoc3RydWN0IGJmYV9zICpiZmEpOworCiAjZGVmaW5lIGJmYV9mY3BpbV9pb3JlZGlyZWN0X2VuYWJsZWQoX19iZmEpCQkJCVwKIAkoKChzdHJ1Y3QgYmZhX2ZjcGltX21vZF9zICopKEJGQV9GQ1BJTV9NT0QoX19iZmEpKSktPmlvcmVkaXJlY3QpCiAKQEAgLTI5MSw0OCArMjcwLDMzIEBACiAgKiBiZmEgaXRuaW0gQVBJIGZ1bmN0aW9ucwogICovCiBzdHJ1Y3QgYmZhX2l0bmltX3MgKmJmYV9pdG5pbV9jcmVhdGUoc3RydWN0IGJmYV9zICpiZmEsCi0JCQkJCXN0cnVjdCBiZmFfcnBvcnRfcyAqcnBvcnQsIHZvaWQgKml0bmltKTsKLXZvaWQJCWJmYV9pdG5pbV9kZWxldGUoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSk7Ci12b2lkCQliZmFfaXRuaW1fb25saW5lKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sCi0JCQkJIGJmYV9ib29sZWFuX3Qgc2VxX3JlYyk7Ci12b2lkCQliZmFfaXRuaW1fb2ZmbGluZShzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltKTsKLXZvaWQJCWJmYV9pdG5pbV9nZXRfc3RhdHMoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSwKLQkJCXN0cnVjdCBiZmFfaXRuaW1faW9zdGF0c19zICpzdGF0cyk7Ci12b2lkCQliZmFfaXRuaW1fY2xlYXJfc3RhdHMoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSk7Ci1iZmFfc3RhdHVzX3QJYmZhX2l0bmltX2dldF9pb3Byb2ZpbGUoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSwKLQkJc3RydWN0IGJmYV9pdG5pbV9pb3Byb2ZpbGVfcyAqaW9wcm9maWxlKTsKKwkJc3RydWN0IGJmYV9ycG9ydF9zICpycG9ydCwgdm9pZCAqaXRuaW0pOwordm9pZCBiZmFfaXRuaW1fZGVsZXRlKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0pOwordm9pZCBiZmFfaXRuaW1fb25saW5lKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sIGJmYV9ib29sZWFuX3Qgc2VxX3JlYyk7Cit2b2lkIGJmYV9pdG5pbV9vZmZsaW5lKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0pOwordm9pZCBiZmFfaXRuaW1fY2xlYXJfc3RhdHMoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSk7CitiZmFfc3RhdHVzX3QgYmZhX2l0bmltX2dldF9pb3Byb2ZpbGUoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSwKKwkJCXN0cnVjdCBiZmFfaXRuaW1faW9wcm9maWxlX3MgKmlvcHJvZmlsZSk7CisKICNkZWZpbmUgYmZhX2l0bmltX2dldF9yZXFxKF9faW9pbSkgKCgoc3RydWN0IGJmYV9pb2ltX3MgKilfX2lvaW0pLT5pdG5pbS0+cmVxcSkKIAogLyoKLSAqCUJGQSBjb21wbGV0aW9uIGNhbGxiYWNrIGZvciBiZmFfaXRuaW1fb25saW5lKCkuCi0gKgotICogQHBhcmFtW2luXQkJaXRuaW0JCUZDUyBvciBkcml2ZXIgaXRuaW0gaW5zdGFuY2UKLSAqCi0gKiByZXR1cm4gTm9uZQorICogQkZBIGNvbXBsZXRpb24gY2FsbGJhY2sgZm9yIGJmYV9pdG5pbV9vbmxpbmUoKS4KICAqLwogdm9pZAliZmFfY2JfaXRuaW1fb25saW5lKHZvaWQgKml0bmltKTsKIAogLyoKLSAqCUJGQSBjb21wbGV0aW9uIGNhbGxiYWNrIGZvciBiZmFfaXRuaW1fb2ZmbGluZSgpLgotICoKLSAqIEBwYXJhbVtpbl0JCWl0bmltCQlGQ1Mgb3IgZHJpdmVyIGl0bmltIGluc3RhbmNlCi0gKgotICogcmV0dXJuIE5vbmUKKyAqIEJGQSBjb21wbGV0aW9uIGNhbGxiYWNrIGZvciBiZmFfaXRuaW1fb2ZmbGluZSgpLgogICovCiB2b2lkCWJmYV9jYl9pdG5pbV9vZmZsaW5lKHZvaWQgKml0bmltKTsKIHZvaWQJYmZhX2NiX2l0bmltX3Rvdl9iZWdpbih2b2lkICppdG5pbSk7CiB2b2lkCWJmYV9jYl9pdG5pbV90b3Yodm9pZCAqaXRuaW0pOwogCiAvKgotICoJQkZBIG5vdGlmaWNhdGlvbiB0byBGQ1MvZHJpdmVyIGZvciBzZWNvbmQgbGV2ZWwgZXJyb3IgcmVjb3ZlcnkuCi0gKgorICogQkZBIG5vdGlmaWNhdGlvbiB0byBGQ1MvZHJpdmVyIGZvciBzZWNvbmQgbGV2ZWwgZXJyb3IgcmVjb3ZlcnkuCiAgKiBBdGxlYXN0IG9uZSBJL08gcmVxdWVzdCBoYXMgdGltZWRvdXQgYW5kIHRhcmdldCBpcyB1bnJlc3BvbnNpdmUgdG8KICAqIHJlcGVhdGVkIGFib3J0IHJlcXVlc3RzLiBTZWNvbmQgbGV2ZWwgZXJyb3IgcmVjb3Zlcnkgc2hvdWxkIGJlIGluaXRpYXRlZAogICogYnkgc3RhcnRpbmcgaW1wbGljaXQgbG9nb3V0IGFuZCByZWNvdmVyeSBwcm9jZWR1cmVzLgotICoKLSAqIEBwYXJhbVtpbl0JCWl0bmltCQlGQ1Mgb3IgZHJpdmVyIGl0bmltIGluc3RhbmNlCi0gKgotICogcmV0dXJuIE5vbmUKICAqLwogdm9pZAliZmFfY2JfaXRuaW1fc2xlcih2b2lkICppdG5pbSk7CiAKQEAgLTM0OSwxMCArMzEzLDggQEAKIGJmYV9zdGF0dXNfdAliZmFfaW9pbV9hYm9ydChzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSk7CiB2b2lkCQliZmFfaW9pbV9kZWxheWVkX2NvbXAoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0sCiAJCQkJICAgICAgYmZhX2Jvb2xlYW5fdCBpb3Rvdik7Ci0KLQogLyoKLSAqCUkvTyBjb21wbGV0aW9uIG5vdGlmaWNhdGlvbi4KKyAqIEkvTyBjb21wbGV0aW9uIG5vdGlmaWNhdGlvbi4KICAqCiAgKiBAcGFyYW1baW5dCQlkaW8JCQlkcml2ZXIgSU8gc3RydWN0dXJlCiAgKiBAcGFyYW1baW5dCQlpb19zdGF0dXMJCUlPIGNvbXBsZXRpb24gc3RhdHVzCkBAIC0zNjMsMzkgKzMyNSwzMSBAQAogICoKICAqIEByZXR1cm4gTm9uZQogICovCi12b2lkCWJmYV9jYl9pb2ltX2RvbmUodm9pZCAqYmZhZCwgc3RydWN0IGJmYWRfaW9pbV9zICpkaW8sCi0JCQkJICBlbnVtIGJmaV9pb2ltX3N0YXR1cyBpb19zdGF0dXMsCi0JCQkJICB1OCBzY3NpX3N0YXR1cywgaW50IHNuc19sZW4sCi0JCQkJICB1OCAqc25zX2luZm8sIHMzMiByZXNpZHVlKTsKK3ZvaWQgYmZhX2NiX2lvaW1fZG9uZSh2b2lkICpiZmFkLCBzdHJ1Y3QgYmZhZF9pb2ltX3MgKmRpbywKKwkJCWVudW0gYmZpX2lvaW1fc3RhdHVzIGlvX3N0YXR1cywKKwkJCXU4IHNjc2lfc3RhdHVzLCBpbnQgc25zX2xlbiwKKwkJCXU4ICpzbnNfaW5mbywgczMyIHJlc2lkdWUpOwogCiAvKgotICoJSS9PIGdvb2QgY29tcGxldGlvbiBub3RpZmljYXRpb24uCi0gKgotICogQHBhcmFtW2luXQkJZGlvCQkJZHJpdmVyIElPIHN0cnVjdHVyZQotICoKLSAqIEByZXR1cm4gTm9uZQorICogSS9PIGdvb2QgY29tcGxldGlvbiBub3RpZmljYXRpb24uCiAgKi8KLXZvaWQJYmZhX2NiX2lvaW1fZ29vZF9jb21wKHZvaWQgKmJmYWQsIHN0cnVjdCBiZmFkX2lvaW1fcyAqZGlvKTsKK3ZvaWQgYmZhX2NiX2lvaW1fZ29vZF9jb21wKHZvaWQgKmJmYWQsIHN0cnVjdCBiZmFkX2lvaW1fcyAqZGlvKTsKIAogLyoKLSAqCUkvTyBhYm9ydCBjb21wbGV0aW9uIG5vdGlmaWNhdGlvbgotICoKLSAqIEBwYXJhbVtpbl0JCWRpbwkJCWRyaXZlciBJTyB0aGF0IHdhcyBhYm9ydGVkCi0gKgotICogQHJldHVybiBOb25lCisgKiBJL08gYWJvcnQgY29tcGxldGlvbiBub3RpZmljYXRpb24KICAqLwotdm9pZAliZmFfY2JfaW9pbV9hYm9ydCh2b2lkICpiZmFkLCBzdHJ1Y3QgYmZhZF9pb2ltX3MgKmRpbyk7Cit2b2lkIGJmYV9jYl9pb2ltX2Fib3J0KHZvaWQgKmJmYWQsIHN0cnVjdCBiZmFkX2lvaW1fcyAqZGlvKTsKIAogLyoKICAqIGJmYSB0c2tpbSBBUEkgZnVuY3Rpb25zCiAgKi8KLXN0cnVjdCBiZmFfdHNraW1fcwkqYmZhX3Rza2ltX2FsbG9jKHN0cnVjdCBiZmFfcyAqYmZhLAotCQkJCQlzdHJ1Y3QgYmZhZF90c2tpbV9zICpkdHNrKTsKLXZvaWQJCWJmYV90c2tpbV9mcmVlKHN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0pOwotdm9pZAkJYmZhX3Rza2ltX3N0YXJ0KHN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0sCi0JCQkJc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSwgbHVuX3QgbHVuLAotCQkJCWVudW0gZmNwX3RtX2NtbmQgdG0sIHU4IHRfc2Vjcyk7Ci12b2lkCQliZmFfY2JfdHNraW1fZG9uZSh2b2lkICpiZmFkLCBzdHJ1Y3QgYmZhZF90c2tpbV9zICpkdHNrLAotCQkJCSAgZW51bSBiZmlfdHNraW1fc3RhdHVzIHRza19zdGF0dXMpOworc3RydWN0IGJmYV90c2tpbV9zICpiZmFfdHNraW1fYWxsb2Moc3RydWN0IGJmYV9zICpiZmEsCisJCQlzdHJ1Y3QgYmZhZF90c2tpbV9zICpkdHNrKTsKK3ZvaWQgYmZhX3Rza2ltX2ZyZWUoc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSk7Cit2b2lkIGJmYV90c2tpbV9zdGFydChzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltLAorCQkJc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSwgc3RydWN0IHNjc2lfbHVuIGx1biwKKwkJCWVudW0gZmNwX3RtX2NtbmQgdG0sIHU4IHRfc2Vjcyk7Cit2b2lkIGJmYV9jYl90c2tpbV9kb25lKHZvaWQgKmJmYWQsIHN0cnVjdCBiZmFkX3Rza2ltX3MgKmR0c2ssCisJCQllbnVtIGJmaV90c2tpbV9zdGF0dXMgdHNrX3N0YXR1cyk7CiAKICNlbmRpZiAvKiBfX0JGQV9GQ1BJTV9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2Zjcy5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNzLmMKaW5kZXggMDQ1ZDdlOC4uZjY3NGY5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNzLmMKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNzLmMKQEAgLTE5LDkgKzE5LDkgQEAKICAqICBiZmFfZmNzLmMgQkZBIEZDUyBtYWluCiAgKi8KIAorI2luY2x1ZGUgImJmYWRfZHJ2LmgiCiAjaW5jbHVkZSAiYmZhX2Zjcy5oIgogI2luY2x1ZGUgImJmYV9mY2J1aWxkLmgiCi0jaW5jbHVkZSAiYmZhZF9kcnYuaCIKIAogQkZBX1RSQ19GSUxFKEZDUywgRkNTKTsKIApAQCAtNzYsNyArNzYsNyBAQAogCWZjcy0+YmZhZCA9IGJmYWQ7CiAJZmNzLT5taW5fY2ZnID0gbWluX2NmZzsKIAotCWJmYV9hdHRhY2hfZmNzKGJmYSk7CisJYmZhLT5mY3MgPSBCRkFfVFJVRTsKIAlmY2J1aWxkX2luaXQoKTsKIAogCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoZmNzX21vZHVsZXMpIC8gc2l6ZW9mKGZjc19tb2R1bGVzWzBdKTsgaSsrKSB7CkBAIC0xMTAsMTQgKzExMCw2IEBACiAJfQogfQogCi0vKgotICogU3RhcnQgRkNTIG9wZXJhdGlvbnMuCi0gKi8KLXZvaWQKLWJmYV9mY3Nfc3RhcnQoc3RydWN0IGJmYV9mY3NfcyAqZmNzKQotewotCWJmYV9mY3NfZmFicmljX21vZHN0YXJ0KGZjcyk7Ci19CiAKIC8qCiAgKglicmllZgpAQCAtMTQwLDIyICsxMzIsNiBAQAogCiAvKgogICoJYnJpZWYKLSAqCQlGQ1MgRkRNSSBEcml2ZXIgUGFyYW1ldGVyIEluaXRpYWxpemF0aW9uCi0gKgotICoJcGFyYW1baW5dCQlmY3MJCUZDUyBpbnN0YW5jZQotICoJcGFyYW1baW5dCQlmZG1pX2VuYWJsZQlUUlVFL0ZBTFNFCi0gKgotICoJcmV0dXJuIE5vbmUKLSAqLwotdm9pZAotYmZhX2Zjc19zZXRfZmRtaV9wYXJhbShzdHJ1Y3QgYmZhX2Zjc19zICpmY3MsIGJmYV9ib29sZWFuX3QgZmRtaV9lbmFibGUpCi17Ci0KLQlmY3MtPmZkbWlfZW5hYmxlZCA9IGZkbWlfZW5hYmxlOwotCi19Ci0vKgotICoJYnJpZWYKICAqCQlGQ1MgaW5zdGFuY2UgY2xlYW51cCBhbmQgZXhpdC4KICAqCiAgKglwYXJhbVtpbl0JCWZjcwkJCUZDUyBpbnN0YW5jZQpAQCAtMTg0LDE4ICsxNjAsNiBAQAogfQogCiAKLXZvaWQKLWJmYV9mY3NfdHJjX2luaXQoc3RydWN0IGJmYV9mY3NfcyAqZmNzLCBzdHJ1Y3QgYmZhX3RyY19tb2RfcyAqdHJjbW9kKQotewotCWZjcy0+dHJjbW9kID0gdHJjbW9kOwotfQotCi12b2lkCi1iZmFfZmNzX21vZGV4aXRfY29tcChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpCi17Ci0JYmZhX3djX2Rvd24oJmZjcy0+d2MpOwotfQotCiAvKgogICogRmFicmljIG1vZHVsZSBpbXBsZW1lbnRhdGlvbi4KICAqLwpAQCAtMjMyLDMxICsxOTYsNiBAQAogCQkJCQkgdTMyIHJzcF9sZW4sCiAJCQkJCSB1MzIgcmVzaWRfbGVuLAogCQkJCQkgc3RydWN0IGZjaHNfcyAqcnNwZmNocyk7Ci0vKgotICogIGZjc19mYWJyaWNfc20gZmFicmljIHN0YXRlIG1hY2hpbmUgZnVuY3Rpb25zCi0gKi8KLQotLyoKLSAqIEZhYnJpYyBzdGF0ZSBtYWNoaW5lIGV2ZW50cwotICovCi1lbnVtIGJmYV9mY3NfZmFicmljX2V2ZW50IHsKLQlCRkFfRkNTX0ZBQlJJQ19TTV9DUkVBVEUJPSAxLAkvKiAgY3JlYXRlIGZyb20gZHJpdmVyCSAgICAgICovCi0JQkZBX0ZDU19GQUJSSUNfU01fREVMRVRFCT0gMiwJLyogIGRlbGV0ZSBmcm9tIGRyaXZlcgkgICAgICAqLwotCUJGQV9GQ1NfRkFCUklDX1NNX0xJTktfRE9XTgk9IDMsCS8qICBsaW5rIGRvd24gZnJvbSBwb3J0ICAgICAgKi8KLQlCRkFfRkNTX0ZBQlJJQ19TTV9MSU5LX1VQCT0gNCwJLyogIGxpbmsgdXAgZnJvbSBwb3J0CSAgICAgICovCi0JQkZBX0ZDU19GQUJSSUNfU01fQ09OVF9PUAk9IDUsCS8qICBmbG9naS9hdXRoIGNvbnRpbnVlIG9wICAgKi8KLQlCRkFfRkNTX0ZBQlJJQ19TTV9SRVRSWV9PUAk9IDYsCS8qICBmbG9naS9hdXRoIHJldHJ5IG9wICAgICAgKi8KLQlCRkFfRkNTX0ZBQlJJQ19TTV9OT19GQUJSSUMJPSA3LAkvKiAgZnJvbSBmbG9naS9hdXRoCSAgICAgICovCi0JQkZBX0ZDU19GQUJSSUNfU01fUEVSRl9FVkZQCT0gOCwJLyogIGZyb20gZmxvZ2kvYXV0aAkgICAgICAqLwotCUJGQV9GQ1NfRkFCUklDX1NNX0lTT0xBVEUJPSA5LAkvKiAgZnJvbSBFVkZQIHByb2Nlc3NpbmcgICAgICovCi0JQkZBX0ZDU19GQUJSSUNfU01fTk9fVEFHR0lORwk9IDEwLAkvKiAgbm8gVkZUIHRhZ2dpbmcgZnJvbSBFVkZQICovCi0JQkZBX0ZDU19GQUJSSUNfU01fREVMQVlFRAk9IDExLAkvKiAgdGltZW91dCBkZWxheSBldmVudCAgICAgICovCi0JQkZBX0ZDU19GQUJSSUNfU01fQVVUSF9GQUlMRUQJPSAxMiwJLyogIGF1dGggZmFpbGVkCSAgICAgICovCi0JQkZBX0ZDU19GQUJSSUNfU01fQVVUSF9TVUNDRVNTCT0gMTMsCS8qICBhdXRoIHN1Y2Nlc3NmdWwJICAgICAgKi8KLQlCRkFfRkNTX0ZBQlJJQ19TTV9ERUxDT01QCT0gMTQsCS8qICBhbGwgdnBvcnRzIGRlbGV0ZWQgZXZlbnQgKi8KLQlCRkFfRkNTX0ZBQlJJQ19TTV9MT09QQkFDSwk9IDE1LAkvKiAgUmVjZWl2ZWQgb3VyIG93biBGTE9HSSAgICovCi0JQkZBX0ZDU19GQUJSSUNfU01fU1RBUlQJCT0gMTYsCS8qICBmcm9tIGRyaXZlcgkgICAgICAqLwotfTsKIAogc3RhdGljIHZvaWQJYmZhX2Zjc19mYWJyaWNfc21fdW5pbml0KHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMsCiAJCQkJCSBlbnVtIGJmYV9mY3NfZmFicmljX2V2ZW50IGV2ZW50KTsKQEAgLTI3MCwxNCArMjA5LDggQEAKIAkJCQkJICAgICAgZW51bSBiZmFfZmNzX2ZhYnJpY19ldmVudCBldmVudCk7CiBzdGF0aWMgdm9pZAliZmFfZmNzX2ZhYnJpY19zbV9hdXRoKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMsCiAJCQkJICAgICAgIGVudW0gYmZhX2Zjc19mYWJyaWNfZXZlbnQgZXZlbnQpOwotc3RhdGljIHZvaWQJYmZhX2Zjc19mYWJyaWNfc21fYXV0aF9mYWlsZWQoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYywKLQkJCQkJICAgICAgZW51bSBiZmFfZmNzX2ZhYnJpY19ldmVudCBldmVudCk7Ci1zdGF0aWMgdm9pZAliZmFfZmNzX2ZhYnJpY19zbV9sb29wYmFjayhzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLAotCQkJCQkgICBlbnVtIGJmYV9mY3NfZmFicmljX2V2ZW50IGV2ZW50KTsKIHN0YXRpYyB2b2lkCWJmYV9mY3NfZmFicmljX3NtX25vZmFicmljKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMsCiAJCQkJCSAgIGVudW0gYmZhX2Zjc19mYWJyaWNfZXZlbnQgZXZlbnQpOwotc3RhdGljIHZvaWQJYmZhX2Zjc19mYWJyaWNfc21fb25saW5lKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMsCi0JCQkJCSBlbnVtIGJmYV9mY3NfZmFicmljX2V2ZW50IGV2ZW50KTsKIHN0YXRpYyB2b2lkCWJmYV9mY3NfZmFicmljX3NtX2V2ZnAoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYywKIAkJCQkgICAgICAgZW51bSBiZmFfZmNzX2ZhYnJpY19ldmVudCBldmVudCk7CiBzdGF0aWMgdm9pZAliZmFfZmNzX2ZhYnJpY19zbV9ldmZwX2RvbmUoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYywKQEAgLTMzNyw3ICsyNzAsNyBAQAogCiAJY2FzZSBCRkFfRkNTX0ZBQlJJQ19TTV9ERUxFVEU6CiAJCWJmYV9zbV9zZXRfc3RhdGUoZmFicmljLCBiZmFfZmNzX2ZhYnJpY19zbV91bmluaXQpOwotCQliZmFfZmNzX21vZGV4aXRfY29tcChmYWJyaWMtPmZjcyk7CisJCWJmYV93Y19kb3duKCZmYWJyaWMtPmZjcy0+d2MpOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC00MTAsNyArMzQzLDcgQEAKIAogCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fTE9PUEJBQ0s6CiAJCWJmYV9zbV9zZXRfc3RhdGUoZmFicmljLCBiZmFfZmNzX2ZhYnJpY19zbV9sb29wYmFjayk7Ci0JCWJmYV9scHNfZGlzY2FyZChmYWJyaWMtPmxwcyk7CisJCWJmYV9zbV9zZW5kX2V2ZW50KGZhYnJpYy0+bHBzLCBCRkFfTFBTX1NNX09GRkxJTkUpOwogCQliZmFfZmNzX2ZhYnJpY19zZXRfb3BlcnR5cGUoZmFicmljKTsKIAkJYnJlYWs7CiAKQEAgLTQyNCwxMiArMzU3LDEyIEBACiAKIAljYXNlIEJGQV9GQ1NfRkFCUklDX1NNX0xJTktfRE9XTjoKIAkJYmZhX3NtX3NldF9zdGF0ZShmYWJyaWMsIGJmYV9mY3NfZmFicmljX3NtX2xpbmtkb3duKTsKLQkJYmZhX2xwc19kaXNjYXJkKGZhYnJpYy0+bHBzKTsKKwkJYmZhX3NtX3NlbmRfZXZlbnQoZmFicmljLT5scHMsIEJGQV9MUFNfU01fT0ZGTElORSk7CiAJCWJyZWFrOwogCiAJY2FzZSBCRkFfRkNTX0ZBQlJJQ19TTV9ERUxFVEU6CiAJCWJmYV9zbV9zZXRfc3RhdGUoZmFicmljLCBiZmFfZmNzX2ZhYnJpY19zbV9kZWxldGluZyk7Ci0JCWJmYV9scHNfZGlzY2FyZChmYWJyaWMtPmxwcyk7CisJCWJmYV9zbV9zZW5kX2V2ZW50KGZhYnJpYy0+bHBzLCBCRkFfTFBTX1NNX09GRkxJTkUpOwogCQliZmFfZmNzX2ZhYnJpY19kZWxldGUoZmFicmljKTsKIAkJYnJlYWs7CiAKQEAgLTQ4MSw3ICs0MTQsNyBAQAogCXN3aXRjaCAoZXZlbnQpIHsKIAljYXNlIEJGQV9GQ1NfRkFCUklDX1NNX0FVVEhfRkFJTEVEOgogCQliZmFfc21fc2V0X3N0YXRlKGZhYnJpYywgYmZhX2Zjc19mYWJyaWNfc21fYXV0aF9mYWlsZWQpOwotCQliZmFfbHBzX2Rpc2NhcmQoZmFicmljLT5scHMpOworCQliZmFfc21fc2VuZF9ldmVudChmYWJyaWMtPmxwcywgQkZBX0xQU19TTV9PRkZMSU5FKTsKIAkJYnJlYWs7CiAKIAljYXNlIEJGQV9GQ1NfRkFCUklDX1NNX0FVVEhfU1VDQ0VTUzoKQEAgLTQ5NSw3ICs0MjgsNyBAQAogCiAJY2FzZSBCRkFfRkNTX0ZBQlJJQ19TTV9MSU5LX0RPV046CiAJCWJmYV9zbV9zZXRfc3RhdGUoZmFicmljLCBiZmFfZmNzX2ZhYnJpY19zbV9saW5rZG93bik7Ci0JCWJmYV9scHNfZGlzY2FyZChmYWJyaWMtPmxwcyk7CisJCWJmYV9zbV9zZW5kX2V2ZW50KGZhYnJpYy0+bHBzLCBCRkFfTFBTX1NNX09GRkxJTkUpOwogCQlicmVhazsKIAogCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fREVMRVRFOgpAQCAtNTExLDcgKzQ0NCw3IEBACiAvKgogICogICBBdXRoZW50aWNhdGlvbiBmYWlsZWQKICAqLwotc3RhdGljIHZvaWQKK3ZvaWQKIGJmYV9mY3NfZmFicmljX3NtX2F1dGhfZmFpbGVkKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMsCiAJCQkgICAgICBlbnVtIGJmYV9mY3NfZmFicmljX2V2ZW50IGV2ZW50KQogewpAQCAtNTM3LDcgKzQ3MCw3IEBACiAvKgogICogICBQb3J0IGlzIGluIGxvb3BiYWNrIG1vZGUuCiAgKi8KLXN0YXRpYyB2b2lkCit2b2lkCiBiZmFfZmNzX2ZhYnJpY19zbV9sb29wYmFjayhzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLAogCQkJICAgZW51bSBiZmFfZmNzX2ZhYnJpY19ldmVudCBldmVudCkKIHsKQEAgLTU3Myw3ICs1MDYsNyBAQAogCXN3aXRjaCAoZXZlbnQpIHsKIAljYXNlIEJGQV9GQ1NfRkFCUklDX1NNX0xJTktfRE9XTjoKIAkJYmZhX3NtX3NldF9zdGF0ZShmYWJyaWMsIGJmYV9mY3NfZmFicmljX3NtX2xpbmtkb3duKTsKLQkJYmZhX2xwc19kaXNjYXJkKGZhYnJpYy0+bHBzKTsKKwkJYmZhX3NtX3NlbmRfZXZlbnQoZmFicmljLT5scHMsIEJGQV9MUFNfU01fT0ZGTElORSk7CiAJCWJmYV9mY3NfZmFicmljX25vdGlmeV9vZmZsaW5lKGZhYnJpYyk7CiAJCWJyZWFrOwogCkBAIC01OTYsNyArNTI5LDcgQEAKIC8qCiAgKiAgIEZhYnJpYyBpcyBvbmxpbmUgLSBub3JtYWwgb3BlcmF0aW5nIHN0YXRlLgogICovCi1zdGF0aWMgdm9pZAordm9pZAogYmZhX2Zjc19mYWJyaWNfc21fb25saW5lKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMsCiAJCQkgZW51bSBiZmFfZmNzX2ZhYnJpY19ldmVudCBldmVudCkKIHsKQEAgLTYwNiw3ICs1MzksNyBAQAogCXN3aXRjaCAoZXZlbnQpIHsKIAljYXNlIEJGQV9GQ1NfRkFCUklDX1NNX0xJTktfRE9XTjoKIAkJYmZhX3NtX3NldF9zdGF0ZShmYWJyaWMsIGJmYV9mY3NfZmFicmljX3NtX2xpbmtkb3duKTsKLQkJYmZhX2xwc19kaXNjYXJkKGZhYnJpYy0+bHBzKTsKKwkJYmZhX3NtX3NlbmRfZXZlbnQoZmFicmljLT5scHMsIEJGQV9MUFNfU01fT0ZGTElORSk7CiAJCWJmYV9mY3NfZmFicmljX25vdGlmeV9vZmZsaW5lKGZhYnJpYyk7CiAJCWJyZWFrOwogCkBAIC02MTcsNyArNTUwLDcgQEAKIAogCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fQVVUSF9GQUlMRUQ6CiAJCWJmYV9zbV9zZXRfc3RhdGUoZmFicmljLCBiZmFfZmNzX2ZhYnJpY19zbV9hdXRoX2ZhaWxlZCk7Ci0JCWJmYV9scHNfZGlzY2FyZChmYWJyaWMtPmxwcyk7CisJCWJmYV9zbV9zZW5kX2V2ZW50KGZhYnJpYy0+bHBzLCBCRkFfTFBTX1NNX09GRkxJTkUpOwogCQlicmVhazsKIAogCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fQVVUSF9TVUNDRVNTOgpAQCAtNjk3LDcgKzYzMCw3IEBACiAJc3dpdGNoIChldmVudCkgewogCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fREVMQ09NUDoKIAkJYmZhX3NtX3NldF9zdGF0ZShmYWJyaWMsIGJmYV9mY3NfZmFicmljX3NtX3VuaW5pdCk7Ci0JCWJmYV9mY3NfbW9kZXhpdF9jb21wKGZhYnJpYy0+ZmNzKTsKKwkJYmZhX3djX2Rvd24oJmZhYnJpYy0+ZmNzLT53Yyk7CiAJCWJyZWFrOwogCiAJY2FzZSBCRkFfRkNTX0ZBQlJJQ19TTV9MSU5LX1VQOgpAQCAtNzI0LDggKzY1Nyw4IEBACiAJc3RydWN0IGJmYV9scG9ydF9jZmdfcyAqcG9ydF9jZmcgPSAmZmFicmljLT5icG9ydC5wb3J0X2NmZzsKIAogCXBvcnRfY2ZnLT5yb2xlcyA9IEJGQV9MUE9SVF9ST0xFX0ZDUF9JTTsKLQlwb3J0X2NmZy0+bnd3biA9IGJmYV9pb2NfZ2V0X253d24oJmZhYnJpYy0+ZmNzLT5iZmEtPmlvYyk7Ci0JcG9ydF9jZmctPnB3d24gPSBiZmFfaW9jX2dldF9wd3duKCZmYWJyaWMtPmZjcy0+YmZhLT5pb2MpOworCXBvcnRfY2ZnLT5ud3duID0gZmFicmljLT5mY3MtPmJmYS0+aW9jLmF0dHItPm53d247CisJcG9ydF9jZmctPnB3d24gPSBmYWJyaWMtPmZjcy0+YmZhLT5pb2MuYXR0ci0+cHd3bjsKIH0KIAogLyoKQEAgLTgxMyw3ICs3NDYsNyBAQAogCQlyZXR1cm47CiAKIAljYXNlIEJGQV9TVEFUVVNfRVBST1RPQ09MOgotCQlzd2l0Y2ggKGJmYV9scHNfZ2V0X2V4dHN0YXR1cyhmYWJyaWMtPmxwcykpIHsKKwkJc3dpdGNoIChmYWJyaWMtPmxwcy0+ZXh0X3N0YXR1cykgewogCQljYXNlIEJGQV9FUFJPVE9fQkFEX0FDQ0VQVDoKIAkJCWZhYnJpYy0+c3RhdHMuZmxvZ2lfYWNjX2VycisrOwogCQkJYnJlYWs7CkBAIC04NDAsMjYgKzc3MywyNiBAQAogCQlyZXR1cm47CiAJfQogCi0JZmFicmljLT5iYl9jcmVkaXQgPSBiZmFfbHBzX2dldF9wZWVyX2JiY3JlZGl0KGZhYnJpYy0+bHBzKTsKKwlmYWJyaWMtPmJiX2NyZWRpdCA9IGZhYnJpYy0+bHBzLT5wcl9iYmNyZWQ7CiAJYmZhX3RyYyhmYWJyaWMtPmZjcywgZmFicmljLT5iYl9jcmVkaXQpOwogCi0JaWYgKCFiZmFfbHBzX2lzX2JyY2RfZmFicmljKGZhYnJpYy0+bHBzKSkKLQkJZmFicmljLT5mYWJyaWNfbmFtZSA9ICBiZmFfbHBzX2dldF9wZWVyX253d24oZmFicmljLT5scHMpOworCWlmICghKGZhYnJpYy0+bHBzLT5icmNkX3N3aXRjaCkpCisJCWZhYnJpYy0+ZmFicmljX25hbWUgPSAgZmFicmljLT5scHMtPnByX253d247CiAKIAkvKgogCSAqIENoZWNrIHBvcnQgdHlwZS4gSXQgc2hvdWxkIGJlIDEgPSBGLXBvcnQuCiAJICovCi0JaWYgKGJmYV9scHNfaXNfZnBvcnQoZmFicmljLT5scHMpKSB7Ci0JCWZhYnJpYy0+YnBvcnQucGlkID0gYmZhX2xwc19nZXRfcGlkKGZhYnJpYy0+bHBzKTsKLQkJZmFicmljLT5pc19ucGl2ID0gYmZhX2xwc19pc19ucGl2X2VuKGZhYnJpYy0+bHBzKTsKLQkJZmFicmljLT5pc19hdXRoID0gYmZhX2xwc19pc19hdXRocmVxKGZhYnJpYy0+bHBzKTsKKwlpZiAoZmFicmljLT5scHMtPmZwb3J0KSB7CisJCWZhYnJpYy0+YnBvcnQucGlkID0gZmFicmljLT5scHMtPmxwX3BpZDsKKwkJZmFicmljLT5pc19ucGl2ID0gZmFicmljLT5scHMtPm5waXZfZW47CisJCWZhYnJpYy0+aXNfYXV0aCA9IGZhYnJpYy0+bHBzLT5hdXRoX3JlcTsKIAkJYmZhX3NtX3NlbmRfZXZlbnQoZmFicmljLCBCRkFfRkNTX0ZBQlJJQ19TTV9DT05UX09QKTsKIAl9IGVsc2UgewogCQkvKgogCQkgKiBOcG9ydC0yLU5wb3J0IGRpcmVjdCBhdHRhY2hlZAogCQkgKi8KIAkJZmFicmljLT5icG9ydC5wb3J0X3RvcG8ucG4ybi5yZW1fcG9ydF93d24gPQotCQkJYmZhX2xwc19nZXRfcGVlcl9wd3duKGZhYnJpYy0+bHBzKTsKKwkJCWZhYnJpYy0+bHBzLT5wcl9wd3duOwogCQliZmFfc21fc2VuZF9ldmVudChmYWJyaWMsIEJGQV9GQ1NfRkFCUklDX1NNX05PX0ZBQlJJQyk7CiAJfQogCkBAIC05ODcsNyArOTIwLDcgQEAKIAlJTklUX0xJU1RfSEVBRCgmZmFicmljLT52cG9ydF9xKTsKIAlJTklUX0xJU1RfSEVBRCgmZmFicmljLT52Zl9xKTsKIAlmYWJyaWMtPmxwcyA9IGJmYV9scHNfYWxsb2MoZmNzLT5iZmEpOwotCWJmYV9hc3NlcnQoZmFicmljLT5scHMpOworCVdBUk5fT04oIWZhYnJpYy0+bHBzKTsKIAogCS8qCiAJICogSW5pdGlhbGl6ZSBmYWJyaWMgZGVsZXRlIGNvbXBsZXRpb24gaGFuZGxlci4gRmFicmljIGRlbGV0aW9uIGlzCkBAIC0xMDM4LDMxICs5NzEsNiBAQAogCWJmYV9zbV9zZW5kX2V2ZW50KGZhYnJpYywgQkZBX0ZDU19GQUJSSUNfU01fU1RBUlQpOwogfQogCi0vKgotICogICBTdXNwZW5kIGZhYnJpYyBhY3Rpdml0eSBhcyBwYXJ0IG9mIGRyaXZlciBzdXNwZW5kLgotICovCi12b2lkCi1iZmFfZmNzX2ZhYnJpY19tb2RzdXNwKHN0cnVjdCBiZmFfZmNzX3MgKmZjcykKLXsKLX0KLQotYmZhX2Jvb2xlYW5fdAotYmZhX2Zjc19mYWJyaWNfaXNfbG9vcGJhY2soc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYykKLXsKLQlyZXR1cm4gYmZhX3NtX2NtcF9zdGF0ZShmYWJyaWMsIGJmYV9mY3NfZmFicmljX3NtX2xvb3BiYWNrKTsKLX0KLQotYmZhX2Jvb2xlYW5fdAotYmZhX2Zjc19mYWJyaWNfaXNfYXV0aF9mYWlsZWQoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYykKLXsKLQlyZXR1cm4gYmZhX3NtX2NtcF9zdGF0ZShmYWJyaWMsIGJmYV9mY3NfZmFicmljX3NtX2F1dGhfZmFpbGVkKTsKLX0KLQotZW51bSBiZmFfcG9ydF90eXBlCi1iZmFfZmNzX2ZhYnJpY19wb3J0X3R5cGUoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYykKLXsKLQlyZXR1cm4gZmFicmljLT5vcGVyX3R5cGU7Ci19CiAKIC8qCiAgKiAgIExpbmsgdXAgbm90aWZpY2F0aW9uIGZyb20gQkZBIHBoeXNpY2FsIHBvcnQgbW9kdWxlLgpAQCAtMTEyMyw0MCArMTAzMSw2IEBACiAJYmZhX3djX2Rvd24oJmZhYnJpYy0+d2MpOwogfQogCi0vKgotICogICBCYXNlIHBvcnQgaXMgZGVsZXRlZC4KLSAqLwotdm9pZAotYmZhX2Zjc19mYWJyaWNfcG9ydF9kZWxldGVfY29tcChzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljKQotewotCWJmYV93Y19kb3duKCZmYWJyaWMtPndjKTsKLX0KLQotCi0vKgotICogICAgQ2hlY2sgaWYgZmFicmljIGlzIG9ubGluZS4KLSAqCi0gKiAgIHBhcmFtW2luXSBmYWJyaWMgLSBGYWJyaWMgaW5zdGFuY2UuIFRoaXMgY2FuIGJlIGEgYmFzZSBmYWJyaWMgb3IgdmYuCi0gKgotICogICBAcmV0dXJuICBUUlVFL0ZBTFNFCi0gKi8KLWludAotYmZhX2Zjc19mYWJyaWNfaXNfb25saW5lKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMpCi17Ci0JcmV0dXJuIGJmYV9zbV9jbXBfc3RhdGUoZmFicmljLCBiZmFfZmNzX2ZhYnJpY19zbV9vbmxpbmUpOwotfQotCi0vKgotICoJYnJpZWYKLSAqCi0gKi8KLWJmYV9zdGF0dXNfdAotYmZhX2Zjc19mYWJyaWNfYWRkdmYoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKnZmLCBzdHJ1Y3QgYmZhX2Zjc19zICpmY3MsCi0JCSAgICAgc3RydWN0IGJmYV9scG9ydF9jZmdfcyAqcG9ydF9jZmcsIHN0cnVjdCBiZmFkX3ZmX3MgKnZmX2RydikKLXsKLQliZmFfc21fc2V0X3N0YXRlKHZmLCBiZmFfZmNzX2ZhYnJpY19zbV91bmluaXQpOwotCXJldHVybiBCRkFfU1RBVFVTX09LOwotfQogCiAvKgogICogTG9va3VwIGZvciBhIHZwb3J0IHdpdGhpbmcgYSBmYWJyaWMgZ2l2ZW4gaXRzIHB3d24KQEAgLTExNzYsMTggKzEwNTAsNiBAQAogCXJldHVybiBOVUxMOwogfQogCi0vKgotICogICAgSW4gYSBnaXZlbiBmYWJyaWMsIHJldHVybiB0aGUgbnVtYmVyIG9mIGxwb3J0cy4KLSAqCi0gKiAgIHBhcmFtW2luXSBmYWJyaWMgLSBGYWJyaWMgaW5zdGFuY2UuIFRoaXMgY2FuIGJlIGEgYmFzZSBmYWJyaWMgb3IgdmYuCi0gKgotICogICBAcmV0dXJuIDogMSBvciBtb3JlLgotICovCi11MTYKLWJmYV9mY3NfZmFicmljX3Zwb3J0X2NvdW50KHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMpCi17Ci0JcmV0dXJuIGZhYnJpYy0+bnVtX3Zwb3J0czsKLX0KIAogLyoKICAqICBHZXQgT1VJIG9mIHRoZSBhdHRhY2hlZCBzd2l0Y2guCkBAIC0xMjA3LDcgKzEwNjksNyBAQAogCXU4ICp0bXA7CiAJdTE2IG91aTsKIAotCWZhYl9ud3duID0gYmZhX2xwc19nZXRfcGVlcl9ud3duKGZhYnJpYy0+bHBzKTsKKwlmYWJfbnd3biA9IGZhYnJpYy0+bHBzLT5wcl9ud3duOwogCiAJdG1wID0gKHU4ICopJmZhYl9ud3duOwogCW91aSA9ICh0bXBbM10gPDwgOCkgfCB0bXBbNF07CkBAIC0xMjM1LDcgKzEwOTcsNyBAQAogCSAqIGV4dGVybmFsIGxvb3BiYWNrIGNhYmxlIGlzIGluIHBsYWNlLiBPdXIgb3duIEZMT0dJIGZyYW1lcyBhcmUKIAkgKiBzb21ldGltZXMgbG9vcGVkIGJhY2sgd2hlbiBzd2l0Y2ggcG9ydCBnZXRzIHRlbXBvcmFyaWx5IGJ5cGFzc2VkLgogCSAqLwotCWlmICgocGlkID09IGJmYV9vc19udG9oM2IoRkNfRkFCUklDX1BPUlQpKSAmJgorCWlmICgocGlkID09IGJmYV9udG9oM2IoRkNfRkFCUklDX1BPUlQpKSAmJgogCSAgICAoZWxzX2NtZC0+ZWxzX2NvZGUgPT0gRkNfRUxTX0ZMT0dJKSAmJgogCSAgICAoZmxvZ2ktPnBvcnRfbmFtZSA9PSBiZmFfZmNzX2xwb3J0X2dldF9wd3duKCZmYWJyaWMtPmJwb3J0KSkpIHsKIAkJYmZhX3NtX3NlbmRfZXZlbnQoZmFicmljLCBCRkFfRkNTX0ZBQlJJQ19TTV9MT09QQkFDSyk7CkBAIC0xMjQ1LDcgKzExMDcsNyBAQAogCS8qCiAJICogRkxPR0kvRVZGUCBleGNoYW5nZXMgc2hvdWxkIGJlIGNvbnN1bWVkIGJ5IGJhc2UgZmFicmljLgogCSAqLwotCWlmIChmY2hzLT5kX2lkID09IGJmYV9vc19odG9uM2IoRkNfRkFCUklDX1BPUlQpKSB7CisJaWYgKGZjaHMtPmRfaWQgPT0gYmZhX2h0b24zYihGQ19GQUJSSUNfUE9SVCkpIHsKIAkJYmZhX3RyYyhmYWJyaWMtPmZjcywgcGlkKTsKIAkJYmZhX2Zjc19mYWJyaWNfcHJvY2Vzc191ZihmYWJyaWMsIGZjaHMsIGxlbik7CiAJCXJldHVybjsKQEAgLTEzNTgsMTMgKzEyMjAsMTMgQEAKIAkJcmV0dXJuOwogCiAJcmVxbGVuID0gZmNfZmxvZ2lfYWNjX2J1aWxkKCZmY2hzLCBiZmFfZmN4cF9nZXRfcmVxYnVmKGZjeHApLAotCQkJCSAgICBiZmFfb3NfaHRvbjNiKEZDX0ZBQlJJQ19QT1JUKSwKKwkJCQkgICAgYmZhX2h0b24zYihGQ19GQUJSSUNfUE9SVCksCiAJCQkJICAgIG4ybl9wb3J0LT5yZXBseV9veGlkLCBwY2ZnLT5wd3duLAogCQkJCSAgICBwY2ZnLT5ud3duLAogCQkJCSAgICBiZmFfZmNwb3J0X2dldF9tYXhmcnNpemUoYmZhKSwKIAkJCQkgICAgYmZhX2ZjcG9ydF9nZXRfcnhfYmJjcmVkaXQoYmZhKSk7CiAKLQliZmFfZmN4cF9zZW5kKGZjeHAsIE5VTEwsIGZhYnJpYy0+dmZfaWQsIGJmYV9scHNfZ2V0X3RhZyhmYWJyaWMtPmxwcyksCisJYmZhX2ZjeHBfc2VuZChmY3hwLCBOVUxMLCBmYWJyaWMtPnZmX2lkLCBmYWJyaWMtPmxwcy0+bHBfdGFnLAogCQkgICAgICBCRkFfRkFMU0UsIEZDX0NMQVNTXzMsCiAJCSAgICAgIHJlcWxlbiwgJmZjaHMsIGJmYV9mY3NfZmFicmljX2Zsb2dpYWNjX2NvbXAsIGZhYnJpYywKIAkJICAgICAgRkNfTUFYX1BEVVNaLCAwKTsKQEAgLTE0NTUsNyArMTMxNyw3IEBACiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJYmZhX2Fzc2VydCgwKTsKKwkJV0FSTl9PTigxKTsKIAl9CiB9CiAKQEAgLTE1MDIsNyArMTM2NCw3IEBACiAJCSAqIGRyb3AgZnJhbWUgaWYgdmZpZCBpcyB1bmtub3duCiAJCSAqLwogCQlpZiAoIWZhYnJpYykgewotCQkJYmZhX2Fzc2VydCgwKTsKKwkJCVdBUk5fT04oMSk7CiAJCQliZmFfc3RhdHMoZmNzLCB1Zi52ZmlkX3Vua25vd24pOwogCQkJYmZhX3VmX2ZyZWUodWYpOwogCQkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNzLmggYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3MuaAppbmRleCA5Y2I2YTU1Li4wZmQ2MzE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3MuaAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3MuaApAQCAtMjcsNiArMjcsMjIgQEAKICNkZWZpbmUgQkZBX0ZDU19PU19TVFJfTEVOCQk2NAogCiAvKgorICogIGxwc19wdnQgQkZBIExQUyBwcml2YXRlIGZ1bmN0aW9ucworICovCisKK2VudW0gYmZhX2xwc19ldmVudCB7CisJQkZBX0xQU19TTV9MT0dJTgk9IDEsCS8qIGxvZ2luIHJlcXVlc3QgZnJvbSB1c2VyICAgICAgKi8KKwlCRkFfTFBTX1NNX0xPR09VVAk9IDIsCS8qIGxvZ291dCByZXF1ZXN0IGZyb20gdXNlciAgICAgKi8KKwlCRkFfTFBTX1NNX0ZXUlNQCT0gMywJLyogZi93IHJlc3BvbnNlIHRvIGxvZ2luL2xvZ291dCAqLworCUJGQV9MUFNfU01fUkVTVU1FCT0gNCwJLyogc3BhY2UgcHJlc2VudCBpbiByZXFxIHF1ZXVlICAqLworCUJGQV9MUFNfU01fREVMRVRFCT0gNSwJLyogbHBzIGRlbGV0ZSBmcm9tIHVzZXIgICAgICAgICAqLworCUJGQV9MUFNfU01fT0ZGTElORQk9IDYsCS8qIExpbmsgaXMgb2ZmbGluZSAgICAgICAgICAgICAgKi8KKwlCRkFfTFBTX1NNX1JYX0NWTAk9IDcsCS8qIFJ4IGNsZWFyIHZpcnR1YWwgbGluayAgICAgICAgKi8KKwlCRkFfTFBTX1NNX1NFVF9OMk5fUElEICA9IDgsCS8qIFNldCBhc3NpZ25lZCBQSUQgZm9yIG4ybiAqLworfTsKKworCisvKgogICogISEhIE9ubHkgYXBwZW5kIHRvIHRoZSBlbnVtcyBkZWZpbmVkIGhlcmUgdG8gYXZvaWQgYW55IHZlcnNpb25pbmcKICAqICEhISBuZWVkZWQgYmV0d2VlbiB0cmFjZSB1dGlsaXR5IGFuZCBkcml2ZXIgdmVyc2lvbgogICovCkBAIC00MSwxMyArNTcsMTIgQEAKIHN0cnVjdCBiZmFfZmNzX3M7CiAKICNkZWZpbmUgX19mY3NfbWluX2NmZyhfX2ZjcykgICAgICAgKChfX2ZjcyktPm1pbl9jZmcpCi12b2lkIGJmYV9mY3NfbW9kZXhpdF9jb21wKHN0cnVjdCBiZmFfZmNzX3MgKmZjcyk7CiAKICNkZWZpbmUgQkZBX0ZDU19CUkNEX1NXSVRDSF9PVUkgIDB4MDUxZQogI2RlZmluZSBOMk5fTE9DQUxfUElECSAgICAweDAxMDAwMAogI2RlZmluZSBOMk5fUkVNT1RFX1BJRAkJMHgwMjAwMDAKICNkZWZpbmUJQkZBX0ZDU19SRVRSWV9USU1FT1VUIDIwMDAKLSNkZWZpbmUgQkZBX0ZDU19QSURfSVNfV0tBKHBpZCkgICgoYmZhX29zX250b2gzYihwaWQpID4gMHhGRkYwMDApID8gIDEgOiAwKQorI2RlZmluZSBCRkFfRkNTX1BJRF9JU19XS0EocGlkKSAgKChiZmFfbnRvaDNiKHBpZCkgPiAweEZGRjAwMCkgPyAgMSA6IDApCiAKIAogCkBAIC0xMDksNyArMTI0LDcgQEAKIAogc3RydWN0IGJmYV9mY3NfbHBvcnRfbjJuX3MgewogCXUzMiAgICAgICAgcnN2ZDsKLQl1MTYgICAgICAgIHJlcGx5X294aWQ7CS8qICBveF9pZCBmcm9tIHRoZSByZXEgZmxvZ2kgdG8gYmUKKwlfX2JlMTYgICAgIHJlcGx5X294aWQ7CS8qICBveF9pZCBmcm9tIHRoZSByZXEgZmxvZ2kgdG8gYmUKIAkJCQkJICp1c2VkIGluIGZsb2dpIGFjYyAqLwogCXd3bl90ICAgICAgICAgICByZW1fcG9ydF93d247CS8qICBBdHRhY2hlZCBwb3J0J3Mgd3duICovCiB9OwpAQCAtMzE2LDggKzMzMSw2IEBACiAJCQkJICAgICAgIHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KTsKIHZvaWQgICAgICAgICAgICBiZmFfZmNzX2xwb3J0X2RlbF9ycG9ydChzdHJ1Y3QgYmZhX2Zjc19scG9ydF9zICpwb3J0LAogCQkJCSAgICAgICBzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCk7Ci12b2lkIGJmYV9mY3NfbHBvcnRfbW9kaW5pdChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpOwotdm9pZCBiZmFfZmNzX2xwb3J0X21vZGV4aXQoc3RydWN0IGJmYV9mY3NfcyAqZmNzKTsKIHZvaWQgICAgICAgICAgICBiZmFfZmNzX2xwb3J0X25zX2luaXQoc3RydWN0IGJmYV9mY3NfbHBvcnRfcyAqdnBvcnQpOwogdm9pZCAgICAgICAgICAgIGJmYV9mY3NfbHBvcnRfbnNfb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19scG9ydF9zICp2cG9ydCk7CiB2b2lkICAgICAgICAgICAgYmZhX2Zjc19scG9ydF9uc19vbmxpbmUoc3RydWN0IGJmYV9mY3NfbHBvcnRfcyAqdnBvcnQpOwpAQCAtMzU5LDkgKzM3Miw2IEBACiBiZmFfc3RhdHVzX3QgYmZhX2Zjc192cG9ydF9zdG9wKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0KTsKIHZvaWQgYmZhX2Zjc192cG9ydF9nZXRfYXR0cihzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCwKIAkJCSAgICBzdHJ1Y3QgYmZhX3Zwb3J0X2F0dHJfcyAqdnBvcnRfYXR0cik7Ci12b2lkIGJmYV9mY3NfdnBvcnRfZ2V0X3N0YXRzKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0LAotCQkJICAgICBzdHJ1Y3QgYmZhX3Zwb3J0X3N0YXRzX3MgKnZwb3J0X3N0YXRzKTsKLXZvaWQgYmZhX2Zjc192cG9ydF9jbHJfc3RhdHMoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQpOwogc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqYmZhX2Zjc192cG9ydF9sb29rdXAoc3RydWN0IGJmYV9mY3NfcyAqZmNzLAogCQkJCQkgICAgIHUxNiB2Zl9pZCwgd3duX3QgdnB3d24pOwogdm9pZCBiZmFfZmNzX3Zwb3J0X2NsZWFudXAoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQpOwpAQCAtNDA2LDcgKzQxNiw3IEBACiAJc3RydWN0IGJmYWRfcnBvcnRfcwkqcnBfZHJ2OwkvKiAgZHJpdmVyIHBlZXIgaW5zdGFuY2UgKi8KIAl1MzIJcGlkOwkvKiAgcG9ydCBJRCBvZiBycG9ydCAqLwogCXUxNgltYXhmcnNpemU7CS8qICBtYXhpbXVtIGZyYW1lIHNpemUgKi8KLQl1MTYJcmVwbHlfb3hpZDsJLyogIE9YX0lEIG9mIGluYm91bmQgcmVxdWVzdHMgKi8KKwlfX2JlMTYJcmVwbHlfb3hpZDsJLyogIE9YX0lEIG9mIGluYm91bmQgcmVxdWVzdHMgKi8KIAllbnVtIGZjX2NvcwlmY19jb3M7CS8qICBGQyBjbGFzc2VzIG9mIHNlcnZpY2Ugc3VwcCAqLwogCWJmYV9ib29sZWFuX3QJY2lzYzsJLyogIENJU0MgY2FwYWJsZSBkZXZpY2UgKi8KIAliZmFfYm9vbGVhbl90CXBybG87CS8qICBwcm9jZXNzaW5nIHBybG8gb3IgTE9HTyAqLwpAQCAtNDM3LDMyICs0NDcsMTggQEAKIC8qCiAgKiBiZmEgZmNzIHJwb3J0IEFQSSBmdW5jdGlvbnMKICAqLwotYmZhX3N0YXR1c190IGJmYV9mY3NfcnBvcnRfYWRkKHN0cnVjdCBiZmFfZmNzX2xwb3J0X3MgKnBvcnQsIHd3bl90ICpwd3duLAotCQkJICAgICAgIHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAotCQkJICAgICAgIHN0cnVjdCBiZmFkX3Jwb3J0X3MgKnJwb3J0X2Rydik7Ci1iZmFfc3RhdHVzX3QgYmZhX2Zjc19ycG9ydF9yZW1vdmUoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpOwotdm9pZCBiZmFfZmNzX3Jwb3J0X2dldF9hdHRyKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAotCQkJICAgIHN0cnVjdCBiZmFfcnBvcnRfYXR0cl9zICphdHRyKTsKLXZvaWQgYmZhX2Zjc19ycG9ydF9nZXRfc3RhdHMoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCi0JCQkgICAgIHN0cnVjdCBiZmFfcnBvcnRfc3RhdHNfcyAqc3RhdHMpOwotdm9pZCBiZmFfZmNzX3Jwb3J0X2NsZWFyX3N0YXRzKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KTsKIHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKmJmYV9mY3NfcnBvcnRfbG9va3VwKHN0cnVjdCBiZmFfZmNzX2xwb3J0X3MgKnBvcnQsCiAJCQkJCSAgICAgd3duX3QgcnB3d24pOwogc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqYmZhX2Zjc19ycG9ydF9sb29rdXBfYnlfbnd3bigKIAlzdHJ1Y3QgYmZhX2Zjc19scG9ydF9zICpwb3J0LCB3d25fdCBybnd3bik7CiB2b2lkIGJmYV9mY3NfcnBvcnRfc2V0X2RlbF90aW1lb3V0KHU4IHJwb3J0X3Rtbyk7CiAKLXZvaWQgYmZhX2Zjc19ycG9ydF9zZXRfc3BlZWQoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCi0JCQkgICAgIGVudW0gYmZhX3BvcnRfc3BlZWQgc3BlZWQpOwogdm9pZCBiZmFfZmNzX3Jwb3J0X3VmX3JlY3Yoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCiAJIHN0cnVjdCBmY2hzX3MgKmZjaHMsIHUxNiBsZW4pOwogdm9pZCBiZmFfZmNzX3Jwb3J0X3NjbihzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCk7CiAKIHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKmJmYV9mY3NfcnBvcnRfY3JlYXRlKHN0cnVjdCBiZmFfZmNzX2xwb3J0X3MgKnBvcnQsCiAJIHUzMiBwaWQpOwotdm9pZCBiZmFfZmNzX3Jwb3J0X2RlbGV0ZShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCk7Ci12b2lkIGJmYV9mY3NfcnBvcnRfb25saW5lKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KTsKLXZvaWQgYmZhX2Zjc19ycG9ydF9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KTsKIHZvaWQgYmZhX2Zjc19ycG9ydF9zdGFydChzdHJ1Y3QgYmZhX2Zjc19scG9ydF9zICpwb3J0LCBzdHJ1Y3QgZmNoc19zICpyeF9mY2hzLAogCQkJIHN0cnVjdCBmY19sb2dpX3MgKnBsb2dpX3JzcCk7CiB2b2lkIGJmYV9mY3NfcnBvcnRfcGxvZ2lfY3JlYXRlKHN0cnVjdCBiZmFfZmNzX2xwb3J0X3MgKnBvcnQsCkBAIC00NzAsMTAgKzQ2Niw4IEBACiAJCQkJc3RydWN0IGZjX2xvZ2lfcyAqcGxvZ2kpOwogdm9pZCBiZmFfZmNzX3Jwb3J0X3Bsb2dpKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LCBzdHJ1Y3QgZmNoc19zICpmY2hzLAogCQkJIHN0cnVjdCBmY19sb2dpX3MgKnBsb2dpKTsKLXZvaWQgYmZhX2Zjc19ycG9ydF9sb2dvX2ltcChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCk7Ci12b2lkIGJmYV9mY3NfcnBvcnRfcHJsbyhzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwgdTE2IG94X2lkKTsKK3ZvaWQgYmZhX2Zjc19ycG9ydF9wcmxvKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LCBfX2JlMTYgb3hfaWQpOwogCi12b2lkIGJmYV9mY3NfcnBvcnRfaXRuaW1fYWNrKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KTsKIHZvaWQgYmZhX2Zjc19ycG9ydF9pdG50bV9hY2soc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpOwogdm9pZCBiZmFfZmNzX3Jwb3J0X2ZjcHRtX29mZmxpbmVfZG9uZShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCk7CiBpbnQgIGJmYV9mY3NfcnBvcnRfZ2V0X3N0YXRlKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KTsKQEAgLTYxOCw3ICs2MTIsNyBAQAogCXU4ICAgICAgICAgb3B0aW9uX3JvbV92ZXJbQkZBX1ZFUlNJT05fTEVOXTsKIAl1OCAgICAgICAgIGZ3X3ZlcnNpb25bOF07CiAJdTggICAgICAgICBvc19uYW1lWzI1Nl07Ci0JdTMyICAgICAgICBtYXhfY3RfcHlsZDsKKwlfX2JlMzIgICAgICAgIG1heF9jdF9weWxkOwogfTsKIAogLyoKQEAgLTYyNiw5ICs2MjAsOSBAQAogICovCiBzdHJ1Y3QgYmZhX2Zjc19mZG1pX3BvcnRfYXR0cl9zIHsKIAl1OCAgICAgICAgIHN1cHBfZmM0X3R5cGVzWzMyXTsJLyogc3VwcG9ydGVkIEZDNCB0eXBlcyAqLwotCXUzMiAgICAgICAgc3VwcF9zcGVlZDsJLyogc3VwcG9ydGVkIHNwZWVkICovCi0JdTMyICAgICAgICBjdXJyX3NwZWVkOwkvKiBjdXJyZW50IFNwZWVkICovCi0JdTMyICAgICAgICBtYXhfZnJtX3NpemU7CS8qIG1heCBmcmFtZSBzaXplICovCisJX19iZTMyICAgICAgICBzdXBwX3NwZWVkOwkvKiBzdXBwb3J0ZWQgc3BlZWQgKi8KKwlfX2JlMzIgICAgICAgIGN1cnJfc3BlZWQ7CS8qIGN1cnJlbnQgU3BlZWQgKi8KKwlfX2JlMzIgICAgICAgIG1heF9mcm1fc2l6ZTsJLyogbWF4IGZyYW1lIHNpemUgKi8KIAl1OCAgICAgICAgIG9zX2RldmljZV9uYW1lWzI1Nl07CS8qIE9TIGRldmljZSBOYW1lICovCiAJdTggICAgICAgICBob3N0X25hbWVbMjU2XTsJLyogaG9zdCBuYW1lICovCiB9OwpAQCAtNjY0LDYgKzY1OCw1NyBAQAogfTsKIAogLyoKKyAqICBmY3NfZmFicmljX3NtIGZhYnJpYyBzdGF0ZSBtYWNoaW5lIGZ1bmN0aW9ucworICovCisKKy8qCisgKiBGYWJyaWMgc3RhdGUgbWFjaGluZSBldmVudHMKKyAqLworZW51bSBiZmFfZmNzX2ZhYnJpY19ldmVudCB7CisJQkZBX0ZDU19GQUJSSUNfU01fQ1JFQVRFICAgICAgICA9IDEsICAgIC8qICBjcmVhdGUgZnJvbSBkcml2ZXIgICAgICAgICovCisJQkZBX0ZDU19GQUJSSUNfU01fREVMRVRFICAgICAgICA9IDIsICAgIC8qICBkZWxldGUgZnJvbSBkcml2ZXIgICAgICAgICovCisJQkZBX0ZDU19GQUJSSUNfU01fTElOS19ET1dOICAgICA9IDMsICAgIC8qICBsaW5rIGRvd24gZnJvbSBwb3J0ICAgICAgKi8KKwlCRkFfRkNTX0ZBQlJJQ19TTV9MSU5LX1VQICAgICAgID0gNCwgICAgLyogIGxpbmsgdXAgZnJvbSBwb3J0ICAgICAgICAgKi8KKwlCRkFfRkNTX0ZBQlJJQ19TTV9DT05UX09QICAgICAgID0gNSwgICAgLyogIGZsb2dpL2F1dGggY29udGludWUgb3AgICAqLworCUJGQV9GQ1NfRkFCUklDX1NNX1JFVFJZX09QICAgICAgPSA2LCAgICAvKiAgZmxvZ2kvYXV0aCByZXRyeSBvcCAgICAgICovCisJQkZBX0ZDU19GQUJSSUNfU01fTk9fRkFCUklDICAgICA9IDcsICAgIC8qICBmcm9tIGZsb2dpL2F1dGggICAgICAgICAgICovCisJQkZBX0ZDU19GQUJSSUNfU01fUEVSRl9FVkZQICAgICA9IDgsICAgIC8qICBmcm9tIGZsb2dpL2F1dGggICAgICAgICAgICovCisJQkZBX0ZDU19GQUJSSUNfU01fSVNPTEFURSAgICAgICA9IDksICAgIC8qICBmcm9tIEVWRlAgcHJvY2Vzc2luZyAgICAgKi8KKwlCRkFfRkNTX0ZBQlJJQ19TTV9OT19UQUdHSU5HICAgID0gMTAsICAgLyogIG5vIFZGVCB0YWdnaW5nIGZyb20gRVZGUCAqLworCUJGQV9GQ1NfRkFCUklDX1NNX0RFTEFZRUQgICAgICAgPSAxMSwgICAvKiAgdGltZW91dCBkZWxheSBldmVudCAgICAgICovCisJQkZBX0ZDU19GQUJSSUNfU01fQVVUSF9GQUlMRUQgICA9IDEyLCAgIC8qICBhdXRoIGZhaWxlZCAgICAgICAqLworCUJGQV9GQ1NfRkFCUklDX1NNX0FVVEhfU1VDQ0VTUyAgPSAxMywgICAvKiAgYXV0aCBzdWNjZXNzZnVsICAgICAgICAgICAqLworCUJGQV9GQ1NfRkFCUklDX1NNX0RFTENPTVAgICAgICAgPSAxNCwgICAvKiAgYWxsIHZwb3J0cyBkZWxldGVkIGV2ZW50ICovCisJQkZBX0ZDU19GQUJSSUNfU01fTE9PUEJBQ0sgICAgICA9IDE1LCAgIC8qICBSZWNlaXZlZCBvdXIgb3duIEZMT0dJICAgKi8KKwlCRkFfRkNTX0ZBQlJJQ19TTV9TVEFSVCAgICAgICAgID0gMTYsICAgLyogIGZyb20gZHJpdmVyICAgICAgICovCit9OworCisvKgorICogIGZjc19ycG9ydF9zbSBGQ1MgcnBvcnQgc3RhdGUgbWFjaGluZSBldmVudHMKKyAqLworCitlbnVtIHJwb3J0X2V2ZW50IHsKKwlSUFNNX0VWRU5UX1BMT0dJX1NFTkQgICA9IDEsICAgIC8qICBuZXcgcnBvcnQ7IHN0YXJ0IHdpdGggUExPR0kgKi8KKwlSUFNNX0VWRU5UX1BMT0dJX1JDVkQgICA9IDIsICAgIC8qICBJbmJvdW5kIFBMT0dJIGZyb20gcmVtb3RlIHBvcnQgKi8KKwlSUFNNX0VWRU5UX1BMT0dJX0NPTVAgICA9IDMsICAgIC8qICBQTE9HSSBjb21wbGV0ZWQgdG8gcnBvcnQgICAgKi8KKwlSUFNNX0VWRU5UX0xPR09fUkNWRCAgICA9IDQsICAgIC8qICBMT0dPIGZyb20gcmVtb3RlIGRldmljZSAgICAgKi8KKwlSUFNNX0VWRU5UX0xPR09fSU1QICAgICA9IDUsICAgIC8qICBpbXBsaWNpdCBsb2dvIGZvciBTTEVSICAgICAgKi8KKwlSUFNNX0VWRU5UX0ZDWFBfU0VOVCAgICA9IDYsICAgIC8qICBGcmFtZSBmcm9tIGhhcyBiZWVuIHNlbnQgICAgKi8KKwlSUFNNX0VWRU5UX0RFTEVURSAgICAgICA9IDcsICAgIC8qICBSUE9SVCBkZWxldGUgcmVxdWVzdCAgICAgICAgKi8KKwlSUFNNX0VWRU5UX1NDTiAgICAgICAgICA9IDgsICAgIC8qICBzdGF0ZSBjaGFuZ2Ugbm90aWZpY2F0aW9uICAgKi8KKwlSUFNNX0VWRU5UX0FDQ0VQVEVEICAgICA9IDksICAgIC8qICBHb29kIHJlc3BvbnNlIGZyb20gcmVtb3RlIGRldmljZSAqLworCVJQU01fRVZFTlRfRkFJTEVEICAgICAgID0gMTAsICAgLyogIFJlcXVlc3QgdG8gcnBvcnQgZmFpbGVkLiAgICAqLworCVJQU01fRVZFTlRfVElNRU9VVCAgICAgID0gMTEsICAgLyogIFJwb3J0IFNNIHRpbWVvdXQgZXZlbnQgICAgICAqLworCVJQU01fRVZFTlRfSENCX09OTElORSAgPSAxMiwgICAgLyogIEJGQSBycG9ydCBvbmxpbmUgY2FsbGJhY2sgICAqLworCVJQU01fRVZFTlRfSENCX09GRkxJTkUgPSAxMywgICAgLyogIEJGQSBycG9ydCBvZmZsaW5lIGNhbGxiYWNrICAqLworCVJQU01fRVZFTlRfRkM0X09GRkxJTkUgPSAxNCwgICAgLyogIEZDLTQgb2ZmbGluZSBjb21wbGV0ZSAgICAgICAqLworCVJQU01fRVZFTlRfQUREUkVTU19DSEFOR0UgPSAxNSwgLyogIFJwb3J0J3MgUElEIGhhcyBjaGFuZ2VkICAgICAqLworCVJQU01fRVZFTlRfQUREUkVTU19ESVNDID0gMTYsICAgLyogIE5lZWQgdG8gRGlzY292ZXIgcnBvcnQncyBQSUQgKi8KKwlSUFNNX0VWRU5UX1BSTE9fUkNWRCAgID0gMTcsICAgIC8qICBQUkxPIGZyb20gcmVtb3RlIGRldmljZSAgICAgKi8KKwlSUFNNX0VWRU5UX1BMT0dJX1JFVFJZID0gMTgsICAgIC8qICBSZXRyeSBQTE9HSSBjb250aW5vdXNseSAqLworfTsKKworLyoKICAqIGJmYSBmY3MgQVBJIGZ1bmN0aW9ucwogICovCiB2b2lkIGJmYV9mY3NfYXR0YWNoKHN0cnVjdCBiZmFfZmNzX3MgKmZjcywgc3RydWN0IGJmYV9zICpiZmEsCkBAIC02NzIsMTYgKzcxNywxMiBAQAogdm9pZCBiZmFfZmNzX2luaXQoc3RydWN0IGJmYV9mY3NfcyAqZmNzKTsKIHZvaWQgYmZhX2Zjc19kcml2ZXJfaW5mb19pbml0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcywKIAkJCSAgICAgIHN0cnVjdCBiZmFfZmNzX2RyaXZlcl9pbmZvX3MgKmRyaXZlcl9pbmZvKTsKLXZvaWQgYmZhX2Zjc19zZXRfZmRtaV9wYXJhbShzdHJ1Y3QgYmZhX2Zjc19zICpmY3MsIGJmYV9ib29sZWFuX3QgZmRtaV9lbmFibGUpOwogdm9pZCBiZmFfZmNzX2V4aXQoc3RydWN0IGJmYV9mY3NfcyAqZmNzKTsKLXZvaWQgYmZhX2Zjc190cmNfaW5pdChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MsIHN0cnVjdCBiZmFfdHJjX21vZF9zICp0cmNtb2QpOwotdm9pZAkJYmZhX2Zjc19zdGFydChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpOwogCiAvKgogICogYmZhIGZjcyB2ZiBwdWJsaWMgZnVuY3Rpb25zCiAgKi8KIGJmYV9mY3NfdmZfdCAqYmZhX2Zjc192Zl9sb29rdXAoc3RydWN0IGJmYV9mY3NfcyAqZmNzLCB1MTYgdmZfaWQpOwotdTE2IGJmYV9mY3NfZmFicmljX3Zwb3J0X2NvdW50KHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMpOwogCiAvKgogICogZmFicmljIHByb3RlY3RlZCBpbnRlcmZhY2UgZnVuY3Rpb25zCkBAIC02ODksMzIgKzczMCwyOSBAQAogdm9pZCBiZmFfZmNzX2ZhYnJpY19hdHRhY2goc3RydWN0IGJmYV9mY3NfcyAqZmNzKTsKIHZvaWQgYmZhX2Zjc19mYWJyaWNfbW9kaW5pdChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpOwogdm9pZCBiZmFfZmNzX2ZhYnJpY19tb2RleGl0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcyk7Ci12b2lkIGJmYV9mY3NfZmFicmljX21vZHN1c3Aoc3RydWN0IGJmYV9mY3NfcyAqZmNzKTsKIHZvaWQgYmZhX2Zjc19mYWJyaWNfbGlua191cChzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljKTsKIHZvaWQgYmZhX2Zjc19mYWJyaWNfbGlua19kb3duKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMpOwogdm9pZCBiZmFfZmNzX2ZhYnJpY19hZGR2cG9ydChzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLAogCXN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0KTsKIHZvaWQgYmZhX2Zjc19mYWJyaWNfZGVsdnBvcnQoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYywKIAlzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCk7Ci1pbnQgYmZhX2Zjc19mYWJyaWNfaXNfb25saW5lKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMpOwogc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqYmZhX2Zjc19mYWJyaWNfdnBvcnRfbG9va3VwKAogCQlzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLCB3d25fdCBwd3duKTsKIHZvaWQgYmZhX2Zjc19mYWJyaWNfbW9kc3RhcnQoc3RydWN0IGJmYV9mY3NfcyAqZmNzKTsKIHZvaWQgYmZhX2Zjc19mYWJyaWNfdWZfcmVjdihzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLAogCQlzdHJ1Y3QgZmNoc19zICpmY2hzLCB1MTYgbGVuKTsKLWJmYV9ib29sZWFuX3QJYmZhX2Zjc19mYWJyaWNfaXNfbG9vcGJhY2soc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYyk7Ci1iZmFfYm9vbGVhbl90CWJmYV9mY3NfZmFicmljX2lzX2F1dGhfZmFpbGVkKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMpOwotZW51bSBiZmFfcG9ydF90eXBlIGJmYV9mY3NfZmFicmljX3BvcnRfdHlwZShzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljKTsKIHZvaWQJYmZhX2Zjc19mYWJyaWNfcHN5bWJfaW5pdChzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljKTsKLXZvaWQJYmZhX2Zjc19mYWJyaWNfcG9ydF9kZWxldGVfY29tcChzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljKTsKLWJmYV9zdGF0dXNfdAliZmFfZmNzX2ZhYnJpY19hZGR2ZihzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqdmYsCi0JCQlzdHJ1Y3QgYmZhX2Zjc19zICpmY3MsIHN0cnVjdCBiZmFfbHBvcnRfY2ZnX3MgKnBvcnRfY2ZnLAotCQkJc3RydWN0IGJmYWRfdmZfcyAqdmZfZHJ2KTsKIHZvaWQgYmZhX2Zjc19mYWJyaWNfc2V0X2ZhYnJpY19uYW1lKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMsCiAJICAgICAgIHd3bl90IGZhYnJpY19uYW1lKTsKIHUxNiBiZmFfZmNzX2ZhYnJpY19nZXRfc3dpdGNoX291aShzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljKTsKIHZvaWQgYmZhX2Zjc191Zl9hdHRhY2goc3RydWN0IGJmYV9mY3NfcyAqZmNzKTsKIHZvaWQgYmZhX2Zjc19wb3J0X2F0dGFjaChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpOwordm9pZCBiZmFfZmNzX2ZhYnJpY19zbV9vbmxpbmUoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYywKKwkJCWVudW0gYmZhX2Zjc19mYWJyaWNfZXZlbnQgZXZlbnQpOwordm9pZCBiZmFfZmNzX2ZhYnJpY19zbV9sb29wYmFjayhzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLAorCQkJZW51bSBiZmFfZmNzX2ZhYnJpY19ldmVudCBldmVudCk7Cit2b2lkIGJmYV9mY3NfZmFicmljX3NtX2F1dGhfZmFpbGVkKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMsCisJCQllbnVtIGJmYV9mY3NfZmFicmljX2V2ZW50IGV2ZW50KTsKIAogLyoKICAqIEJGQSBGQ1MgY2FsbGJhY2sgaW50ZXJmYWNlcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNzX2ZjcGltLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3NfZmNwaW0uYwppbmRleCA0MTNiNThlLi5lN2I0OWY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3NfZmNwaW0uYworKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3NfZmNwaW0uYwpAQCAtMTksOSArMTksOSBAQAogICogIGZjcGltLmMgLSBGQ1AgaW5pdGlhdG9yIG1vZGUgaS10IG5leHVzIHN0YXRlIG1hY2hpbmUKICAqLwogCisjaW5jbHVkZSAiYmZhZF9kcnYuaCIKICNpbmNsdWRlICJiZmFfZmNzLmgiCiAjaW5jbHVkZSAiYmZhX2ZjYnVpbGQuaCIKLSNpbmNsdWRlICJiZmFkX2Rydi5oIgogI2luY2x1ZGUgImJmYWRfaW0uaCIKIAogQkZBX1RSQ19GSUxFKEZDUywgRkNQSU0pOwpAQCAtMTAzLDcgKzEwMyw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSBCRkFfRkNTX0lUTklNX1NNX09GRkxJTkU6Ci0JCWJmYV9mY3NfcnBvcnRfaXRuaW1fYWNrKGl0bmltLT5ycG9ydCk7CisJCWJmYV9zbV9zZW5kX2V2ZW50KGl0bmltLT5ycG9ydCwgUlBTTV9FVkVOVF9GQzRfT0ZGTElORSk7CiAJCWJyZWFrOwogCiAJY2FzZSBCRkFfRkNTX0lUTklNX1NNX0lOSVRJQVRPUjoKQEAgLTE0MCw3ICsxNDAsNyBAQAogCWNhc2UgQkZBX0ZDU19JVE5JTV9TTV9PRkZMSU5FOgogCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfZmNzX2l0bmltX3NtX29mZmxpbmUpOwogCQliZmFfZmN4cF93YWxsb2NfY2FuY2VsKGl0bmltLT5mY3MtPmJmYSwgJml0bmltLT5mY3hwX3dxZSk7Ci0JCWJmYV9mY3NfcnBvcnRfaXRuaW1fYWNrKGl0bmltLT5ycG9ydCk7CisJCWJmYV9zbV9zZW5kX2V2ZW50KGl0bmltLT5ycG9ydCwgUlBTTV9FVkVOVF9GQzRfT0ZGTElORSk7CiAJCWJyZWFrOwogCiAJY2FzZSBCRkFfRkNTX0lUTklNX1NNX0RFTEVURToKQEAgLTE4MSw3ICsxODEsNyBAQAogCWNhc2UgQkZBX0ZDU19JVE5JTV9TTV9PRkZMSU5FOgogCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfZmNzX2l0bmltX3NtX29mZmxpbmUpOwogCQliZmFfZmN4cF9kaXNjYXJkKGl0bmltLT5mY3hwKTsKLQkJYmZhX2Zjc19ycG9ydF9pdG5pbV9hY2soaXRuaW0tPnJwb3J0KTsKKwkJYmZhX3NtX3NlbmRfZXZlbnQoaXRuaW0tPnJwb3J0LCBSUFNNX0VWRU5UX0ZDNF9PRkZMSU5FKTsKIAkJYnJlYWs7CiAKIAljYXNlIEJGQV9GQ1NfSVROSU1fU01fSU5JVElBVE9SOgpAQCAtMjE3LDcgKzIxNyw3IEBACiAJCX0gZWxzZSB7CiAJCQkvKiBpbnZva2UgdGFyZ2V0IG9mZmxpbmUgKi8KIAkJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9mY3NfaXRuaW1fc21fb2ZmbGluZSk7Ci0JCQliZmFfZmNzX3Jwb3J0X2xvZ29faW1wKGl0bmltLT5ycG9ydCk7CisJCQliZmFfc21fc2VuZF9ldmVudChpdG5pbS0+cnBvcnQsIFJQU01fRVZFTlRfTE9HT19JTVApOwogCQl9CiAJCWJyZWFrOwogCkBAIC0yMjUsNyArMjI1LDcgQEAKIAljYXNlIEJGQV9GQ1NfSVROSU1fU01fT0ZGTElORToKIAkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2Zjc19pdG5pbV9zbV9vZmZsaW5lKTsKIAkJYmZhX3RpbWVyX3N0b3AoJml0bmltLT50aW1lcik7Ci0JCWJmYV9mY3NfcnBvcnRfaXRuaW1fYWNrKGl0bmltLT5ycG9ydCk7CisJCWJmYV9zbV9zZW5kX2V2ZW50KGl0bmltLT5ycG9ydCwgUlBTTV9FVkVOVF9GQzRfT0ZGTElORSk7CiAJCWJyZWFrOwogCiAJY2FzZSBCRkFfRkNTX0lUTklNX1NNX0lOSVRJQVRPUjoKQEAgLTI2OSw3ICsyNjksNyBAQAogCWNhc2UgQkZBX0ZDU19JVE5JTV9TTV9PRkZMSU5FOgogCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfZmNzX2l0bmltX3NtX29mZmxpbmUpOwogCQliZmFfaXRuaW1fb2ZmbGluZShpdG5pbS0+YmZhX2l0bmltKTsKLQkJYmZhX2Zjc19ycG9ydF9pdG5pbV9hY2soaXRuaW0tPnJwb3J0KTsKKwkJYmZhX3NtX3NlbmRfZXZlbnQoaXRuaW0tPnJwb3J0LCBSUFNNX0VWRU5UX0ZDNF9PRkZMSU5FKTsKIAkJYnJlYWs7CiAKIAljYXNlIEJGQV9GQ1NfSVROSU1fU01fREVMRVRFOgpAQCAtMzMwLDcgKzMzMCw3IEBACiAJc3dpdGNoIChldmVudCkgewogCWNhc2UgQkZBX0ZDU19JVE5JTV9TTV9IQ0JfT0ZGTElORToKIAkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2Zjc19pdG5pbV9zbV9vZmZsaW5lKTsKLQkJYmZhX2Zjc19ycG9ydF9pdG5pbV9hY2soaXRuaW0tPnJwb3J0KTsKKwkJYmZhX3NtX3NlbmRfZXZlbnQoaXRuaW0tPnJwb3J0LCBSUFNNX0VWRU5UX0ZDNF9PRkZMSU5FKTsKIAkJYnJlYWs7CiAKIAljYXNlIEJGQV9GQ1NfSVROSU1fU01fREVMRVRFOgpAQCAtMzU4LDcgKzM1OCw3IEBACiAJc3dpdGNoIChldmVudCkgewogCWNhc2UgQkZBX0ZDU19JVE5JTV9TTV9PRkZMSU5FOgogCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfZmNzX2l0bmltX3NtX29mZmxpbmUpOwotCQliZmFfZmNzX3Jwb3J0X2l0bmltX2FjayhpdG5pbS0+cnBvcnQpOworCQliZmFfc21fc2VuZF9ldmVudChpdG5pbS0+cnBvcnQsIFJQU01fRVZFTlRfRkM0X09GRkxJTkUpOwogCQlicmVhazsKIAogCWNhc2UgQkZBX0ZDU19JVE5JTV9TTV9SU1BfRVJST1I6CkBAIC01MzYsNyArNTM2LDcgQEAKIAlpZiAoYmZhX2l0bmltID09IE5VTEwpIHsKIAkJYmZhX3RyYyhwb3J0LT5mY3MsIHJwb3J0LT5wd3duKTsKIAkJYmZhX2ZjYl9pdG5pbV9mcmVlKHBvcnQtPmZjcy0+YmZhZCwgaXRuaW1fZHJ2KTsKLQkJYmZhX2Fzc2VydCgwKTsKKwkJV0FSTl9PTigxKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCkBAIC02ODgsNyArNjg4LDcgQEAKIAogCWl0bmltLT5zdGF0cy5zbGVyKys7CiAJYmZhX3RyYyhpdG5pbS0+ZmNzLCBpdG5pbS0+cnBvcnQtPnB3d24pOwotCWJmYV9mY3NfcnBvcnRfbG9nb19pbXAoaXRuaW0tPnJwb3J0KTsKKwliZmFfc21fc2VuZF9ldmVudChpdG5pbS0+cnBvcnQsIFJQU01fRVZFTlRfTE9HT19JTVApOwogfQogCiBzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICoKQEAgLTcwMCw3ICs3MDAsNyBAQAogCWlmICghcnBvcnQpCiAJCXJldHVybiBOVUxMOwogCi0JYmZhX2Fzc2VydChycG9ydC0+aXRuaW0gIT0gTlVMTCk7CisJV0FSTl9PTihycG9ydC0+aXRuaW0gPT0gTlVMTCk7CiAJcmV0dXJuIHJwb3J0LT5pdG5pbTsKIH0KIApAQCAtNzI5LDcgKzcyOSw3IEBACiB7CiAJc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0gPSBOVUxMOwogCi0JYmZhX2Fzc2VydChwb3J0ICE9IE5VTEwpOworCVdBUk5fT04ocG9ydCA9PSBOVUxMKTsKIAogCWl0bmltID0gYmZhX2Zjc19pdG5pbV9sb29rdXAocG9ydCwgcnB3d24pOwogCkBAIC03NDYsNyArNzQ2LDcgQEAKIHsKIAlzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSA9IE5VTEw7CiAKLQliZmFfYXNzZXJ0KHBvcnQgIT0gTlVMTCk7CisJV0FSTl9PTihwb3J0ID09IE5VTEwpOwogCiAJaXRuaW0gPSBiZmFfZmNzX2l0bmltX2xvb2t1cChwb3J0LCBycHd3bik7CiAKQEAgLTc3OCw2ICs3NzgsNiBAQAogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCWJmYV9hc3NlcnQoMCk7CisJCVdBUk5fT04oMSk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNzX2xwb3J0LmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3NfbHBvcnQuYwppbmRleCA4ZDY1MTMwLi40ZTJlYjkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3NfbHBvcnQuYworKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3NfbHBvcnQuYwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAgKi8KIAorI2luY2x1ZGUgImJmYWRfZHJ2LmgiCiAjaW5jbHVkZSAiYmZhX2Zjcy5oIgogI2luY2x1ZGUgImJmYV9mY2J1aWxkLmgiCiAjaW5jbHVkZSAiYmZhX2ZjLmgiCi0jaW5jbHVkZSAiYmZhZF9kcnYuaCIKIAogQkZBX1RSQ19GSUxFKEZDUywgUE9SVCk7CiAKQEAgLTE1OSw3ICsxNTksNyBAQAogCQkJYmZhX3NtX3NldF9zdGF0ZShwb3J0LCBiZmFfZmNzX2xwb3J0X3NtX2RlbGV0aW5nKTsKIAkJCWxpc3RfZm9yX2VhY2hfc2FmZShxZSwgcWVuLCAmcG9ydC0+cnBvcnRfcSkgewogCQkJCXJwb3J0ID0gKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKikgcWU7Ci0JCQkJYmZhX2Zjc19ycG9ydF9kZWxldGUocnBvcnQpOworCQkJCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBSUFNNX0VWRU5UX0RFTEVURSk7CiAJCQl9CiAJCX0KIAkJYnJlYWs7CkBAIC0xOTcsNyArMTk3LDcgQEAKIAkJCWJmYV9zbV9zZXRfc3RhdGUocG9ydCwgYmZhX2Zjc19scG9ydF9zbV9kZWxldGluZyk7CiAJCQlsaXN0X2Zvcl9lYWNoX3NhZmUocWUsIHFlbiwgJnBvcnQtPnJwb3J0X3EpIHsKIAkJCQlycG9ydCA9IChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICopIHFlOwotCQkJCWJmYV9mY3NfcnBvcnRfZGVsZXRlKHJwb3J0KTsKKwkJCQliZmFfc21fc2VuZF9ldmVudChycG9ydCwgUlBTTV9FVkVOVF9ERUxFVEUpOwogCQkJfQogCQl9CiAJCWJyZWFrOwpAQCAtMzA5LDYgKzMwOSw3IEBACiAJCQlyZXR1cm47CiAJCX0KIAkJcG9ydC0+cGlkICA9IHJ4X2ZjaHMtPmRfaWQ7CisJCWJmYV9scHNfc2V0X24ybl9waWQocG9ydC0+ZmFicmljLT5scHMsIHJ4X2ZjaHMtPmRfaWQpOwogCX0KIAogCS8qCkBAIC0zMjMsNiArMzI0LDcgQEAKIAkJCShtZW1jbXAoKHZvaWQgKikmYmZhX2Zjc19scG9ydF9nZXRfcHd3bihwb3J0KSwKIAkJCSh2b2lkICopJnBsb2dpLT5wb3J0X25hbWUsIHNpemVvZih3d25fdCkpIDwgMCkpIHsKIAkJCXBvcnQtPnBpZCAgPSByeF9mY2hzLT5kX2lkOworCQkJYmZhX2xwc19zZXRfbjJuX3BpZChwb3J0LT5mYWJyaWMtPmxwcywgcnhfZmNocy0+ZF9pZCk7CiAJCQlycG9ydC0+cGlkID0gcnhfZmNocy0+c19pZDsKIAkJfQogCQliZmFfZmNzX3Jwb3J0X3Bsb2dpKHJwb3J0LCByeF9mY2hzLCBwbG9naSk7CkBAIC0zNDksOCArMzUxLDggQEAKIAkJICogVGhpcyBpcyBhIGRpZmZlcmVudCBkZXZpY2Ugd2l0aCB0aGUgc2FtZSBwaWQuIE9sZCBkZXZpY2UKIAkJICogZGlzYXBwZWFyZWQuIFNlbmQgaW1wbGljaXQgTE9HTyB0byBvbGQgZGV2aWNlLgogCQkgKi8KLQkJYmZhX2Fzc2VydChycG9ydC0+cHd3biAhPSBwbG9naS0+cG9ydF9uYW1lKTsKLQkJYmZhX2Zjc19ycG9ydF9sb2dvX2ltcChycG9ydCk7CisJCVdBUk5fT04ocnBvcnQtPnB3d24gPT0gcGxvZ2ktPnBvcnRfbmFtZSk7CisJCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBSUFNNX0VWRU5UX0xPR09fSU1QKTsKIAogCQkvKgogCQkgKiBJbmJvdW5kIFBMT0dJIGZyb20gYSBuZXcgZGV2aWNlICh3aXRoIG9sZCBQSUQpLgpAQCAtMzYyLDcgKzM2NCw3IEBACiAJLyoKIAkgKiBQTE9HSSBjcm9zc2luZyBlYWNoIG90aGVyLgogCSAqLwotCWJmYV9hc3NlcnQocnBvcnQtPnB3d24gPT0gV1dOX05VTEwpOworCVdBUk5fT04ocnBvcnQtPnB3d24gIT0gV1dOX05VTEwpOwogCWJmYV9mY3NfcnBvcnRfcGxvZ2kocnBvcnQsIHJ4X2ZjaHMsIHBsb2dpKTsKIH0KIApAQCAtNTExLDcgKzUxMyw4IEBACiAJX19wb3J0X2FjdGlvbltwb3J0LT5mYWJyaWMtPmZhYl90eXBlXS5vZmZsaW5lKHBvcnQpOwogCiAJd3duMnN0cihscHd3bl9idWYsIGJmYV9mY3NfbHBvcnRfZ2V0X3B3d24ocG9ydCkpOwotCWlmIChiZmFfZmNzX2ZhYnJpY19pc19vbmxpbmUocG9ydC0+ZmFicmljKSA9PSBCRkFfVFJVRSkKKwlpZiAoYmZhX3NtX2NtcF9zdGF0ZShwb3J0LT5mYWJyaWMsCisJCQliZmFfZmNzX2ZhYnJpY19zbV9vbmxpbmUpID09IEJGQV9UUlVFKQogCQlCRkFfTE9HKEtFUk5fRVJSLCBiZmFkLCBiZmFfbG9nX2xldmVsLAogCQkiTG9naWNhbCBwb3J0IGxvc3QgZmFicmljIGNvbm5lY3Rpdml0eTogV1dOID0gJXMgUm9sZSA9ICVzXG4iLAogCQlscHd3bl9idWYsICJJbml0aWF0b3IiKTsKQEAgLTUyMiwyNiArNTI1LDI2IEBACiAKIAlsaXN0X2Zvcl9lYWNoX3NhZmUocWUsIHFlbiwgJnBvcnQtPnJwb3J0X3EpIHsKIAkJcnBvcnQgPSAoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqKSBxZTsKLQkJYmZhX2Zjc19ycG9ydF9vZmZsaW5lKHJwb3J0KTsKKwkJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQsIFJQU01fRVZFTlRfTE9HT19JTVApOwogCX0KIH0KIAogc3RhdGljIHZvaWQKIGJmYV9mY3NfbHBvcnRfdW5rbm93bl9pbml0KHN0cnVjdCBiZmFfZmNzX2xwb3J0X3MgKnBvcnQpCiB7Ci0JYmZhX2Fzc2VydCgwKTsKKwlXQVJOX09OKDEpOwogfQogCiBzdGF0aWMgdm9pZAogYmZhX2Zjc19scG9ydF91bmtub3duX29ubGluZShzdHJ1Y3QgYmZhX2Zjc19scG9ydF9zICpwb3J0KQogewotCWJmYV9hc3NlcnQoMCk7CisJV0FSTl9PTigxKTsKIH0KIAogc3RhdGljIHZvaWQKIGJmYV9mY3NfbHBvcnRfdW5rbm93bl9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX2xwb3J0X3MgKnBvcnQpCiB7Ci0JYmZhX2Fzc2VydCgwKTsKKwlXQVJOX09OKDEpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtNTg0LDMzICs1ODcsMTEgQEAKIAkJCQlwb3J0LT52cG9ydCA/IHBvcnQtPnZwb3J0LT52cG9ydF9kcnYgOiBOVUxMKTsKIAkJYmZhX2Zjc192cG9ydF9kZWxldGVfY29tcChwb3J0LT52cG9ydCk7CiAJfSBlbHNlIHsKLQkJIGJmYV9mY3NfZmFicmljX3BvcnRfZGVsZXRlX2NvbXAocG9ydC0+ZmFicmljKTsKKwkJYmZhX3djX2Rvd24oJnBvcnQtPmZhYnJpYy0+d2MpOwogCX0KIH0KIAogCi0KLS8qCi0gKiAgZmNzX2xwb3J0X2FwaSBCRkEgRkNTIHBvcnQgQVBJCi0gKi8KLS8qCi0gKiAgIE1vZHVsZSBpbml0aWFsaXphdGlvbgotICovCi12b2lkCi1iZmFfZmNzX2xwb3J0X21vZGluaXQoc3RydWN0IGJmYV9mY3NfcyAqZmNzKQotewotCi19Ci0KLS8qCi0gKiAgIE1vZHVsZSBjbGVhbnVwCi0gKi8KLXZvaWQKLWJmYV9mY3NfbHBvcnRfbW9kZXhpdChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpCi17Ci0JYmZhX2Zjc19tb2RleGl0X2NvbXAoZmNzKTsKLX0KLQogLyoKICAqIFVuc29saWNpdGVkIGZyYW1lIHJlY2VpdmUgaGFuZGxpbmcuCiAgKi8KQEAgLTYyMyw2ICs2MDQsNyBAQAogCXN0cnVjdCBmY19lbHNfY21kX3MgKmVsc19jbWQgPSAoc3RydWN0IGZjX2Vsc19jbWRfcyAqKSAoZmNocyArIDEpOwogCiAJYmZhX3N0YXRzKGxwb3J0LCB1Zl9yZWN2cyk7CisJYmZhX3RyYyhscG9ydC0+ZmNzLCBmY2hzLT50eXBlKTsKIAogCWlmICghYmZhX2Zjc19scG9ydF9pc19vbmxpbmUobHBvcnQpKSB7CiAJCWJmYV9zdGF0cyhscG9ydCwgdWZfcmVjdl9kcm9wcyk7CkBAIC02ODIsOCArNjY0LDExIEBACiAJICogT25seSBoYW5kbGVzIEVMUyBmcmFtZXMgZm9yIG5vdy4KIAkgKi8KIAlpZiAoZmNocy0+dHlwZSAhPSBGQ19UWVBFX0VMUykgewotCQliZmFfdHJjKGxwb3J0LT5mY3MsIGZjaHMtPnR5cGUpOwotCQliZmFfYXNzZXJ0KDApOworCQliZmFfdHJjKGxwb3J0LT5mY3MsIGZjaHMtPnNfaWQpOworCQliZmFfdHJjKGxwb3J0LT5mY3MsIGZjaHMtPmRfaWQpOworCQkvKiBpZ25vcmUgdHlwZSBGQ19UWVBFX0ZDX0ZTUyAqLworCQlpZiAoZmNocy0+dHlwZSAhPSBGQ19UWVBFX0ZDX0ZTUykKKwkJCWJmYV9zbV9mYXVsdChscG9ydC0+ZmNzLCBmY2hzLT50eXBlKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNzkyLDcgKzc3Nyw3IEBACiAJc3RydWN0IGJmYV9mY3NfbHBvcnRfcyAqcG9ydCwKIAlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCkKIHsKLQliZmFfYXNzZXJ0KGJmYV9xX2lzX29uX3EoJnBvcnQtPnJwb3J0X3EsIHJwb3J0KSk7CisJV0FSTl9PTighYmZhX3FfaXNfb25fcSgmcG9ydC0+cnBvcnRfcSwgcnBvcnQpKTsKIAlsaXN0X2RlbCgmcnBvcnQtPnFlKTsKIAlwb3J0LT5udW1fcnBvcnRzLS07CiAKQEAgLTg1MCw4ICs4MzUsOCBAQAogCWxwb3J0LT5mY3MgPSBmY3M7CiAJbHBvcnQtPmZhYnJpYyA9IGJmYV9mY3NfdmZfbG9va3VwKGZjcywgdmZfaWQpOwogCWxwb3J0LT52cG9ydCA9IHZwb3J0OwotCWxwb3J0LT5scF90YWcgPSAodnBvcnQpID8gYmZhX2xwc19nZXRfdGFnKHZwb3J0LT5scHMpIDoKLQkJCQkgIGJmYV9scHNfZ2V0X3RhZyhscG9ydC0+ZmFicmljLT5scHMpOworCWxwb3J0LT5scF90YWcgPSAodnBvcnQpID8gdnBvcnQtPmxwcy0+bHBfdGFnIDoKKwkJCQkgIGxwb3J0LT5mYWJyaWMtPmxwcy0+bHBfdGFnOwogCiAJSU5JVF9MSVNUX0hFQUQoJmxwb3J0LT5ycG9ydF9xKTsKIAlscG9ydC0+bnVtX3Jwb3J0cyA9IDA7CkBAIC05MDMsMTAgKzg4OCwxMiBAQAogCXBvcnRfYXR0ci0+cG9ydF9jZmcgPSBwb3J0LT5wb3J0X2NmZzsKIAogCWlmIChwb3J0LT5mYWJyaWMpIHsKLQkJcG9ydF9hdHRyLT5wb3J0X3R5cGUgPSBiZmFfZmNzX2ZhYnJpY19wb3J0X3R5cGUocG9ydC0+ZmFicmljKTsKLQkJcG9ydF9hdHRyLT5sb29wYmFjayA9IGJmYV9mY3NfZmFicmljX2lzX2xvb3BiYWNrKHBvcnQtPmZhYnJpYyk7CisJCXBvcnRfYXR0ci0+cG9ydF90eXBlID0gcG9ydC0+ZmFicmljLT5vcGVyX3R5cGU7CisJCXBvcnRfYXR0ci0+bG9vcGJhY2sgPSBiZmFfc21fY21wX3N0YXRlKHBvcnQtPmZhYnJpYywKKwkJCQliZmFfZmNzX2ZhYnJpY19zbV9sb29wYmFjayk7CiAJCXBvcnRfYXR0ci0+YXV0aGZhaWwgPQotCQkJYmZhX2Zjc19mYWJyaWNfaXNfYXV0aF9mYWlsZWQocG9ydC0+ZmFicmljKTsKKwkJCWJmYV9zbV9jbXBfc3RhdGUocG9ydC0+ZmFicmljLAorCQkJCWJmYV9mY3NfZmFicmljX3NtX2F1dGhfZmFpbGVkKTsKIAkJcG9ydF9hdHRyLT5mYWJyaWNfbmFtZSAgPSBiZmFfZmNzX2xwb3J0X2dldF9mYWJyaWNfbmFtZShwb3J0KTsKIAkJbWVtY3B5KHBvcnRfYXR0ci0+ZmFicmljX2lwX2FkZHIsCiAJCQliZmFfZmNzX2xwb3J0X2dldF9mYWJyaWNfaXBhZGRyKHBvcnQpLApAQCAtOTE1LDEwICs5MDIsMTAgQEAKIAkJaWYgKHBvcnQtPnZwb3J0ICE9IE5VTEwpIHsKIAkJCXBvcnRfYXR0ci0+cG9ydF90eXBlID0gQkZBX1BPUlRfVFlQRV9WUE9SVDsKIAkJCXBvcnRfYXR0ci0+ZnBtYV9tYWMgPQotCQkJCWJmYV9scHNfZ2V0X2xwX21hYyhwb3J0LT52cG9ydC0+bHBzKTsKKwkJCQlwb3J0LT52cG9ydC0+bHBzLT5scF9tYWM7CiAJCX0gZWxzZSB7CiAJCQlwb3J0X2F0dHItPmZwbWFfbWFjID0KLQkJCQliZmFfbHBzX2dldF9scF9tYWMocG9ydC0+ZmFicmljLT5scHMpOworCQkJCXBvcnQtPmZhYnJpYy0+bHBzLT5scF9tYWM7CiAJCX0KIAl9IGVsc2UgewogCQlwb3J0X2F0dHItPnBvcnRfdHlwZSA9IEJGQV9QT1JUX1RZUEVfVU5LTk9XTjsKQEAgLTk5OCw2ICs5ODUsNyBAQAogCSAgICAoKHZvaWQgKikmcGNmZy0+cHd3biwgKHZvaWQgKikmbjJuX3BvcnQtPnJlbV9wb3J0X3d3biwKIAkgICAgIHNpemVvZih3d25fdCkpID4gMCkgewogCQlwb3J0LT5waWQgPSBOMk5fTE9DQUxfUElEOworCQliZmFfbHBzX3NldF9uMm5fcGlkKHBvcnQtPmZhYnJpYy0+bHBzLCBOMk5fTE9DQUxfUElEKTsKIAkJLyoKIAkJICogRmlyc3QsIGNoZWNrIGlmIHdlIGtub3cgdGhlIGRldmljZSBieSBwd3duLgogCQkgKi8KQEAgLTEwMDcsNyArOTk1LDcgQEAKIAkJCWJmYV90cmMocG9ydC0+ZmNzLCBycG9ydC0+cGlkKTsKIAkJCWJmYV90cmMocG9ydC0+ZmNzLCBycG9ydC0+cHd3bik7CiAJCQlycG9ydC0+cGlkID0gTjJOX1JFTU9URV9QSUQ7Ci0JCQliZmFfZmNzX3Jwb3J0X29ubGluZShycG9ydCk7CisJCQliZmFfc21fc2VuZF9ldmVudChycG9ydCwgUlBTTV9FVkVOVF9QTE9HSV9TRU5EKTsKIAkJCXJldHVybjsKIAkJfQogCkBAIC0xMDE3LDEwICsxMDA1LDEwIEBACiAJCSAqLwogCQlpZiAocG9ydC0+bnVtX3Jwb3J0cyA+IDApIHsKIAkJCXJwb3J0ID0gYmZhX2Zjc19scG9ydF9nZXRfcnBvcnRfYnlfcGlkKHBvcnQsIDApOwotCQkJYmZhX2Fzc2VydChycG9ydCAhPSBOVUxMKTsKKwkJCVdBUk5fT04ocnBvcnQgPT0gTlVMTCk7CiAJCQlpZiAocnBvcnQpIHsKIAkJCQliZmFfdHJjKHBvcnQtPmZjcywgcnBvcnQtPnB3d24pOwotCQkJCWJmYV9mY3NfcnBvcnRfZGVsZXRlKHJwb3J0KTsKKwkJCQliZmFfc21fc2VuZF9ldmVudChycG9ydCwgUlBTTV9FVkVOVF9ERUxFVEUpOwogCQkJfQogCQl9CiAJCWJmYV9mY3NfcnBvcnRfY3JlYXRlKHBvcnQsIE4yTl9SRU1PVEVfUElEKTsKQEAgLTE1NjksNiArMTU1Nyw3IEBACiAJc3RydWN0IGZkbWlfYXR0cl9zICphdHRyOwogCXU4ICAgICAgICAqY3Vycl9wdHI7CiAJdTE2ICAgICAgICBsZW4sIGNvdW50OworCXUxNgl0ZW1wbGVuOwogCiAJLyoKIAkgKiBnZXQgaGJhIGF0dHJpYnV0ZXMKQEAgLTE1OTQsNjkgKzE1ODMsNjkgQEAKIAkgKi8KIAlhdHRyID0gKHN0cnVjdCBmZG1pX2F0dHJfcyAqKSBjdXJyX3B0cjsKIAlhdHRyLT50eXBlID0gY3B1X3RvX2JlMTYoRkRNSV9IQkFfQVRUUklCX05PREVOQU1FKTsKLQlhdHRyLT5sZW4gPSBzaXplb2Yod3duX3QpOwotCW1lbWNweShhdHRyLT52YWx1ZSwgJmJmYV9mY3NfbHBvcnRfZ2V0X253d24ocG9ydCksIGF0dHItPmxlbik7Ci0JY3Vycl9wdHIgKz0gc2l6ZW9mKGF0dHItPnR5cGUpICsgc2l6ZW9mKGF0dHItPmxlbikgKyBhdHRyLT5sZW47Ci0JbGVuICs9IGF0dHItPmxlbjsKKwl0ZW1wbGVuID0gc2l6ZW9mKHd3bl90KTsKKwltZW1jcHkoYXR0ci0+dmFsdWUsICZiZmFfZmNzX2xwb3J0X2dldF9ud3duKHBvcnQpLCB0ZW1wbGVuKTsKKwljdXJyX3B0ciArPSBzaXplb2YoYXR0ci0+dHlwZSkgKyBzaXplb2YodGVtcGxlbikgKyB0ZW1wbGVuOworCWxlbiArPSB0ZW1wbGVuOwogCWNvdW50Kys7Ci0JYXR0ci0+bGVuID0gY3B1X3RvX2JlMTYoYXR0ci0+bGVuICsgc2l6ZW9mKGF0dHItPnR5cGUpICsKLQkJCSAgICAgc2l6ZW9mKGF0dHItPmxlbikpOworCWF0dHItPmxlbiA9IGNwdV90b19iZTE2KHRlbXBsZW4gKyBzaXplb2YoYXR0ci0+dHlwZSkgKworCQkJICAgICBzaXplb2YodGVtcGxlbikpOwogCiAJLyoKIAkgKiBNYW51ZmFjdHVyZXIKIAkgKi8KIAlhdHRyID0gKHN0cnVjdCBmZG1pX2F0dHJfcyAqKSBjdXJyX3B0cjsKIAlhdHRyLT50eXBlID0gY3B1X3RvX2JlMTYoRkRNSV9IQkFfQVRUUklCX01BTlVGQUNUVVJFUik7Ci0JYXR0ci0+bGVuID0gKHUxNikgc3RybGVuKGZjc19oYmFfYXR0ci0+bWFudWZhY3R1cmVyKTsKLQltZW1jcHkoYXR0ci0+dmFsdWUsIGZjc19oYmFfYXR0ci0+bWFudWZhY3R1cmVyLCBhdHRyLT5sZW4pOwotCWF0dHItPmxlbiA9IGZjX3JvdW5kdXAoYXR0ci0+bGVuLCBzaXplb2YodTMyKSk7Ci0JY3Vycl9wdHIgKz0gc2l6ZW9mKGF0dHItPnR5cGUpICsgc2l6ZW9mKGF0dHItPmxlbikgKyBhdHRyLT5sZW47Ci0JbGVuICs9IGF0dHItPmxlbjsKKwl0ZW1wbGVuID0gKHUxNikgc3RybGVuKGZjc19oYmFfYXR0ci0+bWFudWZhY3R1cmVyKTsKKwltZW1jcHkoYXR0ci0+dmFsdWUsIGZjc19oYmFfYXR0ci0+bWFudWZhY3R1cmVyLCB0ZW1wbGVuKTsKKwl0ZW1wbGVuID0gZmNfcm91bmR1cCh0ZW1wbGVuLCBzaXplb2YodTMyKSk7CisJY3Vycl9wdHIgKz0gc2l6ZW9mKGF0dHItPnR5cGUpICsgc2l6ZW9mKHRlbXBsZW4pICsgdGVtcGxlbjsKKwlsZW4gKz0gdGVtcGxlbjsKIAljb3VudCsrOwotCWF0dHItPmxlbiA9IGNwdV90b19iZTE2KGF0dHItPmxlbiArIHNpemVvZihhdHRyLT50eXBlKSArCi0JCQkgICAgIHNpemVvZihhdHRyLT5sZW4pKTsKKwlhdHRyLT5sZW4gPSBjcHVfdG9fYmUxNih0ZW1wbGVuICsgc2l6ZW9mKGF0dHItPnR5cGUpICsKKwkJCSAgICAgc2l6ZW9mKHRlbXBsZW4pKTsKIAogCS8qCiAJICogU2VyaWFsIE51bWJlcgogCSAqLwogCWF0dHIgPSAoc3RydWN0IGZkbWlfYXR0cl9zICopIGN1cnJfcHRyOwogCWF0dHItPnR5cGUgPSBjcHVfdG9fYmUxNihGRE1JX0hCQV9BVFRSSUJfU0VSSUFMTlVNKTsKLQlhdHRyLT5sZW4gPSAodTE2KSBzdHJsZW4oZmNzX2hiYV9hdHRyLT5zZXJpYWxfbnVtKTsKLQltZW1jcHkoYXR0ci0+dmFsdWUsIGZjc19oYmFfYXR0ci0+c2VyaWFsX251bSwgYXR0ci0+bGVuKTsKLQlhdHRyLT5sZW4gPSBmY19yb3VuZHVwKGF0dHItPmxlbiwgc2l6ZW9mKHUzMikpOwotCWN1cnJfcHRyICs9IHNpemVvZihhdHRyLT50eXBlKSArIHNpemVvZihhdHRyLT5sZW4pICsgYXR0ci0+bGVuOwotCWxlbiArPSBhdHRyLT5sZW47CisJdGVtcGxlbiA9ICh1MTYpIHN0cmxlbihmY3NfaGJhX2F0dHItPnNlcmlhbF9udW0pOworCW1lbWNweShhdHRyLT52YWx1ZSwgZmNzX2hiYV9hdHRyLT5zZXJpYWxfbnVtLCB0ZW1wbGVuKTsKKwl0ZW1wbGVuID0gZmNfcm91bmR1cCh0ZW1wbGVuLCBzaXplb2YodTMyKSk7CisJY3Vycl9wdHIgKz0gc2l6ZW9mKGF0dHItPnR5cGUpICsgc2l6ZW9mKHRlbXBsZW4pICsgdGVtcGxlbjsKKwlsZW4gKz0gdGVtcGxlbjsKIAljb3VudCsrOwotCWF0dHItPmxlbiA9IGNwdV90b19iZTE2KGF0dHItPmxlbiArIHNpemVvZihhdHRyLT50eXBlKSArCi0JCQkgICAgIHNpemVvZihhdHRyLT5sZW4pKTsKKwlhdHRyLT5sZW4gPSBjcHVfdG9fYmUxNih0ZW1wbGVuICsgc2l6ZW9mKGF0dHItPnR5cGUpICsKKwkJCSAgICAgc2l6ZW9mKHRlbXBsZW4pKTsKIAogCS8qCiAJICogTW9kZWwKIAkgKi8KIAlhdHRyID0gKHN0cnVjdCBmZG1pX2F0dHJfcyAqKSBjdXJyX3B0cjsKIAlhdHRyLT50eXBlID0gY3B1X3RvX2JlMTYoRkRNSV9IQkFfQVRUUklCX01PREVMKTsKLQlhdHRyLT5sZW4gPSAodTE2KSBzdHJsZW4oZmNzX2hiYV9hdHRyLT5tb2RlbCk7Ci0JbWVtY3B5KGF0dHItPnZhbHVlLCBmY3NfaGJhX2F0dHItPm1vZGVsLCBhdHRyLT5sZW4pOwotCWF0dHItPmxlbiA9IGZjX3JvdW5kdXAoYXR0ci0+bGVuLCBzaXplb2YodTMyKSk7Ci0JY3Vycl9wdHIgKz0gc2l6ZW9mKGF0dHItPnR5cGUpICsgc2l6ZW9mKGF0dHItPmxlbikgKyBhdHRyLT5sZW47Ci0JbGVuICs9IGF0dHItPmxlbjsKKwl0ZW1wbGVuID0gKHUxNikgc3RybGVuKGZjc19oYmFfYXR0ci0+bW9kZWwpOworCW1lbWNweShhdHRyLT52YWx1ZSwgZmNzX2hiYV9hdHRyLT5tb2RlbCwgdGVtcGxlbik7CisJdGVtcGxlbiA9IGZjX3JvdW5kdXAodGVtcGxlbiwgc2l6ZW9mKHUzMikpOworCWN1cnJfcHRyICs9IHNpemVvZihhdHRyLT50eXBlKSArIHNpemVvZih0ZW1wbGVuKSArIHRlbXBsZW47CisJbGVuICs9IHRlbXBsZW47CiAJY291bnQrKzsKLQlhdHRyLT5sZW4gPSBjcHVfdG9fYmUxNihhdHRyLT5sZW4gKyBzaXplb2YoYXR0ci0+dHlwZSkgKwotCQkJICAgICBzaXplb2YoYXR0ci0+bGVuKSk7CisJYXR0ci0+bGVuID0gY3B1X3RvX2JlMTYodGVtcGxlbiArIHNpemVvZihhdHRyLT50eXBlKSArCisJCQkgICAgIHNpemVvZih0ZW1wbGVuKSk7CiAKIAkvKgogCSAqIE1vZGVsIERlc2MKIAkgKi8KIAlhdHRyID0gKHN0cnVjdCBmZG1pX2F0dHJfcyAqKSBjdXJyX3B0cjsKIAlhdHRyLT50eXBlID0gY3B1X3RvX2JlMTYoRkRNSV9IQkFfQVRUUklCX01PREVMX0RFU0MpOwotCWF0dHItPmxlbiA9ICh1MTYpIHN0cmxlbihmY3NfaGJhX2F0dHItPm1vZGVsX2Rlc2MpOwotCW1lbWNweShhdHRyLT52YWx1ZSwgZmNzX2hiYV9hdHRyLT5tb2RlbF9kZXNjLCBhdHRyLT5sZW4pOwotCWF0dHItPmxlbiA9IGZjX3JvdW5kdXAoYXR0ci0+bGVuLCBzaXplb2YodTMyKSk7Ci0JY3Vycl9wdHIgKz0gc2l6ZW9mKGF0dHItPnR5cGUpICsgc2l6ZW9mKGF0dHItPmxlbikgKyBhdHRyLT5sZW47Ci0JbGVuICs9IGF0dHItPmxlbjsKKwl0ZW1wbGVuID0gKHUxNikgc3RybGVuKGZjc19oYmFfYXR0ci0+bW9kZWxfZGVzYyk7CisJbWVtY3B5KGF0dHItPnZhbHVlLCBmY3NfaGJhX2F0dHItPm1vZGVsX2Rlc2MsIHRlbXBsZW4pOworCXRlbXBsZW4gPSBmY19yb3VuZHVwKHRlbXBsZW4sIHNpemVvZih1MzIpKTsKKwljdXJyX3B0ciArPSBzaXplb2YoYXR0ci0+dHlwZSkgKyBzaXplb2YodGVtcGxlbikgKyB0ZW1wbGVuOworCWxlbiArPSB0ZW1wbGVuOwogCWNvdW50Kys7Ci0JYXR0ci0+bGVuID0gY3B1X3RvX2JlMTYoYXR0ci0+bGVuICsgc2l6ZW9mKGF0dHItPnR5cGUpICsKLQkJCSAgICAgc2l6ZW9mKGF0dHItPmxlbikpOworCWF0dHItPmxlbiA9IGNwdV90b19iZTE2KHRlbXBsZW4gKyBzaXplb2YoYXR0ci0+dHlwZSkgKworCQkJICAgICBzaXplb2YodGVtcGxlbikpOwogCiAJLyoKIAkgKiBIL1cgVmVyc2lvbgpAQCAtMTY2NCwxNCArMTY1MywxNCBAQAogCWlmIChmY3NfaGJhX2F0dHItPmh3X3ZlcnNpb25bMF0gIT0gJ1wwJykgewogCQlhdHRyID0gKHN0cnVjdCBmZG1pX2F0dHJfcyAqKSBjdXJyX3B0cjsKIAkJYXR0ci0+dHlwZSA9IGNwdV90b19iZTE2KEZETUlfSEJBX0FUVFJJQl9IV19WRVJTSU9OKTsKLQkJYXR0ci0+bGVuID0gKHUxNikgc3RybGVuKGZjc19oYmFfYXR0ci0+aHdfdmVyc2lvbik7Ci0JCW1lbWNweShhdHRyLT52YWx1ZSwgZmNzX2hiYV9hdHRyLT5od192ZXJzaW9uLCBhdHRyLT5sZW4pOwotCQlhdHRyLT5sZW4gPSBmY19yb3VuZHVwKGF0dHItPmxlbiwgc2l6ZW9mKHUzMikpOwotCQljdXJyX3B0ciArPSBzaXplb2YoYXR0ci0+dHlwZSkgKyBzaXplb2YoYXR0ci0+bGVuKSArIGF0dHItPmxlbjsKLQkJbGVuICs9IGF0dHItPmxlbjsKKwkJdGVtcGxlbiA9ICh1MTYpIHN0cmxlbihmY3NfaGJhX2F0dHItPmh3X3ZlcnNpb24pOworCQltZW1jcHkoYXR0ci0+dmFsdWUsIGZjc19oYmFfYXR0ci0+aHdfdmVyc2lvbiwgdGVtcGxlbik7CisJCXRlbXBsZW4gPSBmY19yb3VuZHVwKHRlbXBsZW4sIHNpemVvZih1MzIpKTsKKwkJY3Vycl9wdHIgKz0gc2l6ZW9mKGF0dHItPnR5cGUpICsgc2l6ZW9mKHRlbXBsZW4pICsgdGVtcGxlbjsKKwkJbGVuICs9IHRlbXBsZW47CiAJCWNvdW50Kys7Ci0JCWF0dHItPmxlbiA9IGNwdV90b19iZTE2KGF0dHItPmxlbiArIHNpemVvZihhdHRyLT50eXBlKSArCi0JCQkJCSBzaXplb2YoYXR0ci0+bGVuKSk7CisJCWF0dHItPmxlbiA9IGNwdV90b19iZTE2KHRlbXBsZW4gKyBzaXplb2YoYXR0ci0+dHlwZSkgKworCQkJCQkgc2l6ZW9mKHRlbXBsZW4pKTsKIAl9CiAKIAkvKgpAQCAtMTY3OSwxNCArMTY2OCwxNCBAQAogCSAqLwogCWF0dHIgPSAoc3RydWN0IGZkbWlfYXR0cl9zICopIGN1cnJfcHRyOwogCWF0dHItPnR5cGUgPSBjcHVfdG9fYmUxNihGRE1JX0hCQV9BVFRSSUJfRFJJVkVSX1ZFUlNJT04pOwotCWF0dHItPmxlbiA9ICh1MTYpIHN0cmxlbihmY3NfaGJhX2F0dHItPmRyaXZlcl92ZXJzaW9uKTsKLQltZW1jcHkoYXR0ci0+dmFsdWUsIGZjc19oYmFfYXR0ci0+ZHJpdmVyX3ZlcnNpb24sIGF0dHItPmxlbik7Ci0JYXR0ci0+bGVuID0gZmNfcm91bmR1cChhdHRyLT5sZW4sIHNpemVvZih1MzIpKTsKLQljdXJyX3B0ciArPSBzaXplb2YoYXR0ci0+dHlwZSkgKyBzaXplb2YoYXR0ci0+bGVuKSArIGF0dHItPmxlbjsKLQlsZW4gKz0gYXR0ci0+bGVuOzsKKwl0ZW1wbGVuID0gKHUxNikgc3RybGVuKGZjc19oYmFfYXR0ci0+ZHJpdmVyX3ZlcnNpb24pOworCW1lbWNweShhdHRyLT52YWx1ZSwgZmNzX2hiYV9hdHRyLT5kcml2ZXJfdmVyc2lvbiwgdGVtcGxlbik7CisJdGVtcGxlbiA9IGZjX3JvdW5kdXAodGVtcGxlbiwgc2l6ZW9mKHUzMikpOworCWN1cnJfcHRyICs9IHNpemVvZihhdHRyLT50eXBlKSArIHNpemVvZih0ZW1wbGVuKSArIHRlbXBsZW47CisJbGVuICs9IHRlbXBsZW47OwogCWNvdW50Kys7Ci0JYXR0ci0+bGVuID0gY3B1X3RvX2JlMTYoYXR0ci0+bGVuICsgc2l6ZW9mKGF0dHItPnR5cGUpICsKLQkJCSAgICAgc2l6ZW9mKGF0dHItPmxlbikpOworCWF0dHItPmxlbiA9IGNwdV90b19iZTE2KHRlbXBsZW4gKyBzaXplb2YoYXR0ci0+dHlwZSkgKworCQkJICAgICBzaXplb2YodGVtcGxlbikpOwogCiAJLyoKIAkgKiBPcHRpb24gUm9tIFZlcnNpb24KQEAgLTE2OTQsMTQgKzE2ODMsMTQgQEAKIAlpZiAoZmNzX2hiYV9hdHRyLT5vcHRpb25fcm9tX3ZlclswXSAhPSAnXDAnKSB7CiAJCWF0dHIgPSAoc3RydWN0IGZkbWlfYXR0cl9zICopIGN1cnJfcHRyOwogCQlhdHRyLT50eXBlID0gY3B1X3RvX2JlMTYoRkRNSV9IQkFfQVRUUklCX1JPTV9WRVJTSU9OKTsKLQkJYXR0ci0+bGVuID0gKHUxNikgc3RybGVuKGZjc19oYmFfYXR0ci0+b3B0aW9uX3JvbV92ZXIpOwotCQltZW1jcHkoYXR0ci0+dmFsdWUsIGZjc19oYmFfYXR0ci0+b3B0aW9uX3JvbV92ZXIsIGF0dHItPmxlbik7Ci0JCWF0dHItPmxlbiA9IGZjX3JvdW5kdXAoYXR0ci0+bGVuLCBzaXplb2YodTMyKSk7Ci0JCWN1cnJfcHRyICs9IHNpemVvZihhdHRyLT50eXBlKSArIHNpemVvZihhdHRyLT5sZW4pICsgYXR0ci0+bGVuOwotCQlsZW4gKz0gYXR0ci0+bGVuOworCQl0ZW1wbGVuID0gKHUxNikgc3RybGVuKGZjc19oYmFfYXR0ci0+b3B0aW9uX3JvbV92ZXIpOworCQltZW1jcHkoYXR0ci0+dmFsdWUsIGZjc19oYmFfYXR0ci0+b3B0aW9uX3JvbV92ZXIsIHRlbXBsZW4pOworCQl0ZW1wbGVuID0gZmNfcm91bmR1cCh0ZW1wbGVuLCBzaXplb2YodTMyKSk7CisJCWN1cnJfcHRyICs9IHNpemVvZihhdHRyLT50eXBlKSArIHNpemVvZih0ZW1wbGVuKSArIHRlbXBsZW47CisJCWxlbiArPSB0ZW1wbGVuOwogCQljb3VudCsrOwotCQlhdHRyLT5sZW4gPSBjcHVfdG9fYmUxNihhdHRyLT5sZW4gKyBzaXplb2YoYXR0ci0+dHlwZSkgKwotCQkJCQkgc2l6ZW9mKGF0dHItPmxlbikpOworCQlhdHRyLT5sZW4gPSBjcHVfdG9fYmUxNih0ZW1wbGVuICsgc2l6ZW9mKGF0dHItPnR5cGUpICsKKwkJCQkJIHNpemVvZih0ZW1wbGVuKSk7CiAJfQogCiAJLyoKQEAgLTE3MDksMTQgKzE2OTgsMTQgQEAKIAkgKi8KIAlhdHRyID0gKHN0cnVjdCBmZG1pX2F0dHJfcyAqKSBjdXJyX3B0cjsKIAlhdHRyLT50eXBlID0gY3B1X3RvX2JlMTYoRkRNSV9IQkFfQVRUUklCX0ZXX1ZFUlNJT04pOwotCWF0dHItPmxlbiA9ICh1MTYpIHN0cmxlbihmY3NfaGJhX2F0dHItPmRyaXZlcl92ZXJzaW9uKTsKLQltZW1jcHkoYXR0ci0+dmFsdWUsIGZjc19oYmFfYXR0ci0+ZHJpdmVyX3ZlcnNpb24sIGF0dHItPmxlbik7Ci0JYXR0ci0+bGVuID0gZmNfcm91bmR1cChhdHRyLT5sZW4sIHNpemVvZih1MzIpKTsKLQljdXJyX3B0ciArPSBzaXplb2YoYXR0ci0+dHlwZSkgKyBzaXplb2YoYXR0ci0+bGVuKSArIGF0dHItPmxlbjsKLQlsZW4gKz0gYXR0ci0+bGVuOworCXRlbXBsZW4gPSAodTE2KSBzdHJsZW4oZmNzX2hiYV9hdHRyLT5kcml2ZXJfdmVyc2lvbik7CisJbWVtY3B5KGF0dHItPnZhbHVlLCBmY3NfaGJhX2F0dHItPmRyaXZlcl92ZXJzaW9uLCB0ZW1wbGVuKTsKKwl0ZW1wbGVuID0gZmNfcm91bmR1cCh0ZW1wbGVuLCBzaXplb2YodTMyKSk7CisJY3Vycl9wdHIgKz0gc2l6ZW9mKGF0dHItPnR5cGUpICsgc2l6ZW9mKHRlbXBsZW4pICsgdGVtcGxlbjsKKwlsZW4gKz0gdGVtcGxlbjsKIAljb3VudCsrOwotCWF0dHItPmxlbiA9IGNwdV90b19iZTE2KGF0dHItPmxlbiArIHNpemVvZihhdHRyLT50eXBlKSArCi0JCQkgICAgIHNpemVvZihhdHRyLT5sZW4pKTsKKwlhdHRyLT5sZW4gPSBjcHVfdG9fYmUxNih0ZW1wbGVuICsgc2l6ZW9mKGF0dHItPnR5cGUpICsKKwkJCSAgICAgc2l6ZW9mKHRlbXBsZW4pKTsKIAogCS8qCiAJICogT1MgTmFtZQpAQCAtMTcyNCwxNCArMTcxMywxNCBAQAogCWlmIChmY3NfaGJhX2F0dHItPm9zX25hbWVbMF0gIT0gJ1wwJykgewogCQlhdHRyID0gKHN0cnVjdCBmZG1pX2F0dHJfcyAqKSBjdXJyX3B0cjsKIAkJYXR0ci0+dHlwZSA9IGNwdV90b19iZTE2KEZETUlfSEJBX0FUVFJJQl9PU19OQU1FKTsKLQkJYXR0ci0+bGVuID0gKHUxNikgc3RybGVuKGZjc19oYmFfYXR0ci0+b3NfbmFtZSk7Ci0JCW1lbWNweShhdHRyLT52YWx1ZSwgZmNzX2hiYV9hdHRyLT5vc19uYW1lLCBhdHRyLT5sZW4pOwotCQlhdHRyLT5sZW4gPSBmY19yb3VuZHVwKGF0dHItPmxlbiwgc2l6ZW9mKHUzMikpOwotCQljdXJyX3B0ciArPSBzaXplb2YoYXR0ci0+dHlwZSkgKyBzaXplb2YoYXR0ci0+bGVuKSArIGF0dHItPmxlbjsKLQkJbGVuICs9IGF0dHItPmxlbjsKKwkJdGVtcGxlbiA9ICh1MTYpIHN0cmxlbihmY3NfaGJhX2F0dHItPm9zX25hbWUpOworCQltZW1jcHkoYXR0ci0+dmFsdWUsIGZjc19oYmFfYXR0ci0+b3NfbmFtZSwgdGVtcGxlbik7CisJCXRlbXBsZW4gPSBmY19yb3VuZHVwKHRlbXBsZW4sIHNpemVvZih1MzIpKTsKKwkJY3Vycl9wdHIgKz0gc2l6ZW9mKGF0dHItPnR5cGUpICsgc2l6ZW9mKHRlbXBsZW4pICsgdGVtcGxlbjsKKwkJbGVuICs9IHRlbXBsZW47CiAJCWNvdW50Kys7Ci0JCWF0dHItPmxlbiA9IGNwdV90b19iZTE2KGF0dHItPmxlbiArIHNpemVvZihhdHRyLT50eXBlKSArCi0JCQkJCXNpemVvZihhdHRyLT5sZW4pKTsKKwkJYXR0ci0+bGVuID0gY3B1X3RvX2JlMTYodGVtcGxlbiArIHNpemVvZihhdHRyLT50eXBlKSArCisJCQkJCXNpemVvZih0ZW1wbGVuKSk7CiAJfQogCiAJLyoKQEAgLTE3MzksMTIgKzE3MjgsMTIgQEAKIAkgKi8KIAlhdHRyID0gKHN0cnVjdCBmZG1pX2F0dHJfcyAqKSBjdXJyX3B0cjsKIAlhdHRyLT50eXBlID0gY3B1X3RvX2JlMTYoRkRNSV9IQkFfQVRUUklCX01BWF9DVCk7Ci0JYXR0ci0+bGVuID0gc2l6ZW9mKGZjc19oYmFfYXR0ci0+bWF4X2N0X3B5bGQpOwotCW1lbWNweShhdHRyLT52YWx1ZSwgJmZjc19oYmFfYXR0ci0+bWF4X2N0X3B5bGQsIGF0dHItPmxlbik7Ci0JbGVuICs9IGF0dHItPmxlbjsKKwl0ZW1wbGVuID0gc2l6ZW9mKGZjc19oYmFfYXR0ci0+bWF4X2N0X3B5bGQpOworCW1lbWNweShhdHRyLT52YWx1ZSwgJmZjc19oYmFfYXR0ci0+bWF4X2N0X3B5bGQsIHRlbXBsZW4pOworCWxlbiArPSB0ZW1wbGVuOwogCWNvdW50Kys7Ci0JYXR0ci0+bGVuID0gY3B1X3RvX2JlMTYoYXR0ci0+bGVuICsgc2l6ZW9mKGF0dHItPnR5cGUpICsKLQkJCSAgICAgc2l6ZW9mKGF0dHItPmxlbikpOworCWF0dHItPmxlbiA9IGNwdV90b19iZTE2KHRlbXBsZW4gKyBzaXplb2YoYXR0ci0+dHlwZSkgKworCQkJICAgICBzaXplb2YodGVtcGxlbikpOwogCiAJLyoKIAkgKiBVcGRhdGUgc2l6ZSBvZiBwYXlsb2FkCkBAIC0xODQ1LDYgKzE4MzQsNyBAQAogCXU4ICAgICAgICAqY3Vycl9wdHI7CiAJdTE2ICAgICAgICBsZW47CiAJdTgJY291bnQgPSAwOworCXUxNgl0ZW1wbGVuOwogCiAJLyoKIAkgKiBnZXQgcG9ydCBhdHRyaWJ1dGVzCkBAIC0xODYzLDU0ICsxODUzLDU0IEBACiAJICovCiAJYXR0ciA9IChzdHJ1Y3QgZmRtaV9hdHRyX3MgKikgY3Vycl9wdHI7CiAJYXR0ci0+dHlwZSA9IGNwdV90b19iZTE2KEZETUlfUE9SVF9BVFRSSUJfRkM0X1RZUEVTKTsKLQlhdHRyLT5sZW4gPSBzaXplb2YoZmNzX3BvcnRfYXR0ci5zdXBwX2ZjNF90eXBlcyk7Ci0JbWVtY3B5KGF0dHItPnZhbHVlLCBmY3NfcG9ydF9hdHRyLnN1cHBfZmM0X3R5cGVzLCBhdHRyLT5sZW4pOwotCWN1cnJfcHRyICs9IHNpemVvZihhdHRyLT50eXBlKSArIHNpemVvZihhdHRyLT5sZW4pICsgYXR0ci0+bGVuOwotCWxlbiArPSBhdHRyLT5sZW47CisJdGVtcGxlbiA9IHNpemVvZihmY3NfcG9ydF9hdHRyLnN1cHBfZmM0X3R5cGVzKTsKKwltZW1jcHkoYXR0ci0+dmFsdWUsIGZjc19wb3J0X2F0dHIuc3VwcF9mYzRfdHlwZXMsIHRlbXBsZW4pOworCWN1cnJfcHRyICs9IHNpemVvZihhdHRyLT50eXBlKSArIHNpemVvZih0ZW1wbGVuKSArIHRlbXBsZW47CisJbGVuICs9IHRlbXBsZW47CiAJKytjb3VudDsKIAlhdHRyLT5sZW4gPQotCQljcHVfdG9fYmUxNihhdHRyLT5sZW4gKyBzaXplb2YoYXR0ci0+dHlwZSkgKwotCQkJICAgICBzaXplb2YoYXR0ci0+bGVuKSk7CisJCWNwdV90b19iZTE2KHRlbXBsZW4gKyBzaXplb2YoYXR0ci0+dHlwZSkgKworCQkJICAgICBzaXplb2YodGVtcGxlbikpOwogCiAJLyoKIAkgKiBTdXBwb3J0ZWQgU3BlZWQKIAkgKi8KIAlhdHRyID0gKHN0cnVjdCBmZG1pX2F0dHJfcyAqKSBjdXJyX3B0cjsKIAlhdHRyLT50eXBlID0gY3B1X3RvX2JlMTYoRkRNSV9QT1JUX0FUVFJJQl9TVVBQX1NQRUVEKTsKLQlhdHRyLT5sZW4gPSBzaXplb2YoZmNzX3BvcnRfYXR0ci5zdXBwX3NwZWVkKTsKLQltZW1jcHkoYXR0ci0+dmFsdWUsICZmY3NfcG9ydF9hdHRyLnN1cHBfc3BlZWQsIGF0dHItPmxlbik7Ci0JY3Vycl9wdHIgKz0gc2l6ZW9mKGF0dHItPnR5cGUpICsgc2l6ZW9mKGF0dHItPmxlbikgKyBhdHRyLT5sZW47Ci0JbGVuICs9IGF0dHItPmxlbjsKKwl0ZW1wbGVuID0gc2l6ZW9mKGZjc19wb3J0X2F0dHIuc3VwcF9zcGVlZCk7CisJbWVtY3B5KGF0dHItPnZhbHVlLCAmZmNzX3BvcnRfYXR0ci5zdXBwX3NwZWVkLCB0ZW1wbGVuKTsKKwljdXJyX3B0ciArPSBzaXplb2YoYXR0ci0+dHlwZSkgKyBzaXplb2YodGVtcGxlbikgKyB0ZW1wbGVuOworCWxlbiArPSB0ZW1wbGVuOwogCSsrY291bnQ7CiAJYXR0ci0+bGVuID0KLQkJY3B1X3RvX2JlMTYoYXR0ci0+bGVuICsgc2l6ZW9mKGF0dHItPnR5cGUpICsKLQkJCSAgICAgc2l6ZW9mKGF0dHItPmxlbikpOworCQljcHVfdG9fYmUxNih0ZW1wbGVuICsgc2l6ZW9mKGF0dHItPnR5cGUpICsKKwkJCSAgICAgc2l6ZW9mKHRlbXBsZW4pKTsKIAogCS8qCiAJICogY3VycmVudCBQb3J0IFNwZWVkCiAJICovCiAJYXR0ciA9IChzdHJ1Y3QgZmRtaV9hdHRyX3MgKikgY3Vycl9wdHI7CiAJYXR0ci0+dHlwZSA9IGNwdV90b19iZTE2KEZETUlfUE9SVF9BVFRSSUJfUE9SVF9TUEVFRCk7Ci0JYXR0ci0+bGVuID0gc2l6ZW9mKGZjc19wb3J0X2F0dHIuY3Vycl9zcGVlZCk7Ci0JbWVtY3B5KGF0dHItPnZhbHVlLCAmZmNzX3BvcnRfYXR0ci5jdXJyX3NwZWVkLCBhdHRyLT5sZW4pOwotCWN1cnJfcHRyICs9IHNpemVvZihhdHRyLT50eXBlKSArIHNpemVvZihhdHRyLT5sZW4pICsgYXR0ci0+bGVuOwotCWxlbiArPSBhdHRyLT5sZW47CisJdGVtcGxlbiA9IHNpemVvZihmY3NfcG9ydF9hdHRyLmN1cnJfc3BlZWQpOworCW1lbWNweShhdHRyLT52YWx1ZSwgJmZjc19wb3J0X2F0dHIuY3Vycl9zcGVlZCwgdGVtcGxlbik7CisJY3Vycl9wdHIgKz0gc2l6ZW9mKGF0dHItPnR5cGUpICsgc2l6ZW9mKHRlbXBsZW4pICsgdGVtcGxlbjsKKwlsZW4gKz0gdGVtcGxlbjsKIAkrK2NvdW50OwotCWF0dHItPmxlbiA9IGNwdV90b19iZTE2KGF0dHItPmxlbiArIHNpemVvZihhdHRyLT50eXBlKSArCi0JCQkgICAgIHNpemVvZihhdHRyLT5sZW4pKTsKKwlhdHRyLT5sZW4gPSBjcHVfdG9fYmUxNih0ZW1wbGVuICsgc2l6ZW9mKGF0dHItPnR5cGUpICsKKwkJCSAgICAgc2l6ZW9mKHRlbXBsZW4pKTsKIAogCS8qCiAJICogbWF4IGZyYW1lIHNpemUKIAkgKi8KIAlhdHRyID0gKHN0cnVjdCBmZG1pX2F0dHJfcyAqKSBjdXJyX3B0cjsKIAlhdHRyLT50eXBlID0gY3B1X3RvX2JlMTYoRkRNSV9QT1JUX0FUVFJJQl9GUkFNRV9TSVpFKTsKLQlhdHRyLT5sZW4gPSBzaXplb2YoZmNzX3BvcnRfYXR0ci5tYXhfZnJtX3NpemUpOwotCW1lbWNweShhdHRyLT52YWx1ZSwgJmZjc19wb3J0X2F0dHIubWF4X2ZybV9zaXplLCBhdHRyLT5sZW4pOwotCWN1cnJfcHRyICs9IHNpemVvZihhdHRyLT50eXBlKSArIHNpemVvZihhdHRyLT5sZW4pICsgYXR0ci0+bGVuOwotCWxlbiArPSBhdHRyLT5sZW47CisJdGVtcGxlbiA9IHNpemVvZihmY3NfcG9ydF9hdHRyLm1heF9mcm1fc2l6ZSk7CisJbWVtY3B5KGF0dHItPnZhbHVlLCAmZmNzX3BvcnRfYXR0ci5tYXhfZnJtX3NpemUsIHRlbXBsZW4pOworCWN1cnJfcHRyICs9IHNpemVvZihhdHRyLT50eXBlKSArIHNpemVvZih0ZW1wbGVuKSArIHRlbXBsZW47CisJbGVuICs9IHRlbXBsZW47CiAJKytjb3VudDsKLQlhdHRyLT5sZW4gPSBjcHVfdG9fYmUxNihhdHRyLT5sZW4gKyBzaXplb2YoYXR0ci0+dHlwZSkgKwotCQkJICAgICBzaXplb2YoYXR0ci0+bGVuKSk7CisJYXR0ci0+bGVuID0gY3B1X3RvX2JlMTYodGVtcGxlbiArIHNpemVvZihhdHRyLT50eXBlKSArCisJCQkgICAgIHNpemVvZih0ZW1wbGVuKSk7CiAKIAkvKgogCSAqIE9TIERldmljZSBOYW1lCkBAIC0xOTE4LDE0ICsxOTA4LDE0IEBACiAJaWYgKGZjc19wb3J0X2F0dHIub3NfZGV2aWNlX25hbWVbMF0gIT0gJ1wwJykgewogCQlhdHRyID0gKHN0cnVjdCBmZG1pX2F0dHJfcyAqKSBjdXJyX3B0cjsKIAkJYXR0ci0+dHlwZSA9IGNwdV90b19iZTE2KEZETUlfUE9SVF9BVFRSSUJfREVWX05BTUUpOwotCQlhdHRyLT5sZW4gPSAodTE2KSBzdHJsZW4oZmNzX3BvcnRfYXR0ci5vc19kZXZpY2VfbmFtZSk7Ci0JCW1lbWNweShhdHRyLT52YWx1ZSwgZmNzX3BvcnRfYXR0ci5vc19kZXZpY2VfbmFtZSwgYXR0ci0+bGVuKTsKLQkJYXR0ci0+bGVuID0gZmNfcm91bmR1cChhdHRyLT5sZW4sIHNpemVvZih1MzIpKTsKLQkJY3Vycl9wdHIgKz0gc2l6ZW9mKGF0dHItPnR5cGUpICsgc2l6ZW9mKGF0dHItPmxlbikgKyBhdHRyLT5sZW47Ci0JCWxlbiArPSBhdHRyLT5sZW47CisJCXRlbXBsZW4gPSAodTE2KSBzdHJsZW4oZmNzX3BvcnRfYXR0ci5vc19kZXZpY2VfbmFtZSk7CisJCW1lbWNweShhdHRyLT52YWx1ZSwgZmNzX3BvcnRfYXR0ci5vc19kZXZpY2VfbmFtZSwgdGVtcGxlbik7CisJCXRlbXBsZW4gPSBmY19yb3VuZHVwKHRlbXBsZW4sIHNpemVvZih1MzIpKTsKKwkJY3Vycl9wdHIgKz0gc2l6ZW9mKGF0dHItPnR5cGUpICsgc2l6ZW9mKHRlbXBsZW4pICsgdGVtcGxlbjsKKwkJbGVuICs9IHRlbXBsZW47CiAJCSsrY291bnQ7Ci0JCWF0dHItPmxlbiA9IGNwdV90b19iZTE2KGF0dHItPmxlbiArIHNpemVvZihhdHRyLT50eXBlKSArCi0JCQkJCXNpemVvZihhdHRyLT5sZW4pKTsKKwkJYXR0ci0+bGVuID0gY3B1X3RvX2JlMTYodGVtcGxlbiArIHNpemVvZihhdHRyLT50eXBlKSArCisJCQkJCXNpemVvZih0ZW1wbGVuKSk7CiAJfQogCS8qCiAJICogSG9zdCBOYW1lCkBAIC0xOTMzLDE0ICsxOTIzLDE0IEBACiAJaWYgKGZjc19wb3J0X2F0dHIuaG9zdF9uYW1lWzBdICE9ICdcMCcpIHsKIAkJYXR0ciA9IChzdHJ1Y3QgZmRtaV9hdHRyX3MgKikgY3Vycl9wdHI7CiAJCWF0dHItPnR5cGUgPSBjcHVfdG9fYmUxNihGRE1JX1BPUlRfQVRUUklCX0hPU1RfTkFNRSk7Ci0JCWF0dHItPmxlbiA9ICh1MTYpIHN0cmxlbihmY3NfcG9ydF9hdHRyLmhvc3RfbmFtZSk7Ci0JCW1lbWNweShhdHRyLT52YWx1ZSwgZmNzX3BvcnRfYXR0ci5ob3N0X25hbWUsIGF0dHItPmxlbik7Ci0JCWF0dHItPmxlbiA9IGZjX3JvdW5kdXAoYXR0ci0+bGVuLCBzaXplb2YodTMyKSk7Ci0JCWN1cnJfcHRyICs9IHNpemVvZihhdHRyLT50eXBlKSArIHNpemVvZihhdHRyLT5sZW4pICsgYXR0ci0+bGVuOwotCQlsZW4gKz0gYXR0ci0+bGVuOworCQl0ZW1wbGVuID0gKHUxNikgc3RybGVuKGZjc19wb3J0X2F0dHIuaG9zdF9uYW1lKTsKKwkJbWVtY3B5KGF0dHItPnZhbHVlLCBmY3NfcG9ydF9hdHRyLmhvc3RfbmFtZSwgdGVtcGxlbik7CisJCXRlbXBsZW4gPSBmY19yb3VuZHVwKHRlbXBsZW4sIHNpemVvZih1MzIpKTsKKwkJY3Vycl9wdHIgKz0gc2l6ZW9mKGF0dHItPnR5cGUpICsgc2l6ZW9mKHRlbXBsZW4pICsgdGVtcGxlbjsKKwkJbGVuICs9IHRlbXBsZW47CiAJCSsrY291bnQ7Ci0JCWF0dHItPmxlbiA9IGNwdV90b19iZTE2KGF0dHItPmxlbiArIHNpemVvZihhdHRyLT50eXBlKSArCi0JCQkJc2l6ZW9mKGF0dHItPmxlbikpOworCQlhdHRyLT5sZW4gPSBjcHVfdG9fYmUxNih0ZW1wbGVuICsgc2l6ZW9mKGF0dHItPnR5cGUpICsKKwkJCQlzaXplb2YodGVtcGxlbikpOwogCX0KIAogCS8qCkBAIC0yMTAzLDcgKzIwOTMsNyBAQAogCWJmYV9zbV9zZW5kX2V2ZW50KGZkbWksIEZETUlTTV9FVkVOVF9USU1FT1VUKTsKIH0KIAotdm9pZAorc3RhdGljIHZvaWQKIGJmYV9mY3NfZmRtaV9nZXRfaGJhYXR0cihzdHJ1Y3QgYmZhX2Zjc19scG9ydF9mZG1pX3MgKmZkbWksCiAJCQkgc3RydWN0IGJmYV9mY3NfZmRtaV9oYmFfYXR0cl9zICpoYmFfYXR0cikKIHsKQEAgLTIxNDcsNyArMjEzNyw3IEBACiAJaGJhX2F0dHItPm1heF9jdF9weWxkID0gY3B1X3RvX2JlMzIoRkNfTUFYX1BEVVNaKTsKIH0KIAotdm9pZAorc3RhdGljIHZvaWQKIGJmYV9mY3NfZmRtaV9nZXRfcG9ydGF0dHIoc3RydWN0IGJmYV9mY3NfbHBvcnRfZmRtaV9zICpmZG1pLAogCQkJICBzdHJ1Y3QgYmZhX2Zjc19mZG1pX3BvcnRfYXR0cl9zICpwb3J0X2F0dHIpCiB7CkBAIC0yNTYwLDcgKzI1NTAsNyBAQAogCiAJbGVuID0gZmNfZ21hbF9yZXFfYnVpbGQoJmZjaHMsIGJmYV9mY3hwX2dldF9yZXFidWYoZmN4cCksCiAJCQkgICAgIGJmYV9mY3NfbHBvcnRfZ2V0X2ZjaWQocG9ydCksCi0JCQkJIGJmYV9scHNfZ2V0X3BlZXJfbnd3bihwb3J0LT5mYWJyaWMtPmxwcykpOworCQkJCSBwb3J0LT5mYWJyaWMtPmxwcy0+cHJfbnd3bik7CiAKIAliZmFfZmN4cF9zZW5kKGZjeHAsIE5VTEwsIHBvcnQtPmZhYnJpYy0+dmZfaWQsIHBvcnQtPmxwX3RhZywgQkZBX0ZBTFNFLAogCQkJICBGQ19DTEFTU18zLCBsZW4sICZmY2hzLApAQCAtMjc2MCw3ICsyNzUwLDcgQEAKIAogCWxlbiA9IGZjX2dmbl9yZXFfYnVpbGQoJmZjaHMsIGJmYV9mY3hwX2dldF9yZXFidWYoZmN4cCksCiAJCQkgICAgIGJmYV9mY3NfbHBvcnRfZ2V0X2ZjaWQocG9ydCksCi0JCQkJIGJmYV9scHNfZ2V0X3BlZXJfbnd3bihwb3J0LT5mYWJyaWMtPmxwcykpOworCQkJCSBwb3J0LT5mYWJyaWMtPmxwcy0+cHJfbnd3bik7CiAKIAliZmFfZmN4cF9zZW5kKGZjeHAsIE5VTEwsIHBvcnQtPmZhYnJpYy0+dmZfaWQsIHBvcnQtPmxwX3RhZywgQkZBX0ZBTFNFLAogCQkJICBGQ19DTEFTU18zLCBsZW4sICZmY2hzLApAQCAtMjgzNiw3ICsyODI2LDcgQEAKIAltcy0+ZmN4cCA9IGZjeHA7CiAKIAlsZW4gPSBmY19wbG9naV9idWlsZCgmZmNocywgYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihmY3hwKSwKLQkJCSAgICAgYmZhX29zX2h0b24zYihGQ19NR01UX1NFUlZFUiksCisJCQkgICAgIGJmYV9odG9uM2IoRkNfTUdNVF9TRVJWRVIpLAogCQkJICAgICBiZmFfZmNzX2xwb3J0X2dldF9mY2lkKHBvcnQpLCAwLAogCQkJICAgICBwb3J0LT5wb3J0X2NmZy5wd3duLCBwb3J0LT5wb3J0X2NmZy5ud3duLAogCQkJCSBiZmFfZmNwb3J0X2dldF9tYXhmcnNpemUocG9ydC0+ZmNzLT5iZmEpKTsKQEAgLTM1OTMsNyArMzU4Myw3IEBACiAJbnMtPmZjeHAgPSBmY3hwOwogCiAJbGVuID0gZmNfcGxvZ2lfYnVpbGQoJmZjaHMsIGJmYV9mY3hwX2dldF9yZXFidWYoZmN4cCksCi0JCQkgICAgIGJmYV9vc19odG9uM2IoRkNfTkFNRV9TRVJWRVIpLAorCQkJICAgICBiZmFfaHRvbjNiKEZDX05BTUVfU0VSVkVSKSwKIAkJCSAgICAgYmZhX2Zjc19scG9ydF9nZXRfZmNpZChwb3J0KSwgMCwKIAkJCSAgICAgcG9ydC0+cG9ydF9jZmcucHd3biwgcG9ydC0+cG9ydF9jZmcubnd3biwKIAkJCQkgYmZhX2ZjcG9ydF9nZXRfbWF4ZnJzaXplKHBvcnQtPmZjcy0+YmZhKSk7CkBAIC00MTUwLDcgKzQxNDAsNyBAQAogCWJmYV9zbV9zZW5kX2V2ZW50KG5zLCBOU1NNX0VWRU5UX05TX1FVRVJZKTsKIH0KIAotdm9pZAorc3RhdGljIHZvaWQKIGJmYV9mY3NfbHBvcnRfbnNfYm9vdF90YXJnZXRfZGlzYyhiZmFfZmNzX2xwb3J0X3QgKnBvcnQpCiB7CiAKQEAgLTQxNjMsNyArNDE1Myw3IEBACiAKIAlmb3IgKGlpID0gMCA7IGlpIDwgbnd3bnM7ICsraWkpIHsKIAkJcnBvcnQgPSBiZmFfZmNzX3Jwb3J0X2NyZWF0ZV9ieV93d24ocG9ydCwgd3duc1tpaV0pOwotCQliZmFfYXNzZXJ0KHJwb3J0KTsKKwkJV0FSTl9PTighcnBvcnQpOwogCX0KIH0KIApAQCAtNDM1Miw4ICs0MzQyLDggQEAKIAkvKiBIYW5kbGUgVlUgcmVnaXN0cmF0aW9ucyBmb3IgQmFzZSBwb3J0IG9ubHkgKi8KIAlpZiAoKCFwb3J0LT52cG9ydCkgJiYgYmZhX2lvY19nZXRfZmNtb2RlKCZwb3J0LT5mY3MtPmJmYS0+aW9jKSkgewogCQlsZW4gPSBmY19zY3JfYnVpbGQoJmZjaHMsIGJmYV9mY3hwX2dldF9yZXFidWYoZmN4cCksCi0JCQkJYmZhX2xwc19pc19icmNkX2ZhYnJpYyhwb3J0LT5mYWJyaWMtPmxwcyksCi0JCQkJCQkJcG9ydC0+cGlkLCAwKTsKKwkJCQlwb3J0LT5mYWJyaWMtPmxwcy0+YnJjZF9zd2l0Y2gsCisJCQkJcG9ydC0+cGlkLCAwKTsKIAl9IGVsc2UgewogCSAgICBsZW4gPSBmY19zY3JfYnVpbGQoJmZjaHMsIGJmYV9mY3hwX2dldF9yZXFidWYoZmN4cCksCiAJCQkJICAgIEJGQV9GQUxTRSwKQEAgLTQ2MjYsNyArNDYxNiw3IEBACiAKIAogCQlkZWZhdWx0OgotCQkJYmZhX2Fzc2VydCgwKTsKKwkJCVdBUk5fT04oMSk7CiAJCQluc3F1ZXJ5ID0gQkZBX1RSVUU7CiAJCX0KIAl9CkBAIC00NjcyLDcgKzQ2NjIsNyBAQAogCiAJd2hpbGUgKChxZSAhPSBxaCkgJiYgKGkgPCBucnBvcnRzKSkgewogCQlycG9ydCA9IChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICopIHFlOwotCQlpZiAoYmZhX29zX250b2gzYihycG9ydC0+cGlkKSA+IDB4RkZGMDAwKSB7CisJCWlmIChiZmFfbnRvaDNiKHJwb3J0LT5waWQpID4gMHhGRkYwMDApIHsKIAkJCXFlID0gYmZhX3FfbmV4dChxZSk7CiAJCQliZmFfdHJjKGZjcywgKHUzMikgcnBvcnQtPnB3d24pOwogCQkJYmZhX3RyYyhmY3MsIHJwb3J0LT5waWQpOwpAQCAtNDcyMCw3ICs0NzEwLDcgQEAKIAogCXdoaWxlICgocWUgIT0gcWgpICYmIChpIDwgKm5ycG9ydHMpKSB7CiAJCXJwb3J0ID0gKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKikgcWU7Ci0JCWlmIChiZmFfb3NfbnRvaDNiKHJwb3J0LT5waWQpID4gMHhGRkYwMDApIHsKKwkJaWYgKGJmYV9udG9oM2IocnBvcnQtPnBpZCkgPiAweEZGRjAwMCkgewogCQkJcWUgPSBiZmFfcV9uZXh0KHFlKTsKIAkJCWJmYV90cmMoZmNzLCAodTMyKSBycG9ydC0+cHd3bik7CiAJCQliZmFfdHJjKGZjcywgcnBvcnQtPnBpZCk7CkBAIC00NzcxLDcgKzQ3NjEsNyBAQAogCiAJd2hpbGUgKHFlICE9IHFoKSB7CiAJCXJwb3J0ID0gKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKikgcWU7Ci0JCWlmICgoYmZhX29zX250b2gzYihycG9ydC0+cGlkKSA+IDB4RkZGMDAwKSB8fAorCQlpZiAoKGJmYV9udG9oM2IocnBvcnQtPnBpZCkgPiAweEZGRjAwMCkgfHwKIAkJCShiZmFfZmNzX3Jwb3J0X2dldF9zdGF0ZShycG9ydCkgPT0KIAkJCSAgQkZBX1JQT1JUX09GRkxJTkUpKSB7CiAJCQlxZSA9IGJmYV9xX25leHQocWUpOwpAQCAtNDgwNyw3ICs0Nzk3LDcgQEAKIAlzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydDsKIAliZmFfZmNzX3ZmX3QgICAqdmY7CiAKLQliZmFfYXNzZXJ0KGZjcyAhPSBOVUxMKTsKKwlXQVJOX09OKGZjcyA9PSBOVUxMKTsKIAogCXZmID0gYmZhX2Zjc192Zl9sb29rdXAoZmNzLCB2Zl9pZCk7CiAJaWYgKHZmID09IE5VTEwpIHsKQEAgLTQ4NTMsNyArNDg0Myw3IEBACiAJCXBvcnRfaW5mby0+bWF4X3Zwb3J0c19zdXBwID0KIAkJCWJmYV9scHNfZ2V0X21heF92cG9ydChwb3J0LT5mY3MtPmJmYSk7CiAJCXBvcnRfaW5mby0+bnVtX3Zwb3J0c19pbnVzZSA9Ci0JCQliZmFfZmNzX2ZhYnJpY192cG9ydF9jb3VudChwb3J0LT5mYWJyaWMpOworCQkJcG9ydC0+ZmFicmljLT5udW1fdnBvcnRzOwogCQlwb3J0X2luZm8tPm1heF9ycG9ydHNfc3VwcCA9IEJGQV9GQ1NfTUFYX1JQT1JUU19TVVBQOwogCQlwb3J0X2luZm8tPm51bV9ycG9ydHNfaW51c2UgPSBwb3J0LT5udW1fcnBvcnRzOwogCX0gZWxzZSB7CkBAIC00OTk3LDcgKzQ5ODcsOCBAQAogCiAJc3dpdGNoIChldmVudCkgewogCWNhc2UgQkZBX0ZDU19WUE9SVF9TTV9TVEFSVDoKLQkJaWYgKGJmYV9mY3NfZmFicmljX2lzX29ubGluZShfX3Zwb3J0X2ZhYnJpYyh2cG9ydCkpCisJCWlmIChiZmFfc21fY21wX3N0YXRlKF9fdnBvcnRfZmFicmljKHZwb3J0KSwKKwkJCQkJYmZhX2Zjc19mYWJyaWNfc21fb25saW5lKQogCQkgICAgJiYgYmZhX2Zjc19mYWJyaWNfbnBpdl9jYXBhYmxlKF9fdnBvcnRfZmFicmljKHZwb3J0KSkpIHsKIAkJCWJmYV9zbV9zZXRfc3RhdGUodnBvcnQsIGJmYV9mY3NfdnBvcnRfc21fZmRpc2MpOwogCQkJYmZhX2Zjc192cG9ydF9kb19mZGlzYyh2cG9ydCk7CkBAIC01MDgwLDEzICs1MDcxLDEzIEBACiAJc3dpdGNoIChldmVudCkgewogCWNhc2UgQkZBX0ZDU19WUE9SVF9TTV9ERUxFVEU6CiAJCWJmYV9zbV9zZXRfc3RhdGUodnBvcnQsIGJmYV9mY3NfdnBvcnRfc21fY2xlYW51cCk7Ci0JCWJmYV9scHNfZGlzY2FyZCh2cG9ydC0+bHBzKTsKKwkJYmZhX3NtX3NlbmRfZXZlbnQodnBvcnQtPmxwcywgQkZBX0xQU19TTV9PRkZMSU5FKTsKIAkJYmZhX2Zjc19scG9ydF9kZWxldGUoJnZwb3J0LT5scG9ydCk7CiAJCWJyZWFrOwogCiAJY2FzZSBCRkFfRkNTX1ZQT1JUX1NNX09GRkxJTkU6CiAJCWJmYV9zbV9zZXRfc3RhdGUodnBvcnQsIGJmYV9mY3NfdnBvcnRfc21fb2ZmbGluZSk7Ci0JCWJmYV9scHNfZGlzY2FyZCh2cG9ydC0+bHBzKTsKKwkJYmZhX3NtX3NlbmRfZXZlbnQodnBvcnQtPmxwcywgQkZBX0xQU19TTV9PRkZMSU5FKTsKIAkJYnJlYWs7CiAKIAljYXNlIEJGQV9GQ1NfVlBPUlRfU01fUlNQX09LOgpAQCAtNTE2Niw3ICs1MTU3LDcgQEAKIAogCWNhc2UgQkZBX0ZDU19WUE9SVF9TTV9PRkZMSU5FOgogCQliZmFfc21fc2V0X3N0YXRlKHZwb3J0LCBiZmFfZmNzX3Zwb3J0X3NtX29mZmxpbmUpOwotCQliZmFfbHBzX2Rpc2NhcmQodnBvcnQtPmxwcyk7CisJCWJmYV9zbV9zZW5kX2V2ZW50KHZwb3J0LT5scHMsIEJGQV9MUFNfU01fT0ZGTElORSk7CiAJCWJmYV9mY3NfbHBvcnRfb2ZmbGluZSgmdnBvcnQtPmxwb3J0KTsKIAkJYnJlYWs7CiAKQEAgLTUyNjYsNyArNTI1Nyw3IEBACiAKIAlzd2l0Y2ggKGV2ZW50KSB7CiAJY2FzZSBCRkFfRkNTX1ZQT1JUX1NNX09GRkxJTkU6Ci0JCWJmYV9scHNfZGlzY2FyZCh2cG9ydC0+bHBzKTsKKwkJYmZhX3NtX3NlbmRfZXZlbnQodnBvcnQtPmxwcywgQkZBX0xQU19TTV9PRkZMSU5FKTsKIAkJLyoKIAkJICogISEhIGZhbGwgdGhyb3VnaCAhISEKIAkJICovCkBAIC01MzA1LDE0ICs1Mjk2LDE0IEBACiBzdGF0aWMgdm9pZAogYmZhX2Zjc192cG9ydF9mZGlzY19yZWplY3RlZChzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCkKIHsKLQl1OAkJbHNyanRfcnNuID0gYmZhX2xwc19nZXRfbHNyanRfcnNuKHZwb3J0LT5scHMpOwotCXU4CQlsc3JqdF9leHBsID0gYmZhX2xwc19nZXRfbHNyanRfZXhwbCh2cG9ydC0+bHBzKTsKKwl1OAkJbHNyanRfcnNuID0gdnBvcnQtPmxwcy0+bHNyanRfcnNuOworCXU4CQlsc3JqdF9leHBsID0gdnBvcnQtPmxwcy0+bHNyanRfZXhwbDsKIAogCWJmYV90cmMoX192cG9ydF9mY3ModnBvcnQpLCBsc3JqdF9yc24pOwogCWJmYV90cmMoX192cG9ydF9mY3ModnBvcnQpLCBsc3JqdF9leHBsKTsKIAogCS8qIEZvciBjZXJ0YWluIHJlYXNvbiBjb2Rlcywgd2UgZG9uJ3Qgd2FudCB0byByZXRyeS4gKi8KLQlzd2l0Y2ggKGJmYV9scHNfZ2V0X2xzcmp0X2V4cGwodnBvcnQtPmxwcykpIHsKKwlzd2l0Y2ggKHZwb3J0LT5scHMtPmxzcmp0X2V4cGwpIHsKIAljYXNlIEZDX0xTX1JKVF9FWFBfSU5WX1BPUlRfTkFNRTogLyogYnkgYnJvY2FkZSAqLwogCWNhc2UgRkNfTFNfUkpUX0VYUF9JTlZBTElEX05QT1JUX0lEOiAvKiBieSBDaXNjbyAqLwogCQlpZiAodnBvcnQtPmZkaXNjX3JldHJpZXMgPCBCRkFfRkNTX1ZQT1JUX01BWF9SRVRSSUVTKQpAQCAtNTQ3Niw3ICs1NDY3LDcgQEAKIAlpZiAoYmZhX2Zjc192cG9ydF9sb29rdXAoZmNzLCB2Zl9pZCwgdnBvcnRfY2ZnLT5wd3duKSAhPSBOVUxMKQogCQlyZXR1cm4gQkZBX1NUQVRVU19WUE9SVF9FWElTVFM7CiAKLQlpZiAoYmZhX2Zjc19mYWJyaWNfdnBvcnRfY291bnQoJmZjcy0+ZmFicmljKSA9PQorCWlmIChmY3MtPmZhYnJpYy5udW1fdnBvcnRzID09CiAJCQliZmFfbHBzX2dldF9tYXhfdnBvcnQoZmNzLT5iZmEpKQogCQlyZXR1cm4gQkZBX1NUQVRVU19WUE9SVF9NQVg7CiAKQEAgLTU2MTgsMzMgKzU2MDksNiBAQAogCWF0dHItPnZwb3J0X3N0YXRlID0gYmZhX3NtX3RvX3N0YXRlKHZwb3J0X3NtX3RhYmxlLCB2cG9ydC0+c20pOwogfQogCi0vKgotICoJVXNlIHRoaXMgZnVuY3Rpb24gdG8gZ2V0IHZwb3J0J3Mgc3RhdGlzdGljcy4KLSAqCi0gKglwYXJhbVtpbl0JdnBvcnQJcG9pbnRlciB0byBiZmFfZmNzX3Zwb3J0X3QuCi0gKglwYXJhbVtvdXRdCXN0YXRzCXBvaW50ZXIgdG8gcmV0dXJuIHZwb3J0IHN0YXRpc3RpY3MgaW4KLSAqCi0gKglyZXR1cm4gTm9uZQotICovCi12b2lkCi1iZmFfZmNzX3Zwb3J0X2dldF9zdGF0cyhzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCwKLQkJCXN0cnVjdCBiZmFfdnBvcnRfc3RhdHNfcyAqc3RhdHMpCi17Ci0JKnN0YXRzID0gdnBvcnQtPnZwb3J0X3N0YXRzOwotfQotCi0vKgotICoJVXNlIHRoaXMgZnVuY3Rpb24gdG8gY2xlYXIgdnBvcnQncyBzdGF0aXN0aWNzLgotICoKLSAqCXBhcmFtW2luXQl2cG9ydAlwb2ludGVyIHRvIGJmYV9mY3NfdnBvcnRfdC4KLSAqCi0gKglyZXR1cm4gTm9uZQotICovCi12b2lkCi1iZmFfZmNzX3Zwb3J0X2Nscl9zdGF0cyhzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCkKLXsKLQltZW1zZXQoJnZwb3J0LT52cG9ydF9zdGF0cywgMCwgc2l6ZW9mKHN0cnVjdCBiZmFfdnBvcnRfc3RhdHNfcykpOwotfQogCiAvKgogICoJTG9va3VwIGEgdmlydHVhbCBwb3J0LiBFeGNsdWRlcyBiYXNlIHBvcnQgZnJvbSBsb29rdXAuCkBAIC01Njg0LDcgKzU2NDgsNyBAQAogCQkvKgogCQkgKiBJbml0aWFsaWF6ZSB0aGUgVi1Qb3J0IGZpZWxkcwogCQkgKi8KLQkJX192cG9ydF9mY2lkKHZwb3J0KSA9IGJmYV9scHNfZ2V0X3BpZCh2cG9ydC0+bHBzKTsKKwkJX192cG9ydF9mY2lkKHZwb3J0KSA9IHZwb3J0LT5scHMtPmxwX3BpZDsKIAkJdnBvcnQtPnZwb3J0X3N0YXRzLmZkaXNjX2FjY2VwdHMrKzsKIAkJYmZhX3NtX3NlbmRfZXZlbnQodnBvcnQsIEJGQV9GQ1NfVlBPUlRfU01fUlNQX09LKTsKIAkJYnJlYWs7CkBAIC01Njk3LDcgKzU2NjEsNyBAQAogCQlicmVhazsKIAogCWNhc2UgQkZBX1NUQVRVU19FUFJPVE9DT0w6Ci0JCXN3aXRjaCAoYmZhX2xwc19nZXRfZXh0c3RhdHVzKHZwb3J0LT5scHMpKSB7CisJCXN3aXRjaCAodnBvcnQtPmxwcy0+ZXh0X3N0YXR1cykgewogCQljYXNlIEJGQV9FUFJPVE9fQkFEX0FDQ0VQVDoKIAkJCXZwb3J0LT52cG9ydF9zdGF0cy5mZGlzY19hY2NfYmFkKys7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2Zjc19ycG9ydC5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNzX3Jwb3J0LmMKaW5kZXggY2Y0YTZlNy4uY2FhZWU2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNzX3Jwb3J0LmMKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNzX3Jwb3J0LmMKQEAgLTE5LDkgKzE5LDkgQEAKICAqICBycG9ydC5jIFJlbW90ZSBwb3J0IGltcGxlbWVudGF0aW9uLgogICovCiAKKyNpbmNsdWRlICJiZmFkX2Rydi5oIgogI2luY2x1ZGUgImJmYV9mY3MuaCIKICNpbmNsdWRlICJiZmFfZmNidWlsZC5oIgotI2luY2x1ZGUgImJmYWRfZHJ2LmgiCiAKIEJGQV9UUkNfRklMRShGQ1MsIFJQT1JUKTsKIApAQCAtNzUsMzAgKzc1LDYgQEAKIHN0YXRpYyB2b2lkCWJmYV9mY3NfcnBvcnRfcHJvY2Vzc19hZGlzYyhzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKIAkJCQlzdHJ1Y3QgZmNoc19zICpyeF9mY2hzLCB1MTYgbGVuKTsKIHN0YXRpYyB2b2lkIGJmYV9mY3NfcnBvcnRfc2VuZF9wcmxvX2FjYyhzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCk7Ci0vKgotICogIGZjc19ycG9ydF9zbSBGQ1MgcnBvcnQgc3RhdGUgbWFjaGluZSBldmVudHMKLSAqLwotCi1lbnVtIHJwb3J0X2V2ZW50IHsKLQlSUFNNX0VWRU5UX1BMT0dJX1NFTkQJPSAxLAkvKiAgbmV3IHJwb3J0OyBzdGFydCB3aXRoIFBMT0dJICovCi0JUlBTTV9FVkVOVF9QTE9HSV9SQ1ZECT0gMiwJLyogIEluYm91bmQgUExPR0kgZnJvbSByZW1vdGUgcG9ydCAqLwotCVJQU01fRVZFTlRfUExPR0lfQ09NUAk9IDMsCS8qICBQTE9HSSBjb21wbGV0ZWQgdG8gcnBvcnQJKi8KLQlSUFNNX0VWRU5UX0xPR09fUkNWRAk9IDQsCS8qICBMT0dPIGZyb20gcmVtb3RlIGRldmljZQkqLwotCVJQU01fRVZFTlRfTE9HT19JTVAJPSA1LAkvKiAgaW1wbGljaXQgbG9nbyBmb3IgU0xFUgkqLwotCVJQU01fRVZFTlRfRkNYUF9TRU5UCT0gNiwJLyogIEZyYW1lIGZyb20gaGFzIGJlZW4gc2VudAkqLwotCVJQU01fRVZFTlRfREVMRVRFCT0gNywJLyogIFJQT1JUIGRlbGV0ZSByZXF1ZXN0CSovCi0JUlBTTV9FVkVOVF9TQ04JCT0gOCwJLyogIHN0YXRlIGNoYW5nZSBub3RpZmljYXRpb24JKi8KLQlSUFNNX0VWRU5UX0FDQ0VQVEVECT0gOSwJLyogIEdvb2QgcmVzcG9uc2UgZnJvbSByZW1vdGUgZGV2aWNlICovCi0JUlBTTV9FVkVOVF9GQUlMRUQJPSAxMCwJLyogIFJlcXVlc3QgdG8gcnBvcnQgZmFpbGVkLgkqLwotCVJQU01fRVZFTlRfVElNRU9VVAk9IDExLAkvKiAgUnBvcnQgU00gdGltZW91dCBldmVudAkqLwotCVJQU01fRVZFTlRfSENCX09OTElORSAgPSAxMiwJLyogIEJGQSBycG9ydCBvbmxpbmUgY2FsbGJhY2sJKi8KLQlSUFNNX0VWRU5UX0hDQl9PRkZMSU5FID0gMTMsCS8qICBCRkEgcnBvcnQgb2ZmbGluZSBjYWxsYmFjawkqLwotCVJQU01fRVZFTlRfRkM0X09GRkxJTkUgPSAxNCwJLyogIEZDLTQgb2ZmbGluZSBjb21wbGV0ZQkqLwotCVJQU01fRVZFTlRfQUREUkVTU19DSEFOR0UgPSAxNSwJLyogIFJwb3J0J3MgUElEIGhhcyBjaGFuZ2VkCSovCi0JUlBTTV9FVkVOVF9BRERSRVNTX0RJU0MgPSAxNiwJLyogIE5lZWQgdG8gRGlzY292ZXIgcnBvcnQncyBQSUQgKi8KLQlSUFNNX0VWRU5UX1BSTE9fUkNWRCAgID0gMTcsCS8qICBQUkxPIGZyb20gcmVtb3RlIGRldmljZQkqLwotCVJQU01fRVZFTlRfUExPR0lfUkVUUlkgPSAxOCwJLyogIFJldHJ5IFBMT0dJIGNvbnRpbm91c2x5ICovCi19OwogCiBzdGF0aWMgdm9pZAliZmFfZmNzX3Jwb3J0X3NtX3VuaW5pdChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKIAkJCQkJZW51bSBycG9ydF9ldmVudCBldmVudCk7CkBAIC00OTgsMjQgKzQ3NCwyNCBAQAogCiAJY2FzZSBSUFNNX0VWRU5UX0xPR09fUkNWRDoKIAkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9oY2JfbG9nb3Jjdik7Ci0JCWJmYV9ycG9ydF9vZmZsaW5lKHJwb3J0LT5iZmFfcnBvcnQpOworCQliZmFfc21fc2VuZF9ldmVudChycG9ydC0+YmZhX3Jwb3J0LCBCRkFfUlBPUlRfU01fT0ZGTElORSk7CiAJCWJyZWFrOwogCiAJY2FzZSBSUFNNX0VWRU5UX0xPR09fSU1QOgogCWNhc2UgUlBTTV9FVkVOVF9BRERSRVNTX0NIQU5HRToKIAkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9oY2Jfb2ZmbGluZSk7Ci0JCWJmYV9ycG9ydF9vZmZsaW5lKHJwb3J0LT5iZmFfcnBvcnQpOworCQliZmFfc21fc2VuZF9ldmVudChycG9ydC0+YmZhX3Jwb3J0LCBCRkFfUlBPUlRfU01fT0ZGTElORSk7CiAJCWJyZWFrOwogCiAJY2FzZSBSUFNNX0VWRU5UX1BMT0dJX1JDVkQ6CiAJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fcGxvZ2lhY2Nfc2VuZGluZyk7Ci0JCWJmYV9ycG9ydF9vZmZsaW5lKHJwb3J0LT5iZmFfcnBvcnQpOworCQliZmFfc21fc2VuZF9ldmVudChycG9ydC0+YmZhX3Jwb3J0LCBCRkFfUlBPUlRfU01fT0ZGTElORSk7CiAJCWJmYV9mY3NfcnBvcnRfc2VuZF9wbG9naWFjYyhycG9ydCwgTlVMTCk7CiAJCWJyZWFrOwogCiAJY2FzZSBSUFNNX0VWRU5UX0RFTEVURToKIAkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9oY2JfbG9nb3NlbmQpOwotCQliZmFfcnBvcnRfb2ZmbGluZShycG9ydC0+YmZhX3Jwb3J0KTsKKwkJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQtPmJmYV9ycG9ydCwgQkZBX1JQT1JUX1NNX09GRkxJTkUpOwogCQlicmVhazsKIAogCWNhc2UgUlBTTV9FVkVOVF9TQ046CkBAIC04MjQsNyArODAwLDcgQEAKIAlzd2l0Y2ggKGV2ZW50KSB7CiAJY2FzZSBSUFNNX0VWRU5UX0ZDNF9PRkZMSU5FOgogCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX2hjYl9sb2dvcmN2KTsKLQkJYmZhX3Jwb3J0X29mZmxpbmUocnBvcnQtPmJmYV9ycG9ydCk7CisJCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LT5iZmFfcnBvcnQsIEJGQV9SUE9SVF9TTV9PRkZMSU5FKTsKIAkJYnJlYWs7CiAKIAljYXNlIFJQU01fRVZFTlRfREVMRVRFOgpAQCAtODU2LDcgKzgzMiw3IEBACiAJc3dpdGNoIChldmVudCkgewogCWNhc2UgUlBTTV9FVkVOVF9GQzRfT0ZGTElORToKIAkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9oY2JfbG9nb3NlbmQpOwotCQliZmFfcnBvcnRfb2ZmbGluZShycG9ydC0+YmZhX3Jwb3J0KTsKKwkJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQtPmJmYV9ycG9ydCwgQkZBX1JQT1JUX1NNX09GRkxJTkUpOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC04NzgsNyArODU0LDcgQEAKIAlzd2l0Y2ggKGV2ZW50KSB7CiAJY2FzZSBSUFNNX0VWRU5UX0ZDNF9PRkZMSU5FOgogCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX2hjYl9vZmZsaW5lKTsKLQkJYmZhX3Jwb3J0X29mZmxpbmUocnBvcnQtPmJmYV9ycG9ydCk7CisJCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LT5iZmFfcnBvcnQsIEJGQV9SUE9SVF9TTV9PRkZMSU5FKTsKIAkJYnJlYWs7CiAKIAljYXNlIFJQU01fRVZFTlRfU0NOOgpAQCAtMTQ1OSw3ICsxNDM1LDcgQEAKIAkJCXR3aW4tPnN0YXRzLnBsb2dpX3JjdmQJICArPSBycG9ydC0+c3RhdHMucGxvZ2lfcmN2ZDsKIAkJCXR3aW4tPnN0YXRzLnBsb2dpX2FjY3MrKzsKIAotCQkJYmZhX2Zjc19ycG9ydF9kZWxldGUocnBvcnQpOworCQkJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQsIFJQU01fRVZFTlRfREVMRVRFKTsKIAogCQkJYmZhX2Zjc19ycG9ydF91cGRhdGUodHdpbiwgcGxvZ2lfcnNwKTsKIAkJCXR3aW4tPnBpZCA9IHJzcF9mY2hzLT5zX2lkOwpAQCAtMTk5MiwxMyArMTk2OCwxNCBAQAogCS8qCiAJICogYWxsb2NhdGUgRkMtNHMKIAkgKi8KLQliZmFfYXNzZXJ0KGJmYV9mY3NfbHBvcnRfaXNfaW5pdGlhdG9yKHBvcnQpKTsKKwlXQVJOX09OKCFiZmFfZmNzX2xwb3J0X2lzX2luaXRpYXRvcihwb3J0KSk7CiAKIAlpZiAoYmZhX2Zjc19scG9ydF9pc19pbml0aWF0b3IocG9ydCkpIHsKIAkJcnBvcnQtPml0bmltID0gYmZhX2Zjc19pdG5pbV9jcmVhdGUocnBvcnQpOwogCQlpZiAoIXJwb3J0LT5pdG5pbSkgewogCQkJYmZhX3RyYyhmY3MsIHJwaWQpOwotCQkJYmZhX3Jwb3J0X2RlbGV0ZShycG9ydC0+YmZhX3Jwb3J0KTsKKwkJCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LT5iZmFfcnBvcnQsCisJCQkJCQlCRkFfUlBPUlRfU01fREVMRVRFKTsKIAkJCWtmcmVlKHJwb3J0X2Rydik7CiAJCQlyZXR1cm4gTlVMTDsKIAkJfQpAQCAtMjAzMiw3ICsyMDA5LDcgQEAKIAkJCWJmYV9mY3NfcnBmX3Jwb3J0X29mZmxpbmUocnBvcnQpOwogCX0KIAotCWJmYV9ycG9ydF9kZWxldGUocnBvcnQtPmJmYV9ycG9ydCk7CisJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQtPmJmYV9ycG9ydCwgQkZBX1JQT1JUX1NNX0RFTEVURSk7CiAJYmZhX2Zjc19scG9ydF9kZWxfcnBvcnQocG9ydCwgcnBvcnQpOwogCWtmcmVlKHJwb3J0LT5ycF9kcnYpOwogfQpAQCAtMjMwNyw0MCArMjI4NCw4IEBACiAJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQsIFJQU01fRVZFTlRfUExPR0lfUkNWRCk7CiB9CiAKLS8qCi0gKiBDYWxsZWQgYnkgYnBvcnQvdnBvcnQgdG8gZGVsZXRlIGEgcmVtb3RlIHBvcnQgaW5zdGFuY2UuCi0gKgotICogUnBvcnQgZGVsZXRlIGlzIGNhbGxlZCB1bmRlciB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgkJLSB2cG9ydCBpcyBkZWxldGVkCi0gKgkJLSB2ZiBpcyBkZWxldGVkCi0gKgkJLSBleHBsaWNpdCByZXF1ZXN0IGZyb20gT1MgdG8gZGVsZXRlIHJwb3J0Ci0gKi8KLXZvaWQKLWJmYV9mY3NfcnBvcnRfZGVsZXRlKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KQotewotCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBSUFNNX0VWRU5UX0RFTEVURSk7Ci19CiAKIC8qCi0gKiBDYWxsZWQgYnkgYnBvcnQvdnBvcnQgdG8gIHdoZW4gYSB0YXJnZXQgZ29lcyBvZmZsaW5lLgotICoKLSAqLwotdm9pZAotYmZhX2Zjc19ycG9ydF9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KQotewotCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBSUFNNX0VWRU5UX0xPR09fSU1QKTsKLX0KLQotLyoKLSAqIENhbGxlZCBieSBicG9ydCBpbiBuMm4gd2hlbiBhIHRhcmdldCAoYXR0YWNoZWQgcG9ydCkgYmVjb21lcyBvbmxpbmUuCi0gKgotICovCi12b2lkCi1iZmFfZmNzX3Jwb3J0X29ubGluZShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCkKLXsKLQliZmFfc21fc2VuZF9ldmVudChycG9ydCwgUlBTTV9FVkVOVF9QTE9HSV9TRU5EKTsKLX0KLS8qCiAgKglDYWxsZWQgYnkgYnBvcnQvdnBvcnQgdG8gbm90aWZ5IFNDTiBmb3IgdGhlIHJlbW90ZSBwb3J0CiAgKi8KIHZvaWQKQEAgLTIzNTAsMjMgKzIyOTUsNiBAQAogCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBSUFNNX0VWRU5UX1NDTik7CiB9CiAKLS8qCi0gKglDYWxsZWQgYnkJZmNwaW0gdG8gbm90aWZ5IHRoYXQgdGhlIElUTiBjbGVhbnVwIGlzIGRvbmUuCi0gKi8KLXZvaWQKLWJmYV9mY3NfcnBvcnRfaXRuaW1fYWNrKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KQotewotCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBSUFNNX0VWRU5UX0ZDNF9PRkZMSU5FKTsKLX0KLQotLyoKLSAqCUNhbGxlZCBieSBmY3B0bSB0byBub3RpZnkgdGhhdCB0aGUgSVROIGNsZWFudXAgaXMgZG9uZS4KLSAqLwotdm9pZAotYmZhX2Zjc19ycG9ydF90aW5fYWNrKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KQotewotCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBSUFNNX0VWRU5UX0ZDNF9PRkZMSU5FKTsKLX0KIAogLyoKICAqCWJyaWVmCkBAIC0yNDY1LDE1ICsyMzkzLDYgQEAKICAqCQlDYWxsZWQgdG8gcHJvY2VzcyBhbnkgdW5zb2xpY3RlZCBmcmFtZXMgZnJvbSB0aGlzIHJlbW90ZSBwb3J0CiAgKi8KIHZvaWQKLWJmYV9mY3NfcnBvcnRfbG9nb19pbXAoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpCi17Ci0JYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQsIFJQU01fRVZFTlRfTE9HT19JTVApOwotfQotCi0vKgotICoJCUNhbGxlZCB0byBwcm9jZXNzIGFueSB1bnNvbGljdGVkIGZyYW1lcyBmcm9tIHRoaXMgcmVtb3RlIHBvcnQKLSAqLwotdm9pZAogYmZhX2Zjc19ycG9ydF91Zl9yZWN2KHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAogCQkJc3RydWN0IGZjaHNfcyAqZmNocywgdTE2IGxlbikKIHsKQEAgLTI1ODYsNiArMjUwNSw3IEBACiAJcmV0dXJuIGJmYV9zbV90b19zdGF0ZShycG9ydF9zbV90YWJsZSwgcnBvcnQtPnNtKTsKIH0KIAorCiAvKgogICoJYnJpZWYKICAqCQkgQ2FsbGVkIGJ5IHRoZSBEcml2ZXIgdG8gc2V0IHJwb3J0IGRlbGV0ZS9hZ2VvdXQgdGltZW91dApAQCAtMjYwMiw3ICsyNTIyLDcgQEAKIAkJYmZhX2Zjc19ycG9ydF9kZWxfdGltZW91dCA9IHJwb3J0X3RtbyAqIDEwMDA7CiB9CiB2b2lkCi1iZmFfZmNzX3Jwb3J0X3BybG8oc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsIHUxNiBveF9pZCkKK2JmYV9mY3NfcnBvcnRfcHJsbyhzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwgX19iZTE2IG94X2lkKQogewogCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnBpZCk7CiAKQEAgLTI2MjEsMTA2ICsyNTQxLDYgQEAKICAqICBmY3NfcnBvcnRfYXBpIEZDUyBycG9ydCBBUEkuCiAgKi8KIAotLyoKLSAqCURpcmVjdCBBUEkgdG8gYWRkIGEgdGFyZ2V0IGJ5IHBvcnQgd3duLiBUaGlzIGludGVyZmFjZSBpcyB1c2VkLCBmb3IKLSAqCWV4YW1wbGUsIGJ5IGJpb3Mgd2hlbiB0YXJnZXQgcHd3biBpcyBrbm93biBmcm9tIGJvb3QgbHVuIGNvbmZpZ3VyYXRpb24uCi0gKi8KLWJmYV9zdGF0dXNfdAotYmZhX2Zjc19ycG9ydF9hZGQoc3RydWN0IGJmYV9mY3NfbHBvcnRfcyAqcG9ydCwgd3duX3QgKnB3d24sCi0JCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LCBzdHJ1Y3QgYmZhZF9ycG9ydF9zICpycG9ydF9kcnYpCi17Ci0JYmZhX3RyYyhwb3J0LT5mY3MsICpwd3duKTsKLQotCXJldHVybiBCRkFfU1RBVFVTX09LOwotfQotCi0vKgotICoJRGlyZWN0IEFQSSB0byByZW1vdmUgYSB0YXJnZXQgYW5kIGl0cyBhc3NvY2lhdGVkIHJlc291cmNlcy4gVGhpcwotICoJaW50ZXJmYWNlIGlzIHVzZWQsIGZvciBleGFtcGxlLCBieSBkcml2ZXIgdG8gcmVtb3ZlIHRhcmdldAotICoJcG9ydHMgZnJvbSB0aGUgdGFyZ2V0IGxpc3QgZm9yIGEgVk0uCi0gKi8KLWJmYV9zdGF0dXNfdAotYmZhX2Zjc19ycG9ydF9yZW1vdmUoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnRfaW4pCi17Ci0KLQlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydDsKLQotCWJmYV90cmMocnBvcnRfaW4tPmZjcywgcnBvcnRfaW4tPnB3d24pOwotCi0JcnBvcnQgPSBiZmFfZmNzX2xwb3J0X2dldF9ycG9ydF9ieV9wd3duKHJwb3J0X2luLT5wb3J0LCBycG9ydF9pbi0+cHd3bik7Ci0JaWYgKHJwb3J0ID09IE5VTEwpIHsKLQkJLyoKLQkJICogVEJEIEVycm9yIGhhbmRsaW5nCi0JCSAqLwotCQliZmFfdHJjKHJwb3J0X2luLT5mY3MsIHJwb3J0X2luLT5waWQpOwotCQlyZXR1cm4gQkZBX1NUQVRVU19VTktOT1dOX1JXV047Ci0JfQotCi0JLyoKLQkgKiBUQkQgaWYgdGhpcyByZW1vdGUgcG9ydCBpcyBvbmxpbmUsIHNlbmQgYSBsb2dvCi0JICovCi0JcmV0dXJuIEJGQV9TVEFUVVNfT0s7Ci0KLX0KLQotLyoKLSAqCVJlbW90ZSBkZXZpY2Ugc3RhdHVzIGZvciBkaXNwbGF5L2RlYnVnLgotICovCi12b2lkCi1iZmFfZmNzX3Jwb3J0X2dldF9hdHRyKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAotCQkJc3RydWN0IGJmYV9ycG9ydF9hdHRyX3MgKnJwb3J0X2F0dHIpCi17Ci0Jc3RydWN0IGJmYV9ycG9ydF9xb3NfYXR0cl9zIHFvc19hdHRyOwotCWJmYV9mY3NfbHBvcnRfdCAqcG9ydCA9IHJwb3J0LT5wb3J0OwotCWJmYV9wb3J0X3NwZWVkX3QgcnBvcnRfc3BlZWQgPSBycG9ydC0+cnBmLnJwc2Nfc3BlZWQ7Ci0KLQltZW1zZXQocnBvcnRfYXR0ciwgMCwgc2l6ZW9mKHN0cnVjdCBiZmFfcnBvcnRfYXR0cl9zKSk7Ci0KLQlycG9ydF9hdHRyLT5waWQgPSBycG9ydC0+cGlkOwotCXJwb3J0X2F0dHItPnB3d24gPSBycG9ydC0+cHd3bjsKLQlycG9ydF9hdHRyLT5ud3duID0gcnBvcnQtPm53d247Ci0JcnBvcnRfYXR0ci0+Y29zX3N1cHBvcnRlZCA9IHJwb3J0LT5mY19jb3M7Ci0JcnBvcnRfYXR0ci0+ZGZfc3ogPSBycG9ydC0+bWF4ZnJzaXplOwotCXJwb3J0X2F0dHItPnN0YXRlID0gYmZhX2Zjc19ycG9ydF9nZXRfc3RhdGUocnBvcnQpOwotCXJwb3J0X2F0dHItPmZjX2NvcyA9IHJwb3J0LT5mY19jb3M7Ci0JcnBvcnRfYXR0ci0+Y2lzYyA9IHJwb3J0LT5jaXNjOwotCXJwb3J0X2F0dHItPnNjc2lfZnVuY3Rpb24gPSBycG9ydC0+c2NzaV9mdW5jdGlvbjsKLQlycG9ydF9hdHRyLT5jdXJyX3NwZWVkICA9IHJwb3J0LT5ycGYucnBzY19zcGVlZDsKLQlycG9ydF9hdHRyLT5hc3NpZ25lZF9zcGVlZCAgPSBycG9ydC0+cnBmLmFzc2lnbmVkX3NwZWVkOwotCi0JYmZhX3Jwb3J0X2dldF9xb3NfYXR0cihycG9ydC0+YmZhX3Jwb3J0LCAmcW9zX2F0dHIpOwotCXJwb3J0X2F0dHItPnFvc19hdHRyID0gcW9zX2F0dHI7Ci0KLQlycG9ydF9hdHRyLT50cmxfZW5mb3JjZWQgPSBCRkFfRkFMU0U7Ci0JaWYgKGJmYV9mY3BvcnRfaXNfcmF0ZWxpbShwb3J0LT5mY3MtPmJmYSkpIHsKLQkJaWYgKHJwb3J0X3NwZWVkID09IEJGQV9QT1JUX1NQRUVEX1VOS05PV04pIHsKLQkJCS8qIFVzZSBkZWZhdWx0IHJhdGVsaW0gc3BlZWQgc2V0dGluZyAqLwotCQkJcnBvcnRfc3BlZWQgPQotCQkJCWJmYV9mY3BvcnRfZ2V0X3JhdGVsaW1fc3BlZWQocnBvcnQtPmZjcy0+YmZhKTsKLQkJfQotCi0JCWlmIChycG9ydF9zcGVlZCA8IGJmYV9mY3NfbHBvcnRfZ2V0X3Jwb3J0X21heF9zcGVlZChwb3J0KSkKLQkJCXJwb3J0X2F0dHItPnRybF9lbmZvcmNlZCA9IEJGQV9UUlVFOwotCX0KLX0KLQotLyoKLSAqCVBlciByZW1vdGUgZGV2aWNlIHN0YXRpc3RpY3MuCi0gKi8KLXZvaWQKLWJmYV9mY3NfcnBvcnRfZ2V0X3N0YXRzKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAotCQkJc3RydWN0IGJmYV9ycG9ydF9zdGF0c19zICpzdGF0cykKLXsKLQkqc3RhdHMgPSBycG9ydC0+c3RhdHM7Ci19Ci0KLXZvaWQKLWJmYV9mY3NfcnBvcnRfY2xlYXJfc3RhdHMoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpCi17Ci0JbWVtc2V0KChjaGFyICopJnJwb3J0LT5zdGF0cywgMCwKLQkJCXNpemVvZihzdHJ1Y3QgYmZhX3Jwb3J0X3N0YXRzX3MpKTsKLX0KLQogc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqCiBiZmFfZmNzX3Jwb3J0X2xvb2t1cChzdHJ1Y3QgYmZhX2Zjc19scG9ydF9zICpwb3J0LCB3d25fdCBycHd3bikKIHsKQEAgLTI3NTIsMjIgKzI1NzIsNiBAQAogfQogCiAvKgotICogVGhpcyBBUEkgaXMgdG8gc2V0IHRoZSBScG9ydCdzIHNwZWVkLiBTaG91bGQgYmUgdXNlZCB3aGVuIFJQU0MgaXMgbm90Ci0gKiBzdXBwb3J0ZWQgYnkgdGhlIHJwb3J0LgotICovCi12b2lkCi1iZmFfZmNzX3Jwb3J0X3NldF9zcGVlZChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwgYmZhX3BvcnRfc3BlZWRfdCBzcGVlZCkKLXsKLQlycG9ydC0+cnBmLmFzc2lnbmVkX3NwZWVkICA9IHNwZWVkOwotCi0JLyogU2V0IHRoaXMgc3BlZWQgaW4gZi93IG9ubHkgaWYgdGhlIFJQU0Mgc3BlZWQgaXMgbm90IGF2YWlsYWJsZSAqLwotCWlmIChycG9ydC0+cnBmLnJwc2Nfc3BlZWQgPT0gQkZBX1BPUlRfU1BFRURfVU5LTk9XTikKLQkJYmZhX3Jwb3J0X3NwZWVkKHJwb3J0LT5iZmFfcnBvcnQsIHNwZWVkKTsKLX0KLQotCi0KLS8qCiAgKiBSZW1vdGUgcG9ydCBmZWF0dXJlcyAoUlBGKSBpbXBsZW1lbnRhdGlvbi4KICAqLwogCkBAIC0yODI3LDcgKzI2MzEsNyBAQAogCWNhc2UgUlBGU01fRVZFTlRfUlBPUlRfT05MSU5FOgogCQkvKiBTZW5kIFJQU0MyIHRvIGEgQnJvY2FkZSBmYWJyaWMgb25seS4gKi8KIAkJaWYgKCghQkZBX0ZDU19QSURfSVNfV0tBKHJwb3J0LT5waWQpKSAmJgotCQkJKChiZmFfbHBzX2lzX2JyY2RfZmFicmljKHJwb3J0LT5wb3J0LT5mYWJyaWMtPmxwcykpIHx8CisJCQkoKHJwb3J0LT5wb3J0LT5mYWJyaWMtPmxwcy0+YnJjZF9zd2l0Y2gpIHx8CiAJCQkoYmZhX2Zjc19mYWJyaWNfZ2V0X3N3aXRjaF9vdWkoZmFicmljKSA9PQogCQkJCQkJQkZBX0ZDU19CUkNEX1NXSVRDSF9PVUkpKSkgewogCQkJYmZhX3NtX3NldF9zdGF0ZShycGYsIGJmYV9mY3NfcnBmX3NtX3Jwc2Nfc2VuZGluZyk7CkBAIC0zMDkzLDcgKzI4OTcsNyBAQAogCQludW1fZW50cyA9IGJlMTZfdG9fY3B1KHJwc2MyX2FjYy0+bnVtX3BpZHMpOwogCQliZmFfdHJjKHJwb3J0LT5mY3MsIG51bV9lbnRzKTsKIAkJaWYgKG51bV9lbnRzID4gMCkgewotCQkJYmZhX2Fzc2VydChycHNjMl9hY2MtPnBvcnRfaW5mb1swXS5waWQgIT0gcnBvcnQtPnBpZCk7CisJCQlXQVJOX09OKHJwc2MyX2FjYy0+cG9ydF9pbmZvWzBdLnBpZCA9PSBycG9ydC0+cGlkKTsKIAkJCWJmYV90cmMocnBvcnQtPmZjcywKIAkJCQliZTE2X3RvX2NwdShycHNjMl9hY2MtPnBvcnRfaW5mb1swXS5waWQpKTsKIAkJCWJmYV90cmMocnBvcnQtPmZjcywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2h3X2NiLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9od19jYi5jCmluZGV4IGQ4NDY0YWUuLjk3N2U2ODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2h3X2NiLmMKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfaHdfY2IuYwpAQCAtMTUsNiArMTUsNyBAQAogICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogICovCiAKKyNpbmNsdWRlICJiZmFkX2Rydi5oIgogI2luY2x1ZGUgImJmYV9tb2R1bGVzLmgiCiAjaW5jbHVkZSAiYmZpX2NicmVnLmgiCiAKQEAgLTExMCw3ICsxMTEsNyBAQAogewogCWludCBpOwogCi0JYmZhX2Fzc2VydCgobnZlY3MgPT0gMSkgfHwgKG52ZWNzID09IF9fSEZOX05VTUlOVFMpKTsKKwlXQVJOX09OKChudmVjcyAhPSAxKSAmJiAobnZlY3MgIT0gX19IRk5fTlVNSU5UUykpOwogCiAJYmZhLT5tc2l4Lm52ZWNzID0gbnZlY3M7CiAJaWYgKG52ZWNzID09IDEpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2h3X2N0LmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9od19jdC5jCmluZGV4IGIwZWZiYzcuLjIxMDE4ZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2h3X2N0LmMKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfaHdfY3QuYwpAQCAtMTUsNiArMTUsNyBAQAogICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogICovCiAKKyNpbmNsdWRlICJiZmFkX2Rydi5oIgogI2luY2x1ZGUgImJmYV9tb2R1bGVzLmgiCiAjaW5jbHVkZSAiYmZpX2N0cmVnLmgiCiAKQEAgLTExNiw3ICsxMTcsNyBAQAogdm9pZAogYmZhX2h3Y3RfbXNpeF9pbml0KHN0cnVjdCBiZmFfcyAqYmZhLCBpbnQgbnZlY3MpCiB7Ci0JYmZhX2Fzc2VydCgobnZlY3MgPT0gMSkgfHwgKG52ZWNzID09IEJGQV9NU0lYX0NUX01BWCkpOworCVdBUk5fT04oKG52ZWNzICE9IDEpICYmIChudmVjcyAhPSBCRkFfTVNJWF9DVF9NQVgpKTsKIAliZmFfdHJjKGJmYSwgbnZlY3MpOwogCiAJYmZhLT5tc2l4Lm52ZWNzID0gbnZlY3M7CkBAIC0xNDMsNyArMTQ0LDcgQEAKIAlmb3IgKDsgaSA8PSBCRkFfTVNJWF9STUVfUTM7IGkrKykKIAkJYmZhLT5tc2l4LmhhbmRsZXJbaV0gPSBiZmFfbXNpeF9yc3BxOwogCi0JYmZhX2Fzc2VydChpID09IEJGQV9NU0lYX0xQVV9FUlIpOworCVdBUk5fT04oaSAhPSBCRkFfTVNJWF9MUFVfRVJSKTsKIAliZmEtPm1zaXguaGFuZGxlcltCRkFfTVNJWF9MUFVfRVJSXSA9IGJmYV9tc2l4X2xwdV9lcnI7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2lvYy5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW9jLmMKaW5kZXggOWY0YWEzOS4uYzFmNzJjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW9jLmMKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW9jLmMKQEAgLTE1LDExICsxNSwxMSBAQAogICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogICovCiAKKyNpbmNsdWRlICJiZmFkX2Rydi5oIgogI2luY2x1ZGUgImJmYV9pb2MuaCIKICNpbmNsdWRlICJiZmlfY3RyZWcuaCIKICNpbmNsdWRlICJiZmFfZGVmcy5oIgogI2luY2x1ZGUgImJmYV9kZWZzX3N2Yy5oIgotI2luY2x1ZGUgImJmYWRfZHJ2LmgiCiAKIEJGQV9UUkNfRklMRShDTkEsIElPQyk7CiAKQEAgLTI5LDcgKzI5LDcgQEAKICNkZWZpbmUgQkZBX0lPQ19UT1YJCTMwMDAJLyogbXNlY3MgKi8KICNkZWZpbmUgQkZBX0lPQ19IV1NFTV9UT1YJNTAwCS8qIG1zZWNzICovCiAjZGVmaW5lIEJGQV9JT0NfSEJfVE9WCQk1MDAJLyogbXNlY3MgKi8KLSNkZWZpbmUgQkZBX0lPQ19IV0lOSVRfTUFYCTIKKyNkZWZpbmUgQkZBX0lPQ19IV0lOSVRfTUFYCTUKICNkZWZpbmUgQkZBX0lPQ19UT1ZfUkVDT1ZFUgkgQkZBX0lPQ19IQl9UT1YKIAogI2RlZmluZSBiZmFfaW9jX3RpbWVyX3N0YXJ0KF9faW9jKQkJCQkJXApAQCAtNDIsMTEgKzQyLDYgQEAKIAkJCWJmYV9pb2NfaGJfY2hlY2ssIChfX2lvYyksIEJGQV9JT0NfSEJfVE9WKQogI2RlZmluZSBiZmFfaGJfdGltZXJfc3RvcChfX2lvYykJYmZhX3RpbWVyX3N0b3AoJihfX2lvYyktPmhiX3RpbWVyKQogCi0jZGVmaW5lIEJGQV9EQkdfRldUUkNfRU5UUwkoQkZJX0lPQ19UUkNfRU5UUykKLSNkZWZpbmUgQkZBX0RCR19GV1RSQ19MRU4JCQkJCVwKLQkoQkZBX0RCR19GV1RSQ19FTlRTICogc2l6ZW9mKHN0cnVjdCBiZmFfdHJjX3MpICsJXAotCSAoc2l6ZW9mKHN0cnVjdCBiZmFfdHJjX21vZF9zKSAtCQkJXAotCSAgQkZBX1RSQ19NQVggKiBzaXplb2Yoc3RydWN0IGJmYV90cmNfcykpKQogI2RlZmluZSBCRkFfREJHX0ZXVFJDX09GRihfZm4pCShCRklfSU9DX1RSQ19PRkYgKyBCRkFfREJHX0ZXVFJDX0xFTiAqIChfZm4pKQogCiAvKgpAQCAtNTksMTcgKzU0LDE2IEBACiAJCQkoKF9faW9jKS0+aW9jX2h3aWYtPmlvY19maXJtd2FyZV91bmxvY2soX19pb2MpKQogI2RlZmluZSBiZmFfaW9jX3JlZ19pbml0KF9faW9jKSAoKF9faW9jKS0+aW9jX2h3aWYtPmlvY19yZWdfaW5pdChfX2lvYykpCiAjZGVmaW5lIGJmYV9pb2NfbWFwX3BvcnQoX19pb2MpICgoX19pb2MpLT5pb2NfaHdpZi0+aW9jX21hcF9wb3J0KF9faW9jKSkKLSNkZWZpbmUgYmZhX2lvY19ub3RpZnlfaGJmYWlsKF9faW9jKQkJCVwKLQkJCSgoX19pb2MpLT5pb2NfaHdpZi0+aW9jX25vdGlmeV9oYmZhaWwoX19pb2MpKQotCi0jaWZkZWYgQkZBX0lPQ19JU19VRUZJCi0jZGVmaW5lIGJmYV9pb2NfaXNfYmlvc19vcHRyb20oX19pb2MpICgwKQotI2RlZmluZSBiZmFfaW9jX2lzX3VlZmkoX19pb2MpIEJGQV9JT0NfSVNfVUVGSQotI2Vsc2UKLSNkZWZpbmUgYmZhX2lvY19pc19iaW9zX29wdHJvbShfX2lvYykJXAotCShiZmFfY2JfaW1hZ2VfZ2V0X3NpemUoQkZBX0lPQ19GV0lNR19UWVBFKF9faW9jKSkgPCBCRkFfSU9DX0ZXSU1HX01JTlNaKQotI2RlZmluZSBiZmFfaW9jX2lzX3VlZmkoX19pb2MpICgwKQotI2VuZGlmCisjZGVmaW5lIGJmYV9pb2Nfbm90aWZ5X2ZhaWwoX19pb2MpICAgICAgICAgICAgICBcCisJCQkoKF9faW9jKS0+aW9jX2h3aWYtPmlvY19ub3RpZnlfZmFpbChfX2lvYykpCisjZGVmaW5lIGJmYV9pb2Nfc3luY19qb2luKF9faW9jKSAgICAgICAgICAgICAgICBcCisJCQkoKF9faW9jKS0+aW9jX2h3aWYtPmlvY19zeW5jX2pvaW4oX19pb2MpKQorI2RlZmluZSBiZmFfaW9jX3N5bmNfbGVhdmUoX19pb2MpICAgICAgICAgICAgICAgXAorCQkJKChfX2lvYyktPmlvY19od2lmLT5pb2Nfc3luY19sZWF2ZShfX2lvYykpCisjZGVmaW5lIGJmYV9pb2Nfc3luY19hY2soX19pb2MpICAgICAgICAgICAgICAgICBcCisJCQkoKF9faW9jKS0+aW9jX2h3aWYtPmlvY19zeW5jX2FjayhfX2lvYykpCisjZGVmaW5lIGJmYV9pb2Nfc3luY19jb21wbGV0ZShfX2lvYykgICAgICAgICAgICBcCisJCQkoKF9faW9jKS0+aW9jX2h3aWYtPmlvY19zeW5jX2NvbXBsZXRlKF9faW9jKSkKIAogI2RlZmluZSBiZmFfaW9jX21ib3hfY21kX3BlbmRpbmcoX19pb2MpCQlcCiAJCQkoIWxpc3RfZW1wdHkoJigoX19pb2MpLT5tYm94X21vZC5jbWRfcSkpIHx8IFwKQEAgLTgxLDI5ICs3NSwyMiBAQAogICogZm9yd2FyZCBkZWNsYXJhdGlvbnMKICAqLwogc3RhdGljIHZvaWQgYmZhX2lvY19od19zZW1fZ2V0KHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7Ci1zdGF0aWMgdm9pZCBiZmFfaW9jX2h3X3NlbV9nZXRfY2FuY2VsKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CiBzdGF0aWMgdm9pZCBiZmFfaW9jX2h3aW5pdChzdHJ1Y3QgYmZhX2lvY19zICppb2MsIGJmYV9ib29sZWFuX3QgZm9yY2UpOwogc3RhdGljIHZvaWQgYmZhX2lvY190aW1lb3V0KHZvaWQgKmlvYyk7CiBzdGF0aWMgdm9pZCBiZmFfaW9jX3NlbmRfZW5hYmxlKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CiBzdGF0aWMgdm9pZCBiZmFfaW9jX3NlbmRfZGlzYWJsZShzdHJ1Y3QgYmZhX2lvY19zICppb2MpOwogc3RhdGljIHZvaWQgYmZhX2lvY19zZW5kX2dldGF0dHIoc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKIHN0YXRpYyB2b2lkIGJmYV9pb2NfaGJfbW9uaXRvcihzdHJ1Y3QgYmZhX2lvY19zICppb2MpOwotc3RhdGljIHZvaWQgYmZhX2lvY19oYl9zdG9wKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7Ci1zdGF0aWMgdm9pZCBiZmFfaW9jX3Jlc2V0KHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgYmZhX2Jvb2xlYW5fdCBmb3JjZSk7CiBzdGF0aWMgdm9pZCBiZmFfaW9jX21ib3hfcG9sbChzdHJ1Y3QgYmZhX2lvY19zICppb2MpOwogc3RhdGljIHZvaWQgYmZhX2lvY19tYm94X2hiZmFpbChzdHJ1Y3QgYmZhX2lvY19zICppb2MpOwogc3RhdGljIHZvaWQgYmZhX2lvY19yZWNvdmVyKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CiBzdGF0aWMgdm9pZCBiZmFfaW9jX2NoZWNrX2F0dHJfd3ducyhzdHJ1Y3QgYmZhX2lvY19zICppb2MpOwogc3RhdGljIHZvaWQgYmZhX2lvY19kaXNhYmxlX2NvbXAoc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKIHN0YXRpYyB2b2lkIGJmYV9pb2NfbHB1X3N0b3Aoc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKLXN0YXRpYyB2b2lkIGJmYV9pb2NfcGZfZW5hYmxlZChzdHJ1Y3QgYmZhX2lvY19zICppb2MpOwotc3RhdGljIHZvaWQgYmZhX2lvY19wZl9kaXNhYmxlZChzdHJ1Y3QgYmZhX2lvY19zICppb2MpOwotc3RhdGljIHZvaWQgYmZhX2lvY19wZl9mYWlsZWQoc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKK3N0YXRpYyB2b2lkIGJmYV9pb2NfZGVidWdfc2F2ZV9mdHJjKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CitzdGF0aWMgdm9pZCBiZmFfaW9jX2ZhaWxfbm90aWZ5KHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CiBzdGF0aWMgdm9pZCBiZmFfaW9jX3BmX2Z3bWlzbWF0Y2goc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKIAotLyoKLSAqICBoYWxfaW9jX3NtCi0gKi8KIAogLyoKICAqIElPQyBzdGF0ZSBtYWNoaW5lIGRlZmluaXRpb25zL2RlY2xhcmF0aW9ucwpAQCAtMTE2LDEwICsxMDMsMTEgQEAKIAlJT0NfRV9FTkFCTEVECQk9IDUsCS8qICBmL3cgZW5hYmxlZAkJKi8KIAlJT0NfRV9GV1JTUF9HRVRBVFRSCT0gNiwJLyogIElPQyBnZXQgYXR0cmlidXRlIHJlc3BvbnNlCSovCiAJSU9DX0VfRElTQUJMRUQJCT0gNywJLyogIGYvdyBkaXNhYmxlZAkJKi8KLQlJT0NfRV9GQUlMRUQJCT0gOCwJLyogIGZhaWx1cmUgbm90aWNlIGJ5IGlvY3BmIHNtCSovCi0JSU9DX0VfSEJGQUlMCQk9IDksCS8qICBoZWFydGJlYXQgZmFpbHVyZQkJKi8KLQlJT0NfRV9IV0VSUk9SCQk9IDEwLAkvKiAgaGFyZHdhcmUgZXJyb3IgaW50ZXJydXB0CSovCi0JSU9DX0VfVElNRU9VVAkJPSAxMSwJLyogIHRpbWVvdXQJCQkqLworCUlPQ19FX0lOSVRGQUlMRUQJPSA4LAkvKiAgZmFpbHVyZSBub3RpY2UgYnkgaW9jcGYgc20JKi8KKwlJT0NfRV9QRkZBSUxFRAkJPSA5LAkvKiAgZmFpbHVyZSBub3RpY2UgYnkgaW9jcGYgc20JKi8KKwlJT0NfRV9IQkZBSUwJCT0gMTAsCS8qICBoZWFydGJlYXQgZmFpbHVyZQkJKi8KKwlJT0NfRV9IV0VSUk9SCQk9IDExLAkvKiAgaGFyZHdhcmUgZXJyb3IgaW50ZXJydXB0CSovCisJSU9DX0VfVElNRU9VVAkJPSAxMiwJLyogIHRpbWVvdXQJCQkqLwogfTsKIAogYmZhX2ZzbV9zdGF0ZV9kZWNsKGJmYV9pb2MsIHVuaW5pdCwgc3RydWN0IGJmYV9pb2NfcywgZW51bSBpb2NfZXZlbnQpOwpAQCAtMTI3LDcgKzExNSw3IEBACiBiZmFfZnNtX3N0YXRlX2RlY2woYmZhX2lvYywgZW5hYmxpbmcsIHN0cnVjdCBiZmFfaW9jX3MsIGVudW0gaW9jX2V2ZW50KTsKIGJmYV9mc21fc3RhdGVfZGVjbChiZmFfaW9jLCBnZXRhdHRyLCBzdHJ1Y3QgYmZhX2lvY19zLCBlbnVtIGlvY19ldmVudCk7CiBiZmFfZnNtX3N0YXRlX2RlY2woYmZhX2lvYywgb3AsIHN0cnVjdCBiZmFfaW9jX3MsIGVudW0gaW9jX2V2ZW50KTsKLWJmYV9mc21fc3RhdGVfZGVjbChiZmFfaW9jLCBpbml0ZmFpbCwgc3RydWN0IGJmYV9pb2NfcywgZW51bSBpb2NfZXZlbnQpOworYmZhX2ZzbV9zdGF0ZV9kZWNsKGJmYV9pb2MsIGZhaWxfcmV0cnksIHN0cnVjdCBiZmFfaW9jX3MsIGVudW0gaW9jX2V2ZW50KTsKIGJmYV9mc21fc3RhdGVfZGVjbChiZmFfaW9jLCBmYWlsLCBzdHJ1Y3QgYmZhX2lvY19zLCBlbnVtIGlvY19ldmVudCk7CiBiZmFfZnNtX3N0YXRlX2RlY2woYmZhX2lvYywgZGlzYWJsaW5nLCBzdHJ1Y3QgYmZhX2lvY19zLCBlbnVtIGlvY19ldmVudCk7CiBiZmFfZnNtX3N0YXRlX2RlY2woYmZhX2lvYywgZGlzYWJsZWQsIHN0cnVjdCBiZmFfaW9jX3MsIGVudW0gaW9jX2V2ZW50KTsKQEAgLTEzOCw3ICsxMjYsNyBAQAogCXtCRkFfU00oYmZhX2lvY19zbV9lbmFibGluZyksIEJGQV9JT0NfRU5BQkxJTkd9LAogCXtCRkFfU00oYmZhX2lvY19zbV9nZXRhdHRyKSwgQkZBX0lPQ19HRVRBVFRSfSwKIAl7QkZBX1NNKGJmYV9pb2Nfc21fb3ApLCBCRkFfSU9DX09QRVJBVElPTkFMfSwKLQl7QkZBX1NNKGJmYV9pb2Nfc21faW5pdGZhaWwpLCBCRkFfSU9DX0lOSVRGQUlMfSwKKwl7QkZBX1NNKGJmYV9pb2Nfc21fZmFpbF9yZXRyeSksIEJGQV9JT0NfSU5JVEZBSUx9LAogCXtCRkFfU00oYmZhX2lvY19zbV9mYWlsKSwgQkZBX0lPQ19GQUlMfSwKIAl7QkZBX1NNKGJmYV9pb2Nfc21fZGlzYWJsaW5nKSwgQkZBX0lPQ19ESVNBQkxJTkd9LAogCXtCRkFfU00oYmZhX2lvY19zbV9kaXNhYmxlZCksIEJGQV9JT0NfRElTQUJMRUR9LApAQCAtMTY1LDEyICsxNTMsNiBAQAogLyoKICAqIEZvcndhcmQgZGVjbGFyZWF0aW9ucyBmb3IgaW9jcGYgc3RhdGUgbWFjaGluZQogICovCi1zdGF0aWMgdm9pZCBiZmFfaW9jcGZfZW5hYmxlKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7Ci1zdGF0aWMgdm9pZCBiZmFfaW9jcGZfZGlzYWJsZShzdHJ1Y3QgYmZhX2lvY19zICppb2MpOwotc3RhdGljIHZvaWQgYmZhX2lvY3BmX2ZhaWwoc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKLXN0YXRpYyB2b2lkIGJmYV9pb2NwZl9pbml0ZmFpbChzdHJ1Y3QgYmZhX2lvY19zICppb2MpOwotc3RhdGljIHZvaWQgYmZhX2lvY3BmX2dldGF0dHJmYWlsKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7Ci1zdGF0aWMgdm9pZCBiZmFfaW9jcGZfc3RvcChzdHJ1Y3QgYmZhX2lvY19zICppb2MpOwogc3RhdGljIHZvaWQgYmZhX2lvY3BmX3RpbWVvdXQodm9pZCAqaW9jX2FyZyk7CiBzdGF0aWMgdm9pZCBiZmFfaW9jcGZfc2VtX3RpbWVvdXQodm9pZCAqaW9jX2FyZyk7CiAKQEAgLTIxMyw5ICsxOTUsMTQgQEAKIGJmYV9mc21fc3RhdGVfZGVjbChiZmFfaW9jcGYsIGh3aW5pdCwgc3RydWN0IGJmYV9pb2NwZl9zLCBlbnVtIGlvY3BmX2V2ZW50KTsKIGJmYV9mc21fc3RhdGVfZGVjbChiZmFfaW9jcGYsIGVuYWJsaW5nLCBzdHJ1Y3QgYmZhX2lvY3BmX3MsIGVudW0gaW9jcGZfZXZlbnQpOwogYmZhX2ZzbV9zdGF0ZV9kZWNsKGJmYV9pb2NwZiwgcmVhZHksIHN0cnVjdCBiZmFfaW9jcGZfcywgZW51bSBpb2NwZl9ldmVudCk7CitiZmFfZnNtX3N0YXRlX2RlY2woYmZhX2lvY3BmLCBpbml0ZmFpbF9zeW5jLCBzdHJ1Y3QgYmZhX2lvY3BmX3MsCisJCQkJCQllbnVtIGlvY3BmX2V2ZW50KTsKIGJmYV9mc21fc3RhdGVfZGVjbChiZmFfaW9jcGYsIGluaXRmYWlsLCBzdHJ1Y3QgYmZhX2lvY3BmX3MsIGVudW0gaW9jcGZfZXZlbnQpOworYmZhX2ZzbV9zdGF0ZV9kZWNsKGJmYV9pb2NwZiwgZmFpbF9zeW5jLCBzdHJ1Y3QgYmZhX2lvY3BmX3MsIGVudW0gaW9jcGZfZXZlbnQpOwogYmZhX2ZzbV9zdGF0ZV9kZWNsKGJmYV9pb2NwZiwgZmFpbCwgc3RydWN0IGJmYV9pb2NwZl9zLCBlbnVtIGlvY3BmX2V2ZW50KTsKIGJmYV9mc21fc3RhdGVfZGVjbChiZmFfaW9jcGYsIGRpc2FibGluZywgc3RydWN0IGJmYV9pb2NwZl9zLCBlbnVtIGlvY3BmX2V2ZW50KTsKK2JmYV9mc21fc3RhdGVfZGVjbChiZmFfaW9jcGYsIGRpc2FibGluZ19zeW5jLCBzdHJ1Y3QgYmZhX2lvY3BmX3MsCisJCQkJCQllbnVtIGlvY3BmX2V2ZW50KTsKIGJmYV9mc21fc3RhdGVfZGVjbChiZmFfaW9jcGYsIGRpc2FibGVkLCBzdHJ1Y3QgYmZhX2lvY3BmX3MsIGVudW0gaW9jcGZfZXZlbnQpOwogCiBzdGF0aWMgc3RydWN0IGJmYV9zbV90YWJsZV9zIGlvY3BmX3NtX3RhYmxlW10gPSB7CkBAIC0yMjYsOSArMjEzLDEyIEBACiAJe0JGQV9TTShiZmFfaW9jcGZfc21faHdpbml0KSwgQkZBX0lPQ1BGX0hXSU5JVH0sCiAJe0JGQV9TTShiZmFfaW9jcGZfc21fZW5hYmxpbmcpLCBCRkFfSU9DUEZfSFdJTklUfSwKIAl7QkZBX1NNKGJmYV9pb2NwZl9zbV9yZWFkeSksIEJGQV9JT0NQRl9SRUFEWX0sCisJe0JGQV9TTShiZmFfaW9jcGZfc21faW5pdGZhaWxfc3luYyksIEJGQV9JT0NQRl9JTklURkFJTH0sCiAJe0JGQV9TTShiZmFfaW9jcGZfc21faW5pdGZhaWwpLCBCRkFfSU9DUEZfSU5JVEZBSUx9LAorCXtCRkFfU00oYmZhX2lvY3BmX3NtX2ZhaWxfc3luYyksIEJGQV9JT0NQRl9GQUlMfSwKIAl7QkZBX1NNKGJmYV9pb2NwZl9zbV9mYWlsKSwgQkZBX0lPQ1BGX0ZBSUx9LAogCXtCRkFfU00oYmZhX2lvY3BmX3NtX2Rpc2FibGluZyksIEJGQV9JT0NQRl9ESVNBQkxJTkd9LAorCXtCRkFfU00oYmZhX2lvY3BmX3NtX2Rpc2FibGluZ19zeW5jKSwgQkZBX0lPQ1BGX0RJU0FCTElOR30sCiAJe0JGQV9TTShiZmFfaW9jcGZfc21fZGlzYWJsZWQpLCBCRkFfSU9DUEZfRElTQUJMRUR9LAogfTsKIApAQCAtMzAxLDcgKzI5MSw3IEBACiBzdGF0aWMgdm9pZAogYmZhX2lvY19zbV9lbmFibGluZ19lbnRyeShzdHJ1Y3QgYmZhX2lvY19zICppb2MpCiB7Ci0JYmZhX2lvY3BmX2VuYWJsZShpb2MpOworCWJmYV9mc21fc2VuZF9ldmVudCgmaW9jLT5pb2NwZiwgSU9DUEZfRV9FTkFCTEUpOwogfQogCiAvKgpAQCAtMzE4LDEzICszMDgsMTMgQEAKIAkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX2dldGF0dHIpOwogCQlicmVhazsKIAotCWNhc2UgSU9DX0VfRkFJTEVEOgotCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21faW5pdGZhaWwpOwotCQlicmVhazsKLQorCWNhc2UgSU9DX0VfUEZGQUlMRUQ6CisJCS8qICEhISBmYWxsIHRocm91Z2ggISEhICovCiAJY2FzZSBJT0NfRV9IV0VSUk9SOgotCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21faW5pdGZhaWwpOwotCQliZmFfaW9jcGZfaW5pdGZhaWwoaW9jKTsKKwkJaW9jLT5jYmZuLT5lbmFibGVfY2Jmbihpb2MtPmJmYSwgQkZBX1NUQVRVU19JT0NfRkFJTFVSRSk7CisJCWJmYV9mc21fc2V0X3N0YXRlKGlvYywgYmZhX2lvY19zbV9mYWlsX3JldHJ5KTsKKwkJaWYgKGV2ZW50ICE9IElPQ19FX1BGRkFJTEVEKQorCQkJYmZhX2ZzbV9zZW5kX2V2ZW50KCZpb2MtPmlvY3BmLCBJT0NQRl9FX0lOSVRGQUlMKTsKIAkJYnJlYWs7CiAKIAljYXNlIElPQ19FX0RJU0FCTEU6CkBAIC0zMzMsNyArMzIzLDcgQEAKIAogCWNhc2UgSU9DX0VfREVUQUNIOgogCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fdW5pbml0KTsKLQkJYmZhX2lvY3BmX3N0b3AoaW9jKTsKKwkJYmZhX2ZzbV9zZW5kX2V2ZW50KCZpb2MtPmlvY3BmLCBJT0NQRl9FX1NUT1ApOwogCQlicmVhazsKIAogCWNhc2UgSU9DX0VfRU5BQkxFOgpAQCAtMzY3LDE4ICszNTcsMTYgQEAKIAkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX29wKTsKIAkJYnJlYWs7CiAKLQljYXNlIElPQ19FX0ZBSUxFRDoKLQkJYmZhX2lvY190aW1lcl9zdG9wKGlvYyk7Ci0JCWJmYV9mc21fc2V0X3N0YXRlKGlvYywgYmZhX2lvY19zbV9pbml0ZmFpbCk7CiAJCWJyZWFrOwotCisJY2FzZSBJT0NfRV9QRkZBSUxFRDoKIAljYXNlIElPQ19FX0hXRVJST1I6CiAJCWJmYV9pb2NfdGltZXJfc3RvcChpb2MpOwotCQkvKiBmYWxsIHRocm91Z2ggKi8KLQorCQkvKiAhISEgZmFsbCB0aHJvdWdoICEhISAqLwogCWNhc2UgSU9DX0VfVElNRU9VVDoKLQkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX2luaXRmYWlsKTsKLQkJYmZhX2lvY3BmX2dldGF0dHJmYWlsKGlvYyk7CisJCWlvYy0+Y2Jmbi0+ZW5hYmxlX2NiZm4oaW9jLT5iZmEsIEJGQV9TVEFUVVNfSU9DX0ZBSUxVUkUpOworCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fZmFpbF9yZXRyeSk7CisJCWlmIChldmVudCAhPSBJT0NfRV9QRkZBSUxFRCkKKwkJCWJmYV9mc21fc2VuZF9ldmVudCgmaW9jLT5pb2NwZiwgSU9DUEZfRV9HRVRBVFRSRkFJTCk7CiAJCWJyZWFrOwogCiAJY2FzZSBJT0NfRV9ESVNBQkxFOgpAQCAtNDE1LDIyICs0MDMsMjQgQEAKIAkJYnJlYWs7CiAKIAljYXNlIElPQ19FX0RJU0FCTEU6Ci0JCWJmYV9pb2NfaGJfc3RvcChpb2MpOworCQliZmFfaGJfdGltZXJfc3RvcChpb2MpOwogCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fZGlzYWJsaW5nKTsKIAkJYnJlYWs7CiAKLQljYXNlIElPQ19FX0ZBSUxFRDoKLQkJYmZhX2lvY19oYl9zdG9wKGlvYyk7Ci0JCWJmYV9mc21fc2V0X3N0YXRlKGlvYywgYmZhX2lvY19zbV9mYWlsKTsKLQkJYnJlYWs7Ci0KKwljYXNlIElPQ19FX1BGRkFJTEVEOgogCWNhc2UgSU9DX0VfSFdFUlJPUjoKLQkJYmZhX2lvY19oYl9zdG9wKGlvYyk7CisJCWJmYV9oYl90aW1lcl9zdG9wKGlvYyk7CiAJCS8qICEhISBmYWxsIHRocm91Z2ggISEhICovCi0KIAljYXNlIElPQ19FX0hCRkFJTDoKLQkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX2ZhaWwpOwotCQliZmFfaW9jcGZfZmFpbChpb2MpOworCQliZmFfaW9jX2ZhaWxfbm90aWZ5KGlvYyk7CisKKwkJaWYgKGlvYy0+aW9jcGYuYXV0b19yZWNvdmVyKQorCQkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX2ZhaWxfcmV0cnkpOworCQllbHNlCisJCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fZmFpbCk7CisKKwkJaWYgKGV2ZW50ICE9IElPQ19FX1BGRkFJTEVEKQorCQkJYmZhX2ZzbV9zZW5kX2V2ZW50KCZpb2MtPmlvY3BmLCBJT0NQRl9FX0ZBSUwpOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC00NDMsNyArNDMzLDcgQEAKIGJmYV9pb2Nfc21fZGlzYWJsaW5nX2VudHJ5KHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKIHsKIAlzdHJ1Y3QgYmZhZF9zICpiZmFkID0gKHN0cnVjdCBiZmFkX3MgKilpb2MtPmJmYS0+YmZhZDsKLQliZmFfaW9jcGZfZGlzYWJsZShpb2MpOworCWJmYV9mc21fc2VuZF9ldmVudCgmaW9jLT5pb2NwZiwgSU9DUEZfRV9ESVNBQkxFKTsKIAlCRkFfTE9HKEtFUk5fSU5GTywgYmZhZCwgYmZhX2xvZ19sZXZlbCwgIklPQyBkaXNhYmxlZFxuIik7CiB9CiAKQEAgLTQ2Niw3ICs0NTYsNyBAQAogCQkgKiBhZnRlciBpb2NwZiBzbSBjb21wbGV0ZXMgZmFpbHVyZSBwcm9jZXNzaW5nIGFuZAogCQkgKiBtb3ZlcyB0byBkaXNhYmxlZCBzdGF0ZS4KIAkJICovCi0JCWJmYV9pb2NwZl9mYWlsKGlvYyk7CisJCWJmYV9mc21fc2VuZF9ldmVudCgmaW9jLT5pb2NwZiwgSU9DUEZfRV9GQUlMKTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpAQCAtNDk5LDcgKzQ4OSw3IEBACiAKIAljYXNlIElPQ19FX0RFVEFDSDoKIAkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX3VuaW5pdCk7Ci0JCWJmYV9pb2NwZl9zdG9wKGlvYyk7CisJCWJmYV9mc21fc2VuZF9ldmVudCgmaW9jLT5pb2NwZiwgSU9DUEZfRV9TVE9QKTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpAQCAtNTA5LDE2ICs0OTksMTYgQEAKIAogCiBzdGF0aWMgdm9pZAotYmZhX2lvY19zbV9pbml0ZmFpbF9lbnRyeShzdHJ1Y3QgYmZhX2lvY19zICppb2MpCitiZmFfaW9jX3NtX2ZhaWxfcmV0cnlfZW50cnkoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQogewotCWlvYy0+Y2Jmbi0+ZW5hYmxlX2NiZm4oaW9jLT5iZmEsIEJGQV9TVEFUVVNfSU9DX0ZBSUxVUkUpOworCWJmYV90cmMoaW9jLCAwKTsKIH0KIAogLyoKLSAqIEhhcmR3YXJlIGluaXRpYWxpemF0aW9uIGZhaWxlZC4KKyAqIEhhcmR3YXJlIGluaXRpYWxpemF0aW9uIHJldHJ5LgogICovCiBzdGF0aWMgdm9pZAotYmZhX2lvY19zbV9pbml0ZmFpbChzdHJ1Y3QgYmZhX2lvY19zICppb2MsIGVudW0gaW9jX2V2ZW50IGV2ZW50KQorYmZhX2lvY19zbV9mYWlsX3JldHJ5KHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgZW51bSBpb2NfZXZlbnQgZXZlbnQpCiB7CiAJYmZhX3RyYyhpb2MsIGV2ZW50KTsKIApAQCAtNTI3LDExICs1MTcsMjEgQEAKIAkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX2dldGF0dHIpOwogCQlicmVhazsKIAotCWNhc2UgSU9DX0VfRkFJTEVEOgorCWNhc2UgSU9DX0VfUEZGQUlMRUQ6CisJY2FzZSBJT0NfRV9IV0VSUk9SOgogCQkvKgotCQkgKiBJbml0aWFsaXphdGlvbiBmYWlsdXJlIGR1cmluZyBpb2NwZiBpbml0IHJldHJ5LgorCQkgKiBJbml0aWFsaXphdGlvbiByZXRyeSBmYWlsZWQuCiAJCSAqLwogCQlpb2MtPmNiZm4tPmVuYWJsZV9jYmZuKGlvYy0+YmZhLCBCRkFfU1RBVFVTX0lPQ19GQUlMVVJFKTsKKwkJaWYgKGV2ZW50ICE9IElPQ19FX1BGRkFJTEVEKQorCQkJYmZhX2ZzbV9zZW5kX2V2ZW50KCZpb2MtPmlvY3BmLCBJT0NQRl9FX0lOSVRGQUlMKTsKKwkJYnJlYWs7CisKKwljYXNlIElPQ19FX0lOSVRGQUlMRUQ6CisJCWJmYV9mc21fc2V0X3N0YXRlKGlvYywgYmZhX2lvY19zbV9mYWlsKTsKKwkJYnJlYWs7CisKKwljYXNlIElPQ19FX0VOQUJMRToKIAkJYnJlYWs7CiAKIAljYXNlIElPQ19FX0RJU0FCTEU6CkBAIC01NDAsNyArNTQwLDcgQEAKIAogCWNhc2UgSU9DX0VfREVUQUNIOgogCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fdW5pbml0KTsKLQkJYmZhX2lvY3BmX3N0b3AoaW9jKTsKKwkJYmZhX2ZzbV9zZW5kX2V2ZW50KCZpb2MtPmlvY3BmLCBJT0NQRl9FX1NUT1ApOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC01NTIsMjEgKzU1Miw3IEBACiBzdGF0aWMgdm9pZAogYmZhX2lvY19zbV9mYWlsX2VudHJ5KHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkCQkJKnFlOwotCXN0cnVjdCBiZmFfaW9jX2hiZmFpbF9ub3RpZnlfcwkqbm90aWZ5OwotCXN0cnVjdCBiZmFkX3MgKmJmYWQgPSAoc3RydWN0IGJmYWRfcyAqKWlvYy0+YmZhLT5iZmFkOwotCi0JLyoKLQkgKiBOb3RpZnkgZHJpdmVyIGFuZCBjb21tb24gbW9kdWxlcyByZWdpc3RlcmVkIGZvciBub3RpZmljYXRpb24uCi0JICovCi0JaW9jLT5jYmZuLT5oYmZhaWxfY2Jmbihpb2MtPmJmYSk7Ci0JbGlzdF9mb3JfZWFjaChxZSwgJmlvYy0+aGJfbm90aWZ5X3EpIHsKLQkJbm90aWZ5ID0gKHN0cnVjdCBiZmFfaW9jX2hiZmFpbF9ub3RpZnlfcyAqKSBxZTsKLQkJbm90aWZ5LT5jYmZuKG5vdGlmeS0+Y2JhcmcpOwotCX0KLQotCUJGQV9MT0coS0VSTl9DUklULCBiZmFkLCBiZmFfbG9nX2xldmVsLAotCQkiSGVhcnQgQmVhdCBvZiBJT0MgaGFzIGZhaWxlZFxuIik7CisJYmZhX3RyYyhpb2MsIDApOwogfQogCiAvKgpAQCAtNTc5LDIzICs1NjUsMTkgQEAKIAogCXN3aXRjaCAoZXZlbnQpIHsKIAotCWNhc2UgSU9DX0VfRkFJTEVEOgotCQkvKgotCQkgKiBJbml0aWFsaXphdGlvbiBmYWlsdXJlIGR1cmluZyBpb2NwZiByZWNvdmVyeS4KLQkJICogISEhIEZhbGwgdGhyb3VnaCAhISEKLQkJICovCiAJY2FzZSBJT0NfRV9FTkFCTEU6CiAJCWlvYy0+Y2Jmbi0+ZW5hYmxlX2NiZm4oaW9jLT5iZmEsIEJGQV9TVEFUVVNfSU9DX0ZBSUxVUkUpOwogCQlicmVhazsKIAotCWNhc2UgSU9DX0VfRU5BQkxFRDoKLQkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX2dldGF0dHIpOwotCQlicmVhazsKLQogCWNhc2UgSU9DX0VfRElTQUJMRToKIAkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX2Rpc2FibGluZyk7CiAJCWJyZWFrOwogCisJY2FzZSBJT0NfRV9ERVRBQ0g6CisJCWJmYV9mc21fc2V0X3N0YXRlKGlvYywgYmZhX2lvY19zbV91bmluaXQpOworCQliZmFfZnNtX3NlbmRfZXZlbnQoJmlvYy0+aW9jcGYsIElPQ1BGX0VfU1RPUCk7CisJCWJyZWFrOworCiAJY2FzZSBJT0NfRV9IV0VSUk9SOgogCQkvKgogCQkgKiBIQiBmYWlsdXJlIG5vdGlmaWNhdGlvbiwgaWdub3JlLgpAQCAtNjA2LDEzICs1ODgsMTAgQEAKIAl9CiB9CiAKLQotCiAvKgogICogSU9DUEYgU3RhdGUgTWFjaGluZQogICovCiAKLQogLyoKICAqIFJlc2V0IGVudHJ5IGFjdGlvbnMgLS0gaW5pdGlhbGl6ZSBzdGF0ZSBtYWNoaW5lCiAgKi8KQEAgLTY2OCwyMiArNjQ3LDI5IEBACiAJc3dpdGNoIChldmVudCkgewogCWNhc2UgSU9DUEZfRV9TRU1MT0NLRUQ6CiAJCWlmIChiZmFfaW9jX2Zpcm13YXJlX2xvY2soaW9jKSkgewotCQkJaW9jcGYtPnJldHJ5X2NvdW50ID0gMDsKLQkJCWJmYV9mc21fc2V0X3N0YXRlKGlvY3BmLCBiZmFfaW9jcGZfc21faHdpbml0KTsKKwkJCWlmIChiZmFfaW9jX3N5bmNfY29tcGxldGUoaW9jKSkgeworCQkJCWlvY3BmLT5yZXRyeV9jb3VudCA9IDA7CisJCQkJYmZhX2lvY19zeW5jX2pvaW4oaW9jKTsKKwkJCQliZmFfZnNtX3NldF9zdGF0ZShpb2NwZiwgYmZhX2lvY3BmX3NtX2h3aW5pdCk7CisJCQl9IGVsc2UgeworCQkJCWJmYV9pb2NfZmlybXdhcmVfdW5sb2NrKGlvYyk7CisJCQkJd3JpdGVsKDEsIGlvYy0+aW9jX3JlZ3MuaW9jX3NlbV9yZWcpOworCQkJCWJmYV9zZW1fdGltZXJfc3RhcnQoaW9jKTsKKwkJCX0KIAkJfSBlbHNlIHsKLQkJCWJmYV9pb2NfaHdfc2VtX3JlbGVhc2UoaW9jKTsKKwkJCXdyaXRlbCgxLCBpb2MtPmlvY19yZWdzLmlvY19zZW1fcmVnKTsKIAkJCWJmYV9mc21fc2V0X3N0YXRlKGlvY3BmLCBiZmFfaW9jcGZfc21fbWlzbWF0Y2gpOwogCQl9CiAJCWJyZWFrOwogCiAJY2FzZSBJT0NQRl9FX0RJU0FCTEU6Ci0JCWJmYV9pb2NfaHdfc2VtX2dldF9jYW5jZWwoaW9jKTsKKwkJYmZhX3NlbV90aW1lcl9zdG9wKGlvYyk7CiAJCWJmYV9mc21fc2V0X3N0YXRlKGlvY3BmLCBiZmFfaW9jcGZfc21fcmVzZXQpOwotCQliZmFfaW9jX3BmX2Rpc2FibGVkKGlvYyk7CisJCWJmYV9mc21fc2VuZF9ldmVudChpb2MsIElPQ19FX0RJU0FCTEVEKTsKIAkJYnJlYWs7CiAKIAljYXNlIElPQ1BGX0VfU1RPUDoKLQkJYmZhX2lvY19od19zZW1fZ2V0X2NhbmNlbChpb2MpOworCQliZmFfc2VtX3RpbWVyX3N0b3AoaW9jKTsKIAkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jcGYsIGJmYV9pb2NwZl9zbV9yZXNldCk7CiAJCWJyZWFrOwogCkBAIC03MjYsNyArNzEyLDcgQEAKIAljYXNlIElPQ1BGX0VfRElTQUJMRToKIAkJYmZhX2lvY3BmX3RpbWVyX3N0b3AoaW9jKTsKIAkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jcGYsIGJmYV9pb2NwZl9zbV9yZXNldCk7Ci0JCWJmYV9pb2NfcGZfZGlzYWJsZWQoaW9jKTsKKwkJYmZhX2ZzbV9zZW5kX2V2ZW50KGlvYywgSU9DX0VfRElTQUJMRUQpOwogCQlicmVhazsKIAogCWNhc2UgSU9DUEZfRV9TVE9QOgpAQCAtNzYwLDEzICs3NDYsMTggQEAKIAogCXN3aXRjaCAoZXZlbnQpIHsKIAljYXNlIElPQ1BGX0VfU0VNTE9DS0VEOgotCQlpb2NwZi0+cmV0cnlfY291bnQgPSAwOwotCQliZmFfZnNtX3NldF9zdGF0ZShpb2NwZiwgYmZhX2lvY3BmX3NtX2h3aW5pdCk7CisJCWlmIChiZmFfaW9jX3N5bmNfY29tcGxldGUoaW9jKSkgeworCQkJYmZhX2lvY19zeW5jX2pvaW4oaW9jKTsKKwkJCWJmYV9mc21fc2V0X3N0YXRlKGlvY3BmLCBiZmFfaW9jcGZfc21faHdpbml0KTsKKwkJfSBlbHNlIHsKKwkJCXdyaXRlbCgxLCBpb2MtPmlvY19yZWdzLmlvY19zZW1fcmVnKTsKKwkJCWJmYV9zZW1fdGltZXJfc3RhcnQoaW9jKTsKKwkJfQogCQlicmVhazsKIAogCWNhc2UgSU9DUEZfRV9ESVNBQkxFOgotCQliZmFfaW9jX2h3X3NlbV9nZXRfY2FuY2VsKGlvYyk7Ci0JCWJmYV9mc21fc2V0X3N0YXRlKGlvY3BmLCBiZmFfaW9jcGZfc21fZGlzYWJsZWQpOworCQliZmFfc2VtX3RpbWVyX3N0b3AoaW9jKTsKKwkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jcGYsIGJmYV9pb2NwZl9zbV9kaXNhYmxpbmdfc3luYyk7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKQEAgLTc3NCwxMiArNzY1LDExIEBACiAJfQogfQogCi0KIHN0YXRpYyB2b2lkCiBiZmFfaW9jcGZfc21faHdpbml0X2VudHJ5KHN0cnVjdCBiZmFfaW9jcGZfcyAqaW9jcGYpCiB7CiAJYmZhX2lvY3BmX3RpbWVyX3N0YXJ0KGlvY3BmLT5pb2MpOwotCWJmYV9pb2NfcmVzZXQoaW9jcGYtPmlvYywgQkZBX0ZBTFNFKTsKKwliZmFfaW9jX2h3aW5pdChpb2NwZi0+aW9jLCBCRkFfRkFMU0UpOwogfQogCiAvKgpAQCAtODA2LDIzICs3OTYsMTYgQEAKIAkJICovCiAKIAljYXNlIElPQ1BGX0VfVElNRU9VVDoKLQkJaW9jcGYtPnJldHJ5X2NvdW50Kys7Ci0JCWlmIChpb2NwZi0+cmV0cnlfY291bnQgPCBCRkFfSU9DX0hXSU5JVF9NQVgpIHsKLQkJCWJmYV9pb2NwZl90aW1lcl9zdGFydChpb2MpOwotCQkJYmZhX2lvY19yZXNldChpb2MsIEJGQV9UUlVFKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJYmZhX2lvY19od19zZW1fcmVsZWFzZShpb2MpOwotCQliZmFfZnNtX3NldF9zdGF0ZShpb2NwZiwgYmZhX2lvY3BmX3NtX2luaXRmYWlsKTsKLQorCQl3cml0ZWwoMSwgaW9jLT5pb2NfcmVncy5pb2Nfc2VtX3JlZyk7CiAJCWlmIChldmVudCA9PSBJT0NQRl9FX1RJTUVPVVQpCi0JCQliZmFfaW9jX3BmX2ZhaWxlZChpb2MpOworCQkJYmZhX2ZzbV9zZW5kX2V2ZW50KGlvYywgSU9DX0VfUEZGQUlMRUQpOworCQliZmFfZnNtX3NldF9zdGF0ZShpb2NwZiwgYmZhX2lvY3BmX3NtX2luaXRmYWlsX3N5bmMpOwogCQlicmVhazsKIAogCWNhc2UgSU9DUEZfRV9ESVNBQkxFOgotCQliZmFfaW9jX2h3X3NlbV9yZWxlYXNlKGlvYyk7CiAJCWJmYV9pb2NwZl90aW1lcl9zdG9wKGlvYyk7CisJCWJmYV9pb2Nfc3luY19sZWF2ZShpb2MpOworCQl3cml0ZWwoMSwgaW9jLT5pb2NfcmVncy5pb2Nfc2VtX3JlZyk7CiAJCWJmYV9mc21fc2V0X3N0YXRlKGlvY3BmLCBiZmFfaW9jcGZfc21fZGlzYWJsZWQpOwogCQlicmVhazsKIApAQCAtODMxLDcgKzgxNCw2IEBACiAJfQogfQogCi0KIHN0YXRpYyB2b2lkCiBiZmFfaW9jcGZfc21fZW5hYmxpbmdfZW50cnkoc3RydWN0IGJmYV9pb2NwZl9zICppb2NwZikKIHsKQEAgLTg1Myw3ICs4MzUsNyBAQAogCXN3aXRjaCAoZXZlbnQpIHsKIAljYXNlIElPQ1BGX0VfRldSU1BfRU5BQkxFOgogCQliZmFfaW9jcGZfdGltZXJfc3RvcChpb2MpOwotCQliZmFfaW9jX2h3X3NlbV9yZWxlYXNlKGlvYyk7CisJCXdyaXRlbCgxLCBpb2MtPmlvY19yZWdzLmlvY19zZW1fcmVnKTsKIAkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jcGYsIGJmYV9pb2NwZl9zbV9yZWFkeSk7CiAJCWJyZWFrOwogCkBAIC04NjQsMjMgKzg0NiwxNSBAQAogCQkgKi8KIAogCWNhc2UgSU9DUEZfRV9USU1FT1VUOgotCQlpb2NwZi0+cmV0cnlfY291bnQrKzsKLQkJaWYgKGlvY3BmLT5yZXRyeV9jb3VudCA8IEJGQV9JT0NfSFdJTklUX01BWCkgewotCQkJd3JpdGVsKEJGSV9JT0NfVU5JTklULCBpb2MtPmlvY19yZWdzLmlvY19md3N0YXRlKTsKLQkJCWJmYV9mc21fc2V0X3N0YXRlKGlvY3BmLCBiZmFfaW9jcGZfc21faHdpbml0KTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJYmZhX2lvY19od19zZW1fcmVsZWFzZShpb2MpOwotCQliZmFfZnNtX3NldF9zdGF0ZShpb2NwZiwgYmZhX2lvY3BmX3NtX2luaXRmYWlsKTsKLQorCQl3cml0ZWwoMSwgaW9jLT5pb2NfcmVncy5pb2Nfc2VtX3JlZyk7CiAJCWlmIChldmVudCA9PSBJT0NQRl9FX1RJTUVPVVQpCi0JCQliZmFfaW9jX3BmX2ZhaWxlZChpb2MpOworCQkJYmZhX2ZzbV9zZW5kX2V2ZW50KGlvYywgSU9DX0VfUEZGQUlMRUQpOworCQliZmFfZnNtX3NldF9zdGF0ZShpb2NwZiwgYmZhX2lvY3BmX3NtX2luaXRmYWlsX3N5bmMpOwogCQlicmVhazsKIAogCWNhc2UgSU9DUEZfRV9ESVNBQkxFOgogCQliZmFfaW9jcGZfdGltZXJfc3RvcChpb2MpOwotCQliZmFfaW9jX2h3X3NlbV9yZWxlYXNlKGlvYyk7CisJCXdyaXRlbCgxLCBpb2MtPmlvY19yZWdzLmlvY19zZW1fcmVnKTsKIAkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jcGYsIGJmYV9pb2NwZl9zbV9kaXNhYmxpbmcpOwogCQlicmVhazsKIApAQCAtODkzLDEyICs4NjcsMTAgQEAKIAl9CiB9CiAKLQotCiBzdGF0aWMgdm9pZAogYmZhX2lvY3BmX3NtX3JlYWR5X2VudHJ5KHN0cnVjdCBiZmFfaW9jcGZfcyAqaW9jcGYpCiB7Ci0JYmZhX2lvY19wZl9lbmFibGVkKGlvY3BmLT5pb2MpOworCWJmYV9mc21fc2VuZF9ldmVudChpb2NwZi0+aW9jLCBJT0NfRV9FTkFCTEVEKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTkxNCwyMCArODg2LDIxIEBACiAJCWJyZWFrOwogCiAJY2FzZSBJT0NQRl9FX0dFVEFUVFJGQUlMOgotCQliZmFfZnNtX3NldF9zdGF0ZShpb2NwZiwgYmZhX2lvY3BmX3NtX2luaXRmYWlsKTsKKwkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jcGYsIGJmYV9pb2NwZl9zbV9pbml0ZmFpbF9zeW5jKTsKIAkJYnJlYWs7CiAKIAljYXNlIElPQ1BGX0VfRkFJTDoKLQkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jcGYsIGJmYV9pb2NwZl9zbV9mYWlsKTsKKwkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jcGYsIGJmYV9pb2NwZl9zbV9mYWlsX3N5bmMpOwogCQlicmVhazsKIAogCWNhc2UgSU9DUEZfRV9GV1JFQURZOgotCQlpZiAoYmZhX2lvY19pc19vcGVyYXRpb25hbChpb2MpKQotCQkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jcGYsIGJmYV9pb2NwZl9zbV9mYWlsKTsKLQkJZWxzZQotCQkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jcGYsIGJmYV9pb2NwZl9zbV9pbml0ZmFpbCk7Ci0KLQkJYmZhX2lvY19wZl9mYWlsZWQoaW9jKTsKKwkJaWYgKGJmYV9pb2NfaXNfb3BlcmF0aW9uYWwoaW9jKSkgeworCQkJYmZhX2ZzbV9zZW5kX2V2ZW50KGlvYywgSU9DX0VfUEZGQUlMRUQpOworCQkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jcGYsIGJmYV9pb2NwZl9zbV9mYWlsX3N5bmMpOworCQl9IGVsc2UgeworCQkJYmZhX2ZzbV9zZW5kX2V2ZW50KGlvYywgSU9DX0VfUEZGQUlMRUQpOworCQkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jcGYsIGJmYV9pb2NwZl9zbV9pbml0ZmFpbF9zeW5jKTsKKwkJfQogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC05MzUsNyArOTA4LDYgQEAKIAl9CiB9CiAKLQogc3RhdGljIHZvaWQKIGJmYV9pb2NwZl9zbV9kaXNhYmxpbmdfZW50cnkoc3RydWN0IGJmYV9pb2NwZl9zICppb2NwZikKIHsKQEAgLTk1Nyw3ICs5MjksNyBAQAogCWNhc2UgSU9DUEZfRV9GV1JTUF9ESVNBQkxFOgogCWNhc2UgSU9DUEZfRV9GV1JFQURZOgogCQliZmFfaW9jcGZfdGltZXJfc3RvcChpb2MpOwotCQliZmFfZnNtX3NldF9zdGF0ZShpb2NwZiwgYmZhX2lvY3BmX3NtX2Rpc2FibGVkKTsKKwkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jcGYsIGJmYV9pb2NwZl9zbV9kaXNhYmxpbmdfc3luYyk7CiAJCWJyZWFrOwogCiAJY2FzZSBJT0NQRl9FX0ZBSUw6CkBAIC05NjgsNyArOTQwLDcgQEAKIAogCWNhc2UgSU9DUEZfRV9USU1FT1VUOgogCQl3cml0ZWwoQkZJX0lPQ19GQUlMLCBpb2MtPmlvY19yZWdzLmlvY19md3N0YXRlKTsKLQkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jcGYsIGJmYV9pb2NwZl9zbV9kaXNhYmxlZCk7CisJCWJmYV9mc21fc2V0X3N0YXRlKGlvY3BmLCBiZmFfaW9jcGZfc21fZGlzYWJsaW5nX3N5bmMpOwogCQlicmVhazsKIAogCWNhc2UgSU9DUEZfRV9GV1JTUF9FTkFCTEU6CkBAIC05NzksMTMgKzk1MSw0NCBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQKK2JmYV9pb2NwZl9zbV9kaXNhYmxpbmdfc3luY19lbnRyeShzdHJ1Y3QgYmZhX2lvY3BmX3MgKmlvY3BmKQoreworCWJmYV9pb2NfaHdfc2VtX2dldChpb2NwZi0+aW9jKTsKK30KKworLyoKKyAqIElPQyBoYiBhY2sgcmVxdWVzdCBpcyBiZWluZyByZW1vdmVkLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvY3BmX3NtX2Rpc2FibGluZ19zeW5jKHN0cnVjdCBiZmFfaW9jcGZfcyAqaW9jcGYsIGVudW0gaW9jcGZfZXZlbnQgZXZlbnQpCit7CisJc3RydWN0IGJmYV9pb2NfcyAqaW9jID0gaW9jcGYtPmlvYzsKKworCWJmYV90cmMoaW9jLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBJT0NQRl9FX1NFTUxPQ0tFRDoKKwkJYmZhX2lvY19zeW5jX2xlYXZlKGlvYyk7CisJCXdyaXRlbCgxLCBpb2MtPmlvY19yZWdzLmlvY19zZW1fcmVnKTsKKwkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jcGYsIGJmYV9pb2NwZl9zbV9kaXNhYmxlZCk7CisJCWJyZWFrOworCisJY2FzZSBJT0NQRl9FX0ZBSUw6CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3NtX2ZhdWx0KGlvYywgZXZlbnQpOworCX0KK30KKwogLyoKICAqIElPQyBkaXNhYmxlIGNvbXBsZXRpb24gZW50cnkuCiAgKi8KIHN0YXRpYyB2b2lkCiBiZmFfaW9jcGZfc21fZGlzYWJsZWRfZW50cnkoc3RydWN0IGJmYV9pb2NwZl9zICppb2NwZikKIHsKLQliZmFfaW9jX3BmX2Rpc2FibGVkKGlvY3BmLT5pb2MpOworCWJmYV9mc21fc2VuZF9ldmVudChpb2NwZi0+aW9jLCBJT0NfRV9ESVNBQkxFRCk7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC05OTcsNiArMTAwMCw3IEBACiAKIAlzd2l0Y2ggKGV2ZW50KSB7CiAJY2FzZSBJT0NQRl9FX0VOQUJMRToKKwkJaW9jcGYtPnJldHJ5X2NvdW50ID0gMDsKIAkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jcGYsIGJmYV9pb2NwZl9zbV9zZW13YWl0KTsKIAkJYnJlYWs7CiAKQEAgLTEwMTAsMTEgKzEwMTQsNjQgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkCitiZmFfaW9jcGZfc21faW5pdGZhaWxfc3luY19lbnRyeShzdHJ1Y3QgYmZhX2lvY3BmX3MgKmlvY3BmKQoreworCWJmYV9pb2NfaHdfc2VtX2dldChpb2NwZi0+aW9jKTsKK30KKworLyoKKyAqIEhhcmR3YXJlIGluaXRpYWxpemF0aW9uIGZhaWxlZC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2NwZl9zbV9pbml0ZmFpbF9zeW5jKHN0cnVjdCBiZmFfaW9jcGZfcyAqaW9jcGYsIGVudW0gaW9jcGZfZXZlbnQgZXZlbnQpCit7CisJc3RydWN0IGJmYV9pb2NfcyAqaW9jID0gaW9jcGYtPmlvYzsKKworCWJmYV90cmMoaW9jLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBJT0NQRl9FX1NFTUxPQ0tFRDoKKwkJYmZhX2lvY19ub3RpZnlfZmFpbChpb2MpOworCQliZmFfaW9jX3N5bmNfYWNrKGlvYyk7CisJCWlvY3BmLT5yZXRyeV9jb3VudCsrOworCQlpZiAoaW9jcGYtPnJldHJ5X2NvdW50ID49IEJGQV9JT0NfSFdJTklUX01BWCkgeworCQkJYmZhX2lvY19zeW5jX2xlYXZlKGlvYyk7CisJCQl3cml0ZWwoMSwgaW9jLT5pb2NfcmVncy5pb2Nfc2VtX3JlZyk7CisJCQliZmFfZnNtX3NldF9zdGF0ZShpb2NwZiwgYmZhX2lvY3BmX3NtX2luaXRmYWlsKTsKKwkJfSBlbHNlIHsKKwkJCWlmIChiZmFfaW9jX3N5bmNfY29tcGxldGUoaW9jKSkKKwkJCQliZmFfZnNtX3NldF9zdGF0ZShpb2NwZiwgYmZhX2lvY3BmX3NtX2h3aW5pdCk7CisJCQllbHNlIHsKKwkJCQl3cml0ZWwoMSwgaW9jLT5pb2NfcmVncy5pb2Nfc2VtX3JlZyk7CisJCQkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jcGYsIGJmYV9pb2NwZl9zbV9zZW13YWl0KTsKKwkJCX0KKwkJfQorCQlicmVhazsKKworCWNhc2UgSU9DUEZfRV9ESVNBQkxFOgorCQliZmFfc2VtX3RpbWVyX3N0b3AoaW9jKTsKKwkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jcGYsIGJmYV9pb2NwZl9zbV9kaXNhYmxpbmdfc3luYyk7CisJCWJyZWFrOworCisJY2FzZSBJT0NQRl9FX1NUT1A6CisJCWJmYV9zZW1fdGltZXJfc3RvcChpb2MpOworCQliZmFfaW9jX2Zpcm13YXJlX3VubG9jayhpb2MpOworCQliZmFfZnNtX3NldF9zdGF0ZShpb2NwZiwgYmZhX2lvY3BmX3NtX3Jlc2V0KTsKKwkJYnJlYWs7CisKKwljYXNlIElPQ1BGX0VfRkFJTDoKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc21fZmF1bHQoaW9jLCBldmVudCk7CisJfQorfQogCiBzdGF0aWMgdm9pZAogYmZhX2lvY3BmX3NtX2luaXRmYWlsX2VudHJ5KHN0cnVjdCBiZmFfaW9jcGZfcyAqaW9jcGYpCiB7Ci0JYmZhX2lvY3BmX3RpbWVyX3N0YXJ0KGlvY3BmLT5pb2MpOworCWJmYV9mc21fc2VuZF9ldmVudChpb2NwZi0+aW9jLCBJT0NfRV9JTklURkFJTEVEKTsKIH0KIAogLyoKQEAgLTEwMjksNDcgKzEwODYsNzcgQEAKIAogCXN3aXRjaCAoZXZlbnQpIHsKIAljYXNlIElPQ1BGX0VfRElTQUJMRToKLQkJYmZhX2lvY3BmX3RpbWVyX3N0b3AoaW9jKTsKIAkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jcGYsIGJmYV9pb2NwZl9zbV9kaXNhYmxlZCk7CiAJCWJyZWFrOwogCiAJY2FzZSBJT0NQRl9FX1NUT1A6Ci0JCWJmYV9pb2NwZl90aW1lcl9zdG9wKGlvYyk7CiAJCWJmYV9pb2NfZmlybXdhcmVfdW5sb2NrKGlvYyk7CiAJCWJmYV9mc21fc2V0X3N0YXRlKGlvY3BmLCBiZmFfaW9jcGZfc21fcmVzZXQpOwogCQlicmVhazsKIAotCWNhc2UgSU9DUEZfRV9USU1FT1VUOgotCQliZmFfZnNtX3NldF9zdGF0ZShpb2NwZiwgYmZhX2lvY3BmX3NtX3NlbXdhaXQpOwotCQlicmVhazsKLQogCWRlZmF1bHQ6CiAJCWJmYV9zbV9mYXVsdChpb2MsIGV2ZW50KTsKIAl9CiB9CiAKLQogc3RhdGljIHZvaWQKLWJmYV9pb2NwZl9zbV9mYWlsX2VudHJ5KHN0cnVjdCBiZmFfaW9jcGZfcyAqaW9jcGYpCitiZmFfaW9jcGZfc21fZmFpbF9zeW5jX2VudHJ5KHN0cnVjdCBiZmFfaW9jcGZfcyAqaW9jcGYpCiB7CiAJLyoKIAkgKiBNYXJrIElPQyBhcyBmYWlsZWQgaW4gaGFyZHdhcmUgYW5kIHN0b3AgZmlybXdhcmUuCiAJICovCiAJYmZhX2lvY19scHVfc3RvcChpb2NwZi0+aW9jKTsKLQl3cml0ZWwoQkZJX0lPQ19GQUlMLCBpb2NwZi0+aW9jLT5pb2NfcmVncy5pb2NfZndzdGF0ZSk7Ci0KLQkvKgotCSAqIE5vdGlmeSBvdGhlciBmdW5jdGlvbnMgb24gSEIgZmFpbHVyZS4KLQkgKi8KLQliZmFfaW9jX25vdGlmeV9oYmZhaWwoaW9jcGYtPmlvYyk7CiAKIAkvKgogCSAqIEZsdXNoIGFueSBxdWV1ZWQgdXAgbWFpbGJveCByZXF1ZXN0cy4KIAkgKi8KIAliZmFfaW9jX21ib3hfaGJmYWlsKGlvY3BmLT5pb2MpOwogCi0JaWYgKGlvY3BmLT5hdXRvX3JlY292ZXIpCi0JCWJmYV9pb2NwZl9yZWNvdmVyeV90aW1lcl9zdGFydChpb2NwZi0+aW9jKTsKKwliZmFfaW9jX2h3X3NlbV9nZXQoaW9jcGYtPmlvYyk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfaW9jcGZfc21fZmFpbF9zeW5jKHN0cnVjdCBiZmFfaW9jcGZfcyAqaW9jcGYsIGVudW0gaW9jcGZfZXZlbnQgZXZlbnQpCit7CisJc3RydWN0IGJmYV9pb2NfcyAqaW9jID0gaW9jcGYtPmlvYzsKKworCWJmYV90cmMoaW9jLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBJT0NQRl9FX1NFTUxPQ0tFRDoKKwkJaW9jcGYtPnJldHJ5X2NvdW50ID0gMDsKKwkJYmZhX2lvY19zeW5jX2Fjayhpb2MpOworCQliZmFfaW9jX25vdGlmeV9mYWlsKGlvYyk7CisJCWlmICghaW9jcGYtPmF1dG9fcmVjb3ZlcikgeworCQkJYmZhX2lvY19zeW5jX2xlYXZlKGlvYyk7CisJCQl3cml0ZWwoMSwgaW9jLT5pb2NfcmVncy5pb2Nfc2VtX3JlZyk7CisJCQliZmFfZnNtX3NldF9zdGF0ZShpb2NwZiwgYmZhX2lvY3BmX3NtX2ZhaWwpOworCQl9IGVsc2UgeworCQkJaWYgKGJmYV9pb2Nfc3luY19jb21wbGV0ZShpb2MpKQorCQkJCWJmYV9mc21fc2V0X3N0YXRlKGlvY3BmLCBiZmFfaW9jcGZfc21faHdpbml0KTsKKwkJCWVsc2UgeworCQkJCXdyaXRlbCgxLCBpb2MtPmlvY19yZWdzLmlvY19zZW1fcmVnKTsKKwkJCQliZmFfZnNtX3NldF9zdGF0ZShpb2NwZiwgYmZhX2lvY3BmX3NtX3NlbXdhaXQpOworCQkJfQorCQl9CisJCWJyZWFrOworCisJY2FzZSBJT0NQRl9FX0RJU0FCTEU6CisJCWJmYV9zZW1fdGltZXJfc3RvcChpb2MpOworCQliZmFfZnNtX3NldF9zdGF0ZShpb2NwZiwgYmZhX2lvY3BmX3NtX2Rpc2FibGluZ19zeW5jKTsKKwkJYnJlYWs7CisKKwljYXNlIElPQ1BGX0VfRkFJTDoKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc21fZmF1bHQoaW9jLCBldmVudCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY3BmX3NtX2ZhaWxfZW50cnkoc3RydWN0IGJmYV9pb2NwZl9zICppb2NwZikKK3sKIH0KIAogLyoKQEAgLTEwODQsMjQgKzExNzEsMTYgQEAKIAogCXN3aXRjaCAoZXZlbnQpIHsKIAljYXNlIElPQ1BGX0VfRElTQUJMRToKLQkJaWYgKGlvY3BmLT5hdXRvX3JlY292ZXIpCi0JCQliZmFfaW9jcGZfdGltZXJfc3RvcChpb2MpOwogCQliZmFfZnNtX3NldF9zdGF0ZShpb2NwZiwgYmZhX2lvY3BmX3NtX2Rpc2FibGVkKTsKIAkJYnJlYWs7CiAKLQljYXNlIElPQ1BGX0VfVElNRU9VVDoKLQkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jcGYsIGJmYV9pb2NwZl9zbV9zZW13YWl0KTsKLQkJYnJlYWs7Ci0KIAlkZWZhdWx0OgogCQliZmFfc21fZmF1bHQoaW9jLCBldmVudCk7CiAJfQogfQogCi0KLQogLyoKLSAqICBoYWxfaW9jX3B2dCBCRkEgSU9DIHByaXZhdGUgZnVuY3Rpb25zCisgKiAgQkZBIElPQyBwcml2YXRlIGZ1bmN0aW9ucwogICovCiAKIHN0YXRpYyB2b2lkCkBAIC0xMTM5LDE2ICsxMjE4LDEwIEBACiAJaWYgKHIzMiA9PSAwKQogCQlyZXR1cm4gQkZBX1RSVUU7CiAKLQliZmFfYXNzZXJ0KGNudCA8IEJGQV9TRU1fU1BJTkNOVCk7CisJV0FSTl9PTihjbnQgPj0gQkZBX1NFTV9TUElOQ05UKTsKIAlyZXR1cm4gQkZBX0ZBTFNFOwogfQogCi12b2lkCi1iZmFfaW9jX3NlbV9yZWxlYXNlKHZvaWQgX19pb21lbSAqc2VtX3JlZykKLXsKLQl3cml0ZWwoMSwgc2VtX3JlZyk7Ci19Ci0KIHN0YXRpYyB2b2lkCiBiZmFfaW9jX2h3X3NlbV9nZXQoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQogewpAQCAtMTE2NywxOCArMTI0MCw2IEBACiAJYmZhX3NlbV90aW1lcl9zdGFydChpb2MpOwogfQogCi12b2lkCi1iZmFfaW9jX2h3X3NlbV9yZWxlYXNlKHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKLXsKLQl3cml0ZWwoMSwgaW9jLT5pb2NfcmVncy5pb2Nfc2VtX3JlZyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1iZmFfaW9jX2h3X3NlbV9nZXRfY2FuY2VsKHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKLXsKLQliZmFfc2VtX3RpbWVyX3N0b3AoaW9jKTsKLX0KLQogLyoKICAqIEluaXRpYWxpemUgTFBVIGxvY2FsIG1lbW9yeSAoYWthIHNlY29uZGFyeSBtZW1vcnkgLyBTUkFNKQogICovCkBAIC0xMjEyLDcgKzEyNzMsNyBAQAogCSAqIElmIG1lbW9yeSBpbml0aWFsaXphdGlvbiBpcyBub3Qgc3VjY2Vzc2Z1bCwgSU9DIHRpbWVvdXQgd2lsbCBjYXRjaAogCSAqIHN1Y2ggZmFpbHVyZXMuCiAJICovCi0JYmZhX2Fzc2VydChwc3NfY3RsICYgX19QU1NfTE1FTV9JTklUX0RPTkUpOworCVdBUk5fT04oIShwc3NfY3RsICYgX19QU1NfTE1FTV9JTklUX0RPTkUpKTsKIAliZmFfdHJjKGlvYywgcHNzX2N0bCk7CiAKIAlwc3NfY3RsICY9IH4oX19QU1NfTE1FTV9JTklUX0RPTkUgfCBfX1BTU19MTUVNX0lOSVRfRU4pOwpAQCAtMTI1OCw4ICsxMzE5LDggQEAKIAlpbnQJCWk7CiAJdTMyCSpmd3NpZyA9ICh1MzIgKikgZndoZHI7CiAKLQlwZ251bSA9IGJmYV9pb2Nfc21lbV9wZ251bShpb2MsIGxvZmYpOwotCXBnb2ZmID0gYmZhX2lvY19zbWVtX3Bnb2ZmKGlvYywgbG9mZik7CisJcGdudW0gPSBQU1NfU01FTV9QR05VTShpb2MtPmlvY19yZWdzLnNtZW1fcGcwLCBsb2ZmKTsKKwlwZ29mZiA9IFBTU19TTUVNX1BHT0ZGKGxvZmYpOwogCXdyaXRlbChwZ251bSwgaW9jLT5pb2NfcmVncy5ob3N0X3BhZ2VfbnVtX2ZuKTsKIAogCWZvciAoaSA9IDA7IGkgPCAoc2l6ZW9mKHN0cnVjdCBiZmlfaW9jX2ltYWdlX2hkcl9zKSAvIHNpemVvZih1MzIpKTsKQEAgLTEzMDQsMTIgKzEzNjUsNiBAQAogewogCXN0cnVjdCBiZmlfaW9jX2ltYWdlX2hkcl9zIGZ3aGRyLCAqZHJ2X2Z3aGRyOwogCi0JLyoKLQkgKiBJZiBiaW9zL2VmaSBib290IChmbGFzaCBiYXNlZCkgLS0gcmV0dXJuIHRydWUKLQkgKi8KLQlpZiAoYmZhX2lvY19pc19iaW9zX29wdHJvbShpb2MpKQotCQlyZXR1cm4gQkZBX1RSVUU7Ci0KIAliZmFfaW9jX2Z3dmVyX2dldChpb2MsICZmd2hkcik7CiAJZHJ2X2Z3aGRyID0gKHN0cnVjdCBiZmlfaW9jX2ltYWdlX2hkcl9zICopCiAJCWJmYV9jYl9pbWFnZV9nZXRfY2h1bmsoQkZBX0lPQ19GV0lNR19UWVBFKGlvYyksIDApOwpAQCAtMTM0Miw3ICsxMzk3LDYgQEAKIAkJd3JpdGVsKDEsIGlvYy0+aW9jX3JlZ3MubHB1X21ib3hfY21kKTsKIH0KIAotCiBzdGF0aWMgdm9pZAogYmZhX2lvY19od2luaXQoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBiZmFfYm9vbGVhbl90IGZvcmNlKQogewpAQCAtMTM2MiwyMiArMTQxNiw2IEBACiAJYm9vdF9lbnYgPSBCRklfQk9PVF9MT0FERVJfT1M7CiAKIAkvKgotCSAqIEZsYXNoIGJhc2VkIGZpcm13YXJlIGJvb3QgQklPUyBlbnYuCi0JICovCi0JaWYgKGJmYV9pb2NfaXNfYmlvc19vcHRyb20oaW9jKSkgewotCQlib290X3R5cGUgPSBCRklfQk9PVF9UWVBFX0ZMQVNIOwotCQlib290X2VudiA9IEJGSV9CT09UX0xPQURFUl9CSU9TOwotCX0KLQotCS8qCi0JICogRmxhc2ggYmFzZWQgZmlybXdhcmUgYm9vdCBVRUZJIGVudi4KLQkgKi8KLQlpZiAoYmZhX2lvY19pc191ZWZpKGlvYykpIHsKLQkJYm9vdF90eXBlID0gQkZJX0JPT1RfVFlQRV9GTEFTSDsKLQkJYm9vdF9lbnYgPSBCRklfQk9PVF9MT0FERVJfVUVGSTsKLQl9Ci0KLQkvKgogCSAqIGNoZWNrIGlmIGZpcm13YXJlIGlzIHZhbGlkCiAJICovCiAJZnd2YWxpZCA9IChpb2NfZndzdGF0ZSA9PSBCRklfSU9DX1VOSU5JVCkgPwpAQCAtMTQwNSw4ICsxNDQzLDcgQEAKIAkgKiBjb252ZXJnZW5jZSwgSU9DIHdpbGwgYmUgaW4gb3BlcmF0aW9uYWwgc3RhdGUgd2hlbiAybmQgZHJpdmVyCiAJICogaXMgbG9hZGVkLgogCSAqLwotCWlmIChpb2NfZndzdGF0ZSA9PSBCRklfSU9DX0RJU0FCTEVEIHx8Ci0JICAgICghYmZhX2lvY19pc19iaW9zX29wdHJvbShpb2MpICYmIGlvY19md3N0YXRlID09IEJGSV9JT0NfT1ApKSB7CisJaWYgKGlvY19md3N0YXRlID09IEJGSV9JT0NfRElTQUJMRUQgfHwgaW9jX2Z3c3RhdGUgPT0gQkZJX0lPQ19PUCkgewogCiAJCS8qCiAJCSAqIFdoZW4gdXNpbmcgTVNJLVggYW55IHBlbmRpbmcgZmlybXdhcmUgcmVhZHkgZXZlbnQgc2hvdWxkCkBAIC0xNDQyLDcgKzE0NzksNyBAQAogCWJmYV90cmMoaW9jLCBtc2dwWzBdKTsKIAliZmFfdHJjKGlvYywgbGVuKTsKIAotCWJmYV9hc3NlcnQobGVuIDw9IEJGSV9JT0NfTVNHTEVOX01BWCk7CisJV0FSTl9PTihsZW4gPiBCRklfSU9DX01TR0xFTl9NQVgpOwogCiAJLyoKIAkgKiBmaXJzdCB3cml0ZSBtc2cgdG8gbWFpbGJveCByZWdpc3RlcnMKQEAgLTE0NjUsMTIgKzE1MDIsMTIgQEAKIGJmYV9pb2Nfc2VuZF9lbmFibGUoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQogewogCXN0cnVjdCBiZmlfaW9jX2N0cmxfcmVxX3MgZW5hYmxlX3JlcTsKLQlzdHJ1Y3QgYmZhX3RpbWV2YWxfcyB0djsKKwlzdHJ1Y3QgdGltZXZhbCB0djsKIAogCWJmaV9oMmlfc2V0KGVuYWJsZV9yZXEubWgsIEJGSV9NQ19JT0MsIEJGSV9JT0NfSDJJX0VOQUJMRV9SRVEsCiAJCSAgICBiZmFfaW9jX3BvcnRpZChpb2MpKTsKIAllbmFibGVfcmVxLmlvY19jbGFzcyA9IGlvYy0+aW9jX21jOwotCWJmYV9vc19nZXR0aW1lb2ZkYXkoJnR2KTsKKwlkb19nZXR0aW1lb2ZkYXkoJnR2KTsKIAllbmFibGVfcmVxLnR2X3NlYyA9IGJlMzJfdG9fY3B1KHR2LnR2X3NlYyk7CiAJYmZhX2lvY19tYm94X3NlbmQoaW9jLCAmZW5hYmxlX3JlcSwgc2l6ZW9mKHN0cnVjdCBiZmlfaW9jX2N0cmxfcmVxX3MpKTsKIH0KQEAgLTE1MDQsNyArMTU0MSw2IEBACiAKIAloYl9jb3VudCA9IHJlYWRsKGlvYy0+aW9jX3JlZ3MuaGVhcnRiZWF0KTsKIAlpZiAoaW9jLT5oYl9jb3VudCA9PSBoYl9jb3VudCkgewotCQlwcmludGsoS0VSTl9DUklUICJGaXJtd2FyZSBoZWFydGJlYXQgZmFpbHVyZSBhdCAlZCIsIGhiX2NvdW50KTsKIAkJYmZhX2lvY19yZWNvdmVyKGlvYyk7CiAJCXJldHVybjsKIAl9IGVsc2UgewpAQCAtMTUyMiwxMyArMTU1OCw2IEBACiAJYmZhX2hiX3RpbWVyX3N0YXJ0KGlvYyk7CiB9CiAKLXN0YXRpYyB2b2lkCi1iZmFfaW9jX2hiX3N0b3Aoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQotewotCWJmYV9oYl90aW1lcl9zdG9wKGlvYyk7Ci19Ci0KLQogLyoKICAqCUluaXRpYXRlIGEgZnVsbCBmaXJtd2FyZSBkb3dubG9hZC4KICAqLwpAQCAtMTU1MCw4ICsxNTc5LDggQEAKIAliZmFfdHJjKGlvYywgYmZhX2NiX2ltYWdlX2dldF9zaXplKEJGQV9JT0NfRldJTUdfVFlQRShpb2MpKSk7CiAJZndpbWcgPSBiZmFfY2JfaW1hZ2VfZ2V0X2NodW5rKEJGQV9JT0NfRldJTUdfVFlQRShpb2MpLCBjaHVua25vKTsKIAotCXBnbnVtID0gYmZhX2lvY19zbWVtX3BnbnVtKGlvYywgbG9mZik7Ci0JcGdvZmYgPSBiZmFfaW9jX3NtZW1fcGdvZmYoaW9jLCBsb2ZmKTsKKwlwZ251bSA9IFBTU19TTUVNX1BHTlVNKGlvYy0+aW9jX3JlZ3Muc21lbV9wZzAsIGxvZmYpOworCXBnb2ZmID0gUFNTX1NNRU1fUEdPRkYobG9mZik7CiAKIAl3cml0ZWwocGdudW0sIGlvYy0+aW9jX3JlZ3MuaG9zdF9wYWdlX251bV9mbik7CiAKQEAgLTE1ODEsNyArMTYxMCw4IEBACiAJCX0KIAl9CiAKLQl3cml0ZWwoYmZhX2lvY19zbWVtX3BnbnVtKGlvYywgMCksIGlvYy0+aW9jX3JlZ3MuaG9zdF9wYWdlX251bV9mbik7CisJd3JpdGVsKFBTU19TTUVNX1BHTlVNKGlvYy0+aW9jX3JlZ3Muc21lbV9wZzAsIDApLAorCQkJaW9jLT5pb2NfcmVncy5ob3N0X3BhZ2VfbnVtX2ZuKTsKIAogCS8qCiAJICogU2V0IGJvb3QgdHlwZSBhbmQgYm9vdCBwYXJhbSBhdCB0aGUgZW5kLgpAQCAtMTU5MiwxMSArMTYyMiw2IEBACiAJCQlzd2FiMzIoYm9vdF9lbnYpKTsKIH0KIAotc3RhdGljIHZvaWQKLWJmYV9pb2NfcmVzZXQoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBiZmFfYm9vbGVhbl90IGZvcmNlKQotewotCWJmYV9pb2NfaHdpbml0KGlvYywgZm9yY2UpOwotfQogCiAvKgogICogVXBkYXRlIEJGQSBjb25maWd1cmF0aW9uIGZyb20gZmlybXdhcmUgY29uZmlndXJhdGlvbi4KQEAgLTE2ODMsMTIgKzE3MDgsMTMgQEAKIHN0YXRpYyBiZmFfc3RhdHVzX3QKIGJmYV9pb2Nfc21lbV9yZWFkKHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgdm9pZCAqdGJ1ZiwgdTMyIHNvZmYsIHUzMiBzeikKIHsKLQl1MzIgcGdudW0sIGxvZmYsIHIzMjsKKwl1MzIgcGdudW0sIGxvZmY7CisJX19iZTMyIHIzMjsKIAlpbnQgaSwgbGVuOwogCXUzMiAqYnVmID0gdGJ1ZjsKIAotCXBnbnVtID0gYmZhX2lvY19zbWVtX3BnbnVtKGlvYywgc29mZik7Ci0JbG9mZiA9IGJmYV9pb2Nfc21lbV9wZ29mZihpb2MsIHNvZmYpOworCXBnbnVtID0gUFNTX1NNRU1fUEdOVU0oaW9jLT5pb2NfcmVncy5zbWVtX3BnMCwgc29mZik7CisJbG9mZiA9IFBTU19TTUVNX1BHT0ZGKHNvZmYpOwogCWJmYV90cmMoaW9jLCBwZ251bSk7CiAJYmZhX3RyYyhpb2MsIGxvZmYpOwogCWJmYV90cmMoaW9jLCBzeik7CkBAIC0xNzE5LDExICsxNzQ1LDEyIEBACiAJCQl3cml0ZWwocGdudW0sIGlvYy0+aW9jX3JlZ3MuaG9zdF9wYWdlX251bV9mbik7CiAJCX0KIAl9Ci0Jd3JpdGVsKGJmYV9pb2Nfc21lbV9wZ251bShpb2MsIDApLCBpb2MtPmlvY19yZWdzLmhvc3RfcGFnZV9udW1fZm4pOworCXdyaXRlbChQU1NfU01FTV9QR05VTShpb2MtPmlvY19yZWdzLnNtZW1fcGcwLCAwKSwKKwkJCWlvYy0+aW9jX3JlZ3MuaG9zdF9wYWdlX251bV9mbik7CiAJLyoKIAkgKiAgcmVsZWFzZSBzZW1hcGhvcmUuCiAJICovCi0JYmZhX2lvY19zZW1fcmVsZWFzZShpb2MtPmlvY19yZWdzLmlvY19pbml0X3NlbV9yZWcpOworCXdyaXRlbCgxLCBpb2MtPmlvY19yZWdzLmlvY19pbml0X3NlbV9yZWcpOwogCiAJYmZhX3RyYyhpb2MsIHBnbnVtKTsKIAlyZXR1cm4gQkZBX1NUQVRVU19PSzsKQEAgLTE3NDIsOCArMTc2OSw4IEBACiAJaW50IGksIGxlbjsKIAl1MzIgcGdudW0sIGxvZmY7CiAKLQlwZ251bSA9IGJmYV9pb2Nfc21lbV9wZ251bShpb2MsIHNvZmYpOwotCWxvZmYgPSBiZmFfaW9jX3NtZW1fcGdvZmYoaW9jLCBzb2ZmKTsKKwlwZ251bSA9IFBTU19TTUVNX1BHTlVNKGlvYy0+aW9jX3JlZ3Muc21lbV9wZzAsIHNvZmYpOworCWxvZmYgPSBQU1NfU01FTV9QR09GRihzb2ZmKTsKIAliZmFfdHJjKGlvYywgcGdudW0pOwogCWJmYV90cmMoaW9jLCBsb2ZmKTsKIAliZmFfdHJjKGlvYywgc3opOwpAQCAtMTc3MywzNSArMTgwMCwzOCBAQAogCQkJd3JpdGVsKHBnbnVtLCBpb2MtPmlvY19yZWdzLmhvc3RfcGFnZV9udW1fZm4pOwogCQl9CiAJfQotCXdyaXRlbChiZmFfaW9jX3NtZW1fcGdudW0oaW9jLCAwKSwgaW9jLT5pb2NfcmVncy5ob3N0X3BhZ2VfbnVtX2ZuKTsKKwl3cml0ZWwoUFNTX1NNRU1fUEdOVU0oaW9jLT5pb2NfcmVncy5zbWVtX3BnMCwgMCksCisJCQlpb2MtPmlvY19yZWdzLmhvc3RfcGFnZV9udW1fZm4pOwogCiAJLyoKIAkgKiAgcmVsZWFzZSBzZW1hcGhvcmUuCiAJICovCi0JYmZhX2lvY19zZW1fcmVsZWFzZShpb2MtPmlvY19yZWdzLmlvY19pbml0X3NlbV9yZWcpOworCXdyaXRlbCgxLCBpb2MtPmlvY19yZWdzLmlvY19pbml0X3NlbV9yZWcpOwogCWJmYV90cmMoaW9jLCBwZ251bSk7CiAJcmV0dXJuIEJGQV9TVEFUVVNfT0s7CiB9CiAKLS8qCi0gKiBoYWwgaW9jcGYgdG8gaW9jIGludGVyZmFjZQotICovCiBzdGF0aWMgdm9pZAotYmZhX2lvY19wZl9lbmFibGVkKHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK2JmYV9pb2NfZmFpbF9ub3RpZnkoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQogewotCWJmYV9mc21fc2VuZF9ldmVudChpb2MsIElPQ19FX0VOQUJMRUQpOwotfQorCXN0cnVjdCBsaXN0X2hlYWQJCSpxZTsKKwlzdHJ1Y3QgYmZhX2lvY19oYmZhaWxfbm90aWZ5X3MJKm5vdGlmeTsKKwlzdHJ1Y3QgYmZhZF9zICpiZmFkID0gKHN0cnVjdCBiZmFkX3MgKilpb2MtPmJmYS0+YmZhZDsKIAotc3RhdGljIHZvaWQKLWJmYV9pb2NfcGZfZGlzYWJsZWQoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQotewotCWJmYV9mc21fc2VuZF9ldmVudChpb2MsIElPQ19FX0RJU0FCTEVEKTsKLX0KKwkvKgorCSAqIE5vdGlmeSBkcml2ZXIgYW5kIGNvbW1vbiBtb2R1bGVzIHJlZ2lzdGVyZWQgZm9yIG5vdGlmaWNhdGlvbi4KKwkgKi8KKwlpb2MtPmNiZm4tPmhiZmFpbF9jYmZuKGlvYy0+YmZhKTsKKwlsaXN0X2Zvcl9lYWNoKHFlLCAmaW9jLT5oYl9ub3RpZnlfcSkgeworCQlub3RpZnkgPSAoc3RydWN0IGJmYV9pb2NfaGJmYWlsX25vdGlmeV9zICopIHFlOworCQlub3RpZnktPmNiZm4obm90aWZ5LT5jYmFyZyk7CisJfQogCi1zdGF0aWMgdm9pZAotYmZhX2lvY19wZl9mYWlsZWQoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQotewotCWJmYV9mc21fc2VuZF9ldmVudChpb2MsIElPQ19FX0ZBSUxFRCk7CisJYmZhX2lvY19kZWJ1Z19zYXZlX2Z0cmMoaW9jKTsKKworCUJGQV9MT0coS0VSTl9DUklULCBiZmFkLCBiZmFfbG9nX2xldmVsLAorCQkiSGVhcnQgQmVhdCBvZiBJT0MgaGFzIGZhaWxlZFxuIik7CisKIH0KIAogc3RhdGljIHZvaWQKQEAgLTE4MTcsMTIgKzE4NDcsNiBAQAogCQkid2l0aCB0aGUgZHJpdmVyIHZlcnNpb25cbiIpOwogfQogCi0KLQotLyoKLSAqICBoYWxfaW9jX3B1YmxpYwotICovCi0KIGJmYV9zdGF0dXNfdAogYmZhX2lvY19wbGxfaW5pdChzdHJ1Y3QgYmZhX2lvY19zICppb2MpCiB7CkBAIC0xODM4LDcgKzE4NjIsNyBAQAogCS8qCiAJICogIHJlbGVhc2Ugc2VtYXBob3JlLgogCSAqLwotCWJmYV9pb2Nfc2VtX3JlbGVhc2UoaW9jLT5pb2NfcmVncy5pb2NfaW5pdF9zZW1fcmVnKTsKKwl3cml0ZWwoMSwgaW9jLT5pb2NfcmVncy5pb2NfaW5pdF9zZW1fcmVnKTsKIAogCXJldHVybiBCRkFfU1RBVFVTX09LOwogfQpAQCAtMTkwOSw3ICsxOTMzLDcgQEAKIHZvaWQKIGJmYV9pb2NfbXNnZ2V0KHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgdm9pZCAqbWJtc2cpCiB7Ci0JdTMyCSptc2dwID0gbWJtc2c7CisJX19iZTMyCSptc2dwID0gbWJtc2c7CiAJdTMyCXIzMjsKIAlpbnQJCWk7CiAKQEAgLTE5NjIsNyArMTk4Niw3IEBACiAKIAlkZWZhdWx0OgogCQliZmFfdHJjKGlvYywgbXNnLT5taC5tc2dfaWQpOwotCQliZmFfYXNzZXJ0KDApOworCQlXQVJOX09OKDEpOwogCX0KIH0KIApAQCAtMjA0MywxNSArMjA2Nyw2IEBACiAJaW9jLT5hdHRyID0gKHN0cnVjdCBiZmlfaW9jX2F0dHJfcyAqKSBkbV9rdmE7CiB9CiAKLS8qCi0gKiBSZXR1cm4gc2l6ZSBvZiBkbWEgbWVtb3J5IHJlcXVpcmVkLgotICovCi11MzIKLWJmYV9pb2NfbWVtaW5mbyh2b2lkKQotewotCXJldHVybiBCRkFfUk9VTkRVUChzaXplb2Yoc3RydWN0IGJmaV9pb2NfYXR0cl9zKSwgQkZBX0RNQV9BTElHTl9TWik7Ci19Ci0KIHZvaWQKIGJmYV9pb2NfZW5hYmxlKHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKIHsKQEAgLTIwNjgsMTggKzIwODMsNiBAQAogCWJmYV9mc21fc2VuZF9ldmVudChpb2MsIElPQ19FX0RJU0FCTEUpOwogfQogCi0vKgotICogUmV0dXJucyBtZW1vcnkgcmVxdWlyZWQgZm9yIHNhdmluZyBmaXJtd2FyZSB0cmFjZSBpbiBjYXNlIG9mIGNyYXNoLgotICogRHJpdmVyIG11c3QgY2FsbCB0aGlzIGludGVyZmFjZSB0byBhbGxvY2F0ZSBtZW1vcnkgcmVxdWlyZWQgZm9yCi0gKiBhdXRvbWF0aWMgc2F2aW5nIG9mIGZpcm13YXJlIHRyYWNlLiBEcml2ZXIgc2hvdWxkIGNhbGwKLSAqIGJmYV9pb2NfZGVidWdfbWVtY2xhaW0oKSByaWdodCBhZnRlciBiZmFfaW9jX2F0dGFjaCgpIHRvIHNldHVwIHRoaXMKLSAqIHRyYWNlIG1lbW9yeS4KLSAqLwotaW50Ci1iZmFfaW9jX2RlYnVnX3RyY3N6KGJmYV9ib29sZWFuX3QgYXV0b19yZWNvdmVyKQotewotCXJldHVybiAoYXV0b19yZWNvdmVyKSA/IEJGQV9EQkdfRldUUkNfTEVOIDogMDsKLX0KIAogLyoKICAqIEluaXRpYWxpemUgbWVtb3J5IGZvciBzYXZpbmcgZmlybXdhcmUgdHJhY2UuIERyaXZlciBtdXN0IGluaXRpYWxpemUKQEAgLTIwODksMTkgKzIwOTIsNyBAQAogYmZhX2lvY19kZWJ1Z19tZW1jbGFpbShzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHZvaWQgKmRiZ19md3NhdmUpCiB7CiAJaW9jLT5kYmdfZndzYXZlCSAgICA9IGRiZ19md3NhdmU7Ci0JaW9jLT5kYmdfZndzYXZlX2xlbiA9IGJmYV9pb2NfZGVidWdfdHJjc3ooaW9jLT5pb2NwZi5hdXRvX3JlY292ZXIpOwotfQotCi11MzIKLWJmYV9pb2Nfc21lbV9wZ251bShzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHUzMiBmbWFkZHIpCi17Ci0JcmV0dXJuIFBTU19TTUVNX1BHTlVNKGlvYy0+aW9jX3JlZ3Muc21lbV9wZzAsIGZtYWRkcik7Ci19Ci0KLXUzMgotYmZhX2lvY19zbWVtX3Bnb2ZmKHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgdTMyIGZtYWRkcikKLXsKLQlyZXR1cm4gUFNTX1NNRU1fUEdPRkYoZm1hZGRyKTsKKwlpb2MtPmRiZ19md3NhdmVfbGVuID0gKGlvYy0+aW9jcGYuYXV0b19yZWNvdmVyKSA/IEJGQV9EQkdfRldUUkNfTEVOIDogMDsKIH0KIAogLyoKQEAgLTIyNjUsMTQgKzIyNTYsMTMgQEAKIH0KIAogLyoKLSAqIEFkZCB0byBJT0MgaGVhcnRiZWF0IGZhaWx1cmUgbm90aWZpY2F0aW9uIHF1ZXVlLiBUbyBiZSB1c2VkIGJ5IGNvbW1vbgotICogbW9kdWxlcyBzdWNoIGFzIGNlZSwgcG9ydCwgZGlhZy4KKyAqIFJlc2V0IElPQyBmd3N0YXRlIHJlZ2lzdGVycy4KICAqLwogdm9pZAotYmZhX2lvY19oYmZhaWxfcmVnaXN0ZXIoc3RydWN0IGJmYV9pb2NfcyAqaW9jLAotCQkJc3RydWN0IGJmYV9pb2NfaGJmYWlsX25vdGlmeV9zICpub3RpZnkpCitiZmFfaW9jX3Jlc2V0X2Z3c3RhdGUoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQogewotCWxpc3RfYWRkX3RhaWwoJm5vdGlmeS0+cWUsICZpb2MtPmhiX25vdGlmeV9xKTsKKwl3cml0ZWwoQkZJX0lPQ19VTklOSVQsIGlvYy0+aW9jX3JlZ3MuaW9jX2Z3c3RhdGUpOworCXdyaXRlbChCRklfSU9DX1VOSU5JVCwgaW9jLT5pb2NfcmVncy5hbHRfaW9jX2Z3c3RhdGUpOwogfQogCiAjZGVmaW5lIEJGQV9NRkdfTkFNRSAiQnJvY2FkZSIKQEAgLTIzMDYsNyArMjI5Niw3IEBACiAJZWxzZQogCQlhZF9hdHRyLT5wcm90b3R5cGUgPSAwOwogCi0JYWRfYXR0ci0+cHd3biA9IGJmYV9pb2NfZ2V0X3B3d24oaW9jKTsKKwlhZF9hdHRyLT5wd3duID0gaW9jLT5hdHRyLT5wd3duOwogCWFkX2F0dHItPm1hYyAgPSBiZmFfaW9jX2dldF9tYWMoaW9jKTsKIAogCWFkX2F0dHItPnBjaWVfZ2VuID0gaW9jX2F0dHItPnBjaWVfZ2VuOwpAQCAtMjMxNyw3ICsyMzA3LDggQEAKIAliZmFfaW9jX2dldF9wY2lfY2hpcF9yZXYoaW9jLCBhZF9hdHRyLT5od192ZXIpOwogCiAJYWRfYXR0ci0+Y25hX2NhcGFibGUgPSBpb2MtPmNuYTsKLQlhZF9hdHRyLT50cnVua19jYXBhYmxlID0gKGFkX2F0dHItPm5wb3J0cyA+IDEpICYmICFpb2MtPmNuYTsKKwlhZF9hdHRyLT50cnVua19jYXBhYmxlID0gKGFkX2F0dHItPm5wb3J0cyA+IDEpICYmICFpb2MtPmNuYSAmJgorCQkJCSFhZF9hdHRyLT5pc19tZXp6OwogfQogCiBlbnVtIGJmYV9pb2NfdHlwZV9lCkBAIC0yMzMwLDcgKzIzMjEsNyBAQAogCWVsc2UgaWYgKGlvYy0+aW9jX21jID09IEJGSV9NQ19MTCkKIAkJcmV0dXJuIEJGQV9JT0NfVFlQRV9MTDsKIAllbHNlIHsKLQkJYmZhX2Fzc2VydChpb2MtPmlvY19tYyA9PSBCRklfTUNfTEwpOworCQlXQVJOX09OKGlvYy0+aW9jX21jICE9IEJGSV9NQ19MTCk7CiAJCXJldHVybiBCRkFfSU9DX1RZUEVfTEw7CiAJfQogfQpAQCAtMjM1NCw3ICsyMzQ1LDcgQEAKIHZvaWQKIGJmYV9pb2NfZ2V0X3BjaV9jaGlwX3JldihzdHJ1Y3QgYmZhX2lvY19zICppb2MsIGNoYXIgKmNoaXBfcmV2KQogewotCWJmYV9hc3NlcnQoY2hpcF9yZXYpOworCVdBUk5fT04oIWNoaXBfcmV2KTsKIAogCW1lbXNldCgodm9pZCAqKWNoaXBfcmV2LCAwLCBCRkFfSU9DX0NISVBfUkVWX0xFTik7CiAKQEAgLTIzODYsNyArMjM3Nyw3IEBACiB7CiAJc3RydWN0IGJmaV9pb2NfYXR0cl9zCSppb2NfYXR0cjsKIAotCWJmYV9hc3NlcnQobW9kZWwpOworCVdBUk5fT04oIW1vZGVsKTsKIAltZW1zZXQoKHZvaWQgKiltb2RlbCwgMCwgQkZBX0FEQVBURVJfTU9ERUxfTkFNRV9MRU4pOwogCiAJaW9jX2F0dHIgPSBpb2MtPmF0dHI7CkBAIC0yNDU1LDI3ICsyNDQ2LDYgQEAKIAliZmFfaW9jX2dldF9wY2lfY2hpcF9yZXYoaW9jLCBpb2NfYXR0ci0+cGNpX2F0dHIuY2hpcF9yZXYpOwogfQogCi0vKgotICogIGhhbF93d25fcHVibGljCi0gKi8KLXd3bl90Ci1iZmFfaW9jX2dldF9wd3duKHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKLXsKLQlyZXR1cm4gaW9jLT5hdHRyLT5wd3duOwotfQotCi13d25fdAotYmZhX2lvY19nZXRfbnd3bihzdHJ1Y3QgYmZhX2lvY19zICppb2MpCi17Ci0JcmV0dXJuIGlvYy0+YXR0ci0+bnd3bjsKLX0KLQotdTY0Ci1iZmFfaW9jX2dldF9hZGlkKHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKLXsKLQlyZXR1cm4gaW9jLT5hdHRyLT5tZmdfcHd3bjsKLX0KLQogbWFjX3QKIGJmYV9pb2NfZ2V0X21hYyhzdHJ1Y3QgYmZhX2lvY19zICppb2MpCiB7CkBAIC0yNDg4LDE4ICsyNDU4LDYgQEAKIAkJcmV0dXJuIGlvYy0+YXR0ci0+bWFjOwogfQogCi13d25fdAotYmZhX2lvY19nZXRfbWZnX3B3d24oc3RydWN0IGJmYV9pb2NfcyAqaW9jKQotewotCXJldHVybiBpb2MtPmF0dHItPm1mZ19wd3duOwotfQotCi13d25fdAotYmZhX2lvY19nZXRfbWZnX253d24oc3RydWN0IGJmYV9pb2NfcyAqaW9jKQotewotCXJldHVybiBpb2MtPmF0dHItPm1mZ19ud3duOwotfQotCiBtYWNfdAogYmZhX2lvY19nZXRfbWZnX21hYyhzdHJ1Y3QgYmZhX2lvY19zICppb2MpCiB7CkBAIC0yNTQxLDE0ICsyNDk5LDYgQEAKIAlyZXR1cm4gQkZBX1NUQVRVU19PSzsKIH0KIAotLyoKLSAqIENsZWFyIHNhdmVkIGZpcm13YXJlIHRyYWNlCi0gKi8KLXZvaWQKLWJmYV9pb2NfZGVidWdfZndzYXZlX2NsZWFyKHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKLXsKLQlpb2MtPmRiZ19md3NhdmVfb25jZSA9IEJGQV9UUlVFOwotfQogCiAvKgogICogUmV0cmlldmUgc2F2ZWQgZmlybXdhcmUgdHJhY2UgZnJvbSBhIHByaW9yIElPQyBmYWlsdXJlLgpAQCAtMjcwMSwxMyArMjY1MSwxNiBAQAogICogU2F2ZSBmaXJtd2FyZSB0cmFjZSBpZiBjb25maWd1cmVkLgogICovCiBzdGF0aWMgdm9pZAotYmZhX2lvY19kZWJ1Z19zYXZlKHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK2JmYV9pb2NfZGVidWdfc2F2ZV9mdHJjKHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKIHsKIAlpbnQJCXRsZW47CiAKLQlpZiAoaW9jLT5kYmdfZndzYXZlX2xlbikgewotCQl0bGVuID0gaW9jLT5kYmdfZndzYXZlX2xlbjsKLQkJYmZhX2lvY19kZWJ1Z19md3RyYyhpb2MsIGlvYy0+ZGJnX2Z3c2F2ZSwgJnRsZW4pOworCWlmIChpb2MtPmRiZ19md3NhdmVfb25jZSkgeworCQlpb2MtPmRiZ19md3NhdmVfb25jZSA9IEJGQV9GQUxTRTsKKwkJaWYgKGlvYy0+ZGJnX2Z3c2F2ZV9sZW4pIHsKKwkJCXRsZW4gPSBpb2MtPmRiZ19md3NhdmVfbGVuOworCQkJYmZhX2lvY19kZWJ1Z19md3RyYyhpb2MsIGlvYy0+ZGJnX2Z3c2F2ZSwgJnRsZW4pOworCQl9CiAJfQogfQogCkBAIC0yNzE3LDExICsyNjcwLDYgQEAKIHN0YXRpYyB2b2lkCiBiZmFfaW9jX3JlY292ZXIoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQogewotCWlmIChpb2MtPmRiZ19md3NhdmVfb25jZSkgewotCQlpb2MtPmRiZ19md3NhdmVfb25jZSA9IEJGQV9GQUxTRTsKLQkJYmZhX2lvY19kZWJ1Z19zYXZlKGlvYyk7Ci0JfQotCiAJYmZhX2lvY19zdGF0cyhpb2MsIGlvY19oYmZhaWxzKTsKIAliZmFfZnNtX3NlbmRfZXZlbnQoaW9jLCBJT0NfRV9IQkZBSUwpOwogfQpAQCAtMjczNCw0NSArMjY4Miw4IEBACiB9CiAKIC8qCi0gKiAgaGFsX2lvY3BmX3B2dCBCRkEgSU9DIFBGIHByaXZhdGUgZnVuY3Rpb25zCisgKiAgQkZBIElPQyBQRiBwcml2YXRlIGZ1bmN0aW9ucwogICovCi0KLXN0YXRpYyB2b2lkCi1iZmFfaW9jcGZfZW5hYmxlKHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKLXsKLQliZmFfZnNtX3NlbmRfZXZlbnQoJmlvYy0+aW9jcGYsIElPQ1BGX0VfRU5BQkxFKTsKLX0KLQotc3RhdGljIHZvaWQKLWJmYV9pb2NwZl9kaXNhYmxlKHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKLXsKLQliZmFfZnNtX3NlbmRfZXZlbnQoJmlvYy0+aW9jcGYsIElPQ1BGX0VfRElTQUJMRSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1iZmFfaW9jcGZfZmFpbChzdHJ1Y3QgYmZhX2lvY19zICppb2MpCi17Ci0JYmZhX2ZzbV9zZW5kX2V2ZW50KCZpb2MtPmlvY3BmLCBJT0NQRl9FX0ZBSUwpOwotfQotCi1zdGF0aWMgdm9pZAotYmZhX2lvY3BmX2luaXRmYWlsKHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKLXsKLQliZmFfZnNtX3NlbmRfZXZlbnQoJmlvYy0+aW9jcGYsIElPQ1BGX0VfSU5JVEZBSUwpOwotfQotCi1zdGF0aWMgdm9pZAotYmZhX2lvY3BmX2dldGF0dHJmYWlsKHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKLXsKLQliZmFfZnNtX3NlbmRfZXZlbnQoJmlvYy0+aW9jcGYsIElPQ1BGX0VfR0VUQVRUUkZBSUwpOwotfQotCi1zdGF0aWMgdm9pZAotYmZhX2lvY3BmX3N0b3Aoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQotewotCWJmYV9mc21fc2VuZF9ldmVudCgmaW9jLT5pb2NwZiwgSU9DUEZfRV9TVE9QKTsKLX0KLQogc3RhdGljIHZvaWQKIGJmYV9pb2NwZl90aW1lb3V0KHZvaWQgKmlvY19hcmcpCiB7CkBAIC0yNzk0LDEyICsyNzA1LDYgQEAKICAqICBiZmEgdGltZXIgZnVuY3Rpb24KICAqLwogdm9pZAotYmZhX3RpbWVyX2luaXQoc3RydWN0IGJmYV90aW1lcl9tb2RfcyAqbW9kKQotewotCUlOSVRfTElTVF9IRUFEKCZtb2QtPnRpbWVyX3EpOwotfQotCi12b2lkCiBiZmFfdGltZXJfYmVhdChzdHJ1Y3QgYmZhX3RpbWVyX21vZF9zICptb2QpCiB7CiAJc3RydWN0IGxpc3RfaGVhZCAqcWggPSAmbW9kLT50aW1lcl9xOwpAQCAtMjg0Myw4ICsyNzQ4LDggQEAKIAkJICAgIHZvaWQgKCp0aW1lcmNiKSAodm9pZCAqKSwgdm9pZCAqYXJnLCB1bnNpZ25lZCBpbnQgdGltZW91dCkKIHsKIAotCWJmYV9hc3NlcnQodGltZXJjYiAhPSBOVUxMKTsKLQliZmFfYXNzZXJ0KCFiZmFfcV9pc19vbl9xKCZtb2QtPnRpbWVyX3EsIHRpbWVyKSk7CisJV0FSTl9PTih0aW1lcmNiID09IE5VTEwpOworCVdBUk5fT04oYmZhX3FfaXNfb25fcSgmbW9kLT50aW1lcl9xLCB0aW1lcikpOwogCiAJdGltZXItPnRpbWVvdXQgPSB0aW1lb3V0OwogCXRpbWVyLT50aW1lcmNiID0gdGltZXJjYjsKQEAgLTI4NTksNyArMjc2NCw3IEBACiB2b2lkCiBiZmFfdGltZXJfc3RvcChzdHJ1Y3QgYmZhX3RpbWVyX3MgKnRpbWVyKQogewotCWJmYV9hc3NlcnQoIWxpc3RfZW1wdHkoJnRpbWVyLT5xZSkpOworCVdBUk5fT04obGlzdF9lbXB0eSgmdGltZXItPnFlKSk7CiAKIAlsaXN0X2RlbCgmdGltZXItPnFlKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2lvYy5oIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW9jLmgKaW5kZXggOWM0MDdhOC4uZWM5Y2YwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW9jLmgKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW9jLmgKQEAgLTE4LDEwICsxOCwxNSBAQAogI2lmbmRlZiBfX0JGQV9JT0NfSF9fCiAjZGVmaW5lIF9fQkZBX0lPQ19IX18KIAotI2luY2x1ZGUgImJmYV9vc19pbmMuaCIKKyNpbmNsdWRlICJiZmFkX2Rydi5oIgogI2luY2x1ZGUgImJmYV9jcy5oIgogI2luY2x1ZGUgImJmaS5oIgogCisjZGVmaW5lIEJGQV9EQkdfRldUUkNfRU5UUwkoQkZJX0lPQ19UUkNfRU5UUykKKyNkZWZpbmUgQkZBX0RCR19GV1RSQ19MRU4JCQkJCVwKKwkoQkZBX0RCR19GV1RSQ19FTlRTICogc2l6ZW9mKHN0cnVjdCBiZmFfdHJjX3MpICsJXAorCShzaXplb2Yoc3RydWN0IGJmYV90cmNfbW9kX3MpIC0JCQkJXAorCUJGQV9UUkNfTUFYICogc2l6ZW9mKHN0cnVjdCBiZmFfdHJjX3MpKSkKIC8qCiAgKiBCRkEgdGltZXIgZGVjbGFyYXRpb25zCiAgKi8KQEAgLTQ3LDcgKzUyLDYgQEAKICNkZWZpbmUgQkZBX1RJTUVSX0ZSRVEgMjAwIC8qIHNwZWNpZmllZCBpbiBtaWxsaXNlY3MgKi8KIAogdm9pZCBiZmFfdGltZXJfYmVhdChzdHJ1Y3QgYmZhX3RpbWVyX21vZF9zICptb2QpOwotdm9pZCBiZmFfdGltZXJfaW5pdChzdHJ1Y3QgYmZhX3RpbWVyX21vZF9zICptb2QpOwogdm9pZCBiZmFfdGltZXJfYmVnaW4oc3RydWN0IGJmYV90aW1lcl9tb2RfcyAqbW9kLCBzdHJ1Y3QgYmZhX3RpbWVyX3MgKnRpbWVyLAogCQkJYmZhX3RpbWVyX2NiZm5fdCB0aW1lcmNiLCB2b2lkICphcmcsCiAJCQl1bnNpZ25lZCBpbnQgdGltZW91dCk7CkBAIC03MCw3ICs3NCw3IEBACiAjZGVmaW5lIGJmYV9zd2FwX3dvcmRzKF94KSAgKAlcCiAJKChfeCkgPDwgMzIpIHwgKChfeCkgPj4gMzIpKQogCi0jaWZkZWYgX19CSUdFTkRJQU4KKyNpZmRlZiBfX0JJR19FTkRJQU4KICNkZWZpbmUgYmZhX3NnZV90b19iZShfeCkKICNkZWZpbmUgYmZhX3NnZV90b19sZShfeCkJYmZhX3NnZV93b3JkX3N3YXAoX3gpCiAjZGVmaW5lIGJmYV9zZ2FkZHJfbGUoX3gpCWJmYV9zd2FwX3dvcmRzKF94KQpAQCAtMTE1LDggKzExOSw4IEBACiBzdGF0aWMgaW5saW5lIHZvaWQKIF9fYmZhX2RtYV9hZGRyX3NldCh1bmlvbiBiZmlfYWRkcl91ICpkbWFfYWRkciwgdTY0IHBhKQogewotCWRtYV9hZGRyLT5hMzIuYWRkcl9sbyA9ICh1MzIpIHBhOwotCWRtYV9hZGRyLT5hMzIuYWRkcl9oaSA9ICh1MzIpIChiZmFfb3NfdTMyKHBhKSk7CisJZG1hX2FkZHItPmEzMi5hZGRyX2xvID0gKF9fYmUzMikgcGE7CisJZG1hX2FkZHItPmEzMi5hZGRyX2hpID0gKF9fYmUzMikgKHBhID4+IDMyKTsKIH0KIAogCkBAIC0xMjUsOCArMTI5LDggQEAKIHN0YXRpYyBpbmxpbmUgdm9pZAogX19iZmFfZG1hX2JlX2FkZHJfc2V0KHVuaW9uIGJmaV9hZGRyX3UgKmRtYV9hZGRyLCB1NjQgcGEpCiB7Ci0JZG1hX2FkZHItPmEzMi5hZGRyX2xvID0gKHUzMikgY3B1X3RvX2JlMzIocGEpOwotCWRtYV9hZGRyLT5hMzIuYWRkcl9oaSA9ICh1MzIpIGNwdV90b19iZTMyKGJmYV9vc191MzIocGEpKTsKKwlkbWFfYWRkci0+YTMyLmFkZHJfbG8gPSBjcHVfdG9fYmUzMihwYSk7CisJZG1hX2FkZHItPmEzMi5hZGRyX2hpID0gY3B1X3RvX2JlMzIocGEgPj4gMzIpOwogfQogCiBzdHJ1Y3QgYmZhX2lvY19yZWdzX3MgewpAQCAtMTQ1LDggKzE0OSwxMSBAQAogCXZvaWQgX19pb21lbSAqaG9zdF9wYWdlX251bV9mbjsKIAl2b2lkIF9faW9tZW0gKmhlYXJ0YmVhdDsKIAl2b2lkIF9faW9tZW0gKmlvY19md3N0YXRlOworCXZvaWQgX19pb21lbSAqYWx0X2lvY19md3N0YXRlOwogCXZvaWQgX19pb21lbSAqbGxfaGFsdDsKKwl2b2lkIF9faW9tZW0gKmFsdF9sbF9oYWx0OwogCXZvaWQgX19pb21lbSAqZXJyX3NldDsKKwl2b2lkIF9faW9tZW0gKmlvY19mYWlsX3N5bmM7CiAJdm9pZCBfX2lvbWVtICpzaGlycV9pc3JfbmV4dDsKIAl2b2lkIF9faW9tZW0gKnNoaXJxX21za19uZXh0OwogCXZvaWQgX19pb21lbSAqc21lbV9wYWdlX3N0YXJ0OwpAQCAtMjU0LDggKzI2MSwxMiBAQAogCXZvaWQJCSgqaW9jX21hcF9wb3J0KQkoc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKIAl2b2lkCQkoKmlvY19pc3JfbW9kZV9zZXQpCShzdHJ1Y3QgYmZhX2lvY19zICppb2MsCiAJCQkJCWJmYV9ib29sZWFuX3QgbXNpeCk7Ci0Jdm9pZAkJKCppb2Nfbm90aWZ5X2hiZmFpbCkJKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CisJdm9pZAkJKCppb2Nfbm90aWZ5X2ZhaWwpCShzdHJ1Y3QgYmZhX2lvY19zICppb2MpOwogCXZvaWQJCSgqaW9jX293bmVyc2hpcF9yZXNldCkJKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CisJdm9pZAkJKCppb2Nfc3luY19qb2luKQkoc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKKwl2b2lkCQkoKmlvY19zeW5jX2xlYXZlKQkoc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKKwl2b2lkCQkoKmlvY19zeW5jX2FjaykJCShzdHJ1Y3QgYmZhX2lvY19zICppb2MpOworCWJmYV9ib29sZWFuX3QJKCppb2Nfc3luY19jb21wbGV0ZSkJKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CiB9OwogCiAjZGVmaW5lIGJmYV9pb2NfcGNpZm4oX19pb2MpCQkoKF9faW9jKS0+cGNpZGV2LnBjaV9mdW5jKQpAQCAtMzI1LDcgKzMzNiw2IEBACiB2b2lkIGJmYV9pb2NfZGV0YWNoKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CiB2b2lkIGJmYV9pb2NfcGNpX2luaXQoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBzdHJ1Y3QgYmZhX3BjaWRldl9zICpwY2lkZXYsCiAJCWVudW0gYmZpX21jbGFzcyBtYyk7Ci11MzIgYmZhX2lvY19tZW1pbmZvKHZvaWQpOwogdm9pZCBiZmFfaW9jX21lbV9jbGFpbShzdHJ1Y3QgYmZhX2lvY19zICppb2MsICB1OCAqZG1fa3ZhLCB1NjQgZG1fcGEpOwogdm9pZCBiZmFfaW9jX2VuYWJsZShzdHJ1Y3QgYmZhX2lvY19zICppb2MpOwogdm9pZCBiZmFfaW9jX2Rpc2FibGUoc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKQEAgLTM0MCw2ICszNTAsNyBAQAogYmZhX2Jvb2xlYW5fdCBiZmFfaW9jX2lzX2Rpc2FibGVkKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CiBiZmFfYm9vbGVhbl90IGJmYV9pb2NfZndfbWlzbWF0Y2goc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKIGJmYV9ib29sZWFuX3QgYmZhX2lvY19hZGFwdGVyX2lzX2Rpc2FibGVkKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7Cit2b2lkIGJmYV9pb2NfcmVzZXRfZndzdGF0ZShzdHJ1Y3QgYmZhX2lvY19zICppb2MpOwogZW51bSBiZmFfaW9jX3R5cGVfZSBiZmFfaW9jX2dldF90eXBlKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CiB2b2lkIGJmYV9pb2NfZ2V0X2FkYXB0ZXJfc2VyaWFsX251bShzdHJ1Y3QgYmZhX2lvY19zICppb2MsIGNoYXIgKnNlcmlhbF9udW0pOwogdm9pZCBiZmFfaW9jX2dldF9hZGFwdGVyX2Z3X3ZlcihzdHJ1Y3QgYmZhX2lvY19zICppb2MsIGNoYXIgKmZ3X3Zlcik7CkBAIC0zNTMsMjQgKzM2NCwxNiBAQAogdm9pZCBiZmFfaW9jX2dldF9hdHRyKHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgc3RydWN0IGJmYV9pb2NfYXR0cl9zICppb2NfYXR0cik7CiB2b2lkIGJmYV9pb2NfZ2V0X2FkYXB0ZXJfYXR0cihzdHJ1Y3QgYmZhX2lvY19zICppb2MsCiAJCXN0cnVjdCBiZmFfYWRhcHRlcl9hdHRyX3MgKmFkX2F0dHIpOwotaW50IGJmYV9pb2NfZGVidWdfdHJjc3ooYmZhX2Jvb2xlYW5fdCBhdXRvX3JlY292ZXIpOwogdm9pZCBiZmFfaW9jX2RlYnVnX21lbWNsYWltKHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgdm9pZCAqZGJnX2Z3c2F2ZSk7CiBiZmFfc3RhdHVzX3QgYmZhX2lvY19kZWJ1Z19md3NhdmUoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCB2b2lkICp0cmNkYXRhLAogCQlpbnQgKnRyY2xlbik7Ci12b2lkIGJmYV9pb2NfZGVidWdfZndzYXZlX2NsZWFyKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CiBiZmFfc3RhdHVzX3QgYmZhX2lvY19kZWJ1Z19md3RyYyhzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHZvaWQgKnRyY2RhdGEsCiAJCQkJIGludCAqdHJjbGVuKTsKIGJmYV9zdGF0dXNfdCBiZmFfaW9jX2RlYnVnX2Z3Y29yZShzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHZvaWQgKmJ1ZiwKIAl1MzIgKm9mZnNldCwgaW50ICpidWZsZW4pOwotdTMyIGJmYV9pb2Nfc21lbV9wZ251bShzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHUzMiBmbWFkZHIpOwotdTMyIGJmYV9pb2Nfc21lbV9wZ29mZihzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHUzMiBmbWFkZHIpOwogdm9pZCBiZmFfaW9jX3NldF9mY21vZGUoc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKIGJmYV9ib29sZWFuX3QgYmZhX2lvY19nZXRfZmNtb2RlKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7Ci12b2lkIGJmYV9pb2NfaGJmYWlsX3JlZ2lzdGVyKHN0cnVjdCBiZmFfaW9jX3MgKmlvYywKLQlzdHJ1Y3QgYmZhX2lvY19oYmZhaWxfbm90aWZ5X3MgKm5vdGlmeSk7CiBiZmFfYm9vbGVhbl90IGJmYV9pb2Nfc2VtX2dldCh2b2lkIF9faW9tZW0gKnNlbV9yZWcpOwotdm9pZCBiZmFfaW9jX3NlbV9yZWxlYXNlKHZvaWQgX19pb21lbSAqc2VtX3JlZyk7Ci12b2lkIGJmYV9pb2NfaHdfc2VtX3JlbGVhc2Uoc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKIHZvaWQgYmZhX2lvY19md3Zlcl9nZXQoc3RydWN0IGJmYV9pb2NfcyAqaW9jLAogCQkJc3RydWN0IGJmaV9pb2NfaW1hZ2VfaGRyX3MgKmZ3aGRyKTsKIGJmYV9ib29sZWFuX3QgYmZhX2lvY19md3Zlcl9jbXAoc3RydWN0IGJmYV9pb2NfcyAqaW9jLApAQCAtMzgxLDEzICszODQsOCBAQAogLyoKICAqIGJmYSBtZmcgd3duIEFQSSBmdW5jdGlvbnMKICAqLwotd3duX3QgYmZhX2lvY19nZXRfcHd3bihzdHJ1Y3QgYmZhX2lvY19zICppb2MpOwotd3duX3QgYmZhX2lvY19nZXRfbnd3bihzdHJ1Y3QgYmZhX2lvY19zICppb2MpOwogbWFjX3QgYmZhX2lvY19nZXRfbWFjKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7Ci13d25fdCBiZmFfaW9jX2dldF9tZmdfcHd3bihzdHJ1Y3QgYmZhX2lvY19zICppb2MpOwotd3duX3QgYmZhX2lvY19nZXRfbWZnX253d24oc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKIG1hY190IGJmYV9pb2NfZ2V0X21mZ19tYWMoc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKLXU2NCBiZmFfaW9jX2dldF9hZGlkKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CiAKIC8qCiAgKiBGL1cgSW1hZ2UgU2l6ZSAmIENodW5rCkBAIC00MjEsNyArNDE5LDcgQEAKIAkJcmV0dXJuIGJmaV9pbWFnZV9jdF9jbmFfZ2V0X2NodW5rKG9mZik7CWJyZWFrOwogCWNhc2UgQkZJX0lNQUdFX0NCX0ZDOgogCQlyZXR1cm4gYmZpX2ltYWdlX2NiX2ZjX2dldF9jaHVuayhvZmYpOwlicmVhazsKLQlkZWZhdWx0OiByZXR1cm4gMDsKKwlkZWZhdWx0OiByZXR1cm4gTlVMTDsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2lvY19jYi5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW9jX2NiLmMKaW5kZXggOTA5OTQ1MC4uZTRhMDcxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW9jX2NiLmMKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW9jX2NiLmMKQEAgLTE1LDYgKzE1LDcgQEAKICAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICAqLwogCisjaW5jbHVkZSAiYmZhZF9kcnYuaCIKICNpbmNsdWRlICJiZmFfaW9jLmgiCiAjaW5jbHVkZSAiYmZpX2NicmVnLmgiCiAjaW5jbHVkZSAiYmZhX2RlZnMuaCIKQEAgLTI5LDEwICszMCwxNCBAQAogc3RhdGljIHZvaWQgYmZhX2lvY19jYl9yZWdfaW5pdChzdHJ1Y3QgYmZhX2lvY19zICppb2MpOwogc3RhdGljIHZvaWQgYmZhX2lvY19jYl9tYXBfcG9ydChzdHJ1Y3QgYmZhX2lvY19zICppb2MpOwogc3RhdGljIHZvaWQgYmZhX2lvY19jYl9pc3JfbW9kZV9zZXQoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBiZmFfYm9vbGVhbl90IG1zaXgpOwotc3RhdGljIHZvaWQgYmZhX2lvY19jYl9ub3RpZnlfaGJmYWlsKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CitzdGF0aWMgdm9pZCBiZmFfaW9jX2NiX25vdGlmeV9mYWlsKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CiBzdGF0aWMgdm9pZCBiZmFfaW9jX2NiX293bmVyc2hpcF9yZXNldChzdHJ1Y3QgYmZhX2lvY19zICppb2MpOworc3RhdGljIHZvaWQgYmZhX2lvY19jYl9zeW5jX2pvaW4oc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKK3N0YXRpYyB2b2lkIGJmYV9pb2NfY2Jfc3luY19sZWF2ZShzdHJ1Y3QgYmZhX2lvY19zICppb2MpOworc3RhdGljIHZvaWQgYmZhX2lvY19jYl9zeW5jX2FjayhzdHJ1Y3QgYmZhX2lvY19zICppb2MpOworc3RhdGljIGJmYV9ib29sZWFuX3QgYmZhX2lvY19jYl9zeW5jX2NvbXBsZXRlKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CiAKLXN0cnVjdCBiZmFfaW9jX2h3aWZfcyBod2lmX2NiOworc3RhdGljIHN0cnVjdCBiZmFfaW9jX2h3aWZfcyBod2lmX2NiOwogCiAvKgogICogQ2FsbGVkIGZyb20gYmZhX2lvY19hdHRhY2goKSB0byBtYXAgYXNpYyBzcGVjaWZpYyBjYWxscy4KQEAgLTQ2LDggKzUxLDEyIEBACiAJaHdpZl9jYi5pb2NfcmVnX2luaXQgPSBiZmFfaW9jX2NiX3JlZ19pbml0OwogCWh3aWZfY2IuaW9jX21hcF9wb3J0ID0gYmZhX2lvY19jYl9tYXBfcG9ydDsKIAlod2lmX2NiLmlvY19pc3JfbW9kZV9zZXQgPSBiZmFfaW9jX2NiX2lzcl9tb2RlX3NldDsKLQlod2lmX2NiLmlvY19ub3RpZnlfaGJmYWlsID0gYmZhX2lvY19jYl9ub3RpZnlfaGJmYWlsOworCWh3aWZfY2IuaW9jX25vdGlmeV9mYWlsID0gYmZhX2lvY19jYl9ub3RpZnlfZmFpbDsKIAlod2lmX2NiLmlvY19vd25lcnNoaXBfcmVzZXQgPSBiZmFfaW9jX2NiX293bmVyc2hpcF9yZXNldDsKKwlod2lmX2NiLmlvY19zeW5jX2pvaW4gPSBiZmFfaW9jX2NiX3N5bmNfam9pbjsKKwlod2lmX2NiLmlvY19zeW5jX2xlYXZlID0gYmZhX2lvY19jYl9zeW5jX2xlYXZlOworCWh3aWZfY2IuaW9jX3N5bmNfYWNrID0gYmZhX2lvY19jYl9zeW5jX2FjazsKKwlod2lmX2NiLmlvY19zeW5jX2NvbXBsZXRlID0gYmZhX2lvY19jYl9zeW5jX2NvbXBsZXRlOwogCiAJaW9jLT5pb2NfaHdpZiA9ICZod2lmX2NiOwogfQpAQCAtNTgsNiArNjcsMjEgQEAKIHN0YXRpYyBiZmFfYm9vbGVhbl90CiBiZmFfaW9jX2NiX2Zpcm13YXJlX2xvY2soc3RydWN0IGJmYV9pb2NfcyAqaW9jKQogeworCXN0cnVjdCBiZmlfaW9jX2ltYWdlX2hkcl9zIGZ3aGRyOworCXVpbnQzMl90IGZ3c3RhdGUgPSByZWFkbChpb2MtPmlvY19yZWdzLmlvY19md3N0YXRlKTsKKworCWlmIChmd3N0YXRlID09IEJGSV9JT0NfVU5JTklUKQorCQlyZXR1cm4gQkZBX1RSVUU7CisKKwliZmFfaW9jX2Z3dmVyX2dldChpb2MsICZmd2hkcik7CisKKwlpZiAoc3dhYjMyKGZ3aGRyLmV4ZWMpID09IEJGSV9CT09UX1RZUEVfTk9STUFMKQorCQlyZXR1cm4gQkZBX1RSVUU7CisKKwliZmFfdHJjKGlvYywgZndzdGF0ZSk7CisJYmZhX3RyYyhpb2MsIGZ3aGRyLmV4ZWMpOworCXdyaXRlbChCRklfSU9DX1VOSU5JVCwgaW9jLT5pb2NfcmVncy5pb2NfZndzdGF0ZSk7CisKIAlyZXR1cm4gQkZBX1RSVUU7CiB9CiAKQEAgLTcwLDcgKzk0LDcgQEAKICAqIE5vdGlmeSBvdGhlciBmdW5jdGlvbnMgb24gSEIgZmFpbHVyZS4KICAqLwogc3RhdGljIHZvaWQKLWJmYV9pb2NfY2Jfbm90aWZ5X2hiZmFpbChzdHJ1Y3QgYmZhX2lvY19zICppb2MpCitiZmFfaW9jX2NiX25vdGlmeV9mYWlsKHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKIHsKIAl3cml0ZWwoX19QU1NfRVJSX1NUQVRVU19TRVQsIGlvYy0+aW9jX3JlZ3MuZXJyX3NldCk7CiAJcmVhZGwoaW9jLT5pb2NfcmVncy5lcnJfc2V0KTsKQEAgLTEwOCw5ICsxMzIsMTEgQEAKIAlpZiAoaW9jLT5wb3J0X2lkID09IDApIHsKIAkJaW9jLT5pb2NfcmVncy5oZWFydGJlYXQgPSByYiArIEJGQV9JT0MwX0hCRUFUX1JFRzsKIAkJaW9jLT5pb2NfcmVncy5pb2NfZndzdGF0ZSA9IHJiICsgQkZBX0lPQzBfU1RBVEVfUkVHOworCQlpb2MtPmlvY19yZWdzLmFsdF9pb2NfZndzdGF0ZSA9IHJiICsgQkZBX0lPQzFfU1RBVEVfUkVHOwogCX0gZWxzZSB7CiAJCWlvYy0+aW9jX3JlZ3MuaGVhcnRiZWF0ID0gKHJiICsgQkZBX0lPQzFfSEJFQVRfUkVHKTsKIAkJaW9jLT5pb2NfcmVncy5pb2NfZndzdGF0ZSA9IChyYiArIEJGQV9JT0MxX1NUQVRFX1JFRyk7CisJCWlvYy0+aW9jX3JlZ3MuYWx0X2lvY19md3N0YXRlID0gKHJiICsgQkZBX0lPQzBfU1RBVEVfUkVHKTsKIAl9CiAKIAkvKgpAQCAtMTgxLDEwICsyMDcsNzEgQEAKIAkgKiB3aWxsIGxvY2sgaXQgaW5zdGVhZCBvZiBjbGVhcmluZyBpdC4KIAkgKi8KIAlyZWFkbChpb2MtPmlvY19yZWdzLmlvY19zZW1fcmVnKTsKLQliZmFfaW9jX2h3X3NlbV9yZWxlYXNlKGlvYyk7CisJd3JpdGVsKDEsIGlvYy0+aW9jX3JlZ3MuaW9jX3NlbV9yZWcpOwogfQogCisvKgorICogU3luY2hyb25pemVkIElPQyBmYWlsdXJlIHByb2Nlc3Npbmcgcm91dGluZXMKKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2NfY2Jfc3luY19qb2luKHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKK30KIAorc3RhdGljIHZvaWQKK2JmYV9pb2NfY2Jfc3luY19sZWF2ZShzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfaW9jX2NiX3N5bmNfYWNrKHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwl3cml0ZWwoQkZJX0lPQ19GQUlMLCBpb2MtPmlvY19yZWdzLmlvY19md3N0YXRlKTsKK30KKworc3RhdGljIGJmYV9ib29sZWFuX3QKK2JmYV9pb2NfY2Jfc3luY19jb21wbGV0ZShzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJdWludDMyX3QgZndzdGF0ZSwgYWx0X2Z3c3RhdGU7CisJZndzdGF0ZSA9IHJlYWRsKGlvYy0+aW9jX3JlZ3MuaW9jX2Z3c3RhdGUpOworCisJLyoKKwkgKiBBdCB0aGlzIHBvaW50LCB0aGlzIElPQyBpcyBob2RpbmcgdGhlIGh3IHNlbSBpbiB0aGUKKwkgKiBzdGFydCBwYXRoIChmd2NoZWNrKSBPUiBpbiB0aGUgZGlzYWJsZS9lbmFibGUgcGF0aAorCSAqIE9SIHRvIGNoZWNrIGlmIHRoZSBvdGhlciBJT0MgaGFzIGFja25vd2xlZGdlZCBmYWlsdXJlLgorCSAqCisJICogU28sIHRoaXMgSU9DIGNhbiBiZSBpbiBVTklOSVQsIElOSVRJTkcsIERJU0FCTEVELCBGQUlMCisJICogb3IgaW4gTUVNVEVTVCBzdGF0ZXMuIEluIGEgbm9ybWFsIHNjZW5hcmlvLCB0aGlzIElPQworCSAqIGNhbiBub3QgYmUgaW4gT1Agc3RhdGUgd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4KKwkgKgorCSAqIEhvd2V2ZXIsIHRoaXMgSU9DIGNvdWxkIHN0aWxsIGJlIGluIE9QIHN0YXRlIHdoZW4KKwkgKiB0aGUgT1MgZHJpdmVyIGlzIHN0YXJ0aW5nIHVwLCBpZiB0aGUgT3B0Uk9NIGNvZGUgaGFzCisJICogbGVmdCBpdCBpbiB0aGF0IHN0YXRlLgorCSAqCisJICogSWYgd2UgaGFkIG1hcmtlZCB0aGlzIElPQydzIGZ3c3RhdGUgYXMgQkZJX0lPQ19GQUlMCisJICogaW4gdGhlIGZhaWx1cmUgY2FzZSBhbmQgbm93LCBpZiB0aGUgZndzdGF0ZSBpcyBub3QKKwkgKiBCRklfSU9DX0ZBSUwgaXQgaW1wbGllcyB0aGF0IHRoZSBvdGhlciBQQ0kgZm4gaGF2ZQorCSAqIHJlaW5pdGlhbGl6ZWQgdGhlIEFTSUMgb3IgdGhpcyBJT0MgZ290IGRpc2FibGVkLCBzbworCSAqIHJldHVybiBUUlVFLgorCSAqLworCWlmIChmd3N0YXRlID09IEJGSV9JT0NfVU5JTklUIHx8CisJCWZ3c3RhdGUgPT0gQkZJX0lPQ19JTklUSU5HIHx8CisJCWZ3c3RhdGUgPT0gQkZJX0lPQ19ESVNBQkxFRCB8fAorCQlmd3N0YXRlID09IEJGSV9JT0NfTUVNVEVTVCB8fAorCQlmd3N0YXRlID09IEJGSV9JT0NfT1ApCisJCXJldHVybiBCRkFfVFJVRTsKKwllbHNlIHsKKwkJYWx0X2Z3c3RhdGUgPSByZWFkbChpb2MtPmlvY19yZWdzLmFsdF9pb2NfZndzdGF0ZSk7CisJCWlmIChhbHRfZndzdGF0ZSA9PSBCRklfSU9DX0ZBSUwgfHwKKwkJCWFsdF9md3N0YXRlID09IEJGSV9JT0NfRElTQUJMRUQgfHwKKwkJCWFsdF9md3N0YXRlID09IEJGSV9JT0NfVU5JTklUIHx8CisJCQlhbHRfZndzdGF0ZSA9PSBCRklfSU9DX0lOSVRJTkcgfHwKKwkJCWFsdF9md3N0YXRlID09IEJGSV9JT0NfTUVNVEVTVCkKKwkJCXJldHVybiBCRkFfVFJVRTsKKwkJZWxzZQorCQkJcmV0dXJuIEJGQV9GQUxTRTsKKwl9Cit9CiAKIGJmYV9zdGF0dXNfdAogYmZhX2lvY19jYl9wbGxfaW5pdCh2b2lkIF9faW9tZW0gKnJiLCBiZmFfYm9vbGVhbl90IGZjbW9kZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2lvY19jdC5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW9jX2N0LmMKaW5kZXggMTE1NzMwYy4uMDA4ZDEyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW9jX2N0LmMKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW9jX2N0LmMKQEAgLTE1LDEyICsxNSwyMiBAQAogICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogICovCiAKKyNpbmNsdWRlICJiZmFkX2Rydi5oIgogI2luY2x1ZGUgImJmYV9pb2MuaCIKICNpbmNsdWRlICJiZmlfY3RyZWcuaCIKICNpbmNsdWRlICJiZmFfZGVmcy5oIgogCiBCRkFfVFJDX0ZJTEUoQ05BLCBJT0NfQ1QpOwogCisjZGVmaW5lIGJmYV9pb2NfY3Rfc3luY19wb3MoX19pb2MpICAgICAgXAorCQkoKHVpbnQzMl90KSAoMSA8PCBiZmFfaW9jX3BjaWZuKF9faW9jKSkpCisjZGVmaW5lIEJGQV9JT0NfU1lOQ19SRVFEX1NIICAgIDE2CisjZGVmaW5lIGJmYV9pb2NfY3RfZ2V0X3N5bmNfYWNrZChfX3ZhbCkgKF9fdmFsICYgMHgwMDAwZmZmZikKKyNkZWZpbmUgYmZhX2lvY19jdF9jbGVhcl9zeW5jX2Fja2QoX192YWwpICAgICAgIChfX3ZhbCAmIDB4ZmZmZjAwMDApCisjZGVmaW5lIGJmYV9pb2NfY3RfZ2V0X3N5bmNfcmVxZChfX3ZhbCkgKF9fdmFsID4+IEJGQV9JT0NfU1lOQ19SRVFEX1NIKQorI2RlZmluZSBiZmFfaW9jX2N0X3N5bmNfcmVxZF9wb3MoX19pb2MpIFwKKwkJCShiZmFfaW9jX2N0X3N5bmNfcG9zKF9faW9jKSA8PCBCRkFfSU9DX1NZTkNfUkVRRF9TSCkKKwogLyoKICAqIGZvcndhcmQgZGVjbGFyYXRpb25zCiAgKi8KQEAgLTI5LDEwICszOSwxNCBAQAogc3RhdGljIHZvaWQgYmZhX2lvY19jdF9yZWdfaW5pdChzdHJ1Y3QgYmZhX2lvY19zICppb2MpOwogc3RhdGljIHZvaWQgYmZhX2lvY19jdF9tYXBfcG9ydChzdHJ1Y3QgYmZhX2lvY19zICppb2MpOwogc3RhdGljIHZvaWQgYmZhX2lvY19jdF9pc3JfbW9kZV9zZXQoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBiZmFfYm9vbGVhbl90IG1zaXgpOwotc3RhdGljIHZvaWQgYmZhX2lvY19jdF9ub3RpZnlfaGJmYWlsKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CitzdGF0aWMgdm9pZCBiZmFfaW9jX2N0X25vdGlmeV9mYWlsKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CiBzdGF0aWMgdm9pZCBiZmFfaW9jX2N0X293bmVyc2hpcF9yZXNldChzdHJ1Y3QgYmZhX2lvY19zICppb2MpOworc3RhdGljIHZvaWQgYmZhX2lvY19jdF9zeW5jX2pvaW4oc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKK3N0YXRpYyB2b2lkIGJmYV9pb2NfY3Rfc3luY19sZWF2ZShzdHJ1Y3QgYmZhX2lvY19zICppb2MpOworc3RhdGljIHZvaWQgYmZhX2lvY19jdF9zeW5jX2FjayhzdHJ1Y3QgYmZhX2lvY19zICppb2MpOworc3RhdGljIGJmYV9ib29sZWFuX3QgYmZhX2lvY19jdF9zeW5jX2NvbXBsZXRlKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CiAKLXN0cnVjdCBiZmFfaW9jX2h3aWZfcyBod2lmX2N0Oworc3RhdGljIHN0cnVjdCBiZmFfaW9jX2h3aWZfcyBod2lmX2N0OwogCiAvKgogICogQ2FsbGVkIGZyb20gYmZhX2lvY19hdHRhY2goKSB0byBtYXAgYXNpYyBzcGVjaWZpYyBjYWxscy4KQEAgLTQ2LDggKzYwLDEyIEBACiAJaHdpZl9jdC5pb2NfcmVnX2luaXQgPSBiZmFfaW9jX2N0X3JlZ19pbml0OwogCWh3aWZfY3QuaW9jX21hcF9wb3J0ID0gYmZhX2lvY19jdF9tYXBfcG9ydDsKIAlod2lmX2N0LmlvY19pc3JfbW9kZV9zZXQgPSBiZmFfaW9jX2N0X2lzcl9tb2RlX3NldDsKLQlod2lmX2N0LmlvY19ub3RpZnlfaGJmYWlsID0gYmZhX2lvY19jdF9ub3RpZnlfaGJmYWlsOworCWh3aWZfY3QuaW9jX25vdGlmeV9mYWlsID0gYmZhX2lvY19jdF9ub3RpZnlfZmFpbDsKIAlod2lmX2N0LmlvY19vd25lcnNoaXBfcmVzZXQgPSBiZmFfaW9jX2N0X293bmVyc2hpcF9yZXNldDsKKwlod2lmX2N0LmlvY19zeW5jX2pvaW4gPSBiZmFfaW9jX2N0X3N5bmNfam9pbjsKKwlod2lmX2N0LmlvY19zeW5jX2xlYXZlID0gYmZhX2lvY19jdF9zeW5jX2xlYXZlOworCWh3aWZfY3QuaW9jX3N5bmNfYWNrID0gYmZhX2lvY19jdF9zeW5jX2FjazsKKwlod2lmX2N0LmlvY19zeW5jX2NvbXBsZXRlID0gYmZhX2lvY19jdF9zeW5jX2NvbXBsZXRlOwogCiAJaW9jLT5pb2NfaHdpZiA9ICZod2lmX2N0OwogfQpAQCAtODMsNyArMTAxLDggQEAKIAkgKi8KIAlpZiAodXNlY250ID09IDApIHsKIAkJd3JpdGVsKDEsIGlvYy0+aW9jX3JlZ3MuaW9jX3VzYWdlX3JlZyk7Ci0JCWJmYV9pb2Nfc2VtX3JlbGVhc2UoaW9jLT5pb2NfcmVncy5pb2NfdXNhZ2Vfc2VtX3JlZyk7CisJCXdyaXRlbCgxLCBpb2MtPmlvY19yZWdzLmlvY191c2FnZV9zZW1fcmVnKTsKKwkJd3JpdGVsKDAsIGlvYy0+aW9jX3JlZ3MuaW9jX2ZhaWxfc3luYyk7CiAJCWJmYV90cmMoaW9jLCB1c2VjbnQpOwogCQlyZXR1cm4gQkZBX1RSVUU7CiAJfQpAQCAtOTQsMTQgKzExMywxNCBAQAogCS8qCiAJICogVXNlIGNvdW50IGNhbm5vdCBiZSBub24temVybyBhbmQgY2hpcCBpbiB1bmluaXRpYWxpemVkIHN0YXRlLgogCSAqLwotCWJmYV9hc3NlcnQoaW9jX2Z3c3RhdGUgIT0gQkZJX0lPQ19VTklOSVQpOworCVdBUk5fT04oaW9jX2Z3c3RhdGUgPT0gQkZJX0lPQ19VTklOSVQpOwogCiAJLyoKIAkgKiBDaGVjayBpZiBhbm90aGVyIGRyaXZlciB3aXRoIGEgZGlmZmVyZW50IGZpcm13YXJlIGlzIGFjdGl2ZQogCSAqLwogCWJmYV9pb2NfZnd2ZXJfZ2V0KGlvYywgJmZ3aGRyKTsKIAlpZiAoIWJmYV9pb2NfZnd2ZXJfY21wKGlvYywgJmZ3aGRyKSkgewotCQliZmFfaW9jX3NlbV9yZWxlYXNlKGlvYy0+aW9jX3JlZ3MuaW9jX3VzYWdlX3NlbV9yZWcpOworCQl3cml0ZWwoMSwgaW9jLT5pb2NfcmVncy5pb2NfdXNhZ2Vfc2VtX3JlZyk7CiAJCWJmYV90cmMoaW9jLCB1c2VjbnQpOwogCQlyZXR1cm4gQkZBX0ZBTFNFOwogCX0KQEAgLTExMSw3ICsxMzAsNyBAQAogCSAqLwogCXVzZWNudCsrOwogCXdyaXRlbCh1c2VjbnQsIGlvYy0+aW9jX3JlZ3MuaW9jX3VzYWdlX3JlZyk7Ci0JYmZhX2lvY19zZW1fcmVsZWFzZShpb2MtPmlvY19yZWdzLmlvY191c2FnZV9zZW1fcmVnKTsKKwl3cml0ZWwoMSwgaW9jLT5pb2NfcmVncy5pb2NfdXNhZ2Vfc2VtX3JlZyk7CiAJYmZhX3RyYyhpb2MsIHVzZWNudCk7CiAJcmV0dXJuIEJGQV9UUlVFOwogfQpAQCAtMTM5LDI1ICsxNTgsMjcgQEAKIAkgKi8KIAliZmFfaW9jX3NlbV9nZXQoaW9jLT5pb2NfcmVncy5pb2NfdXNhZ2Vfc2VtX3JlZyk7CiAJdXNlY250ID0gcmVhZGwoaW9jLT5pb2NfcmVncy5pb2NfdXNhZ2VfcmVnKTsKLQliZmFfYXNzZXJ0KHVzZWNudCA+IDApOworCVdBUk5fT04odXNlY250IDw9IDApOwogCiAJdXNlY250LS07CiAJd3JpdGVsKHVzZWNudCwgaW9jLT5pb2NfcmVncy5pb2NfdXNhZ2VfcmVnKTsKIAliZmFfdHJjKGlvYywgdXNlY250KTsKIAotCWJmYV9pb2Nfc2VtX3JlbGVhc2UoaW9jLT5pb2NfcmVncy5pb2NfdXNhZ2Vfc2VtX3JlZyk7CisJd3JpdGVsKDEsIGlvYy0+aW9jX3JlZ3MuaW9jX3VzYWdlX3NlbV9yZWcpOwogfQogCiAvKgogICogTm90aWZ5IG90aGVyIGZ1bmN0aW9ucyBvbiBIQiBmYWlsdXJlLgogICovCiBzdGF0aWMgdm9pZAotYmZhX2lvY19jdF9ub3RpZnlfaGJmYWlsKHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK2JmYV9pb2NfY3Rfbm90aWZ5X2ZhaWwoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQogewogCWlmIChpb2MtPmNuYSkgewogCQl3cml0ZWwoX19GV19JTklUX0hBTFRfUCwgaW9jLT5pb2NfcmVncy5sbF9oYWx0KTsKKwkJd3JpdGVsKF9fRldfSU5JVF9IQUxUX1AsIGlvYy0+aW9jX3JlZ3MuYWx0X2xsX2hhbHQpOwogCQkvKiBXYWl0IGZvciBoYWx0IHRvIHRha2UgZWZmZWN0ICovCiAJCXJlYWRsKGlvYy0+aW9jX3JlZ3MubGxfaGFsdCk7CisJCXJlYWRsKGlvYy0+aW9jX3JlZ3MuYWx0X2xsX2hhbHQpOwogCX0gZWxzZSB7CiAJCXdyaXRlbChfX1BTU19FUlJfU1RBVFVTX1NFVCwgaW9jLT5pb2NfcmVncy5lcnJfc2V0KTsKIAkJcmVhZGwoaW9jLT5pb2NfcmVncy5lcnJfc2V0KTsKQEAgLTIwOSwxNSArMjMwLDE5IEBACiAJaWYgKGlvYy0+cG9ydF9pZCA9PSAwKSB7CiAJCWlvYy0+aW9jX3JlZ3MuaGVhcnRiZWF0ID0gcmIgKyBCRkFfSU9DMF9IQkVBVF9SRUc7CiAJCWlvYy0+aW9jX3JlZ3MuaW9jX2Z3c3RhdGUgPSByYiArIEJGQV9JT0MwX1NUQVRFX1JFRzsKKwkJaW9jLT5pb2NfcmVncy5hbHRfaW9jX2Z3c3RhdGUgPSByYiArIEJGQV9JT0MxX1NUQVRFX1JFRzsKIAkJaW9jLT5pb2NfcmVncy5oZm5fbWJveF9jbWQgPSByYiArIGlvY3JlZ19tYmNtZF9wMFtwY2lmbl0uaGZuOwogCQlpb2MtPmlvY19yZWdzLmxwdV9tYm94X2NtZCA9IHJiICsgaW9jcmVnX21iY21kX3AwW3BjaWZuXS5scHU7CiAJCWlvYy0+aW9jX3JlZ3MubGxfaGFsdCA9IHJiICsgRldfSU5JVF9IQUxUX1AwOworCQlpb2MtPmlvY19yZWdzLmFsdF9sbF9oYWx0ID0gcmIgKyBGV19JTklUX0hBTFRfUDE7CiAJfSBlbHNlIHsKIAkJaW9jLT5pb2NfcmVncy5oZWFydGJlYXQgPSAocmIgKyBCRkFfSU9DMV9IQkVBVF9SRUcpOwogCQlpb2MtPmlvY19yZWdzLmlvY19md3N0YXRlID0gKHJiICsgQkZBX0lPQzFfU1RBVEVfUkVHKTsKKwkJaW9jLT5pb2NfcmVncy5hbHRfaW9jX2Z3c3RhdGUgPSByYiArIEJGQV9JT0MwX1NUQVRFX1JFRzsKIAkJaW9jLT5pb2NfcmVncy5oZm5fbWJveF9jbWQgPSByYiArIGlvY3JlZ19tYmNtZF9wMVtwY2lmbl0uaGZuOwogCQlpb2MtPmlvY19yZWdzLmxwdV9tYm94X2NtZCA9IHJiICsgaW9jcmVnX21iY21kX3AxW3BjaWZuXS5scHU7CiAJCWlvYy0+aW9jX3JlZ3MubGxfaGFsdCA9IHJiICsgRldfSU5JVF9IQUxUX1AxOworCQlpb2MtPmlvY19yZWdzLmFsdF9sbF9oYWx0ID0gcmIgKyBGV19JTklUX0hBTFRfUDA7CiAJfQogCiAJLyoKQEAgLTIzNSw2ICsyNjAsNyBAQAogCWlvYy0+aW9jX3JlZ3MuaW9jX3VzYWdlX3NlbV9yZWcgPSAocmIgKyBIT1NUX1NFTTFfUkVHKTsKIAlpb2MtPmlvY19yZWdzLmlvY19pbml0X3NlbV9yZWcgPSAocmIgKyBIT1NUX1NFTTJfUkVHKTsKIAlpb2MtPmlvY19yZWdzLmlvY191c2FnZV9yZWcgPSAocmIgKyBCRkFfRldfVVNFX0NPVU5UKTsKKwlpb2MtPmlvY19yZWdzLmlvY19mYWlsX3N5bmMgPSAocmIgKyBCRkFfSU9DX0ZBSUxfU1lOQyk7CiAKIAkvKgogCSAqIHNyYW0gbWVtb3J5IGFjY2VzcwpAQCAtMzEzLDcgKzMzOSw3IEBACiAJaWYgKGlvYy0+Y25hKSB7CiAJCWJmYV9pb2Nfc2VtX2dldChpb2MtPmlvY19yZWdzLmlvY191c2FnZV9zZW1fcmVnKTsKIAkJd3JpdGVsKDAsIGlvYy0+aW9jX3JlZ3MuaW9jX3VzYWdlX3JlZyk7Ci0JCWJmYV9pb2Nfc2VtX3JlbGVhc2UoaW9jLT5pb2NfcmVncy5pb2NfdXNhZ2Vfc2VtX3JlZyk7CisJCXdyaXRlbCgxLCBpb2MtPmlvY19yZWdzLmlvY191c2FnZV9zZW1fcmVnKTsKIAl9CiAKIAkvKgpAQCAtMzIyLDEwICszNDgsODAgQEAKIAkgKiB3aWxsIGxvY2sgaXQgaW5zdGVhZCBvZiBjbGVhcmluZyBpdC4KIAkgKi8KIAlyZWFkbChpb2MtPmlvY19yZWdzLmlvY19zZW1fcmVnKTsKLQliZmFfaW9jX2h3X3NlbV9yZWxlYXNlKGlvYyk7CisJd3JpdGVsKDEsIGlvYy0+aW9jX3JlZ3MuaW9jX3NlbV9yZWcpOwogfQogCisvKgorICogU3luY2hyb25pemVkIElPQyBmYWlsdXJlIHByb2Nlc3Npbmcgcm91dGluZXMKKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2NfY3Rfc3luY19qb2luKHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwl1aW50MzJfdCByMzIgPSByZWFkbChpb2MtPmlvY19yZWdzLmlvY19mYWlsX3N5bmMpOworCXVpbnQzMl90IHN5bmNfcG9zID0gYmZhX2lvY19jdF9zeW5jX3JlcWRfcG9zKGlvYyk7CiAKKwl3cml0ZWwoKHIzMiB8IHN5bmNfcG9zKSwgaW9jLT5pb2NfcmVncy5pb2NfZmFpbF9zeW5jKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9pb2NfY3Rfc3luY19sZWF2ZShzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJdWludDMyX3QgcjMyID0gcmVhZGwoaW9jLT5pb2NfcmVncy5pb2NfZmFpbF9zeW5jKTsKKwl1aW50MzJfdCBzeW5jX21zayA9IGJmYV9pb2NfY3Rfc3luY19yZXFkX3Bvcyhpb2MpIHwKKwkJCQkJYmZhX2lvY19jdF9zeW5jX3Bvcyhpb2MpOworCisJd3JpdGVsKChyMzIgJiB+c3luY19tc2spLCBpb2MtPmlvY19yZWdzLmlvY19mYWlsX3N5bmMpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY19jdF9zeW5jX2FjayhzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJdWludDMyX3QgcjMyID0gcmVhZGwoaW9jLT5pb2NfcmVncy5pb2NfZmFpbF9zeW5jKTsKKworCXdyaXRlbCgocjMyIHwgYmZhX2lvY19jdF9zeW5jX3Bvcyhpb2MpKSwKKwkJaW9jLT5pb2NfcmVncy5pb2NfZmFpbF9zeW5jKTsKK30KKworc3RhdGljIGJmYV9ib29sZWFuX3QKK2JmYV9pb2NfY3Rfc3luY19jb21wbGV0ZShzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJdWludDMyX3QgcjMyID0gcmVhZGwoaW9jLT5pb2NfcmVncy5pb2NfZmFpbF9zeW5jKTsKKwl1aW50MzJfdCBzeW5jX3JlcWQgPSBiZmFfaW9jX2N0X2dldF9zeW5jX3JlcWQocjMyKTsKKwl1aW50MzJfdCBzeW5jX2Fja2QgPSBiZmFfaW9jX2N0X2dldF9zeW5jX2Fja2QocjMyKTsKKwl1aW50MzJfdCB0bXBfYWNrZDsKKworCWlmIChzeW5jX2Fja2QgPT0gMCkKKwkJcmV0dXJuIEJGQV9UUlVFOworCisJLyoKKwkgKiBUaGUgY2hlY2sgYmVsb3cgaXMgdG8gc2VlIHdoZXRoZXIgYW55IG90aGVyIFBDSSBmbgorCSAqIGhhcyByZWluaXRpYWxpemVkIHRoZSBBU0lDIChyZXNldCBzeW5jX2Fja2QgYml0cykKKwkgKiBhbmQgZmFpbGVkIGFnYWluIHdoaWxlIHRoaXMgSU9DIHdhcyB3YWl0aW5nIGZvciBodworCSAqIHNlbWFwaG9yZSAoaW4gYmZhX2lvY3BmX3NtX3NlbXdhaXQoKSkuCisJICovCisJdG1wX2Fja2QgPSBzeW5jX2Fja2Q7CisJaWYgKChzeW5jX3JlcWQgJiAgYmZhX2lvY19jdF9zeW5jX3Bvcyhpb2MpKSAmJgorCQkhKHN5bmNfYWNrZCAmIGJmYV9pb2NfY3Rfc3luY19wb3MoaW9jKSkpCisJCXN5bmNfYWNrZCB8PSBiZmFfaW9jX2N0X3N5bmNfcG9zKGlvYyk7CisKKwlpZiAoc3luY19yZXFkID09IHN5bmNfYWNrZCkgeworCQl3cml0ZWwoYmZhX2lvY19jdF9jbGVhcl9zeW5jX2Fja2QocjMyKSwKKwkJCWlvYy0+aW9jX3JlZ3MuaW9jX2ZhaWxfc3luYyk7CisJCXdyaXRlbChCRklfSU9DX0ZBSUwsIGlvYy0+aW9jX3JlZ3MuaW9jX2Z3c3RhdGUpOworCQl3cml0ZWwoQkZJX0lPQ19GQUlMLCBpb2MtPmlvY19yZWdzLmFsdF9pb2NfZndzdGF0ZSk7CisJCXJldHVybiBCRkFfVFJVRTsKKwl9CisKKwkvKgorCSAqIElmIGFub3RoZXIgUENJIGZuIHJlaW5pdGlhbGl6ZWQgYW5kIGZhaWxlZCBhZ2FpbiB3aGlsZQorCSAqIHRoaXMgSU9DIHdhcyB3YWl0aW5nIGZvciBodyBzZW0sIHRoZSBzeW5jX2Fja2QgYml0IGZvcgorCSAqIHRoaXMgSU9DIG5lZWQgdG8gYmUgc2V0IGFnYWluIHRvIGFsbG93IHJlaW5pdGlhbGl6YXRpb24uCisJICovCisJaWYgKHRtcF9hY2tkICE9IHN5bmNfYWNrZCkKKwkJd3JpdGVsKChyMzIgfCBzeW5jX2Fja2QpLCBpb2MtPmlvY19yZWdzLmlvY19mYWlsX3N5bmMpOworCisJcmV0dXJuIEJGQV9GQUxTRTsKK30KIAogLyoKICAqIENoZWNrIHRoZSBmaXJtd2FyZSBzdGF0ZSB0byBrbm93IGlmIHBsbF9pbml0IGhhcyBiZWVuIGNvbXBsZXRlZCBhbHJlYWR5CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9tb2R1bGVzLmggYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9tb2R1bGVzLmgKaW5kZXggMTU0MDdhYi4uYWI3OWZmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfbW9kdWxlcy5oCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX21vZHVsZXMuaApAQCAtOTksNyArOTksNiBAQAogCXZvaWQgKCppb2NkaXNhYmxlKSAoc3RydWN0IGJmYV9zICpiZmEpOwogfTsKIAotZXh0ZXJuIHN0cnVjdCBiZmFfbW9kdWxlX3MgKmhhbF9tb2RzW107CiAKIHN0cnVjdCBiZmFfcyB7CiAJdm9pZAkJCSpiZmFkOwkJLyogIEJGQSBkcml2ZXIgaW5zdGFuY2UgICAgKi8KQEAgLTExNiw4ICsxMTUsNiBAQAogCXN0cnVjdCBiZmFfbXNpeF9zCW1zaXg7CiB9OwogCi1leHRlcm4gYmZhX2lzcl9mdW5jX3QgYmZhX2lzcnNbQkZJX01DX01BWF07Ci1leHRlcm4gYmZhX2lvY19tYm94X21jZnVuY190ICBiZmFfbWJveF9pc3JzW107CiBleHRlcm4gYmZhX2Jvb2xlYW5fdCBiZmFfYXV0b19yZWNvdmVyOwogZXh0ZXJuIHN0cnVjdCBiZmFfbW9kdWxlX3MgaGFsX21vZF9zZ3BnOwogZXh0ZXJuIHN0cnVjdCBiZmFfbW9kdWxlX3MgaGFsX21vZF9mY3BvcnQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9vc19pbmMuaCBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX29zX2luYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NWRmNjJlLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX29zX2luYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAxMCBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKLSAqIHd3dy5icm9jYWRlLmNvbQotICoKLSAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLQotI2lmbmRlZiBfX0JGQV9PU19JTkNfSF9fCi0jZGVmaW5lIF9fQkZBX09TX0lOQ19IX18KLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvaWRyLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvY2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+Ci0jaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+Ci0jaW5jbHVkZSA8bGludXgvYml0b3BzLmg+Ci0jaW5jbHVkZSA8c2NzaS9zY3NpLmg+Ci0jaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KLSNpbmNsdWRlIDxzY3NpL3Njc2lfdGNxLmg+Ci0jaW5jbHVkZSA8c2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5oPgotI2luY2x1ZGUgPHNjc2kvc2NzaV90cmFuc3BvcnQuaD4KLQotI2lmZGVmIF9fQklHX0VORElBTgotI2RlZmluZSBfX0JJR0VORElBTgotI2VuZGlmCi0KLXN0YXRpYyBpbmxpbmUgdTY0IGJmYV9vc19nZXRfbG9nX3RpbWUodm9pZCkKLXsKLQl1NjQgc3lzdGVtX3RpbWUgPSAwOwotCXN0cnVjdCB0aW1ldmFsIHR2OwotCWRvX2dldHRpbWVvZmRheSgmdHYpOwotCi0JLyogV2UgYXJlIGludGVyZXN0ZWQgaW4gc2Vjb25kcyBvbmx5LiAqLwotCXN5c3RlbV90aW1lID0gdHYudHZfc2VjOwotCXJldHVybiBzeXN0ZW1fdGltZTsKLX0KLQotI2RlZmluZSBiZmFfaW9fbGF0X2Nsb2NrX3Jlc19kaXYgSFoKLSNkZWZpbmUgYmZhX2lvX2xhdF9jbG9ja19yZXNfbXVsIDEwMDAKLQotI2RlZmluZSBCRkFfTE9HKGxldmVsLCBiZmFkLCBtYXNrLCBmbXQsIGFyZy4uLikJCQkJXAotZG8gewkJCQkJCQkJCVwKLQlpZiAoKChtYXNrKSA9PSA0KSB8fCAobGV2ZWxbMV0gPD0gJzQnKSkJCQkJXAotCQlkZXZfcHJpbnRrKGxldmVsLCAmKChiZmFkKS0+cGNpZGV2KS0+ZGV2LCBmbXQsICMjYXJnKTsJXAotfSB3aGlsZSAoMCkKLQotI2RlZmluZSBiZmFfc3dhcF8zYihfeCkJCQkJXAotCSgoKChfeCkgJiAweGZmKSA8PCAxNikgfAkJXAotCSgoX3gpICYgMHgwMGZmMDApIHwJCQlcCi0JKCgoX3gpICYgMHhmZjAwMDApID4+IDE2KSkKLQotI2RlZmluZSBiZmFfb3Nfc3dhcF9zZ2FkZHIoX3gpICAoKHU2NCkoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCSgoKHU2NCkoX3gpICYgKHU2NCkweDAwMDAwMDAwMDAwMDAwZmZ1bGwpIDw8IDMyKSAgICAgICAgfCAgICAgICBcCi0JKCgodTY0KShfeCkgJiAodTY0KTB4MDAwMDAwMDAwMDAwZmYwMHVsbCkgPDwgMzIpICAgICAgICB8ICAgICAgIFwKLQkoKCh1NjQpKF94KSAmICh1NjQpMHgwMDAwMDAwMDAwZmYwMDAwdWxsKSA8PCAzMikgICAgICAgIHwgICAgICAgXAotCSgoKHU2NCkoX3gpICYgKHU2NCkweDAwMDAwMDAwZmYwMDAwMDB1bGwpIDw8IDMyKSAgICAgICAgfCAgICAgICBcCi0JKCgodTY0KShfeCkgJiAodTY0KTB4MDAwMDAwZmYwMDAwMDAwMHVsbCkgPj4gMzIpICAgICAgICB8ICAgICAgIFwKLQkoKCh1NjQpKF94KSAmICh1NjQpMHgwMDAwZmYwMDAwMDAwMDAwdWxsKSA+PiAzMikgICAgICAgIHwgICAgICAgXAotCSgoKHU2NCkoX3gpICYgKHU2NCkweDAwZmYwMDAwMDAwMDAwMDB1bGwpID4+IDMyKSAgICAgICAgfCAgICAgICBcCi0JKCgodTY0KShfeCkgJiAodTY0KTB4ZmYwMDAwMDAwMDAwMDAwMHVsbCkgPj4gMzIpKSkKLQotI2lmbmRlZiBfX0JJR0VORElBTgotI2RlZmluZSBiZmFfb3NfaHRvbjNiKF94KSAgYmZhX3N3YXBfM2IoX3gpCi0jZGVmaW5lIGJmYV9vc19zZ2FkZHIoX3gpICAoX3gpCi0jZWxzZQotI2RlZmluZSBiZmFfb3NfaHRvbjNiKF94KSAgKF94KQotI2RlZmluZSBiZmFfb3Nfc2dhZGRyKF94KSAgYmZhX29zX3N3YXBfc2dhZGRyKF94KQotI2VuZGlmCi0KLSNkZWZpbmUgYmZhX29zX250b2gzYihfeCkgIGJmYV9vc19odG9uM2IoX3gpCi0jZGVmaW5lIGJmYV9vc191MzIoX19wYTY0KSAoKF9fcGE2NCkgPj4gMzIpCi0KLSNkZWZpbmUgQkZBX1RSQ19UUyhfdHJjbSkJCQkJXAotCSh7CQkJCQkJXAotCQlzdHJ1Y3QgdGltZXZhbCB0djsJCQlcCi0JCQkJCQkJXAotCQlkb19nZXR0aW1lb2ZkYXkoJnR2KTsJCQlcCi0JCSh0di50dl9zZWMqMTAwMDAwMCt0di50dl91c2VjKTsJCVwKLQkgfSkKLQotI2RlZmluZSBib29sZWFuX3QgaW50Ci0KLS8qCi0gKiBGb3IgY3VycmVudCB0aW1lIHN0YW1wLCBPUyBBUEkgd2lsbCBmaWxsLWluCi0gKi8KLXN0cnVjdCBiZmFfdGltZXZhbF9zIHsKLQl1MzIJdHZfc2VjOwkJLyogIHNlY29uZHMgICAgICAgICovCi0JdTMyCXR2X3VzZWM7CS8qICBtaWNyb3NlY29uZHMgICAqLwotfTsKLQotc3RhdGljIGlubGluZSB2b2lkCi1iZmFfb3NfZ2V0dGltZW9mZGF5KHN0cnVjdCBiZmFfdGltZXZhbF9zICp0dikKLXsKLQlzdHJ1Y3QgdGltZXZhbCAgdG1wX3R2OwotCi0JZG9fZ2V0dGltZW9mZGF5KCZ0bXBfdHYpOwotCXR2LT50dl9zZWMgPSAodTMyKSB0bXBfdHYudHZfc2VjOwotCXR2LT50dl91c2VjID0gKHUzMikgdG1wX3R2LnR2X3VzZWM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotd3duMnN0cihjaGFyICp3d25fc3RyLCB1NjQgd3duKQotewotCXVuaW9uIHsKLQkJdTY0IHd3bjsKLQkJdTggYnl0ZVs4XTsKLQl9IHc7Ci0KLQl3Lnd3biA9IHd3bjsKLQlzcHJpbnRmKHd3bl9zdHIsICIlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMngiLCB3LmJ5dGVbMF0sCi0JCXcuYnl0ZVsxXSwgdy5ieXRlWzJdLCB3LmJ5dGVbM10sIHcuYnl0ZVs0XSwgdy5ieXRlWzVdLAotCQl3LmJ5dGVbNl0sIHcuYnl0ZVs3XSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotZmNpZDJzdHIoY2hhciAqZmNpZF9zdHIsIHUzMiBmY2lkKQotewotCXVuaW9uIHsKLQkJdTMyIGZjaWQ7Ci0JCXU4IGJ5dGVbNF07Ci0JfSBmOwotCi0JZi5mY2lkID0gZmNpZDsKLQlzcHJpbnRmKGZjaWRfc3RyLCAiJTAyeDolMDJ4OiUwMngiLCBmLmJ5dGVbMV0sIGYuYnl0ZVsyXSwgZi5ieXRlWzNdKTsKLX0KLQotI2VuZGlmIC8qIF9fQkZBX09TX0lOQ19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3Bsb2cuaCBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3Bsb2cuaAppbmRleCA1MDFmMGVkLi4xYzliYWE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9wbG9nLmgKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfcGxvZy5oCkBAIC0xNTEsOSArMTUxLDUgQEAKIHZvaWQgYmZhX3Bsb2dfZmNoZHJfYW5kX3BsKHN0cnVjdCBiZmFfcGxvZ19zICpwbG9nLCBlbnVtIGJmYV9wbG9nX21pZCBtaWQsCiAJCQllbnVtIGJmYV9wbG9nX2VpZCBldmVudCwgdTE2IG1pc2MsCiAJCQlzdHJ1Y3QgZmNoc19zICpmY2hkciwgdTMyIHBsZF93MCk7Ci12b2lkIGJmYV9wbG9nX2NsZWFyKHN0cnVjdCBiZmFfcGxvZ19zICpwbG9nKTsKLXZvaWQgYmZhX3Bsb2dfZW5hYmxlKHN0cnVjdCBiZmFfcGxvZ19zICpwbG9nKTsKLXZvaWQgYmZhX3Bsb2dfZGlzYWJsZShzdHJ1Y3QgYmZhX3Bsb2dfcyAqcGxvZyk7Ci1iZmFfYm9vbGVhbl90CWJmYV9wbG9nX2dldF9zZXR0aW5nKHN0cnVjdCBiZmFfcGxvZ19zICpwbG9nKTsKIAogI2VuZGlmIC8qIF9fQkZBX1BPUlRMT0dfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9wb3J0LmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9wb3J0LmMKaW5kZXggZmZmOTYyMi4uM2Y4ZTlkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfcG9ydC5jCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3BvcnQuYwpAQCAtMTUsNiArMTUsNyBAQAogICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogICovCiAKKyNpbmNsdWRlICJiZmFkX2Rydi5oIgogI2luY2x1ZGUgImJmYV9kZWZzX3N2Yy5oIgogI2luY2x1ZGUgImJmYV9wb3J0LmgiCiAjaW5jbHVkZSAiYmZpLmgiCkBAIC0yOSwxNCArMzAsMTQgQEAKIGJmYV9wb3J0X3N0YXRzX3N3YXAoc3RydWN0IGJmYV9wb3J0X3MgKnBvcnQsIHVuaW9uIGJmYV9wb3J0X3N0YXRzX3UgKnN0YXRzKQogewogCXUzMiAgICAqZGlwID0gKHUzMiAqKSBzdGF0czsKLQl1MzIgICAgdDAsIHQxOworCV9fYmUzMiAgICB0MCwgdDE7CiAJaW50CSAgICBpOwogCiAJZm9yIChpID0gMDsgaSA8IHNpemVvZih1bmlvbiBiZmFfcG9ydF9zdGF0c191KS9zaXplb2YodTMyKTsKIAkJaSArPSAyKSB7CiAJCXQwID0gZGlwW2ldOwogCQl0MSA9IGRpcFtpICsgMV07Ci0jaWZkZWYgX19CSUdFTkRJQU4KKyNpZmRlZiBfX0JJR19FTkRJQU4KIAkJZGlwW2ldID0gYmUzMl90b19jcHUodDApOwogCQlkaXBbaSArIDFdID0gYmUzMl90b19jcHUodDEpOwogI2Vsc2UKQEAgLTk2LDEzICs5NywxMyBAQAogCXBvcnQtPnN0YXRzX2J1c3kgPSBCRkFfRkFMU0U7CiAKIAlpZiAoc3RhdHVzID09IEJGQV9TVEFUVVNfT0spIHsKLQkJc3RydWN0IGJmYV90aW1ldmFsX3MgdHY7CisJCXN0cnVjdCB0aW1ldmFsIHR2OwogCiAJCW1lbWNweShwb3J0LT5zdGF0cywgcG9ydC0+c3RhdHNfZG1hLmt2YSwKIAkJICAgICAgIHNpemVvZih1bmlvbiBiZmFfcG9ydF9zdGF0c191KSk7CiAJCWJmYV9wb3J0X3N0YXRzX3N3YXAocG9ydCwgcG9ydC0+c3RhdHMpOwogCi0JCWJmYV9vc19nZXR0aW1lb2ZkYXkoJnR2KTsKKwkJZG9fZ2V0dGltZW9mZGF5KCZ0dik7CiAJCXBvcnQtPnN0YXRzLT5mYy5zZWNzX3Jlc2V0ID0gdHYudHZfc2VjIC0gcG9ydC0+c3RhdHNfcmVzZXRfdGltZTsKIAl9CiAKQEAgLTEyNCw3ICsxMjUsNyBAQAogc3RhdGljIHZvaWQKIGJmYV9wb3J0X2NsZWFyX3N0YXRzX2lzcihzdHJ1Y3QgYmZhX3BvcnRfcyAqcG9ydCwgYmZhX3N0YXR1c190IHN0YXR1cykKIHsKLQlzdHJ1Y3QgYmZhX3RpbWV2YWxfcyB0djsKKwlzdHJ1Y3QgdGltZXZhbCB0djsKIAogCXBvcnQtPnN0YXRzX3N0YXR1cyA9IHN0YXR1czsKIAlwb3J0LT5zdGF0c19idXN5ICAgPSBCRkFfRkFMU0U7CkBAIC0xMzIsNyArMTMzLDcgQEAKIAkvKgogCSogcmUtaW5pdGlhbGl6ZSB0aW1lIHN0YW1wIGZvciBzdGF0cyByZXNldAogCSovCi0JYmZhX29zX2dldHRpbWVvZmRheSgmdHYpOworCWRvX2dldHRpbWVvZmRheSgmdHYpOwogCXBvcnQtPnN0YXRzX3Jlc2V0X3RpbWUgPSB0di50dl9zZWM7CiAKIAlpZiAocG9ydC0+c3RhdHNfY2JmbikgewpAQCAtMTg1LDcgKzE4Niw3IEBACiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJYmZhX2Fzc2VydCgwKTsKKwkJV0FSTl9PTigxKTsKIAl9CiB9CiAKQEAgLTQzMiw5ICs0MzMsOSBAQAogYmZhX3BvcnRfYXR0YWNoKHN0cnVjdCBiZmFfcG9ydF9zICpwb3J0LCBzdHJ1Y3QgYmZhX2lvY19zICppb2MsCiAJCSB2b2lkICpkZXYsIHN0cnVjdCBiZmFfdHJjX21vZF9zICp0cmNtb2QpCiB7Ci0Jc3RydWN0IGJmYV90aW1ldmFsX3MgdHY7CisJc3RydWN0IHRpbWV2YWwgdHY7CiAKLQliZmFfYXNzZXJ0KHBvcnQpOworCVdBUk5fT04oIXBvcnQpOwogCiAJcG9ydC0+ZGV2ICAgID0gZGV2OwogCXBvcnQtPmlvYyAgICA9IGlvYzsKQEAgLTQ0NywyNyArNDQ4LDEzIEBACiAKIAliZmFfaW9jX21ib3hfcmVnaXNyKHBvcnQtPmlvYywgQkZJX01DX1BPUlQsIGJmYV9wb3J0X2lzciwgcG9ydCk7CiAJYmZhX2lvY19oYmZhaWxfaW5pdCgmcG9ydC0+aGJmYWlsLCBiZmFfcG9ydF9oYmZhaWwsIHBvcnQpOwotCWJmYV9pb2NfaGJmYWlsX3JlZ2lzdGVyKHBvcnQtPmlvYywgJnBvcnQtPmhiZmFpbCk7CisJbGlzdF9hZGRfdGFpbCgmcG9ydC0+aGJmYWlsLnFlLCAmcG9ydC0+aW9jLT5oYl9ub3RpZnlfcSk7CiAKIAkvKgogCSAqIGluaXRpYWxpemUgdGltZSBzdGFtcCBmb3Igc3RhdHMgcmVzZXQKIAkgKi8KLQliZmFfb3NfZ2V0dGltZW9mZGF5KCZ0dik7CisJZG9fZ2V0dGltZW9mZGF5KCZ0dik7CiAJcG9ydC0+c3RhdHNfcmVzZXRfdGltZSA9IHR2LnR2X3NlYzsKIAogCWJmYV90cmMocG9ydCwgMCk7CiB9Ci0KLS8qCi0gKiBiZmFfcG9ydF9kZXRhY2goKQotICoKLSAqCi0gKiBAcGFyYW1baW5dIHBvcnQgLSBQb2ludGVyIHRvIHRoZSBQb3J0IG1vZHVsZSBkYXRhIHN0cnVjdHVyZQotICoKLSAqIEByZXR1cm4gdm9pZAotICovCi12b2lkCi1iZmFfcG9ydF9kZXRhY2goc3RydWN0IGJmYV9wb3J0X3MgKnBvcnQpCi17Ci0JYmZhX3RyYyhwb3J0LCAwKTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3BvcnQuaCBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3BvcnQuaAppbmRleCBkYmNlOWRmLi5jNGVlOWRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9wb3J0LmgKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfcG9ydC5oCkBAIC00OCw3ICs0OCw2IEBACiAKIHZvaWQJICAgICBiZmFfcG9ydF9hdHRhY2goc3RydWN0IGJmYV9wb3J0X3MgKnBvcnQsIHN0cnVjdCBiZmFfaW9jX3MgKmlvYywKIAkJCQl2b2lkICpkZXYsIHN0cnVjdCBiZmFfdHJjX21vZF9zICp0cmNtb2QpOwotdm9pZAkgICAgIGJmYV9wb3J0X2RldGFjaChzdHJ1Y3QgYmZhX3BvcnRfcyAqcG9ydCk7CiB2b2lkCSAgICAgYmZhX3BvcnRfaGJmYWlsKHZvaWQgKmFyZyk7CiAKIGJmYV9zdGF0dXNfdCBiZmFfcG9ydF9nZXRfc3RhdHMoc3RydWN0IGJmYV9wb3J0X3MgKnBvcnQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9zdmMuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3N2Yy5jCmluZGV4IDM3ZTE2YWMuLjFkMzQ5MjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3N2Yy5jCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3N2Yy5jCkBAIC0xNSwxMSArMTUsMTAgQEAKICAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICAqLwogCi0jaW5jbHVkZSAiYmZhX29zX2luYy5oIgorI2luY2x1ZGUgImJmYWRfZHJ2LmgiCiAjaW5jbHVkZSAiYmZhX3Bsb2cuaCIKICNpbmNsdWRlICJiZmFfY3MuaCIKICNpbmNsdWRlICJiZmFfbW9kdWxlcy5oIgotI2luY2x1ZGUgImJmYWRfZHJ2LmgiCiAKIEJGQV9UUkNfRklMRShIQUwsIEZDWFApOwogQkZBX01PRFVMRShmY3hwKTsKQEAgLTQxLDE5ICs0MCw2IEBACiAjZGVmaW5lIEJGQV9MUFNfTUFYX1ZQT1JUU19TVVBQX0NCICAyNTUKICNkZWZpbmUgQkZBX0xQU19NQVhfVlBPUlRTX1NVUFBfQ1QgIDE5MAogCi0vKgotICogIGxwc19wdnQgQkZBIExQUyBwcml2YXRlIGZ1bmN0aW9ucwotICovCi0KLWVudW0gYmZhX2xwc19ldmVudCB7Ci0JQkZBX0xQU19TTV9MT0dJTgk9IDEsCS8qIGxvZ2luIHJlcXVlc3QgZnJvbSB1c2VyCSovCi0JQkZBX0xQU19TTV9MT0dPVVQJPSAyLAkvKiBsb2dvdXQgcmVxdWVzdCBmcm9tIHVzZXIJKi8KLQlCRkFfTFBTX1NNX0ZXUlNQCT0gMywJLyogZi93IHJlc3BvbnNlIHRvIGxvZ2luL2xvZ291dAkqLwotCUJGQV9MUFNfU01fUkVTVU1FCT0gNCwJLyogc3BhY2UgcHJlc2VudCBpbiByZXFxIHF1ZXVlCSovCi0JQkZBX0xQU19TTV9ERUxFVEUJPSA1LAkvKiBscHMgZGVsZXRlIGZyb20gdXNlcgkJKi8KLQlCRkFfTFBTX1NNX09GRkxJTkUJPSA2LAkvKiBMaW5rIGlzIG9mZmxpbmUJCSovCi0JQkZBX0xQU19TTV9SWF9DVkwJPSA3LAkvKiBSeCBjbGVhciB2aXJ0dWFsIGxpbmsJKi8KLX07CiAKIC8qCiAgKiBGQyBQT1JUIHJlbGF0ZWQgZGVmaW5pdGlvbnMKQEAgLTY2LDcgKzUyLDYgQEAKIAkoKGJmYV9mY3BvcnRfaXNfZGlzYWJsZWQoYmZhKSA9PSBCRkFfVFJVRSkgfHwgXAogCShiZmFfaW9jX2lzX2Rpc2FibGVkKCZiZmEtPmlvYykgPT0gQkZBX1RSVUUpKQogCi0KIC8qCiAgKiBCRkEgcG9ydCBzdGF0ZSBtYWNoaW5lIGV2ZW50cwogICovCkBAIC0xMTMsMTkgKzk4LDYgQEAKIAkJfQkJCQkJCQlcCiB9IHdoaWxlICgwKQogCi0KLWVudW0gYmZhX3Jwb3J0X2V2ZW50IHsKLQlCRkFfUlBPUlRfU01fQ1JFQVRFCT0gMSwJLyogIHJwb3J0IGNyZWF0ZSBldmVudAkJKi8KLQlCRkFfUlBPUlRfU01fREVMRVRFCT0gMiwJLyogIGRlbGV0aW5nIGFuIGV4aXN0aW5nIHJwb3J0CSovCi0JQkZBX1JQT1JUX1NNX09OTElORQk9IDMsCS8qICBycG9ydCBpcyBvbmxpbmUJCSovCi0JQkZBX1JQT1JUX1NNX09GRkxJTkUJPSA0LAkvKiAgcnBvcnQgaXMgb2ZmbGluZQkJKi8KLQlCRkFfUlBPUlRfU01fRldSU1AJPSA1LAkvKiAgZmlybXdhcmUgcmVzcG9uc2UJCSovCi0JQkZBX1JQT1JUX1NNX0hXRkFJTAk9IDYsCS8qICBJT0MgaC93IGZhaWx1cmUJCSovCi0JQkZBX1JQT1JUX1NNX1FPU19TQ04JPSA3LAkvKiAgUW9TIFNDTiBmcm9tIGZpcm13YXJlCSovCi0JQkZBX1JQT1JUX1NNX1NFVF9TUEVFRAk9IDgsCS8qICBTZXQgUnBvcnQgU3BlZWQJCSovCi0JQkZBX1JQT1JUX1NNX1FSRVNVTUUJPSA5LAkvKiAgc3BhY2UgaW4gcmVxdWV1ZSBxdWV1ZQkqLwotfTsKLQogLyoKICAqIGZvcndhcmQgZGVjbGFyYXRpb25zIEZDWFAgcmVsYXRlZCBmdW5jdGlvbnMKICAqLwpAQCAtMTU5LDYgKzEzMSw3IEBACiBzdGF0aWMgdm9pZCBiZmFfbHBzX2ZyZWUoc3RydWN0IGJmYV9scHNfcyAqbHBzKTsKIHN0YXRpYyB2b2lkIGJmYV9scHNfc2VuZF9sb2dpbihzdHJ1Y3QgYmZhX2xwc19zICpscHMpOwogc3RhdGljIHZvaWQgYmZhX2xwc19zZW5kX2xvZ291dChzdHJ1Y3QgYmZhX2xwc19zICpscHMpOworc3RhdGljIHZvaWQgYmZhX2xwc19zZW5kX3NldF9uMm5fcGlkKHN0cnVjdCBiZmFfbHBzX3MgKmxwcyk7CiBzdGF0aWMgdm9pZCBiZmFfbHBzX2xvZ2luX2NvbXAoc3RydWN0IGJmYV9scHNfcyAqbHBzKTsKIHN0YXRpYyB2b2lkIGJmYV9scHNfbG9nb3V0X2NvbXAoc3RydWN0IGJmYV9scHNfcyAqbHBzKTsKIHN0YXRpYyB2b2lkIGJmYV9scHNfY3ZsX2V2ZW50KHN0cnVjdCBiZmFfbHBzX3MgKmxwcyk7CkBAIC0xNzEsNiArMTQ0LDggQEAKIHN0YXRpYyB2b2lkIGJmYV9scHNfc21fbG9naW53YWl0KHN0cnVjdCBiZmFfbHBzX3MgKmxwcywgZW51bSBiZmFfbHBzX2V2ZW50CiAJCQkJCWV2ZW50KTsKIHN0YXRpYyB2b2lkIGJmYV9scHNfc21fb25saW5lKHN0cnVjdCBiZmFfbHBzX3MgKmxwcywgZW51bSBiZmFfbHBzX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkIGJmYV9scHNfc21fb25saW5lX24ybl9waWRfd2FpdChzdHJ1Y3QgYmZhX2xwc19zICpscHMsCisJCQkJCWVudW0gYmZhX2xwc19ldmVudCBldmVudCk7CiBzdGF0aWMgdm9pZCBiZmFfbHBzX3NtX2xvZ291dChzdHJ1Y3QgYmZhX2xwc19zICpscHMsIGVudW0gYmZhX2xwc19ldmVudCBldmVudCk7CiBzdGF0aWMgdm9pZCBiZmFfbHBzX3NtX2xvZ293YWl0KHN0cnVjdCBiZmFfbHBzX3MgKmxwcywgZW51bSBiZmFfbHBzX2V2ZW50CiAJCQkJCWV2ZW50KTsKQEAgLTMxMiw2ICsyODcsMTggQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHU2NAorYmZhX2dldF9sb2dfdGltZSh2b2lkKQoreworCXU2NCBzeXN0ZW1fdGltZSA9IDA7CisJc3RydWN0IHRpbWV2YWwgdHY7CisJZG9fZ2V0dGltZW9mZGF5KCZ0dik7CisKKwkvKiBXZSBhcmUgaW50ZXJlc3RlZCBpbiBzZWNvbmRzIG9ubHkuICovCisJc3lzdGVtX3RpbWUgPSB0di50dl9zZWM7CisJcmV0dXJuIHN5c3RlbV90aW1lOworfQorCiBzdGF0aWMgdm9pZAogYmZhX3Bsb2dfYWRkKHN0cnVjdCBiZmFfcGxvZ19zICpwbG9nLCBzdHJ1Y3QgYmZhX3Bsb2dfcmVjX3MgKnBsX3JlYykKIHsKQEAgLTMyMiw3ICszMDksNyBAQAogCQlyZXR1cm47CiAKIAlpZiAocGxrZF92YWxpZGF0ZV9sb2dyZWMocGxfcmVjKSkgewotCQliZmFfYXNzZXJ0KDApOworCQlXQVJOX09OKDEpOwogCQlyZXR1cm47CiAJfQogCkBAIC0zMzIsNyArMzE5LDcgQEAKIAogCW1lbWNweShwbF9yZWNwLCBwbF9yZWMsIHNpemVvZihzdHJ1Y3QgYmZhX3Bsb2dfcmVjX3MpKTsKIAotCXBsX3JlY3AtPnR2ID0gYmZhX29zX2dldF9sb2dfdGltZSgpOworCXBsX3JlY3AtPnR2ID0gYmZhX2dldF9sb2dfdGltZSgpOwogCUJGQV9QTF9MT0dfUkVDX0lOQ1IocGxvZy0+dGFpbCk7CiAKIAlpZiAocGxvZy0+aGVhZCA9PSBwbG9nLT50YWlsKQpAQCAtNDM3LDI5ICs0MjQsNiBAQAogCX0KIH0KIAotdm9pZAotYmZhX3Bsb2dfY2xlYXIoc3RydWN0IGJmYV9wbG9nX3MgKnBsb2cpCi17Ci0JcGxvZy0+aGVhZCA9IHBsb2ctPnRhaWwgPSAwOwotfQotCi12b2lkCi1iZmFfcGxvZ19lbmFibGUoc3RydWN0IGJmYV9wbG9nX3MgKnBsb2cpCi17Ci0JcGxvZy0+cGxvZ19lbmFibGVkID0gMTsKLX0KLQotdm9pZAotYmZhX3Bsb2dfZGlzYWJsZShzdHJ1Y3QgYmZhX3Bsb2dfcyAqcGxvZykKLXsKLQlwbG9nLT5wbG9nX2VuYWJsZWQgPSAwOwotfQotCi1iZmFfYm9vbGVhbl90Ci1iZmFfcGxvZ19nZXRfc2V0dGluZyhzdHJ1Y3QgYmZhX3Bsb2dfcyAqcGxvZykKLXsKLQlyZXR1cm4gKGJmYV9ib29sZWFuX3QpcGxvZy0+cGxvZ19lbmFibGVkOwotfQogCiAvKgogICogIGZjeHBfcHZ0IEJGQSBGQ1hQIHByaXZhdGUgZnVuY3Rpb25zCkBAIC02MzcsMTUgKzYwMSwxNSBAQAogCSAgICAgICBiZmFfZmN4cF9nZXRfc2dsZW5fdCBzZ2xlbl9jYmZuKQogewogCi0JYmZhX2Fzc2VydChiZmEgIT0gTlVMTCk7CisJV0FSTl9PTihiZmEgPT0gTlVMTCk7CiAKIAliZmFfdHJjKGJmYSwgZmN4cC0+ZmN4cF90YWcpOwogCiAJaWYgKG5fc2dsZXMgPT0gMCkgewogCQkqdXNlX2lidWYgPSAxOwogCX0gZWxzZSB7Ci0JCWJmYV9hc3NlcnQoKnNnYV9jYmZuICE9IE5VTEwpOwotCQliZmFfYXNzZXJ0KCpzZ2xlbl9jYmZuICE9IE5VTEwpOworCQlXQVJOX09OKCpzZ2FfY2JmbiA9PSBOVUxMKTsKKwkJV0FSTl9PTigqc2dsZW5fY2JmbiA9PSBOVUxMKTsKIAogCQkqdXNlX2lidWYgPSAwOwogCQkqcl9zZ2FfY2JmbiA9IHNnYV9jYmZuOwpAQCAtNjU3LDcgKzYyMSw3IEBACiAJCSAqIGFsbG9jIHJlcXVpcmVkIHNncGdzCiAJCSAqLwogCQlpZiAobl9zZ2xlcyA+IEJGSV9TR0VfSU5MSU5FKQotCQkJYmZhX2Fzc2VydCgwKTsKKwkJCVdBUk5fT04oMSk7CiAJfQogCiB9CkBAIC02NzEsNyArNjM1LDcgQEAKIAkgICAgICAgYmZhX2ZjeHBfZ2V0X3NnbGVuX3QgcnNwX3NnbGVuX2NiZm4pCiB7CiAKLQliZmFfYXNzZXJ0KGJmYSAhPSBOVUxMKTsKKwlXQVJOX09OKGJmYSA9PSBOVUxMKTsKIAogCWJmYV90cmMoYmZhLCBmY3hwLT5mY3hwX3RhZyk7CiAKQEAgLTcwOCw3ICs2NzIsNyBAQAogCQlyZXR1cm47CiAJfQogCi0JYmZhX2Fzc2VydChiZmFfcV9pc19vbl9xKCZtb2QtPmZjeHBfYWN0aXZlX3EsIGZjeHApKTsKKwlXQVJOX09OKCFiZmFfcV9pc19vbl9xKCZtb2QtPmZjeHBfYWN0aXZlX3EsIGZjeHApKTsKIAlsaXN0X2RlbCgmZmN4cC0+cWUpOwogCWxpc3RfYWRkX3RhaWwoJmZjeHAtPnFlLCAmbW9kLT5mY3hwX2ZyZWVfcSk7CiB9CkBAIC03NTcsNyArNzIxLDcgQEAKIAogCWZjeHAgPSBCRkFfRkNYUF9GUk9NX1RBRyhtb2QsIGZjeHBfdGFnKTsKIAotCWJmYV9hc3NlcnQoZmN4cC0+c2VuZF9jYmZuICE9IE5VTEwpOworCVdBUk5fT04oZmN4cC0+c2VuZF9jYmZuID09IE5VTEwpOwogCiAJaGFsX2ZjeHBfcnhfcGxvZyhtb2QtPmJmYSwgZmN4cCwgZmN4cF9yc3ApOwogCkBAIC05MTMsMTMgKzg3NywxMyBAQAogCQkJCQlCRkFfRkNYUF9SRVFfUExEX1BBKGZjeHApKTsKIAl9IGVsc2UgewogCQlpZiAoZmN4cC0+bnJlcV9zZ2xlcyA+IDApIHsKLQkJCWJmYV9hc3NlcnQoZmN4cC0+bnJlcV9zZ2xlcyA9PSAxKTsKKwkJCVdBUk5fT04oZmN4cC0+bnJlcV9zZ2xlcyAhPSAxKTsKIAkJCWhhbF9mY3hwX3NldF9sb2NhbF9zZ2VzKHNlbmRfcmVxLT5yZXFfc2dlLAogCQkJCQkJcmVxaS0+cmVxX3RvdF9sZW4sCiAJCQkJCQlmY3hwLT5yZXFfc2dhX2NiZm4oZmN4cC0+Y2FsbGVyLAogCQkJCQkJCQkgICAwKSk7CiAJCX0gZWxzZSB7Ci0JCQliZmFfYXNzZXJ0KHJlcWktPnJlcV90b3RfbGVuID09IDApOworCQkJV0FSTl9PTihyZXFpLT5yZXFfdG90X2xlbiAhPSAwKTsKIAkJCWhhbF9mY3hwX3NldF9sb2NhbF9zZ2VzKHNlbmRfcmVxLT5yc3Bfc2dlLCAwLCAwKTsKIAkJfQogCX0KQEAgLTkyOCwyMCArODkyLDIwIEBACiAJICogc2V0dXAgcnNwIHNnbGVzCiAJICovCiAJaWYgKGZjeHAtPnVzZV9pcnNwYnVmID09IDEpIHsKLQkJYmZhX2Fzc2VydChyc3BpLT5yc3BfbWF4bGVuIDw9IEJGQV9GQ1hQX01BWF9MQlVGX1NaKTsKKwkJV0FSTl9PTihyc3BpLT5yc3BfbWF4bGVuID4gQkZBX0ZDWFBfTUFYX0xCVUZfU1opOwogCiAJCWhhbF9mY3hwX3NldF9sb2NhbF9zZ2VzKHNlbmRfcmVxLT5yc3Bfc2dlLCByc3BpLT5yc3BfbWF4bGVuLAogCQkJCQlCRkFfRkNYUF9SU1BfUExEX1BBKGZjeHApKTsKIAogCX0gZWxzZSB7CiAJCWlmIChmY3hwLT5ucnNwX3NnbGVzID4gMCkgewotCQkJYmZhX2Fzc2VydChmY3hwLT5ucnNwX3NnbGVzID09IDEpOworCQkJV0FSTl9PTihmY3hwLT5ucnNwX3NnbGVzICE9IDEpOwogCQkJaGFsX2ZjeHBfc2V0X2xvY2FsX3NnZXMoc2VuZF9yZXEtPnJzcF9zZ2UsCiAJCQkJCQlyc3BpLT5yc3BfbWF4bGVuLAogCQkJCQkJZmN4cC0+cnNwX3NnYV9jYmZuKGZjeHAtPmNhbGxlciwKIAkJCQkJCQkJICAgMCkpOwogCQl9IGVsc2UgewotCQkJYmZhX2Fzc2VydChyc3BpLT5yc3BfbWF4bGVuID09IDApOworCQkJV0FSTl9PTihyc3BpLT5yc3BfbWF4bGVuICE9IDApOwogCQkJaGFsX2ZjeHBfc2V0X2xvY2FsX3NnZXMoc2VuZF9yZXEtPnJzcF9zZ2UsIDAsIDApOwogCQl9CiAJfQpAQCAtOTU1LDEwICs5MTksNiBAQAogfQogCiAvKgotICogIGhhbF9mY3hwX2FwaSBCRkEgRkNYUCBBUEkKLSAqLwotCi0vKgogICogQWxsb2NhdGUgYW4gRkNYUCBpbnN0YW5jZSB0byBzZW5kIGEgcmVzcG9uc2Ugb3IgdG8gc2VuZCBhIHJlcXVlc3QKICAqIHRoYXQgaGFzIGEgcmVzcG9uc2UuIFJlcXVlc3QvcmVzcG9uc2UgYnVmZmVycyBhcmUgYWxsb2NhdGVkIGJ5IGNhbGxlci4KICAqCkBAIC05OTAsNyArOTUwLDcgQEAKIHsKIAlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCA9IE5VTEw7CiAKLQliZmFfYXNzZXJ0KGJmYSAhPSBOVUxMKTsKKwlXQVJOX09OKGJmYSA9PSBOVUxMKTsKIAogCWZjeHAgPSBiZmFfZmN4cF9nZXQoQkZBX0ZDWFBfTU9EKGJmYSkpOwogCWlmIChmY3hwID09IE5VTEwpCkBAIC0xMDE3LDcgKzk3Nyw3IEBACiAJc3RydWN0IGJmYV9mY3hwX21vZF9zICptb2QgPSBmY3hwLT5mY3hwX21vZDsKIAl2b2lkCSpyZXFidWY7CiAKLQliZmFfYXNzZXJ0KGZjeHAtPnVzZV9pcmVxYnVmID09IDEpOworCVdBUk5fT04oZmN4cC0+dXNlX2lyZXFidWYgIT0gMSk7CiAJcmVxYnVmID0gKCh1OCAqKW1vZC0+cmVxX3BsZF9saXN0X2t2YSkgKwogCQlmY3hwLT5mY3hwX3RhZyAqIG1vZC0+cmVxX3BsZF9zejsKIAlyZXR1cm4gcmVxYnVmOwpAQCAtMTA0NCw3ICsxMDA0LDcgQEAKIAlzdHJ1Y3QgYmZhX2ZjeHBfbW9kX3MgKm1vZCA9IGZjeHAtPmZjeHBfbW9kOwogCXZvaWQJKnJzcGJ1ZjsKIAotCWJmYV9hc3NlcnQoZmN4cC0+dXNlX2lyc3BidWYgPT0gMSk7CisJV0FSTl9PTihmY3hwLT51c2VfaXJzcGJ1ZiAhPSAxKTsKIAogCXJzcGJ1ZiA9ICgodTggKiltb2QtPnJzcF9wbGRfbGlzdF9rdmEpICsKIAkJZmN4cC0+ZmN4cF90YWcgKiBtb2QtPnJzcF9wbGRfc3o7CkBAIC0xMDUyLDcgKzEwMTIsNyBAQAogfQogCiAvKgotICoJCUZyZWUgdGhlIEJGQSBGQ1hQCisgKiBGcmVlIHRoZSBCRkEgRkNYUAogICoKICAqIEBwYXJhbVtpbl0JZmN4cAkJCUJGQSBmY3hwIHBvaW50ZXIKICAqCkBAIC0xMDYzLDcgKzEwMjMsNyBAQAogewogCXN0cnVjdCBiZmFfZmN4cF9tb2RfcyAqbW9kID0gZmN4cC0+ZmN4cF9tb2Q7CiAKLQliZmFfYXNzZXJ0KGZjeHAgIT0gTlVMTCk7CisJV0FSTl9PTihmY3hwID09IE5VTEwpOwogCWJmYV90cmMobW9kLT5iZmEsIGZjeHAtPmZjeHBfdGFnKTsKIAliZmFfZmN4cF9wdXQoZmN4cCk7CiB9CkBAIC0xMTQyLDcgKzExMDIsNyBAQAogYmZhX2ZjeHBfYWJvcnQoc3RydWN0IGJmYV9mY3hwX3MgKmZjeHApCiB7CiAJYmZhX3RyYyhmY3hwLT5mY3hwX21vZC0+YmZhLCBmY3hwLT5mY3hwX3RhZyk7Ci0JYmZhX2Fzc2VydCgwKTsKKwlXQVJOX09OKDEpOwogCXJldHVybiBCRkFfU1RBVFVTX09LOwogfQogCkBAIC0xMTU3LDcgKzExMTcsNyBAQAogewogCXN0cnVjdCBiZmFfZmN4cF9tb2RfcyAqbW9kID0gQkZBX0ZDWFBfTU9EKGJmYSk7CiAKLQliZmFfYXNzZXJ0KGxpc3RfZW1wdHkoJm1vZC0+ZmN4cF9mcmVlX3EpKTsKKwlXQVJOX09OKCFsaXN0X2VtcHR5KCZtb2QtPmZjeHBfZnJlZV9xKSk7CiAKIAl3cWUtPmFsbG9jX2NiZm4gPSBhbGxvY19jYmZuOwogCXdxZS0+YWxsb2NfY2JhcmcgPSBhbGxvY19jYmFyZzsKQEAgLTExNzgsNyArMTEzOCw3IEBACiB7CiAJc3RydWN0IGJmYV9mY3hwX21vZF9zICptb2QgPSBCRkFfRkNYUF9NT0QoYmZhKTsKIAotCWJmYV9hc3NlcnQoYmZhX3FfaXNfb25fcSgmbW9kLT53YWl0X3EsIHdxZSkpOworCVdBUk5fT04oIWJmYV9xX2lzX29uX3EoJm1vZC0+d2FpdF9xLCB3cWUpKTsKIAlsaXN0X2RlbCgmd3FlLT5xZSk7CiB9CiAKQEAgLTExOTksMTIgKzExNTksNiBAQAogCWZjeHAtPnNlbmRfY2JmbiA9IGJmYV9mY3hwX251bGxfY29tcDsKIH0KIAotCi0KLS8qCi0gKiAgaGFsX2ZjeHBfcHVibGljIEJGQSBGQ1hQIHB1YmxpYyBmdW5jdGlvbnMKLSAqLwotCiB2b2lkCiBiZmFfZmN4cF9pc3Ioc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmlfbXNnX3MgKm1zZykKIHsKQEAgLTEyMTUsNyArMTE2OSw3IEBACiAKIAlkZWZhdWx0OgogCQliZmFfdHJjKGJmYSwgbXNnLT5taGRyLm1zZ19pZCk7Ci0JCWJmYV9hc3NlcnQoMCk7CisJCVdBUk5fT04oMSk7CiAJfQogfQogCkBAIC0xMzAzLDYgKzEyNTcsMTIgQEAKIAkJCWVsc2UKIAkJCQliZmFfcGxvZ19zdHIobHBzLT5iZmEtPnBsb2csIEJGQV9QTF9NSURfTFBTLAogCQkJCQlCRkFfUExfRUlEX0xPR0lOLCAwLCAiRkxPR0kgQWNjZXB0Iik7CisJCQkvKiBJZiBOMk4sIHNlbmQgdGhlIGFzc2lnbmVkIFBJRCB0byBGVyAqLworCQkJYmZhX3RyYyhscHMtPmJmYSwgbHBzLT5mcG9ydCk7CisJCQliZmFfdHJjKGxwcy0+YmZhLCBscHMtPmxwX3BpZCk7CisKKwkJCWlmICghbHBzLT5mcG9ydCAmJiBscHMtPmxwX3BpZCkKKwkJCQliZmFfc21fc2VuZF9ldmVudChscHMsIEJGQV9MUFNfU01fU0VUX04yTl9QSUQpOwogCQl9IGVsc2UgewogCQkJYmZhX3NtX3NldF9zdGF0ZShscHMsIGJmYV9scHNfc21faW5pdCk7CiAJCQlpZiAobHBzLT5mZGlzYykKQEAgLTEzMjEsNiArMTI4MSwxMSBAQAogCQliZmFfc21fc2V0X3N0YXRlKGxwcywgYmZhX2xwc19zbV9pbml0KTsKIAkJYnJlYWs7CiAKKwljYXNlIEJGQV9MUFNfU01fU0VUX04yTl9QSUQ6CisJCWJmYV90cmMobHBzLT5iZmEsIGxwcy0+ZnBvcnQpOworCQliZmFfdHJjKGxwcy0+YmZhLCBscHMtPmxwX3BpZCk7CisJCWJyZWFrOworCiAJZGVmYXVsdDoKIAkJYmZhX3NtX2ZhdWx0KGxwcy0+YmZhLCBldmVudCk7CiAJfQpAQCAtMTM4OSw2ICsxMzU0LDE0IEBACiAJCQlCRkFfUExfRUlEX0ZJUF9GQ0ZfQ1ZMLCAwLCAiRkNGIENsZWFyIFZpcnQuIExpbmsgUngiKTsKIAkJYnJlYWs7CiAKKwljYXNlIEJGQV9MUFNfU01fU0VUX04yTl9QSUQ6CisJCWlmIChiZmFfcmVxcV9mdWxsKGxwcy0+YmZhLCBscHMtPnJlcXEpKSB7CisJCQliZmFfc21fc2V0X3N0YXRlKGxwcywgYmZhX2xwc19zbV9vbmxpbmVfbjJuX3BpZF93YWl0KTsKKwkJCWJmYV9yZXFxX3dhaXQobHBzLT5iZmEsIGxwcy0+cmVxcSwgJmxwcy0+d3FlKTsKKwkJfSBlbHNlCisJCQliZmFfbHBzX3NlbmRfc2V0X24ybl9waWQobHBzKTsKKwkJYnJlYWs7CisKIAljYXNlIEJGQV9MUFNfU01fT0ZGTElORToKIAljYXNlIEJGQV9MUFNfU01fREVMRVRFOgogCQliZmFfc21fc2V0X3N0YXRlKGxwcywgYmZhX2xwc19zbV9pbml0KTsKQEAgLTE0MDAsNiArMTM3Myw0OCBAQAogfQogCiAvKgorICogbG9naW4gY29tcGxldGUKKyAqLworc3RhdGljIHZvaWQKK2JmYV9scHNfc21fb25saW5lX24ybl9waWRfd2FpdChzdHJ1Y3QgYmZhX2xwc19zICpscHMsIGVudW0gYmZhX2xwc19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGxwcy0+YmZhLCBscHMtPmxwX3RhZyk7CisJYmZhX3RyYyhscHMtPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0xQU19TTV9SRVNVTUU6CisJCWJmYV9zbV9zZXRfc3RhdGUobHBzLCBiZmFfbHBzX3NtX29ubGluZSk7CisJCWJmYV9scHNfc2VuZF9zZXRfbjJuX3BpZChscHMpOworCQlicmVhazsKKworCWNhc2UgQkZBX0xQU19TTV9MT0dPVVQ6CisJCWJmYV9zbV9zZXRfc3RhdGUobHBzLCBiZmFfbHBzX3NtX2xvZ293YWl0KTsKKwkJYmZhX3Bsb2dfc3RyKGxwcy0+YmZhLT5wbG9nLCBCRkFfUExfTUlEX0xQUywKKwkJCUJGQV9QTF9FSURfTE9HTywgMCwgIkxvZ291dCIpOworCQlicmVhazsKKworCWNhc2UgQkZBX0xQU19TTV9SWF9DVkw6CisJCWJmYV9zbV9zZXRfc3RhdGUobHBzLCBiZmFfbHBzX3NtX2luaXQpOworCQliZmFfcmVxcV93Y2FuY2VsKCZscHMtPndxZSk7CisKKwkJLyogTGV0IHRoZSB2cG9ydCBtb2R1bGUga25vdyBhYm91dCB0aGlzIGV2ZW50ICovCisJCWJmYV9scHNfY3ZsX2V2ZW50KGxwcyk7CisJCWJmYV9wbG9nX3N0cihscHMtPmJmYS0+cGxvZywgQkZBX1BMX01JRF9MUFMsCisJCQlCRkFfUExfRUlEX0ZJUF9GQ0ZfQ1ZMLCAwLCAiRkNGIENsZWFyIFZpcnQuIExpbmsgUngiKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9MUFNfU01fT0ZGTElORToKKwljYXNlIEJGQV9MUFNfU01fREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKGxwcywgYmZhX2xwc19zbV9pbml0KTsKKwkJYmZhX3JlcXFfd2NhbmNlbCgmbHBzLT53cWUpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zbV9mYXVsdChscHMtPmJmYSwgZXZlbnQpOworCX0KK30KKworLyoKICAqIGxvZ291dCBpbiBwcm9ncmVzcyAtIGF3YWl0aW5nIGZpcm13YXJlIHJlc3BvbnNlCiAgKi8KIHN0YXRpYyB2b2lkCkBAIC0xNTQwLDE1ICsxNTU1LDE2IEBACiAJc3RydWN0IGJmYV9scHNfbW9kX3MJKm1vZCA9IEJGQV9MUFNfTU9EKGJmYSk7CiAJc3RydWN0IGJmYV9scHNfcwkqbHBzOwogCi0JYmZhX2Fzc2VydChyc3AtPmxwX3RhZyA8IG1vZC0+bnVtX2xwcyk7CisJV0FSTl9PTihyc3AtPmxwX3RhZyA+PSBtb2QtPm51bV9scHMpOwogCWxwcyA9IEJGQV9MUFNfRlJPTV9UQUcobW9kLCByc3AtPmxwX3RhZyk7CiAKIAlscHMtPnN0YXR1cyA9IHJzcC0+c3RhdHVzOwogCXN3aXRjaCAocnNwLT5zdGF0dXMpIHsKIAljYXNlIEJGQV9TVEFUVVNfT0s6CiAJCWxwcy0+ZnBvcnQJPSByc3AtPmZfcG9ydDsKKwkJaWYgKGxwcy0+ZnBvcnQpCisJCQlscHMtPmxwX3BpZCA9IHJzcC0+bHBfcGlkOwogCQlscHMtPm5waXZfZW4JPSByc3AtPm5waXZfZW47Ci0JCWxwcy0+bHBfcGlkCT0gcnNwLT5scF9waWQ7CiAJCWxwcy0+cHJfYmJjcmVkCT0gYmUxNl90b19jcHUocnNwLT5iYl9jcmVkaXQpOwogCQlscHMtPnByX3B3d24JPSByc3AtPnBvcnRfbmFtZTsKIAkJbHBzLT5wcl9ud3duCT0gcnNwLT5ub2RlX25hbWU7CkBAIC0xNTg3LDcgKzE2MDMsNyBAQAogCXN0cnVjdCBiZmFfbHBzX21vZF9zCSptb2QgPSBCRkFfTFBTX01PRChiZmEpOwogCXN0cnVjdCBiZmFfbHBzX3MJKmxwczsKIAotCWJmYV9hc3NlcnQocnNwLT5scF90YWcgPCBtb2QtPm51bV9scHMpOworCVdBUk5fT04ocnNwLT5scF90YWcgPj0gbW9kLT5udW1fbHBzKTsKIAlscHMgPSBCRkFfTFBTX0ZST01fVEFHKG1vZCwgcnNwLT5scF90YWcpOwogCiAJYmZhX3NtX3NlbmRfZXZlbnQobHBzLCBCRkFfTFBTX1NNX0ZXUlNQKTsKQEAgLTE2NDAsNyArMTY1Niw3IEBACiAJc3RydWN0IGJmaV9scHNfbG9naW5fcmVxX3MJKm07CiAKIAltID0gYmZhX3JlcXFfbmV4dChscHMtPmJmYSwgbHBzLT5yZXFxKTsKLQliZmFfYXNzZXJ0KG0pOworCVdBUk5fT04oIW0pOwogCiAJYmZpX2gyaV9zZXQobS0+bWgsIEJGSV9NQ19MUFMsIEJGSV9MUFNfSDJJX0xPR0lOX1JFUSwKIAkJYmZhX2xwdWlkKGxwcy0+YmZhKSk7CkBAIC0xNjY1LDcgKzE2ODEsNyBAQAogCXN0cnVjdCBiZmlfbHBzX2xvZ291dF9yZXFfcyAqbTsKIAogCW0gPSBiZmFfcmVxcV9uZXh0KGxwcy0+YmZhLCBscHMtPnJlcXEpOwotCWJmYV9hc3NlcnQobSk7CisJV0FSTl9PTighbSk7CiAKIAliZmlfaDJpX3NldChtLT5taCwgQkZJX01DX0xQUywgQkZJX0xQU19IMklfTE9HT1VUX1JFUSwKIAkJYmZhX2xwdWlkKGxwcy0+YmZhKSk7CkBAIC0xNjc2LDYgKzE2OTIsMjUgQEAKIH0KIAogLyoKKyAqIHNlbmQgbjJuIHBpZCBzZXQgcmVxdWVzdCB0byBmaXJtd2FyZQorICovCitzdGF0aWMgdm9pZAorYmZhX2xwc19zZW5kX3NldF9uMm5fcGlkKHN0cnVjdCBiZmFfbHBzX3MgKmxwcykKK3sKKwlzdHJ1Y3QgYmZpX2xwc19uMm5fcGlkX3JlcV9zICptOworCisJbSA9IGJmYV9yZXFxX25leHQobHBzLT5iZmEsIGxwcy0+cmVxcSk7CisJV0FSTl9PTighbSk7CisKKwliZmlfaDJpX3NldChtLT5taCwgQkZJX01DX0xQUywgQkZJX0xQU19IMklfTjJOX1BJRF9SRVEsCisJCWJmYV9scHVpZChscHMtPmJmYSkpOworCisJbS0+bHBfdGFnID0gbHBzLT5scF90YWc7CisJbS0+bHBfcGlkID0gbHBzLT5scF9waWQ7CisJYmZhX3JlcXFfcHJvZHVjZShscHMtPmJmYSwgbHBzLT5yZXFxKTsKK30KKworLyoKICAqIEluZGlyZWN0IGxvZ2luIGNvbXBsZXRpb24gaGFuZGxlciBmb3Igbm9uLWZjcwogICovCiBzdGF0aWMgdm9pZApAQCAtMTg1MywxNCArMTg4OCw2IEBACiAJYmZhX3NtX3NlbmRfZXZlbnQobHBzLCBCRkFfTFBTX1NNX0xPR0lOKTsKIH0KIAotLyoKLSAqIEluaXRpYXRlIGEgbHBvcnQgbG9nb3V0IChmbG9naSkuCi0gKi8KLXZvaWQKLWJmYV9scHNfZmxvZ28oc3RydWN0IGJmYV9scHNfcyAqbHBzKQotewotCWJmYV9zbV9zZW5kX2V2ZW50KGxwcywgQkZBX0xQU19TTV9MT0dPVVQpOwotfQogCiAvKgogICogSW5pdGlhdGUgYSBscG9ydCBGRFNJQyBsb2dvdXQuCkBAIC0xODcxLDI0ICsxODk4LDYgQEAKIAliZmFfc21fc2VuZF9ldmVudChscHMsIEJGQV9MUFNfU01fTE9HT1VUKTsKIH0KIAotLyoKLSAqIERpc2NhcmQgYSBwZW5kaW5nIGxvZ2luIHJlcXVlc3QgLS0gc2hvdWxkIGJlIGNhbGxlZCBvbmx5IGZvcgotICogbGluayBkb3duIGhhbmRsaW5nLgotICovCi12b2lkCi1iZmFfbHBzX2Rpc2NhcmQoc3RydWN0IGJmYV9scHNfcyAqbHBzKQotewotCWJmYV9zbV9zZW5kX2V2ZW50KGxwcywgQkZBX0xQU19TTV9PRkZMSU5FKTsKLX0KLQotLyoKLSAqIFJldHVybiBscG9ydCBzZXJ2aWNlcyB0YWcKLSAqLwotdTgKLWJmYV9scHNfZ2V0X3RhZyhzdHJ1Y3QgYmZhX2xwc19zICpscHMpCi17Ci0JcmV0dXJuIGxwcy0+bHBfdGFnOwotfQogCiAvKgogICogUmV0dXJuIGxwb3J0IHNlcnZpY2VzIHRhZyBnaXZlbiB0aGUgcGlkCkBAIC0xOTA5LDU1ICsxOTE4LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIHJldHVybiBpZiBmYWJyaWMgbG9naW4gaW5kaWNhdGVzIHN1cHBvcnQgZm9yIE5QSVYKLSAqLwotYmZhX2Jvb2xlYW5fdAotYmZhX2xwc19pc19ucGl2X2VuKHN0cnVjdCBiZmFfbHBzX3MgKmxwcykKLXsKLQlyZXR1cm4gbHBzLT5ucGl2X2VuOwotfQotCi0vKgotICogUmV0dXJuIFRSVUUgaWYgYXR0YWNoZWQgdG8gRi1Qb3J0LCBlbHNlIHJldHVybiBGQUxTRQotICovCi1iZmFfYm9vbGVhbl90Ci1iZmFfbHBzX2lzX2Zwb3J0KHN0cnVjdCBiZmFfbHBzX3MgKmxwcykKLXsKLQlyZXR1cm4gbHBzLT5mcG9ydDsKLX0KLQotLyoKLSAqIFJldHVybiBUUlVFIGlmIGF0dGFjaGVkIHRvIGEgQnJvY2FkZSBGYWJyaWMKLSAqLwotYmZhX2Jvb2xlYW5fdAotYmZhX2xwc19pc19icmNkX2ZhYnJpYyhzdHJ1Y3QgYmZhX2xwc19zICpscHMpCi17Ci0JcmV0dXJuIGxwcy0+YnJjZF9zd2l0Y2g7Ci19Ci0vKgotICogcmV0dXJuIFRSVUUgaWYgYXV0aGVudGljYXRpb24gaXMgcmVxdWlyZWQKLSAqLwotYmZhX2Jvb2xlYW5fdAotYmZhX2xwc19pc19hdXRocmVxKHN0cnVjdCBiZmFfbHBzX3MgKmxwcykKLXsKLQlyZXR1cm4gbHBzLT5hdXRoX3JlcTsKLX0KLQotYmZhX2Vwcm90b19zdGF0dXNfdAotYmZhX2xwc19nZXRfZXh0c3RhdHVzKHN0cnVjdCBiZmFfbHBzX3MgKmxwcykKLXsKLQlyZXR1cm4gbHBzLT5leHRfc3RhdHVzOwotfQotCi0vKgotICogcmV0dXJuIHBvcnQgaWQgYXNzaWduZWQgdG8gdGhlIGxwb3J0Ci0gKi8KLXUzMgotYmZhX2xwc19nZXRfcGlkKHN0cnVjdCBiZmFfbHBzX3MgKmxwcykKLXsKLQlyZXR1cm4gbHBzLT5scF9waWQ7Ci19CiAKIC8qCiAgKiByZXR1cm4gcG9ydCBpZCBhc3NpZ25lZCB0byB0aGUgYmFzZSBscG9ydApAQCAtMTk3MSw1NyArMTkzMSwxNiBAQAogfQogCiAvKgotICogUmV0dXJuIGJiX2NyZWRpdCBhc3NpZ25lZCBpbiBGTE9HSSByZXNwb25zZQorICogU2V0IFBJRCBpbiBjYXNlIG9mIG4ybiAod2hpY2ggaXMgYXNzaWduZWQgZHVyaW5nIFBMT0dJKQogICovCi11MTYKLWJmYV9scHNfZ2V0X3BlZXJfYmJjcmVkaXQoc3RydWN0IGJmYV9scHNfcyAqbHBzKQordm9pZAorYmZhX2xwc19zZXRfbjJuX3BpZChzdHJ1Y3QgYmZhX2xwc19zICpscHMsIHVpbnQzMl90IG4ybl9waWQpCiB7Ci0JcmV0dXJuIGxwcy0+cHJfYmJjcmVkOwotfQorCWJmYV90cmMobHBzLT5iZmEsIGxwcy0+bHBfdGFnKTsKKwliZmFfdHJjKGxwcy0+YmZhLCBuMm5fcGlkKTsKIAotLyoKLSAqIFJldHVybiBwZWVyIHBvcnQgbmFtZQotICovCi13d25fdAotYmZhX2xwc19nZXRfcGVlcl9wd3duKHN0cnVjdCBiZmFfbHBzX3MgKmxwcykKLXsKLQlyZXR1cm4gbHBzLT5wcl9wd3duOwotfQotCi0vKgotICogUmV0dXJuIHBlZXIgbm9kZSBuYW1lCi0gKi8KLXd3bl90Ci1iZmFfbHBzX2dldF9wZWVyX253d24oc3RydWN0IGJmYV9scHNfcyAqbHBzKQotewotCXJldHVybiBscHMtPnByX253d247Ci19Ci0KLS8qCi0gKiByZXR1cm4gcmVhc29uIGNvZGUgaWYgbG9naW4gcmVxdWVzdCBpcyByZWplY3RlZAotICovCi11OAotYmZhX2xwc19nZXRfbHNyanRfcnNuKHN0cnVjdCBiZmFfbHBzX3MgKmxwcykKLXsKLQlyZXR1cm4gbHBzLT5sc3JqdF9yc247Ci19Ci0KLS8qCi0gKiByZXR1cm4gZXhwbGFuYXRpb24gY29kZSBpZiBsb2dpbiByZXF1ZXN0IGlzIHJlamVjdGVkCi0gKi8KLXU4Ci1iZmFfbHBzX2dldF9sc3JqdF9leHBsKHN0cnVjdCBiZmFfbHBzX3MgKmxwcykKLXsKLQlyZXR1cm4gbHBzLT5sc3JqdF9leHBsOwotfQotCi0vKgotICogUmV0dXJuIGZwbWEvc3BtYSBNQUMgZm9yIGxwb3J0Ci0gKi8KLW1hY190Ci1iZmFfbHBzX2dldF9scF9tYWMoc3RydWN0IGJmYV9scHNfcyAqbHBzKQotewotCXJldHVybiBscHMtPmxwX21hYzsKKwlscHMtPmxwX3BpZCA9IG4ybl9waWQ7CisJYmZhX3NtX3NlbmRfZXZlbnQobHBzLCBCRkFfTFBTX1NNX1NFVF9OMk5fUElEKTsKIH0KIAogLyoKQEAgLTIwNTAsNyArMTk2OSw3IEBACiAKIAlkZWZhdWx0OgogCQliZmFfdHJjKGJmYSwgbS0+bWhkci5tc2dfaWQpOwotCQliZmFfYXNzZXJ0KDApOworCQlXQVJOX09OKDEpOwogCX0KIH0KIApAQCAtMjA2OCw2ICsxOTg3LDggQEAKIAkJLyoKIAkJICogU3RhcnQgZXZlbnQgYWZ0ZXIgSU9DIGlzIGNvbmZpZ3VyZWQgYW5kIEJGQSBpcyBzdGFydGVkLgogCQkgKi8KKwkJZmNwb3J0LT51c2VfZmxhc2hfY2ZnID0gQkZBX1RSVUU7CisKIAkJaWYgKGJmYV9mY3BvcnRfc2VuZF9lbmFibGUoZmNwb3J0KSkgewogCQkJYmZhX3RyYyhmY3BvcnQtPmJmYSwgQkZBX1RSVUUpOwogCQkJYmZhX3NtX3NldF9zdGF0ZShmY3BvcnQsIGJmYV9mY3BvcnRfc21fZW5hYmxpbmcpOwpAQCAtMjE3OCw3ICsyMDk5LDcgQEAKIAkJYmZhX2ZjcG9ydF91cGRhdGVfbGlua2luZm8oZmNwb3J0KTsKIAkJYmZhX3NtX3NldF9zdGF0ZShmY3BvcnQsIGJmYV9mY3BvcnRfc21fbGlua3VwKTsKIAotCQliZmFfYXNzZXJ0KGZjcG9ydC0+ZXZlbnRfY2Jmbik7CisJCVdBUk5fT04oIWZjcG9ydC0+ZXZlbnRfY2Jmbik7CiAJCWJmYV9mY3BvcnRfc2NuKGZjcG9ydCwgQkZBX1BPUlRfTElOS1VQLCBCRkFfRkFMU0UpOwogCQlicmVhazsKIApAQCAtMjIyOSw3ICsyMTUwLDcgQEAKIAljYXNlIEJGQV9GQ1BPUlRfU01fTElOS1VQOgogCQliZmFfZmNwb3J0X3VwZGF0ZV9saW5raW5mbyhmY3BvcnQpOwogCQliZmFfc21fc2V0X3N0YXRlKGZjcG9ydCwgYmZhX2ZjcG9ydF9zbV9saW5rdXApOwotCQliZmFfYXNzZXJ0KGZjcG9ydC0+ZXZlbnRfY2Jmbik7CisJCVdBUk5fT04oIWZjcG9ydC0+ZXZlbnRfY2Jmbik7CiAJCWJmYV9wbG9nX3N0cihmY3BvcnQtPmJmYS0+cGxvZywgQkZBX1BMX01JRF9IQUwsCiAJCQkJQkZBX1BMX0VJRF9QT1JUX1NUX0NIQU5HRSwgMCwgIlBvcnQgTGlua3VwIik7CiAJCWlmICghYmZhX2lvY19nZXRfZmNtb2RlKCZmY3BvcnQtPmJmYS0+aW9jKSkgewpAQCAtMjgwMywxMiArMjcyNCw2IEBACiAJfQogfQogCi0KLQotLyoKLSAqICBoYWxfcG9ydF9wcml2YXRlCi0gKi8KLQogc3RhdGljIHZvaWQKIF9fYmZhX2NiX2ZjcG9ydF9ldmVudCh2b2lkICpjYmFyZywgYmZhX2Jvb2xlYW5fdCBjb21wbGV0ZSkKIHsKQEAgLTI4MzksNyArMjc1NCw3IEBACiAJCWJmYV9zbV9zZW5kX2V2ZW50KCZmY3BvcnQtPmxuLCBCRkFfRkNQT1JUX0xOX1NNX0xJTktET1dOKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJYmZhX2Fzc2VydCgwKTsKKwkJV0FSTl9PTigxKTsKIAl9CiB9CiAKQEAgLTI5MDYsNyArMjgyMSw3IEBACiAJc3RydWN0IGJmYV9mY3BvcnRfcyAqZmNwb3J0ID0gQkZBX0ZDUE9SVF9NT0QoYmZhKTsKIAlzdHJ1Y3QgYmZhX3BvcnRfY2ZnX3MgKnBvcnRfY2ZnID0gJmZjcG9ydC0+Y2ZnOwogCXN0cnVjdCBiZmFfZmNwb3J0X2xuX3MgKmxuID0gJmZjcG9ydC0+bG47Ci0Jc3RydWN0IGJmYV90aW1ldmFsX3MgdHY7CisJc3RydWN0IHRpbWV2YWwgdHY7CiAKIAltZW1zZXQoZmNwb3J0LCAwLCBzaXplb2Yoc3RydWN0IGJmYV9mY3BvcnRfcykpOwogCWZjcG9ydC0+YmZhID0gYmZhOwpAQCAtMjkyMCw3ICsyODM1LDcgQEAKIAkvKgogCSAqIGluaXRpYWxpemUgdGltZSBzdGFtcCBmb3Igc3RhdHMgcmVzZXQKIAkgKi8KLQliZmFfb3NfZ2V0dGltZW9mZGF5KCZ0dik7CisJZG9fZ2V0dGltZW9mZGF5KCZ0dik7CiAJZmNwb3J0LT5zdGF0c19yZXNldF90aW1lID0gdHYudHZfc2VjOwogCiAJLyoKQEAgLTMwMzksNiArMjk1NCw3IEBACiAJbS0+cG9ydF9jZmcgPSBmY3BvcnQtPmNmZzsKIAltLT5tc2d0YWcgPSBmY3BvcnQtPm1zZ3RhZzsKIAltLT5wb3J0X2NmZy5tYXhmcnNpemUgPSBjcHVfdG9fYmUxNihmY3BvcnQtPmNmZy5tYXhmcnNpemUpOworCSBtLT51c2VfZmxhc2hfY2ZnID0gZmNwb3J0LT51c2VfZmxhc2hfY2ZnOwogCWJmYV9kbWFfYmVfYWRkcl9zZXQobS0+c3RhdHNfZG1hX2FkZHIsIGZjcG9ydC0+c3RhdHNfcGEpOwogCWJmYV90cmMoZmNwb3J0LT5iZmEsIG0tPnN0YXRzX2RtYV9hZGRyLmEzMi5hZGRyX2xvKTsKIAliZmFfdHJjKGZjcG9ydC0+YmZhLCBtLT5zdGF0c19kbWFfYWRkci5hMzIuYWRkcl9oaSk7CkBAIC0zMDg5LDggKzMwMDUsOCBAQAogc3RhdGljIHZvaWQKIGJmYV9mY3BvcnRfc2V0X3d3bnMoc3RydWN0IGJmYV9mY3BvcnRfcyAqZmNwb3J0KQogewotCWZjcG9ydC0+cHd3biA9IGJmYV9pb2NfZ2V0X3B3d24oJmZjcG9ydC0+YmZhLT5pb2MpOwotCWZjcG9ydC0+bnd3biA9IGJmYV9pb2NfZ2V0X253d24oJmZjcG9ydC0+YmZhLT5pb2MpOworCWZjcG9ydC0+cHd3biA9IGZjcG9ydC0+YmZhLT5pb2MuYXR0ci0+cHd3bjsKKwlmY3BvcnQtPm53d24gPSBmY3BvcnQtPmJmYS0+aW9jLmF0dHItPm53d247CiAKIAliZmFfdHJjKGZjcG9ydC0+YmZhLCBmY3BvcnQtPnB3d24pOwogCWJmYV90cmMoZmNwb3J0LT5iZmEsIGZjcG9ydC0+bnd3bik7CkBAIC0zMTI3LDcgKzMwNDMsNyBAQAogCXN0cnVjdCBiZmFfcW9zX3N0YXRzX3MgKnMpCiB7CiAJdTMyCSpkaXAgPSAodTMyICopIGQ7Ci0JdTMyCSpzaXAgPSAodTMyICopIHM7CisJX19iZTMyCSpzaXAgPSAoX19iZTMyICopIHM7CiAJaW50CQlpOwogCiAJLyogTm93IHN3YXAgdGhlIDMyIGJpdCBmaWVsZHMgKi8KQEAgLTMxNDAsMTIgKzMwNTYsMTIgQEAKIAlzdHJ1Y3QgYmZhX2Zjb2Vfc3RhdHNfcyAqcykKIHsKIAl1MzIJKmRpcCA9ICh1MzIgKikgZDsKLQl1MzIJKnNpcCA9ICh1MzIgKikgczsKKwlfX2JlMzIJKnNpcCA9IChfX2JlMzIgKikgczsKIAlpbnQJCWk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgKChzaXplb2Yoc3RydWN0IGJmYV9mY29lX3N0YXRzX3MpKS9zaXplb2YodTMyKSk7CiAJICAgICBpID0gaSArIDIpIHsKLSNpZmRlZiBfX0JJR0VORElBTgorI2lmZGVmIF9fQklHX0VORElBTgogCQlkaXBbaV0gPSBiZTMyX3RvX2NwdShzaXBbaV0pOwogCQlkaXBbaSArIDFdID0gYmUzMl90b19jcHUoc2lwW2kgKyAxXSk7CiAjZWxzZQpAQCAtMzE2Miw3ICszMDc4LDcgQEAKIAogCWlmIChjb21wbGV0ZSkgewogCQlpZiAoZmNwb3J0LT5zdGF0c19zdGF0dXMgPT0gQkZBX1NUQVRVU19PSykgewotCQkJc3RydWN0IGJmYV90aW1ldmFsX3MgdHY7CisJCQlzdHJ1Y3QgdGltZXZhbCB0djsKIAogCQkJLyogU3dhcCBGQyBRb1Mgb3IgRkNvRSBzdGF0cyAqLwogCQkJaWYgKGJmYV9pb2NfZ2V0X2ZjbW9kZSgmZmNwb3J0LT5iZmEtPmlvYykpIHsKQEAgLTMxNzQsNyArMzA5MCw3IEBACiAJCQkJCSZmY3BvcnQtPnN0YXRzX3JldC0+ZmNvZSwKIAkJCQkJJmZjcG9ydC0+c3RhdHMtPmZjb2UpOwogCi0JCQkJYmZhX29zX2dldHRpbWVvZmRheSgmdHYpOworCQkJCWRvX2dldHRpbWVvZmRheSgmdHYpOwogCQkJCWZjcG9ydC0+c3RhdHNfcmV0LT5mY29lLnNlY3NfcmVzZXQgPQogCQkJCQl0di50dl9zZWMgLSBmY3BvcnQtPnN0YXRzX3Jlc2V0X3RpbWU7CiAJCQl9CkBAIC0zMjMzLDEyICszMTQ5LDEyIEBACiAJc3RydWN0IGJmYV9mY3BvcnRfcyAqZmNwb3J0ID0gY2Jhcmc7CiAKIAlpZiAoY29tcGxldGUpIHsKLQkJc3RydWN0IGJmYV90aW1ldmFsX3MgdHY7CisJCXN0cnVjdCB0aW1ldmFsIHR2OwogCiAJCS8qCiAJCSAqIHJlLWluaXRpYWxpemUgdGltZSBzdGFtcCBmb3Igc3RhdHMgcmVzZXQKIAkJICovCi0JCWJmYV9vc19nZXR0aW1lb2ZkYXkoJnR2KTsKKwkJZG9fZ2V0dGltZW9mZGF5KCZ0dik7CiAJCWZjcG9ydC0+c3RhdHNfcmVzZXRfdGltZSA9IHR2LnR2X3NlYzsKIAogCQlmY3BvcnQtPnN0YXRzX2NiZm4oZmNwb3J0LT5zdGF0c19jYmFyZywgZmNwb3J0LT5zdGF0c19zdGF0dXMpOwpAQCAtMzMwMyw4ICszMjE5LDggQEAKIAlpbnQgbGlua19ibSA9IDA7CiAKIAliZmFfdHJjKGZjcG9ydC0+YmZhLCBmY3BvcnQtPmNmZy50cnVua2VkKTsKLQliZmFfYXNzZXJ0KHNjbi0+dHJ1bmtfc3RhdGUgPT0gQkZBX1RSVU5LX09OTElORSB8fAotCQkgICBzY24tPnRydW5rX3N0YXRlID09IEJGQV9UUlVOS19PRkZMSU5FKTsKKwlXQVJOX09OKHNjbi0+dHJ1bmtfc3RhdGUgIT0gQkZBX1RSVU5LX09OTElORSAmJgorCQkgICBzY24tPnRydW5rX3N0YXRlICE9IEJGQV9UUlVOS19PRkZMSU5FKTsKIAogCWJmYV90cmMoZmNwb3J0LT5iZmEsIHRydW5rLT5hdHRyLnN0YXRlKTsKIAliZmFfdHJjKGZjcG9ydC0+YmZhLCBzY24tPnRydW5rX3N0YXRlKTsKQEAgLTMzOTYsMTIgKzMzMTIsNiBAQAogCX0KIH0KIAotCi0KLS8qCi0gKiAgaGFsX3BvcnRfcHVibGljCi0gKi8KLQogLyoKICAqIENhbGxlZCB0byBpbml0aWFsaXplIHBvcnQgYXR0cmlidXRlcwogICovCkBAIC0zNDE5LDkgKzMzMjksOSBAQAogCWZjcG9ydC0+Y2ZnLnJ4X2JiY3JlZGl0ID0gYmZhX2lvY19yeF9iYmNyZWRpdCgmYmZhLT5pb2MpOwogCWZjcG9ydC0+c3BlZWRfc3VwID0gYmZhX2lvY19zcGVlZF9zdXAoJmJmYS0+aW9jKTsKIAotCWJmYV9hc3NlcnQoZmNwb3J0LT5jZmcubWF4ZnJzaXplKTsKLQliZmFfYXNzZXJ0KGZjcG9ydC0+Y2ZnLnJ4X2JiY3JlZGl0KTsKLQliZmFfYXNzZXJ0KGZjcG9ydC0+c3BlZWRfc3VwKTsKKwlXQVJOX09OKCFmY3BvcnQtPmNmZy5tYXhmcnNpemUpOworCVdBUk5fT04oIWZjcG9ydC0+Y2ZnLnJ4X2JiY3JlZGl0KTsKKwlXQVJOX09OKCFmY3BvcnQtPnNwZWVkX3N1cCk7CiB9CiAKIC8qCkBAIC0zNDQxLDggKzMzNTEsMjggQEAKIAogCXN3aXRjaCAobXNnLT5taGRyLm1zZ19pZCkgewogCWNhc2UgQkZJX0ZDUE9SVF9JMkhfRU5BQkxFX1JTUDoKLQkJaWYgKGZjcG9ydC0+bXNndGFnID09IGkyaG1zZy5wZW5hYmxlX3JzcC0+bXNndGFnKQorCQlpZiAoZmNwb3J0LT5tc2d0YWcgPT0gaTJobXNnLnBlbmFibGVfcnNwLT5tc2d0YWcpIHsKKworCQkJaWYgKGZjcG9ydC0+dXNlX2ZsYXNoX2NmZykgeworCQkJCWZjcG9ydC0+Y2ZnID0gaTJobXNnLnBlbmFibGVfcnNwLT5wb3J0X2NmZzsKKwkJCQlmY3BvcnQtPmNmZy5tYXhmcnNpemUgPQorCQkJCQljcHVfdG9fYmUxNihmY3BvcnQtPmNmZy5tYXhmcnNpemUpOworCQkJCWZjcG9ydC0+Y2ZnLnBhdGhfdG92ID0KKwkJCQkJY3B1X3RvX2JlMTYoZmNwb3J0LT5jZmcucGF0aF90b3YpOworCQkJCWZjcG9ydC0+Y2ZnLnFfZGVwdGggPQorCQkJCQljcHVfdG9fYmUxNihmY3BvcnQtPmNmZy5xX2RlcHRoKTsKKworCQkJCWlmIChmY3BvcnQtPmNmZy50cnVua2VkKQorCQkJCQlmY3BvcnQtPnRydW5rLmF0dHIuc3RhdGUgPQorCQkJCQkJQkZBX1RSVU5LX09GRkxJTkU7CisJCQkJZWxzZQorCQkJCQlmY3BvcnQtPnRydW5rLmF0dHIuc3RhdGUgPQorCQkJCQkJQkZBX1RSVU5LX0RJU0FCTEVEOworCQkJCWZjcG9ydC0+dXNlX2ZsYXNoX2NmZyA9IEJGQV9GQUxTRTsKKwkJCX0KKwogCQkJYmZhX3NtX3NlbmRfZXZlbnQoZmNwb3J0LCBCRkFfRkNQT1JUX1NNX0ZXUlNQKTsKKwkJfQogCQlicmVhazsKIAogCWNhc2UgQkZJX0ZDUE9SVF9JMkhfRElTQUJMRV9SU1A6CkBAIC0zNDk4LDE3ICszNDI4LDExIEBACiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJYmZhX2Fzc2VydCgwKTsKKwkJV0FSTl9PTigxKTsKIAlicmVhazsKIAl9CiB9CiAKLQotCi0vKgotICogIGhhbF9wb3J0X2FwaQotICovCi0KIC8qCiAgKiBSZWdpc3RlcmVkIGNhbGxiYWNrIGZvciBwb3J0IGV2ZW50cy4KICAqLwpAQCAtMzczMiw4ICszNjU2LDggQEAKIAlhdHRyLT5ud3duID0gZmNwb3J0LT5ud3duOwogCWF0dHItPnB3d24gPSBmY3BvcnQtPnB3d247CiAKLQlhdHRyLT5mYWN0b3J5cHd3biA9ICBiZmFfaW9jX2dldF9tZmdfcHd3bigmYmZhLT5pb2MpOwotCWF0dHItPmZhY3Rvcnlud3duID0gIGJmYV9pb2NfZ2V0X21mZ19ud3duKCZiZmEtPmlvYyk7CisJYXR0ci0+ZmFjdG9yeXB3d24gPSAgYmZhLT5pb2MuYXR0ci0+bWZnX3B3d247CisJYXR0ci0+ZmFjdG9yeW53d24gPSAgYmZhLT5pb2MuYXR0ci0+bWZnX253d247CiAKIAltZW1jcHkoJmF0dHItPnBwb3J0X2NmZywgJmZjcG9ydC0+Y2ZnLAogCQlzaXplb2Yoc3RydWN0IGJmYV9wb3J0X2NmZ19zKSk7CkBAIC0zNzUxLDcgKzM2NzUsNyBAQAogCS8qIGJlYWNvbiBhdHRyaWJ1dGVzICovCiAJYXR0ci0+YmVhY29uID0gZmNwb3J0LT5iZWFjb247CiAJYXR0ci0+bGlua19lMmVfYmVhY29uID0gZmNwb3J0LT5saW5rX2UyZV9iZWFjb247Ci0JYXR0ci0+cGxvZ19lbmFibGVkID0gYmZhX3Bsb2dfZ2V0X3NldHRpbmcoZmNwb3J0LT5iZmEtPnBsb2cpOworCWF0dHItPnBsb2dfZW5hYmxlZCA9IChiZmFfYm9vbGVhbl90KWZjcG9ydC0+YmZhLT5wbG9nLT5wbG9nX2VuYWJsZWQ7CiAJYXR0ci0+aW9fcHJvZmlsZSA9IGJmYV9mY3BpbV9nZXRfaW9fcHJvZmlsZShmY3BvcnQtPmJmYSk7CiAKIAlhdHRyLT5wcG9ydF9jZmcucGF0aF90b3YgID0gYmZhX2ZjcGltX3BhdGhfdG92X2dldChiZmEpOwpAQCAtMzgxOCw4OSArMzc0Miw2IEBACiAJcmV0dXJuIEJGQV9TVEFUVVNfT0s7CiB9CiAKLS8qCi0gKiBGZXRjaCBGQ1FvUyBwb3J0IHN0YXRpc3RpY3MKLSAqLwotYmZhX3N0YXR1c190Ci1iZmFfZmNwb3J0X2dldF9xb3Nfc3RhdHMoc3RydWN0IGJmYV9zICpiZmEsIHVuaW9uIGJmYV9mY3BvcnRfc3RhdHNfdSAqc3RhdHMsCi0JYmZhX2NiX3BvcnRfdCBjYmZuLCB2b2lkICpjYmFyZykKLXsKLQkvKiBNZWFuaW5nZnVsIG9ubHkgZm9yIEZDIG1vZGUgKi8KLQliZmFfYXNzZXJ0KGJmYV9pb2NfZ2V0X2ZjbW9kZSgmYmZhLT5pb2MpKTsKLQotCXJldHVybiBiZmFfZmNwb3J0X2dldF9zdGF0cyhiZmEsIHN0YXRzLCBjYmZuLCBjYmFyZyk7Ci19Ci0KLS8qCi0gKiBSZXNldCBGQ29FIHBvcnQgc3RhdGlzdGljcwotICovCi1iZmFfc3RhdHVzX3QKLWJmYV9mY3BvcnRfY2xlYXJfcW9zX3N0YXRzKHN0cnVjdCBiZmFfcyAqYmZhLCBiZmFfY2JfcG9ydF90IGNiZm4sIHZvaWQgKmNiYXJnKQotewotCS8qIE1lYW5pbmdmdWwgb25seSBmb3IgRkMgbW9kZSAqLwotCWJmYV9hc3NlcnQoYmZhX2lvY19nZXRfZmNtb2RlKCZiZmEtPmlvYykpOwotCi0JcmV0dXJuIGJmYV9mY3BvcnRfY2xlYXJfc3RhdHMoYmZhLCBjYmZuLCBjYmFyZyk7Ci19Ci0KLS8qCi0gKiBGZXRjaCBGQ1FvUyBwb3J0IHN0YXRpc3RpY3MKLSAqLwotYmZhX3N0YXR1c190Ci1iZmFfZmNwb3J0X2dldF9mY29lX3N0YXRzKHN0cnVjdCBiZmFfcyAqYmZhLCB1bmlvbiBiZmFfZmNwb3J0X3N0YXRzX3UgKnN0YXRzLAotCWJmYV9jYl9wb3J0X3QgY2Jmbiwgdm9pZCAqY2JhcmcpCi17Ci0JLyogTWVhbmluZ2Z1bCBvbmx5IGZvciBGQ29FIG1vZGUgKi8KLQliZmFfYXNzZXJ0KCFiZmFfaW9jX2dldF9mY21vZGUoJmJmYS0+aW9jKSk7Ci0KLQlyZXR1cm4gYmZhX2ZjcG9ydF9nZXRfc3RhdHMoYmZhLCBzdGF0cywgY2JmbiwgY2JhcmcpOwotfQotCi0vKgotICogUmVzZXQgRkNvRSBwb3J0IHN0YXRpc3RpY3MKLSAqLwotYmZhX3N0YXR1c190Ci1iZmFfZmNwb3J0X2NsZWFyX2Zjb2Vfc3RhdHMoc3RydWN0IGJmYV9zICpiZmEsIGJmYV9jYl9wb3J0X3QgY2Jmbiwgdm9pZCAqY2JhcmcpCi17Ci0JLyogTWVhbmluZ2Z1bCBvbmx5IGZvciBGQ29FIG1vZGUgKi8KLQliZmFfYXNzZXJ0KCFiZmFfaW9jX2dldF9mY21vZGUoJmJmYS0+aW9jKSk7Ci0KLQlyZXR1cm4gYmZhX2ZjcG9ydF9jbGVhcl9zdGF0cyhiZmEsIGNiZm4sIGNiYXJnKTsKLX0KLQotdm9pZAotYmZhX2ZjcG9ydF9xb3NfZ2V0X2F0dHIoc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmFfcW9zX2F0dHJfcyAqcW9zX2F0dHIpCi17Ci0Jc3RydWN0IGJmYV9mY3BvcnRfcyAqZmNwb3J0ID0gQkZBX0ZDUE9SVF9NT0QoYmZhKTsKLQotCXFvc19hdHRyLT5zdGF0ZSA9IGZjcG9ydC0+cW9zX2F0dHIuc3RhdGU7Ci0JcW9zX2F0dHItPnRvdGFsX2JiX2NyID0gYmUzMl90b19jcHUoZmNwb3J0LT5xb3NfYXR0ci50b3RhbF9iYl9jcik7Ci19Ci0KLXZvaWQKLWJmYV9mY3BvcnRfcW9zX2dldF92Y19hdHRyKHN0cnVjdCBiZmFfcyAqYmZhLAotCXN0cnVjdCBiZmFfcW9zX3ZjX2F0dHJfcyAqcW9zX3ZjX2F0dHIpCi17Ci0Jc3RydWN0IGJmYV9mY3BvcnRfcyAqZmNwb3J0ID0gQkZBX0ZDUE9SVF9NT0QoYmZhKTsKLQlzdHJ1Y3QgYmZhX3Fvc192Y19hdHRyX3MgKmJmYV92Y19hdHRyID0gJmZjcG9ydC0+cW9zX3ZjX2F0dHI7Ci0JdTMyIGkgPSAwOwotCi0JcW9zX3ZjX2F0dHItPnRvdGFsX3ZjX2NvdW50ID0gYmUxNl90b19jcHUoYmZhX3ZjX2F0dHItPnRvdGFsX3ZjX2NvdW50KTsKLQlxb3NfdmNfYXR0ci0+c2hhcmVkX2NyZWRpdCAgPSBiZTE2X3RvX2NwdShiZmFfdmNfYXR0ci0+c2hhcmVkX2NyZWRpdCk7Ci0JcW9zX3ZjX2F0dHItPmVscF9vcG1vZGVfZmxhZ3MgID0KLQkJCWJlMzJfdG9fY3B1KGJmYV92Y19hdHRyLT5lbHBfb3Btb2RlX2ZsYWdzKTsKLQotCS8qIEluZGl2aWR1YWwgVkMgaW5mbyAqLwotCXdoaWxlIChpIDwgcW9zX3ZjX2F0dHItPnRvdGFsX3ZjX2NvdW50KSB7Ci0JCXFvc192Y19hdHRyLT52Y19pbmZvW2ldLnZjX2NyZWRpdAk9Ci0JCQkJYmZhX3ZjX2F0dHItPnZjX2luZm9baV0udmNfY3JlZGl0OwotCQlxb3NfdmNfYXR0ci0+dmNfaW5mb1tpXS5ib3Jyb3dfY3JlZGl0CT0KLQkJCQliZmFfdmNfYXR0ci0+dmNfaW5mb1tpXS5ib3Jyb3dfY3JlZGl0OwotCQlxb3NfdmNfYXR0ci0+dmNfaW5mb1tpXS5wcmlvcml0eQk9Ci0JCQkJYmZhX3ZjX2F0dHItPnZjX2luZm9baV0ucHJpb3JpdHk7Ci0JCSsraTsKLQl9Ci19CiAKIC8qCiAgKiBGZXRjaCBwb3J0IGF0dHJpYnV0ZXMuCkBAIC0zOTI0LDYwICszNzY1LDYgQEAKIAogfQogCi12b2lkCi1iZmFfZmNwb3J0X2NmZ19xb3Moc3RydWN0IGJmYV9zICpiZmEsIGJmYV9ib29sZWFuX3Qgb25fb2ZmKQotewotCXN0cnVjdCBiZmFfZmNwb3J0X3MgKmZjcG9ydCA9IEJGQV9GQ1BPUlRfTU9EKGJmYSk7Ci0JZW51bSBiZmFfaW9jX3R5cGVfZSBpb2NfdHlwZSA9IGJmYV9nZXRfdHlwZShiZmEpOwotCi0JYmZhX3RyYyhiZmEsIG9uX29mZik7Ci0JYmZhX3RyYyhiZmEsIGZjcG9ydC0+Y2ZnLnFvc19lbmFibGVkKTsKLQotCWJmYV90cmMoYmZhLCBpb2NfdHlwZSk7Ci0KLQlpZiAoaW9jX3R5cGUgPT0gQkZBX0lPQ19UWVBFX0ZDKSB7Ci0JCWZjcG9ydC0+Y2ZnLnFvc19lbmFibGVkID0gb25fb2ZmOwotCQkvKgotCQkgKiBOb3RpZnkgZmNwaW0gb2YgdGhlIGNoYW5nZSBpbiBRb1Mgc3RhdGUKLQkJICovCi0JCWJmYV9mY3BpbV91cGRhdGVfaW9yZWRpcmVjdChiZmEpOwotCX0KLX0KLQotdm9pZAotYmZhX2ZjcG9ydF9jZmdfcmF0ZWxpbShzdHJ1Y3QgYmZhX3MgKmJmYSwgYmZhX2Jvb2xlYW5fdCBvbl9vZmYpCi17Ci0Jc3RydWN0IGJmYV9mY3BvcnRfcyAqZmNwb3J0ID0gQkZBX0ZDUE9SVF9NT0QoYmZhKTsKLQotCWJmYV90cmMoYmZhLCBvbl9vZmYpOwotCWJmYV90cmMoYmZhLCBmY3BvcnQtPmNmZy5yYXRlbGltaXQpOwotCi0JZmNwb3J0LT5jZmcucmF0ZWxpbWl0ID0gb25fb2ZmOwotCWlmIChmY3BvcnQtPmNmZy50cmxfZGVmX3NwZWVkID09IEJGQV9QT1JUX1NQRUVEX1VOS05PV04pCi0JCWZjcG9ydC0+Y2ZnLnRybF9kZWZfc3BlZWQgPSBCRkFfUE9SVF9TUEVFRF8xR0JQUzsKLX0KLQotLyoKLSAqIENvbmZpZ3VyZSBkZWZhdWx0IG1pbmltdW0gcmF0ZWxpbSBzcGVlZAotICovCi1iZmFfc3RhdHVzX3QKLWJmYV9mY3BvcnRfY2ZnX3JhdGVsaW1fc3BlZWQoc3RydWN0IGJmYV9zICpiZmEsIGVudW0gYmZhX3BvcnRfc3BlZWQgc3BlZWQpCi17Ci0Jc3RydWN0IGJmYV9mY3BvcnRfcyAqZmNwb3J0ID0gQkZBX0ZDUE9SVF9NT0QoYmZhKTsKLQotCWJmYV90cmMoYmZhLCBzcGVlZCk7Ci0KLQkvKiBBdXRvIGFuZCBzcGVlZHMgZ3JlYXRlciB0aGFuIHRoZSBzdXBwb3J0ZWQgc3BlZWQsIGFyZSBpbnZhbGlkICovCi0JaWYgKChzcGVlZCA9PSBCRkFfUE9SVF9TUEVFRF9BVVRPKSB8fCAoc3BlZWQgPiBmY3BvcnQtPnNwZWVkX3N1cCkpIHsKLQkJYmZhX3RyYyhiZmEsIGZjcG9ydC0+c3BlZWRfc3VwKTsKLQkJcmV0dXJuIEJGQV9TVEFUVVNfVU5TVVBQX1NQRUVEOwotCX0KLQotCWZjcG9ydC0+Y2ZnLnRybF9kZWZfc3BlZWQgPSBzcGVlZDsKLQotCXJldHVybiBCRkFfU1RBVFVTX09LOwotfQotCiAvKgogICogR2V0IGRlZmF1bHQgbWluaW11bSByYXRlbGltIHNwZWVkCiAgKi8KQEAgLTM5OTAsMzIgKzM3NzcsNiBAQAogCXJldHVybiBmY3BvcnQtPmNmZy50cmxfZGVmX3NwZWVkOwogCiB9Ci12b2lkCi1iZmFfZmNwb3J0X2J1c3koc3RydWN0IGJmYV9zICpiZmEsIGJmYV9ib29sZWFuX3Qgc3RhdHVzKQotewotCXN0cnVjdCBiZmFfZmNwb3J0X3MgKmZjcG9ydCA9IEJGQV9GQ1BPUlRfTU9EKGJmYSk7Ci0KLQliZmFfdHJjKGJmYSwgc3RhdHVzKTsKLQliZmFfdHJjKGJmYSwgZmNwb3J0LT5kaWFnX2J1c3kpOwotCi0JZmNwb3J0LT5kaWFnX2J1c3kgPSBzdGF0dXM7Ci19Ci0KLXZvaWQKLWJmYV9mY3BvcnRfYmVhY29uKHZvaWQgKmRldiwgYmZhX2Jvb2xlYW5fdCBiZWFjb24sCi0JYmZhX2Jvb2xlYW5fdCBsaW5rX2UyZV9iZWFjb24pCi17Ci0Jc3RydWN0IGJmYV9zICpiZmEgPSBkZXY7Ci0Jc3RydWN0IGJmYV9mY3BvcnRfcyAqZmNwb3J0ID0gQkZBX0ZDUE9SVF9NT0QoYmZhKTsKLQotCWJmYV90cmMoYmZhLCBiZWFjb24pOwotCWJmYV90cmMoYmZhLCBsaW5rX2UyZV9iZWFjb24pOwotCWJmYV90cmMoYmZhLCBmY3BvcnQtPmJlYWNvbik7Ci0JYmZhX3RyYyhiZmEsIGZjcG9ydC0+bGlua19lMmVfYmVhY29uKTsKLQotCWZjcG9ydC0+YmVhY29uID0gYmVhY29uOwotCWZjcG9ydC0+bGlua19lMmVfYmVhY29uID0gbGlua19lMmVfYmVhY29uOwotfQogCiBiZmFfYm9vbGVhbl90CiBiZmFfZmNwb3J0X2lzX2xpbmt1cChzdHJ1Y3QgYmZhX3MgKmJmYSkKQEAgLTQwMzYsNjMgKzM3OTcsNiBAQAogCXJldHVybiBmY3BvcnQtPmNmZy5xb3NfZW5hYmxlZDsKIH0KIAotYmZhX3N0YXR1c190Ci1iZmFfdHJ1bmtfZ2V0X2F0dHIoc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmFfdHJ1bmtfYXR0cl9zICphdHRyKQotCi17Ci0Jc3RydWN0IGJmYV9mY3BvcnRfcyAqZmNwb3J0ID0gQkZBX0ZDUE9SVF9NT0QoYmZhKTsKLQlzdHJ1Y3QgYmZhX2ZjcG9ydF90cnVua19zICp0cnVuayA9ICZmY3BvcnQtPnRydW5rOwotCi0JYmZhX3RyYyhiZmEsIGZjcG9ydC0+Y2ZnLnRydW5rZWQpOwotCWJmYV90cmMoYmZhLCB0cnVuay0+YXR0ci5zdGF0ZSk7Ci0JKmF0dHIgPSB0cnVuay0+YXR0cjsKLQlhdHRyLT5wb3J0X2lkID0gYmZhX2xwc19nZXRfYmFzZV9waWQoYmZhKTsKLQotCXJldHVybiBCRkFfU1RBVFVTX09LOwotfQotCi12b2lkCi1iZmFfdHJ1bmtfZW5hYmxlX2NmZyhzdHJ1Y3QgYmZhX3MgKmJmYSkKLXsKLQlzdHJ1Y3QgYmZhX2ZjcG9ydF9zICpmY3BvcnQgPSBCRkFfRkNQT1JUX01PRChiZmEpOwotCXN0cnVjdCBiZmFfZmNwb3J0X3RydW5rX3MgKnRydW5rID0gJmZjcG9ydC0+dHJ1bms7Ci0KLQliZmFfdHJjKGJmYSwgMSk7Ci0JdHJ1bmstPmF0dHIuc3RhdGUgPSBCRkFfVFJVTktfT0ZGTElORTsKLQlmY3BvcnQtPmNmZy50cnVua2VkID0gQkZBX1RSVUU7Ci19Ci0KLWJmYV9zdGF0dXNfdAotYmZhX3RydW5rX2VuYWJsZShzdHJ1Y3QgYmZhX3MgKmJmYSkKLXsKLQlzdHJ1Y3QgYmZhX2ZjcG9ydF9zICpmY3BvcnQgPSBCRkFfRkNQT1JUX01PRChiZmEpOwotCXN0cnVjdCBiZmFfZmNwb3J0X3RydW5rX3MgKnRydW5rID0gJmZjcG9ydC0+dHJ1bms7Ci0KLQliZmFfdHJjKGJmYSwgMSk7Ci0KLQl0cnVuay0+YXR0ci5zdGF0ZSAgID0gQkZBX1RSVU5LX09GRkxJTkU7Ci0JYmZhX2ZjcG9ydF9kaXNhYmxlKGJmYSk7Ci0JZmNwb3J0LT5jZmcudHJ1bmtlZCA9IEJGQV9UUlVFOwotCWJmYV9mY3BvcnRfZW5hYmxlKGJmYSk7Ci0KLQlyZXR1cm4gQkZBX1NUQVRVU19PSzsKLX0KLQotYmZhX3N0YXR1c190Ci1iZmFfdHJ1bmtfZGlzYWJsZShzdHJ1Y3QgYmZhX3MgKmJmYSkKLXsKLQlzdHJ1Y3QgYmZhX2ZjcG9ydF9zICpmY3BvcnQgPSBCRkFfRkNQT1JUX01PRChiZmEpOwotCXN0cnVjdCBiZmFfZmNwb3J0X3RydW5rX3MgKnRydW5rID0gJmZjcG9ydC0+dHJ1bms7Ci0KLQliZmFfdHJjKGJmYSwgMCk7Ci0JdHJ1bmstPmF0dHIuc3RhdGUgICA9IEJGQV9UUlVOS19ESVNBQkxFRDsKLQliZmFfZmNwb3J0X2Rpc2FibGUoYmZhKTsKLQlmY3BvcnQtPmNmZy50cnVua2VkID0gQkZBX0ZBTFNFOwotCWJmYV9mY3BvcnRfZW5hYmxlKGJmYSk7Ci0JcmV0dXJuIEJGQV9TVEFUVVNfT0s7Ci19Ci0KLQogLyoKICAqIFJwb3J0IFN0YXRlIG1hY2hpbmUgZnVuY3Rpb25zCiAgKi8KQEAgLTQ2MDYsOCArNDMxMCw4IEBACiAJbW9kLT5ycHNfbGlzdCA9IHJwOwogCW1vZC0+bnVtX3Jwb3J0cyA9IGNmZy0+ZndjZmcubnVtX3Jwb3J0czsKIAotCWJmYV9hc3NlcnQobW9kLT5udW1fcnBvcnRzICYmCi0JCSAgICEobW9kLT5udW1fcnBvcnRzICYgKG1vZC0+bnVtX3Jwb3J0cyAtIDEpKSk7CisJV0FSTl9PTighbW9kLT5udW1fcnBvcnRzIHx8CisJCSAgIChtb2QtPm51bV9ycG9ydHMgJiAobW9kLT5udW1fcnBvcnRzIC0gMSkpKTsKIAogCWZvciAoaSA9IDA7IGkgPCBtb2QtPm51bV9ycG9ydHM7IGkrKywgcnArKykgewogCQltZW1zZXQocnAsIDAsIHNpemVvZihzdHJ1Y3QgYmZhX3Jwb3J0X3MpKTsKQEAgLTQ2NzUsNyArNDM3OSw3IEBACiB7CiAJc3RydWN0IGJmYV9ycG9ydF9tb2RfcyAqbW9kID0gQkZBX1JQT1JUX01PRChycG9ydC0+YmZhKTsKIAotCWJmYV9hc3NlcnQoYmZhX3FfaXNfb25fcSgmbW9kLT5ycF9hY3RpdmVfcSwgcnBvcnQpKTsKKwlXQVJOX09OKCFiZmFfcV9pc19vbl9xKCZtb2QtPnJwX2FjdGl2ZV9xLCBycG9ydCkpOwogCWxpc3RfZGVsKCZycG9ydC0+cWUpOwogCWxpc3RfYWRkX3RhaWwoJnJwb3J0LT5xZSwgJm1vZC0+cnBfZnJlZV9xKTsKIH0KQEAgLTQ3ODgsMTMgKzQ0OTIsMTMgQEAKIAkJcnAgPSBCRkFfUlBPUlRfRlJPTV9UQUcoYmZhLCBtc2cuY3JlYXRlX3JzcC0+YmZhX2hhbmRsZSk7CiAJCXJwLT5md19oYW5kbGUgPSBtc2cuY3JlYXRlX3JzcC0+ZndfaGFuZGxlOwogCQlycC0+cW9zX2F0dHIgPSBtc2cuY3JlYXRlX3JzcC0+cW9zX2F0dHI7Ci0JCWJmYV9hc3NlcnQobXNnLmNyZWF0ZV9yc3AtPnN0YXR1cyA9PSBCRkFfU1RBVFVTX09LKTsKKwkJV0FSTl9PTihtc2cuY3JlYXRlX3JzcC0+c3RhdHVzICE9IEJGQV9TVEFUVVNfT0spOwogCQliZmFfc21fc2VuZF9ldmVudChycCwgQkZBX1JQT1JUX1NNX0ZXUlNQKTsKIAkJYnJlYWs7CiAKIAljYXNlIEJGSV9SUE9SVF9JMkhfREVMRVRFX1JTUDoKIAkJcnAgPSBCRkFfUlBPUlRfRlJPTV9UQUcoYmZhLCBtc2cuZGVsZXRlX3JzcC0+YmZhX2hhbmRsZSk7Ci0JCWJmYV9hc3NlcnQobXNnLmRlbGV0ZV9yc3AtPnN0YXR1cyA9PSBCRkFfU1RBVFVTX09LKTsKKwkJV0FSTl9PTihtc2cuZGVsZXRlX3JzcC0+c3RhdHVzICE9IEJGQV9TVEFUVVNfT0spOwogCQliZmFfc21fc2VuZF9ldmVudChycCwgQkZBX1JQT1JUX1NNX0ZXUlNQKTsKIAkJYnJlYWs7CiAKQEAgLTQ4MDYsNyArNDUxMCw3IEBACiAKIAlkZWZhdWx0OgogCQliZmFfdHJjKGJmYSwgbS0+bWhkci5tc2dfaWQpOwotCQliZmFfYXNzZXJ0KDApOworCQlXQVJOX09OKDEpOwogCX0KIH0KIApAQCAtNDgyOCwyNCArNDUzMiwxOCBAQAogCiAJcnAtPmJmYSA9IGJmYTsKIAlycC0+cnBvcnRfZHJ2ID0gcnBvcnRfZHJ2OwotCWJmYV9ycG9ydF9jbGVhcl9zdGF0cyhycCk7CisJbWVtc2V0KCZycC0+c3RhdHMsIDAsIHNpemVvZihycC0+c3RhdHMpKTsKIAotCWJmYV9hc3NlcnQoYmZhX3NtX2NtcF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX3VuaW5pdCkpOworCVdBUk5fT04oIWJmYV9zbV9jbXBfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV91bmluaXQpKTsKIAliZmFfc21fc2VuZF9ldmVudChycCwgQkZBX1JQT1JUX1NNX0NSRUFURSk7CiAKIAlyZXR1cm4gcnA7CiB9CiAKIHZvaWQKLWJmYV9ycG9ydF9kZWxldGUoc3RydWN0IGJmYV9ycG9ydF9zICpycG9ydCkKLXsKLQliZmFfc21fc2VuZF9ldmVudChycG9ydCwgQkZBX1JQT1JUX1NNX0RFTEVURSk7Ci19Ci0KLXZvaWQKIGJmYV9ycG9ydF9vbmxpbmUoc3RydWN0IGJmYV9ycG9ydF9zICpycG9ydCwgc3RydWN0IGJmYV9ycG9ydF9pbmZvX3MgKnJwb3J0X2luZm8pCiB7Ci0JYmZhX2Fzc2VydChycG9ydF9pbmZvLT5tYXhfZnJtc3ogIT0gMCk7CisJV0FSTl9PTihycG9ydF9pbmZvLT5tYXhfZnJtc3ogPT0gMCk7CiAKIAkvKgogCSAqIFNvbWUgSkJPRHMgYXJlIHNlZW4gdG8gYmUgbm90IHNldHRpbmcgUERVIHNpemUgY29ycmVjdGx5IGluIFBMT0dJCkBAIC00ODYxLDQzICs0NTU5LDE1IEBACiB9CiAKIHZvaWQKLWJmYV9ycG9ydF9vZmZsaW5lKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnBvcnQpCi17Ci0JYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQsIEJGQV9SUE9SVF9TTV9PRkZMSU5FKTsKLX0KLQotdm9pZAogYmZhX3Jwb3J0X3NwZWVkKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnBvcnQsIGVudW0gYmZhX3BvcnRfc3BlZWQgc3BlZWQpCiB7Ci0JYmZhX2Fzc2VydChzcGVlZCAhPSAwKTsKLQliZmFfYXNzZXJ0KHNwZWVkICE9IEJGQV9QT1JUX1NQRUVEX0FVVE8pOworCVdBUk5fT04oc3BlZWQgPT0gMCk7CisJV0FSTl9PTihzcGVlZCA9PSBCRkFfUE9SVF9TUEVFRF9BVVRPKTsKIAogCXJwb3J0LT5ycG9ydF9pbmZvLnNwZWVkID0gc3BlZWQ7CiAJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQsIEJGQV9SUE9SVF9TTV9TRVRfU1BFRUQpOwogfQogCi12b2lkCi1iZmFfcnBvcnRfZ2V0X3N0YXRzKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnBvcnQsCi0Jc3RydWN0IGJmYV9ycG9ydF9oYWxfc3RhdHNfcyAqc3RhdHMpCi17Ci0JKnN0YXRzID0gcnBvcnQtPnN0YXRzOwotfQotCi12b2lkCi1iZmFfcnBvcnRfZ2V0X3Fvc19hdHRyKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnBvcnQsCi0JCQkJCXN0cnVjdCBiZmFfcnBvcnRfcW9zX2F0dHJfcyAqcW9zX2F0dHIpCi17Ci0JcW9zX2F0dHItPnFvc19wcmlvcml0eSAgPSBycG9ydC0+cW9zX2F0dHIucW9zX3ByaW9yaXR5OwotCXFvc19hdHRyLT5xb3NfZmxvd19pZCAgPSBiZTMyX3RvX2NwdShycG9ydC0+cW9zX2F0dHIucW9zX2Zsb3dfaWQpOwotCi19Ci0KLXZvaWQKLWJmYV9ycG9ydF9jbGVhcl9zdGF0cyhzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwb3J0KQotewotCW1lbXNldCgmcnBvcnQtPnN0YXRzLCAwLCBzaXplb2YocnBvcnQtPnN0YXRzKSk7Ci19Ci0KIAogLyoKICAqIFNHUEcgcmVsYXRlZCBmdW5jdGlvbnMKQEAgLTQ5NTIsNyArNDYyMiw3IEBACiAJc2dwZ19wYS5wYSA9IG1vZC0+c2dwZ19hcnJfcGE7CiAJbW9kLT5mcmVlX3NncGdzID0gbW9kLT5udW1fc2dwZ3M7CiAKLQliZmFfYXNzZXJ0KCEoc2dwZ19wYS5wYSAmIChzaXplb2Yoc3RydWN0IGJmaV9zZ3BnX3MpIC0gMSkpKTsKKwlXQVJOX09OKHNncGdfcGEucGEgJiAoc2l6ZW9mKHN0cnVjdCBiZmlfc2dwZ19zKSAtIDEpKTsKIAogCWZvciAoaSA9IDA7IGkgPCBtb2QtPm51bV9zZ3BnczsgaSsrKSB7CiAJCW1lbXNldChoc2dwZywgMCwgc2l6ZW9mKCpoc2dwZykpOwpAQCAtNDk5MywxMiArNDY2Myw2IEBACiB7CiB9CiAKLQotCi0vKgotICogIGhhbF9zZ3BnX3B1YmxpYyBCRkEgU0dQRyBwdWJsaWMgZnVuY3Rpb25zCi0gKi8KLQogYmZhX3N0YXR1c190CiBiZmFfc2dwZ19tYWxsb2Moc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBsaXN0X2hlYWQgKnNncGdfcSwgaW50IG5zZ3BncykKIHsKQEAgLTUwMDYsMTQgKzQ2NzAsMTIgQEAKIAlzdHJ1Y3QgYmZhX3NncGdfcyAqaHNncGc7CiAJaW50IGk7CiAKLQliZmFfdHJjX2ZwKGJmYSwgbnNncGdzKTsKLQogCWlmIChtb2QtPmZyZWVfc2dwZ3MgPCBuc2dwZ3MpCiAJCXJldHVybiBCRkFfU1RBVFVTX0VOT01FTTsKIAogCWZvciAoaSA9IDA7IGkgPCBuc2dwZ3M7IGkrKykgewogCQliZmFfcV9kZXEoJm1vZC0+c2dwZ19xLCAmaHNncGcpOwotCQliZmFfYXNzZXJ0KGhzZ3BnKTsKKwkJV0FSTl9PTighaHNncGcpOwogCQlsaXN0X2FkZF90YWlsKCZoc2dwZy0+cWUsIHNncGdfcSk7CiAJfQogCkBAIC01MDI3LDEwICs0Njg5LDggQEAKIAlzdHJ1Y3QgYmZhX3NncGdfbW9kX3MgKm1vZCA9IEJGQV9TR1BHX01PRChiZmEpOwogCXN0cnVjdCBiZmFfc2dwZ193cWVfcyAqd3FlOwogCi0JYmZhX3RyY19mcChiZmEsIG5zZ3BnKTsKLQogCW1vZC0+ZnJlZV9zZ3BncyArPSBuc2dwZzsKLQliZmFfYXNzZXJ0KG1vZC0+ZnJlZV9zZ3BncyA8PSBtb2QtPm51bV9zZ3Bncyk7CisJV0FSTl9PTihtb2QtPmZyZWVfc2dwZ3MgPiBtb2QtPm51bV9zZ3Bncyk7CiAKIAlsaXN0X3NwbGljZV90YWlsX2luaXQoc2dwZ19xLCAmbW9kLT5zZ3BnX3EpOwogCkBAIC01MDYwLDggKzQ3MjAsOCBAQAogewogCXN0cnVjdCBiZmFfc2dwZ19tb2RfcyAqbW9kID0gQkZBX1NHUEdfTU9EKGJmYSk7CiAKLQliZmFfYXNzZXJ0KG5zZ3BnID4gMCk7Ci0JYmZhX2Fzc2VydChuc2dwZyA+IG1vZC0+ZnJlZV9zZ3Bncyk7CisJV0FSTl9PTihuc2dwZyA8PSAwKTsKKwlXQVJOX09OKG5zZ3BnIDw9IG1vZC0+ZnJlZV9zZ3Bncyk7CiAKIAl3cWUtPm5zZ3BnX3RvdGFsID0gd3FlLT5uc2dwZyA9IG5zZ3BnOwogCkBAIC01MDcyLDcgKzQ3MzIsNyBAQAogCQkvKgogCQkgKiBubyBvbmUgZWxzZSBpcyB3YWl0aW5nIGZvciBTR1BHCiAJCSAqLwotCQliZmFfYXNzZXJ0KGxpc3RfZW1wdHkoJm1vZC0+c2dwZ193YWl0X3EpKTsKKwkJV0FSTl9PTighbGlzdF9lbXB0eSgmbW9kLT5zZ3BnX3dhaXRfcSkpOwogCQlsaXN0X3NwbGljZV90YWlsX2luaXQoJm1vZC0+c2dwZ19xLCAmd3FlLT5zZ3BnX3EpOwogCQl3cWUtPm5zZ3BnIC09IG1vZC0+ZnJlZV9zZ3BnczsKIAkJbW9kLT5mcmVlX3NncGdzID0gMDsKQEAgLTUwODYsNyArNDc0Niw3IEBACiB7CiAJc3RydWN0IGJmYV9zZ3BnX21vZF9zICptb2QgPSBCRkFfU0dQR19NT0QoYmZhKTsKIAotCWJmYV9hc3NlcnQoYmZhX3FfaXNfb25fcSgmbW9kLT5zZ3BnX3dhaXRfcSwgd3FlKSk7CisJV0FSTl9PTighYmZhX3FfaXNfb25fcSgmbW9kLT5zZ3BnX3dhaXRfcSwgd3FlKSk7CiAJbGlzdF9kZWwoJndxZS0+cWUpOwogCiAJaWYgKHdxZS0+bnNncGdfdG90YWwgIT0gd3FlLT5uc2dwZykKQEAgLTUzMTgsNyArNDk3OCw3IEBACiAJdWYtPmRhdGFfcHRyID0gYnVmOwogCXVmLT5kYXRhX2xlbiA9IG0tPnhmcl9sZW47CiAKLQliZmFfYXNzZXJ0KHVmLT5kYXRhX2xlbiA+PSBzaXplb2Yoc3RydWN0IGZjaHNfcykpOworCVdBUk5fT04odWYtPmRhdGFfbGVuIDwgc2l6ZW9mKHN0cnVjdCBmY2hzX3MpKTsKIAogCWlmICh1Zi0+ZGF0YV9sZW4gPT0gc2l6ZW9mKHN0cnVjdCBmY2hzX3MpKSB7CiAJCWJmYV9wbG9nX2ZjaGRyKGJmYS0+cGxvZywgQkZBX1BMX01JRF9IQUxfVUYsIEJGQV9QTF9FSURfUlgsCkBAIC01MzYxLDEyICs1MDIxLDYgQEAKIAliZmFfdWZfcG9zdF9hbGwoQkZBX1VGX01PRChiZmEpKTsKIH0KIAotCi0KLS8qCi0gKiAgaGFsX3VmX2FwaQotICovCi0KIC8qCiAgKiBSZWdpc3RlciBoYW5kbGVyIGZvciBhbGwgdW5zb2xpY3RlZCByZWNpZXZlIGZyYW1lcy4KICAqCkBAIC01NDE0LDcgKzUwNjgsNyBAQAogCiAJZGVmYXVsdDoKIAkJYmZhX3RyYyhiZmEsIG1zZy0+bWhkci5tc2dfaWQpOwotCQliZmFfYXNzZXJ0KDApOworCQlXQVJOX09OKDEpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfc3ZjLmggYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9zdmMuaAppbmRleCBlMjM0OWQ1Li4zMzFhZDk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9zdmMuaAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9zdmMuaApAQCAtMjIwLDYgKzIyMCwxOCBAQAogLyoKICAqIFJQT1JUIHJlbGF0ZWQgZGVmaW5lcwogICovCitlbnVtIGJmYV9ycG9ydF9ldmVudCB7CisJQkZBX1JQT1JUX1NNX0NSRUFURQk9IDEsCS8qICBycG9ydCBjcmVhdGUgZXZlbnQgICAgICAgICAgKi8KKwlCRkFfUlBPUlRfU01fREVMRVRFCT0gMiwJLyogIGRlbGV0aW5nIGFuIGV4aXN0aW5nIHJwb3J0ICAqLworCUJGQV9SUE9SVF9TTV9PTkxJTkUJPSAzLAkvKiAgcnBvcnQgaXMgb25saW5lICAgICAgICAgICAgICovCisJQkZBX1JQT1JUX1NNX09GRkxJTkUJPSA0LAkvKiAgcnBvcnQgaXMgb2ZmbGluZSAgICAgICAgICAgICovCisJQkZBX1JQT1JUX1NNX0ZXUlNQCT0gNSwJLyogIGZpcm13YXJlIHJlc3BvbnNlICAgICAgICAgICAqLworCUJGQV9SUE9SVF9TTV9IV0ZBSUwJPSA2LAkvKiAgSU9DIGgvdyBmYWlsdXJlICAgICAgICAgICAgICovCisJQkZBX1JQT1JUX1NNX1FPU19TQ04JPSA3LAkvKiAgUW9TIFNDTiBmcm9tIGZpcm13YXJlICAgICAgICovCisJQkZBX1JQT1JUX1NNX1NFVF9TUEVFRAk9IDgsCS8qICBTZXQgUnBvcnQgU3BlZWQgICAgICAgICAgICAgKi8KKwlCRkFfUlBPUlRfU01fUVJFU1VNRQk9IDksCS8qICBzcGFjZSBpbiByZXF1ZXVlIHF1ZXVlICAgICAgKi8KK307CisKICNkZWZpbmUgQkZBX1JQT1JUX01JTgk0CiAKIHN0cnVjdCBiZmFfcnBvcnRfbW9kX3MgewpAQCAtNDMyLDYgKzQ0NCw3IEBACiAJdTgJCQlteWFscGE7CS8qICBteSBBTFBBIGluIExPT1AgdG9wb2xvZ3kgKi8KIAl1OAkJCXJzdmRbM107CiAJc3RydWN0IGJmYV9wb3J0X2NmZ19zCWNmZzsJLyogIGN1cnJlbnQgcG9ydCBjb25maWd1cmF0aW9uICovCisJYmZhX2Jvb2xlYW5fdAkJdXNlX2ZsYXNoX2NmZzsgLyogZ2V0IHBvcnQgY2ZnIGZyb20gZmxhc2ggKi8KIAlzdHJ1Y3QgYmZhX3Fvc19hdHRyX3MgIHFvc19hdHRyOyAgIC8qIFFvUyBBdHRyaWJ1dGVzICovCiAJc3RydWN0IGJmYV9xb3NfdmNfYXR0cl9zIHFvc192Y19hdHRyOyAgLyogIFZDIGluZm8gZnJvbSBFTFAgKi8KIAlzdHJ1Y3QgYmZhX3JlcXFfd2FpdF9zCXJlcXFfd2FpdDsKQEAgLTUwMCwzMCArNTEzLDkgQEAKIAkJCXZvaWQgKCpldmVudF9jYmZuKSAodm9pZCAqY2JhcmcsCiAJCQllbnVtIGJmYV9wb3J0X2xpbmtzdGF0ZSBldmVudCksIHZvaWQgKmV2ZW50X2NiYXJnKTsKIGJmYV9ib29sZWFuX3QgYmZhX2ZjcG9ydF9pc19kaXNhYmxlZChzdHJ1Y3QgYmZhX3MgKmJmYSk7Ci12b2lkIGJmYV9mY3BvcnRfY2ZnX3FvcyhzdHJ1Y3QgYmZhX3MgKmJmYSwgYmZhX2Jvb2xlYW5fdCBvbl9vZmYpOwotdm9pZCBiZmFfZmNwb3J0X2NmZ19yYXRlbGltKHN0cnVjdCBiZmFfcyAqYmZhLCBiZmFfYm9vbGVhbl90IG9uX29mZik7Ci1iZmFfc3RhdHVzX3QgYmZhX2ZjcG9ydF9jZmdfcmF0ZWxpbV9zcGVlZChzdHJ1Y3QgYmZhX3MgKmJmYSwKLQkJCQkJICBlbnVtIGJmYV9wb3J0X3NwZWVkIHNwZWVkKTsKIGVudW0gYmZhX3BvcnRfc3BlZWQgYmZhX2ZjcG9ydF9nZXRfcmF0ZWxpbV9zcGVlZChzdHJ1Y3QgYmZhX3MgKmJmYSk7CiAKIHZvaWQgYmZhX2ZjcG9ydF9zZXRfdHhfYmJjcmVkaXQoc3RydWN0IGJmYV9zICpiZmEsIHUxNiB0eF9iYmNyZWRpdCk7Ci12b2lkIGJmYV9mY3BvcnRfYnVzeShzdHJ1Y3QgYmZhX3MgKmJmYSwgYmZhX2Jvb2xlYW5fdCBzdGF0dXMpOwotdm9pZCBiZmFfZmNwb3J0X2JlYWNvbih2b2lkICpkZXYsIGJmYV9ib29sZWFuX3QgYmVhY29uLAotCQkgICAgICAgYmZhX2Jvb2xlYW5fdCBsaW5rX2UyZV9iZWFjb24pOwotdm9pZCBiZmFfZmNwb3J0X3Fvc19nZXRfYXR0cihzdHJ1Y3QgYmZhX3MgKmJmYSwKLQkJCSAgICAgc3RydWN0IGJmYV9xb3NfYXR0cl9zICpxb3NfYXR0cik7Ci12b2lkIGJmYV9mY3BvcnRfcW9zX2dldF92Y19hdHRyKHN0cnVjdCBiZmFfcyAqYmZhLAotCQkJCXN0cnVjdCBiZmFfcW9zX3ZjX2F0dHJfcyAqcW9zX3ZjX2F0dHIpOwotYmZhX3N0YXR1c190IGJmYV9mY3BvcnRfZ2V0X3Fvc19zdGF0cyhzdHJ1Y3QgYmZhX3MgKmJmYSwKLQkJCQkgICAgICB1bmlvbiBiZmFfZmNwb3J0X3N0YXRzX3UgKnN0YXRzLAotCQkJCSAgICAgIGJmYV9jYl9wb3J0X3QgY2Jmbiwgdm9pZCAqY2JhcmcpOwotYmZhX3N0YXR1c190IGJmYV9mY3BvcnRfY2xlYXJfcW9zX3N0YXRzKHN0cnVjdCBiZmFfcyAqYmZhLCBiZmFfY2JfcG9ydF90IGNiZm4sCi0JCQkJCXZvaWQgKmNiYXJnKTsKLWJmYV9zdGF0dXNfdCBiZmFfZmNwb3J0X2dldF9mY29lX3N0YXRzKHN0cnVjdCBiZmFfcyAqYmZhLAotCQkJCSAgICAgICB1bmlvbiBiZmFfZmNwb3J0X3N0YXRzX3UgKnN0YXRzLAotCQkJCSAgICAgICBiZmFfY2JfcG9ydF90IGNiZm4sIHZvaWQgKmNiYXJnKTsKLWJmYV9zdGF0dXNfdCBiZmFfZmNwb3J0X2NsZWFyX2Zjb2Vfc3RhdHMoc3RydWN0IGJmYV9zICpiZmEsIGJmYV9jYl9wb3J0X3QgY2JmbiwKLQkJCQkJIHZvaWQgKmNiYXJnKTsKIGJmYV9ib29sZWFuX3QgICAgIGJmYV9mY3BvcnRfaXNfcmF0ZWxpbShzdHJ1Y3QgYmZhX3MgKmJmYSk7CiBiZmFfYm9vbGVhbl90CWJmYV9mY3BvcnRfaXNfbGlua3VwKHN0cnVjdCBiZmFfcyAqYmZhKTsKIGJmYV9zdGF0dXNfdCBiZmFfZmNwb3J0X2dldF9zdGF0cyhzdHJ1Y3QgYmZhX3MgKmJmYSwKQEAgLTUzNywxNCArNTI5LDkgQEAKICAqIGJmYSBycG9ydCBBUEkgZnVuY3Rpb25zCiAgKi8KIHN0cnVjdCBiZmFfcnBvcnRfcyAqYmZhX3Jwb3J0X2NyZWF0ZShzdHJ1Y3QgYmZhX3MgKmJmYSwgdm9pZCAqcnBvcnRfZHJ2KTsKLXZvaWQgYmZhX3Jwb3J0X2RlbGV0ZShzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwb3J0KTsKIHZvaWQgYmZhX3Jwb3J0X29ubGluZShzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwb3J0LAogCQkgICAgICBzdHJ1Y3QgYmZhX3Jwb3J0X2luZm9fcyAqcnBvcnRfaW5mbyk7Ci12b2lkIGJmYV9ycG9ydF9vZmZsaW5lKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnBvcnQpOwogdm9pZCBiZmFfcnBvcnRfc3BlZWQoc3RydWN0IGJmYV9ycG9ydF9zICpycG9ydCwgZW51bSBiZmFfcG9ydF9zcGVlZCBzcGVlZCk7Ci12b2lkIGJmYV9ycG9ydF9nZXRfc3RhdHMoc3RydWN0IGJmYV9ycG9ydF9zICpycG9ydCwKLQkJCSBzdHJ1Y3QgYmZhX3Jwb3J0X2hhbF9zdGF0c19zICpzdGF0cyk7Ci12b2lkIGJmYV9ycG9ydF9jbGVhcl9zdGF0cyhzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwb3J0KTsKIHZvaWQgYmZhX2NiX3Jwb3J0X29ubGluZSh2b2lkICpycG9ydCk7CiB2b2lkIGJmYV9jYl9ycG9ydF9vZmZsaW5lKHZvaWQgKnJwb3J0KTsKIHZvaWQgYmZhX2NiX3Jwb3J0X3Fvc19zY25fZmxvd2lkKHZvaWQgKnJwb3J0LApAQCAtNTUzLDggKzU0MCw2IEBACiB2b2lkIGJmYV9jYl9ycG9ydF9xb3Nfc2NuX3ByaW8odm9pZCAqcnBvcnQsCiAJCQkgICAgICAgc3RydWN0IGJmYV9ycG9ydF9xb3NfYXR0cl9zIG9sZF9xb3NfYXR0ciwKIAkJCSAgICAgICBzdHJ1Y3QgYmZhX3Jwb3J0X3Fvc19hdHRyX3MgbmV3X3Fvc19hdHRyKTsKLXZvaWQgYmZhX3Jwb3J0X2dldF9xb3NfYXR0cihzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwb3J0LAotCQkJICAgIHN0cnVjdCBiZmFfcnBvcnRfcW9zX2F0dHJfcyAqcW9zX2F0dHIpOwogCiAvKgogICogYmZhIGZjeHAgQVBJIGZ1bmN0aW9ucwpAQCAtNjE5LDM4ICs2MDQsMTggQEAKIHUzMiBiZmFfbHBzX2dldF9tYXhfdnBvcnQoc3RydWN0IGJmYV9zICpiZmEpOwogc3RydWN0IGJmYV9scHNfcyAqYmZhX2xwc19hbGxvYyhzdHJ1Y3QgYmZhX3MgKmJmYSk7CiB2b2lkIGJmYV9scHNfZGVsZXRlKHN0cnVjdCBiZmFfbHBzX3MgKmxwcyk7Ci12b2lkIGJmYV9scHNfZGlzY2FyZChzdHJ1Y3QgYmZhX2xwc19zICpscHMpOwogdm9pZCBiZmFfbHBzX2Zsb2dpKHN0cnVjdCBiZmFfbHBzX3MgKmxwcywgdm9pZCAqdWFyZywgdTggYWxwYSwKIAkJICAgdTE2IHBkdXN6LCB3d25fdCBwd3duLCB3d25fdCBud3duLAogCQkgICBiZmFfYm9vbGVhbl90IGF1dGhfZW4pOwogdm9pZCBiZmFfbHBzX2ZkaXNjKHN0cnVjdCBiZmFfbHBzX3MgKmxwcywgdm9pZCAqdWFyZywgdTE2IHBkdXN6LAogCQkgICB3d25fdCBwd3duLCB3d25fdCBud3duKTsKLXZvaWQgYmZhX2xwc19mbG9nbyhzdHJ1Y3QgYmZhX2xwc19zICpscHMpOwogdm9pZCBiZmFfbHBzX2ZkaXNjbG9nbyhzdHJ1Y3QgYmZhX2xwc19zICpscHMpOwotdTggYmZhX2xwc19nZXRfdGFnKHN0cnVjdCBiZmFfbHBzX3MgKmxwcyk7Ci1iZmFfYm9vbGVhbl90IGJmYV9scHNfaXNfbnBpdl9lbihzdHJ1Y3QgYmZhX2xwc19zICpscHMpOwotYmZhX2Jvb2xlYW5fdCBiZmFfbHBzX2lzX2Zwb3J0KHN0cnVjdCBiZmFfbHBzX3MgKmxwcyk7Ci1iZmFfYm9vbGVhbl90IGJmYV9scHNfaXNfYnJjZF9mYWJyaWMoc3RydWN0IGJmYV9scHNfcyAqbHBzKTsKLWJmYV9ib29sZWFuX3QgYmZhX2xwc19pc19hdXRocmVxKHN0cnVjdCBiZmFfbHBzX3MgKmxwcyk7Ci1iZmFfZXByb3RvX3N0YXR1c190IGJmYV9scHNfZ2V0X2V4dHN0YXR1cyhzdHJ1Y3QgYmZhX2xwc19zICpscHMpOwotdTMyIGJmYV9scHNfZ2V0X3BpZChzdHJ1Y3QgYmZhX2xwc19zICpscHMpOwordm9pZCBiZmFfbHBzX3NldF9uMm5fcGlkKHN0cnVjdCBiZmFfbHBzX3MgKmxwcywgdTMyIG4ybl9waWQpOwogdTMyIGJmYV9scHNfZ2V0X2Jhc2VfcGlkKHN0cnVjdCBiZmFfcyAqYmZhKTsKIHU4IGJmYV9scHNfZ2V0X3RhZ19mcm9tX3BpZChzdHJ1Y3QgYmZhX3MgKmJmYSwgdTMyIHBpZCk7Ci11MTYgYmZhX2xwc19nZXRfcGVlcl9iYmNyZWRpdChzdHJ1Y3QgYmZhX2xwc19zICpscHMpOwotd3duX3QgYmZhX2xwc19nZXRfcGVlcl9wd3duKHN0cnVjdCBiZmFfbHBzX3MgKmxwcyk7Ci13d25fdCBiZmFfbHBzX2dldF9wZWVyX253d24oc3RydWN0IGJmYV9scHNfcyAqbHBzKTsKLXU4IGJmYV9scHNfZ2V0X2xzcmp0X3JzbihzdHJ1Y3QgYmZhX2xwc19zICpscHMpOwotdTggYmZhX2xwc19nZXRfbHNyanRfZXhwbChzdHJ1Y3QgYmZhX2xwc19zICpscHMpOwotbWFjX3QgYmZhX2xwc19nZXRfbHBfbWFjKHN0cnVjdCBiZmFfbHBzX3MgKmxwcyk7CiB2b2lkIGJmYV9jYl9scHNfZmxvZ2lfY29tcCh2b2lkICpiZmFkLCB2b2lkICp1YXJnLCBiZmFfc3RhdHVzX3Qgc3RhdHVzKTsKIHZvaWQgYmZhX2NiX2xwc19mZGlzY19jb21wKHZvaWQgKmJmYWQsIHZvaWQgKnVhcmcsIGJmYV9zdGF0dXNfdCBzdGF0dXMpOwogdm9pZCBiZmFfY2JfbHBzX2ZkaXNjbG9nb19jb21wKHZvaWQgKmJmYWQsIHZvaWQgKnVhcmcpOwogdm9pZCBiZmFfY2JfbHBzX2N2bF9ldmVudCh2b2lkICpiZmFkLCB2b2lkICp1YXJnKTsKIAotdm9pZCBiZmFfdHJ1bmtfZW5hYmxlX2NmZyhzdHJ1Y3QgYmZhX3MgKmJmYSk7Ci1iZmFfc3RhdHVzX3QgYmZhX3RydW5rX2VuYWJsZShzdHJ1Y3QgYmZhX3MgKmJmYSk7Ci1iZmFfc3RhdHVzX3QgYmZhX3RydW5rX2Rpc2FibGUoc3RydWN0IGJmYV9zICpiZmEpOwotYmZhX3N0YXR1c190IGJmYV90cnVua19nZXRfYXR0cihzdHJ1Y3QgYmZhX3MgKmJmYSwKLQkJc3RydWN0IGJmYV90cnVua19hdHRyX3MgKmF0dHIpOwotCiAjZW5kaWYgLyogX19CRkFfU1ZDX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFkLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYWQuYwppbmRleCA2Nzk3NzIwLi40NDUyNGNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL2JmYWQuYworKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYWQuYwpAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgImJmYWRfZHJ2LmgiCiAjaW5jbHVkZSAiYmZhZF9pbS5oIgogI2luY2x1ZGUgImJmYV9mY3MuaCIKLSNpbmNsdWRlICJiZmFfb3NfaW5jLmgiCiAjaW5jbHVkZSAiYmZhX2RlZnMuaCIKICNpbmNsdWRlICJiZmEuaCIKIApAQCAtNjEsMTIgKzYwLDEyIEBACiB1MzIJYmZpX2ltYWdlX2N0X2ZjX3NpemUsIGJmaV9pbWFnZV9jdF9jbmFfc2l6ZSwgYmZpX2ltYWdlX2NiX2ZjX3NpemU7CiB1MzIgICAgICpiZmlfaW1hZ2VfY3RfZmMsICpiZmlfaW1hZ2VfY3RfY25hLCAqYmZpX2ltYWdlX2NiX2ZjOwogCi1jb25zdCBjaGFyICptc2l4X25hbWVfY3RbXSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyICptc2l4X25hbWVfY3RbXSA9IHsKIAkiY3BlMCIsICJjcGUxIiwgImNwZTIiLCAiY3BlMyIsCiAJInJtZTAiLCAicm1lMSIsICJybWUyIiwgInJtZTMiLAogCSJjdHJsIiB9OwogCi1jb25zdCBjaGFyICptc2l4X25hbWVfY2JbXSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyICptc2l4X25hbWVfY2JbXSA9IHsKIAkiY3BlMCIsICJjcGUxIiwgImNwZTIiLCAiY3BlMyIsCiAJInJtZTAiLCAicm1lMSIsICJybWUyIiwgInJtZTMiLAogCSJlZW1jIiwgImVscHUwIiwgImVscHUxIiwgImVwc3MiLCAibWxwdSIgfTsKQEAgLTIwNiw3ICsyMDUsNyBAQAogCQl9CiAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOwotCQliZmFfaW5pdCgmYmZhZC0+YmZhKTsKKwkJYmZhX2lvY2ZjX2luaXQoJmJmYWQtPmJmYSk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOwogCiAJCS8qIFNldCB1cCBpbnRlcnJ1cHQgaGFuZGxlciBmb3IgZWFjaCB2ZWN0b3JzICovCkBAIC01MzMsNyArNTMyLDcgQEAKIAkJCQkJKGRtYV9hZGRyX3QpIG1lbWluZm9fZWxlbS0+ZG1hKTsKIAkJCQlicmVhazsKIAkJCWRlZmF1bHQ6Ci0JCQkJYmZhX2Fzc2VydCgwKTsKKwkJCQlXQVJOX09OKDEpOwogCQkJCWJyZWFrOwogCQkJfQogCQl9CkBAIC03MjUsNyArNzI0LDcgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKIAotCWJmYV90aW1lcl90aWNrKCZiZmFkLT5iZmEpOworCWJmYV90aW1lcl9iZWF0KCZiZmFkLT5iZmEudGltZXJfbW9kKTsKIAogCWJmYV9jb21wX2RlcSgmYmZhZC0+YmZhLCAmZG9uZXEpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOwpAQCAtODgyLDggKzg4MSw4IEBACiAJCWdvdG8gb3V0X2hhbF9tZW1fYWxsb2NfZmFpbHVyZTsKIAl9CiAKLQliZmFfaW5pdF90cmMoJmJmYWQtPmJmYSwgYmZhZC0+dHJjbW9kKTsKLQliZmFfaW5pdF9wbG9nKCZiZmFkLT5iZmEsICZiZmFkLT5wbG9nX2J1Zik7CisJYmZhZC0+YmZhLnRyY21vZCA9IGJmYWQtPnRyY21vZDsKKwliZmFkLT5iZmEucGxvZyA9ICZiZmFkLT5wbG9nX2J1ZjsKIAliZmFfcGxvZ19pbml0KCZiZmFkLT5wbG9nX2J1Zik7CiAJYmZhX3Bsb2dfc3RyKCZiZmFkLT5wbG9nX2J1ZiwgQkZBX1BMX01JRF9EUlZSLCBCRkFfUExfRUlEX0RSSVZFUl9TVEFSVCwKIAkJICAgICAwLCAiRHJpdmVyIEF0dGFjaCIpOwpAQCAtODkzLDkgKzg5Miw5IEBACiAKIAkvKiBGQ1MgSU5JVCAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKLQliZmFfZmNzX3RyY19pbml0KCZiZmFkLT5iZmFfZmNzLCBiZmFkLT50cmNtb2QpOworCWJmYWQtPmJmYV9mY3MudHJjbW9kID0gYmZhZC0+dHJjbW9kOwogCWJmYV9mY3NfYXR0YWNoKCZiZmFkLT5iZmFfZmNzLCAmYmZhZC0+YmZhLCBiZmFkLCBCRkFfRkFMU0UpOwotCWJmYV9mY3Nfc2V0X2ZkbWlfcGFyYW0oJmJmYWQtPmJmYV9mY3MsIGZkbWlfZW5hYmxlKTsKKwliZmFkLT5iZmFfZmNzLmZkbWlfZW5hYmxlZCA9IGZkbWlfZW5hYmxlOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOwogCiAJYmZhZC0+YmZhZF9mbGFncyB8PSBCRkFEX0RSVl9JTklUX0RPTkU7CkBAIC05MTMsNyArOTEyLDcgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKIAlpbml0X2NvbXBsZXRpb24oJmJmYWQtPmNvbXApOwotCWJmYV9zdG9wKCZiZmFkLT5iZmEpOworCWJmYV9pb2NmY19zdG9wKCZiZmFkLT5iZmEpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOwogCXdhaXRfZm9yX2NvbXBsZXRpb24oJmJmYWQtPmNvbXApOwogCkBAIC05MzIsOCArOTMxLDggQEAKIAl1bnNpZ25lZCBsb25nCWZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOwotCWJmYV9zdGFydCgmYmZhZC0+YmZhKTsKLQliZmFfZmNzX3N0YXJ0KCZiZmFkLT5iZmFfZmNzKTsKKwliZmFfaW9jZmNfc3RhcnQoJmJmYWQtPmJmYSk7CisJYmZhX2Zjc19mYWJyaWNfbW9kc3RhcnQoJmJmYWQtPmJmYV9mY3MpOwogCWJmYWQtPmJmYWRfZmxhZ3MgfD0gQkZBRF9IQUxfU1RBUlRfRE9ORTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKIApAQCAtOTYzLDcgKzk2Miw3IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CiAJaW5pdF9jb21wbGV0aW9uKCZiZmFkLT5jb21wKTsKLQliZmFfc3RvcCgmYmZhZC0+YmZhKTsKKwliZmFfaW9jZmNfc3RvcCgmYmZhZC0+YmZhKTsKIAliZmFkLT5iZmFkX2ZsYWdzICY9IH5CRkFEX0hBTF9TVEFSVF9ET05FOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOwogCXdhaXRfZm9yX2NvbXBsZXRpb24oJmJmYWQtPmNvbXApOwpAQCAtMTEwMiwxNSArMTEwMSwxNSBAQAogCiAJLyoKIAkgKiBJZiBiZmFfbGlua3VwX2RlbGF5IGlzIHNldCB0byAtMSBkZWZhdWx0OyB0cnkgdG8gcmV0cml2ZSB0aGUKLQkgKiB2YWx1ZSB1c2luZyB0aGUgYmZhZF9vc19nZXRfbGlua3VwX2RlbGF5KCk7IGVsc2UgdXNlIHRoZQorCSAqIHZhbHVlIHVzaW5nIHRoZSBiZmFkX2dldF9saW5rdXBfZGVsYXkoKTsgZWxzZSB1c2UgdGhlCiAJICogcGFzc2VkIGluIG1vZHVsZSBwYXJhbSB2YWx1ZSBhcyB0aGUgYmZhX2xpbmt1cF9kZWxheS4KIAkgKi8KIAlpZiAoYmZhX2xpbmt1cF9kZWxheSA8IDApIHsKLQkJYmZhX2xpbmt1cF9kZWxheSA9IGJmYWRfb3NfZ2V0X2xpbmt1cF9kZWxheShiZmFkKTsKLQkJYmZhZF9vc19ycG9ydF9vbmxpbmVfd2FpdChiZmFkKTsKKwkJYmZhX2xpbmt1cF9kZWxheSA9IGJmYWRfZ2V0X2xpbmt1cF9kZWxheShiZmFkKTsKKwkJYmZhZF9ycG9ydF9vbmxpbmVfd2FpdChiZmFkKTsKIAkJYmZhX2xpbmt1cF9kZWxheSA9IC0xOwogCX0gZWxzZQotCQliZmFkX29zX3Jwb3J0X29ubGluZV93YWl0KGJmYWQpOworCQliZmFkX3Jwb3J0X29ubGluZV93YWl0KGJmYWQpOwogCiAJQkZBX0xPRyhLRVJOX0lORk8sIGJmYWQsIGJmYV9sb2dfbGV2ZWwsICJiZmEgZGV2aWNlIGNsYWltZWRcbiIpOwogCkBAIC0xMTY3LDcgKzExNjYsNiBAQAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CiAJCWJmYV9jb21wX2ZyZWUoJmJmYWQtPmJmYSwgJmRvbmVxKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7Ci0JCWJmYV90cmNfZnAoYmZhZCwgaXJxKTsKIAl9CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CkBAIC0xNTI0LDcgKzE1MjIsNyBAQAogCWlmIChzdHJjbXAoRkNQSV9OQU1FLCAiIGZjcGltIikgPT0gMCkKIAkJc3VwcG9ydGVkX2ZjNHMgfD0gQkZBX0xQT1JUX1JPTEVfRkNQX0lNOwogCi0JYmZhX2lvY19hdXRvX3JlY292ZXIoaW9jX2F1dG9fcmVjb3Zlcik7CisJYmZhX2F1dG9fcmVjb3ZlciA9IGlvY19hdXRvX3JlY292ZXI7CiAJYmZhX2Zjc19ycG9ydF9zZXRfZGVsX3RpbWVvdXQocnBvcnRfZGVsX3RpbWVvdXQpOwogCiAJZXJyb3IgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZiZmFkX3BjaV9kcml2ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2F0dHIuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9hdHRyLmMKaW5kZXggZWQ5ZmZmNC4uYTk0ZWE0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2F0dHIuYworKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfYXR0ci5jCkBAIC0yNSw3ICsyNSw3IEBACiAvKgogICogRkMgdHJhbnNwb3J0IHRlbXBsYXRlIGVudHJ5LCBnZXQgU0NTSSB0YXJnZXQgcG9ydCBJRC4KICAqLwotdm9pZAorc3RhdGljIHZvaWQKIGJmYWRfaW1fZ2V0X3N0YXJnZXRfcG9ydF9pZChzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQpCiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3Q7CkBAIC00MCw3ICs0MCw3IEBACiAJYmZhZCA9IGltX3BvcnQtPmJmYWQ7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOwogCi0JaXRuaW0gPSBiZmFkX29zX2dldF9pdG5pbShpbV9wb3J0LCBzdGFyZ2V0LT5pZCk7CisJaXRuaW0gPSBiZmFkX2dldF9pdG5pbShpbV9wb3J0LCBzdGFyZ2V0LT5pZCk7CiAJaWYgKGl0bmltKQogCQlmY19pZCA9IGJmYV9mY3NfaXRuaW1fZ2V0X2ZjaWQoJml0bmltLT5mY3NfaXRuaW0pOwogCkBAIC01MSw3ICs1MSw3IEBACiAvKgogICogRkMgdHJhbnNwb3J0IHRlbXBsYXRlIGVudHJ5LCBnZXQgU0NTSSB0YXJnZXQgbnd3bi4KICAqLwotdm9pZAorc3RhdGljIHZvaWQKIGJmYWRfaW1fZ2V0X3N0YXJnZXRfbm9kZV9uYW1lKHN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldCkKIHsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdDsKQEAgLTY2LDcgKzY2LDcgQEAKIAliZmFkID0gaW1fcG9ydC0+YmZhZDsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CiAKLQlpdG5pbSA9IGJmYWRfb3NfZ2V0X2l0bmltKGltX3BvcnQsIHN0YXJnZXQtPmlkKTsKKwlpdG5pbSA9IGJmYWRfZ2V0X2l0bmltKGltX3BvcnQsIHN0YXJnZXQtPmlkKTsKIAlpZiAoaXRuaW0pCiAJCW5vZGVfbmFtZSA9IGJmYV9mY3NfaXRuaW1fZ2V0X253d24oJml0bmltLT5mY3NfaXRuaW0pOwogCkBAIC03Nyw3ICs3Nyw3IEBACiAvKgogICogRkMgdHJhbnNwb3J0IHRlbXBsYXRlIGVudHJ5LCBnZXQgU0NTSSB0YXJnZXQgcHd3bi4KICAqLwotdm9pZAorc3RhdGljIHZvaWQKIGJmYWRfaW1fZ2V0X3N0YXJnZXRfcG9ydF9uYW1lKHN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldCkKIHsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdDsKQEAgLTkyLDcgKzkyLDcgQEAKIAliZmFkID0gaW1fcG9ydC0+YmZhZDsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CiAKLQlpdG5pbSA9IGJmYWRfb3NfZ2V0X2l0bmltKGltX3BvcnQsIHN0YXJnZXQtPmlkKTsKKwlpdG5pbSA9IGJmYWRfZ2V0X2l0bmltKGltX3BvcnQsIHN0YXJnZXQtPmlkKTsKIAlpZiAoaXRuaW0pCiAJCXBvcnRfbmFtZSA9IGJmYV9mY3NfaXRuaW1fZ2V0X3B3d24oJml0bmltLT5mY3NfaXRuaW0pOwogCkBAIC0xMDMsNyArMTAzLDcgQEAKIC8qCiAgKiBGQyB0cmFuc3BvcnQgdGVtcGxhdGUgZW50cnksIGdldCBTQ1NJIGhvc3QgcG9ydCBJRC4KICAqLwotdm9pZAorc3RhdGljIHZvaWQKIGJmYWRfaW1fZ2V0X2hvc3RfcG9ydF9pZChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCkKIHsKIAlzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQgPQpAQCAtMTExLDcgKzExMSw3IEBACiAJc3RydWN0IGJmYWRfcG9ydF9zICAgICpwb3J0ID0gaW1fcG9ydC0+cG9ydDsKIAogCWZjX2hvc3RfcG9ydF9pZChzaG9zdCkgPQotCQkJYmZhX29zX2h0b24zYihiZmFfZmNzX2xwb3J0X2dldF9mY2lkKHBvcnQtPmZjc19wb3J0KSk7CisJCQliZmFfaHRvbjNiKGJmYV9mY3NfbHBvcnRfZ2V0X2ZjaWQocG9ydC0+ZmNzX3BvcnQpKTsKIH0KIAogLyoKQEAgLTQ4Nyw3ICs0ODcsNyBAQAogCXdhaXRfZm9yX2NvbXBsZXRpb24odnBvcnQtPmNvbXBfZGVsKTsKIAogZnJlZV9zY3NpX2hvc3Q6Ci0JYmZhZF9vc19zY3NpX2hvc3RfZnJlZShiZmFkLCBpbV9wb3J0KTsKKwliZmFkX3Njc2lfaG9zdF9mcmVlKGJmYWQsIGltX3BvcnQpOwogCiAJa2ZyZWUodnBvcnQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfZGVidWdmcy5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2RlYnVnZnMuYwppbmRleCAxZmVkZWViLi5jNjZlMzJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfZGVidWdmcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9kZWJ1Z2ZzLmMKQEAgLTkwLDcgKzkwLDcgQEAKIAltZW1zZXQoZndfZGVidWctPmRlYnVnX2J1ZmZlciwgMCwgZndfZGVidWctPmJ1ZmZlcl9sZW4pOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOwotCXJjID0gYmZhX2RlYnVnX2Z3dHJjKCZiZmFkLT5iZmEsCisJcmMgPSBiZmFfaW9jX2RlYnVnX2Z3dHJjKCZiZmFkLT5iZmEuaW9jLAogCQkJZndfZGVidWctPmRlYnVnX2J1ZmZlciwKIAkJCSZmd19kZWJ1Zy0+YnVmZmVyX2xlbik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CkBAIC0xMzQsNyArMTM0LDcgQEAKIAltZW1zZXQoZndfZGVidWctPmRlYnVnX2J1ZmZlciwgMCwgZndfZGVidWctPmJ1ZmZlcl9sZW4pOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOwotCXJjID0gYmZhX2RlYnVnX2Z3c2F2ZSgmYmZhZC0+YmZhLAorCXJjID0gYmZhX2lvY19kZWJ1Z19md3NhdmUoJmJmYWQtPmJmYS5pb2MsCiAJCQlmd19kZWJ1Zy0+ZGVidWdfYnVmZmVyLAogCQkJJmZ3X2RlYnVnLT5idWZmZXJfbGVuKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKQEAgLTIwOCw3ICsyMDgsNyBAQAogCWlmICghZGVidWcgfHwgIWRlYnVnLT5kZWJ1Z19idWZmZXIpCiAJCXJldHVybiAwOwogCi0JcmV0dXJuIG1lbW9yeV9yZWFkX2Zyb21fYnVmZmVyKGJ1ZiwgbmJ5dGVzLCBwb3MsCisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKGJ1ZiwgbmJ5dGVzLCBwb3MsCiAJCQkJZGVidWctPmRlYnVnX2J1ZmZlciwgZGVidWctPmJ1ZmZlcl9sZW4pOwogfQogCkBAIC0yNTQsNyArMjU0LDcgQEAKIAlpZiAoIWJmYWQtPnJlZ2RhdGEpCiAJCXJldHVybiAwOwogCi0JcmMgPSBtZW1vcnlfcmVhZF9mcm9tX2J1ZmZlcihidWYsIG5ieXRlcywgcG9zLAorCXJjID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIoYnVmLCBuYnl0ZXMsIHBvcywKIAkJCWJmYWQtPnJlZ2RhdGEsIGJmYWQtPnJlZ2xlbik7CiAKIAlpZiAoKCpwb3MgKyBuYnl0ZXMpID49IGJmYWQtPnJlZ2xlbikgewpAQCAtMjc5LDE1ICsyNzksMzEgQEAKIAl1MzIgKnJlZ2J1ZjsKIAl2b2lkIF9faW9tZW0gKnJiLCAqcmVnX2FkZHI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl2b2lkICprZXJuX2J1ZjsKIAotCXJjID0gc3NjYW5mKGJ1ZiwgIiV4OiV4IiwgJmFkZHIsICZsZW4pOworCWtlcm5fYnVmID0ga3phbGxvYyhuYnl0ZXMsIEdGUF9LRVJORUwpOworCisJaWYgKCFrZXJuX2J1ZikgeworCQlwcmludGsoS0VSTl9JTkZPICJiZmFkWyVkXTogRmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlclxuIiwKKwkJCQliZmFkLT5pbnN0X25vKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJaWYgKGNvcHlfZnJvbV91c2VyKGtlcm5fYnVmLCAodm9pZCAgX191c2VyICopYnVmLCBuYnl0ZXMpKSB7CisJCWtmcmVlKGtlcm5fYnVmKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcmMgPSBzc2NhbmYoa2Vybl9idWYsICIleDoleCIsICZhZGRyLCAmbGVuKTsKIAlpZiAocmMgPCAyKSB7CiAJCXByaW50ayhLRVJOX0lORk8KIAkJCSJiZmFkWyVkXTogJXMgZmFpbGVkIHRvIHJlYWQgdXNlciBidWZcbiIsCiAJCQliZmFkLT5pbnN0X25vLCBfX2Z1bmNfXyk7CisJCWtmcmVlKGtlcm5fYnVmKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJa2ZyZWUoa2Vybl9idWYpOwogCWtmcmVlKGJmYWQtPnJlZ2RhdGEpOwogCWJmYWQtPnJlZ2RhdGEgPSBOVUxMOwogCWJmYWQtPnJlZ2xlbiA9IDA7CkBAIC0zMzksMTQgKzM1NSwzMCBAQAogCWludCBhZGRyLCB2YWwsIHJjOwogCXZvaWQgX19pb21lbSAqcmVnX2FkZHI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl2b2lkICprZXJuX2J1ZjsKIAotCXJjID0gc3NjYW5mKGJ1ZiwgIiV4OiV4IiwgJmFkZHIsICZ2YWwpOworCWtlcm5fYnVmID0ga3phbGxvYyhuYnl0ZXMsIEdGUF9LRVJORUwpOworCisJaWYgKCFrZXJuX2J1ZikgeworCQlwcmludGsoS0VSTl9JTkZPICJiZmFkWyVkXTogRmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlclxuIiwKKwkJCQliZmFkLT5pbnN0X25vKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJaWYgKGNvcHlfZnJvbV91c2VyKGtlcm5fYnVmLCAodm9pZCAgX191c2VyICopYnVmLCBuYnl0ZXMpKSB7CisJCWtmcmVlKGtlcm5fYnVmKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcmMgPSBzc2NhbmYoa2Vybl9idWYsICIleDoleCIsICZhZGRyLCAmdmFsKTsKIAlpZiAocmMgPCAyKSB7CiAJCXByaW50ayhLRVJOX0lORk8KIAkJCSJiZmFkWyVkXTogJXMgZmFpbGVkIHRvIHJlYWQgdXNlciBidWZcbiIsCiAJCQliZmFkLT5pbnN0X25vLCBfX2Z1bmNfXyk7CisJCWtmcmVlKGtlcm5fYnVmKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQorCWtmcmVlKGtlcm5fYnVmKTsKIAogCWFkZHIgJj0gQkZBX1JFR19BRERSTVNLKGJmYSk7IC8qIG9mZnNldCBvbmx5IDE3IGJpdCBhbmQgd29yZCBhbGlnbiAqLwogCkBAIC0zNTksNyArMzkxLDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JcmVnX2FkZHIgPSAodTMyICopICgodTggKikgYmZhX2lvY19iYXIwKGlvYykgKyBhZGRyKTsKKwlyZWdfYWRkciA9IChiZmFfaW9jX2JhcjAoaW9jKSkgKyBhZGRyOwogCXNwaW5fbG9ja19pcnFzYXZlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKIAl3cml0ZWwodmFsLCByZWdfYWRkcik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfZHJ2LmggYi9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfZHJ2LmgKaW5kZXggZDVjZTIzNC4uN2Y5ZWE5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2Rydi5oCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9kcnYuaApAQCAtMjYsNyArMjYsMjMgQEAKICNpZm5kZWYgX19CRkFEX0RSVl9IX18KICNkZWZpbmUgX19CRkFEX0RSVl9IX18KIAotI2luY2x1ZGUgImJmYV9vc19pbmMuaCIKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2lkci5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX3RjcS5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV90cmFuc3BvcnRfZmMuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfdHJhbnNwb3J0Lmg+CiAKICNpbmNsdWRlICJiZmFfbW9kdWxlcy5oIgogI2luY2x1ZGUgImJmYV9mY3MuaCIKQEAgLTM5LDcgKzU1LDcgQEAKICNpZmRlZiBCRkFfRFJJVkVSX1ZFUlNJT04KICNkZWZpbmUgQkZBRF9EUklWRVJfVkVSU0lPTiAgICBCRkFfRFJJVkVSX1ZFUlNJT04KICNlbHNlCi0jZGVmaW5lIEJGQURfRFJJVkVSX1ZFUlNJT04gICAgIjIuMy4yLjAiCisjZGVmaW5lIEJGQURfRFJJVkVSX1ZFUlNJT04gICAgIjIuMy4yLjMiCiAjZW5kaWYKIAogI2RlZmluZSBCRkFEX1BST1RPX05BTUUgRkNQSV9OQU1FCkBAIC0yNjMsMjggKzI3OSwyMSBAQAogICovCiAjZGVmaW5lIG5leHRMb3dlckludCh4KSAgICAgICAgICAgICAgICAgICAgICAgICBcCiBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JaW50IGk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlpbnQgX19pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAJKCp4KS0tOwkJCQkJXAotCWZvciAoaSA9IDE7IGkgPCAoc2l6ZW9mKGludCkqOCk7IGkgPDw9IDEpIFwKLQkJKCp4KSA9ICgqeCkgfCAoKngpID4+IGk7CVwKKwlmb3IgKF9faSA9IDE7IF9faSA8IChzaXplb2YoaW50KSo4KTsgX19pIDw8PSAxKSBcCisJCSgqeCkgPSAoKngpIHwgKCp4KSA+PiBfX2k7CVwKIAkoKngpKys7CQkJCQlcCiAJKCp4KSA9ICgqeCkgPj4gMTsJCQlcCiB9IHdoaWxlICgwKQogCiAKLSNkZWZpbmUgbGlzdF9yZW1vdmVfaGVhZChsaXN0LCBlbnRyeSwgdHlwZSwgbWVtYmVyKQkJXAotZG8gewkJCQkJCQkJXAotCWVudHJ5ID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCWlmICghbGlzdF9lbXB0eShsaXN0KSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQllbnRyeSA9IGxpc3RfZW50cnkoKGxpc3QpLT5uZXh0LCB0eXBlLCBtZW1iZXIpOwlcCi0JCWxpc3RfZGVsX2luaXQoJmVudHJ5LT5tZW1iZXIpOwkJCVwKLQl9CQkJCQkJCVwKKyNkZWZpbmUgQkZBX0xPRyhsZXZlbCwgYmZhZCwgbWFzaywgZm10LCBhcmcuLi4pCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJaWYgKCgobWFzaykgPT0gNCkgfHwgKGxldmVsWzFdIDw9ICc0JykpCQkJCVwKKwkJZGV2X3ByaW50ayhsZXZlbCwgJigoYmZhZCktPnBjaWRldiktPmRldiwgZm10LCAjI2FyZyk7CVwKIH0gd2hpbGUgKDApCiAKLSNkZWZpbmUgbGlzdF9nZXRfZmlyc3QobGlzdCwgdHlwZSwgbWVtYmVyKQkJCQlcCi0oKGxpc3RfZW1wdHkobGlzdCkpID8gTlVMTCA6CQkJCQkJXAotCWxpc3RfZW50cnkoKGxpc3QpLT5uZXh0LCB0eXBlLCBtZW1iZXIpKQotCiBiZmFfc3RhdHVzX3QJYmZhZF92cG9ydF9jcmVhdGUoc3RydWN0IGJmYWRfcyAqYmZhZCwgdTE2IHZmX2lkLAogCQkJCSAgc3RydWN0IGJmYV9scG9ydF9jZmdfcyAqcG9ydF9jZmcsCiAJCQkJICBzdHJ1Y3QgZGV2aWNlICpkZXYpOwpAQCAtMzE2LDggKzMyNSw4IEBACiAKIHZvaWQgYmZhZF9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKIGludCBiZmFkX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBpZCk7Ci12b2lkIGJmYWRfb3NfcnBvcnRfb25saW5lX3dhaXQoc3RydWN0IGJmYWRfcyAqYmZhZCk7Ci1pbnQgYmZhZF9vc19nZXRfbGlua3VwX2RlbGF5KHN0cnVjdCBiZmFkX3MgKmJmYWQpOwordm9pZCBiZmFkX3Jwb3J0X29ubGluZV93YWl0KHN0cnVjdCBiZmFkX3MgKmJmYWQpOworaW50IGJmYWRfZ2V0X2xpbmt1cF9kZWxheShzdHJ1Y3QgYmZhZF9zICpiZmFkKTsKIGludCBiZmFkX2luc3RhbGxfbXNpeF9oYW5kbGVyKHN0cnVjdCBiZmFkX3MgKmJmYWQpOwogCiBleHRlcm4gc3RydWN0IGlkciBiZmFkX2ltX3BvcnRfaW5kZXg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfaW0uYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9pbS5jCmluZGV4IGZiYWQ1ZTkuLmMyYjM2MTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9pbS5jCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9pbS5jCkBAIC0yMSw3ICsyMSw2IEBACiAKICNpbmNsdWRlICJiZmFkX2Rydi5oIgogI2luY2x1ZGUgImJmYWRfaW0uaCIKLSNpbmNsdWRlICJiZmFfY2JfaW9pbS5oIgogI2luY2x1ZGUgImJmYV9mY3MuaCIKIAogQkZBX1RSQ19GSUxFKExEUlYsIElNKTsKQEAgLTkzLDEwICs5MiwxMCBAQAogCQlpZiAoIWNtbmQtPnJlc3VsdCAmJiBpdG5pbSAmJgogCQkJIChiZmFfbHVuX3F1ZXVlX2RlcHRoID4gY21uZC0+ZGV2aWNlLT5xdWV1ZV9kZXB0aCkpIHsKIAkJCS8qIFF1ZXVlIGRlcHRoIGFkanVzdG1lbnQgZm9yIGdvb2Qgc3RhdHVzIGNvbXBsZXRpb24gKi8KLQkJCWJmYWRfb3NfcmFtcF91cF9xZGVwdGgoaXRuaW0sIGNtbmQtPmRldmljZSk7CisJCQliZmFkX3JhbXBfdXBfcWRlcHRoKGl0bmltLCBjbW5kLT5kZXZpY2UpOwogCQl9IGVsc2UgaWYgKGNtbmQtPnJlc3VsdCA9PSBTQU1fU1RBVF9UQVNLX1NFVF9GVUxMICYmIGl0bmltKSB7CiAJCQkvKiBxZnVsbCBoYW5kbGluZyAqLwotCQkJYmZhZF9vc19oYW5kbGVfcWZ1bGwoaXRuaW0sIGNtbmQtPmRldmljZSk7CisJCQliZmFkX2hhbmRsZV9xZnVsbChpdG5pbSwgY21uZC0+ZGV2aWNlKTsKIAkJfQogCX0KIApAQCAtMTI0LDcgKzEyMyw3IEBACiAJCWlmIChpdG5pbV9kYXRhKSB7CiAJCQlpdG5pbSA9IGl0bmltX2RhdGEtPml0bmltOwogCQkJaWYgKGl0bmltKQotCQkJCWJmYWRfb3NfcmFtcF91cF9xZGVwdGgoaXRuaW0sIGNtbmQtPmRldmljZSk7CisJCQkJYmZhZF9yYW1wX3VwX3FkZXB0aChpdG5pbSwgY21uZC0+ZGV2aWNlKTsKIAkJfQogCX0KIApAQCAtMTgzLDcgKzE4Miw3IEBACiAJYmZhX2dldF9hZGFwdGVyX21vZGVsKGJmYSwgbW9kZWwpOwogCiAJbWVtc2V0KGJmYV9idWYsIDAsIHNpemVvZihiZmFfYnVmKSk7Ci0JaWYgKGlvYy0+Y3RkZXYpCisJaWYgKGlvYy0+Y3RkZXYgJiYgIWlvYy0+ZmNtb2RlKQogCQlzbnByaW50ZihiZmFfYnVmLCBzaXplb2YoYmZhX2J1ZiksCiAJCSJCcm9jYWRlIEZDT0UgQWRhcHRlciwgIiAibW9kZWw6ICVzIGh3cGF0aDogJXMgZHJpdmVyOiAlcyIsCiAJCSBtb2RlbCwgYmZhZC0+cGNpX25hbWUsIEJGQURfRFJJVkVSX1ZFUlNJT04pOwpAQCAtMjU4LDYgKzI1Nyw3IEBACiAJc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbTsKIAlzdHJ1Y3QgYmZhX2l0bmltX3MgKmJmYV9pdG5pbTsKIAliZmFfc3RhdHVzX3QgICAgcmMgPSBCRkFfU1RBVFVTX09LOworCXN0cnVjdCBzY3NpX2x1biBzY3NpbHVuOwogCiAJdHNraW0gPSBiZmFfdHNraW1fYWxsb2MoJmJmYWQtPmJmYSwgKHN0cnVjdCBiZmFkX3Rza2ltX3MgKikgY21uZCk7CiAJaWYgKCF0c2tpbSkgewpAQCAtMjc0LDcgKzI3NCw4IEBACiAJY21uZC0+aG9zdF9zY3JpYmJsZSA9IE5VTEw7CiAJY21uZC0+U0NwLlN0YXR1cyA9IDA7CiAJYmZhX2l0bmltID0gYmZhX2Zjc19pdG5pbV9nZXRfaGFsaXRuKCZpdG5pbS0+ZmNzX2l0bmltKTsKLQliZmFfdHNraW1fc3RhcnQodHNraW0sIGJmYV9pdG5pbSwgKGx1bl90KTAsCisJbWVtc2V0KCZzY3NpbHVuLCAwLCBzaXplb2Yoc2NzaWx1bikpOworCWJmYV90c2tpbV9zdGFydCh0c2tpbSwgYmZhX2l0bmltLCBzY3NpbHVuLAogCQkJICAgIEZDUF9UTV9UQVJHRVRfUkVTRVQsIEJGQURfVEFSR0VUX1JFU0VUX1RNTyk7CiBvdXQ6CiAJcmV0dXJuIHJjOwpAQCAtMzAxLDYgKzMwMiw3IEBACiAJaW50ICAgICAgICAgICAgIHJjID0gU1VDQ0VTUzsKIAl1bnNpZ25lZCBsb25nICAgZmxhZ3M7CiAJZW51bSBiZmlfdHNraW1fc3RhdHVzIHRhc2tfc3RhdHVzOworCXN0cnVjdCBzY3NpX2x1biBzY3NpbHVuOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOwogCWl0bmltID0gaXRuaW1fZGF0YS0+aXRuaW07CkBAIC0zMjcsOCArMzI5LDggQEAKIAljbW5kLT5TQ3AucHRyID0gKGNoYXIgKikmd3E7CiAJY21uZC0+U0NwLlN0YXR1cyA9IDA7CiAJYmZhX2l0bmltID0gYmZhX2Zjc19pdG5pbV9nZXRfaGFsaXRuKCZpdG5pbS0+ZmNzX2l0bmltKTsKLQliZmFfdHNraW1fc3RhcnQodHNraW0sIGJmYV9pdG5pbSwKLQkJCSAgICBiZmFkX2ludF90b19sdW4oY21uZC0+ZGV2aWNlLT5sdW4pLAorCWludF90b19zY3NpbHVuKGNtbmQtPmRldmljZS0+bHVuLCAmc2NzaWx1bik7CisJYmZhX3Rza2ltX3N0YXJ0KHRza2ltLCBiZmFfaXRuaW0sIHNjc2lsdW4sCiAJCQkgICAgRkNQX1RNX0xVTl9SRVNFVCwgQkZBRF9MVU5fUkVTRVRfVE1PKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKIApAQCAtMzY0LDcgKzM2Niw3IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CiAJZm9yIChpID0gMDsgaSA8IE1BWF9GQ1BfVEFSR0VUOyBpKyspIHsKLQkJaXRuaW0gPSBiZmFkX29zX2dldF9pdG5pbShpbV9wb3J0LCBpKTsKKwkJaXRuaW0gPSBiZmFkX2dldF9pdG5pbShpbV9wb3J0LCBpKTsKIAkJaWYgKGl0bmltKSB7CiAJCQljbW5kLT5TQ3AucHRyID0gKGNoYXIgKikmd3E7CiAJCQlyYyA9IGJmYWRfaW1fdGFyZ2V0X3Jlc2V0X3NlbmQoYmZhZCwgY21uZCwgaXRuaW0pOwpAQCAtNDQ3LDcgKzQ0OSw3IEBACiAJc3RydWN0IGJmYWRfaW1fcwkqaW0gPSBpdG5pbV9kcnYtPmltOwogCiAJLyogb25saW5lIHRvIGZyZWUgc3RhdGUgdHJhbnN0aW9uIHNob3VsZCBub3QgaGFwcGVuICovCi0JYmZhX2Fzc2VydChpdG5pbV9kcnYtPnN0YXRlICE9IElUTklNX1NUQVRFX09OTElORSk7CisJV0FSTl9PTihpdG5pbV9kcnYtPnN0YXRlID09IElUTklNX1NUQVRFX09OTElORSk7CiAKIAlpdG5pbV9kcnYtPnF1ZXVlX3dvcmsgPSAxOwogCS8qIG9mZmxpbmUgcmVxdWVzdCBpcyBub3QgeWV0IGRvbmUsIHVzZSB0aGUgc2FtZSByZXF1ZXN0IHRvIGZyZWUgKi8KQEAgLTU0NSw3ICs1NDcsNyBAQAogCiAJbXV0ZXhfdW5sb2NrKCZiZmFkX211dGV4KTsKIAotCWltX3BvcnQtPnNob3N0ID0gYmZhZF9vc19zY3NpX2hvc3RfYWxsb2MoaW1fcG9ydCwgYmZhZCk7CisJaW1fcG9ydC0+c2hvc3QgPSBiZmFkX3Njc2lfaG9zdF9hbGxvYyhpbV9wb3J0LCBiZmFkKTsKIAlpZiAoIWltX3BvcnQtPnNob3N0KSB7CiAJCWVycm9yID0gMTsKIAkJZ290byBvdXRfZnJlZV9pZHI7CkBAIC01NzEsNyArNTczLDcgQEAKIAl9CiAKIAkvKiBzZXR1cCBob3N0IGZpeGVkIGF0dHJpYnV0ZSBpZiB0aGUgbGsgc3VwcG9ydHMgKi8KLQliZmFkX29zX2ZjX2hvc3RfaW5pdChpbV9wb3J0KTsKKwliZmFkX2ZjX2hvc3RfaW5pdChpbV9wb3J0KTsKIAogCXJldHVybiAwOwogCkBAIC02NjIsNyArNjY0LDcgQEAKIAl9CiAKIAkvKiB0aGUgaXRuaW1fbWFwcGVkX2xpc3QgbXVzdCBiZSBlbXB0eSBhdCB0aGlzIHRpbWUgKi8KLQliZmFfYXNzZXJ0KGxpc3RfZW1wdHkoJmltX3BvcnQtPml0bmltX21hcHBlZF9saXN0KSk7CisJV0FSTl9PTighbGlzdF9lbXB0eSgmaW1fcG9ydC0+aXRuaW1fbWFwcGVkX2xpc3QpKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOwogfQpAQCAtNjgyLDcgKzY4NCw3IEBACiAJYmZhZC0+aW0gPSBpbTsKIAlpbS0+YmZhZCA9IGJmYWQ7CiAKLQlpZiAoYmZhZF9vc190aHJlYWRfd29ya3EoYmZhZCkgIT0gQkZBX1NUQVRVU19PSykgeworCWlmIChiZmFkX3RocmVhZF93b3JrcShiZmFkKSAhPSBCRkFfU1RBVFVTX09LKSB7CiAJCWtmcmVlKGltKTsKIAkJcmMgPSBCRkFfU1RBVFVTX0ZBSUxFRDsKIAl9CkBAIC02OTUsMTQgKzY5NywxNCBAQAogYmZhZF9pbV9wcm9iZV91bmRvKHN0cnVjdCBiZmFkX3MgKmJmYWQpCiB7CiAJaWYgKGJmYWQtPmltKSB7Ci0JCWJmYWRfb3NfZGVzdHJveV93b3JrcShiZmFkLT5pbSk7CisJCWJmYWRfZGVzdHJveV93b3JrcShiZmFkLT5pbSk7CiAJCWtmcmVlKGJmYWQtPmltKTsKIAkJYmZhZC0+aW0gPSBOVUxMOwogCX0KIH0KIAogc3RydWN0IFNjc2lfSG9zdCAqCi1iZmFkX29zX3Njc2lfaG9zdF9hbGxvYyhzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQsIHN0cnVjdCBiZmFkX3MgKmJmYWQpCitiZmFkX3Njc2lfaG9zdF9hbGxvYyhzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQsIHN0cnVjdCBiZmFkX3MgKmJmYWQpCiB7CiAJc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqc2h0OwogCkBAIC03MTcsNyArNzE5LDcgQEAKIH0KIAogdm9pZAotYmZhZF9vc19zY3NpX2hvc3RfZnJlZShzdHJ1Y3QgYmZhZF9zICpiZmFkLCBzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQpCitiZmFkX3Njc2lfaG9zdF9mcmVlKHN0cnVjdCBiZmFkX3MgKmJmYWQsIHN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydCkKIHsKIAlpZiAoIShpbV9wb3J0LT5mbGFncyAmIEJGQURfUE9SVF9ERUxFVEUpKQogCQlmbHVzaF93b3JrcXVldWUoYmZhZC0+aW0tPmRydl93b3JrcSk7CkBAIC03MjcsNyArNzI5LDcgQEAKIH0KIAogdm9pZAotYmZhZF9vc19kZXN0cm95X3dvcmtxKHN0cnVjdCBiZmFkX2ltX3MgKmltKQorYmZhZF9kZXN0cm95X3dvcmtxKHN0cnVjdCBiZmFkX2ltX3MgKmltKQogewogCWlmIChpbSAmJiBpbS0+ZHJ2X3dvcmtxKSB7CiAJCWZsdXNoX3dvcmtxdWV1ZShpbS0+ZHJ2X3dvcmtxKTsKQEAgLTczNyw3ICs3MzksNyBAQAogfQogCiBiZmFfc3RhdHVzX3QKLWJmYWRfb3NfdGhyZWFkX3dvcmtxKHN0cnVjdCBiZmFkX3MgKmJmYWQpCitiZmFkX3RocmVhZF93b3JrcShzdHJ1Y3QgYmZhZF9zICpiZmFkKQogewogCXN0cnVjdCBiZmFkX2ltX3MgICAgICAqaW0gPSBiZmFkLT5pbTsKIApAQCAtODQxLDcgKzg0Myw3IEBACiB9CiAKIHZvaWQKLWJmYWRfb3NfcmFtcF91cF9xZGVwdGgoc3RydWN0IGJmYWRfaXRuaW1fcyAqaXRuaW0sIHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKK2JmYWRfcmFtcF91cF9xZGVwdGgoc3RydWN0IGJmYWRfaXRuaW1fcyAqaXRuaW0sIHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKIHsKIAlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnRtcF9zZGV2OwogCkBAIC04NjksNyArODcxLDcgQEAKIH0KIAogdm9pZAotYmZhZF9vc19oYW5kbGVfcWZ1bGwoc3RydWN0IGJmYWRfaXRuaW1fcyAqaXRuaW0sIHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKK2JmYWRfaGFuZGxlX3FmdWxsKHN0cnVjdCBiZmFkX2l0bmltX3MgKml0bmltLCBzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCiB7CiAJc3RydWN0IHNjc2lfZGV2aWNlICp0bXBfc2RldjsKIApAQCAtODgzLDcgKzg4NSw3IEBACiB9CiAKIHN0cnVjdCBiZmFkX2l0bmltX3MgKgotYmZhZF9vc19nZXRfaXRuaW0oc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0LCBpbnQgaWQpCitiZmFkX2dldF9pdG5pbShzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQsIGludCBpZCkKIHsKIAlzdHJ1Y3QgYmZhZF9pdG5pbV9zICAgKml0bmltID0gTlVMTDsKIApAQCAtOTIyLDcgKzkyNCw3IEBACiAJaWYgKCFpb2NfYXR0cikKIAkJcmV0dXJuIDA7CiAKLQliZmFfZ2V0X2F0dHIoYmZhLCBpb2NfYXR0cik7CisJYmZhX2lvY19nZXRfYXR0cigmYmZhLT5pb2MsIGlvY19hdHRyKTsKIAlpZiAoaW9jX2F0dHItPmFkYXB0ZXJfYXR0ci5tYXhfc3BlZWQgPT0gQkZBX1BPUlRfU1BFRURfOEdCUFMpIHsKIAkJaWYgKGlvY19hdHRyLT5hZGFwdGVyX2F0dHIuaXNfbWV6eikgewogCQkJc3VwcG9ydGVkX3NwZWVkIHw9IEZDX1BPUlRTUEVFRF84R0JJVCB8CkBAIC05NDQsNyArOTQ2LDcgQEAKIH0KIAogdm9pZAotYmZhZF9vc19mY19ob3N0X2luaXQoc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0KQorYmZhZF9mY19ob3N0X2luaXQoc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0KQogewogCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSBpbV9wb3J0LT5zaG9zdDsKIAlzdHJ1Y3QgYmZhZF9zICAgICAgICAgKmJmYWQgPSBpbV9wb3J0LT5iZmFkOwpAQCAtOTg4LDcgKzk5MCw3IEBACiAJcnBvcnRfaWRzLnBvcnRfbmFtZSA9CiAJCWNwdV90b19iZTY0KGJmYV9mY3NfaXRuaW1fZ2V0X3B3d24oJml0bmltLT5mY3NfaXRuaW0pKTsKIAlycG9ydF9pZHMucG9ydF9pZCA9Ci0JCWJmYV9vc19odG9uM2IoYmZhX2Zjc19pdG5pbV9nZXRfZmNpZCgmaXRuaW0tPmZjc19pdG5pbSkpOworCQliZmFfaHRvbjNiKGJmYV9mY3NfaXRuaW1fZ2V0X2ZjaWQoJml0bmltLT5mY3NfaXRuaW0pKTsKIAlycG9ydF9pZHMucm9sZXMgPSBGQ19SUE9SVF9ST0xFX1VOS05PV047CiAKIAlpdG5pbS0+ZmNfcnBvcnQgPSBmY19ycG9ydCA9CkBAIC0xMTA5LDcgKzExMTEsNyBAQAogCQlrZnJlZShpdG5pbSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWJmYV9hc3NlcnQoMCk7CisJCVdBUk5fT04oMSk7CiAJCWJyZWFrOwogCX0KIApAQCAtMTE3Miw3ICsxMTc0LDYgQEAKIAl9CiAKIAljbW5kLT5ob3N0X3NjcmliYmxlID0gKGNoYXIgKiloYWxfaW87Ci0JYmZhX3RyY19mcChiZmFkLCBoYWxfaW8tPmlvdGFnKTsKIAliZmFfaW9pbV9zdGFydChoYWxfaW8pOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOwogCkBAIC0xMTkwLDcgKzExOTEsNyBAQAogc3RhdGljIERFRl9TQ1NJX1FDTUQoYmZhZF9pbV9xdWV1ZWNvbW1hbmQpCiAKIHZvaWQKLWJmYWRfb3NfcnBvcnRfb25saW5lX3dhaXQoc3RydWN0IGJmYWRfcyAqYmZhZCkKK2JmYWRfcnBvcnRfb25saW5lX3dhaXQoc3RydWN0IGJmYWRfcyAqYmZhZCkKIHsKIAlpbnQgaTsKIAlpbnQgcnBvcnRfZGVsYXkgPSAxMDsKQEAgLTEyMTgsNyArMTIxOSw3IEBACiB9CiAKIGludAotYmZhZF9vc19nZXRfbGlua3VwX2RlbGF5KHN0cnVjdCBiZmFkX3MgKmJmYWQpCitiZmFkX2dldF9saW5rdXBfZGVsYXkoc3RydWN0IGJmYWRfcyAqYmZhZCkKIHsKIAl1OAkJbnd3bnMgPSAwOwogCXd3bl90CQl3d25zW0JGQV9QUkVCT09UX0JPT1RMVU5fTUFYXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9pbS5oIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2ltLmgKaW5kZXggYjAzOGMwZS4uYmZlZTYzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2ltLmgKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2ltLmgKQEAgLTExNywxNyArMTE3LDE3IEBACiAJY2hhciAgICAgICAgICAgIGRydl93b3JrcV9uYW1lW0tPQkpfTkFNRV9MRU5dOwogfTsKIAotc3RydWN0IFNjc2lfSG9zdCAqYmZhZF9vc19zY3NpX2hvc3RfYWxsb2Moc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0LAorc3RydWN0IFNjc2lfSG9zdCAqYmZhZF9zY3NpX2hvc3RfYWxsb2Moc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0LAogCQkJCXN0cnVjdCBiZmFkX3MgKik7Ci1iZmFfc3RhdHVzX3QgYmZhZF9vc190aHJlYWRfd29ya3Eoc3RydWN0IGJmYWRfcyAqYmZhZCk7Ci12b2lkIGJmYWRfb3NfZGVzdHJveV93b3JrcShzdHJ1Y3QgYmZhZF9pbV9zICppbSk7Ci12b2lkIGJmYWRfb3NfZmNfaG9zdF9pbml0KHN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydCk7Ci12b2lkIGJmYWRfb3Nfc2NzaV9ob3N0X2ZyZWUoc3RydWN0IGJmYWRfcyAqYmZhZCwKK2JmYV9zdGF0dXNfdCBiZmFkX3RocmVhZF93b3JrcShzdHJ1Y3QgYmZhZF9zICpiZmFkKTsKK3ZvaWQgYmZhZF9kZXN0cm95X3dvcmtxKHN0cnVjdCBiZmFkX2ltX3MgKmltKTsKK3ZvaWQgYmZhZF9mY19ob3N0X2luaXQoc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0KTsKK3ZvaWQgYmZhZF9zY3NpX2hvc3RfZnJlZShzdHJ1Y3QgYmZhZF9zICpiZmFkLAogCQkJCSBzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQpOwotdm9pZCBiZmFkX29zX3JhbXBfdXBfcWRlcHRoKHN0cnVjdCBiZmFkX2l0bmltX3MgKml0bmltLAordm9pZCBiZmFkX3JhbXBfdXBfcWRlcHRoKHN0cnVjdCBiZmFkX2l0bmltX3MgKml0bmltLAogCQkJCSBzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpOwotdm9pZCBiZmFkX29zX2hhbmRsZV9xZnVsbChzdHJ1Y3QgYmZhZF9pdG5pbV9zICppdG5pbSwgc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KTsKLXN0cnVjdCBiZmFkX2l0bmltX3MgKmJmYWRfb3NfZ2V0X2l0bmltKHN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydCwgaW50IGlkKTsKK3ZvaWQgYmZhZF9oYW5kbGVfcWZ1bGwoc3RydWN0IGJmYWRfaXRuaW1fcyAqaXRuaW0sIHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldik7CitzdHJ1Y3QgYmZhZF9pdG5pbV9zICpiZmFkX2dldF9pdG5pbShzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQsIGludCBpZCk7CiAKIGV4dGVybiBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGJmYWRfaW1fc2NzaV9ob3N0X3RlbXBsYXRlOwogZXh0ZXJuIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgYmZhZF9pbV92cG9ydF90ZW1wbGF0ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZpLmggYi9kcml2ZXJzL3Njc2kvYmZhL2JmaS5oCmluZGV4IDU4Nzk2ZDEuLjcyYjY5YTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZmEvYmZpLmgKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmkuaApAQCAtOTUsOCArOTUsOCBAQAogICovCiB1bmlvbiBiZmlfYWRkcl91IHsKIAlzdHJ1Y3QgewotCQl1MzIJYWRkcl9sbzsKLQkJdTMyCWFkZHJfaGk7CisJCV9fYmUzMglhZGRyX2xvOworCQlfX2JlMzIJYWRkcl9oaTsKIAl9IGEzMjsKIH07CiAKQEAgLTEwNCw3ICsxMDQsNyBAQAogICogU2NhdHRlciBHYXRoZXIgRWxlbWVudAogICovCiBzdHJ1Y3QgYmZpX3NnZV9zIHsKLSNpZmRlZiBfX0JJR0VORElBTgorI2lmZGVmIF9fQklHX0VORElBTgogCXUzMglmbGFnczoyLAogCQkJcnN2ZDoyLAogCQkJc2dfbGVuOjI4OwpAQCAtMzk5LDcgKzM5OSw3IEBACiAgKi8KIHN0cnVjdCBiZmlfcGJjX2JsdW5fcyB7CiAJd3duX3QJCXRndF9wd3duOwotCWx1bl90CQl0Z3RfbHVuOworCXN0cnVjdCBzY3NpX2x1bgl0Z3RfbHVuOwogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZpX2NicmVnLmggYi9kcml2ZXJzL3Njc2kvYmZhL2JmaV9jYnJlZy5oCmluZGV4IDZmMDNlZDMuLjM5YWQ0MmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZmEvYmZpX2NicmVnLmgKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmlfY2JyZWcuaApAQCAtMjA4LDYgKzIwOCw3IEBACiAjZGVmaW5lIEJGQV9JT0MxX0hCRUFUX1JFRyAgICAgICAgICAgICAgIEhPU1RfU0VNMl9JTkZPX1JFRwogI2RlZmluZSBCRkFfSU9DMV9TVEFURV9SRUcgICAgICAgICAgICAgICBIT1NUX1NFTTNfSU5GT19SRUcKICNkZWZpbmUgQkZBX0ZXX1VTRV9DT1VOVCAgICAgICAgICAgICAgICAgSE9TVF9TRU00X0lORk9fUkVHCisjZGVmaW5lIEJGQV9JT0NfRkFJTF9TWU5DCQkgSE9TVF9TRU01X0lORk9fUkVHCiAKICNkZWZpbmUgQ1BFX1FfREVQVEgoX19uKSBcCiAJKENQRV9RMF9ERVBUSCArIChfX24pICogKENQRV9RMV9ERVBUSCAtIENQRV9RMF9ERVBUSCkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmaV9jdHJlZy5oIGIvZHJpdmVycy9zY3NpL2JmYS9iZmlfY3RyZWcuaAppbmRleCA2MmI4NmE0Li5mYzRjZTRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL2JmaV9jdHJlZy5oCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZpX2N0cmVnLmgKQEAgLTUyMiw2ICs1MjIsNyBAQAogI2RlZmluZSBCRkFfSU9DMV9IQkVBVF9SRUcJCUhPU1RfU0VNMl9JTkZPX1JFRwogI2RlZmluZSBCRkFfSU9DMV9TVEFURV9SRUcJCUhPU1RfU0VNM19JTkZPX1JFRwogI2RlZmluZSBCRkFfRldfVVNFX0NPVU5UCQkgSE9TVF9TRU00X0lORk9fUkVHCisjZGVmaW5lIEJGQV9JT0NfRkFJTF9TWU5DCQlIT1NUX1NFTTVfSU5GT19SRUcKIAogI2RlZmluZSBDUEVfREVQVEhfUShfX24pIFwKIAkoQ1BFX0RFUFRIX1EwICsgKF9fbikgKiAoQ1BFX0RFUFRIX1ExIC0gQ1BFX0RFUFRIX1EwKSkKQEAgLTUzOSwyMiArNTQwLDMwIEBACiAJKFJNRV9QSV9QVFJfUTAgKyAoX19uKSAqIChSTUVfUElfUFRSX1ExIC0gUk1FX1BJX1BUUl9RMCkpCiAjZGVmaW5lIFJNRV9DSV9QVFJfUShfX24pIFwKIAkoUk1FX0NJX1BUUl9RMCArIChfX24pICogKFJNRV9DSV9QVFJfUTEgLSBSTUVfQ0lfUFRSX1EwKSkKLSNkZWZpbmUgSFFNX1FTRVRfUlhRX0RSQkxfUDAoX19uKSAoSFFNX1FTRVQwX1JYUV9EUkJMX1AwICsgKF9fbikgXAotCSogKEhRTV9RU0VUMV9SWFFfRFJCTF9QMCAtIEhRTV9RU0VUMF9SWFFfRFJCTF9QMCkpCi0jZGVmaW5lIEhRTV9RU0VUX1RYUV9EUkJMX1AwKF9fbikgKEhRTV9RU0VUMF9UWFFfRFJCTF9QMCArIChfX24pIFwKLQkqIChIUU1fUVNFVDFfVFhRX0RSQkxfUDAgLSBIUU1fUVNFVDBfVFhRX0RSQkxfUDApKQotI2RlZmluZSBIUU1fUVNFVF9JQl9EUkJMXzFfUDAoX19uKSAoSFFNX1FTRVQwX0lCX0RSQkxfMV9QMCArIChfX24pIFwKLQkqIChIUU1fUVNFVDFfSUJfRFJCTF8xX1AwIC0gSFFNX1FTRVQwX0lCX0RSQkxfMV9QMCkpCi0jZGVmaW5lIEhRTV9RU0VUX0lCX0RSQkxfMl9QMChfX24pIChIUU1fUVNFVDBfSUJfRFJCTF8yX1AwICsgKF9fbikgXAotCSogKEhRTV9RU0VUMV9JQl9EUkJMXzJfUDAgLSBIUU1fUVNFVDBfSUJfRFJCTF8yX1AwKSkKLSNkZWZpbmUgSFFNX1FTRVRfUlhRX0RSQkxfUDEoX19uKSAoSFFNX1FTRVQwX1JYUV9EUkJMX1AxICsgKF9fbikgXAotCSogKEhRTV9RU0VUMV9SWFFfRFJCTF9QMSAtIEhRTV9RU0VUMF9SWFFfRFJCTF9QMSkpCi0jZGVmaW5lIEhRTV9RU0VUX1RYUV9EUkJMX1AxKF9fbikgKEhRTV9RU0VUMF9UWFFfRFJCTF9QMSArIChfX24pIFwKLQkqIChIUU1fUVNFVDFfVFhRX0RSQkxfUDEgLSBIUU1fUVNFVDBfVFhRX0RSQkxfUDEpKQotI2RlZmluZSBIUU1fUVNFVF9JQl9EUkJMXzFfUDEoX19uKSAoSFFNX1FTRVQwX0lCX0RSQkxfMV9QMSArIChfX24pIFwKLQkqIChIUU1fUVNFVDFfSUJfRFJCTF8xX1AxIC0gSFFNX1FTRVQwX0lCX0RSQkxfMV9QMSkpCi0jZGVmaW5lIEhRTV9RU0VUX0lCX0RSQkxfMl9QMShfX24pIChIUU1fUVNFVDBfSUJfRFJCTF8yX1AxICsgKF9fbikgXAotCSogKEhRTV9RU0VUMV9JQl9EUkJMXzJfUDEgLSBIUU1fUVNFVDBfSUJfRFJCTF8yX1AxKSkKKyNkZWZpbmUgSFFNX1FTRVRfUlhRX0RSQkxfUDAoX19uKSBcCisJKEhRTV9RU0VUMF9SWFFfRFJCTF9QMCArIChfX24pICoJXAorCShIUU1fUVNFVDFfUlhRX0RSQkxfUDAgLSBIUU1fUVNFVDBfUlhRX0RSQkxfUDApKQorI2RlZmluZSBIUU1fUVNFVF9UWFFfRFJCTF9QMChfX24pIFwKKwkoSFFNX1FTRVQwX1RYUV9EUkJMX1AwICsgKF9fbikgKglcCisJKEhRTV9RU0VUMV9UWFFfRFJCTF9QMCAtIEhRTV9RU0VUMF9UWFFfRFJCTF9QMCkpCisjZGVmaW5lIEhRTV9RU0VUX0lCX0RSQkxfMV9QMChfX24pIFwKKwkoSFFNX1FTRVQwX0lCX0RSQkxfMV9QMCArIChfX24pICoJXAorCShIUU1fUVNFVDFfSUJfRFJCTF8xX1AwIC0gSFFNX1FTRVQwX0lCX0RSQkxfMV9QMCkpCisjZGVmaW5lIEhRTV9RU0VUX0lCX0RSQkxfMl9QMChfX24pIFwKKwkoSFFNX1FTRVQwX0lCX0RSQkxfMl9QMCArIChfX24pICoJXAorCShIUU1fUVNFVDFfSUJfRFJCTF8yX1AwIC0gSFFNX1FTRVQwX0lCX0RSQkxfMl9QMCkpCisjZGVmaW5lIEhRTV9RU0VUX1JYUV9EUkJMX1AxKF9fbikgXAorCShIUU1fUVNFVDBfUlhRX0RSQkxfUDEgKyAoX19uKSAqCVwKKwkoSFFNX1FTRVQxX1JYUV9EUkJMX1AxIC0gSFFNX1FTRVQwX1JYUV9EUkJMX1AxKSkKKyNkZWZpbmUgSFFNX1FTRVRfVFhRX0RSQkxfUDEoX19uKSBcCisJKEhRTV9RU0VUMF9UWFFfRFJCTF9QMSArIChfX24pICoJXAorCShIUU1fUVNFVDFfVFhRX0RSQkxfUDEgLSBIUU1fUVNFVDBfVFhRX0RSQkxfUDEpKQorI2RlZmluZSBIUU1fUVNFVF9JQl9EUkJMXzFfUDEoX19uKSBcCisJKEhRTV9RU0VUMF9JQl9EUkJMXzFfUDEgKyAoX19uKSAqCVwKKwkoSFFNX1FTRVQxX0lCX0RSQkxfMV9QMSAtIEhRTV9RU0VUMF9JQl9EUkJMXzFfUDEpKQorI2RlZmluZSBIUU1fUVNFVF9JQl9EUkJMXzJfUDEoX19uKSBcCisJKEhRTV9RU0VUMF9JQl9EUkJMXzJfUDEgKyAoX19uKSAqCVwKKwkoSFFNX1FTRVQxX0lCX0RSQkxfMl9QMSAtIEhRTV9RU0VUMF9JQl9EUkJMXzJfUDEpKQogCiAjZGVmaW5lIENQRV9RX05VTShfX2ZuLCBfX3EpICgoKF9fZm4pIDw8IDIpICsgKF9fcSkpCiAjZGVmaW5lIFJNRV9RX05VTShfX2ZuLCBfX3EpICgoKF9fZm4pIDw8IDIpICsgKF9fcSkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmaV9tcy5oIGIvZHJpdmVycy9zY3NpL2JmYS9iZmlfbXMuaAppbmRleCBmYTlmNmZiLi4xOWU4ODhhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL2JmaV9tcy5oCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZpX21zLmgKQEAgLTQ3LDEwICs0NywxMCBAQAogCSAqLwogCXVuaW9uIGJmaV9hZGRyX3UgIHJlcV9jcV9iYVtCRklfSU9DX01BWF9DUVNdOwogCXVuaW9uIGJmaV9hZGRyX3UgIHJlcV9zaGFkb3dfY2lbQkZJX0lPQ19NQVhfQ1FTXTsKLQl1MTYgICAgcmVxX2NxX2VsZW1zW0JGSV9JT0NfTUFYX0NRU107CisJX19iZTE2ICAgIHJlcV9jcV9lbGVtc1tCRklfSU9DX01BWF9DUVNdOwogCXVuaW9uIGJmaV9hZGRyX3UgIHJzcF9jcV9iYVtCRklfSU9DX01BWF9DUVNdOwogCXVuaW9uIGJmaV9hZGRyX3UgIHJzcF9zaGFkb3dfcGlbQkZJX0lPQ19NQVhfQ1FTXTsKLQl1MTYgICAgcnNwX2NxX2VsZW1zW0JGSV9JT0NfTUFYX0NRU107CisJX19iZTE2ICAgIHJzcF9jcV9lbGVtc1tCRklfSU9DX01BWF9DUVNdOwogCiAJdW5pb24gYmZpX2FkZHJfdSAgc3RhdHNfYWRkcjsJLyogIERNQS1hYmxlIGFkZHJlc3MgZm9yIHN0YXRzCSAgKi8KIAl1bmlvbiBiZmlfYWRkcl91ICBjZmdyc3BfYWRkcjsJLyogIGNvbmZpZyByZXNwb25zZSBkbWEgYWRkcmVzcyAgKi8KQEAgLTEwMiw4ICsxMDIsOCBAQAogCXN0cnVjdCBiZmlfbWhkcl9zIG1oOwkJLyogIGNvbW1vbiBtc2cgaGVhZGVyCQkqLwogCXU4CQljb2FsZXNjZTsJLyogIGVuYWJsZSBpbnRyIGNvYWxlc2NpbmcJKi8KIAl1OAkJcnN2ZFszXTsKLQl1MTYJZGVsYXk7CQkvKiAgZGVsYXkgdGltZXIgMC4uMTEyNXVzCSovCi0JdTE2CWxhdGVuY3k7CS8qICBsYXRlbmN5IHRpbWVyIDAuLjIyNXVzCSovCisJX19iZTE2CWRlbGF5OwkJLyogIGRlbGF5IHRpbWVyIDAuLjExMjV1cwkqLworCV9fYmUxNglsYXRlbmN5OwkvKiAgbGF0ZW5jeSB0aW1lciAwLi4yMjV1cwkqLwogfTsKIAogCkBAIC0xODgsNyArMTg4LDggQEAKIAlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7CQkvKiAgY29tbW9uIG1zZyBoZWFkZXIJCSAgICAqLwogCXU4CQkgICBzdGF0dXM7CS8qICBwb3J0IGVuYWJsZSBzdGF0dXMJCSAgICAqLwogCXU4CQkgICByc3ZkWzNdOwotCXUzMgkgICBtc2d0YWc7CS8qICBtc2d0YWcgZm9yIHJlcGx5CQkgICAgKi8KKwlzdHJ1Y3QJYmZhX3BvcnRfY2ZnX3MgcG9ydF9jZmc7LyogcG9ydCBjb25maWd1cmF0aW9uCSovCisJdTMyCW1zZ3RhZzsJCQkvKiBtc2d0YWcgZm9yIHJlcGx5CSovCiB9OwogCiAvKgpAQCAtMjAyLDcgKzIwMyw4IEBACiAJc3RydWN0IGJmYV9wb3J0X2NmZ19zIHBvcnRfY2ZnOyAvKiAgcG9ydCBjb25maWd1cmF0aW9uCSAgICAqLwogCXVuaW9uIGJmaV9hZGRyX3UgICBzdGF0c19kbWFfYWRkcjsgLyogIERNQSBhZGRyZXNzIGZvciBzdGF0cwkgICAgKi8KIAl1MzIJICAgbXNndGFnOwkvKiAgbXNndGFnIGZvciByZXBseQkJICAgICovCi0JdTMyCSAgIHJzdmQyOworCXU4CXVzZV9mbGFzaF9jZmc7CS8qIGdldCBwcm90IGNmZyBmcm9tIGZsYXNoICovCisJdTgJcnN2ZDJbM107CiB9OwogCiAvKgpAQCAtMjEwLDcgKzIxMiw3IEBACiAgKi8KIHN0cnVjdCBiZmlfZmNwb3J0X3NldF9zdmNfcGFyYW1zX3JlcV9zIHsKIAlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7CQkvKiAgbXNnIGhlYWRlciAqLwotCXUxNgkgICB0eF9iYmNyZWRpdDsJLyogIFR4IGNyZWRpdHMgKi8KKwlfX2JlMTYJICAgdHhfYmJjcmVkaXQ7CS8qICBUeCBjcmVkaXRzICovCiAJdTE2CSAgIHJzdmQ7CiB9OwogCkBAIC0yMzEsNyArMjMzLDcgQEAKIAl1OAkJCXN0YXRlOwkJLyogYmZhX3RydW5rX2xpbmtfc3RhdGVfdCAqLwogCXU4CQkJc3BlZWQ7CQkvKiBiZmFfcG9ydF9zcGVlZF90ICovCiAJdTgJCQlyc3ZkOwotCXUzMgkJZGVza2V3OworCV9fYmUzMgkJZGVza2V3OwogfTsKIAogI2RlZmluZSBCRklfRkNQT1JUX01BWF9MSU5LUwkyCkBAIC0yODQsMTcgKzI4NiwxNyBAQAogICovCiBzdHJ1Y3QgYmZpX2ZjeHBfc2VuZF9yZXFfcyB7CiAJc3RydWN0IGJmaV9taGRyX3MgIG1oOwkJLyogIENvbW1vbiBtc2cgaGVhZGVyCQkgICAgKi8KLQl1MTYJZmN4cF90YWc7CS8qICBkcml2ZXIgcmVxdWVzdCB0YWcJCSAgICAqLwotCXUxNgltYXhfZnJtc3o7CS8qICBtYXggc2VuZCBmcmFtZSBzaXplCSAgICAqLwotCXUxNgl2Zl9pZDsJCS8qICB2c2FuIHRhZyBpZiBhcHBsaWNhYmxlCSAgICAqLworCV9fYmUxNglmY3hwX3RhZzsJLyogIGRyaXZlciByZXF1ZXN0IHRhZwkJICAgICovCisJX19iZTE2CW1heF9mcm1zejsJLyogIG1heCBzZW5kIGZyYW1lIHNpemUJICAgICovCisJX19iZTE2CXZmX2lkOwkJLyogIHZzYW4gdGFnIGlmIGFwcGxpY2FibGUJICAgICovCiAJdTE2CXJwb3J0X2Z3X2huZGw7CS8qICBGVyBIYW5kbGUgZm9yIHRoZSByZW1vdGUgcG9ydCAgKi8KIAl1OAkgY2xhc3M7CQkvKiAgRkMgY2xhc3MgdXNlZCBmb3IgcmVxL3JzcAkgICAgKi8KIAl1OAkgcnNwX3RpbWVvdXQ7CS8qICB0aW1lb3V0IGluIHNlY3MsIDAtbm8gcmVzcG9uc2UgKi8KIAl1OAkgY3RzOwkJLyogIGNvbnRpbnVlIHNlcXVlbmNlCQkgICAgKi8KIAl1OAkgbHBfdGFnOwkvKiAgbHBvcnQgdGFnCQkJICAgICovCiAJc3RydWN0IGZjaHNfcwlmY2hzOwkvKiAgcmVxdWVzdCBGQyBoZWFkZXIgc3RydWN0dXJlICAgICovCi0JdTMyCXJlcV9sZW47CS8qICByZXF1ZXN0IHBheWxvYWQgbGVuZ3RoCSAgICAqLwotCXUzMglyc3BfbWF4bGVuOwkvKiAgbWF4IHJlc3BvbnNlIGxlbmd0aCBleHBlY3RlZCAgICovCisJX19iZTMyCXJlcV9sZW47CS8qICByZXF1ZXN0IHBheWxvYWQgbGVuZ3RoCSAgICAqLworCV9fYmUzMglyc3BfbWF4bGVuOwkvKiAgbWF4IHJlc3BvbnNlIGxlbmd0aCBleHBlY3RlZCAgICovCiAJc3RydWN0IGJmaV9zZ2VfcyAgIHJlcV9zZ2VbQkZBX0ZDWFBfTUFYX1NHRVNdOwkvKiAgcmVxdWVzdCBidWYgICAgKi8KIAlzdHJ1Y3QgYmZpX3NnZV9zICAgcnNwX3NnZVtCRkFfRkNYUF9NQVhfU0dFU107CS8qICByZXNwb25zZSBidWYgICAqLwogfTsKQEAgLTMwNCwxMSArMzA2LDExIEBACiAgKi8KIHN0cnVjdCBiZmlfZmN4cF9zZW5kX3JzcF9zIHsKIAlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7CQkvKiAgQ29tbW9uIG1zZyBoZWFkZXIJCSAgICAqLwotCXUxNglmY3hwX3RhZzsJLyogIHNlbmQgcmVxdWVzdCB0YWcJCSAgICAqLworCV9fYmUxNglmY3hwX3RhZzsJLyogIHNlbmQgcmVxdWVzdCB0YWcJCSAgICAqLwogCXU4CSByZXFfc3RhdHVzOwkvKiAgcmVxdWVzdCBzdGF0dXMJCSAgICAqLwogCXU4CSByc3ZkOwotCXUzMglyc3BfbGVuOwkvKiAgYWN0dWFsIHJlc3BvbnNlIGxlbmd0aAkgICAgKi8KLQl1MzIJcmVzaWR1ZV9sZW47CS8qICByZXNpZHVhbCByZXNwb25zZSBsZW5ndGgJICAgICovCisJX19iZTMyCXJzcF9sZW47CS8qICBhY3R1YWwgcmVzcG9uc2UgbGVuZ3RoCSAgICAqLworCV9fYmUzMglyZXNpZHVlX2xlbjsJLyogIHJlc2lkdWFsIHJlc3BvbnNlIGxlbmd0aAkgICAgKi8KIAlzdHJ1Y3QgZmNoc19zCWZjaHM7CS8qICByZXNwb25zZSBGQyBoZWFkZXIgc3RydWN0dXJlICAgKi8KIH07CiAKQEAgLTMyNSw3ICszMjcsNyBAQAogc3RydWN0IGJmaV91Zl9idWZfcG9zdF9zIHsKIAlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7CQkvKiAgQ29tbW9uIG1zZyBoZWFkZXIJCSovCiAJdTE2CWJ1Zl90YWc7CS8qICBidWZmZXIgdGFnCQkJKi8KLQl1MTYJYnVmX2xlbjsJLyogIHRvdGFsIGJ1ZmZlciBsZW5ndGgJKi8KKwlfX2JlMTYJYnVmX2xlbjsJLyogIHRvdGFsIGJ1ZmZlciBsZW5ndGgJKi8KIAlzdHJ1Y3QgYmZpX3NnZV9zICAgc2dlW0JGQV9VRl9NQVhfU0dFU107IC8qICBidWZmZXIgRE1BIFNHRXMJKi8KIH07CiAKQEAgLTM0MCw2ICszNDIsNyBAQAogZW51bSBiZmlfbHBzX2gyaV9tc2dzIHsKIAlCRklfTFBTX0gySV9MT0dJTl9SRVEJPSAxLAogCUJGSV9MUFNfSDJJX0xPR09VVF9SRVEJPSAyLAorCUJGSV9MUFNfSDJJX04yTl9QSURfUkVRID0gMywKIH07CiAKIGVudW0gYmZpX2xwc19pMmhfbXNncyB7CkBAIC0zNTIsNyArMzU1LDcgQEAKIAlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7CQkvKiAgY29tbW9uIG1zZyBoZWFkZXIJCSovCiAJdTgJCWxwX3RhZzsKIAl1OAkJYWxwYTsKLQl1MTYJcGR1X3NpemU7CisJX19iZTE2CQlwZHVfc2l6ZTsKIAl3d25fdAkJcHd3bjsKIAl3d25fdAkJbnd3bjsKIAl1OAkJZmRpc2M7CkBAIC0zNjgsNyArMzcxLDcgQEAKIAl1OAkJbHNyanRfZXhwbDsKIAl3d25fdAkJcG9ydF9uYW1lOwogCXd3bl90CQlub2RlX25hbWU7Ci0JdTE2CWJiX2NyZWRpdDsKKwlfX2JlMTYJCWJiX2NyZWRpdDsKIAl1OAkJZl9wb3J0OwogCXU4CQlucGl2X2VuOwogCXUzMglscF9waWQ6MjQ7CkBAIC0zOTksMTAgKzQwMiwxNyBAQAogCXU4CQlyc3ZkWzNdOwogfTsKIAorc3RydWN0IGJmaV9scHNfbjJuX3BpZF9yZXFfcyB7CisJc3RydWN0IGJmaV9taGRyX3MJbWg7CS8qICBjb21tb24gbXNnIGhlYWRlcgkJKi8KKwl1OAlscF90YWc7CisJdTMyCWxwX3BpZDoyNDsKK307CisKIHVuaW9uIGJmaV9scHNfaDJpX21zZ191IHsKIAlzdHJ1Y3QgYmZpX21oZHJfcwkJKm1zZzsKIAlzdHJ1Y3QgYmZpX2xwc19sb2dpbl9yZXFfcwkqbG9naW5fcmVxOwogCXN0cnVjdCBiZmlfbHBzX2xvZ291dF9yZXFfcwkqbG9nb3V0X3JlcTsKKwlzdHJ1Y3QgYmZpX2xwc19uMm5fcGlkX3JlcV9zCSpuMm5fcGlkX3JlcTsKIH07CiAKIHVuaW9uIGJmaV9scHNfaTJoX21zZ191IHsKQEAgLTQyNyw3ICs0MzcsNyBAQAogc3RydWN0IGJmaV9ycG9ydF9jcmVhdGVfcmVxX3MgewogCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsJCS8qICBjb21tb24gbXNnIGhlYWRlcgkJKi8KIAl1MTYJYmZhX2hhbmRsZTsJLyogIGhvc3QgcnBvcnQgaGFuZGxlCQkqLwotCXUxNgltYXhfZnJtc3o7CS8qICBtYXggcmN2IHBkdSBzaXplCQkqLworCV9fYmUxNgltYXhfZnJtc3o7CS8qICBtYXggcmN2IHBkdSBzaXplCQkqLwogCXUzMglwaWQ6MjQsCS8qICByZW1vdGUgcG9ydCBJRAkJKi8KIAkJbHBfdGFnOjg7CS8qICBsb2NhbCBwb3J0IHRhZwkJKi8KIAl1MzIJbG9jYWxfcGlkOjI0LAkvKiAgbG9jYWwgcG9ydCBJRAkJKi8KQEAgLTU4Myw3ICs1OTMsNyBAQAogICovCiBzdHJ1Y3QgYmZpX2lvaW1fcmVxX3MgewogCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsJCS8qICBDb21tb24gbXNnIGhlYWRlcgkJICovCi0JdTE2CWlvX3RhZzsJCS8qICBJL08gdGFnCQkJICovCisJX19iZTE2CWlvX3RhZzsJCS8qICBJL08gdGFnCQkJICovCiAJdTE2CXJwb3J0X2hkbDsJLyogIGl0bmltL3Jwb3J0IGZpcm13YXJlIGhhbmRsZSAqLwogCXN0cnVjdCBmY3BfY21uZF9zCWNtbmQ7CS8qICBJTyByZXF1ZXN0IGluZm8JKi8KIApAQCAtNjg5LDcgKzY5OSw3IEBACiAgKi8KIHN0cnVjdCBiZmlfaW9pbV9yc3BfcyB7CiAJc3RydWN0IGJmaV9taGRyX3MJbWg7CS8qICBjb21tb24gbXNnIGhlYWRlcgkJKi8KLQl1MTYJaW9fdGFnOwkJLyogIGNvbXBsZXRlZCBJTyB0YWcJCSAqLworCV9fYmUxNglpb190YWc7CQkvKiAgY29tcGxldGVkIElPIHRhZwkJICovCiAJdTE2CWJmYV9ycG9ydF9obmRsOwkvKiAgcmVsZWF0ZWQgcnBvcnQgaGFuZGxlCSAqLwogCXU4CWlvX3N0YXR1czsJLyogIElPIGNvbXBsZXRpb24gc3RhdHVzCSAqLwogCXU4CXJldXNlX2lvX3RhZzsJLyogIElPIHRhZyBjYW4gYmUgcmV1c2VkCSovCkBAIC02OTgsMTMgKzcwOCwxMyBAQAogCXU4CQlzbnNfbGVuOwkvKiAgc2NzaSBzZW5zZSBsZW5ndGgJCSAqLwogCXU4CQlyZXNpZF9mbGFnczsJLyogIElPIHJlc2lkdWUgZmxhZ3MJCSAqLwogCXU4CQlyc3ZkX2E7Ci0JdTMyCXJlc2lkdWU7CS8qICBJTyByZXNpZHVhbCBsZW5ndGggaW4gYnl0ZXMgKi8KKwlfX2JlMzIJcmVzaWR1ZTsJLyogIElPIHJlc2lkdWFsIGxlbmd0aCBpbiBieXRlcyAqLwogCXUzMglyc3ZkX2JbM107CiB9OwogCiBzdHJ1Y3QgYmZpX2lvaW1fYWJvcnRfcmVxX3MgewogCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsJLyogIENvbW1vbiBtc2cgaGVhZGVyICAqLwotCXUxNglpb190YWc7CS8qICBJL08gdGFnCSovCisJX19iZTE2CWlvX3RhZzsJLyogIEkvTyB0YWcJKi8KIAl1MTYJYWJvcnRfdGFnOwkvKiAgdW5pcXVlIHJlcXVlc3QgdGFnICovCiB9OwogCkBAIC03MjMsOSArNzMzLDkgQEAKIAogc3RydWN0IGJmaV90c2tpbV9yZXFfcyB7CiAJc3RydWN0IGJmaV9taGRyX3MgIG1oOwkvKiAgQ29tbW9uIG1zZyBoZWFkZXIJKi8KLQl1MTYJdHNrX3RhZzsJLyogIHRhc2sgbWFuYWdlbWVudCB0YWcJKi8KKwlfX2JlMTYJdHNrX3RhZzsJLyogIHRhc2sgbWFuYWdlbWVudCB0YWcJKi8KIAl1MTYJaXRuX2ZoZGw7CS8qICBpdG4gZmlybXdhcmUgaGFuZGxlCSovCi0JbHVuX3QJbHVuOwkvKiAgTFUgbnVtYmVyCSovCisJc3RydWN0IAlzY3NpX2x1biBsdW47CS8qICBMVSBudW1iZXIJKi8KIAl1OAl0bV9mbGFnczsJLyogIHNlZSBlbnVtIGZjcF90bV9jbW5kCSovCiAJdTgJdF9zZWNzOwkvKiAgVGltZW91dCB2YWx1ZSBpbiBzZWNvbmRzCSovCiAJdTgJcnN2ZFsyXTsKQEAgLTczMyw3ICs3NDMsNyBAQAogCiBzdHJ1Y3QgYmZpX3Rza2ltX2Fib3J0cmVxX3MgewogCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsJLyogIENvbW1vbiBtc2cgaGVhZGVyCSovCi0JdTE2CXRza190YWc7CS8qICB0YXNrIG1hbmFnZW1lbnQgdGFnCSovCisJX19iZTE2CXRza190YWc7CS8qICB0YXNrIG1hbmFnZW1lbnQgdGFnCSovCiAJdTE2CXJzdmQ7CiB9OwogCkBAIC03NTUsNyArNzY1LDcgQEAKIAogc3RydWN0IGJmaV90c2tpbV9yc3BfcyB7CiAJc3RydWN0IGJmaV9taGRyX3MgIG1oOwkJLyogIENvbW1vbiBtc2cgaGVhZGVyCQkgKi8KLQl1MTYJdHNrX3RhZzsJLyogIHRhc2sgbWdtdCBjbW5kIHRhZwkJICovCisJX19iZTE2CXRza190YWc7CS8qICB0YXNrIG1nbXQgY21uZCB0YWcJCSAqLwogCXU4CXRza19zdGF0dXM7CS8qICBAcmVmIGJmaV90c2tpbV9zdGF0dXMgKi8KIAl1OAlyc3ZkOwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9ibngyaS81N3h4X2lzY3NpX2NvbnN0YW50cy5oIGIvZHJpdmVycy9zY3NpL2JueDJpLzU3eHhfaXNjc2lfY29uc3RhbnRzLmgKaW5kZXggMWI2Zjg2Yi4uMzBlNmJkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JueDJpLzU3eHhfaXNjc2lfY29uc3RhbnRzLmgKKysrIGIvZHJpdmVycy9zY3NpL2JueDJpLzU3eHhfaXNjc2lfY29uc3RhbnRzLmgKQEAgLTEsMTIgKzEsMTMgQEAKIC8qIDU3eHhfaXNjc2lfY29uc3RhbnRzLmg6IEJyb2FkY29tIE5ldFh0cmVtZSBJSSBpU0NTSSBIU0kKICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA5IEJyb2FkY29tIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDEwIEJyb2FkY29tIENvcnBvcmF0aW9uCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICoKICAqIFdyaXR0ZW4gYnk6IEFuaWwgVmVlcmFiaGFkcmFwcGEgKGFuaWxndkBicm9hZGNvbS5jb20pCisgKiBNYWludGFpbmVkIGJ5OiBFZGRpZSBXYWkgKGVkZGllLndhaUBicm9hZGNvbS5jb20pCiAgKi8KICNpZm5kZWYgX181N1hYX0lTQ1NJX0NPTlNUQU5UU19IXwogI2RlZmluZSBfXzU3WFhfSVNDU0lfQ09OU1RBTlRTX0hfCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYm54MmkvNTd4eF9pc2NzaV9oc2kuaCBiL2RyaXZlcnMvc2NzaS9ibngyaS81N3h4X2lzY3NpX2hzaS5oCmluZGV4IDM2YWYxYWYuLmRhZDZjOGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9ibngyaS81N3h4X2lzY3NpX2hzaS5oCisrKyBiL2RyaXZlcnMvc2NzaS9ibngyaS81N3h4X2lzY3NpX2hzaS5oCkBAIC0xLDEyICsxLDEzIEBACiAvKiA1N3h4X2lzY3NpX2hzaS5oOiBCcm9hZGNvbSBOZXRYdHJlbWUgSUkgaVNDU0kgSFNJLgogICoKLSAqIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMDkgQnJvYWRjb20gQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMTAgQnJvYWRjb20gQ29ycG9yYXRpb24KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKgogICogV3JpdHRlbiBieTogQW5pbCBWZWVyYWJoYWRyYXBwYSAoYW5pbGd2QGJyb2FkY29tLmNvbSkKKyAqIE1haW50YWluZWQgYnk6IEVkZGllIFdhaSAoZWRkaWUud2FpQGJyb2FkY29tLmNvbSkKICAqLwogI2lmbmRlZiBfXzU3WFhfSVNDU0lfSFNJX0xJTlVYX0xFX18KICNkZWZpbmUgX181N1hYX0lTQ1NJX0hTSV9MSU5VWF9MRV9fCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYm54MmkvYm54MmkuaCBiL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaS5oCmluZGV4IGE0NGIxYjMuLmUxY2E1ZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaS5oCisrKyBiL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaS5oCkBAIC0xLDYgKzEsNiBAQAogLyogYm54MmkuaDogQnJvYWRjb20gTmV0WHRyZW1lIElJIGlTQ1NJIGRyaXZlci4KICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA5IEJyb2FkY29tIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDEwIEJyb2FkY29tIENvcnBvcmF0aW9uCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBNaWtlIENocmlzdGllCiAgKgpAQCAtOSw2ICs5LDcgQEAKICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKgogICogV3JpdHRlbiBieTogQW5pbCBWZWVyYWJoYWRyYXBwYSAoYW5pbGd2QGJyb2FkY29tLmNvbSkKKyAqIE1haW50YWluZWQgYnk6IEVkZGllIFdhaSAoZWRkaWUud2FpQGJyb2FkY29tLmNvbSkKICAqLwogCiAjaWZuZGVmIF9CTlgySV9IXwpAQCAtNjQ5LDYgKzY1MCw3IEBACiAJRVBfU1RBVEVfT0ZMRF9GQUlMRUQgICAgICAgICAgICA9IDB4ODAwMDAwMCwKIAlFUF9TVEFURV9DT05ORUNUX0ZBSUxFRCAgICAgICAgID0gMHgxMDAwMDAwMCwKIAlFUF9TVEFURV9ESVNDT05OX1RJTUVET1VUICAgICAgID0gMHgyMDAwMDAwMCwKKwlFUF9TVEFURV9PRkxEX0ZBSUxFRF9DSURfQlVTWSAgID0gMHg4MDAwMDAwMCwKIH07CiAKIC8qKgpAQCAtNzE3LDE0ICs3MTksMTEgQEAKICAqIEZ1bmN0aW9uIFByb3RvdHlwZXMKICAqLwogZXh0ZXJuIHZvaWQgYm54MmlfaWRlbnRpZnlfZGV2aWNlKHN0cnVjdCBibngyaV9oYmEgKmhiYSk7Ci1leHRlcm4gdm9pZCBibngyaV9yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IGJueDJpX2hiYSAqaGJhKTsKIAogZXh0ZXJuIHZvaWQgYm54MmlfdWxwX2luaXQoc3RydWN0IGNuaWNfZGV2ICpkZXYpOwogZXh0ZXJuIHZvaWQgYm54MmlfdWxwX2V4aXQoc3RydWN0IGNuaWNfZGV2ICpkZXYpOwogZXh0ZXJuIHZvaWQgYm54Mmlfc3RhcnQodm9pZCAqaGFuZGxlKTsKIGV4dGVybiB2b2lkIGJueDJpX3N0b3Aodm9pZCAqaGFuZGxlKTsKLWV4dGVybiB2b2lkIGJueDJpX3JlZ19kZXZfYWxsKHZvaWQpOwotZXh0ZXJuIHZvaWQgYm54MmlfdW5yZWdfZGV2X2FsbCh2b2lkKTsKIGV4dGVybiBzdHJ1Y3QgYm54MmlfaGJhICpnZXRfYWRhcHRlcl9saXN0X2hlYWQodm9pZCk7CiAKIHN0cnVjdCBibngyaV9jb25uICpibngyaV9nZXRfY29ubl9mcm9tX2lkKHN0cnVjdCBibngyaV9oYmEgKmhiYSwKQEAgLTc2MSwxMSArNzYwLDExIEBACiAJCQkJICAgc3RydWN0IGlzY3NpX3Rhc2sgKm10YXNrKTsKIGV4dGVybiB2b2lkIGJueDJpX3NlbmRfY21kX2NsZWFudXBfcmVxKHN0cnVjdCBibngyaV9oYmEgKmhiYSwKIAkJCQkgICAgICAgc3RydWN0IGJueDJpX2NtZCAqY21kKTsKLWV4dGVybiB2b2lkIGJueDJpX3NlbmRfY29ubl9vZmxkX3JlcShzdHJ1Y3QgYm54MmlfaGJhICpoYmEsCi0JCQkJICAgICBzdHJ1Y3QgYm54MmlfZW5kcG9pbnQgKmVwKTsKLWV4dGVybiB2b2lkIGJueDJpX3VwZGF0ZV9pc2NzaV9jb25uKHN0cnVjdCBpc2NzaV9jb25uICpjb25uKTsKLWV4dGVybiB2b2lkIGJueDJpX3NlbmRfY29ubl9kZXN0cm95KHN0cnVjdCBibngyaV9oYmEgKmhiYSwKK2V4dGVybiBpbnQgYm54Mmlfc2VuZF9jb25uX29mbGRfcmVxKHN0cnVjdCBibngyaV9oYmEgKmhiYSwKIAkJCQkgICAgc3RydWN0IGJueDJpX2VuZHBvaW50ICplcCk7CitleHRlcm4gdm9pZCBibngyaV91cGRhdGVfaXNjc2lfY29ubihzdHJ1Y3QgaXNjc2lfY29ubiAqY29ubik7CitleHRlcm4gaW50IGJueDJpX3NlbmRfY29ubl9kZXN0cm95KHN0cnVjdCBibngyaV9oYmEgKmhiYSwKKwkJCQkgICBzdHJ1Y3QgYm54MmlfZW5kcG9pbnQgKmVwKTsKIAogZXh0ZXJuIGludCBibngyaV9hbGxvY19xcF9yZXNjKHN0cnVjdCBibngyaV9oYmEgKmhiYSwKIAkJCSAgICAgICBzdHJ1Y3QgYm54MmlfZW5kcG9pbnQgKmVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaV9od2kuYyBiL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaV9od2kuYwppbmRleCA4ZDlkYmIzLi45NjUwNWUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYm54MmkvYm54MmlfaHdpLmMKKysrIGIvZHJpdmVycy9zY3NpL2JueDJpL2JueDJpX2h3aS5jCkBAIC0xLDYgKzEsNiBAQAogLyogYm54MmlfaHdpLmM6IEJyb2FkY29tIE5ldFh0cmVtZSBJSSBpU0NTSSBkcml2ZXIuCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOSBCcm9hZGNvbSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAxMCBCcm9hZGNvbSBDb3Jwb3JhdGlvbgogICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggTWlrZSBDaHJpc3RpZQogICoKQEAgLTksNiArOSw3IEBACiAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICoKICAqIFdyaXR0ZW4gYnk6IEFuaWwgVmVlcmFiaGFkcmFwcGEgKGFuaWxndkBicm9hZGNvbS5jb20pCisgKiBNYWludGFpbmVkIGJ5OiBFZGRpZSBXYWkgKGVkZGllLndhaUBicm9hZGNvbS5jb20pCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgpAQCAtMzg1LDYgKzM4Niw3IEBACiAJc3RydWN0IGJueDJpX2NtZCAqYm54MmlfY21kOwogCXN0cnVjdCBibngyaV90bWZfcmVxdWVzdCAqdG1mYWJvcnRfd3FlOwogCXUzMiBkd29yZDsKKwl1MzIgc2NzaV9sdW5bMl07CiAKIAlibngyaV9jbWQgPSAoc3RydWN0IGJueDJpX2NtZCAqKW10YXNrLT5kZF9kYXRhOwogCXRtZmFib3J0X2hkciA9IChzdHJ1Y3QgaXNjc2lfdG0gKiltdGFzay0+aGRyOwpAQCAtNDI2LDcgKzQyOCwxMCBAQAogCWRlZmF1bHQ6CiAJCXRtZmFib3J0X3dxZS0+cmVmX2l0dCA9IFJFU0VSVkVEX0lUVDsKIAl9Ci0JbWVtY3B5KHRtZmFib3J0X3dxZS0+bHVuLCB0bWZhYm9ydF9oZHItPmx1biwgc2l6ZW9mKHN0cnVjdCBzY3NpX2x1bikpOworCW1lbWNweShzY3NpX2x1biwgdG1mYWJvcnRfaGRyLT5sdW4sIHNpemVvZihzdHJ1Y3Qgc2NzaV9sdW4pKTsKKwl0bWZhYm9ydF93cWUtPmx1blswXSA9IGJlMzJfdG9fY3B1KHNjc2lfbHVuWzBdKTsKKwl0bWZhYm9ydF93cWUtPmx1blsxXSA9IGJlMzJfdG9fY3B1KHNjc2lfbHVuWzFdKTsKKwogCXRtZmFib3J0X3dxZS0+cmVmX2NtZF9zbiA9IGJlMzJfdG9fY3B1KHRtZmFib3J0X2hkci0+cmVmY21kc24pOwogCiAJdG1mYWJvcnRfd3FlLT5iZF9saXN0X2FkZHJfbG8gPSAodTMyKSBibngyaV9jb25uLT5oYmEtPm1wX2JkX2RtYTsKQEAgLTY5NywxMCArNzAyLDExIEBACiAgKiB0aGlzIHJvdXRpbmUgcHJlcGFyZXMgYW5kIHBvc3RzIENPTk5fT0ZMRF9SRVExLzIgS1dRRSB0byBpbml0aWF0ZQogICogCWlzY3NpIGNvbm5lY3Rpb24gY29udGV4dCBjbGVhbi11cCBwcm9jZXNzCiAgKi8KLXZvaWQgYm54Mmlfc2VuZF9jb25uX2Rlc3Ryb3koc3RydWN0IGJueDJpX2hiYSAqaGJhLCBzdHJ1Y3QgYm54MmlfZW5kcG9pbnQgKmVwKQoraW50IGJueDJpX3NlbmRfY29ubl9kZXN0cm95KHN0cnVjdCBibngyaV9oYmEgKmhiYSwgc3RydWN0IGJueDJpX2VuZHBvaW50ICplcCkKIHsKIAlzdHJ1Y3Qga3dxZSAqa3dxZV9hcnJbMl07CiAJc3RydWN0IGlzY3NpX2t3cWVfY29ubl9kZXN0cm95IGNvbm5fY2xlYW51cDsKKwlpbnQgcmMgPSAtRUlOVkFMOwogCiAJbWVtc2V0KCZjb25uX2NsZWFudXAsIDB4MDAsIHNpemVvZihzdHJ1Y3QgaXNjc2lfa3dxZV9jb25uX2Rlc3Ryb3kpKTsKIApAQCAtNzE3LDcgKzcyMyw5IEBACiAKIAlrd3FlX2FyclswXSA9IChzdHJ1Y3Qga3dxZSAqKSAmY29ubl9jbGVhbnVwOwogCWlmIChoYmEtPmNuaWMgJiYgaGJhLT5jbmljLT5zdWJtaXRfa3dxZXMpCi0JCWhiYS0+Y25pYy0+c3VibWl0X2t3cWVzKGhiYS0+Y25pYywga3dxZV9hcnIsIDEpOworCQlyYyA9IGhiYS0+Y25pYy0+c3VibWl0X2t3cWVzKGhiYS0+Y25pYywga3dxZV9hcnIsIDEpOworCisJcmV0dXJuIHJjOwogfQogCiAKQEAgLTcyOCw4ICs3MzYsOCBAQAogICoKICAqIDU3MDYvNTcwOC81NzA5IHNwZWNpZmljIC0gcHJlcGFyZXMgYW5kIHBvc3RzIENPTk5fT0ZMRF9SRVExLzIgS1dRRQogICovCi1zdGF0aWMgdm9pZCBibngyaV81NzB4X3NlbmRfY29ubl9vZmxkX3JlcShzdHJ1Y3QgYm54MmlfaGJhICpoYmEsCi0JCQkJCSAgc3RydWN0IGJueDJpX2VuZHBvaW50ICplcCkKK3N0YXRpYyBpbnQgYm54MmlfNTcweF9zZW5kX2Nvbm5fb2ZsZF9yZXEoc3RydWN0IGJueDJpX2hiYSAqaGJhLAorCQkJCQkgc3RydWN0IGJueDJpX2VuZHBvaW50ICplcCkKIHsKIAlzdHJ1Y3Qga3dxZSAqa3dxZV9hcnJbMl07CiAJc3RydWN0IGlzY3NpX2t3cWVfY29ubl9vZmZsb2FkMSBvZmxkX3JlcTE7CkBAIC03MzcsNiArNzQ1LDcgQEAKIAlkbWFfYWRkcl90IGRtYV9hZGRyOwogCWludCBudW1fa3dxZXMgPSAyOwogCXUzMiAqcHRibDsKKwlpbnQgcmMgPSAtRUlOVkFMOwogCiAJb2ZsZF9yZXExLmhkci5vcF9jb2RlID0gSVNDU0lfS1dRRV9PUENPREVfT0ZGTE9BRF9DT05OMTsKIAlvZmxkX3JlcTEuaGRyLmZsYWdzID0KQEAgLTc3NCw3ICs3ODMsOSBAQAogCW9mbGRfcmVxMi5udW1fYWRkaXRpb25hbF93cWVzID0gMDsKIAogCWlmIChoYmEtPmNuaWMgJiYgaGJhLT5jbmljLT5zdWJtaXRfa3dxZXMpCi0JCWhiYS0+Y25pYy0+c3VibWl0X2t3cWVzKGhiYS0+Y25pYywga3dxZV9hcnIsIG51bV9rd3Flcyk7CisJCXJjID0gaGJhLT5jbmljLT5zdWJtaXRfa3dxZXMoaGJhLT5jbmljLCBrd3FlX2FyciwgbnVtX2t3cWVzKTsKKworCXJldHVybiByYzsKIH0KIAogCkBAIC03ODUsOCArNzk2LDggQEAKICAqCiAgKiA1NzcxMCBzcGVjaWZpYyAtIHByZXBhcmVzIGFuZCBwb3N0cyBDT05OX09GTERfUkVRMS8yIEtXUUUKICAqLwotc3RhdGljIHZvaWQgYm54MmlfNTc3MXhfc2VuZF9jb25uX29mbGRfcmVxKHN0cnVjdCBibngyaV9oYmEgKmhiYSwKLQkJCQkJICAgc3RydWN0IGJueDJpX2VuZHBvaW50ICplcCkKK3N0YXRpYyBpbnQgYm54MmlfNTc3MXhfc2VuZF9jb25uX29mbGRfcmVxKHN0cnVjdCBibngyaV9oYmEgKmhiYSwKKwkJCQkJICBzdHJ1Y3QgYm54MmlfZW5kcG9pbnQgKmVwKQogewogCXN0cnVjdCBrd3FlICprd3FlX2Fycls1XTsKIAlzdHJ1Y3QgaXNjc2lfa3dxZV9jb25uX29mZmxvYWQxIG9mbGRfcmVxMTsKQEAgLTc5NSw2ICs4MDYsNyBAQAogCWRtYV9hZGRyX3QgZG1hX2FkZHI7CiAJaW50IG51bV9rd3FlcyA9IDI7CiAJdTMyICpwdGJsOworCWludCByYyA9IC1FSU5WQUw7CiAKIAlvZmxkX3JlcTEuaGRyLm9wX2NvZGUgPSBJU0NTSV9LV1FFX09QQ09ERV9PRkZMT0FEX0NPTk4xOwogCW9mbGRfcmVxMS5oZHIuZmxhZ3MgPQpAQCAtODQwLDcgKzg1Miw5IEBACiAJbnVtX2t3cWVzICs9IDE7CiAKIAlpZiAoaGJhLT5jbmljICYmIGhiYS0+Y25pYy0+c3VibWl0X2t3cWVzKQotCQloYmEtPmNuaWMtPnN1Ym1pdF9rd3FlcyhoYmEtPmNuaWMsIGt3cWVfYXJyLCBudW1fa3dxZXMpOworCQlyYyA9IGhiYS0+Y25pYy0+c3VibWl0X2t3cWVzKGhiYS0+Y25pYywga3dxZV9hcnIsIG51bV9rd3Flcyk7CisKKwlyZXR1cm4gcmM7CiB9CiAKIC8qKgpAQCAtODUxLDEyICs4NjUsMTYgQEAKICAqCiAgKiB0aGlzIHJvdXRpbmUgcHJlcGFyZXMgYW5kIHBvc3RzIENPTk5fT0ZMRF9SRVExLzIgS1dRRQogICovCi12b2lkIGJueDJpX3NlbmRfY29ubl9vZmxkX3JlcShzdHJ1Y3QgYm54MmlfaGJhICpoYmEsIHN0cnVjdCBibngyaV9lbmRwb2ludCAqZXApCitpbnQgYm54Mmlfc2VuZF9jb25uX29mbGRfcmVxKHN0cnVjdCBibngyaV9oYmEgKmhiYSwgc3RydWN0IGJueDJpX2VuZHBvaW50ICplcCkKIHsKKwlpbnQgcmM7CisKIAlpZiAodGVzdF9iaXQoQk5YMklfTlgyX0RFVl81NzcxMCwgJmhiYS0+Y25pY19kZXZfdHlwZSkpCi0JCWJueDJpXzU3NzF4X3NlbmRfY29ubl9vZmxkX3JlcShoYmEsIGVwKTsKKwkJcmMgPSBibngyaV81NzcxeF9zZW5kX2Nvbm5fb2ZsZF9yZXEoaGJhLCBlcCk7CiAJZWxzZQotCQlibngyaV81NzB4X3NlbmRfY29ubl9vZmxkX3JlcShoYmEsIGVwKTsKKwkJcmMgPSBibngyaV81NzB4X3NlbmRfY29ubl9vZmxkX3JlcShoYmEsIGVwKTsKKworCXJldHVybiByYzsKIH0KIAogCkBAIC0xNTEzLDcgKzE1MzEsNyBAQAogCXRhc2sgPSBpc2NzaV9pdHRfdG9fdGFzayhjb25uLAogCQkJCSBub3BfaW4tPml0dCAmIElTQ1NJX05PUF9JTl9NU0dfSU5ERVgpOwogCWlmICh0YXNrKQotCQlpc2NzaV9wdXRfdGFzayh0YXNrKTsKKwkJX19pc2NzaV9wdXRfdGFzayh0YXNrKTsKIAlzcGluX3VubG9jaygmc2Vzc2lvbi0+bG9jayk7CiB9CiAKQEAgLTE1NDksMTEgKzE1NjcsOSBAQAogCXN0cnVjdCBpc2NzaV90YXNrICp0YXNrOwogCXN0cnVjdCBibngyaV9ub3BfaW5fbXNnICpub3BfaW47CiAJc3RydWN0IGlzY3NpX25vcGluICpoZHI7Ci0JdTMyIGl0dDsKIAlpbnQgdGd0X2FzeW5jX25vcCA9IDA7CiAKIAlub3BfaW4gPSAoc3RydWN0IGJueDJpX25vcF9pbl9tc2cgKiljcWU7Ci0JaXR0ID0gbm9wX2luLT5pdHQgJiBJU0NTSV9OT1BfSU5fTVNHX0lOREVYOwogCiAJc3Bpbl9sb2NrKCZzZXNzaW9uLT5sb2NrKTsKIAloZHIgPSAoc3RydWN0IGlzY3NpX25vcGluICopJmJueDJpX2Nvbm4tPmdlbl9wZHUucmVzcF9oZHI7CkBAIC0xNTYzLDcgKzE1NzksNyBAQAogCWhkci0+ZXhwX2NtZHNuID0gY3B1X3RvX2JlMzIobm9wX2luLT5leHBfY21kX3NuKTsKIAloZHItPnR0dCA9IGNwdV90b19iZTMyKG5vcF9pbi0+dHR0KTsKIAotCWlmIChpdHQgPT0gKHUxNikgUkVTRVJWRURfSVRUKSB7CisJaWYgKG5vcF9pbi0+aXR0ID09ICh1MTYpIFJFU0VSVkVEX0lUVCkgewogCQlibngyaV91bnNvbF9wZHVfYWRqdXN0X3JxKGJueDJpX2Nvbm4pOwogCQloZHItPml0dCA9IFJFU0VSVkVEX0lUVDsKIAkJdGd0X2FzeW5jX25vcCA9IDE7CkBAIC0xNTcxLDcgKzE1ODcsOCBAQAogCX0KIAogCS8qIHRoaXMgaXMgYSByZXNwb25zZSB0byBvbmUgb2Ygb3VyIG5vcC1vdXRzICovCi0JdGFzayA9IGlzY3NpX2l0dF90b190YXNrKGNvbm4sIGl0dCk7CisJdGFzayA9IGlzY3NpX2l0dF90b190YXNrKGNvbm4sCisJCQkgKGl0dF90KSAobm9wX2luLT5pdHQgJiBJU0NTSV9OT1BfSU5fTVNHX0lOREVYKSk7CiAJaWYgKHRhc2spIHsKIAkJaGRyLT5mbGFncyA9IElTQ1NJX0ZMQUdfQ01EX0ZJTkFMOwogCQloZHItPml0dCA9IHRhc2stPmhkci0+aXR0OwpAQCAtMTcyMSw5ICsxNzM4LDE4IEBACiAJCWlmIChub3Bpbi0+Y3FfcmVxX3NuICE9IHFwLT5jcWVfZXhwX3NlcV9zbikKIAkJCWJyZWFrOwogCi0JCWlmICh1bmxpa2VseSh0ZXN0X2JpdChJU0NTSV9TVVNQRU5EX0JJVCwgJmNvbm4tPnN1c3BlbmRfcngpKSkKKwkJaWYgKHVubGlrZWx5KHRlc3RfYml0KElTQ1NJX1NVU1BFTkRfQklULCAmY29ubi0+c3VzcGVuZF9yeCkpKSB7CisJCQlpZiAobm9waW4tPm9wX2NvZGUgPT0gSVNDU0lfT1BfTk9PUF9JTiAmJgorCQkJICAgIG5vcGluLT5pdHQgPT0gKHUxNikgUkVTRVJWRURfSVRUKSB7CisJCQkJcHJpbnRrKEtFUk5fQUxFUlQgImJueDJpOiBVbnNvbGljaXRlZCAiCisJCQkJCSJOT1AtSW4gZGV0ZWN0ZWQgZm9yIHN1c3BlbmRlZCAiCisJCQkJCSJjb25uZWN0aW9uIGRldj0lcyFcbiIsCisJCQkJCWJueDJpX2Nvbm4tPmhiYS0+bmV0ZGV2LT5uYW1lKTsKKwkJCQlibngyaV91bnNvbF9wZHVfYWRqdXN0X3JxKGJueDJpX2Nvbm4pOworCQkJCWdvdG8gY3FlX291dDsKKwkJCX0KIAkJCWJyZWFrOwotCisJCX0KIAkJdGd0X2FzeW5jX21zZyA9IDA7CiAKIAkJc3dpdGNoIChub3Bpbi0+b3BfY29kZSkgewpAQCAtMTc3MCwxMCArMTc5Niw5IEBACiAJCQlwcmludGsoS0VSTl9BTEVSVCAiYm54Mmk6IHVua25vd24gb3Bjb2RlIDB4JXhcbiIsCiAJCQkJCSAgbm9waW4tPm9wX2NvZGUpOwogCQl9Ci0KIAkJaWYgKCF0Z3RfYXN5bmNfbXNnKQogCQkJYm54MmlfY29ubi0+ZXAtPm51bV9hY3RpdmVfY21kcy0tOwotCitjcWVfb3V0OgogCQkvKiBjbGVhciBvdXQgaW4gcHJvZHVjdGlvbiB2ZXJzaW9uIG9ubHksIHRpbGwgYmV0YSBrZWVwIG9wY29kZQogCQkgKiBmaWVsZCBpbnRhY3QsIHdpbGwgYmUgaGVscGZ1bCBpbiBkZWJ1Z2dpbmcgKGNvbnRleHQgZHVtcCkKIAkJICogbm9waW4tPm9wX2NvZGUgPSAwOwpAQCAtMjE1NCwxMSArMjE3OSwyNCBAQAogCX0KIAogCWlmIChvZmxkX2tjcWUtPmNvbXBsZXRpb25fc3RhdHVzKSB7CisJCWVwLT5zdGF0ZSA9IEVQX1NUQVRFX09GTERfRkFJTEVEOwogCQlpZiAob2ZsZF9rY3FlLT5jb21wbGV0aW9uX3N0YXR1cyA9PQogCQkgICAgSVNDU0lfS0NRRV9DT01QTEVUSU9OX1NUQVRVU19DVFhfQUxMT0NfRkFJTFVSRSkKLQkJCXByaW50ayhLRVJOX0FMRVJUICJibngyaTogdW5hYmxlIHRvIGFsbG9jYXRlIgotCQkJCQkgICIgaVNDU0kgY29udGV4dCByZXNvdXJjZXNcbiIpOwotCQllcC0+c3RhdGUgPSBFUF9TVEFURV9PRkxEX0ZBSUxFRDsKKwkJCXByaW50ayhLRVJOX0FMRVJUICJibngyaSAoJXMpOiBvZmxkMSBjbXBsIC0gdW5hYmxlICIKKwkJCQkidG8gYWxsb2NhdGUgaVNDU0kgY29udGV4dCByZXNvdXJjZXNcbiIsCisJCQkJaGJhLT5uZXRkZXYtPm5hbWUpOworCQllbHNlIGlmIChvZmxkX2tjcWUtPmNvbXBsZXRpb25fc3RhdHVzID09CisJCQkgSVNDU0lfS0NRRV9DT01QTEVUSU9OX1NUQVRVU19JTlZBTElEX09QQ09ERSkKKwkJCXByaW50ayhLRVJOX0FMRVJUICJibngyaSAoJXMpOiBvZmxkMSBjbXBsIC0gaW52YWxpZCAiCisJCQkJIm9wY29kZVxuIiwgaGJhLT5uZXRkZXYtPm5hbWUpOworCQllbHNlIGlmIChvZmxkX2tjcWUtPmNvbXBsZXRpb25fc3RhdHVzID09CisJCQlJU0NTSV9LQ1FFX0NPTVBMRVRJT05fU1RBVFVTX0NJRF9CVVNZKQorCQkJLyogZXJyb3Igc3RhdHVzIGNvZGUgdmFsaWQgb25seSBmb3IgNTc3MXggY2hpcHNldCAqLworCQkJZXAtPnN0YXRlID0gRVBfU1RBVEVfT0ZMRF9GQUlMRURfQ0lEX0JVU1k7CisJCWVsc2UKKwkJCXByaW50ayhLRVJOX0FMRVJUICJibngyaSAoJXMpOiBvZmxkMSBjbXBsIC0gaW52YWxpZCAiCisJCQkJImVycm9yIGNvZGUgJWRcbiIsIGhiYS0+bmV0ZGV2LT5uYW1lLAorCQkJCW9mbGRfa2NxZS0+Y29tcGxldGlvbl9zdGF0dXMpOwogCX0gZWxzZSB7CiAJCWVwLT5zdGF0ZSA9IEVQX1NUQVRFX09GTERfQ09NUEw7CiAJCWNpZF9hZGRyID0gb2ZsZF9rY3FlLT5pc2NzaV9jb25uX2NvbnRleHRfaWQ7CkBAIC0yMzM5LDI2ICsyMzc3LDMyIEBACiBzdGF0aWMgdm9pZCBibngyaV9jbV9yZW1vdGVfYWJvcnQoc3RydWN0IGNuaWNfc29jayAqY21fc2spCiB7CiAJc3RydWN0IGJueDJpX2VuZHBvaW50ICplcCA9IChzdHJ1Y3QgYm54MmlfZW5kcG9pbnQgKikgY21fc2stPmNvbnRleHQ7CisJdTMyIG9sZF9zdGF0ZSA9IGVwLT5zdGF0ZTsKIAogCWVwLT5zdGF0ZSA9IEVQX1NUQVRFX1RDUF9SU1RfUkNWRDsKLQlpZiAoZXAtPmNvbm4pCi0JCWJueDJpX3JlY292ZXJ5X3F1ZV9hZGRfY29ubihlcC0+aGJhLCBlcC0+Y29ubik7CisJaWYgKG9sZF9zdGF0ZSA9PSBFUF9TVEFURV9ESVNDT05OX1NUQVJUKQorCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmVwLT5vZmxkX3dhaXQpOworCWVsc2UKKwkJaWYgKGVwLT5jb25uKQorCQkJYm54MmlfcmVjb3ZlcnlfcXVlX2FkZF9jb25uKGVwLT5oYmEsIGVwLT5jb25uKTsKIH0KIAogCi1zdGF0aWMgdm9pZCBibngyaV9zZW5kX25sX21lc2coc3RydWN0IGNuaWNfZGV2ICpkZXYsIHUzMiBtc2dfdHlwZSwKK3N0YXRpYyBpbnQgYm54Mmlfc2VuZF9ubF9tZXNnKHZvaWQgKmNvbnRleHQsIHUzMiBtc2dfdHlwZSwKIAkJCSAgICAgICBjaGFyICpidWYsIHUxNiBidWZsZW4pCiB7Ci0Jc3RydWN0IGJueDJpX2hiYSAqaGJhOworCXN0cnVjdCBibngyaV9oYmEgKmhiYSA9IGNvbnRleHQ7CisJaW50IHJjOwogCi0JaGJhID0gYm54MmlfZmluZF9oYmFfZm9yX2NuaWMoZGV2KTsKIAlpZiAoIWhiYSkKLQkJcmV0dXJuOworCQlyZXR1cm4gLUVOT0RFVjsKIAotCWlmIChpc2NzaV9vZmZsb2FkX21lc2coaGJhLT5zaG9zdCwgJmJueDJpX2lzY3NpX3RyYW5zcG9ydCwKLQkJCQkgICBtc2dfdHlwZSwgYnVmLCBidWZsZW4pKQorCXJjID0gaXNjc2lfb2ZmbG9hZF9tZXNnKGhiYS0+c2hvc3QsICZibngyaV9pc2NzaV90cmFuc3BvcnQsCisJCQkJbXNnX3R5cGUsIGJ1ZiwgYnVmbGVuKTsKKwlpZiAocmMpCiAJCXByaW50ayhLRVJOX0FMRVJUICJibngyaTogcHJpdmF0ZSBubCBtZXNzYWdlIHNlbmQgZXJyb3JcbiIpOwogCisJcmV0dXJuIHJjOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaV9pbml0LmMgYi9kcml2ZXJzL3Njc2kvYm54MmkvYm54MmlfaW5pdC5jCmluZGV4IDUwYzJhYTNiLi43MmE3YjJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYm54MmkvYm54MmlfaW5pdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaV9pbml0LmMKQEAgLTEsNiArMSw2IEBACiAvKiBibngyaS5jOiBCcm9hZGNvbSBOZXRYdHJlbWUgSUkgaVNDU0kgZHJpdmVyLgogICoKLSAqIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMDkgQnJvYWRjb20gQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMTAgQnJvYWRjb20gQ29ycG9yYXRpb24KICAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBSZWQgSGF0LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IE1pa2UgQ2hyaXN0aWUKICAqCkBAIC05LDYgKzksNyBAQAogICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqCiAgKiBXcml0dGVuIGJ5OiBBbmlsIFZlZXJhYmhhZHJhcHBhIChhbmlsZ3ZAYnJvYWRjb20uY29tKQorICogTWFpbnRhaW5lZCBieTogRWRkaWUgV2FpIChlZGRpZS53YWlAYnJvYWRjb20uY29tKQogICovCiAKICNpbmNsdWRlICJibngyaS5oIgpAQCAtMTcsOCArMTgsOCBAQAogc3RhdGljIHUzMiBhZGFwdGVyX2NvdW50OwogCiAjZGVmaW5lIERSVl9NT0RVTEVfTkFNRQkJImJueDJpIgotI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04JIjIuMS4zIgotI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUJIkF1ZyAxMCwgMjAxMCIKKyNkZWZpbmUgRFJWX01PRFVMRV9WRVJTSU9OCSIyLjYuMi4yIgorI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUJIk5vdiAyMywgMjAxMCIKIAogc3RhdGljIGNoYXIgdmVyc2lvbltdIF9fZGV2aW5pdGRhdGEgPQogCQkiQnJvYWRjb20gTmV0WHRyZW1lIElJIGlTQ1NJIERyaXZlciAiIERSVl9NT0RVTEVfTkFNRSBcCkBAIC02NSw4ICs2Niw2IEBACiAKIHU2NCBpc2NzaV9lcnJvcl9tYXNrID0gMHgwMDsKIAotc3RhdGljIHZvaWQgYm54MmlfdW5yZWdfb25lX2RldmljZShzdHJ1Y3QgYm54MmlfaGJhICpoYmEpIDsKLQogCiAvKioKICAqIGJueDJpX2lkZW50aWZ5X2RldmljZSAtIGlkZW50aWZpZXMgTmV0WHRyZW1lIElJIGRldmljZSB0eXBlCkBAIC0yMTEsMTMgKzIxMCwyNCBAQAogewogCXN0cnVjdCBibngyaV9oYmEgKmhiYSA9IGhhbmRsZTsKIAlpbnQgY29ubnNfYWN0aXZlOworCWludCB3YWl0X2RlbGF5ID0gMSAqIEhaOwogCiAJLyogY2hlY2sgaWYgY2xlYW51cCBoYXBwZW5lZCBpbiBHT0lOR19ET1dOIGNvbnRleHQgKi8KLQlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChBREFQVEVSX1NUQVRFX0dPSU5HX0RPV04sCi0JCQkJJmhiYS0+YWRhcHRlcl9zdGF0ZSkpCisJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KEFEQVBURVJfU1RBVEVfR09JTkdfRE9XTiwKKwkJCSAgICAgICZoYmEtPmFkYXB0ZXJfc3RhdGUpKSB7CiAJCWlzY3NpX2hvc3RfZm9yX2VhY2hfc2Vzc2lvbihoYmEtPnNob3N0LAogCQkJCQkgICAgYm54MmlfZHJvcF9zZXNzaW9uKTsKLQorCQl3YWl0X2RlbGF5ID0gaGJhLT5oYmFfc2h1dGRvd25fdG1vOworCX0KKwkvKiBXYWl0IGZvciBpbmZsaWdodCBvZmZsb2FkIGNvbm5lY3Rpb24gdGFza3MgdG8gY29tcGxldGUgYmVmb3JlCisJICogcHJvY2VlZGluZy4gRm9yY2VmdWxseSB0ZXJtaW5hdGUgYWxsIGNvbm5lY3Rpb24gcmVjb3ZlcnkgaW4KKwkgKiBwcm9ncmVzcyBhdCB0aGUgZWFybGllc3QsIGVpdGhlciBpbiBiaW5kKCksIHNlbmRfcGR1KExPR0lOKSwKKwkgKiBvciBjb25uX3N0YXJ0KCkKKwkgKi8KKwl3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChoYmEtPmVoX3dhaXQsCisJCQkJCSAobGlzdF9lbXB0eSgmaGJhLT5lcF9vZmxkX2xpc3QpICYmCisJCQkJCSBsaXN0X2VtcHR5KCZoYmEtPmVwX2Rlc3Ryb3lfbGlzdCkpLAorCQkJCQkgMTAgKiBIWik7CiAJLyogV2FpdCBmb3IgYWxsIGVuZHBvaW50cyB0byBiZSB0b3JuIGRvd24sIENoaXAgd2lsbCBiZSByZXNldCBvbmNlCiAJICogIGNvbnRyb2wgcmV0dXJucyB0byBuZXR3b3JrIGRyaXZlci4gU28gaXQgaXMgcmVxdWlyZWQgdG8gY2xlYW51cCBhbmQKIAkgKiByZWxlYXNlIGFsbCBjb25uZWN0aW9uIHJlc291cmNlcyBiZWZvcmUgcmV0dXJuaW5nIGZyb20gdGhpcyByb3V0aW5lLgpAQCAtMjI2LDcgKzIzNiw3IEBACiAJCWNvbm5zX2FjdGl2ZSA9IGhiYS0+b2ZsZF9jb25uc19hY3RpdmU7CiAJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KGhiYS0+ZWhfd2FpdCwKIAkJCQkoaGJhLT5vZmxkX2Nvbm5zX2FjdGl2ZSAhPSBjb25uc19hY3RpdmUpLAotCQkJCWhiYS0+aGJhX3NodXRkb3duX3Rtbyk7CisJCQkJd2FpdF9kZWxheSk7CiAJCWlmIChoYmEtPm9mbGRfY29ubnNfYWN0aXZlID09IGNvbm5zX2FjdGl2ZSkKIAkJCWJyZWFrOwogCX0KQEAgLTIzNSw4OCArMjQ1LDEwIEBACiAJLyogVGhpcyBmbGFnIHNob3VsZCBiZSBjbGVhcmVkIGxhc3Qgc28gdGhhdCBlcF9kaXNjb25uZWN0KCkgZ3JhY2VmdWxseQogCSAqIGNsZWFucyB1cCBjb25uZWN0aW9uIGNvbnRleHQKIAkgKi8KKwljbGVhcl9iaXQoQURBUFRFUl9TVEFURV9HT0lOR19ET1dOLCAmaGJhLT5hZGFwdGVyX3N0YXRlKTsKIAljbGVhcl9iaXQoQURBUFRFUl9TVEFURV9VUCwgJmhiYS0+YWRhcHRlcl9zdGF0ZSk7CiB9CiAKLS8qKgotICogYm54MmlfcmVnaXN0ZXJfZGV2aWNlIC0gcmVnaXN0ZXIgYm54MmkgYWRhcHRlciBpbnN0YW5jZSB3aXRoIHRoZSBjbmljIGRyaXZlcgotICogQGhiYToJQWRhcHRlciBpbnN0YW5jZSB0byByZWdpc3RlcgotICoKLSAqIHJlZ2lzdGVycyBibngyaSBhZGFwdGVyIGluc3RhbmNlIHdpdGggdGhlIGNuaWMgZHJpdmVyIHdoaWxlIGhvbGRpbmcgdGhlCi0gKglhZGFwdGVyIHN0cnVjdHVyZSBsb2NrCi0gKi8KLXZvaWQgYm54MmlfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBibngyaV9oYmEgKmhiYSkKLXsKLQlpbnQgcmM7Ci0KLQlpZiAodGVzdF9iaXQoQURBUFRFUl9TVEFURV9HT0lOR19ET1dOLCAmaGJhLT5hZGFwdGVyX3N0YXRlKSB8fAotCSAgICB0ZXN0X2JpdChCTlgySV9DTklDX1JFR0lTVEVSRUQsICZoYmEtPnJlZ193aXRoX2NuaWMpKSB7Ci0JCXJldHVybjsKLQl9Ci0KLQlyYyA9IGhiYS0+Y25pYy0+cmVnaXN0ZXJfZGV2aWNlKGhiYS0+Y25pYywgQ05JQ19VTFBfSVNDU0ksIGhiYSk7Ci0KLQlpZiAoIXJjKQotCQlzZXRfYml0KEJOWDJJX0NOSUNfUkVHSVNURVJFRCwgJmhiYS0+cmVnX3dpdGhfY25pYyk7Ci19Ci0KLQotLyoqCi0gKiBibngyaV9yZWdfZGV2X2FsbCAtIHJlZ2lzdGVycyBhbGwgYWRhcHRlciBpbnN0YW5jZXMgd2l0aCB0aGUgY25pYyBkcml2ZXIKLSAqCi0gKiByZWdpc3RlcnMgYWxsIGJueDJpIGFkYXB0ZXIgaW5zdGFuY2VzIHdpdGggdGhlIGNuaWMgZHJpdmVyIHdoaWxlIGhvbGRpbmcKLSAqCXRoZSBnbG9iYWwgcmVzb3VyY2UgbG9jawotICovCi12b2lkIGJueDJpX3JlZ19kZXZfYWxsKHZvaWQpCi17Ci0Jc3RydWN0IGJueDJpX2hiYSAqaGJhLCAqdGVtcDsKLQotCW11dGV4X2xvY2soJmJueDJpX2Rldl9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaGJhLCB0ZW1wLCAmYWRhcHRlcl9saXN0LCBsaW5rKQotCQlibngyaV9yZWdpc3Rlcl9kZXZpY2UoaGJhKTsKLQltdXRleF91bmxvY2soJmJueDJpX2Rldl9sb2NrKTsKLX0KLQotCi0vKioKLSAqIGJueDJpX3VucmVnX29uZV9kZXZpY2UgLSB1bnJlZ2lzdGVyIGFkYXB0ZXIgaW5zdGFuY2Ugd2l0aCB0aGUgY25pYyBkcml2ZXIKLSAqIEBoYmE6CUFkYXB0ZXIgaW5zdGFuY2UgdG8gdW5yZWdpc3RlcgotICoKLSAqIHJlZ2lzdGVycyBibngyaSBhZGFwdGVyIGluc3RhbmNlIHdpdGggdGhlIGNuaWMgZHJpdmVyIHdoaWxlIGhvbGRpbmcKLSAqCXRoZSBhZGFwdGVyIHN0cnVjdHVyZSBsb2NrCi0gKi8KLXN0YXRpYyB2b2lkIGJueDJpX3VucmVnX29uZV9kZXZpY2Uoc3RydWN0IGJueDJpX2hiYSAqaGJhKQotewotCWlmIChoYmEtPm9mbGRfY29ubnNfYWN0aXZlIHx8Ci0JICAgICF0ZXN0X2JpdChCTlgySV9DTklDX1JFR0lTVEVSRUQsICZoYmEtPnJlZ193aXRoX2NuaWMpIHx8Ci0JICAgIHRlc3RfYml0KEFEQVBURVJfU1RBVEVfR09JTkdfRE9XTiwgJmhiYS0+YWRhcHRlcl9zdGF0ZSkpCi0JCXJldHVybjsKLQotCWhiYS0+Y25pYy0+dW5yZWdpc3Rlcl9kZXZpY2UoaGJhLT5jbmljLCBDTklDX1VMUF9JU0NTSSk7Ci0KLQkvKiBlcF9kaXNjb25uZWN0IGNvdWxkIGNvbWUgYmVmb3JlIE5FVERFVl9ET1dOLCBkcml2ZXIgd29uJ3QKLQkgKiBzZWUgTkVUREVWX0RPV04gYXMgaXQgYWxyZWFkeSB1bnJlZ2lzdGVyZWQgaXRzZWxmLgotCSAqLwotCWhiYS0+YWRhcHRlcl9zdGF0ZSA9IDA7Ci0JY2xlYXJfYml0KEJOWDJJX0NOSUNfUkVHSVNURVJFRCwgJmhiYS0+cmVnX3dpdGhfY25pYyk7Ci19Ci0KLS8qKgotICogYm54MmlfdW5yZWdfZGV2X2FsbCAtIHVucmVnaXN0ZXJzIGFsbCBibngyaSBpbnN0YW5jZXMgd2l0aCB0aGUgY25pYyBkcml2ZXIKLSAqCi0gKiB1bnJlZ2lzdGVycyBhbGwgYm54MmkgYWRhcHRlciBpbnN0YW5jZXMgd2l0aCB0aGUgY25pYyBkcml2ZXIgd2hpbGUgaG9sZGluZwotICoJdGhlIGdsb2JhbCByZXNvdXJjZSBsb2NrCi0gKi8KLXZvaWQgYm54MmlfdW5yZWdfZGV2X2FsbCh2b2lkKQotewotCXN0cnVjdCBibngyaV9oYmEgKmhiYSwgKnRlbXA7Ci0KLQltdXRleF9sb2NrKCZibngyaV9kZXZfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGhiYSwgdGVtcCwgJmFkYXB0ZXJfbGlzdCwgbGluaykKLQkJYm54MmlfdW5yZWdfb25lX2RldmljZShoYmEpOwotCW11dGV4X3VubG9jaygmYm54MmlfZGV2X2xvY2spOwotfQotCiAKIC8qKgogICogYm54MmlfaW5pdF9vbmUgLSBpbml0aWFsaXplIGFuIGFkYXB0ZXIgaW5zdGFuY2UgYW5kIGFsbG9jYXRlIG1lbW9yeSByZXNvdXJjZXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaV9pc2NzaS5jIGIvZHJpdmVycy9zY3NpL2JueDJpL2JueDJpX2lzY3NpLmMKaW5kZXggZmI1MGVmYi4uZjBkY2UyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JueDJpL2JueDJpX2lzY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2JueDJpL2JueDJpX2lzY3NpLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogYm54MmlfaXNjc2kuYzogQnJvYWRjb20gTmV0WHRyZW1lIElJIGlTQ1NJIGRyaXZlci4KICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA5IEJyb2FkY29tIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDEwIEJyb2FkY29tIENvcnBvcmF0aW9uCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBNaWtlIENocmlzdGllCiAgKgpAQCAtMTAsNiArMTAsNyBAQAogICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqCiAgKiBXcml0dGVuIGJ5OiBBbmlsIFZlZXJhYmhhZHJhcHBhIChhbmlsZ3ZAYnJvYWRjb20uY29tKQorICogTWFpbnRhaW5lZCBieTogRWRkaWUgV2FpIChlZGRpZS53YWlAYnJvYWRjb20uY29tKQogICovCiAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CkBAIC00MTEsNyArNDEyLDkgQEAKIAlibngyaV9lcC0+c3RhdGUgPSBFUF9TVEFURV9JRExFOwogCWJueDJpX2VwLT5oYmEtPm9mbGRfY29ubnNfYWN0aXZlLS07CiAKLQlibngyaV9mcmVlX2lzY3NpX2NpZChibngyaV9lcC0+aGJhLCBibngyaV9lcC0+ZXBfaXNjc2lfY2lkKTsKKwlpZiAoYm54MmlfZXAtPmVwX2lzY3NpX2NpZCAhPSAodTE2KSAtMSkKKwkJYm54MmlfZnJlZV9pc2NzaV9jaWQoYm54MmlfZXAtPmhiYSwgYm54MmlfZXAtPmVwX2lzY3NpX2NpZCk7CisKIAlpZiAoYm54MmlfZXAtPmNvbm4pIHsKIAkJYm54MmlfZXAtPmNvbm4tPmVwID0gTlVMTDsKIAkJYm54MmlfZXAtPmNvbm4gPSBOVUxMOwpAQCAtMTM4Myw2ICsxMzg2LDEyIEBACiAJZXAgPSBpc2NzaV9sb29rdXBfZW5kcG9pbnQodHJhbnNwb3J0X2ZkKTsKIAlpZiAoIWVwKQogCQlyZXR1cm4gLUVJTlZBTDsKKwkvKgorCSAqIEZvcmNlZnVsbHkgdGVybWluYXRlIGFsbCBpbiBwcm9ncmVzcyBjb25uZWN0aW9uIHJlY292ZXJ5IGF0IHRoZQorCSAqIGVhcmxpZXN0LCBlaXRoZXIgaW4gYmluZCgpLCBzZW5kX3BkdShMT0dJTiksIG9yIGNvbm5fc3RhcnQoKQorCSAqLworCWlmIChibngyaV9hZGFwdGVyX3JlYWR5KGhiYSkpCisJCXJldHVybiAtRUlPOwogCiAJYm54MmlfZXAgPSBlcC0+ZGRfZGF0YTsKIAlpZiAoKGJueDJpX2VwLT5zdGF0ZSA9PSBFUF9TVEFURV9UQ1BfRklOX1JDVkQpIHx8CkBAIC0xNDA0LDcgKzE0MTMsNiBAQAogCQkJCSAgaGJhLT5uZXRkZXYtPm5hbWUpOwogCQlyZXR1cm4gLUVFWElTVDsKIAl9Ci0KIAlibngyaV9lcC0+Y29ubiA9IGJueDJpX2Nvbm47CiAJYm54MmlfY29ubi0+ZXAgPSBibngyaV9lcDsKIAlibngyaV9jb25uLT5pc2NzaV9jb25uX2NpZCA9IGJueDJpX2VwLT5lcF9pc2NzaV9jaWQ7CkBAIC0xNDYxLDIxICsxNDY5LDI4IEBACiAJc3RydWN0IGJueDJpX2Nvbm4gKmJueDJpX2Nvbm4gPSBjb25uLT5kZF9kYXRhOwogCWludCBsZW4gPSAwOwogCisJaWYgKCEoYm54MmlfY29ubiAmJiBibngyaV9jb25uLT5lcCAmJiBibngyaV9jb25uLT5lcC0+aGJhKSkKKwkJZ290byBvdXQ7CisKIAlzd2l0Y2ggKHBhcmFtKSB7CiAJY2FzZSBJU0NTSV9QQVJBTV9DT05OX1BPUlQ6Ci0JCWlmIChibngyaV9jb25uLT5lcCkKKwkJbXV0ZXhfbG9jaygmYm54MmlfY29ubi0+ZXAtPmhiYS0+bmV0X2Rldl9sb2NrKTsKKwkJaWYgKGJueDJpX2Nvbm4tPmVwLT5jbV9zaykKIAkJCWxlbiA9IHNwcmludGYoYnVmLCAiJWh1XG4iLAogCQkJCSAgICAgIGJueDJpX2Nvbm4tPmVwLT5jbV9zay0+ZHN0X3BvcnQpOworCQltdXRleF91bmxvY2soJmJueDJpX2Nvbm4tPmVwLT5oYmEtPm5ldF9kZXZfbG9jayk7CiAJCWJyZWFrOwogCWNhc2UgSVNDU0lfUEFSQU1fQ09OTl9BRERSRVNTOgotCQlpZiAoYm54MmlfY29ubi0+ZXApCisJCW11dGV4X2xvY2soJmJueDJpX2Nvbm4tPmVwLT5oYmEtPm5ldF9kZXZfbG9jayk7CisJCWlmIChibngyaV9jb25uLT5lcC0+Y21fc2spCiAJCQlsZW4gPSBzcHJpbnRmKGJ1ZiwgIiVwSTRcbiIsCiAJCQkJICAgICAgJmJueDJpX2Nvbm4tPmVwLT5jbV9zay0+ZHN0X2lwKTsKKwkJbXV0ZXhfdW5sb2NrKCZibngyaV9jb25uLT5lcC0+aGJhLT5uZXRfZGV2X2xvY2spOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gaXNjc2lfY29ubl9nZXRfcGFyYW0oY2xzX2Nvbm4sIHBhcmFtLCBidWYpOwogCX0KLQorb3V0OgogCXJldHVybiBsZW47CiB9CiAKQEAgLTE1OTksOCArMTYxNCw2IEBACiAJc3RydWN0IGJueDJpX2hiYSAqaGJhOwogCXN0cnVjdCBjbmljX2RldiAqY25pYyA9IE5VTEw7CiAKLQlibngyaV9yZWdfZGV2X2FsbCgpOwotCiAJaGJhID0gZ2V0X2FkYXB0ZXJfbGlzdF9oZWFkKCk7CiAJaWYgKGhiYSAmJiBoYmEtPmNuaWMpCiAJCWNuaWMgPSBoYmEtPmNuaWMtPmNtX3NlbGVjdF9kZXYoZGVzdGksIENOSUNfVUxQX0lTQ1NJKTsKQEAgLTE2NDAsMTggKzE2NTMsMjYgQEAKIHN0YXRpYyBpbnQgYm54MmlfdGVhcl9kb3duX2Nvbm4oc3RydWN0IGJueDJpX2hiYSAqaGJhLAogCQkJCSBzdHJ1Y3QgYm54MmlfZW5kcG9pbnQgKmVwKQogewotCWlmICh0ZXN0X2JpdChCTlgySV9DTklDX1JFR0lTVEVSRUQsICZoYmEtPnJlZ193aXRoX2NuaWMpKQorCWlmICh0ZXN0X2JpdChCTlgySV9DTklDX1JFR0lTVEVSRUQsICZoYmEtPnJlZ193aXRoX2NuaWMpICYmIGVwLT5jbV9zaykKIAkJaGJhLT5jbmljLT5jbV9kZXN0cm95KGVwLT5jbV9zayk7CiAKLQlpZiAodGVzdF9iaXQoQURBUFRFUl9TVEFURV9HT0lOR19ET1dOLCAmZXAtPmhiYS0+YWRhcHRlcl9zdGF0ZSkpCi0JCWVwLT5zdGF0ZSA9IEVQX1NUQVRFX0RJU0NPTk5fQ09NUEw7Ci0KIAlpZiAodGVzdF9iaXQoQk5YMklfTlgyX0RFVl81NzcxMCwgJmhiYS0+Y25pY19kZXZfdHlwZSkgJiYKIAkgICAgZXAtPnN0YXRlID09IEVQX1NUQVRFX0RJU0NPTk5fVElNRURPVVQpIHsKLQkJcHJpbnRrKEtFUk5fQUxFUlQgImJueDJpIC0gRVJST1IgLSBwbGVhc2Ugc3VibWl0IEdSQyBEdW1wLCIKLQkJCQkgICIgTlcvUENJZSB0cmFjZSwgZHJpdmVyIG1zZ3MgdG8gZGV2ZWxvcGVycyIKLQkJCQkgICIgZm9yIGFuYWx5c2lzXG4iKTsKLQkJcmV0dXJuIDE7CisJCWlmIChlcC0+Y29ubiAmJiBlcC0+Y29ubi0+Y2xzX2Nvbm4gJiYKKwkJICAgIGVwLT5jb25uLT5jbHNfY29ubi0+ZGRfZGF0YSkgeworCQkJc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4gPSBlcC0+Y29ubi0+Y2xzX2Nvbm4tPmRkX2RhdGE7CisKKwkJCS8qIE11c3Qgc3VzcGVuZCBhbGwgcnggcXVldWUgYWN0aXZpdHkgZm9yIHRoaXMgZXAgKi8KKwkJCXNldF9iaXQoSVNDU0lfU1VTUEVORF9CSVQsICZjb25uLT5zdXNwZW5kX3J4KTsKKwkJfQorCQkvKiBDT05OX0RJU0NPTk5FQ1QgdGltZW91dCBtYXkgb3IgbWF5IG5vdCBiZSBhbiBpc3N1ZSBkZXBlbmRpbmcKKwkJICogb24gd2hhdCB0cmFuc2NyaWJlZCBpbiBUQ1AgbGF5ZXIsIGRpZmZlcmVudCB0YXJnZXRzIGJlaGF2ZQorCQkgKiBkaWZmZXJlbnRseQorCQkgKi8KKwkJcHJpbnRrKEtFUk5fQUxFUlQgImJueDJpICglcyk6IC0gV0FSTiAtIENPTk5fRElTQ09OIHRpbWVkIG91dCwgIgorCQkJCSAgInBsZWFzZSBzdWJtaXQgR1JDIER1bXAsIE5XL1BDSWUgdHJhY2UsICIKKwkJCQkgICJkcml2ZXIgbXNncyB0byBkZXZlbG9wZXJzIGZvciBhbmFseXNpc1xuIiwKKwkJCQkgIGhiYS0+bmV0ZGV2LT5uYW1lKTsKIAl9CiAKIAllcC0+c3RhdGUgPSBFUF9TVEFURV9DTEVBTlVQX1NUQVJUOwpAQCAtMTY2NCw3ICsxNjg1LDkgQEAKIAlibngyaV9lcF9kZXN0cm95X2xpc3RfYWRkKGhiYSwgZXApOwogCiAJLyogZGVzdHJveSBpU0NTSSBjb250ZXh0LCB3YWl0IGZvciBpdCB0byBjb21wbGV0ZSAqLwotCWJueDJpX3NlbmRfY29ubl9kZXN0cm95KGhiYSwgZXApOworCWlmIChibngyaV9zZW5kX2Nvbm5fZGVzdHJveShoYmEsIGVwKSkKKwkJZXAtPnN0YXRlID0gRVBfU1RBVEVfQ0xFQU5VUF9DTVBMOworCiAJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGVwLT5vZmxkX3dhaXQsCiAJCQkJIChlcC0+c3RhdGUgIT0gRVBfU1RBVEVfQ0xFQU5VUF9TVEFSVCkpOwogCkBAIC0xNzExLDggKzE3MzQsNiBAQAogCWlmIChzaG9zdCkgewogCQkvKiBkcml2ZXIgaXMgZ2l2ZW4gc2NzaSBob3N0IHRvIHdvcmsgd2l0aCAqLwogCQloYmEgPSBpc2NzaV9ob3N0X3ByaXYoc2hvc3QpOwotCQkvKiBSZWdpc3RlciB0aGUgZGV2aWNlIHdpdGggY25pYyBpZiBub3QgYWxyZWFkeSBkb25lIHNvICovCi0JCWJueDJpX3JlZ2lzdGVyX2RldmljZShoYmEpOwogCX0gZWxzZQogCQkvKgogCQkgKiBjaGVjayBpZiB0aGUgZ2l2ZW4gZGVzdGluYXRpb24gY2FuIGJlIHJlYWNoZWQgdGhyb3VnaApAQCAtMTcyMCwxMyArMTc0MSwxNyBAQAogCQkgKi8KIAkJaGJhID0gYm54MmlfY2hlY2tfcm91dGUoZHN0X2FkZHIpOwogCi0JaWYgKCFoYmEgfHwgdGVzdF9iaXQoQURBUFRFUl9TVEFURV9HT0lOR19ET1dOLCAmaGJhLT5hZGFwdGVyX3N0YXRlKSkgeworCWlmICghaGJhKSB7CiAJCXJjID0gLUVJTlZBTDsKIAkJZ290byBub2hiYTsKIAl9Ci0KLQljbmljID0gaGJhLT5jbmljOwogCW11dGV4X2xvY2soJmhiYS0+bmV0X2Rldl9sb2NrKTsKKworCWlmIChibngyaV9hZGFwdGVyX3JlYWR5KGhiYSkgfHwgIWhiYS0+Y2lkX3F1ZS5jaWRfZnJlZV9jbnQpIHsKKwkJcmMgPSAtRVBFUk07CisJCWdvdG8gY2hlY2tfYnVzeTsKKwl9CisJY25pYyA9IGhiYS0+Y25pYzsKIAllcCA9IGJueDJpX2FsbG9jX2VwKGhiYSk7CiAJaWYgKCFlcCkgewogCQlyYyA9IC1FTk9NRU07CkBAIC0xNzM0LDIzICsxNzU5LDIxIEBACiAJfQogCWJueDJpX2VwID0gZXAtPmRkX2RhdGE7CiAKLQlpZiAoYm54MmlfYWRhcHRlcl9yZWFkeShoYmEpKSB7Ci0JCXJjID0gLUVQRVJNOwotCQlnb3RvIG5ldF9pZl9kb3duOwotCX0KLQogCWJueDJpX2VwLT5udW1fYWN0aXZlX2NtZHMgPSAwOwogCWlzY3NpX2NpZCA9IGJueDJpX2FsbG9jX2lzY3NpX2NpZChoYmEpOwogCWlmIChpc2NzaV9jaWQgPT0gLTEpIHsKLQkJcHJpbnRrKEtFUk5fQUxFUlQgImFsbG9jX2VwOiB1bmFibGUgdG8gYWxsb2NhdGUgaXNjc2kgY2lkXG4iKTsKKwkJcHJpbnRrKEtFUk5fQUxFUlQgImJueDJpICglcyk6IGFsbG9jX2VwIC0gdW5hYmxlIHRvIGFsbG9jYXRlICIKKwkJCSJpc2NzaSBjaWRcbiIsIGhiYS0+bmV0ZGV2LT5uYW1lKTsKIAkJcmMgPSAtRU5PTUVNOwotCQlnb3RvIGlzY3NpX2NpZF9lcnI7CisJCWJueDJpX2ZyZWVfZXAoZXApOworCQlnb3RvIGNoZWNrX2J1c3k7CiAJfQogCWJueDJpX2VwLT5oYmFfYWdlID0gaGJhLT5hZ2U7CiAKIAlyYyA9IGJueDJpX2FsbG9jX3FwX3Jlc2MoaGJhLCBibngyaV9lcCk7CiAJaWYgKHJjICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fQUxFUlQgImJueDJpOiBlcF9jb25uLCBhbGxvYyBRUCByZXNjIGVycm9yXG4iKTsKKwkJcHJpbnRrKEtFUk5fQUxFUlQgImJueDJpICglcyk6IGVwX2Nvbm4gLSBhbGxvYyBRUCByZXNjIGVycm9yIgorCQkJIlxuIiwgaGJhLT5uZXRkZXYtPm5hbWUpOwogCQlyYyA9IC1FTk9NRU07CiAJCWdvdG8gcXBfcmVzY19lcnI7CiAJfQpAQCAtMTc2NSw3ICsxNzg4LDE4IEBACiAJYm54MmlfZXAtPm9mbGRfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBibngyaV9lcDsKIAlhZGRfdGltZXIoJmJueDJpX2VwLT5vZmxkX3RpbWVyKTsKIAotCWJueDJpX3NlbmRfY29ubl9vZmxkX3JlcShoYmEsIGJueDJpX2VwKTsKKwlpZiAoYm54Mmlfc2VuZF9jb25uX29mbGRfcmVxKGhiYSwgYm54MmlfZXApKSB7CisJCWlmIChibngyaV9lcC0+c3RhdGUgPT0gRVBfU1RBVEVfT0ZMRF9GQUlMRURfQ0lEX0JVU1kpIHsKKwkJCXByaW50ayhLRVJOX0FMRVJUICJibngyaSAoJXMpOiBpc2NzaSBjaWQgJWQgaXMgYnVzeVxuIiwKKwkJCQloYmEtPm5ldGRldi0+bmFtZSwgYm54MmlfZXAtPmVwX2lzY3NpX2NpZCk7CisJCQlyYyA9IC1FQlVTWTsKKwkJfSBlbHNlCisJCQlyYyA9IC1FTk9TUEM7CisJCXByaW50ayhLRVJOX0FMRVJUICJibngyaSAoJXMpOiB1bmFibGUgdG8gc2VuZCBjb25uIG9mZmxkIGt3cWUiCisJCQkiXG4iLCBoYmEtPm5ldGRldi0+bmFtZSk7CisJCWJueDJpX2VwX29mbGRfbGlzdF9kZWwoaGJhLCBibngyaV9lcCk7CisJCWdvdG8gY29ubl9mYWlsZWQ7CisJfQogCiAJLyogV2FpdCBmb3IgQ05JQyBoYXJkd2FyZSB0byBzZXR1cCBjb25uIGNvbnRleHQgYW5kIHJldHVybiAnY2lkJyAqLwogCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShibngyaV9lcC0+b2ZsZF93YWl0LApAQCAtMTc3OCw3ICsxODEyLDEyIEBACiAJYm54MmlfZXBfb2ZsZF9saXN0X2RlbChoYmEsIGJueDJpX2VwKTsKIAogCWlmIChibngyaV9lcC0+c3RhdGUgIT0gRVBfU1RBVEVfT0ZMRF9DT01QTCkgewotCQlyYyA9IC1FTk9TUEM7CisJCWlmIChibngyaV9lcC0+c3RhdGUgPT0gRVBfU1RBVEVfT0ZMRF9GQUlMRURfQ0lEX0JVU1kpIHsKKwkJCXByaW50ayhLRVJOX0FMRVJUICJibngyaSAoJXMpOiBpc2NzaSBjaWQgJWQgaXMgYnVzeVxuIiwKKwkJCQloYmEtPm5ldGRldi0+bmFtZSwgYm54MmlfZXAtPmVwX2lzY3NpX2NpZCk7CisJCQlyYyA9IC1FQlVTWTsKKwkJfSBlbHNlCisJCQlyYyA9IC1FTk9TUEM7CiAJCWdvdG8gY29ubl9mYWlsZWQ7CiAJfQogCkBAIC0xNzg2LDcgKzE4MjUsOCBAQAogCQkJICAgICBpc2NzaV9jaWQsICZibngyaV9lcC0+Y21fc2ssIGJueDJpX2VwKTsKIAlpZiAocmMpIHsKIAkJcmMgPSAtRUlOVkFMOwotCQlnb3RvIGNvbm5fZmFpbGVkOworCQkvKiBOZWVkIHRvIHRlcm1pbmF0ZSBhbmQgY2xlYW51cCB0aGUgY29ubmVjdGlvbiAqLworCQlnb3RvIHJlbGVhc2VfZXA7CiAJfQogCiAJYm54MmlfZXAtPmNtX3NrLT5yY3ZfYnVmID0gMjU2ICogMTAyNDsKQEAgLTE4MzAsMTUgKzE4NzAsMTIgQEAKIAkJcmV0dXJuIEVSUl9QVFIocmMpOwogCX0KIGNvbm5fZmFpbGVkOgotbmV0X2lmX2Rvd246Ci1pc2NzaV9jaWRfZXJyOgogCWJueDJpX2ZyZWVfcXBfcmVzYyhoYmEsIGJueDJpX2VwKTsKIHFwX3Jlc2NfZXJyOgogCWJueDJpX2ZyZWVfZXAoZXApOwogY2hlY2tfYnVzeToKIAltdXRleF91bmxvY2soJmhiYS0+bmV0X2Rldl9sb2NrKTsKIG5vaGJhOgotCWJueDJpX3VucmVnX2Rldl9hbGwoKTsKIAlyZXR1cm4gRVJSX1BUUihyYyk7CiB9CiAKQEAgLTE4OTgsMTIgKzE5MzUsMTMgQEAKIAkJY25pY19kZXZfMTBnID0gMTsKIAogCXN3aXRjaCAoYm54MmlfZXAtPnN0YXRlKSB7Ci0JY2FzZSBFUF9TVEFURV9DT05ORUNUX1NUQVJUOgorCWNhc2UgRVBfU1RBVEVfQ09OTkVDVF9GQUlMRUQ6CiAJY2FzZSBFUF9TVEFURV9DTEVBTlVQX0ZBSUxFRDoKIAljYXNlIEVQX1NUQVRFX09GTERfRkFJTEVEOgogCWNhc2UgRVBfU1RBVEVfRElTQ09OTl9USU1FRE9VVDoKIAkJcmV0ID0gMDsKIAkJYnJlYWs7CisJY2FzZSBFUF9TVEFURV9DT05ORUNUX1NUQVJUOgogCWNhc2UgRVBfU1RBVEVfQ09OTkVDVF9DT01QTDoKIAljYXNlIEVQX1NUQVRFX1VMUF9VUERBVEVfU1RBUlQ6CiAJY2FzZSBFUF9TVEFURV9VTFBfVVBEQVRFX0NPTVBMOgpAQCAtMTkxNCwxMyArMTk1MiwxMCBAQAogCQlyZXQgPSAxOwogCQlicmVhazsKIAljYXNlIEVQX1NUQVRFX1RDUF9SU1RfUkNWRDoKLQkJcmV0ID0gMDsKLQkJYnJlYWs7Ci0JY2FzZSBFUF9TVEFURV9DT05ORUNUX0ZBSUxFRDoKIAkJaWYgKGNuaWNfZGV2XzEwZykKLQkJCXJldCA9IDE7Ci0JCWVsc2UKIAkJCXJldCA9IDA7CisJCWVsc2UKKwkJCXJldCA9IDE7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldCA9IDA7CkBAIC0xOTUzLDcgKzE5ODgsOCBAQAogCWlmICghY25pYykKIAkJcmV0dXJuIDA7CiAKLQlpZiAoYm54MmlfZXAtPnN0YXRlID09IEVQX1NUQVRFX0lETEUpCisJaWYgKGJueDJpX2VwLT5zdGF0ZSA9PSBFUF9TVEFURV9JRExFIHx8CisJICAgIGJueDJpX2VwLT5zdGF0ZSA9PSBFUF9TVEFURV9ESVNDT05OX1RJTUVET1VUKQogCQlyZXR1cm4gMDsKIAogCWlmICghYm54MmlfZXBfdGNwX2Nvbm5fYWN0aXZlKGJueDJpX2VwKSkKQEAgLTE5NzksOSArMjAxNSwxMCBAQAogCQkJaWYgKHNlc3Npb24tPnN0YXRlID09IElTQ1NJX1NUQVRFX0xPR0dJTkdfT1VUKSB7CiAJCQkJaWYgKGJueDJpX2VwLT5zdGF0ZSA9PSBFUF9TVEFURV9MT0dPVVRfU0VOVCkgewogCQkJCQkvKiBMb2dvdXQgc2VudCwgYnV0IG5vIHJlc3AgKi8KLQkJCQkJcHJpbnRrKEtFUk5fQUxFUlQgImJueDJpIC0gV0FSTklORyAiCi0JCQkJCQkibG9nb3V0IHJlc3BvbnNlIHdhcyBub3QgIgotCQkJCQkJInJlY2VpdmVkIVxuIik7CisJCQkJCXByaW50ayhLRVJOX0FMRVJUICJibngyaSAoJXMpOiBXQVJOSU5HIgorCQkJCQkJIiBsb2dvdXQgcmVzcG9uc2Ugd2FzIG5vdCAiCisJCQkJCQkicmVjZWl2ZWQhXG4iLAorCQkJCQkJYm54MmlfZXAtPmhiYS0+bmV0ZGV2LT5uYW1lKTsKIAkJCQl9IGVsc2UgaWYgKGJueDJpX2VwLT5zdGF0ZSA9PQogCQkJCQkgICBFUF9TVEFURV9MT0dPVVRfUkVTUF9SQ1ZEKQogCQkJCQljbG9zZSA9IDE7CkBAIC0xOTk5LDkgKzIwMzYsOCBAQAogCWVsc2UKIAkJY2xvc2VfcmV0ID0gY25pYy0+Y21fYWJvcnQoYm54MmlfZXAtPmNtX3NrKTsKIAotCS8qIE5vIGxvbmdlciBhbGxvdyBDRkMgZGVsZXRlIGlmIGNtX2Nsb3NlL2Fib3J0IGZhaWxzIHRoZSByZXF1ZXN0ICovCiAJaWYgKGNsb3NlX3JldCkKLQkJcHJpbnRrKEtFUk5fQUxFUlQgImJueDJpOiAlcyBjbG9zZS9hYm9ydCglZCkgcmV0dXJuZWQgJWRcbiIsCisJCXByaW50ayhLRVJOX0FMRVJUICJibngyaSAoJXMpOiBjbG9zZS9hYm9ydCglZCkgcmV0dXJuZWQgJWRcbiIsCiAJCQlibngyaV9lcC0+aGJhLT5uZXRkZXYtPm5hbWUsIGNsb3NlLCBjbG9zZV9yZXQpOwogCWVsc2UKIAkJLyogd2FpdCBmb3Igb3B0aW9uLTIgY29ubiB0ZWFyZG93biAqLwpAQCAtMjAxNSw3ICsyMDUxLDcgQEAKIGRlc3Ryb3lfY29ubjoKIAlibngyaV9lcF9hY3RpdmVfbGlzdF9kZWwoaGJhLCBibngyaV9lcCk7CiAJaWYgKGJueDJpX3RlYXJfZG93bl9jb25uKGhiYSwgYm54MmlfZXApKQotCQlyZXQgPSAtRUlOVkFMOworCQlyZXR1cm4gLUVJTlZBTDsKIG91dDoKIAlibngyaV9lcC0+c3RhdGUgPSBFUF9TVEFURV9JRExFOwogCXJldHVybiByZXQ7CkBAIC0yMDU0LDE0ICsyMDkwLDE3IEBACiAKIAltdXRleF9sb2NrKCZoYmEtPm5ldF9kZXZfbG9jayk7CiAKKwlpZiAoYm54MmlfZXAtPnN0YXRlID09IEVQX1NUQVRFX0RJU0NPTk5fVElNRURPVVQpCisJCWdvdG8gb3V0OworCiAJaWYgKGJueDJpX2VwLT5zdGF0ZSA9PSBFUF9TVEFURV9JRExFKQotCQlnb3RvIHJldHVybl9ibngyaV9lcDsKLQotCWlmICghdGVzdF9iaXQoQURBUFRFUl9TVEFURV9VUCwgJmhiYS0+YWRhcHRlcl9zdGF0ZSkpCiAJCWdvdG8gZnJlZV9yZXNjOwogCi0JaWYgKGJueDJpX2VwLT5oYmFfYWdlICE9IGhiYS0+YWdlKQorCWlmICghdGVzdF9iaXQoQURBUFRFUl9TVEFURV9VUCwgJmhiYS0+YWRhcHRlcl9zdGF0ZSkgfHwKKwkgICAgKGJueDJpX2VwLT5oYmFfYWdlICE9IGhiYS0+YWdlKSkgeworCQlibngyaV9lcF9hY3RpdmVfbGlzdF9kZWwoaGJhLCBibngyaV9lcCk7CiAJCWdvdG8gZnJlZV9yZXNjOworCX0KIAogCS8qIERvIGFsbCBjaGlwIGNsZWFudXAgaGVyZSAqLwogCWlmIChibngyaV9od19lcF9kaXNjb25uZWN0KGJueDJpX2VwKSkgewpAQCAtMjA3MCwxNCArMjEwOSwxMyBAQAogCX0KIGZyZWVfcmVzYzoKIAlibngyaV9mcmVlX3FwX3Jlc2MoaGJhLCBibngyaV9lcCk7Ci1yZXR1cm5fYm54MmlfZXA6CisKIAlpZiAoYm54MmlfY29ubikKIAkJYm54MmlfY29ubi0+ZXAgPSBOVUxMOwogCiAJYm54MmlfZnJlZV9lcChlcCk7CitvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZoYmEtPm5ldF9kZXZfbG9jayk7Ci0JaWYgKCFoYmEtPm9mbGRfY29ubnNfYWN0aXZlKQotCQlibngyaV91bnJlZ19kZXZfYWxsKCk7CiAKIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJmhiYS0+ZWhfd2FpdCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYm54MmkvYm54Mmlfc3lzZnMuYyBiL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaV9zeXNmcy5jCmluZGV4IDk2NDI2YjcuLjkxNzQxOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaV9zeXNmcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaV9zeXNmcy5jCkBAIC0xLDEyICsxLDEzIEBACiAvKiBibngyaV9zeXNmcy5jOiBCcm9hZGNvbSBOZXRYdHJlbWUgSUkgaVNDU0kgZHJpdmVyLgogICoKLSAqIENvcHlyaWdodCAoYykgMjAwNCAtIDIwMDkgQnJvYWRjb20gQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgMjAwNCAtIDIwMTAgQnJvYWRjb20gQ29ycG9yYXRpb24KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKgogICogV3JpdHRlbiBieTogQW5pbCBWZWVyYWJoYWRyYXBwYSAoYW5pbGd2QGJyb2FkY29tLmNvbSkKKyAqIE1haW50YWluZWQgYnk6IEVkZGllIFdhaSAoZWRkaWUud2FpQGJyb2FkY29tLmNvbSkKICAqLwogCiAjaW5jbHVkZSAiYm54MmkuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9jeGdiaS9saWJjeGdiaS5jIGIvZHJpdmVycy9zY3NpL2N4Z2JpL2xpYmN4Z2JpLmMKaW5kZXggYmU1NjYxNy4uZDJhZDNkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2N4Z2JpL2xpYmN4Z2JpLmMKKysrIGIvZHJpdmVycy9zY3NpL2N4Z2JpL2xpYmN4Z2JpLmMKQEAgLTgyNSw3ICs4MjUsNyBAQAogCXVuc2lnbmVkIGludCBpZHg7CiAJc3RydWN0IGRzdF9lbnRyeSAqZHN0ID0gY3NrLT5kc3Q7CiAKLQljc2stPmFkdm1zcyA9IGRzdF9tZXRyaWMoZHN0LCBSVEFYX0FEVk1TUyk7CisJY3NrLT5hZHZtc3MgPSBkc3RfbWV0cmljX2Fkdm1zcyhkc3QpOwogCiAJaWYgKGNzay0+YWR2bXNzID4gcG10dSAtIDQwKQogCQljc2stPmFkdm1zcyA9IHBtdHUgLSA0MDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoLmMgYi9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaC5jCmluZGV4IDZmYWUzZDIuLmI4MzdjNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoLmMKKysrIGIvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGguYwpAQCAtNDQyLDEyICs0NDIsMTkgQEAKIAlzZGV2ID0gcS0+cXVldWVkYXRhOwogCWlmIChzZGV2ICYmIHNkZXYtPnNjc2lfZGhfZGF0YSkKIAkJc2NzaV9kaCA9IHNkZXYtPnNjc2lfZGhfZGF0YS0+c2NzaV9kaDsKLQlpZiAoIXNjc2lfZGggfHwgIWdldF9kZXZpY2UoJnNkZXYtPnNkZXZfZ2VuZGV2KSkKKwlpZiAoIXNjc2lfZGggfHwgIWdldF9kZXZpY2UoJnNkZXYtPnNkZXZfZ2VuZGV2KSB8fAorCSAgICBzZGV2LT5zZGV2X3N0YXRlID09IFNERVZfQ0FOQ0VMIHx8CisJICAgIHNkZXYtPnNkZXZfc3RhdGUgPT0gU0RFVl9ERUwpCiAJCWVyciA9IFNDU0lfREhfTk9TWVM7CisJaWYgKHNkZXYtPnNkZXZfc3RhdGUgPT0gU0RFVl9PRkZMSU5FKQorCQllcnIgPSBTQ1NJX0RIX0RFVl9PRkZMSU5FRDsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKHEtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKIAotCWlmIChlcnIpCisJaWYgKGVycikgeworCQlpZiAoZm4pCisJCQlmbihkYXRhLCBlcnIpOwogCQlyZXR1cm4gZXJyOworCX0KIAogCWlmIChzY3NpX2RoLT5hY3RpdmF0ZSkKIAkJZXJyID0gc2NzaV9kaC0+YWN0aXZhdGUoc2RldiwgZm4sIGRhdGEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2Zjb2UvZmNvZS5jIGIvZHJpdmVycy9zY3NpL2Zjb2UvZmNvZS5jCmluZGV4IGQyM2E1MzguLjlmOTYwMGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9mY29lL2Zjb2UuYworKysgYi9kcml2ZXJzL3Njc2kvZmNvZS9mY29lLmMKQEAgLTg1NCw3ICs4NTQsNiBAQAogCiAJLyogQ2xlYW51cCB0aGUgZmNfbHBvcnQgKi8KIAlmY19scG9ydF9kZXN0cm95KGxwb3J0KTsKLQlmY19mY3BfZGVzdHJveShscG9ydCk7CiAKIAkvKiBTdG9wIHRoZSB0cmFuc21pdCByZXRyeSB0aW1lciAqLwogCWRlbF90aW1lcl9zeW5jKCZwb3J0LT50aW1lcik7CkBAIC04NzYsNiArODc1LDkgQEAKIAlmY19yZW1vdmVfaG9zdChscG9ydC0+aG9zdCk7CiAJc2NzaV9yZW1vdmVfaG9zdChscG9ydC0+aG9zdCk7CiAKKwkvKiBEZXN0cm95IGxwb3J0IHNjc2lfcHJpdiAqLworCWZjX2ZjcF9kZXN0cm95KGxwb3J0KTsKKwogCS8qIFRoZXJlIGFyZSBubyBtb3JlIHJwb3J0cyBvciBJL08sIGZyZWUgdGhlIEVNICovCiAJZmNfZXhjaF9tZ3JfZnJlZShscG9ydCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9mY29lL2xpYmZjb2UuYyBiL2RyaXZlcnMvc2NzaS9mY29lL2xpYmZjb2UuYwppbmRleCBiYzE3YzcxLi42MjVjNmJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZmNvZS9saWJmY29lLmMKKysrIGIvZHJpdmVycy9zY3NpL2Zjb2UvbGliZmNvZS5jCkBAIC01NCw2ICs1NCw3IEBACiBzdGF0aWMgdm9pZCBmY29lX2N0bHJfdGltZW91dCh1bnNpZ25lZCBsb25nKTsKIHN0YXRpYyB2b2lkIGZjb2VfY3Rscl90aW1lcl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqKTsKIHN0YXRpYyB2b2lkIGZjb2VfY3Rscl9yZWN2X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICopOworc3RhdGljIGludCBmY29lX2N0bHJfZmxvZ2lfcmV0cnkoc3RydWN0IGZjb2VfY3RsciAqKTsKIAogc3RhdGljIHZvaWQgZmNvZV9jdGxyX3ZuX3N0YXJ0KHN0cnVjdCBmY29lX2N0bHIgKik7CiBzdGF0aWMgaW50IGZjb2VfY3Rscl92bl9yZWN2KHN0cnVjdCBmY29lX2N0bHIgKiwgc3RydWN0IHNrX2J1ZmYgKik7CkBAIC0xNzYsNiArMTc3LDcgQEAKIAlmaXAtPm1vZGUgPSBtb2RlOwogCUlOSVRfTElTVF9IRUFEKCZmaXAtPmZjZnMpOwogCW11dGV4X2luaXQoJmZpcC0+Y3Rscl9tdXRleCk7CisJc3Bpbl9sb2NrX2luaXQoJmZpcC0+Y3Rscl9sb2NrKTsKIAlmaXAtPmZsb2dpX294aWQgPSBGQ19YSURfVU5LTk9XTjsKIAlzZXR1cF90aW1lcigmZmlwLT50aW1lciwgZmNvZV9jdGxyX3RpbWVvdXQsICh1bnNpZ25lZCBsb25nKWZpcCk7CiAJSU5JVF9XT1JLKCZmaXAtPnRpbWVyX3dvcmssIGZjb2VfY3Rscl90aW1lcl93b3JrKTsKQEAgLTIzMSw2ICsyMzMsNDkgQEAKIEVYUE9SVF9TWU1CT0woZmNvZV9jdGxyX2Rlc3Ryb3kpOwogCiAvKioKKyAqIGZjb2VfY3Rscl9hbm5vdW5jZSgpIC0gYW5ub3VuY2UgbmV3IEZDRiBzZWxlY3Rpb24KKyAqIEBmaXA6IFRoZSBGQ29FIGNvbnRyb2xsZXIKKyAqCisgKiBBbHNvIHNldHMgdGhlIGRlc3RpbmF0aW9uIE1BQyBmb3IgRkNvRSBhbmQgY29udHJvbCBwYWNrZXRzCisgKgorICogQ2FsbGVkIHdpdGggbmVpdGhlciBjdGxyX211dGV4IG5vciBjdGxyX2xvY2sgaGVsZC4KKyAqLworc3RhdGljIHZvaWQgZmNvZV9jdGxyX2Fubm91bmNlKHN0cnVjdCBmY29lX2N0bHIgKmZpcCkKK3sKKwlzdHJ1Y3QgZmNvZV9mY2YgKnNlbDsKKwlzdHJ1Y3QgZmNvZV9mY2YgKmZjZjsKKworCW11dGV4X2xvY2soJmZpcC0+Y3Rscl9tdXRleCk7CisJc3Bpbl9sb2NrX2JoKCZmaXAtPmN0bHJfbG9jayk7CisKKwlrZnJlZV9za2IoZmlwLT5mbG9naV9yZXEpOworCWZpcC0+ZmxvZ2lfcmVxID0gTlVMTDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGZjZiwgJmZpcC0+ZmNmcywgbGlzdCkKKwkJZmNmLT5mbG9naV9zZW50ID0gMDsKKworCXNwaW5fdW5sb2NrX2JoKCZmaXAtPmN0bHJfbG9jayk7CisJc2VsID0gZmlwLT5zZWxfZmNmOworCisJaWYgKHNlbCAmJiAhY29tcGFyZV9ldGhlcl9hZGRyKHNlbC0+ZmNmX21hYywgZmlwLT5kZXN0X2FkZHIpKQorCQlnb3RvIHVubG9jazsKKwlpZiAoIWlzX3plcm9fZXRoZXJfYWRkcihmaXAtPmRlc3RfYWRkcikpIHsKKwkJcHJpbnRrKEtFUk5fTk9USUNFICJsaWJmY29lOiBob3N0JWQ6ICIKKwkJICAgICAgICJGSVAgRmlicmUtQ2hhbm5lbCBGb3J3YXJkZXIgTUFDICVwTSBkZXNlbGVjdGVkXG4iLAorCQkgICAgICAgZmlwLT5scC0+aG9zdC0+aG9zdF9ubywgZmlwLT5kZXN0X2FkZHIpOworCQltZW1zZXQoZmlwLT5kZXN0X2FkZHIsIDAsIEVUSF9BTEVOKTsKKwl9CisJaWYgKHNlbCkgeworCQlwcmludGsoS0VSTl9JTkZPICJsaWJmY29lOiBob3N0JWQ6IEZJUCBzZWxlY3RlZCAiCisJCSAgICAgICAiRmlicmUtQ2hhbm5lbCBGb3J3YXJkZXIgTUFDICVwTVxuIiwKKwkJICAgICAgIGZpcC0+bHAtPmhvc3QtPmhvc3Rfbm8sIHNlbC0+ZmNmX21hYyk7CisJCW1lbWNweShmaXAtPmRlc3RfYWRkciwgc2VsLT5mY2ZfbWFjLCBFVEhfQUxFTik7CisJCWZpcC0+bWFwX2Rlc3QgPSAwOworCX0KK3VubG9jazoKKwltdXRleF91bmxvY2soJmZpcC0+Y3Rscl9tdXRleCk7Cit9CisKKy8qKgogICogZmNvZV9jdGxyX2Zjb2Vfc2l6ZSgpIC0gUmV0dXJuIHRoZSBtYXhpbXVtIEZDb0Ugc2l6ZSByZXF1aXJlZCBmb3IgVk5fUG9ydAogICogQGZpcDogVGhlIEZDb0UgY29udHJvbGxlciB0byBnZXQgdGhlIG1heGltdW0gRkNvRSBzaXplIGZyb20KICAqCkBAIC01NjQsNiArNjA5LDkgQEAKICAqIFRoZSBjYWxsZXIgbXVzdCBjaGVjayB0aGF0IHRoZSBsZW5ndGggaXMgYSBtdWx0aXBsZSBvZiA0LgogICogVGhlIFNLQiBtdXN0IGhhdmUgZW5vdWdoIGhlYWRyb29tICgyOCBieXRlcykgYW5kIHRhaWxyb29tICg4IGJ5dGVzKS4KICAqIFRoZSB0aGUgc2tiIG11c3QgYWxzbyBiZSBhbiBmY19mcmFtZS4KKyAqCisgKiBUaGlzIGlzIGNhbGxlZCBmcm9tIHRoZSBsb3dlci1sZXZlbCBkcml2ZXIgd2l0aCBzcGlubG9ja3MgaGVsZCwKKyAqIHNvIHdlIG11c3Qgbm90IHRha2UgYSBtdXRleCBoZXJlLgogICovCiBpbnQgZmNvZV9jdGxyX2Vsc19zZW5kKHN0cnVjdCBmY29lX2N0bHIgKmZpcCwgc3RydWN0IGZjX2xwb3J0ICpscG9ydCwKIAkJICAgICAgIHN0cnVjdCBza19idWZmICpza2IpCkBAIC02MDEsNyArNjQ5LDE1IEBACiAJc3dpdGNoIChvcCkgewogCWNhc2UgRUxTX0ZMT0dJOgogCQlvcCA9IEZJUF9EVF9GTE9HSTsKLQkJYnJlYWs7CisJCWlmIChmaXAtPm1vZGUgPT0gRklQX01PREVfVk4yVk4pCisJCQlicmVhazsKKwkJc3Bpbl9sb2NrX2JoKCZmaXAtPmN0bHJfbG9jayk7CisJCWtmcmVlX3NrYihmaXAtPmZsb2dpX3JlcSk7CisJCWZpcC0+ZmxvZ2lfcmVxID0gc2tiOworCQlmaXAtPmZsb2dpX3JlcV9zZW5kID0gMTsKKwkJc3Bpbl91bmxvY2tfYmgoJmZpcC0+Y3Rscl9sb2NrKTsKKwkJc2NoZWR1bGVfd29yaygmZmlwLT50aW1lcl93b3JrKTsKKwkJcmV0dXJuIC1FSU5QUk9HUkVTUzsKIAljYXNlIEVMU19GRElTQzoKIAkJaWYgKG50b2gyNChmaC0+Zmhfc19pZCkpCiAJCQlyZXR1cm4gMDsKQEAgLTkyMiwxMSArOTc4LDkgQEAKIAl9CiAJbXR1X3ZhbGlkID0gZmNvZV9jdGxyX210dV92YWxpZChmY2YpOwogCWZjZi0+dGltZSA9IGppZmZpZXM7Ci0JaWYgKCFmb3VuZCkgewotCQlMSUJGQ09FX0ZJUF9EQkcoZmlwLCAiTmV3IEZDRiBmb3IgZmFiICUxNi4xNmxseCAiCi0JCQkJIm1hcCAleCB2YWwgJWRcbiIsCi0JCQkJZmNmLT5mYWJyaWNfbmFtZSwgZmNmLT5mY19tYXAsIG10dV92YWxpZCk7Ci0JfQorCWlmICghZm91bmQpCisJCUxJQkZDT0VfRklQX0RCRyhmaXAsICJOZXcgRkNGIGZhYiAlMTYuMTZsbHggbWFjICVwTVxuIiwKKwkJCQlmY2YtPmZhYnJpY19uYW1lLCBmY2YtPmZjZl9tYWMpOwogCiAJLyoKIAkgKiBJZiB0aGlzIGFkdmVydGlzZW1lbnQgaXMgbm90IHNvbGljaXRlZCBhbmQgb3VyIG1heCByZWNlaXZlIHNpemUKQEAgLTk0NSw2ICs5OTksMTcgQEAKIAkJZmNvZV9jdGxyX3NvbGljaXQoZmlwLCBOVUxMKTsKIAogCS8qCisJICogUHV0IHRoaXMgRkNGIGF0IHRoZSBoZWFkIG9mIHRoZSBsaXN0IGZvciBwcmlvcml0eSBhbW9uZyBlcXVhbHMuCisJICogVGhpcyBoZWxwcyBpbiB0aGUgY2FzZSBvZiBhbiBOUFYgc3dpdGNoIHdoaWNoIGluc2lzdHMgd2UgdXNlCisJICogdGhlIEZDRiB0aGF0IGFuc3dlcnMgbXVsdGljYXN0IHNvbGljaXRhdGlvbnMsIG5vdCB0aGUgb3RoZXJzIHRoYXQKKwkgKiBhcmUgc2VuZGluZyBwZXJpb2RpYyBtdWx0aWNhc3QgYWR2ZXJ0aXNlbWVudHMuCisJICovCisJaWYgKG10dV92YWxpZCkgeworCQlsaXN0X2RlbCgmZmNmLT5saXN0KTsKKwkJbGlzdF9hZGQoJmZjZi0+bGlzdCwgJmZpcC0+ZmNmcyk7CisJfQorCisJLyoKIAkgKiBJZiB0aGlzIGlzIHRoZSBmaXJzdCB2YWxpZGF0ZWQgRkNGLCBub3RlIHRoZSB0aW1lIGFuZAogCSAqIHNldCBhIHRpbWVyIHRvIHRyaWdnZXIgc2VsZWN0aW9uLgogCSAqLwpAQCAtMTA2MSwxOCArMTEyNiwyNCBAQAogCWVsc19vcCA9ICoodTggKikoZmggKyAxKTsKIAogCWlmICgoZWxzX2R0eXBlID09IEZJUF9EVF9GTE9HSSB8fCBlbHNfZHR5cGUgPT0gRklQX0RUX0ZESVNDKSAmJgotCSAgICBzdWIgPT0gRklQX1NDX1JFUCAmJiBlbHNfb3AgPT0gRUxTX0xTX0FDQyAmJgotCSAgICBmaXAtPm1vZGUgIT0gRklQX01PREVfVk4yVk4pIHsKLQkJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGdyYW50ZWRfbWFjKSkgewotCQkJTElCRkNPRV9GSVBfREJHKGZpcCwKLQkJCQkiSW52YWxpZCBNQUMgYWRkcmVzcyAlcE0gaW4gRklQIEVMU1xuIiwKLQkJCQlncmFudGVkX21hYyk7Ci0JCQlnb3RvIGRyb3A7Ci0JCX0KLQkJbWVtY3B5KGZyX2NiKGZwKS0+Z3JhbnRlZF9tYWMsIGdyYW50ZWRfbWFjLCBFVEhfQUxFTik7CisJICAgIHN1YiA9PSBGSVBfU0NfUkVQICYmIGZpcC0+bW9kZSAhPSBGSVBfTU9ERV9WTjJWTikgeworCQlpZiAoZWxzX29wID09IEVMU19MU19BQ0MpIHsKKwkJCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihncmFudGVkX21hYykpIHsKKwkJCQlMSUJGQ09FX0ZJUF9EQkcoZmlwLAorCQkJCQkiSW52YWxpZCBNQUMgYWRkcmVzcyAlcE0gaW4gRklQIEVMU1xuIiwKKwkJCQkJZ3JhbnRlZF9tYWMpOworCQkJCWdvdG8gZHJvcDsKKwkJCX0KKwkJCW1lbWNweShmcl9jYihmcCktPmdyYW50ZWRfbWFjLCBncmFudGVkX21hYywgRVRIX0FMRU4pOwogCi0JCWlmIChmaXAtPmZsb2dpX294aWQgPT0gbnRvaHMoZmgtPmZoX294X2lkKSkKLQkJCWZpcC0+ZmxvZ2lfb3hpZCA9IEZDX1hJRF9VTktOT1dOOworCQkJaWYgKGZpcC0+ZmxvZ2lfb3hpZCA9PSBudG9ocyhmaC0+Zmhfb3hfaWQpKSB7CisJCQkJZmlwLT5mbG9naV9veGlkID0gRkNfWElEX1VOS05PV047CisJCQkJaWYgKGVsc19kdHlwZSA9PSBGSVBfRFRfRkxPR0kpCisJCQkJCWZjb2VfY3Rscl9hbm5vdW5jZShmaXApOworCQkJfQorCQl9IGVsc2UgaWYgKGVsc19kdHlwZSA9PSBGSVBfRFRfRkxPR0kgJiYKKwkJCSAgICFmY29lX2N0bHJfZmxvZ2lfcmV0cnkoZmlwKSkKKwkJCWdvdG8gZHJvcDsJLyogcmV0cnlpbmcgRkxPR0kgc28gZHJvcCByZWplY3QgKi8KIAl9CiAKIAlpZiAoKGRlc2NfY250ID09IDApIHx8ICgoZWxzX29wICE9IEVMU19MU19SSlQpICYmCkBAIC0xMzI2LDIwICsxMzk3LDM5IEBACiAgKiBmY29lX2N0bHJfc2VsZWN0KCkgLSBTZWxlY3QgdGhlIGJlc3QgRkNGIChpZiBwb3NzaWJsZSkKICAqIEBmaXA6IFRoZSBGQ29FIGNvbnRyb2xsZXIKICAqCisgKiBSZXR1cm5zIHRoZSBzZWxlY3RlZCBGQ0YsIG9yIE5VTEwgaWYgbm9uZSBhcmUgdXNhYmxlLgorICoKICAqIElmIHRoZXJlIGFyZSBjb25mbGljdGluZyBhZHZlcnRpc2VtZW50cywgbm8gRkNGIGNhbiBiZSBjaG9zZW4uCiAgKgorICogSWYgdGhlcmUgaXMgYWxyZWFkeSBhIHNlbGVjdGVkIEZDRiwgdGhpcyB3aWxsIGNob29zZSBhIGJldHRlciBvbmUgb3IKKyAqIGFuIGVxdWl2YWxlbnQgb25lIHRoYXQgaGFzbid0IGFscmVhZHkgYmVlbiBzZW50IGEgRkxPR0kuCisgKgogICogQ2FsbGVkIHdpdGggbG9jayBoZWxkLgogICovCi1zdGF0aWMgdm9pZCBmY29lX2N0bHJfc2VsZWN0KHN0cnVjdCBmY29lX2N0bHIgKmZpcCkKK3N0YXRpYyBzdHJ1Y3QgZmNvZV9mY2YgKmZjb2VfY3Rscl9zZWxlY3Qoc3RydWN0IGZjb2VfY3RsciAqZmlwKQogewogCXN0cnVjdCBmY29lX2ZjZiAqZmNmOwotCXN0cnVjdCBmY29lX2ZjZiAqYmVzdCA9IE5VTEw7CisJc3RydWN0IGZjb2VfZmNmICpiZXN0ID0gZmlwLT5zZWxfZmNmOworCXN0cnVjdCBmY29lX2ZjZiAqZmlyc3Q7CisKKwlmaXJzdCA9IGxpc3RfZmlyc3RfZW50cnkoJmZpcC0+ZmNmcywgc3RydWN0IGZjb2VfZmNmLCBsaXN0KTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoZmNmLCAmZmlwLT5mY2ZzLCBsaXN0KSB7Ci0JCUxJQkZDT0VfRklQX0RCRyhmaXAsICJjb25zaWRlciBGQ0YgZm9yIGZhYiAlMTYuMTZsbHggIgotCQkJCSJWRklEICVkIG1hcCAleCB2YWwgJWRcbiIsCi0JCQkJZmNmLT5mYWJyaWNfbmFtZSwgZmNmLT52ZmlkLAotCQkJCWZjZi0+ZmNfbWFwLCBmY29lX2N0bHJfbXR1X3ZhbGlkKGZjZikpOworCQlMSUJGQ09FX0ZJUF9EQkcoZmlwLCAiY29uc2lkZXIgRkNGIGZhYiAlMTYuMTZsbHggIgorCQkJCSJWRklEICVkIG1hYyAlcE0gbWFwICV4IHZhbCAlZCAiCisJCQkJInNlbnQgJXUgcHJpICV1XG4iLAorCQkJCWZjZi0+ZmFicmljX25hbWUsIGZjZi0+dmZpZCwgZmNmLT5mY2ZfbWFjLAorCQkJCWZjZi0+ZmNfbWFwLCBmY29lX2N0bHJfbXR1X3ZhbGlkKGZjZiksCisJCQkJZmNmLT5mbG9naV9zZW50LCBmY2YtPnByaSk7CisJCWlmIChmY2YtPmZhYnJpY19uYW1lICE9IGZpcnN0LT5mYWJyaWNfbmFtZSB8fAorCQkgICAgZmNmLT52ZmlkICE9IGZpcnN0LT52ZmlkIHx8CisJCSAgICBmY2YtPmZjX21hcCAhPSBmaXJzdC0+ZmNfbWFwKSB7CisJCQlMSUJGQ09FX0ZJUF9EQkcoZmlwLCAiQ29uZmxpY3RpbmcgZmFicmljLCBWRklELCAiCisJCQkJCSJvciBGQy1NQVBcbiIpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwkJaWYgKGZjZi0+ZmxvZ2lfc2VudCkKKwkJCWNvbnRpbnVlOwogCQlpZiAoIWZjb2VfY3Rscl9mY2ZfdXNhYmxlKGZjZikpIHsKIAkJCUxJQkZDT0VfRklQX0RCRyhmaXAsICJGQ0YgZm9yIGZhYiAlMTYuMTZsbHggIgogCQkJCQkibWFwICV4ICVzdmFsaWQgJXNhdmFpbGFibGVcbiIsCkBAIC0xMzQ5LDIxICsxNDM5LDEzMSBAQAogCQkJCQkiIiA6ICJ1biIpOwogCQkJY29udGludWU7CiAJCX0KLQkJaWYgKCFiZXN0KSB7Ci0JCQliZXN0ID0gZmNmOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKGZjZi0+ZmFicmljX25hbWUgIT0gYmVzdC0+ZmFicmljX25hbWUgfHwKLQkJICAgIGZjZi0+dmZpZCAhPSBiZXN0LT52ZmlkIHx8Ci0JCSAgICBmY2YtPmZjX21hcCAhPSBiZXN0LT5mY19tYXApIHsKLQkJCUxJQkZDT0VfRklQX0RCRyhmaXAsICJDb25mbGljdGluZyBmYWJyaWMsIFZGSUQsICIKLQkJCQkJIm9yIEZDLU1BUFxuIik7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJaWYgKGZjZi0+cHJpIDwgYmVzdC0+cHJpKQorCQlpZiAoIWJlc3QgfHwgZmNmLT5wcmkgPCBiZXN0LT5wcmkgfHwgYmVzdC0+ZmxvZ2lfc2VudCkKIAkJCWJlc3QgPSBmY2Y7CiAJfQogCWZpcC0+c2VsX2ZjZiA9IGJlc3Q7CisJaWYgKGJlc3QpIHsKKwkJTElCRkNPRV9GSVBfREJHKGZpcCwgInVzaW5nIEZDRiBtYWMgJXBNXG4iLCBiZXN0LT5mY2ZfbWFjKTsKKwkJZmlwLT5wb3J0X2thX3RpbWUgPSBqaWZmaWVzICsKKwkJCW1zZWNzX3RvX2ppZmZpZXMoRklQX1ZOX0tBX1BFUklPRCk7CisJCWZpcC0+Y3Rscl9rYV90aW1lID0gamlmZmllcyArIGJlc3QtPmZrYV9wZXJpb2Q7CisJCWlmICh0aW1lX2JlZm9yZShmaXAtPmN0bHJfa2FfdGltZSwgZmlwLT50aW1lci5leHBpcmVzKSkKKwkJCW1vZF90aW1lcigmZmlwLT50aW1lciwgZmlwLT5jdGxyX2thX3RpbWUpOworCX0KKwlyZXR1cm4gYmVzdDsKK30KKworLyoqCisgKiBmY29lX2N0bHJfZmxvZ2lfc2VuZF9sb2NrZWQoKSAtIHNlbmQgRklQLWVuY2Fwc3VsYXRlZCBGTE9HSSB0byBjdXJyZW50IEZDRgorICogQGZpcDogVGhlIEZDb0UgY29udHJvbGxlcgorICoKKyAqIFJldHVybnMgbm9uLXplcm8gZXJyb3IgaWYgaXQgY291bGQgbm90IGJlIHNlbnQuCisgKgorICogQ2FsbGVkIHdpdGggY3Rscl9tdXRleCBhbmQgY3Rscl9sb2NrIGhlbGQuCisgKiBDYWxsZXIgbXVzdCB2ZXJpZnkgdGhhdCBmaXAtPnNlbF9mY2YgaXMgbm90IE5VTEwuCisgKi8KK3N0YXRpYyBpbnQgZmNvZV9jdGxyX2Zsb2dpX3NlbmRfbG9ja2VkKHN0cnVjdCBmY29lX2N0bHIgKmZpcCkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBza19idWZmICpza2Jfb3JpZzsKKwlzdHJ1Y3QgZmNfZnJhbWVfaGVhZGVyICpmaDsKKwlpbnQgZXJyb3I7CisKKwlza2Jfb3JpZyA9IGZpcC0+ZmxvZ2lfcmVxOworCWlmICghc2tiX29yaWcpCisJCXJldHVybiAtRUlOVkFMOworCisJLyoKKwkgKiBDbG9uZSBhbmQgc2VuZCB0aGUgRkxPR0kgcmVxdWVzdC4gIElmIGNsb25lIGZhaWxzLCB1c2Ugb3JpZ2luYWwuCisJICovCisJc2tiID0gc2tiX2Nsb25lKHNrYl9vcmlnLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXNrYikgeworCQlza2IgPSBza2Jfb3JpZzsKKwkJZmlwLT5mbG9naV9yZXEgPSBOVUxMOworCX0KKwlmaCA9IChzdHJ1Y3QgZmNfZnJhbWVfaGVhZGVyICopc2tiLT5kYXRhOworCWVycm9yID0gZmNvZV9jdGxyX2VuY2FwcyhmaXAsIGZpcC0+bHAsIEZJUF9EVF9GTE9HSSwgc2tiLAorCQkJCSBudG9oMjQoZmgtPmZoX2RfaWQpKTsKKwlpZiAoZXJyb3IpIHsKKwkJa2ZyZWVfc2tiKHNrYik7CisJCXJldHVybiBlcnJvcjsKKwl9CisJZmlwLT5zZW5kKGZpcCwgc2tiKTsKKwlmaXAtPnNlbF9mY2YtPmZsb2dpX3NlbnQgPSAxOworCXJldHVybiAwOworfQorCisvKioKKyAqIGZjb2VfY3Rscl9mbG9naV9yZXRyeSgpIC0gcmVzZW5kIEZMT0dJIHJlcXVlc3QgdG8gYSBuZXcgRkNGIGlmIHBvc3NpYmxlCisgKiBAZmlwOiBUaGUgRkNvRSBjb250cm9sbGVyCisgKgorICogUmV0dXJucyBub24temVybyBlcnJvciBjb2RlIGlmIHRoZXJlJ3Mgbm8gRkxPR0kgcmVxdWVzdCB0byByZXRyeSBvcgorICogbm8gYWx0ZXJuYXRlIEZDRiBhdmFpbGFibGUuCisgKi8KK3N0YXRpYyBpbnQgZmNvZV9jdGxyX2Zsb2dpX3JldHJ5KHN0cnVjdCBmY29lX2N0bHIgKmZpcCkKK3sKKwlzdHJ1Y3QgZmNvZV9mY2YgKmZjZjsKKwlpbnQgZXJyb3I7CisKKwltdXRleF9sb2NrKCZmaXAtPmN0bHJfbXV0ZXgpOworCXNwaW5fbG9ja19iaCgmZmlwLT5jdGxyX2xvY2spOworCUxJQkZDT0VfRklQX0RCRyhmaXAsICJyZS1zZW5kaW5nIEZMT0dJIC0gcmVzZWxlY3RcbiIpOworCWZjZiA9IGZjb2VfY3Rscl9zZWxlY3QoZmlwKTsKKwlpZiAoIWZjZiB8fCBmY2YtPmZsb2dpX3NlbnQpIHsKKwkJa2ZyZWVfc2tiKGZpcC0+ZmxvZ2lfcmVxKTsKKwkJZmlwLT5mbG9naV9yZXEgPSBOVUxMOworCQllcnJvciA9IC1FTk9FTlQ7CisJfSBlbHNlIHsKKwkJZmNvZV9jdGxyX3NvbGljaXQoZmlwLCBOVUxMKTsKKwkJZXJyb3IgPSBmY29lX2N0bHJfZmxvZ2lfc2VuZF9sb2NrZWQoZmlwKTsKKwl9CisJc3Bpbl91bmxvY2tfYmgoJmZpcC0+Y3Rscl9sb2NrKTsKKwltdXRleF91bmxvY2soJmZpcC0+Y3Rscl9tdXRleCk7CisJcmV0dXJuIGVycm9yOworfQorCisKKy8qKgorICogZmNvZV9jdGxyX2Zsb2dpX3NlbmQoKSAtIEhhbmRsZSBzZW5kaW5nIG9mIEZJUCBGTE9HSS4KKyAqIEBmaXA6IFRoZSBGQ29FIGNvbnRyb2xsZXIgdGhhdCB0aW1lZCBvdXQKKyAqCisgKiBEb25lIGhlcmUgYmVjYXVzZSBmY29lX2N0bHJfZWxzX3NlbmQoKSBjYW4ndCBnZXQgbXV0ZXguCisgKgorICogQ2FsbGVkIHdpdGggY3Rscl9tdXRleCBoZWxkLiAgVGhlIGNhbGxlciBtdXN0IG5vdCBob2xkIGN0bHJfbG9jay4KKyAqLworc3RhdGljIHZvaWQgZmNvZV9jdGxyX2Zsb2dpX3NlbmQoc3RydWN0IGZjb2VfY3RsciAqZmlwKQoreworCXN0cnVjdCBmY29lX2ZjZiAqZmNmOworCisJc3Bpbl9sb2NrX2JoKCZmaXAtPmN0bHJfbG9jayk7CisJZmNmID0gZmlwLT5zZWxfZmNmOworCWlmICghZmNmIHx8ICFmaXAtPmZsb2dpX3JlcV9zZW5kKQorCQlnb3RvIHVubG9jazsKKworCUxJQkZDT0VfRklQX0RCRyhmaXAsICJzZW5kaW5nIEZMT0dJXG4iKTsKKworCS8qCisJICogSWYgdGhpcyBGTE9HSSBpcyBiZWluZyBzZW50IGR1ZSB0byBhIHRpbWVvdXQgcmV0cnkKKwkgKiB0byB0aGUgc2FtZSBGQ0YgYXMgYmVmb3JlLCBzZWxlY3QgYSBkaWZmZXJlbnQgRkNGIGlmIHBvc3NpYmxlLgorCSAqLworCWlmIChmY2YtPmZsb2dpX3NlbnQpIHsKKwkJTElCRkNPRV9GSVBfREJHKGZpcCwgInNlbmRpbmcgRkxPR0kgLSByZXNlbGVjdFxuIik7CisJCWZjZiA9IGZjb2VfY3Rscl9zZWxlY3QoZmlwKTsKKwkJaWYgKCFmY2YgfHwgZmNmLT5mbG9naV9zZW50KSB7CisJCQlMSUJGQ09FX0ZJUF9EQkcoZmlwLCAic2VuZGluZyBGTE9HSSAtIGNsZWFyaW5nXG4iKTsKKwkJCWxpc3RfZm9yX2VhY2hfZW50cnkoZmNmLCAmZmlwLT5mY2ZzLCBsaXN0KQorCQkJCWZjZi0+ZmxvZ2lfc2VudCA9IDA7CisJCQlmY2YgPSBmY29lX2N0bHJfc2VsZWN0KGZpcCk7CisJCX0KKwl9CisJaWYgKGZjZikgeworCQlmY29lX2N0bHJfZmxvZ2lfc2VuZF9sb2NrZWQoZmlwKTsKKwkJZmlwLT5mbG9naV9yZXFfc2VuZCA9IDA7CisJfSBlbHNlIC8qIFhYWCAqLworCQlMSUJGQ09FX0ZJUF9EQkcoZmlwLCAiTm8gRkNGIHNlbGVjdGVkIC0gZGVmZXIgc2VuZFxuIik7Cit1bmxvY2s6CisJc3Bpbl91bmxvY2tfYmgoJmZpcC0+Y3Rscl9sb2NrKTsKIH0KIAogLyoqCkBAIC0xNDExLDM0ICsxNjExLDE2IEBACiAJc2VsID0gZmlwLT5zZWxfZmNmOwogCWlmICghc2VsICYmIGZpcC0+c2VsX3RpbWUpIHsKIAkJaWYgKHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgZmlwLT5zZWxfdGltZSkpIHsKLQkJCWZjb2VfY3Rscl9zZWxlY3QoZmlwKTsKLQkJCXNlbCA9IGZpcC0+c2VsX2ZjZjsKKwkJCXNlbCA9IGZjb2VfY3Rscl9zZWxlY3QoZmlwKTsKIAkJCWZpcC0+c2VsX3RpbWUgPSAwOwogCQl9IGVsc2UgaWYgKHRpbWVfYWZ0ZXIobmV4dF90aW1lciwgZmlwLT5zZWxfdGltZSkpCiAJCQluZXh0X3RpbWVyID0gZmlwLT5zZWxfdGltZTsKIAl9CiAKLQlpZiAoc2VsICE9IGZjZikgewotCQlmY2YgPSBzZWw7CQkvKiB0aGUgb2xkIEZDRiBtYXkgaGF2ZSBiZWVuIGZyZWVkICovCi0JCWlmIChzZWwpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gImxpYmZjb2U6IGhvc3QlZDogRklQIHNlbGVjdGVkICIKLQkJCSAgICAgICAiRmlicmUtQ2hhbm5lbCBGb3J3YXJkZXIgTUFDICVwTVxuIiwKLQkJCSAgICAgICBmaXAtPmxwLT5ob3N0LT5ob3N0X25vLCBzZWwtPmZjZl9tYWMpOwotCQkJbWVtY3B5KGZpcC0+ZGVzdF9hZGRyLCBzZWwtPmZjZl9tYWMsIEVUSF9BTEVOKTsKLQkJCWZpcC0+bWFwX2Rlc3QgPSAwOwotCQkJZmlwLT5wb3J0X2thX3RpbWUgPSBqaWZmaWVzICsKLQkJCQltc2Vjc190b19qaWZmaWVzKEZJUF9WTl9LQV9QRVJJT0QpOwotCQkJZmlwLT5jdGxyX2thX3RpbWUgPSBqaWZmaWVzICsgc2VsLT5ma2FfcGVyaW9kOwotCQkJaWYgKHRpbWVfYWZ0ZXIobmV4dF90aW1lciwgZmlwLT5jdGxyX2thX3RpbWUpKQotCQkJCW5leHRfdGltZXIgPSBmaXAtPmN0bHJfa2FfdGltZTsKLQkJfSBlbHNlIHsKLQkJCXByaW50ayhLRVJOX05PVElDRSAibGliZmNvZTogaG9zdCVkOiAiCi0JCQkgICAgICAgIkZJUCBGaWJyZS1DaGFubmVsIEZvcndhcmRlciB0aW1lZCBvdXQuCSIKLQkJCSAgICAgICAiU3RhcnRpbmcgRkNGIGRpc2NvdmVyeS5cbiIsCi0JCQkgICAgICAgZmlwLT5scC0+aG9zdC0+aG9zdF9ubyk7Ci0JCQlyZXNldCA9IDE7Ci0JCX0KLQl9CisJaWYgKHNlbCAmJiBmaXAtPmZsb2dpX3JlcV9zZW5kKQorCQlmY29lX2N0bHJfZmxvZ2lfc2VuZChmaXApOworCWVsc2UgaWYgKCFzZWwgJiYgZmNmKQorCQlyZXNldCA9IDE7CiAKIAlpZiAoc2VsICYmICFzZWwtPmZkX2ZsYWdzKSB7CiAJCWlmICh0aW1lX2FmdGVyX2VxKGppZmZpZXMsIGZpcC0+Y3Rscl9rYV90aW1lKSkgewpAQCAtMjQ3NSw3ICsyNjU3LDcgQEAKIAljYXNlIEZJUF9TVF9MSU5LX1dBSVQ6CiAJCWdvdG8gdW5sb2NrOwogCWRlZmF1bHQ6Ci0JCVdBUk4oMSwgInVuZXhwZWN0ZWQgc3RhdGUgJWQiLCBmaXAtPnN0YXRlKTsKKwkJV0FSTigxLCAidW5leHBlY3RlZCBzdGF0ZSAlZFxuIiwgZmlwLT5zdGF0ZSk7CiAJCWdvdG8gdW5sb2NrOwogCX0KIAltb2RfdGltZXIoJmZpcC0+dGltZXIsIG5leHRfdGltZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZ2R0aC5jIGIvZHJpdmVycy9zY3NpL2dkdGguYwppbmRleCA3NjM2NTcwLi4zMjQyYmNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZ2R0aC5jCisrKyBiL2RyaXZlcnMvc2NzaS9nZHRoLmMKQEAgLTQyNzMsOCArNDI3MywxMCBAQAogICAgIH0KIAogICAgIHJ2YWwgPSBfX2dkdGhfZXhlY3V0ZShoYS0+c2RldiwgJmdlbi5jb21tYW5kLCBjbW5kLCBnZW4udGltZW91dCwgJmdlbi5pbmZvKTsKLSAgICBpZiAocnZhbCA8IDApCisgICAgaWYgKHJ2YWwgPCAwKSB7CisJZ2R0aF9pb2N0bF9mcmVlKGhhLCBnZW4uZGF0YV9sZW4rZ2VuLnNlbnNlX2xlbiwgYnVmLCBwYWRkcik7CiAgICAgICAgIHJldHVybiBydmFsOworICAgIH0KICAgICBnZW4uc3RhdHVzID0gcnZhbDsKIAogICAgIGlmIChjb3B5X3RvX3VzZXIoYXJnICsgc2l6ZW9mKGdkdGhfaW9jdGxfZ2VuZXJhbCksIGJ1ZiwgCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZ2R0aF9wcm9jLmMgYi9kcml2ZXJzL3Njc2kvZ2R0aF9wcm9jLmMKaW5kZXggMDU3MmI5Yi4uNjUyNzU0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2dkdGhfcHJvYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9nZHRoX3Byb2MuYwpAQCAtMzY1LDggKzM2NSwxMCBAQAogICAgICAgICAgICAgICAgICAgICBsZW4gPSAwOwogICAgICAgICAgICAgICAgICAgICBiZWdpbiA9IHBvczsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHBvcyA+IG9mZnNldCArIGxlbmd0aCkKKwkJaWYgKHBvcyA+IG9mZnNldCArIGxlbmd0aCkgeworCQkgICAgZ2R0aF9pb2N0bF9mcmVlKGhhLCBHRFRIX1NDUkFUQ0gsIGJ1ZiwgcGFkZHIpOwogICAgICAgICAgICAgICAgICAgICBnb3RvIHN0b3Bfb3V0cHV0OworCQl9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZ2R0aF9pb2N0bF9mcmVlKGhhLCBHRFRIX1NDUkFUQ0gsIGJ1ZiwgcGFkZHIpOwpAQCAtNDUwLDggKzQ1MiwxMCBAQAogICAgICAgICAgICAgICAgICAgICBsZW4gPSAwOwogICAgICAgICAgICAgICAgICAgICBiZWdpbiA9IHBvczsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHBvcyA+IG9mZnNldCArIGxlbmd0aCkKKwkJaWYgKHBvcyA+IG9mZnNldCArIGxlbmd0aCkgeworCQkgICAgZ2R0aF9pb2N0bF9mcmVlKGhhLCBHRFRIX1NDUkFUQ0gsIGJ1ZiwgcGFkZHIpOwogICAgICAgICAgICAgICAgICAgICBnb3RvIHN0b3Bfb3V0cHV0OworCQl9CiAgICAgICAgICAgICB9IHdoaWxlIChkcnZfbm8gIT0gLTEpOwogICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKGlzX21pcnIpIHsKQEAgLTQ3Miw4ICs0NzYsMTAgQEAKICAgICAgICAgICAgICAgICBsZW4gPSAwOwogICAgICAgICAgICAgICAgIGJlZ2luID0gcG9zOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHBvcyA+IG9mZnNldCArIGxlbmd0aCkKKwkgICAgaWYgKHBvcyA+IG9mZnNldCArIGxlbmd0aCkgeworCQlnZHRoX2lvY3RsX2ZyZWUoaGEsIEdEVEhfU0NSQVRDSCwgYnVmLCBwYWRkcik7CiAgICAgICAgICAgICAgICAgZ290byBzdG9wX291dHB1dDsKKwkgICAgfQogICAgICAgICB9ICAgICAgIAogICAgICAgICBnZHRoX2lvY3RsX2ZyZWUoaGEsIEdEVEhfU0NSQVRDSCwgYnVmLCBwYWRkcik7CiAgICAgICAgIApAQCAtNTQyLDggKzU0OCwxMCBAQAogICAgICAgICAgICAgICAgICAgICBsZW4gPSAwOwogICAgICAgICAgICAgICAgICAgICBiZWdpbiA9IHBvczsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHBvcyA+IG9mZnNldCArIGxlbmd0aCkKKwkJaWYgKHBvcyA+IG9mZnNldCArIGxlbmd0aCkgeworCQkgICAgZ2R0aF9pb2N0bF9mcmVlKGhhLCBHRFRIX1NDUkFUQ0gsIGJ1ZiwgcGFkZHIpOwogICAgICAgICAgICAgICAgICAgICBnb3RvIHN0b3Bfb3V0cHV0OworCQl9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZ2R0aF9pb2N0bF9mcmVlKGhhLCBHRFRIX1NDUkFUQ0gsIGJ1ZiwgcGFkZHIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2hwc2EuYyBiL2RyaXZlcnMvc2NzaS9ocHNhLmMKaW5kZXggYTZkZWEwOC4uMTJkZWZmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2hwc2EuYworKysgYi9kcml2ZXJzL3Njc2kvaHBzYS5jCkBAIC02NDEsMTEgKzY0MSw2IEBACiBzdGF0aWMgaW5saW5lIGludCBkZXZpY2VfaXNfdGhlX3NhbWUoc3RydWN0IGhwc2Ffc2NzaV9kZXZfdCAqZGV2MSwKIAlzdHJ1Y3QgaHBzYV9zY3NpX2Rldl90ICpkZXYyKQogewotCWlmICgoaXNfbG9naWNhbF9kZXZfYWRkcl9tb2RlKGRldjEtPnNjc2kzYWRkcikgfHwKLQkJKGRldjEtPmx1biAhPSAtMSAmJiBkZXYyLT5sdW4gIT0gLTEpKSAmJgotCQlkZXYxLT5kZXZ0eXBlICE9IDB4MEMpCi0JCXJldHVybiAobWVtY21wKGRldjEsIGRldjIsIHNpemVvZigqZGV2MSkpID09IDApOwotCiAJLyogd2UgY29tcGFyZSBldmVyeXRoaW5nIGV4Y2VwdCBsdW4gYW5kIHRhcmdldCBhcyB0aGVzZQogCSAqIGFyZSBub3QgeWV0IGFzc2lnbmVkLiAgQ29tcGFyZSBwYXJ0cyBsaWtlbHkKIAkgKiB0byBkaWZmZXIgZmlyc3QKQEAgLTY2MCwxMiArNjU1LDggQEAKIAkJcmV0dXJuIDA7CiAJaWYgKG1lbWNtcChkZXYxLT52ZW5kb3IsIGRldjItPnZlbmRvciwgc2l6ZW9mKGRldjEtPnZlbmRvcikpICE9IDApCiAJCXJldHVybiAwOwotCWlmIChtZW1jbXAoZGV2MS0+cmV2aXNpb24sIGRldjItPnJldmlzaW9uLCBzaXplb2YoZGV2MS0+cmV2aXNpb24pKSAhPSAwKQotCQlyZXR1cm4gMDsKIAlpZiAoZGV2MS0+ZGV2dHlwZSAhPSBkZXYyLT5kZXZ0eXBlKQogCQlyZXR1cm4gMDsKLQlpZiAoZGV2MS0+cmFpZF9sZXZlbCAhPSBkZXYyLT5yYWlkX2xldmVsKQotCQlyZXR1cm4gMDsKIAlpZiAoZGV2MS0+YnVzICE9IGRldjItPmJ1cykKIAkJcmV0dXJuIDA7CiAJcmV0dXJuIDE7CkBAIC0xNDc3LDggKzE0NjgsNiBAQAogCQlzaXplb2YodGhpc19kZXZpY2UtPnZlbmRvcikpOwogCW1lbWNweSh0aGlzX2RldmljZS0+bW9kZWwsICZpbnFfYnVmZlsxNl0sCiAJCXNpemVvZih0aGlzX2RldmljZS0+bW9kZWwpKTsKLQltZW1jcHkodGhpc19kZXZpY2UtPnJldmlzaW9uLCAmaW5xX2J1ZmZbMzJdLAotCQlzaXplb2YodGhpc19kZXZpY2UtPnJldmlzaW9uKSk7CiAJbWVtc2V0KHRoaXNfZGV2aWNlLT5kZXZpY2VfaWQsIDAsCiAJCXNpemVvZih0aGlzX2RldmljZS0+ZGV2aWNlX2lkKSk7CiAJaHBzYV9nZXRfZGV2aWNlX2lkKGgsIHNjc2kzYWRkciwgdGhpc19kZXZpY2UtPmRldmljZV9pZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9ocHNhLmggYi9kcml2ZXJzL3Njc2kvaHBzYS5oCmluZGV4IGEyMDNlZjYuLjE5NTg2ZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9ocHNhLmgKKysrIGIvZHJpdmVycy9zY3NpL2hwc2EuaApAQCAtNDUsNyArNDUsNiBAQAogCXVuc2lnbmVkIGNoYXIgZGV2aWNlX2lkWzE2XTsgICAgLyogZnJvbSBpbnF1aXJ5IHBnLiAweDgzICovCiAJdW5zaWduZWQgY2hhciB2ZW5kb3JbOF07ICAgICAgICAvKiBieXRlcyA4LTE1IG9mIGlucXVpcnkgZGF0YSAqLwogCXVuc2lnbmVkIGNoYXIgbW9kZWxbMTZdOyAgICAgICAgLyogYnl0ZXMgMTYtMzEgb2YgaW5xdWlyeSBkYXRhICovCi0JdW5zaWduZWQgY2hhciByZXZpc2lvbls0XTsgICAgICAvKiBieXRlcyAzMi0zNSBvZiBpbnF1aXJ5IGRhdGEgKi8KIAl1bnNpZ25lZCBjaGFyIHJhaWRfbGV2ZWw7CS8qIGZyb20gaW5xdWlyeSBwYWdlIDB4QzEgKi8KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9pYm12ZmMuYyBiL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9pYm12ZmMuYwppbmRleCA1N2NhZDdlLi5iNzY1MDYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdmZjLmMKKysrIGIvZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZmYy5jCkBAIC0yNDkzLDIzICsyNDkzLDIzIEBACiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWJtdmZjX2FzeW5jX2Rlc2MgYWVfZGVzYyBbXSA9IHsKLQl7IElCTVZGQ19BRV9FTFNfUExPR0ksCQkiUExPR0kiLAkJSUJNVkZDX0RFRkFVTFRfTE9HX0xFVkVMICsgMSB9LAotCXsgSUJNVkZDX0FFX0VMU19MT0dPLAkJIkxPR08iLAkJSUJNVkZDX0RFRkFVTFRfTE9HX0xFVkVMICsgMSB9LAotCXsgSUJNVkZDX0FFX0VMU19QUkxPLAkJIlBSTE8iLAkJSUJNVkZDX0RFRkFVTFRfTE9HX0xFVkVMICsgMSB9LAotCXsgSUJNVkZDX0FFX1NDTl9OUE9SVCwJCSJOLVBvcnQgU0NOIiwJSUJNVkZDX0RFRkFVTFRfTE9HX0xFVkVMICsgMSB9LAotCXsgSUJNVkZDX0FFX1NDTl9HUk9VUCwJCSJHcm91cCBTQ04iLAlJQk1WRkNfREVGQVVMVF9MT0dfTEVWRUwgKyAxIH0sCi0JeyBJQk1WRkNfQUVfU0NOX0RPTUFJTiwJCSJEb21haW4gU0NOIiwJSUJNVkZDX0RFRkFVTFRfTE9HX0xFVkVMIH0sCi0JeyBJQk1WRkNfQUVfU0NOX0ZBQlJJQywJCSJGYWJyaWMgU0NOIiwJSUJNVkZDX0RFRkFVTFRfTE9HX0xFVkVMIH0sCi0JeyBJQk1WRkNfQUVfTElOS19VUCwJCSJMaW5rIFVwIiwJCUlCTVZGQ19ERUZBVUxUX0xPR19MRVZFTCB9LAotCXsgSUJNVkZDX0FFX0xJTktfRE9XTiwJCSJMaW5rIERvd24iLAlJQk1WRkNfREVGQVVMVF9MT0dfTEVWRUwgfSwKLQl7IElCTVZGQ19BRV9MSU5LX0RFQUQsCQkiTGluayBEZWFkIiwJSUJNVkZDX0RFRkFVTFRfTE9HX0xFVkVMIH0sCi0JeyBJQk1WRkNfQUVfSEFMVCwJCQkiSGFsdCIsCQlJQk1WRkNfREVGQVVMVF9MT0dfTEVWRUwgfSwKLQl7IElCTVZGQ19BRV9SRVNVTUUsCQkiUmVzdW1lIiwJCUlCTVZGQ19ERUZBVUxUX0xPR19MRVZFTCB9LAotCXsgSUJNVkZDX0FFX0FEQVBURVJfRkFJTEVELAkiQWRhcHRlciBGYWlsZWQiLAlJQk1WRkNfREVGQVVMVF9MT0dfTEVWRUwgfSwKKwl7ICJQTE9HSSIsCUlCTVZGQ19BRV9FTFNfUExPR0ksCUlCTVZGQ19ERUZBVUxUX0xPR19MRVZFTCArIDEgfSwKKwl7ICJMT0dPIiwJSUJNVkZDX0FFX0VMU19MT0dPLAlJQk1WRkNfREVGQVVMVF9MT0dfTEVWRUwgKyAxIH0sCisJeyAiUFJMTyIsCUlCTVZGQ19BRV9FTFNfUFJMTywJSUJNVkZDX0RFRkFVTFRfTE9HX0xFVkVMICsgMSB9LAorCXsgIk4tUG9ydCBTQ04iLAlJQk1WRkNfQUVfU0NOX05QT1JULAlJQk1WRkNfREVGQVVMVF9MT0dfTEVWRUwgKyAxIH0sCisJeyAiR3JvdXAgU0NOIiwJSUJNVkZDX0FFX1NDTl9HUk9VUCwJSUJNVkZDX0RFRkFVTFRfTE9HX0xFVkVMICsgMSB9LAorCXsgIkRvbWFpbiBTQ04iLAlJQk1WRkNfQUVfU0NOX0RPTUFJTiwJSUJNVkZDX0RFRkFVTFRfTE9HX0xFVkVMIH0sCisJeyAiRmFicmljIFNDTiIsCUlCTVZGQ19BRV9TQ05fRkFCUklDLAlJQk1WRkNfREVGQVVMVF9MT0dfTEVWRUwgfSwKKwl7ICJMaW5rIFVwIiwJSUJNVkZDX0FFX0xJTktfVVAsCUlCTVZGQ19ERUZBVUxUX0xPR19MRVZFTCB9LAorCXsgIkxpbmsgRG93biIsCUlCTVZGQ19BRV9MSU5LX0RPV04sCUlCTVZGQ19ERUZBVUxUX0xPR19MRVZFTCB9LAorCXsgIkxpbmsgRGVhZCIsCUlCTVZGQ19BRV9MSU5LX0RFQUQsCUlCTVZGQ19ERUZBVUxUX0xPR19MRVZFTCB9LAorCXsgIkhhbHQiLAlJQk1WRkNfQUVfSEFMVCwJCUlCTVZGQ19ERUZBVUxUX0xPR19MRVZFTCB9LAorCXsgIlJlc3VtZSIsCUlCTVZGQ19BRV9SRVNVTUUsCUlCTVZGQ19ERUZBVUxUX0xPR19MRVZFTCB9LAorCXsgIkFkYXB0ZXIgRmFpbGVkIiwgSUJNVkZDX0FFX0FEQVBURVJfRkFJTEVELCBJQk1WRkNfREVGQVVMVF9MT0dfTEVWRUwgfSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWJtdmZjX2FzeW5jX2Rlc2MgdW5rbm93bl9hZSA9IHsKLQkwLCAiVW5rbm93biBhc3luYyIsIElCTVZGQ19ERUZBVUxUX0xPR19MRVZFTAorCSJVbmtub3duIGFzeW5jIiwgMCwgSUJNVkZDX0RFRkFVTFRfTE9HX0xFVkVMCiB9OwogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9pYm12ZmMuaCBiL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9pYm12ZmMuaAppbmRleCBlZjY2M2U3Li44MzRjMzdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdmZjLmgKKysrIGIvZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZmYy5oCkBAIC01NDIsOCArNTQyLDggQEAKIH07CiAKIHN0cnVjdCBpYm12ZmNfYXN5bmNfZGVzYyB7Ci0JZW51bSBpYm12ZmNfYXN5bmNfZXZlbnQgYWU7CiAJY29uc3QgY2hhciAqZGVzYzsKKwllbnVtIGlibXZmY19hc3luY19ldmVudCBhZTsKIAlpbnQgbG9nX2xldmVsOwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2lwci5jIGIvZHJpdmVycy9zY3NpL2lwci5jCmluZGV4IDViYmFlZTUuLmQzYzU5MDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pcHIuYworKysgYi9kcml2ZXJzL3Njc2kvaXByLmMKQEAgLTE0Niw3ICsxNDYsNyBAQAogCQl9CiAJfSwKIAl7IC8qIENSb0MgKi8KLQkJLm1haWxib3ggPSAweDAwMDQwLAorCQkubWFpbGJveCA9IDB4MDAwNDQsCiAJCS5jYWNoZV9saW5lX3NpemUgPSAweDIwLAogCQl7CiAJCQkuc2V0X2ludGVycnVwdF9tYXNrX3JlZyA9IDB4MDAwMTAsCkBAIC0xMDQ4LDYgKzEwNDgsOCBAQAogCQkJc2l6ZW9mKHJlcy0+cmVzX3BhdGgpKTsKIAogCQlyZXMtPmJ1cyA9IDA7CisJCW1lbWNweSgmcmVzLT5kZXZfbHVuLnNjc2lfbHVuLCAmY2ZndGV3LT51LmNmZ3RlNjQtPmx1biwKKwkJCXNpemVvZihyZXMtPmRldl9sdW4uc2NzaV9sdW4pKTsKIAkJcmVzLT5sdW4gPSBzY3NpbHVuX3RvX2ludCgmcmVzLT5kZXZfbHVuKTsKIAogCQlpZiAocmVzLT50eXBlID09IElQUl9SRVNfVFlQRV9HRU5FUklDX1NDU0kpIHsKQEAgLTEwNjMsOSArMTA2NSw2IEBACiAJCQkJCQkJCSAgaW9hX2NmZy0+bWF4X2RldnNfc3VwcG9ydGVkKTsKIAkJCQlzZXRfYml0KHJlcy0+dGFyZ2V0LCBpb2FfY2ZnLT50YXJnZXRfaWRzKTsKIAkJCX0KLQotCQkJbWVtY3B5KCZyZXMtPmRldl9sdW4uc2NzaV9sdW4sICZjZmd0ZXctPnUuY2ZndGU2NC0+bHVuLAotCQkJCXNpemVvZihyZXMtPmRldl9sdW4uc2NzaV9sdW4pKTsKIAkJfSBlbHNlIGlmIChyZXMtPnR5cGUgPT0gSVBSX1JFU19UWVBFX0lPQUZQKSB7CiAJCQlyZXMtPmJ1cyA9IElQUl9JT0FGUF9WSVJUVUFMX0JVUzsKIAkJCXJlcy0+dGFyZ2V0ID0gMDsKQEAgLTExMTYsNyArMTExNSw3IEBACiAJaWYgKHJlcy0+aW9hX2NmZy0+c2lzNjQpIHsKIAkJaWYgKCFtZW1jbXAoJnJlcy0+ZGV2X2lkLCAmY2ZndGV3LT51LmNmZ3RlNjQtPmRldl9pZCwKIAkJCQkJc2l6ZW9mKGNmZ3Rldy0+dS5jZmd0ZTY0LT5kZXZfaWQpKSAmJgotCQkJIW1lbWNtcCgmcmVzLT5sdW4sICZjZmd0ZXctPnUuY2ZndGU2NC0+bHVuLAorCQkJIW1lbWNtcCgmcmVzLT5kZXZfbHVuLnNjc2lfbHVuLCAmY2ZndGV3LT51LmNmZ3RlNjQtPmx1biwKIAkJCQkJc2l6ZW9mKGNmZ3Rldy0+dS5jZmd0ZTY0LT5sdW4pKSkgewogCQkJcmV0dXJuIDE7CiAJCX0KQEAgLTI5MDEsNiArMjkwMCwxMiBAQAogCQlyZXR1cm47CiAJfQogCisJaWYgKGlvYV9jZmctPnNpczY0KSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoaW9hX2NmZy0+aG9zdC0+aG9zdF9sb2NrLCBsb2NrX2ZsYWdzKTsKKwkJc3NsZWVwKElQUl9EVU1QX0RFTEFZX1NFQ09ORFMpOworCQlzcGluX2xvY2tfaXJxc2F2ZShpb2FfY2ZnLT5ob3N0LT5ob3N0X2xvY2ssIGxvY2tfZmxhZ3MpOworCX0KKwogCXN0YXJ0X2FkZHIgPSByZWFkbChpb2FfY2ZnLT5pb2FfbWFpbGJveCk7CiAKIAlpZiAoIWlvYV9jZmctPnNpczY0ICYmICFpcHJfc2R0X2lzX2ZtdDIoc3RhcnRfYWRkcikpIHsKQEAgLTU3NDMsNyArNTc0OCw3IEBACiAJfQogCiAJaWYgKGlwcl9pc19nYXRhKHJlcykgJiYgcmVzLT5zYXRhX3BvcnQpCi0JCXJldHVybiBhdGFfc2FzX3F1ZXVlY21kKHNjc2lfY21kLCBkb25lLCByZXMtPnNhdGFfcG9ydC0+YXApOworCQlyZXR1cm4gYXRhX3Nhc19xdWV1ZWNtZChzY3NpX2NtZCwgcmVzLT5zYXRhX3BvcnQtPmFwKTsKIAogCWlwcl9jbWQgPSBpcHJfZ2V0X2ZyZWVfaXByX2NtbmQoaW9hX2NmZyk7CiAJaW9hcmNiID0gJmlwcl9jbWQtPmlvYXJjYjsKQEAgLTc0NzMsNiArNzQ3OCwyOSBAQAogfQogCiAvKioKKyAqIGlwcl9yZXNldF9nZXRfdW5pdF9jaGVja19qb2IgLSBDYWxsIHRvIGdldCB0aGUgdW5pdCBjaGVjayBidWZmZXIuCisgKiBAaXByX2NtZDoJaXByIGNvbW1hbmQgc3RydWN0CisgKgorICogRGVzY3JpcHRpb246IFRoaXMgZnVuY3Rpb24gd2lsbCBjYWxsIHRvIGdldCB0aGUgdW5pdCBjaGVjayBidWZmZXIuCisgKgorICogUmV0dXJuIHZhbHVlOgorICoJSVBSX1JDX0pPQl9SRVRVUk4KKyAqKi8KK3N0YXRpYyBpbnQgaXByX3Jlc2V0X2dldF91bml0X2NoZWNrX2pvYihzdHJ1Y3QgaXByX2NtbmQgKmlwcl9jbWQpCit7CisJc3RydWN0IGlwcl9pb2FfY2ZnICppb2FfY2ZnID0gaXByX2NtZC0+aW9hX2NmZzsKKworCUVOVEVSOworCWlvYV9jZmctPmlvYV91bml0X2NoZWNrZWQgPSAwOworCWlwcl9nZXRfdW5pdF9jaGVja19idWZmZXIoaW9hX2NmZyk7CisJaXByX2NtZC0+am9iX3N0ZXAgPSBpcHJfcmVzZXRfYWxlcnQ7CisJaXByX3Jlc2V0X3N0YXJ0X3RpbWVyKGlwcl9jbWQsIDApOworCisJTEVBVkU7CisJcmV0dXJuIElQUl9SQ19KT0JfUkVUVVJOOworfQorCisvKioKICAqIGlwcl9yZXNldF9yZXN0b3JlX2NmZ19zcGFjZSAtIFJlc3RvcmUgUENJIGNvbmZpZyBzcGFjZS4KICAqIEBpcHJfY21kOglpcHIgY29tbWFuZCBzdHJ1Y3QKICAqCkBAIC03NTEyLDExICs3NTQwLDE3IEBACiAJfQogCiAJaWYgKGlvYV9jZmctPmlvYV91bml0X2NoZWNrZWQpIHsKLQkJaW9hX2NmZy0+aW9hX3VuaXRfY2hlY2tlZCA9IDA7Ci0JCWlwcl9nZXRfdW5pdF9jaGVja19idWZmZXIoaW9hX2NmZyk7Ci0JCWlwcl9jbWQtPmpvYl9zdGVwID0gaXByX3Jlc2V0X2FsZXJ0OwotCQlpcHJfcmVzZXRfc3RhcnRfdGltZXIoaXByX2NtZCwgMCk7Ci0JCXJldHVybiBJUFJfUkNfSk9CX1JFVFVSTjsKKwkJaWYgKGlvYV9jZmctPnNpczY0KSB7CisJCQlpcHJfY21kLT5qb2Jfc3RlcCA9IGlwcl9yZXNldF9nZXRfdW5pdF9jaGVja19qb2I7CisJCQlpcHJfcmVzZXRfc3RhcnRfdGltZXIoaXByX2NtZCwgSVBSX0RVTVBfREVMQVlfVElNRU9VVCk7CisJCQlyZXR1cm4gSVBSX1JDX0pPQl9SRVRVUk47CisJCX0gZWxzZSB7CisJCQlpb2FfY2ZnLT5pb2FfdW5pdF9jaGVja2VkID0gMDsKKwkJCWlwcl9nZXRfdW5pdF9jaGVja19idWZmZXIoaW9hX2NmZyk7CisJCQlpcHJfY21kLT5qb2Jfc3RlcCA9IGlwcl9yZXNldF9hbGVydDsKKwkJCWlwcl9yZXNldF9zdGFydF90aW1lcihpcHJfY21kLCAwKTsKKwkJCXJldHVybiBJUFJfUkNfSk9CX1JFVFVSTjsKKwkJfQogCX0KIAogCWlmIChpb2FfY2ZnLT5pbl9pb2FfYnJpbmdkb3duKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaXByLmggYi9kcml2ZXJzL3Njc2kvaXByLmgKaW5kZXggYjI4YTAwZi4uMTNmNDI1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2lwci5oCisrKyBiL2RyaXZlcnMvc2NzaS9pcHIuaApAQCAtMjE4LDYgKzIxOCw4IEBACiAjZGVmaW5lIElQUl9XQUlUX0ZPUl9CSVNUX1RJTUVPVVQJCSgyICogSFopCiAjZGVmaW5lIElQUl9QQ0lfUkVTRVRfVElNRU9VVAkJCShIWiAvIDIpCiAjZGVmaW5lIElQUl9EVU1QX1RJTUVPVVQJCQkoMTUgKiBIWikKKyNkZWZpbmUgSVBSX0RVTVBfREVMQVlfU0VDT05EUwkJCTQKKyNkZWZpbmUgSVBSX0RVTVBfREVMQVlfVElNRU9VVAkJCShJUFJfRFVNUF9ERUxBWV9TRUNPTkRTICogSFopCiAKIC8qCiAgKiBTQ1NJIExpdGVyYWxzCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbGliZmMvZmNfZXhjaC5jIGIvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2V4Y2guYwppbmRleCBlYzJhMWFlLi5kMjEzNjdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbGliZmMvZmNfZXhjaC5jCisrKyBiL2RyaXZlcnMvc2NzaS9saWJmYy9mY19leGNoLmMKQEAgLTY3LDYgKzY3LDExIEBACiBzdHJ1Y3QgZmNfZXhjaF9wb29sIHsKIAl1MTYJCSBuZXh0X2luZGV4OwogCXUxNgkJIHRvdGFsX2V4Y2hlczsKKworCS8qIHR3byBjYWNoZSBvZiBmcmVlIHNsb3QgaW4gZXhjaCBhcnJheSAqLworCXUxNgkJIGxlZnQ7CisJdTE2CQkgcmlnaHQ7CisKIAlzcGlubG9ja190CSBsb2NrOwogCXN0cnVjdCBsaXN0X2hlYWQgZXhfbGlzdDsKIH07CkBAIC0xMDgsNyArMTEzLDYgQEAKIAkJYXRvbWljX3Qgbm9uX2Jsc19yZXNwOwogCX0gc3RhdHM7CiB9OwotI2RlZmluZQlmY19zZXFfZXhjaChzcCkgY29udGFpbmVyX29mKHNwLCBzdHJ1Y3QgZmNfZXhjaCwgc2VxKQogCiAvKioKICAqIHN0cnVjdCBmY19leGNoX21ncl9hbmNob3IgLSBwcmltYXJ5IHN0cnVjdHVyZSBmb3IgbGlzdCBvZiBFTXMKQEAgLTM5NywxMyArNDAxLDIzIEBACiBzdGF0aWMgdm9pZCBmY19leGNoX2RlbGV0ZShzdHJ1Y3QgZmNfZXhjaCAqZXApCiB7CiAJc3RydWN0IGZjX2V4Y2hfcG9vbCAqcG9vbDsKKwl1MTYgaW5kZXg7CiAKIAlwb29sID0gZXAtPnBvb2w7CiAJc3Bpbl9sb2NrX2JoKCZwb29sLT5sb2NrKTsKIAlXQVJOX09OKHBvb2wtPnRvdGFsX2V4Y2hlcyA8PSAwKTsKIAlwb29sLT50b3RhbF9leGNoZXMtLTsKLQlmY19leGNoX3B0cl9zZXQocG9vbCwgKGVwLT54aWQgLSBlcC0+ZW0tPm1pbl94aWQpID4+IGZjX2NwdV9vcmRlciwKLQkJCU5VTEwpOworCisJLyogdXBkYXRlIGNhY2hlIG9mIGZyZWUgc2xvdCAqLworCWluZGV4ID0gKGVwLT54aWQgLSBlcC0+ZW0tPm1pbl94aWQpID4+IGZjX2NwdV9vcmRlcjsKKwlpZiAocG9vbC0+bGVmdCA9PSBGQ19YSURfVU5LTk9XTikKKwkJcG9vbC0+bGVmdCA9IGluZGV4OworCWVsc2UgaWYgKHBvb2wtPnJpZ2h0ID09IEZDX1hJRF9VTktOT1dOKQorCQlwb29sLT5yaWdodCA9IGluZGV4OworCWVsc2UKKwkJcG9vbC0+bmV4dF9pbmRleCA9IGluZGV4OworCisJZmNfZXhjaF9wdHJfc2V0KHBvb2wsIGluZGV4LCBOVUxMKTsKIAlsaXN0X2RlbCgmZXAtPmV4X2xpc3QpOwogCXNwaW5fdW5sb2NrX2JoKCZwb29sLT5sb2NrKTsKIAlmY19leGNoX3JlbGVhc2UoZXApOwkvKiBkcm9wIGhvbGQgZm9yIGV4Y2ggaW4gbXAgKi8KQEAgLTYzNiwxMCArNjUwLDEzIEBACiAJCWlmIChlX3N0YXQgJiBFU0JfU1RfQUJOT1JNQUwpCiAJCQlyYyA9IGZjX2V4Y2hfZG9uZV9sb2NrZWQoZXApOwogCQlzcGluX3VubG9ja19iaCgmZXAtPmV4X2xvY2spOwotCQlpZiAoIXJjKQotCQkJZmNfZXhjaF9kZWxldGUoZXApOwogCQlpZiAocmVzcCkKIAkJCXJlc3Aoc3AsIEVSUl9QVFIoLUZDX0VYX1RJTUVPVVQpLCBhcmcpOworCQlpZiAoIXJjKSB7CisJCQkvKiBkZWxldGUgdGhlIGV4Y2hhbmdlIGlmIGl0J3MgYWxyZWFkeSBiZWluZyBhYm9ydGVkICovCisJCQlmY19leGNoX2RlbGV0ZShlcCk7CisJCQlyZXR1cm47CisJCX0KIAkJZmNfc2VxX2V4Y2hfYWJvcnQoc3AsIDIgKiBlcC0+cl9hX3Rvdik7CiAJCWdvdG8gZG9uZTsKIAl9CkBAIC02NzksNiArNjk2LDE5IEBACiAJcG9vbCA9IHBlcl9jcHVfcHRyKG1wLT5wb29sLCBjcHUpOwogCXNwaW5fbG9ja19iaCgmcG9vbC0+bG9jayk7CiAJcHV0X2NwdSgpOworCisJLyogcGVlayBjYWNoZSBvZiBmcmVlIHNsb3QgKi8KKwlpZiAocG9vbC0+bGVmdCAhPSBGQ19YSURfVU5LTk9XTikgeworCQlpbmRleCA9IHBvb2wtPmxlZnQ7CisJCXBvb2wtPmxlZnQgPSBGQ19YSURfVU5LTk9XTjsKKwkJZ290byBoaXQ7CisJfQorCWlmIChwb29sLT5yaWdodCAhPSBGQ19YSURfVU5LTk9XTikgeworCQlpbmRleCA9IHBvb2wtPnJpZ2h0OworCQlwb29sLT5yaWdodCA9IEZDX1hJRF9VTktOT1dOOworCQlnb3RvIGhpdDsKKwl9CisKIAlpbmRleCA9IHBvb2wtPm5leHRfaW5kZXg7CiAJLyogYWxsb2NhdGUgbmV3IGV4Y2ggZnJvbSBwb29sICovCiAJd2hpbGUgKGZjX2V4Y2hfcHRyX2dldChwb29sLCBpbmRleCkpIHsKQEAgLTY4Nyw3ICs3MTcsNyBAQAogCQkJZ290byBlcnI7CiAJfQogCXBvb2wtPm5leHRfaW5kZXggPSBpbmRleCA9PSBtcC0+cG9vbF9tYXhfaW5kZXggPyAwIDogaW5kZXggKyAxOwotCitoaXQ6CiAJZmNfZXhjaF9ob2xkKGVwKTsJLyogaG9sZCBmb3IgZXhjaCBpbiBtcCAqLwogCXNwaW5fbG9ja19pbml0KCZlcC0+ZXhfbG9jayk7CiAJLyoKQEAgLTEyNDcsNyArMTI3Nyw3IEBACiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVtYSwgJmxwb3J0LT5lbWFfbGlzdCwgZW1hX2xpc3QpCiAJCWlmICgoIWVtYS0+bWF0Y2ggfHwgZW1hLT5tYXRjaChmcCkpICYmCi0JCSAgICBmY19zZXFfbG9va3VwX3JlY2lwKGxwb3J0LCBlbWEtPm1wLCBmcCkgIT0gRkNfUkpUX05PTkUpCisJCSAgICBmY19zZXFfbG9va3VwX3JlY2lwKGxwb3J0LCBlbWEtPm1wLCBmcCkgPT0gRkNfUkpUX05PTkUpCiAJCQlicmVhazsKIAlyZXR1cm4gZnJfc2VxKGZwKTsKIH0KQEAgLTEzNDMsNyArMTM3Myw3IEBACiAJfQogCWlmIChlcC0+ZXNiX3N0YXQgJiBFU0JfU1RfQ09NUExFVEUpIHsKIAkJYXRvbWljX2luYygmbXAtPnN0YXRzLnhpZF9ub3RfZm91bmQpOwotCQlnb3RvIG91dDsKKwkJZ290byByZWw7CiAJfQogCWlmIChlcC0+cnhpZCA9PSBGQ19YSURfVU5LTk9XTikKIAkJZXAtPnJ4aWQgPSBudG9ocyhmaC0+ZmhfcnhfaWQpOwpAQCAtMjE4MSw2ICsyMjExLDggQEAKIAkJZ290byBmcmVlX21lbXBvb2w7CiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewogCQlwb29sID0gcGVyX2NwdV9wdHIobXAtPnBvb2wsIGNwdSk7CisJCXBvb2wtPmxlZnQgPSBGQ19YSURfVU5LTk9XTjsKKwkJcG9vbC0+cmlnaHQgPSBGQ19YSURfVU5LTk9XTjsKIAkJc3Bpbl9sb2NrX2luaXQoJnBvb2wtPmxvY2spOwogCQlJTklUX0xJU1RfSEVBRCgmcG9vbC0+ZXhfbGlzdCk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2ZjcC5jIGIvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2ZjcC5jCmluZGV4IDI5MjQzNjMuLmNkYzA2Y2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9saWJmYy9mY19mY3AuYworKysgYi9kcml2ZXJzL3Njc2kvbGliZmMvZmNfZmNwLmMKQEAgLTU3LDYgKzU3LDkgQEAKICNkZWZpbmUgRkNfU1JCX1JFQUQJCSgxIDw8IDEpCiAjZGVmaW5lIEZDX1NSQl9XUklURQkJKDEgPDwgMCkKIAorLyogY29uc3RhbnQgYWRkZWQgdG8gZV9kX3RvdiB0aW1lb3V0IHRvIGdldCByZWNfdG92IHZhbHVlICovCisjZGVmaW5lIFJFQ19UT1ZfQ09OU1QJCTEKKwogLyoKICAqIFRoZSBTQ3AucHRyIHNob3VsZCBiZSB0ZXN0ZWQgYW5kIHNldCB1bmRlciB0aGUgc2NzaV9wa3RfcXVldWUgbG9jawogICovCkBAIC05Niw3ICs5OSw3IEBACiBzdGF0aWMgdm9pZCBmY19mY3BfY29tcGxldGVfbG9ja2VkKHN0cnVjdCBmY19mY3BfcGt0ICopOwogc3RhdGljIHZvaWQgZmNfdG1fZG9uZShzdHJ1Y3QgZmNfc2VxICosIHN0cnVjdCBmY19mcmFtZSAqLCB2b2lkICopOwogc3RhdGljIHZvaWQgZmNfZmNwX2Vycm9yKHN0cnVjdCBmY19mY3BfcGt0ICosIHN0cnVjdCBmY19mcmFtZSAqKTsKLXN0YXRpYyB2b2lkIGZjX2ZjcF9yZWNvdmVyeShzdHJ1Y3QgZmNfZmNwX3BrdCAqKTsKK3N0YXRpYyB2b2lkIGZjX2ZjcF9yZWNvdmVyeShzdHJ1Y3QgZmNfZmNwX3BrdCAqLCB1OCBjb2RlKTsKIHN0YXRpYyB2b2lkIGZjX2ZjcF90aW1lb3V0KHVuc2lnbmVkIGxvbmcpOwogc3RhdGljIHZvaWQgZmNfZmNwX3JlYyhzdHJ1Y3QgZmNfZmNwX3BrdCAqKTsKIHN0YXRpYyB2b2lkIGZjX2ZjcF9yZWNfZXJyb3Ioc3RydWN0IGZjX2ZjcF9wa3QgKiwgc3RydWN0IGZjX2ZyYW1lICopOwpAQCAtMTIwLDE0ICsxMjMsMTMgQEAKICNkZWZpbmUgRkNfREFUQV9VTkRSVU4JCTcKICNkZWZpbmUgRkNfRVJST1IJCTgKICNkZWZpbmUgRkNfSFJEX0VSUk9SCQk5Ci0jZGVmaW5lIEZDX0NNRF9SRUNPVkVSWQkJMTAKKyNkZWZpbmUgRkNfQ1JDX0VSUk9SCQkxMAorI2RlZmluZSBGQ19USU1FRF9PVVQJCTExCiAKIC8qCiAgKiBFcnJvciByZWNvdmVyeSB0aW1lb3V0IHZhbHVlcy4KICAqLwotI2RlZmluZSBGQ19TQ1NJX0VSX1RJTUVPVVQJKDEwICogSFopCiAjZGVmaW5lIEZDX1NDU0lfVE1fVE9WCQkoMTAgKiBIWikKLSNkZWZpbmUgRkNfU0NTSV9SRUNfVE9WCQkoMiAqIEhaKQogI2RlZmluZSBGQ19IT1NUX1JFU0VUX1RJTUVPVVQJKDMwICogSFopCiAjZGVmaW5lIEZDX0NBTl9RVUVVRV9QRVJJT0QJKDYwICogSFopCiAKQEAgLTQzOCw2ICs0NDAsNyBAQAogCXZvaWQgKmJ1ZjsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwogCXUzMiBuZW50czsKKwl1OCBob3N0X2Jjb2RlID0gRkNfQ09NUExFVEU7CiAKIAlmaCA9IGZjX2ZyYW1lX2hlYWRlcl9nZXQoZnApOwogCW9mZnNldCA9IG50b2hsKGZoLT5maF9wYXJtX29mZnNldCk7CkBAIC00NDYsMTMgKzQ0OSwxNiBAQAogCWJ1ZiA9IGZjX2ZyYW1lX3BheWxvYWRfZ2V0KGZwLCAwKTsKIAogCS8qCi0JICogaWYgdGhpcyBJL08gaXMgZGRwZWQgdGhlbiBjbGVhciBpdAotCSAqIGFuZCBpbml0aWF0ZSByZWNvdmVyeSBzaW5jZSBkYXRhCi0JICogZnJhbWVzIGFyZSBleHBlY3RlZCB0byBiZSBwbGFjZWQKLQkgKiBkaXJlY3RseSBpbiB0aGF0IGNhc2UuCisJICogaWYgdGhpcyBJL08gaXMgZGRwZWQgdGhlbiBjbGVhciBpdCBhbmQgaW5pdGlhdGUgcmVjb3Zlcnkgc2luY2UgZGF0YQorCSAqIGZyYW1lcyBhcmUgZXhwZWN0ZWQgdG8gYmUgcGxhY2VkIGRpcmVjdGx5IGluIHRoYXQgY2FzZS4KKwkgKgorCSAqIEluZGljYXRlIGVycm9yIHRvIHNjc2ktbWwgYmVjYXVzZSBzb21ldGhpbmcgd2VudCB3cm9uZyB3aXRoIHRoZQorCSAqIGRkcCBoYW5kbGluZyB0byBnZXQgdXMgaGVyZS4KIAkgKi8KIAlpZiAoZnNwLT54ZmVyX2RkcCAhPSBGQ19YSURfVU5LTk9XTikgewogCQlmY19mY3BfZGRwX2RvbmUoZnNwKTsKKwkJRkNfRkNQX0RCRyhmc3AsICJERFAgSS9PIGluIGZjX2ZjcF9yZWN2X2RhdGEgc2V0IEVSUk9SXG4iKTsKKwkJaG9zdF9iY29kZSA9IEZDX0VSUk9SOwogCQlnb3RvIGVycjsKIAl9CiAJaWYgKG9mZnNldCArIGxlbiA+IGZzcC0+ZGF0YV9sZW4pIHsKQEAgLTQ2Miw2ICs0NjgsOSBAQAogCQkJZ290byBjcmNfZXJyOwogCQlGQ19GQ1BfREJHKGZzcCwgImRhdGEgcmVjZWl2ZWQgcGFzdCBlbmQuIGxlbiAlenggb2Zmc2V0ICV6eCAiCiAJCQkgICAiZGF0YV9sZW4gJXhcbiIsIGxlbiwgb2Zmc2V0LCBmc3AtPmRhdGFfbGVuKTsKKworCQkvKiBEYXRhIGlzIGNvcnJ1cHRlZCBpbmRpY2F0ZSBzY3NpLW1sIHNob3VsZCByZXRyeSAqLworCQlob3N0X2Jjb2RlID0gRkNfREFUQV9PVlJSVU47CiAJCWdvdG8gZXJyOwogCX0KIAlpZiAob2Zmc2V0ICE9IGZzcC0+eGZlcl9sZW4pCkBAIC00OTgsOCArNTA3LDEwIEBACiAJCQkgKiBJZiBzbywgd2UgbmVlZCB0byByZXRyeSB0aGUgZW50aXJlIG9wZXJhdGlvbi4KIAkJCSAqIE90aGVyd2lzZSwgaWdub3JlIGl0LgogCQkJICovCi0JCQlpZiAoZnNwLT5zdGF0ZSAmIEZDX1NSQl9ESVNDT05USUcpCisJCQlpZiAoZnNwLT5zdGF0ZSAmIEZDX1NSQl9ESVNDT05USUcpIHsKKwkJCQlob3N0X2Jjb2RlID0gRkNfQ1JDX0VSUk9SOwogCQkJCWdvdG8gZXJyOworCQkJfQogCQkJcmV0dXJuOwogCQl9CiAJfQpAQCAtNTE3LDcgKzUyOCw3IEBACiAJCWZjX2ZjcF9jb21wbGV0ZV9sb2NrZWQoZnNwKTsKIAlyZXR1cm47CiBlcnI6Ci0JZmNfZmNwX3JlY292ZXJ5KGZzcCk7CisJZmNfZmNwX3JlY292ZXJ5KGZzcCwgaG9zdF9iY29kZSk7CiB9CiAKIC8qKgpAQCAtOTYyLDcgKzk3MywxMyBAQAogCQl9CiAJCWxwb3J0LT50dC5leGNoX2RvbmUoc2VxKTsKIAl9Ci0JZmNfaW9fY29tcGwoZnNwKTsKKwkvKgorCSAqIFNvbWUgcmVzZXRzIGRyaXZlbiBieSBTQ1NJIGFyZSBub3QgSS9PcyBhbmQgZG8gbm90IGhhdmUKKwkgKiBTQ1NJIGNvbW1hbmRzIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVxdWVzdHMuIFdlIHNob3VsZCBub3QKKwkgKiBjYWxsIEkvTyBjb21wbGV0aW9uIGlmIHdlIGRvIG5vdCBoYXZlIGEgU0NTSSBjb21tYW5kLgorCSAqLworCWlmIChmc3AtPmNtZCkKKwkJZmNfaW9fY29tcGwoZnNwKTsKIH0KIAogLyoqCkBAIC0xMDczLDYgKzEwOTAsMjEgQEAKIH0KIAogLyoqCisgKiBnZXRfZnNwX3JlY190b3YoKSAtIEhlbHBlciBmdW5jdGlvbiB0byBnZXQgUkVDX1RPVgorICogQGZzcDogdGhlIEZDUCBwYWNrZXQKKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ2V0X2ZzcF9yZWNfdG92KHN0cnVjdCBmY19mY3BfcGt0ICpmc3ApCit7CisJc3RydWN0IGZjX3Jwb3J0ICpycG9ydDsKKwlzdHJ1Y3QgZmNfcnBvcnRfbGliZmNfcHJpdiAqcnByaXY7CisKKwlycG9ydCA9IGZzcC0+cnBvcnQ7CisJcnByaXYgPSBycG9ydC0+ZGRfZGF0YTsKKworCXJldHVybiBycHJpdi0+ZV9kX3RvdiArIFJFQ19UT1ZfQ09OU1Q7Cit9CisKKy8qKgogICogZmNfZmNwX2NtZF9zZW5kKCkgLSBTZW5kIGEgRkNQIGNvbW1hbmQKICAqIEBscG9ydDogVGhlIGxvY2FsIHBvcnQgdG8gc2VuZCB0aGUgY29tbWFuZCBvbgogICogQGZzcDogICBUaGUgRkNQIHBhY2tldCB0aGUgY29tbWFuZCBpcyBvbgpAQCAtMTA4OSw2ICsxMTIxLDcgQEAKIAlzdHJ1Y3QgZmNfcnBvcnRfbGliZmNfcHJpdiAqcnByaXY7CiAJY29uc3Qgc2l6ZV90IGxlbiA9IHNpemVvZihmc3AtPmNkYl9jbWQpOwogCWludCByYyA9IDA7CisJdW5zaWduZWQgaW50IHJlY190b3Y7CiAKIAlpZiAoZmNfZmNwX2xvY2tfcGt0KGZzcCkpCiAJCXJldHVybiAwOwpAQCAtMTExOSwxMCArMTE1MiwxMyBAQAogCWZzcC0+c2VxX3B0ciA9IHNlcTsKIAlmY19mY3BfcGt0X2hvbGQoZnNwKTsJLyogaG9sZCBmb3IgZmNfZmNwX3BrdF9kZXN0cm95ICovCiAKKwlyZWNfdG92ID0gZ2V0X2ZzcF9yZWNfdG92KGZzcCk7CisKIAlzZXR1cF90aW1lcigmZnNwLT50aW1lciwgZmNfZmNwX3RpbWVvdXQsICh1bnNpZ25lZCBsb25nKWZzcCk7Ci0JZmNfZmNwX3RpbWVyX3NldChmc3AsCi0JCQkgKGZzcC0+dGd0X2ZsYWdzICYgRkNfUlBfRkxBR1NfUkVDX1NVUFBPUlRFRCkgPwotCQkJIEZDX1NDU0lfUkVDX1RPViA6IEZDX1NDU0lfRVJfVElNRU9VVCk7CisKKwlpZiAocnByaXYtPmZsYWdzICYgRkNfUlBfRkxBR1NfUkVDX1NVUFBPUlRFRCkKKwkJZmNfZmNwX3RpbWVyX3NldChmc3AsIHJlY190b3YpOworCiB1bmxvY2s6CiAJZmNfZmNwX3VubG9ja19wa3QoZnNwKTsKIAlyZXR1cm4gcmM7CkBAIC0xMTk3LDEzICsxMjMzLDE2IEBACiB7CiAJc3RydWN0IGZjX2ZjcF9wa3QgKmZzcCA9IChzdHJ1Y3QgZmNfZmNwX3BrdCAqKWRhdGE7CiAJc3RydWN0IGZjX2xwb3J0ICpscG9ydCA9IGZzcC0+bHA7CisJdW5zaWduZWQgaW50IHJlY190b3Y7CisKIAlpZiAobHBvcnQtPnR0LmZjcF9jbWRfc2VuZChscG9ydCwgZnNwLCBmY190bV9kb25lKSkgewogCQlpZiAoZnNwLT5yZWNvdl9yZXRyeSsrID49IEZDX01BWF9SRUNPVl9SRVRSWSkKIAkJCXJldHVybjsKIAkJaWYgKGZjX2ZjcF9sb2NrX3BrdChmc3ApKQogCQkJcmV0dXJuOworCQlyZWNfdG92ID0gZ2V0X2ZzcF9yZWNfdG92KGZzcCk7CiAJCXNldHVwX3RpbWVyKCZmc3AtPnRpbWVyLCBmY19sdW5fcmVzZXRfc2VuZCwgKHVuc2lnbmVkIGxvbmcpZnNwKTsKLQkJZmNfZmNwX3RpbWVyX3NldChmc3AsIEZDX1NDU0lfUkVDX1RPVik7CisJCWZjX2ZjcF90aW1lcl9zZXQoZnNwLCByZWNfdG92KTsKIAkJZmNfZmNwX3VubG9ja19wa3QoZnNwKTsKIAl9CiB9CkBAIC0xMjgyLDI3ICsxMzIxLDI3IEBACiAJCSAqCiAJCSAqIHNjc2ktZWggd2lsbCBlc2NhbGF0ZSBmb3Igd2hlbiBlaXRoZXIgaGFwcGVucy4KIAkJICovCi0JCXJldHVybjsKKwkJZ290byBvdXQ7CiAJfQogCiAJaWYgKGZjX2ZjcF9sb2NrX3BrdChmc3ApKQotCQlyZXR1cm47CisJCWdvdG8gb3V0OwogCiAJLyoKIAkgKiByYWNlZCB3aXRoIGVoIHRpbWVvdXQgaGFuZGxlci4KIAkgKi8KLQlpZiAoIWZzcC0+c2VxX3B0ciB8fCAhZnNwLT53YWl0X2Zvcl9jb21wKSB7Ci0JCXNwaW5fdW5sb2NrX2JoKCZmc3AtPnNjc2lfcGt0X2xvY2spOwotCQlyZXR1cm47Ci0JfQorCWlmICghZnNwLT5zZXFfcHRyIHx8ICFmc3AtPndhaXRfZm9yX2NvbXApCisJCWdvdG8gb3V0X3VubG9jazsKIAogCWZoID0gZmNfZnJhbWVfaGVhZGVyX2dldChmcCk7CiAJaWYgKGZoLT5maF90eXBlICE9IEZDX1RZUEVfQkxTKQogCQlmY19mY3BfcmVzcChmc3AsIGZwKTsKIAlmc3AtPnNlcV9wdHIgPSBOVUxMOwogCWZzcC0+bHAtPnR0LmV4Y2hfZG9uZShzZXEpOwotCWZjX2ZyYW1lX2ZyZWUoZnApOworb3V0X3VubG9jazoKIAlmY19mY3BfdW5sb2NrX3BrdChmc3ApOworb3V0OgorCWZjX2ZyYW1lX2ZyZWUoZnApOwogfQogCiAvKioKQEAgLTEzNDEsMTMgKzEzODAsMTAgQEAKIAogCWlmIChycHJpdi0+ZmxhZ3MgJiBGQ19SUF9GTEFHU19SRUNfU1VQUE9SVEVEKQogCQlmY19mY3BfcmVjKGZzcCk7Ci0JZWxzZSBpZiAodGltZV9hZnRlcl9lcShmc3AtPmxhc3RfcGt0X3RpbWUgKyAoRkNfU0NTSV9FUl9USU1FT1VUIC8gMiksCi0JCQkgICAgICAgamlmZmllcykpCi0JCWZjX2ZjcF90aW1lcl9zZXQoZnNwLCBGQ19TQ1NJX0VSX1RJTUVPVVQpOwogCWVsc2UgaWYgKGZzcC0+c3RhdGUgJiBGQ19TUkJfUkNWX1NUQVRVUykKIAkJZmNfZmNwX2NvbXBsZXRlX2xvY2tlZChmc3ApOwogCWVsc2UKLQkJZmNfZmNwX3JlY292ZXJ5KGZzcCk7CisJCWZjX2ZjcF9yZWNvdmVyeShmc3AsIEZDX1RJTUVEX09VVCk7CiAJZnNwLT5zdGF0ZSAmPSB+RkNfU1JCX0ZDUF9QUk9DRVNTSU5HX1RNTzsKIHVubG9jazoKIAlmY19mY3BfdW5sb2NrX3BrdChmc3ApOwpAQCAtMTM3Myw2ICsxNDA5LDcgQEAKIAkJZmNfZmNwX2NvbXBsZXRlX2xvY2tlZChmc3ApOwogCQlyZXR1cm47CiAJfQorCiAJZnAgPSBmY19mY3BfZnJhbWVfYWxsb2MobHBvcnQsIHNpemVvZihzdHJ1Y3QgZmNfZWxzX3JlYykpOwogCWlmICghZnApCiAJCWdvdG8gcmV0cnk7CkBAIC0xMzgzLDE1ICsxNDIwLDE1IEBACiAJCSAgICAgICBGQ19GQ1RMX1JFUSwgMCk7CiAJaWYgKGxwb3J0LT50dC5lbHNjdF9zZW5kKGxwb3J0LCBycG9ydC0+cG9ydF9pZCwgZnAsIEVMU19SRUMsCiAJCQkJIGZjX2ZjcF9yZWNfcmVzcCwgZnNwLAotCQkJCSBqaWZmaWVzX3RvX21zZWNzKEZDX1NDU0lfUkVDX1RPVikpKSB7CisJCQkJIDIgKiBscG9ydC0+cl9hX3RvdikpIHsKIAkJZmNfZmNwX3BrdF9ob2xkKGZzcCk7CQkvKiBob2xkIHdoaWxlIFJFQyBvdXRzdGFuZGluZyAqLwogCQlyZXR1cm47CiAJfQogcmV0cnk6CiAJaWYgKGZzcC0+cmVjb3ZfcmV0cnkrKyA8IEZDX01BWF9SRUNPVl9SRVRSWSkKLQkJZmNfZmNwX3RpbWVyX3NldChmc3AsIEZDX1NDU0lfUkVDX1RPVik7CisJCWZjX2ZjcF90aW1lcl9zZXQoZnNwLCBnZXRfZnNwX3JlY190b3YoZnNwKSk7CiAJZWxzZQotCQlmY19mY3BfcmVjb3ZlcnkoZnNwKTsKKwkJZmNfZmNwX3JlY292ZXJ5KGZzcCwgRkNfVElNRURfT1VUKTsKIH0KIAogLyoqCkBAIC0xNDQ1LDcgKzE0ODIsNiBAQAogCQkJICogbWFraW5nIHByb2dyZXNzLgogCQkJICovCiAJCQlycHJpdi0+ZmxhZ3MgJj0gfkZDX1JQX0ZMQUdTX1JFQ19TVVBQT1JURUQ7Ci0JCQlmY19mY3BfdGltZXJfc2V0KGZzcCwgRkNfU0NTSV9FUl9USU1FT1VUKTsKIAkJCWJyZWFrOwogCQljYXNlIEVMU19SSlRfTE9HSUM6CiAJCWNhc2UgRUxTX1JKVF9VTkFCOgpAQCAtMTQ2MCw3ICsxNDk2LDcgQEAKIAkJCQlmY19mY3BfcmV0cnlfY21kKGZzcCk7CiAJCQkJYnJlYWs7CiAJCQl9Ci0JCQlmY19mY3BfcmVjb3ZlcnkoZnNwKTsKKwkJCWZjX2ZjcF9yZWNvdmVyeShmc3AsIEZDX0VSUk9SKTsKIAkJCWJyZWFrOwogCQl9CiAJfSBlbHNlIGlmIChvcGNvZGUgPT0gRUxTX0xTX0FDQykgewpAQCAtMTQ5OCwxMiArMTUzNCwxMiBAQAogCQkJfQogCQkJZmNfZmNwX3Nycihmc3AsIHJfY3RsLCBvZmZzZXQpOwogCQl9IGVsc2UgaWYgKGVfc3RhdCAmIEVTQl9TVF9TRVFfSU5JVCkgewotCisJCQl1bnNpZ25lZCBpbnQgcmVjX3RvdiA9IGdldF9mc3BfcmVjX3Rvdihmc3ApOwogCQkJLyoKIAkJCSAqIFRoZSByZW1vdGUgcG9ydCBoYXMgdGhlIGluaXRpYXRpdmUsIHNvIGp1c3QKIAkJCSAqIGtlZXAgd2FpdGluZyBmb3IgaXQgdG8gY29tcGxldGUuCiAJCQkgKi8KLQkJCWZjX2ZjcF90aW1lcl9zZXQoZnNwLCBGQ19TQ1NJX1JFQ19UT1YpOworCQkJZmNfZmNwX3RpbWVyX3NldChmc3AsIHJlY190b3YpOwogCQl9IGVsc2UgewogCiAJCQkvKgpAQCAtMTU3NSw3ICsxNjExLDcgQEAKIAkJaWYgKGZzcC0+cmVjb3ZfcmV0cnkrKyA8IEZDX01BWF9SRUNPVl9SRVRSWSkKIAkJCWZjX2ZjcF9yZWMoZnNwKTsKIAkJZWxzZQotCQkJZmNfZmNwX3JlY292ZXJ5KGZzcCk7CisJCQlmY19mY3BfcmVjb3ZlcnkoZnNwLCBGQ19FUlJPUik7CiAJCWJyZWFrOwogCX0KIAlmY19mY3BfdW5sb2NrX3BrdChmc3ApOwpAQCAtMTU4Nyw5ICsxNjIzLDkgQEAKICAqIGZjX2ZjcF9yZWNvdmVyeSgpIC0gSGFuZGxlciBmb3IgZmNwX3BrdCByZWNvdmVyeQogICogQGZzcDogVGhlIEZDUCBwa3QgdGhhdCBuZWVkcyB0byBiZSBhYm9ydGVkCiAgKi8KLXN0YXRpYyB2b2lkIGZjX2ZjcF9yZWNvdmVyeShzdHJ1Y3QgZmNfZmNwX3BrdCAqZnNwKQorc3RhdGljIHZvaWQgZmNfZmNwX3JlY292ZXJ5KHN0cnVjdCBmY19mY3BfcGt0ICpmc3AsIHU4IGNvZGUpCiB7Ci0JZnNwLT5zdGF0dXNfY29kZSA9IEZDX0NNRF9SRUNPVkVSWTsKKwlmc3AtPnN0YXR1c19jb2RlID0gY29kZTsKIAlmc3AtPmNkYl9zdGF0dXMgPSAwOwogCWZzcC0+aW9fc3RhdHVzID0gMDsKIAkvKgpAQCAtMTYxNiw2ICsxNjUyLDcgQEAKIAlzdHJ1Y3QgZmNwX3NyciAqc3JyOwogCXN0cnVjdCBmY19mcmFtZSAqZnA7CiAJdTggY2RiX29wOworCXVuc2lnbmVkIGludCByZWNfdG92OwogCiAJcnBvcnQgPSBmc3AtPnJwb3J0OwogCXJwcml2ID0gcnBvcnQtPmRkX2RhdGE7CkBAIC0xNjQwLDggKzE2NzcsOSBAQAogCQkgICAgICAgcnByaXYtPmxvY2FsX3BvcnQtPnBvcnRfaWQsIEZDX1RZUEVfRkNQLAogCQkgICAgICAgRkNfRkNUTF9SRVEsIDApOwogCisJcmVjX3RvdiA9IGdldF9mc3BfcmVjX3Rvdihmc3ApOwogCXNlcSA9IGxwb3J0LT50dC5leGNoX3NlcV9zZW5kKGxwb3J0LCBmcCwgZmNfZmNwX3Nycl9yZXNwLCBOVUxMLAotCQkJCSAgICAgIGZzcCwgamlmZmllc190b19tc2VjcyhGQ19TQ1NJX1JFQ19UT1YpKTsKKwkJCQkgICAgICBmc3AsIGppZmZpZXNfdG9fbXNlY3MocmVjX3RvdikpOwogCWlmICghc2VxKQogCQlnb3RvIHJldHJ5OwogCkBAIC0xNjY1LDYgKzE3MDMsNyBAQAogewogCXN0cnVjdCBmY19mY3BfcGt0ICpmc3AgPSBhcmc7CiAJc3RydWN0IGZjX2ZyYW1lX2hlYWRlciAqZmg7CisJdW5zaWduZWQgaW50IHJlY190b3Y7CiAKIAlpZiAoSVNfRVJSKGZwKSkgewogCQlmY19mY3Bfc3JyX2Vycm9yKGZzcCwgZnApOwpAQCAtMTY5MSwxMSArMTczMCwxMiBAQAogCXN3aXRjaCAoZmNfZnJhbWVfcGF5bG9hZF9vcChmcCkpIHsKIAljYXNlIEVMU19MU19BQ0M6CiAJCWZzcC0+cmVjb3ZfcmV0cnkgPSAwOwotCQlmY19mY3BfdGltZXJfc2V0KGZzcCwgRkNfU0NTSV9SRUNfVE9WKTsKKwkJcmVjX3RvdiA9IGdldF9mc3BfcmVjX3Rvdihmc3ApOworCQlmY19mY3BfdGltZXJfc2V0KGZzcCwgcmVjX3Rvdik7CiAJCWJyZWFrOwogCWNhc2UgRUxTX0xTX1JKVDoKIAlkZWZhdWx0OgotCQlmY19mY3BfcmVjb3ZlcnkoZnNwKTsKKwkJZmNfZmNwX3JlY292ZXJ5KGZzcCwgRkNfRVJST1IpOwogCQlicmVhazsKIAl9CiAJZmNfZmNwX3VubG9ja19wa3QoZnNwKTsKQEAgLTE3MjEsNyArMTc2MSw3IEBACiAJCWlmIChmc3AtPnJlY292X3JldHJ5KysgPCBGQ19NQVhfUkVDT1ZfUkVUUlkpCiAJCQlmY19mY3BfcmVjKGZzcCk7CiAJCWVsc2UKLQkJCWZjX2ZjcF9yZWNvdmVyeShmc3ApOworCQkJZmNfZmNwX3JlY292ZXJ5KGZzcCwgRkNfVElNRURfT1VUKTsKIAkJYnJlYWs7CiAJY2FzZSAtRkNfRVhfQ0xPU0VEOgkJCS8qIGUuZy4sIGxpbmsgZmFpbHVyZSAqLwogCQkvKiBmYWxsIHRocm91Z2ggKi8KQEAgLTE4MjAsMTkgKzE4NjAsMTcgQEAKIAlpZiAoc2NfY21kLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBETUFfRlJPTV9ERVZJQ0UpIHsKIAkJZnNwLT5yZXFfZmxhZ3MgPSBGQ19TUkJfUkVBRDsKIAkJc3RhdHMtPklucHV0UmVxdWVzdHMrKzsKLQkJc3RhdHMtPklucHV0TWVnYWJ5dGVzID0gZnNwLT5kYXRhX2xlbjsKKwkJc3RhdHMtPklucHV0Qnl0ZXMgKz0gZnNwLT5kYXRhX2xlbjsKIAl9IGVsc2UgaWYgKHNjX2NtZC0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gRE1BX1RPX0RFVklDRSkgewogCQlmc3AtPnJlcV9mbGFncyA9IEZDX1NSQl9XUklURTsKIAkJc3RhdHMtPk91dHB1dFJlcXVlc3RzKys7Ci0JCXN0YXRzLT5PdXRwdXRNZWdhYnl0ZXMgPSBmc3AtPmRhdGFfbGVuOworCQlzdGF0cy0+T3V0cHV0Qnl0ZXMgKz0gZnNwLT5kYXRhX2xlbjsKIAl9IGVsc2UgewogCQlmc3AtPnJlcV9mbGFncyA9IDA7CiAJCXN0YXRzLT5Db250cm9sUmVxdWVzdHMrKzsKIAl9CiAJcHV0X2NwdSgpOwogCi0JZnNwLT50Z3RfZmxhZ3MgPSBycHJpdi0+ZmxhZ3M7Ci0KIAlpbml0X3RpbWVyKCZmc3AtPnRpbWVyKTsKIAlmc3AtPnRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylmc3A7CiAKQEAgLTE5NDYsMTggKzE5ODQsMjkgQEAKIAkJYnJlYWs7CiAJY2FzZSBGQ19DTURfQUJPUlRFRDoKIAkJRkNfRkNQX0RCRyhmc3AsICJSZXR1cm5pbmcgRElEX0VSUk9SIHRvIHNjc2ktbWwgIgotCQkJICAgImR1ZSB0byBGQ19DTURfQUJPUlRFRFxuIik7CisJCQkgICJkdWUgdG8gRkNfQ01EX0FCT1JURURcbiIpOwogCQlzY19jbWQtPnJlc3VsdCA9IChESURfRVJST1IgPDwgMTYpIHwgZnNwLT5pb19zdGF0dXM7CiAJCWJyZWFrOwotCWNhc2UgRkNfQ01EX1JFQ09WRVJZOgotCQlzY19jbWQtPnJlc3VsdCA9IChESURfQlVTX0JVU1kgPDwgMTYpIHwgZnNwLT5pb19zdGF0dXM7Ci0JCWJyZWFrOwogCWNhc2UgRkNfQ01EX1JFU0VUOgorCQlGQ19GQ1BfREJHKGZzcCwgIlJldHVybmluZyBESURfUkVTRVQgdG8gc2NzaS1tbCAiCisJCQkgICAiZHVlIHRvIEZDX0NNRF9SRVNFVFxuIik7CiAJCXNjX2NtZC0+cmVzdWx0ID0gKERJRF9SRVNFVCA8PCAxNik7CiAJCWJyZWFrOwogCWNhc2UgRkNfSFJEX0VSUk9SOgorCQlGQ19GQ1BfREJHKGZzcCwgIlJldHVybmluZyBESURfTk9fQ09OTkVDVCB0byBzY3NpLW1sICIKKwkJCSAgICJkdWUgdG8gRkNfSFJEX0VSUk9SXG4iKTsKIAkJc2NfY21kLT5yZXN1bHQgPSAoRElEX05PX0NPTk5FQ1QgPDwgMTYpOwogCQlicmVhazsKKwljYXNlIEZDX0NSQ19FUlJPUjoKKwkJRkNfRkNQX0RCRyhmc3AsICJSZXR1cm5pbmcgRElEX1BBUklUWSB0byBzY3NpLW1sICIKKwkJCSAgICJkdWUgdG8gRkNfQ1JDX0VSUk9SXG4iKTsKKwkJc2NfY21kLT5yZXN1bHQgPSAoRElEX1BBUklUWSA8PCAxNik7CisJCWJyZWFrOworCWNhc2UgRkNfVElNRURfT1VUOgorCQlGQ19GQ1BfREJHKGZzcCwgIlJldHVybmluZyBESURfQlVTX0JVU1kgdG8gc2NzaS1tbCAiCisJCQkgICAiZHVlIHRvIEZDX1RJTUVEX09VVFxuIik7CisJCXNjX2NtZC0+cmVzdWx0ID0gKERJRF9CVVNfQlVTWSA8PCAxNikgfCBmc3AtPmlvX3N0YXR1czsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJRkNfRkNQX0RCRyhmc3AsICJSZXR1cm5pbmcgRElEX0VSUk9SIHRvIHNjc2ktbWwgIgogCQkJICAgImR1ZSB0byB1bmtub3duIGVycm9yXG4iKTsKQEAgLTIwMDQsNyArMjA1Myw3IEBACiAJZnNwID0gQ01EX1NQKHNjX2NtZCk7CiAJaWYgKCFmc3ApIHsKIAkJLyogY29tbWFuZCBjb21wbGV0ZWQgd2hpbGUgc2NzaSBlaCB3YXMgc2V0dGluZyB1cCAqLwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGxwb3J0LT5ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2ktPnNjc2lfcXVldWVfbG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gU1VDQ0VTUzsKIAl9CiAJLyogZ3JhYiBhIHJlZiBzbyB0aGUgZnNwIGFuZCBzY19jbWQgY2Fubm90IGJlIHJlbGFzZWQgZnJvbSB1bmRlciB1cyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2xpYmZjLmggYi9kcml2ZXJzL3Njc2kvbGliZmMvZmNfbGliZmMuaAppbmRleCAxNmQyMTYyLi5lZWEwYzM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbGliZmMvZmNfbGliZmMuaAorKysgYi9kcml2ZXJzL3Njc2kvbGliZmMvZmNfbGliZmMuaApAQCAtNjYsOSArNjYsMjEgQEAKIAogI2RlZmluZSBGQ19GQ1BfREJHKHBrdCwgZm10LCBhcmdzLi4uKQkJCQkJXAogCUZDX0NIRUNLX0xPR0dJTkcoRkNfRkNQX0xPR0dJTkcsCQkJCVwKLQkJCSBwcmludGsoS0VSTl9JTkZPICJob3N0JXU6IGZjcDogJTYuNng6ICIgZm10LAlcCisJewkJCQkJCQkJXAorCQlpZiAoKHBrdCktPnNlcV9wdHIpIHsJCQkJCVwKKwkJCXN0cnVjdCBmY19leGNoICpfZXAgPSBOVUxMOwkJCVwKKwkJCV9lcCA9IGZjX3NlcV9leGNoKChwa3QpLT5zZXFfcHRyKTsJCVwKKwkJCXByaW50ayhLRVJOX0lORk8gImhvc3QldTogZmNwOiAlNi42eDogIgkJXAorCQkJCSJ4aWQgJTA0eC0lMDR4OiAiIGZtdCwJCQlcCiAJCQkJKHBrdCktPmxwLT5ob3N0LT5ob3N0X25vLAkJXAotCQkJCXBrdC0+cnBvcnQtPnBvcnRfaWQsICMjYXJncykpCisJCQkJKHBrdCktPnJwb3J0LT5wb3J0X2lkLAkJCVwKKwkJCQkoX2VwKS0+b3hpZCwgKF9lcCktPnJ4aWQsICMjYXJncyk7CVwKKwkJfSBlbHNlIHsJCQkJCQlcCisJCQlwcmludGsoS0VSTl9JTkZPICJob3N0JXU6IGZjcDogJTYuNng6ICIgZm10LAlcCisJCQkJKHBrdCktPmxwLT5ob3N0LT5ob3N0X25vLAkJXAorCQkJCShwa3QpLT5ycG9ydC0+cG9ydF9pZCwgIyNhcmdzKTsJCVwKKwkJfQkJCQkJCQlcCisJfSkKIAogI2RlZmluZSBGQ19FWENIX0RCRyhleGNoLCBmbXQsIGFyZ3MuLi4pCQkJCQlcCiAJRkNfQ0hFQ0tfTE9HR0lORyhGQ19FWENIX0xPR0dJTkcsCQkJCVwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9saWJmYy9mY19scG9ydC5jIGIvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2xwb3J0LmMKaW5kZXggOWJlNjNlZC4uYzVhMTBmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2xwb3J0LmMKKysrIGIvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2xwb3J0LmMKQEAgLTI4OCw2ICsyODgsOCBAQAogCXN0cnVjdCBmY19scG9ydCAqbHBvcnQgPSBzaG9zdF9wcml2KHNob3N0KTsKIAlzdHJ1Y3QgdGltZXNwZWMgdjAsIHYxOwogCXVuc2lnbmVkIGludCBjcHU7CisJdTY0IGZjcF9pbl9ieXRlcyA9IDA7CisJdTY0IGZjcF9vdXRfYnl0ZXMgPSAwOwogCiAJZmNvZV9zdGF0cyA9ICZscG9ydC0+aG9zdF9zdGF0czsKIAltZW1zZXQoZmNvZV9zdGF0cywgMCwgc2l6ZW9mKHN0cnVjdCBmY19ob3N0X3N0YXRpc3RpY3MpKTsKQEAgLTMxMCwxMCArMzEyLDEyIEBACiAJCWZjb2Vfc3RhdHMtPmZjcF9pbnB1dF9yZXF1ZXN0cyArPSBzdGF0cy0+SW5wdXRSZXF1ZXN0czsKIAkJZmNvZV9zdGF0cy0+ZmNwX291dHB1dF9yZXF1ZXN0cyArPSBzdGF0cy0+T3V0cHV0UmVxdWVzdHM7CiAJCWZjb2Vfc3RhdHMtPmZjcF9jb250cm9sX3JlcXVlc3RzICs9IHN0YXRzLT5Db250cm9sUmVxdWVzdHM7Ci0JCWZjb2Vfc3RhdHMtPmZjcF9pbnB1dF9tZWdhYnl0ZXMgKz0gc3RhdHMtPklucHV0TWVnYWJ5dGVzOwotCQlmY29lX3N0YXRzLT5mY3Bfb3V0cHV0X21lZ2FieXRlcyArPSBzdGF0cy0+T3V0cHV0TWVnYWJ5dGVzOworCQlmY3BfaW5fYnl0ZXMgKz0gc3RhdHMtPklucHV0Qnl0ZXM7CisJCWZjcF9vdXRfYnl0ZXMgKz0gc3RhdHMtPk91dHB1dEJ5dGVzOwogCQlmY29lX3N0YXRzLT5saW5rX2ZhaWx1cmVfY291bnQgKz0gc3RhdHMtPkxpbmtGYWlsdXJlQ291bnQ7CiAJfQorCWZjb2Vfc3RhdHMtPmZjcF9pbnB1dF9tZWdhYnl0ZXMgPSBkaXZfdTY0KGZjcF9pbl9ieXRlcywgMTAwMDAwMCk7CisJZmNvZV9zdGF0cy0+ZmNwX291dHB1dF9tZWdhYnl0ZXMgPSBkaXZfdTY0KGZjcF9vdXRfYnl0ZXMsIDEwMDAwMDApOwogCWZjb2Vfc3RhdHMtPmxpcF9jb3VudCA9IC0xOwogCWZjb2Vfc3RhdHMtPm5vc19jb3VudCA9IC0xOwogCWZjb2Vfc3RhdHMtPmxvc3Nfb2Zfc3luY19jb3VudCA9IC0xOwpAQCAtMTcwMyw4ICsxNzA3LDEwIEBACiAJaW5mby0+c2cgPSBqb2ItPnJlcGx5X3BheWxvYWQuc2dfbGlzdDsKIAogCWlmICghbHBvcnQtPnR0LmV4Y2hfc2VxX3NlbmQobHBvcnQsIGZwLCBmY19scG9ydF9ic2dfcmVzcCwKLQkJCQkgICAgIE5VTEwsIGluZm8sIHRvdikpCisJCQkJICAgICBOVUxMLCBpbmZvLCB0b3YpKSB7CisJCWtmcmVlKGluZm8pOwogCQlyZXR1cm4gLUVDT01NOworCX0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMTc2Miw4ICsxNzY4LDEwIEBACiAJaW5mby0+c2cgPSBqb2ItPnJlcGx5X3BheWxvYWQuc2dfbGlzdDsKIAogCWlmICghbHBvcnQtPnR0LmV4Y2hfc2VxX3NlbmQobHBvcnQsIGZwLCBmY19scG9ydF9ic2dfcmVzcCwKLQkJCQkgICAgIE5VTEwsIGluZm8sIHRvdikpCisJCQkJICAgICBOVUxMLCBpbmZvLCB0b3YpKSB7CisJCWtmcmVlKGluZm8pOwogCQlyZXR1cm4gLUVDT01NOworCX0KIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX3Jwb3J0LmMgYi9kcml2ZXJzL3Njc2kvbGliZmMvZmNfcnBvcnQuYwppbmRleCBhODRlZjEzLi5hNzE3NWFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbGliZmMvZmNfcnBvcnQuYworKysgYi9kcml2ZXJzL3Njc2kvbGliZmMvZmNfcnBvcnQuYwpAQCAtNjUyLDcgKzY1Miw3IEBACiAJRkNfUlBPUlRfREJHKHJkYXRhLCAiUmVjZWl2ZWQgYSBGTE9HSSAlc1xuIiwgZmNfZWxzX3Jlc3BfdHlwZShmcCkpOwogCiAJaWYgKGZwID09IEVSUl9QVFIoLUZDX0VYX0NMT1NFRCkpCi0JCXJldHVybjsKKwkJZ290byBwdXQ7CiAKIAltdXRleF9sb2NrKCZyZGF0YS0+cnBfbXV0ZXgpOwogCkBAIC02ODksNiArNjg5LDcgQEAKIAlmY19mcmFtZV9mcmVlKGZwKTsKIGVycjoKIAltdXRleF91bmxvY2soJnJkYXRhLT5ycF9tdXRleCk7CitwdXQ6CiAJa3JlZl9wdXQoJnJkYXRhLT5rcmVmLCByZGF0YS0+bG9jYWxfcG9ydC0+dHQucnBvcnRfZGVzdHJveSk7CiAJcmV0dXJuOwogYmFkOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYmlzY3NpLmMgYi9kcml2ZXJzL3Njc2kvbGliaXNjc2kuYwppbmRleCBjMTVmZGU4Li5kYThiNjE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbGliaXNjc2kuYworKysgYi9kcml2ZXJzL3Njc2kvbGliaXNjc2kuYwpAQCAtNTA1LDYgKzUwNSw3IEBACiAJc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4gPSB0YXNrLT5jb25uOwogCXN0cnVjdCBpc2NzaV9zZXNzaW9uICpzZXNzaW9uID0gY29ubi0+c2Vzc2lvbjsKIAlzdHJ1Y3Qgc2NzaV9jbW5kICpzYyA9IHRhc2stPnNjOworCWludCBvbGRzdGF0ZSA9IHRhc2stPnN0YXRlOwogCiAJSVNDU0lfREJHX1NFU1NJT04oc2Vzc2lvbiwgImZyZWVpbmcgdGFzayBpdHQgMHgleCBzdGF0ZSAlZCBzYyAlcFxuIiwKIAkJCSAgdGFzay0+aXR0LCB0YXNrLT5zdGF0ZSwgdGFzay0+c2MpOwpAQCAtNTI1LDEwICs1MjYsMTAgQEAKIAkJLyogU0NTSSBlaCByZXVzZXMgY29tbWFuZHMgdG8gdmVyaWZ5IHVzICovCiAJCXNjLT5TQ3AucHRyID0gTlVMTDsKIAkJLyoKLQkJICogcXVldWUgY29tbWFuZCBtYXkgY2FsbCB0aGlzIHRvIGZyZWUgdGhlIHRhc2ssIGJ1dAotCQkgKiBub3QgaGF2ZSBzZXR1cCB0aGUgc2MgY2FsbGJhY2sKKwkJICogcXVldWUgY29tbWFuZCBtYXkgY2FsbCB0aGlzIHRvIGZyZWUgdGhlIHRhc2ssIHNvCisJCSAqIGl0IHdpbGwgZGVjaWRlIGhvdyB0byByZXR1cm4gc2MgdG8gc2NzaS1tbC4KIAkJICovCi0JCWlmIChzYy0+c2NzaV9kb25lKQorCQlpZiAob2xkc3RhdGUgIT0gSVNDU0lfVEFTS19SRVFVRVVFX1NDU0lRKQogCQkJc2MtPnNjc2lfZG9uZShzYyk7CiAJfQogfQpAQCAtNTM5LDExICs1NDAsMTIgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKF9faXNjc2lfZ2V0X3Rhc2spOwogCi1zdGF0aWMgdm9pZCBfX2lzY3NpX3B1dF90YXNrKHN0cnVjdCBpc2NzaV90YXNrICp0YXNrKQordm9pZCBfX2lzY3NpX3B1dF90YXNrKHN0cnVjdCBpc2NzaV90YXNrICp0YXNrKQogewogCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZ0YXNrLT5yZWZjb3VudCkpCiAJCWlzY3NpX2ZyZWVfdGFzayh0YXNrKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKF9faXNjc2lfcHV0X3Rhc2spOwogCiB2b2lkIGlzY3NpX3B1dF90YXNrKHN0cnVjdCBpc2NzaV90YXNrICp0YXNrKQogewpAQCAtNTcxLDcgKzU3Myw4IEBACiAJCQkgIHRhc2stPml0dCwgdGFzay0+c3RhdGUsIHRhc2stPnNjKTsKIAlpZiAodGFzay0+c3RhdGUgPT0gSVNDU0lfVEFTS19DT01QTEVURUQgfHwKIAkgICAgdGFzay0+c3RhdGUgPT0gSVNDU0lfVEFTS19BQlJUX1RNRiB8fAotCSAgICB0YXNrLT5zdGF0ZSA9PSBJU0NTSV9UQVNLX0FCUlRfU0VTU19SRUNPVikKKwkgICAgdGFzay0+c3RhdGUgPT0gSVNDU0lfVEFTS19BQlJUX1NFU1NfUkVDT1YgfHwKKwkgICAgdGFzay0+c3RhdGUgPT0gSVNDU0lfVEFTS19SRVFVRVVFX1NDU0lRKQogCQlyZXR1cm47CiAJV0FSTl9PTl9PTkNFKHRhc2stPnN0YXRlID09IElTQ1NJX1RBU0tfRlJFRSk7CiAJdGFzay0+c3RhdGUgPSBzdGF0ZTsKQEAgLTEzMzUsMTcgKzEzMzgsMTYgQEAKIHsKIAlzdHJ1Y3QgaXNjc2lfY29ubiAqY29ubjsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZzZXNzaW9uLT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2JoKCZzZXNzaW9uLT5sb2NrKTsKIAljb25uID0gc2Vzc2lvbi0+bGVhZGNvbm47CiAJaWYgKHNlc3Npb24tPnN0YXRlID09IElTQ1NJX1NUQVRFX1RFUk1JTkFURSB8fCAhY29ubikgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZXNzaW9uLT5sb2NrLCBmbGFncyk7CisJCXNwaW5fdW5sb2NrX2JoKCZzZXNzaW9uLT5sb2NrKTsKIAkJcmV0dXJuOwogCX0KIAogCWRldiA9IGdldF9kZXZpY2UoJmNvbm4tPmNsc19jb25uLT5kZXYpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlc3Npb24tPmxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19iaCgmc2Vzc2lvbi0+bG9jayk7CiAJaWYgKCFkZXYpCiAJICAgICAgICByZXR1cm47CiAJLyoKQEAgLTEzNjQsMTcgKzEzNjYsMTYgQEAKIHZvaWQgaXNjc2lfY29ubl9mYWlsdXJlKHN0cnVjdCBpc2NzaV9jb25uICpjb25uLCBlbnVtIGlzY3NpX2VyciBlcnIpCiB7CiAJc3RydWN0IGlzY3NpX3Nlc3Npb24gKnNlc3Npb24gPSBjb25uLT5zZXNzaW9uOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmc2Vzc2lvbi0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19iaCgmc2Vzc2lvbi0+bG9jayk7CiAJaWYgKHNlc3Npb24tPnN0YXRlID09IElTQ1NJX1NUQVRFX0ZBSUxFRCkgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZXNzaW9uLT5sb2NrLCBmbGFncyk7CisJCXNwaW5fdW5sb2NrX2JoKCZzZXNzaW9uLT5sb2NrKTsKIAkJcmV0dXJuOwogCX0KIAogCWlmIChjb25uLT5zdG9wX3N0YWdlID09IDApCiAJCXNlc3Npb24tPnN0YXRlID0gSVNDU0lfU1RBVEVfRkFJTEVEOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlc3Npb24tPmxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19iaCgmc2Vzc2lvbi0+bG9jayk7CiAKIAlzZXRfYml0KElTQ1NJX1NVU1BFTkRfQklULCAmY29ubi0+c3VzcGVuZF90eCk7CiAJc2V0X2JpdChJU0NTSV9TVVNQRU5EX0JJVCwgJmNvbm4tPnN1c3BlbmRfcngpOwpAQCAtMTU5OSwyNyArMTYwMCwyMyBAQAogCUZBSUxVUkVfU0VTU0lPTl9OT1RfUkVBRFksCiB9OwogCi1zdGF0aWMgaW50IGlzY3NpX3F1ZXVlY29tbWFuZF9sY2soc3RydWN0IHNjc2lfY21uZCAqc2MsIHZvaWQgKCpkb25lKShzdHJ1Y3Qgc2NzaV9jbW5kICopKQoraW50IGlzY3NpX3F1ZXVlY29tbWFuZChzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0LCBzdHJ1Y3Qgc2NzaV9jbW5kICpzYykKIHsKIAlzdHJ1Y3QgaXNjc2lfY2xzX3Nlc3Npb24gKmNsc19zZXNzaW9uOwotCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3Q7CiAJc3RydWN0IGlzY3NpX2hvc3QgKmlob3N0OwogCWludCByZWFzb24gPSAwOwogCXN0cnVjdCBpc2NzaV9zZXNzaW9uICpzZXNzaW9uOwogCXN0cnVjdCBpc2NzaV9jb25uICpjb25uOwogCXN0cnVjdCBpc2NzaV90YXNrICp0YXNrID0gTlVMTDsKIAotCXNjLT5zY3NpX2RvbmUgPSBkb25lOwogCXNjLT5yZXN1bHQgPSAwOwogCXNjLT5TQ3AucHRyID0gTlVMTDsKIAotCWhvc3QgPSBzYy0+ZGV2aWNlLT5ob3N0OwogCWlob3N0ID0gc2hvc3RfcHJpdihob3N0KTsKLQlzcGluX3VubG9jayhob3N0LT5ob3N0X2xvY2spOwogCiAJY2xzX3Nlc3Npb24gPSBzdGFyZ2V0X3RvX3Nlc3Npb24oc2NzaV90YXJnZXQoc2MtPmRldmljZSkpOwogCXNlc3Npb24gPSBjbHNfc2Vzc2lvbi0+ZGRfZGF0YTsKLQlzcGluX2xvY2soJnNlc3Npb24tPmxvY2spOworCXNwaW5fbG9ja19iaCgmc2Vzc2lvbi0+bG9jayk7CiAKIAlyZWFzb24gPSBpc2NzaV9zZXNzaW9uX2Noa3JlYWR5KGNsc19zZXNzaW9uKTsKIAlpZiAocmVhc29uKSB7CkBAIC0xNzA1LDI1ICsxNzAyLDIxIEBACiAJfQogCiAJc2Vzc2lvbi0+cXVldWVkX2NtZHNuKys7Ci0Jc3Bpbl91bmxvY2soJnNlc3Npb24tPmxvY2spOwotCXNwaW5fbG9jayhob3N0LT5ob3N0X2xvY2spOworCXNwaW5fdW5sb2NrX2JoKCZzZXNzaW9uLT5sb2NrKTsKIAlyZXR1cm4gMDsKIAogcHJlcGRfcmVqZWN0OgotCXNjLT5zY3NpX2RvbmUgPSBOVUxMOwotCWlzY3NpX2NvbXBsZXRlX3Rhc2sodGFzaywgSVNDU0lfVEFTS19DT01QTEVURUQpOworCWlzY3NpX2NvbXBsZXRlX3Rhc2sodGFzaywgSVNDU0lfVEFTS19SRVFVRVVFX1NDU0lRKTsKIHJlamVjdDoKLQlzcGluX3VubG9jaygmc2Vzc2lvbi0+bG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJnNlc3Npb24tPmxvY2spOwogCUlTQ1NJX0RCR19TRVNTSU9OKHNlc3Npb24sICJjbWQgMHgleCByZWplY3RlZCAoJWQpXG4iLAogCQkJICBzYy0+Y21uZFswXSwgcmVhc29uKTsKLQlzcGluX2xvY2soaG9zdC0+aG9zdF9sb2NrKTsKIAlyZXR1cm4gU0NTSV9NTFFVRVVFX1RBUkdFVF9CVVNZOwogCiBwcmVwZF9mYXVsdDoKLQlzYy0+c2NzaV9kb25lID0gTlVMTDsKLQlpc2NzaV9jb21wbGV0ZV90YXNrKHRhc2ssIElTQ1NJX1RBU0tfQ09NUExFVEVEKTsKKwlpc2NzaV9jb21wbGV0ZV90YXNrKHRhc2ssIElTQ1NJX1RBU0tfUkVRVUVVRV9TQ1NJUSk7CiBmYXVsdDoKLQlzcGluX3VubG9jaygmc2Vzc2lvbi0+bG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJnNlc3Npb24tPmxvY2spOwogCUlTQ1NJX0RCR19TRVNTSU9OKHNlc3Npb24sICJpc2NzaTogY21kIDB4JXggaXMgbm90IHF1ZXVlZCAoJWQpXG4iLAogCQkJICBzYy0+Y21uZFswXSwgcmVhc29uKTsKIAlpZiAoIXNjc2lfYmlkaV9jbW5kKHNjKSkKQEAgLTE3MzIsMTIgKzE3MjUsOSBAQAogCQlzY3NpX291dChzYyktPnJlc2lkID0gc2NzaV9vdXQoc2MpLT5sZW5ndGg7CiAJCXNjc2lfaW4oc2MpLT5yZXNpZCA9IHNjc2lfaW4oc2MpLT5sZW5ndGg7CiAJfQotCWRvbmUoc2MpOwotCXNwaW5fbG9jayhob3N0LT5ob3N0X2xvY2spOworCXNjLT5zY3NpX2RvbmUoc2MpOwogCXJldHVybiAwOwogfQotCi1ERUZfU0NTSV9RQ01EKGlzY3NpX3F1ZXVlY29tbWFuZCkKIEVYUE9SVF9TWU1CT0xfR1BMKGlzY3NpX3F1ZXVlY29tbWFuZCk7CiAKIGludCBpc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgZGVwdGgsIGludCByZWFzb24pCkBAIC0xNzk1LDkgKzE3ODUsOSBAQAogCQkJCSAgICAgIE5VTEwsIDApOwogCWlmICghdGFzaykgewogCQlzcGluX3VubG9ja19iaCgmc2Vzc2lvbi0+bG9jayk7CisJCWlzY3NpX2Nvbm5fcHJpbnRrKEtFUk5fRVJSLCBjb25uLCAiQ291bGQgbm90IHNlbmQgVE1GLlxuIik7CiAJCWlzY3NpX2Nvbm5fZmFpbHVyZShjb25uLCBJU0NTSV9FUlJfQ09OTl9GQUlMRUQpOwogCQlzcGluX2xvY2tfYmgoJnNlc3Npb24tPmxvY2spOwotCQlJU0NTSV9EQkdfRUgoc2Vzc2lvbiwgInRtZiBleGVjIGZhaWx1cmVcbiIpOwogCQlyZXR1cm4gLUVQRVJNOwogCX0KIAljb25uLT50bWZjbWRfcGR1c19jbnQrKzsKQEAgLTIyMDIsNyArMjE5Miw3IEBACiAJCWdvdG8gc3VjY2Vzc191bmxvY2tlZDsKIAljYXNlIFRNRl9USU1FRE9VVDoKIAkJc3Bpbl91bmxvY2tfYmgoJnNlc3Npb24tPmxvY2spOwotCQlpc2NzaV9jb25uX2ZhaWx1cmUoY29ubiwgSVNDU0lfRVJSX0NPTk5fRkFJTEVEKTsKKwkJaXNjc2lfY29ubl9mYWlsdXJlKGNvbm4sIElTQ1NJX0VSUl9TQ1NJX0VIX1NFU1NJT05fUlNUKTsKIAkJZ290byBmYWlsZWRfdW5sb2NrZWQ7CiAJY2FzZSBUTUZfTk9UX0ZPVU5EOgogCQlpZiAoIXNjLT5TQ3AucHRyKSB7CkBAIC0yMjg5LDcgKzIyNzksNyBAQAogCQlicmVhazsKIAljYXNlIFRNRl9USU1FRE9VVDoKIAkJc3Bpbl91bmxvY2tfYmgoJnNlc3Npb24tPmxvY2spOwotCQlpc2NzaV9jb25uX2ZhaWx1cmUoY29ubiwgSVNDU0lfRVJSX0NPTk5fRkFJTEVEKTsKKwkJaXNjc2lfY29ubl9mYWlsdXJlKGNvbm4sIElTQ1NJX0VSUl9TQ1NJX0VIX1NFU1NJT05fUlNUKTsKIAkJZ290byBkb25lOwogCWRlZmF1bHQ6CiAJCWNvbm4tPnRtZl9zdGF0ZSA9IFRNRl9JTklUSUFMOwpAQCAtMjM3MCw3ICsyMzYwLDcgQEAKIAkgKiB3ZSBkcm9wIHRoZSBsb2NrIGhlcmUgYnV0IHRoZSBsZWFkY29ubiBjYW5ub3QgYmUgZGVzdG95ZWQgd2hpbGUKIAkgKiB3ZSBhcmUgaW4gdGhlIHNjc2kgZWgKIAkgKi8KLQlpc2NzaV9jb25uX2ZhaWx1cmUoY29ubiwgSVNDU0lfRVJSX0NPTk5fRkFJTEVEKTsKKwlpc2NzaV9jb25uX2ZhaWx1cmUoY29ubiwgSVNDU0lfRVJSX1NDU0lfRUhfU0VTU0lPTl9SU1QpOwogCiAJSVNDU0lfREJHX0VIKHNlc3Npb24sICJ3YWl0IGZvciByZWxvZ2luXG4iKTsKIAl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoY29ubi0+ZWh3YWl0LApAQCAtMjQ1Miw3ICsyNDQyLDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBUTUZfVElNRURPVVQ6CiAJCXNwaW5fdW5sb2NrX2JoKCZzZXNzaW9uLT5sb2NrKTsKLQkJaXNjc2lfY29ubl9mYWlsdXJlKGNvbm4sIElTQ1NJX0VSUl9DT05OX0ZBSUxFRCk7CisJCWlzY3NpX2Nvbm5fZmFpbHVyZShjb25uLCBJU0NTSV9FUlJfU0NTSV9FSF9TRVNTSU9OX1JTVCk7CiAJCWdvdG8gZG9uZTsKIAlkZWZhdWx0OgogCQljb25uLT50bWZfc3RhdGUgPSBUTUZfSU5JVElBTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9saWJzYXMvc2FzX3BvcnQuYyBiL2RyaXZlcnMvc2NzaS9saWJzYXMvc2FzX3BvcnQuYwppbmRleCBmZThiNzRjLi41MjU3ZmRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19wb3J0LmMKKysrIGIvZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfcG9ydC5jCkBAIC0yOCw2ICsyOCwxNyBAQAogI2luY2x1ZGUgPHNjc2kvc2NzaV90cmFuc3BvcnRfc2FzLmg+CiAjaW5jbHVkZSAiLi4vc2NzaV9zYXNfaW50ZXJuYWwuaCIKIAorc3RhdGljIGJvb2wgcGh5X2lzX3dpZGVwb3J0X21lbWJlcihzdHJ1Y3QgYXNkX3Nhc19wb3J0ICpwb3J0LCBzdHJ1Y3QgYXNkX3Nhc19waHkgKnBoeSkKK3sKKwlzdHJ1Y3Qgc2FzX2hhX3N0cnVjdCAqc2FzX2hhID0gcGh5LT5oYTsKKworCWlmIChtZW1jbXAocG9ydC0+YXR0YWNoZWRfc2FzX2FkZHIsIHBoeS0+YXR0YWNoZWRfc2FzX2FkZHIsCisJCSAgIFNBU19BRERSX1NJWkUpICE9IDAgfHwgKHNhc19oYS0+c3RyaWN0X3dpZGVfcG9ydHMgJiYKKwkgICAgIG1lbWNtcChwb3J0LT5zYXNfYWRkciwgcGh5LT5zYXNfYWRkciwgU0FTX0FERFJfU0laRSkgIT0gMCkpCisJCXJldHVybiBmYWxzZTsKKwlyZXR1cm4gdHJ1ZTsKK30KKwogLyoqCiAgKiBzYXNfZm9ybV9wb3J0IC0tIGFkZCB0aGlzIHBoeSB0byBhIHBvcnQKICAqIEBwaHk6IHRoZSBwaHkgb2YgaW50ZXJlc3QKQEAgLTQ1LDggKzU2LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKHBvcnQpIHsKLQkJaWYgKG1lbWNtcChwb3J0LT5hdHRhY2hlZF9zYXNfYWRkciwgcGh5LT5hdHRhY2hlZF9zYXNfYWRkciwKLQkJCSAgIFNBU19BRERSX1NJWkUpICE9IDApCisJCWlmICghcGh5X2lzX3dpZGVwb3J0X21lbWJlcihwb3J0LCBwaHkpKQogCQkJc2FzX2RlZm9ybV9wb3J0KHBoeSk7CiAJCWVsc2UgewogCQkJU0FTX0RQUklOVEsoIiVzOiBwaHklZCBiZWxvbmdzIHRvIHBvcnQlZCBhbHJlYWR5KCVkKSFcbiIsCkBAIC02Miw5ICs3Miw3IEBACiAJCXBvcnQgPSBzYXNfaGEtPnNhc19wb3J0W2ldOwogCQlzcGluX2xvY2soJnBvcnQtPnBoeV9saXN0X2xvY2spOwogCQlpZiAoKih1NjQgKikgcG9ydC0+c2FzX2FkZHIgJiYKLQkJICAgIG1lbWNtcChwb3J0LT5hdHRhY2hlZF9zYXNfYWRkciwKLQkJCSAgIHBoeS0+YXR0YWNoZWRfc2FzX2FkZHIsIFNBU19BRERSX1NJWkUpID09IDAgJiYKLQkJICAgIHBvcnQtPm51bV9waHlzID4gMCkgeworCQkgICAgcGh5X2lzX3dpZGVwb3J0X21lbWJlcihwb3J0LCBwaHkpICYmIHBvcnQtPm51bV9waHlzID4gMCkgewogCQkJLyogd2lkZSBwb3J0ICovCiAJCQlTQVNfRFBSSU5USygicGh5JWQgbWF0Y2hlZCB3aWRlIHBvcnQlZFxuIiwgcGh5LT5pZCwKIAkJCQkgICAgcG9ydC0+aWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfc2NzaV9ob3N0LmMgYi9kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYwppbmRleCAyOTI1MWZhLi41ODE1Y2JlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYworKysgYi9kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYwpAQCAtMjExLDggKzIxMSw3IEBACiAJCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJCQlzcGluX2xvY2tfaXJxc2F2ZShkZXYtPnNhdGFfZGV2LmFwLT5sb2NrLCBmbGFncyk7Ci0JCQlyZXMgPSBhdGFfc2FzX3F1ZXVlY21kKGNtZCwgc2NzaV9kb25lLAotCQkJCQkgICAgICAgZGV2LT5zYXRhX2Rldi5hcCk7CisJCQlyZXMgPSBhdGFfc2FzX3F1ZXVlY21kKGNtZCwgZGV2LT5zYXRhX2Rldi5hcCk7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGRldi0+c2F0YV9kZXYuYXAtPmxvY2ssIGZsYWdzKTsKIAkJCWdvdG8gb3V0OwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjLmggYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjLmgKaW5kZXggMTk2ZGU0MC4uNzQ2ZGQzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmYy5oCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmMuaApAQCAtNDY0LDEyICs0NjQsMjkgQEAKICNkZWZpbmUgVU5TT0xfVkFMSUQJMHgwMDAwMDAwMQogfTsKIAorI2RlZmluZSBMUEZDX1VTRVJfTElOS19TUEVFRF9BVVRPCTAJLyogYXV0byBzZWxlY3QgKGRlZmF1bHQpKi8KKyNkZWZpbmUgTFBGQ19VU0VSX0xJTktfU1BFRURfMUcJCTEJLyogMSBHaWdhYmF1ZCAqLworI2RlZmluZSBMUEZDX1VTRVJfTElOS19TUEVFRF8yRwkJMgkvKiAyIEdpZ2FiYXVkICovCisjZGVmaW5lIExQRkNfVVNFUl9MSU5LX1NQRUVEXzRHCQk0CS8qIDQgR2lnYWJhdWQgKi8KKyNkZWZpbmUgTFBGQ19VU0VSX0xJTktfU1BFRURfOEcJCTgJLyogOCBHaWdhYmF1ZCAqLworI2RlZmluZSBMUEZDX1VTRVJfTElOS19TUEVFRF8xMEcJMTAJLyogMTAgR2lnYWJhdWQgKi8KKyNkZWZpbmUgTFBGQ19VU0VSX0xJTktfU1BFRURfMTZHCTE2CS8qIDE2IEdpZ2FiYXVkICovCisjZGVmaW5lIExQRkNfVVNFUl9MSU5LX1NQRUVEX01BWAlMUEZDX1VTRVJfTElOS19TUEVFRF8xNkcKKyNkZWZpbmUgTFBGQ19VU0VSX0xJTktfU1BFRURfQklUTUFQICgoMSA8PCBMUEZDX1VTRVJfTElOS19TUEVFRF8xNkcpIHwgXAorCQkJCSAgICAgKDEgPDwgTFBGQ19VU0VSX0xJTktfU1BFRURfMTBHKSB8IFwKKwkJCQkgICAgICgxIDw8IExQRkNfVVNFUl9MSU5LX1NQRUVEXzhHKSB8IFwKKwkJCQkgICAgICgxIDw8IExQRkNfVVNFUl9MSU5LX1NQRUVEXzRHKSB8IFwKKwkJCQkgICAgICgxIDw8IExQRkNfVVNFUl9MSU5LX1NQRUVEXzJHKSB8IFwKKwkJCQkgICAgICgxIDw8IExQRkNfVVNFUl9MSU5LX1NQRUVEXzFHKSB8IFwKKwkJCQkgICAgICgxIDw8IExQRkNfVVNFUl9MSU5LX1NQRUVEX0FVVE8pKQorI2RlZmluZSBMUEZDX0xJTktfU1BFRURfU1RSSU5HICIwLCAxLCAyLCA0LCA4LCAxMCwgMTYiCisKIHN0cnVjdCBscGZjX2hiYSB7CiAJLyogU0NTSSBpbnRlcmZhY2UgZnVuY3Rpb24ganVtcCB0YWJsZSBlbnRyaWVzICovCiAJaW50ICgqbHBmY19uZXdfc2NzaV9idWYpCiAJCShzdHJ1Y3QgbHBmY192cG9ydCAqLCBpbnQpOwogCXN0cnVjdCBscGZjX3Njc2lfYnVmICogKCpscGZjX2dldF9zY3NpX2J1ZikKLQkJKHN0cnVjdCBscGZjX2hiYSAqKTsKKwkJKHN0cnVjdCBscGZjX2hiYSAqLCBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqKTsKIAlpbnQgKCpscGZjX3Njc2lfcHJlcF9kbWFfYnVmKQogCQkoc3RydWN0IGxwZmNfaGJhICosIHN0cnVjdCBscGZjX3Njc2lfYnVmICopOwogCXZvaWQgKCpscGZjX3Njc2lfdW5wcmVwX2RtYV9idWYpCkBAIC01NDUsNyArNTYyLDcgQEAKIAl1aW50MzJfdCBoYmFfZmxhZzsJLyogaGJhIGdlbmVyaWMgZmxhZ3MgKi8KICNkZWZpbmUgSEJBX0VSQVRUX0hBTkRMRUQJMHgxIC8qIFRoaXMgZmxhZyBpcyBzZXQgd2hlbiBlcmF0dCBoYW5kbGVkICovCiAjZGVmaW5lIERFRkVSX0VSQVRUCQkweDIgLyogRGVmZXJyZWQgZXJyb3IgYXR0ZW50aW9uIGluIHByb2dyZXNzICovCi0jZGVmaW5lIEhCQV9GQ09FX1NVUFBPUlQJMHg0IC8qIEhCQSBmdW5jdGlvbiBzdXBwb3J0cyBGQ09FICovCisjZGVmaW5lIEhCQV9GQ09FX01PREUJCTB4NCAvKiBIQkEgZnVuY3Rpb24gaW4gRkNvRSBNb2RlICovCiAjZGVmaW5lIEhCQV9TUF9RVUVVRV9FVlQJMHg4IC8qIFNsb3ctcGF0aCBxZXZ0IHBvc3RlZCB0byB3b3JrZXIgdGhyZWFkKi8KICNkZWZpbmUgSEJBX1BPU1RfUkVDRUlWRV9CVUZGRVIgMHgxMCAvKiBSY3YgYnVmZmVycyBuZWVkIHRvIGJlIHBvc3RlZCAqLwogI2RlZmluZSBGQ1BfWFJJX0FCT1JUX0VWRU5UCTB4MjAKQEAgLTU1Nyw2ICs1NzQsNyBAQAogI2RlZmluZSBIQkFfRklQX1NVUFBPUlQJCTB4ODAwIC8qIEZJUCBzdXBwb3J0IGluIEhCQSAqLwogI2RlZmluZSBIQkFfQUVSX0VOQUJMRUQJCTB4MTAwMCAvKiBBRVIgZW5hYmxlZCB3aXRoIEhCQSAqLwogI2RlZmluZSBIQkFfREVWTE9TU19UTU8gICAgICAgICAweDIwMDAgLyogSEJBIGluIGRldmxvc3MgdGltZW91dCAqLworI2RlZmluZSBIQkFfUlJRX0FDVElWRQkJMHg0MDAwIC8qIHByb2Nlc3MgdGhlIHJycSBhY3RpdmUgbGlzdCAqLwogCXVpbnQzMl90IGZjcF9yaW5nX2luX3VzZTsgLyogV2hlbiBwb2xsaW5nIHRlc3QgaWYgaW50ci1obmRsciBhY3RpdmUqLwogCXN0cnVjdCBscGZjX2RtYWJ1ZiBzbGltMnA7CiAKQEAgLTYwNiw2ICs2MjQsNyBAQAogCS8qIEhCQSBDb25maWcgUGFyYW1ldGVycyAqLwogCXVpbnQzMl90IGNmZ19hY2swOwogCXVpbnQzMl90IGNmZ19lbmFibGVfbnBpdjsKKwl1aW50MzJfdCBjZmdfZW5hYmxlX3JycTsKIAl1aW50MzJfdCBjZmdfdG9wb2xvZ3k7CiAJdWludDMyX3QgY2ZnX2xpbmtfc3BlZWQ7CiAJdWludDMyX3QgY2ZnX2NyX2RlbGF5OwpAQCAtNzE2LDYgKzczNSw3IEBACiAJdWludDMyX3QgdG90YWxfc2NzaV9idWZzOwogCXN0cnVjdCBsaXN0X2hlYWQgbHBmY19pb2NiX2xpc3Q7CiAJdWludDMyX3QgdG90YWxfaW9jYnFfYnVmczsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGFjdGl2ZV9ycnFfbGlzdDsKIAlzcGlubG9ja190IGhiYWxvY2s7CiAKIAkvKiBwY2lfbWVtX3Bvb2xzICovCkBAIC03MjgsNiArNzQ4LDcgQEAKIAogCW1lbXBvb2xfdCAqbWJveF9tZW1fcG9vbDsKIAltZW1wb29sX3QgKm5scF9tZW1fcG9vbDsKKwltZW1wb29sX3QgKnJycV9wb29sOwogCiAJc3RydWN0IGZjX2hvc3Rfc3RhdGlzdGljcyBsaW5rX3N0YXRzOwogCWVudW0gaW50cl90eXBlX3QgaW50cl90eXBlOwpAQCAtNzg0LDYgKzgwNSw3IEBACiAJdW5zaWduZWQgbG9uZyBza2lwcGVkX2hiOwogCXN0cnVjdCB0aW1lcl9saXN0IGhiX3Rtb2Z1bmM7CiAJdWludDhfdCBoYl9vdXRzdGFuZGluZzsKKwlzdHJ1Y3QgdGltZXJfbGlzdCBycnFfdG1yOwogCWVudW0gaGJhX3RlbXBfc3RhdGUgb3Zlcl90ZW1wX3N0YXRlOwogCS8qIG5kbHAgcmVmZXJlbmNlIG1hbmFnZW1lbnQgKi8KIAlzcGlubG9ja190IG5kbHBfbG9jazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19hdHRyLmMKaW5kZXggYzFjYmVjMC4uYzA2NDkxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19hdHRyLmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19hdHRyLmMKQEAgLTUyLDEwICs1Miw2IEBACiAjZGVmaW5lIExQRkNfTUlOX0RFVkxPU1NfVE1PIDEKICNkZWZpbmUgTFBGQ19NQVhfREVWTE9TU19UTU8gMjU1CiAKLSNkZWZpbmUgTFBGQ19NQVhfTElOS19TUEVFRCA4Ci0jZGVmaW5lIExQRkNfTElOS19TUEVFRF9CSVRNQVAgMHgwMDAwMDExNwotI2RlZmluZSBMUEZDX0xJTktfU1BFRURfU1RSSU5HICIwLCAxLCAyLCA0LCA4IgotCiAvKioKICAqIGxwZmNfamVkZWNfdG9fYXNjaWkgLSBIZXggdG8gYXNjaWkgY29udmVydG9yIGFjY29yZGluZyB0byBKRURFQyBydWxlcwogICogQGluY3I6IGludGVnZXIgdG8gY29udmVydC4KQEAgLTQ2Myw3ICs0NTksNyBAQAogCQlpZiAocGhiYS0+c2xpLnNsaV9mbGFnICYgTFBGQ19NRU5MT19NQUlOVCkKIAkJCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIFBBR0VfU0laRS1sZW4sCiAJCQkJCSIgICBNZW5sbyBNYWludCBNb2RlXG4iKTsKLQkJZWxzZSBpZiAocGhiYS0+ZmNfdG9wb2xvZ3kgPT0gVE9QT0xPR1lfTE9PUCkgeworCQllbHNlIGlmIChwaGJhLT5mY190b3BvbG9neSA9PSBMUEZDX1RPUE9MT0dZX0xPT1ApIHsKIAkJCWlmICh2cG9ydC0+ZmNfZmxhZyAmIEZDX1BVQkxJQ19MT09QKQogCQkJCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIFBBR0VfU0laRS1sZW4sCiAJCQkJCQkiICAgUHVibGljIExvb3BcbiIpOwpAQCAtMTk4MSw2ICsxOTc3LDEzIEBACiBscGZjX3BhcmFtX2luaXQoZW5hYmxlX25waXYsIDEsIDAsIDEpOwogc3RhdGljIERFVklDRV9BVFRSKGxwZmNfZW5hYmxlX25waXYsIFNfSVJVR08sIGxwZmNfZW5hYmxlX25waXZfc2hvdywgTlVMTCk7CiAKK2ludCBscGZjX2VuYWJsZV9ycnE7Cittb2R1bGVfcGFyYW0obHBmY19lbmFibGVfcnJxLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhscGZjX2VuYWJsZV9ycnEsICJFbmFibGUgUlJRIGZ1bmN0aW9uYWxpdHkiKTsKK2xwZmNfcGFyYW1fc2hvdyhlbmFibGVfcnJxKTsKK2xwZmNfcGFyYW1faW5pdChlbmFibGVfcnJxLCAwLCAwLCAxKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihscGZjX2VuYWJsZV9ycnEsIFNfSVJVR08sIGxwZmNfZW5hYmxlX3JycV9zaG93LCBOVUxMKTsKKwogLyoKICMgbHBmY19zdXBwcmVzc19saW5rX3VwOiAgQnJpbmcgbGluayB1cCBhdCBpbml0aWFsaXphdGlvbgogIyAgICAgICAgICAgIDB4MCAgPSBicmluZyBsaW5rIHVwIChpc3N1ZSBNQlhfSU5JVF9MSU5LKQpAQCAtMjgzNywxNCArMjg0MCw4IEBACiAvKgogIyBscGZjX2xpbmtfc3BlZWQ6IExpbmsgc3BlZWQgc2VsZWN0aW9uIGZvciBpbml0aWFsaXppbmcgdGhlIEZpYnJlIENoYW5uZWwKICMgY29ubmVjdGlvbi4KLSMgICAgICAgMCAgPSBhdXRvIHNlbGVjdCAoZGVmYXVsdCkKLSMgICAgICAgMSAgPSAxIEdpZ2FiYXVkCi0jICAgICAgIDIgID0gMiBHaWdhYmF1ZAotIyAgICAgICA0ICA9IDQgR2lnYWJhdWQKLSMgICAgICAgOCAgPSA4IEdpZ2FiYXVkCi0jIFZhbHVlIHJhbmdlIGlzIFswLDhdLiBEZWZhdWx0IHZhbHVlIGlzIDAuCisjIFZhbHVlIHJhbmdlIGlzIFswLDE2XS4gRGVmYXVsdCB2YWx1ZSBpcyAwLgogKi8KLQogLyoqCiAgKiBscGZjX2xpbmtfc3BlZWRfc2V0IC0gU2V0IHRoZSBhZGFwdGVycyBsaW5rIHNwZWVkCiAgKiBAcGhiYTogbHBmY19oYmEgcG9pbnRlci4KQEAgLTI4NjksNyArMjg2Niw3IEBACiAJc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKIAlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQgPSAoc3RydWN0IGxwZmNfdnBvcnQgKikgc2hvc3QtPmhvc3RkYXRhOwogCXN0cnVjdCBscGZjX2hiYSAgICpwaGJhID0gdnBvcnQtPnBoYmE7Ci0JaW50IHZhbCA9IDA7CisJaW50IHZhbCA9IExQRkNfVVNFUl9MSU5LX1NQRUVEX0FVVE87CiAJaW50IG5vbGlwID0gMDsKIAljb25zdCBjaGFyICp2YWxfYnVmID0gYnVmOwogCWludCBlcnI7CkBAIC0yODg1LDE1ICsyODgyLDIwIEBACiAJaWYgKHNzY2FuZih2YWxfYnVmLCAiJWkiLCAmdmFsKSAhPSAxKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmICgoKHZhbCA9PSBMSU5LX1NQRUVEXzFHKSAmJiAhKHBoYmEtPmxtdCAmIExNVF8xR2IpKSB8fAotCQkoKHZhbCA9PSBMSU5LX1NQRUVEXzJHKSAmJiAhKHBoYmEtPmxtdCAmIExNVF8yR2IpKSB8fAotCQkoKHZhbCA9PSBMSU5LX1NQRUVEXzRHKSAmJiAhKHBoYmEtPmxtdCAmIExNVF80R2IpKSB8fAotCQkoKHZhbCA9PSBMSU5LX1NQRUVEXzhHKSAmJiAhKHBoYmEtPmxtdCAmIExNVF84R2IpKSB8fAotCQkoKHZhbCA9PSBMSU5LX1NQRUVEXzEwRykgJiYgIShwaGJhLT5sbXQgJiBMTVRfMTBHYikpKQorCWlmICgoKHZhbCA9PSBMUEZDX1VTRVJfTElOS19TUEVFRF8xRykgJiYgIShwaGJhLT5sbXQgJiBMTVRfMUdiKSkgfHwKKwkgICAgKCh2YWwgPT0gTFBGQ19VU0VSX0xJTktfU1BFRURfMkcpICYmICEocGhiYS0+bG10ICYgTE1UXzJHYikpIHx8CisJICAgICgodmFsID09IExQRkNfVVNFUl9MSU5LX1NQRUVEXzRHKSAmJiAhKHBoYmEtPmxtdCAmIExNVF80R2IpKSB8fAorCSAgICAoKHZhbCA9PSBMUEZDX1VTRVJfTElOS19TUEVFRF84RykgJiYgIShwaGJhLT5sbXQgJiBMTVRfOEdiKSkgfHwKKwkgICAgKCh2YWwgPT0gTFBGQ19VU0VSX0xJTktfU1BFRURfMTBHKSAmJiAhKHBoYmEtPmxtdCAmIExNVF8xMEdiKSkgfHwKKwkgICAgKCh2YWwgPT0gTFBGQ19VU0VSX0xJTktfU1BFRURfMTZHKSAmJiAhKHBoYmEtPmxtdCAmIExNVF8xNkdiKSkpIHsKKwkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfSU5JVCwKKwkJCQkiMjg3OSBscGZjX2xpbmtfc3BlZWQgYXR0cmlidXRlIGNhbm5vdCBiZSBzZXQgIgorCQkJCSJ0byAlZC4gU3BlZWQgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIHBvcnQuXG4iLAorCQkJCXZhbCk7CiAJCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKCh2YWwgPj0gMCAmJiB2YWwgPD0gOCkKLQkJJiYgKExQRkNfTElOS19TUEVFRF9CSVRNQVAgJiAoMSA8PCB2YWwpKSkgeworCX0KKwlpZiAoKHZhbCA+PSAwKSAmJiAodmFsIDw9IExQRkNfVVNFUl9MSU5LX1NQRUVEX01BWCkgJiYKKwkgICAgKExQRkNfVVNFUl9MSU5LX1NQRUVEX0JJVE1BUCAmICgxIDw8IHZhbCkpKSB7CiAJCXByZXZfdmFsID0gcGhiYS0+Y2ZnX2xpbmtfc3BlZWQ7CiAJCXBoYmEtPmNmZ19saW5rX3NwZWVkID0gdmFsOwogCQlpZiAobm9saXApCkBAIC0yOTA2LDExICsyOTA4LDkgQEAKIAkJfSBlbHNlCiAJCQlyZXR1cm4gc3RybGVuKGJ1Zik7CiAJfQotCiAJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfSU5JVCwKLQkJIiVkOjA0NjkgbHBmY19saW5rX3NwZWVkIGF0dHJpYnV0ZSBjYW5ub3QgYmUgc2V0IHRvICVkLCAiCi0JCSJhbGxvd2VkIHJhbmdlIGlzIFswLCA4XVxuIiwKLQkJcGhiYS0+YnJkX25vLCB2YWwpOworCQkiMDQ2OSBscGZjX2xpbmtfc3BlZWQgYXR0cmlidXRlIGNhbm5vdCBiZSBzZXQgdG8gJWQsICIKKwkJImFsbG93ZWQgdmFsdWVzIGFyZSBbIkxQRkNfTElOS19TUEVFRF9TVFJJTkciXVxuIiwgdmFsKTsKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIApAQCAtMjkzOCw4ICsyOTM4LDggQEAKIHN0YXRpYyBpbnQKIGxwZmNfbGlua19zcGVlZF9pbml0KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgaW50IHZhbCkKIHsKLQlpZiAoKHZhbCA+PSAwICYmIHZhbCA8PSBMUEZDX01BWF9MSU5LX1NQRUVEKQotCQkmJiAoTFBGQ19MSU5LX1NQRUVEX0JJVE1BUCAmICgxIDw8IHZhbCkpKSB7CisJaWYgKCh2YWwgPj0gMCkgJiYgKHZhbCA8PSBMUEZDX1VTRVJfTElOS19TUEVFRF9NQVgpICYmCisJICAgIChMUEZDX1VTRVJfTElOS19TUEVFRF9CSVRNQVAgJiAoMSA8PCB2YWwpKSkgewogCQlwaGJhLT5jZmdfbGlua19zcGVlZCA9IHZhbDsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMjk0NywxMiArMjk0NywxMiBAQAogCQkJIjA0MDUgbHBmY19saW5rX3NwZWVkIGF0dHJpYnV0ZSBjYW5ub3QgIgogCQkJImJlIHNldCB0byAlZCwgYWxsb3dlZCB2YWx1ZXMgYXJlICIKIAkJCSJbIkxQRkNfTElOS19TUEVFRF9TVFJJTkciXVxuIiwgdmFsKTsKLQlwaGJhLT5jZmdfbGlua19zcGVlZCA9IDA7CisJcGhiYS0+Y2ZnX2xpbmtfc3BlZWQgPSBMUEZDX1VTRVJfTElOS19TUEVFRF9BVVRPOwogCXJldHVybiAtRUlOVkFMOwogfQogCiBzdGF0aWMgREVWSUNFX0FUVFIobHBmY19saW5rX3NwZWVkLCBTX0lSVUdPIHwgU19JV1VTUiwKLQkJbHBmY19saW5rX3NwZWVkX3Nob3csIGxwZmNfbGlua19zcGVlZF9zdG9yZSk7CisJCSAgIGxwZmNfbGlua19zcGVlZF9zaG93LCBscGZjX2xpbmtfc3BlZWRfc3RvcmUpOwogCiAvKgogIyBscGZjX2Flcl9zdXBwb3J0OiBTdXBwb3J0IFBDSWUgZGV2aWNlIEFkdmFuY2VkIEVycm9yIFJlcG9ydGluZyAoQUVSKQpAQCAtMzMwNSwxMiArMzMwNSwxMiBAQAogTFBGQ19BVFRSX1IoZW5hYmxlX2hiYV9yZXNldCwgMSwgMCwgMSwgIkVuYWJsZSBIQkEgcmVzZXRzIGZyb20gdGhlIGRyaXZlci4iKTsKIAogLyoKLSMgbHBmY19lbmFibGVfaGJhX2hlYXJ0YmVhdDogRW5hYmxlIEhCQSBoZWFydGJlYXQgdGltZXIuLgorIyBscGZjX2VuYWJsZV9oYmFfaGVhcnRiZWF0OiBEaXNhYmxlIEhCQSBoZWFydGJlYXQgdGltZXIuLgogIyAgICAgICAwICA9IEhCQSBIZWFydGJlYXQgZGlzYWJsZWQKICMgICAgICAgMSAgPSBIQkEgSGVhcnRiZWF0IGVuYWJsZWQgKGRlZmF1bHQpCiAjIFZhbHVlIHJhbmdlIGlzIFswLDFdLiBEZWZhdWx0IHZhbHVlIGlzIDEuCiAqLwotTFBGQ19BVFRSX1IoZW5hYmxlX2hiYV9oZWFydGJlYXQsIDEsIDAsIDEsICJFbmFibGUgSEJBIEhlYXJ0YmVhdC4iKTsKK0xQRkNfQVRUUl9SKGVuYWJsZV9oYmFfaGVhcnRiZWF0LCAwLCAwLCAxLCAiRW5hYmxlIEhCQSBIZWFydGJlYXQuIik7CiAKIC8qCiAjIGxwZmNfZW5hYmxlX2JnOiBFbmFibGUgQmxvY2tHdWFyZCAoRW11bGV4J3MgSW1wbGVtZW50YXRpb24gb2YgVDEwLURJRikKQEAgLTM0MDEsNiArMzQwMSw3IEBACiAJJmRldl9hdHRyX2xwZmNfZmRtaV9vbiwKIAkmZGV2X2F0dHJfbHBmY19tYXhfbHVucywKIAkmZGV2X2F0dHJfbHBmY19lbmFibGVfbnBpdiwKKwkmZGV2X2F0dHJfbHBmY19lbmFibGVfcnJxLAogCSZkZXZfYXR0cl9ucG9ydF9ldnRfY250LAogCSZkZXZfYXR0cl9ib2FyZF9tb2RlLAogCSZkZXZfYXR0cl9tYXhfdnBpLApAQCAtMzc5OCw4ICszNzk5LDcgQEAKIAkJCX0KIAkJCWJyZWFrOwogCQljYXNlIE1CWF9SRUFEX1NQQVJNNjQ6Ci0JCWNhc2UgTUJYX1JFQURfTEE6Ci0JCWNhc2UgTUJYX1JFQURfTEE2NDoKKwkJY2FzZSBNQlhfUkVBRF9UT1BPTE9HWToKIAkJY2FzZSBNQlhfUkVHX0xPR0lOOgogCQljYXNlIE1CWF9SRUdfTE9HSU42NDoKIAkJY2FzZSBNQlhfQ09ORklHX1BPUlQ6CkBAIC0zOTg5LDcgKzM5ODksNyBAQAogCWlmICh2cG9ydC0+cG9ydF90eXBlID09IExQRkNfTlBJVl9QT1JUKSB7CiAJCWZjX2hvc3RfcG9ydF90eXBlKHNob3N0KSA9IEZDX1BPUlRUWVBFX05QSVY7CiAJfSBlbHNlIGlmIChscGZjX2lzX2xpbmtfdXAocGhiYSkpIHsKLQkJaWYgKHBoYmEtPmZjX3RvcG9sb2d5ID09IFRPUE9MT0dZX0xPT1ApIHsKKwkJaWYgKHBoYmEtPmZjX3RvcG9sb2d5ID09IExQRkNfVE9QT0xPR1lfTE9PUCkgewogCQkJaWYgKHZwb3J0LT5mY19mbGFnICYgRkNfUFVCTElDX0xPT1ApCiAJCQkJZmNfaG9zdF9wb3J0X3R5cGUoc2hvc3QpID0gRkNfUE9SVFRZUEVfTkxQT1JUOwogCQkJZWxzZQpAQCAtNDA1OCwyMyArNDA1OCwyNiBAQAogCiAJaWYgKGxwZmNfaXNfbGlua191cChwaGJhKSkgewogCQlzd2l0Y2gocGhiYS0+ZmNfbGlua3NwZWVkKSB7Ci0JCQljYXNlIExBXzFHSFpfTElOSzoKLQkJCQlmY19ob3N0X3NwZWVkKHNob3N0KSA9IEZDX1BPUlRTUEVFRF8xR0JJVDsKKwkJY2FzZSBMUEZDX0xJTktfU1BFRURfMUdIWjoKKwkJCWZjX2hvc3Rfc3BlZWQoc2hvc3QpID0gRkNfUE9SVFNQRUVEXzFHQklUOwogCQkJYnJlYWs7Ci0JCQljYXNlIExBXzJHSFpfTElOSzoKLQkJCQlmY19ob3N0X3NwZWVkKHNob3N0KSA9IEZDX1BPUlRTUEVFRF8yR0JJVDsKKwkJY2FzZSBMUEZDX0xJTktfU1BFRURfMkdIWjoKKwkJCWZjX2hvc3Rfc3BlZWQoc2hvc3QpID0gRkNfUE9SVFNQRUVEXzJHQklUOwogCQkJYnJlYWs7Ci0JCQljYXNlIExBXzRHSFpfTElOSzoKLQkJCQlmY19ob3N0X3NwZWVkKHNob3N0KSA9IEZDX1BPUlRTUEVFRF80R0JJVDsKKwkJY2FzZSBMUEZDX0xJTktfU1BFRURfNEdIWjoKKwkJCWZjX2hvc3Rfc3BlZWQoc2hvc3QpID0gRkNfUE9SVFNQRUVEXzRHQklUOwogCQkJYnJlYWs7Ci0JCQljYXNlIExBXzhHSFpfTElOSzoKLQkJCQlmY19ob3N0X3NwZWVkKHNob3N0KSA9IEZDX1BPUlRTUEVFRF84R0JJVDsKKwkJY2FzZSBMUEZDX0xJTktfU1BFRURfOEdIWjoKKwkJCWZjX2hvc3Rfc3BlZWQoc2hvc3QpID0gRkNfUE9SVFNQRUVEXzhHQklUOwogCQkJYnJlYWs7Ci0JCQljYXNlIExBXzEwR0haX0xJTks6Ci0JCQkJZmNfaG9zdF9zcGVlZChzaG9zdCkgPSBGQ19QT1JUU1BFRURfMTBHQklUOworCQljYXNlIExQRkNfTElOS19TUEVFRF8xMEdIWjoKKwkJCWZjX2hvc3Rfc3BlZWQoc2hvc3QpID0gRkNfUE9SVFNQRUVEXzEwR0JJVDsKIAkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQlmY19ob3N0X3NwZWVkKHNob3N0KSA9IEZDX1BPUlRTUEVFRF9VTktOT1dOOworCQljYXNlIExQRkNfTElOS19TUEVFRF8xNkdIWjoKKwkJCWZjX2hvc3Rfc3BlZWQoc2hvc3QpID0gRkNfUE9SVFNQRUVEXzE2R0JJVDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZmNfaG9zdF9zcGVlZChzaG9zdCkgPSBGQ19QT1JUU1BFRURfVU5LTk9XTjsKIAkJCWJyZWFrOwogCQl9CiAJfSBlbHNlCkBAIC00MDk3LDcgKzQxMDAsNyBAQAogCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CiAKIAlpZiAoKHZwb3J0LT5mY19mbGFnICYgRkNfRkFCUklDKSB8fAotCSAgICAoKHBoYmEtPmZjX3RvcG9sb2d5ID09IFRPUE9MT0dZX0xPT1ApICYmCisJICAgICgocGhiYS0+ZmNfdG9wb2xvZ3kgPT0gTFBGQ19UT1BPTE9HWV9MT09QKSAmJgogCSAgICAgKHZwb3J0LT5mY19mbGFnICYgRkNfUFVCTElDX0xPT1ApKSkKIAkJbm9kZV9uYW1lID0gd3duX3RvX3U2NChwaGJhLT5mY19mYWJwYXJhbS5ub2RlTmFtZS51Lnd3bik7CiAJZWxzZQpAQCAtNDIwOCwxMSArNDIxMSwxMSBAQAogCWhzLT5pbnZhbGlkX2NyY19jb3VudCAtPSBsc28tPmludmFsaWRfY3JjX2NvdW50OwogCWhzLT5lcnJvcl9mcmFtZXMgLT0gbHNvLT5lcnJvcl9mcmFtZXM7CiAKLQlpZiAocGhiYS0+aGJhX2ZsYWcgJiBIQkFfRkNPRV9TVVBQT1JUKSB7CisJaWYgKHBoYmEtPmhiYV9mbGFnICYgSEJBX0ZDT0VfTU9ERSkgewogCQlocy0+bGlwX2NvdW50ID0gLTE7CiAJCWhzLT5ub3NfY291bnQgPSAocGhiYS0+bGlua19ldmVudHMgPj4gMSk7CiAJCWhzLT5ub3NfY291bnQgLT0gbHNvLT5saW5rX2V2ZW50czsKLQl9IGVsc2UgaWYgKHBoYmEtPmZjX3RvcG9sb2d5ID09IFRPUE9MT0dZX0xPT1ApIHsKKwl9IGVsc2UgaWYgKHBoYmEtPmZjX3RvcG9sb2d5ID09IExQRkNfVE9QT0xPR1lfTE9PUCkgewogCQlocy0+bGlwX2NvdW50ID0gKHBoYmEtPmZjX2V2ZW50VGFnID4+IDEpOwogCQlocy0+bGlwX2NvdW50IC09IGxzby0+bGlua19ldmVudHM7CiAJCWhzLT5ub3NfY291bnQgPSAtMTsKQEAgLTQzMDMsNyArNDMwNiw3IEBACiAJbHNvLT5pbnZhbGlkX3R4X3dvcmRfY291bnQgPSBwbWItPnVuLnZhclJkTG5rLmludmFsaWRYbWl0V29yZDsKIAlsc28tPmludmFsaWRfY3JjX2NvdW50ID0gcG1iLT51bi52YXJSZExuay5jcmNDbnQ7CiAJbHNvLT5lcnJvcl9mcmFtZXMgPSBwbWItPnVuLnZhclJkTG5rLmNyY0NudDsKLQlpZiAocGhiYS0+aGJhX2ZsYWcgJiBIQkFfRkNPRV9TVVBQT1JUKQorCWlmIChwaGJhLT5oYmFfZmxhZyAmIEhCQV9GQ09FX01PREUpCiAJCWxzby0+bGlua19ldmVudHMgPSAocGhiYS0+bGlua19ldmVudHMgPj4gMSk7CiAJZWxzZQogCQlsc28tPmxpbmtfZXZlbnRzID0gKHBoYmEtPmZjX2V2ZW50VGFnID4+IDEpOwpAQCAtNDYxNSw2ICs0NjE4LDcgQEAKIAlscGZjX2xpbmtfc3BlZWRfaW5pdChwaGJhLCBscGZjX2xpbmtfc3BlZWQpOwogCWxwZmNfcG9sbF90bW9faW5pdChwaGJhLCBscGZjX3BvbGxfdG1vKTsKIAlscGZjX2VuYWJsZV9ucGl2X2luaXQocGhiYSwgbHBmY19lbmFibGVfbnBpdik7CisJbHBmY19lbmFibGVfcnJxX2luaXQocGhiYSwgbHBmY19lbmFibGVfcnJxKTsKIAlscGZjX3VzZV9tc2lfaW5pdChwaGJhLCBscGZjX3VzZV9tc2kpOwogCWxwZmNfZmNwX2ltYXhfaW5pdChwaGJhLCBscGZjX2ZjcF9pbWF4KTsKIAlscGZjX2ZjcF93cV9jb3VudF9pbml0KHBoYmEsIGxwZmNfZmNwX3dxX2NvdW50KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYnNnLmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2JzZy5jCmluZGV4IDcyNjBjM2EuLjBkZDQzYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYnNnLmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ic2cuYwpAQCAtMTYyLDcgKzE2Miw2IEBACiAJCQlzdHJ1Y3QgbHBmY19pb2NicSAqY21kaW9jYnEsCiAJCQlzdHJ1Y3QgbHBmY19pb2NicSAqcnNwaW9jYnEpCiB7Ci0JdW5zaWduZWQgbG9uZyBpZmxhZ3M7CiAJc3RydWN0IGJzZ19qb2JfZGF0YSAqZGRfZGF0YTsKIAlzdHJ1Y3QgZmNfYnNnX2pvYiAqam9iOwogCUlPQ0JfdCAqcnNwOwpAQCAtMTczLDkgKzE3MiwxMCBAQAogCWludCByYyA9IDA7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOwotCWRkX2RhdGEgPSBjbWRpb2NicS0+Y29udGV4dDE7CisJZGRfZGF0YSA9IGNtZGlvY2JxLT5jb250ZXh0MjsKIAlpZiAoIWRkX2RhdGEpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOworCQlscGZjX3NsaV9yZWxlYXNlX2lvY2JxKHBoYmEsIGNtZGlvY2JxKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTgzLDE3ICsxODMsOSBAQAogCWpvYiA9IGlvY2ItPnNldF9qb2I7CiAJam9iLT5kZF9kYXRhID0gTlVMTDsgLyogc28gdGltZW91dCBoYW5kbGVyIGRvZXMgbm90IHJlcGx5ICovCiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+aGJhbG9jaywgaWZsYWdzKTsKLQljbWRpb2NicS0+aW9jYl9mbGFnIHw9IExQRkNfSU9fV0FLRTsKLQlpZiAoY21kaW9jYnEtPmNvbnRleHQyICYmIHJzcGlvY2JxKQotCQltZW1jcHkoJigoc3RydWN0IGxwZmNfaW9jYnEgKiljbWRpb2NicS0+Y29udGV4dDIpLT5pb2NiLAotCQkgICAgICAgJnJzcGlvY2JxLT5pb2NiLCBzaXplb2YoSU9DQl90KSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywgaWZsYWdzKTsKLQogCWJtcCA9IGlvY2ItPmJtcDsKLQlyc3Bpb2NicSA9IGlvY2ItPnJzcGlvY2JxOwogCXJzcCA9ICZyc3Bpb2NicS0+aW9jYjsKLQluZGxwID0gaW9jYi0+bmRscDsKKwluZGxwID0gY21kaW9jYnEtPmNvbnRleHQxOwogCiAJcGNpX3VubWFwX3NnKHBoYmEtPnBjaWRldiwgam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfbGlzdCwKIAkJICAgICBqb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19jbnQsIERNQV9UT19ERVZJQ0UpOwpAQCAtMjIwLDcgKzIxMiw2IEBACiAJCQlyc3AtPnVuLmdlbnJlcTY0LmJkbC5iZGVTaXplOwogCiAJbHBmY19tYnVmX2ZyZWUocGhiYSwgYm1wLT52aXJ0LCBibXAtPnBoeXMpOwotCWxwZmNfc2xpX3JlbGVhc2VfaW9jYnEocGhiYSwgcnNwaW9jYnEpOwogCWxwZmNfc2xpX3JlbGVhc2VfaW9jYnEocGhiYSwgY21kaW9jYnEpOwogCWxwZmNfbmxwX3B1dChuZGxwKTsKIAlrZnJlZShibXApOwpAQCAtMjQ3LDkgKzIzOCw3IEBACiAJc3RydWN0IHVscF9iZGU2NCAqYnBsID0gTlVMTDsKIAl1aW50MzJfdCB0aW1lb3V0OwogCXN0cnVjdCBscGZjX2lvY2JxICpjbWRpb2NicSA9IE5VTEw7Ci0Jc3RydWN0IGxwZmNfaW9jYnEgKnJzcGlvY2JxID0gTlVMTDsKIAlJT0NCX3QgKmNtZDsKLQlJT0NCX3QgKnJzcDsKIAlzdHJ1Y3QgbHBmY19kbWFidWYgKmJtcCA9IE5VTEw7CiAJaW50IHJlcXVlc3RfbnNlZzsKIAlpbnQgcmVwbHlfbnNlZzsKQEAgLTI5NiwxNyArMjg1LDEwIEBACiAJfQogCiAJY21kID0gJmNtZGlvY2JxLT5pb2NiOwotCXJzcGlvY2JxID0gbHBmY19zbGlfZ2V0X2lvY2JxKHBoYmEpOwotCWlmICghcnNwaW9jYnEpIHsKLQkJcmMgPSAtRU5PTUVNOwotCQlnb3RvIGZyZWVfY21kaW9jYnE7Ci0JfQotCi0JcnNwID0gJnJzcGlvY2JxLT5pb2NiOwogCWJtcC0+dmlydCA9IGxwZmNfbWJ1Zl9hbGxvYyhwaGJhLCAwLCAmYm1wLT5waHlzKTsKIAlpZiAoIWJtcC0+dmlydCkgewogCQlyYyA9IC1FTk9NRU07Ci0JCWdvdG8gZnJlZV9yc3Bpb2NicTsKKwkJZ290byBmcmVlX2NtZGlvY2JxOwogCX0KIAogCUlOSVRfTElTVF9IRUFEKCZibXAtPmxpc3QpOwpAQCAtMzU4LDE0ICszNDAsMTIgQEAKIAljbWQtPnVscFRpbWVvdXQgPSB0aW1lb3V0OwogCiAJY21kaW9jYnEtPmlvY2JfY21wbCA9IGxwZmNfYnNnX3NlbmRfbWdtdF9jbWRfY21wOwotCWNtZGlvY2JxLT5jb250ZXh0MSA9IGRkX2RhdGE7Ci0JY21kaW9jYnEtPmNvbnRleHQyID0gcnNwaW9jYnE7CisJY21kaW9jYnEtPmNvbnRleHQxID0gbmRscDsKKwljbWRpb2NicS0+Y29udGV4dDIgPSBkZF9kYXRhOwogCWRkX2RhdGEtPnR5cGUgPSBUWVBFX0lPQ0I7CiAJZGRfZGF0YS0+Y29udGV4dF91bi5pb2NiLmNtZGlvY2JxID0gY21kaW9jYnE7Ci0JZGRfZGF0YS0+Y29udGV4dF91bi5pb2NiLnJzcGlvY2JxID0gcnNwaW9jYnE7CiAJZGRfZGF0YS0+Y29udGV4dF91bi5pb2NiLnNldF9qb2IgPSBqb2I7CiAJZGRfZGF0YS0+Y29udGV4dF91bi5pb2NiLmJtcCA9IGJtcDsKLQlkZF9kYXRhLT5jb250ZXh0X3VuLmlvY2IubmRscCA9IG5kbHA7CiAKIAlpZiAocGhiYS0+Y2ZnX3BvbGwgJiBESVNBQkxFX0ZDUF9SSU5HX0lOVCkgewogCQljcmVnX3ZhbCA9IHJlYWRsKHBoYmEtPkhDcmVnYWRkcik7CkBAIC0zOTEsOCArMzcxLDYgQEAKIAogCWxwZmNfbWJ1Zl9mcmVlKHBoYmEsIGJtcC0+dmlydCwgYm1wLT5waHlzKTsKIAotZnJlZV9yc3Bpb2NicToKLQlscGZjX3NsaV9yZWxlYXNlX2lvY2JxKHBoYmEsIHJzcGlvY2JxKTsKIGZyZWVfY21kaW9jYnE6CiAJbHBmY19zbGlfcmVsZWFzZV9pb2NicShwaGJhLCBjbWRpb2NicSk7CiBmcmVlX2JtcDoKQEAgLTEyMjAsNyArMTE5OCw3IEBACiAJaW50IHJjID0gMDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7Ci0JZGRfZGF0YSA9IGNtZGlvY2JxLT5jb250ZXh0MTsKKwlkZF9kYXRhID0gY21kaW9jYnEtPmNvbnRleHQyOwogCS8qIG5vcm1hbCBjb21wbGV0aW9uIGFuZCB0aW1lb3V0IGNyb3NzZWQgcGF0aHMsIGFscmVhZHkgZG9uZSAqLwogCWlmICghZGRfZGF0YSkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CkBAIC0xMzY5LDggKzEzNDcsOCBAQAogCWN0aW9jYi0+Y29udGV4dDMgPSBibXA7CiAKIAljdGlvY2ItPmlvY2JfY21wbCA9IGxwZmNfaXNzdWVfY3RfcnNwX2NtcDsKLQljdGlvY2ItPmNvbnRleHQxID0gZGRfZGF0YTsKLQljdGlvY2ItPmNvbnRleHQyID0gTlVMTDsKKwljdGlvY2ItPmNvbnRleHQyID0gZGRfZGF0YTsKKwljdGlvY2ItPmNvbnRleHQxID0gbmRscDsKIAlkZF9kYXRhLT50eXBlID0gVFlQRV9JT0NCOwogCWRkX2RhdGEtPmNvbnRleHRfdW4uaW9jYi5jbWRpb2NicSA9IGN0aW9jYjsKIAlkZF9kYXRhLT5jb250ZXh0X3VuLmlvY2IucnNwaW9jYnEgPSBOVUxMOwpAQCAtMTY0MSw3ICsxNjE5LDcgQEAKICAqIFRoaXMgZnVuY3Rpb24gb2J0YWlucyBhIHJlbW90ZSBwb3J0IGxvZ2luIGlkIHNvIHRoZSBkaWFnIGxvb3BiYWNrIHRlc3QKICAqIGNhbiBzZW5kIGFuZCByZWNlaXZlIGl0cyBvd24gdW5zb2xpY2l0ZWQgQ1QgY29tbWFuZC4KICAqKi8KLXN0YXRpYyBpbnQgbHBmY2RpYWdfbG9vcF9zZWxmX3JlZyhzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHVpbnQxNl90ICogcnBpKQorc3RhdGljIGludCBscGZjZGlhZ19sb29wX3NlbGZfcmVnKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgdWludDE2X3QgKnJwaSkKIHsKIAlMUEZDX01CT1hRX3QgKm1ib3g7CiAJc3RydWN0IGxwZmNfZG1hYnVmICpkbWFidWZmOwpAQCAtMTY1MSwxMCArMTYyOSwxNCBAQAogCWlmICghbWJveCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwlpZiAocGhiYS0+c2xpX3JldiA9PSBMUEZDX1NMSV9SRVY0KQorCQkqcnBpID0gbHBmY19zbGk0X2FsbG9jX3JwaShwaGJhKTsKIAlzdGF0dXMgPSBscGZjX3JlZ19ycGkocGhiYSwgMCwgcGhiYS0+cHBvcnQtPmZjX215RElELAotCQkJCSh1aW50OF90ICopJnBoYmEtPnBwb3J0LT5mY19zcGFyYW0sIG1ib3gsIDApOworCQkJICAgICAgKHVpbnQ4X3QgKikmcGhiYS0+cHBvcnQtPmZjX3NwYXJhbSwgbWJveCwgKnJwaSk7CiAJaWYgKHN0YXR1cykgewogCQltZW1wb29sX2ZyZWUobWJveCwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CisJCWlmIChwaGJhLT5zbGlfcmV2ID09IExQRkNfU0xJX1JFVjQpCisJCQlscGZjX3NsaTRfZnJlZV9ycGkocGhiYSwgKnJwaSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtMTY2OCw2ICsxNjUwLDggQEAKIAkJa2ZyZWUoZG1hYnVmZik7CiAJCWlmIChzdGF0dXMgIT0gTUJYX1RJTUVPVVQpCiAJCQltZW1wb29sX2ZyZWUobWJveCwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CisJCWlmIChwaGJhLT5zbGlfcmV2ID09IExQRkNfU0xJX1JFVjQpCisJCQlscGZjX3NsaTRfZnJlZV9ycGkocGhiYSwgKnJwaSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtMTcwNCw4ICsxNjg4LDkgQEAKIAkJCW1lbXBvb2xfZnJlZShtYm94LCBwaGJhLT5tYm94X21lbV9wb29sKTsKIAkJcmV0dXJuIC1FSU87CiAJfQotCiAJbWVtcG9vbF9mcmVlKG1ib3gsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOworCWlmIChwaGJhLT5zbGlfcmV2ID09IExQRkNfU0xJX1JFVjQpCisJCWxwZmNfc2xpNF9mcmVlX3JwaShwaGJhLCBycGkpOwogCXJldHVybiAwOwogfQogCkBAIC0yMTAyLDcgKzIwODcsNyBAQAogCXVpbnQzMl90IHNpemU7CiAJdWludDMyX3QgZnVsbF9zaXplOwogCXNpemVfdCBzZWdtZW50X2xlbiA9IDAsIHNlZ21lbnRfb2Zmc2V0ID0gMCwgY3VycmVudF9vZmZzZXQgPSAwOwotCXVpbnQxNl90IHJwaTsKKwl1aW50MTZfdCBycGkgPSAwOwogCXN0cnVjdCBscGZjX2lvY2JxICpjbWRpb2NicSwgKnJzcGlvY2JxOwogCUlPQ0JfdCAqY21kLCAqcnNwOwogCXN0cnVjdCBscGZjX3NsaV9jdF9yZXF1ZXN0ICpjdHJlcTsKQEAgLTIxNjIsNyArMjE0Nyw3IEBACiAJCWdvdG8gbG9vcGJhY2tfdGVzdF9leGl0OwogCX0KIAotCWlmIChzaXplID49IEJVRl9TWl80SykgeworCWlmIChmdWxsX3NpemUgPj0gQlVGX1NaXzRLKSB7CiAJCS8qCiAJCSAqIEFsbG9jYXRlIG1lbW9yeSBmb3IgaW9jdGwgZGF0YS4gSWYgYnVmZmVyIGlzIGJpZ2dlciB0aGFuIDY0aywKIAkJICogdGhlbiB3ZSBhbGxvY2F0ZSA2NGsgYW5kIHJlLXVzZSB0aGF0IGJ1ZmZlciBvdmVyIGFuZCBvdmVyIHRvCkBAIC0yMTcxLDcgKzIxNTYsNyBAQAogCQkgKiBwcm9ibGVtIHdpdGggR0VUX0ZDUFRBUkdFVE1BUFBJTkcuLi4KIAkJICovCiAJCWlmIChzaXplIDw9ICg2NCAqIDEwMjQpKQotCQkJdG90YWxfbWVtID0gc2l6ZTsKKwkJCXRvdGFsX21lbSA9IGZ1bGxfc2l6ZTsKIAkJZWxzZQogCQkJdG90YWxfbWVtID0gNjQgKiAxMDI0OwogCX0gZWxzZQpAQCAtMjE4OSw3ICsyMTc0LDYgQEAKIAlzZ19jb3B5X3RvX2J1ZmZlcihqb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19saXN0LAogCQkJCWpvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2NudCwKIAkJCQlwdHIsIHNpemUpOwotCiAJcmMgPSBscGZjZGlhZ19sb29wX3NlbGZfcmVnKHBoYmEsICZycGkpOwogCWlmIChyYykKIAkJZ290byBsb29wYmFja190ZXN0X2V4aXQ7CkBAIC0yNjAxLDEyICsyNTg1LDExIEBACiAJCQlwaGJhLT53YWl0XzRfbWxvX21haW50X2ZsZyA9IDE7CiAJCX0gZWxzZSBpZiAobWItPnVuLnZhcldvcmRzWzBdID09IFNFVFZBUl9NTE9SU1QpIHsKIAkJCXBoYmEtPmxpbmtfZmxhZyAmPSB+TFNfTE9PUEJBQ0tfTU9ERTsKLQkJCXBoYmEtPmZjX3RvcG9sb2d5ID0gVE9QT0xPR1lfUFRfUFQ7CisJCQlwaGJhLT5mY190b3BvbG9neSA9IExQRkNfVE9QT0xPR1lfUFRfUFQ7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBNQlhfUkVBRF9TUEFSTTY0OgotCWNhc2UgTUJYX1JFQURfTEE6Ci0JY2FzZSBNQlhfUkVBRF9MQTY0OgorCWNhc2UgTUJYX1JFQURfVE9QT0xPR1k6CiAJY2FzZSBNQlhfUkVHX0xPR0lOOgogCWNhc2UgTUJYX1JFR19MT0dJTjY0OgogCWNhc2UgTUJYX0NPTkZJR19QT1JUOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19jcnRuLmggYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2NydG4uaAppbmRleCBhNWY1YTA5Li4xN2ZkZTUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2NydG4uaAorKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2NydG4uaApAQCAtMzEsNyArMzEsNyBAQAogdm9pZCBscGZjX2NvbmZpZ19hc3luYyhzdHJ1Y3QgbHBmY19oYmEgKiwgTFBGQ19NQk9YUV90ICosIHVpbnQzMl90KTsKIAogdm9pZCBscGZjX2hlYXJ0X2JlYXQoc3RydWN0IGxwZmNfaGJhICosIExQRkNfTUJPWFFfdCAqKTsKLWludCBscGZjX3JlYWRfbGEoc3RydWN0IGxwZmNfaGJhICosIExQRkNfTUJPWFFfdCAqLCBzdHJ1Y3QgbHBmY19kbWFidWYgKik7CitpbnQgbHBmY19yZWFkX3RvcG9sb2d5KHN0cnVjdCBscGZjX2hiYSAqLCBMUEZDX01CT1hRX3QgKiwgc3RydWN0IGxwZmNfZG1hYnVmICopOwogdm9pZCBscGZjX2NsZWFyX2xhKHN0cnVjdCBscGZjX2hiYSAqLCBMUEZDX01CT1hRX3QgKik7CiB2b2lkIGxwZmNfaXNzdWVfY2xlYXJfbGEoc3RydWN0IGxwZmNfaGJhICosIHN0cnVjdCBscGZjX3Zwb3J0ICopOwogdm9pZCBscGZjX2NvbmZpZ19saW5rKHN0cnVjdCBscGZjX2hiYSAqLCBMUEZDX01CT1hRX3QgKik7CkBAIC00MCw3ICs0MCw3IEBACiB2b2lkIGxwZmNfcmVhZF9jb25maWcoc3RydWN0IGxwZmNfaGJhICosIExQRkNfTUJPWFFfdCAqKTsKIHZvaWQgbHBmY19yZWFkX2xua19zdGF0KHN0cnVjdCBscGZjX2hiYSAqLCBMUEZDX01CT1hRX3QgKik7CiBpbnQgbHBmY19yZWdfcnBpKHN0cnVjdCBscGZjX2hiYSAqLCB1aW50MTZfdCwgdWludDMyX3QsIHVpbnQ4X3QgKiwKLQkJIExQRkNfTUJPWFFfdCAqLCB1aW50MzJfdCk7CisJCSBMUEZDX01CT1hRX3QgKiwgdWludDE2X3QpOwogdm9pZCBscGZjX3NldF92YXIoc3RydWN0IGxwZmNfaGJhICosIExQRkNfTUJPWFFfdCAqLCB1aW50MzJfdCwgdWludDMyX3QpOwogdm9pZCBscGZjX3VucmVnX2xvZ2luKHN0cnVjdCBscGZjX2hiYSAqLCB1aW50MTZfdCwgdWludDMyX3QsIExQRkNfTUJPWFFfdCAqKTsKIHZvaWQgbHBmY191bnJlZ19kaWQoc3RydWN0IGxwZmNfaGJhICosIHVpbnQxNl90LCB1aW50MzJfdCwgTFBGQ19NQk9YUV90ICopOwpAQCAtNjQsNyArNjQsNyBAQAogaW50IGxwZmNfbGlua2Rvd24oc3RydWN0IGxwZmNfaGJhICopOwogdm9pZCBscGZjX2xpbmtkb3duX3BvcnQoc3RydWN0IGxwZmNfdnBvcnQgKik7CiB2b2lkIGxwZmNfcG9ydF9saW5rX2ZhaWx1cmUoc3RydWN0IGxwZmNfdnBvcnQgKik7Ci12b2lkIGxwZmNfbWJ4X2NtcGxfcmVhZF9sYShzdHJ1Y3QgbHBmY19oYmEgKiwgTFBGQ19NQk9YUV90ICopOwordm9pZCBscGZjX21ieF9jbXBsX3JlYWRfdG9wb2xvZ3koc3RydWN0IGxwZmNfaGJhICosIExQRkNfTUJPWFFfdCAqKTsKIHZvaWQgbHBmY19pbml0X3ZwaV9jbXBsKHN0cnVjdCBscGZjX2hiYSAqLCBMUEZDX01CT1hRX3QgKik7CiB2b2lkIGxwZmNfY2FuY2VsX2FsbF92cG9ydF9yZXRyeV9kZWxheV90aW1lcihzdHJ1Y3QgbHBmY19oYmEgKik7CiB2b2lkIGxwZmNfcmV0cnlfcHBvcnRfZGlzY292ZXJ5KHN0cnVjdCBscGZjX2hiYSAqKTsKQEAgLTEyMSw2ICsxMjEsNyBAQAogaW50IGxwZmNfZWxzX2Noa19sYXR0KHN0cnVjdCBscGZjX3Zwb3J0ICopOwogaW50IGxwZmNfZWxzX2Fib3J0X2Zsb2dpKHN0cnVjdCBscGZjX2hiYSAqKTsKIGludCBscGZjX2luaXRpYWxfZmxvZ2koc3RydWN0IGxwZmNfdnBvcnQgKik7Cit2b2lkIGxwZmNfaXNzdWVfaW5pdF92Zmkoc3RydWN0IGxwZmNfdnBvcnQgKik7CiBpbnQgbHBmY19pbml0aWFsX2ZkaXNjKHN0cnVjdCBscGZjX3Zwb3J0ICopOwogaW50IGxwZmNfaXNzdWVfZWxzX3Bsb2dpKHN0cnVjdCBscGZjX3Zwb3J0ICosIHVpbnQzMl90LCB1aW50OF90KTsKIGludCBscGZjX2lzc3VlX2Vsc19wcmxpKHN0cnVjdCBscGZjX3Zwb3J0ICosIHN0cnVjdCBscGZjX25vZGVsaXN0ICosIHVpbnQ4X3QpOwpAQCAtNDE1LDUgKzQxNiwxMyBAQAogaW50IF9fbHBmY19zbGlfaXNzdWVfaW9jYihzdHJ1Y3QgbHBmY19oYmEgKiwgdWludDMyX3QsCiAJc3RydWN0IGxwZmNfaW9jYnEgKiwgdWludDMyX3QpOwogdWludDMyX3QgbHBmY19kcmFpbl90eHEoc3RydWN0IGxwZmNfaGJhICopOwotCi0KK3ZvaWQgbHBmY19jbHJfcnJxX2FjdGl2ZShzdHJ1Y3QgbHBmY19oYmEgKiwgdWludDE2X3QsIHN0cnVjdCBscGZjX25vZGVfcnJxICopOworaW50IGxwZmNfdGVzdF9ycnFfYWN0aXZlKHN0cnVjdCBscGZjX2hiYSAqLCBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqLCB1aW50MTZfdCk7Cit2b2lkIGxwZmNfaGFuZGxlX3JycV9hY3RpdmUoc3RydWN0IGxwZmNfaGJhICopOworaW50IGxwZmNfc2VuZF9ycnEoc3RydWN0IGxwZmNfaGJhICosIHN0cnVjdCBscGZjX25vZGVfcnJxICopOworaW50IGxwZmNfc2V0X3JycV9hY3RpdmUoc3RydWN0IGxwZmNfaGJhICosIHN0cnVjdCBscGZjX25vZGVsaXN0ICosCisJdWludDE2X3QsIHVpbnQxNl90LCB1aW50MTZfdCk7Cit2b2lkIGxwZmNfY2xlYW51cF93dF9ycnFzKHN0cnVjdCBscGZjX2hiYSAqKTsKK3ZvaWQgbHBmY19jbGVhbnVwX3Zwb3J0c19ycnFzKHN0cnVjdCBscGZjX3Zwb3J0ICopOworc3RydWN0IGxwZmNfbm9kZV9ycnEgKmxwZmNfZ2V0X2FjdGl2ZV9ycnEoc3RydWN0IGxwZmNfdnBvcnQgKiwgdWludDE2X3QsCisJdWludDMyX3QpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19jdC5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19jdC5jCmluZGV4IDQ2M2I3NDkuLmMwMDRmYTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfY3QuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2N0LmMKQEAgLTQ4LDE0ICs0OCwxNCBAQAogI2luY2x1ZGUgImxwZmNfdnBvcnQuaCIKICNpbmNsdWRlICJscGZjX2RlYnVnZnMuaCIKIAotI2RlZmluZSBIQkFfUE9SVFNQRUVEX1VOS05PV04gICAgICAgICAgICAgICAwCS8qIFVua25vd24gLSB0cmFuc2NlaXZlcgotCQkJCQkJICogaW5jYXBhYmxlIG9mIHJlcG9ydGluZyAqLwotI2RlZmluZSBIQkFfUE9SVFNQRUVEXzFHQklUICAgICAgICAgICAgICAgICAxCS8qIDEgR0JpdC9zZWMgKi8KLSNkZWZpbmUgSEJBX1BPUlRTUEVFRF8yR0JJVCAgICAgICAgICAgICAgICAgMgkvKiAyIEdCaXQvc2VjICovCi0jZGVmaW5lIEhCQV9QT1JUU1BFRURfNEdCSVQgICAgICAgICAgICAgICAgIDggICAvKiA0IEdCaXQvc2VjICovCi0jZGVmaW5lIEhCQV9QT1JUU1BFRURfOEdCSVQgICAgICAgICAgICAgICAgMTYgICAvKiA4IEdCaXQvc2VjICovCi0jZGVmaW5lIEhCQV9QT1JUU1BFRURfMTBHQklUICAgICAgICAgICAgICAgIDQJLyogMTAgR0JpdC9zZWMgKi8KLSNkZWZpbmUgSEJBX1BPUlRTUEVFRF9OT1RfTkVHT1RJQVRFRCAgICAgICAgNQkvKiBTcGVlZCBub3QgZXN0YWJsaXNoZWQgKi8KKy8qIEZETUkgUG9ydCBTcGVlZCBkZWZpbml0aW9ucyAqLworI2RlZmluZSBIQkFfUE9SVFNQRUVEXzFHQklUCQkweDAwMDEJLyogMSBHQml0L3NlYyAqLworI2RlZmluZSBIQkFfUE9SVFNQRUVEXzJHQklUCQkweDAwMDIJLyogMiBHQml0L3NlYyAqLworI2RlZmluZSBIQkFfUE9SVFNQRUVEXzRHQklUCQkweDAwMDgJLyogNCBHQml0L3NlYyAqLworI2RlZmluZSBIQkFfUE9SVFNQRUVEXzEwR0JJVAkJMHgwMDA0CS8qIDEwIEdCaXQvc2VjICovCisjZGVmaW5lIEhCQV9QT1JUU1BFRURfOEdCSVQJCTB4MDAxMAkvKiA4IEdCaXQvc2VjICovCisjZGVmaW5lIEhCQV9QT1JUU1BFRURfMTZHQklUCQkweDAwMjAJLyogMTYgR0JpdC9zZWMgKi8KKyNkZWZpbmUgSEJBX1BPUlRTUEVFRF9VTktOT1dOCQkweDA4MDAJLyogVW5rbm93biAqLwogCiAjZGVmaW5lIEZPVVJCWVRFUwk0CiAKQEAgLTE1OTMsOCArMTU5MywxMCBAQAogCQkJYWUtPmFkLmJpdHMuQXR0ckxlbiA9IGJlMTZfdG9fY3B1KEZPVVJCWVRFUyArIDQpOwogCiAJCQlhZS0+dW4uU3VwcG9ydFNwZWVkID0gMDsKKwkJCWlmIChwaGJhLT5sbXQgJiBMTVRfMTZHYikKKwkJCQlhZS0+dW4uU3VwcG9ydFNwZWVkIHw9IEhCQV9QT1JUU1BFRURfMTZHQklUOwogCQkJaWYgKHBoYmEtPmxtdCAmIExNVF8xMEdiKQotCQkJCWFlLT51bi5TdXBwb3J0U3BlZWQgPSBIQkFfUE9SVFNQRUVEXzEwR0JJVDsKKwkJCQlhZS0+dW4uU3VwcG9ydFNwZWVkIHw9IEhCQV9QT1JUU1BFRURfMTBHQklUOwogCQkJaWYgKHBoYmEtPmxtdCAmIExNVF84R2IpCiAJCQkJYWUtPnVuLlN1cHBvcnRTcGVlZCB8PSBIQkFfUE9SVFNQRUVEXzhHQklUOwogCQkJaWYgKHBoYmEtPmxtdCAmIExNVF80R2IpCkBAIC0xNjEyLDI0ICsxNjE0LDI2IEBACiAJCQlhZS0+YWQuYml0cy5BdHRyVHlwZSA9IGJlMTZfdG9fY3B1KFBPUlRfU1BFRUQpOwogCQkJYWUtPmFkLmJpdHMuQXR0ckxlbiA9IGJlMTZfdG9fY3B1KEZPVVJCWVRFUyArIDQpOwogCQkJc3dpdGNoKHBoYmEtPmZjX2xpbmtzcGVlZCkgewotCQkJCWNhc2UgTEFfMUdIWl9MSU5LOgotCQkJCQlhZS0+dW4uUG9ydFNwZWVkID0gSEJBX1BPUlRTUEVFRF8xR0JJVDsKKwkJCWNhc2UgTFBGQ19MSU5LX1NQRUVEXzFHSFo6CisJCQkJYWUtPnVuLlBvcnRTcGVlZCA9IEhCQV9QT1JUU1BFRURfMUdCSVQ7CiAJCQkJYnJlYWs7Ci0JCQkJY2FzZSBMQV8yR0haX0xJTks6Ci0JCQkJCWFlLT51bi5Qb3J0U3BlZWQgPSBIQkFfUE9SVFNQRUVEXzJHQklUOworCQkJY2FzZSBMUEZDX0xJTktfU1BFRURfMkdIWjoKKwkJCQlhZS0+dW4uUG9ydFNwZWVkID0gSEJBX1BPUlRTUEVFRF8yR0JJVDsKIAkJCQlicmVhazsKLQkJCQljYXNlIExBXzRHSFpfTElOSzoKLQkJCQkJYWUtPnVuLlBvcnRTcGVlZCA9IEhCQV9QT1JUU1BFRURfNEdCSVQ7CisJCQljYXNlIExQRkNfTElOS19TUEVFRF80R0haOgorCQkJCWFlLT51bi5Qb3J0U3BlZWQgPSBIQkFfUE9SVFNQRUVEXzRHQklUOwogCQkJCWJyZWFrOwotCQkJCWNhc2UgTEFfOEdIWl9MSU5LOgotCQkJCQlhZS0+dW4uUG9ydFNwZWVkID0gSEJBX1BPUlRTUEVFRF84R0JJVDsKKwkJCWNhc2UgTFBGQ19MSU5LX1NQRUVEXzhHSFo6CisJCQkJYWUtPnVuLlBvcnRTcGVlZCA9IEhCQV9QT1JUU1BFRURfOEdCSVQ7CiAJCQkJYnJlYWs7Ci0JCQkJY2FzZSBMQV8xMEdIWl9MSU5LOgotCQkJCQlhZS0+dW4uUG9ydFNwZWVkID0gSEJBX1BPUlRTUEVFRF8xMEdCSVQ7CisJCQljYXNlIExQRkNfTElOS19TUEVFRF8xMEdIWjoKKwkJCQlhZS0+dW4uUG9ydFNwZWVkID0gSEJBX1BPUlRTUEVFRF8xMEdCSVQ7CiAJCQkJYnJlYWs7Ci0JCQkJZGVmYXVsdDoKLQkJCQkJYWUtPnVuLlBvcnRTcGVlZCA9Ci0JCQkJCQlIQkFfUE9SVFNQRUVEX1VOS05PV047CisJCQljYXNlIExQRkNfTElOS19TUEVFRF8xNkdIWjoKKwkJCQlhZS0+dW4uUG9ydFNwZWVkID0gSEJBX1BPUlRTUEVFRF8xNkdCSVQ7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWFlLT51bi5Qb3J0U3BlZWQgPSBIQkFfUE9SVFNQRUVEX1VOS05PV047CiAJCQkJYnJlYWs7CiAJCQl9CiAJCQlwYWItPmFiLkVudHJ5Q250Kys7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2Rpc2MuaCBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfZGlzYy5oCmluZGV4IDdjYWU2OWQuLjFkODRiNjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfZGlzYy5oCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfZGlzYy5oCkBAIC02OCw2ICs2OCwxMiBAQAogCX0gdW47CiB9OwogCisjZGVmaW5lIExQRkNfU0xJNF9NQVhfWFJJCTEwMjQJLyogVXNlZCB0byBtYWtlIHRoZSBuZGxwJ3MgeHJpX2JpdG1hcCAqLworI2RlZmluZSBYUklfQklUTUFQX1VMT05HUyAoTFBGQ19TTEk0X01BWF9YUkkgLyBCSVRTX1BFUl9MT05HKQorc3RydWN0IGxwZmNfbm9kZV9ycnFzIHsKKwl1bnNpZ25lZCBsb25nIHhyaV9iaXRtYXBbWFJJX0JJVE1BUF9VTE9OR1NdOworfTsKKwogc3RydWN0IGxwZmNfbm9kZWxpc3QgewogCXN0cnVjdCBsaXN0X2hlYWQgbmxwX2xpc3RwOwogCXN0cnVjdCBscGZjX25hbWUgbmxwX3BvcnRuYW1lOwpAQCAtMTEwLDggKzExNiwxOSBAQAogCWF0b21pY190IGNtZF9wZW5kaW5nOwogCXVpbnQzMl90IGNtZF9xZGVwdGg7CiAJdW5zaWduZWQgbG9uZyBsYXN0X2NoYW5nZV90aW1lOworCXN0cnVjdCBscGZjX25vZGVfcnJxcyBhY3RpdmVfcnJxczsKIAlzdHJ1Y3QgbHBmY19zY3NpY21kX2JrdCAqbGF0X2RhdGE7CS8qIExhdGVuY3kgZGF0YSAqLwogfTsKK3N0cnVjdCBscGZjX25vZGVfcnJxIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJdWludDE2X3QgeHJpdGFnOworCXVpbnQxNl90IHNlbmRfcnJxOworCXVpbnQxNl90IHJ4aWQ7CisJdWludDMyX3QgICAgICAgICBubHBfRElEOwkJLyogRkMgRF9JRCBvZiBlbnRyeSAqLworCXN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydDsKKwlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscDsKKwl1bnNpZ25lZCBsb25nIHJycV9zdG9wX3RpbWU7Cit9OwogCiAvKiBEZWZpbmVzIGZvciBubHBfZmxhZyAodWludDMyKSAqLwogI2RlZmluZSBOTFBfSUdOUl9SRUdfQ01QTCAgMHgwMDAwMDAwMSAvKiBSY3ZkIHJzY24gYmVmb3JlIHdlIGNtcGwgcmVnIGxvZ2luICovCkBAIC0xMzYsNyArMTUzLDcgQEAKICNkZWZpbmUgTkxQX05PREVWX1JFTU9WRSAgIDB4MDgwMDAwMDAJLyogRGVmZXIgcmVtb3ZhbCB0aWxsIGRpc2NvdmVyeSBlbmRzICovCiAjZGVmaW5lIE5MUF9UQVJHRVRfUkVNT1ZFICAweDEwMDAwMDAwICAgLyogVGFyZ2V0IHJlbW92ZSBpbiBwcm9jZXNzICovCiAjZGVmaW5lIE5MUF9TQ19SRVEgICAgICAgICAweDIwMDAwMDAwCS8qIFRhcmdldCByZXF1aXJlcyBhdXRoZW50aWNhdGlvbiAqLwotI2RlZmluZSBOTFBfUlBJX1ZBTElEICAgICAgMHg4MDAwMDAwMAkvKiBubHBfcnBpIGlzIHZhbGlkICovCisjZGVmaW5lIE5MUF9SUElfUkVHSVNURVJFRCAweDgwMDAwMDAwCS8qIG5scF9ycGkgaXMgdmFsaWQgKi8KIAogLyogbmRscCB1c2FnZSBtYW5hZ2VtZW50IG1hY3JvcyAqLwogI2RlZmluZSBOTFBfQ0hLX05PREVfQUNUKG5kbHApCQkoKChuZGxwKS0+bmxwX3VzZ19tYXAgXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19lbHMuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfZWxzLmMKaW5kZXggODg0ZjRkMy4uYzYyZDU2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19lbHMuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2Vscy5jCkBAIC0zNzUsNyArMzc1LDggQEAKIAkJZXJyID0gNDsKIAkJZ290byBmYWlsOwogCX0KLQlyYyA9IGxwZmNfcmVnX3JwaShwaGJhLCB2cG9ydC0+dnBpLCBGYWJyaWNfRElELCAodWludDhfdCAqKXNwLCBtYm94LCAwKTsKKwlyYyA9IGxwZmNfcmVnX3JwaShwaGJhLCB2cG9ydC0+dnBpLCBGYWJyaWNfRElELCAodWludDhfdCAqKXNwLCBtYm94LAorCQkJICBuZGxwLT5ubHBfcnBpKTsKIAlpZiAocmMpIHsKIAkJZXJyID0gNTsKIAkJZ290byBmYWlsX2ZyZWVfbWJveDsKQEAgLTUyMyw3ICs1MjQsNyBAQAogCXBoYmEtPmZjX2VkdG92UmVzb2wgPSBzcC0+Y21uLmVkdG92UmVzb2x1dGlvbjsKIAlwaGJhLT5mY19yYXRvdiA9IChiZTMyX3RvX2NwdShzcC0+Y21uLncyLnJfYV90b3YpICsgOTk5KSAvIDEwMDA7CiAKLQlpZiAocGhiYS0+ZmNfdG9wb2xvZ3kgPT0gVE9QT0xPR1lfTE9PUCkgeworCWlmIChwaGJhLT5mY190b3BvbG9neSA9PSBMUEZDX1RPUE9MT0dZX0xPT1ApIHsKIAkJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIAkJdnBvcnQtPmZjX2ZsYWcgfD0gRkNfUFVCTElDX0xPT1A7CiAJCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKQEAgLTgzMiw2ICs4MzMsMTIgQEAKIAkJaWYgKGxwZmNfZWxzX3JldHJ5KHBoYmEsIGNtZGlvY2IsIHJzcGlvY2IpKQogCQkJZ290byBvdXQ7CiAKKwkJLyogRkxPR0kgZmFpbHVyZSAqLworCQlscGZjX3ByaW50Zl92bG9nKHZwb3J0LCBLRVJOX0VSUiwgTE9HX0VMUywKKwkJCQkgIjAxMDAgRkxPR0kgZmFpbHVyZSBTdGF0dXM6eCV4L3gleCBUTU86eCV4XG4iLAorCQkJCSBpcnNwLT51bHBTdGF0dXMsIGlyc3AtPnVuLnVscFdvcmRbNF0sCisJCQkJIGlyc3AtPnVscFRpbWVvdXQpOworCiAJCS8qIEZMT0dJIGZhaWxlZCwgc28gdGhlcmUgaXMgbm8gZmFicmljICovCiAJCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CiAJCXZwb3J0LT5mY19mbGFnICY9IH4oRkNfRkFCUklDIHwgRkNfUFVCTElDX0xPT1ApOwpAQCAtODQzLDEzICs4NTAsMTYgQEAKIAkJICovCiAJCWlmIChwaGJhLT5hbHBhX21hcFswXSA9PSAwKSB7CiAJCQl2cG9ydC0+Y2ZnX2Rpc2NvdmVyeV90aHJlYWRzID0gTFBGQ19NQVhfRElTQ19USFJFQURTOworCQkJaWYgKChwaGJhLT5zbGlfcmV2ID09IExQRkNfU0xJX1JFVjQpICYmCisJCQkgICAgKCEodnBvcnQtPmZjX2ZsYWcgJiBGQ19WRklfUkVHSVNURVJFRCkgfHwKKwkJCSAgICAgKHZwb3J0LT5mY19wcmV2RElEICE9IHZwb3J0LT5mY19teURJRCkpKSB7CisJCQkJaWYgKHZwb3J0LT5mY19mbGFnICYgRkNfVkZJX1JFR0lTVEVSRUQpCisJCQkJCWxwZmNfc2xpNF91bnJlZ19hbGxfcnBpcyh2cG9ydCk7CisJCQkJbHBmY19pc3N1ZV9yZWdfdmZpKHZwb3J0KTsKKwkJCQlscGZjX25scF9wdXQobmRscCk7CisJCQkJZ290byBvdXQ7CisJCQl9CiAJCX0KLQotCQkvKiBGTE9HSSBmYWlsdXJlICovCi0JCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fRVJSLCBMT0dfRUxTLAotCQkJCSAiMDEwMCBGTE9HSSBmYWlsdXJlIFN0YXR1czp4JXgveCV4IFRNTzp4JXhcbiIsCi0JCQkJIGlyc3AtPnVscFN0YXR1cywgaXJzcC0+dW4udWxwV29yZFs0XSwKLQkJCQkgaXJzcC0+dWxwVGltZW91dCk7CiAJCWdvdG8gZmxvZ2lmYWlsOwogCX0KIAlzcGluX2xvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwpAQCAtODc5LDcgKzg4OSw3IEBACiAJCSAqLwogCQlpZiAoc3AtPmNtbi5mUG9ydCkKIAkJCXJjID0gbHBmY19jbXBsX2Vsc19mbG9naV9mYWJyaWModnBvcnQsIG5kbHAsIHNwLCBpcnNwKTsKLQkJZWxzZSBpZiAoIShwaGJhLT5oYmFfZmxhZyAmIEhCQV9GQ09FX1NVUFBPUlQpKQorCQllbHNlIGlmICghKHBoYmEtPmhiYV9mbGFnICYgSEJBX0ZDT0VfTU9ERSkpCiAJCQlyYyA9IGxwZmNfY21wbF9lbHNfZmxvZ2lfbnBvcnQodnBvcnQsIG5kbHAsIHNwKTsKIAkJZWxzZSB7CiAJCQlscGZjX3ByaW50Zl92bG9nKHZwb3J0LCBLRVJOX0VSUiwKQEAgLTEwMTQsNyArMTAyNCw5IEBACiAJaWYgKHNwLT5jbW4uZmNwaEhpZ2ggPCBGQ19QSDMpCiAJCXNwLT5jbW4uZmNwaEhpZ2ggPSBGQ19QSDM7CiAKLQlpZiAgKHBoYmEtPnNsaV9yZXYgPT0gTFBGQ19TTElfUkVWNCkgeworCWlmICAoKHBoYmEtPnNsaV9yZXYgPT0gTFBGQ19TTElfUkVWNCkgJiYKKwkgICAgIChiZl9nZXQobHBmY19zbGlfaW50Zl9pZl90eXBlLCAmcGhiYS0+c2xpNF9oYmEuc2xpX2ludGYpID09CisJICAgICAgTFBGQ19TTElfSU5URl9JRl9UWVBFXzApKSB7CiAJCWVsc2lvY2ItPmlvY2IudWxwQ3RfaCA9ICgoU0xJNF9DVF9GQ0ZJID4+IDEpICYgMSk7CiAJCWVsc2lvY2ItPmlvY2IudWxwQ3RfbCA9IChTTEk0X0NUX0ZDRkkgJiAxKTsKIAkJLyogRkxPR0kgbmVlZHMgdG8gYmUgMyBmb3IgV1FFIEZDRkkgKi8KQEAgLTEwMjcsNyArMTAzOSw3IEBACiAJCWljbWQtPnVscEN0X2wgPSAwOwogCX0KIAotCWlmIChwaGJhLT5mY190b3BvbG9neSAhPSBUT1BPTE9HWV9MT09QKSB7CisJaWYgKHBoYmEtPmZjX3RvcG9sb2d5ICE9IExQRkNfVE9QT0xPR1lfTE9PUCkgewogCQlpY21kLT51bi5lbHNyZXE2NC5teUlEID0gMDsKIAkJaWNtZC0+dW4uZWxzcmVxNjQuZmwgPSAxOwogCX0KQEAgLTEyODEsNiArMTI5Myw3IEBACiAJdWludDMyX3QgcmMsIGtlZXBESUQgPSAwOwogCWludCAgcHV0X25vZGU7CiAJaW50ICBwdXRfcnBvcnQ7CisJc3RydWN0IGxwZmNfbm9kZV9ycnFzIHJycTsKIAogCS8qIEZhYnJpYyBub2RlcyBjYW4gaGF2ZSB0aGUgc2FtZSBXV1BOIHNvIHdlIGRvbid0IGJvdGhlciBzZWFyY2hpbmcKIAkgKiBieSBXV1BOLiAgSnVzdCByZXR1cm4gdGhlIG5kbHAgdGhhdCB3YXMgZ2l2ZW4gdG8gdXMuCkBAIC0xMjk4LDYgKzEzMTEsNyBAQAogCiAJaWYgKG5ld19uZGxwID09IG5kbHAgJiYgTkxQX0NIS19OT0RFX0FDVChuZXdfbmRscCkpCiAJCXJldHVybiBuZGxwOworCW1lbXNldCgmcnJxLnhyaV9iaXRtYXAsIDAsIHNpemVvZihuZXdfbmRscC0+YWN0aXZlX3JycXMueHJpX2JpdG1hcCkpOwogCiAJaWYgKCFuZXdfbmRscCkgewogCQlyYyA9IG1lbWNtcCgmbmRscC0+bmxwX3BvcnRuYW1lLCBuYW1lLApAQCAtMTMxOCwxMiArMTMzMiwyNSBAQAogCQlpZiAoIW5ld19uZGxwKQogCQkJcmV0dXJuIG5kbHA7CiAJCWtlZXBESUQgPSBuZXdfbmRscC0+bmxwX0RJRDsKLQl9IGVsc2UKKwkJaWYgKHBoYmEtPnNsaV9yZXYgPT0gTFBGQ19TTElfUkVWNCkKKwkJCW1lbWNweSgmcnJxLnhyaV9iaXRtYXAsCisJCQkJJm5ld19uZGxwLT5hY3RpdmVfcnJxcy54cmlfYml0bWFwLAorCQkJCXNpemVvZihuZXdfbmRscC0+YWN0aXZlX3JycXMueHJpX2JpdG1hcCkpOworCX0gZWxzZSB7CiAJCWtlZXBESUQgPSBuZXdfbmRscC0+bmxwX0RJRDsKKwkJaWYgKHBoYmEtPnNsaV9yZXYgPT0gTFBGQ19TTElfUkVWNCkKKwkJCW1lbWNweSgmcnJxLnhyaV9iaXRtYXAsCisJCQkJJm5ld19uZGxwLT5hY3RpdmVfcnJxcy54cmlfYml0bWFwLAorCQkJCXNpemVvZihuZXdfbmRscC0+YWN0aXZlX3JycXMueHJpX2JpdG1hcCkpOworCX0KIAogCWxwZmNfdW5yZWdfcnBpKHZwb3J0LCBuZXdfbmRscCk7CiAJbmV3X25kbHAtPm5scF9ESUQgPSBuZGxwLT5ubHBfRElEOwogCW5ld19uZGxwLT5ubHBfcHJldl9zdGF0ZSA9IG5kbHAtPm5scF9wcmV2X3N0YXRlOworCWlmIChwaGJhLT5zbGlfcmV2ID09IExQRkNfU0xJX1JFVjQpCisJCW1lbWNweShuZXdfbmRscC0+YWN0aXZlX3JycXMueHJpX2JpdG1hcCwKKwkJCSZuZGxwLT5hY3RpdmVfcnJxcy54cmlfYml0bWFwLAorCQkJc2l6ZW9mKG5kbHAtPmFjdGl2ZV9ycnFzLnhyaV9iaXRtYXApKTsKIAogCWlmIChuZGxwLT5ubHBfZmxhZyAmIE5MUF9OUFJfMkJfRElTQykKIAkJbmV3X25kbHAtPm5scF9mbGFnIHw9IE5MUF9OUFJfMkJfRElTQzsKQEAgLTEzNjIsMTIgKzEzODksMjAgQEAKIAogCQkvKiBUd28gbmRscHMgY2Fubm90IGhhdmUgdGhlIHNhbWUgZGlkIG9uIHRoZSBub2RlbGlzdCAqLwogCQluZGxwLT5ubHBfRElEID0ga2VlcERJRDsKKwkJaWYgKHBoYmEtPnNsaV9yZXYgPT0gTFBGQ19TTElfUkVWNCkKKwkJCW1lbWNweSgmbmRscC0+YWN0aXZlX3JycXMueHJpX2JpdG1hcCwKKwkJCQkmcnJxLnhyaV9iaXRtYXAsCisJCQkJc2l6ZW9mKG5kbHAtPmFjdGl2ZV9ycnFzLnhyaV9iaXRtYXApKTsKIAkJbHBmY19kcm9wX25vZGUodnBvcnQsIG5kbHApOwogCX0KIAllbHNlIHsKIAkJbHBmY191bnJlZ19ycGkodnBvcnQsIG5kbHApOwogCQkvKiBUd28gbmRscHMgY2Fubm90IGhhdmUgdGhlIHNhbWUgZGlkICovCiAJCW5kbHAtPm5scF9ESUQgPSBrZWVwRElEOworCQlpZiAocGhiYS0+c2xpX3JldiA9PSBMUEZDX1NMSV9SRVY0KQorCQkJbWVtY3B5KCZuZGxwLT5hY3RpdmVfcnJxcy54cmlfYml0bWFwLAorCQkJCSZycnEueHJpX2JpdG1hcCwKKwkJCQlzaXplb2YobmRscC0+YWN0aXZlX3JycXMueHJpX2JpdG1hcCkpOwogCQlscGZjX25scF9zZXRfc3RhdGUodnBvcnQsIG5kbHAsIE5MUF9TVEVfTlBSX05PREUpOwogCQkvKiBTaW5jZSB3ZSBhcmUgc3dhcHBpbmcgdGhlIG5kbHAgcGFzc2VkIGluIHdpdGggdGhlIG5ldyBvbmUKIAkJICogYW5kIHRoZSBkaWQgaGFzIGFscmVhZHkgYmVlbiBzd2FwcGVkLCBjb3B5IG92ZXIgdGhlCkBAIC0xNDI4LDYgKzE0NjMsNzMgQEAKIH0KIAogLyoqCisgKiBscGZjX2NtcGxfZWxzX3JycSAtIENvbXBsZXRpb24gaGFuZGxlZCBmb3IgZWxzIFJSUXMuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEBjbWRpb2NiOiBwb2ludGVyIHRvIGxwZmMgY29tbWFuZCBpb2NiIGRhdGEgc3RydWN0dXJlLgorICogQHJzcGlvY2I6IHBvaW50ZXIgdG8gbHBmYyByZXNwb25zZSBpb2NiIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSB3aWxsIGNhbGwgdGhlIGNsZWFyIHJycSBmdW5jdGlvbiB0byBmcmVlIHRoZSBycnEgYW5kCisgKiBjbGVhciB0aGUgeHJpJ3MgYml0IGluIHRoZSBuZGxwJ3MgeHJpX2JpdG1hcC4gSWYgdGhlIG5kbHAgZG9lcyBub3QKKyAqIGV4aXN0IHRoZW4gdGhlIGNsZWFyX3JycSBpcyBzdGlsbCBjYWxsZWQgYmVjYXVzZSB0aGUgcnJxIG5lZWRzIHRvCisgKiBiZSBmcmVlZC4KKyAqKi8KKworc3RhdGljIHZvaWQKK2xwZmNfY21wbF9lbHNfcnJxKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfaW9jYnEgKmNtZGlvY2IsCisJCSAgICBzdHJ1Y3QgbHBmY19pb2NicSAqcnNwaW9jYikKK3sKKwlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQgPSBjbWRpb2NiLT52cG9ydDsKKwlJT0NCX3QgKmlyc3A7CisJc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHA7CisJc3RydWN0IGxwZmNfbm9kZV9ycnEgKnJycTsKKworCS8qIHdlIHBhc3MgY21kaW9jYiB0byBzdGF0ZSBtYWNoaW5lIHdoaWNoIG5lZWRzIHJzcGlvY2IgYXMgd2VsbCAqLworCXJycSA9IGNtZGlvY2ItPmNvbnRleHRfdW4ucnJxOworCWNtZGlvY2ItPmNvbnRleHRfdW4ucnNwX2lvY2IgPSByc3Bpb2NiOworCisJaXJzcCA9ICZyc3Bpb2NiLT5pb2NiOworCWxwZmNfZGVidWdmc19kaXNjX3RyYyh2cG9ydCwgTFBGQ19ESVNDX1RSQ19FTFNfQ01ELAorCQkiUlJRIGNtcGw6ICAgICAgc3RhdHVzOngleC94JXggZGlkOngleCIsCisJCWlyc3AtPnVscFN0YXR1cywgaXJzcC0+dW4udWxwV29yZFs0XSwKKwkJaXJzcC0+dW4uZWxzcmVxNjQucmVtb3RlSUQpOworCisJbmRscCA9IGxwZmNfZmluZG5vZGVfZGlkKHZwb3J0LCBpcnNwLT51bi5lbHNyZXE2NC5yZW1vdGVJRCk7CisJaWYgKCFuZGxwIHx8ICFOTFBfQ0hLX05PREVfQUNUKG5kbHApIHx8IG5kbHAgIT0gcnJxLT5uZGxwKSB7CisJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fRVJSLCBMT0dfRUxTLAorCQkJCSAiMjg4MiBSUlEgY29tcGxldGVzIHRvIE5Qb3J0IHgleCAiCisJCQkJICJ3aXRoIG5vIG5kbHAuIERhdGE6IHgleCB4JXggeCV4XG4iLAorCQkJCSBpcnNwLT51bi5lbHNyZXE2NC5yZW1vdGVJRCwKKwkJCQkgaXJzcC0+dWxwU3RhdHVzLCBpcnNwLT51bi51bHBXb3JkWzRdLAorCQkJCSBpcnNwLT51bHBJb1RhZyk7CisJCWdvdG8gb3V0OworCX0KKworCS8qIHJycSBjb21wbGV0ZXMgdG8gTlBvcnQgPG5scF9ESUQ+ICovCisJbHBmY19wcmludGZfdmxvZyh2cG9ydCwgS0VSTl9JTkZPLCBMT0dfRUxTLAorCQkJICIyODgwIFJSUSBjb21wbGV0ZXMgdG8gTlBvcnQgeCV4ICIKKwkJCSAiRGF0YTogeCV4IHgleCB4JXggeCV4IHgleFxuIiwKKwkJCSBuZGxwLT5ubHBfRElELCBpcnNwLT51bHBTdGF0dXMsIGlyc3AtPnVuLnVscFdvcmRbNF0sCisJCQkgaXJzcC0+dWxwVGltZW91dCwgcnJxLT54cml0YWcsIHJycS0+cnhpZCk7CisKKwlpZiAoaXJzcC0+dWxwU3RhdHVzKSB7CisJCS8qIENoZWNrIGZvciByZXRyeSAqLworCQkvKiBSUlEgZmFpbGVkIERvbid0IHByaW50IHRoZSB2cG9ydCB0byB2cG9ydCByanRzICovCisJCWlmIChpcnNwLT51bHBTdGF0dXMgIT0gSU9TVEFUX0xTX1JKVCB8fAorCQkJKCgoaXJzcC0+dW4udWxwV29yZFs0XSkgPj4gMTYgIT0gTFNSSlRfSU5WQUxJRF9DTUQpICYmCisJCQkoKGlyc3AtPnVuLnVscFdvcmRbNF0pID4+IDE2ICE9IExTUkpUX1VOQUJMRV9UUEMpKSB8fAorCQkJKHBoYmEpLT5wcG9ydC0+Y2ZnX2xvZ192ZXJib3NlICYgTE9HX0VMUykKKwkJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fRVJSLCBMT0dfRUxTLAorCQkJCSAiMjg4MSBSUlEgZmFpbHVyZSBESUQ6JTA2WCBTdGF0dXM6eCV4L3gleFxuIiwKKwkJCQkgbmRscC0+bmxwX0RJRCwgaXJzcC0+dWxwU3RhdHVzLAorCQkJCSBpcnNwLT51bi51bHBXb3JkWzRdKTsKKwl9CitvdXQ6CisJaWYgKHJycSkKKwkJbHBmY19jbHJfcnJxX2FjdGl2ZShwaGJhLCBycnEtPnhyaXRhZywgcnJxKTsKKwlscGZjX2Vsc19mcmVlX2lvY2IocGhiYSwgY21kaW9jYik7CisJcmV0dXJuOworfQorLyoqCiAgKiBscGZjX2NtcGxfZWxzX3Bsb2dpIC0gQ29tcGxldGlvbiBjYWxsYmFjayBmdW5jdGlvbiBmb3IgcGxvZ2kKICAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgogICogQGNtZGlvY2I6IHBvaW50ZXIgdG8gbHBmYyBjb21tYW5kIGlvY2IgZGF0YSBzdHJ1Y3R1cmUuCkBAIC0yNzIyLDcgKzI4MjQsNyBAQAogCQkJaWYgKGNtZCA9PSBFTFNfQ01EX0ZMT0dJKSB7CiAJCQkJaWYgKFBDSV9ERVZJQ0VfSURfSE9STkVUID09CiAJCQkJCXBoYmEtPnBjaWRldi0+ZGV2aWNlKSB7Ci0JCQkJCXBoYmEtPmZjX3RvcG9sb2d5ID0gVE9QT0xPR1lfTE9PUDsKKwkJCQkJcGhiYS0+ZmNfdG9wb2xvZ3kgPSBMUEZDX1RPUE9MT0dZX0xPT1A7CiAJCQkJCXBoYmEtPnBwb3J0LT5mY19teURJRCA9IDA7CiAJCQkJCXBoYmEtPmFscGFfbWFwWzBdID0gMDsKIAkJCQkJcGhiYS0+YWxwYV9tYXBbMV0gPSAwOwpAQCAtMjg3Nyw3ICsyOTc5LDcgQEAKIAkJcmV0cnkgPSAxOwogCiAJaWYgKCgoY21kID09IEVMU19DTURfRkxPR0kpIHx8IChjbWQgPT0gRUxTX0NNRF9GRElTQykpICYmCi0JICAgIChwaGJhLT5mY190b3BvbG9neSAhPSBUT1BPTE9HWV9MT09QKSAmJgorCSAgICAocGhiYS0+ZmNfdG9wb2xvZ3kgIT0gTFBGQ19UT1BPTE9HWV9MT09QKSAmJgogCSAgICAhbHBmY19lcnJvcl9sb3N0X2xpbmsoaXJzcCkpIHsKIAkJLyogRkxPR0kgcmV0cnkgcG9saWN5ICovCiAJCXJldHJ5ID0gMTsKQEAgLTMyMTksMTQgKzMzMjEsNiBAQAogCXN0cnVjdCBscGZjX2RtYWJ1ZiAqbXAgPSAoc3RydWN0IGxwZmNfZG1hYnVmICopIChwbWItPmNvbnRleHQxKTsKIAlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCA9IChzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqKSBwbWItPmNvbnRleHQyOwogCi0JLyoKLQkgKiBUaGlzIHJvdXRpbmUgaXMgdXNlZCB0byByZWdpc3RlciBhbmQgdW5yZWdpc3RlciBpbiBwcmV2aW91cyBTTEkKLQkgKiBtb2Rlcy4KLQkgKi8KLQlpZiAoKHBtYi0+dS5tYi5tYnhDb21tYW5kID09IE1CWF9VTlJFR19MT0dJTikgJiYKLQkgICAgKHBoYmEtPnNsaV9yZXYgPT0gTFBGQ19TTElfUkVWNCkpCi0JCWxwZmNfc2xpNF9mcmVlX3JwaShwaGJhLCBwbWItPnUubWIudW4udmFyVW5yZWdMb2dpbi5ycGkpOwotCiAJcG1iLT5jb250ZXh0MSA9IE5VTEw7CiAJcG1iLT5jb250ZXh0MiA9IE5VTEw7CiAKQEAgLTM5MDQsNiArMzk5OCw0NyBAQAogfQogCiAvKioKKyAqIGxwZmNfZWxzX2NsZWFyX3JycSAtIENsZWFyIHRoZSBycSB0aGF0IHRoaXMgcnJxIGRlc2NyaWJlcy4KKyAqIEB2cG9ydDogcG9pbnRlciB0byBhIHZpcnR1YWwgTl9Qb3J0IGRhdGEgc3RydWN0dXJlLgorICogQGlvY2I6IHBvaW50ZXIgdG8gdGhlIGxwZmMgY29tbWFuZCBpb2NiIGRhdGEgc3RydWN0dXJlLgorICogQG5kbHA6IHBvaW50ZXIgdG8gYSBub2RlLWxpc3QgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogUmV0dXJuCisgKiovCitzdGF0aWMgdm9pZAorbHBmY19lbHNfY2xlYXJfcnJxKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCwKKyAgICAgIHN0cnVjdCBscGZjX2lvY2JxICppb2NiLCBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCkKK3sKKwlzdHJ1Y3QgbHBmY19oYmEgICpwaGJhID0gdnBvcnQtPnBoYmE7CisJdWludDhfdCAqcGNtZDsKKwlzdHJ1Y3QgUlJRICpycnE7CisJdWludDE2X3QgcnhpZDsKKwlzdHJ1Y3QgbHBmY19ub2RlX3JycSAqcHJycTsKKworCisJcGNtZCA9ICh1aW50OF90ICopICgoKHN0cnVjdCBscGZjX2RtYWJ1ZiAqKSBpb2NiLT5jb250ZXh0MiktPnZpcnQpOworCXBjbWQgKz0gc2l6ZW9mKHVpbnQzMl90KTsKKwlycnEgPSAoc3RydWN0IFJSUSAqKXBjbWQ7CisJcnhpZCA9IGJmX2dldChycnFfb3hpZCwgcnJxKTsKKworCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fSU5GTywgTE9HX0VMUywKKwkJCSIyODgzIENsZWFyIFJSUSBmb3IgU0lEOngleCBPWElEOngleCBSWElEOngleCIKKwkJCSIgeCV4IHgleFxuIiwKKwkJCWJmX2dldChycnFfZGlkLCBycnEpLAorCQkJYmZfZ2V0KHJycV9veGlkLCBycnEpLAorCQkJcnhpZCwKKwkJCWlvY2ItPmlvdGFnLCBpb2NiLT5pb2NiLnVscENvbnRleHQpOworCisJbHBmY19kZWJ1Z2ZzX2Rpc2NfdHJjKHZwb3J0LCBMUEZDX0RJU0NfVFJDX0VMU19SU1AsCisJCSJDbGVhciBSUlE6ICBkaWQ6eCV4IGZsZzp4JXggZXhjaGc6eCUuMDh4IiwKKwkJbmRscC0+bmxwX0RJRCwgbmRscC0+bmxwX2ZsYWcsIHJycS0+cnJxX2V4Y2hnKTsKKwlwcnJxID0gbHBmY19nZXRfYWN0aXZlX3JycSh2cG9ydCwgcnhpZCwgbmRscC0+bmxwX0RJRCk7CisJaWYgKHBycnEpCisJCWxwZmNfY2xyX3JycV9hY3RpdmUocGhiYSwgcnhpZCwgcHJycSk7CisJcmV0dXJuOworfQorCisvKioKICAqIGxwZmNfZWxzX3JzcF9lY2hvX2FjYyAtIElzc3VlIGVjaG8gYWNjIHJlc3BvbnNlCiAgKiBAdnBvcnQ6IHBvaW50ZXIgdG8gYSB2aXJ0dWFsIE5fUG9ydCBkYXRhIHN0cnVjdHVyZS4KICAqIEBkYXRhOiBwb2ludGVyIHRvIGVjaG8gZGF0YSB0byByZXR1cm4gaW4gdGhlIGFjY2VwdC4KQEAgLTQ1OTcsNyArNDczMiw3IEBACiAKIAlscGZjX3NldF9kaXNjdG1vKHZwb3J0KTsKIAotCWlmIChwaGJhLT5mY190b3BvbG9neSA9PSBUT1BPTE9HWV9MT09QKSB7CisJaWYgKHBoYmEtPmZjX3RvcG9sb2d5ID09IExQRkNfVE9QT0xPR1lfTE9PUCkgewogCQkvKiBXZSBzaG91bGQgbmV2ZXIgcmVjZWl2ZSBhIEZMT0dJIGluIGxvb3AgbW9kZSwgaWdub3JlIGl0ICovCiAJCWRpZCA9IGljbWQtPnVuLmVsc3JlcTY0LnJlbW90ZUlEOwogCkBAIC00NzkyLDYgKzQ5MjcsOCBAQAogCQkgc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHApCiB7CiAJbHBmY19lbHNfcnNwX2FjYyh2cG9ydCwgRUxTX0NNRF9BQ0MsIGNtZGlvY2IsIG5kbHAsIE5VTEwpOworCWlmICh2cG9ydC0+cGhiYS0+c2xpX3JldiA9PSBMUEZDX1NMSV9SRVY0KQorCQlscGZjX2Vsc19jbGVhcl9ycnEodnBvcnQsIGNtZGlvY2IsIG5kbHApOwogfQogCiAvKioKQEAgLTQ5NDAsNyArNTA3Nyw3IEBACiAJcGNtZCArPSBzaXplb2YodWludDMyX3QpOyAvKiBTa2lwIHBhc3QgY29tbWFuZCAqLwogCXJwc19yc3AgPSAoUlBTX1JTUCAqKXBjbWQ7CiAKLQlpZiAocGhiYS0+ZmNfdG9wb2xvZ3kgIT0gVE9QT0xPR1lfTE9PUCkKKwlpZiAocGhiYS0+ZmNfdG9wb2xvZ3kgIT0gTFBGQ19UT1BPTE9HWV9MT09QKQogCQlzdGF0dXMgPSAweDEwOwogCWVsc2UKIAkJc3RhdHVzID0gMHg4OwpAQCAtNTE5NCw2ICs1MzMxLDk3IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qIGxwZmNfaXNzdWVfZWxzX3JycSAtIFByb2Nlc3MgYW4gdW5zb2xpY2l0ZWQgcnBzIGlvY2IKKyAqIEB2cG9ydDogcG9pbnRlciB0byBhIGhvc3QgdmlydHVhbCBOX1BvcnQgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAbmRscDogcG9pbnRlciB0byBhIG5vZGUtbGlzdCBkYXRhIHN0cnVjdHVyZS4KKyAqIEBkaWQ6IERJRCBvZiB0aGUgdGFyZ2V0LgorICogQHJycTogUG9pbnRlciB0byB0aGUgcnJxIHN0cnVjdC4KKyAqCisgKiBCdWlsZCBhIEVMUyBSUlEgY29tbWFuZCBhbmQgc2VuZCBpdCB0byB0aGUgdGFyZ2V0LiBJZiB0aGUgaXNzdWVfaW9jYiBpcworICogU3VjY2Vzc2Z1bCB0aGUgdGhlIGNvbXBsZXRpb24gaGFuZGxlciB3aWxsIGNsZWFyIHRoZSBSUlEuCisgKgorICogUmV0dXJuIGNvZGVzCisgKiAgIDAgLSBTdWNjZXNzZnVsbHkgc2VudCBycnEgZWxzIGlvY2IuCisgKiAgIDEgLSBGYWlsZWQgdG8gc2VuZCBycnEgZWxzIGlvY2IuCisgKiovCitzdGF0aWMgaW50CitscGZjX2lzc3VlX2Vsc19ycnEoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LCBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCwKKwkJCXVpbnQzMl90IGRpZCwgc3RydWN0IGxwZmNfbm9kZV9ycnEgKnJycSkKK3sKKwlzdHJ1Y3QgbHBmY19oYmEgICpwaGJhID0gdnBvcnQtPnBoYmE7CisJc3RydWN0IFJSUSAqZWxzX3JycTsKKwlJT0NCX3QgKmljbWQ7CisJc3RydWN0IGxwZmNfaW9jYnEgKmVsc2lvY2I7CisJdWludDhfdCAqcGNtZDsKKwl1aW50MTZfdCBjbWRzaXplOworCWludCByZXQ7CisKKworCWlmIChuZGxwICE9IHJycS0+bmRscCkKKwkJbmRscCA9IHJycS0+bmRscDsKKwlpZiAoIW5kbHAgfHwgIU5MUF9DSEtfTk9ERV9BQ1QobmRscCkpCisJCXJldHVybiAxOworCisJLyogSWYgbmRscCBpcyBub3QgTlVMTCwgd2Ugd2lsbCBidW1wIHRoZSByZWZlcmVuY2UgY291bnQgb24gaXQgKi8KKwljbWRzaXplID0gKHNpemVvZih1aW50MzJfdCkgKyBzaXplb2Yoc3RydWN0IFJSUSkpOworCWVsc2lvY2IgPSBscGZjX3ByZXBfZWxzX2lvY2IodnBvcnQsIDEsIGNtZHNpemUsIDAsIG5kbHAsIGRpZCwKKwkJCQkgICAgIEVMU19DTURfUlJRKTsKKwlpZiAoIWVsc2lvY2IpCisJCXJldHVybiAxOworCisJaWNtZCA9ICZlbHNpb2NiLT5pb2NiOworCXBjbWQgPSAodWludDhfdCAqKSAoKChzdHJ1Y3QgbHBmY19kbWFidWYgKikgZWxzaW9jYi0+Y29udGV4dDIpLT52aXJ0KTsKKworCS8qIEZvciBSUlEgcmVxdWVzdCwgcmVtYWluZGVyIG9mIHBheWxvYWQgaXMgRXhjaGFuZ2UgSURzICovCisJKigodWludDMyX3QgKikgKHBjbWQpKSA9IEVMU19DTURfUlJROworCXBjbWQgKz0gc2l6ZW9mKHVpbnQzMl90KTsKKwllbHNfcnJxID0gKHN0cnVjdCBSUlEgKikgcGNtZDsKKworCWJmX3NldChycnFfb3hpZCwgZWxzX3JycSwgcnJxLT54cml0YWcpOworCWJmX3NldChycnFfcnhpZCwgZWxzX3JycSwgcnJxLT5yeGlkKTsKKwliZl9zZXQocnJxX2RpZCwgZWxzX3JycSwgdnBvcnQtPmZjX215RElEKTsKKwllbHNfcnJxLT5ycnEgPSBjcHVfdG9fYmUzMihlbHNfcnJxLT5ycnEpOworCWVsc19ycnEtPnJycV9leGNoZyA9IGNwdV90b19iZTMyKGVsc19ycnEtPnJycV9leGNoZyk7CisKKworCWxwZmNfZGVidWdmc19kaXNjX3RyYyh2cG9ydCwgTFBGQ19ESVNDX1RSQ19FTFNfQ01ELAorCQkiSXNzdWUgUlJROiAgICAgZGlkOngleCIsCisJCWRpZCwgcnJxLT54cml0YWcsIHJycS0+cnhpZCk7CisJZWxzaW9jYi0+Y29udGV4dF91bi5ycnEgPSBycnE7CisJZWxzaW9jYi0+aW9jYl9jbXBsID0gbHBmY19jbXBsX2Vsc19ycnE7CisJcmV0ID0gbHBmY19zbGlfaXNzdWVfaW9jYihwaGJhLCBMUEZDX0VMU19SSU5HLCBlbHNpb2NiLCAwKTsKKworCWlmIChyZXQgPT0gSU9DQl9FUlJPUikgeworCQlscGZjX2Vsc19mcmVlX2lvY2IocGhiYSwgZWxzaW9jYik7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBscGZjX3NlbmRfcnJxIC0gU2VuZHMgRUxTIFJSUSBpZiBuZWVkZWQuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEBycnE6IHBvaW50ZXIgdG8gdGhlIGFjdGl2ZSBycnEuCisgKgorICogVGhpcyByb3V0aW5lIHdpbGwgY2FsbCB0aGUgbHBmY19pc3N1ZV9lbHNfcnJxIGlmIHRoZSBycnEgaXMKKyAqIHN0aWxsIGFjdGl2ZSBmb3IgdGhlIHhyaS4gSWYgdGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgZmFpbHVyZSB0aGVuCisgKiB0aGUgY2FsbGVyIG5lZWRzIHRvIGNsZWFuIHVwIHRoZSBSUlEgYnkgY2FsbGluZyBscGZjX2Nscl9hY3RpdmVfcnJxLgorICoKKyAqIFJldHVybnMgMCBTdWNjZXNzLgorICogICAgICAgICAxIEZhaWx1cmUuCisgKiovCitpbnQKK2xwZmNfc2VuZF9ycnEoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19ub2RlX3JycSAqcnJxKQoreworCXN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwID0gbHBmY19maW5kbm9kZV9kaWQocnJxLT52cG9ydCwKKwkJCQkJCQlycnEtPm5scF9ESUQpOworCWlmIChscGZjX3Rlc3RfcnJxX2FjdGl2ZShwaGJhLCBuZGxwLCBycnEtPnhyaXRhZykpCisJCXJldHVybiBscGZjX2lzc3VlX2Vsc19ycnEocnJxLT52cG9ydCwgbmRscCwKKwkJCQkJIHJycS0+bmxwX0RJRCwgcnJxKTsKKwllbHNlCisJCXJldHVybiAxOworfQorCiAvKioKICAqIGxwZmNfZWxzX3JzcF9ycGxfYWNjIC0gSXNzdWUgYW4gYWNjZXB0IHJwbCBlbHMgY29tbWFuZAogICogQHZwb3J0OiBwb2ludGVyIHRvIGEgaG9zdCB2aXJ0dWFsIE5fUG9ydCBkYXRhIHN0cnVjdHVyZS4KQEAgLTU0ODIsNyArNTcxMCw3IEBACiAJCSAgICAobWVtY21wKCZwaGJhLT5mY19mYWJwYXJhbS5wb3J0TmFtZSwgJmZwLT5GcG9ydE5hbWUsCiAJCQkgICAgc2l6ZW9mKHN0cnVjdCBscGZjX25hbWUpKSkpIHsKIAkJCS8qIFRoaXMgcG9ydCBoYXMgc3dpdGNoZWQgZmFicmljcy4gRkxPR0kgaXMgcmVxdWlyZWQgKi8KLQkJCWxwZmNfaW5pdGlhbF9mbG9naSh2cG9ydCk7CisJCQlscGZjX2lzc3VlX2luaXRfdmZpKHZwb3J0KTsKIAkJfSBlbHNlIHsKIAkJCS8qIEZBTiB2ZXJpZmllZCAtIHNraXAgRkxPR0kgKi8KIAkJCXZwb3J0LT5mY19teURJRCA9IHZwb3J0LT5mY19wcmV2RElEOwpAQCAtNjIwMSw3ICs2NDI5LDcgQEAKIAkJCWNtZCwgZGlkLCB2cG9ydC0+cG9ydF9zdGF0ZSk7CiAKIAkJLyogVW5zdXBwb3J0ZWQgRUxTIGNvbW1hbmQsIHJlamVjdCAqLwotCQlyanRfZXJyID0gTFNSSlRfSU5WQUxJRF9DTUQ7CisJCXJqdF9lcnIgPSBMU1JKVF9DTURfVU5TVVBQT1JURUQ7CiAKIAkJLyogVW5rbm93biBFTFMgY29tbWFuZCA8ZWxzQ21kPiByZWNlaXZlZCBmcm9tIE5QT1JUIDxkaWQ+ICovCiAJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fRVJSLCBMT0dfRUxTLApAQCAtNjM3Myw3ICs2NjAxLDcgQEAKIAlpZiAoIW5kbHApIHsKIAkJbmRscCA9IG1lbXBvb2xfYWxsb2MocGhiYS0+bmxwX21lbV9wb29sLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFuZGxwKSB7Ci0JCQlpZiAocGhiYS0+ZmNfdG9wb2xvZ3kgPT0gVE9QT0xPR1lfTE9PUCkgeworCQkJaWYgKHBoYmEtPmZjX3RvcG9sb2d5ID09IExQRkNfVE9QT0xPR1lfTE9PUCkgewogCQkJCWxwZmNfZGlzY19zdGFydCh2cG9ydCk7CiAJCQkJcmV0dXJuOwogCQkJfQpAQCAtNjM4Niw3ICs2NjE0LDcgQEAKIAl9IGVsc2UgaWYgKCFOTFBfQ0hLX05PREVfQUNUKG5kbHApKSB7CiAJCW5kbHAgPSBscGZjX2VuYWJsZV9ub2RlKHZwb3J0LCBuZGxwLCBOTFBfU1RFX1VOVVNFRF9OT0RFKTsKIAkJaWYgKCFuZGxwKSB7Ci0JCQlpZiAocGhiYS0+ZmNfdG9wb2xvZ3kgPT0gVE9QT0xPR1lfTE9PUCkgeworCQkJaWYgKHBoYmEtPmZjX3RvcG9sb2d5ID09IExQRkNfVE9QT0xPR1lfTE9PUCkgewogCQkJCWxwZmNfZGlzY19zdGFydCh2cG9ydCk7CiAJCQkJcmV0dXJuOwogCQkJfQpAQCAtNjQwOCwxOCArNjYzNiwzMSBAQAogCX0KIAogCWlmICh2cG9ydC0+Y2ZnX2ZkbWlfb24pIHsKLQkJbmRscF9mZG1pID0gbWVtcG9vbF9hbGxvYyhwaGJhLT5ubHBfbWVtX3Bvb2wsCi0JCQkJCSAgR0ZQX0tFUk5FTCk7CisJCS8qIElmIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUsIGFsbG9jYXRlIGFuIG5kbHAgYW5kIGluaXRpYWxpemUKKwkJICogaXQuIE90aGVyd2lzZSwgbWFrZSBzdXJlIHRoZSBub2RlIGlzIGVuYWJsZWQgYW5kIHRoZW4gZG8gdGhlCisJCSAqIGxvZ2luLgorCQkgKi8KKwkJbmRscF9mZG1pID0gbHBmY19maW5kbm9kZV9kaWQodnBvcnQsIEZETUlfRElEKTsKKwkJaWYgKCFuZGxwX2ZkbWkpIHsKKwkJCW5kbHBfZmRtaSA9IG1lbXBvb2xfYWxsb2MocGhiYS0+bmxwX21lbV9wb29sLAorCQkJCQkJICBHRlBfS0VSTkVMKTsKKwkJCWlmIChuZGxwX2ZkbWkpIHsKKwkJCQlscGZjX25scF9pbml0KHZwb3J0LCBuZGxwX2ZkbWksIEZETUlfRElEKTsKKwkJCQluZGxwX2ZkbWktPm5scF90eXBlIHw9IE5MUF9GQUJSSUM7CisJCQl9IGVsc2UKKwkJCQlyZXR1cm47CisJCX0KKwkJaWYgKCFOTFBfQ0hLX05PREVfQUNUKG5kbHBfZmRtaSkpCisJCQluZGxwX2ZkbWkgPSBscGZjX2VuYWJsZV9ub2RlKHZwb3J0LAorCQkJCQkJICAgICBuZGxwX2ZkbWksCisJCQkJCQkgICAgIE5MUF9TVEVfTlBSX05PREUpOworCiAJCWlmIChuZGxwX2ZkbWkpIHsKLQkJCWxwZmNfbmxwX2luaXQodnBvcnQsIG5kbHBfZmRtaSwgRkRNSV9ESUQpOwotCQkJbmRscF9mZG1pLT5ubHBfdHlwZSB8PSBOTFBfRkFCUklDOwogCQkJbHBmY19ubHBfc2V0X3N0YXRlKHZwb3J0LCBuZGxwX2ZkbWksCi0JCQkJTkxQX1NURV9QTE9HSV9JU1NVRSk7Ci0JCQlscGZjX2lzc3VlX2Vsc19wbG9naSh2cG9ydCwgbmRscF9mZG1pLT5ubHBfRElELAotCQkJCQkgICAgIDApOworCQkJCQkgICBOTFBfU1RFX1BMT0dJX0lTU1VFKTsKKwkJCWxwZmNfaXNzdWVfZWxzX3Bsb2dpKHZwb3J0LCBuZGxwX2ZkbWktPm5scF9ESUQsIDApOwogCQl9CiAJfQotCXJldHVybjsKIH0KIAogLyoqCkBAIC02NDk3LDcgKzY3MzgsNyBAQAogCQkJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwogCQkJaWYgKHZwb3J0LT5wb3J0X3R5cGUgPT0gTFBGQ19QSFlTSUNBTF9QT1JUCiAJCQkJJiYgISh2cG9ydC0+ZmNfZmxhZyAmIEZDX0xPR09fUkNWRF9ESURfQ0hORykpCi0JCQkJbHBmY19pbml0aWFsX2Zsb2dpKHZwb3J0KTsKKwkJCQlscGZjX2lzc3VlX2luaXRfdmZpKHZwb3J0KTsKIAkJCWVsc2UKIAkJCQlscGZjX2luaXRpYWxfZmRpc2ModnBvcnQpOwogCQkJYnJlYWs7CkBAIC02NzM0LDcgKzY5NzUsNyBAQAogCXZwb3J0LT5mY19mbGFnICY9IH5GQ19WUE9SVF9DVkxfUkNWRDsKIAl2cG9ydC0+ZmNfZmxhZyAmPSB+RkNfVlBPUlRfTE9HT19SQ1ZEOwogCXZwb3J0LT5mY19mbGFnIHw9IEZDX0ZBQlJJQzsKLQlpZiAodnBvcnQtPnBoYmEtPmZjX3RvcG9sb2d5ID09IFRPUE9MT0dZX0xPT1ApCisJaWYgKHZwb3J0LT5waGJhLT5mY190b3BvbG9neSA9PSBMUEZDX1RPUE9MT0dZX0xPT1ApCiAJCXZwb3J0LT5mY19mbGFnIHw9ICBGQ19QVUJMSUNfTE9PUDsKIAlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CiAKQEAgLTY4NDQsNyArNzA4NSw5IEBACiAJaWNtZC0+dW4uZWxzcmVxNjQubXlJRCA9IDA7CiAJaWNtZC0+dW4uZWxzcmVxNjQuZmwgPSAxOwogCi0JaWYgIChwaGJhLT5zbGlfcmV2ID09IExQRkNfU0xJX1JFVjQpIHsKKwlpZiAgKChwaGJhLT5zbGlfcmV2ID09IExQRkNfU0xJX1JFVjQpICYmCisJICAgICAoYmZfZ2V0KGxwZmNfc2xpX2ludGZfaWZfdHlwZSwgJnBoYmEtPnNsaTRfaGJhLnNsaV9pbnRmKSA9PQorCSAgICAgIExQRkNfU0xJX0lOVEZfSUZfVFlQRV8wKSkgewogCQkvKiBGRElTQyBuZWVkcyB0byBiZSAxIGZvciBXUUUgVlBJICovCiAJCWVsc2lvY2ItPmlvY2IudWxwQ3RfaCA9IChTTEk0X0NUX1ZQSSA+PiAxKSAmIDE7CiAJCWVsc2lvY2ItPmlvY2IudWxwQ3RfbCA9IFNMSTRfQ1RfVlBJICYgMSA7CkBAIC03MzUxLDggKzc1OTQsMTEgQEAKIAkJCSAgc3RydWN0IHNsaTRfd2NxZV94cmlfYWJvcnRlZCAqYXhyaSkKIHsKIAl1aW50MTZfdCB4cmkgPSBiZl9nZXQobHBmY193Y3FlX3hhX3hyaSwgYXhyaSk7CisJdWludDE2X3QgcnhpZCA9IGJmX2dldChscGZjX3djcWVfeGFfcmVtb3RlX3hpZCwgYXhyaSk7CisKIAlzdHJ1Y3QgbHBmY19zZ2xxICpzZ2xxX2VudHJ5ID0gTlVMTCwgKnNnbHFfbmV4dCA9IE5VTEw7CiAJdW5zaWduZWQgbG9uZyBpZmxhZyA9IDA7CisJc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHA7CiAJc3RydWN0IGxwZmNfc2xpX3JpbmcgKnByaW5nID0gJnBoYmEtPnNsaS5yaW5nW0xQRkNfRUxTX1JJTkddOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmhiYWxvY2ssIGlmbGFnKTsKQEAgLTczNjEsMTEgKzc2MDcsMTQgQEAKIAkJCSZwaGJhLT5zbGk0X2hiYS5scGZjX2FidHNfZWxzX3NnbF9saXN0LCBsaXN0KSB7CiAJCWlmIChzZ2xxX2VudHJ5LT5zbGk0X3hyaXRhZyA9PSB4cmkpIHsKIAkJCWxpc3RfZGVsKCZzZ2xxX2VudHJ5LT5saXN0KTsKKwkJCW5kbHAgPSBzZ2xxX2VudHJ5LT5uZGxwOworCQkJc2dscV9lbnRyeS0+bmRscCA9IE5VTEw7CiAJCQlsaXN0X2FkZF90YWlsKCZzZ2xxX2VudHJ5LT5saXN0LAogCQkJCSZwaGJhLT5zbGk0X2hiYS5scGZjX3NnbF9saXN0KTsKIAkJCXNnbHFfZW50cnktPnN0YXRlID0gU0dMX0ZSRUVEOwogCQkJc3Bpbl91bmxvY2soJnBoYmEtPnNsaTRfaGJhLmFidHNfc2dsX2xpc3RfbG9jayk7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLCBpZmxhZyk7CisJCQlscGZjX3NldF9ycnFfYWN0aXZlKHBoYmEsIG5kbHAsIHhyaSwgcnhpZCwgMSk7CiAKIAkJCS8qIENoZWNrIGlmIFRYUSBxdWV1ZSBuZWVkcyB0byBiZSBzZXJ2aWNlZCAqLwogCQkJaWYgKHByaW5nLT50eHFfY250KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19oYmFkaXNjLmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2hiYWRpc2MuYwppbmRleCBhNWQxNjk1Li5mOWYxNjBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2hiYWRpc2MuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2hiYWRpc2MuYwpAQCAtNjA3LDYgKzYwNyw4IEBACiAKIAkvKiBQcm9jZXNzIFNMSTQgZXZlbnRzICovCiAJaWYgKHBoYmEtPnBjaV9kZXZfZ3JwID09IExQRkNfUENJX0RFVl9PQykgeworCQlpZiAocGhiYS0+aGJhX2ZsYWcgJiBIQkFfUlJRX0FDVElWRSkKKwkJCWxwZmNfaGFuZGxlX3JycV9hY3RpdmUocGhiYSk7CiAJCWlmIChwaGJhLT5oYmFfZmxhZyAmIEZDUF9YUklfQUJPUlRfRVZFTlQpCiAJCQlscGZjX3NsaTRfZmNwX3hyaV9hYm9ydF9ldmVudF9wcm9jKHBoYmEpOwogCQlpZiAocGhiYS0+aGJhX2ZsYWcgJiBFTFNfWFJJX0FCT1JUX0VWRU5UKQpAQCAtOTY2LDYgKzk2OCw3IEBACiAJc3RydWN0IGxwZmNfdnBvcnQgKip2cG9ydHM7CiAJaW50IGk7CiAKKwlscGZjX2NsZWFudXBfd3RfcnJxcyhwaGJhKTsKIAlwaGJhLT5saW5rX3N0YXRlID0gTFBGQ19MSU5LX1VQOwogCiAJLyogVW5ibG9jayBmYWJyaWMgaW9jYnMgaWYgdGhleSBhcmUgYmxvY2tlZCAqLwpAQCAtMTA2NCw3ICsxMDY3LDcgQEAKIAogCW1lbXBvb2xfZnJlZShwbWIsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOwogCi0JaWYgKHBoYmEtPmZjX3RvcG9sb2d5ID09IFRPUE9MT0dZX0xPT1AgJiYKKwlpZiAocGhiYS0+ZmNfdG9wb2xvZ3kgPT0gTFBGQ19UT1BPTE9HWV9MT09QICYmCiAJICAgIHZwb3J0LT5mY19mbGFnICYgRkNfUFVCTElDX0xPT1AgJiYKIAkgICAgISh2cG9ydC0+ZmNfZmxhZyAmIEZDX0xCSVQpKSB7CiAJCQkvKiBOZWVkIHRvIHdhaXQgZm9yIEZBTiAtIHVzZSBkaXNjb3ZlcnkgdGltZXIKQEAgLTEwNzgsOSArMTA4MSw4IEBACiAJLyogU3RhcnQgZGlzY292ZXJ5IGJ5IHNlbmRpbmcgYSBGTE9HSS4gcG9ydF9zdGF0ZSBpcyBpZGVudGljYWxseQogCSAqIExQRkNfRkxPR0kgd2hpbGUgd2FpdGluZyBmb3IgRkxPR0kgY21wbAogCSAqLwotCWlmICh2cG9ydC0+cG9ydF9zdGF0ZSAhPSBMUEZDX0ZMT0dJKSB7CisJaWYgKHZwb3J0LT5wb3J0X3N0YXRlICE9IExQRkNfRkxPR0kpCiAJCWxwZmNfaW5pdGlhbF9mbG9naSh2cG9ydCk7Ci0JfQogCXJldHVybjsKIAogb3V0OgpAQCAtMTEzMSw3ICsxMTMzLDcgQEAKIAlpZiAodnBvcnQtPnBvcnRfc3RhdGUgIT0gTFBGQ19GTE9HSSkgewogCQlwaGJhLT5oYmFfZmxhZyB8PSBGQ0ZfUlJfSU5QUk9HOwogCQlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwotCQlscGZjX2luaXRpYWxfZmxvZ2kodnBvcnQpOworCQlscGZjX2lzc3VlX2luaXRfdmZpKHZwb3J0KTsKIAkJZ290byBvdXQ7CiAJfQogCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CkBAIC0xMzUzLDcgKzEzNTUsNyBAQAogCQlpZiAocGhiYS0+cHBvcnQtPnBvcnRfc3RhdGUgIT0gTFBGQ19GTE9HSSkgewogCQkJcGhiYS0+aGJhX2ZsYWcgfD0gRkNGX1JSX0lOUFJPRzsKIAkJCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7Ci0JCQlscGZjX2luaXRpYWxfZmxvZ2kocGhiYS0+cHBvcnQpOworCQkJbHBmY19pc3N1ZV9pbml0X3ZmaShwaGJhLT5wcG9ydCk7CiAJCQlyZXR1cm47CiAJCX0KIAkJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKQEAgLTIzMzEsNyArMjMzMyw3IEBACiAJCQkJcGhiYS0+ZmNmLmN1cnJlbnRfcmVjLmZjZl9pbmR4LCBmY2ZfaW5kZXgpOwogCQkvKiBXYWl0IDUwMCBtcyBiZWZvcmUgcmV0cnlpbmcgRkxPR0kgdG8gY3VycmVudCBGQ0YgKi8KIAkJbXNsZWVwKDUwMCk7Ci0JCWxwZmNfaW5pdGlhbF9mbG9naShwaGJhLT5wcG9ydCk7CisJCWxwZmNfaXNzdWVfaW5pdF92ZmkocGhiYS0+cHBvcnQpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTI0MjIsNiArMjQyNCw2MyBAQAogfQogCiAvKioKKyAqIGxwZmNfaW5pdF92ZmlfY21wbCAtIENvbXBsZXRpb24gaGFuZGxlciBmb3IgaW5pdF92ZmkgbWJveCBjb21tYW5kLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAbWJveHE6IHBvaW50ZXIgdG8gbWFpbGJveCBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgY29tcGxldGlvbiBvZiBpbml0IHZmaSBtYWlsYm94IGNvbW1hbmQuCisgKi8KK3ZvaWQKK2xwZmNfaW5pdF92ZmlfY21wbChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIExQRkNfTUJPWFFfdCAqbWJveHEpCit7CisJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0ID0gbWJveHEtPnZwb3J0OworCisJaWYgKG1ib3hxLT51Lm1iLm1ieFN0YXR1cyAmJiAobWJveHEtPnUubWIubWJ4U3RhdHVzICE9IDB4NDAwMikpIHsKKwkJbHBmY19wcmludGZfdmxvZyh2cG9ydCwgS0VSTl9FUlIsCisJCQkJTE9HX01CT1gsCisJCQkJIjI4OTEgSW5pdCBWRkkgbWFpbGJveCBmYWlsZWQgMHgleFxuIiwKKwkJCQltYm94cS0+dS5tYi5tYnhTdGF0dXMpOworCQltZW1wb29sX2ZyZWUobWJveHEsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOworCQlscGZjX3Zwb3J0X3NldF9zdGF0ZSh2cG9ydCwgRkNfVlBPUlRfRkFJTEVEKTsKKwkJcmV0dXJuOworCX0KKwlscGZjX2luaXRpYWxfZmxvZ2kodnBvcnQpOworCW1lbXBvb2xfZnJlZShtYm94cSwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CisJcmV0dXJuOworfQorCisvKioKKyAqIGxwZmNfaXNzdWVfaW5pdF92ZmkgLSBJc3N1ZSBpbml0X3ZmaSBtYWlsYm94IGNvbW1hbmQuCisgKiBAdnBvcnQ6IHBvaW50ZXIgdG8gbHBmY192cG9ydCBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzc3VlIGEgaW5pdF92ZmkgbWFpbGJveCBjb21tYW5kIHRvIGluaXRpYWxpemUgdGhlIFZGSSBhbmQKKyAqIFZQSSBmb3IgdGhlIHBoeXNpY2FsIHBvcnQuCisgKi8KK3ZvaWQKK2xwZmNfaXNzdWVfaW5pdF92Zmkoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0KQoreworCUxQRkNfTUJPWFFfdCAqbWJveHE7CisJaW50IHJjOworCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IHZwb3J0LT5waGJhOworCisJbWJveHEgPSBtZW1wb29sX2FsbG9jKHBoYmEtPm1ib3hfbWVtX3Bvb2wsIEdGUF9LRVJORUwpOworCWlmICghbWJveHEpIHsKKwkJbHBmY19wcmludGZfdmxvZyh2cG9ydCwgS0VSTl9FUlIsCisJCQlMT0dfTUJPWCwgIjI4OTIgRmFpbGVkIHRvIGFsbG9jYXRlICIKKwkJCSJpbml0X3ZmaSBtYWlsYm94XG4iKTsKKwkJcmV0dXJuOworCX0KKwlscGZjX2luaXRfdmZpKG1ib3hxLCB2cG9ydCk7CisJbWJveHEtPm1ib3hfY21wbCA9IGxwZmNfaW5pdF92ZmlfY21wbDsKKwlyYyA9IGxwZmNfc2xpX2lzc3VlX21ib3gocGhiYSwgbWJveHEsIE1CWF9OT1dBSVQpOworCWlmIChyYyA9PSBNQlhfTk9UX0ZJTklTSEVEKSB7CisJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fRVJSLAorCQkJTE9HX01CT1gsICIyODkzIEZhaWxlZCB0byBpc3N1ZSBpbml0X3ZmaSBtYWlsYm94XG4iKTsKKwkJbWVtcG9vbF9mcmVlKG1ib3hxLCB2cG9ydC0+cGhiYS0+bWJveF9tZW1fcG9vbCk7CisJfQorfQorCisvKioKICAqIGxwZmNfaW5pdF92cGlfY21wbCAtIENvbXBsZXRpb24gaGFuZGxlciBmb3IgaW5pdF92cGkgbWJveCBjb21tYW5kLgogICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCiAgKiBAbWJveHE6IHBvaW50ZXIgdG8gbWFpbGJveCBkYXRhIHN0cnVjdHVyZS4KQEAgLTI1MjgsNyArMjU4Nyw3IEBACiAJCQkJCQkgICAgIEZDX1ZQT1JUX0ZBSUxFRCk7CiAJCQkJY29udGludWU7CiAJCQl9Ci0JCQlpZiAocGhiYS0+ZmNfdG9wb2xvZ3kgPT0gVE9QT0xPR1lfTE9PUCkgeworCQkJaWYgKHBoYmEtPmZjX3RvcG9sb2d5ID09IExQRkNfVE9QT0xPR1lfTE9PUCkgewogCQkJCWxwZmNfdnBvcnRfc2V0X3N0YXRlKHZwb3J0c1tpXSwKIAkJCQkJCSAgICAgRkNfVlBPUlRfTElOS0RPV04pOwogCQkJCWNvbnRpbnVlOwpAQCAtMjU2NCw3ICsyNjIzLDcgQEAKIAkJCSAiMjAxOCBSRUdfVkZJIG1ieFN0YXR1cyBlcnJvciB4JXggIgogCQkJICJIQkEgc3RhdGUgeCV4XG4iLAogCQkJIG1ib3hxLT51Lm1iLm1ieFN0YXR1cywgdnBvcnQtPnBvcnRfc3RhdGUpOwotCQlpZiAocGhiYS0+ZmNfdG9wb2xvZ3kgPT0gVE9QT0xPR1lfTE9PUCkgeworCQlpZiAocGhiYS0+ZmNfdG9wb2xvZ3kgPT0gTFBGQ19UT1BPTE9HWV9MT09QKSB7CiAJCQkvKiBGTE9HSSBmYWlsZWQsIHVzZSBsb29wIG1hcCB0byBtYWtlIGRpc2NvdmVyeSBsaXN0ICovCiAJCQlscGZjX2Rpc2NfbGlzdF9sb29wbWFwKHZwb3J0KTsKIAkJCS8qIFN0YXJ0IGRpc2NvdmVyeSAqLwpAQCAtMjU4Miw4ICsyNjQxLDE4IEBACiAJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwogCiAJaWYgKHZwb3J0LT5wb3J0X3N0YXRlID09IExQRkNfRkFCUklDX0NGR19MSU5LKSB7Ci0JCWxwZmNfc3RhcnRfZmRpc2NzKHBoYmEpOwotCQlscGZjX2RvX3Njcl9uc19wbG9naShwaGJhLCB2cG9ydCk7CisJCS8qIEZvciBwcml2YXRlIGxvb3AganVzdCBzdGFydCBkaXNjb3ZlcnkgYW5kIHdlIGFyZSBkb25lLiAqLworCQlpZiAoKHBoYmEtPmZjX3RvcG9sb2d5ID09IExQRkNfVE9QT0xPR1lfTE9PUCkgJiYKKwkJICAgIChwaGJhLT5hbHBhX21hcFswXSA9PSAwKSAmJgorCQkgICAgISh2cG9ydC0+ZmNfZmxhZyAmIEZDX1BVQkxJQ19MT09QKSkgeworCQkJLyogVXNlIGxvb3AgbWFwIHRvIG1ha2UgZGlzY292ZXJ5IGxpc3QgKi8KKwkJCWxwZmNfZGlzY19saXN0X2xvb3BtYXAodnBvcnQpOworCQkJLyogU3RhcnQgZGlzY292ZXJ5ICovCisJCQlscGZjX2Rpc2Nfc3RhcnQodnBvcnQpOworCQl9IGVsc2UgeworCQkJbHBmY19zdGFydF9mZGlzY3MocGhiYSk7CisJCQlscGZjX2RvX3Njcl9uc19wbG9naShwaGJhLCB2cG9ydCk7CisJCX0KIAl9CiAKIGZhaWxfZnJlZV9tZW06CkBAIC0yNjQ0LDcgKzI3MTMsNyBAQAogfQogCiBzdGF0aWMgdm9pZAotbHBmY19tYnhfcHJvY2Vzc19saW5rX3VwKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgUkVBRF9MQV9WQVIgKmxhKQorbHBmY19tYnhfcHJvY2Vzc19saW5rX3VwKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfbWJ4X3JlYWRfdG9wICpsYSkKIHsKIAlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQgPSBwaGJhLT5wcG9ydDsKIAlMUEZDX01CT1hRX3QgKnNwYXJhbV9tYm94LCAqY2ZnbGlua19tYm94ID0gTlVMTDsKQEAgLTI2NTQsMzEgKzI3MjMsMjQgQEAKIAlzdHJ1Y3QgZmNmX3JlY29yZCAqZmNmX3JlY29yZDsKIAogCXNwaW5fbG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwotCXN3aXRjaCAobGEtPlVsbmtTcGVlZCkgewotCWNhc2UgTEFfMUdIWl9MSU5LOgotCQlwaGJhLT5mY19saW5rc3BlZWQgPSBMQV8xR0haX0xJTks7Ci0JCWJyZWFrOwotCWNhc2UgTEFfMkdIWl9MSU5LOgotCQlwaGJhLT5mY19saW5rc3BlZWQgPSBMQV8yR0haX0xJTks7Ci0JCWJyZWFrOwotCWNhc2UgTEFfNEdIWl9MSU5LOgotCQlwaGJhLT5mY19saW5rc3BlZWQgPSBMQV80R0haX0xJTks7Ci0JCWJyZWFrOwotCWNhc2UgTEFfOEdIWl9MSU5LOgotCQlwaGJhLT5mY19saW5rc3BlZWQgPSBMQV84R0haX0xJTks7Ci0JCWJyZWFrOwotCWNhc2UgTEFfMTBHSFpfTElOSzoKLQkJcGhiYS0+ZmNfbGlua3NwZWVkID0gTEFfMTBHSFpfTElOSzsKKwlzd2l0Y2ggKGJmX2dldChscGZjX21ieF9yZWFkX3RvcF9saW5rX3NwZCwgbGEpKSB7CisJY2FzZSBMUEZDX0xJTktfU1BFRURfMUdIWjoKKwljYXNlIExQRkNfTElOS19TUEVFRF8yR0haOgorCWNhc2UgTFBGQ19MSU5LX1NQRUVEXzRHSFo6CisJY2FzZSBMUEZDX0xJTktfU1BFRURfOEdIWjoKKwljYXNlIExQRkNfTElOS19TUEVFRF8xMEdIWjoKKwljYXNlIExQRkNfTElOS19TUEVFRF8xNkdIWjoKKwkJcGhiYS0+ZmNfbGlua3NwZWVkID0gYmZfZ2V0KGxwZmNfbWJ4X3JlYWRfdG9wX2xpbmtfc3BkLCBsYSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXBoYmEtPmZjX2xpbmtzcGVlZCA9IExBX1VOS05XX0xJTks7CisJCXBoYmEtPmZjX2xpbmtzcGVlZCA9IExQRkNfTElOS19TUEVFRF9VTktOT1dOOwogCQlicmVhazsKIAl9CiAKLQlwaGJhLT5mY190b3BvbG9neSA9IGxhLT50b3BvbG9neTsKKwlwaGJhLT5mY190b3BvbG9neSA9IGJmX2dldChscGZjX21ieF9yZWFkX3RvcF90b3BvbG9neSwgbGEpOwogCXBoYmEtPmxpbmtfZmxhZyAmPSB+TFNfTlBJVl9GQUJfU1VQUE9SVEVEOwogCi0JaWYgKHBoYmEtPmZjX3RvcG9sb2d5ID09IFRPUE9MT0dZX0xPT1ApIHsKKwlpZiAocGhiYS0+ZmNfdG9wb2xvZ3kgPT0gTFBGQ19UT1BPTE9HWV9MT09QKSB7CiAJCXBoYmEtPnNsaTNfb3B0aW9ucyAmPSB+TFBGQ19TTEkzX05QSVZfRU5BQkxFRDsKIAogCQkvKiBpZiBucGl2IGlzIGVuYWJsZWQgYW5kIHRoaXMgYWRhcHRlciBzdXBwb3J0cyBucGl2IGxvZwpAQCAtMjY4OSwxMSArMjc1MSwxMSBAQAogCQkJCSIxMzA5IExpbmsgVXAgRXZlbnQgbnBpdiBub3Qgc3VwcG9ydGVkIGluIGxvb3AgIgogCQkJCSJ0b3BvbG9neVxuIik7CiAJCQkJLyogR2V0IExvb3AgTWFwIGluZm9ybWF0aW9uICovCi0JCWlmIChsYS0+aWwpCisJCWlmIChiZl9nZXQobHBmY19tYnhfcmVhZF90b3BfaWwsIGxhKSkKIAkJCXZwb3J0LT5mY19mbGFnIHw9IEZDX0xCSVQ7CiAKLQkJdnBvcnQtPmZjX215RElEID0gbGEtPmdyYW50ZWRfQUxfUEE7Ci0JCWkgPSBsYS0+dW4ubGlscEJkZTY0LnR1cy5mLmJkZVNpemU7CisJCXZwb3J0LT5mY19teURJRCA9IGJmX2dldChscGZjX21ieF9yZWFkX3RvcF9hbHBhX2dyYW50ZWQsIGxhKTsKKwkJaSA9IGxhLT5saWxwQmRlNjQudHVzLmYuYmRlU2l6ZTsKIAogCQlpZiAoaSA9PSAwKSB7CiAJCQlwaGJhLT5hbHBhX21hcFswXSA9IDA7CkBAIC0yNzY0LDcgKzI4MjYsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAoIShwaGJhLT5oYmFfZmxhZyAmIEhCQV9GQ09FX1NVUFBPUlQpKSB7CisJaWYgKCEocGhiYS0+aGJhX2ZsYWcgJiBIQkFfRkNPRV9NT0RFKSkgewogCQljZmdsaW5rX21ib3ggPSBtZW1wb29sX2FsbG9jKHBoYmEtPm1ib3hfbWVtX3Bvb2wsIEdGUF9LRVJORUwpOwogCQlpZiAoIWNmZ2xpbmtfbWJveCkKIAkJCWdvdG8gb3V0OwpAQCAtMjg3NCwxNyArMjkzNiwxNyBAQAogCiAKIC8qCi0gKiBUaGlzIHJvdXRpbmUgaGFuZGxlcyBwcm9jZXNzaW5nIGEgUkVBRF9MQSBtYWlsYm94CisgKiBUaGlzIHJvdXRpbmUgaGFuZGxlcyBwcm9jZXNzaW5nIGEgUkVBRF9UT1BPTE9HWSBtYWlsYm94CiAgKiBjb21tYW5kIHVwb24gY29tcGxldGlvbi4gSXQgaXMgc2V0dXAgaW4gdGhlIExQRkNfTUJPWFEKICAqIGFzIHRoZSBjb21wbGV0aW9uIHJvdXRpbmUgd2hlbiB0aGUgY29tbWFuZCBpcwogICogaGFuZGVkIG9mZiB0byB0aGUgU0xJIGxheWVyLgogICovCiB2b2lkCi1scGZjX21ieF9jbXBsX3JlYWRfbGEoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBMUEZDX01CT1hRX3QgKnBtYikKK2xwZmNfbWJ4X2NtcGxfcmVhZF90b3BvbG9neShzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIExQRkNfTUJPWFFfdCAqcG1iKQogewogCXN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCA9IHBtYi0+dnBvcnQ7CiAJc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0ID0gbHBmY19zaG9zdF9mcm9tX3Zwb3J0KHZwb3J0KTsKLQlSRUFEX0xBX1ZBUiAqbGE7CisJc3RydWN0IGxwZmNfbWJ4X3JlYWRfdG9wICpsYTsKIAlNQUlMQk9YX3QgKm1iID0gJnBtYi0+dS5tYjsKIAlzdHJ1Y3QgbHBmY19kbWFidWYgKm1wID0gKHN0cnVjdCBscGZjX2RtYWJ1ZiAqKSAocG1iLT5jb250ZXh0MSk7CiAKQEAgLTI4OTcsMTUgKzI5NTksMTUgQEAKIAkJCQltYi0+bWJ4U3RhdHVzLCB2cG9ydC0+cG9ydF9zdGF0ZSk7CiAJCWxwZmNfbWJ4X2lzc3VlX2xpbmtfZG93bihwaGJhKTsKIAkJcGhiYS0+bGlua19zdGF0ZSA9IExQRkNfSEJBX0VSUk9SOwotCQlnb3RvIGxwZmNfbWJ4X2NtcGxfcmVhZF9sYV9mcmVlX21idWY7CisJCWdvdG8gbHBmY19tYnhfY21wbF9yZWFkX3RvcG9sb2d5X2ZyZWVfbWJ1ZjsKIAl9CiAKLQlsYSA9IChSRUFEX0xBX1ZBUiAqKSAmcG1iLT51Lm1iLnVuLnZhclJlYWRMQTsKKwlsYSA9IChzdHJ1Y3QgbHBmY19tYnhfcmVhZF90b3AgKikgJnBtYi0+dS5tYi51bi52YXJSZWFkVG9wOwogCiAJbWVtY3B5KCZwaGJhLT5hbHBhX21hcFswXSwgbXAtPnZpcnQsIDEyOCk7CiAKIAlzcGluX2xvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwotCWlmIChsYS0+cGIpCisJaWYgKGJmX2dldChscGZjX21ieF9yZWFkX3RvcF9wYiwgbGEpKQogCQl2cG9ydC0+ZmNfZmxhZyB8PSBGQ19CWVBBU1NFRF9NT0RFOwogCWVsc2UKIAkJdnBvcnQtPmZjX2ZsYWcgJj0gfkZDX0JZUEFTU0VEX01PREU7CkBAIC0yOTE0LDQxICsyOTc2LDQ4IEBACiAJaWYgKChwaGJhLT5mY19ldmVudFRhZyAgPCBsYS0+ZXZlbnRUYWcpIHx8CiAJICAgIChwaGJhLT5mY19ldmVudFRhZyA9PSBsYS0+ZXZlbnRUYWcpKSB7CiAJCXBoYmEtPmZjX3N0YXQuTGlua011bHRpRXZlbnQrKzsKLQkJaWYgKGxhLT5hdHRUeXBlID09IEFUX0xJTktfVVApCisJCWlmIChiZl9nZXQobHBmY19tYnhfcmVhZF90b3BfYXR0X3R5cGUsIGxhKSA9PSBMUEZDX0FUVF9MSU5LX1VQKQogCQkJaWYgKHBoYmEtPmZjX2V2ZW50VGFnICE9IDApCiAJCQkJbHBmY19saW5rZG93bihwaGJhKTsKIAl9CiAKIAlwaGJhLT5mY19ldmVudFRhZyA9IGxhLT5ldmVudFRhZzsKIAlzcGluX2xvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKLQlpZiAobGEtPm1tKQorCWlmIChiZl9nZXQobHBmY19tYnhfcmVhZF90b3BfbW0sIGxhKSkKIAkJcGhiYS0+c2xpLnNsaV9mbGFnIHw9IExQRkNfTUVOTE9fTUFJTlQ7CiAJZWxzZQogCQlwaGJhLT5zbGkuc2xpX2ZsYWcgJj0gfkxQRkNfTUVOTE9fTUFJTlQ7CiAJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKIAogCXBoYmEtPmxpbmtfZXZlbnRzKys7Ci0JaWYgKGxhLT5hdHRUeXBlID09IEFUX0xJTktfVVAgJiYgKCFsYS0+bW0pKSB7CisJaWYgKChiZl9nZXQobHBmY19tYnhfcmVhZF90b3BfYXR0X3R5cGUsIGxhKSA9PSBMUEZDX0FUVF9MSU5LX1VQKSAmJgorCSAgICAoIWJmX2dldChscGZjX21ieF9yZWFkX3RvcF9tbSwgbGEpKSkgewogCQlwaGJhLT5mY19zdGF0LkxpbmtVcCsrOwogCQlpZiAocGhiYS0+bGlua19mbGFnICYgTFNfTE9PUEJBQ0tfTU9ERSkgewogCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfTElOS19FVkVOVCwKIAkJCQkJIjEzMDYgTGluayBVcCBFdmVudCBpbiBsb29wIGJhY2sgbW9kZSAiCiAJCQkJCSJ4JXggcmVjZWl2ZWQgRGF0YTogeCV4IHgleCB4JXggeCV4XG4iLAogCQkJCQlsYS0+ZXZlbnRUYWcsIHBoYmEtPmZjX2V2ZW50VGFnLAotCQkJCQlsYS0+Z3JhbnRlZF9BTF9QQSwgbGEtPlVsbmtTcGVlZCwKKwkJCQkJYmZfZ2V0KGxwZmNfbWJ4X3JlYWRfdG9wX2FscGFfZ3JhbnRlZCwKKwkJCQkJICAgICAgIGxhKSwKKwkJCQkJYmZfZ2V0KGxwZmNfbWJ4X3JlYWRfdG9wX2xpbmtfc3BkLCBsYSksCiAJCQkJCXBoYmEtPmFscGFfbWFwWzBdKTsKIAkJfSBlbHNlIHsKIAkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0xJTktfRVZFTlQsCiAJCQkJCSIxMzAzIExpbmsgVXAgRXZlbnQgeCV4IHJlY2VpdmVkICIKIAkJCQkJIkRhdGE6IHgleCB4JXggeCV4IHgleCB4JXggeCV4ICVkXG4iLAogCQkJCQlsYS0+ZXZlbnRUYWcsIHBoYmEtPmZjX2V2ZW50VGFnLAotCQkJCQlsYS0+Z3JhbnRlZF9BTF9QQSwgbGEtPlVsbmtTcGVlZCwKKwkJCQkJYmZfZ2V0KGxwZmNfbWJ4X3JlYWRfdG9wX2FscGFfZ3JhbnRlZCwKKwkJCQkJICAgICAgIGxhKSwKKwkJCQkJYmZfZ2V0KGxwZmNfbWJ4X3JlYWRfdG9wX2xpbmtfc3BkLCBsYSksCiAJCQkJCXBoYmEtPmFscGFfbWFwWzBdLAotCQkJCQlsYS0+bW0sIGxhLT5mYSwKKwkJCQkJYmZfZ2V0KGxwZmNfbWJ4X3JlYWRfdG9wX21tLCBsYSksCisJCQkJCWJmX2dldChscGZjX21ieF9yZWFkX3RvcF9mYSwgbGEpLAogCQkJCQlwaGJhLT53YWl0XzRfbWxvX21haW50X2ZsZyk7CiAJCX0KIAkJbHBmY19tYnhfcHJvY2Vzc19saW5rX3VwKHBoYmEsIGxhKTsKLQl9IGVsc2UgaWYgKGxhLT5hdHRUeXBlID09IEFUX0xJTktfRE9XTikgeworCX0gZWxzZSBpZiAoYmZfZ2V0KGxwZmNfbWJ4X3JlYWRfdG9wX2F0dF90eXBlLCBsYSkgPT0KKwkJICAgTFBGQ19BVFRfTElOS19ET1dOKSB7CiAJCXBoYmEtPmZjX3N0YXQuTGlua0Rvd24rKzsKIAkJaWYgKHBoYmEtPmxpbmtfZmxhZyAmIExTX0xPT1BCQUNLX01PREUpIHsKIAkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0xJTktfRVZFTlQsCkBAIC0yOTY0LDExICszMDMzLDEzIEBACiAJCQkJIkRhdGE6IHgleCB4JXggeCV4IHgleCB4JXhcbiIsCiAJCQkJbGEtPmV2ZW50VGFnLCBwaGJhLT5mY19ldmVudFRhZywKIAkJCQlwaGJhLT5wcG9ydC0+cG9ydF9zdGF0ZSwgdnBvcnQtPmZjX2ZsYWcsCi0JCQkJbGEtPm1tLCBsYS0+ZmEpOworCQkJCWJmX2dldChscGZjX21ieF9yZWFkX3RvcF9tbSwgbGEpLAorCQkJCWJmX2dldChscGZjX21ieF9yZWFkX3RvcF9mYSwgbGEpKTsKIAkJfQogCQlscGZjX21ieF9pc3N1ZV9saW5rX2Rvd24ocGhiYSk7CiAJfQotCWlmIChsYS0+bW0gJiYgbGEtPmF0dFR5cGUgPT0gQVRfTElOS19VUCkgeworCWlmICgoYmZfZ2V0KGxwZmNfbWJ4X3JlYWRfdG9wX21tLCBsYSkpICYmCisJICAgIChiZl9nZXQobHBmY19tYnhfcmVhZF90b3BfYXR0X3R5cGUsIGxhKSA9PSBMUEZDX0FUVF9MSU5LX1VQKSkgewogCQlpZiAocGhiYS0+bGlua19zdGF0ZSAhPSBMUEZDX0xJTktfRE9XTikgewogCQkJcGhiYS0+ZmNfc3RhdC5MaW5rRG93bisrOwogCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfTElOS19FVkVOVCwKQEAgLTI5OTYsMTQgKzMwNjcsMTUgQEAKIAkJfQogCX0KIAotCWlmIChsYS0+ZmEpIHsKLQkJaWYgKGxhLT5tbSkKKwlpZiAoYmZfZ2V0KGxwZmNfbWJ4X3JlYWRfdG9wX2ZhLCBsYSkpIHsKKwkJaWYgKGJmX2dldChscGZjX21ieF9yZWFkX3RvcF9tbSwgbGEpKQogCQkJbHBmY19pc3N1ZV9jbGVhcl9sYShwaGJhLCB2cG9ydCk7CiAJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0lORk8sIExPR19MSU5LX0VWRU5ULAotCQkJCSIxMzExIGZhICVkXG4iLCBsYS0+ZmEpOworCQkJCSIxMzExIGZhICVkXG4iLAorCQkJCWJmX2dldChscGZjX21ieF9yZWFkX3RvcF9mYSwgbGEpKTsKIAl9CiAKLWxwZmNfbWJ4X2NtcGxfcmVhZF9sYV9mcmVlX21idWY6CitscGZjX21ieF9jbXBsX3JlYWRfdG9wb2xvZ3lfZnJlZV9tYnVmOgogCWxwZmNfbWJ1Zl9mcmVlKHBoYmEsIG1wLT52aXJ0LCBtcC0+cGh5cyk7CiAJa2ZyZWUobXApOwogCW1lbXBvb2xfZnJlZShwbWIsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOwpAQCAtMzAzMCw4ICszMTAyLDggQEAKIAlpZiAobmRscC0+bmxwX2ZsYWcgJiBOTFBfUkVHX0xPR0lOX1NFTkQpCiAJCW5kbHAtPm5scF9mbGFnICY9IH5OTFBfUkVHX0xPR0lOX1NFTkQ7CiAKLQlpZiAobmRscC0+bmxwX2ZsYWcgJiAgTkxQX0lHTlJfUkVHX0NNUEwgfHwKLQkJbmRscC0+bmxwX3N0YXRlICE9IE5MUF9TVEVfUkVHX0xPR0lOX0lTU1VFKSB7CisJaWYgKG5kbHAtPm5scF9mbGFnICYgTkxQX0lHTlJfUkVHX0NNUEwgfHwKKwkgICAgbmRscC0+bmxwX3N0YXRlICE9IE5MUF9TVEVfUkVHX0xPR0lOX0lTU1VFKSB7CiAJCS8qIFdlIHJjdmQgYSByc2NuIGFmdGVyIGlzc3VpbmcgdGhpcwogCQkgKiBtYm94IHJlZyBsb2dpbiwgd2UgbWF5IGhhdmUgY3ljbGVkCiAJCSAqIGJhY2sgdGhyb3VnaCB0aGUgc3RhdGUgYW5kIGJlCkBAIC0zMDQzLDEwICszMTE1LDYgQEAKIAkJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIAkJbmRscC0+bmxwX2ZsYWcgJj0gfk5MUF9JR05SX1JFR19DTVBMOwogCQlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7Ci0JCWlmIChwaGJhLT5zbGlfcmV2ID09IExQRkNfU0xJX1JFVjQpCi0JCQlscGZjX3NsaTRfZnJlZV9ycGkocGhiYSwKLQkJCQlwbWItPnUubWIudW4udmFyUmVnTG9naW4ucnBpKTsKLQogCX0gZWxzZQogCQkvKiBHb29kIHN0YXR1cywgY2FsbCBzdGF0ZSBtYWNoaW5lICovCiAJCWxwZmNfZGlzY19zdGF0ZV9tYWNoaW5lKHZwb3J0LCBuZGxwLCBwbWIsCkBAIC0zMDkyLDYgKzMxNjAsNyBAQAogCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIAl2cG9ydC0+dW5yZWdfdnBpX2NtcGwgPSBWUE9SVF9PSzsKIAltZW1wb29sX2ZyZWUocG1iLCBwaGJhLT5tYm94X21lbV9wb29sKTsKKwlscGZjX2NsZWFudXBfdnBvcnRzX3JycXModnBvcnQpOwogCS8qCiAJICogVGhpcyBzaG9zdCByZWZlcmVuY2UgbWlnaHQgaGF2ZSBiZWVuIHRha2VuIGF0IHRoZSBiZWdpbm5pbmcgb2YKIAkgKiBscGZjX3Zwb3J0X2RlbGV0ZSgpCkBAIC0zMzMzLDcgKzM0MDIsNyBAQAogCQlrZnJlZShtcCk7CiAJCW1lbXBvb2xfZnJlZShwbWIsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOwogCi0JCWlmIChwaGJhLT5mY190b3BvbG9neSA9PSBUT1BPTE9HWV9MT09QKSB7CisJCWlmIChwaGJhLT5mY190b3BvbG9neSA9PSBMUEZDX1RPUE9MT0dZX0xPT1ApIHsKIAkJCS8qIEZMT0dJIGZhaWxlZCwgdXNlIGxvb3AgbWFwIHRvIG1ha2UgZGlzY292ZXJ5IGxpc3QgKi8KIAkJCWxwZmNfZGlzY19saXN0X2xvb3BtYXAodnBvcnQpOwogCkBAIC0zMzU1LDcgKzM0MjQsNyBAQAogCX0KIAogCW5kbHAtPm5scF9ycGkgPSBtYi0+dW4udmFyV29yZHNbMF07Ci0JbmRscC0+bmxwX2ZsYWcgfD0gTkxQX1JQSV9WQUxJRDsKKwluZGxwLT5ubHBfZmxhZyB8PSBOTFBfUlBJX1JFR0lTVEVSRUQ7CiAJbmRscC0+bmxwX3R5cGUgfD0gTkxQX0ZBQlJJQzsKIAlscGZjX25scF9zZXRfc3RhdGUodnBvcnQsIG5kbHAsIE5MUF9TVEVfVU5NQVBQRURfTk9ERSk7CiAKQEAgLTM0MTMsNyArMzQ4Miw3IEBACiAJCS8qIElmIG5vIG90aGVyIHRocmVhZCBpcyB1c2luZyB0aGUgbmRscCwgZnJlZSBpdCAqLwogCQlscGZjX25scF9ub3RfdXNlZChuZGxwKTsKIAotCQlpZiAocGhiYS0+ZmNfdG9wb2xvZ3kgPT0gVE9QT0xPR1lfTE9PUCkgeworCQlpZiAocGhiYS0+ZmNfdG9wb2xvZ3kgPT0gTFBGQ19UT1BPTE9HWV9MT09QKSB7CiAJCQkvKgogCQkJICogUmVnTG9naW4gZmFpbGVkLCB1c2UgbG9vcCBtYXAgdG8gbWFrZSBkaXNjb3ZlcnkKIAkJCSAqIGxpc3QKQEAgLTM0MjksNyArMzQ5OCw3IEBACiAJfQogCiAJbmRscC0+bmxwX3JwaSA9IG1iLT51bi52YXJXb3Jkc1swXTsKLQluZGxwLT5ubHBfZmxhZyB8PSBOTFBfUlBJX1ZBTElEOworCW5kbHAtPm5scF9mbGFnIHw9IE5MUF9SUElfUkVHSVNURVJFRDsKIAluZGxwLT5ubHBfdHlwZSB8PSBOTFBfRkFCUklDOwogCWxwZmNfbmxwX3NldF9zdGF0ZSh2cG9ydCwgbmRscCwgTkxQX1NURV9VTk1BUFBFRF9OT0RFKTsKIApAQCAtMzc2Miw2ICszODMxLDggQEAKIAlOTFBfSU5UX05PREVfQUNUKG5kbHApOwogCWF0b21pY19zZXQoJm5kbHAtPmNtZF9wZW5kaW5nLCAwKTsKIAluZGxwLT5jbWRfcWRlcHRoID0gdnBvcnQtPmNmZ190Z3RfcXVldWVfZGVwdGg7CisJaWYgKHZwb3J0LT5waGJhLT5zbGlfcmV2ID09IExQRkNfU0xJX1JFVjQpCisJCW5kbHAtPm5scF9ycGkgPSBscGZjX3NsaTRfYWxsb2NfcnBpKHZwb3J0LT5waGJhKTsKIH0KIAogc3RydWN0IGxwZmNfbm9kZWxpc3QgKgpAQCAtMzk3NSw3ICs0MDQ2LDcgQEAKIAkgKiBieSBmaXJtd2FyZSB3aXRoIGEgbm8gcnBpIGVycm9yLgogCSAqLwogCXBzbGkgPSAmcGhiYS0+c2xpOwotCWlmIChuZGxwLT5ubHBfZmxhZyAmIE5MUF9SUElfVkFMSUQpIHsKKwlpZiAobmRscC0+bmxwX2ZsYWcgJiBOTFBfUlBJX1JFR0lTVEVSRUQpIHsKIAkJLyogTm93IHByb2Nlc3MgZWFjaCByaW5nICovCiAJCWZvciAoaSA9IDA7IGkgPCBwc2xpLT5udW1fcmluZ3M7IGkrKykgewogCQkJcHJpbmcgPSAmcHNsaS0+cmluZ1tpXTsKQEAgLTQwMjMsNyArNDA5NCw3IEBACiAJTFBGQ19NQk9YUV90ICAgICptYm94OwogCWludCByYzsKIAotCWlmIChuZGxwLT5ubHBfZmxhZyAmIE5MUF9SUElfVkFMSUQpIHsKKwlpZiAobmRscC0+bmxwX2ZsYWcgJiBOTFBfUlBJX1JFR0lTVEVSRUQpIHsKIAkJbWJveCA9IG1lbXBvb2xfYWxsb2MocGhiYS0+bWJveF9tZW1fcG9vbCwgR0ZQX0tFUk5FTCk7CiAJCWlmIChtYm94KSB7CiAJCQlscGZjX3VucmVnX2xvZ2luKHBoYmEsIHZwb3J0LT52cGksIG5kbHAtPm5scF9ycGksIG1ib3gpOwpAQCAtNDAzNSw4ICs0MTA2LDkgQEAKIAkJfQogCQlscGZjX25vX3JwaShwaGJhLCBuZGxwKTsKIAotCQluZGxwLT5ubHBfcnBpID0gMDsKLQkJbmRscC0+bmxwX2ZsYWcgJj0gfk5MUF9SUElfVkFMSUQ7CisJCWlmIChwaGJhLT5zbGlfcmV2ICE9IExQRkNfU0xJX1JFVjQpCisJCQluZGxwLT5ubHBfcnBpID0gMDsKKwkJbmRscC0+bmxwX2ZsYWcgJj0gfk5MUF9SUElfUkVHSVNURVJFRDsKIAkJbmRscC0+bmxwX2ZsYWcgJj0gfk5MUF9OUFJfQURJU0M7CiAJCXJldHVybiAxOwogCX0KQEAgLTQwNTksMTEgKzQxMzEsMTYgQEAKIAlpbnQgaTsKIAogCXZwb3J0cyA9IGxwZmNfY3JlYXRlX3Zwb3J0X3dvcmtfYXJyYXkocGhiYSk7CisJaWYgKCF2cG9ydHMpIHsKKwkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfRElTQ09WRVJZLAorCQkJIjI4ODQgVnBvcnQgYXJyYXkgYWxsb2NhdGlvbiBmYWlsZWQgXG4iKTsKKwkJcmV0dXJuOworCX0KIAlmb3IgKGkgPSAwOyBpIDw9IHBoYmEtPm1heF92cG9ydHMgJiYgdnBvcnRzW2ldICE9IE5VTEw7IGkrKykgewogCQlzaG9zdCA9IGxwZmNfc2hvc3RfZnJvbV92cG9ydCh2cG9ydHNbaV0pOwogCQlzcGluX2xvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG5kbHAsICZ2cG9ydHNbaV0tPmZjX25vZGVzLCBubHBfbGlzdHApIHsKLQkJCWlmIChuZGxwLT5ubHBfZmxhZyAmIE5MUF9SUElfVkFMSUQpIHsKKwkJCWlmIChuZGxwLT5ubHBfZmxhZyAmIE5MUF9SUElfUkVHSVNURVJFRCkgewogCQkJCS8qIFRoZSBtZW1wb29sX2FsbG9jIG1pZ2h0IHNsZWVwICovCiAJCQkJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwogCQkJCWxwZmNfdW5yZWdfcnBpKHZwb3J0c1tpXSwgbmRscCk7CkBAIC00MTkyLDkgKzQyNjksNiBAQAogCQkJCWtmcmVlKG1wKTsKIAkJCX0KIAkJCWxpc3RfZGVsKCZtYi0+bGlzdCk7Ci0JCQlpZiAocGhiYS0+c2xpX3JldiA9PSBMUEZDX1NMSV9SRVY0KQotCQkJCWxwZmNfc2xpNF9mcmVlX3JwaShwaGJhLAotCQkJCQkgbWItPnUubWIudW4udmFyUmVnTG9naW4ucnBpKTsKIAkJCW1lbXBvb2xfZnJlZShtYiwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CiAJCQkvKiBXZSBzaGFsbCBub3QgaW52b2tlIHRoZSBscGZjX25scF9wdXQgdG8gZGVjcmVtZW50CiAJCQkgKiB0aGUgbmRscCByZWZlcmVuY2UgY291bnQgYXMgd2UgYXJlIGluIHRoZSBwcm9jZXNzCkBAIC00MjM2LDE1ICs0MzEwLDE1IEBACiAKIAlscGZjX2NhbmNlbF9yZXRyeV9kZWxheV90bW8odnBvcnQsIG5kbHApOwogCWlmICgobmRscC0+bmxwX2ZsYWcgJiBOTFBfREVGRVJfUk0pICYmCi0JCSEobmRscC0+bmxwX2ZsYWcgJiBOTFBfUkVHX0xPR0lOX1NFTkQpICYmCi0JICAgICEobmRscC0+bmxwX2ZsYWcgJiBOTFBfUlBJX1ZBTElEKSkgeworCSAgICAhKG5kbHAtPm5scF9mbGFnICYgTkxQX1JFR19MT0dJTl9TRU5EKSAmJgorCSAgICAhKG5kbHAtPm5scF9mbGFnICYgTkxQX1JQSV9SRUdJU1RFUkVEKSkgewogCQkvKiBGb3IgdGhpcyBjYXNlIHdlIG5lZWQgdG8gY2xlYW51cCB0aGUgZGVmYXVsdCBycGkKIAkJICogYWxsb2NhdGVkIGJ5IHRoZSBmaXJtd2FyZS4KIAkJICovCiAJCWlmICgobWJveCA9IG1lbXBvb2xfYWxsb2MocGhiYS0+bWJveF9tZW1fcG9vbCwgR0ZQX0tFUk5FTCkpCiAJCQkhPSBOVUxMKSB7CiAJCQlyYyA9IGxwZmNfcmVnX3JwaShwaGJhLCB2cG9ydC0+dnBpLCBuZGxwLT5ubHBfRElELAotCQkJICAgICh1aW50OF90ICopICZ2cG9ydC0+ZmNfc3BhcmFtLCBtYm94LCAwKTsKKwkJCSAgICAodWludDhfdCAqKSAmdnBvcnQtPmZjX3NwYXJhbSwgbWJveCwgbmRscC0+bmxwX3JwaSk7CiAJCQlpZiAocmMpIHsKIAkJCQltZW1wb29sX2ZyZWUobWJveCwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CiAJCQl9CkBAIC00NDM2LDcgKzQ1MTAsNyBAQAogCWlmICghbHBmY19pc19saW5rX3VwKHBoYmEpKQogCQlyZXR1cm47CiAKLQlpZiAocGhiYS0+ZmNfdG9wb2xvZ3kgIT0gVE9QT0xPR1lfTE9PUCkKKwlpZiAocGhiYS0+ZmNfdG9wb2xvZ3kgIT0gTFBGQ19UT1BPTE9HWV9MT09QKQogCQlyZXR1cm47CiAKIAkvKiBDaGVjayBmb3IgbG9vcCBtYXAgcHJlc2VudCBvciBub3QgKi8KQEAgLTQ3ODgsNyArNDg2MiwxMCBAQAogCQkJfQogCQl9CiAJCWlmICh2cG9ydC0+cG9ydF9zdGF0ZSAhPSBMUEZDX0ZMT0dJKSB7Ci0JCQlscGZjX2luaXRpYWxfZmxvZ2kodnBvcnQpOworCQkJaWYgKHBoYmEtPnNsaV9yZXYgPD0gTFBGQ19TTElfUkVWMykKKwkJCQlscGZjX2luaXRpYWxfZmxvZ2kodnBvcnQpOworCQkJZWxzZQorCQkJCWxwZmNfaXNzdWVfaW5pdF92ZmkodnBvcnQpOwogCQkJcmV0dXJuOwogCQl9CiAJCWJyZWFrOwpAQCAtNDk3OSw3ICs1MDU2LDcgQEAKIAlwbWItPmNvbnRleHQyID0gTlVMTDsKIAogCW5kbHAtPm5scF9ycGkgPSBtYi0+dW4udmFyV29yZHNbMF07Ci0JbmRscC0+bmxwX2ZsYWcgfD0gTkxQX1JQSV9WQUxJRDsKKwluZGxwLT5ubHBfZmxhZyB8PSBOTFBfUlBJX1JFR0lTVEVSRUQ7CiAJbmRscC0+bmxwX3R5cGUgfD0gTkxQX0ZBQlJJQzsKIAlscGZjX25scF9zZXRfc3RhdGUodnBvcnQsIG5kbHAsIE5MUF9TVEVfVU5NQVBQRURfTk9ERSk7CiAKQEAgLTUxMDMsNiArNTE4MCw4IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPm5kbHBfbG9jaywgZmxhZ3MpOwogCU5MUF9DTFJfTk9ERV9BQ1QobmRscCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+bmRscF9sb2NrLCBmbGFncyk7CisJaWYgKHBoYmEtPnNsaV9yZXYgPT0gTFBGQ19TTElfUkVWNCkKKwkJbHBmY19zbGk0X2ZyZWVfcnBpKHBoYmEsIG5kbHAtPm5scF9ycGkpOwogCiAJLyogZnJlZSBuZGxwIG1lbW9yeSBmb3IgZmluYWwgbmRscCByZWxlYXNlICovCiAJaWYgKE5MUF9DSEtfRlJFRV9SRVEobmRscCkpIHsKQEAgLTUyNTQsNiArNTMzMywxMCBAQAogCiAJdnBvcnRzID0gbHBmY19jcmVhdGVfdnBvcnRfd29ya19hcnJheShwaGJhKTsKIAorCS8qIElmIGRyaXZlciBjYW5ub3QgYWxsb2NhdGUgbWVtb3J5LCBpbmRpY2F0ZSBmY2YgaXMgaW4gdXNlICovCisJaWYgKCF2cG9ydHMpCisJCXJldHVybiAxOworCiAJZm9yIChpID0gMDsgaSA8PSBwaGJhLT5tYXhfdnBvcnRzICYmIHZwb3J0c1tpXSAhPSBOVUxMOyBpKyspIHsKIAkJc2hvc3QgPSBscGZjX3Nob3N0X2Zyb21fdnBvcnQodnBvcnRzW2ldKTsKIAkJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKQEAgLTUyNjksNyArNTM1Miw3IEBACiAJCQkJCSJsb2dnZWQgaW5cbiIsCiAJCQkJCW5kbHAtPm5scF9ycGksIG5kbHAtPm5scF9ESUQsCiAJCQkJCW5kbHAtPm5scF9mbGFnKTsKLQkJCQlpZiAobmRscC0+bmxwX2ZsYWcgJiBOTFBfUlBJX1ZBTElEKQorCQkJCWlmIChuZGxwLT5ubHBfZmxhZyAmIE5MUF9SUElfUkVHSVNURVJFRCkKIAkJCQkJcmV0ID0gMTsKIAkJCX0KIAkJfQpAQCAtNTU1MCw3ICs1NjMzLDcgQEAKIAkgKiByZWdpc3RlcmVkLCBkbyBub3RoaW5nLgogCSAqLwogCXNwaW5fbG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwotCWlmICghKHBoYmEtPmhiYV9mbGFnICYgSEJBX0ZDT0VfU1VQUE9SVCkgfHwKKwlpZiAoIShwaGJhLT5oYmFfZmxhZyAmIEhCQV9GQ09FX01PREUpIHx8CiAJICAgICEocGhiYS0+ZmNmLmZjZl9mbGFnICYgRkNGX1JFR0lTVEVSRUQpIHx8CiAJICAgICEocGhiYS0+aGJhX2ZsYWcgJiBIQkFfRklQX1NVUFBPUlQpIHx8CiAJICAgIChwaGJhLT5mY2YuZmNmX2ZsYWcgJiBGQ0ZfRElTQ09WRVJZKSB8fApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ody5oIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ody5oCmluZGV4IDliODMzMzQuLjk2ZWQzYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaHcuaAorKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2h3LmgKQEAgLTg4MCw2ICs4ODAsMjQgQEAKIAl1aW50MzJfdCBjcmNDbnQ7CiB9OwogCitzdHJ1Y3QgUlJRIHsJCQkvKiBTdHJ1Y3R1cmUgaXMgaW4gQmlnIEVuZGlhbiBmb3JtYXQgKi8KKwl1aW50MzJfdCBycnE7CisjZGVmaW5lIHJycV9yc3ZkX1NISUZUCQkyNAorI2RlZmluZSBycnFfcnN2ZF9NQVNLCQkweDAwMDAwMGZmCisjZGVmaW5lIHJycV9yc3ZkX1dPUkQJCXJycQorI2RlZmluZSBycnFfZGlkX1NISUZUCQkwCisjZGVmaW5lIHJycV9kaWRfTUFTSwkJMHgwMGZmZmZmZgorI2RlZmluZSBycnFfZGlkX1dPUkQJCXJycQorCXVpbnQzMl90IHJycV9leGNoZzsKKyNkZWZpbmUgcnJxX294aWRfU0hJRlQJCTE2CisjZGVmaW5lIHJycV9veGlkX01BU0sJCTB4ZmZmZgorI2RlZmluZSBycnFfb3hpZF9XT1JECQlycnFfZXhjaGcKKyNkZWZpbmUgcnJxX3J4aWRfU0hJRlQJCTAKKyNkZWZpbmUgcnJxX3J4aWRfTUFTSwkJMHhmZmZmCisjZGVmaW5lIHJycV9yeGlkX1dPUkQJCXJycV9leGNoZworfTsKKworCiBzdHJ1Y3QgUlRWX1JTUCB7CQkvKiBTdHJ1Y3R1cmUgaXMgaW4gQmlnIEVuZGlhbiBmb3JtYXQgKi8KIAl1aW50MzJfdCByYXRvdjsKIAl1aW50MzJfdCBlZHRvdjsKQEAgLTExNzIsNyArMTE5MCwxMCBAQAogI2RlZmluZSBQQ0lfVkVORE9SX0lEX0VNVUxFWCAgICAgICAgMHgxMGRmCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRklSRUZMWSAgICAgICAweDFhZTUKICNkZWZpbmUgUENJX0RFVklDRV9JRF9QUk9URVVTX1ZGICAgIDB4ZTEwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0JBTElVUyAgICAgICAgMHhlMTMxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUFJPVEVVU19QRiAgICAweGUxODAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9MQU5DRVJfRkMgICAgIDB4ZTIwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xBTkNFUl9GQ09FICAgMHhlMjYwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0FUX1NNQiAgICAgICAweGYwMTEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TQVRfTUlEICAgICAgIDB4ZjAxNQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1JGTFkgICAgICAgICAgMHhmMDk1CkBAIC0xMTg5LDYgKzEyMTAsNyBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NBVCAgICAgICAgICAgMHhmMTAwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0FUX1NDU1AgICAgICAweGYxMTEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TQVRfRENTUCAgICAgIDB4ZjExMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0ZBTENPTiAgICAgICAgMHhmMTgwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU1VQRVJGTFkgICAgICAweGY3MDAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9EUkFHT05GTFkgICAgIDB4ZjgwMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NFTlRBVVIgICAgICAgMHhmOTAwCkBAIC0xMjEwLDggKzEyMzIsNiBAQAogI2RlZmluZSBQQ0lfVkVORE9SX0lEX1NFUlZFUkVOR0lORSAgMHgxOWEyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHRVJTSEFSSyAgICAweDA3MDQKICNkZWZpbmUgUENJX0RFVklDRV9JRF9UT01DQVQgICAgICAgIDB4MDcxNAotI2RlZmluZSBQQ0lfREVWSUNFX0lEX0ZBTENPTiAgICAgICAgMHhmMTgwCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfQkFMSVVTICAgICAgICAweGUxMzEKIAogI2RlZmluZSBKRURFQ19JRF9BRERSRVNTICAgICAgICAgICAgMHgwMDgwMDAxYwogI2RlZmluZSBGSVJFRkxZX0pFREVDX0lEICAgICAgICAgICAgMHgxQUNDCkBAIC0xMzY4LDcgKzEzODgsNiBAQAogI2RlZmluZSBNQlhfUkVBRF9MTktfU1RBVCAgIDB4MTIKICNkZWZpbmUgTUJYX1JFR19MT0dJTiAgICAgICAweDEzCiAjZGVmaW5lIE1CWF9VTlJFR19MT0dJTiAgICAgMHgxNAotI2RlZmluZSBNQlhfUkVBRF9MQSAgICAgICAgIDB4MTUKICNkZWZpbmUgTUJYX0NMRUFSX0xBICAgICAgICAweDE2CiAjZGVmaW5lIE1CWF9EVU1QX01FTU9SWSAgICAgMHgxNwogI2RlZmluZSBNQlhfRFVNUF9DT05URVhUICAgIDB4MTgKQEAgLTE0MDIsNyArMTQyMSw3IEBACiAjZGVmaW5lIE1CWF9SRUFEX1NQQVJNNjQgICAgMHg4RAogI2RlZmluZSBNQlhfUkVBRF9SUEk2NCAgICAgIDB4OEYKICNkZWZpbmUgTUJYX1JFR19MT0dJTjY0ICAgICAweDkzCi0jZGVmaW5lIE1CWF9SRUFEX0xBNjQgICAgICAgMHg5NQorI2RlZmluZSBNQlhfUkVBRF9UT1BPTE9HWSAgIDB4OTUKICNkZWZpbmUgTUJYX1JFR19WUEkJICAgIDB4OTYKICNkZWZpbmUgTUJYX1VOUkVHX1ZQSQkgICAgMHg5NwogCkBAIC0xODIzLDEyICsxODQyLDEzIEBACiAjZGVmaW5lIEZMQUdTX0lNRURfQUJPUlQgICAgICAgICAgICAgMHgwNDAwMAkvKiBCaXQgMTQgKi8KIAogCXVpbnQzMl90IGxpbmtfc3BlZWQ7Ci0jZGVmaW5lIExJTktfU1BFRURfQVVUTyAwICAgICAgIC8qIEF1dG8gc2VsZWN0aW9uICovCi0jZGVmaW5lIExJTktfU1BFRURfMUcgICAxICAgICAgIC8qIDEgR2lnYWJhdWQgKi8KLSNkZWZpbmUgTElOS19TUEVFRF8yRyAgIDIgICAgICAgLyogMiBHaWdhYmF1ZCAqLwotI2RlZmluZSBMSU5LX1NQRUVEXzRHICAgNCAgICAgICAvKiA0IEdpZ2FiYXVkICovCi0jZGVmaW5lIExJTktfU1BFRURfOEcgICA4ICAgICAgIC8qIDggR2lnYWJhdWQgKi8KLSNkZWZpbmUgTElOS19TUEVFRF8xMEcgICAxNiAgICAgIC8qIDEwIEdpZ2FiYXVkICovCisjZGVmaW5lIExJTktfU1BFRURfQVVUTyAweDAgICAgIC8qIEF1dG8gc2VsZWN0aW9uICovCisjZGVmaW5lIExJTktfU1BFRURfMUcgICAweDEgICAgIC8qIDEgR2lnYWJhdWQgKi8KKyNkZWZpbmUgTElOS19TUEVFRF8yRyAgIDB4MiAgICAgLyogMiBHaWdhYmF1ZCAqLworI2RlZmluZSBMSU5LX1NQRUVEXzRHICAgMHg0ICAgICAvKiA0IEdpZ2FiYXVkICovCisjZGVmaW5lIExJTktfU1BFRURfOEcgICAweDggICAgIC8qIDggR2lnYWJhdWQgKi8KKyNkZWZpbmUgTElOS19TUEVFRF8xMEcgIDB4MTAgICAgLyogMTAgR2lnYWJhdWQgKi8KKyNkZWZpbmUgTElOS19TUEVFRF8xNkcgIDB4MTEgICAgLyogMTYgR2lnYWJhdWQgKi8KIAogfSBJTklUX0xJTktfVkFSOwogCkBAIC0xOTk5LDYgKzIwMTksNyBAQAogI2RlZmluZSBMTVRfNEdiICAgICAgIDB4MDQwCiAjZGVmaW5lIExNVF84R2IgICAgICAgMHgwODAKICNkZWZpbmUgTE1UXzEwR2IgICAgICAweDEwMAorI2RlZmluZSBMTVRfMTZHYiAgICAgIDB4MjAwCiAJdWludDMyX3QgcnN2ZDI7CiAJdWludDMyX3QgcnN2ZDM7CiAJdWludDMyX3QgbWF4X3hyaTsKQEAgLTIzOTQsMTAwICsyNDE1LDkzIEBACiAjZW5kaWYKIH0gVU5SRUdfRF9JRF9WQVI7CiAKLS8qIFN0cnVjdHVyZSBmb3IgTUIgQ29tbWFuZCBSRUFEX0xBICgyMSkgKi8KLS8qIFN0cnVjdHVyZSBmb3IgTUIgQ29tbWFuZCBSRUFEX0xBNjQgKDB4OTUpICovCi0KLXR5cGVkZWYgc3RydWN0IHsKKy8qIFN0cnVjdHVyZSBmb3IgTUIgQ29tbWFuZCBSRUFEX1RPUE9MT0dZICgweDk1KSAqLworc3RydWN0IGxwZmNfbWJ4X3JlYWRfdG9wIHsKIAl1aW50MzJfdCBldmVudFRhZzsJLyogRXZlbnQgdGFnICovCi0jaWZkZWYgX19CSUdfRU5ESUFOX0JJVEZJRUxECi0JdWludDMyX3QgcnN2ZDE6MTk7Ci0JdWludDMyX3QgZmE6MTsKLQl1aW50MzJfdCBtbToxOwkJLyogTWVubG8gTWFpbnRlbmFuY2UgbW9kZSBlbmFibGVkICovCi0JdWludDMyX3Qgcng6MTsKLQl1aW50MzJfdCBwYjoxOwotCXVpbnQzMl90IGlsOjE7Ci0JdWludDMyX3QgYXR0VHlwZTo4OwotI2Vsc2UJLyogIF9fTElUVExFX0VORElBTl9CSVRGSUVMRCAqLwotCXVpbnQzMl90IGF0dFR5cGU6ODsKLQl1aW50MzJfdCBpbDoxOwotCXVpbnQzMl90IHBiOjE7Ci0JdWludDMyX3Qgcng6MTsKLQl1aW50MzJfdCBtbToxOwotCXVpbnQzMl90IGZhOjE7Ci0JdWludDMyX3QgcnN2ZDE6MTk7Ci0jZW5kaWYKLQotI2RlZmluZSBBVF9SRVNFUlZFRCAgICAweDAwCS8qIFJlc2VydmVkIC0gYXR0VHlwZSAqLwotI2RlZmluZSBBVF9MSU5LX1VQICAgICAweDAxCS8qIExpbmsgaXMgdXAgKi8KLSNkZWZpbmUgQVRfTElOS19ET1dOICAgMHgwMgkvKiBMaW5rIGlzIGRvd24gKi8KLQotI2lmZGVmIF9fQklHX0VORElBTl9CSVRGSUVMRAotCXVpbnQ4X3QgZ3JhbnRlZF9BTF9QQTsKLQl1aW50OF90IGxpcEFsUHM7Ci0JdWludDhfdCBsaXBUeXBlOwotCXVpbnQ4X3QgdG9wb2xvZ3k7Ci0jZWxzZQkvKiAgX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEICovCi0JdWludDhfdCB0b3BvbG9neTsKLQl1aW50OF90IGxpcFR5cGU7Ci0JdWludDhfdCBsaXBBbFBzOwotCXVpbnQ4X3QgZ3JhbnRlZF9BTF9QQTsKLSNlbmRpZgotCi0jZGVmaW5lIFRPUE9MT0dZX1BUX1BUIDB4MDEJLyogVG9wb2xvZ3kgaXMgcHQtcHQgLyBwdC1mYWJyaWMgKi8KLSNkZWZpbmUgVE9QT0xPR1lfTE9PUCAgMHgwMgkvKiBUb3BvbG9neSBpcyBGQy1BTCAqLwotI2RlZmluZSBUT1BPTE9HWV9MTktfTUVOTE9fTUFJTlRFTkFOQ0UgMHgwNSAvKiBtYWludCBtb2RlIHplcGh0ciB0byBtZW5sbyAqLwotCi0JdW5pb24gewotCQlzdHJ1Y3QgdWxwX2JkZSBsaWxwQmRlOyAvKiBUaGlzIEJERSBwb2ludHMgdG8gYSAxMjggYnl0ZSBidWZmZXIKLQkJCQkJICAgdG8gKi8KLQkJLyogc3RvcmUgdGhlIExJTFAgQUxfUEEgcG9zaXRpb24gbWFwIGludG8gKi8KLQkJc3RydWN0IHVscF9iZGU2NCBsaWxwQmRlNjQ7Ci0JfSB1bjsKLQotI2lmZGVmIF9fQklHX0VORElBTl9CSVRGSUVMRAotCXVpbnQzMl90IERsdToxOwotCXVpbnQzMl90IER0ZjoxOwotCXVpbnQzMl90IERyc3ZkMjoxNDsKLQl1aW50MzJfdCBEbG5rU3BlZWQ6ODsKLQl1aW50MzJfdCBEbmxQb3J0OjQ7Ci0JdWludDMyX3QgRHR4OjI7Ci0JdWludDMyX3QgRHJ4OjI7Ci0jZWxzZQkvKiAgX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEICovCi0JdWludDMyX3QgRHJ4OjI7Ci0JdWludDMyX3QgRHR4OjI7Ci0JdWludDMyX3QgRG5sUG9ydDo0OwotCXVpbnQzMl90IERsbmtTcGVlZDo4OwotCXVpbnQzMl90IERyc3ZkMjoxNDsKLQl1aW50MzJfdCBEdGY6MTsKLQl1aW50MzJfdCBEbHU6MTsKLSNlbmRpZgotCi0jaWZkZWYgX19CSUdfRU5ESUFOX0JJVEZJRUxECi0JdWludDMyX3QgVWx1OjE7Ci0JdWludDMyX3QgVXRmOjE7Ci0JdWludDMyX3QgVXJzdmQyOjE0OwotCXVpbnQzMl90IFVsbmtTcGVlZDo4OwotCXVpbnQzMl90IFVubFBvcnQ6NDsKLQl1aW50MzJfdCBVdHg6MjsKLQl1aW50MzJfdCBVcng6MjsKLSNlbHNlCS8qICBfX0xJVFRMRV9FTkRJQU5fQklURklFTEQgKi8KLQl1aW50MzJfdCBVcng6MjsKLQl1aW50MzJfdCBVdHg6MjsKLQl1aW50MzJfdCBVbmxQb3J0OjQ7Ci0JdWludDMyX3QgVWxua1NwZWVkOjg7Ci0JdWludDMyX3QgVXJzdmQyOjE0OwotCXVpbnQzMl90IFV0ZjoxOwotCXVpbnQzMl90IFVsdToxOwotI2VuZGlmCi0KLSNkZWZpbmUgTEFfVU5LTldfTElOSyAgMHgwICAgIC8qIGxua1NwZWVkICovCi0jZGVmaW5lIExBXzFHSFpfTElOSyAgIDB4MDQgICAvKiBsbmtTcGVlZCAqLwotI2RlZmluZSBMQV8yR0haX0xJTksgICAweDA4ICAgLyogbG5rU3BlZWQgKi8KLSNkZWZpbmUgTEFfNEdIWl9MSU5LICAgMHgxMCAgIC8qIGxua1NwZWVkICovCi0jZGVmaW5lIExBXzhHSFpfTElOSyAgIDB4MjAgICAvKiBsbmtTcGVlZCAqLwotI2RlZmluZSBMQV8xMEdIWl9MSU5LICAweDQwICAgLyogbG5rU3BlZWQgKi8KLQotfSBSRUFEX0xBX1ZBUjsKKwl1aW50MzJfdCB3b3JkMjsKKyNkZWZpbmUgbHBmY19tYnhfcmVhZF90b3BfZmFfU0hJRlQJCTEyCisjZGVmaW5lIGxwZmNfbWJ4X3JlYWRfdG9wX2ZhX01BU0sJCTB4MDAwMDAwMDEKKyNkZWZpbmUgbHBmY19tYnhfcmVhZF90b3BfZmFfV09SRAkJd29yZDIKKyNkZWZpbmUgbHBmY19tYnhfcmVhZF90b3BfbW1fU0hJRlQJCTExCisjZGVmaW5lIGxwZmNfbWJ4X3JlYWRfdG9wX21tX01BU0sJCTB4MDAwMDAwMDEKKyNkZWZpbmUgbHBmY19tYnhfcmVhZF90b3BfbW1fV09SRAkJd29yZDIKKyNkZWZpbmUgbHBmY19tYnhfcmVhZF90b3BfcGJfU0hJRlQJCTkKKyNkZWZpbmUgbHBmY19tYnhfcmVhZF90b3BfcGJfTUFTSwkJMFgwMDAwMDAwMQorI2RlZmluZSBscGZjX21ieF9yZWFkX3RvcF9wYl9XT1JECQl3b3JkMgorI2RlZmluZSBscGZjX21ieF9yZWFkX3RvcF9pbF9TSElGVAkJOAorI2RlZmluZSBscGZjX21ieF9yZWFkX3RvcF9pbF9NQVNLCQkweDAwMDAwMDAxCisjZGVmaW5lIGxwZmNfbWJ4X3JlYWRfdG9wX2lsX1dPUkQJCXdvcmQyCisjZGVmaW5lIGxwZmNfbWJ4X3JlYWRfdG9wX2F0dF90eXBlX1NISUZUCTAKKyNkZWZpbmUgbHBmY19tYnhfcmVhZF90b3BfYXR0X3R5cGVfTUFTSwkJMHgwMDAwMDBGRgorI2RlZmluZSBscGZjX21ieF9yZWFkX3RvcF9hdHRfdHlwZV9XT1JECQl3b3JkMgorI2RlZmluZSBMUEZDX0FUVF9SRVNFUlZFRCAgICAweDAwCS8qIFJlc2VydmVkIC0gYXR0VHlwZSAqLworI2RlZmluZSBMUEZDX0FUVF9MSU5LX1VQICAgICAweDAxCS8qIExpbmsgaXMgdXAgKi8KKyNkZWZpbmUgTFBGQ19BVFRfTElOS19ET1dOICAgMHgwMgkvKiBMaW5rIGlzIGRvd24gKi8KKwl1aW50MzJfdCB3b3JkMzsKKyNkZWZpbmUgbHBmY19tYnhfcmVhZF90b3BfYWxwYV9ncmFudGVkX1NISUZUCTI0CisjZGVmaW5lIGxwZmNfbWJ4X3JlYWRfdG9wX2FscGFfZ3JhbnRlZF9NQVNLCTB4MDAwMDAwRkYKKyNkZWZpbmUgbHBmY19tYnhfcmVhZF90b3BfYWxwYV9ncmFudGVkX1dPUkQJd29yZDMKKyNkZWZpbmUgbHBmY19tYnhfcmVhZF90b3BfbGlwX2FscHNfU0hJRlQJMTYKKyNkZWZpbmUgbHBmY19tYnhfcmVhZF90b3BfbGlwX2FscHNfTUFTSwkJMHgwMDAwMDBGRgorI2RlZmluZSBscGZjX21ieF9yZWFkX3RvcF9saXBfYWxwc19XT1JECQl3b3JkMworI2RlZmluZSBscGZjX21ieF9yZWFkX3RvcF9saXBfdHlwZV9TSElGVAk4CisjZGVmaW5lIGxwZmNfbWJ4X3JlYWRfdG9wX2xpcF90eXBlX01BU0sJCTB4MDAwMDAwRkYKKyNkZWZpbmUgbHBmY19tYnhfcmVhZF90b3BfbGlwX3R5cGVfV09SRAkJd29yZDMKKyNkZWZpbmUgbHBmY19tYnhfcmVhZF90b3BfdG9wb2xvZ3lfU0hJRlQJMAorI2RlZmluZSBscGZjX21ieF9yZWFkX3RvcF90b3BvbG9neV9NQVNLCQkweDAwMDAwMEZGCisjZGVmaW5lIGxwZmNfbWJ4X3JlYWRfdG9wX3RvcG9sb2d5X1dPUkQJCXdvcmQzCisjZGVmaW5lIExQRkNfVE9QT0xPR1lfUFRfUFQgMHgwMQkvKiBUb3BvbG9neSBpcyBwdC1wdCAvIHB0LWZhYnJpYyAqLworI2RlZmluZSBMUEZDX1RPUE9MT0dZX0xPT1AgIDB4MDIJLyogVG9wb2xvZ3kgaXMgRkMtQUwgKi8KKyNkZWZpbmUgTFBGQ19UT1BPTE9HWV9NTSAgICAweDA1CS8qIG1haW50IG1vZGUgemVwaHRyIHRvIG1lbmxvICovCisJLyogc3RvcmUgdGhlIExJTFAgQUxfUEEgcG9zaXRpb24gbWFwIGludG8gKi8KKwlzdHJ1Y3QgdWxwX2JkZTY0IGxpbHBCZGU2NDsKKyNkZWZpbmUgTFBGQ19BTFBBX01BUF9TSVpFCTEyOAorCXVpbnQzMl90IHdvcmQ3OworI2RlZmluZSBscGZjX21ieF9yZWFkX3RvcF9sZF9sdV9TSElGVAkJMzEKKyNkZWZpbmUgbHBmY19tYnhfcmVhZF90b3BfbGRfbHVfTUFTSwkJMHgwMDAwMDAwMQorI2RlZmluZSBscGZjX21ieF9yZWFkX3RvcF9sZF9sdV9XT1JECQl3b3JkNworI2RlZmluZSBscGZjX21ieF9yZWFkX3RvcF9sZF90Zl9TSElGVAkJMzAKKyNkZWZpbmUgbHBmY19tYnhfcmVhZF90b3BfbGRfdGZfTUFTSwkJMHgwMDAwMDAwMQorI2RlZmluZSBscGZjX21ieF9yZWFkX3RvcF9sZF90Zl9XT1JECQl3b3JkNworI2RlZmluZSBscGZjX21ieF9yZWFkX3RvcF9sZF9saW5rX3NwZF9TSElGVAk4CisjZGVmaW5lIGxwZmNfbWJ4X3JlYWRfdG9wX2xkX2xpbmtfc3BkX01BU0sJMHgwMDAwMDBGRgorI2RlZmluZSBscGZjX21ieF9yZWFkX3RvcF9sZF9saW5rX3NwZF9XT1JECXdvcmQ3CisjZGVmaW5lIGxwZmNfbWJ4X3JlYWRfdG9wX2xkX25sX3BvcnRfU0hJRlQJNAorI2RlZmluZSBscGZjX21ieF9yZWFkX3RvcF9sZF9ubF9wb3J0X01BU0sJMHgwMDAwMDAwRgorI2RlZmluZSBscGZjX21ieF9yZWFkX3RvcF9sZF9ubF9wb3J0X1dPUkQJd29yZDcKKyNkZWZpbmUgbHBmY19tYnhfcmVhZF90b3BfbGRfdHhfU0hJRlQJCTIKKyNkZWZpbmUgbHBmY19tYnhfcmVhZF90b3BfbGRfdHhfTUFTSwkJMHgwMDAwMDAwMworI2RlZmluZSBscGZjX21ieF9yZWFkX3RvcF9sZF90eF9XT1JECQl3b3JkNworI2RlZmluZSBscGZjX21ieF9yZWFkX3RvcF9sZF9yeF9TSElGVAkJMAorI2RlZmluZSBscGZjX21ieF9yZWFkX3RvcF9sZF9yeF9NQVNLCQkweDAwMDAwMDAzCisjZGVmaW5lIGxwZmNfbWJ4X3JlYWRfdG9wX2xkX3J4X1dPUkQJCXdvcmQ3CisJdWludDMyX3Qgd29yZDg7CisjZGVmaW5lIGxwZmNfbWJ4X3JlYWRfdG9wX2x1X1NISUZUCQkzMQorI2RlZmluZSBscGZjX21ieF9yZWFkX3RvcF9sdV9NQVNLCQkweDAwMDAwMDAxCisjZGVmaW5lIGxwZmNfbWJ4X3JlYWRfdG9wX2x1X1dPUkQJCXdvcmQ4CisjZGVmaW5lIGxwZmNfbWJ4X3JlYWRfdG9wX3RmX1NISUZUCQkzMAorI2RlZmluZSBscGZjX21ieF9yZWFkX3RvcF90Zl9NQVNLCQkweDAwMDAwMDAxCisjZGVmaW5lIGxwZmNfbWJ4X3JlYWRfdG9wX3RmX1dPUkQJCXdvcmQ4CisjZGVmaW5lIGxwZmNfbWJ4X3JlYWRfdG9wX2xpbmtfc3BkX1NISUZUCTgKKyNkZWZpbmUgbHBmY19tYnhfcmVhZF90b3BfbGlua19zcGRfTUFTSwkJMHgwMDAwMDBGRgorI2RlZmluZSBscGZjX21ieF9yZWFkX3RvcF9saW5rX3NwZF9XT1JECQl3b3JkOAorI2RlZmluZSBscGZjX21ieF9yZWFkX3RvcF9ubF9wb3J0X1NISUZUCQk0CisjZGVmaW5lIGxwZmNfbWJ4X3JlYWRfdG9wX25sX3BvcnRfTUFTSwkJMHgwMDAwMDAwRgorI2RlZmluZSBscGZjX21ieF9yZWFkX3RvcF9ubF9wb3J0X1dPUkQJCXdvcmQ4CisjZGVmaW5lIGxwZmNfbWJ4X3JlYWRfdG9wX3R4X1NISUZUCQkyCisjZGVmaW5lIGxwZmNfbWJ4X3JlYWRfdG9wX3R4X01BU0sJCTB4MDAwMDAwMDMKKyNkZWZpbmUgbHBmY19tYnhfcmVhZF90b3BfdHhfV09SRAkJd29yZDgKKyNkZWZpbmUgbHBmY19tYnhfcmVhZF90b3BfcnhfU0hJRlQJCTAKKyNkZWZpbmUgbHBmY19tYnhfcmVhZF90b3BfcnhfTUFTSwkJMHgwMDAwMDAwMworI2RlZmluZSBscGZjX21ieF9yZWFkX3RvcF9yeF9XT1JECQl3b3JkOAorI2RlZmluZSBMUEZDX0xJTktfU1BFRURfVU5LTk9XTgkweDAKKyNkZWZpbmUgTFBGQ19MSU5LX1NQRUVEXzFHSFoJMHgwNAorI2RlZmluZSBMUEZDX0xJTktfU1BFRURfMkdIWgkweDA4CisjZGVmaW5lIExQRkNfTElOS19TUEVFRF80R0haCTB4MTAKKyNkZWZpbmUgTFBGQ19MSU5LX1NQRUVEXzhHSFoJMHgyMAorI2RlZmluZSBMUEZDX0xJTktfU1BFRURfMTBHSFoJMHg0MAorI2RlZmluZSBMUEZDX0xJTktfU1BFRURfMTZHSFoJMHg4MAorfTsKIAogLyogU3RydWN0dXJlIGZvciBNQiBDb21tYW5kIENMRUFSX0xBICgyMikgKi8KIApAQCAtMzAxNiw3ICszMDMwLDYgQEAKIAlSRUFEX0xOS19WQVIgdmFyUmRMbms7CQkvKiBjbWQgPSAxOCAoUkVBRF9MTktfU1RBVCkgICovCiAJUkVHX0xPR0lOX1ZBUiB2YXJSZWdMb2dpbjsJLyogY21kID0gMTkgKFJFR19MT0dJTig2NCkpICAqLwogCVVOUkVHX0xPR0lOX1ZBUiB2YXJVbnJlZ0xvZ2luOwkvKiBjbWQgPSAyMCAoVU5SRUdfTE9HSU4pICAgICovCi0JUkVBRF9MQV9WQVIgdmFyUmVhZExBOwkJLyogY21kID0gMjEgKFJFQURfTEEoNjQpKSAgICAqLwogCUNMRUFSX0xBX1ZBUiB2YXJDbGVhckxBOwkvKiBjbWQgPSAyMiAoQ0xFQVJfTEEpICAgICAgICovCiAJRFVNUF9WQVIgdmFyRG1wOwkJLyogV2FybSBTdGFydCBEVU1QIG1ieCBjbWQgICAqLwogCVVOUkVHX0RfSURfVkFSIHZhclVucmVnRElEOwkvKiBjbWQgPSAweDIzIChVTlJFR19EX0lEKSAgICovCkBAIC0zMDI2LDYgKzMwMzksNyBAQAogCXN0cnVjdCBjb25maWdfaGJxX3ZhciB2YXJDZmdIYnE7LyogY21kID0gMHg3YyAoQ09ORklHX0hCUSkgICovCiAJc3RydWN0IHVwZGF0ZV9jZmdfdmFyIHZhclVwZGF0ZUNmZzsgLyogY21kID0gMHgxQiAoVVBEQVRFX0NGRykqLwogCUNPTkZJR19QT1JUX1ZBUiB2YXJDZmdQb3J0OwkvKiBjbWQgPSAweDg4IChDT05GSUdfUE9SVCkgICovCisJc3RydWN0IGxwZmNfbWJ4X3JlYWRfdG9wIHZhclJlYWRUb3A7IC8qIGNtZCA9IDB4OTUgKFJFQURfVE9QT0xPR1kpICovCiAJUkVHX1ZQSV9WQVIgdmFyUmVnVnBpOwkJLyogY21kID0gMHg5NiAoUkVHX1ZQSSkgKi8KIAlVTlJFR19WUElfVkFSIHZhclVucmVnVnBpOwkvKiBjbWQgPSAweDk3IChVTlJFR19WUEkpICovCiAJQVNZTkNFVlRfRU5BQkxFX1ZBUiB2YXJDZmdBc3luY0V2ZW50OyAvKmNtZCA9IHgzMyAoQ09ORklHX0FTWU5DKSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19odzQuaCBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaHc0LmgKaW5kZXggNmU0YmMzNC4uOTRjMWFhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19odzQuaAorKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2h3NC5oCkBAIC02NCwyOSArNjQsMzkgQEAKICNkZWZpbmUgbHBmY19zbGlfaW50Zl92YWxpZF9NQVNLCQkweDAwMDAwMDA3CiAjZGVmaW5lIGxwZmNfc2xpX2ludGZfdmFsaWRfV09SRAkJd29yZDAKICNkZWZpbmUgTFBGQ19TTElfSU5URl9WQUxJRAkJNgotI2RlZmluZSBscGZjX3NsaV9pbnRmX2ZlYXR1cmVsZXZlbDJfU0hJRlQJMjQKLSNkZWZpbmUgbHBmY19zbGlfaW50Zl9mZWF0dXJlbGV2ZWwyX01BU0sJMHgwMDAwMDAxRgotI2RlZmluZSBscGZjX3NsaV9pbnRmX2ZlYXR1cmVsZXZlbDJfV09SRAl3b3JkMAotI2RlZmluZSBscGZjX3NsaV9pbnRmX2ZlYXR1cmVsZXZlbDFfU0hJRlQJMTYKLSNkZWZpbmUgbHBmY19zbGlfaW50Zl9mZWF0dXJlbGV2ZWwxX01BU0sJMHgwMDAwMDBGRgotI2RlZmluZSBscGZjX3NsaV9pbnRmX2ZlYXR1cmVsZXZlbDFfV09SRAl3b3JkMAotI2RlZmluZSBMUEZDX1NMSV9JTlRGX0ZFQVRVUkVMRVZFTDFfMQkxCi0jZGVmaW5lIExQRkNfU0xJX0lOVEZfRkVBVFVSRUxFVkVMMV8yCTIKKyNkZWZpbmUgbHBmY19zbGlfaW50Zl9zbGlfaGludDJfU0hJRlQJCTI0CisjZGVmaW5lIGxwZmNfc2xpX2ludGZfc2xpX2hpbnQyX01BU0sJCTB4MDAwMDAwMUYKKyNkZWZpbmUgbHBmY19zbGlfaW50Zl9zbGlfaGludDJfV09SRAkJd29yZDAKKyNkZWZpbmUgTFBGQ19TTElfSU5URl9TTElfSElOVDJfTk9ORQkwCisjZGVmaW5lIGxwZmNfc2xpX2ludGZfc2xpX2hpbnQxX1NISUZUCQkxNgorI2RlZmluZSBscGZjX3NsaV9pbnRmX3NsaV9oaW50MV9NQVNLCQkweDAwMDAwMEZGCisjZGVmaW5lIGxwZmNfc2xpX2ludGZfc2xpX2hpbnQxX1dPUkQJCXdvcmQwCisjZGVmaW5lIExQRkNfU0xJX0lOVEZfU0xJX0hJTlQxX05PTkUJMAorI2RlZmluZSBMUEZDX1NMSV9JTlRGX1NMSV9ISU5UMV8xCTEKKyNkZWZpbmUgTFBGQ19TTElfSU5URl9TTElfSElOVDFfMgkyCisjZGVmaW5lIGxwZmNfc2xpX2ludGZfaWZfdHlwZV9TSElGVAkJMTIKKyNkZWZpbmUgbHBmY19zbGlfaW50Zl9pZl90eXBlX01BU0sJCTB4MDAwMDAwMEYKKyNkZWZpbmUgbHBmY19zbGlfaW50Zl9pZl90eXBlX1dPUkQJCXdvcmQwCisjZGVmaW5lIExQRkNfU0xJX0lOVEZfSUZfVFlQRV8wCQkwCisjZGVmaW5lIExQRkNfU0xJX0lOVEZfSUZfVFlQRV8xCQkxCisjZGVmaW5lIExQRkNfU0xJX0lOVEZfSUZfVFlQRV8yCQkyCiAjZGVmaW5lIGxwZmNfc2xpX2ludGZfc2xpX2ZhbWlseV9TSElGVAkJOAotI2RlZmluZSBscGZjX3NsaV9pbnRmX3NsaV9mYW1pbHlfTUFTSwkJMHgwMDAwMDBGRgorI2RlZmluZSBscGZjX3NsaV9pbnRmX3NsaV9mYW1pbHlfTUFTSwkJMHgwMDAwMDAwRgogI2RlZmluZSBscGZjX3NsaV9pbnRmX3NsaV9mYW1pbHlfV09SRAkJd29yZDAKLSNkZWZpbmUgTFBGQ19TTElfSU5URl9GQU1JTFlfQkUyCTAKLSNkZWZpbmUgTFBGQ19TTElfSU5URl9GQU1JTFlfQkUzCTEKKyNkZWZpbmUgTFBGQ19TTElfSU5URl9GQU1JTFlfQkUyCTB4MAorI2RlZmluZSBMUEZDX1NMSV9JTlRGX0ZBTUlMWV9CRTMJMHgxCisjZGVmaW5lIExQRkNfU0xJX0lOVEZfRkFNSUxZX0xOQ1JfQTAJMHhhCisjZGVmaW5lIExQRkNfU0xJX0lOVEZfRkFNSUxZX0xOQ1JfQjAJMHhiCiAjZGVmaW5lIGxwZmNfc2xpX2ludGZfc2xpcmV2X1NISUZUCQk0CiAjZGVmaW5lIGxwZmNfc2xpX2ludGZfc2xpcmV2X01BU0sJCTB4MDAwMDAwMEYKICNkZWZpbmUgbHBmY19zbGlfaW50Zl9zbGlyZXZfV09SRAkJd29yZDAKICNkZWZpbmUgTFBGQ19TTElfSU5URl9SRVZfU0xJMwkJMwogI2RlZmluZSBMUEZDX1NMSV9JTlRGX1JFVl9TTEk0CQk0Ci0jZGVmaW5lIGxwZmNfc2xpX2ludGZfaWZfdHlwZV9TSElGVAkJMAotI2RlZmluZSBscGZjX3NsaV9pbnRmX2lmX3R5cGVfTUFTSwkJMHgwMDAwMDAwNwotI2RlZmluZSBscGZjX3NsaV9pbnRmX2lmX3R5cGVfV09SRAkJd29yZDAKLSNkZWZpbmUgTFBGQ19TTElfSU5URl9JRl9UWVBFXzAJCTAKLSNkZWZpbmUgTFBGQ19TTElfSU5URl9JRl9UWVBFXzEJCTEKKyNkZWZpbmUgbHBmY19zbGlfaW50Zl9mdW5jX3R5cGVfU0hJRlQJCTAKKyNkZWZpbmUgbHBmY19zbGlfaW50Zl9mdW5jX3R5cGVfTUFTSwkJMHgwMDAwMDAwMQorI2RlZmluZSBscGZjX3NsaV9pbnRmX2Z1bmNfdHlwZV9XT1JECQl3b3JkMAorI2RlZmluZSBMUEZDX1NMSV9JTlRGX0lGX1RZUEVfUEhZUwkwCisjZGVmaW5lIExQRkNfU0xJX0lOVEZfSUZfVFlQRV9WSVJUCTEKIH07CiAKICNkZWZpbmUgTFBGQ19TTEk0X01CWF9FTUJFRAl0cnVlCkBAIC00NTAsMzUgKzQ2MCw0MCBAQAogCXVpbnQzMl90IHdvcmQwOwogfTsKIAorLyogVGhlIGZvbGxvd2luZyBCQVIwIFJlZ2lzdGVycyBhcHBseSB0byBTTEk0IGlmX3R5cGUgMCBVQ05Bcy4gKi8KICNkZWZpbmUgTFBGQ19VRVJSX1NUQVRVU19ISQkJMHgwMEE0CiAjZGVmaW5lIExQRkNfVUVSUl9TVEFUVVNfTE8JCTB4MDBBMAogI2RlZmluZSBMUEZDX1VFX01BU0tfSEkJCQkweDAwQUMKICNkZWZpbmUgTFBGQ19VRV9NQVNLX0xPCQkJMHgwMEE4CisKKy8qIFRoZSBmb2xsb3dpbmcgQkFSMCByZWdpc3RlciBzZXRzIGFyZSBkZWZpbmVkIGZvciBpZl90eXBlIDAgYW5kIDIgVUNOQXMuICovCiAjZGVmaW5lIExQRkNfU0xJX0lOVEYJCQkweDAwNTgKIAotLyogQkFSMCBSZWdpc3RlcnMgKi8KLSNkZWZpbmUgTFBGQ19IU1RfU1RBVEUJCQkweDAwQUMKLSNkZWZpbmUgbHBmY19oc3Rfc3RhdGVfcGVycl9TSElGVAkzMQotI2RlZmluZSBscGZjX2hzdF9zdGF0ZV9wZXJyX01BU0sJMHgxCi0jZGVmaW5lIGxwZmNfaHN0X3N0YXRlX3BlcnJfV09SRAl3b3JkMAotI2RlZmluZSBscGZjX2hzdF9zdGF0ZV9zZmlfU0hJRlQJMzAKLSNkZWZpbmUgbHBmY19oc3Rfc3RhdGVfc2ZpX01BU0sJCTB4MQotI2RlZmluZSBscGZjX2hzdF9zdGF0ZV9zZmlfV09SRAkJd29yZDAKLSNkZWZpbmUgbHBmY19oc3Rfc3RhdGVfbmlwX1NISUZUCTI5Ci0jZGVmaW5lIGxwZmNfaHN0X3N0YXRlX25pcF9NQVNLCQkweDEKLSNkZWZpbmUgbHBmY19oc3Rfc3RhdGVfbmlwX1dPUkQJCXdvcmQwCi0jZGVmaW5lIGxwZmNfaHN0X3N0YXRlX2lwY19TSElGVAkyOAotI2RlZmluZSBscGZjX2hzdF9zdGF0ZV9pcGNfTUFTSwkJMHgxCi0jZGVmaW5lIGxwZmNfaHN0X3N0YXRlX2lwY19XT1JECQl3b3JkMAotI2RlZmluZSBscGZjX2hzdF9zdGF0ZV94cm9tX1NISUZUCTI3Ci0jZGVmaW5lIGxwZmNfaHN0X3N0YXRlX3hyb21fTUFTSwkweDEKLSNkZWZpbmUgbHBmY19oc3Rfc3RhdGVfeHJvbV9XT1JECXdvcmQwCi0jZGVmaW5lIGxwZmNfaHN0X3N0YXRlX2RsX1NISUZUCQkyNgotI2RlZmluZSBscGZjX2hzdF9zdGF0ZV9kbF9NQVNLCQkweDEKLSNkZWZpbmUgbHBmY19oc3Rfc3RhdGVfZGxfV09SRAkJd29yZDAKLSNkZWZpbmUgbHBmY19oc3Rfc3RhdGVfcG9ydF9zdGF0dXNfU0hJRlQJMAotI2RlZmluZSBscGZjX2hzdF9zdGF0ZV9wb3J0X3N0YXR1c19NQVNLCQkweEZGRkYKLSNkZWZpbmUgbHBmY19oc3Rfc3RhdGVfcG9ydF9zdGF0dXNfV09SRAkJd29yZDAKKyNkZWZpbmUgTFBGQ19TTElQT1JUX0lGMl9TTVBIUgkJMHgwNDAwCisjZGVmaW5lIGxwZmNfcG9ydF9zbXBocl9wZXJyX1NISUZUCTMxCisjZGVmaW5lIGxwZmNfcG9ydF9zbXBocl9wZXJyX01BU0sJMHgxCisjZGVmaW5lIGxwZmNfcG9ydF9zbXBocl9wZXJyX1dPUkQJd29yZDAKKyNkZWZpbmUgbHBmY19wb3J0X3NtcGhyX3NmaV9TSElGVAkzMAorI2RlZmluZSBscGZjX3BvcnRfc21waHJfc2ZpX01BU0sJMHgxCisjZGVmaW5lIGxwZmNfcG9ydF9zbXBocl9zZmlfV09SRAl3b3JkMAorI2RlZmluZSBscGZjX3BvcnRfc21waHJfbmlwX1NISUZUCTI5CisjZGVmaW5lIGxwZmNfcG9ydF9zbXBocl9uaXBfTUFTSwkweDEKKyNkZWZpbmUgbHBmY19wb3J0X3NtcGhyX25pcF9XT1JECXdvcmQwCisjZGVmaW5lIGxwZmNfcG9ydF9zbXBocl9pcGNfU0hJRlQJMjgKKyNkZWZpbmUgbHBmY19wb3J0X3NtcGhyX2lwY19NQVNLCTB4MQorI2RlZmluZSBscGZjX3BvcnRfc21waHJfaXBjX1dPUkQJd29yZDAKKyNkZWZpbmUgbHBmY19wb3J0X3NtcGhyX3NjcjFfU0hJRlQJMjcKKyNkZWZpbmUgbHBmY19wb3J0X3NtcGhyX3NjcjFfTUFTSwkweDEKKyNkZWZpbmUgbHBmY19wb3J0X3NtcGhyX3NjcjFfV09SRAl3b3JkMAorI2RlZmluZSBscGZjX3BvcnRfc21waHJfc2NyMl9TSElGVAkyNgorI2RlZmluZSBscGZjX3BvcnRfc21waHJfc2NyMl9NQVNLCTB4MQorI2RlZmluZSBscGZjX3BvcnRfc21waHJfc2NyMl9XT1JECXdvcmQwCisjZGVmaW5lIGxwZmNfcG9ydF9zbXBocl9ob3N0X3NjcmF0Y2hfU0hJRlQJMTYKKyNkZWZpbmUgbHBmY19wb3J0X3NtcGhyX2hvc3Rfc2NyYXRjaF9NQVNLCTB4RkYKKyNkZWZpbmUgbHBmY19wb3J0X3NtcGhyX2hvc3Rfc2NyYXRjaF9XT1JECXdvcmQwCisjZGVmaW5lIGxwZmNfcG9ydF9zbXBocl9wb3J0X3N0YXR1c19TSElGVAkwCisjZGVmaW5lIGxwZmNfcG9ydF9zbXBocl9wb3J0X3N0YXR1c19NQVNLCTB4RkZGRgorI2RlZmluZSBscGZjX3BvcnRfc21waHJfcG9ydF9zdGF0dXNfV09SRAl3b3JkMAogCiAjZGVmaW5lIExQRkNfUE9TVF9TVEFHRV9QT1dFUl9PTl9SRVNFVAkJCTB4MDAwMAogI2RlZmluZSBMUEZDX1BPU1RfU1RBR0VfQVdBSVRJTkdfSE9TVF9SRFkJCTB4MDAwMQpAQCAtNTExLDEwICs1MjYsNDYgQEAKICNkZWZpbmUgTFBGQ19QT1NUX1NUQUdFX1JDX0RPTkUJCQkJMHgwQjA3CiAjZGVmaW5lIExQRkNfUE9TVF9TVEFHRV9SRUJPT1RfU1lTVEVNCQkJMHgwQjA4CiAjZGVmaW5lIExQRkNfUE9TVF9TVEFHRV9NQUNfQUREUkVTUwkJCTB4MEMwMAotI2RlZmluZSBMUEZDX1BPU1RfU1RBR0VfQVJNRldfUkVBRFkJCQkweEMwMDAKLSNkZWZpbmUgTFBGQ19QT1NUX1NUQUdFX0FSTUZXX1VFIAkJCTB4RjAwMAorI2RlZmluZSBMUEZDX1BPU1RfU1RBR0VfUE9SVF9SRUFEWQkJCTB4QzAwMAorI2RlZmluZSBMUEZDX1BPU1RfU1RBR0VfUE9SVF9VRSAJCQkweEYwMDAKIAotLyogQkFSMSBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgTFBGQ19TTElQT1JUX1NUQVRVUwkJMHgwNDA0CisjZGVmaW5lIGxwZmNfc2xpcG9ydF9zdGF0dXNfZXJyX1NISUZUCTMxCisjZGVmaW5lIGxwZmNfc2xpcG9ydF9zdGF0dXNfZXJyX01BU0sJMHgxCisjZGVmaW5lIGxwZmNfc2xpcG9ydF9zdGF0dXNfZXJyX1dPUkQJd29yZDAKKyNkZWZpbmUgbHBmY19zbGlwb3J0X3N0YXR1c19lbmRfU0hJRlQJMzAKKyNkZWZpbmUgbHBmY19zbGlwb3J0X3N0YXR1c19lbmRfTUFTSwkweDEKKyNkZWZpbmUgbHBmY19zbGlwb3J0X3N0YXR1c19lbmRfV09SRAl3b3JkMAorI2RlZmluZSBscGZjX3NsaXBvcnRfc3RhdHVzX290aV9TSElGVAkyOQorI2RlZmluZSBscGZjX3NsaXBvcnRfc3RhdHVzX290aV9NQVNLCTB4MQorI2RlZmluZSBscGZjX3NsaXBvcnRfc3RhdHVzX290aV9XT1JECXdvcmQwCisjZGVmaW5lIGxwZmNfc2xpcG9ydF9zdGF0dXNfcm5fU0hJRlQJMjQKKyNkZWZpbmUgbHBmY19zbGlwb3J0X3N0YXR1c19ybl9NQVNLCTB4MQorI2RlZmluZSBscGZjX3NsaXBvcnRfc3RhdHVzX3JuX1dPUkQJd29yZDAKKyNkZWZpbmUgbHBmY19zbGlwb3J0X3N0YXR1c19yZHlfU0hJRlQJMjMKKyNkZWZpbmUgbHBmY19zbGlwb3J0X3N0YXR1c19yZHlfTUFTSwkweDEKKyNkZWZpbmUgbHBmY19zbGlwb3J0X3N0YXR1c19yZHlfV09SRAl3b3JkMAorI2RlZmluZSBNQVhfSUZfVFlQRV8yX1JFU0VUUwkxMDAwCisKKyNkZWZpbmUgTFBGQ19TTElQT1JUX0NOVFJMCQkweDA0MDgKKyNkZWZpbmUgbHBmY19zbGlwb3J0X2N0cmxfZW5kX1NISUZUCTMwCisjZGVmaW5lIGxwZmNfc2xpcG9ydF9jdHJsX2VuZF9NQVNLCTB4MQorI2RlZmluZSBscGZjX3NsaXBvcnRfY3RybF9lbmRfV09SRAl3b3JkMAorI2RlZmluZSBMUEZDX1NMSVBPUlRfTElUVExFX0VORElBTiAwCisjZGVmaW5lIExQRkNfU0xJUE9SVF9CSUdfRU5ESUFOCSAgIDEKKyNkZWZpbmUgbHBmY19zbGlwb3J0X2N0cmxfaXBfU0hJRlQJMjcKKyNkZWZpbmUgbHBmY19zbGlwb3J0X2N0cmxfaXBfTUFTSwkweDEKKyNkZWZpbmUgbHBmY19zbGlwb3J0X2N0cmxfaXBfV09SRAl3b3JkMAorI2RlZmluZSBMUEZDX1NMSVBPUlRfSU5JVF9QT1JUCTEKKworI2RlZmluZSBMUEZDX1NMSVBPUlRfRVJSXzEJCTB4MDQwQworI2RlZmluZSBMUEZDX1NMSVBPUlRfRVJSXzIJCTB4MDQxMAorCisvKiBUaGUgZm9sbG93aW5nIFJlZ2lzdGVycyBhcHBseSB0byBTTEk0IGlmX3R5cGUgMCBVQ05Bcy4gVGhleSB0eXBpY2FsbHkKKyAqIHJlc2lkZSBpbiBCQVIgMi4KKyAqLworI2RlZmluZSBMUEZDX1NMSVBPUlRfSUYwX1NNUEhSCTB4MDBBQworCiAjZGVmaW5lIExQRkNfSU1SX01BU0tfQUxMCTB4RkZGRkZGRkYKICNkZWZpbmUgTFBGQ19JU0NSX0NMRUFSX0FMTAkweEZGRkZGRkZGCiAKQEAgLTU2OSwxNCArNjIwLDIxIEBACiAjZGVmaW5lIExQRkNfU0xJNF9JTlRSMzAJCUJJVDMwCiAjZGVmaW5lIExQRkNfU0xJNF9JTlRSMzEJCUJJVDMxCiAKLS8qIEJBUjIgUmVnaXN0ZXJzICovCisvKgorICogVGhlIERvb3JiZWxsIHJlZ2lzdGVycyBkZWZpbmVkIGhlcmUgZXhpc3QgaW4gZGlmZmVyZW50IEJBUgorICogcmVnaXN0ZXIgc2V0cyBkZXBlbmRpbmcgb24gdGhlIFVDTkEgUG9ydCdzIHJlcG9ydGVkIGlmX3R5cGUKKyAqIHZhbHVlLiAgRm9yIFVDTkEgcG9ydHMgcnVubmluZyBTTEk0IGFuZCBpZl90eXBlIDAsIHRoZXkgcmVzaWRlIGluCisgKiBCQVI0LiAgRm9yIFVDTkEgcG9ydHMgcnVubmluZyBTTEk0IGFuZCBpZl90eXBlIDIsIHRoZXkgcmVzaWRlIGluCisgKiBCQVIwLiAgVGhlIG9mZnNldHMgYXJlIHRoZSBzYW1lIHNvIHRoZSBkcml2ZXIgbXVzdCBhY2NvdW50IGZvcgorICogYW55IGJhc2UgYWRkcmVzcyBkaWZmZXJlbmNlLgorICovCiAjZGVmaW5lIExQRkNfUlFfRE9PUkJFTEwJCTB4MDBBMAogI2RlZmluZSBscGZjX3JxX2Rvb3JiZWxsX251bV9wb3N0ZWRfU0hJRlQJMTYKICNkZWZpbmUgbHBmY19ycV9kb29yYmVsbF9udW1fcG9zdGVkX01BU0sJMHgzRkZGCiAjZGVmaW5lIGxwZmNfcnFfZG9vcmJlbGxfbnVtX3Bvc3RlZF9XT1JECXdvcmQwCiAjZGVmaW5lIExQRkNfUlFfUE9TVF9CQVRDSAkJOAkvKiBSUUVzIHRvIHBvc3QgYXQgb25lIHRpbWUgKi8KICNkZWZpbmUgbHBmY19ycV9kb29yYmVsbF9pZF9TSElGVAkJMAotI2RlZmluZSBscGZjX3JxX2Rvb3JiZWxsX2lkX01BU0sJCTB4MDNGRgorI2RlZmluZSBscGZjX3JxX2Rvb3JiZWxsX2lkX01BU0sJCTB4RkZGRgogI2RlZmluZSBscGZjX3JxX2Rvb3JiZWxsX2lkX1dPUkQJCXdvcmQwCiAKICNkZWZpbmUgTFBGQ19XUV9ET09SQkVMTAkJMHgwMDQwCkBAIC01OTEsNiArNjQ5LDExIEBACiAjZGVmaW5lIGxwZmNfd3FfZG9vcmJlbGxfaWRfV09SRAkJd29yZDAKIAogI2RlZmluZSBMUEZDX0VRQ1FfRE9PUkJFTEwJCTB4MDEyMAorI2RlZmluZSBscGZjX2VxY3FfZG9vcmJlbGxfc2VfU0hJRlQJCTMxCisjZGVmaW5lIGxwZmNfZXFjcV9kb29yYmVsbF9zZV9NQVNLCQkweDAwMDEKKyNkZWZpbmUgbHBmY19lcWNxX2Rvb3JiZWxsX3NlX1dPUkQJCXdvcmQwCisjZGVmaW5lIExQRkNfRVFDUV9TT0xJQ0lUX0VOQUJMRV9PRkYJMAorI2RlZmluZSBMUEZDX0VRQ1FfU09MSUNJVF9FTkFCTEVfT04JMQogI2RlZmluZSBscGZjX2VxY3FfZG9vcmJlbGxfYXJtX1NISUZUCQkyOQogI2RlZmluZSBscGZjX2VxY3FfZG9vcmJlbGxfYXJtX01BU0sJCTB4MDAwMQogI2RlZmluZSBscGZjX2VxY3FfZG9vcmJlbGxfYXJtX1dPUkQJCXdvcmQwCkBAIC02MjgsNyArNjkxLDcgQEAKICNkZWZpbmUgbHBmY19tcV9kb29yYmVsbF9udW1fcG9zdGVkX01BU0sJMHgzRkZGCiAjZGVmaW5lIGxwZmNfbXFfZG9vcmJlbGxfbnVtX3Bvc3RlZF9XT1JECXdvcmQwCiAjZGVmaW5lIGxwZmNfbXFfZG9vcmJlbGxfaWRfU0hJRlQJCTAKLSNkZWZpbmUgbHBmY19tcV9kb29yYmVsbF9pZF9NQVNLCQkweDAzRkYKKyNkZWZpbmUgbHBmY19tcV9kb29yYmVsbF9pZF9NQVNLCQkweEZGRkYKICNkZWZpbmUgbHBmY19tcV9kb29yYmVsbF9pZF9XT1JECQl3b3JkMAogCiBzdHJ1Y3QgbHBmY19zbGk0X2NmZ19taGRyIHsKQEAgLTEwNDgsMTIgKzExMTEsMTggQEAKICNkZWZpbmUgbHBmY19tYnhfbXFfY3JlYXRlX2V4dF9hc3luY19ldnRfbGlua19TSElGVAlMUEZDX1RSQUlMRVJfQ09ERV9MSU5LCiAjZGVmaW5lIGxwZmNfbWJ4X21xX2NyZWF0ZV9leHRfYXN5bmNfZXZ0X2xpbmtfTUFTSwkweDAwMDAwMDAxCiAjZGVmaW5lIGxwZmNfbWJ4X21xX2NyZWF0ZV9leHRfYXN5bmNfZXZ0X2xpbmtfV09SRAlhc3luY19ldnRfYm1hcAotI2RlZmluZSBscGZjX21ieF9tcV9jcmVhdGVfZXh0X2FzeW5jX2V2dF9mY2ZzdGVfU0hJRlQJTFBGQ19UUkFJTEVSX0NPREVfRkNPRQotI2RlZmluZSBscGZjX21ieF9tcV9jcmVhdGVfZXh0X2FzeW5jX2V2dF9mY2ZzdGVfTUFTSwkweDAwMDAwMDAxCi0jZGVmaW5lIGxwZmNfbWJ4X21xX2NyZWF0ZV9leHRfYXN5bmNfZXZ0X2ZjZnN0ZV9XT1JECWFzeW5jX2V2dF9ibWFwCisjZGVmaW5lIGxwZmNfbWJ4X21xX2NyZWF0ZV9leHRfYXN5bmNfZXZ0X2ZpcF9TSElGVAlMUEZDX1RSQUlMRVJfQ09ERV9GQ09FCisjZGVmaW5lIGxwZmNfbWJ4X21xX2NyZWF0ZV9leHRfYXN5bmNfZXZ0X2ZpcF9NQVNLCTB4MDAwMDAwMDEKKyNkZWZpbmUgbHBmY19tYnhfbXFfY3JlYXRlX2V4dF9hc3luY19ldnRfZmlwX1dPUkQJYXN5bmNfZXZ0X2JtYXAKICNkZWZpbmUgbHBmY19tYnhfbXFfY3JlYXRlX2V4dF9hc3luY19ldnRfZ3JvdXA1X1NISUZUCUxQRkNfVFJBSUxFUl9DT0RFX0dSUDUKICNkZWZpbmUgbHBmY19tYnhfbXFfY3JlYXRlX2V4dF9hc3luY19ldnRfZ3JvdXA1X01BU0sJMHgwMDAwMDAwMQogI2RlZmluZSBscGZjX21ieF9tcV9jcmVhdGVfZXh0X2FzeW5jX2V2dF9ncm91cDVfV09SRAlhc3luY19ldnRfYm1hcAorI2RlZmluZSBscGZjX21ieF9tcV9jcmVhdGVfZXh0X2FzeW5jX2V2dF9mY19TSElGVAlMUEZDX1RSQUlMRVJfQ09ERV9GQworI2RlZmluZSBscGZjX21ieF9tcV9jcmVhdGVfZXh0X2FzeW5jX2V2dF9mY19NQVNLCTB4MDAwMDAwMDEKKyNkZWZpbmUgbHBmY19tYnhfbXFfY3JlYXRlX2V4dF9hc3luY19ldnRfZmNfV09SRAlhc3luY19ldnRfYm1hcAorI2RlZmluZSBscGZjX21ieF9tcV9jcmVhdGVfZXh0X2FzeW5jX2V2dF9zbGlfU0hJRlQJTFBGQ19UUkFJTEVSX0NPREVfU0xJCisjZGVmaW5lIGxwZmNfbWJ4X21xX2NyZWF0ZV9leHRfYXN5bmNfZXZ0X3NsaV9NQVNLCTB4MDAwMDAwMDEKKyNkZWZpbmUgbHBmY19tYnhfbXFfY3JlYXRlX2V4dF9hc3luY19ldnRfc2xpX1dPUkQJYXN5bmNfZXZ0X2JtYXAKIAkJCXN0cnVjdCBtcV9jb250ZXh0IGNvbnRleHQ7CiAJCQlzdHJ1Y3QgZG1hX2FkZHJlc3MgcGFnZVtMUEZDX01BWF9NUV9QQUdFXTsKIAkJfSByZXF1ZXN0OwpAQCAtMTMwNyw3ICsxMzc2LDcgQEAKICNkZWZpbmUgbHBmY19mdW5jdGlvbl9tb2RlX2RhbF9XT1JECQlmdW5jdGlvbl9tb2RlCiAjZGVmaW5lIGxwZmNfZnVuY3Rpb25fbW9kZV9scm9fU0hJRlQJCTkKICNkZWZpbmUgbHBmY19mdW5jdGlvbl9tb2RlX2xyb19NQVNLCQkweDAwMDAwMDAxCi0jZGVmaW5lIGxwZmNfZnVuY3Rpb25fbW9kZV9scm9fV09SRAkJZnVuY3Rpb25fbW9kZTkKKyNkZWZpbmUgbHBmY19mdW5jdGlvbl9tb2RlX2xyb19XT1JECQlmdW5jdGlvbl9tb2RlCiAjZGVmaW5lIGxwZmNfZnVuY3Rpb25fbW9kZV9mbGV4MTBfU0hJRlQJCTEwCiAjZGVmaW5lIGxwZmNfZnVuY3Rpb25fbW9kZV9mbGV4MTBfTUFTSwkJMHgwMDAwMDAwMQogI2RlZmluZSBscGZjX2Z1bmN0aW9uX21vZGVfZmxleDEwX1dPUkQJCWZ1bmN0aW9uX21vZGUKQEAgLTEzNTgsMTAgKzE0MjcsMTYgQEAKICNkZWZpbmUgbHBmY19pbml0X3ZmaV92Zl9TSElGVAkJMjkKICNkZWZpbmUgbHBmY19pbml0X3ZmaV92Zl9NQVNLCQkweDAwMDAwMDAxCiAjZGVmaW5lIGxwZmNfaW5pdF92ZmlfdmZfV09SRAkJd29yZDEKKyNkZWZpbmUgbHBmY19pbml0X3ZmaV92cF9TSElGVAkJMjgKKyNkZWZpbmUgbHBmY19pbml0X3ZmaV92cF9NQVNLCQkweDAwMDAwMDAxCisjZGVmaW5lIGxwZmNfaW5pdF92ZmlfdnBfV09SRAkJd29yZDEKICNkZWZpbmUgbHBmY19pbml0X3ZmaV92ZmlfU0hJRlQJCTAKICNkZWZpbmUgbHBmY19pbml0X3ZmaV92ZmlfTUFTSwkJMHgwMDAwRkZGRgogI2RlZmluZSBscGZjX2luaXRfdmZpX3ZmaV9XT1JECQl3b3JkMQogCXVpbnQzMl90IHdvcmQyOworI2RlZmluZSBscGZjX2luaXRfdmZpX3ZwaV9TSElGVAkJMTYKKyNkZWZpbmUgbHBmY19pbml0X3ZmaV92cGlfTUFTSwkJMHgwMDAwRkZGRgorI2RlZmluZSBscGZjX2luaXRfdmZpX3ZwaV9XT1JECQl3b3JkMgogI2RlZmluZSBscGZjX2luaXRfdmZpX2ZjZmlfU0hJRlQJMAogI2RlZmluZSBscGZjX2luaXRfdmZpX2ZjZmlfTUFTSwkJMHgwMDAwRkZGRgogI2RlZmluZSBscGZjX2luaXRfdmZpX2ZjZmlfV09SRAkJd29yZDIKQEAgLTIwNjksNiArMjE0NCw4IEBACiAjZGVmaW5lIExQRkNfVFJBSUxFUl9DT0RFX0ZDT0UJMHgyCiAjZGVmaW5lIExQRkNfVFJBSUxFUl9DT0RFX0RDQlgJMHgzCiAjZGVmaW5lIExQRkNfVFJBSUxFUl9DT0RFX0dSUDUJMHg1CisjZGVmaW5lIExQRkNfVFJBSUxFUl9DT0RFX0ZDCTB4MTAKKyNkZWZpbmUgTFBGQ19UUkFJTEVSX0NPREVfU0xJCTB4MTEKIH07CiAKIHN0cnVjdCBscGZjX2FjcWVfbGluayB7CkBAIC0yMDk0LDExICsyMTcxLDEyIEBACiAjZGVmaW5lIExQRkNfQVNZTkNfTElOS19TVEFUVVNfVVAJCTB4MQogI2RlZmluZSBMUEZDX0FTWU5DX0xJTktfU1RBVFVTX0xPR0lDQUxfRE9XTgkweDIKICNkZWZpbmUgTFBGQ19BU1lOQ19MSU5LX1NUQVRVU19MT0dJQ0FMX1VQCTB4MwotI2RlZmluZSBscGZjX2FjcWVfbGlua19waHlzaWNhbF9TSElGVAkJMAotI2RlZmluZSBscGZjX2FjcWVfbGlua19waHlzaWNhbF9NQVNLCQkweDAwMDAwMEZGCi0jZGVmaW5lIGxwZmNfYWNxZV9saW5rX3BoeXNpY2FsX1dPUkQJCXdvcmQwCi0jZGVmaW5lIExQRkNfQVNZTkNfTElOS19QT1JUX0EJCQkweDAKLSNkZWZpbmUgTFBGQ19BU1lOQ19MSU5LX1BPUlRfQgkJCTB4MQorI2RlZmluZSBscGZjX2FjcWVfbGlua190eXBlX1NISUZUCQk2CisjZGVmaW5lIGxwZmNfYWNxZV9saW5rX3R5cGVfTUFTSwkJMHgwMDAwMDAwMworI2RlZmluZSBscGZjX2FjcWVfbGlua190eXBlX1dPUkQJCXdvcmQwCisjZGVmaW5lIGxwZmNfYWNxZV9saW5rX251bWJlcl9TSElGVAkJMAorI2RlZmluZSBscGZjX2FjcWVfbGlua19udW1iZXJfTUFTSwkJMHgwMDAwMDAzRgorI2RlZmluZSBscGZjX2FjcWVfbGlua19udW1iZXJfV09SRAkJd29yZDAKIAl1aW50MzJfdCB3b3JkMTsKICNkZWZpbmUgbHBmY19hY3FlX2xpbmtfZmF1bHRfU0hJRlQJMAogI2RlZmluZSBscGZjX2FjcWVfbGlua19mYXVsdF9NQVNLCTB4MDAwMDAwRkYKQEAgLTIxMDYsMjkgKzIxODQsMzEgQEAKICNkZWZpbmUgTFBGQ19BU1lOQ19MSU5LX0ZBVUxUX05PTkUJMHgwCiAjZGVmaW5lIExQRkNfQVNZTkNfTElOS19GQVVMVF9MT0NBTAkweDEKICNkZWZpbmUgTFBGQ19BU1lOQ19MSU5LX0ZBVUxUX1JFTU9URQkweDIKLSNkZWZpbmUgbHBmY19hY3FlX3Fvc19saW5rX3NwZWVkX1NISUZUCTE2Ci0jZGVmaW5lIGxwZmNfYWNxZV9xb3NfbGlua19zcGVlZF9NQVNLCTB4MDAwMEZGRkYKLSNkZWZpbmUgbHBmY19hY3FlX3Fvc19saW5rX3NwZWVkX1dPUkQJd29yZDEKKyNkZWZpbmUgbHBmY19hY3FlX2xvZ2ljYWxfbGlua19zcGVlZF9TSElGVAkxNgorI2RlZmluZSBscGZjX2FjcWVfbG9naWNhbF9saW5rX3NwZWVkX01BU0sJMHgwMDAwRkZGRgorI2RlZmluZSBscGZjX2FjcWVfbG9naWNhbF9saW5rX3NwZWVkX1dPUkQJd29yZDEKIAl1aW50MzJfdCBldmVudF90YWc7CiAJdWludDMyX3QgdHJhaWxlcjsKKyNkZWZpbmUgTFBGQ19MSU5LX0VWRU5UX1RZUEVfUEhZU0lDQUwJMHgwCisjZGVmaW5lIExQRkNfTElOS19FVkVOVF9UWVBFX1ZJUlRVQUwJMHgxCiB9OwogCi1zdHJ1Y3QgbHBmY19hY3FlX2Zjb2Ugeworc3RydWN0IGxwZmNfYWNxZV9maXAgewogCXVpbnQzMl90IGluZGV4OwogCXVpbnQzMl90IHdvcmQxOwotI2RlZmluZSBscGZjX2FjcWVfZmNvZV9mY2ZfY291bnRfU0hJRlQJCTAKLSNkZWZpbmUgbHBmY19hY3FlX2Zjb2VfZmNmX2NvdW50X01BU0sJCTB4MDAwMEZGRkYKLSNkZWZpbmUgbHBmY19hY3FlX2Zjb2VfZmNmX2NvdW50X1dPUkQJCXdvcmQxCi0jZGVmaW5lIGxwZmNfYWNxZV9mY29lX2V2ZW50X3R5cGVfU0hJRlQJCTE2Ci0jZGVmaW5lIGxwZmNfYWNxZV9mY29lX2V2ZW50X3R5cGVfTUFTSwkJMHgwMDAwRkZGRgotI2RlZmluZSBscGZjX2FjcWVfZmNvZV9ldmVudF90eXBlX1dPUkQJCXdvcmQxCi0jZGVmaW5lIExQRkNfRkNPRV9FVkVOVF9UWVBFX05FV19GQ0YJCTB4MQotI2RlZmluZSBMUEZDX0ZDT0VfRVZFTlRfVFlQRV9GQ0ZfVEFCTEVfRlVMTAkweDIKLSNkZWZpbmUgTFBGQ19GQ09FX0VWRU5UX1RZUEVfRkNGX0RFQUQJCTB4MwotI2RlZmluZSBMUEZDX0ZDT0VfRVZFTlRfVFlQRV9DVkwJCTB4NAotI2RlZmluZSBMUEZDX0ZDT0VfRVZFTlRfVFlQRV9GQ0ZfUEFSQU1fTU9ECTB4NQorI2RlZmluZSBscGZjX2FjcWVfZmlwX2ZjZl9jb3VudF9TSElGVAkJMAorI2RlZmluZSBscGZjX2FjcWVfZmlwX2ZjZl9jb3VudF9NQVNLCQkweDAwMDBGRkZGCisjZGVmaW5lIGxwZmNfYWNxZV9maXBfZmNmX2NvdW50X1dPUkQJCXdvcmQxCisjZGVmaW5lIGxwZmNfYWNxZV9maXBfZXZlbnRfdHlwZV9TSElGVAkJMTYKKyNkZWZpbmUgbHBmY19hY3FlX2ZpcF9ldmVudF90eXBlX01BU0sJCTB4MDAwMEZGRkYKKyNkZWZpbmUgbHBmY19hY3FlX2ZpcF9ldmVudF90eXBlX1dPUkQJCXdvcmQxCiAJdWludDMyX3QgZXZlbnRfdGFnOwogCXVpbnQzMl90IHRyYWlsZXI7CisjZGVmaW5lIExQRkNfRklQX0VWRU5UX1RZUEVfTkVXX0ZDRgkJMHgxCisjZGVmaW5lIExQRkNfRklQX0VWRU5UX1RZUEVfRkNGX1RBQkxFX0ZVTEwJMHgyCisjZGVmaW5lIExQRkNfRklQX0VWRU5UX1RZUEVfRkNGX0RFQUQJCTB4MworI2RlZmluZSBMUEZDX0ZJUF9FVkVOVF9UWVBFX0NWTAkJCTB4NAorI2RlZmluZSBMUEZDX0ZJUF9FVkVOVF9UWVBFX0ZDRl9QQVJBTV9NT0QJMHg1CiB9OwogCiBzdHJ1Y3QgbHBmY19hY3FlX2RjYnggewpAQCAtMjE0MCw5ICsyMjIwLDEyIEBACiAKIHN0cnVjdCBscGZjX2FjcWVfZ3JwNSB7CiAJdWludDMyX3Qgd29yZDA7Ci0jZGVmaW5lIGxwZmNfYWNxZV9ncnA1X3Bwb3J0X1NISUZUCTAKLSNkZWZpbmUgbHBmY19hY3FlX2dycDVfcHBvcnRfTUFTSwkweDAwMDAwMEZGCi0jZGVmaW5lIGxwZmNfYWNxZV9ncnA1X3Bwb3J0X1dPUkQJd29yZDAKKyNkZWZpbmUgbHBmY19hY3FlX2dycDVfdHlwZV9TSElGVAkJNgorI2RlZmluZSBscGZjX2FjcWVfZ3JwNV90eXBlX01BU0sJCTB4MDAwMDAwMDMKKyNkZWZpbmUgbHBmY19hY3FlX2dycDVfdHlwZV9XT1JECQl3b3JkMAorI2RlZmluZSBscGZjX2FjcWVfZ3JwNV9udW1iZXJfU0hJRlQJCTAKKyNkZWZpbmUgbHBmY19hY3FlX2dycDVfbnVtYmVyX01BU0sJCTB4MDAwMDAwM0YKKyNkZWZpbmUgbHBmY19hY3FlX2dycDVfbnVtYmVyX1dPUkQJCXdvcmQwCiAJdWludDMyX3Qgd29yZDE7CiAjZGVmaW5lIGxwZmNfYWNxZV9ncnA1X2xsaW5rX3NwZF9TSElGVAkxNgogI2RlZmluZSBscGZjX2FjcWVfZ3JwNV9sbGlua19zcGRfTUFTSwkweDAwMDBGRkZGCkBAIC0yMTUxLDYgKzIyMzQsNjggQEAKIAl1aW50MzJfdCB0cmFpbGVyOwogfTsKIAorc3RydWN0IGxwZmNfYWNxZV9mY19sYSB7CisJdWludDMyX3Qgd29yZDA7CisjZGVmaW5lIGxwZmNfYWNxZV9mY19sYV9zcGVlZF9TSElGVAkJMjQKKyNkZWZpbmUgbHBmY19hY3FlX2ZjX2xhX3NwZWVkX01BU0sJCTB4MDAwMDAwRkYKKyNkZWZpbmUgbHBmY19hY3FlX2ZjX2xhX3NwZWVkX1dPUkQJCXdvcmQwCisjZGVmaW5lIExQRkNfRkNfTEFfU1BFRURfVU5LT1dOCQkweDAKKyNkZWZpbmUgTFBGQ19GQ19MQV9TUEVFRF8xRwkJMHgxCisjZGVmaW5lIExQRkNfRkNfTEFfU1BFRURfMkcJCTB4MgorI2RlZmluZSBMUEZDX0ZDX0xBX1NQRUVEXzRHCQkweDQKKyNkZWZpbmUgTFBGQ19GQ19MQV9TUEVFRF84RwkJMHg4CisjZGVmaW5lIExQRkNfRkNfTEFfU1BFRURfMTBHCQkweEEKKyNkZWZpbmUgTFBGQ19GQ19MQV9TUEVFRF8xNkcJCTB4MTAKKyNkZWZpbmUgbHBmY19hY3FlX2ZjX2xhX3RvcG9sb2d5X1NISUZUCQkxNgorI2RlZmluZSBscGZjX2FjcWVfZmNfbGFfdG9wb2xvZ3lfTUFTSwkJMHgwMDAwMDBGRgorI2RlZmluZSBscGZjX2FjcWVfZmNfbGFfdG9wb2xvZ3lfV09SRAkJd29yZDAKKyNkZWZpbmUgTFBGQ19GQ19MQV9UT1BfVU5LT1dOCQkweDAKKyNkZWZpbmUgTFBGQ19GQ19MQV9UT1BfUDJQCQkweDEKKyNkZWZpbmUgTFBGQ19GQ19MQV9UT1BfRkNBTAkJMHgyCisjZGVmaW5lIExQRkNfRkNfTEFfVE9QX0lOVEVSTkFMX0xPT1AJMHgzCisjZGVmaW5lIExQRkNfRkNfTEFfVE9QX1NFUkRFU19MT09QCTB4NAorI2RlZmluZSBscGZjX2FjcWVfZmNfbGFfYXR0X3R5cGVfU0hJRlQJCTgKKyNkZWZpbmUgbHBmY19hY3FlX2ZjX2xhX2F0dF90eXBlX01BU0sJCTB4MDAwMDAwRkYKKyNkZWZpbmUgbHBmY19hY3FlX2ZjX2xhX2F0dF90eXBlX1dPUkQJCXdvcmQwCisjZGVmaW5lIExQRkNfRkNfTEFfVFlQRV9MSU5LX1VQCQkweDEKKyNkZWZpbmUgTFBGQ19GQ19MQV9UWVBFX0xJTktfRE9XTgkweDIKKyNkZWZpbmUgTFBGQ19GQ19MQV9UWVBFX05PX0hBUkRfQUxQQQkweDMKKyNkZWZpbmUgbHBmY19hY3FlX2ZjX2xhX3BvcnRfdHlwZV9TSElGVAkJNgorI2RlZmluZSBscGZjX2FjcWVfZmNfbGFfcG9ydF90eXBlX01BU0sJCTB4MDAwMDAwMDMKKyNkZWZpbmUgbHBmY19hY3FlX2ZjX2xhX3BvcnRfdHlwZV9XT1JECQl3b3JkMAorI2RlZmluZSBMUEZDX0xJTktfVFlQRV9FVEhFUk5FVAkJMHgwCisjZGVmaW5lIExQRkNfTElOS19UWVBFX0ZDCQkweDEKKyNkZWZpbmUgbHBmY19hY3FlX2ZjX2xhX3BvcnRfbnVtYmVyX1NISUZUCTAKKyNkZWZpbmUgbHBmY19hY3FlX2ZjX2xhX3BvcnRfbnVtYmVyX01BU0sJMHgwMDAwMDAzRgorI2RlZmluZSBscGZjX2FjcWVfZmNfbGFfcG9ydF9udW1iZXJfV09SRAl3b3JkMAorCXVpbnQzMl90IHdvcmQxOworI2RlZmluZSBscGZjX2FjcWVfZmNfbGFfbGxpbmtfc3BkX1NISUZUCQkxNgorI2RlZmluZSBscGZjX2FjcWVfZmNfbGFfbGxpbmtfc3BkX01BU0sJCTB4MDAwMEZGRkYKKyNkZWZpbmUgbHBmY19hY3FlX2ZjX2xhX2xsaW5rX3NwZF9XT1JECQl3b3JkMQorI2RlZmluZSBscGZjX2FjcWVfZmNfbGFfZmF1bHRfU0hJRlQJCTAKKyNkZWZpbmUgbHBmY19hY3FlX2ZjX2xhX2ZhdWx0X01BU0sJCTB4MDAwMDAwRkYKKyNkZWZpbmUgbHBmY19hY3FlX2ZjX2xhX2ZhdWx0X1dPUkQJCXdvcmQxCisjZGVmaW5lIExQRkNfRkNfTEFfRkFVTFRfTk9ORQkJMHgwCisjZGVmaW5lIExQRkNfRkNfTEFfRkFVTFRfTE9DQUwJCTB4MQorI2RlZmluZSBMUEZDX0ZDX0xBX0ZBVUxUX1JFTU9URQkJMHgyCisJdWludDMyX3QgZXZlbnRfdGFnOworCXVpbnQzMl90IHRyYWlsZXI7CisjZGVmaW5lIExQRkNfRkNfTEFfRVZFTlRfVFlQRV9GQ19MSU5LCQkweDEKKyNkZWZpbmUgTFBGQ19GQ19MQV9FVkVOVF9UWVBFX1NIQVJFRF9MSU5LCTB4MgorfTsKKworc3RydWN0IGxwZmNfYWNxZV9zbGkgeworCXVpbnQzMl90IGV2ZW50X2RhdGExOworCXVpbnQzMl90IGV2ZW50X2RhdGEyOworCXVpbnQzMl90IHJlc2VydmVkOworCXVpbnQzMl90IHRyYWlsZXI7CisjZGVmaW5lIExQRkNfU0xJX0VWRU5UX1RZUEVfUE9SVF9FUlJPUgkJMHgxCisjZGVmaW5lIExQRkNfU0xJX0VWRU5UX1RZUEVfT1ZFUl9URU1QCQkweDIKKyNkZWZpbmUgTFBGQ19TTElfRVZFTlRfVFlQRV9OT1JNX1RFTVAJCTB4MworI2RlZmluZSBMUEZDX1NMSV9FVkVOVF9UWVBFX05WTE9HX1BPU1QJCTB4NAorI2RlZmluZSBMUEZDX1NMSV9FVkVOVF9UWVBFX0RJQUdfRFVNUAkJMHg1Cit9OworCiAvKgogICogRGVmaW5lIHRoZSBib290c3RyYXAgbWFpbGJveCAoYm1ieCkgcmVnaW9uIHVzZWQgdG8gY29tbXVuaWNhdGUKICAqIG1haWxib3ggY29tbWFuZCBiZXR3ZWVuIHRoZSBob3N0IGFuZCBwb3J0LiBUaGUgbWFpbGJveCBjb25zaXN0cwpAQCAtMjIxMCw3ICsyMzU1LDcgQEAKICNkZWZpbmUgd3FlX3Jjdm94aWRfV09SRCAgICAgIHdvcmQ5CiAJdWludDMyX3Qgd29yZDEwOwogI2RlZmluZSB3cWVfZWJkZV9jbnRfU0hJRlQgICAgMAotI2RlZmluZSB3cWVfZWJkZV9jbnRfTUFTSyAgICAgMHgwMDAwMDAwNworI2RlZmluZSB3cWVfZWJkZV9jbnRfTUFTSyAgICAgMHgwMDAwMDAwZgogI2RlZmluZSB3cWVfZWJkZV9jbnRfV09SRCAgICAgd29yZDEwCiAjZGVmaW5lIHdxZV9sZW5sb2NfU0hJRlQgICAgICA3CiAjZGVmaW5lIHdxZV9sZW5sb2NfTUFTSyAgICAgICAweDAwMDAwMDAzCkBAIC0yNDAyLDcgKzI1NDcsNiBAQAogCXVpbnQzMl90IHJlbGF0aXZlX29mZnNldDsKIAlzdHJ1Y3Qgd3FlX3JjdGxfZGZjdGwgd2dlX2N0bDsKIAlzdHJ1Y3Qgd3FlX2NvbW1vbiB3cWVfY29tOyAvKiB3b3JkcyA2LTExICovCi0JLyogTm90ZTogd29yZDEwIGRpZmZlcmVudCBSRVZJU0lUICovCiAJdWludDMyX3QgeG1pdF9sZW47CiAJdWludDMyX3QgcnN2ZF8xMl8xNVszXTsKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2luaXQuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaW5pdC5jCmluZGV4IGIzMDY1NzkuLjQ2MjI0MmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaW5pdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaW5pdC5jCkBAIC00NDYsMjMgKzQ0NiwyNSBAQAogCS8qIEdldCB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9yIE1vZGVsIE5hbWUgYW5kIERlc2NyaXB0aW9uICovCiAJbHBmY19nZXRfaGJhX21vZGVsX2Rlc2MocGhiYSwgcGhiYS0+TW9kZWxOYW1lLCBwaGJhLT5Nb2RlbERlc2MpOwogCi0JaWYgKChwaGJhLT5jZmdfbGlua19zcGVlZCA+IExJTktfU1BFRURfMTBHKQotCSAgICB8fCAoKHBoYmEtPmNmZ19saW5rX3NwZWVkID09IExJTktfU1BFRURfMUcpCisJaWYgKChwaGJhLT5jZmdfbGlua19zcGVlZCA+IExQRkNfVVNFUl9MSU5LX1NQRUVEXzE2RykKKwkgICAgfHwgKChwaGJhLT5jZmdfbGlua19zcGVlZCA9PSBMUEZDX1VTRVJfTElOS19TUEVFRF8xRykKIAkJJiYgIShwaGJhLT5sbXQgJiBMTVRfMUdiKSkKLQkgICAgfHwgKChwaGJhLT5jZmdfbGlua19zcGVlZCA9PSBMSU5LX1NQRUVEXzJHKQorCSAgICB8fCAoKHBoYmEtPmNmZ19saW5rX3NwZWVkID09IExQRkNfVVNFUl9MSU5LX1NQRUVEXzJHKQogCQkmJiAhKHBoYmEtPmxtdCAmIExNVF8yR2IpKQotCSAgICB8fCAoKHBoYmEtPmNmZ19saW5rX3NwZWVkID09IExJTktfU1BFRURfNEcpCisJICAgIHx8ICgocGhiYS0+Y2ZnX2xpbmtfc3BlZWQgPT0gTFBGQ19VU0VSX0xJTktfU1BFRURfNEcpCiAJCSYmICEocGhiYS0+bG10ICYgTE1UXzRHYikpCi0JICAgIHx8ICgocGhiYS0+Y2ZnX2xpbmtfc3BlZWQgPT0gTElOS19TUEVFRF84RykKKwkgICAgfHwgKChwaGJhLT5jZmdfbGlua19zcGVlZCA9PSBMUEZDX1VTRVJfTElOS19TUEVFRF84RykKIAkJJiYgIShwaGJhLT5sbXQgJiBMTVRfOEdiKSkKLQkgICAgfHwgKChwaGJhLT5jZmdfbGlua19zcGVlZCA9PSBMSU5LX1NQRUVEXzEwRykKLQkJJiYgIShwaGJhLT5sbXQgJiBMTVRfMTBHYikpKSB7CisJICAgIHx8ICgocGhiYS0+Y2ZnX2xpbmtfc3BlZWQgPT0gTFBGQ19VU0VSX0xJTktfU1BFRURfMTBHKQorCQkmJiAhKHBoYmEtPmxtdCAmIExNVF8xMEdiKSkKKwkgICAgfHwgKChwaGJhLT5jZmdfbGlua19zcGVlZCA9PSBMUEZDX1VTRVJfTElOS19TUEVFRF8xNkcpCisJCSYmICEocGhiYS0+bG10ICYgTE1UXzE2R2IpKSkgewogCQkvKiBSZXNldCBsaW5rIHNwZWVkIHRvIGF1dG8gKi8KIAkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fV0FSTklORywgTE9HX0xJTktfRVZFTlQsCiAJCQkiMTMwMiBJbnZhbGlkIHNwZWVkIGZvciB0aGlzIGJvYXJkOiAiCiAJCQkiUmVzZXQgbGluayBzcGVlZCB0byBhdXRvOiB4JXhcbiIsCiAJCQlwaGJhLT5jZmdfbGlua19zcGVlZCk7Ci0JCQlwaGJhLT5jZmdfbGlua19zcGVlZCA9IExJTktfU1BFRURfQVVUTzsKKwkJCXBoYmEtPmNmZ19saW5rX3NwZWVkID0gTFBGQ19VU0VSX0xJTktfU1BFRURfQVVUTzsKIAl9CiAKIAlwaGJhLT5saW5rX3N0YXRlID0gTFBGQ19MSU5LX0RPV047CkBAIC02NDgsMjIgKzY1MCwyMyBAQAogCW1iID0gJnBtYi0+dS5tYjsKIAlwbWItPnZwb3J0ID0gdnBvcnQ7CiAKLQlscGZjX2luaXRfbGluayhwaGJhLCBwbWIsIHBoYmEtPmNmZ190b3BvbG9neSwKLQkJcGhiYS0+Y2ZnX2xpbmtfc3BlZWQpOworCWxwZmNfaW5pdF9saW5rKHBoYmEsIHBtYiwgcGhiYS0+Y2ZnX3RvcG9sb2d5LCBwaGJhLT5jZmdfbGlua19zcGVlZCk7CiAJcG1iLT5tYm94X2NtcGwgPSBscGZjX3NsaV9kZWZfbWJveF9jbXBsOwogCWxwZmNfc2V0X2xvb3BiYWNrX2ZsYWcocGhiYSk7CiAJcmMgPSBscGZjX3NsaV9pc3N1ZV9tYm94KHBoYmEsIHBtYiwgZmxhZyk7Ci0JaWYgKHJjICE9IE1CWF9TVUNDRVNTKSB7CisJaWYgKChyYyAhPSBNQlhfQlVTWSkgJiYgKHJjICE9IE1CWF9TVUNDRVNTKSkgewogCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19JTklULAogCQkJIjA0OTggQWRhcHRlciBmYWlsZWQgdG8gaW5pdCwgbWJ4Q21kIHgleCAiCiAJCQkiSU5JVF9MSU5LLCBtYnhTdGF0dXMgeCV4XG4iLAogCQkJbWItPm1ieENvbW1hbmQsIG1iLT5tYnhTdGF0dXMpOwotCQkvKiBDbGVhciBhbGwgaW50ZXJydXB0IGVuYWJsZSBjb25kaXRpb25zICovCi0JCXdyaXRlbCgwLCBwaGJhLT5IQ3JlZ2FkZHIpOwotCQlyZWFkbChwaGJhLT5IQ3JlZ2FkZHIpOyAvKiBmbHVzaCAqLwotCQkvKiBDbGVhciBhbGwgcGVuZGluZyBpbnRlcnJ1cHRzICovCi0JCXdyaXRlbCgweGZmZmZmZmZmLCBwaGJhLT5IQXJlZ2FkZHIpOwotCQlyZWFkbChwaGJhLT5IQXJlZ2FkZHIpOyAvKiBmbHVzaCAqLworCQlpZiAocGhiYS0+c2xpX3JldiA8PSBMUEZDX1NMSV9SRVYzKSB7CisJCQkvKiBDbGVhciBhbGwgaW50ZXJydXB0IGVuYWJsZSBjb25kaXRpb25zICovCisJCQl3cml0ZWwoMCwgcGhiYS0+SENyZWdhZGRyKTsKKwkJCXJlYWRsKHBoYmEtPkhDcmVnYWRkcik7IC8qIGZsdXNoICovCisJCQkvKiBDbGVhciBhbGwgcGVuZGluZyBpbnRlcnJ1cHRzICovCisJCQl3cml0ZWwoMHhmZmZmZmZmZiwgcGhiYS0+SEFyZWdhZGRyKTsKKwkJCXJlYWRsKHBoYmEtPkhBcmVnYWRkcik7IC8qIGZsdXNoICovCisJCX0KIAkJcGhiYS0+bGlua19zdGF0ZSA9IExQRkNfSEJBX0VSUk9SOwogCQlpZiAocmMgIT0gTUJYX0JVU1kgfHwgZmxhZyA9PSBNQlhfUE9MTCkKIAkJCW1lbXBvb2xfZnJlZShwbWIsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOwpAQCAtOTI3LDYgKzkzMCwzNSBAQAogfQogCiAvKioKKyAqIGxwZmNfcnJxX3RpbWVvdXQgLSBUaGUgUlJRLXRpbWVyIHRpbWVvdXQgaGFuZGxlcgorICogQHB0cjogdW5zaWduZWQgbG9uZyBob2xkcyB0aGUgcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIGlzIHRoZSBSUlEtdGltZXIgdGltZW91dCBoYW5kbGVyIHJlZ2lzdGVyZWQgdG8gdGhlIGxwZmMgZHJpdmVyLiBXaGVuCisgKiB0aGlzIHRpbWVyIGZpcmVzLCBhIFJSUSB0aW1lb3V0IGV2ZW50IHNoYWxsIGJlIHBvc3RlZCB0byB0aGUgbHBmYyBkcml2ZXIKKyAqIHdvcmstcG9ydC1ldmVudHMgYml0bWFwIGFuZCB0aGUgd29ya2VyIHRocmVhZCBpcyBub3RpZmllZC4gVGhpcyB0aW1lb3V0CisgKiBldmVudCB3aWxsIGJlIHVzZWQgYnkgdGhlIHdvcmtlciB0aHJlYWQgdG8gaW52b2tlIHRoZSBhY3R1YWwgdGltZW91dAorICogaGFuZGxlciByb3V0aW5lLCBscGZjX3JycV9oYW5kbGVyLiBBbnkgcGVyaW9kaWNhbCBvcGVyYXRpb25zIHdpbGwKKyAqIGJlIHBlcmZvcm1lZCBpbiB0aGUgdGltZW91dCBoYW5kbGVyIGFuZCB0aGUgUlJRIHRpbWVvdXQgZXZlbnQgYml0IHNoYWxsCisgKiBiZSBjbGVhcmVkIGJ5IHRoZSB3b3JrZXIgdGhyZWFkIGFmdGVyIGl0IGhhcyB0YWtlbiB0aGUgZXZlbnQgYml0bWFwIG91dC4KKyAqKi8KK3N0YXRpYyB2b2lkCitscGZjX3JycV90aW1lb3V0KHVuc2lnbmVkIGxvbmcgcHRyKQoreworCXN0cnVjdCBscGZjX2hiYSAqcGhiYTsKKwl1aW50MzJfdCB0bW9fcG9zdGVkOworCXVuc2lnbmVkIGxvbmcgaWZsYWc7CisKKwlwaGJhID0gKHN0cnVjdCBscGZjX2hiYSAqKXB0cjsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+cHBvcnQtPndvcmtfcG9ydF9sb2NrLCBpZmxhZyk7CisJdG1vX3Bvc3RlZCA9IHBoYmEtPmhiYV9mbGFnICYgSEJBX1JSUV9BQ1RJVkU7CisJaWYgKCF0bW9fcG9zdGVkKQorCQlwaGJhLT5oYmFfZmxhZyB8PSBIQkFfUlJRX0FDVElWRTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5wcG9ydC0+d29ya19wb3J0X2xvY2ssIGlmbGFnKTsKKwlpZiAoIXRtb19wb3N0ZWQpCisJCWxwZmNfd29ya2VyX3dha2VfdXAocGhiYSk7Cit9CisKKy8qKgogICogbHBmY19oYl9tYm94X2NtcGwgLSBUaGUgbHBmYyBoZWFydC1iZWF0IG1haWxib3ggY29tbWFuZCBjYWxsYmFjayBmdW5jdGlvbgogICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCiAgKiBAcG1ib3hxOiBwb2ludGVyIHRvIHRoZSBkcml2ZXIgaW50ZXJuYWwgcXVldWUgZWxlbWVudCBmb3IgbWFpbGJveCBjb21tYW5kLgpAQCAtMTM3NCw2ICsxNDA2LDggQEAKIAlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQgPSBwaGJhLT5wcG9ydDsKIAl1aW50MzJfdCBldmVudF9kYXRhOwogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0OworCXVpbnQzMl90IGlmX3R5cGU7CisJc3RydWN0IGxwZmNfcmVnaXN0ZXIgcG9ydHN0YXRfcmVnOwogCiAJLyogSWYgdGhlIHBjaSBjaGFubmVsIGlzIG9mZmxpbmUsIGlnbm9yZSBwb3NzaWJsZSBlcnJvcnMsIHNpbmNlCiAJICogd2UgY2Fubm90IGNvbW11bmljYXRlIHdpdGggdGhlIHBjaSBjYXJkIGFueXdheS4KQEAgLTEzOTAsMTcgKzE0MjQsNDkgQEAKIAkvKiBGb3Igbm93LCB0aGUgYWN0dWFsIGFjdGlvbiBmb3IgU0xJNCBkZXZpY2UgaGFuZGxpbmcgaXMgbm90CiAJICogc3BlY2lmaWVkIHlldCwganVzdCB0cmVhdGVkIGl0IGFzIGFkYXB0b3IgaGFyZHdhcmUgZmFpbHVyZQogCSAqLwotCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0lOSVQsCi0JCQkiMDE0MyBTTEk0IEFkYXB0ZXIgSGFyZHdhcmUgRXJyb3IgRGF0YTogeCV4IHgleFxuIiwKLQkJCXBoYmEtPndvcmtfc3RhdHVzWzBdLCBwaGJhLT53b3JrX3N0YXR1c1sxXSk7Ci0KIAlldmVudF9kYXRhID0gRkNfUkVHX0RVTVBfRVZFTlQ7CiAJc2hvc3QgPSBscGZjX3Nob3N0X2Zyb21fdnBvcnQodnBvcnQpOwogCWZjX2hvc3RfcG9zdF92ZW5kb3JfZXZlbnQoc2hvc3QsIGZjX2dldF9ldmVudF9udW1iZXIoKSwKIAkJCQkgIHNpemVvZihldmVudF9kYXRhKSwgKGNoYXIgKikgJmV2ZW50X2RhdGEsCiAJCQkJICBTQ1NJX05MX1ZJRF9UWVBFX1BDSSB8IFBDSV9WRU5ET1JfSURfRU1VTEVYKTsKIAotCWxwZmNfc2xpNF9vZmZsaW5lX2VyYXR0KHBoYmEpOworCWlmX3R5cGUgPSBiZl9nZXQobHBmY19zbGlfaW50Zl9pZl90eXBlLCAmcGhiYS0+c2xpNF9oYmEuc2xpX2ludGYpOworCXN3aXRjaCAoaWZfdHlwZSkgeworCWNhc2UgTFBGQ19TTElfSU5URl9JRl9UWVBFXzA6CisJCWxwZmNfc2xpNF9vZmZsaW5lX2VyYXR0KHBoYmEpOworCQlicmVhazsKKwljYXNlIExQRkNfU0xJX0lOVEZfSUZfVFlQRV8yOgorCQlwb3J0c3RhdF9yZWcud29yZDAgPQorCQkJcmVhZGwocGhiYS0+c2xpNF9oYmEudS5pZl90eXBlMi5TVEFUVVNyZWdhZGRyKTsKKworCQlpZiAoYmZfZ2V0KGxwZmNfc2xpcG9ydF9zdGF0dXNfb3RpLCAmcG9ydHN0YXRfcmVnKSkgeworCQkJLyogVE9ETzogUmVnaXN0ZXIgZm9yIE92ZXJ0ZW1wIGFzeW5jIGV2ZW50cy4gKi8KKwkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0lOSVQsCisJCQkJIjI4ODkgUG9ydCBPdmVydGVtcGVyYXR1cmUgZXZlbnQsICIKKwkJCQkidGFraW5nIHBvcnRcbiIpOworCQkJc3Bpbl9sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CisJCQlwaGJhLT5vdmVyX3RlbXBfc3RhdGUgPSBIQkFfT1ZFUl9URU1QOworCQkJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKKwkJCWxwZmNfc2xpNF9vZmZsaW5lX2VyYXR0KHBoYmEpOworCQkJcmV0dXJuOworCQl9CisJCWlmIChiZl9nZXQobHBmY19zbGlwb3J0X3N0YXR1c19ybiwgJnBvcnRzdGF0X3JlZykpIHsKKwkJCS8qCisJCQkgKiBUT0RPOiBBdHRlbXB0IHBvcnQgcmVjb3ZlcnkgdmlhIGEgcG9ydCByZXNldC4KKwkJCSAqIFdoZW4gZnVsbHkgaW1wbGVtZW50ZWQsIHRoZSBkcml2ZXIgc2hvdWxkCisJCQkgKiBhdHRlbXB0IHRvIHJlY292ZXIgdGhlIHBvcnQgaGVyZSBhbmQgcmV0dXJuLgorCQkJICogRm9yIG5vdywgbG9nIGFuIGVycm9yIGFuZCB0YWtlIHRoZSBwb3J0IG9mZmxpbmUuCisJCQkgKi8KKwkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0lOSVQsCisJCQkJCSIyODg3IFBvcnQgRXJyb3I6IEF0dGVtcHRpbmcgIgorCQkJCQkiUG9ydCBSZWNvdmVyeVxuIik7CisJCX0KKwkJbHBmY19zbGk0X29mZmxpbmVfZXJhdHQocGhiYSk7CisJCWJyZWFrOworCWNhc2UgTFBGQ19TTElfSU5URl9JRl9UWVBFXzE6CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQogfQogCiAvKioKQEAgLTE0NTksOCArMTUyNSw4IEBACiAJbHBmY19lbHNfZmx1c2hfYWxsX2NtZChwaGJhKTsKIAogCXBzbGktPnNsaXN0YXQubGlua19ldmVudCsrOwotCWxwZmNfcmVhZF9sYShwaGJhLCBwbWIsIG1wKTsKLQlwbWItPm1ib3hfY21wbCA9IGxwZmNfbWJ4X2NtcGxfcmVhZF9sYTsKKwlscGZjX3JlYWRfdG9wb2xvZ3kocGhiYSwgcG1iLCBtcCk7CisJcG1iLT5tYm94X2NtcGwgPSBscGZjX21ieF9jbXBsX3JlYWRfdG9wb2xvZ3k7CiAJcG1iLT52cG9ydCA9IHZwb3J0OwogCS8qIEJsb2NrIEVMUyBJT0NCcyB1bnRpbCB3ZSBoYXZlIHByb2Nlc3NlZCB0aGlzIG1ib3ggY29tbWFuZCAqLwogCXBoYmEtPnNsaS5yaW5nW0xQRkNfRUxTX1JJTkddLmZsYWcgfD0gTFBGQ19TVE9QX0lPQ0JfRVZFTlQ7CkBAIC0xODUzLDYgKzE5MTksMTQgQEAKIAkJbSA9ICh0eXBlb2YobSkpeyJMUFZlMTIwMDIiLCAiUENJZSBTaGFyZWQgSS9PIiwKIAkJCQkiRmlicmUgQ2hhbm5lbCBBZGFwdGVyIn07CiAJCWJyZWFrOworCWNhc2UgUENJX0RFVklDRV9JRF9MQU5DRVJfRkM6CisJCW9uZUNvbm5lY3QgPSAxOworCQltID0gKHR5cGVvZihtKSl7IlVuZGVmaW5lZCIsICJQQ0llIiwgIkZpYnJlIENoYW5uZWwgQWRhcHRlciJ9OworCQlicmVhazsKKwljYXNlIFBDSV9ERVZJQ0VfSURfTEFOQ0VSX0ZDT0U6CisJCW9uZUNvbm5lY3QgPSAxOworCQltID0gKHR5cGVvZihtKSl7IlVuZGVmaW5lZCIsICJQQ0llIiwgIkZDb0UifTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJbSA9ICh0eXBlb2YobSkpeyJVbmtub3duIiwgIiIsICIifTsKIAkJYnJlYWs7CkBAIC0yOTQzLDYzICszMDE3LDYgQEAKIH0KIAogLyoqCi0gKiBscGZjX3NsaTRfZndfY2ZnX2NoZWNrIC0gUmVhZCB0aGUgZmlybXdhcmUgY29uZmlnIGFuZCB2ZXJpZnkgRkNvRSBzdXBwb3J0Ci0gKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHVzZXMgdGhlIFFVRVJZX0ZXX0NGRyBtYWlsYm94IGNvbW1hbmQgdG8gZGV0ZXJtaW5lIGlmIHRoZQotICogZmlybXdhcmUgbG9hZGVkIHN1cHBvcnRzIEZDb0UuIEEgcmV0dXJuIG9mIHplcm8gaW5kaWNhdGVzIHRoYXQgdGhlIG1haWxib3gKLSAqIHdhcyBzdWNjZXNzZnVsIGFuZCB0aGUgZmlybXdhcmUgc3VwcG9ydHMgRkNvRS4gQW55IG90aGVyIHJldHVybiBpbmRpY2F0ZXMKLSAqIGEgZXJyb3IuIEl0IGlzIGFzc3VtZWQgdGhhdCB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGJlZm9yZSBpbnRlcnJ1cHRzCi0gKiBhcmUgZW5hYmxlZC4KLSAqKi8KLXN0YXRpYyBpbnQKLWxwZmNfc2xpNF9md19jZmdfY2hlY2soc3RydWN0IGxwZmNfaGJhICpwaGJhKQotewotCWludCByYyA9IDA7Ci0JTFBGQ19NQk9YUV90ICptYm94cTsKLQlzdHJ1Y3QgbHBmY19tYnhfcXVlcnlfZndfY2ZnICpxdWVyeV9md19jZmc7Ci0JdWludDMyX3QgbGVuZ3RoOwotCXVpbnQzMl90IHNoZHJfc3RhdHVzLCBzaGRyX2FkZF9zdGF0dXM7Ci0KLQltYm94cSA9IG1lbXBvb2xfYWxsb2MocGhiYS0+bWJveF9tZW1fcG9vbCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFtYm94cSkgewotCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19JTklULAotCQkJCSIyNjIxIEZhaWxlZCB0byBhbGxvY2F0ZSBtYm94IGZvciAiCi0JCQkJInF1ZXJ5IGZpcm13YXJlIGNvbmZpZyBjbWRcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0JcXVlcnlfZndfY2ZnID0gJm1ib3hxLT51Lm1xZS51bi5xdWVyeV9md19jZmc7Ci0JbGVuZ3RoID0gKHNpemVvZihzdHJ1Y3QgbHBmY19tYnhfcXVlcnlfZndfY2ZnKSAtCi0JCSAgc2l6ZW9mKHN0cnVjdCBscGZjX3NsaTRfY2ZnX21oZHIpKTsKLQlscGZjX3NsaTRfY29uZmlnKHBoYmEsIG1ib3hxLCBMUEZDX01CT1hfU1VCU1lTVEVNX0NPTU1PTiwKLQkJCSBMUEZDX01CT1hfT1BDT0RFX1FVRVJZX0ZXX0NGRywKLQkJCSBsZW5ndGgsIExQRkNfU0xJNF9NQlhfRU1CRUQpOwotCXJjID0gbHBmY19zbGlfaXNzdWVfbWJveChwaGJhLCBtYm94cSwgTUJYX1BPTEwpOwotCS8qIFRoZSBJT0NUTCBzdGF0dXMgaXMgZW1iZWRkZWQgaW4gdGhlIG1haWxib3ggc3ViaGVhZGVyLiAqLwotCXNoZHJfc3RhdHVzID0gYmZfZ2V0KGxwZmNfbWJveF9oZHJfc3RhdHVzLAotCQkJICAgICAmcXVlcnlfZndfY2ZnLT5oZWFkZXIuY2ZnX3NoZHIucmVzcG9uc2UpOwotCXNoZHJfYWRkX3N0YXR1cyA9IGJmX2dldChscGZjX21ib3hfaGRyX2FkZF9zdGF0dXMsCi0JCQkJICZxdWVyeV9md19jZmctPmhlYWRlci5jZmdfc2hkci5yZXNwb25zZSk7Ci0JaWYgKHNoZHJfc3RhdHVzIHx8IHNoZHJfYWRkX3N0YXR1cyB8fCByYyAhPSBNQlhfU1VDQ0VTUykgewotCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19TTEksCi0JCQkJIjI2MjIgUXVlcnkgRmlybXdhcmUgQ29uZmlnIGZhaWxlZCAiCi0JCQkJIm1ieCBzdGF0dXMgeCV4LCBzdGF0dXMgeCV4IGFkZF9zdGF0dXMgeCV4XG4iLAotCQkJCXJjLCBzaGRyX3N0YXR1cywgc2hkcl9hZGRfc3RhdHVzKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCWlmICghYmZfZ2V0KGxwZmNfZnVuY3Rpb25fbW9kZV9mY29lX2ksIHF1ZXJ5X2Z3X2NmZykpIHsKLQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfU0xJLAotCQkJCSIyNjIzIEZDb0UgRnVuY3Rpb24gbm90IHN1cHBvcnRlZCBieSBmaXJtd2FyZS4gIgotCQkJCSJGdW5jdGlvbiBtb2RlID0gJTA4eFxuIiwKLQkJCQlxdWVyeV9md19jZmctPmZ1bmN0aW9uX21vZGUpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JaWYgKHJjICE9IE1CWF9USU1FT1VUKQotCQltZW1wb29sX2ZyZWUobWJveHEsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOwotCXJldHVybiAwOwotfQotCi0vKioKICAqIGxwZmNfc2xpNF9wYXJzZV9sYXR0X2ZhdWx0IC0gUGFyc2Ugc2xpNCBsaW5rLWF0dGVudGlvbiBsaW5rIGZhdWx0IGNvZGUKICAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgogICogQGFjcWVfbGluazogcG9pbnRlciB0byB0aGUgYXN5bmMgbGluayBjb21wbGV0aW9uIHF1ZXVlIGVudHJ5LgpAQCAtMzA1MSwyMCArMzA2OCwyMCBAQAogCXN3aXRjaCAoYmZfZ2V0KGxwZmNfYWNxZV9saW5rX3N0YXR1cywgYWNxZV9saW5rKSkgewogCWNhc2UgTFBGQ19BU1lOQ19MSU5LX1NUQVRVU19ET1dOOgogCWNhc2UgTFBGQ19BU1lOQ19MSU5LX1NUQVRVU19MT0dJQ0FMX0RPV046Ci0JCWF0dF90eXBlID0gQVRfTElOS19ET1dOOworCQlhdHRfdHlwZSA9IExQRkNfQVRUX0xJTktfRE9XTjsKIAkJYnJlYWs7CiAJY2FzZSBMUEZDX0FTWU5DX0xJTktfU1RBVFVTX1VQOgogCQkvKiBJZ25vcmUgcGh5c2ljYWwgbGluayB1cCBldmVudHMgLSB3YWl0IGZvciBsb2dpY2FsIGxpbmsgdXAgKi8KLQkJYXR0X3R5cGUgPSBBVF9SRVNFUlZFRDsKKwkJYXR0X3R5cGUgPSBMUEZDX0FUVF9SRVNFUlZFRDsKIAkJYnJlYWs7CiAJY2FzZSBMUEZDX0FTWU5DX0xJTktfU1RBVFVTX0xPR0lDQUxfVVA6Ci0JCWF0dF90eXBlID0gQVRfTElOS19VUDsKKwkJYXR0X3R5cGUgPSBMUEZDX0FUVF9MSU5LX1VQOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19JTklULAogCQkJCSIwMzk5IEludmFsaWQgbGluayBhdHRlbnRpb24gdHlwZTogeCV4XG4iLAogCQkJCWJmX2dldChscGZjX2FjcWVfbGlua19zdGF0dXMsIGFjcWVfbGluaykpOwotCQlhdHRfdHlwZSA9IEFUX1JFU0VSVkVEOworCQlhdHRfdHlwZSA9IExQRkNfQVRUX1JFU0VSVkVEOwogCQlicmVhazsKIAl9CiAJcmV0dXJuIGF0dF90eXBlOwpAQCAtMzA4OCwzNiArMzEwNSwzMiBAQAogCiAJc3dpdGNoIChiZl9nZXQobHBmY19hY3FlX2xpbmtfc3BlZWQsIGFjcWVfbGluaykpIHsKIAljYXNlIExQRkNfQVNZTkNfTElOS19TUEVFRF9aRVJPOgotCQlsaW5rX3NwZWVkID0gTEFfVU5LTldfTElOSzsKLQkJYnJlYWs7CiAJY2FzZSBMUEZDX0FTWU5DX0xJTktfU1BFRURfMTBNQlBTOgotCQlsaW5rX3NwZWVkID0gTEFfVU5LTldfTElOSzsKLQkJYnJlYWs7CiAJY2FzZSBMUEZDX0FTWU5DX0xJTktfU1BFRURfMTAwTUJQUzoKLQkJbGlua19zcGVlZCA9IExBX1VOS05XX0xJTks7CisJCWxpbmtfc3BlZWQgPSBMUEZDX0xJTktfU1BFRURfVU5LTk9XTjsKIAkJYnJlYWs7CiAJY2FzZSBMUEZDX0FTWU5DX0xJTktfU1BFRURfMUdCUFM6Ci0JCWxpbmtfc3BlZWQgPSBMQV8xR0haX0xJTks7CisJCWxpbmtfc3BlZWQgPSBMUEZDX0xJTktfU1BFRURfMUdIWjsKIAkJYnJlYWs7CiAJY2FzZSBMUEZDX0FTWU5DX0xJTktfU1BFRURfMTBHQlBTOgotCQlsaW5rX3NwZWVkID0gTEFfMTBHSFpfTElOSzsKKwkJbGlua19zcGVlZCA9IExQRkNfTElOS19TUEVFRF8xMEdIWjsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfSU5JVCwKIAkJCQkiMDQ4MyBJbnZhbGlkIGxpbmstYXR0ZW50aW9uIGxpbmsgc3BlZWQ6IHgleFxuIiwKIAkJCQliZl9nZXQobHBmY19hY3FlX2xpbmtfc3BlZWQsIGFjcWVfbGluaykpOwotCQlsaW5rX3NwZWVkID0gTEFfVU5LTldfTElOSzsKKwkJbGlua19zcGVlZCA9IExQRkNfTElOS19TUEVFRF9VTktOT1dOOwogCQlicmVhazsKIAl9CiAJcmV0dXJuIGxpbmtfc3BlZWQ7CiB9CiAKIC8qKgotICogbHBmY19zbGk0X2FzeW5jX2xpbmtfZXZ0IC0gUHJvY2VzcyB0aGUgYXN5bmNocm9ub3VzIGxpbmsgZXZlbnQKKyAqIGxwZmNfc2xpNF9hc3luY19saW5rX2V2dCAtIFByb2Nlc3MgdGhlIGFzeW5jaHJvbm91cyBGQ29FIGxpbmsgZXZlbnQKICAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgogICogQGFjcWVfbGluazogcG9pbnRlciB0byB0aGUgYXN5bmMgbGluayBjb21wbGV0aW9uIHF1ZXVlIGVudHJ5LgogICoKLSAqIFRoaXMgcm91dGluZSBpcyB0byBoYW5kbGUgdGhlIFNMSTQgYXN5bmNocm9ub3VzIGxpbmsgZXZlbnQuCisgKiBUaGlzIHJvdXRpbmUgaXMgdG8gaGFuZGxlIHRoZSBTTEk0IGFzeW5jaHJvbm91cyBGQ29FIGxpbmsgZXZlbnQuCiAgKiovCiBzdGF0aWMgdm9pZAogbHBmY19zbGk0X2FzeW5jX2xpbmtfZXZ0KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwKQEAgLTMxMjYsMTEgKzMxMzksMTIgQEAKIAlzdHJ1Y3QgbHBmY19kbWFidWYgKm1wOwogCUxQRkNfTUJPWFFfdCAqcG1iOwogCU1BSUxCT1hfdCAqbWI7Ci0JUkVBRF9MQV9WQVIgKmxhOworCXN0cnVjdCBscGZjX21ieF9yZWFkX3RvcCAqbGE7CiAJdWludDhfdCBhdHRfdHlwZTsKKwlpbnQgcmM7CiAKIAlhdHRfdHlwZSA9IGxwZmNfc2xpNF9wYXJzZV9sYXR0X3R5cGUocGhiYSwgYWNxZV9saW5rKTsKLQlpZiAoYXR0X3R5cGUgIT0gQVRfTElOS19ET1dOICYmIGF0dF90eXBlICE9IEFUX0xJTktfVVApCisJaWYgKGF0dF90eXBlICE9IExQRkNfQVRUX0xJTktfRE9XTiAmJiBhdHRfdHlwZSAhPSBMUEZDX0FUVF9MSU5LX1VQKQogCQlyZXR1cm47CiAJcGhiYS0+ZmNvZV9ldmVudHRhZyA9IGFjcWVfbGluay0+ZXZlbnRfdGFnOwogCXBtYiA9IChMUEZDX01CT1hRX3QgKiltZW1wb29sX2FsbG9jKHBoYmEtPm1ib3hfbWVtX3Bvb2wsIEdGUF9LRVJORUwpOwpAQCAtMzE2MSwyOCArMzE3NSwxMSBAQAogCS8qIFVwZGF0ZSBsaW5rIGV2ZW50IHN0YXRpc3RpY3MgKi8KIAlwaGJhLT5zbGkuc2xpc3RhdC5saW5rX2V2ZW50Kys7CiAKLQkvKiBDcmVhdGUgcHNldWRvIGxwZmNfaGFuZGxlX2xhdHQgbWFpbGJveCBjb21tYW5kIGZyb20gbGluayBBQ1FFICovCi0JbHBmY19yZWFkX2xhKHBoYmEsIHBtYiwgbXApOworCS8qIENyZWF0ZSBscGZjX2hhbmRsZV9sYXR0IG1haWxib3ggY29tbWFuZCBmcm9tIGxpbmsgQUNRRSAqLworCWxwZmNfcmVhZF90b3BvbG9neShwaGJhLCBwbWIsIG1wKTsKKwlwbWItPm1ib3hfY21wbCA9IGxwZmNfbWJ4X2NtcGxfcmVhZF90b3BvbG9neTsKIAlwbWItPnZwb3J0ID0gcGhiYS0+cHBvcnQ7CiAKLQkvKiBQYXJzZSBhbmQgdHJhbnNsYXRlIHN0YXR1cyBmaWVsZCAqLwotCW1iID0gJnBtYi0+dS5tYjsKLQltYi0+bWJ4U3RhdHVzID0gbHBmY19zbGk0X3BhcnNlX2xhdHRfZmF1bHQocGhiYSwgYWNxZV9saW5rKTsKLQotCS8qIFBhcnNlIGFuZCB0cmFuc2xhdGUgbGluayBhdHRlbnRpb24gZmllbGRzICovCi0JbGEgPSAoUkVBRF9MQV9WQVIgKikgJnBtYi0+dS5tYi51bi52YXJSZWFkTEE7Ci0JbGEtPmV2ZW50VGFnID0gYWNxZV9saW5rLT5ldmVudF90YWc7Ci0JbGEtPmF0dFR5cGUgPSBhdHRfdHlwZTsKLQlsYS0+VWxua1NwZWVkID0gbHBmY19zbGk0X3BhcnNlX2xhdHRfbGlua19zcGVlZChwaGJhLCBhY3FlX2xpbmspOwotCi0JLyogRmFrZSB0aGUgdGhlIGZvbGxvd2luZyBpcnJlbHZhbnQgZmllbGRzICovCi0JbGEtPnRvcG9sb2d5ID0gVE9QT0xPR1lfUFRfUFQ7Ci0JbGEtPmdyYW50ZWRfQUxfUEEgPSAwOwotCWxhLT5pbCA9IDA7Ci0JbGEtPnBiID0gMDsKLQlsYS0+ZmEgPSAwOwotCWxhLT5tbSA9IDA7Ci0KIAkvKiBLZWVwIHRoZSBsaW5rIHN0YXR1cyBmb3IgZXh0cmEgU0xJNCBzdGF0ZSBtYWNoaW5lIHJlZmVyZW5jZSAqLwogCXBoYmEtPnNsaTRfaGJhLmxpbmtfc3RhdGUuc3BlZWQgPQogCQkJCWJmX2dldChscGZjX2FjcWVfbGlua19zcGVlZCwgYWNxZV9saW5rKTsKQEAgLTMxOTAsMTUgKzMxODcsNjEgQEAKIAkJCQliZl9nZXQobHBmY19hY3FlX2xpbmtfZHVwbGV4LCBhY3FlX2xpbmspOwogCXBoYmEtPnNsaTRfaGJhLmxpbmtfc3RhdGUuc3RhdHVzID0KIAkJCQliZl9nZXQobHBmY19hY3FlX2xpbmtfc3RhdHVzLCBhY3FlX2xpbmspOwotCXBoYmEtPnNsaTRfaGJhLmxpbmtfc3RhdGUucGh5c2ljYWwgPQotCQkJCWJmX2dldChscGZjX2FjcWVfbGlua19waHlzaWNhbCwgYWNxZV9saW5rKTsKKwlwaGJhLT5zbGk0X2hiYS5saW5rX3N0YXRlLnR5cGUgPQorCQkJCWJmX2dldChscGZjX2FjcWVfbGlua190eXBlLCBhY3FlX2xpbmspOworCXBoYmEtPnNsaTRfaGJhLmxpbmtfc3RhdGUubnVtYmVyID0KKwkJCQliZl9nZXQobHBmY19hY3FlX2xpbmtfbnVtYmVyLCBhY3FlX2xpbmspOwogCXBoYmEtPnNsaTRfaGJhLmxpbmtfc3RhdGUuZmF1bHQgPQogCQkJCWJmX2dldChscGZjX2FjcWVfbGlua19mYXVsdCwgYWNxZV9saW5rKTsKIAlwaGJhLT5zbGk0X2hiYS5saW5rX3N0YXRlLmxvZ2ljYWxfc3BlZWQgPQotCQkJCWJmX2dldChscGZjX2FjcWVfcW9zX2xpbmtfc3BlZWQsIGFjcWVfbGluayk7CisJCQliZl9nZXQobHBmY19hY3FlX2xvZ2ljYWxfbGlua19zcGVlZCwgYWNxZV9saW5rKTsKKwlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9JTkZPLCBMT0dfU0xJLAorCQkJIjI5MDAgQXN5bmMgRkNvRSBMaW5rIGV2ZW50IC0gU3BlZWQ6JWRHQml0IGR1cGxleDp4JXggIgorCQkJIkxBIFR5cGU6eCV4IFBvcnQgVHlwZTolZCBQb3J0IE51bWJlcjolZCBMb2dpY2FsICIKKwkJCSJzcGVlZDolZE1icHMgRmF1bHQ6JWRcbiIsCisJCQlwaGJhLT5zbGk0X2hiYS5saW5rX3N0YXRlLnNwZWVkLAorCQkJcGhiYS0+c2xpNF9oYmEubGlua19zdGF0ZS50b3BvbG9neSwKKwkJCXBoYmEtPnNsaTRfaGJhLmxpbmtfc3RhdGUuc3RhdHVzLAorCQkJcGhiYS0+c2xpNF9oYmEubGlua19zdGF0ZS50eXBlLAorCQkJcGhiYS0+c2xpNF9oYmEubGlua19zdGF0ZS5udW1iZXIsCisJCQlwaGJhLT5zbGk0X2hiYS5saW5rX3N0YXRlLmxvZ2ljYWxfc3BlZWQgKiAxMCwKKwkJCXBoYmEtPnNsaTRfaGJhLmxpbmtfc3RhdGUuZmF1bHQpOworCS8qCisJICogRm9yIEZDIE1vZGU6IGlzc3VlIHRoZSBSRUFEX1RPUE9MT0dZIG1haWxib3ggY29tbWFuZCB0byBmZXRjaAorCSAqIHRvcG9sb2d5IGluZm8uIE5vdGU6IE9wdGlvbmFsIGZvciBub24gRkMtQUwgcG9ydHMuCisJICovCisJaWYgKCEocGhiYS0+aGJhX2ZsYWcgJiBIQkFfRkNPRV9NT0RFKSkgeworCQlyYyA9IGxwZmNfc2xpX2lzc3VlX21ib3gocGhiYSwgcG1iLCBNQlhfTk9XQUlUKTsKKwkJaWYgKHJjID09IE1CWF9OT1RfRklOSVNIRUQpCisJCQlnb3RvIG91dF9mcmVlX2RtYWJ1ZjsKKwkJcmV0dXJuOworCX0KKwkvKgorCSAqIEZvciBGQ29FIE1vZGU6IGZpbGwgaW4gYWxsIHRoZSB0b3BvbG9neSBpbmZvcm1hdGlvbiB3ZSBuZWVkIGFuZCBjYWxsCisJICogdGhlIFJFQURfVE9QT0xPR1kgY29tcGxldGlvbiByb3V0aW5lIHRvIGNvbnRpbnVlIHdpdGhvdXQgYWN0dWFsbHkKKwkgKiBzZW5kaW5nIHRoZSBSRUFEX1RPUE9MT0dZIG1haWxib3ggY29tbWFuZCB0byB0aGUgcG9ydC4KKwkgKi8KKwkvKiBQYXJzZSBhbmQgdHJhbnNsYXRlIHN0YXR1cyBmaWVsZCAqLworCW1iID0gJnBtYi0+dS5tYjsKKwltYi0+bWJ4U3RhdHVzID0gbHBmY19zbGk0X3BhcnNlX2xhdHRfZmF1bHQocGhiYSwgYWNxZV9saW5rKTsKKworCS8qIFBhcnNlIGFuZCB0cmFuc2xhdGUgbGluayBhdHRlbnRpb24gZmllbGRzICovCisJbGEgPSAoc3RydWN0IGxwZmNfbWJ4X3JlYWRfdG9wICopICZwbWItPnUubWIudW4udmFyUmVhZFRvcDsKKwlsYS0+ZXZlbnRUYWcgPSBhY3FlX2xpbmstPmV2ZW50X3RhZzsKKwliZl9zZXQobHBmY19tYnhfcmVhZF90b3BfYXR0X3R5cGUsIGxhLCBhdHRfdHlwZSk7CisJYmZfc2V0KGxwZmNfbWJ4X3JlYWRfdG9wX2xpbmtfc3BkLCBsYSwKKwkgICAgICAgbHBmY19zbGk0X3BhcnNlX2xhdHRfbGlua19zcGVlZChwaGJhLCBhY3FlX2xpbmspKTsKKworCS8qIEZha2UgdGhlIHRoZSBmb2xsb3dpbmcgaXJyZWx2YW50IGZpZWxkcyAqLworCWJmX3NldChscGZjX21ieF9yZWFkX3RvcF90b3BvbG9neSwgbGEsIExQRkNfVE9QT0xPR1lfUFRfUFQpOworCWJmX3NldChscGZjX21ieF9yZWFkX3RvcF9hbHBhX2dyYW50ZWQsIGxhLCAwKTsKKwliZl9zZXQobHBmY19tYnhfcmVhZF90b3BfaWwsIGxhLCAwKTsKKwliZl9zZXQobHBmY19tYnhfcmVhZF90b3BfcGIsIGxhLCAwKTsKKwliZl9zZXQobHBmY19tYnhfcmVhZF90b3BfZmEsIGxhLCAwKTsKKwliZl9zZXQobHBmY19tYnhfcmVhZF90b3BfbW0sIGxhLCAwKTsKIAogCS8qIEludm9rZSB0aGUgbHBmY19oYW5kbGVfbGF0dCBtYWlsYm94IGNvbW1hbmQgY2FsbGJhY2sgZnVuY3Rpb24gKi8KLQlscGZjX21ieF9jbXBsX3JlYWRfbGEocGhiYSwgcG1iKTsKKwlscGZjX21ieF9jbXBsX3JlYWRfdG9wb2xvZ3kocGhiYSwgcG1iKTsKIAogCXJldHVybjsKIApAQCAtMzIwOSw2ICszMjUyLDExOCBAQAogfQogCiAvKioKKyAqIGxwZmNfc2xpNF9hc3luY19mY19ldnQgLSBQcm9jZXNzIHRoZSBhc3luY2hyb25vdXMgRkMgbGluayBldmVudAorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAYWNxZV9mYzogcG9pbnRlciB0byB0aGUgYXN5bmMgZmMgY29tcGxldGlvbiBxdWV1ZSBlbnRyeS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgdG8gaGFuZGxlIHRoZSBTTEk0IGFzeW5jaHJvbm91cyBGQyBldmVudC4gSXQgd2lsbCBzaW1wbHkgbG9nCisgKiB0aGF0IHRoZSBldmVudCB3YXMgcmVjZWl2ZWQgYW5kIHRoZW4gaXNzdWUgYSByZWFkX3RvcG9sb2d5IG1haWxib3ggY29tbWFuZCBzbworICogdGhhdCB0aGUgcmVzdCBvZiB0aGUgZHJpdmVyIHdpbGwgdHJlYXQgaXQgdGhlIHNhbWUgYXMgU0xJMy4KKyAqKi8KK3N0YXRpYyB2b2lkCitscGZjX3NsaTRfYXN5bmNfZmNfZXZ0KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfYWNxZV9mY19sYSAqYWNxZV9mYykKK3sKKwlzdHJ1Y3QgbHBmY19kbWFidWYgKm1wOworCUxQRkNfTUJPWFFfdCAqcG1iOworCWludCByYzsKKworCWlmIChiZl9nZXQobHBmY190cmFpbGVyX3R5cGUsIGFjcWVfZmMpICE9CisJICAgIExQRkNfRkNfTEFfRVZFTlRfVFlQRV9GQ19MSU5LKSB7CisJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX1NMSSwKKwkJCQkiMjg5NSBOb24gRkMgbGluayBFdmVudCBkZXRlY3RlZC4oJWQpXG4iLAorCQkJCWJmX2dldChscGZjX3RyYWlsZXJfdHlwZSwgYWNxZV9mYykpOworCQlyZXR1cm47CisJfQorCS8qIEtlZXAgdGhlIGxpbmsgc3RhdHVzIGZvciBleHRyYSBTTEk0IHN0YXRlIG1hY2hpbmUgcmVmZXJlbmNlICovCisJcGhiYS0+c2xpNF9oYmEubGlua19zdGF0ZS5zcGVlZCA9CisJCQkJYmZfZ2V0KGxwZmNfYWNxZV9mY19sYV9zcGVlZCwgYWNxZV9mYyk7CisJcGhiYS0+c2xpNF9oYmEubGlua19zdGF0ZS5kdXBsZXggPSBMUEZDX0FTWU5DX0xJTktfRFVQTEVYX0ZVTEw7CisJcGhiYS0+c2xpNF9oYmEubGlua19zdGF0ZS50b3BvbG9neSA9CisJCQkJYmZfZ2V0KGxwZmNfYWNxZV9mY19sYV90b3BvbG9neSwgYWNxZV9mYyk7CisJcGhiYS0+c2xpNF9oYmEubGlua19zdGF0ZS5zdGF0dXMgPQorCQkJCWJmX2dldChscGZjX2FjcWVfZmNfbGFfYXR0X3R5cGUsIGFjcWVfZmMpOworCXBoYmEtPnNsaTRfaGJhLmxpbmtfc3RhdGUudHlwZSA9CisJCQkJYmZfZ2V0KGxwZmNfYWNxZV9mY19sYV9wb3J0X3R5cGUsIGFjcWVfZmMpOworCXBoYmEtPnNsaTRfaGJhLmxpbmtfc3RhdGUubnVtYmVyID0KKwkJCQliZl9nZXQobHBmY19hY3FlX2ZjX2xhX3BvcnRfbnVtYmVyLCBhY3FlX2ZjKTsKKwlwaGJhLT5zbGk0X2hiYS5saW5rX3N0YXRlLmZhdWx0ID0KKwkJCQliZl9nZXQobHBmY19hY3FlX2xpbmtfZmF1bHQsIGFjcWVfZmMpOworCXBoYmEtPnNsaTRfaGJhLmxpbmtfc3RhdGUubG9naWNhbF9zcGVlZCA9CisJCQkJYmZfZ2V0KGxwZmNfYWNxZV9mY19sYV9sbGlua19zcGQsIGFjcWVfZmMpOworCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0lORk8sIExPR19TTEksCisJCQkiMjg5NiBBc3luYyBGQyBldmVudCAtIFNwZWVkOiVkR0JhdWQgVG9wb2xvZ3k6eCV4ICIKKwkJCSJMQSBUeXBlOngleCBQb3J0IFR5cGU6JWQgUG9ydCBOdW1iZXI6JWQgTG9naWNhbCBzcGVlZDoiCisJCQkiJWRNYnBzIEZhdWx0OiVkXG4iLAorCQkJcGhiYS0+c2xpNF9oYmEubGlua19zdGF0ZS5zcGVlZCwKKwkJCXBoYmEtPnNsaTRfaGJhLmxpbmtfc3RhdGUudG9wb2xvZ3ksCisJCQlwaGJhLT5zbGk0X2hiYS5saW5rX3N0YXRlLnN0YXR1cywKKwkJCXBoYmEtPnNsaTRfaGJhLmxpbmtfc3RhdGUudHlwZSwKKwkJCXBoYmEtPnNsaTRfaGJhLmxpbmtfc3RhdGUubnVtYmVyLAorCQkJcGhiYS0+c2xpNF9oYmEubGlua19zdGF0ZS5sb2dpY2FsX3NwZWVkICogMTAsCisJCQlwaGJhLT5zbGk0X2hiYS5saW5rX3N0YXRlLmZhdWx0KTsKKwlwbWIgPSAoTFBGQ19NQk9YUV90ICopbWVtcG9vbF9hbGxvYyhwaGJhLT5tYm94X21lbV9wb29sLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBtYikgeworCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19TTEksCisJCQkJIjI4OTcgVGhlIG1ib3hxIGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKKwkJcmV0dXJuOworCX0KKwltcCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBscGZjX2RtYWJ1ZiksIEdGUF9LRVJORUwpOworCWlmICghbXApIHsKKwkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfU0xJLAorCQkJCSIyODk4IFRoZSBscGZjX2RtYWJ1ZiBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CisJCWdvdG8gb3V0X2ZyZWVfcG1iOworCX0KKwltcC0+dmlydCA9IGxwZmNfbWJ1Zl9hbGxvYyhwaGJhLCAwLCAmbXAtPnBoeXMpOworCWlmICghbXAtPnZpcnQpIHsKKwkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfU0xJLAorCQkJCSIyODk5IFRoZSBtYnVmIGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKKwkJZ290byBvdXRfZnJlZV9kbWFidWY7CisJfQorCisJLyogQ2xlYW51cCBhbnkgb3V0c3RhbmRpbmcgRUxTIGNvbW1hbmRzICovCisJbHBmY19lbHNfZmx1c2hfYWxsX2NtZChwaGJhKTsKKworCS8qIEJsb2NrIEVMUyBJT0NCcyB1bnRpbCB3ZSBoYXZlIGRvbmUgcHJvY2VzcyBsaW5rIGV2ZW50ICovCisJcGhiYS0+c2xpLnJpbmdbTFBGQ19FTFNfUklOR10uZmxhZyB8PSBMUEZDX1NUT1BfSU9DQl9FVkVOVDsKKworCS8qIFVwZGF0ZSBsaW5rIGV2ZW50IHN0YXRpc3RpY3MgKi8KKwlwaGJhLT5zbGkuc2xpc3RhdC5saW5rX2V2ZW50Kys7CisKKwkvKiBDcmVhdGUgbHBmY19oYW5kbGVfbGF0dCBtYWlsYm94IGNvbW1hbmQgZnJvbSBsaW5rIEFDUUUgKi8KKwlscGZjX3JlYWRfdG9wb2xvZ3kocGhiYSwgcG1iLCBtcCk7CisJcG1iLT5tYm94X2NtcGwgPSBscGZjX21ieF9jbXBsX3JlYWRfdG9wb2xvZ3k7CisJcG1iLT52cG9ydCA9IHBoYmEtPnBwb3J0OworCisJcmMgPSBscGZjX3NsaV9pc3N1ZV9tYm94KHBoYmEsIHBtYiwgTUJYX05PV0FJVCk7CisJaWYgKHJjID09IE1CWF9OT1RfRklOSVNIRUQpCisJCWdvdG8gb3V0X2ZyZWVfZG1hYnVmOworCXJldHVybjsKKworb3V0X2ZyZWVfZG1hYnVmOgorCWtmcmVlKG1wKTsKK291dF9mcmVlX3BtYjoKKwltZW1wb29sX2ZyZWUocG1iLCBwaGJhLT5tYm94X21lbV9wb29sKTsKK30KKworLyoqCisgKiBscGZjX3NsaTRfYXN5bmNfc2xpX2V2dCAtIFByb2Nlc3MgdGhlIGFzeW5jaHJvbm91cyBTTEkgbGluayBldmVudAorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAYWNxZV9mYzogcG9pbnRlciB0byB0aGUgYXN5bmMgU0xJIGNvbXBsZXRpb24gcXVldWUgZW50cnkuCisgKgorICogVGhpcyByb3V0aW5lIGlzIHRvIGhhbmRsZSB0aGUgU0xJNCBhc3luY2hyb25vdXMgU0xJIGV2ZW50cy4KKyAqKi8KK3N0YXRpYyB2b2lkCitscGZjX3NsaTRfYXN5bmNfc2xpX2V2dChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBscGZjX2FjcWVfc2xpICphY3FlX3NsaSkKK3sKKwlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9JTkZPLCBMT0dfU0xJLAorCQkJIjI5MDEgQXN5bmMgU0xJIGV2ZW50IC0gRXZlbnQgRGF0YTE6eCUwOHggRXZlbnQgRGF0YTI6IgorCQkJInglMDh4IFNMSSBFdmVudCBUeXBlOiVkIiwKKwkJCWFjcWVfc2xpLT5ldmVudF9kYXRhMSwgYWNxZV9zbGktPmV2ZW50X2RhdGEyLAorCQkJYmZfZ2V0KGxwZmNfdHJhaWxlcl90eXBlLCBhY3FlX3NsaSkpOworCXJldHVybjsKK30KKworLyoqCiAgKiBscGZjX3NsaTRfcGVyZm9ybV92cG9ydF9jdmwgLSBQZXJmb3JtIGNsZWFyIHZpcnR1YWwgbGluayBvbiBhIHZwb3J0CiAgKiBAdnBvcnQ6IHBvaW50ZXIgdG8gdnBvcnQgZGF0YSBzdHJ1Y3R1cmUuCiAgKgpAQCAtMzI0NywxMCArMzQwMiwxMiBAQAogCQlpZiAoIW5kbHApCiAJCQlyZXR1cm4gMDsKIAl9Ci0JaWYgKHBoYmEtPnBwb3J0LT5wb3J0X3N0YXRlIDwgTFBGQ19GTE9HSSkKKwlpZiAoKHBoYmEtPnBwb3J0LT5wb3J0X3N0YXRlIDwgTFBGQ19GTE9HSSkgJiYKKwkJKHBoYmEtPnBwb3J0LT5wb3J0X3N0YXRlICE9IExQRkNfVlBPUlRfRkFJTEVEKSkKIAkJcmV0dXJuIE5VTEw7CiAJLyogSWYgdmlydHVhbCBsaW5rIGlzIG5vdCB5ZXQgaW5zdGFudGlhdGVkIGlnbm9yZSBDVkwgKi8KLQlpZiAoKHZwb3J0ICE9IHBoYmEtPnBwb3J0KSAmJiAodnBvcnQtPnBvcnRfc3RhdGUgPCBMUEZDX0ZESVNDKSkKKwlpZiAoKHZwb3J0ICE9IHBoYmEtPnBwb3J0KSAmJiAodnBvcnQtPnBvcnRfc3RhdGUgPCBMUEZDX0ZESVNDKQorCQkmJiAodnBvcnQtPnBvcnRfc3RhdGUgIT0gTFBGQ19WUE9SVF9GQUlMRUQpKQogCQlyZXR1cm4gTlVMTDsKIAlzaG9zdCA9IGxwZmNfc2hvc3RfZnJvbV92cG9ydCh2cG9ydCk7CiAJaWYgKCFzaG9zdCkKQEAgLTMyODUsMTcgKzM0NDIsMTcgQEAKIH0KIAogLyoqCi0gKiBscGZjX3NsaTRfYXN5bmNfZmNvZV9ldnQgLSBQcm9jZXNzIHRoZSBhc3luY2hyb25vdXMgZmNvZSBldmVudAorICogbHBmY19zbGk0X2FzeW5jX2ZpcF9ldnQgLSBQcm9jZXNzIHRoZSBhc3luY2hyb25vdXMgRkNvRSBGSVAgZXZlbnQKICAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgogICogQGFjcWVfbGluazogcG9pbnRlciB0byB0aGUgYXN5bmMgZmNvZSBjb21wbGV0aW9uIHF1ZXVlIGVudHJ5LgogICoKICAqIFRoaXMgcm91dGluZSBpcyB0byBoYW5kbGUgdGhlIFNMSTQgYXN5bmNocm9ub3VzIGZjb2UgZXZlbnQuCiAgKiovCiBzdGF0aWMgdm9pZAotbHBmY19zbGk0X2FzeW5jX2Zjb2VfZXZ0KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwKLQkJCSBzdHJ1Y3QgbHBmY19hY3FlX2Zjb2UgKmFjcWVfZmNvZSkKK2xwZmNfc2xpNF9hc3luY19maXBfZXZ0KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwKKwkJCXN0cnVjdCBscGZjX2FjcWVfZmlwICphY3FlX2ZpcCkKIHsKLQl1aW50OF90IGV2ZW50X3R5cGUgPSBiZl9nZXQobHBmY19hY3FlX2Zjb2VfZXZlbnRfdHlwZSwgYWNxZV9mY29lKTsKKwl1aW50OF90IGV2ZW50X3R5cGUgPSBiZl9nZXQobHBmY190cmFpbGVyX3R5cGUsIGFjcWVfZmlwKTsKIAlpbnQgcmM7CiAJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0OwogCXN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwOwpAQCAtMzMwNCwyNSArMzQ2MSwyNSBAQAogCXN0cnVjdCBscGZjX3Zwb3J0ICoqdnBvcnRzOwogCWludCBpOwogCi0JcGhiYS0+ZmNfZXZlbnRUYWcgPSBhY3FlX2Zjb2UtPmV2ZW50X3RhZzsKLQlwaGJhLT5mY29lX2V2ZW50dGFnID0gYWNxZV9mY29lLT5ldmVudF90YWc7CisJcGhiYS0+ZmNfZXZlbnRUYWcgPSBhY3FlX2ZpcC0+ZXZlbnRfdGFnOworCXBoYmEtPmZjb2VfZXZlbnR0YWcgPSBhY3FlX2ZpcC0+ZXZlbnRfdGFnOwogCXN3aXRjaCAoZXZlbnRfdHlwZSkgewotCWNhc2UgTFBGQ19GQ09FX0VWRU5UX1RZUEVfTkVXX0ZDRjoKLQljYXNlIExQRkNfRkNPRV9FVkVOVF9UWVBFX0ZDRl9QQVJBTV9NT0Q6Ci0JCWlmIChldmVudF90eXBlID09IExQRkNfRkNPRV9FVkVOVF9UWVBFX05FV19GQ0YpCisJY2FzZSBMUEZDX0ZJUF9FVkVOVF9UWVBFX05FV19GQ0Y6CisJY2FzZSBMUEZDX0ZJUF9FVkVOVF9UWVBFX0ZDRl9QQVJBTV9NT0Q6CisJCWlmIChldmVudF90eXBlID09IExQRkNfRklQX0VWRU5UX1RZUEVfTkVXX0ZDRikKIAkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0ZJUCB8CiAJCQkJCUxPR19ESVNDT1ZFUlksCiAJCQkJCSIyNTQ2IE5ldyBGQ0YgZXZlbnQsIGV2dF90YWc6eCV4LCAiCiAJCQkJCSJpbmRleDp4JXhcbiIsCi0JCQkJCWFjcWVfZmNvZS0+ZXZlbnRfdGFnLAotCQkJCQlhY3FlX2Zjb2UtPmluZGV4KTsKKwkJCQkJYWNxZV9maXAtPmV2ZW50X3RhZywKKwkJCQkJYWNxZV9maXAtPmluZGV4KTsKIAkJZWxzZQogCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fV0FSTklORywgTE9HX0ZJUCB8CiAJCQkJCUxPR19ESVNDT1ZFUlksCiAJCQkJCSIyNzg4IEZDRiBwYXJhbSBtb2RpZmllZCBldmVudCwgIgogCQkJCQkiZXZ0X3RhZzp4JXgsIGluZGV4OngleFxuIiwKLQkJCQkJYWNxZV9mY29lLT5ldmVudF90YWcsCi0JCQkJCWFjcWVfZmNvZS0+aW5kZXgpOworCQkJCQlhY3FlX2ZpcC0+ZXZlbnRfdGFnLAorCQkJCQlhY3FlX2ZpcC0+aW5kZXgpOwogCQlpZiAocGhiYS0+ZmNmLmZjZl9mbGFnICYgRkNGX0RJU0NPVkVSWSkgewogCQkJLyoKIAkJCSAqIER1cmluZyBwZXJpb2Qgb2YgRkNGIGRpc2NvdmVyeSwgcmVhZCB0aGUgRkNGCkBAIC0zMzMzLDggKzM0OTAsOCBAQAogCQkJCQlMT0dfRElTQ09WRVJZLAogCQkJCQkiMjc3OSBSZWFkIEZDRiAoeCV4KSBmb3IgdXBkYXRpbmcgIgogCQkJCQkicm91bmRyb2JpbiBGQ0YgZmFpbG92ZXIgYm1hc2tcbiIsCi0JCQkJCWFjcWVfZmNvZS0+aW5kZXgpOwotCQkJcmMgPSBscGZjX3NsaTRfcmVhZF9mY2ZfcmVjKHBoYmEsIGFjcWVfZmNvZS0+aW5kZXgpOworCQkJCQlhY3FlX2ZpcC0+aW5kZXgpOworCQkJcmMgPSBscGZjX3NsaTRfcmVhZF9mY2ZfcmVjKHBoYmEsIGFjcWVfZmlwLT5pbmRleCk7CiAJCX0KIAogCQkvKiBJZiB0aGUgRkNGIGRpc2NvdmVyeSBpcyBpbiBwcm9ncmVzcywgZG8gbm90aGluZy4gKi8KQEAgLTMzNjAsNyArMzUxNyw3IEBACiAJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0lORk8sIExPR19GSVAgfCBMT0dfRElTQ09WRVJZLAogCQkJCSIyNzcwIFN0YXJ0IEZDRiB0YWJsZSBzY2FuIHBlciBhc3luYyBGQ0YgIgogCQkJCSJldmVudCwgZXZ0X3RhZzp4JXgsIGluZGV4OngleFxuIiwKLQkJCQlhY3FlX2Zjb2UtPmV2ZW50X3RhZywgYWNxZV9mY29lLT5pbmRleCk7CisJCQkJYWNxZV9maXAtPmV2ZW50X3RhZywgYWNxZV9maXAtPmluZGV4KTsKIAkJcmMgPSBscGZjX3NsaTRfZmNmX3NjYW5fcmVhZF9mY2ZfcmVjKHBoYmEsCiAJCQkJCQkgICAgIExQRkNfRkNPRV9GQ0ZfR0VUX0ZJUlNUKTsKIAkJaWYgKHJjKQpAQCAtMzM2OSwxNyArMzUyNiwxNyBAQAogCQkJCQkiY29tbWFuZCBmYWlsZWQgKHgleClcbiIsIHJjKTsKIAkJYnJlYWs7CiAKLQljYXNlIExQRkNfRkNPRV9FVkVOVF9UWVBFX0ZDRl9UQUJMRV9GVUxMOgorCWNhc2UgTFBGQ19GSVBfRVZFTlRfVFlQRV9GQ0ZfVEFCTEVfRlVMTDoKIAkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfU0xJLAogCQkJIjI1NDggRkNGIFRhYmxlIGZ1bGwgY291bnQgMHgleCB0YWcgMHgleFxuIiwKLQkJCWJmX2dldChscGZjX2FjcWVfZmNvZV9mY2ZfY291bnQsIGFjcWVfZmNvZSksCi0JCQlhY3FlX2Zjb2UtPmV2ZW50X3RhZyk7CisJCQliZl9nZXQobHBmY19hY3FlX2ZpcF9mY2ZfY291bnQsIGFjcWVfZmlwKSwKKwkJCWFjcWVfZmlwLT5ldmVudF90YWcpOwogCQlicmVhazsKIAotCWNhc2UgTFBGQ19GQ09FX0VWRU5UX1RZUEVfRkNGX0RFQUQ6CisJY2FzZSBMUEZDX0ZJUF9FVkVOVF9UWVBFX0ZDRl9ERUFEOgogCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19GSVAgfCBMT0dfRElTQ09WRVJZLAogCQkJIjI1NDkgRkNGICh4JXgpIGRpc2Nvbm5lY3RlZCBmcm9tIG5ldHdvcmssICIKLQkJCSJ0YWc6eCV4XG4iLCBhY3FlX2Zjb2UtPmluZGV4LCBhY3FlX2Zjb2UtPmV2ZW50X3RhZyk7CisJCQkidGFnOngleFxuIiwgYWNxZV9maXAtPmluZGV4LCBhY3FlX2ZpcC0+ZXZlbnRfdGFnKTsKIAkJLyoKIAkJICogSWYgd2UgYXJlIGluIHRoZSBtaWRkbGUgb2YgRkNGIGZhaWxvdmVyIHByb2Nlc3MsIGNsZWFyCiAJCSAqIHRoZSBjb3JyZXNwb25kaW5nIEZDRiBiaXQgaW4gdGhlIHJvdW5kcm9iaW4gYml0bWFwLgpAQCAtMzM4OCwxMyArMzU0NSwxMyBAQAogCQlpZiAocGhiYS0+ZmNmLmZjZl9mbGFnICYgRkNGX0RJU0NPVkVSWSkgewogCQkJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKIAkJCS8qIFVwZGF0ZSBGTE9HSSBGQ0YgZmFpbG92ZXIgZWxpZ2libGUgRkNGIGJtYXNrICovCi0JCQlscGZjX3NsaTRfZmNmX3JyX2luZGV4X2NsZWFyKHBoYmEsIGFjcWVfZmNvZS0+aW5kZXgpOworCQkJbHBmY19zbGk0X2ZjZl9ycl9pbmRleF9jbGVhcihwaGJhLCBhY3FlX2ZpcC0+aW5kZXgpOwogCQkJYnJlYWs7CiAJCX0KIAkJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKIAogCQkvKiBJZiB0aGUgZXZlbnQgaXMgbm90IGZvciBjdXJyZW50bHkgdXNlZCBmY2YgZG8gbm90aGluZyAqLwotCQlpZiAocGhiYS0+ZmNmLmN1cnJlbnRfcmVjLmZjZl9pbmR4ICE9IGFjcWVfZmNvZS0+aW5kZXgpCisJCWlmIChwaGJhLT5mY2YuY3VycmVudF9yZWMuZmNmX2luZHggIT0gYWNxZV9maXAtPmluZGV4KQogCQkJYnJlYWs7CiAKIAkJLyoKQEAgLTM0MTEsNyArMzU2OCw3IEBACiAJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0lORk8sIExPR19GSVAgfCBMT0dfRElTQ09WRVJZLAogCQkJCSIyNzcxIFN0YXJ0IEZDRiBmYXN0IGZhaWxvdmVyIHByb2Nlc3MgZHVlIHRvICIKIAkJCQkiRkNGIERFQUQgZXZlbnQ6IGV2dF90YWc6eCV4LCBmY2ZfaW5kZXg6eCV4ICIKLQkJCQkiXG4iLCBhY3FlX2Zjb2UtPmV2ZW50X3RhZywgYWNxZV9mY29lLT5pbmRleCk7CisJCQkJIlxuIiwgYWNxZV9maXAtPmV2ZW50X3RhZywgYWNxZV9maXAtPmluZGV4KTsKIAkJcmMgPSBscGZjX3NsaTRfcmVkaXNjX2ZjZl90YWJsZShwaGJhKTsKIAkJaWYgKHJjKSB7CiAJCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19GSVAgfApAQCAtMzQzOCwxMiArMzU5NSwxMiBAQAogCQkJbHBmY19zbGk0X3BlcmZvcm1fYWxsX3Zwb3J0X2N2bChwaGJhKTsKIAkJfQogCQlicmVhazsKLQljYXNlIExQRkNfRkNPRV9FVkVOVF9UWVBFX0NWTDoKKwljYXNlIExQRkNfRklQX0VWRU5UX1RZUEVfQ1ZMOgogCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19GSVAgfCBMT0dfRElTQ09WRVJZLAogCQkJIjI3MTggQ2xlYXIgVmlydHVhbCBMaW5rIFJlY2VpdmVkIGZvciBWUEkgMHgleCIKLQkJCSIgdGFnIDB4JXhcbiIsIGFjcWVfZmNvZS0+aW5kZXgsIGFjcWVfZmNvZS0+ZXZlbnRfdGFnKTsKKwkJCSIgdGFnIDB4JXhcbiIsIGFjcWVfZmlwLT5pbmRleCwgYWNxZV9maXAtPmV2ZW50X3RhZyk7CiAJCXZwb3J0ID0gbHBmY19maW5kX3Zwb3J0X2J5X3ZwaWQocGhiYSwKLQkJCQlhY3FlX2Zjb2UtPmluZGV4IC0gcGhiYS0+dnBpX2Jhc2UpOworCQkJCWFjcWVfZmlwLT5pbmRleCAtIHBoYmEtPnZwaV9iYXNlKTsKIAkJbmRscCA9IGxwZmNfc2xpNF9wZXJmb3JtX3Zwb3J0X2N2bCh2cG9ydCk7CiAJCWlmICghbmRscCkKIAkJCWJyZWFrOwpAQCAtMzQ5NCw3ICszNjUxLDcgQEAKIAkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0lORk8sIExPR19GSVAgfAogCQkJCQlMT0dfRElTQ09WRVJZLAogCQkJCQkiMjc3MyBTdGFydCBGQ0YgZmFpbG92ZXIgcGVyIENWTCwgIgotCQkJCQkiZXZ0X3RhZzp4JXhcbiIsIGFjcWVfZmNvZS0+ZXZlbnRfdGFnKTsKKwkJCQkJImV2dF90YWc6eCV4XG4iLCBhY3FlX2ZpcC0+ZXZlbnRfdGFnKTsKIAkJCXJjID0gbHBmY19zbGk0X3JlZGlzY19mY2ZfdGFibGUocGhiYSk7CiAJCQlpZiAocmMpIHsKIAkJCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19GSVAgfApAQCAtMzUyMiw3ICszNjc5LDcgQEAKIAlkZWZhdWx0OgogCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19TTEksCiAJCQkiMDI4OCBVbmtub3duIEZDb0UgZXZlbnQgdHlwZSAweCV4IGV2ZW50IHRhZyAiCi0JCQkiMHgleFxuIiwgZXZlbnRfdHlwZSwgYWNxZV9mY29lLT5ldmVudF90YWcpOworCQkJIjB4JXhcbiIsIGV2ZW50X3R5cGUsIGFjcWVfZmlwLT5ldmVudF90YWcpOwogCQlicmVhazsKIAl9CiB9CkBAIC0zNTk5LDggKzM3NTYsNyBAQAogCQkJCQkJICZjcV9ldmVudC0+Y3FlLmFjcWVfbGluayk7CiAJCQlicmVhazsKIAkJY2FzZSBMUEZDX1RSQUlMRVJfQ09ERV9GQ09FOgotCQkJbHBmY19zbGk0X2FzeW5jX2Zjb2VfZXZ0KHBoYmEsCi0JCQkJCQkgJmNxX2V2ZW50LT5jcWUuYWNxZV9mY29lKTsKKwkJCWxwZmNfc2xpNF9hc3luY19maXBfZXZ0KHBoYmEsICZjcV9ldmVudC0+Y3FlLmFjcWVfZmlwKTsKIAkJCWJyZWFrOwogCQljYXNlIExQRkNfVFJBSUxFUl9DT0RFX0RDQlg6CiAJCQlscGZjX3NsaTRfYXN5bmNfZGNieF9ldnQocGhiYSwKQEAgLTM2MTAsNiArMzc2NiwxMiBAQAogCQkJbHBmY19zbGk0X2FzeW5jX2dycDVfZXZ0KHBoYmEsCiAJCQkJCQkgJmNxX2V2ZW50LT5jcWUuYWNxZV9ncnA1KTsKIAkJCWJyZWFrOworCQljYXNlIExQRkNfVFJBSUxFUl9DT0RFX0ZDOgorCQkJbHBmY19zbGk0X2FzeW5jX2ZjX2V2dChwaGJhLCAmY3FfZXZlbnQtPmNxZS5hY3FlX2ZjKTsKKwkJCWJyZWFrOworCQljYXNlIExQRkNfVFJBSUxFUl9DT0RFX1NMSToKKwkJCWxwZmNfc2xpNF9hc3luY19zbGlfZXZ0KHBoYmEsICZjcV9ldmVudC0+Y3FlLmFjcWVfc2xpKTsKKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfU0xJLAogCQkJCQkiMTgwNCBJbnZhbGlkIGFzeW5jaHJvdXMgZXZlbnQgY29kZTogIgpAQCAtMzk0OCw3ICs0MTEwLDcgQEAKIAlpbnQgcmMsIGksIGhicV9jb3VudCwgYnVmX3NpemUsIGRtYV9idWZfc2l6ZSwgbWF4X2J1Zl9zaXplOwogCXVpbnQ4X3QgcG5fcGFnZVtMUEZDX01BWF9TVVBQT1JURURfUEFHRVNdID0gezB9OwogCXN0cnVjdCBscGZjX21xZSAqbXFlOwotCWludCBsb25nczsKKwlpbnQgbG9uZ3MsIHNsaV9mYW1pbHk7CiAKIAkvKiBCZWZvcmUgcHJvY2VlZCwgd2FpdCBmb3IgUE9TVCBkb25lIGFuZCBkZXZpY2UgcmVhZHkgKi8KIAlyYyA9IGxwZmNfc2xpNF9wb3N0X3N0YXR1c19jaGVjayhwaGJhKTsKQEAgLTM5NjMsNiArNDEyNSw5IEBACiAJaW5pdF90aW1lcigmcGhiYS0+aGJfdG1vZnVuYyk7CiAJcGhiYS0+aGJfdG1vZnVuYy5mdW5jdGlvbiA9IGxwZmNfaGJfdGltZW91dDsKIAlwaGJhLT5oYl90bW9mdW5jLmRhdGEgPSAodW5zaWduZWQgbG9uZylwaGJhOworCWluaXRfdGltZXIoJnBoYmEtPnJycV90bXIpOworCXBoYmEtPnJycV90bXIuZnVuY3Rpb24gPSBscGZjX3JycV90aW1lb3V0OworCXBoYmEtPnJycV90bXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKXBoYmE7CiAKIAlwc2xpID0gJnBoYmEtPnNsaTsKIAkvKiBNQk9YIGhlYXJ0YmVhdCB0aW1lciAqLwpAQCAtNDAxMCwxMiArNDE3NSwyMiBAQAogCSAqLwogCWJ1Zl9zaXplID0gKHNpemVvZihzdHJ1Y3QgZmNwX2NtbmQpICsgc2l6ZW9mKHN0cnVjdCBmY3BfcnNwKSArCiAJCSAgICAoKHBoYmEtPmNmZ19zZ19zZWdfY250ICsgMikgKiBzaXplb2Yoc3RydWN0IHNsaTRfc2dlKSkpOwotCS8qIEZlYXR1cmUgTGV2ZWwgMSBoYXJkd2FyZSBpcyBsaW1pdGVkIHRvIDIgcGFnZXMgKi8KLQlpZiAoKGJmX2dldChscGZjX3NsaV9pbnRmX2ZlYXR1cmVsZXZlbDEsICZwaGJhLT5zbGk0X2hiYS5zbGlfaW50ZikgPT0KLQkgICAgIExQRkNfU0xJX0lOVEZfRkVBVFVSRUxFVkVMMV8xKSkKLQkJbWF4X2J1Zl9zaXplID0gTFBGQ19TTEk0X0ZMMV9NQVhfQlVGX1NJWkU7Ci0JZWxzZQotCQltYXhfYnVmX3NpemUgPSBMUEZDX1NMSTRfTUFYX0JVRl9TSVpFOworCisJc2xpX2ZhbWlseSA9IGJmX2dldChscGZjX3NsaV9pbnRmX3NsaV9mYW1pbHksICZwaGJhLT5zbGk0X2hiYS5zbGlfaW50Zik7CisJbWF4X2J1Zl9zaXplID0gTFBGQ19TTEk0X01BWF9CVUZfU0laRTsKKwlzd2l0Y2ggKHNsaV9mYW1pbHkpIHsKKwljYXNlIExQRkNfU0xJX0lOVEZfRkFNSUxZX0JFMjoKKwljYXNlIExQRkNfU0xJX0lOVEZfRkFNSUxZX0JFMzoKKwkJLyogVGhlcmUgaXMgYSBzaW5nbGUgaGludCBmb3IgQkUgLSAyIHBhZ2VzIHBlciBCUEwuICovCisJCWlmIChiZl9nZXQobHBmY19zbGlfaW50Zl9zbGlfaGludDEsICZwaGJhLT5zbGk0X2hiYS5zbGlfaW50ZikgPT0KKwkJICAgIExQRkNfU0xJX0lOVEZfU0xJX0hJTlQxXzEpCisJCQltYXhfYnVmX3NpemUgPSBMUEZDX1NMSTRfRkwxX01BWF9CVUZfU0laRTsKKwkJYnJlYWs7CisJY2FzZSBMUEZDX1NMSV9JTlRGX0ZBTUlMWV9MTkNSX0EwOgorCWNhc2UgTFBGQ19TTElfSU5URl9GQU1JTFlfTE5DUl9CMDoKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CiAJZm9yIChkbWFfYnVmX3NpemUgPSBMUEZDX1NMSTRfTUlOX0JVRl9TSVpFOwogCSAgICAgZG1hX2J1Zl9zaXplIDwgbWF4X2J1Zl9zaXplICYmIGJ1Zl9zaXplID4gZG1hX2J1Zl9zaXplOwogCSAgICAgZG1hX2J1Zl9zaXplID0gZG1hX2J1Zl9zaXplIDw8IDEpCkBAIC00MDcwLDYgKzQyNDUsMTQgQEAKIAlpZiAocmMpCiAJCXJldHVybiAtRU5PTUVNOwogCisJLyogSUYgVHlwZSAyIHBvcnRzIGdldCBpbml0aWFsaXplZCBub3cuICovCisJaWYgKGJmX2dldChscGZjX3NsaV9pbnRmX2lmX3R5cGUsICZwaGJhLT5zbGk0X2hiYS5zbGlfaW50ZikgPT0KKwkgICAgTFBGQ19TTElfSU5URl9JRl9UWVBFXzIpIHsKKwkJcmMgPSBscGZjX3BjaV9mdW5jdGlvbl9yZXNldChwaGJhKTsKKwkJaWYgKHVubGlrZWx5KHJjKSkKKwkJCXJldHVybiAtRU5PREVWOworCX0KKwogCS8qIENyZWF0ZSB0aGUgYm9vdHN0cmFwIG1haWxib3ggY29tbWFuZCAqLwogCXJjID0gbHBmY19jcmVhdGVfYm9vdHN0cmFwX21ib3gocGhiYSk7CiAJaWYgKHVubGlrZWx5KHJjKSkKQEAgLTQwODAsMTkgKzQyNjMsMTggQEAKIAlpZiAodW5saWtlbHkocmMpKQogCQlnb3RvIG91dF9mcmVlX2JzbWJ4OwogCi0JcmMgPSBscGZjX3NsaTRfZndfY2ZnX2NoZWNrKHBoYmEpOwotCWlmICh1bmxpa2VseShyYykpCi0JCWdvdG8gb3V0X2ZyZWVfYnNtYng7Ci0KIAkvKiBTZXQgdXAgdGhlIGhiYSdzIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4gKi8KIAlyYyA9IGxwZmNfc2xpNF9yZWFkX2NvbmZpZyhwaGJhKTsKIAlpZiAodW5saWtlbHkocmMpKQogCQlnb3RvIG91dF9mcmVlX2JzbWJ4OwogCi0JLyogUGVyZm9ybSBhIGZ1bmN0aW9uIHJlc2V0ICovCi0JcmMgPSBscGZjX3BjaV9mdW5jdGlvbl9yZXNldChwaGJhKTsKLQlpZiAodW5saWtlbHkocmMpKQotCQlnb3RvIG91dF9mcmVlX2JzbWJ4OworCS8qIElGIFR5cGUgMCBwb3J0cyBnZXQgaW5pdGlhbGl6ZWQgbm93LiAqLworCWlmIChiZl9nZXQobHBmY19zbGlfaW50Zl9pZl90eXBlLCAmcGhiYS0+c2xpNF9oYmEuc2xpX2ludGYpID09CisJICAgIExQRkNfU0xJX0lOVEZfSUZfVFlQRV8wKSB7CisJCXJjID0gbHBmY19wY2lfZnVuY3Rpb25fcmVzZXQocGhiYSk7CisJCWlmICh1bmxpa2VseShyYykpCisJCQlnb3RvIG91dF9mcmVlX2JzbWJ4OworCX0KIAogCW1ib3hxID0gKExQRkNfTUJPWFFfdCAqKSBtZW1wb29sX2FsbG9jKHBoYmEtPm1ib3hfbWVtX3Bvb2wsCiAJCQkJCQkgICAgICAgR0ZQX0tFUk5FTCk7CkBAIC01MTkwLDk3ICs1MzcyLDE4MyBAQAogaW50CiBscGZjX3NsaTRfcG9zdF9zdGF0dXNfY2hlY2soc3RydWN0IGxwZmNfaGJhICpwaGJhKQogewotCXN0cnVjdCBscGZjX3JlZ2lzdGVyIHN0YV9yZWcsIHVlcnJsb19yZWcsIHVlcnJoaV9yZWc7Ci0JaW50IGksIHBvcnRfZXJyb3IgPSAtRU5PREVWOworCXN0cnVjdCBscGZjX3JlZ2lzdGVyIHBvcnRzbXBocl9yZWcsIHVlcnJsb19yZWcsIHVlcnJoaV9yZWc7CisJc3RydWN0IGxwZmNfcmVnaXN0ZXIgcmVnX2RhdGE7CisJaW50IGksIHBvcnRfZXJyb3IgPSAwOworCXVpbnQzMl90IGlmX3R5cGU7CiAKLQlpZiAoIXBoYmEtPnNsaTRfaGJhLlNUQXJlZ2FkZHIpCisJaWYgKCFwaGJhLT5zbGk0X2hiYS5QU01QSFJyZWdhZGRyKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCS8qIFdhaXQgdXAgdG8gMzAgc2Vjb25kcyBmb3IgdGhlIFNMSSBQb3J0IFBPU1QgZG9uZSBhbmQgcmVhZHkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgMzAwMDsgaSsrKSB7Ci0JCXN0YV9yZWcud29yZDAgPSByZWFkbChwaGJhLT5zbGk0X2hiYS5TVEFyZWdhZGRyKTsKLQkJLyogRW5jb3VudGVyIGZhdGFsIFBPU1QgZXJyb3IsIGJyZWFrIG91dCAqLwotCQlpZiAoYmZfZ2V0KGxwZmNfaHN0X3N0YXRlX3BlcnIsICZzdGFfcmVnKSkgeworCQlwb3J0c21waHJfcmVnLndvcmQwID0gcmVhZGwocGhiYS0+c2xpNF9oYmEuUFNNUEhScmVnYWRkcik7CisJCWlmIChiZl9nZXQobHBmY19wb3J0X3NtcGhyX3BlcnIsICZwb3J0c21waHJfcmVnKSkgeworCQkJLyogUG9ydCBoYXMgYSBmYXRhbCBQT1NUIGVycm9yLCBicmVhayBvdXQgKi8KIAkJCXBvcnRfZXJyb3IgPSAtRU5PREVWOwogCQkJYnJlYWs7CiAJCX0KLQkJaWYgKExQRkNfUE9TVF9TVEFHRV9BUk1GV19SRUFEWSA9PQotCQkgICAgYmZfZ2V0KGxwZmNfaHN0X3N0YXRlX3BvcnRfc3RhdHVzLCAmc3RhX3JlZykpIHsKLQkJCXBvcnRfZXJyb3IgPSAwOworCQlpZiAoTFBGQ19QT1NUX1NUQUdFX1BPUlRfUkVBRFkgPT0KKwkJICAgIGJmX2dldChscGZjX3BvcnRfc21waHJfcG9ydF9zdGF0dXMsICZwb3J0c21waHJfcmVnKSkKIAkJCWJyZWFrOwotCQl9CiAJCW1zbGVlcCgxMCk7CiAJfQogCi0JaWYgKHBvcnRfZXJyb3IpCisJLyoKKwkgKiBJZiB0aGVyZSB3YXMgYSBwb3J0IGVycm9yIGR1cmluZyBQT1NULCB0aGVuIGRvbid0IHByb2NlZWQgd2l0aAorCSAqIG90aGVyIHJlZ2lzdGVyIHJlYWRzIGFzIHRoZSBkYXRhIG1heSBub3QgYmUgdmFsaWQuICBKdXN0IGV4aXQuCisJICovCisJaWYgKHBvcnRfZXJyb3IpIHsKIAkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfSU5JVCwKLQkJCSIxNDA4IEZhaWx1cmUgSEJBIFBPU1QgU3RhdHVzOiBzdGFfcmVnPTB4JXgsICIKLQkJCSJwZXJyPXgleCwgc2ZpPXgleCwgbmlwPXgleCwgaXBjPXgleCwgeHJvbT14JXgsICIKLQkJCSJkbD14JXgsIHBzdGF0dXM9eCV4XG4iLCBzdGFfcmVnLndvcmQwLAotCQkJYmZfZ2V0KGxwZmNfaHN0X3N0YXRlX3BlcnIsICZzdGFfcmVnKSwKLQkJCWJmX2dldChscGZjX2hzdF9zdGF0ZV9zZmksICZzdGFfcmVnKSwKLQkJCWJmX2dldChscGZjX2hzdF9zdGF0ZV9uaXAsICZzdGFfcmVnKSwKLQkJCWJmX2dldChscGZjX2hzdF9zdGF0ZV9pcGMsICZzdGFfcmVnKSwKLQkJCWJmX2dldChscGZjX2hzdF9zdGF0ZV94cm9tLCAmc3RhX3JlZyksCi0JCQliZl9nZXQobHBmY19oc3Rfc3RhdGVfZGwsICZzdGFfcmVnKSwKLQkJCWJmX2dldChscGZjX2hzdF9zdGF0ZV9wb3J0X3N0YXR1cywgJnN0YV9yZWcpKTsKLQotCS8qIExvZyBkZXZpY2UgaW5mb3JtYXRpb24gKi8KLQlwaGJhLT5zbGk0X2hiYS5zbGlfaW50Zi53b3JkMCA9IHJlYWRsKHBoYmEtPnNsaTRfaGJhLlNMSUlOVEZyZWdhZGRyKTsKLQlpZiAoYmZfZ2V0KGxwZmNfc2xpX2ludGZfdmFsaWQsCi0JCSAgICZwaGJhLT5zbGk0X2hiYS5zbGlfaW50ZikgPT0gTFBGQ19TTElfSU5URl9WQUxJRCkgeworCQkJIjE0MDggUG9ydCBGYWlsZWQgUE9TVCAtIHBvcnRzbXBocj0weCV4LCAiCisJCQkicGVycj14JXgsIHNmaT14JXgsIG5pcD14JXgsIGlwYz14JXgsIHNjcjE9eCV4LCAiCisJCQkic2NyMj14JXgsIGhzY3JhdGNoPXgleCwgcHN0YXR1cz14JXhcbiIsCisJCQlwb3J0c21waHJfcmVnLndvcmQwLAorCQkJYmZfZ2V0KGxwZmNfcG9ydF9zbXBocl9wZXJyLCAmcG9ydHNtcGhyX3JlZyksCisJCQliZl9nZXQobHBmY19wb3J0X3NtcGhyX3NmaSwgJnBvcnRzbXBocl9yZWcpLAorCQkJYmZfZ2V0KGxwZmNfcG9ydF9zbXBocl9uaXAsICZwb3J0c21waHJfcmVnKSwKKwkJCWJmX2dldChscGZjX3BvcnRfc21waHJfaXBjLCAmcG9ydHNtcGhyX3JlZyksCisJCQliZl9nZXQobHBmY19wb3J0X3NtcGhyX3NjcjEsICZwb3J0c21waHJfcmVnKSwKKwkJCWJmX2dldChscGZjX3BvcnRfc21waHJfc2NyMiwgJnBvcnRzbXBocl9yZWcpLAorCQkJYmZfZ2V0KGxwZmNfcG9ydF9zbXBocl9ob3N0X3NjcmF0Y2gsICZwb3J0c21waHJfcmVnKSwKKwkJCWJmX2dldChscGZjX3BvcnRfc21waHJfcG9ydF9zdGF0dXMsICZwb3J0c21waHJfcmVnKSk7CisJfSBlbHNlIHsKIAkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fSU5GTywgTE9HX0lOSVQsCi0JCQkJIjI1MzQgRGV2aWNlIEluZm86IENoaXBUeXBlPTB4JXgsIFNsaVJldj0weCV4LCAiCi0JCQkJIkZlYXR1cmVMMT0weCV4LCBGZWF0dXJlTDI9MHgleFxuIiwKKwkJCQkiMjUzNCBEZXZpY2UgSW5mbzogU0xJRmFtaWx5PTB4JXgsICIKKwkJCQkiU0xJUmV2PTB4JXgsIElGVHlwZT0weCV4LCBTTElIaW50XzE9MHgleCwgIgorCQkJCSJTTElIaW50XzI9MHgleCwgRlQ9MHgleFxuIiwKIAkJCQliZl9nZXQobHBmY19zbGlfaW50Zl9zbGlfZmFtaWx5LAogCQkJCSAgICAgICAmcGhiYS0+c2xpNF9oYmEuc2xpX2ludGYpLAogCQkJCWJmX2dldChscGZjX3NsaV9pbnRmX3NsaXJldiwKIAkJCQkgICAgICAgJnBoYmEtPnNsaTRfaGJhLnNsaV9pbnRmKSwKLQkJCQliZl9nZXQobHBmY19zbGlfaW50Zl9mZWF0dXJlbGV2ZWwxLAorCQkJCWJmX2dldChscGZjX3NsaV9pbnRmX2lmX3R5cGUsCiAJCQkJICAgICAgICZwaGJhLT5zbGk0X2hiYS5zbGlfaW50ZiksCi0JCQkJYmZfZ2V0KGxwZmNfc2xpX2ludGZfZmVhdHVyZWxldmVsMiwKKwkJCQliZl9nZXQobHBmY19zbGlfaW50Zl9zbGlfaGludDEsCisJCQkJICAgICAgICZwaGJhLT5zbGk0X2hiYS5zbGlfaW50ZiksCisJCQkJYmZfZ2V0KGxwZmNfc2xpX2ludGZfc2xpX2hpbnQyLAorCQkJCSAgICAgICAmcGhiYS0+c2xpNF9oYmEuc2xpX2ludGYpLAorCQkJCWJmX2dldChscGZjX3NsaV9pbnRmX2Z1bmNfdHlwZSwKIAkJCQkgICAgICAgJnBoYmEtPnNsaTRfaGJhLnNsaV9pbnRmKSk7CisJCS8qCisJCSAqIENoZWNrIGZvciBvdGhlciBQb3J0IGVycm9ycyBkdXJpbmcgdGhlIGluaXRpYWxpemF0aW9uCisJCSAqIHByb2Nlc3MuICBGYWlsIHRoZSBsb2FkIGlmIHRoZSBwb3J0IGRpZCBub3QgY29tZSB1cAorCQkgKiBjb3JyZWN0bHkuCisJCSAqLworCQlpZl90eXBlID0gYmZfZ2V0KGxwZmNfc2xpX2ludGZfaWZfdHlwZSwKKwkJCQkgJnBoYmEtPnNsaTRfaGJhLnNsaV9pbnRmKTsKKwkJc3dpdGNoIChpZl90eXBlKSB7CisJCWNhc2UgTFBGQ19TTElfSU5URl9JRl9UWVBFXzA6CisJCQlwaGJhLT5zbGk0X2hiYS51ZV9tYXNrX2xvID0KKwkJCSAgICAgIHJlYWRsKHBoYmEtPnNsaTRfaGJhLnUuaWZfdHlwZTAuVUVNQVNLTE9yZWdhZGRyKTsKKwkJCXBoYmEtPnNsaTRfaGJhLnVlX21hc2tfaGkgPQorCQkJICAgICAgcmVhZGwocGhiYS0+c2xpNF9oYmEudS5pZl90eXBlMC5VRU1BU0tISXJlZ2FkZHIpOworCQkJdWVycmxvX3JlZy53b3JkMCA9CisJCQkgICAgICByZWFkbChwaGJhLT5zbGk0X2hiYS51LmlmX3R5cGUwLlVFUlJMT3JlZ2FkZHIpOworCQkJdWVycmhpX3JlZy53b3JkMCA9CisJCQkJcmVhZGwocGhiYS0+c2xpNF9oYmEudS5pZl90eXBlMC5VRVJSSElyZWdhZGRyKTsKKwkJCWlmICgofnBoYmEtPnNsaTRfaGJhLnVlX21hc2tfbG8gJiB1ZXJybG9fcmVnLndvcmQwKSB8fAorCQkJICAgICh+cGhiYS0+c2xpNF9oYmEudWVfbWFza19oaSAmIHVlcnJoaV9yZWcud29yZDApKSB7CisJCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfSU5JVCwKKwkJCQkJCSIxNDIyIFVucmVjb3ZlcmFibGUgRXJyb3IgIgorCQkJCQkJIkRldGVjdGVkIGR1cmluZyBQT1NUICIKKwkJCQkJCSJ1ZXJyX2xvX3JlZz0weCV4LCAiCisJCQkJCQkidWVycl9oaV9yZWc9MHgleCwgIgorCQkJCQkJInVlX21hc2tfbG9fcmVnPTB4JXgsICIKKwkJCQkJCSJ1ZV9tYXNrX2hpX3JlZz0weCV4XG4iLAorCQkJCQkJdWVycmxvX3JlZy53b3JkMCwKKwkJCQkJCXVlcnJoaV9yZWcud29yZDAsCisJCQkJCQlwaGJhLT5zbGk0X2hiYS51ZV9tYXNrX2xvLAorCQkJCQkJcGhiYS0+c2xpNF9oYmEudWVfbWFza19oaSk7CisJCQkJcG9ydF9lcnJvciA9IC1FTk9ERVY7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBMUEZDX1NMSV9JTlRGX0lGX1RZUEVfMjoKKwkJCS8qIEZpbmFsIGNoZWNrcy4gIFRoZSBwb3J0IHN0YXR1cyBzaG91bGQgYmUgY2xlYW4uICovCisJCQlyZWdfZGF0YS53b3JkMCA9CisJCQkJcmVhZGwocGhiYS0+c2xpNF9oYmEudS5pZl90eXBlMi5TVEFUVVNyZWdhZGRyKTsKKwkJCWlmIChiZl9nZXQobHBmY19zbGlwb3J0X3N0YXR1c19lcnIsICZyZWdfZGF0YSkpIHsKKwkJCQlwaGJhLT53b3JrX3N0YXR1c1swXSA9CisJCQkJCXJlYWRsKHBoYmEtPnNsaTRfaGJhLnUuaWZfdHlwZTIuCisJCQkJCSAgICAgIEVSUjFyZWdhZGRyKTsKKwkJCQlwaGJhLT53b3JrX3N0YXR1c1sxXSA9CisJCQkJCXJlYWRsKHBoYmEtPnNsaTRfaGJhLnUuaWZfdHlwZTIuCisJCQkJCSAgICAgIEVSUjJyZWdhZGRyKTsKKwkJCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19JTklULAorCQkJCQkiMjg4OCBQb3J0IEVycm9yIERldGVjdGVkICIKKwkJCQkJImR1cmluZyBQT1NUOiAiCisJCQkJCSJwb3J0IHN0YXR1cyByZWcgMHgleCwgIgorCQkJCQkicG9ydF9zbXBociByZWcgMHgleCwgIgorCQkJCQkiZXJyb3IgMT0weCV4LCBlcnJvciAyPTB4JXhcbiIsCisJCQkJCXJlZ19kYXRhLndvcmQwLAorCQkJCQlwb3J0c21waHJfcmVnLndvcmQwLAorCQkJCQlwaGJhLT53b3JrX3N0YXR1c1swXSwKKwkJCQkJcGhiYS0+d29ya19zdGF0dXNbMV0pOworCQkJCXBvcnRfZXJyb3IgPSAtRU5PREVWOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgTFBGQ19TTElfSU5URl9JRl9UWVBFXzE6CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQogCX0KLQlwaGJhLT5zbGk0X2hiYS51ZV9tYXNrX2xvID0gcmVhZGwocGhiYS0+c2xpNF9oYmEuVUVNQVNLTE9yZWdhZGRyKTsKLQlwaGJhLT5zbGk0X2hiYS51ZV9tYXNrX2hpID0gcmVhZGwocGhiYS0+c2xpNF9oYmEuVUVNQVNLSElyZWdhZGRyKTsKLQkvKiBXaXRoIHVuY292ZXJhYmxlIGVycm9yLCBsb2cgdGhlIGVycm9yIG1lc3NhZ2UgYW5kIHJldHVybiBlcnJvciAqLwotCXVlcnJsb19yZWcud29yZDAgPSByZWFkbChwaGJhLT5zbGk0X2hiYS5VRVJSTE9yZWdhZGRyKTsKLQl1ZXJyaGlfcmVnLndvcmQwID0gcmVhZGwocGhiYS0+c2xpNF9oYmEuVUVSUkhJcmVnYWRkcik7Ci0JaWYgKCh+cGhiYS0+c2xpNF9oYmEudWVfbWFza19sbyAmIHVlcnJsb19yZWcud29yZDApIHx8Ci0JICAgICh+cGhiYS0+c2xpNF9oYmEudWVfbWFza19oaSAmIHVlcnJoaV9yZWcud29yZDApKSB7Ci0JCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0lOSVQsCi0JCQkJIjE0MjIgSEJBIFVucmVjb3ZlcmFibGUgZXJyb3I6ICIKLQkJCQkidWVycl9sb19yZWc9MHgleCwgdWVycl9oaV9yZWc9MHgleCwgIgotCQkJCSJ1ZV9tYXNrX2xvX3JlZz0weCV4LCB1ZV9tYXNrX2hpX3JlZz0weCV4XG4iLAotCQkJCXVlcnJsb19yZWcud29yZDAsIHVlcnJoaV9yZWcud29yZDAsCi0JCQkJcGhiYS0+c2xpNF9oYmEudWVfbWFza19sbywKLQkJCQlwaGJhLT5zbGk0X2hiYS51ZV9tYXNrX2hpKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCiAJcmV0dXJuIHBvcnRfZXJyb3I7CiB9CiAKIC8qKgogICogbHBmY19zbGk0X2JhcjBfcmVnaXN0ZXJfbWVtbWFwIC0gU2V0IHVwIFNMSTQgQkFSMCByZWdpc3RlciBtZW1vcnkgbWFwLgogICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAaWZfdHlwZTogIFRoZSBTTEk0IGludGVyZmFjZSB0eXBlIGdldHRpbmcgY29uZmlndXJlZC4KICAqCiAgKiBUaGlzIHJvdXRpbmUgaXMgaW52b2tlZCB0byBzZXQgdXAgU0xJNCBCQVIwIFBDSSBjb25maWcgc3BhY2UgcmVnaXN0ZXIKICAqIG1lbW9yeSBtYXAuCiAgKiovCiBzdGF0aWMgdm9pZAotbHBmY19zbGk0X2JhcjBfcmVnaXN0ZXJfbWVtbWFwKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKK2xwZmNfc2xpNF9iYXIwX3JlZ2lzdGVyX21lbW1hcChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHVpbnQzMl90IGlmX3R5cGUpCiB7Ci0JcGhiYS0+c2xpNF9oYmEuVUVSUkxPcmVnYWRkciA9IHBoYmEtPnNsaTRfaGJhLmNvbmZfcmVnc19tZW1tYXBfcCArCi0JCQkJCUxQRkNfVUVSUl9TVEFUVVNfTE87Ci0JcGhiYS0+c2xpNF9oYmEuVUVSUkhJcmVnYWRkciA9IHBoYmEtPnNsaTRfaGJhLmNvbmZfcmVnc19tZW1tYXBfcCArCi0JCQkJCUxQRkNfVUVSUl9TVEFUVVNfSEk7Ci0JcGhiYS0+c2xpNF9oYmEuVUVNQVNLTE9yZWdhZGRyID0gcGhiYS0+c2xpNF9oYmEuY29uZl9yZWdzX21lbW1hcF9wICsKLQkJCQkJTFBGQ19VRV9NQVNLX0xPOwotCXBoYmEtPnNsaTRfaGJhLlVFTUFTS0hJcmVnYWRkciA9IHBoYmEtPnNsaTRfaGJhLmNvbmZfcmVnc19tZW1tYXBfcCArCi0JCQkJCUxQRkNfVUVfTUFTS19ISTsKLQlwaGJhLT5zbGk0X2hiYS5TTElJTlRGcmVnYWRkciA9IHBoYmEtPnNsaTRfaGJhLmNvbmZfcmVnc19tZW1tYXBfcCArCi0JCQkJCUxQRkNfU0xJX0lOVEY7CisJc3dpdGNoIChpZl90eXBlKSB7CisJY2FzZSBMUEZDX1NMSV9JTlRGX0lGX1RZUEVfMDoKKwkJcGhiYS0+c2xpNF9oYmEudS5pZl90eXBlMC5VRVJSTE9yZWdhZGRyID0KKwkJCXBoYmEtPnNsaTRfaGJhLmNvbmZfcmVnc19tZW1tYXBfcCArIExQRkNfVUVSUl9TVEFUVVNfTE87CisJCXBoYmEtPnNsaTRfaGJhLnUuaWZfdHlwZTAuVUVSUkhJcmVnYWRkciA9CisJCQlwaGJhLT5zbGk0X2hiYS5jb25mX3JlZ3NfbWVtbWFwX3AgKyBMUEZDX1VFUlJfU1RBVFVTX0hJOworCQlwaGJhLT5zbGk0X2hiYS51LmlmX3R5cGUwLlVFTUFTS0xPcmVnYWRkciA9CisJCQlwaGJhLT5zbGk0X2hiYS5jb25mX3JlZ3NfbWVtbWFwX3AgKyBMUEZDX1VFX01BU0tfTE87CisJCXBoYmEtPnNsaTRfaGJhLnUuaWZfdHlwZTAuVUVNQVNLSElyZWdhZGRyID0KKwkJCXBoYmEtPnNsaTRfaGJhLmNvbmZfcmVnc19tZW1tYXBfcCArIExQRkNfVUVfTUFTS19ISTsKKwkJcGhiYS0+c2xpNF9oYmEuU0xJSU5URnJlZ2FkZHIgPQorCQkJcGhiYS0+c2xpNF9oYmEuY29uZl9yZWdzX21lbW1hcF9wICsgTFBGQ19TTElfSU5URjsKKwkJYnJlYWs7CisJY2FzZSBMUEZDX1NMSV9JTlRGX0lGX1RZUEVfMjoKKwkJcGhiYS0+c2xpNF9oYmEudS5pZl90eXBlMi5FUlIxcmVnYWRkciA9CisJCQlwaGJhLT5zbGk0X2hiYS5jb25mX3JlZ3NfbWVtbWFwX3AgKyBMUEZDX1NMSVBPUlRfRVJSXzE7CisJCXBoYmEtPnNsaTRfaGJhLnUuaWZfdHlwZTIuRVJSMnJlZ2FkZHIgPQorCQkJcGhiYS0+c2xpNF9oYmEuY29uZl9yZWdzX21lbW1hcF9wICsgTFBGQ19TTElQT1JUX0VSUl8yOworCQlwaGJhLT5zbGk0X2hiYS51LmlmX3R5cGUyLkNUUkxyZWdhZGRyID0KKwkJCXBoYmEtPnNsaTRfaGJhLmNvbmZfcmVnc19tZW1tYXBfcCArIExQRkNfU0xJUE9SVF9DTlRSTDsKKwkJcGhiYS0+c2xpNF9oYmEudS5pZl90eXBlMi5TVEFUVVNyZWdhZGRyID0KKwkJCXBoYmEtPnNsaTRfaGJhLmNvbmZfcmVnc19tZW1tYXBfcCArIExQRkNfU0xJUE9SVF9TVEFUVVM7CisJCXBoYmEtPnNsaTRfaGJhLlNMSUlOVEZyZWdhZGRyID0KKwkJCXBoYmEtPnNsaTRfaGJhLmNvbmZfcmVnc19tZW1tYXBfcCArIExQRkNfU0xJX0lOVEY7CisJCXBoYmEtPnNsaTRfaGJhLlBTTVBIUnJlZ2FkZHIgPQorCQkgICAgIHBoYmEtPnNsaTRfaGJhLmNvbmZfcmVnc19tZW1tYXBfcCArIExQRkNfU0xJUE9SVF9JRjJfU01QSFI7CisJCXBoYmEtPnNsaTRfaGJhLlJRREJyZWdhZGRyID0KKwkJCXBoYmEtPnNsaTRfaGJhLmNvbmZfcmVnc19tZW1tYXBfcCArIExQRkNfUlFfRE9PUkJFTEw7CisJCXBoYmEtPnNsaTRfaGJhLldRREJyZWdhZGRyID0KKwkJCXBoYmEtPnNsaTRfaGJhLmNvbmZfcmVnc19tZW1tYXBfcCArIExQRkNfV1FfRE9PUkJFTEw7CisJCXBoYmEtPnNsaTRfaGJhLkVRQ1FEQnJlZ2FkZHIgPQorCQkJcGhiYS0+c2xpNF9oYmEuY29uZl9yZWdzX21lbW1hcF9wICsgTFBGQ19FUUNRX0RPT1JCRUxMOworCQlwaGJhLT5zbGk0X2hiYS5NUURCcmVnYWRkciA9CisJCQlwaGJhLT5zbGk0X2hiYS5jb25mX3JlZ3NfbWVtbWFwX3AgKyBMUEZDX01RX0RPT1JCRUxMOworCQlwaGJhLT5zbGk0X2hiYS5CTUJYcmVnYWRkciA9CisJCQlwaGJhLT5zbGk0X2hiYS5jb25mX3JlZ3NfbWVtbWFwX3AgKyBMUEZDX0JNQlg7CisJCWJyZWFrOworCWNhc2UgTFBGQ19TTElfSU5URl9JRl9UWVBFXzE6CisJZGVmYXVsdDoKKwkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJnBoYmEtPnBjaWRldi0+ZGV2LAorCQkJICAgIkZBVEFMIC0gdW5zdXBwb3J0ZWQgU0xJNCBpbnRlcmZhY2UgdHlwZSAtICVkXG4iLAorCQkJICAgaWZfdHlwZSk7CisJCWJyZWFrOworCX0KIH0KIAogLyoqCkBAIC01MjkzLDE2ICs1NTYxLDE0IEBACiBzdGF0aWMgdm9pZAogbHBmY19zbGk0X2JhcjFfcmVnaXN0ZXJfbWVtbWFwKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKIHsKLQotCXBoYmEtPnNsaTRfaGJhLlNUQXJlZ2FkZHIgPSBwaGJhLT5zbGk0X2hiYS5jdHJsX3JlZ3NfbWVtbWFwX3AgKwotCQkJCSAgICBMUEZDX0hTVF9TVEFURTsKKwlwaGJhLT5zbGk0X2hiYS5QU01QSFJyZWdhZGRyID0gcGhiYS0+c2xpNF9oYmEuY3RybF9yZWdzX21lbW1hcF9wICsKKwkJTFBGQ19TTElQT1JUX0lGMF9TTVBIUjsKIAlwaGJhLT5zbGk0X2hiYS5JU1JyZWdhZGRyID0gcGhiYS0+c2xpNF9oYmEuY3RybF9yZWdzX21lbW1hcF9wICsKLQkJCQkgICAgTFBGQ19IU1RfSVNSMDsKKwkJTFBGQ19IU1RfSVNSMDsKIAlwaGJhLT5zbGk0X2hiYS5JTVJyZWdhZGRyID0gcGhiYS0+c2xpNF9oYmEuY3RybF9yZWdzX21lbW1hcF9wICsKLQkJCQkgICAgTFBGQ19IU1RfSU1SMDsKKwkJTFBGQ19IU1RfSU1SMDsKIAlwaGJhLT5zbGk0X2hiYS5JU0NScmVnYWRkciA9IHBoYmEtPnNsaTRfaGJhLmN0cmxfcmVnc19tZW1tYXBfcCArCi0JCQkJICAgICBMUEZDX0hTVF9JU0NSMDsKLQlyZXR1cm47CisJCUxQRkNfSFNUX0lTQ1IwOwogfQogCiAvKioKQEAgLTU1NDIsMTEgKzU4MDgsMTIgQEAKIH0KIAogLyoqCi0gKiBscGZjX2Rldl9lbmRpYW5fb3JkZXJfc2V0dXAgLSBOb3RpZnkgdGhlIHBvcnQgb2YgdGhlIGhvc3QncyBlbmRpYW4gb3JkZXIuCisgKiBscGZjX3NldHVwX2VuZGlhbl9vcmRlciAtIFdyaXRlIGVuZGlhbiBvcmRlciB0byBhbiBTTEk0IGlmX3R5cGUgMCBwb3J0LgogICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCiAgKgotICogVGhpcyByb3V0aW5lIGlzIGludm9rZWQgdG8gc2V0dXAgdGhlIGhvc3Qtc2lkZSBlbmRpYW4gb3JkZXIgdG8gdGhlCi0gKiBIQkEgY29uc2lzdGVudCB3aXRoIHRoZSBTTEktNCBpbnRlcmZhY2Ugc3BlYy4KKyAqIFRoaXMgcm91dGluZSBpcyBpbnZva2VkIHRvIHNldHVwIHRoZSBwb3J0LXNpZGUgZW5kaWFuIG9yZGVyIHdoZW4KKyAqIHRoZSBwb3J0IGlmX3R5cGUgaXMgMC4gIFRoaXMgcm91dGluZSBoYXMgbm8gZnVuY3Rpb24gZm9yIG90aGVyCisgKiBpZl90eXBlcy4KICAqCiAgKiBSZXR1cm4gY29kZXMKICAqIAkwIC0gc3VjY2Vzc2Z1bApAQCAtNTU1NywzNCArNTgyNCw0NCBAQAogbHBmY19zZXR1cF9lbmRpYW5fb3JkZXIoc3RydWN0IGxwZmNfaGJhICpwaGJhKQogewogCUxQRkNfTUJPWFFfdCAqbWJveHE7Ci0JdWludDMyX3QgcmMgPSAwOworCXVpbnQzMl90IGlmX3R5cGUsIHJjID0gMDsKIAl1aW50MzJfdCBlbmRpYW5fbWJfZGF0YVsyXSA9IHtIT1NUX0VORElBTl9MT1dfV09SRDAsCiAJCQkJICAgICAgSE9TVF9FTkRJQU5fSElHSF9XT1JEMX07CiAKLQltYm94cSA9IChMUEZDX01CT1hRX3QgKikgbWVtcG9vbF9hbGxvYyhwaGJhLT5tYm94X21lbV9wb29sLCBHRlBfS0VSTkVMKTsKLQlpZiAoIW1ib3hxKSB7Ci0JCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0lOSVQsCi0JCQkJIjA0OTIgVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgaXNzdWluZyAiCi0JCQkJIlNMSV9DT05GSUdfU1BFQ0lBTCBtYWlsYm94IGNvbW1hbmRcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9CisJaWZfdHlwZSA9IGJmX2dldChscGZjX3NsaV9pbnRmX2lmX3R5cGUsICZwaGJhLT5zbGk0X2hiYS5zbGlfaW50Zik7CisJc3dpdGNoIChpZl90eXBlKSB7CisJY2FzZSBMUEZDX1NMSV9JTlRGX0lGX1RZUEVfMDoKKwkJbWJveHEgPSAoTFBGQ19NQk9YUV90ICopIG1lbXBvb2xfYWxsb2MocGhiYS0+bWJveF9tZW1fcG9vbCwKKwkJCQkJCSAgICAgICBHRlBfS0VSTkVMKTsKKwkJaWYgKCFtYm94cSkgeworCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfSU5JVCwKKwkJCQkJIjA0OTIgVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgIgorCQkJCQkiaXNzdWluZyBTTElfQ09ORklHX1NQRUNJQUwgbWFpbGJveCAiCisJCQkJCSJjb21tYW5kXG4iKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CiAKLQkvKgotCSAqIFRoZSBTTEk0X0NPTkZJR19TUEVDSUFMIG1haWxib3ggY29tbWFuZCByZXF1aXJlcyB0aGUgZmlyc3QgdHdvCi0JICogd29yZHMgdG8gY29udGFpbiBzcGVjaWFsIGRhdGEgdmFsdWVzIGFuZCBubyBvdGhlciBkYXRhLgotCSAqLwotCW1lbXNldChtYm94cSwgMCwgc2l6ZW9mKExQRkNfTUJPWFFfdCkpOwotCW1lbWNweSgmbWJveHEtPnUubXFlLCAmZW5kaWFuX21iX2RhdGEsIHNpemVvZihlbmRpYW5fbWJfZGF0YSkpOwotCXJjID0gbHBmY19zbGlfaXNzdWVfbWJveChwaGJhLCBtYm94cSwgTUJYX1BPTEwpOwotCWlmIChyYyAhPSBNQlhfU1VDQ0VTUykgewotCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19JTklULAotCQkJCSIwNDkzIFNMSV9DT05GSUdfU1BFQ0lBTCBtYWlsYm94IGZhaWxlZCB3aXRoICIKLQkJCQkic3RhdHVzIHgleFxuIiwKLQkJCQlyYyk7Ci0JCXJjID0gLUVJTzsKKwkJLyoKKwkJICogVGhlIFNMSTRfQ09ORklHX1NQRUNJQUwgbWFpbGJveCBjb21tYW5kIHJlcXVpcmVzIHRoZSBmaXJzdAorCQkgKiB0d28gd29yZHMgdG8gY29udGFpbiBzcGVjaWFsIGRhdGEgdmFsdWVzIGFuZCBubyBvdGhlciBkYXRhLgorCQkgKi8KKwkJbWVtc2V0KG1ib3hxLCAwLCBzaXplb2YoTFBGQ19NQk9YUV90KSk7CisJCW1lbWNweSgmbWJveHEtPnUubXFlLCAmZW5kaWFuX21iX2RhdGEsIHNpemVvZihlbmRpYW5fbWJfZGF0YSkpOworCQlyYyA9IGxwZmNfc2xpX2lzc3VlX21ib3gocGhiYSwgbWJveHEsIE1CWF9QT0xMKTsKKwkJaWYgKHJjICE9IE1CWF9TVUNDRVNTKSB7CisJCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19JTklULAorCQkJCQkiMDQ5MyBTTElfQ09ORklHX1NQRUNJQUwgbWFpbGJveCAiCisJCQkJCSJmYWlsZWQgd2l0aCBzdGF0dXMgeCV4XG4iLAorCQkJCQlyYyk7CisJCQlyYyA9IC1FSU87CisJCX0KKwkJbWVtcG9vbF9mcmVlKG1ib3hxLCBwaGJhLT5tYm94X21lbV9wb29sKTsKKwkJYnJlYWs7CisJY2FzZSBMUEZDX1NMSV9JTlRGX0lGX1RZUEVfMjoKKwljYXNlIExQRkNfU0xJX0lOVEZfSUZfVFlQRV8xOgorCWRlZmF1bHQ6CisJCWJyZWFrOwogCX0KLQotCW1lbXBvb2xfZnJlZShtYm94cSwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CiAJcmV0dXJuIHJjOwogfQogCkBAIC02NDE2LDM2ICs2NjkzLDEyNCBAQAogbHBmY19wY2lfZnVuY3Rpb25fcmVzZXQoc3RydWN0IGxwZmNfaGJhICpwaGJhKQogewogCUxQRkNfTUJPWFFfdCAqbWJveHE7Ci0JdWludDMyX3QgcmMgPSAwOworCXVpbnQzMl90IHJjID0gMCwgaWZfdHlwZTsKIAl1aW50MzJfdCBzaGRyX3N0YXR1cywgc2hkcl9hZGRfc3RhdHVzOworCXVpbnQzMl90IHJkeV9jaGssIG51bV9yZXNldHMgPSAwLCByZXNldF9hZ2FpbiA9IDA7CiAJdW5pb24gbHBmY19zbGk0X2NmZ19zaGRyICpzaGRyOworCXN0cnVjdCBscGZjX3JlZ2lzdGVyIHJlZ19kYXRhOwogCi0JbWJveHEgPSAoTFBGQ19NQk9YUV90ICopIG1lbXBvb2xfYWxsb2MocGhiYS0+bWJveF9tZW1fcG9vbCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFtYm94cSkgewotCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19JTklULAotCQkJCSIwNDk0IFVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGlzc3VpbmcgIgotCQkJCSJTTElfRlVOQ1RJT05fUkVTRVQgbWFpbGJveCBjb21tYW5kXG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJaWZfdHlwZSA9IGJmX2dldChscGZjX3NsaV9pbnRmX2lmX3R5cGUsICZwaGJhLT5zbGk0X2hiYS5zbGlfaW50Zik7CisJc3dpdGNoIChpZl90eXBlKSB7CisJY2FzZSBMUEZDX1NMSV9JTlRGX0lGX1RZUEVfMDoKKwkJbWJveHEgPSAoTFBGQ19NQk9YUV90ICopIG1lbXBvb2xfYWxsb2MocGhiYS0+bWJveF9tZW1fcG9vbCwKKwkJCQkJCSAgICAgICBHRlBfS0VSTkVMKTsKKwkJaWYgKCFtYm94cSkgeworCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfSU5JVCwKKwkJCQkJIjA0OTQgVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgIgorCQkJCQkiaXNzdWluZyBTTElfRlVOQ1RJT05fUkVTRVQgbWFpbGJveCAiCisJCQkJCSJjb21tYW5kXG4iKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisKKwkJLyogU2V0dXAgUENJIGZ1bmN0aW9uIHJlc2V0IG1haWxib3gtaW9jdGwgY29tbWFuZCAqLworCQlscGZjX3NsaTRfY29uZmlnKHBoYmEsIG1ib3hxLCBMUEZDX01CT1hfU1VCU1lTVEVNX0NPTU1PTiwKKwkJCQkgTFBGQ19NQk9YX09QQ09ERV9GVU5DVElPTl9SRVNFVCwgMCwKKwkJCQkgTFBGQ19TTEk0X01CWF9FTUJFRCk7CisJCXJjID0gbHBmY19zbGlfaXNzdWVfbWJveChwaGJhLCBtYm94cSwgTUJYX1BPTEwpOworCQlzaGRyID0gKHVuaW9uIGxwZmNfc2xpNF9jZmdfc2hkciAqKQorCQkJJm1ib3hxLT51Lm1xZS51bi5zbGk0X2NvbmZpZy5oZWFkZXIuY2ZnX3NoZHI7CisJCXNoZHJfc3RhdHVzID0gYmZfZ2V0KGxwZmNfbWJveF9oZHJfc3RhdHVzLCAmc2hkci0+cmVzcG9uc2UpOworCQlzaGRyX2FkZF9zdGF0dXMgPSBiZl9nZXQobHBmY19tYm94X2hkcl9hZGRfc3RhdHVzLAorCQkJCQkgJnNoZHItPnJlc3BvbnNlKTsKKwkJaWYgKHJjICE9IE1CWF9USU1FT1VUKQorCQkJbWVtcG9vbF9mcmVlKG1ib3hxLCBwaGJhLT5tYm94X21lbV9wb29sKTsKKwkJaWYgKHNoZHJfc3RhdHVzIHx8IHNoZHJfYWRkX3N0YXR1cyB8fCByYykgeworCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfSU5JVCwKKwkJCQkJIjA0OTUgU0xJX0ZVTkNUSU9OX1JFU0VUIG1haWxib3ggIgorCQkJCQkiZmFpbGVkIHdpdGggc3RhdHVzIHgleCBhZGRfc3RhdHVzIHgleCwiCisJCQkJCSIgbWJ4IHN0YXR1cyB4JXhcbiIsCisJCQkJCXNoZHJfc3RhdHVzLCBzaGRyX2FkZF9zdGF0dXMsIHJjKTsKKwkJCXJjID0gLUVOWElPOworCQl9CisJCWJyZWFrOworCWNhc2UgTFBGQ19TTElfSU5URl9JRl9UWVBFXzI6CisJCWZvciAobnVtX3Jlc2V0cyA9IDA7CisJCSAgICAgbnVtX3Jlc2V0cyA8IE1BWF9JRl9UWVBFXzJfUkVTRVRTOworCQkgICAgIG51bV9yZXNldHMrKykgeworCQkJcmVnX2RhdGEud29yZDAgPSAwOworCQkJYmZfc2V0KGxwZmNfc2xpcG9ydF9jdHJsX2VuZCwgJnJlZ19kYXRhLAorCQkJICAgICAgIExQRkNfU0xJUE9SVF9MSVRUTEVfRU5ESUFOKTsKKwkJCWJmX3NldChscGZjX3NsaXBvcnRfY3RybF9pcCwgJnJlZ19kYXRhLAorCQkJICAgICAgIExQRkNfU0xJUE9SVF9JTklUX1BPUlQpOworCQkJd3JpdGVsKHJlZ19kYXRhLndvcmQwLCBwaGJhLT5zbGk0X2hiYS51LmlmX3R5cGUyLgorCQkJICAgICAgIENUUkxyZWdhZGRyKTsKKworCQkJLyoKKwkJCSAqIFBvbGwgdGhlIFBvcnQgU3RhdHVzIFJlZ2lzdGVyIGFuZCB3YWl0IGZvciBSRFkgZm9yCisJCQkgKiB1cCB0byAxMCBzZWNvbmRzLiAgSWYgdGhlIHBvcnQgZG9lc24ndCByZXNwb25kLCB0cmVhdAorCQkJICogaXQgYXMgYW4gZXJyb3IuICBJZiB0aGUgcG9ydCByZXNwb25kcyB3aXRoIFJOLCBzdGFydAorCQkJICogdGhlIGxvb3AgYWdhaW4uCisJCQkgKi8KKwkJCWZvciAocmR5X2NoayA9IDA7IHJkeV9jaGsgPCAxMDAwOyByZHlfY2hrKyspIHsKKwkJCQlyZWdfZGF0YS53b3JkMCA9CisJCQkJCXJlYWRsKHBoYmEtPnNsaTRfaGJhLnUuaWZfdHlwZTIuCisJCQkJCSAgICAgIFNUQVRVU3JlZ2FkZHIpOworCQkJCWlmIChiZl9nZXQobHBmY19zbGlwb3J0X3N0YXR1c19yZHksICZyZWdfZGF0YSkpCisJCQkJCWJyZWFrOworCQkJCWlmIChiZl9nZXQobHBmY19zbGlwb3J0X3N0YXR1c19ybiwgJnJlZ19kYXRhKSkgeworCQkJCQlyZXNldF9hZ2FpbisrOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJbXNsZWVwKDEwKTsKKwkJCX0KKworCQkJLyoKKwkJCSAqIElmIHRoZSBwb3J0IHJlc3BvbmRzIHRvIHRoZSBpbml0IHJlcXVlc3Qgd2l0aAorCQkJICogcmVzZXQgbmVlZGVkLCBkZWxheSBmb3IgYSBiaXQgYW5kIHJlc3RhcnQgdGhlIGxvb3AuCisJCQkgKi8KKwkJCWlmIChyZXNldF9hZ2FpbikgeworCQkJCW1zbGVlcCgxMCk7CisJCQkJcmVzZXRfYWdhaW4gPSAwOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQkvKiBEZXRlY3QgYW55IHBvcnQgZXJyb3JzLiAqLworCQkJcmVnX2RhdGEud29yZDAgPSByZWFkbChwaGJhLT5zbGk0X2hiYS51LmlmX3R5cGUyLgorCQkJCQkgICAgICAgU1RBVFVTcmVnYWRkcik7CisJCQlpZiAoKGJmX2dldChscGZjX3NsaXBvcnRfc3RhdHVzX2VyciwgJnJlZ19kYXRhKSkgfHwKKwkJCSAgICAocmR5X2NoayA+PSAxMDAwKSkgeworCQkJCXBoYmEtPndvcmtfc3RhdHVzWzBdID0gcmVhZGwoCisJCQkJCXBoYmEtPnNsaTRfaGJhLnUuaWZfdHlwZTIuRVJSMXJlZ2FkZHIpOworCQkJCXBoYmEtPndvcmtfc3RhdHVzWzFdID0gcmVhZGwoCisJCQkJCXBoYmEtPnNsaTRfaGJhLnUuaWZfdHlwZTIuRVJSMnJlZ2FkZHIpOworCQkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0lOSVQsCisJCQkJCSIyODkwIFBvcnQgRXJyb3IgRGV0ZWN0ZWQgIgorCQkJCQkiZHVyaW5nIFBvcnQgUmVzZXQ6ICIKKwkJCQkJInBvcnQgc3RhdHVzIHJlZyAweCV4LCAiCisJCQkJCSJlcnJvciAxPTB4JXgsIGVycm9yIDI9MHgleFxuIiwKKwkJCQkJcmVnX2RhdGEud29yZDAsCisJCQkJCXBoYmEtPndvcmtfc3RhdHVzWzBdLAorCQkJCQlwaGJhLT53b3JrX3N0YXR1c1sxXSk7CisJCQkJcmMgPSAtRU5PREVWOworCQkJfQorCisJCQkvKgorCQkJICogVGVybWluYXRlIHRoZSBvdXRlciBsb29wIHByb3ZpZGVkIHRoZSBQb3J0IGluZGljYXRlZAorCQkJICogcmVhZHkgd2l0aGluIDEwIHNlY29uZHMuCisJCQkgKi8KKwkJCWlmIChyZHlfY2hrIDwgMTAwMCkKKwkJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwljYXNlIExQRkNfU0xJX0lOVEZfSUZfVFlQRV8xOgorCWRlZmF1bHQ6CisJCWJyZWFrOwogCX0KIAotCS8qIFNldCB1cCBQQ0kgZnVuY3Rpb24gcmVzZXQgU0xJNF9DT05GSUcgbWFpbGJveC1pb2N0bCBjb21tYW5kICovCi0JbHBmY19zbGk0X2NvbmZpZyhwaGJhLCBtYm94cSwgTFBGQ19NQk9YX1NVQlNZU1RFTV9DT01NT04sCi0JCQkgTFBGQ19NQk9YX09QQ09ERV9GVU5DVElPTl9SRVNFVCwgMCwKLQkJCSBMUEZDX1NMSTRfTUJYX0VNQkVEKTsKLQlyYyA9IGxwZmNfc2xpX2lzc3VlX21ib3gocGhiYSwgbWJveHEsIE1CWF9QT0xMKTsKLQlzaGRyID0gKHVuaW9uIGxwZmNfc2xpNF9jZmdfc2hkciAqKQotCQkmbWJveHEtPnUubXFlLnVuLnNsaTRfY29uZmlnLmhlYWRlci5jZmdfc2hkcjsKLQlzaGRyX3N0YXR1cyA9IGJmX2dldChscGZjX21ib3hfaGRyX3N0YXR1cywgJnNoZHItPnJlc3BvbnNlKTsKLQlzaGRyX2FkZF9zdGF0dXMgPSBiZl9nZXQobHBmY19tYm94X2hkcl9hZGRfc3RhdHVzLCAmc2hkci0+cmVzcG9uc2UpOwotCWlmIChyYyAhPSBNQlhfVElNRU9VVCkKLQkJbWVtcG9vbF9mcmVlKG1ib3hxLCBwaGJhLT5tYm94X21lbV9wb29sKTsKLQlpZiAoc2hkcl9zdGF0dXMgfHwgc2hkcl9hZGRfc3RhdHVzIHx8IHJjKSB7Ci0JCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0lOSVQsCi0JCQkJIjA0OTUgU0xJX0ZVTkNUSU9OX1JFU0VUIG1haWxib3ggZmFpbGVkIHdpdGggIgotCQkJCSJzdGF0dXMgeCV4IGFkZF9zdGF0dXMgeCV4LCBtYnggc3RhdHVzIHgleFxuIiwKLQkJCQlzaGRyX3N0YXR1cywgc2hkcl9hZGRfc3RhdHVzLCByYyk7Ci0JCXJjID0gLUVOWElPOwotCX0KKwkvKiBDYXRjaCB0aGUgbm90LXJlYWR5IHBvcnQgZmFpbHVyZSBhZnRlciBhIHBvcnQgcmVzZXQuICovCisJaWYgKG51bV9yZXNldHMgPj0gTUFYX0lGX1RZUEVfMl9SRVNFVFMpCisJCXJjID0gLUVOT0RFVjsKKwogCXJldHVybiByYzsKIH0KIApAQCAtNjUzNiw2ICs2OTAxLDcgQEAKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKIAl1bnNpZ25lZCBsb25nIGJhcjBtYXBfbGVuLCBiYXIxbWFwX2xlbiwgYmFyMm1hcF9sZW47CiAJaW50IGVycm9yID0gLUVOT0RFVjsKKwl1aW50MzJfdCBpZl90eXBlOwogCiAJLyogT2J0YWluIFBDSSBkZXZpY2UgcmVmZXJlbmNlICovCiAJaWYgKCFwaGJhLT5wY2lkZXYpCkBAIC02NTUyLDYxICs2OTE4LDEwNSBAQAogCQl9CiAJfQogCi0JLyogR2V0IHRoZSBidXMgYWRkcmVzcyBvZiBTTEk0IGRldmljZSBCYXIwLCBCYXIxLCBhbmQgQmFyMiBhbmQgdGhlCi0JICogbnVtYmVyIG9mIGJ5dGVzIHJlcXVpcmVkIGJ5IGVhY2ggbWFwcGluZy4gVGhleSBhcmUgYWN0dWFsbHkKLQkgKiBtYXBwaW5nIHRvIHRoZSBQQ0kgQkFSIHJlZ2lvbnMgMCBvciAxLCAyLCBhbmQgNCBieSB0aGUgU0xJNCBkZXZpY2UuCisJLyoKKwkgKiBUaGUgQkFScyBhbmQgcmVnaXN0ZXIgc2V0IGRlZmluaXRpb25zIGFuZCBvZmZzZXQgbG9jYXRpb25zIGFyZQorCSAqIGRlcGVuZGVudCBvbiB0aGUgaWZfdHlwZS4KKwkgKi8KKwlpZiAocGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIExQRkNfU0xJX0lOVEYsCisJCQkJICAmcGhiYS0+c2xpNF9oYmEuc2xpX2ludGYud29yZDApKSB7CisJCXJldHVybiBlcnJvcjsKKwl9CisKKwkvKiBUaGVyZSBpcyBubyBTTEkzIGZhaWxiYWNrIGZvciBTTEk0IGRldmljZXMuICovCisJaWYgKGJmX2dldChscGZjX3NsaV9pbnRmX3ZhbGlkLCAmcGhiYS0+c2xpNF9oYmEuc2xpX2ludGYpICE9CisJICAgIExQRkNfU0xJX0lOVEZfVkFMSUQpIHsKKwkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfSU5JVCwKKwkJCQkiMjg5NCBTTElfSU5URiByZWcgY29udGVudHMgaW52YWxpZCAiCisJCQkJInNsaV9pbnRmIHJlZyAweCV4XG4iLAorCQkJCXBoYmEtPnNsaTRfaGJhLnNsaV9pbnRmLndvcmQwKTsKKwkJcmV0dXJuIGVycm9yOworCX0KKworCWlmX3R5cGUgPSBiZl9nZXQobHBmY19zbGlfaW50Zl9pZl90eXBlLCAmcGhiYS0+c2xpNF9oYmEuc2xpX2ludGYpOworCS8qCisJICogR2V0IHRoZSBidXMgYWRkcmVzcyBvZiBTTEk0IGRldmljZSBCYXIgcmVnaW9ucyBhbmQgdGhlCisJICogbnVtYmVyIG9mIGJ5dGVzIHJlcXVpcmVkIGJ5IGVhY2ggbWFwcGluZy4gVGhlIG1hcHBpbmcgb2YgdGhlCisJICogcGFydGljdWxhciBQQ0kgQkFScyByZWdpb25zIGlzIGRlcGVuZGVudCBvbiB0aGUgdHlwZSBvZgorCSAqIFNMSTQgZGV2aWNlLgogCSAqLwogCWlmIChwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCkpIHsKIAkJcGhiYS0+cGNpX2JhcjBfbWFwID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOwogCQliYXIwbWFwX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCk7CisKKwkJLyoKKwkJICogTWFwIFNMSTQgUENJIENvbmZpZyBTcGFjZSBSZWdpc3RlciBiYXNlIHRvIGEga2VybmVsIHZpcnR1YWwKKwkJICogYWRkcgorCQkgKi8KKwkJcGhiYS0+c2xpNF9oYmEuY29uZl9yZWdzX21lbW1hcF9wID0KKwkJCWlvcmVtYXAocGhiYS0+cGNpX2JhcjBfbWFwLCBiYXIwbWFwX2xlbik7CisJCWlmICghcGhiYS0+c2xpNF9oYmEuY29uZl9yZWdzX21lbW1hcF9wKSB7CisJCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmcGRldi0+ZGV2LAorCQkJCSAgICJpb3JlbWFwIGZhaWxlZCBmb3IgU0xJNCBQQ0kgY29uZmlnICIKKwkJCQkgICAicmVnaXN0ZXJzLlxuIik7CisJCQlnb3RvIG91dDsKKwkJfQorCQkvKiBTZXQgdXAgQkFSMCBQQ0kgY29uZmlnIHNwYWNlIHJlZ2lzdGVyIG1lbW9yeSBtYXAgKi8KKwkJbHBmY19zbGk0X2JhcjBfcmVnaXN0ZXJfbWVtbWFwKHBoYmEsIGlmX3R5cGUpOwogCX0gZWxzZSB7CiAJCXBoYmEtPnBjaV9iYXIwX21hcCA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAxKTsKIAkJYmFyMG1hcF9sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDEpOwotCX0KLQlwaGJhLT5wY2lfYmFyMV9tYXAgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMik7Ci0JYmFyMW1hcF9sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDIpOwotCi0JcGhiYS0+cGNpX2JhcjJfbWFwID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDQpOwotCWJhcjJtYXBfbGVuID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCA0KTsKLQotCS8qIE1hcCBTTEk0IFBDSSBDb25maWcgU3BhY2UgUmVnaXN0ZXIgYmFzZSB0byBhIGtlcm5lbCB2aXJ0dWFsIGFkZHIgKi8KLQlwaGJhLT5zbGk0X2hiYS5jb25mX3JlZ3NfbWVtbWFwX3AgPQorCQlpZiAoaWZfdHlwZSA9PSBMUEZDX1NMSV9JTlRGX0lGX1RZUEVfMikgeworCQkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJnBkZXYtPmRldiwKKwkJCSAgICJGQVRBTCAtIE5vIEJBUjAgbWFwcGluZyBmb3IgU0xJNCwgaWZfdHlwZSAyXG4iKTsKKwkJCWdvdG8gb3V0OworCQl9CisJCXBoYmEtPnNsaTRfaGJhLmNvbmZfcmVnc19tZW1tYXBfcCA9CiAJCQkJaW9yZW1hcChwaGJhLT5wY2lfYmFyMF9tYXAsIGJhcjBtYXBfbGVuKTsKLQlpZiAoIXBoYmEtPnNsaTRfaGJhLmNvbmZfcmVnc19tZW1tYXBfcCkgewotCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmcGRldi0+ZGV2LAotCQkJICAgImlvcmVtYXAgZmFpbGVkIGZvciBTTEk0IFBDSSBjb25maWcgcmVnaXN0ZXJzLlxuIik7Ci0JCWdvdG8gb3V0OworCQlpZiAoIXBoYmEtPnNsaTRfaGJhLmNvbmZfcmVnc19tZW1tYXBfcCkgeworCQkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJnBkZXYtPmRldiwKKwkJCQkiaW9yZW1hcCBmYWlsZWQgZm9yIFNMSTQgUENJIGNvbmZpZyAiCisJCQkJInJlZ2lzdGVycy5cbiIpOworCQkJCWdvdG8gb3V0OworCQl9CisJCWxwZmNfc2xpNF9iYXIwX3JlZ2lzdGVyX21lbW1hcChwaGJhLCBpZl90eXBlKTsKIAl9CiAKLQkvKiBNYXAgU0xJNCBIQkEgQ29udHJvbCBSZWdpc3RlciBiYXNlIHRvIGEga2VybmVsIHZpcnR1YWwgYWRkcmVzcy4gKi8KLQlwaGJhLT5zbGk0X2hiYS5jdHJsX3JlZ3NfbWVtbWFwX3AgPQorCWlmIChwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMikpIHsKKwkJLyoKKwkJICogTWFwIFNMSTQgaWYgdHlwZSAwIEhCQSBDb250cm9sIFJlZ2lzdGVyIGJhc2UgdG8gYSBrZXJuZWwKKwkJICogdmlydHVhbCBhZGRyZXNzIGFuZCBzZXR1cCB0aGUgcmVnaXN0ZXJzLgorCQkgKi8KKwkJcGhiYS0+cGNpX2JhcjFfbWFwID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDIpOworCQliYXIxbWFwX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMik7CisJCXBoYmEtPnNsaTRfaGJhLmN0cmxfcmVnc19tZW1tYXBfcCA9CiAJCQkJaW9yZW1hcChwaGJhLT5wY2lfYmFyMV9tYXAsIGJhcjFtYXBfbGVuKTsKLQlpZiAoIXBoYmEtPnNsaTRfaGJhLmN0cmxfcmVnc19tZW1tYXBfcCkgewotCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmcGRldi0+ZGV2LAorCQlpZiAoIXBoYmEtPnNsaTRfaGJhLmN0cmxfcmVnc19tZW1tYXBfcCkgeworCQkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJnBkZXYtPmRldiwKIAkJCSAgICJpb3JlbWFwIGZhaWxlZCBmb3IgU0xJNCBIQkEgY29udHJvbCByZWdpc3RlcnMuXG4iKTsKLQkJZ290byBvdXRfaW91bm1hcF9jb25mOworCQkJZ290byBvdXRfaW91bm1hcF9jb25mOworCQl9CisJCWxwZmNfc2xpNF9iYXIxX3JlZ2lzdGVyX21lbW1hcChwaGJhKTsKIAl9CiAKLQkvKiBNYXAgU0xJNCBIQkEgRG9vcmJlbGwgUmVnaXN0ZXIgYmFzZSB0byBhIGtlcm5lbCB2aXJ0dWFsIGFkZHJlc3MuICovCi0JcGhiYS0+c2xpNF9oYmEuZHJibF9yZWdzX21lbW1hcF9wID0KKwlpZiAocGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDQpKSB7CisJCS8qCisJCSAqIE1hcCBTTEk0IGlmIHR5cGUgMCBIQkEgRG9vcmJlbGwgUmVnaXN0ZXIgYmFzZSB0byBhIGtlcm5lbAorCQkgKiB2aXJ0dWFsIGFkZHJlc3MgYW5kIHNldHVwIHRoZSByZWdpc3RlcnMuCisJCSAqLworCQlwaGJhLT5wY2lfYmFyMl9tYXAgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgNCk7CisJCWJhcjJtYXBfbGVuID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCA0KTsKKwkJcGhiYS0+c2xpNF9oYmEuZHJibF9yZWdzX21lbW1hcF9wID0KIAkJCQlpb3JlbWFwKHBoYmEtPnBjaV9iYXIyX21hcCwgYmFyMm1hcF9sZW4pOwotCWlmICghcGhiYS0+c2xpNF9oYmEuZHJibF9yZWdzX21lbW1hcF9wKSB7Ci0JCWRldl9wcmludGsoS0VSTl9FUlIsICZwZGV2LT5kZXYsCisJCWlmICghcGhiYS0+c2xpNF9oYmEuZHJibF9yZWdzX21lbW1hcF9wKSB7CisJCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmcGRldi0+ZGV2LAogCQkJICAgImlvcmVtYXAgZmFpbGVkIGZvciBTTEk0IEhCQSBkb29yYmVsbCByZWdpc3RlcnMuXG4iKTsKLQkJZ290byBvdXRfaW91bm1hcF9jdHJsOworCQkJZ290byBvdXRfaW91bm1hcF9jdHJsOworCQl9CisJCWVycm9yID0gbHBmY19zbGk0X2JhcjJfcmVnaXN0ZXJfbWVtbWFwKHBoYmEsIExQRkNfVkYwKTsKKwkJaWYgKGVycm9yKQorCQkJZ290byBvdXRfaW91bm1hcF9hbGw7CiAJfQogCi0JLyogU2V0IHVwIEJBUjAgUENJIGNvbmZpZyBzcGFjZSByZWdpc3RlciBtZW1vcnkgbWFwICovCi0JbHBmY19zbGk0X2JhcjBfcmVnaXN0ZXJfbWVtbWFwKHBoYmEpOwotCi0JLyogU2V0IHVwIEJBUjEgcmVnaXN0ZXIgbWVtb3J5IG1hcCAqLwotCWxwZmNfc2xpNF9iYXIxX3JlZ2lzdGVyX21lbW1hcChwaGJhKTsKLQotCS8qIFNldCB1cCBCQVIyIHJlZ2lzdGVyIG1lbW9yeSBtYXAgKi8KLQllcnJvciA9IGxwZmNfc2xpNF9iYXIyX3JlZ2lzdGVyX21lbW1hcChwaGJhLCBMUEZDX1ZGMCk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIG91dF9pb3VubWFwX2FsbDsKLQogCXJldHVybiAwOwogCiBvdXRfaW91bm1hcF9hbGw6CkBAIC04MTQ5LDYgKzg1NTksOCBAQAogCQlnb3RvIG91dF91bnNldF9kcml2ZXJfcmVzb3VyY2VfczQ7CiAJfQogCisJSU5JVF9MSVNUX0hFQUQoJnBoYmEtPmFjdGl2ZV9ycnFfbGlzdCk7CisKIAkvKiBTZXQgdXAgY29tbW9uIGRldmljZSBkcml2ZXIgcmVzb3VyY2VzICovCiAJZXJyb3IgPSBscGZjX3NldHVwX2RyaXZlcl9yZXNvdXJjZV9waGFzZTIocGhiYSk7CiAJaWYgKGVycm9yKSB7CkBAIC04MjE4LDcgKzg2MzAsMTEgQEAKIAkJCQkiMDQ1MSBDb25maWd1cmUgaW50ZXJydXB0IG1vZGUgKCVkKSAiCiAJCQkJImZhaWxlZCBhY3RpdmUgaW50ZXJydXB0IHRlc3QuXG4iLAogCQkJCWludHJfbW9kZSk7Ci0JCS8qIFVuc2V0IHRoZSBwcmVpdm91cyBTTEktNCBIQkEgc2V0dXAgKi8KKwkJLyogVW5zZXQgdGhlIHByZXZpb3VzIFNMSS00IEhCQSBzZXR1cC4gKi8KKwkJLyoKKwkJICogVE9ETzogIElzIHRoaXMgb3BlcmF0aW9uIGNvbXBhdGlibGUgd2l0aCBJRiBUWVBFIDIKKwkJICogZGV2aWNlcz8gIEFsbCBwb3J0IHN0YXRlIGlzIGRlbGV0ZWQgYW5kIGNsZWFyZWQuCisJCSAqLwogCQlscGZjX3NsaTRfdW5zZXRfaGJhKHBoYmEpOwogCQkvKiBUcnkgbmV4dCBsZXZlbCBvZiBpbnRlcnJ1cHQgbW9kZSAqLwogCQljZmdfbW9kZSA9IC0taW50cl9tb2RlOwpAQCAtODk5MCw2ICs5NDA2LDEwIEBACiAJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIH0sCiAJe1BDSV9WRU5ET1JfSURfRU1VTEVYLCBQQ0lfREVWSUNFX0lEX0JBTElVUywKIAkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgfSwKKwl7UENJX1ZFTkRPUl9JRF9FTVVMRVgsIFBDSV9ERVZJQ0VfSURfTEFOQ0VSX0ZDLAorCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCB9LAorCXtQQ0lfVkVORE9SX0lEX0VNVUxFWCwgUENJX0RFVklDRV9JRF9MQU5DRVJfRkNPRSwKKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgfSwKIAl7IDAgfQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19sb2dtc2cuaCBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbG9nbXNnLmgKaW5kZXggYmI1OWU5Mi4uZTNiNzkwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19sb2dtc2cuaAorKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2xvZ21zZy5oCkBAIC0zMyw3ICszMyw3IEBACiAjZGVmaW5lIExPR19GQ1BfRVJST1IJMHgwMDAwMTAwMAkvKiBsb2cgZXJyb3JzLCBub3QgdW5kZXJydW5zICovCiAjZGVmaW5lIExPR19MSUJERkMJMHgwMDAwMjAwMAkvKiBMaWJkZmMgZXZlbnRzICovCiAjZGVmaW5lIExPR19WUE9SVAkweDAwMDA0MDAwCS8qIE5QSVYgZXZlbnRzICovCi0jZGVmaW5lIExPRl9TRUNVUklUWQkweDAwMDA4MDAwCS8qIFNlY3VyaXR5IGV2ZW50cyAqLworI2RlZmluZSBMT0dfU0VDVVJJVFkJMHgwMDAwODAwMAkvKiBTZWN1cml0eSBldmVudHMgKi8KICNkZWZpbmUgTE9HX0VWRU5UCTB4MDAwMTAwMDAJLyogQ1QsVEVNUCxEVU1QLCBsb2dnaW5nICovCiAjZGVmaW5lIExPR19GSVAJCTB4MDAwMjAwMDAJLyogRklQIGV2ZW50cyAqLwogI2RlZmluZSBMT0dfQUxMX01TRwkweGZmZmZmZmZmCS8qIExPRyBhbGwgbWVzc2FnZXMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbWJveC5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19tYm94LmMKaW5kZXggNjJkMDk1Ny4uMjM0MDNjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19tYm94LmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19tYm94LmMKQEAgLTI2MywxOCArMjYzLDE5IEBACiB9CiAKIC8qKgotICogbHBmY19yZWFkX2xhIC0gUHJlcGFyZSBhIG1haWxib3ggY29tbWFuZCBmb3IgcmVhZGluZyBIQkEgbGluayBhdHRlbnRpb24KKyAqIGxwZmNfcmVhZF90b3BvbG9neSAtIFByZXBhcmUgYSBtYWlsYm94IGNvbW1hbmQgZm9yIHJlYWRpbmcgSEJBIHRvcG9sb2d5CiAgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KICAqIEBwbWI6IHBvaW50ZXIgdG8gdGhlIGRyaXZlciBpbnRlcm5hbCBxdWV1ZSBlbGVtZW50IGZvciBtYWlsYm94IGNvbW1hbmQuCiAgKiBAbXA6IERNQSBidWZmZXIgbWVtb3J5IGZvciByZWFkaW5nIHRoZSBsaW5rIGF0dGVudGlvbiBpbmZvcm1hdGlvbiBpbnRvLgogICoKLSAqIFRoZSByZWFkIGxpbmsgYXR0ZW50aW9uIG1haWxib3ggY29tbWFuZCBpcyBpc3N1ZWQgdG8gcmVhZCB0aGUgTGluayBFdmVudAotICogQXR0ZW50aW9uIGluZm9ybWF0aW9uIGluZGljYXRlZCBieSB0aGUgSEJBIHBvcnQgd2hlbiB0aGUgTGluayBFdmVudCBiaXQKLSAqIG9mIHRoZSBIb3N0IEF0dGVudGlvbiAoSFNUQVRUKSByZWdpc3RlciBpcyBzZXQgdG8gMS4gQSBMaW5rIEV2ZW50CisgKiBUaGUgcmVhZCB0b3BvbG9neSBtYWlsYm94IGNvbW1hbmQgaXMgaXNzdWVkIHRvIHJlYWQgdGhlIGxpbmsgdG9wb2xvZ3kKKyAqIGluZm9ybWF0aW9uIGluZGljYXRlZCBieSB0aGUgSEJBIHBvcnQgd2hlbiB0aGUgTGluayBFdmVudCBiaXQgb2YgdGhlIEhvc3QKKyAqIEF0dGVudGlvbiAoSFNUQVRUKSByZWdpc3RlciBpcyBzZXQgdG8gMSAoRm9yIFNMSS0zKSBvciB3aGVuIGFuIEZDIExpbmsKKyAqIEF0dGVudGlvbiBBQ1FFIGlzIHJlY2VpdmVkIGZyb20gdGhlIHBvcnQgKEZvciBTTEktNCkuIEEgTGluayBFdmVudAogICogQXR0ZW50aW9uIG9jY3VycyBiYXNlZCBvbiBhbiBleGNlcHRpb24gZGV0ZWN0ZWQgYXQgdGhlIEZpYnJlIENoYW5uZWwgbGluawogICogaW50ZXJmYWNlLgogICoKLSAqIFRoaXMgcm91dGluZSBwcmVwYXJlcyB0aGUgbWFpbGJveCBjb21tYW5kIGZvciByZWFkaW5nIEhCQSBsaW5rIGF0dGVudGlvbgorICogVGhpcyByb3V0aW5lIHByZXBhcmVzIHRoZSBtYWlsYm94IGNvbW1hbmQgZm9yIHJlYWRpbmcgSEJBIGxpbmsgdG9wb2xvZ3kKICAqIGluZm9ybWF0aW9uLiBBIERNQSBtZW1vcnkgaGFzIGJlZW4gc2V0IGFzaWRlIGFuZCBhZGRyZXNzIHBhc3NlZCB0byB0aGUKICAqIEhCQSB0aHJvdWdoIEBtcCBmb3IgdGhlIEhCQSB0byBETUEgbGluayBhdHRlbnRpb24gaW5mb3JtYXRpb24gaW50byB0aGUKICAqIG1lbW9yeSBhcyBwYXJ0IG9mIHRoZSBleGVjdXRpb24gb2YgdGhlIG1haWxib3ggY29tbWFuZC4KQEAgLTI4Myw3ICsyODQsOCBAQAogICogICAgMCAtIFN1Y2Nlc3MgKGN1cnJlbnRseSBhbHdheXMgcmV0dXJuIDApCiAgKiovCiBpbnQKLWxwZmNfcmVhZF9sYShzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhLCBMUEZDX01CT1hRX3QgKiBwbWIsIHN0cnVjdCBscGZjX2RtYWJ1ZiAqbXApCitscGZjX3JlYWRfdG9wb2xvZ3koc3RydWN0IGxwZmNfaGJhICpwaGJhLCBMUEZDX01CT1hRX3QgKnBtYiwKKwkJICAgc3RydWN0IGxwZmNfZG1hYnVmICptcCkKIHsKIAlNQUlMQk9YX3QgKm1iOwogCXN0cnVjdCBscGZjX3NsaSAqcHNsaTsKQEAgLTI5MywxNSArMjk1LDE1IEBACiAJbWVtc2V0KHBtYiwgMCwgc2l6ZW9mIChMUEZDX01CT1hRX3QpKTsKIAogCUlOSVRfTElTVF9IRUFEKCZtcC0+bGlzdCk7Ci0JbWItPm1ieENvbW1hbmQgPSBNQlhfUkVBRF9MQTY0OwotCW1iLT51bi52YXJSZWFkTEEudW4ubGlscEJkZTY0LnR1cy5mLmJkZVNpemUgPSAxMjg7Ci0JbWItPnVuLnZhclJlYWRMQS51bi5saWxwQmRlNjQuYWRkckhpZ2ggPSBwdXRQYWRkckhpZ2gobXAtPnBoeXMpOwotCW1iLT51bi52YXJSZWFkTEEudW4ubGlscEJkZTY0LmFkZHJMb3cgPSBwdXRQYWRkckxvdyhtcC0+cGh5cyk7CisJbWItPm1ieENvbW1hbmQgPSBNQlhfUkVBRF9UT1BPTE9HWTsKKwltYi0+dW4udmFyUmVhZFRvcC5saWxwQmRlNjQudHVzLmYuYmRlU2l6ZSA9IExQRkNfQUxQQV9NQVBfU0laRTsKKwltYi0+dW4udmFyUmVhZFRvcC5saWxwQmRlNjQuYWRkckhpZ2ggPSBwdXRQYWRkckhpZ2gobXAtPnBoeXMpOworCW1iLT51bi52YXJSZWFkVG9wLmxpbHBCZGU2NC5hZGRyTG93ID0gcHV0UGFkZHJMb3cobXAtPnBoeXMpOwogCiAJLyogU2F2ZSBhZGRyZXNzIGZvciBsYXRlciBjb21wbGV0aW9uIGFuZCBzZXQgdGhlIG93bmVyIHRvIGhvc3Qgc28gdGhhdAogCSAqIHRoZSBGVyBrbm93cyB0aGlzIG1haWxib3ggaXMgYXZhaWxhYmxlIGZvciBwcm9jZXNzaW5nLgogCSAqLwotCXBtYi0+Y29udGV4dDEgPSAodWludDhfdCAqKSBtcDsKKwlwbWItPmNvbnRleHQxID0gKHVpbnQ4X3QgKiltcDsKIAltYi0+bWJ4T3duZXIgPSBPV05fSE9TVDsKIAlyZXR1cm4gKDApOwogfQpAQCAtNTE2LDE4ICs1MTgsMzMgQEAKIAl2cGQgPSAmcGhiYS0+dnBkOwogCWlmICh2cGQtPnJldi5mZWFMZXZlbEhpZ2ggPj0gMHgwMil7CiAJCXN3aXRjaChsaW5rc3BlZWQpewotCQkJY2FzZSBMSU5LX1NQRUVEXzFHOgotCQkJY2FzZSBMSU5LX1NQRUVEXzJHOgotCQkJY2FzZSBMSU5LX1NQRUVEXzRHOgotCQkJY2FzZSBMSU5LX1NQRUVEXzhHOgotCQkJCW1iLT51bi52YXJJbml0TG5rLmxpbmtfZmxhZ3MgfD0KLQkJCQkJCQlGTEFHU19MSU5LX1NQRUVEOwotCQkJCW1iLT51bi52YXJJbml0TG5rLmxpbmtfc3BlZWQgPSBsaW5rc3BlZWQ7CisJCWNhc2UgTFBGQ19VU0VSX0xJTktfU1BFRURfMUc6CisJCQltYi0+dW4udmFySW5pdExuay5saW5rX2ZsYWdzIHw9IEZMQUdTX0xJTktfU1BFRUQ7CisJCQltYi0+dW4udmFySW5pdExuay5saW5rX3NwZWVkID0gTElOS19TUEVFRF8xRzsKIAkJCWJyZWFrOwotCQkJY2FzZSBMSU5LX1NQRUVEX0FVVE86Ci0JCQlkZWZhdWx0OgotCQkJCW1iLT51bi52YXJJbml0TG5rLmxpbmtfc3BlZWQgPQotCQkJCQkJCUxJTktfU1BFRURfQVVUTzsKKwkJY2FzZSBMUEZDX1VTRVJfTElOS19TUEVFRF8yRzoKKwkJCW1iLT51bi52YXJJbml0TG5rLmxpbmtfZmxhZ3MgfD0JRkxBR1NfTElOS19TUEVFRDsKKwkJCW1iLT51bi52YXJJbml0TG5rLmxpbmtfc3BlZWQgPSBMSU5LX1NQRUVEXzJHOworCQkJYnJlYWs7CisJCWNhc2UgTFBGQ19VU0VSX0xJTktfU1BFRURfNEc6CisJCQltYi0+dW4udmFySW5pdExuay5saW5rX2ZsYWdzIHw9CUZMQUdTX0xJTktfU1BFRUQ7CisJCQltYi0+dW4udmFySW5pdExuay5saW5rX3NwZWVkID0gTElOS19TUEVFRF80RzsKKwkJCWJyZWFrOworCQljYXNlIExQRkNfVVNFUl9MSU5LX1NQRUVEXzhHOgorCQkJbWItPnVuLnZhckluaXRMbmsubGlua19mbGFncyB8PQlGTEFHU19MSU5LX1NQRUVEOworCQkJbWItPnVuLnZhckluaXRMbmsubGlua19zcGVlZCA9IExJTktfU1BFRURfOEc7CisJCQlicmVhazsKKwkJY2FzZSBMUEZDX1VTRVJfTElOS19TUEVFRF8xMEc6CisJCQltYi0+dW4udmFySW5pdExuay5saW5rX2ZsYWdzIHw9CUZMQUdTX0xJTktfU1BFRUQ7CisJCQltYi0+dW4udmFySW5pdExuay5saW5rX3NwZWVkID0gTElOS19TUEVFRF8xMEc7CisJCQlicmVhazsKKwkJY2FzZSBMUEZDX1VTRVJfTElOS19TUEVFRF8xNkc6CisJCQltYi0+dW4udmFySW5pdExuay5saW5rX2ZsYWdzIHw9CUZMQUdTX0xJTktfU1BFRUQ7CisJCQltYi0+dW4udmFySW5pdExuay5saW5rX3NwZWVkID0gTElOS19TUEVFRF8xNkc7CisJCQlicmVhazsKKwkJY2FzZSBMUEZDX1VTRVJfTElOS19TUEVFRF9BVVRPOgorCQlkZWZhdWx0OgorCQkJbWItPnVuLnZhckluaXRMbmsubGlua19zcGVlZCA9IExJTktfU1BFRURfQVVUTzsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTY5Myw3ICs3MTAsNyBAQAogICogQGRpZDogcmVtb3RlIHBvcnQgaWRlbnRpZmllci4KICAqIEBwYXJhbTogcG9pbnRlciB0byBtZW1vcnkgaG9sZGluZyB0aGUgc2VydmVyIHBhcmFtZXRlcnMuCiAgKiBAcG1iOiBwb2ludGVyIHRvIHRoZSBkcml2ZXIgaW50ZXJuYWwgcXVldWUgZWxlbWVudCBmb3IgbWFpbGJveCBjb21tYW5kLgotICogQGZsYWc6IGFjdGlvbiBmbGFnIHRvIGJlIHBhc3NlZCBiYWNrIGZvciB0aGUgY29tcGxldGUgZnVuY3Rpb24uCisgKiBAcnBpOiB0aGUgcnBpIHRvIHVzZSBpbiB0aGUgcmVnaXN0cmF0aW9uICh1c3VhbGx5IG9ubHkgdXNlZCBmb3IgU0xJNC4KICAqCiAgKiBUaGUgcmVnaXN0cmF0aW9uIGxvZ2luIG1haWxib3ggY29tbWFuZCBpcyB1c2VkIHRvIHJlZ2lzdGVyIGFuIE5fUG9ydCBvcgogICogRl9Qb3J0IGxvZ2luLiBUaGlzIHJlZ2lzdHJhdGlvbiBhbGxvd3MgdGhlIEhCQSB0byBjYWNoZSB0aGUgcmVtb3RlIE5fUG9ydApAQCAtNzEyLDcgKzcyOSw3IEBACiAgKiovCiBpbnQKIGxwZmNfcmVnX3JwaShzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHVpbnQxNl90IHZwaSwgdWludDMyX3QgZGlkLAotCSAgICAgICB1aW50OF90ICpwYXJhbSwgTFBGQ19NQk9YUV90ICpwbWIsIHVpbnQzMl90IGZsYWcpCisJICAgICB1aW50OF90ICpwYXJhbSwgTFBGQ19NQk9YUV90ICpwbWIsIHVpbnQxNl90IHJwaSkKIHsKIAlNQUlMQk9YX3QgKm1iID0gJnBtYi0+dS5tYjsKIAl1aW50OF90ICpzcGFyYW07CkBAIC03MjIsMTcgKzczOSwxMyBAQAogCiAJbWItPnVuLnZhclJlZ0xvZ2luLnJwaSA9IDA7CiAJaWYgKHBoYmEtPnNsaV9yZXYgPT0gTFBGQ19TTElfUkVWNCkgewotCQltYi0+dW4udmFyUmVnTG9naW4ucnBpID0gbHBmY19zbGk0X2FsbG9jX3JwaShwaGJhKTsKKwkJbWItPnVuLnZhclJlZ0xvZ2luLnJwaSA9IHJwaTsKIAkJaWYgKG1iLT51bi52YXJSZWdMb2dpbi5ycGkgPT0gTFBGQ19SUElfQUxMT0NfRVJST1IpCiAJCQlyZXR1cm4gMTsKIAl9Ci0KIAltYi0+dW4udmFyUmVnTG9naW4udnBpID0gdnBpICsgcGhiYS0+dnBpX2Jhc2U7CiAJbWItPnVuLnZhclJlZ0xvZ2luLmRpZCA9IGRpZDsKLQltYi0+dW4udmFyV29yZHNbMzBdID0gZmxhZzsJLyogU2V0IGZsYWcgdG8gaXNzdWUgYWN0aW9uIG9uIGNtcGwgKi8KLQogCW1iLT5tYnhPd25lciA9IE9XTl9IT1NUOwotCiAJLyogR2V0IGEgYnVmZmVyIHRvIGhvbGQgTlBvcnRzIFNlcnZpY2UgUGFyYW1ldGVycyAqLwogCW1wID0ga21hbGxvYyhzaXplb2YgKHN0cnVjdCBscGZjX2RtYWJ1ZiksIEdGUF9LRVJORUwpOwogCWlmIChtcCkKQEAgLTc0Myw3ICs3NTYsNyBAQAogCQkvKiBSRUdfTE9HSU46IG5vIGJ1ZmZlcnMgKi8KIAkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fV0FSTklORywgTE9HX01CT1gsCiAJCQkJIjAzMDIgUkVHX0xPR0lOOiBubyBidWZmZXJzLCBWUEk6JWQgRElEOngleCwgIgotCQkJCSJmbGFnIHgleFxuIiwgdnBpLCBkaWQsIGZsYWcpOworCQkJCSJycGkgeCV4XG4iLCB2cGksIGRpZCwgcnBpKTsKIAkJcmV0dXJuICgxKTsKIAl9CiAJSU5JVF9MSVNUX0hFQUQoJm1wLT5saXN0KTsKQEAgLTE5MTgsMTEgKzE5MzEsMTQgQEAKIAlzdHJ1Y3QgbHBmY19tYnhfaW5pdF92ZmkgKmluaXRfdmZpOwogCiAJbWVtc2V0KG1ib3gsIDAsIHNpemVvZigqbWJveCkpOworCW1ib3gtPnZwb3J0ID0gdnBvcnQ7CiAJaW5pdF92ZmkgPSAmbWJveC0+dS5tcWUudW4uaW5pdF92Zmk7CiAJYmZfc2V0KGxwZmNfbXFlX2NvbW1hbmQsICZtYm94LT51Lm1xZSwgTUJYX0lOSVRfVkZJKTsKIAliZl9zZXQobHBmY19pbml0X3ZmaV92ciwgaW5pdF92ZmksIDEpOwogCWJmX3NldChscGZjX2luaXRfdmZpX3Z0LCBpbml0X3ZmaSwgMSk7CisJYmZfc2V0KGxwZmNfaW5pdF92ZmlfdnAsIGluaXRfdmZpLCAxKTsKIAliZl9zZXQobHBmY19pbml0X3ZmaV92ZmksIGluaXRfdmZpLCB2cG9ydC0+dmZpICsgdnBvcnQtPnBoYmEtPnZmaV9iYXNlKTsKKwliZl9zZXQobHBmY19pbml0X3ZwaV92cGksIGluaXRfdmZpLCB2cG9ydC0+dnBpICsgdnBvcnQtPnBoYmEtPnZwaV9iYXNlKTsKIAliZl9zZXQobHBmY19pbml0X3ZmaV9mY2ZpLCBpbml0X3ZmaSwgdnBvcnQtPnBoYmEtPmZjZi5mY2ZpKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19tZW0uYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbWVtLmMKaW5kZXggOGY4NzllNC4uY2JiNDhlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19tZW0uYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX21lbS5jCkBAIC0xMTMsMTEgKzExMywxNiBAQAogCQlnb3RvIGZhaWxfZnJlZV9tYm94X3Bvb2w7CiAKIAlpZiAocGhiYS0+c2xpX3JldiA9PSBMUEZDX1NMSV9SRVY0KSB7CisJCXBoYmEtPnJycV9wb29sID0KKwkJCW1lbXBvb2xfY3JlYXRlX2ttYWxsb2NfcG9vbChMUEZDX01FTV9QT09MX1NJWkUsCisJCQkJCQlzaXplb2Yoc3RydWN0IGxwZmNfbm9kZV9ycnEpKTsKKwkJaWYgKCFwaGJhLT5ycnFfcG9vbCkKKwkJCWdvdG8gZmFpbF9mcmVlX25scF9tZW1fcG9vbDsKIAkJcGhiYS0+bHBmY19ocmJfcG9vbCA9IHBjaV9wb29sX2NyZWF0ZSgibHBmY19ocmJfcG9vbCIsCiAJCQkJCSAgICAgIHBoYmEtPnBjaWRldiwKIAkJCQkJICAgICAgTFBGQ19IRFJfQlVGX1NJWkUsIGFsaWduLCAwKTsKIAkJaWYgKCFwaGJhLT5scGZjX2hyYl9wb29sKQotCQkJZ290byBmYWlsX2ZyZWVfbmxwX21lbV9wb29sOworCQkJZ290byBmYWlsX2ZyZWVfcnJxX21lbV9wb29sOwogCiAJCXBoYmEtPmxwZmNfZHJiX3Bvb2wgPSBwY2lfcG9vbF9jcmVhdGUoImxwZmNfZHJiX3Bvb2wiLAogCQkJCQkgICAgICBwaGJhLT5wY2lkZXYsCkBAIC0xNDcsNiArMTUyLDkgQEAKICBmYWlsX2ZyZWVfaHJiX3Bvb2w6CiAJcGNpX3Bvb2xfZGVzdHJveShwaGJhLT5scGZjX2hyYl9wb29sKTsKIAlwaGJhLT5scGZjX2hyYl9wb29sID0gTlVMTDsKKyBmYWlsX2ZyZWVfcnJxX21lbV9wb29sOgorCW1lbXBvb2xfZGVzdHJveShwaGJhLT5ycnFfcG9vbCk7CisJcGhiYS0+cnJxX3Bvb2wgPSBOVUxMOwogIGZhaWxfZnJlZV9ubHBfbWVtX3Bvb2w6CiAJbWVtcG9vbF9kZXN0cm95KHBoYmEtPm5scF9tZW1fcG9vbCk7CiAJcGhiYS0+bmxwX21lbV9wb29sID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbnBvcnRkaXNjLmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX25wb3J0ZGlzYy5jCmluZGV4IGJjY2M5YzYuLmQ4NWE3NDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbnBvcnRkaXNjLmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ucG9ydGRpc2MuYwpAQCAtMzg2LDcgKzM4Niw3IEBACiAJCWdvdG8gb3V0OwogCiAJcmMgPSBscGZjX3JlZ19ycGkocGhiYSwgdnBvcnQtPnZwaSwgaWNtZC0+dW4ucmN2ZWxzLnJlbW90ZUlELAotCQkJICAgICh1aW50OF90ICopIHNwLCBtYm94LCAwKTsKKwkJCSAgICAodWludDhfdCAqKSBzcCwgbWJveCwgbmRscC0+bmxwX3JwaSk7CiAJaWYgKHJjKSB7CiAJCW1lbXBvb2xfZnJlZShtYm94LCBwaGJhLT5tYm94X21lbV9wb29sKTsKIAkJZ290byBvdXQ7CkBAIC02MzIsNyArNjMyLDcgQEAKIHsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGxwZmNfc2hvc3RfZnJvbV92cG9ydCh2cG9ydCk7CiAKLQlpZiAoIShuZGxwLT5ubHBfZmxhZyAmIE5MUF9SUElfVkFMSUQpKSB7CisJaWYgKCEobmRscC0+bmxwX2ZsYWcgJiBOTFBfUlBJX1JFR0lTVEVSRUQpKSB7CiAJCW5kbHAtPm5scF9mbGFnICY9IH5OTFBfTlBSX0FESVNDOwogCQlyZXR1cm4gMDsKIAl9CkBAIC05NjgsNyArOTY4LDcgQEAKIAlscGZjX3VucmVnX3JwaSh2cG9ydCwgbmRscCk7CiAKIAlpZiAobHBmY19yZWdfcnBpKHBoYmEsIHZwb3J0LT52cGksIGlyc3AtPnVuLmVsc3JlcTY0LnJlbW90ZUlELAotCQkJICAgKHVpbnQ4X3QgKikgc3AsIG1ib3gsIDApID09IDApIHsKKwkJCSAodWludDhfdCAqKSBzcCwgbWJveCwgbmRscC0+bmxwX3JwaSkgPT0gMCkgewogCQlzd2l0Y2ggKG5kbHAtPm5scF9ESUQpIHsKIAkJY2FzZSBOYW1lU2VydmVyX0RJRDoKIAkJCW1ib3gtPm1ib3hfY21wbCA9IGxwZmNfbWJ4X2NtcGxfbnNfcmVnX2xvZ2luOwpAQCAtMTMzOCwxMiArMTMzOCw2IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1iLCBuZXh0bWIsICZwaGJhLT5zbGkubWJveHEsIGxpc3QpIHsKIAkJaWYgKChtYi0+dS5tYi5tYnhDb21tYW5kID09IE1CWF9SRUdfTE9HSU42NCkgJiYKIAkJICAgKG5kbHAgPT0gKHN0cnVjdCBscGZjX25vZGVsaXN0ICopIG1iLT5jb250ZXh0MikpIHsKLQkJCWlmIChwaGJhLT5zbGlfcmV2ID09IExQRkNfU0xJX1JFVjQpIHsKLQkJCQlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwotCQkJCWxwZmNfc2xpNF9mcmVlX3JwaShwaGJhLAotCQkJCQltYi0+dS5tYi51bi52YXJSZWdMb2dpbi5ycGkpOwotCQkJCXNwaW5fbG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwotCQkJfQogCQkJbXAgPSAoc3RydWN0IGxwZmNfZG1hYnVmICopIChtYi0+Y29udGV4dDEpOwogCQkJaWYgKG1wKSB7CiAJCQkJX19scGZjX21idWZfZnJlZShwaGJhLCBtcC0+dmlydCwgbXAtPnBoeXMpOwpAQCAtMTQyNiw3ICsxNDIwLDcgQEAKIAl9CiAKIAluZGxwLT5ubHBfcnBpID0gbWItPnVuLnZhcldvcmRzWzBdOwotCW5kbHAtPm5scF9mbGFnIHw9IE5MUF9SUElfVkFMSUQ7CisJbmRscC0+bmxwX2ZsYWcgfD0gTkxQX1JQSV9SRUdJU1RFUkVEOwogCiAJLyogT25seSBpZiB3ZSBhcmUgbm90IGEgZmFicmljIG5wb3J0IGRvIHdlIGlzc3VlIFBSTEkgKi8KIAlpZiAoIShuZGxwLT5ubHBfdHlwZSAmIE5MUF9GQUJSSUMpKSB7CkBAIC0yMDI3LDcgKzIwMjEsNyBAQAogCiAJaWYgKCFtYi0+bWJ4U3RhdHVzKSB7CiAJCW5kbHAtPm5scF9ycGkgPSBtYi0+dW4udmFyV29yZHNbMF07Ci0JCW5kbHAtPm5scF9mbGFnIHw9IE5MUF9SUElfVkFMSUQ7CisJCW5kbHAtPm5scF9mbGFnIHw9IE5MUF9SUElfUkVHSVNURVJFRDsKIAl9IGVsc2UgewogCQlpZiAobmRscC0+bmxwX2ZsYWcgJiBOTFBfTk9ERVZfUkVNT1ZFKSB7CiAJCQlscGZjX2Ryb3Bfbm9kZSh2cG9ydCwgbmRscCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Njc2kuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2NzaS5jCmluZGV4IDU4MTgzN2IuLmM5Nzc1MWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2NzaS5jCkBAIC02MjEsMTAgKzYyMSwxMyBAQAogCQkJICBzdHJ1Y3Qgc2xpNF93Y3FlX3hyaV9hYm9ydGVkICpheHJpKQogewogCXVpbnQxNl90IHhyaSA9IGJmX2dldChscGZjX3djcWVfeGFfeHJpLCBheHJpKTsKKwl1aW50MTZfdCByeGlkID0gYmZfZ2V0KGxwZmNfd2NxZV94YV9yZW1vdGVfeGlkLCBheHJpKTsKIAlzdHJ1Y3QgbHBmY19zY3NpX2J1ZiAqcHNiLCAqbmV4dF9wc2I7CiAJdW5zaWduZWQgbG9uZyBpZmxhZyA9IDA7CiAJc3RydWN0IGxwZmNfaW9jYnEgKmlvY2JxOwogCWludCBpOworCXN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwOworCWludCBycnFfZW1wdHkgPSAwOwogCXN0cnVjdCBscGZjX3NsaV9yaW5nICpwcmluZyA9ICZwaGJhLT5zbGkucmluZ1tMUEZDX0VMU19SSU5HXTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5oYmFsb2NrLCBpZmxhZyk7CkBAIC02MzcsOCArNjQwLDE0IEBACiAJCQlwc2ItPnN0YXR1cyA9IElPU1RBVF9TVUNDRVNTOwogCQkJc3Bpbl91bmxvY2soCiAJCQkJJnBoYmEtPnNsaTRfaGJhLmFidHNfc2NzaV9idWZfbGlzdF9sb2NrKTsKKwkJCW5kbHAgPSBwc2ItPnJkYXRhLT5wbm9kZTsKKwkJCXJycV9lbXB0eSA9IGxpc3RfZW1wdHkoJnBoYmEtPmFjdGl2ZV9ycnFfbGlzdCk7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLCBpZmxhZyk7CisJCQlpZiAobmRscCkKKwkJCQlscGZjX3NldF9ycnFfYWN0aXZlKHBoYmEsIG5kbHAsIHhyaSwgcnhpZCwgMSk7CiAJCQlscGZjX3JlbGVhc2Vfc2NzaV9idWZfczQocGhiYSwgcHNiKTsKKwkJCWlmIChycnFfZW1wdHkpCisJCQkJbHBmY193b3JrZXJfd2FrZV91cChwaGJhKTsKIAkJCXJldHVybjsKIAkJfQogCX0KQEAgLTkxNCw3ICs5MjMsNyBAQAogfQogCiAvKioKLSAqIGxwZmNfZ2V0X3Njc2lfYnVmIC0gR2V0IGEgc2NzaSBidWZmZXIgZnJvbSBscGZjX3Njc2lfYnVmX2xpc3Qgb2YgdGhlIEhCQQorICogbHBmY19nZXRfc2NzaV9idWZfczMgLSBHZXQgYSBzY3NpIGJ1ZmZlciBmcm9tIGxwZmNfc2NzaV9idWZfbGlzdCBvZiB0aGUgSEJBCiAgKiBAcGhiYTogVGhlIEhCQSBmb3Igd2hpY2ggdGhpcyBjYWxsIGlzIGJlaW5nIGV4ZWN1dGVkLgogICoKICAqIFRoaXMgcm91dGluZSByZW1vdmVzIGEgc2NzaSBidWZmZXIgZnJvbSBoZWFkIG9mIEBwaGJhIGxwZmNfc2NzaV9idWZfbGlzdCBsaXN0CkBAIC05MjUsNyArOTM0LDcgQEAKICAqICAgUG9pbnRlciB0byBscGZjX3Njc2lfYnVmIC0gU3VjY2VzcwogICoqLwogc3RhdGljIHN0cnVjdCBscGZjX3Njc2lfYnVmKgotbHBmY19nZXRfc2NzaV9idWYoc3RydWN0IGxwZmNfaGJhICogcGhiYSkKK2xwZmNfZ2V0X3Njc2lfYnVmX3MzKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHApCiB7CiAJc3RydWN0ICBscGZjX3Njc2lfYnVmICogbHBmY19jbWQgPSBOVUxMOwogCXN0cnVjdCBsaXN0X2hlYWQgKnNjc2lfYnVmX2xpc3QgPSAmcGhiYS0+bHBmY19zY3NpX2J1Zl9saXN0OwpAQCAtOTQxLDYgKzk1MCw2NyBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPnNjc2lfYnVmX2xpc3RfbG9jaywgaWZsYWcpOwogCXJldHVybiAgbHBmY19jbWQ7CiB9CisvKioKKyAqIGxwZmNfZ2V0X3Njc2lfYnVmX3M0IC0gR2V0IGEgc2NzaSBidWZmZXIgZnJvbSBscGZjX3Njc2lfYnVmX2xpc3Qgb2YgdGhlIEhCQQorICogQHBoYmE6IFRoZSBIQkEgZm9yIHdoaWNoIHRoaXMgY2FsbCBpcyBiZWluZyBleGVjdXRlZC4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcmVtb3ZlcyBhIHNjc2kgYnVmZmVyIGZyb20gaGVhZCBvZiBAcGhiYSBscGZjX3Njc2lfYnVmX2xpc3QgbGlzdAorICogYW5kIHJldHVybnMgdG8gY2FsbGVyLgorICoKKyAqIFJldHVybiBjb2RlczoKKyAqICAgTlVMTCAtIEVycm9yCisgKiAgIFBvaW50ZXIgdG8gbHBmY19zY3NpX2J1ZiAtIFN1Y2Nlc3MKKyAqKi8KK3N0YXRpYyBzdHJ1Y3QgbHBmY19zY3NpX2J1ZioKK2xwZmNfZ2V0X3Njc2lfYnVmX3M0KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHApCit7CisJc3RydWN0ICBscGZjX3Njc2lfYnVmICpscGZjX2NtZCA9IE5VTEw7CisJc3RydWN0ICBscGZjX3Njc2lfYnVmICpzdGFydF9scGZjX2NtZCA9IE5VTEw7CisJc3RydWN0IGxpc3RfaGVhZCAqc2NzaV9idWZfbGlzdCA9ICZwaGJhLT5scGZjX3Njc2lfYnVmX2xpc3Q7CisJdW5zaWduZWQgbG9uZyBpZmxhZyA9IDA7CisJaW50IGZvdW5kID0gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5zY3NpX2J1Zl9saXN0X2xvY2ssIGlmbGFnKTsKKwlsaXN0X3JlbW92ZV9oZWFkKHNjc2lfYnVmX2xpc3QsIGxwZmNfY21kLCBzdHJ1Y3QgbHBmY19zY3NpX2J1ZiwgbGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+c2NzaV9idWZfbGlzdF9sb2NrLCBpZmxhZyk7CisJd2hpbGUgKCFmb3VuZCAmJiBscGZjX2NtZCkgeworCQlpZiAobHBmY190ZXN0X3JycV9hY3RpdmUocGhiYSwgbmRscCwKKwkJCQkJIGxwZmNfY21kLT5jdXJfaW9jYnEuc2xpNF94cml0YWcpKSB7CisJCQlscGZjX3JlbGVhc2Vfc2NzaV9idWZfczQocGhiYSwgbHBmY19jbWQpOworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPnNjc2lfYnVmX2xpc3RfbG9jaywgaWZsYWcpOworCQkJbGlzdF9yZW1vdmVfaGVhZChzY3NpX2J1Zl9saXN0LCBscGZjX2NtZCwKKwkJCQkJIHN0cnVjdCBscGZjX3Njc2lfYnVmLCBsaXN0KTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPnNjc2lfYnVmX2xpc3RfbG9jaywKKwkJCQkJCSBpZmxhZyk7CisJCQlpZiAobHBmY19jbWQgPT0gc3RhcnRfbHBmY19jbWQpIHsKKwkJCQlscGZjX2NtZCA9IE5VTEw7CisJCQkJYnJlYWs7CisJCQl9IGVsc2UKKwkJCQljb250aW51ZTsKKwkJfQorCQlmb3VuZCA9IDE7CisJCWxwZmNfY21kLT5zZWdfY250ID0gMDsKKwkJbHBmY19jbWQtPm5vbnNnX3BoeXMgPSAwOworCQlscGZjX2NtZC0+cHJvdF9zZWdfY250ID0gMDsKKwl9CisJcmV0dXJuICBscGZjX2NtZDsKK30KKy8qKgorICogbHBmY19nZXRfc2NzaV9idWYgLSBHZXQgYSBzY3NpIGJ1ZmZlciBmcm9tIGxwZmNfc2NzaV9idWZfbGlzdCBvZiB0aGUgSEJBCisgKiBAcGhiYTogVGhlIEhCQSBmb3Igd2hpY2ggdGhpcyBjYWxsIGlzIGJlaW5nIGV4ZWN1dGVkLgorICoKKyAqIFRoaXMgcm91dGluZSByZW1vdmVzIGEgc2NzaSBidWZmZXIgZnJvbSBoZWFkIG9mIEBwaGJhIGxwZmNfc2NzaV9idWZfbGlzdCBsaXN0CisgKiBhbmQgcmV0dXJucyB0byBjYWxsZXIuCisgKgorICogUmV0dXJuIGNvZGVzOgorICogICBOVUxMIC0gRXJyb3IKKyAqICAgUG9pbnRlciB0byBscGZjX3Njc2lfYnVmIC0gU3VjY2VzcworICoqLworc3RhdGljIHN0cnVjdCBscGZjX3Njc2lfYnVmKgorbHBmY19nZXRfc2NzaV9idWYoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCkKK3sKKwlyZXR1cm4gIHBoYmEtPmxwZmNfZ2V0X3Njc2lfYnVmKHBoYmEsIG5kbHApOworfQogCiAvKioKICAqIGxwZmNfcmVsZWFzZV9zY3NpX2J1ZiAtIFJldHVybiBhIHNjc2kgYnVmZmVyIGJhY2sgdG8gaGJhIHNjc2kgYnVmIGxpc3QKQEAgLTI3NDQsMTggKzI4MTQsMTkgQEAKIAogCXBoYmEtPmxwZmNfc2NzaV91bnByZXBfZG1hX2J1ZiA9IGxwZmNfc2NzaV91bnByZXBfZG1hX2J1ZjsKIAlwaGJhLT5scGZjX3Njc2lfcHJlcF9jbW5kID0gbHBmY19zY3NpX3ByZXBfY21uZDsKLQlwaGJhLT5scGZjX2dldF9zY3NpX2J1ZiA9IGxwZmNfZ2V0X3Njc2lfYnVmOwogCiAJc3dpdGNoIChkZXZfZ3JwKSB7CiAJY2FzZSBMUEZDX1BDSV9ERVZfTFA6CiAJCXBoYmEtPmxwZmNfbmV3X3Njc2lfYnVmID0gbHBmY19uZXdfc2NzaV9idWZfczM7CiAJCXBoYmEtPmxwZmNfc2NzaV9wcmVwX2RtYV9idWYgPSBscGZjX3Njc2lfcHJlcF9kbWFfYnVmX3MzOwogCQlwaGJhLT5scGZjX3JlbGVhc2Vfc2NzaV9idWYgPSBscGZjX3JlbGVhc2Vfc2NzaV9idWZfczM7CisJCXBoYmEtPmxwZmNfZ2V0X3Njc2lfYnVmID0gbHBmY19nZXRfc2NzaV9idWZfczM7CiAJCWJyZWFrOwogCWNhc2UgTFBGQ19QQ0lfREVWX09DOgogCQlwaGJhLT5scGZjX25ld19zY3NpX2J1ZiA9IGxwZmNfbmV3X3Njc2lfYnVmX3M0OwogCQlwaGJhLT5scGZjX3Njc2lfcHJlcF9kbWFfYnVmID0gbHBmY19zY3NpX3ByZXBfZG1hX2J1Zl9zNDsKIAkJcGhiYS0+bHBmY19yZWxlYXNlX3Njc2lfYnVmID0gbHBmY19yZWxlYXNlX3Njc2lfYnVmX3M0OworCQlwaGJhLT5scGZjX2dldF9zY3NpX2J1ZiA9IGxwZmNfZ2V0X3Njc2lfYnVmX3M0OwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19JTklULApAQCAtMjc2NCw3ICsyODM1LDYgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJCWJyZWFrOwogCX0KLQlwaGJhLT5scGZjX2dldF9zY3NpX2J1ZiA9IGxwZmNfZ2V0X3Njc2lfYnVmOwogCXBoYmEtPmxwZmNfcmFtcGRvd25fcXVldWVfZGVwdGggPSBscGZjX3JhbXBkb3duX3F1ZXVlX2RlcHRoOwogCXBoYmEtPmxwZmNfc2NzaV9jbWRfaW9jYl9jbXBsID0gbHBmY19zY3NpX2NtZF9pb2NiX2NtcGw7CiAJcmV0dXJuIDA7CkBAIC0yOTQwLDcgKzMwMTAsNyBAQAogCWlmIChhdG9taWNfcmVhZCgmbmRscC0+Y21kX3BlbmRpbmcpID49IG5kbHAtPmNtZF9xZGVwdGgpCiAJCWdvdG8gb3V0X2hvc3RfYnVzeTsKIAotCWxwZmNfY21kID0gbHBmY19nZXRfc2NzaV9idWYocGhiYSk7CisJbHBmY19jbWQgPSBscGZjX2dldF9zY3NpX2J1ZihwaGJhLCBuZGxwKTsKIAlpZiAobHBmY19jbWQgPT0gTlVMTCkgewogCQlscGZjX3JhbXBkb3duX3F1ZXVlX2RlcHRoKHBoYmEpOwogCkBAIC0zMjM5LDcgKzMzMDksNyBAQAogCWlmICghcG5vZGUgfHwgIU5MUF9DSEtfTk9ERV9BQ1QocG5vZGUpKQogCQlyZXR1cm4gRkFJTEVEOwogCi0JbHBmY19jbWQgPSBscGZjX2dldF9zY3NpX2J1ZihwaGJhKTsKKwlscGZjX2NtZCA9IGxwZmNfZ2V0X3Njc2lfYnVmKHBoYmEsIHJkYXRhLT5wbm9kZSk7CiAJaWYgKGxwZmNfY21kID09IE5VTEwpCiAJCXJldHVybiBGQUlMRUQ7CiAJbHBmY19jbWQtPnRpbWVvdXQgPSA2MDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpLmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3NsaS5jCmluZGV4IDU1NGVmYTYuLjYzNGIyZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpLmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zbGkuYwpAQCAtNTEzLDggKzUxMywzNDQgQEAKIH0KIAogLyoqCisgKiBfX2xwZmNfc2V0X3JycV9hY3RpdmUgLSBzZXQgUlJRIGFjdGl2ZSBiaXQgaW4gdGhlIG5kbHAncyB4cmlfYml0bWFwLgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQG5kbHA6IG5vZGVsaXN0IHBvaW50ZXIgZm9yIHRoaXMgdGFyZ2V0LgorICogQHhyaXRhZzogeHJpIHVzZWQgaW4gdGhpcyBleGNoYW5nZS4KKyAqIEByeGlkOiBSZW1vdGUgRXhjaGFuZ2UgSUQuCisgKiBAc2VuZF9ycnE6IEZsYWcgdXNlZCB0byBkZXRlcm1pbmUgaWYgd2Ugc2hvdWxkIHNlbmQgcnJxIGVscyBjbWQuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBoYmFsb2NrIGhlbGQuCisgKiBUaGUgYWN0aXZlIGJpdCBpcyBzZXQgaW4gdGhlIG5kbHAncyBhY3RpdmUgcnJxIHhyaV9iaXRtYXAuIEFsbG9jYXRlcyBhbgorICogcnJxIHN0cnVjdCBhbmQgYWRkcyBpdCB0byB0aGUgYWN0aXZlX3JycV9saXN0LgorICoKKyAqIHJldHVybnMgIDAgZm9yIHJycSBzbG90IGZvciB0aGlzIHhyaQorICogICAgICAgICA8IDAgIFdlcmUgbm90IGFibGUgdG8gZ2V0IHJycSBtZW0gb3IgaW52YWxpZCBwYXJhbWV0ZXIuCisgKiovCitzdGF0aWMgaW50CitfX2xwZmNfc2V0X3JycV9hY3RpdmUoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCwKKwkJdWludDE2X3QgeHJpdGFnLCB1aW50MTZfdCByeGlkLCB1aW50MTZfdCBzZW5kX3JycSkKK3sKKwl1aW50MTZfdCBhZGpfeHJpOworCXN0cnVjdCBscGZjX25vZGVfcnJxICpycnE7CisJaW50IGVtcHR5OworCisJLyoKKwkgKiBzZXQgdGhlIGFjdGl2ZSBiaXQgZXZlbiBpZiB0aGVyZSBpcyBubyBtZW0gYXZhaWxhYmxlLgorCSAqLworCWFkal94cmkgPSB4cml0YWcgLSBwaGJhLT5zbGk0X2hiYS5tYXhfY2ZnX3BhcmFtLnhyaV9iYXNlOworCWlmICghbmRscCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKHRlc3RfYW5kX3NldF9iaXQoYWRqX3hyaSwgbmRscC0+YWN0aXZlX3JycXMueHJpX2JpdG1hcCkpCisJCXJldHVybiAtRUlOVkFMOworCXJycSA9IG1lbXBvb2xfYWxsb2MocGhiYS0+cnJxX3Bvb2wsIEdGUF9LRVJORUwpOworCWlmIChycnEpIHsKKwkJcnJxLT5zZW5kX3JycSA9IHNlbmRfcnJxOworCQlycnEtPnhyaXRhZyA9IHhyaXRhZzsKKwkJcnJxLT5ycnFfc3RvcF90aW1lID0gamlmZmllcyArIEhaICogKHBoYmEtPmZjX3JhdG92ICsgMSk7CisJCXJycS0+bmRscCA9IG5kbHA7CisJCXJycS0+bmxwX0RJRCA9IG5kbHAtPm5scF9ESUQ7CisJCXJycS0+dnBvcnQgPSBuZGxwLT52cG9ydDsKKwkJcnJxLT5yeGlkID0gcnhpZDsKKwkJZW1wdHkgPSBsaXN0X2VtcHR5KCZwaGJhLT5hY3RpdmVfcnJxX2xpc3QpOworCQlpZiAocGhiYS0+Y2ZnX2VuYWJsZV9ycnEgJiYgc2VuZF9ycnEpCisJCQkvKgorCQkJICogV2UgbmVlZCB0aGUgeHJpIGJlZm9yZSB3ZSBjYW4gYWRkIHRoaXMgdG8gdGhlCisJCQkgKiBwaGJhIGFjdGl2ZSBycnEgbGlzdC4KKwkJCSAqLworCQkJcnJxLT5zZW5kX3JycSA9IHNlbmRfcnJxOworCQllbHNlCisJCQlycnEtPnNlbmRfcnJxID0gMDsKKwkJbGlzdF9hZGRfdGFpbCgmcnJxLT5saXN0LCAmcGhiYS0+YWN0aXZlX3JycV9saXN0KTsKKwkJaWYgKCEocGhiYS0+aGJhX2ZsYWcgJiBIQkFfUlJRX0FDVElWRSkpIHsKKwkJCXBoYmEtPmhiYV9mbGFnIHw9IEhCQV9SUlFfQUNUSVZFOworCQkJaWYgKGVtcHR5KQorCQkJCWxwZmNfd29ya2VyX3dha2VfdXAocGhiYSk7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtRU5PTUVNOworfQorCisvKioKKyAqIF9fbHBmY19jbHJfcnJxX2FjdGl2ZSAtIENsZWFycyBSUlEgYWN0aXZlIGJpdCBpbiB4cmlfYml0bWFwLgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQHhyaXRhZzogeHJpIHVzZWQgaW4gdGhpcyBleGNoYW5nZS4KKyAqIEBycnE6IFRoZSBSUlEgdG8gYmUgY2xlYXJlZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIGhiYWxvY2sgaGVsZC4gVGhpcyBmdW5jdGlvbgorICoqLworc3RhdGljIHZvaWQKK19fbHBmY19jbHJfcnJxX2FjdGl2ZShzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsCisJCQl1aW50MTZfdCB4cml0YWcsCisJCQlzdHJ1Y3QgbHBmY19ub2RlX3JycSAqcnJxKQoreworCXVpbnQxNl90IGFkal94cmk7CisJc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHA7CisKKwluZGxwID0gbHBmY19maW5kbm9kZV9kaWQocnJxLT52cG9ydCwgcnJxLT5ubHBfRElEKTsKKworCS8qIFRoZSB0YXJnZXQgRElEIGNvdWxkIGhhdmUgYmVlbiBzd2FwcGVkIChjYWJsZSBzd2FwKQorCSAqIHdlIHNob3VsZCB1c2UgdGhlIG5kbHAgZnJvbSB0aGUgZmluZG5vZGUgaWYgaXQgaXMKKwkgKiBhdmFpbGFibGUuCisJICovCisJaWYgKCFuZGxwKQorCQluZGxwID0gcnJxLT5uZGxwOworCisJYWRqX3hyaSA9IHhyaXRhZyAtIHBoYmEtPnNsaTRfaGJhLm1heF9jZmdfcGFyYW0ueHJpX2Jhc2U7CisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChhZGpfeHJpLCBuZGxwLT5hY3RpdmVfcnJxcy54cmlfYml0bWFwKSkgeworCQlycnEtPnNlbmRfcnJxID0gMDsKKwkJcnJxLT54cml0YWcgPSAwOworCQlycnEtPnJycV9zdG9wX3RpbWUgPSAwOworCX0KKwltZW1wb29sX2ZyZWUocnJxLCBwaGJhLT5ycnFfcG9vbCk7Cit9CisKKy8qKgorICogbHBmY19oYW5kbGVfcnJxX2FjdGl2ZSAtIENoZWNrcyBpZiBSUlEgaGFzIHdhaXRoZWQgUkFUT1YuCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBoYmFsb2NrIGhlbGQuIFRoaXMgZnVuY3Rpb24KKyAqIENoZWNrcyBpZiBzdG9wX3RpbWUgKHJhdG92IGZyb20gc2V0dGluZyBycnEgYWN0aXZlKSBoYXMKKyAqIGJlZW4gcmVhY2hlZCwgaWYgaXQgaGFzIGFuZCB0aGUgc2VuZF9ycnEgZmxhZyBpcyBzZXQgdGhlbgorICogaXQgd2lsbCBjYWxsIGxwZmNfc2VuZF9ycnEuIElmIHRoZSBzZW5kX3JycSBmbGFnIGlzIG5vdCBzZXQKKyAqIHRoZW4gaXQgd2lsbCBqdXN0IGNhbGwgdGhlIHJvdXRpbmUgdG8gY2xlYXIgdGhlIHJycSBhbmQKKyAqIGZyZWUgdGhlIHJycSByZXNvdXJjZS4KKyAqIFRoZSB0aW1lciBpcyBzZXQgdG8gdGhlIG5leHQgcnJxIHRoYXQgaXMgZ29pbmcgdG8gZXhwaXJlIGJlZm9yZQorICogbGVhdmluZyB0aGUgcm91dGluZS4KKyAqCisgKiovCit2b2lkCitscGZjX2hhbmRsZV9ycnFfYWN0aXZlKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKK3sKKwlzdHJ1Y3QgbHBmY19ub2RlX3JycSAqcnJxOworCXN0cnVjdCBscGZjX25vZGVfcnJxICpuZXh0cnJxOworCXVuc2lnbmVkIGxvbmcgbmV4dF90aW1lOworCXVuc2lnbmVkIGxvbmcgaWZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmhiYWxvY2ssIGlmbGFncyk7CisJcGhiYS0+aGJhX2ZsYWcgJj0gfkhCQV9SUlFfQUNUSVZFOworCW5leHRfdGltZSA9IGppZmZpZXMgKyBIWiAqIChwaGJhLT5mY19yYXRvdiArIDEpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShycnEsIG5leHRycnEsCisJCQkmcGhiYS0+YWN0aXZlX3JycV9saXN0LCBsaXN0KSB7CisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHJycS0+cnJxX3N0b3BfdGltZSkpIHsKKwkJCWxpc3RfZGVsKCZycnEtPmxpc3QpOworCQkJaWYgKCFycnEtPnNlbmRfcnJxKQorCQkJCS8qIHRoaXMgY2FsbCB3aWxsIGZyZWUgdGhlIHJycSAqLworCQkJCV9fbHBmY19jbHJfcnJxX2FjdGl2ZShwaGJhLCBycnEtPnhyaXRhZywgcnJxKTsKKwkJCWVsc2UgeworCQkJLyogaWYgd2Ugc2VuZCB0aGUgcnJxIHRoZW4gdGhlIGNvbXBsZXRpb24gaGFuZGxlcgorCQkJICogIHdpbGwgY2xlYXIgdGhlIGJpdCBpbiB0aGUgeHJpYml0bWFwLgorCQkJICovCisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywgaWZsYWdzKTsKKwkJCQlpZiAobHBmY19zZW5kX3JycShwaGJhLCBycnEpKSB7CisJCQkJCWxwZmNfY2xyX3JycV9hY3RpdmUocGhiYSwgcnJxLT54cml0YWcsCisJCQkJCQkJCSBycnEpOworCQkJCX0KKwkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+aGJhbG9jaywgaWZsYWdzKTsKKwkJCX0KKwkJfSBlbHNlIGlmICAodGltZV9iZWZvcmUocnJxLT5ycnFfc3RvcF90aW1lLCBuZXh0X3RpbWUpKQorCQkJbmV4dF90aW1lID0gcnJxLT5ycnFfc3RvcF90aW1lOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLCBpZmxhZ3MpOworCWlmICghbGlzdF9lbXB0eSgmcGhiYS0+YWN0aXZlX3JycV9saXN0KSkKKwkJbW9kX3RpbWVyKCZwaGJhLT5ycnFfdG1yLCBuZXh0X3RpbWUpOworfQorCisvKioKKyAqIGxwZmNfZ2V0X2FjdGl2ZV9ycnEgLSBHZXQgdGhlIGFjdGl2ZSBSUlEgZm9yIHRoaXMgZXhjaGFuZ2UuCisgKiBAdnBvcnQ6IFBvaW50ZXIgdG8gdnBvcnQgY29udGV4dCBvYmplY3QuCisgKiBAeHJpOiBUaGUgeHJpIHVzZWQgaW4gdGhlIGV4Y2hhbmdlLgorICogQGRpZDogVGhlIHRhcmdldHMgRElEIGZvciB0aGlzIGV4Y2hhbmdlLgorICoKKyAqIHJldHVybnMgTlVMTCA9IHJycSBub3QgZm91bmQgaW4gdGhlIHBoYmEtPmFjdGl2ZV9ycnFfbGlzdC4KKyAqICAgICAgICAgcnJxID0gcnJxIGZvciB0aGlzIHhyaSBhbmQgdGFyZ2V0LgorICoqLworc3RydWN0IGxwZmNfbm9kZV9ycnEgKgorbHBmY19nZXRfYWN0aXZlX3JycShzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQsIHVpbnQxNl90IHhyaSwgdWludDMyX3QgZGlkKQoreworCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IHZwb3J0LT5waGJhOworCXN0cnVjdCBscGZjX25vZGVfcnJxICpycnE7CisJc3RydWN0IGxwZmNfbm9kZV9ycnEgKm5leHRycnE7CisJdW5zaWduZWQgbG9uZyBpZmxhZ3M7CisKKwlpZiAocGhiYS0+c2xpX3JldiAhPSBMUEZDX1NMSV9SRVY0KQorCQlyZXR1cm4gTlVMTDsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+aGJhbG9jaywgaWZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnJxLCBuZXh0cnJxLCAmcGhiYS0+YWN0aXZlX3JycV9saXN0LCBsaXN0KSB7CisJCWlmIChycnEtPnZwb3J0ID09IHZwb3J0ICYmIHJycS0+eHJpdGFnID09IHhyaSAmJgorCQkJCXJycS0+bmxwX0RJRCA9PSBkaWQpeworCQkJbGlzdF9kZWwoJnJycS0+bGlzdCk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLCBpZmxhZ3MpOworCQkJcmV0dXJuIHJycTsKKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLCBpZmxhZ3MpOworCXJldHVybiBOVUxMOworfQorCisvKioKKyAqIGxwZmNfY2xlYW51cF92cG9ydHNfcnJxcyAtIFJlbW92ZSBhbmQgY2xlYXIgdGhlIGFjdGl2ZSBSUlEgZm9yIHRoaXMgdnBvcnQuCisgKiBAdnBvcnQ6IFBvaW50ZXIgdG8gdnBvcnQgY29udGV4dCBvYmplY3QuCisgKgorICogUmVtb3ZlIGFsbCBhY3RpdmUgUlJRcyBmb3IgdGhpcyB2cG9ydCBmcm9tIHRoZSBwaGJhLT5hY3RpdmVfcnJxX2xpc3QgYW5kCisgKiBjbGVhciB0aGUgcnJxLgorICoqLwordm9pZAorbHBmY19jbGVhbnVwX3Zwb3J0c19ycnFzKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCkKKworeworCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IHZwb3J0LT5waGJhOworCXN0cnVjdCBscGZjX25vZGVfcnJxICpycnE7CisJc3RydWN0IGxwZmNfbm9kZV9ycnEgKm5leHRycnE7CisJdW5zaWduZWQgbG9uZyBpZmxhZ3M7CisKKwlpZiAocGhiYS0+c2xpX3JldiAhPSBMUEZDX1NMSV9SRVY0KQorCQlyZXR1cm47CisJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmhiYWxvY2ssIGlmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJycSwgbmV4dHJycSwgJnBoYmEtPmFjdGl2ZV9ycnFfbGlzdCwgbGlzdCkgeworCQlpZiAocnJxLT52cG9ydCA9PSB2cG9ydCkgeworCQkJbGlzdF9kZWwoJnJycS0+bGlzdCk7CisJCQlfX2xwZmNfY2xyX3JycV9hY3RpdmUocGhiYSwgcnJxLT54cml0YWcsIHJycSk7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywgaWZsYWdzKTsKK30KKworLyoqCisgKiBscGZjX2NsZWFudXBfd3RfcnJxcyAtIFJlbW92ZSBhbGwgcnJxJ3MgZnJvbSB0aGUgYWN0aXZlIGxpc3QuCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKgorICogUmVtb3ZlIGFsbCBycnFzIGZyb20gdGhlIHBoYmEtPmFjdGl2ZV9ycnFfbGlzdCBhbmQgZnJlZSB0aGVtIGJ5CisgKiBjYWxsaW5nIF9fbHBmY19jbHJfYWN0aXZlX3JycQorICoKKyAqKi8KK3ZvaWQKK2xwZmNfY2xlYW51cF93dF9ycnFzKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKK3sKKwlzdHJ1Y3QgbHBmY19ub2RlX3JycSAqcnJxOworCXN0cnVjdCBscGZjX25vZGVfcnJxICpuZXh0cnJxOworCXVuc2lnbmVkIGxvbmcgbmV4dF90aW1lOworCXVuc2lnbmVkIGxvbmcgaWZsYWdzOworCisJaWYgKHBoYmEtPnNsaV9yZXYgIT0gTFBGQ19TTElfUkVWNCkKKwkJcmV0dXJuOworCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5oYmFsb2NrLCBpZmxhZ3MpOworCXBoYmEtPmhiYV9mbGFnICY9IH5IQkFfUlJRX0FDVElWRTsKKwluZXh0X3RpbWUgPSBqaWZmaWVzICsgSFogKiAocGhiYS0+ZmNfcmF0b3YgKiAyKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnJxLCBuZXh0cnJxLCAmcGhiYS0+YWN0aXZlX3JycV9saXN0LCBsaXN0KSB7CisJCWxpc3RfZGVsKCZycnEtPmxpc3QpOworCQlfX2xwZmNfY2xyX3JycV9hY3RpdmUocGhiYSwgcnJxLT54cml0YWcsIHJycSk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssIGlmbGFncyk7CisJaWYgKCFsaXN0X2VtcHR5KCZwaGJhLT5hY3RpdmVfcnJxX2xpc3QpKQorCQltb2RfdGltZXIoJnBoYmEtPnJycV90bXIsIG5leHRfdGltZSk7Cit9CisKKworLyoqCisgKiBfX2xwZmNfdGVzdF9ycnFfYWN0aXZlIC0gVGVzdCBSUlEgYml0IGluIHhyaV9iaXRtYXAuCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKiBAbmRscDogVGFyZ2V0cyBub2RlbGlzdCBwb2ludGVyIGZvciB0aGlzIGV4Y2hhbmdlLgorICogQHhyaXRhZyB0aGUgeHJpIGluIHRoZSBiaXRtYXAgdG8gdGVzdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIGhiYWxvY2sgaGVsZC4gVGhpcyBmdW5jdGlvbgorICogcmV0dXJucyAwID0gcnJxIG5vdCBhY3RpdmUgZm9yIHRoaXMgeHJpCisgKiAgICAgICAgIDEgPSBycnEgaXMgdmFsaWQgZm9yIHRoaXMgeHJpLgorICoqLworc3RhdGljIGludAorX19scGZjX3Rlc3RfcnJxX2FjdGl2ZShzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwLAorCQkJdWludDE2X3QgIHhyaXRhZykKK3sKKwl1aW50MTZfdCBhZGpfeHJpOworCisJYWRqX3hyaSA9IHhyaXRhZyAtIHBoYmEtPnNsaTRfaGJhLm1heF9jZmdfcGFyYW0ueHJpX2Jhc2U7CisJaWYgKCFuZGxwKQorCQlyZXR1cm4gMDsKKwlpZiAodGVzdF9iaXQoYWRqX3hyaSwgbmRscC0+YWN0aXZlX3JycXMueHJpX2JpdG1hcCkpCisJCQlyZXR1cm4gMTsKKwllbHNlCisJCXJldHVybiAwOworfQorCisvKioKKyAqIGxwZmNfc2V0X3JycV9hY3RpdmUgLSBzZXQgUlJRIGFjdGl2ZSBiaXQgaW4geHJpX2JpdG1hcC4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqIEBuZGxwOiBub2RlbGlzdCBwb2ludGVyIGZvciB0aGlzIHRhcmdldC4KKyAqIEB4cml0YWc6IHhyaSB1c2VkIGluIHRoaXMgZXhjaGFuZ2UuCisgKiBAcnhpZDogUmVtb3RlIEV4Y2hhbmdlIElELgorICogQHNlbmRfcnJxOiBGbGFnIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIHdlIHNob3VsZCBzZW5kIHJycSBlbHMgY21kLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gdGFrZXMgdGhlIGhiYWxvY2suCisgKiBUaGUgYWN0aXZlIGJpdCBpcyBhbHdheXMgc2V0IGluIHRoZSBhY3RpdmUgcnJxIHhyaV9iaXRtYXAgZXZlbgorICogaWYgdGhlcmUgaXMgbm8gc2xvdCBhdmFpYWJsZSBmb3IgdGhlIG90aGVyIHJycSBpbmZvcm1hdGlvbi4KKyAqCisgKiByZXR1cm5zIDAgcnJxIGFjdGl2ZWQgZm9yIHRoaXMgeHJpCisgKiAgICAgICAgIDwgMCBObyBtZW1vcnkgb3IgaW52YWxpZCBuZGxwLgorICoqLworaW50CitscGZjX3NldF9ycnFfYWN0aXZlKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHAsCisJCQl1aW50MTZfdCB4cml0YWcsIHVpbnQxNl90IHJ4aWQsIHVpbnQxNl90IHNlbmRfcnJxKQoreworCWludCByZXQ7CisJdW5zaWduZWQgbG9uZyBpZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+aGJhbG9jaywgaWZsYWdzKTsKKwlyZXQgPSBfX2xwZmNfc2V0X3JycV9hY3RpdmUocGhiYSwgbmRscCwgeHJpdGFnLCByeGlkLCBzZW5kX3JycSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywgaWZsYWdzKTsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGxwZmNfY2xyX3JycV9hY3RpdmUgLSBDbGVhcnMgUlJRIGFjdGl2ZSBiaXQgaW4geHJpX2JpdG1hcC4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqIEB4cml0YWc6IHhyaSB1c2VkIGluIHRoaXMgZXhjaGFuZ2UuCisgKiBAcnJxOiBUaGUgUlJRIHRvIGJlIGNsZWFyZWQuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB0YWtlcyB0aGUgaGJhbG9jay4KKyAqKi8KK3ZvaWQKK2xwZmNfY2xyX3JycV9hY3RpdmUoc3RydWN0IGxwZmNfaGJhICpwaGJhLAorCQkJdWludDE2X3QgeHJpdGFnLAorCQkJc3RydWN0IGxwZmNfbm9kZV9ycnEgKnJycSkKK3sKKwl1bnNpZ25lZCBsb25nIGlmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5oYmFsb2NrLCBpZmxhZ3MpOworCV9fbHBmY19jbHJfcnJxX2FjdGl2ZShwaGJhLCB4cml0YWcsIHJycSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywgaWZsYWdzKTsKKwlyZXR1cm47Cit9CisKKworCisvKioKKyAqIGxwZmNfdGVzdF9ycnFfYWN0aXZlIC0gVGVzdCBSUlEgYml0IGluIHhyaV9iaXRtYXAuCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKiBAbmRscDogVGFyZ2V0cyBub2RlbGlzdCBwb2ludGVyIGZvciB0aGlzIGV4Y2hhbmdlLgorICogQHhyaXRhZyB0aGUgeHJpIGluIHRoZSBiaXRtYXAgdG8gdGVzdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHRha2VzIHRoZSBoYmFsb2NrLgorICogcmV0dXJucyAwID0gcnJxIG5vdCBhY3RpdmUgZm9yIHRoaXMgeHJpCisgKiAgICAgICAgIDEgPSBycnEgaXMgdmFsaWQgZm9yIHRoaXMgeHJpLgorICoqLworaW50CitscGZjX3Rlc3RfcnJxX2FjdGl2ZShzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwLAorCQkJdWludDE2X3QgIHhyaXRhZykKK3sKKwlpbnQgcmV0OworCXVuc2lnbmVkIGxvbmcgaWZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmhiYWxvY2ssIGlmbGFncyk7CisJcmV0ID0gX19scGZjX3Rlc3RfcnJxX2FjdGl2ZShwaGJhLCBuZGxwLCB4cml0YWcpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssIGlmbGFncyk7CisJcmV0dXJuIHJldDsKK30KKworLyoqCiAgKiBfX2xwZmNfc2xpX2dldF9zZ2xxIC0gQWxsb2NhdGVzIGFuIGlvY2Igb2JqZWN0IGZyb20gc2dsIHBvb2wKICAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqIEBwaW9jYjogUG9pbnRlciB0byB0aGUgaW9jYnEuCiAgKgogICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBoYmFsb2NrIGhlbGQuIFRoaXMgZnVuY3Rpb24KICAqIEdldHMgYSBuZXcgZHJpdmVyIHNnbHEgb2JqZWN0IGZyb20gdGhlIHNnbHEgbGlzdC4gSWYgdGhlCkBAIC01MjIsMTcgKzg1OCw1MSBAQAogICogYWxsb2NhdGVkIHNnbHEgb2JqZWN0IGVsc2UgaXQgcmV0dXJucyBOVUxMLgogICoqLwogc3RhdGljIHN0cnVjdCBscGZjX3NnbHEgKgotX19scGZjX3NsaV9nZXRfc2dscShzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCitfX2xwZmNfc2xpX2dldF9zZ2xxKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfaW9jYnEgKnBpb2NicSkKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpscGZjX3NnbF9saXN0ID0gJnBoYmEtPnNsaTRfaGJhLmxwZmNfc2dsX2xpc3Q7CiAJc3RydWN0IGxwZmNfc2dscSAqc2dscSA9IE5VTEw7CisJc3RydWN0IGxwZmNfc2dscSAqc3RhcnRfc2dscSA9IE5VTEw7CiAJdWludDE2X3QgYWRqX3hyaTsKKwlzdHJ1Y3QgbHBmY19zY3NpX2J1ZiAqbHBmY19jbWQ7CisJc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHA7CisJaW50IGZvdW5kID0gMDsKKworCWlmIChwaW9jYnEtPmlvY2JfZmxhZyAmICBMUEZDX0lPX0ZDUCkgeworCQlscGZjX2NtZCA9IChzdHJ1Y3QgbHBmY19zY3NpX2J1ZiAqKSBwaW9jYnEtPmNvbnRleHQxOworCQluZGxwID0gbHBmY19jbWQtPnJkYXRhLT5wbm9kZTsKKwl9IGVsc2UgIGlmICgocGlvY2JxLT5pb2NiLnVscENvbW1hbmQgPT0gQ01EX0dFTl9SRVFVRVNUNjRfQ1IpICYmCisJCQkhKHBpb2NicS0+aW9jYl9mbGFnICYgTFBGQ19JT19MSUJERkMpKQorCQluZGxwID0gcGlvY2JxLT5jb250ZXh0X3VuLm5kbHA7CisJZWxzZQorCQluZGxwID0gcGlvY2JxLT5jb250ZXh0MTsKKwogCWxpc3RfcmVtb3ZlX2hlYWQobHBmY19zZ2xfbGlzdCwgc2dscSwgc3RydWN0IGxwZmNfc2dscSwgbGlzdCk7Ci0JaWYgKCFzZ2xxKQotCQlyZXR1cm4gTlVMTDsKLQlhZGpfeHJpID0gc2dscS0+c2xpNF94cml0YWcgLSBwaGJhLT5zbGk0X2hiYS5tYXhfY2ZnX3BhcmFtLnhyaV9iYXNlOwotCXBoYmEtPnNsaTRfaGJhLmxwZmNfc2dscV9hY3RpdmVfbGlzdFthZGpfeHJpXSA9IHNnbHE7Ci0Jc2dscS0+c3RhdGUgPSBTR0xfQUxMT0NBVEVEOworCXN0YXJ0X3NnbHEgPSBzZ2xxOworCXdoaWxlICghZm91bmQpIHsKKwkJaWYgKCFzZ2xxKQorCQkJcmV0dXJuIE5VTEw7CisJCWFkal94cmkgPSBzZ2xxLT5zbGk0X3hyaXRhZyAtCisJCQkJcGhiYS0+c2xpNF9oYmEubWF4X2NmZ19wYXJhbS54cmlfYmFzZTsKKwkJaWYgKF9fbHBmY190ZXN0X3JycV9hY3RpdmUocGhiYSwgbmRscCwgc2dscS0+c2xpNF94cml0YWcpKSB7CisJCQkvKiBUaGlzIHhyaSBoYXMgYW4gcnJxIG91dHN0YW5kaW5nIGZvciB0aGlzIERJRC4KKwkJCSAqIHB1dCBpdCBiYWNrIGluIHRoZSBsaXN0IGFuZCBnZXQgYW5vdGhlciB4cmkuCisJCQkgKi8KKwkJCWxpc3RfYWRkX3RhaWwoJnNnbHEtPmxpc3QsIGxwZmNfc2dsX2xpc3QpOworCQkJc2dscSA9IE5VTEw7CisJCQlsaXN0X3JlbW92ZV9oZWFkKGxwZmNfc2dsX2xpc3QsIHNnbHEsCisJCQkJCQlzdHJ1Y3QgbHBmY19zZ2xxLCBsaXN0KTsKKwkJCWlmIChzZ2xxID09IHN0YXJ0X3NnbHEpIHsKKwkJCQlzZ2xxID0gTlVMTDsKKwkJCQlicmVhazsKKwkJCX0gZWxzZQorCQkJCWNvbnRpbnVlOworCQl9CisJCXNnbHEtPm5kbHAgPSBuZGxwOworCQlmb3VuZCA9IDE7CisJCXBoYmEtPnNsaTRfaGJhLmxwZmNfc2dscV9hY3RpdmVfbGlzdFthZGpfeHJpXSA9IHNnbHE7CisJCXNnbHEtPnN0YXRlID0gU0dMX0FMTE9DQVRFRDsKKwl9CiAJcmV0dXJuIHNnbHE7CiB9CiAKQEAgLTU5OCw2ICs5NjgsNyBAQAogCQkJCSZwaGJhLT5zbGk0X2hiYS5hYnRzX3NnbF9saXN0X2xvY2ssIGlmbGFnKTsKIAkJfSBlbHNlIHsKIAkJCXNnbHEtPnN0YXRlID0gU0dMX0ZSRUVEOworCQkJc2dscS0+bmRscCA9IE5VTEw7CiAJCQlsaXN0X2FkZCgmc2dscS0+bGlzdCwgJnBoYmEtPnNsaTRfaGJhLmxwZmNfc2dsX2xpc3QpOwogCiAJCQkvKiBDaGVjayBpZiBUWFEgcXVldWUgbmVlZHMgdG8gYmUgc2VydmljZWQgKi8KQEAgLTE2MzQsNyArMjAwNSw2IEBACiAJY2FzZSBNQlhfUkVBRF9MTktfU1RBVDoKIAljYXNlIE1CWF9SRUdfTE9HSU46CiAJY2FzZSBNQlhfVU5SRUdfTE9HSU46Ci0JY2FzZSBNQlhfUkVBRF9MQToKIAljYXNlIE1CWF9DTEVBUl9MQToKIAljYXNlIE1CWF9EVU1QX01FTU9SWToKIAljYXNlIE1CWF9EVU1QX0NPTlRFWFQ6CkBAIC0xNjU2LDcgKzIwMjYsNyBAQAogCWNhc2UgTUJYX1JFQURfU1BBUk02NDoKIAljYXNlIE1CWF9SRUFEX1JQSTY0OgogCWNhc2UgTUJYX1JFR19MT0dJTjY0OgotCWNhc2UgTUJYX1JFQURfTEE2NDoKKwljYXNlIE1CWF9SRUFEX1RPUE9MT0dZOgogCWNhc2UgTUJYX1dSSVRFX1dXTjoKIAljYXNlIE1CWF9TRVRfREVCVUc6CiAJY2FzZSBNQlhfTE9BRF9FWFBfUk9NOgpAQCAtMTc0NiwxMSArMjExNiw2IEBACiAJCWtmcmVlKG1wKTsKIAl9CiAKLQlpZiAoKHBtYi0+dS5tYi5tYnhDb21tYW5kID09IE1CWF9VTlJFR19MT0dJTikgJiYKLQkgICAgKHBoYmEtPnNsaV9yZXYgPT0gTFBGQ19TTElfUkVWNCkgJiYKLQkgICAgKHBtYi0+dS5tYi51bi52YXJVbnJlZ0xvZ2luLnJzdmQxID09IDB4MCkpCi0JCWxwZmNfc2xpNF9mcmVlX3JwaShwaGJhLCBwbWItPnUubWIudW4udmFyVW5yZWdMb2dpbi5ycGkpOwotCiAJLyoKIAkgKiBJZiBhIFJFR19MT0dJTiBzdWNjZWVkZWQgIGFmdGVyIG5vZGUgaXMgZGVzdHJveWVkIG9yIG5vZGUKIAkgKiBpcyBpbiByZS1kaXNjb3ZlcnkgZHJpdmVyIG5lZWQgdG8gY2xlYW51cCB0aGUgUlBJLgpAQCAtMzQ4MywxMiArMzg0OCw2IEBACiAJcGhiYS0+cHBvcnQtPmZjX215RElEID0gMDsKIAlwaGJhLT5wcG9ydC0+ZmNfcHJldkRJRCA9IDA7CiAKLQkvKiBUdXJuIG9mZiBwYXJpdHkgY2hlY2tpbmcgYW5kIHNlcnIgZHVyaW5nIHRoZSBwaHlzaWNhbCByZXNldCAqLwotCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBoYmEtPnBjaWRldiwgUENJX0NPTU1BTkQsICZjZmdfdmFsdWUpOwotCXBjaV93cml0ZV9jb25maWdfd29yZChwaGJhLT5wY2lkZXYsIFBDSV9DT01NQU5ELAotCQkJICAgICAgKGNmZ192YWx1ZSAmCi0JCQkgICAgICB+KFBDSV9DT01NQU5EX1BBUklUWSB8IFBDSV9DT01NQU5EX1NFUlIpKSk7Ci0KIAlzcGluX2xvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKIAlwc2xpLT5zbGlfZmxhZyAmPSB+KExQRkNfUFJPQ0VTU19MQSk7CiAJcGhiYS0+ZmNmLmZjZl9mbGFnID0gMDsKQEAgLTM1MDgsOSArMzg2NywxOCBAQAogCS8qIE5vdyBwaHlzaWNhbGx5IHJlc2V0IHRoZSBkZXZpY2UgKi8KIAlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9JTkZPLCBMT0dfSU5JVCwKIAkJCSIwMzg5IFBlcmZvcm1pbmcgUENJIGZ1bmN0aW9uIHJlc2V0IVxuIik7CisKKwkvKiBUdXJuIG9mZiBwYXJpdHkgY2hlY2tpbmcgYW5kIHNlcnIgZHVyaW5nIHRoZSBwaHlzaWNhbCByZXNldCAqLworCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBoYmEtPnBjaWRldiwgUENJX0NPTU1BTkQsICZjZmdfdmFsdWUpOworCXBjaV93cml0ZV9jb25maWdfd29yZChwaGJhLT5wY2lkZXYsIFBDSV9DT01NQU5ELCAoY2ZnX3ZhbHVlICYKKwkJCSAgICAgIH4oUENJX0NPTU1BTkRfUEFSSVRZIHwgUENJX0NPTU1BTkRfU0VSUikpKTsKKwogCS8qIFBlcmZvcm0gRkNvRSBQQ0kgZnVuY3Rpb24gcmVzZXQgKi8KIAlscGZjX3BjaV9mdW5jdGlvbl9yZXNldChwaGJhKTsKIAorCS8qIFJlc3RvcmUgUENJIGNtZCByZWdpc3RlciAqLworCXBjaV93cml0ZV9jb25maWdfd29yZChwaGJhLT5wY2lkZXYsIFBDSV9DT01NQU5ELCBjZmdfdmFsdWUpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQzMTcsNiArNDY4NSwxMCBAQAogCXN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCA9IHBoYmEtPnBwb3J0OwogCXN0cnVjdCBscGZjX2RtYWJ1ZiAqbXA7CiAKKwkvKgorCSAqIFRPRE86ICBXaHkgZG9lcyB0aGlzIHJvdXRpbmUgZXhlY3V0ZSB0aGVzZSB0YXNrIGluIGEgZGlmZmVyZW50CisJICogb3JkZXIgZnJvbSBwcm9iZT8KKwkgKi8KIAkvKiBQZXJmb3JtIGEgUENJIGZ1bmN0aW9uIHJlc2V0IHRvIHN0YXJ0IGZyb20gY2xlYW4gKi8KIAlyYyA9IGxwZmNfcGNpX2Z1bmN0aW9uX3Jlc2V0KHBoYmEpOwogCWlmICh1bmxpa2VseShyYykpCkBAIC00MzU3LDEzICs0NzI5LDE2IEBACiAJfQogCiAJcmMgPSBscGZjX3NsaTRfcmVhZF9yZXYocGhiYSwgbWJveHEsIHZwZCwgJnZwZF9zaXplKTsKLQlpZiAodW5saWtlbHkocmMpKQotCQlnb3RvIG91dF9mcmVlX3ZwZDsKLQorCWlmICh1bmxpa2VseShyYykpIHsKKwkJa2ZyZWUodnBkKTsKKwkJZ290byBvdXRfZnJlZV9tYm94OworCX0KIAltcWUgPSAmbWJveHEtPnUubXFlOwogCXBoYmEtPnNsaV9yZXYgPSBiZl9nZXQobHBmY19tYnhfcmRfcmV2X3NsaV9sdmwsICZtcWUtPnVuLnJlYWRfcmV2KTsKIAlpZiAoYmZfZ2V0KGxwZmNfbWJ4X3JkX3Jldl9mY29lLCAmbXFlLT51bi5yZWFkX3JldikpCi0JCXBoYmEtPmhiYV9mbGFnIHw9IEhCQV9GQ09FX1NVUFBPUlQ7CisJCXBoYmEtPmhiYV9mbGFnIHw9IEhCQV9GQ09FX01PREU7CisJZWxzZQorCQlwaGJhLT5oYmFfZmxhZyAmPSB+SEJBX0ZDT0VfTU9ERTsKIAogCWlmIChiZl9nZXQobHBmY19tYnhfcmRfcmV2X2NlZV92ZXIsICZtcWUtPnVuLnJlYWRfcmV2KSA9PQogCQlMUEZDX0RDQlhfQ0VFX01PREUpCkBAIC00MzcyLDEzICs0NzQ3LDE0IEBACiAJCXBoYmEtPmhiYV9mbGFnICY9IH5IQkFfRklQX1NVUFBPUlQ7CiAKIAlpZiAocGhiYS0+c2xpX3JldiAhPSBMUEZDX1NMSV9SRVY0IHx8Ci0JICAgICEocGhiYS0+aGJhX2ZsYWcgJiBIQkFfRkNPRV9TVVBQT1JUKSkgeworCSAgICAhKHBoYmEtPmhiYV9mbGFnICYgSEJBX0ZDT0VfTU9ERSkpIHsKIAkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfTUJPWCB8IExPR19TTEksCiAJCQkiMDM3NiBSRUFEX1JFViBFcnJvci4gU0xJIExldmVsICVkICIKIAkJCSJGQ29FIGVuYWJsZWQgJWRcbiIsCi0JCQlwaGJhLT5zbGlfcmV2LCBwaGJhLT5oYmFfZmxhZyAmIEhCQV9GQ09FX1NVUFBPUlQpOworCQkJcGhiYS0+c2xpX3JldiwgcGhiYS0+aGJhX2ZsYWcgJiBIQkFfRkNPRV9NT0RFKTsKIAkJcmMgPSAtRUlPOwotCQlnb3RvIG91dF9mcmVlX3ZwZDsKKwkJa2ZyZWUodnBkKTsKKwkJZ290byBvdXRfZnJlZV9tYm94OwogCX0KIAkvKgogCSAqIEV2YWx1YXRlIHRoZSByZWFkIHJldiBhbmQgdnBkIGRhdGEuIFBvcHVsYXRlIHRoZSBkcml2ZXIKQEAgLTQzOTIsNiArNDc2OCw3IEBACiAJCQkJIlVzaW5nIGRlZmF1bHRzLlxuIiwgcmMpOwogCQlyYyA9IDA7CiAJfQorCWtmcmVlKHZwZCk7CiAKIAkvKiBTYXZlIGluZm9ybWF0aW9uIGFzIFZQRCBkYXRhICovCiAJcGhiYS0+dnBkLnJldi5iaXVSZXYgPSBtcWUtPnVuLnJlYWRfcmV2LmZpcnN0X2h3X3JldjsKQEAgLTQ0MjgsNyArNDgwNSw3IEBACiAJcmMgPSBscGZjX3NsaV9pc3N1ZV9tYm94KHBoYmEsIG1ib3hxLCBNQlhfUE9MTCk7CiAJaWYgKHVubGlrZWx5KHJjKSkgewogCQlyYyA9IC1FSU87Ci0JCWdvdG8gb3V0X2ZyZWVfdnBkOworCQlnb3RvIG91dF9mcmVlX21ib3g7CiAJfQogCiAJLyoKQEAgLTQ0NzYsNyArNDg1Myw3IEBACiAJaWYgKHJjKSB7CiAJCXBoYmEtPmxpbmtfc3RhdGUgPSBMUEZDX0hCQV9FUlJPUjsKIAkJcmMgPSAtRU5PTUVNOwotCQlnb3RvIG91dF9mcmVlX3ZwZDsKKwkJZ290byBvdXRfZnJlZV9tYm94OwogCX0KIAogCW1ib3hxLT52cG9ydCA9IHZwb3J0OwpAQCAtNDUwMSw3ICs0ODc4LDcgQEAKIAkJCQlyYywgYmZfZ2V0KGxwZmNfbXFlX3N0YXR1cywgbXFlKSk7CiAJCXBoYmEtPmxpbmtfc3RhdGUgPSBMUEZDX0hCQV9FUlJPUjsKIAkJcmMgPSAtRUlPOwotCQlnb3RvIG91dF9mcmVlX3ZwZDsKKwkJZ290byBvdXRfZnJlZV9tYm94OwogCX0KIAogCWlmIChwaGJhLT5jZmdfc29mdF93d25uKQpAQCAtNDUyNiw3ICs0OTAzLDcgQEAKIAkJCQkiMDU4MiBFcnJvciAlZCBkdXJpbmcgc2dsIHBvc3Qgb3BlcmF0aW9uXG4iLAogCQkJCQlyYyk7CiAJCXJjID0gLUVOT0RFVjsKLQkJZ290byBvdXRfZnJlZV92cGQ7CisJCWdvdG8gb3V0X2ZyZWVfbWJveDsKIAl9CiAKIAkvKiBSZWdpc3RlciBTQ1NJIFNHTCBwb29sIHRvIHRoZSBkZXZpY2UgKi8KQEAgLTQ1MzgsNyArNDkxNSw3IEBACiAJCS8qIFNvbWUgU2NzaSBidWZmZXJzIHdlcmUgbW92ZWQgdG8gdGhlIGFib3J0IHNjc2kgbGlzdCAqLwogCQkvKiBBIHBjaSBmdW5jdGlvbiByZXNldCB3aWxsIHJlcG9zdCB0aGVtICovCiAJCXJjID0gLUVOT0RFVjsKLQkJZ290byBvdXRfZnJlZV92cGQ7CisJCWdvdG8gb3V0X2ZyZWVfbWJveDsKIAl9CiAKIAkvKiBQb3N0IHRoZSBycGkgaGVhZGVyIHJlZ2lvbiB0byB0aGUgZGV2aWNlLiAqLwpAQCAtNDU0OCw3ICs0OTI1LDcgQEAKIAkJCQkiMDM5MyBFcnJvciAlZCBkdXJpbmcgcnBpIHBvc3Qgb3BlcmF0aW9uXG4iLAogCQkJCXJjKTsKIAkJcmMgPSAtRU5PREVWOwotCQlnb3RvIG91dF9mcmVlX3ZwZDsKKwkJZ290byBvdXRfZnJlZV9tYm94OwogCX0KIAogCS8qIFNldCB1cCBhbGwgdGhlIHF1ZXVlcyB0byB0aGUgZGV2aWNlICovCkBAIC00NjA4LDMzICs0OTg1LDMzIEBACiAJCX0KIAl9CiAKKwlpZiAoIShwaGJhLT5oYmFfZmxhZyAmIEhCQV9GQ09FX01PREUpKSB7CisJCS8qCisJCSAqIFRoZSBGQyBQb3J0IG5lZWRzIHRvIHJlZ2lzdGVyIEZDRkkgKGluZGV4IDApCisJCSAqLworCQlscGZjX3JlZ19mY2ZpKHBoYmEsIG1ib3hxKTsKKwkJbWJveHEtPnZwb3J0ID0gcGhiYS0+cHBvcnQ7CisJCXJjID0gbHBmY19zbGlfaXNzdWVfbWJveChwaGJhLCBtYm94cSwgTUJYX1BPTEwpOworCQlpZiAocmMgPT0gTUJYX1NVQ0NFU1MpCisJCQlyYyA9IDA7CisJCWVsc2UKKwkJCWdvdG8gb3V0X3Vuc2V0X3F1ZXVlOworCX0KIAkvKgogCSAqIFRoZSBwb3J0IGlzIHJlYWR5LCBzZXQgdGhlIGhvc3QncyBsaW5rIHN0YXRlIHRvIExJTktfRE9XTgogCSAqIGluIHByZXBhcmF0aW9uIGZvciBsaW5rIGludGVycnVwdHMuCiAJICovCi0JbHBmY19pbml0X2xpbmsocGhiYSwgbWJveHEsIHBoYmEtPmNmZ190b3BvbG9neSwgcGhiYS0+Y2ZnX2xpbmtfc3BlZWQpOwotCW1ib3hxLT5tYm94X2NtcGwgPSBscGZjX3NsaV9kZWZfbWJveF9jbXBsOwotCWxwZmNfc2V0X2xvb3BiYWNrX2ZsYWcocGhiYSk7Ci0JLyogQ2hhbmdlIGRyaXZlciBzdGF0ZSB0byBMUEZDX0xJTktfRE9XTiByaWdodCBiZWZvcmUgaW5pdCBsaW5rICovCiAJc3Bpbl9sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CiAJcGhiYS0+bGlua19zdGF0ZSA9IExQRkNfTElOS19ET1dOOwogCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7Ci0JcmMgPSBscGZjX3NsaV9pc3N1ZV9tYm94KHBoYmEsIG1ib3hxLCBNQlhfTk9XQUlUKTsKLQlpZiAodW5saWtlbHkocmMgIT0gTUJYX05PVF9GSU5JU0hFRCkpIHsKLQkJa2ZyZWUodnBkKTsKLQkJcmV0dXJuIDA7Ci0JfSBlbHNlCi0JCXJjID0gLUVJTzsKLQorCXJjID0gcGhiYS0+bHBmY19oYmFfaW5pdF9saW5rKHBoYmEsIE1CWF9OT1dBSVQpOworb3V0X3Vuc2V0X3F1ZXVlOgogCS8qIFVuc2V0IGFsbCB0aGUgcXVldWVzIHNldCB1cCBpbiB0aGlzIHJvdXRpbmUgd2hlbiBlcnJvciBvdXQgKi8KIAlpZiAocmMpCiAJCWxwZmNfc2xpNF9xdWV1ZV91bnNldChwaGJhKTsKLQogb3V0X3N0b3BfdGltZXJzOgogCWlmIChyYykKIAkJbHBmY19zdG9wX2hiYV90aW1lcnMocGhiYSk7Ci1vdXRfZnJlZV92cGQ6Ci0Ja2ZyZWUodnBkKTsKIG91dF9mcmVlX21ib3g6CiAJbWVtcG9vbF9mcmVlKG1ib3hxLCBwaGJhLT5tYm94X21lbV9wb29sKTsKIAlyZXR1cm4gcmM7CkBAIC01ODYzLDYgKzYyNDAsOCBAQAogCUlPQ0JfdCAqaWNtZDsKIAlpbnQgbnVtQmRlcyA9IDA7CiAJaW50IGkgPSAwOworCXVpbnQzMl90IG9mZnNldCA9IDA7IC8qIGFjY3VtdWxhdGVkIG9mZnNldCBpbiB0aGUgc2cgcmVxdWVzdCBsaXN0ICovCisJaW50IGluYm91bmQgPSAwOyAvKiBudW1iZXIgb2Ygc2cgcmVwbHkgZW50cmllcyBpbmJvdW5kIGZyb20gZmlybXdhcmUgKi8KIAogCWlmICghcGlvY2JxIHx8ICFzZ2xxKQogCQlyZXR1cm4geHJpdGFnOwpAQCAtNTg5Nyw2ICs2Mjc2LDIwIEBACiAJCQkgKi8KIAkJCWJkZS50dXMudyA9IGxlMzJfdG9fY3B1KGJwbC0+dHVzLncpOwogCQkJc2dsLT5zZ2VfbGVuID0gY3B1X3RvX2xlMzIoYmRlLnR1cy5mLmJkZVNpemUpOworCQkJLyogVGhlIG9mZnNldHMgaW4gdGhlIHNnbCBuZWVkIHRvIGJlIGFjY3VtdWxhdGVkCisJCQkgKiBzZXBhcmF0ZWx5IGZvciB0aGUgcmVxdWVzdCBhbmQgcmVwbHkgbGlzdHMuCisJCQkgKiBUaGUgcmVxdWVzdCBpcyBhbHdheXMgZmlyc3QsIHRoZSByZXBseSBmb2xsb3dzLgorCQkJICovCisJCQlpZiAocGlvY2JxLT5pb2NiLnVscENvbW1hbmQgPT0gQ01EX0dFTl9SRVFVRVNUNjRfQ1IpIHsKKwkJCQkvKiBhZGQgdXAgdGhlIHJlcGx5IHNnIGVudHJpZXMgKi8KKwkJCQlpZiAoYnBsLT50dXMuZi5iZGVGbGFncyA9PSBCVUZGX1RZUEVfQkRFXzY0SSkKKwkJCQkJaW5ib3VuZCsrOworCQkJCS8qIGZpcnN0IGluYm91bmQ/IHJlc2V0IHRoZSBvZmZzZXQgKi8KKwkJCQlpZiAoaW5ib3VuZCA9PSAxKQorCQkJCQlvZmZzZXQgPSAwOworCQkJCWJmX3NldChscGZjX3NsaTRfc2dlX29mZnNldCwgc2dsLCBvZmZzZXQpOworCQkJCW9mZnNldCArPSBiZGUudHVzLmYuYmRlU2l6ZTsKKwkJCX0KIAkJCWJwbCsrOwogCQkJc2dsKys7CiAJCX0KQEAgLTYwMjgsMTEgKzY0MjEsNiBAQAogCQliZl9zZXQoZWxzX3JlcTY0X3ZmLCAmd3FlLT5lbHNfcmVxLCAwKTsKIAkJLyogQW5kIGEgVkZJRCBmb3Igd29yZCAxMiAqLwogCQliZl9zZXQoZWxzX3JlcTY0X3ZmaWQsICZ3cWUtPmVsc19yZXEsIDApOwotCQkvKgotCQkgKiBTZXQgY3QgZmllbGQgdG8gMywgaW5kaWNhdGVzIHRoYXQgdGhlIGNvbnRleHRfdGFnIGZpZWxkCi0JCSAqIGNvbnRhaW5zIHRoZSBGQ0ZJIGFuZCByZW1vdGUgTl9Qb3J0X0lEIGlzCi0JCSAqIGluIHdvcmQgNS4KLQkJICovCiAJCWN0ID0gKChpb2NicS0+aW9jYi51bHBDdF9oIDw8IDEpIHwgaW9jYnEtPmlvY2IudWxwQ3RfbCk7CiAJCWJmX3NldCh3cWVfY3R4dF90YWcsICZ3cWUtPmVsc19yZXEud3FlX2NvbSwKIAkJICAgICAgIGlvY2JxLT5pb2NiLnVscENvbnRleHQpOwpAQCAtNjE0MCw2ICs2NTI4LDE4IEBACiAJCWJmX3NldCh3cWVfZWJkZV9jbnQsICZ3cWUtPmZjcF9pY21kLndxZV9jb20sIDApOwogCWJyZWFrOwogCWNhc2UgQ01EX0dFTl9SRVFVRVNUNjRfQ1I6CisJCS8qIEZvciB0aGlzIGNvbW1hbmQgY2FsY3VsYXRlIHRoZSB4bWl0IGxlbmd0aCBvZiB0aGUKKwkJICogcmVxdWVzdCBiZGUuCisJCSAqLworCQl4bWl0X2xlbiA9IDA7CisJCW51bUJkZXMgPSBpb2NicS0+aW9jYi51bi5nZW5yZXE2NC5iZGwuYmRlU2l6ZSAvCisJCQlzaXplb2Yoc3RydWN0IHVscF9iZGU2NCk7CisJCWZvciAoaSA9IDA7IGkgPCBudW1CZGVzOyBpKyspIHsKKwkJCWlmIChicGxbaV0udHVzLmYuYmRlRmxhZ3MgIT0gQlVGRl9UWVBFX0JERV82NCkKKwkJCQlicmVhazsKKwkJCWJkZS50dXMudyA9IGxlMzJfdG9fY3B1KGJwbFtpXS50dXMudyk7CisJCQl4bWl0X2xlbiArPSBiZGUudHVzLmYuYmRlU2l6ZTsKKwkJfQogCQkvKiB3b3JkMyBpb2NiPUlPX1RBRyB3cWU9cmVxdWVzdF9wYXlsb2FkX2xlbiAqLwogCQl3cWUtPmdlbl9yZXEucmVxdWVzdF9wYXlsb2FkX2xlbiA9IHhtaXRfbGVuOwogCQkvKiB3b3JkNCBpb2NiPXBhcmFtZXRlciB3cWU9cmVsYXRpdmVfb2Zmc2V0IG1lbWNweSAqLwpAQCAtNjMyMCw3ICs2NzIwLDcgQEAKIAkJCQkJcmV0dXJuIElPQ0JfQlVTWTsKIAkJCQl9CiAJCQl9IGVsc2UgewotCQkJc2dscSA9IF9fbHBmY19zbGlfZ2V0X3NnbHEocGhiYSk7CisJCQlzZ2xxID0gX19scGZjX3NsaV9nZXRfc2dscShwaGJhLCBwaW9jYik7CiAJCQkJaWYgKCFzZ2xxKSB7CiAJCQkJCWlmICghKGZsYWcgJiBTTElfSU9DQl9SRVRfSU9DQikpIHsKIAkJCQkJCV9fbHBmY19zbGlfcmluZ3R4X3B1dChwaGJhLApAQCAtODAzMywyOSArODQzMyw2NiBAQAogbHBmY19zbGk0X2VyYXR0X3JlYWQoc3RydWN0IGxwZmNfaGJhICpwaGJhKQogewogCXVpbnQzMl90IHVlcnJfc3RhX2hpLCB1ZXJyX3N0YV9sbzsKKwl1aW50MzJfdCBpZl90eXBlLCBwb3J0c21waHI7CisJc3RydWN0IGxwZmNfcmVnaXN0ZXIgcG9ydHN0YXRfcmVnOwogCi0JLyogRm9yIG5vdywgdXNlIHRoZSBTTEk0IGRldmljZSBpbnRlcm5hbCB1bnJlY292ZXJhYmxlIGVycm9yCisJLyoKKwkgKiBGb3Igbm93LCB1c2UgdGhlIFNMSTQgZGV2aWNlIGludGVybmFsIHVucmVjb3ZlcmFibGUgZXJyb3IKIAkgKiByZWdpc3RlcnMgZm9yIGVycm9yIGF0dGVudGlvbi4gVGhpcyBjYW4gYmUgY2hhbmdlZCBsYXRlci4KIAkgKi8KLQl1ZXJyX3N0YV9sbyA9IHJlYWRsKHBoYmEtPnNsaTRfaGJhLlVFUlJMT3JlZ2FkZHIpOwotCXVlcnJfc3RhX2hpID0gcmVhZGwocGhiYS0+c2xpNF9oYmEuVUVSUkhJcmVnYWRkcik7Ci0JaWYgKCh+cGhiYS0+c2xpNF9oYmEudWVfbWFza19sbyAmIHVlcnJfc3RhX2xvKSB8fAotCSAgICAofnBoYmEtPnNsaTRfaGJhLnVlX21hc2tfaGkgJiB1ZXJyX3N0YV9oaSkpIHsKKwlpZl90eXBlID0gYmZfZ2V0KGxwZmNfc2xpX2ludGZfaWZfdHlwZSwgJnBoYmEtPnNsaTRfaGJhLnNsaV9pbnRmKTsKKwlzd2l0Y2ggKGlmX3R5cGUpIHsKKwljYXNlIExQRkNfU0xJX0lOVEZfSUZfVFlQRV8wOgorCQl1ZXJyX3N0YV9sbyA9IHJlYWRsKHBoYmEtPnNsaTRfaGJhLnUuaWZfdHlwZTAuVUVSUkxPcmVnYWRkcik7CisJCXVlcnJfc3RhX2hpID0gcmVhZGwocGhiYS0+c2xpNF9oYmEudS5pZl90eXBlMC5VRVJSSElyZWdhZGRyKTsKKwkJaWYgKCh+cGhiYS0+c2xpNF9oYmEudWVfbWFza19sbyAmIHVlcnJfc3RhX2xvKSB8fAorCQkgICAgKH5waGJhLT5zbGk0X2hiYS51ZV9tYXNrX2hpICYgdWVycl9zdGFfaGkpKSB7CisJCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19JTklULAorCQkJCQkiMTQyMyBIQkEgVW5yZWNvdmVyYWJsZSBlcnJvcjogIgorCQkJCQkidWVycl9sb19yZWc9MHgleCwgdWVycl9oaV9yZWc9MHgleCwgIgorCQkJCQkidWVfbWFza19sb19yZWc9MHgleCwgIgorCQkJCQkidWVfbWFza19oaV9yZWc9MHgleFxuIiwKKwkJCQkJdWVycl9zdGFfbG8sIHVlcnJfc3RhX2hpLAorCQkJCQlwaGJhLT5zbGk0X2hiYS51ZV9tYXNrX2xvLAorCQkJCQlwaGJhLT5zbGk0X2hiYS51ZV9tYXNrX2hpKTsKKwkJCXBoYmEtPndvcmtfc3RhdHVzWzBdID0gdWVycl9zdGFfbG87CisJCQlwaGJhLT53b3JrX3N0YXR1c1sxXSA9IHVlcnJfc3RhX2hpOworCQkJcGhiYS0+d29ya19oYSB8PSBIQV9FUkFUVDsKKwkJCXBoYmEtPmhiYV9mbGFnIHw9IEhCQV9FUkFUVF9IQU5ETEVEOworCQkJcmV0dXJuIDE7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBMUEZDX1NMSV9JTlRGX0lGX1RZUEVfMjoKKwkJcG9ydHN0YXRfcmVnLndvcmQwID0KKwkJCXJlYWRsKHBoYmEtPnNsaTRfaGJhLnUuaWZfdHlwZTIuU1RBVFVTcmVnYWRkcik7CisJCXBvcnRzbXBociA9IHJlYWRsKHBoYmEtPnNsaTRfaGJhLlBTTVBIUnJlZ2FkZHIpOworCQlpZiAoYmZfZ2V0KGxwZmNfc2xpcG9ydF9zdGF0dXNfZXJyLCAmcG9ydHN0YXRfcmVnKSkgeworCQkJcGhiYS0+d29ya19zdGF0dXNbMF0gPQorCQkJCXJlYWRsKHBoYmEtPnNsaTRfaGJhLnUuaWZfdHlwZTIuRVJSMXJlZ2FkZHIpOworCQkJcGhiYS0+d29ya19zdGF0dXNbMV0gPQorCQkJCXJlYWRsKHBoYmEtPnNsaTRfaGJhLnUuaWZfdHlwZTIuRVJSMnJlZ2FkZHIpOworCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfSU5JVCwKKwkJCQkJIjI4ODUgUG9ydCBFcnJvciBEZXRlY3RlZDogIgorCQkJCQkicG9ydCBzdGF0dXMgcmVnIDB4JXgsICIKKwkJCQkJInBvcnQgc21waHIgcmVnIDB4JXgsICIKKwkJCQkJImVycm9yIDE9MHgleCwgZXJyb3IgMj0weCV4XG4iLAorCQkJCQlwb3J0c3RhdF9yZWcud29yZDAsCisJCQkJCXBvcnRzbXBociwKKwkJCQkJcGhiYS0+d29ya19zdGF0dXNbMF0sCisJCQkJCXBoYmEtPndvcmtfc3RhdHVzWzFdKTsKKwkJCXBoYmEtPndvcmtfaGEgfD0gSEFfRVJBVFQ7CisJCQlwaGJhLT5oYmFfZmxhZyB8PSBIQkFfRVJBVFRfSEFORExFRDsKKwkJCXJldHVybiAxOworCQl9CisJCWJyZWFrOworCWNhc2UgTFBGQ19TTElfSU5URl9JRl9UWVBFXzE6CisJZGVmYXVsdDoKIAkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfSU5JVCwKLQkJCQkiMTQyMyBIQkEgVW5yZWNvdmVyYWJsZSBlcnJvcjogIgotCQkJCSJ1ZXJyX2xvX3JlZz0weCV4LCB1ZXJyX2hpX3JlZz0weCV4LCAiCi0JCQkJInVlX21hc2tfbG9fcmVnPTB4JXgsIHVlX21hc2tfaGlfcmVnPTB4JXhcbiIsCi0JCQkJdWVycl9zdGFfbG8sIHVlcnJfc3RhX2hpLAotCQkJCXBoYmEtPnNsaTRfaGJhLnVlX21hc2tfbG8sCi0JCQkJcGhiYS0+c2xpNF9oYmEudWVfbWFza19oaSk7Ci0JCXBoYmEtPndvcmtfc3RhdHVzWzBdID0gdWVycl9zdGFfbG87Ci0JCXBoYmEtPndvcmtfc3RhdHVzWzFdID0gdWVycl9zdGFfaGk7Ci0JCS8qIFNldCB0aGUgZHJpdmVyIEhBIHdvcmsgYml0bWFwICovCi0JCXBoYmEtPndvcmtfaGEgfD0gSEFfRVJBVFQ7Ci0JCS8qIEluZGljYXRlIHBvbGxpbmcgaGFuZGxlcyB0aGlzIEVSQVRUICovCi0JCXBoYmEtPmhiYV9mbGFnIHw9IEhCQV9FUkFUVF9IQU5ETEVEOworCQkJCSIyODg2IEhCQSBFcnJvciBBdHRlbnRpb24gb24gdW5zdXBwb3J0ZWQgIgorCQkJCSJpZiB0eXBlICVkLiIsIGlmX3R5cGUpOwogCQlyZXR1cm4gMTsKIAl9CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtODExMCw3ICs4NTQ3LDcgQEAKIAkJaGFfY29weSA9IGxwZmNfc2xpX2VyYXR0X3JlYWQocGhiYSk7CiAJCWJyZWFrOwogCWNhc2UgTFBGQ19TTElfUkVWNDoKLQkJLyogUmVhZCBkZXZjaWUgVW5jb3ZlcmFibGUgRXJyb3IgKFVFUlIpIHJlZ2lzdGVycyAqLworCQkvKiBSZWFkIGRldmljZSBVbmNvdmVyYWJsZSBFcnJvciAoVUVSUikgcmVnaXN0ZXJzICovCiAJCWhhX2NvcHkgPSBscGZjX3NsaTRfZXJhdHRfcmVhZChwaGJhKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTEwMTU1LDE2ICsxMDU5MiwyMCBAQAogCQkJIGxlbmd0aCwgTFBGQ19TTEk0X01CWF9FTUJFRCk7CiAKIAltcV9jcmVhdGVfZXh0ID0gJm1ib3gtPnUubXFlLnVuLm1xX2NyZWF0ZV9leHQ7Ci0JYmZfc2V0KGxwZmNfbWJ4X21xX2NyZWF0ZV9leHRfbnVtX3BhZ2VzLCAmbXFfY3JlYXRlX2V4dC0+dS5yZXF1ZXN0LAotCQkgICAgbXEtPnBhZ2VfY291bnQpOwotCWJmX3NldChscGZjX21ieF9tcV9jcmVhdGVfZXh0X2FzeW5jX2V2dF9saW5rLCAmbXFfY3JlYXRlX2V4dC0+dS5yZXF1ZXN0LAotCSAgICAgICAxKTsKLQliZl9zZXQobHBmY19tYnhfbXFfY3JlYXRlX2V4dF9hc3luY19ldnRfZmNmc3RlLAorCWJmX3NldChscGZjX21ieF9tcV9jcmVhdGVfZXh0X251bV9wYWdlcywKKwkgICAgICAgJm1xX2NyZWF0ZV9leHQtPnUucmVxdWVzdCwgbXEtPnBhZ2VfY291bnQpOworCWJmX3NldChscGZjX21ieF9tcV9jcmVhdGVfZXh0X2FzeW5jX2V2dF9saW5rLAorCSAgICAgICAmbXFfY3JlYXRlX2V4dC0+dS5yZXF1ZXN0LCAxKTsKKwliZl9zZXQobHBmY19tYnhfbXFfY3JlYXRlX2V4dF9hc3luY19ldnRfZmlwLAogCSAgICAgICAmbXFfY3JlYXRlX2V4dC0+dS5yZXF1ZXN0LCAxKTsKIAliZl9zZXQobHBmY19tYnhfbXFfY3JlYXRlX2V4dF9hc3luY19ldnRfZ3JvdXA1LAogCSAgICAgICAmbXFfY3JlYXRlX2V4dC0+dS5yZXF1ZXN0LCAxKTsKLQliZl9zZXQobHBmY19tcV9jb250ZXh0X2NxX2lkLCAmbXFfY3JlYXRlX2V4dC0+dS5yZXF1ZXN0LmNvbnRleHQsCi0JICAgICAgIGNxLT5xdWV1ZV9pZCk7CisJYmZfc2V0KGxwZmNfbWJ4X21xX2NyZWF0ZV9leHRfYXN5bmNfZXZ0X2ZjLAorCSAgICAgICAmbXFfY3JlYXRlX2V4dC0+dS5yZXF1ZXN0LCAxKTsKKwliZl9zZXQobHBmY19tYnhfbXFfY3JlYXRlX2V4dF9hc3luY19ldnRfc2xpLAorCSAgICAgICAmbXFfY3JlYXRlX2V4dC0+dS5yZXF1ZXN0LCAxKTsKKwliZl9zZXQobHBmY19tcV9jb250ZXh0X2NxX2lkLAorCSAgICAgICAmbXFfY3JlYXRlX2V4dC0+dS5yZXF1ZXN0LmNvbnRleHQsIGNxLT5xdWV1ZV9pZCk7CiAJYmZfc2V0KGxwZmNfbXFfY29udGV4dF92YWxpZCwgJm1xX2NyZWF0ZV9leHQtPnUucmVxdWVzdC5jb250ZXh0LCAxKTsKIAlzd2l0Y2ggKG1xLT5lbnRyeV9jb3VudCkgewogCWRlZmF1bHQ6CkBAIC0xMTEzNyw3ICsxMTU3OCw4IEBACiBzdGF0aWMgaW50CiBscGZjX2ZjX2ZyYW1lX2NoZWNrKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGZjX2ZyYW1lX2hlYWRlciAqZmNfaGRyKQogewotCWNoYXIgKnJjdGxfbmFtZXNbXSA9IEZDX1JDVExfTkFNRVNfSU5JVDsKKwkvKiAgbWFrZSByY3RsX25hbWVzIHN0YXRpYyB0byBzYXZlIHN0YWNrIHNwYWNlICovCisJc3RhdGljIGNoYXIgKnJjdGxfbmFtZXNbXSA9IEZDX1JDVExfTkFNRVNfSU5JVDsKIAljaGFyICp0eXBlX25hbWVzW10gPSBGQ19UWVBFX05BTUVTX0lOSVQ7CiAJc3RydWN0IGZjX3ZmdF9oZWFkZXIgKmZjX3ZmdF9oZHI7CiAKQEAgLTExNTM4LDYgKzExOTgwLDEwIEBACiAJCQkJIlNJRDp4JXhcbiIsIG94aWQsIHNpZCk7CiAJCXJldHVybjsKIAl9CisJaWYgKHJ4aWQgPj0gcGhiYS0+c2xpNF9oYmEubWF4X2NmZ19wYXJhbS54cmlfYmFzZQorCQkmJiByeGlkIDw9IChwaGJhLT5zbGk0X2hiYS5tYXhfY2ZnX3BhcmFtLm1heF94cmkKKwkJKyBwaGJhLT5zbGk0X2hiYS5tYXhfY2ZnX3BhcmFtLnhyaV9iYXNlKSkKKwkJbHBmY19zZXRfcnJxX2FjdGl2ZShwaGJhLCBuZGxwLCByeGlkLCBveGlkLCAwKTsKIAogCS8qIEFsbG9jYXRlIGJ1ZmZlciBmb3IgYWNjIGlvY2IgKi8KIAljdGlvY2IgPSBscGZjX3NsaV9nZXRfaW9jYnEocGhiYSk7CkBAIC0xMTU2MCw2ICsxMjAwNiw3IEBACiAJaWNtZC0+dWxwTGUgPSAxOwogCWljbWQtPnVscENsYXNzID0gQ0xBU1MzOwogCWljbWQtPnVscENvbnRleHQgPSBuZGxwLT5ubHBfcnBpOworCWN0aW9jYi0+Y29udGV4dDEgPSBuZGxwOwogCiAJY3Rpb2NiLT5pb2NiX2NtcGwgPSBOVUxMOwogCWN0aW9jYi0+dnBvcnQgPSBwaGJhLT5wcG9ydDsKQEAgLTEyMTI5LDQyICsxMjU3NiwzNyBAQAogCiAvKioKICAqIGxwZmNfc2xpNF9pbml0X3ZwaSAtIEluaXRpYWxpemUgYSB2cGkgd2l0aCB0aGUgcG9ydAotICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCi0gKiBAdnBpOiB2cGkgdmFsdWUgdG8gYWN0aXZhdGUgd2l0aCB0aGUgcG9ydC4KKyAqIEB2cG9ydDogUG9pbnRlciB0byB0aGUgdnBvcnQgZm9yIHdoaWNoIHRoZSB2cGkgaXMgYmVpbmcgaW5pdGlhbGl6ZWQKICAqCi0gKiBUaGlzIHJvdXRpbmUgaXMgaW52b2tlZCB0byBhY3RpdmF0ZSBhIHZwaSB3aXRoIHRoZQotICogcG9ydCB3aGVuIHRoZSBob3N0IGludGVuZHMgdG8gdXNlIHZwb3J0cyB3aXRoIGEKLSAqIG5vbnplcm8gdnBpLgorICogVGhpcyByb3V0aW5lIGlzIGludm9rZWQgdG8gYWN0aXZhdGUgYSB2cGkgd2l0aCB0aGUgcG9ydC4KICAqCiAgKiBSZXR1cm5zOgogICogICAgMCBzdWNjZXNzCiAgKiAgICAtRXZhbHVlIG90aGVyd2lzZQogICoqLwogaW50Ci1scGZjX3NsaTRfaW5pdF92cGkoc3RydWN0IGxwZmNfaGJhICpwaGJhLCB1aW50MTZfdCB2cGkpCitscGZjX3NsaTRfaW5pdF92cGkoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0KQogewogCUxQRkNfTUJPWFFfdCAqbWJveHE7CiAJaW50IHJjID0gMDsKIAlpbnQgcmV0dmFsID0gTUJYX1NVQ0NFU1M7CiAJdWludDMyX3QgbWJveF90bW87Ci0KLQlpZiAodnBpID09IDApCi0JCXJldHVybiAtRUlOVkFMOworCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IHZwb3J0LT5waGJhOwogCW1ib3hxID0gbWVtcG9vbF9hbGxvYyhwaGJhLT5tYm94X21lbV9wb29sLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW1ib3hxKQogCQlyZXR1cm4gLUVOT01FTTsKLQlscGZjX2luaXRfdnBpKHBoYmEsIG1ib3hxLCB2cGkpOworCWxwZmNfaW5pdF92cGkocGhiYSwgbWJveHEsIHZwb3J0LT52cGkpOwogCW1ib3hfdG1vID0gbHBmY19tYm94X3Rtb192YWwocGhiYSwgTUJYX0lOSVRfVlBJKTsKIAlyYyA9IGxwZmNfc2xpX2lzc3VlX21ib3hfd2FpdChwaGJhLCBtYm94cSwgbWJveF90bW8pOwogCWlmIChyYyAhPSBNQlhfU1VDQ0VTUykgewotCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19TTEksCisJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fRVJSLCBMT0dfU0xJLAogCQkJCSIyMDIyIElOSVQgVlBJIE1haWxib3ggZmFpbGVkICIKIAkJCQkic3RhdHVzICVkLCBtYnhTdGF0dXMgeCV4XG4iLCByYywKIAkJCQliZl9nZXQobHBmY19tcWVfc3RhdHVzLCAmbWJveHEtPnUubXFlKSk7CiAJCXJldHZhbCA9IC1FSU87CiAJfQogCWlmIChyYyAhPSBNQlhfVElNRU9VVCkKLQkJbWVtcG9vbF9mcmVlKG1ib3hxLCBwaGJhLT5tYm94X21lbV9wb29sKTsKKwkJbWVtcG9vbF9mcmVlKG1ib3hxLCB2cG9ydC0+cGhiYS0+bWJveF9tZW1fcG9vbCk7CiAKIAlyZXR1cm4gcmV0dmFsOwogfQpAQCAtMTI4NTQsNiArMTMyOTYsNyBAQAogCXN0cnVjdCBscGZjX25vZGVsaXN0ICphY3RfbWJ4X25kbHAgPSBOVUxMOwogCXN0cnVjdCBTY3NpX0hvc3QgICpzaG9zdCA9IGxwZmNfc2hvc3RfZnJvbV92cG9ydCh2cG9ydCk7CiAJTElTVF9IRUFEKG1ib3hfY21kX2xpc3QpOworCXVpbnQ4X3QgcmVzdGFydF9sb29wOwogCiAJLyogQ2xlYW4gdXAgaW50ZXJuYWxseSBxdWV1ZWQgbWFpbGJveCBjb21tYW5kcyB3aXRoIHRoZSB2cG9ydCAqLwogCXNwaW5fbG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwpAQCAtMTI4ODIsMTUgKzEzMzI1LDQ0IEBACiAJCQltYi0+bWJveF9mbGFnIHw9IExQRkNfTUJYX0lNRURfVU5SRUc7CiAJCX0KIAl9CisJLyogQ2xlYW51cCBhbnkgbWFpbGJveCBjb21wbGV0aW9ucyB3aGljaCBhcmUgbm90IHlldCBwcm9jZXNzZWQgKi8KKwlkbyB7CisJCXJlc3RhcnRfbG9vcCA9IDA7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkobWIsICZwaGJhLT5zbGkubWJveHFfY21wbCwgbGlzdCkgeworCQkJLyoKKwkJCSAqIElmIHRoaXMgbWFpbG94IGlzIGFscmVhZHkgcHJvY2Vzc2VkIG9yIGl0IGlzCisJCQkgKiBmb3IgYW5vdGhlciB2cG9ydCBpZ25vcmUgaXQuCisJCQkgKi8KKwkJCWlmICgobWItPnZwb3J0ICE9IHZwb3J0KSB8fAorCQkJCShtYi0+bWJveF9mbGFnICYgTFBGQ19NQlhfSU1FRF9VTlJFRykpCisJCQkJY29udGludWU7CisKKwkJCWlmICgobWItPnUubWIubWJ4Q29tbWFuZCAhPSBNQlhfUkVHX0xPR0lONjQpICYmCisJCQkJKG1iLT51Lm1iLm1ieENvbW1hbmQgIT0gTUJYX1JFR19WUEkpKQorCQkJCWNvbnRpbnVlOworCisJCQltYi0+bWJveF9jbXBsID0gbHBmY19zbGlfZGVmX21ib3hfY21wbDsKKwkJCWlmIChtYi0+dS5tYi5tYnhDb21tYW5kID09IE1CWF9SRUdfTE9HSU42NCkgeworCQkJCW5kbHAgPSAoc3RydWN0IGxwZmNfbm9kZWxpc3QgKiltYi0+Y29udGV4dDI7CisJCQkJLyogVW5yZWdpc3RlciB0aGUgUlBJIHdoZW4gbWFpbGJveCBjb21wbGV0ZSAqLworCQkJCW1iLT5tYm94X2ZsYWcgfD0gTFBGQ19NQlhfSU1FRF9VTlJFRzsKKwkJCQlyZXN0YXJ0X2xvb3AgPSAxOworCQkJCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CisJCQkJc3Bpbl9sb2NrKHNob3N0LT5ob3N0X2xvY2spOworCQkJCW5kbHAtPm5scF9mbGFnICY9IH5OTFBfSUdOUl9SRUdfQ01QTDsKKwkJCQlzcGluX3VubG9jayhzaG9zdC0+aG9zdF9sb2NrKTsKKwkJCQlzcGluX2xvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0gd2hpbGUgKHJlc3RhcnRfbG9vcCk7CisKIAlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwogCiAJLyogUmVsZWFzZSB0aGUgY2xlYW5lZC11cCBtYWlsYm94IGNvbW1hbmRzICovCiAJd2hpbGUgKCFsaXN0X2VtcHR5KCZtYm94X2NtZF9saXN0KSkgewogCQlsaXN0X3JlbW92ZV9oZWFkKCZtYm94X2NtZF9saXN0LCBtYiwgTFBGQ19NQk9YUV90LCBsaXN0KTsKIAkJaWYgKG1iLT51Lm1iLm1ieENvbW1hbmQgPT0gTUJYX1JFR19MT0dJTjY0KSB7Ci0JCQlpZiAocGhiYS0+c2xpX3JldiA9PSBMUEZDX1NMSV9SRVY0KQotCQkJCV9fbHBmY19zbGk0X2ZyZWVfcnBpKHBoYmEsCi0JCQkJCQltYi0+dS5tYi51bi52YXJSZWdMb2dpbi5ycGkpOwogCQkJbXAgPSAoc3RydWN0IGxwZmNfZG1hYnVmICopIChtYi0+Y29udGV4dDEpOwogCQkJaWYgKG1wKSB7CiAJCQkJX19scGZjX21idWZfZnJlZShwaGJhLCBtcC0+dmlydCwgbXAtPnBoeXMpOwpAQCAtMTI5NDgsMTIgKzEzNDIwLDEzIEBACiAJd2hpbGUgKHByaW5nLT50eHFfY250KSB7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5oYmFsb2NrLCBpZmxhZ3MpOwogCi0JCXNnbHEgPSBfX2xwZmNfc2xpX2dldF9zZ2xxKHBoYmEpOworCQlwaW9jYnEgPSBscGZjX3NsaV9yaW5ndHhfZ2V0KHBoYmEsIHByaW5nKTsKKwkJc2dscSA9IF9fbHBmY19zbGlfZ2V0X3NnbHEocGhiYSwgcGlvY2JxKTsKIAkJaWYgKCFzZ2xxKSB7CisJCQlfX2xwZmNfc2xpX3Jpbmd0eF9wdXQocGhiYSwgcHJpbmcsIHBpb2NicSk7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLCBpZmxhZ3MpOwogCQkJYnJlYWs7CiAJCX0gZWxzZSB7Ci0JCQlwaW9jYnEgPSBscGZjX3NsaV9yaW5ndHhfZ2V0KHBoYmEsIHByaW5nKTsKIAkJCWlmICghcGlvY2JxKSB7CiAJCQkJLyogVGhlIHR4cV9jbnQgb3V0IG9mIHN5bmMuIFRoaXMgc2hvdWxkCiAJCQkJICogbmV2ZXIgaGFwcGVuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3NsaS5oIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zbGkuaAppbmRleCBjZDU2ZDZjLi40NTM1NzdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3NsaS5oCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpLmgKQEAgLTM0LDkgKzM0LDExIEBACiAJdW5pb24gewogCQlzdHJ1Y3QgbHBmY19tY3FlCQltY3FlX2NtcGw7CiAJCXN0cnVjdCBscGZjX2FjcWVfbGluawkJYWNxZV9saW5rOwotCQlzdHJ1Y3QgbHBmY19hY3FlX2Zjb2UJCWFjcWVfZmNvZTsKKwkJc3RydWN0IGxwZmNfYWNxZV9maXAJCWFjcWVfZmlwOwogCQlzdHJ1Y3QgbHBmY19hY3FlX2RjYngJCWFjcWVfZGNieDsKIAkJc3RydWN0IGxwZmNfYWNxZV9ncnA1CQlhY3FlX2dycDU7CisJCXN0cnVjdCBscGZjX2FjcWVfZmNfbGEJCWFjcWVfZmM7CisJCXN0cnVjdCBscGZjX2FjcWVfc2xpCQlhY3FlX3NsaTsKIAkJc3RydWN0IGxwZmNfcmNxZQkJcmNxZV9jbXBsOwogCQlzdHJ1Y3Qgc2xpNF93Y3FlX3hyaV9hYm9ydGVkCXdjcWVfYXhyaTsKIAkJc3RydWN0IGxwZmNfd2NxZV9jb21wbGV0ZQl3Y3FlX2NtcGw7CkBAIC04Miw2ICs4NCw3IEBACiAJCXN0cnVjdCBscGZjX2lvY2JxICAgICpyc3BfaW9jYjsKIAkJc3RydWN0IGxwZmNNYm94cSAgICAgKm1ib3g7CiAJCXN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwOworCQlzdHJ1Y3QgbHBmY19ub2RlX3JycSAqcnJxOwogCX0gY29udGV4dF91bjsKIAogCXZvaWQgKCpmYWJyaWNfaW9jYl9jbXBsKSAoc3RydWN0IGxwZmNfaGJhICosIHN0cnVjdCBscGZjX2lvY2JxICosCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3NsaTQuaCBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpNC5oCmluZGV4IGM0NDgzZmUuLmM3MjE3ZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpNC5oCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpNC5oCkBAIC0xMzcsOSArMTM3LDExIEBACiAJdWludDhfdCBzcGVlZDsKIAl1aW50OF90IGR1cGxleDsKIAl1aW50OF90IHN0YXR1czsKLQl1aW50OF90IHBoeXNpY2FsOworCXVpbnQ4X3QgdHlwZTsKKwl1aW50OF90IG51bWJlcjsKIAl1aW50OF90IGZhdWx0OwogCXVpbnQxNl90IGxvZ2ljYWxfc3BlZWQ7CisJdWludDE2X3QgdG9wb2xvZ3k7CiB9OwogCiBzdHJ1Y3QgbHBmY19mY2ZfcmVjIHsKQEAgLTM2NywyMyArMzY5LDM5IEBACiAJCQkJCSAgICAgUENJIEJBUjEsIGNvbnRyb2wgcmVnaXN0ZXJzICovCiAJdm9pZCBfX2lvbWVtICpkcmJsX3JlZ3NfbWVtbWFwX3A7IC8qIEtlcm5lbCBtZW1vcnkgbWFwcGVkIGFkZHJlc3MgZm9yCiAJCQkJCSAgICAgUENJIEJBUjIsIGRvb3JiZWxsIHJlZ2lzdGVycyAqLwotCS8qIEJBUjAgUENJIGNvbmZpZyBzcGFjZSByZWdpc3RlciBtZW1vcnkgbWFwICovCi0Jdm9pZCBfX2lvbWVtICpVRVJSTE9yZWdhZGRyOyAvKiBBZGRyZXNzIHRvIFVFUlJfU1RBVFVTX0xPIHJlZ2lzdGVyICovCi0Jdm9pZCBfX2lvbWVtICpVRVJSSElyZWdhZGRyOyAvKiBBZGRyZXNzIHRvIFVFUlJfU1RBVFVTX0hJIHJlZ2lzdGVyICovCi0Jdm9pZCBfX2lvbWVtICpVRU1BU0tMT3JlZ2FkZHI7IC8qIEFkZHJlc3MgdG8gVUVfTUFTS19MTyByZWdpc3RlciAqLwotCXZvaWQgX19pb21lbSAqVUVNQVNLSElyZWdhZGRyOyAvKiBBZGRyZXNzIHRvIFVFX01BU0tfSEkgcmVnaXN0ZXIgKi8KLQl2b2lkIF9faW9tZW0gKlNMSUlOVEZyZWdhZGRyOyAvKiBBZGRyZXNzIHRvIFNMSV9JTlRGIHJlZ2lzdGVyICovCi0JLyogQkFSMSBGQ29FIGZ1bmN0aW9uIENTUiByZWdpc3RlciBtZW1vcnkgbWFwICovCi0Jdm9pZCBfX2lvbWVtICpTVEFyZWdhZGRyOyAgICAvKiBBZGRyZXNzIHRvIEhTVF9TVEFURSByZWdpc3RlciAqLwotCXZvaWQgX19pb21lbSAqSVNScmVnYWRkcjsgICAgLyogQWRkcmVzcyB0byBIU1RfSVNSIHJlZ2lzdGVyICovCi0Jdm9pZCBfX2lvbWVtICpJTVJyZWdhZGRyOyAgICAvKiBBZGRyZXNzIHRvIEhTVF9JTVIgcmVnaXN0ZXIgKi8KLQl2b2lkIF9faW9tZW0gKklTQ1JyZWdhZGRyOyAgIC8qIEFkZHJlc3MgdG8gSFNUX0lTQ1IgcmVnaXN0ZXIgKi8KLQkvKiBCQVIyIFZGLTAgZG9vcmJlbGwgcmVnaXN0ZXIgbWVtb3J5IG1hcCAqLwotCXZvaWQgX19pb21lbSAqUlFEQnJlZ2FkZHI7ICAgLyogQWRkcmVzcyB0byBSUV9ET09SQkVMTCByZWdpc3RlciAqLwotCXZvaWQgX19pb21lbSAqV1FEQnJlZ2FkZHI7ICAgLyogQWRkcmVzcyB0byBXUV9ET09SQkVMTCByZWdpc3RlciAqLwotCXZvaWQgX19pb21lbSAqRVFDUURCcmVnYWRkcjsgLyogQWRkcmVzcyB0byBFUUNRX0RPT1JCRUxMIHJlZ2lzdGVyICovCi0Jdm9pZCBfX2lvbWVtICpNUURCcmVnYWRkcjsgICAvKiBBZGRyZXNzIHRvIE1RX0RPT1JCRUxMIHJlZ2lzdGVyICovCi0Jdm9pZCBfX2lvbWVtICpCTUJYcmVnYWRkcjsgICAvKiBBZGRyZXNzIHRvIEJvb3RTdHJhcCBNQlggcmVnaXN0ZXIgKi8KKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQkvKiBJRiBUeXBlIDAsIEJBUiAwIFBDSSBjZmcgc3BhY2UgcmVnIG1lbSBtYXAgKi8KKwkJCXZvaWQgX19pb21lbSAqVUVSUkxPcmVnYWRkcjsKKwkJCXZvaWQgX19pb21lbSAqVUVSUkhJcmVnYWRkcjsKKwkJCXZvaWQgX19pb21lbSAqVUVNQVNLTE9yZWdhZGRyOworCQkJdm9pZCBfX2lvbWVtICpVRU1BU0tISXJlZ2FkZHI7CisJCX0gaWZfdHlwZTA7CisJCXN0cnVjdCB7CisJCQkvKiBJRiBUeXBlIDIsIEJBUiAwIFBDSSBjZmcgc3BhY2UgcmVnIG1lbSBtYXAuICovCisJCQl2b2lkIF9faW9tZW0gKlNUQVRVU3JlZ2FkZHI7CisJCQl2b2lkIF9faW9tZW0gKkNUUkxyZWdhZGRyOworCQkJdm9pZCBfX2lvbWVtICpFUlIxcmVnYWRkcjsKKwkJCXZvaWQgX19pb21lbSAqRVJSMnJlZ2FkZHI7CisJCX0gaWZfdHlwZTI7CisJfSB1OworCisJLyogSUYgdHlwZSAwLCBCQVIxIGFuZCBpZiB0eXBlIDIsIEJhciAwIENTUiByZWdpc3RlciBtZW1vcnkgbWFwICovCisJdm9pZCBfX2lvbWVtICpQU01QSFJyZWdhZGRyOworCisJLyogV2VsbC1rbm93biBTTEkgSU5URiByZWdpc3RlciBtZW1vcnkgbWFwLiAqLworCXZvaWQgX19pb21lbSAqU0xJSU5URnJlZ2FkZHI7CisKKwkvKiBJRiB0eXBlIDAsIEJBUiAxIGZ1bmN0aW9uIENTUiByZWdpc3RlciBtZW1vcnkgbWFwICovCisJdm9pZCBfX2lvbWVtICpJU1JyZWdhZGRyOwkvKiBIU1RfSVNSIHJlZ2lzdGVyICovCisJdm9pZCBfX2lvbWVtICpJTVJyZWdhZGRyOwkvKiBIU1RfSU1SIHJlZ2lzdGVyICovCisJdm9pZCBfX2lvbWVtICpJU0NScmVnYWRkcjsJLyogSFNUX0lTQ1IgcmVnaXN0ZXIgKi8KKwkvKiBJRiB0eXBlIDAsIEJBUiAwIGFuZCBpZiB0eXBlIDIsIEJBUiAwIGRvb3JiZWxsIHJlZ2lzdGVyIG1lbW9yeSBtYXAgKi8KKwl2b2lkIF9faW9tZW0gKlJRREJyZWdhZGRyOwkvKiBSUV9ET09SQkVMTCByZWdpc3RlciAqLworCXZvaWQgX19pb21lbSAqV1FEQnJlZ2FkZHI7CS8qIFdRX0RPT1JCRUxMIHJlZ2lzdGVyICovCisJdm9pZCBfX2lvbWVtICpFUUNRREJyZWdhZGRyOwkvKiBFUUNRX0RPT1JCRUxMIHJlZ2lzdGVyICovCisJdm9pZCBfX2lvbWVtICpNUURCcmVnYWRkcjsJLyogTVFfRE9PUkJFTEwgcmVnaXN0ZXIgKi8KKwl2b2lkIF9faW9tZW0gKkJNQlhyZWdhZGRyOwkvKiBCb290U3RyYXAgTUJYIHJlZ2lzdGVyICovCiAKIAl1aW50MzJfdCB1ZV9tYXNrX2xvOwogCXVpbnQzMl90IHVlX21hc2tfaGk7CkBAIC00NjYsNiArNDg0LDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGNsaXN0OwogCWVudW0gbHBmY19zZ2VfdHlwZSBidWZmX3R5cGU7IC8qIGlzIHRoaXMgYSBzY3NpIHNnbCAqLwogCWVudW0gbHBmY19zZ2xfc3RhdGUgc3RhdGU7CisJc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHA7IC8qIG5kbHAgYXNzb2NpYXRlZCB3aXRoIElPICovCiAJdWludDE2X3QgaW90YWc7ICAgICAgICAgLyogcHJlLWFzc2lnbmVkIElPIHRhZyAqLwogCXVpbnQxNl90IHNsaTRfeHJpdGFnOyAgIC8qIHByZS1hc3NpZ25lZCBYUkksIChPWElEKSB0YWcuICovCiAJc3RydWN0IHNsaTRfc2dlICpzZ2w7CS8qIHByZS1hc3NpZ25lZCBTR0wgKi8KQEAgLTUzMiw3ICs1NTEsNiBAQAogc3RydWN0IGxwZmNfcnBpX2hkciAqbHBmY19zbGk0X2NyZWF0ZV9ycGlfaGRyKHN0cnVjdCBscGZjX2hiYSAqKTsKIHZvaWQgbHBmY19zbGk0X3JlbW92ZV9ycGlfaGRycyhzdHJ1Y3QgbHBmY19oYmEgKik7CiBpbnQgbHBmY19zbGk0X2FsbG9jX3JwaShzdHJ1Y3QgbHBmY19oYmEgKik7Ci12b2lkIF9fbHBmY19zbGk0X2ZyZWVfcnBpKHN0cnVjdCBscGZjX2hiYSAqLCBpbnQpOwogdm9pZCBscGZjX3NsaTRfZnJlZV9ycGkoc3RydWN0IGxwZmNfaGJhICosIGludCk7CiB2b2lkIGxwZmNfc2xpNF9yZW1vdmVfcnBpcyhzdHJ1Y3QgbHBmY19oYmEgKik7CiB2b2lkIGxwZmNfc2xpNF9hc3luY19ldmVudF9wcm9jKHN0cnVjdCBscGZjX2hiYSAqKTsKQEAgLTU0OCw3ICs1NjYsNyBAQAogaW50IGxwZmNfc2xpNF9hZGRfZmNmX3JlY29yZChzdHJ1Y3QgbHBmY19oYmEgKiwgc3RydWN0IGZjZl9yZWNvcmQgKik7CiB2b2lkIGxwZmNfc2xpX3JlbW92ZV9kZmx0X2ZjZihzdHJ1Y3QgbHBmY19oYmEgKik7CiBpbnQgbHBmY19zbGk0X2dldF9lbHNfaW9jYl9jbnQoc3RydWN0IGxwZmNfaGJhICopOwotaW50IGxwZmNfc2xpNF9pbml0X3ZwaShzdHJ1Y3QgbHBmY19oYmEgKiwgdWludDE2X3QpOworaW50IGxwZmNfc2xpNF9pbml0X3ZwaShzdHJ1Y3QgbHBmY192cG9ydCAqKTsKIHVpbnQzMl90IGxwZmNfc2xpNF9jcV9yZWxlYXNlKHN0cnVjdCBscGZjX3F1ZXVlICosIGJvb2wpOwogdWludDMyX3QgbHBmY19zbGk0X2VxX3JlbGVhc2Uoc3RydWN0IGxwZmNfcXVldWUgKiwgYm9vbCk7CiB2b2lkIGxwZmNfc2xpNF9mY2ZpX3VucmVnKHN0cnVjdCBscGZjX2hiYSAqLCB1aW50MTZfdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3ZlcnNpb24uaCBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfdmVyc2lvbi5oCmluZGV4IDdhMWI1YjEuLjM4NmNmOTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfdmVyc2lvbi5oCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfdmVyc2lvbi5oCkBAIC0xOCw3ICsxOCw3IEBACiAgKiBpbmNsdWRlZCB3aXRoIHRoaXMgcGFja2FnZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNkZWZpbmUgTFBGQ19EUklWRVJfVkVSU0lPTiAiOC4zLjE4IgorI2RlZmluZSBMUEZDX0RSSVZFUl9WRVJTSU9OICI4LjMuMjAiCiAjZGVmaW5lIExQRkNfRFJJVkVSX05BTUUJCSJscGZjIgogI2RlZmluZSBMUEZDX1NQX0RSSVZFUl9IQU5ETEVSX05BTUUJImxwZmM6c3AiCiAjZGVmaW5lIExQRkNfRlBfRFJJVkVSX0hBTkRMRVJfTkFNRQkibHBmYzpmcCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfdnBvcnQuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfdnBvcnQuYwppbmRleCBhNTI4MWNlLi42YjhkMjk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Zwb3J0LmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY192cG9ydC5jCkBAIC0zOTUsOCArMzk1LDggQEAKIAkgKiBieSB0aGUgcG9ydC4KIAkgKi8KIAlpZiAoKHBoYmEtPnNsaV9yZXYgPT0gTFBGQ19TTElfUkVWNCkgJiYKLQkJKHBwb3J0LT5mY19mbGFnICYgRkNfVkZJX1JFR0lTVEVSRUQpKSB7Ci0JCXJjID0gbHBmY19zbGk0X2luaXRfdnBpKHBoYmEsIHZwaSk7CisJICAgIChwcG9ydC0+ZmNfZmxhZyAmIEZDX1ZGSV9SRUdJU1RFUkVEKSkgeworCQlyYyA9IGxwZmNfc2xpNF9pbml0X3ZwaSh2cG9ydCk7CiAJCWlmIChyYykgewogCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfVlBPUlQsCiAJCQkJCSIxODM4IEZhaWxlZCB0byBJTklUX1ZQSSBvbiB2cGkgJWQgIgpAQCAtNDE4LDcgKzQxOCw3IEBACiAKIAlpZiAoKHBoYmEtPmxpbmtfc3RhdGUgPCBMUEZDX0xJTktfVVApIHx8CiAJICAgIChwcG9ydC0+cG9ydF9zdGF0ZSA8IExQRkNfRkFCUklDX0NGR19MSU5LKSB8fAotCSAgICAocGhiYS0+ZmNfdG9wb2xvZ3kgPT0gVE9QT0xPR1lfTE9PUCkpIHsKKwkgICAgKHBoYmEtPmZjX3RvcG9sb2d5ID09IExQRkNfVE9QT0xPR1lfTE9PUCkpIHsKIAkJbHBmY192cG9ydF9zZXRfc3RhdGUodnBvcnQsIEZDX1ZQT1JUX0xJTktET1dOKTsKIAkJcmMgPSBWUE9SVF9PSzsKIAkJZ290byBvdXQ7CkBAIC01MTQsNyArNTE0LDcgQEAKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGxwZmNfc2hvc3RfZnJvbV92cG9ydCh2cG9ydCk7CiAKIAlpZiAoKHBoYmEtPmxpbmtfc3RhdGUgPCBMUEZDX0xJTktfVVApIHx8Ci0JICAgIChwaGJhLT5mY190b3BvbG9neSA9PSBUT1BPTE9HWV9MT09QKSkgeworCSAgICAocGhiYS0+ZmNfdG9wb2xvZ3kgPT0gTFBGQ19UT1BPTE9HWV9MT09QKSkgewogCQlscGZjX3Zwb3J0X3NldF9zdGF0ZSh2cG9ydCwgRkNfVlBPUlRfTElOS0RPV04pOwogCQlyZXR1cm4gVlBPUlRfT0s7CiAJfQpAQCAtNjY1LDcgKzY2NSw3IEBACiAJaWYgKG5kbHAgJiYgTkxQX0NIS19OT0RFX0FDVChuZGxwKSAmJgogCSAgICBuZGxwLT5ubHBfc3RhdGUgPT0gTkxQX1NURV9VTk1BUFBFRF9OT0RFICYmCiAJICAgIHBoYmEtPmxpbmtfc3RhdGUgPj0gTFBGQ19MSU5LX1VQICYmCi0JICAgIHBoYmEtPmZjX3RvcG9sb2d5ICE9IFRPUE9MT0dZX0xPT1ApIHsKKwkgICAgcGhiYS0+ZmNfdG9wb2xvZ3kgIT0gTFBGQ19UT1BPTE9HWV9MT09QKSB7CiAJCWlmICh2cG9ydC0+Y2ZnX2VuYWJsZV9kYV9pZCkgewogCQkJdGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMocGhiYS0+ZmNfcmF0b3YgKiAyMDAwKTsKIAkJCWlmICghbHBmY19uc19jbWQodnBvcnQsIFNMSV9DVE5TX0RBX0lELCAwLCAwKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9NYWtlZmlsZSBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9NYWtlZmlsZQppbmRleCBmNDY5OTE1Li41ODI2ZWQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL01ha2VmaWxlCkBAIC0xLDMgKzEsNSBAQAogb2JqLSQoQ09ORklHX01FR0FSQUlEX01NKQkrPSBtZWdhcmFpZF9tbS5vCiBvYmotJChDT05GSUdfTUVHQVJBSURfTUFJTEJPWCkJKz0gbWVnYXJhaWRfbWJveC5vCiBvYmotJChDT05GSUdfTUVHQVJBSURfU0FTKQkrPSBtZWdhcmFpZF9zYXMubworbWVnYXJhaWRfc2FzLW9ianMgOj0gbWVnYXJhaWRfc2FzX2Jhc2UubyBtZWdhcmFpZF9zYXNfZnVzaW9uLm8gXAorCW1lZ2FyYWlkX3Nhc19mcC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzLmMgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0NTFiYzAuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhcy5jCisrKyAvZGV2L251bGwKQEAgLTEsNTE5MyArMCwwIEBACi0vKgotICoKLSAqCQlMaW51eCBNZWdhUkFJRCBkcml2ZXIgZm9yIFNBUyBiYXNlZCBSQUlEIGNvbnRyb2xsZXJzCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDUgIExTSSBDb3Jwb3JhdGlvbi4KLSAqCi0gKgkgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKgkgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICoJICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCi0gKgkgICAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIEZJTEUJCTogbWVnYXJhaWRfc2FzLmMKLSAqIFZlcnNpb24gICAgIDogdjAwLjAwLjA0LjMxLXJjMQotICoKLSAqIEF1dGhvcnM6Ci0gKgkoZW1haWwtaWQgOiBtZWdhcmFpZGxpbnV4QGxzaS5jb20pCi0gKiAJU3JlZW5pdmFzIEJhZ2Fsa290ZQotICogCVN1bWFudCBQYXRybwotICoJQm8gWWFuZwotICoKLSAqIExpc3Qgb2Ygc3VwcG9ydGVkIGNvbnRyb2xsZXJzCi0gKgotICogT0VNCVByb2R1Y3QgTmFtZQkJCVZJRAlESUQJU1NWSUQJU1NJRAotICogLS0tCS0tLS0tLS0tLS0tLQkJCS0tLQktLS0JLS0tLQktLS0tCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3Vpby5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+Ci0jaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KLSNpbmNsdWRlIDxsaW51eC9wb2xsLmg+Ci0KLSNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KLSNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgotI2luY2x1ZGUgPHNjc2kvc2NzaV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgotI2luY2x1ZGUgIm1lZ2FyYWlkX3Nhcy5oIgotCi0vKgotICogcG9sbF9tb2RlX2lvOjEtIHNjaGVkdWxlIGNvbXBsZXRlIGNvbXBsZXRpb24gZnJvbSBxIGNtZAotICovCi1zdGF0aWMgdW5zaWduZWQgaW50IHBvbGxfbW9kZV9pbzsKLW1vZHVsZV9wYXJhbV9uYW1lZChwb2xsX21vZGVfaW8sIHBvbGxfbW9kZV9pbywgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MocG9sbF9tb2RlX2lvLAotCSJDb21wbGV0ZSBjbWRzIGZyb20gSU8gcGF0aCwgKGRlZmF1bHQ9MCkiKTsKLQotLyoKLSAqIE51bWJlciBvZiBzZWN0b3JzIHBlciBJTyBjb21tYW5kCi0gKiBXaWxsIGJlIHNldCBpbiBtZWdhc2FzX2luaXRfbWZpIGlmIHVzZXIgZG9lcyBub3QgcHJvdmlkZQotICovCi1zdGF0aWMgdW5zaWduZWQgaW50IG1heF9zZWN0b3JzOwotbW9kdWxlX3BhcmFtX25hbWVkKG1heF9zZWN0b3JzLCBtYXhfc2VjdG9ycywgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MobWF4X3NlY3RvcnMsCi0JIk1heGltdW0gbnVtYmVyIG9mIHNlY3RvcnMgcGVyIElPIGNvbW1hbmQiKTsKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX1ZFUlNJT04oTUVHQVNBU19WRVJTSU9OKTsKLU1PRFVMRV9BVVRIT1IoIm1lZ2FyYWlkbGludXhAbHNpLmNvbSIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJMU0kgTWVnYVJBSUQgU0FTIERyaXZlciIpOwotCi1zdGF0aWMgaW50IG1lZ2FzYXNfdHJhbnNpdGlvbl90b19yZWFkeShzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UpOwotc3RhdGljIGludCBtZWdhc2FzX2dldF9wZF9saXN0KHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSk7Ci1zdGF0aWMgaW50IG1lZ2FzYXNfaXNzdWVfaW5pdF9tZmkoc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlKTsKLXN0YXRpYyBpbnQgbWVnYXNhc19yZWdpc3Rlcl9hZW4oc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlLAotCQkJCXUzMiBzZXFfbnVtLCB1MzIgY2xhc3NfbG9jYWxlX3dvcmQpOwotLyoKLSAqIFBDSSBJRCB0YWJsZSBmb3IgYWxsIHN1cHBvcnRlZCBjb250cm9sbGVycwotICovCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgbWVnYXNhc19wY2lfdGFibGVbXSA9IHsKLQotCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTFNJX0xPR0lDLCBQQ0lfREVWSUNFX0lEX0xTSV9TQVMxMDY0Uil9LAotCS8qIHhzY2FsZSBJT1AgKi8KLQl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0xTSV9MT0dJQywgUENJX0RFVklDRV9JRF9MU0lfU0FTMTA3OFIpfSwKLQkvKiBwcGMgSU9QICovCi0Je1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9MU0lfTE9HSUMsIFBDSV9ERVZJQ0VfSURfTFNJX1NBUzEwNzhERSl9LAotCS8qIHBwYyBJT1AgKi8KLQl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0xTSV9MT0dJQywgUENJX0RFVklDRV9JRF9MU0lfU0FTMTA3OEdFTjIpfSwKLQkvKiBnZW4yKi8KLQl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0xTSV9MT0dJQywgUENJX0RFVklDRV9JRF9MU0lfU0FTMDA3OUdFTjIpfSwKLQkvKiBnZW4yKi8KLQl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0xTSV9MT0dJQywgUENJX0RFVklDRV9JRF9MU0lfU0FTMDA3M1NLSU5OWSl9LAotCS8qIHNraW5ueSovCi0Je1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9MU0lfTE9HSUMsIFBDSV9ERVZJQ0VfSURfTFNJX1NBUzAwNzFTS0lOTlkpfSwKLQkvKiBza2lubnkqLwotCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTFNJX0xPR0lDLCBQQ0lfREVWSUNFX0lEX0xTSV9WRVJERV9aQ1IpfSwKLQkvKiB4c2NhbGUgSU9QLCB2ZWdhICovCi0Je1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9ERUxMLCBQQ0lfREVWSUNFX0lEX0RFTExfUEVSQzUpfSwKLQkvKiB4c2NhbGUgSU9QICovCi0Je30KLX07Ci0KLU1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBtZWdhc2FzX3BjaV90YWJsZSk7Ci0KLXN0YXRpYyBpbnQgbWVnYXNhc19tZ210X21ham9ybm87Ci1zdGF0aWMgc3RydWN0IG1lZ2FzYXNfbWdtdF9pbmZvIG1lZ2FzYXNfbWdtdF9pbmZvOwotc3RhdGljIHN0cnVjdCBmYXN5bmNfc3RydWN0ICptZWdhc2FzX2FzeW5jX3F1ZXVlOwotc3RhdGljIERFRklORV9NVVRFWChtZWdhc2FzX2FzeW5jX3F1ZXVlX211dGV4KTsKLQotc3RhdGljIGludCBtZWdhc2FzX3BvbGxfd2FpdF9hZW47Ci1zdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQobWVnYXNhc19wb2xsX3dhaXQpOwotc3RhdGljIHUzMiBzdXBwb3J0X3BvbGxfZm9yX2V2ZW50Owotc3RhdGljIHUzMiBtZWdhc2FzX2RiZ19sdmw7Ci1zdGF0aWMgdTMyIHN1cHBvcnRfZGV2aWNlX2NoYW5nZTsKLQotLyogZGVmaW5lIGxvY2sgZm9yIGFlbiBwb2xsICovCi1zcGlubG9ja190IHBvbGxfYWVuX2xvY2s7Ci0KLXN0YXRpYyB2b2lkCi1tZWdhc2FzX2NvbXBsZXRlX2NtZChzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UsIHN0cnVjdCBtZWdhc2FzX2NtZCAqY21kLAotCQkgICAgIHU4IGFsdF9zdGF0dXMpOwotCi0vKioKLSAqIG1lZ2FzYXNfZ2V0X2NtZCAtCUdldCBhIGNvbW1hbmQgZnJvbSB0aGUgZnJlZSBwb29sCi0gKiBAaW5zdGFuY2U6CQlBZGFwdGVyIHNvZnQgc3RhdGUKLSAqCi0gKiBSZXR1cm5zIGEgZnJlZSBjb21tYW5kIGZyb20gdGhlIHBvb2wKLSAqLwotc3RhdGljIHN0cnVjdCBtZWdhc2FzX2NtZCAqbWVnYXNhc19nZXRfY21kKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlCi0JCQkJCQkgICppbnN0YW5jZSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBtZWdhc2FzX2NtZCAqY21kID0gTlVMTDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZpbnN0YW5jZS0+Y21kX3Bvb2xfbG9jaywgZmxhZ3MpOwotCi0JaWYgKCFsaXN0X2VtcHR5KCZpbnN0YW5jZS0+Y21kX3Bvb2wpKSB7Ci0JCWNtZCA9IGxpc3RfZW50cnkoKCZpbnN0YW5jZS0+Y21kX3Bvb2wpLT5uZXh0LAotCQkJCSBzdHJ1Y3QgbWVnYXNhc19jbWQsIGxpc3QpOwotCQlsaXN0X2RlbF9pbml0KCZjbWQtPmxpc3QpOwotCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX0VSUiAibWVnYXNhczogQ29tbWFuZCBwb29sIGVtcHR5IVxuIik7Ci0JfQotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5zdGFuY2UtPmNtZF9wb29sX2xvY2ssIGZsYWdzKTsKLQlyZXR1cm4gY21kOwotfQotCi0vKioKLSAqIG1lZ2FzYXNfcmV0dXJuX2NtZCAtCVJldHVybiBhIGNtZCB0byBmcmVlIGNvbW1hbmQgcG9vbAotICogQGluc3RhbmNlOgkJQWRhcHRlciBzb2Z0IHN0YXRlCi0gKiBAY21kOgkJQ29tbWFuZCBwYWNrZXQgdG8gYmUgcmV0dXJuZWQgdG8gZnJlZSBjb21tYW5kIHBvb2wKLSAqLwotc3RhdGljIGlubGluZSB2b2lkCi1tZWdhc2FzX3JldHVybl9jbWQoc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlLCBzdHJ1Y3QgbWVnYXNhc19jbWQgKmNtZCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmluc3RhbmNlLT5jbWRfcG9vbF9sb2NrLCBmbGFncyk7Ci0KLQljbWQtPnNjbWQgPSBOVUxMOwotCWxpc3RfYWRkX3RhaWwoJmNtZC0+bGlzdCwgJmluc3RhbmNlLT5jbWRfcG9vbCk7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbnN0YW5jZS0+Y21kX3Bvb2xfbG9jaywgZmxhZ3MpOwotfQotCi0KLS8qKgotKglUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZCBmb3IgeHNjYWxlIAotKgkoZGV2aWNlaWQgOiAxMDY0UiwgUEVSQzUpIGNvbnRyb2xsZXJzCi0qLwotCi0vKioKLSAqIG1lZ2FzYXNfZW5hYmxlX2ludHJfeHNjYWxlIC0JRW5hYmxlcyBpbnRlcnJ1cHRzCi0gKiBAcmVnczoJCQlNRkkgcmVnaXN0ZXIgc2V0Ci0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAotbWVnYXNhc19lbmFibGVfaW50cl94c2NhbGUoc3RydWN0IG1lZ2FzYXNfcmVnaXN0ZXJfc2V0IF9faW9tZW0gKiByZWdzKQotewotCXdyaXRlbCgwLCAmKHJlZ3MpLT5vdXRib3VuZF9pbnRyX21hc2spOwotCi0JLyogRHVtbXkgcmVhZGwgdG8gZm9yY2UgcGNpIGZsdXNoICovCi0JcmVhZGwoJnJlZ3MtPm91dGJvdW5kX2ludHJfbWFzayk7Ci19Ci0KLS8qKgotICogbWVnYXNhc19kaXNhYmxlX2ludHJfeHNjYWxlIC1EaXNhYmxlcyBpbnRlcnJ1cHQKLSAqIEByZWdzOgkJCU1GSSByZWdpc3RlciBzZXQKLSAqLwotc3RhdGljIGlubGluZSB2b2lkCi1tZWdhc2FzX2Rpc2FibGVfaW50cl94c2NhbGUoc3RydWN0IG1lZ2FzYXNfcmVnaXN0ZXJfc2V0IF9faW9tZW0gKiByZWdzKQotewotCXUzMiBtYXNrID0gMHgxZjsKLQl3cml0ZWwobWFzaywgJnJlZ3MtPm91dGJvdW5kX2ludHJfbWFzayk7Ci0JLyogRHVtbXkgcmVhZGwgdG8gZm9yY2UgcGNpIGZsdXNoICovCi0JcmVhZGwoJnJlZ3MtPm91dGJvdW5kX2ludHJfbWFzayk7Ci19Ci0KLS8qKgotICogbWVnYXNhc19yZWFkX2Z3X3N0YXR1c19yZWdfeHNjYWxlIC0gcmV0dXJucyB0aGUgY3VycmVudCBGVyBzdGF0dXMgdmFsdWUKLSAqIEByZWdzOgkJCU1GSSByZWdpc3RlciBzZXQKLSAqLwotc3RhdGljIHUzMgotbWVnYXNhc19yZWFkX2Z3X3N0YXR1c19yZWdfeHNjYWxlKHN0cnVjdCBtZWdhc2FzX3JlZ2lzdGVyX3NldCBfX2lvbWVtICogcmVncykKLXsKLQlyZXR1cm4gcmVhZGwoJihyZWdzKS0+b3V0Ym91bmRfbXNnXzApOwotfQotLyoqCi0gKiBtZWdhc2FzX2NsZWFyX2ludGVycnVwdF94c2NhbGUgLQlDaGVjayAmIGNsZWFyIGludGVycnVwdAotICogQHJlZ3M6CQkJCU1GSSByZWdpc3RlciBzZXQKLSAqLwotc3RhdGljIGludCAKLW1lZ2FzYXNfY2xlYXJfaW50cl94c2NhbGUoc3RydWN0IG1lZ2FzYXNfcmVnaXN0ZXJfc2V0IF9faW9tZW0gKiByZWdzKQotewotCXUzMiBzdGF0dXM7Ci0JdTMyIG1maVN0YXR1cyA9IDA7Ci0JLyoKLQkgKiBDaGVjayBpZiBpdCBpcyBvdXIgaW50ZXJydXB0Ci0JICovCi0Jc3RhdHVzID0gcmVhZGwoJnJlZ3MtPm91dGJvdW5kX2ludHJfc3RhdHVzKTsKLQotCWlmIChzdGF0dXMgJiBNRklfT0JfSU5UUl9TVEFUVVNfTUFTSykKLQkJbWZpU3RhdHVzID0gTUZJX0lOVFJfRkxBR19SRVBMWV9NRVNTQUdFOwotCWlmIChzdGF0dXMgJiBNRklfWFNDQUxFX09NUjBfQ0hBTkdFX0lOVEVSUlVQVCkKLQkJbWZpU3RhdHVzIHw9IE1GSV9JTlRSX0ZMQUdfRklSTVdBUkVfU1RBVEVfQ0hBTkdFOwotCi0JLyoKLQkgKiBDbGVhciB0aGUgaW50ZXJydXB0IGJ5IHdyaXRpbmcgYmFjayB0aGUgc2FtZSB2YWx1ZQotCSAqLwotCWlmIChtZmlTdGF0dXMpCi0JCXdyaXRlbChzdGF0dXMsICZyZWdzLT5vdXRib3VuZF9pbnRyX3N0YXR1cyk7Ci0KLQkvKiBEdW1teSByZWFkbCB0byBmb3JjZSBwY2kgZmx1c2ggKi8KLQlyZWFkbCgmcmVncy0+b3V0Ym91bmRfaW50cl9zdGF0dXMpOwotCi0JcmV0dXJuIG1maVN0YXR1czsKLX0KLQotLyoqCi0gKiBtZWdhc2FzX2ZpcmVfY21kX3hzY2FsZSAtCVNlbmRzIGNvbW1hbmQgdG8gdGhlIEZXCi0gKiBAZnJhbWVfcGh5c19hZGRyIDoJCVBoeXNpY2FsIGFkZHJlc3Mgb2YgY21kCi0gKiBAZnJhbWVfY291bnQgOgkJTnVtYmVyIG9mIGZyYW1lcyBmb3IgdGhlIGNvbW1hbmQKLSAqIEByZWdzIDoJCQlNRkkgcmVnaXN0ZXIgc2V0Ci0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCAKLW1lZ2FzYXNfZmlyZV9jbWRfeHNjYWxlKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSwKLQkJZG1hX2FkZHJfdCBmcmFtZV9waHlzX2FkZHIsCi0JCXUzMiBmcmFtZV9jb3VudCwKLQkJc3RydWN0IG1lZ2FzYXNfcmVnaXN0ZXJfc2V0IF9faW9tZW0gKnJlZ3MpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW5zdGFuY2UtPmhiYV9sb2NrLCBmbGFncyk7Ci0Jd3JpdGVsKChmcmFtZV9waHlzX2FkZHIgPj4gMyl8KGZyYW1lX2NvdW50KSwKLQkgICAgICAgJihyZWdzKS0+aW5ib3VuZF9xdWV1ZV9wb3J0KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbnN0YW5jZS0+aGJhX2xvY2ssIGZsYWdzKTsKLX0KLQotLyoqCi0gKiBtZWdhc2FzX2FkcF9yZXNldF94c2NhbGUgLSAgRm9yIGNvbnRyb2xsZXIgcmVzZXQKLSAqIEByZWdzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1GSSByZWdpc3RlciBzZXQKLSAqLwotc3RhdGljIGludAotbWVnYXNhc19hZHBfcmVzZXRfeHNjYWxlKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSwKLQlzdHJ1Y3QgbWVnYXNhc19yZWdpc3Rlcl9zZXQgX19pb21lbSAqcmVncykKLXsKLQl1MzIgaTsKLQl1MzIgcGNpZGF0YTsKLQl3cml0ZWwoTUZJX0FEUF9SRVNFVCwgJnJlZ3MtPmluYm91bmRfZG9vcmJlbGwpOwotCi0JZm9yIChpID0gMDsgaSA8IDM7IGkrKykKLQkJbXNsZWVwKDEwMDApOyAvKiBzbGVlcCBmb3IgMyBzZWNzICovCi0JcGNpZGF0YSAgPSAwOwotCXBjaV9yZWFkX2NvbmZpZ19kd29yZChpbnN0YW5jZS0+cGRldiwgTUZJXzEwNjhfUENTUl9PRkZTRVQsICZwY2lkYXRhKTsKLQlwcmludGsoS0VSTl9OT1RJQ0UgInBjaWRhdGEgPSAleFxuIiwgcGNpZGF0YSk7Ci0JaWYgKHBjaWRhdGEgJiAweDIpIHsKLQkJcHJpbnRrKEtFUk5fTk9USUNFICJtZmkgMTA2OCBvZmZzZXQgcmVhZD0leFxuIiwgcGNpZGF0YSk7Ci0JCXBjaWRhdGEgJj0gfjB4MjsKLQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChpbnN0YW5jZS0+cGRldiwKLQkJCQlNRklfMTA2OF9QQ1NSX09GRlNFVCwgcGNpZGF0YSk7Ci0KLQkJZm9yIChpID0gMDsgaSA8IDI7IGkrKykKLQkJCW1zbGVlcCgxMDAwKTsgLyogbmVlZCB0byB3YWl0IDIgc2VjcyBhZ2FpbiAqLwotCi0JCXBjaWRhdGEgID0gMDsKLQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGluc3RhbmNlLT5wZGV2LAotCQkJCU1GSV8xMDY4X0ZXX0hBTkRTSEFLRV9PRkZTRVQsICZwY2lkYXRhKTsKLQkJcHJpbnRrKEtFUk5fTk9USUNFICIxMDY4IG9mZnNldCBoYW5kc2hha2UgcmVhZD0leFxuIiwgcGNpZGF0YSk7Ci0JCWlmICgocGNpZGF0YSAmIDB4ZmZmZjAwMDApID09IE1GSV8xMDY4X0ZXX1JFQURZKSB7Ci0JCQlwcmludGsoS0VSTl9OT1RJQ0UgIjEwNjggb2Zmc2V0IHBjaWR0PSV4XG4iLCBwY2lkYXRhKTsKLQkJCXBjaWRhdGEgPSAwOwotCQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChpbnN0YW5jZS0+cGRldiwKLQkJCQlNRklfMTA2OF9GV19IQU5EU0hBS0VfT0ZGU0VULCBwY2lkYXRhKTsKLQkJfQotCX0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBtZWdhc2FzX2NoZWNrX3Jlc2V0X3hzY2FsZSAtCUZvciBjb250cm9sbGVyIHJlc2V0IGNoZWNrCi0gKiBAcmVnczoJCQkJTUZJIHJlZ2lzdGVyIHNldAotICovCi1zdGF0aWMgaW50Ci1tZWdhc2FzX2NoZWNrX3Jlc2V0X3hzY2FsZShzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UsCi0JCXN0cnVjdCBtZWdhc2FzX3JlZ2lzdGVyX3NldCBfX2lvbWVtICpyZWdzKQotewotCXUzMiBjb25zdW1lcjsKLQljb25zdW1lciA9ICppbnN0YW5jZS0+Y29uc3VtZXI7Ci0KLQlpZiAoKGluc3RhbmNlLT5hZHByZWNvdmVyeSAhPSBNRUdBU0FTX0hCQV9PUEVSQVRJT05BTCkgJiYKLQkJKCppbnN0YW5jZS0+Y29uc3VtZXIgPT0gTUVHQVNBU19BRFBSRVNFVF9JTlBST0dfU0lHTikpIHsKLQkJcmV0dXJuIDE7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2VfdGVtcGxhdGUgbWVnYXNhc19pbnN0YW5jZV90ZW1wbGF0ZV94c2NhbGUgPSB7Ci0KLQkuZmlyZV9jbWQgPSBtZWdhc2FzX2ZpcmVfY21kX3hzY2FsZSwKLQkuZW5hYmxlX2ludHIgPSBtZWdhc2FzX2VuYWJsZV9pbnRyX3hzY2FsZSwKLQkuZGlzYWJsZV9pbnRyID0gbWVnYXNhc19kaXNhYmxlX2ludHJfeHNjYWxlLAotCS5jbGVhcl9pbnRyID0gbWVnYXNhc19jbGVhcl9pbnRyX3hzY2FsZSwKLQkucmVhZF9md19zdGF0dXNfcmVnID0gbWVnYXNhc19yZWFkX2Z3X3N0YXR1c19yZWdfeHNjYWxlLAotCS5hZHBfcmVzZXQgPSBtZWdhc2FzX2FkcF9yZXNldF94c2NhbGUsCi0JLmNoZWNrX3Jlc2V0ID0gbWVnYXNhc19jaGVja19yZXNldF94c2NhbGUsCi19OwotCi0vKioKLSoJVGhpcyBpcyB0aGUgZW5kIG9mIHNldCBvZiBmdW5jdGlvbnMgJiBkZWZpbml0aW9ucyBzcGVjaWZpYyAKLSoJdG8geHNjYWxlIChkZXZpY2VpZCA6IDEwNjRSLCBQRVJDNSkgY29udHJvbGxlcnMKLSovCi0KLS8qKgotKglUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZCBmb3IgcHBjIChkZXZpY2VpZCA6IDB4NjApIAotKiAJY29udHJvbGxlcnMKLSovCi0KLS8qKgotICogbWVnYXNhc19lbmFibGVfaW50cl9wcGMgLQlFbmFibGVzIGludGVycnVwdHMKLSAqIEByZWdzOgkJCU1GSSByZWdpc3RlciBzZXQKLSAqLwotc3RhdGljIGlubGluZSB2b2lkCi1tZWdhc2FzX2VuYWJsZV9pbnRyX3BwYyhzdHJ1Y3QgbWVnYXNhc19yZWdpc3Rlcl9zZXQgX19pb21lbSAqIHJlZ3MpCi17Ci0Jd3JpdGVsKDB4RkZGRkZGRkYsICYocmVncyktPm91dGJvdW5kX2Rvb3JiZWxsX2NsZWFyKTsKLSAgICAKLQl3cml0ZWwofjB4ODAwMDAwMDAsICYocmVncyktPm91dGJvdW5kX2ludHJfbWFzayk7Ci0KLQkvKiBEdW1teSByZWFkbCB0byBmb3JjZSBwY2kgZmx1c2ggKi8KLQlyZWFkbCgmcmVncy0+b3V0Ym91bmRfaW50cl9tYXNrKTsKLX0KLQotLyoqCi0gKiBtZWdhc2FzX2Rpc2FibGVfaW50cl9wcGMgLQlEaXNhYmxlIGludGVycnVwdAotICogQHJlZ3M6CQkJTUZJIHJlZ2lzdGVyIHNldAotICovCi1zdGF0aWMgaW5saW5lIHZvaWQKLW1lZ2FzYXNfZGlzYWJsZV9pbnRyX3BwYyhzdHJ1Y3QgbWVnYXNhc19yZWdpc3Rlcl9zZXQgX19pb21lbSAqIHJlZ3MpCi17Ci0JdTMyIG1hc2sgPSAweEZGRkZGRkZGOwotCXdyaXRlbChtYXNrLCAmcmVncy0+b3V0Ym91bmRfaW50cl9tYXNrKTsKLQkvKiBEdW1teSByZWFkbCB0byBmb3JjZSBwY2kgZmx1c2ggKi8KLQlyZWFkbCgmcmVncy0+b3V0Ym91bmRfaW50cl9tYXNrKTsKLX0KLQotLyoqCi0gKiBtZWdhc2FzX3JlYWRfZndfc3RhdHVzX3JlZ19wcGMgLSByZXR1cm5zIHRoZSBjdXJyZW50IEZXIHN0YXR1cyB2YWx1ZQotICogQHJlZ3M6CQkJTUZJIHJlZ2lzdGVyIHNldAotICovCi1zdGF0aWMgdTMyCi1tZWdhc2FzX3JlYWRfZndfc3RhdHVzX3JlZ19wcGMoc3RydWN0IG1lZ2FzYXNfcmVnaXN0ZXJfc2V0IF9faW9tZW0gKiByZWdzKQotewotCXJldHVybiByZWFkbCgmKHJlZ3MpLT5vdXRib3VuZF9zY3JhdGNoX3BhZCk7Ci19Ci0KLS8qKgotICogbWVnYXNhc19jbGVhcl9pbnRlcnJ1cHRfcHBjIC0JQ2hlY2sgJiBjbGVhciBpbnRlcnJ1cHQKLSAqIEByZWdzOgkJCQlNRkkgcmVnaXN0ZXIgc2V0Ci0gKi8KLXN0YXRpYyBpbnQgCi1tZWdhc2FzX2NsZWFyX2ludHJfcHBjKHN0cnVjdCBtZWdhc2FzX3JlZ2lzdGVyX3NldCBfX2lvbWVtICogcmVncykKLXsKLQl1MzIgc3RhdHVzOwotCS8qCi0JICogQ2hlY2sgaWYgaXQgaXMgb3VyIGludGVycnVwdAotCSAqLwotCXN0YXR1cyA9IHJlYWRsKCZyZWdzLT5vdXRib3VuZF9pbnRyX3N0YXR1cyk7Ci0KLQlpZiAoIShzdGF0dXMgJiBNRklfUkVQTFlfMTA3OF9NRVNTQUdFX0lOVEVSUlVQVCkpIHsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyoKLQkgKiBDbGVhciB0aGUgaW50ZXJydXB0IGJ5IHdyaXRpbmcgYmFjayB0aGUgc2FtZSB2YWx1ZQotCSAqLwotCXdyaXRlbChzdGF0dXMsICZyZWdzLT5vdXRib3VuZF9kb29yYmVsbF9jbGVhcik7Ci0KLQkvKiBEdW1teSByZWFkbCB0byBmb3JjZSBwY2kgZmx1c2ggKi8KLQlyZWFkbCgmcmVncy0+b3V0Ym91bmRfZG9vcmJlbGxfY2xlYXIpOwotCi0JcmV0dXJuIDE7Ci19Ci0vKioKLSAqIG1lZ2FzYXNfZmlyZV9jbWRfcHBjIC0JU2VuZHMgY29tbWFuZCB0byB0aGUgRlcKLSAqIEBmcmFtZV9waHlzX2FkZHIgOgkJUGh5c2ljYWwgYWRkcmVzcyBvZiBjbWQKLSAqIEBmcmFtZV9jb3VudCA6CQlOdW1iZXIgb2YgZnJhbWVzIGZvciB0aGUgY29tbWFuZAotICogQHJlZ3MgOgkJCU1GSSByZWdpc3RlciBzZXQKLSAqLwotc3RhdGljIGlubGluZSB2b2lkIAotbWVnYXNhc19maXJlX2NtZF9wcGMoc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlLAotCQlkbWFfYWRkcl90IGZyYW1lX3BoeXNfYWRkciwKLQkJdTMyIGZyYW1lX2NvdW50LAotCQlzdHJ1Y3QgbWVnYXNhc19yZWdpc3Rlcl9zZXQgX19pb21lbSAqcmVncykKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXNwaW5fbG9ja19pcnFzYXZlKCZpbnN0YW5jZS0+aGJhX2xvY2ssIGZsYWdzKTsKLQl3cml0ZWwoKGZyYW1lX3BoeXNfYWRkciB8IChmcmFtZV9jb3VudDw8MSkpfDEsIAotCQkJJihyZWdzKS0+aW5ib3VuZF9xdWV1ZV9wb3J0KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbnN0YW5jZS0+aGJhX2xvY2ssIGZsYWdzKTsKLX0KLQotLyoqCi0gKiBtZWdhc2FzX2FkcF9yZXNldF9wcGMgLQlGb3IgY29udHJvbGxlciByZXNldAotICogQHJlZ3M6CQkJCU1GSSByZWdpc3RlciBzZXQKLSAqLwotc3RhdGljIGludAotbWVnYXNhc19hZHBfcmVzZXRfcHBjKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSwKLQkJCXN0cnVjdCBtZWdhc2FzX3JlZ2lzdGVyX3NldCBfX2lvbWVtICpyZWdzKQotewotCXJldHVybiAwOwotfQotCi0vKioKLSAqIG1lZ2FzYXNfY2hlY2tfcmVzZXRfcHBjIC0JRm9yIGNvbnRyb2xsZXIgcmVzZXQgY2hlY2sKLSAqIEByZWdzOgkJCQlNRkkgcmVnaXN0ZXIgc2V0Ci0gKi8KLXN0YXRpYyBpbnQKLW1lZ2FzYXNfY2hlY2tfcmVzZXRfcHBjKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSwKLQkJCXN0cnVjdCBtZWdhc2FzX3JlZ2lzdGVyX3NldCBfX2lvbWVtICpyZWdzKQotewotCXJldHVybiAwOwotfQotc3RhdGljIHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlX3RlbXBsYXRlIG1lZ2FzYXNfaW5zdGFuY2VfdGVtcGxhdGVfcHBjID0gewotCQotCS5maXJlX2NtZCA9IG1lZ2FzYXNfZmlyZV9jbWRfcHBjLAotCS5lbmFibGVfaW50ciA9IG1lZ2FzYXNfZW5hYmxlX2ludHJfcHBjLAotCS5kaXNhYmxlX2ludHIgPSBtZWdhc2FzX2Rpc2FibGVfaW50cl9wcGMsCi0JLmNsZWFyX2ludHIgPSBtZWdhc2FzX2NsZWFyX2ludHJfcHBjLAotCS5yZWFkX2Z3X3N0YXR1c19yZWcgPSBtZWdhc2FzX3JlYWRfZndfc3RhdHVzX3JlZ19wcGMsCi0JLmFkcF9yZXNldCA9IG1lZ2FzYXNfYWRwX3Jlc2V0X3BwYywKLQkuY2hlY2tfcmVzZXQgPSBtZWdhc2FzX2NoZWNrX3Jlc2V0X3BwYywKLX07Ci0KLS8qKgotICogbWVnYXNhc19lbmFibGVfaW50cl9za2lubnkgLQlFbmFibGVzIGludGVycnVwdHMKLSAqIEByZWdzOgkJCU1GSSByZWdpc3RlciBzZXQKLSAqLwotc3RhdGljIGlubGluZSB2b2lkCi1tZWdhc2FzX2VuYWJsZV9pbnRyX3NraW5ueShzdHJ1Y3QgbWVnYXNhc19yZWdpc3Rlcl9zZXQgX19pb21lbSAqcmVncykKLXsKLQl3cml0ZWwoMHhGRkZGRkZGRiwgJihyZWdzKS0+b3V0Ym91bmRfaW50cl9tYXNrKTsKLQotCXdyaXRlbCh+TUZJX1NLSU5OWV9FTkFCTEVfSU5URVJSVVBUX01BU0ssICYocmVncyktPm91dGJvdW5kX2ludHJfbWFzayk7Ci0KLQkvKiBEdW1teSByZWFkbCB0byBmb3JjZSBwY2kgZmx1c2ggKi8KLQlyZWFkbCgmcmVncy0+b3V0Ym91bmRfaW50cl9tYXNrKTsKLX0KLQotLyoqCi0gKiBtZWdhc2FzX2Rpc2FibGVfaW50cl9za2lubnkgLQlEaXNhYmxlcyBpbnRlcnJ1cHQKLSAqIEByZWdzOgkJCU1GSSByZWdpc3RlciBzZXQKLSAqLwotc3RhdGljIGlubGluZSB2b2lkCi1tZWdhc2FzX2Rpc2FibGVfaW50cl9za2lubnkoc3RydWN0IG1lZ2FzYXNfcmVnaXN0ZXJfc2V0IF9faW9tZW0gKnJlZ3MpCi17Ci0JdTMyIG1hc2sgPSAweEZGRkZGRkZGOwotCXdyaXRlbChtYXNrLCAmcmVncy0+b3V0Ym91bmRfaW50cl9tYXNrKTsKLQkvKiBEdW1teSByZWFkbCB0byBmb3JjZSBwY2kgZmx1c2ggKi8KLQlyZWFkbCgmcmVncy0+b3V0Ym91bmRfaW50cl9tYXNrKTsKLX0KLQotLyoqCi0gKiBtZWdhc2FzX3JlYWRfZndfc3RhdHVzX3JlZ19za2lubnkgLSByZXR1cm5zIHRoZSBjdXJyZW50IEZXIHN0YXR1cyB2YWx1ZQotICogQHJlZ3M6CQkJTUZJIHJlZ2lzdGVyIHNldAotICovCi1zdGF0aWMgdTMyCi1tZWdhc2FzX3JlYWRfZndfc3RhdHVzX3JlZ19za2lubnkoc3RydWN0IG1lZ2FzYXNfcmVnaXN0ZXJfc2V0IF9faW9tZW0gKnJlZ3MpCi17Ci0JcmV0dXJuIHJlYWRsKCYocmVncyktPm91dGJvdW5kX3NjcmF0Y2hfcGFkKTsKLX0KLQotLyoqCi0gKiBtZWdhc2FzX2NsZWFyX2ludGVycnVwdF9za2lubnkgLQlDaGVjayAmIGNsZWFyIGludGVycnVwdAotICogQHJlZ3M6CQkJCU1GSSByZWdpc3RlciBzZXQKLSAqLwotc3RhdGljIGludAotbWVnYXNhc19jbGVhcl9pbnRyX3NraW5ueShzdHJ1Y3QgbWVnYXNhc19yZWdpc3Rlcl9zZXQgX19pb21lbSAqcmVncykKLXsKLQl1MzIgc3RhdHVzOwotCS8qCi0JICogQ2hlY2sgaWYgaXQgaXMgb3VyIGludGVycnVwdAotCSAqLwotCXN0YXR1cyA9IHJlYWRsKCZyZWdzLT5vdXRib3VuZF9pbnRyX3N0YXR1cyk7Ci0KLQlpZiAoIShzdGF0dXMgJiBNRklfU0tJTk5ZX0VOQUJMRV9JTlRFUlJVUFRfTUFTSykpIHsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyoKLQkgKiBDbGVhciB0aGUgaW50ZXJydXB0IGJ5IHdyaXRpbmcgYmFjayB0aGUgc2FtZSB2YWx1ZQotCSAqLwotCXdyaXRlbChzdGF0dXMsICZyZWdzLT5vdXRib3VuZF9pbnRyX3N0YXR1cyk7Ci0KLQkvKgotCSogZHVtbXkgcmVhZCB0byBmbHVzaCBQQ0kKLQkqLwotCXJlYWRsKCZyZWdzLT5vdXRib3VuZF9pbnRyX3N0YXR1cyk7Ci0KLQlyZXR1cm4gMTsKLX0KLQotLyoqCi0gKiBtZWdhc2FzX2ZpcmVfY21kX3NraW5ueSAtCVNlbmRzIGNvbW1hbmQgdG8gdGhlIEZXCi0gKiBAZnJhbWVfcGh5c19hZGRyIDoJCVBoeXNpY2FsIGFkZHJlc3Mgb2YgY21kCi0gKiBAZnJhbWVfY291bnQgOgkJTnVtYmVyIG9mIGZyYW1lcyBmb3IgdGhlIGNvbW1hbmQKLSAqIEByZWdzIDoJCQlNRkkgcmVnaXN0ZXIgc2V0Ci0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAotbWVnYXNhc19maXJlX2NtZF9za2lubnkoc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlLAotCQkJZG1hX2FkZHJfdCBmcmFtZV9waHlzX2FkZHIsCi0JCQl1MzIgZnJhbWVfY291bnQsCi0JCQlzdHJ1Y3QgbWVnYXNhc19yZWdpc3Rlcl9zZXQgX19pb21lbSAqcmVncykKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXNwaW5fbG9ja19pcnFzYXZlKCZpbnN0YW5jZS0+aGJhX2xvY2ssIGZsYWdzKTsKLQl3cml0ZWwoMCwgJihyZWdzKS0+aW5ib3VuZF9oaWdoX3F1ZXVlX3BvcnQpOwotCXdyaXRlbCgoZnJhbWVfcGh5c19hZGRyIHwgKGZyYW1lX2NvdW50PDwxKSl8MSwKLQkJJihyZWdzKS0+aW5ib3VuZF9sb3dfcXVldWVfcG9ydCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5zdGFuY2UtPmhiYV9sb2NrLCBmbGFncyk7Ci19Ci0KLS8qKgotICogbWVnYXNhc19hZHBfcmVzZXRfc2tpbm55IC0JRm9yIGNvbnRyb2xsZXIgcmVzZXQKLSAqIEByZWdzOgkJCQlNRkkgcmVnaXN0ZXIgc2V0Ci0gKi8KLXN0YXRpYyBpbnQKLW1lZ2FzYXNfYWRwX3Jlc2V0X3NraW5ueShzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UsCi0JCQlzdHJ1Y3QgbWVnYXNhc19yZWdpc3Rlcl9zZXQgX19pb21lbSAqcmVncykKLXsKLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBtZWdhc2FzX2NoZWNrX3Jlc2V0X3NraW5ueSAtCUZvciBjb250cm9sbGVyIHJlc2V0IGNoZWNrCi0gKiBAcmVnczoJCQkJTUZJIHJlZ2lzdGVyIHNldAotICovCi1zdGF0aWMgaW50Ci1tZWdhc2FzX2NoZWNrX3Jlc2V0X3NraW5ueShzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UsCi0JCQkJc3RydWN0IG1lZ2FzYXNfcmVnaXN0ZXJfc2V0IF9faW9tZW0gKnJlZ3MpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZV90ZW1wbGF0ZSBtZWdhc2FzX2luc3RhbmNlX3RlbXBsYXRlX3NraW5ueSA9IHsKLQotCS5maXJlX2NtZCA9IG1lZ2FzYXNfZmlyZV9jbWRfc2tpbm55LAotCS5lbmFibGVfaW50ciA9IG1lZ2FzYXNfZW5hYmxlX2ludHJfc2tpbm55LAotCS5kaXNhYmxlX2ludHIgPSBtZWdhc2FzX2Rpc2FibGVfaW50cl9za2lubnksCi0JLmNsZWFyX2ludHIgPSBtZWdhc2FzX2NsZWFyX2ludHJfc2tpbm55LAotCS5yZWFkX2Z3X3N0YXR1c19yZWcgPSBtZWdhc2FzX3JlYWRfZndfc3RhdHVzX3JlZ19za2lubnksCi0JLmFkcF9yZXNldCA9IG1lZ2FzYXNfYWRwX3Jlc2V0X3NraW5ueSwKLQkuY2hlY2tfcmVzZXQgPSBtZWdhc2FzX2NoZWNrX3Jlc2V0X3NraW5ueSwKLX07Ci0KLQotLyoqCi0qCVRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBkZWZpbmVkIGZvciBnZW4yIChkZXZpY2VpZCA6IDB4NzggMHg3OSkKLSoJY29udHJvbGxlcnMKLSovCi0KLS8qKgotICogbWVnYXNhc19lbmFibGVfaW50cl9nZW4yIC0gIEVuYWJsZXMgaW50ZXJydXB0cwotICogQHJlZ3M6ICAgICAgICAgICAgICAgICAgICAgIE1GSSByZWdpc3RlciBzZXQKLSAqLwotc3RhdGljIGlubGluZSB2b2lkCi1tZWdhc2FzX2VuYWJsZV9pbnRyX2dlbjIoc3RydWN0IG1lZ2FzYXNfcmVnaXN0ZXJfc2V0IF9faW9tZW0gKnJlZ3MpCi17Ci0Jd3JpdGVsKDB4RkZGRkZGRkYsICYocmVncyktPm91dGJvdW5kX2Rvb3JiZWxsX2NsZWFyKTsKLQotCS8qIHdyaXRlIH4weDAwMDAwMDA1ICg0ICYgMSkgdG8gdGhlIGludHIgbWFzayovCi0Jd3JpdGVsKH5NRklfR0VOMl9FTkFCTEVfSU5URVJSVVBUX01BU0ssICYocmVncyktPm91dGJvdW5kX2ludHJfbWFzayk7Ci0KLQkvKiBEdW1teSByZWFkbCB0byBmb3JjZSBwY2kgZmx1c2ggKi8KLQlyZWFkbCgmcmVncy0+b3V0Ym91bmRfaW50cl9tYXNrKTsKLX0KLQotLyoqCi0gKiBtZWdhc2FzX2Rpc2FibGVfaW50cl9nZW4yIC0gRGlzYWJsZXMgaW50ZXJydXB0Ci0gKiBAcmVnczogICAgICAgICAgICAgICAgICAgICAgTUZJIHJlZ2lzdGVyIHNldAotICovCi1zdGF0aWMgaW5saW5lIHZvaWQKLW1lZ2FzYXNfZGlzYWJsZV9pbnRyX2dlbjIoc3RydWN0IG1lZ2FzYXNfcmVnaXN0ZXJfc2V0IF9faW9tZW0gKnJlZ3MpCi17Ci0JdTMyIG1hc2sgPSAweEZGRkZGRkZGOwotCXdyaXRlbChtYXNrLCAmcmVncy0+b3V0Ym91bmRfaW50cl9tYXNrKTsKLQkvKiBEdW1teSByZWFkbCB0byBmb3JjZSBwY2kgZmx1c2ggKi8KLQlyZWFkbCgmcmVncy0+b3V0Ym91bmRfaW50cl9tYXNrKTsKLX0KLQotLyoqCi0gKiBtZWdhc2FzX3JlYWRfZndfc3RhdHVzX3JlZ19nZW4yIC0gcmV0dXJucyB0aGUgY3VycmVudCBGVyBzdGF0dXMgdmFsdWUKLSAqIEByZWdzOiAgICAgICAgICAgICAgICAgICAgICBNRkkgcmVnaXN0ZXIgc2V0Ci0gKi8KLXN0YXRpYyB1MzIKLW1lZ2FzYXNfcmVhZF9md19zdGF0dXNfcmVnX2dlbjIoc3RydWN0IG1lZ2FzYXNfcmVnaXN0ZXJfc2V0IF9faW9tZW0gKnJlZ3MpCi17Ci0JcmV0dXJuIHJlYWRsKCYocmVncyktPm91dGJvdW5kX3NjcmF0Y2hfcGFkKTsKLX0KLQotLyoqCi0gKiBtZWdhc2FzX2NsZWFyX2ludGVycnVwdF9nZW4yIC0gICAgICBDaGVjayAmIGNsZWFyIGludGVycnVwdAotICogQHJlZ3M6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUZJIHJlZ2lzdGVyIHNldAotICovCi1zdGF0aWMgaW50Ci1tZWdhc2FzX2NsZWFyX2ludHJfZ2VuMihzdHJ1Y3QgbWVnYXNhc19yZWdpc3Rlcl9zZXQgX19pb21lbSAqcmVncykKLXsKLQl1MzIgc3RhdHVzOwotCXUzMiBtZmlTdGF0dXMgPSAwOwotCS8qCi0JICogQ2hlY2sgaWYgaXQgaXMgb3VyIGludGVycnVwdAotCSAqLwotCXN0YXR1cyA9IHJlYWRsKCZyZWdzLT5vdXRib3VuZF9pbnRyX3N0YXR1cyk7Ci0KLQlpZiAoc3RhdHVzICYgTUZJX0dFTjJfRU5BQkxFX0lOVEVSUlVQVF9NQVNLKSB7Ci0JCW1maVN0YXR1cyA9IE1GSV9JTlRSX0ZMQUdfUkVQTFlfTUVTU0FHRTsKLQl9Ci0JaWYgKHN0YXR1cyAmIE1GSV9HMl9PVVRCT1VORF9ET09SQkVMTF9DSEFOR0VfSU5URVJSVVBUKSB7Ci0JCW1maVN0YXR1cyB8PSBNRklfSU5UUl9GTEFHX0ZJUk1XQVJFX1NUQVRFX0NIQU5HRTsKLQl9Ci0KLQkvKgotCSAqIENsZWFyIHRoZSBpbnRlcnJ1cHQgYnkgd3JpdGluZyBiYWNrIHRoZSBzYW1lIHZhbHVlCi0JICovCi0JaWYgKG1maVN0YXR1cykKLQkJd3JpdGVsKHN0YXR1cywgJnJlZ3MtPm91dGJvdW5kX2Rvb3JiZWxsX2NsZWFyKTsKLQotCS8qIER1bW15IHJlYWRsIHRvIGZvcmNlIHBjaSBmbHVzaCAqLwotCXJlYWRsKCZyZWdzLT5vdXRib3VuZF9pbnRyX3N0YXR1cyk7Ci0KLQlyZXR1cm4gbWZpU3RhdHVzOwotfQotLyoqCi0gKiBtZWdhc2FzX2ZpcmVfY21kX2dlbjIgLSAgICAgU2VuZHMgY29tbWFuZCB0byB0aGUgRlcKLSAqIEBmcmFtZV9waHlzX2FkZHIgOiAgICAgICAgICBQaHlzaWNhbCBhZGRyZXNzIG9mIGNtZAotICogQGZyYW1lX2NvdW50IDogICAgICAgICAgICAgIE51bWJlciBvZiBmcmFtZXMgZm9yIHRoZSBjb21tYW5kCi0gKiBAcmVncyA6ICAgICAgICAgICAgICAgICAgICAgTUZJIHJlZ2lzdGVyIHNldAotICovCi1zdGF0aWMgaW5saW5lIHZvaWQKLW1lZ2FzYXNfZmlyZV9jbWRfZ2VuMihzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UsCi0JCQlkbWFfYWRkcl90IGZyYW1lX3BoeXNfYWRkciwKLQkJCXUzMiBmcmFtZV9jb3VudCwKLQkJCXN0cnVjdCBtZWdhc2FzX3JlZ2lzdGVyX3NldCBfX2lvbWVtICpyZWdzKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmluc3RhbmNlLT5oYmFfbG9jaywgZmxhZ3MpOwotCXdyaXRlbCgoZnJhbWVfcGh5c19hZGRyIHwgKGZyYW1lX2NvdW50PDwxKSl8MSwKLQkJCSYocmVncyktPmluYm91bmRfcXVldWVfcG9ydCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5zdGFuY2UtPmhiYV9sb2NrLCBmbGFncyk7Ci19Ci0KLS8qKgotICogbWVnYXNhc19hZHBfcmVzZXRfZ2VuMiAtCUZvciBjb250cm9sbGVyIHJlc2V0Ci0gKiBAcmVnczoJCQkJTUZJIHJlZ2lzdGVyIHNldAotICovCi1zdGF0aWMgaW50Ci1tZWdhc2FzX2FkcF9yZXNldF9nZW4yKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSwKLQkJCXN0cnVjdCBtZWdhc2FzX3JlZ2lzdGVyX3NldCBfX2lvbWVtICpyZWdfc2V0KQotewotCXUzMgkJCXJldHJ5ID0gMCA7Ci0JdTMyCQkJSG9zdERpYWc7Ci0KLQl3cml0ZWwoMCwgJnJlZ19zZXQtPnNlcV9vZmZzZXQpOwotCXdyaXRlbCg0LCAmcmVnX3NldC0+c2VxX29mZnNldCk7Ci0Jd3JpdGVsKDB4YiwgJnJlZ19zZXQtPnNlcV9vZmZzZXQpOwotCXdyaXRlbCgyLCAmcmVnX3NldC0+c2VxX29mZnNldCk7Ci0Jd3JpdGVsKDcsICZyZWdfc2V0LT5zZXFfb2Zmc2V0KTsKLQl3cml0ZWwoMHhkLCAmcmVnX3NldC0+c2VxX29mZnNldCk7Ci0JbXNsZWVwKDEwMDApOwotCi0JSG9zdERpYWcgPSAodTMyKXJlYWRsKCZyZWdfc2V0LT5ob3N0X2RpYWcpOwotCi0Jd2hpbGUgKCAhKCBIb3N0RGlhZyAmIERJQUdfV1JJVEVfRU5BQkxFKSApIHsKLQkJbXNsZWVwKDEwMCk7Ci0JCUhvc3REaWFnID0gKHUzMilyZWFkbCgmcmVnX3NldC0+aG9zdF9kaWFnKTsKLQkJcHJpbnRrKEtFUk5fTk9USUNFICJSRVNFVEdFTjI6IHJldHJ5PSV4LCBob3N0ZGlhZz0leFxuIiwKLQkJCQkJcmV0cnksIEhvc3REaWFnKTsKLQotCQlpZiAocmV0cnkrKyA+PSAxMDApCi0JCQlyZXR1cm4gMTsKLQotCX0KLQotCXByaW50ayhLRVJOX05PVElDRSAiQURQX1JFU0VUX0dFTjI6IEhvc3REaWFnPSV4XG4iLCBIb3N0RGlhZyk7Ci0KLQl3cml0ZWwoKEhvc3REaWFnIHwgRElBR19SRVNFVF9BREFQVEVSKSwgJnJlZ19zZXQtPmhvc3RfZGlhZyk7Ci0KLQlzc2xlZXAoMTApOwotCi0JSG9zdERpYWcgPSAodTMyKXJlYWRsKCZyZWdfc2V0LT5ob3N0X2RpYWcpOwotCXdoaWxlICggKCBIb3N0RGlhZyAmIERJQUdfUkVTRVRfQURBUFRFUikgKSB7Ci0JCW1zbGVlcCgxMDApOwotCQlIb3N0RGlhZyA9ICh1MzIpcmVhZGwoJnJlZ19zZXQtPmhvc3RfZGlhZyk7Ci0JCXByaW50ayhLRVJOX05PVElDRSAiUkVTRVRfR0VOMjogcmV0cnk9JXgsIGhvc3RkaWFnPSV4XG4iLAotCQkJCXJldHJ5LCBIb3N0RGlhZyk7Ci0KLQkJaWYgKHJldHJ5KysgPj0gMTAwMCkKLQkJCXJldHVybiAxOwotCi0JfQotCXJldHVybiAwOwotfQotCi0vKioKLSAqIG1lZ2FzYXNfY2hlY2tfcmVzZXRfZ2VuMiAtCUZvciBjb250cm9sbGVyIHJlc2V0IGNoZWNrCi0gKiBAcmVnczoJCQkJTUZJIHJlZ2lzdGVyIHNldAotICovCi1zdGF0aWMgaW50Ci1tZWdhc2FzX2NoZWNrX3Jlc2V0X2dlbjIoc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlLAotCQlzdHJ1Y3QgbWVnYXNhc19yZWdpc3Rlcl9zZXQgX19pb21lbSAqcmVncykKLXsKLQlpZiAoaW5zdGFuY2UtPmFkcHJlY292ZXJ5ICE9IE1FR0FTQVNfSEJBX09QRVJBVElPTkFMKSB7Ci0JCXJldHVybiAxOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2VfdGVtcGxhdGUgbWVnYXNhc19pbnN0YW5jZV90ZW1wbGF0ZV9nZW4yID0gewotCi0JLmZpcmVfY21kID0gbWVnYXNhc19maXJlX2NtZF9nZW4yLAotCS5lbmFibGVfaW50ciA9IG1lZ2FzYXNfZW5hYmxlX2ludHJfZ2VuMiwKLQkuZGlzYWJsZV9pbnRyID0gbWVnYXNhc19kaXNhYmxlX2ludHJfZ2VuMiwKLQkuY2xlYXJfaW50ciA9IG1lZ2FzYXNfY2xlYXJfaW50cl9nZW4yLAotCS5yZWFkX2Z3X3N0YXR1c19yZWcgPSBtZWdhc2FzX3JlYWRfZndfc3RhdHVzX3JlZ19nZW4yLAotCS5hZHBfcmVzZXQgPSBtZWdhc2FzX2FkcF9yZXNldF9nZW4yLAotCS5jaGVja19yZXNldCA9IG1lZ2FzYXNfY2hlY2tfcmVzZXRfZ2VuMiwKLX07Ci0KLS8qKgotKglUaGlzIGlzIHRoZSBlbmQgb2Ygc2V0IG9mIGZ1bmN0aW9ucyAmIGRlZmluaXRpb25zCi0qICAgICAgIHNwZWNpZmljIHRvIGdlbjIgKGRldmljZWlkIDogMHg3OCwgMHg3OSkgY29udHJvbGxlcnMKLSovCi0KLS8qKgotICogbWVnYXNhc19pc3N1ZV9wb2xsZWQgLQlJc3N1ZXMgYSBwb2xsaW5nIGNvbW1hbmQKLSAqIEBpbnN0YW5jZToJCQlBZGFwdGVyIHNvZnQgc3RhdGUKLSAqIEBjbWQ6CQkJQ29tbWFuZCBwYWNrZXQgdG8gYmUgaXNzdWVkIAotICoKLSAqIEZvciBwb2xsaW5nLCBNRkkgcmVxdWlyZXMgdGhlIGNtZF9zdGF0dXMgdG8gYmUgc2V0IHRvIDB4RkYgYmVmb3JlIHBvc3RpbmcuCi0gKi8KLXN0YXRpYyBpbnQKLW1lZ2FzYXNfaXNzdWVfcG9sbGVkKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSwgc3RydWN0IG1lZ2FzYXNfY21kICpjbWQpCi17Ci0JaW50IGk7Ci0JdTMyIG1zZWNzID0gTUZJX1BPTExfVElNRU9VVF9TRUNTICogMTAwMDsKLQotCXN0cnVjdCBtZWdhc2FzX2hlYWRlciAqZnJhbWVfaGRyID0gJmNtZC0+ZnJhbWUtPmhkcjsKLQotCWZyYW1lX2hkci0+Y21kX3N0YXR1cyA9IDB4RkY7Ci0JZnJhbWVfaGRyLT5mbGFncyB8PSBNRklfRlJBTUVfRE9OVF9QT1NUX0lOX1JFUExZX1FVRVVFOwotCi0JLyoKLQkgKiBJc3N1ZSB0aGUgZnJhbWUgdXNpbmcgaW5ib3VuZCBxdWV1ZSBwb3J0Ci0JICovCi0JaW5zdGFuY2UtPmluc3RhbmNldC0+ZmlyZV9jbWQoaW5zdGFuY2UsCi0JCQljbWQtPmZyYW1lX3BoeXNfYWRkciwgMCwgaW5zdGFuY2UtPnJlZ19zZXQpOwotCi0JLyoKLQkgKiBXYWl0IGZvciBjbWRfc3RhdHVzIHRvIGNoYW5nZQotCSAqLwotCWZvciAoaSA9IDA7IChpIDwgbXNlY3MpICYmIChmcmFtZV9oZHItPmNtZF9zdGF0dXMgPT0gMHhmZik7IGkrKykgewotCQlybWIoKTsKLQkJbXNsZWVwKDEpOwotCX0KLQotCWlmIChmcmFtZV9oZHItPmNtZF9zdGF0dXMgPT0gMHhmZikKLQkJcmV0dXJuIC1FVElNRTsKLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqIG1lZ2FzYXNfaXNzdWVfYmxvY2tlZF9jbWQgLQlTeW5jaHJvbm91cyB3cmFwcGVyIGFyb3VuZCByZWd1bGFyIEZXIGNtZHMKLSAqIEBpbnN0YW5jZToJCQlBZGFwdGVyIHNvZnQgc3RhdGUKLSAqIEBjbWQ6CQkJQ29tbWFuZCB0byBiZSBpc3N1ZWQKLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHdhaXRzIG9uIGFuIGV2ZW50IGZvciB0aGUgY29tbWFuZCB0byBiZSByZXR1cm5lZCBmcm9tIElTUi4KLSAqIE1heCB3YWl0IHRpbWUgaXMgTUVHQVNBU19JTlRFUk5BTF9DTURfV0FJVF9USU1FIHNlY3MKLSAqIFVzZWQgdG8gaXNzdWUgaW9jdGwgY29tbWFuZHMuCi0gKi8KLXN0YXRpYyBpbnQKLW1lZ2FzYXNfaXNzdWVfYmxvY2tlZF9jbWQoc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlLAotCQkJICBzdHJ1Y3QgbWVnYXNhc19jbWQgKmNtZCkKLXsKLQljbWQtPmNtZF9zdGF0dXMgPSBFTk9EQVRBOwotCi0JaW5zdGFuY2UtPmluc3RhbmNldC0+ZmlyZV9jbWQoaW5zdGFuY2UsCi0JCQljbWQtPmZyYW1lX3BoeXNfYWRkciwgMCwgaW5zdGFuY2UtPnJlZ19zZXQpOwotCi0Jd2FpdF9ldmVudChpbnN0YW5jZS0+aW50X2NtZF93YWl0X3EsIGNtZC0+Y21kX3N0YXR1cyAhPSBFTk9EQVRBKTsKLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqIG1lZ2FzYXNfaXNzdWVfYmxvY2tlZF9hYm9ydF9jbWQgLQlBYm9ydHMgcHJldmlvdXNseSBpc3N1ZWQgY21kCi0gKiBAaW5zdGFuY2U6CQkJCUFkYXB0ZXIgc29mdCBzdGF0ZQotICogQGNtZF90b19hYm9ydDoJCQlQcmV2aW91c2x5IGlzc3VlZCBjbWQgdG8gYmUgYWJvcnRlZAotICoKLSAqIE1GSSBmaXJtd2FyZSBjYW4gYWJvcnQgcHJldmlvdXNseSBpc3N1ZWQgQUVOIGNvbWFtbmQgKGF1dG9tYXRpYyBldmVudAotICogbm90aWZpY2F0aW9uKS4gVGhlIG1lZ2FzYXNfaXNzdWVfYmxvY2tlZF9hYm9ydF9jbWQoKSBpc3N1ZXMgc3VjaCBhYm9ydAotICogY21kIGFuZCB3YWl0cyBmb3IgcmV0dXJuIHN0YXR1cy4KLSAqIE1heCB3YWl0IHRpbWUgaXMgTUVHQVNBU19JTlRFUk5BTF9DTURfV0FJVF9USU1FIHNlY3MKLSAqLwotc3RhdGljIGludAotbWVnYXNhc19pc3N1ZV9ibG9ja2VkX2Fib3J0X2NtZChzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UsCi0JCQkJc3RydWN0IG1lZ2FzYXNfY21kICpjbWRfdG9fYWJvcnQpCi17Ci0Jc3RydWN0IG1lZ2FzYXNfY21kICpjbWQ7Ci0Jc3RydWN0IG1lZ2FzYXNfYWJvcnRfZnJhbWUgKmFib3J0X2ZyOwotCi0JY21kID0gbWVnYXNhc19nZXRfY21kKGluc3RhbmNlKTsKLQotCWlmICghY21kKQotCQlyZXR1cm4gLTE7Ci0KLQlhYm9ydF9mciA9ICZjbWQtPmZyYW1lLT5hYm9ydDsKLQotCS8qCi0JICogUHJlcGFyZSBhbmQgaXNzdWUgdGhlIGFib3J0IGZyYW1lCi0JICovCi0JYWJvcnRfZnItPmNtZCA9IE1GSV9DTURfQUJPUlQ7Ci0JYWJvcnRfZnItPmNtZF9zdGF0dXMgPSAweEZGOwotCWFib3J0X2ZyLT5mbGFncyA9IDA7Ci0JYWJvcnRfZnItPmFib3J0X2NvbnRleHQgPSBjbWRfdG9fYWJvcnQtPmluZGV4OwotCWFib3J0X2ZyLT5hYm9ydF9tZmlfcGh5c19hZGRyX2xvID0gY21kX3RvX2Fib3J0LT5mcmFtZV9waHlzX2FkZHI7Ci0JYWJvcnRfZnItPmFib3J0X21maV9waHlzX2FkZHJfaGkgPSAwOwotCi0JY21kLT5zeW5jX2NtZCA9IDE7Ci0JY21kLT5jbWRfc3RhdHVzID0gMHhGRjsKLQotCWluc3RhbmNlLT5pbnN0YW5jZXQtPmZpcmVfY21kKGluc3RhbmNlLAotCQkJY21kLT5mcmFtZV9waHlzX2FkZHIsIDAsIGluc3RhbmNlLT5yZWdfc2V0KTsKLQotCS8qCi0JICogV2FpdCBmb3IgdGhpcyBjbWQgdG8gY29tcGxldGUKLQkgKi8KLQl3YWl0X2V2ZW50KGluc3RhbmNlLT5hYm9ydF9jbWRfd2FpdF9xLCBjbWQtPmNtZF9zdGF0dXMgIT0gMHhGRik7Ci0JY21kLT5zeW5jX2NtZCA9IDA7Ci0KLQltZWdhc2FzX3JldHVybl9jbWQoaW5zdGFuY2UsIGNtZCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogbWVnYXNhc19tYWtlX3NnbDMyIC0JUHJlcGFyZXMgMzItYml0IFNHTAotICogQGluc3RhbmNlOgkJQWRhcHRlciBzb2Z0IHN0YXRlCi0gKiBAc2NwOgkJU0NTSSBjb21tYW5kIGZyb20gdGhlIG1pZC1sYXllcgotICogQG1maV9zZ2w6CQlTR0wgdG8gYmUgZmlsbGVkIGluCi0gKgotICogSWYgc3VjY2Vzc2Z1bCwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBudW1iZXIgb2YgU0cgZWxlbWVudHMuIE90aGVyd2lzZSwKLSAqIGl0IHJldHVybmVzIC0xLgotICovCi1zdGF0aWMgaW50Ci1tZWdhc2FzX21ha2Vfc2dsMzIoc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlLCBzdHJ1Y3Qgc2NzaV9jbW5kICpzY3AsCi0JCSAgIHVuaW9uIG1lZ2FzYXNfc2dsICptZmlfc2dsKQotewotCWludCBpOwotCWludCBzZ2VfY291bnQ7Ci0Jc3RydWN0IHNjYXR0ZXJsaXN0ICpvc19zZ2w7Ci0KLQlzZ2VfY291bnQgPSBzY3NpX2RtYV9tYXAoc2NwKTsKLQlCVUdfT04oc2dlX2NvdW50IDwgMCk7Ci0KLQlpZiAoc2dlX2NvdW50KSB7Ci0JCXNjc2lfZm9yX2VhY2hfc2coc2NwLCBvc19zZ2wsIHNnZV9jb3VudCwgaSkgewotCQkJbWZpX3NnbC0+c2dlMzJbaV0ubGVuZ3RoID0gc2dfZG1hX2xlbihvc19zZ2wpOwotCQkJbWZpX3NnbC0+c2dlMzJbaV0ucGh5c19hZGRyID0gc2dfZG1hX2FkZHJlc3Mob3Nfc2dsKTsKLQkJfQotCX0KLQlyZXR1cm4gc2dlX2NvdW50OwotfQotCi0vKioKLSAqIG1lZ2FzYXNfbWFrZV9zZ2w2NCAtCVByZXBhcmVzIDY0LWJpdCBTR0wKLSAqIEBpbnN0YW5jZToJCUFkYXB0ZXIgc29mdCBzdGF0ZQotICogQHNjcDoJCVNDU0kgY29tbWFuZCBmcm9tIHRoZSBtaWQtbGF5ZXIKLSAqIEBtZmlfc2dsOgkJU0dMIHRvIGJlIGZpbGxlZCBpbgotICoKLSAqIElmIHN1Y2Nlc3NmdWwsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbnVtYmVyIG9mIFNHIGVsZW1lbnRzLiBPdGhlcndpc2UsCi0gKiBpdCByZXR1cm5lcyAtMS4KLSAqLwotc3RhdGljIGludAotbWVnYXNhc19tYWtlX3NnbDY0KHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSwgc3RydWN0IHNjc2lfY21uZCAqc2NwLAotCQkgICB1bmlvbiBtZWdhc2FzX3NnbCAqbWZpX3NnbCkKLXsKLQlpbnQgaTsKLQlpbnQgc2dlX2NvdW50OwotCXN0cnVjdCBzY2F0dGVybGlzdCAqb3Nfc2dsOwotCi0Jc2dlX2NvdW50ID0gc2NzaV9kbWFfbWFwKHNjcCk7Ci0JQlVHX09OKHNnZV9jb3VudCA8IDApOwotCi0JaWYgKHNnZV9jb3VudCkgewotCQlzY3NpX2Zvcl9lYWNoX3NnKHNjcCwgb3Nfc2dsLCBzZ2VfY291bnQsIGkpIHsKLQkJCW1maV9zZ2wtPnNnZTY0W2ldLmxlbmd0aCA9IHNnX2RtYV9sZW4ob3Nfc2dsKTsKLQkJCW1maV9zZ2wtPnNnZTY0W2ldLnBoeXNfYWRkciA9IHNnX2RtYV9hZGRyZXNzKG9zX3NnbCk7Ci0JCX0KLQl9Ci0JcmV0dXJuIHNnZV9jb3VudDsKLX0KLQotLyoqCi0gKiBtZWdhc2FzX21ha2Vfc2dsX3NraW5ueSAtIFByZXBhcmVzIElFRUUgU0dMCi0gKiBAaW5zdGFuY2U6ICAgICAgICAgICBBZGFwdGVyIHNvZnQgc3RhdGUKLSAqIEBzY3A6ICAgICAgICAgICAgICAgIFNDU0kgY29tbWFuZCBmcm9tIHRoZSBtaWQtbGF5ZXIKLSAqIEBtZmlfc2dsOiAgICAgICAgICAgIFNHTCB0byBiZSBmaWxsZWQgaW4KLSAqCi0gKiBJZiBzdWNjZXNzZnVsLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG51bWJlciBvZiBTRyBlbGVtZW50cy4gT3RoZXJ3aXNlLAotICogaXQgcmV0dXJuZXMgLTEuCi0gKi8KLXN0YXRpYyBpbnQKLW1lZ2FzYXNfbWFrZV9zZ2xfc2tpbm55KHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSwKLQkJc3RydWN0IHNjc2lfY21uZCAqc2NwLCB1bmlvbiBtZWdhc2FzX3NnbCAqbWZpX3NnbCkKLXsKLQlpbnQgaTsKLQlpbnQgc2dlX2NvdW50OwotCXN0cnVjdCBzY2F0dGVybGlzdCAqb3Nfc2dsOwotCi0Jc2dlX2NvdW50ID0gc2NzaV9kbWFfbWFwKHNjcCk7Ci0KLQlpZiAoc2dlX2NvdW50KSB7Ci0JCXNjc2lfZm9yX2VhY2hfc2coc2NwLCBvc19zZ2wsIHNnZV9jb3VudCwgaSkgewotCQkJbWZpX3NnbC0+c2dlX3NraW5ueVtpXS5sZW5ndGggPSBzZ19kbWFfbGVuKG9zX3NnbCk7Ci0JCQltZmlfc2dsLT5zZ2Vfc2tpbm55W2ldLnBoeXNfYWRkciA9Ci0JCQkJCQlzZ19kbWFfYWRkcmVzcyhvc19zZ2wpOwotCQkJbWZpX3NnbC0+c2dlX3NraW5ueVtpXS5mbGFnID0gMDsKLQkJfQotCX0KLQlyZXR1cm4gc2dlX2NvdW50OwotfQotCi0gLyoqCi0gKiBtZWdhc2FzX2dldF9mcmFtZV9jb3VudCAtIENvbXB1dGVzIHRoZSBudW1iZXIgb2YgZnJhbWVzCi0gKiBAZnJhbWVfdHlwZQkJOiB0eXBlIG9mIGZyYW1lLSBpbyBvciBwdGhydSBmcmFtZQotICogQHNnZV9jb3VudAkJOiBudW1iZXIgb2Ygc2cgZWxlbWVudHMKLSAqCi0gKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZnJhbWVzIHJlcXVpcmVkIGZvciBudW1uYmVyIG9mIHNnZSdzIChzZ2VfY291bnQpCi0gKi8KLQotc3RhdGljIHUzMiBtZWdhc2FzX2dldF9mcmFtZV9jb3VudChzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UsCi0JCQl1OCBzZ2VfY291bnQsIHU4IGZyYW1lX3R5cGUpCi17Ci0JaW50IG51bV9jbnQ7Ci0JaW50IHNnZV9ieXRlczsKLQl1MzIgc2dlX3N6OwotCXUzMiBmcmFtZV9jb3VudD0wOwotCi0Jc2dlX3N6ID0gKElTX0RNQTY0KSA/IHNpemVvZihzdHJ1Y3QgbWVnYXNhc19zZ2U2NCkgOgotCSAgICBzaXplb2Yoc3RydWN0IG1lZ2FzYXNfc2dlMzIpOwotCi0JaWYgKGluc3RhbmNlLT5mbGFnX2llZWUpIHsKLQkJc2dlX3N6ID0gc2l6ZW9mKHN0cnVjdCBtZWdhc2FzX3NnZV9za2lubnkpOwotCX0KLQotCS8qCi0JICogTWFpbiBmcmFtZSBjYW4gY29udGFpbiAyIFNHRXMgZm9yIDY0LWJpdCBTR0xzIGFuZAotCSAqIDMgU0dFcyBmb3IgMzItYml0IFNHTHMgZm9yIGxkaW8gJgotCSAqIDEgU0dFcyBmb3IgNjQtYml0IFNHTHMgYW5kCi0JICogMiBTR0VzIGZvciAzMi1iaXQgU0dMcyBmb3IgcHRocnUgZnJhbWUKLQkgKi8KLQlpZiAodW5saWtlbHkoZnJhbWVfdHlwZSA9PSBQVEhSVV9GUkFNRSkpIHsKLQkJaWYgKGluc3RhbmNlLT5mbGFnX2llZWUgPT0gMSkgewotCQkJbnVtX2NudCA9IHNnZV9jb3VudCAtIDE7Ci0JCX0gZWxzZSBpZiAoSVNfRE1BNjQpCi0JCQludW1fY250ID0gc2dlX2NvdW50IC0gMTsKLQkJZWxzZQotCQkJbnVtX2NudCA9IHNnZV9jb3VudCAtIDI7Ci0JfSBlbHNlIHsKLQkJaWYgKGluc3RhbmNlLT5mbGFnX2llZWUgPT0gMSkgewotCQkJbnVtX2NudCA9IHNnZV9jb3VudCAtIDE7Ci0JCX0gZWxzZSBpZiAoSVNfRE1BNjQpCi0JCQludW1fY250ID0gc2dlX2NvdW50IC0gMjsKLQkJZWxzZQotCQkJbnVtX2NudCA9IHNnZV9jb3VudCAtIDM7Ci0JfQotCi0JaWYobnVtX2NudD4wKXsKLQkJc2dlX2J5dGVzID0gc2dlX3N6ICogbnVtX2NudDsKLQotCQlmcmFtZV9jb3VudCA9IChzZ2VfYnl0ZXMgLyBNRUdBTUZJX0ZSQU1FX1NJWkUpICsKLQkJICAgICgoc2dlX2J5dGVzICUgTUVHQU1GSV9GUkFNRV9TSVpFKSA/IDEgOiAwKSA7Ci0JfQotCS8qIE1haW4gZnJhbWUgKi8KLQlmcmFtZV9jb3VudCArPTE7Ci0KLQlpZiAoZnJhbWVfY291bnQgPiA3KQotCQlmcmFtZV9jb3VudCA9IDg7Ci0JcmV0dXJuIGZyYW1lX2NvdW50OwotfQotCi0vKioKLSAqIG1lZ2FzYXNfYnVpbGRfZGNkYiAtCVByZXBhcmVzIGEgZGlyZWN0IGNkYiAoRENEQikgY29tbWFuZAotICogQGluc3RhbmNlOgkJQWRhcHRlciBzb2Z0IHN0YXRlCi0gKiBAc2NwOgkJU0NTSSBjb21tYW5kCi0gKiBAY21kOgkJQ29tbWFuZCB0byBiZSBwcmVwYXJlZCBpbgotICoKLSAqIFRoaXMgZnVuY3Rpb24gcHJlcGFyZXMgQ0RCIGNvbW1hbmRzLiBUaGVzZSBhcmUgdHlwY2lhbGx5IHBhc3MtdGhyb3VnaAotICogY29tbWFuZHMgdG8gdGhlIGRldmljZXMuCi0gKi8KLXN0YXRpYyBpbnQKLW1lZ2FzYXNfYnVpbGRfZGNkYihzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UsIHN0cnVjdCBzY3NpX2NtbmQgKnNjcCwKLQkJICAgc3RydWN0IG1lZ2FzYXNfY21kICpjbWQpCi17Ci0JdTMyIGlzX2xvZ2ljYWw7Ci0JdTMyIGRldmljZV9pZDsKLQl1MTYgZmxhZ3MgPSAwOwotCXN0cnVjdCBtZWdhc2FzX3B0aHJ1X2ZyYW1lICpwdGhydTsKLQotCWlzX2xvZ2ljYWwgPSBNRUdBU0FTX0lTX0xPR0lDQUwoc2NwKTsKLQlkZXZpY2VfaWQgPSBNRUdBU0FTX0RFVl9JTkRFWChpbnN0YW5jZSwgc2NwKTsKLQlwdGhydSA9IChzdHJ1Y3QgbWVnYXNhc19wdGhydV9mcmFtZSAqKWNtZC0+ZnJhbWU7Ci0KLQlpZiAoc2NwLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBQQ0lfRE1BX1RPREVWSUNFKQotCQlmbGFncyA9IE1GSV9GUkFNRV9ESVJfV1JJVEU7Ci0JZWxzZSBpZiAoc2NwLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBQQ0lfRE1BX0ZST01ERVZJQ0UpCi0JCWZsYWdzID0gTUZJX0ZSQU1FX0RJUl9SRUFEOwotCWVsc2UgaWYgKHNjcC0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gUENJX0RNQV9OT05FKQotCQlmbGFncyA9IE1GSV9GUkFNRV9ESVJfTk9ORTsKLQotCWlmIChpbnN0YW5jZS0+ZmxhZ19pZWVlID09IDEpIHsKLQkJZmxhZ3MgfD0gTUZJX0ZSQU1FX0lFRUU7Ci0JfQotCi0JLyoKLQkgKiBQcmVwYXJlIHRoZSBEQ0RCIGZyYW1lCi0JICovCi0JcHRocnUtPmNtZCA9IChpc19sb2dpY2FsKSA/IE1GSV9DTURfTERfU0NTSV9JTyA6IE1GSV9DTURfUERfU0NTSV9JTzsKLQlwdGhydS0+Y21kX3N0YXR1cyA9IDB4MDsKLQlwdGhydS0+c2NzaV9zdGF0dXMgPSAweDA7Ci0JcHRocnUtPnRhcmdldF9pZCA9IGRldmljZV9pZDsKLQlwdGhydS0+bHVuID0gc2NwLT5kZXZpY2UtPmx1bjsKLQlwdGhydS0+Y2RiX2xlbiA9IHNjcC0+Y21kX2xlbjsKLQlwdGhydS0+dGltZW91dCA9IDA7Ci0JcHRocnUtPnBhZF8wID0gMDsKLQlwdGhydS0+ZmxhZ3MgPSBmbGFnczsKLQlwdGhydS0+ZGF0YV94ZmVyX2xlbiA9IHNjc2lfYnVmZmxlbihzY3ApOwotCi0JbWVtY3B5KHB0aHJ1LT5jZGIsIHNjcC0+Y21uZCwgc2NwLT5jbWRfbGVuKTsKLQotCS8qCi0JKiBJZiB0aGUgY29tbWFuZCBpcyBmb3IgdGhlIHRhcGUgZGV2aWNlLCBzZXQgdGhlCi0JKiBwdGhydSB0aW1lb3V0IHRvIHRoZSBvcyBsYXllciB0aW1lb3V0IHZhbHVlLgotCSovCi0JaWYgKHNjcC0+ZGV2aWNlLT50eXBlID09IFRZUEVfVEFQRSkgewotCQlpZiAoKHNjcC0+cmVxdWVzdC0+dGltZW91dCAvIEhaKSA+IDB4RkZGRikKLQkJCXB0aHJ1LT50aW1lb3V0ID0gMHhGRkZGOwotCQllbHNlCi0JCQlwdGhydS0+dGltZW91dCA9IHNjcC0+cmVxdWVzdC0+dGltZW91dCAvIEhaOwotCX0KLQotCS8qCi0JICogQ29uc3RydWN0IFNHTAotCSAqLwotCWlmIChpbnN0YW5jZS0+ZmxhZ19pZWVlID09IDEpIHsKLQkJcHRocnUtPmZsYWdzIHw9IE1GSV9GUkFNRV9TR0w2NDsKLQkJcHRocnUtPnNnZV9jb3VudCA9IG1lZ2FzYXNfbWFrZV9zZ2xfc2tpbm55KGluc3RhbmNlLCBzY3AsCi0JCQkJCQkgICAgICAmcHRocnUtPnNnbCk7Ci0JfSBlbHNlIGlmIChJU19ETUE2NCkgewotCQlwdGhydS0+ZmxhZ3MgfD0gTUZJX0ZSQU1FX1NHTDY0OwotCQlwdGhydS0+c2dlX2NvdW50ID0gbWVnYXNhc19tYWtlX3NnbDY0KGluc3RhbmNlLCBzY3AsCi0JCQkJCQkgICAgICAmcHRocnUtPnNnbCk7Ci0JfSBlbHNlCi0JCXB0aHJ1LT5zZ2VfY291bnQgPSBtZWdhc2FzX21ha2Vfc2dsMzIoaW5zdGFuY2UsIHNjcCwKLQkJCQkJCSAgICAgICZwdGhydS0+c2dsKTsKLQotCWlmIChwdGhydS0+c2dlX2NvdW50ID4gaW5zdGFuY2UtPm1heF9udW1fc2dlKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAibWVnYXNhczogRENEQiB0d28gbWFueSBTR0UgTlVNPSV4XG4iLAotCQkJcHRocnUtPnNnZV9jb3VudCk7Ci0JCXJldHVybiAwOwotCX0KLQotCS8qCi0JICogU2Vuc2UgaW5mbyBzcGVjaWZpYwotCSAqLwotCXB0aHJ1LT5zZW5zZV9sZW4gPSBTQ1NJX1NFTlNFX0JVRkZFUlNJWkU7Ci0JcHRocnUtPnNlbnNlX2J1Zl9waHlzX2FkZHJfaGkgPSAwOwotCXB0aHJ1LT5zZW5zZV9idWZfcGh5c19hZGRyX2xvID0gY21kLT5zZW5zZV9waHlzX2FkZHI7Ci0KLQkvKgotCSAqIENvbXB1dGUgdGhlIHRvdGFsIG51bWJlciBvZiBmcmFtZXMgdGhpcyBjb21tYW5kIGNvbnN1bWVzLiBGVyB1c2VzCi0JICogdGhpcyBudW1iZXIgdG8gcHVsbCBzdWZmaWNpZW50IG51bWJlciBvZiBmcmFtZXMgZnJvbSBob3N0IG1lbW9yeS4KLQkgKi8KLQljbWQtPmZyYW1lX2NvdW50ID0gbWVnYXNhc19nZXRfZnJhbWVfY291bnQoaW5zdGFuY2UsIHB0aHJ1LT5zZ2VfY291bnQsCi0JCQkJCQkJUFRIUlVfRlJBTUUpOwotCi0JcmV0dXJuIGNtZC0+ZnJhbWVfY291bnQ7Ci19Ci0KLS8qKgotICogbWVnYXNhc19idWlsZF9sZGlvIC0JUHJlcGFyZXMgSU9zIHRvIGxvZ2ljYWwgZGV2aWNlcwotICogQGluc3RhbmNlOgkJQWRhcHRlciBzb2Z0IHN0YXRlCi0gKiBAc2NwOgkJU0NTSSBjb21tYW5kCi0gKiBAY21kOgkJQ29tbWFuZCB0byBiZSBwcmVwYXJlZAotICoKLSAqIEZyYW1lcyAoYW5kIGFjY29tcGFueWluZyBTR0xzKSBmb3IgcmVndWxhciBTQ1NJIElPcyB1c2UgdGhpcyBmdW5jdGlvbi4KLSAqLwotc3RhdGljIGludAotbWVnYXNhc19idWlsZF9sZGlvKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSwgc3RydWN0IHNjc2lfY21uZCAqc2NwLAotCQkgICBzdHJ1Y3QgbWVnYXNhc19jbWQgKmNtZCkKLXsKLQl1MzIgZGV2aWNlX2lkOwotCXU4IHNjID0gc2NwLT5jbW5kWzBdOwotCXUxNiBmbGFncyA9IDA7Ci0Jc3RydWN0IG1lZ2FzYXNfaW9fZnJhbWUgKmxkaW87Ci0KLQlkZXZpY2VfaWQgPSBNRUdBU0FTX0RFVl9JTkRFWChpbnN0YW5jZSwgc2NwKTsKLQlsZGlvID0gKHN0cnVjdCBtZWdhc2FzX2lvX2ZyYW1lICopY21kLT5mcmFtZTsKLQotCWlmIChzY3AtPnNjX2RhdGFfZGlyZWN0aW9uID09IFBDSV9ETUFfVE9ERVZJQ0UpCi0JCWZsYWdzID0gTUZJX0ZSQU1FX0RJUl9XUklURTsKLQllbHNlIGlmIChzY3AtPnNjX2RhdGFfZGlyZWN0aW9uID09IFBDSV9ETUFfRlJPTURFVklDRSkKLQkJZmxhZ3MgPSBNRklfRlJBTUVfRElSX1JFQUQ7Ci0KLQlpZiAoaW5zdGFuY2UtPmZsYWdfaWVlZSA9PSAxKSB7Ci0JCWZsYWdzIHw9IE1GSV9GUkFNRV9JRUVFOwotCX0KLQotCS8qCi0JICogUHJlcGFyZSB0aGUgTG9naWNhbCBJTyBmcmFtZTogMm5kIGJpdCBpcyB6ZXJvIGZvciBhbGwgcmVhZCBjbWRzCi0JICovCi0JbGRpby0+Y21kID0gKHNjICYgMHgwMikgPyBNRklfQ01EX0xEX1dSSVRFIDogTUZJX0NNRF9MRF9SRUFEOwotCWxkaW8tPmNtZF9zdGF0dXMgPSAweDA7Ci0JbGRpby0+c2NzaV9zdGF0dXMgPSAweDA7Ci0JbGRpby0+dGFyZ2V0X2lkID0gZGV2aWNlX2lkOwotCWxkaW8tPnRpbWVvdXQgPSAwOwotCWxkaW8tPnJlc2VydmVkXzAgPSAwOwotCWxkaW8tPnBhZF8wID0gMDsKLQlsZGlvLT5mbGFncyA9IGZsYWdzOwotCWxkaW8tPnN0YXJ0X2xiYV9oaSA9IDA7Ci0JbGRpby0+YWNjZXNzX2J5dGUgPSAoc2NwLT5jbWRfbGVuICE9IDYpID8gc2NwLT5jbW5kWzFdIDogMDsKLQotCS8qCi0JICogNi1ieXRlIFJFQUQoMHgwOCkgb3IgV1JJVEUoMHgwQSkgY2RiCi0JICovCi0JaWYgKHNjcC0+Y21kX2xlbiA9PSA2KSB7Ci0JCWxkaW8tPmxiYV9jb3VudCA9ICh1MzIpIHNjcC0+Y21uZFs0XTsKLQkJbGRpby0+c3RhcnRfbGJhX2xvID0gKCh1MzIpIHNjcC0+Y21uZFsxXSA8PCAxNikgfAotCQkgICAgKCh1MzIpIHNjcC0+Y21uZFsyXSA8PCA4KSB8ICh1MzIpIHNjcC0+Y21uZFszXTsKLQotCQlsZGlvLT5zdGFydF9sYmFfbG8gJj0gMHgxRkZGRkY7Ci0JfQotCi0JLyoKLQkgKiAxMC1ieXRlIFJFQUQoMHgyOCkgb3IgV1JJVEUoMHgyQSkgY2RiCi0JICovCi0JZWxzZSBpZiAoc2NwLT5jbWRfbGVuID09IDEwKSB7Ci0JCWxkaW8tPmxiYV9jb3VudCA9ICh1MzIpIHNjcC0+Y21uZFs4XSB8Ci0JCSAgICAoKHUzMikgc2NwLT5jbW5kWzddIDw8IDgpOwotCQlsZGlvLT5zdGFydF9sYmFfbG8gPSAoKHUzMikgc2NwLT5jbW5kWzJdIDw8IDI0KSB8Ci0JCSAgICAoKHUzMikgc2NwLT5jbW5kWzNdIDw8IDE2KSB8Ci0JCSAgICAoKHUzMikgc2NwLT5jbW5kWzRdIDw8IDgpIHwgKHUzMikgc2NwLT5jbW5kWzVdOwotCX0KLQotCS8qCi0JICogMTItYnl0ZSBSRUFEKDB4QTgpIG9yIFdSSVRFKDB4QUEpIGNkYgotCSAqLwotCWVsc2UgaWYgKHNjcC0+Y21kX2xlbiA9PSAxMikgewotCQlsZGlvLT5sYmFfY291bnQgPSAoKHUzMikgc2NwLT5jbW5kWzZdIDw8IDI0KSB8Ci0JCSAgICAoKHUzMikgc2NwLT5jbW5kWzddIDw8IDE2KSB8Ci0JCSAgICAoKHUzMikgc2NwLT5jbW5kWzhdIDw8IDgpIHwgKHUzMikgc2NwLT5jbW5kWzldOwotCi0JCWxkaW8tPnN0YXJ0X2xiYV9sbyA9ICgodTMyKSBzY3AtPmNtbmRbMl0gPDwgMjQpIHwKLQkJICAgICgodTMyKSBzY3AtPmNtbmRbM10gPDwgMTYpIHwKLQkJICAgICgodTMyKSBzY3AtPmNtbmRbNF0gPDwgOCkgfCAodTMyKSBzY3AtPmNtbmRbNV07Ci0JfQotCi0JLyoKLQkgKiAxNi1ieXRlIFJFQUQoMHg4OCkgb3IgV1JJVEUoMHg4QSkgY2RiCi0JICovCi0JZWxzZSBpZiAoc2NwLT5jbWRfbGVuID09IDE2KSB7Ci0JCWxkaW8tPmxiYV9jb3VudCA9ICgodTMyKSBzY3AtPmNtbmRbMTBdIDw8IDI0KSB8Ci0JCSAgICAoKHUzMikgc2NwLT5jbW5kWzExXSA8PCAxNikgfAotCQkgICAgKCh1MzIpIHNjcC0+Y21uZFsxMl0gPDwgOCkgfCAodTMyKSBzY3AtPmNtbmRbMTNdOwotCi0JCWxkaW8tPnN0YXJ0X2xiYV9sbyA9ICgodTMyKSBzY3AtPmNtbmRbNl0gPDwgMjQpIHwKLQkJICAgICgodTMyKSBzY3AtPmNtbmRbN10gPDwgMTYpIHwKLQkJICAgICgodTMyKSBzY3AtPmNtbmRbOF0gPDwgOCkgfCAodTMyKSBzY3AtPmNtbmRbOV07Ci0KLQkJbGRpby0+c3RhcnRfbGJhX2hpID0gKCh1MzIpIHNjcC0+Y21uZFsyXSA8PCAyNCkgfAotCQkgICAgKCh1MzIpIHNjcC0+Y21uZFszXSA8PCAxNikgfAotCQkgICAgKCh1MzIpIHNjcC0+Y21uZFs0XSA8PCA4KSB8ICh1MzIpIHNjcC0+Y21uZFs1XTsKLQotCX0KLQotCS8qCi0JICogQ29uc3RydWN0IFNHTAotCSAqLwotCWlmIChpbnN0YW5jZS0+ZmxhZ19pZWVlKSB7Ci0JCWxkaW8tPmZsYWdzIHw9IE1GSV9GUkFNRV9TR0w2NDsKLQkJbGRpby0+c2dlX2NvdW50ID0gbWVnYXNhc19tYWtlX3NnbF9za2lubnkoaW5zdGFuY2UsIHNjcCwKLQkJCQkJICAgICAgJmxkaW8tPnNnbCk7Ci0JfSBlbHNlIGlmIChJU19ETUE2NCkgewotCQlsZGlvLT5mbGFncyB8PSBNRklfRlJBTUVfU0dMNjQ7Ci0JCWxkaW8tPnNnZV9jb3VudCA9IG1lZ2FzYXNfbWFrZV9zZ2w2NChpbnN0YW5jZSwgc2NwLCAmbGRpby0+c2dsKTsKLQl9IGVsc2UKLQkJbGRpby0+c2dlX2NvdW50ID0gbWVnYXNhc19tYWtlX3NnbDMyKGluc3RhbmNlLCBzY3AsICZsZGlvLT5zZ2wpOwotCi0JaWYgKGxkaW8tPnNnZV9jb3VudCA+IGluc3RhbmNlLT5tYXhfbnVtX3NnZSkgewotCQlwcmludGsoS0VSTl9FUlIgIm1lZ2FzYXM6IGJ1aWxkX2xkX2lvOiBzZ2VfY291bnQgPSAleFxuIiwKLQkJCWxkaW8tPnNnZV9jb3VudCk7Ci0JCXJldHVybiAwOwotCX0KLQotCS8qCi0JICogU2Vuc2UgaW5mbyBzcGVjaWZpYwotCSAqLwotCWxkaW8tPnNlbnNlX2xlbiA9IFNDU0lfU0VOU0VfQlVGRkVSU0laRTsKLQlsZGlvLT5zZW5zZV9idWZfcGh5c19hZGRyX2hpID0gMDsKLQlsZGlvLT5zZW5zZV9idWZfcGh5c19hZGRyX2xvID0gY21kLT5zZW5zZV9waHlzX2FkZHI7Ci0KLQkvKgotCSAqIENvbXB1dGUgdGhlIHRvdGFsIG51bWJlciBvZiBmcmFtZXMgdGhpcyBjb21tYW5kIGNvbnN1bWVzLiBGVyB1c2VzCi0JICogdGhpcyBudW1iZXIgdG8gcHVsbCBzdWZmaWNpZW50IG51bWJlciBvZiBmcmFtZXMgZnJvbSBob3N0IG1lbW9yeS4KLQkgKi8KLQljbWQtPmZyYW1lX2NvdW50ID0gbWVnYXNhc19nZXRfZnJhbWVfY291bnQoaW5zdGFuY2UsCi0JCQlsZGlvLT5zZ2VfY291bnQsIElPX0ZSQU1FKTsKLQotCXJldHVybiBjbWQtPmZyYW1lX2NvdW50OwotfQotCi0vKioKLSAqIG1lZ2FzYXNfaXNfbGRpbyAtCQlDaGVja3MgaWYgdGhlIGNtZCBpcyBmb3IgbG9naWNhbCBkcml2ZQotICogQHNjbWQ6CQkJU0NTSSBjb21tYW5kCi0gKgkKLSAqIENhbGxlZCBieSBtZWdhc2FzX3F1ZXVlX2NvbW1hbmQgdG8gZmluZCBvdXQgaWYgdGhlIGNvbW1hbmQgdG8gYmUgcXVldWVkCi0gKiBpcyBhIGxvZ2ljYWwgZHJpdmUgY29tbWFuZAkKLSAqLwotc3RhdGljIGlubGluZSBpbnQgbWVnYXNhc19pc19sZGlvKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKLXsKLQlpZiAoIU1FR0FTQVNfSVNfTE9HSUNBTChjbWQpKQotCQlyZXR1cm4gMDsKLQlzd2l0Y2ggKGNtZC0+Y21uZFswXSkgewotCWNhc2UgUkVBRF8xMDoKLQljYXNlIFdSSVRFXzEwOgotCWNhc2UgUkVBRF8xMjoKLQljYXNlIFdSSVRFXzEyOgotCWNhc2UgUkVBRF82OgotCWNhc2UgV1JJVEVfNjoKLQljYXNlIFJFQURfMTY6Ci0JY2FzZSBXUklURV8xNjoKLQkJcmV0dXJuIDE7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIDA7Ci0JfQotfQotCi0gLyoqCi0gKiBtZWdhc2FzX2R1bXBfcGVuZGluZ19mcmFtZXMgLQlEdW1wcyB0aGUgZnJhbWUgYWRkcmVzcyBvZiBhbGwgcGVuZGluZyBjbWRzCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlpbiBGVwotICogQGluc3RhbmNlOgkJCQlBZGFwdGVyIHNvZnQgc3RhdGUKLSAqLwotc3RhdGljIGlubGluZSB2b2lkCi1tZWdhc2FzX2R1bXBfcGVuZGluZ19mcmFtZXMoc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlKQotewotCXN0cnVjdCBtZWdhc2FzX2NtZCAqY21kOwotCWludCBpLG47Ci0JdW5pb24gbWVnYXNhc19zZ2wgKm1maV9zZ2w7Ci0Jc3RydWN0IG1lZ2FzYXNfaW9fZnJhbWUgKmxkaW87Ci0Jc3RydWN0IG1lZ2FzYXNfcHRocnVfZnJhbWUgKnB0aHJ1OwotCXUzMiBzZ2NvdW50OwotCXUzMiBtYXhfY21kID0gaW5zdGFuY2UtPm1heF9md19jbWRzOwotCi0JcHJpbnRrKEtFUk5fRVJSICJcbm1lZ2FzYXNbJWRdOiBEdW1waW5nIEZyYW1lIFBoeXMgQWRkcmVzcyBvZiBhbGwgcGVuZGluZyBjbWRzIGluIEZXXG4iLGluc3RhbmNlLT5ob3N0LT5ob3N0X25vKTsKLQlwcmludGsoS0VSTl9FUlIgIm1lZ2FzYXNbJWRdOiBUb3RhbCBPUyBQZW5kaW5nIGNtZHMgOiAlZFxuIixpbnN0YW5jZS0+aG9zdC0+aG9zdF9ubyxhdG9taWNfcmVhZCgmaW5zdGFuY2UtPmZ3X291dHN0YW5kaW5nKSk7Ci0JaWYgKElTX0RNQTY0KQotCQlwcmludGsoS0VSTl9FUlIgIlxubWVnYXNhc1slZF06IDY0IGJpdCBTR0xzIHdlcmUgc2VudCB0byBGV1xuIixpbnN0YW5jZS0+aG9zdC0+aG9zdF9ubyk7Ci0JZWxzZQotCQlwcmludGsoS0VSTl9FUlIgIlxubWVnYXNhc1slZF06IDMyIGJpdCBTR0xzIHdlcmUgc2VudCB0byBGV1xuIixpbnN0YW5jZS0+aG9zdC0+aG9zdF9ubyk7Ci0KLQlwcmludGsoS0VSTl9FUlIgIm1lZ2FzYXNbJWRdOiBQZW5kaW5nIE9TIGNtZHMgaW4gRlcgOiBcbiIsaW5zdGFuY2UtPmhvc3QtPmhvc3Rfbm8pOwotCWZvciAoaSA9IDA7IGkgPCBtYXhfY21kOyBpKyspIHsKLQkJY21kID0gaW5zdGFuY2UtPmNtZF9saXN0W2ldOwotCQlpZighY21kLT5zY21kKQotCQkJY29udGludWU7Ci0JCXByaW50ayhLRVJOX0VSUiAibWVnYXNhc1slZF06IEZyYW1lIGFkZHIgOjB4JTA4bHggOiAiLGluc3RhbmNlLT5ob3N0LT5ob3N0X25vLCh1bnNpZ25lZCBsb25nKWNtZC0+ZnJhbWVfcGh5c19hZGRyKTsKLQkJaWYgKG1lZ2FzYXNfaXNfbGRpbyhjbWQtPnNjbWQpKXsKLQkJCWxkaW8gPSAoc3RydWN0IG1lZ2FzYXNfaW9fZnJhbWUgKiljbWQtPmZyYW1lOwotCQkJbWZpX3NnbCA9ICZsZGlvLT5zZ2w7Ci0JCQlzZ2NvdW50ID0gbGRpby0+c2dlX2NvdW50OwotCQkJcHJpbnRrKEtFUk5fRVJSICJtZWdhc2FzWyVkXTogZnJhbWUgY291bnQgOiAweCV4LCBDbWQgOiAweCV4LCBUZ3QgaWQgOiAweCV4LCBsYmEgbG8gOiAweCV4LCBsYmFfaGkgOiAweCV4LCBzZW5zZV9idWYgYWRkciA6IDB4JXgsc2dlIGNvdW50IDogMHgleFxuIixpbnN0YW5jZS0+aG9zdC0+aG9zdF9ubywgY21kLT5mcmFtZV9jb3VudCxsZGlvLT5jbWQsbGRpby0+dGFyZ2V0X2lkLCBsZGlvLT5zdGFydF9sYmFfbG8sbGRpby0+c3RhcnRfbGJhX2hpLGxkaW8tPnNlbnNlX2J1Zl9waHlzX2FkZHJfbG8sc2djb3VudCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlwdGhydSA9IChzdHJ1Y3QgbWVnYXNhc19wdGhydV9mcmFtZSAqKSBjbWQtPmZyYW1lOwotCQkJbWZpX3NnbCA9ICZwdGhydS0+c2dsOwotCQkJc2djb3VudCA9IHB0aHJ1LT5zZ2VfY291bnQ7Ci0JCQlwcmludGsoS0VSTl9FUlIgIm1lZ2FzYXNbJWRdOiBmcmFtZSBjb3VudCA6IDB4JXgsIENtZCA6IDB4JXgsIFRndCBpZCA6IDB4JXgsIGx1biA6IDB4JXgsIGNkYl9sZW4gOiAweCV4LCBkYXRhIHhmZXIgbGVuIDogMHgleCwgc2Vuc2VfYnVmIGFkZHIgOiAweCV4LHNnZSBjb3VudCA6IDB4JXhcbiIsaW5zdGFuY2UtPmhvc3QtPmhvc3Rfbm8sY21kLT5mcmFtZV9jb3VudCxwdGhydS0+Y21kLHB0aHJ1LT50YXJnZXRfaWQscHRocnUtPmx1bixwdGhydS0+Y2RiX2xlbiAsIHB0aHJ1LT5kYXRhX3hmZXJfbGVuLHB0aHJ1LT5zZW5zZV9idWZfcGh5c19hZGRyX2xvLHNnY291bnQpOwotCQl9Ci0JaWYobWVnYXNhc19kYmdfbHZsICYgTUVHQVNBU19EQkdfTFZMKXsKLQkJZm9yIChuID0gMDsgbiA8IHNnY291bnQ7IG4rKyl7Ci0JCQlpZiAoSVNfRE1BNjQpCi0JCQkJcHJpbnRrKEtFUk5fRVJSICJtZWdhc2FzOiBzZ2wgbGVuIDogMHgleCwgc2dsIGFkZHIgOiAweCUwOGx4ICIsbWZpX3NnbC0+c2dlNjRbbl0ubGVuZ3RoICwgKHVuc2lnbmVkIGxvbmcpbWZpX3NnbC0+c2dlNjRbbl0ucGh5c19hZGRyKSA7Ci0JCQllbHNlCi0JCQkJcHJpbnRrKEtFUk5fRVJSICJtZWdhc2FzOiBzZ2wgbGVuIDogMHgleCwgc2dsIGFkZHIgOiAweCV4ICIsbWZpX3NnbC0+c2dlMzJbbl0ubGVuZ3RoICwgbWZpX3NnbC0+c2dlMzJbbl0ucGh5c19hZGRyKSA7Ci0JCQl9Ci0JCX0KLQkJcHJpbnRrKEtFUk5fRVJSICJcbiIpOwotCX0gLypmb3IgbWF4X2NtZCovCi0JcHJpbnRrKEtFUk5fRVJSICJcbm1lZ2FzYXNbJWRdOiBQZW5kaW5nIEludGVybmFsIGNtZHMgaW4gRlcgOiBcbiIsaW5zdGFuY2UtPmhvc3QtPmhvc3Rfbm8pOwotCWZvciAoaSA9IDA7IGkgPCBtYXhfY21kOyBpKyspIHsKLQotCQljbWQgPSBpbnN0YW5jZS0+Y21kX2xpc3RbaV07Ci0KLQkJaWYoY21kLT5zeW5jX2NtZCA9PSAxKXsKLQkJCXByaW50ayhLRVJOX0VSUiAiMHglMDhseCA6ICIsICh1bnNpZ25lZCBsb25nKWNtZC0+ZnJhbWVfcGh5c19hZGRyKTsKLQkJfQotCX0KLQlwcmludGsoS0VSTl9FUlIgIm1lZ2FzYXNbJWRdOiBEdW1waW5nIERvbmUuXG5cbiIsaW5zdGFuY2UtPmhvc3QtPmhvc3Rfbm8pOwotfQotCi0vKioKLSAqIG1lZ2FzYXNfcXVldWVfY29tbWFuZCAtCVF1ZXVlIGVudHJ5IHBvaW50Ci0gKiBAc2NtZDoJCQlTQ1NJIGNvbW1hbmQgdG8gYmUgcXVldWVkCi0gKiBAZG9uZToJCQlDYWxsYmFjayBlbnRyeSBwb2ludAotICovCi1zdGF0aWMgaW50Ci1tZWdhc2FzX3F1ZXVlX2NvbW1hbmRfbGNrKHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQsIHZvaWQgKCpkb25lKSAoc3RydWN0IHNjc2lfY21uZCAqKSkKLXsKLQl1MzIgZnJhbWVfY291bnQ7Ci0Jc3RydWN0IG1lZ2FzYXNfY21kICpjbWQ7Ci0Jc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpbnN0YW5jZSA9IChzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqKQotCSAgICBzY21kLT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhOwotCi0JaWYgKGluc3RhbmNlLT5pc3N1ZXBlbmRfZG9uZSA9PSAwKQotCQlyZXR1cm4gU0NTSV9NTFFVRVVFX0hPU1RfQlVTWTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZpbnN0YW5jZS0+aGJhX2xvY2ssIGZsYWdzKTsKLQlpZiAoaW5zdGFuY2UtPmFkcHJlY292ZXJ5ICE9IE1FR0FTQVNfSEJBX09QRVJBVElPTkFMKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluc3RhbmNlLT5oYmFfbG9jaywgZmxhZ3MpOwotCQlyZXR1cm4gU0NTSV9NTFFVRVVFX0hPU1RfQlVTWTsKLQl9Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbnN0YW5jZS0+aGJhX2xvY2ssIGZsYWdzKTsKLQotCXNjbWQtPnNjc2lfZG9uZSA9IGRvbmU7Ci0Jc2NtZC0+cmVzdWx0ID0gMDsKLQotCWlmIChNRUdBU0FTX0lTX0xPR0lDQUwoc2NtZCkgJiYKLQkgICAgKHNjbWQtPmRldmljZS0+aWQgPj0gTUVHQVNBU19NQVhfTEQgfHwgc2NtZC0+ZGV2aWNlLT5sdW4pKSB7Ci0JCXNjbWQtPnJlc3VsdCA9IERJRF9CQURfVEFSR0VUIDw8IDE2OwotCQlnb3RvIG91dF9kb25lOwotCX0KLQotCXN3aXRjaCAoc2NtZC0+Y21uZFswXSkgewotCWNhc2UgU1lOQ0hST05JWkVfQ0FDSEU6Ci0JCS8qCi0JCSAqIEZXIHRha2VzIGNhcmUgb2YgZmx1c2ggY2FjaGUgb24gaXRzIG93bgotCQkgKiBObyBuZWVkIHRvIHNlbmQgaXQgZG93bgotCQkgKi8KLQkJc2NtZC0+cmVzdWx0ID0gRElEX09LIDw8IDE2OwotCQlnb3RvIG91dF9kb25lOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLQotCWNtZCA9IG1lZ2FzYXNfZ2V0X2NtZChpbnN0YW5jZSk7Ci0JaWYgKCFjbWQpCi0JCXJldHVybiBTQ1NJX01MUVVFVUVfSE9TVF9CVVNZOwotCi0JLyoKLQkgKiBMb2dpY2FsIGRyaXZlIGNvbW1hbmQKLQkgKi8KLQlpZiAobWVnYXNhc19pc19sZGlvKHNjbWQpKQotCQlmcmFtZV9jb3VudCA9IG1lZ2FzYXNfYnVpbGRfbGRpbyhpbnN0YW5jZSwgc2NtZCwgY21kKTsKLQllbHNlCi0JCWZyYW1lX2NvdW50ID0gbWVnYXNhc19idWlsZF9kY2RiKGluc3RhbmNlLCBzY21kLCBjbWQpOwotCi0JaWYgKCFmcmFtZV9jb3VudCkKLQkJZ290byBvdXRfcmV0dXJuX2NtZDsKLQotCWNtZC0+c2NtZCA9IHNjbWQ7Ci0Jc2NtZC0+U0NwLnB0ciA9IChjaGFyICopY21kOwotCi0JLyoKLQkgKiBJc3N1ZSB0aGUgY29tbWFuZCB0byB0aGUgRlcKLQkgKi8KLQlhdG9taWNfaW5jKCZpbnN0YW5jZS0+Zndfb3V0c3RhbmRpbmcpOwotCi0JaW5zdGFuY2UtPmluc3RhbmNldC0+ZmlyZV9jbWQoaW5zdGFuY2UsIGNtZC0+ZnJhbWVfcGh5c19hZGRyLAotCQkJCWNtZC0+ZnJhbWVfY291bnQtMSwgaW5zdGFuY2UtPnJlZ19zZXQpOwotCS8qCi0JICogQ2hlY2sgaWYgd2UgaGF2ZSBwZW5kIGNtZHMgdG8gYmUgY29tcGxldGVkCi0JICovCi0JaWYgKHBvbGxfbW9kZV9pbyAmJiBhdG9taWNfcmVhZCgmaW5zdGFuY2UtPmZ3X291dHN0YW5kaW5nKSkKLQkJdGFza2xldF9zY2hlZHVsZSgmaW5zdGFuY2UtPmlzcl90YXNrbGV0KTsKLQotCi0JcmV0dXJuIDA7Ci0KLSBvdXRfcmV0dXJuX2NtZDoKLQltZWdhc2FzX3JldHVybl9jbWQoaW5zdGFuY2UsIGNtZCk7Ci0gb3V0X2RvbmU6Ci0JZG9uZShzY21kKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIERFRl9TQ1NJX1FDTUQobWVnYXNhc19xdWV1ZV9jb21tYW5kKQotCi1zdGF0aWMgc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKm1lZ2FzYXNfbG9va3VwX2luc3RhbmNlKHUxNiBob3N0X25vKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IG1lZ2FzYXNfbWdtdF9pbmZvLm1heF9pbmRleDsgaSsrKSB7Ci0KLQkJaWYgKChtZWdhc2FzX21nbXRfaW5mby5pbnN0YW5jZVtpXSkgJiYKLQkJICAgIChtZWdhc2FzX21nbXRfaW5mby5pbnN0YW5jZVtpXS0+aG9zdC0+aG9zdF9ubyA9PSBob3N0X25vKSkKLQkJCXJldHVybiBtZWdhc2FzX21nbXRfaW5mby5pbnN0YW5jZVtpXTsKLQl9Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIGludCBtZWdhc2FzX3NsYXZlX2NvbmZpZ3VyZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCi17Ci0JdTE2ICAgICAgICAgICAgIHBkX2luZGV4ID0gMDsKLQlzdHJ1Y3QgIG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlIDsKLQotCWluc3RhbmNlID0gbWVnYXNhc19sb29rdXBfaW5zdGFuY2Uoc2Rldi0+aG9zdC0+aG9zdF9ubyk7Ci0KLQkvKgotCSogRG9uJ3QgZXhwb3J0IHBoeXNpY2FsIGRpc2sgZGV2aWNlcyB0byB0aGUgZGlzayBkcml2ZXIuCi0JKgotCSogRklYTUU6IEN1cnJlbnRseSB3ZSBkb24ndCBleHBvcnQgdGhlbSB0byB0aGUgbWlkbGF5ZXIgYXQgYWxsLgotCSogICAgICAgIFRoYXQgd2lsbCBiZSBmaXhlZCBvbmNlIExTSSBlbmdpbmVlcnMgaGF2ZSBhdWRpdGVkIHRoZQotCSogICAgICAgIGZpcm13YXJlIGZvciBwb3NzaWJsZSBpc3N1ZXMuCi0JKi8KLQlpZiAoc2Rldi0+Y2hhbm5lbCA8IE1FR0FTQVNfTUFYX1BEX0NIQU5ORUxTICYmCi0JCQkJc2Rldi0+dHlwZSA9PSBUWVBFX0RJU0spIHsKLQkJcGRfaW5kZXggPSAoc2Rldi0+Y2hhbm5lbCAqIE1FR0FTQVNfTUFYX0RFVl9QRVJfQ0hBTk5FTCkgKwotCQkJCQkJCQlzZGV2LT5pZDsKLQkJaWYgKGluc3RhbmNlLT5wZF9saXN0W3BkX2luZGV4XS5kcml2ZVN0YXRlID09Ci0JCQkJCQlNUl9QRF9TVEFURV9TWVNURU0pIHsKLQkJCWJsa19xdWV1ZV9ycV90aW1lb3V0KHNkZXYtPnJlcXVlc3RfcXVldWUsCi0JCQkJTUVHQVNBU19ERUZBVUxUX0NNRF9USU1FT1VUICogSFopOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJcmV0dXJuIC1FTlhJTzsKLQl9Ci0KLQkvKgotCSogVGhlIFJBSUQgZmlybXdhcmUgbWF5IHJlcXVpcmUgZXh0ZW5kZWQgdGltZW91dHMuCi0JKi8KLQlibGtfcXVldWVfcnFfdGltZW91dChzZGV2LT5yZXF1ZXN0X3F1ZXVlLAotCQlNRUdBU0FTX0RFRkFVTFRfQ01EX1RJTUVPVVQgKiBIWik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbWVnYXNhc19zbGF2ZV9hbGxvYyhzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCi17Ci0JdTE2ICAgICAgICAgICAgIHBkX2luZGV4ID0gMDsKLQlzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UgOwotCWluc3RhbmNlID0gbWVnYXNhc19sb29rdXBfaW5zdGFuY2Uoc2Rldi0+aG9zdC0+aG9zdF9ubyk7Ci0JaWYgKChzZGV2LT5jaGFubmVsIDwgTUVHQVNBU19NQVhfUERfQ0hBTk5FTFMpICYmCi0JCQkJKHNkZXYtPnR5cGUgPT0gVFlQRV9ESVNLKSkgewotCQkvKgotCQkgKiBPcGVuIHRoZSBPUyBzY2FuIHRvIHRoZSBTWVNURU0gUEQKLQkJICovCi0JCXBkX2luZGV4ID0KLQkJCShzZGV2LT5jaGFubmVsICogTUVHQVNBU19NQVhfREVWX1BFUl9DSEFOTkVMKSArCi0JCQlzZGV2LT5pZDsKLQkJaWYgKChpbnN0YW5jZS0+cGRfbGlzdFtwZF9pbmRleF0uZHJpdmVTdGF0ZSA9PQotCQkJCQlNUl9QRF9TVEFURV9TWVNURU0pICYmCi0JCQkoaW5zdGFuY2UtPnBkX2xpc3RbcGRfaW5kZXhdLmRyaXZlVHlwZSA9PQotCQkJCQkJVFlQRV9ESVNLKSkgewotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJcmV0dXJuIC1FTlhJTzsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIG1lZ2FyYWlkX3Nhc19raWxsX2hiYShzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UpCi17Ci0JaWYgKChpbnN0YW5jZS0+cGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfTFNJX1NBUzAwNzNTS0lOTlkpIHx8Ci0JCShpbnN0YW5jZS0+cGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfTFNJX1NBUzAwNzFTS0lOTlkpKSB7Ci0JCXdyaXRlbChNRklfU1RPUF9BRFAsCi0JCQkmaW5zdGFuY2UtPnJlZ19zZXQtPnJlc2VydmVkXzBbMF0pOwotCX0gZWxzZSB7Ci0JCXdyaXRlbChNRklfU1RPUF9BRFAsCi0JCQkmaW5zdGFuY2UtPnJlZ19zZXQtPmluYm91bmRfZG9vcmJlbGwpOwotCX0KLX0KLQotLyoqCi0gKiBtZWdhc2FzX2NvbXBsZXRlX2NtZF9kcGMJIC0JUmV0dXJucyBGVydzIGNvbnRyb2xsZXIgc3RydWN0dXJlCi0gKiBAaW5zdGFuY2VfYWRkcjoJCQlBZGRyZXNzIG9mIGFkYXB0ZXIgc29mdCBzdGF0ZQotICoKLSAqIFRhc2tsZXQgdG8gY29tcGxldGUgY21kcwotICovCi1zdGF0aWMgdm9pZCBtZWdhc2FzX2NvbXBsZXRlX2NtZF9kcGModW5zaWduZWQgbG9uZyBpbnN0YW5jZV9hZGRyKQotewotCXUzMiBwcm9kdWNlcjsKLQl1MzIgY29uc3VtZXI7Ci0JdTMyIGNvbnRleHQ7Ci0Jc3RydWN0IG1lZ2FzYXNfY21kICpjbWQ7Ci0Jc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlID0KLQkJCQkoc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKilpbnN0YW5jZV9hZGRyOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkvKiBJZiB3ZSBoYXZlIGFscmVhZHkgZGVjbGFyZWQgYWRhcHRlciBkZWFkLCBkb25vdCBjb21wbGV0ZSBjbWRzICovCi0JaWYgKGluc3RhbmNlLT5hZHByZWNvdmVyeSA9PSBNRUdBU0FTX0hXX0NSSVRJQ0FMX0VSUk9SICkKLQkJcmV0dXJuOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmluc3RhbmNlLT5jb21wbGV0aW9uX2xvY2ssIGZsYWdzKTsKLQotCXByb2R1Y2VyID0gKmluc3RhbmNlLT5wcm9kdWNlcjsKLQljb25zdW1lciA9ICppbnN0YW5jZS0+Y29uc3VtZXI7Ci0KLQl3aGlsZSAoY29uc3VtZXIgIT0gcHJvZHVjZXIpIHsKLQkJY29udGV4dCA9IGluc3RhbmNlLT5yZXBseV9xdWV1ZVtjb25zdW1lcl07Ci0JCWlmIChjb250ZXh0ID49IGluc3RhbmNlLT5tYXhfZndfY21kcykgewotCQkJcHJpbnRrKEtFUk5fRVJSICJVbmV4cGVjdGVkIGNvbnRleHQgdmFsdWUgJXhcbiIsCi0JCQkJY29udGV4dCk7Ci0JCQlCVUcoKTsKLQkJfQotCi0JCWNtZCA9IGluc3RhbmNlLT5jbWRfbGlzdFtjb250ZXh0XTsKLQotCQltZWdhc2FzX2NvbXBsZXRlX2NtZChpbnN0YW5jZSwgY21kLCBESURfT0spOwotCi0JCWNvbnN1bWVyKys7Ci0JCWlmIChjb25zdW1lciA9PSAoaW5zdGFuY2UtPm1heF9md19jbWRzICsgMSkpIHsKLQkJCWNvbnN1bWVyID0gMDsKLQkJfQotCX0KLQotCSppbnN0YW5jZS0+Y29uc3VtZXIgPSBwcm9kdWNlcjsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluc3RhbmNlLT5jb21wbGV0aW9uX2xvY2ssIGZsYWdzKTsKLQotCS8qCi0JICogQ2hlY2sgaWYgd2UgY2FuIHJlc3RvcmUgY2FuX3F1ZXVlCi0JICovCi0JaWYgKGluc3RhbmNlLT5mbGFnICYgTUVHQVNBU19GV19CVVNZCi0JCSYmIHRpbWVfYWZ0ZXIoamlmZmllcywgaW5zdGFuY2UtPmxhc3RfdGltZSArIDUgKiBIWikKLQkJJiYgYXRvbWljX3JlYWQoJmluc3RhbmNlLT5md19vdXRzdGFuZGluZykgPCAxNykgewotCi0JCXNwaW5fbG9ja19pcnFzYXZlKGluc3RhbmNlLT5ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKLQkJaW5zdGFuY2UtPmZsYWcgJj0gfk1FR0FTQVNfRldfQlVTWTsKLQkJaWYgKChpbnN0YW5jZS0+cGRldi0+ZGV2aWNlID09Ci0JCQlQQ0lfREVWSUNFX0lEX0xTSV9TQVMwMDczU0tJTk5ZKSB8fAotCQkJKGluc3RhbmNlLT5wZGV2LT5kZXZpY2UgPT0KLQkJCVBDSV9ERVZJQ0VfSURfTFNJX1NBUzAwNzFTS0lOTlkpKSB7Ci0JCQlpbnN0YW5jZS0+aG9zdC0+Y2FuX3F1ZXVlID0KLQkJCQlpbnN0YW5jZS0+bWF4X2Z3X2NtZHMgLSBNRUdBU0FTX1NLSU5OWV9JTlRfQ01EUzsKLQkJfSBlbHNlCi0JCQlpbnN0YW5jZS0+aG9zdC0+Y2FuX3F1ZXVlID0KLQkJCQlpbnN0YW5jZS0+bWF4X2Z3X2NtZHMgLSBNRUdBU0FTX0lOVF9DTURTOwotCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoaW5zdGFuY2UtPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwotCX0KLX0KLQotc3RhdGljIHZvaWQKLW1lZ2FzYXNfaW50ZXJuYWxfcmVzZXRfZGVmZXJfY21kcyhzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UpOwotCi1zdGF0aWMgdm9pZAotcHJvY2Vzc19md19zdGF0ZV9jaGFuZ2Vfd3Eoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKLQotdm9pZCBtZWdhc2FzX2RvX29jcihzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UpCi17Ci0JaWYgKChpbnN0YW5jZS0+cGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfTFNJX1NBUzEwNjRSKSB8fAotCShpbnN0YW5jZS0+cGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfREVMTF9QRVJDNSkgfHwKLQkoaW5zdGFuY2UtPnBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0xTSV9WRVJERV9aQ1IpKSB7Ci0JCSppbnN0YW5jZS0+Y29uc3VtZXIgICAgID0gTUVHQVNBU19BRFBSRVNFVF9JTlBST0dfU0lHTjsKLQl9Ci0JaW5zdGFuY2UtPmluc3RhbmNldC0+ZGlzYWJsZV9pbnRyKGluc3RhbmNlLT5yZWdfc2V0KTsKLQlpbnN0YW5jZS0+YWRwcmVjb3ZlcnkgICA9IE1FR0FTQVNfQURQUkVTRVRfU01fSU5GQVVMVDsKLQlpbnN0YW5jZS0+aXNzdWVwZW5kX2RvbmUgPSAwOwotCi0JYXRvbWljX3NldCgmaW5zdGFuY2UtPmZ3X291dHN0YW5kaW5nLCAwKTsKLQltZWdhc2FzX2ludGVybmFsX3Jlc2V0X2RlZmVyX2NtZHMoaW5zdGFuY2UpOwotCXByb2Nlc3NfZndfc3RhdGVfY2hhbmdlX3dxKCZpbnN0YW5jZS0+d29ya19pbml0KTsKLX0KLQotLyoqCi0gKiBtZWdhc2FzX3dhaXRfZm9yX291dHN0YW5kaW5nIC0JV2FpdCBmb3IgYWxsIG91dHN0YW5kaW5nIGNtZHMKLSAqIEBpbnN0YW5jZToJCQkJQWRhcHRlciBzb2Z0IHN0YXRlCi0gKgotICogVGhpcyBmdW5jdGlvbiB3YWl0cyBmb3IgdXB0byBNRUdBU0FTX1JFU0VUX1dBSVRfVElNRSBzZWNvbmRzIGZvciBGVyB0bwotICogY29tcGxldGUgYWxsIGl0cyBvdXRzdGFuZGluZyBjb21tYW5kcy4gUmV0dXJucyBlcnJvciBpZiBvbmUgb3IgbW9yZSBJT3MKLSAqIGFyZSBwZW5kaW5nIGFmdGVyIHRoaXMgdGltZSBwZXJpb2QuIEl0IGFsc28gbWFya3MgdGhlIGNvbnRyb2xsZXIgZGVhZC4KLSAqLwotc3RhdGljIGludCBtZWdhc2FzX3dhaXRfZm9yX291dHN0YW5kaW5nKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSkKLXsKLQlpbnQgaTsKLQl1MzIgcmVzZXRfaW5kZXg7Ci0JdTMyIHdhaXRfdGltZSA9IE1FR0FTQVNfUkVTRVRfV0FJVF9USU1FOwotCXU4IGFkcHJlY292ZXJ5OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGxpc3RfaGVhZCBjbGlzdF9sb2NhbDsKLQlzdHJ1Y3QgbWVnYXNhc19jbWQgKnJlc2V0X2NtZDsKLQl1MzIgZndfc3RhdGU7Ci0JdTgga2lsbF9hZGFwdGVyX2ZsYWc7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW5zdGFuY2UtPmhiYV9sb2NrLCBmbGFncyk7Ci0JYWRwcmVjb3ZlcnkgPSBpbnN0YW5jZS0+YWRwcmVjb3Zlcnk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5zdGFuY2UtPmhiYV9sb2NrLCBmbGFncyk7Ci0KLQlpZiAoYWRwcmVjb3ZlcnkgIT0gTUVHQVNBU19IQkFfT1BFUkFUSU9OQUwpIHsKLQotCQlJTklUX0xJU1RfSEVBRCgmY2xpc3RfbG9jYWwpOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW5zdGFuY2UtPmhiYV9sb2NrLCBmbGFncyk7Ci0JCWxpc3Rfc3BsaWNlX2luaXQoJmluc3RhbmNlLT5pbnRlcm5hbF9yZXNldF9wZW5kaW5nX3EsCi0JCQkJJmNsaXN0X2xvY2FsKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5zdGFuY2UtPmhiYV9sb2NrLCBmbGFncyk7Ci0KLQkJcHJpbnRrKEtFUk5fTk9USUNFICJtZWdhc2FzOiBIQkEgcmVzZXQgd2FpdCAuLi5cbiIpOwotCQlmb3IgKGkgPSAwOyBpIDwgd2FpdF90aW1lOyBpKyspIHsKLQkJCW1zbGVlcCgxMDAwKTsKLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZpbnN0YW5jZS0+aGJhX2xvY2ssIGZsYWdzKTsKLQkJCWFkcHJlY292ZXJ5ID0gaW5zdGFuY2UtPmFkcHJlY292ZXJ5OwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5zdGFuY2UtPmhiYV9sb2NrLCBmbGFncyk7Ci0JCQlpZiAoYWRwcmVjb3ZlcnkgPT0gTUVHQVNBU19IQkFfT1BFUkFUSU9OQUwpCi0JCQkJYnJlYWs7Ci0JCX0KLQotCQlpZiAoYWRwcmVjb3ZlcnkgIT0gTUVHQVNBU19IQkFfT1BFUkFUSU9OQUwpIHsKLQkJCXByaW50ayhLRVJOX05PVElDRSAibWVnYXNhczogcmVzZXQ6IFN0b3BwaW5nIEhCQS5cbiIpOwotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmluc3RhbmNlLT5oYmFfbG9jaywgZmxhZ3MpOwotCQkJaW5zdGFuY2UtPmFkcHJlY292ZXJ5CT0gTUVHQVNBU19IV19DUklUSUNBTF9FUlJPUjsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluc3RhbmNlLT5oYmFfbG9jaywgZmxhZ3MpOwotCQkJcmV0dXJuIEZBSUxFRDsKLQkJfQotCi0JCXJlc2V0X2luZGV4CT0gMDsKLQkJd2hpbGUgKCFsaXN0X2VtcHR5KCZjbGlzdF9sb2NhbCkpIHsKLQkJCXJlc2V0X2NtZAk9IGxpc3RfZW50cnkoKCZjbGlzdF9sb2NhbCktPm5leHQsCi0JCQkJCQlzdHJ1Y3QgbWVnYXNhc19jbWQsIGxpc3QpOwotCQkJbGlzdF9kZWxfaW5pdCgmcmVzZXRfY21kLT5saXN0KTsKLQkJCWlmIChyZXNldF9jbWQtPnNjbWQpIHsKLQkJCQlyZXNldF9jbWQtPnNjbWQtPnJlc3VsdCA9IERJRF9SRVNFVCA8PCAxNjsKLQkJCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVkOiVwIHJlc2V0IFslMDJ4XSwgJSNseFxuIiwKLQkJCQkJcmVzZXRfaW5kZXgsIHJlc2V0X2NtZCwKLQkJCQkJcmVzZXRfY21kLT5zY21kLT5jbW5kWzBdLAotCQkJCQlyZXNldF9jbWQtPnNjbWQtPnNlcmlhbF9udW1iZXIpOwotCi0JCQkJcmVzZXRfY21kLT5zY21kLT5zY3NpX2RvbmUocmVzZXRfY21kLT5zY21kKTsKLQkJCQltZWdhc2FzX3JldHVybl9jbWQoaW5zdGFuY2UsIHJlc2V0X2NtZCk7Ci0JCQl9IGVsc2UgaWYgKHJlc2V0X2NtZC0+c3luY19jbWQpIHsKLQkJCQlwcmludGsoS0VSTl9OT1RJQ0UgIm1lZ2FzYXM6JXAgc3luY2ggY21kcyIKLQkJCQkJCSJyZXNldCBxdWV1ZVxuIiwKLQkJCQkJCXJlc2V0X2NtZCk7Ci0KLQkJCQlyZXNldF9jbWQtPmNtZF9zdGF0dXMgPSBFTk9EQVRBOwotCQkJCWluc3RhbmNlLT5pbnN0YW5jZXQtPmZpcmVfY21kKGluc3RhbmNlLAotCQkJCQkJcmVzZXRfY21kLT5mcmFtZV9waHlzX2FkZHIsCi0JCQkJCQkwLCBpbnN0YW5jZS0+cmVnX3NldCk7Ci0JCQl9IGVsc2UgewotCQkJCXByaW50ayhLRVJOX05PVElDRSAibWVnYXNhczogJXAgdW5leHBlY3RlZCIKLQkJCQkJImNtZHMgbHN0XG4iLAotCQkJCQlyZXNldF9jbWQpOwotCQkJfQotCQkJcmVzZXRfaW5kZXgrKzsKLQkJfQotCi0JCXJldHVybiBTVUNDRVNTOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCB3YWl0X3RpbWU7IGkrKykgewotCi0JCWludCBvdXRzdGFuZGluZyA9IGF0b21pY19yZWFkKCZpbnN0YW5jZS0+Zndfb3V0c3RhbmRpbmcpOwotCi0JCWlmICghb3V0c3RhbmRpbmcpCi0JCQlicmVhazsKLQotCQlpZiAoIShpICUgTUVHQVNBU19SRVNFVF9OT1RJQ0VfSU5URVJWQUwpKSB7Ci0JCQlwcmludGsoS0VSTl9OT1RJQ0UgIm1lZ2FzYXM6IFslMmRdd2FpdGluZyBmb3IgJWQgIgotCQkJICAgICAgICJjb21tYW5kcyB0byBjb21wbGV0ZVxuIixpLG91dHN0YW5kaW5nKTsKLQkJCS8qCi0JCQkgKiBDYWxsIGNtZCBjb21wbGV0aW9uIHJvdXRpbmUuIENtZCB0byBiZQotCQkJICogYmUgY29tcGxldGVkIGRpcmVjdGx5IHdpdGhvdXQgZGVwZW5kaW5nIG9uIGlzci4KLQkJCSAqLwotCQkJbWVnYXNhc19jb21wbGV0ZV9jbWRfZHBjKCh1bnNpZ25lZCBsb25nKWluc3RhbmNlKTsKLQkJfQotCi0JCW1zbGVlcCgxMDAwKTsKLQl9Ci0KLQlpID0gMDsKLQlraWxsX2FkYXB0ZXJfZmxhZyA9IDA7Ci0JZG8gewotCQlmd19zdGF0ZSA9IGluc3RhbmNlLT5pbnN0YW5jZXQtPnJlYWRfZndfc3RhdHVzX3JlZygKLQkJCQkJaW5zdGFuY2UtPnJlZ19zZXQpICYgTUZJX1NUQVRFX01BU0s7Ci0JCWlmICgoZndfc3RhdGUgPT0gTUZJX1NUQVRFX0ZBVUxUKSAmJgotCQkJKGluc3RhbmNlLT5kaXNhYmxlT25saW5lQ3RybFJlc2V0ID09IDApKSB7Ci0JCQlpZiAoaSA9PSAzKSB7Ci0JCQkJa2lsbF9hZGFwdGVyX2ZsYWcgPSAyOwotCQkJCWJyZWFrOwotCQkJfQotCQkJbWVnYXNhc19kb19vY3IoaW5zdGFuY2UpOwotCQkJa2lsbF9hZGFwdGVyX2ZsYWcgPSAxOwotCi0JCQkvKiB3YWl0IGZvciAxIHNlY3MgdG8gbGV0IEZXIGZpbmlzaCB0aGUgcGVuZGluZyBjbWRzICovCi0JCQltc2xlZXAoMTAwMCk7Ci0JCX0KLQkJaSsrOwotCX0gd2hpbGUgKGkgPD0gMyk7Ci0KLQlpZiAoYXRvbWljX3JlYWQoJmluc3RhbmNlLT5md19vdXRzdGFuZGluZykgJiYKLQkJCQkJIWtpbGxfYWRhcHRlcl9mbGFnKSB7Ci0JCWlmIChpbnN0YW5jZS0+ZGlzYWJsZU9ubGluZUN0cmxSZXNldCA9PSAwKSB7Ci0KLQkJCW1lZ2FzYXNfZG9fb2NyKGluc3RhbmNlKTsKLQotCQkJLyogd2FpdCBmb3IgNSBzZWNzIHRvIGxldCBGVyBmaW5pc2ggdGhlIHBlbmRpbmcgY21kcyAqLwotCQkJZm9yIChpID0gMDsgaSA8IHdhaXRfdGltZTsgaSsrKSB7Ci0JCQkJaW50IG91dHN0YW5kaW5nID0KLQkJCQkJYXRvbWljX3JlYWQoJmluc3RhbmNlLT5md19vdXRzdGFuZGluZyk7Ci0JCQkJaWYgKCFvdXRzdGFuZGluZykKLQkJCQkJcmV0dXJuIFNVQ0NFU1M7Ci0JCQkJbXNsZWVwKDEwMDApOwotCQkJfQotCQl9Ci0JfQotCi0JaWYgKGF0b21pY19yZWFkKCZpbnN0YW5jZS0+Zndfb3V0c3RhbmRpbmcpIHx8Ci0JCQkJCShraWxsX2FkYXB0ZXJfZmxhZyA9PSAyKSkgewotCQlwcmludGsoS0VSTl9OT1RJQ0UgIm1lZ2FyYWlkX3NhczogcGVuZGluZyBjbWRzIGFmdGVyIHJlc2V0XG4iKTsKLQkJLyoKLQkJKiBTZW5kIHNpZ25hbCB0byBGVyB0byBzdG9wIHByb2Nlc3NpbmcgYW55IHBlbmRpbmcgY21kcy4KLQkJKiBUaGUgY29udHJvbGxlciB3aWxsIGJlIHRha2VuIG9mZmxpbmUgYnkgdGhlIE9TIG5vdy4KLQkJKi8KLQkJaWYgKChpbnN0YW5jZS0+cGRldi0+ZGV2aWNlID09Ci0JCQlQQ0lfREVWSUNFX0lEX0xTSV9TQVMwMDczU0tJTk5ZKSB8fAotCQkJKGluc3RhbmNlLT5wZGV2LT5kZXZpY2UgPT0KLQkJCVBDSV9ERVZJQ0VfSURfTFNJX1NBUzAwNzFTS0lOTlkpKSB7Ci0JCQl3cml0ZWwoTUZJX1NUT1BfQURQLAotCQkJCSZpbnN0YW5jZS0+cmVnX3NldC0+cmVzZXJ2ZWRfMFswXSk7Ci0JCX0gZWxzZSB7Ci0JCQl3cml0ZWwoTUZJX1NUT1BfQURQLAotCQkJCSZpbnN0YW5jZS0+cmVnX3NldC0+aW5ib3VuZF9kb29yYmVsbCk7Ci0JCX0KLQkJbWVnYXNhc19kdW1wX3BlbmRpbmdfZnJhbWVzKGluc3RhbmNlKTsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmluc3RhbmNlLT5oYmFfbG9jaywgZmxhZ3MpOwotCQlpbnN0YW5jZS0+YWRwcmVjb3ZlcnkJPSBNRUdBU0FTX0hXX0NSSVRJQ0FMX0VSUk9SOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbnN0YW5jZS0+aGJhX2xvY2ssIGZsYWdzKTsKLQkJcmV0dXJuIEZBSUxFRDsKLQl9Ci0KLQlwcmludGsoS0VSTl9OT1RJQ0UgIm1lZ2FyYWlkX3Nhczogbm8gcGVuZGluZyBjbWRzIGFmdGVyIHJlc2V0XG4iKTsKLQotCXJldHVybiBTVUNDRVNTOwotfQotCi0vKioKLSAqIG1lZ2FzYXNfZ2VuZXJpY19yZXNldCAtCUdlbmVyaWMgcmVzZXQgcm91dGluZQotICogQHNjbWQ6CQkJTWlkLWxheWVyIFNDU0kgY29tbWFuZAotICoKLSAqIFRoaXMgcm91dGluZSBpbXBsZW1lbnRzIGEgZ2VuZXJpYyByZXNldCBoYW5kbGVyIGZvciBkZXZpY2UsIGJ1cyBhbmQgaG9zdAotICogcmVzZXQgcmVxdWVzdHMuIERldmljZSwgYnVzIGFuZCBob3N0IHNwZWNpZmljIHJlc2V0IGhhbmRsZXJzIGNhbiB1c2UgdGhpcwotICogZnVuY3Rpb24gYWZ0ZXIgdGhleSBkbyB0aGVpciBzcGVjaWZpYyB0YXNrcy4KLSAqLwotc3RhdGljIGludCBtZWdhc2FzX2dlbmVyaWNfcmVzZXQoc3RydWN0IHNjc2lfY21uZCAqc2NtZCkKLXsKLQlpbnQgcmV0X3ZhbDsKLQlzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2U7Ci0KLQlpbnN0YW5jZSA9IChzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqKXNjbWQtPmRldmljZS0+aG9zdC0+aG9zdGRhdGE7Ci0KLQlzY21kX3ByaW50ayhLRVJOX05PVElDRSwgc2NtZCwgIm1lZ2FzYXM6IFJFU0VUIC0lbGQgY21kPSV4IHJldHJpZXM9JXhcbiIsCi0JCSBzY21kLT5zZXJpYWxfbnVtYmVyLCBzY21kLT5jbW5kWzBdLCBzY21kLT5yZXRyaWVzKTsKLQotCWlmIChpbnN0YW5jZS0+YWRwcmVjb3ZlcnkgPT0gTUVHQVNBU19IV19DUklUSUNBTF9FUlJPUikgewotCQlwcmludGsoS0VSTl9FUlIgIm1lZ2FzYXM6IGNhbm5vdCByZWNvdmVyIGZyb20gcHJldmlvdXMgcmVzZXQgIgotCQkgICAgICAgImZhaWx1cmVzXG4iKTsKLQkJcmV0dXJuIEZBSUxFRDsKLQl9Ci0KLQlyZXRfdmFsID0gbWVnYXNhc193YWl0X2Zvcl9vdXRzdGFuZGluZyhpbnN0YW5jZSk7Ci0JaWYgKHJldF92YWwgPT0gU1VDQ0VTUykKLQkJcHJpbnRrKEtFUk5fTk9USUNFICJtZWdhc2FzOiByZXNldCBzdWNjZXNzZnVsIFxuIik7Ci0JZWxzZQotCQlwcmludGsoS0VSTl9FUlIgIm1lZ2FzYXM6IGZhaWxlZCB0byBkbyByZXNldFxuIik7Ci0KLQlyZXR1cm4gcmV0X3ZhbDsKLX0KLQotLyoqCi0gKiBtZWdhc2FzX3Jlc2V0X3RpbWVyIC0gcXVpZXNjZSB0aGUgYWRhcHRlciBpZiByZXF1aXJlZAotICogQHNjbWQ6CQlzY3NpIGNtbmQKLSAqCi0gKiBTZXRzIHRoZSBGVyBidXN5IGZsYWcgYW5kIHJlZHVjZXMgdGhlIGhvc3QtPmNhbl9xdWV1ZSBpZiB0aGUKLSAqIGNtZCBoYXMgbm90IGJlZW4gY29tcGxldGVkIHdpdGhpbiB0aGUgdGltZW91dCBwZXJpb2QuCi0gKi8KLXN0YXRpYyBlbnVtCi1ibGtfZWhfdGltZXJfcmV0dXJuIG1lZ2FzYXNfcmVzZXRfdGltZXIoc3RydWN0IHNjc2lfY21uZCAqc2NtZCkKLXsKLQlzdHJ1Y3QgbWVnYXNhc19jbWQgKmNtZCA9IChzdHJ1Y3QgbWVnYXNhc19jbWQgKilzY21kLT5TQ3AucHRyOwotCXN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgc2NtZC0+amlmZmllc19hdF9hbGxvYyArCi0JCQkJKE1FR0FTQVNfREVGQVVMVF9DTURfVElNRU9VVCAqIDIpICogSFopKSB7Ci0JCXJldHVybiBCTEtfRUhfTk9UX0hBTkRMRUQ7Ci0JfQotCi0JaW5zdGFuY2UgPSBjbWQtPmluc3RhbmNlOwotCWlmICghKGluc3RhbmNlLT5mbGFnICYgTUVHQVNBU19GV19CVVNZKSkgewotCQkvKiBGVyBpcyBidXN5LCB0aHJvdHRsZSBJTyAqLwotCQlzcGluX2xvY2tfaXJxc2F2ZShpbnN0YW5jZS0+aG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7Ci0KLQkJaW5zdGFuY2UtPmhvc3QtPmNhbl9xdWV1ZSA9IDE2OwotCQlpbnN0YW5jZS0+bGFzdF90aW1lID0gamlmZmllczsKLQkJaW5zdGFuY2UtPmZsYWcgfD0gTUVHQVNBU19GV19CVVNZOwotCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoaW5zdGFuY2UtPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwotCX0KLQlyZXR1cm4gQkxLX0VIX1JFU0VUX1RJTUVSOwotfQotCi0vKioKLSAqIG1lZ2FzYXNfcmVzZXRfZGV2aWNlIC0JRGV2aWNlIHJlc2V0IGhhbmRsZXIgZW50cnkgcG9pbnQKLSAqLwotc3RhdGljIGludCBtZWdhc2FzX3Jlc2V0X2RldmljZShzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kKQotewotCWludCByZXQ7Ci0KLQkvKgotCSAqIEZpcnN0IHdhaXQgZm9yIGFsbCBjb21tYW5kcyB0byBjb21wbGV0ZQotCSAqLwotCXJldCA9IG1lZ2FzYXNfZ2VuZXJpY19yZXNldChzY21kKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLS8qKgotICogbWVnYXNhc19yZXNldF9idXNfaG9zdCAtCUJ1cyAmIGhvc3QgcmVzZXQgaGFuZGxlciBlbnRyeSBwb2ludAotICovCi1zdGF0aWMgaW50IG1lZ2FzYXNfcmVzZXRfYnVzX2hvc3Qoc3RydWN0IHNjc2lfY21uZCAqc2NtZCkKLXsKLQlpbnQgcmV0OwotCi0JLyoKLQkgKiBGaXJzdCB3YWl0IGZvciBhbGwgY29tbWFuZHMgdG8gY29tcGxldGUKLQkgKi8KLQlyZXQgPSBtZWdhc2FzX2dlbmVyaWNfcmVzZXQoc2NtZCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0vKioKLSAqIG1lZ2FzYXNfYmlvc19wYXJhbSAtIFJldHVybnMgZGlzayBnZW9tZXRyeSBmb3IgYSBkaXNrCi0gKiBAc2RldjogCQlkZXZpY2UgaGFuZGxlCi0gKiBAYmRldjoJCWJsb2NrIGRldmljZQotICogQGNhcGFjaXR5OgkJZHJpdmUgY2FwYWNpdHkKLSAqIEBnZW9tOgkJZ2VvbWV0cnkgcGFyYW1ldGVycwotICovCi1zdGF0aWMgaW50Ci1tZWdhc2FzX2Jpb3NfcGFyYW0oc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LAotCQkgc2VjdG9yX3QgY2FwYWNpdHksIGludCBnZW9tW10pCi17Ci0JaW50IGhlYWRzOwotCWludCBzZWN0b3JzOwotCXNlY3Rvcl90IGN5bGluZGVyczsKLQl1bnNpZ25lZCBsb25nIHRtcDsKLQkvKiBEZWZhdWx0IGhlYWRzICg2NCkgJiBzZWN0b3JzICgzMikgKi8KLQloZWFkcyA9IDY0OwotCXNlY3RvcnMgPSAzMjsKLQotCXRtcCA9IGhlYWRzICogc2VjdG9yczsKLQljeWxpbmRlcnMgPSBjYXBhY2l0eTsKLQotCXNlY3Rvcl9kaXYoY3lsaW5kZXJzLCB0bXApOwotCi0JLyoKLQkgKiBIYW5kbGUgZXh0ZW5kZWQgdHJhbnNsYXRpb24gc2l6ZSBmb3IgbG9naWNhbCBkcml2ZXMgPiAxR2IKLQkgKi8KLQotCWlmIChjYXBhY2l0eSA+PSAweDIwMDAwMCkgewotCQloZWFkcyA9IDI1NTsKLQkJc2VjdG9ycyA9IDYzOwotCQl0bXAgPSBoZWFkcypzZWN0b3JzOwotCQljeWxpbmRlcnMgPSBjYXBhY2l0eTsKLQkJc2VjdG9yX2RpdihjeWxpbmRlcnMsIHRtcCk7Ci0JfQotCi0JZ2VvbVswXSA9IGhlYWRzOwotCWdlb21bMV0gPSBzZWN0b3JzOwotCWdlb21bMl0gPSBjeWxpbmRlcnM7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgbWVnYXNhc19hZW5fcG9sbGluZyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwotCi0vKioKLSAqIG1lZ2FzYXNfc2VydmljZV9hZW4gLQlQcm9jZXNzZXMgYW4gZXZlbnQgbm90aWZpY2F0aW9uCi0gKiBAaW5zdGFuY2U6CQkJQWRhcHRlciBzb2Z0IHN0YXRlCi0gKiBAY21kOgkJCUFFTiBjb21tYW5kIGNvbXBsZXRlZCBieSB0aGUgSVNSCi0gKgotICogRm9yIEFFTiwgZHJpdmVyIHNlbmRzIGEgY29tbWFuZCBkb3duIHRvIEZXIHRoYXQgaXMgaGVsZCBieSB0aGUgRlcgdGlsbCBhbgotICogZXZlbnQgb2NjdXJzLiBXaGVuIGFuIGV2ZW50IG9mIGludGVyZXN0IG9jY3VycywgRlcgY29tcGxldGVzIHRoZSBjb21tYW5kCi0gKiB0aGF0IGl0IHdhcyBwcmV2aW91c2x5IGhvbGRpbmcuCi0gKgotICogVGhpcyByb3V0aW5lcyBzZW5kcyBTSUdJTyBzaWduYWwgdG8gcHJvY2Vzc2VzIHRoYXQgaGF2ZSByZWdpc3RlcmVkIHdpdGggdGhlCi0gKiBkcml2ZXIgZm9yIEFFTi4KLSAqLwotc3RhdGljIHZvaWQKLW1lZ2FzYXNfc2VydmljZV9hZW4oc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlLCBzdHJ1Y3QgbWVnYXNhc19jbWQgKmNtZCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCS8qCi0JICogRG9uJ3Qgc2lnbmFsIGFwcCBpZiBpdCBpcyBqdXN0IGFuIGFib3J0ZWQgcHJldmlvdXNseSByZWdpc3RlcmVkIGFlbgotCSAqLwotCWlmICgoIWNtZC0+YWJvcnRfYWVuKSAmJiAoaW5zdGFuY2UtPnVubG9hZCA9PSAwKSkgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcG9sbF9hZW5fbG9jaywgZmxhZ3MpOwotCQltZWdhc2FzX3BvbGxfd2FpdF9hZW4gPSAxOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb2xsX2Flbl9sb2NrLCBmbGFncyk7Ci0JCXdha2VfdXAoJm1lZ2FzYXNfcG9sbF93YWl0KTsKLQkJa2lsbF9mYXN5bmMoJm1lZ2FzYXNfYXN5bmNfcXVldWUsIFNJR0lPLCBQT0xMX0lOKTsKLQl9Ci0JZWxzZQotCQljbWQtPmFib3J0X2FlbiA9IDA7Ci0KLQlpbnN0YW5jZS0+YWVuX2NtZCA9IE5VTEw7Ci0JbWVnYXNhc19yZXR1cm5fY21kKGluc3RhbmNlLCBjbWQpOwotCi0JaWYgKChpbnN0YW5jZS0+dW5sb2FkID09IDApICYmCi0JCSgoaW5zdGFuY2UtPmlzc3VlcGVuZF9kb25lID09IDEpKSkgewotCQlzdHJ1Y3QgbWVnYXNhc19hZW5fZXZlbnQgKmV2OwotCQlldiA9IGt6YWxsb2Moc2l6ZW9mKCpldiksIEdGUF9BVE9NSUMpOwotCQlpZiAoIWV2KSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIm1lZ2FzYXNfc2VydmljZV9hZW46IG91dCBvZiBtZW1vcnlcbiIpOwotCQl9IGVsc2UgewotCQkJZXYtPmluc3RhbmNlID0gaW5zdGFuY2U7Ci0JCQlpbnN0YW5jZS0+ZXYgPSBldjsKLQkJCUlOSVRfV09SSygmZXYtPmhvdHBsdWdfd29yaywgbWVnYXNhc19hZW5fcG9sbGluZyk7Ci0JCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoCi0JCQkJKHN0cnVjdCBkZWxheWVkX3dvcmsgKikmZXYtPmhvdHBsdWdfd29yaywgMCk7Ci0JCX0KLQl9Ci19Ci0KLS8qCi0gKiBTY3NpIGhvc3QgdGVtcGxhdGUgZm9yIG1lZ2FyYWlkX3NhcyBkcml2ZXIKLSAqLwotc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgbWVnYXNhc190ZW1wbGF0ZSA9IHsKLQotCS5tb2R1bGUgPSBUSElTX01PRFVMRSwKLQkubmFtZSA9ICJMU0kgU0FTIGJhc2VkIE1lZ2FSQUlEIGRyaXZlciIsCi0JLnByb2NfbmFtZSA9ICJtZWdhcmFpZF9zYXMiLAotCS5zbGF2ZV9jb25maWd1cmUgPSBtZWdhc2FzX3NsYXZlX2NvbmZpZ3VyZSwKLQkuc2xhdmVfYWxsb2MgPSBtZWdhc2FzX3NsYXZlX2FsbG9jLAotCS5xdWV1ZWNvbW1hbmQgPSBtZWdhc2FzX3F1ZXVlX2NvbW1hbmQsCi0JLmVoX2RldmljZV9yZXNldF9oYW5kbGVyID0gbWVnYXNhc19yZXNldF9kZXZpY2UsCi0JLmVoX2J1c19yZXNldF9oYW5kbGVyID0gbWVnYXNhc19yZXNldF9idXNfaG9zdCwKLQkuZWhfaG9zdF9yZXNldF9oYW5kbGVyID0gbWVnYXNhc19yZXNldF9idXNfaG9zdCwKLQkuZWhfdGltZWRfb3V0ID0gbWVnYXNhc19yZXNldF90aW1lciwKLQkuYmlvc19wYXJhbSA9IG1lZ2FzYXNfYmlvc19wYXJhbSwKLQkudXNlX2NsdXN0ZXJpbmcgPSBFTkFCTEVfQ0xVU1RFUklORywKLX07Ci0KLS8qKgotICogbWVnYXNhc19jb21wbGV0ZV9pbnRfY21kIC0JQ29tcGxldGVzIGFuIGludGVybmFsIGNvbW1hbmQKLSAqIEBpbnN0YW5jZToJCQlBZGFwdGVyIHNvZnQgc3RhdGUKLSAqIEBjbWQ6CQkJQ29tbWFuZCB0byBiZSBjb21wbGV0ZWQKLSAqCi0gKiBUaGUgbWVnYXNhc19pc3N1ZV9ibG9ja2VkX2NtZCgpIGZ1bmN0aW9uIHdhaXRzIGZvciBhIGNvbW1hbmQgdG8gY29tcGxldGUKLSAqIGFmdGVyIGl0IGlzc3VlcyBhIGNvbW1hbmQuIFRoaXMgZnVuY3Rpb24gd2FrZXMgdXAgdGhhdCB3YWl0aW5nIHJvdXRpbmUgYnkKLSAqIGNhbGxpbmcgd2FrZV91cCgpIG9uIHRoZSB3YWl0IHF1ZXVlLgotICovCi1zdGF0aWMgdm9pZAotbWVnYXNhc19jb21wbGV0ZV9pbnRfY21kKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSwKLQkJCSBzdHJ1Y3QgbWVnYXNhc19jbWQgKmNtZCkKLXsKLQljbWQtPmNtZF9zdGF0dXMgPSBjbWQtPmZyYW1lLT5pby5jbWRfc3RhdHVzOwotCi0JaWYgKGNtZC0+Y21kX3N0YXR1cyA9PSBFTk9EQVRBKSB7Ci0JCWNtZC0+Y21kX3N0YXR1cyA9IDA7Ci0JfQotCXdha2VfdXAoJmluc3RhbmNlLT5pbnRfY21kX3dhaXRfcSk7Ci19Ci0KLS8qKgotICogbWVnYXNhc19jb21wbGV0ZV9hYm9ydCAtCUNvbXBsZXRlcyBhYm9ydGluZyBhIGNvbW1hbmQKLSAqIEBpbnN0YW5jZToJCQlBZGFwdGVyIHNvZnQgc3RhdGUKLSAqIEBjbWQ6CQkJQ21kIHRoYXQgd2FzIGlzc3VlZCB0byBhYm9ydCBhbm90aGVyIGNtZAotICoKLSAqIFRoZSBtZWdhc2FzX2lzc3VlX2Jsb2NrZWRfYWJvcnRfY21kKCkgZnVuY3Rpb24gd2FpdHMgb24gYWJvcnRfY21kX3dhaXRfcSAKLSAqIGFmdGVyIGl0IGlzc3VlcyBhbiBhYm9ydCBvbiBhIHByZXZpb3VzbHkgaXNzdWVkIGNvbW1hbmQuIFRoaXMgZnVuY3Rpb24gCi0gKiB3YWtlcyB1cCBhbGwgZnVuY3Rpb25zIHdhaXRpbmcgb24gdGhlIHNhbWUgd2FpdCBxdWV1ZS4KLSAqLwotc3RhdGljIHZvaWQKLW1lZ2FzYXNfY29tcGxldGVfYWJvcnQoc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlLAotCQkgICAgICAgc3RydWN0IG1lZ2FzYXNfY21kICpjbWQpCi17Ci0JaWYgKGNtZC0+c3luY19jbWQpIHsKLQkJY21kLT5zeW5jX2NtZCA9IDA7Ci0JCWNtZC0+Y21kX3N0YXR1cyA9IDA7Ci0JCXdha2VfdXAoJmluc3RhbmNlLT5hYm9ydF9jbWRfd2FpdF9xKTsKLQl9Ci0KLQlyZXR1cm47Ci19Ci0KLS8qKgotICogbWVnYXNhc19jb21wbGV0ZV9jbWQgLQlDb21wbGV0ZXMgYSBjb21tYW5kCi0gKiBAaW5zdGFuY2U6CQkJQWRhcHRlciBzb2Z0IHN0YXRlCi0gKiBAY21kOgkJCUNvbW1hbmQgdG8gYmUgY29tcGxldGVkCi0gKiBAYWx0X3N0YXR1czoJCQlJZiBub24temVybywgdXNlIHRoaXMgdmFsdWUgYXMgc3RhdHVzIHRvIAotICogCQkJCVNDU0kgbWlkLWxheWVyIGluc3RlYWQgb2YgdGhlIHZhbHVlIHJldHVybmVkCi0gKiAJCQkJYnkgdGhlIEZXLiBUaGlzIHNob3VsZCBiZSB1c2VkIGlmIGNhbGxlciB3YW50cwotICogCQkJCWFuIGFsdGVybmF0ZSBzdGF0dXMgKGFzIGluIHRoZSBjYXNlIG9mIGFib3J0ZWQKLSAqIAkJCQljb21tYW5kcykKLSAqLwotc3RhdGljIHZvaWQKLW1lZ2FzYXNfY29tcGxldGVfY21kKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSwgc3RydWN0IG1lZ2FzYXNfY21kICpjbWQsCi0JCSAgICAgdTggYWx0X3N0YXR1cykKLXsKLQlpbnQgZXhjZXB0aW9uID0gMDsKLQlzdHJ1Y3QgbWVnYXNhc19oZWFkZXIgKmhkciA9ICZjbWQtPmZyYW1lLT5oZHI7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCS8qIGZsYWcgZm9yIHRoZSByZXRyeSByZXNldCAqLwotCWNtZC0+cmV0cnlfZm9yX2Z3X3Jlc2V0ID0gMDsKLQotCWlmIChjbWQtPnNjbWQpCi0JCWNtZC0+c2NtZC0+U0NwLnB0ciA9IE5VTEw7Ci0KLQlzd2l0Y2ggKGhkci0+Y21kKSB7Ci0KLQljYXNlIE1GSV9DTURfUERfU0NTSV9JTzoKLQljYXNlIE1GSV9DTURfTERfU0NTSV9JTzoKLQotCQkvKgotCQkgKiBNRklfQ01EX1BEX1NDU0lfSU8gYW5kIE1GSV9DTURfTERfU0NTSV9JTyBjb3VsZCBoYXZlIGJlZW4KLQkJICogaXNzdWVkIGVpdGhlciB0aHJvdWdoIGFuIElPIHBhdGggb3IgYW4gSU9DVEwgcGF0aC4gSWYgaXQKLQkJICogd2FzIHZpYSBJT0NUTCwgd2Ugd2lsbCBzZW5kIGl0IHRvIGludGVybmFsIGNvbXBsZXRpb24uCi0JCSAqLwotCQlpZiAoY21kLT5zeW5jX2NtZCkgewotCQkJY21kLT5zeW5jX2NtZCA9IDA7Ci0JCQltZWdhc2FzX2NvbXBsZXRlX2ludF9jbWQoaW5zdGFuY2UsIGNtZCk7Ci0JCQlicmVhazsKLQkJfQotCi0JY2FzZSBNRklfQ01EX0xEX1JFQUQ6Ci0JY2FzZSBNRklfQ01EX0xEX1dSSVRFOgotCi0JCWlmIChhbHRfc3RhdHVzKSB7Ci0JCQljbWQtPnNjbWQtPnJlc3VsdCA9IGFsdF9zdGF0dXMgPDwgMTY7Ci0JCQlleGNlcHRpb24gPSAxOwotCQl9Ci0KLQkJaWYgKGV4Y2VwdGlvbikgewotCi0JCQlhdG9taWNfZGVjKCZpbnN0YW5jZS0+Zndfb3V0c3RhbmRpbmcpOwotCi0JCQlzY3NpX2RtYV91bm1hcChjbWQtPnNjbWQpOwotCQkJY21kLT5zY21kLT5zY3NpX2RvbmUoY21kLT5zY21kKTsKLQkJCW1lZ2FzYXNfcmV0dXJuX2NtZChpbnN0YW5jZSwgY21kKTsKLQotCQkJYnJlYWs7Ci0JCX0KLQotCQlzd2l0Y2ggKGhkci0+Y21kX3N0YXR1cykgewotCi0JCWNhc2UgTUZJX1NUQVRfT0s6Ci0JCQljbWQtPnNjbWQtPnJlc3VsdCA9IERJRF9PSyA8PCAxNjsKLQkJCWJyZWFrOwotCi0JCWNhc2UgTUZJX1NUQVRfU0NTSV9JT19GQUlMRUQ6Ci0JCWNhc2UgTUZJX1NUQVRfTERfSU5JVF9JTl9QUk9HUkVTUzoKLQkJCWNtZC0+c2NtZC0+cmVzdWx0ID0KLQkJCSAgICAoRElEX0VSUk9SIDw8IDE2KSB8IGhkci0+c2NzaV9zdGF0dXM7Ci0JCQlicmVhazsKLQotCQljYXNlIE1GSV9TVEFUX1NDU0lfRE9ORV9XSVRIX0VSUk9SOgotCi0JCQljbWQtPnNjbWQtPnJlc3VsdCA9IChESURfT0sgPDwgMTYpIHwgaGRyLT5zY3NpX3N0YXR1czsKLQotCQkJaWYgKGhkci0+c2NzaV9zdGF0dXMgPT0gU0FNX1NUQVRfQ0hFQ0tfQ09ORElUSU9OKSB7Ci0JCQkJbWVtc2V0KGNtZC0+c2NtZC0+c2Vuc2VfYnVmZmVyLCAwLAotCQkJCSAgICAgICBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUpOwotCQkJCW1lbWNweShjbWQtPnNjbWQtPnNlbnNlX2J1ZmZlciwgY21kLT5zZW5zZSwKLQkJCQkgICAgICAgaGRyLT5zZW5zZV9sZW4pOwotCi0JCQkJY21kLT5zY21kLT5yZXN1bHQgfD0gRFJJVkVSX1NFTlNFIDw8IDI0OwotCQkJfQotCi0JCQlicmVhazsKLQotCQljYXNlIE1GSV9TVEFUX0xEX09GRkxJTkU6Ci0JCWNhc2UgTUZJX1NUQVRfREVWSUNFX05PVF9GT1VORDoKLQkJCWNtZC0+c2NtZC0+cmVzdWx0ID0gRElEX0JBRF9UQVJHRVQgPDwgMTY7Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJcHJpbnRrKEtFUk5fREVCVUcgIm1lZ2FzYXM6IE1GSSBGVyBzdGF0dXMgJSN4XG4iLAotCQkJICAgICAgIGhkci0+Y21kX3N0YXR1cyk7Ci0JCQljbWQtPnNjbWQtPnJlc3VsdCA9IERJRF9FUlJPUiA8PCAxNjsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJYXRvbWljX2RlYygmaW5zdGFuY2UtPmZ3X291dHN0YW5kaW5nKTsKLQotCQlzY3NpX2RtYV91bm1hcChjbWQtPnNjbWQpOwotCQljbWQtPnNjbWQtPnNjc2lfZG9uZShjbWQtPnNjbWQpOwotCQltZWdhc2FzX3JldHVybl9jbWQoaW5zdGFuY2UsIGNtZCk7Ci0KLQkJYnJlYWs7Ci0KLQljYXNlIE1GSV9DTURfU01QOgotCWNhc2UgTUZJX0NNRF9TVFA6Ci0JY2FzZSBNRklfQ01EX0RDTUQ6Ci0JCWlmIChjbWQtPmZyYW1lLT5kY21kLm9wY29kZSA9PSBNUl9EQ01EX0NUUkxfRVZFTlRfR0VUX0lORk8gfHwKLQkJCWNtZC0+ZnJhbWUtPmRjbWQub3Bjb2RlID09IE1SX0RDTURfQ1RSTF9FVkVOVF9HRVQpIHsKLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZwb2xsX2Flbl9sb2NrLCBmbGFncyk7Ci0JCQltZWdhc2FzX3BvbGxfd2FpdF9hZW4gPSAwOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9sbF9hZW5fbG9jaywgZmxhZ3MpOwotCQl9Ci0KLQkJLyoKLQkJICogU2VlIGlmIGdvdCBhbiBldmVudCBub3RpZmljYXRpb24KLQkJICovCi0JCWlmIChjbWQtPmZyYW1lLT5kY21kLm9wY29kZSA9PSBNUl9EQ01EX0NUUkxfRVZFTlRfV0FJVCkKLQkJCW1lZ2FzYXNfc2VydmljZV9hZW4oaW5zdGFuY2UsIGNtZCk7Ci0JCWVsc2UKLQkJCW1lZ2FzYXNfY29tcGxldGVfaW50X2NtZChpbnN0YW5jZSwgY21kKTsKLQotCQlicmVhazsKLQotCWNhc2UgTUZJX0NNRF9BQk9SVDoKLQkJLyoKLQkJICogQ21kIGlzc3VlZCB0byBhYm9ydCBhbm90aGVyIGNtZCByZXR1cm5lZAotCQkgKi8KLQkJbWVnYXNhc19jb21wbGV0ZV9hYm9ydChpbnN0YW5jZSwgY21kKTsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlwcmludGsoIm1lZ2FzYXM6IFVua25vd24gY29tbWFuZCBjb21wbGV0ZWQhIFsweCVYXVxuIiwKLQkJICAgICAgIGhkci0+Y21kKTsKLQkJYnJlYWs7Ci0JfQotfQotCi0vKioKLSAqIG1lZ2FzYXNfaXNzdWVfcGVuZGluZ19jbWRzX2FnYWluIC0JaXNzdWUgYWxsIHBlbmRpbmcgY21kcwotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJaW4gRlcgYWdhaW4gYmVjYXVzZSBvZiB0aGUgZncgcmVzZXQKLSAqIEBpbnN0YW5jZToJCQkJQWRhcHRlciBzb2Z0IHN0YXRlCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAotbWVnYXNhc19pc3N1ZV9wZW5kaW5nX2NtZHNfYWdhaW4oc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlKQotewotCXN0cnVjdCBtZWdhc2FzX2NtZCAqY21kOwotCXN0cnVjdCBsaXN0X2hlYWQgY2xpc3RfbG9jYWw7Ci0JdW5pb24gbWVnYXNhc19ldnRfY2xhc3NfbG9jYWxlIGNsYXNzX2xvY2FsZTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXUzMiBzZXFfbnVtOwotCi0JSU5JVF9MSVNUX0hFQUQoJmNsaXN0X2xvY2FsKTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW5zdGFuY2UtPmhiYV9sb2NrLCBmbGFncyk7Ci0JbGlzdF9zcGxpY2VfaW5pdCgmaW5zdGFuY2UtPmludGVybmFsX3Jlc2V0X3BlbmRpbmdfcSwgJmNsaXN0X2xvY2FsKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbnN0YW5jZS0+aGJhX2xvY2ssIGZsYWdzKTsKLQotCXdoaWxlICghbGlzdF9lbXB0eSgmY2xpc3RfbG9jYWwpKSB7Ci0JCWNtZAk9IGxpc3RfZW50cnkoKCZjbGlzdF9sb2NhbCktPm5leHQsCi0JCQkJCXN0cnVjdCBtZWdhc2FzX2NtZCwgbGlzdCk7Ci0JCWxpc3RfZGVsX2luaXQoJmNtZC0+bGlzdCk7Ci0KLQkJaWYgKGNtZC0+c3luY19jbWQgfHwgY21kLT5zY21kKSB7Ci0JCQlwcmludGsoS0VSTl9OT1RJQ0UgIm1lZ2FyYWlkX3NhczogY29tbWFuZCAlcCwgJXA6JWQiCi0JCQkJImRldGVjdGVkIHRvIGJlIHBlbmRpbmcgd2hpbGUgSEJBIHJlc2V0LlxuIiwKLQkJCQkJY21kLCBjbWQtPnNjbWQsIGNtZC0+c3luY19jbWQpOwotCi0JCQljbWQtPnJldHJ5X2Zvcl9md19yZXNldCsrOwotCi0JCQlpZiAoY21kLT5yZXRyeV9mb3JfZndfcmVzZXQgPT0gMykgewotCQkJCXByaW50ayhLRVJOX05PVElDRSAibWVnYXJhaWRfc2FzOiBjbWQgJXAsICVwOiVkIgotCQkJCQkid2FzIHRyaWVkIG11bHRpcGxlIHRpbWVzIGR1cmluZyByZXNldC4iCi0JCQkJCSJTaHV0dGluZyBkb3duIHRoZSBIQkFcbiIsCi0JCQkJCWNtZCwgY21kLT5zY21kLCBjbWQtPnN5bmNfY21kKTsKLQkJCQltZWdhcmFpZF9zYXNfa2lsbF9oYmEoaW5zdGFuY2UpOwotCi0JCQkJaW5zdGFuY2UtPmFkcHJlY292ZXJ5ID0KLQkJCQkJCU1FR0FTQVNfSFdfQ1JJVElDQUxfRVJST1I7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQl9Ci0KLQkJaWYgKGNtZC0+c3luY19jbWQgPT0gMSkgewotCQkJaWYgKGNtZC0+c2NtZCkgewotCQkJCXByaW50ayhLRVJOX05PVElDRSAibWVnYXJhaWRfc2FzOiB1bmV4cGVjdGVkIgotCQkJCQkiY21kIGF0dGFjaGVkIHRvIGludGVybmFsIGNvbW1hbmQhXG4iKTsKLQkJCX0KLQkJCXByaW50ayhLRVJOX05PVElDRSAibWVnYXNhczogJXAgc3luY2hyb25vdXMgY21kIgotCQkJCQkJIm9uIHRoZSBpbnRlcm5hbCByZXNldCBxdWV1ZSwiCi0JCQkJCQkiaXNzdWUgaXQgYWdhaW4uXG4iLCBjbWQpOwotCQkJY21kLT5jbWRfc3RhdHVzID0gRU5PREFUQTsKLQkJCWluc3RhbmNlLT5pbnN0YW5jZXQtPmZpcmVfY21kKGluc3RhbmNlLAotCQkJCQkJCWNtZC0+ZnJhbWVfcGh5c19hZGRyICwKLQkJCQkJCQkwLCBpbnN0YW5jZS0+cmVnX3NldCk7Ci0JCX0gZWxzZSBpZiAoY21kLT5zY21kKSB7Ci0JCQlwcmludGsoS0VSTl9OT1RJQ0UgIm1lZ2FzYXM6ICVwIHNjc2kgY21kIFslMDJ4XSwlI2x4IgotCQkJImRldGVjdGVkIG9uIHRoZSBpbnRlcm5hbCBxdWV1ZSwgaXNzdWUgYWdhaW4uXG4iLAotCQkJY21kLCBjbWQtPnNjbWQtPmNtbmRbMF0sIGNtZC0+c2NtZC0+c2VyaWFsX251bWJlcik7Ci0KLQkJCWF0b21pY19pbmMoJmluc3RhbmNlLT5md19vdXRzdGFuZGluZyk7Ci0JCQlpbnN0YW5jZS0+aW5zdGFuY2V0LT5maXJlX2NtZChpbnN0YW5jZSwKLQkJCQkJY21kLT5mcmFtZV9waHlzX2FkZHIsCi0JCQkJCWNtZC0+ZnJhbWVfY291bnQtMSwgaW5zdGFuY2UtPnJlZ19zZXQpOwotCQl9IGVsc2UgewotCQkJcHJpbnRrKEtFUk5fTk9USUNFICJtZWdhc2FzOiAlcCB1bmV4cGVjdGVkIGNtZCBvbiB0aGUiCi0JCQkJImludGVybmFsIHJlc2V0IGRlZmVyIGxpc3Qgd2hpbGUgcmUtaXNzdWUhIVxuIiwKLQkJCQljbWQpOwotCQl9Ci0JfQotCi0JaWYgKGluc3RhbmNlLT5hZW5fY21kKSB7Ci0JCXByaW50ayhLRVJOX05PVElDRSAibWVnYXJhaWRfc2FzOiBhZW5fY21kIGluIGRlZiBwcm9jZXNzXG4iKTsKLQkJbWVnYXNhc19yZXR1cm5fY21kKGluc3RhbmNlLCBpbnN0YW5jZS0+YWVuX2NtZCk7Ci0KLQkJaW5zdGFuY2UtPmFlbl9jbWQJPSBOVUxMOwotCX0KLQotCS8qCi0JKiBJbml0aWF0ZSBBRU4gKEFzeW5jaHJvbm91cyBFdmVudCBOb3RpZmljYXRpb24pCi0JKi8KLQlzZXFfbnVtID0gaW5zdGFuY2UtPmxhc3Rfc2VxX251bTsKLQljbGFzc19sb2NhbGUubWVtYmVycy5yZXNlcnZlZCA9IDA7Ci0JY2xhc3NfbG9jYWxlLm1lbWJlcnMubG9jYWxlID0gTVJfRVZUX0xPQ0FMRV9BTEw7Ci0JY2xhc3NfbG9jYWxlLm1lbWJlcnMuY2xhc3MgPSBNUl9FVlRfQ0xBU1NfREVCVUc7Ci0KLQltZWdhc2FzX3JlZ2lzdGVyX2FlbihpbnN0YW5jZSwgc2VxX251bSwgY2xhc3NfbG9jYWxlLndvcmQpOwotfQotCi0vKioKLSAqIE1vdmUgdGhlIGludGVybmFsIHJlc2V0IHBlbmRpbmcgY29tbWFuZHMgdG8gYSBkZWZlcnJlZCBxdWV1ZS4KLSAqCi0gKiBXZSBtb3ZlIHRoZSBjb21tYW5kcyBwZW5kaW5nIGF0IGludGVybmFsIHJlc2V0IHRpbWUgdG8gYQotICogcGVuZGluZyBxdWV1ZS4gVGhpcyBxdWV1ZSB3b3VsZCBiZSBmbHVzaGVkIGFmdGVyIHN1Y2Nlc3NmdWwKLSAqIGNvbXBsZXRpb24gb2YgdGhlIGludGVybmFsIHJlc2V0IHNlcXVlbmNlLiBpZiB0aGUgaW50ZXJuYWwgcmVzZXQKLSAqIGRpZCBub3QgY29tcGxldGUgaW4gdGltZSwgdGhlIGtlcm5lbCByZXNldCBoYW5kbGVyIHdvdWxkIGZsdXNoCi0gKiB0aGVzZSBjb21tYW5kcy4KLSAqKi8KLXN0YXRpYyB2b2lkCi1tZWdhc2FzX2ludGVybmFsX3Jlc2V0X2RlZmVyX2NtZHMoc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlKQotewotCXN0cnVjdCBtZWdhc2FzX2NtZCAqY21kOwotCWludCBpOwotCXUzMiBtYXhfY21kID0gaW5zdGFuY2UtPm1heF9md19jbWRzOwotCXUzMiBkZWZlcl9pbmRleDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JZGVmZXJfaW5kZXggICAgID0gMDsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW5zdGFuY2UtPmNtZF9wb29sX2xvY2ssIGZsYWdzKTsKLQlmb3IgKGkgPSAwOyBpIDwgbWF4X2NtZDsgaSsrKSB7Ci0JCWNtZCA9IGluc3RhbmNlLT5jbWRfbGlzdFtpXTsKLQkJaWYgKGNtZC0+c3luY19jbWQgPT0gMSB8fCBjbWQtPnNjbWQpIHsKLQkJCXByaW50ayhLRVJOX05PVElDRSAibWVnYXNhczogbW92aW5nIGNtZFslZF06JXA6JWQ6JXAiCi0JCQkJCSJvbiB0aGUgZGVmZXIgcXVldWUgYXMgaW50ZXJuYWxcbiIsCi0JCQkJZGVmZXJfaW5kZXgsIGNtZCwgY21kLT5zeW5jX2NtZCwgY21kLT5zY21kKTsKLQotCQkJaWYgKCFsaXN0X2VtcHR5KCZjbWQtPmxpc3QpKSB7Ci0JCQkJcHJpbnRrKEtFUk5fTk9USUNFICJtZWdhcmFpZF9zYXM6IEVSUk9SIHdoaWxlIgotCQkJCQkiIG1vdmluZyB0aGlzIGNtZDolcCwgJWQgJXAsIGl0IHdhcyIKLQkJCQkJImRpc2NvdmVyZWQgb24gc29tZSBsaXN0P1xuIiwKLQkJCQkJY21kLCBjbWQtPnN5bmNfY21kLCBjbWQtPnNjbWQpOwotCi0JCQkJbGlzdF9kZWxfaW5pdCgmY21kLT5saXN0KTsKLQkJCX0KLQkJCWRlZmVyX2luZGV4Kys7Ci0JCQlsaXN0X2FkZF90YWlsKCZjbWQtPmxpc3QsCi0JCQkJJmluc3RhbmNlLT5pbnRlcm5hbF9yZXNldF9wZW5kaW5nX3EpOwotCQl9Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluc3RhbmNlLT5jbWRfcG9vbF9sb2NrLCBmbGFncyk7Ci19Ci0KLQotc3RhdGljIHZvaWQKLXByb2Nlc3NfZndfc3RhdGVfY2hhbmdlX3dxKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UgPQotCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UsIHdvcmtfaW5pdCk7Ci0JdTMyIHdhaXQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChpbnN0YW5jZS0+YWRwcmVjb3ZlcnkgIT0gTUVHQVNBU19BRFBSRVNFVF9TTV9JTkZBVUxUKSB7Ci0JCXByaW50ayhLRVJOX05PVElDRSAibWVnYXJhaWRfc2FzOiBlcnJvciwgcmVjb3Zlcnkgc3QgJXggXG4iLAotCQkJCWluc3RhbmNlLT5hZHByZWNvdmVyeSk7Ci0JCXJldHVybiA7Ci0JfQotCi0JaWYgKGluc3RhbmNlLT5hZHByZWNvdmVyeSA9PSBNRUdBU0FTX0FEUFJFU0VUX1NNX0lORkFVTFQpIHsKLQkJcHJpbnRrKEtFUk5fTk9USUNFICJtZWdhcmFpZF9zYXM6IEZXIGRldGVjdGVkIHRvIGJlIGluIGZhdWx0IgotCQkJCQkic3RhdGUsIHJlc3RhcnRpbmcgaXQuLi5cbiIpOwotCi0JCWluc3RhbmNlLT5pbnN0YW5jZXQtPmRpc2FibGVfaW50cihpbnN0YW5jZS0+cmVnX3NldCk7Ci0JCWF0b21pY19zZXQoJmluc3RhbmNlLT5md19vdXRzdGFuZGluZywgMCk7Ci0KLQkJYXRvbWljX3NldCgmaW5zdGFuY2UtPmZ3X3Jlc2V0X25vX3BjaV9hY2Nlc3MsIDEpOwotCQlpbnN0YW5jZS0+aW5zdGFuY2V0LT5hZHBfcmVzZXQoaW5zdGFuY2UsIGluc3RhbmNlLT5yZWdfc2V0KTsKLQkJYXRvbWljX3NldCgmaW5zdGFuY2UtPmZ3X3Jlc2V0X25vX3BjaV9hY2Nlc3MsIDAgKTsKLQotCQlwcmludGsoS0VSTl9OT1RJQ0UgIm1lZ2FyYWlkX3NhczogRlcgcmVzdGFydGVkIHN1Y2Nlc3NmdWxseSwiCi0JCQkJCSJpbml0aWF0aW5nIG5leHQgc3RhZ2UuLi5cbiIpOwotCi0JCXByaW50ayhLRVJOX05PVElDRSAibWVnYXJhaWRfc2FzOiBIQkEgcmVjb3Zlcnkgc3RhdGUgbWFjaGluZSwiCi0JCQkJCSJzdGF0ZSAyIHN0YXJ0aW5nLi4uXG4iKTsKLQotCQkvKndhaXR0aW5nIGZvciBhYm91dCAyMCBzZWNvbmQgYmVmb3JlIHN0YXJ0IHRoZSBzZWNvbmQgaW5pdCovCi0JCWZvciAod2FpdCA9IDA7IHdhaXQgPCAzMDsgd2FpdCsrKSB7Ci0JCQltc2xlZXAoMTAwMCk7Ci0JCX0KLQotCQlpZiAobWVnYXNhc190cmFuc2l0aW9uX3RvX3JlYWR5KGluc3RhbmNlKSkgewotCQkJcHJpbnRrKEtFUk5fTk9USUNFICJtZWdhcmFpZF9zYXM6YWRhcHRlciBub3QgcmVhZHlcbiIpOwotCi0JCQltZWdhcmFpZF9zYXNfa2lsbF9oYmEoaW5zdGFuY2UpOwotCQkJaW5zdGFuY2UtPmFkcHJlY292ZXJ5CT0gTUVHQVNBU19IV19DUklUSUNBTF9FUlJPUjsKLQkJCXJldHVybiA7Ci0JCX0KLQotCQlpZiAoKGluc3RhbmNlLT5wZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9MU0lfU0FTMTA2NFIpIHx8Ci0JCQkoaW5zdGFuY2UtPnBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0RFTExfUEVSQzUpIHx8Ci0JCQkoaW5zdGFuY2UtPnBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0xTSV9WRVJERV9aQ1IpCi0JCQkpIHsKLQkJCSppbnN0YW5jZS0+Y29uc3VtZXIgPSAqaW5zdGFuY2UtPnByb2R1Y2VyOwotCQl9IGVsc2UgewotCQkJKmluc3RhbmNlLT5jb25zdW1lciA9IDA7Ci0JCQkqaW5zdGFuY2UtPnByb2R1Y2VyID0gMDsKLQkJfQotCi0JCW1lZ2FzYXNfaXNzdWVfaW5pdF9tZmkoaW5zdGFuY2UpOwotCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZpbnN0YW5jZS0+aGJhX2xvY2ssIGZsYWdzKTsKLQkJaW5zdGFuY2UtPmFkcHJlY292ZXJ5CT0gTUVHQVNBU19IQkFfT1BFUkFUSU9OQUw7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluc3RhbmNlLT5oYmFfbG9jaywgZmxhZ3MpOwotCQlpbnN0YW5jZS0+aW5zdGFuY2V0LT5lbmFibGVfaW50cihpbnN0YW5jZS0+cmVnX3NldCk7Ci0KLQkJbWVnYXNhc19pc3N1ZV9wZW5kaW5nX2NtZHNfYWdhaW4oaW5zdGFuY2UpOwotCQlpbnN0YW5jZS0+aXNzdWVwZW5kX2RvbmUgPSAxOwotCX0KLQlyZXR1cm4gOwotfQotCi0vKioKLSAqIG1lZ2FzYXNfZGVwbGV0ZV9yZXBseV9xdWV1ZSAtCVByb2Nlc3NlcyBhbGwgY29tcGxldGVkIGNvbW1hbmRzCi0gKiBAaW5zdGFuY2U6CQkJCUFkYXB0ZXIgc29mdCBzdGF0ZQotICogQGFsdF9zdGF0dXM6CQkJCUFsdGVybmF0ZSBzdGF0dXMgdG8gYmUgcmV0dXJuZWQgdG8KLSAqIAkJCQkJU0NTSSBtaWQtbGF5ZXIgaW5zdGVhZCBvZiB0aGUgc3RhdHVzCi0gKiAJCQkJCXJldHVybmVkIGJ5IHRoZSBGVwotICogTm90ZTogdGhpcyBtdXN0IGJlIGNhbGxlZCB3aXRoIGhiYSBsb2NrIGhlbGQKLSAqLwotc3RhdGljIGludAotbWVnYXNhc19kZXBsZXRlX3JlcGx5X3F1ZXVlKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSwKLQkJCQkJdTggYWx0X3N0YXR1cykKLXsKLQl1MzIgbWZpU3RhdHVzOwotCXUzMiBmd19zdGF0ZTsKLQotCWlmICgobWZpU3RhdHVzID0gaW5zdGFuY2UtPmluc3RhbmNldC0+Y2hlY2tfcmVzZXQoaW5zdGFuY2UsCi0JCQkJCWluc3RhbmNlLT5yZWdfc2V0KSkgPT0gMSkgewotCQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci0JfQotCi0JaWYgKChtZmlTdGF0dXMgPSBpbnN0YW5jZS0+aW5zdGFuY2V0LT5jbGVhcl9pbnRyKAotCQkJCQkJaW5zdGFuY2UtPnJlZ19zZXQpCi0JCQkJCQkpID09IDApIHsKLQkJcmV0dXJuIElSUV9OT05FOwotCX0KLQotCWluc3RhbmNlLT5tZmlTdGF0dXMgPSBtZmlTdGF0dXM7Ci0KLQlpZiAoKG1maVN0YXR1cyAmIE1GSV9JTlRSX0ZMQUdfRklSTVdBUkVfU1RBVEVfQ0hBTkdFKSkgewotCQlmd19zdGF0ZSA9IGluc3RhbmNlLT5pbnN0YW5jZXQtPnJlYWRfZndfc3RhdHVzX3JlZygKLQkJCQlpbnN0YW5jZS0+cmVnX3NldCkgJiBNRklfU1RBVEVfTUFTSzsKLQotCQlpZiAoZndfc3RhdGUgIT0gTUZJX1NUQVRFX0ZBVUxUKSB7Ci0JCQlwcmludGsoS0VSTl9OT1RJQ0UgIm1lZ2FyYWlkX3NhczogZncgc3RhdGU6JXhcbiIsCi0JCQkJCQlmd19zdGF0ZSk7Ci0JCX0KLQotCQlpZiAoKGZ3X3N0YXRlID09IE1GSV9TVEFURV9GQVVMVCkgJiYKLQkJCQkoaW5zdGFuY2UtPmRpc2FibGVPbmxpbmVDdHJsUmVzZXQgPT0gMCkpIHsKLQkJCXByaW50ayhLRVJOX05PVElDRSAibWVnYXJhaWRfc2FzOiB3YWl0IGFkcCByZXN0YXJ0XG4iKTsKLQotCQkJaWYgKChpbnN0YW5jZS0+cGRldi0+ZGV2aWNlID09Ci0JCQkJCVBDSV9ERVZJQ0VfSURfTFNJX1NBUzEwNjRSKSB8fAotCQkJCShpbnN0YW5jZS0+cGRldi0+ZGV2aWNlID09Ci0JCQkJCVBDSV9ERVZJQ0VfSURfREVMTF9QRVJDNSkgfHwKLQkJCQkoaW5zdGFuY2UtPnBkZXYtPmRldmljZSA9PQotCQkJCQlQQ0lfREVWSUNFX0lEX0xTSV9WRVJERV9aQ1IpKSB7Ci0KLQkJCQkqaW5zdGFuY2UtPmNvbnN1bWVyID0KLQkJCQkJTUVHQVNBU19BRFBSRVNFVF9JTlBST0dfU0lHTjsKLQkJCX0KLQotCi0JCQlpbnN0YW5jZS0+aW5zdGFuY2V0LT5kaXNhYmxlX2ludHIoaW5zdGFuY2UtPnJlZ19zZXQpOwotCQkJaW5zdGFuY2UtPmFkcHJlY292ZXJ5CT0gTUVHQVNBU19BRFBSRVNFVF9TTV9JTkZBVUxUOwotCQkJaW5zdGFuY2UtPmlzc3VlcGVuZF9kb25lID0gMDsKLQotCQkJYXRvbWljX3NldCgmaW5zdGFuY2UtPmZ3X291dHN0YW5kaW5nLCAwKTsKLQkJCW1lZ2FzYXNfaW50ZXJuYWxfcmVzZXRfZGVmZXJfY21kcyhpbnN0YW5jZSk7Ci0KLQkJCXByaW50ayhLRVJOX05PVElDRSAibWVnYXNhczogZndTdGF0ZT0leCwgc3RhZ2U6JWRcbiIsCi0JCQkJCWZ3X3N0YXRlLCBpbnN0YW5jZS0+YWRwcmVjb3ZlcnkpOwotCi0JCQlzY2hlZHVsZV93b3JrKCZpbnN0YW5jZS0+d29ya19pbml0KTsKLQkJCXJldHVybiBJUlFfSEFORExFRDsKLQotCQl9IGVsc2UgewotCQkJcHJpbnRrKEtFUk5fTk9USUNFICJtZWdhc2FzOiBmd3N0YXRlOiV4LCBkaXNfT0NSPSV4XG4iLAotCQkJCWZ3X3N0YXRlLCBpbnN0YW5jZS0+ZGlzYWJsZU9ubGluZUN0cmxSZXNldCk7Ci0JCX0KLQl9Ci0KLQl0YXNrbGV0X3NjaGVkdWxlKCZpbnN0YW5jZS0+aXNyX3Rhc2tsZXQpOwotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLS8qKgotICogbWVnYXNhc19pc3IgLSBpc3IgZW50cnkgcG9pbnQKLSAqLwotc3RhdGljIGlycXJldHVybl90IG1lZ2FzYXNfaXNyKGludCBpcnEsIHZvaWQgKmRldnApCi17Ci0Jc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaXJxcmV0dXJuX3QJcmM7Ci0KLQlpZiAoYXRvbWljX3JlYWQoCi0JCSYoKChzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqKWRldnApLT5md19yZXNldF9ub19wY2lfYWNjZXNzKSkpCi0JCXJldHVybiBJUlFfSEFORExFRDsKLQotCWluc3RhbmNlID0gKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICopZGV2cDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZpbnN0YW5jZS0+aGJhX2xvY2ssIGZsYWdzKTsKLQlyYyA9ICBtZWdhc2FzX2RlcGxldGVfcmVwbHlfcXVldWUoaW5zdGFuY2UsIERJRF9PSyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5zdGFuY2UtPmhiYV9sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLS8qKgotICogbWVnYXNhc190cmFuc2l0aW9uX3RvX3JlYWR5IC0JTW92ZSB0aGUgRlcgdG8gUkVBRFkgc3RhdGUKLSAqIEBpbnN0YW5jZToJCQkJQWRhcHRlciBzb2Z0IHN0YXRlCi0gKgotICogRHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbiwgRlcgcGFzc2VzIGNhbiBwb3RlbnRpYWxseSBiZSBpbiBhbnkgb25lIG9mCi0gKiBzZXZlcmFsIHBvc3NpYmxlIHN0YXRlcy4gSWYgdGhlIEZXIGluIG9wZXJhdGlvbmFsLCB3YWl0aW5nLWZvci1oYW5kc2hha2UKLSAqIHN0YXRlcywgZHJpdmVyIG11c3QgdGFrZSBzdGVwcyB0byBicmluZyBpdCB0byByZWFkeSBzdGF0ZS4gT3RoZXJ3aXNlLCBpdAotICogaGFzIHRvIHdhaXQgZm9yIHRoZSByZWFkeSBzdGF0ZS4KLSAqLwotc3RhdGljIGludAotbWVnYXNhc190cmFuc2l0aW9uX3RvX3JlYWR5KHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlKiBpbnN0YW5jZSkKLXsKLQlpbnQgaTsKLQl1OCBtYXhfd2FpdDsKLQl1MzIgZndfc3RhdGU7Ci0JdTMyIGN1cl9zdGF0ZTsKLQl1MzIgYWJzX3N0YXRlLCBjdXJyX2Fic19zdGF0ZTsKLQotCWZ3X3N0YXRlID0gaW5zdGFuY2UtPmluc3RhbmNldC0+cmVhZF9md19zdGF0dXNfcmVnKGluc3RhbmNlLT5yZWdfc2V0KSAmIE1GSV9TVEFURV9NQVNLOwotCi0JaWYgKGZ3X3N0YXRlICE9IE1GSV9TVEFURV9SRUFEWSkKLSAJCXByaW50ayhLRVJOX0lORk8gIm1lZ2FzYXM6IFdhaXRpbmcgZm9yIEZXIHRvIGNvbWUgdG8gcmVhZHkiCi0gCQkgICAgICAgIiBzdGF0ZVxuIik7Ci0KLQl3aGlsZSAoZndfc3RhdGUgIT0gTUZJX1NUQVRFX1JFQURZKSB7Ci0KLQkJYWJzX3N0YXRlID0KLQkJaW5zdGFuY2UtPmluc3RhbmNldC0+cmVhZF9md19zdGF0dXNfcmVnKGluc3RhbmNlLT5yZWdfc2V0KTsKLQotCQlzd2l0Y2ggKGZ3X3N0YXRlKSB7Ci0KLQkJY2FzZSBNRklfU1RBVEVfRkFVTFQ6Ci0KLQkJCXByaW50ayhLRVJOX0RFQlVHICJtZWdhc2FzOiBGVyBpbiBGQVVMVCBzdGF0ZSEhXG4iKTsKLQkJCXJldHVybiAtRU5PREVWOwotCi0JCWNhc2UgTUZJX1NUQVRFX1dBSVRfSEFORFNIQUtFOgotCQkJLyoKLQkJCSAqIFNldCB0aGUgQ0xSIGJpdCBpbiBpbmJvdW5kIGRvb3JiZWxsCi0JCQkgKi8KLQkJCWlmICgoaW5zdGFuY2UtPnBkZXYtPmRldmljZSA9PQotCQkJCVBDSV9ERVZJQ0VfSURfTFNJX1NBUzAwNzNTS0lOTlkpIHx8Ci0JCQkJKGluc3RhbmNlLT5wZGV2LT5kZXZpY2UgPT0KLQkJCQlQQ0lfREVWSUNFX0lEX0xTSV9TQVMwMDcxU0tJTk5ZKSkgewotCi0JCQkJd3JpdGVsKAotCQkJCSAgTUZJX0lOSVRfQ0xFQVJfSEFORFNIQUtFfE1GSV9JTklUX0hPVFBMVUcsCi0JCQkJICAmaW5zdGFuY2UtPnJlZ19zZXQtPnJlc2VydmVkXzBbMF0pOwotCQkJfSBlbHNlIHsKLQkJCQl3cml0ZWwoCi0JCQkJICAgIE1GSV9JTklUX0NMRUFSX0hBTkRTSEFLRXxNRklfSU5JVF9IT1RQTFVHLAotCQkJCQkmaW5zdGFuY2UtPnJlZ19zZXQtPmluYm91bmRfZG9vcmJlbGwpOwotCQkJfQotCi0JCQltYXhfd2FpdCA9IE1FR0FTQVNfUkVTRVRfV0FJVF9USU1FOwotCQkJY3VyX3N0YXRlID0gTUZJX1NUQVRFX1dBSVRfSEFORFNIQUtFOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBNRklfU1RBVEVfQk9PVF9NRVNTQUdFX1BFTkRJTkc6Ci0JCQlpZiAoKGluc3RhbmNlLT5wZGV2LT5kZXZpY2UgPT0KLQkJCQlQQ0lfREVWSUNFX0lEX0xTSV9TQVMwMDczU0tJTk5ZKSB8fAotCQkJKGluc3RhbmNlLT5wZGV2LT5kZXZpY2UgPT0KLQkJCQlQQ0lfREVWSUNFX0lEX0xTSV9TQVMwMDcxU0tJTk5ZKSkgewotCQkJCXdyaXRlbChNRklfSU5JVF9IT1RQTFVHLAotCQkJCSZpbnN0YW5jZS0+cmVnX3NldC0+cmVzZXJ2ZWRfMFswXSk7Ci0JCQl9IGVsc2UKLQkJCQl3cml0ZWwoTUZJX0lOSVRfSE9UUExVRywKLQkJCQkJJmluc3RhbmNlLT5yZWdfc2V0LT5pbmJvdW5kX2Rvb3JiZWxsKTsKLQotCQkJbWF4X3dhaXQgPSBNRUdBU0FTX1JFU0VUX1dBSVRfVElNRTsKLQkJCWN1cl9zdGF0ZSA9IE1GSV9TVEFURV9CT09UX01FU1NBR0VfUEVORElORzsKLQkJCWJyZWFrOwotCi0JCWNhc2UgTUZJX1NUQVRFX09QRVJBVElPTkFMOgotCQkJLyoKLQkJCSAqIEJyaW5nIGl0IHRvIFJFQURZIHN0YXRlOyBhc3N1bWluZyBtYXggd2FpdCAxMCBzZWNzCi0JCQkgKi8KLQkJCWluc3RhbmNlLT5pbnN0YW5jZXQtPmRpc2FibGVfaW50cihpbnN0YW5jZS0+cmVnX3NldCk7Ci0JCQlpZiAoKGluc3RhbmNlLT5wZGV2LT5kZXZpY2UgPT0KLQkJCQlQQ0lfREVWSUNFX0lEX0xTSV9TQVMwMDczU0tJTk5ZKSB8fAotCQkJCShpbnN0YW5jZS0+cGRldi0+ZGV2aWNlID09Ci0JCQkJUENJX0RFVklDRV9JRF9MU0lfU0FTMDA3MVNLSU5OWSkpIHsKLQkJCQl3cml0ZWwoTUZJX1JFU0VUX0ZMQUdTLAotCQkJCQkmaW5zdGFuY2UtPnJlZ19zZXQtPnJlc2VydmVkXzBbMF0pOwotCQkJfSBlbHNlCi0JCQkJd3JpdGVsKE1GSV9SRVNFVF9GTEFHUywKLQkJCQkJJmluc3RhbmNlLT5yZWdfc2V0LT5pbmJvdW5kX2Rvb3JiZWxsKTsKLQotCQkJbWF4X3dhaXQgPSBNRUdBU0FTX1JFU0VUX1dBSVRfVElNRTsKLQkJCWN1cl9zdGF0ZSA9IE1GSV9TVEFURV9PUEVSQVRJT05BTDsKLQkJCWJyZWFrOwotCi0JCWNhc2UgTUZJX1NUQVRFX1VOREVGSU5FRDoKLQkJCS8qCi0JCQkgKiBUaGlzIHN0YXRlIHNob3VsZCBub3QgbGFzdCBmb3IgbW9yZSB0aGFuIDIgc2Vjb25kcwotCQkJICovCi0JCQltYXhfd2FpdCA9IE1FR0FTQVNfUkVTRVRfV0FJVF9USU1FOwotCQkJY3VyX3N0YXRlID0gTUZJX1NUQVRFX1VOREVGSU5FRDsKLQkJCWJyZWFrOwotCi0JCWNhc2UgTUZJX1NUQVRFX0JCX0lOSVQ6Ci0JCQltYXhfd2FpdCA9IE1FR0FTQVNfUkVTRVRfV0FJVF9USU1FOwotCQkJY3VyX3N0YXRlID0gTUZJX1NUQVRFX0JCX0lOSVQ7Ci0JCQlicmVhazsKLQotCQljYXNlIE1GSV9TVEFURV9GV19JTklUOgotCQkJbWF4X3dhaXQgPSBNRUdBU0FTX1JFU0VUX1dBSVRfVElNRTsKLQkJCWN1cl9zdGF0ZSA9IE1GSV9TVEFURV9GV19JTklUOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBNRklfU1RBVEVfRldfSU5JVF8yOgotCQkJbWF4X3dhaXQgPSBNRUdBU0FTX1JFU0VUX1dBSVRfVElNRTsKLQkJCWN1cl9zdGF0ZSA9IE1GSV9TVEFURV9GV19JTklUXzI7Ci0JCQlicmVhazsKLQotCQljYXNlIE1GSV9TVEFURV9ERVZJQ0VfU0NBTjoKLQkJCW1heF93YWl0ID0gTUVHQVNBU19SRVNFVF9XQUlUX1RJTUU7Ci0JCQljdXJfc3RhdGUgPSBNRklfU1RBVEVfREVWSUNFX1NDQU47Ci0JCQlicmVhazsKLQotCQljYXNlIE1GSV9TVEFURV9GTFVTSF9DQUNIRToKLQkJCW1heF93YWl0ID0gTUVHQVNBU19SRVNFVF9XQUlUX1RJTUU7Ci0JCQljdXJfc3RhdGUgPSBNRklfU1RBVEVfRkxVU0hfQ0FDSEU7Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJcHJpbnRrKEtFUk5fREVCVUcgIm1lZ2FzYXM6IFVua25vd24gc3RhdGUgMHgleFxuIiwKLQkJCSAgICAgICBmd19zdGF0ZSk7Ci0JCQlyZXR1cm4gLUVOT0RFVjsKLQkJfQotCi0JCS8qCi0JCSAqIFRoZSBjdXJfc3RhdGUgc2hvdWxkIG5vdCBsYXN0IGZvciBtb3JlIHRoYW4gbWF4X3dhaXQgc2VjcwotCQkgKi8KLQkJZm9yIChpID0gMDsgaSA8IChtYXhfd2FpdCAqIDEwMDApOyBpKyspIHsKLQkJCWZ3X3N0YXRlID0gaW5zdGFuY2UtPmluc3RhbmNldC0+cmVhZF9md19zdGF0dXNfcmVnKGluc3RhbmNlLT5yZWdfc2V0KSAmICAKLQkJCQkJTUZJX1NUQVRFX01BU0sgOwotCQljdXJyX2Fic19zdGF0ZSA9Ci0JCWluc3RhbmNlLT5pbnN0YW5jZXQtPnJlYWRfZndfc3RhdHVzX3JlZyhpbnN0YW5jZS0+cmVnX3NldCk7Ci0KLQkJCWlmIChhYnNfc3RhdGUgPT0gY3Vycl9hYnNfc3RhdGUpIHsKLQkJCQltc2xlZXAoMSk7Ci0JCQl9IGVsc2UKLQkJCQlicmVhazsKLQkJfQotCi0JCS8qCi0JCSAqIFJldHVybiBlcnJvciBpZiBmd19zdGF0ZSBoYXNuJ3QgY2hhbmdlZCBhZnRlciBtYXhfd2FpdAotCQkgKi8KLQkJaWYgKGN1cnJfYWJzX3N0YXRlID09IGFic19zdGF0ZSkgewotCQkJcHJpbnRrKEtFUk5fREVCVUcgIkZXIHN0YXRlIFslZF0gaGFzbid0IGNoYW5nZWQgIgotCQkJICAgICAgICJpbiAlZCBzZWNzXG4iLCBmd19zdGF0ZSwgbWF4X3dhaXQpOwotCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCX0KLQl9Ci0gCXByaW50ayhLRVJOX0lORk8gIm1lZ2FzYXM6IEZXIG5vdyBpbiBSZWFkeSBzdGF0ZVxuIik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBtZWdhc2FzX3RlYXJkb3duX2ZyYW1lX3Bvb2wgLQlEZXN0cm95IHRoZSBjbWQgZnJhbWUgRE1BIHBvb2wKLSAqIEBpbnN0YW5jZToJCQkJQWRhcHRlciBzb2Z0IHN0YXRlCi0gKi8KLXN0YXRpYyB2b2lkIG1lZ2FzYXNfdGVhcmRvd25fZnJhbWVfcG9vbChzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UpCi17Ci0JaW50IGk7Ci0JdTMyIG1heF9jbWQgPSBpbnN0YW5jZS0+bWF4X2Z3X2NtZHM7Ci0Jc3RydWN0IG1lZ2FzYXNfY21kICpjbWQ7Ci0KLQlpZiAoIWluc3RhbmNlLT5mcmFtZV9kbWFfcG9vbCkKLQkJcmV0dXJuOwotCi0JLyoKLQkgKiBSZXR1cm4gYWxsIGZyYW1lcyB0byBwb29sCi0JICovCi0JZm9yIChpID0gMDsgaSA8IG1heF9jbWQ7IGkrKykgewotCi0JCWNtZCA9IGluc3RhbmNlLT5jbWRfbGlzdFtpXTsKLQotCQlpZiAoY21kLT5mcmFtZSkKLQkJCXBjaV9wb29sX2ZyZWUoaW5zdGFuY2UtPmZyYW1lX2RtYV9wb29sLCBjbWQtPmZyYW1lLAotCQkJCSAgICAgIGNtZC0+ZnJhbWVfcGh5c19hZGRyKTsKLQotCQlpZiAoY21kLT5zZW5zZSkKLQkJCXBjaV9wb29sX2ZyZWUoaW5zdGFuY2UtPnNlbnNlX2RtYV9wb29sLCBjbWQtPnNlbnNlLAotCQkJCSAgICAgIGNtZC0+c2Vuc2VfcGh5c19hZGRyKTsKLQl9Ci0KLQkvKgotCSAqIE5vdyBkZXN0cm95IHRoZSBwb29sIGl0c2VsZgotCSAqLwotCXBjaV9wb29sX2Rlc3Ryb3koaW5zdGFuY2UtPmZyYW1lX2RtYV9wb29sKTsKLQlwY2lfcG9vbF9kZXN0cm95KGluc3RhbmNlLT5zZW5zZV9kbWFfcG9vbCk7Ci0KLQlpbnN0YW5jZS0+ZnJhbWVfZG1hX3Bvb2wgPSBOVUxMOwotCWluc3RhbmNlLT5zZW5zZV9kbWFfcG9vbCA9IE5VTEw7Ci19Ci0KLS8qKgotICogbWVnYXNhc19jcmVhdGVfZnJhbWVfcG9vbCAtCUNyZWF0ZXMgRE1BIHBvb2wgZm9yIGNtZCBmcmFtZXMKLSAqIEBpbnN0YW5jZToJCQlBZGFwdGVyIHNvZnQgc3RhdGUKLSAqCi0gKiBFYWNoIGNvbW1hbmQgcGFja2V0IGhhcyBhbiBlbWJlZGRlZCBETUEgbWVtb3J5IGJ1ZmZlciB0aGF0IGlzIHVzZWQgZm9yCi0gKiBmaWxsaW5nIE1GSSBmcmFtZSBhbmQgdGhlIFNHIGxpc3QgdGhhdCBpbW1lZGlhdGVseSBmb2xsb3dzIHRoZSBmcmFtZS4gVGhpcwotICogZnVuY3Rpb24gY3JlYXRlcyB0aG9zZSBETUEgbWVtb3J5IGJ1ZmZlcnMgZm9yIGVhY2ggY29tbWFuZCBwYWNrZXQgYnkgdXNpbmcKLSAqIFBDSSBwb29sIGZhY2lsaXR5LgotICovCi1zdGF0aWMgaW50IG1lZ2FzYXNfY3JlYXRlX2ZyYW1lX3Bvb2woc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlKQotewotCWludCBpOwotCXUzMiBtYXhfY21kOwotCXUzMiBzZ2Vfc3o7Ci0JdTMyIHNnbF9zejsKLQl1MzIgdG90YWxfc3o7Ci0JdTMyIGZyYW1lX2NvdW50OwotCXN0cnVjdCBtZWdhc2FzX2NtZCAqY21kOwotCi0JbWF4X2NtZCA9IGluc3RhbmNlLT5tYXhfZndfY21kczsKLQotCS8qCi0JICogU2l6ZSBvZiBvdXIgZnJhbWUgaXMgNjQgYnl0ZXMgZm9yIE1GSSBmcmFtZSwgZm9sbG93ZWQgYnkgbWF4IFNHCi0JICogZWxlbWVudHMgYW5kIGZpbmFsbHkgU0NTSV9TRU5TRV9CVUZGRVJTSVpFIGJ5dGVzIGZvciBzZW5zZSBidWZmZXIKLQkgKi8KLQlzZ2Vfc3ogPSAoSVNfRE1BNjQpID8gc2l6ZW9mKHN0cnVjdCBtZWdhc2FzX3NnZTY0KSA6Ci0JICAgIHNpemVvZihzdHJ1Y3QgbWVnYXNhc19zZ2UzMik7Ci0KLQlpZiAoaW5zdGFuY2UtPmZsYWdfaWVlZSkgewotCQlzZ2Vfc3ogPSBzaXplb2Yoc3RydWN0IG1lZ2FzYXNfc2dlX3NraW5ueSk7Ci0JfQotCi0JLyoKLQkgKiBDYWxjdWxhdGVkIHRoZSBudW1iZXIgb2YgNjRieXRlIGZyYW1lcyByZXF1aXJlZCBmb3IgU0dMCi0JICovCi0Jc2dsX3N6ID0gc2dlX3N6ICogaW5zdGFuY2UtPm1heF9udW1fc2dlOwotCWZyYW1lX2NvdW50ID0gKHNnbF9zeiArIE1FR0FNRklfRlJBTUVfU0laRSAtIDEpIC8gTUVHQU1GSV9GUkFNRV9TSVpFOwotCWZyYW1lX2NvdW50ID0gMTU7Ci0KLQkvKgotCSAqIFdlIG5lZWQgb25lIGV4dHJhIGZyYW1lIGZvciB0aGUgTUZJIGNvbW1hbmQKLQkgKi8KLQlmcmFtZV9jb3VudCsrOwotCi0JdG90YWxfc3ogPSBNRUdBTUZJX0ZSQU1FX1NJWkUgKiBmcmFtZV9jb3VudDsKLQkvKgotCSAqIFVzZSBETUEgcG9vbCBmYWNpbGl0eSBwcm92aWRlZCBieSBQQ0kgbGF5ZXIKLQkgKi8KLQlpbnN0YW5jZS0+ZnJhbWVfZG1hX3Bvb2wgPSBwY2lfcG9vbF9jcmVhdGUoIm1lZ2FzYXMgZnJhbWUgcG9vbCIsCi0JCQkJCQkgICBpbnN0YW5jZS0+cGRldiwgdG90YWxfc3osIDY0LAotCQkJCQkJICAgMCk7Ci0KLQlpZiAoIWluc3RhbmNlLT5mcmFtZV9kbWFfcG9vbCkgewotCQlwcmludGsoS0VSTl9ERUJVRyAibWVnYXNhczogZmFpbGVkIHRvIHNldHVwIGZyYW1lIHBvb2xcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlpbnN0YW5jZS0+c2Vuc2VfZG1hX3Bvb2wgPSBwY2lfcG9vbF9jcmVhdGUoIm1lZ2FzYXMgc2Vuc2UgcG9vbCIsCi0JCQkJCQkgICBpbnN0YW5jZS0+cGRldiwgMTI4LCA0LCAwKTsKLQotCWlmICghaW5zdGFuY2UtPnNlbnNlX2RtYV9wb29sKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJtZWdhc2FzOiBmYWlsZWQgdG8gc2V0dXAgc2Vuc2UgcG9vbFxuIik7Ci0KLQkJcGNpX3Bvb2xfZGVzdHJveShpbnN0YW5jZS0+ZnJhbWVfZG1hX3Bvb2wpOwotCQlpbnN0YW5jZS0+ZnJhbWVfZG1hX3Bvb2wgPSBOVUxMOwotCi0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCS8qCi0JICogQWxsb2NhdGUgYW5kIGF0dGFjaCBhIGZyYW1lIHRvIGVhY2ggb2YgdGhlIGNvbW1hbmRzIGluIGNtZF9saXN0LgotCSAqIEJ5IG1ha2luZyBjbWQtPmluZGV4IGFzIHRoZSBjb250ZXh0IGluc3RlYWQgb2YgdGhlICZjbWQsIHdlIGNhbgotCSAqIGFsd2F5cyB1c2UgMzJiaXQgY29udGV4dCByZWdhcmRsZXNzIG9mIHRoZSBhcmNoaXRlY3R1cmUKLQkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbWF4X2NtZDsgaSsrKSB7Ci0KLQkJY21kID0gaW5zdGFuY2UtPmNtZF9saXN0W2ldOwotCi0JCWNtZC0+ZnJhbWUgPSBwY2lfcG9vbF9hbGxvYyhpbnN0YW5jZS0+ZnJhbWVfZG1hX3Bvb2wsCi0JCQkJCSAgICBHRlBfS0VSTkVMLCAmY21kLT5mcmFtZV9waHlzX2FkZHIpOwotCi0JCWNtZC0+c2Vuc2UgPSBwY2lfcG9vbF9hbGxvYyhpbnN0YW5jZS0+c2Vuc2VfZG1hX3Bvb2wsCi0JCQkJCSAgICBHRlBfS0VSTkVMLCAmY21kLT5zZW5zZV9waHlzX2FkZHIpOwotCi0JCS8qCi0JCSAqIG1lZ2FzYXNfdGVhcmRvd25fZnJhbWVfcG9vbCgpIHRha2VzIGNhcmUgb2YgZnJlZWluZwotCQkgKiB3aGF0ZXZlciBoYXMgYmVlbiBhbGxvY2F0ZWQKLQkJICovCi0JCWlmICghY21kLT5mcmFtZSB8fCAhY21kLT5zZW5zZSkgewotCQkJcHJpbnRrKEtFUk5fREVCVUcgIm1lZ2FzYXM6IHBjaV9wb29sX2FsbG9jIGZhaWxlZCBcbiIpOwotCQkJbWVnYXNhc190ZWFyZG93bl9mcmFtZV9wb29sKGluc3RhbmNlKTsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0KLQkJbWVtc2V0KGNtZC0+ZnJhbWUsIDAsIHRvdGFsX3N6KTsKLQkJY21kLT5mcmFtZS0+aW8uY29udGV4dCA9IGNtZC0+aW5kZXg7Ci0JCWNtZC0+ZnJhbWUtPmlvLnBhZF8wID0gMDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBtZWdhc2FzX2ZyZWVfY21kcyAtCUZyZWUgYWxsIHRoZSBjbWRzIGluIHRoZSBmcmVlIGNtZCBwb29sCi0gKiBAaW5zdGFuY2U6CQlBZGFwdGVyIHNvZnQgc3RhdGUKLSAqLwotc3RhdGljIHZvaWQgbWVnYXNhc19mcmVlX2NtZHMoc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlKQotewotCWludCBpOwotCS8qIEZpcnN0IGZyZWUgdGhlIE1GSSBmcmFtZSBwb29sICovCi0JbWVnYXNhc190ZWFyZG93bl9mcmFtZV9wb29sKGluc3RhbmNlKTsKLQotCS8qIEZyZWUgYWxsIHRoZSBjb21tYW5kcyBpbiB0aGUgY21kX2xpc3QgKi8KLQlmb3IgKGkgPSAwOyBpIDwgaW5zdGFuY2UtPm1heF9md19jbWRzOyBpKyspCi0JCWtmcmVlKGluc3RhbmNlLT5jbWRfbGlzdFtpXSk7Ci0KLQkvKiBGcmVlIHRoZSBjbWRfbGlzdCBidWZmZXIgaXRzZWxmICovCi0Ja2ZyZWUoaW5zdGFuY2UtPmNtZF9saXN0KTsKLQlpbnN0YW5jZS0+Y21kX2xpc3QgPSBOVUxMOwotCi0JSU5JVF9MSVNUX0hFQUQoJmluc3RhbmNlLT5jbWRfcG9vbCk7Ci19Ci0KLS8qKgotICogbWVnYXNhc19hbGxvY19jbWRzIC0JQWxsb2NhdGVzIHRoZSBjb21tYW5kIHBhY2tldHMKLSAqIEBpbnN0YW5jZToJCUFkYXB0ZXIgc29mdCBzdGF0ZQotICoKLSAqIEVhY2ggY29tbWFuZCB0aGF0IGlzIGlzc3VlZCB0byB0aGUgRlcsIHdoZXRoZXIgSU8gY29tbWFuZHMgZnJvbSB0aGUgT1Mgb3IKLSAqIGludGVybmFsIGNvbW1hbmRzIGxpa2UgSU9DVExzLCBhcmUgd3JhcHBlZCBpbiBsb2NhbCBkYXRhIHN0cnVjdHVyZSBjYWxsZWQKLSAqIG1lZ2FzYXNfY21kLiBUaGUgZnJhbWUgZW1iZWRkZWQgaW4gdGhpcyBtZWdhc2FzX2NtZCBpcyBhY3R1YWxseSBpc3N1ZWQgdG8KLSAqIHRoZSBGVy4KLSAqCi0gKiBFYWNoIGZyYW1lIGhhcyBhIDMyLWJpdCBmaWVsZCBjYWxsZWQgY29udGV4dCAodGFnKS4gVGhpcyBjb250ZXh0IGlzIHVzZWQKLSAqIHRvIGdldCBiYWNrIHRoZSBtZWdhc2FzX2NtZCBmcm9tIHRoZSBmcmFtZSB3aGVuIGEgZnJhbWUgZ2V0cyBjb21wbGV0ZWQgaW4KLSAqIHRoZSBJU1IuIFR5cGljYWxseSB0aGUgYWRkcmVzcyBvZiB0aGUgbWVnYXNhc19jbWQgaXRzZWxmIHdvdWxkIGJlIHVzZWQgYXMKLSAqIHRoZSBjb250ZXh0LiBCdXQgd2Ugd2FudGVkIHRvIGtlZXAgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gMzIgYW5kIDY0IGJpdAotICogc3lzdGVtcyB0byB0aGUgbWluaW51bS4gV2UgYWx3YXlzIHVzZSAzMiBiaXQgaW50ZWdlcnMgZm9yIHRoZSBjb250ZXh0LiBJbgotICogdGhpcyBkcml2ZXIsIHRoZSAzMiBiaXQgdmFsdWVzIGFyZSB0aGUgaW5kaWNlcyBpbnRvIGFuIGFycmF5IGNtZF9saXN0LgotICogVGhpcyBhcnJheSBpcyB1c2VkIG9ubHkgdG8gbG9vayB1cCB0aGUgbWVnYXNhc19jbWQgZ2l2ZW4gdGhlIGNvbnRleHQuIFRoZQotICogZnJlZSBjb21tYW5kcyB0aGVtc2VsdmVzIGFyZSBtYWludGFpbmVkIGluIGEgbGlua2VkIGxpc3QgY2FsbGVkIGNtZF9wb29sLgotICovCi1zdGF0aWMgaW50IG1lZ2FzYXNfYWxsb2NfY21kcyhzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UpCi17Ci0JaW50IGk7Ci0JaW50IGo7Ci0JdTMyIG1heF9jbWQ7Ci0Jc3RydWN0IG1lZ2FzYXNfY21kICpjbWQ7Ci0KLQltYXhfY21kID0gaW5zdGFuY2UtPm1heF9md19jbWRzOwotCi0JLyoKLQkgKiBpbnN0YW5jZS0+Y21kX2xpc3QgaXMgYW4gYXJyYXkgb2Ygc3RydWN0IG1lZ2FzYXNfY21kIHBvaW50ZXJzLgotCSAqIEFsbG9jYXRlIHRoZSBkeW5hbWljIGFycmF5IGZpcnN0IGFuZCB0aGVuIGFsbG9jYXRlIGluZGl2aWR1YWwKLQkgKiBjb21tYW5kcy4KLQkgKi8KLQlpbnN0YW5jZS0+Y21kX2xpc3QgPSBrY2FsbG9jKG1heF9jbWQsIHNpemVvZihzdHJ1Y3QgbWVnYXNhc19jbWQqKSwgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAoIWluc3RhbmNlLT5jbWRfbGlzdCkgewotCQlwcmludGsoS0VSTl9ERUJVRyAibWVnYXNhczogb3V0IG9mIG1lbW9yeVxuIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCi0JZm9yIChpID0gMDsgaSA8IG1heF9jbWQ7IGkrKykgewotCQlpbnN0YW5jZS0+Y21kX2xpc3RbaV0gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWVnYXNhc19jbWQpLAotCQkJCQkJR0ZQX0tFUk5FTCk7Ci0KLQkJaWYgKCFpbnN0YW5jZS0+Y21kX2xpc3RbaV0pIHsKLQotCQkJZm9yIChqID0gMDsgaiA8IGk7IGorKykKLQkJCQlrZnJlZShpbnN0YW5jZS0+Y21kX2xpc3Rbal0pOwotCi0JCQlrZnJlZShpbnN0YW5jZS0+Y21kX2xpc3QpOwotCQkJaW5zdGFuY2UtPmNtZF9saXN0ID0gTlVMTDsKLQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCX0KLQl9Ci0KLQkvKgotCSAqIEFkZCBhbGwgdGhlIGNvbW1hbmRzIHRvIGNvbW1hbmQgcG9vbCAoaW5zdGFuY2UtPmNtZF9wb29sKQotCSAqLwotCWZvciAoaSA9IDA7IGkgPCBtYXhfY21kOyBpKyspIHsKLQkJY21kID0gaW5zdGFuY2UtPmNtZF9saXN0W2ldOwotCQltZW1zZXQoY21kLCAwLCBzaXplb2Yoc3RydWN0IG1lZ2FzYXNfY21kKSk7Ci0JCWNtZC0+aW5kZXggPSBpOwotCQljbWQtPnNjbWQgPSBOVUxMOwotCQljbWQtPmluc3RhbmNlID0gaW5zdGFuY2U7Ci0KLQkJbGlzdF9hZGRfdGFpbCgmY21kLT5saXN0LCAmaW5zdGFuY2UtPmNtZF9wb29sKTsKLQl9Ci0KLQkvKgotCSAqIENyZWF0ZSBhIGZyYW1lIHBvb2wgYW5kIGFzc2lnbiBvbmUgZnJhbWUgdG8gZWFjaCBjbWQKLQkgKi8KLQlpZiAobWVnYXNhc19jcmVhdGVfZnJhbWVfcG9vbChpbnN0YW5jZSkpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIm1lZ2FzYXM6IEVycm9yIGNyZWF0aW5nIGZyYW1lIERNQSBwb29sXG4iKTsKLQkJbWVnYXNhc19mcmVlX2NtZHMoaW5zdGFuY2UpOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKgotICogbWVnYXNhc19nZXRfcGRfbGlzdF9pbmZvIC0JUmV0dXJucyBGVydzIHBkX2xpc3Qgc3RydWN0dXJlCi0gKiBAaW5zdGFuY2U6CQkJCUFkYXB0ZXIgc29mdCBzdGF0ZQotICogQHBkX2xpc3Q6CQkJCXBkX2xpc3Qgc3RydWN0dXJlCi0gKgotICogSXNzdWVzIGFuIGludGVybmFsIGNvbW1hbmQgKERDTUQpIHRvIGdldCB0aGUgRlcncyBjb250cm9sbGVyIFBECi0gKiBsaXN0IHN0cnVjdHVyZS4gIFRoaXMgaW5mb3JtYXRpb24gaXMgbWFpbmx5IHVzZWQgdG8gZmluZCBvdXQgU1lTVEVNCi0gKiBzdXBwb3J0ZWQgYnkgdGhlIEZXLgotICovCi1zdGF0aWMgaW50Ci1tZWdhc2FzX2dldF9wZF9saXN0KHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSkKLXsKLQlpbnQgcmV0ID0gMCwgcGRfaW5kZXggPSAwOwotCXN0cnVjdCBtZWdhc2FzX2NtZCAqY21kOwotCXN0cnVjdCBtZWdhc2FzX2RjbWRfZnJhbWUgKmRjbWQ7Ci0Jc3RydWN0IE1SX1BEX0xJU1QgKmNpOwotCXN0cnVjdCBNUl9QRF9BRERSRVNTICpwZF9hZGRyOwotCWRtYV9hZGRyX3QgY2lfaCA9IDA7Ci0KLQljbWQgPSBtZWdhc2FzX2dldF9jbWQoaW5zdGFuY2UpOwotCi0JaWYgKCFjbWQpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIm1lZ2FzYXMgKGdldF9wZF9saXN0KTogRmFpbGVkIHRvIGdldCBjbWRcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlkY21kID0gJmNtZC0+ZnJhbWUtPmRjbWQ7Ci0KLQljaSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGluc3RhbmNlLT5wZGV2LAotCQkgIE1FR0FTQVNfTUFYX1BEICogc2l6ZW9mKHN0cnVjdCBNUl9QRF9MSVNUKSwgJmNpX2gpOwotCi0JaWYgKCFjaSkgewotCQlwcmludGsoS0VSTl9ERUJVRyAiRmFpbGVkIHRvIGFsbG9jIG1lbSBmb3IgcGRfbGlzdFxuIik7Ci0JCW1lZ2FzYXNfcmV0dXJuX2NtZChpbnN0YW5jZSwgY21kKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JbWVtc2V0KGNpLCAwLCBzaXplb2YoKmNpKSk7Ci0JbWVtc2V0KGRjbWQtPm1ib3guYiwgMCwgTUZJX01CT1hfU0laRSk7Ci0KLQlkY21kLT5tYm94LmJbMF0gPSBNUl9QRF9RVUVSWV9UWVBFX0VYUE9TRURfVE9fSE9TVDsKLQlkY21kLT5tYm94LmJbMV0gPSAwOwotCWRjbWQtPmNtZCA9IE1GSV9DTURfRENNRDsKLQlkY21kLT5jbWRfc3RhdHVzID0gMHhGRjsKLQlkY21kLT5zZ2VfY291bnQgPSAxOwotCWRjbWQtPmZsYWdzID0gTUZJX0ZSQU1FX0RJUl9SRUFEOwotCWRjbWQtPnRpbWVvdXQgPSAwOwotCWRjbWQtPnBhZF8wID0gMDsKLQlkY21kLT5kYXRhX3hmZXJfbGVuID0gTUVHQVNBU19NQVhfUEQgKiBzaXplb2Yoc3RydWN0IE1SX1BEX0xJU1QpOwotCWRjbWQtPm9wY29kZSA9IE1SX0RDTURfUERfTElTVF9RVUVSWTsKLQlkY21kLT5zZ2wuc2dlMzJbMF0ucGh5c19hZGRyID0gY2lfaDsKLQlkY21kLT5zZ2wuc2dlMzJbMF0ubGVuZ3RoID0gTUVHQVNBU19NQVhfUEQgKiBzaXplb2Yoc3RydWN0IE1SX1BEX0xJU1QpOwotCi0JaWYgKCFtZWdhc2FzX2lzc3VlX3BvbGxlZChpbnN0YW5jZSwgY21kKSkgewotCQlyZXQgPSAwOwotCX0gZWxzZSB7Ci0JCXJldCA9IC0xOwotCX0KLQotCS8qCi0JKiB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uIHdpbGwgZ2V0IHRoZSBpbnN0YW5jZSBQRCBMSVNULgotCSovCi0KLQlwZF9hZGRyID0gY2ktPmFkZHI7Ci0KLQlpZiAoIHJldCA9PSAwICYmCi0JCShjaS0+Y291bnQgPAotCQkgIChNRUdBU0FTX01BWF9QRF9DSEFOTkVMUyAqIE1FR0FTQVNfTUFYX0RFVl9QRVJfQ0hBTk5FTCkpKSB7Ci0KLQkJbWVtc2V0KGluc3RhbmNlLT5wZF9saXN0LCAwLAotCQkJTUVHQVNBU19NQVhfUEQgKiBzaXplb2Yoc3RydWN0IG1lZ2FzYXNfcGRfbGlzdCkpOwotCi0JCWZvciAocGRfaW5kZXggPSAwOyBwZF9pbmRleCA8IGNpLT5jb3VudDsgcGRfaW5kZXgrKykgewotCi0JCQlpbnN0YW5jZS0+cGRfbGlzdFtwZF9hZGRyLT5kZXZpY2VJZF0udGlkCT0KLQkJCQkJCQlwZF9hZGRyLT5kZXZpY2VJZDsKLQkJCWluc3RhbmNlLT5wZF9saXN0W3BkX2FkZHItPmRldmljZUlkXS5kcml2ZVR5cGUJPQotCQkJCQkJCXBkX2FkZHItPnNjc2lEZXZUeXBlOwotCQkJaW5zdGFuY2UtPnBkX2xpc3RbcGRfYWRkci0+ZGV2aWNlSWRdLmRyaXZlU3RhdGUJPQotCQkJCQkJCU1SX1BEX1NUQVRFX1NZU1RFTTsKLQkJCXBkX2FkZHIrKzsKLQkJfQotCX0KLQotCXBjaV9mcmVlX2NvbnNpc3RlbnQoaW5zdGFuY2UtPnBkZXYsCi0JCQkJTUVHQVNBU19NQVhfUEQgKiBzaXplb2Yoc3RydWN0IE1SX1BEX0xJU1QpLAotCQkJCWNpLCBjaV9oKTsKLQltZWdhc2FzX3JldHVybl9jbWQoaW5zdGFuY2UsIGNtZCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0vKgotICogbWVnYXNhc19nZXRfbGRfbGlzdF9pbmZvIC0JUmV0dXJucyBGVydzIGxkX2xpc3Qgc3RydWN0dXJlCi0gKiBAaW5zdGFuY2U6CQkJCUFkYXB0ZXIgc29mdCBzdGF0ZQotICogQGxkX2xpc3Q6CQkJCWxkX2xpc3Qgc3RydWN0dXJlCi0gKgotICogSXNzdWVzIGFuIGludGVybmFsIGNvbW1hbmQgKERDTUQpIHRvIGdldCB0aGUgRlcncyBjb250cm9sbGVyIFBECi0gKiBsaXN0IHN0cnVjdHVyZS4gIFRoaXMgaW5mb3JtYXRpb24gaXMgbWFpbmx5IHVzZWQgdG8gZmluZCBvdXQgU1lTVEVNCi0gKiBzdXBwb3J0ZWQgYnkgdGhlIEZXLgotICovCi1zdGF0aWMgaW50Ci1tZWdhc2FzX2dldF9sZF9saXN0KHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSkKLXsKLQlpbnQgcmV0ID0gMCwgbGRfaW5kZXggPSAwLCBpZHMgPSAwOwotCXN0cnVjdCBtZWdhc2FzX2NtZCAqY21kOwotCXN0cnVjdCBtZWdhc2FzX2RjbWRfZnJhbWUgKmRjbWQ7Ci0Jc3RydWN0IE1SX0xEX0xJU1QgKmNpOwotCWRtYV9hZGRyX3QgY2lfaCA9IDA7Ci0KLQljbWQgPSBtZWdhc2FzX2dldF9jbWQoaW5zdGFuY2UpOwotCi0JaWYgKCFjbWQpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIm1lZ2FzYXNfZ2V0X2xkX2xpc3Q6IEZhaWxlZCB0byBnZXQgY21kXG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JZGNtZCA9ICZjbWQtPmZyYW1lLT5kY21kOwotCi0JY2kgPSBwY2lfYWxsb2NfY29uc2lzdGVudChpbnN0YW5jZS0+cGRldiwKLQkJCQlzaXplb2Yoc3RydWN0IE1SX0xEX0xJU1QpLAotCQkJCSZjaV9oKTsKLQotCWlmICghY2kpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIkZhaWxlZCB0byBhbGxvYyBtZW0gaW4gZ2V0X2xkX2xpc3RcbiIpOwotCQltZWdhc2FzX3JldHVybl9jbWQoaW5zdGFuY2UsIGNtZCk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCW1lbXNldChjaSwgMCwgc2l6ZW9mKCpjaSkpOwotCW1lbXNldChkY21kLT5tYm94LmIsIDAsIE1GSV9NQk9YX1NJWkUpOwotCi0JZGNtZC0+Y21kID0gTUZJX0NNRF9EQ01EOwotCWRjbWQtPmNtZF9zdGF0dXMgPSAweEZGOwotCWRjbWQtPnNnZV9jb3VudCA9IDE7Ci0JZGNtZC0+ZmxhZ3MgPSBNRklfRlJBTUVfRElSX1JFQUQ7Ci0JZGNtZC0+dGltZW91dCA9IDA7Ci0JZGNtZC0+ZGF0YV94ZmVyX2xlbiA9IHNpemVvZihzdHJ1Y3QgTVJfTERfTElTVCk7Ci0JZGNtZC0+b3Bjb2RlID0gTVJfRENNRF9MRF9HRVRfTElTVDsKLQlkY21kLT5zZ2wuc2dlMzJbMF0ucGh5c19hZGRyID0gY2lfaDsKLQlkY21kLT5zZ2wuc2dlMzJbMF0ubGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBNUl9MRF9MSVNUKTsKLQlkY21kLT5wYWRfMCAgPSAwOwotCi0JaWYgKCFtZWdhc2FzX2lzc3VlX3BvbGxlZChpbnN0YW5jZSwgY21kKSkgewotCQlyZXQgPSAwOwotCX0gZWxzZSB7Ci0JCXJldCA9IC0xOwotCX0KLQotCS8qIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gd2lsbCBnZXQgdGhlIGluc3RhbmNlIFBEIExJU1QgKi8KLQotCWlmICgocmV0ID09IDApICYmIChjaS0+bGRDb3VudCA8PSBNQVhfTE9HSUNBTF9EUklWRVMpKSB7Ci0JCW1lbXNldChpbnN0YW5jZS0+bGRfaWRzLCAweGZmLCBNRUdBU0FTX01BWF9MRF9JRFMpOwotCi0JCWZvciAobGRfaW5kZXggPSAwOyBsZF9pbmRleCA8IGNpLT5sZENvdW50OyBsZF9pbmRleCsrKSB7Ci0JCQlpZiAoY2ktPmxkTGlzdFtsZF9pbmRleF0uc3RhdGUgIT0gMCkgewotCQkJCWlkcyA9IGNpLT5sZExpc3RbbGRfaW5kZXhdLnJlZi50YXJnZXRJZDsKLQkJCQlpbnN0YW5jZS0+bGRfaWRzW2lkc10gPQotCQkJCQljaS0+bGRMaXN0W2xkX2luZGV4XS5yZWYudGFyZ2V0SWQ7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwY2lfZnJlZV9jb25zaXN0ZW50KGluc3RhbmNlLT5wZGV2LAotCQkJCXNpemVvZihzdHJ1Y3QgTVJfTERfTElTVCksCi0JCQkJY2ksCi0JCQkJY2lfaCk7Ci0KLQltZWdhc2FzX3JldHVybl9jbWQoaW5zdGFuY2UsIGNtZCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKiBtZWdhc2FzX2dldF9jb250cm9sbGVyX2luZm8gLQlSZXR1cm5zIEZXJ3MgY29udHJvbGxlciBzdHJ1Y3R1cmUKLSAqIEBpbnN0YW5jZToJCQkJQWRhcHRlciBzb2Z0IHN0YXRlCi0gKiBAY3RybF9pbmZvOgkJCQlDb250cm9sbGVyIGluZm9ybWF0aW9uIHN0cnVjdHVyZQotICoKLSAqIElzc3VlcyBhbiBpbnRlcm5hbCBjb21tYW5kIChEQ01EKSB0byBnZXQgdGhlIEZXJ3MgY29udHJvbGxlciBzdHJ1Y3R1cmUuCi0gKiBUaGlzIGluZm9ybWF0aW9uIGlzIG1haW5seSB1c2VkIHRvIGZpbmQgb3V0IHRoZSBtYXhpbXVtIElPIHRyYW5zZmVyIHBlcgotICogY29tbWFuZCBzdXBwb3J0ZWQgYnkgdGhlIEZXLgotICovCi1zdGF0aWMgaW50Ci1tZWdhc2FzX2dldF9jdHJsX2luZm8oc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlLAotCQkgICAgICBzdHJ1Y3QgbWVnYXNhc19jdHJsX2luZm8gKmN0cmxfaW5mbykKLXsKLQlpbnQgcmV0ID0gMDsKLQlzdHJ1Y3QgbWVnYXNhc19jbWQgKmNtZDsKLQlzdHJ1Y3QgbWVnYXNhc19kY21kX2ZyYW1lICpkY21kOwotCXN0cnVjdCBtZWdhc2FzX2N0cmxfaW5mbyAqY2k7Ci0JZG1hX2FkZHJfdCBjaV9oID0gMDsKLQotCWNtZCA9IG1lZ2FzYXNfZ2V0X2NtZChpbnN0YW5jZSk7Ci0KLQlpZiAoIWNtZCkgewotCQlwcmludGsoS0VSTl9ERUJVRyAibWVnYXNhczogRmFpbGVkIHRvIGdldCBhIGZyZWUgY21kXG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JZGNtZCA9ICZjbWQtPmZyYW1lLT5kY21kOwotCi0JY2kgPSBwY2lfYWxsb2NfY29uc2lzdGVudChpbnN0YW5jZS0+cGRldiwKLQkJCQkgIHNpemVvZihzdHJ1Y3QgbWVnYXNhc19jdHJsX2luZm8pLCAmY2lfaCk7Ci0KLQlpZiAoIWNpKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJGYWlsZWQgdG8gYWxsb2MgbWVtIGZvciBjdHJsIGluZm9cbiIpOwotCQltZWdhc2FzX3JldHVybl9jbWQoaW5zdGFuY2UsIGNtZCk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCW1lbXNldChjaSwgMCwgc2l6ZW9mKCpjaSkpOwotCW1lbXNldChkY21kLT5tYm94LmIsIDAsIE1GSV9NQk9YX1NJWkUpOwotCi0JZGNtZC0+Y21kID0gTUZJX0NNRF9EQ01EOwotCWRjbWQtPmNtZF9zdGF0dXMgPSAweEZGOwotCWRjbWQtPnNnZV9jb3VudCA9IDE7Ci0JZGNtZC0+ZmxhZ3MgPSBNRklfRlJBTUVfRElSX1JFQUQ7Ci0JZGNtZC0+dGltZW91dCA9IDA7Ci0JZGNtZC0+cGFkXzAgPSAwOwotCWRjbWQtPmRhdGFfeGZlcl9sZW4gPSBzaXplb2Yoc3RydWN0IG1lZ2FzYXNfY3RybF9pbmZvKTsKLQlkY21kLT5vcGNvZGUgPSBNUl9EQ01EX0NUUkxfR0VUX0lORk87Ci0JZGNtZC0+c2dsLnNnZTMyWzBdLnBoeXNfYWRkciA9IGNpX2g7Ci0JZGNtZC0+c2dsLnNnZTMyWzBdLmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgbWVnYXNhc19jdHJsX2luZm8pOwotCi0JaWYgKCFtZWdhc2FzX2lzc3VlX3BvbGxlZChpbnN0YW5jZSwgY21kKSkgewotCQlyZXQgPSAwOwotCQltZW1jcHkoY3RybF9pbmZvLCBjaSwgc2l6ZW9mKHN0cnVjdCBtZWdhc2FzX2N0cmxfaW5mbykpOwotCX0gZWxzZSB7Ci0JCXJldCA9IC0xOwotCX0KLQotCXBjaV9mcmVlX2NvbnNpc3RlbnQoaW5zdGFuY2UtPnBkZXYsIHNpemVvZihzdHJ1Y3QgbWVnYXNhc19jdHJsX2luZm8pLAotCQkJICAgIGNpLCBjaV9oKTsKLQotCW1lZ2FzYXNfcmV0dXJuX2NtZChpbnN0YW5jZSwgY21kKTsKLQlyZXR1cm4gcmV0OwotfQotCi0vKioKLSAqIG1lZ2FzYXNfaXNzdWVfaW5pdF9tZmkgLQlJbml0aWFsaXplcyB0aGUgRlcKLSAqIEBpbnN0YW5jZToJCUFkYXB0ZXIgc29mdCBzdGF0ZQotICoKLSAqIElzc3VlcyB0aGUgSU5JVCBNRkkgY21kCi0gKi8KLXN0YXRpYyBpbnQKLW1lZ2FzYXNfaXNzdWVfaW5pdF9tZmkoc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlKQotewotCXUzMiBjb250ZXh0OwotCi0Jc3RydWN0IG1lZ2FzYXNfY21kICpjbWQ7Ci0KLQlzdHJ1Y3QgbWVnYXNhc19pbml0X2ZyYW1lICppbml0X2ZyYW1lOwotCXN0cnVjdCBtZWdhc2FzX2luaXRfcXVldWVfaW5mbyAqaW5pdHFfaW5mbzsKLQlkbWFfYWRkcl90IGluaXRfZnJhbWVfaDsKLQlkbWFfYWRkcl90IGluaXRxX2luZm9faDsKLQotCS8qCi0JICogUHJlcGFyZSBhIGluaXQgZnJhbWUuIE5vdGUgdGhlIGluaXQgZnJhbWUgcG9pbnRzIHRvIHF1ZXVlIGluZm8KLQkgKiBzdHJ1Y3R1cmUuIEVhY2ggZnJhbWUgaGFzIFNHTCBhbGxvY2F0ZWQgYWZ0ZXIgZmlyc3QgNjQgYnl0ZXMuIEZvcgotCSAqIHRoaXMgZnJhbWUgLSBzaW5jZSB3ZSBkb24ndCBuZWVkIGFueSBTR0wgLSB3ZSB1c2UgU0dMJ3Mgc3BhY2UgYXMKLQkgKiBxdWV1ZSBpbmZvIHN0cnVjdHVyZQotCSAqCi0JICogV2Ugd2lsbCBub3QgZ2V0IGEgTlVMTCBjb21tYW5kIGJlbG93LiBXZSBqdXN0IGNyZWF0ZWQgdGhlIHBvb2wuCi0JICovCi0JY21kID0gbWVnYXNhc19nZXRfY21kKGluc3RhbmNlKTsKLQotCWluaXRfZnJhbWUgPSAoc3RydWN0IG1lZ2FzYXNfaW5pdF9mcmFtZSAqKWNtZC0+ZnJhbWU7Ci0JaW5pdHFfaW5mbyA9IChzdHJ1Y3QgbWVnYXNhc19pbml0X3F1ZXVlX2luZm8gKikKLQkJKCh1bnNpZ25lZCBsb25nKWluaXRfZnJhbWUgKyA2NCk7Ci0KLQlpbml0X2ZyYW1lX2ggPSBjbWQtPmZyYW1lX3BoeXNfYWRkcjsKLQlpbml0cV9pbmZvX2ggPSBpbml0X2ZyYW1lX2ggKyA2NDsKLQotCWNvbnRleHQgPSBpbml0X2ZyYW1lLT5jb250ZXh0OwotCW1lbXNldChpbml0X2ZyYW1lLCAwLCBNRUdBTUZJX0ZSQU1FX1NJWkUpOwotCW1lbXNldChpbml0cV9pbmZvLCAwLCBzaXplb2Yoc3RydWN0IG1lZ2FzYXNfaW5pdF9xdWV1ZV9pbmZvKSk7Ci0JaW5pdF9mcmFtZS0+Y29udGV4dCA9IGNvbnRleHQ7Ci0KLQlpbml0cV9pbmZvLT5yZXBseV9xdWV1ZV9lbnRyaWVzID0gaW5zdGFuY2UtPm1heF9md19jbWRzICsgMTsKLQlpbml0cV9pbmZvLT5yZXBseV9xdWV1ZV9zdGFydF9waHlzX2FkZHJfbG8gPSBpbnN0YW5jZS0+cmVwbHlfcXVldWVfaDsKLQotCWluaXRxX2luZm8tPnByb2R1Y2VyX2luZGV4X3BoeXNfYWRkcl9sbyA9IGluc3RhbmNlLT5wcm9kdWNlcl9oOwotCWluaXRxX2luZm8tPmNvbnN1bWVyX2luZGV4X3BoeXNfYWRkcl9sbyA9IGluc3RhbmNlLT5jb25zdW1lcl9oOwotCi0JaW5pdF9mcmFtZS0+Y21kID0gTUZJX0NNRF9JTklUOwotCWluaXRfZnJhbWUtPmNtZF9zdGF0dXMgPSAweEZGOwotCWluaXRfZnJhbWUtPnF1ZXVlX2luZm9fbmV3X3BoeXNfYWRkcl9sbyA9IGluaXRxX2luZm9faDsKLQotCWluaXRfZnJhbWUtPmRhdGFfeGZlcl9sZW4gPSBzaXplb2Yoc3RydWN0IG1lZ2FzYXNfaW5pdF9xdWV1ZV9pbmZvKTsKLQotCS8qCi0JICogZGlzYWJsZSB0aGUgaW50ciBiZWZvcmUgZmlyaW5nIHRoZSBpbml0IGZyYW1lIHRvIEZXCi0JICovCi0JaW5zdGFuY2UtPmluc3RhbmNldC0+ZGlzYWJsZV9pbnRyKGluc3RhbmNlLT5yZWdfc2V0KTsKLQotCS8qCi0JICogSXNzdWUgdGhlIGluaXQgZnJhbWUgaW4gcG9sbGVkIG1vZGUKLQkgKi8KLQotCWlmIChtZWdhc2FzX2lzc3VlX3BvbGxlZChpbnN0YW5jZSwgY21kKSkgewotCQlwcmludGsoS0VSTl9FUlIgIm1lZ2FzYXM6IEZhaWxlZCB0byBpbml0IGZpcm13YXJlXG4iKTsKLQkJbWVnYXNhc19yZXR1cm5fY21kKGluc3RhbmNlLCBjbWQpOwotCQlnb3RvIGZhaWxfZndfaW5pdDsKLQl9Ci0KLQltZWdhc2FzX3JldHVybl9jbWQoaW5zdGFuY2UsIGNtZCk7Ci0KLQlyZXR1cm4gMDsKLQotZmFpbF9md19pbml0OgotCXJldHVybiAtRUlOVkFMOwotfQotCi0vKioKLSAqIG1lZ2FzYXNfc3RhcnRfdGltZXIgLSBJbml0aWFsaXplcyBhIHRpbWVyIG9iamVjdAotICogQGluc3RhbmNlOgkJQWRhcHRlciBzb2Z0IHN0YXRlCi0gKiBAdGltZXI6CQl0aW1lciBvYmplY3QgdG8gYmUgaW5pdGlhbGl6ZWQKLSAqIEBmbjoJCQl0aW1lciBmdW5jdGlvbgotICogQGludGVydmFsOgkJdGltZSBpbnRlcnZhbCBiZXR3ZWVuIHRpbWVyIGZ1bmN0aW9uIGNhbGwKLSAqLwotc3RhdGljIGlubGluZSB2b2lkCi1tZWdhc2FzX3N0YXJ0X3RpbWVyKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSwKLQkJCXN0cnVjdCB0aW1lcl9saXN0ICp0aW1lciwKLQkJCXZvaWQgKmZuLCB1bnNpZ25lZCBsb25nIGludGVydmFsKQotewotCWluaXRfdGltZXIodGltZXIpOwotCXRpbWVyLT5leHBpcmVzID0gamlmZmllcyArIGludGVydmFsOwotCXRpbWVyLT5kYXRhID0gKHVuc2lnbmVkIGxvbmcpaW5zdGFuY2U7Ci0JdGltZXItPmZ1bmN0aW9uID0gZm47Ci0JYWRkX3RpbWVyKHRpbWVyKTsKLX0KLQotLyoqCi0gKiBtZWdhc2FzX2lvX2NvbXBsZXRpb25fdGltZXIgLSBUaW1lciBmbgotICogQGluc3RhbmNlX2FkZHI6CUFkZHJlc3Mgb2YgYWRhcHRlciBzb2Z0IHN0YXRlCi0gKgotICogU2NoZWR1bGVzIHRhc2tsZXQgZm9yIGNtZCBjb21wbGV0aW9uCi0gKiBpZiBwb2xsX21vZGVfaW8gaXMgc2V0Ci0gKi8KLXN0YXRpYyB2b2lkCi1tZWdhc2FzX2lvX2NvbXBsZXRpb25fdGltZXIodW5zaWduZWQgbG9uZyBpbnN0YW5jZV9hZGRyKQotewotCXN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSA9Ci0JCQkoc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKilpbnN0YW5jZV9hZGRyOwotCi0JaWYgKGF0b21pY19yZWFkKCZpbnN0YW5jZS0+Zndfb3V0c3RhbmRpbmcpKQotCQl0YXNrbGV0X3NjaGVkdWxlKCZpbnN0YW5jZS0+aXNyX3Rhc2tsZXQpOwotCi0JLyogUmVzdGFydCB0aW1lciAqLwotCWlmIChwb2xsX21vZGVfaW8pCi0JCW1vZF90aW1lcigmaW5zdGFuY2UtPmlvX2NvbXBsZXRpb25fdGltZXIsCi0JCQlqaWZmaWVzICsgTUVHQVNBU19DT01QTEVUSU9OX1RJTUVSX0lOVEVSVkFMKTsKLX0KLQotLyoqCi0gKiBtZWdhc2FzX2luaXRfbWZpIC0JSW5pdGlhbGl6ZXMgdGhlIEZXCi0gKiBAaW5zdGFuY2U6CQlBZGFwdGVyIHNvZnQgc3RhdGUKLSAqCi0gKiBUaGlzIGlzIHRoZSBtYWluIGZ1bmN0aW9uIGZvciBpbml0aWFsaXppbmcgTUZJIGZpcm13YXJlLgotICovCi1zdGF0aWMgaW50IG1lZ2FzYXNfaW5pdF9tZmkoc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlKQotewotCXUzMiBjb250ZXh0X3N6OwotCXUzMiByZXBseV9xX3N6OwotCXUzMiBtYXhfc2VjdG9yc18xOwotCXUzMiBtYXhfc2VjdG9yc18yOwotCXUzMiB0bXBfc2VjdG9yczsKLQlzdHJ1Y3QgbWVnYXNhc19yZWdpc3Rlcl9zZXQgX19pb21lbSAqcmVnX3NldDsKLQlzdHJ1Y3QgbWVnYXNhc19jdHJsX2luZm8gKmN0cmxfaW5mbzsKLQkvKgotCSAqIE1hcCB0aGUgbWVzc2FnZSByZWdpc3RlcnMKLQkgKi8KLQlpZiAoKGluc3RhbmNlLT5wZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9MU0lfU0FTMTA3OEdFTjIpIHx8Ci0JCShpbnN0YW5jZS0+cGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfTFNJX1NBUzAwNzFTS0lOTlkpIHx8Ci0JCShpbnN0YW5jZS0+cGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfTFNJX1NBUzAwNzNTS0lOTlkpIHx8Ci0JCShpbnN0YW5jZS0+cGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfTFNJX1NBUzAwNzlHRU4yKSkgewotCQlpbnN0YW5jZS0+YmFzZV9hZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KGluc3RhbmNlLT5wZGV2LCAxKTsKLQl9IGVsc2UgewotCQlpbnN0YW5jZS0+YmFzZV9hZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KGluc3RhbmNlLT5wZGV2LCAwKTsKLQl9Ci0KLQlpZiAocGNpX3JlcXVlc3Rfc2VsZWN0ZWRfcmVnaW9ucyhpbnN0YW5jZS0+cGRldiwKLQkJcGNpX3NlbGVjdF9iYXJzKGluc3RhbmNlLT5wZGV2LCBJT1JFU09VUkNFX01FTSksCi0JCSJtZWdhc2FzOiBMU0kiKSkgewotCQlwcmludGsoS0VSTl9ERUJVRyAibWVnYXNhczogSU8gbWVtb3J5IHJlZ2lvbiBidXN5IVxuIik7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCi0JaW5zdGFuY2UtPnJlZ19zZXQgPSBpb3JlbWFwX25vY2FjaGUoaW5zdGFuY2UtPmJhc2VfYWRkciwgODE5Mik7Ci0KLQlpZiAoIWluc3RhbmNlLT5yZWdfc2V0KSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJtZWdhc2FzOiBGYWlsZWQgdG8gbWFwIElPIG1lbVxuIik7Ci0JCWdvdG8gZmFpbF9pb3JlbWFwOwotCX0KLQotCXJlZ19zZXQgPSBpbnN0YW5jZS0+cmVnX3NldDsKLQotCXN3aXRjaChpbnN0YW5jZS0+cGRldi0+ZGV2aWNlKQotCXsKLQkJY2FzZSBQQ0lfREVWSUNFX0lEX0xTSV9TQVMxMDc4UjoKLQkJY2FzZSBQQ0lfREVWSUNFX0lEX0xTSV9TQVMxMDc4REU6Ci0JCQlpbnN0YW5jZS0+aW5zdGFuY2V0ID0gJm1lZ2FzYXNfaW5zdGFuY2VfdGVtcGxhdGVfcHBjOwotCQkJYnJlYWs7Ci0JCWNhc2UgUENJX0RFVklDRV9JRF9MU0lfU0FTMTA3OEdFTjI6Ci0JCWNhc2UgUENJX0RFVklDRV9JRF9MU0lfU0FTMDA3OUdFTjI6Ci0JCQlpbnN0YW5jZS0+aW5zdGFuY2V0ID0gJm1lZ2FzYXNfaW5zdGFuY2VfdGVtcGxhdGVfZ2VuMjsKLQkJCWJyZWFrOwotCQljYXNlIFBDSV9ERVZJQ0VfSURfTFNJX1NBUzAwNzNTS0lOTlk6Ci0JCWNhc2UgUENJX0RFVklDRV9JRF9MU0lfU0FTMDA3MVNLSU5OWToKLQkJCWluc3RhbmNlLT5pbnN0YW5jZXQgPSAmbWVnYXNhc19pbnN0YW5jZV90ZW1wbGF0ZV9za2lubnk7Ci0JCQlicmVhazsKLQkJY2FzZSBQQ0lfREVWSUNFX0lEX0xTSV9TQVMxMDY0UjoKLQkJY2FzZSBQQ0lfREVWSUNFX0lEX0RFTExfUEVSQzU6Ci0JCWRlZmF1bHQ6Ci0JCQlpbnN0YW5jZS0+aW5zdGFuY2V0ID0gJm1lZ2FzYXNfaW5zdGFuY2VfdGVtcGxhdGVfeHNjYWxlOwotCQkJYnJlYWs7Ci0JfQotCi0JLyoKLQkgKiBXZSBleHBlY3QgdGhlIEZXIHN0YXRlIHRvIGJlIFJFQURZCi0JICovCi0JaWYgKG1lZ2FzYXNfdHJhbnNpdGlvbl90b19yZWFkeShpbnN0YW5jZSkpCi0JCWdvdG8gZmFpbF9yZWFkeV9zdGF0ZTsKLQotCS8qCi0JICogR2V0IHZhcmlvdXMgb3BlcmF0aW9uYWwgcGFyYW1ldGVycyBmcm9tIHN0YXR1cyByZWdpc3RlcgotCSAqLwotCWluc3RhbmNlLT5tYXhfZndfY21kcyA9IGluc3RhbmNlLT5pbnN0YW5jZXQtPnJlYWRfZndfc3RhdHVzX3JlZyhyZWdfc2V0KSAmIDB4MDBGRkZGOwotCS8qCi0JICogUmVkdWNlIHRoZSBtYXggc3VwcG9ydGVkIGNtZHMgYnkgMS4gVGhpcyBpcyB0byBlbnN1cmUgdGhhdCB0aGUKLQkgKiByZXBseV9xX3N6ICgxIG1vcmUgdGhhbiB0aGUgbWF4IGNtZCB0aGF0IGRyaXZlciBtYXkgc2VuZCkKLQkgKiBkb2VzIG5vdCBleGNlZWQgbWF4IGNtZHMgdGhhdCB0aGUgRlcgY2FuIHN1cHBvcnQKLQkgKi8KLQlpbnN0YW5jZS0+bWF4X2Z3X2NtZHMgPSBpbnN0YW5jZS0+bWF4X2Z3X2NtZHMtMTsKLQlpbnN0YW5jZS0+bWF4X251bV9zZ2UgPSAoaW5zdGFuY2UtPmluc3RhbmNldC0+cmVhZF9md19zdGF0dXNfcmVnKHJlZ19zZXQpICYgMHhGRjAwMDApID4+IAotCQkJCQkweDEwOwotCS8qCi0JICogQ3JlYXRlIGEgcG9vbCBvZiBjb21tYW5kcwotCSAqLwotCWlmIChtZWdhc2FzX2FsbG9jX2NtZHMoaW5zdGFuY2UpKQotCQlnb3RvIGZhaWxfYWxsb2NfY21kczsKLQotCS8qCi0JICogQWxsb2NhdGUgbWVtb3J5IGZvciByZXBseSBxdWV1ZS4gTGVuZ3RoIG9mIHJlcGx5IHF1ZXVlIHNob3VsZAotCSAqIGJlIF9vbmVfIG1vcmUgdGhhbiB0aGUgbWF4aW11bSBjb21tYW5kcyBoYW5kbGVkIGJ5IHRoZSBmaXJtd2FyZS4KLQkgKgotCSAqIE5vdGU6IFdoZW4gRlcgY29tcGxldGVzIGNvbW1hbmRzLCBpdCBwbGFjZXMgY29ycmVzcG9uZGluZyBjb250ZXgKLQkgKiB2YWx1ZXMgaW4gdGhpcyBjaXJjdWxhciByZXBseSBxdWV1ZS4gVGhpcyBjaXJjdWxhciBxdWV1ZSBpcyBhIGZhaXJseQotCSAqIHR5cGljYWwgcHJvZHVjZXItY29uc3VtZXIgcXVldWUuIEZXIGlzIHRoZSBwcm9kdWNlciAob2YgY29tcGxldGVkCi0JICogY29tbWFuZHMpIGFuZCB0aGUgZHJpdmVyIGlzIHRoZSBjb25zdW1lci4KLQkgKi8KLQljb250ZXh0X3N6ID0gc2l6ZW9mKHUzMik7Ci0JcmVwbHlfcV9zeiA9IGNvbnRleHRfc3ogKiAoaW5zdGFuY2UtPm1heF9md19jbWRzICsgMSk7Ci0KLQlpbnN0YW5jZS0+cmVwbHlfcXVldWUgPSBwY2lfYWxsb2NfY29uc2lzdGVudChpbnN0YW5jZS0+cGRldiwKLQkJCQkJCSAgICAgcmVwbHlfcV9zeiwKLQkJCQkJCSAgICAgJmluc3RhbmNlLT5yZXBseV9xdWV1ZV9oKTsKLQotCWlmICghaW5zdGFuY2UtPnJlcGx5X3F1ZXVlKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJtZWdhc2FzOiBPdXQgb2YgRE1BIG1lbSBmb3IgcmVwbHkgcXVldWVcbiIpOwotCQlnb3RvIGZhaWxfcmVwbHlfcXVldWU7Ci0JfQotCi0JaWYgKG1lZ2FzYXNfaXNzdWVfaW5pdF9tZmkoaW5zdGFuY2UpKQotCQlnb3RvIGZhaWxfZndfaW5pdDsKLQotCWluc3RhbmNlLT5md19zdXBwb3J0X2llZWUgPSAwOwotCWluc3RhbmNlLT5md19zdXBwb3J0X2llZWUgPQotCQkoaW5zdGFuY2UtPmluc3RhbmNldC0+cmVhZF9md19zdGF0dXNfcmVnKHJlZ19zZXQpICYKLQkJMHgwNDAwMDAwMCk7Ci0KLQlwcmludGsoS0VSTl9OT1RJQ0UgIm1lZ2FzYXNfaW5pdF9tZmk6IGZ3X3N1cHBvcnRfaWVlZT0lZCIsCi0JCQlpbnN0YW5jZS0+Zndfc3VwcG9ydF9pZWVlKTsKLQotCWlmIChpbnN0YW5jZS0+Zndfc3VwcG9ydF9pZWVlKQotCQlpbnN0YW5jZS0+ZmxhZ19pZWVlID0gMTsKLQotCS8qKiBmb3IgcGFzc3Rocm91Z2gKLQkqIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gd2lsbCBnZXQgdGhlIFBEIExJU1QuCi0JKi8KLQotCW1lbXNldChpbnN0YW5jZS0+cGRfbGlzdCwgMCAsCi0JCShNRUdBU0FTX01BWF9QRCAqIHNpemVvZihzdHJ1Y3QgbWVnYXNhc19wZF9saXN0KSkpOwotCW1lZ2FzYXNfZ2V0X3BkX2xpc3QoaW5zdGFuY2UpOwotCi0JbWVtc2V0KGluc3RhbmNlLT5sZF9pZHMsIDB4ZmYsIE1FR0FTQVNfTUFYX0xEX0lEUyk7Ci0JbWVnYXNhc19nZXRfbGRfbGlzdChpbnN0YW5jZSk7Ci0KLQljdHJsX2luZm8gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWVnYXNhc19jdHJsX2luZm8pLCBHRlBfS0VSTkVMKTsKLQotCS8qCi0JICogQ29tcHV0ZSB0aGUgbWF4IGFsbG93ZWQgc2VjdG9ycyBwZXIgSU86IFRoZSBjb250cm9sbGVyIGluZm8gaGFzIHR3bwotCSAqIGxpbWl0cyBvbiBtYXggc2VjdG9ycy4gRHJpdmVyIHNob3VsZCB1c2UgdGhlIG1pbmltdW0gb2YgdGhlc2UgdHdvLgotCSAqCi0JICogMSA8PCBzdHJpcGVfc3pfb3BzLm1pbiA9IG1heCBzZWN0b3JzIHBlciBzdHJpcAotCSAqCi0JICogTm90ZSB0aGF0IG9sZGVyIGZpcm13YXJlcyAoIDwgRlcgdmVyIDMwKSBkaWRuJ3QgcmVwb3J0IGluZm9ybWF0aW9uCi0JICogdG8gY2FsY3VsYXRlIG1heF9zZWN0b3JzXzEuIFNvIHRoZSBudW1iZXIgZW5kZWQgdXAgYXMgemVybyBhbHdheXMuCi0JICovCi0JdG1wX3NlY3RvcnMgPSAwOwotCWlmIChjdHJsX2luZm8gJiYgIW1lZ2FzYXNfZ2V0X2N0cmxfaW5mbyhpbnN0YW5jZSwgY3RybF9pbmZvKSkgewotCi0JCW1heF9zZWN0b3JzXzEgPSAoMSA8PCBjdHJsX2luZm8tPnN0cmlwZV9zel9vcHMubWluKSAqCi0JCSAgICBjdHJsX2luZm8tPm1heF9zdHJpcHNfcGVyX2lvOwotCQltYXhfc2VjdG9yc18yID0gY3RybF9pbmZvLT5tYXhfcmVxdWVzdF9zaXplOwotCi0JCXRtcF9zZWN0b3JzID0gbWluX3QodTMyLCBtYXhfc2VjdG9yc18xICwgbWF4X3NlY3RvcnNfMik7Ci0JCWluc3RhbmNlLT5kaXNhYmxlT25saW5lQ3RybFJlc2V0ID0KLQkJY3RybF9pbmZvLT5wcm9wZXJ0aWVzLk9uT2ZmUHJvcGVydGllcy5kaXNhYmxlT25saW5lQ3RybFJlc2V0OwotCX0KLQotCWluc3RhbmNlLT5tYXhfc2VjdG9yc19wZXJfcmVxID0gaW5zdGFuY2UtPm1heF9udW1fc2dlICoKLQkJCQkJCVBBR0VfU0laRSAvIDUxMjsKLQlpZiAodG1wX3NlY3RvcnMgJiYgKGluc3RhbmNlLT5tYXhfc2VjdG9yc19wZXJfcmVxID4gdG1wX3NlY3RvcnMpKQotCQlpbnN0YW5jZS0+bWF4X3NlY3RvcnNfcGVyX3JlcSA9IHRtcF9zZWN0b3JzOwotCi0Ja2ZyZWUoY3RybF9pbmZvKTsKLQotICAgICAgICAvKgotCSogU2V0dXAgdGFza2xldCBmb3IgY21kIGNvbXBsZXRpb24KLQkqLwotCi0JdGFza2xldF9pbml0KCZpbnN0YW5jZS0+aXNyX3Rhc2tsZXQsIG1lZ2FzYXNfY29tcGxldGVfY21kX2RwYywKLQkJKHVuc2lnbmVkIGxvbmcpaW5zdGFuY2UpOwotCi0JLyogSW5pdGlhbGl6ZSB0aGUgY21kIGNvbXBsZXRpb24gdGltZXIgKi8KLQlpZiAocG9sbF9tb2RlX2lvKQotCQltZWdhc2FzX3N0YXJ0X3RpbWVyKGluc3RhbmNlLCAmaW5zdGFuY2UtPmlvX2NvbXBsZXRpb25fdGltZXIsCi0JCQkJbWVnYXNhc19pb19jb21wbGV0aW9uX3RpbWVyLAotCQkJCU1FR0FTQVNfQ09NUExFVElPTl9USU1FUl9JTlRFUlZBTCk7Ci0JcmV0dXJuIDA7Ci0KLSAgICAgIGZhaWxfZndfaW5pdDoKLQotCXBjaV9mcmVlX2NvbnNpc3RlbnQoaW5zdGFuY2UtPnBkZXYsIHJlcGx5X3Ffc3osCi0JCQkgICAgaW5zdGFuY2UtPnJlcGx5X3F1ZXVlLCBpbnN0YW5jZS0+cmVwbHlfcXVldWVfaCk7Ci0gICAgICBmYWlsX3JlcGx5X3F1ZXVlOgotCW1lZ2FzYXNfZnJlZV9jbWRzKGluc3RhbmNlKTsKLQotICAgICAgZmFpbF9hbGxvY19jbWRzOgotICAgICAgZmFpbF9yZWFkeV9zdGF0ZToKLQlpb3VubWFwKGluc3RhbmNlLT5yZWdfc2V0KTsKLQotICAgICAgZmFpbF9pb3JlbWFwOgotCXBjaV9yZWxlYXNlX3NlbGVjdGVkX3JlZ2lvbnMoaW5zdGFuY2UtPnBkZXYsCi0JCXBjaV9zZWxlY3RfYmFycyhpbnN0YW5jZS0+cGRldiwgSU9SRVNPVVJDRV9NRU0pKTsKLQotCXJldHVybiAtRUlOVkFMOwotfQotCi0vKioKLSAqIG1lZ2FzYXNfcmVsZWFzZV9tZmkgLQlSZXZlcnNlcyB0aGUgRlcgaW5pdGlhbGl6YXRpb24KLSAqIEBpbnRhbmNlOgkJCUFkYXB0ZXIgc29mdCBzdGF0ZQotICovCi1zdGF0aWMgdm9pZCBtZWdhc2FzX3JlbGVhc2VfbWZpKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSkKLXsKLQl1MzIgcmVwbHlfcV9zeiA9IHNpemVvZih1MzIpICogKGluc3RhbmNlLT5tYXhfZndfY21kcyArIDEpOwotCi0JcGNpX2ZyZWVfY29uc2lzdGVudChpbnN0YW5jZS0+cGRldiwgcmVwbHlfcV9zeiwKLQkJCSAgICBpbnN0YW5jZS0+cmVwbHlfcXVldWUsIGluc3RhbmNlLT5yZXBseV9xdWV1ZV9oKTsKLQotCW1lZ2FzYXNfZnJlZV9jbWRzKGluc3RhbmNlKTsKLQotCWlvdW5tYXAoaW5zdGFuY2UtPnJlZ19zZXQpOwotCi0JcGNpX3JlbGVhc2Vfc2VsZWN0ZWRfcmVnaW9ucyhpbnN0YW5jZS0+cGRldiwKLQkJcGNpX3NlbGVjdF9iYXJzKGluc3RhbmNlLT5wZGV2LCBJT1JFU09VUkNFX01FTSkpOwotfQotCi0vKioKLSAqIG1lZ2FzYXNfZ2V0X3NlcV9udW0gLQlHZXRzIGxhdGVzdCBldmVudCBzZXF1ZW5jZSBudW1iZXJzCi0gKiBAaW5zdGFuY2U6CQkJQWRhcHRlciBzb2Z0IHN0YXRlCi0gKiBAZWxpOgkJCUZXIGV2ZW50IGxvZyBzZXF1ZW5jZSBudW1iZXJzIGluZm9ybWF0aW9uCi0gKgotICogRlcgbWFpbnRhaW5zIGEgbG9nIG9mIGFsbCBldmVudHMgaW4gYSBub24tdm9sYXRpbGUgYXJlYS4gVXBwZXIgbGF5ZXJzIHdvdWxkCi0gKiB1c3VhbGx5IGZpbmQgb3V0IHRoZSBsYXRlc3Qgc2VxdWVuY2UgbnVtYmVyIG9mIHRoZSBldmVudHMsIHRoZSBzZXEgbnVtYmVyIGF0Ci0gKiB0aGUgYm9vdCBldGMuIFRoZXkgd291bGQgInJlYWQiIGFsbCB0aGUgZXZlbnRzIGJlbG93IHRoZSBsYXRlc3Qgc2VxIG51bWJlcgotICogYnkgaXNzdWluZyBhIGRpcmVjdCBmdyBjbWQgKERDTUQpLiBGb3IgdGhlIGZ1dHVyZSBldmVudHMgKGJleW9uZCBsYXRlc3Qgc2VxCi0gKiBudW1iZXIpLCB0aGV5IHdvdWxkIHN1YnNyaWJlIHRvIEFFTiAoYXN5bmNocm9ub3VzIGV2ZW50IG5vdGlmaWNhdGlvbikgYW5kCi0gKiB3YWl0IGZvciB0aGUgZXZlbnRzIHRvIGhhcHBlbi4KLSAqLwotc3RhdGljIGludAotbWVnYXNhc19nZXRfc2VxX251bShzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UsCi0JCSAgICBzdHJ1Y3QgbWVnYXNhc19ldnRfbG9nX2luZm8gKmVsaSkKLXsKLQlzdHJ1Y3QgbWVnYXNhc19jbWQgKmNtZDsKLQlzdHJ1Y3QgbWVnYXNhc19kY21kX2ZyYW1lICpkY21kOwotCXN0cnVjdCBtZWdhc2FzX2V2dF9sb2dfaW5mbyAqZWxfaW5mbzsKLQlkbWFfYWRkcl90IGVsX2luZm9faCA9IDA7Ci0KLQljbWQgPSBtZWdhc2FzX2dldF9jbWQoaW5zdGFuY2UpOwotCi0JaWYgKCFjbWQpIHsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JZGNtZCA9ICZjbWQtPmZyYW1lLT5kY21kOwotCWVsX2luZm8gPSBwY2lfYWxsb2NfY29uc2lzdGVudChpbnN0YW5jZS0+cGRldiwKLQkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBtZWdhc2FzX2V2dF9sb2dfaW5mbyksCi0JCQkJICAgICAgICZlbF9pbmZvX2gpOwotCi0JaWYgKCFlbF9pbmZvKSB7Ci0JCW1lZ2FzYXNfcmV0dXJuX2NtZChpbnN0YW5jZSwgY21kKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JbWVtc2V0KGVsX2luZm8sIDAsIHNpemVvZigqZWxfaW5mbykpOwotCW1lbXNldChkY21kLT5tYm94LmIsIDAsIE1GSV9NQk9YX1NJWkUpOwotCi0JZGNtZC0+Y21kID0gTUZJX0NNRF9EQ01EOwotCWRjbWQtPmNtZF9zdGF0dXMgPSAweDA7Ci0JZGNtZC0+c2dlX2NvdW50ID0gMTsKLQlkY21kLT5mbGFncyA9IE1GSV9GUkFNRV9ESVJfUkVBRDsKLQlkY21kLT50aW1lb3V0ID0gMDsKLQlkY21kLT5wYWRfMCA9IDA7Ci0JZGNtZC0+ZGF0YV94ZmVyX2xlbiA9IHNpemVvZihzdHJ1Y3QgbWVnYXNhc19ldnRfbG9nX2luZm8pOwotCWRjbWQtPm9wY29kZSA9IE1SX0RDTURfQ1RSTF9FVkVOVF9HRVRfSU5GTzsKLQlkY21kLT5zZ2wuc2dlMzJbMF0ucGh5c19hZGRyID0gZWxfaW5mb19oOwotCWRjbWQtPnNnbC5zZ2UzMlswXS5sZW5ndGggPSBzaXplb2Yoc3RydWN0IG1lZ2FzYXNfZXZ0X2xvZ19pbmZvKTsKLQotCW1lZ2FzYXNfaXNzdWVfYmxvY2tlZF9jbWQoaW5zdGFuY2UsIGNtZCk7Ci0KLQkvKgotCSAqIENvcHkgdGhlIGRhdGEgYmFjayBpbnRvIGNhbGxlcnMgYnVmZmVyCi0JICovCi0JbWVtY3B5KGVsaSwgZWxfaW5mbywgc2l6ZW9mKHN0cnVjdCBtZWdhc2FzX2V2dF9sb2dfaW5mbykpOwotCi0JcGNpX2ZyZWVfY29uc2lzdGVudChpbnN0YW5jZS0+cGRldiwgc2l6ZW9mKHN0cnVjdCBtZWdhc2FzX2V2dF9sb2dfaW5mbyksCi0JCQkgICAgZWxfaW5mbywgZWxfaW5mb19oKTsKLQotCW1lZ2FzYXNfcmV0dXJuX2NtZChpbnN0YW5jZSwgY21kKTsKLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqIG1lZ2FzYXNfcmVnaXN0ZXJfYWVuIC0JUmVnaXN0ZXJzIGZvciBhc3luY2hyb25vdXMgZXZlbnQgbm90aWZpY2F0aW9uCi0gKiBAaW5zdGFuY2U6CQkJQWRhcHRlciBzb2Z0IHN0YXRlCi0gKiBAc2VxX251bToJCQlUaGUgc3RhcnRpbmcgc2VxdWVuY2UgbnVtYmVyCi0gKiBAY2xhc3NfbG9jYWxlOgkJQ2xhc3Mgb2YgdGhlIGV2ZW50Ci0gKgotICogVGhpcyBmdW5jdGlvbiBzdWJzY3JpYmVzIGZvciBBRU4gZm9yIGV2ZW50cyBiZXlvbmQgdGhlIEBzZXFfbnVtLiBJdCByZXF1ZXN0cwotICogdG8gYmUgbm90aWZpZWQgaWYgYW5kIG9ubHkgaWYgdGhlIGV2ZW50IGlzIG9mIHR5cGUgQGNsYXNzX2xvY2FsZQotICovCi1zdGF0aWMgaW50Ci1tZWdhc2FzX3JlZ2lzdGVyX2FlbihzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UsIHUzMiBzZXFfbnVtLAotCQkgICAgIHUzMiBjbGFzc19sb2NhbGVfd29yZCkKLXsKLQlpbnQgcmV0X3ZhbDsKLQlzdHJ1Y3QgbWVnYXNhc19jbWQgKmNtZDsKLQlzdHJ1Y3QgbWVnYXNhc19kY21kX2ZyYW1lICpkY21kOwotCXVuaW9uIG1lZ2FzYXNfZXZ0X2NsYXNzX2xvY2FsZSBjdXJyX2FlbjsKLQl1bmlvbiBtZWdhc2FzX2V2dF9jbGFzc19sb2NhbGUgcHJldl9hZW47Ci0KLQkvKgotCSAqIElmIHRoZXJlIGFuIEFFTiBwZW5kaW5nIGFscmVhZHkgKGFlbl9jbWQpLCBjaGVjayBpZiB0aGUKLQkgKiBjbGFzc19sb2NhbGUgb2YgdGhhdCBwZW5kaW5nIEFFTiBpcyBpbmNsdXNpdmUgb2YgdGhlIG5ldwotCSAqIEFFTiByZXF1ZXN0IHdlIGN1cnJlbnRseSBoYXZlLiBJZiBpdCBpcywgdGhlbiB3ZSBkb24ndCBoYXZlCi0JICogdG8gZG8gYW55dGhpbmcuIEluIG90aGVyIHdvcmRzLCB3aGljaGV2ZXIgZXZlbnRzIHRoZSBjdXJyZW50Ci0JICogQUVOIHJlcXVlc3QgaXMgc3Vic2NyaWJpbmcgdG8sIGhhdmUgYWxyZWFkeSBiZWVuIHN1YnNjcmliZWQKLQkgKiB0by4KLQkgKgotCSAqIElmIHRoZSBvbGRfY21kIGlzIF9ub3RfIGluY2x1c2l2ZSwgdGhlbiB3ZSBoYXZlIHRvIGFib3J0Ci0JICogdGhhdCBjb21tYW5kLCBmb3JtIGEgY2xhc3NfbG9jYWxlIHRoYXQgaXMgc3VwZXJzZXQgb2YgYm90aAotCSAqIG9sZCBhbmQgY3VycmVudCBhbmQgcmUtaXNzdWUgdG8gdGhlIEZXCi0JICovCi0KLQljdXJyX2Flbi53b3JkID0gY2xhc3NfbG9jYWxlX3dvcmQ7Ci0KLQlpZiAoaW5zdGFuY2UtPmFlbl9jbWQpIHsKLQotCQlwcmV2X2Flbi53b3JkID0gaW5zdGFuY2UtPmFlbl9jbWQtPmZyYW1lLT5kY21kLm1ib3gud1sxXTsKLQotCQkvKgotCQkgKiBBIGNsYXNzIHdob3NlIGVudW0gdmFsdWUgaXMgc21hbGxlciBpcyBpbmNsdXNpdmUgb2YgYWxsCi0JCSAqIGhpZ2hlciB2YWx1ZXMuIElmIGEgUFJPR1JFU1MgKD0gLTEpIHdhcyBwcmV2aW91c2x5Ci0JCSAqIHJlZ2lzdGVyZWQsIHRoZW4gYSBuZXcgcmVnaXN0cmF0aW9uIHJlcXVlc3RzIGZvciBoaWdoZXIKLQkJICogY2xhc3NlcyBuZWVkIG5vdCBiZSBzZW50IHRvIEZXLiBUaGV5IGFyZSBhdXRvbWF0aWNhbGx5Ci0JCSAqIGluY2x1ZGVkLgotCQkgKgotCQkgKiBMb2NhbGUgbnVtYmVycyBkb24ndCBoYXZlIHN1Y2ggaGllcmFyY2h5LiBUaGV5IGFyZSBiaXRtYXAKLQkJICogdmFsdWVzCi0JCSAqLwotCQlpZiAoKHByZXZfYWVuLm1lbWJlcnMuY2xhc3MgPD0gY3Vycl9hZW4ubWVtYmVycy5jbGFzcykgJiYKLQkJICAgICEoKHByZXZfYWVuLm1lbWJlcnMubG9jYWxlICYgY3Vycl9hZW4ubWVtYmVycy5sb2NhbGUpIF4KLQkJICAgICAgY3Vycl9hZW4ubWVtYmVycy5sb2NhbGUpKSB7Ci0JCQkvKgotCQkJICogUHJldmlvdXNseSBpc3N1ZWQgZXZlbnQgcmVnaXN0cmF0aW9uIGluY2x1ZGVzCi0JCQkgKiBjdXJyZW50IHJlcXVlc3QuIE5vdGhpbmcgdG8gZG8uCi0JCQkgKi8KLQkJCXJldHVybiAwOwotCQl9IGVsc2UgewotCQkJY3Vycl9hZW4ubWVtYmVycy5sb2NhbGUgfD0gcHJldl9hZW4ubWVtYmVycy5sb2NhbGU7Ci0KLQkJCWlmIChwcmV2X2Flbi5tZW1iZXJzLmNsYXNzIDwgY3Vycl9hZW4ubWVtYmVycy5jbGFzcykKLQkJCQljdXJyX2Flbi5tZW1iZXJzLmNsYXNzID0gcHJldl9hZW4ubWVtYmVycy5jbGFzczsKLQotCQkJaW5zdGFuY2UtPmFlbl9jbWQtPmFib3J0X2FlbiA9IDE7Ci0JCQlyZXRfdmFsID0gbWVnYXNhc19pc3N1ZV9ibG9ja2VkX2Fib3J0X2NtZChpbnN0YW5jZSwKLQkJCQkJCQkJICBpbnN0YW5jZS0+Ci0JCQkJCQkJCSAgYWVuX2NtZCk7Ci0KLQkJCWlmIChyZXRfdmFsKSB7Ci0JCQkJcHJpbnRrKEtFUk5fREVCVUcgIm1lZ2FzYXM6IEZhaWxlZCB0byBhYm9ydCAiCi0JCQkJICAgICAgICJwcmV2aW91cyBBRU4gY29tbWFuZFxuIik7Ci0JCQkJcmV0dXJuIHJldF92YWw7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQljbWQgPSBtZWdhc2FzX2dldF9jbWQoaW5zdGFuY2UpOwotCi0JaWYgKCFjbWQpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JZGNtZCA9ICZjbWQtPmZyYW1lLT5kY21kOwotCi0JbWVtc2V0KGluc3RhbmNlLT5ldnRfZGV0YWlsLCAwLCBzaXplb2Yoc3RydWN0IG1lZ2FzYXNfZXZ0X2RldGFpbCkpOwotCi0JLyoKLQkgKiBQcmVwYXJlIERDTUQgZm9yIGFlbiByZWdpc3RyYXRpb24KLQkgKi8KLQltZW1zZXQoZGNtZC0+bWJveC5iLCAwLCBNRklfTUJPWF9TSVpFKTsKLQotCWRjbWQtPmNtZCA9IE1GSV9DTURfRENNRDsKLQlkY21kLT5jbWRfc3RhdHVzID0gMHgwOwotCWRjbWQtPnNnZV9jb3VudCA9IDE7Ci0JZGNtZC0+ZmxhZ3MgPSBNRklfRlJBTUVfRElSX1JFQUQ7Ci0JZGNtZC0+dGltZW91dCA9IDA7Ci0JZGNtZC0+cGFkXzAgPSAwOwotCWluc3RhbmNlLT5sYXN0X3NlcV9udW0gPSBzZXFfbnVtOwotCWRjbWQtPmRhdGFfeGZlcl9sZW4gPSBzaXplb2Yoc3RydWN0IG1lZ2FzYXNfZXZ0X2RldGFpbCk7Ci0JZGNtZC0+b3Bjb2RlID0gTVJfRENNRF9DVFJMX0VWRU5UX1dBSVQ7Ci0JZGNtZC0+bWJveC53WzBdID0gc2VxX251bTsKLQlkY21kLT5tYm94LndbMV0gPSBjdXJyX2Flbi53b3JkOwotCWRjbWQtPnNnbC5zZ2UzMlswXS5waHlzX2FkZHIgPSAodTMyKSBpbnN0YW5jZS0+ZXZ0X2RldGFpbF9oOwotCWRjbWQtPnNnbC5zZ2UzMlswXS5sZW5ndGggPSBzaXplb2Yoc3RydWN0IG1lZ2FzYXNfZXZ0X2RldGFpbCk7Ci0KLQlpZiAoaW5zdGFuY2UtPmFlbl9jbWQgIT0gTlVMTCkgewotCQltZWdhc2FzX3JldHVybl9jbWQoaW5zdGFuY2UsIGNtZCk7Ci0JCXJldHVybiAwOwotCX0KLQotCS8qCi0JICogU3RvcmUgcmVmZXJlbmNlIHRvIHRoZSBjbWQgdXNlZCB0byByZWdpc3RlciBmb3IgQUVOLiBXaGVuIGFuCi0JICogYXBwbGljYXRpb24gd2FudHMgdXMgdG8gcmVnaXN0ZXIgZm9yIEFFTiwgd2UgaGF2ZSB0byBhYm9ydCB0aGlzCi0JICogY21kIGFuZCByZS1yZWdpc3RlciB3aXRoIGEgbmV3IEVWRU5UIExPQ0FMRSBzdXBwbGllZCBieSB0aGF0IGFwcAotCSAqLwotCWluc3RhbmNlLT5hZW5fY21kID0gY21kOwotCi0JLyoKLQkgKiBJc3N1ZSB0aGUgYWVuIHJlZ2lzdHJhdGlvbiBmcmFtZQotCSAqLwotCWluc3RhbmNlLT5pbnN0YW5jZXQtPmZpcmVfY21kKGluc3RhbmNlLAotCQkJY21kLT5mcmFtZV9waHlzX2FkZHIsIDAsIGluc3RhbmNlLT5yZWdfc2V0KTsKLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqIG1lZ2FzYXNfc3RhcnRfYWVuIC0JU3Vic2NyaWJlcyB0byBBRU4gZHVyaW5nIGRyaXZlciBsb2FkIHRpbWUKLSAqIEBpbnN0YW5jZToJCUFkYXB0ZXIgc29mdCBzdGF0ZQotICovCi1zdGF0aWMgaW50IG1lZ2FzYXNfc3RhcnRfYWVuKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSkKLXsKLQlzdHJ1Y3QgbWVnYXNhc19ldnRfbG9nX2luZm8gZWxpOwotCXVuaW9uIG1lZ2FzYXNfZXZ0X2NsYXNzX2xvY2FsZSBjbGFzc19sb2NhbGU7Ci0KLQkvKgotCSAqIEdldCB0aGUgbGF0ZXN0IHNlcXVlbmNlIG51bWJlciBmcm9tIEZXCi0JICovCi0JbWVtc2V0KCZlbGksIDAsIHNpemVvZihlbGkpKTsKLQotCWlmIChtZWdhc2FzX2dldF9zZXFfbnVtKGluc3RhbmNlLCAmZWxpKSkKLQkJcmV0dXJuIC0xOwotCi0JLyoKLQkgKiBSZWdpc3RlciBBRU4gd2l0aCBGVyBmb3IgbGF0ZXN0IHNlcXVlbmNlIG51bWJlciBwbHVzIDEKLQkgKi8KLQljbGFzc19sb2NhbGUubWVtYmVycy5yZXNlcnZlZCA9IDA7Ci0JY2xhc3NfbG9jYWxlLm1lbWJlcnMubG9jYWxlID0gTVJfRVZUX0xPQ0FMRV9BTEw7Ci0JY2xhc3NfbG9jYWxlLm1lbWJlcnMuY2xhc3MgPSBNUl9FVlRfQ0xBU1NfREVCVUc7Ci0KLQlyZXR1cm4gbWVnYXNhc19yZWdpc3Rlcl9hZW4oaW5zdGFuY2UsIGVsaS5uZXdlc3Rfc2VxX251bSArIDEsCi0JCQkJICAgIGNsYXNzX2xvY2FsZS53b3JkKTsKLX0KLQotLyoqCi0gKiBtZWdhc2FzX2lvX2F0dGFjaCAtCUF0dGFjaGVzIHRoaXMgZHJpdmVyIHRvIFNDU0kgbWlkLWxheWVyCi0gKiBAaW5zdGFuY2U6CQlBZGFwdGVyIHNvZnQgc3RhdGUKLSAqLwotc3RhdGljIGludCBtZWdhc2FzX2lvX2F0dGFjaChzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UpCi17Ci0Jc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IGluc3RhbmNlLT5ob3N0OwotCi0JLyoKLQkgKiBFeHBvcnQgcGFyYW1ldGVycyByZXF1aXJlZCBieSBTQ1NJIG1pZC1sYXllcgotCSAqLwotCWhvc3QtPmlycSA9IGluc3RhbmNlLT5wZGV2LT5pcnE7Ci0JaG9zdC0+dW5pcXVlX2lkID0gaW5zdGFuY2UtPnVuaXF1ZV9pZDsKLQlpZiAoKGluc3RhbmNlLT5wZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9MU0lfU0FTMDA3M1NLSU5OWSkgfHwKLQkJKGluc3RhbmNlLT5wZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9MU0lfU0FTMDA3MVNLSU5OWSkpIHsKLQkJaG9zdC0+Y2FuX3F1ZXVlID0KLQkJCWluc3RhbmNlLT5tYXhfZndfY21kcyAtIE1FR0FTQVNfU0tJTk5ZX0lOVF9DTURTOwotCX0gZWxzZQotCQlob3N0LT5jYW5fcXVldWUgPQotCQkJaW5zdGFuY2UtPm1heF9md19jbWRzIC0gTUVHQVNBU19JTlRfQ01EUzsKLQlob3N0LT50aGlzX2lkID0gaW5zdGFuY2UtPmluaXRfaWQ7Ci0JaG9zdC0+c2dfdGFibGVzaXplID0gaW5zdGFuY2UtPm1heF9udW1fc2dlOwotCS8qCi0JICogQ2hlY2sgaWYgdGhlIG1vZHVsZSBwYXJhbWV0ZXIgdmFsdWUgZm9yIG1heF9zZWN0b3JzIGNhbiBiZSB1c2VkCi0JICovCi0JaWYgKG1heF9zZWN0b3JzICYmIG1heF9zZWN0b3JzIDwgaW5zdGFuY2UtPm1heF9zZWN0b3JzX3Blcl9yZXEpCi0JCWluc3RhbmNlLT5tYXhfc2VjdG9yc19wZXJfcmVxID0gbWF4X3NlY3RvcnM7Ci0JZWxzZSB7Ci0JCWlmIChtYXhfc2VjdG9ycykgewotCQkJaWYgKCgoaW5zdGFuY2UtPnBkZXYtPmRldmljZSA9PQotCQkJCVBDSV9ERVZJQ0VfSURfTFNJX1NBUzEwNzhHRU4yKSB8fAotCQkJCShpbnN0YW5jZS0+cGRldi0+ZGV2aWNlID09Ci0JCQkJUENJX0RFVklDRV9JRF9MU0lfU0FTMDA3OUdFTjIpKSAmJgotCQkJCShtYXhfc2VjdG9ycyA8PSBNRUdBU0FTX01BWF9TRUNUT1JTKSkgewotCQkJCWluc3RhbmNlLT5tYXhfc2VjdG9yc19wZXJfcmVxID0gbWF4X3NlY3RvcnM7Ci0JCQl9IGVsc2UgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAibWVnYXNhczogbWF4X3NlY3RvcnMgc2hvdWxkIGJlID4gMCIKLQkJCQkiYW5kIDw9ICVkIChvciA8IDFNQiBmb3IgR0VOMiBjb250cm9sbGVyKVxuIiwKLQkJCQlpbnN0YW5jZS0+bWF4X3NlY3RvcnNfcGVyX3JlcSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlob3N0LT5tYXhfc2VjdG9ycyA9IGluc3RhbmNlLT5tYXhfc2VjdG9yc19wZXJfcmVxOwotCWhvc3QtPmNtZF9wZXJfbHVuID0gMTI4OwotCWhvc3QtPm1heF9jaGFubmVsID0gTUVHQVNBU19NQVhfQ0hBTk5FTFMgLSAxOwotCWhvc3QtPm1heF9pZCA9IE1FR0FTQVNfTUFYX0RFVl9QRVJfQ0hBTk5FTDsKLQlob3N0LT5tYXhfbHVuID0gTUVHQVNBU19NQVhfTFVOOwotCWhvc3QtPm1heF9jbWRfbGVuID0gMTY7Ci0KLQkvKgotCSAqIE5vdGlmeSB0aGUgbWlkLWxheWVyIGFib3V0IHRoZSBuZXcgY29udHJvbGxlcgotCSAqLwotCWlmIChzY3NpX2FkZF9ob3N0KGhvc3QsICZpbnN0YW5jZS0+cGRldi0+ZGV2KSkgewotCQlwcmludGsoS0VSTl9ERUJVRyAibWVnYXNhczogc2NzaV9hZGRfaG9zdCBmYWlsZWRcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQkvKgotCSAqIFRyaWdnZXIgU0NTSSB0byBzY2FuIG91ciBkcml2ZXMKLQkgKi8KLQlzY3NpX3NjYW5faG9zdChob3N0KTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotbWVnYXNhc19zZXRfZG1hX21hc2soc3RydWN0IHBjaV9kZXYgKnBkZXYpCi17Ci0JLyoKLQkgKiBBbGwgb3VyIGNvbnRvbGxlcnMgYXJlIGNhcGFibGUgb2YgcGVyZm9ybWluZyA2NC1iaXQgRE1BCi0JICovCi0JaWYgKElTX0RNQTY0KSB7Ci0JCWlmIChwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV9CSVRfTUFTSyg2NCkpICE9IDApIHsKLQotCQkJaWYgKHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDMyKSkgIT0gMCkKLQkJCQlnb3RvIGZhaWxfc2V0X2RtYV9tYXNrOwotCQl9Ci0JfSBlbHNlIHsKLQkJaWYgKHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDMyKSkgIT0gMCkKLQkJCWdvdG8gZmFpbF9zZXRfZG1hX21hc2s7Ci0JfQotCXJldHVybiAwOwotCi1mYWlsX3NldF9kbWFfbWFzazoKLQlyZXR1cm4gMTsKLX0KLQotLyoqCi0gKiBtZWdhc2FzX3Byb2JlX29uZSAtCVBDSSBob3RwbHVnIGVudHJ5IHBvaW50Ci0gKiBAcGRldjoJCVBDSSBkZXZpY2Ugc3RydWN0dXJlCi0gKiBAaWQ6CQkJUENJIGlkcyBvZiBzdXBwb3J0ZWQgaG90cGx1Z2dlZCBhZGFwdGVyCQotICovCi1zdGF0aWMgaW50IF9fZGV2aW5pdAotbWVnYXNhc19wcm9iZV9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKLXsKLQlpbnQgcnZhbDsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0OwotCXN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZTsKLQotCS8qCi0JICogQW5ub3VuY2UgUENJIGluZm9ybWF0aW9uCi0JICovCi0JcHJpbnRrKEtFUk5fSU5GTyAibWVnYXNhczogJSM0LjA0eDolIzQuMDR4OiUjNC4wNHg6JSM0LjA0eDogIiwKLQkgICAgICAgcGRldi0+dmVuZG9yLCBwZGV2LT5kZXZpY2UsIHBkZXYtPnN1YnN5c3RlbV92ZW5kb3IsCi0JICAgICAgIHBkZXYtPnN1YnN5c3RlbV9kZXZpY2UpOwotCi0JcHJpbnRrKCJidXMgJWQ6c2xvdCAlZDpmdW5jICVkXG4iLAotCSAgICAgICBwZGV2LT5idXMtPm51bWJlciwgUENJX1NMT1QocGRldi0+ZGV2Zm4pLCBQQ0lfRlVOQyhwZGV2LT5kZXZmbikpOwotCi0JLyoKLQkgKiBQQ0kgcHJlcHBpbmc6IGVuYWJsZSBkZXZpY2Ugc2V0IGJ1cyBtYXN0ZXJpbmcgYW5kIGRtYSBtYXNrCi0JICovCi0JcnZhbCA9IHBjaV9lbmFibGVfZGV2aWNlX21lbShwZGV2KTsKLQotCWlmIChydmFsKSB7Ci0JCXJldHVybiBydmFsOwotCX0KLQotCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwotCi0JaWYgKG1lZ2FzYXNfc2V0X2RtYV9tYXNrKHBkZXYpKQotCQlnb3RvIGZhaWxfc2V0X2RtYV9tYXNrOwotCi0JaG9zdCA9IHNjc2lfaG9zdF9hbGxvYygmbWVnYXNhc190ZW1wbGF0ZSwKLQkJCSAgICAgICBzaXplb2Yoc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UpKTsKLQotCWlmICghaG9zdCkgewotCQlwcmludGsoS0VSTl9ERUJVRyAibWVnYXNhczogc2NzaV9ob3N0X2FsbG9jIGZhaWxlZFxuIik7Ci0JCWdvdG8gZmFpbF9hbGxvY19pbnN0YW5jZTsKLQl9Ci0KLQlpbnN0YW5jZSA9IChzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqKWhvc3QtPmhvc3RkYXRhOwotCW1lbXNldChpbnN0YW5jZSwgMCwgc2l6ZW9mKCppbnN0YW5jZSkpOwotCWF0b21pY19zZXQoICZpbnN0YW5jZS0+ZndfcmVzZXRfbm9fcGNpX2FjY2VzcywgMCApOwotCi0JaW5zdGFuY2UtPnByb2R1Y2VyID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocGRldiwgc2l6ZW9mKHUzMiksCi0JCQkJCQkgICZpbnN0YW5jZS0+cHJvZHVjZXJfaCk7Ci0JaW5zdGFuY2UtPmNvbnN1bWVyID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocGRldiwgc2l6ZW9mKHUzMiksCi0JCQkJCQkgICZpbnN0YW5jZS0+Y29uc3VtZXJfaCk7Ci0KLQlpZiAoIWluc3RhbmNlLT5wcm9kdWNlciB8fCAhaW5zdGFuY2UtPmNvbnN1bWVyKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJtZWdhc2FzOiBGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciAiCi0JCSAgICAgICAicHJvZHVjZXIsIGNvbnN1bWVyXG4iKTsKLQkJZ290byBmYWlsX2FsbG9jX2RtYV9idWY7Ci0JfQotCi0JKmluc3RhbmNlLT5wcm9kdWNlciA9IDA7Ci0JKmluc3RhbmNlLT5jb25zdW1lciA9IDA7Ci0JbWVnYXNhc19wb2xsX3dhaXRfYWVuID0gMDsKLQlpbnN0YW5jZS0+ZmxhZ19pZWVlID0gMDsKLQlpbnN0YW5jZS0+ZXYgPSBOVUxMOwotCWluc3RhbmNlLT5pc3N1ZXBlbmRfZG9uZSA9IDE7Ci0JaW5zdGFuY2UtPmFkcHJlY292ZXJ5ID0gTUVHQVNBU19IQkFfT1BFUkFUSU9OQUw7Ci0JbWVnYXNhc19wb2xsX3dhaXRfYWVuID0gMDsKLQotCWluc3RhbmNlLT5ldnRfZGV0YWlsID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocGRldiwKLQkJCQkJCSAgICBzaXplb2Yoc3RydWN0Ci0JCQkJCQkJICAgbWVnYXNhc19ldnRfZGV0YWlsKSwKLQkJCQkJCSAgICAmaW5zdGFuY2UtPmV2dF9kZXRhaWxfaCk7Ci0KLQlpZiAoIWluc3RhbmNlLT5ldnRfZGV0YWlsKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJtZWdhc2FzOiBGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciAiCi0JCSAgICAgICAiZXZlbnQgZGV0YWlsIHN0cnVjdHVyZVxuIik7Ci0JCWdvdG8gZmFpbF9hbGxvY19kbWFfYnVmOwotCX0KLQotCS8qCi0JICogSW5pdGlhbGl6ZSBsb2NrcyBhbmQgcXVldWVzCi0JICovCi0JSU5JVF9MSVNUX0hFQUQoJmluc3RhbmNlLT5jbWRfcG9vbCk7Ci0JSU5JVF9MSVNUX0hFQUQoJmluc3RhbmNlLT5pbnRlcm5hbF9yZXNldF9wZW5kaW5nX3EpOwotCi0JYXRvbWljX3NldCgmaW5zdGFuY2UtPmZ3X291dHN0YW5kaW5nLDApOwotCi0JaW5pdF93YWl0cXVldWVfaGVhZCgmaW5zdGFuY2UtPmludF9jbWRfd2FpdF9xKTsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZpbnN0YW5jZS0+YWJvcnRfY21kX3dhaXRfcSk7Ci0KLQlzcGluX2xvY2tfaW5pdCgmaW5zdGFuY2UtPmNtZF9wb29sX2xvY2spOwotCXNwaW5fbG9ja19pbml0KCZpbnN0YW5jZS0+aGJhX2xvY2spOwotCXNwaW5fbG9ja19pbml0KCZpbnN0YW5jZS0+Y29tcGxldGlvbl9sb2NrKTsKLQlzcGluX2xvY2tfaW5pdCgmcG9sbF9hZW5fbG9jayk7Ci0KLQltdXRleF9pbml0KCZpbnN0YW5jZS0+YWVuX211dGV4KTsKLQotCS8qCi0JICogSW5pdGlhbGl6ZSBQQ0kgcmVsYXRlZCBhbmQgbWlzYyBwYXJhbWV0ZXJzCi0JICovCi0JaW5zdGFuY2UtPnBkZXYgPSBwZGV2OwotCWluc3RhbmNlLT5ob3N0ID0gaG9zdDsKLQlpbnN0YW5jZS0+dW5pcXVlX2lkID0gcGRldi0+YnVzLT5udW1iZXIgPDwgOCB8IHBkZXYtPmRldmZuOwotCWluc3RhbmNlLT5pbml0X2lkID0gTUVHQVNBU19ERUZBVUxUX0lOSVRfSUQ7Ci0KLQlpZiAoKGluc3RhbmNlLT5wZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9MU0lfU0FTMDA3M1NLSU5OWSkgfHwKLQkJKGluc3RhbmNlLT5wZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9MU0lfU0FTMDA3MVNLSU5OWSkpIHsKLQkJaW5zdGFuY2UtPmZsYWdfaWVlZSA9IDE7Ci0JCXNlbWFfaW5pdCgmaW5zdGFuY2UtPmlvY3RsX3NlbSwgTUVHQVNBU19TS0lOTllfSU5UX0NNRFMpOwotCX0gZWxzZQotCQlzZW1hX2luaXQoJmluc3RhbmNlLT5pb2N0bF9zZW0sIE1FR0FTQVNfSU5UX0NNRFMpOwotCi0JbWVnYXNhc19kYmdfbHZsID0gMDsKLQlpbnN0YW5jZS0+ZmxhZyA9IDA7Ci0JaW5zdGFuY2UtPnVubG9hZCA9IDE7Ci0JaW5zdGFuY2UtPmxhc3RfdGltZSA9IDA7Ci0JaW5zdGFuY2UtPmRpc2FibGVPbmxpbmVDdHJsUmVzZXQgPSAxOwotCi0JSU5JVF9XT1JLKCZpbnN0YW5jZS0+d29ya19pbml0LCBwcm9jZXNzX2Z3X3N0YXRlX2NoYW5nZV93cSk7Ci0KLQkvKgotCSAqIEluaXRpYWxpemUgTUZJIEZpcm13YXJlCi0JICovCi0JaWYgKG1lZ2FzYXNfaW5pdF9tZmkoaW5zdGFuY2UpKQotCQlnb3RvIGZhaWxfaW5pdF9tZmk7Ci0KLQkvKgotCSAqIFJlZ2lzdGVyIElSUQotCSAqLwotCWlmIChyZXF1ZXN0X2lycShwZGV2LT5pcnEsIG1lZ2FzYXNfaXNyLCBJUlFGX1NIQVJFRCwgIm1lZ2FzYXMiLCBpbnN0YW5jZSkpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIm1lZ2FzYXM6IEZhaWxlZCB0byByZWdpc3RlciBJUlFcbiIpOwotCQlnb3RvIGZhaWxfaXJxOwotCX0KLQotCWluc3RhbmNlLT5pbnN0YW5jZXQtPmVuYWJsZV9pbnRyKGluc3RhbmNlLT5yZWdfc2V0KTsKLQotCS8qCi0JICogU3RvcmUgaW5zdGFuY2UgaW4gUENJIHNvZnRzdGF0ZQotCSAqLwotCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBpbnN0YW5jZSk7Ci0KLQkvKgotCSAqIEFkZCB0aGlzIGNvbnRyb2xsZXIgdG8gbWVnYXNhc19tZ210X2luZm8gc3RydWN0dXJlIHNvIHRoYXQgaXQKLQkgKiBjYW4gYmUgZXhwb3J0ZWQgdG8gbWFuYWdlbWVudCBhcHBsaWNhdGlvbnMKLQkgKi8KLQltZWdhc2FzX21nbXRfaW5mby5jb3VudCsrOwotCW1lZ2FzYXNfbWdtdF9pbmZvLmluc3RhbmNlW21lZ2FzYXNfbWdtdF9pbmZvLm1heF9pbmRleF0gPSBpbnN0YW5jZTsKLQltZWdhc2FzX21nbXRfaW5mby5tYXhfaW5kZXgrKzsKLQotCS8qCi0JICogSW5pdGlhdGUgQUVOIChBc3luY2hyb25vdXMgRXZlbnQgTm90aWZpY2F0aW9uKQotCSAqLwotCWlmIChtZWdhc2FzX3N0YXJ0X2FlbihpbnN0YW5jZSkpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIm1lZ2FzYXM6IHN0YXJ0IGFlbiBmYWlsZWRcbiIpOwotCQlnb3RvIGZhaWxfc3RhcnRfYWVuOwotCX0KLQotCS8qCi0JICogUmVnaXN0ZXIgd2l0aCBTQ1NJIG1pZC1sYXllcgotCSAqLwotCWlmIChtZWdhc2FzX2lvX2F0dGFjaChpbnN0YW5jZSkpCi0JCWdvdG8gZmFpbF9pb19hdHRhY2g7Ci0KLQlpbnN0YW5jZS0+dW5sb2FkID0gMDsKLQlyZXR1cm4gMDsKLQotICAgICAgZmFpbF9zdGFydF9hZW46Ci0gICAgICBmYWlsX2lvX2F0dGFjaDoKLQltZWdhc2FzX21nbXRfaW5mby5jb3VudC0tOwotCW1lZ2FzYXNfbWdtdF9pbmZvLmluc3RhbmNlW21lZ2FzYXNfbWdtdF9pbmZvLm1heF9pbmRleF0gPSBOVUxMOwotCW1lZ2FzYXNfbWdtdF9pbmZvLm1heF9pbmRleC0tOwotCi0JcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwotCWluc3RhbmNlLT5pbnN0YW5jZXQtPmRpc2FibGVfaW50cihpbnN0YW5jZS0+cmVnX3NldCk7Ci0JZnJlZV9pcnEoaW5zdGFuY2UtPnBkZXYtPmlycSwgaW5zdGFuY2UpOwotCi0JbWVnYXNhc19yZWxlYXNlX21maShpbnN0YW5jZSk7Ci0KLSAgICAgIGZhaWxfaXJxOgotICAgICAgZmFpbF9pbml0X21maToKLSAgICAgIGZhaWxfYWxsb2NfZG1hX2J1ZjoKLQlpZiAoaW5zdGFuY2UtPmV2dF9kZXRhaWwpCi0JCXBjaV9mcmVlX2NvbnNpc3RlbnQocGRldiwgc2l6ZW9mKHN0cnVjdCBtZWdhc2FzX2V2dF9kZXRhaWwpLAotCQkJCSAgICBpbnN0YW5jZS0+ZXZ0X2RldGFpbCwKLQkJCQkgICAgaW5zdGFuY2UtPmV2dF9kZXRhaWxfaCk7Ci0KLQlpZiAoaW5zdGFuY2UtPnByb2R1Y2VyKQotCQlwY2lfZnJlZV9jb25zaXN0ZW50KHBkZXYsIHNpemVvZih1MzIpLCBpbnN0YW5jZS0+cHJvZHVjZXIsCi0JCQkJICAgIGluc3RhbmNlLT5wcm9kdWNlcl9oKTsKLQlpZiAoaW5zdGFuY2UtPmNvbnN1bWVyKQotCQlwY2lfZnJlZV9jb25zaXN0ZW50KHBkZXYsIHNpemVvZih1MzIpLCBpbnN0YW5jZS0+Y29uc3VtZXIsCi0JCQkJICAgIGluc3RhbmNlLT5jb25zdW1lcl9oKTsKLQlzY3NpX2hvc3RfcHV0KGhvc3QpOwotCi0gICAgICBmYWlsX2FsbG9jX2luc3RhbmNlOgotICAgICAgZmFpbF9zZXRfZG1hX21hc2s6Ci0JcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwotCi0JcmV0dXJuIC1FTk9ERVY7Ci19Ci0KLS8qKgotICogbWVnYXNhc19mbHVzaF9jYWNoZSAtCVJlcXVlc3RzIEZXIHRvIGZsdXNoIGFsbCBpdHMgY2FjaGVzCi0gKiBAaW5zdGFuY2U6CQkJQWRhcHRlciBzb2Z0IHN0YXRlCi0gKi8KLXN0YXRpYyB2b2lkIG1lZ2FzYXNfZmx1c2hfY2FjaGUoc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlKQotewotCXN0cnVjdCBtZWdhc2FzX2NtZCAqY21kOwotCXN0cnVjdCBtZWdhc2FzX2RjbWRfZnJhbWUgKmRjbWQ7Ci0KLQlpZiAoaW5zdGFuY2UtPmFkcHJlY292ZXJ5ID09IE1FR0FTQVNfSFdfQ1JJVElDQUxfRVJST1IpCi0JCXJldHVybjsKLQotCWNtZCA9IG1lZ2FzYXNfZ2V0X2NtZChpbnN0YW5jZSk7Ci0KLQlpZiAoIWNtZCkKLQkJcmV0dXJuOwotCi0JZGNtZCA9ICZjbWQtPmZyYW1lLT5kY21kOwotCi0JbWVtc2V0KGRjbWQtPm1ib3guYiwgMCwgTUZJX01CT1hfU0laRSk7Ci0KLQlkY21kLT5jbWQgPSBNRklfQ01EX0RDTUQ7Ci0JZGNtZC0+Y21kX3N0YXR1cyA9IDB4MDsKLQlkY21kLT5zZ2VfY291bnQgPSAwOwotCWRjbWQtPmZsYWdzID0gTUZJX0ZSQU1FX0RJUl9OT05FOwotCWRjbWQtPnRpbWVvdXQgPSAwOwotCWRjbWQtPnBhZF8wID0gMDsKLQlkY21kLT5kYXRhX3hmZXJfbGVuID0gMDsKLQlkY21kLT5vcGNvZGUgPSBNUl9EQ01EX0NUUkxfQ0FDSEVfRkxVU0g7Ci0JZGNtZC0+bWJveC5iWzBdID0gTVJfRkxVU0hfQ1RSTF9DQUNIRSB8IE1SX0ZMVVNIX0RJU0tfQ0FDSEU7Ci0KLQltZWdhc2FzX2lzc3VlX2Jsb2NrZWRfY21kKGluc3RhbmNlLCBjbWQpOwotCi0JbWVnYXNhc19yZXR1cm5fY21kKGluc3RhbmNlLCBjbWQpOwotCi0JcmV0dXJuOwotfQotCi0vKioKLSAqIG1lZ2FzYXNfc2h1dGRvd25fY29udHJvbGxlciAtCUluc3RydWN0cyBGVyB0byBzaHV0ZG93biB0aGUgY29udHJvbGxlcgotICogQGluc3RhbmNlOgkJCQlBZGFwdGVyIHNvZnQgc3RhdGUKLSAqIEBvcGNvZGU6CQkJCVNodXRkb3duL0hpYmVybmF0ZQotICovCi1zdGF0aWMgdm9pZCBtZWdhc2FzX3NodXRkb3duX2NvbnRyb2xsZXIoc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlLAotCQkJCQl1MzIgb3Bjb2RlKQotewotCXN0cnVjdCBtZWdhc2FzX2NtZCAqY21kOwotCXN0cnVjdCBtZWdhc2FzX2RjbWRfZnJhbWUgKmRjbWQ7Ci0KLQlpZiAoaW5zdGFuY2UtPmFkcHJlY292ZXJ5ID09IE1FR0FTQVNfSFdfQ1JJVElDQUxfRVJST1IpCi0JCXJldHVybjsKLQotCWNtZCA9IG1lZ2FzYXNfZ2V0X2NtZChpbnN0YW5jZSk7Ci0KLQlpZiAoIWNtZCkKLQkJcmV0dXJuOwotCi0JaWYgKGluc3RhbmNlLT5hZW5fY21kKQotCQltZWdhc2FzX2lzc3VlX2Jsb2NrZWRfYWJvcnRfY21kKGluc3RhbmNlLCBpbnN0YW5jZS0+YWVuX2NtZCk7Ci0KLQlkY21kID0gJmNtZC0+ZnJhbWUtPmRjbWQ7Ci0KLQltZW1zZXQoZGNtZC0+bWJveC5iLCAwLCBNRklfTUJPWF9TSVpFKTsKLQotCWRjbWQtPmNtZCA9IE1GSV9DTURfRENNRDsKLQlkY21kLT5jbWRfc3RhdHVzID0gMHgwOwotCWRjbWQtPnNnZV9jb3VudCA9IDA7Ci0JZGNtZC0+ZmxhZ3MgPSBNRklfRlJBTUVfRElSX05PTkU7Ci0JZGNtZC0+dGltZW91dCA9IDA7Ci0JZGNtZC0+cGFkXzAgPSAwOwotCWRjbWQtPmRhdGFfeGZlcl9sZW4gPSAwOwotCWRjbWQtPm9wY29kZSA9IG9wY29kZTsKLQotCW1lZ2FzYXNfaXNzdWVfYmxvY2tlZF9jbWQoaW5zdGFuY2UsIGNtZCk7Ci0KLQltZWdhc2FzX3JldHVybl9jbWQoaW5zdGFuY2UsIGNtZCk7Ci0KLQlyZXR1cm47Ci19Ci0KLSNpZmRlZiBDT05GSUdfUE0KLS8qKgotICogbWVnYXNhc19zdXNwZW5kIC0JZHJpdmVyIHN1c3BlbmQgZW50cnkgcG9pbnQKLSAqIEBwZGV2OgkJUENJIGRldmljZSBzdHJ1Y3R1cmUKLSAqIEBzdGF0ZToJCVBDSSBwb3dlciBzdGF0ZSB0byBzdXNwZW5kIHJvdXRpbmUKLSAqLwotc3RhdGljIGludAotbWVnYXNhc19zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCi17Ci0Jc3RydWN0IFNjc2lfSG9zdCAqaG9zdDsKLQlzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2U7Ci0KLQlpbnN0YW5jZSA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlob3N0ID0gaW5zdGFuY2UtPmhvc3Q7Ci0JaW5zdGFuY2UtPnVubG9hZCA9IDE7Ci0KLQlpZiAocG9sbF9tb2RlX2lvKQotCQlkZWxfdGltZXJfc3luYygmaW5zdGFuY2UtPmlvX2NvbXBsZXRpb25fdGltZXIpOwotCi0JbWVnYXNhc19mbHVzaF9jYWNoZShpbnN0YW5jZSk7Ci0JbWVnYXNhc19zaHV0ZG93bl9jb250cm9sbGVyKGluc3RhbmNlLCBNUl9EQ01EX0hJQkVSTkFURV9TSFVURE9XTik7Ci0KLQkvKiBjYW5jZWwgdGhlIGRlbGF5ZWQgd29yayBpZiB0aGlzIHdvcmsgc3RpbGwgaW4gcXVldWUgKi8KLQlpZiAoaW5zdGFuY2UtPmV2ICE9IE5VTEwpIHsKLQkJc3RydWN0IG1lZ2FzYXNfYWVuX2V2ZW50ICpldiA9IGluc3RhbmNlLT5ldjsKLQkJY2FuY2VsX2RlbGF5ZWRfd29yaygKLQkJCShzdHJ1Y3QgZGVsYXllZF93b3JrICopJmV2LT5ob3RwbHVnX3dvcmspOwotCQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwotCQlpbnN0YW5jZS0+ZXYgPSBOVUxMOwotCX0KLQotCXRhc2tsZXRfa2lsbCgmaW5zdGFuY2UtPmlzcl90YXNrbGV0KTsKLQotCXBjaV9zZXRfZHJ2ZGF0YShpbnN0YW5jZS0+cGRldiwgaW5zdGFuY2UpOwotCWluc3RhbmNlLT5pbnN0YW5jZXQtPmRpc2FibGVfaW50cihpbnN0YW5jZS0+cmVnX3NldCk7Ci0JZnJlZV9pcnEoaW5zdGFuY2UtPnBkZXYtPmlycSwgaW5zdGFuY2UpOwotCi0JcGNpX3NhdmVfc3RhdGUocGRldik7Ci0JcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwotCi0JcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBwY2lfY2hvb3NlX3N0YXRlKHBkZXYsIHN0YXRlKSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBtZWdhc2FzX3Jlc3VtZS0gICAgICBkcml2ZXIgcmVzdW1lIGVudHJ5IHBvaW50Ci0gKiBAcGRldjogICAgICAgICAgICAgICBQQ0kgZGV2aWNlIHN0cnVjdHVyZQotICovCi1zdGF0aWMgaW50Ci1tZWdhc2FzX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKLXsKLQlpbnQgcnZhbDsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0OwotCXN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZTsKLQotCWluc3RhbmNlID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCWhvc3QgPSBpbnN0YW5jZS0+aG9zdDsKLQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7Ci0JcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EMCwgMCk7Ci0JcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7Ci0KLQkvKgotCSAqIFBDSSBwcmVwcGluZzogZW5hYmxlIGRldmljZSBzZXQgYnVzIG1hc3RlcmluZyBhbmQgZG1hIG1hc2sKLQkgKi8KLQlydmFsID0gcGNpX2VuYWJsZV9kZXZpY2VfbWVtKHBkZXYpOwotCi0JaWYgKHJ2YWwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJtZWdhc2FzOiBFbmFibGUgZGV2aWNlIGZhaWxlZFxuIik7Ci0JCXJldHVybiBydmFsOwotCX0KLQotCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwotCi0JaWYgKG1lZ2FzYXNfc2V0X2RtYV9tYXNrKHBkZXYpKQotCQlnb3RvIGZhaWxfc2V0X2RtYV9tYXNrOwotCi0JLyoKLQkgKiBJbml0aWFsaXplIE1GSSBGaXJtd2FyZQotCSAqLwotCi0JKmluc3RhbmNlLT5wcm9kdWNlciA9IDA7Ci0JKmluc3RhbmNlLT5jb25zdW1lciA9IDA7Ci0KLQlhdG9taWNfc2V0KCZpbnN0YW5jZS0+Zndfb3V0c3RhbmRpbmcsIDApOwotCi0JLyoKLQkgKiBXZSBleHBlY3QgdGhlIEZXIHN0YXRlIHRvIGJlIFJFQURZCi0JICovCi0JaWYgKG1lZ2FzYXNfdHJhbnNpdGlvbl90b19yZWFkeShpbnN0YW5jZSkpCi0JCWdvdG8gZmFpbF9yZWFkeV9zdGF0ZTsKLQotCWlmIChtZWdhc2FzX2lzc3VlX2luaXRfbWZpKGluc3RhbmNlKSkKLQkJZ290byBmYWlsX2luaXRfbWZpOwotCi0JdGFza2xldF9pbml0KCZpbnN0YW5jZS0+aXNyX3Rhc2tsZXQsIG1lZ2FzYXNfY29tcGxldGVfY21kX2RwYywKLQkJCSh1bnNpZ25lZCBsb25nKWluc3RhbmNlKTsKLQotCS8qCi0JICogUmVnaXN0ZXIgSVJRCi0JICovCi0JaWYgKHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgbWVnYXNhc19pc3IsIElSUUZfU0hBUkVELAotCQkibWVnYXNhcyIsIGluc3RhbmNlKSkgewotCQlwcmludGsoS0VSTl9FUlIgIm1lZ2FzYXM6IEZhaWxlZCB0byByZWdpc3RlciBJUlFcbiIpOwotCQlnb3RvIGZhaWxfaXJxOwotCX0KLQotCWluc3RhbmNlLT5pbnN0YW5jZXQtPmVuYWJsZV9pbnRyKGluc3RhbmNlLT5yZWdfc2V0KTsKLQotCS8qCi0JICogSW5pdGlhdGUgQUVOIChBc3luY2hyb25vdXMgRXZlbnQgTm90aWZpY2F0aW9uKQotCSAqLwotCWlmIChtZWdhc2FzX3N0YXJ0X2FlbihpbnN0YW5jZSkpCi0JCXByaW50ayhLRVJOX0VSUiAibWVnYXNhczogU3RhcnQgQUVOIGZhaWxlZFxuIik7Ci0KLQkvKiBJbml0aWFsaXplIHRoZSBjbWQgY29tcGxldGlvbiB0aW1lciAqLwotCWlmIChwb2xsX21vZGVfaW8pCi0JCW1lZ2FzYXNfc3RhcnRfdGltZXIoaW5zdGFuY2UsICZpbnN0YW5jZS0+aW9fY29tcGxldGlvbl90aW1lciwKLQkJCQltZWdhc2FzX2lvX2NvbXBsZXRpb25fdGltZXIsCi0JCQkJTUVHQVNBU19DT01QTEVUSU9OX1RJTUVSX0lOVEVSVkFMKTsKLQlpbnN0YW5jZS0+dW5sb2FkID0gMDsKLQotCXJldHVybiAwOwotCi1mYWlsX2lycToKLWZhaWxfaW5pdF9tZmk6Ci0JaWYgKGluc3RhbmNlLT5ldnRfZGV0YWlsKQotCQlwY2lfZnJlZV9jb25zaXN0ZW50KHBkZXYsIHNpemVvZihzdHJ1Y3QgbWVnYXNhc19ldnRfZGV0YWlsKSwKLQkJCQlpbnN0YW5jZS0+ZXZ0X2RldGFpbCwKLQkJCQlpbnN0YW5jZS0+ZXZ0X2RldGFpbF9oKTsKLQotCWlmIChpbnN0YW5jZS0+cHJvZHVjZXIpCi0JCXBjaV9mcmVlX2NvbnNpc3RlbnQocGRldiwgc2l6ZW9mKHUzMiksIGluc3RhbmNlLT5wcm9kdWNlciwKLQkJCQlpbnN0YW5jZS0+cHJvZHVjZXJfaCk7Ci0JaWYgKGluc3RhbmNlLT5jb25zdW1lcikKLQkJcGNpX2ZyZWVfY29uc2lzdGVudChwZGV2LCBzaXplb2YodTMyKSwgaW5zdGFuY2UtPmNvbnN1bWVyLAotCQkJCWluc3RhbmNlLT5jb25zdW1lcl9oKTsKLQlzY3NpX2hvc3RfcHV0KGhvc3QpOwotCi1mYWlsX3NldF9kbWFfbWFzazoKLWZhaWxfcmVhZHlfc3RhdGU6Ci0KLQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7Ci0KLQlyZXR1cm4gLUVOT0RFVjsKLX0KLSNlbHNlCi0jZGVmaW5lIG1lZ2FzYXNfc3VzcGVuZAlOVUxMCi0jZGVmaW5lIG1lZ2FzYXNfcmVzdW1lCU5VTEwKLSNlbmRpZgotCi0vKioKLSAqIG1lZ2FzYXNfZGV0YWNoX29uZSAtCVBDSSBob3QidW4icGx1ZyBlbnRyeSBwb2ludAotICogQHBkZXY6CQlQQ0kgZGV2aWNlIHN0cnVjdHVyZQotICovCi1zdGF0aWMgdm9pZCBfX2RldmV4aXQgbWVnYXNhc19kZXRhY2hfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQotewotCWludCBpOwotCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3Q7Ci0Jc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlOwotCi0JaW5zdGFuY2UgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7Ci0JaW5zdGFuY2UtPnVubG9hZCA9IDE7Ci0JaG9zdCA9IGluc3RhbmNlLT5ob3N0OwotCi0JaWYgKHBvbGxfbW9kZV9pbykKLQkJZGVsX3RpbWVyX3N5bmMoJmluc3RhbmNlLT5pb19jb21wbGV0aW9uX3RpbWVyKTsKLQotCXNjc2lfcmVtb3ZlX2hvc3QoaW5zdGFuY2UtPmhvc3QpOwotCW1lZ2FzYXNfZmx1c2hfY2FjaGUoaW5zdGFuY2UpOwotCW1lZ2FzYXNfc2h1dGRvd25fY29udHJvbGxlcihpbnN0YW5jZSwgTVJfRENNRF9DVFJMX1NIVVRET1dOKTsKLQotCS8qIGNhbmNlbCB0aGUgZGVsYXllZCB3b3JrIGlmIHRoaXMgd29yayBzdGlsbCBpbiBxdWV1ZSovCi0JaWYgKGluc3RhbmNlLT5ldiAhPSBOVUxMKSB7Ci0JCXN0cnVjdCBtZWdhc2FzX2Flbl9ldmVudCAqZXYgPSBpbnN0YW5jZS0+ZXY7Ci0JCWNhbmNlbF9kZWxheWVkX3dvcmsoCi0JCQkoc3RydWN0IGRlbGF5ZWRfd29yayAqKSZldi0+aG90cGx1Z193b3JrKTsKLQkJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKLQkJaW5zdGFuY2UtPmV2ID0gTlVMTDsKLQl9Ci0KLQl0YXNrbGV0X2tpbGwoJmluc3RhbmNlLT5pc3JfdGFza2xldCk7Ci0KLQkvKgotCSAqIFRha2UgdGhlIGluc3RhbmNlIG9mZiB0aGUgaW5zdGFuY2UgYXJyYXkuIE5vdGUgdGhhdCB3ZSB3aWxsIG5vdAotCSAqIGRlY3JlbWVudCB0aGUgbWF4X2luZGV4LiBXZSBsZXQgdGhpcyBhcnJheSBiZSBzcGFyc2UgYXJyYXkKLQkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbWVnYXNhc19tZ210X2luZm8ubWF4X2luZGV4OyBpKyspIHsKLQkJaWYgKG1lZ2FzYXNfbWdtdF9pbmZvLmluc3RhbmNlW2ldID09IGluc3RhbmNlKSB7Ci0JCQltZWdhc2FzX21nbXRfaW5mby5jb3VudC0tOwotCQkJbWVnYXNhc19tZ210X2luZm8uaW5zdGFuY2VbaV0gPSBOVUxMOwotCi0JCQlicmVhazsKLQkJfQotCX0KLQotCXBjaV9zZXRfZHJ2ZGF0YShpbnN0YW5jZS0+cGRldiwgTlVMTCk7Ci0KLQlpbnN0YW5jZS0+aW5zdGFuY2V0LT5kaXNhYmxlX2ludHIoaW5zdGFuY2UtPnJlZ19zZXQpOwotCi0JZnJlZV9pcnEoaW5zdGFuY2UtPnBkZXYtPmlycSwgaW5zdGFuY2UpOwotCi0JbWVnYXNhc19yZWxlYXNlX21maShpbnN0YW5jZSk7Ci0KLQlwY2lfZnJlZV9jb25zaXN0ZW50KHBkZXYsIHNpemVvZihzdHJ1Y3QgbWVnYXNhc19ldnRfZGV0YWlsKSwKLQkJCSAgICBpbnN0YW5jZS0+ZXZ0X2RldGFpbCwgaW5zdGFuY2UtPmV2dF9kZXRhaWxfaCk7Ci0KLQlwY2lfZnJlZV9jb25zaXN0ZW50KHBkZXYsIHNpemVvZih1MzIpLCBpbnN0YW5jZS0+cHJvZHVjZXIsCi0JCQkgICAgaW5zdGFuY2UtPnByb2R1Y2VyX2gpOwotCi0JcGNpX2ZyZWVfY29uc2lzdGVudChwZGV2LCBzaXplb2YodTMyKSwgaW5zdGFuY2UtPmNvbnN1bWVyLAotCQkJICAgIGluc3RhbmNlLT5jb25zdW1lcl9oKTsKLQotCXNjc2lfaG9zdF9wdXQoaG9zdCk7Ci0KLQlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7Ci0KLQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7Ci0KLQlyZXR1cm47Ci19Ci0KLS8qKgotICogbWVnYXNhc19zaHV0ZG93biAtCVNodXRkb3duIGVudHJ5IHBvaW50Ci0gKiBAZGV2aWNlOgkJR2VuZXJpYyBkZXZpY2Ugc3RydWN0dXJlCi0gKi8KLXN0YXRpYyB2b2lkIG1lZ2FzYXNfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpCi17Ci0Jc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCWluc3RhbmNlLT51bmxvYWQgPSAxOwotCW1lZ2FzYXNfZmx1c2hfY2FjaGUoaW5zdGFuY2UpOwotCW1lZ2FzYXNfc2h1dGRvd25fY29udHJvbGxlcihpbnN0YW5jZSwgTVJfRENNRF9DVFJMX1NIVVRET1dOKTsKLX0KLQotLyoqCi0gKiBtZWdhc2FzX21nbXRfb3BlbiAtCWNoYXIgbm9kZSAib3BlbiIgZW50cnkgcG9pbnQKLSAqLwotc3RhdGljIGludCBtZWdhc2FzX21nbXRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZXApCi17Ci0JLyoKLQkgKiBBbGxvdyBvbmx5IHRob3NlIHVzZXJzIHdpdGggYWRtaW4gcmlnaHRzCi0JICovCi0JaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQotCQlyZXR1cm4gLUVBQ0NFUzsKLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqIG1lZ2FzYXNfbWdtdF9mYXN5bmMgLQlBc3luYyBub3RpZmllciByZWdpc3RyYXRpb24gZnJvbSBhcHBsaWNhdGlvbnMKLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGFkZHMgdGhlIGNhbGxpbmcgcHJvY2VzcyB0byBhIGRyaXZlciBnbG9iYWwgcXVldWUuIFdoZW4gYW4KLSAqIGV2ZW50IG9jY3VycywgU0lHSU8gd2lsbCBiZSBzZW50IHRvIGFsbCBwcm9jZXNzZXMgaW4gdGhpcyBxdWV1ZS4KLSAqLwotc3RhdGljIGludCBtZWdhc2FzX21nbXRfZmFzeW5jKGludCBmZCwgc3RydWN0IGZpbGUgKmZpbGVwLCBpbnQgbW9kZSkKLXsKLQlpbnQgcmM7Ci0KLQltdXRleF9sb2NrKCZtZWdhc2FzX2FzeW5jX3F1ZXVlX211dGV4KTsKLQotCXJjID0gZmFzeW5jX2hlbHBlcihmZCwgZmlsZXAsIG1vZGUsICZtZWdhc2FzX2FzeW5jX3F1ZXVlKTsKLQotCW11dGV4X3VubG9jaygmbWVnYXNhc19hc3luY19xdWV1ZV9tdXRleCk7Ci0KLQlpZiAocmMgPj0gMCkgewotCQkvKiBGb3Igc2FuaXR5IGNoZWNrIHdoZW4gd2UgZ2V0IGlvY3RsICovCi0JCWZpbGVwLT5wcml2YXRlX2RhdGEgPSBmaWxlcDsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcHJpbnRrKEtFUk5fREVCVUcgIm1lZ2FzYXM6IGZhc3luY19oZWxwZXIgZmFpbGVkIFslZF1cbiIsIHJjKTsKLQotCXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBtZWdhc2FzX21nbXRfcG9sbCAtICBjaGFyIG5vZGUgInBvbGwiIGVudHJ5IHBvaW50Ci0gKiAqLwotc3RhdGljIHVuc2lnbmVkIGludCBtZWdhc2FzX21nbXRfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCkKLXsKLQl1bnNpZ25lZCBpbnQgbWFzazsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXBvbGxfd2FpdChmaWxlLCAmbWVnYXNhc19wb2xsX3dhaXQsIHdhaXQpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZwb2xsX2Flbl9sb2NrLCBmbGFncyk7Ci0JaWYgKG1lZ2FzYXNfcG9sbF93YWl0X2FlbikKLQkJbWFzayA9ICAgKFBPTExJTiB8IFBPTExSRE5PUk0pOwotCWVsc2UKLQkJbWFzayA9IDA7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9sbF9hZW5fbG9jaywgZmxhZ3MpOwotCXJldHVybiBtYXNrOwotfQotCi0vKioKLSAqIG1lZ2FzYXNfbWdtdF9md19pb2N0bCAtCUlzc3VlcyBtYW5hZ2VtZW50IGlvY3RscyB0byBGVwotICogQGluc3RhbmNlOgkJCUFkYXB0ZXIgc29mdCBzdGF0ZQotICogQGFyZ3A6CQkJVXNlcidzIGlvY3RsIHBhY2tldAotICovCi1zdGF0aWMgaW50Ci1tZWdhc2FzX21nbXRfZndfaW9jdGwoc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlLAotCQkgICAgICBzdHJ1Y3QgbWVnYXNhc19pb2NwYWNrZXQgX191c2VyICogdXNlcl9pb2MsCi0JCSAgICAgIHN0cnVjdCBtZWdhc2FzX2lvY3BhY2tldCAqaW9jKQotewotCXN0cnVjdCBtZWdhc2FzX3NnZTMyICprZXJuX3NnZTMyOwotCXN0cnVjdCBtZWdhc2FzX2NtZCAqY21kOwotCXZvaWQgKmtidWZmX2FycltNQVhfSU9DVExfU0dFXTsKLQlkbWFfYWRkcl90IGJ1Zl9oYW5kbGUgPSAwOwotCWludCBlcnJvciA9IDAsIGk7Ci0Jdm9pZCAqc2Vuc2UgPSBOVUxMOwotCWRtYV9hZGRyX3Qgc2Vuc2VfaGFuZGxlOwotCXVuc2lnbmVkIGxvbmcgKnNlbnNlX3B0cjsKLQotCW1lbXNldChrYnVmZl9hcnIsIDAsIHNpemVvZihrYnVmZl9hcnIpKTsKLQotCWlmIChpb2MtPnNnZV9jb3VudCA+IE1BWF9JT0NUTF9TR0UpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIm1lZ2FzYXM6IFNHRSBjb3VudCBbJWRdID4gIG1heCBsaW1pdCBbJWRdXG4iLAotCQkgICAgICAgaW9jLT5zZ2VfY291bnQsIE1BWF9JT0NUTF9TR0UpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQljbWQgPSBtZWdhc2FzX2dldF9jbWQoaW5zdGFuY2UpOwotCWlmICghY21kKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJtZWdhc2FzOiBGYWlsZWQgdG8gZ2V0IGEgY21kIHBhY2tldFxuIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCS8qCi0JICogVXNlcidzIElPQ1RMIHBhY2tldCBoYXMgMiBmcmFtZXMgKG1heGltdW0pLiBDb3B5IHRob3NlIHR3bwotCSAqIGZyYW1lcyBpbnRvIG91ciBjbWQncyBmcmFtZXMuIGNtZC0+ZnJhbWUncyBjb250ZXh0IHdpbGwgZ2V0Ci0JICogb3ZlcndyaXR0ZW4gd2hlbiB3ZSBjb3B5IGZyb20gdXNlcidzIGZyYW1lcy4gU28gc2V0IHRoYXQgdmFsdWUKLQkgKiBhbG9uZSBzZXBhcmF0ZWx5Ci0JICovCi0JbWVtY3B5KGNtZC0+ZnJhbWUsIGlvYy0+ZnJhbWUucmF3LCAyICogTUVHQU1GSV9GUkFNRV9TSVpFKTsKLQljbWQtPmZyYW1lLT5oZHIuY29udGV4dCA9IGNtZC0+aW5kZXg7Ci0JY21kLT5mcmFtZS0+aGRyLnBhZF8wID0gMDsKLQotCS8qCi0JICogVGhlIG1hbmFnZW1lbnQgaW50ZXJmYWNlIGJldHdlZW4gYXBwbGljYXRpb25zIGFuZCB0aGUgZncgdXNlcwotCSAqIE1GSSBmcmFtZXMuIEUuZywgUkFJRCBjb25maWd1cmF0aW9uIGNoYW5nZXMsIExEIHByb3BlcnR5IGNoYW5nZXMKLQkgKiBldGMgYXJlIGFjY29tcGxpc2hlcyB0aHJvdWdoIGRpZmZlcmVudCBraW5kcyBvZiBNRkkgZnJhbWVzLiBUaGUKLQkgKiBkcml2ZXIgbmVlZHMgdG8gY2FyZSBvbmx5IGFib3V0IHN1YnN0aXR1dGluZyB1c2VyIGJ1ZmZlcnMgd2l0aAotCSAqIGtlcm5lbCBidWZmZXJzIGluIFNHTHMuIFRoZSBsb2NhdGlvbiBvZiBTR0wgaXMgZW1iZWRkZWQgaW4gdGhlCi0JICogc3RydWN0IGlvY3BhY2tldCBpdHNlbGYuCi0JICovCi0Ja2Vybl9zZ2UzMiA9IChzdHJ1Y3QgbWVnYXNhc19zZ2UzMiAqKQotCSAgICAoKHVuc2lnbmVkIGxvbmcpY21kLT5mcmFtZSArIGlvYy0+c2dsX29mZik7Ci0KLQkvKgotCSAqIEZvciBlYWNoIHVzZXIgYnVmZmVyLCBjcmVhdGUgYSBtaXJyb3IgYnVmZmVyIGFuZCBjb3B5IGluCi0JICovCi0JZm9yIChpID0gMDsgaSA8IGlvYy0+c2dlX2NvdW50OyBpKyspIHsKLQkJa2J1ZmZfYXJyW2ldID0gZG1hX2FsbG9jX2NvaGVyZW50KCZpbnN0YW5jZS0+cGRldi0+ZGV2LAotCQkJCQkJICAgIGlvYy0+c2dsW2ldLmlvdl9sZW4sCi0JCQkJCQkgICAgJmJ1Zl9oYW5kbGUsIEdGUF9LRVJORUwpOwotCQlpZiAoIWtidWZmX2FycltpXSkgewotCQkJcHJpbnRrKEtFUk5fREVCVUcgIm1lZ2FzYXM6IEZhaWxlZCB0byBhbGxvYyAiCi0JCQkgICAgICAgImtlcm5lbCBTR0wgYnVmZmVyIGZvciBJT0NUTCBcbiIpOwotCQkJZXJyb3IgPSAtRU5PTUVNOwotCQkJZ290byBvdXQ7Ci0JCX0KLQotCQkvKgotCQkgKiBXZSBkb24ndCBjaGFuZ2UgdGhlIGRtYV9jb2hlcmVudF9tYXNrLCBzbwotCQkgKiBwY2lfYWxsb2NfY29uc2lzdGVudCBvbmx5IHJldHVybnMgMzJiaXQgYWRkcmVzc2VzCi0JCSAqLwotCQlrZXJuX3NnZTMyW2ldLnBoeXNfYWRkciA9ICh1MzIpIGJ1Zl9oYW5kbGU7Ci0JCWtlcm5fc2dlMzJbaV0ubGVuZ3RoID0gaW9jLT5zZ2xbaV0uaW92X2xlbjsKLQotCQkvKgotCQkgKiBXZSBjcmVhdGVkIGEga2VybmVsIGJ1ZmZlciBjb3JyZXNwb25kaW5nIHRvIHRoZQotCQkgKiB1c2VyIGJ1ZmZlci4gTm93IGNvcHkgaW4gZnJvbSB0aGUgdXNlciBidWZmZXIKLQkJICovCi0JCWlmIChjb3B5X2Zyb21fdXNlcihrYnVmZl9hcnJbaV0sIGlvYy0+c2dsW2ldLmlvdl9iYXNlLAotCQkJCSAgICh1MzIpIChpb2MtPnNnbFtpXS5pb3ZfbGVuKSkpIHsKLQkJCWVycm9yID0gLUVGQVVMVDsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JfQotCi0JaWYgKGlvYy0+c2Vuc2VfbGVuKSB7Ci0JCXNlbnNlID0gZG1hX2FsbG9jX2NvaGVyZW50KCZpbnN0YW5jZS0+cGRldi0+ZGV2LCBpb2MtPnNlbnNlX2xlbiwKLQkJCQkJICAgICAmc2Vuc2VfaGFuZGxlLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFzZW5zZSkgewotCQkJZXJyb3IgPSAtRU5PTUVNOwotCQkJZ290byBvdXQ7Ci0JCX0KLQotCQlzZW5zZV9wdHIgPQotCQkodW5zaWduZWQgbG9uZyAqKSAoKHVuc2lnbmVkIGxvbmcpY21kLT5mcmFtZSArIGlvYy0+c2Vuc2Vfb2ZmKTsKLQkJKnNlbnNlX3B0ciA9IHNlbnNlX2hhbmRsZTsKLQl9Ci0KLQkvKgotCSAqIFNldCB0aGUgc3luY19jbWQgZmxhZyBzbyB0aGF0IHRoZSBJU1Iga25vd3Mgbm90IHRvIGNvbXBsZXRlIHRoaXMKLQkgKiBjbWQgdG8gdGhlIFNDU0kgbWlkLWxheWVyCi0JICovCi0JY21kLT5zeW5jX2NtZCA9IDE7Ci0JbWVnYXNhc19pc3N1ZV9ibG9ja2VkX2NtZChpbnN0YW5jZSwgY21kKTsKLQljbWQtPnN5bmNfY21kID0gMDsKLQotCS8qCi0JICogY29weSBvdXQgdGhlIGtlcm5lbCBidWZmZXJzIHRvIHVzZXIgYnVmZmVycwotCSAqLwotCWZvciAoaSA9IDA7IGkgPCBpb2MtPnNnZV9jb3VudDsgaSsrKSB7Ci0JCWlmIChjb3B5X3RvX3VzZXIoaW9jLT5zZ2xbaV0uaW92X2Jhc2UsIGtidWZmX2FycltpXSwKLQkJCQkgaW9jLT5zZ2xbaV0uaW92X2xlbikpIHsKLQkJCWVycm9yID0gLUVGQVVMVDsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JfQotCi0JLyoKLQkgKiBjb3B5IG91dCB0aGUgc2Vuc2UKLQkgKi8KLQlpZiAoaW9jLT5zZW5zZV9sZW4pIHsKLQkJLyoKLQkJICogc2Vuc2VfcHRyIHBvaW50cyB0byB0aGUgbG9jYXRpb24gdGhhdCBoYXMgdGhlIHVzZXIKLQkJICogc2Vuc2UgYnVmZmVyIGFkZHJlc3MKLQkJICovCi0JCXNlbnNlX3B0ciA9ICh1bnNpZ25lZCBsb25nICopICgodW5zaWduZWQgbG9uZylpb2MtPmZyYW1lLnJhdyArCi0JCQkJaW9jLT5zZW5zZV9vZmYpOwotCi0JCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopKCh1bnNpZ25lZCBsb25nKSgqc2Vuc2VfcHRyKSksCi0JCQkJIHNlbnNlLCBpb2MtPnNlbnNlX2xlbikpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAibWVnYXNhczogRmFpbGVkIHRvIGNvcHkgb3V0IHRvIHVzZXIgIgotCQkJCQkic2Vuc2UgZGF0YVxuIik7Ci0JCQllcnJvciA9IC1FRkFVTFQ7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0KLQotCS8qCi0JICogY29weSB0aGUgc3RhdHVzIGNvZGVzIHJldHVybmVkIGJ5IHRoZSBmdwotCSAqLwotCWlmIChjb3B5X3RvX3VzZXIoJnVzZXJfaW9jLT5mcmFtZS5oZHIuY21kX3N0YXR1cywKLQkJCSAmY21kLT5mcmFtZS0+aGRyLmNtZF9zdGF0dXMsIHNpemVvZih1OCkpKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJtZWdhc2FzOiBFcnJvciBjb3B5aW5nIG91dCBjbWRfc3RhdHVzXG4iKTsKLQkJZXJyb3IgPSAtRUZBVUxUOwotCX0KLQotICAgICAgb3V0OgotCWlmIChzZW5zZSkgewotCQlkbWFfZnJlZV9jb2hlcmVudCgmaW5zdGFuY2UtPnBkZXYtPmRldiwgaW9jLT5zZW5zZV9sZW4sCi0JCQkJICAgIHNlbnNlLCBzZW5zZV9oYW5kbGUpOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBpb2MtPnNnZV9jb3VudCAmJiBrYnVmZl9hcnJbaV07IGkrKykgewotCQlkbWFfZnJlZV9jb2hlcmVudCgmaW5zdGFuY2UtPnBkZXYtPmRldiwKLQkJCQkgICAga2Vybl9zZ2UzMltpXS5sZW5ndGgsCi0JCQkJICAgIGtidWZmX2FycltpXSwga2Vybl9zZ2UzMltpXS5waHlzX2FkZHIpOwotCX0KLQotCW1lZ2FzYXNfcmV0dXJuX2NtZChpbnN0YW5jZSwgY21kKTsKLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLXN0YXRpYyBpbnQgbWVnYXNhc19tZ210X2lvY3RsX2Z3KHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFyZykKLXsKLQlzdHJ1Y3QgbWVnYXNhc19pb2NwYWNrZXQgX191c2VyICp1c2VyX2lvYyA9Ci0JICAgIChzdHJ1Y3QgbWVnYXNhc19pb2NwYWNrZXQgX191c2VyICopYXJnOwotCXN0cnVjdCBtZWdhc2FzX2lvY3BhY2tldCAqaW9jOwotCXN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZTsKLQlpbnQgZXJyb3I7Ci0JaW50IGk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1MzIgd2FpdF90aW1lID0gTUVHQVNBU19SRVNFVF9XQUlUX1RJTUU7Ci0KLQlpb2MgPSBrbWFsbG9jKHNpemVvZigqaW9jKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFpb2MpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JaWYgKGNvcHlfZnJvbV91c2VyKGlvYywgdXNlcl9pb2MsIHNpemVvZigqaW9jKSkpIHsKLQkJZXJyb3IgPSAtRUZBVUxUOwotCQlnb3RvIG91dF9rZnJlZV9pb2M7Ci0JfQotCi0JaW5zdGFuY2UgPSBtZWdhc2FzX2xvb2t1cF9pbnN0YW5jZShpb2MtPmhvc3Rfbm8pOwotCWlmICghaW5zdGFuY2UpIHsKLQkJZXJyb3IgPSAtRU5PREVWOwotCQlnb3RvIG91dF9rZnJlZV9pb2M7Ci0JfQotCi0JaWYgKGluc3RhbmNlLT5hZHByZWNvdmVyeSA9PSBNRUdBU0FTX0hXX0NSSVRJQ0FMX0VSUk9SKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiQ29udHJvbGxlciBpbiBjcml0IGVycm9yXG4iKTsKLQkJZXJyb3IgPSAtRU5PREVWOwotCQlnb3RvIG91dF9rZnJlZV9pb2M7Ci0JfQotCi0JaWYgKGluc3RhbmNlLT51bmxvYWQgPT0gMSkgewotCQllcnJvciA9IC1FTk9ERVY7Ci0JCWdvdG8gb3V0X2tmcmVlX2lvYzsKLQl9Ci0KLQkvKgotCSAqIFdlIHdpbGwgYWxsb3cgb25seSBNRUdBU0FTX0lOVF9DTURTIG51bWJlciBvZiBwYXJhbGxlbCBpb2N0bCBjbWRzCi0JICovCi0JaWYgKGRvd25faW50ZXJydXB0aWJsZSgmaW5zdGFuY2UtPmlvY3RsX3NlbSkpIHsKLQkJZXJyb3IgPSAtRVJFU1RBUlRTWVM7Ci0JCWdvdG8gb3V0X2tmcmVlX2lvYzsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgd2FpdF90aW1lOyBpKyspIHsKLQotCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW5zdGFuY2UtPmhiYV9sb2NrLCBmbGFncyk7Ci0JCWlmIChpbnN0YW5jZS0+YWRwcmVjb3ZlcnkgPT0gTUVHQVNBU19IQkFfT1BFUkFUSU9OQUwpIHsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluc3RhbmNlLT5oYmFfbG9jaywgZmxhZ3MpOwotCQkJYnJlYWs7Ci0JCX0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5zdGFuY2UtPmhiYV9sb2NrLCBmbGFncyk7Ci0KLQkJaWYgKCEoaSAlIE1FR0FTQVNfUkVTRVRfTk9USUNFX0lOVEVSVkFMKSkgewotCQkJcHJpbnRrKEtFUk5fTk9USUNFICJtZWdhc2FzOiB3YWl0aW5nIgotCQkJCSJmb3IgY29udHJvbGxlciByZXNldCB0byBmaW5pc2hcbiIpOwotCQl9Ci0KLQkJbXNsZWVwKDEwMDApOwotCX0KLQotCXNwaW5fbG9ja19pcnFzYXZlKCZpbnN0YW5jZS0+aGJhX2xvY2ssIGZsYWdzKTsKLQlpZiAoaW5zdGFuY2UtPmFkcHJlY292ZXJ5ICE9IE1FR0FTQVNfSEJBX09QRVJBVElPTkFMKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluc3RhbmNlLT5oYmFfbG9jaywgZmxhZ3MpOwotCi0JCXByaW50ayhLRVJOX0VSUiAibWVnYXJhaWRfc2FzOiB0aW1lZCBvdXQgd2hpbGUiCi0JCQkid2FpdGluZyBmb3IgSEJBIHRvIHJlY292ZXJcbiIpOwotCQllcnJvciA9IC1FTk9ERVY7Ci0JCWdvdG8gb3V0X2tmcmVlX2lvYzsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5zdGFuY2UtPmhiYV9sb2NrLCBmbGFncyk7Ci0KLQllcnJvciA9IG1lZ2FzYXNfbWdtdF9md19pb2N0bChpbnN0YW5jZSwgdXNlcl9pb2MsIGlvYyk7Ci0JdXAoJmluc3RhbmNlLT5pb2N0bF9zZW0pOwotCi0gICAgICBvdXRfa2ZyZWVfaW9jOgotCWtmcmVlKGlvYyk7Ci0JcmV0dXJuIGVycm9yOwotfQotCi1zdGF0aWMgaW50IG1lZ2FzYXNfbWdtdF9pb2N0bF9hZW4oc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYXJnKQotewotCXN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZTsKLQlzdHJ1Y3QgbWVnYXNhc19hZW4gYWVuOwotCWludCBlcnJvcjsKLQlpbnQgaTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXUzMiB3YWl0X3RpbWUgPSBNRUdBU0FTX1JFU0VUX1dBSVRfVElNRTsKLQotCWlmIChmaWxlLT5wcml2YXRlX2RhdGEgIT0gZmlsZSkgewotCQlwcmludGsoS0VSTl9ERUJVRyAibWVnYXNhczogZmFzeW5jX2hlbHBlciB3YXMgbm90ICIKLQkJICAgICAgICJjYWxsZWQgZmlyc3RcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoY29weV9mcm9tX3VzZXIoJmFlbiwgKHZvaWQgX191c2VyICopYXJnLCBzaXplb2YoYWVuKSkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JaW5zdGFuY2UgPSBtZWdhc2FzX2xvb2t1cF9pbnN0YW5jZShhZW4uaG9zdF9ubyk7Ci0KLQlpZiAoIWluc3RhbmNlKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWlmIChpbnN0YW5jZS0+YWRwcmVjb3ZlcnkgPT0gTUVHQVNBU19IV19DUklUSUNBTF9FUlJPUikgewotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQlpZiAoaW5zdGFuY2UtPnVubG9hZCA9PSAxKSB7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCB3YWl0X3RpbWU7IGkrKykgewotCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZpbnN0YW5jZS0+aGJhX2xvY2ssIGZsYWdzKTsKLQkJaWYgKGluc3RhbmNlLT5hZHByZWNvdmVyeSA9PSBNRUdBU0FTX0hCQV9PUEVSQVRJT05BTCkgewotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5zdGFuY2UtPmhiYV9sb2NrLAotCQkJCQkJZmxhZ3MpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbnN0YW5jZS0+aGJhX2xvY2ssIGZsYWdzKTsKLQotCQlpZiAoIShpICUgTUVHQVNBU19SRVNFVF9OT1RJQ0VfSU5URVJWQUwpKSB7Ci0JCQlwcmludGsoS0VSTl9OT1RJQ0UgIm1lZ2FzYXM6IHdhaXRpbmcgZm9yIgotCQkJCSJjb250cm9sbGVyIHJlc2V0IHRvIGZpbmlzaFxuIik7Ci0JCX0KLQotCQltc2xlZXAoMTAwMCk7Ci0JfQotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmluc3RhbmNlLT5oYmFfbG9jaywgZmxhZ3MpOwotCWlmIChpbnN0YW5jZS0+YWRwcmVjb3ZlcnkgIT0gTUVHQVNBU19IQkFfT1BFUkFUSU9OQUwpIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5zdGFuY2UtPmhiYV9sb2NrLCBmbGFncyk7Ci0JCXByaW50ayhLRVJOX0VSUiAibWVnYXJhaWRfc2FzOiB0aW1lZCBvdXQgd2hpbGUgd2FpdGluZyIKLQkJCQkiZm9yIEhCQSB0byByZWNvdmVyLlxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbnN0YW5jZS0+aGJhX2xvY2ssIGZsYWdzKTsKLQotCW11dGV4X2xvY2soJmluc3RhbmNlLT5hZW5fbXV0ZXgpOwotCWVycm9yID0gbWVnYXNhc19yZWdpc3Rlcl9hZW4oaW5zdGFuY2UsIGFlbi5zZXFfbnVtLAotCQkJCSAgICAgYWVuLmNsYXNzX2xvY2FsZV93b3JkKTsKLQltdXRleF91bmxvY2soJmluc3RhbmNlLT5hZW5fbXV0ZXgpOwotCXJldHVybiBlcnJvcjsKLX0KLQotLyoqCi0gKiBtZWdhc2FzX21nbXRfaW9jdGwgLQljaGFyIG5vZGUgaW9jdGwgZW50cnkgcG9pbnQKLSAqLwotc3RhdGljIGxvbmcKLW1lZ2FzYXNfbWdtdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCi17Ci0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIE1FR0FTQVNfSU9DX0ZJUk1XQVJFOgotCQlyZXR1cm4gbWVnYXNhc19tZ210X2lvY3RsX2Z3KGZpbGUsIGFyZyk7Ci0KLQljYXNlIE1FR0FTQVNfSU9DX0dFVF9BRU46Ci0JCXJldHVybiBtZWdhc2FzX21nbXRfaW9jdGxfYWVuKGZpbGUsIGFyZyk7Ci0JfQotCi0JcmV0dXJuIC1FTk9UVFk7Ci19Ci0KLSNpZmRlZiBDT05GSUdfQ09NUEFUCi1zdGF0aWMgaW50IG1lZ2FzYXNfbWdtdF9jb21wYXRfaW9jdGxfZncoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYXJnKQotewotCXN0cnVjdCBjb21wYXRfbWVnYXNhc19pb2NwYWNrZXQgX191c2VyICpjaW9jID0KLQkgICAgKHN0cnVjdCBjb21wYXRfbWVnYXNhc19pb2NwYWNrZXQgX191c2VyICopYXJnOwotCXN0cnVjdCBtZWdhc2FzX2lvY3BhY2tldCBfX3VzZXIgKmlvYyA9Ci0JICAgIGNvbXBhdF9hbGxvY191c2VyX3NwYWNlKHNpemVvZihzdHJ1Y3QgbWVnYXNhc19pb2NwYWNrZXQpKTsKLQlpbnQgaTsKLQlpbnQgZXJyb3IgPSAwOwotCWNvbXBhdF91cHRyX3QgcHRyOwotCi0JaWYgKGNsZWFyX3VzZXIoaW9jLCBzaXplb2YoKmlvYykpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCWlmIChjb3B5X2luX3VzZXIoJmlvYy0+aG9zdF9ubywgJmNpb2MtPmhvc3Rfbm8sIHNpemVvZih1MTYpKSB8fAotCSAgICBjb3B5X2luX3VzZXIoJmlvYy0+c2dsX29mZiwgJmNpb2MtPnNnbF9vZmYsIHNpemVvZih1MzIpKSB8fAotCSAgICBjb3B5X2luX3VzZXIoJmlvYy0+c2Vuc2Vfb2ZmLCAmY2lvYy0+c2Vuc2Vfb2ZmLCBzaXplb2YodTMyKSkgfHwKLQkgICAgY29weV9pbl91c2VyKCZpb2MtPnNlbnNlX2xlbiwgJmNpb2MtPnNlbnNlX2xlbiwgc2l6ZW9mKHUzMikpIHx8Ci0JICAgIGNvcHlfaW5fdXNlcihpb2MtPmZyYW1lLnJhdywgY2lvYy0+ZnJhbWUucmF3LCAxMjgpIHx8Ci0JICAgIGNvcHlfaW5fdXNlcigmaW9jLT5zZ2VfY291bnQsICZjaW9jLT5zZ2VfY291bnQsIHNpemVvZih1MzIpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQkvKgotCSAqIFRoZSBzZW5zZV9wdHIgaXMgdXNlZCBpbiBtZWdhc2FzX21nbXRfZndfaW9jdGwgb25seSB3aGVuCi0JICogc2Vuc2VfbGVuIGlzIG5vdCBudWxsLCBzbyBwcmVwYXJlIHRoZSA2NGJpdCB2YWx1ZSB1bmRlcgotCSAqIHRoZSBzYW1lIGNvbmRpdGlvbi4KLQkgKi8KLQlpZiAoaW9jLT5zZW5zZV9sZW4pIHsKLQkJdm9pZCBfX3VzZXIgKipzZW5zZV9pb2NfcHRyID0KLQkJCSh2b2lkIF9fdXNlciAqKikoaW9jLT5mcmFtZS5yYXcgKyBpb2MtPnNlbnNlX29mZik7Ci0JCWNvbXBhdF91cHRyX3QgKnNlbnNlX2Npb2NfcHRyID0KLQkJCShjb21wYXRfdXB0cl90ICopKGNpb2MtPmZyYW1lLnJhdyArIGNpb2MtPnNlbnNlX29mZik7Ci0JCWlmIChnZXRfdXNlcihwdHIsIHNlbnNlX2Npb2NfcHRyKSB8fAotCQkgICAgcHV0X3VzZXIoY29tcGF0X3B0cihwdHIpLCBzZW5zZV9pb2NfcHRyKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBNQVhfSU9DVExfU0dFOyBpKyspIHsKLQkJaWYgKGdldF91c2VyKHB0ciwgJmNpb2MtPnNnbFtpXS5pb3ZfYmFzZSkgfHwKLQkJICAgIHB1dF91c2VyKGNvbXBhdF9wdHIocHRyKSwgJmlvYy0+c2dsW2ldLmlvdl9iYXNlKSB8fAotCQkgICAgY29weV9pbl91c2VyKCZpb2MtPnNnbFtpXS5pb3ZfbGVuLAotCQkJCSAmY2lvYy0+c2dsW2ldLmlvdl9sZW4sIHNpemVvZihjb21wYXRfc2l6ZV90KSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0KLQllcnJvciA9IG1lZ2FzYXNfbWdtdF9pb2N0bF9mdyhmaWxlLCAodW5zaWduZWQgbG9uZylpb2MpOwotCi0JaWYgKGNvcHlfaW5fdXNlcigmY2lvYy0+ZnJhbWUuaGRyLmNtZF9zdGF0dXMsCi0JCQkgJmlvYy0+ZnJhbWUuaGRyLmNtZF9zdGF0dXMsIHNpemVvZih1OCkpKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJtZWdhc2FzOiBlcnJvciBjb3B5X2luX3VzZXIgY21kX3N0YXR1c1xuIik7Ci0JCXJldHVybiAtRUZBVUxUOwotCX0KLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLXN0YXRpYyBsb25nCi1tZWdhc2FzX21nbXRfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAotCQkJICB1bnNpZ25lZCBsb25nIGFyZykKLXsKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgTUVHQVNBU19JT0NfRklSTVdBUkUzMjoKLQkJcmV0dXJuIG1lZ2FzYXNfbWdtdF9jb21wYXRfaW9jdGxfZncoZmlsZSwgYXJnKTsKLQljYXNlIE1FR0FTQVNfSU9DX0dFVF9BRU46Ci0JCXJldHVybiBtZWdhc2FzX21nbXRfaW9jdGxfYWVuKGZpbGUsIGFyZyk7Ci0JfQotCi0JcmV0dXJuIC1FTk9UVFk7Ci19Ci0jZW5kaWYKLQotLyoKLSAqIEZpbGUgb3BlcmF0aW9ucyBzdHJ1Y3R1cmUgZm9yIG1hbmFnZW1lbnQgaW50ZXJmYWNlCi0gKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1lZ2FzYXNfbWdtdF9mb3BzID0gewotCS5vd25lciA9IFRISVNfTU9EVUxFLAotCS5vcGVuID0gbWVnYXNhc19tZ210X29wZW4sCi0JLmZhc3luYyA9IG1lZ2FzYXNfbWdtdF9mYXN5bmMsCi0JLnVubG9ja2VkX2lvY3RsID0gbWVnYXNhc19tZ210X2lvY3RsLAotCS5wb2xsID0gbWVnYXNhc19tZ210X3BvbGwsCi0jaWZkZWYgQ09ORklHX0NPTVBBVAotCS5jb21wYXRfaW9jdGwgPSBtZWdhc2FzX21nbXRfY29tcGF0X2lvY3RsLAotI2VuZGlmCi0JLmxsc2VlayA9IG5vb3BfbGxzZWVrLAotfTsKLQotLyoKLSAqIFBDSSBob3RwbHVnIHN1cHBvcnQgcmVnaXN0cmF0aW9uIHN0cnVjdHVyZQotICovCi1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbWVnYXNhc19wY2lfZHJpdmVyID0gewotCi0JLm5hbWUgPSAibWVnYXJhaWRfc2FzIiwKLQkuaWRfdGFibGUgPSBtZWdhc2FzX3BjaV90YWJsZSwKLQkucHJvYmUgPSBtZWdhc2FzX3Byb2JlX29uZSwKLQkucmVtb3ZlID0gX19kZXZleGl0X3AobWVnYXNhc19kZXRhY2hfb25lKSwKLQkuc3VzcGVuZCA9IG1lZ2FzYXNfc3VzcGVuZCwKLQkucmVzdW1lID0gbWVnYXNhc19yZXN1bWUsCi0JLnNodXRkb3duID0gbWVnYXNhc19zaHV0ZG93biwKLX07Ci0KLS8qCi0gKiBTeXNmcyBkcml2ZXIgYXR0cmlidXRlcwotICovCi1zdGF0aWMgc3NpemVfdCBtZWdhc2FzX3N5c2ZzX3Nob3dfdmVyc2lvbihzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZGQsIGNoYXIgKmJ1ZikKLXsKLQlyZXR1cm4gc25wcmludGYoYnVmLCBzdHJsZW4oTUVHQVNBU19WRVJTSU9OKSArIDIsICIlc1xuIiwKLQkJCU1FR0FTQVNfVkVSU0lPTik7Ci19Ci0KLXN0YXRpYyBEUklWRVJfQVRUUih2ZXJzaW9uLCBTX0lSVUdPLCBtZWdhc2FzX3N5c2ZzX3Nob3dfdmVyc2lvbiwgTlVMTCk7Ci0KLXN0YXRpYyBzc2l6ZV90Ci1tZWdhc2FzX3N5c2ZzX3Nob3dfcmVsZWFzZV9kYXRlKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkZCwgY2hhciAqYnVmKQotewotCXJldHVybiBzbnByaW50ZihidWYsIHN0cmxlbihNRUdBU0FTX1JFTERBVEUpICsgMiwgIiVzXG4iLAotCQkJTUVHQVNBU19SRUxEQVRFKTsKLX0KLQotc3RhdGljIERSSVZFUl9BVFRSKHJlbGVhc2VfZGF0ZSwgU19JUlVHTywgbWVnYXNhc19zeXNmc19zaG93X3JlbGVhc2VfZGF0ZSwKLQkJICAgTlVMTCk7Ci0KLXN0YXRpYyBzc2l6ZV90Ci1tZWdhc2FzX3N5c2ZzX3Nob3dfc3VwcG9ydF9wb2xsX2Zvcl9ldmVudChzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZGQsIGNoYXIgKmJ1ZikKLXsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgc3VwcG9ydF9wb2xsX2Zvcl9ldmVudCk7Ci19Ci0KLXN0YXRpYyBEUklWRVJfQVRUUihzdXBwb3J0X3BvbGxfZm9yX2V2ZW50LCBTX0lSVUdPLAotCQkJbWVnYXNhc19zeXNmc19zaG93X3N1cHBvcnRfcG9sbF9mb3JfZXZlbnQsIE5VTEwpOwotCi0gc3RhdGljIHNzaXplX3QKLW1lZ2FzYXNfc3lzZnNfc2hvd19zdXBwb3J0X2RldmljZV9jaGFuZ2Uoc3RydWN0IGRldmljZV9kcml2ZXIgKmRkLCBjaGFyICpidWYpCi17Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIHN1cHBvcnRfZGV2aWNlX2NoYW5nZSk7Ci19Ci0KLXN0YXRpYyBEUklWRVJfQVRUUihzdXBwb3J0X2RldmljZV9jaGFuZ2UsIFNfSVJVR08sCi0JCQltZWdhc2FzX3N5c2ZzX3Nob3dfc3VwcG9ydF9kZXZpY2VfY2hhbmdlLCBOVUxMKTsKLQotc3RhdGljIHNzaXplX3QKLW1lZ2FzYXNfc3lzZnNfc2hvd19kYmdfbHZsKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkZCwgY2hhciAqYnVmKQotewotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBtZWdhc2FzX2RiZ19sdmwpOwotfQotCi1zdGF0aWMgc3NpemVfdAotbWVnYXNhc19zeXNmc19zZXRfZGJnX2x2bChzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZGQsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQotewotCWludCByZXR2YWwgPSBjb3VudDsKLQlpZihzc2NhbmYoYnVmLCIldSIsJm1lZ2FzYXNfZGJnX2x2bCk8MSl7Ci0JCXByaW50ayhLRVJOX0VSUiAibWVnYXNhczogY291bGQgbm90IHNldCBkYmdfbHZsXG4iKTsKLQkJcmV0dmFsID0gLUVJTlZBTDsKLQl9Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQotc3RhdGljIERSSVZFUl9BVFRSKGRiZ19sdmwsIFNfSVJVR098U19JV1VTUiwgbWVnYXNhc19zeXNmc19zaG93X2RiZ19sdmwsCi0JCW1lZ2FzYXNfc3lzZnNfc2V0X2RiZ19sdmwpOwotCi1zdGF0aWMgc3NpemVfdAotbWVnYXNhc19zeXNmc19zaG93X3BvbGxfbW9kZV9pbyhzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZGQsIGNoYXIgKmJ1ZikKLXsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgcG9sbF9tb2RlX2lvKTsKLX0KLQotc3RhdGljIHNzaXplX3QKLW1lZ2FzYXNfc3lzZnNfc2V0X3BvbGxfbW9kZV9pbyhzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZGQsCi0JCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCi17Ci0JaW50IHJldHZhbCA9IGNvdW50OwotCWludCB0bXAgPSBwb2xsX21vZGVfaW87Ci0JaW50IGk7Ci0Jc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlOwotCi0JaWYgKHNzY2FuZihidWYsICIldSIsICZwb2xsX21vZGVfaW8pIDwgMSkgewotCQlwcmludGsoS0VSTl9FUlIgIm1lZ2FzYXM6IGNvdWxkIG5vdCBzZXQgcG9sbF9tb2RlX2lvXG4iKTsKLQkJcmV0dmFsID0gLUVJTlZBTDsKLQl9Ci0KLQkvKgotCSAqIENoZWNrIGlmIHBvbGxfbW9kZV9pbyBpcyBhbHJlYWR5IHNldCBvciBpcyBzYW1lIGFzIHByZXZpb3VzIHZhbHVlCi0JICovCi0JaWYgKCh0bXAgJiYgcG9sbF9tb2RlX2lvKSB8fCAodG1wID09IHBvbGxfbW9kZV9pbykpCi0JCWdvdG8gb3V0OwotCi0JaWYgKHBvbGxfbW9kZV9pbykgewotCQkvKgotCQkgKiBTdGFydCB0aW1lcnMgZm9yIGFsbCBhZGFwdGVycwotCQkgKi8KLQkJZm9yIChpID0gMDsgaSA8IG1lZ2FzYXNfbWdtdF9pbmZvLm1heF9pbmRleDsgaSsrKSB7Ci0JCQlpbnN0YW5jZSA9IG1lZ2FzYXNfbWdtdF9pbmZvLmluc3RhbmNlW2ldOwotCQkJaWYgKGluc3RhbmNlKSB7Ci0JCQkJbWVnYXNhc19zdGFydF90aW1lcihpbnN0YW5jZSwKLQkJCQkJJmluc3RhbmNlLT5pb19jb21wbGV0aW9uX3RpbWVyLAotCQkJCQltZWdhc2FzX2lvX2NvbXBsZXRpb25fdGltZXIsCi0JCQkJCU1FR0FTQVNfQ09NUExFVElPTl9USU1FUl9JTlRFUlZBTCk7Ci0JCQl9Ci0JCX0KLQl9IGVsc2UgewotCQkvKgotCQkgKiBEZWxldGUgdGltZXJzIGZvciBhbGwgYWRhcHRlcnMKLQkJICovCi0JCWZvciAoaSA9IDA7IGkgPCBtZWdhc2FzX21nbXRfaW5mby5tYXhfaW5kZXg7IGkrKykgewotCQkJaW5zdGFuY2UgPSBtZWdhc2FzX21nbXRfaW5mby5pbnN0YW5jZVtpXTsKLQkJCWlmIChpbnN0YW5jZSkKLQkJCQlkZWxfdGltZXJfc3luYygmaW5zdGFuY2UtPmlvX2NvbXBsZXRpb25fdGltZXIpOwotCQl9Ci0JfQotCi1vdXQ6Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQotc3RhdGljIHZvaWQKLW1lZ2FzYXNfYWVuX3BvbGxpbmcoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBtZWdhc2FzX2Flbl9ldmVudCAqZXYgPQotCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IG1lZ2FzYXNfYWVuX2V2ZW50LCBob3RwbHVnX3dvcmspOwotCXN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSA9IGV2LT5pbnN0YW5jZTsKLQl1bmlvbiBtZWdhc2FzX2V2dF9jbGFzc19sb2NhbGUgY2xhc3NfbG9jYWxlOwotCXN0cnVjdCAgU2NzaV9Ib3N0ICpob3N0OwotCXN0cnVjdCAgc2NzaV9kZXZpY2UgKnNkZXYxOwotCXUxNiAgICAgcGRfaW5kZXggPSAwOwotCXUxNglsZF9pbmRleCA9IDA7Ci0JaW50ICAgICBpLCBqLCBkb3NjYW4gPSAwOwotCXUzMiBzZXFfbnVtOwotCWludCBlcnJvcjsKLQotCWlmICghaW5zdGFuY2UpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJpbnZhbGlkIGluc3RhbmNlIVxuIik7Ci0JCWtmcmVlKGV2KTsKLQkJcmV0dXJuOwotCX0KLQlpbnN0YW5jZS0+ZXYgPSBOVUxMOwotCWhvc3QgPSBpbnN0YW5jZS0+aG9zdDsKLQlpZiAoaW5zdGFuY2UtPmV2dF9kZXRhaWwpIHsKLQotCQlzd2l0Y2ggKGluc3RhbmNlLT5ldnRfZGV0YWlsLT5jb2RlKSB7Ci0JCWNhc2UgTVJfRVZUX1BEX0lOU0VSVEVEOgotCQkJaWYgKG1lZ2FzYXNfZ2V0X3BkX2xpc3QoaW5zdGFuY2UpID09IDApIHsKLQkJCWZvciAoaSA9IDA7IGkgPCBNRUdBU0FTX01BWF9QRF9DSEFOTkVMUzsgaSsrKSB7Ci0JCQkJZm9yIChqID0gMDsKLQkJCQlqIDwgTUVHQVNBU19NQVhfREVWX1BFUl9DSEFOTkVMOwotCQkJCWorKykgewotCi0JCQkJcGRfaW5kZXggPQotCQkJCShpICogTUVHQVNBU19NQVhfREVWX1BFUl9DSEFOTkVMKSArIGo7Ci0KLQkJCQlzZGV2MSA9Ci0JCQkJc2NzaV9kZXZpY2VfbG9va3VwKGhvc3QsIGksIGosIDApOwotCi0JCQkJaWYgKGluc3RhbmNlLT5wZF9saXN0W3BkX2luZGV4XS5kcml2ZVN0YXRlCi0JCQkJCQk9PSBNUl9QRF9TVEFURV9TWVNURU0pIHsKLQkJCQkJCWlmICghc2RldjEpIHsKLQkJCQkJCXNjc2lfYWRkX2RldmljZShob3N0LCBpLCBqLCAwKTsKLQkJCQkJCX0KLQotCQkJCQlpZiAoc2RldjEpCi0JCQkJCQlzY3NpX2RldmljZV9wdXQoc2RldjEpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQkJfQotCQkJZG9zY2FuID0gMDsKLQkJCWJyZWFrOwotCi0JCWNhc2UgTVJfRVZUX1BEX1JFTU9WRUQ6Ci0JCQlpZiAobWVnYXNhc19nZXRfcGRfbGlzdChpbnN0YW5jZSkgPT0gMCkgewotCQkJbWVnYXNhc19nZXRfcGRfbGlzdChpbnN0YW5jZSk7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgTUVHQVNBU19NQVhfUERfQ0hBTk5FTFM7IGkrKykgewotCQkJCWZvciAoaiA9IDA7Ci0JCQkJaiA8IE1FR0FTQVNfTUFYX0RFVl9QRVJfQ0hBTk5FTDsKLQkJCQlqKyspIHsKLQotCQkJCXBkX2luZGV4ID0KLQkJCQkoaSAqIE1FR0FTQVNfTUFYX0RFVl9QRVJfQ0hBTk5FTCkgKyBqOwotCi0JCQkJc2RldjEgPQotCQkJCXNjc2lfZGV2aWNlX2xvb2t1cChob3N0LCBpLCBqLCAwKTsKLQotCQkJCWlmIChpbnN0YW5jZS0+cGRfbGlzdFtwZF9pbmRleF0uZHJpdmVTdGF0ZQotCQkJCQk9PSBNUl9QRF9TVEFURV9TWVNURU0pIHsKLQkJCQkJaWYgKHNkZXYxKSB7Ci0JCQkJCQlzY3NpX2RldmljZV9wdXQoc2RldjEpOwotCQkJCQl9Ci0JCQkJfSBlbHNlIHsKLQkJCQkJaWYgKHNkZXYxKSB7Ci0JCQkJCQlzY3NpX3JlbW92ZV9kZXZpY2Uoc2RldjEpOwotCQkJCQkJc2NzaV9kZXZpY2VfcHV0KHNkZXYxKTsKLQkJCQkJfQotCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQl9Ci0JCQlkb3NjYW4gPSAwOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBNUl9FVlRfTERfT0ZGTElORToKLQkJY2FzZSBNUl9FVlRfTERfREVMRVRFRDoKLQkJCW1lZ2FzYXNfZ2V0X2xkX2xpc3QoaW5zdGFuY2UpOwotCQkJZm9yIChpID0gMDsgaSA8IE1FR0FTQVNfTUFYX0xEX0NIQU5ORUxTOyBpKyspIHsKLQkJCQlmb3IgKGogPSAwOwotCQkJCWogPCBNRUdBU0FTX01BWF9ERVZfUEVSX0NIQU5ORUw7Ci0JCQkJaisrKSB7Ci0KLQkJCQlsZF9pbmRleCA9Ci0JCQkJKGkgKiBNRUdBU0FTX01BWF9ERVZfUEVSX0NIQU5ORUwpICsgajsKLQotCQkJCXNkZXYxID0gc2NzaV9kZXZpY2VfbG9va3VwKGhvc3QsCi0JCQkJCWkgKyBNRUdBU0FTX01BWF9MRF9DSEFOTkVMUywKLQkJCQkJaiwKLQkJCQkJMCk7Ci0KLQkJCQlpZiAoaW5zdGFuY2UtPmxkX2lkc1tsZF9pbmRleF0gIT0gMHhmZikgewotCQkJCQlpZiAoc2RldjEpIHsKLQkJCQkJCXNjc2lfZGV2aWNlX3B1dChzZGV2MSk7Ci0JCQkJCX0KLQkJCQl9IGVsc2UgewotCQkJCQlpZiAoc2RldjEpIHsKLQkJCQkJCXNjc2lfcmVtb3ZlX2RldmljZShzZGV2MSk7Ci0JCQkJCQlzY3NpX2RldmljZV9wdXQoc2RldjEpOwotCQkJCQl9Ci0JCQkJfQotCQkJCX0KLQkJCX0KLQkJCWRvc2NhbiA9IDA7Ci0JCQlicmVhazsKLQkJY2FzZSBNUl9FVlRfTERfQ1JFQVRFRDoKLQkJCW1lZ2FzYXNfZ2V0X2xkX2xpc3QoaW5zdGFuY2UpOwotCQkJZm9yIChpID0gMDsgaSA8IE1FR0FTQVNfTUFYX0xEX0NIQU5ORUxTOyBpKyspIHsKLQkJCQlmb3IgKGogPSAwOwotCQkJCQlqIDwgTUVHQVNBU19NQVhfREVWX1BFUl9DSEFOTkVMOwotCQkJCQlqKyspIHsKLQkJCQkJbGRfaW5kZXggPQotCQkJCQkoaSAqIE1FR0FTQVNfTUFYX0RFVl9QRVJfQ0hBTk5FTCkgKyBqOwotCi0JCQkJCXNkZXYxID0gc2NzaV9kZXZpY2VfbG9va3VwKGhvc3QsCi0JCQkJCQlpK01FR0FTQVNfTUFYX0xEX0NIQU5ORUxTLAotCQkJCQkJaiwgMCk7Ci0KLQkJCQkJaWYgKGluc3RhbmNlLT5sZF9pZHNbbGRfaW5kZXhdICE9Ci0JCQkJCQkJCTB4ZmYpIHsKLQkJCQkJCWlmICghc2RldjEpIHsKLQkJCQkJCQlzY3NpX2FkZF9kZXZpY2UoaG9zdCwKLQkJCQkJCQkJaSArIDIsCi0JCQkJCQkJCWosIDApOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJCWlmIChzZGV2MSkgewotCQkJCQkJc2NzaV9kZXZpY2VfcHV0KHNkZXYxKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCWRvc2NhbiA9IDA7Ci0JCQlicmVhazsKLQkJY2FzZSBNUl9FVlRfQ1RSTF9IT1NUX0JVU19TQ0FOX1JFUVVFU1RFRDoKLQkJY2FzZSBNUl9FVlRfRk9SRUlHTl9DRkdfSU1QT1JURUQ6Ci0JCQlkb3NjYW4gPSAxOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlkb3NjYW4gPSAwOwotCQkJYnJlYWs7Ci0JCX0KLQl9IGVsc2UgewotCQlwcmludGsoS0VSTl9FUlIgImludmFsaWQgZXZ0X2RldGFpbCFcbiIpOwotCQlrZnJlZShldik7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAoZG9zY2FuKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gInNjYW5uaW5nIC4uLlxuIik7Ci0JCW1lZ2FzYXNfZ2V0X3BkX2xpc3QoaW5zdGFuY2UpOwotCQlmb3IgKGkgPSAwOyBpIDwgTUVHQVNBU19NQVhfUERfQ0hBTk5FTFM7IGkrKykgewotCQkJZm9yIChqID0gMDsgaiA8IE1FR0FTQVNfTUFYX0RFVl9QRVJfQ0hBTk5FTDsgaisrKSB7Ci0JCQkJcGRfaW5kZXggPSBpKk1FR0FTQVNfTUFYX0RFVl9QRVJfQ0hBTk5FTCArIGo7Ci0JCQkJc2RldjEgPSBzY3NpX2RldmljZV9sb29rdXAoaG9zdCwgaSwgaiwgMCk7Ci0JCQkJaWYgKGluc3RhbmNlLT5wZF9saXN0W3BkX2luZGV4XS5kcml2ZVN0YXRlID09Ci0JCQkJCQkJTVJfUERfU1RBVEVfU1lTVEVNKSB7Ci0JCQkJCWlmICghc2RldjEpIHsKLQkJCQkJCXNjc2lfYWRkX2RldmljZShob3N0LCBpLCBqLCAwKTsKLQkJCQkJfQotCQkJCQlpZiAoc2RldjEpCi0JCQkJCQlzY3NpX2RldmljZV9wdXQoc2RldjEpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWlmIChzZGV2MSkgewotCQkJCQkJc2NzaV9yZW1vdmVfZGV2aWNlKHNkZXYxKTsKLQkJCQkJCXNjc2lfZGV2aWNlX3B1dChzZGV2MSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQltZWdhc2FzX2dldF9sZF9saXN0KGluc3RhbmNlKTsKLQkJZm9yIChpID0gMDsgaSA8IE1FR0FTQVNfTUFYX0xEX0NIQU5ORUxTOyBpKyspIHsKLQkJCWZvciAoaiA9IDA7IGogPCBNRUdBU0FTX01BWF9ERVZfUEVSX0NIQU5ORUw7IGorKykgewotCQkJCWxkX2luZGV4ID0KLQkJCQkoaSAqIE1FR0FTQVNfTUFYX0RFVl9QRVJfQ0hBTk5FTCkgKyBqOwotCi0JCQkJc2RldjEgPSBzY3NpX2RldmljZV9sb29rdXAoaG9zdCwKLQkJCQkJaStNRUdBU0FTX01BWF9MRF9DSEFOTkVMUywgaiwgMCk7Ci0JCQkJaWYgKGluc3RhbmNlLT5sZF9pZHNbbGRfaW5kZXhdICE9IDB4ZmYpIHsKLQkJCQkJaWYgKCFzZGV2MSkgewotCQkJCQkJc2NzaV9hZGRfZGV2aWNlKGhvc3QsCi0JCQkJCQkJCWkrMiwKLQkJCQkJCQkJaiwgMCk7Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQlzY3NpX2RldmljZV9wdXQoc2RldjEpOwotCQkJCQl9Ci0JCQkJfSBlbHNlIHsKLQkJCQkJaWYgKHNkZXYxKSB7Ci0JCQkJCQlzY3NpX3JlbW92ZV9kZXZpY2Uoc2RldjEpOwotCQkJCQkJc2NzaV9kZXZpY2VfcHV0KHNkZXYxKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQotCWlmICggaW5zdGFuY2UtPmFlbl9jbWQgIT0gTlVMTCApIHsKLQkJa2ZyZWUoZXYpOwotCQlyZXR1cm4gOwotCX0KLQotCXNlcV9udW0gPSBpbnN0YW5jZS0+ZXZ0X2RldGFpbC0+c2VxX251bSArIDE7Ci0KLQkvKiBSZWdpc3RlciBBRU4gd2l0aCBGVyBmb3IgbGF0ZXN0IHNlcXVlbmNlIG51bWJlciBwbHVzIDEgKi8KLQljbGFzc19sb2NhbGUubWVtYmVycy5yZXNlcnZlZCA9IDA7Ci0JY2xhc3NfbG9jYWxlLm1lbWJlcnMubG9jYWxlID0gTVJfRVZUX0xPQ0FMRV9BTEw7Ci0JY2xhc3NfbG9jYWxlLm1lbWJlcnMuY2xhc3MgPSBNUl9FVlRfQ0xBU1NfREVCVUc7Ci0JbXV0ZXhfbG9jaygmaW5zdGFuY2UtPmFlbl9tdXRleCk7Ci0JZXJyb3IgPSBtZWdhc2FzX3JlZ2lzdGVyX2FlbihpbnN0YW5jZSwgc2VxX251bSwKLQkJCQkJY2xhc3NfbG9jYWxlLndvcmQpOwotCW11dGV4X3VubG9jaygmaW5zdGFuY2UtPmFlbl9tdXRleCk7Ci0KLQlpZiAoZXJyb3IpCi0JCXByaW50ayhLRVJOX0VSUiAicmVnaXN0ZXIgYWVuIGZhaWxlZCBlcnJvciAleFxuIiwgZXJyb3IpOwotCi0Ja2ZyZWUoZXYpOwotfQotCi0KLXN0YXRpYyBEUklWRVJfQVRUUihwb2xsX21vZGVfaW8sIFNfSVJVR098U19JV1VTUiwKLQkJbWVnYXNhc19zeXNmc19zaG93X3BvbGxfbW9kZV9pbywKLQkJbWVnYXNhc19zeXNmc19zZXRfcG9sbF9tb2RlX2lvKTsKLQotLyoqCi0gKiBtZWdhc2FzX2luaXQgLSBEcml2ZXIgbG9hZCBlbnRyeSBwb2ludAotICovCi1zdGF0aWMgaW50IF9faW5pdCBtZWdhc2FzX2luaXQodm9pZCkKLXsKLQlpbnQgcnZhbDsKLQotCS8qCi0JICogQW5ub3VuY2UgZHJpdmVyIHZlcnNpb24gYW5kIG90aGVyIGluZm9ybWF0aW9uCi0JICovCi0JcHJpbnRrKEtFUk5fSU5GTyAibWVnYXNhczogJXMgJXNcbiIsIE1FR0FTQVNfVkVSU0lPTiwKLQkgICAgICAgTUVHQVNBU19FWFRfVkVSU0lPTik7Ci0KLQlzdXBwb3J0X3BvbGxfZm9yX2V2ZW50ID0gMjsKLQlzdXBwb3J0X2RldmljZV9jaGFuZ2UgPSAxOwotCi0JbWVtc2V0KCZtZWdhc2FzX21nbXRfaW5mbywgMCwgc2l6ZW9mKG1lZ2FzYXNfbWdtdF9pbmZvKSk7Ci0KLQkvKgotCSAqIFJlZ2lzdGVyIGNoYXJhY3RlciBkZXZpY2Ugbm9kZQotCSAqLwotCXJ2YWwgPSByZWdpc3Rlcl9jaHJkZXYoMCwgIm1lZ2FyYWlkX3Nhc19pb2N0bCIsICZtZWdhc2FzX21nbXRfZm9wcyk7Ci0KLQlpZiAocnZhbCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIm1lZ2FzYXM6IGZhaWxlZCB0byBvcGVuIGRldmljZSBub2RlXG4iKTsKLQkJcmV0dXJuIHJ2YWw7Ci0JfQotCi0JbWVnYXNhc19tZ210X21ham9ybm8gPSBydmFsOwotCi0JLyoKLQkgKiBSZWdpc3RlciBvdXJzZWx2ZXMgYXMgUENJIGhvdHBsdWcgbW9kdWxlCi0JICovCi0JcnZhbCA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJm1lZ2FzYXNfcGNpX2RyaXZlcik7Ci0KLQlpZiAocnZhbCkgewotCQlwcmludGsoS0VSTl9ERUJVRyAibWVnYXNhczogUENJIGhvdHBsdWcgcmVnaXNyYXRpb24gZmFpbGVkIFxuIik7Ci0JCWdvdG8gZXJyX3BjaWRydjsKLQl9Ci0KLQlydmFsID0gZHJpdmVyX2NyZWF0ZV9maWxlKCZtZWdhc2FzX3BjaV9kcml2ZXIuZHJpdmVyLAotCQkJCSAgJmRyaXZlcl9hdHRyX3ZlcnNpb24pOwotCWlmIChydmFsKQotCQlnb3RvIGVycl9kY2ZfYXR0cl92ZXI7Ci0JcnZhbCA9IGRyaXZlcl9jcmVhdGVfZmlsZSgmbWVnYXNhc19wY2lfZHJpdmVyLmRyaXZlciwKLQkJCQkgICZkcml2ZXJfYXR0cl9yZWxlYXNlX2RhdGUpOwotCWlmIChydmFsKQotCQlnb3RvIGVycl9kY2ZfcmVsX2RhdGU7Ci0KLQlydmFsID0gZHJpdmVyX2NyZWF0ZV9maWxlKCZtZWdhc2FzX3BjaV9kcml2ZXIuZHJpdmVyLAotCQkJCSZkcml2ZXJfYXR0cl9zdXBwb3J0X3BvbGxfZm9yX2V2ZW50KTsKLQlpZiAocnZhbCkKLQkJZ290byBlcnJfZGNmX3N1cHBvcnRfcG9sbF9mb3JfZXZlbnQ7Ci0KLQlydmFsID0gZHJpdmVyX2NyZWF0ZV9maWxlKCZtZWdhc2FzX3BjaV9kcml2ZXIuZHJpdmVyLAotCQkJCSAgJmRyaXZlcl9hdHRyX2RiZ19sdmwpOwotCWlmIChydmFsKQotCQlnb3RvIGVycl9kY2ZfZGJnX2x2bDsKLQlydmFsID0gZHJpdmVyX2NyZWF0ZV9maWxlKCZtZWdhc2FzX3BjaV9kcml2ZXIuZHJpdmVyLAotCQkJCSAgJmRyaXZlcl9hdHRyX3BvbGxfbW9kZV9pbyk7Ci0JaWYgKHJ2YWwpCi0JCWdvdG8gZXJyX2RjZl9wb2xsX21vZGVfaW87Ci0KLQlydmFsID0gZHJpdmVyX2NyZWF0ZV9maWxlKCZtZWdhc2FzX3BjaV9kcml2ZXIuZHJpdmVyLAotCQkJCSZkcml2ZXJfYXR0cl9zdXBwb3J0X2RldmljZV9jaGFuZ2UpOwotCWlmIChydmFsKQotCQlnb3RvIGVycl9kY2Zfc3VwcG9ydF9kZXZpY2VfY2hhbmdlOwotCi0JcmV0dXJuIHJ2YWw7Ci0KLWVycl9kY2Zfc3VwcG9ydF9kZXZpY2VfY2hhbmdlOgotCWRyaXZlcl9yZW1vdmVfZmlsZSgmbWVnYXNhc19wY2lfZHJpdmVyLmRyaXZlciwKLQkJICAmZHJpdmVyX2F0dHJfcG9sbF9tb2RlX2lvKTsKLQotZXJyX2RjZl9wb2xsX21vZGVfaW86Ci0JZHJpdmVyX3JlbW92ZV9maWxlKCZtZWdhc2FzX3BjaV9kcml2ZXIuZHJpdmVyLAotCQkJICAgJmRyaXZlcl9hdHRyX2RiZ19sdmwpOwotZXJyX2RjZl9kYmdfbHZsOgotCWRyaXZlcl9yZW1vdmVfZmlsZSgmbWVnYXNhc19wY2lfZHJpdmVyLmRyaXZlciwKLQkJCSZkcml2ZXJfYXR0cl9zdXBwb3J0X3BvbGxfZm9yX2V2ZW50KTsKLQotZXJyX2RjZl9zdXBwb3J0X3BvbGxfZm9yX2V2ZW50OgotCWRyaXZlcl9yZW1vdmVfZmlsZSgmbWVnYXNhc19wY2lfZHJpdmVyLmRyaXZlciwKLQkJCSAgICZkcml2ZXJfYXR0cl9yZWxlYXNlX2RhdGUpOwotCi1lcnJfZGNmX3JlbF9kYXRlOgotCWRyaXZlcl9yZW1vdmVfZmlsZSgmbWVnYXNhc19wY2lfZHJpdmVyLmRyaXZlciwgJmRyaXZlcl9hdHRyX3ZlcnNpb24pOwotZXJyX2RjZl9hdHRyX3ZlcjoKLQlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJm1lZ2FzYXNfcGNpX2RyaXZlcik7Ci1lcnJfcGNpZHJ2OgotCXVucmVnaXN0ZXJfY2hyZGV2KG1lZ2FzYXNfbWdtdF9tYWpvcm5vLCAibWVnYXJhaWRfc2FzX2lvY3RsIik7Ci0gIAlyZXR1cm4gcnZhbDsKLX0KLQotLyoqCi0gKiBtZWdhc2FzX2V4aXQgLSBEcml2ZXIgdW5sb2FkIGVudHJ5IHBvaW50Ci0gKi8KLXN0YXRpYyB2b2lkIF9fZXhpdCBtZWdhc2FzX2V4aXQodm9pZCkKLXsKLQlkcml2ZXJfcmVtb3ZlX2ZpbGUoJm1lZ2FzYXNfcGNpX2RyaXZlci5kcml2ZXIsCi0JCQkgICAmZHJpdmVyX2F0dHJfcG9sbF9tb2RlX2lvKTsKLQlkcml2ZXJfcmVtb3ZlX2ZpbGUoJm1lZ2FzYXNfcGNpX2RyaXZlci5kcml2ZXIsCi0JCQkgICAmZHJpdmVyX2F0dHJfZGJnX2x2bCk7Ci0JZHJpdmVyX3JlbW92ZV9maWxlKCZtZWdhc2FzX3BjaV9kcml2ZXIuZHJpdmVyLAotCQkJJmRyaXZlcl9hdHRyX3N1cHBvcnRfcG9sbF9mb3JfZXZlbnQpOwotCWRyaXZlcl9yZW1vdmVfZmlsZSgmbWVnYXNhc19wY2lfZHJpdmVyLmRyaXZlciwKLQkJCSZkcml2ZXJfYXR0cl9zdXBwb3J0X2RldmljZV9jaGFuZ2UpOwotCWRyaXZlcl9yZW1vdmVfZmlsZSgmbWVnYXNhc19wY2lfZHJpdmVyLmRyaXZlciwKLQkJCSAgICZkcml2ZXJfYXR0cl9yZWxlYXNlX2RhdGUpOwotCWRyaXZlcl9yZW1vdmVfZmlsZSgmbWVnYXNhc19wY2lfZHJpdmVyLmRyaXZlciwgJmRyaXZlcl9hdHRyX3ZlcnNpb24pOwotCi0JcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZtZWdhc2FzX3BjaV9kcml2ZXIpOwotCXVucmVnaXN0ZXJfY2hyZGV2KG1lZ2FzYXNfbWdtdF9tYWpvcm5vLCAibWVnYXJhaWRfc2FzX2lvY3RsIik7Ci19Ci0KLW1vZHVsZV9pbml0KG1lZ2FzYXNfaW5pdCk7Ci1tb2R1bGVfZXhpdChtZWdhc2FzX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhcy5oIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhcy5oCmluZGV4IGFkMTZmNWUuLjFiNWUzNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXMuaAorKysgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzLmgKQEAgLTEsMTUgKzEsMzAgQEAKIC8qCisgKiAgTGludXggTWVnYVJBSUQgZHJpdmVyIGZvciBTQVMgYmFzZWQgUkFJRCBjb250cm9sbGVycwogICoKLSAqCQlMaW51eCBNZWdhUkFJRCBkcml2ZXIgZm9yIFNBUyBiYXNlZCBSQUlEIGNvbnRyb2xsZXJzCisgKiAgQ29weXJpZ2h0IChjKSAyMDA5LTIwMTEgIExTSSBDb3Jwb3JhdGlvbi4KICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwNSAgTFNJIENvcnBvcmF0aW9uLgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiAgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKgotICoJCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqCQltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICoJCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgotICoJCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICAqCi0gKiBGSUxFCQk6IG1lZ2FyYWlkX3Nhcy5oCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKgorICogIEZJTEU6IG1lZ2FyYWlkX3Nhcy5oCisgKgorICogIEF1dGhvcnM6IExTSSBDb3Jwb3JhdGlvbgorICoKKyAqICBTZW5kIGZlZWRiYWNrIHRvOiA8bWVnYXJhaWRsaW51eEBsc2kuY29tPgorICoKKyAqICBNYWlsIHRvOiBMU0kgQ29ycG9yYXRpb24sIDE2MjEgQmFyYmVyIExhbmUsIE1pbHBpdGFzLCBDQSA5NTAzNQorICogICAgIEFUVE46IExpbnV4cmFpZAogICovCiAKICNpZm5kZWYgTFNJX01FR0FSQUlEX1NBU19ICkBAIC0xOCw5ICszMyw5IEBACiAvKgogICogTWVnYVJBSUQgU0FTIERyaXZlciBtZXRhIGRhdGEKICAqLwotI2RlZmluZSBNRUdBU0FTX1ZFUlNJT04JCQkiMDAuMDAuMDQuMzEtcmMxIgotI2RlZmluZSBNRUdBU0FTX1JFTERBVEUJCQkiTWF5IDMsIDIwMTAiCi0jZGVmaW5lIE1FR0FTQVNfRVhUX1ZFUlNJT04JCSJNb24uIE1heSAzLCAxMTo0MTo1MSBQU1QgMjAxMCIKKyNkZWZpbmUgTUVHQVNBU19WRVJTSU9OCQkJCSIwMC4wMC4wNS4yOS1yYzEiCisjZGVmaW5lIE1FR0FTQVNfUkVMREFURQkJCQkiRGVjLiA3LCAyMDEwIgorI2RlZmluZSBNRUdBU0FTX0VYVF9WRVJTSU9OCQkJIlR1ZS4gRGVjLiA3IDE3OjAwOjAwIFBEVCAyMDEwIgogCiAvKgogICogRGV2aWNlIElEcwpAQCAtMzIsNiArNDcsNyBAQAogI2RlZmluZQlQQ0lfREVWSUNFX0lEX0xTSV9TQVMwMDc5R0VOMgkJMHgwMDc5CiAjZGVmaW5lCVBDSV9ERVZJQ0VfSURfTFNJX1NBUzAwNzNTS0lOTlkJCTB4MDA3MwogI2RlZmluZQlQQ0lfREVWSUNFX0lEX0xTSV9TQVMwMDcxU0tJTk5ZCQkweDAwNzEKKyNkZWZpbmUJUENJX0RFVklDRV9JRF9MU0lfRlVTSU9OCQkweDAwNWIKIAogLyoKICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTQyMSw3ICs0MzcsNiBAQAogCSogQWRkIHByb3BlcnRpZXMgdGhhdCBjYW4gYmUgY29udHJvbGxlZCBieQogCSogYSBiaXQgaW4gdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUuCiAJKi8KLQogCXN0cnVjdCB7CiAJCXUzMiAgICAgY29weUJhY2tEaXNhYmxlZCAgICAgICAgICAgIDogMTsKIAkJdTMyICAgICBTTUFSVGVyRW5hYmxlZCAgICAgICAgICAgICAgOiAxOwpAQCAtNzAxLDYgKzcxNiw3IEBACiAjZGVmaW5lIE1FR0FTQVNfREVGQVVMVF9JTklUX0lECQkJLTEKICNkZWZpbmUgTUVHQVNBU19NQVhfTFVOCQkJCTgKICNkZWZpbmUgTUVHQVNBU19NQVhfTEQJCQkJNjQKKyNkZWZpbmUgTUVHQVNBU19ERUZBVUxUX0NNRF9QRVJfTFVOCQkxMjgKICNkZWZpbmUgTUVHQVNBU19NQVhfUEQgICAgICAgICAgICAgICAgICAgICAgICAgIChNRUdBU0FTX01BWF9QRF9DSEFOTkVMUyAqIFwKIAkJCQkJCU1FR0FTQVNfTUFYX0RFVl9QRVJfQ0hBTk5FTCkKICNkZWZpbmUgTUVHQVNBU19NQVhfTERfSURTCQkJKE1FR0FTQVNfTUFYX0xEX0NIQU5ORUxTICogXApAQCAtNzY5LDcgKzc4NSwxMCBAQAogKi8KICAKIHN0cnVjdCBtZWdhc2FzX3JlZ2lzdGVyX3NldCB7Ci0JdTMyIAlyZXNlcnZlZF8wWzRdOwkJCS8qMDAwMGgqLworCXUzMglkb29yYmVsbDsgICAgICAgICAgICAgICAgICAgICAgIC8qMDAwMGgqLworCXUzMglmdXNpb25fc2VxX29mZnNldDsJCS8qMDAwNGgqLworCXUzMglmdXNpb25faG9zdF9kaWFnOwkJLyowMDA4aCovCisJdTMyCXJlc2VydmVkXzAxOwkJCS8qMDAwQ2gqLwogCiAJdTMyIAlpbmJvdW5kX21zZ18wOwkJCS8qMDAxMGgqLwogCXUzMiAJaW5ib3VuZF9tc2dfMTsJCQkvKjAwMTRoKi8KQEAgLTc4OSwxNSArODA4LDE4IEBACiAJdTMyIAlpbmJvdW5kX3F1ZXVlX3BvcnQ7CQkvKjAwNDBoKi8KIAl1MzIgCW91dGJvdW5kX3F1ZXVlX3BvcnQ7CQkvKjAwNDRoKi8KIAotCXUzMiAJcmVzZXJ2ZWRfMlsyMl07CQkJLyowMDQ4aCovCisJdTMyCXJlc2VydmVkXzJbOV07CQkJLyowMDQ4aCovCisJdTMyCXJlcGx5X3Bvc3RfaG9zdF9pbmRleDsJCS8qMDA2Q2gqLworCXUzMglyZXNlcnZlZF8yXzJbMTJdOwkJLyowMDcwaCovCiAKIAl1MzIgCW91dGJvdW5kX2Rvb3JiZWxsX2NsZWFyOwkvKjAwQTBoKi8KIAogCXUzMiAJcmVzZXJ2ZWRfM1szXTsJCQkvKjAwQTRoKi8KIAogCXUzMiAJb3V0Ym91bmRfc2NyYXRjaF9wYWQgOwkJLyowMEIwaCovCisJdTMyCW91dGJvdW5kX3NjcmF0Y2hfcGFkXzI7ICAgICAgICAgLyowMEI0aCovCiAKLQl1MzIgCXJlc2VydmVkXzRbM107CQkJLyowMEI0aCovCisJdTMyCXJlc2VydmVkXzRbMl07CQkJLyowMEI4aCovCiAKIAl1MzIgCWluYm91bmRfbG93X3F1ZXVlX3BvcnQgOwkvKjAwQzBoKi8KIApAQCAtMTI3Miw2ICsxMjk0LDkgQEAKIAogCXUxNiBtYXhfbnVtX3NnZTsKIAl1MTYgbWF4X2Z3X2NtZHM7CisJLyogRm9yIEZ1c2lvbiBpdHMgbnVtIElPQ1RMIGNtZHMsIGZvciBvdGhlcnMgTUZJIGJhc2VkIGl0cworCSAgIG1heF9md19jbWRzICovCisJdTE2IG1heF9tZmlfY21kczsKIAl1MzIgbWF4X3NlY3RvcnNfcGVyX3JlcTsKIAlzdHJ1Y3QgbWVnYXNhc19hZW5fZXZlbnQgKmV2OwogCkBAIC0xMzIwLDYgKzEzNDUsMTYgQEAKIAogCXN0cnVjdCB0aW1lcl9saXN0IGlvX2NvbXBsZXRpb25fdGltZXI7CiAJc3RydWN0IGxpc3RfaGVhZCBpbnRlcm5hbF9yZXNldF9wZW5kaW5nX3E7CisKKwkvKiBQdHIgdG8gaGJhIHNwZWNmaWMgaW5mb3JtYXRpb24gKi8KKwl2b2lkICpjdHJsX2NvbnRleHQ7CisJdTgJbXNpX2ZsYWc7CisJc3RydWN0IG1zaXhfZW50cnkgbXNpeGVudHJ5OworCXU2NCBtYXBfaWQ7CisJc3RydWN0IG1lZ2FzYXNfY21kICptYXBfdXBkYXRlX2NtZDsKKwl1bnNpZ25lZCBsb25nIGJhcjsKKwlsb25nIHJlc2V0X2ZsYWdzOworCXN0cnVjdCBtdXRleCByZXNldF9tdXRleDsKIH07CiAKIGVudW0gewpAQCAtMTM0NSw2ICsxMzgwLDEzIEBACiAJCXN0cnVjdCBtZWdhc2FzX3JlZ2lzdGVyX3NldCBfX2lvbWVtICopOwogCWludCAoKmNoZWNrX3Jlc2V0KShzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqLCBcCiAJCXN0cnVjdCBtZWdhc2FzX3JlZ2lzdGVyX3NldCBfX2lvbWVtICopOworCWlycXJldHVybl90ICgqc2VydmljZV9pc3IpKGludCBpcnEsIHZvaWQgKmRldnApOworCXZvaWQgKCp0YXNrbGV0KSh1bnNpZ25lZCBsb25nKTsKKwl1MzIgKCppbml0X2FkYXB0ZXIpKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICopOworCXUzMiAoKmJ1aWxkX2FuZF9pc3N1ZV9jbWQpIChzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqLAorCQkJCSAgICBzdHJ1Y3Qgc2NzaV9jbW5kICopOworCXZvaWQgKCppc3N1ZV9kY21kKSAoc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlLAorCQkJICAgIHN0cnVjdCBtZWdhc2FzX2NtZCAqY21kKTsKIH07CiAKICNkZWZpbmUgTUVHQVNBU19JU19MT0dJQ0FMKHNjcCkJCQkJCQlcCkBAIC0xMzcxLDcgKzE0MTMsMTMgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJc3RydWN0IHNjc2lfY21uZCAqc2NtZDsKIAlzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2U7Ci0JdTMyIGZyYW1lX2NvdW50OworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXUxNiBzbWlkOworCQkJdTE2IHJlc3ZkOworCQl9IGNvbnRleHQ7CisJCXUzMiBmcmFtZV9jb3VudDsKKwl9OwogfTsKIAogI2RlZmluZSBNQVhfTUdNVF9BREFQVEVSUwkJMTAyNApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhc19iYXNlLmMgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzX2Jhc2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDZkMDdiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhc19iYXNlLmMKQEAgLTAsMCArMSw1NDQ0IEBACisvKgorICogIExpbnV4IE1lZ2FSQUlEIGRyaXZlciBmb3IgU0FTIGJhc2VkIFJBSUQgY29udHJvbGxlcnMKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDA5LTIwMTEgIExTSSBDb3Jwb3JhdGlvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqICBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKgorICogIEZJTEU6IG1lZ2FyYWlkX3Nhc19iYXNlLmMKKyAqICBWZXJzaW9uIDogdjAwLjAwLjA1LjI5LXJjMQorICoKKyAqICBBdXRob3JzOiBMU0kgQ29ycG9yYXRpb24KKyAqICAgICAgICAgICBTcmVlbml2YXMgQmFnYWxrb3RlCisgKiAgICAgICAgICAgU3VtYW50IFBhdHJvCisgKiAgICAgICAgICAgQm8gWWFuZworICoKKyAqICBTZW5kIGZlZWRiYWNrIHRvOiA8bWVnYXJhaWRsaW51eEBsc2kuY29tPgorICoKKyAqICBNYWlsIHRvOiBMU0kgQ29ycG9yYXRpb24sIDE2MjEgQmFyYmVyIExhbmUsIE1pbHBpdGFzLCBDQSA5NTAzNQorICogICAgIEFUVE46IExpbnV4cmFpZAorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC91aW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorCisjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2NtbmQuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfZGV2aWNlLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KKyNpbmNsdWRlICJtZWdhcmFpZF9zYXNfZnVzaW9uLmgiCisjaW5jbHVkZSAibWVnYXJhaWRfc2FzLmgiCisKKy8qCisgKiBwb2xsX21vZGVfaW86MS0gc2NoZWR1bGUgY29tcGxldGUgY29tcGxldGlvbiBmcm9tIHEgY21kCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgcG9sbF9tb2RlX2lvOworbW9kdWxlX3BhcmFtX25hbWVkKHBvbGxfbW9kZV9pbywgcG9sbF9tb2RlX2lvLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhwb2xsX21vZGVfaW8sCisJIkNvbXBsZXRlIGNtZHMgZnJvbSBJTyBwYXRoLCAoZGVmYXVsdD0wKSIpOworCisvKgorICogTnVtYmVyIG9mIHNlY3RvcnMgcGVyIElPIGNvbW1hbmQKKyAqIFdpbGwgYmUgc2V0IGluIG1lZ2FzYXNfaW5pdF9tZmkgaWYgdXNlciBkb2VzIG5vdCBwcm92aWRlCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgbWF4X3NlY3RvcnM7Cittb2R1bGVfcGFyYW1fbmFtZWQobWF4X3NlY3RvcnMsIG1heF9zZWN0b3JzLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhtYXhfc2VjdG9ycywKKwkiTWF4aW11bSBudW1iZXIgb2Ygc2VjdG9ycyBwZXIgSU8gY29tbWFuZCIpOworCitzdGF0aWMgaW50IG1zaXhfZGlzYWJsZTsKK21vZHVsZV9wYXJhbShtc2l4X2Rpc2FibGUsIGludCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKG1zaXhfZGlzYWJsZSwgIkRpc2FibGUgTVNJLVggaW50ZXJydXB0IGhhbmRsaW5nLiBEZWZhdWx0OiAwIik7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9WRVJTSU9OKE1FR0FTQVNfVkVSU0lPTik7CitNT0RVTEVfQVVUSE9SKCJtZWdhcmFpZGxpbnV4QGxzaS5jb20iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTFNJIE1lZ2FSQUlEIFNBUyBEcml2ZXIiKTsKKworaW50IG1lZ2FzYXNfdHJhbnNpdGlvbl90b19yZWFkeShzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UpOworc3RhdGljIGludCBtZWdhc2FzX2dldF9wZF9saXN0KHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSk7CitzdGF0aWMgaW50IG1lZ2FzYXNfaXNzdWVfaW5pdF9tZmkoc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlKTsKK3N0YXRpYyBpbnQgbWVnYXNhc19yZWdpc3Rlcl9hZW4oc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlLAorCQkJCXUzMiBzZXFfbnVtLCB1MzIgY2xhc3NfbG9jYWxlX3dvcmQpOworLyoKKyAqIFBDSSBJRCB0YWJsZSBmb3IgYWxsIHN1cHBvcnRlZCBjb250cm9sbGVycworICovCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgbWVnYXNhc19wY2lfdGFibGVbXSA9IHsKKworCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTFNJX0xPR0lDLCBQQ0lfREVWSUNFX0lEX0xTSV9TQVMxMDY0Uil9LAorCS8qIHhzY2FsZSBJT1AgKi8KKwl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0xTSV9MT0dJQywgUENJX0RFVklDRV9JRF9MU0lfU0FTMTA3OFIpfSwKKwkvKiBwcGMgSU9QICovCisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9MU0lfTE9HSUMsIFBDSV9ERVZJQ0VfSURfTFNJX1NBUzEwNzhERSl9LAorCS8qIHBwYyBJT1AgKi8KKwl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0xTSV9MT0dJQywgUENJX0RFVklDRV9JRF9MU0lfU0FTMTA3OEdFTjIpfSwKKwkvKiBnZW4yKi8KKwl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0xTSV9MT0dJQywgUENJX0RFVklDRV9JRF9MU0lfU0FTMDA3OUdFTjIpfSwKKwkvKiBnZW4yKi8KKwl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0xTSV9MT0dJQywgUENJX0RFVklDRV9JRF9MU0lfU0FTMDA3M1NLSU5OWSl9LAorCS8qIHNraW5ueSovCisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9MU0lfTE9HSUMsIFBDSV9ERVZJQ0VfSURfTFNJX1NBUzAwNzFTS0lOTlkpfSwKKwkvKiBza2lubnkqLworCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTFNJX0xPR0lDLCBQQ0lfREVWSUNFX0lEX0xTSV9WRVJERV9aQ1IpfSwKKwkvKiB4c2NhbGUgSU9QLCB2ZWdhICovCisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9ERUxMLCBQQ0lfREVWSUNFX0lEX0RFTExfUEVSQzUpfSwKKwkvKiB4c2NhbGUgSU9QICovCisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9MU0lfTE9HSUMsIFBDSV9ERVZJQ0VfSURfTFNJX0ZVU0lPTil9LAorCS8qIEZ1c2lvbiAqLworCXt9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgbWVnYXNhc19wY2lfdGFibGUpOworCitzdGF0aWMgaW50IG1lZ2FzYXNfbWdtdF9tYWpvcm5vOworc3RhdGljIHN0cnVjdCBtZWdhc2FzX21nbXRfaW5mbyBtZWdhc2FzX21nbXRfaW5mbzsKK3N0YXRpYyBzdHJ1Y3QgZmFzeW5jX3N0cnVjdCAqbWVnYXNhc19hc3luY19xdWV1ZTsKK3N0YXRpYyBERUZJTkVfTVVURVgobWVnYXNhc19hc3luY19xdWV1ZV9tdXRleCk7CisKK3N0YXRpYyBpbnQgbWVnYXNhc19wb2xsX3dhaXRfYWVuOworc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKG1lZ2FzYXNfcG9sbF93YWl0KTsKK3N0YXRpYyB1MzIgc3VwcG9ydF9wb2xsX2Zvcl9ldmVudDsKK3UzMiBtZWdhc2FzX2RiZ19sdmw7CitzdGF0aWMgdTMyIHN1cHBvcnRfZGV2aWNlX2NoYW5nZTsKKworLyogZGVmaW5lIGxvY2sgZm9yIGFlbiBwb2xsICovCitzcGlubG9ja190IHBvbGxfYWVuX2xvY2s7CisKK3ZvaWQKK21lZ2FzYXNfY29tcGxldGVfY21kKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSwgc3RydWN0IG1lZ2FzYXNfY21kICpjbWQsCisJCSAgICAgdTggYWx0X3N0YXR1cyk7CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBtZWdhc2FzX2lzcihpbnQgaXJxLCB2b2lkICpkZXZwKTsKK3N0YXRpYyB1MzIKK21lZ2FzYXNfaW5pdF9hZGFwdGVyX21maShzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UpOwordTMyCittZWdhc2FzX2J1aWxkX2FuZF9pc3N1ZV9jbWQoc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlLAorCQkJICAgIHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQpOworc3RhdGljIHZvaWQgbWVnYXNhc19jb21wbGV0ZV9jbWRfZHBjKHVuc2lnbmVkIGxvbmcgaW5zdGFuY2VfYWRkcik7Cit2b2lkCittZWdhc2FzX3JlbGVhc2VfZnVzaW9uKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSk7CitpbnQKK21lZ2FzYXNfaW9jX2luaXRfZnVzaW9uKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSk7Cit2b2lkCittZWdhc2FzX2ZyZWVfY21kc19mdXNpb24oc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlKTsKK3U4CittZWdhc2FzX2dldF9tYXBfaW5mbyhzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UpOworaW50CittZWdhc2FzX3N5bmNfbWFwX2luZm8oc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlKTsKK2ludAord2FpdF9hbmRfcG9sbChzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UsIHN0cnVjdCBtZWdhc2FzX2NtZCAqY21kKTsKK3ZvaWQgbWVnYXNhc19yZXNldF9yZXBseV9kZXNjKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSk7Cit1OCBNUl9WYWxpZGF0ZU1hcEluZm8oc3RydWN0IE1SX0ZXX1JBSURfTUFQX0FMTCAqbWFwLAorCQkgICAgICBzdHJ1Y3QgTERfTE9BRF9CQUxBTkNFX0lORk8gKmxiSW5mbyk7CitpbnQgbWVnYXNhc19yZXNldF9mdXNpb24oc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpOwordm9pZCBtZWdhc2FzX2Z1c2lvbl9vY3Jfd3Eoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKKwordm9pZAorbWVnYXNhc19pc3N1ZV9kY21kKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSwgc3RydWN0IG1lZ2FzYXNfY21kICpjbWQpCit7CisJaW5zdGFuY2UtPmluc3RhbmNldC0+ZmlyZV9jbWQoaW5zdGFuY2UsCisJCWNtZC0+ZnJhbWVfcGh5c19hZGRyLCAwLCBpbnN0YW5jZS0+cmVnX3NldCk7Cit9CisKKy8qKgorICogbWVnYXNhc19nZXRfY21kIC0JR2V0IGEgY29tbWFuZCBmcm9tIHRoZSBmcmVlIHBvb2wKKyAqIEBpbnN0YW5jZToJCUFkYXB0ZXIgc29mdCBzdGF0ZQorICoKKyAqIFJldHVybnMgYSBmcmVlIGNvbW1hbmQgZnJvbSB0aGUgcG9vbAorICovCitzdHJ1Y3QgbWVnYXNhc19jbWQgKm1lZ2FzYXNfZ2V0X2NtZChzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZQorCQkJCQkJICAqaW5zdGFuY2UpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgbWVnYXNhc19jbWQgKmNtZCA9IE5VTEw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW5zdGFuY2UtPmNtZF9wb29sX2xvY2ssIGZsYWdzKTsKKworCWlmICghbGlzdF9lbXB0eSgmaW5zdGFuY2UtPmNtZF9wb29sKSkgeworCQljbWQgPSBsaXN0X2VudHJ5KCgmaW5zdGFuY2UtPmNtZF9wb29sKS0+bmV4dCwKKwkJCQkgc3RydWN0IG1lZ2FzYXNfY21kLCBsaXN0KTsKKwkJbGlzdF9kZWxfaW5pdCgmY21kLT5saXN0KTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9FUlIgIm1lZ2FzYXM6IENvbW1hbmQgcG9vbCBlbXB0eSFcbiIpOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluc3RhbmNlLT5jbWRfcG9vbF9sb2NrLCBmbGFncyk7CisJcmV0dXJuIGNtZDsKK30KKworLyoqCisgKiBtZWdhc2FzX3JldHVybl9jbWQgLQlSZXR1cm4gYSBjbWQgdG8gZnJlZSBjb21tYW5kIHBvb2wKKyAqIEBpbnN0YW5jZToJCUFkYXB0ZXIgc29mdCBzdGF0ZQorICogQGNtZDoJCUNvbW1hbmQgcGFja2V0IHRvIGJlIHJldHVybmVkIHRvIGZyZWUgY29tbWFuZCBwb29sCisgKi8KK2lubGluZSB2b2lkCittZWdhc2FzX3JldHVybl9jbWQoc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlLCBzdHJ1Y3QgbWVnYXNhc19jbWQgKmNtZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmluc3RhbmNlLT5jbWRfcG9vbF9sb2NrLCBmbGFncyk7CisKKwljbWQtPnNjbWQgPSBOVUxMOworCWNtZC0+ZnJhbWVfY291bnQgPSAwOworCWxpc3RfYWRkX3RhaWwoJmNtZC0+bGlzdCwgJmluc3RhbmNlLT5jbWRfcG9vbCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbnN0YW5jZS0+Y21kX3Bvb2xfbG9jaywgZmxhZ3MpOworfQorCisKKy8qKgorKglUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZCBmb3IgeHNjYWxlCisqCShkZXZpY2VpZCA6IDEwNjRSLCBQRVJDNSkgY29udHJvbGxlcnMKKyovCisKKy8qKgorICogbWVnYXNhc19lbmFibGVfaW50cl94c2NhbGUgLQlFbmFibGVzIGludGVycnVwdHMKKyAqIEByZWdzOgkJCU1GSSByZWdpc3RlciBzZXQKKyAqLworc3RhdGljIGlubGluZSB2b2lkCittZWdhc2FzX2VuYWJsZV9pbnRyX3hzY2FsZShzdHJ1Y3QgbWVnYXNhc19yZWdpc3Rlcl9zZXQgX19pb21lbSAqIHJlZ3MpCit7CisJd3JpdGVsKDAsICYocmVncyktPm91dGJvdW5kX2ludHJfbWFzayk7CisKKwkvKiBEdW1teSByZWFkbCB0byBmb3JjZSBwY2kgZmx1c2ggKi8KKwlyZWFkbCgmcmVncy0+b3V0Ym91bmRfaW50cl9tYXNrKTsKK30KKworLyoqCisgKiBtZWdhc2FzX2Rpc2FibGVfaW50cl94c2NhbGUgLURpc2FibGVzIGludGVycnVwdAorICogQHJlZ3M6CQkJTUZJIHJlZ2lzdGVyIHNldAorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK21lZ2FzYXNfZGlzYWJsZV9pbnRyX3hzY2FsZShzdHJ1Y3QgbWVnYXNhc19yZWdpc3Rlcl9zZXQgX19pb21lbSAqIHJlZ3MpCit7CisJdTMyIG1hc2sgPSAweDFmOworCXdyaXRlbChtYXNrLCAmcmVncy0+b3V0Ym91bmRfaW50cl9tYXNrKTsKKwkvKiBEdW1teSByZWFkbCB0byBmb3JjZSBwY2kgZmx1c2ggKi8KKwlyZWFkbCgmcmVncy0+b3V0Ym91bmRfaW50cl9tYXNrKTsKK30KKworLyoqCisgKiBtZWdhc2FzX3JlYWRfZndfc3RhdHVzX3JlZ194c2NhbGUgLSByZXR1cm5zIHRoZSBjdXJyZW50IEZXIHN0YXR1cyB2YWx1ZQorICogQHJlZ3M6CQkJTUZJIHJlZ2lzdGVyIHNldAorICovCitzdGF0aWMgdTMyCittZWdhc2FzX3JlYWRfZndfc3RhdHVzX3JlZ194c2NhbGUoc3RydWN0IG1lZ2FzYXNfcmVnaXN0ZXJfc2V0IF9faW9tZW0gKiByZWdzKQoreworCXJldHVybiByZWFkbCgmKHJlZ3MpLT5vdXRib3VuZF9tc2dfMCk7Cit9CisvKioKKyAqIG1lZ2FzYXNfY2xlYXJfaW50ZXJydXB0X3hzY2FsZSAtCUNoZWNrICYgY2xlYXIgaW50ZXJydXB0CisgKiBAcmVnczoJCQkJTUZJIHJlZ2lzdGVyIHNldAorICovCitzdGF0aWMgaW50CittZWdhc2FzX2NsZWFyX2ludHJfeHNjYWxlKHN0cnVjdCBtZWdhc2FzX3JlZ2lzdGVyX3NldCBfX2lvbWVtICogcmVncykKK3sKKwl1MzIgc3RhdHVzOworCXUzMiBtZmlTdGF0dXMgPSAwOworCS8qCisJICogQ2hlY2sgaWYgaXQgaXMgb3VyIGludGVycnVwdAorCSAqLworCXN0YXR1cyA9IHJlYWRsKCZyZWdzLT5vdXRib3VuZF9pbnRyX3N0YXR1cyk7CisKKwlpZiAoc3RhdHVzICYgTUZJX09CX0lOVFJfU1RBVFVTX01BU0spCisJCW1maVN0YXR1cyA9IE1GSV9JTlRSX0ZMQUdfUkVQTFlfTUVTU0FHRTsKKwlpZiAoc3RhdHVzICYgTUZJX1hTQ0FMRV9PTVIwX0NIQU5HRV9JTlRFUlJVUFQpCisJCW1maVN0YXR1cyB8PSBNRklfSU5UUl9GTEFHX0ZJUk1XQVJFX1NUQVRFX0NIQU5HRTsKKworCS8qCisJICogQ2xlYXIgdGhlIGludGVycnVwdCBieSB3cml0aW5nIGJhY2sgdGhlIHNhbWUgdmFsdWUKKwkgKi8KKwlpZiAobWZpU3RhdHVzKQorCQl3cml0ZWwoc3RhdHVzLCAmcmVncy0+b3V0Ym91bmRfaW50cl9zdGF0dXMpOworCisJLyogRHVtbXkgcmVhZGwgdG8gZm9yY2UgcGNpIGZsdXNoICovCisJcmVhZGwoJnJlZ3MtPm91dGJvdW5kX2ludHJfc3RhdHVzKTsKKworCXJldHVybiBtZmlTdGF0dXM7Cit9CisKKy8qKgorICogbWVnYXNhc19maXJlX2NtZF94c2NhbGUgLQlTZW5kcyBjb21tYW5kIHRvIHRoZSBGVworICogQGZyYW1lX3BoeXNfYWRkciA6CQlQaHlzaWNhbCBhZGRyZXNzIG9mIGNtZAorICogQGZyYW1lX2NvdW50IDoJCU51bWJlciBvZiBmcmFtZXMgZm9yIHRoZSBjb21tYW5kCisgKiBAcmVncyA6CQkJTUZJIHJlZ2lzdGVyIHNldAorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK21lZ2FzYXNfZmlyZV9jbWRfeHNjYWxlKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSwKKwkJZG1hX2FkZHJfdCBmcmFtZV9waHlzX2FkZHIsCisJCXUzMiBmcmFtZV9jb3VudCwKKwkJc3RydWN0IG1lZ2FzYXNfcmVnaXN0ZXJfc2V0IF9faW9tZW0gKnJlZ3MpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW5zdGFuY2UtPmhiYV9sb2NrLCBmbGFncyk7CisJd3JpdGVsKChmcmFtZV9waHlzX2FkZHIgPj4gMyl8KGZyYW1lX2NvdW50KSwKKwkgICAgICAgJihyZWdzKS0+aW5ib3VuZF9xdWV1ZV9wb3J0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbnN0YW5jZS0+aGJhX2xvY2ssIGZsYWdzKTsKK30KKworLyoqCisgKiBtZWdhc2FzX2FkcF9yZXNldF94c2NhbGUgLSAgRm9yIGNvbnRyb2xsZXIgcmVzZXQKKyAqIEByZWdzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1GSSByZWdpc3RlciBzZXQKKyAqLworc3RhdGljIGludAorbWVnYXNhc19hZHBfcmVzZXRfeHNjYWxlKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSwKKwlzdHJ1Y3QgbWVnYXNhc19yZWdpc3Rlcl9zZXQgX19pb21lbSAqcmVncykKK3sKKwl1MzIgaTsKKwl1MzIgcGNpZGF0YTsKKwl3cml0ZWwoTUZJX0FEUF9SRVNFVCwgJnJlZ3MtPmluYm91bmRfZG9vcmJlbGwpOworCisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKKwkJbXNsZWVwKDEwMDApOyAvKiBzbGVlcCBmb3IgMyBzZWNzICovCisJcGNpZGF0YSAgPSAwOworCXBjaV9yZWFkX2NvbmZpZ19kd29yZChpbnN0YW5jZS0+cGRldiwgTUZJXzEwNjhfUENTUl9PRkZTRVQsICZwY2lkYXRhKTsKKwlwcmludGsoS0VSTl9OT1RJQ0UgInBjaWRhdGEgPSAleFxuIiwgcGNpZGF0YSk7CisJaWYgKHBjaWRhdGEgJiAweDIpIHsKKwkJcHJpbnRrKEtFUk5fTk9USUNFICJtZmkgMTA2OCBvZmZzZXQgcmVhZD0leFxuIiwgcGNpZGF0YSk7CisJCXBjaWRhdGEgJj0gfjB4MjsKKwkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChpbnN0YW5jZS0+cGRldiwKKwkJCQlNRklfMTA2OF9QQ1NSX09GRlNFVCwgcGNpZGF0YSk7CisKKwkJZm9yIChpID0gMDsgaSA8IDI7IGkrKykKKwkJCW1zbGVlcCgxMDAwKTsgLyogbmVlZCB0byB3YWl0IDIgc2VjcyBhZ2FpbiAqLworCisJCXBjaWRhdGEgID0gMDsKKwkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGluc3RhbmNlLT5wZGV2LAorCQkJCU1GSV8xMDY4X0ZXX0hBTkRTSEFLRV9PRkZTRVQsICZwY2lkYXRhKTsKKwkJcHJpbnRrKEtFUk5fTk9USUNFICIxMDY4IG9mZnNldCBoYW5kc2hha2UgcmVhZD0leFxuIiwgcGNpZGF0YSk7CisJCWlmICgocGNpZGF0YSAmIDB4ZmZmZjAwMDApID09IE1GSV8xMDY4X0ZXX1JFQURZKSB7CisJCQlwcmludGsoS0VSTl9OT1RJQ0UgIjEwNjggb2Zmc2V0IHBjaWR0PSV4XG4iLCBwY2lkYXRhKTsKKwkJCXBjaWRhdGEgPSAwOworCQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChpbnN0YW5jZS0+cGRldiwKKwkJCQlNRklfMTA2OF9GV19IQU5EU0hBS0VfT0ZGU0VULCBwY2lkYXRhKTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBtZWdhc2FzX2NoZWNrX3Jlc2V0X3hzY2FsZSAtCUZvciBjb250cm9sbGVyIHJlc2V0IGNoZWNrCisgKiBAcmVnczoJCQkJTUZJIHJlZ2lzdGVyIHNldAorICovCitzdGF0aWMgaW50CittZWdhc2FzX2NoZWNrX3Jlc2V0X3hzY2FsZShzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UsCisJCXN0cnVjdCBtZWdhc2FzX3JlZ2lzdGVyX3NldCBfX2lvbWVtICpyZWdzKQoreworCXUzMiBjb25zdW1lcjsKKwljb25zdW1lciA9ICppbnN0YW5jZS0+Y29uc3VtZXI7CisKKwlpZiAoKGluc3RhbmNlLT5hZHByZWNvdmVyeSAhPSBNRUdBU0FTX0hCQV9PUEVSQVRJT05BTCkgJiYKKwkJKCppbnN0YW5jZS0+Y29uc3VtZXIgPT0gTUVHQVNBU19BRFBSRVNFVF9JTlBST0dfU0lHTikpIHsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2VfdGVtcGxhdGUgbWVnYXNhc19pbnN0YW5jZV90ZW1wbGF0ZV94c2NhbGUgPSB7CisKKwkuZmlyZV9jbWQgPSBtZWdhc2FzX2ZpcmVfY21kX3hzY2FsZSwKKwkuZW5hYmxlX2ludHIgPSBtZWdhc2FzX2VuYWJsZV9pbnRyX3hzY2FsZSwKKwkuZGlzYWJsZV9pbnRyID0gbWVnYXNhc19kaXNhYmxlX2ludHJfeHNjYWxlLAorCS5jbGVhcl9pbnRyID0gbWVnYXNhc19jbGVhcl9pbnRyX3hzY2FsZSwKKwkucmVhZF9md19zdGF0dXNfcmVnID0gbWVnYXNhc19yZWFkX2Z3X3N0YXR1c19yZWdfeHNjYWxlLAorCS5hZHBfcmVzZXQgPSBtZWdhc2FzX2FkcF9yZXNldF94c2NhbGUsCisJLmNoZWNrX3Jlc2V0ID0gbWVnYXNhc19jaGVja19yZXNldF94c2NhbGUsCisJLnNlcnZpY2VfaXNyID0gbWVnYXNhc19pc3IsCisJLnRhc2tsZXQgPSBtZWdhc2FzX2NvbXBsZXRlX2NtZF9kcGMsCisJLmluaXRfYWRhcHRlciA9IG1lZ2FzYXNfaW5pdF9hZGFwdGVyX21maSwKKwkuYnVpbGRfYW5kX2lzc3VlX2NtZCA9IG1lZ2FzYXNfYnVpbGRfYW5kX2lzc3VlX2NtZCwKKwkuaXNzdWVfZGNtZCA9IG1lZ2FzYXNfaXNzdWVfZGNtZCwKK307CisKKy8qKgorKglUaGlzIGlzIHRoZSBlbmQgb2Ygc2V0IG9mIGZ1bmN0aW9ucyAmIGRlZmluaXRpb25zIHNwZWNpZmljCisqCXRvIHhzY2FsZSAoZGV2aWNlaWQgOiAxMDY0UiwgUEVSQzUpIGNvbnRyb2xsZXJzCisqLworCisvKioKKyoJVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXJlIGRlZmluZWQgZm9yIHBwYyAoZGV2aWNlaWQgOiAweDYwKQorKiAJY29udHJvbGxlcnMKKyovCisKKy8qKgorICogbWVnYXNhc19lbmFibGVfaW50cl9wcGMgLQlFbmFibGVzIGludGVycnVwdHMKKyAqIEByZWdzOgkJCU1GSSByZWdpc3RlciBzZXQKKyAqLworc3RhdGljIGlubGluZSB2b2lkCittZWdhc2FzX2VuYWJsZV9pbnRyX3BwYyhzdHJ1Y3QgbWVnYXNhc19yZWdpc3Rlcl9zZXQgX19pb21lbSAqIHJlZ3MpCit7CisJd3JpdGVsKDB4RkZGRkZGRkYsICYocmVncyktPm91dGJvdW5kX2Rvb3JiZWxsX2NsZWFyKTsKKworCXdyaXRlbCh+MHg4MDAwMDAwMCwgJihyZWdzKS0+b3V0Ym91bmRfaW50cl9tYXNrKTsKKworCS8qIER1bW15IHJlYWRsIHRvIGZvcmNlIHBjaSBmbHVzaCAqLworCXJlYWRsKCZyZWdzLT5vdXRib3VuZF9pbnRyX21hc2spOworfQorCisvKioKKyAqIG1lZ2FzYXNfZGlzYWJsZV9pbnRyX3BwYyAtCURpc2FibGUgaW50ZXJydXB0CisgKiBAcmVnczoJCQlNRkkgcmVnaXN0ZXIgc2V0CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorbWVnYXNhc19kaXNhYmxlX2ludHJfcHBjKHN0cnVjdCBtZWdhc2FzX3JlZ2lzdGVyX3NldCBfX2lvbWVtICogcmVncykKK3sKKwl1MzIgbWFzayA9IDB4RkZGRkZGRkY7CisJd3JpdGVsKG1hc2ssICZyZWdzLT5vdXRib3VuZF9pbnRyX21hc2spOworCS8qIER1bW15IHJlYWRsIHRvIGZvcmNlIHBjaSBmbHVzaCAqLworCXJlYWRsKCZyZWdzLT5vdXRib3VuZF9pbnRyX21hc2spOworfQorCisvKioKKyAqIG1lZ2FzYXNfcmVhZF9md19zdGF0dXNfcmVnX3BwYyAtIHJldHVybnMgdGhlIGN1cnJlbnQgRlcgc3RhdHVzIHZhbHVlCisgKiBAcmVnczoJCQlNRkkgcmVnaXN0ZXIgc2V0CisgKi8KK3N0YXRpYyB1MzIKK21lZ2FzYXNfcmVhZF9md19zdGF0dXNfcmVnX3BwYyhzdHJ1Y3QgbWVnYXNhc19yZWdpc3Rlcl9zZXQgX19pb21lbSAqIHJlZ3MpCit7CisJcmV0dXJuIHJlYWRsKCYocmVncyktPm91dGJvdW5kX3NjcmF0Y2hfcGFkKTsKK30KKworLyoqCisgKiBtZWdhc2FzX2NsZWFyX2ludGVycnVwdF9wcGMgLQlDaGVjayAmIGNsZWFyIGludGVycnVwdAorICogQHJlZ3M6CQkJCU1GSSByZWdpc3RlciBzZXQKKyAqLworc3RhdGljIGludAorbWVnYXNhc19jbGVhcl9pbnRyX3BwYyhzdHJ1Y3QgbWVnYXNhc19yZWdpc3Rlcl9zZXQgX19pb21lbSAqIHJlZ3MpCit7CisJdTMyIHN0YXR1czsKKwkvKgorCSAqIENoZWNrIGlmIGl0IGlzIG91ciBpbnRlcnJ1cHQKKwkgKi8KKwlzdGF0dXMgPSByZWFkbCgmcmVncy0+b3V0Ym91bmRfaW50cl9zdGF0dXMpOworCisJaWYgKCEoc3RhdHVzICYgTUZJX1JFUExZXzEwNzhfTUVTU0FHRV9JTlRFUlJVUFQpKSB7CisJCXJldHVybiAwOworCX0KKworCS8qCisJICogQ2xlYXIgdGhlIGludGVycnVwdCBieSB3cml0aW5nIGJhY2sgdGhlIHNhbWUgdmFsdWUKKwkgKi8KKwl3cml0ZWwoc3RhdHVzLCAmcmVncy0+b3V0Ym91bmRfZG9vcmJlbGxfY2xlYXIpOworCisJLyogRHVtbXkgcmVhZGwgdG8gZm9yY2UgcGNpIGZsdXNoICovCisJcmVhZGwoJnJlZ3MtPm91dGJvdW5kX2Rvb3JiZWxsX2NsZWFyKTsKKworCXJldHVybiAxOworfQorLyoqCisgKiBtZWdhc2FzX2ZpcmVfY21kX3BwYyAtCVNlbmRzIGNvbW1hbmQgdG8gdGhlIEZXCisgKiBAZnJhbWVfcGh5c19hZGRyIDoJCVBoeXNpY2FsIGFkZHJlc3Mgb2YgY21kCisgKiBAZnJhbWVfY291bnQgOgkJTnVtYmVyIG9mIGZyYW1lcyBmb3IgdGhlIGNvbW1hbmQKKyAqIEByZWdzIDoJCQlNRkkgcmVnaXN0ZXIgc2V0CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorbWVnYXNhc19maXJlX2NtZF9wcGMoc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlLAorCQlkbWFfYWRkcl90IGZyYW1lX3BoeXNfYWRkciwKKwkJdTMyIGZyYW1lX2NvdW50LAorCQlzdHJ1Y3QgbWVnYXNhc19yZWdpc3Rlcl9zZXQgX19pb21lbSAqcmVncykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXNwaW5fbG9ja19pcnFzYXZlKCZpbnN0YW5jZS0+aGJhX2xvY2ssIGZsYWdzKTsKKwl3cml0ZWwoKGZyYW1lX3BoeXNfYWRkciB8IChmcmFtZV9jb3VudDw8MSkpfDEsCisJCQkmKHJlZ3MpLT5pbmJvdW5kX3F1ZXVlX3BvcnQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluc3RhbmNlLT5oYmFfbG9jaywgZmxhZ3MpOworfQorCisvKioKKyAqIG1lZ2FzYXNfYWRwX3Jlc2V0X3BwYyAtCUZvciBjb250cm9sbGVyIHJlc2V0CisgKiBAcmVnczoJCQkJTUZJIHJlZ2lzdGVyIHNldAorICovCitzdGF0aWMgaW50CittZWdhc2FzX2FkcF9yZXNldF9wcGMoc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlLAorCQkJc3RydWN0IG1lZ2FzYXNfcmVnaXN0ZXJfc2V0IF9faW9tZW0gKnJlZ3MpCit7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogbWVnYXNhc19jaGVja19yZXNldF9wcGMgLQlGb3IgY29udHJvbGxlciByZXNldCBjaGVjaworICogQHJlZ3M6CQkJCU1GSSByZWdpc3RlciBzZXQKKyAqLworc3RhdGljIGludAorbWVnYXNhc19jaGVja19yZXNldF9wcGMoc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlLAorCQkJc3RydWN0IG1lZ2FzYXNfcmVnaXN0ZXJfc2V0IF9faW9tZW0gKnJlZ3MpCit7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2VfdGVtcGxhdGUgbWVnYXNhc19pbnN0YW5jZV90ZW1wbGF0ZV9wcGMgPSB7CisKKwkuZmlyZV9jbWQgPSBtZWdhc2FzX2ZpcmVfY21kX3BwYywKKwkuZW5hYmxlX2ludHIgPSBtZWdhc2FzX2VuYWJsZV9pbnRyX3BwYywKKwkuZGlzYWJsZV9pbnRyID0gbWVnYXNhc19kaXNhYmxlX2ludHJfcHBjLAorCS5jbGVhcl9pbnRyID0gbWVnYXNhc19jbGVhcl9pbnRyX3BwYywKKwkucmVhZF9md19zdGF0dXNfcmVnID0gbWVnYXNhc19yZWFkX2Z3X3N0YXR1c19yZWdfcHBjLAorCS5hZHBfcmVzZXQgPSBtZWdhc2FzX2FkcF9yZXNldF9wcGMsCisJLmNoZWNrX3Jlc2V0ID0gbWVnYXNhc19jaGVja19yZXNldF9wcGMsCisJLnNlcnZpY2VfaXNyID0gbWVnYXNhc19pc3IsCisJLnRhc2tsZXQgPSBtZWdhc2FzX2NvbXBsZXRlX2NtZF9kcGMsCisJLmluaXRfYWRhcHRlciA9IG1lZ2FzYXNfaW5pdF9hZGFwdGVyX21maSwKKwkuYnVpbGRfYW5kX2lzc3VlX2NtZCA9IG1lZ2FzYXNfYnVpbGRfYW5kX2lzc3VlX2NtZCwKKwkuaXNzdWVfZGNtZCA9IG1lZ2FzYXNfaXNzdWVfZGNtZCwKK307CisKKy8qKgorICogbWVnYXNhc19lbmFibGVfaW50cl9za2lubnkgLQlFbmFibGVzIGludGVycnVwdHMKKyAqIEByZWdzOgkJCU1GSSByZWdpc3RlciBzZXQKKyAqLworc3RhdGljIGlubGluZSB2b2lkCittZWdhc2FzX2VuYWJsZV9pbnRyX3NraW5ueShzdHJ1Y3QgbWVnYXNhc19yZWdpc3Rlcl9zZXQgX19pb21lbSAqcmVncykKK3sKKwl3cml0ZWwoMHhGRkZGRkZGRiwgJihyZWdzKS0+b3V0Ym91bmRfaW50cl9tYXNrKTsKKworCXdyaXRlbCh+TUZJX1NLSU5OWV9FTkFCTEVfSU5URVJSVVBUX01BU0ssICYocmVncyktPm91dGJvdW5kX2ludHJfbWFzayk7CisKKwkvKiBEdW1teSByZWFkbCB0byBmb3JjZSBwY2kgZmx1c2ggKi8KKwlyZWFkbCgmcmVncy0+b3V0Ym91bmRfaW50cl9tYXNrKTsKK30KKworLyoqCisgKiBtZWdhc2FzX2Rpc2FibGVfaW50cl9za2lubnkgLQlEaXNhYmxlcyBpbnRlcnJ1cHQKKyAqIEByZWdzOgkJCU1GSSByZWdpc3RlciBzZXQKKyAqLworc3RhdGljIGlubGluZSB2b2lkCittZWdhc2FzX2Rpc2FibGVfaW50cl9za2lubnkoc3RydWN0IG1lZ2FzYXNfcmVnaXN0ZXJfc2V0IF9faW9tZW0gKnJlZ3MpCit7CisJdTMyIG1hc2sgPSAweEZGRkZGRkZGOworCXdyaXRlbChtYXNrLCAmcmVncy0+b3V0Ym91bmRfaW50cl9tYXNrKTsKKwkvKiBEdW1teSByZWFkbCB0byBmb3JjZSBwY2kgZmx1c2ggKi8KKwlyZWFkbCgmcmVncy0+b3V0Ym91bmRfaW50cl9tYXNrKTsKK30KKworLyoqCisgKiBtZWdhc2FzX3JlYWRfZndfc3RhdHVzX3JlZ19za2lubnkgLSByZXR1cm5zIHRoZSBjdXJyZW50IEZXIHN0YXR1cyB2YWx1ZQorICogQHJlZ3M6CQkJTUZJIHJlZ2lzdGVyIHNldAorICovCitzdGF0aWMgdTMyCittZWdhc2FzX3JlYWRfZndfc3RhdHVzX3JlZ19za2lubnkoc3RydWN0IG1lZ2FzYXNfcmVnaXN0ZXJfc2V0IF9faW9tZW0gKnJlZ3MpCit7CisJcmV0dXJuIHJlYWRsKCYocmVncyktPm91dGJvdW5kX3NjcmF0Y2hfcGFkKTsKK30KKworLyoqCisgKiBtZWdhc2FzX2NsZWFyX2ludGVycnVwdF9za2lubnkgLQlDaGVjayAmIGNsZWFyIGludGVycnVwdAorICogQHJlZ3M6CQkJCU1GSSByZWdpc3RlciBzZXQKKyAqLworc3RhdGljIGludAorbWVnYXNhc19jbGVhcl9pbnRyX3NraW5ueShzdHJ1Y3QgbWVnYXNhc19yZWdpc3Rlcl9zZXQgX19pb21lbSAqcmVncykKK3sKKwl1MzIgc3RhdHVzOworCS8qCisJICogQ2hlY2sgaWYgaXQgaXMgb3VyIGludGVycnVwdAorCSAqLworCXN0YXR1cyA9IHJlYWRsKCZyZWdzLT5vdXRib3VuZF9pbnRyX3N0YXR1cyk7CisKKwlpZiAoIShzdGF0dXMgJiBNRklfU0tJTk5ZX0VOQUJMRV9JTlRFUlJVUFRfTUFTSykpIHsKKwkJcmV0dXJuIDA7CisJfQorCisJLyoKKwkgKiBDbGVhciB0aGUgaW50ZXJydXB0IGJ5IHdyaXRpbmcgYmFjayB0aGUgc2FtZSB2YWx1ZQorCSAqLworCXdyaXRlbChzdGF0dXMsICZyZWdzLT5vdXRib3VuZF9pbnRyX3N0YXR1cyk7CisKKwkvKgorCSogZHVtbXkgcmVhZCB0byBmbHVzaCBQQ0kKKwkqLworCXJlYWRsKCZyZWdzLT5vdXRib3VuZF9pbnRyX3N0YXR1cyk7CisKKwlyZXR1cm4gMTsKK30KKworLyoqCisgKiBtZWdhc2FzX2ZpcmVfY21kX3NraW5ueSAtCVNlbmRzIGNvbW1hbmQgdG8gdGhlIEZXCisgKiBAZnJhbWVfcGh5c19hZGRyIDoJCVBoeXNpY2FsIGFkZHJlc3Mgb2YgY21kCisgKiBAZnJhbWVfY291bnQgOgkJTnVtYmVyIG9mIGZyYW1lcyBmb3IgdGhlIGNvbW1hbmQKKyAqIEByZWdzIDoJCQlNRkkgcmVnaXN0ZXIgc2V0CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorbWVnYXNhc19maXJlX2NtZF9za2lubnkoc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlLAorCQkJZG1hX2FkZHJfdCBmcmFtZV9waHlzX2FkZHIsCisJCQl1MzIgZnJhbWVfY291bnQsCisJCQlzdHJ1Y3QgbWVnYXNhc19yZWdpc3Rlcl9zZXQgX19pb21lbSAqcmVncykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXNwaW5fbG9ja19pcnFzYXZlKCZpbnN0YW5jZS0+aGJhX2xvY2ssIGZsYWdzKTsKKwl3cml0ZWwoMCwgJihyZWdzKS0+aW5ib3VuZF9oaWdoX3F1ZXVlX3BvcnQpOworCXdyaXRlbCgoZnJhbWVfcGh5c19hZGRyIHwgKGZyYW1lX2NvdW50PDwxKSl8MSwKKwkJJihyZWdzKS0+aW5ib3VuZF9sb3dfcXVldWVfcG9ydCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5zdGFuY2UtPmhiYV9sb2NrLCBmbGFncyk7Cit9CisKKy8qKgorICogbWVnYXNhc19hZHBfcmVzZXRfc2tpbm55IC0JRm9yIGNvbnRyb2xsZXIgcmVzZXQKKyAqIEByZWdzOgkJCQlNRkkgcmVnaXN0ZXIgc2V0CisgKi8KK3N0YXRpYyBpbnQKK21lZ2FzYXNfYWRwX3Jlc2V0X3NraW5ueShzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UsCisJCQlzdHJ1Y3QgbWVnYXNhc19yZWdpc3Rlcl9zZXQgX19pb21lbSAqcmVncykKK3sKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBtZWdhc2FzX2NoZWNrX3Jlc2V0X3NraW5ueSAtCUZvciBjb250cm9sbGVyIHJlc2V0IGNoZWNrCisgKiBAcmVnczoJCQkJTUZJIHJlZ2lzdGVyIHNldAorICovCitzdGF0aWMgaW50CittZWdhc2FzX2NoZWNrX3Jlc2V0X3NraW5ueShzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UsCisJCQkJc3RydWN0IG1lZ2FzYXNfcmVnaXN0ZXJfc2V0IF9faW9tZW0gKnJlZ3MpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZV90ZW1wbGF0ZSBtZWdhc2FzX2luc3RhbmNlX3RlbXBsYXRlX3NraW5ueSA9IHsKKworCS5maXJlX2NtZCA9IG1lZ2FzYXNfZmlyZV9jbWRfc2tpbm55LAorCS5lbmFibGVfaW50ciA9IG1lZ2FzYXNfZW5hYmxlX2ludHJfc2tpbm55LAorCS5kaXNhYmxlX2ludHIgPSBtZWdhc2FzX2Rpc2FibGVfaW50cl9za2lubnksCisJLmNsZWFyX2ludHIgPSBtZWdhc2FzX2NsZWFyX2ludHJfc2tpbm55LAorCS5yZWFkX2Z3X3N0YXR1c19yZWcgPSBtZWdhc2FzX3JlYWRfZndfc3RhdHVzX3JlZ19za2lubnksCisJLmFkcF9yZXNldCA9IG1lZ2FzYXNfYWRwX3Jlc2V0X3NraW5ueSwKKwkuY2hlY2tfcmVzZXQgPSBtZWdhc2FzX2NoZWNrX3Jlc2V0X3NraW5ueSwKKwkuc2VydmljZV9pc3IgPSBtZWdhc2FzX2lzciwKKwkudGFza2xldCA9IG1lZ2FzYXNfY29tcGxldGVfY21kX2RwYywKKwkuaW5pdF9hZGFwdGVyID0gbWVnYXNhc19pbml0X2FkYXB0ZXJfbWZpLAorCS5idWlsZF9hbmRfaXNzdWVfY21kID0gbWVnYXNhc19idWlsZF9hbmRfaXNzdWVfY21kLAorCS5pc3N1ZV9kY21kID0gbWVnYXNhc19pc3N1ZV9kY21kLAorfTsKKworCisvKioKKyoJVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXJlIGRlZmluZWQgZm9yIGdlbjIgKGRldmljZWlkIDogMHg3OCAweDc5KQorKgljb250cm9sbGVycworKi8KKworLyoqCisgKiBtZWdhc2FzX2VuYWJsZV9pbnRyX2dlbjIgLSAgRW5hYmxlcyBpbnRlcnJ1cHRzCisgKiBAcmVnczogICAgICAgICAgICAgICAgICAgICAgTUZJIHJlZ2lzdGVyIHNldAorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK21lZ2FzYXNfZW5hYmxlX2ludHJfZ2VuMihzdHJ1Y3QgbWVnYXNhc19yZWdpc3Rlcl9zZXQgX19pb21lbSAqcmVncykKK3sKKwl3cml0ZWwoMHhGRkZGRkZGRiwgJihyZWdzKS0+b3V0Ym91bmRfZG9vcmJlbGxfY2xlYXIpOworCisJLyogd3JpdGUgfjB4MDAwMDAwMDUgKDQgJiAxKSB0byB0aGUgaW50ciBtYXNrKi8KKwl3cml0ZWwofk1GSV9HRU4yX0VOQUJMRV9JTlRFUlJVUFRfTUFTSywgJihyZWdzKS0+b3V0Ym91bmRfaW50cl9tYXNrKTsKKworCS8qIER1bW15IHJlYWRsIHRvIGZvcmNlIHBjaSBmbHVzaCAqLworCXJlYWRsKCZyZWdzLT5vdXRib3VuZF9pbnRyX21hc2spOworfQorCisvKioKKyAqIG1lZ2FzYXNfZGlzYWJsZV9pbnRyX2dlbjIgLSBEaXNhYmxlcyBpbnRlcnJ1cHQKKyAqIEByZWdzOiAgICAgICAgICAgICAgICAgICAgICBNRkkgcmVnaXN0ZXIgc2V0CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorbWVnYXNhc19kaXNhYmxlX2ludHJfZ2VuMihzdHJ1Y3QgbWVnYXNhc19yZWdpc3Rlcl9zZXQgX19pb21lbSAqcmVncykKK3sKKwl1MzIgbWFzayA9IDB4RkZGRkZGRkY7CisJd3JpdGVsKG1hc2ssICZyZWdzLT5vdXRib3VuZF9pbnRyX21hc2spOworCS8qIER1bW15IHJlYWRsIHRvIGZvcmNlIHBjaSBmbHVzaCAqLworCXJlYWRsKCZyZWdzLT5vdXRib3VuZF9pbnRyX21hc2spOworfQorCisvKioKKyAqIG1lZ2FzYXNfcmVhZF9md19zdGF0dXNfcmVnX2dlbjIgLSByZXR1cm5zIHRoZSBjdXJyZW50IEZXIHN0YXR1cyB2YWx1ZQorICogQHJlZ3M6ICAgICAgICAgICAgICAgICAgICAgIE1GSSByZWdpc3RlciBzZXQKKyAqLworc3RhdGljIHUzMgorbWVnYXNhc19yZWFkX2Z3X3N0YXR1c19yZWdfZ2VuMihzdHJ1Y3QgbWVnYXNhc19yZWdpc3Rlcl9zZXQgX19pb21lbSAqcmVncykKK3sKKwlyZXR1cm4gcmVhZGwoJihyZWdzKS0+b3V0Ym91bmRfc2NyYXRjaF9wYWQpOworfQorCisvKioKKyAqIG1lZ2FzYXNfY2xlYXJfaW50ZXJydXB0X2dlbjIgLSAgICAgIENoZWNrICYgY2xlYXIgaW50ZXJydXB0CisgKiBAcmVnczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNRkkgcmVnaXN0ZXIgc2V0CisgKi8KK3N0YXRpYyBpbnQKK21lZ2FzYXNfY2xlYXJfaW50cl9nZW4yKHN0cnVjdCBtZWdhc2FzX3JlZ2lzdGVyX3NldCBfX2lvbWVtICpyZWdzKQoreworCXUzMiBzdGF0dXM7CisJdTMyIG1maVN0YXR1cyA9IDA7CisJLyoKKwkgKiBDaGVjayBpZiBpdCBpcyBvdXIgaW50ZXJydXB0CisJICovCisJc3RhdHVzID0gcmVhZGwoJnJlZ3MtPm91dGJvdW5kX2ludHJfc3RhdHVzKTsKKworCWlmIChzdGF0dXMgJiBNRklfR0VOMl9FTkFCTEVfSU5URVJSVVBUX01BU0spIHsKKwkJbWZpU3RhdHVzID0gTUZJX0lOVFJfRkxBR19SRVBMWV9NRVNTQUdFOworCX0KKwlpZiAoc3RhdHVzICYgTUZJX0cyX09VVEJPVU5EX0RPT1JCRUxMX0NIQU5HRV9JTlRFUlJVUFQpIHsKKwkJbWZpU3RhdHVzIHw9IE1GSV9JTlRSX0ZMQUdfRklSTVdBUkVfU1RBVEVfQ0hBTkdFOworCX0KKworCS8qCisJICogQ2xlYXIgdGhlIGludGVycnVwdCBieSB3cml0aW5nIGJhY2sgdGhlIHNhbWUgdmFsdWUKKwkgKi8KKwlpZiAobWZpU3RhdHVzKQorCQl3cml0ZWwoc3RhdHVzLCAmcmVncy0+b3V0Ym91bmRfZG9vcmJlbGxfY2xlYXIpOworCisJLyogRHVtbXkgcmVhZGwgdG8gZm9yY2UgcGNpIGZsdXNoICovCisJcmVhZGwoJnJlZ3MtPm91dGJvdW5kX2ludHJfc3RhdHVzKTsKKworCXJldHVybiBtZmlTdGF0dXM7Cit9CisvKioKKyAqIG1lZ2FzYXNfZmlyZV9jbWRfZ2VuMiAtICAgICBTZW5kcyBjb21tYW5kIHRvIHRoZSBGVworICogQGZyYW1lX3BoeXNfYWRkciA6ICAgICAgICAgIFBoeXNpY2FsIGFkZHJlc3Mgb2YgY21kCisgKiBAZnJhbWVfY291bnQgOiAgICAgICAgICAgICAgTnVtYmVyIG9mIGZyYW1lcyBmb3IgdGhlIGNvbW1hbmQKKyAqIEByZWdzIDogICAgICAgICAgICAgICAgICAgICBNRkkgcmVnaXN0ZXIgc2V0CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorbWVnYXNhc19maXJlX2NtZF9nZW4yKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSwKKwkJCWRtYV9hZGRyX3QgZnJhbWVfcGh5c19hZGRyLAorCQkJdTMyIGZyYW1lX2NvdW50LAorCQkJc3RydWN0IG1lZ2FzYXNfcmVnaXN0ZXJfc2V0IF9faW9tZW0gKnJlZ3MpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW5zdGFuY2UtPmhiYV9sb2NrLCBmbGFncyk7CisJd3JpdGVsKChmcmFtZV9waHlzX2FkZHIgfCAoZnJhbWVfY291bnQ8PDEpKXwxLAorCQkJJihyZWdzKS0+aW5ib3VuZF9xdWV1ZV9wb3J0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbnN0YW5jZS0+aGJhX2xvY2ssIGZsYWdzKTsKK30KKworLyoqCisgKiBtZWdhc2FzX2FkcF9yZXNldF9nZW4yIC0JRm9yIGNvbnRyb2xsZXIgcmVzZXQKKyAqIEByZWdzOgkJCQlNRkkgcmVnaXN0ZXIgc2V0CisgKi8KK3N0YXRpYyBpbnQKK21lZ2FzYXNfYWRwX3Jlc2V0X2dlbjIoc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlLAorCQkJc3RydWN0IG1lZ2FzYXNfcmVnaXN0ZXJfc2V0IF9faW9tZW0gKnJlZ19zZXQpCit7CisJdTMyCQkJcmV0cnkgPSAwIDsKKwl1MzIJCQlIb3N0RGlhZzsKKworCXdyaXRlbCgwLCAmcmVnX3NldC0+c2VxX29mZnNldCk7CisJd3JpdGVsKDQsICZyZWdfc2V0LT5zZXFfb2Zmc2V0KTsKKwl3cml0ZWwoMHhiLCAmcmVnX3NldC0+c2VxX29mZnNldCk7CisJd3JpdGVsKDIsICZyZWdfc2V0LT5zZXFfb2Zmc2V0KTsKKwl3cml0ZWwoNywgJnJlZ19zZXQtPnNlcV9vZmZzZXQpOworCXdyaXRlbCgweGQsICZyZWdfc2V0LT5zZXFfb2Zmc2V0KTsKKwltc2xlZXAoMTAwMCk7CisKKwlIb3N0RGlhZyA9ICh1MzIpcmVhZGwoJnJlZ19zZXQtPmhvc3RfZGlhZyk7CisKKwl3aGlsZSAoICEoIEhvc3REaWFnICYgRElBR19XUklURV9FTkFCTEUpICkgeworCQltc2xlZXAoMTAwKTsKKwkJSG9zdERpYWcgPSAodTMyKXJlYWRsKCZyZWdfc2V0LT5ob3N0X2RpYWcpOworCQlwcmludGsoS0VSTl9OT1RJQ0UgIlJFU0VUR0VOMjogcmV0cnk9JXgsIGhvc3RkaWFnPSV4XG4iLAorCQkJCQlyZXRyeSwgSG9zdERpYWcpOworCisJCWlmIChyZXRyeSsrID49IDEwMCkKKwkJCXJldHVybiAxOworCisJfQorCisJcHJpbnRrKEtFUk5fTk9USUNFICJBRFBfUkVTRVRfR0VOMjogSG9zdERpYWc9JXhcbiIsIEhvc3REaWFnKTsKKworCXdyaXRlbCgoSG9zdERpYWcgfCBESUFHX1JFU0VUX0FEQVBURVIpLCAmcmVnX3NldC0+aG9zdF9kaWFnKTsKKworCXNzbGVlcCgxMCk7CisKKwlIb3N0RGlhZyA9ICh1MzIpcmVhZGwoJnJlZ19zZXQtPmhvc3RfZGlhZyk7CisJd2hpbGUgKCAoIEhvc3REaWFnICYgRElBR19SRVNFVF9BREFQVEVSKSApIHsKKwkJbXNsZWVwKDEwMCk7CisJCUhvc3REaWFnID0gKHUzMilyZWFkbCgmcmVnX3NldC0+aG9zdF9kaWFnKTsKKwkJcHJpbnRrKEtFUk5fTk9USUNFICJSRVNFVF9HRU4yOiByZXRyeT0leCwgaG9zdGRpYWc9JXhcbiIsCisJCQkJcmV0cnksIEhvc3REaWFnKTsKKworCQlpZiAocmV0cnkrKyA+PSAxMDAwKQorCQkJcmV0dXJuIDE7CisKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogbWVnYXNhc19jaGVja19yZXNldF9nZW4yIC0JRm9yIGNvbnRyb2xsZXIgcmVzZXQgY2hlY2sKKyAqIEByZWdzOgkJCQlNRkkgcmVnaXN0ZXIgc2V0CisgKi8KK3N0YXRpYyBpbnQKK21lZ2FzYXNfY2hlY2tfcmVzZXRfZ2VuMihzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UsCisJCXN0cnVjdCBtZWdhc2FzX3JlZ2lzdGVyX3NldCBfX2lvbWVtICpyZWdzKQoreworCWlmIChpbnN0YW5jZS0+YWRwcmVjb3ZlcnkgIT0gTUVHQVNBU19IQkFfT1BFUkFUSU9OQUwpIHsKKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZV90ZW1wbGF0ZSBtZWdhc2FzX2luc3RhbmNlX3RlbXBsYXRlX2dlbjIgPSB7CisKKwkuZmlyZV9jbWQgPSBtZWdhc2FzX2ZpcmVfY21kX2dlbjIsCisJLmVuYWJsZV9pbnRyID0gbWVnYXNhc19lbmFibGVfaW50cl9nZW4yLAorCS5kaXNhYmxlX2ludHIgPSBtZWdhc2FzX2Rpc2FibGVfaW50cl9nZW4yLAorCS5jbGVhcl9pbnRyID0gbWVnYXNhc19jbGVhcl9pbnRyX2dlbjIsCisJLnJlYWRfZndfc3RhdHVzX3JlZyA9IG1lZ2FzYXNfcmVhZF9md19zdGF0dXNfcmVnX2dlbjIsCisJLmFkcF9yZXNldCA9IG1lZ2FzYXNfYWRwX3Jlc2V0X2dlbjIsCisJLmNoZWNrX3Jlc2V0ID0gbWVnYXNhc19jaGVja19yZXNldF9nZW4yLAorCS5zZXJ2aWNlX2lzciA9IG1lZ2FzYXNfaXNyLAorCS50YXNrbGV0ID0gbWVnYXNhc19jb21wbGV0ZV9jbWRfZHBjLAorCS5pbml0X2FkYXB0ZXIgPSBtZWdhc2FzX2luaXRfYWRhcHRlcl9tZmksCisJLmJ1aWxkX2FuZF9pc3N1ZV9jbWQgPSBtZWdhc2FzX2J1aWxkX2FuZF9pc3N1ZV9jbWQsCisJLmlzc3VlX2RjbWQgPSBtZWdhc2FzX2lzc3VlX2RjbWQsCit9OworCisvKioKKyoJVGhpcyBpcyB0aGUgZW5kIG9mIHNldCBvZiBmdW5jdGlvbnMgJiBkZWZpbml0aW9ucworKiAgICAgICBzcGVjaWZpYyB0byBnZW4yIChkZXZpY2VpZCA6IDB4NzgsIDB4NzkpIGNvbnRyb2xsZXJzCisqLworCisvKgorICogVGVtcGxhdGUgYWRkZWQgZm9yIFRCIChGdXNpb24pCisgKi8KK2V4dGVybiBzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZV90ZW1wbGF0ZSBtZWdhc2FzX2luc3RhbmNlX3RlbXBsYXRlX2Z1c2lvbjsKKworLyoqCisgKiBtZWdhc2FzX2lzc3VlX3BvbGxlZCAtCUlzc3VlcyBhIHBvbGxpbmcgY29tbWFuZAorICogQGluc3RhbmNlOgkJCUFkYXB0ZXIgc29mdCBzdGF0ZQorICogQGNtZDoJCQlDb21tYW5kIHBhY2tldCB0byBiZSBpc3N1ZWQKKyAqCisgKiBGb3IgcG9sbGluZywgTUZJIHJlcXVpcmVzIHRoZSBjbWRfc3RhdHVzIHRvIGJlIHNldCB0byAweEZGIGJlZm9yZSBwb3N0aW5nLgorICovCitpbnQKK21lZ2FzYXNfaXNzdWVfcG9sbGVkKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSwgc3RydWN0IG1lZ2FzYXNfY21kICpjbWQpCit7CisKKwlzdHJ1Y3QgbWVnYXNhc19oZWFkZXIgKmZyYW1lX2hkciA9ICZjbWQtPmZyYW1lLT5oZHI7CisKKwlmcmFtZV9oZHItPmNtZF9zdGF0dXMgPSAweEZGOworCWZyYW1lX2hkci0+ZmxhZ3MgfD0gTUZJX0ZSQU1FX0RPTlRfUE9TVF9JTl9SRVBMWV9RVUVVRTsKKworCS8qCisJICogSXNzdWUgdGhlIGZyYW1lIHVzaW5nIGluYm91bmQgcXVldWUgcG9ydAorCSAqLworCWluc3RhbmNlLT5pbnN0YW5jZXQtPmlzc3VlX2RjbWQoaW5zdGFuY2UsIGNtZCk7CisKKwkvKgorCSAqIFdhaXQgZm9yIGNtZF9zdGF0dXMgdG8gY2hhbmdlCisJICovCisJcmV0dXJuIHdhaXRfYW5kX3BvbGwoaW5zdGFuY2UsIGNtZCk7Cit9CisKKy8qKgorICogbWVnYXNhc19pc3N1ZV9ibG9ja2VkX2NtZCAtCVN5bmNocm9ub3VzIHdyYXBwZXIgYXJvdW5kIHJlZ3VsYXIgRlcgY21kcworICogQGluc3RhbmNlOgkJCUFkYXB0ZXIgc29mdCBzdGF0ZQorICogQGNtZDoJCQlDb21tYW5kIHRvIGJlIGlzc3VlZAorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2FpdHMgb24gYW4gZXZlbnQgZm9yIHRoZSBjb21tYW5kIHRvIGJlIHJldHVybmVkIGZyb20gSVNSLgorICogTWF4IHdhaXQgdGltZSBpcyBNRUdBU0FTX0lOVEVSTkFMX0NNRF9XQUlUX1RJTUUgc2VjcworICogVXNlZCB0byBpc3N1ZSBpb2N0bCBjb21tYW5kcy4KKyAqLworc3RhdGljIGludAorbWVnYXNhc19pc3N1ZV9ibG9ja2VkX2NtZChzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UsCisJCQkgIHN0cnVjdCBtZWdhc2FzX2NtZCAqY21kKQoreworCWNtZC0+Y21kX3N0YXR1cyA9IEVOT0RBVEE7CisKKwlpbnN0YW5jZS0+aW5zdGFuY2V0LT5pc3N1ZV9kY21kKGluc3RhbmNlLCBjbWQpOworCisJd2FpdF9ldmVudChpbnN0YW5jZS0+aW50X2NtZF93YWl0X3EsIGNtZC0+Y21kX3N0YXR1cyAhPSBFTk9EQVRBKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIG1lZ2FzYXNfaXNzdWVfYmxvY2tlZF9hYm9ydF9jbWQgLQlBYm9ydHMgcHJldmlvdXNseSBpc3N1ZWQgY21kCisgKiBAaW5zdGFuY2U6CQkJCUFkYXB0ZXIgc29mdCBzdGF0ZQorICogQGNtZF90b19hYm9ydDoJCQlQcmV2aW91c2x5IGlzc3VlZCBjbWQgdG8gYmUgYWJvcnRlZAorICoKKyAqIE1GSSBmaXJtd2FyZSBjYW4gYWJvcnQgcHJldmlvdXNseSBpc3N1ZWQgQUVOIGNvbWFtbmQgKGF1dG9tYXRpYyBldmVudAorICogbm90aWZpY2F0aW9uKS4gVGhlIG1lZ2FzYXNfaXNzdWVfYmxvY2tlZF9hYm9ydF9jbWQoKSBpc3N1ZXMgc3VjaCBhYm9ydAorICogY21kIGFuZCB3YWl0cyBmb3IgcmV0dXJuIHN0YXR1cy4KKyAqIE1heCB3YWl0IHRpbWUgaXMgTUVHQVNBU19JTlRFUk5BTF9DTURfV0FJVF9USU1FIHNlY3MKKyAqLworc3RhdGljIGludAorbWVnYXNhc19pc3N1ZV9ibG9ja2VkX2Fib3J0X2NtZChzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UsCisJCQkJc3RydWN0IG1lZ2FzYXNfY21kICpjbWRfdG9fYWJvcnQpCit7CisJc3RydWN0IG1lZ2FzYXNfY21kICpjbWQ7CisJc3RydWN0IG1lZ2FzYXNfYWJvcnRfZnJhbWUgKmFib3J0X2ZyOworCisJY21kID0gbWVnYXNhc19nZXRfY21kKGluc3RhbmNlKTsKKworCWlmICghY21kKQorCQlyZXR1cm4gLTE7CisKKwlhYm9ydF9mciA9ICZjbWQtPmZyYW1lLT5hYm9ydDsKKworCS8qCisJICogUHJlcGFyZSBhbmQgaXNzdWUgdGhlIGFib3J0IGZyYW1lCisJICovCisJYWJvcnRfZnItPmNtZCA9IE1GSV9DTURfQUJPUlQ7CisJYWJvcnRfZnItPmNtZF9zdGF0dXMgPSAweEZGOworCWFib3J0X2ZyLT5mbGFncyA9IDA7CisJYWJvcnRfZnItPmFib3J0X2NvbnRleHQgPSBjbWRfdG9fYWJvcnQtPmluZGV4OworCWFib3J0X2ZyLT5hYm9ydF9tZmlfcGh5c19hZGRyX2xvID0gY21kX3RvX2Fib3J0LT5mcmFtZV9waHlzX2FkZHI7CisJYWJvcnRfZnItPmFib3J0X21maV9waHlzX2FkZHJfaGkgPSAwOworCisJY21kLT5zeW5jX2NtZCA9IDE7CisJY21kLT5jbWRfc3RhdHVzID0gMHhGRjsKKworCWluc3RhbmNlLT5pbnN0YW5jZXQtPmlzc3VlX2RjbWQoaW5zdGFuY2UsIGNtZCk7CisKKwkvKgorCSAqIFdhaXQgZm9yIHRoaXMgY21kIHRvIGNvbXBsZXRlCisJICovCisJd2FpdF9ldmVudChpbnN0YW5jZS0+YWJvcnRfY21kX3dhaXRfcSwgY21kLT5jbWRfc3RhdHVzICE9IDB4RkYpOworCWNtZC0+c3luY19jbWQgPSAwOworCisJbWVnYXNhc19yZXR1cm5fY21kKGluc3RhbmNlLCBjbWQpOworCXJldHVybiAwOworfQorCisvKioKKyAqIG1lZ2FzYXNfbWFrZV9zZ2wzMiAtCVByZXBhcmVzIDMyLWJpdCBTR0wKKyAqIEBpbnN0YW5jZToJCUFkYXB0ZXIgc29mdCBzdGF0ZQorICogQHNjcDoJCVNDU0kgY29tbWFuZCBmcm9tIHRoZSBtaWQtbGF5ZXIKKyAqIEBtZmlfc2dsOgkJU0dMIHRvIGJlIGZpbGxlZCBpbgorICoKKyAqIElmIHN1Y2Nlc3NmdWwsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbnVtYmVyIG9mIFNHIGVsZW1lbnRzLiBPdGhlcndpc2UsCisgKiBpdCByZXR1cm5lcyAtMS4KKyAqLworc3RhdGljIGludAorbWVnYXNhc19tYWtlX3NnbDMyKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSwgc3RydWN0IHNjc2lfY21uZCAqc2NwLAorCQkgICB1bmlvbiBtZWdhc2FzX3NnbCAqbWZpX3NnbCkKK3sKKwlpbnQgaTsKKwlpbnQgc2dlX2NvdW50OworCXN0cnVjdCBzY2F0dGVybGlzdCAqb3Nfc2dsOworCisJc2dlX2NvdW50ID0gc2NzaV9kbWFfbWFwKHNjcCk7CisJQlVHX09OKHNnZV9jb3VudCA8IDApOworCisJaWYgKHNnZV9jb3VudCkgeworCQlzY3NpX2Zvcl9lYWNoX3NnKHNjcCwgb3Nfc2dsLCBzZ2VfY291bnQsIGkpIHsKKwkJCW1maV9zZ2wtPnNnZTMyW2ldLmxlbmd0aCA9IHNnX2RtYV9sZW4ob3Nfc2dsKTsKKwkJCW1maV9zZ2wtPnNnZTMyW2ldLnBoeXNfYWRkciA9IHNnX2RtYV9hZGRyZXNzKG9zX3NnbCk7CisJCX0KKwl9CisJcmV0dXJuIHNnZV9jb3VudDsKK30KKworLyoqCisgKiBtZWdhc2FzX21ha2Vfc2dsNjQgLQlQcmVwYXJlcyA2NC1iaXQgU0dMCisgKiBAaW5zdGFuY2U6CQlBZGFwdGVyIHNvZnQgc3RhdGUKKyAqIEBzY3A6CQlTQ1NJIGNvbW1hbmQgZnJvbSB0aGUgbWlkLWxheWVyCisgKiBAbWZpX3NnbDoJCVNHTCB0byBiZSBmaWxsZWQgaW4KKyAqCisgKiBJZiBzdWNjZXNzZnVsLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG51bWJlciBvZiBTRyBlbGVtZW50cy4gT3RoZXJ3aXNlLAorICogaXQgcmV0dXJuZXMgLTEuCisgKi8KK3N0YXRpYyBpbnQKK21lZ2FzYXNfbWFrZV9zZ2w2NChzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UsIHN0cnVjdCBzY3NpX2NtbmQgKnNjcCwKKwkJICAgdW5pb24gbWVnYXNhc19zZ2wgKm1maV9zZ2wpCit7CisJaW50IGk7CisJaW50IHNnZV9jb3VudDsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKm9zX3NnbDsKKworCXNnZV9jb3VudCA9IHNjc2lfZG1hX21hcChzY3ApOworCUJVR19PTihzZ2VfY291bnQgPCAwKTsKKworCWlmIChzZ2VfY291bnQpIHsKKwkJc2NzaV9mb3JfZWFjaF9zZyhzY3AsIG9zX3NnbCwgc2dlX2NvdW50LCBpKSB7CisJCQltZmlfc2dsLT5zZ2U2NFtpXS5sZW5ndGggPSBzZ19kbWFfbGVuKG9zX3NnbCk7CisJCQltZmlfc2dsLT5zZ2U2NFtpXS5waHlzX2FkZHIgPSBzZ19kbWFfYWRkcmVzcyhvc19zZ2wpOworCQl9CisJfQorCXJldHVybiBzZ2VfY291bnQ7Cit9CisKKy8qKgorICogbWVnYXNhc19tYWtlX3NnbF9za2lubnkgLSBQcmVwYXJlcyBJRUVFIFNHTAorICogQGluc3RhbmNlOiAgICAgICAgICAgQWRhcHRlciBzb2Z0IHN0YXRlCisgKiBAc2NwOiAgICAgICAgICAgICAgICBTQ1NJIGNvbW1hbmQgZnJvbSB0aGUgbWlkLWxheWVyCisgKiBAbWZpX3NnbDogICAgICAgICAgICBTR0wgdG8gYmUgZmlsbGVkIGluCisgKgorICogSWYgc3VjY2Vzc2Z1bCwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBudW1iZXIgb2YgU0cgZWxlbWVudHMuIE90aGVyd2lzZSwKKyAqIGl0IHJldHVybmVzIC0xLgorICovCitzdGF0aWMgaW50CittZWdhc2FzX21ha2Vfc2dsX3NraW5ueShzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UsCisJCXN0cnVjdCBzY3NpX2NtbmQgKnNjcCwgdW5pb24gbWVnYXNhc19zZ2wgKm1maV9zZ2wpCit7CisJaW50IGk7CisJaW50IHNnZV9jb3VudDsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKm9zX3NnbDsKKworCXNnZV9jb3VudCA9IHNjc2lfZG1hX21hcChzY3ApOworCisJaWYgKHNnZV9jb3VudCkgeworCQlzY3NpX2Zvcl9lYWNoX3NnKHNjcCwgb3Nfc2dsLCBzZ2VfY291bnQsIGkpIHsKKwkJCW1maV9zZ2wtPnNnZV9za2lubnlbaV0ubGVuZ3RoID0gc2dfZG1hX2xlbihvc19zZ2wpOworCQkJbWZpX3NnbC0+c2dlX3NraW5ueVtpXS5waHlzX2FkZHIgPQorCQkJCQkJc2dfZG1hX2FkZHJlc3Mob3Nfc2dsKTsKKwkJCW1maV9zZ2wtPnNnZV9za2lubnlbaV0uZmxhZyA9IDA7CisJCX0KKwl9CisJcmV0dXJuIHNnZV9jb3VudDsKK30KKworIC8qKgorICogbWVnYXNhc19nZXRfZnJhbWVfY291bnQgLSBDb21wdXRlcyB0aGUgbnVtYmVyIG9mIGZyYW1lcworICogQGZyYW1lX3R5cGUJCTogdHlwZSBvZiBmcmFtZS0gaW8gb3IgcHRocnUgZnJhbWUKKyAqIEBzZ2VfY291bnQJCTogbnVtYmVyIG9mIHNnIGVsZW1lbnRzCisgKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGZyYW1lcyByZXF1aXJlZCBmb3IgbnVtbmJlciBvZiBzZ2UncyAoc2dlX2NvdW50KQorICovCisKK3N0YXRpYyB1MzIgbWVnYXNhc19nZXRfZnJhbWVfY291bnQoc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlLAorCQkJdTggc2dlX2NvdW50LCB1OCBmcmFtZV90eXBlKQoreworCWludCBudW1fY250OworCWludCBzZ2VfYnl0ZXM7CisJdTMyIHNnZV9zejsKKwl1MzIgZnJhbWVfY291bnQ9MDsKKworCXNnZV9zeiA9IChJU19ETUE2NCkgPyBzaXplb2Yoc3RydWN0IG1lZ2FzYXNfc2dlNjQpIDoKKwkgICAgc2l6ZW9mKHN0cnVjdCBtZWdhc2FzX3NnZTMyKTsKKworCWlmIChpbnN0YW5jZS0+ZmxhZ19pZWVlKSB7CisJCXNnZV9zeiA9IHNpemVvZihzdHJ1Y3QgbWVnYXNhc19zZ2Vfc2tpbm55KTsKKwl9CisKKwkvKgorCSAqIE1haW4gZnJhbWUgY2FuIGNvbnRhaW4gMiBTR0VzIGZvciA2NC1iaXQgU0dMcyBhbmQKKwkgKiAzIFNHRXMgZm9yIDMyLWJpdCBTR0xzIGZvciBsZGlvICYKKwkgKiAxIFNHRXMgZm9yIDY0LWJpdCBTR0xzIGFuZAorCSAqIDIgU0dFcyBmb3IgMzItYml0IFNHTHMgZm9yIHB0aHJ1IGZyYW1lCisJICovCisJaWYgKHVubGlrZWx5KGZyYW1lX3R5cGUgPT0gUFRIUlVfRlJBTUUpKSB7CisJCWlmIChpbnN0YW5jZS0+ZmxhZ19pZWVlID09IDEpIHsKKwkJCW51bV9jbnQgPSBzZ2VfY291bnQgLSAxOworCQl9IGVsc2UgaWYgKElTX0RNQTY0KQorCQkJbnVtX2NudCA9IHNnZV9jb3VudCAtIDE7CisJCWVsc2UKKwkJCW51bV9jbnQgPSBzZ2VfY291bnQgLSAyOworCX0gZWxzZSB7CisJCWlmIChpbnN0YW5jZS0+ZmxhZ19pZWVlID09IDEpIHsKKwkJCW51bV9jbnQgPSBzZ2VfY291bnQgLSAxOworCQl9IGVsc2UgaWYgKElTX0RNQTY0KQorCQkJbnVtX2NudCA9IHNnZV9jb3VudCAtIDI7CisJCWVsc2UKKwkJCW51bV9jbnQgPSBzZ2VfY291bnQgLSAzOworCX0KKworCWlmKG51bV9jbnQ+MCl7CisJCXNnZV9ieXRlcyA9IHNnZV9zeiAqIG51bV9jbnQ7CisKKwkJZnJhbWVfY291bnQgPSAoc2dlX2J5dGVzIC8gTUVHQU1GSV9GUkFNRV9TSVpFKSArCisJCSAgICAoKHNnZV9ieXRlcyAlIE1FR0FNRklfRlJBTUVfU0laRSkgPyAxIDogMCkgOworCX0KKwkvKiBNYWluIGZyYW1lICovCisJZnJhbWVfY291bnQgKz0xOworCisJaWYgKGZyYW1lX2NvdW50ID4gNykKKwkJZnJhbWVfY291bnQgPSA4OworCXJldHVybiBmcmFtZV9jb3VudDsKK30KKworLyoqCisgKiBtZWdhc2FzX2J1aWxkX2RjZGIgLQlQcmVwYXJlcyBhIGRpcmVjdCBjZGIgKERDREIpIGNvbW1hbmQKKyAqIEBpbnN0YW5jZToJCUFkYXB0ZXIgc29mdCBzdGF0ZQorICogQHNjcDoJCVNDU0kgY29tbWFuZAorICogQGNtZDoJCUNvbW1hbmQgdG8gYmUgcHJlcGFyZWQgaW4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHByZXBhcmVzIENEQiBjb21tYW5kcy4gVGhlc2UgYXJlIHR5cGNpYWxseSBwYXNzLXRocm91Z2gKKyAqIGNvbW1hbmRzIHRvIHRoZSBkZXZpY2VzLgorICovCitzdGF0aWMgaW50CittZWdhc2FzX2J1aWxkX2RjZGIoc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlLCBzdHJ1Y3Qgc2NzaV9jbW5kICpzY3AsCisJCSAgIHN0cnVjdCBtZWdhc2FzX2NtZCAqY21kKQoreworCXUzMiBpc19sb2dpY2FsOworCXUzMiBkZXZpY2VfaWQ7CisJdTE2IGZsYWdzID0gMDsKKwlzdHJ1Y3QgbWVnYXNhc19wdGhydV9mcmFtZSAqcHRocnU7CisKKwlpc19sb2dpY2FsID0gTUVHQVNBU19JU19MT0dJQ0FMKHNjcCk7CisJZGV2aWNlX2lkID0gTUVHQVNBU19ERVZfSU5ERVgoaW5zdGFuY2UsIHNjcCk7CisJcHRocnUgPSAoc3RydWN0IG1lZ2FzYXNfcHRocnVfZnJhbWUgKiljbWQtPmZyYW1lOworCisJaWYgKHNjcC0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gUENJX0RNQV9UT0RFVklDRSkKKwkJZmxhZ3MgPSBNRklfRlJBTUVfRElSX1dSSVRFOworCWVsc2UgaWYgKHNjcC0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gUENJX0RNQV9GUk9NREVWSUNFKQorCQlmbGFncyA9IE1GSV9GUkFNRV9ESVJfUkVBRDsKKwllbHNlIGlmIChzY3AtPnNjX2RhdGFfZGlyZWN0aW9uID09IFBDSV9ETUFfTk9ORSkKKwkJZmxhZ3MgPSBNRklfRlJBTUVfRElSX05PTkU7CisKKwlpZiAoaW5zdGFuY2UtPmZsYWdfaWVlZSA9PSAxKSB7CisJCWZsYWdzIHw9IE1GSV9GUkFNRV9JRUVFOworCX0KKworCS8qCisJICogUHJlcGFyZSB0aGUgRENEQiBmcmFtZQorCSAqLworCXB0aHJ1LT5jbWQgPSAoaXNfbG9naWNhbCkgPyBNRklfQ01EX0xEX1NDU0lfSU8gOiBNRklfQ01EX1BEX1NDU0lfSU87CisJcHRocnUtPmNtZF9zdGF0dXMgPSAweDA7CisJcHRocnUtPnNjc2lfc3RhdHVzID0gMHgwOworCXB0aHJ1LT50YXJnZXRfaWQgPSBkZXZpY2VfaWQ7CisJcHRocnUtPmx1biA9IHNjcC0+ZGV2aWNlLT5sdW47CisJcHRocnUtPmNkYl9sZW4gPSBzY3AtPmNtZF9sZW47CisJcHRocnUtPnRpbWVvdXQgPSAwOworCXB0aHJ1LT5wYWRfMCA9IDA7CisJcHRocnUtPmZsYWdzID0gZmxhZ3M7CisJcHRocnUtPmRhdGFfeGZlcl9sZW4gPSBzY3NpX2J1ZmZsZW4oc2NwKTsKKworCW1lbWNweShwdGhydS0+Y2RiLCBzY3AtPmNtbmQsIHNjcC0+Y21kX2xlbik7CisKKwkvKgorCSogSWYgdGhlIGNvbW1hbmQgaXMgZm9yIHRoZSB0YXBlIGRldmljZSwgc2V0IHRoZQorCSogcHRocnUgdGltZW91dCB0byB0aGUgb3MgbGF5ZXIgdGltZW91dCB2YWx1ZS4KKwkqLworCWlmIChzY3AtPmRldmljZS0+dHlwZSA9PSBUWVBFX1RBUEUpIHsKKwkJaWYgKChzY3AtPnJlcXVlc3QtPnRpbWVvdXQgLyBIWikgPiAweEZGRkYpCisJCQlwdGhydS0+dGltZW91dCA9IDB4RkZGRjsKKwkJZWxzZQorCQkJcHRocnUtPnRpbWVvdXQgPSBzY3AtPnJlcXVlc3QtPnRpbWVvdXQgLyBIWjsKKwl9CisKKwkvKgorCSAqIENvbnN0cnVjdCBTR0wKKwkgKi8KKwlpZiAoaW5zdGFuY2UtPmZsYWdfaWVlZSA9PSAxKSB7CisJCXB0aHJ1LT5mbGFncyB8PSBNRklfRlJBTUVfU0dMNjQ7CisJCXB0aHJ1LT5zZ2VfY291bnQgPSBtZWdhc2FzX21ha2Vfc2dsX3NraW5ueShpbnN0YW5jZSwgc2NwLAorCQkJCQkJICAgICAgJnB0aHJ1LT5zZ2wpOworCX0gZWxzZSBpZiAoSVNfRE1BNjQpIHsKKwkJcHRocnUtPmZsYWdzIHw9IE1GSV9GUkFNRV9TR0w2NDsKKwkJcHRocnUtPnNnZV9jb3VudCA9IG1lZ2FzYXNfbWFrZV9zZ2w2NChpbnN0YW5jZSwgc2NwLAorCQkJCQkJICAgICAgJnB0aHJ1LT5zZ2wpOworCX0gZWxzZQorCQlwdGhydS0+c2dlX2NvdW50ID0gbWVnYXNhc19tYWtlX3NnbDMyKGluc3RhbmNlLCBzY3AsCisJCQkJCQkgICAgICAmcHRocnUtPnNnbCk7CisKKwlpZiAocHRocnUtPnNnZV9jb3VudCA+IGluc3RhbmNlLT5tYXhfbnVtX3NnZSkgeworCQlwcmludGsoS0VSTl9FUlIgIm1lZ2FzYXM6IERDREIgdHdvIG1hbnkgU0dFIE5VTT0leFxuIiwKKwkJCXB0aHJ1LT5zZ2VfY291bnQpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKgorCSAqIFNlbnNlIGluZm8gc3BlY2lmaWMKKwkgKi8KKwlwdGhydS0+c2Vuc2VfbGVuID0gU0NTSV9TRU5TRV9CVUZGRVJTSVpFOworCXB0aHJ1LT5zZW5zZV9idWZfcGh5c19hZGRyX2hpID0gMDsKKwlwdGhydS0+c2Vuc2VfYnVmX3BoeXNfYWRkcl9sbyA9IGNtZC0+c2Vuc2VfcGh5c19hZGRyOworCisJLyoKKwkgKiBDb21wdXRlIHRoZSB0b3RhbCBudW1iZXIgb2YgZnJhbWVzIHRoaXMgY29tbWFuZCBjb25zdW1lcy4gRlcgdXNlcworCSAqIHRoaXMgbnVtYmVyIHRvIHB1bGwgc3VmZmljaWVudCBudW1iZXIgb2YgZnJhbWVzIGZyb20gaG9zdCBtZW1vcnkuCisJICovCisJY21kLT5mcmFtZV9jb3VudCA9IG1lZ2FzYXNfZ2V0X2ZyYW1lX2NvdW50KGluc3RhbmNlLCBwdGhydS0+c2dlX2NvdW50LAorCQkJCQkJCVBUSFJVX0ZSQU1FKTsKKworCXJldHVybiBjbWQtPmZyYW1lX2NvdW50OworfQorCisvKioKKyAqIG1lZ2FzYXNfYnVpbGRfbGRpbyAtCVByZXBhcmVzIElPcyB0byBsb2dpY2FsIGRldmljZXMKKyAqIEBpbnN0YW5jZToJCUFkYXB0ZXIgc29mdCBzdGF0ZQorICogQHNjcDoJCVNDU0kgY29tbWFuZAorICogQGNtZDoJCUNvbW1hbmQgdG8gYmUgcHJlcGFyZWQKKyAqCisgKiBGcmFtZXMgKGFuZCBhY2NvbXBhbnlpbmcgU0dMcykgZm9yIHJlZ3VsYXIgU0NTSSBJT3MgdXNlIHRoaXMgZnVuY3Rpb24uCisgKi8KK3N0YXRpYyBpbnQKK21lZ2FzYXNfYnVpbGRfbGRpbyhzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UsIHN0cnVjdCBzY3NpX2NtbmQgKnNjcCwKKwkJICAgc3RydWN0IG1lZ2FzYXNfY21kICpjbWQpCit7CisJdTMyIGRldmljZV9pZDsKKwl1OCBzYyA9IHNjcC0+Y21uZFswXTsKKwl1MTYgZmxhZ3MgPSAwOworCXN0cnVjdCBtZWdhc2FzX2lvX2ZyYW1lICpsZGlvOworCisJZGV2aWNlX2lkID0gTUVHQVNBU19ERVZfSU5ERVgoaW5zdGFuY2UsIHNjcCk7CisJbGRpbyA9IChzdHJ1Y3QgbWVnYXNhc19pb19mcmFtZSAqKWNtZC0+ZnJhbWU7CisKKwlpZiAoc2NwLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBQQ0lfRE1BX1RPREVWSUNFKQorCQlmbGFncyA9IE1GSV9GUkFNRV9ESVJfV1JJVEU7CisJZWxzZSBpZiAoc2NwLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBQQ0lfRE1BX0ZST01ERVZJQ0UpCisJCWZsYWdzID0gTUZJX0ZSQU1FX0RJUl9SRUFEOworCisJaWYgKGluc3RhbmNlLT5mbGFnX2llZWUgPT0gMSkgeworCQlmbGFncyB8PSBNRklfRlJBTUVfSUVFRTsKKwl9CisKKwkvKgorCSAqIFByZXBhcmUgdGhlIExvZ2ljYWwgSU8gZnJhbWU6IDJuZCBiaXQgaXMgemVybyBmb3IgYWxsIHJlYWQgY21kcworCSAqLworCWxkaW8tPmNtZCA9IChzYyAmIDB4MDIpID8gTUZJX0NNRF9MRF9XUklURSA6IE1GSV9DTURfTERfUkVBRDsKKwlsZGlvLT5jbWRfc3RhdHVzID0gMHgwOworCWxkaW8tPnNjc2lfc3RhdHVzID0gMHgwOworCWxkaW8tPnRhcmdldF9pZCA9IGRldmljZV9pZDsKKwlsZGlvLT50aW1lb3V0ID0gMDsKKwlsZGlvLT5yZXNlcnZlZF8wID0gMDsKKwlsZGlvLT5wYWRfMCA9IDA7CisJbGRpby0+ZmxhZ3MgPSBmbGFnczsKKwlsZGlvLT5zdGFydF9sYmFfaGkgPSAwOworCWxkaW8tPmFjY2Vzc19ieXRlID0gKHNjcC0+Y21kX2xlbiAhPSA2KSA/IHNjcC0+Y21uZFsxXSA6IDA7CisKKwkvKgorCSAqIDYtYnl0ZSBSRUFEKDB4MDgpIG9yIFdSSVRFKDB4MEEpIGNkYgorCSAqLworCWlmIChzY3AtPmNtZF9sZW4gPT0gNikgeworCQlsZGlvLT5sYmFfY291bnQgPSAodTMyKSBzY3AtPmNtbmRbNF07CisJCWxkaW8tPnN0YXJ0X2xiYV9sbyA9ICgodTMyKSBzY3AtPmNtbmRbMV0gPDwgMTYpIHwKKwkJICAgICgodTMyKSBzY3AtPmNtbmRbMl0gPDwgOCkgfCAodTMyKSBzY3AtPmNtbmRbM107CisKKwkJbGRpby0+c3RhcnRfbGJhX2xvICY9IDB4MUZGRkZGOworCX0KKworCS8qCisJICogMTAtYnl0ZSBSRUFEKDB4MjgpIG9yIFdSSVRFKDB4MkEpIGNkYgorCSAqLworCWVsc2UgaWYgKHNjcC0+Y21kX2xlbiA9PSAxMCkgeworCQlsZGlvLT5sYmFfY291bnQgPSAodTMyKSBzY3AtPmNtbmRbOF0gfAorCQkgICAgKCh1MzIpIHNjcC0+Y21uZFs3XSA8PCA4KTsKKwkJbGRpby0+c3RhcnRfbGJhX2xvID0gKCh1MzIpIHNjcC0+Y21uZFsyXSA8PCAyNCkgfAorCQkgICAgKCh1MzIpIHNjcC0+Y21uZFszXSA8PCAxNikgfAorCQkgICAgKCh1MzIpIHNjcC0+Y21uZFs0XSA8PCA4KSB8ICh1MzIpIHNjcC0+Y21uZFs1XTsKKwl9CisKKwkvKgorCSAqIDEyLWJ5dGUgUkVBRCgweEE4KSBvciBXUklURSgweEFBKSBjZGIKKwkgKi8KKwllbHNlIGlmIChzY3AtPmNtZF9sZW4gPT0gMTIpIHsKKwkJbGRpby0+bGJhX2NvdW50ID0gKCh1MzIpIHNjcC0+Y21uZFs2XSA8PCAyNCkgfAorCQkgICAgKCh1MzIpIHNjcC0+Y21uZFs3XSA8PCAxNikgfAorCQkgICAgKCh1MzIpIHNjcC0+Y21uZFs4XSA8PCA4KSB8ICh1MzIpIHNjcC0+Y21uZFs5XTsKKworCQlsZGlvLT5zdGFydF9sYmFfbG8gPSAoKHUzMikgc2NwLT5jbW5kWzJdIDw8IDI0KSB8CisJCSAgICAoKHUzMikgc2NwLT5jbW5kWzNdIDw8IDE2KSB8CisJCSAgICAoKHUzMikgc2NwLT5jbW5kWzRdIDw8IDgpIHwgKHUzMikgc2NwLT5jbW5kWzVdOworCX0KKworCS8qCisJICogMTYtYnl0ZSBSRUFEKDB4ODgpIG9yIFdSSVRFKDB4OEEpIGNkYgorCSAqLworCWVsc2UgaWYgKHNjcC0+Y21kX2xlbiA9PSAxNikgeworCQlsZGlvLT5sYmFfY291bnQgPSAoKHUzMikgc2NwLT5jbW5kWzEwXSA8PCAyNCkgfAorCQkgICAgKCh1MzIpIHNjcC0+Y21uZFsxMV0gPDwgMTYpIHwKKwkJICAgICgodTMyKSBzY3AtPmNtbmRbMTJdIDw8IDgpIHwgKHUzMikgc2NwLT5jbW5kWzEzXTsKKworCQlsZGlvLT5zdGFydF9sYmFfbG8gPSAoKHUzMikgc2NwLT5jbW5kWzZdIDw8IDI0KSB8CisJCSAgICAoKHUzMikgc2NwLT5jbW5kWzddIDw8IDE2KSB8CisJCSAgICAoKHUzMikgc2NwLT5jbW5kWzhdIDw8IDgpIHwgKHUzMikgc2NwLT5jbW5kWzldOworCisJCWxkaW8tPnN0YXJ0X2xiYV9oaSA9ICgodTMyKSBzY3AtPmNtbmRbMl0gPDwgMjQpIHwKKwkJICAgICgodTMyKSBzY3AtPmNtbmRbM10gPDwgMTYpIHwKKwkJICAgICgodTMyKSBzY3AtPmNtbmRbNF0gPDwgOCkgfCAodTMyKSBzY3AtPmNtbmRbNV07CisKKwl9CisKKwkvKgorCSAqIENvbnN0cnVjdCBTR0wKKwkgKi8KKwlpZiAoaW5zdGFuY2UtPmZsYWdfaWVlZSkgeworCQlsZGlvLT5mbGFncyB8PSBNRklfRlJBTUVfU0dMNjQ7CisJCWxkaW8tPnNnZV9jb3VudCA9IG1lZ2FzYXNfbWFrZV9zZ2xfc2tpbm55KGluc3RhbmNlLCBzY3AsCisJCQkJCSAgICAgICZsZGlvLT5zZ2wpOworCX0gZWxzZSBpZiAoSVNfRE1BNjQpIHsKKwkJbGRpby0+ZmxhZ3MgfD0gTUZJX0ZSQU1FX1NHTDY0OworCQlsZGlvLT5zZ2VfY291bnQgPSBtZWdhc2FzX21ha2Vfc2dsNjQoaW5zdGFuY2UsIHNjcCwgJmxkaW8tPnNnbCk7CisJfSBlbHNlCisJCWxkaW8tPnNnZV9jb3VudCA9IG1lZ2FzYXNfbWFrZV9zZ2wzMihpbnN0YW5jZSwgc2NwLCAmbGRpby0+c2dsKTsKKworCWlmIChsZGlvLT5zZ2VfY291bnQgPiBpbnN0YW5jZS0+bWF4X251bV9zZ2UpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtZWdhc2FzOiBidWlsZF9sZF9pbzogc2dlX2NvdW50ID0gJXhcbiIsCisJCQlsZGlvLT5zZ2VfY291bnQpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKgorCSAqIFNlbnNlIGluZm8gc3BlY2lmaWMKKwkgKi8KKwlsZGlvLT5zZW5zZV9sZW4gPSBTQ1NJX1NFTlNFX0JVRkZFUlNJWkU7CisJbGRpby0+c2Vuc2VfYnVmX3BoeXNfYWRkcl9oaSA9IDA7CisJbGRpby0+c2Vuc2VfYnVmX3BoeXNfYWRkcl9sbyA9IGNtZC0+c2Vuc2VfcGh5c19hZGRyOworCisJLyoKKwkgKiBDb21wdXRlIHRoZSB0b3RhbCBudW1iZXIgb2YgZnJhbWVzIHRoaXMgY29tbWFuZCBjb25zdW1lcy4gRlcgdXNlcworCSAqIHRoaXMgbnVtYmVyIHRvIHB1bGwgc3VmZmljaWVudCBudW1iZXIgb2YgZnJhbWVzIGZyb20gaG9zdCBtZW1vcnkuCisJICovCisJY21kLT5mcmFtZV9jb3VudCA9IG1lZ2FzYXNfZ2V0X2ZyYW1lX2NvdW50KGluc3RhbmNlLAorCQkJbGRpby0+c2dlX2NvdW50LCBJT19GUkFNRSk7CisKKwlyZXR1cm4gY21kLT5mcmFtZV9jb3VudDsKK30KKworLyoqCisgKiBtZWdhc2FzX2lzX2xkaW8gLQkJQ2hlY2tzIGlmIHRoZSBjbWQgaXMgZm9yIGxvZ2ljYWwgZHJpdmUKKyAqIEBzY21kOgkJCVNDU0kgY29tbWFuZAorICoKKyAqIENhbGxlZCBieSBtZWdhc2FzX3F1ZXVlX2NvbW1hbmQgdG8gZmluZCBvdXQgaWYgdGhlIGNvbW1hbmQgdG8gYmUgcXVldWVkCisgKiBpcyBhIGxvZ2ljYWwgZHJpdmUgY29tbWFuZAorICovCitpbmxpbmUgaW50IG1lZ2FzYXNfaXNfbGRpbyhzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCit7CisJaWYgKCFNRUdBU0FTX0lTX0xPR0lDQUwoY21kKSkKKwkJcmV0dXJuIDA7CisJc3dpdGNoIChjbWQtPmNtbmRbMF0pIHsKKwljYXNlIFJFQURfMTA6CisJY2FzZSBXUklURV8xMDoKKwljYXNlIFJFQURfMTI6CisJY2FzZSBXUklURV8xMjoKKwljYXNlIFJFQURfNjoKKwljYXNlIFdSSVRFXzY6CisJY2FzZSBSRUFEXzE2OgorCWNhc2UgV1JJVEVfMTY6CisJCXJldHVybiAxOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KK30KKworIC8qKgorICogbWVnYXNhc19kdW1wX3BlbmRpbmdfZnJhbWVzIC0JRHVtcHMgdGhlIGZyYW1lIGFkZHJlc3Mgb2YgYWxsIHBlbmRpbmcgY21kcworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJaW4gRlcKKyAqIEBpbnN0YW5jZToJCQkJQWRhcHRlciBzb2Z0IHN0YXRlCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorbWVnYXNhc19kdW1wX3BlbmRpbmdfZnJhbWVzKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSkKK3sKKwlzdHJ1Y3QgbWVnYXNhc19jbWQgKmNtZDsKKwlpbnQgaSxuOworCXVuaW9uIG1lZ2FzYXNfc2dsICptZmlfc2dsOworCXN0cnVjdCBtZWdhc2FzX2lvX2ZyYW1lICpsZGlvOworCXN0cnVjdCBtZWdhc2FzX3B0aHJ1X2ZyYW1lICpwdGhydTsKKwl1MzIgc2djb3VudDsKKwl1MzIgbWF4X2NtZCA9IGluc3RhbmNlLT5tYXhfZndfY21kczsKKworCXByaW50ayhLRVJOX0VSUiAiXG5tZWdhc2FzWyVkXTogRHVtcGluZyBGcmFtZSBQaHlzIEFkZHJlc3Mgb2YgYWxsIHBlbmRpbmcgY21kcyBpbiBGV1xuIixpbnN0YW5jZS0+aG9zdC0+aG9zdF9ubyk7CisJcHJpbnRrKEtFUk5fRVJSICJtZWdhc2FzWyVkXTogVG90YWwgT1MgUGVuZGluZyBjbWRzIDogJWRcbiIsaW5zdGFuY2UtPmhvc3QtPmhvc3Rfbm8sYXRvbWljX3JlYWQoJmluc3RhbmNlLT5md19vdXRzdGFuZGluZykpOworCWlmIChJU19ETUE2NCkKKwkJcHJpbnRrKEtFUk5fRVJSICJcbm1lZ2FzYXNbJWRdOiA2NCBiaXQgU0dMcyB3ZXJlIHNlbnQgdG8gRldcbiIsaW5zdGFuY2UtPmhvc3QtPmhvc3Rfbm8pOworCWVsc2UKKwkJcHJpbnRrKEtFUk5fRVJSICJcbm1lZ2FzYXNbJWRdOiAzMiBiaXQgU0dMcyB3ZXJlIHNlbnQgdG8gRldcbiIsaW5zdGFuY2UtPmhvc3QtPmhvc3Rfbm8pOworCisJcHJpbnRrKEtFUk5fRVJSICJtZWdhc2FzWyVkXTogUGVuZGluZyBPUyBjbWRzIGluIEZXIDogXG4iLGluc3RhbmNlLT5ob3N0LT5ob3N0X25vKTsKKwlmb3IgKGkgPSAwOyBpIDwgbWF4X2NtZDsgaSsrKSB7CisJCWNtZCA9IGluc3RhbmNlLT5jbWRfbGlzdFtpXTsKKwkJaWYoIWNtZC0+c2NtZCkKKwkJCWNvbnRpbnVlOworCQlwcmludGsoS0VSTl9FUlIgIm1lZ2FzYXNbJWRdOiBGcmFtZSBhZGRyIDoweCUwOGx4IDogIixpbnN0YW5jZS0+aG9zdC0+aG9zdF9ubywodW5zaWduZWQgbG9uZyljbWQtPmZyYW1lX3BoeXNfYWRkcik7CisJCWlmIChtZWdhc2FzX2lzX2xkaW8oY21kLT5zY21kKSl7CisJCQlsZGlvID0gKHN0cnVjdCBtZWdhc2FzX2lvX2ZyYW1lICopY21kLT5mcmFtZTsKKwkJCW1maV9zZ2wgPSAmbGRpby0+c2dsOworCQkJc2djb3VudCA9IGxkaW8tPnNnZV9jb3VudDsKKwkJCXByaW50ayhLRVJOX0VSUiAibWVnYXNhc1slZF06IGZyYW1lIGNvdW50IDogMHgleCwgQ21kIDogMHgleCwgVGd0IGlkIDogMHgleCwgbGJhIGxvIDogMHgleCwgbGJhX2hpIDogMHgleCwgc2Vuc2VfYnVmIGFkZHIgOiAweCV4LHNnZSBjb3VudCA6IDB4JXhcbiIsaW5zdGFuY2UtPmhvc3QtPmhvc3Rfbm8sIGNtZC0+ZnJhbWVfY291bnQsbGRpby0+Y21kLGxkaW8tPnRhcmdldF9pZCwgbGRpby0+c3RhcnRfbGJhX2xvLGxkaW8tPnN0YXJ0X2xiYV9oaSxsZGlvLT5zZW5zZV9idWZfcGh5c19hZGRyX2xvLHNnY291bnQpOworCQl9CisJCWVsc2UgeworCQkJcHRocnUgPSAoc3RydWN0IG1lZ2FzYXNfcHRocnVfZnJhbWUgKikgY21kLT5mcmFtZTsKKwkJCW1maV9zZ2wgPSAmcHRocnUtPnNnbDsKKwkJCXNnY291bnQgPSBwdGhydS0+c2dlX2NvdW50OworCQkJcHJpbnRrKEtFUk5fRVJSICJtZWdhc2FzWyVkXTogZnJhbWUgY291bnQgOiAweCV4LCBDbWQgOiAweCV4LCBUZ3QgaWQgOiAweCV4LCBsdW4gOiAweCV4LCBjZGJfbGVuIDogMHgleCwgZGF0YSB4ZmVyIGxlbiA6IDB4JXgsIHNlbnNlX2J1ZiBhZGRyIDogMHgleCxzZ2UgY291bnQgOiAweCV4XG4iLGluc3RhbmNlLT5ob3N0LT5ob3N0X25vLGNtZC0+ZnJhbWVfY291bnQscHRocnUtPmNtZCxwdGhydS0+dGFyZ2V0X2lkLHB0aHJ1LT5sdW4scHRocnUtPmNkYl9sZW4gLCBwdGhydS0+ZGF0YV94ZmVyX2xlbixwdGhydS0+c2Vuc2VfYnVmX3BoeXNfYWRkcl9sbyxzZ2NvdW50KTsKKwkJfQorCWlmKG1lZ2FzYXNfZGJnX2x2bCAmIE1FR0FTQVNfREJHX0xWTCl7CisJCWZvciAobiA9IDA7IG4gPCBzZ2NvdW50OyBuKyspeworCQkJaWYgKElTX0RNQTY0KQorCQkJCXByaW50ayhLRVJOX0VSUiAibWVnYXNhczogc2dsIGxlbiA6IDB4JXgsIHNnbCBhZGRyIDogMHglMDhseCAiLG1maV9zZ2wtPnNnZTY0W25dLmxlbmd0aCAsICh1bnNpZ25lZCBsb25nKW1maV9zZ2wtPnNnZTY0W25dLnBoeXNfYWRkcikgOworCQkJZWxzZQorCQkJCXByaW50ayhLRVJOX0VSUiAibWVnYXNhczogc2dsIGxlbiA6IDB4JXgsIHNnbCBhZGRyIDogMHgleCAiLG1maV9zZ2wtPnNnZTMyW25dLmxlbmd0aCAsIG1maV9zZ2wtPnNnZTMyW25dLnBoeXNfYWRkcikgOworCQkJfQorCQl9CisJCXByaW50ayhLRVJOX0VSUiAiXG4iKTsKKwl9IC8qZm9yIG1heF9jbWQqLworCXByaW50ayhLRVJOX0VSUiAiXG5tZWdhc2FzWyVkXTogUGVuZGluZyBJbnRlcm5hbCBjbWRzIGluIEZXIDogXG4iLGluc3RhbmNlLT5ob3N0LT5ob3N0X25vKTsKKwlmb3IgKGkgPSAwOyBpIDwgbWF4X2NtZDsgaSsrKSB7CisKKwkJY21kID0gaW5zdGFuY2UtPmNtZF9saXN0W2ldOworCisJCWlmKGNtZC0+c3luY19jbWQgPT0gMSl7CisJCQlwcmludGsoS0VSTl9FUlIgIjB4JTA4bHggOiAiLCAodW5zaWduZWQgbG9uZyljbWQtPmZyYW1lX3BoeXNfYWRkcik7CisJCX0KKwl9CisJcHJpbnRrKEtFUk5fRVJSICJtZWdhc2FzWyVkXTogRHVtcGluZyBEb25lLlxuXG4iLGluc3RhbmNlLT5ob3N0LT5ob3N0X25vKTsKK30KKwordTMyCittZWdhc2FzX2J1aWxkX2FuZF9pc3N1ZV9jbWQoc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlLAorCQkJICAgIHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQpCit7CisJc3RydWN0IG1lZ2FzYXNfY21kICpjbWQ7CisJdTMyIGZyYW1lX2NvdW50OworCisJY21kID0gbWVnYXNhc19nZXRfY21kKGluc3RhbmNlKTsKKwlpZiAoIWNtZCkKKwkJcmV0dXJuIFNDU0lfTUxRVUVVRV9IT1NUX0JVU1k7CisKKwkvKgorCSAqIExvZ2ljYWwgZHJpdmUgY29tbWFuZAorCSAqLworCWlmIChtZWdhc2FzX2lzX2xkaW8oc2NtZCkpCisJCWZyYW1lX2NvdW50ID0gbWVnYXNhc19idWlsZF9sZGlvKGluc3RhbmNlLCBzY21kLCBjbWQpOworCWVsc2UKKwkJZnJhbWVfY291bnQgPSBtZWdhc2FzX2J1aWxkX2RjZGIoaW5zdGFuY2UsIHNjbWQsIGNtZCk7CisKKwlpZiAoIWZyYW1lX2NvdW50KQorCQlnb3RvIG91dF9yZXR1cm5fY21kOworCisJY21kLT5zY21kID0gc2NtZDsKKwlzY21kLT5TQ3AucHRyID0gKGNoYXIgKiljbWQ7CisKKwkvKgorCSAqIElzc3VlIHRoZSBjb21tYW5kIHRvIHRoZSBGVworCSAqLworCWF0b21pY19pbmMoJmluc3RhbmNlLT5md19vdXRzdGFuZGluZyk7CisKKwlpbnN0YW5jZS0+aW5zdGFuY2V0LT5maXJlX2NtZChpbnN0YW5jZSwgY21kLT5mcmFtZV9waHlzX2FkZHIsCisJCQkJY21kLT5mcmFtZV9jb3VudC0xLCBpbnN0YW5jZS0+cmVnX3NldCk7CisJLyoKKwkgKiBDaGVjayBpZiB3ZSBoYXZlIHBlbmQgY21kcyB0byBiZSBjb21wbGV0ZWQKKwkgKi8KKwlpZiAocG9sbF9tb2RlX2lvICYmIGF0b21pY19yZWFkKCZpbnN0YW5jZS0+Zndfb3V0c3RhbmRpbmcpKQorCQl0YXNrbGV0X3NjaGVkdWxlKCZpbnN0YW5jZS0+aXNyX3Rhc2tsZXQpOworCisJcmV0dXJuIDA7CitvdXRfcmV0dXJuX2NtZDoKKwltZWdhc2FzX3JldHVybl9jbWQoaW5zdGFuY2UsIGNtZCk7CisJcmV0dXJuIDE7Cit9CisKKworLyoqCisgKiBtZWdhc2FzX3F1ZXVlX2NvbW1hbmQgLQlRdWV1ZSBlbnRyeSBwb2ludAorICogQHNjbWQ6CQkJU0NTSSBjb21tYW5kIHRvIGJlIHF1ZXVlZAorICogQGRvbmU6CQkJQ2FsbGJhY2sgZW50cnkgcG9pbnQKKyAqLworc3RhdGljIGludAorbWVnYXNhc19xdWV1ZV9jb21tYW5kX2xjayhzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kLCB2b2lkICgqZG9uZSkgKHN0cnVjdCBzY3NpX2NtbmQgKikpCit7CisJc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpbnN0YW5jZSA9IChzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqKQorCSAgICBzY21kLT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhOworCisJaWYgKGluc3RhbmNlLT5pc3N1ZXBlbmRfZG9uZSA9PSAwKQorCQlyZXR1cm4gU0NTSV9NTFFVRVVFX0hPU1RfQlVTWTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpbnN0YW5jZS0+aGJhX2xvY2ssIGZsYWdzKTsKKwlpZiAoaW5zdGFuY2UtPmFkcHJlY292ZXJ5ICE9IE1FR0FTQVNfSEJBX09QRVJBVElPTkFMKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluc3RhbmNlLT5oYmFfbG9jaywgZmxhZ3MpOworCQlyZXR1cm4gU0NTSV9NTFFVRVVFX0hPU1RfQlVTWTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbnN0YW5jZS0+aGJhX2xvY2ssIGZsYWdzKTsKKworCXNjbWQtPnNjc2lfZG9uZSA9IGRvbmU7CisJc2NtZC0+cmVzdWx0ID0gMDsKKworCWlmIChNRUdBU0FTX0lTX0xPR0lDQUwoc2NtZCkgJiYKKwkgICAgKHNjbWQtPmRldmljZS0+aWQgPj0gTUVHQVNBU19NQVhfTEQgfHwgc2NtZC0+ZGV2aWNlLT5sdW4pKSB7CisJCXNjbWQtPnJlc3VsdCA9IERJRF9CQURfVEFSR0VUIDw8IDE2OworCQlnb3RvIG91dF9kb25lOworCX0KKworCXN3aXRjaCAoc2NtZC0+Y21uZFswXSkgeworCWNhc2UgU1lOQ0hST05JWkVfQ0FDSEU6CisJCS8qCisJCSAqIEZXIHRha2VzIGNhcmUgb2YgZmx1c2ggY2FjaGUgb24gaXRzIG93bgorCQkgKiBObyBuZWVkIHRvIHNlbmQgaXQgZG93bgorCQkgKi8KKwkJc2NtZC0+cmVzdWx0ID0gRElEX09LIDw8IDE2OworCQlnb3RvIG91dF9kb25lOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWlmIChpbnN0YW5jZS0+aW5zdGFuY2V0LT5idWlsZF9hbmRfaXNzdWVfY21kKGluc3RhbmNlLCBzY21kKSkgeworCQlwcmludGsoS0VSTl9FUlIgIm1lZ2FzYXM6IEVyciByZXR1cm5lZCBmcm9tIGJ1aWxkX2FuZF9pc3N1ZV9jbWRcbiIpOworCQlyZXR1cm4gU0NTSV9NTFFVRVVFX0hPU1RfQlVTWTsKKwl9CisKKwlyZXR1cm4gMDsKKworIG91dF9kb25lOgorCWRvbmUoc2NtZCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBERUZfU0NTSV9RQ01EKG1lZ2FzYXNfcXVldWVfY29tbWFuZCkKKworc3RhdGljIHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICptZWdhc2FzX2xvb2t1cF9pbnN0YW5jZSh1MTYgaG9zdF9ubykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBtZWdhc2FzX21nbXRfaW5mby5tYXhfaW5kZXg7IGkrKykgeworCisJCWlmICgobWVnYXNhc19tZ210X2luZm8uaW5zdGFuY2VbaV0pICYmCisJCSAgICAobWVnYXNhc19tZ210X2luZm8uaW5zdGFuY2VbaV0tPmhvc3QtPmhvc3Rfbm8gPT0gaG9zdF9ubykpCisJCQlyZXR1cm4gbWVnYXNhc19tZ210X2luZm8uaW5zdGFuY2VbaV07CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgbWVnYXNhc19zbGF2ZV9jb25maWd1cmUoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQoreworCXUxNiAgICAgICAgICAgICBwZF9pbmRleCA9IDA7CisJc3RydWN0ICBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSA7CisKKwlpbnN0YW5jZSA9IG1lZ2FzYXNfbG9va3VwX2luc3RhbmNlKHNkZXYtPmhvc3QtPmhvc3Rfbm8pOworCisJLyoKKwkqIERvbid0IGV4cG9ydCBwaHlzaWNhbCBkaXNrIGRldmljZXMgdG8gdGhlIGRpc2sgZHJpdmVyLgorCSoKKwkqIEZJWE1FOiBDdXJyZW50bHkgd2UgZG9uJ3QgZXhwb3J0IHRoZW0gdG8gdGhlIG1pZGxheWVyIGF0IGFsbC4KKwkqICAgICAgICBUaGF0IHdpbGwgYmUgZml4ZWQgb25jZSBMU0kgZW5naW5lZXJzIGhhdmUgYXVkaXRlZCB0aGUKKwkqICAgICAgICBmaXJtd2FyZSBmb3IgcG9zc2libGUgaXNzdWVzLgorCSovCisJaWYgKHNkZXYtPmNoYW5uZWwgPCBNRUdBU0FTX01BWF9QRF9DSEFOTkVMUyAmJgorCQkJCXNkZXYtPnR5cGUgPT0gVFlQRV9ESVNLKSB7CisJCXBkX2luZGV4ID0gKHNkZXYtPmNoYW5uZWwgKiBNRUdBU0FTX01BWF9ERVZfUEVSX0NIQU5ORUwpICsKKwkJCQkJCQkJc2Rldi0+aWQ7CisJCWlmIChpbnN0YW5jZS0+cGRfbGlzdFtwZF9pbmRleF0uZHJpdmVTdGF0ZSA9PQorCQkJCQkJTVJfUERfU1RBVEVfU1lTVEVNKSB7CisJCQlibGtfcXVldWVfcnFfdGltZW91dChzZGV2LT5yZXF1ZXN0X3F1ZXVlLAorCQkJCU1FR0FTQVNfREVGQVVMVF9DTURfVElNRU9VVCAqIEhaKTsKKwkJCXJldHVybiAwOworCQl9CisJCXJldHVybiAtRU5YSU87CisJfQorCisJLyoKKwkqIFRoZSBSQUlEIGZpcm13YXJlIG1heSByZXF1aXJlIGV4dGVuZGVkIHRpbWVvdXRzLgorCSovCisJYmxrX3F1ZXVlX3JxX3RpbWVvdXQoc2Rldi0+cmVxdWVzdF9xdWV1ZSwKKwkJTUVHQVNBU19ERUZBVUxUX0NNRF9USU1FT1VUICogSFopOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lZ2FzYXNfc2xhdmVfYWxsb2Moc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQoreworCXUxNiAgICAgICAgICAgICBwZF9pbmRleCA9IDA7CisJc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlIDsKKwlpbnN0YW5jZSA9IG1lZ2FzYXNfbG9va3VwX2luc3RhbmNlKHNkZXYtPmhvc3QtPmhvc3Rfbm8pOworCWlmICgoc2Rldi0+Y2hhbm5lbCA8IE1FR0FTQVNfTUFYX1BEX0NIQU5ORUxTKSAmJgorCQkJCShzZGV2LT50eXBlID09IFRZUEVfRElTSykpIHsKKwkJLyoKKwkJICogT3BlbiB0aGUgT1Mgc2NhbiB0byB0aGUgU1lTVEVNIFBECisJCSAqLworCQlwZF9pbmRleCA9CisJCQkoc2Rldi0+Y2hhbm5lbCAqIE1FR0FTQVNfTUFYX0RFVl9QRVJfQ0hBTk5FTCkgKworCQkJc2Rldi0+aWQ7CisJCWlmICgoaW5zdGFuY2UtPnBkX2xpc3RbcGRfaW5kZXhdLmRyaXZlU3RhdGUgPT0KKwkJCQkJTVJfUERfU1RBVEVfU1lTVEVNKSAmJgorCQkJKGluc3RhbmNlLT5wZF9saXN0W3BkX2luZGV4XS5kcml2ZVR5cGUgPT0KKwkJCQkJCVRZUEVfRElTSykpIHsKKwkJCXJldHVybiAwOworCQl9CisJCXJldHVybiAtRU5YSU87CisJfQorCXJldHVybiAwOworfQorCit2b2lkIG1lZ2FyYWlkX3Nhc19raWxsX2hiYShzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UpCit7CisJaWYgKChpbnN0YW5jZS0+cGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfTFNJX1NBUzAwNzNTS0lOTlkpIHx8CisJICAgIChpbnN0YW5jZS0+cGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfTFNJX1NBUzAwNzFTS0lOTlkpIHx8CisJICAgIChpbnN0YW5jZS0+cGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfTFNJX0ZVU0lPTikpIHsKKwkJd3JpdGVsKE1GSV9TVE9QX0FEUCwgJmluc3RhbmNlLT5yZWdfc2V0LT5kb29yYmVsbCk7CisJfSBlbHNlIHsKKwkJd3JpdGVsKE1GSV9TVE9QX0FEUCwgJmluc3RhbmNlLT5yZWdfc2V0LT5pbmJvdW5kX2Rvb3JiZWxsKTsKKwl9Cit9CisKKyAvKioKKyAgKiBtZWdhc2FzX2NoZWNrX2FuZF9yZXN0b3JlX3F1ZXVlX2RlcHRoIC0gQ2hlY2sgaWYgcXVldWUgZGVwdGggbmVlZHMgdG8gYmUKKyAgKgkJCQkJcmVzdG9yZWQgdG8gbWF4IHZhbHVlCisgICogQGluc3RhbmNlOgkJCUFkYXB0ZXIgc29mdCBzdGF0ZQorICAqCisgICovCit2b2lkCittZWdhc2FzX2NoZWNrX2FuZF9yZXN0b3JlX3F1ZXVlX2RlcHRoKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWlmIChpbnN0YW5jZS0+ZmxhZyAmIE1FR0FTQVNfRldfQlVTWQorCQkmJiB0aW1lX2FmdGVyKGppZmZpZXMsIGluc3RhbmNlLT5sYXN0X3RpbWUgKyA1ICogSFopCisJCSYmIGF0b21pY19yZWFkKCZpbnN0YW5jZS0+Zndfb3V0c3RhbmRpbmcpIDwgMTcpIHsKKworCQlzcGluX2xvY2tfaXJxc2F2ZShpbnN0YW5jZS0+aG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CisJCWluc3RhbmNlLT5mbGFnICY9IH5NRUdBU0FTX0ZXX0JVU1k7CisJCWlmICgoaW5zdGFuY2UtPnBkZXYtPmRldmljZSA9PQorCQkJUENJX0RFVklDRV9JRF9MU0lfU0FTMDA3M1NLSU5OWSkgfHwKKwkJCShpbnN0YW5jZS0+cGRldi0+ZGV2aWNlID09CisJCQlQQ0lfREVWSUNFX0lEX0xTSV9TQVMwMDcxU0tJTk5ZKSkgeworCQkJaW5zdGFuY2UtPmhvc3QtPmNhbl9xdWV1ZSA9CisJCQkJaW5zdGFuY2UtPm1heF9md19jbWRzIC0gTUVHQVNBU19TS0lOTllfSU5UX0NNRFM7CisJCX0gZWxzZQorCQkJaW5zdGFuY2UtPmhvc3QtPmNhbl9xdWV1ZSA9CisJCQkJaW5zdGFuY2UtPm1heF9md19jbWRzIC0gTUVHQVNBU19JTlRfQ01EUzsKKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGluc3RhbmNlLT5ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKKwl9Cit9CisKKy8qKgorICogbWVnYXNhc19jb21wbGV0ZV9jbWRfZHBjCSAtCVJldHVybnMgRlcncyBjb250cm9sbGVyIHN0cnVjdHVyZQorICogQGluc3RhbmNlX2FkZHI6CQkJQWRkcmVzcyBvZiBhZGFwdGVyIHNvZnQgc3RhdGUKKyAqCisgKiBUYXNrbGV0IHRvIGNvbXBsZXRlIGNtZHMKKyAqLworc3RhdGljIHZvaWQgbWVnYXNhc19jb21wbGV0ZV9jbWRfZHBjKHVuc2lnbmVkIGxvbmcgaW5zdGFuY2VfYWRkcikKK3sKKwl1MzIgcHJvZHVjZXI7CisJdTMyIGNvbnN1bWVyOworCXUzMiBjb250ZXh0OworCXN0cnVjdCBtZWdhc2FzX2NtZCAqY21kOworCXN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSA9CisJCQkJKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICopaW5zdGFuY2VfYWRkcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogSWYgd2UgaGF2ZSBhbHJlYWR5IGRlY2xhcmVkIGFkYXB0ZXIgZGVhZCwgZG9ub3QgY29tcGxldGUgY21kcyAqLworCWlmIChpbnN0YW5jZS0+YWRwcmVjb3ZlcnkgPT0gTUVHQVNBU19IV19DUklUSUNBTF9FUlJPUiApCisJCXJldHVybjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpbnN0YW5jZS0+Y29tcGxldGlvbl9sb2NrLCBmbGFncyk7CisKKwlwcm9kdWNlciA9ICppbnN0YW5jZS0+cHJvZHVjZXI7CisJY29uc3VtZXIgPSAqaW5zdGFuY2UtPmNvbnN1bWVyOworCisJd2hpbGUgKGNvbnN1bWVyICE9IHByb2R1Y2VyKSB7CisJCWNvbnRleHQgPSBpbnN0YW5jZS0+cmVwbHlfcXVldWVbY29uc3VtZXJdOworCQlpZiAoY29udGV4dCA+PSBpbnN0YW5jZS0+bWF4X2Z3X2NtZHMpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiVW5leHBlY3RlZCBjb250ZXh0IHZhbHVlICV4XG4iLAorCQkJCWNvbnRleHQpOworCQkJQlVHKCk7CisJCX0KKworCQljbWQgPSBpbnN0YW5jZS0+Y21kX2xpc3RbY29udGV4dF07CisKKwkJbWVnYXNhc19jb21wbGV0ZV9jbWQoaW5zdGFuY2UsIGNtZCwgRElEX09LKTsKKworCQljb25zdW1lcisrOworCQlpZiAoY29uc3VtZXIgPT0gKGluc3RhbmNlLT5tYXhfZndfY21kcyArIDEpKSB7CisJCQljb25zdW1lciA9IDA7CisJCX0KKwl9CisKKwkqaW5zdGFuY2UtPmNvbnN1bWVyID0gcHJvZHVjZXI7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbnN0YW5jZS0+Y29tcGxldGlvbl9sb2NrLCBmbGFncyk7CisKKwkvKgorCSAqIENoZWNrIGlmIHdlIGNhbiByZXN0b3JlIGNhbl9xdWV1ZQorCSAqLworCW1lZ2FzYXNfY2hlY2tfYW5kX3Jlc3RvcmVfcXVldWVfZGVwdGgoaW5zdGFuY2UpOworfQorCitzdGF0aWMgdm9pZAorbWVnYXNhc19pbnRlcm5hbF9yZXNldF9kZWZlcl9jbWRzKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSk7CisKK3N0YXRpYyB2b2lkCitwcm9jZXNzX2Z3X3N0YXRlX2NoYW5nZV93cShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworCit2b2lkIG1lZ2FzYXNfZG9fb2NyKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSkKK3sKKwlpZiAoKGluc3RhbmNlLT5wZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9MU0lfU0FTMTA2NFIpIHx8CisJKGluc3RhbmNlLT5wZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9ERUxMX1BFUkM1KSB8fAorCShpbnN0YW5jZS0+cGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfTFNJX1ZFUkRFX1pDUikpIHsKKwkJKmluc3RhbmNlLT5jb25zdW1lciAgICAgPSBNRUdBU0FTX0FEUFJFU0VUX0lOUFJPR19TSUdOOworCX0KKwlpbnN0YW5jZS0+aW5zdGFuY2V0LT5kaXNhYmxlX2ludHIoaW5zdGFuY2UtPnJlZ19zZXQpOworCWluc3RhbmNlLT5hZHByZWNvdmVyeSAgID0gTUVHQVNBU19BRFBSRVNFVF9TTV9JTkZBVUxUOworCWluc3RhbmNlLT5pc3N1ZXBlbmRfZG9uZSA9IDA7CisKKwlhdG9taWNfc2V0KCZpbnN0YW5jZS0+Zndfb3V0c3RhbmRpbmcsIDApOworCW1lZ2FzYXNfaW50ZXJuYWxfcmVzZXRfZGVmZXJfY21kcyhpbnN0YW5jZSk7CisJcHJvY2Vzc19md19zdGF0ZV9jaGFuZ2Vfd3EoJmluc3RhbmNlLT53b3JrX2luaXQpOworfQorCisvKioKKyAqIG1lZ2FzYXNfd2FpdF9mb3Jfb3V0c3RhbmRpbmcgLQlXYWl0IGZvciBhbGwgb3V0c3RhbmRpbmcgY21kcworICogQGluc3RhbmNlOgkJCQlBZGFwdGVyIHNvZnQgc3RhdGUKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdhaXRzIGZvciB1cHRvIE1FR0FTQVNfUkVTRVRfV0FJVF9USU1FIHNlY29uZHMgZm9yIEZXIHRvCisgKiBjb21wbGV0ZSBhbGwgaXRzIG91dHN0YW5kaW5nIGNvbW1hbmRzLiBSZXR1cm5zIGVycm9yIGlmIG9uZSBvciBtb3JlIElPcworICogYXJlIHBlbmRpbmcgYWZ0ZXIgdGhpcyB0aW1lIHBlcmlvZC4gSXQgYWxzbyBtYXJrcyB0aGUgY29udHJvbGxlciBkZWFkLgorICovCitzdGF0aWMgaW50IG1lZ2FzYXNfd2FpdF9mb3Jfb3V0c3RhbmRpbmcoc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlKQoreworCWludCBpOworCXUzMiByZXNldF9pbmRleDsKKwl1MzIgd2FpdF90aW1lID0gTUVHQVNBU19SRVNFVF9XQUlUX1RJTUU7CisJdTggYWRwcmVjb3Zlcnk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGNsaXN0X2xvY2FsOworCXN0cnVjdCBtZWdhc2FzX2NtZCAqcmVzZXRfY21kOworCXUzMiBmd19zdGF0ZTsKKwl1OCBraWxsX2FkYXB0ZXJfZmxhZzsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpbnN0YW5jZS0+aGJhX2xvY2ssIGZsYWdzKTsKKwlhZHByZWNvdmVyeSA9IGluc3RhbmNlLT5hZHByZWNvdmVyeTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbnN0YW5jZS0+aGJhX2xvY2ssIGZsYWdzKTsKKworCWlmIChhZHByZWNvdmVyeSAhPSBNRUdBU0FTX0hCQV9PUEVSQVRJT05BTCkgeworCisJCUlOSVRfTElTVF9IRUFEKCZjbGlzdF9sb2NhbCk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZpbnN0YW5jZS0+aGJhX2xvY2ssIGZsYWdzKTsKKwkJbGlzdF9zcGxpY2VfaW5pdCgmaW5zdGFuY2UtPmludGVybmFsX3Jlc2V0X3BlbmRpbmdfcSwKKwkJCQkmY2xpc3RfbG9jYWwpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbnN0YW5jZS0+aGJhX2xvY2ssIGZsYWdzKTsKKworCQlwcmludGsoS0VSTl9OT1RJQ0UgIm1lZ2FzYXM6IEhCQSByZXNldCB3YWl0IC4uLlxuIik7CisJCWZvciAoaSA9IDA7IGkgPCB3YWl0X3RpbWU7IGkrKykgeworCQkJbXNsZWVwKDEwMDApOworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmluc3RhbmNlLT5oYmFfbG9jaywgZmxhZ3MpOworCQkJYWRwcmVjb3ZlcnkgPSBpbnN0YW5jZS0+YWRwcmVjb3Zlcnk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbnN0YW5jZS0+aGJhX2xvY2ssIGZsYWdzKTsKKwkJCWlmIChhZHByZWNvdmVyeSA9PSBNRUdBU0FTX0hCQV9PUEVSQVRJT05BTCkKKwkJCQlicmVhazsKKwkJfQorCisJCWlmIChhZHByZWNvdmVyeSAhPSBNRUdBU0FTX0hCQV9PUEVSQVRJT05BTCkgeworCQkJcHJpbnRrKEtFUk5fTk9USUNFICJtZWdhc2FzOiByZXNldDogU3RvcHBpbmcgSEJBLlxuIik7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW5zdGFuY2UtPmhiYV9sb2NrLCBmbGFncyk7CisJCQlpbnN0YW5jZS0+YWRwcmVjb3ZlcnkJPSBNRUdBU0FTX0hXX0NSSVRJQ0FMX0VSUk9SOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5zdGFuY2UtPmhiYV9sb2NrLCBmbGFncyk7CisJCQlyZXR1cm4gRkFJTEVEOworCQl9CisKKwkJcmVzZXRfaW5kZXgJPSAwOworCQl3aGlsZSAoIWxpc3RfZW1wdHkoJmNsaXN0X2xvY2FsKSkgeworCQkJcmVzZXRfY21kCT0gbGlzdF9lbnRyeSgoJmNsaXN0X2xvY2FsKS0+bmV4dCwKKwkJCQkJCXN0cnVjdCBtZWdhc2FzX2NtZCwgbGlzdCk7CisJCQlsaXN0X2RlbF9pbml0KCZyZXNldF9jbWQtPmxpc3QpOworCQkJaWYgKHJlc2V0X2NtZC0+c2NtZCkgeworCQkJCXJlc2V0X2NtZC0+c2NtZC0+cmVzdWx0ID0gRElEX1JFU0VUIDw8IDE2OworCQkJCXByaW50ayhLRVJOX05PVElDRSAiJWQ6JXAgcmVzZXQgWyUwMnhdLCAlI2x4XG4iLAorCQkJCQlyZXNldF9pbmRleCwgcmVzZXRfY21kLAorCQkJCQlyZXNldF9jbWQtPnNjbWQtPmNtbmRbMF0sCisJCQkJCXJlc2V0X2NtZC0+c2NtZC0+c2VyaWFsX251bWJlcik7CisKKwkJCQlyZXNldF9jbWQtPnNjbWQtPnNjc2lfZG9uZShyZXNldF9jbWQtPnNjbWQpOworCQkJCW1lZ2FzYXNfcmV0dXJuX2NtZChpbnN0YW5jZSwgcmVzZXRfY21kKTsKKwkJCX0gZWxzZSBpZiAocmVzZXRfY21kLT5zeW5jX2NtZCkgeworCQkJCXByaW50ayhLRVJOX05PVElDRSAibWVnYXNhczolcCBzeW5jaCBjbWRzIgorCQkJCQkJInJlc2V0IHF1ZXVlXG4iLAorCQkJCQkJcmVzZXRfY21kKTsKKworCQkJCXJlc2V0X2NtZC0+Y21kX3N0YXR1cyA9IEVOT0RBVEE7CisJCQkJaW5zdGFuY2UtPmluc3RhbmNldC0+ZmlyZV9jbWQoaW5zdGFuY2UsCisJCQkJCQlyZXNldF9jbWQtPmZyYW1lX3BoeXNfYWRkciwKKwkJCQkJCTAsIGluc3RhbmNlLT5yZWdfc2V0KTsKKwkJCX0gZWxzZSB7CisJCQkJcHJpbnRrKEtFUk5fTk9USUNFICJtZWdhc2FzOiAlcCB1bmV4cGVjdGVkIgorCQkJCQkiY21kcyBsc3RcbiIsCisJCQkJCXJlc2V0X2NtZCk7CisJCQl9CisJCQlyZXNldF9pbmRleCsrOworCQl9CisKKwkJcmV0dXJuIFNVQ0NFU1M7CisJfQorCisJZm9yIChpID0gMDsgaSA8IHdhaXRfdGltZTsgaSsrKSB7CisKKwkJaW50IG91dHN0YW5kaW5nID0gYXRvbWljX3JlYWQoJmluc3RhbmNlLT5md19vdXRzdGFuZGluZyk7CisKKwkJaWYgKCFvdXRzdGFuZGluZykKKwkJCWJyZWFrOworCisJCWlmICghKGkgJSBNRUdBU0FTX1JFU0VUX05PVElDRV9JTlRFUlZBTCkpIHsKKwkJCXByaW50ayhLRVJOX05PVElDRSAibWVnYXNhczogWyUyZF13YWl0aW5nIGZvciAlZCAiCisJCQkgICAgICAgImNvbW1hbmRzIHRvIGNvbXBsZXRlXG4iLGksb3V0c3RhbmRpbmcpOworCQkJLyoKKwkJCSAqIENhbGwgY21kIGNvbXBsZXRpb24gcm91dGluZS4gQ21kIHRvIGJlCisJCQkgKiBiZSBjb21wbGV0ZWQgZGlyZWN0bHkgd2l0aG91dCBkZXBlbmRpbmcgb24gaXNyLgorCQkJICovCisJCQltZWdhc2FzX2NvbXBsZXRlX2NtZF9kcGMoKHVuc2lnbmVkIGxvbmcpaW5zdGFuY2UpOworCQl9CisKKwkJbXNsZWVwKDEwMDApOworCX0KKworCWkgPSAwOworCWtpbGxfYWRhcHRlcl9mbGFnID0gMDsKKwlkbyB7CisJCWZ3X3N0YXRlID0gaW5zdGFuY2UtPmluc3RhbmNldC0+cmVhZF9md19zdGF0dXNfcmVnKAorCQkJCQlpbnN0YW5jZS0+cmVnX3NldCkgJiBNRklfU1RBVEVfTUFTSzsKKwkJaWYgKChmd19zdGF0ZSA9PSBNRklfU1RBVEVfRkFVTFQpICYmCisJCQkoaW5zdGFuY2UtPmRpc2FibGVPbmxpbmVDdHJsUmVzZXQgPT0gMCkpIHsKKwkJCWlmIChpID09IDMpIHsKKwkJCQlraWxsX2FkYXB0ZXJfZmxhZyA9IDI7CisJCQkJYnJlYWs7CisJCQl9CisJCQltZWdhc2FzX2RvX29jcihpbnN0YW5jZSk7CisJCQlraWxsX2FkYXB0ZXJfZmxhZyA9IDE7CisKKwkJCS8qIHdhaXQgZm9yIDEgc2VjcyB0byBsZXQgRlcgZmluaXNoIHRoZSBwZW5kaW5nIGNtZHMgKi8KKwkJCW1zbGVlcCgxMDAwKTsKKwkJfQorCQlpKys7CisJfSB3aGlsZSAoaSA8PSAzKTsKKworCWlmIChhdG9taWNfcmVhZCgmaW5zdGFuY2UtPmZ3X291dHN0YW5kaW5nKSAmJgorCQkJCQkha2lsbF9hZGFwdGVyX2ZsYWcpIHsKKwkJaWYgKGluc3RhbmNlLT5kaXNhYmxlT25saW5lQ3RybFJlc2V0ID09IDApIHsKKworCQkJbWVnYXNhc19kb19vY3IoaW5zdGFuY2UpOworCisJCQkvKiB3YWl0IGZvciA1IHNlY3MgdG8gbGV0IEZXIGZpbmlzaCB0aGUgcGVuZGluZyBjbWRzICovCisJCQlmb3IgKGkgPSAwOyBpIDwgd2FpdF90aW1lOyBpKyspIHsKKwkJCQlpbnQgb3V0c3RhbmRpbmcgPQorCQkJCQlhdG9taWNfcmVhZCgmaW5zdGFuY2UtPmZ3X291dHN0YW5kaW5nKTsKKwkJCQlpZiAoIW91dHN0YW5kaW5nKQorCQkJCQlyZXR1cm4gU1VDQ0VTUzsKKwkJCQltc2xlZXAoMTAwMCk7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoYXRvbWljX3JlYWQoJmluc3RhbmNlLT5md19vdXRzdGFuZGluZykgfHwKKwkJCQkJKGtpbGxfYWRhcHRlcl9mbGFnID09IDIpKSB7CisJCXByaW50ayhLRVJOX05PVElDRSAibWVnYXJhaWRfc2FzOiBwZW5kaW5nIGNtZHMgYWZ0ZXIgcmVzZXRcbiIpOworCQkvKgorCQkqIFNlbmQgc2lnbmFsIHRvIEZXIHRvIHN0b3AgcHJvY2Vzc2luZyBhbnkgcGVuZGluZyBjbWRzLgorCQkqIFRoZSBjb250cm9sbGVyIHdpbGwgYmUgdGFrZW4gb2ZmbGluZSBieSB0aGUgT1Mgbm93LgorCQkqLworCQlpZiAoKGluc3RhbmNlLT5wZGV2LT5kZXZpY2UgPT0KKwkJCVBDSV9ERVZJQ0VfSURfTFNJX1NBUzAwNzNTS0lOTlkpIHx8CisJCQkoaW5zdGFuY2UtPnBkZXYtPmRldmljZSA9PQorCQkJUENJX0RFVklDRV9JRF9MU0lfU0FTMDA3MVNLSU5OWSkpIHsKKwkJCXdyaXRlbChNRklfU1RPUF9BRFAsCisJCQkJJmluc3RhbmNlLT5yZWdfc2V0LT5kb29yYmVsbCk7CisJCX0gZWxzZSB7CisJCQl3cml0ZWwoTUZJX1NUT1BfQURQLAorCQkJCSZpbnN0YW5jZS0+cmVnX3NldC0+aW5ib3VuZF9kb29yYmVsbCk7CisJCX0KKwkJbWVnYXNhc19kdW1wX3BlbmRpbmdfZnJhbWVzKGluc3RhbmNlKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmluc3RhbmNlLT5oYmFfbG9jaywgZmxhZ3MpOworCQlpbnN0YW5jZS0+YWRwcmVjb3ZlcnkJPSBNRUdBU0FTX0hXX0NSSVRJQ0FMX0VSUk9SOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbnN0YW5jZS0+aGJhX2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIEZBSUxFRDsKKwl9CisKKwlwcmludGsoS0VSTl9OT1RJQ0UgIm1lZ2FyYWlkX3Nhczogbm8gcGVuZGluZyBjbWRzIGFmdGVyIHJlc2V0XG4iKTsKKworCXJldHVybiBTVUNDRVNTOworfQorCisvKioKKyAqIG1lZ2FzYXNfZ2VuZXJpY19yZXNldCAtCUdlbmVyaWMgcmVzZXQgcm91dGluZQorICogQHNjbWQ6CQkJTWlkLWxheWVyIFNDU0kgY29tbWFuZAorICoKKyAqIFRoaXMgcm91dGluZSBpbXBsZW1lbnRzIGEgZ2VuZXJpYyByZXNldCBoYW5kbGVyIGZvciBkZXZpY2UsIGJ1cyBhbmQgaG9zdAorICogcmVzZXQgcmVxdWVzdHMuIERldmljZSwgYnVzIGFuZCBob3N0IHNwZWNpZmljIHJlc2V0IGhhbmRsZXJzIGNhbiB1c2UgdGhpcworICogZnVuY3Rpb24gYWZ0ZXIgdGhleSBkbyB0aGVpciBzcGVjaWZpYyB0YXNrcy4KKyAqLworc3RhdGljIGludCBtZWdhc2FzX2dlbmVyaWNfcmVzZXQoc3RydWN0IHNjc2lfY21uZCAqc2NtZCkKK3sKKwlpbnQgcmV0X3ZhbDsKKwlzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2U7CisKKwlpbnN0YW5jZSA9IChzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqKXNjbWQtPmRldmljZS0+aG9zdC0+aG9zdGRhdGE7CisKKwlzY21kX3ByaW50ayhLRVJOX05PVElDRSwgc2NtZCwgIm1lZ2FzYXM6IFJFU0VUIC0lbGQgY21kPSV4IHJldHJpZXM9JXhcbiIsCisJCSBzY21kLT5zZXJpYWxfbnVtYmVyLCBzY21kLT5jbW5kWzBdLCBzY21kLT5yZXRyaWVzKTsKKworCWlmIChpbnN0YW5jZS0+YWRwcmVjb3ZlcnkgPT0gTUVHQVNBU19IV19DUklUSUNBTF9FUlJPUikgeworCQlwcmludGsoS0VSTl9FUlIgIm1lZ2FzYXM6IGNhbm5vdCByZWNvdmVyIGZyb20gcHJldmlvdXMgcmVzZXQgIgorCQkgICAgICAgImZhaWx1cmVzXG4iKTsKKwkJcmV0dXJuIEZBSUxFRDsKKwl9CisKKwlyZXRfdmFsID0gbWVnYXNhc193YWl0X2Zvcl9vdXRzdGFuZGluZyhpbnN0YW5jZSk7CisJaWYgKHJldF92YWwgPT0gU1VDQ0VTUykKKwkJcHJpbnRrKEtFUk5fTk9USUNFICJtZWdhc2FzOiByZXNldCBzdWNjZXNzZnVsIFxuIik7CisJZWxzZQorCQlwcmludGsoS0VSTl9FUlIgIm1lZ2FzYXM6IGZhaWxlZCB0byBkbyByZXNldFxuIik7CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoqCisgKiBtZWdhc2FzX3Jlc2V0X3RpbWVyIC0gcXVpZXNjZSB0aGUgYWRhcHRlciBpZiByZXF1aXJlZAorICogQHNjbWQ6CQlzY3NpIGNtbmQKKyAqCisgKiBTZXRzIHRoZSBGVyBidXN5IGZsYWcgYW5kIHJlZHVjZXMgdGhlIGhvc3QtPmNhbl9xdWV1ZSBpZiB0aGUKKyAqIGNtZCBoYXMgbm90IGJlZW4gY29tcGxldGVkIHdpdGhpbiB0aGUgdGltZW91dCBwZXJpb2QuCisgKi8KK3N0YXRpYyBlbnVtCitibGtfZWhfdGltZXJfcmV0dXJuIG1lZ2FzYXNfcmVzZXRfdGltZXIoc3RydWN0IHNjc2lfY21uZCAqc2NtZCkKK3sKKwlzdHJ1Y3QgbWVnYXNhc19jbWQgKmNtZCA9IChzdHJ1Y3QgbWVnYXNhc19jbWQgKilzY21kLT5TQ3AucHRyOworCXN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgc2NtZC0+amlmZmllc19hdF9hbGxvYyArCisJCQkJKE1FR0FTQVNfREVGQVVMVF9DTURfVElNRU9VVCAqIDIpICogSFopKSB7CisJCXJldHVybiBCTEtfRUhfTk9UX0hBTkRMRUQ7CisJfQorCisJaW5zdGFuY2UgPSBjbWQtPmluc3RhbmNlOworCWlmICghKGluc3RhbmNlLT5mbGFnICYgTUVHQVNBU19GV19CVVNZKSkgeworCQkvKiBGVyBpcyBidXN5LCB0aHJvdHRsZSBJTyAqLworCQlzcGluX2xvY2tfaXJxc2F2ZShpbnN0YW5jZS0+aG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CisKKwkJaW5zdGFuY2UtPmhvc3QtPmNhbl9xdWV1ZSA9IDE2OworCQlpbnN0YW5jZS0+bGFzdF90aW1lID0gamlmZmllczsKKwkJaW5zdGFuY2UtPmZsYWcgfD0gTUVHQVNBU19GV19CVVNZOworCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoaW5zdGFuY2UtPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOworCX0KKwlyZXR1cm4gQkxLX0VIX1JFU0VUX1RJTUVSOworfQorCisvKioKKyAqIG1lZ2FzYXNfcmVzZXRfZGV2aWNlIC0JRGV2aWNlIHJlc2V0IGhhbmRsZXIgZW50cnkgcG9pbnQKKyAqLworc3RhdGljIGludCBtZWdhc2FzX3Jlc2V0X2RldmljZShzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kKQoreworCWludCByZXQ7CisKKwkvKgorCSAqIEZpcnN0IHdhaXQgZm9yIGFsbCBjb21tYW5kcyB0byBjb21wbGV0ZQorCSAqLworCXJldCA9IG1lZ2FzYXNfZ2VuZXJpY19yZXNldChzY21kKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogbWVnYXNhc19yZXNldF9idXNfaG9zdCAtCUJ1cyAmIGhvc3QgcmVzZXQgaGFuZGxlciBlbnRyeSBwb2ludAorICovCitzdGF0aWMgaW50IG1lZ2FzYXNfcmVzZXRfYnVzX2hvc3Qoc3RydWN0IHNjc2lfY21uZCAqc2NtZCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZTsKKwlpbnN0YW5jZSA9IChzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqKXNjbWQtPmRldmljZS0+aG9zdC0+aG9zdGRhdGE7CisKKwkvKgorCSAqIEZpcnN0IHdhaXQgZm9yIGFsbCBjb21tYW5kcyB0byBjb21wbGV0ZQorCSAqLworCWlmIChpbnN0YW5jZS0+cGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfTFNJX0ZVU0lPTikKKwkJcmV0ID0gbWVnYXNhc19yZXNldF9mdXNpb24oc2NtZC0+ZGV2aWNlLT5ob3N0KTsKKwllbHNlCisJCXJldCA9IG1lZ2FzYXNfZ2VuZXJpY19yZXNldChzY21kKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogbWVnYXNhc19iaW9zX3BhcmFtIC0gUmV0dXJucyBkaXNrIGdlb21ldHJ5IGZvciBhIGRpc2sKKyAqIEBzZGV2OiAJCWRldmljZSBoYW5kbGUKKyAqIEBiZGV2OgkJYmxvY2sgZGV2aWNlCisgKiBAY2FwYWNpdHk6CQlkcml2ZSBjYXBhY2l0eQorICogQGdlb206CQlnZW9tZXRyeSBwYXJhbWV0ZXJzCisgKi8KK3N0YXRpYyBpbnQKK21lZ2FzYXNfYmlvc19wYXJhbShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsCisJCSBzZWN0b3JfdCBjYXBhY2l0eSwgaW50IGdlb21bXSkKK3sKKwlpbnQgaGVhZHM7CisJaW50IHNlY3RvcnM7CisJc2VjdG9yX3QgY3lsaW5kZXJzOworCXVuc2lnbmVkIGxvbmcgdG1wOworCS8qIERlZmF1bHQgaGVhZHMgKDY0KSAmIHNlY3RvcnMgKDMyKSAqLworCWhlYWRzID0gNjQ7CisJc2VjdG9ycyA9IDMyOworCisJdG1wID0gaGVhZHMgKiBzZWN0b3JzOworCWN5bGluZGVycyA9IGNhcGFjaXR5OworCisJc2VjdG9yX2RpdihjeWxpbmRlcnMsIHRtcCk7CisKKwkvKgorCSAqIEhhbmRsZSBleHRlbmRlZCB0cmFuc2xhdGlvbiBzaXplIGZvciBsb2dpY2FsIGRyaXZlcyA+IDFHYgorCSAqLworCisJaWYgKGNhcGFjaXR5ID49IDB4MjAwMDAwKSB7CisJCWhlYWRzID0gMjU1OworCQlzZWN0b3JzID0gNjM7CisJCXRtcCA9IGhlYWRzKnNlY3RvcnM7CisJCWN5bGluZGVycyA9IGNhcGFjaXR5OworCQlzZWN0b3JfZGl2KGN5bGluZGVycywgdG1wKTsKKwl9CisKKwlnZW9tWzBdID0gaGVhZHM7CisJZ2VvbVsxXSA9IHNlY3RvcnM7CisJZ2VvbVsyXSA9IGN5bGluZGVyczsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtZWdhc2FzX2Flbl9wb2xsaW5nKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CisKKy8qKgorICogbWVnYXNhc19zZXJ2aWNlX2FlbiAtCVByb2Nlc3NlcyBhbiBldmVudCBub3RpZmljYXRpb24KKyAqIEBpbnN0YW5jZToJCQlBZGFwdGVyIHNvZnQgc3RhdGUKKyAqIEBjbWQ6CQkJQUVOIGNvbW1hbmQgY29tcGxldGVkIGJ5IHRoZSBJU1IKKyAqCisgKiBGb3IgQUVOLCBkcml2ZXIgc2VuZHMgYSBjb21tYW5kIGRvd24gdG8gRlcgdGhhdCBpcyBoZWxkIGJ5IHRoZSBGVyB0aWxsIGFuCisgKiBldmVudCBvY2N1cnMuIFdoZW4gYW4gZXZlbnQgb2YgaW50ZXJlc3Qgb2NjdXJzLCBGVyBjb21wbGV0ZXMgdGhlIGNvbW1hbmQKKyAqIHRoYXQgaXQgd2FzIHByZXZpb3VzbHkgaG9sZGluZy4KKyAqCisgKiBUaGlzIHJvdXRpbmVzIHNlbmRzIFNJR0lPIHNpZ25hbCB0byBwcm9jZXNzZXMgdGhhdCBoYXZlIHJlZ2lzdGVyZWQgd2l0aCB0aGUKKyAqIGRyaXZlciBmb3IgQUVOLgorICovCitzdGF0aWMgdm9pZAorbWVnYXNhc19zZXJ2aWNlX2FlbihzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UsIHN0cnVjdCBtZWdhc2FzX2NtZCAqY21kKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJLyoKKwkgKiBEb24ndCBzaWduYWwgYXBwIGlmIGl0IGlzIGp1c3QgYW4gYWJvcnRlZCBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgYWVuCisJICovCisJaWYgKCghY21kLT5hYm9ydF9hZW4pICYmIChpbnN0YW5jZS0+dW5sb2FkID09IDApKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwb2xsX2Flbl9sb2NrLCBmbGFncyk7CisJCW1lZ2FzYXNfcG9sbF93YWl0X2FlbiA9IDE7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvbGxfYWVuX2xvY2ssIGZsYWdzKTsKKwkJd2FrZV91cCgmbWVnYXNhc19wb2xsX3dhaXQpOworCQlraWxsX2Zhc3luYygmbWVnYXNhc19hc3luY19xdWV1ZSwgU0lHSU8sIFBPTExfSU4pOworCX0KKwllbHNlCisJCWNtZC0+YWJvcnRfYWVuID0gMDsKKworCWluc3RhbmNlLT5hZW5fY21kID0gTlVMTDsKKwltZWdhc2FzX3JldHVybl9jbWQoaW5zdGFuY2UsIGNtZCk7CisKKwlpZiAoKGluc3RhbmNlLT51bmxvYWQgPT0gMCkgJiYKKwkJKChpbnN0YW5jZS0+aXNzdWVwZW5kX2RvbmUgPT0gMSkpKSB7CisJCXN0cnVjdCBtZWdhc2FzX2Flbl9ldmVudCAqZXY7CisJCWV2ID0ga3phbGxvYyhzaXplb2YoKmV2KSwgR0ZQX0FUT01JQyk7CisJCWlmICghZXYpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAibWVnYXNhc19zZXJ2aWNlX2Flbjogb3V0IG9mIG1lbW9yeVxuIik7CisJCX0gZWxzZSB7CisJCQlldi0+aW5zdGFuY2UgPSBpbnN0YW5jZTsKKwkJCWluc3RhbmNlLT5ldiA9IGV2OworCQkJSU5JVF9XT1JLKCZldi0+aG90cGx1Z193b3JrLCBtZWdhc2FzX2Flbl9wb2xsaW5nKTsKKwkJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygKKwkJCQkoc3RydWN0IGRlbGF5ZWRfd29yayAqKSZldi0+aG90cGx1Z193b3JrLCAwKTsKKwkJfQorCX0KK30KKworLyoKKyAqIFNjc2kgaG9zdCB0ZW1wbGF0ZSBmb3IgbWVnYXJhaWRfc2FzIGRyaXZlcgorICovCitzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBtZWdhc2FzX3RlbXBsYXRlID0geworCisJLm1vZHVsZSA9IFRISVNfTU9EVUxFLAorCS5uYW1lID0gIkxTSSBTQVMgYmFzZWQgTWVnYVJBSUQgZHJpdmVyIiwKKwkucHJvY19uYW1lID0gIm1lZ2FyYWlkX3NhcyIsCisJLnNsYXZlX2NvbmZpZ3VyZSA9IG1lZ2FzYXNfc2xhdmVfY29uZmlndXJlLAorCS5zbGF2ZV9hbGxvYyA9IG1lZ2FzYXNfc2xhdmVfYWxsb2MsCisJLnF1ZXVlY29tbWFuZCA9IG1lZ2FzYXNfcXVldWVfY29tbWFuZCwKKwkuZWhfZGV2aWNlX3Jlc2V0X2hhbmRsZXIgPSBtZWdhc2FzX3Jlc2V0X2RldmljZSwKKwkuZWhfYnVzX3Jlc2V0X2hhbmRsZXIgPSBtZWdhc2FzX3Jlc2V0X2J1c19ob3N0LAorCS5laF9ob3N0X3Jlc2V0X2hhbmRsZXIgPSBtZWdhc2FzX3Jlc2V0X2J1c19ob3N0LAorCS5laF90aW1lZF9vdXQgPSBtZWdhc2FzX3Jlc2V0X3RpbWVyLAorCS5iaW9zX3BhcmFtID0gbWVnYXNhc19iaW9zX3BhcmFtLAorCS51c2VfY2x1c3RlcmluZyA9IEVOQUJMRV9DTFVTVEVSSU5HLAorfTsKKworLyoqCisgKiBtZWdhc2FzX2NvbXBsZXRlX2ludF9jbWQgLQlDb21wbGV0ZXMgYW4gaW50ZXJuYWwgY29tbWFuZAorICogQGluc3RhbmNlOgkJCUFkYXB0ZXIgc29mdCBzdGF0ZQorICogQGNtZDoJCQlDb21tYW5kIHRvIGJlIGNvbXBsZXRlZAorICoKKyAqIFRoZSBtZWdhc2FzX2lzc3VlX2Jsb2NrZWRfY21kKCkgZnVuY3Rpb24gd2FpdHMgZm9yIGEgY29tbWFuZCB0byBjb21wbGV0ZQorICogYWZ0ZXIgaXQgaXNzdWVzIGEgY29tbWFuZC4gVGhpcyBmdW5jdGlvbiB3YWtlcyB1cCB0aGF0IHdhaXRpbmcgcm91dGluZSBieQorICogY2FsbGluZyB3YWtlX3VwKCkgb24gdGhlIHdhaXQgcXVldWUuCisgKi8KK3N0YXRpYyB2b2lkCittZWdhc2FzX2NvbXBsZXRlX2ludF9jbWQoc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlLAorCQkJIHN0cnVjdCBtZWdhc2FzX2NtZCAqY21kKQoreworCWNtZC0+Y21kX3N0YXR1cyA9IGNtZC0+ZnJhbWUtPmlvLmNtZF9zdGF0dXM7CisKKwlpZiAoY21kLT5jbWRfc3RhdHVzID09IEVOT0RBVEEpIHsKKwkJY21kLT5jbWRfc3RhdHVzID0gMDsKKwl9CisJd2FrZV91cCgmaW5zdGFuY2UtPmludF9jbWRfd2FpdF9xKTsKK30KKworLyoqCisgKiBtZWdhc2FzX2NvbXBsZXRlX2Fib3J0IC0JQ29tcGxldGVzIGFib3J0aW5nIGEgY29tbWFuZAorICogQGluc3RhbmNlOgkJCUFkYXB0ZXIgc29mdCBzdGF0ZQorICogQGNtZDoJCQlDbWQgdGhhdCB3YXMgaXNzdWVkIHRvIGFib3J0IGFub3RoZXIgY21kCisgKgorICogVGhlIG1lZ2FzYXNfaXNzdWVfYmxvY2tlZF9hYm9ydF9jbWQoKSBmdW5jdGlvbiB3YWl0cyBvbiBhYm9ydF9jbWRfd2FpdF9xCisgKiBhZnRlciBpdCBpc3N1ZXMgYW4gYWJvcnQgb24gYSBwcmV2aW91c2x5IGlzc3VlZCBjb21tYW5kLiBUaGlzIGZ1bmN0aW9uCisgKiB3YWtlcyB1cCBhbGwgZnVuY3Rpb25zIHdhaXRpbmcgb24gdGhlIHNhbWUgd2FpdCBxdWV1ZS4KKyAqLworc3RhdGljIHZvaWQKK21lZ2FzYXNfY29tcGxldGVfYWJvcnQoc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlLAorCQkgICAgICAgc3RydWN0IG1lZ2FzYXNfY21kICpjbWQpCit7CisJaWYgKGNtZC0+c3luY19jbWQpIHsKKwkJY21kLT5zeW5jX2NtZCA9IDA7CisJCWNtZC0+Y21kX3N0YXR1cyA9IDA7CisJCXdha2VfdXAoJmluc3RhbmNlLT5hYm9ydF9jbWRfd2FpdF9xKTsKKwl9CisKKwlyZXR1cm47Cit9CisKKy8qKgorICogbWVnYXNhc19jb21wbGV0ZV9jbWQgLQlDb21wbGV0ZXMgYSBjb21tYW5kCisgKiBAaW5zdGFuY2U6CQkJQWRhcHRlciBzb2Z0IHN0YXRlCisgKiBAY21kOgkJCUNvbW1hbmQgdG8gYmUgY29tcGxldGVkCisgKiBAYWx0X3N0YXR1czoJCQlJZiBub24temVybywgdXNlIHRoaXMgdmFsdWUgYXMgc3RhdHVzIHRvCisgKiAJCQkJU0NTSSBtaWQtbGF5ZXIgaW5zdGVhZCBvZiB0aGUgdmFsdWUgcmV0dXJuZWQKKyAqIAkJCQlieSB0aGUgRlcuIFRoaXMgc2hvdWxkIGJlIHVzZWQgaWYgY2FsbGVyIHdhbnRzCisgKiAJCQkJYW4gYWx0ZXJuYXRlIHN0YXR1cyAoYXMgaW4gdGhlIGNhc2Ugb2YgYWJvcnRlZAorICogCQkJCWNvbW1hbmRzKQorICovCit2b2lkCittZWdhc2FzX2NvbXBsZXRlX2NtZChzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UsIHN0cnVjdCBtZWdhc2FzX2NtZCAqY21kLAorCQkgICAgIHU4IGFsdF9zdGF0dXMpCit7CisJaW50IGV4Y2VwdGlvbiA9IDA7CisJc3RydWN0IG1lZ2FzYXNfaGVhZGVyICpoZHIgPSAmY21kLT5mcmFtZS0+aGRyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGZ1c2lvbl9jb250ZXh0ICpmdXNpb24gPSBpbnN0YW5jZS0+Y3RybF9jb250ZXh0OworCisJLyogZmxhZyBmb3IgdGhlIHJldHJ5IHJlc2V0ICovCisJY21kLT5yZXRyeV9mb3JfZndfcmVzZXQgPSAwOworCisJaWYgKGNtZC0+c2NtZCkKKwkJY21kLT5zY21kLT5TQ3AucHRyID0gTlVMTDsKKworCXN3aXRjaCAoaGRyLT5jbWQpIHsKKworCWNhc2UgTUZJX0NNRF9QRF9TQ1NJX0lPOgorCWNhc2UgTUZJX0NNRF9MRF9TQ1NJX0lPOgorCisJCS8qCisJCSAqIE1GSV9DTURfUERfU0NTSV9JTyBhbmQgTUZJX0NNRF9MRF9TQ1NJX0lPIGNvdWxkIGhhdmUgYmVlbgorCQkgKiBpc3N1ZWQgZWl0aGVyIHRocm91Z2ggYW4gSU8gcGF0aCBvciBhbiBJT0NUTCBwYXRoLiBJZiBpdAorCQkgKiB3YXMgdmlhIElPQ1RMLCB3ZSB3aWxsIHNlbmQgaXQgdG8gaW50ZXJuYWwgY29tcGxldGlvbi4KKwkJICovCisJCWlmIChjbWQtPnN5bmNfY21kKSB7CisJCQljbWQtPnN5bmNfY21kID0gMDsKKwkJCW1lZ2FzYXNfY29tcGxldGVfaW50X2NtZChpbnN0YW5jZSwgY21kKTsKKwkJCWJyZWFrOworCQl9CisKKwljYXNlIE1GSV9DTURfTERfUkVBRDoKKwljYXNlIE1GSV9DTURfTERfV1JJVEU6CisKKwkJaWYgKGFsdF9zdGF0dXMpIHsKKwkJCWNtZC0+c2NtZC0+cmVzdWx0ID0gYWx0X3N0YXR1cyA8PCAxNjsKKwkJCWV4Y2VwdGlvbiA9IDE7CisJCX0KKworCQlpZiAoZXhjZXB0aW9uKSB7CisKKwkJCWF0b21pY19kZWMoJmluc3RhbmNlLT5md19vdXRzdGFuZGluZyk7CisKKwkJCXNjc2lfZG1hX3VubWFwKGNtZC0+c2NtZCk7CisJCQljbWQtPnNjbWQtPnNjc2lfZG9uZShjbWQtPnNjbWQpOworCQkJbWVnYXNhc19yZXR1cm5fY21kKGluc3RhbmNlLCBjbWQpOworCisJCQlicmVhazsKKwkJfQorCisJCXN3aXRjaCAoaGRyLT5jbWRfc3RhdHVzKSB7CisKKwkJY2FzZSBNRklfU1RBVF9PSzoKKwkJCWNtZC0+c2NtZC0+cmVzdWx0ID0gRElEX09LIDw8IDE2OworCQkJYnJlYWs7CisKKwkJY2FzZSBNRklfU1RBVF9TQ1NJX0lPX0ZBSUxFRDoKKwkJY2FzZSBNRklfU1RBVF9MRF9JTklUX0lOX1BST0dSRVNTOgorCQkJY21kLT5zY21kLT5yZXN1bHQgPQorCQkJICAgIChESURfRVJST1IgPDwgMTYpIHwgaGRyLT5zY3NpX3N0YXR1czsKKwkJCWJyZWFrOworCisJCWNhc2UgTUZJX1NUQVRfU0NTSV9ET05FX1dJVEhfRVJST1I6CisKKwkJCWNtZC0+c2NtZC0+cmVzdWx0ID0gKERJRF9PSyA8PCAxNikgfCBoZHItPnNjc2lfc3RhdHVzOworCisJCQlpZiAoaGRyLT5zY3NpX3N0YXR1cyA9PSBTQU1fU1RBVF9DSEVDS19DT05ESVRJT04pIHsKKwkJCQltZW1zZXQoY21kLT5zY21kLT5zZW5zZV9idWZmZXIsIDAsCisJCQkJICAgICAgIFNDU0lfU0VOU0VfQlVGRkVSU0laRSk7CisJCQkJbWVtY3B5KGNtZC0+c2NtZC0+c2Vuc2VfYnVmZmVyLCBjbWQtPnNlbnNlLAorCQkJCSAgICAgICBoZHItPnNlbnNlX2xlbik7CisKKwkJCQljbWQtPnNjbWQtPnJlc3VsdCB8PSBEUklWRVJfU0VOU0UgPDwgMjQ7CisJCQl9CisKKwkJCWJyZWFrOworCisJCWNhc2UgTUZJX1NUQVRfTERfT0ZGTElORToKKwkJY2FzZSBNRklfU1RBVF9ERVZJQ0VfTk9UX0ZPVU5EOgorCQkJY21kLT5zY21kLT5yZXN1bHQgPSBESURfQkFEX1RBUkdFVCA8PCAxNjsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlwcmludGsoS0VSTl9ERUJVRyAibWVnYXNhczogTUZJIEZXIHN0YXR1cyAlI3hcbiIsCisJCQkgICAgICAgaGRyLT5jbWRfc3RhdHVzKTsKKwkJCWNtZC0+c2NtZC0+cmVzdWx0ID0gRElEX0VSUk9SIDw8IDE2OworCQkJYnJlYWs7CisJCX0KKworCQlhdG9taWNfZGVjKCZpbnN0YW5jZS0+Zndfb3V0c3RhbmRpbmcpOworCisJCXNjc2lfZG1hX3VubWFwKGNtZC0+c2NtZCk7CisJCWNtZC0+c2NtZC0+c2NzaV9kb25lKGNtZC0+c2NtZCk7CisJCW1lZ2FzYXNfcmV0dXJuX2NtZChpbnN0YW5jZSwgY21kKTsKKworCQlicmVhazsKKworCWNhc2UgTUZJX0NNRF9TTVA6CisJY2FzZSBNRklfQ01EX1NUUDoKKwljYXNlIE1GSV9DTURfRENNRDoKKwkJLyogQ2hlY2sgZm9yIExEIG1hcCB1cGRhdGUgKi8KKwkJaWYgKChjbWQtPmZyYW1lLT5kY21kLm9wY29kZSA9PSBNUl9EQ01EX0xEX01BUF9HRVRfSU5GTykgJiYKKwkJICAgIChjbWQtPmZyYW1lLT5kY21kLm1ib3guYlsxXSA9PSAxKSkgeworCQkJc3Bpbl9sb2NrX2lycXNhdmUoaW5zdGFuY2UtPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOworCQkJaWYgKGNtZC0+ZnJhbWUtPmhkci5jbWRfc3RhdHVzICE9IDApIHsKKwkJCQlpZiAoY21kLT5mcmFtZS0+aGRyLmNtZF9zdGF0dXMgIT0KKwkJCQkgICAgTUZJX1NUQVRfTk9UX0ZPVU5EKQorCQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJtZWdhc2FzOiBtYXAgc3luYyIKKwkJCQkJICAgICAgICJmYWlsZWQsIHN0YXR1cyA9IDB4JXguXG4iLAorCQkJCQkgICAgICAgY21kLT5mcmFtZS0+aGRyLmNtZF9zdGF0dXMpOworCQkJCWVsc2UgeworCQkJCQltZWdhc2FzX3JldHVybl9jbWQoaW5zdGFuY2UsIGNtZCk7CisJCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoCisJCQkJCQlpbnN0YW5jZS0+aG9zdC0+aG9zdF9sb2NrLAorCQkJCQkJZmxhZ3MpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9IGVsc2UKKwkJCQlpbnN0YW5jZS0+bWFwX2lkKys7CisJCQltZWdhc2FzX3JldHVybl9jbWQoaW5zdGFuY2UsIGNtZCk7CisJCQlpZiAoTVJfVmFsaWRhdGVNYXBJbmZvKAorCQkJCSAgICBmdXNpb24tPmxkX21hcFsoaW5zdGFuY2UtPm1hcF9pZCAmIDEpXSwKKwkJCQkgICAgZnVzaW9uLT5sb2FkX2JhbGFuY2VfaW5mbykpCisJCQkJZnVzaW9uLT5mYXN0X3BhdGhfaW8gPSAxOworCQkJZWxzZQorCQkJCWZ1c2lvbi0+ZmFzdF9wYXRoX2lvID0gMDsKKwkJCW1lZ2FzYXNfc3luY19tYXBfaW5mbyhpbnN0YW5jZSk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGluc3RhbmNlLT5ob3N0LT5ob3N0X2xvY2ssCisJCQkJCSAgICAgICBmbGFncyk7CisJCQlicmVhazsKKwkJfQorCQlpZiAoY21kLT5mcmFtZS0+ZGNtZC5vcGNvZGUgPT0gTVJfRENNRF9DVFJMX0VWRU5UX0dFVF9JTkZPIHx8CisJCQljbWQtPmZyYW1lLT5kY21kLm9wY29kZSA9PSBNUl9EQ01EX0NUUkxfRVZFTlRfR0VUKSB7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcG9sbF9hZW5fbG9jaywgZmxhZ3MpOworCQkJbWVnYXNhc19wb2xsX3dhaXRfYWVuID0gMDsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvbGxfYWVuX2xvY2ssIGZsYWdzKTsKKwkJfQorCisJCS8qCisJCSAqIFNlZSBpZiBnb3QgYW4gZXZlbnQgbm90aWZpY2F0aW9uCisJCSAqLworCQlpZiAoY21kLT5mcmFtZS0+ZGNtZC5vcGNvZGUgPT0gTVJfRENNRF9DVFJMX0VWRU5UX1dBSVQpCisJCQltZWdhc2FzX3NlcnZpY2VfYWVuKGluc3RhbmNlLCBjbWQpOworCQllbHNlCisJCQltZWdhc2FzX2NvbXBsZXRlX2ludF9jbWQoaW5zdGFuY2UsIGNtZCk7CisKKwkJYnJlYWs7CisKKwljYXNlIE1GSV9DTURfQUJPUlQ6CisJCS8qCisJCSAqIENtZCBpc3N1ZWQgdG8gYWJvcnQgYW5vdGhlciBjbWQgcmV0dXJuZWQKKwkJICovCisJCW1lZ2FzYXNfY29tcGxldGVfYWJvcnQoaW5zdGFuY2UsIGNtZCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcHJpbnRrKCJtZWdhc2FzOiBVbmtub3duIGNvbW1hbmQgY29tcGxldGVkISBbMHglWF1cbiIsCisJCSAgICAgICBoZHItPmNtZCk7CisJCWJyZWFrOworCX0KK30KKworLyoqCisgKiBtZWdhc2FzX2lzc3VlX3BlbmRpbmdfY21kc19hZ2FpbiAtCWlzc3VlIGFsbCBwZW5kaW5nIGNtZHMKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCWluIEZXIGFnYWluIGJlY2F1c2Ugb2YgdGhlIGZ3IHJlc2V0CisgKiBAaW5zdGFuY2U6CQkJCUFkYXB0ZXIgc29mdCBzdGF0ZQorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK21lZ2FzYXNfaXNzdWVfcGVuZGluZ19jbWRzX2FnYWluKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSkKK3sKKwlzdHJ1Y3QgbWVnYXNhc19jbWQgKmNtZDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGNsaXN0X2xvY2FsOworCXVuaW9uIG1lZ2FzYXNfZXZ0X2NsYXNzX2xvY2FsZSBjbGFzc19sb2NhbGU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgc2VxX251bTsKKworCUlOSVRfTElTVF9IRUFEKCZjbGlzdF9sb2NhbCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmluc3RhbmNlLT5oYmFfbG9jaywgZmxhZ3MpOworCWxpc3Rfc3BsaWNlX2luaXQoJmluc3RhbmNlLT5pbnRlcm5hbF9yZXNldF9wZW5kaW5nX3EsICZjbGlzdF9sb2NhbCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5zdGFuY2UtPmhiYV9sb2NrLCBmbGFncyk7CisKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmNsaXN0X2xvY2FsKSkgeworCQljbWQJPSBsaXN0X2VudHJ5KCgmY2xpc3RfbG9jYWwpLT5uZXh0LAorCQkJCQlzdHJ1Y3QgbWVnYXNhc19jbWQsIGxpc3QpOworCQlsaXN0X2RlbF9pbml0KCZjbWQtPmxpc3QpOworCisJCWlmIChjbWQtPnN5bmNfY21kIHx8IGNtZC0+c2NtZCkgeworCQkJcHJpbnRrKEtFUk5fTk9USUNFICJtZWdhcmFpZF9zYXM6IGNvbW1hbmQgJXAsICVwOiVkIgorCQkJCSJkZXRlY3RlZCB0byBiZSBwZW5kaW5nIHdoaWxlIEhCQSByZXNldC5cbiIsCisJCQkJCWNtZCwgY21kLT5zY21kLCBjbWQtPnN5bmNfY21kKTsKKworCQkJY21kLT5yZXRyeV9mb3JfZndfcmVzZXQrKzsKKworCQkJaWYgKGNtZC0+cmV0cnlfZm9yX2Z3X3Jlc2V0ID09IDMpIHsKKwkJCQlwcmludGsoS0VSTl9OT1RJQ0UgIm1lZ2FyYWlkX3NhczogY21kICVwLCAlcDolZCIKKwkJCQkJIndhcyB0cmllZCBtdWx0aXBsZSB0aW1lcyBkdXJpbmcgcmVzZXQuIgorCQkJCQkiU2h1dHRpbmcgZG93biB0aGUgSEJBXG4iLAorCQkJCQljbWQsIGNtZC0+c2NtZCwgY21kLT5zeW5jX2NtZCk7CisJCQkJbWVnYXJhaWRfc2FzX2tpbGxfaGJhKGluc3RhbmNlKTsKKworCQkJCWluc3RhbmNlLT5hZHByZWNvdmVyeSA9CisJCQkJCQlNRUdBU0FTX0hXX0NSSVRJQ0FMX0VSUk9SOworCQkJCXJldHVybjsKKwkJCX0KKwkJfQorCisJCWlmIChjbWQtPnN5bmNfY21kID09IDEpIHsKKwkJCWlmIChjbWQtPnNjbWQpIHsKKwkJCQlwcmludGsoS0VSTl9OT1RJQ0UgIm1lZ2FyYWlkX3NhczogdW5leHBlY3RlZCIKKwkJCQkJImNtZCBhdHRhY2hlZCB0byBpbnRlcm5hbCBjb21tYW5kIVxuIik7CisJCQl9CisJCQlwcmludGsoS0VSTl9OT1RJQ0UgIm1lZ2FzYXM6ICVwIHN5bmNocm9ub3VzIGNtZCIKKwkJCQkJCSJvbiB0aGUgaW50ZXJuYWwgcmVzZXQgcXVldWUsIgorCQkJCQkJImlzc3VlIGl0IGFnYWluLlxuIiwgY21kKTsKKwkJCWNtZC0+Y21kX3N0YXR1cyA9IEVOT0RBVEE7CisJCQlpbnN0YW5jZS0+aW5zdGFuY2V0LT5maXJlX2NtZChpbnN0YW5jZSwKKwkJCQkJCQljbWQtPmZyYW1lX3BoeXNfYWRkciAsCisJCQkJCQkJMCwgaW5zdGFuY2UtPnJlZ19zZXQpOworCQl9IGVsc2UgaWYgKGNtZC0+c2NtZCkgeworCQkJcHJpbnRrKEtFUk5fTk9USUNFICJtZWdhc2FzOiAlcCBzY3NpIGNtZCBbJTAyeF0sJSNseCIKKwkJCSJkZXRlY3RlZCBvbiB0aGUgaW50ZXJuYWwgcXVldWUsIGlzc3VlIGFnYWluLlxuIiwKKwkJCWNtZCwgY21kLT5zY21kLT5jbW5kWzBdLCBjbWQtPnNjbWQtPnNlcmlhbF9udW1iZXIpOworCisJCQlhdG9taWNfaW5jKCZpbnN0YW5jZS0+Zndfb3V0c3RhbmRpbmcpOworCQkJaW5zdGFuY2UtPmluc3RhbmNldC0+ZmlyZV9jbWQoaW5zdGFuY2UsCisJCQkJCWNtZC0+ZnJhbWVfcGh5c19hZGRyLAorCQkJCQljbWQtPmZyYW1lX2NvdW50LTEsIGluc3RhbmNlLT5yZWdfc2V0KTsKKwkJfSBlbHNlIHsKKwkJCXByaW50ayhLRVJOX05PVElDRSAibWVnYXNhczogJXAgdW5leHBlY3RlZCBjbWQgb24gdGhlIgorCQkJCSJpbnRlcm5hbCByZXNldCBkZWZlciBsaXN0IHdoaWxlIHJlLWlzc3VlISFcbiIsCisJCQkJY21kKTsKKwkJfQorCX0KKworCWlmIChpbnN0YW5jZS0+YWVuX2NtZCkgeworCQlwcmludGsoS0VSTl9OT1RJQ0UgIm1lZ2FyYWlkX3NhczogYWVuX2NtZCBpbiBkZWYgcHJvY2Vzc1xuIik7CisJCW1lZ2FzYXNfcmV0dXJuX2NtZChpbnN0YW5jZSwgaW5zdGFuY2UtPmFlbl9jbWQpOworCisJCWluc3RhbmNlLT5hZW5fY21kCT0gTlVMTDsKKwl9CisKKwkvKgorCSogSW5pdGlhdGUgQUVOIChBc3luY2hyb25vdXMgRXZlbnQgTm90aWZpY2F0aW9uKQorCSovCisJc2VxX251bSA9IGluc3RhbmNlLT5sYXN0X3NlcV9udW07CisJY2xhc3NfbG9jYWxlLm1lbWJlcnMucmVzZXJ2ZWQgPSAwOworCWNsYXNzX2xvY2FsZS5tZW1iZXJzLmxvY2FsZSA9IE1SX0VWVF9MT0NBTEVfQUxMOworCWNsYXNzX2xvY2FsZS5tZW1iZXJzLmNsYXNzID0gTVJfRVZUX0NMQVNTX0RFQlVHOworCisJbWVnYXNhc19yZWdpc3Rlcl9hZW4oaW5zdGFuY2UsIHNlcV9udW0sIGNsYXNzX2xvY2FsZS53b3JkKTsKK30KKworLyoqCisgKiBNb3ZlIHRoZSBpbnRlcm5hbCByZXNldCBwZW5kaW5nIGNvbW1hbmRzIHRvIGEgZGVmZXJyZWQgcXVldWUuCisgKgorICogV2UgbW92ZSB0aGUgY29tbWFuZHMgcGVuZGluZyBhdCBpbnRlcm5hbCByZXNldCB0aW1lIHRvIGEKKyAqIHBlbmRpbmcgcXVldWUuIFRoaXMgcXVldWUgd291bGQgYmUgZmx1c2hlZCBhZnRlciBzdWNjZXNzZnVsCisgKiBjb21wbGV0aW9uIG9mIHRoZSBpbnRlcm5hbCByZXNldCBzZXF1ZW5jZS4gaWYgdGhlIGludGVybmFsIHJlc2V0CisgKiBkaWQgbm90IGNvbXBsZXRlIGluIHRpbWUsIHRoZSBrZXJuZWwgcmVzZXQgaGFuZGxlciB3b3VsZCBmbHVzaAorICogdGhlc2UgY29tbWFuZHMuCisgKiovCitzdGF0aWMgdm9pZAorbWVnYXNhc19pbnRlcm5hbF9yZXNldF9kZWZlcl9jbWRzKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSkKK3sKKwlzdHJ1Y3QgbWVnYXNhc19jbWQgKmNtZDsKKwlpbnQgaTsKKwl1MzIgbWF4X2NtZCA9IGluc3RhbmNlLT5tYXhfZndfY21kczsKKwl1MzIgZGVmZXJfaW5kZXg7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRlZmVyX2luZGV4ICAgICA9IDA7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmluc3RhbmNlLT5jbWRfcG9vbF9sb2NrLCBmbGFncyk7CisJZm9yIChpID0gMDsgaSA8IG1heF9jbWQ7IGkrKykgeworCQljbWQgPSBpbnN0YW5jZS0+Y21kX2xpc3RbaV07CisJCWlmIChjbWQtPnN5bmNfY21kID09IDEgfHwgY21kLT5zY21kKSB7CisJCQlwcmludGsoS0VSTl9OT1RJQ0UgIm1lZ2FzYXM6IG1vdmluZyBjbWRbJWRdOiVwOiVkOiVwIgorCQkJCQkib24gdGhlIGRlZmVyIHF1ZXVlIGFzIGludGVybmFsXG4iLAorCQkJCWRlZmVyX2luZGV4LCBjbWQsIGNtZC0+c3luY19jbWQsIGNtZC0+c2NtZCk7CisKKwkJCWlmICghbGlzdF9lbXB0eSgmY21kLT5saXN0KSkgeworCQkJCXByaW50ayhLRVJOX05PVElDRSAibWVnYXJhaWRfc2FzOiBFUlJPUiB3aGlsZSIKKwkJCQkJIiBtb3ZpbmcgdGhpcyBjbWQ6JXAsICVkICVwLCBpdCB3YXMiCisJCQkJCSJkaXNjb3ZlcmVkIG9uIHNvbWUgbGlzdD9cbiIsCisJCQkJCWNtZCwgY21kLT5zeW5jX2NtZCwgY21kLT5zY21kKTsKKworCQkJCWxpc3RfZGVsX2luaXQoJmNtZC0+bGlzdCk7CisJCQl9CisJCQlkZWZlcl9pbmRleCsrOworCQkJbGlzdF9hZGRfdGFpbCgmY21kLT5saXN0LAorCQkJCSZpbnN0YW5jZS0+aW50ZXJuYWxfcmVzZXRfcGVuZGluZ19xKTsKKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbnN0YW5jZS0+Y21kX3Bvb2xfbG9jaywgZmxhZ3MpOworfQorCisKK3N0YXRpYyB2b2lkCitwcm9jZXNzX2Z3X3N0YXRlX2NoYW5nZV93cShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlLCB3b3JrX2luaXQpOworCXUzMiB3YWl0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoaW5zdGFuY2UtPmFkcHJlY292ZXJ5ICE9IE1FR0FTQVNfQURQUkVTRVRfU01fSU5GQVVMVCkgeworCQlwcmludGsoS0VSTl9OT1RJQ0UgIm1lZ2FyYWlkX3NhczogZXJyb3IsIHJlY292ZXJ5IHN0ICV4IFxuIiwKKwkJCQlpbnN0YW5jZS0+YWRwcmVjb3ZlcnkpOworCQlyZXR1cm4gOworCX0KKworCWlmIChpbnN0YW5jZS0+YWRwcmVjb3ZlcnkgPT0gTUVHQVNBU19BRFBSRVNFVF9TTV9JTkZBVUxUKSB7CisJCXByaW50ayhLRVJOX05PVElDRSAibWVnYXJhaWRfc2FzOiBGVyBkZXRlY3RlZCB0byBiZSBpbiBmYXVsdCIKKwkJCQkJInN0YXRlLCByZXN0YXJ0aW5nIGl0Li4uXG4iKTsKKworCQlpbnN0YW5jZS0+aW5zdGFuY2V0LT5kaXNhYmxlX2ludHIoaW5zdGFuY2UtPnJlZ19zZXQpOworCQlhdG9taWNfc2V0KCZpbnN0YW5jZS0+Zndfb3V0c3RhbmRpbmcsIDApOworCisJCWF0b21pY19zZXQoJmluc3RhbmNlLT5md19yZXNldF9ub19wY2lfYWNjZXNzLCAxKTsKKwkJaW5zdGFuY2UtPmluc3RhbmNldC0+YWRwX3Jlc2V0KGluc3RhbmNlLCBpbnN0YW5jZS0+cmVnX3NldCk7CisJCWF0b21pY19zZXQoJmluc3RhbmNlLT5md19yZXNldF9ub19wY2lfYWNjZXNzLCAwICk7CisKKwkJcHJpbnRrKEtFUk5fTk9USUNFICJtZWdhcmFpZF9zYXM6IEZXIHJlc3RhcnRlZCBzdWNjZXNzZnVsbHksIgorCQkJCQkiaW5pdGlhdGluZyBuZXh0IHN0YWdlLi4uXG4iKTsKKworCQlwcmludGsoS0VSTl9OT1RJQ0UgIm1lZ2FyYWlkX3NhczogSEJBIHJlY292ZXJ5IHN0YXRlIG1hY2hpbmUsIgorCQkJCQkic3RhdGUgMiBzdGFydGluZy4uLlxuIik7CisKKwkJLyp3YWl0dGluZyBmb3IgYWJvdXQgMjAgc2Vjb25kIGJlZm9yZSBzdGFydCB0aGUgc2Vjb25kIGluaXQqLworCQlmb3IgKHdhaXQgPSAwOyB3YWl0IDwgMzA7IHdhaXQrKykgeworCQkJbXNsZWVwKDEwMDApOworCQl9CisKKwkJaWYgKG1lZ2FzYXNfdHJhbnNpdGlvbl90b19yZWFkeShpbnN0YW5jZSkpIHsKKwkJCXByaW50ayhLRVJOX05PVElDRSAibWVnYXJhaWRfc2FzOmFkYXB0ZXIgbm90IHJlYWR5XG4iKTsKKworCQkJbWVnYXJhaWRfc2FzX2tpbGxfaGJhKGluc3RhbmNlKTsKKwkJCWluc3RhbmNlLT5hZHByZWNvdmVyeQk9IE1FR0FTQVNfSFdfQ1JJVElDQUxfRVJST1I7CisJCQlyZXR1cm4gOworCQl9CisKKwkJaWYgKChpbnN0YW5jZS0+cGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfTFNJX1NBUzEwNjRSKSB8fAorCQkJKGluc3RhbmNlLT5wZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9ERUxMX1BFUkM1KSB8fAorCQkJKGluc3RhbmNlLT5wZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9MU0lfVkVSREVfWkNSKQorCQkJKSB7CisJCQkqaW5zdGFuY2UtPmNvbnN1bWVyID0gKmluc3RhbmNlLT5wcm9kdWNlcjsKKwkJfSBlbHNlIHsKKwkJCSppbnN0YW5jZS0+Y29uc3VtZXIgPSAwOworCQkJKmluc3RhbmNlLT5wcm9kdWNlciA9IDA7CisJCX0KKworCQltZWdhc2FzX2lzc3VlX2luaXRfbWZpKGluc3RhbmNlKTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW5zdGFuY2UtPmhiYV9sb2NrLCBmbGFncyk7CisJCWluc3RhbmNlLT5hZHByZWNvdmVyeQk9IE1FR0FTQVNfSEJBX09QRVJBVElPTkFMOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbnN0YW5jZS0+aGJhX2xvY2ssIGZsYWdzKTsKKwkJaW5zdGFuY2UtPmluc3RhbmNldC0+ZW5hYmxlX2ludHIoaW5zdGFuY2UtPnJlZ19zZXQpOworCisJCW1lZ2FzYXNfaXNzdWVfcGVuZGluZ19jbWRzX2FnYWluKGluc3RhbmNlKTsKKwkJaW5zdGFuY2UtPmlzc3VlcGVuZF9kb25lID0gMTsKKwl9CisJcmV0dXJuIDsKK30KKworLyoqCisgKiBtZWdhc2FzX2RlcGxldGVfcmVwbHlfcXVldWUgLQlQcm9jZXNzZXMgYWxsIGNvbXBsZXRlZCBjb21tYW5kcworICogQGluc3RhbmNlOgkJCQlBZGFwdGVyIHNvZnQgc3RhdGUKKyAqIEBhbHRfc3RhdHVzOgkJCQlBbHRlcm5hdGUgc3RhdHVzIHRvIGJlIHJldHVybmVkIHRvCisgKiAJCQkJCVNDU0kgbWlkLWxheWVyIGluc3RlYWQgb2YgdGhlIHN0YXR1cworICogCQkJCQlyZXR1cm5lZCBieSB0aGUgRlcKKyAqIE5vdGU6IHRoaXMgbXVzdCBiZSBjYWxsZWQgd2l0aCBoYmEgbG9jayBoZWxkCisgKi8KK3N0YXRpYyBpbnQKK21lZ2FzYXNfZGVwbGV0ZV9yZXBseV9xdWV1ZShzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UsCisJCQkJCXU4IGFsdF9zdGF0dXMpCit7CisJdTMyIG1maVN0YXR1czsKKwl1MzIgZndfc3RhdGU7CisKKwlpZiAoKG1maVN0YXR1cyA9IGluc3RhbmNlLT5pbnN0YW5jZXQtPmNoZWNrX3Jlc2V0KGluc3RhbmNlLAorCQkJCQlpbnN0YW5jZS0+cmVnX3NldCkpID09IDEpIHsKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0KKworCWlmICgobWZpU3RhdHVzID0gaW5zdGFuY2UtPmluc3RhbmNldC0+Y2xlYXJfaW50cigKKwkJCQkJCWluc3RhbmNlLT5yZWdfc2V0KQorCQkJCQkJKSA9PSAwKSB7CisJCXJldHVybiBJUlFfTk9ORTsKKwl9CisKKwlpbnN0YW5jZS0+bWZpU3RhdHVzID0gbWZpU3RhdHVzOworCisJaWYgKChtZmlTdGF0dXMgJiBNRklfSU5UUl9GTEFHX0ZJUk1XQVJFX1NUQVRFX0NIQU5HRSkpIHsKKwkJZndfc3RhdGUgPSBpbnN0YW5jZS0+aW5zdGFuY2V0LT5yZWFkX2Z3X3N0YXR1c19yZWcoCisJCQkJaW5zdGFuY2UtPnJlZ19zZXQpICYgTUZJX1NUQVRFX01BU0s7CisKKwkJaWYgKGZ3X3N0YXRlICE9IE1GSV9TVEFURV9GQVVMVCkgeworCQkJcHJpbnRrKEtFUk5fTk9USUNFICJtZWdhcmFpZF9zYXM6IGZ3IHN0YXRlOiV4XG4iLAorCQkJCQkJZndfc3RhdGUpOworCQl9CisKKwkJaWYgKChmd19zdGF0ZSA9PSBNRklfU1RBVEVfRkFVTFQpICYmCisJCQkJKGluc3RhbmNlLT5kaXNhYmxlT25saW5lQ3RybFJlc2V0ID09IDApKSB7CisJCQlwcmludGsoS0VSTl9OT1RJQ0UgIm1lZ2FyYWlkX3Nhczogd2FpdCBhZHAgcmVzdGFydFxuIik7CisKKwkJCWlmICgoaW5zdGFuY2UtPnBkZXYtPmRldmljZSA9PQorCQkJCQlQQ0lfREVWSUNFX0lEX0xTSV9TQVMxMDY0UikgfHwKKwkJCQkoaW5zdGFuY2UtPnBkZXYtPmRldmljZSA9PQorCQkJCQlQQ0lfREVWSUNFX0lEX0RFTExfUEVSQzUpIHx8CisJCQkJKGluc3RhbmNlLT5wZGV2LT5kZXZpY2UgPT0KKwkJCQkJUENJX0RFVklDRV9JRF9MU0lfVkVSREVfWkNSKSkgeworCisJCQkJKmluc3RhbmNlLT5jb25zdW1lciA9CisJCQkJCU1FR0FTQVNfQURQUkVTRVRfSU5QUk9HX1NJR047CisJCQl9CisKKworCQkJaW5zdGFuY2UtPmluc3RhbmNldC0+ZGlzYWJsZV9pbnRyKGluc3RhbmNlLT5yZWdfc2V0KTsKKwkJCWluc3RhbmNlLT5hZHByZWNvdmVyeQk9IE1FR0FTQVNfQURQUkVTRVRfU01fSU5GQVVMVDsKKwkJCWluc3RhbmNlLT5pc3N1ZXBlbmRfZG9uZSA9IDA7CisKKwkJCWF0b21pY19zZXQoJmluc3RhbmNlLT5md19vdXRzdGFuZGluZywgMCk7CisJCQltZWdhc2FzX2ludGVybmFsX3Jlc2V0X2RlZmVyX2NtZHMoaW5zdGFuY2UpOworCisJCQlwcmludGsoS0VSTl9OT1RJQ0UgIm1lZ2FzYXM6IGZ3U3RhdGU9JXgsIHN0YWdlOiVkXG4iLAorCQkJCQlmd19zdGF0ZSwgaW5zdGFuY2UtPmFkcHJlY292ZXJ5KTsKKworCQkJc2NoZWR1bGVfd29yaygmaW5zdGFuY2UtPndvcmtfaW5pdCk7CisJCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisKKwkJfSBlbHNlIHsKKwkJCXByaW50ayhLRVJOX05PVElDRSAibWVnYXNhczogZndzdGF0ZToleCwgZGlzX09DUj0leFxuIiwKKwkJCQlmd19zdGF0ZSwgaW5zdGFuY2UtPmRpc2FibGVPbmxpbmVDdHJsUmVzZXQpOworCQl9CisJfQorCisJdGFza2xldF9zY2hlZHVsZSgmaW5zdGFuY2UtPmlzcl90YXNrbGV0KTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisvKioKKyAqIG1lZ2FzYXNfaXNyIC0gaXNyIGVudHJ5IHBvaW50CisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBtZWdhc2FzX2lzcihpbnQgaXJxLCB2b2lkICpkZXZwKQoreworCXN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWlycXJldHVybl90CXJjOworCisJaWYgKGF0b21pY19yZWFkKAorCQkmKCgoc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKilkZXZwKS0+ZndfcmVzZXRfbm9fcGNpX2FjY2VzcykpKQorCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisKKwlpbnN0YW5jZSA9IChzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqKWRldnA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW5zdGFuY2UtPmhiYV9sb2NrLCBmbGFncyk7CisJcmMgPSAgbWVnYXNhc19kZXBsZXRlX3JlcGx5X3F1ZXVlKGluc3RhbmNlLCBESURfT0spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluc3RhbmNlLT5oYmFfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIG1lZ2FzYXNfdHJhbnNpdGlvbl90b19yZWFkeSAtCU1vdmUgdGhlIEZXIHRvIFJFQURZIHN0YXRlCisgKiBAaW5zdGFuY2U6CQkJCUFkYXB0ZXIgc29mdCBzdGF0ZQorICoKKyAqIER1cmluZyB0aGUgaW5pdGlhbGl6YXRpb24sIEZXIHBhc3NlcyBjYW4gcG90ZW50aWFsbHkgYmUgaW4gYW55IG9uZSBvZgorICogc2V2ZXJhbCBwb3NzaWJsZSBzdGF0ZXMuIElmIHRoZSBGVyBpbiBvcGVyYXRpb25hbCwgd2FpdGluZy1mb3ItaGFuZHNoYWtlCisgKiBzdGF0ZXMsIGRyaXZlciBtdXN0IHRha2Ugc3RlcHMgdG8gYnJpbmcgaXQgdG8gcmVhZHkgc3RhdGUuIE90aGVyd2lzZSwgaXQKKyAqIGhhcyB0byB3YWl0IGZvciB0aGUgcmVhZHkgc3RhdGUuCisgKi8KK2ludAorbWVnYXNhc190cmFuc2l0aW9uX3RvX3JlYWR5KHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlKiBpbnN0YW5jZSkKK3sKKwlpbnQgaTsKKwl1OCBtYXhfd2FpdDsKKwl1MzIgZndfc3RhdGU7CisJdTMyIGN1cl9zdGF0ZTsKKwl1MzIgYWJzX3N0YXRlLCBjdXJyX2Fic19zdGF0ZTsKKworCWZ3X3N0YXRlID0gaW5zdGFuY2UtPmluc3RhbmNldC0+cmVhZF9md19zdGF0dXNfcmVnKGluc3RhbmNlLT5yZWdfc2V0KSAmIE1GSV9TVEFURV9NQVNLOworCisJaWYgKGZ3X3N0YXRlICE9IE1GSV9TVEFURV9SRUFEWSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAibWVnYXNhczogV2FpdGluZyBmb3IgRlcgdG8gY29tZSB0byByZWFkeSIKKwkJICAgICAgICIgc3RhdGVcbiIpOworCisJd2hpbGUgKGZ3X3N0YXRlICE9IE1GSV9TVEFURV9SRUFEWSkgeworCisJCWFic19zdGF0ZSA9CisJCWluc3RhbmNlLT5pbnN0YW5jZXQtPnJlYWRfZndfc3RhdHVzX3JlZyhpbnN0YW5jZS0+cmVnX3NldCk7CisKKwkJc3dpdGNoIChmd19zdGF0ZSkgeworCisJCWNhc2UgTUZJX1NUQVRFX0ZBVUxUOgorCisJCQlwcmludGsoS0VSTl9ERUJVRyAibWVnYXNhczogRlcgaW4gRkFVTFQgc3RhdGUhIVxuIik7CisJCQlyZXR1cm4gLUVOT0RFVjsKKworCQljYXNlIE1GSV9TVEFURV9XQUlUX0hBTkRTSEFLRToKKwkJCS8qCisJCQkgKiBTZXQgdGhlIENMUiBiaXQgaW4gaW5ib3VuZCBkb29yYmVsbAorCQkJICovCisJCQlpZiAoKGluc3RhbmNlLT5wZGV2LT5kZXZpY2UgPT0KKwkJCQlQQ0lfREVWSUNFX0lEX0xTSV9TQVMwMDczU0tJTk5ZKSB8fAorCQkJCShpbnN0YW5jZS0+cGRldi0+ZGV2aWNlID09CisJCQkJIFBDSV9ERVZJQ0VfSURfTFNJX1NBUzAwNzFTS0lOTlkpIHx8CisJCQkJKGluc3RhbmNlLT5wZGV2LT5kZXZpY2UgPT0KKwkJCQkgUENJX0RFVklDRV9JRF9MU0lfRlVTSU9OKSkgeworCQkJCXdyaXRlbCgKKwkJCQkgIE1GSV9JTklUX0NMRUFSX0hBTkRTSEFLRXxNRklfSU5JVF9IT1RQTFVHLAorCQkJCSAgJmluc3RhbmNlLT5yZWdfc2V0LT5kb29yYmVsbCk7CisJCQl9IGVsc2UgeworCQkJCXdyaXRlbCgKKwkJCQkgICAgTUZJX0lOSVRfQ0xFQVJfSEFORFNIQUtFfE1GSV9JTklUX0hPVFBMVUcsCisJCQkJCSZpbnN0YW5jZS0+cmVnX3NldC0+aW5ib3VuZF9kb29yYmVsbCk7CisJCQl9CisKKwkJCW1heF93YWl0ID0gTUVHQVNBU19SRVNFVF9XQUlUX1RJTUU7CisJCQljdXJfc3RhdGUgPSBNRklfU1RBVEVfV0FJVF9IQU5EU0hBS0U7CisJCQlicmVhazsKKworCQljYXNlIE1GSV9TVEFURV9CT09UX01FU1NBR0VfUEVORElORzoKKwkJCWlmICgoaW5zdGFuY2UtPnBkZXYtPmRldmljZSA9PQorCQkJICAgICBQQ0lfREVWSUNFX0lEX0xTSV9TQVMwMDczU0tJTk5ZKSB8fAorCQkJCShpbnN0YW5jZS0+cGRldi0+ZGV2aWNlID09CisJCQkJIFBDSV9ERVZJQ0VfSURfTFNJX1NBUzAwNzFTS0lOTlkpIHx8CisJCQkgICAgKGluc3RhbmNlLT5wZGV2LT5kZXZpY2UgPT0KKwkJCSAgICAgUENJX0RFVklDRV9JRF9MU0lfRlVTSU9OKSkgeworCQkJCXdyaXRlbChNRklfSU5JVF9IT1RQTFVHLAorCQkJCSAgICAgICAmaW5zdGFuY2UtPnJlZ19zZXQtPmRvb3JiZWxsKTsKKwkJCX0gZWxzZQorCQkJCXdyaXRlbChNRklfSU5JVF9IT1RQTFVHLAorCQkJCQkmaW5zdGFuY2UtPnJlZ19zZXQtPmluYm91bmRfZG9vcmJlbGwpOworCisJCQltYXhfd2FpdCA9IE1FR0FTQVNfUkVTRVRfV0FJVF9USU1FOworCQkJY3VyX3N0YXRlID0gTUZJX1NUQVRFX0JPT1RfTUVTU0FHRV9QRU5ESU5HOworCQkJYnJlYWs7CisKKwkJY2FzZSBNRklfU1RBVEVfT1BFUkFUSU9OQUw6CisJCQkvKgorCQkJICogQnJpbmcgaXQgdG8gUkVBRFkgc3RhdGU7IGFzc3VtaW5nIG1heCB3YWl0IDEwIHNlY3MKKwkJCSAqLworCQkJaW5zdGFuY2UtPmluc3RhbmNldC0+ZGlzYWJsZV9pbnRyKGluc3RhbmNlLT5yZWdfc2V0KTsKKwkJCWlmICgoaW5zdGFuY2UtPnBkZXYtPmRldmljZSA9PQorCQkJCVBDSV9ERVZJQ0VfSURfTFNJX1NBUzAwNzNTS0lOTlkpIHx8CisJCQkJKGluc3RhbmNlLT5wZGV2LT5kZXZpY2UgPT0KKwkJCQlQQ0lfREVWSUNFX0lEX0xTSV9TQVMwMDcxU0tJTk5ZKSAgfHwKKwkJCQkoaW5zdGFuY2UtPnBkZXYtPmRldmljZQorCQkJCQk9PSBQQ0lfREVWSUNFX0lEX0xTSV9GVVNJT04pKSB7CisJCQkJd3JpdGVsKE1GSV9SRVNFVF9GTEFHUywKKwkJCQkJJmluc3RhbmNlLT5yZWdfc2V0LT5kb29yYmVsbCk7CisJCQkJaWYgKGluc3RhbmNlLT5wZGV2LT5kZXZpY2UgPT0KKwkJCQkgICAgUENJX0RFVklDRV9JRF9MU0lfRlVTSU9OKSB7CisJCQkJCWZvciAoaSA9IDA7IGkgPCAoMTAgKiAxMDAwKTsgaSArPSAyMCkgeworCQkJCQkJaWYgKHJlYWRsKAorCQkJCQkJCSAgICAmaW5zdGFuY2UtPgorCQkJCQkJCSAgICByZWdfc2V0LT4KKwkJCQkJCQkgICAgZG9vcmJlbGwpICYgMSkKKwkJCQkJCQltc2xlZXAoMjApOworCQkJCQkJZWxzZQorCQkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJfSBlbHNlCisJCQkJd3JpdGVsKE1GSV9SRVNFVF9GTEFHUywKKwkJCQkJJmluc3RhbmNlLT5yZWdfc2V0LT5pbmJvdW5kX2Rvb3JiZWxsKTsKKworCQkJbWF4X3dhaXQgPSBNRUdBU0FTX1JFU0VUX1dBSVRfVElNRTsKKwkJCWN1cl9zdGF0ZSA9IE1GSV9TVEFURV9PUEVSQVRJT05BTDsKKwkJCWJyZWFrOworCisJCWNhc2UgTUZJX1NUQVRFX1VOREVGSU5FRDoKKwkJCS8qCisJCQkgKiBUaGlzIHN0YXRlIHNob3VsZCBub3QgbGFzdCBmb3IgbW9yZSB0aGFuIDIgc2Vjb25kcworCQkJICovCisJCQltYXhfd2FpdCA9IE1FR0FTQVNfUkVTRVRfV0FJVF9USU1FOworCQkJY3VyX3N0YXRlID0gTUZJX1NUQVRFX1VOREVGSU5FRDsKKwkJCWJyZWFrOworCisJCWNhc2UgTUZJX1NUQVRFX0JCX0lOSVQ6CisJCQltYXhfd2FpdCA9IE1FR0FTQVNfUkVTRVRfV0FJVF9USU1FOworCQkJY3VyX3N0YXRlID0gTUZJX1NUQVRFX0JCX0lOSVQ7CisJCQlicmVhazsKKworCQljYXNlIE1GSV9TVEFURV9GV19JTklUOgorCQkJbWF4X3dhaXQgPSBNRUdBU0FTX1JFU0VUX1dBSVRfVElNRTsKKwkJCWN1cl9zdGF0ZSA9IE1GSV9TVEFURV9GV19JTklUOworCQkJYnJlYWs7CisKKwkJY2FzZSBNRklfU1RBVEVfRldfSU5JVF8yOgorCQkJbWF4X3dhaXQgPSBNRUdBU0FTX1JFU0VUX1dBSVRfVElNRTsKKwkJCWN1cl9zdGF0ZSA9IE1GSV9TVEFURV9GV19JTklUXzI7CisJCQlicmVhazsKKworCQljYXNlIE1GSV9TVEFURV9ERVZJQ0VfU0NBTjoKKwkJCW1heF93YWl0ID0gTUVHQVNBU19SRVNFVF9XQUlUX1RJTUU7CisJCQljdXJfc3RhdGUgPSBNRklfU1RBVEVfREVWSUNFX1NDQU47CisJCQlicmVhazsKKworCQljYXNlIE1GSV9TVEFURV9GTFVTSF9DQUNIRToKKwkJCW1heF93YWl0ID0gTUVHQVNBU19SRVNFVF9XQUlUX1RJTUU7CisJCQljdXJfc3RhdGUgPSBNRklfU1RBVEVfRkxVU0hfQ0FDSEU7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJcHJpbnRrKEtFUk5fREVCVUcgIm1lZ2FzYXM6IFVua25vd24gc3RhdGUgMHgleFxuIiwKKwkJCSAgICAgICBmd19zdGF0ZSk7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCisJCS8qCisJCSAqIFRoZSBjdXJfc3RhdGUgc2hvdWxkIG5vdCBsYXN0IGZvciBtb3JlIHRoYW4gbWF4X3dhaXQgc2VjcworCQkgKi8KKwkJZm9yIChpID0gMDsgaSA8IChtYXhfd2FpdCAqIDEwMDApOyBpKyspIHsKKwkJCWZ3X3N0YXRlID0gaW5zdGFuY2UtPmluc3RhbmNldC0+cmVhZF9md19zdGF0dXNfcmVnKGluc3RhbmNlLT5yZWdfc2V0KSAmCisJCQkJCU1GSV9TVEFURV9NQVNLIDsKKwkJY3Vycl9hYnNfc3RhdGUgPQorCQlpbnN0YW5jZS0+aW5zdGFuY2V0LT5yZWFkX2Z3X3N0YXR1c19yZWcoaW5zdGFuY2UtPnJlZ19zZXQpOworCisJCQlpZiAoYWJzX3N0YXRlID09IGN1cnJfYWJzX3N0YXRlKSB7CisJCQkJbXNsZWVwKDEpOworCQkJfSBlbHNlCisJCQkJYnJlYWs7CisJCX0KKworCQkvKgorCQkgKiBSZXR1cm4gZXJyb3IgaWYgZndfc3RhdGUgaGFzbid0IGNoYW5nZWQgYWZ0ZXIgbWF4X3dhaXQKKwkJICovCisJCWlmIChjdXJyX2Fic19zdGF0ZSA9PSBhYnNfc3RhdGUpIHsKKwkJCXByaW50ayhLRVJOX0RFQlVHICJGVyBzdGF0ZSBbJWRdIGhhc24ndCBjaGFuZ2VkICIKKwkJCSAgICAgICAiaW4gJWQgc2Vjc1xuIiwgZndfc3RhdGUsIG1heF93YWl0KTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisJfQorCXByaW50ayhLRVJOX0lORk8gIm1lZ2FzYXM6IEZXIG5vdyBpbiBSZWFkeSBzdGF0ZVxuIik7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBtZWdhc2FzX3RlYXJkb3duX2ZyYW1lX3Bvb2wgLQlEZXN0cm95IHRoZSBjbWQgZnJhbWUgRE1BIHBvb2wKKyAqIEBpbnN0YW5jZToJCQkJQWRhcHRlciBzb2Z0IHN0YXRlCisgKi8KK3N0YXRpYyB2b2lkIG1lZ2FzYXNfdGVhcmRvd25fZnJhbWVfcG9vbChzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UpCit7CisJaW50IGk7CisJdTMyIG1heF9jbWQgPSBpbnN0YW5jZS0+bWF4X21maV9jbWRzOworCXN0cnVjdCBtZWdhc2FzX2NtZCAqY21kOworCisJaWYgKCFpbnN0YW5jZS0+ZnJhbWVfZG1hX3Bvb2wpCisJCXJldHVybjsKKworCS8qCisJICogUmV0dXJuIGFsbCBmcmFtZXMgdG8gcG9vbAorCSAqLworCWZvciAoaSA9IDA7IGkgPCBtYXhfY21kOyBpKyspIHsKKworCQljbWQgPSBpbnN0YW5jZS0+Y21kX2xpc3RbaV07CisKKwkJaWYgKGNtZC0+ZnJhbWUpCisJCQlwY2lfcG9vbF9mcmVlKGluc3RhbmNlLT5mcmFtZV9kbWFfcG9vbCwgY21kLT5mcmFtZSwKKwkJCQkgICAgICBjbWQtPmZyYW1lX3BoeXNfYWRkcik7CisKKwkJaWYgKGNtZC0+c2Vuc2UpCisJCQlwY2lfcG9vbF9mcmVlKGluc3RhbmNlLT5zZW5zZV9kbWFfcG9vbCwgY21kLT5zZW5zZSwKKwkJCQkgICAgICBjbWQtPnNlbnNlX3BoeXNfYWRkcik7CisJfQorCisJLyoKKwkgKiBOb3cgZGVzdHJveSB0aGUgcG9vbCBpdHNlbGYKKwkgKi8KKwlwY2lfcG9vbF9kZXN0cm95KGluc3RhbmNlLT5mcmFtZV9kbWFfcG9vbCk7CisJcGNpX3Bvb2xfZGVzdHJveShpbnN0YW5jZS0+c2Vuc2VfZG1hX3Bvb2wpOworCisJaW5zdGFuY2UtPmZyYW1lX2RtYV9wb29sID0gTlVMTDsKKwlpbnN0YW5jZS0+c2Vuc2VfZG1hX3Bvb2wgPSBOVUxMOworfQorCisvKioKKyAqIG1lZ2FzYXNfY3JlYXRlX2ZyYW1lX3Bvb2wgLQlDcmVhdGVzIERNQSBwb29sIGZvciBjbWQgZnJhbWVzCisgKiBAaW5zdGFuY2U6CQkJQWRhcHRlciBzb2Z0IHN0YXRlCisgKgorICogRWFjaCBjb21tYW5kIHBhY2tldCBoYXMgYW4gZW1iZWRkZWQgRE1BIG1lbW9yeSBidWZmZXIgdGhhdCBpcyB1c2VkIGZvcgorICogZmlsbGluZyBNRkkgZnJhbWUgYW5kIHRoZSBTRyBsaXN0IHRoYXQgaW1tZWRpYXRlbHkgZm9sbG93cyB0aGUgZnJhbWUuIFRoaXMKKyAqIGZ1bmN0aW9uIGNyZWF0ZXMgdGhvc2UgRE1BIG1lbW9yeSBidWZmZXJzIGZvciBlYWNoIGNvbW1hbmQgcGFja2V0IGJ5IHVzaW5nCisgKiBQQ0kgcG9vbCBmYWNpbGl0eS4KKyAqLworc3RhdGljIGludCBtZWdhc2FzX2NyZWF0ZV9mcmFtZV9wb29sKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSkKK3sKKwlpbnQgaTsKKwl1MzIgbWF4X2NtZDsKKwl1MzIgc2dlX3N6OworCXUzMiBzZ2xfc3o7CisJdTMyIHRvdGFsX3N6OworCXUzMiBmcmFtZV9jb3VudDsKKwlzdHJ1Y3QgbWVnYXNhc19jbWQgKmNtZDsKKworCW1heF9jbWQgPSBpbnN0YW5jZS0+bWF4X21maV9jbWRzOworCisJLyoKKwkgKiBTaXplIG9mIG91ciBmcmFtZSBpcyA2NCBieXRlcyBmb3IgTUZJIGZyYW1lLCBmb2xsb3dlZCBieSBtYXggU0cKKwkgKiBlbGVtZW50cyBhbmQgZmluYWxseSBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUgYnl0ZXMgZm9yIHNlbnNlIGJ1ZmZlcgorCSAqLworCXNnZV9zeiA9IChJU19ETUE2NCkgPyBzaXplb2Yoc3RydWN0IG1lZ2FzYXNfc2dlNjQpIDoKKwkgICAgc2l6ZW9mKHN0cnVjdCBtZWdhc2FzX3NnZTMyKTsKKworCWlmIChpbnN0YW5jZS0+ZmxhZ19pZWVlKSB7CisJCXNnZV9zeiA9IHNpemVvZihzdHJ1Y3QgbWVnYXNhc19zZ2Vfc2tpbm55KTsKKwl9CisKKwkvKgorCSAqIENhbGN1bGF0ZWQgdGhlIG51bWJlciBvZiA2NGJ5dGUgZnJhbWVzIHJlcXVpcmVkIGZvciBTR0wKKwkgKi8KKwlzZ2xfc3ogPSBzZ2Vfc3ogKiBpbnN0YW5jZS0+bWF4X251bV9zZ2U7CisJZnJhbWVfY291bnQgPSAoc2dsX3N6ICsgTUVHQU1GSV9GUkFNRV9TSVpFIC0gMSkgLyBNRUdBTUZJX0ZSQU1FX1NJWkU7CisJZnJhbWVfY291bnQgPSAxNTsKKworCS8qCisJICogV2UgbmVlZCBvbmUgZXh0cmEgZnJhbWUgZm9yIHRoZSBNRkkgY29tbWFuZAorCSAqLworCWZyYW1lX2NvdW50Kys7CisKKwl0b3RhbF9zeiA9IE1FR0FNRklfRlJBTUVfU0laRSAqIGZyYW1lX2NvdW50OworCS8qCisJICogVXNlIERNQSBwb29sIGZhY2lsaXR5IHByb3ZpZGVkIGJ5IFBDSSBsYXllcgorCSAqLworCWluc3RhbmNlLT5mcmFtZV9kbWFfcG9vbCA9IHBjaV9wb29sX2NyZWF0ZSgibWVnYXNhcyBmcmFtZSBwb29sIiwKKwkJCQkJCSAgIGluc3RhbmNlLT5wZGV2LCB0b3RhbF9zeiwgNjQsCisJCQkJCQkgICAwKTsKKworCWlmICghaW5zdGFuY2UtPmZyYW1lX2RtYV9wb29sKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJtZWdhc2FzOiBmYWlsZWQgdG8gc2V0dXAgZnJhbWUgcG9vbFxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWluc3RhbmNlLT5zZW5zZV9kbWFfcG9vbCA9IHBjaV9wb29sX2NyZWF0ZSgibWVnYXNhcyBzZW5zZSBwb29sIiwKKwkJCQkJCSAgIGluc3RhbmNlLT5wZGV2LCAxMjgsIDQsIDApOworCisJaWYgKCFpbnN0YW5jZS0+c2Vuc2VfZG1hX3Bvb2wpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIm1lZ2FzYXM6IGZhaWxlZCB0byBzZXR1cCBzZW5zZSBwb29sXG4iKTsKKworCQlwY2lfcG9vbF9kZXN0cm95KGluc3RhbmNlLT5mcmFtZV9kbWFfcG9vbCk7CisJCWluc3RhbmNlLT5mcmFtZV9kbWFfcG9vbCA9IE5VTEw7CisKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyoKKwkgKiBBbGxvY2F0ZSBhbmQgYXR0YWNoIGEgZnJhbWUgdG8gZWFjaCBvZiB0aGUgY29tbWFuZHMgaW4gY21kX2xpc3QuCisJICogQnkgbWFraW5nIGNtZC0+aW5kZXggYXMgdGhlIGNvbnRleHQgaW5zdGVhZCBvZiB0aGUgJmNtZCwgd2UgY2FuCisJICogYWx3YXlzIHVzZSAzMmJpdCBjb250ZXh0IHJlZ2FyZGxlc3Mgb2YgdGhlIGFyY2hpdGVjdHVyZQorCSAqLworCWZvciAoaSA9IDA7IGkgPCBtYXhfY21kOyBpKyspIHsKKworCQljbWQgPSBpbnN0YW5jZS0+Y21kX2xpc3RbaV07CisKKwkJY21kLT5mcmFtZSA9IHBjaV9wb29sX2FsbG9jKGluc3RhbmNlLT5mcmFtZV9kbWFfcG9vbCwKKwkJCQkJICAgIEdGUF9LRVJORUwsICZjbWQtPmZyYW1lX3BoeXNfYWRkcik7CisKKwkJY21kLT5zZW5zZSA9IHBjaV9wb29sX2FsbG9jKGluc3RhbmNlLT5zZW5zZV9kbWFfcG9vbCwKKwkJCQkJICAgIEdGUF9LRVJORUwsICZjbWQtPnNlbnNlX3BoeXNfYWRkcik7CisKKwkJLyoKKwkJICogbWVnYXNhc190ZWFyZG93bl9mcmFtZV9wb29sKCkgdGFrZXMgY2FyZSBvZiBmcmVlaW5nCisJCSAqIHdoYXRldmVyIGhhcyBiZWVuIGFsbG9jYXRlZAorCQkgKi8KKwkJaWYgKCFjbWQtPmZyYW1lIHx8ICFjbWQtPnNlbnNlKSB7CisJCQlwcmludGsoS0VSTl9ERUJVRyAibWVnYXNhczogcGNpX3Bvb2xfYWxsb2MgZmFpbGVkIFxuIik7CisJCQltZWdhc2FzX3RlYXJkb3duX2ZyYW1lX3Bvb2woaW5zdGFuY2UpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKworCQltZW1zZXQoY21kLT5mcmFtZSwgMCwgdG90YWxfc3opOworCQljbWQtPmZyYW1lLT5pby5jb250ZXh0ID0gY21kLT5pbmRleDsKKwkJY21kLT5mcmFtZS0+aW8ucGFkXzAgPSAwOworCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqIG1lZ2FzYXNfZnJlZV9jbWRzIC0JRnJlZSBhbGwgdGhlIGNtZHMgaW4gdGhlIGZyZWUgY21kIHBvb2wKKyAqIEBpbnN0YW5jZToJCUFkYXB0ZXIgc29mdCBzdGF0ZQorICovCit2b2lkIG1lZ2FzYXNfZnJlZV9jbWRzKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSkKK3sKKwlpbnQgaTsKKwkvKiBGaXJzdCBmcmVlIHRoZSBNRkkgZnJhbWUgcG9vbCAqLworCW1lZ2FzYXNfdGVhcmRvd25fZnJhbWVfcG9vbChpbnN0YW5jZSk7CisKKwkvKiBGcmVlIGFsbCB0aGUgY29tbWFuZHMgaW4gdGhlIGNtZF9saXN0ICovCisJZm9yIChpID0gMDsgaSA8IGluc3RhbmNlLT5tYXhfbWZpX2NtZHM7IGkrKykKKworCQlrZnJlZShpbnN0YW5jZS0+Y21kX2xpc3RbaV0pOworCisJLyogRnJlZSB0aGUgY21kX2xpc3QgYnVmZmVyIGl0c2VsZiAqLworCWtmcmVlKGluc3RhbmNlLT5jbWRfbGlzdCk7CisJaW5zdGFuY2UtPmNtZF9saXN0ID0gTlVMTDsKKworCUlOSVRfTElTVF9IRUFEKCZpbnN0YW5jZS0+Y21kX3Bvb2wpOworfQorCisvKioKKyAqIG1lZ2FzYXNfYWxsb2NfY21kcyAtCUFsbG9jYXRlcyB0aGUgY29tbWFuZCBwYWNrZXRzCisgKiBAaW5zdGFuY2U6CQlBZGFwdGVyIHNvZnQgc3RhdGUKKyAqCisgKiBFYWNoIGNvbW1hbmQgdGhhdCBpcyBpc3N1ZWQgdG8gdGhlIEZXLCB3aGV0aGVyIElPIGNvbW1hbmRzIGZyb20gdGhlIE9TIG9yCisgKiBpbnRlcm5hbCBjb21tYW5kcyBsaWtlIElPQ1RMcywgYXJlIHdyYXBwZWQgaW4gbG9jYWwgZGF0YSBzdHJ1Y3R1cmUgY2FsbGVkCisgKiBtZWdhc2FzX2NtZC4gVGhlIGZyYW1lIGVtYmVkZGVkIGluIHRoaXMgbWVnYXNhc19jbWQgaXMgYWN0dWFsbHkgaXNzdWVkIHRvCisgKiB0aGUgRlcuCisgKgorICogRWFjaCBmcmFtZSBoYXMgYSAzMi1iaXQgZmllbGQgY2FsbGVkIGNvbnRleHQgKHRhZykuIFRoaXMgY29udGV4dCBpcyB1c2VkCisgKiB0byBnZXQgYmFjayB0aGUgbWVnYXNhc19jbWQgZnJvbSB0aGUgZnJhbWUgd2hlbiBhIGZyYW1lIGdldHMgY29tcGxldGVkIGluCisgKiB0aGUgSVNSLiBUeXBpY2FsbHkgdGhlIGFkZHJlc3Mgb2YgdGhlIG1lZ2FzYXNfY21kIGl0c2VsZiB3b3VsZCBiZSB1c2VkIGFzCisgKiB0aGUgY29udGV4dC4gQnV0IHdlIHdhbnRlZCB0byBrZWVwIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIDMyIGFuZCA2NCBiaXQKKyAqIHN5c3RlbXMgdG8gdGhlIG1pbmludW0uIFdlIGFsd2F5cyB1c2UgMzIgYml0IGludGVnZXJzIGZvciB0aGUgY29udGV4dC4gSW4KKyAqIHRoaXMgZHJpdmVyLCB0aGUgMzIgYml0IHZhbHVlcyBhcmUgdGhlIGluZGljZXMgaW50byBhbiBhcnJheSBjbWRfbGlzdC4KKyAqIFRoaXMgYXJyYXkgaXMgdXNlZCBvbmx5IHRvIGxvb2sgdXAgdGhlIG1lZ2FzYXNfY21kIGdpdmVuIHRoZSBjb250ZXh0LiBUaGUKKyAqIGZyZWUgY29tbWFuZHMgdGhlbXNlbHZlcyBhcmUgbWFpbnRhaW5lZCBpbiBhIGxpbmtlZCBsaXN0IGNhbGxlZCBjbWRfcG9vbC4KKyAqLworaW50IG1lZ2FzYXNfYWxsb2NfY21kcyhzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UpCit7CisJaW50IGk7CisJaW50IGo7CisJdTMyIG1heF9jbWQ7CisJc3RydWN0IG1lZ2FzYXNfY21kICpjbWQ7CisKKwltYXhfY21kID0gaW5zdGFuY2UtPm1heF9tZmlfY21kczsKKworCS8qCisJICogaW5zdGFuY2UtPmNtZF9saXN0IGlzIGFuIGFycmF5IG9mIHN0cnVjdCBtZWdhc2FzX2NtZCBwb2ludGVycy4KKwkgKiBBbGxvY2F0ZSB0aGUgZHluYW1pYyBhcnJheSBmaXJzdCBhbmQgdGhlbiBhbGxvY2F0ZSBpbmRpdmlkdWFsCisJICogY29tbWFuZHMuCisJICovCisJaW5zdGFuY2UtPmNtZF9saXN0ID0ga2NhbGxvYyhtYXhfY21kLCBzaXplb2Yoc3RydWN0IG1lZ2FzYXNfY21kKiksIEdGUF9LRVJORUwpOworCisJaWYgKCFpbnN0YW5jZS0+Y21kX2xpc3QpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIm1lZ2FzYXM6IG91dCBvZiBtZW1vcnlcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwltZW1zZXQoaW5zdGFuY2UtPmNtZF9saXN0LCAwLCBzaXplb2Yoc3RydWN0IG1lZ2FzYXNfY21kICopICptYXhfY21kKTsKKworCWZvciAoaSA9IDA7IGkgPCBtYXhfY21kOyBpKyspIHsKKwkJaW5zdGFuY2UtPmNtZF9saXN0W2ldID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG1lZ2FzYXNfY21kKSwKKwkJCQkJCUdGUF9LRVJORUwpOworCisJCWlmICghaW5zdGFuY2UtPmNtZF9saXN0W2ldKSB7CisKKwkJCWZvciAoaiA9IDA7IGogPCBpOyBqKyspCisJCQkJa2ZyZWUoaW5zdGFuY2UtPmNtZF9saXN0W2pdKTsKKworCQkJa2ZyZWUoaW5zdGFuY2UtPmNtZF9saXN0KTsKKwkJCWluc3RhbmNlLT5jbWRfbGlzdCA9IE5VTEw7CisKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJfQorCisJLyoKKwkgKiBBZGQgYWxsIHRoZSBjb21tYW5kcyB0byBjb21tYW5kIHBvb2wgKGluc3RhbmNlLT5jbWRfcG9vbCkKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbWF4X2NtZDsgaSsrKSB7CisJCWNtZCA9IGluc3RhbmNlLT5jbWRfbGlzdFtpXTsKKwkJbWVtc2V0KGNtZCwgMCwgc2l6ZW9mKHN0cnVjdCBtZWdhc2FzX2NtZCkpOworCQljbWQtPmluZGV4ID0gaTsKKwkJY21kLT5zY21kID0gTlVMTDsKKwkJY21kLT5pbnN0YW5jZSA9IGluc3RhbmNlOworCisJCWxpc3RfYWRkX3RhaWwoJmNtZC0+bGlzdCwgJmluc3RhbmNlLT5jbWRfcG9vbCk7CisJfQorCisJLyoKKwkgKiBDcmVhdGUgYSBmcmFtZSBwb29sIGFuZCBhc3NpZ24gb25lIGZyYW1lIHRvIGVhY2ggY21kCisJICovCisJaWYgKG1lZ2FzYXNfY3JlYXRlX2ZyYW1lX3Bvb2woaW5zdGFuY2UpKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJtZWdhc2FzOiBFcnJvciBjcmVhdGluZyBmcmFtZSBETUEgcG9vbFxuIik7CisJCW1lZ2FzYXNfZnJlZV9jbWRzKGluc3RhbmNlKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIG1lZ2FzYXNfZ2V0X3BkX2xpc3RfaW5mbyAtCVJldHVybnMgRlcncyBwZF9saXN0IHN0cnVjdHVyZQorICogQGluc3RhbmNlOgkJCQlBZGFwdGVyIHNvZnQgc3RhdGUKKyAqIEBwZF9saXN0OgkJCQlwZF9saXN0IHN0cnVjdHVyZQorICoKKyAqIElzc3VlcyBhbiBpbnRlcm5hbCBjb21tYW5kIChEQ01EKSB0byBnZXQgdGhlIEZXJ3MgY29udHJvbGxlciBQRAorICogbGlzdCBzdHJ1Y3R1cmUuICBUaGlzIGluZm9ybWF0aW9uIGlzIG1haW5seSB1c2VkIHRvIGZpbmQgb3V0IFNZU1RFTQorICogc3VwcG9ydGVkIGJ5IHRoZSBGVy4KKyAqLworc3RhdGljIGludAorbWVnYXNhc19nZXRfcGRfbGlzdChzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UpCit7CisJaW50IHJldCA9IDAsIHBkX2luZGV4ID0gMDsKKwlzdHJ1Y3QgbWVnYXNhc19jbWQgKmNtZDsKKwlzdHJ1Y3QgbWVnYXNhc19kY21kX2ZyYW1lICpkY21kOworCXN0cnVjdCBNUl9QRF9MSVNUICpjaTsKKwlzdHJ1Y3QgTVJfUERfQUREUkVTUyAqcGRfYWRkcjsKKwlkbWFfYWRkcl90IGNpX2ggPSAwOworCisJY21kID0gbWVnYXNhc19nZXRfY21kKGluc3RhbmNlKTsKKworCWlmICghY21kKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJtZWdhc2FzIChnZXRfcGRfbGlzdCk6IEZhaWxlZCB0byBnZXQgY21kXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZGNtZCA9ICZjbWQtPmZyYW1lLT5kY21kOworCisJY2kgPSBwY2lfYWxsb2NfY29uc2lzdGVudChpbnN0YW5jZS0+cGRldiwKKwkJICBNRUdBU0FTX01BWF9QRCAqIHNpemVvZihzdHJ1Y3QgTVJfUERfTElTVCksICZjaV9oKTsKKworCWlmICghY2kpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkZhaWxlZCB0byBhbGxvYyBtZW0gZm9yIHBkX2xpc3RcbiIpOworCQltZWdhc2FzX3JldHVybl9jbWQoaW5zdGFuY2UsIGNtZCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW1lbXNldChjaSwgMCwgc2l6ZW9mKCpjaSkpOworCW1lbXNldChkY21kLT5tYm94LmIsIDAsIE1GSV9NQk9YX1NJWkUpOworCisJZGNtZC0+bWJveC5iWzBdID0gTVJfUERfUVVFUllfVFlQRV9FWFBPU0VEX1RPX0hPU1Q7CisJZGNtZC0+bWJveC5iWzFdID0gMDsKKwlkY21kLT5jbWQgPSBNRklfQ01EX0RDTUQ7CisJZGNtZC0+Y21kX3N0YXR1cyA9IDB4RkY7CisJZGNtZC0+c2dlX2NvdW50ID0gMTsKKwlkY21kLT5mbGFncyA9IE1GSV9GUkFNRV9ESVJfUkVBRDsKKwlkY21kLT50aW1lb3V0ID0gMDsKKwlkY21kLT5wYWRfMCA9IDA7CisJZGNtZC0+ZGF0YV94ZmVyX2xlbiA9IE1FR0FTQVNfTUFYX1BEICogc2l6ZW9mKHN0cnVjdCBNUl9QRF9MSVNUKTsKKwlkY21kLT5vcGNvZGUgPSBNUl9EQ01EX1BEX0xJU1RfUVVFUlk7CisJZGNtZC0+c2dsLnNnZTMyWzBdLnBoeXNfYWRkciA9IGNpX2g7CisJZGNtZC0+c2dsLnNnZTMyWzBdLmxlbmd0aCA9IE1FR0FTQVNfTUFYX1BEICogc2l6ZW9mKHN0cnVjdCBNUl9QRF9MSVNUKTsKKworCWlmICghbWVnYXNhc19pc3N1ZV9wb2xsZWQoaW5zdGFuY2UsIGNtZCkpIHsKKwkJcmV0ID0gMDsKKwl9IGVsc2UgeworCQlyZXQgPSAtMTsKKwl9CisKKwkvKgorCSogdGhlIGZvbGxvd2luZyBmdW5jdGlvbiB3aWxsIGdldCB0aGUgaW5zdGFuY2UgUEQgTElTVC4KKwkqLworCisJcGRfYWRkciA9IGNpLT5hZGRyOworCisJaWYgKCByZXQgPT0gMCAmJgorCQkoY2ktPmNvdW50IDwKKwkJICAoTUVHQVNBU19NQVhfUERfQ0hBTk5FTFMgKiBNRUdBU0FTX01BWF9ERVZfUEVSX0NIQU5ORUwpKSkgeworCisJCW1lbXNldChpbnN0YW5jZS0+cGRfbGlzdCwgMCwKKwkJCU1FR0FTQVNfTUFYX1BEICogc2l6ZW9mKHN0cnVjdCBtZWdhc2FzX3BkX2xpc3QpKTsKKworCQlmb3IgKHBkX2luZGV4ID0gMDsgcGRfaW5kZXggPCBjaS0+Y291bnQ7IHBkX2luZGV4KyspIHsKKworCQkJaW5zdGFuY2UtPnBkX2xpc3RbcGRfYWRkci0+ZGV2aWNlSWRdLnRpZAk9CisJCQkJCQkJcGRfYWRkci0+ZGV2aWNlSWQ7CisJCQlpbnN0YW5jZS0+cGRfbGlzdFtwZF9hZGRyLT5kZXZpY2VJZF0uZHJpdmVUeXBlCT0KKwkJCQkJCQlwZF9hZGRyLT5zY3NpRGV2VHlwZTsKKwkJCWluc3RhbmNlLT5wZF9saXN0W3BkX2FkZHItPmRldmljZUlkXS5kcml2ZVN0YXRlCT0KKwkJCQkJCQlNUl9QRF9TVEFURV9TWVNURU07CisJCQlwZF9hZGRyKys7CisJCX0KKwl9CisKKwlwY2lfZnJlZV9jb25zaXN0ZW50KGluc3RhbmNlLT5wZGV2LAorCQkJCU1FR0FTQVNfTUFYX1BEICogc2l6ZW9mKHN0cnVjdCBNUl9QRF9MSVNUKSwKKwkJCQljaSwgY2lfaCk7CisJbWVnYXNhc19yZXR1cm5fY21kKGluc3RhbmNlLCBjbWQpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIG1lZ2FzYXNfZ2V0X2xkX2xpc3RfaW5mbyAtCVJldHVybnMgRlcncyBsZF9saXN0IHN0cnVjdHVyZQorICogQGluc3RhbmNlOgkJCQlBZGFwdGVyIHNvZnQgc3RhdGUKKyAqIEBsZF9saXN0OgkJCQlsZF9saXN0IHN0cnVjdHVyZQorICoKKyAqIElzc3VlcyBhbiBpbnRlcm5hbCBjb21tYW5kIChEQ01EKSB0byBnZXQgdGhlIEZXJ3MgY29udHJvbGxlciBQRAorICogbGlzdCBzdHJ1Y3R1cmUuICBUaGlzIGluZm9ybWF0aW9uIGlzIG1haW5seSB1c2VkIHRvIGZpbmQgb3V0IFNZU1RFTQorICogc3VwcG9ydGVkIGJ5IHRoZSBGVy4KKyAqLworc3RhdGljIGludAorbWVnYXNhc19nZXRfbGRfbGlzdChzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UpCit7CisJaW50IHJldCA9IDAsIGxkX2luZGV4ID0gMCwgaWRzID0gMDsKKwlzdHJ1Y3QgbWVnYXNhc19jbWQgKmNtZDsKKwlzdHJ1Y3QgbWVnYXNhc19kY21kX2ZyYW1lICpkY21kOworCXN0cnVjdCBNUl9MRF9MSVNUICpjaTsKKwlkbWFfYWRkcl90IGNpX2ggPSAwOworCisJY21kID0gbWVnYXNhc19nZXRfY21kKGluc3RhbmNlKTsKKworCWlmICghY21kKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJtZWdhc2FzX2dldF9sZF9saXN0OiBGYWlsZWQgdG8gZ2V0IGNtZFxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWRjbWQgPSAmY21kLT5mcmFtZS0+ZGNtZDsKKworCWNpID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoaW5zdGFuY2UtPnBkZXYsCisJCQkJc2l6ZW9mKHN0cnVjdCBNUl9MRF9MSVNUKSwKKwkJCQkmY2lfaCk7CisKKwlpZiAoIWNpKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJGYWlsZWQgdG8gYWxsb2MgbWVtIGluIGdldF9sZF9saXN0XG4iKTsKKwkJbWVnYXNhc19yZXR1cm5fY21kKGluc3RhbmNlLCBjbWQpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwltZW1zZXQoY2ksIDAsIHNpemVvZigqY2kpKTsKKwltZW1zZXQoZGNtZC0+bWJveC5iLCAwLCBNRklfTUJPWF9TSVpFKTsKKworCWRjbWQtPmNtZCA9IE1GSV9DTURfRENNRDsKKwlkY21kLT5jbWRfc3RhdHVzID0gMHhGRjsKKwlkY21kLT5zZ2VfY291bnQgPSAxOworCWRjbWQtPmZsYWdzID0gTUZJX0ZSQU1FX0RJUl9SRUFEOworCWRjbWQtPnRpbWVvdXQgPSAwOworCWRjbWQtPmRhdGFfeGZlcl9sZW4gPSBzaXplb2Yoc3RydWN0IE1SX0xEX0xJU1QpOworCWRjbWQtPm9wY29kZSA9IE1SX0RDTURfTERfR0VUX0xJU1Q7CisJZGNtZC0+c2dsLnNnZTMyWzBdLnBoeXNfYWRkciA9IGNpX2g7CisJZGNtZC0+c2dsLnNnZTMyWzBdLmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgTVJfTERfTElTVCk7CisJZGNtZC0+cGFkXzAgID0gMDsKKworCWlmICghbWVnYXNhc19pc3N1ZV9wb2xsZWQoaW5zdGFuY2UsIGNtZCkpIHsKKwkJcmV0ID0gMDsKKwl9IGVsc2UgeworCQlyZXQgPSAtMTsKKwl9CisKKwkvKiB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uIHdpbGwgZ2V0IHRoZSBpbnN0YW5jZSBQRCBMSVNUICovCisKKwlpZiAoKHJldCA9PSAwKSAmJiAoY2ktPmxkQ291bnQgPD0gTUFYX0xPR0lDQUxfRFJJVkVTKSkgeworCQltZW1zZXQoaW5zdGFuY2UtPmxkX2lkcywgMHhmZiwgTUVHQVNBU19NQVhfTERfSURTKTsKKworCQlmb3IgKGxkX2luZGV4ID0gMDsgbGRfaW5kZXggPCBjaS0+bGRDb3VudDsgbGRfaW5kZXgrKykgeworCQkJaWYgKGNpLT5sZExpc3RbbGRfaW5kZXhdLnN0YXRlICE9IDApIHsKKwkJCQlpZHMgPSBjaS0+bGRMaXN0W2xkX2luZGV4XS5yZWYudGFyZ2V0SWQ7CisJCQkJaW5zdGFuY2UtPmxkX2lkc1tpZHNdID0KKwkJCQkJY2ktPmxkTGlzdFtsZF9pbmRleF0ucmVmLnRhcmdldElkOworCQkJfQorCQl9CisJfQorCisJcGNpX2ZyZWVfY29uc2lzdGVudChpbnN0YW5jZS0+cGRldiwKKwkJCQlzaXplb2Yoc3RydWN0IE1SX0xEX0xJU1QpLAorCQkJCWNpLAorCQkJCWNpX2gpOworCisJbWVnYXNhc19yZXR1cm5fY21kKGluc3RhbmNlLCBjbWQpOworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogbWVnYXNhc19nZXRfY29udHJvbGxlcl9pbmZvIC0JUmV0dXJucyBGVydzIGNvbnRyb2xsZXIgc3RydWN0dXJlCisgKiBAaW5zdGFuY2U6CQkJCUFkYXB0ZXIgc29mdCBzdGF0ZQorICogQGN0cmxfaW5mbzoJCQkJQ29udHJvbGxlciBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUKKyAqCisgKiBJc3N1ZXMgYW4gaW50ZXJuYWwgY29tbWFuZCAoRENNRCkgdG8gZ2V0IHRoZSBGVydzIGNvbnRyb2xsZXIgc3RydWN0dXJlLgorICogVGhpcyBpbmZvcm1hdGlvbiBpcyBtYWlubHkgdXNlZCB0byBmaW5kIG91dCB0aGUgbWF4aW11bSBJTyB0cmFuc2ZlciBwZXIKKyAqIGNvbW1hbmQgc3VwcG9ydGVkIGJ5IHRoZSBGVy4KKyAqLworc3RhdGljIGludAorbWVnYXNhc19nZXRfY3RybF9pbmZvKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSwKKwkJICAgICAgc3RydWN0IG1lZ2FzYXNfY3RybF9pbmZvICpjdHJsX2luZm8pCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IG1lZ2FzYXNfY21kICpjbWQ7CisJc3RydWN0IG1lZ2FzYXNfZGNtZF9mcmFtZSAqZGNtZDsKKwlzdHJ1Y3QgbWVnYXNhc19jdHJsX2luZm8gKmNpOworCWRtYV9hZGRyX3QgY2lfaCA9IDA7CisKKwljbWQgPSBtZWdhc2FzX2dldF9jbWQoaW5zdGFuY2UpOworCisJaWYgKCFjbWQpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIm1lZ2FzYXM6IEZhaWxlZCB0byBnZXQgYSBmcmVlIGNtZFxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWRjbWQgPSAmY21kLT5mcmFtZS0+ZGNtZDsKKworCWNpID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoaW5zdGFuY2UtPnBkZXYsCisJCQkJICBzaXplb2Yoc3RydWN0IG1lZ2FzYXNfY3RybF9pbmZvKSwgJmNpX2gpOworCisJaWYgKCFjaSkgeworCQlwcmludGsoS0VSTl9ERUJVRyAiRmFpbGVkIHRvIGFsbG9jIG1lbSBmb3IgY3RybCBpbmZvXG4iKTsKKwkJbWVnYXNhc19yZXR1cm5fY21kKGluc3RhbmNlLCBjbWQpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwltZW1zZXQoY2ksIDAsIHNpemVvZigqY2kpKTsKKwltZW1zZXQoZGNtZC0+bWJveC5iLCAwLCBNRklfTUJPWF9TSVpFKTsKKworCWRjbWQtPmNtZCA9IE1GSV9DTURfRENNRDsKKwlkY21kLT5jbWRfc3RhdHVzID0gMHhGRjsKKwlkY21kLT5zZ2VfY291bnQgPSAxOworCWRjbWQtPmZsYWdzID0gTUZJX0ZSQU1FX0RJUl9SRUFEOworCWRjbWQtPnRpbWVvdXQgPSAwOworCWRjbWQtPnBhZF8wID0gMDsKKwlkY21kLT5kYXRhX3hmZXJfbGVuID0gc2l6ZW9mKHN0cnVjdCBtZWdhc2FzX2N0cmxfaW5mbyk7CisJZGNtZC0+b3Bjb2RlID0gTVJfRENNRF9DVFJMX0dFVF9JTkZPOworCWRjbWQtPnNnbC5zZ2UzMlswXS5waHlzX2FkZHIgPSBjaV9oOworCWRjbWQtPnNnbC5zZ2UzMlswXS5sZW5ndGggPSBzaXplb2Yoc3RydWN0IG1lZ2FzYXNfY3RybF9pbmZvKTsKKworCWlmICghbWVnYXNhc19pc3N1ZV9wb2xsZWQoaW5zdGFuY2UsIGNtZCkpIHsKKwkJcmV0ID0gMDsKKwkJbWVtY3B5KGN0cmxfaW5mbywgY2ksIHNpemVvZihzdHJ1Y3QgbWVnYXNhc19jdHJsX2luZm8pKTsKKwl9IGVsc2UgeworCQlyZXQgPSAtMTsKKwl9CisKKwlwY2lfZnJlZV9jb25zaXN0ZW50KGluc3RhbmNlLT5wZGV2LCBzaXplb2Yoc3RydWN0IG1lZ2FzYXNfY3RybF9pbmZvKSwKKwkJCSAgICBjaSwgY2lfaCk7CisKKwltZWdhc2FzX3JldHVybl9jbWQoaW5zdGFuY2UsIGNtZCk7CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBtZWdhc2FzX2lzc3VlX2luaXRfbWZpIC0JSW5pdGlhbGl6ZXMgdGhlIEZXCisgKiBAaW5zdGFuY2U6CQlBZGFwdGVyIHNvZnQgc3RhdGUKKyAqCisgKiBJc3N1ZXMgdGhlIElOSVQgTUZJIGNtZAorICovCitzdGF0aWMgaW50CittZWdhc2FzX2lzc3VlX2luaXRfbWZpKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSkKK3sKKwl1MzIgY29udGV4dDsKKworCXN0cnVjdCBtZWdhc2FzX2NtZCAqY21kOworCisJc3RydWN0IG1lZ2FzYXNfaW5pdF9mcmFtZSAqaW5pdF9mcmFtZTsKKwlzdHJ1Y3QgbWVnYXNhc19pbml0X3F1ZXVlX2luZm8gKmluaXRxX2luZm87CisJZG1hX2FkZHJfdCBpbml0X2ZyYW1lX2g7CisJZG1hX2FkZHJfdCBpbml0cV9pbmZvX2g7CisKKwkvKgorCSAqIFByZXBhcmUgYSBpbml0IGZyYW1lLiBOb3RlIHRoZSBpbml0IGZyYW1lIHBvaW50cyB0byBxdWV1ZSBpbmZvCisJICogc3RydWN0dXJlLiBFYWNoIGZyYW1lIGhhcyBTR0wgYWxsb2NhdGVkIGFmdGVyIGZpcnN0IDY0IGJ5dGVzLiBGb3IKKwkgKiB0aGlzIGZyYW1lIC0gc2luY2Ugd2UgZG9uJ3QgbmVlZCBhbnkgU0dMIC0gd2UgdXNlIFNHTCdzIHNwYWNlIGFzCisJICogcXVldWUgaW5mbyBzdHJ1Y3R1cmUKKwkgKgorCSAqIFdlIHdpbGwgbm90IGdldCBhIE5VTEwgY29tbWFuZCBiZWxvdy4gV2UganVzdCBjcmVhdGVkIHRoZSBwb29sLgorCSAqLworCWNtZCA9IG1lZ2FzYXNfZ2V0X2NtZChpbnN0YW5jZSk7CisKKwlpbml0X2ZyYW1lID0gKHN0cnVjdCBtZWdhc2FzX2luaXRfZnJhbWUgKiljbWQtPmZyYW1lOworCWluaXRxX2luZm8gPSAoc3RydWN0IG1lZ2FzYXNfaW5pdF9xdWV1ZV9pbmZvICopCisJCSgodW5zaWduZWQgbG9uZylpbml0X2ZyYW1lICsgNjQpOworCisJaW5pdF9mcmFtZV9oID0gY21kLT5mcmFtZV9waHlzX2FkZHI7CisJaW5pdHFfaW5mb19oID0gaW5pdF9mcmFtZV9oICsgNjQ7CisKKwljb250ZXh0ID0gaW5pdF9mcmFtZS0+Y29udGV4dDsKKwltZW1zZXQoaW5pdF9mcmFtZSwgMCwgTUVHQU1GSV9GUkFNRV9TSVpFKTsKKwltZW1zZXQoaW5pdHFfaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBtZWdhc2FzX2luaXRfcXVldWVfaW5mbykpOworCWluaXRfZnJhbWUtPmNvbnRleHQgPSBjb250ZXh0OworCisJaW5pdHFfaW5mby0+cmVwbHlfcXVldWVfZW50cmllcyA9IGluc3RhbmNlLT5tYXhfZndfY21kcyArIDE7CisJaW5pdHFfaW5mby0+cmVwbHlfcXVldWVfc3RhcnRfcGh5c19hZGRyX2xvID0gaW5zdGFuY2UtPnJlcGx5X3F1ZXVlX2g7CisKKwlpbml0cV9pbmZvLT5wcm9kdWNlcl9pbmRleF9waHlzX2FkZHJfbG8gPSBpbnN0YW5jZS0+cHJvZHVjZXJfaDsKKwlpbml0cV9pbmZvLT5jb25zdW1lcl9pbmRleF9waHlzX2FkZHJfbG8gPSBpbnN0YW5jZS0+Y29uc3VtZXJfaDsKKworCWluaXRfZnJhbWUtPmNtZCA9IE1GSV9DTURfSU5JVDsKKwlpbml0X2ZyYW1lLT5jbWRfc3RhdHVzID0gMHhGRjsKKwlpbml0X2ZyYW1lLT5xdWV1ZV9pbmZvX25ld19waHlzX2FkZHJfbG8gPSBpbml0cV9pbmZvX2g7CisKKwlpbml0X2ZyYW1lLT5kYXRhX3hmZXJfbGVuID0gc2l6ZW9mKHN0cnVjdCBtZWdhc2FzX2luaXRfcXVldWVfaW5mbyk7CisKKwkvKgorCSAqIGRpc2FibGUgdGhlIGludHIgYmVmb3JlIGZpcmluZyB0aGUgaW5pdCBmcmFtZSB0byBGVworCSAqLworCWluc3RhbmNlLT5pbnN0YW5jZXQtPmRpc2FibGVfaW50cihpbnN0YW5jZS0+cmVnX3NldCk7CisKKwkvKgorCSAqIElzc3VlIHRoZSBpbml0IGZyYW1lIGluIHBvbGxlZCBtb2RlCisJICovCisKKwlpZiAobWVnYXNhc19pc3N1ZV9wb2xsZWQoaW5zdGFuY2UsIGNtZCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtZWdhc2FzOiBGYWlsZWQgdG8gaW5pdCBmaXJtd2FyZVxuIik7CisJCW1lZ2FzYXNfcmV0dXJuX2NtZChpbnN0YW5jZSwgY21kKTsKKwkJZ290byBmYWlsX2Z3X2luaXQ7CisJfQorCisJbWVnYXNhc19yZXR1cm5fY21kKGluc3RhbmNlLCBjbWQpOworCisJcmV0dXJuIDA7CisKK2ZhaWxfZndfaW5pdDoKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyoqCisgKiBtZWdhc2FzX3N0YXJ0X3RpbWVyIC0gSW5pdGlhbGl6ZXMgYSB0aW1lciBvYmplY3QKKyAqIEBpbnN0YW5jZToJCUFkYXB0ZXIgc29mdCBzdGF0ZQorICogQHRpbWVyOgkJdGltZXIgb2JqZWN0IHRvIGJlIGluaXRpYWxpemVkCisgKiBAZm46CQkJdGltZXIgZnVuY3Rpb24KKyAqIEBpbnRlcnZhbDoJCXRpbWUgaW50ZXJ2YWwgYmV0d2VlbiB0aW1lciBmdW5jdGlvbiBjYWxsCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorbWVnYXNhc19zdGFydF90aW1lcihzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UsCisJCQlzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIsCisJCQl2b2lkICpmbiwgdW5zaWduZWQgbG9uZyBpbnRlcnZhbCkKK3sKKwlpbml0X3RpbWVyKHRpbWVyKTsKKwl0aW1lci0+ZXhwaXJlcyA9IGppZmZpZXMgKyBpbnRlcnZhbDsKKwl0aW1lci0+ZGF0YSA9ICh1bnNpZ25lZCBsb25nKWluc3RhbmNlOworCXRpbWVyLT5mdW5jdGlvbiA9IGZuOworCWFkZF90aW1lcih0aW1lcik7Cit9CisKKy8qKgorICogbWVnYXNhc19pb19jb21wbGV0aW9uX3RpbWVyIC0gVGltZXIgZm4KKyAqIEBpbnN0YW5jZV9hZGRyOglBZGRyZXNzIG9mIGFkYXB0ZXIgc29mdCBzdGF0ZQorICoKKyAqIFNjaGVkdWxlcyB0YXNrbGV0IGZvciBjbWQgY29tcGxldGlvbgorICogaWYgcG9sbF9tb2RlX2lvIGlzIHNldAorICovCitzdGF0aWMgdm9pZAorbWVnYXNhc19pb19jb21wbGV0aW9uX3RpbWVyKHVuc2lnbmVkIGxvbmcgaW5zdGFuY2VfYWRkcikKK3sKKwlzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UgPQorCQkJKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICopaW5zdGFuY2VfYWRkcjsKKworCWlmIChhdG9taWNfcmVhZCgmaW5zdGFuY2UtPmZ3X291dHN0YW5kaW5nKSkKKwkJdGFza2xldF9zY2hlZHVsZSgmaW5zdGFuY2UtPmlzcl90YXNrbGV0KTsKKworCS8qIFJlc3RhcnQgdGltZXIgKi8KKwlpZiAocG9sbF9tb2RlX2lvKQorCQltb2RfdGltZXIoJmluc3RhbmNlLT5pb19jb21wbGV0aW9uX3RpbWVyLAorCQkJamlmZmllcyArIE1FR0FTQVNfQ09NUExFVElPTl9USU1FUl9JTlRFUlZBTCk7Cit9CisKK3N0YXRpYyB1MzIKK21lZ2FzYXNfaW5pdF9hZGFwdGVyX21maShzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UpCit7CisJc3RydWN0IG1lZ2FzYXNfcmVnaXN0ZXJfc2V0IF9faW9tZW0gKnJlZ19zZXQ7CisJdTMyIGNvbnRleHRfc3o7CisJdTMyIHJlcGx5X3Ffc3o7CisKKwlyZWdfc2V0ID0gaW5zdGFuY2UtPnJlZ19zZXQ7CisKKwkvKgorCSAqIEdldCB2YXJpb3VzIG9wZXJhdGlvbmFsIHBhcmFtZXRlcnMgZnJvbSBzdGF0dXMgcmVnaXN0ZXIKKwkgKi8KKwlpbnN0YW5jZS0+bWF4X2Z3X2NtZHMgPSBpbnN0YW5jZS0+aW5zdGFuY2V0LT5yZWFkX2Z3X3N0YXR1c19yZWcocmVnX3NldCkgJiAweDAwRkZGRjsKKwkvKgorCSAqIFJlZHVjZSB0aGUgbWF4IHN1cHBvcnRlZCBjbWRzIGJ5IDEuIFRoaXMgaXMgdG8gZW5zdXJlIHRoYXQgdGhlCisJICogcmVwbHlfcV9zeiAoMSBtb3JlIHRoYW4gdGhlIG1heCBjbWQgdGhhdCBkcml2ZXIgbWF5IHNlbmQpCisJICogZG9lcyBub3QgZXhjZWVkIG1heCBjbWRzIHRoYXQgdGhlIEZXIGNhbiBzdXBwb3J0CisJICovCisJaW5zdGFuY2UtPm1heF9md19jbWRzID0gaW5zdGFuY2UtPm1heF9md19jbWRzLTE7CisJaW5zdGFuY2UtPm1heF9tZmlfY21kcyA9IGluc3RhbmNlLT5tYXhfZndfY21kczsKKwlpbnN0YW5jZS0+bWF4X251bV9zZ2UgPSAoaW5zdGFuY2UtPmluc3RhbmNldC0+cmVhZF9md19zdGF0dXNfcmVnKHJlZ19zZXQpICYgMHhGRjAwMDApID4+CisJCQkJCTB4MTA7CisJLyoKKwkgKiBDcmVhdGUgYSBwb29sIG9mIGNvbW1hbmRzCisJICovCisJaWYgKG1lZ2FzYXNfYWxsb2NfY21kcyhpbnN0YW5jZSkpCisJCWdvdG8gZmFpbF9hbGxvY19jbWRzOworCisJLyoKKwkgKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIHJlcGx5IHF1ZXVlLiBMZW5ndGggb2YgcmVwbHkgcXVldWUgc2hvdWxkCisJICogYmUgX29uZV8gbW9yZSB0aGFuIHRoZSBtYXhpbXVtIGNvbW1hbmRzIGhhbmRsZWQgYnkgdGhlIGZpcm13YXJlLgorCSAqCisJICogTm90ZTogV2hlbiBGVyBjb21wbGV0ZXMgY29tbWFuZHMsIGl0IHBsYWNlcyBjb3JyZXNwb25kaW5nIGNvbnRleAorCSAqIHZhbHVlcyBpbiB0aGlzIGNpcmN1bGFyIHJlcGx5IHF1ZXVlLiBUaGlzIGNpcmN1bGFyIHF1ZXVlIGlzIGEgZmFpcmx5CisJICogdHlwaWNhbCBwcm9kdWNlci1jb25zdW1lciBxdWV1ZS4gRlcgaXMgdGhlIHByb2R1Y2VyIChvZiBjb21wbGV0ZWQKKwkgKiBjb21tYW5kcykgYW5kIHRoZSBkcml2ZXIgaXMgdGhlIGNvbnN1bWVyLgorCSAqLworCWNvbnRleHRfc3ogPSBzaXplb2YodTMyKTsKKwlyZXBseV9xX3N6ID0gY29udGV4dF9zeiAqIChpbnN0YW5jZS0+bWF4X2Z3X2NtZHMgKyAxKTsKKworCWluc3RhbmNlLT5yZXBseV9xdWV1ZSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGluc3RhbmNlLT5wZGV2LAorCQkJCQkJICAgICByZXBseV9xX3N6LAorCQkJCQkJICAgICAmaW5zdGFuY2UtPnJlcGx5X3F1ZXVlX2gpOworCisJaWYgKCFpbnN0YW5jZS0+cmVwbHlfcXVldWUpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIm1lZ2FzYXM6IE91dCBvZiBETUEgbWVtIGZvciByZXBseSBxdWV1ZVxuIik7CisJCWdvdG8gZmFpbF9yZXBseV9xdWV1ZTsKKwl9CisKKwlpZiAobWVnYXNhc19pc3N1ZV9pbml0X21maShpbnN0YW5jZSkpCisJCWdvdG8gZmFpbF9md19pbml0OworCisJaW5zdGFuY2UtPmZ3X3N1cHBvcnRfaWVlZSA9IDA7CisJaW5zdGFuY2UtPmZ3X3N1cHBvcnRfaWVlZSA9CisJCShpbnN0YW5jZS0+aW5zdGFuY2V0LT5yZWFkX2Z3X3N0YXR1c19yZWcocmVnX3NldCkgJgorCQkweDA0MDAwMDAwKTsKKworCXByaW50ayhLRVJOX05PVElDRSAibWVnYXNhc19pbml0X21maTogZndfc3VwcG9ydF9pZWVlPSVkIiwKKwkJCWluc3RhbmNlLT5md19zdXBwb3J0X2llZWUpOworCisJaWYgKGluc3RhbmNlLT5md19zdXBwb3J0X2llZWUpCisJCWluc3RhbmNlLT5mbGFnX2llZWUgPSAxOworCisJcmV0dXJuIDA7CisKK2ZhaWxfZndfaW5pdDoKKworCXBjaV9mcmVlX2NvbnNpc3RlbnQoaW5zdGFuY2UtPnBkZXYsIHJlcGx5X3Ffc3osCisJCQkgICAgaW5zdGFuY2UtPnJlcGx5X3F1ZXVlLCBpbnN0YW5jZS0+cmVwbHlfcXVldWVfaCk7CitmYWlsX3JlcGx5X3F1ZXVlOgorCW1lZ2FzYXNfZnJlZV9jbWRzKGluc3RhbmNlKTsKKworZmFpbF9hbGxvY19jbWRzOgorCWlvdW5tYXAoaW5zdGFuY2UtPnJlZ19zZXQpOworCXJldHVybiAxOworfQorCisvKioKKyAqIG1lZ2FzYXNfaW5pdF9mdyAtCUluaXRpYWxpemVzIHRoZSBGVworICogQGluc3RhbmNlOgkJQWRhcHRlciBzb2Z0IHN0YXRlCisgKgorICogVGhpcyBpcyB0aGUgbWFpbiBmdW5jdGlvbiBmb3IgaW5pdGlhbGl6aW5nIGZpcm13YXJlCisgKi8KKworc3RhdGljIGludCBtZWdhc2FzX2luaXRfZncoc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlKQoreworCXUzMiBtYXhfc2VjdG9yc18xOworCXUzMiBtYXhfc2VjdG9yc18yOworCXUzMiB0bXBfc2VjdG9yczsKKwlzdHJ1Y3QgbWVnYXNhc19yZWdpc3Rlcl9zZXQgX19pb21lbSAqcmVnX3NldDsKKwlzdHJ1Y3QgbWVnYXNhc19jdHJsX2luZm8gKmN0cmxfaW5mbzsKKwl1bnNpZ25lZCBsb25nIGJhcl9saXN0OworCisJLyogRmluZCBmaXJzdCBtZW1vcnkgYmFyICovCisJYmFyX2xpc3QgPSBwY2lfc2VsZWN0X2JhcnMoaW5zdGFuY2UtPnBkZXYsIElPUkVTT1VSQ0VfTUVNKTsKKwlpbnN0YW5jZS0+YmFyID0gZmluZF9maXJzdF9iaXQoJmJhcl9saXN0LCBzaXplb2YodW5zaWduZWQgbG9uZykpOworCWluc3RhbmNlLT5iYXNlX2FkZHIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoaW5zdGFuY2UtPnBkZXYsIGluc3RhbmNlLT5iYXIpOworCWlmIChwY2lfcmVxdWVzdF9zZWxlY3RlZF9yZWdpb25zKGluc3RhbmNlLT5wZGV2LCBpbnN0YW5jZS0+YmFyLAorCQkJCQkgIm1lZ2FzYXM6IExTSSIpKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJtZWdhc2FzOiBJTyBtZW1vcnkgcmVnaW9uIGJ1c3khXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlpbnN0YW5jZS0+cmVnX3NldCA9IGlvcmVtYXBfbm9jYWNoZShpbnN0YW5jZS0+YmFzZV9hZGRyLCA4MTkyKTsKKworCWlmICghaW5zdGFuY2UtPnJlZ19zZXQpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIm1lZ2FzYXM6IEZhaWxlZCB0byBtYXAgSU8gbWVtXG4iKTsKKwkJZ290byBmYWlsX2lvcmVtYXA7CisJfQorCisJcmVnX3NldCA9IGluc3RhbmNlLT5yZWdfc2V0OworCisJc3dpdGNoIChpbnN0YW5jZS0+cGRldi0+ZGV2aWNlKSB7CisJY2FzZSBQQ0lfREVWSUNFX0lEX0xTSV9GVVNJT046CisJCWluc3RhbmNlLT5pbnN0YW5jZXQgPSAmbWVnYXNhc19pbnN0YW5jZV90ZW1wbGF0ZV9mdXNpb247CisJCWJyZWFrOworCWNhc2UgUENJX0RFVklDRV9JRF9MU0lfU0FTMTA3OFI6CisJY2FzZSBQQ0lfREVWSUNFX0lEX0xTSV9TQVMxMDc4REU6CisJCWluc3RhbmNlLT5pbnN0YW5jZXQgPSAmbWVnYXNhc19pbnN0YW5jZV90ZW1wbGF0ZV9wcGM7CisJCWJyZWFrOworCWNhc2UgUENJX0RFVklDRV9JRF9MU0lfU0FTMTA3OEdFTjI6CisJY2FzZSBQQ0lfREVWSUNFX0lEX0xTSV9TQVMwMDc5R0VOMjoKKwkJaW5zdGFuY2UtPmluc3RhbmNldCA9ICZtZWdhc2FzX2luc3RhbmNlX3RlbXBsYXRlX2dlbjI7CisJCWJyZWFrOworCWNhc2UgUENJX0RFVklDRV9JRF9MU0lfU0FTMDA3M1NLSU5OWToKKwljYXNlIFBDSV9ERVZJQ0VfSURfTFNJX1NBUzAwNzFTS0lOTlk6CisJCWluc3RhbmNlLT5pbnN0YW5jZXQgPSAmbWVnYXNhc19pbnN0YW5jZV90ZW1wbGF0ZV9za2lubnk7CisJCWJyZWFrOworCWNhc2UgUENJX0RFVklDRV9JRF9MU0lfU0FTMTA2NFI6CisJY2FzZSBQQ0lfREVWSUNFX0lEX0RFTExfUEVSQzU6CisJZGVmYXVsdDoKKwkJaW5zdGFuY2UtPmluc3RhbmNldCA9ICZtZWdhc2FzX2luc3RhbmNlX3RlbXBsYXRlX3hzY2FsZTsKKwkJYnJlYWs7CisJfQorCisJLyoKKwkgKiBXZSBleHBlY3QgdGhlIEZXIHN0YXRlIHRvIGJlIFJFQURZCisJICovCisJaWYgKG1lZ2FzYXNfdHJhbnNpdGlvbl90b19yZWFkeShpbnN0YW5jZSkpCisJCWdvdG8gZmFpbF9yZWFkeV9zdGF0ZTsKKworCS8qIEdldCBvcGVyYXRpb25hbCBwYXJhbXMsIHNnZSBmbGFncywgc2VuZCBpbml0IGNtZCB0byBjb250cm9sbGVyICovCisJaWYgKGluc3RhbmNlLT5pbnN0YW5jZXQtPmluaXRfYWRhcHRlcihpbnN0YW5jZSkpCisJCXJldHVybiAtRU5PREVWOworCisJcHJpbnRrKEtFUk5fRVJSICJtZWdhc2FzOiBJTklUIGFkYXB0ZXIgZG9uZVxuIik7CisKKwkvKiogZm9yIHBhc3N0aHJvdWdoCisJKiB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uIHdpbGwgZ2V0IHRoZSBQRCBMSVNULgorCSovCisKKwltZW1zZXQoaW5zdGFuY2UtPnBkX2xpc3QsIDAgLAorCQkoTUVHQVNBU19NQVhfUEQgKiBzaXplb2Yoc3RydWN0IG1lZ2FzYXNfcGRfbGlzdCkpKTsKKwltZWdhc2FzX2dldF9wZF9saXN0KGluc3RhbmNlKTsKKworCW1lbXNldChpbnN0YW5jZS0+bGRfaWRzLCAweGZmLCBNRUdBU0FTX01BWF9MRF9JRFMpOworCW1lZ2FzYXNfZ2V0X2xkX2xpc3QoaW5zdGFuY2UpOworCisJY3RybF9pbmZvID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG1lZ2FzYXNfY3RybF9pbmZvKSwgR0ZQX0tFUk5FTCk7CisKKwkvKgorCSAqIENvbXB1dGUgdGhlIG1heCBhbGxvd2VkIHNlY3RvcnMgcGVyIElPOiBUaGUgY29udHJvbGxlciBpbmZvIGhhcyB0d28KKwkgKiBsaW1pdHMgb24gbWF4IHNlY3RvcnMuIERyaXZlciBzaG91bGQgdXNlIHRoZSBtaW5pbXVtIG9mIHRoZXNlIHR3by4KKwkgKgorCSAqIDEgPDwgc3RyaXBlX3N6X29wcy5taW4gPSBtYXggc2VjdG9ycyBwZXIgc3RyaXAKKwkgKgorCSAqIE5vdGUgdGhhdCBvbGRlciBmaXJtd2FyZXMgKCA8IEZXIHZlciAzMCkgZGlkbid0IHJlcG9ydCBpbmZvcm1hdGlvbgorCSAqIHRvIGNhbGN1bGF0ZSBtYXhfc2VjdG9yc18xLiBTbyB0aGUgbnVtYmVyIGVuZGVkIHVwIGFzIHplcm8gYWx3YXlzLgorCSAqLworCXRtcF9zZWN0b3JzID0gMDsKKwlpZiAoY3RybF9pbmZvICYmICFtZWdhc2FzX2dldF9jdHJsX2luZm8oaW5zdGFuY2UsIGN0cmxfaW5mbykpIHsKKworCQltYXhfc2VjdG9yc18xID0gKDEgPDwgY3RybF9pbmZvLT5zdHJpcGVfc3pfb3BzLm1pbikgKgorCQkgICAgY3RybF9pbmZvLT5tYXhfc3RyaXBzX3Blcl9pbzsKKwkJbWF4X3NlY3RvcnNfMiA9IGN0cmxfaW5mby0+bWF4X3JlcXVlc3Rfc2l6ZTsKKworCQl0bXBfc2VjdG9ycyA9IG1pbl90KHUzMiwgbWF4X3NlY3RvcnNfMSAsIG1heF9zZWN0b3JzXzIpOworCQlpbnN0YW5jZS0+ZGlzYWJsZU9ubGluZUN0cmxSZXNldCA9CisJCWN0cmxfaW5mby0+cHJvcGVydGllcy5Pbk9mZlByb3BlcnRpZXMuZGlzYWJsZU9ubGluZUN0cmxSZXNldDsKKwl9CisKKwlpbnN0YW5jZS0+bWF4X3NlY3RvcnNfcGVyX3JlcSA9IGluc3RhbmNlLT5tYXhfbnVtX3NnZSAqCisJCQkJCQlQQUdFX1NJWkUgLyA1MTI7CisJaWYgKHRtcF9zZWN0b3JzICYmIChpbnN0YW5jZS0+bWF4X3NlY3RvcnNfcGVyX3JlcSA+IHRtcF9zZWN0b3JzKSkKKwkJaW5zdGFuY2UtPm1heF9zZWN0b3JzX3Blcl9yZXEgPSB0bXBfc2VjdG9yczsKKworCWtmcmVlKGN0cmxfaW5mbyk7CisKKyAgICAgICAgLyoKKwkqIFNldHVwIHRhc2tsZXQgZm9yIGNtZCBjb21wbGV0aW9uCisJKi8KKworCXRhc2tsZXRfaW5pdCgmaW5zdGFuY2UtPmlzcl90YXNrbGV0LCBtZWdhc2FzX2NvbXBsZXRlX2NtZF9kcGMsCisJCSh1bnNpZ25lZCBsb25nKWluc3RhbmNlKTsKKworCS8qIEluaXRpYWxpemUgdGhlIGNtZCBjb21wbGV0aW9uIHRpbWVyICovCisJaWYgKHBvbGxfbW9kZV9pbykKKwkJbWVnYXNhc19zdGFydF90aW1lcihpbnN0YW5jZSwgJmluc3RhbmNlLT5pb19jb21wbGV0aW9uX3RpbWVyLAorCQkJCW1lZ2FzYXNfaW9fY29tcGxldGlvbl90aW1lciwKKwkJCQlNRUdBU0FTX0NPTVBMRVRJT05fVElNRVJfSU5URVJWQUwpOworCXJldHVybiAwOworCitmYWlsX3JlYWR5X3N0YXRlOgorCWlvdW5tYXAoaW5zdGFuY2UtPnJlZ19zZXQpOworCisgICAgICBmYWlsX2lvcmVtYXA6CisJcGNpX3JlbGVhc2Vfc2VsZWN0ZWRfcmVnaW9ucyhpbnN0YW5jZS0+cGRldiwgaW5zdGFuY2UtPmJhcik7CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyoqCisgKiBtZWdhc2FzX3JlbGVhc2VfbWZpIC0JUmV2ZXJzZXMgdGhlIEZXIGluaXRpYWxpemF0aW9uCisgKiBAaW50YW5jZToJCQlBZGFwdGVyIHNvZnQgc3RhdGUKKyAqLworc3RhdGljIHZvaWQgbWVnYXNhc19yZWxlYXNlX21maShzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UpCit7CisJdTMyIHJlcGx5X3Ffc3ogPSBzaXplb2YodTMyKSAqKGluc3RhbmNlLT5tYXhfbWZpX2NtZHMgKyAxKTsKKworCWlmIChpbnN0YW5jZS0+cmVwbHlfcXVldWUpCisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoaW5zdGFuY2UtPnBkZXYsIHJlcGx5X3Ffc3osCisJCQkgICAgaW5zdGFuY2UtPnJlcGx5X3F1ZXVlLCBpbnN0YW5jZS0+cmVwbHlfcXVldWVfaCk7CisKKwltZWdhc2FzX2ZyZWVfY21kcyhpbnN0YW5jZSk7CisKKwlpb3VubWFwKGluc3RhbmNlLT5yZWdfc2V0KTsKKworCXBjaV9yZWxlYXNlX3NlbGVjdGVkX3JlZ2lvbnMoaW5zdGFuY2UtPnBkZXYsIGluc3RhbmNlLT5iYXIpOworfQorCisvKioKKyAqIG1lZ2FzYXNfZ2V0X3NlcV9udW0gLQlHZXRzIGxhdGVzdCBldmVudCBzZXF1ZW5jZSBudW1iZXJzCisgKiBAaW5zdGFuY2U6CQkJQWRhcHRlciBzb2Z0IHN0YXRlCisgKiBAZWxpOgkJCUZXIGV2ZW50IGxvZyBzZXF1ZW5jZSBudW1iZXJzIGluZm9ybWF0aW9uCisgKgorICogRlcgbWFpbnRhaW5zIGEgbG9nIG9mIGFsbCBldmVudHMgaW4gYSBub24tdm9sYXRpbGUgYXJlYS4gVXBwZXIgbGF5ZXJzIHdvdWxkCisgKiB1c3VhbGx5IGZpbmQgb3V0IHRoZSBsYXRlc3Qgc2VxdWVuY2UgbnVtYmVyIG9mIHRoZSBldmVudHMsIHRoZSBzZXEgbnVtYmVyIGF0CisgKiB0aGUgYm9vdCBldGMuIFRoZXkgd291bGQgInJlYWQiIGFsbCB0aGUgZXZlbnRzIGJlbG93IHRoZSBsYXRlc3Qgc2VxIG51bWJlcgorICogYnkgaXNzdWluZyBhIGRpcmVjdCBmdyBjbWQgKERDTUQpLiBGb3IgdGhlIGZ1dHVyZSBldmVudHMgKGJleW9uZCBsYXRlc3Qgc2VxCisgKiBudW1iZXIpLCB0aGV5IHdvdWxkIHN1YnNyaWJlIHRvIEFFTiAoYXN5bmNocm9ub3VzIGV2ZW50IG5vdGlmaWNhdGlvbikgYW5kCisgKiB3YWl0IGZvciB0aGUgZXZlbnRzIHRvIGhhcHBlbi4KKyAqLworc3RhdGljIGludAorbWVnYXNhc19nZXRfc2VxX251bShzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UsCisJCSAgICBzdHJ1Y3QgbWVnYXNhc19ldnRfbG9nX2luZm8gKmVsaSkKK3sKKwlzdHJ1Y3QgbWVnYXNhc19jbWQgKmNtZDsKKwlzdHJ1Y3QgbWVnYXNhc19kY21kX2ZyYW1lICpkY21kOworCXN0cnVjdCBtZWdhc2FzX2V2dF9sb2dfaW5mbyAqZWxfaW5mbzsKKwlkbWFfYWRkcl90IGVsX2luZm9faCA9IDA7CisKKwljbWQgPSBtZWdhc2FzX2dldF9jbWQoaW5zdGFuY2UpOworCisJaWYgKCFjbWQpIHsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZGNtZCA9ICZjbWQtPmZyYW1lLT5kY21kOworCWVsX2luZm8gPSBwY2lfYWxsb2NfY29uc2lzdGVudChpbnN0YW5jZS0+cGRldiwKKwkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBtZWdhc2FzX2V2dF9sb2dfaW5mbyksCisJCQkJICAgICAgICZlbF9pbmZvX2gpOworCisJaWYgKCFlbF9pbmZvKSB7CisJCW1lZ2FzYXNfcmV0dXJuX2NtZChpbnN0YW5jZSwgY21kKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJbWVtc2V0KGVsX2luZm8sIDAsIHNpemVvZigqZWxfaW5mbykpOworCW1lbXNldChkY21kLT5tYm94LmIsIDAsIE1GSV9NQk9YX1NJWkUpOworCisJZGNtZC0+Y21kID0gTUZJX0NNRF9EQ01EOworCWRjbWQtPmNtZF9zdGF0dXMgPSAweDA7CisJZGNtZC0+c2dlX2NvdW50ID0gMTsKKwlkY21kLT5mbGFncyA9IE1GSV9GUkFNRV9ESVJfUkVBRDsKKwlkY21kLT50aW1lb3V0ID0gMDsKKwlkY21kLT5wYWRfMCA9IDA7CisJZGNtZC0+ZGF0YV94ZmVyX2xlbiA9IHNpemVvZihzdHJ1Y3QgbWVnYXNhc19ldnRfbG9nX2luZm8pOworCWRjbWQtPm9wY29kZSA9IE1SX0RDTURfQ1RSTF9FVkVOVF9HRVRfSU5GTzsKKwlkY21kLT5zZ2wuc2dlMzJbMF0ucGh5c19hZGRyID0gZWxfaW5mb19oOworCWRjbWQtPnNnbC5zZ2UzMlswXS5sZW5ndGggPSBzaXplb2Yoc3RydWN0IG1lZ2FzYXNfZXZ0X2xvZ19pbmZvKTsKKworCW1lZ2FzYXNfaXNzdWVfYmxvY2tlZF9jbWQoaW5zdGFuY2UsIGNtZCk7CisKKwkvKgorCSAqIENvcHkgdGhlIGRhdGEgYmFjayBpbnRvIGNhbGxlcnMgYnVmZmVyCisJICovCisJbWVtY3B5KGVsaSwgZWxfaW5mbywgc2l6ZW9mKHN0cnVjdCBtZWdhc2FzX2V2dF9sb2dfaW5mbykpOworCisJcGNpX2ZyZWVfY29uc2lzdGVudChpbnN0YW5jZS0+cGRldiwgc2l6ZW9mKHN0cnVjdCBtZWdhc2FzX2V2dF9sb2dfaW5mbyksCisJCQkgICAgZWxfaW5mbywgZWxfaW5mb19oKTsKKworCW1lZ2FzYXNfcmV0dXJuX2NtZChpbnN0YW5jZSwgY21kKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIG1lZ2FzYXNfcmVnaXN0ZXJfYWVuIC0JUmVnaXN0ZXJzIGZvciBhc3luY2hyb25vdXMgZXZlbnQgbm90aWZpY2F0aW9uCisgKiBAaW5zdGFuY2U6CQkJQWRhcHRlciBzb2Z0IHN0YXRlCisgKiBAc2VxX251bToJCQlUaGUgc3RhcnRpbmcgc2VxdWVuY2UgbnVtYmVyCisgKiBAY2xhc3NfbG9jYWxlOgkJQ2xhc3Mgb2YgdGhlIGV2ZW50CisgKgorICogVGhpcyBmdW5jdGlvbiBzdWJzY3JpYmVzIGZvciBBRU4gZm9yIGV2ZW50cyBiZXlvbmQgdGhlIEBzZXFfbnVtLiBJdCByZXF1ZXN0cworICogdG8gYmUgbm90aWZpZWQgaWYgYW5kIG9ubHkgaWYgdGhlIGV2ZW50IGlzIG9mIHR5cGUgQGNsYXNzX2xvY2FsZQorICovCitzdGF0aWMgaW50CittZWdhc2FzX3JlZ2lzdGVyX2FlbihzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UsIHUzMiBzZXFfbnVtLAorCQkgICAgIHUzMiBjbGFzc19sb2NhbGVfd29yZCkKK3sKKwlpbnQgcmV0X3ZhbDsKKwlzdHJ1Y3QgbWVnYXNhc19jbWQgKmNtZDsKKwlzdHJ1Y3QgbWVnYXNhc19kY21kX2ZyYW1lICpkY21kOworCXVuaW9uIG1lZ2FzYXNfZXZ0X2NsYXNzX2xvY2FsZSBjdXJyX2FlbjsKKwl1bmlvbiBtZWdhc2FzX2V2dF9jbGFzc19sb2NhbGUgcHJldl9hZW47CisKKwkvKgorCSAqIElmIHRoZXJlIGFuIEFFTiBwZW5kaW5nIGFscmVhZHkgKGFlbl9jbWQpLCBjaGVjayBpZiB0aGUKKwkgKiBjbGFzc19sb2NhbGUgb2YgdGhhdCBwZW5kaW5nIEFFTiBpcyBpbmNsdXNpdmUgb2YgdGhlIG5ldworCSAqIEFFTiByZXF1ZXN0IHdlIGN1cnJlbnRseSBoYXZlLiBJZiBpdCBpcywgdGhlbiB3ZSBkb24ndCBoYXZlCisJICogdG8gZG8gYW55dGhpbmcuIEluIG90aGVyIHdvcmRzLCB3aGljaGV2ZXIgZXZlbnRzIHRoZSBjdXJyZW50CisJICogQUVOIHJlcXVlc3QgaXMgc3Vic2NyaWJpbmcgdG8sIGhhdmUgYWxyZWFkeSBiZWVuIHN1YnNjcmliZWQKKwkgKiB0by4KKwkgKgorCSAqIElmIHRoZSBvbGRfY21kIGlzIF9ub3RfIGluY2x1c2l2ZSwgdGhlbiB3ZSBoYXZlIHRvIGFib3J0CisJICogdGhhdCBjb21tYW5kLCBmb3JtIGEgY2xhc3NfbG9jYWxlIHRoYXQgaXMgc3VwZXJzZXQgb2YgYm90aAorCSAqIG9sZCBhbmQgY3VycmVudCBhbmQgcmUtaXNzdWUgdG8gdGhlIEZXCisJICovCisKKwljdXJyX2Flbi53b3JkID0gY2xhc3NfbG9jYWxlX3dvcmQ7CisKKwlpZiAoaW5zdGFuY2UtPmFlbl9jbWQpIHsKKworCQlwcmV2X2Flbi53b3JkID0gaW5zdGFuY2UtPmFlbl9jbWQtPmZyYW1lLT5kY21kLm1ib3gud1sxXTsKKworCQkvKgorCQkgKiBBIGNsYXNzIHdob3NlIGVudW0gdmFsdWUgaXMgc21hbGxlciBpcyBpbmNsdXNpdmUgb2YgYWxsCisJCSAqIGhpZ2hlciB2YWx1ZXMuIElmIGEgUFJPR1JFU1MgKD0gLTEpIHdhcyBwcmV2aW91c2x5CisJCSAqIHJlZ2lzdGVyZWQsIHRoZW4gYSBuZXcgcmVnaXN0cmF0aW9uIHJlcXVlc3RzIGZvciBoaWdoZXIKKwkJICogY2xhc3NlcyBuZWVkIG5vdCBiZSBzZW50IHRvIEZXLiBUaGV5IGFyZSBhdXRvbWF0aWNhbGx5CisJCSAqIGluY2x1ZGVkLgorCQkgKgorCQkgKiBMb2NhbGUgbnVtYmVycyBkb24ndCBoYXZlIHN1Y2ggaGllcmFyY2h5LiBUaGV5IGFyZSBiaXRtYXAKKwkJICogdmFsdWVzCisJCSAqLworCQlpZiAoKHByZXZfYWVuLm1lbWJlcnMuY2xhc3MgPD0gY3Vycl9hZW4ubWVtYmVycy5jbGFzcykgJiYKKwkJICAgICEoKHByZXZfYWVuLm1lbWJlcnMubG9jYWxlICYgY3Vycl9hZW4ubWVtYmVycy5sb2NhbGUpIF4KKwkJICAgICAgY3Vycl9hZW4ubWVtYmVycy5sb2NhbGUpKSB7CisJCQkvKgorCQkJICogUHJldmlvdXNseSBpc3N1ZWQgZXZlbnQgcmVnaXN0cmF0aW9uIGluY2x1ZGVzCisJCQkgKiBjdXJyZW50IHJlcXVlc3QuIE5vdGhpbmcgdG8gZG8uCisJCQkgKi8KKwkJCXJldHVybiAwOworCQl9IGVsc2UgeworCQkJY3Vycl9hZW4ubWVtYmVycy5sb2NhbGUgfD0gcHJldl9hZW4ubWVtYmVycy5sb2NhbGU7CisKKwkJCWlmIChwcmV2X2Flbi5tZW1iZXJzLmNsYXNzIDwgY3Vycl9hZW4ubWVtYmVycy5jbGFzcykKKwkJCQljdXJyX2Flbi5tZW1iZXJzLmNsYXNzID0gcHJldl9hZW4ubWVtYmVycy5jbGFzczsKKworCQkJaW5zdGFuY2UtPmFlbl9jbWQtPmFib3J0X2FlbiA9IDE7CisJCQlyZXRfdmFsID0gbWVnYXNhc19pc3N1ZV9ibG9ja2VkX2Fib3J0X2NtZChpbnN0YW5jZSwKKwkJCQkJCQkJICBpbnN0YW5jZS0+CisJCQkJCQkJCSAgYWVuX2NtZCk7CisKKwkJCWlmIChyZXRfdmFsKSB7CisJCQkJcHJpbnRrKEtFUk5fREVCVUcgIm1lZ2FzYXM6IEZhaWxlZCB0byBhYm9ydCAiCisJCQkJICAgICAgICJwcmV2aW91cyBBRU4gY29tbWFuZFxuIik7CisJCQkJcmV0dXJuIHJldF92YWw7CisJCQl9CisJCX0KKwl9CisKKwljbWQgPSBtZWdhc2FzX2dldF9jbWQoaW5zdGFuY2UpOworCisJaWYgKCFjbWQpCisJCXJldHVybiAtRU5PTUVNOworCisJZGNtZCA9ICZjbWQtPmZyYW1lLT5kY21kOworCisJbWVtc2V0KGluc3RhbmNlLT5ldnRfZGV0YWlsLCAwLCBzaXplb2Yoc3RydWN0IG1lZ2FzYXNfZXZ0X2RldGFpbCkpOworCisJLyoKKwkgKiBQcmVwYXJlIERDTUQgZm9yIGFlbiByZWdpc3RyYXRpb24KKwkgKi8KKwltZW1zZXQoZGNtZC0+bWJveC5iLCAwLCBNRklfTUJPWF9TSVpFKTsKKworCWRjbWQtPmNtZCA9IE1GSV9DTURfRENNRDsKKwlkY21kLT5jbWRfc3RhdHVzID0gMHgwOworCWRjbWQtPnNnZV9jb3VudCA9IDE7CisJZGNtZC0+ZmxhZ3MgPSBNRklfRlJBTUVfRElSX1JFQUQ7CisJZGNtZC0+dGltZW91dCA9IDA7CisJZGNtZC0+cGFkXzAgPSAwOworCWluc3RhbmNlLT5sYXN0X3NlcV9udW0gPSBzZXFfbnVtOworCWRjbWQtPmRhdGFfeGZlcl9sZW4gPSBzaXplb2Yoc3RydWN0IG1lZ2FzYXNfZXZ0X2RldGFpbCk7CisJZGNtZC0+b3Bjb2RlID0gTVJfRENNRF9DVFJMX0VWRU5UX1dBSVQ7CisJZGNtZC0+bWJveC53WzBdID0gc2VxX251bTsKKwlkY21kLT5tYm94LndbMV0gPSBjdXJyX2Flbi53b3JkOworCWRjbWQtPnNnbC5zZ2UzMlswXS5waHlzX2FkZHIgPSAodTMyKSBpbnN0YW5jZS0+ZXZ0X2RldGFpbF9oOworCWRjbWQtPnNnbC5zZ2UzMlswXS5sZW5ndGggPSBzaXplb2Yoc3RydWN0IG1lZ2FzYXNfZXZ0X2RldGFpbCk7CisKKwlpZiAoaW5zdGFuY2UtPmFlbl9jbWQgIT0gTlVMTCkgeworCQltZWdhc2FzX3JldHVybl9jbWQoaW5zdGFuY2UsIGNtZCk7CisJCXJldHVybiAwOworCX0KKworCS8qCisJICogU3RvcmUgcmVmZXJlbmNlIHRvIHRoZSBjbWQgdXNlZCB0byByZWdpc3RlciBmb3IgQUVOLiBXaGVuIGFuCisJICogYXBwbGljYXRpb24gd2FudHMgdXMgdG8gcmVnaXN0ZXIgZm9yIEFFTiwgd2UgaGF2ZSB0byBhYm9ydCB0aGlzCisJICogY21kIGFuZCByZS1yZWdpc3RlciB3aXRoIGEgbmV3IEVWRU5UIExPQ0FMRSBzdXBwbGllZCBieSB0aGF0IGFwcAorCSAqLworCWluc3RhbmNlLT5hZW5fY21kID0gY21kOworCisJLyoKKwkgKiBJc3N1ZSB0aGUgYWVuIHJlZ2lzdHJhdGlvbiBmcmFtZQorCSAqLworCWluc3RhbmNlLT5pbnN0YW5jZXQtPmlzc3VlX2RjbWQoaW5zdGFuY2UsIGNtZCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBtZWdhc2FzX3N0YXJ0X2FlbiAtCVN1YnNjcmliZXMgdG8gQUVOIGR1cmluZyBkcml2ZXIgbG9hZCB0aW1lCisgKiBAaW5zdGFuY2U6CQlBZGFwdGVyIHNvZnQgc3RhdGUKKyAqLworc3RhdGljIGludCBtZWdhc2FzX3N0YXJ0X2FlbihzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UpCit7CisJc3RydWN0IG1lZ2FzYXNfZXZ0X2xvZ19pbmZvIGVsaTsKKwl1bmlvbiBtZWdhc2FzX2V2dF9jbGFzc19sb2NhbGUgY2xhc3NfbG9jYWxlOworCisJLyoKKwkgKiBHZXQgdGhlIGxhdGVzdCBzZXF1ZW5jZSBudW1iZXIgZnJvbSBGVworCSAqLworCW1lbXNldCgmZWxpLCAwLCBzaXplb2YoZWxpKSk7CisKKwlpZiAobWVnYXNhc19nZXRfc2VxX251bShpbnN0YW5jZSwgJmVsaSkpCisJCXJldHVybiAtMTsKKworCS8qCisJICogUmVnaXN0ZXIgQUVOIHdpdGggRlcgZm9yIGxhdGVzdCBzZXF1ZW5jZSBudW1iZXIgcGx1cyAxCisJICovCisJY2xhc3NfbG9jYWxlLm1lbWJlcnMucmVzZXJ2ZWQgPSAwOworCWNsYXNzX2xvY2FsZS5tZW1iZXJzLmxvY2FsZSA9IE1SX0VWVF9MT0NBTEVfQUxMOworCWNsYXNzX2xvY2FsZS5tZW1iZXJzLmNsYXNzID0gTVJfRVZUX0NMQVNTX0RFQlVHOworCisJcmV0dXJuIG1lZ2FzYXNfcmVnaXN0ZXJfYWVuKGluc3RhbmNlLCBlbGkubmV3ZXN0X3NlcV9udW0gKyAxLAorCQkJCSAgICBjbGFzc19sb2NhbGUud29yZCk7Cit9CisKKy8qKgorICogbWVnYXNhc19pb19hdHRhY2ggLQlBdHRhY2hlcyB0aGlzIGRyaXZlciB0byBTQ1NJIG1pZC1sYXllcgorICogQGluc3RhbmNlOgkJQWRhcHRlciBzb2Z0IHN0YXRlCisgKi8KK3N0YXRpYyBpbnQgbWVnYXNhc19pb19hdHRhY2goc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlKQoreworCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSBpbnN0YW5jZS0+aG9zdDsKKworCS8qCisJICogRXhwb3J0IHBhcmFtZXRlcnMgcmVxdWlyZWQgYnkgU0NTSSBtaWQtbGF5ZXIKKwkgKi8KKwlob3N0LT5pcnEgPSBpbnN0YW5jZS0+cGRldi0+aXJxOworCWhvc3QtPnVuaXF1ZV9pZCA9IGluc3RhbmNlLT51bmlxdWVfaWQ7CisJaWYgKChpbnN0YW5jZS0+cGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfTFNJX1NBUzAwNzNTS0lOTlkpIHx8CisJCShpbnN0YW5jZS0+cGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfTFNJX1NBUzAwNzFTS0lOTlkpKSB7CisJCWhvc3QtPmNhbl9xdWV1ZSA9CisJCQlpbnN0YW5jZS0+bWF4X2Z3X2NtZHMgLSBNRUdBU0FTX1NLSU5OWV9JTlRfQ01EUzsKKwl9IGVsc2UKKwkJaG9zdC0+Y2FuX3F1ZXVlID0KKwkJCWluc3RhbmNlLT5tYXhfZndfY21kcyAtIE1FR0FTQVNfSU5UX0NNRFM7CisJaG9zdC0+dGhpc19pZCA9IGluc3RhbmNlLT5pbml0X2lkOworCWhvc3QtPnNnX3RhYmxlc2l6ZSA9IGluc3RhbmNlLT5tYXhfbnVtX3NnZTsKKwkvKgorCSAqIENoZWNrIGlmIHRoZSBtb2R1bGUgcGFyYW1ldGVyIHZhbHVlIGZvciBtYXhfc2VjdG9ycyBjYW4gYmUgdXNlZAorCSAqLworCWlmIChtYXhfc2VjdG9ycyAmJiBtYXhfc2VjdG9ycyA8IGluc3RhbmNlLT5tYXhfc2VjdG9yc19wZXJfcmVxKQorCQlpbnN0YW5jZS0+bWF4X3NlY3RvcnNfcGVyX3JlcSA9IG1heF9zZWN0b3JzOworCWVsc2UgeworCQlpZiAobWF4X3NlY3RvcnMpIHsKKwkJCWlmICgoKGluc3RhbmNlLT5wZGV2LT5kZXZpY2UgPT0KKwkJCQlQQ0lfREVWSUNFX0lEX0xTSV9TQVMxMDc4R0VOMikgfHwKKwkJCQkoaW5zdGFuY2UtPnBkZXYtPmRldmljZSA9PQorCQkJCVBDSV9ERVZJQ0VfSURfTFNJX1NBUzAwNzlHRU4yKSkgJiYKKwkJCQkobWF4X3NlY3RvcnMgPD0gTUVHQVNBU19NQVhfU0VDVE9SUykpIHsKKwkJCQlpbnN0YW5jZS0+bWF4X3NlY3RvcnNfcGVyX3JlcSA9IG1heF9zZWN0b3JzOworCQkJfSBlbHNlIHsKKwkJCXByaW50ayhLRVJOX0lORk8gIm1lZ2FzYXM6IG1heF9zZWN0b3JzIHNob3VsZCBiZSA+IDAiCisJCQkJImFuZCA8PSAlZCAob3IgPCAxTUIgZm9yIEdFTjIgY29udHJvbGxlcilcbiIsCisJCQkJaW5zdGFuY2UtPm1heF9zZWN0b3JzX3Blcl9yZXEpOworCQkJfQorCQl9CisJfQorCisJaG9zdC0+bWF4X3NlY3RvcnMgPSBpbnN0YW5jZS0+bWF4X3NlY3RvcnNfcGVyX3JlcTsKKwlob3N0LT5jbWRfcGVyX2x1biA9IE1FR0FTQVNfREVGQVVMVF9DTURfUEVSX0xVTjsKKwlob3N0LT5tYXhfY2hhbm5lbCA9IE1FR0FTQVNfTUFYX0NIQU5ORUxTIC0gMTsKKwlob3N0LT5tYXhfaWQgPSBNRUdBU0FTX01BWF9ERVZfUEVSX0NIQU5ORUw7CisJaG9zdC0+bWF4X2x1biA9IE1FR0FTQVNfTUFYX0xVTjsKKwlob3N0LT5tYXhfY21kX2xlbiA9IDE2OworCisJLyogRnVzaW9uIG9ubHkgc3VwcG9ydHMgaG9zdCByZXNldCAqLworCWlmIChpbnN0YW5jZS0+cGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfTFNJX0ZVU0lPTikgeworCQlob3N0LT5ob3N0dC0+ZWhfZGV2aWNlX3Jlc2V0X2hhbmRsZXIgPSBOVUxMOworCQlob3N0LT5ob3N0dC0+ZWhfYnVzX3Jlc2V0X2hhbmRsZXIgPSBOVUxMOworCX0KKworCS8qCisJICogTm90aWZ5IHRoZSBtaWQtbGF5ZXIgYWJvdXQgdGhlIG5ldyBjb250cm9sbGVyCisJICovCisJaWYgKHNjc2lfYWRkX2hvc3QoaG9zdCwgJmluc3RhbmNlLT5wZGV2LT5kZXYpKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJtZWdhc2FzOiBzY3NpX2FkZF9ob3N0IGZhaWxlZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qCisJICogVHJpZ2dlciBTQ1NJIHRvIHNjYW4gb3VyIGRyaXZlcworCSAqLworCXNjc2lfc2Nhbl9ob3N0KGhvc3QpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CittZWdhc2FzX3NldF9kbWFfbWFzayhzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwkvKgorCSAqIEFsbCBvdXIgY29udG9sbGVycyBhcmUgY2FwYWJsZSBvZiBwZXJmb3JtaW5nIDY0LWJpdCBETUEKKwkgKi8KKwlpZiAoSVNfRE1BNjQpIHsKKwkJaWYgKHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDY0KSkgIT0gMCkgeworCisJCQlpZiAocGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soMzIpKSAhPSAwKQorCQkJCWdvdG8gZmFpbF9zZXRfZG1hX21hc2s7CisJCX0KKwl9IGVsc2UgeworCQlpZiAocGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soMzIpKSAhPSAwKQorCQkJZ290byBmYWlsX3NldF9kbWFfbWFzazsKKwl9CisJcmV0dXJuIDA7CisKK2ZhaWxfc2V0X2RtYV9tYXNrOgorCXJldHVybiAxOworfQorCisvKioKKyAqIG1lZ2FzYXNfcHJvYmVfb25lIC0JUENJIGhvdHBsdWcgZW50cnkgcG9pbnQKKyAqIEBwZGV2OgkJUENJIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEBpZDoJCQlQQ0kgaWRzIG9mIHN1cHBvcnRlZCBob3RwbHVnZ2VkIGFkYXB0ZXIKKyAqLworc3RhdGljIGludCBfX2RldmluaXQKK21lZ2FzYXNfcHJvYmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCit7CisJaW50IHJ2YWw7CisJc3RydWN0IFNjc2lfSG9zdCAqaG9zdDsKKwlzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2U7CisKKwkvKgorCSAqIEFubm91bmNlIFBDSSBpbmZvcm1hdGlvbgorCSAqLworCXByaW50ayhLRVJOX0lORk8gIm1lZ2FzYXM6ICUjNC4wNHg6JSM0LjA0eDolIzQuMDR4OiUjNC4wNHg6ICIsCisJICAgICAgIHBkZXYtPnZlbmRvciwgcGRldi0+ZGV2aWNlLCBwZGV2LT5zdWJzeXN0ZW1fdmVuZG9yLAorCSAgICAgICBwZGV2LT5zdWJzeXN0ZW1fZGV2aWNlKTsKKworCXByaW50aygiYnVzICVkOnNsb3QgJWQ6ZnVuYyAlZFxuIiwKKwkgICAgICAgcGRldi0+YnVzLT5udW1iZXIsIFBDSV9TTE9UKHBkZXYtPmRldmZuKSwgUENJX0ZVTkMocGRldi0+ZGV2Zm4pKTsKKworCS8qCisJICogUENJIHByZXBwaW5nOiBlbmFibGUgZGV2aWNlIHNldCBidXMgbWFzdGVyaW5nIGFuZCBkbWEgbWFzaworCSAqLworCXJ2YWwgPSBwY2lfZW5hYmxlX2RldmljZV9tZW0ocGRldik7CisKKwlpZiAocnZhbCkgeworCQlyZXR1cm4gcnZhbDsKKwl9CisKKwlwY2lfc2V0X21hc3RlcihwZGV2KTsKKworCWlmIChtZWdhc2FzX3NldF9kbWFfbWFzayhwZGV2KSkKKwkJZ290byBmYWlsX3NldF9kbWFfbWFzazsKKworCWhvc3QgPSBzY3NpX2hvc3RfYWxsb2MoJm1lZ2FzYXNfdGVtcGxhdGUsCisJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlKSk7CisKKwlpZiAoIWhvc3QpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIm1lZ2FzYXM6IHNjc2lfaG9zdF9hbGxvYyBmYWlsZWRcbiIpOworCQlnb3RvIGZhaWxfYWxsb2NfaW5zdGFuY2U7CisJfQorCisJaW5zdGFuY2UgPSAoc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKilob3N0LT5ob3N0ZGF0YTsKKwltZW1zZXQoaW5zdGFuY2UsIDAsIHNpemVvZigqaW5zdGFuY2UpKTsKKwlhdG9taWNfc2V0KCAmaW5zdGFuY2UtPmZ3X3Jlc2V0X25vX3BjaV9hY2Nlc3MsIDAgKTsKKwlpbnN0YW5jZS0+cGRldiA9IHBkZXY7CisKKwlzd2l0Y2ggKGluc3RhbmNlLT5wZGV2LT5kZXZpY2UpIHsKKwljYXNlIFBDSV9ERVZJQ0VfSURfTFNJX0ZVU0lPTjoKKwl7CisJCXN0cnVjdCBmdXNpb25fY29udGV4dCAqZnVzaW9uOworCisJCWluc3RhbmNlLT5jdHJsX2NvbnRleHQgPQorCQkJa3phbGxvYyhzaXplb2Yoc3RydWN0IGZ1c2lvbl9jb250ZXh0KSwgR0ZQX0tFUk5FTCk7CisJCWlmICghaW5zdGFuY2UtPmN0cmxfY29udGV4dCkgeworCQkJcHJpbnRrKEtFUk5fREVCVUcgIm1lZ2FzYXM6IEZhaWxlZCB0byBhbGxvY2F0ZSAiCisJCQkgICAgICAgIm1lbW9yeSBmb3IgRnVzaW9uIGNvbnRleHQgaW5mb1xuIik7CisJCQlnb3RvIGZhaWxfYWxsb2NfZG1hX2J1ZjsKKwkJfQorCQlmdXNpb24gPSBpbnN0YW5jZS0+Y3RybF9jb250ZXh0OworCQlJTklUX0xJU1RfSEVBRCgmZnVzaW9uLT5jbWRfcG9vbCk7CisJCXNwaW5fbG9ja19pbml0KCZmdXNpb24tPmNtZF9wb29sX2xvY2spOworCX0KKwlicmVhazsKKwlkZWZhdWx0OiAvKiBGb3IgYWxsIG90aGVyIHN1cHBvcnRlZCBjb250cm9sbGVycyAqLworCisJCWluc3RhbmNlLT5wcm9kdWNlciA9CisJCQlwY2lfYWxsb2NfY29uc2lzdGVudChwZGV2LCBzaXplb2YodTMyKSwKKwkJCQkJICAgICAmaW5zdGFuY2UtPnByb2R1Y2VyX2gpOworCQlpbnN0YW5jZS0+Y29uc3VtZXIgPQorCQkJcGNpX2FsbG9jX2NvbnNpc3RlbnQocGRldiwgc2l6ZW9mKHUzMiksCisJCQkJCSAgICAgJmluc3RhbmNlLT5jb25zdW1lcl9oKTsKKworCQlpZiAoIWluc3RhbmNlLT5wcm9kdWNlciB8fCAhaW5zdGFuY2UtPmNvbnN1bWVyKSB7CisJCQlwcmludGsoS0VSTl9ERUJVRyAibWVnYXNhczogRmFpbGVkIHRvIGFsbG9jYXRlIgorCQkJICAgICAgICJtZW1vcnkgZm9yIHByb2R1Y2VyLCBjb25zdW1lclxuIik7CisJCQlnb3RvIGZhaWxfYWxsb2NfZG1hX2J1ZjsKKwkJfQorCisJCSppbnN0YW5jZS0+cHJvZHVjZXIgPSAwOworCQkqaW5zdGFuY2UtPmNvbnN1bWVyID0gMDsKKwkJYnJlYWs7CisJfQorCisJbWVnYXNhc19wb2xsX3dhaXRfYWVuID0gMDsKKwlpbnN0YW5jZS0+ZmxhZ19pZWVlID0gMDsKKwlpbnN0YW5jZS0+ZXYgPSBOVUxMOworCWluc3RhbmNlLT5pc3N1ZXBlbmRfZG9uZSA9IDE7CisJaW5zdGFuY2UtPmFkcHJlY292ZXJ5ID0gTUVHQVNBU19IQkFfT1BFUkFUSU9OQUw7CisJbWVnYXNhc19wb2xsX3dhaXRfYWVuID0gMDsKKworCWluc3RhbmNlLT5ldnRfZGV0YWlsID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocGRldiwKKwkJCQkJCSAgICBzaXplb2Yoc3RydWN0CisJCQkJCQkJICAgbWVnYXNhc19ldnRfZGV0YWlsKSwKKwkJCQkJCSAgICAmaW5zdGFuY2UtPmV2dF9kZXRhaWxfaCk7CisKKwlpZiAoIWluc3RhbmNlLT5ldnRfZGV0YWlsKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJtZWdhc2FzOiBGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciAiCisJCSAgICAgICAiZXZlbnQgZGV0YWlsIHN0cnVjdHVyZVxuIik7CisJCWdvdG8gZmFpbF9hbGxvY19kbWFfYnVmOworCX0KKworCS8qCisJICogSW5pdGlhbGl6ZSBsb2NrcyBhbmQgcXVldWVzCisJICovCisJSU5JVF9MSVNUX0hFQUQoJmluc3RhbmNlLT5jbWRfcG9vbCk7CisJSU5JVF9MSVNUX0hFQUQoJmluc3RhbmNlLT5pbnRlcm5hbF9yZXNldF9wZW5kaW5nX3EpOworCisJYXRvbWljX3NldCgmaW5zdGFuY2UtPmZ3X291dHN0YW5kaW5nLDApOworCisJaW5pdF93YWl0cXVldWVfaGVhZCgmaW5zdGFuY2UtPmludF9jbWRfd2FpdF9xKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZpbnN0YW5jZS0+YWJvcnRfY21kX3dhaXRfcSk7CisKKwlzcGluX2xvY2tfaW5pdCgmaW5zdGFuY2UtPmNtZF9wb29sX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZpbnN0YW5jZS0+aGJhX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZpbnN0YW5jZS0+Y29tcGxldGlvbl9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmcG9sbF9hZW5fbG9jayk7CisKKwltdXRleF9pbml0KCZpbnN0YW5jZS0+YWVuX211dGV4KTsKKwltdXRleF9pbml0KCZpbnN0YW5jZS0+cmVzZXRfbXV0ZXgpOworCisJLyoKKwkgKiBJbml0aWFsaXplIFBDSSByZWxhdGVkIGFuZCBtaXNjIHBhcmFtZXRlcnMKKwkgKi8KKwlpbnN0YW5jZS0+aG9zdCA9IGhvc3Q7CisJaW5zdGFuY2UtPnVuaXF1ZV9pZCA9IHBkZXYtPmJ1cy0+bnVtYmVyIDw8IDggfCBwZGV2LT5kZXZmbjsKKwlpbnN0YW5jZS0+aW5pdF9pZCA9IE1FR0FTQVNfREVGQVVMVF9JTklUX0lEOworCisJaWYgKChpbnN0YW5jZS0+cGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfTFNJX1NBUzAwNzNTS0lOTlkpIHx8CisJCShpbnN0YW5jZS0+cGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfTFNJX1NBUzAwNzFTS0lOTlkpKSB7CisJCWluc3RhbmNlLT5mbGFnX2llZWUgPSAxOworCQlzZW1hX2luaXQoJmluc3RhbmNlLT5pb2N0bF9zZW0sIE1FR0FTQVNfU0tJTk5ZX0lOVF9DTURTKTsKKwl9IGVsc2UKKwkJc2VtYV9pbml0KCZpbnN0YW5jZS0+aW9jdGxfc2VtLCBNRUdBU0FTX0lOVF9DTURTKTsKKworCW1lZ2FzYXNfZGJnX2x2bCA9IDA7CisJaW5zdGFuY2UtPmZsYWcgPSAwOworCWluc3RhbmNlLT51bmxvYWQgPSAxOworCWluc3RhbmNlLT5sYXN0X3RpbWUgPSAwOworCWluc3RhbmNlLT5kaXNhYmxlT25saW5lQ3RybFJlc2V0ID0gMTsKKworCWlmIChpbnN0YW5jZS0+cGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfTFNJX0ZVU0lPTikKKwkJSU5JVF9XT1JLKCZpbnN0YW5jZS0+d29ya19pbml0LCBtZWdhc2FzX2Z1c2lvbl9vY3Jfd3EpOworCWVsc2UKKwkJSU5JVF9XT1JLKCZpbnN0YW5jZS0+d29ya19pbml0LCBwcm9jZXNzX2Z3X3N0YXRlX2NoYW5nZV93cSk7CisKKwkvKgorCSAqIEluaXRpYWxpemUgTUZJIEZpcm13YXJlCisJICovCisJaWYgKG1lZ2FzYXNfaW5pdF9mdyhpbnN0YW5jZSkpCisJCWdvdG8gZmFpbF9pbml0X21maTsKKworCS8qIFRyeSB0byBlbmFibGUgTVNJLVggKi8KKwlpZiAoKGluc3RhbmNlLT5wZGV2LT5kZXZpY2UgIT0gUENJX0RFVklDRV9JRF9MU0lfU0FTMTA3OFIpICYmCisJICAgIChpbnN0YW5jZS0+cGRldi0+ZGV2aWNlICE9IFBDSV9ERVZJQ0VfSURfTFNJX1NBUzEwNzhERSkgJiYKKwkgICAgKGluc3RhbmNlLT5wZGV2LT5kZXZpY2UgIT0gUENJX0RFVklDRV9JRF9MU0lfVkVSREVfWkNSKSAmJgorCSAgICAhbXNpeF9kaXNhYmxlICYmICFwY2lfZW5hYmxlX21zaXgoaW5zdGFuY2UtPnBkZXYsCisJCQkJCSAgICAgICZpbnN0YW5jZS0+bXNpeGVudHJ5LCAxKSkKKwkJaW5zdGFuY2UtPm1zaV9mbGFnID0gMTsKKworCS8qCisJICogUmVnaXN0ZXIgSVJRCisJICovCisJaWYgKHJlcXVlc3RfaXJxKGluc3RhbmNlLT5tc2lfZmxhZyA/IGluc3RhbmNlLT5tc2l4ZW50cnkudmVjdG9yIDoKKwkJCXBkZXYtPmlycSwgaW5zdGFuY2UtPmluc3RhbmNldC0+c2VydmljZV9pc3IsCisJCQlJUlFGX1NIQVJFRCwgIm1lZ2FzYXMiLCBpbnN0YW5jZSkpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIm1lZ2FzYXM6IEZhaWxlZCB0byByZWdpc3RlciBJUlFcbiIpOworCQlnb3RvIGZhaWxfaXJxOworCX0KKworCWluc3RhbmNlLT5pbnN0YW5jZXQtPmVuYWJsZV9pbnRyKGluc3RhbmNlLT5yZWdfc2V0KTsKKworCS8qCisJICogU3RvcmUgaW5zdGFuY2UgaW4gUENJIHNvZnRzdGF0ZQorCSAqLworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBpbnN0YW5jZSk7CisKKwkvKgorCSAqIEFkZCB0aGlzIGNvbnRyb2xsZXIgdG8gbWVnYXNhc19tZ210X2luZm8gc3RydWN0dXJlIHNvIHRoYXQgaXQKKwkgKiBjYW4gYmUgZXhwb3J0ZWQgdG8gbWFuYWdlbWVudCBhcHBsaWNhdGlvbnMKKwkgKi8KKwltZWdhc2FzX21nbXRfaW5mby5jb3VudCsrOworCW1lZ2FzYXNfbWdtdF9pbmZvLmluc3RhbmNlW21lZ2FzYXNfbWdtdF9pbmZvLm1heF9pbmRleF0gPSBpbnN0YW5jZTsKKwltZWdhc2FzX21nbXRfaW5mby5tYXhfaW5kZXgrKzsKKworCS8qCisJICogSW5pdGlhdGUgQUVOIChBc3luY2hyb25vdXMgRXZlbnQgTm90aWZpY2F0aW9uKQorCSAqLworCWlmIChtZWdhc2FzX3N0YXJ0X2FlbihpbnN0YW5jZSkpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIm1lZ2FzYXM6IHN0YXJ0IGFlbiBmYWlsZWRcbiIpOworCQlnb3RvIGZhaWxfc3RhcnRfYWVuOworCX0KKworCS8qCisJICogUmVnaXN0ZXIgd2l0aCBTQ1NJIG1pZC1sYXllcgorCSAqLworCWlmIChtZWdhc2FzX2lvX2F0dGFjaChpbnN0YW5jZSkpCisJCWdvdG8gZmFpbF9pb19hdHRhY2g7CisKKwlpbnN0YW5jZS0+dW5sb2FkID0gMDsKKwlyZXR1cm4gMDsKKworICAgICAgZmFpbF9zdGFydF9hZW46CisgICAgICBmYWlsX2lvX2F0dGFjaDoKKwltZWdhc2FzX21nbXRfaW5mby5jb3VudC0tOworCW1lZ2FzYXNfbWdtdF9pbmZvLmluc3RhbmNlW21lZ2FzYXNfbWdtdF9pbmZvLm1heF9pbmRleF0gPSBOVUxMOworCW1lZ2FzYXNfbWdtdF9pbmZvLm1heF9pbmRleC0tOworCisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCWluc3RhbmNlLT5pbnN0YW5jZXQtPmRpc2FibGVfaW50cihpbnN0YW5jZS0+cmVnX3NldCk7CisJZnJlZV9pcnEoaW5zdGFuY2UtPm1zaV9mbGFnID8gaW5zdGFuY2UtPm1zaXhlbnRyeS52ZWN0b3IgOgorCQkgaW5zdGFuY2UtPnBkZXYtPmlycSwgaW5zdGFuY2UpOworCWlmIChpbnN0YW5jZS0+bXNpX2ZsYWcpCisJCXBjaV9kaXNhYmxlX21zaXgoaW5zdGFuY2UtPnBkZXYpOworCisgICAgICBmYWlsX2lycToKKyAgICAgIGZhaWxfaW5pdF9tZmk6CisgICAgICBmYWlsX2FsbG9jX2RtYV9idWY6CisJaWYgKGluc3RhbmNlLT5ldnRfZGV0YWlsKQorCQlwY2lfZnJlZV9jb25zaXN0ZW50KHBkZXYsIHNpemVvZihzdHJ1Y3QgbWVnYXNhc19ldnRfZGV0YWlsKSwKKwkJCQkgICAgaW5zdGFuY2UtPmV2dF9kZXRhaWwsCisJCQkJICAgIGluc3RhbmNlLT5ldnRfZGV0YWlsX2gpOworCisJaWYgKGluc3RhbmNlLT5wcm9kdWNlcikgeworCQlwY2lfZnJlZV9jb25zaXN0ZW50KHBkZXYsIHNpemVvZih1MzIpLCBpbnN0YW5jZS0+cHJvZHVjZXIsCisJCQkJICAgIGluc3RhbmNlLT5wcm9kdWNlcl9oKTsKKwkJbWVnYXNhc19yZWxlYXNlX21maShpbnN0YW5jZSk7CisJfSBlbHNlIHsKKwkJbWVnYXNhc19yZWxlYXNlX2Z1c2lvbihpbnN0YW5jZSk7CisJfQorCWlmIChpbnN0YW5jZS0+Y29uc3VtZXIpCisJCXBjaV9mcmVlX2NvbnNpc3RlbnQocGRldiwgc2l6ZW9mKHUzMiksIGluc3RhbmNlLT5jb25zdW1lciwKKwkJCQkgICAgaW5zdGFuY2UtPmNvbnN1bWVyX2gpOworCXNjc2lfaG9zdF9wdXQoaG9zdCk7CisKKyAgICAgIGZhaWxfYWxsb2NfaW5zdGFuY2U6CisgICAgICBmYWlsX3NldF9kbWFfbWFzazoKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworLyoqCisgKiBtZWdhc2FzX2ZsdXNoX2NhY2hlIC0JUmVxdWVzdHMgRlcgdG8gZmx1c2ggYWxsIGl0cyBjYWNoZXMKKyAqIEBpbnN0YW5jZToJCQlBZGFwdGVyIHNvZnQgc3RhdGUKKyAqLworc3RhdGljIHZvaWQgbWVnYXNhc19mbHVzaF9jYWNoZShzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UpCit7CisJc3RydWN0IG1lZ2FzYXNfY21kICpjbWQ7CisJc3RydWN0IG1lZ2FzYXNfZGNtZF9mcmFtZSAqZGNtZDsKKworCWlmIChpbnN0YW5jZS0+YWRwcmVjb3ZlcnkgPT0gTUVHQVNBU19IV19DUklUSUNBTF9FUlJPUikKKwkJcmV0dXJuOworCisJY21kID0gbWVnYXNhc19nZXRfY21kKGluc3RhbmNlKTsKKworCWlmICghY21kKQorCQlyZXR1cm47CisKKwlkY21kID0gJmNtZC0+ZnJhbWUtPmRjbWQ7CisKKwltZW1zZXQoZGNtZC0+bWJveC5iLCAwLCBNRklfTUJPWF9TSVpFKTsKKworCWRjbWQtPmNtZCA9IE1GSV9DTURfRENNRDsKKwlkY21kLT5jbWRfc3RhdHVzID0gMHgwOworCWRjbWQtPnNnZV9jb3VudCA9IDA7CisJZGNtZC0+ZmxhZ3MgPSBNRklfRlJBTUVfRElSX05PTkU7CisJZGNtZC0+dGltZW91dCA9IDA7CisJZGNtZC0+cGFkXzAgPSAwOworCWRjbWQtPmRhdGFfeGZlcl9sZW4gPSAwOworCWRjbWQtPm9wY29kZSA9IE1SX0RDTURfQ1RSTF9DQUNIRV9GTFVTSDsKKwlkY21kLT5tYm94LmJbMF0gPSBNUl9GTFVTSF9DVFJMX0NBQ0hFIHwgTVJfRkxVU0hfRElTS19DQUNIRTsKKworCW1lZ2FzYXNfaXNzdWVfYmxvY2tlZF9jbWQoaW5zdGFuY2UsIGNtZCk7CisKKwltZWdhc2FzX3JldHVybl9jbWQoaW5zdGFuY2UsIGNtZCk7CisKKwlyZXR1cm47Cit9CisKKy8qKgorICogbWVnYXNhc19zaHV0ZG93bl9jb250cm9sbGVyIC0JSW5zdHJ1Y3RzIEZXIHRvIHNodXRkb3duIHRoZSBjb250cm9sbGVyCisgKiBAaW5zdGFuY2U6CQkJCUFkYXB0ZXIgc29mdCBzdGF0ZQorICogQG9wY29kZToJCQkJU2h1dGRvd24vSGliZXJuYXRlCisgKi8KK3N0YXRpYyB2b2lkIG1lZ2FzYXNfc2h1dGRvd25fY29udHJvbGxlcihzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UsCisJCQkJCXUzMiBvcGNvZGUpCit7CisJc3RydWN0IG1lZ2FzYXNfY21kICpjbWQ7CisJc3RydWN0IG1lZ2FzYXNfZGNtZF9mcmFtZSAqZGNtZDsKKworCWlmIChpbnN0YW5jZS0+YWRwcmVjb3ZlcnkgPT0gTUVHQVNBU19IV19DUklUSUNBTF9FUlJPUikKKwkJcmV0dXJuOworCisJY21kID0gbWVnYXNhc19nZXRfY21kKGluc3RhbmNlKTsKKworCWlmICghY21kKQorCQlyZXR1cm47CisKKwlpZiAoaW5zdGFuY2UtPmFlbl9jbWQpCisJCW1lZ2FzYXNfaXNzdWVfYmxvY2tlZF9hYm9ydF9jbWQoaW5zdGFuY2UsIGluc3RhbmNlLT5hZW5fY21kKTsKKwlpZiAoaW5zdGFuY2UtPm1hcF91cGRhdGVfY21kKQorCQltZWdhc2FzX2lzc3VlX2Jsb2NrZWRfYWJvcnRfY21kKGluc3RhbmNlLAorCQkJCQkJaW5zdGFuY2UtPm1hcF91cGRhdGVfY21kKTsKKwlkY21kID0gJmNtZC0+ZnJhbWUtPmRjbWQ7CisKKwltZW1zZXQoZGNtZC0+bWJveC5iLCAwLCBNRklfTUJPWF9TSVpFKTsKKworCWRjbWQtPmNtZCA9IE1GSV9DTURfRENNRDsKKwlkY21kLT5jbWRfc3RhdHVzID0gMHgwOworCWRjbWQtPnNnZV9jb3VudCA9IDA7CisJZGNtZC0+ZmxhZ3MgPSBNRklfRlJBTUVfRElSX05PTkU7CisJZGNtZC0+dGltZW91dCA9IDA7CisJZGNtZC0+cGFkXzAgPSAwOworCWRjbWQtPmRhdGFfeGZlcl9sZW4gPSAwOworCWRjbWQtPm9wY29kZSA9IG9wY29kZTsKKworCW1lZ2FzYXNfaXNzdWVfYmxvY2tlZF9jbWQoaW5zdGFuY2UsIGNtZCk7CisKKwltZWdhc2FzX3JldHVybl9jbWQoaW5zdGFuY2UsIGNtZCk7CisKKwlyZXR1cm47Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KKy8qKgorICogbWVnYXNhc19zdXNwZW5kIC0JZHJpdmVyIHN1c3BlbmQgZW50cnkgcG9pbnQKKyAqIEBwZGV2OgkJUENJIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEBzdGF0ZToJCVBDSSBwb3dlciBzdGF0ZSB0byBzdXNwZW5kIHJvdXRpbmUKKyAqLworc3RhdGljIGludAorbWVnYXNhc19zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqaG9zdDsKKwlzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2U7CisKKwlpbnN0YW5jZSA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlob3N0ID0gaW5zdGFuY2UtPmhvc3Q7CisJaW5zdGFuY2UtPnVubG9hZCA9IDE7CisKKwlpZiAocG9sbF9tb2RlX2lvKQorCQlkZWxfdGltZXJfc3luYygmaW5zdGFuY2UtPmlvX2NvbXBsZXRpb25fdGltZXIpOworCisJbWVnYXNhc19mbHVzaF9jYWNoZShpbnN0YW5jZSk7CisJbWVnYXNhc19zaHV0ZG93bl9jb250cm9sbGVyKGluc3RhbmNlLCBNUl9EQ01EX0hJQkVSTkFURV9TSFVURE9XTik7CisKKwkvKiBjYW5jZWwgdGhlIGRlbGF5ZWQgd29yayBpZiB0aGlzIHdvcmsgc3RpbGwgaW4gcXVldWUgKi8KKwlpZiAoaW5zdGFuY2UtPmV2ICE9IE5VTEwpIHsKKwkJc3RydWN0IG1lZ2FzYXNfYWVuX2V2ZW50ICpldiA9IGluc3RhbmNlLT5ldjsKKwkJY2FuY2VsX2RlbGF5ZWRfd29yaygKKwkJCShzdHJ1Y3QgZGVsYXllZF93b3JrICopJmV2LT5ob3RwbHVnX3dvcmspOworCQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCQlpbnN0YW5jZS0+ZXYgPSBOVUxMOworCX0KKworCXRhc2tsZXRfa2lsbCgmaW5zdGFuY2UtPmlzcl90YXNrbGV0KTsKKworCXBjaV9zZXRfZHJ2ZGF0YShpbnN0YW5jZS0+cGRldiwgaW5zdGFuY2UpOworCWluc3RhbmNlLT5pbnN0YW5jZXQtPmRpc2FibGVfaW50cihpbnN0YW5jZS0+cmVnX3NldCk7CisJZnJlZV9pcnEoaW5zdGFuY2UtPm1zaV9mbGFnID8gaW5zdGFuY2UtPm1zaXhlbnRyeS52ZWN0b3IgOgorCQkgaW5zdGFuY2UtPnBkZXYtPmlycSwgaW5zdGFuY2UpOworCWlmIChpbnN0YW5jZS0+bXNpX2ZsYWcpCisJCXBjaV9kaXNhYmxlX21zaXgoaW5zdGFuY2UtPnBkZXYpOworCisJcGNpX3NhdmVfc3RhdGUocGRldik7CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCisJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBwY2lfY2hvb3NlX3N0YXRlKHBkZXYsIHN0YXRlKSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBtZWdhc2FzX3Jlc3VtZS0gICAgICBkcml2ZXIgcmVzdW1lIGVudHJ5IHBvaW50CisgKiBAcGRldjogICAgICAgICAgICAgICBQQ0kgZGV2aWNlIHN0cnVjdHVyZQorICovCitzdGF0aWMgaW50CittZWdhc2FzX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlpbnQgcnZhbDsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0OworCXN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZTsKKworCWluc3RhbmNlID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCWhvc3QgPSBpbnN0YW5jZS0+aG9zdDsKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7CisJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EMCwgMCk7CisJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CisKKwkvKgorCSAqIFBDSSBwcmVwcGluZzogZW5hYmxlIGRldmljZSBzZXQgYnVzIG1hc3RlcmluZyBhbmQgZG1hIG1hc2sKKwkgKi8KKwlydmFsID0gcGNpX2VuYWJsZV9kZXZpY2VfbWVtKHBkZXYpOworCisJaWYgKHJ2YWwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtZWdhc2FzOiBFbmFibGUgZGV2aWNlIGZhaWxlZFxuIik7CisJCXJldHVybiBydmFsOworCX0KKworCXBjaV9zZXRfbWFzdGVyKHBkZXYpOworCisJaWYgKG1lZ2FzYXNfc2V0X2RtYV9tYXNrKHBkZXYpKQorCQlnb3RvIGZhaWxfc2V0X2RtYV9tYXNrOworCisJLyoKKwkgKiBJbml0aWFsaXplIE1GSSBGaXJtd2FyZQorCSAqLworCisJYXRvbWljX3NldCgmaW5zdGFuY2UtPmZ3X291dHN0YW5kaW5nLCAwKTsKKworCS8qCisJICogV2UgZXhwZWN0IHRoZSBGVyBzdGF0ZSB0byBiZSBSRUFEWQorCSAqLworCWlmIChtZWdhc2FzX3RyYW5zaXRpb25fdG9fcmVhZHkoaW5zdGFuY2UpKQorCQlnb3RvIGZhaWxfcmVhZHlfc3RhdGU7CisKKwlzd2l0Y2ggKGluc3RhbmNlLT5wZGV2LT5kZXZpY2UpIHsKKwljYXNlIFBDSV9ERVZJQ0VfSURfTFNJX0ZVU0lPTjoKKwl7CisJCW1lZ2FzYXNfcmVzZXRfcmVwbHlfZGVzYyhpbnN0YW5jZSk7CisJCWlmIChtZWdhc2FzX2lvY19pbml0X2Z1c2lvbihpbnN0YW5jZSkpIHsKKwkJCW1lZ2FzYXNfZnJlZV9jbWRzKGluc3RhbmNlKTsKKwkJCW1lZ2FzYXNfZnJlZV9jbWRzX2Z1c2lvbihpbnN0YW5jZSk7CisJCQlnb3RvIGZhaWxfaW5pdF9tZmk7CisJCX0KKwkJaWYgKCFtZWdhc2FzX2dldF9tYXBfaW5mbyhpbnN0YW5jZSkpCisJCQltZWdhc2FzX3N5bmNfbWFwX2luZm8oaW5zdGFuY2UpOworCX0KKwlicmVhazsKKwlkZWZhdWx0OgorCQkqaW5zdGFuY2UtPnByb2R1Y2VyID0gMDsKKwkJKmluc3RhbmNlLT5jb25zdW1lciA9IDA7CisJCWlmIChtZWdhc2FzX2lzc3VlX2luaXRfbWZpKGluc3RhbmNlKSkKKwkJCWdvdG8gZmFpbF9pbml0X21maTsKKwkJYnJlYWs7CisJfQorCisJdGFza2xldF9pbml0KCZpbnN0YW5jZS0+aXNyX3Rhc2tsZXQsIGluc3RhbmNlLT5pbnN0YW5jZXQtPnRhc2tsZXQsCisJCSAgICAgKHVuc2lnbmVkIGxvbmcpaW5zdGFuY2UpOworCisJLyogTm93IHJlLWVuYWJsZSBNU0ktWCAqLworCWlmIChpbnN0YW5jZS0+bXNpX2ZsYWcpCisJCXBjaV9lbmFibGVfbXNpeChpbnN0YW5jZS0+cGRldiwgJmluc3RhbmNlLT5tc2l4ZW50cnksIDEpOworCisJLyoKKwkgKiBSZWdpc3RlciBJUlEKKwkgKi8KKwlpZiAocmVxdWVzdF9pcnEoaW5zdGFuY2UtPm1zaV9mbGFnID8gaW5zdGFuY2UtPm1zaXhlbnRyeS52ZWN0b3IgOgorCQkJcGRldi0+aXJxLCBpbnN0YW5jZS0+aW5zdGFuY2V0LT5zZXJ2aWNlX2lzciwKKwkJCUlSUUZfU0hBUkVELCAibWVnYXNhcyIsIGluc3RhbmNlKSkgeworCQlwcmludGsoS0VSTl9FUlIgIm1lZ2FzYXM6IEZhaWxlZCB0byByZWdpc3RlciBJUlFcbiIpOworCQlnb3RvIGZhaWxfaXJxOworCX0KKworCWluc3RhbmNlLT5pbnN0YW5jZXQtPmVuYWJsZV9pbnRyKGluc3RhbmNlLT5yZWdfc2V0KTsKKworCS8qCisJICogSW5pdGlhdGUgQUVOIChBc3luY2hyb25vdXMgRXZlbnQgTm90aWZpY2F0aW9uKQorCSAqLworCWlmIChtZWdhc2FzX3N0YXJ0X2FlbihpbnN0YW5jZSkpCisJCXByaW50ayhLRVJOX0VSUiAibWVnYXNhczogU3RhcnQgQUVOIGZhaWxlZFxuIik7CisKKwkvKiBJbml0aWFsaXplIHRoZSBjbWQgY29tcGxldGlvbiB0aW1lciAqLworCWlmIChwb2xsX21vZGVfaW8pCisJCW1lZ2FzYXNfc3RhcnRfdGltZXIoaW5zdGFuY2UsICZpbnN0YW5jZS0+aW9fY29tcGxldGlvbl90aW1lciwKKwkJCQltZWdhc2FzX2lvX2NvbXBsZXRpb25fdGltZXIsCisJCQkJTUVHQVNBU19DT01QTEVUSU9OX1RJTUVSX0lOVEVSVkFMKTsKKwlpbnN0YW5jZS0+dW5sb2FkID0gMDsKKworCXJldHVybiAwOworCitmYWlsX2lycToKK2ZhaWxfaW5pdF9tZmk6CisJaWYgKGluc3RhbmNlLT5ldnRfZGV0YWlsKQorCQlwY2lfZnJlZV9jb25zaXN0ZW50KHBkZXYsIHNpemVvZihzdHJ1Y3QgbWVnYXNhc19ldnRfZGV0YWlsKSwKKwkJCQlpbnN0YW5jZS0+ZXZ0X2RldGFpbCwKKwkJCQlpbnN0YW5jZS0+ZXZ0X2RldGFpbF9oKTsKKworCWlmIChpbnN0YW5jZS0+cHJvZHVjZXIpCisJCXBjaV9mcmVlX2NvbnNpc3RlbnQocGRldiwgc2l6ZW9mKHUzMiksIGluc3RhbmNlLT5wcm9kdWNlciwKKwkJCQlpbnN0YW5jZS0+cHJvZHVjZXJfaCk7CisJaWYgKGluc3RhbmNlLT5jb25zdW1lcikKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChwZGV2LCBzaXplb2YodTMyKSwgaW5zdGFuY2UtPmNvbnN1bWVyLAorCQkJCWluc3RhbmNlLT5jb25zdW1lcl9oKTsKKwlzY3NpX2hvc3RfcHV0KGhvc3QpOworCitmYWlsX3NldF9kbWFfbWFzazoKK2ZhaWxfcmVhZHlfc3RhdGU6CisKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisKKwlyZXR1cm4gLUVOT0RFVjsKK30KKyNlbHNlCisjZGVmaW5lIG1lZ2FzYXNfc3VzcGVuZAlOVUxMCisjZGVmaW5lIG1lZ2FzYXNfcmVzdW1lCU5VTEwKKyNlbmRpZgorCisvKioKKyAqIG1lZ2FzYXNfZGV0YWNoX29uZSAtCVBDSSBob3QidW4icGx1ZyBlbnRyeSBwb2ludAorICogQHBkZXY6CQlQQ0kgZGV2aWNlIHN0cnVjdHVyZQorICovCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgbWVnYXNhc19kZXRhY2hfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCWludCBpOworCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3Q7CisJc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlOworCXN0cnVjdCBmdXNpb25fY29udGV4dCAqZnVzaW9uOworCisJaW5zdGFuY2UgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJaW5zdGFuY2UtPnVubG9hZCA9IDE7CisJaG9zdCA9IGluc3RhbmNlLT5ob3N0OworCWZ1c2lvbiA9IGluc3RhbmNlLT5jdHJsX2NvbnRleHQ7CisKKwlpZiAocG9sbF9tb2RlX2lvKQorCQlkZWxfdGltZXJfc3luYygmaW5zdGFuY2UtPmlvX2NvbXBsZXRpb25fdGltZXIpOworCisJc2NzaV9yZW1vdmVfaG9zdChpbnN0YW5jZS0+aG9zdCk7CisJbWVnYXNhc19mbHVzaF9jYWNoZShpbnN0YW5jZSk7CisJbWVnYXNhc19zaHV0ZG93bl9jb250cm9sbGVyKGluc3RhbmNlLCBNUl9EQ01EX0NUUkxfU0hVVERPV04pOworCisJLyogY2FuY2VsIHRoZSBkZWxheWVkIHdvcmsgaWYgdGhpcyB3b3JrIHN0aWxsIGluIHF1ZXVlKi8KKwlpZiAoaW5zdGFuY2UtPmV2ICE9IE5VTEwpIHsKKwkJc3RydWN0IG1lZ2FzYXNfYWVuX2V2ZW50ICpldiA9IGluc3RhbmNlLT5ldjsKKwkJY2FuY2VsX2RlbGF5ZWRfd29yaygKKwkJCShzdHJ1Y3QgZGVsYXllZF93b3JrICopJmV2LT5ob3RwbHVnX3dvcmspOworCQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCQlpbnN0YW5jZS0+ZXYgPSBOVUxMOworCX0KKworCXRhc2tsZXRfa2lsbCgmaW5zdGFuY2UtPmlzcl90YXNrbGV0KTsKKworCS8qCisJICogVGFrZSB0aGUgaW5zdGFuY2Ugb2ZmIHRoZSBpbnN0YW5jZSBhcnJheS4gTm90ZSB0aGF0IHdlIHdpbGwgbm90CisJICogZGVjcmVtZW50IHRoZSBtYXhfaW5kZXguIFdlIGxldCB0aGlzIGFycmF5IGJlIHNwYXJzZSBhcnJheQorCSAqLworCWZvciAoaSA9IDA7IGkgPCBtZWdhc2FzX21nbXRfaW5mby5tYXhfaW5kZXg7IGkrKykgeworCQlpZiAobWVnYXNhc19tZ210X2luZm8uaW5zdGFuY2VbaV0gPT0gaW5zdGFuY2UpIHsKKwkJCW1lZ2FzYXNfbWdtdF9pbmZvLmNvdW50LS07CisJCQltZWdhc2FzX21nbXRfaW5mby5pbnN0YW5jZVtpXSA9IE5VTEw7CisKKwkJCWJyZWFrOworCQl9CisJfQorCisJcGNpX3NldF9kcnZkYXRhKGluc3RhbmNlLT5wZGV2LCBOVUxMKTsKKworCWluc3RhbmNlLT5pbnN0YW5jZXQtPmRpc2FibGVfaW50cihpbnN0YW5jZS0+cmVnX3NldCk7CisKKwlmcmVlX2lycShpbnN0YW5jZS0+bXNpX2ZsYWcgPyBpbnN0YW5jZS0+bXNpeGVudHJ5LnZlY3RvciA6CisJCSBpbnN0YW5jZS0+cGRldi0+aXJxLCBpbnN0YW5jZSk7CisJaWYgKGluc3RhbmNlLT5tc2lfZmxhZykKKwkJcGNpX2Rpc2FibGVfbXNpeChpbnN0YW5jZS0+cGRldik7CisKKwlzd2l0Y2ggKGluc3RhbmNlLT5wZGV2LT5kZXZpY2UpIHsKKwljYXNlIFBDSV9ERVZJQ0VfSURfTFNJX0ZVU0lPTjoKKwkJbWVnYXNhc19yZWxlYXNlX2Z1c2lvbihpbnN0YW5jZSk7CisJCWZvciAoaSA9IDA7IGkgPCAyIDsgaSsrKQorCQkJaWYgKGZ1c2lvbi0+bGRfbWFwW2ldKQorCQkJCWRtYV9mcmVlX2NvaGVyZW50KCZpbnN0YW5jZS0+cGRldi0+ZGV2LAorCQkJCQkJICBmdXNpb24tPm1hcF9zeiwKKwkJCQkJCSAgZnVzaW9uLT5sZF9tYXBbaV0sCisJCQkJCQkgIGZ1c2lvbi0+CisJCQkJCQkgIGxkX21hcF9waHlzW2ldKTsKKwkJa2ZyZWUoaW5zdGFuY2UtPmN0cmxfY29udGV4dCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCW1lZ2FzYXNfcmVsZWFzZV9tZmkoaW5zdGFuY2UpOworCQlwY2lfZnJlZV9jb25zaXN0ZW50KHBkZXYsCisJCQkJICAgIHNpemVvZihzdHJ1Y3QgbWVnYXNhc19ldnRfZGV0YWlsKSwKKwkJCQkgICAgaW5zdGFuY2UtPmV2dF9kZXRhaWwsCisJCQkJICAgIGluc3RhbmNlLT5ldnRfZGV0YWlsX2gpOworCQlwY2lfZnJlZV9jb25zaXN0ZW50KHBkZXYsIHNpemVvZih1MzIpLAorCQkJCSAgICBpbnN0YW5jZS0+cHJvZHVjZXIsCisJCQkJICAgIGluc3RhbmNlLT5wcm9kdWNlcl9oKTsKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChwZGV2LCBzaXplb2YodTMyKSwKKwkJCQkgICAgaW5zdGFuY2UtPmNvbnN1bWVyLAorCQkJCSAgICBpbnN0YW5jZS0+Y29uc3VtZXJfaCk7CisJCWJyZWFrOworCX0KKworCXNjc2lfaG9zdF9wdXQoaG9zdCk7CisKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisKKwlyZXR1cm47Cit9CisKKy8qKgorICogbWVnYXNhc19zaHV0ZG93biAtCVNodXRkb3duIGVudHJ5IHBvaW50CisgKiBAZGV2aWNlOgkJR2VuZXJpYyBkZXZpY2Ugc3RydWN0dXJlCisgKi8KK3N0YXRpYyB2b2lkIG1lZ2FzYXNfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCWluc3RhbmNlLT51bmxvYWQgPSAxOworCW1lZ2FzYXNfZmx1c2hfY2FjaGUoaW5zdGFuY2UpOworCW1lZ2FzYXNfc2h1dGRvd25fY29udHJvbGxlcihpbnN0YW5jZSwgTVJfRENNRF9DVFJMX1NIVVRET1dOKTsKK30KKworLyoqCisgKiBtZWdhc2FzX21nbXRfb3BlbiAtCWNoYXIgbm9kZSAib3BlbiIgZW50cnkgcG9pbnQKKyAqLworc3RhdGljIGludCBtZWdhc2FzX21nbXRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZXApCit7CisJLyoKKwkgKiBBbGxvdyBvbmx5IHRob3NlIHVzZXJzIHdpdGggYWRtaW4gcmlnaHRzCisJICovCisJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQlyZXR1cm4gLUVBQ0NFUzsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIG1lZ2FzYXNfbWdtdF9mYXN5bmMgLQlBc3luYyBub3RpZmllciByZWdpc3RyYXRpb24gZnJvbSBhcHBsaWNhdGlvbnMKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFkZHMgdGhlIGNhbGxpbmcgcHJvY2VzcyB0byBhIGRyaXZlciBnbG9iYWwgcXVldWUuIFdoZW4gYW4KKyAqIGV2ZW50IG9jY3VycywgU0lHSU8gd2lsbCBiZSBzZW50IHRvIGFsbCBwcm9jZXNzZXMgaW4gdGhpcyBxdWV1ZS4KKyAqLworc3RhdGljIGludCBtZWdhc2FzX21nbXRfZmFzeW5jKGludCBmZCwgc3RydWN0IGZpbGUgKmZpbGVwLCBpbnQgbW9kZSkKK3sKKwlpbnQgcmM7CisKKwltdXRleF9sb2NrKCZtZWdhc2FzX2FzeW5jX3F1ZXVlX211dGV4KTsKKworCXJjID0gZmFzeW5jX2hlbHBlcihmZCwgZmlsZXAsIG1vZGUsICZtZWdhc2FzX2FzeW5jX3F1ZXVlKTsKKworCW11dGV4X3VubG9jaygmbWVnYXNhc19hc3luY19xdWV1ZV9tdXRleCk7CisKKwlpZiAocmMgPj0gMCkgeworCQkvKiBGb3Igc2FuaXR5IGNoZWNrIHdoZW4gd2UgZ2V0IGlvY3RsICovCisJCWZpbGVwLT5wcml2YXRlX2RhdGEgPSBmaWxlcDsKKwkJcmV0dXJuIDA7CisJfQorCisJcHJpbnRrKEtFUk5fREVCVUcgIm1lZ2FzYXM6IGZhc3luY19oZWxwZXIgZmFpbGVkIFslZF1cbiIsIHJjKTsKKworCXJldHVybiByYzsKK30KKworLyoqCisgKiBtZWdhc2FzX21nbXRfcG9sbCAtICBjaGFyIG5vZGUgInBvbGwiIGVudHJ5IHBvaW50CisgKiAqLworc3RhdGljIHVuc2lnbmVkIGludCBtZWdhc2FzX21nbXRfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCkKK3sKKwl1bnNpZ25lZCBpbnQgbWFzazsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXBvbGxfd2FpdChmaWxlLCAmbWVnYXNhc19wb2xsX3dhaXQsIHdhaXQpOworCXNwaW5fbG9ja19pcnFzYXZlKCZwb2xsX2Flbl9sb2NrLCBmbGFncyk7CisJaWYgKG1lZ2FzYXNfcG9sbF93YWl0X2FlbikKKwkJbWFzayA9ICAgKFBPTExJTiB8IFBPTExSRE5PUk0pOworCWVsc2UKKwkJbWFzayA9IDA7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9sbF9hZW5fbG9jaywgZmxhZ3MpOworCXJldHVybiBtYXNrOworfQorCisvKioKKyAqIG1lZ2FzYXNfbWdtdF9md19pb2N0bCAtCUlzc3VlcyBtYW5hZ2VtZW50IGlvY3RscyB0byBGVworICogQGluc3RhbmNlOgkJCUFkYXB0ZXIgc29mdCBzdGF0ZQorICogQGFyZ3A6CQkJVXNlcidzIGlvY3RsIHBhY2tldAorICovCitzdGF0aWMgaW50CittZWdhc2FzX21nbXRfZndfaW9jdGwoc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlLAorCQkgICAgICBzdHJ1Y3QgbWVnYXNhc19pb2NwYWNrZXQgX191c2VyICogdXNlcl9pb2MsCisJCSAgICAgIHN0cnVjdCBtZWdhc2FzX2lvY3BhY2tldCAqaW9jKQoreworCXN0cnVjdCBtZWdhc2FzX3NnZTMyICprZXJuX3NnZTMyOworCXN0cnVjdCBtZWdhc2FzX2NtZCAqY21kOworCXZvaWQgKmtidWZmX2FycltNQVhfSU9DVExfU0dFXTsKKwlkbWFfYWRkcl90IGJ1Zl9oYW5kbGUgPSAwOworCWludCBlcnJvciA9IDAsIGk7CisJdm9pZCAqc2Vuc2UgPSBOVUxMOworCWRtYV9hZGRyX3Qgc2Vuc2VfaGFuZGxlOworCXVuc2lnbmVkIGxvbmcgKnNlbnNlX3B0cjsKKworCW1lbXNldChrYnVmZl9hcnIsIDAsIHNpemVvZihrYnVmZl9hcnIpKTsKKworCWlmIChpb2MtPnNnZV9jb3VudCA+IE1BWF9JT0NUTF9TR0UpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIm1lZ2FzYXM6IFNHRSBjb3VudCBbJWRdID4gIG1heCBsaW1pdCBbJWRdXG4iLAorCQkgICAgICAgaW9jLT5zZ2VfY291bnQsIE1BWF9JT0NUTF9TR0UpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwljbWQgPSBtZWdhc2FzX2dldF9jbWQoaW5zdGFuY2UpOworCWlmICghY21kKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJtZWdhc2FzOiBGYWlsZWQgdG8gZ2V0IGEgY21kIHBhY2tldFxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qCisJICogVXNlcidzIElPQ1RMIHBhY2tldCBoYXMgMiBmcmFtZXMgKG1heGltdW0pLiBDb3B5IHRob3NlIHR3bworCSAqIGZyYW1lcyBpbnRvIG91ciBjbWQncyBmcmFtZXMuIGNtZC0+ZnJhbWUncyBjb250ZXh0IHdpbGwgZ2V0CisJICogb3ZlcndyaXR0ZW4gd2hlbiB3ZSBjb3B5IGZyb20gdXNlcidzIGZyYW1lcy4gU28gc2V0IHRoYXQgdmFsdWUKKwkgKiBhbG9uZSBzZXBhcmF0ZWx5CisJICovCisJbWVtY3B5KGNtZC0+ZnJhbWUsIGlvYy0+ZnJhbWUucmF3LCAyICogTUVHQU1GSV9GUkFNRV9TSVpFKTsKKwljbWQtPmZyYW1lLT5oZHIuY29udGV4dCA9IGNtZC0+aW5kZXg7CisJY21kLT5mcmFtZS0+aGRyLnBhZF8wID0gMDsKKworCS8qCisJICogVGhlIG1hbmFnZW1lbnQgaW50ZXJmYWNlIGJldHdlZW4gYXBwbGljYXRpb25zIGFuZCB0aGUgZncgdXNlcworCSAqIE1GSSBmcmFtZXMuIEUuZywgUkFJRCBjb25maWd1cmF0aW9uIGNoYW5nZXMsIExEIHByb3BlcnR5IGNoYW5nZXMKKwkgKiBldGMgYXJlIGFjY29tcGxpc2hlcyB0aHJvdWdoIGRpZmZlcmVudCBraW5kcyBvZiBNRkkgZnJhbWVzLiBUaGUKKwkgKiBkcml2ZXIgbmVlZHMgdG8gY2FyZSBvbmx5IGFib3V0IHN1YnN0aXR1dGluZyB1c2VyIGJ1ZmZlcnMgd2l0aAorCSAqIGtlcm5lbCBidWZmZXJzIGluIFNHTHMuIFRoZSBsb2NhdGlvbiBvZiBTR0wgaXMgZW1iZWRkZWQgaW4gdGhlCisJICogc3RydWN0IGlvY3BhY2tldCBpdHNlbGYuCisJICovCisJa2Vybl9zZ2UzMiA9IChzdHJ1Y3QgbWVnYXNhc19zZ2UzMiAqKQorCSAgICAoKHVuc2lnbmVkIGxvbmcpY21kLT5mcmFtZSArIGlvYy0+c2dsX29mZik7CisKKwkvKgorCSAqIEZvciBlYWNoIHVzZXIgYnVmZmVyLCBjcmVhdGUgYSBtaXJyb3IgYnVmZmVyIGFuZCBjb3B5IGluCisJICovCisJZm9yIChpID0gMDsgaSA8IGlvYy0+c2dlX2NvdW50OyBpKyspIHsKKwkJa2J1ZmZfYXJyW2ldID0gZG1hX2FsbG9jX2NvaGVyZW50KCZpbnN0YW5jZS0+cGRldi0+ZGV2LAorCQkJCQkJICAgIGlvYy0+c2dsW2ldLmlvdl9sZW4sCisJCQkJCQkgICAgJmJ1Zl9oYW5kbGUsIEdGUF9LRVJORUwpOworCQlpZiAoIWtidWZmX2FycltpXSkgeworCQkJcHJpbnRrKEtFUk5fREVCVUcgIm1lZ2FzYXM6IEZhaWxlZCB0byBhbGxvYyAiCisJCQkgICAgICAgImtlcm5lbCBTR0wgYnVmZmVyIGZvciBJT0NUTCBcbiIpOworCQkJZXJyb3IgPSAtRU5PTUVNOworCQkJZ290byBvdXQ7CisJCX0KKworCQkvKgorCQkgKiBXZSBkb24ndCBjaGFuZ2UgdGhlIGRtYV9jb2hlcmVudF9tYXNrLCBzbworCQkgKiBwY2lfYWxsb2NfY29uc2lzdGVudCBvbmx5IHJldHVybnMgMzJiaXQgYWRkcmVzc2VzCisJCSAqLworCQlrZXJuX3NnZTMyW2ldLnBoeXNfYWRkciA9ICh1MzIpIGJ1Zl9oYW5kbGU7CisJCWtlcm5fc2dlMzJbaV0ubGVuZ3RoID0gaW9jLT5zZ2xbaV0uaW92X2xlbjsKKworCQkvKgorCQkgKiBXZSBjcmVhdGVkIGEga2VybmVsIGJ1ZmZlciBjb3JyZXNwb25kaW5nIHRvIHRoZQorCQkgKiB1c2VyIGJ1ZmZlci4gTm93IGNvcHkgaW4gZnJvbSB0aGUgdXNlciBidWZmZXIKKwkJICovCisJCWlmIChjb3B5X2Zyb21fdXNlcihrYnVmZl9hcnJbaV0sIGlvYy0+c2dsW2ldLmlvdl9iYXNlLAorCQkJCSAgICh1MzIpIChpb2MtPnNnbFtpXS5pb3ZfbGVuKSkpIHsKKwkJCWVycm9yID0gLUVGQVVMVDsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJaWYgKGlvYy0+c2Vuc2VfbGVuKSB7CisJCXNlbnNlID0gZG1hX2FsbG9jX2NvaGVyZW50KCZpbnN0YW5jZS0+cGRldi0+ZGV2LCBpb2MtPnNlbnNlX2xlbiwKKwkJCQkJICAgICAmc2Vuc2VfaGFuZGxlLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFzZW5zZSkgeworCQkJZXJyb3IgPSAtRU5PTUVNOworCQkJZ290byBvdXQ7CisJCX0KKworCQlzZW5zZV9wdHIgPQorCQkodW5zaWduZWQgbG9uZyAqKSAoKHVuc2lnbmVkIGxvbmcpY21kLT5mcmFtZSArIGlvYy0+c2Vuc2Vfb2ZmKTsKKwkJKnNlbnNlX3B0ciA9IHNlbnNlX2hhbmRsZTsKKwl9CisKKwkvKgorCSAqIFNldCB0aGUgc3luY19jbWQgZmxhZyBzbyB0aGF0IHRoZSBJU1Iga25vd3Mgbm90IHRvIGNvbXBsZXRlIHRoaXMKKwkgKiBjbWQgdG8gdGhlIFNDU0kgbWlkLWxheWVyCisJICovCisJY21kLT5zeW5jX2NtZCA9IDE7CisJbWVnYXNhc19pc3N1ZV9ibG9ja2VkX2NtZChpbnN0YW5jZSwgY21kKTsKKwljbWQtPnN5bmNfY21kID0gMDsKKworCS8qCisJICogY29weSBvdXQgdGhlIGtlcm5lbCBidWZmZXJzIHRvIHVzZXIgYnVmZmVycworCSAqLworCWZvciAoaSA9IDA7IGkgPCBpb2MtPnNnZV9jb3VudDsgaSsrKSB7CisJCWlmIChjb3B5X3RvX3VzZXIoaW9jLT5zZ2xbaV0uaW92X2Jhc2UsIGtidWZmX2FycltpXSwKKwkJCQkgaW9jLT5zZ2xbaV0uaW92X2xlbikpIHsKKwkJCWVycm9yID0gLUVGQVVMVDsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJLyoKKwkgKiBjb3B5IG91dCB0aGUgc2Vuc2UKKwkgKi8KKwlpZiAoaW9jLT5zZW5zZV9sZW4pIHsKKwkJLyoKKwkJICogc2Vuc2VfcHRyIHBvaW50cyB0byB0aGUgbG9jYXRpb24gdGhhdCBoYXMgdGhlIHVzZXIKKwkJICogc2Vuc2UgYnVmZmVyIGFkZHJlc3MKKwkJICovCisJCXNlbnNlX3B0ciA9ICh1bnNpZ25lZCBsb25nICopICgodW5zaWduZWQgbG9uZylpb2MtPmZyYW1lLnJhdyArCisJCQkJaW9jLT5zZW5zZV9vZmYpOworCisJCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopKCh1bnNpZ25lZCBsb25nKSgqc2Vuc2VfcHRyKSksCisJCQkJIHNlbnNlLCBpb2MtPnNlbnNlX2xlbikpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAibWVnYXNhczogRmFpbGVkIHRvIGNvcHkgb3V0IHRvIHVzZXIgIgorCQkJCQkic2Vuc2UgZGF0YVxuIik7CisJCQllcnJvciA9IC1FRkFVTFQ7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCS8qCisJICogY29weSB0aGUgc3RhdHVzIGNvZGVzIHJldHVybmVkIGJ5IHRoZSBmdworCSAqLworCWlmIChjb3B5X3RvX3VzZXIoJnVzZXJfaW9jLT5mcmFtZS5oZHIuY21kX3N0YXR1cywKKwkJCSAmY21kLT5mcmFtZS0+aGRyLmNtZF9zdGF0dXMsIHNpemVvZih1OCkpKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJtZWdhc2FzOiBFcnJvciBjb3B5aW5nIG91dCBjbWRfc3RhdHVzXG4iKTsKKwkJZXJyb3IgPSAtRUZBVUxUOworCX0KKworICAgICAgb3V0OgorCWlmIChzZW5zZSkgeworCQlkbWFfZnJlZV9jb2hlcmVudCgmaW5zdGFuY2UtPnBkZXYtPmRldiwgaW9jLT5zZW5zZV9sZW4sCisJCQkJICAgIHNlbnNlLCBzZW5zZV9oYW5kbGUpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBpb2MtPnNnZV9jb3VudCAmJiBrYnVmZl9hcnJbaV07IGkrKykgeworCQlkbWFfZnJlZV9jb2hlcmVudCgmaW5zdGFuY2UtPnBkZXYtPmRldiwKKwkJCQkgICAga2Vybl9zZ2UzMltpXS5sZW5ndGgsCisJCQkJICAgIGtidWZmX2FycltpXSwga2Vybl9zZ2UzMltpXS5waHlzX2FkZHIpOworCX0KKworCW1lZ2FzYXNfcmV0dXJuX2NtZChpbnN0YW5jZSwgY21kKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyBpbnQgbWVnYXNhc19tZ210X2lvY3RsX2Z3KHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgbWVnYXNhc19pb2NwYWNrZXQgX191c2VyICp1c2VyX2lvYyA9CisJICAgIChzdHJ1Y3QgbWVnYXNhc19pb2NwYWNrZXQgX191c2VyICopYXJnOworCXN0cnVjdCBtZWdhc2FzX2lvY3BhY2tldCAqaW9jOworCXN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZTsKKwlpbnQgZXJyb3I7CisJaW50IGk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgd2FpdF90aW1lID0gTUVHQVNBU19SRVNFVF9XQUlUX1RJTUU7CisKKwlpb2MgPSBrbWFsbG9jKHNpemVvZigqaW9jKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpb2MpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKGNvcHlfZnJvbV91c2VyKGlvYywgdXNlcl9pb2MsIHNpemVvZigqaW9jKSkpIHsKKwkJZXJyb3IgPSAtRUZBVUxUOworCQlnb3RvIG91dF9rZnJlZV9pb2M7CisJfQorCisJaW5zdGFuY2UgPSBtZWdhc2FzX2xvb2t1cF9pbnN0YW5jZShpb2MtPmhvc3Rfbm8pOworCWlmICghaW5zdGFuY2UpIHsKKwkJZXJyb3IgPSAtRU5PREVWOworCQlnb3RvIG91dF9rZnJlZV9pb2M7CisJfQorCisJaWYgKGluc3RhbmNlLT5hZHByZWNvdmVyeSA9PSBNRUdBU0FTX0hXX0NSSVRJQ0FMX0VSUk9SKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQ29udHJvbGxlciBpbiBjcml0IGVycm9yXG4iKTsKKwkJZXJyb3IgPSAtRU5PREVWOworCQlnb3RvIG91dF9rZnJlZV9pb2M7CisJfQorCisJaWYgKGluc3RhbmNlLT51bmxvYWQgPT0gMSkgeworCQllcnJvciA9IC1FTk9ERVY7CisJCWdvdG8gb3V0X2tmcmVlX2lvYzsKKwl9CisKKwkvKgorCSAqIFdlIHdpbGwgYWxsb3cgb25seSBNRUdBU0FTX0lOVF9DTURTIG51bWJlciBvZiBwYXJhbGxlbCBpb2N0bCBjbWRzCisJICovCisJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmaW5zdGFuY2UtPmlvY3RsX3NlbSkpIHsKKwkJZXJyb3IgPSAtRVJFU1RBUlRTWVM7CisJCWdvdG8gb3V0X2tmcmVlX2lvYzsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgd2FpdF90aW1lOyBpKyspIHsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW5zdGFuY2UtPmhiYV9sb2NrLCBmbGFncyk7CisJCWlmIChpbnN0YW5jZS0+YWRwcmVjb3ZlcnkgPT0gTUVHQVNBU19IQkFfT1BFUkFUSU9OQUwpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluc3RhbmNlLT5oYmFfbG9jaywgZmxhZ3MpOworCQkJYnJlYWs7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5zdGFuY2UtPmhiYV9sb2NrLCBmbGFncyk7CisKKwkJaWYgKCEoaSAlIE1FR0FTQVNfUkVTRVRfTk9USUNFX0lOVEVSVkFMKSkgeworCQkJcHJpbnRrKEtFUk5fTk9USUNFICJtZWdhc2FzOiB3YWl0aW5nIgorCQkJCSJmb3IgY29udHJvbGxlciByZXNldCB0byBmaW5pc2hcbiIpOworCQl9CisKKwkJbXNsZWVwKDEwMDApOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZpbnN0YW5jZS0+aGJhX2xvY2ssIGZsYWdzKTsKKwlpZiAoaW5zdGFuY2UtPmFkcHJlY292ZXJ5ICE9IE1FR0FTQVNfSEJBX09QRVJBVElPTkFMKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluc3RhbmNlLT5oYmFfbG9jaywgZmxhZ3MpOworCisJCXByaW50ayhLRVJOX0VSUiAibWVnYXJhaWRfc2FzOiB0aW1lZCBvdXQgd2hpbGUiCisJCQkid2FpdGluZyBmb3IgSEJBIHRvIHJlY292ZXJcbiIpOworCQllcnJvciA9IC1FTk9ERVY7CisJCWdvdG8gb3V0X2tmcmVlX2lvYzsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5zdGFuY2UtPmhiYV9sb2NrLCBmbGFncyk7CisKKwllcnJvciA9IG1lZ2FzYXNfbWdtdF9md19pb2N0bChpbnN0YW5jZSwgdXNlcl9pb2MsIGlvYyk7CisJdXAoJmluc3RhbmNlLT5pb2N0bF9zZW0pOworCisgICAgICBvdXRfa2ZyZWVfaW9jOgorCWtmcmVlKGlvYyk7CisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgaW50IG1lZ2FzYXNfbWdtdF9pb2N0bF9hZW4oc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZTsKKwlzdHJ1Y3QgbWVnYXNhc19hZW4gYWVuOworCWludCBlcnJvcjsKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiB3YWl0X3RpbWUgPSBNRUdBU0FTX1JFU0VUX1dBSVRfVElNRTsKKworCWlmIChmaWxlLT5wcml2YXRlX2RhdGEgIT0gZmlsZSkgeworCQlwcmludGsoS0VSTl9ERUJVRyAibWVnYXNhczogZmFzeW5jX2hlbHBlciB3YXMgbm90ICIKKwkJICAgICAgICJjYWxsZWQgZmlyc3RcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmFlbiwgKHZvaWQgX191c2VyICopYXJnLCBzaXplb2YoYWVuKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJaW5zdGFuY2UgPSBtZWdhc2FzX2xvb2t1cF9pbnN0YW5jZShhZW4uaG9zdF9ubyk7CisKKwlpZiAoIWluc3RhbmNlKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmIChpbnN0YW5jZS0+YWRwcmVjb3ZlcnkgPT0gTUVHQVNBU19IV19DUklUSUNBTF9FUlJPUikgeworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAoaW5zdGFuY2UtPnVubG9hZCA9PSAxKSB7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWZvciAoaSA9IDA7IGkgPCB3YWl0X3RpbWU7IGkrKykgeworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZpbnN0YW5jZS0+aGJhX2xvY2ssIGZsYWdzKTsKKwkJaWYgKGluc3RhbmNlLT5hZHByZWNvdmVyeSA9PSBNRUdBU0FTX0hCQV9PUEVSQVRJT05BTCkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5zdGFuY2UtPmhiYV9sb2NrLAorCQkJCQkJZmxhZ3MpOworCQkJYnJlYWs7CisJCX0KKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbnN0YW5jZS0+aGJhX2xvY2ssIGZsYWdzKTsKKworCQlpZiAoIShpICUgTUVHQVNBU19SRVNFVF9OT1RJQ0VfSU5URVJWQUwpKSB7CisJCQlwcmludGsoS0VSTl9OT1RJQ0UgIm1lZ2FzYXM6IHdhaXRpbmcgZm9yIgorCQkJCSJjb250cm9sbGVyIHJlc2V0IHRvIGZpbmlzaFxuIik7CisJCX0KKworCQltc2xlZXAoMTAwMCk7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmluc3RhbmNlLT5oYmFfbG9jaywgZmxhZ3MpOworCWlmIChpbnN0YW5jZS0+YWRwcmVjb3ZlcnkgIT0gTUVHQVNBU19IQkFfT1BFUkFUSU9OQUwpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5zdGFuY2UtPmhiYV9sb2NrLCBmbGFncyk7CisJCXByaW50ayhLRVJOX0VSUiAibWVnYXJhaWRfc2FzOiB0aW1lZCBvdXQgd2hpbGUgd2FpdGluZyIKKwkJCQkiZm9yIEhCQSB0byByZWNvdmVyLlxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbnN0YW5jZS0+aGJhX2xvY2ssIGZsYWdzKTsKKworCW11dGV4X2xvY2soJmluc3RhbmNlLT5hZW5fbXV0ZXgpOworCWVycm9yID0gbWVnYXNhc19yZWdpc3Rlcl9hZW4oaW5zdGFuY2UsIGFlbi5zZXFfbnVtLAorCQkJCSAgICAgYWVuLmNsYXNzX2xvY2FsZV93b3JkKTsKKwltdXRleF91bmxvY2soJmluc3RhbmNlLT5hZW5fbXV0ZXgpOworCXJldHVybiBlcnJvcjsKK30KKworLyoqCisgKiBtZWdhc2FzX21nbXRfaW9jdGwgLQljaGFyIG5vZGUgaW9jdGwgZW50cnkgcG9pbnQKKyAqLworc3RhdGljIGxvbmcKK21lZ2FzYXNfbWdtdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3dpdGNoIChjbWQpIHsKKwljYXNlIE1FR0FTQVNfSU9DX0ZJUk1XQVJFOgorCQlyZXR1cm4gbWVnYXNhc19tZ210X2lvY3RsX2Z3KGZpbGUsIGFyZyk7CisKKwljYXNlIE1FR0FTQVNfSU9DX0dFVF9BRU46CisJCXJldHVybiBtZWdhc2FzX21nbXRfaW9jdGxfYWVuKGZpbGUsIGFyZyk7CisJfQorCisJcmV0dXJuIC1FTk9UVFk7Cit9CisKKyNpZmRlZiBDT05GSUdfQ09NUEFUCitzdGF0aWMgaW50IG1lZ2FzYXNfbWdtdF9jb21wYXRfaW9jdGxfZncoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBjb21wYXRfbWVnYXNhc19pb2NwYWNrZXQgX191c2VyICpjaW9jID0KKwkgICAgKHN0cnVjdCBjb21wYXRfbWVnYXNhc19pb2NwYWNrZXQgX191c2VyICopYXJnOworCXN0cnVjdCBtZWdhc2FzX2lvY3BhY2tldCBfX3VzZXIgKmlvYyA9CisJICAgIGNvbXBhdF9hbGxvY191c2VyX3NwYWNlKHNpemVvZihzdHJ1Y3QgbWVnYXNhc19pb2NwYWNrZXQpKTsKKwlpbnQgaTsKKwlpbnQgZXJyb3IgPSAwOworCWNvbXBhdF91cHRyX3QgcHRyOworCisJaWYgKGNsZWFyX3VzZXIoaW9jLCBzaXplb2YoKmlvYykpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmIChjb3B5X2luX3VzZXIoJmlvYy0+aG9zdF9ubywgJmNpb2MtPmhvc3Rfbm8sIHNpemVvZih1MTYpKSB8fAorCSAgICBjb3B5X2luX3VzZXIoJmlvYy0+c2dsX29mZiwgJmNpb2MtPnNnbF9vZmYsIHNpemVvZih1MzIpKSB8fAorCSAgICBjb3B5X2luX3VzZXIoJmlvYy0+c2Vuc2Vfb2ZmLCAmY2lvYy0+c2Vuc2Vfb2ZmLCBzaXplb2YodTMyKSkgfHwKKwkgICAgY29weV9pbl91c2VyKCZpb2MtPnNlbnNlX2xlbiwgJmNpb2MtPnNlbnNlX2xlbiwgc2l6ZW9mKHUzMikpIHx8CisJICAgIGNvcHlfaW5fdXNlcihpb2MtPmZyYW1lLnJhdywgY2lvYy0+ZnJhbWUucmF3LCAxMjgpIHx8CisJICAgIGNvcHlfaW5fdXNlcigmaW9jLT5zZ2VfY291bnQsICZjaW9jLT5zZ2VfY291bnQsIHNpemVvZih1MzIpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwkvKgorCSAqIFRoZSBzZW5zZV9wdHIgaXMgdXNlZCBpbiBtZWdhc2FzX21nbXRfZndfaW9jdGwgb25seSB3aGVuCisJICogc2Vuc2VfbGVuIGlzIG5vdCBudWxsLCBzbyBwcmVwYXJlIHRoZSA2NGJpdCB2YWx1ZSB1bmRlcgorCSAqIHRoZSBzYW1lIGNvbmRpdGlvbi4KKwkgKi8KKwlpZiAoaW9jLT5zZW5zZV9sZW4pIHsKKwkJdm9pZCBfX3VzZXIgKipzZW5zZV9pb2NfcHRyID0KKwkJCSh2b2lkIF9fdXNlciAqKikoaW9jLT5mcmFtZS5yYXcgKyBpb2MtPnNlbnNlX29mZik7CisJCWNvbXBhdF91cHRyX3QgKnNlbnNlX2Npb2NfcHRyID0KKwkJCShjb21wYXRfdXB0cl90ICopKGNpb2MtPmZyYW1lLnJhdyArIGNpb2MtPnNlbnNlX29mZik7CisJCWlmIChnZXRfdXNlcihwdHIsIHNlbnNlX2Npb2NfcHRyKSB8fAorCQkgICAgcHV0X3VzZXIoY29tcGF0X3B0cihwdHIpLCBzZW5zZV9pb2NfcHRyKSkKKwkJCXJldHVybiAtRUZBVUxUOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBNQVhfSU9DVExfU0dFOyBpKyspIHsKKwkJaWYgKGdldF91c2VyKHB0ciwgJmNpb2MtPnNnbFtpXS5pb3ZfYmFzZSkgfHwKKwkJICAgIHB1dF91c2VyKGNvbXBhdF9wdHIocHRyKSwgJmlvYy0+c2dsW2ldLmlvdl9iYXNlKSB8fAorCQkgICAgY29weV9pbl91c2VyKCZpb2MtPnNnbFtpXS5pb3ZfbGVuLAorCQkJCSAmY2lvYy0+c2dsW2ldLmlvdl9sZW4sIHNpemVvZihjb21wYXRfc2l6ZV90KSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwllcnJvciA9IG1lZ2FzYXNfbWdtdF9pb2N0bF9mdyhmaWxlLCAodW5zaWduZWQgbG9uZylpb2MpOworCisJaWYgKGNvcHlfaW5fdXNlcigmY2lvYy0+ZnJhbWUuaGRyLmNtZF9zdGF0dXMsCisJCQkgJmlvYy0+ZnJhbWUuaGRyLmNtZF9zdGF0dXMsIHNpemVvZih1OCkpKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJtZWdhc2FzOiBlcnJvciBjb3B5X2luX3VzZXIgY21kX3N0YXR1c1xuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyBsb25nCittZWdhc2FzX21nbXRfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAorCQkJICB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgTUVHQVNBU19JT0NfRklSTVdBUkUzMjoKKwkJcmV0dXJuIG1lZ2FzYXNfbWdtdF9jb21wYXRfaW9jdGxfZncoZmlsZSwgYXJnKTsKKwljYXNlIE1FR0FTQVNfSU9DX0dFVF9BRU46CisJCXJldHVybiBtZWdhc2FzX21nbXRfaW9jdGxfYWVuKGZpbGUsIGFyZyk7CisJfQorCisJcmV0dXJuIC1FTk9UVFk7Cit9CisjZW5kaWYKKworLyoKKyAqIEZpbGUgb3BlcmF0aW9ucyBzdHJ1Y3R1cmUgZm9yIG1hbmFnZW1lbnQgaW50ZXJmYWNlCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1lZ2FzYXNfbWdtdF9mb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5vcGVuID0gbWVnYXNhc19tZ210X29wZW4sCisJLmZhc3luYyA9IG1lZ2FzYXNfbWdtdF9mYXN5bmMsCisJLnVubG9ja2VkX2lvY3RsID0gbWVnYXNhc19tZ210X2lvY3RsLAorCS5wb2xsID0gbWVnYXNhc19tZ210X3BvbGwsCisjaWZkZWYgQ09ORklHX0NPTVBBVAorCS5jb21wYXRfaW9jdGwgPSBtZWdhc2FzX21nbXRfY29tcGF0X2lvY3RsLAorI2VuZGlmCisJLmxsc2VlayA9IG5vb3BfbGxzZWVrLAorfTsKKworLyoKKyAqIFBDSSBob3RwbHVnIHN1cHBvcnQgcmVnaXN0cmF0aW9uIHN0cnVjdHVyZQorICovCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbWVnYXNhc19wY2lfZHJpdmVyID0geworCisJLm5hbWUgPSAibWVnYXJhaWRfc2FzIiwKKwkuaWRfdGFibGUgPSBtZWdhc2FzX3BjaV90YWJsZSwKKwkucHJvYmUgPSBtZWdhc2FzX3Byb2JlX29uZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AobWVnYXNhc19kZXRhY2hfb25lKSwKKwkuc3VzcGVuZCA9IG1lZ2FzYXNfc3VzcGVuZCwKKwkucmVzdW1lID0gbWVnYXNhc19yZXN1bWUsCisJLnNodXRkb3duID0gbWVnYXNhc19zaHV0ZG93biwKK307CisKKy8qCisgKiBTeXNmcyBkcml2ZXIgYXR0cmlidXRlcworICovCitzdGF0aWMgc3NpemVfdCBtZWdhc2FzX3N5c2ZzX3Nob3dfdmVyc2lvbihzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZGQsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc25wcmludGYoYnVmLCBzdHJsZW4oTUVHQVNBU19WRVJTSU9OKSArIDIsICIlc1xuIiwKKwkJCU1FR0FTQVNfVkVSU0lPTik7Cit9CisKK3N0YXRpYyBEUklWRVJfQVRUUih2ZXJzaW9uLCBTX0lSVUdPLCBtZWdhc2FzX3N5c2ZzX3Nob3dfdmVyc2lvbiwgTlVMTCk7CisKK3N0YXRpYyBzc2l6ZV90CittZWdhc2FzX3N5c2ZzX3Nob3dfcmVsZWFzZV9kYXRlKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkZCwgY2hhciAqYnVmKQoreworCXJldHVybiBzbnByaW50ZihidWYsIHN0cmxlbihNRUdBU0FTX1JFTERBVEUpICsgMiwgIiVzXG4iLAorCQkJTUVHQVNBU19SRUxEQVRFKTsKK30KKworc3RhdGljIERSSVZFUl9BVFRSKHJlbGVhc2VfZGF0ZSwgU19JUlVHTywgbWVnYXNhc19zeXNmc19zaG93X3JlbGVhc2VfZGF0ZSwKKwkJICAgTlVMTCk7CisKK3N0YXRpYyBzc2l6ZV90CittZWdhc2FzX3N5c2ZzX3Nob3dfc3VwcG9ydF9wb2xsX2Zvcl9ldmVudChzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZGQsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgc3VwcG9ydF9wb2xsX2Zvcl9ldmVudCk7Cit9CisKK3N0YXRpYyBEUklWRVJfQVRUUihzdXBwb3J0X3BvbGxfZm9yX2V2ZW50LCBTX0lSVUdPLAorCQkJbWVnYXNhc19zeXNmc19zaG93X3N1cHBvcnRfcG9sbF9mb3JfZXZlbnQsIE5VTEwpOworCisgc3RhdGljIHNzaXplX3QKK21lZ2FzYXNfc3lzZnNfc2hvd19zdXBwb3J0X2RldmljZV9jaGFuZ2Uoc3RydWN0IGRldmljZV9kcml2ZXIgKmRkLCBjaGFyICpidWYpCit7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIHN1cHBvcnRfZGV2aWNlX2NoYW5nZSk7Cit9CisKK3N0YXRpYyBEUklWRVJfQVRUUihzdXBwb3J0X2RldmljZV9jaGFuZ2UsIFNfSVJVR08sCisJCQltZWdhc2FzX3N5c2ZzX3Nob3dfc3VwcG9ydF9kZXZpY2VfY2hhbmdlLCBOVUxMKTsKKworc3RhdGljIHNzaXplX3QKK21lZ2FzYXNfc3lzZnNfc2hvd19kYmdfbHZsKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkZCwgY2hhciAqYnVmKQoreworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBtZWdhc2FzX2RiZ19sdmwpOworfQorCitzdGF0aWMgc3NpemVfdAorbWVnYXNhc19zeXNmc19zZXRfZGJnX2x2bChzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZGQsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCWludCByZXR2YWwgPSBjb3VudDsKKwlpZihzc2NhbmYoYnVmLCIldSIsJm1lZ2FzYXNfZGJnX2x2bCk8MSl7CisJCXByaW50ayhLRVJOX0VSUiAibWVnYXNhczogY291bGQgbm90IHNldCBkYmdfbHZsXG4iKTsKKwkJcmV0dmFsID0gLUVJTlZBTDsKKwl9CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIERSSVZFUl9BVFRSKGRiZ19sdmwsIFNfSVJVR098U19JV1VTUiwgbWVnYXNhc19zeXNmc19zaG93X2RiZ19sdmwsCisJCW1lZ2FzYXNfc3lzZnNfc2V0X2RiZ19sdmwpOworCitzdGF0aWMgc3NpemVfdAorbWVnYXNhc19zeXNmc19zaG93X3BvbGxfbW9kZV9pbyhzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZGQsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgcG9sbF9tb2RlX2lvKTsKK30KKworc3RhdGljIHNzaXplX3QKK21lZ2FzYXNfc3lzZnNfc2V0X3BvbGxfbW9kZV9pbyhzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZGQsCisJCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJaW50IHJldHZhbCA9IGNvdW50OworCWludCB0bXAgPSBwb2xsX21vZGVfaW87CisJaW50IGk7CisJc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlOworCisJaWYgKHNzY2FuZihidWYsICIldSIsICZwb2xsX21vZGVfaW8pIDwgMSkgeworCQlwcmludGsoS0VSTl9FUlIgIm1lZ2FzYXM6IGNvdWxkIG5vdCBzZXQgcG9sbF9tb2RlX2lvXG4iKTsKKwkJcmV0dmFsID0gLUVJTlZBTDsKKwl9CisKKwkvKgorCSAqIENoZWNrIGlmIHBvbGxfbW9kZV9pbyBpcyBhbHJlYWR5IHNldCBvciBpcyBzYW1lIGFzIHByZXZpb3VzIHZhbHVlCisJICovCisJaWYgKCh0bXAgJiYgcG9sbF9tb2RlX2lvKSB8fCAodG1wID09IHBvbGxfbW9kZV9pbykpCisJCWdvdG8gb3V0OworCisJaWYgKHBvbGxfbW9kZV9pbykgeworCQkvKgorCQkgKiBTdGFydCB0aW1lcnMgZm9yIGFsbCBhZGFwdGVycworCQkgKi8KKwkJZm9yIChpID0gMDsgaSA8IG1lZ2FzYXNfbWdtdF9pbmZvLm1heF9pbmRleDsgaSsrKSB7CisJCQlpbnN0YW5jZSA9IG1lZ2FzYXNfbWdtdF9pbmZvLmluc3RhbmNlW2ldOworCQkJaWYgKGluc3RhbmNlKSB7CisJCQkJbWVnYXNhc19zdGFydF90aW1lcihpbnN0YW5jZSwKKwkJCQkJJmluc3RhbmNlLT5pb19jb21wbGV0aW9uX3RpbWVyLAorCQkJCQltZWdhc2FzX2lvX2NvbXBsZXRpb25fdGltZXIsCisJCQkJCU1FR0FTQVNfQ09NUExFVElPTl9USU1FUl9JTlRFUlZBTCk7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQkvKgorCQkgKiBEZWxldGUgdGltZXJzIGZvciBhbGwgYWRhcHRlcnMKKwkJICovCisJCWZvciAoaSA9IDA7IGkgPCBtZWdhc2FzX21nbXRfaW5mby5tYXhfaW5kZXg7IGkrKykgeworCQkJaW5zdGFuY2UgPSBtZWdhc2FzX21nbXRfaW5mby5pbnN0YW5jZVtpXTsKKwkJCWlmIChpbnN0YW5jZSkKKwkJCQlkZWxfdGltZXJfc3luYygmaW5zdGFuY2UtPmlvX2NvbXBsZXRpb25fdGltZXIpOworCQl9CisJfQorCitvdXQ6CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQKK21lZ2FzYXNfYWVuX3BvbGxpbmcoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBtZWdhc2FzX2Flbl9ldmVudCAqZXYgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IG1lZ2FzYXNfYWVuX2V2ZW50LCBob3RwbHVnX3dvcmspOworCXN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSA9IGV2LT5pbnN0YW5jZTsKKwl1bmlvbiBtZWdhc2FzX2V2dF9jbGFzc19sb2NhbGUgY2xhc3NfbG9jYWxlOworCXN0cnVjdCAgU2NzaV9Ib3N0ICpob3N0OworCXN0cnVjdCAgc2NzaV9kZXZpY2UgKnNkZXYxOworCXUxNiAgICAgcGRfaW5kZXggPSAwOworCXUxNglsZF9pbmRleCA9IDA7CisJaW50ICAgICBpLCBqLCBkb3NjYW4gPSAwOworCXUzMiBzZXFfbnVtOworCWludCBlcnJvcjsKKworCWlmICghaW5zdGFuY2UpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJpbnZhbGlkIGluc3RhbmNlIVxuIik7CisJCWtmcmVlKGV2KTsKKwkJcmV0dXJuOworCX0KKwlpbnN0YW5jZS0+ZXYgPSBOVUxMOworCWhvc3QgPSBpbnN0YW5jZS0+aG9zdDsKKwlpZiAoaW5zdGFuY2UtPmV2dF9kZXRhaWwpIHsKKworCQlzd2l0Y2ggKGluc3RhbmNlLT5ldnRfZGV0YWlsLT5jb2RlKSB7CisJCWNhc2UgTVJfRVZUX1BEX0lOU0VSVEVEOgorCQkJaWYgKG1lZ2FzYXNfZ2V0X3BkX2xpc3QoaW5zdGFuY2UpID09IDApIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBNRUdBU0FTX01BWF9QRF9DSEFOTkVMUzsgaSsrKSB7CisJCQkJZm9yIChqID0gMDsKKwkJCQlqIDwgTUVHQVNBU19NQVhfREVWX1BFUl9DSEFOTkVMOworCQkJCWorKykgeworCisJCQkJcGRfaW5kZXggPQorCQkJCShpICogTUVHQVNBU19NQVhfREVWX1BFUl9DSEFOTkVMKSArIGo7CisKKwkJCQlzZGV2MSA9CisJCQkJc2NzaV9kZXZpY2VfbG9va3VwKGhvc3QsIGksIGosIDApOworCisJCQkJaWYgKGluc3RhbmNlLT5wZF9saXN0W3BkX2luZGV4XS5kcml2ZVN0YXRlCisJCQkJCQk9PSBNUl9QRF9TVEFURV9TWVNURU0pIHsKKwkJCQkJCWlmICghc2RldjEpIHsKKwkJCQkJCXNjc2lfYWRkX2RldmljZShob3N0LCBpLCBqLCAwKTsKKwkJCQkJCX0KKworCQkJCQlpZiAoc2RldjEpCisJCQkJCQlzY3NpX2RldmljZV9wdXQoc2RldjEpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJfQorCQkJZG9zY2FuID0gMDsKKwkJCWJyZWFrOworCisJCWNhc2UgTVJfRVZUX1BEX1JFTU9WRUQ6CisJCQlpZiAobWVnYXNhc19nZXRfcGRfbGlzdChpbnN0YW5jZSkgPT0gMCkgeworCQkJbWVnYXNhc19nZXRfcGRfbGlzdChpbnN0YW5jZSk7CisJCQlmb3IgKGkgPSAwOyBpIDwgTUVHQVNBU19NQVhfUERfQ0hBTk5FTFM7IGkrKykgeworCQkJCWZvciAoaiA9IDA7CisJCQkJaiA8IE1FR0FTQVNfTUFYX0RFVl9QRVJfQ0hBTk5FTDsKKwkJCQlqKyspIHsKKworCQkJCXBkX2luZGV4ID0KKwkJCQkoaSAqIE1FR0FTQVNfTUFYX0RFVl9QRVJfQ0hBTk5FTCkgKyBqOworCisJCQkJc2RldjEgPQorCQkJCXNjc2lfZGV2aWNlX2xvb2t1cChob3N0LCBpLCBqLCAwKTsKKworCQkJCWlmIChpbnN0YW5jZS0+cGRfbGlzdFtwZF9pbmRleF0uZHJpdmVTdGF0ZQorCQkJCQk9PSBNUl9QRF9TVEFURV9TWVNURU0pIHsKKwkJCQkJaWYgKHNkZXYxKSB7CisJCQkJCQlzY3NpX2RldmljZV9wdXQoc2RldjEpOworCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYgKHNkZXYxKSB7CisJCQkJCQlzY3NpX3JlbW92ZV9kZXZpY2Uoc2RldjEpOworCQkJCQkJc2NzaV9kZXZpY2VfcHV0KHNkZXYxKTsKKwkJCQkJfQorCQkJCX0KKwkJCQl9CisJCQl9CisJCQl9CisJCQlkb3NjYW4gPSAwOworCQkJYnJlYWs7CisKKwkJY2FzZSBNUl9FVlRfTERfT0ZGTElORToKKwkJY2FzZSBNUl9FVlRfTERfREVMRVRFRDoKKwkJCW1lZ2FzYXNfZ2V0X2xkX2xpc3QoaW5zdGFuY2UpOworCQkJZm9yIChpID0gMDsgaSA8IE1FR0FTQVNfTUFYX0xEX0NIQU5ORUxTOyBpKyspIHsKKwkJCQlmb3IgKGogPSAwOworCQkJCWogPCBNRUdBU0FTX01BWF9ERVZfUEVSX0NIQU5ORUw7CisJCQkJaisrKSB7CisKKwkJCQlsZF9pbmRleCA9CisJCQkJKGkgKiBNRUdBU0FTX01BWF9ERVZfUEVSX0NIQU5ORUwpICsgajsKKworCQkJCXNkZXYxID0gc2NzaV9kZXZpY2VfbG9va3VwKGhvc3QsCisJCQkJCWkgKyBNRUdBU0FTX01BWF9MRF9DSEFOTkVMUywKKwkJCQkJaiwKKwkJCQkJMCk7CisKKwkJCQlpZiAoaW5zdGFuY2UtPmxkX2lkc1tsZF9pbmRleF0gIT0gMHhmZikgeworCQkJCQlpZiAoc2RldjEpIHsKKwkJCQkJCXNjc2lfZGV2aWNlX3B1dChzZGV2MSk7CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkJCQlpZiAoc2RldjEpIHsKKwkJCQkJCXNjc2lfcmVtb3ZlX2RldmljZShzZGV2MSk7CisJCQkJCQlzY3NpX2RldmljZV9wdXQoc2RldjEpOworCQkJCQl9CisJCQkJfQorCQkJCX0KKwkJCX0KKwkJCWRvc2NhbiA9IDA7CisJCQlicmVhazsKKwkJY2FzZSBNUl9FVlRfTERfQ1JFQVRFRDoKKwkJCW1lZ2FzYXNfZ2V0X2xkX2xpc3QoaW5zdGFuY2UpOworCQkJZm9yIChpID0gMDsgaSA8IE1FR0FTQVNfTUFYX0xEX0NIQU5ORUxTOyBpKyspIHsKKwkJCQlmb3IgKGogPSAwOworCQkJCQlqIDwgTUVHQVNBU19NQVhfREVWX1BFUl9DSEFOTkVMOworCQkJCQlqKyspIHsKKwkJCQkJbGRfaW5kZXggPQorCQkJCQkoaSAqIE1FR0FTQVNfTUFYX0RFVl9QRVJfQ0hBTk5FTCkgKyBqOworCisJCQkJCXNkZXYxID0gc2NzaV9kZXZpY2VfbG9va3VwKGhvc3QsCisJCQkJCQlpK01FR0FTQVNfTUFYX0xEX0NIQU5ORUxTLAorCQkJCQkJaiwgMCk7CisKKwkJCQkJaWYgKGluc3RhbmNlLT5sZF9pZHNbbGRfaW5kZXhdICE9CisJCQkJCQkJCTB4ZmYpIHsKKwkJCQkJCWlmICghc2RldjEpIHsKKwkJCQkJCQlzY3NpX2FkZF9kZXZpY2UoaG9zdCwKKwkJCQkJCQkJaSArIDIsCisJCQkJCQkJCWosIDApOworCQkJCQkJfQorCQkJCQl9CisJCQkJCWlmIChzZGV2MSkgeworCQkJCQkJc2NzaV9kZXZpY2VfcHV0KHNkZXYxKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCWRvc2NhbiA9IDA7CisJCQlicmVhazsKKwkJY2FzZSBNUl9FVlRfQ1RSTF9IT1NUX0JVU19TQ0FOX1JFUVVFU1RFRDoKKwkJY2FzZSBNUl9FVlRfRk9SRUlHTl9DRkdfSU1QT1JURUQ6CisJCWNhc2UgTVJfRVZUX0xEX1NUQVRFX0NIQU5HRToKKwkJCWRvc2NhbiA9IDE7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWRvc2NhbiA9IDA7CisJCQlicmVhazsKKwkJfQorCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0VSUiAiaW52YWxpZCBldnRfZGV0YWlsIVxuIik7CisJCWtmcmVlKGV2KTsKKwkJcmV0dXJuOworCX0KKworCWlmIChkb3NjYW4pIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAic2Nhbm5pbmcgLi4uXG4iKTsKKwkJbWVnYXNhc19nZXRfcGRfbGlzdChpbnN0YW5jZSk7CisJCWZvciAoaSA9IDA7IGkgPCBNRUdBU0FTX01BWF9QRF9DSEFOTkVMUzsgaSsrKSB7CisJCQlmb3IgKGogPSAwOyBqIDwgTUVHQVNBU19NQVhfREVWX1BFUl9DSEFOTkVMOyBqKyspIHsKKwkJCQlwZF9pbmRleCA9IGkqTUVHQVNBU19NQVhfREVWX1BFUl9DSEFOTkVMICsgajsKKwkJCQlzZGV2MSA9IHNjc2lfZGV2aWNlX2xvb2t1cChob3N0LCBpLCBqLCAwKTsKKwkJCQlpZiAoaW5zdGFuY2UtPnBkX2xpc3RbcGRfaW5kZXhdLmRyaXZlU3RhdGUgPT0KKwkJCQkJCQlNUl9QRF9TVEFURV9TWVNURU0pIHsKKwkJCQkJaWYgKCFzZGV2MSkgeworCQkJCQkJc2NzaV9hZGRfZGV2aWNlKGhvc3QsIGksIGosIDApOworCQkJCQl9CisJCQkJCWlmIChzZGV2MSkKKwkJCQkJCXNjc2lfZGV2aWNlX3B1dChzZGV2MSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYgKHNkZXYxKSB7CisJCQkJCQlzY3NpX3JlbW92ZV9kZXZpY2Uoc2RldjEpOworCQkJCQkJc2NzaV9kZXZpY2VfcHV0KHNkZXYxKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCisJCW1lZ2FzYXNfZ2V0X2xkX2xpc3QoaW5zdGFuY2UpOworCQlmb3IgKGkgPSAwOyBpIDwgTUVHQVNBU19NQVhfTERfQ0hBTk5FTFM7IGkrKykgeworCQkJZm9yIChqID0gMDsgaiA8IE1FR0FTQVNfTUFYX0RFVl9QRVJfQ0hBTk5FTDsgaisrKSB7CisJCQkJbGRfaW5kZXggPQorCQkJCShpICogTUVHQVNBU19NQVhfREVWX1BFUl9DSEFOTkVMKSArIGo7CisKKwkJCQlzZGV2MSA9IHNjc2lfZGV2aWNlX2xvb2t1cChob3N0LAorCQkJCQlpK01FR0FTQVNfTUFYX0xEX0NIQU5ORUxTLCBqLCAwKTsKKwkJCQlpZiAoaW5zdGFuY2UtPmxkX2lkc1tsZF9pbmRleF0gIT0gMHhmZikgeworCQkJCQlpZiAoIXNkZXYxKSB7CisJCQkJCQlzY3NpX2FkZF9kZXZpY2UoaG9zdCwKKwkJCQkJCQkJaSsyLAorCQkJCQkJCQlqLCAwKTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCXNjc2lfZGV2aWNlX3B1dChzZGV2MSk7CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkJCQlpZiAoc2RldjEpIHsKKwkJCQkJCXNjc2lfcmVtb3ZlX2RldmljZShzZGV2MSk7CisJCQkJCQlzY3NpX2RldmljZV9wdXQoc2RldjEpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJaWYgKCBpbnN0YW5jZS0+YWVuX2NtZCAhPSBOVUxMICkgeworCQlrZnJlZShldik7CisJCXJldHVybiA7CisJfQorCisJc2VxX251bSA9IGluc3RhbmNlLT5ldnRfZGV0YWlsLT5zZXFfbnVtICsgMTsKKworCS8qIFJlZ2lzdGVyIEFFTiB3aXRoIEZXIGZvciBsYXRlc3Qgc2VxdWVuY2UgbnVtYmVyIHBsdXMgMSAqLworCWNsYXNzX2xvY2FsZS5tZW1iZXJzLnJlc2VydmVkID0gMDsKKwljbGFzc19sb2NhbGUubWVtYmVycy5sb2NhbGUgPSBNUl9FVlRfTE9DQUxFX0FMTDsKKwljbGFzc19sb2NhbGUubWVtYmVycy5jbGFzcyA9IE1SX0VWVF9DTEFTU19ERUJVRzsKKwltdXRleF9sb2NrKCZpbnN0YW5jZS0+YWVuX211dGV4KTsKKwllcnJvciA9IG1lZ2FzYXNfcmVnaXN0ZXJfYWVuKGluc3RhbmNlLCBzZXFfbnVtLAorCQkJCQljbGFzc19sb2NhbGUud29yZCk7CisJbXV0ZXhfdW5sb2NrKCZpbnN0YW5jZS0+YWVuX211dGV4KTsKKworCWlmIChlcnJvcikKKwkJcHJpbnRrKEtFUk5fRVJSICJyZWdpc3RlciBhZW4gZmFpbGVkIGVycm9yICV4XG4iLCBlcnJvcik7CisKKwlrZnJlZShldik7Cit9CisKKworc3RhdGljIERSSVZFUl9BVFRSKHBvbGxfbW9kZV9pbywgU19JUlVHT3xTX0lXVVNSLAorCQltZWdhc2FzX3N5c2ZzX3Nob3dfcG9sbF9tb2RlX2lvLAorCQltZWdhc2FzX3N5c2ZzX3NldF9wb2xsX21vZGVfaW8pOworCisvKioKKyAqIG1lZ2FzYXNfaW5pdCAtIERyaXZlciBsb2FkIGVudHJ5IHBvaW50CisgKi8KK3N0YXRpYyBpbnQgX19pbml0IG1lZ2FzYXNfaW5pdCh2b2lkKQoreworCWludCBydmFsOworCisJLyoKKwkgKiBBbm5vdW5jZSBkcml2ZXIgdmVyc2lvbiBhbmQgb3RoZXIgaW5mb3JtYXRpb24KKwkgKi8KKwlwcmludGsoS0VSTl9JTkZPICJtZWdhc2FzOiAlcyAlc1xuIiwgTUVHQVNBU19WRVJTSU9OLAorCSAgICAgICBNRUdBU0FTX0VYVF9WRVJTSU9OKTsKKworCXN1cHBvcnRfcG9sbF9mb3JfZXZlbnQgPSAyOworCXN1cHBvcnRfZGV2aWNlX2NoYW5nZSA9IDE7CisKKwltZW1zZXQoJm1lZ2FzYXNfbWdtdF9pbmZvLCAwLCBzaXplb2YobWVnYXNhc19tZ210X2luZm8pKTsKKworCS8qCisJICogUmVnaXN0ZXIgY2hhcmFjdGVyIGRldmljZSBub2RlCisJICovCisJcnZhbCA9IHJlZ2lzdGVyX2NocmRldigwLCAibWVnYXJhaWRfc2FzX2lvY3RsIiwgJm1lZ2FzYXNfbWdtdF9mb3BzKTsKKworCWlmIChydmFsIDwgMCkgeworCQlwcmludGsoS0VSTl9ERUJVRyAibWVnYXNhczogZmFpbGVkIHRvIG9wZW4gZGV2aWNlIG5vZGVcbiIpOworCQlyZXR1cm4gcnZhbDsKKwl9CisKKwltZWdhc2FzX21nbXRfbWFqb3JubyA9IHJ2YWw7CisKKwkvKgorCSAqIFJlZ2lzdGVyIG91cnNlbHZlcyBhcyBQQ0kgaG90cGx1ZyBtb2R1bGUKKwkgKi8KKwlydmFsID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmbWVnYXNhc19wY2lfZHJpdmVyKTsKKworCWlmIChydmFsKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJtZWdhc2FzOiBQQ0kgaG90cGx1ZyByZWdpc3JhdGlvbiBmYWlsZWQgXG4iKTsKKwkJZ290byBlcnJfcGNpZHJ2OworCX0KKworCXJ2YWwgPSBkcml2ZXJfY3JlYXRlX2ZpbGUoJm1lZ2FzYXNfcGNpX2RyaXZlci5kcml2ZXIsCisJCQkJICAmZHJpdmVyX2F0dHJfdmVyc2lvbik7CisJaWYgKHJ2YWwpCisJCWdvdG8gZXJyX2RjZl9hdHRyX3ZlcjsKKwlydmFsID0gZHJpdmVyX2NyZWF0ZV9maWxlKCZtZWdhc2FzX3BjaV9kcml2ZXIuZHJpdmVyLAorCQkJCSAgJmRyaXZlcl9hdHRyX3JlbGVhc2VfZGF0ZSk7CisJaWYgKHJ2YWwpCisJCWdvdG8gZXJyX2RjZl9yZWxfZGF0ZTsKKworCXJ2YWwgPSBkcml2ZXJfY3JlYXRlX2ZpbGUoJm1lZ2FzYXNfcGNpX2RyaXZlci5kcml2ZXIsCisJCQkJJmRyaXZlcl9hdHRyX3N1cHBvcnRfcG9sbF9mb3JfZXZlbnQpOworCWlmIChydmFsKQorCQlnb3RvIGVycl9kY2Zfc3VwcG9ydF9wb2xsX2Zvcl9ldmVudDsKKworCXJ2YWwgPSBkcml2ZXJfY3JlYXRlX2ZpbGUoJm1lZ2FzYXNfcGNpX2RyaXZlci5kcml2ZXIsCisJCQkJICAmZHJpdmVyX2F0dHJfZGJnX2x2bCk7CisJaWYgKHJ2YWwpCisJCWdvdG8gZXJyX2RjZl9kYmdfbHZsOworCXJ2YWwgPSBkcml2ZXJfY3JlYXRlX2ZpbGUoJm1lZ2FzYXNfcGNpX2RyaXZlci5kcml2ZXIsCisJCQkJICAmZHJpdmVyX2F0dHJfcG9sbF9tb2RlX2lvKTsKKwlpZiAocnZhbCkKKwkJZ290byBlcnJfZGNmX3BvbGxfbW9kZV9pbzsKKworCXJ2YWwgPSBkcml2ZXJfY3JlYXRlX2ZpbGUoJm1lZ2FzYXNfcGNpX2RyaXZlci5kcml2ZXIsCisJCQkJJmRyaXZlcl9hdHRyX3N1cHBvcnRfZGV2aWNlX2NoYW5nZSk7CisJaWYgKHJ2YWwpCisJCWdvdG8gZXJyX2RjZl9zdXBwb3J0X2RldmljZV9jaGFuZ2U7CisKKwlyZXR1cm4gcnZhbDsKKworZXJyX2RjZl9zdXBwb3J0X2RldmljZV9jaGFuZ2U6CisJZHJpdmVyX3JlbW92ZV9maWxlKCZtZWdhc2FzX3BjaV9kcml2ZXIuZHJpdmVyLAorCQkgICZkcml2ZXJfYXR0cl9wb2xsX21vZGVfaW8pOworCitlcnJfZGNmX3BvbGxfbW9kZV9pbzoKKwlkcml2ZXJfcmVtb3ZlX2ZpbGUoJm1lZ2FzYXNfcGNpX2RyaXZlci5kcml2ZXIsCisJCQkgICAmZHJpdmVyX2F0dHJfZGJnX2x2bCk7CitlcnJfZGNmX2RiZ19sdmw6CisJZHJpdmVyX3JlbW92ZV9maWxlKCZtZWdhc2FzX3BjaV9kcml2ZXIuZHJpdmVyLAorCQkJJmRyaXZlcl9hdHRyX3N1cHBvcnRfcG9sbF9mb3JfZXZlbnQpOworCitlcnJfZGNmX3N1cHBvcnRfcG9sbF9mb3JfZXZlbnQ6CisJZHJpdmVyX3JlbW92ZV9maWxlKCZtZWdhc2FzX3BjaV9kcml2ZXIuZHJpdmVyLAorCQkJICAgJmRyaXZlcl9hdHRyX3JlbGVhc2VfZGF0ZSk7CisKK2Vycl9kY2ZfcmVsX2RhdGU6CisJZHJpdmVyX3JlbW92ZV9maWxlKCZtZWdhc2FzX3BjaV9kcml2ZXIuZHJpdmVyLCAmZHJpdmVyX2F0dHJfdmVyc2lvbik7CitlcnJfZGNmX2F0dHJfdmVyOgorCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmbWVnYXNhc19wY2lfZHJpdmVyKTsKK2Vycl9wY2lkcnY6CisJdW5yZWdpc3Rlcl9jaHJkZXYobWVnYXNhc19tZ210X21ham9ybm8sICJtZWdhcmFpZF9zYXNfaW9jdGwiKTsKKwlyZXR1cm4gcnZhbDsKK30KKworLyoqCisgKiBtZWdhc2FzX2V4aXQgLSBEcml2ZXIgdW5sb2FkIGVudHJ5IHBvaW50CisgKi8KK3N0YXRpYyB2b2lkIF9fZXhpdCBtZWdhc2FzX2V4aXQodm9pZCkKK3sKKwlkcml2ZXJfcmVtb3ZlX2ZpbGUoJm1lZ2FzYXNfcGNpX2RyaXZlci5kcml2ZXIsCisJCQkgICAmZHJpdmVyX2F0dHJfcG9sbF9tb2RlX2lvKTsKKwlkcml2ZXJfcmVtb3ZlX2ZpbGUoJm1lZ2FzYXNfcGNpX2RyaXZlci5kcml2ZXIsCisJCQkgICAmZHJpdmVyX2F0dHJfZGJnX2x2bCk7CisJZHJpdmVyX3JlbW92ZV9maWxlKCZtZWdhc2FzX3BjaV9kcml2ZXIuZHJpdmVyLAorCQkJJmRyaXZlcl9hdHRyX3N1cHBvcnRfcG9sbF9mb3JfZXZlbnQpOworCWRyaXZlcl9yZW1vdmVfZmlsZSgmbWVnYXNhc19wY2lfZHJpdmVyLmRyaXZlciwKKwkJCSZkcml2ZXJfYXR0cl9zdXBwb3J0X2RldmljZV9jaGFuZ2UpOworCWRyaXZlcl9yZW1vdmVfZmlsZSgmbWVnYXNhc19wY2lfZHJpdmVyLmRyaXZlciwKKwkJCSAgICZkcml2ZXJfYXR0cl9yZWxlYXNlX2RhdGUpOworCWRyaXZlcl9yZW1vdmVfZmlsZSgmbWVnYXNhc19wY2lfZHJpdmVyLmRyaXZlciwgJmRyaXZlcl9hdHRyX3ZlcnNpb24pOworCisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZtZWdhc2FzX3BjaV9kcml2ZXIpOworCXVucmVnaXN0ZXJfY2hyZGV2KG1lZ2FzYXNfbWdtdF9tYWpvcm5vLCAibWVnYXJhaWRfc2FzX2lvY3RsIik7Cit9CisKK21vZHVsZV9pbml0KG1lZ2FzYXNfaW5pdCk7Cittb2R1bGVfZXhpdChtZWdhc2FzX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhc19mcC5jIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhc19mcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzZmE5NmFlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhc19mcC5jCkBAIC0wLDAgKzEsNTE2IEBACisvKgorICogIExpbnV4IE1lZ2FSQUlEIGRyaXZlciBmb3IgU0FTIGJhc2VkIFJBSUQgY29udHJvbGxlcnMKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDA5LTIwMTEgIExTSSBDb3Jwb3JhdGlvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqICBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKgorICogIEZJTEU6IG1lZ2FyYWlkX3Nhc19mcC5jCisgKgorICogIEF1dGhvcnM6IExTSSBDb3Jwb3JhdGlvbgorICogICAgICAgICAgIFN1bWFudCBQYXRybworICogICAgICAgICAgIFZhcmFkIFRhbGFtYWNraQorICogICAgICAgICAgIE1hbm9qIEpvc2UKKyAqCisgKiAgU2VuZCBmZWVkYmFjayB0bzogPG1lZ2FyYWlkbGludXhAbHNpLmNvbT4KKyAqCisgKiAgTWFpbCB0bzogTFNJIENvcnBvcmF0aW9uLCAxNjIxIEJhcmJlciBMYW5lLCBNaWxwaXRhcywgQ0EgOTUwMzUKKyAqICAgICBBVFROOiBMaW51eHJhaWQKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKyNpbmNsdWRlIDxsaW51eC91aW8uaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KKyNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisKKyNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgorCisjaW5jbHVkZSAibWVnYXJhaWRfc2FzX2Z1c2lvbi5oIgorI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgorCisjZGVmaW5lIEFCU19ESUZGKGEsIGIpICAgKCgoYSkgPiAoYikpID8gKChhKSAtIChiKSkgOiAoKGIpIC0gKGEpKSkKKyNkZWZpbmUgTVJfTERfU1RBVEVfT1BUSU1BTCAzCisjZGVmaW5lIEZBTFNFIDAKKyNkZWZpbmUgVFJVRSAxCisKKy8qIFByb3RvdHlwZXMgKi8KK3ZvaWQKK21yX3VwZGF0ZV9sb2FkX2JhbGFuY2VfcGFyYW1zKHN0cnVjdCBNUl9GV19SQUlEX01BUF9BTEwgKm1hcCwKKwkJCSAgICAgIHN0cnVjdCBMRF9MT0FEX0JBTEFOQ0VfSU5GTyAqbGJJbmZvKTsKKwordTMyIG1lZ2FfbW9kNjQodTY0IGRpdmlkZW5kLCB1MzIgZGl2aXNvcikKK3sKKwl1NjQgZDsKKwl1MzIgcmVtYWluZGVyOworCisJaWYgKCFkaXZpc29yKQorCQlwcmludGsoS0VSTl9FUlIgIm1lZ2FzYXMgOiBESVZJU09SIGlzIHplcm8sIGluIGRpdiBmblxuIik7CisJZCA9IGRpdmlkZW5kOworCXJlbWFpbmRlciA9IGRvX2RpdihkLCBkaXZpc29yKTsKKwlyZXR1cm4gcmVtYWluZGVyOworfQorCisvKioKKyAqIEBwYXJhbSBkaXZpZGVuZCAgICA6IERpdmlkZW5kCisgKiBAcGFyYW0gZGl2aXNvciAgICA6IERpdmlzb3IKKyAqCisgKiBAcmV0dXJuIHF1b3RpZW50CisgKiovCit1NjQgbWVnYV9kaXY2NF8zMih1aW50NjRfdCBkaXZpZGVuZCwgdWludDMyX3QgZGl2aXNvcikKK3sKKwl1MzIgcmVtYWluZGVyOworCXU2NCBkOworCisJaWYgKCFkaXZpc29yKQorCQlwcmludGsoS0VSTl9FUlIgIm1lZ2FzYXMgOiBESVZJU09SIGlzIHplcm8gaW4gbW9kIGZuXG4iKTsKKworCWQgPSBkaXZpZGVuZDsKKwlyZW1haW5kZXIgPSBkb19kaXYoZCwgZGl2aXNvcik7CisKKwlyZXR1cm4gZDsKK30KKworc3RydWN0IE1SX0xEX1JBSUQgKk1SX0xkUmFpZEdldCh1MzIgbGQsIHN0cnVjdCBNUl9GV19SQUlEX01BUF9BTEwgKm1hcCkKK3sKKwlyZXR1cm4gJm1hcC0+cmFpZE1hcC5sZFNwYW5NYXBbbGRdLmxkUmFpZDsKK30KKworc3RhdGljIHN0cnVjdCBNUl9TUEFOX0JMT0NLX0lORk8gKk1SX0xkU3BhbkluZm9HZXQodTMyIGxkLAorCQkJCQkJICAgc3RydWN0IE1SX0ZXX1JBSURfTUFQX0FMTAorCQkJCQkJICAgKm1hcCkKK3sKKwlyZXR1cm4gJm1hcC0+cmFpZE1hcC5sZFNwYW5NYXBbbGRdLnNwYW5CbG9ja1swXTsKK30KKworc3RhdGljIHU4IE1SX0xkRGF0YUFybUdldCh1MzIgbGQsIHUzMiBhcm1JZHgsIHN0cnVjdCBNUl9GV19SQUlEX01BUF9BTEwgKm1hcCkKK3sKKwlyZXR1cm4gbWFwLT5yYWlkTWFwLmxkU3Bhbk1hcFtsZF0uZGF0YUFybU1hcFthcm1JZHhdOworfQorCitzdGF0aWMgdTE2IE1SX0FyUGRHZXQodTMyIGFyLCB1MzIgYXJtLCBzdHJ1Y3QgTVJfRldfUkFJRF9NQVBfQUxMICptYXApCit7CisJcmV0dXJuIG1hcC0+cmFpZE1hcC5hck1hcEluZm9bYXJdLnBkW2FybV07Cit9CisKK3N0YXRpYyB1MTYgTVJfTGRTcGFuQXJyYXlHZXQodTMyIGxkLCB1MzIgc3Bhbiwgc3RydWN0IE1SX0ZXX1JBSURfTUFQX0FMTCAqbWFwKQoreworCXJldHVybiBtYXAtPnJhaWRNYXAubGRTcGFuTWFwW2xkXS5zcGFuQmxvY2tbc3Bhbl0uc3Bhbi5hcnJheVJlZjsKK30KKworc3RhdGljIHUxNiBNUl9QZERldkhhbmRsZUdldCh1MzIgcGQsIHN0cnVjdCBNUl9GV19SQUlEX01BUF9BTEwgKm1hcCkKK3sKKwlyZXR1cm4gbWFwLT5yYWlkTWFwLmRldkhuZGxJbmZvW3BkXS5jdXJEZXZIZGw7Cit9CisKK3UxNiBNUl9HZXRMRFRndElkKHUzMiBsZCwgc3RydWN0IE1SX0ZXX1JBSURfTUFQX0FMTCAqbWFwKQoreworCXJldHVybiBtYXAtPnJhaWRNYXAubGRTcGFuTWFwW2xkXS5sZFJhaWQudGFyZ2V0SWQ7Cit9CisKK3UxNiBNUl9UYXJnZXRJZFRvTGRHZXQodTMyIGxkVGd0SWQsIHN0cnVjdCBNUl9GV19SQUlEX01BUF9BTEwgKm1hcCkKK3sKKwlyZXR1cm4gbWFwLT5yYWlkTWFwLmxkVGd0SWRUb0xkW2xkVGd0SWRdOworfQorCitzdGF0aWMgc3RydWN0IE1SX0xEX1NQQU4gKk1SX0xkU3BhblB0ckdldCh1MzIgbGQsIHUzMiBzcGFuLAorCQkJCQkgIHN0cnVjdCBNUl9GV19SQUlEX01BUF9BTEwgKm1hcCkKK3sKKwlyZXR1cm4gJm1hcC0+cmFpZE1hcC5sZFNwYW5NYXBbbGRdLnNwYW5CbG9ja1tzcGFuXS5zcGFuOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIHZhbGlkYXRlIE1hcCBpbmZvIGRhdGEgcHJvdmlkZWQgYnkgRlcKKyAqLwordTggTVJfVmFsaWRhdGVNYXBJbmZvKHN0cnVjdCBNUl9GV19SQUlEX01BUF9BTEwgKm1hcCwKKwkJICAgICAgc3RydWN0IExEX0xPQURfQkFMQU5DRV9JTkZPICpsYkluZm8pCit7CisJc3RydWN0IE1SX0ZXX1JBSURfTUFQICpwRndSYWlkTWFwID0gJm1hcC0+cmFpZE1hcDsKKworCWlmIChwRndSYWlkTWFwLT50b3RhbFNpemUgIT0KKwkgICAgKHNpemVvZihzdHJ1Y3QgTVJfRldfUkFJRF9NQVApIC1zaXplb2Yoc3RydWN0IE1SX0xEX1NQQU5fTUFQKSArCisJICAgICAoc2l6ZW9mKHN0cnVjdCBNUl9MRF9TUEFOX01BUCkgKnBGd1JhaWRNYXAtPmxkQ291bnQpKSkgeworCQlwcmludGsoS0VSTl9FUlIgIm1lZ2FzYXM6IG1hcCBpbmZvIHN0cnVjdHVyZSBzaXplIDB4JXggaXMgbm90IG1hdGNoaW5nIHdpdGggbGQgY291bnRcbiIsCisJCSAgICAgICAodW5zaWduZWQgaW50KSgoc2l6ZW9mKHN0cnVjdCBNUl9GV19SQUlEX01BUCkgLQorCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IE1SX0xEX1NQQU5fTUFQKSkgKworCQkJCSAgICAgIChzaXplb2Yoc3RydWN0IE1SX0xEX1NQQU5fTUFQKSAqCisJCQkJICAgICAgIHBGd1JhaWRNYXAtPmxkQ291bnQpKSk7CisJCXByaW50ayhLRVJOX0VSUiAibWVnYXNhczogc3BhbiBtYXAgJXgsIHBGd1JhaWRNYXAtPnRvdGFsU2l6ZSAiCisJCSAgICAgICAiOiAleFxuIiwgKHVuc2lnbmVkIGludClzaXplb2Yoc3RydWN0IE1SX0xEX1NQQU5fTUFQKSwKKwkJICAgICAgIHBGd1JhaWRNYXAtPnRvdGFsU2l6ZSk7CisJCXJldHVybiAwOworCX0KKworCW1yX3VwZGF0ZV9sb2FkX2JhbGFuY2VfcGFyYW1zKG1hcCwgbGJJbmZvKTsKKworCXJldHVybiAxOworfQorCit1MzIgTVJfR2V0U3BhbkJsb2NrKHUzMiBsZCwgdTY0IHJvdywgdTY0ICpzcGFuX2JsaywKKwkJICAgIHN0cnVjdCBNUl9GV19SQUlEX01BUF9BTEwgKm1hcCwgaW50ICpkaXZfZXJyb3IpCit7CisJc3RydWN0IE1SX1NQQU5fQkxPQ0tfSU5GTyAqcFNwYW5CbG9jayA9IE1SX0xkU3BhbkluZm9HZXQobGQsIG1hcCk7CisJc3RydWN0IE1SX1FVQURfRUxFTUVOVCAgICAqcXVhZDsKKwlzdHJ1Y3QgTVJfTERfUkFJRCAgICAgICAgICpyYWlkID0gTVJfTGRSYWlkR2V0KGxkLCBtYXApOworCXUzMiAgICAgICAgICAgICAgICBzcGFuLCBqOworCisJZm9yIChzcGFuID0gMDsgc3BhbiA8IHJhaWQtPnNwYW5EZXB0aDsgc3BhbisrLCBwU3BhbkJsb2NrKyspIHsKKworCQlmb3IgKGogPSAwOyBqIDwgcFNwYW5CbG9jay0+YmxvY2tfc3Bhbl9pbmZvLm5vRWxlbWVudHM7IGorKykgeworCQkJcXVhZCA9ICZwU3BhbkJsb2NrLT5ibG9ja19zcGFuX2luZm8ucXVhZFtqXTsKKworCQkJaWYgKHF1YWQtPmRpZmYgPT0gMCkgeworCQkJCSpkaXZfZXJyb3IgPSAxOworCQkJCXJldHVybiBzcGFuOworCQkJfQorCQkJaWYgKHF1YWQtPmxvZ1N0YXJ0IDw9IHJvdyAgJiYgIHJvdyA8PSBxdWFkLT5sb2dFbmQgICYmCisJCQkgICAgKG1lZ2FfbW9kNjQocm93LXF1YWQtPmxvZ1N0YXJ0LCBxdWFkLT5kaWZmKSkgPT0gMCkgeworCQkJCWlmIChzcGFuX2JsayAhPSBOVUxMKSB7CisJCQkJCXU2NCAgYmxrLCBkZWJ1Z0JsazsKKwkJCQkJYmxrID0KKwkJCQkJCW1lZ2FfZGl2NjRfMzIoCisJCQkJCQkJKHJvdy1xdWFkLT5sb2dTdGFydCksCisJCQkJCQkJcXVhZC0+ZGlmZik7CisJCQkJCWRlYnVnQmxrID0gYmxrOworCisJCQkJCWJsayA9IChibGsgKyBxdWFkLT5vZmZzZXRJblNwYW4pIDw8CisJCQkJCQlyYWlkLT5zdHJpcGVTaGlmdDsKKwkJCQkJKnNwYW5fYmxrID0gYmxrOworCQkJCX0KKwkJCQlyZXR1cm4gc3BhbjsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gc3BhbjsKK30KKworLyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiBUaGlzIHJvdXRpbmUgY2FsY3VsYXRlcyB0aGUgYXJtLCBzcGFuIGFuZCBibG9jayBmb3IgdGhlIHNwZWNpZmllZCBzdHJpcGUgYW5kCisqIHJlZmVyZW5jZSBpbiBzdHJpcGUuCisqCisqIElucHV0cyA6CisqCisqICAgIGxkICAgLSBMb2dpY2FsIGRyaXZlIG51bWJlcgorKiAgICBzdHJpcFJvdyAgICAgICAgLSBTdHJpcGUgbnVtYmVyCisqICAgIHN0cmlwUmVmICAgIC0gUmVmZXJlbmNlIGluIHN0cmlwZQorKgorKiBPdXRwdXRzIDoKKyoKKyogICAgc3BhbiAgICAgICAgICAtIFNwYW4gbnVtYmVyCisqICAgIGJsb2NrICAgICAgICAgLSBBYnNvbHV0ZSBCbG9jayBudW1iZXIgaW4gdGhlIHBoeXNpY2FsIGRpc2sKKyovCit1OCBNUl9HZXRQaHlQYXJhbXModTMyIGxkLCB1NjQgc3RyaXBSb3csIHUxNiBzdHJpcFJlZiwgdTY0ICpwZEJsb2NrLAorCQkgICB1MTYgKnBEZXZIYW5kbGUsIHN0cnVjdCBSQUlEX0NPTlRFWFQgKnBSQUlEX0NvbnRleHQsCisJCSAgIHN0cnVjdCBNUl9GV19SQUlEX01BUF9BTEwgKm1hcCkKK3sKKwlzdHJ1Y3QgTVJfTERfUkFJRCAgKnJhaWQgPSBNUl9MZFJhaWRHZXQobGQsIG1hcCk7CisJdTMyICAgICAgICAgcGQsIGFyUmVmOworCXU4ICAgICAgICAgIHBoeXNBcm0sIHNwYW47CisJdTY0ICAgICAgICAgcm93OworCXU4CSAgICByZXR2YWwgPSBUUlVFOworCWludAkgICAgZXJyb3JfY29kZSA9IDA7CisKKwlyb3cgPSAgbWVnYV9kaXY2NF8zMihzdHJpcFJvdywgcmFpZC0+cm93RGF0YVNpemUpOworCisJaWYgKHJhaWQtPmxldmVsID09IDYpIHsKKwkJLyogbG9naWNhbCBhcm0gd2l0aGluIHJvdyAqLworCQl1MzIgbG9nQXJtID0gIG1lZ2FfbW9kNjQoc3RyaXBSb3csIHJhaWQtPnJvd0RhdGFTaXplKTsKKwkJdTMyIHJvd01vZCwgYXJtUSwgYXJtOworCisJCWlmIChyYWlkLT5yb3dTaXplID09IDApCisJCQlyZXR1cm4gRkFMU0U7CisJCS8qIGdldCBsb2dpY2FsIHJvdyBtb2QgKi8KKwkJcm93TW9kID0gbWVnYV9tb2Q2NChyb3csIHJhaWQtPnJvd1NpemUpOworCQlhcm1RID0gcmFpZC0+cm93U2l6ZS0xLXJvd01vZDsgLyogaW5kZXggb2YgUSBkcml2ZSAqLworCQlhcm0gPSBhcm1RKzErbG9nQXJtOyAvKiBkYXRhIGFsd2F5cyBsb2dpY2FsbHkgZm9sbG93cyBRICovCisJCWlmIChhcm0gPj0gcmFpZC0+cm93U2l6ZSkgLyogaGFuZGxlIHdyYXAgY29uZGl0aW9uICovCisJCQlhcm0gLT0gcmFpZC0+cm93U2l6ZTsKKwkJcGh5c0FybSA9ICh1OClhcm07CisJfSBlbHNlICB7CisJCWlmIChyYWlkLT5tb2RGYWN0b3IgPT0gMCkKKwkJCXJldHVybiBGQUxTRTsKKwkJcGh5c0FybSA9IE1SX0xkRGF0YUFybUdldChsZCwgIG1lZ2FfbW9kNjQoc3RyaXBSb3csCisJCQkJCQkJICByYWlkLT5tb2RGYWN0b3IpLAorCQkJCQkgIG1hcCk7CisJfQorCisJaWYgKHJhaWQtPnNwYW5EZXB0aCA9PSAxKSB7CisJCXNwYW4gPSAwOworCQkqcGRCbG9jayA9IHJvdyA8PCByYWlkLT5zdHJpcGVTaGlmdDsKKwl9IGVsc2UgeworCQlzcGFuID0gKHU4KU1SX0dldFNwYW5CbG9jayhsZCwgcm93LCBwZEJsb2NrLCBtYXAsICZlcnJvcl9jb2RlKTsKKwkJaWYgKGVycm9yX2NvZGUgPT0gMSkKKwkJCXJldHVybiBGQUxTRTsKKwl9CisKKwkvKiBHZXQgdGhlIGFycmF5IG9uIHdoaWNoIHRoaXMgc3BhbiBpcyBwcmVzZW50ICovCisJYXJSZWYgICAgICAgPSBNUl9MZFNwYW5BcnJheUdldChsZCwgc3BhbiwgbWFwKTsKKwlwZCAgICAgICAgICA9IE1SX0FyUGRHZXQoYXJSZWYsIHBoeXNBcm0sIG1hcCk7IC8qIEdldCB0aGUgcGQgKi8KKworCWlmIChwZCAhPSBNUl9QRF9JTlZBTElEKQorCQkvKiBHZXQgZGV2IGhhbmRsZSBmcm9tIFBkLiAqLworCQkqcERldkhhbmRsZSA9IE1SX1BkRGV2SGFuZGxlR2V0KHBkLCBtYXApOworCWVsc2UgeworCQkqcERldkhhbmRsZSA9IE1SX1BEX0lOVkFMSUQ7IC8qIHNldCBkZXYgaGFuZGxlIGFzIGludmFsaWQuICovCisJCWlmIChyYWlkLT5sZXZlbCA+PSA1KQorCQkJcFJBSURfQ29udGV4dC0+cmVnTG9ja0ZsYWdzID0gUkVHSU9OX1RZUEVfRVhDTFVTSVZFOworCQllbHNlIGlmIChyYWlkLT5sZXZlbCA9PSAxKSB7CisJCQkvKiBHZXQgYWx0ZXJuYXRlIFBkLiAqLworCQkJcGQgPSBNUl9BclBkR2V0KGFyUmVmLCBwaHlzQXJtICsgMSwgbWFwKTsKKwkJCWlmIChwZCAhPSBNUl9QRF9JTlZBTElEKQorCQkJCS8qIEdldCBkZXYgaGFuZGxlIGZyb20gUGQgKi8KKwkJCQkqcERldkhhbmRsZSA9IE1SX1BkRGV2SGFuZGxlR2V0KHBkLCBtYXApOworCQl9CisJCXJldHZhbCA9IEZBTFNFOworCX0KKworCSpwZEJsb2NrICs9IHN0cmlwUmVmICsgTVJfTGRTcGFuUHRyR2V0KGxkLCBzcGFuLCBtYXApLT5zdGFydEJsazsKKwlwUkFJRF9Db250ZXh0LT5zcGFuQXJtID0gKHNwYW4gPDwgUkFJRF9DVFhfU1BBTkFSTV9TUEFOX1NISUZUKSB8CisJCXBoeXNBcm07CisJcmV0dXJuIHJldHZhbDsKK30KKworLyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiBNUl9CdWlsZFJhaWRDb250ZXh0IGZ1bmN0aW9uCisqCisqIFRoaXMgZnVuY3Rpb24gd2lsbCBpbml0aWF0ZSBjb21tYW5kIHByb2Nlc3NpbmcuICBUaGUgc3RhcnQvZW5kIHJvdyBhbmQgc3RyaXAKKyogaW5mb3JtYXRpb24gaXMgY2FsY3VsYXRlZCB0aGVuIHRoZSBsb2NrIGlzIGFjcXVpcmVkLgorKiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIDAgaWYgcmVnaW9uIGxvY2sgd2FzIGFjcXVpcmVkIE9SIHJldHVybiBudW0gc3RyaXBzCisqLwordTgKK01SX0J1aWxkUmFpZENvbnRleHQoc3RydWN0IElPX1JFUVVFU1RfSU5GTyAqaW9faW5mbywKKwkJICAgIHN0cnVjdCBSQUlEX0NPTlRFWFQgKnBSQUlEX0NvbnRleHQsCisJCSAgICBzdHJ1Y3QgTVJfRldfUkFJRF9NQVBfQUxMICptYXApCit7CisJc3RydWN0IE1SX0xEX1JBSUQgICpyYWlkOworCXUzMiAgICAgICAgIGxkLCBzdHJpcFNpemUsIHN0cmlwZV9tYXNrOworCXU2NCAgICAgICAgIGVuZExiYSwgZW5kU3RyaXAsIGVuZFJvdywgc3RhcnRfcm93LCBzdGFydF9zdHJpcDsKKwl1NjQgICAgICAgICByZWdTdGFydDsKKwl1MzIgICAgICAgICByZWdTaXplOworCXU4ICAgICAgICAgIG51bV9zdHJpcHMsIG51bVJvd3M7CisJdTE2ICAgICAgICAgcmVmX2luX3N0YXJ0X3N0cmlwZSwgcmVmX2luX2VuZF9zdHJpcGU7CisJdTY0ICAgICAgICAgbGRTdGFydEJsb2NrOworCXUzMiAgICAgICAgIG51bUJsb2NrcywgbGRUZ3RJZDsKKwl1OCAgICAgICAgICBpc1JlYWQ7CisJdTgJICAgIHJldHZhbCA9IDA7CisKKwlsZFN0YXJ0QmxvY2sgPSBpb19pbmZvLT5sZFN0YXJ0QmxvY2s7CisJbnVtQmxvY2tzID0gaW9faW5mby0+bnVtQmxvY2tzOworCWxkVGd0SWQgPSBpb19pbmZvLT5sZFRndElkOworCWlzUmVhZCA9IGlvX2luZm8tPmlzUmVhZDsKKworCWxkID0gTVJfVGFyZ2V0SWRUb0xkR2V0KGxkVGd0SWQsIG1hcCk7CisJcmFpZCA9IE1SX0xkUmFpZEdldChsZCwgbWFwKTsKKworCXN0cmlwU2l6ZSA9IDEgPDwgcmFpZC0+c3RyaXBlU2hpZnQ7CisJc3RyaXBlX21hc2sgPSBzdHJpcFNpemUtMTsKKwkvKgorCSAqIGNhbGN1bGF0ZSBzdGFydGluZyByb3cgYW5kIHN0cmlwZSwgYW5kIG51bWJlciBvZiBzdHJpcHMgYW5kIHJvd3MKKwkgKi8KKwlzdGFydF9zdHJpcCAgICAgICAgID0gbGRTdGFydEJsb2NrID4+IHJhaWQtPnN0cmlwZVNoaWZ0OworCXJlZl9pbl9zdGFydF9zdHJpcGUgPSAodTE2KShsZFN0YXJ0QmxvY2sgJiBzdHJpcGVfbWFzayk7CisJZW5kTGJhICAgICAgICAgICAgICA9IGxkU3RhcnRCbG9jayArIG51bUJsb2NrcyAtIDE7CisJcmVmX2luX2VuZF9zdHJpcGUgICA9ICh1MTYpKGVuZExiYSAmIHN0cmlwZV9tYXNrKTsKKwllbmRTdHJpcCAgICAgICAgICAgID0gZW5kTGJhID4+IHJhaWQtPnN0cmlwZVNoaWZ0OworCW51bV9zdHJpcHMgICAgICAgICAgPSAodTgpKGVuZFN0cmlwIC0gc3RhcnRfc3RyaXAgKyAxKTsgLyogRW5kIHN0cmlwICovCisJaWYgKHJhaWQtPnJvd0RhdGFTaXplID09IDApCisJCXJldHVybiBGQUxTRTsKKwlzdGFydF9yb3cgICAgICAgICAgID0gIG1lZ2FfZGl2NjRfMzIoc3RhcnRfc3RyaXAsIHJhaWQtPnJvd0RhdGFTaXplKTsKKwllbmRSb3cgICAgICAgICAgICAgID0gIG1lZ2FfZGl2NjRfMzIoZW5kU3RyaXAsIHJhaWQtPnJvd0RhdGFTaXplKTsKKwludW1Sb3dzICAgICAgICAgICAgID0gKHU4KShlbmRSb3cgLSBzdGFydF9yb3cgKyAxKTsKKworCS8qCisJICogY2FsY3VsYXRlIHJlZ2lvbiBpbmZvLgorCSAqLworCisJLyogYXNzdW1lIHJlZ2lvbiBpcyBhdCB0aGUgc3RhcnQgb2YgdGhlIGZpcnN0IHJvdyAqLworCXJlZ1N0YXJ0ICAgICAgICAgICAgPSBzdGFydF9yb3cgPDwgcmFpZC0+c3RyaXBlU2hpZnQ7CisJLyogYXNzdW1lIHRoaXMgSU8gbmVlZHMgdGhlIGZ1bGwgcm93IC0gd2UnbGwgYWRqdXN0IGlmIG5vdCB0cnVlICovCisJcmVnU2l6ZSAgICAgICAgICAgICA9IHN0cmlwU2l6ZTsKKworCS8qIElmIElPIHNwYW5zIG1vcmUgdGhhbiAxIHN0cmlwLCBmcCBpcyBub3QgcG9zc2libGUKKwkgICBGUCBpcyBub3QgcG9zc2libGUgZm9yIHdyaXRlcyBvbiBub24tMCByYWlkIGxldmVscworCSAgIEZQIGlzIG5vdCBwb3NzaWJsZSBpZiBMRCBpcyBub3QgY2FwYWJsZSAqLworCWlmIChudW1fc3RyaXBzID4gMSB8fCAoIWlzUmVhZCAmJiByYWlkLT5sZXZlbCAhPSAwKSB8fAorCSAgICAhcmFpZC0+Y2FwYWJpbGl0eS5mcENhcGFibGUpIHsKKwkJaW9faW5mby0+ZnBPa0ZvcklvID0gRkFMU0U7CisJfSBlbHNlIHsKKwkJaW9faW5mby0+ZnBPa0ZvcklvID0gVFJVRTsKKwl9CisKKwlpZiAobnVtUm93cyA9PSAxKSB7CisJCS8qIHNpbmdsZS1zdHJpcCBJT3MgY2FuIGFsd2F5cyBsb2NrIG9ubHkgdGhlIGRhdGEgbmVlZGVkICovCisJCWlmIChudW1fc3RyaXBzID09IDEpIHsKKwkJCXJlZ1N0YXJ0ICs9IHJlZl9pbl9zdGFydF9zdHJpcGU7CisJCQlyZWdTaXplID0gbnVtQmxvY2tzOworCQl9CisJCS8qIG11bHRpLXN0cmlwIElPcyBhbHdheXMgbmVlZCB0byBmdWxsIHN0cmlwZSBsb2NrZWQgKi8KKwl9IGVsc2UgeworCQlpZiAoc3RhcnRfc3RyaXAgPT0gKHN0YXJ0X3JvdyArIDEpICogcmFpZC0+cm93RGF0YVNpemUgLSAxKSB7CisJCQkvKiBJZiB0aGUgc3RhcnQgc3RyaXAgaXMgdGhlIGxhc3QgaW4gdGhlIHN0YXJ0IHJvdyAqLworCQkJcmVnU3RhcnQgKz0gcmVmX2luX3N0YXJ0X3N0cmlwZTsKKwkJCXJlZ1NpemUgPSBzdHJpcFNpemUgLSByZWZfaW5fc3RhcnRfc3RyaXBlOworCQkJLyogaW5pdGlhbGl6ZSBjb3VudCB0byBzZWN0b3JzIGZyb20gc3RhcnRyZWYgdG8gZW5kCisJCQkgICBvZiBzdHJpcCAqLworCQl9CisKKwkJaWYgKG51bVJvd3MgPiAyKQorCQkJLyogQWRkIGNvbXBsZXRlIHJvd3MgaW4gdGhlIG1pZGRsZSBvZiB0aGUgdHJhbnNmZXIgKi8KKwkJCXJlZ1NpemUgKz0gKG51bVJvd3MtMikgPDwgcmFpZC0+c3RyaXBlU2hpZnQ7CisKKwkJLyogaWYgSU8gZW5kcyB3aXRoaW4gZmlyc3Qgc3RyaXAgb2YgbGFzdCByb3cgKi8KKwkJaWYgKGVuZFN0cmlwID09IGVuZFJvdypyYWlkLT5yb3dEYXRhU2l6ZSkKKwkJCXJlZ1NpemUgKz0gcmVmX2luX2VuZF9zdHJpcGUrMTsKKwkJZWxzZQorCQkJcmVnU2l6ZSArPSBzdHJpcFNpemU7CisJfQorCisJcFJBSURfQ29udGV4dC0+dGltZW91dFZhbHVlICAgICA9IG1hcC0+cmFpZE1hcC5mcFBkSW9UaW1lb3V0U2VjOworCXBSQUlEX0NvbnRleHQtPnJlZ0xvY2tGbGFncyAgICAgPSAoaXNSZWFkKSA/IFJFR0lPTl9UWVBFX1NIQVJFRF9SRUFEIDoKKwkJcmFpZC0+cmVnVHlwZVJlcU9uV3JpdGU7CisJcFJBSURfQ29udGV4dC0+VmlydHVhbERpc2tUZ3RJZCA9IHJhaWQtPnRhcmdldElkOworCXBSQUlEX0NvbnRleHQtPnJlZ0xvY2tSb3dMQkEgICAgPSByZWdTdGFydDsKKwlwUkFJRF9Db250ZXh0LT5yZWdMb2NrTGVuZ3RoICAgID0gcmVnU2l6ZTsKKwlwUkFJRF9Db250ZXh0LT5jb25maWdTZXFOdW0JPSByYWlkLT5zZXFOdW07CisKKwkvKkdldCBQaHkgUGFyYW1zIG9ubHkgaWYgRlAgY2FwYWJsZSwgb3IgZWxzZSBsZWF2ZSBpdCB0byBNUiBmaXJtd2FyZQorCSAgdG8gZG8gdGhlIGNhbGN1bGF0aW9uLiovCisJaWYgKGlvX2luZm8tPmZwT2tGb3JJbykgeworCQlyZXR2YWwgPSBNUl9HZXRQaHlQYXJhbXMobGQsIHN0YXJ0X3N0cmlwLCByZWZfaW5fc3RhcnRfc3RyaXBlLAorCQkJCQkgJmlvX2luZm8tPnBkQmxvY2ssCisJCQkJCSAmaW9faW5mby0+ZGV2SGFuZGxlLCBwUkFJRF9Db250ZXh0LAorCQkJCQkgbWFwKTsKKwkJLyogSWYgSU8gb24gYW4gaW52YWxpZCBQZCwgdGhlbiBGUCBpIHNub3QgcG9zc2libGUgKi8KKwkJaWYgKGlvX2luZm8tPmRldkhhbmRsZSA9PSBNUl9QRF9JTlZBTElEKQorCQkJaW9faW5mby0+ZnBPa0ZvcklvID0gRkFMU0U7CisJCXJldHVybiByZXR2YWw7CisJfSBlbHNlIGlmIChpc1JlYWQpIHsKKwkJdWludCBzdHJpcElkeDsKKwkJZm9yIChzdHJpcElkeCA9IDA7IHN0cmlwSWR4IDwgbnVtX3N0cmlwczsgc3RyaXBJZHgrKykgeworCQkJaWYgKCFNUl9HZXRQaHlQYXJhbXMobGQsIHN0YXJ0X3N0cmlwICsgc3RyaXBJZHgsCisJCQkJCSAgICAgcmVmX2luX3N0YXJ0X3N0cmlwZSwKKwkJCQkJICAgICAmaW9faW5mby0+cGRCbG9jaywKKwkJCQkJICAgICAmaW9faW5mby0+ZGV2SGFuZGxlLAorCQkJCQkgICAgIHBSQUlEX0NvbnRleHQsIG1hcCkpCisJCQkJcmV0dXJuIFRSVUU7CisJCX0KKwl9CisJcmV0dXJuIFRSVUU7Cit9CisKK3ZvaWQKK21yX3VwZGF0ZV9sb2FkX2JhbGFuY2VfcGFyYW1zKHN0cnVjdCBNUl9GV19SQUlEX01BUF9BTEwgKm1hcCwKKwkJCSAgICAgIHN0cnVjdCBMRF9MT0FEX0JBTEFOQ0VfSU5GTyAqbGJJbmZvKQoreworCWludCBsZENvdW50OworCXUxNiBsZDsKKwlzdHJ1Y3QgTVJfTERfUkFJRCAqcmFpZDsKKworCWZvciAobGRDb3VudCA9IDA7IGxkQ291bnQgPCBNQVhfTE9HSUNBTF9EUklWRVM7IGxkQ291bnQrKykgeworCQlsZCA9IE1SX1RhcmdldElkVG9MZEdldChsZENvdW50LCBtYXApOworCQlpZiAobGQgPj0gTUFYX0xPR0lDQUxfRFJJVkVTKSB7CisJCQlsYkluZm9bbGRDb3VudF0ubG9hZEJhbGFuY2VGbGFnID0gMDsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJcmFpZCA9IE1SX0xkUmFpZEdldChsZCwgbWFwKTsKKworCQkvKiBUd28gZHJpdmUgT3B0aW1hbCBSQUlEIDEgKi8KKwkJaWYgKChyYWlkLT5sZXZlbCA9PSAxKSAgJiYgIChyYWlkLT5yb3dTaXplID09IDIpICYmCisJCSAgICAocmFpZC0+c3BhbkRlcHRoID09IDEpICYmIHJhaWQtPmxkU3RhdGUgPT0KKwkJICAgIE1SX0xEX1NUQVRFX09QVElNQUwpIHsKKwkJCXUzMiBwZCwgYXJSZWY7CisKKwkJCWxiSW5mb1tsZENvdW50XS5sb2FkQmFsYW5jZUZsYWcgPSAxOworCisJCQkvKiBHZXQgdGhlIGFycmF5IG9uIHdoaWNoIHRoaXMgc3BhbiBpcyBwcmVzZW50ICovCisJCQlhclJlZiA9IE1SX0xkU3BhbkFycmF5R2V0KGxkLCAwLCBtYXApOworCisJCQkvKiBHZXQgdGhlIFBkICovCisJCQlwZCA9IE1SX0FyUGRHZXQoYXJSZWYsIDAsIG1hcCk7CisJCQkvKiBHZXQgZGV2IGhhbmRsZSBmcm9tIFBkICovCisJCQlsYkluZm9bbGRDb3VudF0ucmFpZDFEZXZIYW5kbGVbMF0gPQorCQkJCU1SX1BkRGV2SGFuZGxlR2V0KHBkLCBtYXApOworCQkJLyogR2V0IHRoZSBQZCAqLworCQkJcGQgPSBNUl9BclBkR2V0KGFyUmVmLCAxLCBtYXApOworCisJCQkvKiBHZXQgdGhlIGRldiBoYW5kbGUgZnJvbSBQZCAqLworCQkJbGJJbmZvW2xkQ291bnRdLnJhaWQxRGV2SGFuZGxlWzFdID0KKwkJCQlNUl9QZERldkhhbmRsZUdldChwZCwgbWFwKTsKKwkJfSBlbHNlCisJCQlsYkluZm9bbGRDb3VudF0ubG9hZEJhbGFuY2VGbGFnID0gMDsKKwl9Cit9CisKK3U4IG1lZ2FzYXNfZ2V0X2Jlc3RfYXJtKHN0cnVjdCBMRF9MT0FEX0JBTEFOQ0VfSU5GTyAqbGJJbmZvLCB1OCBhcm0sIHU2NCBibG9jaywKKwkJCXUzMiBjb3VudCkKK3sKKwl1MTYgICAgIHBlbmQwLCBwZW5kMTsKKwl1NjQgICAgIGRpZmYwLCBkaWZmMTsKKwl1OCAgICAgIGJlc3RBcm07CisKKwkvKiBnZXQgdGhlIHBlbmRpbmcgY21kcyBmb3IgdGhlIGRhdGEgYW5kIG1pcnJvciBhcm1zICovCisJcGVuZDAgPSBhdG9taWNfcmVhZCgmbGJJbmZvLT5zY3NpX3BlbmRpbmdfY21kc1swXSk7CisJcGVuZDEgPSBhdG9taWNfcmVhZCgmbGJJbmZvLT5zY3NpX3BlbmRpbmdfY21kc1sxXSk7CisKKwkvKiBEZXRlcm1pbmUgdGhlIGRpc2sgd2hvc2UgaGVhZCBpcyBuZWFyZXIgdG8gdGhlIHJlcS4gYmxvY2sgKi8KKwlkaWZmMCA9IEFCU19ESUZGKGJsb2NrLCBsYkluZm8tPmxhc3RfYWNjZXNzZWRfYmxvY2tbMF0pOworCWRpZmYxID0gQUJTX0RJRkYoYmxvY2ssIGxiSW5mby0+bGFzdF9hY2Nlc3NlZF9ibG9ja1sxXSk7CisJYmVzdEFybSA9IChkaWZmMCA8PSBkaWZmMSA/IDAgOiAxKTsKKworCWlmICgoYmVzdEFybSA9PSBhcm0gJiYgcGVuZDAgPiBwZW5kMSArIDE2KSAgfHwKKwkgICAgKGJlc3RBcm0gIT0gYXJtICYmIHBlbmQxID4gcGVuZDAgKyAxNikpCisJCWJlc3RBcm0gXj0gMTsKKworCS8qIFVwZGF0ZSB0aGUgbGFzdCBhY2Nlc3NlZCBibG9jayBvbiB0aGUgY29ycmVjdCBwZCAqLworCWxiSW5mby0+bGFzdF9hY2Nlc3NlZF9ibG9ja1tiZXN0QXJtXSA9IGJsb2NrICsgY291bnQgLSAxOworCisJcmV0dXJuIGJlc3RBcm07Cit9CisKK3UxNiBnZXRfdXBkYXRlZF9kZXZfaGFuZGxlKHN0cnVjdCBMRF9MT0FEX0JBTEFOQ0VfSU5GTyAqbGJJbmZvLAorCQkJICAgc3RydWN0IElPX1JFUVVFU1RfSU5GTyAqaW9faW5mbykKK3sKKwl1OCBhcm0sIG9sZF9hcm07CisJdTE2IGRldkhhbmRsZTsKKworCW9sZF9hcm0gPSBsYkluZm8tPnJhaWQxRGV2SGFuZGxlWzBdID09IGlvX2luZm8tPmRldkhhbmRsZSA/IDAgOiAxOworCisJLyogZ2V0IGJlc3QgbmV3IGFybSAqLworCWFybSAgPSBtZWdhc2FzX2dldF9iZXN0X2FybShsYkluZm8sIG9sZF9hcm0sIGlvX2luZm8tPmxkU3RhcnRCbG9jaywKKwkJCQkgICAgaW9faW5mby0+bnVtQmxvY2tzKTsKKwlkZXZIYW5kbGUgPSBsYkluZm8tPnJhaWQxRGV2SGFuZGxlW2FybV07CisJYXRvbWljX2luYygmbGJJbmZvLT5zY3NpX3BlbmRpbmdfY21kc1thcm1dKTsKKworCXJldHVybiBkZXZIYW5kbGU7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzX2Z1c2lvbi5jIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhc19mdXNpb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWUwOWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhc19mdXNpb24uYwpAQCAtMCwwICsxLDIyNDggQEAKKy8qCisgKiAgTGludXggTWVnYVJBSUQgZHJpdmVyIGZvciBTQVMgYmFzZWQgUkFJRCBjb250cm9sbGVycworICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMSAgTFNJIENvcnBvcmF0aW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqCisgKiAgRklMRTogbWVnYXJhaWRfc2FzX2Z1c2lvbi5jCisgKgorICogIEF1dGhvcnM6IExTSSBDb3Jwb3JhdGlvbgorICogICAgICAgICAgIFN1bWFudCBQYXRybworICogICAgICAgICAgIEFkYW0gUmFkZm9yZCA8bGludXhyYWlkQGxzaS5jb20+CisgKgorICogIFNlbmQgZmVlZGJhY2sgdG86IDxtZWdhcmFpZGxpbnV4QGxzaS5jb20+CisgKgorICogIE1haWwgdG86IExTSSBDb3Jwb3JhdGlvbiwgMTYyMSBCYXJiZXIgTGFuZSwgTWlscGl0YXMsIENBIDk1MDM1CisgKiAgICAgQVRUTjogTGludXhyYWlkCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvdWlvLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CisjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisKKyNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgorCisjaW5jbHVkZSAibWVnYXJhaWRfc2FzX2Z1c2lvbi5oIgorI2luY2x1ZGUgIm1lZ2FyYWlkX3Nhcy5oIgorCitleHRlcm4gdm9pZCBtZWdhc2FzX2ZyZWVfY21kcyhzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UpOworZXh0ZXJuIHN0cnVjdCBtZWdhc2FzX2NtZCAqbWVnYXNhc19nZXRfY21kKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlCisJCQkJCSAgICppbnN0YW5jZSk7CitleHRlcm4gdm9pZAorbWVnYXNhc19jb21wbGV0ZV9jbWQoc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlLAorCQkgICAgIHN0cnVjdCBtZWdhc2FzX2NtZCAqY21kLCB1OCBhbHRfc3RhdHVzKTsKK2ludCBtZWdhc2FzX2lzX2xkaW8oc3RydWN0IHNjc2lfY21uZCAqY21kKTsKK2ludAord2FpdF9hbmRfcG9sbChzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UsIHN0cnVjdCBtZWdhc2FzX2NtZCAqY21kKTsKKwordm9pZAorbWVnYXNhc19yZXR1cm5fY21kKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSwgc3RydWN0IG1lZ2FzYXNfY21kICpjbWQpOworaW50IG1lZ2FzYXNfYWxsb2NfY21kcyhzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UpOworaW50CittZWdhc2FzX2NsZWFyX2ludHJfZnVzaW9uKHN0cnVjdCBtZWdhc2FzX3JlZ2lzdGVyX3NldCBfX2lvbWVtICpyZWdzKTsKK2ludAorbWVnYXNhc19pc3N1ZV9wb2xsZWQoc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlLAorCQkgICAgIHN0cnVjdCBtZWdhc2FzX2NtZCAqY21kKTsKKwordTgKK01SX0J1aWxkUmFpZENvbnRleHQoc3RydWN0IElPX1JFUVVFU1RfSU5GTyAqaW9faW5mbywKKwkJICAgIHN0cnVjdCBSQUlEX0NPTlRFWFQgKnBSQUlEX0NvbnRleHQsCisJCSAgICBzdHJ1Y3QgTVJfRldfUkFJRF9NQVBfQUxMICptYXApOwordTE2IE1SX1RhcmdldElkVG9MZEdldCh1MzIgbGRUZ3RJZCwgc3RydWN0IE1SX0ZXX1JBSURfTUFQX0FMTCAqbWFwKTsKK3N0cnVjdCBNUl9MRF9SQUlEICpNUl9MZFJhaWRHZXQodTMyIGxkLCBzdHJ1Y3QgTVJfRldfUkFJRF9NQVBfQUxMICptYXApOworCit1MTYgTVJfR2V0TERUZ3RJZCh1MzIgbGQsIHN0cnVjdCBNUl9GV19SQUlEX01BUF9BTEwgKm1hcCk7Cit1OCBNUl9WYWxpZGF0ZU1hcEluZm8oc3RydWN0IE1SX0ZXX1JBSURfTUFQX0FMTCAqbWFwLAorCQkgICAgICBzdHJ1Y3QgTERfTE9BRF9CQUxBTkNFX0lORk8gKmxiSW5mbyk7Cit1MTYgZ2V0X3VwZGF0ZWRfZGV2X2hhbmRsZShzdHJ1Y3QgTERfTE9BRF9CQUxBTkNFX0lORk8gKmxiSW5mbywKKwkJCSAgIHN0cnVjdCBJT19SRVFVRVNUX0lORk8gKmluX2luZm8pOworaW50IG1lZ2FzYXNfdHJhbnNpdGlvbl90b19yZWFkeShzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UpOwordm9pZCBtZWdhcmFpZF9zYXNfa2lsbF9oYmEoc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlKTsKKworZXh0ZXJuIHUzMiBtZWdhc2FzX2RiZ19sdmw7CisKKy8qKgorICogbWVnYXNhc19lbmFibGVfaW50cl9mdXNpb24gLQlFbmFibGVzIGludGVycnVwdHMKKyAqIEByZWdzOgkJCU1GSSByZWdpc3RlciBzZXQKKyAqLwordm9pZAorbWVnYXNhc19lbmFibGVfaW50cl9mdXNpb24oc3RydWN0IG1lZ2FzYXNfcmVnaXN0ZXJfc2V0IF9faW9tZW0gKnJlZ3MpCit7CisJd3JpdGVsKH5NRklfRlVTSU9OX0VOQUJMRV9JTlRFUlJVUFRfTUFTSywgJihyZWdzKS0+b3V0Ym91bmRfaW50cl9tYXNrKTsKKworCS8qIER1bW15IHJlYWRsIHRvIGZvcmNlIHBjaSBmbHVzaCAqLworCXJlYWRsKCZyZWdzLT5vdXRib3VuZF9pbnRyX21hc2spOworfQorCisvKioKKyAqIG1lZ2FzYXNfZGlzYWJsZV9pbnRyX2Z1c2lvbiAtIERpc2FibGVzIGludGVycnVwdAorICogQHJlZ3M6CQkJIE1GSSByZWdpc3RlciBzZXQKKyAqLwordm9pZAorbWVnYXNhc19kaXNhYmxlX2ludHJfZnVzaW9uKHN0cnVjdCBtZWdhc2FzX3JlZ2lzdGVyX3NldCBfX2lvbWVtICpyZWdzKQoreworCXUzMiBtYXNrID0gMHhGRkZGRkZGRjsKKwl1MzIgc3RhdHVzOworCisJd3JpdGVsKG1hc2ssICZyZWdzLT5vdXRib3VuZF9pbnRyX21hc2spOworCS8qIER1bW15IHJlYWRsIHRvIGZvcmNlIHBjaSBmbHVzaCAqLworCXN0YXR1cyA9IHJlYWRsKCZyZWdzLT5vdXRib3VuZF9pbnRyX21hc2spOworfQorCitpbnQKK21lZ2FzYXNfY2xlYXJfaW50cl9mdXNpb24oc3RydWN0IG1lZ2FzYXNfcmVnaXN0ZXJfc2V0IF9faW9tZW0gKnJlZ3MpCit7CisJdTMyIHN0YXR1czsKKwkvKgorCSAqIENoZWNrIGlmIGl0IGlzIG91ciBpbnRlcnJ1cHQKKwkgKi8KKwlzdGF0dXMgPSByZWFkbCgmcmVncy0+b3V0Ym91bmRfaW50cl9zdGF0dXMpOworCisJaWYgKHN0YXR1cyAmIDEpIHsKKwkJd3JpdGVsKHN0YXR1cywgJnJlZ3MtPm91dGJvdW5kX2ludHJfc3RhdHVzKTsKKwkJcmVhZGwoJnJlZ3MtPm91dGJvdW5kX2ludHJfc3RhdHVzKTsKKwkJcmV0dXJuIDE7CisJfQorCWlmICghKHN0YXR1cyAmIE1GSV9GVVNJT05fRU5BQkxFX0lOVEVSUlVQVF9NQVNLKSkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIGR1bW15IHJlYWQgdG8gZmx1c2ggUENJCisJICovCisJcmVhZGwoJnJlZ3MtPm91dGJvdW5kX2ludHJfc3RhdHVzKTsKKworCXJldHVybiAxOworfQorCisvKioKKyAqIG1lZ2FzYXNfZ2V0X2NtZF9mdXNpb24gLQlHZXQgYSBjb21tYW5kIGZyb20gdGhlIGZyZWUgcG9vbAorICogQGluc3RhbmNlOgkJQWRhcHRlciBzb2Z0IHN0YXRlCisgKgorICogUmV0dXJucyBhIGZyZWUgY29tbWFuZCBmcm9tIHRoZSBwb29sCisgKi8KK3N0cnVjdCBtZWdhc2FzX2NtZF9mdXNpb24gKm1lZ2FzYXNfZ2V0X2NtZF9mdXNpb24oc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UKKwkJCQkJCSAgKmluc3RhbmNlKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGZ1c2lvbl9jb250ZXh0ICpmdXNpb24gPQorCQkoc3RydWN0IGZ1c2lvbl9jb250ZXh0ICopaW5zdGFuY2UtPmN0cmxfY29udGV4dDsKKwlzdHJ1Y3QgbWVnYXNhc19jbWRfZnVzaW9uICpjbWQgPSBOVUxMOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmZ1c2lvbi0+Y21kX3Bvb2xfbG9jaywgZmxhZ3MpOworCisJaWYgKCFsaXN0X2VtcHR5KCZmdXNpb24tPmNtZF9wb29sKSkgeworCQljbWQgPSBsaXN0X2VudHJ5KCgmZnVzaW9uLT5jbWRfcG9vbCktPm5leHQsCisJCQkJIHN0cnVjdCBtZWdhc2FzX2NtZF9mdXNpb24sIGxpc3QpOworCQlsaXN0X2RlbF9pbml0KCZjbWQtPmxpc3QpOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0VSUiAibWVnYXNhczogQ29tbWFuZCBwb29sIChmdXNpb24pIGVtcHR5IVxuIik7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZnVzaW9uLT5jbWRfcG9vbF9sb2NrLCBmbGFncyk7CisJcmV0dXJuIGNtZDsKK30KKworLyoqCisgKiBtZWdhc2FzX3JldHVybl9jbWRfZnVzaW9uIC0JUmV0dXJuIGEgY21kIHRvIGZyZWUgY29tbWFuZCBwb29sCisgKiBAaW5zdGFuY2U6CQlBZGFwdGVyIHNvZnQgc3RhdGUKKyAqIEBjbWQ6CQlDb21tYW5kIHBhY2tldCB0byBiZSByZXR1cm5lZCB0byBmcmVlIGNvbW1hbmQgcG9vbAorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK21lZ2FzYXNfcmV0dXJuX2NtZF9mdXNpb24oc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlLAorCQkJICBzdHJ1Y3QgbWVnYXNhc19jbWRfZnVzaW9uICpjbWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgZnVzaW9uX2NvbnRleHQgKmZ1c2lvbiA9CisJCShzdHJ1Y3QgZnVzaW9uX2NvbnRleHQgKilpbnN0YW5jZS0+Y3RybF9jb250ZXh0OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmZ1c2lvbi0+Y21kX3Bvb2xfbG9jaywgZmxhZ3MpOworCisJY21kLT5zY21kID0gTlVMTDsKKwljbWQtPnN5bmNfY21kX2lkeCA9ICh1MzIpVUxPTkdfTUFYOworCWxpc3RfYWRkX3RhaWwoJmNtZC0+bGlzdCwgJmZ1c2lvbi0+Y21kX3Bvb2wpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZnVzaW9uLT5jbWRfcG9vbF9sb2NrLCBmbGFncyk7Cit9CisKKy8qKgorICogbWVnYXNhc190ZWFyZG93bl9mcmFtZV9wb29sX2Z1c2lvbiAtCURlc3Ryb3kgdGhlIGNtZCBmcmFtZSBETUEgcG9vbAorICogQGluc3RhbmNlOgkJCQlBZGFwdGVyIHNvZnQgc3RhdGUKKyAqLworc3RhdGljIHZvaWQgbWVnYXNhc190ZWFyZG93bl9mcmFtZV9wb29sX2Z1c2lvbigKKwlzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UpCit7CisJaW50IGk7CisJc3RydWN0IGZ1c2lvbl9jb250ZXh0ICpmdXNpb24gPSBpbnN0YW5jZS0+Y3RybF9jb250ZXh0OworCisJdTE2IG1heF9jbWQgPSBpbnN0YW5jZS0+bWF4X2Z3X2NtZHM7CisKKwlzdHJ1Y3QgbWVnYXNhc19jbWRfZnVzaW9uICpjbWQ7CisKKwlpZiAoIWZ1c2lvbi0+c2dfZG1hX3Bvb2wgfHwgIWZ1c2lvbi0+c2Vuc2VfZG1hX3Bvb2wpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtZWdhc2FzOiBkbWEgcG9vbCBpcyBudWxsLiBTRyBQb29sICVwLCAiCisJCSAgICAgICAic2Vuc2UgcG9vbCA6ICVwXG4iLCBmdXNpb24tPnNnX2RtYV9wb29sLAorCQkgICAgICAgZnVzaW9uLT5zZW5zZV9kbWFfcG9vbCk7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIFJldHVybiBhbGwgZnJhbWVzIHRvIHBvb2wKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbWF4X2NtZDsgaSsrKSB7CisKKwkJY21kID0gZnVzaW9uLT5jbWRfbGlzdFtpXTsKKworCQlpZiAoY21kLT5zZ19mcmFtZSkKKwkJCXBjaV9wb29sX2ZyZWUoZnVzaW9uLT5zZ19kbWFfcG9vbCwgY21kLT5zZ19mcmFtZSwKKwkJCQkgICAgICBjbWQtPnNnX2ZyYW1lX3BoeXNfYWRkcik7CisKKwkJaWYgKGNtZC0+c2Vuc2UpCisJCQlwY2lfcG9vbF9mcmVlKGZ1c2lvbi0+c2Vuc2VfZG1hX3Bvb2wsIGNtZC0+c2Vuc2UsCisJCQkJICAgICAgY21kLT5zZW5zZV9waHlzX2FkZHIpOworCX0KKworCS8qCisJICogTm93IGRlc3Ryb3kgdGhlIHBvb2wgaXRzZWxmCisJICovCisJcGNpX3Bvb2xfZGVzdHJveShmdXNpb24tPnNnX2RtYV9wb29sKTsKKwlwY2lfcG9vbF9kZXN0cm95KGZ1c2lvbi0+c2Vuc2VfZG1hX3Bvb2wpOworCisJZnVzaW9uLT5zZ19kbWFfcG9vbCA9IE5VTEw7CisJZnVzaW9uLT5zZW5zZV9kbWFfcG9vbCA9IE5VTEw7Cit9CisKKy8qKgorICogbWVnYXNhc19mcmVlX2NtZHNfZnVzaW9uIC0JRnJlZSBhbGwgdGhlIGNtZHMgaW4gdGhlIGZyZWUgY21kIHBvb2wKKyAqIEBpbnN0YW5jZToJCUFkYXB0ZXIgc29mdCBzdGF0ZQorICovCit2b2lkCittZWdhc2FzX2ZyZWVfY21kc19mdXNpb24oc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlKQoreworCWludCBpOworCXN0cnVjdCBmdXNpb25fY29udGV4dCAqZnVzaW9uID0gaW5zdGFuY2UtPmN0cmxfY29udGV4dDsKKworCXUzMiBtYXhfY21kcywgcmVxX3N6LCByZXBseV9zeiwgaW9fZnJhbWVzX3N6OworCisKKwlyZXFfc3ogPSBmdXNpb24tPnJlcXVlc3RfYWxsb2Nfc3o7CisJcmVwbHlfc3ogPSBmdXNpb24tPnJlcGx5X2FsbG9jX3N6OworCWlvX2ZyYW1lc19zeiA9IGZ1c2lvbi0+aW9fZnJhbWVzX2FsbG9jX3N6OworCisJbWF4X2NtZHMgPSBpbnN0YW5jZS0+bWF4X2Z3X2NtZHM7CisKKwkvKiBGcmVlIGRlc2NyaXB0b3JzIGFuZCByZXF1ZXN0IEZyYW1lcyBtZW1vcnkgKi8KKwlpZiAoZnVzaW9uLT5yZXFfZnJhbWVzX2Rlc2MpCisJCWRtYV9mcmVlX2NvaGVyZW50KCZpbnN0YW5jZS0+cGRldi0+ZGV2LCByZXFfc3osCisJCQkJICBmdXNpb24tPnJlcV9mcmFtZXNfZGVzYywKKwkJCQkgIGZ1c2lvbi0+cmVxX2ZyYW1lc19kZXNjX3BoeXMpOworCisJaWYgKGZ1c2lvbi0+cmVwbHlfZnJhbWVzX2Rlc2MpIHsKKwkJcGNpX3Bvb2xfZnJlZShmdXNpb24tPnJlcGx5X2ZyYW1lc19kZXNjX3Bvb2wsCisJCQkgICAgICBmdXNpb24tPnJlcGx5X2ZyYW1lc19kZXNjLAorCQkJICAgICAgZnVzaW9uLT5yZXBseV9mcmFtZXNfZGVzY19waHlzKTsKKwkJcGNpX3Bvb2xfZGVzdHJveShmdXNpb24tPnJlcGx5X2ZyYW1lc19kZXNjX3Bvb2wpOworCX0KKworCWlmIChmdXNpb24tPmlvX3JlcXVlc3RfZnJhbWVzKSB7CisJCXBjaV9wb29sX2ZyZWUoZnVzaW9uLT5pb19yZXF1ZXN0X2ZyYW1lc19wb29sLAorCQkJICAgICAgZnVzaW9uLT5pb19yZXF1ZXN0X2ZyYW1lcywKKwkJCSAgICAgIGZ1c2lvbi0+aW9fcmVxdWVzdF9mcmFtZXNfcGh5cyk7CisJCXBjaV9wb29sX2Rlc3Ryb3koZnVzaW9uLT5pb19yZXF1ZXN0X2ZyYW1lc19wb29sKTsKKwl9CisKKwkvKiBGcmVlIHRoZSBGdXNpb24gZnJhbWUgcG9vbCAqLworCW1lZ2FzYXNfdGVhcmRvd25fZnJhbWVfcG9vbF9mdXNpb24oaW5zdGFuY2UpOworCisJLyogRnJlZSBhbGwgdGhlIGNvbW1hbmRzIGluIHRoZSBjbWRfbGlzdCAqLworCWZvciAoaSA9IDA7IGkgPCBtYXhfY21kczsgaSsrKQorCQlrZnJlZShmdXNpb24tPmNtZF9saXN0W2ldKTsKKworCS8qIEZyZWUgdGhlIGNtZF9saXN0IGJ1ZmZlciBpdHNlbGYgKi8KKwlrZnJlZShmdXNpb24tPmNtZF9saXN0KTsKKwlmdXNpb24tPmNtZF9saXN0ID0gTlVMTDsKKworCUlOSVRfTElTVF9IRUFEKCZmdXNpb24tPmNtZF9wb29sKTsKK30KKworLyoqCisgKiBtZWdhc2FzX2NyZWF0ZV9mcmFtZV9wb29sX2Z1c2lvbiAtCUNyZWF0ZXMgRE1BIHBvb2wgZm9yIGNtZCBmcmFtZXMKKyAqIEBpbnN0YW5jZToJCQlBZGFwdGVyIHNvZnQgc3RhdGUKKyAqCisgKi8KK3N0YXRpYyBpbnQgbWVnYXNhc19jcmVhdGVfZnJhbWVfcG9vbF9mdXNpb24oc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlKQoreworCWludCBpOworCXUzMiBtYXhfY21kOworCXN0cnVjdCBmdXNpb25fY29udGV4dCAqZnVzaW9uOworCXN0cnVjdCBtZWdhc2FzX2NtZF9mdXNpb24gKmNtZDsKKwl1MzIgdG90YWxfc3pfY2hhaW5fZnJhbWU7CisKKwlmdXNpb24gPSBpbnN0YW5jZS0+Y3RybF9jb250ZXh0OworCW1heF9jbWQgPSBpbnN0YW5jZS0+bWF4X2Z3X2NtZHM7CisKKwl0b3RhbF9zel9jaGFpbl9mcmFtZSA9IE1FR0FTQVNfTUFYX1NaX0NIQUlOX0ZSQU1FOworCisJLyoKKwkgKiBVc2UgRE1BIHBvb2wgZmFjaWxpdHkgcHJvdmlkZWQgYnkgUENJIGxheWVyCisJICovCisKKwlmdXNpb24tPnNnX2RtYV9wb29sID0gcGNpX3Bvb2xfY3JlYXRlKCJtZWdhc2FzIHNnIHBvb2wgZnVzaW9uIiwKKwkJCQkJICAgICAgaW5zdGFuY2UtPnBkZXYsCisJCQkJCSAgICAgIHRvdGFsX3N6X2NoYWluX2ZyYW1lLCA0LAorCQkJCQkgICAgICAwKTsKKwlpZiAoIWZ1c2lvbi0+c2dfZG1hX3Bvb2wpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIm1lZ2FzYXM6IGZhaWxlZCB0byBzZXR1cCByZXF1ZXN0IHBvb2wgIgorCQkgICAgICAgImZ1c2lvblxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlmdXNpb24tPnNlbnNlX2RtYV9wb29sID0gcGNpX3Bvb2xfY3JlYXRlKCJtZWdhc2FzIHNlbnNlIHBvb2wgZnVzaW9uIiwKKwkJCQkJCSBpbnN0YW5jZS0+cGRldiwKKwkJCQkJCSBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUsIDY0LCAwKTsKKworCWlmICghZnVzaW9uLT5zZW5zZV9kbWFfcG9vbCkgeworCQlwcmludGsoS0VSTl9ERUJVRyAibWVnYXNhczogZmFpbGVkIHRvIHNldHVwIHNlbnNlIHBvb2wgIgorCQkgICAgICAgImZ1c2lvblxuIik7CisJCXBjaV9wb29sX2Rlc3Ryb3koZnVzaW9uLT5zZ19kbWFfcG9vbCk7CisJCWZ1c2lvbi0+c2dfZG1hX3Bvb2wgPSBOVUxMOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKgorCSAqIEFsbG9jYXRlIGFuZCBhdHRhY2ggYSBmcmFtZSB0byBlYWNoIG9mIHRoZSBjb21tYW5kcyBpbiBjbWRfbGlzdAorCSAqLworCWZvciAoaSA9IDA7IGkgPCBtYXhfY21kOyBpKyspIHsKKworCQljbWQgPSBmdXNpb24tPmNtZF9saXN0W2ldOworCisJCWNtZC0+c2dfZnJhbWUgPSBwY2lfcG9vbF9hbGxvYyhmdXNpb24tPnNnX2RtYV9wb29sLAorCQkJCQkgICAgICAgR0ZQX0tFUk5FTCwKKwkJCQkJICAgICAgICZjbWQtPnNnX2ZyYW1lX3BoeXNfYWRkcik7CisKKwkJY21kLT5zZW5zZSA9IHBjaV9wb29sX2FsbG9jKGZ1c2lvbi0+c2Vuc2VfZG1hX3Bvb2wsCisJCQkJCSAgICBHRlBfS0VSTkVMLCAmY21kLT5zZW5zZV9waHlzX2FkZHIpOworCQkvKgorCQkgKiBtZWdhc2FzX3RlYXJkb3duX2ZyYW1lX3Bvb2xfZnVzaW9uKCkgdGFrZXMgY2FyZSBvZiBmcmVlaW5nCisJCSAqIHdoYXRldmVyIGhhcyBiZWVuIGFsbG9jYXRlZAorCQkgKi8KKwkJaWYgKCFjbWQtPnNnX2ZyYW1lIHx8ICFjbWQtPnNlbnNlKSB7CisJCQlwcmludGsoS0VSTl9ERUJVRyAibWVnYXNhczogcGNpX3Bvb2xfYWxsb2MgZmFpbGVkXG4iKTsKKwkJCW1lZ2FzYXNfdGVhcmRvd25fZnJhbWVfcG9vbF9mdXNpb24oaW5zdGFuY2UpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogbWVnYXNhc19hbGxvY19jbWRzX2Z1c2lvbiAtCUFsbG9jYXRlcyB0aGUgY29tbWFuZCBwYWNrZXRzCisgKiBAaW5zdGFuY2U6CQlBZGFwdGVyIHNvZnQgc3RhdGUKKyAqCisgKgorICogRWFjaCBmcmFtZSBoYXMgYSAzMi1iaXQgZmllbGQgY2FsbGVkIGNvbnRleHQuIFRoaXMgY29udGV4dCBpcyB1c2VkIHRvIGdldAorICogYmFjayB0aGUgbWVnYXNhc19jbWRfZnVzaW9uIGZyb20gdGhlIGZyYW1lIHdoZW4gYSBmcmFtZSBnZXRzIGNvbXBsZXRlZAorICogSW4gdGhpcyBkcml2ZXIsIHRoZSAzMiBiaXQgdmFsdWVzIGFyZSB0aGUgaW5kaWNlcyBpbnRvIGFuIGFycmF5IGNtZF9saXN0LgorICogVGhpcyBhcnJheSBpcyB1c2VkIG9ubHkgdG8gbG9vayB1cCB0aGUgbWVnYXNhc19jbWRfZnVzaW9uIGdpdmVuIHRoZSBjb250ZXh0LgorICogVGhlIGZyZWUgY29tbWFuZHMgdGhlbXNlbHZlcyBhcmUgbWFpbnRhaW5lZCBpbiBhIGxpbmtlZCBsaXN0IGNhbGxlZCBjbWRfcG9vbC4KKyAqCisgKiBjbWRzIGFyZSBmb3JtZWQgaW4gdGhlIGlvX3JlcXVlc3QgYW5kIHNnX2ZyYW1lIG1lbWJlcnMgb2YgdGhlCisgKiBtZWdhc2FzX2NtZF9mdXNpb24uIFRoZSBjb250ZXh0IGZpZWxkIGlzIHVzZWQgdG8gZ2V0IGEgcmVxdWVzdCBkZXNjcmlwdG9yCisgKiBhbmQgaXMgdXNlZCBhcyBTTUlEIG9mIHRoZSBjbWQuCisgKiBTTUlEIHZhbHVlIHJhbmdlIGlzIGZyb20gMSB0byBtYXhfZndfY21kcy4KKyAqLworaW50CittZWdhc2FzX2FsbG9jX2NtZHNfZnVzaW9uKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSkKK3sKKwlpbnQgaSwgajsKKwl1MzIgbWF4X2NtZCwgaW9fZnJhbWVzX3N6OworCXN0cnVjdCBmdXNpb25fY29udGV4dCAqZnVzaW9uOworCXN0cnVjdCBtZWdhc2FzX2NtZF9mdXNpb24gKmNtZDsKKwl1bmlvbiBNUEkyX1JFUExZX0RFU0NSSVBUT1JTX1VOSU9OICpyZXBseV9kZXNjOworCXUzMiBvZmZzZXQ7CisJZG1hX2FkZHJfdCBpb19yZXFfYmFzZV9waHlzOworCXU4ICppb19yZXFfYmFzZTsKKworCWZ1c2lvbiA9IGluc3RhbmNlLT5jdHJsX2NvbnRleHQ7CisKKwltYXhfY21kID0gaW5zdGFuY2UtPm1heF9md19jbWRzOworCisJZnVzaW9uLT5yZXFfZnJhbWVzX2Rlc2MgPQorCQlkbWFfYWxsb2NfY29oZXJlbnQoJmluc3RhbmNlLT5wZGV2LT5kZXYsCisJCQkJICAgZnVzaW9uLT5yZXF1ZXN0X2FsbG9jX3N6LAorCQkJCSAgICZmdXNpb24tPnJlcV9mcmFtZXNfZGVzY19waHlzLCBHRlBfS0VSTkVMKTsKKworCWlmICghZnVzaW9uLT5yZXFfZnJhbWVzX2Rlc2MpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtZWdhc2FzOyBDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciAiCisJCSAgICAgICAicmVxdWVzdF9mcmFtZXNcbiIpOworCQlnb3RvIGZhaWxfcmVxX2Rlc2M7CisJfQorCisJZnVzaW9uLT5yZXBseV9mcmFtZXNfZGVzY19wb29sID0KKwkJcGNpX3Bvb2xfY3JlYXRlKCJyZXBseV9mcmFtZXMgcG9vbCIsIGluc3RhbmNlLT5wZGV2LAorCQkJCWZ1c2lvbi0+cmVwbHlfYWxsb2Nfc3osIDE2LCAwKTsKKworCWlmICghZnVzaW9uLT5yZXBseV9mcmFtZXNfZGVzY19wb29sKSB7CisJCXByaW50ayhLRVJOX0VSUiAibWVnYXNhczsgQ291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgIgorCQkgICAgICAgInJlcGx5X2ZyYW1lIHBvb2xcbiIpOworCQlnb3RvIGZhaWxfcmVwbHlfZGVzYzsKKwl9CisKKwlmdXNpb24tPnJlcGx5X2ZyYW1lc19kZXNjID0KKwkJcGNpX3Bvb2xfYWxsb2MoZnVzaW9uLT5yZXBseV9mcmFtZXNfZGVzY19wb29sLCBHRlBfS0VSTkVMLAorCQkJICAgICAgICZmdXNpb24tPnJlcGx5X2ZyYW1lc19kZXNjX3BoeXMpOworCWlmICghZnVzaW9uLT5yZXBseV9mcmFtZXNfZGVzYykgeworCQlwcmludGsoS0VSTl9FUlIgIm1lZ2FzYXM7IENvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yICIKKwkJICAgICAgICJyZXBseV9mcmFtZSBwb29sXG4iKTsKKwkJcGNpX3Bvb2xfZGVzdHJveShmdXNpb24tPnJlcGx5X2ZyYW1lc19kZXNjX3Bvb2wpOworCQlnb3RvIGZhaWxfcmVwbHlfZGVzYzsKKwl9CisKKwlyZXBseV9kZXNjID0gZnVzaW9uLT5yZXBseV9mcmFtZXNfZGVzYzsKKwlmb3IgKGkgPSAwOyBpIDwgZnVzaW9uLT5yZXBseV9xX2RlcHRoOyBpKyssIHJlcGx5X2Rlc2MrKykKKwkJcmVwbHlfZGVzYy0+V29yZHMgPSBVTExPTkdfTUFYOworCisJaW9fZnJhbWVzX3N6ID0gZnVzaW9uLT5pb19mcmFtZXNfYWxsb2Nfc3o7CisKKwlmdXNpb24tPmlvX3JlcXVlc3RfZnJhbWVzX3Bvb2wgPQorCQlwY2lfcG9vbF9jcmVhdGUoImlvX3JlcXVlc3RfZnJhbWVzIHBvb2wiLCBpbnN0YW5jZS0+cGRldiwKKwkJCQlmdXNpb24tPmlvX2ZyYW1lc19hbGxvY19zeiwgMTYsIDApOworCisJaWYgKCFmdXNpb24tPmlvX3JlcXVlc3RfZnJhbWVzX3Bvb2wpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtZWdhc2FzOiBDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciAiCisJCSAgICAgICAiaW9fcmVxdWVzdF9mcmFtZSBwb29sXG4iKTsKKwkJZ290byBmYWlsX2lvX2ZyYW1lczsKKwl9CisKKwlmdXNpb24tPmlvX3JlcXVlc3RfZnJhbWVzID0KKwkJcGNpX3Bvb2xfYWxsb2MoZnVzaW9uLT5pb19yZXF1ZXN0X2ZyYW1lc19wb29sLCBHRlBfS0VSTkVMLAorCQkJICAgICAgICZmdXNpb24tPmlvX3JlcXVlc3RfZnJhbWVzX3BoeXMpOworCWlmICghZnVzaW9uLT5pb19yZXF1ZXN0X2ZyYW1lcykgeworCQlwcmludGsoS0VSTl9FUlIgIm1lZ2FzYXM6IENvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yICIKKwkJICAgICAgICJpb19yZXF1ZXN0X2ZyYW1lcyBmcmFtZXNcbiIpOworCQlwY2lfcG9vbF9kZXN0cm95KGZ1c2lvbi0+aW9fcmVxdWVzdF9mcmFtZXNfcG9vbCk7CisJCWdvdG8gZmFpbF9pb19mcmFtZXM7CisJfQorCisJLyoKKwkgKiBmdXNpb24tPmNtZF9saXN0IGlzIGFuIGFycmF5IG9mIHN0cnVjdCBtZWdhc2FzX2NtZF9mdXNpb24gcG9pbnRlcnMuCisJICogQWxsb2NhdGUgdGhlIGR5bmFtaWMgYXJyYXkgZmlyc3QgYW5kIHRoZW4gYWxsb2NhdGUgaW5kaXZpZHVhbAorCSAqIGNvbW1hbmRzLgorCSAqLworCWZ1c2lvbi0+Y21kX2xpc3QgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWVnYXNhc19jbWRfZnVzaW9uICopCisJCQkJICAgKm1heF9jbWQsIEdGUF9LRVJORUwpOworCisJaWYgKCFmdXNpb24tPmNtZF9saXN0KSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJtZWdhc2FzOiBvdXQgb2YgbWVtb3J5LiBDb3VsZCBub3QgYWxsb2MgIgorCQkgICAgICAgIm1lbW9yeSBmb3IgY21kX2xpc3RfZnVzaW9uXG4iKTsKKwkJZ290byBmYWlsX2NtZF9saXN0OworCX0KKworCW1lbXNldChmdXNpb24tPmNtZF9saXN0LCAwLCBzaXplb2Yoc3RydWN0IG1lZ2FzYXNfY21kX2Z1c2lvbiAqKQorCSAgICAgICAqbWF4X2NtZCk7CisKKwltYXhfY21kID0gaW5zdGFuY2UtPm1heF9md19jbWRzOworCWZvciAoaSA9IDA7IGkgPCBtYXhfY21kOyBpKyspIHsKKwkJZnVzaW9uLT5jbWRfbGlzdFtpXSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtZWdhc2FzX2NtZF9mdXNpb24pLAorCQkJCQkgICAgICBHRlBfS0VSTkVMKTsKKwkJaWYgKCFmdXNpb24tPmNtZF9saXN0W2ldKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIkNvdWxkIG5vdCBhbGxvYyBjbWQgbGlzdCBmdXNpb25cbiIpOworCisJCQlmb3IgKGogPSAwOyBqIDwgaTsgaisrKQorCQkJCWtmcmVlKGZ1c2lvbi0+Y21kX2xpc3Rbal0pOworCisJCQlrZnJlZShmdXNpb24tPmNtZF9saXN0KTsKKwkJCWZ1c2lvbi0+Y21kX2xpc3QgPSBOVUxMOworCQkJZ290byBmYWlsX2NtZF9saXN0OworCQl9CisJfQorCisJLyogVGhlIGZpcnN0IDI1NiBieXRlcyAoU01JRCAwKSBpcyBub3QgdXNlZC4gRG9uJ3QgYWRkIHRvIGNtZCBsaXN0ICovCisJaW9fcmVxX2Jhc2UgPSBmdXNpb24tPmlvX3JlcXVlc3RfZnJhbWVzICsKKwkJTUVHQV9NUEkyX1JBSURfREVGQVVMVF9JT19GUkFNRV9TSVpFOworCWlvX3JlcV9iYXNlX3BoeXMgPSBmdXNpb24tPmlvX3JlcXVlc3RfZnJhbWVzX3BoeXMgKworCQlNRUdBX01QSTJfUkFJRF9ERUZBVUxUX0lPX0ZSQU1FX1NJWkU7CisKKwkvKgorCSAqIEFkZCBhbGwgdGhlIGNvbW1hbmRzIHRvIGNvbW1hbmQgcG9vbCAoZnVzaW9uLT5jbWRfcG9vbCkKKwkgKi8KKworCS8qIFNNSUQgMCBpcyByZXNlcnZlZC4gU2V0IFNNSUQvaW5kZXggZnJvbSAxICovCisJZm9yIChpID0gMDsgaSA8IG1heF9jbWQ7IGkrKykgeworCQljbWQgPSBmdXNpb24tPmNtZF9saXN0W2ldOworCQlvZmZzZXQgPSBNRUdBX01QSTJfUkFJRF9ERUZBVUxUX0lPX0ZSQU1FX1NJWkUgKiBpOworCQltZW1zZXQoY21kLCAwLCBzaXplb2Yoc3RydWN0IG1lZ2FzYXNfY21kX2Z1c2lvbikpOworCQljbWQtPmluZGV4ID0gaSArIDE7CisJCWNtZC0+c2NtZCA9IE5VTEw7CisJCWNtZC0+c3luY19jbWRfaWR4ID0gKHUzMilVTE9OR19NQVg7IC8qIFNldCB0byBJbnZhbGlkICovCisJCWNtZC0+aW5zdGFuY2UgPSBpbnN0YW5jZTsKKwkJY21kLT5pb19yZXF1ZXN0ID0KKwkJCShzdHJ1Y3QgTVBJMl9SQUlEX1NDU0lfSU9fUkVRVUVTVCAqKQorCQkgIChpb19yZXFfYmFzZSArIG9mZnNldCk7CisJCW1lbXNldChjbWQtPmlvX3JlcXVlc3QsIDAsCisJCSAgICAgICBzaXplb2Yoc3RydWN0IE1QSTJfUkFJRF9TQ1NJX0lPX1JFUVVFU1QpKTsKKwkJY21kLT5pb19yZXF1ZXN0X3BoeXNfYWRkciA9IGlvX3JlcV9iYXNlX3BoeXMgKyBvZmZzZXQ7CisKKwkJbGlzdF9hZGRfdGFpbCgmY21kLT5saXN0LCAmZnVzaW9uLT5jbWRfcG9vbCk7CisJfQorCisJLyoKKwkgKiBDcmVhdGUgYSBmcmFtZSBwb29sIGFuZCBhc3NpZ24gb25lIGZyYW1lIHRvIGVhY2ggY21kCisJICovCisJaWYgKG1lZ2FzYXNfY3JlYXRlX2ZyYW1lX3Bvb2xfZnVzaW9uKGluc3RhbmNlKSkgeworCQlwcmludGsoS0VSTl9ERUJVRyAibWVnYXNhczogRXJyb3IgY3JlYXRpbmcgZnJhbWUgRE1BIHBvb2xcbiIpOworCQltZWdhc2FzX2ZyZWVfY21kc19mdXNpb24oaW5zdGFuY2UpOworCQlnb3RvIGZhaWxfcmVxX2Rlc2M7CisJfQorCisJcmV0dXJuIDA7CisKK2ZhaWxfY21kX2xpc3Q6CisJcGNpX3Bvb2xfZnJlZShmdXNpb24tPmlvX3JlcXVlc3RfZnJhbWVzX3Bvb2wsIGZ1c2lvbi0+aW9fcmVxdWVzdF9mcmFtZXMsCisJCSAgICAgIGZ1c2lvbi0+aW9fcmVxdWVzdF9mcmFtZXNfcGh5cyk7CisJcGNpX3Bvb2xfZGVzdHJveShmdXNpb24tPmlvX3JlcXVlc3RfZnJhbWVzX3Bvb2wpOworZmFpbF9pb19mcmFtZXM6CisJZG1hX2ZyZWVfY29oZXJlbnQoJmluc3RhbmNlLT5wZGV2LT5kZXYsIGZ1c2lvbi0+cmVxdWVzdF9hbGxvY19zeiwKKwkJCSAgZnVzaW9uLT5yZXBseV9mcmFtZXNfZGVzYywKKwkJCSAgZnVzaW9uLT5yZXBseV9mcmFtZXNfZGVzY19waHlzKTsKKwlwY2lfcG9vbF9mcmVlKGZ1c2lvbi0+cmVwbHlfZnJhbWVzX2Rlc2NfcG9vbCwKKwkJICAgICAgZnVzaW9uLT5yZXBseV9mcmFtZXNfZGVzYywKKwkJICAgICAgZnVzaW9uLT5yZXBseV9mcmFtZXNfZGVzY19waHlzKTsKKwlwY2lfcG9vbF9kZXN0cm95KGZ1c2lvbi0+cmVwbHlfZnJhbWVzX2Rlc2NfcG9vbCk7CisKK2ZhaWxfcmVwbHlfZGVzYzoKKwlkbWFfZnJlZV9jb2hlcmVudCgmaW5zdGFuY2UtPnBkZXYtPmRldiwgZnVzaW9uLT5yZXF1ZXN0X2FsbG9jX3N6LAorCQkJICBmdXNpb24tPnJlcV9mcmFtZXNfZGVzYywKKwkJCSAgZnVzaW9uLT5yZXFfZnJhbWVzX2Rlc2NfcGh5cyk7CitmYWlsX3JlcV9kZXNjOgorCXJldHVybiAtRU5PTUVNOworfQorCisvKioKKyAqIHdhaXRfYW5kX3BvbGwgLQlJc3N1ZXMgYSBwb2xsaW5nIGNvbW1hbmQKKyAqIEBpbnN0YW5jZToJCQlBZGFwdGVyIHNvZnQgc3RhdGUKKyAqIEBjbWQ6CQkJQ29tbWFuZCBwYWNrZXQgdG8gYmUgaXNzdWVkCisgKgorICogRm9yIHBvbGxpbmcsIE1GSSByZXF1aXJlcyB0aGUgY21kX3N0YXR1cyB0byBiZSBzZXQgdG8gMHhGRiBiZWZvcmUgcG9zdGluZy4KKyAqLworaW50Cit3YWl0X2FuZF9wb2xsKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSwgc3RydWN0IG1lZ2FzYXNfY21kICpjbWQpCit7CisJaW50IGk7CisJc3RydWN0IG1lZ2FzYXNfaGVhZGVyICpmcmFtZV9oZHIgPSAmY21kLT5mcmFtZS0+aGRyOworCisJdTMyIG1zZWNzID0gTUZJX1BPTExfVElNRU9VVF9TRUNTICogMTAwMDsKKworCS8qCisJICogV2FpdCBmb3IgY21kX3N0YXR1cyB0byBjaGFuZ2UKKwkgKi8KKwlmb3IgKGkgPSAwOyAoaSA8IG1zZWNzKSAmJiAoZnJhbWVfaGRyLT5jbWRfc3RhdHVzID09IDB4ZmYpOyBpICs9IDIwKSB7CisJCXJtYigpOworCQltc2xlZXAoMjApOworCX0KKworCWlmIChmcmFtZV9oZHItPmNtZF9zdGF0dXMgPT0gMHhmZikKKwkJcmV0dXJuIC1FVElNRTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIG1lZ2FzYXNfaW9jX2luaXRfZnVzaW9uIC0JSW5pdGlhbGl6ZXMgdGhlIEZXCisgKiBAaW5zdGFuY2U6CQlBZGFwdGVyIHNvZnQgc3RhdGUKKyAqCisgKiBJc3N1ZXMgdGhlIElPQyBJbml0IGNtZAorICovCitpbnQKK21lZ2FzYXNfaW9jX2luaXRfZnVzaW9uKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSkKK3sKKwlzdHJ1Y3QgbWVnYXNhc19pbml0X2ZyYW1lICppbml0X2ZyYW1lOworCXN0cnVjdCBNUEkyX0lPQ19JTklUX1JFUVVFU1QgKklPQ0luaXRNZXNzYWdlOworCWRtYV9hZGRyX3QJaW9jX2luaXRfaGFuZGxlOworCXUzMiBjb250ZXh0OworCXN0cnVjdCBtZWdhc2FzX2NtZCAqY21kOworCXU4IHJldDsKKwlzdHJ1Y3QgZnVzaW9uX2NvbnRleHQgKmZ1c2lvbjsKKwl1bmlvbiBNRUdBU0FTX1JFUVVFU1RfREVTQ1JJUFRPUl9VTklPTiAqcmVxX2Rlc2M7CisJaW50IGk7CisJc3RydWN0IG1lZ2FzYXNfaGVhZGVyICpmcmFtZV9oZHI7CisKKwlmdXNpb24gPSBpbnN0YW5jZS0+Y3RybF9jb250ZXh0OworCisJY21kID0gbWVnYXNhc19nZXRfY21kKGluc3RhbmNlKTsKKworCWlmICghY21kKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQ291bGQgbm90IGFsbG9jYXRlIGNtZCBmb3IgSU5JVCBGcmFtZVxuIik7CisJCXJldCA9IDE7CisJCWdvdG8gZmFpbF9nZXRfY21kOworCX0KKworCUlPQ0luaXRNZXNzYWdlID0KKwkgIGRtYV9hbGxvY19jb2hlcmVudCgmaW5zdGFuY2UtPnBkZXYtPmRldiwKKwkJCSAgICAgc2l6ZW9mKHN0cnVjdCBNUEkyX0lPQ19JTklUX1JFUVVFU1QpLAorCQkJICAgICAmaW9jX2luaXRfaGFuZGxlLCBHRlBfS0VSTkVMKTsKKworCWlmICghSU9DSW5pdE1lc3NhZ2UpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciAiCisJCSAgICAgICAiSU9DSW5pdE1lc3NhZ2VcbiIpOworCQlyZXQgPSAxOworCQlnb3RvIGZhaWxfZndfaW5pdDsKKwl9CisKKwltZW1zZXQoSU9DSW5pdE1lc3NhZ2UsIDAsIHNpemVvZihzdHJ1Y3QgTVBJMl9JT0NfSU5JVF9SRVFVRVNUKSk7CisKKwlJT0NJbml0TWVzc2FnZS0+RnVuY3Rpb24gPSBNUEkyX0ZVTkNUSU9OX0lPQ19JTklUOworCUlPQ0luaXRNZXNzYWdlLT5XaG9Jbml0CT0gTVBJMl9XSE9JTklUX0hPU1RfRFJJVkVSOworCUlPQ0luaXRNZXNzYWdlLT5Nc2dWZXJzaW9uID0gTVBJMl9WRVJTSU9OOworCUlPQ0luaXRNZXNzYWdlLT5IZWFkZXJWZXJzaW9uID0gTVBJMl9IRUFERVJfVkVSU0lPTjsKKwlJT0NJbml0TWVzc2FnZS0+U3lzdGVtUmVxdWVzdEZyYW1lU2l6ZSA9CisJCU1FR0FfTVBJMl9SQUlEX0RFRkFVTFRfSU9fRlJBTUVfU0laRSAvIDQ7CisKKwlJT0NJbml0TWVzc2FnZS0+UmVwbHlEZXNjcmlwdG9yUG9zdFF1ZXVlRGVwdGggPSBmdXNpb24tPnJlcGx5X3FfZGVwdGg7CisJSU9DSW5pdE1lc3NhZ2UtPlJlcGx5RGVzY3JpcHRvclBvc3RRdWV1ZUFkZHJlc3MJPQorCQlmdXNpb24tPnJlcGx5X2ZyYW1lc19kZXNjX3BoeXM7CisJSU9DSW5pdE1lc3NhZ2UtPlN5c3RlbVJlcXVlc3RGcmFtZUJhc2VBZGRyZXNzID0KKwkJZnVzaW9uLT5pb19yZXF1ZXN0X2ZyYW1lc19waHlzOworCisJaW5pdF9mcmFtZSA9IChzdHJ1Y3QgbWVnYXNhc19pbml0X2ZyYW1lICopY21kLT5mcmFtZTsKKwltZW1zZXQoaW5pdF9mcmFtZSwgMCwgTUVHQU1GSV9GUkFNRV9TSVpFKTsKKworCWZyYW1lX2hkciA9ICZjbWQtPmZyYW1lLT5oZHI7CisJY29udGV4dCA9IGluaXRfZnJhbWUtPmNvbnRleHQ7CisJaW5pdF9mcmFtZS0+Y29udGV4dCA9IGNvbnRleHQ7CisKKwlmcmFtZV9oZHItPmNtZF9zdGF0dXMgPSAweEZGOworCWZyYW1lX2hkci0+ZmxhZ3MgfD0gTUZJX0ZSQU1FX0RPTlRfUE9TVF9JTl9SRVBMWV9RVUVVRTsKKworCWluaXRfZnJhbWUtPmNtZAk9IE1GSV9DTURfSU5JVDsKKwlpbml0X2ZyYW1lLT5jbWRfc3RhdHVzID0gMHhGRjsKKworCWluaXRfZnJhbWUtPnF1ZXVlX2luZm9fbmV3X3BoeXNfYWRkcl9sbyA9IGlvY19pbml0X2hhbmRsZTsKKwlpbml0X2ZyYW1lLT5kYXRhX3hmZXJfbGVuID0gc2l6ZW9mKHN0cnVjdCBNUEkyX0lPQ19JTklUX1JFUVVFU1QpOworCisJcmVxX2Rlc2MgPQorCSAgKHVuaW9uIE1FR0FTQVNfUkVRVUVTVF9ERVNDUklQVE9SX1VOSU9OICopZnVzaW9uLT5yZXFfZnJhbWVzX2Rlc2M7CisKKwlyZXFfZGVzYy0+V29yZHMgPSBjbWQtPmZyYW1lX3BoeXNfYWRkcjsKKwlyZXFfZGVzYy0+TUZBSW8uUmVxdWVzdEZsYWdzID0KKwkJKE1FR0FTQVNfUkVRX0RFU0NSSVBUX0ZMQUdTX01GQSA8PAorCQkgTUVHQVNBU19SRVFfREVTQ1JJUFRfRkxBR1NfVFlQRV9TSElGVCk7CisKKwkvKgorCSAqIGRpc2FibGUgdGhlIGludHIgYmVmb3JlIGZpcmluZyB0aGUgaW5pdCBmcmFtZQorCSAqLworCWluc3RhbmNlLT5pbnN0YW5jZXQtPmRpc2FibGVfaW50cihpbnN0YW5jZS0+cmVnX3NldCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgKDEwICogMTAwMCk7IGkgKz0gMjApIHsKKwkJaWYgKHJlYWRsKCZpbnN0YW5jZS0+cmVnX3NldC0+ZG9vcmJlbGwpICYgMSkKKwkJCW1zbGVlcCgyMCk7CisJCWVsc2UKKwkJCWJyZWFrOworCX0KKworCWluc3RhbmNlLT5pbnN0YW5jZXQtPmZpcmVfY21kKGluc3RhbmNlLCByZXFfZGVzYy0+dS5sb3csCisJCQkJICAgICAgcmVxX2Rlc2MtPnUuaGlnaCwgaW5zdGFuY2UtPnJlZ19zZXQpOworCisJd2FpdF9hbmRfcG9sbChpbnN0YW5jZSwgY21kKTsKKworCWZyYW1lX2hkciA9ICZjbWQtPmZyYW1lLT5oZHI7CisJaWYgKGZyYW1lX2hkci0+Y21kX3N0YXR1cyAhPSAwKSB7CisJCXJldCA9IDE7CisJCWdvdG8gZmFpbF9md19pbml0OworCX0KKwlwcmludGsoS0VSTl9FUlIgIm1lZ2FzYXM6SU9DIEluaXQgY21kIHN1Y2Nlc3NcbiIpOworCisJcmV0ID0gMDsKKworZmFpbF9md19pbml0OgorCW1lZ2FzYXNfcmV0dXJuX2NtZChpbnN0YW5jZSwgY21kKTsKKwlpZiAoSU9DSW5pdE1lc3NhZ2UpCisJCWRtYV9mcmVlX2NvaGVyZW50KCZpbnN0YW5jZS0+cGRldi0+ZGV2LAorCQkJCSAgc2l6ZW9mKHN0cnVjdCBNUEkyX0lPQ19JTklUX1JFUVVFU1QpLAorCQkJCSAgSU9DSW5pdE1lc3NhZ2UsIGlvY19pbml0X2hhbmRsZSk7CitmYWlsX2dldF9jbWQ6CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIG1lZ2FzYXNfcmV0dXJuX2NtZF9mb3Jfc21pZCAtCVJldHVybnMgYSBjbWRfZnVzaW9uIGZvciBhIFNNSUQKKyAqIEBpbnN0YW5jZToJCQkJQWRhcHRlciBzb2Z0IHN0YXRlCisgKgorICovCit2b2lkCittZWdhc2FzX3JldHVybl9jbWRfZm9yX3NtaWQoc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlLCB1MTYgc21pZCkKK3sKKwlzdHJ1Y3QgZnVzaW9uX2NvbnRleHQgKmZ1c2lvbjsKKwlzdHJ1Y3QgbWVnYXNhc19jbWRfZnVzaW9uICpjbWQ7CisKKwlmdXNpb24gPSBpbnN0YW5jZS0+Y3RybF9jb250ZXh0OworCWNtZCA9IGZ1c2lvbi0+Y21kX2xpc3Rbc21pZCAtIDFdOworCW1lZ2FzYXNfcmV0dXJuX2NtZF9mdXNpb24oaW5zdGFuY2UsIGNtZCk7Cit9CisKKy8qCisgKiBtZWdhc2FzX2dldF9sZF9tYXBfaW5mbyAtCVJldHVybnMgRlcncyBsZF9tYXAgc3RydWN0dXJlCisgKiBAaW5zdGFuY2U6CQkJCUFkYXB0ZXIgc29mdCBzdGF0ZQorICogQHBlbmQ6CQkJCVBlbmQgdGhlIGNvbW1hbmQgb3Igbm90CisgKiBJc3N1ZXMgYW4gaW50ZXJuYWwgY29tbWFuZCAoRENNRCkgdG8gZ2V0IHRoZSBGVydzIGNvbnRyb2xsZXIgUEQKKyAqIGxpc3Qgc3RydWN0dXJlLiAgVGhpcyBpbmZvcm1hdGlvbiBpcyBtYWlubHkgdXNlZCB0byBmaW5kIG91dCBTWVNURU0KKyAqIHN1cHBvcnRlZCBieSB0aGUgRlcuCisgKi8KK3N0YXRpYyBpbnQKK21lZ2FzYXNfZ2V0X2xkX21hcF9pbmZvKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSkKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgbWVnYXNhc19jbWQgKmNtZDsKKwlzdHJ1Y3QgbWVnYXNhc19kY21kX2ZyYW1lICpkY21kOworCXN0cnVjdCBNUl9GV19SQUlEX01BUF9BTEwgKmNpOworCWRtYV9hZGRyX3QgY2lfaCA9IDA7CisJdTMyIHNpemVfbWFwX2luZm87CisJc3RydWN0IGZ1c2lvbl9jb250ZXh0ICpmdXNpb247CisKKwljbWQgPSBtZWdhc2FzX2dldF9jbWQoaW5zdGFuY2UpOworCisJaWYgKCFjbWQpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIm1lZ2FzYXM6IEZhaWxlZCB0byBnZXQgY21kIGZvciBtYXAgaW5mby5cbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlmdXNpb24gPSBpbnN0YW5jZS0+Y3RybF9jb250ZXh0OworCisJaWYgKCFmdXNpb24pIHsKKwkJbWVnYXNhc19yZXR1cm5fY21kKGluc3RhbmNlLCBjbWQpOworCQlyZXR1cm4gMTsKKwl9CisKKwlkY21kID0gJmNtZC0+ZnJhbWUtPmRjbWQ7CisKKwlzaXplX21hcF9pbmZvID0gc2l6ZW9mKHN0cnVjdCBNUl9GV19SQUlEX01BUCkgKworCQkoc2l6ZW9mKHN0cnVjdCBNUl9MRF9TUEFOX01BUCkgKihNQVhfTE9HSUNBTF9EUklWRVMgLSAxKSk7CisKKwljaSA9IGZ1c2lvbi0+bGRfbWFwWyhpbnN0YW5jZS0+bWFwX2lkICYgMSldOworCWNpX2ggPSBmdXNpb24tPmxkX21hcF9waHlzWyhpbnN0YW5jZS0+bWFwX2lkICYgMSldOworCisJaWYgKCFjaSkgeworCQlwcmludGsoS0VSTl9ERUJVRyAiRmFpbGVkIHRvIGFsbG9jIG1lbSBmb3IgbGRfbWFwX2luZm9cbiIpOworCQltZWdhc2FzX3JldHVybl9jbWQoaW5zdGFuY2UsIGNtZCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW1lbXNldChjaSwgMCwgc2l6ZW9mKCpjaSkpOworCW1lbXNldChkY21kLT5tYm94LmIsIDAsIE1GSV9NQk9YX1NJWkUpOworCisJZGNtZC0+Y21kID0gTUZJX0NNRF9EQ01EOworCWRjbWQtPmNtZF9zdGF0dXMgPSAweEZGOworCWRjbWQtPnNnZV9jb3VudCA9IDE7CisJZGNtZC0+ZmxhZ3MgPSBNRklfRlJBTUVfRElSX1JFQUQ7CisJZGNtZC0+dGltZW91dCA9IDA7CisJZGNtZC0+cGFkXzAgPSAwOworCWRjbWQtPmRhdGFfeGZlcl9sZW4gPSBzaXplX21hcF9pbmZvOworCWRjbWQtPm9wY29kZSA9IE1SX0RDTURfTERfTUFQX0dFVF9JTkZPOworCWRjbWQtPnNnbC5zZ2UzMlswXS5waHlzX2FkZHIgPSBjaV9oOworCWRjbWQtPnNnbC5zZ2UzMlswXS5sZW5ndGggPSBzaXplX21hcF9pbmZvOworCisJaWYgKCFtZWdhc2FzX2lzc3VlX3BvbGxlZChpbnN0YW5jZSwgY21kKSkKKwkJcmV0ID0gMDsKKwllbHNlIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtZWdhc2FzOiBHZXQgTEQgTWFwIEluZm8gRmFpbGVkXG4iKTsKKwkJcmV0ID0gLTE7CisJfQorCisJbWVnYXNhc19yZXR1cm5fY21kKGluc3RhbmNlLCBjbWQpOworCisJcmV0dXJuIHJldDsKK30KKwordTgKK21lZ2FzYXNfZ2V0X21hcF9pbmZvKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSkKK3sKKwlzdHJ1Y3QgZnVzaW9uX2NvbnRleHQgKmZ1c2lvbiA9IGluc3RhbmNlLT5jdHJsX2NvbnRleHQ7CisKKwlmdXNpb24tPmZhc3RfcGF0aF9pbyA9IDA7CisJaWYgKCFtZWdhc2FzX2dldF9sZF9tYXBfaW5mbyhpbnN0YW5jZSkpIHsKKwkJaWYgKE1SX1ZhbGlkYXRlTWFwSW5mbyhmdXNpb24tPmxkX21hcFsoaW5zdGFuY2UtPm1hcF9pZCAmIDEpXSwKKwkJCQkgICAgICAgZnVzaW9uLT5sb2FkX2JhbGFuY2VfaW5mbykpIHsKKwkJCWZ1c2lvbi0+ZmFzdF9wYXRoX2lvID0gMTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCXJldHVybiAxOworfQorCisvKgorICogbWVnYXNhc19zeW5jX21hcF9pbmZvIC0JUmV0dXJucyBGVydzIGxkX21hcCBzdHJ1Y3R1cmUKKyAqIEBpbnN0YW5jZToJCQkJQWRhcHRlciBzb2Z0IHN0YXRlCisgKgorICogSXNzdWVzIGFuIGludGVybmFsIGNvbW1hbmQgKERDTUQpIHRvIGdldCB0aGUgRlcncyBjb250cm9sbGVyIFBECisgKiBsaXN0IHN0cnVjdHVyZS4gIFRoaXMgaW5mb3JtYXRpb24gaXMgbWFpbmx5IHVzZWQgdG8gZmluZCBvdXQgU1lTVEVNCisgKiBzdXBwb3J0ZWQgYnkgdGhlIEZXLgorICovCitpbnQKK21lZ2FzYXNfc3luY19tYXBfaW5mbyhzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UpCit7CisJaW50IHJldCA9IDAsIGk7CisJc3RydWN0IG1lZ2FzYXNfY21kICpjbWQ7CisJc3RydWN0IG1lZ2FzYXNfZGNtZF9mcmFtZSAqZGNtZDsKKwl1MzIgc2l6ZV9zeW5jX2luZm8sIG51bV9sZHM7CisJc3RydWN0IGZ1c2lvbl9jb250ZXh0ICpmdXNpb247CisJc3RydWN0IE1SX0xEX1RBUkdFVF9TWU5DICpjaSA9IE5VTEw7CisJc3RydWN0IE1SX0ZXX1JBSURfTUFQX0FMTCAqbWFwOworCXN0cnVjdCBNUl9MRF9SQUlEICAqcmFpZDsKKwlzdHJ1Y3QgTVJfTERfVEFSR0VUX1NZTkMgKmxkX3N5bmM7CisJZG1hX2FkZHJfdCBjaV9oID0gMDsKKwl1MzIgc2l6ZV9tYXBfaW5mbzsKKworCWNtZCA9IG1lZ2FzYXNfZ2V0X2NtZChpbnN0YW5jZSk7CisKKwlpZiAoIWNtZCkgeworCQlwcmludGsoS0VSTl9ERUJVRyAibWVnYXNhczogRmFpbGVkIHRvIGdldCBjbWQgZm9yIHN5bmMiCisJCSAgICAgICAiaW5mby5cbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlmdXNpb24gPSBpbnN0YW5jZS0+Y3RybF9jb250ZXh0OworCisJaWYgKCFmdXNpb24pIHsKKwkJbWVnYXNhc19yZXR1cm5fY21kKGluc3RhbmNlLCBjbWQpOworCQlyZXR1cm4gMTsKKwl9CisKKwltYXAgPSBmdXNpb24tPmxkX21hcFtpbnN0YW5jZS0+bWFwX2lkICYgMV07CisKKwludW1fbGRzID0gbWFwLT5yYWlkTWFwLmxkQ291bnQ7CisKKwlkY21kID0gJmNtZC0+ZnJhbWUtPmRjbWQ7CisKKwlzaXplX3N5bmNfaW5mbyA9IHNpemVvZihzdHJ1Y3QgTVJfTERfVEFSR0VUX1NZTkMpICpudW1fbGRzOworCisJbWVtc2V0KGRjbWQtPm1ib3guYiwgMCwgTUZJX01CT1hfU0laRSk7CisKKwljaSA9IChzdHJ1Y3QgTVJfTERfVEFSR0VUX1NZTkMgKikKKwkgIGZ1c2lvbi0+bGRfbWFwWyhpbnN0YW5jZS0+bWFwX2lkIC0gMSkgJiAxXTsKKwltZW1zZXQoY2ksIDAsIHNpemVvZihzdHJ1Y3QgTVJfRldfUkFJRF9NQVBfQUxMKSk7CisKKwljaV9oID0gZnVzaW9uLT5sZF9tYXBfcGh5c1soaW5zdGFuY2UtPm1hcF9pZCAtIDEpICYgMV07CisKKwlsZF9zeW5jID0gKHN0cnVjdCBNUl9MRF9UQVJHRVRfU1lOQyAqKWNpOworCisJZm9yIChpID0gMDsgaSA8IG51bV9sZHM7IGkrKywgbGRfc3luYysrKSB7CisJCXJhaWQgPSBNUl9MZFJhaWRHZXQoaSwgbWFwKTsKKwkJbGRfc3luYy0+dGFyZ2V0SWQgPSBNUl9HZXRMRFRndElkKGksIG1hcCk7CisJCWxkX3N5bmMtPnNlcU51bSA9IHJhaWQtPnNlcU51bTsKKwl9CisKKwlzaXplX21hcF9pbmZvID0gc2l6ZW9mKHN0cnVjdCBNUl9GV19SQUlEX01BUCkgKworCQkoc2l6ZW9mKHN0cnVjdCBNUl9MRF9TUEFOX01BUCkgKihNQVhfTE9HSUNBTF9EUklWRVMgLSAxKSk7CisKKwlkY21kLT5jbWQgPSBNRklfQ01EX0RDTUQ7CisJZGNtZC0+Y21kX3N0YXR1cyA9IDB4RkY7CisJZGNtZC0+c2dlX2NvdW50ID0gMTsKKwlkY21kLT5mbGFncyA9IE1GSV9GUkFNRV9ESVJfV1JJVEU7CisJZGNtZC0+dGltZW91dCA9IDA7CisJZGNtZC0+cGFkXzAgPSAwOworCWRjbWQtPmRhdGFfeGZlcl9sZW4gPSBzaXplX21hcF9pbmZvOworCWRjbWQtPm1ib3guYlswXSA9IG51bV9sZHM7CisJZGNtZC0+bWJveC5iWzFdID0gTUVHQVNBU19EQ01EX01CT1hfUEVORF9GTEFHOworCWRjbWQtPm9wY29kZSA9IE1SX0RDTURfTERfTUFQX0dFVF9JTkZPOworCWRjbWQtPnNnbC5zZ2UzMlswXS5waHlzX2FkZHIgPSBjaV9oOworCWRjbWQtPnNnbC5zZ2UzMlswXS5sZW5ndGggPSBzaXplX21hcF9pbmZvOworCisJaW5zdGFuY2UtPm1hcF91cGRhdGVfY21kID0gY21kOworCisJaW5zdGFuY2UtPmluc3RhbmNldC0+aXNzdWVfZGNtZChpbnN0YW5jZSwgY21kKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogbWVnYXNhc19pbml0X2FkYXB0ZXJfZnVzaW9uIC0JSW5pdGlhbGl6ZXMgdGhlIEZXCisgKiBAaW5zdGFuY2U6CQlBZGFwdGVyIHNvZnQgc3RhdGUKKyAqCisgKiBUaGlzIGlzIHRoZSBtYWluIGZ1bmN0aW9uIGZvciBpbml0aWFsaXppbmcgZmlybXdhcmUuCisgKi8KK3UzMgorbWVnYXNhc19pbml0X2FkYXB0ZXJfZnVzaW9uKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSkKK3sKKwlzdHJ1Y3QgbWVnYXNhc19yZWdpc3Rlcl9zZXQgX19pb21lbSAqcmVnX3NldDsKKwlzdHJ1Y3QgZnVzaW9uX2NvbnRleHQgKmZ1c2lvbjsKKwl1MzIgbWF4X2NtZDsKKwlpbnQgaSA9IDA7CisKKwlmdXNpb24gPSBpbnN0YW5jZS0+Y3RybF9jb250ZXh0OworCisJcmVnX3NldCA9IGluc3RhbmNlLT5yZWdfc2V0OworCisJLyoKKwkgKiBHZXQgdmFyaW91cyBvcGVyYXRpb25hbCBwYXJhbWV0ZXJzIGZyb20gc3RhdHVzIHJlZ2lzdGVyCisJICovCisJaW5zdGFuY2UtPm1heF9md19jbWRzID0KKwkJaW5zdGFuY2UtPmluc3RhbmNldC0+cmVhZF9md19zdGF0dXNfcmVnKHJlZ19zZXQpICYgMHgwMEZGRkY7CisJaW5zdGFuY2UtPm1heF9md19jbWRzID0gbWluKGluc3RhbmNlLT5tYXhfZndfY21kcywgKHUxNikxMDA4KTsKKworCS8qCisJICogUmVkdWNlIHRoZSBtYXggc3VwcG9ydGVkIGNtZHMgYnkgMS4gVGhpcyBpcyB0byBlbnN1cmUgdGhhdCB0aGUKKwkgKiByZXBseV9xX3N6ICgxIG1vcmUgdGhhbiB0aGUgbWF4IGNtZCB0aGF0IGRyaXZlciBtYXkgc2VuZCkKKwkgKiBkb2VzIG5vdCBleGNlZWQgbWF4IGNtZHMgdGhhdCB0aGUgRlcgY2FuIHN1cHBvcnQKKwkgKi8KKwlpbnN0YW5jZS0+bWF4X2Z3X2NtZHMgPSBpbnN0YW5jZS0+bWF4X2Z3X2NtZHMtMTsKKwkvKiBPbmx5IGludGVybmFsIGNtZHMgKERDTUQpIG5lZWQgdG8gaGF2ZSBNRkkgZnJhbWVzICovCisJaW5zdGFuY2UtPm1heF9tZmlfY21kcyA9IE1FR0FTQVNfSU5UX0NNRFM7CisKKwltYXhfY21kID0gaW5zdGFuY2UtPm1heF9md19jbWRzOworCisJZnVzaW9uLT5yZXBseV9xX2RlcHRoID0gKChtYXhfY21kICsgMSArIDE1KS8xNikqMTY7CisKKwlmdXNpb24tPnJlcXVlc3RfYWxsb2Nfc3ogPQorCQlzaXplb2YodW5pb24gTUVHQVNBU19SRVFVRVNUX0RFU0NSSVBUT1JfVU5JT04pICptYXhfY21kOworCWZ1c2lvbi0+cmVwbHlfYWxsb2Nfc3ogPSBzaXplb2YodW5pb24gTVBJMl9SRVBMWV9ERVNDUklQVE9SU19VTklPTikKKwkJKihmdXNpb24tPnJlcGx5X3FfZGVwdGgpOworCWZ1c2lvbi0+aW9fZnJhbWVzX2FsbG9jX3N6ID0gTUVHQV9NUEkyX1JBSURfREVGQVVMVF9JT19GUkFNRV9TSVpFICsKKwkJKE1FR0FfTVBJMl9SQUlEX0RFRkFVTFRfSU9fRlJBTUVfU0laRSAqCisJCSAobWF4X2NtZCArIDEpKTsgLyogRXh0cmEgMSBmb3IgU01JRCAwICovCisKKwlmdXNpb24tPm1heF9zZ2VfaW5fbWFpbl9tc2cgPQorCSAgKE1FR0FfTVBJMl9SQUlEX0RFRkFVTFRfSU9fRlJBTUVfU0laRSAtCisJICAgb2Zmc2V0b2Yoc3RydWN0IE1QSTJfUkFJRF9TQ1NJX0lPX1JFUVVFU1QsIFNHTCkpLzE2OworCisJZnVzaW9uLT5tYXhfc2dlX2luX2NoYWluID0KKwkJTUVHQVNBU19NQVhfU1pfQ0hBSU5fRlJBTUUgLyBzaXplb2YodW5pb24gTVBJMl9TR0VfSU9fVU5JT04pOworCisJaW5zdGFuY2UtPm1heF9udW1fc2dlID0gZnVzaW9uLT5tYXhfc2dlX2luX21haW5fbXNnICsKKwkJZnVzaW9uLT5tYXhfc2dlX2luX2NoYWluIC0gMjsKKworCS8qIFVzZWQgZm9yIHBhc3MgdGhydSBNRkkgZnJhbWUgKERDTUQpICovCisJZnVzaW9uLT5jaGFpbl9vZmZzZXRfbWZpX3B0aHJ1ID0KKwkJb2Zmc2V0b2Yoc3RydWN0IE1QSTJfUkFJRF9TQ1NJX0lPX1JFUVVFU1QsIFNHTCkvMTY7CisKKwlmdXNpb24tPmNoYWluX29mZnNldF9pb19yZXF1ZXN0ID0KKwkJKE1FR0FfTVBJMl9SQUlEX0RFRkFVTFRfSU9fRlJBTUVfU0laRSAtCisJCSBzaXplb2YodW5pb24gTVBJMl9TR0VfSU9fVU5JT04pKS8xNjsKKworCWZ1c2lvbi0+bGFzdF9yZXBseV9pZHggPSAwOworCisJLyoKKwkgKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIGRlc2NyaXB0b3JzCisJICogQ3JlYXRlIGEgcG9vbCBvZiBjb21tYW5kcworCSAqLworCWlmIChtZWdhc2FzX2FsbG9jX2NtZHMoaW5zdGFuY2UpKQorCQlnb3RvIGZhaWxfYWxsb2NfbWZpX2NtZHM7CisJaWYgKG1lZ2FzYXNfYWxsb2NfY21kc19mdXNpb24oaW5zdGFuY2UpKQorCQlnb3RvIGZhaWxfYWxsb2NfY21kczsKKworCWlmIChtZWdhc2FzX2lvY19pbml0X2Z1c2lvbihpbnN0YW5jZSkpCisJCWdvdG8gZmFpbF9pb2NfaW5pdDsKKworCWluc3RhbmNlLT5mbGFnX2llZWUgPSAxOworCisJZnVzaW9uLT5tYXBfc3ogPSAgc2l6ZW9mKHN0cnVjdCBNUl9GV19SQUlEX01BUCkgKworCSAgKHNpemVvZihzdHJ1Y3QgTVJfTERfU1BBTl9NQVApICooTUFYX0xPR0lDQUxfRFJJVkVTIC0gMSkpOworCisJZnVzaW9uLT5mYXN0X3BhdGhfaW8gPSAwOworCisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQlmdXNpb24tPmxkX21hcFtpXSA9IGRtYV9hbGxvY19jb2hlcmVudCgmaW5zdGFuY2UtPnBkZXYtPmRldiwKKwkJCQkJCSAgICAgICBmdXNpb24tPm1hcF9zeiwKKwkJCQkJCSAgICAgICAmZnVzaW9uLT5sZF9tYXBfcGh5c1tpXSwKKwkJCQkJCSAgICAgICBHRlBfS0VSTkVMKTsKKwkJaWYgKCFmdXNpb24tPmxkX21hcFtpXSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJtZWdhc2FzOiBDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5ICIKKwkJCSAgICAgICAiZm9yIG1hcCBpbmZvXG4iKTsKKwkJCWdvdG8gZmFpbF9tYXBfaW5mbzsKKwkJfQorCX0KKworCWlmICghbWVnYXNhc19nZXRfbWFwX2luZm8oaW5zdGFuY2UpKQorCQltZWdhc2FzX3N5bmNfbWFwX2luZm8oaW5zdGFuY2UpOworCisJcmV0dXJuIDA7CisKK2ZhaWxfYWxsb2NfY21kczoKK2ZhaWxfYWxsb2NfbWZpX2NtZHM6CitmYWlsX21hcF9pbmZvOgorCWlmIChpID09IDEpCisJCWRtYV9mcmVlX2NvaGVyZW50KCZpbnN0YW5jZS0+cGRldi0+ZGV2LCBmdXNpb24tPm1hcF9zeiwKKwkJCQkgIGZ1c2lvbi0+bGRfbWFwWzBdLCBmdXNpb24tPmxkX21hcF9waHlzWzBdKTsKK2ZhaWxfaW9jX2luaXQ6CisJcmV0dXJuIDE7Cit9CisKKy8qKgorICogbWVnYXNhc19maXJlX2NtZF9mdXNpb24gLQlTZW5kcyBjb21tYW5kIHRvIHRoZSBGVworICogQGZyYW1lX3BoeXNfYWRkciA6CQlQaHlzaWNhbCBhZGRyZXNzIG9mIGNtZAorICogQGZyYW1lX2NvdW50IDoJCU51bWJlciBvZiBmcmFtZXMgZm9yIHRoZSBjb21tYW5kCisgKiBAcmVncyA6CQkJTUZJIHJlZ2lzdGVyIHNldAorICovCit2b2lkCittZWdhc2FzX2ZpcmVfY21kX2Z1c2lvbihzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UsCisJCQlkbWFfYWRkcl90IHJlcV9kZXNjX2xvLAorCQkJdTMyIHJlcV9kZXNjX2hpLAorCQkJc3RydWN0IG1lZ2FzYXNfcmVnaXN0ZXJfc2V0IF9faW9tZW0gKnJlZ3MpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpbnN0YW5jZS0+aGJhX2xvY2ssIGZsYWdzKTsKKworCXdyaXRlbChyZXFfZGVzY19sbywKKwkgICAgICAgJihyZWdzKS0+aW5ib3VuZF9sb3dfcXVldWVfcG9ydCk7CisJd3JpdGVsKHJlcV9kZXNjX2hpLCAmKHJlZ3MpLT5pbmJvdW5kX2hpZ2hfcXVldWVfcG9ydCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5zdGFuY2UtPmhiYV9sb2NrLCBmbGFncyk7Cit9CisKKy8qKgorICogbWFwX2NtZF9zdGF0dXMgLQlNYXBzIEZXIGNtZCBzdGF0dXMgdG8gT1MgY21kIHN0YXR1cworICogQGNtZCA6CQlQb2ludGVyIHRvIGNtZAorICogQHN0YXR1cyA6CQlzdGF0dXMgb2YgY21kIHJldHVybmVkIGJ5IEZXCisgKiBAZXh0X3N0YXR1cyA6CWV4dCBzdGF0dXMgb2YgY21kIHJldHVybmVkIGJ5IEZXCisgKi8KKwordm9pZAorbWFwX2NtZF9zdGF0dXMoc3RydWN0IG1lZ2FzYXNfY21kX2Z1c2lvbiAqY21kLCB1OCBzdGF0dXMsIHU4IGV4dF9zdGF0dXMpCit7CisKKwlzd2l0Y2ggKHN0YXR1cykgeworCisJY2FzZSBNRklfU1RBVF9PSzoKKwkJY21kLT5zY21kLT5yZXN1bHQgPSBESURfT0sgPDwgMTY7CisJCWJyZWFrOworCisJY2FzZSBNRklfU1RBVF9TQ1NJX0lPX0ZBSUxFRDoKKwljYXNlIE1GSV9TVEFUX0xEX0lOSVRfSU5fUFJPR1JFU1M6CisJCWNtZC0+c2NtZC0+cmVzdWx0ID0gKERJRF9FUlJPUiA8PCAxNikgfCBleHRfc3RhdHVzOworCQlicmVhazsKKworCWNhc2UgTUZJX1NUQVRfU0NTSV9ET05FX1dJVEhfRVJST1I6CisKKwkJY21kLT5zY21kLT5yZXN1bHQgPSAoRElEX09LIDw8IDE2KSB8IGV4dF9zdGF0dXM7CisJCWlmIChleHRfc3RhdHVzID09IFNBTV9TVEFUX0NIRUNLX0NPTkRJVElPTikgeworCQkJbWVtc2V0KGNtZC0+c2NtZC0+c2Vuc2VfYnVmZmVyLCAwLAorCQkJICAgICAgIFNDU0lfU0VOU0VfQlVGRkVSU0laRSk7CisJCQltZW1jcHkoY21kLT5zY21kLT5zZW5zZV9idWZmZXIsIGNtZC0+c2Vuc2UsCisJCQkgICAgICAgU0NTSV9TRU5TRV9CVUZGRVJTSVpFKTsKKwkJCWNtZC0+c2NtZC0+cmVzdWx0IHw9IERSSVZFUl9TRU5TRSA8PCAyNDsKKwkJfQorCQlicmVhazsKKworCWNhc2UgTUZJX1NUQVRfTERfT0ZGTElORToKKwljYXNlIE1GSV9TVEFUX0RFVklDRV9OT1RfRk9VTkQ6CisJCWNtZC0+c2NtZC0+cmVzdWx0ID0gRElEX0JBRF9UQVJHRVQgPDwgMTY7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fREVCVUcgIm1lZ2FzYXM6IEZXIHN0YXR1cyAlI3hcbiIsIHN0YXR1cyk7CisJCWNtZC0+c2NtZC0+cmVzdWx0ID0gRElEX0VSUk9SIDw8IDE2OworCQlicmVhazsKKwl9Cit9CisKKy8qKgorICogbWVnYXNhc19tYWtlX3NnbF9mdXNpb24gLQlQcmVwYXJlcyAzMi1iaXQgU0dMCisgKiBAaW5zdGFuY2U6CQlBZGFwdGVyIHNvZnQgc3RhdGUKKyAqIEBzY3A6CQlTQ1NJIGNvbW1hbmQgZnJvbSB0aGUgbWlkLWxheWVyCisgKiBAc2dsX3B0cjoJCVNHTCB0byBiZSBmaWxsZWQgaW4KKyAqIEBjbWQ6CQljbWQgd2UgYXJlIHdvcmtpbmcgb24KKyAqCisgKiBJZiBzdWNjZXNzZnVsLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG51bWJlciBvZiBTRyBlbGVtZW50cy4KKyAqLworc3RhdGljIGludAorbWVnYXNhc19tYWtlX3NnbF9mdXNpb24oc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlLAorCQkJc3RydWN0IHNjc2lfY21uZCAqc2NwLAorCQkJc3RydWN0IE1QSTI1X0lFRUVfU0dFX0NIQUlONjQgKnNnbF9wdHIsCisJCQlzdHJ1Y3QgbWVnYXNhc19jbWRfZnVzaW9uICpjbWQpCit7CisJaW50IGksIHNnX3Byb2Nlc3NlZDsKKwlpbnQgc2dlX2NvdW50LCBzZ2VfaWR4OworCXN0cnVjdCBzY2F0dGVybGlzdCAqb3Nfc2dsOworCXN0cnVjdCBmdXNpb25fY29udGV4dCAqZnVzaW9uOworCisJZnVzaW9uID0gaW5zdGFuY2UtPmN0cmxfY29udGV4dDsKKworCWNtZC0+aW9fcmVxdWVzdC0+Q2hhaW5PZmZzZXQgPSAwOworCisJc2dlX2NvdW50ID0gc2NzaV9kbWFfbWFwKHNjcCk7CisKKwlCVUdfT04oc2dlX2NvdW50IDwgMCk7CisKKwlpZiAoc2dlX2NvdW50ID4gaW5zdGFuY2UtPm1heF9udW1fc2dlIHx8ICFzZ2VfY291bnQpCisJCXJldHVybiBzZ2VfY291bnQ7CisKKwlpZiAoc2dlX2NvdW50ID4gZnVzaW9uLT5tYXhfc2dlX2luX21haW5fbXNnKSB7CisJCS8qIE9uZSBlbGVtZW50IHRvIHN0b3JlIHRoZSBjaGFpbiBpbmZvICovCisJCXNnZV9pZHggPSBmdXNpb24tPm1heF9zZ2VfaW5fbWFpbl9tc2cgLSAxOworCX0gZWxzZQorCQlzZ2VfaWR4ID0gc2dlX2NvdW50OworCisJc2NzaV9mb3JfZWFjaF9zZyhzY3AsIG9zX3NnbCwgc2dlX2NvdW50LCBpKSB7CisJCXNnbF9wdHItPkxlbmd0aCA9IHNnX2RtYV9sZW4ob3Nfc2dsKTsKKwkJc2dsX3B0ci0+QWRkcmVzcyA9IHNnX2RtYV9hZGRyZXNzKG9zX3NnbCk7CisJCXNnbF9wdHItPkZsYWdzID0gMDsKKwkJc2dsX3B0cisrOworCisJCXNnX3Byb2Nlc3NlZCA9IGkgKyAxOworCisJCWlmICgoc2dfcHJvY2Vzc2VkID09ICAoZnVzaW9uLT5tYXhfc2dlX2luX21haW5fbXNnIC0gMSkpICYmCisJCSAgICAoc2dlX2NvdW50ID4gZnVzaW9uLT5tYXhfc2dlX2luX21haW5fbXNnKSkgeworCisJCQlzdHJ1Y3QgTVBJMjVfSUVFRV9TR0VfQ0hBSU42NCAqc2dfY2hhaW47CisJCQljbWQtPmlvX3JlcXVlc3QtPkNoYWluT2Zmc2V0ID0KKwkJCQlmdXNpb24tPmNoYWluX29mZnNldF9pb19yZXF1ZXN0OworCQkJc2dfY2hhaW4gPSBzZ2xfcHRyOworCQkJLyogUHJlcGFyZSBjaGFpbiBlbGVtZW50ICovCisJCQlzZ19jaGFpbi0+TmV4dENoYWluT2Zmc2V0ID0gMDsKKwkJCXNnX2NoYWluLT5GbGFncyA9IChJRUVFX1NHRV9GTEFHU19DSEFJTl9FTEVNRU5UIHwKKwkJCQkJICAgTVBJMl9JRUVFX1NHRV9GTEFHU19JT0NQTEJOVEFfQUREUik7CisJCQlzZ19jaGFpbi0+TGVuZ3RoID0gIChzaXplb2YodW5pb24gTVBJMl9TR0VfSU9fVU5JT04pCisJCQkJCSAgICAgKihzZ2VfY291bnQgLSBzZ19wcm9jZXNzZWQpKTsKKwkJCXNnX2NoYWluLT5BZGRyZXNzID0gY21kLT5zZ19mcmFtZV9waHlzX2FkZHI7CisKKwkJCXNnbF9wdHIgPQorCQkJICAoc3RydWN0IE1QSTI1X0lFRUVfU0dFX0NIQUlONjQgKiljbWQtPnNnX2ZyYW1lOworCQl9CisJfQorCisJcmV0dXJuIHNnZV9jb3VudDsKK30KKworLyoqCisgKiBtZWdhc2FzX3NldF9wZF9sYmEgLQlTZXRzIFBEIExCQQorICogQGNkYjoJCUNEQgorICogQGNkYl9sZW46CQljZGIgbGVuZ3RoCisgKiBAc3RhcnRfYmxrOgkJU3RhcnQgYmxvY2sgb2YgSU8KKyAqCisgKiBVc2VkIHRvIHNldCB0aGUgUEQgTEJBIGluIENEQiBmb3IgRlAgSU9zCisgKi8KK3ZvaWQKK21lZ2FzYXNfc2V0X3BkX2xiYShzdHJ1Y3QgTVBJMl9SQUlEX1NDU0lfSU9fUkVRVUVTVCAqaW9fcmVxdWVzdCwgdTggY2RiX2xlbiwKKwkJICAgc3RydWN0IElPX1JFUVVFU1RfSU5GTyAqaW9faW5mbywgc3RydWN0IHNjc2lfY21uZCAqc2NwLAorCQkgICBzdHJ1Y3QgTVJfRldfUkFJRF9NQVBfQUxMICpsb2NhbF9tYXBfcHRyLCB1MzIgcmVmX3RhZykKK3sKKwlzdHJ1Y3QgTVJfTERfUkFJRCAqcmFpZDsKKwl1MzIgbGQ7CisJdTY0IHN0YXJ0X2JsayA9IGlvX2luZm8tPnBkQmxvY2s7CisJdTggKmNkYiA9IGlvX3JlcXVlc3QtPkNEQi5DREIzMjsKKwl1MzIgbnVtX2Jsb2NrcyA9IGlvX2luZm8tPm51bUJsb2NrczsKKwl1OCBvcGNvZGUsIGZsYWd2YWxzLCBncm91cG51bSwgY29udHJvbDsKKworCS8qIENoZWNrIGlmIFQxMCBQSSAoRElGKSBpcyBlbmFibGVkIGZvciB0aGlzIExEICovCisJbGQgPSBNUl9UYXJnZXRJZFRvTGRHZXQoaW9faW5mby0+bGRUZ3RJZCwgbG9jYWxfbWFwX3B0cik7CisJcmFpZCA9IE1SX0xkUmFpZEdldChsZCwgbG9jYWxfbWFwX3B0cik7CisJaWYgKHJhaWQtPmNhcGFiaWxpdHkubGRQaU1vZGUgPT0gTVJfUFJPVF9JTkZPX1RZUEVfQ09OVFJPTExFUikgeworCQltZW1zZXQoY2RiLCAwLCBzaXplb2YoaW9fcmVxdWVzdC0+Q0RCLkNEQjMyKSk7CisJCWNkYlswXSA9ICBNRUdBU0FTX1NDU0lfVkFSSUFCTEVfTEVOR1RIX0NNRDsKKwkJY2RiWzddID0gIE1FR0FTQVNfU0NTSV9BRERMX0NEQl9MRU47CisKKwkJaWYgKHNjcC0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gUENJX0RNQV9GUk9NREVWSUNFKQorCQkJY2RiWzldID0gTUVHQVNBU19TQ1NJX1NFUlZJQ0VfQUNUSU9OX1JFQUQzMjsKKwkJZWxzZQorCQkJY2RiWzldID0gTUVHQVNBU19TQ1NJX1NFUlZJQ0VfQUNUSU9OX1dSSVRFMzI7CisJCWNkYlsxMF0gPSBNRUdBU0FTX1JEX1dSX1BST1RFQ1RfQ0hFQ0tfQUxMOworCisJCS8qIExCQSAqLworCQljZGJbMTJdID0gKHU4KSgoc3RhcnRfYmxrID4+IDU2KSAmIDB4ZmYpOworCQljZGJbMTNdID0gKHU4KSgoc3RhcnRfYmxrID4+IDQ4KSAmIDB4ZmYpOworCQljZGJbMTRdID0gKHU4KSgoc3RhcnRfYmxrID4+IDQwKSAmIDB4ZmYpOworCQljZGJbMTVdID0gKHU4KSgoc3RhcnRfYmxrID4+IDMyKSAmIDB4ZmYpOworCQljZGJbMTZdID0gKHU4KSgoc3RhcnRfYmxrID4+IDI0KSAmIDB4ZmYpOworCQljZGJbMTddID0gKHU4KSgoc3RhcnRfYmxrID4+IDE2KSAmIDB4ZmYpOworCQljZGJbMThdID0gKHU4KSgoc3RhcnRfYmxrID4+IDgpICYgMHhmZik7CisJCWNkYlsxOV0gPSAodTgpKHN0YXJ0X2JsayAmIDB4ZmYpOworCisJCS8qIExvZ2ljYWwgYmxvY2sgcmVmZXJlbmNlIHRhZyAqLworCQlpb19yZXF1ZXN0LT5DREIuRUVEUDMyLlByaW1hcnlSZWZlcmVuY2VUYWcgPQorCQkJY3B1X3RvX2JlMzIocmVmX3RhZyk7CisJCWlvX3JlcXVlc3QtPkNEQi5FRURQMzIuUHJpbWFyeUFwcGxpY2F0aW9uVGFnTWFzayA9IDB4ZmZmZjsKKworCQlpb19yZXF1ZXN0LT5EYXRhTGVuZ3RoID0gbnVtX2Jsb2NrcyAqIDUxMjsKKwkJaW9fcmVxdWVzdC0+SW9GbGFncyA9IDMyOyAvKiBTcGVjaWZ5IDMyLWJ5dGUgY2RiICovCisKKwkJLyogVHJhbnNmZXIgbGVuZ3RoICovCisJCWNkYlsyOF0gPSAodTgpKChudW1fYmxvY2tzID4+IDI0KSAmIDB4ZmYpOworCQljZGJbMjldID0gKHU4KSgobnVtX2Jsb2NrcyA+PiAxNikgJiAweGZmKTsKKwkJY2RiWzMwXSA9ICh1OCkoKG51bV9ibG9ja3MgPj4gOCkgJiAweGZmKTsKKwkJY2RiWzMxXSA9ICh1OCkobnVtX2Jsb2NrcyAmIDB4ZmYpOworCisJCS8qIHNldCBTQ1NJIElPIEVFRFBGbGFncyAqLworCQlpZiAoc2NwLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBQQ0lfRE1BX0ZST01ERVZJQ0UpIHsKKwkJCWlvX3JlcXVlc3QtPkVFRFBGbGFncyA9CisJCQkJTVBJMl9TQ1NJSU9fRUVEUEZMQUdTX0lOQ19QUklfUkVGVEFHICB8CisJCQkJTVBJMl9TQ1NJSU9fRUVEUEZMQUdTX0NIRUNLX1JFRlRBRyB8CisJCQkJTVBJMl9TQ1NJSU9fRUVEUEZMQUdTX0NIRUNLX1JFTU9WRV9PUCB8CisJCQkJTVBJMl9TQ1NJSU9fRUVEUEZMQUdTX0NIRUNLX0FQUFRBRyB8CisJCQkJTVBJMl9TQ1NJSU9fRUVEUEZMQUdTX0NIRUNLX0dVQVJEOworCQl9IGVsc2UgeworCQkJaW9fcmVxdWVzdC0+RUVEUEZsYWdzID0KKwkJCQlNUEkyX1NDU0lJT19FRURQRkxBR1NfSU5DX1BSSV9SRUZUQUcgfAorCQkJCU1QSTJfU0NTSUlPX0VFRFBGTEFHU19JTlNFUlRfT1A7CisJCX0KKwkJaW9fcmVxdWVzdC0+Q29udHJvbCB8PSAoMHg0IDw8IDI2KTsKKwkJaW9fcmVxdWVzdC0+RUVEUEJsb2NrU2l6ZSA9IE1FR0FTQVNfRUVEUEJMT0NLU0laRTsKKwl9IGVsc2UgeworCQkvKiBTb21lIGRyaXZlcyBkb24ndCBzdXBwb3J0IDE2LzEyIGJ5dGUgQ0RCJ3MsIGNvbnZlcnQgdG8gMTAgKi8KKwkJaWYgKCgoY2RiX2xlbiA9PSAxMikgfHwgKGNkYl9sZW4gPT0gMTYpKSAmJgorCQkgICAgKHN0YXJ0X2JsayA8PSAweGZmZmZmZmZmKSkgeworCQkJaWYgKGNkYl9sZW4gPT0gMTYpIHsKKwkJCQlvcGNvZGUgPSBjZGJbMF0gPT0gUkVBRF8xNiA/IFJFQURfMTAgOiBXUklURV8xMDsKKwkJCQlmbGFndmFscyA9IGNkYlsxXTsKKwkJCQlncm91cG51bSA9IGNkYlsxNF07CisJCQkJY29udHJvbCA9IGNkYlsxNV07CisJCQl9IGVsc2UgeworCQkJCW9wY29kZSA9IGNkYlswXSA9PSBSRUFEXzEyID8gUkVBRF8xMCA6IFdSSVRFXzEwOworCQkJCWZsYWd2YWxzID0gY2RiWzFdOworCQkJCWdyb3VwbnVtID0gY2RiWzEwXTsKKwkJCQljb250cm9sID0gY2RiWzExXTsKKwkJCX0KKworCQkJbWVtc2V0KGNkYiwgMCwgc2l6ZW9mKGlvX3JlcXVlc3QtPkNEQi5DREIzMikpOworCisJCQljZGJbMF0gPSBvcGNvZGU7CisJCQljZGJbMV0gPSBmbGFndmFsczsKKwkJCWNkYls2XSA9IGdyb3VwbnVtOworCQkJY2RiWzldID0gY29udHJvbDsKKworCQkJLyogVHJhbnNmZXIgbGVuZ3RoICovCisJCQljZGJbOF0gPSAodTgpKG51bV9ibG9ja3MgJiAweGZmKTsKKwkJCWNkYls3XSA9ICh1OCkoKG51bV9ibG9ja3MgPj4gOCkgJiAweGZmKTsKKworCQkJY2RiX2xlbiA9IDEwOworCQl9CisKKwkJLyogTm9ybWFsIGNhc2UsIGp1c3QgbG9hZCBMQkEgaGVyZSAqLworCQlzd2l0Y2ggKGNkYl9sZW4pIHsKKwkJY2FzZSA2OgorCQl7CisJCQl1OCB2YWwgPSBjZGJbMV0gJiAweEUwOworCQkJY2RiWzNdID0gKHU4KShzdGFydF9ibGsgJiAweGZmKTsKKwkJCWNkYlsyXSA9ICh1OCkoKHN0YXJ0X2JsayA+PiA4KSAmIDB4ZmYpOworCQkJY2RiWzFdID0gdmFsIHwgKCh1OCkoc3RhcnRfYmxrID4+IDE2KSAmIDB4MWYpOworCQkJYnJlYWs7CisJCX0KKwkJY2FzZSAxMDoKKwkJCWNkYls1XSA9ICh1OCkoc3RhcnRfYmxrICYgMHhmZik7CisJCQljZGJbNF0gPSAodTgpKChzdGFydF9ibGsgPj4gOCkgJiAweGZmKTsKKwkJCWNkYlszXSA9ICh1OCkoKHN0YXJ0X2JsayA+PiAxNikgJiAweGZmKTsKKwkJCWNkYlsyXSA9ICh1OCkoKHN0YXJ0X2JsayA+PiAyNCkgJiAweGZmKTsKKwkJCWJyZWFrOworCQljYXNlIDEyOgorCQkJY2RiWzVdICAgID0gKHU4KShzdGFydF9ibGsgJiAweGZmKTsKKwkJCWNkYls0XSAgICA9ICh1OCkoKHN0YXJ0X2JsayA+PiA4KSAmIDB4ZmYpOworCQkJY2RiWzNdICAgID0gKHU4KSgoc3RhcnRfYmxrID4+IDE2KSAmIDB4ZmYpOworCQkJY2RiWzJdICAgID0gKHU4KSgoc3RhcnRfYmxrID4+IDI0KSAmIDB4ZmYpOworCQkJYnJlYWs7CisJCWNhc2UgMTY6CisJCQljZGJbOV0gICAgPSAodTgpKHN0YXJ0X2JsayAmIDB4ZmYpOworCQkJY2RiWzhdICAgID0gKHU4KSgoc3RhcnRfYmxrID4+IDgpICYgMHhmZik7CisJCQljZGJbN10gICAgPSAodTgpKChzdGFydF9ibGsgPj4gMTYpICYgMHhmZik7CisJCQljZGJbNl0gICAgPSAodTgpKChzdGFydF9ibGsgPj4gMjQpICYgMHhmZik7CisJCQljZGJbNV0gICAgPSAodTgpKChzdGFydF9ibGsgPj4gMzIpICYgMHhmZik7CisJCQljZGJbNF0gICAgPSAodTgpKChzdGFydF9ibGsgPj4gNDApICYgMHhmZik7CisJCQljZGJbM10gICAgPSAodTgpKChzdGFydF9ibGsgPj4gNDgpICYgMHhmZik7CisJCQljZGJbMl0gICAgPSAodTgpKChzdGFydF9ibGsgPj4gNTYpICYgMHhmZik7CisJCQlicmVhazsKKwkJfQorCX0KK30KKworLyoqCisgKiBtZWdhc2FzX2J1aWxkX2xkaW9fZnVzaW9uIC0JUHJlcGFyZXMgSU9zIHRvIGRldmljZXMKKyAqIEBpbnN0YW5jZToJCUFkYXB0ZXIgc29mdCBzdGF0ZQorICogQHNjcDoJCVNDU0kgY29tbWFuZAorICogQGNtZDoJCUNvbW1hbmQgdG8gYmUgcHJlcGFyZWQKKyAqCisgKiBQcmVwYXJlcyB0aGUgaW9fcmVxdWVzdCBhbmQgY2hhaW4gZWxlbWVudHMgKHNnX2ZyYW1lKSBmb3IgSU8KKyAqIFRoZSBJTyBjYW4gYmUgZm9yIFBEIChGYXN0IFBhdGgpIG9yIExECisgKi8KK3ZvaWQKK21lZ2FzYXNfYnVpbGRfbGRpb19mdXNpb24oc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlLAorCQkJICBzdHJ1Y3Qgc2NzaV9jbW5kICpzY3AsCisJCQkgIHN0cnVjdCBtZWdhc2FzX2NtZF9mdXNpb24gKmNtZCkKK3sKKwl1OCBmcF9wb3NzaWJsZTsKKwl1MzIgc3RhcnRfbGJhX2xvLCBzdGFydF9sYmFfaGksIGRldmljZV9pZDsKKwlzdHJ1Y3QgTVBJMl9SQUlEX1NDU0lfSU9fUkVRVUVTVCAqaW9fcmVxdWVzdDsKKwl1bmlvbiBNRUdBU0FTX1JFUVVFU1RfREVTQ1JJUFRPUl9VTklPTiAqcmVxX2Rlc2M7CisJc3RydWN0IElPX1JFUVVFU1RfSU5GTyBpb19pbmZvOworCXN0cnVjdCBmdXNpb25fY29udGV4dCAqZnVzaW9uOworCXN0cnVjdCBNUl9GV19SQUlEX01BUF9BTEwgKmxvY2FsX21hcF9wdHI7CisKKwlkZXZpY2VfaWQgPSBNRUdBU0FTX0RFVl9JTkRFWChpbnN0YW5jZSwgc2NwKTsKKworCWZ1c2lvbiA9IGluc3RhbmNlLT5jdHJsX2NvbnRleHQ7CisKKwlpb19yZXF1ZXN0ID0gY21kLT5pb19yZXF1ZXN0OworCWlvX3JlcXVlc3QtPlJhaWRDb250ZXh0LlZpcnR1YWxEaXNrVGd0SWQgPSBkZXZpY2VfaWQ7CisJaW9fcmVxdWVzdC0+UmFpZENvbnRleHQuc3RhdHVzID0gMDsKKwlpb19yZXF1ZXN0LT5SYWlkQ29udGV4dC5leFN0YXR1cyA9IDA7CisKKwlyZXFfZGVzYyA9ICh1bmlvbiBNRUdBU0FTX1JFUVVFU1RfREVTQ1JJUFRPUl9VTklPTiAqKWNtZC0+cmVxdWVzdF9kZXNjOworCisJc3RhcnRfbGJhX2xvID0gMDsKKwlzdGFydF9sYmFfaGkgPSAwOworCWZwX3Bvc3NpYmxlID0gMDsKKworCS8qCisJICogNi1ieXRlIFJFQUQoMHgwOCkgb3IgV1JJVEUoMHgwQSkgY2RiCisJICovCisJaWYgKHNjcC0+Y21kX2xlbiA9PSA2KSB7CisJCWlvX3JlcXVlc3QtPkRhdGFMZW5ndGggPSAodTMyKSBzY3AtPmNtbmRbNF07CisJCXN0YXJ0X2xiYV9sbyA9ICgodTMyKSBzY3AtPmNtbmRbMV0gPDwgMTYpIHwKKwkJCSgodTMyKSBzY3AtPmNtbmRbMl0gPDwgOCkgfCAodTMyKSBzY3AtPmNtbmRbM107CisKKwkJc3RhcnRfbGJhX2xvICY9IDB4MUZGRkZGOworCX0KKworCS8qCisJICogMTAtYnl0ZSBSRUFEKDB4MjgpIG9yIFdSSVRFKDB4MkEpIGNkYgorCSAqLworCWVsc2UgaWYgKHNjcC0+Y21kX2xlbiA9PSAxMCkgeworCQlpb19yZXF1ZXN0LT5EYXRhTGVuZ3RoID0gKHUzMikgc2NwLT5jbW5kWzhdIHwKKwkJCSgodTMyKSBzY3AtPmNtbmRbN10gPDwgOCk7CisJCXN0YXJ0X2xiYV9sbyA9ICgodTMyKSBzY3AtPmNtbmRbMl0gPDwgMjQpIHwKKwkJCSgodTMyKSBzY3AtPmNtbmRbM10gPDwgMTYpIHwKKwkJCSgodTMyKSBzY3AtPmNtbmRbNF0gPDwgOCkgfCAodTMyKSBzY3AtPmNtbmRbNV07CisJfQorCisJLyoKKwkgKiAxMi1ieXRlIFJFQUQoMHhBOCkgb3IgV1JJVEUoMHhBQSkgY2RiCisJICovCisJZWxzZSBpZiAoc2NwLT5jbWRfbGVuID09IDEyKSB7CisJCWlvX3JlcXVlc3QtPkRhdGFMZW5ndGggPSAoKHUzMikgc2NwLT5jbW5kWzZdIDw8IDI0KSB8CisJCQkoKHUzMikgc2NwLT5jbW5kWzddIDw8IDE2KSB8CisJCQkoKHUzMikgc2NwLT5jbW5kWzhdIDw8IDgpIHwgKHUzMikgc2NwLT5jbW5kWzldOworCQlzdGFydF9sYmFfbG8gPSAoKHUzMikgc2NwLT5jbW5kWzJdIDw8IDI0KSB8CisJCQkoKHUzMikgc2NwLT5jbW5kWzNdIDw8IDE2KSB8CisJCQkoKHUzMikgc2NwLT5jbW5kWzRdIDw8IDgpIHwgKHUzMikgc2NwLT5jbW5kWzVdOworCX0KKworCS8qCisJICogMTYtYnl0ZSBSRUFEKDB4ODgpIG9yIFdSSVRFKDB4OEEpIGNkYgorCSAqLworCWVsc2UgaWYgKHNjcC0+Y21kX2xlbiA9PSAxNikgeworCQlpb19yZXF1ZXN0LT5EYXRhTGVuZ3RoID0gKCh1MzIpIHNjcC0+Y21uZFsxMF0gPDwgMjQpIHwKKwkJCSgodTMyKSBzY3AtPmNtbmRbMTFdIDw8IDE2KSB8CisJCQkoKHUzMikgc2NwLT5jbW5kWzEyXSA8PCA4KSB8ICh1MzIpIHNjcC0+Y21uZFsxM107CisJCXN0YXJ0X2xiYV9sbyA9ICgodTMyKSBzY3AtPmNtbmRbNl0gPDwgMjQpIHwKKwkJCSgodTMyKSBzY3AtPmNtbmRbN10gPDwgMTYpIHwKKwkJCSgodTMyKSBzY3AtPmNtbmRbOF0gPDwgOCkgfCAodTMyKSBzY3AtPmNtbmRbOV07CisKKwkJc3RhcnRfbGJhX2hpID0gKCh1MzIpIHNjcC0+Y21uZFsyXSA8PCAyNCkgfAorCQkJKCh1MzIpIHNjcC0+Y21uZFszXSA8PCAxNikgfAorCQkJKCh1MzIpIHNjcC0+Y21uZFs0XSA8PCA4KSB8ICh1MzIpIHNjcC0+Y21uZFs1XTsKKwl9CisKKwltZW1zZXQoJmlvX2luZm8sIDAsIHNpemVvZihzdHJ1Y3QgSU9fUkVRVUVTVF9JTkZPKSk7CisJaW9faW5mby5sZFN0YXJ0QmxvY2sgPSAoKHU2NClzdGFydF9sYmFfaGkgPDwgMzIpIHwgc3RhcnRfbGJhX2xvOworCWlvX2luZm8ubnVtQmxvY2tzID0gaW9fcmVxdWVzdC0+RGF0YUxlbmd0aDsKKwlpb19pbmZvLmxkVGd0SWQgPSBkZXZpY2VfaWQ7CisKKwlpZiAoc2NwLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBQQ0lfRE1BX0ZST01ERVZJQ0UpCisJCWlvX2luZm8uaXNSZWFkID0gMTsKKworCWxvY2FsX21hcF9wdHIgPSBmdXNpb24tPmxkX21hcFsoaW5zdGFuY2UtPm1hcF9pZCAmIDEpXTsKKworCWlmICgoTVJfVGFyZ2V0SWRUb0xkR2V0KGRldmljZV9pZCwgbG9jYWxfbWFwX3B0cikgPj0KKwkgICAgIE1BWF9MT0dJQ0FMX0RSSVZFUykgfHwgKCFmdXNpb24tPmZhc3RfcGF0aF9pbykpIHsKKwkJaW9fcmVxdWVzdC0+UmFpZENvbnRleHQucmVnTG9ja0ZsYWdzICA9IDA7CisJCWZwX3Bvc3NpYmxlID0gMDsKKwl9IGVsc2UgeworCQlpZiAoTVJfQnVpbGRSYWlkQ29udGV4dCgmaW9faW5mbywgJmlvX3JlcXVlc3QtPlJhaWRDb250ZXh0LAorCQkJCQlsb2NhbF9tYXBfcHRyKSkKKwkJCWZwX3Bvc3NpYmxlID0gaW9faW5mby5mcE9rRm9ySW87CisJfQorCisJaWYgKGZwX3Bvc3NpYmxlKSB7CisJCW1lZ2FzYXNfc2V0X3BkX2xiYShpb19yZXF1ZXN0LCBzY3AtPmNtZF9sZW4sICZpb19pbmZvLCBzY3AsCisJCQkJICAgbG9jYWxfbWFwX3B0ciwgc3RhcnRfbGJhX2xvKTsKKwkJaW9fcmVxdWVzdC0+RGF0YUxlbmd0aCA9IHNjc2lfYnVmZmxlbihzY3ApOworCQlpb19yZXF1ZXN0LT5GdW5jdGlvbiA9IE1QSTJfRlVOQ1RJT05fU0NTSV9JT19SRVFVRVNUOworCQljbWQtPnJlcXVlc3RfZGVzYy0+U0NTSUlPLlJlcXVlc3RGbGFncyA9CisJCQkoTVBJMl9SRVFfREVTQ1JJUFRfRkxBR1NfSElHSF9QUklPUklUWQorCQkJIDw8IE1FR0FTQVNfUkVRX0RFU0NSSVBUX0ZMQUdTX1RZUEVfU0hJRlQpOworCQlpZiAoKGZ1c2lvbi0+bG9hZF9iYWxhbmNlX2luZm9bZGV2aWNlX2lkXS5sb2FkQmFsYW5jZUZsYWcpICYmCisJCSAgICAoaW9faW5mby5pc1JlYWQpKSB7CisJCQlpb19pbmZvLmRldkhhbmRsZSA9CisJCQkJZ2V0X3VwZGF0ZWRfZGV2X2hhbmRsZSgKKwkJCQkJJmZ1c2lvbi0+bG9hZF9iYWxhbmNlX2luZm9bZGV2aWNlX2lkXSwKKwkJCQkJJmlvX2luZm8pOworCQkJc2NwLT5TQ3AuU3RhdHVzIHw9IE1FR0FTQVNfTE9BRF9CQUxBTkNFX0ZMQUc7CisJCX0gZWxzZQorCQkJc2NwLT5TQ3AuU3RhdHVzICY9IH5NRUdBU0FTX0xPQURfQkFMQU5DRV9GTEFHOworCQljbWQtPnJlcXVlc3RfZGVzYy0+U0NTSUlPLkRldkhhbmRsZSA9IGlvX2luZm8uZGV2SGFuZGxlOworCQlpb19yZXF1ZXN0LT5EZXZIYW5kbGUgPSBpb19pbmZvLmRldkhhbmRsZTsKKwl9IGVsc2UgeworCQlpb19yZXF1ZXN0LT5SYWlkQ29udGV4dC50aW1lb3V0VmFsdWUgPQorCQkJbG9jYWxfbWFwX3B0ci0+cmFpZE1hcC5mcFBkSW9UaW1lb3V0U2VjOworCQlpb19yZXF1ZXN0LT5GdW5jdGlvbiA9IE1FR0FTQVNfTVBJMl9GVU5DVElPTl9MRF9JT19SRVFVRVNUOworCQlpb19yZXF1ZXN0LT5EZXZIYW5kbGUgPSBkZXZpY2VfaWQ7CisJCWNtZC0+cmVxdWVzdF9kZXNjLT5TQ1NJSU8uUmVxdWVzdEZsYWdzID0KKwkJCShNRUdBU0FTX1JFUV9ERVNDUklQVF9GTEFHU19MRF9JTworCQkJIDw8IE1FR0FTQVNfUkVRX0RFU0NSSVBUX0ZMQUdTX1RZUEVfU0hJRlQpOworCX0gLyogTm90IEZQICovCit9CisKKy8qKgorICogbWVnYXNhc19idWlsZF9kY2RiX2Z1c2lvbiAtCVByZXBhcmVzIElPcyB0byBkZXZpY2VzCisgKiBAaW5zdGFuY2U6CQlBZGFwdGVyIHNvZnQgc3RhdGUKKyAqIEBzY3A6CQlTQ1NJIGNvbW1hbmQKKyAqIEBjbWQ6CQlDb21tYW5kIHRvIGJlIHByZXBhcmVkCisgKgorICogUHJlcGFyZXMgdGhlIGlvX3JlcXVlc3QgZnJhbWUgZm9yIG5vbi1pbyBjbWRzCisgKi8KK3N0YXRpYyB2b2lkCittZWdhc2FzX2J1aWxkX2RjZGJfZnVzaW9uKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSwKKwkJCSAgc3RydWN0IHNjc2lfY21uZCAqc2NtZCwKKwkJCSAgc3RydWN0IG1lZ2FzYXNfY21kX2Z1c2lvbiAqY21kKQoreworCXUzMiBkZXZpY2VfaWQ7CisJc3RydWN0IE1QSTJfUkFJRF9TQ1NJX0lPX1JFUVVFU1QgKmlvX3JlcXVlc3Q7CisJdTE2IHBkX2luZGV4ID0gMDsKKwlzdHJ1Y3QgTVJfRldfUkFJRF9NQVBfQUxMICpsb2NhbF9tYXBfcHRyOworCXN0cnVjdCBmdXNpb25fY29udGV4dCAqZnVzaW9uID0gaW5zdGFuY2UtPmN0cmxfY29udGV4dDsKKworCWlvX3JlcXVlc3QgPSBjbWQtPmlvX3JlcXVlc3Q7CisJZGV2aWNlX2lkID0gTUVHQVNBU19ERVZfSU5ERVgoaW5zdGFuY2UsIHNjbWQpOworCXBkX2luZGV4ID0gKHNjbWQtPmRldmljZS0+Y2hhbm5lbCAqIE1FR0FTQVNfTUFYX0RFVl9QRVJfQ0hBTk5FTCkKKwkJK3NjbWQtPmRldmljZS0+aWQ7CisJbG9jYWxfbWFwX3B0ciA9IGZ1c2lvbi0+bGRfbWFwWyhpbnN0YW5jZS0+bWFwX2lkICYgMSldOworCisJLyogQ2hlY2sgaWYgdGhpcyBpcyBhIHN5c3RlbSBQRCBJL08gKi8KKwlpZiAoKGluc3RhbmNlLT5wZF9saXN0W3BkX2luZGV4XS5kcml2ZVN0YXRlID09IE1SX1BEX1NUQVRFX1NZU1RFTSkgJiYKKwkgICAgKGluc3RhbmNlLT5wZF9saXN0W3BkX2luZGV4XS5kcml2ZVR5cGUgPT0gVFlQRV9ESVNLKSkgeworCQlpb19yZXF1ZXN0LT5GdW5jdGlvbiA9IDA7CisJCWlvX3JlcXVlc3QtPkRldkhhbmRsZSA9CisJCQlsb2NhbF9tYXBfcHRyLT5yYWlkTWFwLmRldkhuZGxJbmZvW2RldmljZV9pZF0uY3VyRGV2SGRsOworCQlpb19yZXF1ZXN0LT5SYWlkQ29udGV4dC50aW1lb3V0VmFsdWUgPQorCQkJbG9jYWxfbWFwX3B0ci0+cmFpZE1hcC5mcFBkSW9UaW1lb3V0U2VjOworCQlpb19yZXF1ZXN0LT5SYWlkQ29udGV4dC5yZWdMb2NrRmxhZ3MgPSAwOworCQlpb19yZXF1ZXN0LT5SYWlkQ29udGV4dC5yZWdMb2NrUm93TEJBID0gMDsKKwkJaW9fcmVxdWVzdC0+UmFpZENvbnRleHQucmVnTG9ja0xlbmd0aCA9IDA7CisJCWlvX3JlcXVlc3QtPlJhaWRDb250ZXh0LlJBSURGbGFncyA9CisJCQlNUl9SQUlEX0ZMQUdTX0lPX1NVQl9UWVBFX1NZU1RFTV9QRCA8PAorCQkJTVJfUkFJRF9DVFhfUkFJRF9GTEFHU19JT19TVUJfVFlQRV9TSElGVDsKKwkJY21kLT5yZXF1ZXN0X2Rlc2MtPlNDU0lJTy5SZXF1ZXN0RmxhZ3MgPQorCQkJKE1QSTJfUkVRX0RFU0NSSVBUX0ZMQUdTX0hJR0hfUFJJT1JJVFkgPDwKKwkJCSBNRUdBU0FTX1JFUV9ERVNDUklQVF9GTEFHU19UWVBFX1NISUZUKTsKKwl9IGVsc2UgeworCQlpb19yZXF1ZXN0LT5GdW5jdGlvbiAgPSBNRUdBU0FTX01QSTJfRlVOQ1RJT05fTERfSU9fUkVRVUVTVDsKKwkJaW9fcmVxdWVzdC0+RGV2SGFuZGxlID0gZGV2aWNlX2lkOworCQljbWQtPnJlcXVlc3RfZGVzYy0+U0NTSUlPLlJlcXVlc3RGbGFncyA9CisJCQkoTVBJMl9SRVFfREVTQ1JJUFRfRkxBR1NfU0NTSV9JTyA8PAorCQkJIE1FR0FTQVNfUkVRX0RFU0NSSVBUX0ZMQUdTX1RZUEVfU0hJRlQpOworCX0KKwlpb19yZXF1ZXN0LT5SYWlkQ29udGV4dC5WaXJ0dWFsRGlza1RndElkID0gZGV2aWNlX2lkOworCWlvX3JlcXVlc3QtPkxVTlswXSA9IHNjbWQtPmRldmljZS0+bHVuOworCWlvX3JlcXVlc3QtPkRhdGFMZW5ndGggPSBzY3NpX2J1ZmZsZW4oc2NtZCk7Cit9CisKKy8qKgorICogbWVnYXNhc19idWlsZF9pb19mdXNpb24gLQlQcmVwYXJlcyBJT3MgdG8gZGV2aWNlcworICogQGluc3RhbmNlOgkJQWRhcHRlciBzb2Z0IHN0YXRlCisgKiBAc2NwOgkJU0NTSSBjb21tYW5kCisgKiBAY21kOgkJQ29tbWFuZCB0byBiZSBwcmVwYXJlZAorICoKKyAqIEludm9rZXMgaGVscGVyIGZ1bmN0aW9ucyB0byBwcmVwYXJlIHJlcXVlc3QgZnJhbWVzCisgKiBhbmQgc2V0cyBmbGFncyBhcHByb3ByaWF0ZSBmb3IgSU8vTm9uLUlPIGNtZAorICovCitpbnQKK21lZ2FzYXNfYnVpbGRfaW9fZnVzaW9uKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSwKKwkJCXN0cnVjdCBzY3NpX2NtbmQgKnNjcCwKKwkJCXN0cnVjdCBtZWdhc2FzX2NtZF9mdXNpb24gKmNtZCkKK3sKKwl1MzIgZGV2aWNlX2lkLCBzZ2VfY291bnQ7CisJc3RydWN0IE1QSTJfUkFJRF9TQ1NJX0lPX1JFUVVFU1QgKmlvX3JlcXVlc3QgPSBjbWQtPmlvX3JlcXVlc3Q7CisKKwlkZXZpY2VfaWQgPSBNRUdBU0FTX0RFVl9JTkRFWChpbnN0YW5jZSwgc2NwKTsKKworCS8qIFplcm8gb3V0IHNvbWUgZmllbGRzIHNvIHRoZXkgZG9uJ3QgZ2V0IHJldXNlZCAqLworCWlvX3JlcXVlc3QtPkxVTlswXSA9IDA7CisJaW9fcmVxdWVzdC0+Q0RCLkVFRFAzMi5QcmltYXJ5UmVmZXJlbmNlVGFnID0gMDsKKwlpb19yZXF1ZXN0LT5DREIuRUVEUDMyLlByaW1hcnlBcHBsaWNhdGlvblRhZ01hc2sgPSAwOworCWlvX3JlcXVlc3QtPkVFRFBGbGFncyA9IDA7CisJaW9fcmVxdWVzdC0+Q29udHJvbCA9IDA7CisJaW9fcmVxdWVzdC0+RUVEUEJsb2NrU2l6ZSA9IDA7CisJaW9fcmVxdWVzdC0+SW9GbGFncyA9IDA7CisJaW9fcmVxdWVzdC0+UmFpZENvbnRleHQuUkFJREZsYWdzID0gMDsKKworCW1lbWNweShpb19yZXF1ZXN0LT5DREIuQ0RCMzIsIHNjcC0+Y21uZCwgc2NwLT5jbWRfbGVuKTsKKwkvKgorCSAqIEp1c3QgdGhlIENEQiBsZW5ndGgscmVzdCBvZiB0aGUgRmxhZ3MgYXJlIHplcm8KKwkgKiBUaGlzIHdpbGwgYmUgbW9kaWZpZWQgZm9yIEZQIGluIGJ1aWxkX2xkaW9fZnVzaW9uCisJICovCisJaW9fcmVxdWVzdC0+SW9GbGFncyA9IHNjcC0+Y21kX2xlbjsKKworCWlmIChtZWdhc2FzX2lzX2xkaW8oc2NwKSkKKwkJbWVnYXNhc19idWlsZF9sZGlvX2Z1c2lvbihpbnN0YW5jZSwgc2NwLCBjbWQpOworCWVsc2UKKwkJbWVnYXNhc19idWlsZF9kY2RiX2Z1c2lvbihpbnN0YW5jZSwgc2NwLCBjbWQpOworCisJLyoKKwkgKiBDb25zdHJ1Y3QgU0dMCisJICovCisKKwlzZ2VfY291bnQgPQorCQltZWdhc2FzX21ha2Vfc2dsX2Z1c2lvbihpbnN0YW5jZSwgc2NwLAorCQkJCQkoc3RydWN0IE1QSTI1X0lFRUVfU0dFX0NIQUlONjQgKikKKwkJCQkJJmlvX3JlcXVlc3QtPlNHTCwgY21kKTsKKworCWlmIChzZ2VfY291bnQgPiBpbnN0YW5jZS0+bWF4X251bV9zZ2UpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtZWdhc2FzOiBFcnJvci4gc2dlX2NvdW50ICgweCV4KSBleGNlZWRzICIKKwkJICAgICAgICJtYXggKDB4JXgpIGFsbG93ZWRcbiIsIHNnZV9jb3VudCwKKwkJICAgICAgIGluc3RhbmNlLT5tYXhfbnVtX3NnZSk7CisJCXJldHVybiAxOworCX0KKworCWlvX3JlcXVlc3QtPlJhaWRDb250ZXh0Lm51bVNHRSA9IHNnZV9jb3VudDsKKworCWlvX3JlcXVlc3QtPlNHTEZsYWdzID0gTVBJMl9TR0VfRkxBR1NfNjRfQklUX0FERFJFU1NJTkc7CisKKwlpZiAoc2NwLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBQQ0lfRE1BX1RPREVWSUNFKQorCQlpb19yZXF1ZXN0LT5Db250cm9sIHw9IE1QSTJfU0NTSUlPX0NPTlRST0xfV1JJVEU7CisJZWxzZSBpZiAoc2NwLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBQQ0lfRE1BX0ZST01ERVZJQ0UpCisJCWlvX3JlcXVlc3QtPkNvbnRyb2wgfD0gTVBJMl9TQ1NJSU9fQ09OVFJPTF9SRUFEOworCisJaW9fcmVxdWVzdC0+U0dMT2Zmc2V0MCA9CisJCW9mZnNldG9mKHN0cnVjdCBNUEkyX1JBSURfU0NTSV9JT19SRVFVRVNULCBTR0wpIC8gNDsKKworCWlvX3JlcXVlc3QtPlNlbnNlQnVmZmVyTG93QWRkcmVzcyA9IGNtZC0+c2Vuc2VfcGh5c19hZGRyOworCWlvX3JlcXVlc3QtPlNlbnNlQnVmZmVyTGVuZ3RoID0gU0NTSV9TRU5TRV9CVUZGRVJTSVpFOworCisJY21kLT5zY21kID0gc2NwOworCXNjcC0+U0NwLnB0ciA9IChjaGFyICopY21kOworCisJcmV0dXJuIDA7Cit9CisKK3VuaW9uIE1FR0FTQVNfUkVRVUVTVF9ERVNDUklQVE9SX1VOSU9OICoKK21lZ2FzYXNfZ2V0X3JlcXVlc3RfZGVzY3JpcHRvcihzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UsIHUxNiBpbmRleCkKK3sKKwl1OCAqcDsKKwlzdHJ1Y3QgZnVzaW9uX2NvbnRleHQgKmZ1c2lvbjsKKworCWlmIChpbmRleCA+PSBpbnN0YW5jZS0+bWF4X2Z3X2NtZHMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtZWdhc2FzOiBJbnZhbGlkIFNNSUQgKDB4JXgpcmVxdWVzdCBmb3IgIgorCQkgICAgICAgImRlc2NyaXB0b3JcbiIsIGluZGV4KTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWZ1c2lvbiA9IGluc3RhbmNlLT5jdHJsX2NvbnRleHQ7CisJcCA9IGZ1c2lvbi0+cmVxX2ZyYW1lc19kZXNjCisJCStzaXplb2YodW5pb24gTUVHQVNBU19SRVFVRVNUX0RFU0NSSVBUT1JfVU5JT04pICppbmRleDsKKworCXJldHVybiAodW5pb24gTUVHQVNBU19SRVFVRVNUX0RFU0NSSVBUT1JfVU5JT04gKilwOworfQorCisvKioKKyAqIG1lZ2FzYXNfYnVpbGRfYW5kX2lzc3VlX2NtZF9mdXNpb24gLU1haW4gcm91dGluZSBmb3IgYnVpbGRpbmcgYW5kCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc3N1aW5nIG5vbiBJT0NUTCBjbWQKKyAqIEBpbnN0YW5jZToJCQlBZGFwdGVyIHNvZnQgc3RhdGUKKyAqIEBzY21kOgkJCXBvaW50ZXIgdG8gc2NzaSBjbWQgZnJvbSBPUworICovCitzdGF0aWMgdTMyCittZWdhc2FzX2J1aWxkX2FuZF9pc3N1ZV9jbWRfZnVzaW9uKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSwKKwkJCQkgICBzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kKQoreworCXN0cnVjdCBtZWdhc2FzX2NtZF9mdXNpb24gKmNtZDsKKwl1bmlvbiBNRUdBU0FTX1JFUVVFU1RfREVTQ1JJUFRPUl9VTklPTiAqcmVxX2Rlc2M7CisJdTMyIGluZGV4OworCXN0cnVjdCBmdXNpb25fY29udGV4dCAqZnVzaW9uOworCisJZnVzaW9uID0gaW5zdGFuY2UtPmN0cmxfY29udGV4dDsKKworCWNtZCA9IG1lZ2FzYXNfZ2V0X2NtZF9mdXNpb24oaW5zdGFuY2UpOworCWlmICghY21kKQorCQlyZXR1cm4gU0NTSV9NTFFVRVVFX0hPU1RfQlVTWTsKKworCWluZGV4ID0gY21kLT5pbmRleDsKKworCXJlcV9kZXNjID0gbWVnYXNhc19nZXRfcmVxdWVzdF9kZXNjcmlwdG9yKGluc3RhbmNlLCBpbmRleC0xKTsKKwlpZiAoIXJlcV9kZXNjKQorCQlyZXR1cm4gMTsKKworCXJlcV9kZXNjLT5Xb3JkcyA9IDA7CisJY21kLT5yZXF1ZXN0X2Rlc2MgPSByZXFfZGVzYzsKKwljbWQtPnJlcXVlc3RfZGVzYy0+V29yZHMgPSAwOworCisJaWYgKG1lZ2FzYXNfYnVpbGRfaW9fZnVzaW9uKGluc3RhbmNlLCBzY21kLCBjbWQpKSB7CisJCW1lZ2FzYXNfcmV0dXJuX2NtZF9mdXNpb24oaW5zdGFuY2UsIGNtZCk7CisJCXByaW50ayhLRVJOX0VSUiAibWVnYXNhczogRXJyb3IgYnVpbGRpbmcgY29tbWFuZC5cbiIpOworCQljbWQtPnJlcXVlc3RfZGVzYyA9IE5VTEw7CisJCXJldHVybiAxOworCX0KKworCXJlcV9kZXNjID0gY21kLT5yZXF1ZXN0X2Rlc2M7CisJcmVxX2Rlc2MtPlNDU0lJTy5TTUlEID0gaW5kZXg7CisKKwlpZiAoY21kLT5pb19yZXF1ZXN0LT5DaGFpbk9mZnNldCAhPSAwICYmCisJICAgIGNtZC0+aW9fcmVxdWVzdC0+Q2hhaW5PZmZzZXQgIT0gMHhGKQorCQlwcmludGsoS0VSTl9FUlIgIm1lZ2FzYXM6IFRoZSBjaGFpbiBvZmZzZXQgdmFsdWUgaXMgbm90ICIKKwkJICAgICAgICJjb3JyZWN0IDogJXhcbiIsIGNtZC0+aW9fcmVxdWVzdC0+Q2hhaW5PZmZzZXQpOworCisJLyoKKwkgKiBJc3N1ZSB0aGUgY29tbWFuZCB0byB0aGUgRlcKKwkgKi8KKwlhdG9taWNfaW5jKCZpbnN0YW5jZS0+Zndfb3V0c3RhbmRpbmcpOworCisJaW5zdGFuY2UtPmluc3RhbmNldC0+ZmlyZV9jbWQoaW5zdGFuY2UsCisJCQkJICAgICAgcmVxX2Rlc2MtPnUubG93LCByZXFfZGVzYy0+dS5oaWdoLAorCQkJCSAgICAgIGluc3RhbmNlLT5yZWdfc2V0KTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIGNvbXBsZXRlX2NtZF9mdXNpb24gLQlDb21wbGV0ZXMgY29tbWFuZAorICogQGluc3RhbmNlOgkJCUFkYXB0ZXIgc29mdCBzdGF0ZQorICogQ29tcGxldGVzIGFsbCBjb21tYW5kcyB0aGF0IGlzIGluIHJlcGx5IGRlc2NyaXB0b3IgcXVldWUKKyAqLworaW50Citjb21wbGV0ZV9jbWRfZnVzaW9uKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSkKK3sKKwl1bmlvbiBNUEkyX1JFUExZX0RFU0NSSVBUT1JTX1VOSU9OICpkZXNjOworCXN0cnVjdCBNUEkyX1NDU0lfSU9fU1VDQ0VTU19SRVBMWV9ERVNDUklQVE9SICpyZXBseV9kZXNjOworCXN0cnVjdCBNUEkyX1JBSURfU0NTSV9JT19SRVFVRVNUICpzY3NpX2lvX3JlcTsKKwlzdHJ1Y3QgZnVzaW9uX2NvbnRleHQgKmZ1c2lvbjsKKwlzdHJ1Y3QgbWVnYXNhc19jbWQgKmNtZF9tZmk7CisJc3RydWN0IG1lZ2FzYXNfY21kX2Z1c2lvbiAqY21kX2Z1c2lvbjsKKwl1MTYgc21pZCwgbnVtX2NvbXBsZXRlZDsKKwl1OCByZXBseV9kZXNjcmlwdF90eXBlLCBhcm07CisJdTMyIHN0YXR1cywgZXh0U3RhdHVzLCBkZXZpY2VfaWQ7CisJdW5pb24gZGVzY192YWx1ZSBkX3ZhbDsKKwlzdHJ1Y3QgTERfTE9BRF9CQUxBTkNFX0lORk8gKmxiaW5mbzsKKworCWZ1c2lvbiA9IGluc3RhbmNlLT5jdHJsX2NvbnRleHQ7CisKKwlpZiAoaW5zdGFuY2UtPmFkcHJlY292ZXJ5ID09IE1FR0FTQVNfSFdfQ1JJVElDQUxfRVJST1IpCisJCXJldHVybiBJUlFfSEFORExFRDsKKworCWRlc2MgPSBmdXNpb24tPnJlcGx5X2ZyYW1lc19kZXNjOworCWRlc2MgKz0gZnVzaW9uLT5sYXN0X3JlcGx5X2lkeDsKKworCXJlcGx5X2Rlc2MgPSAoc3RydWN0IE1QSTJfU0NTSV9JT19TVUNDRVNTX1JFUExZX0RFU0NSSVBUT1IgKilkZXNjOworCisJZF92YWwud29yZCA9IGRlc2MtPldvcmRzOworCisJcmVwbHlfZGVzY3JpcHRfdHlwZSA9IHJlcGx5X2Rlc2MtPlJlcGx5RmxhZ3MgJgorCQlNUEkyX1JQWV9ERVNDUklQVF9GTEFHU19UWVBFX01BU0s7CisKKwlpZiAocmVwbHlfZGVzY3JpcHRfdHlwZSA9PSBNUEkyX1JQWV9ERVNDUklQVF9GTEFHU19VTlVTRUQpCisJCXJldHVybiBJUlFfTk9ORTsKKworCWRfdmFsLndvcmQgPSBkZXNjLT5Xb3JkczsKKworCW51bV9jb21wbGV0ZWQgPSAwOworCisJd2hpbGUgKChkX3ZhbC51LmxvdyAhPSBVSU5UX01BWCkgJiYgKGRfdmFsLnUuaGlnaCAhPSBVSU5UX01BWCkpIHsKKwkJc21pZCA9IHJlcGx5X2Rlc2MtPlNNSUQ7CisKKwkJY21kX2Z1c2lvbiA9IGZ1c2lvbi0+Y21kX2xpc3Rbc21pZCAtIDFdOworCisJCXNjc2lfaW9fcmVxID0KKwkJCShzdHJ1Y3QgTVBJMl9SQUlEX1NDU0lfSU9fUkVRVUVTVCAqKQorCQkgIGNtZF9mdXNpb24tPmlvX3JlcXVlc3Q7CisKKwkJaWYgKGNtZF9mdXNpb24tPnNjbWQpCisJCQljbWRfZnVzaW9uLT5zY21kLT5TQ3AucHRyID0gTlVMTDsKKworCQlzdGF0dXMgPSBzY3NpX2lvX3JlcS0+UmFpZENvbnRleHQuc3RhdHVzOworCQlleHRTdGF0dXMgPSBzY3NpX2lvX3JlcS0+UmFpZENvbnRleHQuZXhTdGF0dXM7CisKKwkJc3dpdGNoIChzY3NpX2lvX3JlcS0+RnVuY3Rpb24pIHsKKwkJY2FzZSBNUEkyX0ZVTkNUSU9OX1NDU0lfSU9fUkVRVUVTVDogIC8qRmFzdCBQYXRoIElPLiovCisJCQkvKiBVcGRhdGUgbG9hZCBiYWxhbmNpbmcgaW5mbyAqLworCQkJZGV2aWNlX2lkID0gTUVHQVNBU19ERVZfSU5ERVgoaW5zdGFuY2UsCisJCQkJCQkgICAgICBjbWRfZnVzaW9uLT5zY21kKTsKKwkJCWxiaW5mbyA9ICZmdXNpb24tPmxvYWRfYmFsYW5jZV9pbmZvW2RldmljZV9pZF07CisJCQlpZiAoY21kX2Z1c2lvbi0+c2NtZC0+U0NwLlN0YXR1cyAmCisJCQkgICAgTUVHQVNBU19MT0FEX0JBTEFOQ0VfRkxBRykgeworCQkJCWFybSA9IGxiaW5mby0+cmFpZDFEZXZIYW5kbGVbMF0gPT0KKwkJCQkJY21kX2Z1c2lvbi0+aW9fcmVxdWVzdC0+RGV2SGFuZGxlID8gMCA6CisJCQkJCTE7CisJCQkJYXRvbWljX2RlYygmbGJpbmZvLT5zY3NpX3BlbmRpbmdfY21kc1thcm1dKTsKKwkJCQljbWRfZnVzaW9uLT5zY21kLT5TQ3AuU3RhdHVzICY9CisJCQkJCX5NRUdBU0FTX0xPQURfQkFMQU5DRV9GTEFHOworCQkJfQorCQkJaWYgKHJlcGx5X2Rlc2NyaXB0X3R5cGUgPT0KKwkJCSAgICBNUEkyX1JQWV9ERVNDUklQVF9GTEFHU19TQ1NJX0lPX1NVQ0NFU1MpIHsKKwkJCQlpZiAobWVnYXNhc19kYmdfbHZsID09IDUpCisJCQkJCXByaW50ayhLRVJOX0VSUiAiXG5tZWdhc2FzOiBGQVNUIFBhdGggIgorCQkJCQkgICAgICAgIklPIFN1Y2Nlc3NcbiIpOworCQkJfQorCQkJLyogRmFsbCB0aHJ1IGFuZCBjb21wbGV0ZSBJTyAqLworCQljYXNlIE1FR0FTQVNfTVBJMl9GVU5DVElPTl9MRF9JT19SRVFVRVNUOiAvKiBMRC1JTyBQYXRoICovCisJCQkvKiBNYXAgdGhlIEZXIENtZCBTdGF0dXMgKi8KKwkJCW1hcF9jbWRfc3RhdHVzKGNtZF9mdXNpb24sIHN0YXR1cywgZXh0U3RhdHVzKTsKKwkJCXNjc2lfZG1hX3VubWFwKGNtZF9mdXNpb24tPnNjbWQpOworCQkJY21kX2Z1c2lvbi0+c2NtZC0+c2NzaV9kb25lKGNtZF9mdXNpb24tPnNjbWQpOworCQkJc2NzaV9pb19yZXEtPlJhaWRDb250ZXh0LnN0YXR1cyA9IDA7CisJCQlzY3NpX2lvX3JlcS0+UmFpZENvbnRleHQuZXhTdGF0dXMgPSAwOworCQkJbWVnYXNhc19yZXR1cm5fY21kX2Z1c2lvbihpbnN0YW5jZSwgY21kX2Z1c2lvbik7CisJCQlhdG9taWNfZGVjKCZpbnN0YW5jZS0+Zndfb3V0c3RhbmRpbmcpOworCisJCQlicmVhazsKKwkJY2FzZSBNRUdBU0FTX01QSTJfRlVOQ1RJT05fUEFTU1RIUlVfSU9fUkVRVUVTVDogLypNRkkgY29tbWFuZCAqLworCQkJY21kX21maSA9IGluc3RhbmNlLT5jbWRfbGlzdFtjbWRfZnVzaW9uLT5zeW5jX2NtZF9pZHhdOworCQkJbWVnYXNhc19jb21wbGV0ZV9jbWQoaW5zdGFuY2UsIGNtZF9tZmksIERJRF9PSyk7CisJCQljbWRfZnVzaW9uLT5mbGFncyA9IDA7CisJCQltZWdhc2FzX3JldHVybl9jbWRfZnVzaW9uKGluc3RhbmNlLCBjbWRfZnVzaW9uKTsKKworCQkJYnJlYWs7CisJCX0KKworCQlmdXNpb24tPmxhc3RfcmVwbHlfaWR4Kys7CisJCWlmIChmdXNpb24tPmxhc3RfcmVwbHlfaWR4ID49IGZ1c2lvbi0+cmVwbHlfcV9kZXB0aCkKKwkJCWZ1c2lvbi0+bGFzdF9yZXBseV9pZHggPSAwOworCisJCWRlc2MtPldvcmRzID0gVUxMT05HX01BWDsKKwkJbnVtX2NvbXBsZXRlZCsrOworCisJCS8qIEdldCB0aGUgbmV4dCByZXBseSBkZXNjcmlwdG9yICovCisJCWlmICghZnVzaW9uLT5sYXN0X3JlcGx5X2lkeCkKKwkJCWRlc2MgPSBmdXNpb24tPnJlcGx5X2ZyYW1lc19kZXNjOworCQllbHNlCisJCQlkZXNjKys7CisKKwkJcmVwbHlfZGVzYyA9CisJCSAgKHN0cnVjdCBNUEkyX1NDU0lfSU9fU1VDQ0VTU19SRVBMWV9ERVNDUklQVE9SICopZGVzYzsKKworCQlkX3ZhbC53b3JkID0gZGVzYy0+V29yZHM7CisKKwkJcmVwbHlfZGVzY3JpcHRfdHlwZSA9IHJlcGx5X2Rlc2MtPlJlcGx5RmxhZ3MgJgorCQkJTVBJMl9SUFlfREVTQ1JJUFRfRkxBR1NfVFlQRV9NQVNLOworCisJCWlmIChyZXBseV9kZXNjcmlwdF90eXBlID09IE1QSTJfUlBZX0RFU0NSSVBUX0ZMQUdTX1VOVVNFRCkKKwkJCWJyZWFrOworCX0KKworCWlmICghbnVtX2NvbXBsZXRlZCkKKwkJcmV0dXJuIElSUV9OT05FOworCisJd21iKCk7CisJd3JpdGVsKGZ1c2lvbi0+bGFzdF9yZXBseV9pZHgsCisJICAgICAgICZpbnN0YW5jZS0+cmVnX3NldC0+cmVwbHlfcG9zdF9ob3N0X2luZGV4KTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyoqCisgKiBtZWdhc2FzX2NvbXBsZXRlX2NtZF9kcGNfZnVzaW9uIC0JQ29tcGxldGVzIGNvbW1hbmQKKyAqIEBpbnN0YW5jZToJCQlBZGFwdGVyIHNvZnQgc3RhdGUKKyAqCisgKiBUYXNrbGV0IHRvIGNvbXBsZXRlIGNtZHMKKyAqLwordm9pZAorbWVnYXNhc19jb21wbGV0ZV9jbWRfZHBjX2Z1c2lvbih1bnNpZ25lZCBsb25nIGluc3RhbmNlX2FkZHIpCit7CisJc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlID0KKwkJKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICopaW5zdGFuY2VfYWRkcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogSWYgd2UgaGF2ZSBhbHJlYWR5IGRlY2xhcmVkIGFkYXB0ZXIgZGVhZCwgZG9ub3QgY29tcGxldGUgY21kcyAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZpbnN0YW5jZS0+aGJhX2xvY2ssIGZsYWdzKTsKKwlpZiAoaW5zdGFuY2UtPmFkcHJlY292ZXJ5ID09IE1FR0FTQVNfSFdfQ1JJVElDQUxfRVJST1IpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5zdGFuY2UtPmhiYV9sb2NrLCBmbGFncyk7CisJCXJldHVybjsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5zdGFuY2UtPmhiYV9sb2NrLCBmbGFncyk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW5zdGFuY2UtPmNvbXBsZXRpb25fbG9jaywgZmxhZ3MpOworCWNvbXBsZXRlX2NtZF9mdXNpb24oaW5zdGFuY2UpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluc3RhbmNlLT5jb21wbGV0aW9uX2xvY2ssIGZsYWdzKTsKK30KKworLyoqCisgKiBtZWdhc2FzX2lzcl9mdXNpb24gLSBpc3IgZW50cnkgcG9pbnQKKyAqLworaXJxcmV0dXJuX3QgbWVnYXNhc19pc3JfZnVzaW9uKGludCBpcnEsIHZvaWQgKmRldnApCit7CisJc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlID0gKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICopZGV2cDsKKwl1MzIgbWZpU3RhdHVzLCBmd19zdGF0ZTsKKworCWlmICghaW5zdGFuY2UtPm1zaV9mbGFnKSB7CisJCW1maVN0YXR1cyA9IGluc3RhbmNlLT5pbnN0YW5jZXQtPmNsZWFyX2ludHIoaW5zdGFuY2UtPnJlZ19zZXQpOworCQlpZiAoIW1maVN0YXR1cykKKwkJCXJldHVybiBJUlFfTk9ORTsKKwl9CisKKwkvKiBJZiB3ZSBhcmUgcmVzZXR0aW5nLCBiYWlsICovCisJaWYgKHRlc3RfYml0KE1FR0FTQVNfRlVTSU9OX0lOX1JFU0VULCAmaW5zdGFuY2UtPnJlc2V0X2ZsYWdzKSkKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCisJaWYgKCFjb21wbGV0ZV9jbWRfZnVzaW9uKGluc3RhbmNlKSkgeworCQkvKiBJZiB3ZSBkaWRuJ3QgY29tcGxldGUgYW55IGNvbW1hbmRzLCBjaGVjayBmb3IgRlcgZmF1bHQgKi8KKwkJZndfc3RhdGUgPSBpbnN0YW5jZS0+aW5zdGFuY2V0LT5yZWFkX2Z3X3N0YXR1c19yZWcoCisJCQlpbnN0YW5jZS0+cmVnX3NldCkgJiBNRklfU1RBVEVfTUFTSzsKKwkJaWYgKGZ3X3N0YXRlID09IE1GSV9TVEFURV9GQVVMVCkKKwkJCXNjaGVkdWxlX3dvcmsoJmluc3RhbmNlLT53b3JrX2luaXQpOworCX0KKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyoqCisgKiBidWlsZF9tcHRfbWZpX3Bhc3NfdGhydSAtIGJ1aWxkcyBhIGNtZCBmbyBNRkkgUGFzcyB0aHJ1CisgKiBAaW5zdGFuY2U6CQkJQWRhcHRlciBzb2Z0IHN0YXRlCisgKiBtZmlfY21kOgkJCW1lZ2FzYXNfY21kIHBvaW50ZXIKKyAqCisgKi8KK3U4CitidWlsZF9tcHRfbWZpX3Bhc3NfdGhydShzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UsCisJCQlzdHJ1Y3QgbWVnYXNhc19jbWQgKm1maV9jbWQpCit7CisJc3RydWN0IE1QSTI1X0lFRUVfU0dFX0NIQUlONjQgKm1waTI1X2llZWVfY2hhaW47CisJc3RydWN0IE1QSTJfUkFJRF9TQ1NJX0lPX1JFUVVFU1QgKmlvX3JlcTsKKwlzdHJ1Y3QgbWVnYXNhc19jbWRfZnVzaW9uICpjbWQ7CisJc3RydWN0IGZ1c2lvbl9jb250ZXh0ICpmdXNpb247CisJc3RydWN0IG1lZ2FzYXNfaGVhZGVyICpmcmFtZV9oZHIgPSAmbWZpX2NtZC0+ZnJhbWUtPmhkcjsKKworCWNtZCA9IG1lZ2FzYXNfZ2V0X2NtZF9mdXNpb24oaW5zdGFuY2UpOworCWlmICghY21kKQorCQlyZXR1cm4gMTsKKworCS8qICBTYXZlIHRoZSBzbWlkLiBUbyBiZSB1c2VkIGZvciByZXR1cm5pbmcgdGhlIGNtZCAqLworCW1maV9jbWQtPmNvbnRleHQuc21pZCA9IGNtZC0+aW5kZXg7CisKKwljbWQtPnN5bmNfY21kX2lkeCA9IG1maV9jbWQtPmluZGV4OworCisJLyoKKwkgKiBGb3IgY21kcyB3aGVyZSB0aGUgZmxhZyBpcyBzZXQsIHN0b3JlIHRoZSBmbGFnIGFuZCBjaGVjaworCSAqIG9uIGNvbXBsZXRpb24uIEZvciBjbWRzIHdpdGggdGhpcyBmbGFnLCBkb24ndCBjYWxsCisJICogbWVnYXNhc19jb21wbGV0ZV9jbWQKKwkgKi8KKworCWlmIChmcmFtZV9oZHItPmZsYWdzICYgTUZJX0ZSQU1FX0RPTlRfUE9TVF9JTl9SRVBMWV9RVUVVRSkKKwkJY21kLT5mbGFncyA9IE1GSV9GUkFNRV9ET05UX1BPU1RfSU5fUkVQTFlfUVVFVUU7CisKKwlmdXNpb24gPSBpbnN0YW5jZS0+Y3RybF9jb250ZXh0OworCWlvX3JlcSA9IGNtZC0+aW9fcmVxdWVzdDsKKwltcGkyNV9pZWVlX2NoYWluID0KKwkgIChzdHJ1Y3QgTVBJMjVfSUVFRV9TR0VfQ0hBSU42NCAqKSZpb19yZXEtPlNHTC5JZWVlQ2hhaW47CisKKwlpb19yZXEtPkZ1bmN0aW9uICAgID0gTUVHQVNBU19NUEkyX0ZVTkNUSU9OX1BBU1NUSFJVX0lPX1JFUVVFU1Q7CisJaW9fcmVxLT5TR0xPZmZzZXQwICA9IG9mZnNldG9mKHN0cnVjdCBNUEkyX1JBSURfU0NTSV9JT19SRVFVRVNULAorCQkJCSAgICAgICBTR0wpIC8gNDsKKwlpb19yZXEtPkNoYWluT2Zmc2V0ID0gZnVzaW9uLT5jaGFpbl9vZmZzZXRfbWZpX3B0aHJ1OworCisJbXBpMjVfaWVlZV9jaGFpbi0+QWRkcmVzcyA9IG1maV9jbWQtPmZyYW1lX3BoeXNfYWRkcjsKKworCW1waTI1X2llZWVfY2hhaW4tPkZsYWdzID0gSUVFRV9TR0VfRkxBR1NfQ0hBSU5fRUxFTUVOVCB8CisJCU1QSTJfSUVFRV9TR0VfRkxBR1NfSU9DUExCTlRBX0FERFI7CisKKwltcGkyNV9pZWVlX2NoYWluLT5MZW5ndGggPSBNRUdBU0FTX01BWF9TWl9DSEFJTl9GUkFNRTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIGJ1aWxkX21wdF9jbWQgLSBDYWxscyBoZWxwZXIgZnVuY3Rpb24gdG8gYnVpbGQgYSBjbWQgTUZJIFBhc3MgdGhydSBjbWQKKyAqIEBpbnN0YW5jZToJCQlBZGFwdGVyIHNvZnQgc3RhdGUKKyAqIEBjbWQ6CQkJbWZpIGNtZCB0byBidWlsZAorICoKKyAqLwordW5pb24gTUVHQVNBU19SRVFVRVNUX0RFU0NSSVBUT1JfVU5JT04gKgorYnVpbGRfbXB0X2NtZChzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UsIHN0cnVjdCBtZWdhc2FzX2NtZCAqY21kKQoreworCXVuaW9uIE1FR0FTQVNfUkVRVUVTVF9ERVNDUklQVE9SX1VOSU9OICpyZXFfZGVzYzsKKwl1MTYgaW5kZXg7CisKKwlpZiAoYnVpbGRfbXB0X21maV9wYXNzX3RocnUoaW5zdGFuY2UsIGNtZCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZG4ndCBidWlsZCBNRkkgcGFzcyB0aHJ1IGNtZFxuIik7CisJCXJldHVybiBOVUxMOworCX0KKworCWluZGV4ID0gY21kLT5jb250ZXh0LnNtaWQ7CisKKwlyZXFfZGVzYyA9IG1lZ2FzYXNfZ2V0X3JlcXVlc3RfZGVzY3JpcHRvcihpbnN0YW5jZSwgaW5kZXggLSAxKTsKKworCWlmICghcmVxX2Rlc2MpCisJCXJldHVybiBOVUxMOworCisJcmVxX2Rlc2MtPldvcmRzID0gMDsKKwlyZXFfZGVzYy0+U0NTSUlPLlJlcXVlc3RGbGFncyA9IChNUEkyX1JFUV9ERVNDUklQVF9GTEFHU19TQ1NJX0lPIDw8CisJCQkJCSBNRUdBU0FTX1JFUV9ERVNDUklQVF9GTEFHU19UWVBFX1NISUZUKTsKKworCXJlcV9kZXNjLT5TQ1NJSU8uU01JRCA9IGluZGV4OworCisJcmV0dXJuIHJlcV9kZXNjOworfQorCisvKioKKyAqIG1lZ2FzYXNfaXNzdWVfZGNtZF9mdXNpb24gLSBJc3N1ZXMgYSBNRkkgUGFzcyB0aHJ1IGNtZAorICogQGluc3RhbmNlOgkJCUFkYXB0ZXIgc29mdCBzdGF0ZQorICogQGNtZDoJCQltZmkgY21kIHBvaW50ZXIKKyAqCisgKi8KK3ZvaWQKK21lZ2FzYXNfaXNzdWVfZGNtZF9mdXNpb24oc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlLAorCQkJICBzdHJ1Y3QgbWVnYXNhc19jbWQgKmNtZCkKK3sKKwl1bmlvbiBNRUdBU0FTX1JFUVVFU1RfREVTQ1JJUFRPUl9VTklPTiAqcmVxX2Rlc2M7CisJdW5pb24gZGVzY192YWx1ZSBkX3ZhbDsKKworCXJlcV9kZXNjID0gYnVpbGRfbXB0X2NtZChpbnN0YW5jZSwgY21kKTsKKwlpZiAoIXJlcV9kZXNjKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQ291bGRuJ3QgaXNzdWUgTUZJIHBhc3MgdGhydSBjbWRcbiIpOworCQlyZXR1cm47CisJfQorCWRfdmFsLndvcmQgPSByZXFfZGVzYy0+V29yZHM7CisKKwlpbnN0YW5jZS0+aW5zdGFuY2V0LT5maXJlX2NtZChpbnN0YW5jZSwgcmVxX2Rlc2MtPnUubG93LAorCQkJCSAgICAgIHJlcV9kZXNjLT51LmhpZ2gsIGluc3RhbmNlLT5yZWdfc2V0KTsKK30KKworLyoqCisgKiBtZWdhc2FzX3JlbGVhc2VfZnVzaW9uIC0JUmV2ZXJzZXMgdGhlIEZXIGluaXRpYWxpemF0aW9uCisgKiBAaW50YW5jZToJCQlBZGFwdGVyIHNvZnQgc3RhdGUKKyAqLwordm9pZAorbWVnYXNhc19yZWxlYXNlX2Z1c2lvbihzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UpCit7CisJbWVnYXNhc19mcmVlX2NtZHMoaW5zdGFuY2UpOworCW1lZ2FzYXNfZnJlZV9jbWRzX2Z1c2lvbihpbnN0YW5jZSk7CisKKwlpb3VubWFwKGluc3RhbmNlLT5yZWdfc2V0KTsKKworCXBjaV9yZWxlYXNlX3NlbGVjdGVkX3JlZ2lvbnMoaW5zdGFuY2UtPnBkZXYsIGluc3RhbmNlLT5iYXIpOworfQorCisvKioKKyAqIG1lZ2FzYXNfcmVhZF9md19zdGF0dXNfcmVnX2Z1c2lvbiAtIHJldHVybnMgdGhlIGN1cnJlbnQgRlcgc3RhdHVzIHZhbHVlCisgKiBAcmVnczoJCQlNRkkgcmVnaXN0ZXIgc2V0CisgKi8KK3N0YXRpYyB1MzIKK21lZ2FzYXNfcmVhZF9md19zdGF0dXNfcmVnX2Z1c2lvbihzdHJ1Y3QgbWVnYXNhc19yZWdpc3Rlcl9zZXQgX19pb21lbSAqcmVncykKK3sKKwlyZXR1cm4gcmVhZGwoJihyZWdzKS0+b3V0Ym91bmRfc2NyYXRjaF9wYWQpOworfQorCisvKioKKyAqIG1lZ2FzYXNfYWRwX3Jlc2V0X2Z1c2lvbiAtCUZvciBjb250cm9sbGVyIHJlc2V0CisgKiBAcmVnczoJCQkJTUZJIHJlZ2lzdGVyIHNldAorICovCitzdGF0aWMgaW50CittZWdhc2FzX2FkcF9yZXNldF9mdXNpb24oc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlLAorCQkJIHN0cnVjdCBtZWdhc2FzX3JlZ2lzdGVyX3NldCBfX2lvbWVtICpyZWdzKQoreworCXJldHVybiAwOworfQorCisvKioKKyAqIG1lZ2FzYXNfY2hlY2tfcmVzZXRfZnVzaW9uIC0JRm9yIGNvbnRyb2xsZXIgcmVzZXQgY2hlY2sKKyAqIEByZWdzOgkJCQlNRkkgcmVnaXN0ZXIgc2V0CisgKi8KK3N0YXRpYyBpbnQKK21lZ2FzYXNfY2hlY2tfcmVzZXRfZnVzaW9uKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSwKKwkJCSAgIHN0cnVjdCBtZWdhc2FzX3JlZ2lzdGVyX3NldCBfX2lvbWVtICpyZWdzKQoreworCXJldHVybiAwOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIHdhaXRzIGZvciBvdXRzdGFuZGluZyBjb21tYW5kcyBvbiBmdXNpb24gdG8gY29tcGxldGUgKi8KK2ludCBtZWdhc2FzX3dhaXRfZm9yX291dHN0YW5kaW5nX2Z1c2lvbihzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UpCit7CisJaW50IGksIG91dHN0YW5kaW5nLCByZXR2YWwgPSAwOworCXUzMiBmd19zdGF0ZSwgd2FpdF90aW1lID0gTUVHQVNBU19SRVNFVF9XQUlUX1RJTUU7CisKKwlmb3IgKGkgPSAwOyBpIDwgd2FpdF90aW1lOyBpKyspIHsKKwkJLyogQ2hlY2sgaWYgZmlybXdhcmUgaXMgaW4gZmF1bHQgc3RhdGUgKi8KKwkJZndfc3RhdGUgPSBpbnN0YW5jZS0+aW5zdGFuY2V0LT5yZWFkX2Z3X3N0YXR1c19yZWcoCisJCQlpbnN0YW5jZS0+cmVnX3NldCkgJiBNRklfU1RBVEVfTUFTSzsKKwkJaWYgKGZ3X3N0YXRlID09IE1GSV9TVEFURV9GQVVMVCkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAibWVnYXNhczogRm91bmQgRlcgaW4gRkFVTFQgc3RhdGUsIgorCQkJICAgICAgICIgd2lsbCByZXNldCBhZGFwdGVyLlxuIik7CisJCQlyZXR2YWwgPSAxOworCQkJZ290byBvdXQ7CisJCX0KKworCQlvdXRzdGFuZGluZyA9IGF0b21pY19yZWFkKCZpbnN0YW5jZS0+Zndfb3V0c3RhbmRpbmcpOworCQlpZiAoIW91dHN0YW5kaW5nKQorCQkJZ290byBvdXQ7CisKKwkJaWYgKCEoaSAlIE1FR0FTQVNfUkVTRVRfTk9USUNFX0lOVEVSVkFMKSkgeworCQkJcHJpbnRrKEtFUk5fTk9USUNFICJtZWdhc2FzOiBbJTJkXXdhaXRpbmcgZm9yICVkICIKKwkJCSAgICAgICAiY29tbWFuZHMgdG8gY29tcGxldGVcbiIsIGksIG91dHN0YW5kaW5nKTsKKwkJCW1lZ2FzYXNfY29tcGxldGVfY21kX2RwY19mdXNpb24oCisJCQkJKHVuc2lnbmVkIGxvbmcpaW5zdGFuY2UpOworCQl9CisJCW1zbGVlcCgxMDAwKTsKKwl9CisKKwlpZiAoYXRvbWljX3JlYWQoJmluc3RhbmNlLT5md19vdXRzdGFuZGluZykpIHsKKwkJcHJpbnRrKCJtZWdhcmFpZF9zYXM6IHBlbmRpbmcgY29tbWFuZHMgcmVtYWluIGFmdGVyIHdhaXRpbmcsICIKKwkJICAgICAgICJ3aWxsIHJlc2V0IGFkYXB0ZXIuXG4iKTsKKwkJcmV0dmFsID0gMTsKKwl9CitvdXQ6CisJcmV0dXJuIHJldHZhbDsKK30KKwordm9pZCAgbWVnYXNhc19yZXNldF9yZXBseV9kZXNjKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgZnVzaW9uX2NvbnRleHQgKmZ1c2lvbjsKKwl1bmlvbiBNUEkyX1JFUExZX0RFU0NSSVBUT1JTX1VOSU9OICpyZXBseV9kZXNjOworCisJZnVzaW9uID0gaW5zdGFuY2UtPmN0cmxfY29udGV4dDsKKwlmdXNpb24tPmxhc3RfcmVwbHlfaWR4ID0gMDsKKwlyZXBseV9kZXNjID0gZnVzaW9uLT5yZXBseV9mcmFtZXNfZGVzYzsKKwlmb3IgKGkgPSAwIDsgaSA8IGZ1c2lvbi0+cmVwbHlfcV9kZXB0aDsgaSsrLCByZXBseV9kZXNjKyspCisJCXJlcGx5X2Rlc2MtPldvcmRzID0gVUxMT05HX01BWDsKK30KKworLyogQ29yZSBmdXNpb24gcmVzZXQgZnVuY3Rpb24gKi8KK2ludCBtZWdhc2FzX3Jlc2V0X2Z1c2lvbihzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCkKK3sKKwlpbnQgcmV0dmFsID0gU1VDQ0VTUywgaSwgaiwgcmV0cnkgPSAwOworCXN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZTsKKwlzdHJ1Y3QgbWVnYXNhc19jbWRfZnVzaW9uICpjbWRfZnVzaW9uOworCXN0cnVjdCBmdXNpb25fY29udGV4dCAqZnVzaW9uOworCXN0cnVjdCBtZWdhc2FzX2NtZCAqY21kX21maTsKKwl1bmlvbiBNRUdBU0FTX1JFUVVFU1RfREVTQ1JJUFRPUl9VTklPTiAqcmVxX2Rlc2M7CisJdTMyIGhvc3RfZGlhZywgYWJzX3N0YXRlOworCisJaW5zdGFuY2UgPSAoc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKilzaG9zdC0+aG9zdGRhdGE7CisJZnVzaW9uID0gaW5zdGFuY2UtPmN0cmxfY29udGV4dDsKKworCW11dGV4X2xvY2soJmluc3RhbmNlLT5yZXNldF9tdXRleCk7CisJc2V0X2JpdChNRUdBU0FTX0ZVU0lPTl9JTl9SRVNFVCwgJmluc3RhbmNlLT5yZXNldF9mbGFncyk7CisJaW5zdGFuY2UtPmFkcHJlY292ZXJ5ID0gTUVHQVNBU19BRFBSRVNFVF9TTV9JTkZBVUxUOworCWluc3RhbmNlLT5pbnN0YW5jZXQtPmRpc2FibGVfaW50cihpbnN0YW5jZS0+cmVnX3NldCk7CisJbXNsZWVwKDEwMDApOworCisJaWYgKGluc3RhbmNlLT5hZHByZWNvdmVyeSA9PSBNRUdBU0FTX0hXX0NSSVRJQ0FMX0VSUk9SKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIm1lZ2FyYWlkX3NhczogSGFyZHdhcmUgY3JpdGljYWwgZXJyb3IsICIKKwkJICAgICAgICJyZXR1cm5pbmcgRkFJTEVELlxuIik7CisJCXJldHZhbCA9IEZBSUxFRDsKKwkJZ290byBvdXQ7CisJfQorCisJLyogRmlyc3QgdHJ5IHdhaXRpbmcgZm9yIGNvbW1hbmRzIHRvIGNvbXBsZXRlICovCisJaWYgKG1lZ2FzYXNfd2FpdF9mb3Jfb3V0c3RhbmRpbmdfZnVzaW9uKGluc3RhbmNlKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJtZWdhcmFpZF9zYXM6IHJlc2V0dGluZyBmdXNpb24gIgorCQkgICAgICAgImFkYXB0ZXIuXG4iKTsKKwkJLyogTm93IHJldHVybiBjb21tYW5kcyBiYWNrIHRvIHRoZSBPUyAqLworCQlmb3IgKGkgPSAwIDsgaSA8IGluc3RhbmNlLT5tYXhfZndfY21kczsgaSsrKSB7CisJCQljbWRfZnVzaW9uID0gZnVzaW9uLT5jbWRfbGlzdFtpXTsKKwkJCWlmIChjbWRfZnVzaW9uLT5zY21kKSB7CisJCQkJc2NzaV9kbWFfdW5tYXAoY21kX2Z1c2lvbi0+c2NtZCk7CisJCQkJY21kX2Z1c2lvbi0+c2NtZC0+cmVzdWx0ID0gKERJRF9SRVNFVCA8PCAxNik7CisJCQkJY21kX2Z1c2lvbi0+c2NtZC0+c2NzaV9kb25lKGNtZF9mdXNpb24tPnNjbWQpOworCQkJCW1lZ2FzYXNfcmV0dXJuX2NtZF9mdXNpb24oaW5zdGFuY2UsIGNtZF9mdXNpb24pOworCQkJCWF0b21pY19kZWMoJmluc3RhbmNlLT5md19vdXRzdGFuZGluZyk7CisJCQl9CisJCX0KKworCQlpZiAoaW5zdGFuY2UtPmRpc2FibGVPbmxpbmVDdHJsUmVzZXQgPT0gMSkgeworCQkJLyogUmVzZXQgbm90IHN1cHBvcnRlZCwga2lsbCBhZGFwdGVyICovCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJtZWdhcmFpZF9zYXM6IFJlc2V0IG5vdCBzdXBwb3J0ZWQiCisJCQkgICAgICAgIiwga2lsbGluZyBhZGFwdGVyLlxuIik7CisJCQltZWdhcmFpZF9zYXNfa2lsbF9oYmEoaW5zdGFuY2UpOworCQkJaW5zdGFuY2UtPmFkcHJlY292ZXJ5ID0gTUVHQVNBU19IV19DUklUSUNBTF9FUlJPUjsKKwkJCXJldHZhbCA9IEZBSUxFRDsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJLyogTm93IHRyeSB0byByZXNldCB0aGUgY2hpcCAqLworCQlmb3IgKGkgPSAwOyBpIDwgTUVHQVNBU19GVVNJT05fTUFYX1JFU0VUX1RSSUVTOyBpKyspIHsKKwkJCXdyaXRlbChNUEkyX1dSU0VRX0ZMVVNIX0tFWV9WQUxVRSwKKwkJCSAgICAgICAmaW5zdGFuY2UtPnJlZ19zZXQtPmZ1c2lvbl9zZXFfb2Zmc2V0KTsKKwkJCXdyaXRlbChNUEkyX1dSU0VRXzFTVF9LRVlfVkFMVUUsCisJCQkgICAgICAgJmluc3RhbmNlLT5yZWdfc2V0LT5mdXNpb25fc2VxX29mZnNldCk7CisJCQl3cml0ZWwoTVBJMl9XUlNFUV8yTkRfS0VZX1ZBTFVFLAorCQkJICAgICAgICZpbnN0YW5jZS0+cmVnX3NldC0+ZnVzaW9uX3NlcV9vZmZzZXQpOworCQkJd3JpdGVsKE1QSTJfV1JTRVFfM1JEX0tFWV9WQUxVRSwKKwkJCSAgICAgICAmaW5zdGFuY2UtPnJlZ19zZXQtPmZ1c2lvbl9zZXFfb2Zmc2V0KTsKKwkJCXdyaXRlbChNUEkyX1dSU0VRXzRUSF9LRVlfVkFMVUUsCisJCQkgICAgICAgJmluc3RhbmNlLT5yZWdfc2V0LT5mdXNpb25fc2VxX29mZnNldCk7CisJCQl3cml0ZWwoTVBJMl9XUlNFUV81VEhfS0VZX1ZBTFVFLAorCQkJICAgICAgICZpbnN0YW5jZS0+cmVnX3NldC0+ZnVzaW9uX3NlcV9vZmZzZXQpOworCQkJd3JpdGVsKE1QSTJfV1JTRVFfNlRIX0tFWV9WQUxVRSwKKwkJCSAgICAgICAmaW5zdGFuY2UtPnJlZ19zZXQtPmZ1c2lvbl9zZXFfb2Zmc2V0KTsKKworCQkJLyogQ2hlY2sgdGhhdCB0aGUgZGlhZyB3cml0ZSBlbmFibGUgKERSV0UpIGJpdCBpcyBvbiAqLworCQkJaG9zdF9kaWFnID0gcmVhZGwoJmluc3RhbmNlLT5yZWdfc2V0LT5mdXNpb25faG9zdF9kaWFnKTsKKwkJCXdoaWxlICghKGhvc3RfZGlhZyAmIEhPU1RfRElBR19XUklURV9FTkFCTEUpKSB7CisJCQkJbXNsZWVwKDEwMCk7CisJCQkJaG9zdF9kaWFnID0KKwkJCQlyZWFkbCgmaW5zdGFuY2UtPnJlZ19zZXQtPmZ1c2lvbl9ob3N0X2RpYWcpOworCQkJCWlmIChyZXRyeSsrID09IDEwMCkgeworCQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJtZWdhcmFpZF9zYXM6ICIKKwkJCQkJICAgICAgICJIb3N0IGRpYWcgdW5sb2NrIGZhaWxlZCFcbiIpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQlpZiAoIShob3N0X2RpYWcgJiBIT1NUX0RJQUdfV1JJVEVfRU5BQkxFKSkKKwkJCQljb250aW51ZTsKKworCQkJLyogU2VuZCBjaGlwIHJlc2V0IGNvbW1hbmQgKi8KKwkJCXdyaXRlbChob3N0X2RpYWcgfCBIT1NUX0RJQUdfUkVTRVRfQURBUFRFUiwKKwkJCSAgICAgICAmaW5zdGFuY2UtPnJlZ19zZXQtPmZ1c2lvbl9ob3N0X2RpYWcpOworCQkJbXNsZWVwKDMwMDApOworCisJCQkvKiBNYWtlIHN1cmUgcmVzZXQgYWRhcHRlciBiaXQgaXMgY2xlYXJlZCAqLworCQkJaG9zdF9kaWFnID0gcmVhZGwoJmluc3RhbmNlLT5yZWdfc2V0LT5mdXNpb25faG9zdF9kaWFnKTsKKwkJCXJldHJ5ID0gMDsKKwkJCXdoaWxlIChob3N0X2RpYWcgJiBIT1NUX0RJQUdfUkVTRVRfQURBUFRFUikgeworCQkJCW1zbGVlcCgxMDApOworCQkJCWhvc3RfZGlhZyA9CisJCQkJcmVhZGwoJmluc3RhbmNlLT5yZWdfc2V0LT5mdXNpb25faG9zdF9kaWFnKTsKKwkJCQlpZiAocmV0cnkrKyA9PSAxMDAwKSB7CisJCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIm1lZ2FyYWlkX3NhczogIgorCQkJCQkgICAgICAgIkRpYWcgcmVzZXQgYWRhcHRlciBuZXZlciAiCisJCQkJCSAgICAgICAiY2xlYXJlZCFcbiIpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQlpZiAoaG9zdF9kaWFnICYgSE9TVF9ESUFHX1JFU0VUX0FEQVBURVIpCisJCQkJY29udGludWU7CisKKwkJCWFic19zdGF0ZSA9CisJCQkJaW5zdGFuY2UtPmluc3RhbmNldC0+cmVhZF9md19zdGF0dXNfcmVnKAorCQkJCQlpbnN0YW5jZS0+cmVnX3NldCk7CisJCQlyZXRyeSA9IDA7CisKKwkJCXdoaWxlICgoYWJzX3N0YXRlIDw9IE1GSV9TVEFURV9GV19JTklUKSAmJgorCQkJICAgICAgIChyZXRyeSsrIDwgMTAwMCkpIHsKKwkJCQltc2xlZXAoMTAwKTsKKwkJCQlhYnNfc3RhdGUgPQorCQkJCWluc3RhbmNlLT5pbnN0YW5jZXQtPnJlYWRfZndfc3RhdHVzX3JlZygKKwkJCQkJaW5zdGFuY2UtPnJlZ19zZXQpOworCQkJfQorCQkJaWYgKGFic19zdGF0ZSA8PSBNRklfU1RBVEVfRldfSU5JVCkgeworCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIm1lZ2FyYWlkX3NhczogZmlybXdhcmUgIgorCQkJCSAgICAgICAic3RhdGUgPCBNRklfU1RBVEVfRldfSU5JVCwgc3RhdGUgPSAiCisJCQkJICAgICAgICIweCV4XG4iLCBhYnNfc3RhdGUpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQkvKiBXYWl0IGZvciBGVyB0byBiZWNvbWUgcmVhZHkgKi8KKwkJCWlmIChtZWdhc2FzX3RyYW5zaXRpb25fdG9fcmVhZHkoaW5zdGFuY2UpKSB7CisJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAibWVnYXJhaWRfc2FzOiBGYWlsZWQgdG8gIgorCQkJCSAgICAgICAidHJhbnNpdGlvbiBjb250cm9sbGVyIHRvIHJlYWR5LlxuIik7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCW1lZ2FzYXNfcmVzZXRfcmVwbHlfZGVzYyhpbnN0YW5jZSk7CisJCQlpZiAobWVnYXNhc19pb2NfaW5pdF9mdXNpb24oaW5zdGFuY2UpKSB7CisJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAibWVnYXJhaWRfc2FzOiAiCisJCQkJICAgICAgICJtZWdhc2FzX2lvY19pbml0X2Z1c2lvbigpIGZhaWxlZCFcbiIpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlpbnN0YW5jZS0+aW5zdGFuY2V0LT5lbmFibGVfaW50cihpbnN0YW5jZS0+cmVnX3NldCk7CisJCQlpbnN0YW5jZS0+YWRwcmVjb3ZlcnkgPSBNRUdBU0FTX0hCQV9PUEVSQVRJT05BTDsKKworCQkJLyogUmUtZmlyZSBtYW5hZ2VtZW50IGNvbW1hbmRzICovCisJCQlmb3IgKGogPSAwIDsgaiA8IGluc3RhbmNlLT5tYXhfZndfY21kczsgaisrKSB7CisJCQkJY21kX2Z1c2lvbiA9IGZ1c2lvbi0+Y21kX2xpc3Rbal07CisJCQkJaWYgKGNtZF9mdXNpb24tPnN5bmNfY21kX2lkeCAhPQorCQkJCSAgICAodTMyKVVMT05HX01BWCkgeworCQkJCQljbWRfbWZpID0KKwkJCQkJaW5zdGFuY2UtPgorCQkJCQljbWRfbGlzdFtjbWRfZnVzaW9uLT5zeW5jX2NtZF9pZHhdOworCQkJCQlpZiAoY21kX21maS0+ZnJhbWUtPmRjbWQub3Bjb2RlID09CisJCQkJCSAgICBNUl9EQ01EX0xEX01BUF9HRVRfSU5GTykgeworCQkJCQkJbWVnYXNhc19yZXR1cm5fY21kKGluc3RhbmNlLAorCQkJCQkJCQkgICBjbWRfbWZpKTsKKwkJCQkJCW1lZ2FzYXNfcmV0dXJuX2NtZF9mdXNpb24oCisJCQkJCQkJaW5zdGFuY2UsIGNtZF9mdXNpb24pOworCQkJCQl9IGVsc2UgIHsKKwkJCQkJCXJlcV9kZXNjID0KKwkJCQkJCW1lZ2FzYXNfZ2V0X3JlcXVlc3RfZGVzY3JpcHRvcigKKwkJCQkJCQlpbnN0YW5jZSwKKwkJCQkJCQljbWRfbWZpLT5jb250ZXh0LnNtaWQKKwkJCQkJCQktMSk7CisJCQkJCQlpZiAoIXJlcV9kZXNjKQorCQkJCQkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCQkJCQkgICAgICAgInJlcV9kZXNjIE5VTEwiCisJCQkJCQkJICAgICAgICJcbiIpOworCQkJCQkJZWxzZSB7CisJCQkJCQkJaW5zdGFuY2UtPmluc3RhbmNldC0+CisJCQkJCQkJZmlyZV9jbWQoaW5zdGFuY2UsCisJCQkJCQkJCSByZXFfZGVzYy0+CisJCQkJCQkJCSB1LmxvdywKKwkJCQkJCQkJIHJlcV9kZXNjLT4KKwkJCQkJCQkJIHUuaGlnaCwKKwkJCQkJCQkJIGluc3RhbmNlLT4KKwkJCQkJCQkJIHJlZ19zZXQpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfQorCisJCQkvKiBSZXNldCBsb2FkIGJhbGFuY2UgaW5mbyAqLworCQkJbWVtc2V0KGZ1c2lvbi0+bG9hZF9iYWxhbmNlX2luZm8sIDAsCisJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBMRF9MT0FEX0JBTEFOQ0VfSU5GTykKKwkJCSAgICAgICAqTUFYX0xPR0lDQUxfRFJJVkVTKTsKKworCQkJaWYgKCFtZWdhc2FzX2dldF9tYXBfaW5mbyhpbnN0YW5jZSkpCisJCQkJbWVnYXNhc19zeW5jX21hcF9pbmZvKGluc3RhbmNlKTsKKworCQkJLyogQWRhcHRlciByZXNldCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5ICovCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJtZWdhcmFpZF9zYXM6IFJlc2V0ICIKKwkJCSAgICAgICAic3VjY2Vzc2Z1bC5cbiIpOworCQkJcmV0dmFsID0gU1VDQ0VTUzsKKwkJCWdvdG8gb3V0OworCQl9CisJCS8qIFJlc2V0IGZhaWxlZCwga2lsbCB0aGUgYWRhcHRlciAqLworCQlwcmludGsoS0VSTl9XQVJOSU5HICJtZWdhcmFpZF9zYXM6IFJlc2V0IGZhaWxlZCwga2lsbGluZyAiCisJCSAgICAgICAiYWRhcHRlci5cbiIpOworCQltZWdhcmFpZF9zYXNfa2lsbF9oYmEoaW5zdGFuY2UpOworCQlyZXR2YWwgPSBGQUlMRUQ7CisJfSBlbHNlIHsKKwkJaW5zdGFuY2UtPmluc3RhbmNldC0+ZW5hYmxlX2ludHIoaW5zdGFuY2UtPnJlZ19zZXQpOworCQlpbnN0YW5jZS0+YWRwcmVjb3ZlcnkgPSBNRUdBU0FTX0hCQV9PUEVSQVRJT05BTDsKKwl9CitvdXQ6CisJY2xlYXJfYml0KE1FR0FTQVNfRlVTSU9OX0lOX1JFU0VULCAmaW5zdGFuY2UtPnJlc2V0X2ZsYWdzKTsKKwltdXRleF91bmxvY2soJmluc3RhbmNlLT5yZXNldF9tdXRleCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworLyogRnVzaW9uIE9DUiB3b3JrIHF1ZXVlICovCit2b2lkIG1lZ2FzYXNfZnVzaW9uX29jcl93cShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlLCB3b3JrX2luaXQpOworCisJbWVnYXNhc19yZXNldF9mdXNpb24oaW5zdGFuY2UtPmhvc3QpOworfQorCitzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZV90ZW1wbGF0ZSBtZWdhc2FzX2luc3RhbmNlX3RlbXBsYXRlX2Z1c2lvbiA9IHsKKwkuZmlyZV9jbWQgPSBtZWdhc2FzX2ZpcmVfY21kX2Z1c2lvbiwKKwkuZW5hYmxlX2ludHIgPSBtZWdhc2FzX2VuYWJsZV9pbnRyX2Z1c2lvbiwKKwkuZGlzYWJsZV9pbnRyID0gbWVnYXNhc19kaXNhYmxlX2ludHJfZnVzaW9uLAorCS5jbGVhcl9pbnRyID0gbWVnYXNhc19jbGVhcl9pbnRyX2Z1c2lvbiwKKwkucmVhZF9md19zdGF0dXNfcmVnID0gbWVnYXNhc19yZWFkX2Z3X3N0YXR1c19yZWdfZnVzaW9uLAorCS5hZHBfcmVzZXQgPSBtZWdhc2FzX2FkcF9yZXNldF9mdXNpb24sCisJLmNoZWNrX3Jlc2V0ID0gbWVnYXNhc19jaGVja19yZXNldF9mdXNpb24sCisJLnNlcnZpY2VfaXNyID0gbWVnYXNhc19pc3JfZnVzaW9uLAorCS50YXNrbGV0ID0gbWVnYXNhc19jb21wbGV0ZV9jbWRfZHBjX2Z1c2lvbiwKKwkuaW5pdF9hZGFwdGVyID0gbWVnYXNhc19pbml0X2FkYXB0ZXJfZnVzaW9uLAorCS5idWlsZF9hbmRfaXNzdWVfY21kID0gbWVnYXNhc19idWlsZF9hbmRfaXNzdWVfY21kX2Z1c2lvbiwKKwkuaXNzdWVfZGNtZCA9IG1lZ2FzYXNfaXNzdWVfZGNtZF9mdXNpb24sCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhc19mdXNpb24uaCBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXNfZnVzaW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODJiNTc3YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXNfZnVzaW9uLmgKQEAgLTAsMCArMSw2OTUgQEAKKy8qCisgKiAgTGludXggTWVnYVJBSUQgZHJpdmVyIGZvciBTQVMgYmFzZWQgUkFJRCBjb250cm9sbGVycworICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMSAgTFNJIENvcnBvcmF0aW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqCisgKiAgRklMRTogbWVnYXJhaWRfc2FzX2Z1c2lvbi5oCisgKgorICogIEF1dGhvcnM6IExTSSBDb3Jwb3JhdGlvbgorICogICAgICAgICAgIE1hbm9qIEpvc2UKKyAqICAgICAgICAgICBTdW1hbnQgUGF0cm8KKyAqCisgKiAgU2VuZCBmZWVkYmFjayB0bzogPG1lZ2FyYWlkbGludXhAbHNpLmNvbT4KKyAqCisgKiAgTWFpbCB0bzogTFNJIENvcnBvcmF0aW9uLCAxNjIxIEJhcmJlciBMYW5lLCBNaWxwaXRhcywgQ0EgOTUwMzUKKyAqICAgICBBVFROOiBMaW51eHJhaWQKKyAqLworCisjaWZuZGVmIF9NRUdBUkFJRF9TQVNfRlVTSU9OX0hfCisjZGVmaW5lIF9NRUdBUkFJRF9TQVNfRlVTSU9OX0hfCisKKy8qIEZ1c2lvbiBkZWZpbmVzICovCisjZGVmaW5lIE1FR0FTQVNfTUFYX1NaX0NIQUlOX0ZSQU1FIDEwMjQKKyNkZWZpbmUgTUZJX0ZVU0lPTl9FTkFCTEVfSU5URVJSVVBUX01BU0sgKDB4MDAwMDAwMDkpCisjZGVmaW5lIE1FR0FfTVBJMl9SQUlEX0RFRkFVTFRfSU9fRlJBTUVfU0laRSAyNTYKKyNkZWZpbmUgTUVHQVNBU19NUEkyX0ZVTkNUSU9OX1BBU1NUSFJVX0lPX1JFUVVFU1QgICAweEYwCisjZGVmaW5lIE1FR0FTQVNfTVBJMl9GVU5DVElPTl9MRF9JT19SRVFVRVNUICAgICAgICAgMHhGMQorI2RlZmluZSBNRUdBU0FTX0xPQURfQkFMQU5DRV9GTEFHCQkgICAgMHgxCisjZGVmaW5lIE1FR0FTQVNfRENNRF9NQk9YX1BFTkRfRkxBRwkJICAgIDB4MQorI2RlZmluZSBIT1NUX0RJQUdfV1JJVEVfRU5BQkxFCQkJICAgIDB4ODAKKyNkZWZpbmUgSE9TVF9ESUFHX1JFU0VUX0FEQVBURVIJCQkgICAgMHg0CisjZGVmaW5lIE1FR0FTQVNfRlVTSU9OX01BWF9SRVNFVF9UUklFUwkJICAgIDMKKworLyogVDEwIFBJIGRlZmluZXMgKi8KKyNkZWZpbmUgTVJfUFJPVF9JTkZPX1RZUEVfQ09OVFJPTExFUiAgICAgICAgICAgICAgICAweDgKKyNkZWZpbmUgTUVHQVNBU19TQ1NJX1ZBUklBQkxFX0xFTkdUSF9DTUQgICAgICAgICAgICAweDdmCisjZGVmaW5lIE1FR0FTQVNfU0NTSV9TRVJWSUNFX0FDVElPTl9SRUFEMzIgICAgICAgICAgMHg5CisjZGVmaW5lIE1FR0FTQVNfU0NTSV9TRVJWSUNFX0FDVElPTl9XUklURTMyICAgICAgICAgMHhCCisjZGVmaW5lIE1FR0FTQVNfU0NTSV9BRERMX0NEQl9MRU4gICAgICAgICAgICAgICAgICAgMHgxOAorI2RlZmluZSBNRUdBU0FTX1JEX1dSX1BST1RFQ1RfQ0hFQ0tfQUxMCQkgICAgMHgyMAorI2RlZmluZSBNRUdBU0FTX1JEX1dSX1BST1RFQ1RfQ0hFQ0tfTk9ORQkgICAgMHg2MAorI2RlZmluZSBNRUdBU0FTX0VFRFBCTE9DS1NJWkUJCQkgICAgNTEyCisKKy8qCisgKiBSYWlkIGNvbnRleHQgZmxhZ3MKKyAqLworCisjZGVmaW5lIE1SX1JBSURfQ1RYX1JBSURfRkxBR1NfSU9fU1VCX1RZUEVfU0hJRlQgICAweDQKKyNkZWZpbmUgTVJfUkFJRF9DVFhfUkFJRF9GTEFHU19JT19TVUJfVFlQRV9NQVNLICAgIDB4MzAKK2VudW0gTVJfUkFJRF9GTEFHU19JT19TVUJfVFlQRSB7CisJTVJfUkFJRF9GTEFHU19JT19TVUJfVFlQRV9OT05FID0gMCwKKwlNUl9SQUlEX0ZMQUdTX0lPX1NVQl9UWVBFX1NZU1RFTV9QRCA9IDEsCit9OworCisvKgorICogUmVxdWVzdCBkZXNjcmlwdG9yIHR5cGVzCisgKi8KKyNkZWZpbmUgTUVHQVNBU19SRVFfREVTQ1JJUFRfRkxBR1NfTERfSU8gICAgICAgICAgIDB4NworI2RlZmluZSBNRUdBU0FTX1JFUV9ERVNDUklQVF9GTEFHU19NRkEgICAgICAgICAgICAgMHgxCisKKyNkZWZpbmUgTUVHQVNBU19SRVFfREVTQ1JJUFRfRkxBR1NfVFlQRV9TSElGVCAgICAgIDEKKworI2RlZmluZSBNRUdBU0FTX0ZQX0NNRF9MRU4JMTYKKyNkZWZpbmUgTUVHQVNBU19GVVNJT05fSU5fUkVTRVQgMAorCisvKgorICogUmFpZCBDb250ZXh0IHN0cnVjdHVyZSB3aGljaCBkZXNjcmliZXMgTWVnYVJBSUQgc3BlY2lmaWMgSU8gUGFyYW1lbnRlcnMKKyAqIFRoaXMgcmVzaWRlcyBhdCBvZmZzZXQgMHg2MCB3aGVyZSB0aGUgU0dMIG5vcm1hbGx5IHN0YXJ0cyBpbiBNUFQgSU8gRnJhbWVzCisgKi8KKworc3RydWN0IFJBSURfQ09OVEVYVCB7CisJdTE2ICAgICByZXN2ZDA7CisJdTE2ICAgICB0aW1lb3V0VmFsdWU7CisJdTggICAgICByZWdMb2NrRmxhZ3M7CisJdTggICAgICByZXN2ZDE7CisJdTE2ICAgICBWaXJ0dWFsRGlza1RndElkOworCXU2NCAgICAgcmVnTG9ja1Jvd0xCQTsKKwl1MzIgICAgIHJlZ0xvY2tMZW5ndGg7CisJdTE2ICAgICBuZXh0TE1JZDsKKwl1OCAgICAgIGV4U3RhdHVzOworCXU4ICAgICAgc3RhdHVzOworCXU4ICAgICAgUkFJREZsYWdzOworCXU4ICAgICAgbnVtU0dFOworCXUxNgljb25maWdTZXFOdW07CisJdTggICAgICBzcGFuQXJtOworCXU4ICAgICAgcmVzdmQyWzNdOworfTsKKworI2RlZmluZSBSQUlEX0NUWF9TUEFOQVJNX0FSTV9TSElGVAkoMCkKKyNkZWZpbmUgUkFJRF9DVFhfU1BBTkFSTV9BUk1fTUFTSwkoMHgxZikKKworI2RlZmluZSBSQUlEX0NUWF9TUEFOQVJNX1NQQU5fU0hJRlQJKDUpCisjZGVmaW5lIFJBSURfQ1RYX1NQQU5BUk1fU1BBTl9NQVNLCSgweEUwKQorCisvKgorICogZGVmaW5lIHJlZ2lvbiBsb2NrIHR5cGVzCisgKi8KK2VudW0gUkVHSU9OX1RZUEUgeworCVJFR0lPTl9UWVBFX1VOVVNFRCAgICAgICA9IDAsCisJUkVHSU9OX1RZUEVfU0hBUkVEX1JFQUQgID0gMSwKKwlSRUdJT05fVFlQRV9TSEFSRURfV1JJVEUgPSAyLAorCVJFR0lPTl9UWVBFX0VYQ0xVU0lWRSAgICA9IDMsCit9OworCisvKiBNUEkyIGRlZmluZXMgKi8KKyNkZWZpbmUgTVBJMl9GVU5DVElPTl9JT0NfSU5JVCAgICAgICAgICAgICAgKDB4MDIpIC8qIElPQyBJbml0ICovCisjZGVmaW5lIE1QSTJfV0hPSU5JVF9IT1NUX0RSSVZFUiAgICAgICAgICAgICgweDA0KQorI2RlZmluZSBNUEkyX1ZFUlNJT05fTUFKT1IgICAgICAgICAgICAgICAgICAoMHgwMikKKyNkZWZpbmUgTVBJMl9WRVJTSU9OX01JTk9SICAgICAgICAgICAgICAgICAgKDB4MDApCisjZGVmaW5lIE1QSTJfVkVSU0lPTl9NQUpPUl9NQVNLICAgICAgICAgICAgICgweEZGMDApCisjZGVmaW5lIE1QSTJfVkVSU0lPTl9NQUpPUl9TSElGVCAgICAgICAgICAgICg4KQorI2RlZmluZSBNUEkyX1ZFUlNJT05fTUlOT1JfTUFTSyAgICAgICAgICAgICAoMHgwMEZGKQorI2RlZmluZSBNUEkyX1ZFUlNJT05fTUlOT1JfU0hJRlQgICAgICAgICAgICAoMCkKKyNkZWZpbmUgTVBJMl9WRVJTSU9OICgoTVBJMl9WRVJTSU9OX01BSk9SIDw8IE1QSTJfVkVSU0lPTl9NQUpPUl9TSElGVCkgfCBcCisJCSAgICAgIE1QSTJfVkVSU0lPTl9NSU5PUikKKyNkZWZpbmUgTVBJMl9IRUFERVJfVkVSU0lPTl9VTklUICAgICAgICAgICAgKDB4MTApCisjZGVmaW5lIE1QSTJfSEVBREVSX1ZFUlNJT05fREVWICAgICAgICAgICAgICgweDAwKQorI2RlZmluZSBNUEkyX0hFQURFUl9WRVJTSU9OX1VOSVRfTUFTSyAgICAgICAoMHhGRjAwKQorI2RlZmluZSBNUEkyX0hFQURFUl9WRVJTSU9OX1VOSVRfU0hJRlQgICAgICAoOCkKKyNkZWZpbmUgTVBJMl9IRUFERVJfVkVSU0lPTl9ERVZfTUFTSyAgICAgICAgKDB4MDBGRikKKyNkZWZpbmUgTVBJMl9IRUFERVJfVkVSU0lPTl9ERVZfU0hJRlQgICAgICAgKDApCisjZGVmaW5lIE1QSTJfSEVBREVSX1ZFUlNJT04gKChNUEkyX0hFQURFUl9WRVJTSU9OX1VOSVQgPDwgOCkgfCBcCisJCQkgICAgIE1QSTJfSEVBREVSX1ZFUlNJT05fREVWKQorI2RlZmluZSBNUEkyX0lFRUVfU0dFX0ZMQUdTX0lPQ1BMQk5UQV9BRERSICAgICAgKDB4MDMpCisjZGVmaW5lIE1QSTJfU0NTSUlPX0VFRFBGTEFHU19JTkNfUFJJX1JFRlRBRyAgICAgICAgKDB4ODAwMCkKKyNkZWZpbmUgTVBJMl9TQ1NJSU9fRUVEUEZMQUdTX0NIRUNLX1JFRlRBRyAgICAgICAgICAoMHgwNDAwKQorI2RlZmluZSBNUEkyX1NDU0lJT19FRURQRkxBR1NfQ0hFQ0tfUkVNT1ZFX09QICAgICAgICgweDAwMDMpCisjZGVmaW5lIE1QSTJfU0NTSUlPX0VFRFBGTEFHU19DSEVDS19BUFBUQUcgICAgICAgICAgKDB4MDIwMCkKKyNkZWZpbmUgTVBJMl9TQ1NJSU9fRUVEUEZMQUdTX0NIRUNLX0dVQVJEICAgICAgICAgICAoMHgwMTAwKQorI2RlZmluZSBNUEkyX1NDU0lJT19FRURQRkxBR1NfSU5TRVJUX09QICAgICAgICAgICAgICgweDAwMDQpCisjZGVmaW5lIE1QSTJfRlVOQ1RJT05fU0NTSV9JT19SRVFVRVNUICAgICAgICAgICAgICAgKDB4MDApIC8qIFNDU0kgSU8gKi8KKyNkZWZpbmUgTVBJMl9SRVFfREVTQ1JJUFRfRkxBR1NfSElHSF9QUklPUklUWSAgICAgICAgICAgKDB4MDYpCisjZGVmaW5lIE1QSTJfUkVRX0RFU0NSSVBUX0ZMQUdTX1NDU0lfSU8gICAgICAgICAgICAgICAgICgweDAwKQorI2RlZmluZSBNUEkyX1NHRV9GTEFHU182NF9CSVRfQUREUkVTU0lORyAgICAgICAgKDB4MDIpCisjZGVmaW5lIE1QSTJfU0NTSUlPX0NPTlRST0xfV1JJVEUgICAgICAgICAgICAgICAoMHgwMTAwMDAwMCkKKyNkZWZpbmUgTVBJMl9TQ1NJSU9fQ09OVFJPTF9SRUFEICAgICAgICAgICAgICAgICgweDAyMDAwMDAwKQorI2RlZmluZSBNUEkyX1JFUV9ERVNDUklQVF9GTEFHU19UWVBFX01BU0sgICAgICAgKDB4MEUpCisjZGVmaW5lIE1QSTJfUlBZX0RFU0NSSVBUX0ZMQUdTX1VOVVNFRCAgICAgICAgICAoMHgwRikKKyNkZWZpbmUgTVBJMl9SUFlfREVTQ1JJUFRfRkxBR1NfU0NTSV9JT19TVUNDRVNTICgweDAwKQorI2RlZmluZSBNUEkyX1JQWV9ERVNDUklQVF9GTEFHU19UWVBFX01BU0sgICAgICAgKDB4MEYpCisjZGVmaW5lIE1QSTJfV1JTRVFfRkxVU0hfS0VZX1ZBTFVFICAgICAgICAgICAgICAoMHgwKQorI2RlZmluZSBNUEkyX1dSSVRFX1NFUVVFTkNFX09GRlNFVCAgICAgICAgICAgICAgKDB4MDAwMDAwMDQpCisjZGVmaW5lIE1QSTJfV1JTRVFfMVNUX0tFWV9WQUxVRSAgICAgICAgICAgICAgICAoMHhGKQorI2RlZmluZSBNUEkyX1dSU0VRXzJORF9LRVlfVkFMVUUgICAgICAgICAgICAgICAgKDB4NCkKKyNkZWZpbmUgTVBJMl9XUlNFUV8zUkRfS0VZX1ZBTFVFICAgICAgICAgICAgICAgICgweEIpCisjZGVmaW5lIE1QSTJfV1JTRVFfNFRIX0tFWV9WQUxVRSAgICAgICAgICAgICAgICAoMHgyKQorI2RlZmluZSBNUEkyX1dSU0VRXzVUSF9LRVlfVkFMVUUgICAgICAgICAgICAgICAgKDB4NykKKyNkZWZpbmUgTVBJMl9XUlNFUV82VEhfS0VZX1ZBTFVFICAgICAgICAgICAgICAgICgweEQpCisKK3N0cnVjdCBNUEkyNV9JRUVFX1NHRV9DSEFJTjY0IHsKKwl1NjQgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzOworCXUzMiAgICAgICAgICAgICAgICAgICAgIExlbmd0aDsKKwl1MTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7CisJdTggICAgICAgICAgICAgICAgICAgICAgTmV4dENoYWluT2Zmc2V0OworCXU4ICAgICAgICAgICAgICAgICAgICAgIEZsYWdzOworfTsKKworc3RydWN0IE1QSTJfU0dFX1NJTVBMRV9VTklPTiB7CisJdTMyICAgICAgICAgICAgICAgICAgICAgRmxhZ3NMZW5ndGg7CisJdW5pb24geworCQl1MzIgICAgICAgICAgICAgICAgIEFkZHJlc3MzMjsKKwkJdTY0ICAgICAgICAgICAgICAgICBBZGRyZXNzNjQ7CisJfSB1OworfTsKKworc3RydWN0IE1QSTJfU0NTSV9JT19DREJfRUVEUDMyIHsKKwl1OCAgICAgICAgICAgICAgICAgICAgICBDREJbMjBdOyAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworCXUzMiAgICAgICAgICAgICAgICAgICAgIFByaW1hcnlSZWZlcmVuY2VUYWc7ICAgICAgICAvKiAweDE0ICovCisJdTE2ICAgICAgICAgICAgICAgICAgICAgUHJpbWFyeUFwcGxpY2F0aW9uVGFnOyAgICAgIC8qIDB4MTggKi8KKwl1MTYgICAgICAgICAgICAgICAgICAgICBQcmltYXJ5QXBwbGljYXRpb25UYWdNYXNrOyAgLyogMHgxQSAqLworCXUzMiAgICAgICAgICAgICAgICAgICAgIFRyYW5zZmVyTGVuZ3RoOyAgICAgICAgICAgICAvKiAweDFDICovCit9OworCitzdHJ1Y3QgTVBJMl9TR0VfQ0hBSU5fVU5JT04geworCXUxNiAgICAgICAgICAgICAgICAgICAgIExlbmd0aDsKKwl1OCAgICAgICAgICAgICAgICAgICAgICBOZXh0Q2hhaW5PZmZzZXQ7CisJdTggICAgICAgICAgICAgICAgICAgICAgRmxhZ3M7CisJdW5pb24geworCQl1MzIgICAgICAgICAgICAgICAgIEFkZHJlc3MzMjsKKwkJdTY0ICAgICAgICAgICAgICAgICBBZGRyZXNzNjQ7CisJfSB1OworfTsKKworc3RydWN0IE1QSTJfSUVFRV9TR0VfU0lNUExFMzIgeworCXUzMiAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3M7CisJdTMyICAgICAgICAgICAgICAgICAgICAgRmxhZ3NMZW5ndGg7Cit9OworCitzdHJ1Y3QgTVBJMl9JRUVFX1NHRV9DSEFJTjMyIHsKKwl1MzIgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzOworCXUzMiAgICAgICAgICAgICAgICAgICAgIEZsYWdzTGVuZ3RoOworfTsKKworc3RydWN0IE1QSTJfSUVFRV9TR0VfU0lNUExFNjQgeworCXU2NCAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3M7CisJdTMyICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoOworCXUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsKKwl1OCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7CisJdTggICAgICAgICAgICAgICAgICAgICAgRmxhZ3M7Cit9OworCitzdHJ1Y3QgTVBJMl9JRUVFX1NHRV9DSEFJTjY0IHsKKwl1NjQgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzOworCXUzMiAgICAgICAgICAgICAgICAgICAgIExlbmd0aDsKKwl1MTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7CisJdTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOworCXU4ICAgICAgICAgICAgICAgICAgICAgIEZsYWdzOworfTsKKwordW5pb24gTVBJMl9JRUVFX1NHRV9TSU1QTEVfVU5JT04geworCXN0cnVjdCBNUEkyX0lFRUVfU0dFX1NJTVBMRTMyICBTaW1wbGUzMjsKKwlzdHJ1Y3QgTVBJMl9JRUVFX1NHRV9TSU1QTEU2NCAgU2ltcGxlNjQ7Cit9OworCit1bmlvbiBNUEkyX0lFRUVfU0dFX0NIQUlOX1VOSU9OIHsKKwlzdHJ1Y3QgTVBJMl9JRUVFX1NHRV9DSEFJTjMyICAgQ2hhaW4zMjsKKwlzdHJ1Y3QgTVBJMl9JRUVFX1NHRV9DSEFJTjY0ICAgQ2hhaW42NDsKK307CisKK3VuaW9uIE1QSTJfU0dFX0lPX1VOSU9OIHsKKwlzdHJ1Y3QgTVBJMl9TR0VfU0lNUExFX1VOSU9OICAgICAgIE1waVNpbXBsZTsKKwlzdHJ1Y3QgTVBJMl9TR0VfQ0hBSU5fVU5JT04gICAgICAgIE1waUNoYWluOworCXVuaW9uIE1QSTJfSUVFRV9TR0VfU0lNUExFX1VOSU9OICBJZWVlU2ltcGxlOworCXVuaW9uIE1QSTJfSUVFRV9TR0VfQ0hBSU5fVU5JT04gICBJZWVlQ2hhaW47Cit9OworCit1bmlvbiBNUEkyX1NDU0lfSU9fQ0RCX1VOSU9OIHsKKwl1OCAgICAgICAgICAgICAgICAgICAgICBDREIzMlszMl07CisJc3RydWN0IE1QSTJfU0NTSV9JT19DREJfRUVEUDMyIEVFRFAzMjsKKwlzdHJ1Y3QgTVBJMl9TR0VfU0lNUExFX1VOSU9OIFNHRTsKK307CisKKy8qCisgKiBSQUlEIFNDU0kgSU8gUmVxdWVzdCBNZXNzYWdlCisgKiBUb3RhbCBTR0UgY291bnQgd2lsbCBiZSBvbmUgbGVzcyB0aGFuICBfTVBJMl9TQ1NJX0lPX1JFUVVFU1QKKyAqLworc3RydWN0IE1QSTJfUkFJRF9TQ1NJX0lPX1JFUVVFU1QgeworCXUxNiAgICAgICAgICAgICAgICAgICAgIERldkhhbmRsZTsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworCXU4ICAgICAgICAgICAgICAgICAgICAgIENoYWluT2Zmc2V0OyAgICAgICAgICAgICAgICAgICAgLyogMHgwMiAqLworCXU4ICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMyAqLworCXUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwNCAqLworCXU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwNiAqLworCXU4ICAgICAgICAgICAgICAgICAgICAgIE1zZ0ZsYWdzOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwNyAqLworCXU4ICAgICAgICAgICAgICAgICAgICAgIFZQX0lEOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOCAqLworCXU4ICAgICAgICAgICAgICAgICAgICAgIFZGX0lEOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOSAqLworCXUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwQSAqLworCXUzMiAgICAgICAgICAgICAgICAgICAgIFNlbnNlQnVmZmVyTG93QWRkcmVzczsgICAgICAgICAgLyogMHgwQyAqLworCXUxNiAgICAgICAgICAgICAgICAgICAgIFNHTEZsYWdzOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgxMCAqLworCXU4ICAgICAgICAgICAgICAgICAgICAgIFNlbnNlQnVmZmVyTGVuZ3RoOyAgICAgICAgICAgICAgLyogMHgxMiAqLworCXU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgxMyAqLworCXU4ICAgICAgICAgICAgICAgICAgICAgIFNHTE9mZnNldDA7ICAgICAgICAgICAgICAgICAgICAgLyogMHgxNCAqLworCXU4ICAgICAgICAgICAgICAgICAgICAgIFNHTE9mZnNldDE7ICAgICAgICAgICAgICAgICAgICAgLyogMHgxNSAqLworCXU4ICAgICAgICAgICAgICAgICAgICAgIFNHTE9mZnNldDI7ICAgICAgICAgICAgICAgICAgICAgLyogMHgxNiAqLworCXU4ICAgICAgICAgICAgICAgICAgICAgIFNHTE9mZnNldDM7ICAgICAgICAgICAgICAgICAgICAgLyogMHgxNyAqLworCXUzMiAgICAgICAgICAgICAgICAgICAgIFNraXBDb3VudDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgxOCAqLworCXUzMiAgICAgICAgICAgICAgICAgICAgIERhdGFMZW5ndGg7ICAgICAgICAgICAgICAgICAgICAgLyogMHgxQyAqLworCXUzMiAgICAgICAgICAgICAgICAgICAgIEJpZGlyZWN0aW9uYWxEYXRhTGVuZ3RoOyAgICAgICAgLyogMHgyMCAqLworCXUxNiAgICAgICAgICAgICAgICAgICAgIElvRmxhZ3M7ICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgyNCAqLworCXUxNiAgICAgICAgICAgICAgICAgICAgIEVFRFBGbGFnczsgICAgICAgICAgICAgICAgICAgICAgLyogMHgyNiAqLworCXUzMiAgICAgICAgICAgICAgICAgICAgIEVFRFBCbG9ja1NpemU7ICAgICAgICAgICAgICAgICAgLyogMHgyOCAqLworCXUzMiAgICAgICAgICAgICAgICAgICAgIFNlY29uZGFyeVJlZmVyZW5jZVRhZzsgICAgICAgICAgLyogMHgyQyAqLworCXUxNiAgICAgICAgICAgICAgICAgICAgIFNlY29uZGFyeUFwcGxpY2F0aW9uVGFnOyAgICAgICAgLyogMHgzMCAqLworCXUxNiAgICAgICAgICAgICAgICAgICAgIEFwcGxpY2F0aW9uVGFnVHJhbnNsYXRpb25NYXNrOyAgLyogMHgzMiAqLworCXU4ICAgICAgICAgICAgICAgICAgICAgIExVTls4XTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgzNCAqLworCXUzMiAgICAgICAgICAgICAgICAgICAgIENvbnRyb2w7ICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgzQyAqLworCXVuaW9uIE1QSTJfU0NTSV9JT19DREJfVU5JT04gIENEQjsJCQkvKiAweDQwICovCisJc3RydWN0IFJBSURfQ09OVEVYVAlSYWlkQ29udGV4dDsgICAgICAgICAgICAgICAgICAgIC8qIDB4NjAgKi8KKwl1bmlvbiBNUEkyX1NHRV9JT19VTklPTiAgICAgICBTR0w7CQkJLyogMHg4MCAqLworfTsKKworLyoKKyAqIE1QVCBSQUlEIE1GQSBJTyBEZXNjcmlwdG9yLgorICovCitzdHJ1Y3QgTUVHQVNBU19SQUlEX01GQV9JT19SRVFVRVNUX0RFU0NSSVBUT1IgeworCXUzMiAgICAgUmVxdWVzdEZsYWdzOjg7CisJdTMyICAgICBNZXNzYWdlQWRkcmVzczE6MjQ7IC8qIGJpdHMgMzE6OCovCisJdTMyICAgICBNZXNzYWdlQWRkcmVzczI7ICAgICAgLyogYml0cyA2MTozMiAqLworfTsKKworLyogRGVmYXVsdCBSZXF1ZXN0IERlc2NyaXB0b3IgKi8KK3N0cnVjdCBNUEkyX0RFRkFVTFRfUkVRVUVTVF9ERVNDUklQVE9SIHsKKwl1OCAgICAgICAgICAgICAgUmVxdWVzdEZsYWdzOyAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKwl1OCAgICAgICAgICAgICAgTVNJeEluZGV4OyAgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KKwl1MTYgICAgICAgICAgICAgU01JRDsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KKwl1MTYgICAgICAgICAgICAgTE1JRDsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KKwl1MTYgICAgICAgICAgICAgRGVzY3JpcHRvclR5cGVEZXBlbmRlbnQ7ICAgIC8qIDB4MDYgKi8KK307CisKKy8qIEhpZ2ggUHJpb3JpdHkgUmVxdWVzdCBEZXNjcmlwdG9yICovCitzdHJ1Y3QgTVBJMl9ISUdIX1BSSU9SSVRZX1JFUVVFU1RfREVTQ1JJUFRPUiB7CisJdTggICAgICAgICAgICAgIFJlcXVlc3RGbGFnczsgICAgICAgICAgICAgICAvKiAweDAwICovCisJdTggICAgICAgICAgICAgIE1TSXhJbmRleDsgICAgICAgICAgICAgICAgICAvKiAweDAxICovCisJdTE2ICAgICAgICAgICAgIFNNSUQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAyICovCisJdTE2ICAgICAgICAgICAgIExNSUQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCisJdTE2ICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAvKiAweDA2ICovCit9OworCisvKiBTQ1NJIElPIFJlcXVlc3QgRGVzY3JpcHRvciAqLworc3RydWN0IE1QSTJfU0NTSV9JT19SRVFVRVNUX0RFU0NSSVBUT1IgeworCXU4ICAgICAgICAgICAgICBSZXF1ZXN0RmxhZ3M7ICAgICAgICAgICAgICAgLyogMHgwMCAqLworCXU4ICAgICAgICAgICAgICBNU0l4SW5kZXg7ICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLworCXUxNiAgICAgICAgICAgICBTTUlEOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMiAqLworCXUxNiAgICAgICAgICAgICBMTUlEOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwNCAqLworCXUxNiAgICAgICAgICAgICBEZXZIYW5kbGU7ICAgICAgICAgICAgICAgICAgLyogMHgwNiAqLworfTsKKworLyogU0NTSSBUYXJnZXQgUmVxdWVzdCBEZXNjcmlwdG9yICovCitzdHJ1Y3QgTVBJMl9TQ1NJX1RBUkdFVF9SRVFVRVNUX0RFU0NSSVBUT1IgeworCXU4ICAgICAgICAgICAgICBSZXF1ZXN0RmxhZ3M7ICAgICAgICAgICAgICAgLyogMHgwMCAqLworCXU4ICAgICAgICAgICAgICBNU0l4SW5kZXg7ICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLworCXUxNiAgICAgICAgICAgICBTTUlEOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMiAqLworCXUxNiAgICAgICAgICAgICBMTUlEOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwNCAqLworCXUxNiAgICAgICAgICAgICBJb0luZGV4OyAgICAgICAgICAgICAgICAgICAgLyogMHgwNiAqLworfTsKKworLyogUkFJRCBBY2NlbGVyYXRvciBSZXF1ZXN0IERlc2NyaXB0b3IgKi8KK3N0cnVjdCBNUEkyX1JBSURfQUNDRUxfUkVRVUVTVF9ERVNDUklQVE9SIHsKKwl1OCAgICAgICAgICAgICAgUmVxdWVzdEZsYWdzOyAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKwl1OCAgICAgICAgICAgICAgTVNJeEluZGV4OyAgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KKwl1MTYgICAgICAgICAgICAgU01JRDsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KKwl1MTYgICAgICAgICAgICAgTE1JRDsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KKwl1MTYgICAgICAgICAgICAgUmVzZXJ2ZWQ7ICAgICAgICAgICAgICAgICAgIC8qIDB4MDYgKi8KK307CisKKy8qIHVuaW9uIG9mIFJlcXVlc3QgRGVzY3JpcHRvcnMgKi8KK3VuaW9uIE1FR0FTQVNfUkVRVUVTVF9ERVNDUklQVE9SX1VOSU9OIHsKKwlzdHJ1Y3QgTVBJMl9ERUZBVUxUX1JFUVVFU1RfREVTQ1JJUFRPUiAgICAgICAgICAgICBEZWZhdWx0OworCXN0cnVjdCBNUEkyX0hJR0hfUFJJT1JJVFlfUkVRVUVTVF9ERVNDUklQVE9SICAgICAgIEhpZ2hQcmlvcml0eTsKKwlzdHJ1Y3QgTVBJMl9TQ1NJX0lPX1JFUVVFU1RfREVTQ1JJUFRPUiAgICAgICAgICAgICBTQ1NJSU87CisJc3RydWN0IE1QSTJfU0NTSV9UQVJHRVRfUkVRVUVTVF9ERVNDUklQVE9SICAgICAgICAgU0NTSVRhcmdldDsKKwlzdHJ1Y3QgTVBJMl9SQUlEX0FDQ0VMX1JFUVVFU1RfREVTQ1JJUFRPUiAgICAgICAgICBSQUlEQWNjZWxlcmF0b3I7CisJc3RydWN0IE1FR0FTQVNfUkFJRF9NRkFfSU9fUkVRVUVTVF9ERVNDUklQVE9SICAgICAgTUZBSW87CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJdTMyIGxvdzsKKwkJCXUzMiBoaWdoOworCQl9IHU7CisJCXU2NCBXb3JkczsKKwl9OworfTsKKworLyogRGVmYXVsdCBSZXBseSBEZXNjcmlwdG9yICovCitzdHJ1Y3QgTVBJMl9ERUZBVUxUX1JFUExZX0RFU0NSSVBUT1IgeworCXU4ICAgICAgICAgICAgICBSZXBseUZsYWdzOyAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworCXU4ICAgICAgICAgICAgICBNU0l4SW5kZXg7ICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLworCXUxNiAgICAgICAgICAgICBEZXNjcmlwdG9yVHlwZURlcGVuZGVudDE7ICAgLyogMHgwMiAqLworCXUzMiAgICAgICAgICAgICBEZXNjcmlwdG9yVHlwZURlcGVuZGVudDI7ICAgLyogMHgwNCAqLworfTsKKworLyogQWRkcmVzcyBSZXBseSBEZXNjcmlwdG9yICovCitzdHJ1Y3QgTVBJMl9BRERSRVNTX1JFUExZX0RFU0NSSVBUT1IgeworCXU4ICAgICAgICAgICAgICBSZXBseUZsYWdzOyAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworCXU4ICAgICAgICAgICAgICBNU0l4SW5kZXg7ICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLworCXUxNiAgICAgICAgICAgICBTTUlEOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMiAqLworCXUzMiAgICAgICAgICAgICBSZXBseUZyYW1lQWRkcmVzczsgICAgICAgICAgLyogMHgwNCAqLworfTsKKworLyogU0NTSSBJTyBTdWNjZXNzIFJlcGx5IERlc2NyaXB0b3IgKi8KK3N0cnVjdCBNUEkyX1NDU0lfSU9fU1VDQ0VTU19SRVBMWV9ERVNDUklQVE9SIHsKKwl1OCAgICAgICAgICAgICAgUmVwbHlGbGFnczsgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKwl1OCAgICAgICAgICAgICAgTVNJeEluZGV4OyAgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KKwl1MTYgICAgICAgICAgICAgU01JRDsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KKwl1MTYgICAgICAgICAgICAgVGFza1RhZzsgICAgICAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KKwl1MTYgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgIC8qIDB4MDYgKi8KK307CisKKy8qIFRhcmdldEFzc2lzdCBTdWNjZXNzIFJlcGx5IERlc2NyaXB0b3IgKi8KK3N0cnVjdCBNUEkyX1RBUkdFVEFTU0lTVF9TVUNDRVNTX1JFUExZX0RFU0NSSVBUT1IgeworCXU4ICAgICAgICAgICAgICBSZXBseUZsYWdzOyAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworCXU4ICAgICAgICAgICAgICBNU0l4SW5kZXg7ICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLworCXUxNiAgICAgICAgICAgICBTTUlEOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMiAqLworCXU4ICAgICAgICAgICAgICBTZXF1ZW5jZU51bWJlcjsgICAgICAgICAgICAgLyogMHgwNCAqLworCXU4ICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgLyogMHgwNSAqLworCXUxNiAgICAgICAgICAgICBJb0luZGV4OyAgICAgICAgICAgICAgICAgICAgLyogMHgwNiAqLworfTsKKworLyogVGFyZ2V0IENvbW1hbmQgQnVmZmVyIFJlcGx5IERlc2NyaXB0b3IgKi8KK3N0cnVjdCBNUEkyX1RBUkdFVF9DT01NQU5EX0JVRkZFUl9SRVBMWV9ERVNDUklQVE9SIHsKKwl1OCAgICAgICAgICAgICAgUmVwbHlGbGFnczsgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKwl1OCAgICAgICAgICAgICAgTVNJeEluZGV4OyAgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KKwl1OCAgICAgICAgICAgICAgVlBfSUQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KKwl1OCAgICAgICAgICAgICAgRmxhZ3M7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDMgKi8KKwl1MTYgICAgICAgICAgICAgSW5pdGlhdG9yRGV2SGFuZGxlOyAgICAgICAgIC8qIDB4MDQgKi8KKwl1MTYgICAgICAgICAgICAgSW9JbmRleDsgICAgICAgICAgICAgICAgICAgIC8qIDB4MDYgKi8KK307CisKKy8qIFJBSUQgQWNjZWxlcmF0b3IgU3VjY2VzcyBSZXBseSBEZXNjcmlwdG9yICovCitzdHJ1Y3QgTVBJMl9SQUlEX0FDQ0VMRVJBVE9SX1NVQ0NFU1NfUkVQTFlfREVTQ1JJUFRPUiB7CisJdTggICAgICAgICAgICAgIFJlcGx5RmxhZ3M7ICAgICAgICAgICAgICAgICAvKiAweDAwICovCisJdTggICAgICAgICAgICAgIE1TSXhJbmRleDsgICAgICAgICAgICAgICAgICAvKiAweDAxICovCisJdTE2ICAgICAgICAgICAgIFNNSUQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAyICovCisJdTMyICAgICAgICAgICAgIFJlc2VydmVkOyAgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCit9OworCisvKiB1bmlvbiBvZiBSZXBseSBEZXNjcmlwdG9ycyAqLwordW5pb24gTVBJMl9SRVBMWV9ERVNDUklQVE9SU19VTklPTiB7CisJc3RydWN0IE1QSTJfREVGQVVMVF9SRVBMWV9ERVNDUklQVE9SICAgICAgICAgICAgICAgICAgIERlZmF1bHQ7CisJc3RydWN0IE1QSTJfQUREUkVTU19SRVBMWV9ERVNDUklQVE9SICAgICAgICAgICAgICAgICAgIEFkZHJlc3NSZXBseTsKKwlzdHJ1Y3QgTVBJMl9TQ1NJX0lPX1NVQ0NFU1NfUkVQTFlfREVTQ1JJUFRPUiAgICAgICAgICAgU0NTSUlPU3VjY2VzczsKKwlzdHJ1Y3QgTVBJMl9UQVJHRVRBU1NJU1RfU1VDQ0VTU19SRVBMWV9ERVNDUklQVE9SIFRhcmdldEFzc2lzdFN1Y2Nlc3M7CisJc3RydWN0IE1QSTJfVEFSR0VUX0NPTU1BTkRfQlVGRkVSX1JFUExZX0RFU0NSSVBUT1IgVGFyZ2V0Q29tbWFuZEJ1ZmZlcjsKKwlzdHJ1Y3QgTVBJMl9SQUlEX0FDQ0VMRVJBVE9SX1NVQ0NFU1NfUkVQTFlfREVTQ1JJUFRPUgorCVJBSURBY2NlbGVyYXRvclN1Y2Nlc3M7CisJdTY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV29yZHM7Cit9OworCisvKiBJT0NJbml0IFJlcXVlc3QgbWVzc2FnZSAqLworc3RydWN0IE1QSTJfSU9DX0lOSVRfUkVRVUVTVCB7CisJdTggICAgICAgICAgICAgICAgICAgICAgV2hvSW5pdDsgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisJdTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDAxICovCisJdTggICAgICAgICAgICAgICAgICAgICAgQ2hhaW5PZmZzZXQ7ICAgICAgICAgICAgICAgICAgICAvKiAweDAyICovCisJdTggICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb247ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAzICovCisJdTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCisJdTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQzOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA2ICovCisJdTggICAgICAgICAgICAgICAgICAgICAgTXNnRmxhZ3M7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA3ICovCisJdTggICAgICAgICAgICAgICAgICAgICAgVlBfSUQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA4ICovCisJdTggICAgICAgICAgICAgICAgICAgICAgVkZfSUQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA5ICovCisJdTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ0OyAgICAgICAgICAgICAgICAgICAgICAvKiAweDBBICovCisJdTE2ICAgICAgICAgICAgICAgICAgICAgTXNnVmVyc2lvbjsgICAgICAgICAgICAgICAgICAgICAvKiAweDBDICovCisJdTE2ICAgICAgICAgICAgICAgICAgICAgSGVhZGVyVmVyc2lvbjsgICAgICAgICAgICAgICAgICAvKiAweDBFICovCisJdTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ1OyAgICAgICAgICAgICAgICAgICAgICAvKiAweDEwICovCisJdTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ2OyAgICAgICAgICAgICAgICAgICAgICAvKiAweDE0ICovCisJdTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ3OyAgICAgICAgICAgICAgICAgICAgICAvKiAweDE2ICovCisJdTggICAgICAgICAgICAgICAgICAgICAgSG9zdE1TSXhWZWN0b3JzOyAgICAgICAgICAgICAgICAvKiAweDE3ICovCisJdTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ4OyAgICAgICAgICAgICAgICAgICAgICAvKiAweDE4ICovCisJdTE2ICAgICAgICAgICAgICAgICAgICAgU3lzdGVtUmVxdWVzdEZyYW1lU2l6ZTsgICAgICAgICAvKiAweDFBICovCisJdTE2ICAgICAgICAgICAgICAgICAgICAgUmVwbHlEZXNjcmlwdG9yUG9zdFF1ZXVlRGVwdGg7ICAvKiAweDFDICovCisJdTE2ICAgICAgICAgICAgICAgICAgICAgUmVwbHlGcmVlUXVldWVEZXB0aDsgICAgICAgICAgICAvKiAweDFFICovCisJdTMyICAgICAgICAgICAgICAgICAgICAgU2Vuc2VCdWZmZXJBZGRyZXNzSGlnaDsgICAgICAgICAvKiAweDIwICovCisJdTMyICAgICAgICAgICAgICAgICAgICAgU3lzdGVtUmVwbHlBZGRyZXNzSGlnaDsgICAgICAgICAvKiAweDI0ICovCisJdTY0ICAgICAgICAgICAgICAgICAgICAgU3lzdGVtUmVxdWVzdEZyYW1lQmFzZUFkZHJlc3M7ICAvKiAweDI4ICovCisJdTY0ICAgICAgICAgICAgICAgICAgICAgUmVwbHlEZXNjcmlwdG9yUG9zdFF1ZXVlQWRkcmVzczsvKiAweDMwICovCisJdTY0ICAgICAgICAgICAgICAgICAgICAgUmVwbHlGcmVlUXVldWVBZGRyZXNzOyAgICAgICAgICAvKiAweDM4ICovCisJdTY0ICAgICAgICAgICAgICAgICAgICAgVGltZVN0YW1wOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDQwICovCit9OworCisvKiBtcnByaXYgZGVmaW5lcyAqLworI2RlZmluZSBNUl9QRF9JTlZBTElEIDB4RkZGRgorI2RlZmluZSBNQVhfU1BBTl9ERVBUSCA4CisjZGVmaW5lIE1BWF9SQUlETUFQX1NQQU5fREVQVEggKE1BWF9TUEFOX0RFUFRIKQorI2RlZmluZSBNQVhfUk9XX1NJWkUgMzIKKyNkZWZpbmUgTUFYX1JBSURNQVBfUk9XX1NJWkUgKE1BWF9ST1dfU0laRSkKKyNkZWZpbmUgTUFYX0xPR0lDQUxfRFJJVkVTIDY0CisjZGVmaW5lIE1BWF9SQUlETUFQX0xPR0lDQUxfRFJJVkVTIChNQVhfTE9HSUNBTF9EUklWRVMpCisjZGVmaW5lIE1BWF9SQUlETUFQX1ZJRVdTIChNQVhfTE9HSUNBTF9EUklWRVMpCisjZGVmaW5lIE1BWF9BUlJBWVMgMTI4CisjZGVmaW5lIE1BWF9SQUlETUFQX0FSUkFZUyAoTUFYX0FSUkFZUykKKyNkZWZpbmUgTUFYX1BIWVNJQ0FMX0RFVklDRVMgMjU2CisjZGVmaW5lIE1BWF9SQUlETUFQX1BIWVNJQ0FMX0RFVklDRVMgKE1BWF9QSFlTSUNBTF9ERVZJQ0VTKQorI2RlZmluZSBNUl9EQ01EX0xEX01BUF9HRVRfSU5GTyAgICAgICAgICAgICAweDAzMDBlMTAxCisKK3N0cnVjdCBNUl9ERVZfSEFORExFX0lORk8geworCXUxNiAgICAgY3VyRGV2SGRsOworCXU4ICAgICAgdmFsaWRIYW5kbGVzOworCXU4ICAgICAgcmVzZXJ2ZWQ7CisJdTE2ICAgICBkZXZIYW5kbGVbMl07Cit9OworCitzdHJ1Y3QgTVJfQVJSQVlfSU5GTyB7CisJdTE2ICAgICAgcGRbTUFYX1JBSURNQVBfUk9XX1NJWkVdOworfTsKKworc3RydWN0IE1SX1FVQURfRUxFTUVOVCB7CisJdTY0ICAgICBsb2dTdGFydDsKKwl1NjQgICAgIGxvZ0VuZDsKKwl1NjQgICAgIG9mZnNldEluU3BhbjsKKwl1MzIgICAgIGRpZmY7CisJdTMyICAgICByZXNlcnZlZDE7Cit9OworCitzdHJ1Y3QgTVJfU1BBTl9JTkZPIHsKKwl1MzIgICAgICAgICAgICAgbm9FbGVtZW50czsKKwl1MzIgICAgICAgICAgICAgcmVzZXJ2ZWQxOworCXN0cnVjdCBNUl9RVUFEX0VMRU1FTlQgcXVhZFtNQVhfUkFJRE1BUF9TUEFOX0RFUFRIXTsKK307CisKK3N0cnVjdCBNUl9MRF9TUEFOIHsKKwl1NjQgICAgICBzdGFydEJsazsKKwl1NjQgICAgICBudW1CbGtzOworCXUxNiAgICAgIGFycmF5UmVmOworCXU4ICAgICAgIHJlc2VydmVkWzZdOworfTsKKworc3RydWN0IE1SX1NQQU5fQkxPQ0tfSU5GTyB7CisJdTY0ICAgICAgICAgIG51bV9yb3dzOworCXN0cnVjdCBNUl9MRF9TUEFOICAgc3BhbjsKKwlzdHJ1Y3QgTVJfU1BBTl9JTkZPIGJsb2NrX3NwYW5faW5mbzsKK307CisKK3N0cnVjdCBNUl9MRF9SQUlEIHsKKwlzdHJ1Y3QgeworCQl1MzIgICAgIGZwQ2FwYWJsZToxOworCQl1MzIgICAgIHJlc2VydmVkNTozOworCQl1MzIgICAgIGxkUGlNb2RlOjQ7CisJCXUzMiAgICAgcGRQaU1vZGU6NDsKKwkJdTMyICAgICBlbmNyeXB0aW9uVHlwZTo4OworCQl1MzIgICAgIGZwV3JpdGVDYXBhYmxlOjE7CisJCXUzMiAgICAgZnBSZWFkQ2FwYWJsZToxOworCQl1MzIgICAgIGZwV3JpdGVBY3Jvc3NTdHJpcGU6MTsKKwkJdTMyICAgICBmcFJlYWRBY3Jvc3NTdHJpcGU6MTsKKwkJdTMyICAgICByZXNlcnZlZDQ6ODsKKwl9IGNhcGFiaWxpdHk7CisJdTMyICAgICByZXNlcnZlZDY7CisJdTY0ICAgICBzaXplOworCXU4ICAgICAgc3BhbkRlcHRoOworCXU4ICAgICAgbGV2ZWw7CisJdTggICAgICBzdHJpcGVTaGlmdDsKKwl1OCAgICAgIHJvd1NpemU7CisJdTggICAgICByb3dEYXRhU2l6ZTsKKwl1OCAgICAgIHdyaXRlTW9kZTsKKwl1OCAgICAgIFBSTDsKKwl1OCAgICAgIFNSTDsKKwl1MTYgICAgIHRhcmdldElkOworCXU4ICAgICAgbGRTdGF0ZTsKKwl1OCAgICAgIHJlZ1R5cGVSZXFPbldyaXRlOworCXU4ICAgICAgbW9kRmFjdG9yOworCXU4ICAgICAgcmVzZXJ2ZWQyWzFdOworCXUxNiAgICAgc2VxTnVtOworCisJc3RydWN0IHsKKwkJdTMyIGxkU3luY1JlcXVpcmVkOjE7CisJCXUzMiByZXNlcnZlZDozMTsKKwl9IGZsYWdzOworCisJdTggICAgICByZXNlcnZlZDNbMHg1Q107Cit9OworCitzdHJ1Y3QgTVJfTERfU1BBTl9NQVAgeworCXN0cnVjdCBNUl9MRF9SQUlEICAgICAgICAgIGxkUmFpZDsKKwl1OCAgICAgICAgICAgICAgICAgIGRhdGFBcm1NYXBbTUFYX1JBSURNQVBfUk9XX1NJWkVdOworCXN0cnVjdCBNUl9TUEFOX0JMT0NLX0lORk8gIHNwYW5CbG9ja1tNQVhfUkFJRE1BUF9TUEFOX0RFUFRIXTsKK307CisKK3N0cnVjdCBNUl9GV19SQUlEX01BUCB7CisJdTMyICAgICAgICAgICAgICAgICB0b3RhbFNpemU7CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJdTMyICAgICAgICAgbWF4TGQ7CisJCQl1MzIgICAgICAgICBtYXhTcGFuRGVwdGg7CisJCQl1MzIgICAgICAgICBtYXhSb3dTaXplOworCQkJdTMyICAgICAgICAgbWF4UGRDb3VudDsKKwkJCXUzMiAgICAgICAgIG1heEFycmF5czsKKwkJfSB2YWxpZGF0aW9uSW5mbzsKKwkJdTMyICAgICAgICAgICAgIHZlcnNpb25bNV07CisJCXUzMiAgICAgICAgICAgICByZXNlcnZlZDFbNV07CisJfTsKKworCXUzMiAgICAgICAgICAgICAgICAgbGRDb3VudDsKKwl1MzIgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsKKwl1OCAgICAgICAgICAgICAgICAgIGxkVGd0SWRUb0xkW01BWF9SQUlETUFQX0xPR0lDQUxfRFJJVkVTKworCQkJCQlNQVhfUkFJRE1BUF9WSUVXU107CisJdTggICAgICAgICAgICAgICAgICBmcFBkSW9UaW1lb3V0U2VjOworCXU4ICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQyWzddOworCXN0cnVjdCBNUl9BUlJBWV9JTkZPICAgICAgIGFyTWFwSW5mb1tNQVhfUkFJRE1BUF9BUlJBWVNdOworCXN0cnVjdCBNUl9ERVZfSEFORExFX0lORk8gIGRldkhuZGxJbmZvW01BWF9SQUlETUFQX1BIWVNJQ0FMX0RFVklDRVNdOworCXN0cnVjdCBNUl9MRF9TUEFOX01BUCAgICAgIGxkU3Bhbk1hcFsxXTsKK307CisKK3N0cnVjdCBJT19SRVFVRVNUX0lORk8geworCXU2NCBsZFN0YXJ0QmxvY2s7CisJdTMyIG51bUJsb2NrczsKKwl1MTYgbGRUZ3RJZDsKKwl1OCBpc1JlYWQ7CisJdTE2IGRldkhhbmRsZTsKKwl1NjQgcGRCbG9jazsKKwl1OCBmcE9rRm9ySW87Cit9OworCitzdHJ1Y3QgTVJfTERfVEFSR0VUX1NZTkMgeworCXU4ICB0YXJnZXRJZDsKKwl1OCAgcmVzZXJ2ZWQ7CisJdTE2IHNlcU51bTsKK307CisKKyNkZWZpbmUgSUVFRV9TR0VfRkxBR1NfQUREUl9NQVNLICAgICAgICAgICAgKDB4MDMpCisjZGVmaW5lIElFRUVfU0dFX0ZMQUdTX1NZU1RFTV9BRERSICAgICAgICAgICgweDAwKQorI2RlZmluZSBJRUVFX1NHRV9GTEFHU19JT0NERFJfQUREUiAgICAgICAgICAoMHgwMSkKKyNkZWZpbmUgSUVFRV9TR0VfRkxBR1NfSU9DUExCX0FERFIgICAgICAgICAgKDB4MDIpCisjZGVmaW5lIElFRUVfU0dFX0ZMQUdTX0lPQ1BMQk5UQV9BRERSICAgICAgICgweDAzKQorI2RlZmluZSBJRUVFX1NHRV9GTEFHU19DSEFJTl9FTEVNRU5UICAgICAgICAoMHg4MCkKKyNkZWZpbmUgSUVFRV9TR0VfRkxBR1NfRU5EX09GX0xJU1QgICAgICAgICAgKDB4NDApCisKK3N0cnVjdCBtZWdhc2FzX3JlZ2lzdGVyX3NldDsKK3N0cnVjdCBtZWdhc2FzX2luc3RhbmNlOworCit1bmlvbiBkZXNjX3dvcmQgeworCXU2NCB3b3JkOworCXN0cnVjdCB7CisJCXUzMiBsb3c7CisJCXUzMiBoaWdoOworCX0gdTsKK307CisKK3N0cnVjdCBtZWdhc2FzX2NtZF9mdXNpb24geworCXN0cnVjdCBNUEkyX1JBSURfU0NTSV9JT19SRVFVRVNUCSppb19yZXF1ZXN0OworCWRtYV9hZGRyX3QJCQlpb19yZXF1ZXN0X3BoeXNfYWRkcjsKKworCXVuaW9uIE1QSTJfU0dFX0lPX1VOSU9OCSpzZ19mcmFtZTsKKwlkbWFfYWRkcl90CQlzZ19mcmFtZV9waHlzX2FkZHI7CisKKwl1OCAqc2Vuc2U7CisJZG1hX2FkZHJfdCBzZW5zZV9waHlzX2FkZHI7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IHNjc2lfY21uZCAqc2NtZDsKKwlzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2U7CisKKwl1OCByZXRyeV9mb3JfZndfcmVzZXQ7CisJdW5pb24gTUVHQVNBU19SRVFVRVNUX0RFU0NSSVBUT1JfVU5JT04gICpyZXF1ZXN0X2Rlc2M7CisKKwkvKgorCSAqIENvbnRleHQgZm9yIGEgTUZJIGZyYW1lLgorCSAqIFVzZWQgdG8gZ2V0IHRoZSBtZmkgY21kIGZyb20gbGlzdCB3aGVuIGEgTUZJIGNtZCBpcyBjb21wbGV0ZWQKKwkgKi8KKwl1MzIgc3luY19jbWRfaWR4OworCXUzMiBpbmRleDsKKwl1OCBmbGFnczsKK307CisKK3N0cnVjdCBMRF9MT0FEX0JBTEFOQ0VfSU5GTyB7CisJdTgJbG9hZEJhbGFuY2VGbGFnOworCXU4CXJlc2VydmVkMTsKKwl1MTYgICAgIHJhaWQxRGV2SGFuZGxlWzJdOworCWF0b21pY190ICAgICBzY3NpX3BlbmRpbmdfY21kc1syXTsKKwl1NjQgICAgIGxhc3RfYWNjZXNzZWRfYmxvY2tbMl07Cit9OworCitzdHJ1Y3QgTVJfRldfUkFJRF9NQVBfQUxMIHsKKwlzdHJ1Y3QgTVJfRldfUkFJRF9NQVAgcmFpZE1hcDsKKwlzdHJ1Y3QgTVJfTERfU1BBTl9NQVAgbGRTcGFuTWFwW01BWF9MT0dJQ0FMX0RSSVZFUyAtIDFdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBmdXNpb25fY29udGV4dCB7CisJc3RydWN0IG1lZ2FzYXNfY21kX2Z1c2lvbiAqKmNtZF9saXN0OworCXN0cnVjdCBsaXN0X2hlYWQgY21kX3Bvb2w7CisKKwlzcGlubG9ja190IGNtZF9wb29sX2xvY2s7CisKKwlkbWFfYWRkcl90IHJlcV9mcmFtZXNfZGVzY19waHlzOworCXU4ICpyZXFfZnJhbWVzX2Rlc2M7CisKKwlzdHJ1Y3QgZG1hX3Bvb2wgKmlvX3JlcXVlc3RfZnJhbWVzX3Bvb2w7CisJZG1hX2FkZHJfdCBpb19yZXF1ZXN0X2ZyYW1lc19waHlzOworCXU4ICppb19yZXF1ZXN0X2ZyYW1lczsKKworCXN0cnVjdCBkbWFfcG9vbCAqc2dfZG1hX3Bvb2w7CisJc3RydWN0IGRtYV9wb29sICpzZW5zZV9kbWFfcG9vbDsKKworCWRtYV9hZGRyX3QgcmVwbHlfZnJhbWVzX2Rlc2NfcGh5czsKKwl1bmlvbiBNUEkyX1JFUExZX0RFU0NSSVBUT1JTX1VOSU9OICpyZXBseV9mcmFtZXNfZGVzYzsKKwlzdHJ1Y3QgZG1hX3Bvb2wgKnJlcGx5X2ZyYW1lc19kZXNjX3Bvb2w7CisKKwl1MTYgbGFzdF9yZXBseV9pZHg7CisKKwl1MzIgcmVwbHlfcV9kZXB0aDsKKwl1MzIgcmVxdWVzdF9hbGxvY19zejsKKwl1MzIgcmVwbHlfYWxsb2Nfc3o7CisJdTMyIGlvX2ZyYW1lc19hbGxvY19zejsKKworCXUxNgltYXhfc2dlX2luX21haW5fbXNnOworCXUxNgltYXhfc2dlX2luX2NoYWluOworCisJdTgJY2hhaW5fb2Zmc2V0X2lvX3JlcXVlc3Q7CisJdTgJY2hhaW5fb2Zmc2V0X21maV9wdGhydTsKKworCXN0cnVjdCBNUl9GV19SQUlEX01BUF9BTEwgKmxkX21hcFsyXTsKKwlkbWFfYWRkcl90IGxkX21hcF9waHlzWzJdOworCisJdTMyIG1hcF9zejsKKwl1OCBmYXN0X3BhdGhfaW87CisJc3RydWN0IExEX0xPQURfQkFMQU5DRV9JTkZPIGxvYWRfYmFsYW5jZV9pbmZvW01BWF9MT0dJQ0FMX0RSSVZFU107Cit9OworCit1bmlvbiBkZXNjX3ZhbHVlIHsKKwl1NjQgd29yZDsKKwlzdHJ1Y3QgeworCQl1MzIgbG93OworCQl1MzIgaGlnaDsKKwl9IHU7Cit9OworCisjZW5kaWYgLyogX01FR0FSQUlEX1NBU19GVVNJT05fSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyLmggYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMi5oCmluZGV4IDRiMWMyZjAuLjhiZTc1ZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyLmgKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTIuaApAQCAtOCw3ICs4LDcgQEAKICAqICAgICAgICAgICAgICAgICAgc2NhdHRlci9nYXRoZXIgZm9ybWF0cy4KICAqICBDcmVhdGlvbiBEYXRlOiAgSnVuZSAyMSwgMjAwNgogICoKLSAqICBtcGkyLmggVmVyc2lvbjogIDAyLjAwLjE1CisgKiAgbXBpMi5oIFZlcnNpb246ICAwMi4wMC4xNgogICoKICAqICBWZXJzaW9uIEhpc3RvcnkKICAqICAtLS0tLS0tLS0tLS0tLS0KQEAgLTYxLDYgKzYxLDggQEAKICAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIGRlZmluZSBmb3IgTVBJMl9GVU5DVElPTl9QV1JfTUdNVF9DT05UUk9MLgogICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgZGVmaW5lcyBmb3IgcHJvZHVjdC1zcGVjaWZpYyByYW5nZSBvZiBtZXNzYWdlCiAgKiAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBjb2RlcywgMHhGMCB0byAweEZGLgorICogIDA1LTEyLTEwICAwMi4wMC4xNiAgQnVtcGVkIE1QSTJfSEVBREVSX1ZFUlNJT05fVU5JVC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIGFsdGVybmF0aXZlIGRlZmluZXMgZm9yIHRoZSBTR0UgRGlyZWN0aW9uIGJpdC4KICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKQEAgLTg2LDcgKzg4LDcgQEAKICNkZWZpbmUgTVBJMl9WRVJTSU9OXzAyXzAwICAgICAgICAgICAgICAgICAgKDB4MDIwMCkKIAogLyogdmVyc2lvbmluZyBmb3IgdGhpcyBNUEkgaGVhZGVyIHNldCAqLwotI2RlZmluZSBNUEkyX0hFQURFUl9WRVJTSU9OX1VOSVQgICAgICAgICAgICAoMHgwRikKKyNkZWZpbmUgTVBJMl9IRUFERVJfVkVSU0lPTl9VTklUICAgICAgICAgICAgKDB4MTApCiAjZGVmaW5lIE1QSTJfSEVBREVSX1ZFUlNJT05fREVWICAgICAgICAgICAgICgweDAwKQogI2RlZmluZSBNUEkyX0hFQURFUl9WRVJTSU9OX1VOSVRfTUFTSyAgICAgICAoMHhGRjAwKQogI2RlZmluZSBNUEkyX0hFQURFUl9WRVJTSU9OX1VOSVRfU0hJRlQgICAgICAoOCkKQEAgLTkyOSw2ICs5MzEsOSBAQAogI2RlZmluZSBNUEkyX1NHRV9GTEFHU19JT0NfVE9fSE9TVCAgICAgICAgICAgICAgKDB4MDApCiAjZGVmaW5lIE1QSTJfU0dFX0ZMQUdTX0hPU1RfVE9fSU9DICAgICAgICAgICAgICAoMHgwNCkKIAorI2RlZmluZSBNUEkyX1NHRV9GTEFHU19ERVNUICAgICAgICAgICAgICAgICAgICAgKE1QSTJfU0dFX0ZMQUdTX0lPQ19UT19IT1NUKQorI2RlZmluZSBNUEkyX1NHRV9GTEFHU19TT1VSQ0UgICAgICAgICAgICAgICAgICAgKE1QSTJfU0dFX0ZMQUdTX0hPU1RfVE9fSU9DKQorCiAvKiBBZGRyZXNzIFNpemUgKi8KIAogI2RlZmluZSBNUEkyX1NHRV9GTEFHU18zMl9CSVRfQUREUkVTU0lORyAgICAgICAgKDB4MDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9jbmZnLmggYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9jbmZnLmgKaW5kZXggZTM3MjhkNy4uZDc2YTY1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfY25mZy5oCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX2NuZmcuaApAQCAtNiw3ICs2LDcgQEAKICAqICAgICAgICAgIFRpdGxlOiAgTVBJIENvbmZpZ3VyYXRpb24gbWVzc2FnZXMgYW5kIHBhZ2VzCiAgKiAgQ3JlYXRpb24gRGF0ZTogIE5vdmVtYmVyIDEwLCAyMDA2CiAgKgotICogICAgbXBpMl9jbmZnLmggVmVyc2lvbjogIDAyLjAwLjE0CisgKiAgICBtcGkyX2NuZmcuaCBWZXJzaW9uOiAgMDIuMDAuMTUKICAqCiAgKiAgVmVyc2lvbiBIaXN0b3J5CiAgKiAgLS0tLS0tLS0tLS0tLS0tCkBAIC0xMjEsNiArMTIxLDEwIEBACiAgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNUEkyX0NPTkZJR19QQUdFX1NBU0lPVU5JVF82IGFuZCByZWxhdGVkIGRlZmluZXMuCiAgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNUEkyX0NPTkZJR19QQUdFX1NBU0lPVU5JVF83IGFuZCByZWxhdGVkIGRlZmluZXMuCiAgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNUEkyX0NPTkZJR19QQUdFX1NBU0lPVU5JVF84IGFuZCByZWxhdGVkIGRlZmluZXMuCisgKiAgMDUtMTItMTAgIDAyLjAwLjE1ICBBZGRlZCBNUEkyX1JBSURWT0wwX1NUQVRVU19GTEFHX1ZPTF9OT1RfQ09OU0lTVEVOVAorICogICAgICAgICAgICAgICAgICAgICAgZGVmaW5lLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTVBJMl9QSFlTRElTSzBfSU5DT01QQVRJQkxFX01FRElBX1RZUEUgZGVmaW5lLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTVBJMl9TQVNfTkVHX0xJTktfUkFURV9VTlNVUFBPUlRFRF9QSFkgZGVmaW5lLgogICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIApAQCAtMzMzLDcgKzMzNyw3IEBACiAjZGVmaW5lIE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX1JFQURfTlZSQU0gICAgICAgICAgKDB4MDYpCiAjZGVmaW5lIE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX0dFVF9DSEFOR0VBQkxFICAgICAgKDB4MDcpCiAKLS8qIHZhbHVlcyBmb3IgU0dMRmxhZ3MgZmllbGQgYXJlIGluIHRoZSBTR0wgc2VjdGlvbiBvZiBtcGkyLmggKi8KKy8qIHVzZSBNUEkyX1NHTEZMQUdTXyBkZWZpbmVzIGZyb20gbXBpMi5oIGZvciB0aGUgU0dMRmxhZ3MgZmllbGQgKi8KIAogCiAvKiBDb25maWcgUmVwbHkgTWVzc2FnZSAqLwpAQCAtMzc5LDYgKzM4Myw4IEBACiAjZGVmaW5lIE1QSTJfTUZHUEFHRV9ERVZJRF9TQVMyMTE2XzEgICAgICAgICAgICAgICAgKDB4MDA2NCkKICNkZWZpbmUgTVBJMl9NRkdQQUdFX0RFVklEX1NBUzIxMTZfMiAgICAgICAgICAgICAgICAoMHgwMDY1KQogCisjZGVmaW5lIE1QSTJfTUZHUEFHRV9ERVZJRF9TU1M2MjAwICAgICAgICAgICAgICAgICAgKDB4MDA3RSkKKwogI2RlZmluZSBNUEkyX01GR1BBR0VfREVWSURfU0FTMjIwOF8xICAgICAgICAgICAgICAgICgweDAwODApCiAjZGVmaW5lIE1QSTJfTUZHUEFHRV9ERVZJRF9TQVMyMjA4XzIgICAgICAgICAgICAgICAgKDB4MDA4MSkKICNkZWZpbmUgTVBJMl9NRkdQQUdFX0RFVklEX1NBUzIyMDhfMyAgICAgICAgICAgICAgICAoMHgwMDgyKQpAQCAtMzkwLDYgKzM5Niw4IEBACiAjZGVmaW5lIE1QSTJfTUZHUEFHRV9ERVZJRF9TQVMyMzA4XzMgICAgICAgICAgICAgICAgKDB4MDA2RSkKIAogCisKKwogLyogTWFudWZhY3R1cmluZyBQYWdlIDAgKi8KIAogdHlwZWRlZiBzdHJ1Y3QgX01QSTJfQ09ORklHX1BBR0VfTUFOXzAKQEAgLTcyOSw2ICs3MzcsNyBAQAogLyogSU8gVW5pdCBQYWdlIDEgRmxhZ3MgZGVmaW5lcyAqLwogI2RlZmluZSBNUEkyX0lPVU5JVFBBR0UxX0VOQUJMRV9IT1NUX0JBU0VEX0RJU0NPVkVSWSAgICAoMHgwMDAwMDgwMCkKICNkZWZpbmUgTVBJMl9JT1VOSVRQQUdFMV9NQVNLX1NBVEFfV1JJVEVfQ0FDSEUgICAgICAgICAgKDB4MDAwMDA2MDApCisjZGVmaW5lIE1QSTJfSU9VTklUUEFHRTFfU0FUQV9XUklURV9DQUNIRV9TSElGVCAgICAgICAgICg5KQogI2RlZmluZSBNUEkyX0lPVU5JVFBBR0UxX0VOQUJMRV9TQVRBX1dSSVRFX0NBQ0hFICAgICAgICAoMHgwMDAwMDAwMCkKICNkZWZpbmUgTVBJMl9JT1VOSVRQQUdFMV9ESVNBQkxFX1NBVEFfV1JJVEVfQ0FDSEUgICAgICAgKDB4MDAwMDAyMDApCiAjZGVmaW5lIE1QSTJfSU9VTklUUEFHRTFfVU5DSEFOR0VEX1NBVEFfV1JJVEVfQ0FDSEUgICAgICgweDAwMDAwNDAwKQpAQCAtMTM0Nyw2ICsxMzU2LDcgQEAKICNkZWZpbmUgTVBJMl9SQUlEVk9MMF9TVEFUVVNfRkxBR19DQVBBQ0lUWV9FWFBBTlNJT04gICAgICAgICgweDAwMDQwMDAwKQogI2RlZmluZSBNUEkyX1JBSURWT0wwX1NUQVRVU19GTEFHX0JBQ0tHUk9VTkRfSU5JVCAgICAgICAgICAgKDB4MDAwMjAwMDApCiAjZGVmaW5lIE1QSTJfUkFJRFZPTDBfU1RBVFVTX0ZMQUdfUkVTWU5DX0lOX1BST0dSRVNTICAgICAgICAoMHgwMDAxMDAwMCkKKyNkZWZpbmUgTVBJMl9SQUlEVk9MMF9TVEFUVVNfRkxBR19WT0xfTk9UX0NPTlNJU1RFTlQgICAgICAgICgweDAwMDAwMDgwKQogI2RlZmluZSBNUEkyX1JBSURWT0wwX1NUQVRVU19GTEFHX09DRV9BTExPV0VEICAgICAgICAgICAgICAgKDB4MDAwMDAwNDApCiAjZGVmaW5lIE1QSTJfUkFJRFZPTDBfU1RBVFVTX0ZMQUdfQkdJX0NPTVBMRVRFICAgICAgICAgICAgICAoMHgwMDAwMDAyMCkKICNkZWZpbmUgTVBJMl9SQUlEVk9MMF9TVEFUVVNfRkxBR18xRV9PRkZTRVRfTUlSUk9SICAgICAgICAgICgweDAwMDAwMDAwKQpAQCAtMTQ2OSwxMSArMTQ3OSwxNSBAQAogI2RlZmluZSBNUEkyX1BIWVNESVNLMF9JTkNPTVBBVElCTEVfTUFYX0xCQSAgICAgICAgICAgICAoMHgwMykKICNkZWZpbmUgTVBJMl9QSFlTRElTSzBfSU5DT01QQVRJQkxFX1NBVEFfRVhURU5ERURfQ01EICAgKDB4MDQpCiAjZGVmaW5lIE1QSTJfUEhZU0RJU0swX0lOQ09NUEFUSUJMRV9SRU1PVkVBQkxFX01FRElBICAgICgweDA1KQorI2RlZmluZSBNUEkyX1BIWVNESVNLMF9JTkNPTVBBVElCTEVfTUVESUFfVFlQRSAgICAgICAgICAoMHgwNikKICNkZWZpbmUgTVBJMl9QSFlTRElTSzBfSU5DT01QQVRJQkxFX1VOS05PV04gICAgICAgICAgICAgKDB4RkYpCiAKIC8qIFBoeXNEaXNrQXR0cmlidXRlcyBkZWZpbmVzICovCisjZGVmaW5lIE1QSTJfUEhZU0RJU0swX0FUVFJJQl9NRURJQV9NQVNLICAgICAgICAgICAgICAgICgweDBDKQogI2RlZmluZSBNUEkyX1BIWVNESVNLMF9BVFRSSUJfU09MSURfU1RBVEVfRFJJVkUgICAgICAgICAoMHgwOCkKICNkZWZpbmUgTVBJMl9QSFlTRElTSzBfQVRUUklCX0hBUkRfRElTS19EUklWRSAgICAgICAgICAgKDB4MDQpCisKKyNkZWZpbmUgTVBJMl9QSFlTRElTSzBfQVRUUklCX1BST1RPQ09MX01BU0sgICAgICAgICAgICAgKDB4MDMpCiAjZGVmaW5lIE1QSTJfUEhZU0RJU0swX0FUVFJJQl9TQVNfUFJPVE9DT0wgICAgICAgICAgICAgICgweDAyKQogI2RlZmluZSBNUEkyX1BIWVNESVNLMF9BVFRSSUJfU0FUQV9QUk9UT0NPTCAgICAgICAgICAgICAoMHgwMSkKIApAQCAtMTU0NSw2ICsxNTU5LDcgQEAKICNkZWZpbmUgTVBJMl9TQVNfTkVHX0xJTktfUkFURV9TQVRBX09PQl9DT01QTEVURSAgICAgICAgKDB4MDMpCiAjZGVmaW5lIE1QSTJfU0FTX05FR19MSU5LX1JBVEVfUE9SVF9TRUxFQ1RPUiAgICAgICAgICAgICgweDA0KQogI2RlZmluZSBNUEkyX1NBU19ORUdfTElOS19SQVRFX1NNUF9SRVNFVF9JTl9QUk9HUkVTUyAgICAoMHgwNSkKKyNkZWZpbmUgTVBJMl9TQVNfTkVHX0xJTktfUkFURV9VTlNVUFBPUlRFRF9QSFkgICAgICAgICAgKDB4MDYpCiAjZGVmaW5lIE1QSTJfU0FTX05FR19MSU5LX1JBVEVfMV81ICAgICAgICAgICAgICAgICAgICAgICgweDA4KQogI2RlZmluZSBNUEkyX1NBU19ORUdfTElOS19SQVRFXzNfMCAgICAgICAgICAgICAgICAgICAgICAoMHgwOSkKICNkZWZpbmUgTVBJMl9TQVNfTkVHX0xJTktfUkFURV82XzAgICAgICAgICAgICAgICAgICAgICAgKDB4MEEpCkBAIC0xNTcxLDYgKzE1ODYsNyBAQAogI2RlZmluZSBNUEkyX1NBU19QSFlJTkZPX1BIWV9WQUNBTlQgICAgICAgICAgICAgICAgICAgICAoMHg4MDAwMDAwMCkKIAogI2RlZmluZSBNUEkyX1NBU19QSFlJTkZPX1BIWV9QT1dFUl9DT05ESVRJT05fTUFTSyAgICAgICAoMHgxODAwMDAwMCkKKyNkZWZpbmUgTVBJMl9TQVNfUEhZSU5GT19TSElGVF9QSFlfUE9XRVJfQ09ORElUSU9OICAgICAgKDI3KQogI2RlZmluZSBNUEkyX1NBU19QSFlJTkZPX1BIWV9QT1dFUl9BQ1RJVkUgICAgICAgICAgICAgICAoMHgwMDAwMDAwMCkKICNkZWZpbmUgTVBJMl9TQVNfUEhZSU5GT19QSFlfUE9XRVJfUEFSVElBTCAgICAgICAgICAgICAgKDB4MDgwMDAwMDApCiAjZGVmaW5lIE1QSTJfU0FTX1BIWUlORk9fUEhZX1BPV0VSX1NMVU1CRVIgICAgICAgICAgICAgICgweDEwMDAwMDAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfaGlzdG9yeS50eHQgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9oaXN0b3J5LnR4dAppbmRleCBiZDZjOTJiLi5iMWU4OGYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9oaXN0b3J5LnR4dAorKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9oaXN0b3J5LnR4dApAQCAtMjkxLDYgKzI5MSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICBjYW4gYmUgc2l6ZWQgYnkgdGhlIGJ1aWxkIGVudmlyb25tZW50LgogICogIDA3LTMwLTA5ICAwMi4wMC4wNCAgQWRkZWQgcHJvcGVyIGRlZmluZSBmb3IgdGhlIFVzZSBEZWZhdWx0IFNldHRpbmdzIGJpdCBvZgogICogICAgICAgICAgICAgICAgICAgICAgVm9sdW1lQ3JlYXRpb25GbGFncyBhbmQgbWFya2VkIHRoZSBvbGQgb25lIGFzIG9ic29sZXRlLgorICogIDA1LTEyLTEwICAwMi4wMC4wNSAgQWRkZWQgTVBJMl9SQUlEX1ZPTF9GTEFHU19PUF9NREMgZGVmaW5lLgogICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIG1waTJfc2FzLmgKQEAgLTMwMSw2ICszMDIsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdC4KICAqICAxMC0yOC0wOSAgMDIuMDAuMDMgIENoYW5nZWQgdGhlIHR5cGUgb2YgU0dMIGluIE1QSTJfU0FUQV9QQVNTVEhST1VHSF9SRVFVRVNUCiAgKiAgICAgICAgICAgICAgICAgICAgICB0byBNUEkyX1NHRV9JT19VTklPTiBzaW5jZSBpdCBzdXBwb3J0cyBjaGFpbmVkIFNHTHMuCisgKiAgMDUtMTItMTAgIDAyLjAwLjA0ICBNb2RpZmllZCBzb21lIGNvbW1lbnRzLgogICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIG1waTJfdGFyZy5oCkBAIC0zMjQsNiArMzI2LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgIGFuZCByZXBseSBtZXNzYWdlcy4KICAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1QSTJfRElBR19CVUZfVFlQRV9FWFRFTkRFRC4KICAqICAgICAgICAgICAgICAgICAgICAgIEluY3JlbWVudGVkIE1QSTJfRElBR19CVUZfVFlQRV9DT1VOVC4KKyAqICAwNS0xMi0xMCAgMDIuMDAuMDUgIEFkZGVkIERpYWdub3N0aWMgRGF0YSBVcGxvYWQgdG9vbC4KICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBtcGkyX3R5cGUuaApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfaW5pdC5oIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfaW5pdC5oCmluZGV4IGM0Yzk5ZGYuLjIwZTZiODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX2luaXQuaAorKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9pbml0LmgKQEAgLTYsNyArNiw3IEBACiAgKiAgICAgICAgICBUaXRsZTogIE1QSSBTQ1NJIGluaXRpYXRvciBtb2RlIG1lc3NhZ2VzIGFuZCBzdHJ1Y3R1cmVzCiAgKiAgQ3JlYXRpb24gRGF0ZTogIEp1bmUgMjMsIDIwMDYKICAqCi0gKiAgICBtcGkyX2luaXQuaCBWZXJzaW9uOiAgMDIuMDAuMDkKKyAqICAgIG1waTJfaW5pdC5oIFZlcnNpb246ICAwMi4wMC4xMAogICoKICAqICBWZXJzaW9uIEhpc3RvcnkKICAqICAtLS0tLS0tLS0tLS0tLS0KQEAgLTMyLDYgKzMyLDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIFJlc3BvbnNlSW5mbyBmaWVsZCB0byBNUEkyX1NDU0lfVEFTS19NQU5BR0VfUkVQTFkuCiAgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNUEkyX1NDU0lUQVNLTUdNVF9SU1BfVE1fT1ZFUkxBUFBFRF9UQUcgZGVmaW5lLgogICogIDAyLTEwLTEwICAwMi4wMC4wOSAgUmVtb3ZlZCB1bnVzZWQgc3RydWN0dXJlIHRoYXQgaGFkICIjaWYgMCIgYXJvdW5kIGl0LgorICogIDA1LTEyLTEwICAwMi4wMC4xMCAgQWRkZWQgb3B0aW9uYWwgdmVuZG9yLXVuaXF1ZSByZWdpb24gdG8gU0NTSSBJTyBSZXF1ZXN0LgogICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIApAQCAtOTgsNyArOTksMTMgQEAKICAgICBVOCAgICAgICAgICAgICAgICAgICAgICBMVU5bOF07ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MzQgKi8KICAgICBVMzIgICAgICAgICAgICAgICAgICAgICBDb250cm9sOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4M0MgKi8KICAgICBNUEkyX1NDU0lfSU9fQ0RCX1VOSU9OICBDREI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4NDAgKi8KKworI2lmZGVmIE1QSTJfU0NTSV9JT19WRU5ET1JfVU5JUVVFX1JFR0lPTiAvKiB0eXBpY2FsbHkgdGhpcyBpcyBsZWZ0IHVuZGVmaW5lZCAqLworCU1QSTJfU0NTSV9JT19WRU5ET1JfVU5JUVVFIFZlbmRvclJlZ2lvbjsKKyNlbmRpZgorCiAgICAgTVBJMl9TR0VfSU9fVU5JT04gICAgICAgU0dMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDYwICovCisKIH0gTVBJMl9TQ1NJX0lPX1JFUVVFU1QsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9TQ1NJX0lPX1JFUVVFU1QsCiAgIE1waTJTQ1NJSU9SZXF1ZXN0X3QsIE1QSTJfUE9JTlRFUiBwTXBpMlNDU0lJT1JlcXVlc3RfdDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfaW9jLmggYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9pb2MuaAppbmRleCA0OTViZWRjLi43NjFjYmRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9pb2MuaAorKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9pb2MuaApAQCAtNiw3ICs2LDcgQEAKICAqICAgICAgICAgIFRpdGxlOiAgTVBJIElPQywgUG9ydCwgRXZlbnQsIEZXIERvd25sb2FkLCBhbmQgRlcgVXBsb2FkIG1lc3NhZ2VzCiAgKiAgQ3JlYXRpb24gRGF0ZTogIE9jdG9iZXIgMTEsIDIwMDYKICAqCi0gKiAgbXBpMl9pb2MuaCBWZXJzaW9uOiAgMDIuMDAuMTQKKyAqICBtcGkyX2lvYy5oIFZlcnNpb246ICAwMi4wMC4xNQogICoKICAqICBWZXJzaW9uIEhpc3RvcnkKICAqICAtLS0tLS0tLS0tLS0tLS0KQEAgLTEwMSw2ICsxMDEsOCBAQAogICogIDAyLTEwLTEwICAwMi4wMC4xNCAgQWRkZWQgU0FTIFF1aWVzY2UgRXZlbnQgc3RydWN0dXJlIGFuZCBkZWZpbmVzLgogICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgUG93ZXJNYW5hZ2VtZW50Q29udHJvbCBSZXF1ZXN0IHN0cnVjdHVyZXMgYW5kCiAgKiAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVzLgorICogIDA1LTEyLTEwICAwMi4wMC4xNSAgTWFya2VkIFRhc2sgU2V0IEZ1bGwgRXZlbnQgYXMgb2Jzb2xldGUuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNUEkyX0VWRU5UX1NBU19UT1BPX0xSX1VOU1VQUE9SVEVEX1BIWSBkZWZpbmUuCiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogCkBAIC00NTYsNyArNDU4LDcgQEAKICNkZWZpbmUgTVBJMl9FVkVOVF9TVEFURV9DSEFOR0UgICAgICAgICAgICAgICAgICAgICAoMHgwMDAyKQogI2RlZmluZSBNUEkyX0VWRU5UX0hBUkRfUkVTRVRfUkVDRUlWRUQgICAgICAgICAgICAgICgweDAwMDUpCiAjZGVmaW5lIE1QSTJfRVZFTlRfRVZFTlRfQ0hBTkdFICAgICAgICAgICAgICAgICAgICAgKDB4MDAwQSkKLSNkZWZpbmUgTVBJMl9FVkVOVF9UQVNLX1NFVF9GVUxMICAgICAgICAgICAgICAgICAgICAoMHgwMDBFKQorI2RlZmluZSBNUEkyX0VWRU5UX1RBU0tfU0VUX0ZVTEwgICAgICAgICAgICAgICAgICAgICgweDAwMEUpIC8qIG9ic29sZXRlICovCiAjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RFVklDRV9TVEFUVVNfQ0hBTkdFICAgICAgICAgKDB4MDAwRikKICNkZWZpbmUgTVBJMl9FVkVOVF9JUl9PUEVSQVRJT05fU1RBVFVTICAgICAgICAgICAgICAoMHgwMDE0KQogI2RlZmluZSBNUEkyX0VWRU5UX1NBU19ESVNDT1ZFUlkgICAgICAgICAgICAgICAgICAgICgweDAwMTYpCkBAIC01MTcsNiArNTE5LDcgQEAKICAgTVBJMl9QT0lOVEVSIHBNcGkyRXZlbnREYXRhSGFyZFJlc2V0UmVjZWl2ZWRfdDsKIAogLyogVGFzayBTZXQgRnVsbCBFdmVudCBkYXRhICovCisvKiAgIHRoaXMgZXZlbnQgaXMgb2Jzb2xldGUgKi8KIAogdHlwZWRlZiBzdHJ1Y3QgX01QSTJfRVZFTlRfREFUQV9UQVNLX1NFVF9GVUxMCiB7CkBAIC04MzEsNiArODM0LDcgQEAKICNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfVE9QT19MUl9TQVRBX09PQl9DT01QTEVURSAgICAgICAgICAgICgweDAzKQogI2RlZmluZSBNUEkyX0VWRU5UX1NBU19UT1BPX0xSX1BPUlRfU0VMRUNUT1IgICAgICAgICAgICAgICAgKDB4MDQpCiAjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX1RPUE9fTFJfU01QX1JFU0VUX0lOX1BST0dSRVNTICAgICAgICAoMHgwNSkKKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfVE9QT19MUl9VTlNVUFBPUlRFRF9QSFkgICAgICAgICAgICAgICgweDA2KQogI2RlZmluZSBNUEkyX0VWRU5UX1NBU19UT1BPX0xSX1JBVEVfMV81ICAgICAgICAgICAgICAgICAgICAgKDB4MDgpCiAjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX1RPUE9fTFJfUkFURV8zXzAgICAgICAgICAgICAgICAgICAgICAoMHgwOSkKICNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfVE9QT19MUl9SQVRFXzZfMCAgICAgICAgICAgICAgICAgICAgICgweDBBKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfcmFpZC5oIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfcmFpZC5oCmluZGV4IDUxNjBjMzMuLmJkNjFhN2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX3JhaWQuaAorKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9yYWlkLmgKQEAgLTEsMTIgKzEsMTIgQEAKIC8qCi0gKiAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDggTFNJIENvcnBvcmF0aW9uLgorICogIENvcHlyaWdodCAoYykgMjAwMC0yMDEwIExTSSBDb3Jwb3JhdGlvbi4KICAqCiAgKgogICogICAgICAgICAgIE5hbWU6ICBtcGkyX3JhaWQuaAogICogICAgICAgICAgVGl0bGU6ICBNUEkgSW50ZWdyYXRlZCBSQUlEIG1lc3NhZ2VzIGFuZCBzdHJ1Y3R1cmVzCiAgKiAgQ3JlYXRpb24gRGF0ZTogIEFwcmlsIDI2LCAyMDA3CiAgKgotICogICAgbXBpMl9yYWlkLmggVmVyc2lvbjogIDAyLjAwLjA0CisgKiAgICBtcGkyX3JhaWQuaCBWZXJzaW9uOiAgMDIuMDAuMDUKICAqCiAgKiAgVmVyc2lvbiBIaXN0b3J5CiAgKiAgLS0tLS0tLS0tLS0tLS0tCkBAIC0yMiw2ICsyMiw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICBjYW4gYmUgc2l6ZWQgYnkgdGhlIGJ1aWxkIGVudmlyb25tZW50LgogICogIDA3LTMwLTA5ICAwMi4wMC4wNCAgQWRkZWQgcHJvcGVyIGRlZmluZSBmb3IgdGhlIFVzZSBEZWZhdWx0IFNldHRpbmdzIGJpdCBvZgogICogICAgICAgICAgICAgICAgICAgICAgVm9sdW1lQ3JlYXRpb25GbGFncyBhbmQgbWFya2VkIHRoZSBvbGQgb25lIGFzIG9ic29sZXRlLgorICogIDA1LTEyLTEwICAwMi4wMC4wNSAgQWRkZWQgTVBJMl9SQUlEX1ZPTF9GTEFHU19PUF9NREMgZGVmaW5lLgogICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIApAQCAtMjYwLDYgKzI2MSw3IEBACiAjZGVmaW5lIE1QSTJfUkFJRF9WT0xfRkxBR1NfT1BfT05MSU5FX0NBUF9FWFBBTlNJT04gKDB4MDAwMDAwMDEpCiAjZGVmaW5lIE1QSTJfUkFJRF9WT0xfRkxBR1NfT1BfQ09OU0lTVEVOQ1lfQ0hFQ0sgICAgKDB4MDAwMDAwMDIpCiAjZGVmaW5lIE1QSTJfUkFJRF9WT0xfRkxBR1NfT1BfUkVTWU5DICAgICAgICAgICAgICAgKDB4MDAwMDAwMDMpCisjZGVmaW5lIE1QSTJfUkFJRF9WT0xfRkxBR1NfT1BfTURDICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDQpCiAKIAogLyogUkFJRCBBY3Rpb24gUmVwbHkgQWN0aW9uRGF0YSB1bmlvbiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfc2FzLmggYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9zYXMuaAppbmRleCAyZDhhZWVkLi42MDhmNmQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9zYXMuaAorKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9zYXMuaApAQCAtMSwxMiArMSwxMiBAQAogLyoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNyBMU0kgQ29ycG9yYXRpb24uCisgKiAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMTAgTFNJIENvcnBvcmF0aW9uLgogICoKICAqCiAgKiAgICAgICAgICAgTmFtZTogIG1waTJfc2FzLmgKICAqICAgICAgICAgIFRpdGxlOiAgTVBJIFNlcmlhbCBBdHRhY2hlZCBTQ1NJIHN0cnVjdHVyZXMgYW5kIGRlZmluaXRpb25zCiAgKiAgQ3JlYXRpb24gRGF0ZTogIEZlYnJ1YXJ5IDksIDIwMDcKICAqCi0gKiAgbXBpMi5oIFZlcnNpb246ICAwMi4wMC4wMworICogIG1waTJfc2FzLmggVmVyc2lvbjogIDAyLjAwLjA0CiAgKgogICogIFZlcnNpb24gSGlzdG9yeQogICogIC0tLS0tLS0tLS0tLS0tLQpAQCAtMjAsNiArMjAsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdC4KICAqICAxMC0yOC0wOSAgMDIuMDAuMDMgIENoYW5nZWQgdGhlIHR5cGUgb2YgU0dMIGluIE1QSTJfU0FUQV9QQVNTVEhST1VHSF9SRVFVRVNUCiAgKiAgICAgICAgICAgICAgICAgICAgICB0byBNUEkyX1NHRV9JT19VTklPTiBzaW5jZSBpdCBzdXBwb3J0cyBjaGFpbmVkIFNHTHMuCisgKiAgMDUtMTItMTAgIDAyLjAwLjA0ICBNb2RpZmllZCBzb21lIGNvbW1lbnRzLgogICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIApAQCAtMTEwLDcgKzExMSw3IEBACiAvKiB2YWx1ZXMgZm9yIFBhc3N0aHJvdWdoRmxhZ3MgZmllbGQgKi8KICNkZWZpbmUgTVBJMl9TTVBfUFRfUkVRX1BUX0ZMQUdTX0lNTUVESUFURSAgICAgICgweDgwKQogCi0vKiB2YWx1ZXMgZm9yIFNHTEZsYWdzIGZpZWxkIGFyZSBpbiB0aGUgU0dMIHNlY3Rpb24gb2YgbXBpMi5oICovCisvKiB1c2UgTVBJMl9TR0xGTEFHU18gZGVmaW5lcyBmcm9tIG1waTIuaCBmb3IgdGhlIFNHTEZsYWdzIGZpZWxkICovCiAKIAogLyogU01QIFBhc3N0aHJvdWdoIFJlcGx5IE1lc3NhZ2UgKi8KQEAgLTE3NCw3ICsxNzUsNyBAQAogI2RlZmluZSBNUEkyX1NBVEFfUFRfUkVRX1BUX0ZMQUdTX1dSSVRFICAgICAgICAgICAgICgweDAwMDIpCiAjZGVmaW5lIE1QSTJfU0FUQV9QVF9SRVFfUFRfRkxBR1NfUkVBRCAgICAgICAgICAgICAgKDB4MDAwMSkKIAotLyogdmFsdWVzIGZvciBTR0xGbGFncyBmaWVsZCBhcmUgaW4gdGhlIFNHTCBzZWN0aW9uIG9mIG1waTIuaCAqLworLyogdXNlIE1QSTJfU0dMRkxBR1NfIGRlZmluZXMgZnJvbSBtcGkyLmggZm9yIHRoZSBTR0xGbGFncyBmaWVsZCAqLwogCiAKIC8qIFNBVEEgUGFzc3Rocm91Z2ggUmVwbHkgTWVzc2FnZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfdG9vbC5oIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfdG9vbC5oCmluZGV4IDY4NmIwOWIuLjVjNmUzYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX3Rvb2wuaAorKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl90b29sLmgKQEAgLTYsNyArNiw3IEBACiAgKiAgICAgICAgICBUaXRsZTogIE1QSSBkaWFnbm9zdGljIHRvb2wgc3RydWN0dXJlcyBhbmQgZGVmaW5pdGlvbnMKICAqICBDcmVhdGlvbiBEYXRlOiAgTWFyY2ggMjYsIDIwMDcKICAqCi0gKiAgICBtcGkyX3Rvb2wuaCBWZXJzaW9uOiAgMDIuMDAuMDQKKyAqICAgIG1waTJfdG9vbC5oIFZlcnNpb246ICAwMi4wMC4wNQogICoKICAqICBWZXJzaW9uIEhpc3RvcnkKICAqICAtLS0tLS0tLS0tLS0tLS0KQEAgLTIyLDYgKzIyLDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgIGFuZCByZXBseSBtZXNzYWdlcy4KICAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1QSTJfRElBR19CVUZfVFlQRV9FWFRFTkRFRC4KICAqICAgICAgICAgICAgICAgICAgICAgIEluY3JlbWVudGVkIE1QSTJfRElBR19CVUZfVFlQRV9DT1VOVC4KKyAqICAwNS0xMi0xMCAgMDIuMDAuMDUgIEFkZGVkIERpYWdub3N0aWMgRGF0YSBVcGxvYWQgdG9vbC4KICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKQEAgLTM3LDYgKzM4LDcgQEAKIC8qIGRlZmluZXMgZm9yIHRoZSBUb29scyAqLwogI2RlZmluZSBNUEkyX1RPT0xCT1hfQ0xFQU5fVE9PTCAgICAgICAgICAgICAgICAgICAgICgweDAwKQogI2RlZmluZSBNUEkyX1RPT0xCT1hfTUVNT1JZX01PVkVfVE9PTCAgICAgICAgICAgICAgICgweDAxKQorI2RlZmluZSBNUEkyX1RPT0xCT1hfRElBR19EQVRBX1VQTE9BRF9UT09MICAgICAgICAgICgweDAyKQogI2RlZmluZSBNUEkyX1RPT0xCT1hfSVNUV0lfUkVBRF9XUklURV9UT09MICAgICAgICAgICgweDAzKQogI2RlZmluZSBNUEkyX1RPT0xCT1hfQkVBQ09OX1RPT0wgICAgICAgICAgICAgICAgICAgICgweDA1KQogI2RlZmluZSBNUEkyX1RPT0xCT1hfRElBR05PU1RJQ19DTElfVE9PTCAgICAgICAgICAgICgweDA2KQpAQCAtMTAyLDggKzEwNCw3IEBACiAqICBUb29sYm94IE1lbW9yeSBNb3ZlIHJlcXVlc3QKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXR5cGVkZWYgc3RydWN0IF9NUEkyX1RPT0xCT1hfTUVNX01PVkVfUkVRVUVTVAotewordHlwZWRlZiBzdHJ1Y3QgX01QSTJfVE9PTEJPWF9NRU1fTU9WRV9SRVFVRVNUIHsKICAgICBVOCAgICAgICAgICAgICAgICAgICAgICBUb29sOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLwogICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAvKiAweDAxICovCiAgICAgVTggICAgICAgICAgICAgICAgICAgICAgQ2hhaW5PZmZzZXQ7ICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KQEAgLTEyMCw2ICsxMjEsNDQgQEAKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgVG9vbGJveCBEaWFnbm9zdGljIERhdGEgVXBsb2FkIHJlcXVlc3QKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX1RPT0xCT1hfRElBR19EQVRBX1VQTE9BRF9SRVFVRVNUIHsKKwlVOCAgICAgICAgICAgICAgICAgICAgICBUb29sOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworCVU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAvKiAweDAxICovCisJVTggICAgICAgICAgICAgICAgICAgICAgQ2hhaW5PZmZzZXQ7ICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KKwlVOCAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbjsgICAgICAgICAgICAgICAgICAgLyogMHgwMyAqLworCVUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCisJVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQzOyAgICAgICAgICAgICAgICAgIC8qIDB4MDYgKi8KKwlVOCAgICAgICAgICAgICAgICAgICAgICBNc2dGbGFnczsgICAgICAgICAgICAgICAgICAgLyogMHgwNyAqLworCVU4ICAgICAgICAgICAgICAgICAgICAgIFZQX0lEOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA4ICovCisJVTggICAgICAgICAgICAgICAgICAgICAgVkZfSUQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDkgKi8KKwlVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDQ7ICAgICAgICAgICAgICAgICAgLyogMHgwQSAqLworCVU4ICAgICAgICAgICAgICAgICAgICAgIFNHTEZsYWdzOyAgICAgICAgICAgICAgICAgICAvKiAweDBDICovCisJVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ1OyAgICAgICAgICAgICAgICAgIC8qIDB4MEQgKi8KKwlVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDY7ICAgICAgICAgICAgICAgICAgLyogMHgwRSAqLworCVUzMiAgICAgICAgICAgICAgICAgICAgIEZsYWdzOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDEwICovCisJVTMyICAgICAgICAgICAgICAgICAgICAgRGF0YUxlbmd0aDsgICAgICAgICAgICAgICAgIC8qIDB4MTQgKi8KKwlNUEkyX1NHRV9TSU1QTEVfVU5JT04gICBTR0w7ICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgxOCAqLworfSBNUEkyX1RPT0xCT1hfRElBR19EQVRBX1VQTE9BRF9SRVFVRVNULAorTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1RPT0xCT1hfRElBR19EQVRBX1VQTE9BRF9SRVFVRVNULAorTXBpMlRvb2xib3hEaWFnRGF0YVVwbG9hZFJlcXVlc3RfdCwKK01QSTJfUE9JTlRFUiBwTXBpMlRvb2xib3hEaWFnRGF0YVVwbG9hZFJlcXVlc3RfdDsKKworLyogdXNlIE1QSTJfU0dMRkxBR1NfIGRlZmluZXMgZnJvbSBtcGkyLmggZm9yIHRoZSBTR0xGbGFncyBmaWVsZCAqLworCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX0RJQUdfREFUQV9VUExPQURfSEVBREVSIHsKKwlVMzIgICAgICAgICAgICAgICAgICAgICBEaWFnRGF0YUxlbmd0aDsgICAgICAgICAgICAgLyogMDBoICovCisJVTggICAgICAgICAgICAgICAgICAgICAgRm9ybWF0Q29kZTsgICAgICAgICAgICAgICAgIC8qIDA0aCAqLworCVU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAvKiAwNWggKi8KKwlVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgLyogMDZoICovCit9IE1QSTJfRElBR19EQVRBX1VQTE9BRF9IRUFERVIsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9ESUFHX0RBVEFfVVBMT0FEX0hFQURFUiwKK01waTJEaWFnRGF0YVVwbG9hZEhlYWRlcl90LCBNUEkyX1BPSU5URVIgcE1waTJEaWFnRGF0YVVwbG9hZEhlYWRlcl90OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICBUb29sYm94IElTVFdJIFJlYWQgV3JpdGUgVG9vbAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApAQCAtMTYyLDcgKzIwMSw3IEBACiAjZGVmaW5lIE1QSTJfVE9PTF9JU1RXSV9BQ1RJT05fUkVMRUFTRV9CVVMgICAgICAgICAgKDB4MTEpCiAjZGVmaW5lIE1QSTJfVE9PTF9JU1RXSV9BQ1RJT05fUkVTRVQgICAgICAgICAgICAgICAgKDB4MTIpCiAKLS8qIHZhbHVlcyBmb3IgU0dMRmxhZ3MgZmllbGQgYXJlIGluIHRoZSBTR0wgc2VjdGlvbiBvZiBtcGkyLmggKi8KKy8qIHVzZSBNUEkyX1NHTEZMQUdTXyBkZWZpbmVzIGZyb20gbXBpMi5oIGZvciB0aGUgU0dMRmxhZ3MgZmllbGQgKi8KIAogCiAvKiBUb29sYm94IElTVFdJIFJlYWQgV3JpdGUgVG9vbCByZXBseSBtZXNzYWdlICovCkBAIC0yNDgsNyArMjg3LDcgQEAKICAgTXBpMlRvb2xib3hEaWFnbm9zdGljQ2xpUmVxdWVzdF90LAogICBNUEkyX1BPSU5URVIgcE1waTJUb29sYm94RGlhZ25vc3RpY0NsaVJlcXVlc3RfdDsKIAotLyogdmFsdWVzIGZvciBTR0xGbGFncyBmaWVsZCBhcmUgaW4gdGhlIFNHTCBzZWN0aW9uIG9mIG1waTIuaCAqLworLyogdXNlIE1QSTJfU0dMRkxBR1NfIGRlZmluZXMgZnJvbSBtcGkyLmggZm9yIHRoZSBTR0xGbGFncyBmaWVsZCAqLwogCiAKIC8qIFRvb2xib3ggRGlhZ25vc3RpYyBDTEkgVG9vbCByZXBseSBtZXNzYWdlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2Jhc2UuYyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfYmFzZS5jCmluZGV4IDEyZmFmNjQuLmIyYTgxNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfYmFzZS5jCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfYmFzZS5jCkBAIC02NSw3ICs2NSw2IEBACiBzdGF0aWMgTVBUX0NBTExCQUNLCW1wdF9jYWxsYmFja3NbTVBUX01BWF9DQUxMQkFDS1NdOwogCiAjZGVmaW5lIEZBVUxUX1BPTExJTkdfSU5URVJWQUwgMTAwMCAvKiBpbiBtaWxsaXNlY29uZHMgKi8KLSNkZWZpbmUgTVBUMlNBU19NQVhfUkVRVUVTVF9RVUVVRSA2MDAgLyogbWF4aW11bSBjb250cm9sbGVyIHF1ZXVlIGRlcHRoICovCiAKIHN0YXRpYyBpbnQgbWF4X3F1ZXVlX2RlcHRoID0gLTE7CiBtb2R1bGVfcGFyYW0obWF4X3F1ZXVlX2RlcHRoLCBpbnQsIDApOwpAQCAtNzksNiArNzgsMTAgQEAKIG1vZHVsZV9wYXJhbShtc2l4X2Rpc2FibGUsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKG1zaXhfZGlzYWJsZSwgIiBkaXNhYmxlIG1zaXggcm91dGVkIGludGVycnVwdHMgKGRlZmF1bHQ9MCkiKTsKIAorc3RhdGljIGludCBtaXNzaW5nX2RlbGF5WzJdID0gey0xLCAtMX07Cittb2R1bGVfcGFyYW1fYXJyYXkobWlzc2luZ19kZWxheSwgaW50LCBOVUxMLCAwKTsKK01PRFVMRV9QQVJNX0RFU0MobWlzc2luZ19kZWxheSwgIiBkZXZpY2UgbWlzc2luZyBkZWxheSAsIGlvIG1pc3NpbmcgZGVsYXkiKTsKKwogLyogZGlhZ19idWZmZXJfZW5hYmxlIGlzIGJpdHdpc2UKICAqIGJpdCAwIHNldCA9IFRSQUNFCiAgKiBiaXQgMSBzZXQgPSBTTkFQU0hPVApAQCAtNTE1LDkgKzUxOCw2IEBACiAJY2FzZSBNUEkyX0VWRU5UX0VWRU5UX0NIQU5HRToKIAkJZGVzYyA9ICJFdmVudCBDaGFuZ2UiOwogCQlicmVhazsKLQljYXNlIE1QSTJfRVZFTlRfVEFTS19TRVRfRlVMTDoKLQkJZGVzYyA9ICJUYXNrIFNldCBGdWxsIjsKLQkJYnJlYWs7CiAJY2FzZSBNUEkyX0VWRU5UX1NBU19ERVZJQ0VfU1RBVFVTX0NIQU5HRToKIAkJZGVzYyA9ICJEZXZpY2UgU3RhdHVzIENoYW5nZSI7CiAJCWJyZWFrOwpAQCAtNzU4LDcgKzc1OCw3IEBACiAJCWlmIChzbWlkIDwgaW9jLT5pbnRlcm5hbF9zbWlkKSB7CiAJCQlpID0gc21pZCAtIGlvYy0+aGlfcHJpb3JpdHlfc21pZDsKIAkJCWNiX2lkeCA9IGlvYy0+aHByX2xvb2t1cFtpXS5jYl9pZHg7Ci0JCX0gZWxzZSB7CisJCX0gZWxzZSBpZiAoc21pZCA8PSBpb2MtPmhiYV9xdWV1ZV9kZXB0aCkgIHsKIAkJCWkgPSBzbWlkIC0gaW9jLT5pbnRlcm5hbF9zbWlkOwogCQkJY2JfaWR4ID0gaW9jLT5pbnRlcm5hbF9sb29rdXBbaV0uY2JfaWR4OwogCQl9CkBAIC04NDgsNiArODQ4LDcgQEAKIAkJcmV0dXJuIElSUV9OT05FOwogCiAJY29tcGxldGVkX2NtZHMgPSAwOworCWNiX2lkeCA9IDB4RkY7CiAJZG8gewogCQlyZC53b3JkID0gcnBmLT5Xb3JkczsKIAkJaWYgKHJkLnUubG93ID09IFVJTlRfTUFYIHx8IHJkLnUuaGlnaCA9PSBVSU5UX01BWCkKQEAgLTg2MCw2ICs4NjEsOSBAQAogCQkgICAgTVBJMl9SUFlfREVTQ1JJUFRfRkxBR1NfQUREUkVTU19SRVBMWSkgewogCQkJcmVwbHkgPSBsZTMyX3RvX2NwdQogCQkJCShycGYtPkFkZHJlc3NSZXBseS5SZXBseUZyYW1lQWRkcmVzcyk7CisJCQlpZiAocmVwbHkgPiBpb2MtPnJlcGx5X2RtYV9tYXhfYWRkcmVzcyB8fAorCQkJICAgIHJlcGx5IDwgaW9jLT5yZXBseV9kbWFfbWluX2FkZHJlc3MpCisJCQkJcmVwbHkgPSAwOwogCQl9IGVsc2UgaWYgKHJlcXVlc3RfZGVzcmlwdF90eXBlID09CiAJCSAgICBNUEkyX1JQWV9ERVNDUklQVF9GTEFHU19UQVJHRVRfQ09NTUFORF9CVUZGRVIpCiAJCQlnb3RvIG5leHQ7CkBAIC0xNDg5LDYgKzE0OTMsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGk7CisJc3RydWN0IGNoYWluX3RyYWNrZXIgKmNoYWluX3JlcSwgKm5leHQ7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7CiAJaWYgKHNtaWQgPj0gaW9jLT5oaV9wcmlvcml0eV9zbWlkKSB7CkBAIC0xNTExLDYgKzE1MTYsMTQgQEAKIAogCS8qIHNjc2lpbyBxdWV1ZSAqLwogCWkgPSBzbWlkIC0gMTsKKwlpZiAoIWxpc3RfZW1wdHkoJmlvYy0+c2NzaV9sb29rdXBbaV0uY2hhaW5fbGlzdCkpIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNoYWluX3JlcSwgbmV4dCwKKwkJICAgICZpb2MtPnNjc2lfbG9va3VwW2ldLmNoYWluX2xpc3QsIHRyYWNrZXJfbGlzdCkgeworCQkJbGlzdF9kZWxfaW5pdCgmY2hhaW5fcmVxLT50cmFja2VyX2xpc3QpOworCQkJbGlzdF9hZGRfdGFpbCgmY2hhaW5fcmVxLT50cmFja2VyX2xpc3QsCisJCQkgICAgJmlvYy0+ZnJlZV9jaGFpbl9saXN0KTsKKwkJfQorCX0KIAlpb2MtPnNjc2lfbG9va3VwW2ldLmNiX2lkeCA9IDB4RkY7CiAJaW9jLT5zY3NpX2xvb2t1cFtpXS5zY21kID0gTlVMTDsKIAlsaXN0X2FkZF90YWlsKCZpb2MtPnNjc2lfbG9va3VwW2ldLnRyYWNrZXJfbGlzdCwKQEAgLTE4MTksNiArMTgzMiw5NyBAQAogfQogCiAvKioKKyAqIF9iYXNlX3VwZGF0ZV9taXNzaW5nX2RlbGF5IC0gY2hhbmdlIHRoZSBtaXNzaW5nIGRlbGF5IHRpbWVycworICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAZGV2aWNlX21pc3NpbmdfZGVsYXk6IGFtb3VudCBvZiB0aW1lIHRpbGwgZGV2aWNlIGlzIHJlcG9ydGVkIG1pc3NpbmcKKyAqIEBpb19taXNzaW5nX2RlbGF5OiBpbnRlcnZhbCBJTyBpcyByZXR1cm5lZCB3aGVuIHRoZXJlIGlzIGEgbWlzc2luZyBkZXZpY2UKKyAqCisgKiBSZXR1cm4gbm90aGluZy4KKyAqCisgKiBQYXNzZWQgb24gdGhlIGNvbW1hbmQgbGluZSwgdGhpcyBmdW5jdGlvbiB3aWxsIG1vZGlmeSB0aGUgZGV2aWNlIG1pc3NpbmcKKyAqIGRlbGF5LCBhcyB3ZWxsIGFzIHRoZSBpbyBtaXNzaW5nIGRlbGF5LiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgYXQgZHJpdmVyCisgKiBsb2FkIHRpbWUuCisgKi8KK3N0YXRpYyB2b2lkCitfYmFzZV91cGRhdGVfbWlzc2luZ19kZWxheShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCisJdTE2IGRldmljZV9taXNzaW5nX2RlbGF5LCB1OCBpb19taXNzaW5nX2RlbGF5KQoreworCXUxNiBkbWQsIGRtZF9uZXcsIGRtZF9vcmlnbmFsOworCXU4IGlvX21pc3NpbmdfZGVsYXlfb3JpZ2luYWw7CisJdTE2IHN6OworCU1waTJTYXNJT1VuaXRQYWdlMV90ICpzYXNfaW91bml0X3BnMSA9IE5VTEw7CisJTXBpMkNvbmZpZ1JlcGx5X3QgbXBpX3JlcGx5OworCXU4IG51bV9waHlzID0gMDsKKwl1MTYgaW9jX3N0YXR1czsKKworCW1wdDJzYXNfY29uZmlnX2dldF9udW1iZXJfaGJhX3BoeXMoaW9jLCAmbnVtX3BoeXMpOworCWlmICghbnVtX3BoeXMpCisJCXJldHVybjsKKworCXN6ID0gb2Zmc2V0b2YoTXBpMlNhc0lPVW5pdFBhZ2UxX3QsIFBoeURhdGEpICsgKG51bV9waHlzICoKKwkgICAgc2l6ZW9mKE1waTJTYXNJT1VuaXQxUGh5RGF0YV90KSk7CisJc2FzX2lvdW5pdF9wZzEgPSBremFsbG9jKHN6LCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNhc19pb3VuaXRfcGcxKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQlnb3RvIG91dDsKKwl9CisJaWYgKChtcHQyc2FzX2NvbmZpZ19nZXRfc2FzX2lvdW5pdF9wZzEoaW9jLCAmbXBpX3JlcGx5LAorCSAgICBzYXNfaW91bml0X3BnMSwgc3opKSkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJZ290byBvdXQ7CisJfQorCWlvY19zdGF0dXMgPSBsZTE2X3RvX2NwdShtcGlfcmVwbHkuSU9DU3RhdHVzKSAmCisJICAgIE1QSTJfSU9DU1RBVFVTX01BU0s7CisJaWYgKGlvY19zdGF0dXMgIT0gTVBJMl9JT0NTVEFUVVNfU1VDQ0VTUykgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogZGV2aWNlIG1pc3NpbmcgZGVsYXkgKi8KKwlkbWQgPSBzYXNfaW91bml0X3BnMS0+UmVwb3J0RGV2aWNlTWlzc2luZ0RlbGF5OworCWlmIChkbWQgJiBNUEkyX1NBU0lPVU5JVDFfUkVQT1JUX01JU1NJTkdfVU5JVF8xNikKKwkJZG1kID0gKGRtZCAmIE1QSTJfU0FTSU9VTklUMV9SRVBPUlRfTUlTU0lOR19USU1FT1VUX01BU0spICogMTY7CisJZWxzZQorCQlkbWQgPSBkbWQgJiBNUEkyX1NBU0lPVU5JVDFfUkVQT1JUX01JU1NJTkdfVElNRU9VVF9NQVNLOworCWRtZF9vcmlnbmFsID0gZG1kOworCWlmIChkZXZpY2VfbWlzc2luZ19kZWxheSA+IDB4N0YpIHsKKwkJZG1kID0gKGRldmljZV9taXNzaW5nX2RlbGF5ID4gMHg3RjApID8gMHg3RjAgOgorCQkgICAgZGV2aWNlX21pc3NpbmdfZGVsYXk7CisJCWRtZCA9IGRtZCAvIDE2OworCQlkbWQgfD0gTVBJMl9TQVNJT1VOSVQxX1JFUE9SVF9NSVNTSU5HX1VOSVRfMTY7CisJfSBlbHNlCisJCWRtZCA9IGRldmljZV9taXNzaW5nX2RlbGF5OworCXNhc19pb3VuaXRfcGcxLT5SZXBvcnREZXZpY2VNaXNzaW5nRGVsYXkgPSBkbWQ7CisKKwkvKiBpbyBtaXNzaW5nIGRlbGF5ICovCisJaW9fbWlzc2luZ19kZWxheV9vcmlnaW5hbCA9IHNhc19pb3VuaXRfcGcxLT5JT0RldmljZU1pc3NpbmdEZWxheTsKKwlzYXNfaW91bml0X3BnMS0+SU9EZXZpY2VNaXNzaW5nRGVsYXkgPSBpb19taXNzaW5nX2RlbGF5OworCisJaWYgKCFtcHQyc2FzX2NvbmZpZ19zZXRfc2FzX2lvdW5pdF9wZzEoaW9jLCAmbXBpX3JlcGx5LCBzYXNfaW91bml0X3BnMSwKKwkgICAgc3opKSB7CisJCWlmIChkbWQgJiBNUEkyX1NBU0lPVU5JVDFfUkVQT1JUX01JU1NJTkdfVU5JVF8xNikKKwkJCWRtZF9uZXcgPSAoZG1kICYKKwkJCSAgICBNUEkyX1NBU0lPVU5JVDFfUkVQT1JUX01JU1NJTkdfVElNRU9VVF9NQVNLKSAqIDE2OworCQllbHNlCisJCQlkbWRfbmV3ID0KKwkJICAgIGRtZCAmIE1QSTJfU0FTSU9VTklUMV9SRVBPUlRfTUlTU0lOR19USU1FT1VUX01BU0s7CisJCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICJkZXZpY2VfbWlzc2luZ19kZWxheTogb2xkKCVkKSwgIgorCQkgICAgIm5ldyglZClcbiIsIGlvYy0+bmFtZSwgZG1kX29yaWduYWwsIGRtZF9uZXcpOworCQlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiaW9jX21pc3NpbmdfZGVsYXk6IG9sZCglZCksICIKKwkJICAgICJuZXcoJWQpXG4iLCBpb2MtPm5hbWUsIGlvX21pc3NpbmdfZGVsYXlfb3JpZ2luYWwsCisJCSAgICBpb19taXNzaW5nX2RlbGF5KTsKKwkJaW9jLT5kZXZpY2VfbWlzc2luZ19kZWxheSA9IGRtZF9uZXc7CisJCWlvYy0+aW9fbWlzc2luZ19kZWxheSA9IGlvX21pc3NpbmdfZGVsYXk7CisJfQorCitvdXQ6CisJa2ZyZWUoc2FzX2lvdW5pdF9wZzEpOworfQorCisvKioKICAqIF9iYXNlX3N0YXRpY19jb25maWdfcGFnZXMgLSBzdGF0aWMgc3RhcnQgb2YgZGF5IGNvbmZpZyBwYWdlcwogICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CiAgKgpAQCAtMTg1NSw2ICsxOTU5LDcgQEAKIAkJICAgIE1QSTJfSU9VTklUUEFHRTFfRElTQUJMRV9UQVNLX1NFVF9GVUxMX0hBTkRMSU5HOwogCWlvYy0+aW91bml0X3BnMS5GbGFncyA9IGNwdV90b19sZTMyKGlvdW5pdF9wZzFfZmxhZ3MpOwogCW1wdDJzYXNfY29uZmlnX3NldF9pb3VuaXRfcGcxKGlvYywgJm1waV9yZXBseSwgJmlvYy0+aW91bml0X3BnMSk7CisKIH0KIAogLyoqCkBAIC0xODY4LDYgKzE5NzMsOCBAQAogc3RhdGljIHZvaWQKIF9iYXNlX3JlbGVhc2VfbWVtb3J5X3Bvb2xzKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYykKIHsKKwlpbnQgaTsKKwogCWRleGl0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzXG4iLCBpb2MtPm5hbWUsCiAJICAgIF9fZnVuY19fKSk7CiAKQEAgLTE5MzIsNiArMjAzOSwyMCBAQAogCX0KIAlrZnJlZShpb2MtPmhwcl9sb29rdXApOwogCWtmcmVlKGlvYy0+aW50ZXJuYWxfbG9va3VwKTsKKwlpZiAoaW9jLT5jaGFpbl9sb29rdXApIHsKKwkJZm9yIChpID0gMDsgaSA8IGlvYy0+Y2hhaW5fZGVwdGg7IGkrKykgeworCQkJaWYgKGlvYy0+Y2hhaW5fbG9va3VwW2ldLmNoYWluX2J1ZmZlcikKKwkJCQlwY2lfcG9vbF9mcmVlKGlvYy0+Y2hhaW5fZG1hX3Bvb2wsCisJCQkJICAgIGlvYy0+Y2hhaW5fbG9va3VwW2ldLmNoYWluX2J1ZmZlciwKKwkJCQkgICAgaW9jLT5jaGFpbl9sb29rdXBbaV0uY2hhaW5fYnVmZmVyX2RtYSk7CisJCX0KKwkJaWYgKGlvYy0+Y2hhaW5fZG1hX3Bvb2wpCisJCQlwY2lfcG9vbF9kZXN0cm95KGlvYy0+Y2hhaW5fZG1hX3Bvb2wpOworCX0KKwlpZiAoaW9jLT5jaGFpbl9sb29rdXApIHsKKwkJZnJlZV9wYWdlcygodWxvbmcpaW9jLT5jaGFpbl9sb29rdXAsIGlvYy0+Y2hhaW5fcGFnZXMpOworCQlpb2MtPmNoYWluX2xvb2t1cCA9IE5VTEw7CisJfQogfQogCiAKQEAgLTE5NTMsNiArMjA3NCw3IEBACiAJdTMyIHN6LCB0b3RhbF9zejsKIAl1MzIgcmV0cnlfc3o7CiAJdTE2IG1heF9yZXF1ZXN0X2NyZWRpdDsKKwlpbnQgaTsKIAogCWRpbml0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzXG4iLCBpb2MtPm5hbWUsCiAJICAgIF9fZnVuY19fKSk7CkBAIC0xOTcwLDE0ICsyMDkyLDExIEBACiAJfQogCiAJLyogY29tbWFuZCBsaW5lIHR1bmFibGVzICBmb3IgbWF4IGNvbnRyb2xsZXIgcXVldWUgZGVwdGggKi8KLQlpZiAobWF4X3F1ZXVlX2RlcHRoICE9IC0xKSB7CisJaWYgKG1heF9xdWV1ZV9kZXB0aCAhPSAtMSkKIAkJbWF4X3JlcXVlc3RfY3JlZGl0ID0gKG1heF9xdWV1ZV9kZXB0aCA8IGZhY3RzLT5SZXF1ZXN0Q3JlZGl0KQogCQkgICAgPyBtYXhfcXVldWVfZGVwdGggOiBmYWN0cy0+UmVxdWVzdENyZWRpdDsKLQl9IGVsc2UgewotCQltYXhfcmVxdWVzdF9jcmVkaXQgPSAoZmFjdHMtPlJlcXVlc3RDcmVkaXQgPgotCQkgICAgTVBUMlNBU19NQVhfUkVRVUVTVF9RVUVVRSkgPyBNUFQyU0FTX01BWF9SRVFVRVNUX1FVRVVFIDoKLQkJICAgIGZhY3RzLT5SZXF1ZXN0Q3JlZGl0OwotCX0KKwllbHNlCisJCW1heF9yZXF1ZXN0X2NyZWRpdCA9IGZhY3RzLT5SZXF1ZXN0Q3JlZGl0OwogCiAJaW9jLT5oYmFfcXVldWVfZGVwdGggPSBtYXhfcmVxdWVzdF9jcmVkaXQ7CiAJaW9jLT5oaV9wcmlvcml0eV9kZXB0aCA9IGZhY3RzLT5IaWdoUHJpb3JpdHlDcmVkaXQ7CkBAIC0yMDgzLDcgKzIyMDIsNyBAQAogCSAqICJmcmFtZSBmb3Igc21pZD0wCiAJICovCiAJaW9jLT5jaGFpbl9kZXB0aCA9IGlvYy0+Y2hhaW5zX25lZWRlZF9wZXJfaW8gKiBpb2MtPnNjc2lpb19kZXB0aDsKLQlzeiA9ICgoaW9jLT5zY3NpaW9fZGVwdGggKyAxICsgaW9jLT5jaGFpbl9kZXB0aCkgKiBpb2MtPnJlcXVlc3Rfc3opOworCXN6ID0gKChpb2MtPnNjc2lpb19kZXB0aCArIDEpICogaW9jLT5yZXF1ZXN0X3N6KTsKIAogCS8qIGhpLXByaW9yaXR5IHF1ZXVlICovCiAJc3ogKz0gKGlvYy0+aGlfcHJpb3JpdHlfZGVwdGggKiBpb2MtPnJlcXVlc3Rfc3opOwpAQCAtMjEyNCwxOSArMjI0MywxMSBAQAogCWlvYy0+aW50ZXJuYWxfZG1hID0gaW9jLT5oaV9wcmlvcml0eV9kbWEgKyAoaW9jLT5oaV9wcmlvcml0eV9kZXB0aCAqCiAJICAgIGlvYy0+cmVxdWVzdF9zeik7CiAKLQlpb2MtPmNoYWluID0gaW9jLT5pbnRlcm5hbCArIChpb2MtPmludGVybmFsX2RlcHRoICoKLQkgICAgaW9jLT5yZXF1ZXN0X3N6KTsKLQlpb2MtPmNoYWluX2RtYSA9IGlvYy0+aW50ZXJuYWxfZG1hICsgKGlvYy0+aW50ZXJuYWxfZGVwdGggKgotCSAgICBpb2MtPnJlcXVlc3Rfc3opOwogCiAJZGluaXRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAicmVxdWVzdCBwb29sKDB4JXApOiAiCiAJICAgICJkZXB0aCglZCksIGZyYW1lX3NpemUoJWQpLCBwb29sX3NpemUoJWQga0IpXG4iLCBpb2MtPm5hbWUsCiAJICAgIGlvYy0+cmVxdWVzdCwgaW9jLT5oYmFfcXVldWVfZGVwdGgsIGlvYy0+cmVxdWVzdF9zeiwKIAkgICAgKGlvYy0+aGJhX3F1ZXVlX2RlcHRoICogaW9jLT5yZXF1ZXN0X3N6KS8xMDI0KSk7Ci0JZGluaXRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiY2hhaW4gcG9vbCgweCVwKTogZGVwdGgiCi0JICAgICIoJWQpLCBmcmFtZV9zaXplKCVkKSwgcG9vbF9zaXplKCVkIGtCKVxuIiwgaW9jLT5uYW1lLCBpb2MtPmNoYWluLAotCSAgICBpb2MtPmNoYWluX2RlcHRoLCBpb2MtPnJlcXVlc3Rfc3osICgoaW9jLT5jaGFpbl9kZXB0aCAqCi0JICAgIGlvYy0+cmVxdWVzdF9zeikpLzEwMjQpKTsKIAlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICJyZXF1ZXN0IHBvb2w6IGRtYSgweCVsbHgpXG4iLAogCSAgICBpb2MtPm5hbWUsICh1bnNpZ25lZCBsb25nIGxvbmcpIGlvYy0+cmVxdWVzdF9kbWEpKTsKIAl0b3RhbF9zeiArPSBzejsKQEAgLTIxNTUsNiArMjI2NiwzOCBAQAogCSAgICAiZGVwdGgoJWQpXG4iLCBpb2MtPm5hbWUsIGlvYy0+cmVxdWVzdCwKIAkgICAgaW9jLT5zY3NpaW9fZGVwdGgpKTsKIAorCS8qIGxvb3AgdGlsbCB0aGUgYWxsb2NhdGlvbiBzdWNjZWVkcyAqLworCWRvIHsKKwkJc3ogPSBpb2MtPmNoYWluX2RlcHRoICogc2l6ZW9mKHN0cnVjdCBjaGFpbl90cmFja2VyKTsKKwkJaW9jLT5jaGFpbl9wYWdlcyA9IGdldF9vcmRlcihzeik7CisJCWlvYy0+Y2hhaW5fbG9va3VwID0gKHN0cnVjdCBjaGFpbl90cmFja2VyICopX19nZXRfZnJlZV9wYWdlcygKKwkJICAgIEdGUF9LRVJORUwsIGlvYy0+Y2hhaW5fcGFnZXMpOworCQlpZiAoaW9jLT5jaGFpbl9sb29rdXAgPT0gTlVMTCkKKwkJCWlvYy0+Y2hhaW5fZGVwdGggLT0gMTAwOworCX0gd2hpbGUgKGlvYy0+Y2hhaW5fbG9va3VwID09IE5VTEwpOworCWlvYy0+Y2hhaW5fZG1hX3Bvb2wgPSBwY2lfcG9vbF9jcmVhdGUoImNoYWluIHBvb2wiLCBpb2MtPnBkZXYsCisJICAgIGlvYy0+cmVxdWVzdF9zeiwgMTYsIDApOworCWlmICghaW9jLT5jaGFpbl9kbWFfcG9vbCkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJjaGFpbl9kbWFfcG9vbDogcGNpX3Bvb2xfY3JlYXRlICIKKwkJICAgICJmYWlsZWRcbiIsIGlvYy0+bmFtZSk7CisJCWdvdG8gb3V0OworCX0KKwlmb3IgKGkgPSAwOyBpIDwgaW9jLT5jaGFpbl9kZXB0aDsgaSsrKSB7CisJCWlvYy0+Y2hhaW5fbG9va3VwW2ldLmNoYWluX2J1ZmZlciA9IHBjaV9wb29sX2FsbG9jKAorCQkgICAgaW9jLT5jaGFpbl9kbWFfcG9vbCAsIEdGUF9LRVJORUwsCisJCSAgICAmaW9jLT5jaGFpbl9sb29rdXBbaV0uY2hhaW5fYnVmZmVyX2RtYSk7CisJCWlmICghaW9jLT5jaGFpbl9sb29rdXBbaV0uY2hhaW5fYnVmZmVyKSB7CisJCQlpb2MtPmNoYWluX2RlcHRoID0gaTsKKwkJCWdvdG8gY2hhaW5fZG9uZTsKKwkJfQorCQl0b3RhbF9zeiArPSBpb2MtPnJlcXVlc3Rfc3o7CisJfQorY2hhaW5fZG9uZToKKwlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICJjaGFpbiBwb29sIGRlcHRoIgorCSAgICAiKCVkKSwgZnJhbWVfc2l6ZSglZCksIHBvb2xfc2l6ZSglZCBrQilcbiIsIGlvYy0+bmFtZSwKKwkgICAgaW9jLT5jaGFpbl9kZXB0aCwgaW9jLT5yZXF1ZXN0X3N6LCAoKGlvYy0+Y2hhaW5fZGVwdGggKgorCSAgICBpb2MtPnJlcXVlc3Rfc3opKS8xMDI0KSk7CisKIAkvKiBpbml0aWFsaXplIGhpLXByaW9yaXR5IHF1ZXVlIHNtaWQncyAqLwogCWlvYy0+aHByX2xvb2t1cCA9IGtjYWxsb2MoaW9jLT5oaV9wcmlvcml0eV9kZXB0aCwKIAkgICAgc2l6ZW9mKHN0cnVjdCByZXF1ZXN0X3RyYWNrZXIpLCBHRlBfS0VSTkVMKTsKQEAgLTIyMjEsNiArMjM2NCw4IEBACiAJCSAgICBpb2MtPm5hbWUpOwogCQlnb3RvIG91dDsKIAl9CisJaW9jLT5yZXBseV9kbWFfbWluX2FkZHJlc3MgPSAodTMyKShpb2MtPnJlcGx5X2RtYSk7CisJaW9jLT5yZXBseV9kbWFfbWF4X2FkZHJlc3MgPSAodTMyKShpb2MtPnJlcGx5X2RtYSkgKyBzejsKIAlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICJyZXBseSBwb29sKDB4JXApOiBkZXB0aCIKIAkgICAgIiglZCksIGZyYW1lX3NpemUoJWQpLCBwb29sX3NpemUoJWQga0IpXG4iLCBpb2MtPm5hbWUsIGlvYy0+cmVwbHksCiAJICAgIGlvYy0+cmVwbHlfZnJlZV9xdWV1ZV9kZXB0aCwgaW9jLT5yZXBseV9zeiwgc3ovMTAyNCkpOwpAQCAtMjMwMiw3ICsyNDQ3LDYgQEAKIAlyZXR1cm4gMDsKIAogIG91dDoKLQlfYmFzZV9yZWxlYXNlX21lbW9yeV9wb29scyhpb2MpOwogCXJldHVybiAtRU5PTUVNOwogfQogCkBAIC0zNDg1LDYgKzM2MjksNyBAQAogCUlOSVRfTElTVF9IRUFEKCZpb2MtPmZyZWVfbGlzdCk7CiAJc21pZCA9IDE7CiAJZm9yIChpID0gMDsgaSA8IGlvYy0+c2NzaWlvX2RlcHRoOyBpKyssIHNtaWQrKykgeworCQlJTklUX0xJU1RfSEVBRCgmaW9jLT5zY3NpX2xvb2t1cFtpXS5jaGFpbl9saXN0KTsKIAkJaW9jLT5zY3NpX2xvb2t1cFtpXS5jYl9pZHggPSAweEZGOwogCQlpb2MtPnNjc2lfbG9va3VwW2ldLnNtaWQgPSBzbWlkOwogCQlpb2MtPnNjc2lfbG9va3VwW2ldLnNjbWQgPSBOVUxMOwpAQCAtMzUxMSw2ICszNjU2LDEzIEBACiAJCWxpc3RfYWRkX3RhaWwoJmlvYy0+aW50ZXJuYWxfbG9va3VwW2ldLnRyYWNrZXJfbGlzdCwKIAkJICAgICZpb2MtPmludGVybmFsX2ZyZWVfbGlzdCk7CiAJfQorCisJLyogY2hhaW4gcG9vbCAqLworCUlOSVRfTElTVF9IRUFEKCZpb2MtPmZyZWVfY2hhaW5fbGlzdCk7CisJZm9yIChpID0gMDsgaSA8IGlvYy0+Y2hhaW5fZGVwdGg7IGkrKykKKwkJbGlzdF9hZGRfdGFpbCgmaW9jLT5jaGFpbl9sb29rdXBbaV0udHJhY2tlcl9saXN0LAorCQkgICAgJmlvYy0+ZnJlZV9jaGFpbl9saXN0KTsKKwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOwogCiAJLyogaW5pdGlhbGl6ZSBSZXBseSBGcmVlIFF1ZXVlICovCkBAIC0zNzA4LDEyICszODYwLDE1IEBACiAJX2Jhc2VfdW5tYXNrX2V2ZW50cyhpb2MsIE1QSTJfRVZFTlRfSVJfVk9MVU1FKTsKIAlfYmFzZV91bm1hc2tfZXZlbnRzKGlvYywgTVBJMl9FVkVOVF9JUl9QSFlTSUNBTF9ESVNLKTsKIAlfYmFzZV91bm1hc2tfZXZlbnRzKGlvYywgTVBJMl9FVkVOVF9JUl9PUEVSQVRJT05fU1RBVFVTKTsKLQlfYmFzZV91bm1hc2tfZXZlbnRzKGlvYywgTVBJMl9FVkVOVF9UQVNLX1NFVF9GVUxMKTsKIAlfYmFzZV91bm1hc2tfZXZlbnRzKGlvYywgTVBJMl9FVkVOVF9MT0dfRU5UUllfQURERUQpOwogCXIgPSBfYmFzZV9tYWtlX2lvY19vcGVyYXRpb25hbChpb2MsIENBTl9TTEVFUCk7CiAJaWYgKHIpCiAJCWdvdG8gb3V0X2ZyZWVfcmVzb3VyY2VzOwogCisJaWYgKG1pc3NpbmdfZGVsYXlbMF0gIT0gLTEgJiYgbWlzc2luZ19kZWxheVsxXSAhPSAtMSkKKwkJX2Jhc2VfdXBkYXRlX21pc3NpbmdfZGVsYXkoaW9jLCBtaXNzaW5nX2RlbGF5WzBdLAorCQkgICAgbWlzc2luZ19kZWxheVsxXSk7CisKIAltcHQyc2FzX2Jhc2Vfc3RhcnRfd2F0Y2hkb2coaW9jKTsKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19iYXNlLmggYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2Jhc2UuaAppbmRleCAwYjE1YThiLi4yODM1NjhjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2Jhc2UuaAorKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2Jhc2UuaApAQCAtNjksOCArNjksOCBAQAogI2RlZmluZSBNUFQyU0FTX0RSSVZFUl9OQU1FCQkibXB0MnNhcyIKICNkZWZpbmUgTVBUMlNBU19BVVRIT1IJIkxTSSBDb3Jwb3JhdGlvbiA8REwtTVBURnVzaW9uTGludXhAbHNpLmNvbT4iCiAjZGVmaW5lIE1QVDJTQVNfREVTQ1JJUFRJT04JIkxTSSBNUFQgRnVzaW9uIFNBUyAyLjAgRGV2aWNlIERyaXZlciIKLSNkZWZpbmUgTVBUMlNBU19EUklWRVJfVkVSU0lPTgkJIjA2LjEwMC4wMC4wMCIKLSNkZWZpbmUgTVBUMlNBU19NQUpPUl9WRVJTSU9OCQkwNgorI2RlZmluZSBNUFQyU0FTX0RSSVZFUl9WRVJTSU9OCQkiMDcuMTAwLjAwLjAwIgorI2RlZmluZSBNUFQyU0FTX01BSk9SX1ZFUlNJT04JCTA3CiAjZGVmaW5lIE1QVDJTQVNfTUlOT1JfVkVSU0lPTgkJMTAwCiAjZGVmaW5lIE1QVDJTQVNfQlVJTERfVkVSU0lPTgkJMDAKICNkZWZpbmUgTVBUMlNBU19SRUxFQVNFX1ZFUlNJT04JCTAwCkBAIC00MTksNiArNDE5LDE4IEBACiB9OwogCiAvKioKKyAqIHN0cnVjdCBjaGFpbl90cmFja2VyIC0gZmlybXdhcmUgY2hhaW4gdHJhY2tlcgorICogQGNoYWluX2J1ZmZlcjogY2hhaW4gYnVmZmVyCisgKiBAY2hhaW5fYnVmZmVyX2RtYTogcGh5c2ljYWwgYWRkcmVzcworICogQHRyYWNrZXJfbGlzdDogbGlzdCBvZiBmcmVlIHJlcXVlc3QgKGlvYy0+ZnJlZV9jaGFpbl9saXN0KQorICovCitzdHJ1Y3QgY2hhaW5fdHJhY2tlciB7CisJdm9pZCAqY2hhaW5fYnVmZmVyOworCWRtYV9hZGRyX3QgY2hhaW5fYnVmZmVyX2RtYTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHRyYWNrZXJfbGlzdDsKK307CisKKy8qKgogICogc3RydWN0IHJlcXVlc3RfdHJhY2tlciAtIGZpcm13YXJlIHJlcXVlc3QgdHJhY2tlcgogICogQHNtaWQ6IHN5c3RlbSBtZXNzYWdlIGlkCiAgKiBAc2NtZDogc2NzaSByZXF1ZXN0IHBvaW50ZXIKQEAgLTQzMCw2ICs0NDIsNyBAQAogCXUxNglzbWlkOwogCXN0cnVjdCBzY3NpX2NtbmQgKnNjbWQ7CiAJdTgJY2JfaWR4OworCXN0cnVjdCBsaXN0X2hlYWQgY2hhaW5fbGlzdDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHRyYWNrZXJfbGlzdDsKIH07CiAKQEAgLTcwNCw4ICs3MTcsMTAgQEAKIAl3YWl0X3F1ZXVlX2hlYWRfdCByZXNldF93cTsKIAogCS8qIGNoYWluICovCi0JdTgJCSpjaGFpbjsKLQlkbWFfYWRkcl90CWNoYWluX2RtYTsKKwlzdHJ1Y3QgY2hhaW5fdHJhY2tlciAqY2hhaW5fbG9va3VwOworCXN0cnVjdCBsaXN0X2hlYWQgZnJlZV9jaGFpbl9saXN0OworCXN0cnVjdCBkbWFfcG9vbCAqY2hhaW5fZG1hX3Bvb2w7CisJdWxvbmcJCWNoYWluX3BhZ2VzOwogCXUxNiAJCW1heF9zZ2VzX2luX21haW5fbWVzc2FnZTsKIAl1MTYJCW1heF9zZ2VzX2luX2NoYWluX21lc3NhZ2U7CiAJdTE2CQljaGFpbnNfbmVlZGVkX3Blcl9pbzsKQEAgLTczNyw2ICs3NTIsOCBAQAogCXUxNgkJcmVwbHlfc3o7CiAJdTgJCSpyZXBseTsKIAlkbWFfYWRkcl90CXJlcGx5X2RtYTsKKwl1MzIJCXJlcGx5X2RtYV9tYXhfYWRkcmVzczsKKwl1MzIJCXJlcGx5X2RtYV9taW5fYWRkcmVzczsKIAlzdHJ1Y3QgZG1hX3Bvb2wgKnJlcGx5X2RtYV9wb29sOwogCiAJLyogcmVwbHkgZnJlZSBxdWV1ZSAqLwpAQCAtODMyLDYgKzg0OSw4IEBACiAgICAgdWxvbmcgdGltZW91dCwgc3RydWN0IHNjc2lfY21uZCAqc2NtZCk7CiB2b2lkIG1wdDJzYXNfc2NzaWhfc2V0X3RtX2ZsYWcoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgaGFuZGxlKTsKIHZvaWQgbXB0MnNhc19zY3NpaF9jbGVhcl90bV9mbGFnKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IGhhbmRsZSk7Cit2b2lkIG1wdDJzYXNfZXhwYW5kZXJfcmVtb3ZlKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTY0IHNhc19hZGRyZXNzKTsKK3ZvaWQgbXB0MnNhc19kZXZpY2VfcmVtb3ZlKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTY0IHNhc19hZGRyZXNzKTsKIHN0cnVjdCBfc2FzX25vZGUgKm1wdDJzYXNfc2NzaWhfZXhwYW5kZXJfZmluZF9ieV9oYW5kbGUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAogICAgIHUxNiBoYW5kbGUpOwogc3RydWN0IF9zYXNfbm9kZSAqbXB0MnNhc19zY3NpaF9leHBhbmRlcl9maW5kX2J5X3Nhc19hZGRyZXNzKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfY3RsLmMgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2N0bC5jCmluZGV4IDQwY2I4YWUuLmU5MmI3N2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfY3RsLmMKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jdGwuYwpAQCAtODEsNiArODEsNyBAQAogCUJMT0NLSU5HLAogfTsKIAorI2lmZGVmIENPTkZJR19TQ1NJX01QVDJTQVNfTE9HR0lORwogLyoqCiAgKiBfY3RsX3Nhc19kZXZpY2VfZmluZF9ieV9oYW5kbGUgLSBzYXMgZGV2aWNlIHNlYXJjaAogICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CkBAIC0xMDcsNyArMTA4LDYgQEAKIAlyZXR1cm4gcjsKIH0KIAotI2lmZGVmIENPTkZJR19TQ1NJX01QVDJTQVNfTE9HR0lORwogLyoqCiAgKiBfY3RsX2Rpc3BsYXlfc29tZV9kZWJ1ZyAtIGRlYnVnIHJvdXRpbmUKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19zY3NpaC5jIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19zY3NpaC5jCmluZGV4IDFhOTZhMDAuLmVkYTM0N2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfc2NzaWguYworKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX3Njc2loLmMKQEAgLTkzMSwzMSArOTMxLDMyIEBACiB9CiAKIC8qKgotICogX3Njc2loX2dldF9jaGFpbl9idWZmZXJfZG1hIC0gb2J0YWluIGJsb2NrIG9mIGNoYWlucyAoZG1hIGFkZHJlc3MpCisgKiBfc2NzaWhfZ2V0X2NoYWluX2J1ZmZlcl90cmFja2VyIC0gb2J0YWluIGNoYWluIHRyYWNrZXIKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAotICogQHNtaWQ6IHN5c3RlbSByZXF1ZXN0IG1lc3NhZ2UgaW5kZXgKKyAqIEBzbWlkOiBzbWlkIGFzc29jaWF0ZWQgdG8gYW4gSU8gcmVxdWVzdAogICoKLSAqIFJldHVybnMgcGh5cyBwb2ludGVyIHRvIGNoYWluIGJ1ZmZlci4KKyAqIFJldHVybnMgY2hhaW4gdHJhY2tlcihmcm9tIGlvYy0+ZnJlZV9jaGFpbl9saXN0KQogICovCi1zdGF0aWMgZG1hX2FkZHJfdAotX3Njc2loX2dldF9jaGFpbl9idWZmZXJfZG1hKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQpCitzdGF0aWMgc3RydWN0IGNoYWluX3RyYWNrZXIgKgorX3Njc2loX2dldF9jaGFpbl9idWZmZXJfdHJhY2tlcihzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkKQogewotCXJldHVybiBpb2MtPmNoYWluX2RtYSArICgoc21pZCAtIDEpICogKGlvYy0+cmVxdWVzdF9zeiAqCi0JICAgIGlvYy0+Y2hhaW5zX25lZWRlZF9wZXJfaW8pKTsKLX0KKwlzdHJ1Y3QgY2hhaW5fdHJhY2tlciAqY2hhaW5fcmVxOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLS8qKgotICogX3Njc2loX2dldF9jaGFpbl9idWZmZXIgLSBvYnRhaW4gYmxvY2sgb2YgY2hhaW5zIGFzc2lnbmVkIHRvIGEgbWYgcmVxdWVzdAotICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0Ci0gKiBAc21pZDogc3lzdGVtIHJlcXVlc3QgbWVzc2FnZSBpbmRleAotICoKLSAqIFJldHVybnMgdmlydCBwb2ludGVyIHRvIGNoYWluIGJ1ZmZlci4KLSAqLwotc3RhdGljIHZvaWQgKgotX3Njc2loX2dldF9jaGFpbl9idWZmZXIoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCkKLXsKLQlyZXR1cm4gKHZvaWQgKikoaW9jLT5jaGFpbiArICgoc21pZCAtIDEpICogKGlvYy0+cmVxdWVzdF9zeiAqCi0JICAgIGlvYy0+Y2hhaW5zX25lZWRlZF9wZXJfaW8pKSk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOworCWlmIChsaXN0X2VtcHR5KCZpb2MtPmZyZWVfY2hhaW5fbGlzdCkpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7CisJCXByaW50ayhNUFQyU0FTX1dBUk5fRk1UICJjaGFpbiBidWZmZXJzIG5vdCBhdmFpbGFibGVcbiIsCisJCSAgICBpb2MtPm5hbWUpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJY2hhaW5fcmVxID0gbGlzdF9lbnRyeShpb2MtPmZyZWVfY2hhaW5fbGlzdC5uZXh0LAorCSAgICBzdHJ1Y3QgY2hhaW5fdHJhY2tlciwgdHJhY2tlcl9saXN0KTsKKwlsaXN0X2RlbF9pbml0KCZjaGFpbl9yZXEtPnRyYWNrZXJfbGlzdCk7CisJbGlzdF9hZGRfdGFpbCgmY2hhaW5fcmVxLT50cmFja2VyX2xpc3QsCisJICAgICZpb2MtPnNjc2lfbG9va3VwW3NtaWQgLSAxXS5jaGFpbl9saXN0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNjc2lfbG9va3VwX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gY2hhaW5fcmVxOwogfQogCiAvKioKQEAgLTk4Niw2ICs5ODcsNyBAQAogCXUzMiBzZ2xfZmxhZ3M7CiAJdTMyIHNnbF9mbGFnc19sYXN0X2VsZW1lbnQ7CiAJdTMyIHNnbF9mbGFnc19lbmRfYnVmZmVyOworCXN0cnVjdCBjaGFpbl90cmFja2VyICpjaGFpbl9yZXE7CiAKIAltcGlfcmVxdWVzdCA9IG1wdDJzYXNfYmFzZV9nZXRfbXNnX2ZyYW1lKGlvYywgc21pZCk7CiAKQEAgLTEwMzMsOCArMTAzNSwxMSBAQAogCiAJLyogaW5pdGlhbGl6aW5nIHRoZSBjaGFpbiBmbGFncyBhbmQgcG9pbnRlcnMgKi8KIAljaGFpbl9mbGFncyA9IE1QSTJfU0dFX0ZMQUdTX0NIQUlOX0VMRU1FTlQgPDwgTVBJMl9TR0VfRkxBR1NfU0hJRlQ7Ci0JY2hhaW4gPSBfc2NzaWhfZ2V0X2NoYWluX2J1ZmZlcihpb2MsIHNtaWQpOwotCWNoYWluX2RtYSA9IF9zY3NpaF9nZXRfY2hhaW5fYnVmZmVyX2RtYShpb2MsIHNtaWQpOworCWNoYWluX3JlcSA9IF9zY3NpaF9nZXRfY2hhaW5fYnVmZmVyX3RyYWNrZXIoaW9jLCBzbWlkKTsKKwlpZiAoIWNoYWluX3JlcSkKKwkJcmV0dXJuIC0xOworCWNoYWluID0gY2hhaW5fcmVxLT5jaGFpbl9idWZmZXI7CisJY2hhaW5fZG1hID0gY2hhaW5fcmVxLT5jaGFpbl9idWZmZXJfZG1hOwogCWRvIHsKIAkJc2dlc19pbl9zZWdtZW50ID0gKHNnZXNfbGVmdCA8PQogCQkgICAgaW9jLT5tYXhfc2dlc19pbl9jaGFpbl9tZXNzYWdlKSA/IHNnZXNfbGVmdCA6CkBAIC0xMDcwLDggKzEwNzUsMTEgQEAKIAkJCXNnZXNfaW5fc2VnbWVudC0tOwogCQl9CiAKLQkJY2hhaW5fZG1hICs9IGlvYy0+cmVxdWVzdF9zejsKLQkJY2hhaW4gKz0gaW9jLT5yZXF1ZXN0X3N6OworCQljaGFpbl9yZXEgPSBfc2NzaWhfZ2V0X2NoYWluX2J1ZmZlcl90cmFja2VyKGlvYywgc21pZCk7CisJCWlmICghY2hhaW5fcmVxKQorCQkJcmV0dXJuIC0xOworCQljaGFpbiA9IGNoYWluX3JlcS0+Y2hhaW5fYnVmZmVyOworCQljaGFpbl9kbWEgPSBjaGFpbl9yZXEtPmNoYWluX2J1ZmZlcl9kbWE7CiAJfSB3aGlsZSAoMSk7CiAKIApAQCAtMTA5NCwyOCArMTEwMiwyNCBAQAogfQogCiAvKioKLSAqIF9zY3NpaF9jaGFuZ2VfcXVldWVfZGVwdGggLSBzZXR0aW5nIGRldmljZSBxdWV1ZSBkZXB0aAorICogX3Njc2loX2FkanVzdF9xdWV1ZV9kZXB0aCAtIHNldHRpbmcgZGV2aWNlIHF1ZXVlIGRlcHRoCiAgKiBAc2Rldjogc2NzaSBkZXZpY2Ugc3RydWN0CiAgKiBAcWRlcHRoOiByZXF1ZXN0ZWQgcXVldWUgZGVwdGgKLSAqIEByZWFzb246IGNhbGxpbmcgY29udGV4dAogICoKLSAqIFJldHVybnMgcXVldWUgZGVwdGguCisgKgorICogUmV0dXJucyBub3RoaW5nCiAgKi8KLXN0YXRpYyBpbnQKLV9zY3NpaF9jaGFuZ2VfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgcWRlcHRoLCBpbnQgcmVhc29uKQorc3RhdGljIHZvaWQKK19zY3NpaF9hZGp1c3RfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgcWRlcHRoKQogewogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gc2Rldi0+aG9zdDsKIAlpbnQgbWF4X2RlcHRoOwotCWludCB0YWdfdHlwZTsKIAlzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MgPSBzaG9zdF9wcml2KHNob3N0KTsKIAlzdHJ1Y3QgTVBUMlNBU19ERVZJQ0UgKnNhc19kZXZpY2VfcHJpdl9kYXRhOwogCXN0cnVjdCBNUFQyU0FTX1RBUkdFVCAqc2FzX3RhcmdldF9wcml2X2RhdGE7CiAJc3RydWN0IF9zYXNfZGV2aWNlICpzYXNfZGV2aWNlOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAocmVhc29uICE9IFNDU0lfUURFUFRIX0RFRkFVTFQpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQogCW1heF9kZXB0aCA9IHNob3N0LT5jYW5fcXVldWU7CiAKIAkvKiBsaW1pdCBtYXggZGV2aWNlIHF1ZXVlIGZvciBTQVRBIHRvIDMyICovCkBAIC0xMTQxLDggKzExNDUsMjcgQEAKIAkJbWF4X2RlcHRoID0gMTsKIAlpZiAocWRlcHRoID4gbWF4X2RlcHRoKQogCQlxZGVwdGggPSBtYXhfZGVwdGg7Ci0JdGFnX3R5cGUgPSAocWRlcHRoID09IDEpID8gMCA6IE1TR19TSU1QTEVfVEFHOwotCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIHRhZ190eXBlLCBxZGVwdGgpOworCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIHNjc2lfZ2V0X3RhZ190eXBlKHNkZXYpLCBxZGVwdGgpOworfQorCisvKioKKyAqIF9zY3NpaF9jaGFuZ2VfcXVldWVfZGVwdGggLSBzZXR0aW5nIGRldmljZSBxdWV1ZSBkZXB0aAorICogQHNkZXY6IHNjc2kgZGV2aWNlIHN0cnVjdAorICogQHFkZXB0aDogcmVxdWVzdGVkIHF1ZXVlIGRlcHRoCisgKiBAcmVhc29uOiBTQ1NJX1FERVBUSF9ERUZBVUxUL1NDU0lfUURFUFRIX1FGVUxML1NDU0lfUURFUFRIX1JBTVBfVVAKKyAqIChzZWUgaW5jbHVkZS9zY3NpL3Njc2lfaG9zdC5oIGZvciBkZWZpbml0aW9uKQorICoKKyAqIFJldHVybnMgcXVldWUgZGVwdGguCisgKi8KK3N0YXRpYyBpbnQKK19zY3NpaF9jaGFuZ2VfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgcWRlcHRoLCBpbnQgcmVhc29uKQoreworCWlmIChyZWFzb24gPT0gU0NTSV9RREVQVEhfREVGQVVMVCB8fCByZWFzb24gPT0gU0NTSV9RREVQVEhfUkFNUF9VUCkKKwkJX3Njc2loX2FkanVzdF9xdWV1ZV9kZXB0aChzZGV2LCBxZGVwdGgpOworCWVsc2UgaWYgKHJlYXNvbiA9PSBTQ1NJX1FERVBUSF9RRlVMTCkKKwkJc2NzaV90cmFja19xdWV1ZV9mdWxsKHNkZXYsIHFkZXB0aCk7CisJZWxzZQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKIAlpZiAoc2Rldi0+aW5xdWlyeV9sZW4gPiA3KQogCQlzZGV2X3ByaW50ayhLRVJOX0lORk8sIHNkZXYsICJxZGVwdGgoJWQpLCB0YWdnZWQoJWQpLCAiCkBAIC0yMjUxLDEzICsyMjc0LDEzIEBACiAKIAlzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQgPSBzY21kLT5kZXZpY2UtPnNkZXZfdGFyZ2V0OwogCi0Jc3RhcmdldF9wcmludGsoS0VSTl9JTkZPLCBzdGFyZ2V0LCAiYXR0ZW1wdGluZyB0YXJnZXQgcmVzZXQhICIKKwlzdGFyZ2V0X3ByaW50ayhLRVJOX0lORk8sIHN0YXJnZXQsICJhdHRlbXB0aW5nIGRldmljZSByZXNldCEgIgogCSAgICAic2NtZCglcClcbiIsIHNjbWQpOwogCV9zY3NpaF90bV9kaXNwbGF5X2luZm8oaW9jLCBzY21kKTsKIAogCXNhc19kZXZpY2VfcHJpdl9kYXRhID0gc2NtZC0+ZGV2aWNlLT5ob3N0ZGF0YTsKIAlpZiAoIXNhc19kZXZpY2VfcHJpdl9kYXRhIHx8ICFzYXNfZGV2aWNlX3ByaXZfZGF0YS0+c2FzX3RhcmdldCkgewotCQlzdGFyZ2V0X3ByaW50ayhLRVJOX0lORk8sIHN0YXJnZXQsICJ0YXJnZXQgYmVlbiBkZWxldGVkISAiCisJCXN0YXJnZXRfcHJpbnRrKEtFUk5fSU5GTywgc3RhcmdldCwgImRldmljZSBiZWVuIGRlbGV0ZWQhICIKIAkJICAgICJzY21kKCVwKVxuIiwgc2NtZCk7CiAJCXNjbWQtPnJlc3VsdCA9IERJRF9OT19DT05ORUNUIDw8IDE2OwogCQlzY21kLT5zY3NpX2RvbmUoc2NtZCk7CkBAIC0yNTc2LDkgKzI1OTksOSBAQAogCSAgICZzYXNfZXhwYW5kZXItPnNhc19wb3J0X2xpc3QsIHBvcnRfbGlzdCkgewogCiAJCWlmIChtcHQyc2FzX3BvcnQtPnJlbW90ZV9pZGVudGlmeS5kZXZpY2VfdHlwZSA9PQotCQkgICAgTVBJMl9TQVNfREVWSUNFX0lORk9fRURHRV9FWFBBTkRFUiB8fAorCQkgICAgU0FTX0VER0VfRVhQQU5ERVJfREVWSUNFIHx8CiAJCSAgICBtcHQyc2FzX3BvcnQtPnJlbW90ZV9pZGVudGlmeS5kZXZpY2VfdHlwZSA9PQotCQkgICAgTVBJMl9TQVNfREVWSUNFX0lORk9fRkFOT1VUX0VYUEFOREVSKSB7CisJCSAgICBTQVNfRkFOT1VUX0VYUEFOREVSX0RFVklDRSkgewogCiAJCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zYXNfbm9kZV9sb2NrLCBmbGFncyk7CiAJCQlleHBhbmRlcl9zaWJsaW5nID0KQEAgLTI3MTUsOSArMjczOCwxMCBAQAogX3Njc2loX3Nhc19jb250cm9sX2NvbXBsZXRlKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsCiAgICAgdTggbXNpeF9pbmRleCwgdTMyIHJlcGx5KQogeworI2lmZGVmIENPTkZJR19TQ1NJX01QVDJTQVNfTE9HR0lORwogCU1waTJTYXNJb1VuaXRDb250cm9sUmVwbHlfdCAqbXBpX3JlcGx5ID0KIAkgICAgbXB0MnNhc19iYXNlX2dldF9yZXBseV92aXJ0X2FkZHIoaW9jLCByZXBseSk7Ci0KKyNlbmRpZgogCWRld3RwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVAogCSAgICAic2NfY29tcGxldGU6aGFuZGxlKDB4JTA0eCksIChvcGVuKSAiCiAJICAgICJzbWlkKCVkKSwgaW9jX3N0YXR1cygweCUwNHgpLCBsb2dpbmZvKDB4JTA4eClcbiIsCkBAIC0zOTYzLDYgKzM5ODcsNyBAQAogCU1waTJDb25maWdSZXBseV90IG1waV9yZXBseTsKIAlNcGkyU2FzSU9Vbml0UGFnZTBfdCAqc2FzX2lvdW5pdF9wZzAgPSBOVUxMOwogCXUxNiBhdHRhY2hlZF9oYW5kbGU7CisJdTggbGlua19yYXRlOwogCiAJZHRtcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQKIAkgICAgInVwZGF0aW5nIGhhbmRsZXMgZm9yIHNhc19ob3N0KDB4JTAxNmxseClcbiIsCkBAIC0zOTg0LDE1ICs0MDA5LDE3IEBACiAJaWYgKGlvY19zdGF0dXMgIT0gTVBJMl9JT0NTVEFUVVNfU1VDQ0VTUykKIAkJZ290byBvdXQ7CiAJZm9yIChpID0gMDsgaSA8IGlvYy0+c2FzX2hiYS5udW1fcGh5cyA7IGkrKykgeworCQlsaW5rX3JhdGUgPSBzYXNfaW91bml0X3BnMC0+UGh5RGF0YVtpXS5OZWdvdGlhdGVkTGlua1JhdGUgPj4gNDsKIAkJaWYgKGkgPT0gMCkKIAkJCWlvYy0+c2FzX2hiYS5oYW5kbGUgPSBsZTE2X3RvX2NwdShzYXNfaW91bml0X3BnMC0+CiAJCQkgICAgUGh5RGF0YVswXS5Db250cm9sbGVyRGV2SGFuZGxlKTsKIAkJaW9jLT5zYXNfaGJhLnBoeVtpXS5oYW5kbGUgPSBpb2MtPnNhc19oYmEuaGFuZGxlOwogCQlhdHRhY2hlZF9oYW5kbGUgPSBsZTE2X3RvX2NwdShzYXNfaW91bml0X3BnMC0+UGh5RGF0YVtpXS4KIAkJICAgIEF0dGFjaGVkRGV2SGFuZGxlKTsKKwkJaWYgKGF0dGFjaGVkX2hhbmRsZSAmJiBsaW5rX3JhdGUgPCBNUEkyX1NBU19ORUdfTElOS19SQVRFXzFfNSkKKwkJCWxpbmtfcmF0ZSA9IE1QSTJfU0FTX05FR19MSU5LX1JBVEVfMV81OwogCQltcHQyc2FzX3RyYW5zcG9ydF91cGRhdGVfbGlua3MoaW9jLCBpb2MtPnNhc19oYmEuc2FzX2FkZHJlc3MsCi0JCSAgICBhdHRhY2hlZF9oYW5kbGUsIGksIHNhc19pb3VuaXRfcGcwLT5QaHlEYXRhW2ldLgotCQkgICAgTmVnb3RpYXRlZExpbmtSYXRlID4+IDQpOworCQkgICAgYXR0YWNoZWRfaGFuZGxlLCBpLCBsaW5rX3JhdGUpOwogCX0KICBvdXQ6CiAJa2ZyZWUoc2FzX2lvdW5pdF9wZzApOwpAQCAtNDMzNiwxNCArNDM2MywxNCBAQAogfQogCiAvKioKLSAqIF9zY3NpaF9leHBhbmRlcl9yZW1vdmUgLSByZW1vdmluZyBleHBhbmRlciBvYmplY3QKKyAqIG1wdDJzYXNfZXhwYW5kZXJfcmVtb3ZlIC0gcmVtb3ZpbmcgZXhwYW5kZXIgb2JqZWN0CiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKICAqIEBzYXNfYWRkcmVzczogZXhwYW5kZXIgc2FzX2FkZHJlc3MKICAqCiAgKiBSZXR1cm4gbm90aGluZy4KICAqLwotc3RhdGljIHZvaWQKLV9zY3NpaF9leHBhbmRlcl9yZW1vdmUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1NjQgc2FzX2FkZHJlc3MpCit2b2lkCittcHQyc2FzX2V4cGFuZGVyX3JlbW92ZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU2NCBzYXNfYWRkcmVzcykKIHsKIAlzdHJ1Y3QgX3Nhc19ub2RlICpzYXNfZXhwYW5kZXI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTQzNTQsNiArNDM4MSwxMSBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNhc19ub2RlX2xvY2ssIGZsYWdzKTsKIAlzYXNfZXhwYW5kZXIgPSBtcHQyc2FzX3Njc2loX2V4cGFuZGVyX2ZpbmRfYnlfc2FzX2FkZHJlc3MoaW9jLAogCSAgICBzYXNfYWRkcmVzcyk7CisJaWYgKCFzYXNfZXhwYW5kZXIpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zYXNfbm9kZV9sb2NrLCBmbGFncyk7CisJCXJldHVybjsKKwl9CisJbGlzdF9kZWwoJnNhc19leHBhbmRlci0+bGlzdCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zYXNfbm9kZV9sb2NrLCBmbGFncyk7CiAJX3Njc2loX2V4cGFuZGVyX25vZGVfcmVtb3ZlKGlvYywgc2FzX2V4cGFuZGVyKTsKIH0KQEAgLTQ2NDMsNiArNDY3NSwzMyBAQAogCSAgICBzYXNfZGV2aWNlX2JhY2t1cC5zYXNfYWRkcmVzcykpOwogfQogCisvKioKKyAqIG1wdDJzYXNfZGV2aWNlX3JlbW92ZSAtIHJlbW92aW5nIGRldmljZSBvYmplY3QKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQHNhc19hZGRyZXNzOiBleHBhbmRlciBzYXNfYWRkcmVzcworICoKKyAqIFJldHVybiBub3RoaW5nLgorICovCit2b2lkCittcHQyc2FzX2RldmljZV9yZW1vdmUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1NjQgc2FzX2FkZHJlc3MpCit7CisJc3RydWN0IF9zYXNfZGV2aWNlICpzYXNfZGV2aWNlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoaW9jLT5zaG9zdF9yZWNvdmVyeSkKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7CisJc2FzX2RldmljZSA9IG1wdDJzYXNfc2NzaWhfc2FzX2RldmljZV9maW5kX2J5X3Nhc19hZGRyZXNzKGlvYywKKwkgICAgc2FzX2FkZHJlc3MpOworCWlmICghc2FzX2RldmljZSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNhc19kZXZpY2VfbG9jaywgZmxhZ3MpOworCQlyZXR1cm47CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7CisJX3Njc2loX3JlbW92ZV9kZXZpY2UoaW9jLCBzYXNfZGV2aWNlKTsKK30KKwogI2lmZGVmIENPTkZJR19TQ1NJX01QVDJTQVNfTE9HR0lORwogLyoqCiAgKiBfc2NzaWhfc2FzX3RvcG9sb2d5X2NoYW5nZV9ldmVudF9kZWJ1ZyAtIGRlYnVnIGZvciB0b3BvbG9neSBldmVudApAQCAtNDczNyw3ICs0Nzk2LDcgQEAKIAlpbnQgaTsKIAl1MTYgcGFyZW50X2hhbmRsZSwgaGFuZGxlOwogCXUxNiByZWFzb25fY29kZTsKLQl1OCBwaHlfbnVtYmVyOworCXU4IHBoeV9udW1iZXIsIG1heF9waHlzOwogCXN0cnVjdCBfc2FzX25vZGUgKnNhc19leHBhbmRlcjsKIAlzdHJ1Y3QgX3Nhc19kZXZpY2UgKnNhc19kZXZpY2U7CiAJdTY0IHNhc19hZGRyZXNzOwpAQCAtNDc3NSwxMSArNDgzNCwxMyBAQAogCXNhc19leHBhbmRlciA9IG1wdDJzYXNfc2NzaWhfZXhwYW5kZXJfZmluZF9ieV9oYW5kbGUoaW9jLAogCSAgICBwYXJlbnRfaGFuZGxlKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNhc19ub2RlX2xvY2ssIGZsYWdzKTsKLQlpZiAoc2FzX2V4cGFuZGVyKQorCWlmIChzYXNfZXhwYW5kZXIpIHsKIAkJc2FzX2FkZHJlc3MgPSBzYXNfZXhwYW5kZXItPnNhc19hZGRyZXNzOwotCWVsc2UgaWYgKHBhcmVudF9oYW5kbGUgPCBpb2MtPnNhc19oYmEubnVtX3BoeXMpCisJCW1heF9waHlzID0gc2FzX2V4cGFuZGVyLT5udW1fcGh5czsKKwl9IGVsc2UgaWYgKHBhcmVudF9oYW5kbGUgPCBpb2MtPnNhc19oYmEubnVtX3BoeXMpIHsKIAkJc2FzX2FkZHJlc3MgPSBpb2MtPnNhc19oYmEuc2FzX2FkZHJlc3M7Ci0JZWxzZQorCQltYXhfcGh5cyA9IGlvYy0+c2FzX2hiYS5udW1fcGh5czsKKwl9IGVsc2UKIAkJcmV0dXJuOwogCiAJLyogaGFuZGxlIHNpYmxpbmdzIGV2ZW50cyAqLwpAQCAtNDc5Myw2ICs0ODU0LDggQEAKIAkJICAgIGlvYy0+cGNpX2Vycm9yX3JlY292ZXJ5KQogCQkJcmV0dXJuOwogCQlwaHlfbnVtYmVyID0gZXZlbnRfZGF0YS0+U3RhcnRQaHlOdW0gKyBpOworCQlpZiAocGh5X251bWJlciA+PSBtYXhfcGh5cykKKwkJCWNvbnRpbnVlOwogCQlyZWFzb25fY29kZSA9IGV2ZW50X2RhdGEtPlBIWVtpXS5QaHlTdGF0dXMgJgogCQkgICAgTVBJMl9FVkVOVF9TQVNfVE9QT19SQ19NQVNLOwogCQlpZiAoKGV2ZW50X2RhdGEtPlBIWVtpXS5QaHlTdGF0dXMgJgpAQCAtNDg0NCw3ICs0OTA3LDcgQEAKIAkvKiBoYW5kbGUgZXhwYW5kZXIgcmVtb3ZhbCAqLwogCWlmIChldmVudF9kYXRhLT5FeHBTdGF0dXMgPT0gTVBJMl9FVkVOVF9TQVNfVE9QT19FU19OT1RfUkVTUE9ORElORyAmJgogCSAgICBzYXNfZXhwYW5kZXIpCi0JCV9zY3NpaF9leHBhbmRlcl9yZW1vdmUoaW9jLCBzYXNfYWRkcmVzcyk7CisJCW1wdDJzYXNfZXhwYW5kZXJfcmVtb3ZlKGlvYywgc2FzX2FkZHJlc3MpOwogCiB9CiAKQEAgLTU3NzMsOTAgKzU4MzYsNiBAQAogfQogCiAvKioKLSAqIF9zY3NpaF90YXNrX3NldF9mdWxsIC0gaGFuZGxlIHRhc2sgc2V0IGZ1bGwKLSAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAotICogQGZ3X2V2ZW50OiBUaGUgZndfZXZlbnRfd29yayBvYmplY3QKLSAqIENvbnRleHQ6IHVzZXIuCi0gKgotICogVGhyb3R0bGUgYmFjayBxZGVwdGguCi0gKi8KLXN0YXRpYyB2b2lkCi1fc2NzaWhfdGFza19zZXRfZnVsbChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHN0cnVjdCBmd19ldmVudF93b3JrCi0JKmZ3X2V2ZW50KQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IF9zYXNfZGV2aWNlICpzYXNfZGV2aWNlOwotCXN0YXRpYyBzdHJ1Y3QgX3JhaWRfZGV2aWNlICpyYWlkX2RldmljZTsKLQlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXY7Ci0JaW50IGRlcHRoOwotCXUxNiBjdXJyZW50X2RlcHRoOwotCXUxNiBoYW5kbGU7Ci0JaW50IGlkLCBjaGFubmVsOwotCXU2NCBzYXNfYWRkcmVzczsKLQlNcGkyRXZlbnREYXRhVGFza1NldEZ1bGxfdCAqZXZlbnRfZGF0YSA9IGZ3X2V2ZW50LT5ldmVudF9kYXRhOwotCi0JY3VycmVudF9kZXB0aCA9IGxlMTZfdG9fY3B1KGV2ZW50X2RhdGEtPkN1cnJlbnREZXB0aCk7Ci0JaGFuZGxlID0gbGUxNl90b19jcHUoZXZlbnRfZGF0YS0+RGV2SGFuZGxlKTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zYXNfZGV2aWNlX2xvY2ssIGZsYWdzKTsKLQlzYXNfZGV2aWNlID0gX3Njc2loX3Nhc19kZXZpY2VfZmluZF9ieV9oYW5kbGUoaW9jLCBoYW5kbGUpOwotCWlmICghc2FzX2RldmljZSkgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNhc19kZXZpY2VfbG9jaywgZmxhZ3MpOwotCQlyZXR1cm47Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7Ci0JaWQgPSBzYXNfZGV2aWNlLT5pZDsKLQljaGFubmVsID0gc2FzX2RldmljZS0+Y2hhbm5lbDsKLQlzYXNfYWRkcmVzcyA9IHNhc19kZXZpY2UtPnNhc19hZGRyZXNzOwotCi0JLyogaWYgaGlkZGVuIHJhaWQgY29tcG9uZW50LCB0aGVuIGNoYW5nZSB0byB2b2x1bWUgY2hhcmFjdGVyaXN0aWNzICovCi0JaWYgKHRlc3RfYml0KGhhbmRsZSwgaW9jLT5wZF9oYW5kbGVzKSAmJiBzYXNfZGV2aWNlLT52b2x1bWVfaGFuZGxlKSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnJhaWRfZGV2aWNlX2xvY2ssIGZsYWdzKTsKLQkJcmFpZF9kZXZpY2UgPSBfc2NzaWhfcmFpZF9kZXZpY2VfZmluZF9ieV9oYW5kbGUoCi0JCSAgICBpb2MsIHNhc19kZXZpY2UtPnZvbHVtZV9oYW5kbGUpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnJhaWRfZGV2aWNlX2xvY2ssIGZsYWdzKTsKLQkJaWYgKHJhaWRfZGV2aWNlKSB7Ci0JCQlpZCA9IHJhaWRfZGV2aWNlLT5pZDsKLQkJCWNoYW5uZWwgPSByYWlkX2RldmljZS0+Y2hhbm5lbDsKLQkJCWhhbmRsZSA9IHJhaWRfZGV2aWNlLT5oYW5kbGU7Ci0JCQlzYXNfYWRkcmVzcyA9IHJhaWRfZGV2aWNlLT53d2lkOwotCQl9Ci0JfQotCi0JaWYgKGlvYy0+bG9nZ2luZ19sZXZlbCAmIE1QVF9ERUJVR19UQVNLX1NFVF9GVUxMKQotCQlzdGFyZ2V0X3ByaW50ayhLRVJOX0lORk8sIHNhc19kZXZpY2UtPnN0YXJnZXQsICJ0YXNrIHNldCAiCi0JCSAgICAiZnVsbDogaGFuZGxlKDB4JTA0eCksIHNhc19hZGRyKDB4JTAxNmxseCksIGRlcHRoKCVkKVxuIiwKLQkJICAgIGhhbmRsZSwgKHVuc2lnbmVkIGxvbmcgbG9uZylzYXNfYWRkcmVzcywgY3VycmVudF9kZXB0aCk7Ci0KLQlzaG9zdF9mb3JfZWFjaF9kZXZpY2Uoc2RldiwgaW9jLT5zaG9zdCkgewotCQlpZiAoc2Rldi0+aWQgPT0gaWQgJiYgc2Rldi0+Y2hhbm5lbCA9PSBjaGFubmVsKSB7Ci0JCQlpZiAoY3VycmVudF9kZXB0aCA+IHNkZXYtPnF1ZXVlX2RlcHRoKSB7Ci0JCQkJaWYgKGlvYy0+bG9nZ2luZ19sZXZlbCAmCi0JCQkJICAgIE1QVF9ERUJVR19UQVNLX1NFVF9GVUxMKQotCQkJCQlzZGV2X3ByaW50ayhLRVJOX0lORk8sIHNkZXYsICJzdHJhbmdlICIKLQkJCQkJICAgICJvYnNlcnZhdGlvbiwgdGhlIHF1ZXVlIGRlcHRoIGlzIgotCQkJCQkgICAgIiAoJWQpIG1lYW53aGlsZSBmdyBxdWV1ZSBkZXB0aCAiCi0JCQkJCSAgICAiaXMgKCVkKVxuIiwgc2Rldi0+cXVldWVfZGVwdGgsCi0JCQkJCSAgICBjdXJyZW50X2RlcHRoKTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCWRlcHRoID0gc2NzaV90cmFja19xdWV1ZV9mdWxsKHNkZXYsCi0JCQkgICAgY3VycmVudF9kZXB0aCAtIDEpOwotCQkJaWYgKGRlcHRoID4gMCkKLQkJCQlzZGV2X3ByaW50ayhLRVJOX0lORk8sIHNkZXYsICJRdWV1ZSBkZXB0aCAiCi0JCQkJICAgICJyZWR1Y2VkIHRvICglZClcbiIsIGRlcHRoKTsKLQkJCWVsc2UgaWYgKGRlcHRoIDwgMCkKLQkJCQlzZGV2X3ByaW50ayhLRVJOX0lORk8sIHNkZXYsICJUYWdnZWQgQ29tbWFuZCAiCi0JCQkJICAgICJRdWV1ZWluZyBpcyBiZWluZyBkaXNhYmxlZFxuIik7Ci0JCQllbHNlIGlmIChkZXB0aCA9PSAwKQotCQkJCWlmIChpb2MtPmxvZ2dpbmdfbGV2ZWwgJgotCQkJCSAgICAgTVBUX0RFQlVHX1RBU0tfU0VUX0ZVTEwpCi0JCQkJCXNkZXZfcHJpbnRrKEtFUk5fSU5GTywgc2RldiwKLQkJCQkJICAgICAiUXVldWUgZGVwdGggbm90IGNoYW5nZWQgeWV0XG4iKTsKLQkJfQotCX0KLX0KLQotLyoqCiAgKiBfc2NzaWhfcHJlcF9kZXZpY2Vfc2NhbiAtIGluaXRpYWxpemUgcGFyYW1ldGVycyBwcmlvciB0byBkZXZpY2Ugc2NhbgogICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CiAgKgpAQCAtNjIxOSw3ICs2MTk4LDcgQEAKIAkJCXNhc19leHBhbmRlci0+cmVzcG9uZGluZyA9IDA7CiAJCQljb250aW51ZTsKIAkJfQotCQlfc2NzaWhfZXhwYW5kZXJfcmVtb3ZlKGlvYywgc2FzX2V4cGFuZGVyLT5zYXNfYWRkcmVzcyk7CisJCW1wdDJzYXNfZXhwYW5kZXJfcmVtb3ZlKGlvYywgc2FzX2V4cGFuZGVyLT5zYXNfYWRkcmVzcyk7CiAJCWdvdG8gcmV0cnlfZXhwYW5kZXJfc2VhcmNoOwogCX0KIH0KQEAgLTYzNDMsOSArNjMyMiw2IEBACiAJY2FzZSBNUEkyX0VWRU5UX0lSX09QRVJBVElPTl9TVEFUVVM6CiAJCV9zY3NpaF9zYXNfaXJfb3BlcmF0aW9uX3N0YXR1c19ldmVudChpb2MsIGZ3X2V2ZW50KTsKIAkJYnJlYWs7Ci0JY2FzZSBNUEkyX0VWRU5UX1RBU0tfU0VUX0ZVTEw6Ci0JCV9zY3NpaF90YXNrX3NldF9mdWxsKGlvYywgZndfZXZlbnQpOwotCQlicmVhazsKIAl9CiAJX3Njc2loX2Z3X2V2ZW50X2ZyZWUoaW9jLCBmd19ldmVudCk7CiB9CkBAIC02NDE1LDcgKzYzOTEsNiBAQAogCWNhc2UgTVBJMl9FVkVOVF9TQVNfRElTQ09WRVJZOgogCWNhc2UgTVBJMl9FVkVOVF9TQVNfRU5DTF9ERVZJQ0VfU1RBVFVTX0NIQU5HRToKIAljYXNlIE1QSTJfRVZFTlRfSVJfUEhZU0lDQUxfRElTSzoKLQljYXNlIE1QSTJfRVZFTlRfVEFTS19TRVRfRlVMTDoKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OiAvKiBpZ25vcmUgdGhlIHJlc3QgKi8KQEAgLTY0OTAsNTYgKzY0NjUsMjMgQEAKIF9zY3NpaF9leHBhbmRlcl9ub2RlX3JlbW92ZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCiAgICAgc3RydWN0IF9zYXNfbm9kZSAqc2FzX2V4cGFuZGVyKQogewotCXN0cnVjdCBfc2FzX3BvcnQgKm1wdDJzYXNfcG9ydDsKLQlzdHJ1Y3QgX3Nhc19kZXZpY2UgKnNhc19kZXZpY2U7Ci0Jc3RydWN0IF9zYXNfbm9kZSAqZXhwYW5kZXJfc2libGluZzsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKCFzYXNfZXhwYW5kZXIpCi0JCXJldHVybjsKKwlzdHJ1Y3QgX3Nhc19wb3J0ICptcHQyc2FzX3BvcnQsICpuZXh0OwogCiAJLyogcmVtb3ZlIHNpYmxpbmcgcG9ydHMgYXR0YWNoZWQgdG8gdGhpcyBleHBhbmRlciAqLwotIHJldHJ5X2RldmljZV9zZWFyY2g6Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShtcHQyc2FzX3BvcnQsCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1wdDJzYXNfcG9ydCwgbmV4dCwKIAkgICAmc2FzX2V4cGFuZGVyLT5zYXNfcG9ydF9saXN0LCBwb3J0X2xpc3QpIHsKKwkJaWYgKGlvYy0+c2hvc3RfcmVjb3ZlcnkpCisJCQlyZXR1cm47CiAJCWlmIChtcHQyc2FzX3BvcnQtPnJlbW90ZV9pZGVudGlmeS5kZXZpY2VfdHlwZSA9PQotCQkgICAgU0FTX0VORF9ERVZJQ0UpIHsKLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNhc19kZXZpY2VfbG9jaywgZmxhZ3MpOwotCQkJc2FzX2RldmljZSA9Ci0JCQkgICAgbXB0MnNhc19zY3NpaF9zYXNfZGV2aWNlX2ZpbmRfYnlfc2FzX2FkZHJlc3MoaW9jLAotCQkJICAgbXB0MnNhc19wb3J0LT5yZW1vdGVfaWRlbnRpZnkuc2FzX2FkZHJlc3MpOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zYXNfZGV2aWNlX2xvY2ssIGZsYWdzKTsKLQkJCWlmICghc2FzX2RldmljZSkKLQkJCQljb250aW51ZTsKLQkJCV9zY3NpaF9yZW1vdmVfZGV2aWNlKGlvYywgc2FzX2RldmljZSk7Ci0JCQlpZiAoaW9jLT5zaG9zdF9yZWNvdmVyeSkKLQkJCQlyZXR1cm47Ci0JCQlnb3RvIHJldHJ5X2RldmljZV9zZWFyY2g7Ci0JCX0KLQl9Ci0KLSByZXRyeV9leHBhbmRlcl9zZWFyY2g6Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShtcHQyc2FzX3BvcnQsCi0JICAgJnNhc19leHBhbmRlci0+c2FzX3BvcnRfbGlzdCwgcG9ydF9saXN0KSB7Ci0KLQkJaWYgKG1wdDJzYXNfcG9ydC0+cmVtb3RlX2lkZW50aWZ5LmRldmljZV90eXBlID09Ci0JCSAgICBNUEkyX1NBU19ERVZJQ0VfSU5GT19FREdFX0VYUEFOREVSIHx8CisJCSAgICBTQVNfRU5EX0RFVklDRSkKKwkJCW1wdDJzYXNfZGV2aWNlX3JlbW92ZShpb2MsCisJCQkgICAgbXB0MnNhc19wb3J0LT5yZW1vdGVfaWRlbnRpZnkuc2FzX2FkZHJlc3MpOworCQllbHNlIGlmIChtcHQyc2FzX3BvcnQtPnJlbW90ZV9pZGVudGlmeS5kZXZpY2VfdHlwZSA9PQorCQkgICAgU0FTX0VER0VfRVhQQU5ERVJfREVWSUNFIHx8CiAJCSAgICBtcHQyc2FzX3BvcnQtPnJlbW90ZV9pZGVudGlmeS5kZXZpY2VfdHlwZSA9PQotCQkgICAgTVBJMl9TQVNfREVWSUNFX0lORk9fRkFOT1VUX0VYUEFOREVSKSB7Ci0KLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNhc19ub2RlX2xvY2ssIGZsYWdzKTsKLQkJCWV4cGFuZGVyX3NpYmxpbmcgPQotCQkJICAgIG1wdDJzYXNfc2NzaWhfZXhwYW5kZXJfZmluZF9ieV9zYXNfYWRkcmVzcygKLQkJCSAgICBpb2MsIG1wdDJzYXNfcG9ydC0+cmVtb3RlX2lkZW50aWZ5LnNhc19hZGRyZXNzKTsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2FzX25vZGVfbG9jaywgZmxhZ3MpOwotCQkJaWYgKCFleHBhbmRlcl9zaWJsaW5nKQotCQkJCWNvbnRpbnVlOwotCQkJX3Njc2loX2V4cGFuZGVyX3JlbW92ZShpb2MsCi0JCQkgICAgZXhwYW5kZXJfc2libGluZy0+c2FzX2FkZHJlc3MpOwotCQkJaWYgKGlvYy0+c2hvc3RfcmVjb3ZlcnkpCi0JCQkJcmV0dXJuOwotCQkJZ290byByZXRyeV9leHBhbmRlcl9zZWFyY2g7Ci0JCX0KKwkJICAgIFNBU19GQU5PVVRfRVhQQU5ERVJfREVWSUNFKQorCQkJbXB0MnNhc19leHBhbmRlcl9yZW1vdmUoaW9jLAorCQkJICAgIG1wdDJzYXNfcG9ydC0+cmVtb3RlX2lkZW50aWZ5LnNhc19hZGRyZXNzKTsKIAl9CiAKIAltcHQyc2FzX3RyYW5zcG9ydF9wb3J0X3JlbW92ZShpb2MsIHNhc19leHBhbmRlci0+c2FzX2FkZHJlc3MsCkBAIC02NTUwLDcgKzY0OTIsNiBAQAogCSAgICBzYXNfZXhwYW5kZXItPmhhbmRsZSwgKHVuc2lnbmVkIGxvbmcgbG9uZykKIAkgICAgc2FzX2V4cGFuZGVyLT5zYXNfYWRkcmVzcyk7CiAKLQlsaXN0X2RlbCgmc2FzX2V4cGFuZGVyLT5saXN0KTsKIAlrZnJlZShzYXNfZXhwYW5kZXItPnBoeSk7CiAJa2ZyZWUoc2FzX2V4cGFuZGVyKTsKIH0KQEAgLTY2NjgsOSArNjYwOSw3IEBACiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jID0gc2hvc3RfcHJpdihzaG9zdCk7Ci0Jc3RydWN0IF9zYXNfcG9ydCAqbXB0MnNhc19wb3J0OwotCXN0cnVjdCBfc2FzX2RldmljZSAqc2FzX2RldmljZTsKLQlzdHJ1Y3QgX3Nhc19ub2RlICpleHBhbmRlcl9zaWJsaW5nOworCXN0cnVjdCBfc2FzX3BvcnQgKm1wdDJzYXNfcG9ydCwgKm5leHRfcG9ydDsKIAlzdHJ1Y3QgX3JhaWRfZGV2aWNlICpyYWlkX2RldmljZSwgKm5leHQ7CiAJc3RydWN0IE1QVDJTQVNfVEFSR0VUICpzYXNfdGFyZ2V0X3ByaXZfZGF0YTsKIAlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdAkqd3E7CkBAIC02NzAyLDI4ICs2NjQxLDE4IEBACiAJfQogCiAJLyogZnJlZSBwb3J0cyBhdHRhY2hlZCB0byB0aGUgc2FzX2hvc3QgKi8KLSByZXRyeV9hZ2FpbjoKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1wdDJzYXNfcG9ydCwKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobXB0MnNhc19wb3J0LCBuZXh0X3BvcnQsCiAJICAgJmlvYy0+c2FzX2hiYS5zYXNfcG9ydF9saXN0LCBwb3J0X2xpc3QpIHsKIAkJaWYgKG1wdDJzYXNfcG9ydC0+cmVtb3RlX2lkZW50aWZ5LmRldmljZV90eXBlID09Ci0JCSAgICBTQVNfRU5EX0RFVklDRSkgewotCQkJc2FzX2RldmljZSA9Ci0JCQkgICAgbXB0MnNhc19zY3NpaF9zYXNfZGV2aWNlX2ZpbmRfYnlfc2FzX2FkZHJlc3MoaW9jLAotCQkJICAgbXB0MnNhc19wb3J0LT5yZW1vdGVfaWRlbnRpZnkuc2FzX2FkZHJlc3MpOwotCQkJaWYgKHNhc19kZXZpY2UpIHsKLQkJCQlfc2NzaWhfcmVtb3ZlX2RldmljZShpb2MsIHNhc19kZXZpY2UpOwotCQkJCWdvdG8gcmV0cnlfYWdhaW47Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlleHBhbmRlcl9zaWJsaW5nID0KLQkJCSAgICBtcHQyc2FzX3Njc2loX2V4cGFuZGVyX2ZpbmRfYnlfc2FzX2FkZHJlc3MoaW9jLAorCQkgICAgU0FTX0VORF9ERVZJQ0UpCisJCQltcHQyc2FzX2RldmljZV9yZW1vdmUoaW9jLAogCQkJICAgIG1wdDJzYXNfcG9ydC0+cmVtb3RlX2lkZW50aWZ5LnNhc19hZGRyZXNzKTsKLQkJCWlmIChleHBhbmRlcl9zaWJsaW5nKSB7Ci0JCQkJX3Njc2loX2V4cGFuZGVyX3JlbW92ZShpb2MsCi0JCQkJICAgIGV4cGFuZGVyX3NpYmxpbmctPnNhc19hZGRyZXNzKTsKLQkJCQlnb3RvIHJldHJ5X2FnYWluOwotCQkJfQotCQl9CisJCWVsc2UgaWYgKG1wdDJzYXNfcG9ydC0+cmVtb3RlX2lkZW50aWZ5LmRldmljZV90eXBlID09CisJCSAgICBTQVNfRURHRV9FWFBBTkRFUl9ERVZJQ0UgfHwKKwkJICAgIG1wdDJzYXNfcG9ydC0+cmVtb3RlX2lkZW50aWZ5LmRldmljZV90eXBlID09CisJCSAgICBTQVNfRkFOT1VUX0VYUEFOREVSX0RFVklDRSkKKwkJCW1wdDJzYXNfZXhwYW5kZXJfcmVtb3ZlKGlvYywKKwkJCSAgICBtcHQyc2FzX3BvcnQtPnJlbW90ZV9pZGVudGlmeS5zYXNfYWRkcmVzcyk7CiAJfQogCiAJLyogZnJlZSBwaHlzIGF0dGFjaGVkIHRvIHRoZSBzYXNfaG9zdCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc190cmFuc3BvcnQuYyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfdHJhbnNwb3J0LmMKaW5kZXggYjU1YzZkYy4uY2IxY2RlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc190cmFuc3BvcnQuYworKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX3RyYW5zcG9ydC5jCkBAIC00NjUsNjIgKzQ2NSwxNDkgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLQogLyoqCi0gKiBfdHJhbnNwb3J0X2RlbGV0ZV9kdXBsaWNhdGVfcG9ydCAtIChzZWUgYmVsb3cgZGVzY3JpcHRpb24pCisgKiBfdHJhbnNwb3J0X2RlbGV0ZV9wb3J0IC0gaGVscGVyIGZ1bmN0aW9uIHRvIHJlbW92aW5nIGEgcG9ydAogICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0Ci0gKiBAc2FzX25vZGU6IHNhcyBub2RlIG9iamVjdCAoZWl0aGVyIGV4cGFuZGVyIG9yIHNhcyBob3N0KQotICogQHNhc19hZGRyZXNzOiBzYXMgYWRkcmVzcyBvZiBkZXZpY2UgYmVpbmcgYWRkZWQKLSAqIEBwaHlfbnVtOiBwaHkgbnVtYmVyCisgKiBAbXB0MnNhc19wb3J0OiBtcHQyc2FzIHBlciBwb3J0IG9iamVjdAogICoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYXR0ZW1wdGluZyB0byBhZGQgYSBuZXcgcG9ydCB0aGF0IGlzIGNsYWltaW5nCi0gKiB0aGUgc2FtZSBwaHkgcmVzb3VyY2VzIGFscmVhZHkgaW4gdXNlIGJ5IGFub3RoZXIgcG9ydC4gIElmIHdlIGRvbid0IHJlbGVhc2UKLSAqIHRoZSBjbGFpbWVkIHBoeSByZXNvdXJjZXMsIHRoZSBzYXMgdHJhbnNwb3J0IGxheWVyIHdpbGwgaGFuZyBmcm9tIHRoZSBCVUcKLSAqIGluIHNhc19wb3J0X2FkZF9waHkuCi0gKgotICogVGhlIHJlYXNvbiB3ZSB3b3VsZCBoaXQgdGhpcyBpc3N1ZSBpcyBiZWN1YXNlIHNvbWVvbmUgaXMgY2hhbmdpbmcgdGhlCi0gKiBzYXMgYWRkcmVzcyBvZiBhIGRldmljZSBvbiB0aGUgZmx5LCBtZWFud2hpbGUgY29udHJvbGxlciBmaXJtd2FyZSBzZW5kcwotICogRVZFTlRzIG91dCBvZiBvcmRlciB3aGVuIHJlbW92aW5nIHRoZSBwcmV2aW91cyBpbnN0YW5jZSBvZiB0aGUgZGV2aWNlLgorICogUmV0dXJucyBub3RoaW5nLgogICovCiBzdGF0aWMgdm9pZAotX3RyYW5zcG9ydF9kZWxldGVfZHVwbGljYXRlX3BvcnQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAotICAgIHN0cnVjdCBfc2FzX25vZGUgKnNhc19ub2RlLCB1NjQgc2FzX2FkZHJlc3MsIGludCBwaHlfbnVtKQorX3RyYW5zcG9ydF9kZWxldGVfcG9ydChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCisJc3RydWN0IF9zYXNfcG9ydCAqbXB0MnNhc19wb3J0KQogewotCXN0cnVjdCBfc2FzX3BvcnQgKm1wdDJzYXNfcG9ydCwgKm1wdDJzYXNfcG9ydF9kdXBsaWNhdGU7Ci0Jc3RydWN0IF9zYXNfcGh5ICptcHQyc2FzX3BoeTsKKwl1NjQgc2FzX2FkZHJlc3MgPSBtcHQyc2FzX3BvcnQtPnJlbW90ZV9pZGVudGlmeS5zYXNfYWRkcmVzczsKKwllbnVtIHNhc19kZXZpY2VfdHlwZSBkZXZpY2VfdHlwZSA9CisJICAgIG1wdDJzYXNfcG9ydC0+cmVtb3RlX2lkZW50aWZ5LmRldmljZV90eXBlOwogCi0JcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAibmV3IGRldmljZSBsb2NhdGVkIGF0IHNhc19hZGRyKDB4JTAxNmxseCksICIKLQkgICAgInBoeV9pZCglZClcbiIsIGlvYy0+bmFtZSwgKHVuc2lnbmVkIGxvbmcgbG9uZylzYXNfYWRkcmVzcywKLQkgICAgcGh5X251bSk7CisJZGV2X3ByaW50ayhLRVJOX0lORk8sICZtcHQyc2FzX3BvcnQtPnBvcnQtPmRldiwKKwkgICAgInJlbW92ZTogc2FzX2FkZHIoMHglMDE2bGx4KVxuIiwKKwkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgc2FzX2FkZHJlc3MpOwogCi0JbXB0MnNhc19wb3J0X2R1cGxpY2F0ZSA9IE5VTEw7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShtcHQyc2FzX3BvcnQsICZzYXNfbm9kZS0+c2FzX3BvcnRfbGlzdCwgcG9ydF9saXN0KSB7Ci0JCWRldl9wcmludGsoS0VSTl9FUlIsICZtcHQyc2FzX3BvcnQtPnBvcnQtPmRldiwKLQkJICAgICJleGlzdGluZyBkZXZpY2UgYXQgc2FzX2FkZHIoMHglMDE2bGx4KSwgbnVtX3BoeXMoJWQpXG4iLAotCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykKLQkJICAgIG1wdDJzYXNfcG9ydC0+cmVtb3RlX2lkZW50aWZ5LnNhc19hZGRyZXNzLAotCQkgICAgbXB0MnNhc19wb3J0LT5udW1fcGh5cyk7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkobXB0MnNhc19waHksICZtcHQyc2FzX3BvcnQtPnBoeV9saXN0LAotCQkgICAgcG9ydF9zaWJsaW5ncykgewotCQkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJm1wdDJzYXNfcGh5LT5waHktPmRldiwKLQkJCSAgICAicGh5X251bWJlciglZClcbiIsIG1wdDJzYXNfcGh5LT5waHlfaWQpOwotCQkJaWYgKG1wdDJzYXNfcGh5LT5waHlfaWQgPT0gcGh5X251bSkKLQkJCQltcHQyc2FzX3BvcnRfZHVwbGljYXRlID0gbXB0MnNhc19wb3J0OwotCQl9Ci0JfQorCWlvYy0+bG9nZ2luZ19sZXZlbCB8PSBNUFRfREVCVUdfVFJBTlNQT1JUOworCWlmIChkZXZpY2VfdHlwZSA9PSBTQVNfRU5EX0RFVklDRSkKKwkJbXB0MnNhc19kZXZpY2VfcmVtb3ZlKGlvYywgc2FzX2FkZHJlc3MpOworCWVsc2UgaWYgKGRldmljZV90eXBlID09IFNBU19FREdFX0VYUEFOREVSX0RFVklDRSB8fAorCSAgICBkZXZpY2VfdHlwZSA9PSBTQVNfRkFOT1VUX0VYUEFOREVSX0RFVklDRSkKKwkJbXB0MnNhc19leHBhbmRlcl9yZW1vdmUoaW9jLCBzYXNfYWRkcmVzcyk7CisJaW9jLT5sb2dnaW5nX2xldmVsICY9IH5NUFRfREVCVUdfVFJBTlNQT1JUOworfQogCi0JaWYgKCFtcHQyc2FzX3BvcnRfZHVwbGljYXRlKQorLyoqCisgKiBfdHJhbnNwb3J0X2RlbGV0ZV9waHkgLSBoZWxwZXIgZnVuY3Rpb24gdG8gcmVtb3Zpbmcgc2luZ2xlIHBoeSBmcm9tIHBvcnQKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQG1wdDJzYXNfcG9ydDogbXB0MnNhcyBwZXIgcG9ydCBvYmplY3QKKyAqIEBtcHQyc2FzX3BoeTogbXB0MnNhcyBwZXIgcGh5IG9iamVjdAorICoKKyAqIFJldHVybnMgbm90aGluZy4KKyAqLworc3RhdGljIHZvaWQKK190cmFuc3BvcnRfZGVsZXRlX3BoeShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCisJc3RydWN0IF9zYXNfcG9ydCAqbXB0MnNhc19wb3J0LCBzdHJ1Y3QgX3Nhc19waHkgKm1wdDJzYXNfcGh5KQoreworCXU2NCBzYXNfYWRkcmVzcyA9IG1wdDJzYXNfcG9ydC0+cmVtb3RlX2lkZW50aWZ5LnNhc19hZGRyZXNzOworCisJZGV2X3ByaW50ayhLRVJOX0lORk8sICZtcHQyc2FzX3BoeS0+cGh5LT5kZXYsCisJICAgICJyZW1vdmU6IHNhc19hZGRyKDB4JTAxNmxseCksIHBoeSglZClcbiIsCisJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHNhc19hZGRyZXNzLCBtcHQyc2FzX3BoeS0+cGh5X2lkKTsKKworCWxpc3RfZGVsKCZtcHQyc2FzX3BoeS0+cG9ydF9zaWJsaW5ncyk7CisJbXB0MnNhc19wb3J0LT5udW1fcGh5cy0tOworCXNhc19wb3J0X2RlbGV0ZV9waHkobXB0MnNhc19wb3J0LT5wb3J0LCBtcHQyc2FzX3BoeS0+cGh5KTsKKwltcHQyc2FzX3BoeS0+cGh5X2JlbG9uZ3NfdG9fcG9ydCA9IDA7Cit9CisKKy8qKgorICogX3RyYW5zcG9ydF9hZGRfcGh5IC0gaGVscGVyIGZ1bmN0aW9uIHRvIGFkZGluZyBzaW5nbGUgcGh5IHRvIHBvcnQKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQG1wdDJzYXNfcG9ydDogbXB0MnNhcyBwZXIgcG9ydCBvYmplY3QKKyAqIEBtcHQyc2FzX3BoeTogbXB0MnNhcyBwZXIgcGh5IG9iamVjdAorICoKKyAqIFJldHVybnMgbm90aGluZy4KKyAqLworc3RhdGljIHZvaWQKK190cmFuc3BvcnRfYWRkX3BoeShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHN0cnVjdCBfc2FzX3BvcnQgKm1wdDJzYXNfcG9ydCwKKwlzdHJ1Y3QgX3Nhc19waHkgKm1wdDJzYXNfcGh5KQoreworCXU2NCBzYXNfYWRkcmVzcyA9IG1wdDJzYXNfcG9ydC0+cmVtb3RlX2lkZW50aWZ5LnNhc19hZGRyZXNzOworCisJZGV2X3ByaW50ayhLRVJOX0lORk8sICZtcHQyc2FzX3BoeS0+cGh5LT5kZXYsCisJICAgICJhZGQ6IHNhc19hZGRyKDB4JTAxNmxseCksIHBoeSglZClcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpCisJICAgIHNhc19hZGRyZXNzLCBtcHQyc2FzX3BoeS0+cGh5X2lkKTsKKworCWxpc3RfYWRkX3RhaWwoJm1wdDJzYXNfcGh5LT5wb3J0X3NpYmxpbmdzLCAmbXB0MnNhc19wb3J0LT5waHlfbGlzdCk7CisJbXB0MnNhc19wb3J0LT5udW1fcGh5cysrOworCXNhc19wb3J0X2FkZF9waHkobXB0MnNhc19wb3J0LT5wb3J0LCBtcHQyc2FzX3BoeS0+cGh5KTsKKwltcHQyc2FzX3BoeS0+cGh5X2JlbG9uZ3NfdG9fcG9ydCA9IDE7Cit9CisKKy8qKgorICogX3RyYW5zcG9ydF9hZGRfcGh5X3RvX2FuX2V4aXN0aW5nX3BvcnQgLSBhZGRpbmcgbmV3IHBoeSB0byBleGlzdGluZyBwb3J0CisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBzYXNfbm9kZTogc2FzIG5vZGUgb2JqZWN0IChlaXRoZXIgZXhwYW5kZXIgb3Igc2FzIGhvc3QpCisgKiBAbXB0MnNhc19waHk6IG1wdDJzYXMgcGVyIHBoeSBvYmplY3QKKyAqIEBzYXNfYWRkcmVzczogc2FzIGFkZHJlc3Mgb2YgZGV2aWNlL2V4cGFuZGVyIHdlcmUgcGh5IG5lZWRzIHRvIGJlIGFkZGVkIHRvCisgKgorICogUmV0dXJucyBub3RoaW5nLgorICovCitzdGF0aWMgdm9pZAorX3RyYW5zcG9ydF9hZGRfcGh5X3RvX2FuX2V4aXN0aW5nX3BvcnQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAorc3RydWN0IF9zYXNfbm9kZSAqc2FzX25vZGUsIHN0cnVjdCBfc2FzX3BoeSAqbXB0MnNhc19waHksIHU2NCBzYXNfYWRkcmVzcykKK3sKKwlzdHJ1Y3QgX3Nhc19wb3J0ICptcHQyc2FzX3BvcnQ7CisJc3RydWN0IF9zYXNfcGh5ICpwaHlfc3JjaDsKKworCWlmIChtcHQyc2FzX3BoeS0+cGh5X2JlbG9uZ3NfdG9fcG9ydCA9PSAxKQogCQlyZXR1cm47CiAKLQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmbXB0MnNhc19wb3J0X2R1cGxpY2F0ZS0+cG9ydC0+ZGV2LAotCSAgICAiZGVsZXRpbmcgZHVwbGljYXRlIGRldmljZSBhdCBzYXNfYWRkcigweCUwMTZsbHgpLCBwaHkoJWQpISEhIVxuIiwKLQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykKLQkgICAgbXB0MnNhc19wb3J0X2R1cGxpY2F0ZS0+cmVtb3RlX2lkZW50aWZ5LnNhc19hZGRyZXNzLCBwaHlfbnVtKTsKLQlpb2MtPmxvZ2dpbmdfbGV2ZWwgfD0gTVBUX0RFQlVHX1RSQU5TUE9SVDsKLQltcHQyc2FzX3RyYW5zcG9ydF9wb3J0X3JlbW92ZShpb2MsCi0JICAgIG1wdDJzYXNfcG9ydF9kdXBsaWNhdGUtPnJlbW90ZV9pZGVudGlmeS5zYXNfYWRkcmVzcywKLQkgICAgc2FzX25vZGUtPnNhc19hZGRyZXNzKTsKLQlpb2MtPmxvZ2dpbmdfbGV2ZWwgJj0gfk1QVF9ERUJVR19UUkFOU1BPUlQ7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShtcHQyc2FzX3BvcnQsICZzYXNfbm9kZS0+c2FzX3BvcnRfbGlzdCwKKwkgICAgcG9ydF9saXN0KSB7CisJCWlmIChtcHQyc2FzX3BvcnQtPnJlbW90ZV9pZGVudGlmeS5zYXNfYWRkcmVzcyAhPQorCQkgICAgc2FzX2FkZHJlc3MpCisJCQljb250aW51ZTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShwaHlfc3JjaCwgJm1wdDJzYXNfcG9ydC0+cGh5X2xpc3QsCisJCSAgICBwb3J0X3NpYmxpbmdzKSB7CisJCQlpZiAocGh5X3NyY2ggPT0gbXB0MnNhc19waHkpCisJCQkJcmV0dXJuOworCQl9CisJCV90cmFuc3BvcnRfYWRkX3BoeShpb2MsIG1wdDJzYXNfcG9ydCwgbXB0MnNhc19waHkpOworCQkJcmV0dXJuOworCX0KKworfQorCisvKioKKyAqIF90cmFuc3BvcnRfZGVsX3BoeV9mcm9tX2FuX2V4aXN0aW5nX3BvcnQgLSBkZWxldGUgcGh5IGZyb20gZXhpc3RpbmcgcG9ydAorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAc2FzX25vZGU6IHNhcyBub2RlIG9iamVjdCAoZWl0aGVyIGV4cGFuZGVyIG9yIHNhcyBob3N0KQorICogQG1wdDJzYXNfcGh5OiBtcHQyc2FzIHBlciBwaHkgb2JqZWN0CisgKgorICogUmV0dXJucyBub3RoaW5nLgorICovCitzdGF0aWMgdm9pZAorX3RyYW5zcG9ydF9kZWxfcGh5X2Zyb21fYW5fZXhpc3RpbmdfcG9ydChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCisJc3RydWN0IF9zYXNfbm9kZSAqc2FzX25vZGUsIHN0cnVjdCBfc2FzX3BoeSAqbXB0MnNhc19waHkpCit7CisJc3RydWN0IF9zYXNfcG9ydCAqbXB0MnNhc19wb3J0LCAqbmV4dDsKKwlzdHJ1Y3QgX3Nhc19waHkgKnBoeV9zcmNoOworCisJaWYgKG1wdDJzYXNfcGh5LT5waHlfYmVsb25nc190b19wb3J0ID09IDApCisJCXJldHVybjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtcHQyc2FzX3BvcnQsIG5leHQsICZzYXNfbm9kZS0+c2FzX3BvcnRfbGlzdCwKKwkgICAgcG9ydF9saXN0KSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkocGh5X3NyY2gsICZtcHQyc2FzX3BvcnQtPnBoeV9saXN0LAorCQkgICAgcG9ydF9zaWJsaW5ncykgeworCQkJaWYgKHBoeV9zcmNoICE9IG1wdDJzYXNfcGh5KQorCQkJCWNvbnRpbnVlOworCQkJaWYgKG1wdDJzYXNfcG9ydC0+bnVtX3BoeXMgPT0gMSkKKwkJCQlfdHJhbnNwb3J0X2RlbGV0ZV9wb3J0KGlvYywgbXB0MnNhc19wb3J0KTsKKwkJCWVsc2UKKwkJCQlfdHJhbnNwb3J0X2RlbGV0ZV9waHkoaW9jLCBtcHQyc2FzX3BvcnQsCisJCQkJICAgIG1wdDJzYXNfcGh5KTsKKwkJCXJldHVybjsKKwkJfQorCX0KIH0KIAogLyoqCkBAIC01MzcsMTEgKzYyNCwxMyBAQAogewogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IHNhc19ub2RlLT5udW1fcGh5czsgaSsrKQotCQlpZiAoc2FzX25vZGUtPnBoeVtpXS5yZW1vdGVfaWRlbnRpZnkuc2FzX2FkZHJlc3MgPT0gc2FzX2FkZHJlc3MpCi0JCQlpZiAoc2FzX25vZGUtPnBoeVtpXS5waHlfYmVsb25nc190b19wb3J0KQotCQkJCV90cmFuc3BvcnRfZGVsZXRlX2R1cGxpY2F0ZV9wb3J0KGlvYywgc2FzX25vZGUsCi0JCQkJCXNhc19hZGRyZXNzLCBpKTsKKwlmb3IgKGkgPSAwOyBpIDwgc2FzX25vZGUtPm51bV9waHlzOyBpKyspIHsKKwkJaWYgKHNhc19ub2RlLT5waHlbaV0ucmVtb3RlX2lkZW50aWZ5LnNhc19hZGRyZXNzICE9IHNhc19hZGRyZXNzKQorCQkJY29udGludWU7CisJCWlmIChzYXNfbm9kZS0+cGh5W2ldLnBoeV9iZWxvbmdzX3RvX3BvcnQgPT0gMSkKKwkJCV90cmFuc3BvcnRfZGVsX3BoeV9mcm9tX2FuX2V4aXN0aW5nX3BvcnQoaW9jLCBzYXNfbm9kZSwKKwkJCSAgICAmc2FzX25vZGUtPnBoeVtpXSk7CisJfQogfQogCiAvKioKQEAgLTkwNSwxMCArOTk0LDEyIEBACiAKIAltcHQyc2FzX3BoeSA9ICZzYXNfbm9kZS0+cGh5W3BoeV9udW1iZXJdOwogCW1wdDJzYXNfcGh5LT5hdHRhY2hlZF9oYW5kbGUgPSBoYW5kbGU7Ci0JaWYgKGhhbmRsZSAmJiAobGlua19yYXRlID49IE1QSTJfU0FTX05FR19MSU5LX1JBVEVfMV81KSkKKwlpZiAoaGFuZGxlICYmIChsaW5rX3JhdGUgPj0gTVBJMl9TQVNfTkVHX0xJTktfUkFURV8xXzUpKSB7CiAJCV90cmFuc3BvcnRfc2V0X2lkZW50aWZ5KGlvYywgaGFuZGxlLAogCQkgICAgJm1wdDJzYXNfcGh5LT5yZW1vdGVfaWRlbnRpZnkpOwotCWVsc2UKKwkJX3RyYW5zcG9ydF9hZGRfcGh5X3RvX2FuX2V4aXN0aW5nX3BvcnQoaW9jLCBzYXNfbm9kZSwKKwkJICAgIG1wdDJzYXNfcGh5LCBtcHQyc2FzX3BoeS0+cmVtb3RlX2lkZW50aWZ5LnNhc19hZGRyZXNzKTsKKwl9IGVsc2UKIAkJbWVtc2V0KCZtcHQyc2FzX3BoeS0+cmVtb3RlX2lkZW50aWZ5LCAwICwgc2l6ZW9mKHN0cnVjdAogCQkgICAgc2FzX2lkZW50aWZ5KSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9hdHRyLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfYXR0ci5jCmluZGV4IGJjODE5NGYuLjQ0NTc4YjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9hdHRyLmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2F0dHIuYwpAQCAtMTMwOSw2ICsxMzA5LDMxIEBACiB9CiAKIHN0YXRpYyBzc2l6ZV90CitxbGEyeDAwX3RoZXJtYWxfdGVtcF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXNjc2lfcWxhX2hvc3RfdCAqdmhhID0gc2hvc3RfcHJpdihjbGFzc190b19zaG9zdChkZXYpKTsKKwlpbnQgcnZhbCA9IFFMQV9GVU5DVElPTl9GQUlMRUQ7CisJdWludDE2X3QgdGVtcCwgZnJhYzsKKworCWlmICghdmhhLT5ody0+ZmxhZ3MudGhlcm1hbF9zdXBwb3J0ZWQpCisJCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIlxuIik7CisKKwl0ZW1wID0gZnJhYyA9IDA7CisJaWYgKHRlc3RfYml0KEFCT1JUX0lTUF9BQ1RJVkUsICZ2aGEtPmRwY19mbGFncykgfHwKKwkgICAgdGVzdF9iaXQoSVNQX0FCT1JUX05FRURFRCwgJnZoYS0+ZHBjX2ZsYWdzKSkKKwkJREVCVUcyXzNfMTEocHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgIiVzKCVsZCk6IGlzcCByZXNldCBpbiBwcm9ncmVzcy5cbiIsCisJCSAgICBfX2Z1bmNfXywgdmhhLT5ob3N0X25vKSk7CisJZWxzZSBpZiAoIXZoYS0+aHctPmZsYWdzLmVlaF9idXN5KQorCQlydmFsID0gcWxhMngwMF9nZXRfdGhlcm1hbF90ZW1wKHZoYSwgJnRlbXAsICZmcmFjKTsKKwlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykKKwkJdGVtcCA9IGZyYWMgPSAwOworCisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWQuJTAyZFxuIiwgdGVtcCwgZnJhYyk7Cit9CisKK3N0YXRpYyBzc2l6ZV90CiBxbGEyeDAwX2Z3X3N0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKICAgICBjaGFyICpidWYpCiB7CkBAIC0xMzY2LDYgKzEzOTEsNyBAQAogCQkgICBxbGEyeDAwX3ZuX3BvcnRfbWFjX2FkZHJlc3Nfc2hvdywgTlVMTCk7CiBzdGF0aWMgREVWSUNFX0FUVFIoZmFicmljX3BhcmFtLCBTX0lSVUdPLCBxbGEyeDAwX2ZhYnJpY19wYXJhbV9zaG93LCBOVUxMKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihmd19zdGF0ZSwgU19JUlVHTywgcWxhMngwMF9md19zdGF0ZV9zaG93LCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUih0aGVybWFsX3RlbXAsIFNfSVJVR08sIHFsYTJ4MDBfdGhlcm1hbF90ZW1wX3Nob3csIE5VTEwpOwogCiBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqcWxhMngwMF9ob3N0X2F0dHJzW10gPSB7CiAJJmRldl9hdHRyX2RyaXZlcl92ZXJzaW9uLApAQCAtMTM5NCw2ICsxNDIwLDcgQEAKIAkmZGV2X2F0dHJfZmFicmljX3BhcmFtLAogCSZkZXZfYXR0cl9md19zdGF0ZSwKIAkmZGV2X2F0dHJfb3B0cm9tX2dvbGRfZndfdmVyc2lvbiwKKwkmZGV2X2F0dHJfdGhlcm1hbF90ZW1wLAogCU5VTEwsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfYnNnLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfYnNnLmMKaW5kZXggMzFhNDEyMS4uOTAzYjA1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2JzZy5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9ic2cuYwpAQCAtMTAzLDcgKzEwMyw3IEBACiAKIAlic2dfam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0gMDsKIAotCWlmICghSVNfUUxBMjRYWF9UWVBFKGhhKSB8fCAhSVNfUUxBMjVYWChoYSkpIHsKKwlpZiAoIShJU19RTEEyNFhYX1RZUEUoaGEpIHx8IElTX1FMQTI1WFgoaGEpKSkgewogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIGV4aXRfZmNwX3ByaW9fY2ZnOwogCX0KQEAgLTc1Myw3ICs3NTMsNyBAQAogCQkJY29tbWFuZF9zZW50ID0gSU5UX0RFRl9MQl9MT09QQkFDS19DTUQ7CiAJCQlydmFsID0gcWxhMngwMF9sb29wYmFja190ZXN0KHZoYSwgJmVscmVxLCByZXNwb25zZSk7CiAKLQkJCWlmIChuZXdfY29uZmlnWzFdKSB7CisJCQlpZiAobmV3X2NvbmZpZ1swXSkgewogCQkJCS8qIFJldmVydCBiYWNrIHRvIG9yaWdpbmFsIHBvcnQgY29uZmlnCiAJCQkJICogQWxzbyBjbGVhciBpbnRlcm5hbCBsb29wYmFjawogCQkJCSAqLwpAQCAtMTUxMiw2ICsxNTEyLDcgQEAKIAkJCQlpZiAoKChzcF9ic2ctPnR5cGUgPT0gU1JCX0NUX0NNRCkgfHwKIAkJCQkJKHNwX2JzZy0+dHlwZSA9PSBTUkJfRUxTX0NNRF9IU1QpKQogCQkJCQkmJiAoc3BfYnNnLT51LmJzZ19qb2IgPT0gYnNnX2pvYikpIHsKKwkJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGEtPmhhcmR3YXJlX2xvY2ssIGZsYWdzKTsKIAkJCQkJaWYgKGhhLT5pc3Bfb3BzLT5hYm9ydF9jb21tYW5kKHNwKSkgewogCQkJCQkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKIAkJCQkJCSAgICAic2NzaSglbGQpOiBtYnggIgpAQCAtMTUyNyw2ICsxNTI4LDcgQEAKIAkJCQkJCWJzZ19qb2ItPnJlcS0+ZXJyb3JzID0KIAkJCQkJCWJzZ19qb2ItPnJlcGx5LT5yZXN1bHQgPSAwOwogCQkJCQl9CisJCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZoYS0+aGFyZHdhcmVfbG9jaywgZmxhZ3MpOwogCQkJCQlnb3RvIGRvbmU7CiAJCQkJfQogCQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2RlZi5oIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2RlZi5oCmluZGV4IDljZTUzOWQuLmNjZmM4ZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kZWYuaAorKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGVmLmgKQEAgLTI0MjUsNiArMjQyNSw5IEBACiAJCXVpbnQzMl90CWRpc2FibGVfbXNpeF9oYW5kc2hha2UJOjE7CiAJCXVpbnQzMl90CWZjcF9wcmlvX2VuYWJsZWQJOjE7CiAJCXVpbnQzMl90CWZ3X2h1bmcJOjE7CisJCXVpbnQzMl90ICAgICAgICBxdWllc2NlX293bmVyOjE7CisJCXVpbnQzMl90CXRoZXJtYWxfc3VwcG9ydGVkOjE7CisJCS8qIDI2IGJpdHMgKi8KIAl9IGZsYWdzOwogCiAJLyogVGhpcyBzcGlubG9jayBpcyB1c2VkIHRvIHByb3RlY3QgImlvIHRyYW5zYWN0aW9ucyIsIHlvdSBtdXN0CkBAIC0yODYzLDYgKzI4NjYsNyBAQAogI2RlZmluZSBJU1BfVU5SRUNPVkVSQUJMRQkxNwogI2RlZmluZSBGQ09FX0NUWF9SRVNFVF9ORUVERUQJMTgJLyogSW5pdGlhdGUgRkNvRSBjb250ZXh0IHJlc2V0ICovCiAjZGVmaW5lIE1QSV9SRVNFVF9ORUVERUQJMTkJLyogSW5pdGlhdGUgTVBJIEZXIHJlc2V0ICovCisjZGVmaW5lIElTUF9RVUlFU0NFX05FRURFRAkyMAkvKiBEcml2ZXIgbmVlZCBzb21lIHF1aWVzY2VuY2UgKi8KIAogCXVpbnQzMl90CWRldmljZV9mbGFnczsKICNkZWZpbmUgU1dJVENIX0ZPVU5ECQlCSVRfMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2dibC5oIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2dibC5oCmluZGV4IDkzODJhODEuLjg5ZTkwMGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9nYmwuaAorKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZ2JsLmgKQEAgLTM2LDYgKzM2LDcgQEAKIGV4dGVybiBpbnQgcWxhMjR4eF9sb2FkX3Jpc2Moc2NzaV9xbGFfaG9zdF90ICosIHVpbnQzMl90ICopOwogZXh0ZXJuIGludCBxbGE4MXh4X2xvYWRfcmlzYyhzY3NpX3FsYV9ob3N0X3QgKiwgdWludDMyX3QgKik7CiAKK2V4dGVybiBpbnQgcWxhMngwMF9wZXJmb3JtX2xvb3BfcmVzeW5jKHNjc2lfcWxhX2hvc3RfdCAqKTsKIGV4dGVybiBpbnQgcWxhMngwMF9sb29wX3Jlc3luYyhzY3NpX3FsYV9ob3N0X3QgKik7CiAKIGV4dGVybiBpbnQgcWxhMngwMF9mYWJyaWNfbG9naW4oc2NzaV9xbGFfaG9zdF90ICosIGZjX3BvcnRfdCAqLCB1aW50MTZfdCAqKTsKQEAgLTQ1LDEyICs0NiwxNSBAQAogCiBleHRlcm4gaW50IHFsYTJ4MDBfYWJvcnRfaXNwKHNjc2lfcWxhX2hvc3RfdCAqKTsKIGV4dGVybiB2b2lkIHFsYTJ4MDBfYWJvcnRfaXNwX2NsZWFudXAoc2NzaV9xbGFfaG9zdF90ICopOworZXh0ZXJuIHZvaWQgcWxhODJ4eF9xdWllc2NlbnRfc3RhdGVfY2xlYW51cChzY3NpX3FsYV9ob3N0X3QgKik7CiAKIGV4dGVybiB2b2lkIHFsYTJ4MDBfdXBkYXRlX2ZjcG9ydChzY3NpX3FsYV9ob3N0X3QgKiwgZmNfcG9ydF90ICopOwogCiBleHRlcm4gdm9pZCBxbGEyeDAwX2FsbG9jX2Z3X2R1bXAoc2NzaV9xbGFfaG9zdF90ICopOwogZXh0ZXJuIHZvaWQgcWxhMngwMF90cnlfdG9fc3RvcF9maXJtd2FyZShzY3NpX3FsYV9ob3N0X3QgKik7CiAKK2V4dGVybiBpbnQgcWxhMngwMF9nZXRfdGhlcm1hbF90ZW1wKHNjc2lfcWxhX2hvc3RfdCAqLCB1aW50MTZfdCAqLCB1aW50MTZfdCAqKTsKKwogZXh0ZXJuIHZvaWQgcWxhODR4eF9wdXRfY2hpcChzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqKTsKIAogZXh0ZXJuIGludCBxbGEyeDAwX2FzeW5jX2xvZ2luKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICosIGZjX3BvcnRfdCAqLApAQCAtNjgsNiArNzIsNyBAQAogZXh0ZXJuIHZvaWQgcWxhMngwMF9hc3luY190bV9jbWRfZG9uZShzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqLCBmY19wb3J0X3QgKiwKIAlzdHJ1Y3Qgc3JiX2lvY2IgKik7CiBleHRlcm4gdm9pZCAqcWxhMngwMF9hbGxvY19pb2NicyhzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqLCBzcmJfdCAqKTsKK2V4dGVybiBpbnQgcWxhMjR4eF91cGRhdGVfZmNwb3J0X2ZjcF9wcmlvKHNjc2lfcWxhX2hvc3RfdCAqLCBmY19wb3J0X3QgKik7CiAKIGV4dGVybiBmY19wb3J0X3QgKgogcWxhMngwMF9hbGxvY19mY3BvcnQoc2NzaV9xbGFfaG9zdF90ICosIGdmcF90ICk7CkBAIC05MCw3ICs5NSw2IEBACiBleHRlcm4gaW50IHFsMnhldHNlbmFibGU7CiBleHRlcm4gaW50IHFsMnhzaGlmdGN0b25kc2Q7CiBleHRlcm4gaW50IHFsMnhkYndyOwotZXh0ZXJuIGludCBxbDJ4ZG9udHJlc2V0aGJhOwogZXh0ZXJuIGludCBxbDJ4YXN5bmN0bWZlbmFibGU7CiBleHRlcm4gaW50IHFsMnhnZmZpZGVuYWJsZTsKIGV4dGVybiBpbnQgcWwyeGVuYWJsZWRpZjsKQEAgLTU0OSw5ICs1NTMsMTEgQEAKIAogLyogSVNQIDgwMjEgSURDICovCiBleHRlcm4gdm9pZCBxbGE4Mnh4X2NsZWFyX2Rydl9hY3RpdmUoc3RydWN0IHFsYV9od19kYXRhICopOworZXh0ZXJuIHVpbnQzMl90ICBxbGE4Mnh4X3dhaXRfZm9yX3N0YXRlX2NoYW5nZShzY3NpX3FsYV9ob3N0X3QgKiwgdWludDMyX3QpOwogZXh0ZXJuIGludCBxbGE4Mnh4X2lkY19sb2NrKHN0cnVjdCBxbGFfaHdfZGF0YSAqKTsKIGV4dGVybiB2b2lkIHFsYTgyeHhfaWRjX3VubG9jayhzdHJ1Y3QgcWxhX2h3X2RhdGEgKik7CiBleHRlcm4gaW50IHFsYTgyeHhfZGV2aWNlX3N0YXRlX2hhbmRsZXIoc2NzaV9xbGFfaG9zdF90ICopOworZXh0ZXJuIHZvaWQgcWxhODJ4eF9jbGVhcl9xc250X3JlYWR5KHNjc2lfcWxhX2hvc3RfdCAqKTsKIAogZXh0ZXJuIHZvaWQgcWxhMngwMF9zZXRfbW9kZWxfaW5mbyhzY3NpX3FsYV9ob3N0X3QgKiwgdWludDhfdCAqLAogICAgIHNpemVfdCwgY2hhciAqKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pbml0LmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW5pdC5jCmluZGV4IDI1OWY1MTEuLmY5NDhlMWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pbml0LmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2luaXQuYwpAQCAtNDk4LDYgKzQ5OCw3IEBACiAJdmhhLT5mbGFncy5yZXNldF9hY3RpdmUgPSAwOwogCWhhLT5mbGFncy5wY2lfY2hhbm5lbF9pb19wZXJtX2ZhaWx1cmUgPSAwOwogCWhhLT5mbGFncy5lZWhfYnVzeSA9IDA7CisJaGEtPmZsYWdzLnRoZXJtYWxfc3VwcG9ydGVkID0gMTsKIAlhdG9taWNfc2V0KCZ2aGEtPmxvb3BfZG93bl90aW1lciwgTE9PUF9ET1dOX1RJTUUpOwogCWF0b21pY19zZXQoJnZoYS0+bG9vcF9zdGF0ZSwgTE9PUF9ET1dOKTsKIAl2aGEtPmRldmljZV9mbGFncyA9IERGTEdfTk9fQ0FCTEU7CkBAIC0yMDIzLDYgKzIwMjQsNyBAQAogCSAgICAmbG9vcF9pZCwgJmFsX3BhLCAmYXJlYSwgJmRvbWFpbiwgJnRvcG8sICZzd19jYXApOwogCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKSB7CiAJCWlmIChMT09QX1RSQU5TSVRJT04odmhhKSB8fCBhdG9taWNfcmVhZCgmaGEtPmxvb3BfZG93bl90aW1lcikgfHwKKwkJICAgIElTX1FMQThYWFhfVFlQRShoYSkgfHwKIAkJICAgIChydmFsID09IFFMQV9DT01NQU5EX0VSUk9SICYmIGxvb3BfaWQgPT0gMHg3KSkgewogCQkJREVCVUcyKHByaW50aygiJXMoJWxkKSBMb29wIGlzIGluIGEgdHJhbnNpdGlvbiBzdGF0ZVxuIiwKIAkJCSAgICBfX2Z1bmNfXywgdmhhLT5ob3N0X25vKSk7CkBAIC0yOTI4LDYgKzI5MzAsNyBAQAogCWZjcG9ydC0+ZmxhZ3MgJj0gfihGQ0ZfTE9HSU5fTkVFREVEIHwgRkNGX0FTWU5DX1NFTlQpOwogCiAJcWxhMngwMF9paWRtYV9mY3BvcnQodmhhLCBmY3BvcnQpOworCXFsYTI0eHhfdXBkYXRlX2ZjcG9ydF9mY3BfcHJpbyh2aGEsIGZjcG9ydCk7CiAJcWxhMngwMF9yZWdfcmVtb3RlX3BvcnQodmhhLCBmY3BvcnQpOwogCWF0b21pY19zZXQoJmZjcG9ydC0+c3RhdGUsIEZDU19PTkxJTkUpOwogfQpAQCAtMzg0NCw2ICszODQ3LDM3IEBACiAJcmV0dXJuIChydmFsKTsKIH0KIAorLyoKKyogcWxhMngwMF9wZXJmb3JtX2xvb3BfcmVzeW5jCisqIERlc2NyaXB0aW9uOiBUaGlzIGZ1bmN0aW9uIHdpbGwgc2V0IHRoZSBhcHByb3ByaWF0ZSBmbGFncyBhbmQgY2FsbAorKiAgICAgICAgICAgICAgcWxhMngwMF9sb29wX3Jlc3luYy4gSWYgc3VjY2Vzc2Z1bCBsb29wIHdpbGwgYmUgcmVzeW5jZWQKKyogQXJndW1lbnRzIDogc2NzaV9xbGFfaG9zdF90IHBvaW50ZXIKKyogcmV0dXJtICAgIDogU3VjY2VzcyBvciBGYWlsdXJlCisqLworCitpbnQgcWxhMngwMF9wZXJmb3JtX2xvb3BfcmVzeW5jKHNjc2lfcWxhX2hvc3RfdCAqaGEpCit7CisJaW50MzJfdCBydmFsID0gMDsKKworCWlmICghdGVzdF9hbmRfc2V0X2JpdChMT09QX1JFU1lOQ19BQ1RJVkUsICZoYS0+ZHBjX2ZsYWdzKSkgeworCQkvKkNvbmZpZ3VyZSB0aGUgZmxhZ3Mgc28gdGhhdCByZXN5bmMgaGFwcGVucyBwcm9wZXJseSovCisJCWF0b21pY19zZXQoJmhhLT5sb29wX2Rvd25fdGltZXIsIDApOworCQlpZiAoIShoYS0+ZGV2aWNlX2ZsYWdzICYgREZMR19OT19DQUJMRSkpIHsKKwkJCWF0b21pY19zZXQoJmhhLT5sb29wX3N0YXRlLCBMT09QX1VQKTsKKwkJCXNldF9iaXQoTE9DQUxfTE9PUF9VUERBVEUsICZoYS0+ZHBjX2ZsYWdzKTsKKwkJCXNldF9iaXQoUkVHSVNURVJfRkM0X05FRURFRCwgJmhhLT5kcGNfZmxhZ3MpOworCQkJc2V0X2JpdChMT09QX1JFU1lOQ19ORUVERUQsICZoYS0+ZHBjX2ZsYWdzKTsKKworCQkJcnZhbCA9IHFsYTJ4MDBfbG9vcF9yZXN5bmMoaGEpOworCQl9IGVsc2UKKwkJCWF0b21pY19zZXQoJmhhLT5sb29wX3N0YXRlLCBMT09QX0RFQUQpOworCisJCWNsZWFyX2JpdChMT09QX1JFU1lOQ19BQ1RJVkUsICZoYS0+ZHBjX2ZsYWdzKTsKKwl9CisKKwlyZXR1cm4gcnZhbDsKK30KKwogdm9pZAogcWxhMngwMF91cGRhdGVfZmNwb3J0cyhzY3NpX3FsYV9ob3N0X3QgKmJhc2VfdmhhKQogewpAQCAtMzg1Nyw3ICszODkxLDcgQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZoYSwgJmJhc2VfdmhhLT5ody0+dnBfbGlzdCwgbGlzdCkgewogCQlhdG9taWNfaW5jKCZ2aGEtPnZyZWZfY291bnQpOwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGZjcG9ydCwgJnZoYS0+dnBfZmNwb3J0cywgbGlzdCkgewotCQkJaWYgKGZjcG9ydCAmJiBmY3BvcnQtPmRycG9ydCAmJgorCQkJaWYgKGZjcG9ydC0+ZHJwb3J0ICYmCiAJCQkgICAgYXRvbWljX3JlYWQoJmZjcG9ydC0+c3RhdGUpICE9IEZDU19VTkNPTkZJR1VSRUQpIHsKIAkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoYS0+dnBvcnRfc2xvY2ssIGZsYWdzKTsKIApAQCAtMzg3MSwxMSArMzkwNSw0MyBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhhLT52cG9ydF9zbG9jaywgZmxhZ3MpOwogfQogCisvKgorKiBxbGE4Mnh4X3F1aWVzY2VudF9zdGF0ZV9jbGVhbnVwCisqIERlc2NyaXB0aW9uOiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmxvY2sgdGhlIG5ldyBJL09zCisqICAgICAgICAgICAgICBJdHMgbm90IGFib3J0aW5nIGFueSBJL09zIGFzIGNvbnRleHQKKyogICAgICAgICAgICAgIGlzIG5vdCBkZXN0cm95ZWQgZHVyaW5nIHF1aWVzY2VuY2UKKyogQXJndW1lbnRzOiBzY3NpX3FsYV9ob3N0X3QKKyogcmV0dXJuICAgOiB2b2lkCisqLwordm9pZAorcWxhODJ4eF9xdWllc2NlbnRfc3RhdGVfY2xlYW51cChzY3NpX3FsYV9ob3N0X3QgKnZoYSkKK3sKKwlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKKwlzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqdnA7CisKKwlxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCisJCQkiUGVyZm9ybWluZyBJU1AgZXJyb3IgcmVjb3ZlcnkgLSBoYT0gJXAuXG4iLCBoYSk7CisKKwlhdG9taWNfc2V0KCZoYS0+bG9vcF9kb3duX3RpbWVyLCBMT09QX0RPV05fVElNRSk7CisJaWYgKGF0b21pY19yZWFkKCZ2aGEtPmxvb3Bfc3RhdGUpICE9IExPT1BfRE9XTikgeworCQlhdG9taWNfc2V0KCZ2aGEtPmxvb3Bfc3RhdGUsIExPT1BfRE9XTik7CisJCXFsYTJ4MDBfbWFya19hbGxfZGV2aWNlc19sb3N0KHZoYSwgMCk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkodnAsICZoYS0+dnBfbGlzdCwgbGlzdCkKKwkJCXFsYTJ4MDBfbWFya19hbGxfZGV2aWNlc19sb3N0KHZoYSwgMCk7CisJfSBlbHNlIHsKKwkJaWYgKCFhdG9taWNfcmVhZCgmdmhhLT5sb29wX2Rvd25fdGltZXIpKQorCQkJYXRvbWljX3NldCgmdmhhLT5sb29wX2Rvd25fdGltZXIsCisJCQkJCUxPT1BfRE9XTl9USU1FKTsKKwl9CisJLyogV2FpdCBmb3IgcGVuZGluZyBjbWRzIHRvIGNvbXBsZXRlICovCisJcWxhMngwMF9laF93YWl0X2Zvcl9wZW5kaW5nX2NvbW1hbmRzKHZoYSwgMCwgMCwgV0FJVF9IT1NUKTsKK30KKwogdm9pZAogcWxhMngwMF9hYm9ydF9pc3BfY2xlYW51cChzY3NpX3FsYV9ob3N0X3QgKnZoYSkKIHsKIAlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKLQlzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqdnAsICpiYXNlX3ZoYSA9IHBjaV9nZXRfZHJ2ZGF0YShoYS0+cGRldik7CisJc3RydWN0IHNjc2lfcWxhX2hvc3QgKnZwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAl2aGEtPmZsYWdzLm9ubGluZSA9IDA7CkBAIC0zODk2LDcgKzM5NjIsNyBAQAogCQlxbGEyeDAwX21hcmtfYWxsX2RldmljZXNfbG9zdCh2aGEsIDApOwogCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZoYS0+dnBvcnRfc2xvY2ssIGZsYWdzKTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeSh2cCwgJmJhc2VfdmhhLT5ody0+dnBfbGlzdCwgbGlzdCkgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZwLCAmaGEtPnZwX2xpc3QsIGxpc3QpIHsKIAkJCWF0b21pY19pbmMoJnZwLT52cmVmX2NvdW50KTsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhhLT52cG9ydF9zbG9jaywgZmxhZ3MpOwogCkBAIC01NDEwLDcgKzU0NzYsNyBAQAogICoJdGhlIHRhZyAocHJpb3JpdHkpIHZhbHVlIGlzIHJldHVybmVkLgogICoKICAqIElucHV0OgotICoJaGEgPSBhZGFwdGVyIGJsb2NrIHBvCisgKgl2aGEgPSBzY3NpIGhvc3Qgc3RydWN0dXJlIHBvaW50ZXIuCiAgKglmY3BvcnQgPSBwb3J0IHN0cnVjdHVyZSBwb2ludGVyLgogICoKICAqIFJldHVybjoKQEAgLTU1MDQsNyArNTU3MCw3IEBACiAgKglBY3RpdmF0ZXMgZmNwIHByaW9yaXR5IGZvciB0aGUgbG9nZ2VkIGluIGZjIHBvcnQKICAqCiAgKiBJbnB1dDoKLSAqCWhhID0gYWRhcHRlciBibG9jayBwb2ludGVyLgorICoJdmhhID0gc2NzaSBob3N0IHN0cnVjdHVyZSBwb2ludGVyLgogICoJZmNwID0gcG9ydCBzdHJ1Y3R1cmUgcG9pbnRlci4KICAqCiAgKiBSZXR1cm46CkBAIC01NTE0LDI1ICs1NTgwLDI0IEBACiAgKglLZXJuZWwgY29udGV4dC4KICAqLwogaW50Ci1xbGEyNHh4X3VwZGF0ZV9mY3BvcnRfZmNwX3ByaW8oc2NzaV9xbGFfaG9zdF90ICpoYSwgZmNfcG9ydF90ICpmY3BvcnQpCitxbGEyNHh4X3VwZGF0ZV9mY3BvcnRfZmNwX3ByaW8oc2NzaV9xbGFfaG9zdF90ICp2aGEsIGZjX3BvcnRfdCAqZmNwb3J0KQogewogCWludCByZXQ7CiAJdWludDhfdCBwcmlvcml0eTsKIAl1aW50MTZfdCBtYls1XTsKIAotCWlmIChhdG9taWNfcmVhZCgmZmNwb3J0LT5zdGF0ZSkgPT0gRkNTX1VOQ09ORklHVVJFRCB8fAotCQlmY3BvcnQtPnBvcnRfdHlwZSAhPSBGQ1RfVEFSR0VUIHx8Ci0JCWZjcG9ydC0+bG9vcF9pZCA9PSBGQ19OT19MT09QX0lEKQorCWlmIChmY3BvcnQtPnBvcnRfdHlwZSAhPSBGQ1RfVEFSR0VUIHx8CisJICAgIGZjcG9ydC0+bG9vcF9pZCA9PSBGQ19OT19MT09QX0lEKQogCQlyZXR1cm4gUUxBX0ZVTkNUSU9OX0ZBSUxFRDsKIAotCXByaW9yaXR5ID0gcWxhMjR4eF9nZXRfZmNwX3ByaW8oaGEsIGZjcG9ydCk7Ci0JcmV0ID0gcWxhMjR4eF9zZXRfZmNwX3ByaW8oaGEsIGZjcG9ydC0+bG9vcF9pZCwgcHJpb3JpdHksIG1iKTsKKwlwcmlvcml0eSA9IHFsYTI0eHhfZ2V0X2ZjcF9wcmlvKHZoYSwgZmNwb3J0KTsKKwlyZXQgPSBxbGEyNHh4X3NldF9mY3BfcHJpbyh2aGEsIGZjcG9ydC0+bG9vcF9pZCwgcHJpb3JpdHksIG1iKTsKIAlpZiAocmV0ID09IFFMQV9TVUNDRVNTKQogCQlmY3BvcnQtPmZjcF9wcmlvID0gcHJpb3JpdHk7CiAJZWxzZQogCQlERUJVRzIocHJpbnRrKEtFUk5fV0FSTklORwogCQkJInNjc2koJWxkKTogVW5hYmxlIHRvIGFjdGl2YXRlIGZjcCBwcmlvcml0eSwgIgotCQkJIiByZXQ9MHgleFxuIiwgaGEtPmhvc3Rfbm8sIHJldCkpOworCQkJIiByZXQ9MHgleFxuIiwgdmhhLT5ob3N0X25vLCByZXQpKTsKIAogCXJldHVybiAgcmV0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lzci5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lzci5jCmluZGV4IDdmNzc4OTguLmQxN2VkOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pc3IuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaXNyLmMKQEAgLTMyMSw2ICszMjEsNyBAQAogCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSB2aGEtPmh3OwogCXN0cnVjdCBkZXZpY2VfcmVnXzJ4eHggX19pb21lbSAqcmVnID0gJmhhLT5pb2Jhc2UtPmlzcDsKIAlzdHJ1Y3QgZGV2aWNlX3JlZ18yNHh4IF9faW9tZW0gKnJlZzI0ID0gJmhhLT5pb2Jhc2UtPmlzcDI0OworCXN0cnVjdCBkZXZpY2VfcmVnXzgyeHggX19pb21lbSAqcmVnODIgPSAmaGEtPmlvYmFzZS0+aXNwODI7CiAJdWludDMyX3QJcnNjbl9lbnRyeSwgaG9zdF9waWQ7CiAJdWludDhfdAkJcnNjbl9xdWV1ZV9pbmRleDsKIAl1bnNpZ25lZCBsb25nCWZsYWdzOwpAQCAtNDk4LDYgKzQ5OSw3IEBACiAKIAljYXNlIE1CQV9MT09QX0RPV046CQkvKiBMb29wIERvd24gRXZlbnQgKi8KIAkJbWJ4ID0gSVNfUUxBODFYWChoYSkgPyBSRF9SRUdfV09SRCgmcmVnMjQtPm1haWxib3g0KSA6IDA7CisJCW1ieCA9IElTX1FMQTgyWFgoaGEpID8gUkRfUkVHX1dPUkQoJnJlZzgyLT5tYWlsYm94X291dFs0XSkgOiBtYng7CiAJCURFQlVHMihwcmludGsoInNjc2koJWxkKTogQXN5bmNocm9ub3VzIExPT1AgRE9XTiAiCiAJCSAgICAiKCV4ICV4ICV4ICV4KS5cbiIsIHZoYS0+aG9zdF9ubywgbWJbMV0sIG1iWzJdLCBtYlszXSwKIAkJICAgIG1ieCkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX21ieC5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX21ieC5jCmluZGV4IGVmZmQ4YTEuLmU0NzNlOWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9tYnguYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbWJ4LmMKQEAgLTQxMjUsNyArNDEyNSw3IEBACiAJCXJldHVybiBRTEFfRlVOQ1RJT05fRkFJTEVEOwogCiAJREVCVUcxMShwcmludGsoS0VSTl9JTkZPCi0JICAgICIlcyglbGQpOiBlbnRlcmVkLlxuIiwgX19mdW5jX18sIGhhLT5ob3N0X25vKSk7CisJICAgICIlcyglbGQpOiBlbnRlcmVkLlxuIiwgX19mdW5jX18sIHZoYS0+aG9zdF9ubykpOwogCiAJbWNwLT5tYlswXSA9IE1CQ19QT1JUX1BBUkFNUzsKIAltY3AtPm1iWzFdID0gbG9vcF9pZDsKQEAgLTQxNjAsNiArNDE2MCw3MSBAQAogfQogCiBpbnQKK3FsYTJ4MDBfZ2V0X3RoZXJtYWxfdGVtcChzY3NpX3FsYV9ob3N0X3QgKnZoYSwgdWludDE2X3QgKnRlbXAsIHVpbnQxNl90ICpmcmFjKQoreworCWludCBydmFsOworCW1ieF9jbWRfdCBtYzsKKwltYnhfY21kX3QgKm1jcCA9ICZtYzsKKwlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKKworCURFQlVHMTEocHJpbnRrKEtFUk5fSU5GTyAiJXMoJWxkKTogZW50ZXJlZC5cbiIsIF9fZnVuY19fLCBoYS0+aG9zdF9ubykpOworCisJLyogSGlnaCBiaXRzLiAqLworCW1jcC0+bWJbMF0gPSBNQkNfUkVBRF9TRlA7CisJbWNwLT5tYlsxXSA9IDB4OTg7CisJbWNwLT5tYlsyXSA9IDA7CisJbWNwLT5tYlszXSA9IDA7CisJbWNwLT5tYls2XSA9IDA7CisJbWNwLT5tYls3XSA9IDA7CisJbWNwLT5tYls4XSA9IDE7CisJbWNwLT5tYls5XSA9IDB4MDE7CisJbWNwLT5tYlsxMF0gPSBCSVRfMTN8QklUXzA7CisJbWNwLT5vdXRfbWIgPSBNQlhfMTB8TUJYXzl8TUJYXzh8TUJYXzd8TUJYXzZ8TUJYXzN8TUJYXzJ8TUJYXzF8TUJYXzA7CisJbWNwLT5pbl9tYiA9IE1CWF8xfE1CWF8wOworCW1jcC0+dG92ID0gTUJYX1RPVl9TRUNPTkRTOworCW1jcC0+ZmxhZ3MgPSAwOworCXJ2YWwgPSBxbGEyeDAwX21haWxib3hfY29tbWFuZCh2aGEsIG1jcCk7CisJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpIHsKKwkJREVCVUcyXzNfMTEocHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgIiVzKCVsZCk6IGZhaWxlZD0leCAoJXgpLlxuIiwgX19mdW5jX18sCisJCSAgICB2aGEtPmhvc3Rfbm8sIHJ2YWwsIG1jcC0+bWJbMF0pKTsKKwkJaGEtPmZsYWdzLnRoZXJtYWxfc3VwcG9ydGVkID0gMDsKKwkJZ290byBmYWlsOworCX0KKwkqdGVtcCA9IG1jcC0+bWJbMV0gJiAweEZGOworCisJLyogTG93IGJpdHMuICovCisJbWNwLT5tYlswXSA9IE1CQ19SRUFEX1NGUDsKKwltY3AtPm1iWzFdID0gMHg5ODsKKwltY3AtPm1iWzJdID0gMDsKKwltY3AtPm1iWzNdID0gMDsKKwltY3AtPm1iWzZdID0gMDsKKwltY3AtPm1iWzddID0gMDsKKwltY3AtPm1iWzhdID0gMTsKKwltY3AtPm1iWzldID0gMHgxMDsKKwltY3AtPm1iWzEwXSA9IEJJVF8xM3xCSVRfMDsKKwltY3AtPm91dF9tYiA9IE1CWF8xMHxNQlhfOXxNQlhfOHxNQlhfN3xNQlhfNnxNQlhfM3xNQlhfMnxNQlhfMXxNQlhfMDsKKwltY3AtPmluX21iID0gTUJYXzF8TUJYXzA7CisJbWNwLT50b3YgPSBNQlhfVE9WX1NFQ09ORFM7CisJbWNwLT5mbGFncyA9IDA7CisJcnZhbCA9IHFsYTJ4MDBfbWFpbGJveF9jb21tYW5kKHZoYSwgbWNwKTsKKwlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgeworCQlERUJVRzJfM18xMShwcmludGsoS0VSTl9XQVJOSU5HCisJCSAgICAiJXMoJWxkKTogZmFpbGVkPSV4ICgleCkuXG4iLCBfX2Z1bmNfXywKKwkJICAgIHZoYS0+aG9zdF9ubywgcnZhbCwgbWNwLT5tYlswXSkpOworCQloYS0+ZmxhZ3MudGhlcm1hbF9zdXBwb3J0ZWQgPSAwOworCQlnb3RvIGZhaWw7CisJfQorCSpmcmFjID0gKChtY3AtPm1iWzFdICYgMHhGRikgPj4gNikgKiAyNTsKKworCWlmIChydmFsID09IFFMQV9TVUNDRVNTKQorCQlERUJVRzExKHByaW50ayhLRVJOX0lORk8KKwkJICAgICIlcyglbGQpOiBkb25lLlxuIiwgX19mdW5jX18sIGhhLT5ob3N0X25vKSk7CitmYWlsOgorCXJldHVybiBydmFsOworfQorCitpbnQKIHFsYTgyeHhfbWJ4X2ludHJfZW5hYmxlKHNjc2lfcWxhX2hvc3RfdCAqdmhhKQogewogCWludCBydmFsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX254LmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbnguYwppbmRleCBhZTJhY2FjLi5mZGI5NmEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbnguYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbnguYwpAQCAtMTA3OSwxMSArMTA3OSw1NSBAQAogCiAJLyogSGFsdCBhbGwgdGhlIGluZGl2aXVhbCBQRUdzIGFuZCBvdGhlciBibG9ja3Mgb2YgdGhlIElTUCAqLwogCXFsYTgyeHhfcm9tX2xvY2soaGEpOworCisJLyogbWFzayBhbGwgbml1IGludGVycnVwdHMgKi8KKwlxbGE4Mnh4X3dyXzMyKGhhLCBRTEE4MlhYX0NSQl9OSVUgKyAweDQwLCAweGZmKTsKKwkvKiBkaXNhYmxlIHhnZSByeC90eCAqLworCXFsYTgyeHhfd3JfMzIoaGEsIFFMQTgyWFhfQ1JCX05JVSArIDB4NzAwMDAsIDB4MDApOworCS8qIGRpc2FibGUgeGcxIHJ4L3R4ICovCisJcWxhODJ4eF93cl8zMihoYSwgUUxBODJYWF9DUkJfTklVICsgMHg4MDAwMCwgMHgwMCk7CisKKwkvKiBoYWx0IHNyZSAqLworCXZhbCA9IHFsYTgyeHhfcmRfMzIoaGEsIFFMQTgyWFhfQ1JCX1NSRSArIDB4MTAwMCk7CisJcWxhODJ4eF93cl8zMihoYSwgUUxBODJYWF9DUkJfU1JFICsgMHgxMDAwLCB2YWwgJiAofigweDEpKSk7CisKKwkvKiBoYWx0IGVwZyAqLworCXFsYTgyeHhfd3JfMzIoaGEsIFFMQTgyWFhfQ1JCX0VQRyArIDB4MTMwMCwgMHgxKTsKKworCS8qIGhhbHQgdGltZXJzICovCisJcWxhODJ4eF93cl8zMihoYSwgUUxBODJYWF9DUkJfVElNRVIgKyAweDAsIDB4MCk7CisJcWxhODJ4eF93cl8zMihoYSwgUUxBODJYWF9DUkJfVElNRVIgKyAweDgsIDB4MCk7CisJcWxhODJ4eF93cl8zMihoYSwgUUxBODJYWF9DUkJfVElNRVIgKyAweDEwLCAweDApOworCXFsYTgyeHhfd3JfMzIoaGEsIFFMQTgyWFhfQ1JCX1RJTUVSICsgMHgxOCwgMHgwKTsKKwlxbGE4Mnh4X3dyXzMyKGhhLCBRTEE4MlhYX0NSQl9USU1FUiArIDB4MTAwLCAweDApOworCisJLyogaGFsdCBwZWdzICovCisJcWxhODJ4eF93cl8zMihoYSwgUUxBODJYWF9DUkJfUEVHX05FVF8wICsgMHgzYywgMSk7CisJcWxhODJ4eF93cl8zMihoYSwgUUxBODJYWF9DUkJfUEVHX05FVF8xICsgMHgzYywgMSk7CisJcWxhODJ4eF93cl8zMihoYSwgUUxBODJYWF9DUkJfUEVHX05FVF8yICsgMHgzYywgMSk7CisJcWxhODJ4eF93cl8zMihoYSwgUUxBODJYWF9DUkJfUEVHX05FVF8zICsgMHgzYywgMSk7CisJcWxhODJ4eF93cl8zMihoYSwgUUxBODJYWF9DUkJfUEVHX05FVF80ICsgMHgzYywgMSk7CisKKwkvKiBiaWcgaGFtbWVyICovCisJbXNsZWVwKDEwMDApOwogCWlmICh0ZXN0X2JpdChBQk9SVF9JU1BfQUNUSVZFLCAmdmhhLT5kcGNfZmxhZ3MpKQogCQkvKiBkb24ndCByZXNldCBDQU0gYmxvY2sgb24gcmVzZXQgKi8KIAkJcWxhODJ4eF93cl8zMihoYSwgUUxBODJYWF9ST01VU0JfR0xCX1NXX1JFU0VULCAweGZlZmZmZmZmKTsKIAllbHNlCiAJCXFsYTgyeHhfd3JfMzIoaGEsIFFMQTgyWFhfUk9NVVNCX0dMQl9TV19SRVNFVCwgMHhmZmZmZmZmZik7CisKKwkvKiByZXNldCBtcyAqLworCXZhbCA9IHFsYTgyeHhfcmRfMzIoaGEsIFFMQTgyWFhfQ1JCX1FEUl9ORVQgKyAweGU0KTsKKwl2YWwgfD0gKDEgPDwgMSk7CisJcWxhODJ4eF93cl8zMihoYSwgUUxBODJYWF9DUkJfUURSX05FVCArIDB4ZTQsIHZhbCk7CisJbXNsZWVwKDIwKTsKKworCS8qIHVucmVzZXQgbXMgKi8KKwl2YWwgPSBxbGE4Mnh4X3JkXzMyKGhhLCBRTEE4MlhYX0NSQl9RRFJfTkVUICsgMHhlNCk7CisJdmFsICY9IH4oMSA8PCAxKTsKKwlxbGE4Mnh4X3dyXzMyKGhhLCBRTEE4MlhYX0NSQl9RRFJfTkVUICsgMHhlNCwgdmFsKTsKKwltc2xlZXAoMjApOworCiAJcWxhODJ4eF9yZF8zMihoYSwgUUxBODJYWF9QQ0lFX1JFRyhQQ0lFX1NFTTJfVU5MT0NLKSk7CiAKIAkvKiBSZWFkIHRoZSBzaWduYXR1cmUgdmFsdWUgZnJvbSB0aGUgZmxhc2guCkBAIC0xMjEwLDI1ICsxMjU0LDYgQEAKIH0KIAogc3RhdGljIGludAotcWxhODJ4eF9jaGVja19mb3JfYmFkX3NwZChzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhKQotewotCXUzMiB2YWwgPSAwOwotCXZhbCA9IHFsYTgyeHhfcmRfMzIoaGEsIEJPT1RfTE9BREVSX0RJTU1fU1RBVFVTKTsKLQl2YWwgJj0gUUxBODJYWF9CT09UX0xPQURFUl9NTl9JU1NVRTsKLQlpZiAodmFsICYgUUxBODJYWF9QRUdfVFVORV9NTl9TUERfWkVST0VEKSB7Ci0JCXFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKLQkJCSJNZW1vcnkgRElNTSBTUEQgbm90IHByb2dyYW1tZWQuICIKLQkJCSIgQXNzdW1lZCB2YWxpZC5cbiIpOwotCQlyZXR1cm4gMTsKLQl9IGVsc2UgaWYgKHZhbCkgewotCQlxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCi0JCQkiTWVtb3J5IERJTU0gdHlwZSBpbmNvcnJlY3QuSW5mbzolMDhYLlxuIiwgdmFsKTsKLQkJcmV0dXJuIDI7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50CiBxbGE4Mnh4X3BjaV9tZW1fd3JpdGVfMk0oc3RydWN0IHFsYV9od19kYXRhICpoYSwKIAkJdTY0IG9mZiwgdm9pZCAqZGF0YSwgaW50IHNpemUpCiB7CkBAIC0xMjkzLDExICsxMzE4LDYgQEAKIAkJd29yZFtzdGFydHdvcmQrMV0gfD0gdG1wdyA+PiAoc3pbMF0gKiA4KTsKIAl9CiAKLQkvKgotCSAqIGRvbid0IGxvY2sgaGVyZSAtIHdyaXRlX3d4IGdldHMgdGhlIGxvY2sgaWYgZWFjaCB0aW1lCi0JICogd3JpdGVfbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5hZGFwdGVyX2xvY2ssIGZsYWdzKTsKLQkgKiBuZXR4ZW5fbmljX3BjaV9jaGFuZ2VfY3Jid2luZG93XzEyOE0oYWRhcHRlciwgMCk7Ci0JICovCiAJZm9yIChpID0gMDsgaSA8IGxvb3A7IGkrKykgewogCQl0ZW1wID0gb2ZmOCArIChpIDw8IHNoaWZ0X2Ftb3VudCk7CiAJCXFsYTgyeHhfd3JfMzIoaGEsIG1lbV9jcmIrTUlVX1RFU1RfQUdUX0FERFJfTE8sIHRlbXApOwpAQCAtMTM5OSwxMiArMTQxOSw2IEBACiAJb2ZmMFsxXSA9IDA7CiAJc3pbMV0gPSBzaXplIC0gc3pbMF07CiAKLQkvKgotCSAqIGRvbid0IGxvY2sgaGVyZSAtIHdyaXRlX3d4IGdldHMgdGhlIGxvY2sgaWYgZWFjaCB0aW1lCi0JICogd3JpdGVfbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5hZGFwdGVyX2xvY2ssIGZsYWdzKTsKLQkgKiBuZXR4ZW5fbmljX3BjaV9jaGFuZ2VfY3Jid2luZG93XzEyOE0oYWRhcHRlciwgMCk7Ci0JICovCi0KIAlmb3IgKGkgPSAwOyBpIDwgbG9vcDsgaSsrKSB7CiAJCXRlbXAgPSBvZmY4ICsgKGkgPDwgc2hpZnRfYW1vdW50KTsKIAkJcWxhODJ4eF93cl8zMihoYSwgbWVtX2NyYiArIE1JVV9URVNUX0FHVF9BRERSX0xPLCB0ZW1wKTsKQEAgLTE0MzcsMTEgKzE0NTEsNiBAQAogCQl9CiAJfQogCi0JLyoKLQkgKiBuZXR4ZW5fbmljX3BjaV9jaGFuZ2VfY3Jid2luZG93XzEyOE0oYWRhcHRlciwgMSk7Ci0JICogd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmFkYXB0ZXJfbG9jaywgZmxhZ3MpOwotCSAqLwotCiAJaWYgKGogPj0gTUFYX0NUTF9DSEVDSykKIAkJcmV0dXJuIC0xOwogCkBAIC0xODcyLDcgKzE4ODEsNiBAQAogCXFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKIAkgICAgIkNtZCBQZWcgaW5pdGlhbGl6YXRpb24gZmFpbGVkOiAweCV4LlxuIiwgdmFsKTsKIAotCXFsYTgyeHhfY2hlY2tfZm9yX2JhZF9zcGQoaGEpOwogCXZhbCA9IHFsYTgyeHhfcmRfMzIoaGEsIFFMQTgyWFhfUk9NVVNCX0dMQl9QRUdUVU5FX0RPTkUpOwogCXJlYWRfbG9jaygmaGEtPmh3X2xvY2spOwogCXFsYTgyeHhfd3JfMzIoaGEsIENSQl9DTURQRUdfU1RBVEUsIFBIQU5fSU5JVElBTElaRV9GQUlMRUQpOwpAQCAtMjM0Myw2ICsyMzUxLDE3IEBACiAJcWxhODJ4eF93cl8zMihoYSwgUUxBODJYWF9DUkJfRFJWX1NUQVRFLCBxc250X3N0YXRlKTsKIH0KIAordm9pZAorcWxhODJ4eF9jbGVhcl9xc250X3JlYWR5KHNjc2lfcWxhX2hvc3RfdCAqdmhhKQoreworCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSB2aGEtPmh3OworCXVpbnQzMl90IHFzbnRfc3RhdGU7CisKKwlxc250X3N0YXRlID0gcWxhODJ4eF9yZF8zMihoYSwgUUxBODJYWF9DUkJfRFJWX1NUQVRFKTsKKwlxc250X3N0YXRlICY9IH4oUUxBODJYWF9EUlZTVF9RU05UX1JEWSA8PCAoaGEtPnBvcnRudW0gKiA0KSk7CisJcWxhODJ4eF93cl8zMihoYSwgUUxBODJYWF9DUkJfRFJWX1NUQVRFLCBxc250X3N0YXRlKTsKK30KKwogc3RhdGljIGludAogcWxhODJ4eF9sb2FkX2Z3KHNjc2lfcWxhX2hvc3RfdCAqdmhhKQogewpAQCAtMjU0Miw3ICsyNTYxLDcgQEAKIAkJCSpjdXJfZHNkKysgPSBjcHVfdG9fbGUzMihMU0Qoc2xlX2RtYSkpOwogCQkJKmN1cl9kc2QrKyA9IGNwdV90b19sZTMyKE1TRChzbGVfZG1hKSk7CiAJCQkqY3VyX2RzZCsrID0gY3B1X3RvX2xlMzIoc2dfZG1hX2xlbihjdXJfc2VnKSk7Ci0JCQljdXJfc2VnKys7CisJCQljdXJfc2VnID0gc2dfbmV4dChjdXJfc2VnKTsKIAkJCWF2YWlsX2RzZHMtLTsKIAkJfQogCX0KQEAgLTMyNjEsNiArMzI4MCwxMDQgQEAKIAlyZXR1cm4gUUxBX1NVQ0NFU1M7CiB9CiAKKy8qCisqIHFsYTgyeHhfbmVlZF9xc250X2hhbmRsZXIKKyogICAgQ29kZSB0byBzdGFydCBxdWllc2NlbmNlIHNlcXVlbmNlCisqCisqIE5vdGU6CisqICAgICAgSURDIGxvY2sgbXVzdCBiZSBoZWxkIHVwb24gZW50cnkKKyoKKyogUmV0dXJuOiB2b2lkCisqLworCitzdGF0aWMgdm9pZAorcWxhODJ4eF9uZWVkX3FzbnRfaGFuZGxlcihzY3NpX3FsYV9ob3N0X3QgKnZoYSkKK3sKKwlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKKwl1aW50MzJfdCBkZXZfc3RhdGUsIGRydl9zdGF0ZSwgZHJ2X2FjdGl2ZTsKKwl1bnNpZ25lZCBsb25nIHJlc2V0X3RpbWVvdXQ7CisKKwlpZiAodmhhLT5mbGFncy5vbmxpbmUpIHsKKwkJLypCbG9jayBhbnkgZnVydGhlciBJL08gYW5kIHdhaXQgZm9yIHBlbmRpbmcgY21uZHMgdG8gY29tcGxldGUqLworCQlxbGE4Mnh4X3F1aWVzY2VudF9zdGF0ZV9jbGVhbnVwKHZoYSk7CisJfQorCisJLyogU2V0IHRoZSBxdWllc2NlbmNlIHJlYWR5IGJpdCAqLworCXFsYTgyeHhfc2V0X3FzbnRfcmVhZHkoaGEpOworCisJLyp3YWl0IGZvciAzMCBzZWNzIGZvciBvdGhlciBmdW5jdGlvbnMgdG8gYWNrICovCisJcmVzZXRfdGltZW91dCA9IGppZmZpZXMgKyAoMzAgKiBIWik7CisKKwlkcnZfc3RhdGUgPSBxbGE4Mnh4X3JkXzMyKGhhLCBRTEE4MlhYX0NSQl9EUlZfU1RBVEUpOworCWRydl9hY3RpdmUgPSBxbGE4Mnh4X3JkXzMyKGhhLCBRTEE4MlhYX0NSQl9EUlZfQUNUSVZFKTsKKwkvKiBJdHMgMiB0aGF0IGlzIHdyaXR0ZW4gd2hlbiBxc250IGlzIGFja2VkLCBtb3Zpbmcgb25lIGJpdCAqLworCWRydl9hY3RpdmUgPSBkcnZfYWN0aXZlIDw8IDB4MDE7CisKKwl3aGlsZSAoZHJ2X3N0YXRlICE9IGRydl9hY3RpdmUpIHsKKworCQlpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLCByZXNldF90aW1lb3V0KSkgeworCQkJLyogcXVpZXNjZW5jZSB0aW1lb3V0LCBvdGhlciBmdW5jdGlvbnMgZGlkbid0IGFjaworCQkJICogY2hhbmdpbmcgdGhlIHN0YXRlIHRvIERFVl9SRUFEWQorCQkJICovCisJCQlxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCisJCQkgICAgIiVzOiBRVUlFU0NFTlQgVElNRU9VVFxuIiwgUUxBMlhYWF9EUklWRVJfTkFNRSk7CisJCQlxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCisJCQkgICAgIkRSVl9BQ1RJVkU6JWQgRFJWX1NUQVRFOiVkXG4iLCBkcnZfYWN0aXZlLAorCQkJICAgIGRydl9zdGF0ZSk7CisJCQlxbGE4Mnh4X3dyXzMyKGhhLCBRTEE4MlhYX0NSQl9ERVZfU1RBVEUsCisJCQkJCQlRTEE4MlhYX0RFVl9SRUFEWSk7CisJCQlxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCisJCQkgICAgIkhXIFN0YXRlOiBERVZfUkVBRFlcbiIpOworCQkJcWxhODJ4eF9pZGNfdW5sb2NrKGhhKTsKKwkJCXFsYTJ4MDBfcGVyZm9ybV9sb29wX3Jlc3luYyh2aGEpOworCQkJcWxhODJ4eF9pZGNfbG9jayhoYSk7CisKKwkJCXFsYTgyeHhfY2xlYXJfcXNudF9yZWFkeSh2aGEpOworCQkJcmV0dXJuOworCQl9CisKKwkJcWxhODJ4eF9pZGNfdW5sb2NrKGhhKTsKKwkJbXNsZWVwKDEwMDApOworCQlxbGE4Mnh4X2lkY19sb2NrKGhhKTsKKworCQlkcnZfc3RhdGUgPSBxbGE4Mnh4X3JkXzMyKGhhLCBRTEE4MlhYX0NSQl9EUlZfU1RBVEUpOworCQlkcnZfYWN0aXZlID0gcWxhODJ4eF9yZF8zMihoYSwgUUxBODJYWF9DUkJfRFJWX0FDVElWRSk7CisJCWRydl9hY3RpdmUgPSBkcnZfYWN0aXZlIDw8IDB4MDE7CisJfQorCWRldl9zdGF0ZSA9IHFsYTgyeHhfcmRfMzIoaGEsIFFMQTgyWFhfQ1JCX0RFVl9TVEFURSk7CisJLyogZXZlcnlvbmUgYWNrZWQgc28gc2V0IHRoZSBzdGF0ZSB0byBERVZfUVVJRVNDRU5DRSAqLworCWlmIChkZXZfc3RhdGUgPT0gUUxBODJYWF9ERVZfTkVFRF9RVUlFU0NFTlQpIHsKKwkJcWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLCAiSFcgU3RhdGU6IERFVl9RVUlFU0NFTlRcbiIpOworCQlxbGE4Mnh4X3dyXzMyKGhhLCBRTEE4MlhYX0NSQl9ERVZfU1RBVEUsIFFMQTgyWFhfREVWX1FVSUVTQ0VOVCk7CisJfQorfQorCisvKgorKiBxbGE4Mnh4X3dhaXRfZm9yX3N0YXRlX2NoYW5nZQorKiAgICBXYWl0IGZvciBkZXZpY2Ugc3RhdGUgdG8gY2hhbmdlIGZyb20gZ2l2ZW4gY3VycmVudCBzdGF0ZQorKgorKiBOb3RlOgorKiAgICAgSURDIGxvY2sgbXVzdCBub3QgYmUgaGVsZCB1cG9uIGVudHJ5CisqCisqIFJldHVybjoKKyogICAgQ2hhbmdlZCBkZXZpY2Ugc3RhdGUuCisqLwordWludDMyX3QKK3FsYTgyeHhfd2FpdF9mb3Jfc3RhdGVfY2hhbmdlKHNjc2lfcWxhX2hvc3RfdCAqdmhhLCB1aW50MzJfdCBjdXJyX3N0YXRlKQoreworCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSB2aGEtPmh3OworCXVpbnQzMl90IGRldl9zdGF0ZTsKKworCWRvIHsKKwkJbXNsZWVwKDEwMDApOworCQlxbGE4Mnh4X2lkY19sb2NrKGhhKTsKKwkJZGV2X3N0YXRlID0gcWxhODJ4eF9yZF8zMihoYSwgUUxBODJYWF9DUkJfREVWX1NUQVRFKTsKKwkJcWxhODJ4eF9pZGNfdW5sb2NrKGhhKTsKKwl9IHdoaWxlIChkZXZfc3RhdGUgPT0gY3Vycl9zdGF0ZSk7CisKKwlyZXR1cm4gZGV2X3N0YXRlOworfQorCiBzdGF0aWMgdm9pZAogcWxhODJ4eF9kZXZfZmFpbGVkX2hhbmRsZXIoc2NzaV9xbGFfaG9zdF90ICp2aGEpCiB7CkBAIC0zNDM5LDE1ICszNTU2LDI4IEBACiAJCQlxbGE4Mnh4X2lkY19sb2NrKGhhKTsKIAkJCWJyZWFrOwogCQljYXNlIFFMQTgyWFhfREVWX05FRURfUkVTRVQ6Ci0JCQlpZiAoIXFsMnhkb250cmVzZXRoYmEpCi0JCQkJcWxhODJ4eF9uZWVkX3Jlc2V0X2hhbmRsZXIodmhhKTsKKwkJCXFsYTgyeHhfbmVlZF9yZXNldF9oYW5kbGVyKHZoYSk7CiAJCQlicmVhazsKIAkJY2FzZSBRTEE4MlhYX0RFVl9ORUVEX1FVSUVTQ0VOVDoKLQkJCXFsYTgyeHhfc2V0X3FzbnRfcmVhZHkoaGEpOworCQkJcWxhODJ4eF9uZWVkX3FzbnRfaGFuZGxlcih2aGEpOworCQkJLyogUmVzZXQgdGltZW91dCB2YWx1ZSBhZnRlciBxdWllc2NlbmNlIGhhbmRsZXIgKi8KKwkJCWRldl9pbml0X3RpbWVvdXQgPSBqaWZmaWVzICsgKGhhLT5ueF9kZXZfaW5pdF90aW1lb3V0XAorCQkJCQkJCSAqIEhaKTsKKwkJCWJyZWFrOwogCQljYXNlIFFMQTgyWFhfREVWX1FVSUVTQ0VOVDoKKwkJCS8qIE93bmVyIHdpbGwgZXhpdCBhbmQgb3RoZXIgd2lsbCB3YWl0IGZvciB0aGUgc3RhdGUKKwkJCSAqIHRvIGdldCBjaGFuZ2VkCisJCQkgKi8KKwkJCWlmIChoYS0+ZmxhZ3MucXVpZXNjZV9vd25lcikKKwkJCQlnb3RvIGV4aXQ7CisKIAkJCXFsYTgyeHhfaWRjX3VubG9jayhoYSk7CiAJCQltc2xlZXAoMTAwMCk7CiAJCQlxbGE4Mnh4X2lkY19sb2NrKGhhKTsKKworCQkJLyogUmVzZXQgdGltZW91dCB2YWx1ZSBhZnRlciBxdWllc2NlbmNlIGhhbmRsZXIgKi8KKwkJCWRldl9pbml0X3RpbWVvdXQgPSBqaWZmaWVzICsgKGhhLT5ueF9kZXZfaW5pdF90aW1lb3V0XAorCQkJCQkJCSAqIEhaKTsKIAkJCWJyZWFrOwogCQljYXNlIFFMQTgyWFhfREVWX0ZBSUxFRDoKIAkJCXFsYTgyeHhfZGV2X2ZhaWxlZF9oYW5kbGVyKHZoYSk7CkBAIC0zNDkwLDYgKzM2MjAsMTMgQEAKIAkJCQkJJmhhLT5tYnhfY21kX2ZsYWdzKSkKIAkJCQkJY29tcGxldGUoJmhhLT5tYnhfaW50cl9jb21wKTsKIAkJCX0KKwkJfSBlbHNlIGlmIChkZXZfc3RhdGUgPT0gUUxBODJYWF9ERVZfTkVFRF9RVUlFU0NFTlQgJiYKKwkJCSF0ZXN0X2JpdChJU1BfUVVJRVNDRV9ORUVERUQsICZ2aGEtPmRwY19mbGFncykpIHsKKwkJCURFQlVHKHFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKKwkJCQkic2NzaSglbGQpICVzIC0gZGV0ZWN0ZWQgcXVpZXNjZW5jZSBuZWVkZWRcbiIsCisJCQkJdmhhLT5ob3N0X25vLCBfX2Z1bmNfXykpOworCQkJc2V0X2JpdChJU1BfUVVJRVNDRV9ORUVERUQsICZ2aGEtPmRwY19mbGFncyk7CisJCQlxbGEyeHh4X3dha2VfZHBjKHZoYSk7CiAJCX0gZWxzZSB7CiAJCQlxbGE4Mnh4X2NoZWNrX2Z3X2FsaXZlKHZoYSk7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9ueC5oIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX254LmgKaW5kZXggNTFlYzBjNS4uZWQ1ODgzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX254LmgKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX254LmgKQEAgLTUyMyw4ICs1MjMsNiBAQAogIyBkZWZpbmUgUUxBODJYWF9DQU1fUkFNX0JBU0UJCShRTEE4MlhYX0NSQl9DQU0gKyAweDAyMDAwKQogIyBkZWZpbmUgUUxBODJYWF9DQU1fUkFNKHJlZykJCShRTEE4MlhYX0NBTV9SQU1fQkFTRSArIChyZWcpKQogCi0jZGVmaW5lIFFMQTgyWFhfUEVHX1RVTkVfTU5fU1BEX1pFUk9FRAkweDgwMDAwMDAwCi0jZGVmaW5lIFFMQTgyWFhfQk9PVF9MT0FERVJfTU5fSVNTVUUJMHhmZjAwZmZmZgogI2RlZmluZSBRTEE4MlhYX1BPUlRfTU9ERV9BRERSCQkoUUxBODJYWF9DQU1fUkFNKDB4MjQpKQogI2RlZmluZSBRTEE4MlhYX1BFR19IQUxUX1NUQVRVUzEJKFFMQTgyWFhfQ0FNX1JBTSgweGE4KSkKICNkZWZpbmUgUUxBODJYWF9QRUdfSEFMVF9TVEFUVVMyCShRTEE4MlhYX0NBTV9SQU0oMHhhYykpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9vcy5jCmluZGV4IDJjMDg3NmMuLmMxOTRjMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9vcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9vcy5jCkBAIC0zNywxMiArMzcsMTIgQEAKIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqY3R4X2NhY2hlcDsKIAogaW50IHFsMnhsb2dpbnRpbWVvdXQgPSAyMDsKLW1vZHVsZV9wYXJhbShxbDJ4bG9naW50aW1lb3V0LCBpbnQsIFNfSVJVR098U19JUlVTUik7Cittb2R1bGVfcGFyYW0ocWwyeGxvZ2ludGltZW91dCwgaW50LCBTX0lSVUdPKTsKIE1PRFVMRV9QQVJNX0RFU0MocWwyeGxvZ2ludGltZW91dCwKIAkJIkxvZ2luIHRpbWVvdXQgdmFsdWUgaW4gc2Vjb25kcy4iKTsKIAogaW50IHFscG9ydF9kb3duX3JldHJ5OwotbW9kdWxlX3BhcmFtKHFscG9ydF9kb3duX3JldHJ5LCBpbnQsIFNfSVJVR098U19JUlVTUik7Cittb2R1bGVfcGFyYW0ocWxwb3J0X2Rvd25fcmV0cnksIGludCwgU19JUlVHTyk7CiBNT0RVTEVfUEFSTV9ERVNDKHFscG9ydF9kb3duX3JldHJ5LAogCQkiTWF4aW11bSBudW1iZXIgb2YgY29tbWFuZCByZXRyaWVzIHRvIGEgcG9ydCB0aGF0IHJldHVybnMgIgogCQkiYSBQT1JULURPV04gc3RhdHVzLiIpOwpAQCAtNTUsMTIgKzU1LDEyIEBACiAJCSJEZWZhdWx0IGlzIDAgLSBubyBQTE9HSS4gMSAtIHBlcmZvbSBQTE9HSS4iKTsKIAogaW50IHFsMnhsb2dpbnJldHJ5Y291bnQgPSAwOwotbW9kdWxlX3BhcmFtKHFsMnhsb2dpbnJldHJ5Y291bnQsIGludCwgU19JUlVHT3xTX0lSVVNSKTsKK21vZHVsZV9wYXJhbShxbDJ4bG9naW5yZXRyeWNvdW50LCBpbnQsIFNfSVJVR08pOwogTU9EVUxFX1BBUk1fREVTQyhxbDJ4bG9naW5yZXRyeWNvdW50LAogCQkiU3BlY2lmeSBhbiBhbHRlcm5hdGUgdmFsdWUgZm9yIHRoZSBOVlJBTSBsb2dpbiByZXRyeSBjb3VudC4iKTsKIAogaW50IHFsMnhhbGxvY2Z3ZHVtcCA9IDE7Ci1tb2R1bGVfcGFyYW0ocWwyeGFsbG9jZndkdW1wLCBpbnQsIFNfSVJVR098U19JUlVTUik7Cittb2R1bGVfcGFyYW0ocWwyeGFsbG9jZndkdW1wLCBpbnQsIFNfSVJVR08pOwogTU9EVUxFX1BBUk1fREVTQyhxbDJ4YWxsb2Nmd2R1bXAsCiAJCSJPcHRpb24gdG8gZW5hYmxlIGFsbG9jYXRpb24gb2YgbWVtb3J5IGZvciBhIGZpcm13YXJlIGR1bXAgIgogCQkiZHVyaW5nIEhCQSBpbml0aWFsaXphdGlvbi4gIE1lbW9yeSBhbGxvY2F0aW9uIHJlcXVpcmVtZW50cyAiCkBAIC03Myw3ICs3Myw3IEBACiAJCSJEZWZhdWx0IGlzIDAgLSBubyBsb2dnaW5nLiAxIC0gbG9nIGVycm9ycy4iKTsKIAogaW50IHFsMnhzaGlmdGN0b25kc2QgPSA2OwotbW9kdWxlX3BhcmFtKHFsMnhzaGlmdGN0b25kc2QsIGludCwgU19JUlVHT3xTX0lSVVNSKTsKK21vZHVsZV9wYXJhbShxbDJ4c2hpZnRjdG9uZHNkLCBpbnQsIFNfSVJVR08pOwogTU9EVUxFX1BBUk1fREVTQyhxbDJ4c2hpZnRjdG9uZHNkLAogCQkiU2V0IHRvIGNvbnRyb2wgc2hpZnRpbmcgb2YgY29tbWFuZCB0eXBlIHByb2Nlc3NpbmcgIgogCQkiYmFzZWQgb24gdG90YWwgbnVtYmVyIG9mIFNHIGVsZW1lbnRzLiIpOwpAQCAtODEsNyArODEsNyBAQAogc3RhdGljIHZvaWQgcWxhMngwMF9mcmVlX2RldmljZShzY3NpX3FsYV9ob3N0X3QgKik7CiAKIGludCBxbDJ4ZmRtaWVuYWJsZT0xOwotbW9kdWxlX3BhcmFtKHFsMnhmZG1pZW5hYmxlLCBpbnQsIFNfSVJVR098U19JUlVTUik7Cittb2R1bGVfcGFyYW0ocWwyeGZkbWllbmFibGUsIGludCwgU19JUlVHTyk7CiBNT0RVTEVfUEFSTV9ERVNDKHFsMnhmZG1pZW5hYmxlLAogCQkiRW5hYmxlcyBGRE1JIHJlZ2lzdHJhdGlvbnMuICIKIAkJIjAgLSBubyBGRE1JLiBEZWZhdWx0IGlzIDEgLSBwZXJmb3JtIEZETUkuIik7CkBAIC0xMDYsMjcgKzEwNiwyNyBAQAogCQkiIERlZmF1bHQgaXMgMCAtIEVycm9yIGlzb2xhdGlvbiBkaXNhYmxlZCwgMSAtIEVuYWJsZSBpdCIpOwogCiBpbnQgcWwyeGlpZG1hZW5hYmxlPTE7Ci1tb2R1bGVfcGFyYW0ocWwyeGlpZG1hZW5hYmxlLCBpbnQsIFNfSVJVR098U19JUlVTUik7Cittb2R1bGVfcGFyYW0ocWwyeGlpZG1hZW5hYmxlLCBpbnQsIFNfSVJVR08pOwogTU9EVUxFX1BBUk1fREVTQyhxbDJ4aWlkbWFlbmFibGUsCiAJCSJFbmFibGVzIGlJRE1BIHNldHRpbmdzICIKIAkJIkRlZmF1bHQgaXMgMSAtIHBlcmZvcm0gaUlETUEuIDAgLSBubyBpSURNQS4iKTsKIAogaW50IHFsMnhtYXhxdWV1ZXMgPSAxOwotbW9kdWxlX3BhcmFtKHFsMnhtYXhxdWV1ZXMsIGludCwgU19JUlVHT3xTX0lSVVNSKTsKK21vZHVsZV9wYXJhbShxbDJ4bWF4cXVldWVzLCBpbnQsIFNfSVJVR08pOwogTU9EVUxFX1BBUk1fREVTQyhxbDJ4bWF4cXVldWVzLAogCQkiRW5hYmxlcyBNUSBzZXR0aW5ncyAiCiAJCSJEZWZhdWx0IGlzIDEgZm9yIHNpbmdsZSBxdWV1ZS4gU2V0IGl0IHRvIG51bWJlciAiCiAJCSJvZiBxdWV1ZXMgaW4gTVEgbW9kZS4iKTsKIAogaW50IHFsMnhtdWx0aXF1ZV90YWc7Ci1tb2R1bGVfcGFyYW0ocWwyeG11bHRpcXVlX3RhZywgaW50LCBTX0lSVUdPfFNfSVJVU1IpOworbW9kdWxlX3BhcmFtKHFsMnhtdWx0aXF1ZV90YWcsIGludCwgU19JUlVHTyk7CiBNT0RVTEVfUEFSTV9ERVNDKHFsMnhtdWx0aXF1ZV90YWcsCiAJCSJFbmFibGVzIENQVSBhZmZpbml0eSBzZXR0aW5ncyBmb3IgdGhlIGRyaXZlciAiCiAJCSJEZWZhdWx0IGlzIDAgZm9yIG5vIGFmZmluaXR5IG9mIHJlcXVlc3QgYW5kIHJlc3BvbnNlIElPLiAiCiAJCSJTZXQgaXQgdG8gMSB0byB0dXJuIG9uIHRoZSBjcHUgYWZmaW5pdHkuIik7CiAKIGludCBxbDJ4Zndsb2FkYmluOwotbW9kdWxlX3BhcmFtKHFsMnhmd2xvYWRiaW4sIGludCwgU19JUlVHT3xTX0lSVVNSKTsKK21vZHVsZV9wYXJhbShxbDJ4Zndsb2FkYmluLCBpbnQsIFNfSVJVR08pOwogTU9EVUxFX1BBUk1fREVTQyhxbDJ4Zndsb2FkYmluLAogCQkiT3B0aW9uIHRvIHNwZWNpZnkgbG9jYXRpb24gZnJvbSB3aGljaCB0byBsb2FkIElTUCBmaXJtd2FyZTpcbiIKIAkJIiAyIC0tIGxvYWQgZmlybXdhcmUgdmlhIHRoZSByZXF1ZXN0X2Zpcm13YXJlKCkgKGhvdHBsdWcpXG4iCkBAIC0xMzUsMzkgKzEzNSwzMiBAQAogCQkiIDAgLS0gdXNlIGRlZmF1bHQgc2VtYW50aWNzLlxuIik7CiAKIGludCBxbDJ4ZXRzZW5hYmxlOwotbW9kdWxlX3BhcmFtKHFsMnhldHNlbmFibGUsIGludCwgU19JUlVHT3xTX0lSVVNSKTsKK21vZHVsZV9wYXJhbShxbDJ4ZXRzZW5hYmxlLCBpbnQsIFNfSVJVR08pOwogTU9EVUxFX1BBUk1fREVTQyhxbDJ4ZXRzZW5hYmxlLAogCQkiRW5hYmxlcyBmaXJtd2FyZSBFVFMgYnVyc3QuIgogCQkiRGVmYXVsdCBpcyAwIC0gc2tpcCBFVFMgZW5hYmxlbWVudC4iKTsKIAogaW50IHFsMnhkYndyID0gMTsKLW1vZHVsZV9wYXJhbShxbDJ4ZGJ3ciwgaW50LCBTX0lSVUdPfFNfSVJVU1IpOworbW9kdWxlX3BhcmFtKHFsMnhkYndyLCBpbnQsIFNfSVJVR08pOwogTU9EVUxFX1BBUk1fREVTQyhxbDJ4ZGJ3ciwKIAkiT3B0aW9uIHRvIHNwZWNpZnkgc2NoZW1lIGZvciByZXF1ZXN0IHF1ZXVlIHBvc3RpbmdcbiIKIAkiIDAgLS0gUmVndWxhciBkb29yYmVsbC5cbiIKIAkiIDEgLS0gQ0FNUkFNIGRvb3JiZWxsIChmYXN0ZXIpLlxuIik7CiAKLWludCBxbDJ4ZG9udHJlc2V0aGJhOwotbW9kdWxlX3BhcmFtKHFsMnhkb250cmVzZXRoYmEsIGludCwgU19JUlVHT3xTX0lSVVNSKTsKLU1PRFVMRV9QQVJNX0RFU0MocWwyeGRvbnRyZXNldGhiYSwKLQkiT3B0aW9uIHRvIHNwZWNpZnkgcmVzZXQgYmVoYXZpb3VyXG4iCi0JIiAwIChEZWZhdWx0KSAtLSBSZXNldCBvbiBmYWlsdXJlLlxuIgotCSIgMSAtLSBEbyBub3QgcmVzZXQgb24gZmFpbHVyZS5cbiIpOwotCiBpbnQgcWwyeHRhcmdldHJlc2V0ID0gMTsKLW1vZHVsZV9wYXJhbShxbDJ4dGFyZ2V0cmVzZXQsIGludCwgU19JUlVHT3xTX0lSVVNSKTsKK21vZHVsZV9wYXJhbShxbDJ4dGFyZ2V0cmVzZXQsIGludCwgU19JUlVHTyk7CiBNT0RVTEVfUEFSTV9ERVNDKHFsMnh0YXJnZXRyZXNldCwKIAkJICJFbmFibGUgdGFyZ2V0IHJlc2V0LiIKIAkJICJEZWZhdWx0IGlzIDEgLSB1c2UgaHcgZGVmYXVsdHMuIik7CiAKIGludCBxbDJ4Z2ZmaWRlbmFibGU7Ci1tb2R1bGVfcGFyYW0ocWwyeGdmZmlkZW5hYmxlLCBpbnQsIFNfSVJVR098U19JUlVTUik7Cittb2R1bGVfcGFyYW0ocWwyeGdmZmlkZW5hYmxlLCBpbnQsIFNfSVJVR08pOwogTU9EVUxFX1BBUk1fREVTQyhxbDJ4Z2ZmaWRlbmFibGUsCiAJCSJFbmFibGVzIEdGRl9JRCBjaGVja3Mgb2YgcG9ydCB0eXBlLiAiCiAJCSJEZWZhdWx0IGlzIDAgLSBEbyBub3QgdXNlIEdGRl9JRCBpbmZvcm1hdGlvbi4iKTsKIAogaW50IHFsMnhhc3luY3RtZmVuYWJsZTsKLW1vZHVsZV9wYXJhbShxbDJ4YXN5bmN0bWZlbmFibGUsIGludCwgU19JUlVHT3xTX0lSVVNSKTsKK21vZHVsZV9wYXJhbShxbDJ4YXN5bmN0bWZlbmFibGUsIGludCwgU19JUlVHTyk7CiBNT0RVTEVfUEFSTV9ERVNDKHFsMnhhc3luY3RtZmVuYWJsZSwKIAkJIkVuYWJsZXMgaXNzdWUgb2YgVE0gSU9DQnMgYXN5bmNocm9ub3VzbHkgdmlhIElPQ0IgbWVjaGFuaXNtIgogCQkiRGVmYXVsdCBpcyAwIC0gSXNzdWUgVE0gSU9DQnMgdmlhIG1haWxib3ggbWVjaGFuaXNtLiIpOwpAQCAtMjM3MSw3ICsyMzY0LDcgQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZoYSwgJmhhLT52cF9saXN0LCBsaXN0KSB7CiAJCWF0b21pY19pbmMoJnZoYS0+dnJlZl9jb3VudCk7CiAKLQkJaWYgKHZoYSAmJiB2aGEtPmZjX3Zwb3J0KSB7CisJCWlmICh2aGEtPmZjX3Zwb3J0KSB7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoYS0+dnBvcnRfc2xvY2ssIGZsYWdzKTsKIAogCQkJZmNfdnBvcnRfdGVybWluYXRlKHZoYS0+ZmNfdnBvcnQpOwpAQCAtMzM4Niw2ICszMzc5LDIxIEBACiAJCQljbGVhcl9iaXQoRkNQT1JUX1VQREFURV9ORUVERUQsICZiYXNlX3ZoYS0+ZHBjX2ZsYWdzKTsKIAkJfQogCisJCWlmICh0ZXN0X2JpdChJU1BfUVVJRVNDRV9ORUVERUQsICZiYXNlX3ZoYS0+ZHBjX2ZsYWdzKSkgeworCQkJREVCVUcocHJpbnRrKEtFUk5fSU5GTyAic2NzaSglbGQpOiBkcGM6IHNjaGVkICIKKwkJCSAgICAicWxhMngwMF9xdWllc2NlX25lZWRlZCBoYSA9ICVwXG4iLAorCQkJICAgIGJhc2VfdmhhLT5ob3N0X25vLCBoYSkpOworCQkJcWxhODJ4eF9kZXZpY2Vfc3RhdGVfaGFuZGxlcihiYXNlX3ZoYSk7CisJCQljbGVhcl9iaXQoSVNQX1FVSUVTQ0VfTkVFREVELCAmYmFzZV92aGEtPmRwY19mbGFncyk7CisJCQlpZiAoIWhhLT5mbGFncy5xdWllc2NlX293bmVyKSB7CisJCQkJcWxhMngwMF9wZXJmb3JtX2xvb3BfcmVzeW5jKGJhc2VfdmhhKTsKKworCQkJCXFsYTgyeHhfaWRjX2xvY2soaGEpOworCQkJCXFsYTgyeHhfY2xlYXJfcXNudF9yZWFkeShiYXNlX3ZoYSk7CisJCQkJcWxhODJ4eF9pZGNfdW5sb2NrKGhhKTsKKwkJCX0KKwkJfQorCiAJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUkVTRVRfTUFSS0VSX05FRURFRCwKIAkJCQkJCQkmYmFzZV92aGEtPmRwY19mbGFncykgJiYKIAkJICAgICghKHRlc3RfYW5kX3NldF9iaXQoUkVTRVRfQUNUSVZFLCAmYmFzZV92aGEtPmRwY19mbGFncykpKSkgewpAQCAtMzU4OSwxMyArMzU5NywxNiBAQAogCQlyZXR1cm47CiAJfQogCi0JaWYgKElTX1FMQTgyWFgoaGEpKQotCQlxbGE4Mnh4X3dhdGNoZG9nKHZoYSk7Ci0KIAkvKiBIYXJkd2FyZSByZWFkIHRvIHJhaXNlIHBlbmRpbmcgRUVIIGVycm9ycyBkdXJpbmcgbWFpbGJveCB3YWl0cy4gKi8KIAlpZiAoIXBjaV9jaGFubmVsX29mZmxpbmUoaGEtPnBkZXYpKQogCQlwY2lfcmVhZF9jb25maWdfd29yZChoYS0+cGRldiwgUENJX1ZFTkRPUl9JRCwgJncpOwogCisJaWYgKElTX1FMQTgyWFgoaGEpKSB7CisJCWlmICh0ZXN0X2JpdChJU1BfUVVJRVNDRV9ORUVERUQsICZ2aGEtPmRwY19mbGFncykpCisJCQlzdGFydF9kcGMrKzsKKwkJcWxhODJ4eF93YXRjaGRvZyh2aGEpOworCX0KKwogCS8qIExvb3AgZG93biBoYW5kbGVyLiAqLwogCWlmIChhdG9taWNfcmVhZCgmdmhhLT5sb29wX2Rvd25fdGltZXIpID4gMCAmJgogCSAgICAhKHRlc3RfYml0KEFCT1JUX0lTUF9BQ1RJVkUsICZ2aGEtPmRwY19mbGFncykpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfc3VwLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfc3VwLmMKaW5kZXggNzZkZTk1Ny4uMjIwNzA2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX3N1cC5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9zdXAuYwpAQCAtNjY5LDYgKzY2OSwxMyBAQAogCQlkZWYgPSAxOwogCWVsc2UgaWYgKElTX1FMQTgxWFgoaGEpKQogCQlkZWYgPSAyOworCisJLyogQXNzaWduIEZDUCBwcmlvIHJlZ2lvbiBzaW5jZSBvbGRlciBhZGFwdGVycyBtYXkgbm90IGhhdmUgRkxULCBvcgorCSAgIEZDUCBwcmlvIHJlZ2lvbiBpbiBpdCdzIEZMVC4KKwkgKi8KKwloYS0+Zmx0X3JlZ2lvbl9mY3BfcHJpbyA9IGhhLT5mbGFncy5wb3J0MCA/CisJICAgIGZjcF9wcmlvX2NmZzBbZGVmXSA6IGZjcF9wcmlvX2NmZzFbZGVmXTsKKwogCWhhLT5mbHRfcmVnaW9uX2ZsdCA9IGZsdF9hZGRyOwogCXdwdHIgPSAodWludDE2X3QgKilyZXEtPnJpbmc7CiAJZmx0ID0gKHN0cnVjdCBxbGFfZmx0X2hlYWRlciAqKXJlcS0+cmluZzsKQEAgLTY5NiwxMCArNzAzLDYgQEAKIAkJZ290byBub19mbGFzaF9kYXRhOwogCX0KIAotCS8qIEFzc2lnbiBGQ1AgcHJpbyByZWdpb24gc2luY2Ugb2xkZXIgRkxUJ3MgbWF5IG5vdCBoYXZlIGl0ICovCi0JaGEtPmZsdF9yZWdpb25fZmNwX3ByaW8gPSBoYS0+ZmxhZ3MucG9ydDAgPwotCSAgICBmY3BfcHJpb19jZmcwW2RlZl0gOiBmY3BfcHJpb19jZmcxW2RlZl07Ci0KIAlsb2MgPSBsb2NhdGlvbnNbMV07CiAJY250ID0gbGUxNl90b19jcHUoZmx0LT5sZW5ndGgpIC8gc2l6ZW9mKHN0cnVjdCBxbGFfZmx0X3JlZ2lvbik7CiAJZm9yICggOyBjbnQ7IGNudC0tLCByZWdpb24rKykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X2RiZy5jIGIvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X2RiZy5jCmluZGV4IGVkY2YwNDguLmFmNjJjM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9kYmcuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfZGJnLmMKQEAgLTEsNiArMSw2IEBACiAvKgogICogUUxvZ2ljIGlTQ1NJIEhCQSBEcml2ZXIKLSAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAwNiBRTG9naWMgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAxMCBRTG9naWMgQ29ycG9yYXRpb24KICAqCiAgKiBTZWUgTElDRU5TRS5xbGE0eHh4IGZvciBjb3B5cmlnaHQgYW5kIGxpY2Vuc2luZyBkZXRhaWxzLgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfZGJnLmggYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfZGJnLmgKaW5kZXggZDg2MWMzYi4uYWJkODM2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X2RiZy5oCisrKyBiL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9kYmcuaApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBRTG9naWMgaVNDU0kgSEJBIERyaXZlcgotICogQ29weXJpZ2h0IChjKSAgMjAwMy0yMDA2IFFMb2dpYyBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAgMjAwMy0yMDEwIFFMb2dpYyBDb3Jwb3JhdGlvbgogICoKICAqIFNlZSBMSUNFTlNFLnFsYTR4eHggZm9yIGNvcHlyaWdodCBhbmQgbGljZW5zaW5nIGRldGFpbHMuCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9kZWYuaCBiL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9kZWYuaAppbmRleCAwZjNiZmMzLi4yZmMwMDQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfZGVmLmgKKysrIGIvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X2RlZi5oCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIFFMb2dpYyBpU0NTSSBIQkEgRHJpdmVyCi0gKiBDb3B5cmlnaHQgKGMpICAyMDAzLTIwMDYgUUxvZ2ljIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpICAyMDAzLTIwMTAgUUxvZ2ljIENvcnBvcmF0aW9uCiAgKgogICogU2VlIExJQ0VOU0UucWxhNHh4eCBmb3IgY29weXJpZ2h0IGFuZCBsaWNlbnNpbmcgZGV0YWlscy4KICAqLwpAQCAtMTc1LDcgKzE3NSw3IEBACiBzdHJ1Y3Qgc3JiIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CS8qICg4KQkgKi8KIAlzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGE7CS8qIEhBIHRoZSBTUCBpcyBxdWV1ZWQgb24gKi8KLQlzdHJ1Y3QgZGRiX2VudHJ5CSpkZGI7CisJc3RydWN0IGRkYl9lbnRyeSAqZGRiOwogCXVpbnQxNl90IGZsYWdzOwkJLyogKDEpIFN0YXR1cyBmbGFncy4gKi8KIAogI2RlZmluZSBTUkJfRE1BX1ZBTElECQlCSVRfMwkvKiBETUEgQnVmZmVyIG1hcHBlZC4gKi8KQEAgLTE5MSw3ICsxOTEsNiBAQAogCXN0cnVjdCBzY3NpX2NtbmQgKmNtZDsJLyogKDQpIFNDU0kgY29tbWFuZCBibG9jayAqLwogCWRtYV9hZGRyX3QgZG1hX2hhbmRsZTsJLyogKDQpIGZvciB1bm1hcCBvZiBzaW5nbGUgdHJhbnNmZXJzICovCiAJc3RydWN0IGtyZWYgc3JiX3JlZjsJLyogcmVmZXJlbmNlIGNvdW50IGZvciB0aGlzIHNyYiAqLwotCXVpbnQzMl90IGZ3X2RkYl9pbmRleDsKIAl1aW50OF90IGVycl9pZDsJCS8qIGVycm9yIGlkICovCiAjZGVmaW5lIFNSQl9FUlJfUE9SVAkgICAxCS8qIFJlcXVlc3QgZmFpbGVkIGJlY2F1c2UgInBvcnQgZG93biIgKi8KICNkZWZpbmUgU1JCX0VSUl9MT09QCSAgIDIJLyogUmVxdWVzdCBmYWlsZWQgYmVjYXVzZSAibG9vcCBkb3duIiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X2Z3LmggYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfZncuaAppbmRleCA1ZTc1N2Q3Li5jMTk4NTc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfZncuaAorKysgYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfZncuaApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBRTG9naWMgaVNDU0kgSEJBIERyaXZlcgotICogQ29weXJpZ2h0IChjKSAgMjAwMy0yMDA2IFFMb2dpYyBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAgMjAwMy0yMDEwIFFMb2dpYyBDb3Jwb3JhdGlvbgogICoKICAqIFNlZSBMSUNFTlNFLnFsYTR4eHggZm9yIGNvcHlyaWdodCBhbmQgbGljZW5zaW5nIGRldGFpbHMuCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9nbGJsLmggYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfZ2xibC5oCmluZGV4IDY1NzVhNDcuLjhmYWQ5OWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9nbGJsLmgKKysrIGIvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X2dsYmwuaApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBRTG9naWMgaVNDU0kgSEJBIERyaXZlcgotICogQ29weXJpZ2h0IChjKSAgMjAwMy0yMDA2IFFMb2dpYyBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAgMjAwMy0yMDEwIFFMb2dpYyBDb3Jwb3JhdGlvbgogICoKICAqIFNlZSBMSUNFTlNFLnFsYTR4eHggZm9yIGNvcHlyaWdodCBhbmQgbGljZW5zaW5nIGRldGFpbHMuCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9pbml0LmMgYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfaW5pdC5jCmluZGV4IGRjMDFmYTMuLjE2MjljNDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9pbml0LmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X2luaXQuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBRTG9naWMgaVNDU0kgSEJBIERyaXZlcgotICogQ29weXJpZ2h0IChjKSAgMjAwMy0yMDA2IFFMb2dpYyBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAgMjAwMy0yMDEwIFFMb2dpYyBDb3Jwb3JhdGlvbgogICoKICAqIFNlZSBMSUNFTlNFLnFsYTR4eHggZm9yIGNvcHlyaWdodCBhbmQgbGljZW5zaW5nIGRldGFpbHMuCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9pbmxpbmUuaCBiL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9pbmxpbmUuaAppbmRleCA5NDcxYWM3Li42MmY5MGJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfaW5saW5lLmgKKysrIGIvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X2lubGluZS5oCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIFFMb2dpYyBpU0NTSSBIQkEgRHJpdmVyCi0gKiBDb3B5cmlnaHQgKGMpICAyMDAzLTIwMDYgUUxvZ2ljIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpICAyMDAzLTIwMTAgUUxvZ2ljIENvcnBvcmF0aW9uCiAgKgogICogU2VlIExJQ0VOU0UucWxhNHh4eCBmb3IgY29weXJpZ2h0IGFuZCBsaWNlbnNpbmcgZGV0YWlscy4KICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X2lvY2IuYyBiL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9pb2NiLmMKaW5kZXggNWFlNDlmZC4uNzVmY2Q4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X2lvY2IuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfaW9jYi5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIFFMb2dpYyBpU0NTSSBIQkEgRHJpdmVyCi0gKiBDb3B5cmlnaHQgKGMpICAyMDAzLTIwMDYgUUxvZ2ljIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpICAyMDAzLTIwMTAgUUxvZ2ljIENvcnBvcmF0aW9uCiAgKgogICogU2VlIExJQ0VOU0UucWxhNHh4eCBmb3IgY29weXJpZ2h0IGFuZCBsaWNlbnNpbmcgZGV0YWlscy4KICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X2lzci5jIGIvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X2lzci5jCmluZGV4IDdjMzNmZDUuLjZmZmJlOTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9pc3IuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfaXNyLmMKQEAgLTEsNiArMSw2IEBACiAvKgogICogUUxvZ2ljIGlTQ1NJIEhCQSBEcml2ZXIKLSAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAwNiBRTG9naWMgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAxMCBRTG9naWMgQ29ycG9yYXRpb24KICAqCiAgKiBTZWUgTElDRU5TRS5xbGE0eHh4IGZvciBjb3B5cmlnaHQgYW5kIGxpY2Vuc2luZyBkZXRhaWxzLgogICovCkBAIC01NTQsNyArNTU0LDggQEAKIAkJCS8qIG1ib3hfc3RzWzJdID0gT2xkIEFDQiBzdGF0ZQogCQkJICogbWJveF9zdHNbM10gPSBuZXcgQUNCIHN0YXRlICovCiAJCQlpZiAoKG1ib3hfc3RzWzNdID09IEFDQl9TVEFURV9WQUxJRCkgJiYKLQkJCSAgICAobWJveF9zdHNbMl0gPT0gQUNCX1NUQVRFX1RFTlRBVElWRSkpCisJCQkgICAgKChtYm94X3N0c1syXSA9PSBBQ0JfU1RBVEVfVEVOVEFUSVZFKSB8fAorCQkJICAgIChtYm94X3N0c1syXSA9PSBBQ0JfU1RBVEVfQUNRVUlSSU5HKSkpCiAJCQkJc2V0X2JpdChEUENfR0VUX0RIQ1BfSVBfQUREUiwgJmhhLT5kcGNfZmxhZ3MpOwogCQkJZWxzZSBpZiAoKG1ib3hfc3RzWzNdID09IEFDQl9TVEFURV9BQ1FVSVJJTkcpICYmCiAJCQkgICAgKG1ib3hfc3RzWzJdID09IEFDQl9TVEFURV9WQUxJRCkpCkBAIC0xMDc3LDcgKzEwNzgsNyBAQAogCXJldCA9IHBjaV9lbmFibGVfbXNpKGhhLT5wZGV2KTsKIAlpZiAoIXJldCkgewogCQlyZXQgPSByZXF1ZXN0X2lycShoYS0+cGRldi0+aXJxLCBxbGE0Xzh4eHhfbXNpX2hhbmRsZXIsCi0JCQlJUlFGX0RJU0FCTEVEfElSUUZfU0hBUkVELCBEUklWRVJfTkFNRSwgaGEpOworCQkJMCwgRFJJVkVSX05BTUUsIGhhKTsKIAkJaWYgKCFyZXQpIHsKIAkJCURFQlVHMihxbDRfcHJpbnRrKEtFUk5fSU5GTywgaGEsICJNU0k6IEVuYWJsZWQuXG4iKSk7CiAJCQlzZXRfYml0KEFGX01TSV9FTkFCTEVELCAmaGEtPmZsYWdzKTsKQEAgLTEwOTUsNyArMTA5Niw3IEBACiB0cnlfaW50eDoKIAkvKiBUcnlpbmcgSU5UeCAqLwogCXJldCA9IHJlcXVlc3RfaXJxKGhhLT5wZGV2LT5pcnEsIGhhLT5pc3Bfb3BzLT5pbnRyX2hhbmRsZXIsCi0JICAgIElSUUZfRElTQUJMRUR8SVJRRl9TSEFSRUQsIERSSVZFUl9OQU1FLCBoYSk7CisJICAgIElSUUZfU0hBUkVELCBEUklWRVJfTkFNRSwgaGEpOwogCWlmICghcmV0KSB7CiAJCURFQlVHMihxbDRfcHJpbnRrKEtFUk5fSU5GTywgaGEsICJJTlR4OiBFbmFibGVkLlxuIikpOwogCQlzZXRfYml0KEFGX0lOVHhfRU5BQkxFRCwgJmhhLT5mbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfbWJ4LmMgYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfbWJ4LmMKaW5kZXggMmQyZjljOC4uZjY1NjI2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X21ieC5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9tYnguYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBRTG9naWMgaVNDU0kgSEJBIERyaXZlcgotICogQ29weXJpZ2h0IChjKSAgMjAwMy0yMDA2IFFMb2dpYyBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAgMjAwMy0yMDEwIFFMb2dpYyBDb3Jwb3JhdGlvbgogICoKICAqIFNlZSBMSUNFTlNFLnFsYTR4eHggZm9yIGNvcHlyaWdodCBhbmQgbGljZW5zaW5nIGRldGFpbHMuCiAgKi8KQEAgLTgxLDIzICs4MSw3IEBACiAJICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmhhLT5oYXJkd2FyZV9sb2NrLCBmbGFncyk7CiAKLQlpZiAoaXNfcWxhODAyMihoYSkpIHsKLQkJaW50cl9zdGF0dXMgPSByZWFkbCgmaGEtPnFsYTRfOHh4eF9yZWctPmhvc3RfaW50KTsKLQkJaWYgKGludHJfc3RhdHVzICYgSVNSWF84MlhYX1JJU0NfSU5UKSB7Ci0JCQkvKiBTZXJ2aWNlIGV4aXN0aW5nIGludGVycnVwdCAqLwotCQkJREVCVUcyKHByaW50aygic2NzaSVsZDogJXM6ICIKLQkJCSAgICAic2VydmljaW5nIGV4aXN0aW5nIGludGVycnVwdFxuIiwKLQkJCSAgICBoYS0+aG9zdF9ubywgX19mdW5jX18pKTsKLQkJCWludHJfc3RhdHVzID0gcmVhZGwoJmhhLT5xbGE0Xzh4eHhfcmVnLT5ob3N0X3N0YXR1cyk7Ci0JCQloYS0+aXNwX29wcy0+aW50ZXJydXB0X3NlcnZpY2Vfcm91dGluZShoYSwgaW50cl9zdGF0dXMpOwotCQkJY2xlYXJfYml0KEFGX01CT1hfQ09NTUFORF9ET05FLCAmaGEtPmZsYWdzKTsKLQkJCWlmICh0ZXN0X2JpdChBRl9JTlRFUlJVUFRTX09OLCAmaGEtPmZsYWdzKSAmJgotCQkJICAgIHRlc3RfYml0KEFGX0lOVHhfRU5BQkxFRCwgJmhhLT5mbGFncykpCi0JCQkJcWxhNF84eHh4X3dyXzMyKGhhLAotCQkJCSAgICBoYS0+bnhfbGVnYWN5X2ludHIudGd0X21hc2tfcmVnLAotCQkJCSAgICAweGZiZmYpOwotCQl9Ci0JfSBlbHNlIHsKKwlpZiAoIWlzX3FsYTgwMjIoaGEpKSB7CiAJCWludHJfc3RhdHVzID0gcmVhZGwoJmhhLT5yZWctPmN0cmxfc3RhdHVzKTsKIAkJaWYgKGludHJfc3RhdHVzICYgQ1NSX1NDU0lfUFJPQ0VTU09SX0lOVFIpIHsKIAkJCS8qIFNlcnZpY2UgZXhpc3RpbmcgaW50ZXJydXB0ICovCkBAIC05MzQsNyArOTE4LDcgQEAKIAkJcmV0dXJuIHN0YXR1czsKIAogCW1ib3hfY21kWzBdID0gTUJPWF9DTURfQUJPUlRfVEFTSzsKLQltYm94X2NtZFsxXSA9IHNyYi0+ZndfZGRiX2luZGV4OworCW1ib3hfY21kWzFdID0gc3JiLT5kZGItPmZ3X2RkYl9pbmRleDsKIAltYm94X2NtZFsyXSA9IGluZGV4OwogCS8qIEltbWVkaWF0ZSBDb21tYW5kIEVuYWJsZSAqLwogCW1ib3hfY21kWzVdID0gMHgwMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9udnJhbS5jIGIvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X252cmFtLmMKaW5kZXggZjBkMGZiZi4uYjRiODU5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X252cmFtLmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X252cmFtLmMKQEAgLTEsNiArMSw2IEBACiAvKgogICogUUxvZ2ljIGlTQ1NJIEhCQSBEcml2ZXIKLSAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAwNiBRTG9naWMgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAxMCBRTG9naWMgQ29ycG9yYXRpb24KICAqCiAgKiBTZWUgTElDRU5TRS5xbGE0eHh4IGZvciBjb3B5cmlnaHQgYW5kIGxpY2Vuc2luZyBkZXRhaWxzLgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfbnZyYW0uaCBiL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9udnJhbS5oCmluZGV4IDdhOGZjNjYuLmIzODMxYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9udnJhbS5oCisrKyBiL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9udnJhbS5oCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIFFMb2dpYyBpU0NTSSBIQkEgRHJpdmVyCi0gKiBDb3B5cmlnaHQgKGMpICAyMDAzLTIwMDYgUUxvZ2ljIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpICAyMDAzLTIwMTAgUUxvZ2ljIENvcnBvcmF0aW9uCiAgKgogICogU2VlIExJQ0VOU0UucWxhNHh4eCBmb3IgY29weXJpZ2h0IGFuZCBsaWNlbnNpbmcgZGV0YWlscy4KICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X254LmMgYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfbnguYwppbmRleCA0NzRiMTBkLi4zZDVlZjJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfbnguYworKysgYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfbnguYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBRTG9naWMgaVNDU0kgSEJBIERyaXZlcgotICogQ29weXJpZ2h0IChjKSAgMjAwMy0yMDA5IFFMb2dpYyBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAgMjAwMy0yMDEwIFFMb2dpYyBDb3Jwb3JhdGlvbgogICoKICAqIFNlZSBMSUNFTlNFLnFsYTR4eHggZm9yIGNvcHlyaWdodCBhbmQgbGljZW5zaW5nIGRldGFpbHMuCiAgKi8KQEAgLTk0MiwxMiArOTQyLDU1IEBACiAKIAkvKiBIYWx0IGFsbCB0aGUgaW5kaXZpdWFsIFBFR3MgYW5kIG90aGVyIGJsb2NrcyBvZiB0aGUgSVNQICovCiAJcWxhNF84eHh4X3JvbV9sb2NrKGhhKTsKKworCS8qIG1hc2sgYWxsIG5pdSBpbnRlcnJ1cHRzICovCisJcWxhNF84eHh4X3dyXzMyKGhhLCBRTEE4MlhYX0NSQl9OSVUgKyAweDQwLCAweGZmKTsKKwkvKiBkaXNhYmxlIHhnZSByeC90eCAqLworCXFsYTRfOHh4eF93cl8zMihoYSwgUUxBODJYWF9DUkJfTklVICsgMHg3MDAwMCwgMHgwMCk7CisJLyogZGlzYWJsZSB4ZzEgcngvdHggKi8KKwlxbGE0Xzh4eHhfd3JfMzIoaGEsIFFMQTgyWFhfQ1JCX05JVSArIDB4ODAwMDAsIDB4MDApOworCisJLyogaGFsdCBzcmUgKi8KKwl2YWwgPSBxbGE0Xzh4eHhfcmRfMzIoaGEsIFFMQTgyWFhfQ1JCX1NSRSArIDB4MTAwMCk7CisJcWxhNF84eHh4X3dyXzMyKGhhLCBRTEE4MlhYX0NSQl9TUkUgKyAweDEwMDAsIHZhbCAmICh+KDB4MSkpKTsKKworCS8qIGhhbHQgZXBnICovCisJcWxhNF84eHh4X3dyXzMyKGhhLCBRTEE4MlhYX0NSQl9FUEcgKyAweDEzMDAsIDB4MSk7CisKKwkvKiBoYWx0IHRpbWVycyAqLworCXFsYTRfOHh4eF93cl8zMihoYSwgUUxBODJYWF9DUkJfVElNRVIgKyAweDAsIDB4MCk7CisJcWxhNF84eHh4X3dyXzMyKGhhLCBRTEE4MlhYX0NSQl9USU1FUiArIDB4OCwgMHgwKTsKKwlxbGE0Xzh4eHhfd3JfMzIoaGEsIFFMQTgyWFhfQ1JCX1RJTUVSICsgMHgxMCwgMHgwKTsKKwlxbGE0Xzh4eHhfd3JfMzIoaGEsIFFMQTgyWFhfQ1JCX1RJTUVSICsgMHgxOCwgMHgwKTsKKwlxbGE0Xzh4eHhfd3JfMzIoaGEsIFFMQTgyWFhfQ1JCX1RJTUVSICsgMHgxMDAsIDB4MCk7CisKKwkvKiBoYWx0IHBlZ3MgKi8KKwlxbGE0Xzh4eHhfd3JfMzIoaGEsIFFMQTgyWFhfQ1JCX1BFR19ORVRfMCArIDB4M2MsIDEpOworCXFsYTRfOHh4eF93cl8zMihoYSwgUUxBODJYWF9DUkJfUEVHX05FVF8xICsgMHgzYywgMSk7CisJcWxhNF84eHh4X3dyXzMyKGhhLCBRTEE4MlhYX0NSQl9QRUdfTkVUXzIgKyAweDNjLCAxKTsKKwlxbGE0Xzh4eHhfd3JfMzIoaGEsIFFMQTgyWFhfQ1JCX1BFR19ORVRfMyArIDB4M2MsIDEpOworCXFsYTRfOHh4eF93cl8zMihoYSwgUUxBODJYWF9DUkJfUEVHX05FVF80ICsgMHgzYywgMSk7CisKKwkvKiBiaWcgaGFtbWVyICovCisJbXNsZWVwKDEwMDApOwogCWlmICh0ZXN0X2JpdChEUENfUkVTRVRfSEEsICZoYS0+ZHBjX2ZsYWdzKSkKIAkJLyogZG9uJ3QgcmVzZXQgQ0FNIGJsb2NrIG9uIHJlc2V0ICovCiAJCXFsYTRfOHh4eF93cl8zMihoYSwgUUxBODJYWF9ST01VU0JfR0xCX1NXX1JFU0VULCAweGZlZmZmZmZmKTsKIAllbHNlCiAJCXFsYTRfOHh4eF93cl8zMihoYSwgUUxBODJYWF9ST01VU0JfR0xCX1NXX1JFU0VULCAweGZmZmZmZmZmKTsKIAorCS8qIHJlc2V0IG1zICovCisJdmFsID0gcWxhNF84eHh4X3JkXzMyKGhhLCBRTEE4MlhYX0NSQl9RRFJfTkVUICsgMHhlNCk7CisJdmFsIHw9ICgxIDw8IDEpOworCXFsYTRfOHh4eF93cl8zMihoYSwgUUxBODJYWF9DUkJfUURSX05FVCArIDB4ZTQsIHZhbCk7CisKKwltc2xlZXAoMjApOworCS8qIHVucmVzZXQgbXMgKi8KKwl2YWwgPSBxbGE0Xzh4eHhfcmRfMzIoaGEsIFFMQTgyWFhfQ1JCX1FEUl9ORVQgKyAweGU0KTsKKwl2YWwgJj0gfigxIDw8IDEpOworCXFsYTRfOHh4eF93cl8zMihoYSwgUUxBODJYWF9DUkJfUURSX05FVCArIDB4ZTQsIHZhbCk7CisJbXNsZWVwKDIwKTsKKwogCXFsYTRfOHh4eF9yb21fdW5sb2NrKGhhKTsKIAogCS8qIFJlYWQgdGhlIHNpZ25hdHVyZSB2YWx1ZSBmcm9tIHRoZSBmbGFzaC4KQEAgLTEwODQsMTQgKzExMjcsMTQgQEAKIHN0YXRpYyBpbnQKIHFsYTRfOHh4eF9sb2FkX2Zyb21fZmxhc2goc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhLCB1aW50MzJfdCBpbWFnZV9zdGFydCkKIHsKLQlpbnQgIGk7CisJaW50ICBpLCBydmFsID0gMDsKIAlsb25nIHNpemUgPSAwOwogCWxvbmcgZmxhc2hhZGRyLCBtZW1hZGRyOwogCXU2NCBkYXRhOwogCXUzMiBoaWdoLCBsb3c7CiAKIAlmbGFzaGFkZHIgPSBtZW1hZGRyID0gaGEtPmh3LmZsdF9yZWdpb25fYm9vdGxvYWQ7Ci0Jc2l6ZSA9IChpbWFnZV9zdGFydCAtIGZsYXNoYWRkcikvODsKKwlzaXplID0gKGltYWdlX3N0YXJ0IC0gZmxhc2hhZGRyKSAvIDg7CiAKIAlERUJVRzIocHJpbnRrKCJzY3NpJWxkOiAlczogYm9vdGxkcj0weCVseCwgZndfaW1hZ2U9MHgleFxuIiwKIAkgICAgaGEtPmhvc3Rfbm8sIF9fZnVuY19fLCBmbGFzaGFkZHIsIGltYWdlX3N0YXJ0KSk7CkBAIC0xMTAwLDE0ICsxMTQzLDE4IEBACiAJCWlmICgocWxhNF84eHh4X3JvbV9mYXN0X3JlYWQoaGEsIGZsYXNoYWRkciwgKGludCAqKSZsb3cpKSB8fAogCQkgICAgKHFsYTRfOHh4eF9yb21fZmFzdF9yZWFkKGhhLCBmbGFzaGFkZHIgKyA0LAogCQkgICAgKGludCAqKSZoaWdoKSkpIHsKLQkJCXJldHVybiAtMTsKKwkJCXJ2YWwgPSAtMTsKKwkJCWdvdG8gZXhpdF9sb2FkX2Zyb21fZmxhc2g7CiAJCX0KIAkJZGF0YSA9ICgodTY0KWhpZ2ggPDwgMzIpIHwgbG93IDsKLQkJcWxhNF84eHh4X3BjaV9tZW1fd3JpdGVfMk0oaGEsIG1lbWFkZHIsICZkYXRhLCA4KTsKKwkJcnZhbCA9IHFsYTRfOHh4eF9wY2lfbWVtX3dyaXRlXzJNKGhhLCBtZW1hZGRyLCAmZGF0YSwgOCk7CisJCWlmIChydmFsKQorCQkJZ290byBleGl0X2xvYWRfZnJvbV9mbGFzaDsKKwogCQlmbGFzaGFkZHIgKz0gODsKIAkJbWVtYWRkciAgICs9IDg7CiAKLQkJaWYgKGklMHgxMDAwID09IDApCisJCWlmIChpICUgMHgxMDAwID09IDApCiAJCQltc2xlZXAoMSk7CiAKIAl9CkBAIC0xMTE5LDcgKzExNjYsOCBAQAogCXFsYTRfOHh4eF93cl8zMihoYSwgUUxBODJYWF9ST01VU0JfR0xCX1NXX1JFU0VULCAweDgwMDAxZSk7CiAJcmVhZF91bmxvY2soJmhhLT5od19sb2NrKTsKIAotCXJldHVybiAwOworZXhpdF9sb2FkX2Zyb21fZmxhc2g6CisJcmV0dXJuIHJ2YWw7CiB9CiAKIHN0YXRpYyBpbnQgcWxhNF84eHh4X2xvYWRfZncoc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhLCB1aW50MzJfdCBpbWFnZV9zdGFydCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9ueC5oIGIvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X254LmgKaW5kZXggZmY2ODliZi4uMzUzNzZhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X254LmgKKysrIGIvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X254LmgKQEAgLTEsOCArMSw4IEBACiAvKgotICogUUxvZ2ljIEZpYnJlIENoYW5uZWwgSEJBIERyaXZlcgotICogQ29weXJpZ2h0IChjKSAgMjAwMy0yMDA4IFFMb2dpYyBDb3Jwb3JhdGlvbgorICogUUxvZ2ljIGlTQ1NJIEhCQSBEcml2ZXIKKyAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAxMCBRTG9naWMgQ29ycG9yYXRpb24KICAqCi0gKiBTZWUgTElDRU5TRS5xbGEyeHh4IGZvciBjb3B5cmlnaHQgYW5kIGxpY2Vuc2luZyBkZXRhaWxzLgorICogU2VlIExJQ0VOU0UucWxhNHh4eCBmb3IgY29weXJpZ2h0IGFuZCBsaWNlbnNpbmcgZGV0YWlscy4KICAqLwogI2lmbmRlZiBfX1FMQV9OWF9ICiAjZGVmaW5lIF9fUUxBX05YX0gKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9vcy5jIGIvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X29zLmMKaW5kZXggMGQ0OGZiNC4uM2ZjMWQyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X29zLmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X29zLmMKQEAgLTEsNiArMSw2IEBACiAvKgogICogUUxvZ2ljIGlTQ1NJIEhCQSBEcml2ZXIKLSAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAwNiBRTG9naWMgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAxMCBRTG9naWMgQ29ycG9yYXRpb24KICAqCiAgKiBTZWUgTElDRU5TRS5xbGE0eHh4IGZvciBjb3B5cmlnaHQgYW5kIGxpY2Vuc2luZyBkZXRhaWxzLgogICovCkBAIC03MDYsMTggKzcwNiwyMiBAQAogCWRldl9zdGF0ZSA9IHFsYTRfOHh4eF9yZF8zMihoYSwgUUxBODJYWF9DUkJfREVWX1NUQVRFKTsKIAogCS8qIGRvbid0IHBvbGwgaWYgcmVzZXQgaXMgZ29pbmcgb24gKi8KLQlpZiAoIXRlc3RfYml0KERQQ19SRVNFVF9BQ1RJVkUsICZoYS0+ZHBjX2ZsYWdzKSkgeworCWlmICghKHRlc3RfYml0KERQQ19SRVNFVF9BQ1RJVkUsICZoYS0+ZHBjX2ZsYWdzKSB8fAorCSAgICB0ZXN0X2JpdChEUENfUkVTRVRfSEEsICZoYS0+ZHBjX2ZsYWdzKSB8fAorCSAgICB0ZXN0X2JpdChEUENfUkVTRVRfQUNUSVZFLCAmaGEtPmRwY19mbGFncykpKSB7CiAJCWlmIChkZXZfc3RhdGUgPT0gUUxBODJYWF9ERVZfTkVFRF9SRVNFVCAmJgogCQkgICAgIXRlc3RfYml0KERQQ19SRVNFVF9IQSwgJmhhLT5kcGNfZmxhZ3MpKSB7Ci0JCQlwcmludGsoInNjc2klbGQ6ICVzOiBIVyBTdGF0ZTogTkVFRCBSRVNFVCFcbiIsCi0JCQkgICAgaGEtPmhvc3Rfbm8sIF9fZnVuY19fKTsKLQkJCXNldF9iaXQoRFBDX1JFU0VUX0hBLCAmaGEtPmRwY19mbGFncyk7Ci0JCQlxbGE0eHh4X3dha2VfZHBjKGhhKTsKLQkJCXFsYTR4eHhfbWFpbGJveF9wcmVtYXR1cmVfY29tcGxldGlvbihoYSk7CisJCQlpZiAoIXFsNHhkb250cmVzZXRoYmEpIHsKKwkJCQlxbDRfcHJpbnRrKEtFUk5fSU5GTywgaGEsICIlczogSFcgU3RhdGU6ICIKKwkJCQkgICAgIk5FRUQgUkVTRVQhXG4iLCBfX2Z1bmNfXyk7CisJCQkJc2V0X2JpdChEUENfUkVTRVRfSEEsICZoYS0+ZHBjX2ZsYWdzKTsKKwkJCQlxbGE0eHh4X3dha2VfZHBjKGhhKTsKKwkJCQlxbGE0eHh4X21haWxib3hfcHJlbWF0dXJlX2NvbXBsZXRpb24oaGEpOworCQkJfQogCQl9IGVsc2UgaWYgKGRldl9zdGF0ZSA9PSBRTEE4MlhYX0RFVl9ORUVEX1FVSUVTQ0VOVCAmJgogCQkgICAgIXRlc3RfYml0KERQQ19IQV9ORUVEX1FVSUVTQ0VOVCwgJmhhLT5kcGNfZmxhZ3MpKSB7Ci0JCQlwcmludGsoInNjc2klbGQ6ICVzOiBIVyBTdGF0ZTogTkVFRCBRVUlFUyFcbiIsCi0JCQkgICAgaGEtPmhvc3Rfbm8sIF9fZnVuY19fKTsKKwkJCXFsNF9wcmludGsoS0VSTl9JTkZPLCBoYSwgIiVzOiBIVyBTdGF0ZTogTkVFRCBRVUlFUyFcbiIsCisJCQkgICAgX19mdW5jX18pOwogCQkJc2V0X2JpdChEUENfSEFfTkVFRF9RVUlFU0NFTlQsICZoYS0+ZHBjX2ZsYWdzKTsKIAkJCXFsYTR4eHhfd2FrZV9kcGMoaGEpOwogCQl9IGVsc2UgIHsKQEAgLTE3MjEsNiArMTcyNSwxNCBAQAogCWlmICghdGVzdF9iaXQoQUZfT05MSU5FLCAmaGEtPmZsYWdzKSkgewogCQlxbDRfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBhZGFwdGVyXG4iKTsKIAorCQlpZiAoaXNfcWxhODAyMihoYSkgJiYgcWw0eGRvbnRyZXNldGhiYSkgeworCQkJLyogUHV0IHRoZSBkZXZpY2UgaW4gZmFpbGVkIHN0YXRlLiAqLworCQkJREVCVUcyKHByaW50ayhLRVJOX0VSUiAiSFcgU1RBVEU6IEZBSUxFRFxuIikpOworCQkJcWxhNF84eHh4X2lkY19sb2NrKGhhKTsKKwkJCXFsYTRfOHh4eF93cl8zMihoYSwgUUxBODJYWF9DUkJfREVWX1NUQVRFLAorCQkJICAgIFFMQTgyWFhfREVWX0ZBSUxFRCk7CisJCQlxbGE0Xzh4eHhfaWRjX3VubG9jayhoYSk7CisJCX0KIAkJcmV0ID0gLUVOT0RFVjsKIAkJZ290byBwcm9iZV9mYWlsZWQ7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X3ZlcnNpb24uaCBiL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF92ZXJzaW9uLmgKaW5kZXggOWJmYWNmNC4uODQ3NWIzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X3ZlcnNpb24uaAorKysgYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfdmVyc2lvbi5oCkBAIC0xLDggKzEsOCBAQAogLyoKICAqIFFMb2dpYyBpU0NTSSBIQkEgRHJpdmVyCi0gKiBDb3B5cmlnaHQgKGMpICAyMDAzLTIwMDYgUUxvZ2ljIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpICAyMDAzLTIwMTAgUUxvZ2ljIENvcnBvcmF0aW9uCiAgKgogICogU2VlIExJQ0VOU0UucWxhNHh4eCBmb3IgY29weXJpZ2h0IGFuZCBsaWNlbnNpbmcgZGV0YWlscy4KICAqLwogCi0jZGVmaW5lIFFMQTRYWFhfRFJJVkVSX1ZFUlNJT04JIjUuMDIuMDAtazQiCisjZGVmaW5lIFFMQTRYWFhfRFJJVkVSX1ZFUlNJT04JIjUuMDIuMDAtazUiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9kZWJ1Zy5jIGIvZHJpdmVycy9zY3NpL3Njc2lfZGVidWcuYwppbmRleCAyZjFmOWIwLi43YjMxMDkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9kZWJ1Zy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX2RlYnVnLmMKQEAgLTE4MDUsNiArMTgwNSw3IEBACiAJCQlkZXZpcC0+c2Vuc2VfYnVmZls1XSA9IChyZXQgPj4gOCkgJiAweGZmOwogCQkJZGV2aXAtPnNlbnNlX2J1ZmZbNl0gPSByZXQgJiAweGZmOwogCQl9CisJICAgICAgICBzY3NpX3NldF9yZXNpZChTQ3BudCwgc2NzaV9idWZmbGVuKFNDcG50KSk7CiAJCXJldHVybiBjaGVja19jb25kaXRpb25fcmVzdWx0OwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfZXJyb3IuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX2Vycm9yLmMKaW5kZXggMzBhYzExNi4uNDVjNzU2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfZXJyb3IuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9lcnJvci5jCkBAIC0xMTI0LDUxICsxMTI0LDQwIEBACiAJCQkJc3RydWN0IGxpc3RfaGVhZCAqd29ya19xLAogCQkJCXN0cnVjdCBsaXN0X2hlYWQgKmRvbmVfcSkKIHsKLQlzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kLCAqdGd0cl9zY21kLCAqbmV4dDsKLQl1bnNpZ25lZCBpbnQgaWQgPSAwOwotCWludCBydG47CisJTElTVF9IRUFEKHRtcF9saXN0KTsKIAotCWRvIHsKLQkJdGd0cl9zY21kID0gTlVMTDsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShzY21kLCB3b3JrX3EsIGVoX2VudHJ5KSB7Ci0JCQlpZiAoaWQgPT0gc2NtZF9pZChzY21kKSkgewotCQkJCXRndHJfc2NtZCA9IHNjbWQ7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJaWYgKCF0Z3RyX3NjbWQpIHsKLQkJCS8qIG5vdCBvbmUgZXhhY3RseSBlcXVhbDsgZmluZCB0aGUgbmV4dCBoaWdoZXN0ICovCi0JCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNjbWQsIHdvcmtfcSwgZWhfZW50cnkpIHsKLQkJCQlpZiAoc2NtZF9pZChzY21kKSA+IGlkICYmCi0JCQkJICAgICghdGd0cl9zY21kIHx8Ci0JCQkJICAgICBzY21kX2lkKHRndHJfc2NtZCkgPiBzY21kX2lkKHNjbWQpKSkKLQkJCQkJCXRndHJfc2NtZCA9IHNjbWQ7Ci0JCQl9Ci0JCX0KLQkJaWYgKCF0Z3RyX3NjbWQpCi0JCQkvKiBubyBtb3JlIGNvbW1hbmRzLCB0aGF0J3MgaXQgKi8KLQkJCWJyZWFrOworCWxpc3Rfc3BsaWNlX2luaXQod29ya19xLCAmdG1wX2xpc3QpOworCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZ0bXBfbGlzdCkpIHsKKwkJc3RydWN0IHNjc2lfY21uZCAqbmV4dCwgKnNjbWQ7CisJCWludCBydG47CisJCXVuc2lnbmVkIGludCBpZDsKKworCQlzY21kID0gbGlzdF9lbnRyeSh0bXBfbGlzdC5uZXh0LCBzdHJ1Y3Qgc2NzaV9jbW5kLCBlaF9lbnRyeSk7CisJCWlkID0gc2NtZF9pZChzY21kKTsKIAogCQlTQ1NJX0xPR19FUlJPUl9SRUNPVkVSWSgzLCBwcmludGsoIiVzOiBTZW5kaW5nIHRhcmdldCByZXNldCAiCiAJCQkJCQkgICJ0byB0YXJnZXQgJWRcbiIsCiAJCQkJCQkgIGN1cnJlbnQtPmNvbW0sIGlkKSk7Ci0JCXJ0biA9IHNjc2lfdHJ5X3RhcmdldF9yZXNldCh0Z3RyX3NjbWQpOwotCQlpZiAocnRuID09IFNVQ0NFU1MgfHwgcnRuID09IEZBU1RfSU9fRkFJTCkgewotCQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNjbWQsIG5leHQsIHdvcmtfcSwgZWhfZW50cnkpIHsKLQkJCQlpZiAoaWQgPT0gc2NtZF9pZChzY21kKSkKLQkJCQkJaWYgKCFzY3NpX2RldmljZV9vbmxpbmUoc2NtZC0+ZGV2aWNlKSB8fAotCQkJCQkgICAgcnRuID09IEZBU1RfSU9fRkFJTCB8fAotCQkJCQkgICAgIXNjc2lfZWhfdHVyKHRndHJfc2NtZCkpCi0JCQkJCQlzY3NpX2VoX2ZpbmlzaF9jbWQoc2NtZCwKLQkJCQkJCQkJICAgZG9uZV9xKTsKLQkJCX0KLQkJfSBlbHNlCisJCXJ0biA9IHNjc2lfdHJ5X3RhcmdldF9yZXNldChzY21kKTsKKwkJaWYgKHJ0biAhPSBTVUNDRVNTICYmIHJ0biAhPSBGQVNUX0lPX0ZBSUwpCiAJCQlTQ1NJX0xPR19FUlJPUl9SRUNPVkVSWSgzLCBwcmludGsoIiVzOiBUYXJnZXQgcmVzZXQiCiAJCQkJCQkJICAiIGZhaWxlZCB0YXJnZXQ6ICIKIAkJCQkJCQkgICIlZFxuIiwKIAkJCQkJCQkgIGN1cnJlbnQtPmNvbW0sIGlkKSk7Ci0JCWlkKys7Ci0JfSB3aGlsZShpZCAhPSAwKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNjbWQsIG5leHQsICZ0bXBfbGlzdCwgZWhfZW50cnkpIHsKKwkJCWlmIChzY21kX2lkKHNjbWQpICE9IGlkKQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAoKHJ0biA9PSBTVUNDRVNTIHx8IHJ0biA9PSBGQVNUX0lPX0ZBSUwpCisJCQkgICAgJiYgKCFzY3NpX2RldmljZV9vbmxpbmUoc2NtZC0+ZGV2aWNlKSB8fAorCQkJCSBydG4gPT0gRkFTVF9JT19GQUlMIHx8ICFzY3NpX2VoX3R1cihzY21kKSkpCisJCQkJc2NzaV9laF9maW5pc2hfY21kKHNjbWQsIGRvbmVfcSk7CisJCQllbHNlCisJCQkJLyogcHVzaCBiYWNrIG9uIHdvcmsgcXVldWUgZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZyAqLworCQkJCWxpc3RfbW92ZSgmc2NtZC0+ZWhfZW50cnksIHdvcmtfcSk7CisJCX0KKwl9CiAKIAlyZXR1cm4gbGlzdF9lbXB0eSh3b3JrX3EpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfbGliLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYwppbmRleCA0YTM4NDIyLi41MDFmNjdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYwpAQCAtMTI3OCwxMSArMTI3OCwxMCBAQAogCX0KIAogCWlmIChzY3NpX3RhcmdldF9pc19idXN5KHN0YXJnZXQpKSB7Ci0JCWlmIChsaXN0X2VtcHR5KCZzZGV2LT5zdGFydmVkX2VudHJ5KSkgeworCQlpZiAobGlzdF9lbXB0eSgmc2Rldi0+c3RhcnZlZF9lbnRyeSkpCiAJCQlsaXN0X2FkZF90YWlsKCZzZGV2LT5zdGFydmVkX2VudHJ5LAogCQkJCSAgICAgICZzaG9zdC0+c3RhcnZlZF9saXN0KTsKLQkJCXJldHVybiAwOwotCQl9CisJCXJldHVybiAwOwogCX0KIAogCS8qIFdlJ3JlIE9LIHRvIHByb2Nlc3MgdGhlIGNvbW1hbmQsIHNvIHdlIGNhbid0IGJlIHN0YXJ2ZWQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3N5c2ZzLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9zeXNmcy5jCmluZGV4IDc2ZWUyZTcuLjRjNjhkMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3N5c2ZzLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfc3lzZnMuYwpAQCAtOTkzLDE2ICs5OTMsMTQgQEAKICAqLwogdm9pZCBzY3NpX3JlbW92ZV90YXJnZXQoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBkZXZpY2UgKnJkZXY7Ci0KIAlpZiAoc2NzaV9pc190YXJnZXRfZGV2aWNlKGRldikpIHsKIAkJX19zY3NpX3JlbW92ZV90YXJnZXQodG9fc2NzaV90YXJnZXQoZGV2KSk7CiAJCXJldHVybjsKIAl9CiAKLQlyZGV2ID0gZ2V0X2RldmljZShkZXYpOworCWdldF9kZXZpY2UoZGV2KTsKIAlkZXZpY2VfZm9yX2VhY2hfY2hpbGQoZGV2LCBOVUxMLCBfX3JlbW92ZV9jaGlsZCk7Ci0JcHV0X2RldmljZShyZGV2KTsKKwlwdXRfZGV2aWNlKGRldik7CiB9CiBFWFBPUlRfU1lNQk9MKHNjc2lfcmVtb3ZlX3RhcmdldCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMKaW5kZXggMzMyMzg3YS4uZjkwNWVjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMKQEAgLTIyMDAsMyArMjIwMCw0IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oImlTQ1NJIFRyYW5zcG9ydCBJbnRlcmZhY2UiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9WRVJTSU9OKElTQ1NJX1RSQU5TUE9SVF9WRVJTSU9OKTsKK01PRFVMRV9BTElBU19ORVRfUEZfUFJPVE8oUEZfTkVUTElOSywgTkVUTElOS19JU0NTSSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2QuYyBiL2RyaXZlcnMvc2NzaS9zZC5jCmluZGV4IDk1NjQ5NjEuLjM2NTAyNGIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2QuYworKysgYi9kcml2ZXJzL3Njc2kvc2QuYwpAQCAtNTgzLDcgKzU4Myw3IEBACiAJCSAqIHF1aWV0bHkgcmVmdXNlIHRvIGRvIGFueXRoaW5nIHRvIGEgY2hhbmdlZCBkaXNjIHVudGlsIAogCQkgKiB0aGUgY2hhbmdlZCBiaXQgaGFzIGJlZW4gcmVzZXQKIAkJICovCi0JCS8qIHByaW50aygiU0NTSSBkaXNrIGhhcyBiZWVuIGNoYW5nZWQuIFByb2hpYml0aW5nIGZ1cnRoZXIgSS9PLlxuIik7ICovCisJCS8qIHByaW50aygiU0NTSSBkaXNrIGhhcyBiZWVuIGNoYW5nZWQgb3IgaXMgbm90IHByZXNlbnQuIFByb2hpYml0aW5nIGZ1cnRoZXIgSS9PLlxuIik7ICovCiAJCWdvdG8gb3V0OwogCX0KIApAQCAtMTAyMyw3ICsxMDIzLDYgQEAKIAkgKi8KIAlpZiAoIXNjc2lfZGV2aWNlX29ubGluZShzZHApKSB7CiAJCXNldF9tZWRpYV9ub3RfcHJlc2VudChzZGtwKTsKLQkJcmV0dmFsID0gMTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC0xMDU0LDcgKzEwNTMsNiBAQAogCQkgICAgICAgLyogMHgzYSBpcyBtZWRpdW0gbm90IHByZXNlbnQgKi8KIAkJICAgICAgIHNzaGRyLT5hc2MgPT0gMHgzYSkpIHsKIAkJc2V0X21lZGlhX25vdF9wcmVzZW50KHNka3ApOwotCQlyZXR2YWwgPSAxOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTEwNjUsMTIgKzEwNjMsMjcgQEAKIAkgKi8KIAlzZGtwLT5tZWRpYV9wcmVzZW50ID0gMTsKIAotCXJldHZhbCA9IHNkcC0+Y2hhbmdlZDsKLQlzZHAtPmNoYW5nZWQgPSAwOwogb3V0OgotCWlmIChyZXR2YWwgIT0gc2RrcC0+cHJldmlvdXNfc3RhdGUpCisJLyoKKwkgKiBSZXBvcnQgYSBtZWRpYSBjaGFuZ2UgdW5kZXIgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCSAqCisJICoJTWVkaXVtIGlzIHByZXNlbnQgbm93IGFuZCB3YXNuJ3QgcHJlc2VudCBiZWZvcmUuCisJICoJTWVkaXVtIHdhc24ndCBwcmVzZW50IGJlZm9yZSBhbmQgaXMgcHJlc2VudCBub3cuCisJICoJTWVkaXVtIHdhcyBwcmVzZW50IGF0IGFsbCB0aW1lcywgYnV0IGl0IGNoYW5nZWQgd2hpbGUKKwkgKgkJd2Ugd2VyZW4ndCBsb29raW5nIChzZHAtPmNoYW5nZWQgaXMgc2V0KS4KKwkgKgorCSAqIElmIHRoZXJlIHdhcyBubyBtZWRpdW0gYmVmb3JlIGFuZCB0aGVyZSBpcyBubyBtZWRpdW0gbm93IHRoZW4KKwkgKiBkb24ndCByZXBvcnQgYSBjaGFuZ2UsIGV2ZW4gaWYgYSBtZWRpdW0gd2FzIGluc2VydGVkIGFuZCByZW1vdmVkCisJICogd2hpbGUgd2Ugd2VyZW4ndCBsb29raW5nLgorCSAqLworCXJldHZhbCA9IChzZGtwLT5tZWRpYV9wcmVzZW50ICE9IHNka3AtPnByZXZpb3VzX3N0YXRlIHx8CisJCQkoc2RrcC0+bWVkaWFfcHJlc2VudCAmJiBzZHAtPmNoYW5nZWQpKTsKKwlpZiAocmV0dmFsKQogCQlzZGV2X2V2dF9zZW5kX3NpbXBsZShzZHAsIFNERVZfRVZUX01FRElBX0NIQU5HRSwgR0ZQX0tFUk5FTCk7Ci0Jc2RrcC0+cHJldmlvdXNfc3RhdGUgPSByZXR2YWw7CisJc2RrcC0+cHJldmlvdXNfc3RhdGUgPSBzZGtwLT5tZWRpYV9wcmVzZW50OworCisJLyogc2RwLT5jaGFuZ2VkIGluZGljYXRlcyBtZWRpdW0gd2FzIGNoYW5nZWQgb3IgaXMgbm90IHByZXNlbnQgKi8KKwlzZHAtPmNoYW5nZWQgPSAhc2RrcC0+bWVkaWFfcHJlc2VudDsKIAlrZnJlZShzc2hkcik7CiAJcmV0dXJuIHJldHZhbDsKIH0KQEAgLTExNzUsNiArMTE4OCwxMiBAQAogCXU2NCBlbmRfbGJhID0gYmxrX3JxX3BvcyhzY21kLT5yZXF1ZXN0KSArIChzY3NpX2J1ZmZsZW4oc2NtZCkgLyA1MTIpOwogCXU2NCBiYWRfbGJhOwogCWludCBpbmZvX3ZhbGlkOworCS8qCisJICogcmVzaWQgaXMgb3B0aW9uYWwgYnV0IG1vc3RseSBmaWxsZWQgaW4uICBXaGVuIGl0J3MgdW51c2VkLAorCSAqIGl0cyB2YWx1ZSBpcyB6ZXJvLCBzbyB3ZSBhc3N1bWUgdGhlIHdob2xlIGJ1ZmZlciB0cmFuc2ZlcnJlZAorCSAqLworCXVuc2lnbmVkIGludCB0cmFuc2ZlcnJlZCA9IHNjc2lfYnVmZmxlbihzY21kKSAtIHNjc2lfZ2V0X3Jlc2lkKHNjbWQpOworCXVuc2lnbmVkIGludCBnb29kX2J5dGVzOwogCiAJaWYgKHNjbWQtPnJlcXVlc3QtPmNtZF90eXBlICE9IFJFUV9UWVBFX0ZTKQogCQlyZXR1cm4gMDsKQEAgLTEyMDgsNyArMTIyNyw4IEBACiAJLyogVGhpcyBjb21wdXRhdGlvbiBzaG91bGQgYWx3YXlzIGJlIGRvbmUgaW4gdGVybXMgb2YKIAkgKiB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgZGV2aWNlJ3MgbWVkaXVtLgogCSAqLwotCXJldHVybiAoYmFkX2xiYSAtIHN0YXJ0X2xiYSkgKiBzY21kLT5kZXZpY2UtPnNlY3Rvcl9zaXplOworCWdvb2RfYnl0ZXMgPSAoYmFkX2xiYSAtIHN0YXJ0X2xiYSkgKiBzY21kLT5kZXZpY2UtPnNlY3Rvcl9zaXplOworCXJldHVybiBtaW4oZ29vZF9ieXRlcywgdHJhbnNmZXJyZWQpOwogfQogCiAvKioKQEAgLTE5MDIsMTAgKzE5MjIsMTQgQEAKIAlpbnQgb2xkX3JjZCA9IHNka3AtPlJDRDsKIAlpbnQgb2xkX2Rwb2Z1YSA9IHNka3AtPkRQT0ZVQTsKIAotCWlmIChzZHAtPnNraXBfbXNfcGFnZV84KQotCQlnb3RvIGRlZmF1bHRzOwotCi0JaWYgKHNkcC0+dHlwZSA9PSBUWVBFX1JCQykgeworCWlmIChzZHAtPnNraXBfbXNfcGFnZV84KSB7CisJCWlmIChzZHAtPnR5cGUgPT0gVFlQRV9SQkMpCisJCQlnb3RvIGRlZmF1bHRzOworCQllbHNlIHsKKwkJCW1vZGVwYWdlID0gMHgzRjsKKwkJCWRiZCA9IDA7CisJCX0KKwl9IGVsc2UgaWYgKHNkcC0+dHlwZSA9PSBUWVBFX1JCQykgewogCQltb2RlcGFnZSA9IDY7CiAJCWRiZCA9IDg7CiAJfSBlbHNlIHsKQEAgLTE5MzMsMTMgKzE5NTcsMTEgQEAKIAkgKi8KIAlpZiAobGVuIDwgMykKIAkJZ290byBiYWRfc2Vuc2U7Ci0JaWYgKGxlbiA+IDIwKQotCQlsZW4gPSAyMDsKLQotCS8qIFRha2UgaGVhZGVycyBhbmQgYmxvY2sgZGVzY3JpcHRvcnMgaW50byBhY2NvdW50ICovCi0JbGVuICs9IGRhdGEuaGVhZGVyX2xlbmd0aCArIGRhdGEuYmxvY2tfZGVzY3JpcHRvcl9sZW5ndGg7Ci0JaWYgKGxlbiA+IFNEX0JVRl9TSVpFKQotCQlnb3RvIGJhZF9zZW5zZTsKKwllbHNlIGlmIChsZW4gPiBTRF9CVUZfU0laRSkgeworCQlzZF9wcmludGsoS0VSTl9OT1RJQ0UsIHNka3AsICJUcnVuY2F0aW5nIG1vZGUgcGFyYW1ldGVyICIKKwkJCSAgImRhdGEgZnJvbSAlZCB0byAlZCBieXRlc1xuIiwgbGVuLCBTRF9CVUZfU0laRSk7CisJCWxlbiA9IFNEX0JVRl9TSVpFOworCX0KIAogCS8qIEdldCB0aGUgZGF0YSAqLwogCXJlcyA9IHNkX2RvX21vZGVfc2Vuc2Uoc2RwLCBkYmQsIG1vZGVwYWdlLCBidWZmZXIsIGxlbiwgJmRhdGEsICZzc2hkcik7CkBAIC0xOTQ3LDE2ICsxOTY5LDQ1IEBACiAJaWYgKHNjc2lfc3RhdHVzX2lzX2dvb2QocmVzKSkgewogCQlpbnQgb2Zmc2V0ID0gZGF0YS5oZWFkZXJfbGVuZ3RoICsgZGF0YS5ibG9ja19kZXNjcmlwdG9yX2xlbmd0aDsKIAotCQlpZiAob2Zmc2V0ID49IFNEX0JVRl9TSVpFIC0gMikgewotCQkJc2RfcHJpbnRrKEtFUk5fRVJSLCBzZGtwLCAiTWFsZm9ybWVkIE1PREUgU0VOU0UgcmVzcG9uc2VcbiIpOwotCQkJZ290byBkZWZhdWx0czsKKwkJd2hpbGUgKG9mZnNldCA8IGxlbikgeworCQkJdTggcGFnZV9jb2RlID0gYnVmZmVyW29mZnNldF0gJiAweDNGOworCQkJdTggc3BmICAgICAgID0gYnVmZmVyW29mZnNldF0gJiAweDQwOworCisJCQlpZiAocGFnZV9jb2RlID09IDggfHwgcGFnZV9jb2RlID09IDYpIHsKKwkJCQkvKiBXZSdyZSBpbnRlcmVzdGVkIG9ubHkgaW4gdGhlIGZpcnN0IDMgYnl0ZXMuCisJCQkJICovCisJCQkJaWYgKGxlbiAtIG9mZnNldCA8PSAyKSB7CisJCQkJCXNkX3ByaW50ayhLRVJOX0VSUiwgc2RrcCwgIkluY29tcGxldGUgIgorCQkJCQkJICAibW9kZSBwYXJhbWV0ZXIgZGF0YVxuIik7CisJCQkJCWdvdG8gZGVmYXVsdHM7CisJCQkJfSBlbHNlIHsKKwkJCQkJbW9kZXBhZ2UgPSBwYWdlX2NvZGU7CisJCQkJCWdvdG8gUGFnZV9mb3VuZDsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCS8qIEdvIHRvIHRoZSBuZXh0IHBhZ2UgKi8KKwkJCQlpZiAoc3BmICYmIGxlbiAtIG9mZnNldCA+IDMpCisJCQkJCW9mZnNldCArPSA0ICsgKGJ1ZmZlcltvZmZzZXQrMl0gPDwgOCkgKworCQkJCQkJYnVmZmVyW29mZnNldCszXTsKKwkJCQllbHNlIGlmICghc3BmICYmIGxlbiAtIG9mZnNldCA+IDEpCisJCQkJCW9mZnNldCArPSAyICsgYnVmZmVyW29mZnNldCsxXTsKKwkJCQllbHNlIHsKKwkJCQkJc2RfcHJpbnRrKEtFUk5fRVJSLCBzZGtwLCAiSW5jb21wbGV0ZSAiCisJCQkJCQkgICJtb2RlIHBhcmFtZXRlciBkYXRhXG4iKTsKKwkJCQkJZ290byBkZWZhdWx0czsKKwkJCQl9CisJCQl9CiAJCX0KIAotCQlpZiAoKGJ1ZmZlcltvZmZzZXRdICYgMHgzZikgIT0gbW9kZXBhZ2UpIHsKKwkJaWYgKG1vZGVwYWdlID09IDB4M0YpIHsKKwkJCXNkX3ByaW50ayhLRVJOX0VSUiwgc2RrcCwgIk5vIENhY2hpbmcgbW9kZSBwYWdlICIKKwkJCQkgICJwcmVzZW50XG4iKTsKKwkJCWdvdG8gZGVmYXVsdHM7CisJCX0gZWxzZSBpZiAoKGJ1ZmZlcltvZmZzZXRdICYgMHgzZikgIT0gbW9kZXBhZ2UpIHsKIAkJCXNkX3ByaW50ayhLRVJOX0VSUiwgc2RrcCwgIkdvdCB3cm9uZyBwYWdlXG4iKTsKIAkJCWdvdG8gZGVmYXVsdHM7CiAJCX0KLQorCVBhZ2VfZm91bmQ6CiAJCWlmIChtb2RlcGFnZSA9PSA4KSB7CiAJCQlzZGtwLT5XQ0UgPSAoKGJ1ZmZlcltvZmZzZXQgKyAyXSAmIDB4MDQpICE9IDApOwogCQkJc2RrcC0+UkNEID0gKChidWZmZXJbb2Zmc2V0ICsgMl0gJiAweDAxKSAhPSAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zdC5jIGIvZHJpdmVycy9zY3NpL3N0LmMKaW5kZXggNWI3Mzg4Zi4uMTg3MWI4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3N0LmMKKysrIGIvZHJpdmVycy9zY3NpL3N0LmMKQEAgLTE3LDcgKzE3LDcgQEAKICAgIExhc3QgbW9kaWZpZWQ6IDE4LUpBTi0xOTk4IFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PiBEZXZmcyBzdXBwb3J0CiAgKi8KIAotc3RhdGljIGNvbnN0IGNoYXIgKnZlcnN0ciA9ICIyMDEwMDgyOSI7CitzdGF0aWMgY29uc3QgY2hhciAqdmVyc3RyID0gIjIwMTAxMjE5IjsKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCkBAIC0zNzI5LDkgKzM3MjksMTEgQEAKIAkJYl9zaXplID0gUEFHRV9TSVpFIDw8IG9yZGVyOwogCX0gZWxzZSB7CiAJCWZvciAoYl9zaXplID0gUEFHRV9TSVpFLCBvcmRlciA9IDA7Ci0JCSAgICAgb3JkZXIgPCBTVF9NQVhfT1JERVIgJiYgYl9zaXplIDwgbmV3X3NpemU7CisJCSAgICAgb3JkZXIgPCBTVF9NQVhfT1JERVIgJiYKKwkJCSAgICAgbWF4X3NlZ3MgKiAoUEFHRV9TSVpFIDw8IG9yZGVyKSA8IG5ld19zaXplOwogCQkgICAgIG9yZGVyKyssIGJfc2l6ZSAqPSAyKQogCQkJOyAgLyogZW1wdHkgKi8KKwkJU1RidWZmZXItPnJlc2VydmVkX3BhZ2Vfb3JkZXIgPSBvcmRlcjsKIAl9CiAJaWYgKG1heF9zZWdzICogKFBBR0VfU0laRSA8PCBvcmRlcikgPCBuZXdfc2l6ZSkgewogCQlpZiAob3JkZXIgPT0gU1RfTUFYX09SREVSKQpAQCAtMzc1OCw3ICszNzYwLDYgQEAKIAkJc2VncysrOwogCX0KIAlTVGJ1ZmZlci0+Yl9kYXRhID0gcGFnZV9hZGRyZXNzKFNUYnVmZmVyLT5yZXNlcnZlZF9wYWdlc1swXSk7Ci0JU1RidWZmZXItPnJlc2VydmVkX3BhZ2Vfb3JkZXIgPSBvcmRlcjsKIAogCXJldHVybiAxOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvODI1MC5jIGIvZHJpdmVycy9zZXJpYWwvODI1MC5jCmluZGV4IDA5YTU1MDguLmIyNWU2ZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsLzgyNTAuYworKysgYi9kcml2ZXJzL3NlcmlhbC84MjUwLmMKQEAgLTQ1NCwyMSArNDU0LDQwIEBACiAJCXdyaXRlYih2YWx1ZSwgcC0+bWVtYmFzZSArIG9mZnNldCk7CiB9CiAKKy8qIFNhdmUgdGhlIExDUiB2YWx1ZSBzbyBpdCBjYW4gYmUgcmUtd3JpdHRlbiB3aGVuIGEgQnVzeSBEZXRlY3QgSVJRIG9jY3Vycy4gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBkd2FwYl9zYXZlX291dF92YWx1ZShzdHJ1Y3QgdWFydF9wb3J0ICpwLCBpbnQgb2Zmc2V0LAorCQkJCQlpbnQgdmFsdWUpCit7CisJc3RydWN0IHVhcnRfODI1MF9wb3J0ICp1cCA9CisJCWNvbnRhaW5lcl9vZihwLCBzdHJ1Y3QgdWFydF84MjUwX3BvcnQsIHBvcnQpOworCisJaWYgKG9mZnNldCA9PSBVQVJUX0xDUikKKwkJdXAtPmxjciA9IHZhbHVlOworfQorCisvKiBSZWFkIHRoZSBJRVIgdG8gZW5zdXJlIGFueSBpbnRlcnJ1cHQgaXMgY2xlYXJlZCBiZWZvcmUgcmV0dXJuaW5nIGZyb20gSVNSLiAqLworc3RhdGljIGlubGluZSB2b2lkIGR3YXBiX2NoZWNrX2NsZWFyX2llcihzdHJ1Y3QgdWFydF9wb3J0ICpwLCBpbnQgb2Zmc2V0KQoreworCWlmIChvZmZzZXQgPT0gVUFSVF9UWCB8fCBvZmZzZXQgPT0gVUFSVF9JRVIpCisJCXAtPnNlcmlhbF9pbihwLCBVQVJUX0lFUik7Cit9CisKIHN0YXRpYyB2b2lkIGR3YXBiX3NlcmlhbF9vdXQoc3RydWN0IHVhcnRfcG9ydCAqcCwgaW50IG9mZnNldCwgaW50IHZhbHVlKQogewogCWludCBzYXZlX29mZnNldCA9IG9mZnNldDsKIAlvZmZzZXQgPSBtYXBfODI1MF9vdXRfcmVnKHAsIG9mZnNldCkgPDwgcC0+cmVnc2hpZnQ7Ci0JLyogU2F2ZSB0aGUgTENSIHZhbHVlIHNvIGl0IGNhbiBiZSByZS13cml0dGVuIHdoZW4gYQotCSAqIEJ1c3kgRGV0ZWN0IGludGVycnVwdCBvY2N1cnMuICovCi0JaWYgKHNhdmVfb2Zmc2V0ID09IFVBUlRfTENSKSB7Ci0JCXN0cnVjdCB1YXJ0XzgyNTBfcG9ydCAqdXAgPSAoc3RydWN0IHVhcnRfODI1MF9wb3J0ICopcDsKLQkJdXAtPmxjciA9IHZhbHVlOwotCX0KKwlkd2FwYl9zYXZlX291dF92YWx1ZShwLCBzYXZlX29mZnNldCwgdmFsdWUpOwogCXdyaXRlYih2YWx1ZSwgcC0+bWVtYmFzZSArIG9mZnNldCk7Ci0JLyogUmVhZCB0aGUgSUVSIHRvIGVuc3VyZSBhbnkgaW50ZXJydXB0IGlzIGNsZWFyZWQgYmVmb3JlCi0JICogcmV0dXJuaW5nIGZyb20gSVNSLiAqLwotCWlmIChzYXZlX29mZnNldCA9PSBVQVJUX1RYIHx8IHNhdmVfb2Zmc2V0ID09IFVBUlRfSUVSKQotCQl2YWx1ZSA9IHAtPnNlcmlhbF9pbihwLCBVQVJUX0lFUik7CisJZHdhcGJfY2hlY2tfY2xlYXJfaWVyKHAsIHNhdmVfb2Zmc2V0KTsKK30KKworc3RhdGljIHZvaWQgZHdhcGIzMl9zZXJpYWxfb3V0KHN0cnVjdCB1YXJ0X3BvcnQgKnAsIGludCBvZmZzZXQsIGludCB2YWx1ZSkKK3sKKwlpbnQgc2F2ZV9vZmZzZXQgPSBvZmZzZXQ7CisJb2Zmc2V0ID0gbWFwXzgyNTBfb3V0X3JlZyhwLCBvZmZzZXQpIDw8IHAtPnJlZ3NoaWZ0OworCWR3YXBiX3NhdmVfb3V0X3ZhbHVlKHAsIHNhdmVfb2Zmc2V0LCB2YWx1ZSk7CisJd3JpdGVsKHZhbHVlLCBwLT5tZW1iYXNlICsgb2Zmc2V0KTsKKwlkd2FwYl9jaGVja19jbGVhcl9pZXIocCwgc2F2ZV9vZmZzZXQpOwogfQogCiBzdGF0aWMgdW5zaWduZWQgaW50IGlvX3NlcmlhbF9pbihzdHJ1Y3QgdWFydF9wb3J0ICpwLCBpbnQgb2Zmc2V0KQpAQCAtNDg1LDcgKzUwNCw4IEBACiAKIHN0YXRpYyB2b2lkIHNldF9pb19mcm9tX3VwaW8oc3RydWN0IHVhcnRfcG9ydCAqcCkKIHsKLQlzdHJ1Y3QgdWFydF84MjUwX3BvcnQgKnVwID0gKHN0cnVjdCB1YXJ0XzgyNTBfcG9ydCAqKXA7CisJc3RydWN0IHVhcnRfODI1MF9wb3J0ICp1cCA9CisJCWNvbnRhaW5lcl9vZihwLCBzdHJ1Y3QgdWFydF84MjUwX3BvcnQsIHBvcnQpOwogCXN3aXRjaCAocC0+aW90eXBlKSB7CiAJY2FzZSBVUElPX0hVQjY6CiAJCXAtPnNlcmlhbF9pbiA9IGh1YjZfc2VyaWFsX2luOwpAQCAtNTE4LDYgKzUzOCwxMSBAQAogCQlwLT5zZXJpYWxfb3V0ID0gZHdhcGJfc2VyaWFsX291dDsKIAkJYnJlYWs7CiAKKwljYXNlIFVQSU9fRFdBUEIzMjoKKwkJcC0+c2VyaWFsX2luID0gbWVtMzJfc2VyaWFsX2luOworCQlwLT5zZXJpYWxfb3V0ID0gZHdhcGIzMl9zZXJpYWxfb3V0OworCQlicmVhazsKKwogCWRlZmF1bHQ6CiAJCXAtPnNlcmlhbF9pbiA9IGlvX3NlcmlhbF9pbjsKIAkJcC0+c2VyaWFsX291dCA9IGlvX3NlcmlhbF9vdXQ7CkBAIC01MzYsNiArNTYxLDcgQEAKIAljYXNlIFVQSU9fTUVNMzI6CiAJY2FzZSBVUElPX0FVOgogCWNhc2UgVVBJT19EV0FQQjoKKwljYXNlIFVQSU9fRFdBUEIzMjoKIAkJcC0+c2VyaWFsX291dChwLCBvZmZzZXQsIHZhbHVlKTsKIAkJcC0+c2VyaWFsX2luKHAsIFVBUlRfTENSKTsJLyogc2FmZSwgbm8gc2lkZS1lZmZlY3RzICovCiAJCWJyZWFrOwpAQCAtNjUzLDEzICs2NzksMTMgQEAKIHsKIAlpZiAocC0+Y2FwYWJpbGl0aWVzICYgVUFSVF9DQVBfU0xFRVApIHsKIAkJaWYgKHAtPmNhcGFiaWxpdGllcyAmIFVBUlRfQ0FQX0VGUikgewotCQkJc2VyaWFsX291dHAocCwgVUFSVF9MQ1IsIDB4QkYpOworCQkJc2VyaWFsX291dHAocCwgVUFSVF9MQ1IsIFVBUlRfTENSX0NPTkZfTU9ERV9CKTsKIAkJCXNlcmlhbF9vdXRwKHAsIFVBUlRfRUZSLCBVQVJUX0VGUl9FQ0IpOwogCQkJc2VyaWFsX291dHAocCwgVUFSVF9MQ1IsIDApOwogCQl9CiAJCXNlcmlhbF9vdXRwKHAsIFVBUlRfSUVSLCBzbGVlcCA/IFVBUlRfSUVSWF9TTEVFUCA6IDApOwogCQlpZiAocC0+Y2FwYWJpbGl0aWVzICYgVUFSVF9DQVBfRUZSKSB7Ci0JCQlzZXJpYWxfb3V0cChwLCBVQVJUX0xDUiwgMHhCRik7CisJCQlzZXJpYWxfb3V0cChwLCBVQVJUX0xDUiwgVUFSVF9MQ1JfQ09ORl9NT0RFX0IpOwogCQkJc2VyaWFsX291dHAocCwgVUFSVF9FRlIsIDApOwogCQkJc2VyaWFsX291dHAocCwgVUFSVF9MQ1IsIDApOwogCQl9CkBAIC03NTIsNyArNzc4LDcgQEAKIAlzZXJpYWxfb3V0cCh1cCwgVUFSVF9GQ1IsIFVBUlRfRkNSX0VOQUJMRV9GSUZPIHwKIAkJICAgIFVBUlRfRkNSX0NMRUFSX1JDVlIgfCBVQVJUX0ZDUl9DTEVBUl9YTUlUKTsKIAlzZXJpYWxfb3V0cCh1cCwgVUFSVF9NQ1IsIFVBUlRfTUNSX0xPT1ApOwotCXNlcmlhbF9vdXRwKHVwLCBVQVJUX0xDUiwgVUFSVF9MQ1JfRExBQik7CisJc2VyaWFsX291dHAodXAsIFVBUlRfTENSLCBVQVJUX0xDUl9DT05GX01PREVfQSk7CiAJb2xkX2RsID0gc2VyaWFsX2RsX3JlYWQodXApOwogCXNlcmlhbF9kbF93cml0ZSh1cCwgMHgwMDAxKTsKIAlzZXJpYWxfb3V0cCh1cCwgVUFSVF9MQ1IsIDB4MDMpOwpAQCAtNzY0LDcgKzc5MCw3IEBACiAJCXNlcmlhbF9pbnAodXAsIFVBUlRfUlgpOwogCXNlcmlhbF9vdXRwKHVwLCBVQVJUX0ZDUiwgb2xkX2Zjcik7CiAJc2VyaWFsX291dHAodXAsIFVBUlRfTUNSLCBvbGRfbWNyKTsKLQlzZXJpYWxfb3V0cCh1cCwgVUFSVF9MQ1IsIFVBUlRfTENSX0RMQUIpOworCXNlcmlhbF9vdXRwKHVwLCBVQVJUX0xDUiwgVUFSVF9MQ1JfQ09ORl9NT0RFX0EpOwogCXNlcmlhbF9kbF93cml0ZSh1cCwgb2xkX2RsKTsKIAlzZXJpYWxfb3V0cCh1cCwgVUFSVF9MQ1IsIG9sZF9sY3IpOwogCkBAIC03ODIsNyArODA4LDcgQEAKIAl1bnNpZ25lZCBpbnQgaWQ7CiAKIAlvbGRfbGNyID0gc2VyaWFsX2lucChwLCBVQVJUX0xDUik7Ci0Jc2VyaWFsX291dHAocCwgVUFSVF9MQ1IsIFVBUlRfTENSX0RMQUIpOworCXNlcmlhbF9vdXRwKHAsIFVBUlRfTENSLCBVQVJUX0xDUl9DT05GX01PREVfQSk7CiAKIAlvbGRfZGxsID0gc2VyaWFsX2lucChwLCBVQVJUX0RMTCk7CiAJb2xkX2RsbSA9IHNlcmlhbF9pbnAocCwgVUFSVF9ETE0pOwpAQCAtODM2LDcgKzg2Miw3IEBACiAJICogcmVjb21tZW5kZWQgZm9yIG5ldyBkZXNpZ25zKS4KIAkgKi8KIAl1cC0+YWNyID0gMDsKLQlzZXJpYWxfb3V0KHVwLCBVQVJUX0xDUiwgMHhCRik7CisJc2VyaWFsX291dCh1cCwgVUFSVF9MQ1IsIFVBUlRfTENSX0NPTkZfTU9ERV9CKTsKIAlzZXJpYWxfb3V0KHVwLCBVQVJUX0VGUiwgVUFSVF9FRlJfRUNCKTsKIAlzZXJpYWxfb3V0KHVwLCBVQVJUX0xDUiwgMHgwMCk7CiAJaWQxID0gc2VyaWFsX2ljcl9yZWFkKHVwLCBVQVJUX0lEMSk7CkBAIC05NDUsNyArOTcxLDcgQEAKIAkgKiBDaGVjayBmb3IgcHJlc2VuY2Ugb2YgdGhlIEVGUiB3aGVuIERMQUIgaXMgc2V0LgogCSAqIE9ubHkgU1QxNkM2NTBWMSBVQVJUcyBwYXNzIHRoaXMgdGVzdC4KIAkgKi8KLQlzZXJpYWxfb3V0cCh1cCwgVUFSVF9MQ1IsIFVBUlRfTENSX0RMQUIpOworCXNlcmlhbF9vdXRwKHVwLCBVQVJUX0xDUiwgVUFSVF9MQ1JfQ09ORl9NT0RFX0EpOwogCWlmIChzZXJpYWxfaW4odXAsIFVBUlRfRUZSKSA9PSAwKSB7CiAJCXNlcmlhbF9vdXRwKHVwLCBVQVJUX0VGUiwgMHhBOCk7CiAJCWlmIChzZXJpYWxfaW4odXAsIFVBUlRfRUZSKSAhPSAwKSB7CkBAIC05NjMsNyArOTg5LDcgQEAKIAkgKiBNYXliZSBpdCByZXF1aXJlcyAweGJmIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIExDUi4KIAkgKiAob3RoZXIgU1QxNkM2NTBWMiBVQVJUcywgVEkxNkM3NTJBLCBldGMpCiAJICovCi0Jc2VyaWFsX291dHAodXAsIFVBUlRfTENSLCAweEJGKTsKKwlzZXJpYWxfb3V0cCh1cCwgVUFSVF9MQ1IsIFVBUlRfTENSX0NPTkZfTU9ERV9CKTsKIAlpZiAoc2VyaWFsX2luKHVwLCBVQVJUX0VGUikgPT0gMCAmJiAhYnJva2VuX2Vmcih1cCkpIHsKIAkJREVCVUdfQVVUT0NPTkYoIkVGUnYyICIpOwogCQlhdXRvY29uZmlnX2hhc19lZnIodXApOwpAQCAtMTAyNCw3ICsxMDUwLDcgQEAKIAlzZXJpYWxfb3V0cCh1cCwgVUFSVF9GQ1IsIFVBUlRfRkNSX0VOQUJMRV9GSUZPIHwgVUFSVF9GQ1I3XzY0QllURSk7CiAJc3RhdHVzMSA9IHNlcmlhbF9pbih1cCwgVUFSVF9JSVIpID4+IDU7CiAJc2VyaWFsX291dHAodXAsIFVBUlRfRkNSLCBVQVJUX0ZDUl9FTkFCTEVfRklGTyk7Ci0Jc2VyaWFsX291dHAodXAsIFVBUlRfTENSLCBVQVJUX0xDUl9ETEFCKTsKKwlzZXJpYWxfb3V0cCh1cCwgVUFSVF9MQ1IsIFVBUlRfTENSX0NPTkZfTU9ERV9BKTsKIAlzZXJpYWxfb3V0cCh1cCwgVUFSVF9GQ1IsIFVBUlRfRkNSX0VOQUJMRV9GSUZPIHwgVUFSVF9GQ1I3XzY0QllURSk7CiAJc3RhdHVzMiA9IHNlcmlhbF9pbih1cCwgVUFSVF9JSVIpID4+IDU7CiAJc2VyaWFsX291dHAodXAsIFVBUlRfRkNSLCBVQVJUX0ZDUl9FTkFCTEVfRklGTyk7CkBAIC0xMTgzLDcgKzEyMDksNyBAQAogCSAqIFdlIGFsc28gaW5pdGlhbGlzZSB0aGUgRUZSIChpZiBhbnkpIHRvIHplcm8gZm9yIGxhdGVyLiAgVGhlCiAJICogRUZSIG9jY3VwaWVzIHRoZSBzYW1lIHJlZ2lzdGVyIGxvY2F0aW9uIGFzIHRoZSBGQ1IgYW5kIElJUi4KIAkgKi8KLQlzZXJpYWxfb3V0cCh1cCwgVUFSVF9MQ1IsIDB4QkYpOworCXNlcmlhbF9vdXRwKHVwLCBVQVJUX0xDUiwgVUFSVF9MQ1JfQ09ORl9NT0RFX0IpOwogCXNlcmlhbF9vdXRwKHVwLCBVQVJUX0VGUiwgMCk7CiAJc2VyaWFsX291dHAodXAsIFVBUlRfTENSLCAwKTsKIApAQCAtMTMxOSw3ICsxMzQ1LDggQEAKIAogc3RhdGljIHZvaWQgc2VyaWFsODI1MF9zdG9wX3R4KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7Ci0Jc3RydWN0IHVhcnRfODI1MF9wb3J0ICp1cCA9IChzdHJ1Y3QgdWFydF84MjUwX3BvcnQgKilwb3J0OworCXN0cnVjdCB1YXJ0XzgyNTBfcG9ydCAqdXAgPQorCQljb250YWluZXJfb2YocG9ydCwgc3RydWN0IHVhcnRfODI1MF9wb3J0LCBwb3J0KTsKIAogCV9fc3RvcF90eCh1cCk7CiAKQEAgLTEzMzYsNyArMTM2Myw4IEBACiAKIHN0YXRpYyB2b2lkIHNlcmlhbDgyNTBfc3RhcnRfdHgoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKLQlzdHJ1Y3QgdWFydF84MjUwX3BvcnQgKnVwID0gKHN0cnVjdCB1YXJ0XzgyNTBfcG9ydCAqKXBvcnQ7CisJc3RydWN0IHVhcnRfODI1MF9wb3J0ICp1cCA9CisJCWNvbnRhaW5lcl9vZihwb3J0LCBzdHJ1Y3QgdWFydF84MjUwX3BvcnQsIHBvcnQpOwogCiAJaWYgKCEodXAtPmllciAmIFVBUlRfSUVSX1RIUkkpKSB7CiAJCXVwLT5pZXIgfD0gVUFSVF9JRVJfVEhSSTsKQEAgLTEzNjQsNyArMTM5Miw4IEBACiAKIHN0YXRpYyB2b2lkIHNlcmlhbDgyNTBfc3RvcF9yeChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewotCXN0cnVjdCB1YXJ0XzgyNTBfcG9ydCAqdXAgPSAoc3RydWN0IHVhcnRfODI1MF9wb3J0ICopcG9ydDsKKwlzdHJ1Y3QgdWFydF84MjUwX3BvcnQgKnVwID0KKwkJY29udGFpbmVyX29mKHBvcnQsIHN0cnVjdCB1YXJ0XzgyNTBfcG9ydCwgcG9ydCk7CiAKIAl1cC0+aWVyICY9IH5VQVJUX0lFUl9STFNJOwogCXVwLT5wb3J0LnJlYWRfc3RhdHVzX21hc2sgJj0gflVBUlRfTFNSX0RSOwpAQCAtMTM3Myw3ICsxNDAyLDggQEAKIAogc3RhdGljIHZvaWQgc2VyaWFsODI1MF9lbmFibGVfbXMoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKLQlzdHJ1Y3QgdWFydF84MjUwX3BvcnQgKnVwID0gKHN0cnVjdCB1YXJ0XzgyNTBfcG9ydCAqKXBvcnQ7CisJc3RydWN0IHVhcnRfODI1MF9wb3J0ICp1cCA9CisJCWNvbnRhaW5lcl9vZihwb3J0LCBzdHJ1Y3QgdWFydF84MjUwX3BvcnQsIHBvcnQpOwogCiAJLyogbm8gTVNSIGNhcGFiaWxpdGllcyAqLwogCWlmICh1cC0+YnVncyAmIFVBUlRfQlVHX05PTVNSKQpAQCAtMTU4MSw3ICsxNjExLDggQEAKIAkJCWhhbmRsZWQgPSAxOwogCiAJCQllbmQgPSBOVUxMOwotCQl9IGVsc2UgaWYgKHVwLT5wb3J0LmlvdHlwZSA9PSBVUElPX0RXQVBCICYmCisJCX0gZWxzZSBpZiAoKHVwLT5wb3J0LmlvdHlwZSA9PSBVUElPX0RXQVBCIHx8CisJCQkgICAgdXAtPnBvcnQuaW90eXBlID09IFVQSU9fRFdBUEIzMikgJiYKIAkJCSAgKGlpciAmIFVBUlRfSUlSX0JVU1kpID09IFVBUlRfSUlSX0JVU1kpIHsKIAkJCS8qIFRoZSBEZXNpZ25XYXJlIEFQQiBVQVJUIGhhcyBhbiBCdXN5IERldGVjdCAoMHgwNykKIAkJCSAqIGludGVycnVwdCBtZWFuaW5nIGFuIExDUiB3cml0ZSBhdHRlbXB0IG9jY3VyZWQgd2hpbGUgdGhlCkBAIC0xNzgxLDcgKzE4MTIsOCBAQAogCiBzdGF0aWMgdW5zaWduZWQgaW50IHNlcmlhbDgyNTBfdHhfZW1wdHkoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKLQlzdHJ1Y3QgdWFydF84MjUwX3BvcnQgKnVwID0gKHN0cnVjdCB1YXJ0XzgyNTBfcG9ydCAqKXBvcnQ7CisJc3RydWN0IHVhcnRfODI1MF9wb3J0ICp1cCA9CisJCWNvbnRhaW5lcl9vZihwb3J0LCBzdHJ1Y3QgdWFydF84MjUwX3BvcnQsIHBvcnQpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgaW50IGxzcjsKIApAQCAtMTc5NSw3ICsxODI3LDggQEAKIAogc3RhdGljIHVuc2lnbmVkIGludCBzZXJpYWw4MjUwX2dldF9tY3RybChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewotCXN0cnVjdCB1YXJ0XzgyNTBfcG9ydCAqdXAgPSAoc3RydWN0IHVhcnRfODI1MF9wb3J0ICopcG9ydDsKKwlzdHJ1Y3QgdWFydF84MjUwX3BvcnQgKnVwID0KKwkJY29udGFpbmVyX29mKHBvcnQsIHN0cnVjdCB1YXJ0XzgyNTBfcG9ydCwgcG9ydCk7CiAJdW5zaWduZWQgaW50IHN0YXR1czsKIAl1bnNpZ25lZCBpbnQgcmV0OwogCkBAIC0xODE1LDcgKzE4NDgsOCBAQAogCiBzdGF0aWMgdm9pZCBzZXJpYWw4MjUwX3NldF9tY3RybChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCB1bnNpZ25lZCBpbnQgbWN0cmwpCiB7Ci0Jc3RydWN0IHVhcnRfODI1MF9wb3J0ICp1cCA9IChzdHJ1Y3QgdWFydF84MjUwX3BvcnQgKilwb3J0OworCXN0cnVjdCB1YXJ0XzgyNTBfcG9ydCAqdXAgPQorCQljb250YWluZXJfb2YocG9ydCwgc3RydWN0IHVhcnRfODI1MF9wb3J0LCBwb3J0KTsKIAl1bnNpZ25lZCBjaGFyIG1jciA9IDA7CiAKIAlpZiAobWN0cmwgJiBUSU9DTV9SVFMpCkBAIC0xODM2LDcgKzE4NzAsOCBAQAogCiBzdGF0aWMgdm9pZCBzZXJpYWw4MjUwX2JyZWFrX2N0bChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBpbnQgYnJlYWtfc3RhdGUpCiB7Ci0Jc3RydWN0IHVhcnRfODI1MF9wb3J0ICp1cCA9IChzdHJ1Y3QgdWFydF84MjUwX3BvcnQgKilwb3J0OworCXN0cnVjdCB1YXJ0XzgyNTBfcG9ydCAqdXAgPQorCQljb250YWluZXJfb2YocG9ydCwgc3RydWN0IHVhcnRfODI1MF9wb3J0LCBwb3J0KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnVwLT5wb3J0LmxvY2ssIGZsYWdzKTsKQEAgLTE4OTAsNyArMTkyNSw4IEBACiAKIHN0YXRpYyBpbnQgc2VyaWFsODI1MF9nZXRfcG9sbF9jaGFyKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7Ci0Jc3RydWN0IHVhcnRfODI1MF9wb3J0ICp1cCA9IChzdHJ1Y3QgdWFydF84MjUwX3BvcnQgKilwb3J0OworCXN0cnVjdCB1YXJ0XzgyNTBfcG9ydCAqdXAgPQorCQljb250YWluZXJfb2YocG9ydCwgc3RydWN0IHVhcnRfODI1MF9wb3J0LCBwb3J0KTsKIAl1bnNpZ25lZCBjaGFyIGxzciA9IHNlcmlhbF9pbnAodXAsIFVBUlRfTFNSKTsKIAogCWlmICghKGxzciAmIFVBUlRfTFNSX0RSKSkKQEAgLTE5MDQsNyArMTk0MCw4IEBACiAJCQkgdW5zaWduZWQgY2hhciBjKQogewogCXVuc2lnbmVkIGludCBpZXI7Ci0Jc3RydWN0IHVhcnRfODI1MF9wb3J0ICp1cCA9IChzdHJ1Y3QgdWFydF84MjUwX3BvcnQgKilwb3J0OworCXN0cnVjdCB1YXJ0XzgyNTBfcG9ydCAqdXAgPQorCQljb250YWluZXJfb2YocG9ydCwgc3RydWN0IHVhcnRfODI1MF9wb3J0LCBwb3J0KTsKIAogCS8qCiAJICoJRmlyc3Qgc2F2ZSB0aGUgSUVSIHRoZW4gZGlzYWJsZSB0aGUgaW50ZXJydXB0cwpAQCAtMTkzOCwxMSArMTk3NSwxNCBAQAogCiBzdGF0aWMgaW50IHNlcmlhbDgyNTBfc3RhcnR1cChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewotCXN0cnVjdCB1YXJ0XzgyNTBfcG9ydCAqdXAgPSAoc3RydWN0IHVhcnRfODI1MF9wb3J0ICopcG9ydDsKKwlzdHJ1Y3QgdWFydF84MjUwX3BvcnQgKnVwID0KKwkJY29udGFpbmVyX29mKHBvcnQsIHN0cnVjdCB1YXJ0XzgyNTBfcG9ydCwgcG9ydCk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBjaGFyIGxzciwgaWlyOwogCWludCByZXR2YWw7CiAKKwl1cC0+cG9ydC5maWZvc2l6ZSA9IHVhcnRfY29uZmlnW3VwLT5wb3J0LnR5cGVdLmZpZm9fc2l6ZTsKKwl1cC0+dHhfbG9hZHN6ID0gdWFydF9jb25maWdbdXAtPnBvcnQudHlwZV0udHhfbG9hZHN6OwogCXVwLT5jYXBhYmlsaXRpZXMgPSB1YXJ0X2NvbmZpZ1t1cC0+cG9ydC50eXBlXS5mbGFnczsKIAl1cC0+bWNyID0gMDsKIApAQCAtMTk1Miw3ICsxOTkyLDcgQEAKIAlpZiAodXAtPnBvcnQudHlwZSA9PSBQT1JUXzE2Qzk1MCkgewogCQkvKiBXYWtlIHVwIGFuZCBpbml0aWFsaXplIFVBUlQgKi8KIAkJdXAtPmFjciA9IDA7Ci0JCXNlcmlhbF9vdXRwKHVwLCBVQVJUX0xDUiwgMHhCRik7CisJCXNlcmlhbF9vdXRwKHVwLCBVQVJUX0xDUiwgVUFSVF9MQ1JfQ09ORl9NT0RFX0IpOwogCQlzZXJpYWxfb3V0cCh1cCwgVUFSVF9FRlIsIFVBUlRfRUZSX0VDQik7CiAJCXNlcmlhbF9vdXRwKHVwLCBVQVJUX0lFUiwgMCk7CiAJCXNlcmlhbF9vdXRwKHVwLCBVQVJUX0xDUiwgMCk7CkBAIC0yMDAyLDcgKzIwNDIsNyBAQAogCWlmICh1cC0+cG9ydC50eXBlID09IFBPUlRfMTY4NTApIHsKIAkJdW5zaWduZWQgY2hhciBmY3RyOwogCi0JCXNlcmlhbF9vdXRwKHVwLCBVQVJUX0xDUiwgMHhiZik7CisJCXNlcmlhbF9vdXRwKHVwLCBVQVJUX0xDUiwgVUFSVF9MQ1JfQ09ORl9NT0RFX0IpOwogCiAJCWZjdHIgPSBzZXJpYWxfaW5wKHVwLCBVQVJUX0ZDVFIpICYgfihVQVJUX0ZDVFJfUlh8VUFSVF9GQ1RSX1RYKTsKIAkJc2VyaWFsX291dHAodXAsIFVBUlRfRkNUUiwgZmN0ciB8IFVBUlRfRkNUUl9UUkdEIHwgVUFSVF9GQ1RSX1JYKTsKQEAgLTIxNjYsNyArMjIwNiw4IEBACiAKIHN0YXRpYyB2b2lkIHNlcmlhbDgyNTBfc2h1dGRvd24oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKLQlzdHJ1Y3QgdWFydF84MjUwX3BvcnQgKnVwID0gKHN0cnVjdCB1YXJ0XzgyNTBfcG9ydCAqKXBvcnQ7CisJc3RydWN0IHVhcnRfODI1MF9wb3J0ICp1cCA9CisJCWNvbnRhaW5lcl9vZihwb3J0LCBzdHJ1Y3QgdWFydF84MjUwX3BvcnQsIHBvcnQpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAkvKgpAQCAtMjIzNSw3ICsyMjc2LDggQEAKIHNlcmlhbDgyNTBfZG9fc2V0X3Rlcm1pb3Moc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgc3RydWN0IGt0ZXJtaW9zICp0ZXJtaW9zLAogCQkgICAgICAgICAgc3RydWN0IGt0ZXJtaW9zICpvbGQpCiB7Ci0Jc3RydWN0IHVhcnRfODI1MF9wb3J0ICp1cCA9IChzdHJ1Y3QgdWFydF84MjUwX3BvcnQgKilwb3J0OworCXN0cnVjdCB1YXJ0XzgyNTBfcG9ydCAqdXAgPQorCQljb250YWluZXJfb2YocG9ydCwgc3RydWN0IHVhcnRfODI1MF9wb3J0LCBwb3J0KTsKIAl1bnNpZ25lZCBjaGFyIGN2YWwsIGZjciA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBpbnQgYmF1ZCwgcXVvdDsKQEAgLTIzNjMsNyArMjQwNSw3IEBACiAJCWlmICh0ZXJtaW9zLT5jX2NmbGFnICYgQ1JUU0NUUykKIAkJCWVmciB8PSBVQVJUX0VGUl9DVFM7CiAKLQkJc2VyaWFsX291dHAodXAsIFVBUlRfTENSLCAweEJGKTsKKwkJc2VyaWFsX291dHAodXAsIFVBUlRfTENSLCBVQVJUX0xDUl9DT05GX01PREVfQik7CiAJCXNlcmlhbF9vdXRwKHVwLCBVQVJUX0VGUiwgZWZyKTsKIAl9CiAKQEAgLTI0MzUsNyArMjQ3Nyw4IEBACiB2b2lkIHNlcmlhbDgyNTBfZG9fcG0oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgdW5zaWduZWQgaW50IHN0YXRlLAogCQkgICAgICB1bnNpZ25lZCBpbnQgb2xkc3RhdGUpCiB7Ci0Jc3RydWN0IHVhcnRfODI1MF9wb3J0ICpwID0gKHN0cnVjdCB1YXJ0XzgyNTBfcG9ydCAqKXBvcnQ7CisJc3RydWN0IHVhcnRfODI1MF9wb3J0ICpwID0KKwkJY29udGFpbmVyX29mKHBvcnQsIHN0cnVjdCB1YXJ0XzgyNTBfcG9ydCwgcG9ydCk7CiAKIAlzZXJpYWw4MjUwX3NldF9zbGVlcChwLCBzdGF0ZSAhPSAwKTsKIH0KQEAgLTI0NzYsNiArMjUxOSw3IEBACiAJY2FzZSBVUElPX01FTTMyOgogCWNhc2UgVVBJT19NRU06CiAJY2FzZSBVUElPX0RXQVBCOgorCWNhc2UgVVBJT19EV0FQQjMyOgogCQlpZiAoIXVwLT5wb3J0Lm1hcGJhc2UpCiAJCQlicmVhazsKIApAQCAtMjUxMyw2ICsyNTU3LDcgQEAKIAljYXNlIFVQSU9fTUVNMzI6CiAJY2FzZSBVUElPX01FTToKIAljYXNlIFVQSU9fRFdBUEI6CisJY2FzZSBVUElPX0RXQVBCMzI6CiAJCWlmICghdXAtPnBvcnQubWFwYmFzZSkKIAkJCWJyZWFrOwogCkBAIC0yNTY2LDcgKzI2MTEsOCBAQAogCiBzdGF0aWMgdm9pZCBzZXJpYWw4MjUwX3JlbGVhc2VfcG9ydChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewotCXN0cnVjdCB1YXJ0XzgyNTBfcG9ydCAqdXAgPSAoc3RydWN0IHVhcnRfODI1MF9wb3J0ICopcG9ydDsKKwlzdHJ1Y3QgdWFydF84MjUwX3BvcnQgKnVwID0KKwkJY29udGFpbmVyX29mKHBvcnQsIHN0cnVjdCB1YXJ0XzgyNTBfcG9ydCwgcG9ydCk7CiAKIAlzZXJpYWw4MjUwX3JlbGVhc2Vfc3RkX3Jlc291cmNlKHVwKTsKIAlpZiAodXAtPnBvcnQudHlwZSA9PSBQT1JUX1JTQSkKQEAgLTI1NzUsNyArMjYyMSw4IEBACiAKIHN0YXRpYyBpbnQgc2VyaWFsODI1MF9yZXF1ZXN0X3BvcnQoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKLQlzdHJ1Y3QgdWFydF84MjUwX3BvcnQgKnVwID0gKHN0cnVjdCB1YXJ0XzgyNTBfcG9ydCAqKXBvcnQ7CisJc3RydWN0IHVhcnRfODI1MF9wb3J0ICp1cCA9CisJCWNvbnRhaW5lcl9vZihwb3J0LCBzdHJ1Y3QgdWFydF84MjUwX3BvcnQsIHBvcnQpOwogCWludCByZXQgPSAwOwogCiAJcmV0ID0gc2VyaWFsODI1MF9yZXF1ZXN0X3N0ZF9yZXNvdXJjZSh1cCk7CkBAIC0yNTkwLDcgKzI2MzcsOCBAQAogCiBzdGF0aWMgdm9pZCBzZXJpYWw4MjUwX2NvbmZpZ19wb3J0KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIGludCBmbGFncykKIHsKLQlzdHJ1Y3QgdWFydF84MjUwX3BvcnQgKnVwID0gKHN0cnVjdCB1YXJ0XzgyNTBfcG9ydCAqKXBvcnQ7CisJc3RydWN0IHVhcnRfODI1MF9wb3J0ICp1cCA9CisJCWNvbnRhaW5lcl9vZihwb3J0LCBzdHJ1Y3QgdWFydF84MjUwX3BvcnQsIHBvcnQpOwogCWludCBwcm9iZWZsYWdzID0gUFJPQkVfQU5ZOwogCWludCByZXQ7CiAKQEAgLTI3NzEsNyArMjgxOSw4IEBACiAKIHN0YXRpYyB2b2lkIHNlcmlhbDgyNTBfY29uc29sZV9wdXRjaGFyKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIGludCBjaCkKIHsKLQlzdHJ1Y3QgdWFydF84MjUwX3BvcnQgKnVwID0gKHN0cnVjdCB1YXJ0XzgyNTBfcG9ydCAqKXBvcnQ7CisJc3RydWN0IHVhcnRfODI1MF9wb3J0ICp1cCA9CisJCWNvbnRhaW5lcl9vZihwb3J0LCBzdHJ1Y3QgdWFydF84MjUwX3BvcnQsIHBvcnQpOwogCiAJd2FpdF9mb3JfeG1pdHIodXAsIFVBUlRfTFNSX1RIUkUpOwogCXNlcmlhbF9vdXQodXAsIFVBUlRfVFgsIGNoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsLzgyNTBfcGNpLmMgYi9kcml2ZXJzL3NlcmlhbC84MjUwX3BjaS5jCmluZGV4IDg0MmUzYjIuLjhiODkzMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsLzgyNTBfcGNpLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvODI1MF9wY2kuYwpAQCAtOTU3LDYgKzk1NywyMiBAQAogCXJldHVybiBzZXR1cF9wb3J0KHByaXYsIHBvcnQsIGJhciwgb2Zmc2V0LCBib2FyZC0+cmVnX3NoaWZ0KTsKIH0KIAorc3RhdGljIGludAorY2U0MTAwX3NlcmlhbF9zZXR1cChzdHJ1Y3Qgc2VyaWFsX3ByaXZhdGUgKnByaXYsCisJCSAgY29uc3Qgc3RydWN0IHBjaXNlcmlhbF9ib2FyZCAqYm9hcmQsCisJCSAgc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgaW50IGlkeCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gc2V0dXBfcG9ydChwcml2LCBwb3J0LCAwLCAwLCBib2FyZC0+cmVnX3NoaWZ0KTsKKwlwb3J0LT5pb3R5cGUgPSBVUElPX01FTTMyOworCXBvcnQtPnR5cGUgPSBQT1JUX1hTQ0FMRTsKKwlwb3J0LT5mbGFncyA9IChwb3J0LT5mbGFncyB8IFVQRl9GSVhFRF9QT1JUIHwgVVBGX0ZJWEVEX1RZUEUpOworCXBvcnQtPnJlZ3NoaWZ0ID0gMjsKKworCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyBpbnQgc2tpcF90eF9lbl9zZXR1cChzdHJ1Y3Qgc2VyaWFsX3ByaXZhdGUgKnByaXYsCiAJCQljb25zdCBzdHJ1Y3QgcGNpc2VyaWFsX2JvYXJkICpib2FyZCwKIAkJCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIGludCBpZHgpCkBAIC05ODEsNiArOTk3LDcgQEAKICNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9QT0NUQUwyMzIJMHgwMzA4CiAjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfUE9DVEFMNDIyCTB4MDQwOAogI2RlZmluZSBQQ0lfVkVORE9SX0lEX0FEVkFOVEVDSAkJMHgxM2ZlCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfQ0U0MTAwX1VBUlQgMHgyZTY2CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURWQU5URUNIX1BDSTM2MjAJMHgzNjIwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElUQU5fMjAwSQkweDgwMjgKICNkZWZpbmUgUENJX0RFVklDRV9JRF9USVRBTl80MDBJCTB4ODA0OApAQCAtMTA3Miw2ICsxMDg5LDEzIEBACiAJCS5zdWJkZXZpY2UJPSBQQ0lfQU5ZX0lELAogCQkuc2V0dXAJCT0gc2tpcF90eF9lbl9zZXR1cCwKIAl9LAorCXsKKwkJLnZlbmRvcgkJPSBQQ0lfVkVORE9SX0lEX0lOVEVMLAorCQkuZGV2aWNlCQk9IFBDSV9ERVZJQ0VfSURfSU5URUxfQ0U0MTAwX1VBUlQsCisJCS5zdWJ2ZW5kb3IJPSBQQ0lfQU5ZX0lELAorCQkuc3ViZGV2aWNlCT0gUENJX0FOWV9JRCwKKwkJLnNldHVwCQk9IGNlNDEwMF9zZXJpYWxfc2V0dXAsCisJfSwKIAkvKgogCSAqIElURQogCSAqLwpAQCAtMTU5Miw2ICsxNjE2LDcgQEAKIAlwYm5fQURESURBVEFfUENJZV8yXzM5MDYyNTAsCiAJcGJuX0FERElEQVRBX1BDSWVfNF8zOTA2MjUwLAogCXBibl9BRERJREFUQV9QQ0llXzhfMzkwNjI1MCwKKwlwYm5fY2U0MTAwXzFfMTE1MjAwLAogfTsKIAogLyoKQEAgLTIyODEsNiArMjMwNiwxMiBAQAogCQkudWFydF9vZmZzZXQJPSAweDIwMCwKIAkJLmZpcnN0X29mZnNldAk9IDB4MTAwMCwKIAl9LAorCVtwYm5fY2U0MTAwXzFfMTE1MjAwXSA9IHsKKwkJLmZsYWdzCQk9IEZMX0JBU0UwLAorCQkubnVtX3BvcnRzCT0gMSwKKwkJLmJhc2VfYmF1ZAk9IDkyMTYwMCwKKwkJLnJlZ19zaGlmdCAgICAgID0gMiwKKwl9LAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNvZnRtb2RlbV9ibGFja2xpc3RbXSA9IHsKQEAgLTM3NjUsNiArMzc5NiwxMSBAQAogCXsJUENJX1ZFTkRPUl9JRF9ORVRNT1MsIFBDSV9ERVZJQ0VfSURfTkVUTU9TXzk4NjUsCiAJCTB4QTAwMCwgMHgzMDA0LAogCQkwLCAwLCBwYm5fYjBfYnRfNF8xMTUyMDAgfSwKKwkvKiBJbnRlbCBDRTQxMDAgKi8KKwl7CVBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfQ0U0MTAwX1VBUlQsCisJCVBDSV9BTllfSUQsICBQQ0lfQU5ZX0lELCAwLCAwLAorCQlwYm5fY2U0MTAwXzFfMTE1MjAwIH0sCisKIAogCS8qCiAJICogVGhlc2UgZW50cmllcyBtYXRjaCBkZXZpY2VzIHdpdGggY2xhc3MgQ09NTVVOSUNBVElPTl9TRVJJQUwsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9LY29uZmlnIGIvZHJpdmVycy9zZXJpYWwvS2NvbmZpZwppbmRleCBhZmY5ZGNkLi5lYzNjMjE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9LY29uZmlnCisrKyBiL2RyaXZlcnMvc2VyaWFsL0tjb25maWcKQEAgLTEzODEsNiArMTM4MSwxNiBAQAogCWRlcGVuZHMgb24gU0VSSUFMX01TTT15CiAJc2VsZWN0IFNFUklBTF9DT1JFX0NPTlNPTEUKIAorY29uZmlnIFNFUklBTF9WVDg1MDAKKwlib29sICJWSUEgVlQ4NTAwIG9uLWNoaXAgc2VyaWFsIHBvcnQgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEFSTSAmJiBBUkNIX1ZUODUwMAorCXNlbGVjdCBTRVJJQUxfQ09SRQorCitjb25maWcgU0VSSUFMX1ZUODUwMF9DT05TT0xFCisJYm9vbCAiVklBIFZUODUwMCBzZXJpYWwgY29uc29sZSBzdXBwb3J0IgorCWRlcGVuZHMgb24gU0VSSUFMX1ZUODUwMD15CisJc2VsZWN0IFNFUklBTF9DT1JFX0NPTlNPTEUKKwogY29uZmlnIFNFUklBTF9ORVRYCiAJdHJpc3RhdGUgIk5ldFggc2VyaWFsIHBvcnQgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIEFSTSAmJiBBUkNIX05FVFgKQEAgLTE2MzIsNCArMTY0MiwxOSBAQAogCWhlbHAKIAkgIEVuYWJsZSBhIEFsdGVyYSBVQVJUIHBvcnQgdG8gYmUgdGhlIHN5c3RlbSBjb25zb2xlLgogCitjb25maWcgU0VSSUFMX0lGWDZYNjAKKyAgICAgICAgdHJpc3RhdGUgIlNQSSBwcm90b2NvbCBkcml2ZXIgZm9yIEluZmluZW9uIDZ4NjAgbW9kZW0gKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBHUElPTElCICYmIFNQSSAmJiBFWFBFUklNRU5UQUwKKwloZWxwCisJICBTdXBwb3J0IGZvciB0aGUgSUZYNng2MCBtb2RlbSBkZXZpY2VzIG9uIEludGVsIE1JRCBwbGF0Zm9ybXMuCisKK2NvbmZpZyBTRVJJQUxfUENIX1VBUlQKKwl0cmlzdGF0ZSAiSW50ZWwgRUcyMFQgUENIIFVBUlQiCisJZGVwZW5kcyBvbiBQQ0kgJiYgRE1BREVWSUNFUworCXNlbGVjdCBTRVJJQUxfQ09SRQorCXNlbGVjdCBQQ0hfRE1BCisJaGVscAorCSAgVGhpcyBkcml2ZXIgaXMgZm9yIFBDSChQbGF0Zm9ybSBjb250cm9sbGVyIEh1YikgVUFSVCBvZiBJbnRlbCBFRzIwVAorCSAgd2hpY2ggaXMgYW4gSU9IKElucHV0L091dHB1dCBIdWIpIGZvciB4ODYgZW1iZWRkZWQgcHJvY2Vzc29yLgorCSAgRW5hYmxpbmcgUENIX0RNQSwgdGhpcyBQQ0ggVUFSVCB3b3JrcyBhcyBETUEgbW9kZS4KIGVuZG1lbnUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL01ha2VmaWxlIGIvZHJpdmVycy9zZXJpYWwvTWFrZWZpbGUKaW5kZXggYzU3MDU3Ni4uOGVhOTJlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zZXJpYWwvTWFrZWZpbGUKQEAgLTgwLDEyICs4MCwxNSBAQAogb2JqLSQoQ09ORklHX1NFUklBTF9PRl9QTEFURk9STSkgKz0gb2Zfc2VyaWFsLm8KIG9iai0kKENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk1fTldQU0VSSUFMKSArPSBud3BzZXJpYWwubwogb2JqLSQoQ09ORklHX1NFUklBTF9LUzg2OTUpICs9IHNlcmlhbF9rczg2OTUubworb2JqLSQoQ09ORklHX1NFUklBTF9PTUFQKSArPSBvbWFwLXNlcmlhbC5vCiBvYmotJChDT05GSUdfS0dEQl9TRVJJQUxfQ09OU09MRSkgKz0ga2dkYm9jLm8KIG9iai0kKENPTkZJR19TRVJJQUxfUUUpICs9IHVjY191YXJ0Lm8KIG9iai0kKENPTkZJR19TRVJJQUxfVElNQkVSREFMRSkJKz0gdGltYnVhcnQubwogb2JqLSQoQ09ORklHX1NFUklBTF9HUkxJQl9HQUlTTEVSX0FQQlVBUlQpICs9IGFwYnVhcnQubwogb2JqLSQoQ09ORklHX1NFUklBTF9BTFRFUkFfSlRBR1VBUlQpICs9IGFsdGVyYV9qdGFndWFydC5vCiBvYmotJChDT05GSUdfU0VSSUFMX0FMVEVSQV9VQVJUKSArPSBhbHRlcmFfdWFydC5vCitvYmotJChDT05GSUdfU0VSSUFMX1ZUODUwMCkgKz0gdnQ4NTAwX3NlcmlhbC5vCiBvYmotJChDT05GSUdfU0VSSUFMX01SU1RfTUFYMzExMCkJKz0gbXJzdF9tYXgzMTEwLm8KIG9iai0kKENPTkZJR19TRVJJQUxfTUZEX0hTVSkJKz0gbWZkLm8KLW9iai0kKENPTkZJR19TRVJJQUxfT01BUCkgKz0gb21hcC1zZXJpYWwubworb2JqLSQoQ09ORklHX1NFUklBTF9JRlg2WDYwKSAgCSs9IGlmeDZ4NjAubworb2JqLSQoQ09ORklHX1NFUklBTF9QQ0hfVUFSVCkJKz0gcGNoX3VhcnQubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvYW1iYS1wbDAxMS5jIGIvZHJpdmVycy9zZXJpYWwvYW1iYS1wbDAxMS5jCmluZGV4IDZjYTdhNDQuLmU3NmQ3ZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2FtYmEtcGwwMTEuYworKysgYi9kcml2ZXJzL3NlcmlhbC9hbWJhLXBsMDExLmMKQEAgLTcsNiArNyw3IEBACiAgKgogICogIENvcHlyaWdodCAxOTk5IEFSTSBMaW1pdGVkCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAwIERlZXAgQmx1ZSBTb2x1dGlvbnMgTHRkLgorICogIENvcHlyaWdodCAoQykgMjAxMCBTVC1Fcmljc3NvbiBTQQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtNDgsNiArNDksOSBAQAogI2luY2x1ZGUgPGxpbnV4L2FtYmEvc2VyaWFsLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYWVuZ2luZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9zaXplcy5oPgpAQCAtNjMsMjEgKzY3LDYgQEAKICNkZWZpbmUgVUFSVF9EUl9FUlJPUgkJKFVBUlQwMTFfRFJfT0V8VUFSVDAxMV9EUl9CRXxVQVJUMDExX0RSX1BFfFVBUlQwMTFfRFJfRkUpCiAjZGVmaW5lIFVBUlRfRFVNTVlfRFJfUlgJKDEgPDwgMTYpCiAKLS8qCi0gKiBXZSB3cmFwIG91ciBwb3J0IHN0cnVjdHVyZSBhcm91bmQgdGhlIGdlbmVyaWMgdWFydF9wb3J0LgotICovCi1zdHJ1Y3QgdWFydF9hbWJhX3BvcnQgewotCXN0cnVjdCB1YXJ0X3BvcnQJcG9ydDsKLQlzdHJ1Y3QgY2xrCQkqY2xrOwotCXVuc2lnbmVkIGludAkJaW07CQkvKiBpbnRlcnJ1cHQgbWFzayAqLwotCXVuc2lnbmVkIGludAkJb2xkX3N0YXR1czsKLQl1bnNpZ25lZCBpbnQJCWlmbHM7CQkvKiB2ZW5kb3Itc3BlY2lmaWMgKi8KLQl1bnNpZ25lZCBpbnQJCWxjcmhfdHg7CS8qIHZlbmRvci1zcGVjaWZpYyAqLwotCXVuc2lnbmVkIGludAkJbGNyaF9yeDsJLyogdmVuZG9yLXNwZWNpZmljICovCi0JYm9vbAkJCW92ZXJzYW1wbGluZzsgICAvKiB2ZW5kb3Itc3BlY2lmaWMgKi8KLQlib29sCQkJYXV0b3J0czsKLX07Ci0KIC8qIFRoZXJlIGlzIGJ5IG5vdyBhdCBsZWFzdCBvbmUgdmVuZG9yIHdpdGggZGlmZmVyaW5nIGRldGFpbHMsIHNvIGhhbmRsZSBpdCAqLwogc3RydWN0IHZlbmRvcl9kYXRhIHsKIAl1bnNpZ25lZCBpbnQJCWlmbHM7CkBAIC04NSw2ICs3NCw3IEBACiAJdW5zaWduZWQgaW50CQlsY3JoX3R4OwogCXVuc2lnbmVkIGludAkJbGNyaF9yeDsKIAlib29sCQkJb3ZlcnNhbXBsaW5nOworCWJvb2wJCQlkbWFfdGhyZXNob2xkOwogfTsKIAogc3RhdGljIHN0cnVjdCB2ZW5kb3JfZGF0YSB2ZW5kb3JfYXJtID0gewpAQCAtOTMsNiArODMsNyBAQAogCS5sY3JoX3R4CQk9IFVBUlQwMTFfTENSSCwKIAkubGNyaF9yeAkJPSBVQVJUMDExX0xDUkgsCiAJLm92ZXJzYW1wbGluZwkJPSBmYWxzZSwKKwkuZG1hX3RocmVzaG9sZAkJPSBmYWxzZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdmVuZG9yX2RhdGEgdmVuZG9yX3N0ID0gewpAQCAtMTAxLDIyICs5Miw1MzUgQEAKIAkubGNyaF90eAkJPSBTVF9VQVJUMDExX0xDUkhfVFgsCiAJLmxjcmhfcngJCT0gU1RfVUFSVDAxMV9MQ1JIX1JYLAogCS5vdmVyc2FtcGxpbmcJCT0gdHJ1ZSwKKwkuZG1hX3RocmVzaG9sZAkJPSB0cnVlLAogfTsKIAorLyogRGVhbHMgd2l0aCBETUEgdHJhbnNhY3Rpb25zICovCitzdHJ1Y3QgcGwwMTFfZG1hdHhfZGF0YSB7CisJc3RydWN0IGRtYV9jaGFuCQkqY2hhbjsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QJc2c7CisJY2hhcgkJCSpidWY7CisJYm9vbAkJCXF1ZXVlZDsKK307CisKKy8qCisgKiBXZSB3cmFwIG91ciBwb3J0IHN0cnVjdHVyZSBhcm91bmQgdGhlIGdlbmVyaWMgdWFydF9wb3J0LgorICovCitzdHJ1Y3QgdWFydF9hbWJhX3BvcnQgeworCXN0cnVjdCB1YXJ0X3BvcnQJcG9ydDsKKwlzdHJ1Y3QgY2xrCQkqY2xrOworCWNvbnN0IHN0cnVjdCB2ZW5kb3JfZGF0YSAqdmVuZG9yOworCXVuc2lnbmVkIGludAkJZG1hY3I7CQkvKiBkbWEgY29udHJvbCByZWcgKi8KKwl1bnNpZ25lZCBpbnQJCWltOwkJLyogaW50ZXJydXB0IG1hc2sgKi8KKwl1bnNpZ25lZCBpbnQJCW9sZF9zdGF0dXM7CisJdW5zaWduZWQgaW50CQlmaWZvc2l6ZTsJLyogdmVuZG9yLXNwZWNpZmljICovCisJdW5zaWduZWQgaW50CQlsY3JoX3R4OwkvKiB2ZW5kb3Itc3BlY2lmaWMgKi8KKwl1bnNpZ25lZCBpbnQJCWxjcmhfcng7CS8qIHZlbmRvci1zcGVjaWZpYyAqLworCWJvb2wJCQlhdXRvcnRzOworCWNoYXIJCQl0eXBlWzEyXTsKKyNpZmRlZiBDT05GSUdfRE1BX0VOR0lORQorCS8qIERNQSBzdHVmZiAqLworCWJvb2wJCQl1c2luZ19kbWE7CisJc3RydWN0IHBsMDExX2RtYXR4X2RhdGEJZG1hdHg7CisjZW5kaWYKK307CisKKy8qCisgKiBBbGwgdGhlIERNQSBvcGVyYXRpb24gbW9kZSBzdHVmZiBnb2VzIGluc2lkZSB0aGlzIGlmZGVmLgorICogVGhpcyBhc3N1bWVzIHRoYXQgeW91IGhhdmUgYSBnZW5lcmljIERNQSBkZXZpY2UgaW50ZXJmYWNlLAorICogbm8gY3VzdG9tIERNQSBpbnRlcmZhY2VzIGFyZSBzdXBwb3J0ZWQuCisgKi8KKyNpZmRlZiBDT05GSUdfRE1BX0VOR0lORQorCisjZGVmaW5lIFBMMDExX0RNQV9CVUZGRVJfU0laRSBQQUdFX1NJWkUKKworc3RhdGljIHZvaWQgcGwwMTFfZG1hX3Byb2JlX2luaXRjYWxsKHN0cnVjdCB1YXJ0X2FtYmFfcG9ydCAqdWFwKQoreworCS8qIERNQSBpcyB0aGUgc29sZSB1c2VyIG9mIHRoZSBwbGF0Zm9ybSBkYXRhIHJpZ2h0IG5vdyAqLworCXN0cnVjdCBhbWJhX3BsMDExX2RhdGEgKnBsYXQgPSB1YXAtPnBvcnQuZGV2LT5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBkbWFfc2xhdmVfY29uZmlnIHR4X2NvbmYgPSB7CisJCS5kc3RfYWRkciA9IHVhcC0+cG9ydC5tYXBiYXNlICsgVUFSVDAxeF9EUiwKKwkJLmRzdF9hZGRyX3dpZHRoID0gRE1BX1NMQVZFX0JVU1dJRFRIXzFfQllURSwKKwkJLmRpcmVjdGlvbiA9IERNQV9UT19ERVZJQ0UsCisJCS5kc3RfbWF4YnVyc3QgPSB1YXAtPmZpZm9zaXplID4+IDEsCisJfTsKKwlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW47CisJZG1hX2NhcF9tYXNrX3QgbWFzazsKKworCS8qIFdlIG5lZWQgcGxhdGZvcm0gZGF0YSAqLworCWlmICghcGxhdCB8fCAhcGxhdC0+ZG1hX2ZpbHRlcikgeworCQlkZXZfaW5mbyh1YXAtPnBvcnQuZGV2LCAibm8gRE1BIHBsYXRmb3JtIGRhdGFcbiIpOworCQlyZXR1cm47CisJfQorCisJLyogVHJ5IHRvIGFjcXVpcmUgYSBnZW5lcmljIERNQSBlbmdpbmUgc2xhdmUgY2hhbm5lbCAqLworCWRtYV9jYXBfemVybyhtYXNrKTsKKwlkbWFfY2FwX3NldChETUFfU0xBVkUsIG1hc2spOworCisJY2hhbiA9IGRtYV9yZXF1ZXN0X2NoYW5uZWwobWFzaywgcGxhdC0+ZG1hX2ZpbHRlciwgcGxhdC0+ZG1hX3R4X3BhcmFtKTsKKwlpZiAoIWNoYW4pIHsKKwkJZGV2X2Vycih1YXAtPnBvcnQuZGV2LCAibm8gVFggRE1BIGNoYW5uZWwhXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWRtYWVuZ2luZV9zbGF2ZV9jb25maWcoY2hhbiwgJnR4X2NvbmYpOworCXVhcC0+ZG1hdHguY2hhbiA9IGNoYW47CisKKwlkZXZfaW5mbyh1YXAtPnBvcnQuZGV2LCAiRE1BIGNoYW5uZWwgVFggJXNcbiIsCisJCSBkbWFfY2hhbl9uYW1lKHVhcC0+ZG1hdHguY2hhbikpOworfQorCisjaWZuZGVmIE1PRFVMRQorLyoKKyAqIFN0YWNrIHVwIHRoZSBVQVJUcyBhbmQgbGV0IHRoZSBhYm92ZSBpbml0Y2FsbCBiZSBkb25lIGF0IGRldmljZQorICogaW5pdGNhbGwgdGltZSwgYmVjYXVzZSB0aGUgc2VyaWFsIGRyaXZlciBpcyBjYWxsZWQgYXMgYW4gYXJjaAorICogaW5pdGNhbGwsIGFuZCBhdCB0aGlzIHRpbWUgdGhlIERNQSBzdWJzeXN0ZW0gaXMgbm90IHlldCByZWdpc3RlcmVkLgorICogQXQgdGhpcyBwb2ludCB0aGUgZHJpdmVyIHdpbGwgc3dpdGNoIG92ZXIgdG8gdXNpbmcgRE1BIHdoZXJlIGRlc2lyZWQuCisgKi8KK3N0cnVjdCBkbWFfdWFwIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CisJc3RydWN0IHVhcnRfYW1iYV9wb3J0ICp1YXA7Cit9OworCitzdGF0aWMgTElTVF9IRUFEKHBsMDExX2RtYV91YXJ0cyk7CisKK3N0YXRpYyBpbnQgX19pbml0IHBsMDExX2RtYV9pbml0Y2FsbCh2b2lkKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKm5vZGUsICp0bXA7CisKKwlsaXN0X2Zvcl9lYWNoX3NhZmUobm9kZSwgdG1wLCAmcGwwMTFfZG1hX3VhcnRzKSB7CisJCXN0cnVjdCBkbWFfdWFwICpkbWF1ID0gbGlzdF9lbnRyeShub2RlLCBzdHJ1Y3QgZG1hX3VhcCwgbm9kZSk7CisJCXBsMDExX2RtYV9wcm9iZV9pbml0Y2FsbChkbWF1LT51YXApOworCQlsaXN0X2RlbChub2RlKTsKKwkJa2ZyZWUoZG1hdSk7CisJfQorCXJldHVybiAwOworfQorCitkZXZpY2VfaW5pdGNhbGwocGwwMTFfZG1hX2luaXRjYWxsKTsKKworc3RhdGljIHZvaWQgcGwwMTFfZG1hX3Byb2JlKHN0cnVjdCB1YXJ0X2FtYmFfcG9ydCAqdWFwKQoreworCXN0cnVjdCBkbWFfdWFwICpkbWF1ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRtYV91YXApLCBHRlBfS0VSTkVMKTsKKwlpZiAoZG1hdSkgeworCQlkbWF1LT51YXAgPSB1YXA7CisJCWxpc3RfYWRkX3RhaWwoJmRtYXUtPm5vZGUsICZwbDAxMV9kbWFfdWFydHMpOworCX0KK30KKyNlbHNlCitzdGF0aWMgdm9pZCBwbDAxMV9kbWFfcHJvYmUoc3RydWN0IHVhcnRfYW1iYV9wb3J0ICp1YXApCit7CisJcGwwMTFfZG1hX3Byb2JlX2luaXRjYWxsKHVhcCk7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgcGwwMTFfZG1hX3JlbW92ZShzdHJ1Y3QgdWFydF9hbWJhX3BvcnQgKnVhcCkKK3sKKwkvKiBUT0RPOiByZW1vdmUgdGhlIGluaXRjYWxsIGlmIGl0IGhhcyBub3QgeWV0IGV4ZWN1dGVkICovCisJaWYgKHVhcC0+ZG1hdHguY2hhbikKKwkJZG1hX3JlbGVhc2VfY2hhbm5lbCh1YXAtPmRtYXR4LmNoYW4pOworfQorCisKKy8qIEZvcndhcmQgZGVjbGFyZSB0aGlzIGZvciB0aGUgcmVmaWxsIHJvdXRpbmUgKi8KK3N0YXRpYyBpbnQgcGwwMTFfZG1hX3R4X3JlZmlsbChzdHJ1Y3QgdWFydF9hbWJhX3BvcnQgKnVhcCk7CisKKy8qCisgKiBUaGUgY3VycmVudCBETUEgVFggYnVmZmVyIGhhcyBiZWVuIHNlbnQuCisgKiBUcnkgdG8gcXVldWUgdXAgYW5vdGhlciBETUEgYnVmZmVyLgorICovCitzdGF0aWMgdm9pZCBwbDAxMV9kbWFfdHhfY2FsbGJhY2sodm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgdWFydF9hbWJhX3BvcnQgKnVhcCA9IGRhdGE7CisJc3RydWN0IHBsMDExX2RtYXR4X2RhdGEgKmRtYXR4ID0gJnVhcC0+ZG1hdHg7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MTYgZG1hY3I7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdWFwLT5wb3J0LmxvY2ssIGZsYWdzKTsKKwlpZiAodWFwLT5kbWF0eC5xdWV1ZWQpCisJCWRtYV91bm1hcF9zZyhkbWF0eC0+Y2hhbi0+ZGV2aWNlLT5kZXYsICZkbWF0eC0+c2csIDEsCisJCQkgICAgIERNQV9UT19ERVZJQ0UpOworCisJZG1hY3IgPSB1YXAtPmRtYWNyOworCXVhcC0+ZG1hY3IgPSBkbWFjciAmIH5VQVJUMDExX1RYRE1BRTsKKwl3cml0ZXcodWFwLT5kbWFjciwgdWFwLT5wb3J0Lm1lbWJhc2UgKyBVQVJUMDExX0RNQUNSKTsKKworCS8qCisJICogSWYgVFggRE1BIHdhcyBkaXNhYmxlZCwgaXQgbWVhbnMgdGhhdCB3ZSd2ZSBzdG9wcGVkIHRoZSBETUEgZm9yCisJICogc29tZSByZWFzb24gKGVnLCBYT0ZGIHJlY2VpdmVkLCBvciB3ZSB3YW50IHRvIHNlbmQgYW4gWC1jaGFyLikKKwkgKgorCSAqIE5vdGU6IHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCBoZXJlIG9mIGEgcG90ZW50aWFsIHJhY2UgYmV0d2VlbiBETUEKKwkgKiBhbmQgdGhlIHJlc3Qgb2YgdGhlIGRyaXZlciAtIGlmIHRoZSBkcml2ZXIgZGlzYWJsZXMgVFggRE1BIHdoaWxlCisJICogYSBUWCBidWZmZXIgY29tcGxldGluZywgd2UgbXVzdCB1cGRhdGUgdGhlIHR4IHF1ZXVlZCBzdGF0dXMgdG8KKwkgKiBnZXQgZnVydGhlciByZWZpbGxzIChoZW5jZSB3ZSBjaGVjayBkbWFjcikuCisJICovCisJaWYgKCEoZG1hY3IgJiBVQVJUMDExX1RYRE1BRSkgfHwgdWFydF90eF9zdG9wcGVkKCZ1YXAtPnBvcnQpIHx8CisJICAgIHVhcnRfY2lyY19lbXB0eSgmdWFwLT5wb3J0LnN0YXRlLT54bWl0KSkgeworCQl1YXAtPmRtYXR4LnF1ZXVlZCA9IGZhbHNlOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1YXAtPnBvcnQubG9jaywgZmxhZ3MpOworCQlyZXR1cm47CisJfQorCisJaWYgKHBsMDExX2RtYV90eF9yZWZpbGwodWFwKSA8PSAwKSB7CisJCS8qCisJCSAqIFdlIGRpZG4ndCBxdWV1ZSBhIERNQSBidWZmZXIgZm9yIHNvbWUgcmVhc29uLCBidXQgd2UKKwkJICogaGF2ZSBkYXRhIHBlbmRpbmcgdG8gYmUgc2VudC4gIFJlLWVuYWJsZSB0aGUgVFggSVJRLgorCQkgKi8KKwkJdWFwLT5pbSB8PSBVQVJUMDExX1RYSU07CisJCXdyaXRldyh1YXAtPmltLCB1YXAtPnBvcnQubWVtYmFzZSArIFVBUlQwMTFfSU1TQyk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVhcC0+cG9ydC5sb2NrLCBmbGFncyk7Cit9CisKKy8qCisgKiBUcnkgdG8gcmVmaWxsIHRoZSBUWCBETUEgYnVmZmVyLgorICogTG9ja2luZzogY2FsbGVkIHdpdGggcG9ydCBsb2NrIGhlbGQgYW5kIElSUXMgZGlzYWJsZWQuCisgKiBSZXR1cm5zOgorICogICAxIGlmIHdlIHF1ZXVlZCB1cCBhIFRYIERNQSBidWZmZXIuCisgKiAgIDAgaWYgd2UgZGlkbid0IHdhbnQgdG8gaGFuZGxlIHRoaXMgYnkgRE1BCisgKiAgPDAgb24gZXJyb3IKKyAqLworc3RhdGljIGludCBwbDAxMV9kbWFfdHhfcmVmaWxsKHN0cnVjdCB1YXJ0X2FtYmFfcG9ydCAqdWFwKQoreworCXN0cnVjdCBwbDAxMV9kbWF0eF9kYXRhICpkbWF0eCA9ICZ1YXAtPmRtYXR4OworCXN0cnVjdCBkbWFfY2hhbiAqY2hhbiA9IGRtYXR4LT5jaGFuOworCXN0cnVjdCBkbWFfZGV2aWNlICpkbWFfZGV2ID0gY2hhbi0+ZGV2aWNlOworCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqZGVzYzsKKwlzdHJ1Y3QgY2lyY19idWYgKnhtaXQgPSAmdWFwLT5wb3J0LnN0YXRlLT54bWl0OworCXVuc2lnbmVkIGludCBjb3VudDsKKworCS8qCisJICogVHJ5IHRvIGF2b2lkIHRoZSBvdmVyaGVhZCBpbnZvbHZlZCBpbiB1c2luZyBETUEgaWYgdGhlCisJICogdHJhbnNhY3Rpb24gZml0cyBpbiB0aGUgZmlyc3QgaGFsZiBvZiB0aGUgRklGTywgYnkgdXNpbmcKKwkgKiB0aGUgc3RhbmRhcmQgaW50ZXJydXB0IGhhbmRsaW5nLiAgVGhpcyBlbnN1cmVzIHRoYXQgd2UKKwkgKiBpc3N1ZSBhIHVhcnRfd3JpdGVfd2FrZXVwKCkgYXQgdGhlIGFwcHJvcHJpYXRlIHRpbWUuCisJICovCisJY291bnQgPSB1YXJ0X2NpcmNfY2hhcnNfcGVuZGluZyh4bWl0KTsKKwlpZiAoY291bnQgPCAodWFwLT5maWZvc2l6ZSA+PiAxKSkgeworCQl1YXAtPmRtYXR4LnF1ZXVlZCA9IGZhbHNlOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKgorCSAqIEJvZGdlOiBkb24ndCBzZW5kIHRoZSBsYXN0IGNoYXJhY3RlciBieSBETUEsIGFzIHRoaXMKKwkgKiB3aWxsIHByZXZlbnQgWE9OIGZyb20gbm90aWZ5aW5nIHVzIHRvIHJlc3RhcnQgRE1BLgorCSAqLworCWNvdW50IC09IDE7CisKKwkvKiBFbHNlIHByb2NlZWQgdG8gY29weSB0aGUgVFggY2hhcnMgdG8gdGhlIERNQSBidWZmZXIgYW5kIGZpcmUgRE1BICovCisJaWYgKGNvdW50ID4gUEwwMTFfRE1BX0JVRkZFUl9TSVpFKQorCQljb3VudCA9IFBMMDExX0RNQV9CVUZGRVJfU0laRTsKKworCWlmICh4bWl0LT50YWlsIDwgeG1pdC0+aGVhZCkKKwkJbWVtY3B5KCZkbWF0eC0+YnVmWzBdLCAmeG1pdC0+YnVmW3htaXQtPnRhaWxdLCBjb3VudCk7CisJZWxzZSB7CisJCXNpemVfdCBmaXJzdCA9IFVBUlRfWE1JVF9TSVpFIC0geG1pdC0+dGFpbDsKKwkJc2l6ZV90IHNlY29uZCA9IHhtaXQtPmhlYWQ7CisKKwkJbWVtY3B5KCZkbWF0eC0+YnVmWzBdLCAmeG1pdC0+YnVmW3htaXQtPnRhaWxdLCBmaXJzdCk7CisJCWlmIChzZWNvbmQpCisJCQltZW1jcHkoJmRtYXR4LT5idWZbZmlyc3RdLCAmeG1pdC0+YnVmWzBdLCBzZWNvbmQpOworCX0KKworCWRtYXR4LT5zZy5sZW5ndGggPSBjb3VudDsKKworCWlmIChkbWFfbWFwX3NnKGRtYV9kZXYtPmRldiwgJmRtYXR4LT5zZywgMSwgRE1BX1RPX0RFVklDRSkgIT0gMSkgeworCQl1YXAtPmRtYXR4LnF1ZXVlZCA9IGZhbHNlOworCQlkZXZfZGJnKHVhcC0+cG9ydC5kZXYsICJ1bmFibGUgdG8gbWFwIFRYIERNQVxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJZGVzYyA9IGRtYV9kZXYtPmRldmljZV9wcmVwX3NsYXZlX3NnKGNoYW4sICZkbWF0eC0+c2csIDEsIERNQV9UT19ERVZJQ0UsCisJCQkJCSAgICAgRE1BX1BSRVBfSU5URVJSVVBUIHwgRE1BX0NUUkxfQUNLKTsKKwlpZiAoIWRlc2MpIHsKKwkJZG1hX3VubWFwX3NnKGRtYV9kZXYtPmRldiwgJmRtYXR4LT5zZywgMSwgRE1BX1RPX0RFVklDRSk7CisJCXVhcC0+ZG1hdHgucXVldWVkID0gZmFsc2U7CisJCS8qCisJCSAqIElmIERNQSBjYW5ub3QgYmUgdXNlZCByaWdodCBub3csIHdlIGNvbXBsZXRlIHRoaXMKKwkJICogdHJhbnNhY3Rpb24gdmlhIElSUSBhbmQgbGV0IHRoZSBUVFkgbGF5ZXIgcmV0cnkuCisJCSAqLworCQlkZXZfZGJnKHVhcC0+cG9ydC5kZXYsICJUWCBETUEgYnVzeVxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJLyogU29tZSBkYXRhIHRvIGdvIGFsb25nIHRvIHRoZSBjYWxsYmFjayAqLworCWRlc2MtPmNhbGxiYWNrID0gcGwwMTFfZG1hX3R4X2NhbGxiYWNrOworCWRlc2MtPmNhbGxiYWNrX3BhcmFtID0gdWFwOworCisJLyogQWxsIGVycm9ycyBzaG91bGQgaGFwcGVuIGF0IHByZXBhcmUgdGltZSAqLworCWRtYWVuZ2luZV9zdWJtaXQoZGVzYyk7CisKKwkvKiBGaXJlIHRoZSBETUEgdHJhbnNhY3Rpb24gKi8KKwlkbWFfZGV2LT5kZXZpY2VfaXNzdWVfcGVuZGluZyhjaGFuKTsKKworCXVhcC0+ZG1hY3IgfD0gVUFSVDAxMV9UWERNQUU7CisJd3JpdGV3KHVhcC0+ZG1hY3IsIHVhcC0+cG9ydC5tZW1iYXNlICsgVUFSVDAxMV9ETUFDUik7CisJdWFwLT5kbWF0eC5xdWV1ZWQgPSB0cnVlOworCisJLyoKKwkgKiBOb3cgd2Uga25vdyB0aGF0IERNQSB3aWxsIGZpcmUsIHNvIGFkdmFuY2UgdGhlIHJpbmcgYnVmZmVyCisJICogd2l0aCB0aGUgc3R1ZmYgd2UganVzdCBkaXNwYXRjaGVkLgorCSAqLworCXhtaXQtPnRhaWwgPSAoeG1pdC0+dGFpbCArIGNvdW50KSAmIChVQVJUX1hNSVRfU0laRSAtIDEpOworCXVhcC0+cG9ydC5pY291bnQudHggKz0gY291bnQ7CisKKwlpZiAodWFydF9jaXJjX2NoYXJzX3BlbmRpbmcoeG1pdCkgPCBXQUtFVVBfQ0hBUlMpCisJCXVhcnRfd3JpdGVfd2FrZXVwKCZ1YXAtPnBvcnQpOworCisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBXZSByZWNlaXZlZCBhIHRyYW5zbWl0IGludGVycnVwdCB3aXRob3V0IGEgcGVuZGluZyBYLWNoYXIgYnV0IHdpdGgKKyAqIHBlbmRpbmcgY2hhcmFjdGVycy4KKyAqIExvY2tpbmc6IGNhbGxlZCB3aXRoIHBvcnQgbG9jayBoZWxkIGFuZCBJUlFzIGRpc2FibGVkLgorICogUmV0dXJuczoKKyAqICAgZmFsc2UgaWYgd2Ugd2FudCB0byB1c2UgUElPIHRvIHRyYW5zbWl0CisgKiAgIHRydWUgaWYgd2UgcXVldWVkIGEgRE1BIGJ1ZmZlcgorICovCitzdGF0aWMgYm9vbCBwbDAxMV9kbWFfdHhfaXJxKHN0cnVjdCB1YXJ0X2FtYmFfcG9ydCAqdWFwKQoreworCWlmICghdWFwLT51c2luZ19kbWEpCisJCXJldHVybiBmYWxzZTsKKworCS8qCisJICogSWYgd2UgYWxyZWFkeSBoYXZlIGEgVFggYnVmZmVyIHF1ZXVlZCwgYnV0IHJlY2VpdmVkIGEKKwkgKiBUWCBpbnRlcnJ1cHQsIGl0IHdpbGwgYmUgYmVjYXVzZSB3ZSd2ZSBqdXN0IHNlbnQgYW4gWC1jaGFyLgorCSAqIEVuc3VyZSB0aGUgVFggRE1BIGlzIGVuYWJsZWQgYW5kIHRoZSBUWCBJUlEgaXMgZGlzYWJsZWQuCisJICovCisJaWYgKHVhcC0+ZG1hdHgucXVldWVkKSB7CisJCXVhcC0+ZG1hY3IgfD0gVUFSVDAxMV9UWERNQUU7CisJCXdyaXRldyh1YXAtPmRtYWNyLCB1YXAtPnBvcnQubWVtYmFzZSArIFVBUlQwMTFfRE1BQ1IpOworCQl1YXAtPmltICY9IH5VQVJUMDExX1RYSU07CisJCXdyaXRldyh1YXAtPmltLCB1YXAtPnBvcnQubWVtYmFzZSArIFVBUlQwMTFfSU1TQyk7CisJCXJldHVybiB0cnVlOworCX0KKworCS8qCisJICogV2UgZG9uJ3QgaGF2ZSBhIFRYIGJ1ZmZlciBxdWV1ZWQsIHNvIHRyeSB0byBxdWV1ZSBvbmUuCisJICogSWYgd2Ugc3VjY2VzZnVsbHkgcXVldWVkIGEgYnVmZmVyLCBtYXNrIHRoZSBUWCBJUlEuCisJICovCisJaWYgKHBsMDExX2RtYV90eF9yZWZpbGwodWFwKSA+IDApIHsKKwkJdWFwLT5pbSAmPSB+VUFSVDAxMV9UWElNOworCQl3cml0ZXcodWFwLT5pbSwgdWFwLT5wb3J0Lm1lbWJhc2UgKyBVQVJUMDExX0lNU0MpOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisJcmV0dXJuIGZhbHNlOworfQorCisvKgorICogU3RvcCB0aGUgRE1BIHRyYW5zbWl0IChlZywgZHVlIHRvIHJlY2VpdmVkIFhPRkYpLgorICogTG9ja2luZzogY2FsbGVkIHdpdGggcG9ydCBsb2NrIGhlbGQgYW5kIElSUXMgZGlzYWJsZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBwbDAxMV9kbWFfdHhfc3RvcChzdHJ1Y3QgdWFydF9hbWJhX3BvcnQgKnVhcCkKK3sKKwlpZiAodWFwLT5kbWF0eC5xdWV1ZWQpIHsKKwkJdWFwLT5kbWFjciAmPSB+VUFSVDAxMV9UWERNQUU7CisJCXdyaXRldyh1YXAtPmRtYWNyLCB1YXAtPnBvcnQubWVtYmFzZSArIFVBUlQwMTFfRE1BQ1IpOworCX0KK30KKworLyoKKyAqIFRyeSB0byBzdGFydCBhIERNQSB0cmFuc21pdCwgb3IgaW4gdGhlIGNhc2Ugb2YgYW4gWE9OL09GRgorICogY2hhcmFjdGVyIHF1ZXVlZCBmb3Igc2VuZCwgdHJ5IHRvIGdldCB0aGF0IGNoYXJhY3RlciBvdXQgQVNBUC4KKyAqIExvY2tpbmc6IGNhbGxlZCB3aXRoIHBvcnQgbG9jayBoZWxkIGFuZCBJUlFzIGRpc2FibGVkLgorICogUmV0dXJuczoKKyAqICAgZmFsc2UgaWYgd2Ugd2FudCB0aGUgVFggSVJRIHRvIGJlIGVuYWJsZWQKKyAqICAgdHJ1ZSBpZiB3ZSBoYXZlIGEgYnVmZmVyIHF1ZXVlZAorICovCitzdGF0aWMgaW5saW5lIGJvb2wgcGwwMTFfZG1hX3R4X3N0YXJ0KHN0cnVjdCB1YXJ0X2FtYmFfcG9ydCAqdWFwKQoreworCXUxNiBkbWFjcjsKKworCWlmICghdWFwLT51c2luZ19kbWEpCisJCXJldHVybiBmYWxzZTsKKworCWlmICghdWFwLT5wb3J0LnhfY2hhcikgeworCQkvKiBubyBYLWNoYXIsIHRyeSB0byBwdXNoIGNoYXJzIG91dCBpbiBETUEgbW9kZSAqLworCQlib29sIHJldCA9IHRydWU7CisKKwkJaWYgKCF1YXAtPmRtYXR4LnF1ZXVlZCkgeworCQkJaWYgKHBsMDExX2RtYV90eF9yZWZpbGwodWFwKSA+IDApIHsKKwkJCQl1YXAtPmltICY9IH5VQVJUMDExX1RYSU07CisJCQkJcmV0ID0gdHJ1ZTsKKwkJCX0gZWxzZSB7CisJCQkJdWFwLT5pbSB8PSBVQVJUMDExX1RYSU07CisJCQkJcmV0ID0gZmFsc2U7CisJCQl9CisJCQl3cml0ZXcodWFwLT5pbSwgdWFwLT5wb3J0Lm1lbWJhc2UgKyBVQVJUMDExX0lNU0MpOworCQl9IGVsc2UgaWYgKCEodWFwLT5kbWFjciAmIFVBUlQwMTFfVFhETUFFKSkgeworCQkJdWFwLT5kbWFjciB8PSBVQVJUMDExX1RYRE1BRTsKKwkJCXdyaXRldyh1YXAtPmRtYWNyLAorCQkJCSAgICAgICB1YXAtPnBvcnQubWVtYmFzZSArIFVBUlQwMTFfRE1BQ1IpOworCQl9CisJCXJldHVybiByZXQ7CisJfQorCisJLyoKKwkgKiBXZSBoYXZlIGFuIFgtY2hhciB0byBzZW5kLiAgRGlzYWJsZSBETUEgdG8gcHJldmVudCBpdCBsb2FkaW5nCisJICogdGhlIFRYIGZpZm8sIGFuZCB0aGVuIHNlZSBpZiB3ZSBjYW4gc3R1ZmYgaXQgaW50byB0aGUgRklGTy4KKwkgKi8KKwlkbWFjciA9IHVhcC0+ZG1hY3I7CisJdWFwLT5kbWFjciAmPSB+VUFSVDAxMV9UWERNQUU7CisJd3JpdGV3KHVhcC0+ZG1hY3IsIHVhcC0+cG9ydC5tZW1iYXNlICsgVUFSVDAxMV9ETUFDUik7CisKKwlpZiAocmVhZHcodWFwLT5wb3J0Lm1lbWJhc2UgKyBVQVJUMDF4X0ZSKSAmIFVBUlQwMXhfRlJfVFhGRikgeworCQkvKgorCQkgKiBObyBzcGFjZSBpbiB0aGUgRklGTywgc28gZW5hYmxlIHRoZSB0cmFuc21pdCBpbnRlcnJ1cHQKKwkJICogc28gd2Uga25vdyB3aGVuIHRoZXJlIGlzIHNwYWNlLiAgTm90ZSB0aGF0IG9uY2Ugd2UndmUKKwkJICogbG9hZGVkIHRoZSBjaGFyYWN0ZXIsIHdlIHNob3VsZCBqdXN0IHJlLWVuYWJsZSBETUEuCisJCSAqLworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJd3JpdGV3KHVhcC0+cG9ydC54X2NoYXIsIHVhcC0+cG9ydC5tZW1iYXNlICsgVUFSVDAxeF9EUik7CisJdWFwLT5wb3J0Lmljb3VudC50eCsrOworCXVhcC0+cG9ydC54X2NoYXIgPSAwOworCisJLyogU3VjY2VzcyAtIHJlc3RvcmUgdGhlIERNQSBzdGF0ZSAqLworCXVhcC0+ZG1hY3IgPSBkbWFjcjsKKwl3cml0ZXcoZG1hY3IsIHVhcC0+cG9ydC5tZW1iYXNlICsgVUFSVDAxMV9ETUFDUik7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIEZsdXNoIHRoZSB0cmFuc21pdCBidWZmZXIuCisgKiBMb2NraW5nOiBjYWxsZWQgd2l0aCBwb3J0IGxvY2sgaGVsZCBhbmQgSVJRcyBkaXNhYmxlZC4KKyAqLworc3RhdGljIHZvaWQgcGwwMTFfZG1hX2ZsdXNoX2J1ZmZlcihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCB1YXJ0X2FtYmFfcG9ydCAqdWFwID0gKHN0cnVjdCB1YXJ0X2FtYmFfcG9ydCAqKXBvcnQ7CisKKwlpZiAoIXVhcC0+dXNpbmdfZG1hKQorCQlyZXR1cm47CisKKwkvKiBBdm9pZCBkZWFkbG9jayB3aXRoIHRoZSBETUEgZW5naW5lIGNhbGxiYWNrICovCisJc3Bpbl91bmxvY2soJnVhcC0+cG9ydC5sb2NrKTsKKwlkbWFlbmdpbmVfdGVybWluYXRlX2FsbCh1YXAtPmRtYXR4LmNoYW4pOworCXNwaW5fbG9jaygmdWFwLT5wb3J0LmxvY2spOworCWlmICh1YXAtPmRtYXR4LnF1ZXVlZCkgeworCQlkbWFfdW5tYXBfc2codWFwLT5kbWF0eC5jaGFuLT5kZXZpY2UtPmRldiwgJnVhcC0+ZG1hdHguc2csIDEsCisJCQkgICAgIERNQV9UT19ERVZJQ0UpOworCQl1YXAtPmRtYXR4LnF1ZXVlZCA9IGZhbHNlOworCQl1YXAtPmRtYWNyICY9IH5VQVJUMDExX1RYRE1BRTsKKwkJd3JpdGV3KHVhcC0+ZG1hY3IsIHVhcC0+cG9ydC5tZW1iYXNlICsgVUFSVDAxMV9ETUFDUik7CisJfQorfQorCisKK3N0YXRpYyB2b2lkIHBsMDExX2RtYV9zdGFydHVwKHN0cnVjdCB1YXJ0X2FtYmFfcG9ydCAqdWFwKQoreworCWlmICghdWFwLT5kbWF0eC5jaGFuKQorCQlyZXR1cm47CisKKwl1YXAtPmRtYXR4LmJ1ZiA9IGttYWxsb2MoUEwwMTFfRE1BX0JVRkZFUl9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXVhcC0+ZG1hdHguYnVmKSB7CisJCWRldl9lcnIodWFwLT5wb3J0LmRldiwgIm5vIG1lbW9yeSBmb3IgRE1BIFRYIGJ1ZmZlclxuIik7CisJCXVhcC0+cG9ydC5maWZvc2l6ZSA9IHVhcC0+Zmlmb3NpemU7CisJCXJldHVybjsKKwl9CisKKwlzZ19pbml0X29uZSgmdWFwLT5kbWF0eC5zZywgdWFwLT5kbWF0eC5idWYsIFBMMDExX0RNQV9CVUZGRVJfU0laRSk7CisKKwkvKiBUaGUgRE1BIGJ1ZmZlciBpcyBub3cgdGhlIEZJRk8gdGhlIFRUWSBzdWJzeXN0ZW0gY2FuIHVzZSAqLworCXVhcC0+cG9ydC5maWZvc2l6ZSA9IFBMMDExX0RNQV9CVUZGRVJfU0laRTsKKwl1YXAtPnVzaW5nX2RtYSA9IHRydWU7CisKKwkvKiBUdXJuIG9uIERNQSBlcnJvciAoUlgvVFggd2lsbCBiZSBlbmFibGVkIG9uIGRlbWFuZCkgKi8KKwl1YXAtPmRtYWNyIHw9IFVBUlQwMTFfRE1BT05FUlI7CisJd3JpdGV3KHVhcC0+ZG1hY3IsIHVhcC0+cG9ydC5tZW1iYXNlICsgVUFSVDAxMV9ETUFDUik7CisKKwkvKgorCSAqIFNUIE1pY3JvIHZhcmlhbnRzIGhhcyBzb21lIHNwZWNpZmljIGRtYSBidXJzdCB0aHJlc2hvbGQKKwkgKiBjb21wZW5zYXRpb24uIFNldCB0aGlzIHRvIDE2IGJ5dGVzLCBzbyBidXJzdCB3aWxsIG9ubHkKKwkgKiBiZSBpc3N1ZWQgYWJvdmUvYmVsb3cgMTYgYnl0ZXMuCisJICovCisJaWYgKHVhcC0+dmVuZG9yLT5kbWFfdGhyZXNob2xkKQorCQl3cml0ZXcoU1RfVUFSVDAxMV9ETUFXTV9SWF8xNiB8IFNUX1VBUlQwMTFfRE1BV01fVFhfMTYsCisJCQkgICAgICAgdWFwLT5wb3J0Lm1lbWJhc2UgKyBTVF9VQVJUMDExX0RNQVdNKTsKK30KKworc3RhdGljIHZvaWQgcGwwMTFfZG1hX3NodXRkb3duKHN0cnVjdCB1YXJ0X2FtYmFfcG9ydCAqdWFwKQoreworCWlmICghdWFwLT51c2luZ19kbWEpCisJCXJldHVybjsKKworCS8qIERpc2FibGUgUlggYW5kIFRYIERNQSAqLworCXdoaWxlIChyZWFkdyh1YXAtPnBvcnQubWVtYmFzZSArIFVBUlQwMXhfRlIpICYgVUFSVDAxeF9GUl9CVVNZKQorCQliYXJyaWVyKCk7CisKKwlzcGluX2xvY2tfaXJxKCZ1YXAtPnBvcnQubG9jayk7CisJdWFwLT5kbWFjciAmPSB+KFVBUlQwMTFfRE1BT05FUlIgfCBVQVJUMDExX1JYRE1BRSB8IFVBUlQwMTFfVFhETUFFKTsKKwl3cml0ZXcodWFwLT5kbWFjciwgdWFwLT5wb3J0Lm1lbWJhc2UgKyBVQVJUMDExX0RNQUNSKTsKKwlzcGluX3VubG9ja19pcnEoJnVhcC0+cG9ydC5sb2NrKTsKKworCS8qIEluIHRoZW9yeSwgdGhpcyBzaG91bGQgYWxyZWFkeSBiZSBkb25lIGJ5IHBsMDExX2RtYV9mbHVzaF9idWZmZXIgKi8KKwlkbWFlbmdpbmVfdGVybWluYXRlX2FsbCh1YXAtPmRtYXR4LmNoYW4pOworCWlmICh1YXAtPmRtYXR4LnF1ZXVlZCkgeworCQlkbWFfdW5tYXBfc2codWFwLT5kbWF0eC5jaGFuLT5kZXZpY2UtPmRldiwgJnVhcC0+ZG1hdHguc2csIDEsCisJCQkgICAgIERNQV9UT19ERVZJQ0UpOworCQl1YXAtPmRtYXR4LnF1ZXVlZCA9IGZhbHNlOworCX0KKworCWtmcmVlKHVhcC0+ZG1hdHguYnVmKTsKKworCXVhcC0+dXNpbmdfZG1hID0gZmFsc2U7Cit9CisKKyNlbHNlCisvKiBCbGFuayBmdW5jdGlvbnMgaWYgdGhlIERNQSBlbmdpbmUgaXMgbm90IGF2YWlsYWJsZSAqLworc3RhdGljIGlubGluZSB2b2lkIHBsMDExX2RtYV9wcm9iZShzdHJ1Y3QgdWFydF9hbWJhX3BvcnQgKnVhcCkKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBsMDExX2RtYV9yZW1vdmUoc3RydWN0IHVhcnRfYW1iYV9wb3J0ICp1YXApCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwbDAxMV9kbWFfc3RhcnR1cChzdHJ1Y3QgdWFydF9hbWJhX3BvcnQgKnVhcCkKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBsMDExX2RtYV9zaHV0ZG93bihzdHJ1Y3QgdWFydF9hbWJhX3BvcnQgKnVhcCkKK3sKK30KKworc3RhdGljIGlubGluZSBib29sIHBsMDExX2RtYV90eF9pcnEoc3RydWN0IHVhcnRfYW1iYV9wb3J0ICp1YXApCit7CisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcGwwMTFfZG1hX3R4X3N0b3Aoc3RydWN0IHVhcnRfYW1iYV9wb3J0ICp1YXApCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBwbDAxMV9kbWFfdHhfc3RhcnQoc3RydWN0IHVhcnRfYW1iYV9wb3J0ICp1YXApCit7CisJcmV0dXJuIGZhbHNlOworfQorCisjZGVmaW5lIHBsMDExX2RtYV9mbHVzaF9idWZmZXIJTlVMTAorI2VuZGlmCisKKwogc3RhdGljIHZvaWQgcGwwMTFfc3RvcF90eChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewogCXN0cnVjdCB1YXJ0X2FtYmFfcG9ydCAqdWFwID0gKHN0cnVjdCB1YXJ0X2FtYmFfcG9ydCAqKXBvcnQ7CiAKIAl1YXAtPmltICY9IH5VQVJUMDExX1RYSU07CiAJd3JpdGV3KHVhcC0+aW0sIHVhcC0+cG9ydC5tZW1iYXNlICsgVUFSVDAxMV9JTVNDKTsKKwlwbDAxMV9kbWFfdHhfc3RvcCh1YXApOwogfQogCiBzdGF0aWMgdm9pZCBwbDAxMV9zdGFydF90eChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewogCXN0cnVjdCB1YXJ0X2FtYmFfcG9ydCAqdWFwID0gKHN0cnVjdCB1YXJ0X2FtYmFfcG9ydCAqKXBvcnQ7CiAKLQl1YXAtPmltIHw9IFVBUlQwMTFfVFhJTTsKLQl3cml0ZXcodWFwLT5pbSwgdWFwLT5wb3J0Lm1lbWJhc2UgKyBVQVJUMDExX0lNU0MpOworCWlmICghcGwwMTFfZG1hX3R4X3N0YXJ0KHVhcCkpIHsKKwkJdWFwLT5pbSB8PSBVQVJUMDExX1RYSU07CisJCXdyaXRldyh1YXAtPmltLCB1YXAtPnBvcnQubWVtYmFzZSArIFVBUlQwMTFfSU1TQyk7CisJfQogfQogCiBzdGF0aWMgdm9pZCBwbDAxMV9zdG9wX3J4KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCkBAIC0yMDMsNyArNzA3LDExIEBACiAJCXJldHVybjsKIAl9CiAKLQljb3VudCA9IHVhcC0+cG9ydC5maWZvc2l6ZSA+PiAxOworCS8qIElmIHdlIGFyZSB1c2luZyBETUEgbW9kZSwgdHJ5IHRvIHNlbmQgc29tZSBjaGFyYWN0ZXJzLiAqLworCWlmIChwbDAxMV9kbWFfdHhfaXJxKHVhcCkpCisJCXJldHVybjsKKworCWNvdW50ID0gdWFwLT5maWZvc2l6ZSA+PiAxOwogCWRvIHsKIAkJd3JpdGV3KHhtaXQtPmJ1Zlt4bWl0LT50YWlsXSwgdWFwLT5wb3J0Lm1lbWJhc2UgKyBVQVJUMDF4X0RSKTsKIAkJeG1pdC0+dGFpbCA9ICh4bWl0LT50YWlsICsgMSkgJiAoVUFSVF9YTUlUX1NJWkUgLSAxKTsKQEAgLTI0NiwxMCArNzU0LDExIEBACiBzdGF0aWMgaXJxcmV0dXJuX3QgcGwwMTFfaW50KGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKIAlzdHJ1Y3QgdWFydF9hbWJhX3BvcnQgKnVhcCA9IGRldl9pZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGludCBzdGF0dXMsIHBhc3NfY291bnRlciA9IEFNQkFfSVNSX1BBU1NfTElNSVQ7CiAJaW50IGhhbmRsZWQgPSAwOwogCi0Jc3Bpbl9sb2NrKCZ1YXAtPnBvcnQubG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnVhcC0+cG9ydC5sb2NrLCBmbGFncyk7CiAKIAlzdGF0dXMgPSByZWFkdyh1YXAtPnBvcnQubWVtYmFzZSArIFVBUlQwMTFfTUlTKTsKIAlpZiAoc3RhdHVzKSB7CkBAIC0yNzQsNyArNzgzLDcgQEAKIAkJaGFuZGxlZCA9IDE7CiAJfQogCi0Jc3Bpbl91bmxvY2soJnVhcC0+cG9ydC5sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1YXAtPnBvcnQubG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIElSUV9SRVRWQUwoaGFuZGxlZCk7CiB9CkBAIC0zOTYsNyArOTA1LDcgQEAKIAlpZiAocmV0dmFsKQogCQlnb3RvIGNsa19kaXM7CiAKLQl3cml0ZXcodWFwLT5pZmxzLCB1YXAtPnBvcnQubWVtYmFzZSArIFVBUlQwMTFfSUZMUyk7CisJd3JpdGV3KHVhcC0+dmVuZG9yLT5pZmxzLCB1YXAtPnBvcnQubWVtYmFzZSArIFVBUlQwMTFfSUZMUyk7CiAKIAkvKgogCSAqIFByb3Zva2UgVFggRklGTyBpbnRlcnJ1cHQgaW50byBhc3NlcnRpbmcuCkBAIC00MjMsMTEgKzkzMiwxOCBAQAogCWNyID0gVUFSVDAxeF9DUl9VQVJURU4gfCBVQVJUMDExX0NSX1JYRSB8IFVBUlQwMTFfQ1JfVFhFOwogCXdyaXRldyhjciwgdWFwLT5wb3J0Lm1lbWJhc2UgKyBVQVJUMDExX0NSKTsKIAorCS8qIENsZWFyIHBlbmRpbmcgZXJyb3IgaW50ZXJydXB0cyAqLworCXdyaXRldyhVQVJUMDExX09FSVMgfCBVQVJUMDExX0JFSVMgfCBVQVJUMDExX1BFSVMgfCBVQVJUMDExX0ZFSVMsCisJICAgICAgIHVhcC0+cG9ydC5tZW1iYXNlICsgVUFSVDAxMV9JQ1IpOworCiAJLyoKIAkgKiBpbml0aWFsaXNlIHRoZSBvbGQgc3RhdHVzIG9mIHRoZSBtb2RlbSBzaWduYWxzCiAJICovCiAJdWFwLT5vbGRfc3RhdHVzID0gcmVhZHcodWFwLT5wb3J0Lm1lbWJhc2UgKyBVQVJUMDF4X0ZSKSAmIFVBUlQwMXhfRlJfTU9ERU1fQU5ZOwogCisJLyogU3RhcnR1cCBETUEgKi8KKwlwbDAxMV9kbWFfc3RhcnR1cCh1YXApOworCiAJLyoKIAkgKiBGaW5hbGx5LCBlbmFibGUgaW50ZXJydXB0cwogCSAqLwpAQCAtNDY3LDYgKzk4Myw4IEBACiAJd3JpdGV3KDB4ZmZmZiwgdWFwLT5wb3J0Lm1lbWJhc2UgKyBVQVJUMDExX0lDUik7CiAJc3Bpbl91bmxvY2tfaXJxKCZ1YXAtPnBvcnQubG9jayk7CiAKKwlwbDAxMV9kbWFfc2h1dGRvd24odWFwKTsKKwogCS8qCiAJICogRnJlZSB0aGUgaW50ZXJydXB0CiAJICovCkBAIC00OTgsMTMgKzEwMTYsMTggQEAKIAlzdHJ1Y3QgdWFydF9hbWJhX3BvcnQgKnVhcCA9IChzdHJ1Y3QgdWFydF9hbWJhX3BvcnQgKilwb3J0OwogCXVuc2lnbmVkIGludCBsY3JfaCwgb2xkX2NyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgaW50IGJhdWQsIHF1b3Q7CisJdW5zaWduZWQgaW50IGJhdWQsIHF1b3QsIGNsa2RpdjsKKworCWlmICh1YXAtPnZlbmRvci0+b3ZlcnNhbXBsaW5nKQorCQljbGtkaXYgPSA4OworCWVsc2UKKwkJY2xrZGl2ID0gMTY7CiAKIAkvKgogCSAqIEFzayB0aGUgY29yZSB0byBjYWxjdWxhdGUgdGhlIGRpdmlzb3IgZm9yIHVzLgogCSAqLwogCWJhdWQgPSB1YXJ0X2dldF9iYXVkX3JhdGUocG9ydCwgdGVybWlvcywgb2xkLCAwLAotCQkJCSAgcG9ydC0+dWFydGNsay8odWFwLT5vdmVyc2FtcGxpbmcgPyA4IDogMTYpKTsKKwkJCQkgIHBvcnQtPnVhcnRjbGsgLyBjbGtkaXYpOwogCiAJaWYgKGJhdWQgPiBwb3J0LT51YXJ0Y2xrLzE2KQogCQlxdW90ID0gRElWX1JPVU5EX0NMT1NFU1QocG9ydC0+dWFydGNsayAqIDgsIGJhdWQpOwpAQCAtNTMyLDcgKzEwNTUsNyBAQAogCQlpZiAoISh0ZXJtaW9zLT5jX2NmbGFnICYgUEFST0REKSkKIAkJCWxjcl9oIHw9IFVBUlQwMXhfTENSSF9FUFM7CiAJfQotCWlmIChwb3J0LT5maWZvc2l6ZSA+IDEpCisJaWYgKHVhcC0+Zmlmb3NpemUgPiAxKQogCQlsY3JfaCB8PSBVQVJUMDF4X0xDUkhfRkVOOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKQEAgLTU4OCw4ICsxMTExLDggQEAKIAkJdWFwLT5hdXRvcnRzID0gZmFsc2U7CiAJfQogCi0JaWYgKHVhcC0+b3ZlcnNhbXBsaW5nKSB7Ci0JCWlmIChiYXVkID4gcG9ydC0+dWFydGNsay8xNikKKwlpZiAodWFwLT52ZW5kb3ItPm92ZXJzYW1wbGluZykgeworCQlpZiAoYmF1ZCA+IHBvcnQtPnVhcnRjbGsgLyAxNikKIAkJCW9sZF9jciB8PSBTVF9VQVJUMDExX0NSX09WU0ZBQ1Q7CiAJCWVsc2UKIAkJCW9sZF9jciAmPSB+U1RfVUFSVDAxMV9DUl9PVlNGQUNUOwpAQCAtNjIyLDcgKzExNDUsOCBAQAogCiBzdGF0aWMgY29uc3QgY2hhciAqcGwwMTFfdHlwZShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewotCXJldHVybiBwb3J0LT50eXBlID09IFBPUlRfQU1CQSA/ICJBTUJBL1BMMDExIiA6IE5VTEw7CisJc3RydWN0IHVhcnRfYW1iYV9wb3J0ICp1YXAgPSAoc3RydWN0IHVhcnRfYW1iYV9wb3J0ICopcG9ydDsKKwlyZXR1cm4gdWFwLT5wb3J0LnR5cGUgPT0gUE9SVF9BTUJBID8gdWFwLT50eXBlIDogTlVMTDsKIH0KIAogLyoKQEAgLTY3OSw2ICsxMjAzLDcgQEAKIAkuYnJlYWtfY3RsCT0gcGwwMTFfYnJlYWtfY3RsLAogCS5zdGFydHVwCT0gcGwwMTFfc3RhcnR1cCwKIAkuc2h1dGRvd24JPSBwbDAxMV9zaHV0ZG93biwKKwkuZmx1c2hfYnVmZmVyCT0gcGwwMTFfZG1hX2ZsdXNoX2J1ZmZlciwKIAkuc2V0X3Rlcm1pb3MJPSBwbDAxMV9zZXRfdGVybWlvcywKIAkudHlwZQkJPSBwbDAxMV90eXBlLAogCS5yZWxlYXNlX3BvcnQJPSBwbDAxMF9yZWxlYXNlX3BvcnQsCkBAIC03NjEsNyArMTI4Niw3IEBACiAKIAkJKmJhdWQgPSB1YXAtPnBvcnQudWFydGNsayAqIDQgLyAoNjQgKiBpYnJkICsgZmJyZCk7CiAKLQkJaWYgKHVhcC0+b3ZlcnNhbXBsaW5nKSB7CisJCWlmICh1YXAtPnZlbmRvci0+b3ZlcnNhbXBsaW5nKSB7CiAJCQlpZiAocmVhZHcodWFwLT5wb3J0Lm1lbWJhc2UgKyBVQVJUMDExX0NSKQogCQkJCSAgJiBTVF9VQVJUMDExX0NSX09WU0ZBQ1QpCiAJCQkJKmJhdWQgKj0gMjsKQEAgLTg1OCwxOSArMTM4MywyMiBAQAogCQlnb3RvIHVubWFwOwogCX0KIAotCXVhcC0+aWZscyA9IHZlbmRvci0+aWZsczsKKwl1YXAtPnZlbmRvciA9IHZlbmRvcjsKIAl1YXAtPmxjcmhfcnggPSB2ZW5kb3ItPmxjcmhfcng7CiAJdWFwLT5sY3JoX3R4ID0gdmVuZG9yLT5sY3JoX3R4OwotCXVhcC0+b3ZlcnNhbXBsaW5nID0gdmVuZG9yLT5vdmVyc2FtcGxpbmc7CisJdWFwLT5maWZvc2l6ZSA9IHZlbmRvci0+Zmlmb3NpemU7CiAJdWFwLT5wb3J0LmRldiA9ICZkZXYtPmRldjsKIAl1YXAtPnBvcnQubWFwYmFzZSA9IGRldi0+cmVzLnN0YXJ0OwogCXVhcC0+cG9ydC5tZW1iYXNlID0gYmFzZTsKIAl1YXAtPnBvcnQuaW90eXBlID0gVVBJT19NRU07CiAJdWFwLT5wb3J0LmlycSA9IGRldi0+aXJxWzBdOwotCXVhcC0+cG9ydC5maWZvc2l6ZSA9IHZlbmRvci0+Zmlmb3NpemU7CisJdWFwLT5wb3J0LmZpZm9zaXplID0gdWFwLT5maWZvc2l6ZTsKIAl1YXAtPnBvcnQub3BzID0gJmFtYmFfcGwwMTFfcG9wczsKIAl1YXAtPnBvcnQuZmxhZ3MgPSBVUEZfQk9PVF9BVVRPQ09ORjsKIAl1YXAtPnBvcnQubGluZSA9IGk7CisJcGwwMTFfZG1hX3Byb2JlKHVhcCk7CisKKwlzbnByaW50Zih1YXAtPnR5cGUsIHNpemVvZih1YXAtPnR5cGUpLCAiUEwwMTEgcmV2JXUiLCBhbWJhX3JldihkZXYpKTsKIAogCWFtYmFfcG9ydHNbaV0gPSB1YXA7CiAKQEAgLTg3OSw2ICsxNDA3LDcgQEAKIAlpZiAocmV0KSB7CiAJCWFtYmFfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKIAkJYW1iYV9wb3J0c1tpXSA9IE5VTEw7CisJCXBsMDExX2RtYV9yZW1vdmUodWFwKTsKIAkJY2xrX3B1dCh1YXAtPmNsayk7CiAgdW5tYXA6CiAJCWlvdW5tYXAoYmFzZSk7CkBAIC05MDIsNiArMTQzMSw3IEBACiAJCWlmIChhbWJhX3BvcnRzW2ldID09IHVhcCkKIAkJCWFtYmFfcG9ydHNbaV0gPSBOVUxMOwogCisJcGwwMTFfZG1hX3JlbW92ZSh1YXApOwogCWlvdW5tYXAodWFwLT5wb3J0Lm1lbWJhc2UpOwogCWNsa19wdXQodWFwLT5jbGspOwogCWtmcmVlKHVhcCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9hcGJ1YXJ0LmMgYi9kcml2ZXJzL3NlcmlhbC9hcGJ1YXJ0LmMKaW5kZXggY2MwMWM2NS4uMDk1YTVkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvYXBidWFydC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2FwYnVhcnQuYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L29mLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CkBAIC01MjAsMTEgKzUyMSwxMiBAQAogfTsKIAogCi1zdGF0aWMgdm9pZCBncmxpYl9hcGJ1YXJ0X2NvbmZpZ3VyZSh2b2lkKTsKK3N0YXRpYyBpbnQgZ3JsaWJfYXBidWFydF9jb25maWd1cmUodm9pZCk7CiAKIHN0YXRpYyBpbnQgX19pbml0IGFwYnVhcnRfY29uc29sZV9pbml0KHZvaWQpCiB7Ci0JZ3JsaWJfYXBidWFydF9jb25maWd1cmUoKTsKKwlpZiAoZ3JsaWJfYXBidWFydF9jb25maWd1cmUoKSkKKwkJcmV0dXJuIC1FTk9ERVY7CiAJcmVnaXN0ZXJfY29uc29sZSgmZ3JsaWJfYXBidWFydF9jb25zb2xlKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTU3MywxMyArNTc1LDE1IEBACiAJcHJpbnRrKEtFUk5fSU5GTyAiZ3JsaWItYXBidWFydCBhdCAweCVsbHgsIGlycSAlZFxuIiwKIAkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgcG9ydC0+bWFwYmFzZSwgcG9ydC0+aXJxKTsKIAlyZXR1cm4gMDsKLQogfQogCiBzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBfX2luaXRkYXRhIGFwYnVhcnRfbWF0Y2hbXSA9IHsKIAl7CiAJIC5uYW1lID0gIkdBSVNMRVJfQVBCVUFSVCIsCiAJIH0sCisJeworCSAubmFtZSA9ICIwMV8wMGMiLAorCSB9LAogCXt9LAogfTsKIApAQCAtNTkzLDU0ICs1OTcsNDkgQEAKIH07CiAKIAotc3RhdGljIHZvaWQgZ3JsaWJfYXBidWFydF9jb25maWd1cmUodm9pZCkKK3N0YXRpYyBpbnQgZ3JsaWJfYXBidWFydF9jb25maWd1cmUodm9pZCkKIHsKLQlzdGF0aWMgaW50IGVudW1fZG9uZTsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCAqcnA7Ci0Jc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IE5VTEw7CiAJY29uc3QgdTMyICpwcm9wOwotCWludCBmcmVxX2toejsKLQlpbnQgdiA9IDAsIGQgPSAwOwotCXVuc2lnbmVkIGludCBhZGRyOwotCWludCBpcnEsIGxpbmU7Ci0Jc3RydWN0IGFtYmFfcHJvbV9yZWdpc3RlcnMgKnJlZ3M7Ci0KLQlpZiAoZW51bV9kb25lKQotCQlyZXR1cm47CisJaW50IGZyZXFfa2h6LCBsaW5lID0gMDsKIAogCS8qIEdldCBidXMgZnJlcXVlbmN5ICovCiAJcnAgPSBvZl9maW5kX25vZGVfYnlfcGF0aCgiLyIpOworCWlmICghcnApCisJCXJldHVybiAtRU5PREVWOwogCXJwID0gb2ZfZ2V0X25leHRfY2hpbGQocnAsIE5VTEwpOworCWlmICghcnApCisJCXJldHVybiAtRU5PREVWOwogCXByb3AgPSBvZl9nZXRfcHJvcGVydHkocnAsICJjbG9jay1mcmVxdWVuY3kiLCBOVUxMKTsKKwlpZiAoIXByb3ApCisJCXJldHVybiAtRU5PREVWOwogCWZyZXFfa2h6ID0gKnByb3A7CiAKLQlsaW5lID0gMDsKIAlmb3JfZWFjaF9tYXRjaGluZ19ub2RlKG5wLCBhcGJ1YXJ0X21hdGNoKSB7CisJCWNvbnN0IGludCAqaXJxcywgKmFtcG9wdHM7CisJCWNvbnN0IHN0cnVjdCBhbWJhX3Byb21fcmVnaXN0ZXJzICpyZWdzOworCQlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0OworCQl1bnNpZ25lZCBsb25nIGFkZHI7CiAKLQkJaW50ICp2ZW5kb3IgPSAoaW50ICopIG9mX2dldF9wcm9wZXJ0eShucCwgInZlbmRvciIsIE5VTEwpOwotCQlpbnQgKmRldmljZSA9IChpbnQgKikgb2ZfZ2V0X3Byb3BlcnR5KG5wLCAiZGV2aWNlIiwgTlVMTCk7Ci0JCWludCAqaXJxcyA9IChpbnQgKikgb2ZfZ2V0X3Byb3BlcnR5KG5wLCAiaW50ZXJydXB0cyIsIE5VTEwpOwotCQlyZWdzID0gKHN0cnVjdCBhbWJhX3Byb21fcmVnaXN0ZXJzICopCi0JCSAgICBvZl9nZXRfcHJvcGVydHkobnAsICJyZWciLCBOVUxMKTsKKwkJYW1wb3B0cyA9IG9mX2dldF9wcm9wZXJ0eShucCwgImFtcG9wdHMiLCBOVUxMKTsKKwkJaWYgKGFtcG9wdHMgJiYgKCphbXBvcHRzID09IDApKQorCQkJY29udGludWU7IC8qIElnbm9yZSBpZiB1c2VkIGJ5IGFub3RoZXIgT1MgaW5zdGFuY2UgKi8KIAotCQlpZiAodmVuZG9yKQotCQkJdiA9ICp2ZW5kb3I7Ci0JCWlmIChkZXZpY2UpCi0JCQlkID0gKmRldmljZTsKKwkJaXJxcyA9IG9mX2dldF9wcm9wZXJ0eShucCwgImludGVycnVwdHMiLCBOVUxMKTsKKwkJcmVncyA9IG9mX2dldF9wcm9wZXJ0eShucCwgInJlZyIsIE5VTEwpOwogCiAJCWlmICghaXJxcyB8fCAhcmVncykKLQkJCXJldHVybjsKKwkJCWNvbnRpbnVlOwogCiAJCWdybGliX2FwYnVhcnRfbm9kZXNbbGluZV0gPSBucDsKIAogCQlhZGRyID0gcmVncy0+cGh5c19hZGRyOwotCQlpcnEgPSAqaXJxczsKIAogCQlwb3J0ID0gJmdybGliX2FwYnVhcnRfcG9ydHNbbGluZV07CiAKIAkJcG9ydC0+bWFwYmFzZSA9IGFkZHI7CiAJCXBvcnQtPm1lbWJhc2UgPSBpb3JlbWFwKGFkZHIsIHNpemVvZihzdHJ1Y3QgZ3JsaWJfYXBidWFydF9yZWdzX21hcCkpOwotCQlwb3J0LT5pcnEgPSBpcnE7CisJCXBvcnQtPmlycSA9ICppcnFzOwogCQlwb3J0LT5pb3R5cGUgPSBVUElPX01FTTsKIAkJcG9ydC0+b3BzID0gJmdybGliX2FwYnVhcnRfb3BzOwogCQlwb3J0LT5mbGFncyA9IFVQRl9CT09UX0FVVE9DT05GOwpAQCAtNjUyLDEyICs2NTEsMTAgQEAKIAkJLyogV2Ugc3VwcG9ydCBtYXhpbXVtIFVBUlRfTlIgdWFydHMgLi4uICovCiAJCWlmIChsaW5lID09IFVBUlRfTlIpCiAJCQlicmVhazsKLQogCX0KIAotCWVudW1fZG9uZSA9IDE7Ci0KIAlncmxpYl9hcGJ1YXJ0X2RyaXZlci5uciA9IGdybGliX2FwYnVhcnRfcG9ydF9uciA9IGxpbmU7CisJcmV0dXJuIGxpbmUgPyAwIDogLUVOT0RFVjsKIH0KIAogc3RhdGljIGludCBfX2luaXQgZ3JsaWJfYXBidWFydF9pbml0KHZvaWQpCkBAIC02NjUsNyArNjYyLDkgQEAKIAlpbnQgcmV0OwogCiAJLyogRmluZCBhbGwgQVBCVUFSVFMgaW4gZGV2aWNlIHRoZSB0cmVlIGFuZCBpbml0aWFsaXplIHRoZWlyIHBvcnRzICovCi0JZ3JsaWJfYXBidWFydF9jb25maWd1cmUoKTsKKwlyZXQgPSBncmxpYl9hcGJ1YXJ0X2NvbmZpZ3VyZSgpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CiAKIAlwcmludGsoS0VSTl9JTkZPICJTZXJpYWw6IEdSTElCIEFQQlVBUlQgZHJpdmVyXG4iKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnQuaCBiL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0LmgKaW5kZXggNzI3NGI1Mi4uYjc1NGRjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnQuaAorKysgYi9kcml2ZXJzL3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydC5oCkBAIC03NiwxOCArNzYsMTIgQEAKIAl1bnNpZ25lZCBjaGFyCQkqdHhfYnVmOwogCXVuc2lnbmVkIGNoYXIJCSpyeF9idWY7CiAJdTMyCQkJZmxhZ3M7Ci0Jdm9pZAkJCSgqc2V0X2xpbmVpZikoc3RydWN0IHVhcnRfY3BtX3BvcnQgKik7CiAJc3RydWN0IGNsawkJKmNsazsKIAl1OAkJCWJyZzsKIAl1aW50CQkJIGRwX2FkZHI7CiAJdm9pZAkJCSptZW1fYWRkcjsKIAlkbWFfYWRkcl90CQkgZG1hX2FkZHI7CiAJdTMyCQkJbWVtX3NpemU7Ci0JLyogaGVscGVycyAqLwotCWludAkJCSBiYXVkOwotCWludAkJCSBiaXRzOwotCS8qIEtlZXAgdHJhY2sgb2YgJ29kZCcgU01DMiB3aXJpbmdzICovCi0JaW50CQkJaXNfcG9ydGI7CiAJLyogd2FpdCBvbiBjbG9zZSBpZiBuZWVkZWQgKi8KIAlpbnQJCQl3YWl0X2Nsb3Npbmc7CiAJLyogdmFsdWUgdG8gY29tYmluZSB3aXRoIG9wY29kZSB0byBmb3JtIGNwbSBjb21tYW5kICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydF9jb3JlLmMgYi9kcml2ZXJzL3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydF9jb3JlLmMKaW5kZXggZjJiOGFkYy4uODY5MmZmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY29yZS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NvcmUuYwpAQCAtNzIsNiArNzIsOCBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKKyNkZWZpbmUgSFdfQlVGX1NQRF9USFJFU0hPTEQgICAgOTYwMAorCiAvKgogICogQ2hlY2ssIGlmIHRyYW5zbWl0IGJ1ZmZlcnMgYXJlIHByb2Nlc3NlZAogKi8KQEAgLTUwMyw2ICs1MDUsMTEgQEAKIAlwcl9kZWJ1ZygiQ1BNIHVhcnRbJWRdOnNldF90ZXJtaW9zXG4iLCBwb3J0LT5saW5lKTsKIAogCWJhdWQgPSB1YXJ0X2dldF9iYXVkX3JhdGUocG9ydCwgdGVybWlvcywgb2xkLCAwLCBwb3J0LT51YXJ0Y2xrIC8gMTYpOworCWlmIChiYXVkIDw9IEhXX0JVRl9TUERfVEhSRVNIT0xEIHx8CisJICAgIChwaW5mby0+cG9ydC5zdGF0ZSAmJiBwaW5mby0+cG9ydC5zdGF0ZS0+cG9ydC50dHktPmxvd19sYXRlbmN5KSkKKwkJcGluZm8tPnJ4X2ZpZm9zaXplID0gMTsKKwllbHNlCisJCXBpbmZvLT5yeF9maWZvc2l6ZSA9IFJYX0JVRl9TSVpFOwogCiAJLyogQ2hhcmFjdGVyIGxlbmd0aCBwcm9ncmFtbWVkIGludG8gdGhlIG1vZGUgcmVnaXN0ZXIgaXMgdGhlCiAJICogc3VtIG9mOiAxIHN0YXJ0IGJpdCwgbnVtYmVyIG9mIGRhdGEgYml0cywgMCBvciAxIHBhcml0eSBiaXQsCkBAIC01OTQsNiArNjAxLDE3IEBACiAJICovCiAJYml0cysrOwogCWlmIChJU19TTUMocGluZm8pKSB7CisJCS8qCisJCSAqIE1SQkxSIGNhbiBiZSBjaGFuZ2VkIHdoaWxlIGFuIFNNQy9TQ0MgaXMgb3BlcmF0aW5nIG9ubHkKKwkJICogaWYgaXQgaXMgZG9uZSBpbiBhIHNpbmdsZSBidXMgY3ljbGUgd2l0aCBvbmUgMTYtYml0IG1vdmUKKwkJICogKG5vdCB0d28gOC1iaXQgYnVzIGN5Y2xlcyBiYWNrLXRvLWJhY2spLiBUaGlzIG9jY3VycyB3aGVuCisJCSAqIHRoZSBjcCBzaGlmdHMgY29udHJvbCB0byB0aGUgbmV4dCBSeEJELCBzbyB0aGUgY2hhbmdlIGRvZXMKKwkJICogbm90IHRha2UgZWZmZWN0IGltbWVkaWF0ZWx5LiBUbyBndWFyYW50ZWUgdGhlIGV4YWN0IFJ4QkQKKwkJICogb24gd2hpY2ggdGhlIGNoYW5nZSBvY2N1cnMsIGNoYW5nZSBNUkJMUiBvbmx5IHdoaWxlIHRoZQorCQkgKiBTTUMvU0NDIHJlY2VpdmVyIGlzIGRpc2FibGVkLgorCQkgKi8KKwkJb3V0X2JlMTYoJnBpbmZvLT5zbWN1cC0+c21jX21yYmxyLCBwaW5mby0+cnhfZmlmb3NpemUpOworCiAJCS8qIFNldCB0aGUgbW9kZSByZWdpc3Rlci4gIFdlIHdhbnQgdG8ga2VlcCBhIGNvcHkgb2YgdGhlCiAJCSAqIGVuYWJsZXMsIGJlY2F1c2Ugd2Ugd2FudCB0byBwdXQgdGhlbSBiYWNrIGlmIHRoZXkgd2VyZQogCQkgKiBwcmVzZW50LgpAQCAtNjA0LDYgKzYyMiw3IEBACiAJCW91dF9iZTE2KCZzbWNwLT5zbWNfc21jbXIsIHNtY3JfbWtfY2xlbihiaXRzKSB8IGN2YWwgfAogCQkgICAgU01DTVJfU01fVUFSVCB8IHByZXZfbW9kZSk7CiAJfSBlbHNlIHsKKwkJb3V0X2JlMTYoJnBpbmZvLT5zY2N1cC0+c2NjX2dlbnNjYy5zY2NfbXJibHIsIHBpbmZvLT5yeF9maWZvc2l6ZSk7CiAJCW91dF9iZTE2KCZzY2NwLT5zY2NfcHNtciwgKHNiaXRzIDw8IDEyKSB8IHNjdmFsKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2lmeDZ4NjAuYyBiL2RyaXZlcnMvc2VyaWFsL2lmeDZ4NjAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjkzNzYzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zZXJpYWwvaWZ4Nng2MC5jCkBAIC0wLDAgKzEsMTQwNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBEcml2ZXIgZm9yIHRoZSBJRlggNng2MCBzcGkgbW9kZW0uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IE9wdGlvbiBJbnRlcm5hdGlvbmFsCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRmlsaXAgQWJlbiA8Zi5hYmVuQG9wdGlvbi5jb20+CisgKgkJICAgICAgRGVuaXMgSm9zZXBoIEJhcnJvdyA8ZC5iYXJvd0BvcHRpb24uY29tPgorICoJCSAgICAgIEphbiBEdW1vbiA8ai5kdW1vbkBvcHRpb24uY29tPgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBJbnRlbCBDb3JwCisgKiBSdXNzIEdvcmJ5IDxyaWNoYXJkeC5yLmdvcmJ5QGludGVsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxLAorICogVVNBCisgKgorICogRHJpdmVyIG1vZGlmaWVkIGJ5IEludGVsIGZyb20gT3B0aW9uIGd0bTUwMWxfc3BpLmMKKyAqCisgKiBOb3RlcworICogbwlUaGUgZHJpdmVyIGN1cnJlbnRseSBhc3N1bWVzIGEgc2luZ2xlIGRldmljZSBvbmx5LiBJZiB5b3UgbmVlZCB0bworICoJY2hhbmdlIHRoaXMgdGhlbiBsb29rIGZvciBzYXZlZF9pZnhfZGV2IGFuZCBhZGQgYSBkZXZpY2UgbG9va3VwCisgKiBvCVRoZSBkcml2ZXIgaXMgaW50ZW5kZWQgdG8gYmUgYmlnLWVuZGlhbiBzYWZlIGJ1dCBoYXMgbmV2ZXIgYmVlbgorICoJdGVzdGVkIHRoYXQgd2F5IChubyBzdWl0YWJsZSBoYXJkd2FyZSkuIFRoZXJlIGFyZSBhIGNvdXBsZSBvZiBGSVhNRQorICoJbm90ZXMgYnkgYXJlYXMgdGhhdCBtYXkgbmVlZCBhZGRyZXNzaW5nCisgKiBvCVNvbWUgb2YgdGhlIEdQSU8gbmFtaW5nL3NldHVwIGFzc3VtcHRpb25zIG1heSBuZWVkIHJldmlzaXRpbmcgaWYKKyAqCXlvdSBuZWVkIHRvIHVzZSB0aGlzIGRyaXZlciBmb3IgYW5vdGhlciBwbGF0Zm9ybS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdGVybWlvcy5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC9rZmlmby5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9yZmtpbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lwLmg+CisjaW5jbHVkZSA8bGludXgvZG1hcG9vbC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL2lmeF9tb2RlbS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNpbmNsdWRlICJpZng2eDYwLmgiCisKKyNkZWZpbmUgSUZYX1NQSV9NT1JFX01BU0sJCTB4MTAKKyNkZWZpbmUgSUZYX1NQSV9NT1JFX0JJVAkJMTIJLyogYml0IHBvc2l0aW9uIGluIHUxNiAqLworI2RlZmluZSBJRlhfU1BJX0NUU19CSVQJCQkxMwkvKiBiaXQgcG9zaXRpb24gaW4gdTE2ICovCisjZGVmaW5lIElGWF9TUElfVFRZX0lECQkJMAorI2RlZmluZSBJRlhfU1BJX1RJTUVPVVRfU0VDCQkyCisjZGVmaW5lIElGWF9TUElfSEVBREVSXzAJCSgtMSkKKyNkZWZpbmUgSUZYX1NQSV9IRUFERVJfRgkJKC0yKQorCisvKiBmb3J3YXJkIHJlZmVyZW5jZSAqLworc3RhdGljIHZvaWQgaWZ4X3NwaV9oYW5kbGVfc3JkeShzdHJ1Y3QgaWZ4X3NwaV9kZXZpY2UgKmlmeF9kZXYpOworCisvKiBsb2NhbCB2YXJpYWJsZXMgKi8KK3N0YXRpYyBpbnQgc3BpX2IxNiA9IDE7CQkJLyogOCBvciAxNiBiaXQgd29yZCBsZW5ndGggKi8KK3N0YXRpYyBzdHJ1Y3QgdHR5X2RyaXZlciAqdHR5X2RydjsKK3N0YXRpYyBzdHJ1Y3QgaWZ4X3NwaV9kZXZpY2UgKnNhdmVkX2lmeF9kZXY7CitzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGlmeF9zcGlfa2V5OworCisvKiBHUElPL0dQRSBzZXR0aW5ncyAqLworCisvKioKKyAqCW1yZHlfc2V0X2hpZ2gJCS0Jc2V0IE1SRFkgR1BJTworICoJQGlmeDogZGV2aWNlIHdlIGFyZSBjb250cm9sbGluZworICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIG1yZHlfc2V0X2hpZ2goc3RydWN0IGlmeF9zcGlfZGV2aWNlICppZngpCit7CisJZ3Bpb19zZXRfdmFsdWUoaWZ4LT5ncGlvLm1yZHksIDEpOworfQorCisvKioKKyAqCW1yZHlfc2V0X2xvdwkJLQljbGVhciBNUkRZIEdQSU8KKyAqCUBpZng6IGRldmljZSB3ZSBhcmUgY29udHJvbGxpbmcKKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBtcmR5X3NldF9sb3coc3RydWN0IGlmeF9zcGlfZGV2aWNlICppZngpCit7CisJZ3Bpb19zZXRfdmFsdWUoaWZ4LT5ncGlvLm1yZHksIDApOworfQorCisvKioKKyAqCWlmeF9zcGlfcG93ZXJfc3RhdGVfc2V0CisgKglAaWZ4X2Rldjogb3VyIFNQSSBkZXZpY2UKKyAqCUB2YWw6IGJpdHMgdG8gc2V0CisgKgorICoJU2V0IGJpdCBpbiBwb3dlciBzdGF0dXMgYW5kIHNpZ25hbCBwb3dlciBzeXN0ZW0gaWYgc3RhdHVzIGJlY29tZXMgbm9uLTAKKyAqLworc3RhdGljIHZvaWQKK2lmeF9zcGlfcG93ZXJfc3RhdGVfc2V0KHN0cnVjdCBpZnhfc3BpX2RldmljZSAqaWZ4X2RldiwgdW5zaWduZWQgY2hhciB2YWwpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpZnhfZGV2LT5wb3dlcl9sb2NrLCBmbGFncyk7CisKKwkvKgorCSAqIGlmIHBvd2VyIHN0YXR1cyBpcyBhbHJlYWR5IG5vbi0wLCBqdXN0IHVwZGF0ZSwgZWxzZQorCSAqIHRlbGwgcG93ZXIgc3lzdGVtCisJICovCisJaWYgKCFpZnhfZGV2LT5wb3dlcl9zdGF0dXMpCisJCXBtX3J1bnRpbWVfZ2V0KCZpZnhfZGV2LT5zcGlfZGV2LT5kZXYpOworCWlmeF9kZXYtPnBvd2VyX3N0YXR1cyB8PSB2YWw7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZnhfZGV2LT5wb3dlcl9sb2NrLCBmbGFncyk7Cit9CisKKy8qKgorICoJaWZ4X3NwaV9wb3dlcl9zdGF0ZV9jbGVhcgktCWNsZWFyIHBvd2VyIGJpdAorICoJQGlmeF9kZXY6IG91ciBTUEkgZGV2aWNlCisgKglAdmFsOiBiaXRzIHRvIGNsZWFyCisgKgorICoJY2xlYXIgYml0IGluIHBvd2VyIHN0YXR1cyBhbmQgc2lnbmFsIHBvd2VyIHN5c3RlbSBpZiBzdGF0dXMgYmVjb21lcyAwCisgKi8KK3N0YXRpYyB2b2lkCitpZnhfc3BpX3Bvd2VyX3N0YXRlX2NsZWFyKHN0cnVjdCBpZnhfc3BpX2RldmljZSAqaWZ4X2RldiwgdW5zaWduZWQgY2hhciB2YWwpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpZnhfZGV2LT5wb3dlcl9sb2NrLCBmbGFncyk7CisKKwlpZiAoaWZ4X2Rldi0+cG93ZXJfc3RhdHVzKSB7CisJCWlmeF9kZXYtPnBvd2VyX3N0YXR1cyAmPSB+dmFsOworCQlpZiAoIWlmeF9kZXYtPnBvd2VyX3N0YXR1cykKKwkJCXBtX3J1bnRpbWVfcHV0KCZpZnhfZGV2LT5zcGlfZGV2LT5kZXYpOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlmeF9kZXYtPnBvd2VyX2xvY2ssIGZsYWdzKTsKK30KKworLyoqCisgKglzd2FwX2J1ZgorICoJQGJ1Zjogb3VyIGJ1ZmZlcgorICoJQGxlbiA6IG51bWJlciBvZiBieXRlcyAobm90IHdvcmRzKSBpbiB0aGUgYnVmZmVyCisgKglAZW5kOiBlbmQgb2YgYnVmZmVyCisgKgorICoJU3dhcCB0aGUgY29udGVudHMgb2YgYSBidWZmZXIgaW50byBiaWcgZW5kaWFuIGZvcm1hdAorICovCitzdGF0aWMgaW5saW5lIHZvaWQgc3dhcF9idWYodTE2ICpidWYsIGludCBsZW4sIHZvaWQgKmVuZCkKK3sKKwlpbnQgbjsKKworCWxlbiA9ICgobGVuICsgMSkgPj4gMSk7CisJaWYgKCh2b2lkICopJmJ1ZltsZW5dID4gZW5kKSB7CisJCXByX2Vycigic3dhcF9idWY6IHN3YXAgZXhjZWVkcyBib3VuZGFyeSAoJXAgPiAlcCkhIiwKKwkJICAgICAgICZidWZbbGVuXSwgZW5kKTsKKwkJcmV0dXJuOworCX0KKwlmb3IgKG4gPSAwOyBuIDwgbGVuOyBuKyspIHsKKwkJKmJ1ZiA9IGNwdV90b19iZTE2KCpidWYpOworCQlidWYrKzsKKwl9Cit9CisKKy8qKgorICoJbXJkeV9hc3NlcnQJCS0JYXNzZXJ0IE1SRFkgbGluZQorICoJQGlmeF9kZXY6IG91ciBTUEkgZGV2aWNlCisgKgorICoJQXNzZXJ0IG1yZHkgYW5kIHNldCB0aW1lciB0byB3YWl0IGZvciBTUkRZIGludGVycnVwdCwgaWYgU1JEWSBpcyBsb3cKKyAqCW5vdy4KKyAqCisgKglGSVhNRTogQ2FuIFNSRFkgZXZlbiBnbyBoaWdoIGFzIHdlIGFyZSBydW5uaW5nIHRoaXMgY29kZSA/CisgKi8KK3N0YXRpYyB2b2lkIG1yZHlfYXNzZXJ0KHN0cnVjdCBpZnhfc3BpX2RldmljZSAqaWZ4X2RldikKK3sKKwlpbnQgdmFsID0gZ3Bpb19nZXRfdmFsdWUoaWZ4X2Rldi0+Z3Bpby5zcmR5KTsKKwlpZiAoIXZhbCkgeworCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoSUZYX1NQSV9TVEFURV9USU1FUl9QRU5ESU5HLAorCQkJCSAgICAgICZpZnhfZGV2LT5mbGFncykpIHsKKwkJCWlmeF9kZXYtPnNwaV90aW1lci5leHBpcmVzID0KKwkJCQlqaWZmaWVzICsgSUZYX1NQSV9USU1FT1VUX1NFQypIWjsKKwkJCWFkZF90aW1lcigmaWZ4X2Rldi0+c3BpX3RpbWVyKTsKKworCQl9CisJfQorCWlmeF9zcGlfcG93ZXJfc3RhdGVfc2V0KGlmeF9kZXYsIElGWF9TUElfUE9XRVJfREFUQV9QRU5ESU5HKTsKKwltcmR5X3NldF9oaWdoKGlmeF9kZXYpOworfQorCisvKioKKyAqCWlmeF9zcGlfaGFuZ3VwCQktCWhhbmcgdXAgYW4gSUZYIGRldmljZQorICoJQGlmeF9kZXY6IG91ciBTUEkgZGV2aWNlCisgKgorICoJSGFuZyB1cCB0aGUgdHR5IGF0dGFjaGVkIHRvIHRoZSBJRlggZGV2aWNlIGlmIG9uZSBpcyBjdXJyZW50bHkKKyAqCW9wZW4uIElmIG5vdCB0YWtlIG5vIGFjdGlvbgorICovCitzdGF0aWMgdm9pZCBpZnhfc3BpX3R0eWhhbmd1cChzdHJ1Y3QgaWZ4X3NwaV9kZXZpY2UgKmlmeF9kZXYpCit7CisJc3RydWN0IHR0eV9wb3J0ICpwcG9ydCA9ICZpZnhfZGV2LT50dHlfcG9ydDsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gdHR5X3BvcnRfdHR5X2dldChwcG9ydCk7CisJaWYgKHR0eSkgeworCQl0dHlfaGFuZ3VwKHR0eSk7CisJCXR0eV9rcmVmX3B1dCh0dHkpOworCX0KK30KKworLyoqCisgKglpZnhfc3BpX3RpbWVvdXQJCS0JU1BJIHRpbWVvdXQKKyAqCUBhcmc6IG91ciBTUEkgZGV2aWNlCisgKgorICoJVGhlIFNQSSBoYXMgdGltZWQgb3V0OiBoYW5nIHVwIHRoZSB0dHkuIFVzZXJzIHdpbGwgdGhlbiBzZWUgYSBoYW5ndXAKKyAqCWFuZCBlcnJvciBldmVudHMuCisgKi8KK3N0YXRpYyB2b2lkIGlmeF9zcGlfdGltZW91dCh1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgaWZ4X3NwaV9kZXZpY2UgKmlmeF9kZXYgPSAoc3RydWN0IGlmeF9zcGlfZGV2aWNlICopYXJnOworCisJZGV2X3dhcm4oJmlmeF9kZXYtPnNwaV9kZXYtPmRldiwgIioqKiBTUEkgVGltZW91dCAqKioiKTsKKwlpZnhfc3BpX3R0eWhhbmd1cChpZnhfZGV2KTsKKwltcmR5X3NldF9sb3coaWZ4X2Rldik7CisJY2xlYXJfYml0KElGWF9TUElfU1RBVEVfVElNRVJfUEVORElORywgJmlmeF9kZXYtPmZsYWdzKTsKK30KKworLyogY2hhci90dHkgb3BlcmF0aW9ucyAqLworCisvKioKKyAqCWlmeF9zcGlfdGlvY21nZXQJLQlnZXQgbW9kZW0gbGluZXMKKyAqCUB0dHk6IG91ciB0dHkgZGV2aWNlCisgKglAZmlscDogZmlsZSBoYW5kbGUgaXNzdWluZyB0aGUgcmVxdWVzdAorICoKKyAqCU1hcCB0aGUgc2lnbmFsIHN0YXRlIGludG8gTGludXggbW9kZW0gZmxhZ3MgYW5kIHJlcG9ydCB0aGUgdmFsdWUKKyAqCWluIExpbnV4IHRlcm1zCisgKi8KK3N0YXRpYyBpbnQgaWZ4X3NwaV90aW9jbWdldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwl1bnNpZ25lZCBpbnQgdmFsdWU7CisJc3RydWN0IGlmeF9zcGlfZGV2aWNlICppZnhfZGV2ID0gdHR5LT5kcml2ZXJfZGF0YTsKKworCXZhbHVlID0KKwkodGVzdF9iaXQoSUZYX1NQSV9SVFMsICZpZnhfZGV2LT5zaWduYWxfc3RhdGUpID8gVElPQ01fUlRTIDogMCkgfAorCSh0ZXN0X2JpdChJRlhfU1BJX0RUUiwgJmlmeF9kZXYtPnNpZ25hbF9zdGF0ZSkgPyBUSU9DTV9EVFIgOiAwKSB8CisJKHRlc3RfYml0KElGWF9TUElfQ1RTLCAmaWZ4X2Rldi0+c2lnbmFsX3N0YXRlKSA/IFRJT0NNX0NUUyA6IDApIHwKKwkodGVzdF9iaXQoSUZYX1NQSV9EU1IsICZpZnhfZGV2LT5zaWduYWxfc3RhdGUpID8gVElPQ01fRFNSIDogMCkgfAorCSh0ZXN0X2JpdChJRlhfU1BJX0RDRCwgJmlmeF9kZXYtPnNpZ25hbF9zdGF0ZSkgPyBUSU9DTV9DQVIgOiAwKSB8CisJKHRlc3RfYml0KElGWF9TUElfUkksICZpZnhfZGV2LT5zaWduYWxfc3RhdGUpID8gVElPQ01fUk5HIDogMCk7CisJcmV0dXJuIHZhbHVlOworfQorCisvKioKKyAqCWlmeF9zcGlfdGlvY21zZXQJLQlzZXQgbW9kZW0gYml0cworICoJQHR0eTogdGhlIHR0eSBzdHJ1Y3R1cmUKKyAqCUBmaWxwOiBmaWxlIGhhbmRsZSBpc3N1aW5nIHRoZSByZXF1ZXN0CisgKglAc2V0OiBiaXRzIHRvIHNldAorICoJQGNsZWFyOiBiaXRzIHRvIGNsZWFyCisgKgorICoJVGhlIElGWDZ4NjAgb25seSBzdXBwb3J0cyBEVFIgYW5kIFJUUy4gU2V0IHRoZW0gYWNjb3JkaW5nbHkKKyAqCWFuZCBmbGFnIHRoYXQgYW4gdXBkYXRlIHRvIHRoZSBtb2RlbSBpcyBuZWVkZWQuCisgKgorICoJRklYTUU6IGRvIHdlIG5lZWQgdG8ga2ljayB0aGUgdHJhbmZlcnMgd2hlbiB3ZSBkbyB0aGlzID8KKyAqLworc3RhdGljIGludCBpZnhfc3BpX3Rpb2Ntc2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxwLAorCQkJICAgIHVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcikKK3sKKwlzdHJ1Y3QgaWZ4X3NwaV9kZXZpY2UgKmlmeF9kZXYgPSB0dHktPmRyaXZlcl9kYXRhOworCisJaWYgKHNldCAmIFRJT0NNX1JUUykKKwkJc2V0X2JpdChJRlhfU1BJX1JUUywgJmlmeF9kZXYtPnNpZ25hbF9zdGF0ZSk7CisJaWYgKHNldCAmIFRJT0NNX0RUUikKKwkJc2V0X2JpdChJRlhfU1BJX0RUUiwgJmlmeF9kZXYtPnNpZ25hbF9zdGF0ZSk7CisJaWYgKGNsZWFyICYgVElPQ01fUlRTKQorCQljbGVhcl9iaXQoSUZYX1NQSV9SVFMsICZpZnhfZGV2LT5zaWduYWxfc3RhdGUpOworCWlmIChjbGVhciAmIFRJT0NNX0RUUikKKwkJY2xlYXJfYml0KElGWF9TUElfRFRSLCAmaWZ4X2Rldi0+c2lnbmFsX3N0YXRlKTsKKworCXNldF9iaXQoSUZYX1NQSV9VUERBVEUsICZpZnhfZGV2LT5zaWduYWxfc3RhdGUpOworCXJldHVybiAwOworfQorCisvKioKKyAqCWlmeF9zcGlfb3BlbgktCWNhbGxlZCBvbiB0dHkgb3BlbgorICoJQHR0eTogb3VyIHR0eSBkZXZpY2UKKyAqCUBmaWxwOiBmaWxlIGhhbmRsZSBiZWluZyBhc3NvY2lhdGVkIHdpdGggdGhlIHR0eQorICoKKyAqCU9wZW4gdGhlIHR0eSBpbnRlcmZhY2UuIFdlIGxldCB0aGUgdHR5X3BvcnQgbGF5ZXIgZG8gYWxsIHRoZSB3b3JrCisgKglmb3IgdXMuCisgKgorICoJRklYTUU6IFJlbW92ZSBzaW5nbGUgZGV2aWNlIGFzc3VtcHRpb24gYW5kIHNhdmVkX2lmeF9kZXYKKyAqLworc3RhdGljIGludCBpZnhfc3BpX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJcmV0dXJuIHR0eV9wb3J0X29wZW4oJnNhdmVkX2lmeF9kZXYtPnR0eV9wb3J0LCB0dHksIGZpbHApOworfQorCisvKioKKyAqCWlmeF9zcGlfY2xvc2UJLQljYWxsZWQgd2hlbiBvdXIgdHR5IGNsb3NlcworICoJQHR0eTogdGhlIHR0eSBiZWluZyBjbG9zZWQKKyAqCUBmaWxwOiB0aGUgZmlsZSBoYW5kbGUgYmVpbmcgY2xvc2VkCisgKgorICoJUGVyZm9ybSB0aGUgY2xvc2Ugb2YgdGhlIHR0eS4gV2UgdXNlIHRoZSB0dHlfcG9ydCBsYXllciB0byBkbyBhbGwKKyAqCW91ciBoYXJkIHdvcmsuCisgKi8KK3N0YXRpYyB2b2lkIGlmeF9zcGlfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IGlmeF9zcGlfZGV2aWNlICppZnhfZGV2ID0gdHR5LT5kcml2ZXJfZGF0YTsKKwl0dHlfcG9ydF9jbG9zZSgmaWZ4X2Rldi0+dHR5X3BvcnQsIHR0eSwgZmlscCk7CisJLyogRklYTUU6IHNob3VsZCB3ZSBkbyBhbiBpZnhfc3BpX3Jlc2V0IGhlcmUgPyAqLworfQorCisvKioKKyAqCWlmeF9kZWNvZGVfc3BpX2hlYWRlcgktCWRlY29kZSByZWNlaXZlZCBoZWFkZXIKKyAqCUBidWZmZXI6IHRoZSByZWNlaXZlZCBkYXRhCisgKglAbGVuZ3RoOiBkZWNvZGVkIGxlbmd0aAorICoJQG1vcmU6IGRlY29kZWQgbW9yZSBmbGFnCisgKglAcmVjZWl2ZWRfY3RzOiBzdGF0dXMgb2YgY3RzIHdlIHJlY2VpdmVkCisgKgorICoJTm90ZSBob3cgcmVjZWl2ZWRfY3RzIGlzIGhhbmRsZWQgLS0gaWYgaGVhZGVyIGlzIGFsbCBGIGl0IGlzIGxlZnQKKyAqCXRoZSBzYW1lIGFzIGl0IHdhcywgaWYgaGVhZGVyIGlzIGFsbCAwIGl0IGlzIHNldCB0byAwIG90aGVyd2lzZSBpdCBpcworICoJdGFrZW4gZnJvbSB0aGUgaW5jb21pbmcgaGVhZGVyLgorICoKKyAqCUZJWE1FOiBlbmRpYW5uZXNzCisgKi8KK3N0YXRpYyBpbnQgaWZ4X3NwaV9kZWNvZGVfc3BpX2hlYWRlcih1bnNpZ25lZCBjaGFyICpidWZmZXIsIGludCAqbGVuZ3RoLAorCQkJdW5zaWduZWQgY2hhciAqbW9yZSwgdW5zaWduZWQgY2hhciAqcmVjZWl2ZWRfY3RzKQoreworCXUxNiBoMTsKKwl1MTYgaDI7CisJdTE2ICppbl9idWZmZXIgPSAodTE2ICopYnVmZmVyOworCisJaDEgPSAqaW5fYnVmZmVyOworCWgyID0gKihpbl9idWZmZXIrMSk7CisKKwlpZiAoaDEgPT0gMCAmJiBoMiA9PSAwKSB7CisJCSpyZWNlaXZlZF9jdHMgPSAwOworCQlyZXR1cm4gSUZYX1NQSV9IRUFERVJfMDsKKwl9IGVsc2UgaWYgKGgxID09IDB4ZmZmZiAmJiBoMiA9PSAweGZmZmYpIHsKKwkJLyogc3BpX3NsYXZlX2N0cyByZW1haW5zIGFzIGl0IHdhcyAqLworCQlyZXR1cm4gSUZYX1NQSV9IRUFERVJfRjsKKwl9CisKKwkqbGVuZ3RoID0gaDEgJiAweGZmZjsJLyogdXBwZXIgYml0cyBvZiBieXRlIGFyZSBmbGFncyAqLworCSptb3JlID0gKGJ1ZmZlclsxXSA+PiBJRlhfU1BJX01PUkVfQklUKSAmIDE7CisJKnJlY2VpdmVkX2N0cyA9IChidWZmZXJbM10gPj4gSUZYX1NQSV9DVFNfQklUKSAmIDE7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICoJaWZ4X3NldHVwX3NwaV9oZWFkZXIJLQlzZXQgaGVhZGVyIGZpZWxkcworICoJQHR4YnVmZmVyOiBwb2ludGVyIHRvIHN0YXJ0IG9mIFNQSSBidWZmZXIKKyAqCUB0eF9jb3VudDogYnl0ZXMKKyAqCUBtb3JlOiBpbmRpY2F0ZSBpZiBtb3JlIHRvIGZvbGxvdworICoKKyAqCUZvcm1hdCB1cCBhbiBTUEkgaGVhZGVyIGZvciBhIHRyYW5zZmVyCisgKgorICoJRklYTUU6IGVuZGlhbm5lc3M/CisgKi8KK3N0YXRpYyB2b2lkIGlmeF9zcGlfc2V0dXBfc3BpX2hlYWRlcih1bnNpZ25lZCBjaGFyICp0eGJ1ZmZlciwgaW50IHR4X2NvdW50LAorCQkJCQl1bnNpZ25lZCBjaGFyIG1vcmUpCit7CisJKih1MTYgKikodHhidWZmZXIpID0gdHhfY291bnQ7CisJKih1MTYgKikodHhidWZmZXIrMikgPSBJRlhfU1BJX1BBWUxPQURfU0laRTsKKwl0eGJ1ZmZlclsxXSB8PSAobW9yZSA8PCBJRlhfU1BJX01PUkVfQklUKSAmIElGWF9TUElfTU9SRV9NQVNLOworfQorCisvKioKKyAqCWlmeF9zcGlfd2FrZXVwX3NlcmlhbAktCVNQSSBzcGFjZSBtYWRlCisgKglAcG9ydF9kYXRhOiBvdXIgU1BJIGRldmljZQorICoKKyAqCVdlIGhhdmUgZW1wdGllZCB0aGUgRklGTyBlbm91Z2ggdGhhdCB3ZSB3YW50IHRvIGdldCBtb3JlIGRhdGEKKyAqCXF1ZXVlZCBpbnRvIGl0LiBQb2tlIHRoZSBsaW5lIGRpc2NpcGxpbmUgdmlhIHR0eV93YWtldXAgc28gdGhhdAorICoJaXQgd2lsbCBmZWVkIHVzIG1vcmUgYml0cworICovCitzdGF0aWMgdm9pZCBpZnhfc3BpX3dha2V1cF9zZXJpYWwoc3RydWN0IGlmeF9zcGlfZGV2aWNlICppZnhfZGV2KQoreworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisKKwl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZpZnhfZGV2LT50dHlfcG9ydCk7CisJaWYgKCF0dHkpCisJCXJldHVybjsKKwl0dHlfd2FrZXVwKHR0eSk7CisJdHR5X2tyZWZfcHV0KHR0eSk7Cit9CisKKy8qKgorICoJaWZ4X3NwaV9wcmVwYXJlX3R4X2J1ZmZlcgktCXByZXBhcmUgdHJhbnNtaXQgZnJhbWUKKyAqCUBpZnhfZGV2OiBvdXIgU1BJIGRldmljZQorICoKKyAqCVRoZSB0cmFuc21pdCBidWZmciBuZWVkcyBhIGhlYWRlciBhbmQgdmFyaW91cyBvdGhlciBiaXRzIG9mCisgKglpbmZvcm1hdGlvbiBmb2xsb3dlZCBieSBhcyBtdWNoIGRhdGEgYXMgd2UgY2FuIHB1bGwgZnJvbSB0aGUgRklGTworICoJYW5kIHRyYW5zZmVyLiBUaGlzIGZ1bmN0aW9uIGZvcm1hdHMgdXAgYSBzdWl0YWJsZSBidWZmZXIgaW4gdGhlCisgKglpZnhfZGV2LT50eF9idWZmZXIKKyAqCisgKglGSVhNRTogcGVyZm9ybWFuY2UgLSBzaG91bGQgd2Ugd2FrZSB0aGUgdHR5IHdoZW4gdGhlIHF1ZXVlIGlzIGhhbGYKKyAqCQkJICAgICBlbXB0eSA/CisgKi8KK3N0YXRpYyBpbnQgaWZ4X3NwaV9wcmVwYXJlX3R4X2J1ZmZlcihzdHJ1Y3QgaWZ4X3NwaV9kZXZpY2UgKmlmeF9kZXYpCit7CisJaW50IHRlbXBfY291bnQ7CisJaW50IHF1ZXVlX2xlbmd0aDsKKwlpbnQgdHhfY291bnQ7CisJdW5zaWduZWQgY2hhciAqdHhfYnVmZmVyOworCisJdHhfYnVmZmVyID0gaWZ4X2Rldi0+dHhfYnVmZmVyOworCW1lbXNldCh0eF9idWZmZXIsIDAsIElGWF9TUElfVFJBTlNGRVJfU0laRSk7CisKKwkvKiBtYWtlIHJvb20gZm9yIHJlcXVpcmVkIFNQSSBoZWFkZXIgKi8KKwl0eF9idWZmZXIgKz0gSUZYX1NQSV9IRUFERVJfT1ZFUkhFQUQ7CisJdHhfY291bnQgPSBJRlhfU1BJX0hFQURFUl9PVkVSSEVBRDsKKworCS8qIGNsZWFyIHRvIHNpZ25hbCBubyBtb3JlIGRhdGEgaWYgdGhpcyB0dXJucyBvdXQgdG8gYmUgdGhlCisJICogbGFzdCBidWZmZXIgc2VudCBpbiBhIHNlcXVlbmNlICovCisJaWZ4X2Rldi0+c3BpX21vcmUgPSAwOworCisJLyogaWYgbW9kZW0gY3RzIGlzIHNldCwganVzdCBzZW5kIGVtcHR5IGJ1ZmZlciAqLworCWlmICghaWZ4X2Rldi0+c3BpX3NsYXZlX2N0cykgeworCQkvKiBzZWUgaWYgdGhlcmUncyB0eCBkYXRhICovCisJCXF1ZXVlX2xlbmd0aCA9IGtmaWZvX2xlbigmaWZ4X2Rldi0+dHhfZmlmbyk7CisJCWlmIChxdWV1ZV9sZW5ndGggIT0gMCkgeworCQkJLyogZGF0YSB0byBtdXggLS0gc2VlIGlmIHRoZXJlJ3Mgcm9vbSBmb3IgaXQgKi8KKwkJCXRlbXBfY291bnQgPSBtaW4ocXVldWVfbGVuZ3RoLCBJRlhfU1BJX1BBWUxPQURfU0laRSk7CisJCQl0ZW1wX2NvdW50ID0ga2ZpZm9fb3V0X2xvY2tlZCgmaWZ4X2Rldi0+dHhfZmlmbywKKwkJCQkJdHhfYnVmZmVyLCB0ZW1wX2NvdW50LAorCQkJCQkmaWZ4X2Rldi0+Zmlmb19sb2NrKTsKKworCQkJLyogdXBkYXRlIGJ1ZmZlciBwb2ludGVyIGFuZCBkYXRhIGNvdW50IGluIG1lc3NhZ2UgKi8KKwkJCXR4X2J1ZmZlciArPSB0ZW1wX2NvdW50OworCQkJdHhfY291bnQgKz0gdGVtcF9jb3VudDsKKwkJCWlmICh0ZW1wX2NvdW50ID09IHF1ZXVlX2xlbmd0aCkKKwkJCQkvKiBwb2tlIHBvcnQgdG8gZ2V0IG1vcmUgZGF0YSAqLworCQkJCWlmeF9zcGlfd2FrZXVwX3NlcmlhbChpZnhfZGV2KTsKKwkJCWVsc2UgLyogbW9yZSBkYXRhIGluIHBvcnQsIHVzZSBuZXh0IFNQSSBtZXNzYWdlICovCisJCQkJaWZ4X2Rldi0+c3BpX21vcmUgPSAxOworCQl9CisJfQorCS8qIGhhdmUgZGF0YSBhbmQgaW5mbyBmb3IgaGVhZGVyIC0tIHNldCB1cCBTUEkgaGVhZGVyIGluIGJ1ZmZlciAqLworCS8qIHNwaSBoZWFkZXIgbmVlZHMgcGF5bG9hZCBzaXplLCBub3QgZW50aXJlIGJ1ZmZlciBzaXplICovCisJaWZ4X3NwaV9zZXR1cF9zcGlfaGVhZGVyKGlmeF9kZXYtPnR4X2J1ZmZlciwKKwkJCQkJdHhfY291bnQtSUZYX1NQSV9IRUFERVJfT1ZFUkhFQUQsCisJCQkJCWlmeF9kZXYtPnNwaV9tb3JlKTsKKwkvKiBzd2FwIGFjdHVhbCBkYXRhIGluIHRoZSBidWZmZXIgKi8KKwlzd2FwX2J1ZigodTE2ICopKGlmeF9kZXYtPnR4X2J1ZmZlciksIHR4X2NvdW50LAorCQkmaWZ4X2Rldi0+dHhfYnVmZmVyW0lGWF9TUElfVFJBTlNGRVJfU0laRV0pOworCXJldHVybiB0eF9jb3VudDsKK30KKworLyoqCisgKglpZnhfc3BpX3dyaXRlCQktCWxpbmUgZGlzY2lwbGluZSB3cml0ZQorICoJQHR0eTogb3VyIHR0eSBkZXZpY2UKKyAqCUBidWY6IHBvaW50ZXIgdG8gYnVmZmVyIHRvIHdyaXRlIChrZXJuZWwgc3BhY2UpCisgKglAY291bnQ6IHNpemUgb2YgYnVmZmVyCisgKgorICoJV3JpdGUgdGhlIGNoYXJhY3RlcnMgd2UgaGF2ZSBiZWVuIGdpdmVuIGludG8gdGhlIEZJRk8uIElmIHRoZSBkZXZpY2UKKyAqCWlzIG5vdCBhY3RpdmUgdGhlbiBhY3RpdmF0ZSBpdCwgd2hlbiB0aGUgU1JEWSBsaW5lIGlzIGFzc2VydGVkIGJhY2sKKyAqCXRoaXMgd2lsbCBjb21tZW5jZSBJL08KKyAqLworc3RhdGljIGludCBpZnhfc3BpX3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKwkJCSBpbnQgY291bnQpCit7CisJc3RydWN0IGlmeF9zcGlfZGV2aWNlICppZnhfZGV2ID0gdHR5LT5kcml2ZXJfZGF0YTsKKwl1bnNpZ25lZCBjaGFyICp0bXBfYnVmID0gKHVuc2lnbmVkIGNoYXIgKilidWY7CisJaW50IHR4X2NvdW50ID0ga2ZpZm9faW5fbG9ja2VkKCZpZnhfZGV2LT50eF9maWZvLCB0bXBfYnVmLCBjb3VudCwKKwkJCQkgICAmaWZ4X2Rldi0+Zmlmb19sb2NrKTsKKwltcmR5X2Fzc2VydChpZnhfZGV2KTsKKwlyZXR1cm4gdHhfY291bnQ7Cit9CisKKy8qKgorICoJaWZ4X3NwaV9jaGFyc19pbl9idWZmZXIJLQlsaW5lIGRpc2NpcGxpbmUgaGVscGVyCisgKglAdHR5OiBvdXIgdHR5IGRldmljZQorICoKKyAqCVJlcG9ydCBob3cgbXVjaCBkYXRhIHdlIGNhbiBhY2NlcHQgYmVmb3JlIHdlIGRyb3AgYnl0ZXMuIEFzIHdlIHVzZQorICoJYSBzaW1wbGUgRklGTyB0aGlzIGlzIG5pY2UgYW5kIGVhc3kuCisgKi8KK3N0YXRpYyBpbnQgaWZ4X3NwaV93cml0ZV9yb29tKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7CisJc3RydWN0IGlmeF9zcGlfZGV2aWNlICppZnhfZGV2ID0gdHR5LT5kcml2ZXJfZGF0YTsKKwlyZXR1cm4gSUZYX1NQSV9GSUZPX1NJWkUgLSBrZmlmb19sZW4oJmlmeF9kZXYtPnR4X2ZpZm8pOworfQorCisvKioKKyAqCWlmeF9zcGlfY2hhcnNfaW5fYnVmZmVyCS0JbGluZSBkaXNjaXBsaW5lIGhlbHBlcgorICoJQHR0eTogb3VyIHR0eSBkZXZpY2UKKyAqCisgKglSZXBvcnQgaG93IG1hbnkgY2hhcmFjdGVycyB3ZSBoYXZlIGJ1ZmZlcmVkLiBJbiBvdXIgY2FzZSB0aGlzIGlzIHRoZQorICoJbnVtYmVyIG9mIGJ5dGVzIHNpdHRpbmcgaW4gb3VyIHRyYW5zbWl0IEZJRk8uCisgKi8KK3N0YXRpYyBpbnQgaWZ4X3NwaV9jaGFyc19pbl9idWZmZXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKKwlzdHJ1Y3QgaWZ4X3NwaV9kZXZpY2UgKmlmeF9kZXYgPSB0dHktPmRyaXZlcl9kYXRhOworCXJldHVybiBrZmlmb19sZW4oJmlmeF9kZXYtPnR4X2ZpZm8pOworfQorCisvKioKKyAqCWlmeF9wb3J0X2hhbmd1cAorICoJQHBvcnQ6IG91ciB0dHkgcG9ydAorICoKKyAqCXR0eSBwb3J0IGhhbmcgdXAuIENhbGxlZCB3aGVuIHR0eV9oYW5ndXAgcHJvY2Vzc2luZyBpcyBpbnZva2VkIGVpdGhlcgorICoJYnkgbG9zcyBvZiBjYXJyaWVyLCBvciBieSBzb2Z0d2FyZSAoZWcgdmhhbmd1cCkuIFNlcmlhbGl6ZWQgYWdhaW5zdAorICoJYWN0aXZhdGUvc2h1dGRvd24gYnkgdGhlIHR0eSBsYXllci4KKyAqLworc3RhdGljIHZvaWQgaWZ4X3NwaV9oYW5ndXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKKwlzdHJ1Y3QgaWZ4X3NwaV9kZXZpY2UgKmlmeF9kZXYgPSB0dHktPmRyaXZlcl9kYXRhOworCXR0eV9wb3J0X2hhbmd1cCgmaWZ4X2Rldi0+dHR5X3BvcnQpOworfQorCisvKioKKyAqCWlmeF9wb3J0X2FjdGl2YXRlCisgKglAcG9ydDogb3VyIHR0eSBwb3J0CisgKgorICoJdHR5IHBvcnQgYWN0aXZhdGUgbWV0aG9kIC0gY2FsbGVkIGZvciBmaXJzdCBvcGVuLiBTZXJpYWxpemVkCisgKgl3aXRoIGhhbmd1cCBhbmQgc2h1dGRvd24gYnkgdGhlIHR0eSBsYXllci4KKyAqLworc3RhdGljIGludCBpZnhfcG9ydF9hY3RpdmF0ZShzdHJ1Y3QgdHR5X3BvcnQgKnBvcnQsIHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7CisJc3RydWN0IGlmeF9zcGlfZGV2aWNlICppZnhfZGV2ID0KKwkJY29udGFpbmVyX29mKHBvcnQsIHN0cnVjdCBpZnhfc3BpX2RldmljZSwgdHR5X3BvcnQpOworCisJLyogY2xlYXIgYW55IG9sZCBkYXRhOyBjYW4ndCBkbyB0aGlzIGluICdjbG9zZScgKi8KKwlrZmlmb19yZXNldCgmaWZ4X2Rldi0+dHhfZmlmbyk7CisKKwkvKiBwdXQgcG9ydCBkYXRhIGludG8gdGhpcyB0dHkgKi8KKwl0dHktPmRyaXZlcl9kYXRhID0gaWZ4X2RldjsKKworCS8qIGFsbG93cyBmbGlwIHN0cmluZyBwdXNoIGZyb20gaW50IGNvbnRleHQgKi8KKwl0dHktPmxvd19sYXRlbmN5ID0gMTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqCWlmeF9wb3J0X3NodXRkb3duCisgKglAcG9ydDogb3VyIHR0eSBwb3J0CisgKgorICoJdHR5IHBvcnQgc2h1dGRvd24gbWV0aG9kIC0gY2FsbGVkIGZvciBsYXN0IHBvcnQgY2xvc2UuIFNlcmlhbGl6ZWQKKyAqCXdpdGggaGFuZ3VwIGFuZCBhY3RpdmF0ZSBieSB0aGUgdHR5IGxheWVyLgorICovCitzdGF0aWMgdm9pZCBpZnhfcG9ydF9zaHV0ZG93bihzdHJ1Y3QgdHR5X3BvcnQgKnBvcnQpCit7CisJc3RydWN0IGlmeF9zcGlfZGV2aWNlICppZnhfZGV2ID0KKwkJY29udGFpbmVyX29mKHBvcnQsIHN0cnVjdCBpZnhfc3BpX2RldmljZSwgdHR5X3BvcnQpOworCisJbXJkeV9zZXRfbG93KGlmeF9kZXYpOworCWNsZWFyX2JpdChJRlhfU1BJX1NUQVRFX1RJTUVSX1BFTkRJTkcsICZpZnhfZGV2LT5mbGFncyk7CisJdGFza2xldF9raWxsKCZpZnhfZGV2LT5pb193b3JrX3Rhc2tsZXQpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHR0eV9wb3J0X29wZXJhdGlvbnMgaWZ4X3R0eV9wb3J0X29wcyA9IHsKKwkuYWN0aXZhdGUgPSBpZnhfcG9ydF9hY3RpdmF0ZSwKKwkuc2h1dGRvd24gPSBpZnhfcG9ydF9zaHV0ZG93biwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdHR5X29wZXJhdGlvbnMgaWZ4X3NwaV9zZXJpYWxfb3BzID0geworCS5vcGVuID0gaWZ4X3NwaV9vcGVuLAorCS5jbG9zZSA9IGlmeF9zcGlfY2xvc2UsCisJLndyaXRlID0gaWZ4X3NwaV93cml0ZSwKKwkuaGFuZ3VwID0gaWZ4X3NwaV9oYW5ndXAsCisJLndyaXRlX3Jvb20gPSBpZnhfc3BpX3dyaXRlX3Jvb20sCisJLmNoYXJzX2luX2J1ZmZlciA9IGlmeF9zcGlfY2hhcnNfaW5fYnVmZmVyLAorCS50aW9jbWdldCA9IGlmeF9zcGlfdGlvY21nZXQsCisJLnRpb2Ntc2V0ID0gaWZ4X3NwaV90aW9jbXNldCwKK307CisKKy8qKgorICoJaWZ4X3NwaV9pbnNlcnRfZmlwX3N0cmluZwktCXF1ZXVlIHJlY2VpdmVkIGRhdGEKKyAqCUBpZnhfc2VyOiBvdXIgU1BJIGRldmljZQorICoJQGNoYXJzOiBidWZmZXIgd2UgaGF2ZSByZWNlaXZlZAorICoJQHNpemU6IG51bWJlciBvZiBjaGFycyByZWVpdmVkCisgKgorICoJUXVldWUgYnl0ZXMgdG8gdGhlIHR0eSBhc3N1bWluZyB0aGUgdHR5IHNpZGUgaXMgY3VycmVudGx5IG9wZW4uIElmCisgKglub3QgdGhlIGRpc2NhcmQgdGhlIGRhdGEuCisgKi8KK3N0YXRpYyB2b2lkIGlmeF9zcGlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHN0cnVjdCBpZnhfc3BpX2RldmljZSAqaWZ4X2RldiwKKwkJCQkgICAgdW5zaWduZWQgY2hhciAqY2hhcnMsIHNpemVfdCBzaXplKQoreworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZpZnhfZGV2LT50dHlfcG9ydCk7CisJaWYgKCF0dHkpCisJCXJldHVybjsKKwl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgY2hhcnMsIHNpemUpOworCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CisJdHR5X2tyZWZfcHV0KHR0eSk7Cit9CisKKy8qKgorICoJaWZ4X3NwaV9jb21wbGV0ZQktCVNQSSB0cmFuc2ZlciBjb21wbGV0ZWQKKyAqCUBjdHg6IG91ciBTUEkgZGV2aWNlCisgKgorICoJQW4gU1BJIHRyYW5zZmVyIGhhcyBjb21wbGV0ZWQuIFByb2Nlc3MgYW55IHJlY2VpdmVkIGRhdGEgYW5kIGtpY2sgb2ZmCisgKglhbnkgZnVydGhlciB0cmFuc21pdHMgd2UgY2FuIGNvbW1lbmNlLgorICovCitzdGF0aWMgdm9pZCBpZnhfc3BpX2NvbXBsZXRlKHZvaWQgKmN0eCkKK3sKKwlzdHJ1Y3QgaWZ4X3NwaV9kZXZpY2UgKmlmeF9kZXYgPSBjdHg7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKKwlzdHJ1Y3QgdHR5X2xkaXNjICpsZGlzYyA9IE5VTEw7CisJaW50IGxlbmd0aDsKKwlpbnQgYWN0dWFsX2xlbmd0aDsKKwl1bnNpZ25lZCBjaGFyIG1vcmU7CisJdW5zaWduZWQgY2hhciBjdHM7CisJaW50IGxvY2FsX3dyaXRlX3BlbmRpbmcgPSAwOworCWludCBxdWV1ZV9sZW5ndGg7CisJaW50IHNyZHk7CisJaW50IGRlY29kZV9yZXN1bHQ7CisKKwltcmR5X3NldF9sb3coaWZ4X2Rldik7CisKKwlpZiAoIWlmeF9kZXYtPnNwaV9tc2cuc3RhdHVzKSB7CisJCS8qIGNoZWNrIGhlYWRlciB2YWxpZGl0eSwgZ2V0IGNvbW0gZmxhZ3MgKi8KKwkJc3dhcF9idWYoKHUxNiAqKWlmeF9kZXYtPnJ4X2J1ZmZlciwgSUZYX1NQSV9IRUFERVJfT1ZFUkhFQUQsCisJCQkmaWZ4X2Rldi0+cnhfYnVmZmVyW0lGWF9TUElfSEVBREVSX09WRVJIRUFEXSk7CisJCWRlY29kZV9yZXN1bHQgPSBpZnhfc3BpX2RlY29kZV9zcGlfaGVhZGVyKGlmeF9kZXYtPnJ4X2J1ZmZlciwKKwkJCQkmbGVuZ3RoLCAmbW9yZSwgJmN0cyk7CisJCWlmIChkZWNvZGVfcmVzdWx0ID09IElGWF9TUElfSEVBREVSXzApIHsKKwkJCWRldl9kYmcoJmlmeF9kZXYtPnNwaV9kZXYtPmRldiwKKwkJCQkiaWdub3JlIGlucHV0OiBpbnZhbGlkIGhlYWRlciAwIik7CisJCQlpZnhfZGV2LT5zcGlfc2xhdmVfY3RzID0gMDsKKwkJCWdvdG8gY29tcGxldGVfZXhpdDsKKwkJfSBlbHNlIGlmIChkZWNvZGVfcmVzdWx0ID09IElGWF9TUElfSEVBREVSX0YpIHsKKwkJCWRldl9kYmcoJmlmeF9kZXYtPnNwaV9kZXYtPmRldiwKKwkJCQkiaWdub3JlIGlucHV0OiBpbnZhbGlkIGhlYWRlciBGIik7CisJCQlnb3RvIGNvbXBsZXRlX2V4aXQ7CisJCX0KKworCQlpZnhfZGV2LT5zcGlfc2xhdmVfY3RzID0gY3RzOworCisJCWFjdHVhbF9sZW5ndGggPSBtaW4oKHVuc2lnbmVkIGludClsZW5ndGgsCisJCQkJCWlmeF9kZXYtPnNwaV9tc2cuYWN0dWFsX2xlbmd0aCk7CisJCXN3YXBfYnVmKCh1MTYgKikoaWZ4X2Rldi0+cnhfYnVmZmVyICsgSUZYX1NQSV9IRUFERVJfT1ZFUkhFQUQpLAorCQkJIGFjdHVhbF9sZW5ndGgsCisJCQkgJmlmeF9kZXYtPnJ4X2J1ZmZlcltJRlhfU1BJX1RSQU5TRkVSX1NJWkVdKTsKKwkJaWZ4X3NwaV9pbnNlcnRfZmxpcF9zdHJpbmcoCisJCQlpZnhfZGV2LAorCQkJaWZ4X2Rldi0+cnhfYnVmZmVyICsgSUZYX1NQSV9IRUFERVJfT1ZFUkhFQUQsCisJCQkoc2l6ZV90KWFjdHVhbF9sZW5ndGgpOworCX0gZWxzZSB7CisJCWRldl9kYmcoJmlmeF9kZXYtPnNwaV9kZXYtPmRldiwgIlNQSSB0cmFuc2ZlciBlcnJvciAlZCIsCisJCSAgICAgICBpZnhfZGV2LT5zcGlfbXNnLnN0YXR1cyk7CisJfQorCitjb21wbGV0ZV9leGl0OgorCWlmIChpZnhfZGV2LT53cml0ZV9wZW5kaW5nKSB7CisJCWlmeF9kZXYtPndyaXRlX3BlbmRpbmcgPSAwOworCQlsb2NhbF93cml0ZV9wZW5kaW5nID0gMTsKKwl9CisKKwljbGVhcl9iaXQoSUZYX1NQSV9TVEFURV9JT19JTl9QUk9HUkVTUywgJihpZnhfZGV2LT5mbGFncykpOworCisJcXVldWVfbGVuZ3RoID0ga2ZpZm9fbGVuKCZpZnhfZGV2LT50eF9maWZvKTsKKwlzcmR5ID0gZ3Bpb19nZXRfdmFsdWUoaWZ4X2Rldi0+Z3Bpby5zcmR5KTsKKwlpZiAoIXNyZHkpCisJCWlmeF9zcGlfcG93ZXJfc3RhdGVfY2xlYXIoaWZ4X2RldiwgSUZYX1NQSV9QT1dFUl9TUkRZKTsKKworCS8qIHNjaGVkdWxlIG91dHB1dCBpZiB0aGVyZSBpcyBtb3JlIHRvIGRvICovCisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChJRlhfU1BJX1NUQVRFX0lPX1JFQURZLCAmaWZ4X2Rldi0+ZmxhZ3MpKQorCQl0YXNrbGV0X3NjaGVkdWxlKCZpZnhfZGV2LT5pb193b3JrX3Rhc2tsZXQpOworCWVsc2UgeworCQlpZiAobW9yZSB8fCBpZnhfZGV2LT5zcGlfbW9yZSB8fCBxdWV1ZV9sZW5ndGggPiAwIHx8CisJCQlsb2NhbF93cml0ZV9wZW5kaW5nKSB7CisJCQlpZiAoaWZ4X2Rldi0+c3BpX3NsYXZlX2N0cykgeworCQkJCWlmIChtb3JlKQorCQkJCQltcmR5X2Fzc2VydChpZnhfZGV2KTsKKwkJCX0gZWxzZQorCQkJCW1yZHlfYXNzZXJ0KGlmeF9kZXYpOworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIHBva2UgbGluZSBkaXNjaXBsaW5lIGRyaXZlciBpZiBhbnkgZm9yIG1vcmUgZGF0YQorCQkJICogbWF5IG9yIG1heSBub3QgZ2V0IG1vcmUgZGF0YSB0byB3cml0ZQorCQkJICogZm9yIG5vdywgc2F5IG5vdCBidXN5CisJCQkgKi8KKwkJCWlmeF9zcGlfcG93ZXJfc3RhdGVfY2xlYXIoaWZ4X2RldiwKKwkJCQkJCSAgSUZYX1NQSV9QT1dFUl9EQVRBX1BFTkRJTkcpOworCQkJdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmaWZ4X2Rldi0+dHR5X3BvcnQpOworCQkJaWYgKHR0eSkgeworCQkJCWxkaXNjID0gdHR5X2xkaXNjX3JlZih0dHkpOworCQkJCWlmIChsZGlzYykgeworCQkJCQlsZGlzYy0+b3BzLT53cml0ZV93YWtldXAodHR5KTsKKwkJCQkJdHR5X2xkaXNjX2RlcmVmKGxkaXNjKTsKKwkJCQl9CisJCQkJdHR5X2tyZWZfcHV0KHR0eSk7CisJCQl9CisJCX0KKwl9Cit9CisKKy8qKgorICoJaWZ4X3NwaW9faW8JCS0JSS9PIHRhc2tsZXQKKyAqCUBkYXRhOiBvdXIgU1BJIGRldmljZQorICoKKyAqCVF1ZXVlIGRhdGEgZm9yIHRyYW5zbWlzc2lvbiBpZiBwb3NzaWJsZSBhbmQgdGhlbiBraWNrIG9mZiB0aGUKKyAqCXRyYW5zZmVyLgorICovCitzdGF0aWMgdm9pZCBpZnhfc3BpX2lvKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlpbnQgcmV0dmFsOworCXN0cnVjdCBpZnhfc3BpX2RldmljZSAqaWZ4X2RldiA9IChzdHJ1Y3QgaWZ4X3NwaV9kZXZpY2UgKikgZGF0YTsKKworCWlmICghdGVzdF9hbmRfc2V0X2JpdChJRlhfU1BJX1NUQVRFX0lPX0lOX1BST0dSRVNTLCAmaWZ4X2Rldi0+ZmxhZ3MpKSB7CisJCWlmIChpZnhfZGV2LT5ncGlvLnVuYWNrX3NyZHlfaW50X25iID4gMCkKKwkJCWlmeF9kZXYtPmdwaW8udW5hY2tfc3JkeV9pbnRfbmItLTsKKworCQlpZnhfc3BpX3ByZXBhcmVfdHhfYnVmZmVyKGlmeF9kZXYpOworCisJCXNwaV9tZXNzYWdlX2luaXQoJmlmeF9kZXYtPnNwaV9tc2cpOworCQlJTklUX0xJU1RfSEVBRCgmaWZ4X2Rldi0+c3BpX21zZy5xdWV1ZSk7CisKKwkJaWZ4X2Rldi0+c3BpX21zZy5jb250ZXh0ID0gaWZ4X2RldjsKKwkJaWZ4X2Rldi0+c3BpX21zZy5jb21wbGV0ZSA9IGlmeF9zcGlfY29tcGxldGU7CisKKwkJLyogc2V0IHVwIG91ciBzcGkgdHJhbnNmZXIgKi8KKwkJLyogbm90ZSBsZW4gaXMgQllURVMsIG5vdCB0cmFuc2ZlcnMgKi8KKwkJaWZ4X2Rldi0+c3BpX3hmZXIubGVuID0gSUZYX1NQSV9UUkFOU0ZFUl9TSVpFOworCQlpZnhfZGV2LT5zcGlfeGZlci5jc19jaGFuZ2UgPSAwOworCQlpZnhfZGV2LT5zcGlfeGZlci5zcGVlZF9oeiA9IDEyNTAwMDAwOworCQkvKiBpZnhfZGV2LT5zcGlfeGZlci5zcGVlZF9oeiA9IDM5MDYyNTsgKi8KKwkJaWZ4X2Rldi0+c3BpX3hmZXIuYml0c19wZXJfd29yZCA9IHNwaV9iMTYgPyAxNiA6IDg7CisKKwkJaWZ4X2Rldi0+c3BpX3hmZXIudHhfYnVmID0gaWZ4X2Rldi0+dHhfYnVmZmVyOworCQlpZnhfZGV2LT5zcGlfeGZlci5yeF9idWYgPSBpZnhfZGV2LT5yeF9idWZmZXI7CisKKwkJLyoKKwkJICogc2V0dXAgZG1hIHBvaW50ZXJzCisJCSAqLworCQlpZiAoaWZ4X2Rldi0+aXNfNjE2MCkgeworCQkJaWZ4X2Rldi0+c3BpX21zZy5pc19kbWFfbWFwcGVkID0gMTsKKwkJCWlmeF9kZXYtPnR4X2RtYSA9IGlmeF9kZXYtPnR4X2J1czsKKwkJCWlmeF9kZXYtPnJ4X2RtYSA9IGlmeF9kZXYtPnJ4X2J1czsKKwkJCWlmeF9kZXYtPnNwaV94ZmVyLnR4X2RtYSA9IGlmeF9kZXYtPnR4X2RtYTsKKwkJCWlmeF9kZXYtPnNwaV94ZmVyLnJ4X2RtYSA9IGlmeF9kZXYtPnJ4X2RtYTsKKwkJfSBlbHNlIHsKKwkJCWlmeF9kZXYtPnNwaV9tc2cuaXNfZG1hX21hcHBlZCA9IDA7CisJCQlpZnhfZGV2LT50eF9kbWEgPSAoZG1hX2FkZHJfdCkwOworCQkJaWZ4X2Rldi0+cnhfZG1hID0gKGRtYV9hZGRyX3QpMDsKKwkJCWlmeF9kZXYtPnNwaV94ZmVyLnR4X2RtYSA9IChkbWFfYWRkcl90KTA7CisJCQlpZnhfZGV2LT5zcGlfeGZlci5yeF9kbWEgPSAoZG1hX2FkZHJfdCkwOworCQl9CisKKwkJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJmlmeF9kZXYtPnNwaV94ZmVyLCAmaWZ4X2Rldi0+c3BpX21zZyk7CisKKwkJLyogQXNzZXJ0IE1SRFkuIFRoaXMgbWF5IGhhdmUgYWxyZWFkeSBiZWVuIGRvbmUgYnkgdGhlIHdyaXRlCisJCSAqIHJvdXRpbmUuCisJCSAqLworCQltcmR5X2Fzc2VydChpZnhfZGV2KTsKKworCQlyZXR2YWwgPSBzcGlfYXN5bmMoaWZ4X2Rldi0+c3BpX2RldiwgJmlmeF9kZXYtPnNwaV9tc2cpOworCQlpZiAocmV0dmFsKSB7CisJCQljbGVhcl9iaXQoSUZYX1NQSV9TVEFURV9JT19JTl9QUk9HUkVTUywKKwkJCQkgICZpZnhfZGV2LT5mbGFncyk7CisJCQl0YXNrbGV0X3NjaGVkdWxlKCZpZnhfZGV2LT5pb193b3JrX3Rhc2tsZXQpOworCQkJcmV0dXJuOworCQl9CisJfSBlbHNlCisJCWlmeF9kZXYtPndyaXRlX3BlbmRpbmcgPSAxOworfQorCisvKioKKyAqCWlmeF9zcGlfZnJlZV9wb3J0CS0JZnJlZSB1cCB0aGUgdHR5IHNpZGUKKyAqCUBpZnhfZGV2OiBJRlggZGV2aWNlIGdvaW5nIGF3YXkKKyAqCisgKglVbnJlZ2lzdGVyIGFuZCBmcmVlIHVwIGEgcG9ydCB3aGVuIHRoZSBkZXZpY2UgZ29lcyBhd2F5CisgKi8KK3N0YXRpYyB2b2lkIGlmeF9zcGlfZnJlZV9wb3J0KHN0cnVjdCBpZnhfc3BpX2RldmljZSAqaWZ4X2RldikKK3sKKwlpZiAoaWZ4X2Rldi0+dHR5X2RldikKKwkJdHR5X3VucmVnaXN0ZXJfZGV2aWNlKHR0eV9kcnYsIGlmeF9kZXYtPm1pbm9yKTsKKwlrZmlmb19mcmVlKCZpZnhfZGV2LT50eF9maWZvKTsKK30KKworLyoqCisgKglpZnhfc3BpX2NyZWF0ZV9wb3J0CS0JY3JlYXRlIGEgbmV3IHBvcnQKKyAqCUBpZnhfZGV2OiBvdXIgc3BpIGRldmljZQorICoKKyAqCUFsbG9jYXRlIGFuZCBpbml0aWFsaXNlIHRoZSB0dHkgcG9ydCB0aGF0IGdvZXMgd2l0aCB0aGlzIGludGVyZmFjZQorICoJYW5kIGFkZCBpdCB0byB0aGUgdHR5IGxheWVyIHNvIHRoYXQgaXQgY2FuIGJlIG9wZW5lZC4KKyAqLworc3RhdGljIGludCBpZnhfc3BpX2NyZWF0ZV9wb3J0KHN0cnVjdCBpZnhfc3BpX2RldmljZSAqaWZ4X2RldikKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgdHR5X3BvcnQgKnBwb3J0ID0gJmlmeF9kZXYtPnR0eV9wb3J0OworCisJc3Bpbl9sb2NrX2luaXQoJmlmeF9kZXYtPmZpZm9fbG9jayk7CisJbG9ja2RlcF9zZXRfY2xhc3NfYW5kX3N1YmNsYXNzKCZpZnhfZGV2LT5maWZvX2xvY2ssCisJCSZpZnhfc3BpX2tleSwgMCk7CisKKwlpZiAoa2ZpZm9fYWxsb2MoJmlmeF9kZXYtPnR4X2ZpZm8sIElGWF9TUElfRklGT19TSVpFLCBHRlBfS0VSTkVMKSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycm9yX3JldDsKKwl9CisKKwlwcG9ydC0+b3BzID0gJmlmeF90dHlfcG9ydF9vcHM7CisJdHR5X3BvcnRfaW5pdChwcG9ydCk7CisJaWZ4X2Rldi0+bWlub3IgPSBJRlhfU1BJX1RUWV9JRDsKKwlpZnhfZGV2LT50dHlfZGV2ID0gdHR5X3JlZ2lzdGVyX2RldmljZSh0dHlfZHJ2LCBpZnhfZGV2LT5taW5vciwKKwkJCQkJICAgICAgICZpZnhfZGV2LT5zcGlfZGV2LT5kZXYpOworCWlmIChJU19FUlIoaWZ4X2Rldi0+dHR5X2RldikpIHsKKwkJZGV2X2RiZygmaWZ4X2Rldi0+c3BpX2Rldi0+ZGV2LAorCQkJIiVzOiByZWdpc3RlcmluZyB0dHkgZGV2aWNlIGZhaWxlZCIsIF9fZnVuY19fKTsKKwkJcmV0ID0gUFRSX0VSUihpZnhfZGV2LT50dHlfZGV2KTsKKwkJZ290byBlcnJvcl9yZXQ7CisJfQorCXJldHVybiAwOworCitlcnJvcl9yZXQ6CisJaWZ4X3NwaV9mcmVlX3BvcnQoaWZ4X2Rldik7CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKglpZnhfc3BpX2hhbmRsZV9zcmR5CQktCWhhbmRsZSBTUkRZCisgKglAaWZ4X2RldjogZGV2aWNlIGFzc2VydGluZyBTUkRZCisgKgorICoJQ2hlY2sgb3VyIGRldmljZSBzdGF0ZSBhbmQgc2VlIHdoYXQgd2UgbmVlZCB0byBraWNrIG9mZiB3aGVuIFNSRFkKKyAqCWlzIGFzc2VydGVkLiBUaGlzIHVzdWFsbHkgbWVhbnMga2lsbGluZyB0aGUgdGltZXIgYW5kIGZpcmluZyBvZmYgdGhlCisgKglJL08gcHJvY2Vzc2luZy4KKyAqLworc3RhdGljIHZvaWQgaWZ4X3NwaV9oYW5kbGVfc3JkeShzdHJ1Y3QgaWZ4X3NwaV9kZXZpY2UgKmlmeF9kZXYpCit7CisJaWYgKHRlc3RfYml0KElGWF9TUElfU1RBVEVfVElNRVJfUEVORElORywgJmlmeF9kZXYtPmZsYWdzKSkgeworCQlkZWxfdGltZXJfc3luYygmaWZ4X2Rldi0+c3BpX3RpbWVyKTsKKwkJY2xlYXJfYml0KElGWF9TUElfU1RBVEVfVElNRVJfUEVORElORywgJmlmeF9kZXYtPmZsYWdzKTsKKwl9CisKKwlpZnhfc3BpX3Bvd2VyX3N0YXRlX3NldChpZnhfZGV2LCBJRlhfU1BJX1BPV0VSX1NSRFkpOworCisJaWYgKCF0ZXN0X2JpdChJRlhfU1BJX1NUQVRFX0lPX0lOX1BST0dSRVNTLCAmaWZ4X2Rldi0+ZmxhZ3MpKQorCQl0YXNrbGV0X3NjaGVkdWxlKCZpZnhfZGV2LT5pb193b3JrX3Rhc2tsZXQpOworCWVsc2UKKwkJc2V0X2JpdChJRlhfU1BJX1NUQVRFX0lPX1JFQURZLCAmaWZ4X2Rldi0+ZmxhZ3MpOworfQorCisvKioKKyAqCWlmeF9zcGlfc3JkeV9pbnRlcnJ1cHQJLQlTUkRZIGFzc2VydGVkCisgKglAaXJxOiBvdXIgSVJRIG51bWJlcgorICoJQGRldjogb3VyIGlmeCBkZXZpY2UKKyAqCisgKglUaGUgbW9kZW0gYXNzZXJ0ZWQgU1JEWS4gSGFuZGxlIHRoZSBzcmR5IGV2ZW50CisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBpZnhfc3BpX3NyZHlfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldikKK3sKKwlzdHJ1Y3QgaWZ4X3NwaV9kZXZpY2UgKmlmeF9kZXYgPSBkZXY7CisJaWZ4X2Rldi0+Z3Bpby51bmFja19zcmR5X2ludF9uYisrOworCWlmeF9zcGlfaGFuZGxlX3NyZHkoaWZ4X2Rldik7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKioKKyAqCWlmeF9zcGlfcmVzZXRfaW50ZXJydXB0CS0JTW9kZW0gaGFzIGNoYW5nZWQgcmVzZXQgc3RhdGUKKyAqCUBpcnE6IGludGVycnVwdCBudW1iZXIKKyAqCUBkZXY6IG91ciBkZXZpY2UgcG9pbnRlcgorICoKKyAqCVRoZSBtb2RlbSBoYXMgZWl0aGVyIGVudGVyZWQgb3IgbGVmdCByZXNldCBzdGF0ZS4gQ2hlY2sgdGhlIEdQSU8KKyAqCWxpbmUgdG8gc2VlIHdoaWNoLgorICoKKyAqCUZJWE1FOiByZXZpZXcgbG9ja2luZyBvbiBNUl9JTlBST0dSRVNTIHZlcnN1cworICoJcGFyYWxsZWwgdW5zb2xpY2l0ZWQgcmVzZXQvc29saWNpdGVkIHJlc2V0CisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBpZnhfc3BpX3Jlc2V0X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXYpCit7CisJc3RydWN0IGlmeF9zcGlfZGV2aWNlICppZnhfZGV2ID0gZGV2OworCWludCB2YWwgPSBncGlvX2dldF92YWx1ZShpZnhfZGV2LT5ncGlvLnJlc2V0X291dCk7CisJaW50IHNvbHJlc2V0ID0gdGVzdF9iaXQoTVJfU1RBUlQsICZpZnhfZGV2LT5tZG1fcmVzZXRfc3RhdGUpOworCisJaWYgKHZhbCA9PSAwKSB7CisJCS8qIGVudGVyZWQgcmVzZXQgKi8KKwkJc2V0X2JpdChNUl9JTlBST0dSRVNTLCAmaWZ4X2Rldi0+bWRtX3Jlc2V0X3N0YXRlKTsKKwkJaWYgKCFzb2xyZXNldCkgeworCQkJLyogdW5zb2xpY2l0ZWQgcmVzZXQgICovCisJCQlpZnhfc3BpX3R0eWhhbmd1cChpZnhfZGV2KTsKKwkJfQorCX0gZWxzZSB7CisJCS8qIGV4aXRlZCByZXNldCAqLworCQljbGVhcl9iaXQoTVJfSU5QUk9HUkVTUywgJmlmeF9kZXYtPm1kbV9yZXNldF9zdGF0ZSk7CisJCWlmIChzb2xyZXNldCkgeworCQkJc2V0X2JpdChNUl9DT01QTEVURSwgJmlmeF9kZXYtPm1kbV9yZXNldF9zdGF0ZSk7CisJCQl3YWtlX3VwKCZpZnhfZGV2LT5tZG1fcmVzZXRfd2FpdCk7CisJCX0KKwl9CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKioKKyAqCWlmeF9zcGlfZnJlZV9kZXZpY2UgLSBmcmVlIGRldmljZQorICoJQGlmeF9kZXY6IGRldmljZSB0byBmcmVlCisgKgorICoJRnJlZSB0aGUgSUZYIGRldmljZQorICovCitzdGF0aWMgdm9pZCBpZnhfc3BpX2ZyZWVfZGV2aWNlKHN0cnVjdCBpZnhfc3BpX2RldmljZSAqaWZ4X2RldikKK3sKKwlpZnhfc3BpX2ZyZWVfcG9ydChpZnhfZGV2KTsKKwlkbWFfZnJlZV9jb2hlcmVudCgmaWZ4X2Rldi0+c3BpX2Rldi0+ZGV2LAorCQkJCUlGWF9TUElfVFJBTlNGRVJfU0laRSwKKwkJCQlpZnhfZGV2LT50eF9idWZmZXIsCisJCQkJaWZ4X2Rldi0+dHhfYnVzKTsKKwlkbWFfZnJlZV9jb2hlcmVudCgmaWZ4X2Rldi0+c3BpX2Rldi0+ZGV2LAorCQkJCUlGWF9TUElfVFJBTlNGRVJfU0laRSwKKwkJCQlpZnhfZGV2LT5yeF9idWZmZXIsCisJCQkJaWZ4X2Rldi0+cnhfYnVzKTsKK30KKworLyoqCisgKglpZnhfc3BpX3Jlc2V0CS0JcmVzZXQgbW9kZW0KKyAqCUBpZnhfZGV2OiBtb2RlbSB0byByZXNldAorICoKKyAqCVBlcmZvcm0gYSByZXNldCBvbiB0aGUgbW9kZW0KKyAqLworc3RhdGljIGludCBpZnhfc3BpX3Jlc2V0KHN0cnVjdCBpZnhfc3BpX2RldmljZSAqaWZ4X2RldikKK3sKKwlpbnQgcmV0OworCS8qCisJICogc2V0IHVwIG1vZGVtIHBvd2VyLCByZXNldAorCSAqCisJICogZGVsYXlzIGFyZSByZXF1aXJlZCBvbiBzb21lIHBsYXRmb3JtcyBmb3IgdGhlIG1vZGVtCisJICogdG8gcmVzZXQgcHJvcGVybHkKKwkgKi8KKwlzZXRfYml0KE1SX1NUQVJULCAmaWZ4X2Rldi0+bWRtX3Jlc2V0X3N0YXRlKTsKKwlncGlvX3NldF92YWx1ZShpZnhfZGV2LT5ncGlvLnBvLCAwKTsKKwlncGlvX3NldF92YWx1ZShpZnhfZGV2LT5ncGlvLnJlc2V0LCAwKTsKKwltc2xlZXAoMjUpOworCWdwaW9fc2V0X3ZhbHVlKGlmeF9kZXYtPmdwaW8ucmVzZXQsIDEpOworCW1zbGVlcCgxKTsKKwlncGlvX3NldF92YWx1ZShpZnhfZGV2LT5ncGlvLnBvLCAxKTsKKwltc2xlZXAoMSk7CisJZ3Bpb19zZXRfdmFsdWUoaWZ4X2Rldi0+Z3Bpby5wbywgMCk7CisJcmV0ID0gd2FpdF9ldmVudF90aW1lb3V0KGlmeF9kZXYtPm1kbV9yZXNldF93YWl0LAorCQkJCSB0ZXN0X2JpdChNUl9DT01QTEVURSwKKwkJCQkJICAmaWZ4X2Rldi0+bWRtX3Jlc2V0X3N0YXRlKSwKKwkJCQkgSUZYX1JFU0VUX1RJTUVPVVQpOworCWlmICghcmV0KQorCQlkZXZfd2FybigmaWZ4X2Rldi0+c3BpX2Rldi0+ZGV2LCAiTW9kZW0gcmVzZXQgdGltZW91dDogKHN0YXRlOiVseCkiLAorCQkJIGlmeF9kZXYtPm1kbV9yZXNldF9zdGF0ZSk7CisKKwlpZnhfZGV2LT5tZG1fcmVzZXRfc3RhdGUgPSAwOworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICoJaWZ4X3NwaV9zcGlfcHJvYmUJLQlwcm9iZSBjYWxsYmFjaworICoJQHNwaTogb3VyIHBvc3NpYmxlIG1hdGNoaW5nIFNQSSBkZXZpY2UKKyAqCisgKglQcm9iZSBmb3IgYSA2eDYwIG1vZGVtIG9uIFNQSSBidXMuIFBlcmZvcm0gYW55IG5lZWRlZCBkZXZpY2UgYW5kCisgKglHUElPIHNldHVwLgorICoKKyAqCUZJWE1FOgorICoJLQlTdXBwb3J0IGZvciBtdWx0aXBsZSBkZXZpY2VzCisgKgktCVNwbGl0IG91dCBNSUQgc3BlY2lmaWMgR1BJTyBoYW5kbGluZyBldmVudHVhbGx5CisgKi8KKworc3RhdGljIGludCBpZnhfc3BpX3NwaV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCWludCByZXQ7CisJaW50IHNyZHk7CisJc3RydWN0IGlmeF9tb2RlbV9wbGF0Zm9ybV9kYXRhICpwbF9kYXRhID0gTlVMTDsKKwlzdHJ1Y3QgaWZ4X3NwaV9kZXZpY2UgKmlmeF9kZXY7CisKKwlpZiAoc2F2ZWRfaWZ4X2RldikgeworCQlkZXZfZGJnKCZzcGktPmRldiwgImlnbm9yaW5nIHN1YnNlcXVlbnQgZGV0ZWN0aW9uIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIGluaXRpYWxpemUgc3RydWN0dXJlIHRvIGhvbGQgb3VyIGRldmljZSB2YXJpYWJsZXMgKi8KKwlpZnhfZGV2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGlmeF9zcGlfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpZnhfZGV2KSB7CisJCWRldl9lcnIoJnNwaS0+ZGV2LCAic3BpIGRldmljZSBhbGxvY2F0aW9uIGZhaWxlZCIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJc2F2ZWRfaWZ4X2RldiA9IGlmeF9kZXY7CisJaWZ4X2Rldi0+c3BpX2RldiA9IHNwaTsKKwljbGVhcl9iaXQoSUZYX1NQSV9TVEFURV9JT19JTl9QUk9HUkVTUywgJmlmeF9kZXYtPmZsYWdzKTsKKwlzcGluX2xvY2tfaW5pdCgmaWZ4X2Rldi0+d3JpdGVfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmlmeF9kZXYtPnBvd2VyX2xvY2spOworCWlmeF9kZXYtPnBvd2VyX3N0YXR1cyA9IDA7CisJaW5pdF90aW1lcigmaWZ4X2Rldi0+c3BpX3RpbWVyKTsKKwlpZnhfZGV2LT5zcGlfdGltZXIuZnVuY3Rpb24gPSBpZnhfc3BpX3RpbWVvdXQ7CisJaWZ4X2Rldi0+c3BpX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylpZnhfZGV2OworCWlmeF9kZXYtPmlzXzYxNjAgPSBwbF9kYXRhLT5pc182MTYwOworCisJLyogZW5zdXJlIFNQSSBwcm90b2NvbCBmbGFncyBhcmUgaW5pdGlhbGl6ZWQgdG8gZW5hYmxlIHRyYW5zZmVyICovCisJaWZ4X2Rldi0+c3BpX21vcmUgPSAwOworCWlmeF9kZXYtPnNwaV9zbGF2ZV9jdHMgPSAwOworCisJLyppbml0aWFsaXplIHRyYW5zZmVyIGFuZCBkbWEgYnVmZmVycyAqLworCWlmeF9kZXYtPnR4X2J1ZmZlciA9IGRtYV9hbGxvY19jb2hlcmVudCgmaWZ4X2Rldi0+c3BpX2Rldi0+ZGV2LAorCQkJCUlGWF9TUElfVFJBTlNGRVJfU0laRSwKKwkJCQkmaWZ4X2Rldi0+dHhfYnVzLAorCQkJCUdGUF9LRVJORUwpOworCWlmICghaWZ4X2Rldi0+dHhfYnVmZmVyKSB7CisJCWRldl9lcnIoJnNwaS0+ZGV2LCAiRE1BLVRYIGJ1ZmZlciBhbGxvY2F0aW9uIGZhaWxlZCIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycm9yX3JldDsKKwl9CisJaWZ4X2Rldi0+cnhfYnVmZmVyID0gZG1hX2FsbG9jX2NvaGVyZW50KCZpZnhfZGV2LT5zcGlfZGV2LT5kZXYsCisJCQkJSUZYX1NQSV9UUkFOU0ZFUl9TSVpFLAorCQkJCSZpZnhfZGV2LT5yeF9idXMsCisJCQkJR0ZQX0tFUk5FTCk7CisJaWYgKCFpZnhfZGV2LT5yeF9idWZmZXIpIHsKKwkJZGV2X2Vycigmc3BpLT5kZXYsICJETUEtUlggYnVmZmVyIGFsbG9jYXRpb24gZmFpbGVkIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyb3JfcmV0OworCX0KKworCS8qIGluaXRpYWxpemUgd2FpdHEgZm9yIG1vZGVtIHJlc2V0ICovCisJaW5pdF93YWl0cXVldWVfaGVhZCgmaWZ4X2Rldi0+bWRtX3Jlc2V0X3dhaXQpOworCisJc3BpX3NldF9kcnZkYXRhKHNwaSwgaWZ4X2Rldik7CisJdGFza2xldF9pbml0KCZpZnhfZGV2LT5pb193b3JrX3Rhc2tsZXQsIGlmeF9zcGlfaW8sCisJCQkJCQkodW5zaWduZWQgbG9uZylpZnhfZGV2KTsKKworCXNldF9iaXQoSUZYX1NQSV9TVEFURV9QUkVTRU5ULCAmaWZ4X2Rldi0+ZmxhZ3MpOworCisJLyogY3JlYXRlIG91ciB0dHkgcG9ydCAqLworCXJldCA9IGlmeF9zcGlfY3JlYXRlX3BvcnQoaWZ4X2Rldik7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoJnNwaS0+ZGV2LCAiY3JlYXRlIGRlZmF1bHQgdHR5IHBvcnQgZmFpbGVkIik7CisJCWdvdG8gZXJyb3JfcmV0OworCX0KKworCXBsX2RhdGEgPSAoc3RydWN0IGlmeF9tb2RlbV9wbGF0Zm9ybV9kYXRhICopc3BpLT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpZiAocGxfZGF0YSkgeworCQlpZnhfZGV2LT5ncGlvLnJlc2V0ID0gcGxfZGF0YS0+cnN0X3BtdTsKKwkJaWZ4X2Rldi0+Z3Bpby5wbyA9IHBsX2RhdGEtPnB3cl9vbjsKKwkJaWZ4X2Rldi0+Z3Bpby5tcmR5ID0gcGxfZGF0YS0+bXJkeTsKKwkJaWZ4X2Rldi0+Z3Bpby5zcmR5ID0gcGxfZGF0YS0+c3JkeTsKKwkJaWZ4X2Rldi0+Z3Bpby5yZXNldF9vdXQgPSBwbF9kYXRhLT5yc3Rfb3V0OworCX0gZWxzZSB7CisJCWRldl9lcnIoJnNwaS0+ZGV2LCAibWlzc2luZyBwbGF0Zm9ybSBkYXRhISIpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGVycm9yX3JldDsKKwl9CisKKwlkZXZfaW5mbygmc3BpLT5kZXYsICJncGlvcyAlZCwgJWQsICVkLCAlZCwgJWQiLAorCQkgaWZ4X2Rldi0+Z3Bpby5yZXNldCwgaWZ4X2Rldi0+Z3Bpby5wbywgaWZ4X2Rldi0+Z3Bpby5tcmR5LAorCQkgaWZ4X2Rldi0+Z3Bpby5zcmR5LCBpZnhfZGV2LT5ncGlvLnJlc2V0X291dCk7CisKKwkvKiBDb25maWd1cmUgZ3Bpb3MgKi8KKwlyZXQgPSBncGlvX3JlcXVlc3QoaWZ4X2Rldi0+Z3Bpby5yZXNldCwgImlmeE1vZGVtIik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycigmc3BpLT5kZXYsICJVbmFibGUgdG8gYWxsb2NhdGUgR1BJTyVkIChSRVNFVCkiLAorCQkJaWZ4X2Rldi0+Z3Bpby5yZXNldCk7CisJCWdvdG8gZXJyb3JfcmV0OworCX0KKwlyZXQgKz0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGlmeF9kZXYtPmdwaW8ucmVzZXQsIDApOworCXJldCArPSBncGlvX2V4cG9ydChpZnhfZGV2LT5ncGlvLnJlc2V0LCAxKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnNwaS0+ZGV2LCAiVW5hYmxlIHRvIGNvbmZpZ3VyZSBHUElPJWQgKFJFU0VUKSIsCisJCQlpZnhfZGV2LT5ncGlvLnJlc2V0KTsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIGVycm9yX3JldDI7CisJfQorCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KGlmeF9kZXYtPmdwaW8ucG8sICJpZnhNb2RlbSIpOworCXJldCArPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoaWZ4X2Rldi0+Z3Bpby5wbywgMCk7CisJcmV0ICs9IGdwaW9fZXhwb3J0KGlmeF9kZXYtPmdwaW8ucG8sIDEpOworCWlmIChyZXQpIHsKKwkJZGV2X2Vycigmc3BpLT5kZXYsICJVbmFibGUgdG8gY29uZmlndXJlIEdQSU8lZCAoT04pIiwKKwkJCWlmeF9kZXYtPmdwaW8ucG8pOworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZXJyb3JfcmV0MzsKKwl9CisKKwlyZXQgPSBncGlvX3JlcXVlc3QoaWZ4X2Rldi0+Z3Bpby5tcmR5LCAiaWZ4TW9kZW0iKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZzcGktPmRldiwgIlVuYWJsZSB0byBhbGxvY2F0ZSBHUElPJWQgKE1SRFkpIiwKKwkJCWlmeF9kZXYtPmdwaW8ubXJkeSk7CisJCWdvdG8gZXJyb3JfcmV0MzsKKwl9CisJcmV0ICs9IGdwaW9fZXhwb3J0KGlmeF9kZXYtPmdwaW8ubXJkeSwgMSk7CisJcmV0ICs9IGdwaW9fZGlyZWN0aW9uX291dHB1dChpZnhfZGV2LT5ncGlvLm1yZHksIDApOworCWlmIChyZXQpIHsKKwkJZGV2X2Vycigmc3BpLT5kZXYsICJVbmFibGUgdG8gY29uZmlndXJlIEdQSU8lZCAoTVJEWSkiLAorCQkJaWZ4X2Rldi0+Z3Bpby5tcmR5KTsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIGVycm9yX3JldDQ7CisJfQorCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KGlmeF9kZXYtPmdwaW8uc3JkeSwgImlmeE1vZGVtIik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycigmc3BpLT5kZXYsICJVbmFibGUgdG8gYWxsb2NhdGUgR1BJTyVkIChTUkRZKSIsCisJCQlpZnhfZGV2LT5ncGlvLnNyZHkpOworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZXJyb3JfcmV0NDsKKwl9CisJcmV0ICs9IGdwaW9fZXhwb3J0KGlmeF9kZXYtPmdwaW8uc3JkeSwgMSk7CisJcmV0ICs9IGdwaW9fZGlyZWN0aW9uX2lucHV0KGlmeF9kZXYtPmdwaW8uc3JkeSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZzcGktPmRldiwgIlVuYWJsZSB0byBjb25maWd1cmUgR1BJTyVkIChTUkRZKSIsCisJCQlpZnhfZGV2LT5ncGlvLnNyZHkpOworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZXJyb3JfcmV0NTsKKwl9CisKKwlyZXQgPSBncGlvX3JlcXVlc3QoaWZ4X2Rldi0+Z3Bpby5yZXNldF9vdXQsICJpZnhNb2RlbSIpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJnNwaS0+ZGV2LCAiVW5hYmxlIHRvIGFsbG9jYXRlIEdQSU8lZCAoUkVTRVRfT1VUKSIsCisJCQlpZnhfZGV2LT5ncGlvLnJlc2V0X291dCk7CisJCWdvdG8gZXJyb3JfcmV0NTsKKwl9CisJcmV0ICs9IGdwaW9fZXhwb3J0KGlmeF9kZXYtPmdwaW8ucmVzZXRfb3V0LCAxKTsKKwlyZXQgKz0gZ3Bpb19kaXJlY3Rpb25faW5wdXQoaWZ4X2Rldi0+Z3Bpby5yZXNldF9vdXQpOworCWlmIChyZXQpIHsKKwkJZGV2X2Vycigmc3BpLT5kZXYsICJVbmFibGUgdG8gY29uZmlndXJlIEdQSU8lZCAoUkVTRVRfT1VUKSIsCisJCQlpZnhfZGV2LT5ncGlvLnJlc2V0X291dCk7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBlcnJvcl9yZXQ2OworCX0KKworCXJldCA9IHJlcXVlc3RfaXJxKGdwaW9fdG9faXJxKGlmeF9kZXYtPmdwaW8ucmVzZXRfb3V0KSwKKwkJCSAgaWZ4X3NwaV9yZXNldF9pbnRlcnJ1cHQsCisJCQkgIElSUUZfVFJJR0dFUl9SSVNJTkd8SVJRRl9UUklHR0VSX0ZBTExJTkcsIERSVk5BTUUsCisJCSh2b2lkICopaWZ4X2Rldik7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZzcGktPmRldiwgIlVuYWJsZSB0byBnZXQgaXJxICV4XG4iLAorCQkJZ3Bpb190b19pcnEoaWZ4X2Rldi0+Z3Bpby5yZXNldF9vdXQpKTsKKwkJZ290byBlcnJvcl9yZXQ2OworCX0KKworCXJldCA9IGlmeF9zcGlfcmVzZXQoaWZ4X2Rldik7CisKKwlyZXQgPSByZXF1ZXN0X2lycShncGlvX3RvX2lycShpZnhfZGV2LT5ncGlvLnNyZHkpLAorCQkJICBpZnhfc3BpX3NyZHlfaW50ZXJydXB0LAorCQkJICBJUlFGX1RSSUdHRVJfUklTSU5HLCBEUlZOQU1FLAorCQkJICAodm9pZCAqKWlmeF9kZXYpOworCWlmIChyZXQpIHsKKwkJZGV2X2Vycigmc3BpLT5kZXYsICJVbmFibGUgdG8gZ2V0IGlycSAleCIsCisJCQlncGlvX3RvX2lycShpZnhfZGV2LT5ncGlvLnNyZHkpKTsKKwkJZ290byBlcnJvcl9yZXQ3OworCX0KKworCS8qIHNldCBwbSBydW50aW1lIHBvd2VyIHN0YXRlIGFuZCByZWdpc3RlciB3aXRoIHBvd2VyIHN5c3RlbSAqLworCXBtX3J1bnRpbWVfc2V0X2FjdGl2ZSgmc3BpLT5kZXYpOworCXBtX3J1bnRpbWVfZW5hYmxlKCZzcGktPmRldik7CisKKwkvKiBoYW5kbGUgY2FzZSB0aGF0IG1vZGVtIGlzIGFscmVhZHkgc2lnbmFsaW5nIFNSRFkgKi8KKwkvKiBubyBvdXRnb2luZyB0dHkgb3BlbiBhdCB0aGlzIHBvaW50LCB0aGlzIGp1c3Qgc2F0aXNmaWVzIHRoZQorCSAqIG1vZGVtJ3MgcmVhZCBhbmQgc2hvdWxkIHJlc2V0IGNvbW11bmljYXRpb24gcHJvcGVybHkKKwkgKi8KKwlzcmR5ID0gZ3Bpb19nZXRfdmFsdWUoaWZ4X2Rldi0+Z3Bpby5zcmR5KTsKKworCWlmIChzcmR5KSB7CisJCW1yZHlfYXNzZXJ0KGlmeF9kZXYpOworCQlpZnhfc3BpX2hhbmRsZV9zcmR5KGlmeF9kZXYpOworCX0gZWxzZQorCQltcmR5X3NldF9sb3coaWZ4X2Rldik7CisJcmV0dXJuIDA7CisKK2Vycm9yX3JldDc6CisJZnJlZV9pcnEoZ3Bpb190b19pcnEoaWZ4X2Rldi0+Z3Bpby5yZXNldF9vdXQpLCAodm9pZCAqKWlmeF9kZXYpOworZXJyb3JfcmV0NjoKKwlncGlvX2ZyZWUoaWZ4X2Rldi0+Z3Bpby5zcmR5KTsKK2Vycm9yX3JldDU6CisJZ3Bpb19mcmVlKGlmeF9kZXYtPmdwaW8ubXJkeSk7CitlcnJvcl9yZXQ0OgorCWdwaW9fZnJlZShpZnhfZGV2LT5ncGlvLnJlc2V0KTsKK2Vycm9yX3JldDM6CisJZ3Bpb19mcmVlKGlmeF9kZXYtPmdwaW8ucG8pOworZXJyb3JfcmV0MjoKKwlncGlvX2ZyZWUoaWZ4X2Rldi0+Z3Bpby5yZXNldF9vdXQpOworZXJyb3JfcmV0OgorCWlmeF9zcGlfZnJlZV9kZXZpY2UoaWZ4X2Rldik7CisJc2F2ZWRfaWZ4X2RldiA9IE5VTEw7CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKglpZnhfc3BpX3NwaV9yZW1vdmUJLQlTUEkgZGV2aWNlIHdhcyByZW1vdmVkCisgKglAc3BpOiBTUEkgZGV2aWNlCisgKgorICoJRklYTUU6IFdlIHNob3VsZCBiZSBzaHV0dGluZyB0aGUgZGV2aWNlIGRvd24gaGVyZSBub3QgaW4KKyAqCXRoZSBtb2R1bGUgdW5sb2FkIHBhdGguCisgKi8KKworc3RhdGljIGludCBpZnhfc3BpX3NwaV9yZW1vdmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlzdHJ1Y3QgaWZ4X3NwaV9kZXZpY2UgKmlmeF9kZXYgPSBzcGlfZ2V0X2RydmRhdGEoc3BpKTsKKwkvKiBzdG9wIGFjdGl2aXR5ICovCisJdGFza2xldF9raWxsKCZpZnhfZGV2LT5pb193b3JrX3Rhc2tsZXQpOworCS8qIGZyZWUgaXJxICovCisJZnJlZV9pcnEoZ3Bpb190b19pcnEoaWZ4X2Rldi0+Z3Bpby5yZXNldF9vdXQpLCAodm9pZCAqKWlmeF9kZXYpOworCWZyZWVfaXJxKGdwaW9fdG9faXJxKGlmeF9kZXYtPmdwaW8uc3JkeSksICh2b2lkICopaWZ4X2Rldik7CisKKwlncGlvX2ZyZWUoaWZ4X2Rldi0+Z3Bpby5zcmR5KTsKKwlncGlvX2ZyZWUoaWZ4X2Rldi0+Z3Bpby5tcmR5KTsKKwlncGlvX2ZyZWUoaWZ4X2Rldi0+Z3Bpby5yZXNldCk7CisJZ3Bpb19mcmVlKGlmeF9kZXYtPmdwaW8ucG8pOworCWdwaW9fZnJlZShpZnhfZGV2LT5ncGlvLnJlc2V0X291dCk7CisKKwkvKiBmcmVlIGFsbG9jYXRpb25zICovCisJaWZ4X3NwaV9mcmVlX2RldmljZShpZnhfZGV2KTsKKworCXNhdmVkX2lmeF9kZXYgPSBOVUxMOworCXJldHVybiAwOworfQorCisvKioKKyAqCWlmeF9zcGlfc3BpX3NodXRkb3duCS0JY2FsbGVkIG9uIFNQSSBzaHV0ZG93bgorICoJQHNwaTogU1BJIGRldmljZQorICoKKyAqCU5vIGFjdGlvbiBuZWVkcyB0byBiZSB0YWtlbiBoZXJlCisgKi8KKworc3RhdGljIHZvaWQgaWZ4X3NwaV9zcGlfc2h1dGRvd24oc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKK30KKworLyoKKyAqIHZhcmlvdXMgc3VzcGVuZHMgYW5kIHJlc3VtZXMgaGF2ZSBub3RoaW5nIHRvIGRvCisgKiBubyBoYXJkd2FyZSB0byBzYXZlIHN0YXRlIGZvcgorICovCisKKy8qKgorICoJaWZ4X3NwaV9zcGlfc3VzcGVuZAktCXN1c3BlbmQgU1BJIG9uIHN5c3RlbSBzdXNwZW5kCisgKglAZGV2OiBkZXZpY2UgYmVpbmcgc3VzcGVuZGVkCisgKgorICoJU3VzcGVuZCB0aGUgU1BJIHNpZGUuIE5vIGFjdGlvbiBuZWVkZWQgb24gSW50ZWwgTUlEIHBsYXRmb3JtcywgbWF5CisgKgluZWVkIGV4dGVuZGluZyBmb3Igb3RoZXIgc3lzdGVtcy4KKyAqLworc3RhdGljIGludCBpZnhfc3BpX3NwaV9zdXNwZW5kKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIHBtX21lc3NhZ2VfdCBtc2cpCit7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICoJaWZ4X3NwaV9zcGlfcmVzdW1lCS0JcmVzdW1lIFNQSSBzaWRlIG9uIHN5c3RlbSByZXN1bWUKKyAqCUBkZXY6IGRldmljZSBiZWluZyBzdXNwZW5kZWQKKyAqCisgKglTdXNwZW5kIHRoZSBTUEkgc2lkZS4gTm8gYWN0aW9uIG5lZWRlZCBvbiBJbnRlbCBNSUQgcGxhdGZvcm1zLCBtYXkKKyAqCW5lZWQgZXh0ZW5kaW5nIGZvciBvdGhlciBzeXN0ZW1zLgorICovCitzdGF0aWMgaW50IGlmeF9zcGlfc3BpX3Jlc3VtZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXJldHVybiAwOworfQorCisvKioKKyAqCWlmeF9zcGlfcG1fc3VzcGVuZAktCXN1c3BlbmQgbW9kZW0gb24gc3lzdGVtIHN1c3BlbmQKKyAqCUBkZXY6IGRldmljZSBiZWluZyBzdXNwZW5kZWQKKyAqCisgKglTdXNwZW5kIHRoZSBtb2RlbS4gTm8gYWN0aW9uIG5lZWRlZCBvbiBJbnRlbCBNSUQgcGxhdGZvcm1zLCBtYXkKKyAqCW5lZWQgZXh0ZW5kaW5nIGZvciBvdGhlciBzeXN0ZW1zLgorICovCitzdGF0aWMgaW50IGlmeF9zcGlfcG1fc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICoJaWZ4X3NwaV9wbV9yZXN1bWUJLQlyZXN1bWUgbW9kZW0gb24gc3lzdGVtIHJlc3VtZQorICoJQGRldjogZGV2aWNlIGJlaW5nIHN1c3BlbmRlZAorICoKKyAqCUFsbG93IHRoZSBtb2RlbSB0byByZXN1bWUuIE5vIGFjdGlvbiBuZWVkZWQuCisgKgorICoJRklYTUU6IGRvIHdlIG5lZWQgdG8gcmVzZXQgYW55dGhpbmcgaGVyZSA/CisgKi8KK3N0YXRpYyBpbnQgaWZ4X3NwaV9wbV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiAwOworfQorCisvKioKKyAqCWlmeF9zcGlfcG1fcnVudGltZV9yZXN1bWUJLQlzdXNwZW5kIG1vZGVtCisgKglAZGV2OiBkZXZpY2UgYmVpbmcgc3VzcGVuZGVkCisgKgorICoJQWxsb3cgdGhlIG1vZGVtIHRvIHJlc3VtZS4gTm8gYWN0aW9uIG5lZWRlZC4KKyAqLworc3RhdGljIGludCBpZnhfc3BpX3BtX3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKglpZnhfc3BpX3BtX3J1bnRpbWVfc3VzcGVuZAktCXN1c3BlbmQgbW9kZW0KKyAqCUBkZXY6IGRldmljZSBiZWluZyBzdXNwZW5kZWQKKyAqCisgKglBbGxvdyB0aGUgbW9kZW0gdG8gc3VzcGVuZCBhbmQgdGh1cyBzdXNwZW5kIHRvIGNvbnRpbnVlIHVwIHRoZQorICoJZGV2aWNlIHRyZWUuCisgKi8KK3N0YXRpYyBpbnQgaWZ4X3NwaV9wbV9ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiAwOworfQorCisvKioKKyAqCWlmeF9zcGlfcG1fcnVudGltZV9pZGxlCQktCWNoZWNrIGlmIG1vZGVtIGlkbGUKKyAqCUBkZXY6IG91ciBkZXZpY2UKKyAqCisgKglDaGVjayBjb25kaXRpb25zIGFuZCBxdWV1ZSBydW50aW1lIHN1c3BlbmQgaWYgaWRsZS4KKyAqLworc3RhdGljIGludCBpZnhfc3BpX3BtX3J1bnRpbWVfaWRsZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHNwaV9kZXZpY2UgKnNwaSA9IHRvX3NwaV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgaWZ4X3NwaV9kZXZpY2UgKmlmeF9kZXYgPSBzcGlfZ2V0X2RydmRhdGEoc3BpKTsKKworCWlmICghaWZ4X2Rldi0+cG93ZXJfc3RhdHVzKQorCQlwbV9ydW50aW1lX3N1c3BlbmQoZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgaWZ4X3NwaV9wbSA9IHsKKwkucmVzdW1lID0gaWZ4X3NwaV9wbV9yZXN1bWUsCisJLnN1c3BlbmQgPSBpZnhfc3BpX3BtX3N1c3BlbmQsCisJLnJ1bnRpbWVfcmVzdW1lID0gaWZ4X3NwaV9wbV9ydW50aW1lX3Jlc3VtZSwKKwkucnVudGltZV9zdXNwZW5kID0gaWZ4X3NwaV9wbV9ydW50aW1lX3N1c3BlbmQsCisJLnJ1bnRpbWVfaWRsZSA9IGlmeF9zcGlfcG1fcnVudGltZV9pZGxlCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNwaV9kZXZpY2VfaWQgaWZ4X2lkX3RhYmxlW10gPSB7CisJeyJpZng2MTYwIiwgMH0sCisJeyJpZng2MjYwIiwgMH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShzcGksIGlmeF9pZF90YWJsZSk7CisKKy8qIHNwaSBvcGVyYXRpb25zICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNwaV9kcml2ZXIgaWZ4X3NwaV9kcml2ZXJfNjE2MCA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJpZng2MTYwIiwKKwkJLmJ1cyA9ICZzcGlfYnVzX3R5cGUsCisJCS5wbSA9ICZpZnhfc3BpX3BtLAorCQkub3duZXIgPSBUSElTX01PRFVMRX0sCisJLnByb2JlID0gaWZ4X3NwaV9zcGlfcHJvYmUsCisJLnNodXRkb3duID0gaWZ4X3NwaV9zcGlfc2h1dGRvd24sCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKGlmeF9zcGlfc3BpX3JlbW92ZSksCisJLnN1c3BlbmQgPSBpZnhfc3BpX3NwaV9zdXNwZW5kLAorCS5yZXN1bWUgPSBpZnhfc3BpX3NwaV9yZXN1bWUsCisJLmlkX3RhYmxlID0gaWZ4X2lkX3RhYmxlCit9OworCisvKioKKyAqCWlmeF9zcGlfZXhpdAktCW1vZHVsZSBleGl0CisgKgorICoJVW5sb2FkIHRoZSBtb2R1bGUuCisgKi8KKworc3RhdGljIHZvaWQgX19leGl0IGlmeF9zcGlfZXhpdCh2b2lkKQoreworCS8qIHVucmVnaXN0ZXIgKi8KKwl0dHlfdW5yZWdpc3Rlcl9kcml2ZXIodHR5X2Rydik7CisJc3BpX3VucmVnaXN0ZXJfZHJpdmVyKCh2b2lkICopJmlmeF9zcGlfZHJpdmVyXzYxNjApOworfQorCisvKioKKyAqCWlmeF9zcGlfaW5pdAkJLQltb2R1bGUgZW50cnkgcG9pbnQKKyAqCisgKglJbml0aWFsaXNlIHRoZSBTUEkgYW5kIHR0eSBpbnRlcmZhY2VzIGZvciB0aGUgSUZYIFNQSSBkcml2ZXIKKyAqCVdlIG5lZWQgdG8gaW5pdGlhbGl6ZSB1cHBlci1lZGdlIHNwaSBkcml2ZXIgYWZ0ZXIgdGhlIHR0eQorICoJZHJpdmVyIGJlY2F1c2Ugb3RoZXJ3aXNlIHRoZSBzcGkgcHJvYmUgd2lsbCByYWNlCisgKi8KKworc3RhdGljIGludCBfX2luaXQgaWZ4X3NwaV9pbml0KHZvaWQpCit7CisJaW50IHJlc3VsdDsKKworCXR0eV9kcnYgPSBhbGxvY190dHlfZHJpdmVyKDEpOworCWlmICghdHR5X2RydikgeworCQlwcl9lcnIoIiVzOiBhbGxvY190dHlfZHJpdmVyIGZhaWxlZCIsIERSVk5BTUUpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwl0dHlfZHJ2LT5tYWdpYyA9IFRUWV9EUklWRVJfTUFHSUM7CisJdHR5X2Rydi0+b3duZXIgPSBUSElTX01PRFVMRTsKKwl0dHlfZHJ2LT5kcml2ZXJfbmFtZSA9IERSVk5BTUU7CisJdHR5X2Rydi0+bmFtZSA9IFRUWU5BTUU7CisJdHR5X2Rydi0+bWlub3Jfc3RhcnQgPSBJRlhfU1BJX1RUWV9JRDsKKwl0dHlfZHJ2LT5udW0gPSAxOworCXR0eV9kcnYtPnR5cGUgPSBUVFlfRFJJVkVSX1RZUEVfU0VSSUFMOworCXR0eV9kcnYtPnN1YnR5cGUgPSBTRVJJQUxfVFlQRV9OT1JNQUw7CisJdHR5X2Rydi0+ZmxhZ3MgPSBUVFlfRFJJVkVSX1JFQUxfUkFXIHwgVFRZX0RSSVZFUl9EWU5BTUlDX0RFVjsKKwl0dHlfZHJ2LT5pbml0X3Rlcm1pb3MgPSB0dHlfc3RkX3Rlcm1pb3M7CisKKwl0dHlfc2V0X29wZXJhdGlvbnModHR5X2RydiwgJmlmeF9zcGlfc2VyaWFsX29wcyk7CisKKwlyZXN1bHQgPSB0dHlfcmVnaXN0ZXJfZHJpdmVyKHR0eV9kcnYpOworCWlmIChyZXN1bHQpIHsKKwkJcHJfZXJyKCIlczogdHR5X3JlZ2lzdGVyX2RyaXZlciBmYWlsZWQoJWQpIiwKKwkJCURSVk5BTUUsIHJlc3VsdCk7CisJCXB1dF90dHlfZHJpdmVyKHR0eV9kcnYpOworCQlyZXR1cm4gcmVzdWx0OworCX0KKworCXJlc3VsdCA9IHNwaV9yZWdpc3Rlcl9kcml2ZXIoKHZvaWQgKikmaWZ4X3NwaV9kcml2ZXJfNjE2MCk7CisJaWYgKHJlc3VsdCkgeworCQlwcl9lcnIoIiVzOiBzcGlfcmVnaXN0ZXJfZHJpdmVyIGZhaWxlZCglZCkiLAorCQkJRFJWTkFNRSwgcmVzdWx0KTsKKwkJdHR5X3VucmVnaXN0ZXJfZHJpdmVyKHR0eV9kcnYpOworCX0KKwlyZXR1cm4gcmVzdWx0OworfQorCittb2R1bGVfaW5pdChpZnhfc3BpX2luaXQpOworbW9kdWxlX2V4aXQoaWZ4X3NwaV9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiSW50ZWwiKTsKK01PRFVMRV9ERVNDUklQVElPTigiSUZYNng2MCBzcGkgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfSU5GTyhWZXJzaW9uLCAiMC4xLUlGWDZ4NjAiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2lmeDZ4NjAuaCBiL2RyaXZlcnMvc2VyaWFsL2lmeDZ4NjAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZWI3YjhkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zZXJpYWwvaWZ4Nng2MC5oCkBAIC0wLDAgKzEsMTI5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIERyaXZlciBmb3IgdGhlIElGWCBzcGkgbW9kZW0uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIEludGVsIENvcnAKKyAqIEppbSBTdGFubGV5IDxqaW0uc3RhbmxleUBpbnRlbC5jb20+CisgKgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgkgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEsCisgKiBVU0EKKyAqCisgKgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0lGWDZYNjBfSAorI2RlZmluZSBfSUZYNlg2MF9ICisKKyNkZWZpbmUgRFJWTkFNRQkJCQkiaWZ4Nng2MCIKKyNkZWZpbmUgVFRZTkFNRQkJCQkidHR5SUZYIgorCisvKiAjZGVmaW5lIElGWF9USFJPVFRMRV9DT0RFICovCisKKyNkZWZpbmUgSUZYX1NQSV9NQVhfTUlOT1JTCQkxCisjZGVmaW5lIElGWF9TUElfVFJBTlNGRVJfU0laRQkJMjA0OAorI2RlZmluZSBJRlhfU1BJX0ZJRk9fU0laRQkJNDA5NgorCisjZGVmaW5lIElGWF9TUElfSEVBREVSX09WRVJIRUFECQk0CisjZGVmaW5lIElGWF9SRVNFVF9USU1FT1VUCQltc2Vjc190b19qaWZmaWVzKDUwKQorCisvKiBkZXZpY2UgZmxhZ3MgYml0ZmllbGQgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgSUZYX1NQSV9TVEFURV9QUkVTRU5UCQkwCisjZGVmaW5lIElGWF9TUElfU1RBVEVfSU9fSU5fUFJPR1JFU1MJMQorI2RlZmluZSBJRlhfU1BJX1NUQVRFX0lPX1JFQURZCQkyCisjZGVmaW5lIElGWF9TUElfU1RBVEVfVElNRVJfUEVORElORwkzCisKKy8qIGZsb3cgY29udHJvbCBiaXRmaWVsZHMgKi8KKyNkZWZpbmUgSUZYX1NQSV9EQ0QJCQkwCisjZGVmaW5lIElGWF9TUElfQ1RTCQkJMQorI2RlZmluZSBJRlhfU1BJX0RTUgkJCTIKKyNkZWZpbmUgSUZYX1NQSV9SSQkJCTMKKyNkZWZpbmUgSUZYX1NQSV9EVFIJCQk0CisjZGVmaW5lIElGWF9TUElfUlRTCQkJNQorI2RlZmluZSBJRlhfU1BJX1RYX0ZDCQkJNgorI2RlZmluZSBJRlhfU1BJX1JYX0ZDCQkJNworI2RlZmluZSBJRlhfU1BJX1VQREFURQkJCTgKKworI2RlZmluZSBJRlhfU1BJX1BBWUxPQURfU0laRQkJKElGWF9TUElfVFJBTlNGRVJfU0laRSAtIFwKKwkJCQkJCUlGWF9TUElfSEVBREVSX09WRVJIRUFEKQorCisjZGVmaW5lIElGWF9TUElfSVJRX1RZUEUJCURFVEVDVF9FREdFX1JJU0lORworI2RlZmluZSBJRlhfU1BJX0dQSU9fVEFSR0VUCQkwCisjZGVmaW5lIElGWF9TUElfR1BJTzAJCQkweDEwNQorCisjZGVmaW5lIElGWF9TUElfU1RBVFVTX1RJTUVPVVQJCSgyMDAwKkhaKQorCisvKiB2YWx1ZXMgZm9yIGJpdHMgaW4gcG93ZXIgc3RhdHVzIGJ5dGUgKi8KKyNkZWZpbmUgSUZYX1NQSV9QT1dFUl9EQVRBX1BFTkRJTkcJMQorI2RlZmluZSBJRlhfU1BJX1BPV0VSX1NSRFkJCTIKKworc3RydWN0IGlmeF9zcGlfZGV2aWNlIHsKKwkvKiBPdXIgU1BJIGRldmljZSAqLworCXN0cnVjdCBzcGlfZGV2aWNlICpzcGlfZGV2OworCisJLyogUG9ydCBzcGVjaWZpYyBkYXRhICovCisJc3RydWN0IGtmaWZvIHR4X2ZpZm87CisJc3BpbmxvY2tfdCBmaWZvX2xvY2s7CisJdW5zaWduZWQgbG9uZyBzaWduYWxfc3RhdGU7CisKKwkvKiBUVFkgTGF5ZXIgbG9naWMgKi8KKwlzdHJ1Y3QgdHR5X3BvcnQgdHR5X3BvcnQ7CisJc3RydWN0IGRldmljZSAqdHR5X2RldjsKKwlpbnQgbWlub3I7CisKKwkvKiBMb3cgbGV2ZWwgSS9PIHdvcmsgKi8KKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgaW9fd29ya190YXNrbGV0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJZG1hX2FkZHJfdCByeF9kbWE7CisJZG1hX2FkZHJfdCB0eF9kbWE7CisKKwlpbnQgaXNfNjE2MDsJCQkJLyogTW9kZW0gdHlwZSAqLworCisJc3BpbmxvY2tfdCB3cml0ZV9sb2NrOworCWludCB3cml0ZV9wZW5kaW5nOworCXNwaW5sb2NrX3QgcG93ZXJfbG9jazsKKwl1bnNpZ25lZCBjaGFyIHBvd2VyX3N0YXR1czsKKworCXVuc2lnbmVkIGNoYXIgKnJ4X2J1ZmZlcjsKKwl1bnNpZ25lZCBjaGFyICp0eF9idWZmZXI7CisJZG1hX2FkZHJfdCByeF9idXM7CisJZG1hX2FkZHJfdCB0eF9idXM7CisJdW5zaWduZWQgY2hhciBzcGlfbW9yZTsKKwl1bnNpZ25lZCBjaGFyIHNwaV9zbGF2ZV9jdHM7CisKKwlzdHJ1Y3QgdGltZXJfbGlzdCBzcGlfdGltZXI7CisKKwlzdHJ1Y3Qgc3BpX21lc3NhZ2Ugc3BpX21zZzsKKwlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHNwaV94ZmVyOworCisJc3RydWN0IHsKKwkJLyogZ3BpbyBsaW5lcyAqLworCQl1bnNpZ25lZCBzaG9ydCBzcmR5OwkJLyogc2xhdmUtcmVhZHkgZ3BpbyAqLworCQl1bnNpZ25lZCBzaG9ydCBtcmR5OwkJLyogbWFzdGVyLXJlYWR5IGdwaW8gKi8KKwkJdW5zaWduZWQgc2hvcnQgcmVzZXQ7CQkvKiBtb2RlbS1yZXNldCBncGlvICovCisJCXVuc2lnbmVkIHNob3J0IHBvOwkJLyogbW9kZW0tb24gZ3BpbyAqLworCQl1bnNpZ25lZCBzaG9ydCByZXNldF9vdXQ7CS8qIG1vZGVtLWluLXJlc2V0IGdwaW8gKi8KKwkJLyogc3RhdGUvc3RhdHMgKi8KKwkJaW50IHVuYWNrX3NyZHlfaW50X25iOworCX0gZ3BpbzsKKworCS8qIG1vZGVtIHJlc2V0ICovCisJdW5zaWduZWQgbG9uZyBtZG1fcmVzZXRfc3RhdGU7CisjZGVmaW5lIE1SX1NUQVJUCTAKKyNkZWZpbmUgTVJfSU5QUk9HUkVTUwkxCisjZGVmaW5lIE1SX0NPTVBMRVRFCTIKKwl3YWl0X3F1ZXVlX2hlYWRfdCBtZG1fcmVzZXRfd2FpdDsKK307CisKKyNlbmRpZiAvKiBfSUZYNlg2MF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9tcGM1Mnh4X3VhcnQuYyBiL2RyaXZlcnMvc2VyaWFsL21wYzUyeHhfdWFydC5jCmluZGV4IGM0Mzk5ZTIuLjEyNmVjN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL21wYzUyeHhfdWFydC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL21wYzUyeHhfdWFydC5jCkBAIC04MzgsNyArODM4LDExIEBACiBzdGF0aWMgY29uc3QgY2hhciAqCiBtcGM1Mnh4X3VhcnRfdHlwZShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewotCXJldHVybiBwb3J0LT50eXBlID09IFBPUlRfTVBDNTJ4eCA/ICJNUEM1Mnh4IFBTQyIgOiBOVUxMOworCS8qCisJICogV2Uga2VlcCB1c2luZyBQT1JUX01QQzUyeHggZm9yIGhpc3RvcmljIHJlYXNvbnMgYWx0aG91Z2ggaXQgYXBwbGllcworCSAqIGZvciBNUEM1MTJ4LCB0b28sIGJ1dCBwcmludCAiTVBDNXh4eCIgdG8gbm90IGlycml0YXRlIHVzZXJzCisJICovCisJcmV0dXJuIHBvcnQtPnR5cGUgPT0gUE9SVF9NUEM1Mnh4ID8gIk1QQzV4eHggUFNDIiA6IE5VTEw7CiB9CiAKIHN0YXRpYyB2b2lkCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9tc21fc2VyaWFsLmMgYi9kcml2ZXJzL3NlcmlhbC9tc21fc2VyaWFsLmMKaW5kZXggZjhjODE2ZS4uOGU0M2E3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvbXNtX3NlcmlhbC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL21zbV9zZXJpYWwuYwpAQCAtNjg2LDcgKzY4Niw3IEBACiAJbXNtX3BvcnQgPSBVQVJUX1RPX01TTShwb3J0KTsKIAogCW1zbV9wb3J0LT5jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJ1YXJ0X2NsayIpOwotCWlmICh1bmxpa2VseShJU19FUlIobXNtX3BvcnQtPmNsaykpKQorCWlmIChJU19FUlIobXNtX3BvcnQtPmNsaykpCiAJCXJldHVybiBQVFJfRVJSKG1zbV9wb3J0LT5jbGspOwogCXBvcnQtPnVhcnRjbGsgPSBjbGtfZ2V0X3JhdGUobXNtX3BvcnQtPmNsayk7CiAJcHJpbnRrKEtFUk5fSU5GTyAidWFydGNsayA9ICVkXG4iLCBwb3J0LT51YXJ0Y2xrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL29tYXAtc2VyaWFsLmMgYi9kcml2ZXJzL3NlcmlhbC9vbWFwLXNlcmlhbC5jCmluZGV4IDE0MzY1ZjcuLjdmMmYwMTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL29tYXAtc2VyaWFsLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvb21hcC1zZXJpYWwuYwpAQCAtNTcwLDcgKzU3MCw3IEBACiAJdW5zaWduZWQgY2hhciBlZnIgPSAwOwogCiAJdXAtPmxjciA9IHNlcmlhbF9pbih1cCwgVUFSVF9MQ1IpOwotCXNlcmlhbF9vdXQodXAsIFVBUlRfTENSLCBPTUFQX1VBUlRfTENSX0NPTkZfTURCKTsKKwlzZXJpYWxfb3V0KHVwLCBVQVJUX0xDUiwgVUFSVF9MQ1JfQ09ORl9NT0RFX0IpOwogCXVwLT5lZnIgPSBzZXJpYWxfaW4odXAsIFVBUlRfRUZSKTsKIAlzZXJpYWxfb3V0KHVwLCBVQVJUX0VGUiwgdXAtPmVmciAmIH5VQVJUX0VGUl9FQ0IpOwogCkBAIC01OTgsNyArNTk4LDcgQEAKIAkJZWZyIHw9IE9NQVBfVUFSVF9TV19SWDsKIAogCXNlcmlhbF9vdXQodXAsIFVBUlRfRUZSLCB1cC0+ZWZyIHwgVUFSVF9FRlJfRUNCKTsKLQlzZXJpYWxfb3V0KHVwLCBVQVJUX0xDUiwgVUFSVF9MQ1JfRExBQik7CisJc2VyaWFsX291dCh1cCwgVUFSVF9MQ1IsIFVBUlRfTENSX0NPTkZfTU9ERV9BKTsKIAogCXVwLT5tY3IgPSBzZXJpYWxfaW4odXAsIFVBUlRfTUNSKTsKIApAQCAtNjEyLDE0ICs2MTIsMTQgQEAKIAkJdXAtPm1jciB8PSBVQVJUX01DUl9YT05BTlk7CiAKIAlzZXJpYWxfb3V0KHVwLCBVQVJUX01DUiwgdXAtPm1jciB8IFVBUlRfTUNSX1RDUlRMUik7Ci0Jc2VyaWFsX291dCh1cCwgVUFSVF9MQ1IsIE9NQVBfVUFSVF9MQ1JfQ09ORl9NREIpOworCXNlcmlhbF9vdXQodXAsIFVBUlRfTENSLCBVQVJUX0xDUl9DT05GX01PREVfQik7CiAJc2VyaWFsX291dCh1cCwgVUFSVF9USTc1Ml9UQ1IsIE9NQVBfVUFSVF9UQ1JfVFJJRyk7CiAJLyogRW5hYmxlIHNwZWNpYWwgY2hhciBmdW5jdGlvbiBVQVJUaS5FRlJfUkVHWzVdIGFuZAogCSAqIGxvYWQgdGhlIG5ldyBzb2Z0d2FyZSBmbG93IGNvbnRyb2wgbW9kZSBJWE9OIG9yIElYT0ZGCiAJICogYW5kIHJlc3RvcmUgdGhlIFVBUlRpLkVGUl9SRUdbNF0gRU5IQU5DRURfRU4gdmFsdWUuCiAJICovCiAJc2VyaWFsX291dCh1cCwgVUFSVF9FRlIsIGVmciB8IFVBUlRfRUZSX1NDRCk7Ci0Jc2VyaWFsX291dCh1cCwgVUFSVF9MQ1IsIFVBUlRfTENSX0RMQUIpOworCXNlcmlhbF9vdXQodXAsIFVBUlRfTENSLCBVQVJUX0xDUl9DT05GX01PREVfQSk7CiAKIAlzZXJpYWxfb3V0KHVwLCBVQVJUX01DUiwgdXAtPm1jciAmIH5VQVJUX01DUl9UQ1JUTFIpOwogCXNlcmlhbF9vdXQodXAsIFVBUlRfTENSLCB1cC0+bGNyKTsKQEAgLTcyNCwyMiArNzI0LDIyIEBACiAJICogYmF1ZCBjbG9jayBpcyBub3QgcnVubmluZwogCSAqIERMTF9SRUcgYW5kIERMSF9SRUcgc2V0IHRvIDAuCiAJICovCi0Jc2VyaWFsX291dCh1cCwgVUFSVF9MQ1IsIFVBUlRfTENSX0RMQUIpOworCXNlcmlhbF9vdXQodXAsIFVBUlRfTENSLCBVQVJUX0xDUl9DT05GX01PREVfQSk7CiAJc2VyaWFsX291dCh1cCwgVUFSVF9ETEwsIDApOwogCXNlcmlhbF9vdXQodXAsIFVBUlRfRExNLCAwKTsKIAlzZXJpYWxfb3V0KHVwLCBVQVJUX0xDUiwgMCk7CiAKLQlzZXJpYWxfb3V0KHVwLCBVQVJUX0xDUiwgT01BUF9VQVJUX0xDUl9DT05GX01EQik7CisJc2VyaWFsX291dCh1cCwgVUFSVF9MQ1IsIFVBUlRfTENSX0NPTkZfTU9ERV9CKTsKIAogCXVwLT5lZnIgPSBzZXJpYWxfaW4odXAsIFVBUlRfRUZSKTsKIAlzZXJpYWxfb3V0KHVwLCBVQVJUX0VGUiwgdXAtPmVmciB8IFVBUlRfRUZSX0VDQik7CiAKLQlzZXJpYWxfb3V0KHVwLCBVQVJUX0xDUiwgVUFSVF9MQ1JfRExBQik7CisJc2VyaWFsX291dCh1cCwgVUFSVF9MQ1IsIFVBUlRfTENSX0NPTkZfTU9ERV9BKTsKIAl1cC0+bWNyID0gc2VyaWFsX2luKHVwLCBVQVJUX01DUik7CiAJc2VyaWFsX291dCh1cCwgVUFSVF9NQ1IsIHVwLT5tY3IgfCBVQVJUX01DUl9UQ1JUTFIpOwogCS8qIEZJRk8gRU5BQkxFLCBETUEgTU9ERSAqLwogCXNlcmlhbF9vdXQodXAsIFVBUlRfRkNSLCB1cC0+ZmNyKTsKLQlzZXJpYWxfb3V0KHVwLCBVQVJUX0xDUiwgT01BUF9VQVJUX0xDUl9DT05GX01EQik7CisJc2VyaWFsX291dCh1cCwgVUFSVF9MQ1IsIFVBUlRfTENSX0NPTkZfTU9ERV9CKTsKIAogCWlmICh1cC0+dXNlX2RtYSkgewogCQlzZXJpYWxfb3V0KHVwLCBVQVJUX1RJNzUyX1RMUiwgMCk7CkBAIC03NDgsNTIgKzc0OCw1MiBAQAogCX0KIAogCXNlcmlhbF9vdXQodXAsIFVBUlRfRUZSLCB1cC0+ZWZyKTsKLQlzZXJpYWxfb3V0KHVwLCBVQVJUX0xDUiwgVUFSVF9MQ1JfRExBQik7CisJc2VyaWFsX291dCh1cCwgVUFSVF9MQ1IsIFVBUlRfTENSX0NPTkZfTU9ERV9BKTsKIAlzZXJpYWxfb3V0KHVwLCBVQVJUX01DUiwgdXAtPm1jcik7CiAKIAkvKiBQcm90b2NvbCwgQmF1ZCBSYXRlLCBhbmQgSW50ZXJydXB0IFNldHRpbmdzICovCiAKLQlzZXJpYWxfb3V0KHVwLCBVQVJUX09NQVBfTURSMSwgT01BUF9NRFIxX0RJU0FCTEUpOwotCXNlcmlhbF9vdXQodXAsIFVBUlRfTENSLCBPTUFQX1VBUlRfTENSX0NPTkZfTURCKTsKKwlzZXJpYWxfb3V0KHVwLCBVQVJUX09NQVBfTURSMSwgVUFSVF9PTUFQX01EUjFfRElTQUJMRSk7CisJc2VyaWFsX291dCh1cCwgVUFSVF9MQ1IsIFVBUlRfTENSX0NPTkZfTU9ERV9CKTsKIAogCXVwLT5lZnIgPSBzZXJpYWxfaW4odXAsIFVBUlRfRUZSKTsKIAlzZXJpYWxfb3V0KHVwLCBVQVJUX0VGUiwgdXAtPmVmciB8IFVBUlRfRUZSX0VDQik7CiAKIAlzZXJpYWxfb3V0KHVwLCBVQVJUX0xDUiwgMCk7CiAJc2VyaWFsX291dCh1cCwgVUFSVF9JRVIsIDApOwotCXNlcmlhbF9vdXQodXAsIFVBUlRfTENSLCBPTUFQX1VBUlRfTENSX0NPTkZfTURCKTsKKwlzZXJpYWxfb3V0KHVwLCBVQVJUX0xDUiwgVUFSVF9MQ1JfQ09ORl9NT0RFX0IpOwogCiAJc2VyaWFsX291dCh1cCwgVUFSVF9ETEwsIHF1b3QgJiAweGZmKTsgICAgICAgICAgLyogTFMgb2YgZGl2aXNvciAqLwogCXNlcmlhbF9vdXQodXAsIFVBUlRfRExNLCBxdW90ID4+IDgpOyAgICAgICAgICAgIC8qIE1TIG9mIGRpdmlzb3IgKi8KIAogCXNlcmlhbF9vdXQodXAsIFVBUlRfTENSLCAwKTsKIAlzZXJpYWxfb3V0KHVwLCBVQVJUX0lFUiwgdXAtPmllcik7Ci0Jc2VyaWFsX291dCh1cCwgVUFSVF9MQ1IsIE9NQVBfVUFSVF9MQ1JfQ09ORl9NREIpOworCXNlcmlhbF9vdXQodXAsIFVBUlRfTENSLCBVQVJUX0xDUl9DT05GX01PREVfQik7CiAKIAlzZXJpYWxfb3V0KHVwLCBVQVJUX0VGUiwgdXAtPmVmcik7CiAJc2VyaWFsX291dCh1cCwgVUFSVF9MQ1IsIGN2YWwpOwogCiAJaWYgKGJhdWQgPiAyMzA0MDAgJiYgYmF1ZCAhPSAzMDAwMDAwKQotCQlzZXJpYWxfb3V0KHVwLCBVQVJUX09NQVBfTURSMSwgT01BUF9NRFIxX01PREUxM1gpOworCQlzZXJpYWxfb3V0KHVwLCBVQVJUX09NQVBfTURSMSwgVUFSVF9PTUFQX01EUjFfMTNYX01PREUpOwogCWVsc2UKLQkJc2VyaWFsX291dCh1cCwgVUFSVF9PTUFQX01EUjEsIE9NQVBfTURSMV9NT0RFMTZYKTsKKwkJc2VyaWFsX291dCh1cCwgVUFSVF9PTUFQX01EUjEsIFVBUlRfT01BUF9NRFIxXzE2WF9NT0RFKTsKIAogCS8qIEhhcmR3YXJlIEZsb3cgQ29udHJvbCBDb25maWd1cmF0aW9uICovCiAKIAlpZiAodGVybWlvcy0+Y19jZmxhZyAmIENSVFNDVFMpIHsKIAkJZWZyIHw9IChVQVJUX0VGUl9DVFMgfCBVQVJUX0VGUl9SVFMpOwotCQlzZXJpYWxfb3V0KHVwLCBVQVJUX0xDUiwgVUFSVF9MQ1JfRExBQik7CisJCXNlcmlhbF9vdXQodXAsIFVBUlRfTENSLCBVQVJUX0xDUl9DT05GX01PREVfQSk7CiAKIAkJdXAtPm1jciA9IHNlcmlhbF9pbih1cCwgVUFSVF9NQ1IpOwogCQlzZXJpYWxfb3V0KHVwLCBVQVJUX01DUiwgdXAtPm1jciB8IFVBUlRfTUNSX1RDUlRMUik7CiAKLQkJc2VyaWFsX291dCh1cCwgVUFSVF9MQ1IsIE9NQVBfVUFSVF9MQ1JfQ09ORl9NREIpOworCQlzZXJpYWxfb3V0KHVwLCBVQVJUX0xDUiwgVUFSVF9MQ1JfQ09ORl9NT0RFX0IpOwogCQl1cC0+ZWZyID0gc2VyaWFsX2luKHVwLCBVQVJUX0VGUik7CiAJCXNlcmlhbF9vdXQodXAsIFVBUlRfRUZSLCB1cC0+ZWZyIHwgVUFSVF9FRlJfRUNCKTsKIAogCQlzZXJpYWxfb3V0KHVwLCBVQVJUX1RJNzUyX1RDUiwgT01BUF9VQVJUX1RDUl9UUklHKTsKIAkJc2VyaWFsX291dCh1cCwgVUFSVF9FRlIsIGVmcik7IC8qIEVuYWJsZSBBVVRPUlRTIGFuZCBBVVRPQ1RTICovCi0JCXNlcmlhbF9vdXQodXAsIFVBUlRfTENSLCBVQVJUX0xDUl9ETEFCKTsKKwkJc2VyaWFsX291dCh1cCwgVUFSVF9MQ1IsIFVBUlRfTENSX0NPTkZfTU9ERV9BKTsKIAkJc2VyaWFsX291dCh1cCwgVUFSVF9NQ1IsIHVwLT5tY3IgfCBVQVJUX01DUl9SVFMpOwogCQlzZXJpYWxfb3V0KHVwLCBVQVJUX0xDUiwgY3ZhbCk7CiAJfQpAQCAtODE1LDEzICs4MTUsMTMgQEAKIAl1bnNpZ25lZCBjaGFyIGVmcjsKIAogCWRldl9kYmcodXAtPnBvcnQuZGV2LCAic2VyaWFsX29tYXBfcG0rJWRcbiIsIHVwLT5wZGV2LT5pZCk7Ci0Jc2VyaWFsX291dCh1cCwgVUFSVF9MQ1IsIE9NQVBfVUFSVF9MQ1JfQ09ORl9NREIpOworCXNlcmlhbF9vdXQodXAsIFVBUlRfTENSLCBVQVJUX0xDUl9DT05GX01PREVfQik7CiAJZWZyID0gc2VyaWFsX2luKHVwLCBVQVJUX0VGUik7CiAJc2VyaWFsX291dCh1cCwgVUFSVF9FRlIsIGVmciB8IFVBUlRfRUZSX0VDQik7CiAJc2VyaWFsX291dCh1cCwgVUFSVF9MQ1IsIDApOwogCiAJc2VyaWFsX291dCh1cCwgVUFSVF9JRVIsIChzdGF0ZSAhPSAwKSA/IFVBUlRfSUVSWF9TTEVFUCA6IDApOwotCXNlcmlhbF9vdXQodXAsIFVBUlRfTENSLCBPTUFQX1VBUlRfTENSX0NPTkZfTURCKTsKKwlzZXJpYWxfb3V0KHVwLCBVQVJUX0xDUiwgVUFSVF9MQ1JfQ09ORl9NT0RFX0IpOwogCXNlcmlhbF9vdXQodXAsIFVBUlRfRUZSLCBlZnIpOwogCXNlcmlhbF9vdXQodXAsIFVBUlRfTENSLCAwKTsKIAkvKiBFbmFibGUgbW9kdWxlIGxldmVsIHdha2UgdXAgKi8KQEAgLTg2NiwxMiArODY2LDYgQEAKIAlyZXR1cm4gdXAtPm5hbWU7CiB9CiAKLSNpZmRlZiBDT05GSUdfU0VSSUFMX09NQVBfQ09OU09MRQotCi1zdGF0aWMgc3RydWN0IHVhcnRfb21hcF9wb3J0ICpzZXJpYWxfb21hcF9jb25zb2xlX3BvcnRzWzRdOwotCi1zdGF0aWMgc3RydWN0IHVhcnRfZHJpdmVyIHNlcmlhbF9vbWFwX3JlZzsKLQogI2RlZmluZSBCT1RIX0VNUFRZIChVQVJUX0xTUl9URU1UIHwgVUFSVF9MU1JfVEhSRSkKIAogc3RhdGljIGlubGluZSB2b2lkIHdhaXRfZm9yX3htaXRyKHN0cnVjdCB1YXJ0X29tYXBfcG9ydCAqdXApCkBAIC05MDUsNiArODk5LDM0IEBACiAJfQogfQogCisjaWZkZWYgQ09ORklHX0NPTlNPTEVfUE9MTAorCitzdGF0aWMgdm9pZCBzZXJpYWxfb21hcF9wb2xsX3B1dF9jaGFyKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHVuc2lnbmVkIGNoYXIgY2gpCit7CisJc3RydWN0IHVhcnRfb21hcF9wb3J0ICp1cCA9IChzdHJ1Y3QgdWFydF9vbWFwX3BvcnQgKilwb3J0OworCXdhaXRfZm9yX3htaXRyKHVwKTsKKwlzZXJpYWxfb3V0KHVwLCBVQVJUX1RYLCBjaCk7Cit9CisKK3N0YXRpYyBpbnQgc2VyaWFsX29tYXBfcG9sbF9nZXRfY2hhcihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCB1YXJ0X29tYXBfcG9ydCAqdXAgPSAoc3RydWN0IHVhcnRfb21hcF9wb3J0ICopcG9ydDsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzID0gc2VyaWFsX2luKHVwLCBVQVJUX0xTUik7CisKKwlpZiAoIShzdGF0dXMgJiBVQVJUX0xTUl9EUikpCisJCXJldHVybiBOT19QT0xMX0NIQVI7CisKKwlyZXR1cm4gc2VyaWFsX2luKHVwLCBVQVJUX1JYKTsKK30KKworI2VuZGlmIC8qIENPTkZJR19DT05TT0xFX1BPTEwgKi8KKworI2lmZGVmIENPTkZJR19TRVJJQUxfT01BUF9DT05TT0xFCisKK3N0YXRpYyBzdHJ1Y3QgdWFydF9vbWFwX3BvcnQgKnNlcmlhbF9vbWFwX2NvbnNvbGVfcG9ydHNbNF07CisKK3N0YXRpYyBzdHJ1Y3QgdWFydF9kcml2ZXIgc2VyaWFsX29tYXBfcmVnOworCiBzdGF0aWMgdm9pZCBzZXJpYWxfb21hcF9jb25zb2xlX3B1dGNoYXIoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgaW50IGNoKQogewogCXN0cnVjdCB1YXJ0X29tYXBfcG9ydCAqdXAgPSAoc3RydWN0IHVhcnRfb21hcF9wb3J0ICopcG9ydDsKQEAgLTEwMjIsNiArMTA0NCwxMCBAQAogCS5yZXF1ZXN0X3BvcnQJPSBzZXJpYWxfb21hcF9yZXF1ZXN0X3BvcnQsCiAJLmNvbmZpZ19wb3J0CT0gc2VyaWFsX29tYXBfY29uZmlnX3BvcnQsCiAJLnZlcmlmeV9wb3J0CT0gc2VyaWFsX29tYXBfdmVyaWZ5X3BvcnQsCisjaWZkZWYgQ09ORklHX0NPTlNPTEVfUE9MTAorCS5wb2xsX3B1dF9jaGFyICA9IHNlcmlhbF9vbWFwX3BvbGxfcHV0X2NoYXIsCisJLnBvbGxfZ2V0X2NoYXIgID0gc2VyaWFsX29tYXBfcG9sbF9nZXRfY2hhciwKKyNlbmRpZgogfTsKIAogc3RhdGljIHN0cnVjdCB1YXJ0X2RyaXZlciBzZXJpYWxfb21hcF9yZWcgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9wY2hfdWFydC5jIGIvZHJpdmVycy9zZXJpYWwvcGNoX3VhcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGE2MTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zZXJpYWwvcGNoX3VhcnQuYwpAQCAtMCwwICsxLDE0NTEgQEAKKy8qCisgKkNvcHlyaWdodCAoQykgMjAxMCBPS0kgU0VNSUNPTkRVQ1RPUiBDTy4sIExURC4KKyAqCisgKlRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKml0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKnRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKlRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICpidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICpNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKkdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICpZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICphbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICpGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgorICovCisjaW5jbHVkZSA8bGludXgvc2VyaWFsX3JlZy5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPGxpbnV4L2RtYWVuZ2luZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaF9kbWEuaD4KKworZW51bSB7CisJUENIX1VBUlRfSEFORExFRF9SWF9JTlRfU0hJRlQsCisJUENIX1VBUlRfSEFORExFRF9UWF9JTlRfU0hJRlQsCisJUENIX1VBUlRfSEFORExFRF9SWF9FUlJfSU5UX1NISUZULAorCVBDSF9VQVJUX0hBTkRMRURfUlhfVFJHX0lOVF9TSElGVCwKKwlQQ0hfVUFSVF9IQU5ETEVEX01TX0lOVF9TSElGVCwKK307CisKK2VudW0geworCVBDSF9VQVJUXzhMSU5FLAorCVBDSF9VQVJUXzJMSU5FLAorfTsKKworI2RlZmluZSBQQ0hfVUFSVF9EUklWRVJfREVWSUNFICJ0dHlQQ0giCisKKyNkZWZpbmUgUENIX1VBUlRfTlJfR0VfMjU2RklGTwkJMQorI2RlZmluZSBQQ0hfVUFSVF9OUl9HRV82NEZJRk8JCTMKKyNkZWZpbmUgUENIX1VBUlRfTlJfR0UJKFBDSF9VQVJUX05SX0dFXzI1NkZJRk8rUENIX1VBUlRfTlJfR0VfNjRGSUZPKQorI2RlZmluZSBQQ0hfVUFSVF9OUglQQ0hfVUFSVF9OUl9HRQorCisjZGVmaW5lIFBDSF9VQVJUX0hBTkRMRURfUlhfSU5UCSgxPDwoKFBDSF9VQVJUX0hBTkRMRURfUlhfSU5UX1NISUZUKTw8MSkpCisjZGVmaW5lIFBDSF9VQVJUX0hBTkRMRURfVFhfSU5UCSgxPDwoKFBDSF9VQVJUX0hBTkRMRURfVFhfSU5UX1NISUZUKTw8MSkpCisjZGVmaW5lIFBDSF9VQVJUX0hBTkRMRURfUlhfRVJSX0lOVAkoMTw8KChcCisJCQkJCVBDSF9VQVJUX0hBTkRMRURfUlhfRVJSX0lOVF9TSElGVCk8PDEpKQorI2RlZmluZSBQQ0hfVUFSVF9IQU5ETEVEX1JYX1RSR19JTlQJKDE8PCgoXAorCQkJCQlQQ0hfVUFSVF9IQU5ETEVEX1JYX1RSR19JTlRfU0hJRlQpPDwxKSkKKyNkZWZpbmUgUENIX1VBUlRfSEFORExFRF9NU19JTlQJKDE8PCgoUENIX1VBUlRfSEFORExFRF9NU19JTlRfU0hJRlQpPDwxKSkKKworI2RlZmluZSBQQ0hfVUFSVF9SQlIJCTB4MDAKKyNkZWZpbmUgUENIX1VBUlRfVEhSCQkweDAwCisKKyNkZWZpbmUgUENIX1VBUlRfSUVSX01BU0sJKFBDSF9VQVJUX0lFUl9FUkJGSXxQQ0hfVUFSVF9JRVJfRVRCRUl8XAorCQkJCVBDSF9VQVJUX0lFUl9FTFNJfFBDSF9VQVJUX0lFUl9FRFNTSSkKKyNkZWZpbmUgUENIX1VBUlRfSUVSX0VSQkZJCTB4MDAwMDAwMDEKKyNkZWZpbmUgUENIX1VBUlRfSUVSX0VUQkVJCTB4MDAwMDAwMDIKKyNkZWZpbmUgUENIX1VBUlRfSUVSX0VMU0kJMHgwMDAwMDAwNAorI2RlZmluZSBQQ0hfVUFSVF9JRVJfRURTU0kJMHgwMDAwMDAwOAorCisjZGVmaW5lIFBDSF9VQVJUX0lJUl9JUAkJCTB4MDAwMDAwMDEKKyNkZWZpbmUgUENIX1VBUlRfSUlSX0lJRAkJMHgwMDAwMDAwNgorI2RlZmluZSBQQ0hfVUFSVF9JSVJfTVNJCQkweDAwMDAwMDAwCisjZGVmaW5lIFBDSF9VQVJUX0lJUl9UUkkJCTB4MDAwMDAwMDIKKyNkZWZpbmUgUENIX1VBUlRfSUlSX1JSSQkJMHgwMDAwMDAwNAorI2RlZmluZSBQQ0hfVUFSVF9JSVJfUkVJCQkweDAwMDAwMDA2CisjZGVmaW5lIFBDSF9VQVJUX0lJUl9UT0kJCTB4MDAwMDAwMDgKKyNkZWZpbmUgUENIX1VBUlRfSUlSX0ZJRk8yNTYJCTB4MDAwMDAwMjAKKyNkZWZpbmUgUENIX1VBUlRfSUlSX0ZJRk82NAkJUENIX1VBUlRfSUlSX0ZJRk8yNTYKKyNkZWZpbmUgUENIX1VBUlRfSUlSX0ZFCQkJMHgwMDAwMDBDMAorCisjZGVmaW5lIFBDSF9VQVJUX0ZDUl9GSUZPRQkJMHgwMDAwMDAwMQorI2RlZmluZSBQQ0hfVUFSVF9GQ1JfUkZSCQkweDAwMDAwMDAyCisjZGVmaW5lIFBDSF9VQVJUX0ZDUl9URlIJCTB4MDAwMDAwMDQKKyNkZWZpbmUgUENIX1VBUlRfRkNSX0RNUwkJMHgwMDAwMDAwOAorI2RlZmluZSBQQ0hfVUFSVF9GQ1JfRklGTzI1NgkJMHgwMDAwMDAyMAorI2RlZmluZSBQQ0hfVUFSVF9GQ1JfUkZUTAkJMHgwMDAwMDBDMAorCisjZGVmaW5lIFBDSF9VQVJUX0ZDUl9SRlRMMQkJMHgwMDAwMDAwMAorI2RlZmluZSBQQ0hfVUFSVF9GQ1JfUkZUTDY0CQkweDAwMDAwMDQwCisjZGVmaW5lIFBDSF9VQVJUX0ZDUl9SRlRMMTI4CQkweDAwMDAwMDgwCisjZGVmaW5lIFBDSF9VQVJUX0ZDUl9SRlRMMjI0CQkweDAwMDAwMEMwCisjZGVmaW5lIFBDSF9VQVJUX0ZDUl9SRlRMMTYJCVBDSF9VQVJUX0ZDUl9SRlRMNjQKKyNkZWZpbmUgUENIX1VBUlRfRkNSX1JGVEwzMgkJUENIX1VBUlRfRkNSX1JGVEwxMjgKKyNkZWZpbmUgUENIX1VBUlRfRkNSX1JGVEw1NgkJUENIX1VBUlRfRkNSX1JGVEwyMjQKKyNkZWZpbmUgUENIX1VBUlRfRkNSX1JGVEw0CQlQQ0hfVUFSVF9GQ1JfUkZUTDY0CisjZGVmaW5lIFBDSF9VQVJUX0ZDUl9SRlRMOAkJUENIX1VBUlRfRkNSX1JGVEwxMjgKKyNkZWZpbmUgUENIX1VBUlRfRkNSX1JGVEwxNAkJUENIX1VBUlRfRkNSX1JGVEwyMjQKKyNkZWZpbmUgUENIX1VBUlRfRkNSX1JGVExfU0hJRlQJCTYKKworI2RlZmluZSBQQ0hfVUFSVF9MQ1JfV0xTCTB4MDAwMDAwMDMKKyNkZWZpbmUgUENIX1VBUlRfTENSX1NUQgkweDAwMDAwMDA0CisjZGVmaW5lIFBDSF9VQVJUX0xDUl9QRU4JMHgwMDAwMDAwOAorI2RlZmluZSBQQ0hfVUFSVF9MQ1JfRVBTCTB4MDAwMDAwMTAKKyNkZWZpbmUgUENIX1VBUlRfTENSX1NQCQkweDAwMDAwMDIwCisjZGVmaW5lIFBDSF9VQVJUX0xDUl9TQgkJMHgwMDAwMDA0MAorI2RlZmluZSBQQ0hfVUFSVF9MQ1JfRExBQgkweDAwMDAwMDgwCisjZGVmaW5lIFBDSF9VQVJUX0xDUl9OUAkJMHgwMDAwMDAwMAorI2RlZmluZSBQQ0hfVUFSVF9MQ1JfT1AJCVBDSF9VQVJUX0xDUl9QRU4KKyNkZWZpbmUgUENIX1VBUlRfTENSX0VQCQkoUENIX1VBUlRfTENSX1BFTiB8IFBDSF9VQVJUX0xDUl9FUFMpCisjZGVmaW5lIFBDSF9VQVJUX0xDUl8xUAkJKFBDSF9VQVJUX0xDUl9QRU4gfCBQQ0hfVUFSVF9MQ1JfU1ApCisjZGVmaW5lIFBDSF9VQVJUX0xDUl8wUAkJKFBDSF9VQVJUX0xDUl9QRU4gfCBQQ0hfVUFSVF9MQ1JfRVBTIHxcCisJCQkJUENIX1VBUlRfTENSX1NQKQorCisjZGVmaW5lIFBDSF9VQVJUX0xDUl81QklUCTB4MDAwMDAwMDAKKyNkZWZpbmUgUENIX1VBUlRfTENSXzZCSVQJMHgwMDAwMDAwMQorI2RlZmluZSBQQ0hfVUFSVF9MQ1JfN0JJVAkweDAwMDAwMDAyCisjZGVmaW5lIFBDSF9VQVJUX0xDUl84QklUCTB4MDAwMDAwMDMKKworI2RlZmluZSBQQ0hfVUFSVF9NQ1JfRFRSCTB4MDAwMDAwMDEKKyNkZWZpbmUgUENIX1VBUlRfTUNSX1JUUwkweDAwMDAwMDAyCisjZGVmaW5lIFBDSF9VQVJUX01DUl9PVVQJMHgwMDAwMDAwQworI2RlZmluZSBQQ0hfVUFSVF9NQ1JfTE9PUAkweDAwMDAwMDEwCisjZGVmaW5lIFBDSF9VQVJUX01DUl9BRkUJMHgwMDAwMDAyMAorCisjZGVmaW5lIFBDSF9VQVJUX0xTUl9EUgkJMHgwMDAwMDAwMQorI2RlZmluZSBQQ0hfVUFSVF9MU1JfRVJSCSgxPDw3KQorCisjZGVmaW5lIFBDSF9VQVJUX01TUl9EQ1RTCTB4MDAwMDAwMDEKKyNkZWZpbmUgUENIX1VBUlRfTVNSX0REU1IJMHgwMDAwMDAwMgorI2RlZmluZSBQQ0hfVUFSVF9NU1JfVEVSSQkweDAwMDAwMDA0CisjZGVmaW5lIFBDSF9VQVJUX01TUl9ERENECTB4MDAwMDAwMDgKKyNkZWZpbmUgUENIX1VBUlRfTVNSX0NUUwkweDAwMDAwMDEwCisjZGVmaW5lIFBDSF9VQVJUX01TUl9EU1IJMHgwMDAwMDAyMAorI2RlZmluZSBQQ0hfVUFSVF9NU1JfUkkJCTB4MDAwMDAwNDAKKyNkZWZpbmUgUENIX1VBUlRfTVNSX0RDRAkweDAwMDAwMDgwCisjZGVmaW5lIFBDSF9VQVJUX01TUl9ERUxUQQkoUENIX1VBUlRfTVNSX0RDVFMgfCBQQ0hfVUFSVF9NU1JfRERTUiB8XAorCQkJCVBDSF9VQVJUX01TUl9URVJJIHwgUENIX1VBUlRfTVNSX0REQ0QpCisKKyNkZWZpbmUgUENIX1VBUlRfRExMCQkweDAwCisjZGVmaW5lIFBDSF9VQVJUX0RMTQkJMHgwMQorCisjZGVmaW5lIERJVl9ST1VORChhLCBiKQkoKChhKSArICgoYikvMikpIC8gKGIpKQorCisjZGVmaW5lIFBDSF9VQVJUX0lJRF9STFMJKFBDSF9VQVJUX0lJUl9SRUkpCisjZGVmaW5lIFBDSF9VQVJUX0lJRF9SRFIJKFBDSF9VQVJUX0lJUl9SUkkpCisjZGVmaW5lIFBDSF9VQVJUX0lJRF9SRFJfVE8JKFBDSF9VQVJUX0lJUl9SUkkgfCBQQ0hfVUFSVF9JSVJfVE9JKQorI2RlZmluZSBQQ0hfVUFSVF9JSURfVEhSRQkoUENIX1VBUlRfSUlSX1RSSSkKKyNkZWZpbmUgUENIX1VBUlRfSUlEX01TCQkoUENIX1VBUlRfSUlSX01TSSkKKworI2RlZmluZSBQQ0hfVUFSVF9IQUxfUEFSSVRZX05PTkUJKFBDSF9VQVJUX0xDUl9OUCkKKyNkZWZpbmUgUENIX1VBUlRfSEFMX1BBUklUWV9PREQJCShQQ0hfVUFSVF9MQ1JfT1ApCisjZGVmaW5lIFBDSF9VQVJUX0hBTF9QQVJJVFlfRVZFTgkoUENIX1VBUlRfTENSX0VQKQorI2RlZmluZSBQQ0hfVUFSVF9IQUxfUEFSSVRZX0ZJWDEJKFBDSF9VQVJUX0xDUl8xUCkKKyNkZWZpbmUgUENIX1VBUlRfSEFMX1BBUklUWV9GSVgwCShQQ0hfVUFSVF9MQ1JfMFApCisjZGVmaW5lIFBDSF9VQVJUX0hBTF81QklUCQkoUENIX1VBUlRfTENSXzVCSVQpCisjZGVmaW5lIFBDSF9VQVJUX0hBTF82QklUCQkoUENIX1VBUlRfTENSXzZCSVQpCisjZGVmaW5lIFBDSF9VQVJUX0hBTF83QklUCQkoUENIX1VBUlRfTENSXzdCSVQpCisjZGVmaW5lIFBDSF9VQVJUX0hBTF84QklUCQkoUENIX1VBUlRfTENSXzhCSVQpCisjZGVmaW5lIFBDSF9VQVJUX0hBTF9TVEIxCQkwCisjZGVmaW5lIFBDSF9VQVJUX0hBTF9TVEIyCQkoUENIX1VBUlRfTENSX1NUQikKKworI2RlZmluZSBQQ0hfVUFSVF9IQUxfQ0xSX1RYX0ZJRk8JKFBDSF9VQVJUX0ZDUl9URlIpCisjZGVmaW5lIFBDSF9VQVJUX0hBTF9DTFJfUlhfRklGTwkoUENIX1VBUlRfRkNSX1JGUikKKyNkZWZpbmUgUENIX1VBUlRfSEFMX0NMUl9BTExfRklGTwkoUENIX1VBUlRfSEFMX0NMUl9UWF9GSUZPIHwgXAorCQkJCQlQQ0hfVUFSVF9IQUxfQ0xSX1JYX0ZJRk8pCisKKyNkZWZpbmUgUENIX1VBUlRfSEFMX0RNQV9NT0RFMAkJMAorI2RlZmluZSBQQ0hfVUFSVF9IQUxfRklGT19ESVMJCTAKKyNkZWZpbmUgUENIX1VBUlRfSEFMX0ZJRk8xNgkJKFBDSF9VQVJUX0ZDUl9GSUZPRSkKKyNkZWZpbmUgUENIX1VBUlRfSEFMX0ZJRk8yNTYJCShQQ0hfVUFSVF9GQ1JfRklGT0UgfCBcCisJCQkJCVBDSF9VQVJUX0ZDUl9GSUZPMjU2KQorI2RlZmluZSBQQ0hfVUFSVF9IQUxfRklGTzY0CQkoUENIX1VBUlRfSEFMX0ZJRk8yNTYpCisjZGVmaW5lIFBDSF9VQVJUX0hBTF9UUklHR0VSMQkJKFBDSF9VQVJUX0ZDUl9SRlRMMSkKKyNkZWZpbmUgUENIX1VBUlRfSEFMX1RSSUdHRVI2NAkJKFBDSF9VQVJUX0ZDUl9SRlRMNjQpCisjZGVmaW5lIFBDSF9VQVJUX0hBTF9UUklHR0VSMTI4CQkoUENIX1VBUlRfRkNSX1JGVEwxMjgpCisjZGVmaW5lIFBDSF9VQVJUX0hBTF9UUklHR0VSMjI0CQkoUENIX1VBUlRfRkNSX1JGVEwyMjQpCisjZGVmaW5lIFBDSF9VQVJUX0hBTF9UUklHR0VSMTYJCShQQ0hfVUFSVF9GQ1JfUkZUTDE2KQorI2RlZmluZSBQQ0hfVUFSVF9IQUxfVFJJR0dFUjMyCQkoUENIX1VBUlRfRkNSX1JGVEwzMikKKyNkZWZpbmUgUENIX1VBUlRfSEFMX1RSSUdHRVI1NgkJKFBDSF9VQVJUX0ZDUl9SRlRMNTYpCisjZGVmaW5lIFBDSF9VQVJUX0hBTF9UUklHR0VSNAkJKFBDSF9VQVJUX0ZDUl9SRlRMNCkKKyNkZWZpbmUgUENIX1VBUlRfSEFMX1RSSUdHRVI4CQkoUENIX1VBUlRfRkNSX1JGVEw4KQorI2RlZmluZSBQQ0hfVUFSVF9IQUxfVFJJR0dFUjE0CQkoUENIX1VBUlRfRkNSX1JGVEwxNCkKKyNkZWZpbmUgUENIX1VBUlRfSEFMX1RSSUdHRVJfTAkJKFBDSF9VQVJUX0ZDUl9SRlRMNjQpCisjZGVmaW5lIFBDSF9VQVJUX0hBTF9UUklHR0VSX00JCShQQ0hfVUFSVF9GQ1JfUkZUTDEyOCkKKyNkZWZpbmUgUENIX1VBUlRfSEFMX1RSSUdHRVJfSAkJKFBDSF9VQVJUX0ZDUl9SRlRMMjI0KQorCisjZGVmaW5lIFBDSF9VQVJUX0hBTF9SWF9JTlQJCShQQ0hfVUFSVF9JRVJfRVJCRkkpCisjZGVmaW5lIFBDSF9VQVJUX0hBTF9UWF9JTlQJCShQQ0hfVUFSVF9JRVJfRVRCRUkpCisjZGVmaW5lIFBDSF9VQVJUX0hBTF9SWF9FUlJfSU5UCQkoUENIX1VBUlRfSUVSX0VMU0kpCisjZGVmaW5lIFBDSF9VQVJUX0hBTF9NU19JTlQJCShQQ0hfVUFSVF9JRVJfRURTU0kpCisjZGVmaW5lIFBDSF9VQVJUX0hBTF9BTExfSU5UCQkoUENIX1VBUlRfSUVSX01BU0spCisKKyNkZWZpbmUgUENIX1VBUlRfSEFMX0RUUgkJKFBDSF9VQVJUX01DUl9EVFIpCisjZGVmaW5lIFBDSF9VQVJUX0hBTF9SVFMJCShQQ0hfVUFSVF9NQ1JfUlRTKQorI2RlZmluZSBQQ0hfVUFSVF9IQUxfT1VUCQkoUENIX1VBUlRfTUNSX09VVCkKKyNkZWZpbmUgUENIX1VBUlRfSEFMX0xPT1AJCShQQ0hfVUFSVF9NQ1JfTE9PUCkKKyNkZWZpbmUgUENIX1VBUlRfSEFMX0FGRQkJKFBDSF9VQVJUX01DUl9BRkUpCisKK3N0cnVjdCBwY2hfdWFydF9idWZmZXIgeworCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKKwlpbnQgc2l6ZTsKK307CisKK3N0cnVjdCBlZzIwdF9wb3J0IHsKKwlzdHJ1Y3QgdWFydF9wb3J0IHBvcnQ7CisJaW50IHBvcnRfdHlwZTsKKwl2b2lkIF9faW9tZW0gKm1lbWJhc2U7CisJcmVzb3VyY2Vfc2l6ZV90IG1hcGJhc2U7CisJdW5zaWduZWQgaW50IGlvYmFzZTsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKKwlpbnQgZmlmb19zaXplOworCWludCBiYXNlX2JhdWQ7CisJaW50IHN0YXJ0X3R4OworCWludCBzdGFydF9yeDsKKwlpbnQgdHhfZW1wdHk7CisJaW50IGludF9kaXNfZmxhZzsKKwlpbnQgdHJpZ2dlcjsKKwlpbnQgdHJpZ2dlcl9sZXZlbDsKKwlzdHJ1Y3QgcGNoX3VhcnRfYnVmZmVyIHJ4YnVmOworCXVuc2lnbmVkIGludCBkbXNyOworCXVuc2lnbmVkIGludCBmY3I7CisJdW5zaWduZWQgaW50IHVzZV9kbWE7CisJdW5zaWduZWQgaW50IHVzZV9kbWFfZmxhZzsKKwlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IJKmRlc2NfdHg7CisJc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yCSpkZXNjX3J4OworCXN0cnVjdCBwY2hfZG1hX3NsYXZlCQlwYXJhbV90eDsKKwlzdHJ1Y3QgcGNoX2RtYV9zbGF2ZQkJcGFyYW1fcng7CisJc3RydWN0IGRtYV9jaGFuCQkJKmNoYW5fdHg7CisJc3RydWN0IGRtYV9jaGFuCQkJKmNoYW5fcng7CisJc3RydWN0IHNjYXR0ZXJsaXN0CQlzZ190eDsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QJCXNnX3J4OworCWludAkJCQl0eF9kbWFfdXNlOworCXZvaWQJCQkJKnJ4X2J1Zl92aXJ0OworCWRtYV9hZGRyX3QJCQlyeF9idWZfZG1hOworfTsKKworc3RhdGljIHVuc2lnbmVkIGludCBkZWZhdWx0X2JhdWQgPSA5NjAwOworc3RhdGljIGNvbnN0IGludCB0cmlnZ2VyX2xldmVsXzI1Nls0XSA9IHsgMSwgNjQsIDEyOCwgMjI0IH07CitzdGF0aWMgY29uc3QgaW50IHRyaWdnZXJfbGV2ZWxfNjRbNF0gPSB7IDEsIDE2LCAzMiwgNTYgfTsKK3N0YXRpYyBjb25zdCBpbnQgdHJpZ2dlcl9sZXZlbF8xNls0XSA9IHsgMSwgNCwgOCwgMTQgfTsKK3N0YXRpYyBjb25zdCBpbnQgdHJpZ2dlcl9sZXZlbF8xWzRdID0geyAxLCAxLCAxLCAxIH07CisKK3N0YXRpYyB2b2lkIHBjaF91YXJ0X2hhbF9yZXF1ZXN0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgZmlmb3NpemUsCisJCQkJIGludCBiYXNlX2JhdWQpCit7CisJc3RydWN0IGVnMjB0X3BvcnQgKnByaXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisKKwlwcml2LT50cmlnZ2VyX2xldmVsID0gMTsKKwlwcml2LT5mY3IgPSAwOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGdldF9tc3Ioc3RydWN0IGVnMjB0X3BvcnQgKnByaXYsIHZvaWQgX19pb21lbSAqYmFzZSkKK3sKKwl1bnNpZ25lZCBpbnQgbXNyID0gaW9yZWFkOChiYXNlICsgVUFSVF9NU1IpOworCXByaXYtPmRtc3IgfD0gbXNyICYgUENIX1VBUlRfTVNSX0RFTFRBOworCisJcmV0dXJuIG1zcjsKK30KKworc3RhdGljIHZvaWQgcGNoX3VhcnRfaGFsX2VuYWJsZV9pbnRlcnJ1cHQoc3RydWN0IGVnMjB0X3BvcnQgKnByaXYsCisJCQkJCSAgdW5zaWduZWQgaW50IGZsYWcpCit7CisJdTggaWVyID0gaW9yZWFkOChwcml2LT5tZW1iYXNlICsgVUFSVF9JRVIpOworCWllciB8PSBmbGFnICYgUENIX1VBUlRfSUVSX01BU0s7CisJaW93cml0ZTgoaWVyLCBwcml2LT5tZW1iYXNlICsgVUFSVF9JRVIpOworfQorCitzdGF0aWMgdm9pZCBwY2hfdWFydF9oYWxfZGlzYWJsZV9pbnRlcnJ1cHQoc3RydWN0IGVnMjB0X3BvcnQgKnByaXYsCisJCQkJCSAgIHVuc2lnbmVkIGludCBmbGFnKQoreworCXU4IGllciA9IGlvcmVhZDgocHJpdi0+bWVtYmFzZSArIFVBUlRfSUVSKTsKKwlpZXIgJj0gfihmbGFnICYgUENIX1VBUlRfSUVSX01BU0spOworCWlvd3JpdGU4KGllciwgcHJpdi0+bWVtYmFzZSArIFVBUlRfSUVSKTsKK30KKworc3RhdGljIGludCBwY2hfdWFydF9oYWxfc2V0X2xpbmUoc3RydWN0IGVnMjB0X3BvcnQgKnByaXYsIGludCBiYXVkLAorCQkJCSB1bnNpZ25lZCBpbnQgcGFyaXR5LCB1bnNpZ25lZCBpbnQgYml0cywKKwkJCQkgdW5zaWduZWQgaW50IHN0YikKK3sKKwl1bnNpZ25lZCBpbnQgZGxsLCBkbG0sIGxjcjsKKwlpbnQgZGl2OworCisJZGl2ID0gRElWX1JPVU5EKHByaXYtPmJhc2VfYmF1ZCAvIDE2LCBiYXVkKTsKKwlpZiAoZGl2IDwgMCB8fCBVU0hSVF9NQVggPD0gZGl2KSB7CisJCXByX2VycigiSW52YWxpZCBCYXVkKGRpdj0weCV4KVxuIiwgZGl2KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZGxsID0gKHVuc2lnbmVkIGludClkaXYgJiAweDAwRkZVOworCWRsbSA9ICgodW5zaWduZWQgaW50KWRpdiA+PiA4KSAmIDB4MDBGRlU7CisKKwlpZiAocGFyaXR5ICYgfihQQ0hfVUFSVF9MQ1JfUEVOIHwgUENIX1VBUlRfTENSX0VQUyB8IFBDSF9VQVJUX0xDUl9TUCkpIHsKKwkJcHJfZXJyKCJJbnZhbGlkIHBhcml0eSgweCV4KVxuIiwgcGFyaXR5KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGJpdHMgJiB+UENIX1VBUlRfTENSX1dMUykgeworCQlwcl9lcnIoIkludmFsaWQgYml0cygweCV4KVxuIiwgYml0cyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChzdGIgJiB+UENIX1VBUlRfTENSX1NUQikgeworCQlwcl9lcnIoIkludmFsaWQgU1RCKDB4JXgpXG4iLCBzdGIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlsY3IgPSBwYXJpdHk7CisJbGNyIHw9IGJpdHM7CisJbGNyIHw9IHN0YjsKKworCXByX2RlYnVnKCIlczpiYXVkID0gJWQsIGRpdiA9ICUwNHgsIGxjciA9ICUwMnggKCVsdSlcbiIsCisJCSBfX2Z1bmNfXywgYmF1ZCwgZGl2LCBsY3IsIGppZmZpZXMpOworCWlvd3JpdGU4KFBDSF9VQVJUX0xDUl9ETEFCLCBwcml2LT5tZW1iYXNlICsgVUFSVF9MQ1IpOworCWlvd3JpdGU4KGRsbCwgcHJpdi0+bWVtYmFzZSArIFBDSF9VQVJUX0RMTCk7CisJaW93cml0ZTgoZGxtLCBwcml2LT5tZW1iYXNlICsgUENIX1VBUlRfRExNKTsKKwlpb3dyaXRlOChsY3IsIHByaXYtPm1lbWJhc2UgKyBVQVJUX0xDUik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwY2hfdWFydF9oYWxfZmlmb19yZXNldChzdHJ1Y3QgZWcyMHRfcG9ydCAqcHJpdiwKKwkJCQkgICAgdW5zaWduZWQgaW50IGZsYWcpCit7CisJaWYgKGZsYWcgJiB+KFBDSF9VQVJUX0ZDUl9URlIgfCBQQ0hfVUFSVF9GQ1JfUkZSKSkgeworCQlwcl9lcnIoIiVzOkludmFsaWQgZmxhZygweCV4KVxuIiwgX19mdW5jX18sIGZsYWcpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpb3dyaXRlOChQQ0hfVUFSVF9GQ1JfRklGT0UgfCBwcml2LT5mY3IsIHByaXYtPm1lbWJhc2UgKyBVQVJUX0ZDUik7CisJaW93cml0ZTgoUENIX1VBUlRfRkNSX0ZJRk9FIHwgcHJpdi0+ZmNyIHwgZmxhZywKKwkJIHByaXYtPm1lbWJhc2UgKyBVQVJUX0ZDUik7CisJaW93cml0ZTgocHJpdi0+ZmNyLCBwcml2LT5tZW1iYXNlICsgVUFSVF9GQ1IpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGNoX3VhcnRfaGFsX3NldF9maWZvKHN0cnVjdCBlZzIwdF9wb3J0ICpwcml2LAorCQkJCSB1bnNpZ25lZCBpbnQgZG1hbW9kZSwKKwkJCQkgdW5zaWduZWQgaW50IGZpZm9fc2l6ZSwgdW5zaWduZWQgaW50IHRyaWdnZXIpCit7CisJdTggZmNyOworCisJaWYgKGRtYW1vZGUgJiB+UENIX1VBUlRfRkNSX0RNUykgeworCQlwcl9lcnIoIiVzOkludmFsaWQgRE1BIE1vZGUoMHgleClcbiIsIF9fZnVuY19fLCBkbWFtb2RlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGZpZm9fc2l6ZSAmIH4oUENIX1VBUlRfRkNSX0ZJRk9FIHwgUENIX1VBUlRfRkNSX0ZJRk8yNTYpKSB7CisJCXByX2VycigiJXM6SW52YWxpZCBGSUZPIFNJWkUoMHgleClcbiIsIF9fZnVuY19fLCBmaWZvX3NpemUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAodHJpZ2dlciAmIH5QQ0hfVUFSVF9GQ1JfUkZUTCkgeworCQlwcl9lcnIoIiVzOkludmFsaWQgVFJJR0dFUigweCV4KVxuIiwgX19mdW5jX18sIHRyaWdnZXIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzd2l0Y2ggKHByaXYtPmZpZm9fc2l6ZSkgeworCWNhc2UgMjU2OgorCQlwcml2LT50cmlnZ2VyX2xldmVsID0KKwkJICAgIHRyaWdnZXJfbGV2ZWxfMjU2W3RyaWdnZXIgPj4gUENIX1VBUlRfRkNSX1JGVExfU0hJRlRdOworCQlicmVhazsKKwljYXNlIDY0OgorCQlwcml2LT50cmlnZ2VyX2xldmVsID0KKwkJICAgIHRyaWdnZXJfbGV2ZWxfNjRbdHJpZ2dlciA+PiBQQ0hfVUFSVF9GQ1JfUkZUTF9TSElGVF07CisJCWJyZWFrOworCWNhc2UgMTY6CisJCXByaXYtPnRyaWdnZXJfbGV2ZWwgPQorCQkgICAgdHJpZ2dlcl9sZXZlbF8xNlt0cmlnZ2VyID4+IFBDSF9VQVJUX0ZDUl9SRlRMX1NISUZUXTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpdi0+dHJpZ2dlcl9sZXZlbCA9CisJCSAgICB0cmlnZ2VyX2xldmVsXzFbdHJpZ2dlciA+PiBQQ0hfVUFSVF9GQ1JfUkZUTF9TSElGVF07CisJCWJyZWFrOworCX0KKwlmY3IgPQorCSAgICBkbWFtb2RlIHwgZmlmb19zaXplIHwgdHJpZ2dlciB8IFBDSF9VQVJUX0ZDUl9SRlIgfCBQQ0hfVUFSVF9GQ1JfVEZSOworCWlvd3JpdGU4KFBDSF9VQVJUX0ZDUl9GSUZPRSwgcHJpdi0+bWVtYmFzZSArIFVBUlRfRkNSKTsKKwlpb3dyaXRlOChQQ0hfVUFSVF9GQ1JfRklGT0UgfCBQQ0hfVUFSVF9GQ1JfUkZSIHwgUENIX1VBUlRfRkNSX1RGUiwKKwkJIHByaXYtPm1lbWJhc2UgKyBVQVJUX0ZDUik7CisJaW93cml0ZTgoZmNyLCBwcml2LT5tZW1iYXNlICsgVUFSVF9GQ1IpOworCXByaXYtPmZjciA9IGZjcjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdTggcGNoX3VhcnRfaGFsX2dldF9tb2RlbShzdHJ1Y3QgZWcyMHRfcG9ydCAqcHJpdikKK3sKKwlwcml2LT5kbXNyID0gMDsKKwlyZXR1cm4gZ2V0X21zcihwcml2LCBwcml2LT5tZW1iYXNlKTsKK30KKworc3RhdGljIGludCBwY2hfdWFydF9oYWxfd3JpdGUoc3RydWN0IGVnMjB0X3BvcnQgKnByaXYsCisJCQkgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCB0eF9zaXplKQoreworCWludCBpOworCXVuc2lnbmVkIGludCB0aHI7CisKKwlmb3IgKGkgPSAwOyBpIDwgdHhfc2l6ZTspIHsKKwkJdGhyID0gYnVmW2krK107CisJCWlvd3JpdGU4KHRociwgcHJpdi0+bWVtYmFzZSArIFBDSF9VQVJUX1RIUik7CisJfQorCXJldHVybiBpOworfQorCitzdGF0aWMgaW50IHBjaF91YXJ0X2hhbF9yZWFkKHN0cnVjdCBlZzIwdF9wb3J0ICpwcml2LCB1bnNpZ25lZCBjaGFyICpidWYsCisJCQkgICAgIGludCByeF9zaXplKQoreworCWludCBpOworCXU4IHJiciwgbHNyOworCisJbHNyID0gaW9yZWFkOChwcml2LT5tZW1iYXNlICsgVUFSVF9MU1IpOworCWZvciAoaSA9IDAsIGxzciA9IGlvcmVhZDgocHJpdi0+bWVtYmFzZSArIFVBUlRfTFNSKTsKKwkgICAgIGkgPCByeF9zaXplICYmIGxzciAmIFVBUlRfTFNSX0RSOworCSAgICAgbHNyID0gaW9yZWFkOChwcml2LT5tZW1iYXNlICsgVUFSVF9MU1IpKSB7CisJCXJiciA9IGlvcmVhZDgocHJpdi0+bWVtYmFzZSArIFBDSF9VQVJUX1JCUik7CisJCWJ1ZltpKytdID0gcmJyOworCX0KKwlyZXR1cm4gaTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBwY2hfdWFydF9oYWxfZ2V0X2lpZChzdHJ1Y3QgZWcyMHRfcG9ydCAqcHJpdikKK3sKKwl1bnNpZ25lZCBpbnQgaWlyOworCWludCByZXQ7CisKKwlpaXIgPSBpb3JlYWQ4KHByaXYtPm1lbWJhc2UgKyBVQVJUX0lJUik7CisJcmV0ID0gKGlpciAmIChQQ0hfVUFSVF9JSVJfSUlEIHwgUENIX1VBUlRfSUlSX1RPSSB8IFBDSF9VQVJUX0lJUl9JUCkpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB1OCBwY2hfdWFydF9oYWxfZ2V0X2xpbmVfc3RhdHVzKHN0cnVjdCBlZzIwdF9wb3J0ICpwcml2KQoreworCXJldHVybiBpb3JlYWQ4KHByaXYtPm1lbWJhc2UgKyBVQVJUX0xTUik7Cit9CisKK3N0YXRpYyB2b2lkIHBjaF91YXJ0X2hhbF9zZXRfYnJlYWsoc3RydWN0IGVnMjB0X3BvcnQgKnByaXYsIGludCBvbikKK3sKKwl1bnNpZ25lZCBpbnQgbGNyOworCisJbGNyID0gaW9yZWFkOChwcml2LT5tZW1iYXNlICsgVUFSVF9MQ1IpOworCWlmIChvbikKKwkJbGNyIHw9IFBDSF9VQVJUX0xDUl9TQjsKKwllbHNlCisJCWxjciAmPSB+UENIX1VBUlRfTENSX1NCOworCisJaW93cml0ZTgobGNyLCBwcml2LT5tZW1iYXNlICsgVUFSVF9MQ1IpOworfQorCitzdGF0aWMgaW50IHB1c2hfcngoc3RydWN0IGVnMjB0X3BvcnQgKnByaXYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKwkJICAgaW50IHNpemUpCit7CisJc3RydWN0IHVhcnRfcG9ydCAqcG9ydDsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OworCisJcG9ydCA9ICZwcml2LT5wb3J0OworCXR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJnBvcnQtPnN0YXRlLT5wb3J0KTsKKwlpZiAoIXR0eSkgeworCQlwcl9kZWJ1ZygiJXM6dHR5IGlzIGJ1c3kgbm93IiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCXR0eV9pbnNlcnRfZmxpcF9zdHJpbmcodHR5LCBidWYsIHNpemUpOworCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CisJdHR5X2tyZWZfcHV0KHR0eSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwb3BfdHhfeChzdHJ1Y3QgZWcyMHRfcG9ydCAqcHJpdiwgdW5zaWduZWQgY2hhciAqYnVmKQoreworCWludCByZXQ7CisJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9ICZwcml2LT5wb3J0OworCisJaWYgKHBvcnQtPnhfY2hhcikgeworCQlwcl9kZWJ1ZygiJXM6WCBjaGFyYWN0ZXIgc2VuZCAlMDJ4ICglbHUpXG4iLCBfX2Z1bmNfXywKKwkJCXBvcnQtPnhfY2hhciwgamlmZmllcyk7CisJCWJ1ZlswXSA9IHBvcnQtPnhfY2hhcjsKKwkJcG9ydC0+eF9jaGFyID0gMDsKKwkJcmV0ID0gMTsKKwl9IGVsc2UgeworCQlyZXQgPSAwOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZG1hX3B1c2hfcngoc3RydWN0IGVnMjB0X3BvcnQgKnByaXYsIGludCBzaXplKQoreworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisJaW50IHJvb207CisJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9ICZwcml2LT5wb3J0OworCisJcG9ydCA9ICZwcml2LT5wb3J0OworCXR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJnBvcnQtPnN0YXRlLT5wb3J0KTsKKwlpZiAoIXR0eSkgeworCQlwcl9kZWJ1ZygiJXM6dHR5IGlzIGJ1c3kgbm93IiwgX19mdW5jX18pOworCQlyZXR1cm4gMDsKKwl9CisKKwlyb29tID0gdHR5X2J1ZmZlcl9yZXF1ZXN0X3Jvb20odHR5LCBzaXplKTsKKworCWlmIChyb29tIDwgc2l6ZSkKKwkJZGV2X3dhcm4ocG9ydC0+ZGV2LCAiUnggb3ZlcnJ1bjogZHJvcHBpbmcgJXUgYnl0ZXNcbiIsCisJCQkgc2l6ZSAtIHJvb20pOworCWlmICghcm9vbSkKKwkJcmV0dXJuIHJvb207CisKKwl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgc2dfdmlydCgmcHJpdi0+c2dfcngpLCBzaXplKTsKKworCXBvcnQtPmljb3VudC5yeCArPSByb29tOworCXR0eV9rcmVmX3B1dCh0dHkpOworCisJcmV0dXJuIHJvb207Cit9CisKK3N0YXRpYyB2b2lkIHBjaF9mcmVlX2RtYShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCBlZzIwdF9wb3J0ICpwcml2OworCXByaXYgPSBjb250YWluZXJfb2YocG9ydCwgc3RydWN0IGVnMjB0X3BvcnQsIHBvcnQpOworCisJaWYgKHByaXYtPmNoYW5fdHgpIHsKKwkJZG1hX3JlbGVhc2VfY2hhbm5lbChwcml2LT5jaGFuX3R4KTsKKwkJcHJpdi0+Y2hhbl90eCA9IE5VTEw7CisJfQorCWlmIChwcml2LT5jaGFuX3J4KSB7CisJCWRtYV9yZWxlYXNlX2NoYW5uZWwocHJpdi0+Y2hhbl9yeCk7CisJCXByaXYtPmNoYW5fcnggPSBOVUxMOworCX0KKwlpZiAoc2dfZG1hX2FkZHJlc3MoJnByaXYtPnNnX3J4KSkKKwkJZG1hX2ZyZWVfY29oZXJlbnQocG9ydC0+ZGV2LCBwb3J0LT5maWZvc2l6ZSwKKwkJCQkgIHNnX3ZpcnQoJnByaXYtPnNnX3J4KSwKKwkJCQkgIHNnX2RtYV9hZGRyZXNzKCZwcml2LT5zZ19yeCkpOworCisJcmV0dXJuOworfQorCitzdGF0aWMgYm9vbCBmaWx0ZXIoc3RydWN0IGRtYV9jaGFuICpjaGFuLCB2b2lkICpzbGF2ZSkKK3sKKwlzdHJ1Y3QgcGNoX2RtYV9zbGF2ZSAqcGFyYW0gPSBzbGF2ZTsKKworCWlmICgoY2hhbi0+Y2hhbl9pZCA9PSBwYXJhbS0+Y2hhbl9pZCkgJiYgKHBhcmFtLT5kbWFfZGV2ID09CisJCQkJCQkgIGNoYW4tPmRldmljZS0+ZGV2KSkgeworCQljaGFuLT5wcml2YXRlID0gcGFyYW07CisJCXJldHVybiB0cnVlOworCX0gZWxzZSB7CisJCXJldHVybiBmYWxzZTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHBjaF9yZXF1ZXN0X2RtYShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCWRtYV9jYXBfbWFza190IG1hc2s7CisJc3RydWN0IGRtYV9jaGFuICpjaGFuOworCXN0cnVjdCBwY2lfZGV2ICpkbWFfZGV2OworCXN0cnVjdCBwY2hfZG1hX3NsYXZlICpwYXJhbTsKKwlzdHJ1Y3QgZWcyMHRfcG9ydCAqcHJpdiA9CisJCQkJY29udGFpbmVyX29mKHBvcnQsIHN0cnVjdCBlZzIwdF9wb3J0LCBwb3J0KTsKKwlkbWFfY2FwX3plcm8obWFzayk7CisJZG1hX2NhcF9zZXQoRE1BX1NMQVZFLCBtYXNrKTsKKworCWRtYV9kZXYgPSBwY2lfZ2V0X2J1c19hbmRfc2xvdCgyLCBQQ0lfREVWRk4oMHhhLCAwKSk7IC8qIEdldCBETUEncyBkZXYKKwkJCQkJCQkJaW5mb3JtYXRpb24gKi8KKwkvKiBTZXQgVHggRE1BICovCisJcGFyYW0gPSAmcHJpdi0+cGFyYW1fdHg7CisJcGFyYW0tPmRtYV9kZXYgPSAmZG1hX2Rldi0+ZGV2OworCXBhcmFtLT5jaGFuX2lkID0gcHJpdi0+cG9ydC5saW5lOworCXBhcmFtLT50eF9yZWcgPSBwb3J0LT5tYXBiYXNlICsgVUFSVF9UWDsKKwljaGFuID0gZG1hX3JlcXVlc3RfY2hhbm5lbChtYXNrLCBmaWx0ZXIsIHBhcmFtKTsKKwlpZiAoIWNoYW4pIHsKKwkJcHJfZXJyKCIlczpkbWFfcmVxdWVzdF9jaGFubmVsIEZBSUxTKFR4KVxuIiwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCXByaXYtPmNoYW5fdHggPSBjaGFuOworCisJLyogU2V0IFJ4IERNQSAqLworCXBhcmFtID0gJnByaXYtPnBhcmFtX3J4OworCXBhcmFtLT5kbWFfZGV2ID0gJmRtYV9kZXYtPmRldjsKKwlwYXJhbS0+Y2hhbl9pZCA9IHByaXYtPnBvcnQubGluZSArIDE7IC8qIFJ4ID0gVHggKyAxICovCisJcGFyYW0tPnJ4X3JlZyA9IHBvcnQtPm1hcGJhc2UgKyBVQVJUX1JYOworCWNoYW4gPSBkbWFfcmVxdWVzdF9jaGFubmVsKG1hc2ssIGZpbHRlciwgcGFyYW0pOworCWlmICghY2hhbikgeworCQlwcl9lcnIoIiVzOmRtYV9yZXF1ZXN0X2NoYW5uZWwgRkFJTFMoUngpXG4iLCBfX2Z1bmNfXyk7CisJCWRtYV9yZWxlYXNlX2NoYW5uZWwocHJpdi0+Y2hhbl90eCk7CisJCXJldHVybjsKKwl9CisKKwkvKiBHZXQgQ29uc2lzdGVudCBtZW1vcnkgZm9yIERNQSAqLworCXByaXYtPnJ4X2J1Zl92aXJ0ID0gZG1hX2FsbG9jX2NvaGVyZW50KHBvcnQtPmRldiwgcG9ydC0+Zmlmb3NpemUsCisJCQkJICAgICZwcml2LT5yeF9idWZfZG1hLCBHRlBfS0VSTkVMKTsKKwlwcml2LT5jaGFuX3J4ID0gY2hhbjsKK30KKworc3RhdGljIHZvaWQgcGNoX2RtYV9yeF9jb21wbGV0ZSh2b2lkICphcmcpCit7CisJc3RydWN0IGVnMjB0X3BvcnQgKnByaXYgPSBhcmc7CisJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9ICZwcml2LT5wb3J0OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZwb3J0LT5zdGF0ZS0+cG9ydCk7CisKKwlpZiAoIXR0eSkgeworCQlwcl9kZWJ1ZygiJXM6dHR5IGlzIGJ1c3kgbm93IiwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCisJaWYgKGRtYV9wdXNoX3J4KHByaXYsIHByaXYtPnRyaWdnZXJfbGV2ZWwpKQorCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOworCisJdHR5X2tyZWZfcHV0KHR0eSk7Cit9CisKK3N0YXRpYyB2b2lkIHBjaF9kbWFfdHhfY29tcGxldGUodm9pZCAqYXJnKQoreworCXN0cnVjdCBlZzIwdF9wb3J0ICpwcml2ID0gYXJnOworCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSAmcHJpdi0+cG9ydDsKKwlzdHJ1Y3QgY2lyY19idWYgKnhtaXQgPSAmcG9ydC0+c3RhdGUtPnhtaXQ7CisKKwl4bWl0LT50YWlsICs9IHNnX2RtYV9sZW4oJnByaXYtPnNnX3R4KTsKKwl4bWl0LT50YWlsICY9IFVBUlRfWE1JVF9TSVpFIC0gMTsKKwlwb3J0LT5pY291bnQudHggKz0gc2dfZG1hX2xlbigmcHJpdi0+c2dfdHgpOworCisJYXN5bmNfdHhfYWNrKHByaXYtPmRlc2NfdHgpOworCXByaXYtPnR4X2RtYV91c2UgPSAwOworfQorCitzdGF0aWMgaW50IHBvcF90eChzdHJ1Y3QgZWcyMHRfcG9ydCAqcHJpdiwgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgc2l6ZSkKK3sKKwlpbnQgY291bnQgPSAwOworCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSAmcHJpdi0+cG9ydDsKKwlzdHJ1Y3QgY2lyY19idWYgKnhtaXQgPSAmcG9ydC0+c3RhdGUtPnhtaXQ7CisKKwlpZiAodWFydF90eF9zdG9wcGVkKHBvcnQpIHx8IHVhcnRfY2lyY19lbXB0eSh4bWl0KSB8fCBjb3VudCA+PSBzaXplKQorCQlnb3RvIHBvcF90eF9lbmQ7CisKKwlkbyB7CisJCWludCBjbnRfdG9fZW5kID0KKwkJICAgIENJUkNfQ05UX1RPX0VORCh4bWl0LT5oZWFkLCB4bWl0LT50YWlsLCBVQVJUX1hNSVRfU0laRSk7CisJCWludCBzeiA9IG1pbihzaXplIC0gY291bnQsIGNudF90b19lbmQpOworCQltZW1jcHkoJmJ1Zltjb3VudF0sICZ4bWl0LT5idWZbeG1pdC0+dGFpbF0sIHN6KTsKKwkJeG1pdC0+dGFpbCA9ICh4bWl0LT50YWlsICsgc3opICYgKFVBUlRfWE1JVF9TSVpFIC0gMSk7CisJCWNvdW50ICs9IHN6OworCX0gd2hpbGUgKCF1YXJ0X2NpcmNfZW1wdHkoeG1pdCkgJiYgY291bnQgPCBzaXplKTsKKworcG9wX3R4X2VuZDoKKwlwcl9kZWJ1ZygiJWQgY2hhcmFjdGVycy4gUmVtYWluZWQgJWQgY2hhcmFjdGVycy4gKCVsdSlcbiIsCisJCSBjb3VudCwgc2l6ZSAtIGNvdW50LCBqaWZmaWVzKTsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIGludCBoYW5kbGVfcnhfdG8oc3RydWN0IGVnMjB0X3BvcnQgKnByaXYpCit7CisJc3RydWN0IHBjaF91YXJ0X2J1ZmZlciAqYnVmOworCWludCByeF9zaXplOworCWludCByZXQ7CisJaWYgKCFwcml2LT5zdGFydF9yeCkgeworCQlwY2hfdWFydF9oYWxfZGlzYWJsZV9pbnRlcnJ1cHQocHJpdiwgUENIX1VBUlRfSEFMX1JYX0lOVCk7CisJCXJldHVybiAwOworCX0KKwlidWYgPSAmcHJpdi0+cnhidWY7CisJZG8geworCQlyeF9zaXplID0gcGNoX3VhcnRfaGFsX3JlYWQocHJpdiwgYnVmLT5idWYsIGJ1Zi0+c2l6ZSk7CisJCXJldCA9IHB1c2hfcngocHJpdiwgYnVmLT5idWYsIHJ4X3NpemUpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIDA7CisJfSB3aGlsZSAocnhfc2l6ZSA9PSBidWYtPnNpemUpOworCisJcmV0dXJuIFBDSF9VQVJUX0hBTkRMRURfUlhfSU5UOworfQorCitzdGF0aWMgaW50IGhhbmRsZV9yeChzdHJ1Y3QgZWcyMHRfcG9ydCAqcHJpdikKK3sKKwlyZXR1cm4gaGFuZGxlX3J4X3RvKHByaXYpOworfQorCitzdGF0aWMgaW50IGRtYV9oYW5kbGVfcngoc3RydWN0IGVnMjB0X3BvcnQgKnByaXYpCit7CisJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9ICZwcml2LT5wb3J0OworCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqZGVzYzsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOworCisJcHJpdiA9IGNvbnRhaW5lcl9vZihwb3J0LCBzdHJ1Y3QgZWcyMHRfcG9ydCwgcG9ydCk7CisJc2cgPSAmcHJpdi0+c2dfcng7CisKKwlzZ19pbml0X3RhYmxlKCZwcml2LT5zZ19yeCwgMSk7IC8qIEluaXRpYWxpemUgU0cgdGFibGUgKi8KKworCXNnX2RtYV9sZW4oc2cpID0gcHJpdi0+Zmlmb19zaXplOworCisJc2dfc2V0X3BhZ2UoJnByaXYtPnNnX3J4LCB2aXJ0X3RvX3BhZ2UocHJpdi0+cnhfYnVmX3ZpcnQpLAorCQkgICAgIHNnX2RtYV9sZW4oc2cpLCAodW5zaWduZWQgbG9uZylwcml2LT5yeF9idWZfdmlydCAmCisJCSAgICAgflBBR0VfTUFTSyk7CisKKwlzZ19kbWFfYWRkcmVzcyhzZykgPSBwcml2LT5yeF9idWZfZG1hOworCisJZGVzYyA9IHByaXYtPmNoYW5fcngtPmRldmljZS0+ZGV2aWNlX3ByZXBfc2xhdmVfc2cocHJpdi0+Y2hhbl9yeCwKKwkJCXNnLCAxLCBETUFfRlJPTV9ERVZJQ0UsCisJCQlETUFfUFJFUF9JTlRFUlJVUFQpOworCWlmICghZGVzYykKKwkJcmV0dXJuIDA7CisKKwlwcml2LT5kZXNjX3J4ID0gZGVzYzsKKwlkZXNjLT5jYWxsYmFjayA9IHBjaF9kbWFfcnhfY29tcGxldGU7CisJZGVzYy0+Y2FsbGJhY2tfcGFyYW0gPSBwcml2OworCWRlc2MtPnR4X3N1Ym1pdChkZXNjKTsKKwlkbWFfYXN5bmNfaXNzdWVfcGVuZGluZyhwcml2LT5jaGFuX3J4KTsKKworCXJldHVybiBQQ0hfVUFSVF9IQU5ETEVEX1JYX0lOVDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBoYW5kbGVfdHgoc3RydWN0IGVnMjB0X3BvcnQgKnByaXYpCit7CisJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9ICZwcml2LT5wb3J0OworCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZwb3J0LT5zdGF0ZS0+eG1pdDsKKwlpbnQgcmV0OworCWludCBmaWZvX3NpemU7CisJaW50IHR4X3NpemU7CisJaW50IHNpemU7CisJaW50IHR4X2VtcHR5OworCisJaWYgKCFwcml2LT5zdGFydF90eCkgeworCQlwcl9pbmZvKCIlczpUeCBpc24ndCBzdGFydGVkLiAoJWx1KVxuIiwgX19mdW5jX18sIGppZmZpZXMpOworCQlwY2hfdWFydF9oYWxfZGlzYWJsZV9pbnRlcnJ1cHQocHJpdiwgUENIX1VBUlRfSEFMX1RYX0lOVCk7CisJCXByaXYtPnR4X2VtcHR5ID0gMTsKKwkJcmV0dXJuIDA7CisJfQorCisJZmlmb19zaXplID0gbWF4KHByaXYtPmZpZm9fc2l6ZSwgMSk7CisJdHhfZW1wdHkgPSAxOworCWlmIChwb3BfdHhfeChwcml2LCB4bWl0LT5idWYpKSB7CisJCXBjaF91YXJ0X2hhbF93cml0ZShwcml2LCB4bWl0LT5idWYsIDEpOworCQlwb3J0LT5pY291bnQudHgrKzsKKwkJdHhfZW1wdHkgPSAwOworCQlmaWZvX3NpemUtLTsKKwl9CisJc2l6ZSA9IG1pbih4bWl0LT5oZWFkIC0geG1pdC0+dGFpbCwgZmlmb19zaXplKTsKKwl0eF9zaXplID0gcG9wX3R4KHByaXYsIHhtaXQtPmJ1Ziwgc2l6ZSk7CisJaWYgKHR4X3NpemUgPiAwKSB7CisJCXJldCA9IHBjaF91YXJ0X2hhbF93cml0ZShwcml2LCB4bWl0LT5idWYsIHR4X3NpemUpOworCQlwb3J0LT5pY291bnQudHggKz0gcmV0OworCQl0eF9lbXB0eSA9IDA7CisJfQorCisJcHJpdi0+dHhfZW1wdHkgPSB0eF9lbXB0eTsKKworCWlmICh0eF9lbXB0eSkKKwkJcGNoX3VhcnRfaGFsX2Rpc2FibGVfaW50ZXJydXB0KHByaXYsIFBDSF9VQVJUX0hBTF9UWF9JTlQpOworCisJcmV0dXJuIFBDSF9VQVJUX0hBTkRMRURfVFhfSU5UOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGRtYV9oYW5kbGVfdHgoc3RydWN0IGVnMjB0X3BvcnQgKnByaXYpCit7CisJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9ICZwcml2LT5wb3J0OworCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZwb3J0LT5zdGF0ZS0+eG1pdDsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnID0gJnByaXYtPnNnX3R4OworCWludCBuZW50OworCWludCBmaWZvX3NpemU7CisJaW50IHR4X2VtcHR5OworCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqZGVzYzsKKworCWlmICghcHJpdi0+c3RhcnRfdHgpIHsKKwkJcHJfaW5mbygiJXM6VHggaXNuJ3Qgc3RhcnRlZC4gKCVsdSlcbiIsIF9fZnVuY19fLCBqaWZmaWVzKTsKKwkJcGNoX3VhcnRfaGFsX2Rpc2FibGVfaW50ZXJydXB0KHByaXYsIFBDSF9VQVJUX0hBTF9UWF9JTlQpOworCQlwcml2LT50eF9lbXB0eSA9IDE7CisJCXJldHVybiAwOworCX0KKworCWZpZm9fc2l6ZSA9IG1heChwcml2LT5maWZvX3NpemUsIDEpOworCXR4X2VtcHR5ID0gMTsKKwlpZiAocG9wX3R4X3gocHJpdiwgeG1pdC0+YnVmKSkgeworCQlwY2hfdWFydF9oYWxfd3JpdGUocHJpdiwgeG1pdC0+YnVmLCAxKTsKKwkJcG9ydC0+aWNvdW50LnR4Kys7CisJCXR4X2VtcHR5ID0gMDsKKwkJZmlmb19zaXplLS07CisJfQorCisJcGNoX3VhcnRfaGFsX2Rpc2FibGVfaW50ZXJydXB0KHByaXYsIFBDSF9VQVJUX0hBTF9UWF9JTlQpOworCisJcHJpdi0+dHhfZG1hX3VzZSA9IDE7CisKKwlzZ19pbml0X3RhYmxlKCZwcml2LT5zZ190eCwgMSk7IC8qIEluaXRpYWxpemUgU0cgdGFibGUgKi8KKworCXNnX3NldF9wYWdlKCZwcml2LT5zZ190eCwgdmlydF90b19wYWdlKHhtaXQtPmJ1ZiksCisJCSAgICBVQVJUX1hNSVRfU0laRSwgKGludCl4bWl0LT5idWYgJiB+UEFHRV9NQVNLKTsKKworCW5lbnQgPSBkbWFfbWFwX3NnKHBvcnQtPmRldiwgJnByaXYtPnNnX3R4LCAxLCBETUFfVE9fREVWSUNFKTsKKwlpZiAoIW5lbnQpIHsKKwkJcHJfZXJyKCIlczpkbWFfbWFwX3NnIEZhaWxlZFxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gMDsKKwl9CisKKwlzZy0+b2Zmc2V0ID0geG1pdC0+dGFpbCAmIChVQVJUX1hNSVRfU0laRSAtIDEpOworCXNnX2RtYV9hZGRyZXNzKHNnKSA9IChzZ19kbWFfYWRkcmVzcyhzZykgJiB+KFVBUlRfWE1JVF9TSVpFIC0gMSkpICsKKwkJCSAgICAgIHNnLT5vZmZzZXQ7CisJc2dfZG1hX2xlbihzZykgPSBtaW4oKGludClDSVJDX0NOVCh4bWl0LT5oZWFkLCB4bWl0LT50YWlsLAorCQkJICAgICBVQVJUX1hNSVRfU0laRSksIENJUkNfQ05UX1RPX0VORCh4bWl0LT5oZWFkLAorCQkJICAgICB4bWl0LT50YWlsLCBVQVJUX1hNSVRfU0laRSkpOworCisJZGVzYyA9IHByaXYtPmNoYW5fdHgtPmRldmljZS0+ZGV2aWNlX3ByZXBfc2xhdmVfc2cocHJpdi0+Y2hhbl90eCwKKwkJc2csIG5lbnQsIERNQV9UT19ERVZJQ0UsIERNQV9QUkVQX0lOVEVSUlVQVCB8IERNQV9DVFJMX0FDSyk7CisJaWYgKCFkZXNjKSB7CisJCXByX2VycigiJXM6ZGV2aWNlX3ByZXBfc2xhdmVfc2cgRmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAwOworCX0KKworCWRtYV9zeW5jX3NnX2Zvcl9kZXZpY2UocG9ydC0+ZGV2LCBzZywgMSwgRE1BX1RPX0RFVklDRSk7CisKKwlwcml2LT5kZXNjX3R4ID0gZGVzYzsKKwlkZXNjLT5jYWxsYmFjayA9IHBjaF9kbWFfdHhfY29tcGxldGU7CisJZGVzYy0+Y2FsbGJhY2tfcGFyYW0gPSBwcml2OworCisJZGVzYy0+dHhfc3VibWl0KGRlc2MpOworCisJZG1hX2FzeW5jX2lzc3VlX3BlbmRpbmcocHJpdi0+Y2hhbl90eCk7CisKKwlyZXR1cm4gUENIX1VBUlRfSEFORExFRF9UWF9JTlQ7Cit9CisKK3N0YXRpYyB2b2lkIHBjaF91YXJ0X2Vycl9pcihzdHJ1Y3QgZWcyMHRfcG9ydCAqcHJpdiwgdW5zaWduZWQgaW50IGxzcikKK3sKKwl1OCBmY3IgPSBpb3JlYWQ4KHByaXYtPm1lbWJhc2UgKyBVQVJUX0ZDUik7CisKKwkvKiBSZXNldCBGSUZPICovCisJZmNyIHw9IFVBUlRfRkNSX0NMRUFSX1JDVlI7CisJaW93cml0ZTgoZmNyLCBwcml2LT5tZW1iYXNlICsgVUFSVF9GQ1IpOworCisJaWYgKGxzciAmIFBDSF9VQVJUX0xTUl9FUlIpCisJCWRldl9lcnIoJnByaXYtPnBkZXYtPmRldiwgIkVycm9yIGRhdGEgaW4gRklGT1xuIik7CisKKwlpZiAobHNyICYgVUFSVF9MU1JfRkUpCisJCWRldl9lcnIoJnByaXYtPnBkZXYtPmRldiwgIkZyYW1pbmcgRXJyb3JcbiIpOworCisJaWYgKGxzciAmIFVBUlRfTFNSX1BFKQorCQlkZXZfZXJyKCZwcml2LT5wZGV2LT5kZXYsICJQYXJpdHkgRXJyb3JcbiIpOworCisJaWYgKGxzciAmIFVBUlRfTFNSX09FKQorCQlkZXZfZXJyKCZwcml2LT5wZGV2LT5kZXYsICJPdmVycnVuIEVycm9yXG4iKTsKK30KKworc3RhdGljIGlycXJldHVybl90IHBjaF91YXJ0X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IGVnMjB0X3BvcnQgKnByaXYgPSBkZXZfaWQ7CisJdW5zaWduZWQgaW50IGhhbmRsZWQ7CisJdTggbHNyOworCWludCByZXQgPSAwOworCXVuc2lnbmVkIGludCBpaWQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5wb3J0LmxvY2ssIGZsYWdzKTsKKwloYW5kbGVkID0gMDsKKwl3aGlsZSAoKGlpZCA9IHBjaF91YXJ0X2hhbF9nZXRfaWlkKHByaXYpKSA+IDEpIHsKKwkJc3dpdGNoIChpaWQpIHsKKwkJY2FzZSBQQ0hfVUFSVF9JSURfUkxTOgkvKiBSZWNlaXZlciBMaW5lIFN0YXR1cyAqLworCQkJbHNyID0gcGNoX3VhcnRfaGFsX2dldF9saW5lX3N0YXR1cyhwcml2KTsKKwkJCWlmIChsc3IgJiAoUENIX1VBUlRfTFNSX0VSUiB8IFVBUlRfTFNSX0ZFIHwKKwkJCQkJCVVBUlRfTFNSX1BFIHwgVUFSVF9MU1JfT0UpKSB7CisJCQkJcGNoX3VhcnRfZXJyX2lyKHByaXYsIGxzcik7CisJCQkJcmV0ID0gUENIX1VBUlRfSEFORExFRF9SWF9FUlJfSU5UOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgUENIX1VBUlRfSUlEX1JEUjoJLyogUmVjZWl2ZWQgRGF0YSBSZWFkeSAqLworCQkJaWYgKHByaXYtPnVzZV9kbWEpCisJCQkJcmV0ID0gZG1hX2hhbmRsZV9yeChwcml2KTsKKwkJCWVsc2UKKwkJCQlyZXQgPSBoYW5kbGVfcngocHJpdik7CisJCQlicmVhazsKKwkJY2FzZSBQQ0hfVUFSVF9JSURfUkRSX1RPOgkvKiBSZWNlaXZlZCBEYXRhIFJlYWR5CisJCQkJCQkgICAoRklGTyBUaW1lb3V0KSAqLworCQkJcmV0ID0gaGFuZGxlX3J4X3RvKHByaXYpOworCQkJYnJlYWs7CisJCWNhc2UgUENIX1VBUlRfSUlEX1RIUkU6CS8qIFRyYW5zbWl0dGVyIEhvbGRpbmcgUmVnaXN0ZXIKKwkJCQkJCSAgIEVtcHR5ICovCisJCQlpZiAocHJpdi0+dXNlX2RtYSkKKwkJCQlyZXQgPSBkbWFfaGFuZGxlX3R4KHByaXYpOworCQkJZWxzZQorCQkJCXJldCA9IGhhbmRsZV90eChwcml2KTsKKwkJCWJyZWFrOworCQljYXNlIFBDSF9VQVJUX0lJRF9NUzoJLyogTW9kZW0gU3RhdHVzICovCisJCQlyZXQgPSBQQ0hfVUFSVF9IQU5ETEVEX01TX0lOVDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgkvKiBOZXZlciBqdW5wIHRvIHRoaXMgbGFiZWwgKi8KKwkJCXByX2VycigiJXM6aWlkPSVkICglbHUpXG4iLCBfX2Z1bmNfXywgaWlkLCBqaWZmaWVzKTsKKwkJCXJldCA9IC0xOworCQkJYnJlYWs7CisJCX0KKwkJaGFuZGxlZCB8PSAodW5zaWduZWQgaW50KXJldDsKKwl9CisJaWYgKGhhbmRsZWQgPT0gMCAmJiBpaWQgPD0gMSkgeworCQlpZiAocHJpdi0+aW50X2Rpc19mbGFnKQorCQkJcHJpdi0+aW50X2Rpc19mbGFnID0gMDsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5wb3J0LmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gSVJRX1JFVFZBTChoYW5kbGVkKTsKK30KKworLyogVGhpcyBmdW5jdGlvbiB0ZXN0cyB3aGV0aGVyIHRoZSB0cmFuc21pdHRlciBmaWZvIGFuZCBzaGlmdGVyIGZvciB0aGUgcG9ydAorCQkJCQkJZGVzY3JpYmVkIGJ5ICdwb3J0JyBpcyBlbXB0eS4gKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgcGNoX3VhcnRfdHhfZW1wdHkoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgZWcyMHRfcG9ydCAqcHJpdjsKKwlpbnQgcmV0OworCXByaXYgPSBjb250YWluZXJfb2YocG9ydCwgc3RydWN0IGVnMjB0X3BvcnQsIHBvcnQpOworCWlmIChwcml2LT50eF9lbXB0eSkKKwkJcmV0ID0gVElPQ1NFUl9URU1UOworCWVsc2UKKwkJcmV0ID0gMDsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIFJldHVybnMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgbW9kZW0gY29udHJvbCBpbnB1dHMuICovCitzdGF0aWMgdW5zaWduZWQgaW50IHBjaF91YXJ0X2dldF9tY3RybChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCBlZzIwdF9wb3J0ICpwcml2OworCXU4IG1vZGVtOworCXVuc2lnbmVkIGludCByZXQgPSAwOworCisJcHJpdiA9IGNvbnRhaW5lcl9vZihwb3J0LCBzdHJ1Y3QgZWcyMHRfcG9ydCwgcG9ydCk7CisJbW9kZW0gPSBwY2hfdWFydF9oYWxfZ2V0X21vZGVtKHByaXYpOworCisJaWYgKG1vZGVtICYgVUFSVF9NU1JfRENEKQorCQlyZXQgfD0gVElPQ01fQ0FSOworCisJaWYgKG1vZGVtICYgVUFSVF9NU1JfUkkpCisJCXJldCB8PSBUSU9DTV9STkc7CisKKwlpZiAobW9kZW0gJiBVQVJUX01TUl9EU1IpCisJCXJldCB8PSBUSU9DTV9EU1I7CisKKwlpZiAobW9kZW0gJiBVQVJUX01TUl9DVFMpCisJCXJldCB8PSBUSU9DTV9DVFM7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBwY2hfdWFydF9zZXRfbWN0cmwoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgdW5zaWduZWQgaW50IG1jdHJsKQoreworCXUzMiBtY3IgPSAwOworCXVuc2lnbmVkIGludCBkYXQ7CisJc3RydWN0IGVnMjB0X3BvcnQgKnByaXYgPSBjb250YWluZXJfb2YocG9ydCwgc3RydWN0IGVnMjB0X3BvcnQsIHBvcnQpOworCisJaWYgKG1jdHJsICYgVElPQ01fRFRSKQorCQltY3IgfD0gVUFSVF9NQ1JfRFRSOworCWlmIChtY3RybCAmIFRJT0NNX1JUUykKKwkJbWNyIHw9IFVBUlRfTUNSX1JUUzsKKwlpZiAobWN0cmwgJiBUSU9DTV9MT09QKQorCQltY3IgfD0gVUFSVF9NQ1JfTE9PUDsKKworCWlmIChtY3RybCkgeworCQlkYXQgPSBwY2hfdWFydF9nZXRfbWN0cmwocG9ydCk7CisJCWRhdCB8PSBtY3I7CisJCWlvd3JpdGU4KGRhdCwgcHJpdi0+bWVtYmFzZSArIFVBUlRfTUNSKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHBjaF91YXJ0X3N0b3BfdHgoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgZWcyMHRfcG9ydCAqcHJpdjsKKwlwcml2ID0gY29udGFpbmVyX29mKHBvcnQsIHN0cnVjdCBlZzIwdF9wb3J0LCBwb3J0KTsKKwlwcml2LT5zdGFydF90eCA9IDA7CisJcHJpdi0+dHhfZG1hX3VzZSA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIHBjaF91YXJ0X3N0YXJ0X3R4KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJc3RydWN0IGVnMjB0X3BvcnQgKnByaXY7CisKKwlwcml2ID0gY29udGFpbmVyX29mKHBvcnQsIHN0cnVjdCBlZzIwdF9wb3J0LCBwb3J0KTsKKworCWlmIChwcml2LT51c2VfZG1hKQorCQlpZiAocHJpdi0+dHhfZG1hX3VzZSkKKwkJCXJldHVybjsKKworCXByaXYtPnN0YXJ0X3R4ID0gMTsKKwlwY2hfdWFydF9oYWxfZW5hYmxlX2ludGVycnVwdChwcml2LCBQQ0hfVUFSVF9IQUxfVFhfSU5UKTsKK30KKworc3RhdGljIHZvaWQgcGNoX3VhcnRfc3RvcF9yeChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCBlZzIwdF9wb3J0ICpwcml2OworCXByaXYgPSBjb250YWluZXJfb2YocG9ydCwgc3RydWN0IGVnMjB0X3BvcnQsIHBvcnQpOworCXByaXYtPnN0YXJ0X3J4ID0gMDsKKwlwY2hfdWFydF9oYWxfZGlzYWJsZV9pbnRlcnJ1cHQocHJpdiwgUENIX1VBUlRfSEFMX1JYX0lOVCk7CisJcHJpdi0+aW50X2Rpc19mbGFnID0gMTsKK30KKworLyogRW5hYmxlIHRoZSBtb2RlbSBzdGF0dXMgaW50ZXJydXB0cy4gKi8KK3N0YXRpYyB2b2lkIHBjaF91YXJ0X2VuYWJsZV9tcyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCBlZzIwdF9wb3J0ICpwcml2OworCXByaXYgPSBjb250YWluZXJfb2YocG9ydCwgc3RydWN0IGVnMjB0X3BvcnQsIHBvcnQpOworCXBjaF91YXJ0X2hhbF9lbmFibGVfaW50ZXJydXB0KHByaXYsIFBDSF9VQVJUX0hBTF9NU19JTlQpOworfQorCisvKiBDb250cm9sIHRoZSB0cmFuc21pc3Npb24gb2YgYSBicmVhayBzaWduYWwuICovCitzdGF0aWMgdm9pZCBwY2hfdWFydF9icmVha19jdGwoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgaW50IGN0bCkKK3sKKwlzdHJ1Y3QgZWcyMHRfcG9ydCAqcHJpdjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJcHJpdiA9IGNvbnRhaW5lcl9vZihwb3J0LCBzdHJ1Y3QgZWcyMHRfcG9ydCwgcG9ydCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKKwlwY2hfdWFydF9oYWxfc2V0X2JyZWFrKHByaXYsIGN0bCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOworfQorCisvKiBHcmFiIGFueSBpbnRlcnJ1cHQgcmVzb3VyY2VzIGFuZCBpbml0aWFsaXNlIGFueSBsb3cgbGV2ZWwgZHJpdmVyIHN0YXRlLiAqLworc3RhdGljIGludCBwY2hfdWFydF9zdGFydHVwKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJc3RydWN0IGVnMjB0X3BvcnQgKnByaXY7CisJaW50IHJldDsKKwlpbnQgZmlmb19zaXplOworCWludCB0cmlnZ2VyX2xldmVsOworCisJcHJpdiA9IGNvbnRhaW5lcl9vZihwb3J0LCBzdHJ1Y3QgZWcyMHRfcG9ydCwgcG9ydCk7CisJcHJpdi0+dHhfZW1wdHkgPSAxOworCXBvcnQtPnVhcnRjbGsgPSBwcml2LT5iYXNlX2JhdWQ7CisJcGNoX3VhcnRfaGFsX2Rpc2FibGVfaW50ZXJydXB0KHByaXYsIFBDSF9VQVJUX0hBTF9BTExfSU5UKTsKKwlyZXQgPSBwY2hfdWFydF9oYWxfc2V0X2xpbmUocHJpdiwgZGVmYXVsdF9iYXVkLAorCQkJICAgICAgUENIX1VBUlRfSEFMX1BBUklUWV9OT05FLCBQQ0hfVUFSVF9IQUxfOEJJVCwKKwkJCSAgICAgIFBDSF9VQVJUX0hBTF9TVEIxKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJc3dpdGNoIChwcml2LT5maWZvX3NpemUpIHsKKwljYXNlIDI1NjoKKwkJZmlmb19zaXplID0gUENIX1VBUlRfSEFMX0ZJRk8yNTY7CisJCWJyZWFrOworCWNhc2UgNjQ6CisJCWZpZm9fc2l6ZSA9IFBDSF9VQVJUX0hBTF9GSUZPNjQ7CisJCWJyZWFrOworCWNhc2UgMTY6CisJCWZpZm9fc2l6ZSA9IFBDSF9VQVJUX0hBTF9GSUZPMTY7CisJY2FzZSAxOgorCWRlZmF1bHQ6CisJCWZpZm9fc2l6ZSA9IFBDSF9VQVJUX0hBTF9GSUZPX0RJUzsKKwkJYnJlYWs7CisJfQorCisJc3dpdGNoIChwcml2LT50cmlnZ2VyKSB7CisJY2FzZSBQQ0hfVUFSVF9IQUxfVFJJR0dFUjE6CisJCXRyaWdnZXJfbGV2ZWwgPSAxOworCQlicmVhazsKKwljYXNlIFBDSF9VQVJUX0hBTF9UUklHR0VSX0w6CisJCXRyaWdnZXJfbGV2ZWwgPSBwcml2LT5maWZvX3NpemUgLyA0OworCQlicmVhazsKKwljYXNlIFBDSF9VQVJUX0hBTF9UUklHR0VSX006CisJCXRyaWdnZXJfbGV2ZWwgPSBwcml2LT5maWZvX3NpemUgLyAyOworCQlicmVhazsKKwljYXNlIFBDSF9VQVJUX0hBTF9UUklHR0VSX0g6CisJZGVmYXVsdDoKKwkJdHJpZ2dlcl9sZXZlbCA9IHByaXYtPmZpZm9fc2l6ZSAtIChwcml2LT5maWZvX3NpemUgLyA4KTsKKwkJYnJlYWs7CisJfQorCisJcHJpdi0+dHJpZ2dlcl9sZXZlbCA9IHRyaWdnZXJfbGV2ZWw7CisJcmV0ID0gcGNoX3VhcnRfaGFsX3NldF9maWZvKHByaXYsIFBDSF9VQVJUX0hBTF9ETUFfTU9ERTAsCisJCQkJICAgIGZpZm9fc2l6ZSwgcHJpdi0+dHJpZ2dlcik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSByZXF1ZXN0X2lycShwcml2LT5wb3J0LmlycSwgcGNoX3VhcnRfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKKwkJCUtCVUlMRF9NT0ROQU1FLCBwcml2KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChwcml2LT51c2VfZG1hKQorCQlwY2hfcmVxdWVzdF9kbWEocG9ydCk7CisKKwlwcml2LT5zdGFydF9yeCA9IDE7CisJcGNoX3VhcnRfaGFsX2VuYWJsZV9pbnRlcnJ1cHQocHJpdiwgUENIX1VBUlRfSEFMX1JYX0lOVCk7CisJdWFydF91cGRhdGVfdGltZW91dChwb3J0LCBDUzgsIGRlZmF1bHRfYmF1ZCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcGNoX3VhcnRfc2h1dGRvd24oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgZWcyMHRfcG9ydCAqcHJpdjsKKwlpbnQgcmV0OworCisJcHJpdiA9IGNvbnRhaW5lcl9vZihwb3J0LCBzdHJ1Y3QgZWcyMHRfcG9ydCwgcG9ydCk7CisJcGNoX3VhcnRfaGFsX2Rpc2FibGVfaW50ZXJydXB0KHByaXYsIFBDSF9VQVJUX0hBTF9BTExfSU5UKTsKKwlwY2hfdWFydF9oYWxfZmlmb19yZXNldChwcml2LCBQQ0hfVUFSVF9IQUxfQ0xSX0FMTF9GSUZPKTsKKwlyZXQgPSBwY2hfdWFydF9oYWxfc2V0X2ZpZm8ocHJpdiwgUENIX1VBUlRfSEFMX0RNQV9NT0RFMCwKKwkJCSAgICAgIFBDSF9VQVJUX0hBTF9GSUZPX0RJUywgUENIX1VBUlRfSEFMX1RSSUdHRVIxKTsKKwlpZiAocmV0KQorCQlwcl9lcnIoInBjaF91YXJ0X2hhbF9zZXRfZmlmbyBGYWlsZWQocmV0PSVkKVxuIiwgcmV0KTsKKworCWlmIChwcml2LT51c2VfZG1hX2ZsYWcpCisJCXBjaF9mcmVlX2RtYShwb3J0KTsKKworCWZyZWVfaXJxKHByaXYtPnBvcnQuaXJxLCBwcml2KTsKK30KKworLyogQ2hhbmdlIHRoZSBwb3J0IHBhcmFtZXRlcnMsIGluY2x1ZGluZyB3b3JkIGxlbmd0aCwgcGFyaXR5LCBzdG9wCisgKmJpdHMuICBVcGRhdGUgcmVhZF9zdGF0dXNfbWFzayBhbmQgaWdub3JlX3N0YXR1c19tYXNrIHRvIGluZGljYXRlCisgKnRoZSB0eXBlcyBvZiBldmVudHMgd2UgYXJlIGludGVyZXN0ZWQgaW4gcmVjZWl2aW5nLiAgKi8KK3N0YXRpYyB2b2lkIHBjaF91YXJ0X3NldF90ZXJtaW9zKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsCisJCQkJIHN0cnVjdCBrdGVybWlvcyAqdGVybWlvcywgc3RydWN0IGt0ZXJtaW9zICpvbGQpCit7CisJaW50IGJhdWQ7CisJaW50IHJ0bjsKKwl1bnNpZ25lZCBpbnQgcGFyaXR5LCBiaXRzLCBzdGI7CisJc3RydWN0IGVnMjB0X3BvcnQgKnByaXY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXByaXYgPSBjb250YWluZXJfb2YocG9ydCwgc3RydWN0IGVnMjB0X3BvcnQsIHBvcnQpOworCXN3aXRjaCAodGVybWlvcy0+Y19jZmxhZyAmIENTSVpFKSB7CisJY2FzZSBDUzU6CisJCWJpdHMgPSBQQ0hfVUFSVF9IQUxfNUJJVDsKKwkJYnJlYWs7CisJY2FzZSBDUzY6CisJCWJpdHMgPSBQQ0hfVUFSVF9IQUxfNkJJVDsKKwkJYnJlYWs7CisJY2FzZSBDUzc6CisJCWJpdHMgPSBQQ0hfVUFSVF9IQUxfN0JJVDsKKwkJYnJlYWs7CisJZGVmYXVsdDoJCS8qIENTOCAqLworCQliaXRzID0gUENIX1VBUlRfSEFMXzhCSVQ7CisJCWJyZWFrOworCX0KKwlpZiAodGVybWlvcy0+Y19jZmxhZyAmIENTVE9QQikKKwkJc3RiID0gUENIX1VBUlRfSEFMX1NUQjI7CisJZWxzZQorCQlzdGIgPSBQQ0hfVUFSVF9IQUxfU1RCMTsKKworCWlmICh0ZXJtaW9zLT5jX2NmbGFnICYgUEFSRU5CKSB7CisJCWlmICghKHRlcm1pb3MtPmNfY2ZsYWcgJiBQQVJPREQpKQorCQkJcGFyaXR5ID0gUENIX1VBUlRfSEFMX1BBUklUWV9PREQ7CisJCWVsc2UKKwkJCXBhcml0eSA9IFBDSF9VQVJUX0hBTF9QQVJJVFlfRVZFTjsKKworCX0gZWxzZSB7CisJCXBhcml0eSA9IFBDSF9VQVJUX0hBTF9QQVJJVFlfTk9ORTsKKwl9CisJdGVybWlvcy0+Y19jZmxhZyAmPSB+Q01TUEFSOyAvKiBNYXJrL1NwYWNlIHBhcml0eSBpcyBub3Qgc3VwcG9ydGVkICovCisKKwliYXVkID0gdWFydF9nZXRfYmF1ZF9yYXRlKHBvcnQsIHRlcm1pb3MsIG9sZCwgMCwgcG9ydC0+dWFydGNsayAvIDE2KTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5sb2NrLCBmbGFncyk7CisKKwl1YXJ0X3VwZGF0ZV90aW1lb3V0KHBvcnQsIHRlcm1pb3MtPmNfY2ZsYWcsIGJhdWQpOworCXJ0biA9IHBjaF91YXJ0X2hhbF9zZXRfbGluZShwcml2LCBiYXVkLCBwYXJpdHksIGJpdHMsIHN0Yik7CisJaWYgKHJ0bikKKwkJZ290byBvdXQ7CisKKwkvKiBEb24ndCByZXdyaXRlIEIwICovCisJaWYgKHR0eV90ZXJtaW9zX2JhdWRfcmF0ZSh0ZXJtaW9zKSkKKwkJdHR5X3Rlcm1pb3NfZW5jb2RlX2JhdWRfcmF0ZSh0ZXJtaW9zLCBiYXVkLCBiYXVkKTsKKworb3V0OgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnBjaF91YXJ0X3R5cGUoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwlyZXR1cm4gS0JVSUxEX01PRE5BTUU7Cit9CisKK3N0YXRpYyB2b2lkIHBjaF91YXJ0X3JlbGVhc2VfcG9ydChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCBlZzIwdF9wb3J0ICpwcml2OworCisJcHJpdiA9IGNvbnRhaW5lcl9vZihwb3J0LCBzdHJ1Y3QgZWcyMHRfcG9ydCwgcG9ydCk7CisJcGNpX2lvdW5tYXAocHJpdi0+cGRldiwgcHJpdi0+bWVtYmFzZSk7CisJcGNpX3JlbGVhc2VfcmVnaW9ucyhwcml2LT5wZGV2KTsKK30KKworc3RhdGljIGludCBwY2hfdWFydF9yZXF1ZXN0X3BvcnQoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgZWcyMHRfcG9ydCAqcHJpdjsKKwlpbnQgcmV0OworCXZvaWQgX19pb21lbSAqbWVtYmFzZTsKKworCXByaXYgPSBjb250YWluZXJfb2YocG9ydCwgc3RydWN0IGVnMjB0X3BvcnQsIHBvcnQpOworCXJldCA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocHJpdi0+cGRldiwgS0JVSUxEX01PRE5BTUUpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gLUVCVVNZOworCisJbWVtYmFzZSA9IHBjaV9pb21hcChwcml2LT5wZGV2LCAxLCAwKTsKKwlpZiAoIW1lbWJhc2UpIHsKKwkJcGNpX3JlbGVhc2VfcmVnaW9ucyhwcml2LT5wZGV2KTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJcHJpdi0+bWVtYmFzZSA9IHBvcnQtPm1lbWJhc2UgPSBtZW1iYXNlOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHBjaF91YXJ0X2NvbmZpZ19wb3J0KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIGludCB0eXBlKQoreworCXN0cnVjdCBlZzIwdF9wb3J0ICpwcml2OworCisJcHJpdiA9IGNvbnRhaW5lcl9vZihwb3J0LCBzdHJ1Y3QgZWcyMHRfcG9ydCwgcG9ydCk7CisJaWYgKHR5cGUgJiBVQVJUX0NPTkZJR19UWVBFKSB7CisJCXBvcnQtPnR5cGUgPSBwcml2LT5wb3J0X3R5cGU7CisJCXBjaF91YXJ0X3JlcXVlc3RfcG9ydChwb3J0KTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcGNoX3VhcnRfdmVyaWZ5X3BvcnQoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwKKwkJCQlzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCAqc2VyaW5mbykKK3sKKwlzdHJ1Y3QgZWcyMHRfcG9ydCAqcHJpdjsKKworCXByaXYgPSBjb250YWluZXJfb2YocG9ydCwgc3RydWN0IGVnMjB0X3BvcnQsIHBvcnQpOworCWlmIChzZXJpbmZvLT5mbGFncyAmIFVQRl9MT1dfTEFURU5DWSkgeworCQlwcl9pbmZvKCJQQ0ggVUFSVCA6IFVzZSBQSU8gTW9kZSAod2l0aG91dCBETUEpXG4iKTsKKwkJcHJpdi0+dXNlX2RtYSA9IDA7CisJCXNlcmluZm8tPmZsYWdzICY9IH5VUEZfTE9XX0xBVEVOQ1k7CisJfSBlbHNlIHsKKyNpZm5kZWYgQ09ORklHX1BDSF9ETUEKKwkJcHJfZXJyKCIlcyA6IFBDSCBETUEgaXMgbm90IExvYWRlZC5cbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworI2VuZGlmCisJCXByaXYtPnVzZV9kbWEgPSAxOworCQlwcml2LT51c2VfZG1hX2ZsYWcgPSAxOworCQlwcl9pbmZvKCJQQ0ggVUFSVCA6IFVzZSBETUEgTW9kZVxuIik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdWFydF9vcHMgcGNoX3VhcnRfb3BzID0geworCS50eF9lbXB0eSA9IHBjaF91YXJ0X3R4X2VtcHR5LAorCS5zZXRfbWN0cmwgPSBwY2hfdWFydF9zZXRfbWN0cmwsCisJLmdldF9tY3RybCA9IHBjaF91YXJ0X2dldF9tY3RybCwKKwkuc3RvcF90eCA9IHBjaF91YXJ0X3N0b3BfdHgsCisJLnN0YXJ0X3R4ID0gcGNoX3VhcnRfc3RhcnRfdHgsCisJLnN0b3BfcnggPSBwY2hfdWFydF9zdG9wX3J4LAorCS5lbmFibGVfbXMgPSBwY2hfdWFydF9lbmFibGVfbXMsCisJLmJyZWFrX2N0bCA9IHBjaF91YXJ0X2JyZWFrX2N0bCwKKwkuc3RhcnR1cCA9IHBjaF91YXJ0X3N0YXJ0dXAsCisJLnNodXRkb3duID0gcGNoX3VhcnRfc2h1dGRvd24sCisJLnNldF90ZXJtaW9zID0gcGNoX3VhcnRfc2V0X3Rlcm1pb3MsCisvKgkucG0JCT0gcGNoX3VhcnRfcG0sCQlOb3Qgc3VwcG9ydGVkIHlldCAqLworLyoJLnNldF93YWtlCT0gcGNoX3VhcnRfc2V0X3dha2UsCU5vdCBzdXBwb3J0ZWQgeWV0ICovCisJLnR5cGUgPSBwY2hfdWFydF90eXBlLAorCS5yZWxlYXNlX3BvcnQgPSBwY2hfdWFydF9yZWxlYXNlX3BvcnQsCisJLnJlcXVlc3RfcG9ydCA9IHBjaF91YXJ0X3JlcXVlc3RfcG9ydCwKKwkuY29uZmlnX3BvcnQgPSBwY2hfdWFydF9jb25maWdfcG9ydCwKKwkudmVyaWZ5X3BvcnQgPSBwY2hfdWFydF92ZXJpZnlfcG9ydAorfTsKKworc3RhdGljIHN0cnVjdCB1YXJ0X2RyaXZlciBwY2hfdWFydF9kcml2ZXIgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLmRyaXZlcl9uYW1lID0gS0JVSUxEX01PRE5BTUUsCisJLmRldl9uYW1lID0gUENIX1VBUlRfRFJJVkVSX0RFVklDRSwKKwkubWFqb3IgPSAwLAorCS5taW5vciA9IDAsCisJLm5yID0gUENIX1VBUlRfTlIsCit9OworCitzdGF0aWMgc3RydWN0IGVnMjB0X3BvcnQgKnBjaF91YXJ0X2luaXRfcG9ydChzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQkJCWludCBwb3J0X3R5cGUpCit7CisJc3RydWN0IGVnMjB0X3BvcnQgKnByaXY7CisJaW50IHJldDsKKwl1bnNpZ25lZCBpbnQgaW9iYXNlOworCXVuc2lnbmVkIGludCBtYXBiYXNlOworCXVuc2lnbmVkIGNoYXIgKnJ4YnVmOworCWludCBmaWZvc2l6ZSwgYmFzZV9iYXVkOworCXN0YXRpYyBpbnQgbnVtOworCisJcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBlZzIwdF9wb3J0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHByaXYgPT0gTlVMTCkKKwkJZ290byBpbml0X3BvcnRfYWxsb2NfZXJyOworCisJcnhidWYgPSAodW5zaWduZWQgY2hhciAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsKKwlpZiAoIXJ4YnVmKQorCQlnb3RvIGluaXRfcG9ydF9mcmVlX3R4YnVmOworCisJc3dpdGNoIChwb3J0X3R5cGUpIHsKKwljYXNlIFBPUlRfVU5LTk9XTjoKKwkJZmlmb3NpemUgPSAyNTY7IC8qIFVBUlQwICovCisJCWJhc2VfYmF1ZCA9IDE4NDMyMDA7IC8qIDEuODQzMk1IeiAqLworCQlicmVhazsKKwljYXNlIFBPUlRfODI1MDoKKwkJZmlmb3NpemUgPSA2NDsgLyogVUFSVDF+MyAqLworCQliYXNlX2JhdWQgPSAxODQzMjAwOyAvKiAxLjg0MzJNSHogKi8KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiSW52YWxpZCBQb3J0IFR5cGUoPSVkKVxuIiwgcG9ydF90eXBlKTsKKwkJZ290byBpbml0X3BvcnRfaGFsX2ZyZWU7CisJfQorCisJaW9iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOworCW1hcGJhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMSk7CisJcHJpdi0+bWFwYmFzZSA9IG1hcGJhc2U7CisJcHJpdi0+aW9iYXNlID0gaW9iYXNlOworCXByaXYtPnBkZXYgPSBwZGV2OworCXByaXYtPnR4X2VtcHR5ID0gMTsKKwlwcml2LT5yeGJ1Zi5idWYgPSByeGJ1ZjsKKwlwcml2LT5yeGJ1Zi5zaXplID0gUEFHRV9TSVpFOworCisJcHJpdi0+Zmlmb19zaXplID0gZmlmb3NpemU7CisJcHJpdi0+YmFzZV9iYXVkID0gYmFzZV9iYXVkOworCXByaXYtPnBvcnRfdHlwZSA9IFBPUlRfTUFYXzgyNTAgKyBwb3J0X3R5cGUgKyAxOworCXByaXYtPnBvcnQuZGV2ID0gJnBkZXYtPmRldjsKKwlwcml2LT5wb3J0LmlvYmFzZSA9IGlvYmFzZTsKKwlwcml2LT5wb3J0Lm1lbWJhc2UgPSBOVUxMOworCXByaXYtPnBvcnQubWFwYmFzZSA9IG1hcGJhc2U7CisJcHJpdi0+cG9ydC5pcnEgPSBwZGV2LT5pcnE7CisJcHJpdi0+cG9ydC5pb3R5cGUgPSBVUElPX1BPUlQ7CisJcHJpdi0+cG9ydC5vcHMgPSAmcGNoX3VhcnRfb3BzOworCXByaXYtPnBvcnQuZmxhZ3MgPSBVUEZfQk9PVF9BVVRPQ09ORjsKKwlwcml2LT5wb3J0LmZpZm9zaXplID0gZmlmb3NpemU7CisJcHJpdi0+cG9ydC5saW5lID0gbnVtKys7CisJcHJpdi0+dHJpZ2dlciA9IFBDSF9VQVJUX0hBTF9UUklHR0VSX007CisKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgcHJpdik7CisJcGNoX3VhcnRfaGFsX3JlcXVlc3QocGRldiwgZmlmb3NpemUsIGJhc2VfYmF1ZCk7CisJcmV0ID0gdWFydF9hZGRfb25lX3BvcnQoJnBjaF91YXJ0X2RyaXZlciwgJnByaXYtPnBvcnQpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGluaXRfcG9ydF9oYWxfZnJlZTsKKworCXJldHVybiBwcml2OworCitpbml0X3BvcnRfaGFsX2ZyZWU6CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXJ4YnVmKTsKK2luaXRfcG9ydF9mcmVlX3R4YnVmOgorCWtmcmVlKHByaXYpOworaW5pdF9wb3J0X2FsbG9jX2VycjoKKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBwY2hfdWFydF9leGl0X3BvcnQoc3RydWN0IGVnMjB0X3BvcnQgKnByaXYpCit7CisJdWFydF9yZW1vdmVfb25lX3BvcnQoJnBjaF91YXJ0X2RyaXZlciwgJnByaXYtPnBvcnQpOworCXBjaV9zZXRfZHJ2ZGF0YShwcml2LT5wZGV2LCBOVUxMKTsKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcHJpdi0+cnhidWYuYnVmKTsKK30KKworc3RhdGljIHZvaWQgcGNoX3VhcnRfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgZWcyMHRfcG9ydCAqcHJpdjsKKworCXByaXYgPSAoc3RydWN0IGVnMjB0X3BvcnQgKilwY2lfZ2V0X2RydmRhdGEocGRldik7CisJcGNoX3VhcnRfZXhpdF9wb3J0KHByaXYpOworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwlrZnJlZShwcml2KTsKKwlyZXR1cm47Cit9CisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHBjaF91YXJ0X3BjaV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IGVnMjB0X3BvcnQgKnByaXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisKKwl1YXJ0X3N1c3BlbmRfcG9ydCgmcGNoX3VhcnRfZHJpdmVyLCAmcHJpdi0+cG9ydCk7CisKKwlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwY2hfdWFydF9wY2lfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBlZzIwdF9wb3J0ICpwcml2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCWludCByZXQ7CisKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7CisJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CisKKwlyZXQgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJIiVzLXBjaV9lbmFibGVfZGV2aWNlIGZhaWxlZChyZXQ9JWQpICIsIF9fZnVuY19fLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXVhcnRfcmVzdW1lX3BvcnQoJnBjaF91YXJ0X2RyaXZlciwgJnByaXYtPnBvcnQpOworCisJcmV0dXJuIDA7Cit9CisjZWxzZQorI2RlZmluZSBwY2hfdWFydF9wY2lfc3VzcGVuZCBOVUxMCisjZGVmaW5lIHBjaF91YXJ0X3BjaV9yZXN1bWUgTlVMTAorI2VuZGlmCisKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShwY2hfdWFydF9wY2lfaWQpID0geworCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4ODgxMSksCisJIC5kcml2ZXJfZGF0YSA9IFBDSF9VQVJUXzhMSU5FfSwKKwl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDg4MTIpLAorCSAuZHJpdmVyX2RhdGEgPSBQQ0hfVUFSVF8yTElORX0sCisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHg4ODEzKSwKKwkgLmRyaXZlcl9kYXRhID0gUENIX1VBUlRfMkxJTkV9LAorCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4ODgxNCksCisJIC5kcml2ZXJfZGF0YSA9IFBDSF9VQVJUXzJMSU5FfSwKKwl7MCx9LAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgcGNoX3VhcnRfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQkJCQljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgZWcyMHRfcG9ydCAqcHJpdjsKKworCXJldCA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIHByb2JlX2Vycm9yOworCisJcHJpdiA9IHBjaF91YXJ0X2luaXRfcG9ydChwZGV2LCBpZC0+ZHJpdmVyX2RhdGEpOworCWlmICghcHJpdikgeworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gcHJvYmVfZGlzYWJsZV9kZXZpY2U7CisJfQorCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBwcml2KTsKKworCXJldHVybiByZXQ7CisKK3Byb2JlX2Rpc2FibGVfZGV2aWNlOgorCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKK3Byb2JlX2Vycm9yOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBwY2hfdWFydF9wY2lfZHJpdmVyID0geworCS5uYW1lID0gInBjaF91YXJ0IiwKKwkuaWRfdGFibGUgPSBwY2hfdWFydF9wY2lfaWQsCisJLnByb2JlID0gcGNoX3VhcnRfcGNpX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChwY2hfdWFydF9wY2lfcmVtb3ZlKSwKKwkuc3VzcGVuZCA9IHBjaF91YXJ0X3BjaV9zdXNwZW5kLAorCS5yZXN1bWUgPSBwY2hfdWFydF9wY2lfcmVzdW1lLAorfTsKKworc3RhdGljIGludCBfX2luaXQgcGNoX3VhcnRfbW9kdWxlX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJLyogcmVnaXN0ZXIgYXMgVUFSVCBkcml2ZXIgKi8KKwlyZXQgPSB1YXJ0X3JlZ2lzdGVyX2RyaXZlcigmcGNoX3VhcnRfZHJpdmVyKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIHJlZ2lzdGVyIGFzIFBDSSBkcml2ZXIgKi8KKwlyZXQgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZwY2hfdWFydF9wY2lfZHJpdmVyKTsKKwlpZiAocmV0IDwgMCkKKwkJdWFydF91bnJlZ2lzdGVyX2RyaXZlcigmcGNoX3VhcnRfZHJpdmVyKTsKKworCXJldHVybiByZXQ7Cit9Cittb2R1bGVfaW5pdChwY2hfdWFydF9tb2R1bGVfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBwY2hfdWFydF9tb2R1bGVfZXhpdCh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmcGNoX3VhcnRfcGNpX2RyaXZlcik7CisJdWFydF91bnJlZ2lzdGVyX2RyaXZlcigmcGNoX3VhcnRfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHBjaF91YXJ0X21vZHVsZV9leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJJbnRlbCBFRzIwVCBQQ0ggVUFSVCBQQ0kgRHJpdmVyIik7Cittb2R1bGVfcGFyYW0oZGVmYXVsdF9iYXVkLCB1aW50LCBTX0lSVUdPKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9jb3JlLmMgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfY29yZS5jCmluZGV4IDlmZmE1YmUuLjQ2MGE3MmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9jb3JlLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NvcmUuYwpAQCAtMTk4NSw3ICsxOTg1LDggQEAKIAogCXR0eV9kZXYgPSBkZXZpY2VfZmluZF9jaGlsZCh1cG9ydC0+ZGV2LCAmbWF0Y2gsIHNlcmlhbF9tYXRjaF9wb3J0KTsKIAlpZiAoZGV2aWNlX21heV93YWtldXAodHR5X2RldikpIHsKLQkJZW5hYmxlX2lycV93YWtlKHVwb3J0LT5pcnEpOworCQlpZiAoIWVuYWJsZV9pcnFfd2FrZSh1cG9ydC0+aXJxKSkKKwkJCXVwb3J0LT5pcnFfd2FrZSA9IDE7CiAJCXB1dF9kZXZpY2UodHR5X2Rldik7CiAJCW11dGV4X3VubG9jaygmcG9ydC0+bXV0ZXgpOwogCQlyZXR1cm4gMDsKQEAgLTIwNTEsNyArMjA1MiwxMCBAQAogCiAJdHR5X2RldiA9IGRldmljZV9maW5kX2NoaWxkKHVwb3J0LT5kZXYsICZtYXRjaCwgc2VyaWFsX21hdGNoX3BvcnQpOwogCWlmICghdXBvcnQtPnN1c3BlbmRlZCAmJiBkZXZpY2VfbWF5X3dha2V1cCh0dHlfZGV2KSkgewotCQlkaXNhYmxlX2lycV93YWtlKHVwb3J0LT5pcnEpOworCQlpZiAodXBvcnQtPmlycV93YWtlKSB7CisJCQlkaXNhYmxlX2lycV93YWtlKHVwb3J0LT5pcnEpOworCQkJdXBvcnQtPmlycV93YWtlID0gMDsKKwkJfQogCQltdXRleF91bmxvY2soJnBvcnQtPm11dGV4KTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMjEzNCw2ICsyMTM4LDcgQEAKIAljYXNlIFVQSU9fQVU6CiAJY2FzZSBVUElPX1RTSToKIAljYXNlIFVQSU9fRFdBUEI6CisJY2FzZSBVUElPX0RXQVBCMzI6CiAJCXNucHJpbnRmKGFkZHJlc3MsIHNpemVvZihhZGRyZXNzKSwKIAkJCSAiTU1JTyAweCVsbHgiLCAodW5zaWduZWQgbG9uZyBsb25nKXBvcnQtPm1hcGJhc2UpOwogCQlicmVhazsKQEAgLTI1NTQsNiArMjU1OSw3IEBACiAJY2FzZSBVUElPX0FVOgogCWNhc2UgVVBJT19UU0k6CiAJY2FzZSBVUElPX0RXQVBCOgorCWNhc2UgVVBJT19EV0FQQjMyOgogCQlyZXR1cm4gKHBvcnQxLT5tYXBiYXNlID09IHBvcnQyLT5tYXBiYXNlKTsKIAl9CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuaCBiL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5oCmluZGV4IGQyMzUyYWMuLjRiYzYxNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5oCisrKyBiL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5oCkBAIC0zMSw2ICszMSw3IEBACiAjIGRlZmluZSBTQ1NDUl9JTklUKHBvcnQpIChwb3J0LT5tYXBiYXNlID09IFNDSUYyKSA/IDB4RjMgOiAweEYwCiAjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjApIHx8IFwKICAgICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMSkgfHwgXAorICAgICAgZGVmaW5lZChDT05GSUdfQVJDSF9TSDczQTApIHx8IFwKICAgICAgIGRlZmluZWQoQ09ORklHX0FSQ0hfU0g3MzY3KSB8fCBcCiAgICAgICBkZWZpbmVkKENPTkZJR19BUkNIX1NINzM3NykgfHwgXAogICAgICAgZGVmaW5lZChDT05GSUdfQVJDSF9TSDczNzIpCkBAIC0yNDQsNiArMjQ1LDcgQEAKICNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDUpIHx8IFwKICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjApIHx8IFwKICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjEpIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19BUkNIX1NINzNBMCkgfHwgXAogICAgIGRlZmluZWQoQ09ORklHX0FSQ0hfU0g3MzY3KSB8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfQVJDSF9TSDczNzcpIHx8IFwKICAgICBkZWZpbmVkKENPTkZJR19BUkNIX1NINzM3MikKQEAgLTI4MCw2ICsyODIsNyBAQAogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNSkgfHwgXAogICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMCkgfHwgXAogICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMSkgfHwgXAorICAgIGRlZmluZWQoQ09ORklHX0FSQ0hfU0g3M0EwKSB8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfQVJDSF9TSDczNjcpIHx8IFwKICAgICBkZWZpbmVkKENPTkZJR19BUkNIX1NINzM3NykgfHwgXAogICAgIGRlZmluZWQoQ09ORklHX0FSQ0hfU0g3MzcyKQpAQCAtMzc4LDYgKzM4MSw3IEBACiAgIH0KIAogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TSDMpIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19BUkNIX1NINzNBMCkgfHwgXAogICAgIGRlZmluZWQoQ09ORklHX0FSQ0hfU0g3MzY3KSB8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfQVJDSF9TSDczNzcpIHx8IFwKICAgICBkZWZpbmVkKENPTkZJR19BUkNIX1NINzM3MikKQEAgLTM5MSw2ICszOTUsNyBAQAogI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA1KSB8fCBcCiAgICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjApIHx8IFwKICAgICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMSkgfHwgXAorICAgICAgZGVmaW5lZChDT05GSUdfQVJDSF9TSDczQTApIHx8IFwKICAgICAgIGRlZmluZWQoQ09ORklHX0FSQ0hfU0g3MzY3KSB8fCBcCiAgICAgICBkZWZpbmVkKENPTkZJR19BUkNIX1NINzM3NykKICNkZWZpbmUgU0NJRl9GTlMobmFtZSwgc2NpZl9vZmZzZXQsIHNjaWZfc2l6ZSkgXApAQCAtNDMzLDYgKzQzOCw3IEBACiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA1KSB8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIwKSB8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIxKSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfQVJDSF9TSDczQTApIHx8IFwKICAgICBkZWZpbmVkKENPTkZJR19BUkNIX1NINzM2NykgfHwgXAogICAgIGRlZmluZWQoQ09ORklHX0FSQ0hfU0g3Mzc3KQogCkBAIC02MzIsNiArNjM4LDcgQEAKICNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNSkgfHwgXAogICAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIwKSB8fCBcCiAgICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjEpIHx8IFwKKyAgICAgIGRlZmluZWQoQ09ORklHX0FSQ0hfU0g3M0EwKSB8fCBcCiAgICAgICBkZWZpbmVkKENPTkZJR19BUkNIX1NINzM2NykgfHwgXAogICAgICAgZGVmaW5lZChDT05GSUdfQVJDSF9TSDczNzcpIHx8IFwKICAgICAgIGRlZmluZWQoQ09ORklHX0FSQ0hfU0g3MzcyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvdnQ4NTAwX3NlcmlhbC5jIGIvZHJpdmVycy9zZXJpYWwvdnQ4NTAwX3NlcmlhbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyMmJmNTYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3NlcmlhbC92dDg1MDBfc2VyaWFsLmMKQEAgLTAsMCArMSw2NDggQEAKKy8qCisgKiBkcml2ZXJzL3NlcmlhbC92dDg1MDBfc2VyaWFsLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQWxleGV5IENoYXJrb3YgPGFsY2hhcmtAZ21haWwuY29tPgorICoKKyAqIEJhc2VkIG9uIG1zbV9zZXJpYWwuYywgd2hpY2ggaXM6CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgR29vZ2xlLCBJbmMuCisgKiBBdXRob3I6IFJvYmVydCBMb3ZlIDxybG92ZUBnb29nbGUuY29tPgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF9WVDg1MDBfQ09OU09MRSkgJiYgZGVmaW5lZChDT05GSUdfTUFHSUNfU1lTUlEpCisjIGRlZmluZSBTVVBQT1JUX1NZU1JRCisjZW5kaWYKKworI2luY2x1ZGUgPGxpbnV4L2hydGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisvKgorICogVUFSVCBSZWdpc3RlciBvZmZzZXRzCisgKi8KKworI2RlZmluZSBWVDg1MDBfVVJURFIJCTB4MDAwMAkvKiBUcmFuc21pdCBkYXRhICovCisjZGVmaW5lIFZUODUwMF9VUlJEUgkJMHgwMDA0CS8qIFJlY2VpdmUgZGF0YSAqLworI2RlZmluZSBWVDg1MDBfVVJESVYJCTB4MDAwOAkvKiBDbG9jay9CYXVkIHJhdGUgZGl2aXNvciAqLworI2RlZmluZSBWVDg1MDBfVVJMQ1IJCTB4MDAwQwkvKiBMaW5lIGNvbnRyb2wgKi8KKyNkZWZpbmUgVlQ4NTAwX1VSSUNSCQkweDAwMTAJLyogSXJEQSBjb250cm9sICovCisjZGVmaW5lIFZUODUwMF9VUklFUgkJMHgwMDE0CS8qIEludGVycnVwdCBlbmFibGUgKi8KKyNkZWZpbmUgVlQ4NTAwX1VSSVNSCQkweDAwMTgJLyogSW50ZXJydXB0IHN0YXR1cyAqLworI2RlZmluZSBWVDg1MDBfVVJVU1IJCTB4MDAxYwkvKiBVQVJUIHN0YXR1cyAqLworI2RlZmluZSBWVDg1MDBfVVJGQ1IJCTB4MDAyMAkvKiBGSUZPIGNvbnRyb2wgKi8KKyNkZWZpbmUgVlQ4NTAwX1VSRklEWAkJMHgwMDI0CS8qIEZJRk8gaW5kZXggKi8KKyNkZWZpbmUgVlQ4NTAwX1VSQktSCQkweDAwMjgJLyogQnJlYWsgc2lnbmFsIGNvdW50ICovCisjZGVmaW5lIFZUODUwMF9VUlRPRAkJMHgwMDJjCS8qIFRpbWUgb3V0IGRpdmlzb3IgKi8KKyNkZWZpbmUgVlQ4NTAwX1RYRklGTwkJMHgxMDAwCS8qIFRyYW5zbWl0IEZJRk8gKDE2eDgpICovCisjZGVmaW5lIFZUODUwMF9SWEZJRk8JCTB4MTAyMAkvKiBSZWNlaXZlIEZJRk8gKDE2eDEwKSAqLworCisvKgorICogSW50ZXJydXB0IGVuYWJsZSBhbmQgc3RhdHVzIGJpdHMKKyAqLworCisjZGVmaW5lIFRYREUJKDEgPDwgMCkJLyogVHggRGF0YSBlbXB0eSAqLworI2RlZmluZSBSWERGCSgxIDw8IDEpCS8qIFJ4IERhdGEgZnVsbCAqLworI2RlZmluZSBUWEZBRQkoMSA8PCAyKQkvKiBUeCBGSUZPIGFsbW9zdCBlbXB0eSAqLworI2RlZmluZSBUWEZFCSgxIDw8IDMpCS8qIFR4IEZJRk8gZW1wdHkgKi8KKyNkZWZpbmUgUlhGQUYJKDEgPDwgNCkJLyogUnggRklGTyBhbG1vc3QgZnVsbCAqLworI2RlZmluZSBSWEZGCSgxIDw8IDUpCS8qIFJ4IEZJRk8gZnVsbCAqLworI2RlZmluZSBUWFVEUgkoMSA8PCA2KQkvKiBUeCB1bmRlcnJ1biAqLworI2RlZmluZSBSWE9WRVIJKDEgPDwgNykJLyogUnggb3ZlcnJ1biAqLworI2RlZmluZSBQRVIJKDEgPDwgOCkJLyogUGFyaXR5IGVycm9yICovCisjZGVmaW5lIEZFUgkoMSA8PCA5KQkvKiBGcmFtZSBlcnJvciAqLworI2RlZmluZSBUQ1RTCSgxIDw8IDEwKQkvKiBUb2dnbGUgb2YgQ1RTICovCisjZGVmaW5lIFJYVE9VVAkoMSA8PCAxMSkJLyogUnggdGltZW91dCAqLworI2RlZmluZSBCS0RPTkUJKDEgPDwgMTIpCS8qIEJyZWFrIHNpZ25hbCBkb25lICovCisjZGVmaW5lIEVSUgkoMSA8PCAxMykJLyogQUhCIGVycm9yIHJlc3BvbnNlICovCisKKyNkZWZpbmUgUlhfRklGT19JTlRTCShSWEZBRiB8IFJYRkYgfCBSWE9WRVIgfCBQRVIgfCBGRVIgfCBSWFRPVVQpCisjZGVmaW5lIFRYX0ZJRk9fSU5UUwkoVFhGQUUgfCBUWEZFIHwgVFhVRFIpCisKK3N0cnVjdCB2dDg1MDBfcG9ydCB7CisJc3RydWN0IHVhcnRfcG9ydAl1YXJ0OworCWNoYXIJCQluYW1lWzE2XTsKKwlzdHJ1Y3QgY2xrCQkqY2xrOworCXVuc2lnbmVkIGludAkJaWVyOworfTsKKworc3RhdGljIGlubGluZSB2b2lkIHZ0ODUwMF93cml0ZShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCB1bnNpZ25lZCBpbnQgdmFsLAorCQkJICAgICB1bnNpZ25lZCBpbnQgb2ZmKQoreworCXdyaXRlbCh2YWwsIHBvcnQtPm1lbWJhc2UgKyBvZmYpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB2dDg1MDBfcmVhZChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCB1bnNpZ25lZCBpbnQgb2ZmKQoreworCXJldHVybiByZWFkbChwb3J0LT5tZW1iYXNlICsgb2ZmKTsKK30KKworc3RhdGljIHZvaWQgdnQ4NTAwX3N0b3BfdHgoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgdnQ4NTAwX3BvcnQgKnZ0ODUwMF9wb3J0ID0gY29udGFpbmVyX29mKHBvcnQsCisJCQkJCQkgICAgICAgc3RydWN0IHZ0ODUwMF9wb3J0LAorCQkJCQkJICAgICAgIHVhcnQpOworCisJdnQ4NTAwX3BvcnQtPmllciAmPSB+VFhfRklGT19JTlRTOworCXZ0ODUwMF93cml0ZShwb3J0LCB2dDg1MDBfcG9ydC0+aWVyLCBWVDg1MDBfVVJJRVIpOworfQorCitzdGF0aWMgdm9pZCB2dDg1MDBfc3RvcF9yeChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCB2dDg1MDBfcG9ydCAqdnQ4NTAwX3BvcnQgPSBjb250YWluZXJfb2YocG9ydCwKKwkJCQkJCSAgICAgICBzdHJ1Y3QgdnQ4NTAwX3BvcnQsCisJCQkJCQkgICAgICAgdWFydCk7CisKKwl2dDg1MDBfcG9ydC0+aWVyICY9IH5SWF9GSUZPX0lOVFM7CisJdnQ4NTAwX3dyaXRlKHBvcnQsIHZ0ODUwMF9wb3J0LT5pZXIsIFZUODUwMF9VUklFUik7Cit9CisKK3N0YXRpYyB2b2lkIHZ0ODUwMF9lbmFibGVfbXMoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgdnQ4NTAwX3BvcnQgKnZ0ODUwMF9wb3J0ID0gY29udGFpbmVyX29mKHBvcnQsCisJCQkJCQkgICAgICAgc3RydWN0IHZ0ODUwMF9wb3J0LAorCQkJCQkJICAgICAgIHVhcnQpOworCisJdnQ4NTAwX3BvcnQtPmllciB8PSBUQ1RTOworCXZ0ODUwMF93cml0ZShwb3J0LCB2dDg1MDBfcG9ydC0+aWVyLCBWVDg1MDBfVVJJRVIpOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfcngoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmcG9ydC0+c3RhdGUtPnBvcnQpOworCWlmICghdHR5KSB7CisJCS8qIERpc2NhcmQgZGF0YTogbm8gdHR5IGF2YWlsYWJsZSAqLworCQlpbnQgY291bnQgPSAodnQ4NTAwX3JlYWQocG9ydCwgVlQ4NTAwX1VSRklEWCkgJiAweDFmMDApID4+IDg7CisJCXUxNiBjaDsKKwkJd2hpbGUgKGNvdW50LS0pCisJCQljaCA9IHJlYWR3KHBvcnQtPm1lbWJhc2UgKyBWVDg1MDBfUlhGSUZPKTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogSGFuZGxlIG92ZXJydW4KKwkgKi8KKwlpZiAoKHZ0ODUwMF9yZWFkKHBvcnQsIFZUODUwMF9VUklTUikgJiBSWE9WRVIpKSB7CisJCXBvcnQtPmljb3VudC5vdmVycnVuKys7CisJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgMCwgVFRZX09WRVJSVU4pOworCX0KKworCS8qIGFuZCBub3cgdGhlIG1haW4gUlggbG9vcCAqLworCXdoaWxlICh2dDg1MDBfcmVhZChwb3J0LCBWVDg1MDBfVVJGSURYKSAmIDB4MWYwMCkgeworCQl1bnNpZ25lZCBpbnQgYzsKKwkJY2hhciBmbGFnID0gVFRZX05PUk1BTDsKKworCQljID0gcmVhZHcocG9ydC0+bWVtYmFzZSArIFZUODUwMF9SWEZJRk8pICYgMHgzZmY7CisKKwkJLyogTWFzayBjb25kaXRpb25zIHdlJ3JlIGlnbm9ybmluZy4gKi8KKwkJYyAmPSB+cG9ydC0+cmVhZF9zdGF0dXNfbWFzazsKKworCQlpZiAoYyAmIEZFUikgeworCQkJcG9ydC0+aWNvdW50LmZyYW1lKys7CisJCQlmbGFnID0gVFRZX0ZSQU1FOworCQl9IGVsc2UgaWYgKGMgJiBQRVIpIHsKKwkJCXBvcnQtPmljb3VudC5wYXJpdHkrKzsKKwkJCWZsYWcgPSBUVFlfUEFSSVRZOworCQl9CisJCXBvcnQtPmljb3VudC5yeCsrOworCisJCWlmICghdWFydF9oYW5kbGVfc3lzcnFfY2hhcihwb3J0LCBjKSkKKwkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgYywgZmxhZyk7CisJfQorCisJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKwl0dHlfa3JlZl9wdXQodHR5KTsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX3R4KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnBvcnQtPnN0YXRlLT54bWl0OworCisJaWYgKHBvcnQtPnhfY2hhcikgeworCQl3cml0ZWIocG9ydC0+eF9jaGFyLCBwb3J0LT5tZW1iYXNlICsgVlQ4NTAwX1RYRklGTyk7CisJCXBvcnQtPmljb3VudC50eCsrOworCQlwb3J0LT54X2NoYXIgPSAwOworCX0KKwlpZiAodWFydF9jaXJjX2VtcHR5KHhtaXQpIHx8IHVhcnRfdHhfc3RvcHBlZChwb3J0KSkgeworCQl2dDg1MDBfc3RvcF90eChwb3J0KTsKKwkJcmV0dXJuOworCX0KKworCXdoaWxlICgodnQ4NTAwX3JlYWQocG9ydCwgVlQ4NTAwX1VSRklEWCkgJiAweDFmKSA8IDE2KSB7CisJCWlmICh1YXJ0X2NpcmNfZW1wdHkoeG1pdCkpCisJCQlicmVhazsKKworCQl3cml0ZWIoeG1pdC0+YnVmW3htaXQtPnRhaWxdLCBwb3J0LT5tZW1iYXNlICsgVlQ4NTAwX1RYRklGTyk7CisKKwkJeG1pdC0+dGFpbCA9ICh4bWl0LT50YWlsICsgMSkgJiAoVUFSVF9YTUlUX1NJWkUgLSAxKTsKKwkJcG9ydC0+aWNvdW50LnR4Kys7CisJfQorCisJaWYgKHVhcnRfY2lyY19jaGFyc19wZW5kaW5nKHhtaXQpIDwgV0FLRVVQX0NIQVJTKQorCQl1YXJ0X3dyaXRlX3dha2V1cChwb3J0KTsKKworCWlmICh1YXJ0X2NpcmNfZW1wdHkoeG1pdCkpCisJCXZ0ODUwMF9zdG9wX3R4KHBvcnQpOworfQorCitzdGF0aWMgdm9pZCB2dDg1MDBfc3RhcnRfdHgoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgdnQ4NTAwX3BvcnQgKnZ0ODUwMF9wb3J0ID0gY29udGFpbmVyX29mKHBvcnQsCisJCQkJCQkgICAgICAgc3RydWN0IHZ0ODUwMF9wb3J0LAorCQkJCQkJICAgICAgIHVhcnQpOworCisJdnQ4NTAwX3BvcnQtPmllciAmPSB+VFhfRklGT19JTlRTOworCXZ0ODUwMF93cml0ZShwb3J0LCB2dDg1MDBfcG9ydC0+aWVyLCBWVDg1MDBfVVJJRVIpOworCWhhbmRsZV90eChwb3J0KTsKKwl2dDg1MDBfcG9ydC0+aWVyIHw9IFRYX0ZJRk9fSU5UUzsKKwl2dDg1MDBfd3JpdGUocG9ydCwgdnQ4NTAwX3BvcnQtPmllciwgVlQ4NTAwX1VSSUVSKTsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX2RlbHRhX2N0cyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXBvcnQtPmljb3VudC5jdHMrKzsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBvcnQtPnN0YXRlLT5wb3J0LmRlbHRhX21zcl93YWl0KTsKK30KKworc3RhdGljIGlycXJldHVybl90IHZ0ODUwMF9pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSBkZXZfaWQ7CisJdW5zaWduZWQgbG9uZyBpc3I7CisKKwlzcGluX2xvY2soJnBvcnQtPmxvY2spOworCWlzciA9IHZ0ODUwMF9yZWFkKHBvcnQsIFZUODUwMF9VUklTUik7CisKKwkvKiBBY2tub3dsZWRnZSBhY3RpdmUgc3RhdHVzIGJpdHMgKi8KKwl2dDg1MDBfd3JpdGUocG9ydCwgaXNyLCBWVDg1MDBfVVJJU1IpOworCisJaWYgKGlzciAmIFJYX0ZJRk9fSU5UUykKKwkJaGFuZGxlX3J4KHBvcnQpOworCWlmIChpc3IgJiBUWF9GSUZPX0lOVFMpCisJCWhhbmRsZV90eChwb3J0KTsKKwlpZiAoaXNyICYgVENUUykKKwkJaGFuZGxlX2RlbHRhX2N0cyhwb3J0KTsKKworCXNwaW5fdW5sb2NrKCZwb3J0LT5sb2NrKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCB2dDg1MDBfdHhfZW1wdHkoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwlyZXR1cm4gKHZ0ODUwMF9yZWFkKHBvcnQsIFZUODUwMF9VUkZJRFgpICYgMHgxZikgPCAxNiA/CisJCQkJCQlUSU9DU0VSX1RFTVQgOiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHZ0ODUwMF9nZXRfbWN0cmwoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwl1bnNpZ25lZCBpbnQgdXNyOworCisJdXNyID0gdnQ4NTAwX3JlYWQocG9ydCwgVlQ4NTAwX1VSVVNSKTsKKwlpZiAodXNyICYgKDEgPDwgNCkpCisJCXJldHVybiBUSU9DTV9DVFM7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdnQ4NTAwX3NldF9tY3RybChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCB1bnNpZ25lZCBpbnQgbWN0cmwpCit7Cit9CisKK3N0YXRpYyB2b2lkIHZ0ODUwMF9icmVha19jdGwoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgaW50IGJyZWFrX2N0bCkKK3sKKwlpZiAoYnJlYWtfY3RsKQorCQl2dDg1MDBfd3JpdGUocG9ydCwgdnQ4NTAwX3JlYWQocG9ydCwgVlQ4NTAwX1VSTENSKSB8ICgxIDw8IDkpLAorCQkJICAgICBWVDg1MDBfVVJMQ1IpOworfQorCitzdGF0aWMgaW50IHZ0ODUwMF9zZXRfYmF1ZF9yYXRlKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHVuc2lnbmVkIGludCBiYXVkKQoreworCXVuc2lnbmVkIGxvbmcgZGl2OworCXVuc2lnbmVkIGludCBsb29wcyA9IDEwMDA7CisKKwlkaXYgPSB2dDg1MDBfcmVhZChwb3J0LCBWVDg1MDBfVVJESVYpICYgfigweDNmZik7CisKKwlpZiAodW5saWtlbHkoKGJhdWQgPCA5MDApIHx8IChiYXVkID4gOTIxNjAwKSkpCisJCWRpdiB8PSA3OworCWVsc2UKKwkJZGl2IHw9ICg5MjE2MDAgLyBiYXVkKSAtIDE7CisKKwl3aGlsZSAoKHZ0ODUwMF9yZWFkKHBvcnQsIFZUODUwMF9VUlVTUikgJiAoMSA8PCA1KSkgJiYgLS1sb29wcykKKwkJY3B1X3JlbGF4KCk7CisJdnQ4NTAwX3dyaXRlKHBvcnQsIGRpdiwgVlQ4NTAwX1VSRElWKTsKKworCXJldHVybiBiYXVkOworfQorCitzdGF0aWMgaW50IHZ0ODUwMF9zdGFydHVwKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJc3RydWN0IHZ0ODUwMF9wb3J0ICp2dDg1MDBfcG9ydCA9CisJCQljb250YWluZXJfb2YocG9ydCwgc3RydWN0IHZ0ODUwMF9wb3J0LCB1YXJ0KTsKKwlpbnQgcmV0OworCisJc25wcmludGYodnQ4NTAwX3BvcnQtPm5hbWUsIHNpemVvZih2dDg1MDBfcG9ydC0+bmFtZSksCisJCSAidnQ4NTAwX3NlcmlhbCVkIiwgcG9ydC0+bGluZSk7CisKKwlyZXQgPSByZXF1ZXN0X2lycShwb3J0LT5pcnEsIHZ0ODUwMF9pcnEsIElSUUZfVFJJR0dFUl9ISUdILAorCQkJICB2dDg1MDBfcG9ydC0+bmFtZSwgcG9ydCk7CisJaWYgKHVubGlrZWx5KHJldCkpCisJCXJldHVybiByZXQ7CisKKwl2dDg1MDBfd3JpdGUocG9ydCwgMHgwMywgVlQ4NTAwX1VSTENSKTsJLyogZW5hYmxlIFRYICYgUlggKi8KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB2dDg1MDBfc2h1dGRvd24oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgdnQ4NTAwX3BvcnQgKnZ0ODUwMF9wb3J0ID0KKwkJCWNvbnRhaW5lcl9vZihwb3J0LCBzdHJ1Y3QgdnQ4NTAwX3BvcnQsIHVhcnQpOworCisJdnQ4NTAwX3BvcnQtPmllciA9IDA7CisKKwkvKiBkaXNhYmxlIGludGVycnVwdHMgYW5kIEZJRk9zICovCisJdnQ4NTAwX3dyaXRlKCZ2dDg1MDBfcG9ydC0+dWFydCwgMCwgVlQ4NTAwX1VSSUVSKTsKKwl2dDg1MDBfd3JpdGUoJnZ0ODUwMF9wb3J0LT51YXJ0LCAweDg4MCwgVlQ4NTAwX1VSRkNSKTsKKwlmcmVlX2lycShwb3J0LT5pcnEsIHBvcnQpOworfQorCitzdGF0aWMgdm9pZCB2dDg1MDBfc2V0X3Rlcm1pb3Moc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwKKwkJCSAgICAgICBzdHJ1Y3Qga3Rlcm1pb3MgKnRlcm1pb3MsCisJCQkgICAgICAgc3RydWN0IGt0ZXJtaW9zICpvbGQpCit7CisJc3RydWN0IHZ0ODUwMF9wb3J0ICp2dDg1MDBfcG9ydCA9CisJCQljb250YWluZXJfb2YocG9ydCwgc3RydWN0IHZ0ODUwMF9wb3J0LCB1YXJ0KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBiYXVkLCBsY3I7CisJdW5zaWduZWQgaW50IGxvb3BzID0gMTAwMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5sb2NrLCBmbGFncyk7CisKKwkvKiBjYWxjdWxhdGUgYW5kIHNldCBiYXVkIHJhdGUgKi8KKwliYXVkID0gdWFydF9nZXRfYmF1ZF9yYXRlKHBvcnQsIHRlcm1pb3MsIG9sZCwgOTAwLCA5MjE2MDApOworCWJhdWQgPSB2dDg1MDBfc2V0X2JhdWRfcmF0ZShwb3J0LCBiYXVkKTsKKwlpZiAodHR5X3Rlcm1pb3NfYmF1ZF9yYXRlKHRlcm1pb3MpKQorCQl0dHlfdGVybWlvc19lbmNvZGVfYmF1ZF9yYXRlKHRlcm1pb3MsIGJhdWQsIGJhdWQpOworCisJLyogY2FsY3VsYXRlIHBhcml0eSAqLworCWxjciA9IHZ0ODUwMF9yZWFkKCZ2dDg1MDBfcG9ydC0+dWFydCwgVlQ4NTAwX1VSTENSKTsKKwlsY3IgJj0gfigoMSA8PCA1KSB8ICgxIDw8IDQpKTsKKwlpZiAodGVybWlvcy0+Y19jZmxhZyAmIFBBUkVOQikgeworCQlsY3IgfD0gKDEgPDwgNCk7CisJCXRlcm1pb3MtPmNfY2ZsYWcgJj0gfkNNU1BBUjsKKwkJaWYgKHRlcm1pb3MtPmNfY2ZsYWcgJiBQQVJPREQpCisJCQlsY3IgfD0gKDEgPDwgNSk7CisJfQorCisJLyogY2FsY3VsYXRlIGJpdHMgcGVyIGNoYXIgKi8KKwlsY3IgJj0gfigxIDw8IDIpOworCXN3aXRjaCAodGVybWlvcy0+Y19jZmxhZyAmIENTSVpFKSB7CisJY2FzZSBDUzc6CisJCWJyZWFrOworCWNhc2UgQ1M4OgorCWRlZmF1bHQ6CisJCWxjciB8PSAoMSA8PCAyKTsKKwkJdGVybWlvcy0+Y19jZmxhZyAmPSB+Q1NJWkU7CisJCXRlcm1pb3MtPmNfY2ZsYWcgfD0gQ1M4OworCQlicmVhazsKKwl9CisKKwkvKiBjYWxjdWxhdGUgc3RvcCBiaXRzICovCisJbGNyICY9IH4oMSA8PCAzKTsKKwlpZiAodGVybWlvcy0+Y19jZmxhZyAmIENTVE9QQikKKwkJbGNyIHw9ICgxIDw8IDMpOworCisJLyogc2V0IHBhcml0eSwgYml0cyBwZXIgY2hhciwgYW5kIHN0b3AgYml0ICovCisJdnQ4NTAwX3dyaXRlKCZ2dDg1MDBfcG9ydC0+dWFydCwgbGNyLCBWVDg1MDBfVVJMQ1IpOworCisJLyogQ29uZmlndXJlIHN0YXR1cyBiaXRzIHRvIGlnbm9yZSBiYXNlZCBvbiB0ZXJtaW8gZmxhZ3MuICovCisJcG9ydC0+cmVhZF9zdGF0dXNfbWFzayA9IDA7CisJaWYgKHRlcm1pb3MtPmNfaWZsYWcgJiBJR05QQVIpCisJCXBvcnQtPnJlYWRfc3RhdHVzX21hc2sgPSBGRVIgfCBQRVI7CisKKwl1YXJ0X3VwZGF0ZV90aW1lb3V0KHBvcnQsIHRlcm1pb3MtPmNfY2ZsYWcsIGJhdWQpOworCisJLyogUmVzZXQgRklGT3MgKi8KKwl2dDg1MDBfd3JpdGUoJnZ0ODUwMF9wb3J0LT51YXJ0LCAweDg4YywgVlQ4NTAwX1VSRkNSKTsKKwl3aGlsZSAoKHZ0ODUwMF9yZWFkKCZ2dDg1MDBfcG9ydC0+dWFydCwgVlQ4NTAwX1VSRkNSKSAmIDB4YykKKwkJCQkJCQkmJiAtLWxvb3BzKQorCQljcHVfcmVsYXgoKTsKKworCS8qIEV2ZXJ5IHBvc3NpYmxlIEZJRk8tcmVsYXRlZCBpbnRlcnJ1cHQgKi8KKwl2dDg1MDBfcG9ydC0+aWVyID0gUlhfRklGT19JTlRTIHwgVFhfRklGT19JTlRTOworCisJLyoKKwkgKiBDVFMgZmxvdyBjb250cm9sCisJICovCisJaWYgKFVBUlRfRU5BQkxFX01TKCZ2dDg1MDBfcG9ydC0+dWFydCwgdGVybWlvcy0+Y19jZmxhZykpCisJCXZ0ODUwMF9wb3J0LT5pZXIgfD0gVENUUzsKKworCXZ0ODUwMF93cml0ZSgmdnQ4NTAwX3BvcnQtPnVhcnQsIDB4ODgxLCBWVDg1MDBfVVJGQ1IpOworCXZ0ODUwMF93cml0ZSgmdnQ4NTAwX3BvcnQtPnVhcnQsIHZ0ODUwMF9wb3J0LT5pZXIsIFZUODUwMF9VUklFUik7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICp2dDg1MDBfdHlwZShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCB2dDg1MDBfcG9ydCAqdnQ4NTAwX3BvcnQgPQorCQkJY29udGFpbmVyX29mKHBvcnQsIHN0cnVjdCB2dDg1MDBfcG9ydCwgdWFydCk7CisJcmV0dXJuIHZ0ODUwMF9wb3J0LT5uYW1lOworfQorCitzdGF0aWMgdm9pZCB2dDg1MDBfcmVsZWFzZV9wb3J0KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7Cit9CisKK3N0YXRpYyBpbnQgdnQ4NTAwX3JlcXVlc3RfcG9ydChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB2dDg1MDBfY29uZmlnX3BvcnQoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgaW50IGZsYWdzKQoreworCXBvcnQtPnR5cGUgPSBQT1JUX1ZUODUwMDsKK30KKworc3RhdGljIGludCB2dDg1MDBfdmVyaWZ5X3BvcnQoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwKKwkJCSAgICAgIHN0cnVjdCBzZXJpYWxfc3RydWN0ICpzZXIpCit7CisJaWYgKHVubGlrZWx5KHNlci0+dHlwZSAhPSBQT1JUX1VOS05PV04gJiYgc2VyLT50eXBlICE9IFBPUlRfVlQ4NTAwKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKHVubGlrZWx5KHBvcnQtPmlycSAhPSBzZXItPmlycSkpCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHZ0ODUwMF9wb3J0ICp2dDg1MDBfdWFydF9wb3J0c1s0XTsKK3N0YXRpYyBzdHJ1Y3QgdWFydF9kcml2ZXIgdnQ4NTAwX3VhcnRfZHJpdmVyOworCisjaWZkZWYgQ09ORklHX1NFUklBTF9WVDg1MDBfQ09OU09MRQorCitzdGF0aWMgaW5saW5lIHZvaWQgd2FpdF9mb3JfeG1pdHIoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwl1bnNpZ25lZCBpbnQgc3RhdHVzLCB0bW91dCA9IDEwMDAwOworCisJLyogV2FpdCB1cCB0byAxMG1zIGZvciB0aGUgY2hhcmFjdGVyKHMpIHRvIGJlIHNlbnQuICovCisJZG8geworCQlzdGF0dXMgPSB2dDg1MDBfcmVhZChwb3J0LCBWVDg1MDBfVVJGSURYKTsKKworCQlpZiAoLS10bW91dCA9PSAwKQorCQkJYnJlYWs7CisJCXVkZWxheSgxKTsKKwl9IHdoaWxlIChzdGF0dXMgJiAweDEwKTsKK30KKworc3RhdGljIHZvaWQgdnQ4NTAwX2NvbnNvbGVfcHV0Y2hhcihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBpbnQgYykKK3sKKwl3YWl0X2Zvcl94bWl0cihwb3J0KTsKKwl3cml0ZWIoYywgcG9ydC0+bWVtYmFzZSArIFZUODUwMF9UWEZJRk8pOworfQorCitzdGF0aWMgdm9pZCB2dDg1MDBfY29uc29sZV93cml0ZShzdHJ1Y3QgY29uc29sZSAqY28sIGNvbnN0IGNoYXIgKnMsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgY291bnQpCit7CisJc3RydWN0IHZ0ODUwMF9wb3J0ICp2dDg1MDBfcG9ydCA9IHZ0ODUwMF91YXJ0X3BvcnRzW2NvLT5pbmRleF07CisJdW5zaWduZWQgbG9uZyBpZXI7CisKKwlCVUdfT04oY28tPmluZGV4IDwgMCB8fCBjby0+aW5kZXggPj0gdnQ4NTAwX3VhcnRfZHJpdmVyLm5yKTsKKworCWllciA9IHZ0ODUwMF9yZWFkKCZ2dDg1MDBfcG9ydC0+dWFydCwgVlQ4NTAwX1VSSUVSKTsKKwl2dDg1MDBfd3JpdGUoJnZ0ODUwMF9wb3J0LT51YXJ0LCBWVDg1MDBfVVJJRVIsIDApOworCisJdWFydF9jb25zb2xlX3dyaXRlKCZ2dDg1MDBfcG9ydC0+dWFydCwgcywgY291bnQsCisJCQkgICB2dDg1MDBfY29uc29sZV9wdXRjaGFyKTsKKworCS8qCisJICoJRmluYWxseSwgd2FpdCBmb3IgdHJhbnNtaXR0ZXIgdG8gYmVjb21lIGVtcHR5CisJICoJYW5kIHN3aXRjaCBiYWNrIHRvIEZJRk8KKwkgKi8KKwl3YWl0X2Zvcl94bWl0cigmdnQ4NTAwX3BvcnQtPnVhcnQpOworCXZ0ODUwMF93cml0ZSgmdnQ4NTAwX3BvcnQtPnVhcnQsIFZUODUwMF9VUklFUiwgaWVyKTsKK30KKworc3RhdGljIGludCBfX2luaXQgdnQ4NTAwX2NvbnNvbGVfc2V0dXAoc3RydWN0IGNvbnNvbGUgKmNvLCBjaGFyICpvcHRpb25zKQoreworCXN0cnVjdCB2dDg1MDBfcG9ydCAqdnQ4NTAwX3BvcnQ7CisJaW50IGJhdWQgPSA5NjAwOworCWludCBiaXRzID0gODsKKwlpbnQgcGFyaXR5ID0gJ24nOworCWludCBmbG93ID0gJ24nOworCisJaWYgKHVubGlrZWx5KGNvLT5pbmRleCA+PSB2dDg1MDBfdWFydF9kcml2ZXIubnIgfHwgY28tPmluZGV4IDwgMCkpCisJCXJldHVybiAtRU5YSU87CisKKwl2dDg1MDBfcG9ydCA9IHZ0ODUwMF91YXJ0X3BvcnRzW2NvLT5pbmRleF07CisKKwlpZiAoIXZ0ODUwMF9wb3J0KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmIChvcHRpb25zKQorCQl1YXJ0X3BhcnNlX29wdGlvbnMob3B0aW9ucywgJmJhdWQsICZwYXJpdHksICZiaXRzLCAmZmxvdyk7CisKKwlyZXR1cm4gdWFydF9zZXRfb3B0aW9ucygmdnQ4NTAwX3BvcnQtPnVhcnQsCisJCQkJIGNvLCBiYXVkLCBwYXJpdHksIGJpdHMsIGZsb3cpOworfQorCitzdGF0aWMgc3RydWN0IGNvbnNvbGUgdnQ4NTAwX2NvbnNvbGUgPSB7CisJLm5hbWUgPSAidHR5V01UIiwKKwkud3JpdGUgPSB2dDg1MDBfY29uc29sZV93cml0ZSwKKwkuZGV2aWNlID0gdWFydF9jb25zb2xlX2RldmljZSwKKwkuc2V0dXAgPSB2dDg1MDBfY29uc29sZV9zZXR1cCwKKwkuZmxhZ3MgPSBDT05fUFJJTlRCVUZGRVIsCisJLmluZGV4ID0gLTEsCisJLmRhdGEgPSAmdnQ4NTAwX3VhcnRfZHJpdmVyLAorfTsKKworI2RlZmluZSBWVDg1MDBfQ09OU09MRQkoJnZ0ODUwMF9jb25zb2xlKQorCisjZWxzZQorI2RlZmluZSBWVDg1MDBfQ09OU09MRQlOVUxMCisjZW5kaWYKKworc3RhdGljIHN0cnVjdCB1YXJ0X29wcyB2dDg1MDBfdWFydF9wb3BzID0geworCS50eF9lbXB0eQk9IHZ0ODUwMF90eF9lbXB0eSwKKwkuc2V0X21jdHJsCT0gdnQ4NTAwX3NldF9tY3RybCwKKwkuZ2V0X21jdHJsCT0gdnQ4NTAwX2dldF9tY3RybCwKKwkuc3RvcF90eAk9IHZ0ODUwMF9zdG9wX3R4LAorCS5zdGFydF90eAk9IHZ0ODUwMF9zdGFydF90eCwKKwkuc3RvcF9yeAk9IHZ0ODUwMF9zdG9wX3J4LAorCS5lbmFibGVfbXMJPSB2dDg1MDBfZW5hYmxlX21zLAorCS5icmVha19jdGwJPSB2dDg1MDBfYnJlYWtfY3RsLAorCS5zdGFydHVwCT0gdnQ4NTAwX3N0YXJ0dXAsCisJLnNodXRkb3duCT0gdnQ4NTAwX3NodXRkb3duLAorCS5zZXRfdGVybWlvcwk9IHZ0ODUwMF9zZXRfdGVybWlvcywKKwkudHlwZQkJPSB2dDg1MDBfdHlwZSwKKwkucmVsZWFzZV9wb3J0CT0gdnQ4NTAwX3JlbGVhc2VfcG9ydCwKKwkucmVxdWVzdF9wb3J0CT0gdnQ4NTAwX3JlcXVlc3RfcG9ydCwKKwkuY29uZmlnX3BvcnQJPSB2dDg1MDBfY29uZmlnX3BvcnQsCisJLnZlcmlmeV9wb3J0CT0gdnQ4NTAwX3ZlcmlmeV9wb3J0LAorfTsKKworc3RhdGljIHN0cnVjdCB1YXJ0X2RyaXZlciB2dDg1MDBfdWFydF9kcml2ZXIgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5kcml2ZXJfbmFtZQk9ICJ2dDg1MDBfc2VyaWFsIiwKKwkuZGV2X25hbWUJPSAidHR5V01UIiwKKwkubnIJCT0gNiwKKwkuY29ucwkJPSBWVDg1MDBfQ09OU09MRSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHZ0ODUwMF9zZXJpYWxfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgdnQ4NTAwX3BvcnQgKnZ0ODUwMF9wb3J0OworCXN0cnVjdCByZXNvdXJjZSAqbW1yZXMsICppcnFyZXM7CisJaW50IHJldDsKKworCW1tcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpcnFyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIDApOworCWlmICghbW1yZXMgfHwgIWlycXJlcykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwl2dDg1MDBfcG9ydCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB2dDg1MDBfcG9ydCksIEdGUF9LRVJORUwpOworCWlmICghdnQ4NTAwX3BvcnQpCisJCXJldHVybiAtRU5PTUVNOworCisJdnQ4NTAwX3BvcnQtPnVhcnQudHlwZSA9IFBPUlRfVlQ4NTAwOworCXZ0ODUwMF9wb3J0LT51YXJ0LmlvdHlwZSA9IFVQSU9fTUVNOworCXZ0ODUwMF9wb3J0LT51YXJ0Lm1hcGJhc2UgPSBtbXJlcy0+c3RhcnQ7CisJdnQ4NTAwX3BvcnQtPnVhcnQuaXJxID0gaXJxcmVzLT5zdGFydDsKKwl2dDg1MDBfcG9ydC0+dWFydC5maWZvc2l6ZSA9IDE2OworCXZ0ODUwMF9wb3J0LT51YXJ0Lm9wcyA9ICZ2dDg1MDBfdWFydF9wb3BzOworCXZ0ODUwMF9wb3J0LT51YXJ0LmxpbmUgPSBwZGV2LT5pZDsKKwl2dDg1MDBfcG9ydC0+dWFydC5kZXYgPSAmcGRldi0+ZGV2OworCXZ0ODUwMF9wb3J0LT51YXJ0LmZsYWdzID0gVVBGX0lPUkVNQVAgfCBVUEZfQk9PVF9BVVRPQ09ORjsKKwl2dDg1MDBfcG9ydC0+dWFydC51YXJ0Y2xrID0gMjQwMDAwMDA7CisKKwlzbnByaW50Zih2dDg1MDBfcG9ydC0+bmFtZSwgc2l6ZW9mKHZ0ODUwMF9wb3J0LT5uYW1lKSwKKwkJICJWVDg1MDAgVUFSVCVkIiwgcGRldi0+aWQpOworCisJdnQ4NTAwX3BvcnQtPnVhcnQubWVtYmFzZSA9IGlvcmVtYXAobW1yZXMtPnN0YXJ0LAorCQkJCQkgICAgbW1yZXMtPmVuZCAtIG1tcmVzLT5zdGFydCArIDEpOworCWlmICghdnQ4NTAwX3BvcnQtPnVhcnQubWVtYmFzZSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycjsKKwl9CisKKwl2dDg1MDBfdWFydF9wb3J0c1twZGV2LT5pZF0gPSB2dDg1MDBfcG9ydDsKKworCXVhcnRfYWRkX29uZV9wb3J0KCZ2dDg1MDBfdWFydF9kcml2ZXIsICZ2dDg1MDBfcG9ydC0+dWFydCk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCB2dDg1MDBfcG9ydCk7CisKKwlyZXR1cm4gMDsKKworZXJyOgorCWtmcmVlKHZ0ODUwMF9wb3J0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCB2dDg1MDBfc2VyaWFsX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB2dDg1MDBfcG9ydCAqdnQ4NTAwX3BvcnQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCXVhcnRfcmVtb3ZlX29uZV9wb3J0KCZ2dDg1MDBfdWFydF9kcml2ZXIsICZ2dDg1MDBfcG9ydC0+dWFydCk7CisJa2ZyZWUodnQ4NTAwX3BvcnQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHZ0ODUwMF9wbGF0Zm9ybV9kcml2ZXIgPSB7CisJLnByb2JlICA9IHZ0ODUwMF9zZXJpYWxfcHJvYmUsCisJLnJlbW92ZSA9IHZ0ODUwMF9zZXJpYWxfcmVtb3ZlLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gInZ0ODUwMF9zZXJpYWwiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgdnQ4NTAwX3NlcmlhbF9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IHVhcnRfcmVnaXN0ZXJfZHJpdmVyKCZ2dDg1MDBfdWFydF9kcml2ZXIpOworCWlmICh1bmxpa2VseShyZXQpKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ2dDg1MDBfcGxhdGZvcm1fZHJpdmVyKTsKKworCWlmICh1bmxpa2VseShyZXQpKQorCQl1YXJ0X3VucmVnaXN0ZXJfZHJpdmVyKCZ2dDg1MDBfdWFydF9kcml2ZXIpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHZ0ODUwMF9zZXJpYWxfZXhpdCh2b2lkKQoreworI2lmZGVmIENPTkZJR19TRVJJQUxfVlQ4NTAwX0NPTlNPTEUKKwl1bnJlZ2lzdGVyX2NvbnNvbGUoJnZ0ODUwMF9jb25zb2xlKTsKKyNlbmRpZgorCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ2dDg1MDBfcGxhdGZvcm1fZHJpdmVyKTsKKwl1YXJ0X3VucmVnaXN0ZXJfZHJpdmVyKCZ2dDg1MDBfdWFydF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh2dDg1MDBfc2VyaWFsX2luaXQpOworbW9kdWxlX2V4aXQodnQ4NTAwX3NlcmlhbF9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiQWxleGV5IENoYXJrb3YgPGFsY2hhcmtAZ21haWwuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIHZ0ODUwMCBzZXJpYWwgZGV2aWNlIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9LY29uZmlnIGIvZHJpdmVycy9zcGkvS2NvbmZpZwppbmRleCA3OGY5ZmQwLi4xOTA2ODQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3BpL0tjb25maWcKQEAgLTExMSwxMSArMTExLDE0IEBACiAJICB3aWxsIGJlIGNhbGxlZCBjb2xkZmlyZV9xc3BpLgogCiBjb25maWcgU1BJX0RBVklOQ0kKLQl0cmlzdGF0ZSAiU1BJIGNvbnRyb2xsZXIgZHJpdmVyIGZvciBEYVZpbmNpL0RBOHh4IFNvQydzIgorCXRyaXN0YXRlICJUZXhhcyBJbnN0cnVtZW50cyBEYVZpbmNpL0RBOHgvT01BUC1ML0FNMXggU29DIFNQSSBjb250cm9sbGVyIgogCWRlcGVuZHMgb24gU1BJX01BU1RFUiAmJiBBUkNIX0RBVklOQ0kKIAlzZWxlY3QgU1BJX0JJVEJBTkcKIAloZWxwCi0JICBTUEkgbWFzdGVyIGNvbnRyb2xsZXIgZm9yIERhVmluY2kgYW5kIERBOHh4IFNQSSBtb2R1bGVzLgorCSAgU1BJIG1hc3RlciBjb250cm9sbGVyIGZvciBEYVZpbmNpL0RBOHgvT01BUC1ML0FNMXggU1BJIG1vZHVsZXMuCisKKwkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBUaGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkCisJICBkYXZpbmNpX3NwaS4KIAogY29uZmlnIFNQSV9FUDkzWFgKIAl0cmlzdGF0ZSAiQ2lycnVzIExvZ2ljIEVQOTN4eCBTUEkgY29udHJvbGxlciIKQEAgLTI2NywxMiArMjcwLDE1IEBACiAKIGNvbmZpZyBTUElfUFhBMlhYCiAJdHJpc3RhdGUgIlBYQTJ4eCBTU1AgU1BJIG1hc3RlciIKLQlkZXBlbmRzIG9uIEFSQ0hfUFhBICYmIEVYUEVSSU1FTlRBTAotCXNlbGVjdCBQWEFfU1NQCisJZGVwZW5kcyBvbiAoQVJDSF9QWEEgfHwgKFg4Nl8zMiAmJiBQQ0kpKSAmJiBFWFBFUklNRU5UQUwKKwlzZWxlY3QgUFhBX1NTUCBpZiBBUkNIX1BYQQogCWhlbHAKLQkgIFRoaXMgZW5hYmxlcyB1c2luZyBhIFBYQTJ4eCBTU1AgcG9ydCBhcyBhIFNQSSBtYXN0ZXIgY29udHJvbGxlci4KLQkgIFRoZSBkcml2ZXIgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gdXNlIGFueSBTU1AgcG9ydCBhbmQgYWRkaXRpb25hbAotCSAgZG9jdW1lbnRhdGlvbiBjYW4gYmUgZm91bmQgYSBEb2N1bWVudGF0aW9uL3NwaS9weGEyeHguCisJICBUaGlzIGVuYWJsZXMgdXNpbmcgYSBQWEEyeHggb3IgU29kYXZpbGxlIFNTUCBwb3J0IGFzIGEgU1BJIG1hc3RlcgorCSAgY29udHJvbGxlci4gVGhlIGRyaXZlciBjYW4gYmUgY29uZmlndXJlZCB0byB1c2UgYW55IFNTUCBwb3J0IGFuZAorCSAgYWRkaXRpb25hbCBkb2N1bWVudGF0aW9uIGNhbiBiZSBmb3VuZCBhIERvY3VtZW50YXRpb24vc3BpL3B4YTJ4eC4KKworY29uZmlnIFNQSV9QWEEyWFhfUENJCisJZGVmX2Jvb2wgU1BJX1BYQTJYWCAmJiBYODZfMzIgJiYgUENJCiAKIGNvbmZpZyBTUElfUzNDMjRYWAogCXRyaXN0YXRlICJTYW1zdW5nIFMzQzI0WFggc2VyaWVzIFNQSSIKQEAgLTM1Myw3ICszNTksNiBAQAogCXRyaXN0YXRlICJYaWxpbnggU1BJIGNvbnRyb2xsZXIgY29tbW9uIG1vZHVsZSIKIAlkZXBlbmRzIG9uIEhBU19JT01FTSAmJiBFWFBFUklNRU5UQUwKIAlzZWxlY3QgU1BJX0JJVEJBTkcKLQlzZWxlY3QgU1BJX1hJTElOWF9PRiBpZiAoWElMSU5YX1ZJUlRFWCB8fCBNSUNST0JMQVpFKQogCWhlbHAKIAkgIFRoaXMgZXhwb3NlcyB0aGUgU1BJIGNvbnRyb2xsZXIgSVAgZnJvbSB0aGUgWGlsaW54IEVESy4KIApAQCAtMzYyLDE5ICszNjcsNiBAQAogCiAJICBPciBmb3IgdGhlIERTNTcwLCBzZWUgIlhQUyBTZXJpYWwgUGVyaXBoZXJhbCBJbnRlcmZhY2UgKFNQSSkgKHYyLjAwYikiCiAKLWNvbmZpZyBTUElfWElMSU5YX09GCi0JdHJpc3RhdGUgIlhpbGlueCBTUEkgY29udHJvbGxlciBPRiBkZXZpY2UiCi0JZGVwZW5kcyBvbiBTUElfWElMSU5YICYmIChYSUxJTlhfVklSVEVYIHx8IE1JQ1JPQkxBWkUpCi0JaGVscAotCSAgVGhpcyBpcyB0aGUgT0YgZHJpdmVyIGZvciB0aGUgU1BJIGNvbnRyb2xsZXIgSVAgZnJvbSB0aGUgWGlsaW54IEVESy4KLQotY29uZmlnIFNQSV9YSUxJTlhfUExURk0KLQl0cmlzdGF0ZSAiWGlsaW54IFNQSSBjb250cm9sbGVyIHBsYXRmb3JtIGRldmljZSIKLQlkZXBlbmRzIG9uIFNQSV9YSUxJTlgKLQloZWxwCi0JICBUaGlzIGlzIHRoZSBwbGF0Zm9ybSBkcml2ZXIgZm9yIHRoZSBTUEkgY29udHJvbGxlciBJUAotCSAgZnJvbSB0aGUgWGlsaW54IEVESy4KLQogY29uZmlnIFNQSV9OVUM5MDAKIAl0cmlzdGF0ZSAiTnV2b3RvbiBOVUM5MDAgc2VyaWVzIFNQSSIKIAlkZXBlbmRzIG9uIEFSQ0hfVzkwWDkwMCAmJiBFWFBFUklNRU5UQUwKQEAgLTM5Niw2ICszODgsMTAgQEAKIAl0cmlzdGF0ZSAiUENJIGludGVyZmFjZSBkcml2ZXIgZm9yIERXIFNQSSBjb3JlIgogCWRlcGVuZHMgb24gU1BJX0RFU0lHTldBUkUgJiYgUENJCiAKK2NvbmZpZyBTUElfRFdfTUlEX0RNQQorCWJvb2wgIkRNQSBzdXBwb3J0IGZvciBEVyBTUEkgY29udHJvbGxlciBvbiBJbnRlbCBNb29yZXN0b3duIHBsYXRmb3JtIgorCWRlcGVuZHMgb24gU1BJX0RXX1BDSSAmJiBJTlRFTF9NSURfRE1BQworCiBjb25maWcgU1BJX0RXX01NSU8KIAl0cmlzdGF0ZSAiTWVtb3J5LW1hcHBlZCBpbyBpbnRlcmZhY2UgZHJpdmVyIGZvciBEVyBTUEkgY29yZSIKIAlkZXBlbmRzIG9uIFNQSV9ERVNJR05XQVJFICYmIEhBVkVfQ0xLCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9NYWtlZmlsZSBiL2RyaXZlcnMvc3BpL01ha2VmaWxlCmluZGV4IDhiYzFhNWEuLjNhNDI0NjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc3BpL01ha2VmaWxlCkBAIC0xNywxMyArMTcsMTUgQEAKIG9iai0kKENPTkZJR19TUElfQ09MREZJUkVfUVNQSSkJCSs9IGNvbGRmaXJlX3FzcGkubwogb2JqLSQoQ09ORklHX1NQSV9EQVZJTkNJKQkJKz0gZGF2aW5jaV9zcGkubwogb2JqLSQoQ09ORklHX1NQSV9ERVNJR05XQVJFKQkJKz0gZHdfc3BpLm8KLW9iai0kKENPTkZJR19TUElfRFdfUENJKQkJKz0gZHdfc3BpX3BjaS5vCitvYmotJChDT05GSUdfU1BJX0RXX1BDSSkJCSs9IGR3X3NwaV9taWRwY2kubworZHdfc3BpX21pZHBjaS1vYmpzCQkJOj0gZHdfc3BpX3BjaS5vIGR3X3NwaV9taWQubwogb2JqLSQoQ09ORklHX1NQSV9EV19NTUlPKQkJKz0gZHdfc3BpX21taW8ubwogb2JqLSQoQ09ORklHX1NQSV9FUDkzWFgpCQkrPSBlcDkzeHhfc3BpLm8KIG9iai0kKENPTkZJR19TUElfR1BJTykJCQkrPSBzcGlfZ3Bpby5vCiBvYmotJChDT05GSUdfU1BJX0lNWCkJCQkrPSBzcGlfaW14Lm8KIG9iai0kKENPTkZJR19TUElfTE03MF9MTFApCQkrPSBzcGlfbG03MGxscC5vCiBvYmotJChDT05GSUdfU1BJX1BYQTJYWCkJCSs9IHB4YTJ4eF9zcGkubworb2JqLSQoQ09ORklHX1NQSV9QWEEyWFhfUENJKQkJKz0gcHhhMnh4X3NwaV9wY2kubwogb2JqLSQoQ09ORklHX1NQSV9PTUFQX1VXSVJFKQkJKz0gb21hcF91d2lyZS5vCiBvYmotJChDT05GSUdfU1BJX09NQVAyNFhYKQkJKz0gb21hcDJfbWNzcGkubwogb2JqLSQoQ09ORklHX1NQSV9PTUFQXzEwMEspCQkrPSBvbWFwX3NwaV8xMDBrLm8KQEAgLTQzLDggKzQ1LDYgQEAKIG9iai0kKENPTkZJR19TUElfVE9QQ0xJRkZfUENIKQkJKz0gc3BpX3RvcGNsaWZmX3BjaC5vCiBvYmotJChDT05GSUdfU1BJX1RYWDkpCQkJKz0gc3BpX3R4eDkubwogb2JqLSQoQ09ORklHX1NQSV9YSUxJTlgpCQkrPSB4aWxpbnhfc3BpLm8KLW9iai0kKENPTkZJR19TUElfWElMSU5YX09GKQkJKz0geGlsaW54X3NwaV9vZi5vCi1vYmotJChDT05GSUdfU1BJX1hJTElOWF9QTFRGTSkJCSs9IHhpbGlueF9zcGlfcGx0Zm0ubwogb2JqLSQoQ09ORklHX1NQSV9TSF9TQ0kpCQkrPSBzcGlfc2hfc2NpLm8KIG9iai0kKENPTkZJR19TUElfU0hfTVNJT0YpCQkrPSBzcGlfc2hfbXNpb2Yubwogb2JqLSQoQ09ORklHX1NQSV9TVE1QM1hYWCkJCSs9IHNwaV9zdG1wLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL2FtYmEtcGwwMjIuYyBiL2RyaXZlcnMvc3BpL2FtYmEtcGwwMjIuYwppbmRleCBmYjNkMWIzLi5hMmE1OTIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9hbWJhLXBsMDIyLmMKKysrIGIvZHJpdmVycy9zcGkvYW1iYS1wbDAyMi5jCkBAIC0yNTMsMTEgKzI1Myw2IEBACiAjZGVmaW5lIFNUQVRFX0VSUk9SCQkJKCh2b2lkICopIC0xKQogCiAvKgotICogUXVldWUgU3RhdGUKLSAqLwotI2RlZmluZSBRVUVVRV9SVU5OSU5HCQkJKDApCi0jZGVmaW5lIFFVRVVFX1NUT1BQRUQJCQkoMSkKLS8qCiAgKiBTU1AgU3RhdGUgLSBXaGV0aGVyIEVuYWJsZWQgb3IgRGlzYWJsZWQKICAqLwogI2RlZmluZSBTU1BfRElTQUJMRUQJCQkoMCkKQEAgLTM0NCw3ICszMzksNyBAQAogICogQGxvY2s6IHNwaW5sb2NrIHRvIHN5bmNyb25pc2UgYWNjZXNzIHRvIGRyaXZlciBkYXRhCiAgKiBAd29ya3F1ZXVlOiBhIHdvcmtxdWV1ZSBvbiB3aGljaCBhbnkgc3BpX21lc3NhZ2UgcmVxdWVzdCBpcyBxdWV1ZWQKICAqIEBidXN5OiB3b3JrcXVldWUgaXMgYnVzeQotICogQHJ1bjogd29ya3F1ZXVlIGlzIHJ1bm5pbmcKKyAqIEBydW5uaW5nOiB3b3JrcXVldWUgaXMgcnVubmluZwogICogQHB1bXBfdHJhbnNmZXJzOiBUYXNrbGV0IHVzZWQgaW4gSW50ZXJydXB0IFRyYW5zZmVyIG1vZGUKICAqIEBjdXJfbXNnOiBQb2ludGVyIHRvIGN1cnJlbnQgc3BpX21lc3NhZ2UgYmVpbmcgcHJvY2Vzc2VkCiAgKiBAY3VyX3RyYW5zZmVyOiBQb2ludGVyIHRvIGN1cnJlbnQgc3BpX3RyYW5zZmVyCkBAIC0zNjksOCArMzY0LDggQEAKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QJCXB1bXBfbWVzc2FnZXM7CiAJc3BpbmxvY2tfdAkJCXF1ZXVlX2xvY2s7CiAJc3RydWN0IGxpc3RfaGVhZAkJcXVldWU7Ci0JaW50CQkJCWJ1c3k7Ci0JaW50CQkJCXJ1bjsKKwlib29sCQkJCWJ1c3k7CisJYm9vbAkJCQlydW5uaW5nOwogCS8qIE1lc3NhZ2UgdHJhbnNmZXIgcHVtcCAqLwogCXN0cnVjdCB0YXNrbGV0X3N0cnVjdAkJcHVtcF90cmFuc2ZlcnM7CiAJc3RydWN0IHNwaV9tZXNzYWdlCQkqY3VyX21zZzsKQEAgLTc4Miw5ICs3NzcsOSBAQAogc3RhdGljIHZvaWQgdW5tYXBfZnJlZV9kbWFfc2NhdHRlcihzdHJ1Y3QgcGwwMjIgKnBsMDIyKQogewogCS8qIFVubWFwIGFuZCBmcmVlIHRoZSBTRyB0YWJsZXMgKi8KLQlkbWFfdW5tYXBfc2coJnBsMDIyLT5hZGV2LT5kZXYsIHBsMDIyLT5zZ3RfdHguc2dsLAorCWRtYV91bm1hcF9zZyhwbDAyMi0+ZG1hX3R4X2NoYW5uZWwtPmRldmljZS0+ZGV2LCBwbDAyMi0+c2d0X3R4LnNnbCwKIAkJICAgICBwbDAyMi0+c2d0X3R4Lm5lbnRzLCBETUFfVE9fREVWSUNFKTsKLQlkbWFfdW5tYXBfc2coJnBsMDIyLT5hZGV2LT5kZXYsIHBsMDIyLT5zZ3Rfcnguc2dsLAorCWRtYV91bm1hcF9zZyhwbDAyMi0+ZG1hX3J4X2NoYW5uZWwtPmRldmljZS0+ZGV2LCBwbDAyMi0+c2d0X3J4LnNnbCwKIAkJICAgICBwbDAyMi0+c2d0X3J4Lm5lbnRzLCBETUFfRlJPTV9ERVZJQ0UpOwogCXNnX2ZyZWVfdGFibGUoJnBsMDIyLT5zZ3RfcngpOwogCXNnX2ZyZWVfdGFibGUoJnBsMDIyLT5zZ3RfdHgpOwpAQCAtOTE3LDcgKzkxMiw3IEBACiAJfTsKIAl1bnNpZ25lZCBpbnQgcGFnZXM7CiAJaW50IHJldDsKLQlpbnQgc2dsZW47CisJaW50IHJ4X3NnbGVuLCB0eF9zZ2xlbjsKIAlzdHJ1Y3QgZG1hX2NoYW4gKnJ4Y2hhbiA9IHBsMDIyLT5kbWFfcnhfY2hhbm5lbDsKIAlzdHJ1Y3QgZG1hX2NoYW4gKnR4Y2hhbiA9IHBsMDIyLT5kbWFfdHhfY2hhbm5lbDsKIAlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnJ4ZGVzYzsKQEAgLTk1Niw3ICs5NTEsNyBAQAogCQl0eF9jb25mLmRzdF9hZGRyX3dpZHRoID0gRE1BX1NMQVZFX0JVU1dJRFRIXzJfQllURVM7CiAJCWJyZWFrOwogCWNhc2UgV1JJVElOR19VMzI6Ci0JCXR4X2NvbmYuZHN0X2FkZHJfd2lkdGggPSBETUFfU0xBVkVfQlVTV0lEVEhfNF9CWVRFUzs7CisJCXR4X2NvbmYuZHN0X2FkZHJfd2lkdGggPSBETUFfU0xBVkVfQlVTV0lEVEhfNF9CWVRFUzsKIAkJYnJlYWs7CiAJfQogCkBAIC05OTEsMjAgKzk4NiwyMCBAQAogCQkJICBwbDAyMi0+Y3VyX3RyYW5zZmVyLT5sZW4sICZwbDAyMi0+c2d0X3R4KTsKIAogCS8qIE1hcCBETUEgYnVmZmVycyAqLwotCXNnbGVuID0gZG1hX21hcF9zZygmcGwwMjItPmFkZXYtPmRldiwgcGwwMjItPnNndF9yeC5zZ2wsCisJcnhfc2dsZW4gPSBkbWFfbWFwX3NnKHJ4Y2hhbi0+ZGV2aWNlLT5kZXYsIHBsMDIyLT5zZ3Rfcnguc2dsLAogCQkJICAgcGwwMjItPnNndF9yeC5uZW50cywgRE1BX0ZST01fREVWSUNFKTsKLQlpZiAoIXNnbGVuKQorCWlmICghcnhfc2dsZW4pCiAJCWdvdG8gZXJyX3J4X3NnbWFwOwogCi0Jc2dsZW4gPSBkbWFfbWFwX3NnKCZwbDAyMi0+YWRldi0+ZGV2LCBwbDAyMi0+c2d0X3R4LnNnbCwKKwl0eF9zZ2xlbiA9IGRtYV9tYXBfc2codHhjaGFuLT5kZXZpY2UtPmRldiwgcGwwMjItPnNndF90eC5zZ2wsCiAJCQkgICBwbDAyMi0+c2d0X3R4Lm5lbnRzLCBETUFfVE9fREVWSUNFKTsKLQlpZiAoIXNnbGVuKQorCWlmICghdHhfc2dsZW4pCiAJCWdvdG8gZXJyX3R4X3NnbWFwOwogCiAJLyogU2VuZCBib3RoIHNjYXR0ZXJsaXN0cyAqLwogCXJ4ZGVzYyA9IHJ4Y2hhbi0+ZGV2aWNlLT5kZXZpY2VfcHJlcF9zbGF2ZV9zZyhyeGNoYW4sCiAJCQkJICAgICAgcGwwMjItPnNndF9yeC5zZ2wsCi0JCQkJICAgICAgcGwwMjItPnNndF9yeC5uZW50cywKKwkJCQkgICAgICByeF9zZ2xlbiwKIAkJCQkgICAgICBETUFfRlJPTV9ERVZJQ0UsCiAJCQkJICAgICAgRE1BX1BSRVBfSU5URVJSVVBUIHwgRE1BX0NUUkxfQUNLKTsKIAlpZiAoIXJ4ZGVzYykKQEAgLTEwMTIsNyArMTAwNyw3IEBACiAKIAl0eGRlc2MgPSB0eGNoYW4tPmRldmljZS0+ZGV2aWNlX3ByZXBfc2xhdmVfc2codHhjaGFuLAogCQkJCSAgICAgIHBsMDIyLT5zZ3RfdHguc2dsLAotCQkJCSAgICAgIHBsMDIyLT5zZ3RfdHgubmVudHMsCisJCQkJICAgICAgdHhfc2dsZW4sCiAJCQkJICAgICAgRE1BX1RPX0RFVklDRSwKIAkJCQkgICAgICBETUFfUFJFUF9JTlRFUlJVUFQgfCBETUFfQ1RSTF9BQ0spOwogCWlmICghdHhkZXNjKQpAQCAtMTA0MCwxMCArMTAzNSwxMCBAQAogCXR4Y2hhbi0+ZGV2aWNlLT5kZXZpY2VfY29udHJvbCh0eGNoYW4sIERNQV9URVJNSU5BVEVfQUxMLCAwKTsKIGVycl9yeGRlc2M6CiAJcnhjaGFuLT5kZXZpY2UtPmRldmljZV9jb250cm9sKHJ4Y2hhbiwgRE1BX1RFUk1JTkFURV9BTEwsIDApOwotCWRtYV91bm1hcF9zZygmcGwwMjItPmFkZXYtPmRldiwgcGwwMjItPnNndF90eC5zZ2wsCisJZG1hX3VubWFwX3NnKHR4Y2hhbi0+ZGV2aWNlLT5kZXYsIHBsMDIyLT5zZ3RfdHguc2dsLAogCQkgICAgIHBsMDIyLT5zZ3RfdHgubmVudHMsIERNQV9UT19ERVZJQ0UpOwogZXJyX3R4X3NnbWFwOgotCWRtYV91bm1hcF9zZygmcGwwMjItPmFkZXYtPmRldiwgcGwwMjItPnNndF9yeC5zZ2wsCisJZG1hX3VubWFwX3NnKHJ4Y2hhbi0+ZGV2aWNlLT5kZXYsIHBsMDIyLT5zZ3Rfcnguc2dsLAogCQkgICAgIHBsMDIyLT5zZ3RfdHgubmVudHMsIERNQV9GUk9NX0RFVklDRSk7CiBlcnJfcnhfc2dtYXA6CiAJc2dfZnJlZV90YWJsZSgmcGwwMjItPnNndF90eCk7CkBAIC0xNDYwLDggKzE0NTUsOCBAQAogCiAJLyogTG9jayBxdWV1ZSBhbmQgY2hlY2sgZm9yIHF1ZXVlIHdvcmsgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmcGwwMjItPnF1ZXVlX2xvY2ssIGZsYWdzKTsKLQlpZiAobGlzdF9lbXB0eSgmcGwwMjItPnF1ZXVlKSB8fCBwbDAyMi0+cnVuID09IFFVRVVFX1NUT1BQRUQpIHsKLQkJcGwwMjItPmJ1c3kgPSAwOworCWlmIChsaXN0X2VtcHR5KCZwbDAyMi0+cXVldWUpIHx8ICFwbDAyMi0+cnVubmluZykgeworCQlwbDAyMi0+YnVzeSA9IGZhbHNlOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbDAyMi0+cXVldWVfbG9jaywgZmxhZ3MpOwogCQlyZXR1cm47CiAJfQpAQCAtMTQ3NSw3ICsxNDcwLDcgQEAKIAkgICAgbGlzdF9lbnRyeShwbDAyMi0+cXVldWUubmV4dCwgc3RydWN0IHNwaV9tZXNzYWdlLCBxdWV1ZSk7CiAKIAlsaXN0X2RlbF9pbml0KCZwbDAyMi0+Y3VyX21zZy0+cXVldWUpOwotCXBsMDIyLT5idXN5ID0gMTsKKwlwbDAyMi0+YnVzeSA9IHRydWU7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGwwMjItPnF1ZXVlX2xvY2ssIGZsYWdzKTsKIAogCS8qIEluaXRpYWwgbWVzc2FnZSBzdGF0ZSAqLwpAQCAtMTUwNyw4ICsxNTAyLDggQEAKIAlJTklUX0xJU1RfSEVBRCgmcGwwMjItPnF1ZXVlKTsKIAlzcGluX2xvY2tfaW5pdCgmcGwwMjItPnF1ZXVlX2xvY2spOwogCi0JcGwwMjItPnJ1biA9IFFVRVVFX1NUT1BQRUQ7Ci0JcGwwMjItPmJ1c3kgPSAwOworCXBsMDIyLT5ydW5uaW5nID0gZmFsc2U7CisJcGwwMjItPmJ1c3kgPSBmYWxzZTsKIAogCXRhc2tsZXRfaW5pdCgmcGwwMjItPnB1bXBfdHJhbnNmZXJzLAogCQkJcHVtcF90cmFuc2ZlcnMsCSh1bnNpZ25lZCBsb25nKXBsMDIyKTsKQEAgLTE1MjksMTIgKzE1MjQsMTIgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwbDAyMi0+cXVldWVfbG9jaywgZmxhZ3MpOwogCi0JaWYgKHBsMDIyLT5ydW4gPT0gUVVFVUVfUlVOTklORyB8fCBwbDAyMi0+YnVzeSkgeworCWlmIChwbDAyMi0+cnVubmluZyB8fCBwbDAyMi0+YnVzeSkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbDAyMi0+cXVldWVfbG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAotCXBsMDIyLT5ydW4gPSBRVUVVRV9SVU5OSU5HOworCXBsMDIyLT5ydW5uaW5nID0gdHJ1ZTsKIAlwbDAyMi0+Y3VyX21zZyA9IE5VTEw7CiAJcGwwMjItPmN1cl90cmFuc2ZlciA9IE5VTEw7CiAJcGwwMjItPmN1cl9jaGlwID0gTlVMTDsKQEAgLTE1NjYsNyArMTU2MSw4IEBACiAKIAlpZiAoIWxpc3RfZW1wdHkoJnBsMDIyLT5xdWV1ZSkgfHwgcGwwMjItPmJ1c3kpCiAJCXN0YXR1cyA9IC1FQlVTWTsKLQllbHNlIHBsMDIyLT5ydW4gPSBRVUVVRV9TVE9QUEVEOworCWVsc2UKKwkJcGwwMjItPnJ1bm5pbmcgPSBmYWxzZTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBsMDIyLT5xdWV1ZV9sb2NrLCBmbGFncyk7CiAKQEAgLTE2ODQsNyArMTY4MCw3IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcGwwMjItPnF1ZXVlX2xvY2ssIGZsYWdzKTsKIAotCWlmIChwbDAyMi0+cnVuID09IFFVRVVFX1NUT1BQRUQpIHsKKwlpZiAoIXBsMDIyLT5ydW5uaW5nKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBsMDIyLT5xdWV1ZV9sb2NrLCBmbGFncyk7CiAJCXJldHVybiAtRVNIVVRET1dOOwogCX0KQEAgLTE2OTMsNyArMTY4OSw3IEBACiAJbXNnLT5zdGF0ZSA9IFNUQVRFX1NUQVJUOwogCiAJbGlzdF9hZGRfdGFpbCgmbXNnLT5xdWV1ZSwgJnBsMDIyLT5xdWV1ZSk7Ci0JaWYgKHBsMDIyLT5ydW4gPT0gUVVFVUVfUlVOTklORyAmJiAhcGwwMjItPmJ1c3kpCisJaWYgKHBsMDIyLT5ydW5uaW5nICYmICFwbDAyMi0+YnVzeSkKIAkJcXVldWVfd29yayhwbDAyMi0+d29ya3F1ZXVlLCAmcGwwMjItPnB1bXBfbWVzc2FnZXMpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGwwMjItPnF1ZXVlX2xvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL2RhdmluY2lfc3BpLmMgYi9kcml2ZXJzL3NwaS9kYXZpbmNpX3NwaS5jCmluZGV4IGI4NTA5MGMuLjZiZWFiOTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL2RhdmluY2lfc3BpLmMKKysrIGIvZHJpdmVycy9zcGkvZGF2aW5jaV9zcGkuYwpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGV4YXMgSW5zdHJ1bWVudHMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgRUYgSm9obnNvbiBUZWNobm9sb2dpZXMKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTM4LDExICszOSw2IEBACiAKICNkZWZpbmUgQ1NfREVGQVVMVAkweEZGCiAKLSNkZWZpbmUgU1BJX0JVRlNJWgkoU01QX0NBQ0hFX0JZVEVTICsgMSkKLSNkZWZpbmUgREFWSU5DSV9ETUFfREFUQV9UWVBFX1M4CTB4MDEKLSNkZWZpbmUgREFWSU5DSV9ETUFfREFUQV9UWVBFX1MxNgkweDAyCi0jZGVmaW5lIERBVklOQ0lfRE1BX0RBVEFfVFlQRV9TMzIJMHgwNAotCiAjZGVmaW5lIFNQSUZNVF9QSEFTRV9NQVNLCUJJVCgxNikKICNkZWZpbmUgU1BJRk1UX1BPTEFSSVRZX01BU0sJQklUKDE3KQogI2RlZmluZSBTUElGTVRfRElTVElNRVJfTUFTSwlCSVQoMTgpCkBAIC01MiwzNCArNDgsNDMgQEAKICNkZWZpbmUgU1BJRk1UX09ERF9QQVJJVFlfTUFTSwlCSVQoMjMpCiAjZGVmaW5lIFNQSUZNVF9XREVMQVlfTUFTSwkweDNmMDAwMDAwdQogI2RlZmluZSBTUElGTVRfV0RFTEFZX1NISUZUCTI0Ci0jZGVmaW5lIFNQSUZNVF9DSEFSTEVOX01BU0sJMHgwMDAwMDAxRnUKLQotLyogU1BJR0NSMSAqLwotI2RlZmluZSBTUElHQ1IxX1NQSUVOQV9NQVNLCTB4MDEwMDAwMDB1CisjZGVmaW5lIFNQSUZNVF9QUkVTQ0FMRV9TSElGVAk4CiAKIC8qIFNQSVBDMCAqLwogI2RlZmluZSBTUElQQzBfRElGVU5fTUFTSwlCSVQoMTEpCQkvKiBNSVNPICovCiAjZGVmaW5lIFNQSVBDMF9ET0ZVTl9NQVNLCUJJVCgxMCkJCS8qIE1PU0kgKi8KICNkZWZpbmUgU1BJUEMwX0NMS0ZVTl9NQVNLCUJJVCg5KQkJLyogQ0xLICovCiAjZGVmaW5lIFNQSVBDMF9TUElFTkFfTUFTSwlCSVQoOCkJCS8qIG5SRUFEWSAqLwotI2RlZmluZSBTUElQQzBfRU4xRlVOX01BU0sJQklUKDEpCi0jZGVmaW5lIFNQSVBDMF9FTjBGVU5fTUFTSwlCSVQoMCkKIAogI2RlZmluZSBTUElJTlRfTUFTS0FMTAkJMHgwMTAxMDM1RgotI2RlZmluZSBTUElfSU5UTFZMXzEJCTB4MDAwMDAxRkZ1Ci0jZGVmaW5lIFNQSV9JTlRMVkxfMAkJMHgwMDAwMDAwMHUKKyNkZWZpbmUgU1BJSU5UX01BU0tJTlQJCTB4MDAwMDAxNUYKKyNkZWZpbmUgU1BJX0lOVExWTF8xCQkweDAwMDAwMUZGCisjZGVmaW5lIFNQSV9JTlRMVkxfMAkJMHgwMDAwMDAwMAogCi0vKiBTUElEQVQxICovCi0jZGVmaW5lIFNQSURBVDFfQ1NIT0xEX1NISUZUCTI4Ci0jZGVmaW5lIFNQSURBVDFfQ1NOUl9TSElGVAkxNgorLyogU1BJREFUMSAodXBwZXIgMTYgYml0IGRlZmluZXMpICovCisjZGVmaW5lIFNQSURBVDFfQ1NIT0xEX01BU0sJQklUKDEyKQorCisvKiBTUElHQ1IxICovCiAjZGVmaW5lIFNQSUdDUjFfQ0xLTU9EX01BU0sJQklUKDEpCiAjZGVmaW5lIFNQSUdDUjFfTUFTVEVSX01BU0sgICAgIEJJVCgwKQorI2RlZmluZSBTUElHQ1IxX1BPV0VSRE9XTl9NQVNLCUJJVCg4KQogI2RlZmluZSBTUElHQ1IxX0xPT1BCQUNLX01BU0sJQklUKDE2KQorI2RlZmluZSBTUElHQ1IxX1NQSUVOQV9NQVNLCUJJVCgyNCkKIAogLyogU1BJQlVGICovCiAjZGVmaW5lIFNQSUJVRl9UWEZVTExfTUFTSwlCSVQoMjkpCiAjZGVmaW5lIFNQSUJVRl9SWEVNUFRZX01BU0sJQklUKDMxKQogCisvKiBTUElERUxBWSAqLworI2RlZmluZSBTUElERUxBWV9DMlRERUxBWV9TSElGVCAyNAorI2RlZmluZSBTUElERUxBWV9DMlRERUxBWV9NQVNLICAoMHhGRiA8PCBTUElERUxBWV9DMlRERUxBWV9TSElGVCkKKyNkZWZpbmUgU1BJREVMQVlfVDJDREVMQVlfU0hJRlQgMTYKKyNkZWZpbmUgU1BJREVMQVlfVDJDREVMQVlfTUFTSyAgKDB4RkYgPDwgU1BJREVMQVlfVDJDREVMQVlfU0hJRlQpCisjZGVmaW5lIFNQSURFTEFZX1QyRURFTEFZX1NISUZUIDgKKyNkZWZpbmUgU1BJREVMQVlfVDJFREVMQVlfTUFTSyAgKDB4RkYgPDwgU1BJREVMQVlfVDJFREVMQVlfU0hJRlQpCisjZGVmaW5lIFNQSURFTEFZX0MyRURFTEFZX1NISUZUIDAKKyNkZWZpbmUgU1BJREVMQVlfQzJFREVMQVlfTUFTSyAgMHhGRgorCiAvKiBFcnJvciBNYXNrcyAqLwogI2RlZmluZSBTUElGTEdfRExFTl9FUlJfTUFTSwkJQklUKDApCiAjZGVmaW5lIFNQSUZMR19USU1FT1VUX01BU0sJCUJJVCgxKQpAQCAtODcsMjkgKzkyLDEzIEBACiAjZGVmaW5lIFNQSUZMR19ERVNZTkNfTUFTSwkJQklUKDMpCiAjZGVmaW5lIFNQSUZMR19CSVRFUlJfTUFTSwkJQklUKDQpCiAjZGVmaW5lIFNQSUZMR19PVlJSVU5fTUFTSwkJQklUKDYpCi0jZGVmaW5lIFNQSUZMR19SWF9JTlRSX01BU0sJCUJJVCg4KQotI2RlZmluZSBTUElGTEdfVFhfSU5UUl9NQVNLCQlCSVQoOSkKICNkZWZpbmUgU1BJRkxHX0JVRl9JTklUX0FDVElWRV9NQVNLCUJJVCgyNCkKLSNkZWZpbmUgU1BJRkxHX01BU0sJCQkoU1BJRkxHX0RMRU5fRVJSX01BU0sgXAorI2RlZmluZSBTUElGTEdfRVJST1JfTUFTSwkJKFNQSUZMR19ETEVOX0VSUl9NQVNLIFwKIAkJCQl8IFNQSUZMR19USU1FT1VUX01BU0sgfCBTUElGTEdfUEFSRVJSX01BU0sgXAogCQkJCXwgU1BJRkxHX0RFU1lOQ19NQVNLIHwgU1BJRkxHX0JJVEVSUl9NQVNLIFwKLQkJCQl8IFNQSUZMR19PVlJSVU5fTUFTSyB8IFNQSUZMR19SWF9JTlRSX01BU0sgXAotCQkJCXwgU1BJRkxHX1RYX0lOVFJfTUFTSyBcCi0JCQkJfCBTUElGTEdfQlVGX0lOSVRfQUNUSVZFX01BU0spCisJCQkJfCBTUElGTEdfT1ZSUlVOX01BU0spCiAKLSNkZWZpbmUgU1BJSU5UX0RMRU5fRVJSX0lOVFIJQklUKDApCi0jZGVmaW5lIFNQSUlOVF9USU1FT1VUX0lOVFIJQklUKDEpCi0jZGVmaW5lIFNQSUlOVF9QQVJFUlJfSU5UUglCSVQoMikKLSNkZWZpbmUgU1BJSU5UX0RFU1lOQ19JTlRSCUJJVCgzKQotI2RlZmluZSBTUElJTlRfQklURVJSX0lOVFIJQklUKDQpCi0jZGVmaW5lIFNQSUlOVF9PVlJSVU5fSU5UUglCSVQoNikKLSNkZWZpbmUgU1BJSU5UX1JYX0lOVFIJCUJJVCg4KQotI2RlZmluZSBTUElJTlRfVFhfSU5UUgkJQklUKDkpCiAjZGVmaW5lIFNQSUlOVF9ETUFfUkVRX0VOCUJJVCgxNikKLSNkZWZpbmUgU1BJSU5UX0VOQUJMRV9ISUdIWglCSVQoMjQpCi0KLSNkZWZpbmUgU1BJX1QyQ0RFTEFZX1NISUZUCTE2Ci0jZGVmaW5lIFNQSV9DMlRERUxBWV9TSElGVAkyNAogCiAvKiBTUEkgQ29udHJvbGxlciByZWdpc3RlcnMgKi8KICNkZWZpbmUgU1BJR0NSMAkJMHgwMApAQCAtMTE4LDQ0ICsxMDcsMTggQEAKICNkZWZpbmUgU1BJTFZMCQkweDBjCiAjZGVmaW5lIFNQSUZMRwkJMHgxMAogI2RlZmluZSBTUElQQzAJCTB4MTQKLSNkZWZpbmUgU1BJUEMxCQkweDE4Ci0jZGVmaW5lIFNQSVBDMgkJMHgxYwotI2RlZmluZSBTUElQQzMJCTB4MjAKLSNkZWZpbmUgU1BJUEM0CQkweDI0Ci0jZGVmaW5lIFNQSVBDNQkJMHgyOAotI2RlZmluZSBTUElQQzYJCTB4MmMKLSNkZWZpbmUgU1BJUEM3CQkweDMwCi0jZGVmaW5lIFNQSVBDOAkJMHgzNAotI2RlZmluZSBTUElEQVQwCQkweDM4CiAjZGVmaW5lIFNQSURBVDEJCTB4M2MKICNkZWZpbmUgU1BJQlVGCQkweDQwCi0jZGVmaW5lIFNQSUVNVQkJMHg0NAogI2RlZmluZSBTUElERUxBWQkweDQ4CiAjZGVmaW5lIFNQSURFRgkJMHg0YwogI2RlZmluZSBTUElGTVQwCQkweDUwCi0jZGVmaW5lIFNQSUZNVDEJCTB4NTQKLSNkZWZpbmUgU1BJRk1UMgkJMHg1OAotI2RlZmluZSBTUElGTVQzCQkweDVjCi0jZGVmaW5lIFRHSU5UVkVDMAkweDYwCi0jZGVmaW5lIFRHSU5UVkVDMQkweDY0Ci0KLXN0cnVjdCBkYXZpbmNpX3NwaV9zbGF2ZSB7Ci0JdTMyCWNtZF90b193cml0ZTsKLQl1MzIJY2xrX2N0cmxfdG9fd3JpdGU7Ci0JdTMyCWJ5dGVzX3Blcl93b3JkOwotCXU4CWFjdGl2ZV9jczsKLX07CiAKIC8qIFdlIGhhdmUgMiBETUEgY2hhbm5lbHMgcGVyIENTLCBvbmUgZm9yIFJYIGFuZCBvbmUgZm9yIFRYICovCiBzdHJ1Y3QgZGF2aW5jaV9zcGlfZG1hIHsKLQlpbnQJCQlkbWFfdHhfY2hhbm5lbDsKLQlpbnQJCQlkbWFfcnhfY2hhbm5lbDsKLQlpbnQJCQlkbWFfdHhfc3luY19kZXY7Ci0JaW50CQkJZG1hX3J4X3N5bmNfZGV2OworCWludAkJCXR4X2NoYW5uZWw7CisJaW50CQkJcnhfY2hhbm5lbDsKKwlpbnQJCQlkdW1teV9wYXJhbV9zbG90OwogCWVudW0gZG1hX2V2ZW50X3EJZXZlbnRxOwotCi0Jc3RydWN0IGNvbXBsZXRpb24JZG1hX3R4X2NvbXBsZXRpb247Ci0Jc3RydWN0IGNvbXBsZXRpb24JZG1hX3J4X2NvbXBsZXRpb247CiB9OwogCiAvKiBTUEkgQ29udHJvbGxlciBkcml2ZXIncyBwcml2YXRlIGRhdGEuICovCkBAIC0xNjYsNTggKzEyOSw2MyBAQAogCXU4CQkJdmVyc2lvbjsKIAlyZXNvdXJjZV9zaXplX3QJCXBiYXNlOwogCXZvaWQgX19pb21lbQkJKmJhc2U7Ci0Jc2l6ZV90CQkJcmVnaW9uX3NpemU7CiAJdTMyCQkJaXJxOwogCXN0cnVjdCBjb21wbGV0aW9uCWRvbmU7CiAKIAljb25zdCB2b2lkCQkqdHg7CiAJdm9pZAkJCSpyeDsKLQl1OAkJCSp0bXBfYnVmOwotCWludAkJCWNvdW50OwotCXN0cnVjdCBkYXZpbmNpX3NwaV9kbWEJKmRtYV9jaGFubmVsczsKLQlzdHJ1Y3QJCQlkYXZpbmNpX3NwaV9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKyNkZWZpbmUgU1BJX1RNUF9CVUZTWgkoU01QX0NBQ0hFX0JZVEVTICsgMSkKKwl1OAkJCXJ4X3RtcF9idWZbU1BJX1RNUF9CVUZTWl07CisJaW50CQkJcmNvdW50OworCWludAkJCXdjb3VudDsKKwlzdHJ1Y3QgZGF2aW5jaV9zcGlfZG1hCWRtYTsKKwlzdHJ1Y3QgZGF2aW5jaV9zcGlfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CiAKIAl2b2lkCQkJKCpnZXRfcngpKHUzMiByeF9kYXRhLCBzdHJ1Y3QgZGF2aW5jaV9zcGkgKik7CiAJdTMyCQkJKCpnZXRfdHgpKHN0cnVjdCBkYXZpbmNpX3NwaSAqKTsKIAotCXN0cnVjdCBkYXZpbmNpX3NwaV9zbGF2ZSBzbGF2ZVtTUElfTUFYX0NISVBTRUxFQ1RdOworCXU4CQkJYnl0ZXNfcGVyX3dvcmRbU1BJX01BWF9DSElQU0VMRUNUXTsKIH07CiAKLXN0YXRpYyB1bnNpZ25lZCB1c2VfZG1hOworc3RhdGljIHN0cnVjdCBkYXZpbmNpX3NwaV9jb25maWcgZGF2aW5jaV9zcGlfZGVmYXVsdF9jZmc7CiAKLXN0YXRpYyB2b2lkIGRhdmluY2lfc3BpX3J4X2J1Zl91OCh1MzIgZGF0YSwgc3RydWN0IGRhdmluY2lfc3BpICpkYXZpbmNpX3NwaSkKK3N0YXRpYyB2b2lkIGRhdmluY2lfc3BpX3J4X2J1Zl91OCh1MzIgZGF0YSwgc3RydWN0IGRhdmluY2lfc3BpICpkc3BpKQogewotCXU4ICpyeCA9IGRhdmluY2lfc3BpLT5yeDsKLQotCSpyeCsrID0gKHU4KWRhdGE7Ci0JZGF2aW5jaV9zcGktPnJ4ID0gcng7CisJaWYgKGRzcGktPnJ4KSB7CisJCXU4ICpyeCA9IGRzcGktPnJ4OworCQkqcngrKyA9ICh1OClkYXRhOworCQlkc3BpLT5yeCA9IHJ4OworCX0KIH0KIAotc3RhdGljIHZvaWQgZGF2aW5jaV9zcGlfcnhfYnVmX3UxNih1MzIgZGF0YSwgc3RydWN0IGRhdmluY2lfc3BpICpkYXZpbmNpX3NwaSkKK3N0YXRpYyB2b2lkIGRhdmluY2lfc3BpX3J4X2J1Zl91MTYodTMyIGRhdGEsIHN0cnVjdCBkYXZpbmNpX3NwaSAqZHNwaSkKIHsKLQl1MTYgKnJ4ID0gZGF2aW5jaV9zcGktPnJ4OwotCi0JKnJ4KysgPSAodTE2KWRhdGE7Ci0JZGF2aW5jaV9zcGktPnJ4ID0gcng7CisJaWYgKGRzcGktPnJ4KSB7CisJCXUxNiAqcnggPSBkc3BpLT5yeDsKKwkJKnJ4KysgPSAodTE2KWRhdGE7CisJCWRzcGktPnJ4ID0gcng7CisJfQogfQogCi1zdGF0aWMgdTMyIGRhdmluY2lfc3BpX3R4X2J1Zl91OChzdHJ1Y3QgZGF2aW5jaV9zcGkgKmRhdmluY2lfc3BpKQorc3RhdGljIHUzMiBkYXZpbmNpX3NwaV90eF9idWZfdTgoc3RydWN0IGRhdmluY2lfc3BpICpkc3BpKQogewotCXUzMiBkYXRhOwotCWNvbnN0IHU4ICp0eCA9IGRhdmluY2lfc3BpLT50eDsKLQotCWRhdGEgPSAqdHgrKzsKLQlkYXZpbmNpX3NwaS0+dHggPSB0eDsKKwl1MzIgZGF0YSA9IDA7CisJaWYgKGRzcGktPnR4KSB7CisJCWNvbnN0IHU4ICp0eCA9IGRzcGktPnR4OworCQlkYXRhID0gKnR4Kys7CisJCWRzcGktPnR4ID0gdHg7CisJfQogCXJldHVybiBkYXRhOwogfQogCi1zdGF0aWMgdTMyIGRhdmluY2lfc3BpX3R4X2J1Zl91MTYoc3RydWN0IGRhdmluY2lfc3BpICpkYXZpbmNpX3NwaSkKK3N0YXRpYyB1MzIgZGF2aW5jaV9zcGlfdHhfYnVmX3UxNihzdHJ1Y3QgZGF2aW5jaV9zcGkgKmRzcGkpCiB7Ci0JdTMyIGRhdGE7Ci0JY29uc3QgdTE2ICp0eCA9IGRhdmluY2lfc3BpLT50eDsKLQotCWRhdGEgPSAqdHgrKzsKLQlkYXZpbmNpX3NwaS0+dHggPSB0eDsKKwl1MzIgZGF0YSA9IDA7CisJaWYgKGRzcGktPnR4KSB7CisJCWNvbnN0IHUxNiAqdHggPSBkc3BpLT50eDsKKwkJZGF0YSA9ICp0eCsrOworCQlkc3BpLT50eCA9IHR4OworCX0KIAlyZXR1cm4gZGF0YTsKIH0KIApAQCAtMjM3LDU1ICsyMDUsNjcgQEAKIAlpb3dyaXRlMzIodiwgYWRkcik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfZm10X2JpdHModm9pZCBfX2lvbWVtICphZGRyLCB1MzIgYml0cywgaW50IGNzX251bSkKLXsKLQlzZXRfaW9fYml0cyhhZGRyICsgU1BJRk1UMCArICgweDQgKiBjc19udW0pLCBiaXRzKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX2ZtdF9iaXRzKHZvaWQgX19pb21lbSAqYWRkciwgdTMyIGJpdHMsIGludCBjc19udW0pCi17Ci0JY2xlYXJfaW9fYml0cyhhZGRyICsgU1BJRk1UMCArICgweDQgKiBjc19udW0pLCBiaXRzKTsKLX0KLQotc3RhdGljIHZvaWQgZGF2aW5jaV9zcGlfc2V0X2RtYV9yZXEoY29uc3Qgc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgaW50IGVuYWJsZSkKLXsKLQlzdHJ1Y3QgZGF2aW5jaV9zcGkgKmRhdmluY2lfc3BpID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7Ci0KLQlpZiAoZW5hYmxlKQotCQlzZXRfaW9fYml0cyhkYXZpbmNpX3NwaS0+YmFzZSArIFNQSUlOVCwgU1BJSU5UX0RNQV9SRVFfRU4pOwotCWVsc2UKLQkJY2xlYXJfaW9fYml0cyhkYXZpbmNpX3NwaS0+YmFzZSArIFNQSUlOVCwgU1BJSU5UX0RNQV9SRVFfRU4pOwotfQotCiAvKgogICogSW50ZXJmYWNlIHRvIGNvbnRyb2wgdGhlIGNoaXAgc2VsZWN0IHNpZ25hbAogICovCiBzdGF0aWMgdm9pZCBkYXZpbmNpX3NwaV9jaGlwc2VsZWN0KHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIGludCB2YWx1ZSkKIHsKLQlzdHJ1Y3QgZGF2aW5jaV9zcGkgKmRhdmluY2lfc3BpOworCXN0cnVjdCBkYXZpbmNpX3NwaSAqZHNwaTsKIAlzdHJ1Y3QgZGF2aW5jaV9zcGlfcGxhdGZvcm1fZGF0YSAqcGRhdGE7Ci0JdTMyIGRhdGExX3JlZ192YWwgPSAwOworCXU4IGNoaXBfc2VsID0gc3BpLT5jaGlwX3NlbGVjdDsKKwl1MTYgc3BpZGF0MSA9IENTX0RFRkFVTFQ7CisJYm9vbCBncGlvX2NoaXBzZWwgPSBmYWxzZTsKIAotCWRhdmluY2lfc3BpID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7Ci0JcGRhdGEgPSBkYXZpbmNpX3NwaS0+cGRhdGE7CisJZHNwaSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOworCXBkYXRhID0gZHNwaS0+cGRhdGE7CisKKwlpZiAocGRhdGEtPmNoaXBfc2VsICYmIGNoaXBfc2VsIDwgcGRhdGEtPm51bV9jaGlwc2VsZWN0ICYmCisJCQkJcGRhdGEtPmNoaXBfc2VsW2NoaXBfc2VsXSAhPSBTUElfSU5URVJOX0NTKQorCQlncGlvX2NoaXBzZWwgPSB0cnVlOwogCiAJLyoKIAkgKiBCb2FyZCBzcGVjaWZpYyBjaGlwIHNlbGVjdCBsb2dpYyBkZWNpZGVzIHRoZSBwb2xhcml0eSBhbmQgY3MKIAkgKiBsaW5lIGZvciB0aGUgY29udHJvbGxlcgogCSAqLwotCWlmICh2YWx1ZSA9PSBCSVRCQU5HX0NTX0lOQUNUSVZFKSB7Ci0JCXNldF9pb19iaXRzKGRhdmluY2lfc3BpLT5iYXNlICsgU1BJREVGLCBDU19ERUZBVUxUKTsKKwlpZiAoZ3Bpb19jaGlwc2VsKSB7CisJCWlmICh2YWx1ZSA9PSBCSVRCQU5HX0NTX0FDVElWRSkKKwkJCWdwaW9fc2V0X3ZhbHVlKHBkYXRhLT5jaGlwX3NlbFtjaGlwX3NlbF0sIDApOworCQllbHNlCisJCQlncGlvX3NldF92YWx1ZShwZGF0YS0+Y2hpcF9zZWxbY2hpcF9zZWxdLCAxKTsKKwl9IGVsc2UgeworCQlpZiAodmFsdWUgPT0gQklUQkFOR19DU19BQ1RJVkUpIHsKKwkJCXNwaWRhdDEgfD0gU1BJREFUMV9DU0hPTERfTUFTSzsKKwkJCXNwaWRhdDEgJj0gfigweDEgPDwgY2hpcF9zZWwpOworCQl9CiAKLQkJZGF0YTFfcmVnX3ZhbCB8PSBDU19ERUZBVUxUIDw8IFNQSURBVDFfQ1NOUl9TSElGVDsKLQkJaW93cml0ZTMyKGRhdGExX3JlZ192YWwsIGRhdmluY2lfc3BpLT5iYXNlICsgU1BJREFUMSk7Ci0KLQkJd2hpbGUgKChpb3JlYWQzMihkYXZpbmNpX3NwaS0+YmFzZSArIFNQSUJVRikKLQkJCQkJJiBTUElCVUZfUlhFTVBUWV9NQVNLKSA9PSAwKQotCQkJY3B1X3JlbGF4KCk7CisJCWlvd3JpdGUxNihzcGlkYXQxLCBkc3BpLT5iYXNlICsgU1BJREFUMSArIDIpOwogCX0KIH0KIAogLyoqCisgKiBkYXZpbmNpX3NwaV9nZXRfcHJlc2NhbGUgLSBDYWxjdWxhdGVzIHRoZSBjb3JyZWN0IHByZXNjYWxlIHZhbHVlCisgKiBAbWF4c3BlZWRfaHo6IHRoZSBtYXhpbXVtIHJhdGUgdGhlIFNQSSBjbG9jayBjYW4gcnVuIGF0CisgKgorICogVGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVzIHRoZSBwcmVzY2FsZSB2YWx1ZSB0aGF0IGdlbmVyYXRlcyBhIGNsb2NrIHJhdGUKKyAqIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgc3BlY2lmaWVkIG1heGltdW0uCisgKgorICogUmV0dXJuczogY2FsY3VsYXRlZCBwcmVzY2FsZSAtIDEgZm9yIGVhc3kgcHJvZ3JhbW1pbmcgaW50byBTUEkgcmVnaXN0ZXJzCisgKiBvciBuZWdhdGl2ZSBlcnJvciBudW1iZXIgaWYgdmFsaWQgcHJlc2NhbGFyIGNhbm5vdCBiZSB1cGRhdGVkLgorICovCitzdGF0aWMgaW5saW5lIGludCBkYXZpbmNpX3NwaV9nZXRfcHJlc2NhbGUoc3RydWN0IGRhdmluY2lfc3BpICpkc3BpLAorCQkJCQkJCXUzMiBtYXhfc3BlZWRfaHopCit7CisJaW50IHJldDsKKworCXJldCA9IERJVl9ST1VORF9VUChjbGtfZ2V0X3JhdGUoZHNwaS0+Y2xrKSwgbWF4X3NwZWVkX2h6KTsKKworCWlmIChyZXQgPCAzIHx8IHJldCA+IDI1NikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gcmV0IC0gMTsKK30KKworLyoqCiAgKiBkYXZpbmNpX3NwaV9zZXR1cF90cmFuc2ZlciAtIFRoaXMgZnVuY3Rpb25zIHdpbGwgZGV0ZXJtaW5lIHRyYW5zZmVyIG1ldGhvZAogICogQHNwaTogc3BpIGRldmljZSBvbiB3aGljaCBkYXRhIHRyYW5zZmVyIHRvIGJlIGRvbmUKICAqIEB0OiBzcGkgdHJhbnNmZXIgaW4gd2hpY2ggdHJhbnNmZXIgaW5mbyBpcyBmaWxsZWQKQEAgLTI5OCwxMyArMjc4LDE1IEBACiAJCXN0cnVjdCBzcGlfdHJhbnNmZXIgKnQpCiB7CiAKLQlzdHJ1Y3QgZGF2aW5jaV9zcGkgKmRhdmluY2lfc3BpOwotCXN0cnVjdCBkYXZpbmNpX3NwaV9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKwlzdHJ1Y3QgZGF2aW5jaV9zcGkgKmRzcGk7CisJc3RydWN0IGRhdmluY2lfc3BpX2NvbmZpZyAqc3BpY2ZnOwogCXU4IGJpdHNfcGVyX3dvcmQgPSAwOwotCXUzMiBoeiA9IDAsIHByZXNjYWxlID0gMCwgY2xrc3BlZWQ7CisJdTMyIGh6ID0gMCwgc3BpZm10ID0gMCwgcHJlc2NhbGUgPSAwOwogCi0JZGF2aW5jaV9zcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKLQlwZGF0YSA9IGRhdmluY2lfc3BpLT5wZGF0YTsKKwlkc3BpID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7CisJc3BpY2ZnID0gKHN0cnVjdCBkYXZpbmNpX3NwaV9jb25maWcgKilzcGktPmNvbnRyb2xsZXJfZGF0YTsKKwlpZiAoIXNwaWNmZykKKwkJc3BpY2ZnID0gJmRhdmluY2lfc3BpX2RlZmF1bHRfY2ZnOwogCiAJaWYgKHQpIHsKIAkJYml0c19wZXJfd29yZCA9IHQtPmJpdHNfcGVyX3dvcmQ7CkBAIC0zMjAsMTg2ICszMDIsMzUgQEAKIAkgKiA4Yml0LCAxNmJpdCBvciAzMmJpdCB0cmFuc2ZlcgogCSAqLwogCWlmIChiaXRzX3Blcl93b3JkIDw9IDggJiYgYml0c19wZXJfd29yZCA+PSAyKSB7Ci0JCWRhdmluY2lfc3BpLT5nZXRfcnggPSBkYXZpbmNpX3NwaV9yeF9idWZfdTg7Ci0JCWRhdmluY2lfc3BpLT5nZXRfdHggPSBkYXZpbmNpX3NwaV90eF9idWZfdTg7Ci0JCWRhdmluY2lfc3BpLT5zbGF2ZVtzcGktPmNoaXBfc2VsZWN0XS5ieXRlc19wZXJfd29yZCA9IDE7CisJCWRzcGktPmdldF9yeCA9IGRhdmluY2lfc3BpX3J4X2J1Zl91ODsKKwkJZHNwaS0+Z2V0X3R4ID0gZGF2aW5jaV9zcGlfdHhfYnVmX3U4OworCQlkc3BpLT5ieXRlc19wZXJfd29yZFtzcGktPmNoaXBfc2VsZWN0XSA9IDE7CiAJfSBlbHNlIGlmIChiaXRzX3Blcl93b3JkIDw9IDE2ICYmIGJpdHNfcGVyX3dvcmQgPj0gMikgewotCQlkYXZpbmNpX3NwaS0+Z2V0X3J4ID0gZGF2aW5jaV9zcGlfcnhfYnVmX3UxNjsKLQkJZGF2aW5jaV9zcGktPmdldF90eCA9IGRhdmluY2lfc3BpX3R4X2J1Zl91MTY7Ci0JCWRhdmluY2lfc3BpLT5zbGF2ZVtzcGktPmNoaXBfc2VsZWN0XS5ieXRlc19wZXJfd29yZCA9IDI7CisJCWRzcGktPmdldF9yeCA9IGRhdmluY2lfc3BpX3J4X2J1Zl91MTY7CisJCWRzcGktPmdldF90eCA9IGRhdmluY2lfc3BpX3R4X2J1Zl91MTY7CisJCWRzcGktPmJ5dGVzX3Blcl93b3JkW3NwaS0+Y2hpcF9zZWxlY3RdID0gMjsKIAl9IGVsc2UKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoIWh6KQogCQloeiA9IHNwaS0+bWF4X3NwZWVkX2h6OwogCi0JY2xlYXJfZm10X2JpdHMoZGF2aW5jaV9zcGktPmJhc2UsIFNQSUZNVF9DSEFSTEVOX01BU0ssCi0JCQlzcGktPmNoaXBfc2VsZWN0KTsKLQlzZXRfZm10X2JpdHMoZGF2aW5jaV9zcGktPmJhc2UsIGJpdHNfcGVyX3dvcmQgJiAweDFmLAotCQkJc3BpLT5jaGlwX3NlbGVjdCk7CisJLyogU2V0IHVwIFNQSUZNVG4gcmVnaXN0ZXIsIHVuaXF1ZSB0byB0aGlzIGNoaXBzZWxlY3QuICovCiAKLQljbGtzcGVlZCA9IGNsa19nZXRfcmF0ZShkYXZpbmNpX3NwaS0+Y2xrKTsKLQlpZiAoaHogPiBjbGtzcGVlZCAvIDIpCi0JCXByZXNjYWxlID0gMSA8PCA4OwotCWlmIChoeiA8IGNsa3NwZWVkIC8gMjU2KQotCQlwcmVzY2FsZSA9IDI1NSA8PCA4OwotCWlmICghcHJlc2NhbGUpCi0JCXByZXNjYWxlID0gKChjbGtzcGVlZCAvIGh6IC0gMSkgPDwgOCkgJiAweDAwMDBmZjAwOworCXByZXNjYWxlID0gZGF2aW5jaV9zcGlfZ2V0X3ByZXNjYWxlKGRzcGksIGh6KTsKKwlpZiAocHJlc2NhbGUgPCAwKQorCQlyZXR1cm4gcHJlc2NhbGU7CiAKLQljbGVhcl9mbXRfYml0cyhkYXZpbmNpX3NwaS0+YmFzZSwgMHgwMDAwZmYwMCwgc3BpLT5jaGlwX3NlbGVjdCk7Ci0Jc2V0X2ZtdF9iaXRzKGRhdmluY2lfc3BpLT5iYXNlLCBwcmVzY2FsZSwgc3BpLT5jaGlwX3NlbGVjdCk7CisJc3BpZm10ID0gKHByZXNjYWxlIDw8IFNQSUZNVF9QUkVTQ0FMRV9TSElGVCkgfCAoYml0c19wZXJfd29yZCAmIDB4MWYpOwogCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGRhdmluY2lfc3BpX2RtYV9yeF9jYWxsYmFjayh1bnNpZ25lZCBsY2gsIHUxNiBjaF9zdGF0dXMsIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IHNwaV9kZXZpY2UgKnNwaSA9IChzdHJ1Y3Qgc3BpX2RldmljZSAqKWRhdGE7Ci0Jc3RydWN0IGRhdmluY2lfc3BpICpkYXZpbmNpX3NwaTsKLQlzdHJ1Y3QgZGF2aW5jaV9zcGlfZG1hICpkYXZpbmNpX3NwaV9kbWE7Ci0Jc3RydWN0IGRhdmluY2lfc3BpX3BsYXRmb3JtX2RhdGEgKnBkYXRhOwotCi0JZGF2aW5jaV9zcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKLQlkYXZpbmNpX3NwaV9kbWEgPSAmKGRhdmluY2lfc3BpLT5kbWFfY2hhbm5lbHNbc3BpLT5jaGlwX3NlbGVjdF0pOwotCXBkYXRhID0gZGF2aW5jaV9zcGktPnBkYXRhOwotCi0JaWYgKGNoX3N0YXR1cyA9PSBETUFfQ09NUExFVEUpCi0JCWVkbWFfc3RvcChkYXZpbmNpX3NwaV9kbWEtPmRtYV9yeF9jaGFubmVsKTsKLQllbHNlCi0JCWVkbWFfY2xlYW5fY2hhbm5lbChkYXZpbmNpX3NwaV9kbWEtPmRtYV9yeF9jaGFubmVsKTsKLQotCWNvbXBsZXRlKCZkYXZpbmNpX3NwaV9kbWEtPmRtYV9yeF9jb21wbGV0aW9uKTsKLQkvKiBXZSBtdXN0IGRpc2FibGUgdGhlIERNQSBSWCByZXF1ZXN0ICovCi0JZGF2aW5jaV9zcGlfc2V0X2RtYV9yZXEoc3BpLCAwKTsKLX0KLQotc3RhdGljIHZvaWQgZGF2aW5jaV9zcGlfZG1hX3R4X2NhbGxiYWNrKHVuc2lnbmVkIGxjaCwgdTE2IGNoX3N0YXR1cywgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gKHN0cnVjdCBzcGlfZGV2aWNlICopZGF0YTsKLQlzdHJ1Y3QgZGF2aW5jaV9zcGkgKmRhdmluY2lfc3BpOwotCXN0cnVjdCBkYXZpbmNpX3NwaV9kbWEgKmRhdmluY2lfc3BpX2RtYTsKLQlzdHJ1Y3QgZGF2aW5jaV9zcGlfcGxhdGZvcm1fZGF0YSAqcGRhdGE7Ci0KLQlkYXZpbmNpX3NwaSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOwotCWRhdmluY2lfc3BpX2RtYSA9ICYoZGF2aW5jaV9zcGktPmRtYV9jaGFubmVsc1tzcGktPmNoaXBfc2VsZWN0XSk7Ci0JcGRhdGEgPSBkYXZpbmNpX3NwaS0+cGRhdGE7Ci0KLQlpZiAoY2hfc3RhdHVzID09IERNQV9DT01QTEVURSkKLQkJZWRtYV9zdG9wKGRhdmluY2lfc3BpX2RtYS0+ZG1hX3R4X2NoYW5uZWwpOwotCWVsc2UKLQkJZWRtYV9jbGVhbl9jaGFubmVsKGRhdmluY2lfc3BpX2RtYS0+ZG1hX3R4X2NoYW5uZWwpOwotCi0JY29tcGxldGUoJmRhdmluY2lfc3BpX2RtYS0+ZG1hX3R4X2NvbXBsZXRpb24pOwotCS8qIFdlIG11c3QgZGlzYWJsZSB0aGUgRE1BIFRYIHJlcXVlc3QgKi8KLQlkYXZpbmNpX3NwaV9zZXRfZG1hX3JlcShzcGksIDApOwotfQotCi1zdGF0aWMgaW50IGRhdmluY2lfc3BpX3JlcXVlc3RfZG1hKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCi17Ci0Jc3RydWN0IGRhdmluY2lfc3BpICpkYXZpbmNpX3NwaTsKLQlzdHJ1Y3QgZGF2aW5jaV9zcGlfZG1hICpkYXZpbmNpX3NwaV9kbWE7Ci0Jc3RydWN0IGRhdmluY2lfc3BpX3BsYXRmb3JtX2RhdGEgKnBkYXRhOwotCXN0cnVjdCBkZXZpY2UgKnNkZXY7Ci0JaW50IHI7Ci0KLQlkYXZpbmNpX3NwaSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOwotCWRhdmluY2lfc3BpX2RtYSA9ICZkYXZpbmNpX3NwaS0+ZG1hX2NoYW5uZWxzW3NwaS0+Y2hpcF9zZWxlY3RdOwotCXBkYXRhID0gZGF2aW5jaV9zcGktPnBkYXRhOwotCXNkZXYgPSBkYXZpbmNpX3NwaS0+Yml0YmFuZy5tYXN0ZXItPmRldi5wYXJlbnQ7Ci0KLQlyID0gZWRtYV9hbGxvY19jaGFubmVsKGRhdmluY2lfc3BpX2RtYS0+ZG1hX3J4X3N5bmNfZGV2LAotCQkJCWRhdmluY2lfc3BpX2RtYV9yeF9jYWxsYmFjaywgc3BpLAotCQkJCWRhdmluY2lfc3BpX2RtYS0+ZXZlbnRxKTsKLQlpZiAociA8IDApIHsKLQkJZGV2X2RiZyhzZGV2LCAiVW5hYmxlIHRvIHJlcXVlc3QgRE1BIGNoYW5uZWwgZm9yIFNQSSBSWFxuIik7Ci0JCXJldHVybiAtRUFHQUlOOwotCX0KLQlkYXZpbmNpX3NwaV9kbWEtPmRtYV9yeF9jaGFubmVsID0gcjsKLQlyID0gZWRtYV9hbGxvY19jaGFubmVsKGRhdmluY2lfc3BpX2RtYS0+ZG1hX3R4X3N5bmNfZGV2LAotCQkJCWRhdmluY2lfc3BpX2RtYV90eF9jYWxsYmFjaywgc3BpLAotCQkJCWRhdmluY2lfc3BpX2RtYS0+ZXZlbnRxKTsKLQlpZiAociA8IDApIHsKLQkJZWRtYV9mcmVlX2NoYW5uZWwoZGF2aW5jaV9zcGlfZG1hLT5kbWFfcnhfY2hhbm5lbCk7Ci0JCWRhdmluY2lfc3BpX2RtYS0+ZG1hX3J4X2NoYW5uZWwgPSAtMTsKLQkJZGV2X2RiZyhzZGV2LCAiVW5hYmxlIHRvIHJlcXVlc3QgRE1BIGNoYW5uZWwgZm9yIFNQSSBUWFxuIik7Ci0JCXJldHVybiAtRUFHQUlOOwotCX0KLQlkYXZpbmNpX3NwaV9kbWEtPmRtYV90eF9jaGFubmVsID0gcjsKLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqIGRhdmluY2lfc3BpX3NldHVwIC0gVGhpcyBmdW5jdGlvbnMgd2lsbCBzZXQgZGVmYXVsdCB0cmFuc2ZlciBtZXRob2QKLSAqIEBzcGk6IHNwaSBkZXZpY2Ugb24gd2hpY2ggZGF0YSB0cmFuc2ZlciB0byBiZSBkb25lCi0gKgotICogVGhpcyBmdW5jdGlvbnMgc2V0cyB0aGUgZGVmYXVsdCB0cmFuc2ZlciBtZXRob2QuCi0gKi8KLQotc3RhdGljIGludCBkYXZpbmNpX3NwaV9zZXR1cChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQotewotCWludCByZXR2YWw7Ci0Jc3RydWN0IGRhdmluY2lfc3BpICpkYXZpbmNpX3NwaTsKLQlzdHJ1Y3QgZGF2aW5jaV9zcGlfZG1hICpkYXZpbmNpX3NwaV9kbWE7Ci0Jc3RydWN0IGRldmljZSAqc2RldjsKLQotCWRhdmluY2lfc3BpID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7Ci0Jc2RldiA9IGRhdmluY2lfc3BpLT5iaXRiYW5nLm1hc3Rlci0+ZGV2LnBhcmVudDsKLQotCS8qIGlmIGJpdHMgcGVyIHdvcmQgbGVuZ3RoIGlzIHplcm8gdGhlbiBzZXQgaXQgZGVmYXVsdCA4ICovCi0JaWYgKCFzcGktPmJpdHNfcGVyX3dvcmQpCi0JCXNwaS0+Yml0c19wZXJfd29yZCA9IDg7Ci0KLQlkYXZpbmNpX3NwaS0+c2xhdmVbc3BpLT5jaGlwX3NlbGVjdF0uY21kX3RvX3dyaXRlID0gMDsKLQotCWlmICh1c2VfZG1hICYmIGRhdmluY2lfc3BpLT5kbWFfY2hhbm5lbHMpIHsKLQkJZGF2aW5jaV9zcGlfZG1hID0gJmRhdmluY2lfc3BpLT5kbWFfY2hhbm5lbHNbc3BpLT5jaGlwX3NlbGVjdF07Ci0KLQkJaWYgKChkYXZpbmNpX3NwaV9kbWEtPmRtYV9yeF9jaGFubmVsID09IC0xKQotCQkJCXx8IChkYXZpbmNpX3NwaV9kbWEtPmRtYV90eF9jaGFubmVsID09IC0xKSkgewotCQkJcmV0dmFsID0gZGF2aW5jaV9zcGlfcmVxdWVzdF9kbWEoc3BpKTsKLQkJCWlmIChyZXR2YWwgPCAwKQotCQkJCXJldHVybiByZXR2YWw7Ci0JCX0KLQl9Ci0KLQkvKgotCSAqIFNQSSBpbiBEYVZpbmNpIGFuZCBEQTh4eCBvcGVyYXRlIGJldHdlZW4KLQkgKiA2MDAgS0h6IGFuZCA1MCBNSHoKLQkgKi8KLQlpZiAoc3BpLT5tYXhfc3BlZWRfaHogPCA2MDAwMDAgfHwgc3BpLT5tYXhfc3BlZWRfaHogPiA1MDAwMDAwMCkgewotCQlkZXZfZGJnKHNkZXYsICJPcGVyYXRpbmcgZnJlcXVlbmN5IGlzIG5vdCBpbiBhY2NlcHRhYmxlICIKLQkJCQkicmFuZ2VcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKgotCSAqIFNldCB1cCBTUElGTVRuIHJlZ2lzdGVyLCB1bmlxdWUgdG8gdGhpcyBjaGlwc2VsZWN0LgotCSAqCi0JICogTk9URTogd2UgY291bGQgZG8gYWxsIG9mIHRoZXNlIHdpdGggb25lIHdyaXRlLiAgQWxzbywgc29tZQotCSAqIG9mIHRoZSAidmVyc2lvbiAyIiBmZWF0dXJlcyBhcmUgZm91bmQgaW4gY2hpcHMgdGhhdCBkb24ndAotCSAqIHN1cHBvcnQgYWxsIG9mIHRoZW0uLi4KLQkgKi8KIAlpZiAoc3BpLT5tb2RlICYgU1BJX0xTQl9GSVJTVCkKLQkJc2V0X2ZtdF9iaXRzKGRhdmluY2lfc3BpLT5iYXNlLCBTUElGTVRfU0hJRlRESVJfTUFTSywKLQkJCQlzcGktPmNoaXBfc2VsZWN0KTsKLQllbHNlCi0JCWNsZWFyX2ZtdF9iaXRzKGRhdmluY2lfc3BpLT5iYXNlLCBTUElGTVRfU0hJRlRESVJfTUFTSywKLQkJCQlzcGktPmNoaXBfc2VsZWN0KTsKKwkJc3BpZm10IHw9IFNQSUZNVF9TSElGVERJUl9NQVNLOwogCiAJaWYgKHNwaS0+bW9kZSAmIFNQSV9DUE9MKQotCQlzZXRfZm10X2JpdHMoZGF2aW5jaV9zcGktPmJhc2UsIFNQSUZNVF9QT0xBUklUWV9NQVNLLAotCQkJCXNwaS0+Y2hpcF9zZWxlY3QpOwotCWVsc2UKLQkJY2xlYXJfZm10X2JpdHMoZGF2aW5jaV9zcGktPmJhc2UsIFNQSUZNVF9QT0xBUklUWV9NQVNLLAotCQkJCXNwaS0+Y2hpcF9zZWxlY3QpOworCQlzcGlmbXQgfD0gU1BJRk1UX1BPTEFSSVRZX01BU0s7CiAKIAlpZiAoIShzcGktPm1vZGUgJiBTUElfQ1BIQSkpCi0JCXNldF9mbXRfYml0cyhkYXZpbmNpX3NwaS0+YmFzZSwgU1BJRk1UX1BIQVNFX01BU0ssCi0JCQkJc3BpLT5jaGlwX3NlbGVjdCk7Ci0JZWxzZQotCQljbGVhcl9mbXRfYml0cyhkYXZpbmNpX3NwaS0+YmFzZSwgU1BJRk1UX1BIQVNFX01BU0ssCi0JCQkJc3BpLT5jaGlwX3NlbGVjdCk7CisJCXNwaWZtdCB8PSBTUElGTVRfUEhBU0VfTUFTSzsKIAogCS8qCiAJICogVmVyc2lvbiAxIGhhcmR3YXJlIHN1cHBvcnRzIHR3byBiYXNpYyBTUEkgbW9kZXM6CkBAIC01MTQsMTExICszNDUsODQgQEAKIAkgKiAgLSA0IHBpbiB3aXRoIGVuYWJsZSBpcyAoU1BJX1JFQURZIHwgU1BJX05PX0NTKQogCSAqLwogCi0JaWYgKGRhdmluY2lfc3BpLT52ZXJzaW9uID09IFNQSV9WRVJTSU9OXzIpIHsKLQkJY2xlYXJfZm10X2JpdHMoZGF2aW5jaV9zcGktPmJhc2UsIFNQSUZNVF9XREVMQVlfTUFTSywKLQkJCQlzcGktPmNoaXBfc2VsZWN0KTsKLQkJc2V0X2ZtdF9iaXRzKGRhdmluY2lfc3BpLT5iYXNlLAotCQkJCShkYXZpbmNpX3NwaS0+cGRhdGEtPndkZWxheQotCQkJCQkJPDwgU1BJRk1UX1dERUxBWV9TSElGVCkKLQkJCQkJJiBTUElGTVRfV0RFTEFZX01BU0ssCi0JCQkJc3BpLT5jaGlwX3NlbGVjdCk7CisJaWYgKGRzcGktPnZlcnNpb24gPT0gU1BJX1ZFUlNJT05fMikgewogCi0JCWlmIChkYXZpbmNpX3NwaS0+cGRhdGEtPm9kZF9wYXJpdHkpCi0JCQlzZXRfZm10X2JpdHMoZGF2aW5jaV9zcGktPmJhc2UsCi0JCQkJCVNQSUZNVF9PRERfUEFSSVRZX01BU0ssCi0JCQkJCXNwaS0+Y2hpcF9zZWxlY3QpOwotCQllbHNlCi0JCQljbGVhcl9mbXRfYml0cyhkYXZpbmNpX3NwaS0+YmFzZSwKLQkJCQkJU1BJRk1UX09ERF9QQVJJVFlfTUFTSywKLQkJCQkJc3BpLT5jaGlwX3NlbGVjdCk7CisJCXUzMiBkZWxheSA9IDA7CiAKLQkJaWYgKGRhdmluY2lfc3BpLT5wZGF0YS0+cGFyaXR5X2VuYWJsZSkKLQkJCXNldF9mbXRfYml0cyhkYXZpbmNpX3NwaS0+YmFzZSwKLQkJCQkJU1BJRk1UX1BBUklUWUVOQV9NQVNLLAotCQkJCQlzcGktPmNoaXBfc2VsZWN0KTsKLQkJZWxzZQotCQkJY2xlYXJfZm10X2JpdHMoZGF2aW5jaV9zcGktPmJhc2UsCi0JCQkJCVNQSUZNVF9QQVJJVFlFTkFfTUFTSywKLQkJCQkJc3BpLT5jaGlwX3NlbGVjdCk7CisJCXNwaWZtdCB8PSAoKHNwaWNmZy0+d2RlbGF5IDw8IFNQSUZNVF9XREVMQVlfU0hJRlQpCisJCQkJCQkJJiBTUElGTVRfV0RFTEFZX01BU0spOwogCi0JCWlmIChkYXZpbmNpX3NwaS0+cGRhdGEtPndhaXRfZW5hYmxlKQotCQkJc2V0X2ZtdF9iaXRzKGRhdmluY2lfc3BpLT5iYXNlLAotCQkJCQlTUElGTVRfV0FJVEVOQV9NQVNLLAotCQkJCQlzcGktPmNoaXBfc2VsZWN0KTsKLQkJZWxzZQotCQkJY2xlYXJfZm10X2JpdHMoZGF2aW5jaV9zcGktPmJhc2UsCi0JCQkJCVNQSUZNVF9XQUlURU5BX01BU0ssCi0JCQkJCXNwaS0+Y2hpcF9zZWxlY3QpOworCQlpZiAoc3BpY2ZnLT5vZGRfcGFyaXR5KQorCQkJc3BpZm10IHw9IFNQSUZNVF9PRERfUEFSSVRZX01BU0s7CiAKLQkJaWYgKGRhdmluY2lfc3BpLT5wZGF0YS0+dGltZXJfZGlzYWJsZSkKLQkJCXNldF9mbXRfYml0cyhkYXZpbmNpX3NwaS0+YmFzZSwKLQkJCQkJU1BJRk1UX0RJU1RJTUVSX01BU0ssCi0JCQkJCXNwaS0+Y2hpcF9zZWxlY3QpOwotCQllbHNlCi0JCQljbGVhcl9mbXRfYml0cyhkYXZpbmNpX3NwaS0+YmFzZSwKLQkJCQkJU1BJRk1UX0RJU1RJTUVSX01BU0ssCi0JCQkJCXNwaS0+Y2hpcF9zZWxlY3QpOwotCX0KKwkJaWYgKHNwaWNmZy0+cGFyaXR5X2VuYWJsZSkKKwkJCXNwaWZtdCB8PSBTUElGTVRfUEFSSVRZRU5BX01BU0s7CiAKLQlyZXR2YWwgPSBkYXZpbmNpX3NwaV9zZXR1cF90cmFuc2ZlcihzcGksIE5VTEwpOwotCi0JcmV0dXJuIHJldHZhbDsKLX0KLQotc3RhdGljIHZvaWQgZGF2aW5jaV9zcGlfY2xlYW51cChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQotewotCXN0cnVjdCBkYXZpbmNpX3NwaSAqZGF2aW5jaV9zcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKLQlzdHJ1Y3QgZGF2aW5jaV9zcGlfZG1hICpkYXZpbmNpX3NwaV9kbWE7Ci0KLQlkYXZpbmNpX3NwaV9kbWEgPSAmZGF2aW5jaV9zcGktPmRtYV9jaGFubmVsc1tzcGktPmNoaXBfc2VsZWN0XTsKLQotCWlmICh1c2VfZG1hICYmIGRhdmluY2lfc3BpLT5kbWFfY2hhbm5lbHMpIHsKLQkJZGF2aW5jaV9zcGlfZG1hID0gJmRhdmluY2lfc3BpLT5kbWFfY2hhbm5lbHNbc3BpLT5jaGlwX3NlbGVjdF07Ci0KLQkJaWYgKChkYXZpbmNpX3NwaV9kbWEtPmRtYV9yeF9jaGFubmVsICE9IC0xKQotCQkJCSYmIChkYXZpbmNpX3NwaV9kbWEtPmRtYV90eF9jaGFubmVsICE9IC0xKSkgewotCQkJZWRtYV9mcmVlX2NoYW5uZWwoZGF2aW5jaV9zcGlfZG1hLT5kbWFfdHhfY2hhbm5lbCk7Ci0JCQllZG1hX2ZyZWVfY2hhbm5lbChkYXZpbmNpX3NwaV9kbWEtPmRtYV9yeF9jaGFubmVsKTsKKwkJaWYgKHNwaWNmZy0+dGltZXJfZGlzYWJsZSkgeworCQkJc3BpZm10IHw9IFNQSUZNVF9ESVNUSU1FUl9NQVNLOworCQl9IGVsc2UgeworCQkJZGVsYXkgfD0gKHNwaWNmZy0+YzJ0ZGVsYXkgPDwgU1BJREVMQVlfQzJUREVMQVlfU0hJRlQpCisJCQkJCQkmIFNQSURFTEFZX0MyVERFTEFZX01BU0s7CisJCQlkZWxheSB8PSAoc3BpY2ZnLT50MmNkZWxheSA8PCBTUElERUxBWV9UMkNERUxBWV9TSElGVCkKKwkJCQkJCSYgU1BJREVMQVlfVDJDREVMQVlfTUFTSzsKIAkJfQorCisJCWlmIChzcGktPm1vZGUgJiBTUElfUkVBRFkpIHsKKwkJCXNwaWZtdCB8PSBTUElGTVRfV0FJVEVOQV9NQVNLOworCQkJZGVsYXkgfD0gKHNwaWNmZy0+dDJlZGVsYXkgPDwgU1BJREVMQVlfVDJFREVMQVlfU0hJRlQpCisJCQkJCQkmIFNQSURFTEFZX1QyRURFTEFZX01BU0s7CisJCQlkZWxheSB8PSAoc3BpY2ZnLT5jMmVkZWxheSA8PCBTUElERUxBWV9DMkVERUxBWV9TSElGVCkKKwkJCQkJCSYgU1BJREVMQVlfQzJFREVMQVlfTUFTSzsKKwkJfQorCisJCWlvd3JpdGUzMihkZWxheSwgZHNwaS0+YmFzZSArIFNQSURFTEFZKTsKIAl9Ci19CiAKLXN0YXRpYyBpbnQgZGF2aW5jaV9zcGlfYnVmc19wcmVwKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksCi0JCQkJIHN0cnVjdCBkYXZpbmNpX3NwaSAqZGF2aW5jaV9zcGkpCi17Ci0JaW50IG9wX21vZGUgPSAwOwotCi0JLyoKLQkgKiBSRVZJU0lUICB1bmxlc3MgZGV2aWNlcyBkaXNhZ3JlZSBhYm91dCBTUElfTE9PUCBvcgotCSAqIFNQSV9SRUFEWSAoU1BJX05PX0NTIG9ubHkgYWxsb3dzIG9uZSBkZXZpY2UhKSwgdGhpcwotCSAqIHNob3VsZCBub3QgbmVlZCB0byBiZSBkb25lIGJlZm9yZSBlYWNoIG1lc3NhZ2UuLi4KLQkgKiBvcHRpbWl6ZSBmb3IgYm90aCBmbGFncyBzdGF5aW5nIGNsZWFyZWQuCi0JICovCi0KLQlvcF9tb2RlID0gU1BJUEMwX0RJRlVOX01BU0sKLQkJfCBTUElQQzBfRE9GVU5fTUFTSwotCQl8IFNQSVBDMF9DTEtGVU5fTUFTSzsKLQlpZiAoIShzcGktPm1vZGUgJiBTUElfTk9fQ1MpKQotCQlvcF9tb2RlIHw9IDEgPDwgc3BpLT5jaGlwX3NlbGVjdDsKLQlpZiAoc3BpLT5tb2RlICYgU1BJX1JFQURZKQotCQlvcF9tb2RlIHw9IFNQSVBDMF9TUElFTkFfTUFTSzsKLQotCWlvd3JpdGUzMihvcF9tb2RlLCBkYXZpbmNpX3NwaS0+YmFzZSArIFNQSVBDMCk7Ci0KLQlpZiAoc3BpLT5tb2RlICYgU1BJX0xPT1ApCi0JCXNldF9pb19iaXRzKGRhdmluY2lfc3BpLT5iYXNlICsgU1BJR0NSMSwKLQkJCQlTUElHQ1IxX0xPT1BCQUNLX01BU0spOwotCWVsc2UKLQkJY2xlYXJfaW9fYml0cyhkYXZpbmNpX3NwaS0+YmFzZSArIFNQSUdDUjEsCi0JCQkJU1BJR0NSMV9MT09QQkFDS19NQVNLKTsKKwlpb3dyaXRlMzIoc3BpZm10LCBkc3BpLT5iYXNlICsgU1BJRk1UMCk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBkYXZpbmNpX3NwaV9jaGVja19lcnJvcihzdHJ1Y3QgZGF2aW5jaV9zcGkgKmRhdmluY2lfc3BpLAotCQkJCSAgIGludCBpbnRfc3RhdHVzKQorLyoqCisgKiBkYXZpbmNpX3NwaV9zZXR1cCAtIFRoaXMgZnVuY3Rpb25zIHdpbGwgc2V0IGRlZmF1bHQgdHJhbnNmZXIgbWV0aG9kCisgKiBAc3BpOiBzcGkgZGV2aWNlIG9uIHdoaWNoIGRhdGEgdHJhbnNmZXIgdG8gYmUgZG9uZQorICoKKyAqIFRoaXMgZnVuY3Rpb25zIHNldHMgdGhlIGRlZmF1bHQgdHJhbnNmZXIgbWV0aG9kLgorICovCitzdGF0aWMgaW50IGRhdmluY2lfc3BpX3NldHVwKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCiB7Ci0Jc3RydWN0IGRldmljZSAqc2RldiA9IGRhdmluY2lfc3BpLT5iaXRiYW5nLm1hc3Rlci0+ZGV2LnBhcmVudDsKKwlpbnQgcmV0dmFsID0gMDsKKwlzdHJ1Y3QgZGF2aW5jaV9zcGkgKmRzcGk7CisJc3RydWN0IGRhdmluY2lfc3BpX3BsYXRmb3JtX2RhdGEgKnBkYXRhOworCisJZHNwaSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOworCXBkYXRhID0gZHNwaS0+cGRhdGE7CisKKwkvKiBpZiBiaXRzIHBlciB3b3JkIGxlbmd0aCBpcyB6ZXJvIHRoZW4gc2V0IGl0IGRlZmF1bHQgOCAqLworCWlmICghc3BpLT5iaXRzX3Blcl93b3JkKQorCQlzcGktPmJpdHNfcGVyX3dvcmQgPSA4OworCisJaWYgKCEoc3BpLT5tb2RlICYgU1BJX05PX0NTKSkgeworCQlpZiAoKHBkYXRhLT5jaGlwX3NlbCA9PSBOVUxMKSB8fAorCQkgICAgKHBkYXRhLT5jaGlwX3NlbFtzcGktPmNoaXBfc2VsZWN0XSA9PSBTUElfSU5URVJOX0NTKSkKKwkJCXNldF9pb19iaXRzKGRzcGktPmJhc2UgKyBTUElQQzAsIDEgPDwgc3BpLT5jaGlwX3NlbGVjdCk7CisKKwl9CisKKwlpZiAoc3BpLT5tb2RlICYgU1BJX1JFQURZKQorCQlzZXRfaW9fYml0cyhkc3BpLT5iYXNlICsgU1BJUEMwLCBTUElQQzBfU1BJRU5BX01BU0spOworCisJaWYgKHNwaS0+bW9kZSAmIFNQSV9MT09QKQorCQlzZXRfaW9fYml0cyhkc3BpLT5iYXNlICsgU1BJR0NSMSwgU1BJR0NSMV9MT09QQkFDS19NQVNLKTsKKwllbHNlCisJCWNsZWFyX2lvX2JpdHMoZHNwaS0+YmFzZSArIFNQSUdDUjEsIFNQSUdDUjFfTE9PUEJBQ0tfTUFTSyk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IGRhdmluY2lfc3BpX2NoZWNrX2Vycm9yKHN0cnVjdCBkYXZpbmNpX3NwaSAqZHNwaSwgaW50IGludF9zdGF0dXMpCit7CisJc3RydWN0IGRldmljZSAqc2RldiA9IGRzcGktPmJpdGJhbmcubWFzdGVyLT5kZXYucGFyZW50OwogCiAJaWYgKGludF9zdGF0dXMgJiBTUElGTEdfVElNRU9VVF9NQVNLKSB7CiAJCWRldl9kYmcoc2RldiwgIlNQSSBUaW1lLW91dCBFcnJvclxuIik7CkBAIC02MzMsNyArNDM3LDcgQEAKIAkJcmV0dXJuIC1FSU87CiAJfQogCi0JaWYgKGRhdmluY2lfc3BpLT52ZXJzaW9uID09IFNQSV9WRVJTSU9OXzIpIHsKKwlpZiAoZHNwaS0+dmVyc2lvbiA9PSBTUElfVkVSU0lPTl8yKSB7CiAJCWlmIChpbnRfc3RhdHVzICYgU1BJRkxHX0RMRU5fRVJSX01BU0spIHsKIAkJCWRldl9kYmcoc2RldiwgIlNQSSBEYXRhIExlbmd0aCBFcnJvclxuIik7CiAJCQlyZXR1cm4gLUVJTzsKQEAgLTY0NiwxMCArNDUwLDYgQEAKIAkJCWRldl9kYmcoc2RldiwgIlNQSSBEYXRhIE92ZXJydW4gZXJyb3JcbiIpOwogCQkJcmV0dXJuIC1FSU87CiAJCX0KLQkJaWYgKGludF9zdGF0dXMgJiBTUElGTEdfVFhfSU5UUl9NQVNLKSB7Ci0JCQlkZXZfZGJnKHNkZXYsICJTUEkgVFggaW50ciBiaXQgc2V0XG4iKTsKLQkJCXJldHVybiAtRUlPOwotCQl9CiAJCWlmIChpbnRfc3RhdHVzICYgU1BJRkxHX0JVRl9JTklUX0FDVElWRV9NQVNLKSB7CiAJCQlkZXZfZGJnKHNkZXYsICJTUEkgQnVmZmVyIEluaXQgQWN0aXZlXG4iKTsKIAkJCXJldHVybiAtRUJVU1k7CkBAIC02NjAsNiArNDYwLDYxIEBACiB9CiAKIC8qKgorICogZGF2aW5jaV9zcGlfcHJvY2Vzc19ldmVudHMgLSBjaGVjayBmb3IgYW5kIGhhbmRsZSBhbnkgU1BJIGNvbnRyb2xsZXIgZXZlbnRzCisgKiBAZHNwaTogdGhlIGNvbnRyb2xsZXIgZGF0YQorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBjaGVjayB0aGUgU1BJRkxHIHJlZ2lzdGVyIGFuZCBoYW5kbGUgYW55IGV2ZW50cyB0aGF0IGFyZQorICogZGV0ZWN0ZWQgdGhlcmUKKyAqLworc3RhdGljIGludCBkYXZpbmNpX3NwaV9wcm9jZXNzX2V2ZW50cyhzdHJ1Y3QgZGF2aW5jaV9zcGkgKmRzcGkpCit7CisJdTMyIGJ1Ziwgc3RhdHVzLCBlcnJvcnMgPSAwLCBzcGlkYXQxOworCisJYnVmID0gaW9yZWFkMzIoZHNwaS0+YmFzZSArIFNQSUJVRik7CisKKwlpZiAoZHNwaS0+cmNvdW50ID4gMCAmJiAhKGJ1ZiAmIFNQSUJVRl9SWEVNUFRZX01BU0spKSB7CisJCWRzcGktPmdldF9yeChidWYgJiAweEZGRkYsIGRzcGkpOworCQlkc3BpLT5yY291bnQtLTsKKwl9CisKKwlzdGF0dXMgPSBpb3JlYWQzMihkc3BpLT5iYXNlICsgU1BJRkxHKTsKKworCWlmICh1bmxpa2VseShzdGF0dXMgJiBTUElGTEdfRVJST1JfTUFTSykpIHsKKwkJZXJyb3JzID0gc3RhdHVzICYgU1BJRkxHX0VSUk9SX01BU0s7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChkc3BpLT53Y291bnQgPiAwICYmICEoYnVmICYgU1BJQlVGX1RYRlVMTF9NQVNLKSkgeworCQlzcGlkYXQxID0gaW9yZWFkMzIoZHNwaS0+YmFzZSArIFNQSURBVDEpOworCQlkc3BpLT53Y291bnQtLTsKKwkJc3BpZGF0MSAmPSB+MHhGRkZGOworCQlzcGlkYXQxIHw9IDB4RkZGRiAmIGRzcGktPmdldF90eChkc3BpKTsKKwkJaW93cml0ZTMyKHNwaWRhdDEsIGRzcGktPmJhc2UgKyBTUElEQVQxKTsKKwl9CisKK291dDoKKwlyZXR1cm4gZXJyb3JzOworfQorCitzdGF0aWMgdm9pZCBkYXZpbmNpX3NwaV9kbWFfY2FsbGJhY2sodW5zaWduZWQgbGNoLCB1MTYgc3RhdHVzLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkYXZpbmNpX3NwaSAqZHNwaSA9IGRhdGE7CisJc3RydWN0IGRhdmluY2lfc3BpX2RtYSAqZG1hID0gJmRzcGktPmRtYTsKKworCWVkbWFfc3RvcChsY2gpOworCisJaWYgKHN0YXR1cyA9PSBETUFfQ09NUExFVEUpIHsKKwkJaWYgKGxjaCA9PSBkbWEtPnJ4X2NoYW5uZWwpCisJCQlkc3BpLT5yY291bnQgPSAwOworCQlpZiAobGNoID09IGRtYS0+dHhfY2hhbm5lbCkKKwkJCWRzcGktPndjb3VudCA9IDA7CisJfQorCisJaWYgKCghZHNwaS0+d2NvdW50ICYmICFkc3BpLT5yY291bnQpIHx8IChzdGF0dXMgIT0gRE1BX0NPTVBMRVRFKSkKKwkJY29tcGxldGUoJmRzcGktPmRvbmUpOworfQorCisvKioKICAqIGRhdmluY2lfc3BpX2J1ZnMgLSBmdW5jdGlvbnMgd2hpY2ggd2lsbCBoYW5kbGUgdHJhbnNmZXIgZGF0YQogICogQHNwaTogc3BpIGRldmljZSBvbiB3aGljaCBkYXRhIHRyYW5zZmVyIHRvIGJlIGRvbmUKICAqIEB0OiBzcGkgdHJhbnNmZXIgaW4gd2hpY2ggdHJhbnNmZXIgaW5mbyBpcyBmaWxsZWQKQEAgLTY2OCwzNTggKzUyMywyNzYgQEAKICAqIG9mIFNQSSBjb250cm9sbGVyIGFuZCB0aGVuIHdhaXQgdW50aWwgdGhlIGNvbXBsZXRpb24gd2lsbCBiZSBtYXJrZWQKICAqIGJ5IHRoZSBJUlEgSGFuZGxlci4KICAqLwotc3RhdGljIGludCBkYXZpbmNpX3NwaV9idWZzX3BpbyhzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBzdHJ1Y3Qgc3BpX3RyYW5zZmVyICp0KQorc3RhdGljIGludCBkYXZpbmNpX3NwaV9idWZzKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIHN0cnVjdCBzcGlfdHJhbnNmZXIgKnQpCiB7Ci0Jc3RydWN0IGRhdmluY2lfc3BpICpkYXZpbmNpX3NwaTsKLQlpbnQgaW50X3N0YXR1cywgY291bnQsIHJldDsKLQl1OCBjb252LCB0bXA7Ci0JdTMyIHR4X2RhdGEsIGRhdGExX3JlZ192YWw7Ci0JdTMyIGJ1Zl92YWwsIGZsZ192YWw7CisJc3RydWN0IGRhdmluY2lfc3BpICpkc3BpOworCWludCBkYXRhX3R5cGUsIHJldDsKKwl1MzIgdHhfZGF0YSwgc3BpZGF0MTsKKwl1MzIgZXJyb3JzID0gMDsKKwlzdHJ1Y3QgZGF2aW5jaV9zcGlfY29uZmlnICpzcGljZmc7CiAJc3RydWN0IGRhdmluY2lfc3BpX3BsYXRmb3JtX2RhdGEgKnBkYXRhOwotCi0JZGF2aW5jaV9zcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKLQlwZGF0YSA9IGRhdmluY2lfc3BpLT5wZGF0YTsKLQotCWRhdmluY2lfc3BpLT50eCA9IHQtPnR4X2J1ZjsKLQlkYXZpbmNpX3NwaS0+cnggPSB0LT5yeF9idWY7Ci0KLQkvKiBjb252ZXJ0IGxlbiB0byB3b3JkcyBiYXNlZCBvbiBiaXRzX3Blcl93b3JkICovCi0JY29udiA9IGRhdmluY2lfc3BpLT5zbGF2ZVtzcGktPmNoaXBfc2VsZWN0XS5ieXRlc19wZXJfd29yZDsKLQlkYXZpbmNpX3NwaS0+Y291bnQgPSB0LT5sZW4gLyBjb252OwotCi0JSU5JVF9DT01QTEVUSU9OKGRhdmluY2lfc3BpLT5kb25lKTsKLQotCXJldCA9IGRhdmluY2lfc3BpX2J1ZnNfcHJlcChzcGksIGRhdmluY2lfc3BpKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JLyogRW5hYmxlIFNQSSAqLwotCXNldF9pb19iaXRzKGRhdmluY2lfc3BpLT5iYXNlICsgU1BJR0NSMSwgU1BJR0NSMV9TUElFTkFfTUFTSyk7Ci0KLQlpb3dyaXRlMzIoMCB8IChwZGF0YS0+YzJ0ZGVsYXkgPDwgU1BJX0MyVERFTEFZX1NISUZUKSB8Ci0JCQkocGRhdGEtPnQyY2RlbGF5IDw8IFNQSV9UMkNERUxBWV9TSElGVCksCi0JCQlkYXZpbmNpX3NwaS0+YmFzZSArIFNQSURFTEFZKTsKLQotCWNvdW50ID0gZGF2aW5jaV9zcGktPmNvdW50OwotCWRhdGExX3JlZ192YWwgPSBwZGF0YS0+Y3NfaG9sZCA8PCBTUElEQVQxX0NTSE9MRF9TSElGVDsKLQl0bXAgPSB+KDB4MSA8PCBzcGktPmNoaXBfc2VsZWN0KTsKLQotCWNsZWFyX2lvX2JpdHMoZGF2aW5jaV9zcGktPmJhc2UgKyBTUElERUYsIH50bXApOwotCi0JZGF0YTFfcmVnX3ZhbCB8PSB0bXAgPDwgU1BJREFUMV9DU05SX1NISUZUOwotCi0Jd2hpbGUgKChpb3JlYWQzMihkYXZpbmNpX3NwaS0+YmFzZSArIFNQSUJVRikKLQkJCQkmIFNQSUJVRl9SWEVNUFRZX01BU0spID09IDApCi0JCWNwdV9yZWxheCgpOwotCi0JLyogRGV0ZXJtaW5lIHRoZSBjb21tYW5kIHRvIGV4ZWN1dGUgUkVBRCBvciBXUklURSAqLwotCWlmICh0LT50eF9idWYpIHsKLQkJY2xlYXJfaW9fYml0cyhkYXZpbmNpX3NwaS0+YmFzZSArIFNQSUlOVCwgU1BJSU5UX01BU0tBTEwpOwotCi0JCXdoaWxlICgxKSB7Ci0JCQl0eF9kYXRhID0gZGF2aW5jaV9zcGktPmdldF90eChkYXZpbmNpX3NwaSk7Ci0KLQkJCWRhdGExX3JlZ192YWwgJj0gfigweEZGRkYpOwotCQkJZGF0YTFfcmVnX3ZhbCB8PSAoMHhGRkZGICYgdHhfZGF0YSk7Ci0KLQkJCWJ1Zl92YWwgPSBpb3JlYWQzMihkYXZpbmNpX3NwaS0+YmFzZSArIFNQSUJVRik7Ci0JCQlpZiAoKGJ1Zl92YWwgJiBTUElCVUZfVFhGVUxMX01BU0spID09IDApIHsKLQkJCQlpb3dyaXRlMzIoZGF0YTFfcmVnX3ZhbCwKLQkJCQkJCWRhdmluY2lfc3BpLT5iYXNlICsgU1BJREFUMSk7Ci0KLQkJCQljb3VudC0tOwotCQkJfQotCQkJd2hpbGUgKGlvcmVhZDMyKGRhdmluY2lfc3BpLT5iYXNlICsgU1BJQlVGKQotCQkJCQkmIFNQSUJVRl9SWEVNUFRZX01BU0spCi0JCQkJY3B1X3JlbGF4KCk7Ci0KLQkJCS8qIGdldHRpbmcgdGhlIHJldHVybmVkIGJ5dGUgKi8KLQkJCWlmICh0LT5yeF9idWYpIHsKLQkJCQlidWZfdmFsID0gaW9yZWFkMzIoZGF2aW5jaV9zcGktPmJhc2UgKyBTUElCVUYpOwotCQkJCWRhdmluY2lfc3BpLT5nZXRfcngoYnVmX3ZhbCwgZGF2aW5jaV9zcGkpOwotCQkJfQotCQkJaWYgKGNvdW50IDw9IDApCi0JCQkJYnJlYWs7Ci0JCX0KLQl9IGVsc2UgewotCQlpZiAocGRhdGEtPnBvbGxfbW9kZSkgewotCQkJd2hpbGUgKDEpIHsKLQkJCQkvKiBrZWVwcyB0aGUgc2VyaWFsIGNsb2NrIGdvaW5nICovCi0JCQkJaWYgKChpb3JlYWQzMihkYXZpbmNpX3NwaS0+YmFzZSArIFNQSUJVRikKLQkJCQkJCSYgU1BJQlVGX1RYRlVMTF9NQVNLKSA9PSAwKQotCQkJCQlpb3dyaXRlMzIoZGF0YTFfcmVnX3ZhbCwKLQkJCQkJCWRhdmluY2lfc3BpLT5iYXNlICsgU1BJREFUMSk7Ci0KLQkJCQl3aGlsZSAoaW9yZWFkMzIoZGF2aW5jaV9zcGktPmJhc2UgKyBTUElCVUYpICYKLQkJCQkJCVNQSUJVRl9SWEVNUFRZX01BU0spCi0JCQkJCWNwdV9yZWxheCgpOwotCi0JCQkJZmxnX3ZhbCA9IGlvcmVhZDMyKGRhdmluY2lfc3BpLT5iYXNlICsgU1BJRkxHKTsKLQkJCQlidWZfdmFsID0gaW9yZWFkMzIoZGF2aW5jaV9zcGktPmJhc2UgKyBTUElCVUYpOwotCi0JCQkJZGF2aW5jaV9zcGktPmdldF9yeChidWZfdmFsLCBkYXZpbmNpX3NwaSk7Ci0KLQkJCQljb3VudC0tOwotCQkJCWlmIChjb3VudCA8PSAwKQotCQkJCQlicmVhazsKLQkJCX0KLQkJfSBlbHNlIHsJLyogUmVjZWl2ZSBpbiBJbnRlcnJ1cHQgbW9kZSAqLwotCQkJaW50IGk7Ci0KLQkJCWZvciAoaSA9IDA7IGkgPCBkYXZpbmNpX3NwaS0+Y291bnQ7IGkrKykgewotCQkJCXNldF9pb19iaXRzKGRhdmluY2lfc3BpLT5iYXNlICsgU1BJSU5ULAotCQkJCQkJU1BJSU5UX0JJVEVSUl9JTlRSCi0JCQkJCQl8IFNQSUlOVF9PVlJSVU5fSU5UUgotCQkJCQkJfCBTUElJTlRfUlhfSU5UUik7Ci0KLQkJCQlpb3dyaXRlMzIoZGF0YTFfcmVnX3ZhbCwKLQkJCQkJCWRhdmluY2lfc3BpLT5iYXNlICsgU1BJREFUMSk7Ci0KLQkJCQl3aGlsZSAoaW9yZWFkMzIoZGF2aW5jaV9zcGktPmJhc2UgKyBTUElJTlQpICYKLQkJCQkJCVNQSUlOVF9SWF9JTlRSKQotCQkJCQljcHVfcmVsYXgoKTsKLQkJCX0KLQkJCWlvd3JpdGUzMigoZGF0YTFfcmVnX3ZhbCAmIDB4MGZmY2ZmZmYpLAotCQkJCQlkYXZpbmNpX3NwaS0+YmFzZSArIFNQSURBVDEpOwotCQl9Ci0JfQotCi0JLyoKLQkgKiBDaGVjayBmb3IgYml0IGVycm9yLCBkZXN5bmMgZXJyb3IscGFyaXR5IGVycm9yLHRpbWVvdXQgZXJyb3IgYW5kCi0JICogcmVjZWl2ZSBvdmVyZmxvdyBlcnJvcnMKLQkgKi8KLQlpbnRfc3RhdHVzID0gaW9yZWFkMzIoZGF2aW5jaV9zcGktPmJhc2UgKyBTUElGTEcpOwotCi0JcmV0ID0gZGF2aW5jaV9zcGlfY2hlY2tfZXJyb3IoZGF2aW5jaV9zcGksIGludF9zdGF0dXMpOwotCWlmIChyZXQgIT0gMCkKLQkJcmV0dXJuIHJldDsKLQotCS8qIFNQSSBGcmFtZXdvcmsgbWFpbnRhaW5zIHRoZSBjb3VudCBvbmx5IGluIGJ5dGVzIHNvIGNvbnZlcnQgYmFjayAqLwotCWRhdmluY2lfc3BpLT5jb3VudCAqPSBjb252OwotCi0JcmV0dXJuIHQtPmxlbjsKLX0KLQotI2RlZmluZSBEQVZJTkNJX0RNQV9EQVRBX1RZUEVfUzgJMHgwMQotI2RlZmluZSBEQVZJTkNJX0RNQV9EQVRBX1RZUEVfUzE2CTB4MDIKLSNkZWZpbmUgREFWSU5DSV9ETUFfREFUQV9UWVBFX1MzMgkweDA0Ci0KLXN0YXRpYyBpbnQgZGF2aW5jaV9zcGlfYnVmc19kbWEoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgc3RydWN0IHNwaV90cmFuc2ZlciAqdCkKLXsKLQlzdHJ1Y3QgZGF2aW5jaV9zcGkgKmRhdmluY2lfc3BpOwotCWludCBpbnRfc3RhdHVzID0gMDsKLQlpbnQgY291bnQsIHRlbXBfY291bnQ7Ci0JdTggY29udiA9IDE7Ci0JdTggdG1wOwotCXUzMiBkYXRhMV9yZWdfdmFsOwotCXN0cnVjdCBkYXZpbmNpX3NwaV9kbWEgKmRhdmluY2lfc3BpX2RtYTsKLQlpbnQgd29yZF9sZW4sIGRhdGFfdHlwZSwgcmV0OwotCXVuc2lnbmVkIGxvbmcgdHhfcmVnLCByeF9yZWc7Ci0Jc3RydWN0IGRhdmluY2lfc3BpX3BsYXRmb3JtX2RhdGEgKnBkYXRhOworCXVuc2lnbmVkIHVuaW5pdGlhbGl6ZWRfdmFyKHJ4X2J1Zl9jb3VudCk7CiAJc3RydWN0IGRldmljZSAqc2RldjsKIAotCWRhdmluY2lfc3BpID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7Ci0JcGRhdGEgPSBkYXZpbmNpX3NwaS0+cGRhdGE7Ci0Jc2RldiA9IGRhdmluY2lfc3BpLT5iaXRiYW5nLm1hc3Rlci0+ZGV2LnBhcmVudDsKLQotCWRhdmluY2lfc3BpX2RtYSA9ICZkYXZpbmNpX3NwaS0+ZG1hX2NoYW5uZWxzW3NwaS0+Y2hpcF9zZWxlY3RdOwotCi0JdHhfcmVnID0gKHVuc2lnbmVkIGxvbmcpZGF2aW5jaV9zcGktPnBiYXNlICsgU1BJREFUMTsKLQlyeF9yZWcgPSAodW5zaWduZWQgbG9uZylkYXZpbmNpX3NwaS0+cGJhc2UgKyBTUElCVUY7Ci0KLQlkYXZpbmNpX3NwaS0+dHggPSB0LT50eF9idWY7Ci0JZGF2aW5jaV9zcGktPnJ4ID0gdC0+cnhfYnVmOworCWRzcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKKwlwZGF0YSA9IGRzcGktPnBkYXRhOworCXNwaWNmZyA9IChzdHJ1Y3QgZGF2aW5jaV9zcGlfY29uZmlnICopc3BpLT5jb250cm9sbGVyX2RhdGE7CisJaWYgKCFzcGljZmcpCisJCXNwaWNmZyA9ICZkYXZpbmNpX3NwaV9kZWZhdWx0X2NmZzsKKwlzZGV2ID0gZHNwaS0+Yml0YmFuZy5tYXN0ZXItPmRldi5wYXJlbnQ7CiAKIAkvKiBjb252ZXJ0IGxlbiB0byB3b3JkcyBiYXNlZCBvbiBiaXRzX3Blcl93b3JkICovCi0JY29udiA9IGRhdmluY2lfc3BpLT5zbGF2ZVtzcGktPmNoaXBfc2VsZWN0XS5ieXRlc19wZXJfd29yZDsKLQlkYXZpbmNpX3NwaS0+Y291bnQgPSB0LT5sZW4gLyBjb252OworCWRhdGFfdHlwZSA9IGRzcGktPmJ5dGVzX3Blcl93b3JkW3NwaS0+Y2hpcF9zZWxlY3RdOwogCi0JSU5JVF9DT01QTEVUSU9OKGRhdmluY2lfc3BpLT5kb25lKTsKKwlkc3BpLT50eCA9IHQtPnR4X2J1ZjsKKwlkc3BpLT5yeCA9IHQtPnJ4X2J1ZjsKKwlkc3BpLT53Y291bnQgPSB0LT5sZW4gLyBkYXRhX3R5cGU7CisJZHNwaS0+cmNvdW50ID0gZHNwaS0+d2NvdW50OwogCi0JaW5pdF9jb21wbGV0aW9uKCZkYXZpbmNpX3NwaV9kbWEtPmRtYV9yeF9jb21wbGV0aW9uKTsKLQlpbml0X2NvbXBsZXRpb24oJmRhdmluY2lfc3BpX2RtYS0+ZG1hX3R4X2NvbXBsZXRpb24pOworCXNwaWRhdDEgPSBpb3JlYWQzMihkc3BpLT5iYXNlICsgU1BJREFUMSk7CiAKLQl3b3JkX2xlbiA9IGNvbnYgKiA4OworCWNsZWFyX2lvX2JpdHMoZHNwaS0+YmFzZSArIFNQSUdDUjEsIFNQSUdDUjFfUE9XRVJET1dOX01BU0spOworCXNldF9pb19iaXRzKGRzcGktPmJhc2UgKyBTUElHQ1IxLCBTUElHQ1IxX1NQSUVOQV9NQVNLKTsKIAotCWlmICh3b3JkX2xlbiA8PSA4KQotCQlkYXRhX3R5cGUgPSBEQVZJTkNJX0RNQV9EQVRBX1RZUEVfUzg7Ci0JZWxzZSBpZiAod29yZF9sZW4gPD0gMTYpCi0JCWRhdGFfdHlwZSA9IERBVklOQ0lfRE1BX0RBVEFfVFlQRV9TMTY7Ci0JZWxzZSBpZiAod29yZF9sZW4gPD0gMzIpCi0JCWRhdGFfdHlwZSA9IERBVklOQ0lfRE1BX0RBVEFfVFlQRV9TMzI7Ci0JZWxzZQotCQlyZXR1cm4gLUVJTlZBTDsKKwlJTklUX0NPTVBMRVRJT04oZHNwaS0+ZG9uZSk7CiAKLQlyZXQgPSBkYXZpbmNpX3NwaV9idWZzX3ByZXAoc3BpLCBkYXZpbmNpX3NwaSk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKKwlpZiAoc3BpY2ZnLT5pb190eXBlID09IFNQSV9JT19UWVBFX0lOVFIpCisJCXNldF9pb19iaXRzKGRzcGktPmJhc2UgKyBTUElJTlQsIFNQSUlOVF9NQVNLSU5UKTsKIAotCS8qIFB1dCBkZWxheSB2YWwgaWYgcmVxdWlyZWQgKi8KLQlpb3dyaXRlMzIoMCB8IChwZGF0YS0+YzJ0ZGVsYXkgPDwgU1BJX0MyVERFTEFZX1NISUZUKSB8Ci0JCQkocGRhdGEtPnQyY2RlbGF5IDw8IFNQSV9UMkNERUxBWV9TSElGVCksCi0JCQlkYXZpbmNpX3NwaS0+YmFzZSArIFNQSURFTEFZKTsKLQotCWNvdW50ID0gZGF2aW5jaV9zcGktPmNvdW50OwkvKiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzICovCi0JZGF0YTFfcmVnX3ZhbCA9IHBkYXRhLT5jc19ob2xkIDw8IFNQSURBVDFfQ1NIT0xEX1NISUZUOwotCi0JLyogQ1MgZGVmYXVsdCA9IDB4RkYgKi8KLQl0bXAgPSB+KDB4MSA8PCBzcGktPmNoaXBfc2VsZWN0KTsKLQotCWNsZWFyX2lvX2JpdHMoZGF2aW5jaV9zcGktPmJhc2UgKyBTUElERUYsIH50bXApOwotCi0JZGF0YTFfcmVnX3ZhbCB8PSB0bXAgPDwgU1BJREFUMV9DU05SX1NISUZUOwotCi0JLyogZGlzYWJsZSBhbGwgaW50ZXJydXB0cyBmb3IgZG1hIHRyYW5zZmVycyAqLwotCWNsZWFyX2lvX2JpdHMoZGF2aW5jaV9zcGktPmJhc2UgKyBTUElJTlQsIFNQSUlOVF9NQVNLQUxMKTsKLQkvKiBEaXNhYmxlIFNQSSB0byB3cml0ZSBjb25maWd1cmF0aW9uIGJpdHMgaW4gU1BJREFUICovCi0JY2xlYXJfaW9fYml0cyhkYXZpbmNpX3NwaS0+YmFzZSArIFNQSUdDUjEsIFNQSUdDUjFfU1BJRU5BX01BU0spOwotCWlvd3JpdGUzMihkYXRhMV9yZWdfdmFsLCBkYXZpbmNpX3NwaS0+YmFzZSArIFNQSURBVDEpOwotCS8qIEVuYWJsZSBTUEkgKi8KLQlzZXRfaW9fYml0cyhkYXZpbmNpX3NwaS0+YmFzZSArIFNQSUdDUjEsIFNQSUdDUjFfU1BJRU5BX01BU0spOwotCi0Jd2hpbGUgKChpb3JlYWQzMihkYXZpbmNpX3NwaS0+YmFzZSArIFNQSUJVRikKLQkJCQkmIFNQSUJVRl9SWEVNUFRZX01BU0spID09IDApCi0JCWNwdV9yZWxheCgpOwotCi0KLQlpZiAodC0+dHhfYnVmKSB7Ci0JCXQtPnR4X2RtYSA9IGRtYV9tYXBfc2luZ2xlKCZzcGktPmRldiwgKHZvaWQgKil0LT50eF9idWYsIGNvdW50LAotCQkJCURNQV9UT19ERVZJQ0UpOwotCQlpZiAoZG1hX21hcHBpbmdfZXJyb3IoJnNwaS0+ZGV2LCB0LT50eF9kbWEpKSB7Ci0JCQlkZXZfZGJnKHNkZXYsICJVbmFibGUgdG8gRE1BIG1hcCBhICVkIGJ5dGVzIgotCQkJCSIgVFggYnVmZmVyXG4iLCBjb3VudCk7Ci0JCQlyZXR1cm4gLUVOT01FTTsKLQkJfQotCQl0ZW1wX2NvdW50ID0gY291bnQ7CisJaWYgKHNwaWNmZy0+aW9fdHlwZSAhPSBTUElfSU9fVFlQRV9ETUEpIHsKKwkJLyogc3RhcnQgdGhlIHRyYW5zZmVyICovCisJCWRzcGktPndjb3VudC0tOworCQl0eF9kYXRhID0gZHNwaS0+Z2V0X3R4KGRzcGkpOworCQlzcGlkYXQxICY9IDB4RkZGRjAwMDA7CisJCXNwaWRhdDEgfD0gdHhfZGF0YSAmIDB4RkZGRjsKKwkJaW93cml0ZTMyKHNwaWRhdDEsIGRzcGktPmJhc2UgKyBTUElEQVQxKTsKIAl9IGVsc2UgewotCQkvKiBXZSBuZWVkIFRYIGNsb2NraW5nIGZvciBSWCB0cmFuc2FjdGlvbiAqLwotCQl0LT50eF9kbWEgPSBkbWFfbWFwX3NpbmdsZSgmc3BpLT5kZXYsCi0JCQkJKHZvaWQgKilkYXZpbmNpX3NwaS0+dG1wX2J1ZiwgY291bnQgKyAxLAotCQkJCURNQV9UT19ERVZJQ0UpOwotCQlpZiAoZG1hX21hcHBpbmdfZXJyb3IoJnNwaS0+ZGV2LCB0LT50eF9kbWEpKSB7Ci0JCQlkZXZfZGJnKHNkZXYsICJVbmFibGUgdG8gRE1BIG1hcCBhICVkIGJ5dGVzIgotCQkJCSIgVFggdG1wIGJ1ZmZlclxuIiwgY291bnQpOwotCQkJcmV0dXJuIC1FTk9NRU07CisJCXN0cnVjdCBkYXZpbmNpX3NwaV9kbWEgKmRtYTsKKwkJdW5zaWduZWQgbG9uZyB0eF9yZWcsIHJ4X3JlZzsKKwkJc3RydWN0IGVkbWFjY19wYXJhbSBwYXJhbTsKKwkJdm9pZCAqcnhfYnVmOworCisJCWRtYSA9ICZkc3BpLT5kbWE7CisKKwkJdHhfcmVnID0gKHVuc2lnbmVkIGxvbmcpZHNwaS0+cGJhc2UgKyBTUElEQVQxOworCQlyeF9yZWcgPSAodW5zaWduZWQgbG9uZylkc3BpLT5wYmFzZSArIFNQSUJVRjsKKworCQkvKgorCQkgKiBUcmFuc21pdCBETUEgc2V0dXAKKwkJICoKKwkJICogSWYgdGhlcmUgaXMgdHJhbnNtaXQgZGF0YSwgbWFwIHRoZSB0cmFuc21pdCBidWZmZXIsIHNldCBpdAorCQkgKiBhcyB0aGUgc291cmNlIG9mIGRhdGEgYW5kIHNldCB0aGUgc291cmNlIEIgaW5kZXggdG8gZGF0YQorCQkgKiBzaXplLiBJZiB0aGVyZSBpcyBubyB0cmFuc21pdCBkYXRhLCBzZXQgdGhlIHRyYW5zbWl0IHJlZ2lzdGVyCisJCSAqIGFzIHRoZSBzb3VyY2Ugb2YgZGF0YSwgYW5kIHNldCB0aGUgc291cmNlIEIgaW5kZXggdG8gemVyby4KKwkJICoKKwkJICogVGhlIGRlc3RpbmF0aW9uIGlzIGFsd2F5cyB0aGUgdHJhbnNtaXQgcmVnaXN0ZXIgaXRzZWxmLiBBbmQKKwkJICogdGhlIGRlc3RpbmF0aW9uIG5ldmVyIGluY3JlbWVudHMuCisJCSAqLworCisJCWlmICh0LT50eF9idWYpIHsKKwkJCXQtPnR4X2RtYSA9IGRtYV9tYXBfc2luZ2xlKCZzcGktPmRldiwgKHZvaWQgKil0LT50eF9idWYsCisJCQkJCQlkc3BpLT53Y291bnQsIERNQV9UT19ERVZJQ0UpOworCQkJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKCZzcGktPmRldiwgdC0+dHhfZG1hKSkgeworCQkJCWRldl9kYmcoc2RldiwgIlVuYWJsZSB0byBETUEgbWFwICVkIGJ5dGVzIgorCQkJCQkJIlRYIGJ1ZmZlclxuIiwgZHNwaS0+d2NvdW50KTsKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCX0KIAkJfQotCQl0ZW1wX2NvdW50ID0gY291bnQgKyAxOwotCX0KIAotCWVkbWFfc2V0X3RyYW5zZmVyX3BhcmFtcyhkYXZpbmNpX3NwaV9kbWEtPmRtYV90eF9jaGFubmVsLAotCQkJCQlkYXRhX3R5cGUsIHRlbXBfY291bnQsIDEsIDAsIEFTWU5DKTsKLQllZG1hX3NldF9kZXN0KGRhdmluY2lfc3BpX2RtYS0+ZG1hX3R4X2NoYW5uZWwsIHR4X3JlZywgSU5DUiwgVzhCSVQpOwotCWVkbWFfc2V0X3NyYyhkYXZpbmNpX3NwaV9kbWEtPmRtYV90eF9jaGFubmVsLCB0LT50eF9kbWEsIElOQ1IsIFc4QklUKTsKLQllZG1hX3NldF9zcmNfaW5kZXgoZGF2aW5jaV9zcGlfZG1hLT5kbWFfdHhfY2hhbm5lbCwgZGF0YV90eXBlLCAwKTsKLQllZG1hX3NldF9kZXN0X2luZGV4KGRhdmluY2lfc3BpX2RtYS0+ZG1hX3R4X2NoYW5uZWwsIDAsIDApOworCQlwYXJhbS5vcHQgPSBUQ0lOVEVOIHwgRURNQV9UQ0MoZG1hLT50eF9jaGFubmVsKTsKKwkJcGFyYW0uc3JjID0gdC0+dHhfYnVmID8gdC0+dHhfZG1hIDogdHhfcmVnOworCQlwYXJhbS5hX2JfY250ID0gZHNwaS0+d2NvdW50IDw8IDE2IHwgZGF0YV90eXBlOworCQlwYXJhbS5kc3QgPSB0eF9yZWc7CisJCXBhcmFtLnNyY19kc3RfYmlkeCA9IHQtPnR4X2J1ZiA/IGRhdGFfdHlwZSA6IDA7CisJCXBhcmFtLmxpbmtfYmNudHJsZCA9IDB4ZmZmZjsKKwkJcGFyYW0uc3JjX2RzdF9jaWR4ID0gMDsKKwkJcGFyYW0uY2NudCA9IDE7CisJCWVkbWFfd3JpdGVfc2xvdChkbWEtPnR4X2NoYW5uZWwsICZwYXJhbSk7CisJCWVkbWFfbGluayhkbWEtPnR4X2NoYW5uZWwsIGRtYS0+ZHVtbXlfcGFyYW1fc2xvdCk7CiAKLQlpZiAodC0+cnhfYnVmKSB7Ci0JCS8qIGluaXRpYXRlIHRyYW5zYWN0aW9uICovCi0JCWlvd3JpdGUzMihkYXRhMV9yZWdfdmFsLCBkYXZpbmNpX3NwaS0+YmFzZSArIFNQSURBVDEpOworCQkvKgorCQkgKiBSZWNlaXZlIERNQSBzZXR1cAorCQkgKgorCQkgKiBJZiB0aGVyZSBpcyByZWNlaXZlIGJ1ZmZlciwgdXNlIGl0IHRvIHJlY2VpdmUgZGF0YS4gSWYgdGhlcmUKKwkJICogaXMgbm9uZSBwcm92aWRlZCwgdXNlIGEgdGVtcG9yYXJ5IHJlY2VpdmUgYnVmZmVyLiBTZXQgdGhlCisJCSAqIGRlc3RpbmF0aW9uIEIgaW5kZXggdG8gMCBzbyBlZmZlY3RpdmVseSBvbmx5IG9uZSBieXRlIGlzIHVzZWQKKwkJICogaW4gdGhlIHRlbXBvcmFyeSBidWZmZXIgKGFkZHJlc3MgZG9lcyBub3QgaW5jcmVtZW50KS4KKwkJICoKKwkJICogVGhlIHNvdXJjZSBvZiByZWNlaXZlIGRhdGEgaXMgdGhlIHJlY2VpdmUgZGF0YSByZWdpc3Rlci4gVGhlCisJCSAqIHNvdXJjZSBhZGRyZXNzIG5ldmVyIGluY3JlbWVudHMuCisJCSAqLwogCi0JCXQtPnJ4X2RtYSA9IGRtYV9tYXBfc2luZ2xlKCZzcGktPmRldiwgKHZvaWQgKil0LT5yeF9idWYsIGNvdW50LAotCQkJCURNQV9GUk9NX0RFVklDRSk7CisJCWlmICh0LT5yeF9idWYpIHsKKwkJCXJ4X2J1ZiA9IHQtPnJ4X2J1ZjsKKwkJCXJ4X2J1Zl9jb3VudCA9IGRzcGktPnJjb3VudDsKKwkJfSBlbHNlIHsKKwkJCXJ4X2J1ZiA9IGRzcGktPnJ4X3RtcF9idWY7CisJCQlyeF9idWZfY291bnQgPSBzaXplb2YoZHNwaS0+cnhfdG1wX2J1Zik7CisJCX0KKworCQl0LT5yeF9kbWEgPSBkbWFfbWFwX3NpbmdsZSgmc3BpLT5kZXYsIHJ4X2J1ZiwgcnhfYnVmX2NvdW50LAorCQkJCQkJCURNQV9GUk9NX0RFVklDRSk7CiAJCWlmIChkbWFfbWFwcGluZ19lcnJvcigmc3BpLT5kZXYsIHQtPnJ4X2RtYSkpIHsKIAkJCWRldl9kYmcoc2RldiwgIkNvdWxkbid0IERNQSBtYXAgYSAlZCBieXRlcyBSWCBidWZmZXJcbiIsCi0JCQkJCWNvdW50KTsKLQkJCWlmICh0LT50eF9idWYgIT0gTlVMTCkKLQkJCQlkbWFfdW5tYXBfc2luZ2xlKE5VTEwsIHQtPnR4X2RtYSwKLQkJCQkJCSBjb3VudCwgRE1BX1RPX0RFVklDRSk7CisJCQkJCQkJCXJ4X2J1Zl9jb3VudCk7CisJCQlpZiAodC0+dHhfYnVmKQorCQkJCWRtYV91bm1hcF9zaW5nbGUoTlVMTCwgdC0+dHhfZG1hLCBkc3BpLT53Y291bnQsCisJCQkJCQkJCURNQV9UT19ERVZJQ0UpOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KLQkJZWRtYV9zZXRfdHJhbnNmZXJfcGFyYW1zKGRhdmluY2lfc3BpX2RtYS0+ZG1hX3J4X2NoYW5uZWwsCi0JCQkJZGF0YV90eXBlLCBjb3VudCwgMSwgMCwgQVNZTkMpOwotCQllZG1hX3NldF9zcmMoZGF2aW5jaV9zcGlfZG1hLT5kbWFfcnhfY2hhbm5lbCwKLQkJCQlyeF9yZWcsIElOQ1IsIFc4QklUKTsKLQkJZWRtYV9zZXRfZGVzdChkYXZpbmNpX3NwaV9kbWEtPmRtYV9yeF9jaGFubmVsLAotCQkJCXQtPnJ4X2RtYSwgSU5DUiwgVzhCSVQpOwotCQllZG1hX3NldF9zcmNfaW5kZXgoZGF2aW5jaV9zcGlfZG1hLT5kbWFfcnhfY2hhbm5lbCwgMCwgMCk7Ci0JCWVkbWFfc2V0X2Rlc3RfaW5kZXgoZGF2aW5jaV9zcGlfZG1hLT5kbWFfcnhfY2hhbm5lbCwKLQkJCQlkYXRhX3R5cGUsIDApOworCisJCXBhcmFtLm9wdCA9IFRDSU5URU4gfCBFRE1BX1RDQyhkbWEtPnJ4X2NoYW5uZWwpOworCQlwYXJhbS5zcmMgPSByeF9yZWc7CisJCXBhcmFtLmFfYl9jbnQgPSBkc3BpLT5yY291bnQgPDwgMTYgfCBkYXRhX3R5cGU7CisJCXBhcmFtLmRzdCA9IHQtPnJ4X2RtYTsKKwkJcGFyYW0uc3JjX2RzdF9iaWR4ID0gKHQtPnJ4X2J1ZiA/IGRhdGFfdHlwZSA6IDApIDw8IDE2OworCQlwYXJhbS5saW5rX2JjbnRybGQgPSAweGZmZmY7CisJCXBhcmFtLnNyY19kc3RfY2lkeCA9IDA7CisJCXBhcmFtLmNjbnQgPSAxOworCQllZG1hX3dyaXRlX3Nsb3QoZG1hLT5yeF9jaGFubmVsLCAmcGFyYW0pOworCisJCWlmIChwZGF0YS0+Y3Nob2xkX2J1ZykKKwkJCWlvd3JpdGUxNihzcGlkYXQxID4+IDE2LCBkc3BpLT5iYXNlICsgU1BJREFUMSArIDIpOworCisJCWVkbWFfc3RhcnQoZG1hLT5yeF9jaGFubmVsKTsKKwkJZWRtYV9zdGFydChkbWEtPnR4X2NoYW5uZWwpOworCQlzZXRfaW9fYml0cyhkc3BpLT5iYXNlICsgU1BJSU5ULCBTUElJTlRfRE1BX1JFUV9FTik7CiAJfQogCi0JaWYgKCh0LT50eF9idWYpIHx8ICh0LT5yeF9idWYpKQotCQllZG1hX3N0YXJ0KGRhdmluY2lfc3BpX2RtYS0+ZG1hX3R4X2NoYW5uZWwpOworCS8qIFdhaXQgZm9yIHRoZSB0cmFuc2ZlciB0byBjb21wbGV0ZSAqLworCWlmIChzcGljZmctPmlvX3R5cGUgIT0gU1BJX0lPX1RZUEVfUE9MTCkgeworCQl3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGUoJihkc3BpLT5kb25lKSk7CisJfSBlbHNlIHsKKwkJd2hpbGUgKGRzcGktPnJjb3VudCA+IDAgfHwgZHNwaS0+d2NvdW50ID4gMCkgeworCQkJZXJyb3JzID0gZGF2aW5jaV9zcGlfcHJvY2Vzc19ldmVudHMoZHNwaSk7CisJCQlpZiAoZXJyb3JzKQorCQkJCWJyZWFrOworCQkJY3B1X3JlbGF4KCk7CisJCX0KKwl9CiAKLQlpZiAodC0+cnhfYnVmKQotCQllZG1hX3N0YXJ0KGRhdmluY2lfc3BpX2RtYS0+ZG1hX3J4X2NoYW5uZWwpOworCWNsZWFyX2lvX2JpdHMoZHNwaS0+YmFzZSArIFNQSUlOVCwgU1BJSU5UX01BU0tBTEwpOworCWlmIChzcGljZmctPmlvX3R5cGUgPT0gU1BJX0lPX1RZUEVfRE1BKSB7CiAKLQlpZiAoKHQtPnJ4X2J1ZikgfHwgKHQtPnR4X2J1ZikpCi0JCWRhdmluY2lfc3BpX3NldF9kbWFfcmVxKHNwaSwgMSk7CisJCWlmICh0LT50eF9idWYpCisJCQlkbWFfdW5tYXBfc2luZ2xlKE5VTEwsIHQtPnR4X2RtYSwgZHNwaS0+d2NvdW50LAorCQkJCQkJCQlETUFfVE9fREVWSUNFKTsKIAotCWlmICh0LT50eF9idWYpCi0JCXdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZSgKLQkJCQkmZGF2aW5jaV9zcGlfZG1hLT5kbWFfdHhfY29tcGxldGlvbik7CisJCWRtYV91bm1hcF9zaW5nbGUoTlVMTCwgdC0+cnhfZG1hLCByeF9idWZfY291bnQsCisJCQkJCQkJRE1BX0ZST01fREVWSUNFKTsKIAotCWlmICh0LT5yeF9idWYpCi0JCXdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZSgKLQkJCQkmZGF2aW5jaV9zcGlfZG1hLT5kbWFfcnhfY29tcGxldGlvbik7CisJCWNsZWFyX2lvX2JpdHMoZHNwaS0+YmFzZSArIFNQSUlOVCwgU1BJSU5UX0RNQV9SRVFfRU4pOworCX0KIAotCWRtYV91bm1hcF9zaW5nbGUoTlVMTCwgdC0+dHhfZG1hLCB0ZW1wX2NvdW50LCBETUFfVE9fREVWSUNFKTsKLQotCWlmICh0LT5yeF9idWYpCi0JCWRtYV91bm1hcF9zaW5nbGUoTlVMTCwgdC0+cnhfZG1hLCBjb3VudCwgRE1BX0ZST01fREVWSUNFKTsKKwljbGVhcl9pb19iaXRzKGRzcGktPmJhc2UgKyBTUElHQ1IxLCBTUElHQ1IxX1NQSUVOQV9NQVNLKTsKKwlzZXRfaW9fYml0cyhkc3BpLT5iYXNlICsgU1BJR0NSMSwgU1BJR0NSMV9QT1dFUkRPV05fTUFTSyk7CiAKIAkvKgogCSAqIENoZWNrIGZvciBiaXQgZXJyb3IsIGRlc3luYyBlcnJvcixwYXJpdHkgZXJyb3IsdGltZW91dCBlcnJvciBhbmQKIAkgKiByZWNlaXZlIG92ZXJmbG93IGVycm9ycwogCSAqLwotCWludF9zdGF0dXMgPSBpb3JlYWQzMihkYXZpbmNpX3NwaS0+YmFzZSArIFNQSUZMRyk7Ci0KLQlyZXQgPSBkYXZpbmNpX3NwaV9jaGVja19lcnJvcihkYXZpbmNpX3NwaSwgaW50X3N0YXR1cyk7Ci0JaWYgKHJldCAhPSAwKQorCWlmIChlcnJvcnMpIHsKKwkJcmV0ID0gZGF2aW5jaV9zcGlfY2hlY2tfZXJyb3IoZHNwaSwgZXJyb3JzKTsKKwkJV0FSTighcmV0LCAiJXM6IGVycm9yIHJlcG9ydGVkIGJ1dCBubyBlcnJvciBmb3VuZCFcbiIsCisJCQkJCQkJZGV2X25hbWUoJnNwaS0+ZGV2KSk7CiAJCXJldHVybiByZXQ7CisJfQogCi0JLyogU1BJIEZyYW1ld29yayBtYWludGFpbnMgdGhlIGNvdW50IG9ubHkgaW4gYnl0ZXMgc28gY29udmVydCBiYWNrICovCi0JZGF2aW5jaV9zcGktPmNvdW50ICo9IGNvbnY7CisJaWYgKGRzcGktPnJjb3VudCAhPSAwIHx8IGRzcGktPndjb3VudCAhPSAwKSB7CisJCWRldl9lcnIoc2RldiwgIlNQSSBkYXRhIHRyYW5zZmVyIGVycm9yXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQogCiAJcmV0dXJuIHQtPmxlbjsKIH0KIAogLyoqCi0gKiBkYXZpbmNpX3NwaV9pcnEgLSBJUlEgaGFuZGxlciBmb3IgRGFWaW5jaSBTUEkKKyAqIGRhdmluY2lfc3BpX2lycSAtIEludGVycnVwdCBoYW5kbGVyIGZvciBTUEkgTWFzdGVyIENvbnRyb2xsZXIKICAqIEBpcnE6IElSUSBudW1iZXIgZm9yIHRoaXMgU1BJIE1hc3RlcgogICogQGNvbnRleHRfZGF0YTogc3RydWN0dXJlIGZvciBTUEkgTWFzdGVyIGNvbnRyb2xsZXIgZGF2aW5jaV9zcGkKKyAqCisgKiBJU1Igd2lsbCBkZXRlcm1pbmUgdGhhdCBpbnRlcnJ1cHQgYXJyaXZlcyBlaXRoZXIgZm9yIFJFQUQgb3IgV1JJVEUgY29tbWFuZC4KKyAqIEFjY29yZGluZyB0byBjb21tYW5kIGl0IHdpbGwgZG8gdGhlIGFwcHJvcHJpYXRlIGFjdGlvbi4gSXQgd2lsbCBjaGVjaworICogdHJhbnNmZXIgbGVuZ3RoIGFuZCBpZiBpdCBpcyBub3QgemVybyB0aGVuIGRpc3BhdGNoIHRyYW5zZmVyIGNvbW1hbmQgYWdhaW4uCisgKiBJZiB0cmFuc2ZlciBsZW5ndGggaXMgemVybyB0aGVuIGl0IHdpbGwgaW5kaWNhdGUgdGhlIENPTVBMRVRJT04gc28gdGhhdAorICogZGF2aW5jaV9zcGlfYnVmcyBmdW5jdGlvbiBjYW4gZ28gYWhlYWQuCiAgKi8KLXN0YXRpYyBpcnFyZXR1cm5fdCBkYXZpbmNpX3NwaV9pcnEoczMyIGlycSwgdm9pZCAqY29udGV4dF9kYXRhKQorc3RhdGljIGlycXJldHVybl90IGRhdmluY2lfc3BpX2lycShzMzIgaXJxLCB2b2lkICpkYXRhKQogewotCXN0cnVjdCBkYXZpbmNpX3NwaSAqZGF2aW5jaV9zcGkgPSBjb250ZXh0X2RhdGE7Ci0JdTMyIGludF9zdGF0dXMsIHJ4X2RhdGEgPSAwOwotCWlycXJldHVybl90IHJldCA9IElSUV9OT05FOworCXN0cnVjdCBkYXZpbmNpX3NwaSAqZHNwaSA9IGRhdGE7CisJaW50IHN0YXR1czsKIAotCWludF9zdGF0dXMgPSBpb3JlYWQzMihkYXZpbmNpX3NwaS0+YmFzZSArIFNQSUZMRyk7CisJc3RhdHVzID0gZGF2aW5jaV9zcGlfcHJvY2Vzc19ldmVudHMoZHNwaSk7CisJaWYgKHVubGlrZWx5KHN0YXR1cyAhPSAwKSkKKwkJY2xlYXJfaW9fYml0cyhkc3BpLT5iYXNlICsgU1BJSU5ULCBTUElJTlRfTUFTS0lOVCk7CiAKLQl3aGlsZSAoKGludF9zdGF0dXMgJiBTUElGTEdfUlhfSU5UUl9NQVNLKSkgewotCQlpZiAobGlrZWx5KGludF9zdGF0dXMgJiBTUElGTEdfUlhfSU5UUl9NQVNLKSkgewotCQkJcmV0ID0gSVJRX0hBTkRMRUQ7CisJaWYgKCghZHNwaS0+cmNvdW50ICYmICFkc3BpLT53Y291bnQpIHx8IHN0YXR1cykKKwkJY29tcGxldGUoJmRzcGktPmRvbmUpOwogCi0JCQlyeF9kYXRhID0gaW9yZWFkMzIoZGF2aW5jaV9zcGktPmJhc2UgKyBTUElCVUYpOwotCQkJZGF2aW5jaV9zcGktPmdldF9yeChyeF9kYXRhLCBkYXZpbmNpX3NwaSk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQogCi0JCQkvKiBEaXNhYmxlIFJlY2VpdmUgSW50ZXJydXB0ICovCi0JCQlpb3dyaXRlMzIofihTUElJTlRfUlhfSU5UUiB8IFNQSUlOVF9UWF9JTlRSKSwKLQkJCQkJZGF2aW5jaV9zcGktPmJhc2UgKyBTUElJTlQpOwotCQl9IGVsc2UKLQkJCSh2b2lkKWRhdmluY2lfc3BpX2NoZWNrX2Vycm9yKGRhdmluY2lfc3BpLCBpbnRfc3RhdHVzKTsKK3N0YXRpYyBpbnQgZGF2aW5jaV9zcGlfcmVxdWVzdF9kbWEoc3RydWN0IGRhdmluY2lfc3BpICpkc3BpKQoreworCWludCByOworCXN0cnVjdCBkYXZpbmNpX3NwaV9kbWEgKmRtYSA9ICZkc3BpLT5kbWE7CiAKLQkJaW50X3N0YXR1cyA9IGlvcmVhZDMyKGRhdmluY2lfc3BpLT5iYXNlICsgU1BJRkxHKTsKKwlyID0gZWRtYV9hbGxvY19jaGFubmVsKGRtYS0+cnhfY2hhbm5lbCwgZGF2aW5jaV9zcGlfZG1hX2NhbGxiYWNrLCBkc3BpLAorCQkJCQkJCQlkbWEtPmV2ZW50cSk7CisJaWYgKHIgPCAwKSB7CisJCXByX2VycigiVW5hYmxlIHRvIHJlcXVlc3QgRE1BIGNoYW5uZWwgZm9yIFNQSSBSWFxuIik7CisJCXIgPSAtRUFHQUlOOworCQlnb3RvIHJ4X2RtYV9mYWlsZWQ7CiAJfQogCi0JcmV0dXJuIHJldDsKKwlyID0gZWRtYV9hbGxvY19jaGFubmVsKGRtYS0+dHhfY2hhbm5lbCwgZGF2aW5jaV9zcGlfZG1hX2NhbGxiYWNrLCBkc3BpLAorCQkJCQkJCQlkbWEtPmV2ZW50cSk7CisJaWYgKHIgPCAwKSB7CisJCXByX2VycigiVW5hYmxlIHRvIHJlcXVlc3QgRE1BIGNoYW5uZWwgZm9yIFNQSSBUWFxuIik7CisJCXIgPSAtRUFHQUlOOworCQlnb3RvIHR4X2RtYV9mYWlsZWQ7CisJfQorCisJciA9IGVkbWFfYWxsb2Nfc2xvdChFRE1BX0NUTFIoZG1hLT50eF9jaGFubmVsKSwgRURNQV9TTE9UX0FOWSk7CisJaWYgKHIgPCAwKSB7CisJCXByX2VycigiVW5hYmxlIHRvIHJlcXVlc3QgU1BJIFRYIERNQSBwYXJhbSBzbG90XG4iKTsKKwkJciA9IC1FQUdBSU47CisJCWdvdG8gcGFyYW1fZmFpbGVkOworCX0KKwlkbWEtPmR1bW15X3BhcmFtX3Nsb3QgPSByOworCWVkbWFfbGluayhkbWEtPmR1bW15X3BhcmFtX3Nsb3QsIGRtYS0+ZHVtbXlfcGFyYW1fc2xvdCk7CisKKwlyZXR1cm4gMDsKK3BhcmFtX2ZhaWxlZDoKKwllZG1hX2ZyZWVfY2hhbm5lbChkbWEtPnR4X2NoYW5uZWwpOwordHhfZG1hX2ZhaWxlZDoKKwllZG1hX2ZyZWVfY2hhbm5lbChkbWEtPnJ4X2NoYW5uZWwpOworcnhfZG1hX2ZhaWxlZDoKKwlyZXR1cm4gcjsKIH0KIAogLyoqCiAgKiBkYXZpbmNpX3NwaV9wcm9iZSAtIHByb2JlIGZ1bmN0aW9uIGZvciBTUEkgTWFzdGVyIENvbnRyb2xsZXIKICAqIEBwZGV2OiBwbGF0Zm9ybV9kZXZpY2Ugc3RydWN0dXJlIHdoaWNoIGNvbnRhaW5zIHBsYXRlZm9ybSBzcGVjaWZpYyBkYXRhCisgKgorICogQWNjb3JkaW5nIHRvIExpbnV4IERldmljZSBNb2RlbCB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgaW52b2tlZCBieSBMaW51eAorICogd2l0aCBwbGF0Zm9ybV9kZXZpY2Ugc3RydWN0IHdoaWNoIGNvbnRhaW5zIHRoZSBkZXZpY2Ugc3BlY2lmaWMgaW5mby4KKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBtYXAgdGhlIFNQSSBjb250cm9sbGVyJ3MgbWVtb3J5LCByZWdpc3RlciBJUlEsCisgKiBSZXNldCBTUEkgY29udHJvbGxlciBhbmQgc2V0dGluZyBpdHMgcmVnaXN0ZXJzIHRvIGRlZmF1bHQgdmFsdWUuCisgKiBJdCB3aWxsIGludm9rZSBzcGlfYml0YmFuZ19zdGFydCB0byBjcmVhdGUgd29yayBxdWV1ZSBzbyB0aGF0IGNsaWVudCBkcml2ZXIKKyAqIGNhbiByZWdpc3RlciB0cmFuc2ZlciBtZXRob2QgdG8gd29yayBxdWV1ZS4KICAqLwogc3RhdGljIGludCBkYXZpbmNpX3NwaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXI7Ci0Jc3RydWN0IGRhdmluY2lfc3BpICpkYXZpbmNpX3NwaTsKKwlzdHJ1Y3QgZGF2aW5jaV9zcGkgKmRzcGk7CiAJc3RydWN0IGRhdmluY2lfc3BpX3BsYXRmb3JtX2RhdGEgKnBkYXRhOwogCXN0cnVjdCByZXNvdXJjZSAqciwgKm1lbTsKIAlyZXNvdXJjZV9zaXplX3QgZG1hX3J4X2NoYW4gPSBTUElfTk9fUkVTT1VSQ0U7CiAJcmVzb3VyY2Vfc2l6ZV90CWRtYV90eF9jaGFuID0gU1BJX05PX1JFU09VUkNFOwogCXJlc291cmNlX3NpemVfdAlkbWFfZXZlbnRxID0gU1BJX05PX1JFU09VUkNFOwogCWludCBpID0gMCwgcmV0ID0gMDsKKwl1MzIgc3BpcGMwOwogCiAJcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlpZiAocGRhdGEgPT0gTlVMTCkgewpAQCAtMTAzNSw4ICs4MDgsOCBAQAogCiAJZGV2X3NldF9kcnZkYXRhKCZwZGV2LT5kZXYsIG1hc3Rlcik7CiAKLQlkYXZpbmNpX3NwaSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEobWFzdGVyKTsKLQlpZiAoZGF2aW5jaV9zcGkgPT0gTlVMTCkgeworCWRzcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7CisJaWYgKGRzcGkgPT0gTlVMTCkgewogCQlyZXQgPSAtRU5PRU5UOwogCQlnb3RvIGZyZWVfbWFzdGVyOwogCX0KQEAgLTEwNDcsMTY0ICs4MjAsMTQzIEBACiAJCWdvdG8gZnJlZV9tYXN0ZXI7CiAJfQogCi0JZGF2aW5jaV9zcGktPnBiYXNlID0gci0+c3RhcnQ7Ci0JZGF2aW5jaV9zcGktPnJlZ2lvbl9zaXplID0gcmVzb3VyY2Vfc2l6ZShyKTsKLQlkYXZpbmNpX3NwaS0+cGRhdGEgPSBwZGF0YTsKKwlkc3BpLT5wYmFzZSA9IHItPnN0YXJ0OworCWRzcGktPnBkYXRhID0gcGRhdGE7CiAKLQltZW0gPSByZXF1ZXN0X21lbV9yZWdpb24oci0+c3RhcnQsIGRhdmluY2lfc3BpLT5yZWdpb25fc2l6ZSwKLQkJCQkJcGRldi0+bmFtZSk7CisJbWVtID0gcmVxdWVzdF9tZW1fcmVnaW9uKHItPnN0YXJ0LCByZXNvdXJjZV9zaXplKHIpLCBwZGV2LT5uYW1lKTsKIAlpZiAobWVtID09IE5VTEwpIHsKIAkJcmV0ID0gLUVCVVNZOwogCQlnb3RvIGZyZWVfbWFzdGVyOwogCX0KIAotCWRhdmluY2lfc3BpLT5iYXNlID0gKHN0cnVjdCBkYXZpbmNpX3NwaV9yZWcgX19pb21lbSAqKQotCQkJaW9yZW1hcChyLT5zdGFydCwgZGF2aW5jaV9zcGktPnJlZ2lvbl9zaXplKTsKLQlpZiAoZGF2aW5jaV9zcGktPmJhc2UgPT0gTlVMTCkgeworCWRzcGktPmJhc2UgPSBpb3JlbWFwKHItPnN0YXJ0LCByZXNvdXJjZV9zaXplKHIpKTsKKwlpZiAoZHNwaS0+YmFzZSA9PSBOVUxMKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gcmVsZWFzZV9yZWdpb247CiAJfQogCi0JZGF2aW5jaV9zcGktPmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7Ci0JaWYgKGRhdmluY2lfc3BpLT5pcnEgPD0gMCkgeworCWRzcGktPmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKGRzcGktPmlycSA8PSAwKSB7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gdW5tYXBfaW87CiAJfQogCi0JcmV0ID0gcmVxdWVzdF9pcnEoZGF2aW5jaV9zcGktPmlycSwgZGF2aW5jaV9zcGlfaXJxLCBJUlFGX0RJU0FCTEVELAotCQkJICBkZXZfbmFtZSgmcGRldi0+ZGV2KSwgZGF2aW5jaV9zcGkpOworCXJldCA9IHJlcXVlc3RfaXJxKGRzcGktPmlycSwgZGF2aW5jaV9zcGlfaXJxLCAwLCBkZXZfbmFtZSgmcGRldi0+ZGV2KSwKKwkJCQkJCQkJCWRzcGkpOwogCWlmIChyZXQpCiAJCWdvdG8gdW5tYXBfaW87CiAKLQkvKiBBbGxvY2F0ZSB0bXBfYnVmIGZvciB0eF9idWYgKi8KLQlkYXZpbmNpX3NwaS0+dG1wX2J1ZiA9IGt6YWxsb2MoU1BJX0JVRlNJWiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGRhdmluY2lfc3BpLT50bXBfYnVmID09IE5VTEwpIHsKLQkJcmV0ID0gLUVOT01FTTsKKwlkc3BpLT5iaXRiYW5nLm1hc3RlciA9IHNwaV9tYXN0ZXJfZ2V0KG1hc3Rlcik7CisJaWYgKGRzcGktPmJpdGJhbmcubWFzdGVyID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT0RFVjsKIAkJZ290byBpcnFfZnJlZTsKIAl9CiAKLQlkYXZpbmNpX3NwaS0+Yml0YmFuZy5tYXN0ZXIgPSBzcGlfbWFzdGVyX2dldChtYXN0ZXIpOwotCWlmIChkYXZpbmNpX3NwaS0+Yml0YmFuZy5tYXN0ZXIgPT0gTlVMTCkgewotCQlyZXQgPSAtRU5PREVWOwotCQlnb3RvIGZyZWVfdG1wX2J1ZjsKLQl9Ci0KLQlkYXZpbmNpX3NwaS0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCBOVUxMKTsKLQlpZiAoSVNfRVJSKGRhdmluY2lfc3BpLT5jbGspKSB7CisJZHNwaS0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCBOVUxMKTsKKwlpZiAoSVNfRVJSKGRzcGktPmNsaykpIHsKIAkJcmV0ID0gLUVOT0RFVjsKIAkJZ290byBwdXRfbWFzdGVyOwogCX0KLQljbGtfZW5hYmxlKGRhdmluY2lfc3BpLT5jbGspOwotCisJY2xrX2VuYWJsZShkc3BpLT5jbGspOwogCiAJbWFzdGVyLT5idXNfbnVtID0gcGRldi0+aWQ7CiAJbWFzdGVyLT5udW1fY2hpcHNlbGVjdCA9IHBkYXRhLT5udW1fY2hpcHNlbGVjdDsKIAltYXN0ZXItPnNldHVwID0gZGF2aW5jaV9zcGlfc2V0dXA7Ci0JbWFzdGVyLT5jbGVhbnVwID0gZGF2aW5jaV9zcGlfY2xlYW51cDsKIAotCWRhdmluY2lfc3BpLT5iaXRiYW5nLmNoaXBzZWxlY3QgPSBkYXZpbmNpX3NwaV9jaGlwc2VsZWN0OwotCWRhdmluY2lfc3BpLT5iaXRiYW5nLnNldHVwX3RyYW5zZmVyID0gZGF2aW5jaV9zcGlfc2V0dXBfdHJhbnNmZXI7CisJZHNwaS0+Yml0YmFuZy5jaGlwc2VsZWN0ID0gZGF2aW5jaV9zcGlfY2hpcHNlbGVjdDsKKwlkc3BpLT5iaXRiYW5nLnNldHVwX3RyYW5zZmVyID0gZGF2aW5jaV9zcGlfc2V0dXBfdHJhbnNmZXI7CiAKLQlkYXZpbmNpX3NwaS0+dmVyc2lvbiA9IHBkYXRhLT52ZXJzaW9uOwotCXVzZV9kbWEgPSBwZGF0YS0+dXNlX2RtYTsKKwlkc3BpLT52ZXJzaW9uID0gcGRhdGEtPnZlcnNpb247CiAKLQlkYXZpbmNpX3NwaS0+Yml0YmFuZy5mbGFncyA9IFNQSV9OT19DUyB8IFNQSV9MU0JfRklSU1QgfCBTUElfTE9PUDsKLQlpZiAoZGF2aW5jaV9zcGktPnZlcnNpb24gPT0gU1BJX1ZFUlNJT05fMikKLQkJZGF2aW5jaV9zcGktPmJpdGJhbmcuZmxhZ3MgfD0gU1BJX1JFQURZOworCWRzcGktPmJpdGJhbmcuZmxhZ3MgPSBTUElfTk9fQ1MgfCBTUElfTFNCX0ZJUlNUIHwgU1BJX0xPT1A7CisJaWYgKGRzcGktPnZlcnNpb24gPT0gU1BJX1ZFUlNJT05fMikKKwkJZHNwaS0+Yml0YmFuZy5mbGFncyB8PSBTUElfUkVBRFk7CiAKLQlpZiAodXNlX2RtYSkgewotCQkJciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0RNQSwgMCk7Ci0JCQlpZiAocikKLQkJCQlkbWFfcnhfY2hhbiA9IHItPnN0YXJ0OwotCQkJciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0RNQSwgMSk7Ci0JCQlpZiAocikKLQkJCQlkbWFfdHhfY2hhbiA9IHItPnN0YXJ0OwotCQkJciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0RNQSwgMik7Ci0JCQlpZiAocikKLQkJCQlkbWFfZXZlbnRxID0gci0+c3RhcnQ7Ci0JfQorCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9ETUEsIDApOworCWlmIChyKQorCQlkbWFfcnhfY2hhbiA9IHItPnN0YXJ0OworCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9ETUEsIDEpOworCWlmIChyKQorCQlkbWFfdHhfY2hhbiA9IHItPnN0YXJ0OworCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9ETUEsIDIpOworCWlmIChyKQorCQlkbWFfZXZlbnRxID0gci0+c3RhcnQ7CiAKLQlpZiAoIXVzZV9kbWEgfHwKLQkgICAgZG1hX3J4X2NoYW4gPT0gU1BJX05PX1JFU09VUkNFIHx8Ci0JICAgIGRtYV90eF9jaGFuID09IFNQSV9OT19SRVNPVVJDRSB8fAotCSAgICBkbWFfZXZlbnRxCT09IFNQSV9OT19SRVNPVVJDRSkgewotCQlkYXZpbmNpX3NwaS0+Yml0YmFuZy50eHJ4X2J1ZnMgPSBkYXZpbmNpX3NwaV9idWZzX3BpbzsKLQkJdXNlX2RtYSA9IDA7Ci0JfSBlbHNlIHsKLQkJZGF2aW5jaV9zcGktPmJpdGJhbmcudHhyeF9idWZzID0gZGF2aW5jaV9zcGlfYnVmc19kbWE7Ci0JCWRhdmluY2lfc3BpLT5kbWFfY2hhbm5lbHMgPSBremFsbG9jKG1hc3Rlci0+bnVtX2NoaXBzZWxlY3QKLQkJCQkqIHNpemVvZihzdHJ1Y3QgZGF2aW5jaV9zcGlfZG1hKSwgR0ZQX0tFUk5FTCk7Ci0JCWlmIChkYXZpbmNpX3NwaS0+ZG1hX2NoYW5uZWxzID09IE5VTEwpIHsKLQkJCXJldCA9IC1FTk9NRU07CisJZHNwaS0+Yml0YmFuZy50eHJ4X2J1ZnMgPSBkYXZpbmNpX3NwaV9idWZzOworCWlmIChkbWFfcnhfY2hhbiAhPSBTUElfTk9fUkVTT1VSQ0UgJiYKKwkgICAgZG1hX3R4X2NoYW4gIT0gU1BJX05PX1JFU09VUkNFICYmCisJICAgIGRtYV9ldmVudHEgIT0gU1BJX05PX1JFU09VUkNFKSB7CisJCWRzcGktPmRtYS5yeF9jaGFubmVsID0gZG1hX3J4X2NoYW47CisJCWRzcGktPmRtYS50eF9jaGFubmVsID0gZG1hX3R4X2NoYW47CisJCWRzcGktPmRtYS5ldmVudHEgPSBkbWFfZXZlbnRxOworCisJCXJldCA9IGRhdmluY2lfc3BpX3JlcXVlc3RfZG1hKGRzcGkpOworCQlpZiAocmV0KQogCQkJZ290byBmcmVlX2NsazsKLQkJfQogCi0JCWZvciAoaSA9IDA7IGkgPCBtYXN0ZXItPm51bV9jaGlwc2VsZWN0OyBpKyspIHsKLQkJCWRhdmluY2lfc3BpLT5kbWFfY2hhbm5lbHNbaV0uZG1hX3J4X2NoYW5uZWwgPSAtMTsKLQkJCWRhdmluY2lfc3BpLT5kbWFfY2hhbm5lbHNbaV0uZG1hX3J4X3N5bmNfZGV2ID0KLQkJCQlkbWFfcnhfY2hhbjsKLQkJCWRhdmluY2lfc3BpLT5kbWFfY2hhbm5lbHNbaV0uZG1hX3R4X2NoYW5uZWwgPSAtMTsKLQkJCWRhdmluY2lfc3BpLT5kbWFfY2hhbm5lbHNbaV0uZG1hX3R4X3N5bmNfZGV2ID0KLQkJCQlkbWFfdHhfY2hhbjsKLQkJCWRhdmluY2lfc3BpLT5kbWFfY2hhbm5lbHNbaV0uZXZlbnRxID0gZG1hX2V2ZW50cTsKLQkJfQotCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiRGFWaW5jaSBTUEkgZHJpdmVyIGluIEVETUEgbW9kZVxuIgotCQkJCSJVc2luZyBSWCBjaGFubmVsID0gJWQgLCBUWCBjaGFubmVsID0gJWQgYW5kICIKLQkJCQkiZXZlbnQgcXVldWUgPSAlZCIsIGRtYV9yeF9jaGFuLCBkbWFfdHhfY2hhbiwKKwkJZGV2X2luZm8oJnBkZXYtPmRldiwgIkRNQTogc3VwcG9ydGVkXG4iKTsKKwkJZGV2X2luZm8oJnBkZXYtPmRldiwgIkRNQTogUlggY2hhbm5lbDogJWQsIFRYIGNoYW5uZWw6ICVkLCAiCisJCQkJImV2ZW50IHF1ZXVlOiAlZFxuIiwgZG1hX3J4X2NoYW4sIGRtYV90eF9jaGFuLAogCQkJCWRtYV9ldmVudHEpOwogCX0KIAotCWRhdmluY2lfc3BpLT5nZXRfcnggPSBkYXZpbmNpX3NwaV9yeF9idWZfdTg7Ci0JZGF2aW5jaV9zcGktPmdldF90eCA9IGRhdmluY2lfc3BpX3R4X2J1Zl91ODsKKwlkc3BpLT5nZXRfcnggPSBkYXZpbmNpX3NwaV9yeF9idWZfdTg7CisJZHNwaS0+Z2V0X3R4ID0gZGF2aW5jaV9zcGlfdHhfYnVmX3U4OwogCi0JaW5pdF9jb21wbGV0aW9uKCZkYXZpbmNpX3NwaS0+ZG9uZSk7CisJaW5pdF9jb21wbGV0aW9uKCZkc3BpLT5kb25lKTsKIAogCS8qIFJlc2V0IEluL09VVCBTUEkgbW9kdWxlICovCi0JaW93cml0ZTMyKDAsIGRhdmluY2lfc3BpLT5iYXNlICsgU1BJR0NSMCk7CisJaW93cml0ZTMyKDAsIGRzcGktPmJhc2UgKyBTUElHQ1IwKTsKIAl1ZGVsYXkoMTAwKTsKLQlpb3dyaXRlMzIoMSwgZGF2aW5jaV9zcGktPmJhc2UgKyBTUElHQ1IwKTsKKwlpb3dyaXRlMzIoMSwgZHNwaS0+YmFzZSArIFNQSUdDUjApOwogCi0JLyogQ2xvY2sgaW50ZXJuYWwgKi8KLQlpZiAoZGF2aW5jaV9zcGktPnBkYXRhLT5jbGtfaW50ZXJuYWwpCi0JCXNldF9pb19iaXRzKGRhdmluY2lfc3BpLT5iYXNlICsgU1BJR0NSMSwKLQkJCQlTUElHQ1IxX0NMS01PRF9NQVNLKTsKKwkvKiBTZXQgdXAgU1BJUEMwLiAgQ1MgYW5kIEVOQSBpbml0IGlzIGRvbmUgaW4gZGF2aW5jaV9zcGlfc2V0dXAgKi8KKwlzcGlwYzAgPSBTUElQQzBfRElGVU5fTUFTSyB8IFNQSVBDMF9ET0ZVTl9NQVNLIHwgU1BJUEMwX0NMS0ZVTl9NQVNLOworCWlvd3JpdGUzMihzcGlwYzAsIGRzcGktPmJhc2UgKyBTUElQQzApOworCisJLyogaW5pdGlhbGl6ZSBjaGlwIHNlbGVjdHMgKi8KKwlpZiAocGRhdGEtPmNoaXBfc2VsKSB7CisJCWZvciAoaSA9IDA7IGkgPCBwZGF0YS0+bnVtX2NoaXBzZWxlY3Q7IGkrKykgeworCQkJaWYgKHBkYXRhLT5jaGlwX3NlbFtpXSAhPSBTUElfSU5URVJOX0NTKQorCQkJCWdwaW9fZGlyZWN0aW9uX291dHB1dChwZGF0YS0+Y2hpcF9zZWxbaV0sIDEpOworCQl9CisJfQorCisJaWYgKHBkYXRhLT5pbnRyX2xpbmUpCisJCWlvd3JpdGUzMihTUElfSU5UTFZMXzEsIGRzcGktPmJhc2UgKyBTUElMVkwpOwogCWVsc2UKLQkJY2xlYXJfaW9fYml0cyhkYXZpbmNpX3NwaS0+YmFzZSArIFNQSUdDUjEsCi0JCQkJU1BJR0NSMV9DTEtNT0RfTUFTSyk7CisJCWlvd3JpdGUzMihTUElfSU5UTFZMXzAsIGRzcGktPmJhc2UgKyBTUElMVkwpOworCisJaW93cml0ZTMyKENTX0RFRkFVTFQsIGRzcGktPmJhc2UgKyBTUElERUYpOwogCiAJLyogbWFzdGVyIG1vZGUgZGVmYXVsdCAqLwotCXNldF9pb19iaXRzKGRhdmluY2lfc3BpLT5iYXNlICsgU1BJR0NSMSwgU1BJR0NSMV9NQVNURVJfTUFTSyk7CisJc2V0X2lvX2JpdHMoZHNwaS0+YmFzZSArIFNQSUdDUjEsIFNQSUdDUjFfQ0xLTU9EX01BU0spOworCXNldF9pb19iaXRzKGRzcGktPmJhc2UgKyBTUElHQ1IxLCBTUElHQ1IxX01BU1RFUl9NQVNLKTsKKwlzZXRfaW9fYml0cyhkc3BpLT5iYXNlICsgU1BJR0NSMSwgU1BJR0NSMV9QT1dFUkRPV05fTUFTSyk7CiAKLQlpZiAoZGF2aW5jaV9zcGktPnBkYXRhLT5pbnRyX2xldmVsKQotCQlpb3dyaXRlMzIoU1BJX0lOVExWTF8xLCBkYXZpbmNpX3NwaS0+YmFzZSArIFNQSUxWTCk7Ci0JZWxzZQotCQlpb3dyaXRlMzIoU1BJX0lOVExWTF8wLCBkYXZpbmNpX3NwaS0+YmFzZSArIFNQSUxWTCk7Ci0KLQlyZXQgPSBzcGlfYml0YmFuZ19zdGFydCgmZGF2aW5jaV9zcGktPmJpdGJhbmcpOworCXJldCA9IHNwaV9iaXRiYW5nX3N0YXJ0KCZkc3BpLT5iaXRiYW5nKTsKIAlpZiAocmV0KQotCQlnb3RvIGZyZWVfY2xrOworCQlnb3RvIGZyZWVfZG1hOwogCi0JZGV2X2luZm8oJnBkZXYtPmRldiwgIkNvbnRyb2xsZXIgYXQgMHglcCBcbiIsIGRhdmluY2lfc3BpLT5iYXNlKTsKLQotCWlmICghcGRhdGEtPnBvbGxfbW9kZSkKLQkJZGV2X2luZm8oJnBkZXYtPmRldiwgIk9wZXJhdGluZyBpbiBpbnRlcnJ1cHQgbW9kZSIKLQkJCSIgdXNpbmcgSVJRICVkXG4iLCBkYXZpbmNpX3NwaS0+aXJxKTsKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiQ29udHJvbGxlciBhdCAweCVwXG4iLCBkc3BpLT5iYXNlKTsKIAogCXJldHVybiByZXQ7CiAKK2ZyZWVfZG1hOgorCWVkbWFfZnJlZV9jaGFubmVsKGRzcGktPmRtYS50eF9jaGFubmVsKTsKKwllZG1hX2ZyZWVfY2hhbm5lbChkc3BpLT5kbWEucnhfY2hhbm5lbCk7CisJZWRtYV9mcmVlX3Nsb3QoZHNwaS0+ZG1hLmR1bW15X3BhcmFtX3Nsb3QpOwogZnJlZV9jbGs6Ci0JY2xrX2Rpc2FibGUoZGF2aW5jaV9zcGktPmNsayk7Ci0JY2xrX3B1dChkYXZpbmNpX3NwaS0+Y2xrKTsKKwljbGtfZGlzYWJsZShkc3BpLT5jbGspOworCWNsa19wdXQoZHNwaS0+Y2xrKTsKIHB1dF9tYXN0ZXI6CiAJc3BpX21hc3Rlcl9wdXQobWFzdGVyKTsKLWZyZWVfdG1wX2J1ZjoKLQlrZnJlZShkYXZpbmNpX3NwaS0+dG1wX2J1Zik7CiBpcnFfZnJlZToKLQlmcmVlX2lycShkYXZpbmNpX3NwaS0+aXJxLCBkYXZpbmNpX3NwaSk7CisJZnJlZV9pcnEoZHNwaS0+aXJxLCBkc3BpKTsKIHVubWFwX2lvOgotCWlvdW5tYXAoZGF2aW5jaV9zcGktPmJhc2UpOworCWlvdW5tYXAoZHNwaS0+YmFzZSk7CiByZWxlYXNlX3JlZ2lvbjoKLQlyZWxlYXNlX21lbV9yZWdpb24oZGF2aW5jaV9zcGktPnBiYXNlLCBkYXZpbmNpX3NwaS0+cmVnaW9uX3NpemUpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihkc3BpLT5wYmFzZSwgcmVzb3VyY2Vfc2l6ZShyKSk7CiBmcmVlX21hc3RlcjoKIAlrZnJlZShtYXN0ZXIpOwogZXJyOgpAQCAtMTIyMiwyNyArOTc0LDMxIEBACiAgKi8KIHN0YXRpYyBpbnQgX19leGl0IGRhdmluY2lfc3BpX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBkYXZpbmNpX3NwaSAqZGF2aW5jaV9zcGk7CisJc3RydWN0IGRhdmluY2lfc3BpICpkc3BpOwogCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXI7CisJc3RydWN0IHJlc291cmNlICpyOwogCiAJbWFzdGVyID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOwotCWRhdmluY2lfc3BpID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShtYXN0ZXIpOworCWRzcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7CiAKLQlzcGlfYml0YmFuZ19zdG9wKCZkYXZpbmNpX3NwaS0+Yml0YmFuZyk7CisJc3BpX2JpdGJhbmdfc3RvcCgmZHNwaS0+Yml0YmFuZyk7CiAKLQljbGtfZGlzYWJsZShkYXZpbmNpX3NwaS0+Y2xrKTsKLQljbGtfcHV0KGRhdmluY2lfc3BpLT5jbGspOworCWNsa19kaXNhYmxlKGRzcGktPmNsayk7CisJY2xrX3B1dChkc3BpLT5jbGspOwogCXNwaV9tYXN0ZXJfcHV0KG1hc3Rlcik7Ci0Ja2ZyZWUoZGF2aW5jaV9zcGktPnRtcF9idWYpOwotCWZyZWVfaXJxKGRhdmluY2lfc3BpLT5pcnEsIGRhdmluY2lfc3BpKTsKLQlpb3VubWFwKGRhdmluY2lfc3BpLT5iYXNlKTsKLQlyZWxlYXNlX21lbV9yZWdpb24oZGF2aW5jaV9zcGktPnBiYXNlLCBkYXZpbmNpX3NwaS0+cmVnaW9uX3NpemUpOworCWZyZWVfaXJxKGRzcGktPmlycSwgZHNwaSk7CisJaW91bm1hcChkc3BpLT5iYXNlKTsKKwlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlyZWxlYXNlX21lbV9yZWdpb24oZHNwaS0+cGJhc2UsIHJlc291cmNlX3NpemUocikpOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGRhdmluY2lfc3BpX2RyaXZlciA9IHsKLQkuZHJpdmVyLm5hbWUgPSAic3BpX2RhdmluY2kiLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gInNwaV9kYXZpbmNpIiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKIAkucmVtb3ZlID0gX19leGl0X3AoZGF2aW5jaV9zcGlfcmVtb3ZlKSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL2R3X3NwaS5jIGIvZHJpdmVycy9zcGkvZHdfc3BpLmMKaW5kZXggMDgzOGM3OS4uMjJhZjc3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvZHdfc3BpLmMKKysrIGIvZHJpdmVycy9zcGkvZHdfc3BpLmMKQEAgLTE2NCwyMCArMTY0LDIzIEBACiAKIHN0YXRpYyB2b2lkIHdhaXRfdGlsbF9ub3RfYnVzeShzdHJ1Y3QgZHdfc3BpICpkd3MpCiB7Ci0JdW5zaWduZWQgbG9uZyBlbmQgPSBqaWZmaWVzICsgMSArIHVzZWNzX3RvX2ppZmZpZXMoMTAwMCk7CisJdW5zaWduZWQgbG9uZyBlbmQgPSBqaWZmaWVzICsgMSArIHVzZWNzX3RvX2ppZmZpZXMoNTAwMCk7CiAKIAl3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgZW5kKSkgewogCQlpZiAoIShkd19yZWFkdyhkd3MsIHNyKSAmIFNSX0JVU1kpKQogCQkJcmV0dXJuOworCQljcHVfcmVsYXgoKTsKIAl9CiAJZGV2X2VycigmZHdzLT5tYXN0ZXItPmRldiwKLQkJIkRXIFNQSTogU3RhdHVzIGtlZXBzIGJ1c3kgZm9yIDEwMDB1cyBhZnRlciBhIHJlYWQvd3JpdGUhXG4iKTsKKwkJIkRXIFNQSTogU3RhdHVzIGtlZXBzIGJ1c3kgZm9yIDUwMDB1cyBhZnRlciBhIHJlYWQvd3JpdGUhXG4iKTsKIH0KIAogc3RhdGljIHZvaWQgZmx1c2goc3RydWN0IGR3X3NwaSAqZHdzKQogewotCXdoaWxlIChkd19yZWFkdyhkd3MsIHNyKSAmIFNSX1JGX05PVF9FTVBUKQorCXdoaWxlIChkd19yZWFkdyhkd3MsIHNyKSAmIFNSX1JGX05PVF9FTVBUKSB7CiAJCWR3X3JlYWR3KGR3cywgZHIpOworCQljcHVfcmVsYXgoKTsKKwl9CiAKIAl3YWl0X3RpbGxfbm90X2J1c3koZHdzKTsKIH0KQEAgLTI4NSw4ICsyODgsMTAgQEAKICAqLwogc3RhdGljIGludCBtYXBfZG1hX2J1ZmZlcnMoc3RydWN0IGR3X3NwaSAqZHdzKQogewotCWlmICghZHdzLT5jdXJfbXNnLT5pc19kbWFfbWFwcGVkIHx8ICFkd3MtPmRtYV9pbml0ZWQKLQkJfHwgIWR3cy0+Y3VyX2NoaXAtPmVuYWJsZV9kbWEpCisJaWYgKCFkd3MtPmN1cl9tc2ctPmlzX2RtYV9tYXBwZWQKKwkJfHwgIWR3cy0+ZG1hX2luaXRlZAorCQl8fCAhZHdzLT5jdXJfY2hpcC0+ZW5hYmxlX2RtYQorCQl8fCAhZHdzLT5kbWFfb3BzKQogCQlyZXR1cm4gMDsKIAogCWlmIChkd3MtPmN1cl90cmFuc2Zlci0+dHhfZG1hKQpAQCAtMzM4LDcgKzM0Myw3IEBACiAJdGFza2xldF9zY2hlZHVsZSgmZHdzLT5wdW1wX3RyYW5zZmVycyk7CiB9CiAKLXN0YXRpYyB2b2lkIHRyYW5zZmVyX2NvbXBsZXRlKHN0cnVjdCBkd19zcGkgKmR3cykKK3ZvaWQgZHdfc3BpX3hmZXJfZG9uZShzdHJ1Y3QgZHdfc3BpICpkd3MpCiB7CiAJLyogVXBkYXRlIHRvdGFsIGJ5dGUgdHJhbnNmZXJlZCByZXR1cm4gY291bnQgYWN0dWFsIGJ5dGVzIHJlYWQgKi8KIAlkd3MtPmN1cl9tc2ctPmFjdHVhbF9sZW5ndGggKz0gZHdzLT5sZW47CkBAIC0zNTMsNiArMzU4LDcgQEAKIAl9IGVsc2UKIAkJdGFza2xldF9zY2hlZHVsZSgmZHdzLT5wdW1wX3RyYW5zZmVycyk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChkd19zcGlfeGZlcl9kb25lKTsKIAogc3RhdGljIGlycXJldHVybl90IGludGVycnVwdF90cmFuc2ZlcihzdHJ1Y3QgZHdfc3BpICpkd3MpCiB7CkBAIC0zODQsNyArMzkwLDcgQEAKIAkJaWYgKGR3cy0+dHhfZW5kID4gZHdzLT50eCkKIAkJCXNwaV91bWFza19pbnRyKGR3cywgU1BJX0lOVF9UWEVJKTsKIAkJZWxzZQotCQkJdHJhbnNmZXJfY29tcGxldGUoZHdzKTsKKwkJCWR3X3NwaV94ZmVyX2RvbmUoZHdzKTsKIAl9CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CkBAIC00MTksMTEgKzQyNSw3IEBACiAJICovCiAJZHdzLT5yZWFkKGR3cyk7CiAKLQl0cmFuc2Zlcl9jb21wbGV0ZShkd3MpOwotfQotCi1zdGF0aWMgdm9pZCBkbWFfdHJhbnNmZXIoc3RydWN0IGR3X3NwaSAqZHdzLCBpbnQgY3NfY2hhbmdlKQoteworCWR3X3NwaV94ZmVyX2RvbmUoZHdzKTsKIH0KIAogc3RhdGljIHZvaWQgcHVtcF90cmFuc2ZlcnModW5zaWduZWQgbG9uZyBkYXRhKQpAQCAtNTkyLDcgKzU5NCw3IEBACiAJCXNwaV9zZXRfY2xrKGR3cywgY2xrX2RpdiA/IGNsa19kaXYgOiBjaGlwLT5jbGtfZGl2KTsKIAkJc3BpX2NoaXBfc2VsKGR3cywgc3BpLT5jaGlwX3NlbGVjdCk7CiAKLQkJLyogU2V0IHRoZSBpbnRlcnJ1cHQgbWFzaywgZm9yIHBvbGwgbW9kZSBqdXN0IGRpYWJsZSBhbGwgaW50ICovCisJCS8qIFNldCB0aGUgaW50ZXJydXB0IG1hc2ssIGZvciBwb2xsIG1vZGUganVzdCBkaXNhYmxlIGFsbCBpbnQgKi8KIAkJc3BpX21hc2tfaW50cihkd3MsIDB4ZmYpOwogCQlpZiAoaW1hc2spCiAJCQlzcGlfdW1hc2tfaW50cihkd3MsIGltYXNrKTsKQEAgLTYwNSw3ICs2MDcsNyBAQAogCX0KIAogCWlmIChkd3MtPmRtYV9tYXBwZWQpCi0JCWRtYV90cmFuc2Zlcihkd3MsIGNzX2NoYW5nZSk7CisJCWR3cy0+ZG1hX29wcy0+ZG1hX3RyYW5zZmVyKGR3cywgY3NfY2hhbmdlKTsKIAogCWlmIChjaGlwLT5wb2xsX21vZGUpCiAJCXBvbGxfdHJhbnNmZXIoZHdzKTsKQEAgLTkwMSwxMSArOTAzLDE3IEBACiAJbWFzdGVyLT5zZXR1cCA9IGR3X3NwaV9zZXR1cDsKIAltYXN0ZXItPnRyYW5zZmVyID0gZHdfc3BpX3RyYW5zZmVyOwogCi0JZHdzLT5kbWFfaW5pdGVkID0gMDsKLQogCS8qIEJhc2ljIEhXIGluaXQgKi8KIAlzcGlfaHdfaW5pdChkd3MpOwogCisJaWYgKGR3cy0+ZG1hX29wcyAmJiBkd3MtPmRtYV9vcHMtPmRtYV9pbml0KSB7CisJCXJldCA9IGR3cy0+ZG1hX29wcy0+ZG1hX2luaXQoZHdzKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X3dhcm4oJm1hc3Rlci0+ZGV2LCAiRE1BIGluaXQgZmFpbGVkXG4iKTsKKwkJCWR3cy0+ZG1hX2luaXRlZCA9IDA7CisJCX0KKwl9CisKIAkvKiBJbml0aWFsIGFuZCBzdGFydCBxdWV1ZSAqLwogCXJldCA9IGluaXRfcXVldWUoZHdzKTsKIAlpZiAocmV0KSB7CkBAIC05MzAsNiArOTM4LDggQEAKIAogZXJyX3F1ZXVlX2FsbG9jOgogCWRlc3Ryb3lfcXVldWUoZHdzKTsKKwlpZiAoZHdzLT5kbWFfb3BzICYmIGR3cy0+ZG1hX29wcy0+ZG1hX2V4aXQpCisJCWR3cy0+ZG1hX29wcy0+ZG1hX2V4aXQoZHdzKTsKIGVycl9kaWFibGVfaHc6CiAJc3BpX2VuYWJsZV9jaGlwKGR3cywgMCk7CiAJZnJlZV9pcnEoZHdzLT5pcnEsIGR3cyk7CkBAIC05MzgsNyArOTQ4LDcgQEAKIGV4aXQ6CiAJcmV0dXJuIHJldDsKIH0KLUVYUE9SVF9TWU1CT0woZHdfc3BpX2FkZF9ob3N0KTsKK0VYUE9SVF9TWU1CT0xfR1BMKGR3X3NwaV9hZGRfaG9zdCk7CiAKIHZvaWQgX19kZXZleGl0IGR3X3NwaV9yZW1vdmVfaG9zdChzdHJ1Y3QgZHdfc3BpICpkd3MpCiB7CkBAIC05NTQsNiArOTY0LDggQEAKIAkJZGV2X2VycigmZHdzLT5tYXN0ZXItPmRldiwgImR3X3NwaV9yZW1vdmU6IHdvcmtxdWV1ZSB3aWxsIG5vdCAiCiAJCQkiY29tcGxldGUsIG1lc3NhZ2UgbWVtb3J5IG5vdCBmcmVlZFxuIik7CiAKKwlpZiAoZHdzLT5kbWFfb3BzICYmIGR3cy0+ZG1hX29wcy0+ZG1hX2V4aXQpCisJCWR3cy0+ZG1hX29wcy0+ZG1hX2V4aXQoZHdzKTsKIAlzcGlfZW5hYmxlX2NoaXAoZHdzLCAwKTsKIAkvKiBEaXNhYmxlIGNsayAqLwogCXNwaV9zZXRfY2xrKGR3cywgMCk7CkBAIC05NjIsNyArOTc0LDcgQEAKIAkvKiBEaXNjb25uZWN0IGZyb20gdGhlIFNQSSBmcmFtZXdvcmsgKi8KIAlzcGlfdW5yZWdpc3Rlcl9tYXN0ZXIoZHdzLT5tYXN0ZXIpOwogfQotRVhQT1JUX1NZTUJPTChkd19zcGlfcmVtb3ZlX2hvc3QpOworRVhQT1JUX1NZTUJPTF9HUEwoZHdfc3BpX3JlbW92ZV9ob3N0KTsKIAogaW50IGR3X3NwaV9zdXNwZW5kX2hvc3Qoc3RydWN0IGR3X3NwaSAqZHdzKQogewpAQCAtOTc1LDcgKzk4Nyw3IEBACiAJc3BpX3NldF9jbGsoZHdzLCAwKTsKIAlyZXR1cm4gcmV0OwogfQotRVhQT1JUX1NZTUJPTChkd19zcGlfc3VzcGVuZF9ob3N0KTsKK0VYUE9SVF9TWU1CT0xfR1BMKGR3X3NwaV9zdXNwZW5kX2hvc3QpOwogCiBpbnQgZHdfc3BpX3Jlc3VtZV9ob3N0KHN0cnVjdCBkd19zcGkgKmR3cykKIHsKQEAgLTk4Nyw3ICs5OTksNyBAQAogCQlkZXZfZXJyKCZkd3MtPm1hc3Rlci0+ZGV2LCAiZmFpbCB0byBzdGFydCBxdWV1ZSAoJWQpXG4iLCByZXQpOwogCXJldHVybiByZXQ7CiB9Ci1FWFBPUlRfU1lNQk9MKGR3X3NwaV9yZXN1bWVfaG9zdCk7CitFWFBPUlRfU1lNQk9MX0dQTChkd19zcGlfcmVzdW1lX2hvc3QpOwogCiBNT0RVTEVfQVVUSE9SKCJGZW5nIFRhbmcgPGZlbmcudGFuZ0BpbnRlbC5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgRGVzaWduV2FyZSBTUEkgY29udHJvbGxlciBjb3JlIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9kd19zcGlfbWlkLmMgYi9kcml2ZXJzL3NwaS9kd19zcGlfbWlkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzkxYzk2NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3BpL2R3X3NwaV9taWQuYwpAQCAtMCwwICsxLDIyMyBAQAorLyoKKyAqIGR3X3NwaV9taWQuYyAtIHNwZWNpYWwgaGFuZGxpbmcgZm9yIERXIGNvcmUgb24gSW50ZWwgTUlEIHBsYXRmb3JtCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5LCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiBJbmMuLCA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYWVuZ2luZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL2R3X3NwaS5oPgorCisjaWZkZWYgQ09ORklHX1NQSV9EV19NSURfRE1BCisjaW5jbHVkZSA8bGludXgvaW50ZWxfbWlkX2RtYS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorCitzdHJ1Y3QgbWlkX2RtYSB7CisJc3RydWN0IGludGVsX21pZF9kbWFfc2xhdmUJZG1hc190eDsKKwlzdHJ1Y3QgaW50ZWxfbWlkX2RtYV9zbGF2ZQlkbWFzX3J4OworfTsKKworc3RhdGljIGJvb2wgbWlkX3NwaV9kbWFfY2hhbl9maWx0ZXIoc3RydWN0IGRtYV9jaGFuICpjaGFuLCB2b2lkICpwYXJhbSkKK3sKKwlzdHJ1Y3QgZHdfc3BpICpkd3MgPSBwYXJhbTsKKworCXJldHVybiBkd3MtPmRtYWMgJiYgKCZkd3MtPmRtYWMtPmRldiA9PSBjaGFuLT5kZXZpY2UtPmRldik7Cit9CisKK3N0YXRpYyBpbnQgbWlkX3NwaV9kbWFfaW5pdChzdHJ1Y3QgZHdfc3BpICpkd3MpCit7CisJc3RydWN0IG1pZF9kbWEgKmR3X2RtYSA9IGR3cy0+ZG1hX3ByaXY7CisJc3RydWN0IGludGVsX21pZF9kbWFfc2xhdmUgKnJ4cywgKnR4czsKKwlkbWFfY2FwX21hc2tfdCBtYXNrOworCisJLyoKKwkgKiBHZXQgcGNpIGRldmljZSBmb3IgRE1BIGNvbnRyb2xsZXIsIGN1cnJlbnRseSBpdCBjb3VsZCBvbmx5CisJICogYmUgdGhlIERNQSBjb250cm9sbGVyIG9mIGVpdGhlciBNb29yZXN0b3duIG9yIE1lZGZpZWxkCisJICovCisJZHdzLT5kbWFjID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgwODEzLCBOVUxMKTsKKwlpZiAoIWR3cy0+ZG1hYykKKwkJZHdzLT5kbWFjID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgwODI3LCBOVUxMKTsKKworCWRtYV9jYXBfemVybyhtYXNrKTsKKwlkbWFfY2FwX3NldChETUFfU0xBVkUsIG1hc2spOworCisJLyogMS4gSW5pdCByeCBjaGFubmVsICovCisJZHdzLT5yeGNoYW4gPSBkbWFfcmVxdWVzdF9jaGFubmVsKG1hc2ssIG1pZF9zcGlfZG1hX2NoYW5fZmlsdGVyLCBkd3MpOworCWlmICghZHdzLT5yeGNoYW4pCisJCWdvdG8gZXJyX2V4aXQ7CisJcnhzID0gJmR3X2RtYS0+ZG1hc19yeDsKKwlyeHMtPmhzX21vZGUgPSBMTldfRE1BX0hXX0hTOworCXJ4cy0+Y2ZnX21vZGUgPSBMTldfRE1BX1BFUl9UT19NRU07CisJZHdzLT5yeGNoYW4tPnByaXZhdGUgPSByeHM7CisKKwkvKiAyLiBJbml0IHR4IGNoYW5uZWwgKi8KKwlkd3MtPnR4Y2hhbiA9IGRtYV9yZXF1ZXN0X2NoYW5uZWwobWFzaywgbWlkX3NwaV9kbWFfY2hhbl9maWx0ZXIsIGR3cyk7CisJaWYgKCFkd3MtPnR4Y2hhbikKKwkJZ290byBmcmVlX3J4Y2hhbjsKKwl0eHMgPSAmZHdfZG1hLT5kbWFzX3R4OworCXR4cy0+aHNfbW9kZSA9IExOV19ETUFfSFdfSFM7CisJdHhzLT5jZmdfbW9kZSA9IExOV19ETUFfTUVNX1RPX1BFUjsKKwlkd3MtPnR4Y2hhbi0+cHJpdmF0ZSA9IHR4czsKKworCWR3cy0+ZG1hX2luaXRlZCA9IDE7CisJcmV0dXJuIDA7CisKK2ZyZWVfcnhjaGFuOgorCWRtYV9yZWxlYXNlX2NoYW5uZWwoZHdzLT5yeGNoYW4pOworZXJyX2V4aXQ6CisJcmV0dXJuIC0xOworCit9CisKK3N0YXRpYyB2b2lkIG1pZF9zcGlfZG1hX2V4aXQoc3RydWN0IGR3X3NwaSAqZHdzKQoreworCWRtYV9yZWxlYXNlX2NoYW5uZWwoZHdzLT50eGNoYW4pOworCWRtYV9yZWxlYXNlX2NoYW5uZWwoZHdzLT5yeGNoYW4pOworfQorCisvKgorICogZHdzLT5kbWFfY2hhbl9kb25lIGlzIGNsZWFyZWQgYmVmb3JlIHRoZSBkbWEgdHJhbnNmZXIgc3RhcnRzLAorICogY2FsbGJhY2sgZm9yIHJ4L3R4IGNoYW5uZWwgd2lsbCBlYWNoIGluY3JlbWVudCBpdCBieSAxLgorICogUmVhY2hpbmcgMiBtZWFucyB0aGUgd2hvbGUgc3BpIHRyYW5zYWN0aW9uIGlzIGRvbmUuCisgKi8KK3N0YXRpYyB2b2lkIGR3X3NwaV9kbWFfZG9uZSh2b2lkICphcmcpCit7CisJc3RydWN0IGR3X3NwaSAqZHdzID0gYXJnOworCisJaWYgKCsrZHdzLT5kbWFfY2hhbl9kb25lICE9IDIpCisJCXJldHVybjsKKwlkd19zcGlfeGZlcl9kb25lKGR3cyk7Cit9CisKK3N0YXRpYyBpbnQgbWlkX3NwaV9kbWFfdHJhbnNmZXIoc3RydWN0IGR3X3NwaSAqZHdzLCBpbnQgY3NfY2hhbmdlKQoreworCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqdHhkZXNjID0gTlVMTCwgKnJ4ZGVzYyA9IE5VTEw7CisJc3RydWN0IGRtYV9jaGFuICp0eGNoYW4sICpyeGNoYW47CisJc3RydWN0IGRtYV9zbGF2ZV9jb25maWcgdHhjb25mLCByeGNvbmY7CisJdTE2IGRtYV9jdHJsID0gMDsKKworCS8qIDEuIHNldHVwIERNQSByZWxhdGVkIHJlZ2lzdGVycyAqLworCWlmIChjc19jaGFuZ2UpIHsKKwkJc3BpX2VuYWJsZV9jaGlwKGR3cywgMCk7CisJCWR3X3dyaXRldyhkd3MsIGRtYXJkbHIsIDB4Zik7CisJCWR3X3dyaXRldyhkd3MsIGRtYXRkbHIsIDB4MTApOworCQlpZiAoZHdzLT50eF9kbWEpCisJCQlkbWFfY3RybCB8PSAweDI7CisJCWlmIChkd3MtPnJ4X2RtYSkKKwkJCWRtYV9jdHJsIHw9IDB4MTsKKwkJZHdfd3JpdGV3KGR3cywgZG1hY3IsIGRtYV9jdHJsKTsKKwkJc3BpX2VuYWJsZV9jaGlwKGR3cywgMSk7CisJfQorCisJZHdzLT5kbWFfY2hhbl9kb25lID0gMDsKKwl0eGNoYW4gPSBkd3MtPnR4Y2hhbjsKKwlyeGNoYW4gPSBkd3MtPnJ4Y2hhbjsKKworCS8qIDIuIFByZXBhcmUgdGhlIFRYIGRtYSB0cmFuc2ZlciAqLworCXR4Y29uZi5kaXJlY3Rpb24gPSBETUFfVE9fREVWSUNFOworCXR4Y29uZi5kc3RfYWRkciA9IGR3cy0+ZG1hX2FkZHI7CisJdHhjb25mLmRzdF9tYXhidXJzdCA9IExOV19ETUFfTVNJWkVfMTY7CisJdHhjb25mLnNyY19hZGRyX3dpZHRoID0gRE1BX1NMQVZFX0JVU1dJRFRIXzRfQllURVM7CisJdHhjb25mLmRzdF9hZGRyX3dpZHRoID0gRE1BX1NMQVZFX0JVU1dJRFRIXzJfQllURVM7CisKKwl0eGNoYW4tPmRldmljZS0+ZGV2aWNlX2NvbnRyb2wodHhjaGFuLCBETUFfU0xBVkVfQ09ORklHLAorCQkJCSAgICAgICAodW5zaWduZWQgbG9uZykgJnR4Y29uZik7CisKKwltZW1zZXQoJmR3cy0+dHhfc2dsLCAwLCBzaXplb2YoZHdzLT50eF9zZ2wpKTsKKwlkd3MtPnR4X3NnbC5kbWFfYWRkcmVzcyA9IGR3cy0+dHhfZG1hOworCWR3cy0+dHhfc2dsLmxlbmd0aCA9IGR3cy0+bGVuOworCisJdHhkZXNjID0gdHhjaGFuLT5kZXZpY2UtPmRldmljZV9wcmVwX3NsYXZlX3NnKHR4Y2hhbiwKKwkJCQkmZHdzLT50eF9zZ2wsCisJCQkJMSwKKwkJCQlETUFfVE9fREVWSUNFLAorCQkJCURNQV9QUkVQX0lOVEVSUlVQVCB8IERNQV9DT01QTF9TS0lQX0RFU1RfVU5NQVApOworCXR4ZGVzYy0+Y2FsbGJhY2sgPSBkd19zcGlfZG1hX2RvbmU7CisJdHhkZXNjLT5jYWxsYmFja19wYXJhbSA9IGR3czsKKworCS8qIDMuIFByZXBhcmUgdGhlIFJYIGRtYSB0cmFuc2ZlciAqLworCXJ4Y29uZi5kaXJlY3Rpb24gPSBETUFfRlJPTV9ERVZJQ0U7CisJcnhjb25mLnNyY19hZGRyID0gZHdzLT5kbWFfYWRkcjsKKwlyeGNvbmYuc3JjX21heGJ1cnN0ID0gTE5XX0RNQV9NU0laRV8xNjsKKwlyeGNvbmYuZHN0X2FkZHJfd2lkdGggPSBETUFfU0xBVkVfQlVTV0lEVEhfNF9CWVRFUzsKKwlyeGNvbmYuc3JjX2FkZHJfd2lkdGggPSBETUFfU0xBVkVfQlVTV0lEVEhfMl9CWVRFUzsKKworCXJ4Y2hhbi0+ZGV2aWNlLT5kZXZpY2VfY29udHJvbChyeGNoYW4sIERNQV9TTEFWRV9DT05GSUcsCisJCQkJICAgICAgICh1bnNpZ25lZCBsb25nKSAmcnhjb25mKTsKKworCW1lbXNldCgmZHdzLT5yeF9zZ2wsIDAsIHNpemVvZihkd3MtPnJ4X3NnbCkpOworCWR3cy0+cnhfc2dsLmRtYV9hZGRyZXNzID0gZHdzLT5yeF9kbWE7CisJZHdzLT5yeF9zZ2wubGVuZ3RoID0gZHdzLT5sZW47CisKKwlyeGRlc2MgPSByeGNoYW4tPmRldmljZS0+ZGV2aWNlX3ByZXBfc2xhdmVfc2cocnhjaGFuLAorCQkJCSZkd3MtPnJ4X3NnbCwKKwkJCQkxLAorCQkJCURNQV9GUk9NX0RFVklDRSwKKwkJCQlETUFfUFJFUF9JTlRFUlJVUFQgfCBETUFfQ09NUExfU0tJUF9ERVNUX1VOTUFQKTsKKwlyeGRlc2MtPmNhbGxiYWNrID0gZHdfc3BpX2RtYV9kb25lOworCXJ4ZGVzYy0+Y2FsbGJhY2tfcGFyYW0gPSBkd3M7CisKKwkvKiByeCBtdXN0IGJlIHN0YXJ0ZWQgYmVmb3JlIHR4IGR1ZSB0byBzcGkgaW5zdGluY3QgKi8KKwlyeGRlc2MtPnR4X3N1Ym1pdChyeGRlc2MpOworCXR4ZGVzYy0+dHhfc3VibWl0KHR4ZGVzYyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHdfc3BpX2RtYV9vcHMgbWlkX2RtYV9vcHMgPSB7CisJLmRtYV9pbml0CT0gbWlkX3NwaV9kbWFfaW5pdCwKKwkuZG1hX2V4aXQJPSBtaWRfc3BpX2RtYV9leGl0LAorCS5kbWFfdHJhbnNmZXIJPSBtaWRfc3BpX2RtYV90cmFuc2ZlciwKK307CisjZW5kaWYKKworLyogU29tZSBzcGVjaWZpYyBpbmZvIGZvciBTUEkwIGNvbnRyb2xsZXIgb24gTW9vcmVzdG93biAqLworCisvKiBIVyBpbmZvIGZvciBNUlNUIENMayBDb250cm9sIFVuaXQsIG9uZSAzMmIgcmVnICovCisjZGVmaW5lIE1SU1RfU1BJX0NMS19CQVNFCTEwMDAwMDAwMAkvKiAxMDBtICovCisjZGVmaW5lIE1SU1RfQ0xLX1NQSTBfUkVHCTB4ZmYxMWQ4NmMKKyNkZWZpbmUgQ0xLX1NQSV9CRElWX09GRlNFVAkwCisjZGVmaW5lIENMS19TUElfQkRJVl9NQVNLCTB4MDAwMDAwMDcKKyNkZWZpbmUgQ0xLX1NQSV9DRElWX09GRlNFVAk5CisjZGVmaW5lIENMS19TUElfQ0RJVl9NQVNLCTB4MDAwMDBlMDAKKyNkZWZpbmUgQ0xLX1NQSV9ESVNBQkxFX09GRlNFVAk4CisKK2ludCBkd19zcGlfbWlkX2luaXQoc3RydWN0IGR3X3NwaSAqZHdzKQoreworCXUzMiAqY2xrX3JlZywgY2xrX2NkaXY7CisKKwljbGtfcmVnID0gaW9yZW1hcF9ub2NhY2hlKE1SU1RfQ0xLX1NQSTBfUkVHLCAxNik7CisJaWYgKCFjbGtfcmVnKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIGdldCBTUEkgY29udHJvbGxlciBvcGVyYXRpbmcgZnJlcSBpbmZvICovCisJY2xrX2NkaXYgID0gKHJlYWRsKGNsa19yZWcpICYgQ0xLX1NQSV9DRElWX01BU0spID4+IENMS19TUElfQ0RJVl9PRkZTRVQ7CisJZHdzLT5tYXhfZnJlcSA9IE1SU1RfU1BJX0NMS19CQVNFIC8gKGNsa19jZGl2ICsgMSk7CisJaW91bm1hcChjbGtfcmVnKTsKKworCWR3cy0+bnVtX2NzID0gMTY7CisJZHdzLT5maWZvX2xlbiA9IDQwOwkvKiBGSUZPIGhhcyA0MCB3b3JkcyBidWZmZXIgKi8KKworI2lmZGVmIENPTkZJR19TUElfRFdfTUlEX0RNQQorCWR3cy0+ZG1hX3ByaXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbWlkX2RtYSksIEdGUF9LRVJORUwpOworCWlmICghZHdzLT5kbWFfcHJpdikKKwkJcmV0dXJuIC1FTk9NRU07CisJZHdzLT5kbWFfb3BzID0gJm1pZF9kbWFfb3BzOworI2VuZGlmCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9kd19zcGlfcGNpLmMgYi9kcml2ZXJzL3NwaS9kd19zcGlfcGNpLmMKaW5kZXggMWY1Mjc1NS4uNDllYzNhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvZHdfc3BpX3BjaS5jCisrKyBiL2RyaXZlcnMvc3BpL2R3X3NwaV9wY2kuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBtcnN0X3NwaV9wY2kuYyAtIFBDSSBpbnRlcmZhY2UgZHJpdmVyIGZvciBEVyBTUEkgQ29yZQorICogZHdfc3BpX3BjaS5jIC0gUENJIGludGVyZmFjZSBkcml2ZXIgZm9yIERXIFNQSSBDb3JlCiAgKgogICogQ29weXJpZ2h0IChjKSAyMDA5LCBJbnRlbCBDb3Jwb3JhdGlvbi4KICAqCkBAIC0yNiw4ICsyNiw4IEBACiAjZGVmaW5lIERSSVZFUl9OQU1FICJkd19zcGlfcGNpIgogCiBzdHJ1Y3QgZHdfc3BpX3BjaSB7Ci0Jc3RydWN0IHBjaV9kZXYJCSpwZGV2OwotCXN0cnVjdCBkd19zcGkJCWR3czsKKwlzdHJ1Y3QgcGNpX2RldgkqcGRldjsKKwlzdHJ1Y3QgZHdfc3BpCWR3czsKIH07CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHNwaV9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCkBAIC03Miw5ICs3MiwxNyBAQAogCWR3cy0+cGFyZW50X2RldiA9ICZwZGV2LT5kZXY7CiAJZHdzLT5idXNfbnVtID0gMDsKIAlkd3MtPm51bV9jcyA9IDQ7Ci0JZHdzLT5tYXhfZnJlcSA9IDI1MDAwMDAwOwkvKiBmb3IgTW9vcmVzdHdvbiAqLwogCWR3cy0+aXJxID0gcGRldi0+aXJxOwotCWR3cy0+Zmlmb19sZW4gPSA0MDsJCS8qIEZJRk8gaGFzIDQwIHdvcmRzIGJ1ZmZlciAqLworCisJLyoKKwkgKiBTcGVjaWZpYyBoYW5kbGluZyBmb3IgSW50ZWwgTUlEIHBhbHRmb3JtcywgbGlrZSBkbWEgc2V0dXAsCisJICogY2xvY2sgcmF0ZSwgRklGTyBkZXB0aC4KKwkgKi8KKwlpZiAocGRldi0+ZGV2aWNlID09IDB4MDgwMCkgeworCQlyZXQgPSBkd19zcGlfbWlkX2luaXQoZHdzKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyX3VubWFwOworCX0KIAogCXJldCA9IGR3X3NwaV9hZGRfaG9zdChkd3MpOwogCWlmIChyZXQpCkBAIC0xNDAsNyArMTQ4LDcgQEAKICNlbmRpZgogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGNpX2lkc1tdIF9fZGV2aW5pdGRhdGEgPSB7Ci0JLyogSW50ZWwgTW9vcmVzdG93biBwbGF0Zm9ybSBTUEkgY29udHJvbGxlciAwICovCisJLyogSW50ZWwgTUlEIHBsYXRmb3JtIFNQSSBjb250cm9sbGVyIDAgKi8KIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgwODAwKSB9LAogCXt9LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL21wYzUyeHhfcHNjX3NwaS5jIGIvZHJpdmVycy9zcGkvbXBjNTJ4eF9wc2Nfc3BpLmMKaW5kZXggOTgzZmJiZi4uOGE5MDRjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvbXBjNTJ4eF9wc2Nfc3BpLmMKKysrIGIvZHJpdmVycy9zcGkvbXBjNTJ4eF9wc2Nfc3BpLmMKQEAgLTM2Myw3ICszNjMsNyBAQAogfQogCiAvKiBidXNfbnVtIGlzIHVzZWQgb25seSBmb3IgdGhlIGNhc2UgZGV2LT5wbGF0Zm9ybV9kYXRhID09IE5VTEwgKi8KLXN0YXRpYyBpbnQgX19pbml0IG1wYzUyeHhfcHNjX3NwaV9kb19wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHUzMiByZWdhZGRyLAorc3RhdGljIGludCBfX2RldmluaXQgbXBjNTJ4eF9wc2Nfc3BpX2RvX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyIHJlZ2FkZHIsCiAJCQkJdTMyIHNpemUsIHVuc2lnbmVkIGludCBpcnEsIHMxNiBidXNfbnVtKQogewogCXN0cnVjdCBmc2xfc3BpX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gZGV2LT5wbGF0Zm9ybV9kYXRhOwpAQCAtNDUwLDIyICs0NTAsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgX19leGl0IG1wYzUyeHhfcHNjX3NwaV9kb19yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQotewotCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXIgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgbXBjNTJ4eF9wc2Nfc3BpICptcHMgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7Ci0KLQlmbHVzaF93b3JrcXVldWUobXBzLT53b3JrcXVldWUpOwotCWRlc3Ryb3lfd29ya3F1ZXVlKG1wcy0+d29ya3F1ZXVlKTsKLQlzcGlfdW5yZWdpc3Rlcl9tYXN0ZXIobWFzdGVyKTsKLQlmcmVlX2lycShtcHMtPmlycSwgbXBzKTsKLQlpZiAobXBzLT5wc2MpCi0JCWlvdW5tYXAobXBzLT5wc2MpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IG1wYzUyeHhfcHNjX3NwaV9vZl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvcCwKK3N0YXRpYyBpbnQgX19kZXZpbml0IG1wYzUyeHhfcHNjX3NwaV9vZl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvcCwKIAljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKIHsKIAljb25zdCB1MzIgKnJlZ2FkZHJfcDsKQEAgLTQ5NSw5ICs0ODAsMTkgQEAKIAkJCQlpcnFfb2ZfcGFyc2VfYW5kX21hcChvcC0+ZGV2Lm9mX25vZGUsIDApLCBpZCk7CiB9CiAKLXN0YXRpYyBpbnQgX19leGl0IG1wYzUyeHhfcHNjX3NwaV9vZl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb3ApCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBtcGM1Mnh4X3BzY19zcGlfb2ZfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9wKQogewotCXJldHVybiBtcGM1Mnh4X3BzY19zcGlfZG9fcmVtb3ZlKCZvcC0+ZGV2KTsKKwlzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyID0gZGV2X2dldF9kcnZkYXRhKCZvcC0+ZGV2KTsKKwlzdHJ1Y3QgbXBjNTJ4eF9wc2Nfc3BpICptcHMgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7CisKKwlmbHVzaF93b3JrcXVldWUobXBzLT53b3JrcXVldWUpOworCWRlc3Ryb3lfd29ya3F1ZXVlKG1wcy0+d29ya3F1ZXVlKTsKKwlzcGlfdW5yZWdpc3Rlcl9tYXN0ZXIobWFzdGVyKTsKKwlmcmVlX2lycShtcHMtPmlycSwgbXBzKTsKKwlpZiAobXBzLT5wc2MpCisJCWlvdW5tYXAobXBzLT5wc2MpOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG1wYzUyeHhfcHNjX3NwaV9vZl9tYXRjaFtdID0gewpAQCAtNTEwLDcgKzUwNSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyIG1wYzUyeHhfcHNjX3NwaV9vZl9kcml2ZXIgPSB7CiAJLnByb2JlID0gbXBjNTJ4eF9wc2Nfc3BpX29mX3Byb2JlLAotCS5yZW1vdmUgPSBfX2V4aXRfcChtcGM1Mnh4X3BzY19zcGlfb2ZfcmVtb3ZlKSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AobXBjNTJ4eF9wc2Nfc3BpX29mX3JlbW92ZSksCiAJLmRyaXZlciA9IHsKIAkJLm5hbWUgPSAibXBjNTJ4eC1wc2Mtc3BpIiwKIAkJLm93bmVyID0gVEhJU19NT0RVTEUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9vbWFwMl9tY3NwaS5jIGIvZHJpdmVycy9zcGkvb21hcDJfbWNzcGkuYwppbmRleCA5NTFhMTYwZi4uYWJiMWZmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvb21hcDJfbWNzcGkuYworKysgYi9kcml2ZXJzL3NwaS9vbWFwMl9tY3NwaS5jCkBAIC0zOTcsNyArMzk3LDcgQEAKIAogCWlmICh0eCAhPSBOVUxMKSB7CiAJCXdhaXRfZm9yX2NvbXBsZXRpb24oJm1jc3BpX2RtYS0+ZG1hX3R4X2NvbXBsZXRpb24pOwotCQlkbWFfdW5tYXBfc2luZ2xlKE5VTEwsIHhmZXItPnR4X2RtYSwgY291bnQsIERNQV9UT19ERVZJQ0UpOworCQlkbWFfdW5tYXBfc2luZ2xlKCZzcGktPmRldiwgeGZlci0+dHhfZG1hLCBjb3VudCwgRE1BX1RPX0RFVklDRSk7CiAKIAkJLyogZm9yIFRYX09OTFkgbW9kZSwgYmUgc3VyZSBhbGwgd29yZHMgaGF2ZSBzaGlmdGVkIG91dCAqLwogCQlpZiAocnggPT0gTlVMTCkgewpAQCAtNDEyLDcgKzQxMiw3IEBACiAKIAlpZiAocnggIT0gTlVMTCkgewogCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZtY3NwaV9kbWEtPmRtYV9yeF9jb21wbGV0aW9uKTsKLQkJZG1hX3VubWFwX3NpbmdsZShOVUxMLCB4ZmVyLT5yeF9kbWEsIGNvdW50LCBETUFfRlJPTV9ERVZJQ0UpOworCQlkbWFfdW5tYXBfc2luZ2xlKCZzcGktPmRldiwgeGZlci0+cnhfZG1hLCBjb3VudCwgRE1BX0ZST01fREVWSUNFKTsKIAkJb21hcDJfbWNzcGlfc2V0X2VuYWJsZShzcGksIDApOwogCiAJCWlmIChsICYgT01BUDJfTUNTUElfQ0hDT05GX1RVUkJPKSB7CkBAIC0xMDI1LDExICsxMDI1LDYgQEAKIAkJaWYgKG0tPmlzX2RtYV9tYXBwZWQgfHwgbGVuIDwgRE1BX01JTl9CWVRFUykKIAkJCWNvbnRpbnVlOwogCi0JCS8qIERvIERNQSBtYXBwaW5nICJlYXJseSIgZm9yIGJldHRlciBlcnJvciByZXBvcnRpbmcgYW5kCi0JCSAqIGRjYWNoZSB1c2UuICBOb3RlIHRoYXQgaWYgZG1hX3VubWFwX3NpbmdsZSgpIGV2ZXIgc3RhcnRzCi0JCSAqIHRvIGRvIHJlYWwgd29yayBvbiBBUk0sIHdlJ2QgbmVlZCB0byBjbGVhbiB1cCBtYXBwaW5ncwotCQkgKiBmb3IgcHJldmlvdXMgdHJhbnNmZXJzIG9uICpBTEwqIGV4aXRzIG9mIHRoaXMgbG9vcC4uLgotCQkgKi8KIAkJaWYgKHR4X2J1ZiAhPSBOVUxMKSB7CiAJCQl0LT50eF9kbWEgPSBkbWFfbWFwX3NpbmdsZSgmc3BpLT5kZXYsICh2b2lkICopIHR4X2J1ZiwKIAkJCQkJbGVuLCBETUFfVE9fREVWSUNFKTsKQEAgLTEwNDYsNyArMTA0MSw3IEBACiAJCQkJZGV2X2RiZygmc3BpLT5kZXYsICJkbWEgJWNYICVkIGJ5dGVzIGVycm9yXG4iLAogCQkJCQkJJ1InLCBsZW4pOwogCQkJCWlmICh0eF9idWYgIT0gTlVMTCkKLQkJCQkJZG1hX3VubWFwX3NpbmdsZShOVUxMLCB0LT50eF9kbWEsCisJCQkJCWRtYV91bm1hcF9zaW5nbGUoJnNwaS0+ZGV2LCB0LT50eF9kbWEsCiAJCQkJCQkJbGVuLCBETUFfVE9fREVWSUNFKTsKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3B4YTJ4eF9zcGkuYyBiL2RyaXZlcnMvc3BpL3B4YTJ4eF9zcGkuYwppbmRleCBlNzZiMWFmLi45NTkyODgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9weGEyeHhfc3BpLmMKKysrIGIvZHJpdmVycy9zcGkvcHhhMnh4X3NwaS5jCkBAIC0yMywxMSArMjMsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9weGEyeHhfc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogCkBAIC0zNSw5ICszNSw2IEBACiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9kZWxheS5oPgogCi0jaW5jbHVkZSA8bWFjaC9kbWEuaD4KLSNpbmNsdWRlIDxwbGF0L3NzcC5oPgotI2luY2x1ZGUgPG1hY2gvcHhhMnh4X3NwaS5oPgogCiBNT0RVTEVfQVVUSE9SKCJTdGVwaGVuIFN0cmVldCIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJQWEEyeHggU1NQIFNQSSBDb250cm9sbGVyIik7CkBAIC00Niw4ICs0Myw2IEBACiAKICNkZWZpbmUgTUFYX0JVU0VTIDMKIAotI2RlZmluZSBSWF9USFJFU0hfREZMVCAJOAotI2RlZmluZSBUWF9USFJFU0hfREZMVCAJOAogI2RlZmluZSBUSU1PVVRfREZMVAkJMTAwMAogCiAjZGVmaW5lIERNQV9JTlRfTUFTSwkJKERDU1JfRU5ESU5UUiB8IERDU1JfU1RBUlRJTlRSIHwgRENTUl9CVVNFUlIpCkBAIC0xNjgsNyArMTYzLDEwIEBACiAJdTggZW5hYmxlX2RtYTsKIAl1OCBiaXRzX3Blcl93b3JkOwogCXUzMiBzcGVlZF9oejsKLQlpbnQgZ3Bpb19jczsKKwl1bmlvbiB7CisJCWludCBncGlvX2NzOworCQl1bnNpZ25lZCBpbnQgZnJtOworCX07CiAJaW50IGdwaW9fY3NfaW52ZXJ0ZWQ7CiAJaW50ICgqd3JpdGUpKHN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEpOwogCWludCAoKnJlYWQpKHN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEpOwpAQCAtMTgxLDYgKzE3OSwxMSBAQAogewogCXN0cnVjdCBjaGlwX2RhdGEgKmNoaXAgPSBkcnZfZGF0YS0+Y3VyX2NoaXA7CiAKKwlpZiAoZHJ2X2RhdGEtPnNzcF90eXBlID09IENFNDEwMF9TU1ApIHsKKwkJd3JpdGVfU1NTUihkcnZfZGF0YS0+Y3VyX2NoaXAtPmZybSwgZHJ2X2RhdGEtPmlvYWRkcik7CisJCXJldHVybjsKKwl9CisKIAlpZiAoY2hpcC0+Y3NfY29udHJvbCkgewogCQljaGlwLT5jc19jb250cm9sKFBYQTJYWF9DU19BU1NFUlQpOwogCQlyZXR1cm47CkBAIC0xOTQsNiArMTk3LDkgQEAKIHsKIAlzdHJ1Y3QgY2hpcF9kYXRhICpjaGlwID0gZHJ2X2RhdGEtPmN1cl9jaGlwOwogCisJaWYgKGRydl9kYXRhLT5zc3BfdHlwZSA9PSBDRTQxMDBfU1NQKQorCQlyZXR1cm47CisKIAlpZiAoY2hpcC0+Y3NfY29udHJvbCkgewogCQljaGlwLT5jc19jb250cm9sKFBYQTJYWF9DU19ERUFTU0VSVCk7CiAJCXJldHVybjsKQEAgLTIwMyw2ICsyMDksMjUgQEAKIAkJZ3Bpb19zZXRfdmFsdWUoY2hpcC0+Z3Bpb19jcywgIWNoaXAtPmdwaW9fY3NfaW52ZXJ0ZWQpOwogfQogCitzdGF0aWMgdm9pZCB3cml0ZV9TU1NSX0NTKHN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEsIHUzMiB2YWwpCit7CisJdm9pZCBfX2lvbWVtICpyZWcgPSBkcnZfZGF0YS0+aW9hZGRyOworCisJaWYgKGRydl9kYXRhLT5zc3BfdHlwZSA9PSBDRTQxMDBfU1NQKQorCQl2YWwgfD0gcmVhZF9TU1NSKHJlZykgJiBTU1NSX0FMVF9GUk1fTUFTSzsKKworCXdyaXRlX1NTU1IodmFsLCByZWcpOworfQorCitzdGF0aWMgaW50IHB4YTI1eF9zc3BfY29tcChzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhKQoreworCWlmIChkcnZfZGF0YS0+c3NwX3R5cGUgPT0gUFhBMjV4X1NTUCkKKwkJcmV0dXJuIDE7CisJaWYgKGRydl9kYXRhLT5zc3BfdHlwZSA9PSBDRTQxMDBfU1NQKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBmbHVzaChzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhKQogewogCXVuc2lnbmVkIGxvbmcgbGltaXQgPSBsb29wc19wZXJfamlmZnkgPDwgMTsKQEAgLTIxNCw3ICsyMzksNyBAQAogCQkJcmVhZF9TU0RSKHJlZyk7CiAJCX0KIAl9IHdoaWxlICgocmVhZF9TU1NSKHJlZykgJiBTU1NSX0JTWSkgJiYgLS1saW1pdCk7Ci0Jd3JpdGVfU1NTUihTU1NSX1JPUiwgcmVnKTsKKwl3cml0ZV9TU1NSX0NTKGRydl9kYXRhLCBTU1NSX1JPUik7CiAKIAlyZXR1cm4gbGltaXQ7CiB9CkBAIC0yMjQsNyArMjQ5LDcgQEAKIAl2b2lkIF9faW9tZW0gKnJlZyA9IGRydl9kYXRhLT5pb2FkZHI7CiAJdTggbl9ieXRlcyA9IGRydl9kYXRhLT5uX2J5dGVzOwogCi0JaWYgKCgocmVhZF9TU1NSKHJlZykgJiAweDAwMDAwZjAwKSA9PSAweDAwMDAwZjAwKQorCWlmICgoKHJlYWRfU1NTUihyZWcpICYgU1NTUl9URkxfTUFTSykgPT0gU1NTUl9URkxfTUFTSykKIAkJfHwgKGRydl9kYXRhLT50eCA9PSBkcnZfZGF0YS0+dHhfZW5kKSkKIAkJcmV0dXJuIDA7CiAKQEAgLTI1Miw3ICsyNzcsNyBAQAogewogCXZvaWQgX19pb21lbSAqcmVnID0gZHJ2X2RhdGEtPmlvYWRkcjsKIAotCWlmICgoKHJlYWRfU1NTUihyZWcpICYgMHgwMDAwMGYwMCkgPT0gMHgwMDAwMGYwMCkKKwlpZiAoKChyZWFkX1NTU1IocmVnKSAmIFNTU1JfVEZMX01BU0spID09IFNTU1JfVEZMX01BU0spCiAJCXx8IChkcnZfZGF0YS0+dHggPT0gZHJ2X2RhdGEtPnR4X2VuZCkpCiAJCXJldHVybiAwOwogCkBAIC0yNzksNyArMzA0LDcgQEAKIHsKIAl2b2lkIF9faW9tZW0gKnJlZyA9IGRydl9kYXRhLT5pb2FkZHI7CiAKLQlpZiAoKChyZWFkX1NTU1IocmVnKSAmIDB4MDAwMDBmMDApID09IDB4MDAwMDBmMDApCisJaWYgKCgocmVhZF9TU1NSKHJlZykgJiBTU1NSX1RGTF9NQVNLKSA9PSBTU1NSX1RGTF9NQVNLKQogCQl8fCAoZHJ2X2RhdGEtPnR4ID09IGRydl9kYXRhLT50eF9lbmQpKQogCQlyZXR1cm4gMDsKIApAQCAtMzA2LDcgKzMzMSw3IEBACiB7CiAJdm9pZCBfX2lvbWVtICpyZWcgPSBkcnZfZGF0YS0+aW9hZGRyOwogCi0JaWYgKCgocmVhZF9TU1NSKHJlZykgJiAweDAwMDAwZjAwKSA9PSAweDAwMDAwZjAwKQorCWlmICgoKHJlYWRfU1NTUihyZWcpICYgU1NTUl9URkxfTUFTSykgPT0gU1NTUl9URkxfTUFTSykKIAkJfHwgKGRydl9kYXRhLT50eCA9PSBkcnZfZGF0YS0+dHhfZW5kKSkKIAkJcmV0dXJuIDA7CiAKQEAgLTUwNyw5ICs1MzIsOSBAQAogCS8qIFN0b3AgYW5kIHJlc2V0ICovCiAJRENTUihkcnZfZGF0YS0+cnhfY2hhbm5lbCkgPSBSRVNFVF9ETUFfQ0hBTk5FTDsKIAlEQ1NSKGRydl9kYXRhLT50eF9jaGFubmVsKSA9IFJFU0VUX0RNQV9DSEFOTkVMOwotCXdyaXRlX1NTU1IoZHJ2X2RhdGEtPmNsZWFyX3NyLCByZWcpOworCXdyaXRlX1NTU1JfQ1MoZHJ2X2RhdGEsIGRydl9kYXRhLT5jbGVhcl9zcik7CiAJd3JpdGVfU1NDUjEocmVhZF9TU0NSMShyZWcpICYgfmRydl9kYXRhLT5kbWFfY3IxLCByZWcpOwotCWlmIChkcnZfZGF0YS0+c3NwX3R5cGUgIT0gUFhBMjV4X1NTUCkKKwlpZiAoIXB4YTI1eF9zc3BfY29tcChkcnZfZGF0YSkpCiAJCXdyaXRlX1NTVE8oMCwgcmVnKTsKIAlmbHVzaChkcnZfZGF0YSk7CiAJd3JpdGVfU1NDUjAocmVhZF9TU0NSMChyZWcpICYgflNTQ1IwX1NTRSwgcmVnKTsKQEAgLTUyOSw3ICs1NTQsNyBAQAogCiAJLyogQ2xlYXIgYW5kIGRpc2FibGUgaW50ZXJydXB0cyBvbiBTU1AgYW5kIERNQSBjaGFubmVscyovCiAJd3JpdGVfU1NDUjEocmVhZF9TU0NSMShyZWcpICYgfmRydl9kYXRhLT5kbWFfY3IxLCByZWcpOwotCXdyaXRlX1NTU1IoZHJ2X2RhdGEtPmNsZWFyX3NyLCByZWcpOworCXdyaXRlX1NTU1JfQ1MoZHJ2X2RhdGEsIGRydl9kYXRhLT5jbGVhcl9zcik7CiAJRENTUihkcnZfZGF0YS0+dHhfY2hhbm5lbCkgPSBSRVNFVF9ETUFfQ0hBTk5FTDsKIAlEQ1NSKGRydl9kYXRhLT5yeF9jaGFubmVsKSA9IFJFU0VUX0RNQV9DSEFOTkVMOwogCkBAIC02MjIsNyArNjQ3LDcgQEAKIAogCQkvKiBDbGVhciBhbmQgZGlzYWJsZSB0aW1lb3V0IGludGVycnVwdCwgZG8gdGhlIHJlc3QgaW4KIAkJICogZG1hX3RyYW5zZmVyX2NvbXBsZXRlICovCi0JCWlmIChkcnZfZGF0YS0+c3NwX3R5cGUgIT0gUFhBMjV4X1NTUCkKKwkJaWYgKCFweGEyNXhfc3NwX2NvbXAoZHJ2X2RhdGEpKQogCQkJd3JpdGVfU1NUTygwLCByZWcpOwogCiAJCS8qIGZpbmlzaCB0aGlzIHRyYW5zZmVyLCBzdGFydCB0aGUgbmV4dCAqLwpAQCAtNjM1LDE0ICs2NjAsMjYgQEAKIAlyZXR1cm4gSVJRX05PTkU7CiB9CiAKK3N0YXRpYyB2b2lkIHJlc2V0X3NjY3IxKHN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEpCit7CisJdm9pZCBfX2lvbWVtICpyZWcgPSBkcnZfZGF0YS0+aW9hZGRyOworCXN0cnVjdCBjaGlwX2RhdGEgKmNoaXAgPSBkcnZfZGF0YS0+Y3VyX2NoaXA7CisJdTMyIHNjY3IxX3JlZzsKKworCXNjY3IxX3JlZyA9IHJlYWRfU1NDUjEocmVnKSAmIH5kcnZfZGF0YS0+aW50X2NyMTsKKwlzY2NyMV9yZWcgJj0gflNTQ1IxX1JGVDsKKwlzY2NyMV9yZWcgfD0gY2hpcC0+dGhyZXNob2xkOworCXdyaXRlX1NTQ1IxKHNjY3IxX3JlZywgcmVnKTsKK30KKwogc3RhdGljIHZvaWQgaW50X2Vycm9yX3N0b3Aoc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSwgY29uc3QgY2hhciogbXNnKQogewogCXZvaWQgX19pb21lbSAqcmVnID0gZHJ2X2RhdGEtPmlvYWRkcjsKIAogCS8qIFN0b3AgYW5kIHJlc2V0IFNTUCAqLwotCXdyaXRlX1NTU1IoZHJ2X2RhdGEtPmNsZWFyX3NyLCByZWcpOwotCXdyaXRlX1NTQ1IxKHJlYWRfU1NDUjEocmVnKSAmIH5kcnZfZGF0YS0+aW50X2NyMSwgcmVnKTsKLQlpZiAoZHJ2X2RhdGEtPnNzcF90eXBlICE9IFBYQTI1eF9TU1ApCisJd3JpdGVfU1NTUl9DUyhkcnZfZGF0YSwgZHJ2X2RhdGEtPmNsZWFyX3NyKTsKKwlyZXNldF9zY2NyMShkcnZfZGF0YSk7CisJaWYgKCFweGEyNXhfc3NwX2NvbXAoZHJ2X2RhdGEpKQogCQl3cml0ZV9TU1RPKDAsIHJlZyk7CiAJZmx1c2goZHJ2X2RhdGEpOwogCXdyaXRlX1NTQ1IwKHJlYWRfU1NDUjAocmVnKSAmIH5TU0NSMF9TU0UsIHJlZyk7CkBAIC02NTgsOSArNjk1LDkgQEAKIAl2b2lkIF9faW9tZW0gKnJlZyA9IGRydl9kYXRhLT5pb2FkZHI7CiAKIAkvKiBTdG9wIFNTUCAqLwotCXdyaXRlX1NTU1IoZHJ2X2RhdGEtPmNsZWFyX3NyLCByZWcpOwotCXdyaXRlX1NTQ1IxKHJlYWRfU1NDUjEocmVnKSAmIH5kcnZfZGF0YS0+aW50X2NyMSwgcmVnKTsKLQlpZiAoZHJ2X2RhdGEtPnNzcF90eXBlICE9IFBYQTI1eF9TU1ApCisJd3JpdGVfU1NTUl9DUyhkcnZfZGF0YSwgZHJ2X2RhdGEtPmNsZWFyX3NyKTsKKwlyZXNldF9zY2NyMShkcnZfZGF0YSk7CisJaWYgKCFweGEyNXhfc3NwX2NvbXAoZHJ2X2RhdGEpKQogCQl3cml0ZV9TU1RPKDAsIHJlZyk7CiAKIAkvKiBVcGRhdGUgdG90YWwgYnl0ZSB0cmFuc2ZlcmVkIHJldHVybiBjb3VudCBhY3R1YWwgYnl0ZXMgcmVhZCAqLwpAQCAtNzE0LDI0ICs3NTEsMzQgQEAKIAl9CiAKIAlpZiAoZHJ2X2RhdGEtPnR4ID09IGRydl9kYXRhLT50eF9lbmQpIHsKLQkJd3JpdGVfU1NDUjEocmVhZF9TU0NSMShyZWcpICYgflNTQ1IxX1RJRSwgcmVnKTsKLQkJLyogUFhBMjV4X1NTUCBoYXMgbm8gdGltZW91dCwgcmVhZCB0cmFpbGluZyBieXRlcyAqLwotCQlpZiAoZHJ2X2RhdGEtPnNzcF90eXBlID09IFBYQTI1eF9TU1ApIHsKLQkJCWlmICghd2FpdF9zc3Bfcnhfc3RhbGwocmVnKSkKLQkJCXsKLQkJCQlpbnRfZXJyb3Jfc3RvcChkcnZfZGF0YSwgImludGVycnVwdF90cmFuc2ZlcjogIgotCQkJCQkJInJ4IHN0YWxsIGZhaWxlZCIpOwotCQkJCXJldHVybiBJUlFfSEFORExFRDsKKwkJdTMyIGJ5dGVzX2xlZnQ7CisJCXUzMiBzY2NyMV9yZWc7CisKKwkJc2NjcjFfcmVnID0gcmVhZF9TU0NSMShyZWcpOworCQlzY2NyMV9yZWcgJj0gflNTQ1IxX1RJRTsKKworCQkvKgorCQkgKiBQWEEyNXhfU1NQIGhhcyBubyB0aW1lb3V0LCBzZXQgdXAgcnggdGhyZXNob3VsZCBmb3IgdGhlCisJCSAqIHJlbWFpbmcgUlggYnl0ZXMuCisJCSAqLworCQlpZiAocHhhMjV4X3NzcF9jb21wKGRydl9kYXRhKSkgeworCisJCQlzY2NyMV9yZWcgJj0gflNTQ1IxX1JGVDsKKworCQkJYnl0ZXNfbGVmdCA9IGRydl9kYXRhLT5yeF9lbmQgLSBkcnZfZGF0YS0+cng7CisJCQlzd2l0Y2ggKGRydl9kYXRhLT5uX2J5dGVzKSB7CisJCQljYXNlIDQ6CisJCQkJYnl0ZXNfbGVmdCA+Pj0gMTsKKwkJCWNhc2UgMjoKKwkJCQlieXRlc19sZWZ0ID4+PSAxOwogCQkJfQotCQkJaWYgKCFkcnZfZGF0YS0+cmVhZChkcnZfZGF0YSkpCi0JCQl7Ci0JCQkJaW50X2Vycm9yX3N0b3AoZHJ2X2RhdGEsCi0JCQkJCQkiaW50ZXJydXB0X3RyYW5zZmVyOiAiCi0JCQkJCQkidHJhaWxpbmcgYnl0ZSByZWFkIGZhaWxlZCIpOwotCQkJCXJldHVybiBJUlFfSEFORExFRDsKLQkJCX0KLQkJCWludF90cmFuc2Zlcl9jb21wbGV0ZShkcnZfZGF0YSk7CisKKwkJCWlmIChieXRlc19sZWZ0ID4gUlhfVEhSRVNIX0RGTFQpCisJCQkJYnl0ZXNfbGVmdCA9IFJYX1RIUkVTSF9ERkxUOworCisJCQlzY2NyMV9yZWcgfD0gU1NDUjFfUnhUcmVzaChieXRlc19sZWZ0KTsKIAkJfQorCQl3cml0ZV9TU0NSMShzY2NyMV9yZWcsIHJlZyk7CiAJfQogCiAJLyogV2UgZGlkIHNvbWV0aGluZyAqLwpAQCAtNzQyLDE0ICs3ODksMjYgQEAKIHsKIAlzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhID0gZGV2X2lkOwogCXZvaWQgX19pb21lbSAqcmVnID0gZHJ2X2RhdGEtPmlvYWRkcjsKKwl1MzIgc2NjcjFfcmVnID0gcmVhZF9TU0NSMShyZWcpOworCXUzMiBtYXNrID0gZHJ2X2RhdGEtPm1hc2tfc3I7CisJdTMyIHN0YXR1czsKKworCXN0YXR1cyA9IHJlYWRfU1NTUihyZWcpOworCisJLyogSWdub3JlIHBvc3NpYmxlIHdyaXRlcyBpZiB3ZSBkb24ndCBuZWVkIHRvIHdyaXRlICovCisJaWYgKCEoc2NjcjFfcmVnICYgU1NDUjFfVElFKSkKKwkJbWFzayAmPSB+U1NTUl9URlM7CisKKwlpZiAoIShzdGF0dXMgJiBtYXNrKSkKKwkJcmV0dXJuIElSUV9OT05FOwogCiAJaWYgKCFkcnZfZGF0YS0+Y3VyX21zZykgewogCiAJCXdyaXRlX1NTQ1IwKHJlYWRfU1NDUjAocmVnKSAmIH5TU0NSMF9TU0UsIHJlZyk7CiAJCXdyaXRlX1NTQ1IxKHJlYWRfU1NDUjEocmVnKSAmIH5kcnZfZGF0YS0+aW50X2NyMSwgcmVnKTsKLQkJaWYgKGRydl9kYXRhLT5zc3BfdHlwZSAhPSBQWEEyNXhfU1NQKQorCQlpZiAoIXB4YTI1eF9zc3BfY29tcChkcnZfZGF0YSkpCiAJCQl3cml0ZV9TU1RPKDAsIHJlZyk7Ci0JCXdyaXRlX1NTU1IoZHJ2X2RhdGEtPmNsZWFyX3NyLCByZWcpOworCQl3cml0ZV9TU1NSX0NTKGRydl9kYXRhLCBkcnZfZGF0YS0+Y2xlYXJfc3IpOwogCiAJCWRldl9lcnIoJmRydl9kYXRhLT5wZGV2LT5kZXYsICJiYWQgbWVzc2FnZSBzdGF0ZSAiCiAJCQkiaW4gaW50ZXJydXB0IGhhbmRsZXJcbiIpOwpAQCAtODYyLDcgKzkyMSw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyBzc3BfY2xrID0gY2xrX2dldF9yYXRlKHNzcC0+Y2xrKTsKIAotCWlmIChzc3AtPnR5cGUgPT0gUFhBMjV4X1NTUCkKKwlpZiAoc3NwLT50eXBlID09IFBYQTI1eF9TU1AgfHwgc3NwLT50eXBlID09IENFNDEwMF9TU1ApCiAJCXJldHVybiAoKHNzcF9jbGsgLyAoMiAqIHJhdGUpIC0gMSkgJiAweGZmKSA8PCA4OwogCWVsc2UKIAkJcmV0dXJuICgoc3NwX2NsayAvIHJhdGUgLSAxKSAmIDB4ZmZmKSA8PCA4OwpAQCAtMTA4OCw3ICsxMTQ3LDcgQEAKIAogCQkvKiBDbGVhciBzdGF0dXMgICovCiAJCWNyMSA9IGNoaXAtPmNyMSB8IGNoaXAtPnRocmVzaG9sZCB8IGRydl9kYXRhLT5pbnRfY3IxOwotCQl3cml0ZV9TU1NSKGRydl9kYXRhLT5jbGVhcl9zciwgcmVnKTsKKwkJd3JpdGVfU1NTUl9DUyhkcnZfZGF0YSwgZHJ2X2RhdGEtPmNsZWFyX3NyKTsKIAl9CiAKIAkvKiBzZWUgaWYgd2UgbmVlZCB0byByZWxvYWQgdGhlIGNvbmZpZyByZWdpc3RlcnMgKi8KQEAgLTEwOTgsNyArMTE1Nyw3IEBACiAKIAkJLyogc3RvcCB0aGUgU1NQLCBhbmQgdXBkYXRlIHRoZSBvdGhlciBiaXRzICovCiAJCXdyaXRlX1NTQ1IwKGNyMCAmIH5TU0NSMF9TU0UsIHJlZyk7Ci0JCWlmIChkcnZfZGF0YS0+c3NwX3R5cGUgIT0gUFhBMjV4X1NTUCkKKwkJaWYgKCFweGEyNXhfc3NwX2NvbXAoZHJ2X2RhdGEpKQogCQkJd3JpdGVfU1NUTyhjaGlwLT50aW1lb3V0LCByZWcpOwogCQkvKiBmaXJzdCBzZXQgQ1IxIHdpdGhvdXQgaW50ZXJydXB0IGFuZCBzZXJ2aWNlIGVuYWJsZXMgKi8KIAkJd3JpdGVfU1NDUjEoY3IxICYgU1NDUjFfQ0hBTkdFX01BU0ssIHJlZyk7CkBAIC0xMTA2LDcgKzExNjUsNyBAQAogCQl3cml0ZV9TU0NSMChjcjAsIHJlZyk7CiAKIAl9IGVsc2UgewotCQlpZiAoZHJ2X2RhdGEtPnNzcF90eXBlICE9IFBYQTI1eF9TU1ApCisJCWlmICghcHhhMjV4X3NzcF9jb21wKGRydl9kYXRhKSkKIAkJCXdyaXRlX1NTVE8oY2hpcC0+dGltZW91dCwgcmVnKTsKIAl9CiAKQEAgLTEyMzMsMTQgKzEyOTIsMTMgQEAKIAl1aW50IHR4X3RocmVzID0gVFhfVEhSRVNIX0RGTFQ7CiAJdWludCByeF90aHJlcyA9IFJYX1RIUkVTSF9ERkxUOwogCi0JaWYgKGRydl9kYXRhLT5zc3BfdHlwZSAhPSBQWEEyNXhfU1NQCisJaWYgKCFweGEyNXhfc3NwX2NvbXAoZHJ2X2RhdGEpCiAJCSYmIChzcGktPmJpdHNfcGVyX3dvcmQgPCA0IHx8IHNwaS0+Yml0c19wZXJfd29yZCA+IDMyKSkgewogCQlkZXZfZXJyKCZzcGktPmRldiwgImZhaWxlZCBzZXR1cDogc3NwX3R5cGU9JWQsIGJpdHMvd3JkPSVkICIKIAkJCQkiYi93IG5vdCA0LTMyIGZvciB0eXBlIG5vbi1QWEEyNXhfU1NQXG4iLAogCQkJCWRydl9kYXRhLT5zc3BfdHlwZSwgc3BpLT5iaXRzX3Blcl93b3JkKTsKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCWVsc2UgaWYgKGRydl9kYXRhLT5zc3BfdHlwZSA9PSBQWEEyNXhfU1NQCisJfSBlbHNlIGlmIChweGEyNXhfc3NwX2NvbXAoZHJ2X2RhdGEpCiAJCQkmJiAoc3BpLT5iaXRzX3Blcl93b3JkIDwgNAogCQkJCXx8IHNwaS0+Yml0c19wZXJfd29yZCA+IDE2KSkgewogCQlkZXZfZXJyKCZzcGktPmRldiwgImZhaWxlZCBzZXR1cDogc3NwX3R5cGU9JWQsIGJpdHMvd3JkPSVkICIKQEAgLTEyNTksNyArMTMxNywxNyBAQAogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIAotCQljaGlwLT5ncGlvX2NzID0gLTE7CisJCWlmIChkcnZfZGF0YS0+c3NwX3R5cGUgPT0gQ0U0MTAwX1NTUCkgeworCQkJaWYgKHNwaS0+Y2hpcF9zZWxlY3QgPiA0KSB7CisJCQkJZGV2X2Vycigmc3BpLT5kZXYsICJmYWlsZWQgc2V0dXA6ICIKKwkJCQkiY3MgbnVtYmVyIG11c3Qgbm90IGJlID4gNC5cbiIpOworCQkJCWtmcmVlKGNoaXApOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCisJCQljaGlwLT5mcm0gPSBzcGktPmNoaXBfc2VsZWN0OworCQl9IGVsc2UKKwkJCWNoaXAtPmdwaW9fY3MgPSAtMTsKIAkJY2hpcC0+ZW5hYmxlX2RtYSA9IDA7CiAJCWNoaXAtPnRpbWVvdXQgPSBUSU1PVVRfREZMVDsKIAkJY2hpcC0+ZG1hX2J1cnN0X3NpemUgPSBkcnZfZGF0YS0+bWFzdGVyX2luZm8tPmVuYWJsZV9kbWEgPwpAQCAtMTMxNSw3ICsxMzgzLDcgQEAKIAkJCXwgKCgoc3BpLT5tb2RlICYgU1BJX0NQT0wpICE9IDApID8gU1NDUjFfU1BPIDogMCk7CiAKIAkvKiBOT1RFOiAgUFhBMjV4X1NTUCBfY291bGRfIHVzZSBleHRlcm5hbCBjbG9ja2luZyAuLi4gKi8KLQlpZiAoZHJ2X2RhdGEtPnNzcF90eXBlICE9IFBYQTI1eF9TU1ApCisJaWYgKCFweGEyNXhfc3NwX2NvbXAoZHJ2X2RhdGEpKQogCQlkZXZfZGJnKCZzcGktPmRldiwgIiVsZCBIeiBhY3R1YWwsICVzXG4iLAogCQkJY2xrX2dldF9yYXRlKHNzcC0+Y2xrKQogCQkJCS8gKDEgKyAoKGNoaXAtPmNyMCAmIFNTQ1IwX1NDUigweGZmZikpID4+IDgpKSwKQEAgLTEzNTAsMjMgKzE0MTgsMjcgQEAKIAogCXNwaV9zZXRfY3RsZGF0YShzcGksIGNoaXApOwogCisJaWYgKGRydl9kYXRhLT5zc3BfdHlwZSA9PSBDRTQxMDBfU1NQKQorCQlyZXR1cm4gMDsKKwogCXJldHVybiBzZXR1cF9jcyhzcGksIGNoaXAsIGNoaXBfaW5mbyk7CiB9CiAKIHN0YXRpYyB2b2lkIGNsZWFudXAoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKIHsKIAlzdHJ1Y3QgY2hpcF9kYXRhICpjaGlwID0gc3BpX2dldF9jdGxkYXRhKHNwaSk7CisJc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOwogCiAJaWYgKCFjaGlwKQogCQlyZXR1cm47CiAKLQlpZiAoZ3Bpb19pc192YWxpZChjaGlwLT5ncGlvX2NzKSkKKwlpZiAoZHJ2X2RhdGEtPnNzcF90eXBlICE9IENFNDEwMF9TU1AgJiYgZ3Bpb19pc192YWxpZChjaGlwLT5ncGlvX2NzKSkKIAkJZ3Bpb19mcmVlKGNoaXAtPmdwaW9fY3MpOwogCiAJa2ZyZWUoY2hpcCk7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IGluaXRfcXVldWUoc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSkKK3N0YXRpYyBpbnQgX19kZXZpbml0IGluaXRfcXVldWUoc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSkKIHsKIAlJTklUX0xJU1RfSEVBRCgmZHJ2X2RhdGEtPnF1ZXVlKTsKIAlzcGluX2xvY2tfaW5pdCgmZHJ2X2RhdGEtPmxvY2spOwpAQCAtMTQ1NCw3ICsxNTI2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBfX2luaXQgcHhhMnh4X3NwaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBfX2RldmluaXQgcHhhMnh4X3NwaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CiAJc3RydWN0IHB4YTJ4eF9zcGlfbWFzdGVyICpwbGF0Zm9ybV9pbmZvOwpAQCAtMTQ4NCw2ICsxNTU2LDEwIEBACiAJZHJ2X2RhdGEtPnBkZXYgPSBwZGV2OwogCWRydl9kYXRhLT5zc3AgPSBzc3A7CiAKKwltYXN0ZXItPmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OworI2lmZGVmIENPTkZJR19PRgorCW1hc3Rlci0+ZGV2Lm9mX25vZGUgPSBwZGV2LT5kZXYub2Zfbm9kZTsKKyNlbmRpZgogCS8qIHRoZSBzcGktPm1vZGUgYml0cyB1bmRlcnN0b29kIGJ5IHRoaXMgZHJpdmVyOiAqLwogCW1hc3Rlci0+bW9kZV9iaXRzID0gU1BJX0NQT0wgfCBTUElfQ1BIQSB8IFNQSV9DU19ISUdIOwogCkBAIC0xNTAwLDcgKzE1NzYsNyBAQAogCiAJZHJ2X2RhdGEtPmlvYWRkciA9IHNzcC0+bW1pb19iYXNlOwogCWRydl9kYXRhLT5zc2RyX3BoeXNpY2FsID0gc3NwLT5waHlzX2Jhc2UgKyBTU0RSOwotCWlmIChzc3AtPnR5cGUgPT0gUFhBMjV4X1NTUCkgeworCWlmIChweGEyNXhfc3NwX2NvbXAoZHJ2X2RhdGEpKSB7CiAJCWRydl9kYXRhLT5pbnRfY3IxID0gU1NDUjFfVElFIHwgU1NDUjFfUklFOwogCQlkcnZfZGF0YS0+ZG1hX2NyMSA9IDA7CiAJCWRydl9kYXRhLT5jbGVhcl9zciA9IFNTU1JfUk9SOwpAQCAtMTUxMiw3ICsxNTg4LDggQEAKIAkJZHJ2X2RhdGEtPm1hc2tfc3IgPSBTU1NSX1RJTlQgfCBTU1NSX1JGUyB8IFNTU1JfVEZTIHwgU1NTUl9ST1I7CiAJfQogCi0Jc3RhdHVzID0gcmVxdWVzdF9pcnEoc3NwLT5pcnEsIHNzcF9pbnQsIDAsIGRldl9uYW1lKGRldiksIGRydl9kYXRhKTsKKwlzdGF0dXMgPSByZXF1ZXN0X2lycShzc3AtPmlycSwgc3NwX2ludCwgSVJRRl9TSEFSRUQsIGRldl9uYW1lKGRldiksCisJCQlkcnZfZGF0YSk7CiAJaWYgKHN0YXR1cyA8IDApIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IGdldCBJUlEgJWRcbiIsIHNzcC0+aXJxKTsKIAkJZ290byBvdXRfZXJyb3JfbWFzdGVyX2FsbG9jOwpAQCAtMTU2MSw3ICsxNjM4LDcgQEAKIAkJCXwgU1NDUjBfTW90b3JvbGEKIAkJCXwgU1NDUjBfRGF0YVNpemUoOCksCiAJCQlkcnZfZGF0YS0+aW9hZGRyKTsKLQlpZiAoZHJ2X2RhdGEtPnNzcF90eXBlICE9IFBYQTI1eF9TU1ApCisJaWYgKCFweGEyNXhfc3NwX2NvbXAoZHJ2X2RhdGEpKQogCQl3cml0ZV9TU1RPKDAsIGRydl9kYXRhLT5pb2FkZHIpOwogCXdyaXRlX1NTUFNQKDAsIGRydl9kYXRhLT5pb2FkZHIpOwogCkBAIC0xNzIzLDEzICsxODAwLDE0IEBACiAJCS5wbQk9ICZweGEyeHhfc3BpX3BtX29wcywKICNlbmRpZgogCX0sCisJLnByb2JlID0gcHhhMnh4X3NwaV9wcm9iZSwKIAkucmVtb3ZlID0gcHhhMnh4X3NwaV9yZW1vdmUsCiAJLnNodXRkb3duID0gcHhhMnh4X3NwaV9zaHV0ZG93biwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHB4YTJ4eF9zcGlfaW5pdCh2b2lkKQogewotCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJmRyaXZlciwgcHhhMnh4X3NwaV9wcm9iZSk7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyKTsKIH0KIHN1YnN5c19pbml0Y2FsbChweGEyeHhfc3BpX2luaXQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9weGEyeHhfc3BpX3BjaS5jIGIvZHJpdmVycy9zcGkvcHhhMnh4X3NwaV9wY2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTFkOGEzNzUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3NwaS9weGEyeHhfc3BpX3BjaS5jCkBAIC0wLDAgKzEsMjAxIEBACisvKgorICogQ0U0MTAwJ3MgU1BJIGRldmljZSBpcyBtb3JlIG9yIGxlc3MgdGhlIHNhbWUgb25lIGFzIGZvdW5kIG9uIFBYQQorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9weGEyeHhfc3BpLmg+CisKK3N0cnVjdCBhd2Vzb21lX3N0cnVjdCB7CisJc3RydWN0IHNzcF9kZXZpY2Ugc3NwOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc3BpX3BkZXY7CisJc3RydWN0IHB4YTJ4eF9zcGlfbWFzdGVyIHNwaV9wZGF0YTsKK307CisKK3N0YXRpYyBERUZJTkVfTVVURVgoc3NwX2xvY2spOworc3RhdGljIExJU1RfSEVBRChzc3BfbGlzdCk7CisKK3N0cnVjdCBzc3BfZGV2aWNlICpweGFfc3NwX3JlcXVlc3QoaW50IHBvcnQsIGNvbnN0IGNoYXIgKmxhYmVsKQoreworCXN0cnVjdCBzc3BfZGV2aWNlICpzc3AgPSBOVUxMOworCisJbXV0ZXhfbG9jaygmc3NwX2xvY2spOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShzc3AsICZzc3BfbGlzdCwgbm9kZSkgeworCQlpZiAoc3NwLT5wb3J0X2lkID09IHBvcnQgJiYgc3NwLT51c2VfY291bnQgPT0gMCkgeworCQkJc3NwLT51c2VfY291bnQrKzsKKwkJCXNzcC0+bGFiZWwgPSBsYWJlbDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJbXV0ZXhfdW5sb2NrKCZzc3BfbG9jayk7CisKKwlpZiAoJnNzcC0+bm9kZSA9PSAmc3NwX2xpc3QpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIHNzcDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHB4YV9zc3BfcmVxdWVzdCk7CisKK3ZvaWQgcHhhX3NzcF9mcmVlKHN0cnVjdCBzc3BfZGV2aWNlICpzc3ApCit7CisJbXV0ZXhfbG9jaygmc3NwX2xvY2spOworCWlmIChzc3AtPnVzZV9jb3VudCkgeworCQlzc3AtPnVzZV9jb3VudC0tOworCQlzc3AtPmxhYmVsID0gTlVMTDsKKwl9IGVsc2UKKwkJZGV2X2Vycigmc3NwLT5wZGV2LT5kZXYsICJkZXZpY2UgYWxyZWFkeSBmcmVlXG4iKTsKKwltdXRleF91bmxvY2soJnNzcF9sb2NrKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHB4YV9zc3BfZnJlZSk7CisKK3N0YXRpYyB2b2lkIHBsYXRfZGV2X3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBhd2Vzb21lX3N0cnVjdCAqYXMgPSBjb250YWluZXJfb2YoZGV2LAorCQkJc3RydWN0IGF3ZXNvbWVfc3RydWN0LCBzcGlfcGRldi5kZXYpOworCisJb2ZfZGV2aWNlX25vZGVfcHV0KCZhcy0+c3BpX3BkZXYuZGV2KTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgY2U0MTAwX3NwaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQoreworCWludCByZXQ7CisJcmVzb3VyY2Vfc2l6ZV90IHBoeXNfYmVnOworCXJlc291cmNlX3NpemVfdCBwaHlzX2xlbjsKKwlzdHJ1Y3QgYXdlc29tZV9zdHJ1Y3QgKnNwaV9pbmZvOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJc3RydWN0IHB4YTJ4eF9zcGlfbWFzdGVyICpzcGlfcGRhdGE7CisJc3RydWN0IHNzcF9kZXZpY2UgKnNzcDsKKworCXJldCA9IHBjaV9lbmFibGVfZGV2aWNlKGRldik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXBoeXNfYmVnID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgMCk7CisJcGh5c19sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKGRldiwgMCk7CisKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihwaHlzX2JlZywgcGh5c19sZW4sCisJCQkJIkNFNDEwMCBTUEkiKSkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgIkNhbid0IHJlcXVlc3QgcmVnaXN0ZXIgc3BhY2UuXG4iKTsKKwkJcmV0ID0gLUVCVVNZOworCQlyZXR1cm4gcmV0OworCX0KKworCXNwaV9pbmZvID0ga3phbGxvYyhzaXplb2YoKnNwaV9pbmZvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzcGlfaW5mbykgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycl9rejsKKwl9CisJc3NwID0gJnNwaV9pbmZvLT5zc3A7CisJcGRldiA9ICZzcGlfaW5mby0+c3BpX3BkZXY7CisJc3BpX3BkYXRhID0gICZzcGlfaW5mby0+c3BpX3BkYXRhOworCisJcGRldi0+bmFtZSA9ICJweGEyeHgtc3BpIjsKKwlwZGV2LT5pZCA9IGRldi0+ZGV2Zm47CisJcGRldi0+ZGV2LnBhcmVudCA9ICZkZXYtPmRldjsKKwlwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSA9ICZzcGlfaW5mby0+c3BpX3BkYXRhOworCisjaWZkZWYgQ09ORklHX09GCisJcGRldi0+ZGV2Lm9mX25vZGUgPSBkZXYtPmRldi5vZl9ub2RlOworI2VuZGlmCisJcGRldi0+ZGV2LnJlbGVhc2UgPSBwbGF0X2Rldl9yZWxlYXNlOworCisJc3BpX3BkYXRhLT5udW1fY2hpcHNlbGVjdCA9IGRldi0+ZGV2Zm47CisKKwlzc3AtPnBoeXNfYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIDApOworCXNzcC0+bW1pb19iYXNlID0gaW9yZW1hcChwaHlzX2JlZywgcGh5c19sZW4pOworCWlmICghc3NwLT5tbWlvX2Jhc2UpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGlvcmVtYXAoKSByZWdpc3RlcnNcbiIpOworCQlyZXQgPSAtRUlPOworCQlnb3RvIGVycl9yZW1hcDsKKwl9CisJc3NwLT5pcnEgPSBkZXYtPmlycTsKKwlzc3AtPnBvcnRfaWQgPSBwZGV2LT5pZDsKKwlzc3AtPnR5cGUgPSBQWEEyNXhfU1NQOworCisJbXV0ZXhfbG9jaygmc3NwX2xvY2spOworCWxpc3RfYWRkKCZzc3AtPm5vZGUsICZzc3BfbGlzdCk7CisJbXV0ZXhfdW5sb2NrKCZzc3BfbG9jayk7CisKKwlwY2lfc2V0X2RydmRhdGEoZGV2LCBzcGlfaW5mbyk7CisKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIocGRldik7CisJaWYgKHJldCkKKwkJZ290byBlcnJfZGV2X2FkZDsKKworCXJldHVybiByZXQ7CisKK2Vycl9kZXZfYWRkOgorCXBjaV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCW11dGV4X2xvY2soJnNzcF9sb2NrKTsKKwlsaXN0X2RlbCgmc3NwLT5ub2RlKTsKKwltdXRleF91bmxvY2soJnNzcF9sb2NrKTsKKwlpb3VubWFwKHNzcC0+bW1pb19iYXNlKTsKKworZXJyX3JlbWFwOgorCWtmcmVlKHNwaV9pbmZvKTsKKworZXJyX2t6OgorCXJlbGVhc2VfbWVtX3JlZ2lvbihwaHlzX2JlZywgcGh5c19sZW4pOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IGNlNDEwMF9zcGlfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJc3RydWN0IGF3ZXNvbWVfc3RydWN0ICpzcGlfaW5mbzsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCXN0cnVjdCBzc3BfZGV2aWNlICpzc3A7CisKKwlzcGlfaW5mbyA9IHBjaV9nZXRfZHJ2ZGF0YShkZXYpOworCisJc3NwID0gJnNwaV9pbmZvLT5zc3A7CisJcGRldiA9ICZzcGlfaW5mby0+c3BpX3BkZXY7CisKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwZGV2KTsKKworCWlvdW5tYXAoc3NwLT5tbWlvX2Jhc2UpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCAwKSwKKwkJCXBjaV9yZXNvdXJjZV9sZW4oZGV2LCAwKSk7CisKKwltdXRleF9sb2NrKCZzc3BfbG9jayk7CisJbGlzdF9kZWwoJnNzcC0+bm9kZSk7CisJbXV0ZXhfdW5sb2NrKCZzc3BfbG9jayk7CisKKwlwY2lfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2KTsKKwlrZnJlZShzcGlfaW5mbyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBjZTQxMDBfc3BpX2RldmljZXNbXSBfX2RldmluaXRkYXRhID0geworCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MmU2YSkgfSwKKwl7IH0sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGNlNDEwMF9zcGlfZGV2aWNlcyk7CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBjZTQxMDBfc3BpX2RyaXZlciA9IHsKKwkubmFtZSAgICAgICAgICAgPSAiY2U0MTAwX3NwaSIsCisJLmlkX3RhYmxlICAgICAgID0gY2U0MTAwX3NwaV9kZXZpY2VzLAorCS5wcm9iZSAgICAgICAgICA9IGNlNDEwMF9zcGlfcHJvYmUsCisJLnJlbW92ZSAgICAgICAgID0gX19kZXZleGl0X3AoY2U0MTAwX3NwaV9yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgY2U0MTAwX3NwaV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmNlNDEwMF9zcGlfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KGNlNDEwMF9zcGlfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBjZTQxMDBfc3BpX2V4aXQodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmNlNDEwMF9zcGlfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KGNlNDEwMF9zcGlfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiQ0U0MTAwIFBDSS1TUEkgZ2x1ZSBjb2RlIGZvciBQWEEncyBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKK01PRFVMRV9BVVRIT1IoIlNlYmFzdGlhbiBBbmRyemVqIFNpZXdpb3IgPGJpZ2Vhc3lAbGludXRyb25peC5kZT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaS5jIGIvZHJpdmVycy9zcGkvc3BpLmMKaW5kZXggYjAyZDBjYi4uMzRiYjE3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpLmMKKysrIGIvZHJpdmVycy9zcGkvc3BpLmMKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2RfZGV2aWNldGFibGUuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvb2Zfc3BpLmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgogCiBzdGF0aWMgdm9pZCBzcGlkZXZfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CkBAIC0xMDAsOSArMTAxLDggQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmZGVmCUNPTkZJR19QTQotCi1zdGF0aWMgaW50IHNwaV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCisjaWZkZWYgQ09ORklHX1BNX1NMRUVQCitzdGF0aWMgaW50IHNwaV9sZWdhY3lfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKQogewogCWludAkJCXZhbHVlID0gMDsKIAlzdHJ1Y3Qgc3BpX2RyaXZlcgkqZHJ2ID0gdG9fc3BpX2RyaXZlcihkZXYtPmRyaXZlcik7CkBAIC0xMTcsNyArMTE3LDcgQEAKIAlyZXR1cm4gdmFsdWU7CiB9CiAKLXN0YXRpYyBpbnQgc3BpX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHNwaV9sZWdhY3lfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlpbnQJCQl2YWx1ZSA9IDA7CiAJc3RydWN0IHNwaV9kcml2ZXIJKmRydiA9IHRvX3NwaV9kcml2ZXIoZGV2LT5kcml2ZXIpOwpAQCAtMTMyLDE4ICsxMzIsOTQgQEAKIAlyZXR1cm4gdmFsdWU7CiB9CiAKK3N0YXRpYyBpbnQgc3BpX3BtX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCWNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzICpwbSA9IGRldi0+ZHJpdmVyID8gZGV2LT5kcml2ZXItPnBtIDogTlVMTDsKKworCWlmIChwbSkKKwkJcmV0dXJuIHBtX2dlbmVyaWNfc3VzcGVuZChkZXYpOworCWVsc2UKKwkJcmV0dXJuIHNwaV9sZWdhY3lfc3VzcGVuZChkZXYsIFBNU0dfU1VTUEVORCk7Cit9CisKK3N0YXRpYyBpbnQgc3BpX3BtX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgKnBtID0gZGV2LT5kcml2ZXIgPyBkZXYtPmRyaXZlci0+cG0gOiBOVUxMOworCisJaWYgKHBtKQorCQlyZXR1cm4gcG1fZ2VuZXJpY19yZXN1bWUoZGV2KTsKKwllbHNlCisJCXJldHVybiBzcGlfbGVnYWN5X3Jlc3VtZShkZXYpOworfQorCitzdGF0aWMgaW50IHNwaV9wbV9mcmVlemUoc3RydWN0IGRldmljZSAqZGV2KQoreworCWNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzICpwbSA9IGRldi0+ZHJpdmVyID8gZGV2LT5kcml2ZXItPnBtIDogTlVMTDsKKworCWlmIChwbSkKKwkJcmV0dXJuIHBtX2dlbmVyaWNfZnJlZXplKGRldik7CisJZWxzZQorCQlyZXR1cm4gc3BpX2xlZ2FjeV9zdXNwZW5kKGRldiwgUE1TR19GUkVFWkUpOworfQorCitzdGF0aWMgaW50IHNwaV9wbV90aGF3KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwljb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyAqcG0gPSBkZXYtPmRyaXZlciA/IGRldi0+ZHJpdmVyLT5wbSA6IE5VTEw7CisKKwlpZiAocG0pCisJCXJldHVybiBwbV9nZW5lcmljX3RoYXcoZGV2KTsKKwllbHNlCisJCXJldHVybiBzcGlfbGVnYWN5X3Jlc3VtZShkZXYpOworfQorCitzdGF0aWMgaW50IHNwaV9wbV9wb3dlcm9mZihzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgKnBtID0gZGV2LT5kcml2ZXIgPyBkZXYtPmRyaXZlci0+cG0gOiBOVUxMOworCisJaWYgKHBtKQorCQlyZXR1cm4gcG1fZ2VuZXJpY19wb3dlcm9mZihkZXYpOworCWVsc2UKKwkJcmV0dXJuIHNwaV9sZWdhY3lfc3VzcGVuZChkZXYsIFBNU0dfSElCRVJOQVRFKTsKK30KKworc3RhdGljIGludCBzcGlfcG1fcmVzdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgKnBtID0gZGV2LT5kcml2ZXIgPyBkZXYtPmRyaXZlci0+cG0gOiBOVUxMOworCisJaWYgKHBtKQorCQlyZXR1cm4gcG1fZ2VuZXJpY19yZXN0b3JlKGRldik7CisJZWxzZQorCQlyZXR1cm4gc3BpX2xlZ2FjeV9yZXN1bWUoZGV2KTsKK30KICNlbHNlCi0jZGVmaW5lIHNwaV9zdXNwZW5kCU5VTEwKLSNkZWZpbmUgc3BpX3Jlc3VtZQlOVUxMCisjZGVmaW5lIHNwaV9wbV9zdXNwZW5kCU5VTEwKKyNkZWZpbmUgc3BpX3BtX3Jlc3VtZQlOVUxMCisjZGVmaW5lIHNwaV9wbV9mcmVlemUJTlVMTAorI2RlZmluZSBzcGlfcG1fdGhhdwlOVUxMCisjZGVmaW5lIHNwaV9wbV9wb3dlcm9mZglOVUxMCisjZGVmaW5lIHNwaV9wbV9yZXN0b3JlCU5VTEwKICNlbmRpZgogCitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgc3BpX3BtID0geworCS5zdXNwZW5kID0gc3BpX3BtX3N1c3BlbmQsCisJLnJlc3VtZSA9IHNwaV9wbV9yZXN1bWUsCisJLmZyZWV6ZSA9IHNwaV9wbV9mcmVlemUsCisJLnRoYXcgPSBzcGlfcG1fdGhhdywKKwkucG93ZXJvZmYgPSBzcGlfcG1fcG93ZXJvZmYsCisJLnJlc3RvcmUgPSBzcGlfcG1fcmVzdG9yZSwKKwlTRVRfUlVOVElNRV9QTV9PUFMoCisJCXBtX2dlbmVyaWNfcnVudGltZV9zdXNwZW5kLAorCQlwbV9nZW5lcmljX3J1bnRpbWVfcmVzdW1lLAorCQlwbV9nZW5lcmljX3J1bnRpbWVfaWRsZQorCSkKK307CisKIHN0cnVjdCBidXNfdHlwZSBzcGlfYnVzX3R5cGUgPSB7CiAJLm5hbWUJCT0gInNwaSIsCiAJLmRldl9hdHRycwk9IHNwaV9kZXZfYXR0cnMsCiAJLm1hdGNoCQk9IHNwaV9tYXRjaF9kZXZpY2UsCiAJLnVldmVudAkJPSBzcGlfdWV2ZW50LAotCS5zdXNwZW5kCT0gc3BpX3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBzcGlfcmVzdW1lLAorCS5wbQkJPSAmc3BpX3BtLAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKHNwaV9idXNfdHlwZSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaV9pbXguYyBiL2RyaXZlcnMvc3BpL3NwaV9pbXguYwppbmRleCA1NWEzOGUyLi45NDY5NTY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGlfaW14LmMKKysrIGIvZHJpdmVycy9zcGkvc3BpX2lteC5jCkBAIC02Niw3ICs2Niw2IEBACiAJU1BJX0lNWF9WRVJfMF81LAogCVNQSV9JTVhfVkVSXzBfNywKIAlTUElfSU1YX1ZFUl8yXzMsCi0JU1BJX0lNWF9WRVJfQVVUT0RFVEVDVCwKIH07CiAKIHN0cnVjdCBzcGlfaW14X2RhdGE7CkBAIC03MjAsOSArNzE5LDYgQEAKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaWQgc3BpX2lteF9kZXZ0eXBlW10gPSB7CiAJewotCQkubmFtZSA9IERSSVZFUl9OQU1FLAotCQkuZHJpdmVyX2RhdGEgPSBTUElfSU1YX1ZFUl9BVVRPREVURUNULAotCX0sIHsKIAkJLm5hbWUgPSAiaW14MS1jc3BpIiwKIAkJLmRyaXZlcl9kYXRhID0gU1BJX0lNWF9WRVJfSU1YMSwKIAl9LCB7CkBAIC04MDIsMzAgKzc5OCw4IEBACiAKIAlpbml0X2NvbXBsZXRpb24oJnNwaV9pbXgtPnhmZXJfZG9uZSk7CiAKLQlpZiAocGRldi0+aWRfZW50cnktPmRyaXZlcl9kYXRhID09IFNQSV9JTVhfVkVSX0FVVE9ERVRFQ1QpIHsKLQkJaWYgKGNwdV9pc19teDI1KCkgfHwgY3B1X2lzX214MzUoKSkKLQkJCXNwaV9pbXgtPmRldnR5cGVfZGF0YSA9Ci0JCQkJc3BpX2lteF9kZXZ0eXBlX2RhdGFbU1BJX0lNWF9WRVJfMF83XTsKLQkJZWxzZSBpZiAoY3B1X2lzX214MjUoKSB8fCBjcHVfaXNfbXgzMSgpIHx8IGNwdV9pc19teDM1KCkpCi0JCQlzcGlfaW14LT5kZXZ0eXBlX2RhdGEgPQotCQkJCXNwaV9pbXhfZGV2dHlwZV9kYXRhW1NQSV9JTVhfVkVSXzBfNF07Ci0JCWVsc2UgaWYgKGNwdV9pc19teDI3KCkgfHwgY3B1X2lzX214MjEoKSkKLQkJCXNwaV9pbXgtPmRldnR5cGVfZGF0YSA9Ci0JCQkJc3BpX2lteF9kZXZ0eXBlX2RhdGFbU1BJX0lNWF9WRVJfMF8wXTsKLQkJZWxzZSBpZiAoY3B1X2lzX214MSgpKQotCQkJc3BpX2lteC0+ZGV2dHlwZV9kYXRhID0KLQkJCQlzcGlfaW14X2RldnR5cGVfZGF0YVtTUElfSU1YX1ZFUl9JTVgxXTsKLQkJZWxzZQotCQkJQlVHKCk7Ci0JfSBlbHNlCi0JCXNwaV9pbXgtPmRldnR5cGVfZGF0YSA9Ci0JCQlzcGlfaW14X2RldnR5cGVfZGF0YVtwZGV2LT5pZF9lbnRyeS0+ZHJpdmVyX2RhdGFdOwotCi0JaWYgKCFzcGlfaW14LT5kZXZ0eXBlX2RhdGEuaW50Y3RybCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBzdXBwb3J0IGZvciB0aGlzIGRldmljZSBjb21waWxlZCBpblxuIik7Ci0JCXJldCA9IC1FTk9ERVY7Ci0JCWdvdG8gb3V0X2dwaW9fZnJlZTsKLQl9CisJc3BpX2lteC0+ZGV2dHlwZV9kYXRhID0KKwkJc3BpX2lteF9kZXZ0eXBlX2RhdGFbcGRldi0+aWRfZW50cnktPmRyaXZlcl9kYXRhXTsKIAogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJaWYgKCFyZXMpIHsKQEAgLTg0Nyw3ICs4MjEsNyBAQAogCX0KIAogCXNwaV9pbXgtPmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7Ci0JaWYgKHNwaV9pbXgtPmlycSA8PSAwKSB7CisJaWYgKHNwaV9pbXgtPmlycSA8IDApIHsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBvdXRfaW91bm1hcDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGlfbnVjOTAwLmMgYi9kcml2ZXJzL3NwaS9zcGlfbnVjOTAwLmMKaW5kZXggZGZmNjNiZS4uZDViZTE4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpX251YzkwMC5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaV9udWM5MDAuYwpAQCAtNDQ5LDcgKzQ0OSw3IEBACiAJcmVsZWFzZV9tZW1fcmVnaW9uKGh3LT5yZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKGh3LT5yZXMpKTsKIAlrZnJlZShody0+aW9hcmVhKTsKIGVycl9wZGF0YToKLQlzcGlfbWFzdGVyX3B1dChody0+bWFzdGVyKTs7CisJc3BpX21hc3Rlcl9wdXQoaHctPm1hc3Rlcik7CiAKIGVycl9ub21lbToKIAlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpX3RvcGNsaWZmX3BjaC5jIGIvZHJpdmVycy9zcGkvc3BpX3RvcGNsaWZmX3BjaC5jCmluZGV4IDU4ZTE4N2YuLjc5ZTQ4ZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaV90b3BjbGlmZl9wY2guYworKysgYi9kcml2ZXJzL3NwaS9zcGlfdG9wY2xpZmZfcGNoLmMKQEAgLTI2Nyw3ICsyNjcsNyBAQAogCWlmIChyZWdfc3Bzcl92YWwgJiBTUFNSX0ZJX0JJVCkgewogCQkvKiBkaXNhYmxlIEZJICYgUkZJIGludGVycnVwdHMgKi8KIAkJcGNoX3NwaV9zZXRjbHJfcmVnKGRhdGEtPm1hc3RlciwgUENIX1NQQ1IsIDAsCi0JCQkJICAgU1BDUl9GSUVfQklUIHwgU1BDUl9URklFX0JJVCk7CisJCQkJICAgU1BDUl9GSUVfQklUIHwgU1BDUl9SRklFX0JJVCk7CiAKIAkJLyogdHJhbnNmZXIgaXMgY29tcGxldGVkO2luZm9ybSBwY2hfc3BpX3Byb2Nlc3NfbWVzc2FnZXMgKi8KIAkJZGF0YS0+dHJhbnNmZXJfY29tcGxldGUgPSB0cnVlOwpAQCAtNjc3LDE1ICs2NzcsMTUgQEAKIHsKIAkvKiBlbmFibGUgaW50ZXJydXB0cyAqLwogCWlmICgoZGF0YS0+YnB3X2xlbikgPiBQQ0hfTUFYX0ZJRk9fREVQVEgpIHsKLQkJLyogc2V0IHJlY2VpdmUgdGhyZWhvbGQgdG8gUENIX1JYX1RIT0xEICovCisJCS8qIHNldCByZWNlaXZlIHRocmVzaG9sZCB0byBQQ0hfUlhfVEhPTEQgKi8KIAkJcGNoX3NwaV9zZXRjbHJfcmVnKGRhdGEtPm1hc3RlciwgUENIX1NQQ1IsCi0JCQkJICAgUENIX1JYX1RIT0xEIDw8IFNQQ1JfVEZJQ19GSUVMRCwKLQkJCQkgICB+TUFTS19URklDX1NQQ1JfQklUUyk7CisJCQkJICAgUENIX1JYX1RIT0xEIDw8IFNQQ1JfUkZJQ19GSUVMRCwKKwkJCQkgICB+TUFTS19SRklDX1NQQ1JfQklUUyk7CiAJCS8qIGVuYWJsZSBGSSBhbmQgUkZJIGludGVycnVwdHMgKi8KIAkJcGNoX3NwaV9zZXRjbHJfcmVnKGRhdGEtPm1hc3RlciwgUENIX1NQQ1IsCi0JCQkJICAgU1BDUl9SRklFX0JJVCB8IFNQQ1JfVEZJRV9CSVQsIDApOworCQkJCSAgIFNQQ1JfUkZJRV9CSVQgfCBTUENSX0ZJRV9CSVQsIDApOwogCX0gZWxzZSB7Ci0JCS8qIHNldCByZWNlaXZlIHRocmVob2xkIHRvIG1heGltdW0gKi8KKwkJLyogc2V0IHJlY2VpdmUgdGhyZXNob2xkIHRvIG1heGltdW0gKi8KIAkJcGNoX3NwaV9zZXRjbHJfcmVnKGRhdGEtPm1hc3RlciwgUENIX1NQQ1IsCiAJCQkJICAgUENIX1JYX1RIT0xEX01BWCA8PCBTUENSX1RGSUNfRklFTEQsCiAJCQkJICAgfk1BU0tfVEZJQ19TUENSX0JJVFMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkveGlsaW54X3NwaS5jIGIvZHJpdmVycy9zcGkveGlsaW54X3NwaS5jCmluZGV4IDgwZjJkYjUuLjdhZGFlZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3hpbGlueF9zcGkuYworKysgYi9kcml2ZXJzL3NwaS94aWxpbnhfc3BpLmMKQEAgLTEsMjYgKzEsMjcgQEAKIC8qCi0gKiB4aWxpbnhfc3BpLmMKLSAqCiAgKiBYaWxpbnggU1BJIGNvbnRyb2xsZXIgZHJpdmVyIChtYXN0ZXIgbW9kZSBvbmx5KQogICoKICAqIEF1dGhvcjogTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgogICoJc291cmNlQG12aXN0YS5jb20KICAqCi0gKiAyMDAyLTIwMDcgKGMpIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUKLSAqIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQKLSAqICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogQ29weXJpZ2h0IChjKSAyMDEwIFNlY3JldCBMYWIgVGVjaG5vbG9naWVzLCBMdGQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24KKyAqIDIwMDItMjAwNyAoYykgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpX2JpdGJhbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotCi0jaW5jbHVkZSAieGlsaW54X3NwaS5oIgogI2luY2x1ZGUgPGxpbnV4L3NwaS94aWxpbnhfc3BpLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogI2RlZmluZSBYSUxJTlhfU1BJX05BTUUgInhpbGlueF9zcGkiCiAKQEAgLTM1MCwxOSArMzUxLDIyIEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCisjaWZkZWYgQ09ORklHX09GCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB4aWxpbnhfc3BpX29mX21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJ4bG54LHhwcy1zcGktMi4wMC5hIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gInhsbngseHBzLXNwaS0yLjAwLmIiLCB9LAorCXt9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgeGlsaW54X3NwaV9vZl9tYXRjaCk7CisjZW5kaWYKKwogc3RydWN0IHNwaV9tYXN0ZXIgKnhpbGlueF9zcGlfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCByZXNvdXJjZSAqbWVtLAotCXUzMiBpcnEsIHMxNiBidXNfbnVtKQorCXUzMiBpcnEsIHMxNiBidXNfbnVtLCBpbnQgbnVtX2NzLCBpbnQgbGl0dGxlX2VuZGlhbiwgaW50IGJpdHNfcGVyX3dvcmQpCiB7CiAJc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3RlcjsKIAlzdHJ1Y3QgeGlsaW54X3NwaSAqeHNwaTsKLQlzdHJ1Y3QgeHNwaV9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGRldi0+cGxhdGZvcm1fZGF0YTsKIAlpbnQgcmV0OwogCi0JaWYgKCFwZGF0YSkgewotCQlkZXZfZXJyKGRldiwgIk5vIHBsYXRmb3JtIGRhdGEgYXR0YWNoZWRcbiIpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KIAltYXN0ZXIgPSBzcGlfYWxsb2NfbWFzdGVyKGRldiwgc2l6ZW9mKHN0cnVjdCB4aWxpbnhfc3BpKSk7CiAJaWYgKCFtYXN0ZXIpCiAJCXJldHVybiBOVUxMOwpAQCAtMzg5LDIxICszOTMsMjEgQEAKIAl9CiAKIAltYXN0ZXItPmJ1c19udW0gPSBidXNfbnVtOwotCW1hc3Rlci0+bnVtX2NoaXBzZWxlY3QgPSBwZGF0YS0+bnVtX2NoaXBzZWxlY3Q7CisJbWFzdGVyLT5udW1fY2hpcHNlbGVjdCA9IG51bV9jczsKICNpZmRlZiBDT05GSUdfT0YKIAltYXN0ZXItPmRldi5vZl9ub2RlID0gZGV2LT5vZl9ub2RlOwogI2VuZGlmCiAKIAl4c3BpLT5tZW0gPSAqbWVtOwogCXhzcGktPmlycSA9IGlycTsKLQlpZiAocGRhdGEtPmxpdHRsZV9lbmRpYW4pIHsKKwlpZiAobGl0dGxlX2VuZGlhbikgewogCQl4c3BpLT5yZWFkX2ZuID0geHNwaV9yZWFkMzI7CiAJCXhzcGktPndyaXRlX2ZuID0geHNwaV93cml0ZTMyOwogCX0gZWxzZSB7CiAJCXhzcGktPnJlYWRfZm4gPSB4c3BpX3JlYWQzMl9iZTsKIAkJeHNwaS0+d3JpdGVfZm4gPSB4c3BpX3dyaXRlMzJfYmU7CiAJfQotCXhzcGktPmJpdHNfcGVyX3dvcmQgPSBwZGF0YS0+Yml0c19wZXJfd29yZDsKKwl4c3BpLT5iaXRzX3Blcl93b3JkID0gYml0c19wZXJfd29yZDsKIAlpZiAoeHNwaS0+Yml0c19wZXJfd29yZCA9PSA4KSB7CiAJCXhzcGktPnR4X2ZuID0geHNwaV90eDg7CiAJCXhzcGktPnJ4X2ZuID0geHNwaV9yeDg7CkBAIC00NjIsNiArNDY2LDk3IEBACiB9CiBFWFBPUlRfU1lNQk9MKHhpbGlueF9zcGlfZGVpbml0KTsKIAorc3RhdGljIGludCBfX2RldmluaXQgeGlsaW54X3NwaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHhzcGlfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisJc3RydWN0IHJlc291cmNlICpyOworCWludCBpcnEsIG51bV9jcyA9IDAsIGxpdHRsZV9lbmRpYW4gPSAwLCBiaXRzX3Blcl93b3JkID0gODsKKwlzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyOworCXU4IGk7CisKKwlwZGF0YSA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJaWYgKHBkYXRhKSB7CisJCW51bV9jcyA9IHBkYXRhLT5udW1fY2hpcHNlbGVjdDsKKwkJbGl0dGxlX2VuZGlhbiA9IHBkYXRhLT5saXR0bGVfZW5kaWFuOworCQliaXRzX3Blcl93b3JkID0gcGRhdGEtPmJpdHNfcGVyX3dvcmQ7CisJfQorCisjaWZkZWYgQ09ORklHX09GCisJaWYgKGRldi0+ZGV2Lm9mX25vZGUpIHsKKwkJY29uc3QgX19iZTMyICpwcm9wOworCQlpbnQgbGVuOworCisJCS8qIG51bWJlciBvZiBzbGF2ZSBzZWxlY3QgYml0cyBpcyByZXF1aXJlZCAqLworCQlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KGRldi0+ZGV2Lm9mX25vZGUsICJ4bG54LG51bS1zcy1iaXRzIiwKKwkJCQkgICAgICAgJmxlbik7CisJCWlmIChwcm9wICYmIGxlbiA+PSBzaXplb2YoKnByb3ApKQorCQkJbnVtX2NzID0gX19iZTMyX3RvX2NwdXAocHJvcCk7CisJfQorI2VuZGlmCisKKwlpZiAoIW51bV9jcykgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgIk1pc3Npbmcgc2xhdmUgc2VsZWN0IGNvbmZpZ3VyYXRpb24gZGF0YVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCisJciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXIpCisJCXJldHVybiAtRU5PREVWOworCisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShkZXYsIDApOworCWlmIChpcnEgPCAwKQorCQlyZXR1cm4gLUVOWElPOworCisJbWFzdGVyID0geGlsaW54X3NwaV9pbml0KCZkZXYtPmRldiwgciwgaXJxLCBkZXYtPmlkLCBudW1fY3MsCisJCQkJIGxpdHRsZV9lbmRpYW4sIGJpdHNfcGVyX3dvcmQpOworCWlmICghbWFzdGVyKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmIChwZGF0YSkgeworCQlmb3IgKGkgPSAwOyBpIDwgcGRhdGEtPm51bV9kZXZpY2VzOyBpKyspCisJCQlzcGlfbmV3X2RldmljZShtYXN0ZXIsIHBkYXRhLT5kZXZpY2VzICsgaSk7CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBtYXN0ZXIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCB4aWxpbnhfc3BpX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJeGlsaW54X3NwaV9kZWluaXQocGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KSk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCAwKTsKKworCXJldHVybiAwOworfQorCisvKiB3b3JrIHdpdGggaG90cGx1ZyBhbmQgY29sZHBsdWcgKi8KK01PRFVMRV9BTElBUygicGxhdGZvcm06IiBYSUxJTlhfU1BJX05BTUUpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB4aWxpbnhfc3BpX2RyaXZlciA9IHsKKwkucHJvYmUgPSB4aWxpbnhfc3BpX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcCh4aWxpbnhfc3BpX3JlbW92ZSksCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSBYSUxJTlhfU1BJX05BTUUsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorI2lmZGVmIENPTkZJR19PRgorCQkub2ZfbWF0Y2hfdGFibGUgPSB4aWxpbnhfc3BpX29mX21hdGNoLAorI2VuZGlmCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHhpbGlueF9zcGlfcGx0Zm1faW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnhpbGlueF9zcGlfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KHhpbGlueF9zcGlfcGx0Zm1faW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB4aWxpbnhfc3BpX3BsdGZtX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmeGlsaW54X3NwaV9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQoeGlsaW54X3NwaV9wbHRmbV9leGl0KTsKKwogTU9EVUxFX0FVVEhPUigiTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLiA8c291cmNlQG12aXN0YS5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlhpbGlueCBTUEkgZHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS94aWxpbnhfc3BpLmggYi9kcml2ZXJzL3NwaS94aWxpbnhfc3BpLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyMTFhY2MuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zcGkveGlsaW54X3NwaS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoKLSAqIFhpbGlueCBTUEkgZGV2aWNlIGRyaXZlciBBUEkgYW5kIHBsYXRmb3JtIGRhdGEgaGVhZGVyIGZpbGUKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9YSUxJTlhfU1BJX0hfCi0jZGVmaW5lIF9YSUxJTlhfU1BJX0hfCi0KLSNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpL3NwaV9iaXRiYW5nLmg+Ci0KLSNkZWZpbmUgWElMSU5YX1NQSV9OQU1FICJ4aWxpbnhfc3BpIgotCi1zdHJ1Y3Qgc3BpX21hc3RlciAqeGlsaW54X3NwaV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJlc291cmNlICptZW0sCi0JdTMyIGlycSwgczE2IGJ1c19udW0pOwotCi12b2lkIHhpbGlueF9zcGlfZGVpbml0KHN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXIpOwotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS94aWxpbnhfc3BpX29mLmMgYi9kcml2ZXJzL3NwaS94aWxpbnhfc3BpX29mLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2NmMyZGIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zcGkveGlsaW54X3NwaV9vZi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTMzICswLDAgQEAKLS8qCi0gKiBYaWxpbnggU1BJIE9GIGRldmljZSBkcml2ZXIKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotCi0vKiBTdXBwb3J0czoKLSAqIFhpbGlueCBTUEkgZGV2aWNlcyBhcyBPRiBkZXZpY2VzCi0gKgotICogSW5zcGlyZWQgYnkgeGlsaW54X3NwaS5jLCAyMDAyLTIwMDcgKGMpIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotCi0jaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgotI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+Ci0jaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvb2Zfc3BpLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9zcGkveGlsaW54X3NwaS5oPgotI2luY2x1ZGUgInhpbGlueF9zcGkuaCIKLQotCi1zdGF0aWMgaW50IF9fZGV2aW5pdCB4aWxpbnhfc3BpX29mX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mZGV2LAotCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQotewotCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXI7Ci0Jc3RydWN0IHhzcGlfcGxhdGZvcm1fZGF0YSAqcGRhdGE7Ci0Jc3RydWN0IHJlc291cmNlIHJfbWVtOwotCXN0cnVjdCByZXNvdXJjZSByX2lycTsKLQlpbnQgcmMgPSAwOwotCWNvbnN0IHUzMiAqcHJvcDsKLQlpbnQgbGVuOwotCi0JcmMgPSBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG9mZGV2LT5kZXYub2Zfbm9kZSwgMCwgJnJfbWVtKTsKLQlpZiAocmMpIHsKLQkJZGV2X3dhcm4oJm9mZGV2LT5kZXYsICJpbnZhbGlkIGFkZHJlc3NcbiIpOwotCQlyZXR1cm4gcmM7Ci0JfQotCi0JcmMgPSBvZl9pcnFfdG9fcmVzb3VyY2Uob2ZkZXYtPmRldi5vZl9ub2RlLCAwLCAmcl9pcnEpOwotCWlmIChyYyA9PSBOT19JUlEpIHsKLQkJZGV2X3dhcm4oJm9mZGV2LT5kZXYsICJubyBJUlEgZm91bmRcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQlvZmRldi0+ZGV2LnBsYXRmb3JtX2RhdGEgPQotCQlremFsbG9jKHNpemVvZihzdHJ1Y3QgeHNwaV9wbGF0Zm9ybV9kYXRhKSwgR0ZQX0tFUk5FTCk7Ci0JcGRhdGEgPSBvZmRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7Ci0JaWYgKCFwZGF0YSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkvKiBudW1iZXIgb2Ygc2xhdmUgc2VsZWN0IGJpdHMgaXMgcmVxdWlyZWQgKi8KLQlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KG9mZGV2LT5kZXYub2Zfbm9kZSwgInhsbngsbnVtLXNzLWJpdHMiLCAmbGVuKTsKLQlpZiAoIXByb3AgfHwgbGVuIDwgc2l6ZW9mKCpwcm9wKSkgewotCQlkZXZfd2Fybigmb2ZkZXYtPmRldiwgIm5vICd4bG54LG51bS1zcy1iaXRzJyBwcm9wZXJ0eVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlwZGF0YS0+bnVtX2NoaXBzZWxlY3QgPSAqcHJvcDsKLQlwZGF0YS0+Yml0c19wZXJfd29yZCA9IDg7Ci0JbWFzdGVyID0geGlsaW54X3NwaV9pbml0KCZvZmRldi0+ZGV2LCAmcl9tZW0sIHJfaXJxLnN0YXJ0LCAtMSk7Ci0JaWYgKCFtYXN0ZXIpCi0JCXJldHVybiAtRU5PREVWOwotCi0JZGV2X3NldF9kcnZkYXRhKCZvZmRldi0+ZGV2LCBtYXN0ZXIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgX19kZXZleGl0IHhpbGlueF9zcGlfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mZGV2KQotewotCXhpbGlueF9zcGlfZGVpbml0KGRldl9nZXRfZHJ2ZGF0YSgmb2ZkZXYtPmRldikpOwotCWRldl9zZXRfZHJ2ZGF0YSgmb2ZkZXYtPmRldiwgMCk7Ci0Ja2ZyZWUob2ZkZXYtPmRldi5wbGF0Zm9ybV9kYXRhKTsKLQlvZmRldi0+ZGV2LnBsYXRmb3JtX2RhdGEgPSBOVUxMOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IF9fZXhpdCB4aWxpbnhfc3BpX29mX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvcCkKLXsKLQlyZXR1cm4geGlsaW54X3NwaV9yZW1vdmUob3ApOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB4aWxpbnhfc3BpX29mX21hdGNoW10gPSB7Ci0JeyAuY29tcGF0aWJsZSA9ICJ4bG54LHhwcy1zcGktMi4wMC5hIiwgfSwKLQl7IC5jb21wYXRpYmxlID0gInhsbngseHBzLXNwaS0yLjAwLmIiLCB9LAotCXt9Ci19OwotCi1NT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB4aWxpbnhfc3BpX29mX21hdGNoKTsKLQotc3RhdGljIHN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgeGlsaW54X3NwaV9vZl9kcml2ZXIgPSB7Ci0JLnByb2JlID0geGlsaW54X3NwaV9vZl9wcm9iZSwKLQkucmVtb3ZlID0gX19leGl0X3AoeGlsaW54X3NwaV9vZl9yZW1vdmUpLAotCS5kcml2ZXIgPSB7Ci0JCS5uYW1lID0gInhpbGlueC14cHMtc3BpIiwKLQkJLm93bmVyID0gVEhJU19NT0RVTEUsCi0JCS5vZl9tYXRjaF90YWJsZSA9IHhpbGlueF9zcGlfb2ZfbWF0Y2gsCi0JfSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IHhpbGlueF9zcGlfb2ZfaW5pdCh2b2lkKQotewotCXJldHVybiBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJnhpbGlueF9zcGlfb2ZfZHJpdmVyKTsKLX0KLW1vZHVsZV9pbml0KHhpbGlueF9zcGlfb2ZfaW5pdCk7Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCB4aWxpbnhfc3BpX29mX2V4aXQodm9pZCkKLXsKLQlvZl91bnJlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmeGlsaW54X3NwaV9vZl9kcml2ZXIpOwotfQotbW9kdWxlX2V4aXQoeGlsaW54X3NwaV9vZl9leGl0KTsKLQotTU9EVUxFX0FVVEhPUigiTW9jZWFuIExhYm9yYXRvcmllcyA8aW5mb0Btb2NlYW4tbGFicy5jb20+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIlhpbGlueCBTUEkgcGxhdGZvcm0gZHJpdmVyIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS94aWxpbnhfc3BpX3BsdGZtLmMgYi9kcml2ZXJzL3NwaS94aWxpbnhfc3BpX3BsdGZtLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0ZGViYWMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zcGkveGlsaW54X3NwaV9wbHRmbS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLS8qCi0gKiBTdXBwb3J0IGZvciBYaWxpbnggU1BJIHBsYXRmb3JtIGRldmljZXMKLSAqIENvcHlyaWdodCAoYykgMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0KLS8qIFN1cHBvcnRzOgotICogWGlsaW54IFNQSSBkZXZpY2VzIGFzIHBsYXRmb3JtIGRldmljZXMKLSAqCi0gKiBJbnNwaXJlZCBieSB4aWxpbnhfc3BpLmMsIDIwMDItMjAwNyAoYykgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLQotI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGkvc3BpX2JpdGJhbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGkveGlsaW54X3NwaS5oPgotCi0jaW5jbHVkZSAieGlsaW54X3NwaS5oIgotCi1zdGF0aWMgaW50IF9fZGV2aW5pdCB4aWxpbnhfc3BpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgeHNwaV9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnI7Ci0JaW50IGlycTsKLQlzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyOwotCXU4IGk7Ci0KLQlwZGF0YSA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7Ci0JaWYgKCFwZGF0YSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwotCWlmICghcikKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKGRldiwgMCk7Ci0JaWYgKGlycSA8IDApCi0JCXJldHVybiAtRU5YSU87Ci0KLQltYXN0ZXIgPSB4aWxpbnhfc3BpX2luaXQoJmRldi0+ZGV2LCByLCBpcnEsIGRldi0+aWQpOwotCWlmICghbWFzdGVyKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWZvciAoaSA9IDA7IGkgPCBwZGF0YS0+bnVtX2RldmljZXM7IGkrKykKLQkJc3BpX25ld19kZXZpY2UobWFzdGVyLCBwZGF0YS0+ZGV2aWNlcyArIGkpOwotCi0JcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBtYXN0ZXIpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IF9fZGV2ZXhpdCB4aWxpbnhfc3BpX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCi17Ci0JeGlsaW54X3NwaV9kZWluaXQocGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KSk7Ci0JcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCAwKTsKLQotCXJldHVybiAwOwotfQotCi0vKiB3b3JrIHdpdGggaG90cGx1ZyBhbmQgY29sZHBsdWcgKi8KLU1PRFVMRV9BTElBUygicGxhdGZvcm06IiBYSUxJTlhfU1BJX05BTUUpOwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB4aWxpbnhfc3BpX2RyaXZlciA9IHsKLQkucHJvYmUJPSB4aWxpbnhfc3BpX3Byb2JlLAotCS5yZW1vdmUJPSBfX2RldmV4aXRfcCh4aWxpbnhfc3BpX3JlbW92ZSksCi0JLmRyaXZlciA9IHsKLQkJLm5hbWUgPSBYSUxJTlhfU1BJX05BTUUsCi0JCS5vd25lciA9IFRISVNfTU9EVUxFLAotCX0sCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCB4aWxpbnhfc3BpX3BsdGZtX2luaXQodm9pZCkKLXsKLQlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ4aWxpbnhfc3BpX2RyaXZlcik7Ci19Ci1tb2R1bGVfaW5pdCh4aWxpbnhfc3BpX3BsdGZtX2luaXQpOwotCi1zdGF0aWMgdm9pZCBfX2V4aXQgeGlsaW54X3NwaV9wbHRmbV9leGl0KHZvaWQpCi17Ci0JcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnhpbGlueF9zcGlfZHJpdmVyKTsKLX0KLW1vZHVsZV9leGl0KHhpbGlueF9zcGlfcGx0Zm1fZXhpdCk7Ci0KLU1PRFVMRV9BVVRIT1IoIk1vY2VhbiBMYWJvcmF0b3JpZXMgPGluZm9AbW9jZWFuLWxhYnMuY29tPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJYaWxpbnggU1BJIHBsYXRmb3JtIGRyaXZlciIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zc2IvbWFpbi5jIGIvZHJpdmVycy9zc2IvbWFpbi5jCmluZGV4IGM2OGIzZGMuLjM5MThkMmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3NiL21haW4uYworKysgYi9kcml2ZXJzL3NzYi9tYWluLmMKQEAgLTM4Myw2ICszODMsMzUgQEAKIAkJCSAgICAgc3NiX2Rldi0+aWQucmV2aXNpb24pOwogfQogCisjZGVmaW5lIHNzYl9jb25maWdfYXR0cihhdHRyaWIsIGZpZWxkLCBmb3JtYXRfc3RyaW5nKSBcCitzdGF0aWMgc3NpemVfdCBcCithdHRyaWIjI19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikgXAoreyBcCisJcmV0dXJuIHNwcmludGYoYnVmLCBmb3JtYXRfc3RyaW5nLCBkZXZfdG9fc3NiX2RldihkZXYpLT5maWVsZCk7IFwKK30KKworc3NiX2NvbmZpZ19hdHRyKGNvcmVfbnVtLCBjb3JlX2luZGV4LCAiJXVcbiIpCitzc2JfY29uZmlnX2F0dHIoY29yZWlkLCBpZC5jb3JlaWQsICIweCUwNHhcbiIpCitzc2JfY29uZmlnX2F0dHIodmVuZG9yLCBpZC52ZW5kb3IsICIweCUwNHhcbiIpCitzc2JfY29uZmlnX2F0dHIocmV2aXNpb24sIGlkLnJldmlzaW9uLCAiJXVcbiIpCitzc2JfY29uZmlnX2F0dHIoaXJxLCBpcnEsICIldVxuIikKK3N0YXRpYyBzc2l6ZV90CituYW1lX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLAorCQkgICAgICAgc3NiX2NvcmVfbmFtZShkZXZfdG9fc3NiX2RldihkZXYpLT5pZC5jb3JlaWQpKTsKK30KKworc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIHNzYl9kZXZpY2VfYXR0cnNbXSA9IHsKKwlfX0FUVFJfUk8obmFtZSksCisJX19BVFRSX1JPKGNvcmVfbnVtKSwKKwlfX0FUVFJfUk8oY29yZWlkKSwKKwlfX0FUVFJfUk8odmVuZG9yKSwKKwlfX0FUVFJfUk8ocmV2aXNpb24pLAorCV9fQVRUUl9STyhpcnEpLAorCV9fQVRUUl9OVUxMLAorfTsKKwogc3RhdGljIHN0cnVjdCBidXNfdHlwZSBzc2JfYnVzdHlwZSA9IHsKIAkubmFtZQkJPSAic3NiIiwKIAkubWF0Y2gJCT0gc3NiX2J1c19tYXRjaCwKQEAgLTM5Miw2ICs0MjEsNyBAQAogCS5zdXNwZW5kCT0gc3NiX2RldmljZV9zdXNwZW5kLAogCS5yZXN1bWUJCT0gc3NiX2RldmljZV9yZXN1bWUsCiAJLnVldmVudAkJPSBzc2JfZGV2aWNlX3VldmVudCwKKwkuZGV2X2F0dHJzCT0gc3NiX2RldmljZV9hdHRycywKIH07CiAKIHN0YXRpYyB2b2lkIHNzYl9idXNlc19sb2NrKHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NzYi9wY2kuYyBiL2RyaXZlcnMvc3NiL3BjaS5jCmluZGV4IDZlODhkMmIuLjE1ODQ0OWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3NiL3BjaS5jCisrKyBiL2RyaXZlcnMvc3NiL3BjaS5jCkBAIC00MDYsNiArNDA2LDQ2IEBACiAJb3V0LT5hbnRlbm5hX2dhaW4uZ2h6NS5hMyA9IGdhaW47CiB9CiAKKy8qIFJldnMgNCA1IGFuZCA4IGhhdmUgcGFydGlhbGx5IHNoYXJlZCBsYXlvdXQgKi8KK3N0YXRpYyB2b2lkIHNwcm9tX2V4dHJhY3RfcjQ1OChzdHJ1Y3Qgc3NiX3Nwcm9tICpvdXQsIGNvbnN0IHUxNiAqaW4pCit7CisJU1BFWCh0eHBpZDJnWzBdLCBTU0JfU1BST000X1RYUElEMkcwMSwKKwkgICAgIFNTQl9TUFJPTTRfVFhQSUQyRzAsIFNTQl9TUFJPTTRfVFhQSUQyRzBfU0hJRlQpOworCVNQRVgodHhwaWQyZ1sxXSwgU1NCX1NQUk9NNF9UWFBJRDJHMDEsCisJICAgICBTU0JfU1BST000X1RYUElEMkcxLCBTU0JfU1BST000X1RYUElEMkcxX1NISUZUKTsKKwlTUEVYKHR4cGlkMmdbMl0sIFNTQl9TUFJPTTRfVFhQSUQyRzIzLAorCSAgICAgU1NCX1NQUk9NNF9UWFBJRDJHMiwgU1NCX1NQUk9NNF9UWFBJRDJHMl9TSElGVCk7CisJU1BFWCh0eHBpZDJnWzNdLCBTU0JfU1BST000X1RYUElEMkcyMywKKwkgICAgIFNTQl9TUFJPTTRfVFhQSUQyRzMsIFNTQl9TUFJPTTRfVFhQSUQyRzNfU0hJRlQpOworCisJU1BFWCh0eHBpZDVnbFswXSwgU1NCX1NQUk9NNF9UWFBJRDVHTDAxLAorCSAgICAgU1NCX1NQUk9NNF9UWFBJRDVHTDAsIFNTQl9TUFJPTTRfVFhQSUQ1R0wwX1NISUZUKTsKKwlTUEVYKHR4cGlkNWdsWzFdLCBTU0JfU1BST000X1RYUElENUdMMDEsCisJICAgICBTU0JfU1BST000X1RYUElENUdMMSwgU1NCX1NQUk9NNF9UWFBJRDVHTDFfU0hJRlQpOworCVNQRVgodHhwaWQ1Z2xbMl0sIFNTQl9TUFJPTTRfVFhQSUQ1R0wyMywKKwkgICAgIFNTQl9TUFJPTTRfVFhQSUQ1R0wyLCBTU0JfU1BST000X1RYUElENUdMMl9TSElGVCk7CisJU1BFWCh0eHBpZDVnbFszXSwgU1NCX1NQUk9NNF9UWFBJRDVHTDIzLAorCSAgICAgU1NCX1NQUk9NNF9UWFBJRDVHTDMsIFNTQl9TUFJPTTRfVFhQSUQ1R0wzX1NISUZUKTsKKworCVNQRVgodHhwaWQ1Z1swXSwgU1NCX1NQUk9NNF9UWFBJRDVHMDEsCisJICAgICBTU0JfU1BST000X1RYUElENUcwLCBTU0JfU1BST000X1RYUElENUcwX1NISUZUKTsKKwlTUEVYKHR4cGlkNWdbMV0sIFNTQl9TUFJPTTRfVFhQSUQ1RzAxLAorCSAgICAgU1NCX1NQUk9NNF9UWFBJRDVHMSwgU1NCX1NQUk9NNF9UWFBJRDVHMV9TSElGVCk7CisJU1BFWCh0eHBpZDVnWzJdLCBTU0JfU1BST000X1RYUElENUcyMywKKwkgICAgIFNTQl9TUFJPTTRfVFhQSUQ1RzIsIFNTQl9TUFJPTTRfVFhQSUQ1RzJfU0hJRlQpOworCVNQRVgodHhwaWQ1Z1szXSwgU1NCX1NQUk9NNF9UWFBJRDVHMjMsCisJICAgICBTU0JfU1BST000X1RYUElENUczLCBTU0JfU1BST000X1RYUElENUczX1NISUZUKTsKKworCVNQRVgodHhwaWQ1Z2hbMF0sIFNTQl9TUFJPTTRfVFhQSUQ1R0gwMSwKKwkgICAgIFNTQl9TUFJPTTRfVFhQSUQ1R0gwLCBTU0JfU1BST000X1RYUElENUdIMF9TSElGVCk7CisJU1BFWCh0eHBpZDVnaFsxXSwgU1NCX1NQUk9NNF9UWFBJRDVHSDAxLAorCSAgICAgU1NCX1NQUk9NNF9UWFBJRDVHSDEsIFNTQl9TUFJPTTRfVFhQSUQ1R0gxX1NISUZUKTsKKwlTUEVYKHR4cGlkNWdoWzJdLCBTU0JfU1BST000X1RYUElENUdIMjMsCisJICAgICBTU0JfU1BST000X1RYUElENUdIMiwgU1NCX1NQUk9NNF9UWFBJRDVHSDJfU0hJRlQpOworCVNQRVgodHhwaWQ1Z2hbM10sIFNTQl9TUFJPTTRfVFhQSUQ1R0gyMywKKwkgICAgIFNTQl9TUFJPTTRfVFhQSUQ1R0gzLCBTU0JfU1BST000X1RYUElENUdIM19TSElGVCk7Cit9CisKIHN0YXRpYyB2b2lkIHNwcm9tX2V4dHJhY3RfcjQ1KHN0cnVjdCBzc2Jfc3Byb20gKm91dCwgY29uc3QgdTE2ICppbikKIHsKIAlpbnQgaTsKQEAgLTQ3MSw2ICs1MTEsOCBAQAogCW1lbWNweSgmb3V0LT5hbnRlbm5hX2dhaW4uZ2h6NSwgJm91dC0+YW50ZW5uYV9nYWluLmdoejI0LAogCSAgICAgICBzaXplb2Yob3V0LT5hbnRlbm5hX2dhaW4uZ2h6NSkpOwogCisJc3Byb21fZXh0cmFjdF9yNDU4KG91dCwgaW4pOworCiAJLyogVE9ETyAtIGdldCByZW1haW5pbmcgcmV2IDQgc3R1ZmYgbmVlZGVkICovCiB9CiAKQEAgLTU2MSw2ICs2MDMsOCBAQAogCW1lbWNweSgmb3V0LT5hbnRlbm5hX2dhaW4uZ2h6NSwgJm91dC0+YW50ZW5uYV9nYWluLmdoejI0LAogCSAgICAgICBzaXplb2Yob3V0LT5hbnRlbm5hX2dhaW4uZ2h6NSkpOwogCisJc3Byb21fZXh0cmFjdF9yNDU4KG91dCwgaW4pOworCiAJLyogVE9ETyAtIGdldCByZW1haW5pbmcgcmV2IDggc3R1ZmYgbmVlZGVkICovCiB9CiAKQEAgLTU3MywzNyArNjE3LDM0IEBACiAJc3NiX2RwcmludGsoS0VSTl9ERUJVRyBQRlggIlNQUk9NIHJldmlzaW9uICVkIGRldGVjdGVkLlxuIiwgb3V0LT5yZXZpc2lvbik7CiAJbWVtc2V0KG91dC0+ZXQwbWFjLCAweEZGLCA2KTsJCS8qIHByZXNldCBldDAgYW5kIGV0MSBtYWMgKi8KIAltZW1zZXQob3V0LT5ldDFtYWMsIDB4RkYsIDYpOworCiAJaWYgKChidXMtPmNoaXBfaWQgJiAweEZGMDApID09IDB4NDQwMCkgewogCQkvKiBXb3JrYXJvdW5kOiBUaGUgQkNNNDRYWCBjaGlwIGhhcyBhIHN0dXBpZCByZXZpc2lvbgogCQkgKiBudW1iZXIgc3RvcmVkIGluIHRoZSBTUFJPTS4KIAkJICogQWx3YXlzIGV4dHJhY3QgcjEuICovCiAJCW91dC0+cmV2aXNpb24gPSAxOworCQlzc2JfZHByaW50ayhLRVJOX0RFQlVHIFBGWCAiU1BST00gdHJlYXRlZCBhcyByZXZpc2lvbiAlZFxuIiwgb3V0LT5yZXZpc2lvbik7CisJfQorCisJc3dpdGNoIChvdXQtPnJldmlzaW9uKSB7CisJY2FzZSAxOgorCWNhc2UgMjoKKwljYXNlIDM6CiAJCXNwcm9tX2V4dHJhY3RfcjEyMyhvdXQsIGluKTsKLQl9IGVsc2UgaWYgKGJ1cy0+Y2hpcF9pZCA9PSAweDQzMjEpIHsKLQkJLyogdGhlIEJDTTQzMjggaGFzIGEgY2hpcGlkID09IDB4NDMyMSBhbmQgYSByZXYgNCBTUFJPTSAqLwotCQlvdXQtPnJldmlzaW9uID0gNDsKKwkJYnJlYWs7CisJY2FzZSA0OgorCWNhc2UgNToKIAkJc3Byb21fZXh0cmFjdF9yNDUob3V0LCBpbik7Ci0JfSBlbHNlIHsKLQkJc3dpdGNoIChvdXQtPnJldmlzaW9uKSB7Ci0JCWNhc2UgMToKLQkJY2FzZSAyOgotCQljYXNlIDM6Ci0JCQlzcHJvbV9leHRyYWN0X3IxMjMob3V0LCBpbik7Ci0JCQlicmVhazsKLQkJY2FzZSA0OgotCQljYXNlIDU6Ci0JCQlzcHJvbV9leHRyYWN0X3I0NShvdXQsIGluKTsKLQkJCWJyZWFrOwotCQljYXNlIDg6Ci0JCQlzcHJvbV9leHRyYWN0X3I4KG91dCwgaW4pOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlzc2JfcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIlVuc3VwcG9ydGVkIFNQUk9NIgotCQkJCSAgICIgIHJldmlzaW9uICVkIGRldGVjdGVkLiBXaWxsIGV4dHJhY3QiCi0JCQkJICAgIiB2MVxuIiwgb3V0LT5yZXZpc2lvbik7Ci0JCQlvdXQtPnJldmlzaW9uID0gMTsKLQkJCXNwcm9tX2V4dHJhY3RfcjEyMyhvdXQsIGluKTsKLQkJfQorCQlicmVhazsKKwljYXNlIDg6CisJCXNwcm9tX2V4dHJhY3Rfcjgob3V0LCBpbik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXNzYl9wcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiVW5zdXBwb3J0ZWQgU1BST00iCisJCQkgICAiICByZXZpc2lvbiAlZCBkZXRlY3RlZC4gV2lsbCBleHRyYWN0IgorCQkJICAgIiB2MVxuIiwgb3V0LT5yZXZpc2lvbik7CisJCW91dC0+cmV2aXNpb24gPSAxOworCQlzcHJvbV9leHRyYWN0X3IxMjMob3V0LCBpbik7CiAJfQogCiAJaWYgKG91dC0+Ym9hcmRmbGFnc19sbyA9PSAweEZGRkYpCkBAIC02MTgsNyArNjU5LDcgQEAKIAkJCSAgICAgc3RydWN0IHNzYl9zcHJvbSAqc3Byb20pCiB7CiAJY29uc3Qgc3RydWN0IHNzYl9zcHJvbSAqZmFsbGJhY2s7Ci0JaW50IGVyciA9IC1FTk9NRU07CisJaW50IGVycjsKIAl1MTYgKmJ1ZjsKIAogCWlmICghc3NiX2lzX3Nwcm9tX2F2YWlsYWJsZShidXMpKSB7CkBAIC02NDUsNyArNjg2LDcgQEAKIAogCWJ1ZiA9IGtjYWxsb2MoU1NCX1NQUk9NU0laRV9XT1JEU19SMTIzLCBzaXplb2YodTE2KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFidWYpCi0JCWdvdG8gb3V0OworCQlyZXR1cm4gLUVOT01FTTsKIAlidXMtPnNwcm9tX3NpemUgPSBTU0JfU1BST01TSVpFX1dPUkRTX1IxMjM7CiAJc3Byb21fZG9fcmVhZChidXMsIGJ1Zik7CiAJZXJyID0gc3Byb21fY2hlY2tfY3JjKGJ1ZiwgYnVzLT5zcHJvbV9zaXplKTsKQEAgLTY1NSw3ICs2OTYsNyBAQAogCQlidWYgPSBrY2FsbG9jKFNTQl9TUFJPTVNJWkVfV09SRFNfUjQsIHNpemVvZih1MTYpLAogCQkJICAgICAgR0ZQX0tFUk5FTCk7CiAJCWlmICghYnVmKQotCQkJZ290byBvdXQ7CisJCQlyZXR1cm4gLUVOT01FTTsKIAkJYnVzLT5zcHJvbV9zaXplID0gU1NCX1NQUk9NU0laRV9XT1JEU19SNDsKIAkJc3Byb21fZG9fcmVhZChidXMsIGJ1Zik7CiAJCWVyciA9IHNwcm9tX2NoZWNrX2NyYyhidWYsIGJ1cy0+c3Byb21fc2l6ZSk7CkBAIC02NzcsNyArNzE4LDYgQEAKIAogb3V0X2ZyZWU6CiAJa2ZyZWUoYnVmKTsKLW91dDoKIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NzYi9wY2lob3N0X3dyYXBwZXIuYyBiL2RyaXZlcnMvc3NiL3BjaWhvc3Rfd3JhcHBlci5jCmluZGV4IDY1MzZhMDQuLmY2YzhjODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3NiL3BjaWhvc3Rfd3JhcHBlci5jCisrKyBiL2RyaXZlcnMvc3NiL3BjaWhvc3Rfd3JhcHBlci5jCkBAIC01OSw2ICs1OSw3IEBACiAJc3RydWN0IHNzYl9idXMgKnNzYjsKIAlpbnQgZXJyID0gLUVOT01FTTsKIAljb25zdCBjaGFyICpuYW1lOworCXUzMiB2YWw7CiAKIAlzc2IgPSBremFsbG9jKHNpemVvZigqc3NiKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzc2IpCkBAIC03NCw2ICs3NSwxMiBAQAogCQlnb3RvIGVycl9wY2lfZGlzYWJsZTsKIAlwY2lfc2V0X21hc3RlcihkZXYpOwogCisJLyogRGlzYWJsZSB0aGUgUkVUUllfVElNRU9VVCByZWdpc3RlciAoMHg0MSkgdG8ga2VlcAorCSAqIFBDSSBUeCByZXRyaWVzIGZyb20gaW50ZXJmZXJpbmcgd2l0aCBDMyBDUFUgc3RhdGUgKi8KKwlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCAweDQwLCAmdmFsKTsKKwlpZiAoKHZhbCAmIDB4MDAwMGZmMDApICE9IDApCisJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCAweDQwLCB2YWwgJiAweGZmZmYwMGZmKTsKKwogCWVyciA9IHNzYl9idXNfcGNpYnVzX3JlZ2lzdGVyKHNzYiwgZGV2KTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9wY2lfcmVsZWFzZV9yZWdpb25zOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zc2Ivc2Nhbi5jIGIvZHJpdmVycy9zc2Ivc2Nhbi5jCmluZGV4IGVlMDc5YWIuLjVhMDk4NWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3NiL3NjYW4uYworKysgYi9kcml2ZXJzL3NzYi9zY2FuLmMKQEAgLTQwNSwxMCArNDA1LDEwIEBACiAJCQkJLyogSWdub3JlIFBDSSBjb3JlcyBvbiBQQ0ktRSBjYXJkcy4KIAkJCQkgKiBJZ25vcmUgUENJLUUgY29yZXMgb24gUENJIGNhcmRzLiAqLwogCQkJCWlmIChkZXYtPmlkLmNvcmVpZCA9PSBTU0JfREVWX1BDSSkgewotCQkJCQlpZiAoYnVzLT5ob3N0X3BjaS0+aXNfcGNpZSkKKwkJCQkJaWYgKHBjaV9pc19wY2llKGJ1cy0+aG9zdF9wY2kpKQogCQkJCQkJY29udGludWU7CiAJCQkJfSBlbHNlIHsKLQkJCQkJaWYgKCFidXMtPmhvc3RfcGNpLT5pc19wY2llKQorCQkJCQlpZiAoIXBjaV9pc19wY2llKGJ1cy0+aG9zdF9wY2kpKQogCQkJCQkJY29udGludWU7CiAJCQkJfQogCQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZwppbmRleCA1ZWFmZGY0Li5iZGM2MzJiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL0tjb25maWcKQEAgLTUxLDkgKzUxLDExIEBACiAKIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3RtNjAwMC9LY29uZmlnIgogCi1zb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9jcGlhL0tjb25maWciCitzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9kYWJ1c2IvS2NvbmZpZyIKIAotc291cmNlICJkcml2ZXJzL3N0YWdpbmcvc3RyYWRpcy9LY29uZmlnIgorc291cmNlICJkcml2ZXJzL3N0YWdpbmcvc2U0MDEvS2NvbmZpZyIKKworc291cmNlICJkcml2ZXJzL3N0YWdpbmcvdXNidmlkZW8vS2NvbmZpZyIKIAogc291cmNlICJkcml2ZXJzL3N0YWdpbmcvdXNiaXAvS2NvbmZpZyIKIApAQCAtMTExLDggKzExMyw2IEBACiAKIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9LY29uZmlnIgogCi1zb3VyY2UgImRyaXZlcnMvc3RhZ2luZy91ZGxmYi9LY29uZmlnIgotCiBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9odi9LY29uZmlnIgogCiBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy92bWUvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9NYWtlZmlsZQppbmRleCBhOTdhOTU1Li4zZWRhNWM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zdGFnaW5nL01ha2VmaWxlCkBAIC04LDggKzgsOSBAQAogb2JqLSQoQ09ORklHX1ZJREVPX0dPNzAwNykJKz0gZ283MDA3Lwogb2JqLSQoQ09ORklHX1ZJREVPX0NYMjU4MjEpCSs9IGN4MjU4MjEvCiBvYmotJChDT05GSUdfVklERU9fVE02MDAwKQkrPSB0bTYwMDAvCi1vYmotJChDT05GSUdfVklERU9fQ1BJQSkJKz0gY3BpYS8KLW9iai0kKENPTkZJR19WSURFT19TVFJBRElTKQkrPSBzdHJhZGlzLworb2JqLSQoQ09ORklHX1VTQl9EQUJVU0IpICAgICAgICArPSBkYWJ1c2IvCitvYmotJChDT05GSUdfVVNCX1ZJQ0FNKSAgICAgICAgICs9IHVzYnZpZGVvLworb2JqLSQoQ09ORklHX1VTQl9TRTQwMSkgICAgICAgICArPSBzZTQwMS8KIG9iai0kKENPTkZJR19MSVJDX1NUQUdJTkcpCSs9IGxpcmMvCiBvYmotJChDT05GSUdfVVNCX0lQX0NPTU1PTikJKz0gdXNiaXAvCiBvYmotJChDT05GSUdfVzM1VU5EKQkJKz0gd2luYm9uZC8KQEAgLTM4LDcgKzM5LDYgQEAKIG9iai0kKENPTkZJR19PQ1RFT05fRVRIRVJORVQpCSs9IG9jdGVvbi8KIG9iai0kKENPTkZJR19WVDY2NTUpCQkrPSB2dDY2NTUvCiBvYmotJChDT05GSUdfVlQ2NjU2KQkJKz0gdnQ2NjU2Lwotb2JqLSQoQ09ORklHX0ZCX1VETCkJCSs9IHVkbGZiLwogb2JqLSQoQ09ORklHX0hZUEVSVikJCSs9IGh2Lwogb2JqLSQoQ09ORklHX1ZNRV9CVVMpCQkrPSB2bWUvCiBvYmotJChDT05GSUdfTVJTVF9SQVJfSEFORExFUikJKz0gbWVtcmFyLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F1dG9mcy9yb290LmMgYi9kcml2ZXJzL3N0YWdpbmcvYXV0b2ZzL3Jvb3QuYwppbmRleCAwZmRlYzRiLi5iZjBlOTc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYXV0b2ZzL3Jvb3QuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYXV0b2ZzL3Jvb3QuYwpAQCAtMTU0LDEzICsxNTQsMTYgQEAKICAqIHlldCBjb21wbGV0ZWx5IGZpbGxlZCBpbiwgYW5kIHJldmFsaWRhdGUgaGFzIHRvIGRlbGF5IHN1Y2gKICAqIGxvb2t1cHMuLgogICovCi1zdGF0aWMgaW50IGF1dG9mc19yZXZhbGlkYXRlKHN0cnVjdCBkZW50cnkgKiBkZW50cnksIHN0cnVjdCBuYW1laWRhdGEgKm5kKQorc3RhdGljIGludCBhdXRvZnNfcmV2YWxpZGF0ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBuYW1laWRhdGEgKm5kKQogewogCXN0cnVjdCBpbm9kZSAqIGRpcjsKIAlzdHJ1Y3QgYXV0b2ZzX3NiX2luZm8gKnNiaTsKIAlzdHJ1Y3QgYXV0b2ZzX2Rpcl9lbnQgKmVudDsKIAlpbnQgcmVzOwogCisJaWYgKG5kLT5mbGFncyAmIExPT0tVUF9SQ1UpCisJCXJldHVybiAtRUNISUxEOworCiAJbG9ja19rZXJuZWwoKTsKIAlkaXIgPSBkZW50cnktPmRfcGFyZW50LT5kX2lub2RlOwogCXNiaSA9IGF1dG9mc19zYmkoZGlyLT5pX3NiKTsKQEAgLTIzNyw3ICsyNDAsNyBAQAogCSAqCiAJICogV2UgbmVlZCB0byBkbyB0aGlzIGJlZm9yZSB3ZSByZWxlYXNlIHRoZSBkaXJlY3Rvcnkgc2VtYXBob3JlLgogCSAqLwotCWRlbnRyeS0+ZF9vcCA9ICZhdXRvZnNfZGVudHJ5X29wZXJhdGlvbnM7CisJZF9zZXRfZF9vcChkZW50cnksICZhdXRvZnNfZGVudHJ5X29wZXJhdGlvbnMpOwogCWRlbnRyeS0+ZF9mbGFncyB8PSBEQ0FDSEVfQVVUT0ZTX1BFTkRJTkc7CiAJZF9hZGQoZGVudHJ5LCBOVUxMKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JjbS9JbnRlcmZhY2VJbml0LmMgYi9kcml2ZXJzL3N0YWdpbmcvYmNtL0ludGVyZmFjZUluaXQuYwppbmRleCA4MjRmOWE0Li5lOTdhZDk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmNtL0ludGVyZmFjZUluaXQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYmNtL0ludGVyZmFjZUluaXQuYwpAQCAtMjc3LDcgKzI3Nyw3IEBACiAJCWlmKHBzQWRhcHRlci0+YkRvU3VzcGVuZCkKIAkJewogI2lmZGVmIENPTkZJR19QTQotCQkJdWRldi0+YXV0b3N1c3BlbmRfZGVsYXkgPSAwOworCQkJcG1fcnVudGltZV9zZXRfYXV0b3N1c3BlbmRfZGVsYXkoJnVkZXYtPmRldiwgMCk7CiAJCQlpbnRmLT5uZWVkc19yZW1vdGVfd2FrZXVwID0gMTsKICNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLCA2LCAzNSkKICAJCQl1ZGV2LT5hdXRvc3VzcGVuZF9kaXNhYmxlZCA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY3BpYS9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL2NwaWEvS2NvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjA1ZDI0Ny4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY3BpYS9LY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotY29uZmlnIFZJREVPX0NQSUEKLQl0cmlzdGF0ZSAiQ1BpQSBWaWRlbyBGb3IgTGludXggKERFUFJFQ0FURUQpIgotCWRlcGVuZHMgb24gVklERU9fVjRMMQotCWRlZmF1bHQgbgotCS0tLWhlbHAtLS0KLQkgIFRoaXMgZHJpdmVyIGlzIERFUFJFQ0FURUQgcGxlYXNlIHVzZSB0aGUgZ3NwY2EgY3BpYTEgbW9kdWxlCi0JICBpbnN0ZWFkLiBOb3RlIHRoYXQgeW91IG5lZWQgYXRsZWFzdCB2ZXJzaW9uIDAuNi40IG9mIGxpYnY0bCBmb3IKLQkgIHRoZSBjcGlhMSBnc3BjYSBtb2R1bGUuCi0KLQkgIFRoaXMgaXMgdGhlIHZpZGVvNGxpbnV4IGRyaXZlciBmb3IgY2FtZXJhcyBiYXNlZCBvbiBWaXNpb24ncyBDUGlBCi0JICAoQ29sb3VyIFByb2Nlc3NvciBJbnRlcmZhY2UgQVNJQyksIHN1Y2ggYXMgdGhlIENyZWF0aXZlIExhYnMgVmlkZW8KLQkgIEJsYXN0ZXIgV2ViY2FtIElJLiBJZiB5b3UgaGF2ZSBvbmUgb2YgdGhlc2UgY2FtZXJhcywgc2F5IFkgaGVyZQotCSAgYW5kIHNlbGVjdCBwYXJhbGxlbCBwb3J0IGFuZC9vciBVU0IgbG93bGV2ZWwgc3VwcG9ydCBiZWxvdywKLQkgIG90aGVyd2lzZSBzYXkgTi4gVGhpcyB3aWxsIG5vdCB3b3JrIHdpdGggdGhlIENyZWF0aXZlIFdlYmNhbSBJSUkuCi0KLQkgIFBsZWFzZSByZWFkIDxmaWxlOkRvY3VtZW50YXRpb24vdmlkZW80bGludXgvUkVBRE1FLmNwaWE+IGZvciBtb3JlCi0JICBpbmZvcm1hdGlvbi4KLQotCSAgVGhpcyBkcml2ZXIgaXMgYWxzbyBhdmFpbGFibGUgYXMgYSBtb2R1bGUgKGNwaWEpLgotCi1jb25maWcgVklERU9fQ1BJQV9QUAotCXRyaXN0YXRlICJDUGlBIFBhcmFsbGVsIFBvcnQgTG93bGV2ZWwgU3VwcG9ydCIKLQlkZXBlbmRzIG9uIFBBUlBPUlRfMTI4NCAmJiBWSURFT19DUElBICYmIFBBUlBPUlQKLQloZWxwCi0JICBUaGlzIGlzIHRoZSBsb3dsZXZlbCBwYXJhbGxlbCBwb3J0IHN1cHBvcnQgZm9yIGNhbWVyYXMgYmFzZWQgb24KLQkgIFZpc2lvbidzIENQaUEgKENvbG91ciBQcm9jZXNzb3IgSW50ZXJmYWNlIEFTSUMpLCBzdWNoIGFzIHRoZQotCSAgQ3JlYXRpdmUgV2ViY2FtIElJLiBJZiB5b3UgaGF2ZSB0aGUgcGFyYWxsZWwgcG9ydCB2ZXJzaW9uIG9mIG9uZQotCSAgb2YgdGhlc2UgY2FtZXJhcywgc2F5IFkgaGVyZSwgb3RoZXJ3aXNlIHNheSBOLiBJdCBpcyBhbHNvIGF2YWlsYWJsZQotCSAgYXMgYSBtb2R1bGUgKGNwaWFfcHApLgotCi1jb25maWcgVklERU9fQ1BJQV9VU0IKLQl0cmlzdGF0ZSAiQ1BpQSBVU0IgTG93bGV2ZWwgU3VwcG9ydCIKLQlkZXBlbmRzIG9uIFZJREVPX0NQSUEgJiYgVVNCCi0JaGVscAotCSAgVGhpcyBpcyB0aGUgbG93bGV2ZWwgVVNCIHN1cHBvcnQgZm9yIGNhbWVyYXMgYmFzZWQgb24gVmlzaW9uJ3MgQ1BpQQotCSAgKENvbG91ciBQcm9jZXNzb3IgSW50ZXJmYWNlIEFTSUMpLCBzdWNoIGFzIHRoZSBDcmVhdGl2ZSBXZWJjYW0gSUkuCi0JICBJZiB5b3UgaGF2ZSB0aGUgVVNCIHZlcnNpb24gb2Ygb25lIG9mIHRoZXNlIGNhbWVyYXMsIHNheSBZIGhlcmUsCi0JICBvdGhlcndpc2Ugc2F5IE4uIFRoaXMgd2lsbCBub3Qgd29yayB3aXRoIHRoZSBDcmVhdGl2ZSBXZWJjYW0gSUlJLgotCSAgSXQgaXMgYWxzbyBhdmFpbGFibGUgYXMgYSBtb2R1bGUgKGNwaWFfdXNiKS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jcGlhL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL2NwaWEvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5ZTUyZjEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NwaWEvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW9iai0kKENPTkZJR19WSURFT19DUElBKSArPSBjcGlhLm8KLW9iai0kKENPTkZJR19WSURFT19DUElBX1BQKSArPSBjcGlhX3BwLm8KLW9iai0kKENPTkZJR19WSURFT19DUElBX1VTQikgKz0gY3BpYV91c2IubwotCi1FWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL21lZGlhL3ZpZGVvCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY3BpYS9UT0RPIGIvZHJpdmVycy9zdGFnaW5nL2NwaWEvVE9ETwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2NiMWMwNy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY3BpYS9UT0RPCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1UaGlzIGlzIGFuIG9ic29sZXRlIGRyaXZlciBmb3Igc29tZSBjcGlhLWJhc2VkIHdlYmNhbXMgdGhhdCB1c2UgdGhlIHBhcmFsbGVsIHBvcnQuCi1XZSBjb3VsZG4ndCBmaW5kIGFueW9uZSB3aXRoIHRoaXMgaGFyZHdhcmUgaW4gb3JkZXIgdG8gcG9ydCBpdCB0byB1c2UgVjRMMi4KLQotQWxzbywgcGFyYWxsZWwtcG9ydCB3ZWJjYW1zIGFyZSBvYnNvbGV0ZSBub3dhZGF5cy4KLQotSWYgbm9ib2R5IHRha2UgY2FyZSBvbiBpdCwgdGhlIGRyaXZlciB3aWxsIGJlIHJlbW92ZWQgZm9yIDIuNi4zOC4KLQotUGxlYXNlIHNlbmQgcGF0Y2hlcyB0byBsaW51eC1tZWRpYUB2Z2VyLmtlcm5lbC5vcmcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jcGlhL2NwaWEuYyBiL2RyaXZlcnMvc3RhZ2luZy9jcGlhL2NwaWEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGU3NDBiOC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY3BpYS9jcGlhLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MDI4ICswLDAgQEAKLS8qCi0gKiBjcGlhIENQaUEgZHJpdmVyCi0gKgotICogU3VwcG9ydHMgQ1BpQSBiYXNlZCBWaWRlbyBDYW1lcmEncy4KLSAqCi0gKiAoQykgQ29weXJpZ2h0IDE5OTktMjAwMCBQZXRlciBQcmVnbGVyCi0gKiAoQykgQ29weXJpZ2h0IDE5OTktMjAwMCBTY290dCBKLiBCZXJ0aW4KLSAqIChDKSBDb3B5cmlnaHQgMTk5OS0yMDAwIEpvaGFubmVzIEVyZGZlbHQgPGpvaGFubmVzQGVyZGZlbHQuY29tPgotICogKEMpIENvcHlyaWdodCAyMDAwIFNUTWljcm9lbGVjdHJvbmljcwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0KLS8qIGRlZmluZSBfQ1BJQV9ERUJVR18gZm9yIHZlcmJvc2UgZGVidWcgb3V0cHV0IChzZWUgY3BpYS5oKSAqLwotLyogI2RlZmluZSBfQ1BJQV9ERUJVR18gIDEgKi8KLQotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgotI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KLQotI2luY2x1ZGUgImNwaWEuaCIKLQotc3RhdGljIGludCB2aWRlb19uciA9IC0xOwotCi0jaWZkZWYgTU9EVUxFCi1tb2R1bGVfcGFyYW0odmlkZW9fbnIsIGludCwgMCk7Ci1NT0RVTEVfQVVUSE9SKCJTY290dCBKLiBCZXJ0aW4gPHNiZXJ0aW5Ac2VjdXJlbnltLm5ldD4gJiBQZXRlciBQcmVnbGVyIDxQZXRlcl9QcmVnbGVyQGVtYWlsLmNvbT4gJiBKb2hhbm5lcyBFcmRmZWx0IDxqb2hhbm5lc0BlcmRmZWx0LmNvbT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiVjRMLWRyaXZlciBmb3IgVmlzaW9uIENQaUEgYmFzZWQgY2FtZXJhcyIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoInZpZGVvIik7Ci0jZW5kaWYKLQotc3RhdGljIHVuc2lnbmVkIHNob3J0IGNvbG9yc3BhY2VfY29udjsKLW1vZHVsZV9wYXJhbShjb2xvcnNwYWNlX2NvbnYsIHVzaG9ydCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGNvbG9yc3BhY2VfY29udiwKLQkJICIgQ29sb3JzcGFjZSBjb252ZXJzaW9uOiIKLQkJICJcbiAgMCA9IGRpc2FibGUsIDEgPSBlbmFibGUiCi0JCSAiXG4gIERlZmF1bHQgdmFsdWUgaXMgMCIKLQkJICk7Ci0KLSNkZWZpbmUgQUJPVVQgIlY0TC1Ecml2ZXIgZm9yIFZpc2lvbiBDUGlBIGJhc2VkIGNhbWVyYXMiCi0KLSNkZWZpbmUgQ1BJQV9NT0RVTEVfQ1BJQQkJCSgwPDw1KQotI2RlZmluZSBDUElBX01PRFVMRV9TWVNURU0JCQkoMTw8NSkKLSNkZWZpbmUgQ1BJQV9NT0RVTEVfVlBfQ1RSTAkJCSg1PDw1KQotI2RlZmluZSBDUElBX01PRFVMRV9DQVBUVVJFCQkJKDY8PDUpCi0jZGVmaW5lIENQSUFfTU9EVUxFX0RFQlVHCQkJKDc8PDUpCi0KLSNkZWZpbmUgSU5QVVQgKERBVEFfSU4gPDwgOCkKLSNkZWZpbmUgT1VUUFVUIChEQVRBX09VVCA8PCA4KQotCi0jZGVmaW5lIENQSUFfQ09NTUFORF9HZXRDUElBVmVyc2lvbgkoSU5QVVQgfCBDUElBX01PRFVMRV9DUElBIHwgMSkKLSNkZWZpbmUgQ1BJQV9DT01NQU5EX0dldFBuUElECQkoSU5QVVQgfCBDUElBX01PRFVMRV9DUElBIHwgMikKLSNkZWZpbmUgQ1BJQV9DT01NQU5EX0dldENhbWVyYVN0YXR1cwkoSU5QVVQgfCBDUElBX01PRFVMRV9DUElBIHwgMykKLSNkZWZpbmUgQ1BJQV9DT01NQU5EX0dvdG9IaVBvd2VyCShPVVRQVVQgfCBDUElBX01PRFVMRV9DUElBIHwgNCkKLSNkZWZpbmUgQ1BJQV9DT01NQU5EX0dvdG9Mb1Bvd2VyCShPVVRQVVQgfCBDUElBX01PRFVMRV9DUElBIHwgNSkKLSNkZWZpbmUgQ1BJQV9DT01NQU5EX0dvdG9TdXNwZW5kCShPVVRQVVQgfCBDUElBX01PRFVMRV9DUElBIHwgNykKLSNkZWZpbmUgQ1BJQV9DT01NQU5EX0dvdG9QYXNzVGhyb3VnaAkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfQ1BJQSB8IDgpCi0jZGVmaW5lIENQSUFfQ09NTUFORF9Nb2RpZnlDYW1lcmFTdGF0dXMJKE9VVFBVVCB8IENQSUFfTU9EVUxFX0NQSUEgfCAxMCkKLQotI2RlZmluZSBDUElBX0NPTU1BTkRfUmVhZFZDUmVncwkJKElOUFVUIHwgQ1BJQV9NT0RVTEVfU1lTVEVNIHwgMSkKLSNkZWZpbmUgQ1BJQV9DT01NQU5EX1dyaXRlVkNSZWcJCShPVVRQVVQgfCBDUElBX01PRFVMRV9TWVNURU0gfCAyKQotI2RlZmluZSBDUElBX0NPTU1BTkRfUmVhZE1DUG9ydHMJKElOUFVUIHwgQ1BJQV9NT0RVTEVfU1lTVEVNIHwgMykKLSNkZWZpbmUgQ1BJQV9DT01NQU5EX1dyaXRlTUNQb3J0CShPVVRQVVQgfCBDUElBX01PRFVMRV9TWVNURU0gfCA0KQotI2RlZmluZSBDUElBX0NPTU1BTkRfU2V0QmF1ZFJhdGUJKE9VVFBVVCB8IENQSUFfTU9EVUxFX1NZU1RFTSB8IDUpCi0jZGVmaW5lIENQSUFfQ09NTUFORF9TZXRFQ1BUaW1pbmcJKE9VVFBVVCB8IENQSUFfTU9EVUxFX1NZU1RFTSB8IDYpCi0jZGVmaW5lIENQSUFfQ09NTUFORF9SZWFkSURBVEEJCShJTlBVVCB8IENQSUFfTU9EVUxFX1NZU1RFTSB8IDcpCi0jZGVmaW5lIENQSUFfQ09NTUFORF9Xcml0ZUlEQVRBCQkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfU1lTVEVNIHwgOCkKLSNkZWZpbmUgQ1BJQV9DT01NQU5EX0dlbmVyaWNDYWxsCShPVVRQVVQgfCBDUElBX01PRFVMRV9TWVNURU0gfCA5KQotI2RlZmluZSBDUElBX0NPTU1BTkRfSTJDU3RhcnQJCShPVVRQVVQgfCBDUElBX01PRFVMRV9TWVNURU0gfCAxMCkKLSNkZWZpbmUgQ1BJQV9DT01NQU5EX0kyQ1N0b3AJCShPVVRQVVQgfCBDUElBX01PRFVMRV9TWVNURU0gfCAxMSkKLSNkZWZpbmUgQ1BJQV9DT01NQU5EX0kyQ1dyaXRlCQkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfU1lTVEVNIHwgMTIpCi0jZGVmaW5lIENQSUFfQ09NTUFORF9JMkNSZWFkCQkoSU5QVVQgfCBDUElBX01PRFVMRV9TWVNURU0gfCAxMykKLQotI2RlZmluZSBDUElBX0NPTU1BTkRfR2V0VlBWZXJzaW9uCShJTlBVVCB8IENQSUFfTU9EVUxFX1ZQX0NUUkwgfCAxKQotI2RlZmluZSBDUElBX0NPTU1BTkRfUmVzZXRGcmFtZUNvdW50ZXIJKElOUFVUIHwgQ1BJQV9NT0RVTEVfVlBfQ1RSTCB8IDIpCi0jZGVmaW5lIENQSUFfQ09NTUFORF9TZXRDb2xvdXJQYXJhbXMJKE9VVFBVVCB8IENQSUFfTU9EVUxFX1ZQX0NUUkwgfCAzKQotI2RlZmluZSBDUElBX0NPTU1BTkRfU2V0RXhwb3N1cmUJKE9VVFBVVCB8IENQSUFfTU9EVUxFX1ZQX0NUUkwgfCA0KQotI2RlZmluZSBDUElBX0NPTU1BTkRfU2V0Q29sb3VyQmFsYW5jZQkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfVlBfQ1RSTCB8IDYpCi0jZGVmaW5lIENQSUFfQ09NTUFORF9TZXRTZW5zb3JGUFMJKE9VVFBVVCB8IENQSUFfTU9EVUxFX1ZQX0NUUkwgfCA3KQotI2RlZmluZSBDUElBX0NPTU1BTkRfU2V0VlBEZWZhdWx0cwkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfVlBfQ1RSTCB8IDgpCi0jZGVmaW5lIENQSUFfQ09NTUFORF9TZXRBcGNvcgkJKE9VVFBVVCB8IENQSUFfTU9EVUxFX1ZQX0NUUkwgfCA5KQotI2RlZmluZSBDUElBX0NPTU1BTkRfU2V0RmxpY2tlckN0cmwJKE9VVFBVVCB8IENQSUFfTU9EVUxFX1ZQX0NUUkwgfCAxMCkKLSNkZWZpbmUgQ1BJQV9DT01NQU5EX1NldFZMT2Zmc2V0CShPVVRQVVQgfCBDUElBX01PRFVMRV9WUF9DVFJMIHwgMTEpCi0jZGVmaW5lIENQSUFfQ09NTUFORF9HZXRDb2xvdXJQYXJhbXMJKElOUFVUIHwgQ1BJQV9NT0RVTEVfVlBfQ1RSTCB8IDE2KQotI2RlZmluZSBDUElBX0NPTU1BTkRfR2V0Q29sb3VyQmFsYW5jZQkoSU5QVVQgfCBDUElBX01PRFVMRV9WUF9DVFJMIHwgMTcpCi0jZGVmaW5lIENQSUFfQ09NTUFORF9HZXRFeHBvc3VyZQkoSU5QVVQgfCBDUElBX01PRFVMRV9WUF9DVFJMIHwgMTgpCi0jZGVmaW5lIENQSUFfQ09NTUFORF9TZXRTZW5zb3JNYXRyaXgJKE9VVFBVVCB8IENQSUFfTU9EVUxFX1ZQX0NUUkwgfCAxOSkKLSNkZWZpbmUgQ1BJQV9DT01NQU5EX0NvbG91ckJhcnMJCShPVVRQVVQgfCBDUElBX01PRFVMRV9WUF9DVFJMIHwgMjUpCi0jZGVmaW5lIENQSUFfQ09NTUFORF9SZWFkVlBSZWdzCQkoSU5QVVQgfCBDUElBX01PRFVMRV9WUF9DVFJMIHwgMzApCi0jZGVmaW5lIENQSUFfQ09NTUFORF9Xcml0ZVZQUmVnCQkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfVlBfQ1RSTCB8IDMxKQotCi0jZGVmaW5lIENQSUFfQ09NTUFORF9HcmFiRnJhbWUJCShPVVRQVVQgfCBDUElBX01PRFVMRV9DQVBUVVJFIHwgMSkKLSNkZWZpbmUgQ1BJQV9DT01NQU5EX1VwbG9hZEZyYW1lCShPVVRQVVQgfCBDUElBX01PRFVMRV9DQVBUVVJFIHwgMikKLSNkZWZpbmUgQ1BJQV9DT01NQU5EX1NldEdyYWJNb2RlCShPVVRQVVQgfCBDUElBX01PRFVMRV9DQVBUVVJFIHwgMykKLSNkZWZpbmUgQ1BJQV9DT01NQU5EX0luaXRTdHJlYW1DYXAJKE9VVFBVVCB8IENQSUFfTU9EVUxFX0NBUFRVUkUgfCA0KQotI2RlZmluZSBDUElBX0NPTU1BTkRfRmluaVN0cmVhbUNhcAkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfQ0FQVFVSRSB8IDUpCi0jZGVmaW5lIENQSUFfQ09NTUFORF9TdGFydFN0cmVhbUNhcAkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfQ0FQVFVSRSB8IDYpCi0jZGVmaW5lIENQSUFfQ09NTUFORF9FbmRTdHJlYW1DYXAJKE9VVFBVVCB8IENQSUFfTU9EVUxFX0NBUFRVUkUgfCA3KQotI2RlZmluZSBDUElBX0NPTU1BTkRfU2V0Rm9ybWF0CQkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfQ0FQVFVSRSB8IDgpCi0jZGVmaW5lIENQSUFfQ09NTUFORF9TZXRST0kJCShPVVRQVVQgfCBDUElBX01PRFVMRV9DQVBUVVJFIHwgOSkKLSNkZWZpbmUgQ1BJQV9DT01NQU5EX1NldENvbXByZXNzaW9uCShPVVRQVVQgfCBDUElBX01PRFVMRV9DQVBUVVJFIHwgMTApCi0jZGVmaW5lIENQSUFfQ09NTUFORF9TZXRDb21wcmVzc2lvblRhcmdldCAoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfQ0FQVFVSRSB8IDExKQotI2RlZmluZSBDUElBX0NPTU1BTkRfU2V0WVVWVGhyZXNoCShPVVRQVVQgfCBDUElBX01PRFVMRV9DQVBUVVJFIHwgMTIpCi0jZGVmaW5lIENQSUFfQ09NTUFORF9TZXRDb21wcmVzc2lvblBhcmFtcyAoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfQ0FQVFVSRSB8IDEzKQotI2RlZmluZSBDUElBX0NPTU1BTkRfRGlzY2FyZEZyYW1lCShPVVRQVVQgfCBDUElBX01PRFVMRV9DQVBUVVJFIHwgMTQpCi0jZGVmaW5lIENQSUFfQ09NTUFORF9HcmFiUmVzZXQJCShPVVRQVVQgfCBDUElBX01PRFVMRV9DQVBUVVJFIHwgMTUpCi0KLSNkZWZpbmUgQ1BJQV9DT01NQU5EX091dHB1dFJTMjMyCShPVVRQVVQgfCBDUElBX01PRFVMRV9ERUJVRyB8IDEpCi0jZGVmaW5lIENQSUFfQ09NTUFORF9BYm9ydFByb2Nlc3MJKE9VVFBVVCB8IENQSUFfTU9EVUxFX0RFQlVHIHwgNCkKLSNkZWZpbmUgQ1BJQV9DT01NQU5EX1NldERyYW1QYWdlCShPVVRQVVQgfCBDUElBX01PRFVMRV9ERUJVRyB8IDUpCi0jZGVmaW5lIENQSUFfQ09NTUFORF9TdGFydERyYW1VcGxvYWQJKE9VVFBVVCB8IENQSUFfTU9EVUxFX0RFQlVHIHwgNikKLSNkZWZpbmUgQ1BJQV9DT01NQU5EX1N0YXJ0RHVtbXlEdHJlYW0JKE9VVFBVVCB8IENQSUFfTU9EVUxFX0RFQlVHIHwgOCkKLSNkZWZpbmUgQ1BJQV9DT01NQU5EX0Fib3J0U3RyZWFtCShPVVRQVVQgfCBDUElBX01PRFVMRV9ERUJVRyB8IDkpCi0jZGVmaW5lIENQSUFfQ09NTUFORF9Eb3dubG9hZERSQU0JKE9VVFBVVCB8IENQSUFfTU9EVUxFX0RFQlVHIHwgMTApCi0jZGVmaW5lIENQSUFfQ09NTUFORF9OdWxsCQkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfREVCVUcgfCAxMSkKLQotZW51bSB7Ci0JRlJBTUVfUkVBRFksCQkvKiBSZWFkeSB0byBncmFiIGludG8gKi8KLQlGUkFNRV9HUkFCQklORywJCS8qIEluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIGdyYWJiZWQgaW50byAqLwotCUZSQU1FX0RPTkUsCQkvKiBGaW5pc2hlZCBncmFiYmluZywgYnV0IG5vdCBiZWVuIHN5bmNlZCB5ZXQgKi8KLQlGUkFNRV9VTlVTRUQsCQkvKiBVbnVzZWQgKG5vIE1DQVBUVVJFKSAqLwotfTsKLQotI2RlZmluZSBDT01NQU5EX05PTkUJCQkweDAwMDAKLSNkZWZpbmUgQ09NTUFORF9TRVRDT01QUkVTU0lPTgkJMHgwMDAxCi0jZGVmaW5lIENPTU1BTkRfU0VUQ09NUFJFU1NJT05UQVJHRVQJMHgwMDAyCi0jZGVmaW5lIENPTU1BTkRfU0VUQ09MT1VSUEFSQU1TCQkweDAwMDQKLSNkZWZpbmUgQ09NTUFORF9TRVRGT1JNQVQJCTB4MDAwOAotI2RlZmluZSBDT01NQU5EX1BBVVNFCQkJMHgwMDEwCi0jZGVmaW5lIENPTU1BTkRfUkVTVU1FCQkJMHgwMDIwCi0jZGVmaW5lIENPTU1BTkRfU0VUWVVWVEhSRVNICQkweDAwNDAKLSNkZWZpbmUgQ09NTUFORF9TRVRFQ1BUSU1JTkcJCTB4MDA4MAotI2RlZmluZSBDT01NQU5EX1NFVENPTVBSRVNTSU9OUEFSQU1TCTB4MDEwMAotI2RlZmluZSBDT01NQU5EX1NFVEVYUE9TVVJFCQkweDAyMDAKLSNkZWZpbmUgQ09NTUFORF9TRVRDT0xPVVJCQUxBTkNFCTB4MDQwMAotI2RlZmluZSBDT01NQU5EX1NFVFNFTlNPUkZQUwkJMHgwODAwCi0jZGVmaW5lIENPTU1BTkRfU0VUQVBDT1IJCTB4MTAwMAotI2RlZmluZSBDT01NQU5EX1NFVEZMSUNLRVJDVFJMCQkweDIwMDAKLSNkZWZpbmUgQ09NTUFORF9TRVRWTE9GRlNFVAkJMHg0MDAwCi0jZGVmaW5lIENPTU1BTkRfU0VUTElHSFRTCQkweDgwMDAKLQotI2RlZmluZSBST1VORF9VUF9FWFBfRk9SX0ZMSUNLRVIgMTUKLQotLyogQ29uc3RhbnRzIGZvciBhdXRvbWF0aWMgZnJhbWUgcmF0ZSBhZGp1c3RtZW50ICovCi0jZGVmaW5lIE1BWF9FWFAgICAgICAgMzAyCi0jZGVmaW5lIE1BWF9FWFBfMTAyICAgMjU1Ci0jZGVmaW5lIExPV19FWFAgICAgICAgMTQwCi0jZGVmaW5lIFZFUllfTE9XX0VYUCAgIDcwCi0jZGVmaW5lIFRDICAgICAgICAgICAgIDk0Ci0jZGVmaW5lCUVYUF9BQ0NfREFSSyAgIDUwCi0jZGVmaW5lCUVYUF9BQ0NfTElHSFQgIDkwCi0jZGVmaW5lIEhJR0hfQ09NUF8xMDIgMTYwCi0jZGVmaW5lIE1BWF9DT01QICAgICAgMjM5Ci0jZGVmaW5lIERBUktfVElNRSAgICAgICAzCi0jZGVmaW5lIExJR0hUX1RJTUUgICAgICAzCi0KLS8qIE1heGltdW0gbnVtYmVyIG9mIDEwbXMgbG9vcHMgdG8gd2FpdCBmb3IgdGhlIHN0cmVhbSB0byBiZWNvbWUgcmVhZHkgKi8KLSNkZWZpbmUgUkVBRFlfVElNRU9VVCAxMDAKLQotLyogRGV2ZWxvcGVyJ3MgR3VpZGUgVGFibGUgNSBwIDMtMzQKLSAqIGluZGV4ZWQgYnkgW21haW5zXVtzZW5zb3JGcHMuYmFzZXJhdGVdW3NlbnNvckZwcy5kaXZpc29yXSovCi1zdGF0aWMgdTggZmxpY2tlcl9qdW1wc1syXVsyXVs0XSA9Ci17IHsgeyA3NiwgMzgsIDE5LCA5IH0sIHsgOTIsIDQ2LCAyMywgMTEgfSB9LAotICB7IHsgNjQsIDMyLCAxNiwgOCB9LCB7IDc2LCAzOCwgMTksIDl9IH0KLX07Ci0KLS8qIGZvcndhcmQgZGVjbGFyYXRpb24gb2YgbG9jYWwgZnVuY3Rpb24gKi8KLXN0YXRpYyB2b2lkIHJlc2V0X2NhbWVyYV9zdHJ1Y3Qoc3RydWN0IGNhbV9kYXRhICpjYW0pOwotc3RhdGljIGludCBmaW5kX292ZXJfZXhwb3N1cmUoaW50IGJyaWdodG5lc3MpOwotc3RhdGljIHZvaWQgc2V0X2ZsaWNrZXIoc3RydWN0IGNhbV9wYXJhbXMgKnBhcmFtcywgdm9sYXRpbGUgdTMyICpjb21tYW5kX2ZsYWdzLAotCQkJaW50IG9uKTsKLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIE1lbW9yeSBtYW5hZ2VtZW50Ci0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgdm9pZCAqcnZtYWxsb2ModW5zaWduZWQgbG9uZyBzaXplKQotewotCXZvaWQgKm1lbTsKLQl1bnNpZ25lZCBsb25nIGFkcjsKLQotCXNpemUgPSBQQUdFX0FMSUdOKHNpemUpOwotCW1lbSA9IHZtYWxsb2NfMzIoc2l6ZSk7Ci0JaWYgKCFtZW0pCi0JCXJldHVybiBOVUxMOwotCi0JbWVtc2V0KG1lbSwgMCwgc2l6ZSk7IC8qIENsZWFyIHRoZSByYW0gb3V0LCBubyBqdW5rIHRvIHRoZSB1c2VyICovCi0JYWRyID0gKHVuc2lnbmVkIGxvbmcpIG1lbTsKLQl3aGlsZSAoc2l6ZSA+IDApIHsKLQkJU2V0UGFnZVJlc2VydmVkKHZtYWxsb2NfdG9fcGFnZSgodm9pZCAqKWFkcikpOwotCQlhZHIgKz0gUEFHRV9TSVpFOwotCQlzaXplIC09IFBBR0VfU0laRTsKLQl9Ci0KLQlyZXR1cm4gbWVtOwotfQotCi1zdGF0aWMgdm9pZCBydmZyZWUodm9pZCAqbWVtLCB1bnNpZ25lZCBsb25nIHNpemUpCi17Ci0JdW5zaWduZWQgbG9uZyBhZHI7Ci0KLQlpZiAoIW1lbSkKLQkJcmV0dXJuOwotCi0JYWRyID0gKHVuc2lnbmVkIGxvbmcpIG1lbTsKLQl3aGlsZSAoKGxvbmcpIHNpemUgPiAwKSB7Ci0JCUNsZWFyUGFnZVJlc2VydmVkKHZtYWxsb2NfdG9fcGFnZSgodm9pZCAqKWFkcikpOwotCQlhZHIgKz0gUEFHRV9TSVpFOwotCQlzaXplIC09IFBBR0VfU0laRTsKLQl9Ci0JdmZyZWUobWVtKTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiAvcHJvYyBpbnRlcmZhY2UKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpZmRlZiBDT05GSUdfUFJPQ19GUwotc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqY3BpYV9wcm9jX3Jvb3Q9TlVMTDsKLQotc3RhdGljIGludCBjcGlhX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCi17Ci0Jc3RydWN0IGNhbV9kYXRhICpjYW0gPSBtLT5wcml2YXRlOwotCWludCB0bXA7Ci0JY2hhciB0bXBzdHJbMjldOwotCi0Jc2VxX3ByaW50ZihtLCAicmVhZC1vbmx5XG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7Ci0Jc2VxX3ByaW50ZihtLCAiVjRMIERyaXZlciB2ZXJzaW9uOiAgICAgICAlZC4lZC4lZFxuIiwKLQkJICAgICAgIENQSUFfTUFKX1ZFUiwgQ1BJQV9NSU5fVkVSLCBDUElBX1BBVENIX1ZFUik7Ci0Jc2VxX3ByaW50ZihtLCAiQ1BJQSBWZXJzaW9uOiAgICAgICAgICAgICAlZC4lMDJkICglZC4lZClcbiIsCi0JCSAgICAgICBjYW0tPnBhcmFtcy52ZXJzaW9uLmZpcm13YXJlVmVyc2lvbiwKLQkJICAgICAgIGNhbS0+cGFyYW1zLnZlcnNpb24uZmlybXdhcmVSZXZpc2lvbiwKLQkJICAgICAgIGNhbS0+cGFyYW1zLnZlcnNpb24udmNWZXJzaW9uLAotCQkgICAgICAgY2FtLT5wYXJhbXMudmVyc2lvbi52Y1JldmlzaW9uKTsKLQlzZXFfcHJpbnRmKG0sICJDUElBIFBuUC1JRDogICAgICAgICAgICAgICUwNHg6JTA0eDolMDR4XG4iLAotCQkgICAgICAgY2FtLT5wYXJhbXMucG5wSUQudmVuZG9yLCBjYW0tPnBhcmFtcy5wbnBJRC5wcm9kdWN0LAotCQkgICAgICAgY2FtLT5wYXJhbXMucG5wSUQuZGV2aWNlUmV2aXNpb24pOwotCXNlcV9wcmludGYobSwgIlZQLVZlcnNpb246ICAgICAgICAgICAgICAgJWQuJWQgJTA0eFxuIiwKLQkJICAgICAgIGNhbS0+cGFyYW1zLnZwVmVyc2lvbi52cFZlcnNpb24sCi0JCSAgICAgICBjYW0tPnBhcmFtcy52cFZlcnNpb24udnBSZXZpc2lvbiwKLQkJICAgICAgIGNhbS0+cGFyYW1zLnZwVmVyc2lvbi5jYW1lcmFIZWFkSUQpOwotCi0Jc2VxX3ByaW50ZihtLCAic3lzdGVtX3N0YXRlOiAgICAgICAgICAgICAlIzA0eFxuIiwKLQkJICAgICAgIGNhbS0+cGFyYW1zLnN0YXR1cy5zeXN0ZW1TdGF0ZSk7Ci0Jc2VxX3ByaW50ZihtLCAiZ3JhYl9zdGF0ZTogICAgICAgICAgICAgICAlIzA0eFxuIiwKLQkJICAgICAgIGNhbS0+cGFyYW1zLnN0YXR1cy5ncmFiU3RhdGUpOwotCXNlcV9wcmludGYobSwgInN0cmVhbV9zdGF0ZTogICAgICAgICAgICAgJSMwNHhcbiIsCi0JCSAgICAgICBjYW0tPnBhcmFtcy5zdGF0dXMuc3RyZWFtU3RhdGUpOwotCXNlcV9wcmludGYobSwgImZhdGFsX2Vycm9yOiAgICAgICAgICAgICAgJSMwNHhcbiIsCi0JCSAgICAgICBjYW0tPnBhcmFtcy5zdGF0dXMuZmF0YWxFcnJvcik7Ci0Jc2VxX3ByaW50ZihtLCAiY21kX2Vycm9yOiAgICAgICAgICAgICAgICAlIzA0eFxuIiwKLQkJICAgICAgIGNhbS0+cGFyYW1zLnN0YXR1cy5jbWRFcnJvcik7Ci0Jc2VxX3ByaW50ZihtLCAiZGVidWdfZmxhZ3M6ICAgICAgICAgICAgICAlIzA0eFxuIiwKLQkJICAgICAgIGNhbS0+cGFyYW1zLnN0YXR1cy5kZWJ1Z0ZsYWdzKTsKLQlzZXFfcHJpbnRmKG0sICJ2cF9zdGF0dXM6ICAgICAgICAgICAgICAgICUjMDR4XG4iLAotCQkgICAgICAgY2FtLT5wYXJhbXMuc3RhdHVzLnZwU3RhdHVzKTsKLQlzZXFfcHJpbnRmKG0sICJlcnJvcl9jb2RlOiAgICAgICAgICAgICAgICUjMDR4XG4iLAotCQkgICAgICAgY2FtLT5wYXJhbXMuc3RhdHVzLmVycm9yQ29kZSk7Ci0JLyogUVgzIHNwZWNpZmljIGVudHJpZXMgKi8KLQlpZiAoY2FtLT5wYXJhbXMucXgzLnF4M19kZXRlY3RlZCkgewotCQlzZXFfcHJpbnRmKG0sICJidXR0b246ICAgICAgICAgICAgICAgICAgICU0ZFxuIiwKLQkJCSAgICAgICBjYW0tPnBhcmFtcy5xeDMuYnV0dG9uKTsKLQkJc2VxX3ByaW50ZihtLCAiY3JhZGxlZDogICAgICAgICAgICAgICAgICAlNGRcbiIsCi0JCQkgICAgICAgY2FtLT5wYXJhbXMucXgzLmNyYWRsZWQpOwotCX0KLQlzZXFfcHJpbnRmKG0sICJ2aWRlb19zaXplOiAgICAgICAgICAgICAgICVzXG4iLAotCQkgICAgICAgY2FtLT5wYXJhbXMuZm9ybWF0LnZpZGVvU2l6ZSA9PSBWSURFT1NJWkVfQ0lGID8KLQkJICAgICAgICJDSUYgIiA6ICJRQ0lGIik7Ci0Jc2VxX3ByaW50ZihtLCAicm9pOiAgICAgICAgICAgICAgICAgICAgICAoJTNkLCAlM2QpIHRvICglM2QsICUzZClcbiIsCi0JCSAgICAgICBjYW0tPnBhcmFtcy5yb2kuY29sU3RhcnQqOCwKLQkJICAgICAgIGNhbS0+cGFyYW1zLnJvaS5yb3dTdGFydCo0LAotCQkgICAgICAgY2FtLT5wYXJhbXMucm9pLmNvbEVuZCo4LAotCQkgICAgICAgY2FtLT5wYXJhbXMucm9pLnJvd0VuZCo0KTsKLQlzZXFfcHJpbnRmKG0sICJhY3R1YWxfZnBzOiAgICAgICAgICAgICAgICUzZFxuIiwgY2FtLT5mcHMpOwotCXNlcV9wcmludGYobSwgInRyYW5zZmVyX3JhdGU6ICAgICAgICAgICAgJTRka0Ivc1xuIiwKLQkJICAgICAgIGNhbS0+dHJhbnNmZXJfcmF0ZSk7Ci0KLQlzZXFfcHJpbnRmKG0sICJcbnJlYWQtd3JpdGVcbiIpOwotCXNlcV9wcmludGYobSwgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBjdXJyZW50ICAgICAgIG1pbiIKLQkJICAgICAgICIgICAgICAgbWF4ICAgZGVmYXVsdCAgY29tbWVudFxuIik7Ci0Jc2VxX3ByaW50ZihtLCAiYnJpZ2h0bmVzczogICAgICAgICAgICAgJThkICAlOGQgICU4ZCAgJThkXG4iLAotCQkgICAgICAgY2FtLT5wYXJhbXMuY29sb3VyUGFyYW1zLmJyaWdodG5lc3MsIDAsIDEwMCwgNTApOwotCWlmIChjYW0tPnBhcmFtcy52ZXJzaW9uLmZpcm13YXJlVmVyc2lvbiA9PSAxICYmCi0JICAgY2FtLT5wYXJhbXMudmVyc2lvbi5maXJtd2FyZVJldmlzaW9uID09IDIpCi0JCS8qIDEtMDIgZmlybXdhcmUgbGltaXRzIGNvbnRyYXN0IHRvIDgwICovCi0JCXRtcCA9IDgwOwotCWVsc2UKLQkJdG1wID0gOTY7Ci0KLQlzZXFfcHJpbnRmKG0sICJjb250cmFzdDogICAgICAgICAgICAgICAlOGQgICU4ZCAgJThkICAlOGQiCi0JCSAgICAgICAiICBzdGVwcyBvZiA4XG4iLAotCQkgICAgICAgY2FtLT5wYXJhbXMuY29sb3VyUGFyYW1zLmNvbnRyYXN0LCAwLCB0bXAsIDQ4KTsKLQlzZXFfcHJpbnRmKG0sICJzYXR1cmF0aW9uOiAgICAgICAgICAgICAlOGQgICU4ZCAgJThkICAlOGRcbiIsCi0JCSAgICAgICBjYW0tPnBhcmFtcy5jb2xvdXJQYXJhbXMuc2F0dXJhdGlvbiwgMCwgMTAwLCA1MCk7Ci0JdG1wID0gKDI1MDAwKzUwMDAqY2FtLT5wYXJhbXMuc2Vuc29yRnBzLmJhc2VyYXRlKS8KLQkgICAgICAoMTw8Y2FtLT5wYXJhbXMuc2Vuc29yRnBzLmRpdmlzb3IpOwotCXNlcV9wcmludGYobSwgInNlbnNvcl9mcHM6ICAgICAgICAgICAgICU0ZC4lMDNkICAlOGQgICU4ZCAgJThkXG4iLAotCQkgICAgICAgdG1wLzEwMDAsIHRtcCUxMDAwLCAzLCAzMCwgMTUpOwotCXNlcV9wcmludGYobSwgInN0cmVhbV9zdGFydF9saW5lOiAgICAgICU4ZCAgJThkICAlOGQgICU4ZFxuIiwKLQkJICAgICAgIDIqY2FtLT5wYXJhbXMuc3RyZWFtU3RhcnRMaW5lLCAwLAotCQkgICAgICAgY2FtLT5wYXJhbXMuZm9ybWF0LnZpZGVvU2l6ZSA9PSBWSURFT1NJWkVfQ0lGID8gMjg4OjE0NCwKLQkJICAgICAgIGNhbS0+cGFyYW1zLmZvcm1hdC52aWRlb1NpemUgPT0gVklERU9TSVpFX0NJRiA/IDI0MDoxMjApOwotCXNlcV9wcmludGYobSwgInN1Yl9zYW1wbGU6ICAgICAgICAgICAgICU4cyAgJThzICAlOHMgICU4c1xuIiwKLQkJICAgICAgIGNhbS0+cGFyYW1zLmZvcm1hdC5zdWJTYW1wbGUgPT0gU1VCU0FNUExFXzQyMCA/Ci0JCSAgICAgICAiNDIwIiA6ICI0MjIiLCAiNDIwIiwgIjQyMiIsICI0MjIiKTsKLQlzZXFfcHJpbnRmKG0sICJ5dXZfb3JkZXI6ICAgICAgICAgICAgICAlOHMgICU4cyAgJThzICAlOHNcbiIsCi0JCSAgICAgICBjYW0tPnBhcmFtcy5mb3JtYXQueXV2T3JkZXIgPT0gWVVWT1JERVJfWVVZViA/Ci0JCSAgICAgICAiWVVZViIgOiAiVVlWWSIsICJZVVlWIiAsICJVWVZZIiwgIllVWVYiKTsKLQlzZXFfcHJpbnRmKG0sICJlY3BfdGltaW5nOiAgICAgICAgICAgICAlOHMgICU4cyAgJThzICAlOHNcbiIsCi0JCSAgICAgICBjYW0tPnBhcmFtcy5lY3BUaW1pbmcgPyAic2xvdyIgOiAibm9ybWFsIiwgInNsb3ciLAotCQkgICAgICAgIm5vcm1hbCIsICJub3JtYWwiKTsKLQotCWlmIChjYW0tPnBhcmFtcy5jb2xvdXJCYWxhbmNlLmJhbGFuY2VNb2RlID09IDIpIHsKLQkJc3ByaW50Zih0bXBzdHIsICJhdXRvIik7Ci0JfSBlbHNlIHsKLQkJc3ByaW50Zih0bXBzdHIsICJtYW51YWwiKTsKLQl9Ci0Jc2VxX3ByaW50ZihtLCAiY29sb3JfYmFsYW5jZV9tb2RlOiAgICAgJThzICAlOHMgICU4cyIKLQkJICAgICAgICIgICU4c1xuIiwgIHRtcHN0ciwgIm1hbnVhbCIsICJhdXRvIiwgImF1dG8iKTsKLQlzZXFfcHJpbnRmKG0sICJyZWRfZ2FpbjogICAgICAgICAgICAgICAlOGQgICU4ZCAgJThkICAlOGRcbiIsCi0JCSAgICAgICBjYW0tPnBhcmFtcy5jb2xvdXJCYWxhbmNlLnJlZEdhaW4sIDAsIDIxMiwgMzIpOwotCXNlcV9wcmludGYobSwgImdyZWVuX2dhaW46ICAgICAgICAgICAgICU4ZCAgJThkICAlOGQgICU4ZFxuIiwKLQkJICAgICAgIGNhbS0+cGFyYW1zLmNvbG91ckJhbGFuY2UuZ3JlZW5HYWluLCAwLCAyMTIsIDYpOwotCXNlcV9wcmludGYobSwgImJsdWVfZ2FpbjogICAgICAgICAgICAgICU4ZCAgJThkICAlOGQgICU4ZFxuIiwKLQkJICAgICAgIGNhbS0+cGFyYW1zLmNvbG91ckJhbGFuY2UuYmx1ZUdhaW4sIDAsIDIxMiwgOTIpOwotCi0JaWYgKGNhbS0+cGFyYW1zLnZlcnNpb24uZmlybXdhcmVWZXJzaW9uID09IDEgJiYKLQkgICBjYW0tPnBhcmFtcy52ZXJzaW9uLmZpcm13YXJlUmV2aXNpb24gPT0gMikKLQkJLyogMS0wMiBmaXJtd2FyZSBsaW1pdHMgZ2FpbiB0byAyICovCi0JCXNwcmludGYodG1wc3RyLCAiJThkICAlOGQgICU4ZCIsIDEsIDIsIDIpOwotCWVsc2UKLQkJc3ByaW50Zih0bXBzdHIsICIlOGQgICU4ZCAgJThkIiwgMSwgOCwgMik7Ci0KLQlpZiAoY2FtLT5wYXJhbXMuZXhwb3N1cmUuZ2Fpbk1vZGUgPT0gMCkKLQkJc2VxX3ByaW50ZihtLCAibWF4X2dhaW46ICAgICAgICAgICAgICAgIHVua25vd24gICUyOHMiCi0JCQkgICAgICAgIiAgcG93ZXJzIG9mIDJcbiIsIHRtcHN0cik7Ci0JZWxzZQotCQlzZXFfcHJpbnRmKG0sICJtYXhfZ2FpbjogICAgICAgICAgICAgICAlOGQgICUyOHMiCi0JCQkgICAgICAgIiAgMSwyLDQgb3IgOCBcbiIsCi0JCQkgICAgICAgMTw8KGNhbS0+cGFyYW1zLmV4cG9zdXJlLmdhaW5Nb2RlLTEpLCB0bXBzdHIpOwotCi0Jc3dpdGNoKGNhbS0+cGFyYW1zLmV4cG9zdXJlLmV4cE1vZGUpIHsKLQljYXNlIDE6Ci0JY2FzZSAzOgotCQlzcHJpbnRmKHRtcHN0ciwgIm1hbnVhbCIpOwotCQlicmVhazsKLQljYXNlIDI6Ci0JCXNwcmludGYodG1wc3RyLCAiYXV0byIpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlzcHJpbnRmKHRtcHN0ciwgInVua25vd24iKTsKLQkJYnJlYWs7Ci0JfQotCXNlcV9wcmludGYobSwgImV4cG9zdXJlX21vZGU6ICAgICAgICAgICU4cyAgJThzICAlOHMiCi0JCSAgICAgICAiICAlOHNcbiIsICB0bXBzdHIsICJtYW51YWwiLCAiYXV0byIsICJhdXRvIik7Ci0Jc2VxX3ByaW50ZihtLCAiY2VudHJlX3dlaWdodDogICAgICAgICAgJThzICAlOHMgICU4cyAgJThzXG4iLAotCQkgICAgICAgKDItY2FtLT5wYXJhbXMuZXhwb3N1cmUuY2VudHJlV2VpZ2h0KSA/ICJvbiIgOiAib2ZmIiwKLQkJICAgICAgICJvZmYiLCAib24iLCAib24iKTsKLQlzZXFfcHJpbnRmKG0sICJnYWluOiAgICAgICAgICAgICAgICAgICAlOGQgICU4ZCAgbWF4X2dhaW4gICU4ZCAgMSwyLDQsOCBwb3NzaWJsZVxuIiwKLQkJICAgICAgIDE8PGNhbS0+cGFyYW1zLmV4cG9zdXJlLmdhaW4sIDEsIDEpOwotCWlmIChjYW0tPnBhcmFtcy52ZXJzaW9uLmZpcm13YXJlVmVyc2lvbiA9PSAxICYmCi0JICAgY2FtLT5wYXJhbXMudmVyc2lvbi5maXJtd2FyZVJldmlzaW9uID09IDIpCi0JCS8qIDEtMDIgZmlybXdhcmUgbGltaXRzIGZpbmVFeHAvMiB0byAxMjcgKi8KLQkJdG1wID0gMjU0OwotCWVsc2UKLQkJdG1wID0gNTEwOwotCi0Jc2VxX3ByaW50ZihtLCAiZmluZV9leHA6ICAgICAgICAgICAgICAgJThkICAlOGQgICU4ZCAgJThkXG4iLAotCQkgICAgICAgY2FtLT5wYXJhbXMuZXhwb3N1cmUuZmluZUV4cCoyLCAwLCB0bXAsIDApOwotCWlmIChjYW0tPnBhcmFtcy52ZXJzaW9uLmZpcm13YXJlVmVyc2lvbiA9PSAxICYmCi0JICAgY2FtLT5wYXJhbXMudmVyc2lvbi5maXJtd2FyZVJldmlzaW9uID09IDIpCi0JCS8qIDEtMDIgZmlybXdhcmUgbGltaXRzIGNvYXJzZUV4cEhpIHRvIDAgKi8KLQkJdG1wID0gTUFYX0VYUF8xMDI7Ci0JZWxzZQotCQl0bXAgPSBNQVhfRVhQOwotCi0Jc2VxX3ByaW50ZihtLCAiY29hcnNlX2V4cDogICAgICAgICAgICAgJThkICAlOGQgICU4ZCIKLQkJICAgICAgICIgICU4ZFxuIiwgY2FtLT5wYXJhbXMuZXhwb3N1cmUuY29hcnNlRXhwTG8rCi0JCSAgICAgICAyNTYqY2FtLT5wYXJhbXMuZXhwb3N1cmUuY29hcnNlRXhwSGksIDAsIHRtcCwgMTg1KTsKLQlzZXFfcHJpbnRmKG0sICJyZWRfY29tcDogICAgICAgICAgICAgICAlOGQgICU4ZCAgJThkICAlOGRcbiIsCi0JCSAgICAgICBjYW0tPnBhcmFtcy5leHBvc3VyZS5yZWRDb21wLCBDT01QX1JFRCwgMjU1LCBDT01QX1JFRCk7Ci0Jc2VxX3ByaW50ZihtLCAiZ3JlZW4xX2NvbXA6ICAgICAgICAgICAgJThkICAlOGQgICU4ZCAgJThkXG4iLAotCQkgICAgICAgY2FtLT5wYXJhbXMuZXhwb3N1cmUuZ3JlZW4xQ29tcCwgQ09NUF9HUkVFTjEsIDI1NSwKLQkJICAgICAgIENPTVBfR1JFRU4xKTsKLQlzZXFfcHJpbnRmKG0sICJncmVlbjJfY29tcDogICAgICAgICAgICAlOGQgICU4ZCAgJThkICAlOGRcbiIsCi0JCSAgICAgICBjYW0tPnBhcmFtcy5leHBvc3VyZS5ncmVlbjJDb21wLCBDT01QX0dSRUVOMiwgMjU1LAotCQkgICAgICAgQ09NUF9HUkVFTjIpOwotCXNlcV9wcmludGYobSwgImJsdWVfY29tcDogICAgICAgICAgICAgICU4ZCAgJThkICAlOGQgICU4ZFxuIiwKLQkJICAgICAgIGNhbS0+cGFyYW1zLmV4cG9zdXJlLmJsdWVDb21wLCBDT01QX0JMVUUsIDI1NSwgQ09NUF9CTFVFKTsKLQotCXNlcV9wcmludGYobSwgImFwY29yX2dhaW4xOiAgICAgICAgICAgICUjOHggICUjOHggICUjOHggICUjOHhcbiIsCi0JCSAgICAgICBjYW0tPnBhcmFtcy5hcGNvci5nYWluMSwgMCwgMHhmZiwgMHgxYyk7Ci0Jc2VxX3ByaW50ZihtLCAiYXBjb3JfZ2FpbjI6ICAgICAgICAgICAgJSM4eCAgJSM4eCAgJSM4eCAgJSM4eFxuIiwKLQkJICAgICAgIGNhbS0+cGFyYW1zLmFwY29yLmdhaW4yLCAwLCAweGZmLCAweDFhKTsKLQlzZXFfcHJpbnRmKG0sICJhcGNvcl9nYWluNDogICAgICAgICAgICAlIzh4ICAlIzh4ICAlIzh4ICAlIzh4XG4iLAotCQkgICAgICAgY2FtLT5wYXJhbXMuYXBjb3IuZ2FpbjQsIDAsIDB4ZmYsIDB4MmQpOwotCXNlcV9wcmludGYobSwgImFwY29yX2dhaW44OiAgICAgICAgICAgICUjOHggICUjOHggICUjOHggICUjOHhcbiIsCi0JCSAgICAgICBjYW0tPnBhcmFtcy5hcGNvci5nYWluOCwgMCwgMHhmZiwgMHgyYSk7Ci0Jc2VxX3ByaW50ZihtLCAidmxfb2Zmc2V0X2dhaW4xOiAgICAgICAgJThkICAlOGQgICU4ZCAgJThkXG4iLAotCQkgICAgICAgY2FtLT5wYXJhbXMudmxPZmZzZXQuZ2FpbjEsIDAsIDI1NSwgMjQpOwotCXNlcV9wcmludGYobSwgInZsX29mZnNldF9nYWluMjogICAgICAgICU4ZCAgJThkICAlOGQgICU4ZFxuIiwKLQkJICAgICAgIGNhbS0+cGFyYW1zLnZsT2Zmc2V0LmdhaW4yLCAwLCAyNTUsIDI4KTsKLQlzZXFfcHJpbnRmKG0sICJ2bF9vZmZzZXRfZ2FpbjQ6ICAgICAgICAlOGQgICU4ZCAgJThkICAlOGRcbiIsCi0JCSAgICAgICBjYW0tPnBhcmFtcy52bE9mZnNldC5nYWluNCwgMCwgMjU1LCAzMCk7Ci0Jc2VxX3ByaW50ZihtLCAidmxfb2Zmc2V0X2dhaW44OiAgICAgICAgJThkICAlOGQgICU4ZCAgJThkXG4iLAotCQkgICAgICAgY2FtLT5wYXJhbXMudmxPZmZzZXQuZ2FpbjgsIDAsIDI1NSwgMzApOwotCXNlcV9wcmludGYobSwgImZsaWNrZXJfY29udHJvbDogICAgICAgICU4cyAgJThzICAlOHMgICU4c1xuIiwKLQkJICAgICAgIGNhbS0+cGFyYW1zLmZsaWNrZXJDb250cm9sLmZsaWNrZXJNb2RlID8gIm9uIiA6ICJvZmYiLAotCQkgICAgICAgIm9mZiIsICJvbiIsICJvZmYiKTsKLQlzZXFfcHJpbnRmKG0sICJtYWluc19mcmVxdWVuY3k6ICAgICAgICAlOGQgICU4ZCAgJThkICAlOGQiCi0JCSAgICAgICAiIG9ubHkgNTAvNjBcbiIsCi0JCSAgICAgICBjYW0tPm1haW5zRnJlcSA/IDYwIDogNTAsIDUwLCA2MCwgNTApOwotCWlmKGNhbS0+cGFyYW1zLmZsaWNrZXJDb250cm9sLmFsbG93YWJsZU92ZXJFeHBvc3VyZSA8IDApCi0JCXNlcV9wcmludGYobSwgImFsbG93YWJsZV9vdmVyZXhwb3N1cmU6ICU0ZGF1dG8gICAgICBhdXRvICAlOGQgICAgICBhdXRvXG4iLAotCQkJICAgICAgIC1jYW0tPnBhcmFtcy5mbGlja2VyQ29udHJvbC5hbGxvd2FibGVPdmVyRXhwb3N1cmUsCi0JCQkgICAgICAgMjU1KTsKLQllbHNlCi0JCXNlcV9wcmludGYobSwgImFsbG93YWJsZV9vdmVyZXhwb3N1cmU6ICU4ZCAgICAgIGF1dG8gICU4ZCAgICAgIGF1dG9cbiIsCi0JCQkgICAgICAgY2FtLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuYWxsb3dhYmxlT3ZlckV4cG9zdXJlLAotCQkJICAgICAgIDI1NSk7Ci0Jc2VxX3ByaW50ZihtLCAiY29tcHJlc3Npb25fbW9kZTogICAgICAgIik7Ci0Jc3dpdGNoKGNhbS0+cGFyYW1zLmNvbXByZXNzaW9uLm1vZGUpIHsKLQljYXNlIENQSUFfQ09NUFJFU1NJT05fTk9ORToKLQkJc2VxX3ByaW50ZihtLCAiJThzIiwgIm5vbmUiKTsKLQkJYnJlYWs7Ci0JY2FzZSBDUElBX0NPTVBSRVNTSU9OX0FVVE86Ci0JCXNlcV9wcmludGYobSwgIiU4cyIsICJhdXRvIik7Ci0JCWJyZWFrOwotCWNhc2UgQ1BJQV9DT01QUkVTU0lPTl9NQU5VQUw6Ci0JCXNlcV9wcmludGYobSwgIiU4cyIsICJtYW51YWwiKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJc2VxX3ByaW50ZihtLCAiJThzIiwgInVua25vd24iKTsKLQkJYnJlYWs7Ci0JfQotCXNlcV9wcmludGYobSwgIiAgICBub25lLGF1dG8sbWFudWFsICAgICAgYXV0b1xuIik7Ci0Jc2VxX3ByaW50ZihtLCAiZGVjaW1hdGlvbl9lbmFibGU6ICAgICAgJThzICAlOHMgICU4cyAgJThzXG4iLAotCQkgICAgICAgY2FtLT5wYXJhbXMuY29tcHJlc3Npb24uZGVjaW1hdGlvbiA9PQotCQkgICAgICAgREVDSU1BVElPTl9FTkFCID8gIm9uIjoib2ZmIiwgIm9mZiIsICJvbiIsCi0JCSAgICAgICAib2ZmIik7Ci0Jc2VxX3ByaW50ZihtLCAiY29tcHJlc3Npb25fdGFyZ2V0OiAgICAlOXMgJTlzICU5cyAlOXNcbiIsCi0JCSAgICAgICBjYW0tPnBhcmFtcy5jb21wcmVzc2lvblRhcmdldC5mclRhcmdldGluZyAgPT0KLQkJICAgICAgIENQSUFfQ09NUFJFU1NJT05fVEFSR0VUX0ZSQU1FUkFURSA/Ci0JCSAgICAgICAiZnJhbWVyYXRlIjoicXVhbGl0eSIsCi0JCSAgICAgICAiZnJhbWVyYXRlIiwgInF1YWxpdHkiLCAicXVhbGl0eSIpOwotCXNlcV9wcmludGYobSwgInRhcmdldF9mcmFtZXJhdGU6ICAgICAgICU4ZCAgJThkICAlOGQgICU4ZFxuIiwKLQkJICAgICAgIGNhbS0+cGFyYW1zLmNvbXByZXNzaW9uVGFyZ2V0LnRhcmdldEZSLCAxLCAzMCwgMTUpOwotCXNlcV9wcmludGYobSwgInRhcmdldF9xdWFsaXR5OiAgICAgICAgICU4ZCAgJThkICAlOGQgICU4ZFxuIiwKLQkJICAgICAgIGNhbS0+cGFyYW1zLmNvbXByZXNzaW9uVGFyZ2V0LnRhcmdldFEsIDEsIDY0LCA1KTsKLQlzZXFfcHJpbnRmKG0sICJ5X3RocmVzaG9sZDogICAgICAgICAgICAlOGQgICU4ZCAgJThkICAlOGRcbiIsCi0JCSAgICAgICBjYW0tPnBhcmFtcy55dXZUaHJlc2hvbGQueVRocmVzaG9sZCwgMCwgMzEsIDYpOwotCXNlcV9wcmludGYobSwgInV2X3RocmVzaG9sZDogICAgICAgICAgICU4ZCAgJThkICAlOGQgICU4ZFxuIiwKLQkJICAgICAgIGNhbS0+cGFyYW1zLnl1dlRocmVzaG9sZC51dlRocmVzaG9sZCwgMCwgMzEsIDYpOwotCXNlcV9wcmludGYobSwgImh5c3RlcmVzaXM6ICAgICAgICAgICAgICU4ZCAgJThkICAlOGQgICU4ZFxuIiwKLQkJICAgICAgIGNhbS0+cGFyYW1zLmNvbXByZXNzaW9uUGFyYW1zLmh5c3RlcmVzaXMsIDAsIDI1NSwgMyk7Ci0Jc2VxX3ByaW50ZihtLCAidGhyZXNob2xkX21heDogICAgICAgICAgJThkICAlOGQgICU4ZCAgJThkXG4iLAotCQkgICAgICAgY2FtLT5wYXJhbXMuY29tcHJlc3Npb25QYXJhbXMudGhyZXNoTWF4LCAwLCAyNTUsIDExKTsKLQlzZXFfcHJpbnRmKG0sICJzbWFsbF9zdGVwOiAgICAgICAgICAgICAlOGQgICU4ZCAgJThkICAlOGRcbiIsCi0JCSAgICAgICBjYW0tPnBhcmFtcy5jb21wcmVzc2lvblBhcmFtcy5zbWFsbFN0ZXAsIDAsIDI1NSwgMSk7Ci0Jc2VxX3ByaW50ZihtLCAibGFyZ2Vfc3RlcDogICAgICAgICAgICAgJThkICAlOGQgICU4ZCAgJThkXG4iLAotCQkgICAgICAgY2FtLT5wYXJhbXMuY29tcHJlc3Npb25QYXJhbXMubGFyZ2VTdGVwLCAwLCAyNTUsIDMpOwotCXNlcV9wcmludGYobSwgImRlY2ltYXRpb25faHlzdGVyZXNpczogICU4ZCAgJThkICAlOGQgICU4ZFxuIiwKLQkJICAgICAgIGNhbS0+cGFyYW1zLmNvbXByZXNzaW9uUGFyYW1zLmRlY2ltYXRpb25IeXN0ZXJlc2lzLAotCQkgICAgICAgMCwgMjU1LCAyKTsKLQlzZXFfcHJpbnRmKG0sICJmcl9kaWZmX3N0ZXBfdGhyZXNoOiAgICAlOGQgICU4ZCAgJThkICAlOGRcbiIsCi0JCSAgICAgICBjYW0tPnBhcmFtcy5jb21wcmVzc2lvblBhcmFtcy5mckRpZmZTdGVwVGhyZXNoLAotCQkgICAgICAgMCwgMjU1LCA1KTsKLQlzZXFfcHJpbnRmKG0sICJxX2RpZmZfc3RlcF90aHJlc2g6ICAgICAlOGQgICU4ZCAgJThkICAlOGRcbiIsCi0JCSAgICAgICBjYW0tPnBhcmFtcy5jb21wcmVzc2lvblBhcmFtcy5xRGlmZlN0ZXBUaHJlc2gsCi0JCSAgICAgICAwLCAyNTUsIDMpOwotCXNlcV9wcmludGYobSwgImRlY2ltYXRpb25fdGhyZXNoX21vZDogICU4ZCAgJThkICAlOGQgICU4ZFxuIiwKLQkJICAgICAgIGNhbS0+cGFyYW1zLmNvbXByZXNzaW9uUGFyYW1zLmRlY2ltYXRpb25UaHJlc2hNb2QsCi0JCSAgICAgICAwLCAyNTUsIDIpOwotCS8qIFFYMyBzcGVjaWZpYyBlbnRyaWVzICovCi0JaWYgKGNhbS0+cGFyYW1zLnF4My5xeDNfZGV0ZWN0ZWQpIHsKLQkJc2VxX3ByaW50ZihtLCAidG9wbGlnaHQ6ICAgICAgICAgICAgICAgJThzICAlOHMgICU4cyAgJThzXG4iLAotCQkJICAgICAgIGNhbS0+cGFyYW1zLnF4My50b3BsaWdodCA/ICJvbiIgOiAib2ZmIiwKLQkJCSAgICAgICAib2ZmIiwgIm9uIiwgIm9mZiIpOwotCQlzZXFfcHJpbnRmKG0sICJib3R0b21saWdodDogICAgICAgICAgICAlOHMgICU4cyAgJThzICAlOHNcbiIsCi0JCQkgICAgICAgY2FtLT5wYXJhbXMucXgzLmJvdHRvbWxpZ2h0ID8gIm9uIiA6ICJvZmYiLAotCQkJICAgICAgICJvZmYiLCAib24iLCAib2ZmIik7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgY3BpYV9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGNwaWFfcHJvY19zaG93LCBQREUoaW5vZGUpLT5kYXRhKTsKLX0KLQotc3RhdGljIGludCBtYXRjaChjaGFyICpjaGVja3N0ciwgY2hhciAqKmJ1ZmZlciwgc2l6ZV90ICpjb3VudCwKLQkJIGludCAqZmluZF9jb2xvbiwgaW50ICplcnIpCi17Ci0JaW50IHJldCwgY29sb25fZm91bmQgPSAxOwotCWludCBsZW4gPSBzdHJsZW4oY2hlY2tzdHIpOwotCXJldCA9IChsZW4gPD0gKmNvdW50ICYmIHN0cm5jbXAoKmJ1ZmZlciwgY2hlY2tzdHIsIGxlbikgPT0gMCk7Ci0JaWYgKHJldCkgewotCQkqYnVmZmVyICs9IGxlbjsKLQkJKmNvdW50IC09IGxlbjsKLQkJaWYgKCpmaW5kX2NvbG9uKSB7Ci0JCQljb2xvbl9mb3VuZCA9IDA7Ci0JCQl3aGlsZSAoKmNvdW50ICYmICgqKmJ1ZmZlciA9PSAnICcgfHwgKipidWZmZXIgPT0gJ1x0JyB8fAotCQkJCQkgICghY29sb25fZm91bmQgJiYgKipidWZmZXIgPT0gJzonKSkpIHsKLQkJCQlpZiAoKipidWZmZXIgPT0gJzonKQotCQkJCQljb2xvbl9mb3VuZCA9IDE7Ci0JCQkJLS0qY291bnQ7Ci0JCQkJKysqYnVmZmVyOwotCQkJfQotCQkJaWYgKCEqY291bnQgfHwgIWNvbG9uX2ZvdW5kKQotCQkJCSplcnIgPSAtRUlOVkFMOwotCQkJKmZpbmRfY29sb24gPSAwOwotCQl9Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGludCB2YWx1ZShjaGFyICoqYnVmZmVyLCBzaXplX3QgKmNvdW50LCBpbnQgKmVycikKLXsKLQljaGFyICpwOwotCXVuc2lnbmVkIGxvbmcgaW50IHJldDsKLQlyZXQgPSBzaW1wbGVfc3RydG91bCgqYnVmZmVyLCAmcCwgMCk7Ci0JaWYgKHAgPT0gKmJ1ZmZlcikKLQkJKmVyciA9IC1FSU5WQUw7Ci0JZWxzZSB7Ci0JCSpjb3VudCAtPSBwIC0gKmJ1ZmZlcjsKLQkJKmJ1ZmZlciA9IHA7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGNwaWFfcHJvY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKLQkJCSAgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zKQotewotCXN0cnVjdCBjYW1fZGF0YSAqY2FtID0gUERFKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpLT5kYXRhOwotCXN0cnVjdCBjYW1fcGFyYW1zIG5ld19wYXJhbXM7Ci0JY2hhciAqcGFnZSwgKmJ1ZmZlcjsKLQlpbnQgcmV0dmFsLCBmaW5kX2NvbG9uOwotCWludCBzaXplID0gY291bnQ7Ci0JdW5zaWduZWQgbG9uZyB2YWwgPSAwOwotCXUzMiBjb21tYW5kX2ZsYWdzID0gMDsKLQl1OCBuZXdfbWFpbnM7Ci0KLQkvKgotCSAqIFRoaXMgY29kZSB0byBjb3B5IGZyb20gYnVmIHRvIHBhZ2UgaXMgc2hhbWVsZXNzbHkgY29waWVkCi0JICogZnJvbSB0aGUgY29teCBkcml2ZXIKLQkgKi8KLQlpZiAoY291bnQgPiBQQUdFX1NJWkUpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjb3VudCBpcyAlenUgPiAlZCEhIVxuIiwgY291bnQsIChpbnQpUEFHRV9TSVpFKTsKLQkJcmV0dXJuIC1FTk9TUEM7Ci0JfQotCi0JaWYgKCEocGFnZSA9IChjaGFyICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpKSkgcmV0dXJuIC1FTk9NRU07Ci0KLQlpZihjb3B5X2Zyb21fdXNlcihwYWdlLCBidWYsIGNvdW50KSkKLQl7Ci0JCXJldHZhbCA9IC1FRkFVTFQ7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmIChwYWdlW2NvdW50LTFdID09ICdcbicpCi0JCXBhZ2VbY291bnQtMV0gPSAnXDAnOwotCWVsc2UgaWYgKGNvdW50IDwgUEFHRV9TSVpFKQotCQlwYWdlW2NvdW50XSA9ICdcMCc7Ci0JZWxzZSBpZiAocGFnZVtjb3VudF0pIHsKLQkJcmV0dmFsID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7Ci0JfQotCi0JYnVmZmVyID0gcGFnZTsKLQotCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNhbS0+cGFyYW1fbG9jaykpCi0JCXJldHVybiAtRVJFU1RBUlRTWVM7Ci0KLQkvKgotCSAqIFNraXAgb3ZlciBsZWFkaW5nIHdoaXRlc3BhY2UKLQkgKi8KLQl3aGlsZSAoY291bnQgJiYgaXNzcGFjZSgqYnVmZmVyKSkgewotCQktLWNvdW50OwotCQkrK2J1ZmZlcjsKLQl9Ci0KLQltZW1jcHkoJm5ld19wYXJhbXMsICZjYW0tPnBhcmFtcywgc2l6ZW9mKHN0cnVjdCBjYW1fcGFyYW1zKSk7Ci0JbmV3X21haW5zID0gY2FtLT5tYWluc0ZyZXE7Ci0KLSNkZWZpbmUgTUFUQ0goeCkgKG1hdGNoKHgsICZidWZmZXIsICZjb3VudCwgJmZpbmRfY29sb24sICZyZXR2YWwpKQotI2RlZmluZSBWQUxVRSAodmFsdWUoJmJ1ZmZlciwmY291bnQsICZyZXR2YWwpKQotI2RlZmluZSBGSVJNV0FSRV9WRVJTSU9OKHgseSkgKG5ld19wYXJhbXMudmVyc2lvbi5maXJtd2FyZVZlcnNpb24gPT0gKHgpICYmIFwKLQkJCSAgICAgICBuZXdfcGFyYW1zLnZlcnNpb24uZmlybXdhcmVSZXZpc2lvbiA9PSAoeSkpCi0KLQlyZXR2YWwgPSAwOwotCXdoaWxlIChjb3VudCAmJiAhcmV0dmFsKSB7Ci0JCWZpbmRfY29sb24gPSAxOwotCQlpZiAoTUFUQ0goImJyaWdodG5lc3MiKSkgewotCQkJaWYgKCFyZXR2YWwpCi0JCQkJdmFsID0gVkFMVUU7Ci0KLQkJCWlmICghcmV0dmFsKSB7Ci0JCQkJaWYgKHZhbCA8PSAxMDApCi0JCQkJCW5ld19wYXJhbXMuY29sb3VyUGFyYW1zLmJyaWdodG5lc3MgPSB2YWw7Ci0JCQkJZWxzZQotCQkJCQlyZXR2YWwgPSAtRUlOVkFMOwotCQkJfQotCQkJY29tbWFuZF9mbGFncyB8PSBDT01NQU5EX1NFVENPTE9VUlBBUkFNUzsKLQkJCWlmKG5ld19wYXJhbXMuZmxpY2tlckNvbnRyb2wuYWxsb3dhYmxlT3ZlckV4cG9zdXJlIDwgMCkKLQkJCQluZXdfcGFyYW1zLmZsaWNrZXJDb250cm9sLmFsbG93YWJsZU92ZXJFeHBvc3VyZSA9Ci0JCQkJCS1maW5kX292ZXJfZXhwb3N1cmUobmV3X3BhcmFtcy5jb2xvdXJQYXJhbXMuYnJpZ2h0bmVzcyk7Ci0JCQlpZihuZXdfcGFyYW1zLmZsaWNrZXJDb250cm9sLmZsaWNrZXJNb2RlICE9IDApCi0JCQkJY29tbWFuZF9mbGFncyB8PSBDT01NQU5EX1NFVEZMSUNLRVJDVFJMOwotCi0JCX0gZWxzZSBpZiAoTUFUQ0goImNvbnRyYXN0IikpIHsKLQkJCWlmICghcmV0dmFsKQotCQkJCXZhbCA9IFZBTFVFOwotCi0JCQlpZiAoIXJldHZhbCkgewotCQkJCWlmICh2YWwgPD0gMTAwKSB7Ci0JCQkJCS8qIGNvbnRyYXN0IGlzIGluIHN0ZXBzIG9mIDgsIHNvIHJvdW5kKi8KLQkJCQkJdmFsID0gKCh2YWwgKyAzKSAvIDgpICogODsKLQkJCQkJLyogMS0wMiBmaXJtd2FyZSBsaW1pdHMgY29udHJhc3QgdG8gODAqLwotCQkJCQlpZiAoRklSTVdBUkVfVkVSU0lPTigxLDIpICYmIHZhbCA+IDgwKQotCQkJCQkJdmFsID0gODA7Ci0KLQkJCQkJbmV3X3BhcmFtcy5jb2xvdXJQYXJhbXMuY29udHJhc3QgPSB2YWw7Ci0JCQkJfSBlbHNlCi0JCQkJCXJldHZhbCA9IC1FSU5WQUw7Ci0JCQl9Ci0JCQljb21tYW5kX2ZsYWdzIHw9IENPTU1BTkRfU0VUQ09MT1VSUEFSQU1TOwotCQl9IGVsc2UgaWYgKE1BVENIKCJzYXR1cmF0aW9uIikpIHsKLQkJCWlmICghcmV0dmFsKQotCQkJCXZhbCA9IFZBTFVFOwotCi0JCQlpZiAoIXJldHZhbCkgewotCQkJCWlmICh2YWwgPD0gMTAwKQotCQkJCQluZXdfcGFyYW1zLmNvbG91clBhcmFtcy5zYXR1cmF0aW9uID0gdmFsOwotCQkJCWVsc2UKLQkJCQkJcmV0dmFsID0gLUVJTlZBTDsKLQkJCX0KLQkJCWNvbW1hbmRfZmxhZ3MgfD0gQ09NTUFORF9TRVRDT0xPVVJQQVJBTVM7Ci0JCX0gZWxzZSBpZiAoTUFUQ0goInNlbnNvcl9mcHMiKSkgewotCQkJaWYgKCFyZXR2YWwpCi0JCQkJdmFsID0gVkFMVUU7Ci0KLQkJCWlmICghcmV0dmFsKSB7Ci0JCQkJLyogZmluZCB2YWx1ZXMgc28gdGhhdCBzZW5zb3JGUFMgaXMgbWluaW1pemVkLAotCQkJCSAqIGJ1dCA+PSB2YWwgKi8KLQkJCQlpZiAodmFsID4gMzApCi0JCQkJCXJldHZhbCA9IC1FSU5WQUw7Ci0JCQkJZWxzZSBpZiAodmFsID4gMjUpIHsKLQkJCQkJbmV3X3BhcmFtcy5zZW5zb3JGcHMuZGl2aXNvciA9IDA7Ci0JCQkJCW5ld19wYXJhbXMuc2Vuc29yRnBzLmJhc2VyYXRlID0gMTsKLQkJCQl9IGVsc2UgaWYgKHZhbCA+IDE1KSB7Ci0JCQkJCW5ld19wYXJhbXMuc2Vuc29yRnBzLmRpdmlzb3IgPSAwOwotCQkJCQluZXdfcGFyYW1zLnNlbnNvckZwcy5iYXNlcmF0ZSA9IDA7Ci0JCQkJfSBlbHNlIGlmICh2YWwgPiAxMikgewotCQkJCQluZXdfcGFyYW1zLnNlbnNvckZwcy5kaXZpc29yID0gMTsKLQkJCQkJbmV3X3BhcmFtcy5zZW5zb3JGcHMuYmFzZXJhdGUgPSAxOwotCQkJCX0gZWxzZSBpZiAodmFsID4gNykgewotCQkJCQluZXdfcGFyYW1zLnNlbnNvckZwcy5kaXZpc29yID0gMTsKLQkJCQkJbmV3X3BhcmFtcy5zZW5zb3JGcHMuYmFzZXJhdGUgPSAwOwotCQkJCX0gZWxzZSBpZiAodmFsID4gNikgewotCQkJCQluZXdfcGFyYW1zLnNlbnNvckZwcy5kaXZpc29yID0gMjsKLQkJCQkJbmV3X3BhcmFtcy5zZW5zb3JGcHMuYmFzZXJhdGUgPSAxOwotCQkJCX0gZWxzZSBpZiAodmFsID4gMykgewotCQkJCQluZXdfcGFyYW1zLnNlbnNvckZwcy5kaXZpc29yID0gMjsKLQkJCQkJbmV3X3BhcmFtcy5zZW5zb3JGcHMuYmFzZXJhdGUgPSAwOwotCQkJCX0gZWxzZSB7Ci0JCQkJCW5ld19wYXJhbXMuc2Vuc29yRnBzLmRpdmlzb3IgPSAzOwotCQkJCQkvKiBFaXRoZXIgYmFzZSByYXRlIHdvdWxkIHdvcmsgaGVyZSAqLwotCQkJCQluZXdfcGFyYW1zLnNlbnNvckZwcy5iYXNlcmF0ZSA9IDE7Ci0JCQkJfQotCQkJCW5ld19wYXJhbXMuZmxpY2tlckNvbnRyb2wuY29hcnNlSnVtcCA9Ci0JCQkJCWZsaWNrZXJfanVtcHNbbmV3X21haW5zXQotCQkJCQlbbmV3X3BhcmFtcy5zZW5zb3JGcHMuYmFzZXJhdGVdCi0JCQkJCVtuZXdfcGFyYW1zLnNlbnNvckZwcy5kaXZpc29yXTsKLQkJCQlpZiAobmV3X3BhcmFtcy5mbGlja2VyQ29udHJvbC5mbGlja2VyTW9kZSkKLQkJCQkJY29tbWFuZF9mbGFncyB8PSBDT01NQU5EX1NFVEZMSUNLRVJDVFJMOwotCQkJfQotCQkJY29tbWFuZF9mbGFncyB8PSBDT01NQU5EX1NFVFNFTlNPUkZQUzsKLQkJCWNhbS0+ZXhwb3N1cmVfc3RhdHVzID0gRVhQT1NVUkVfTk9STUFMOwotCQl9IGVsc2UgaWYgKE1BVENIKCJzdHJlYW1fc3RhcnRfbGluZSIpKSB7Ci0JCQlpZiAoIXJldHZhbCkKLQkJCQl2YWwgPSBWQUxVRTsKLQotCQkJaWYgKCFyZXR2YWwpIHsKLQkJCQlpbnQgbWF4X2xpbmUgPSAyODg7Ci0KLQkJCQlpZiAobmV3X3BhcmFtcy5mb3JtYXQudmlkZW9TaXplID09IFZJREVPU0laRV9RQ0lGKQotCQkJCQltYXhfbGluZSA9IDE0NDsKLQkJCQlpZiAodmFsIDw9IG1heF9saW5lKQotCQkJCQluZXdfcGFyYW1zLnN0cmVhbVN0YXJ0TGluZSA9IHZhbC8yOwotCQkJCWVsc2UKLQkJCQkJcmV0dmFsID0gLUVJTlZBTDsKLQkJCX0KLQkJfSBlbHNlIGlmIChNQVRDSCgic3ViX3NhbXBsZSIpKSB7Ci0JCQlpZiAoIXJldHZhbCAmJiBNQVRDSCgiNDIwIikpCi0JCQkJbmV3X3BhcmFtcy5mb3JtYXQuc3ViU2FtcGxlID0gU1VCU0FNUExFXzQyMDsKLQkJCWVsc2UgaWYgKCFyZXR2YWwgJiYgTUFUQ0goIjQyMiIpKQotCQkJCW5ld19wYXJhbXMuZm9ybWF0LnN1YlNhbXBsZSA9IFNVQlNBTVBMRV80MjI7Ci0JCQllbHNlCi0JCQkJcmV0dmFsID0gLUVJTlZBTDsKLQotCQkJY29tbWFuZF9mbGFncyB8PSBDT01NQU5EX1NFVEZPUk1BVDsKLQkJfSBlbHNlIGlmIChNQVRDSCgieXV2X29yZGVyIikpIHsKLQkJCWlmICghcmV0dmFsICYmIE1BVENIKCJZVVlWIikpCi0JCQkJbmV3X3BhcmFtcy5mb3JtYXQueXV2T3JkZXIgPSBZVVZPUkRFUl9ZVVlWOwotCQkJZWxzZSBpZiAoIXJldHZhbCAmJiBNQVRDSCgiVVlWWSIpKQotCQkJCW5ld19wYXJhbXMuZm9ybWF0Lnl1dk9yZGVyID0gWVVWT1JERVJfVVlWWTsKLQkJCWVsc2UKLQkJCQlyZXR2YWwgPSAtRUlOVkFMOwotCi0JCQljb21tYW5kX2ZsYWdzIHw9IENPTU1BTkRfU0VURk9STUFUOwotCQl9IGVsc2UgaWYgKE1BVENIKCJlY3BfdGltaW5nIikpIHsKLQkJCWlmICghcmV0dmFsICYmIE1BVENIKCJub3JtYWwiKSkKLQkJCQluZXdfcGFyYW1zLmVjcFRpbWluZyA9IDA7Ci0JCQllbHNlIGlmICghcmV0dmFsICYmIE1BVENIKCJzbG93IikpCi0JCQkJbmV3X3BhcmFtcy5lY3BUaW1pbmcgPSAxOwotCQkJZWxzZQotCQkJCXJldHZhbCA9IC1FSU5WQUw7Ci0KLQkJCWNvbW1hbmRfZmxhZ3MgfD0gQ09NTUFORF9TRVRFQ1BUSU1JTkc7Ci0JCX0gZWxzZSBpZiAoTUFUQ0goImNvbG9yX2JhbGFuY2VfbW9kZSIpKSB7Ci0JCQlpZiAoIXJldHZhbCAmJiBNQVRDSCgibWFudWFsIikpCi0JCQkJbmV3X3BhcmFtcy5jb2xvdXJCYWxhbmNlLmJhbGFuY2VNb2RlID0gMzsKLQkJCWVsc2UgaWYgKCFyZXR2YWwgJiYgTUFUQ0goImF1dG8iKSkKLQkJCQluZXdfcGFyYW1zLmNvbG91ckJhbGFuY2UuYmFsYW5jZU1vZGUgPSAyOwotCQkJZWxzZQotCQkJCXJldHZhbCA9IC1FSU5WQUw7Ci0KLQkJCWNvbW1hbmRfZmxhZ3MgfD0gQ09NTUFORF9TRVRDT0xPVVJCQUxBTkNFOwotCQl9IGVsc2UgaWYgKE1BVENIKCJyZWRfZ2FpbiIpKSB7Ci0JCQlpZiAoIXJldHZhbCkKLQkJCQl2YWwgPSBWQUxVRTsKLQotCQkJaWYgKCFyZXR2YWwpIHsKLQkJCQlpZiAodmFsIDw9IDIxMikgewotCQkJCQluZXdfcGFyYW1zLmNvbG91ckJhbGFuY2UucmVkR2FpbiA9IHZhbDsKLQkJCQkJbmV3X3BhcmFtcy5jb2xvdXJCYWxhbmNlLmJhbGFuY2VNb2RlID0gMTsKLQkJCQl9IGVsc2UKLQkJCQkJcmV0dmFsID0gLUVJTlZBTDsKLQkJCX0KLQkJCWNvbW1hbmRfZmxhZ3MgfD0gQ09NTUFORF9TRVRDT0xPVVJCQUxBTkNFOwotCQl9IGVsc2UgaWYgKE1BVENIKCJncmVlbl9nYWluIikpIHsKLQkJCWlmICghcmV0dmFsKQotCQkJCXZhbCA9IFZBTFVFOwotCi0JCQlpZiAoIXJldHZhbCkgewotCQkJCWlmICh2YWwgPD0gMjEyKSB7Ci0JCQkJCW5ld19wYXJhbXMuY29sb3VyQmFsYW5jZS5ncmVlbkdhaW4gPSB2YWw7Ci0JCQkJCW5ld19wYXJhbXMuY29sb3VyQmFsYW5jZS5iYWxhbmNlTW9kZSA9IDE7Ci0JCQkJfSBlbHNlCi0JCQkJCXJldHZhbCA9IC1FSU5WQUw7Ci0JCQl9Ci0JCQljb21tYW5kX2ZsYWdzIHw9IENPTU1BTkRfU0VUQ09MT1VSQkFMQU5DRTsKLQkJfSBlbHNlIGlmIChNQVRDSCgiYmx1ZV9nYWluIikpIHsKLQkJCWlmICghcmV0dmFsKQotCQkJCXZhbCA9IFZBTFVFOwotCi0JCQlpZiAoIXJldHZhbCkgewotCQkJCWlmICh2YWwgPD0gMjEyKSB7Ci0JCQkJCW5ld19wYXJhbXMuY29sb3VyQmFsYW5jZS5ibHVlR2FpbiA9IHZhbDsKLQkJCQkJbmV3X3BhcmFtcy5jb2xvdXJCYWxhbmNlLmJhbGFuY2VNb2RlID0gMTsKLQkJCQl9IGVsc2UKLQkJCQkJcmV0dmFsID0gLUVJTlZBTDsKLQkJCX0KLQkJCWNvbW1hbmRfZmxhZ3MgfD0gQ09NTUFORF9TRVRDT0xPVVJCQUxBTkNFOwotCQl9IGVsc2UgaWYgKE1BVENIKCJtYXhfZ2FpbiIpKSB7Ci0JCQlpZiAoIXJldHZhbCkKLQkJCQl2YWwgPSBWQUxVRTsKLQotCQkJaWYgKCFyZXR2YWwpIHsKLQkJCQkvKiAxLTAyIGZpcm13YXJlIGxpbWl0cyBnYWluIHRvIDIgKi8KLQkJCQlpZiAoRklSTVdBUkVfVkVSU0lPTigxLDIpICYmIHZhbCA+IDIpCi0JCQkJCXZhbCA9IDI7Ci0JCQkJc3dpdGNoKHZhbCkgewotCQkJCWNhc2UgMToKLQkJCQkJbmV3X3BhcmFtcy5leHBvc3VyZS5nYWluTW9kZSA9IDE7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgMjoKLQkJCQkJbmV3X3BhcmFtcy5leHBvc3VyZS5nYWluTW9kZSA9IDI7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgNDoKLQkJCQkJbmV3X3BhcmFtcy5leHBvc3VyZS5nYWluTW9kZSA9IDM7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgODoKLQkJCQkJbmV3X3BhcmFtcy5leHBvc3VyZS5nYWluTW9kZSA9IDQ7Ci0JCQkJCWJyZWFrOwotCQkJCWRlZmF1bHQ6Ci0JCQkJCXJldHZhbCA9IC1FSU5WQUw7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJCWNvbW1hbmRfZmxhZ3MgfD0gQ09NTUFORF9TRVRFWFBPU1VSRTsKLQkJfSBlbHNlIGlmIChNQVRDSCgiZXhwb3N1cmVfbW9kZSIpKSB7Ci0JCQlpZiAoIXJldHZhbCAmJiBNQVRDSCgiYXV0byIpKQotCQkJCW5ld19wYXJhbXMuZXhwb3N1cmUuZXhwTW9kZSA9IDI7Ci0JCQllbHNlIGlmICghcmV0dmFsICYmIE1BVENIKCJtYW51YWwiKSkgewotCQkJCWlmIChuZXdfcGFyYW1zLmV4cG9zdXJlLmV4cE1vZGUgPT0gMikKLQkJCQkJbmV3X3BhcmFtcy5leHBvc3VyZS5leHBNb2RlID0gMzsKLQkJCQlpZihuZXdfcGFyYW1zLmZsaWNrZXJDb250cm9sLmZsaWNrZXJNb2RlICE9IDApCi0JCQkJCWNvbW1hbmRfZmxhZ3MgfD0gQ09NTUFORF9TRVRGTElDS0VSQ1RSTDsKLQkJCQluZXdfcGFyYW1zLmZsaWNrZXJDb250cm9sLmZsaWNrZXJNb2RlID0gMDsKLQkJCX0gZWxzZQotCQkJCXJldHZhbCA9IC1FSU5WQUw7Ci0KLQkJCWNvbW1hbmRfZmxhZ3MgfD0gQ09NTUFORF9TRVRFWFBPU1VSRTsKLQkJfSBlbHNlIGlmIChNQVRDSCgiY2VudHJlX3dlaWdodCIpKSB7Ci0JCQlpZiAoIXJldHZhbCAmJiBNQVRDSCgib24iKSkKLQkJCQluZXdfcGFyYW1zLmV4cG9zdXJlLmNlbnRyZVdlaWdodCA9IDE7Ci0JCQllbHNlIGlmICghcmV0dmFsICYmIE1BVENIKCJvZmYiKSkKLQkJCQluZXdfcGFyYW1zLmV4cG9zdXJlLmNlbnRyZVdlaWdodCA9IDI7Ci0JCQllbHNlCi0JCQkJcmV0dmFsID0gLUVJTlZBTDsKLQotCQkJY29tbWFuZF9mbGFncyB8PSBDT01NQU5EX1NFVEVYUE9TVVJFOwotCQl9IGVsc2UgaWYgKE1BVENIKCJnYWluIikpIHsKLQkJCWlmICghcmV0dmFsKQotCQkJCXZhbCA9IFZBTFVFOwotCi0JCQlpZiAoIXJldHZhbCkgewotCQkJCXN3aXRjaCh2YWwpIHsKLQkJCQljYXNlIDE6Ci0JCQkJCW5ld19wYXJhbXMuZXhwb3N1cmUuZ2FpbiA9IDA7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgMjoKLQkJCQkJbmV3X3BhcmFtcy5leHBvc3VyZS5nYWluID0gMTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSA0OgotCQkJCQluZXdfcGFyYW1zLmV4cG9zdXJlLmdhaW4gPSAyOwotCQkJCQlicmVhazsKLQkJCQljYXNlIDg6Ci0JCQkJCW5ld19wYXJhbXMuZXhwb3N1cmUuZ2FpbiA9IDM7Ci0JCQkJCWJyZWFrOwotCQkJCWRlZmF1bHQ6Ci0JCQkJCXJldHZhbCA9IC1FSU5WQUw7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCQluZXdfcGFyYW1zLmV4cG9zdXJlLmV4cE1vZGUgPSAxOwotCQkJCWlmKG5ld19wYXJhbXMuZmxpY2tlckNvbnRyb2wuZmxpY2tlck1vZGUgIT0gMCkKLQkJCQkJY29tbWFuZF9mbGFncyB8PSBDT01NQU5EX1NFVEZMSUNLRVJDVFJMOwotCQkJCW5ld19wYXJhbXMuZmxpY2tlckNvbnRyb2wuZmxpY2tlck1vZGUgPSAwOwotCQkJCWNvbW1hbmRfZmxhZ3MgfD0gQ09NTUFORF9TRVRFWFBPU1VSRTsKLQkJCQlpZiAobmV3X3BhcmFtcy5leHBvc3VyZS5nYWluID4KLQkJCQkgICAgbmV3X3BhcmFtcy5leHBvc3VyZS5nYWluTW9kZS0xKQotCQkJCQlyZXR2YWwgPSAtRUlOVkFMOwotCQkJfQotCQl9IGVsc2UgaWYgKE1BVENIKCJmaW5lX2V4cCIpKSB7Ci0JCQlpZiAoIXJldHZhbCkKLQkJCQl2YWwgPSBWQUxVRS8yOwotCi0JCQlpZiAoIXJldHZhbCkgewotCQkJCWlmICh2YWwgPCAyNTYpIHsKLQkJCQkJLyogMS0wMiBmaXJtd2FyZSBsaW1pdHMgZmluZUV4cC8yIHRvIDEyNyovCi0JCQkJCWlmIChGSVJNV0FSRV9WRVJTSU9OKDEsMikgJiYgdmFsID4gMTI3KQotCQkJCQkJdmFsID0gMTI3OwotCQkJCQluZXdfcGFyYW1zLmV4cG9zdXJlLmZpbmVFeHAgPSB2YWw7Ci0JCQkJCW5ld19wYXJhbXMuZXhwb3N1cmUuZXhwTW9kZSA9IDE7Ci0JCQkJCWNvbW1hbmRfZmxhZ3MgfD0gQ09NTUFORF9TRVRFWFBPU1VSRTsKLQkJCQkJaWYobmV3X3BhcmFtcy5mbGlja2VyQ29udHJvbC5mbGlja2VyTW9kZSAhPSAwKQotCQkJCQkJY29tbWFuZF9mbGFncyB8PSBDT01NQU5EX1NFVEZMSUNLRVJDVFJMOwotCQkJCQluZXdfcGFyYW1zLmZsaWNrZXJDb250cm9sLmZsaWNrZXJNb2RlID0gMDsKLQkJCQkJY29tbWFuZF9mbGFncyB8PSBDT01NQU5EX1NFVEZMSUNLRVJDVFJMOwotCQkJCX0gZWxzZQotCQkJCQlyZXR2YWwgPSAtRUlOVkFMOwotCQkJfQotCQl9IGVsc2UgaWYgKE1BVENIKCJjb2Fyc2VfZXhwIikpIHsKLQkJCWlmICghcmV0dmFsKQotCQkJCXZhbCA9IFZBTFVFOwotCi0JCQlpZiAoIXJldHZhbCkgewotCQkJCWlmICh2YWwgPD0gTUFYX0VYUCkgewotCQkJCQlpZiAoRklSTVdBUkVfVkVSU0lPTigxLDIpICYmCi0JCQkJCSAgICB2YWwgPiBNQVhfRVhQXzEwMikKLQkJCQkJCXZhbCA9IE1BWF9FWFBfMTAyOwotCQkJCQluZXdfcGFyYW1zLmV4cG9zdXJlLmNvYXJzZUV4cExvID0KLQkJCQkJCXZhbCAmIDB4ZmY7Ci0JCQkJCW5ld19wYXJhbXMuZXhwb3N1cmUuY29hcnNlRXhwSGkgPQotCQkJCQkJdmFsID4+IDg7Ci0JCQkJCW5ld19wYXJhbXMuZXhwb3N1cmUuZXhwTW9kZSA9IDE7Ci0JCQkJCWNvbW1hbmRfZmxhZ3MgfD0gQ09NTUFORF9TRVRFWFBPU1VSRTsKLQkJCQkJaWYobmV3X3BhcmFtcy5mbGlja2VyQ29udHJvbC5mbGlja2VyTW9kZSAhPSAwKQotCQkJCQkJY29tbWFuZF9mbGFncyB8PSBDT01NQU5EX1NFVEZMSUNLRVJDVFJMOwotCQkJCQluZXdfcGFyYW1zLmZsaWNrZXJDb250cm9sLmZsaWNrZXJNb2RlID0gMDsKLQkJCQkJY29tbWFuZF9mbGFncyB8PSBDT01NQU5EX1NFVEZMSUNLRVJDVFJMOwotCQkJCX0gZWxzZQotCQkJCQlyZXR2YWwgPSAtRUlOVkFMOwotCQkJfQotCQl9IGVsc2UgaWYgKE1BVENIKCJyZWRfY29tcCIpKSB7Ci0JCQlpZiAoIXJldHZhbCkKLQkJCQl2YWwgPSBWQUxVRTsKLQotCQkJaWYgKCFyZXR2YWwpIHsKLQkJCQlpZiAodmFsID49IENPTVBfUkVEICYmIHZhbCA8PSAyNTUpIHsKLQkJCQkJbmV3X3BhcmFtcy5leHBvc3VyZS5yZWRDb21wID0gdmFsOwotCQkJCQluZXdfcGFyYW1zLmV4cG9zdXJlLmNvbXBNb2RlID0gMTsKLQkJCQkJY29tbWFuZF9mbGFncyB8PSBDT01NQU5EX1NFVEVYUE9TVVJFOwotCQkJCX0gZWxzZQotCQkJCQlyZXR2YWwgPSAtRUlOVkFMOwotCQkJfQotCQl9IGVsc2UgaWYgKE1BVENIKCJncmVlbjFfY29tcCIpKSB7Ci0JCQlpZiAoIXJldHZhbCkKLQkJCQl2YWwgPSBWQUxVRTsKLQotCQkJaWYgKCFyZXR2YWwpIHsKLQkJCQlpZiAodmFsID49IENPTVBfR1JFRU4xICYmIHZhbCA8PSAyNTUpIHsKLQkJCQkJbmV3X3BhcmFtcy5leHBvc3VyZS5ncmVlbjFDb21wID0gdmFsOwotCQkJCQluZXdfcGFyYW1zLmV4cG9zdXJlLmNvbXBNb2RlID0gMTsKLQkJCQkJY29tbWFuZF9mbGFncyB8PSBDT01NQU5EX1NFVEVYUE9TVVJFOwotCQkJCX0gZWxzZQotCQkJCQlyZXR2YWwgPSAtRUlOVkFMOwotCQkJfQotCQl9IGVsc2UgaWYgKE1BVENIKCJncmVlbjJfY29tcCIpKSB7Ci0JCQlpZiAoIXJldHZhbCkKLQkJCQl2YWwgPSBWQUxVRTsKLQotCQkJaWYgKCFyZXR2YWwpIHsKLQkJCQlpZiAodmFsID49IENPTVBfR1JFRU4yICYmIHZhbCA8PSAyNTUpIHsKLQkJCQkJbmV3X3BhcmFtcy5leHBvc3VyZS5ncmVlbjJDb21wID0gdmFsOwotCQkJCQluZXdfcGFyYW1zLmV4cG9zdXJlLmNvbXBNb2RlID0gMTsKLQkJCQkJY29tbWFuZF9mbGFncyB8PSBDT01NQU5EX1NFVEVYUE9TVVJFOwotCQkJCX0gZWxzZQotCQkJCQlyZXR2YWwgPSAtRUlOVkFMOwotCQkJfQotCQl9IGVsc2UgaWYgKE1BVENIKCJibHVlX2NvbXAiKSkgewotCQkJaWYgKCFyZXR2YWwpCi0JCQkJdmFsID0gVkFMVUU7Ci0KLQkJCWlmICghcmV0dmFsKSB7Ci0JCQkJaWYgKHZhbCA+PSBDT01QX0JMVUUgJiYgdmFsIDw9IDI1NSkgewotCQkJCQluZXdfcGFyYW1zLmV4cG9zdXJlLmJsdWVDb21wID0gdmFsOwotCQkJCQluZXdfcGFyYW1zLmV4cG9zdXJlLmNvbXBNb2RlID0gMTsKLQkJCQkJY29tbWFuZF9mbGFncyB8PSBDT01NQU5EX1NFVEVYUE9TVVJFOwotCQkJCX0gZWxzZQotCQkJCQlyZXR2YWwgPSAtRUlOVkFMOwotCQkJfQotCQl9IGVsc2UgaWYgKE1BVENIKCJhcGNvcl9nYWluMSIpKSB7Ci0JCQlpZiAoIXJldHZhbCkKLQkJCQl2YWwgPSBWQUxVRTsKLQotCQkJaWYgKCFyZXR2YWwpIHsKLQkJCQljb21tYW5kX2ZsYWdzIHw9IENPTU1BTkRfU0VUQVBDT1I7Ci0JCQkJaWYgKHZhbCA8PSAweGZmKQotCQkJCQluZXdfcGFyYW1zLmFwY29yLmdhaW4xID0gdmFsOwotCQkJCWVsc2UKLQkJCQkJcmV0dmFsID0gLUVJTlZBTDsKLQkJCX0KLQkJfSBlbHNlIGlmIChNQVRDSCgiYXBjb3JfZ2FpbjIiKSkgewotCQkJaWYgKCFyZXR2YWwpCi0JCQkJdmFsID0gVkFMVUU7Ci0KLQkJCWlmICghcmV0dmFsKSB7Ci0JCQkJY29tbWFuZF9mbGFncyB8PSBDT01NQU5EX1NFVEFQQ09SOwotCQkJCWlmICh2YWwgPD0gMHhmZikKLQkJCQkJbmV3X3BhcmFtcy5hcGNvci5nYWluMiA9IHZhbDsKLQkJCQllbHNlCi0JCQkJCXJldHZhbCA9IC1FSU5WQUw7Ci0JCQl9Ci0JCX0gZWxzZSBpZiAoTUFUQ0goImFwY29yX2dhaW40IikpIHsKLQkJCWlmICghcmV0dmFsKQotCQkJCXZhbCA9IFZBTFVFOwotCi0JCQlpZiAoIXJldHZhbCkgewotCQkJCWNvbW1hbmRfZmxhZ3MgfD0gQ09NTUFORF9TRVRBUENPUjsKLQkJCQlpZiAodmFsIDw9IDB4ZmYpCi0JCQkJCW5ld19wYXJhbXMuYXBjb3IuZ2FpbjQgPSB2YWw7Ci0JCQkJZWxzZQotCQkJCQlyZXR2YWwgPSAtRUlOVkFMOwotCQkJfQotCQl9IGVsc2UgaWYgKE1BVENIKCJhcGNvcl9nYWluOCIpKSB7Ci0JCQlpZiAoIXJldHZhbCkKLQkJCQl2YWwgPSBWQUxVRTsKLQotCQkJaWYgKCFyZXR2YWwpIHsKLQkJCQljb21tYW5kX2ZsYWdzIHw9IENPTU1BTkRfU0VUQVBDT1I7Ci0JCQkJaWYgKHZhbCA8PSAweGZmKQotCQkJCQluZXdfcGFyYW1zLmFwY29yLmdhaW44ID0gdmFsOwotCQkJCWVsc2UKLQkJCQkJcmV0dmFsID0gLUVJTlZBTDsKLQkJCX0KLQkJfSBlbHNlIGlmIChNQVRDSCgidmxfb2Zmc2V0X2dhaW4xIikpIHsKLQkJCWlmICghcmV0dmFsKQotCQkJCXZhbCA9IFZBTFVFOwotCi0JCQlpZiAoIXJldHZhbCkgewotCQkJCWlmICh2YWwgPD0gMHhmZikKLQkJCQkJbmV3X3BhcmFtcy52bE9mZnNldC5nYWluMSA9IHZhbDsKLQkJCQllbHNlCi0JCQkJCXJldHZhbCA9IC1FSU5WQUw7Ci0JCQl9Ci0JCQljb21tYW5kX2ZsYWdzIHw9IENPTU1BTkRfU0VUVkxPRkZTRVQ7Ci0JCX0gZWxzZSBpZiAoTUFUQ0goInZsX29mZnNldF9nYWluMiIpKSB7Ci0JCQlpZiAoIXJldHZhbCkKLQkJCQl2YWwgPSBWQUxVRTsKLQotCQkJaWYgKCFyZXR2YWwpIHsKLQkJCQlpZiAodmFsIDw9IDB4ZmYpCi0JCQkJCW5ld19wYXJhbXMudmxPZmZzZXQuZ2FpbjIgPSB2YWw7Ci0JCQkJZWxzZQotCQkJCQlyZXR2YWwgPSAtRUlOVkFMOwotCQkJfQotCQkJY29tbWFuZF9mbGFncyB8PSBDT01NQU5EX1NFVFZMT0ZGU0VUOwotCQl9IGVsc2UgaWYgKE1BVENIKCJ2bF9vZmZzZXRfZ2FpbjQiKSkgewotCQkJaWYgKCFyZXR2YWwpCi0JCQkJdmFsID0gVkFMVUU7Ci0KLQkJCWlmICghcmV0dmFsKSB7Ci0JCQkJaWYgKHZhbCA8PSAweGZmKQotCQkJCQluZXdfcGFyYW1zLnZsT2Zmc2V0LmdhaW40ID0gdmFsOwotCQkJCWVsc2UKLQkJCQkJcmV0dmFsID0gLUVJTlZBTDsKLQkJCX0KLQkJCWNvbW1hbmRfZmxhZ3MgfD0gQ09NTUFORF9TRVRWTE9GRlNFVDsKLQkJfSBlbHNlIGlmIChNQVRDSCgidmxfb2Zmc2V0X2dhaW44IikpIHsKLQkJCWlmICghcmV0dmFsKQotCQkJCXZhbCA9IFZBTFVFOwotCi0JCQlpZiAoIXJldHZhbCkgewotCQkJCWlmICh2YWwgPD0gMHhmZikKLQkJCQkJbmV3X3BhcmFtcy52bE9mZnNldC5nYWluOCA9IHZhbDsKLQkJCQllbHNlCi0JCQkJCXJldHZhbCA9IC1FSU5WQUw7Ci0JCQl9Ci0JCQljb21tYW5kX2ZsYWdzIHw9IENPTU1BTkRfU0VUVkxPRkZTRVQ7Ci0JCX0gZWxzZSBpZiAoTUFUQ0goImZsaWNrZXJfY29udHJvbCIpKSB7Ci0JCQlpZiAoIXJldHZhbCAmJiBNQVRDSCgib24iKSkgewotCQkJCXNldF9mbGlja2VyKCZuZXdfcGFyYW1zLCAmY29tbWFuZF9mbGFncywgMSk7Ci0JCQl9IGVsc2UgaWYgKCFyZXR2YWwgJiYgTUFUQ0goIm9mZiIpKSB7Ci0JCQkJc2V0X2ZsaWNrZXIoJm5ld19wYXJhbXMsICZjb21tYW5kX2ZsYWdzLCAwKTsKLQkJCX0gZWxzZQotCQkJCXJldHZhbCA9IC1FSU5WQUw7Ci0KLQkJCWNvbW1hbmRfZmxhZ3MgfD0gQ09NTUFORF9TRVRGTElDS0VSQ1RSTDsKLQkJfSBlbHNlIGlmIChNQVRDSCgibWFpbnNfZnJlcXVlbmN5IikpIHsKLQkJCWlmICghcmV0dmFsICYmIE1BVENIKCI1MCIpKSB7Ci0JCQkJbmV3X21haW5zID0gMDsKLQkJCQluZXdfcGFyYW1zLmZsaWNrZXJDb250cm9sLmNvYXJzZUp1bXAgPQotCQkJCQlmbGlja2VyX2p1bXBzW25ld19tYWluc10KLQkJCQkJW25ld19wYXJhbXMuc2Vuc29yRnBzLmJhc2VyYXRlXQotCQkJCQlbbmV3X3BhcmFtcy5zZW5zb3JGcHMuZGl2aXNvcl07Ci0JCQkJaWYgKG5ld19wYXJhbXMuZmxpY2tlckNvbnRyb2wuZmxpY2tlck1vZGUpCi0JCQkJCWNvbW1hbmRfZmxhZ3MgfD0gQ09NTUFORF9TRVRGTElDS0VSQ1RSTDsKLQkJCX0gZWxzZSBpZiAoIXJldHZhbCAmJiBNQVRDSCgiNjAiKSkgewotCQkJCW5ld19tYWlucyA9IDE7Ci0JCQkJbmV3X3BhcmFtcy5mbGlja2VyQ29udHJvbC5jb2Fyc2VKdW1wID0KLQkJCQkJZmxpY2tlcl9qdW1wc1tuZXdfbWFpbnNdCi0JCQkJCVtuZXdfcGFyYW1zLnNlbnNvckZwcy5iYXNlcmF0ZV0KLQkJCQkJW25ld19wYXJhbXMuc2Vuc29yRnBzLmRpdmlzb3JdOwotCQkJCWlmIChuZXdfcGFyYW1zLmZsaWNrZXJDb250cm9sLmZsaWNrZXJNb2RlKQotCQkJCQljb21tYW5kX2ZsYWdzIHw9IENPTU1BTkRfU0VURkxJQ0tFUkNUUkw7Ci0JCQl9IGVsc2UKLQkJCQlyZXR2YWwgPSAtRUlOVkFMOwotCQl9IGVsc2UgaWYgKE1BVENIKCJhbGxvd2FibGVfb3ZlcmV4cG9zdXJlIikpIHsKLQkJCWlmICghcmV0dmFsICYmIE1BVENIKCJhdXRvIikpIHsKLQkJCQluZXdfcGFyYW1zLmZsaWNrZXJDb250cm9sLmFsbG93YWJsZU92ZXJFeHBvc3VyZSA9Ci0JCQkJCS1maW5kX292ZXJfZXhwb3N1cmUobmV3X3BhcmFtcy5jb2xvdXJQYXJhbXMuYnJpZ2h0bmVzcyk7Ci0JCQkJaWYobmV3X3BhcmFtcy5mbGlja2VyQ29udHJvbC5mbGlja2VyTW9kZSAhPSAwKQotCQkJCQljb21tYW5kX2ZsYWdzIHw9IENPTU1BTkRfU0VURkxJQ0tFUkNUUkw7Ci0JCQl9IGVsc2UgewotCQkJCWlmICghcmV0dmFsKQotCQkJCQl2YWwgPSBWQUxVRTsKLQotCQkJCWlmICghcmV0dmFsKSB7Ci0JCQkJCWlmICh2YWwgPD0gMHhmZikgewotCQkJCQkJbmV3X3BhcmFtcy5mbGlja2VyQ29udHJvbC4KLQkJCQkJCQlhbGxvd2FibGVPdmVyRXhwb3N1cmUgPSB2YWw7Ci0JCQkJCQlpZihuZXdfcGFyYW1zLmZsaWNrZXJDb250cm9sLmZsaWNrZXJNb2RlICE9IDApCi0JCQkJCQkJY29tbWFuZF9mbGFncyB8PSBDT01NQU5EX1NFVEZMSUNLRVJDVFJMOwotCQkJCQl9IGVsc2UKLQkJCQkJCXJldHZhbCA9IC1FSU5WQUw7Ci0JCQkJfQotCQkJfQotCQl9IGVsc2UgaWYgKE1BVENIKCJjb21wcmVzc2lvbl9tb2RlIikpIHsKLQkJCWlmICghcmV0dmFsICYmIE1BVENIKCJub25lIikpCi0JCQkJbmV3X3BhcmFtcy5jb21wcmVzc2lvbi5tb2RlID0KLQkJCQkJQ1BJQV9DT01QUkVTU0lPTl9OT05FOwotCQkJZWxzZSBpZiAoIXJldHZhbCAmJiBNQVRDSCgiYXV0byIpKQotCQkJCW5ld19wYXJhbXMuY29tcHJlc3Npb24ubW9kZSA9Ci0JCQkJCUNQSUFfQ09NUFJFU1NJT05fQVVUTzsKLQkJCWVsc2UgaWYgKCFyZXR2YWwgJiYgTUFUQ0goIm1hbnVhbCIpKQotCQkJCW5ld19wYXJhbXMuY29tcHJlc3Npb24ubW9kZSA9Ci0JCQkJCUNQSUFfQ09NUFJFU1NJT05fTUFOVUFMOwotCQkJZWxzZQotCQkJCXJldHZhbCA9IC1FSU5WQUw7Ci0KLQkJCWNvbW1hbmRfZmxhZ3MgfD0gQ09NTUFORF9TRVRDT01QUkVTU0lPTjsKLQkJfSBlbHNlIGlmIChNQVRDSCgiZGVjaW1hdGlvbl9lbmFibGUiKSkgewotCQkJaWYgKCFyZXR2YWwgJiYgTUFUQ0goIm9mZiIpKQotCQkJCW5ld19wYXJhbXMuY29tcHJlc3Npb24uZGVjaW1hdGlvbiA9IDA7Ci0JCQllbHNlIGlmICghcmV0dmFsICYmIE1BVENIKCJvbiIpKQotCQkJCW5ld19wYXJhbXMuY29tcHJlc3Npb24uZGVjaW1hdGlvbiA9IDE7Ci0JCQllbHNlCi0JCQkJcmV0dmFsID0gLUVJTlZBTDsKLQotCQkJY29tbWFuZF9mbGFncyB8PSBDT01NQU5EX1NFVENPTVBSRVNTSU9OOwotCQl9IGVsc2UgaWYgKE1BVENIKCJjb21wcmVzc2lvbl90YXJnZXQiKSkgewotCQkJaWYgKCFyZXR2YWwgJiYgTUFUQ0goInF1YWxpdHkiKSkKLQkJCQluZXdfcGFyYW1zLmNvbXByZXNzaW9uVGFyZ2V0LmZyVGFyZ2V0aW5nID0KLQkJCQkJQ1BJQV9DT01QUkVTU0lPTl9UQVJHRVRfUVVBTElUWTsKLQkJCWVsc2UgaWYgKCFyZXR2YWwgJiYgTUFUQ0goImZyYW1lcmF0ZSIpKQotCQkJCW5ld19wYXJhbXMuY29tcHJlc3Npb25UYXJnZXQuZnJUYXJnZXRpbmcgPQotCQkJCQlDUElBX0NPTVBSRVNTSU9OX1RBUkdFVF9GUkFNRVJBVEU7Ci0JCQllbHNlCi0JCQkJcmV0dmFsID0gLUVJTlZBTDsKLQotCQkJY29tbWFuZF9mbGFncyB8PSBDT01NQU5EX1NFVENPTVBSRVNTSU9OVEFSR0VUOwotCQl9IGVsc2UgaWYgKE1BVENIKCJ0YXJnZXRfZnJhbWVyYXRlIikpIHsKLQkJCWlmICghcmV0dmFsKQotCQkJCXZhbCA9IFZBTFVFOwotCi0JCQlpZiAoIXJldHZhbCkgewotCQkJCWlmKHZhbCA+IDAgJiYgdmFsIDw9IDMwKQotCQkJCQluZXdfcGFyYW1zLmNvbXByZXNzaW9uVGFyZ2V0LnRhcmdldEZSID0gdmFsOwotCQkJCWVsc2UKLQkJCQkJcmV0dmFsID0gLUVJTlZBTDsKLQkJCX0KLQkJCWNvbW1hbmRfZmxhZ3MgfD0gQ09NTUFORF9TRVRDT01QUkVTU0lPTlRBUkdFVDsKLQkJfSBlbHNlIGlmIChNQVRDSCgidGFyZ2V0X3F1YWxpdHkiKSkgewotCQkJaWYgKCFyZXR2YWwpCi0JCQkJdmFsID0gVkFMVUU7Ci0KLQkJCWlmICghcmV0dmFsKSB7Ci0JCQkJaWYodmFsID4gMCAmJiB2YWwgPD0gNjQpCi0JCQkJCW5ld19wYXJhbXMuY29tcHJlc3Npb25UYXJnZXQudGFyZ2V0USA9IHZhbDsKLQkJCQllbHNlCi0JCQkJCXJldHZhbCA9IC1FSU5WQUw7Ci0JCQl9Ci0JCQljb21tYW5kX2ZsYWdzIHw9IENPTU1BTkRfU0VUQ09NUFJFU1NJT05UQVJHRVQ7Ci0JCX0gZWxzZSBpZiAoTUFUQ0goInlfdGhyZXNob2xkIikpIHsKLQkJCWlmICghcmV0dmFsKQotCQkJCXZhbCA9IFZBTFVFOwotCi0JCQlpZiAoIXJldHZhbCkgewotCQkJCWlmICh2YWwgPCAzMikKLQkJCQkJbmV3X3BhcmFtcy55dXZUaHJlc2hvbGQueVRocmVzaG9sZCA9IHZhbDsKLQkJCQllbHNlCi0JCQkJCXJldHZhbCA9IC1FSU5WQUw7Ci0JCQl9Ci0JCQljb21tYW5kX2ZsYWdzIHw9IENPTU1BTkRfU0VUWVVWVEhSRVNIOwotCQl9IGVsc2UgaWYgKE1BVENIKCJ1dl90aHJlc2hvbGQiKSkgewotCQkJaWYgKCFyZXR2YWwpCi0JCQkJdmFsID0gVkFMVUU7Ci0KLQkJCWlmICghcmV0dmFsKSB7Ci0JCQkJaWYgKHZhbCA8IDMyKQotCQkJCQluZXdfcGFyYW1zLnl1dlRocmVzaG9sZC51dlRocmVzaG9sZCA9IHZhbDsKLQkJCQllbHNlCi0JCQkJCXJldHZhbCA9IC1FSU5WQUw7Ci0JCQl9Ci0JCQljb21tYW5kX2ZsYWdzIHw9IENPTU1BTkRfU0VUWVVWVEhSRVNIOwotCQl9IGVsc2UgaWYgKE1BVENIKCJoeXN0ZXJlc2lzIikpIHsKLQkJCWlmICghcmV0dmFsKQotCQkJCXZhbCA9IFZBTFVFOwotCi0JCQlpZiAoIXJldHZhbCkgewotCQkJCWlmICh2YWwgPD0gMHhmZikKLQkJCQkJbmV3X3BhcmFtcy5jb21wcmVzc2lvblBhcmFtcy5oeXN0ZXJlc2lzID0gdmFsOwotCQkJCWVsc2UKLQkJCQkJcmV0dmFsID0gLUVJTlZBTDsKLQkJCX0KLQkJCWNvbW1hbmRfZmxhZ3MgfD0gQ09NTUFORF9TRVRDT01QUkVTU0lPTlBBUkFNUzsKLQkJfSBlbHNlIGlmIChNQVRDSCgidGhyZXNob2xkX21heCIpKSB7Ci0JCQlpZiAoIXJldHZhbCkKLQkJCQl2YWwgPSBWQUxVRTsKLQotCQkJaWYgKCFyZXR2YWwpIHsKLQkJCQlpZiAodmFsIDw9IDB4ZmYpCi0JCQkJCW5ld19wYXJhbXMuY29tcHJlc3Npb25QYXJhbXMudGhyZXNoTWF4ID0gdmFsOwotCQkJCWVsc2UKLQkJCQkJcmV0dmFsID0gLUVJTlZBTDsKLQkJCX0KLQkJCWNvbW1hbmRfZmxhZ3MgfD0gQ09NTUFORF9TRVRDT01QUkVTU0lPTlBBUkFNUzsKLQkJfSBlbHNlIGlmIChNQVRDSCgic21hbGxfc3RlcCIpKSB7Ci0JCQlpZiAoIXJldHZhbCkKLQkJCQl2YWwgPSBWQUxVRTsKLQotCQkJaWYgKCFyZXR2YWwpIHsKLQkJCQlpZiAodmFsIDw9IDB4ZmYpCi0JCQkJCW5ld19wYXJhbXMuY29tcHJlc3Npb25QYXJhbXMuc21hbGxTdGVwID0gdmFsOwotCQkJCWVsc2UKLQkJCQkJcmV0dmFsID0gLUVJTlZBTDsKLQkJCX0KLQkJCWNvbW1hbmRfZmxhZ3MgfD0gQ09NTUFORF9TRVRDT01QUkVTU0lPTlBBUkFNUzsKLQkJfSBlbHNlIGlmIChNQVRDSCgibGFyZ2Vfc3RlcCIpKSB7Ci0JCQlpZiAoIXJldHZhbCkKLQkJCQl2YWwgPSBWQUxVRTsKLQotCQkJaWYgKCFyZXR2YWwpIHsKLQkJCQlpZiAodmFsIDw9IDB4ZmYpCi0JCQkJCW5ld19wYXJhbXMuY29tcHJlc3Npb25QYXJhbXMubGFyZ2VTdGVwID0gdmFsOwotCQkJCWVsc2UKLQkJCQkJcmV0dmFsID0gLUVJTlZBTDsKLQkJCX0KLQkJCWNvbW1hbmRfZmxhZ3MgfD0gQ09NTUFORF9TRVRDT01QUkVTU0lPTlBBUkFNUzsKLQkJfSBlbHNlIGlmIChNQVRDSCgiZGVjaW1hdGlvbl9oeXN0ZXJlc2lzIikpIHsKLQkJCWlmICghcmV0dmFsKQotCQkJCXZhbCA9IFZBTFVFOwotCi0JCQlpZiAoIXJldHZhbCkgewotCQkJCWlmICh2YWwgPD0gMHhmZikKLQkJCQkJbmV3X3BhcmFtcy5jb21wcmVzc2lvblBhcmFtcy5kZWNpbWF0aW9uSHlzdGVyZXNpcyA9IHZhbDsKLQkJCQllbHNlCi0JCQkJCXJldHZhbCA9IC1FSU5WQUw7Ci0JCQl9Ci0JCQljb21tYW5kX2ZsYWdzIHw9IENPTU1BTkRfU0VUQ09NUFJFU1NJT05QQVJBTVM7Ci0JCX0gZWxzZSBpZiAoTUFUQ0goImZyX2RpZmZfc3RlcF90aHJlc2giKSkgewotCQkJaWYgKCFyZXR2YWwpCi0JCQkJdmFsID0gVkFMVUU7Ci0KLQkJCWlmICghcmV0dmFsKSB7Ci0JCQkJaWYgKHZhbCA8PSAweGZmKQotCQkJCQluZXdfcGFyYW1zLmNvbXByZXNzaW9uUGFyYW1zLmZyRGlmZlN0ZXBUaHJlc2ggPSB2YWw7Ci0JCQkJZWxzZQotCQkJCQlyZXR2YWwgPSAtRUlOVkFMOwotCQkJfQotCQkJY29tbWFuZF9mbGFncyB8PSBDT01NQU5EX1NFVENPTVBSRVNTSU9OUEFSQU1TOwotCQl9IGVsc2UgaWYgKE1BVENIKCJxX2RpZmZfc3RlcF90aHJlc2giKSkgewotCQkJaWYgKCFyZXR2YWwpCi0JCQkJdmFsID0gVkFMVUU7Ci0KLQkJCWlmICghcmV0dmFsKSB7Ci0JCQkJaWYgKHZhbCA8PSAweGZmKQotCQkJCQluZXdfcGFyYW1zLmNvbXByZXNzaW9uUGFyYW1zLnFEaWZmU3RlcFRocmVzaCA9IHZhbDsKLQkJCQllbHNlCi0JCQkJCXJldHZhbCA9IC1FSU5WQUw7Ci0JCQl9Ci0JCQljb21tYW5kX2ZsYWdzIHw9IENPTU1BTkRfU0VUQ09NUFJFU1NJT05QQVJBTVM7Ci0JCX0gZWxzZSBpZiAoTUFUQ0goImRlY2ltYXRpb25fdGhyZXNoX21vZCIpKSB7Ci0JCQlpZiAoIXJldHZhbCkKLQkJCQl2YWwgPSBWQUxVRTsKLQotCQkJaWYgKCFyZXR2YWwpIHsKLQkJCQlpZiAodmFsIDw9IDB4ZmYpCi0JCQkJCW5ld19wYXJhbXMuY29tcHJlc3Npb25QYXJhbXMuZGVjaW1hdGlvblRocmVzaE1vZCA9IHZhbDsKLQkJCQllbHNlCi0JCQkJCXJldHZhbCA9IC1FSU5WQUw7Ci0JCQl9Ci0JCQljb21tYW5kX2ZsYWdzIHw9IENPTU1BTkRfU0VUQ09NUFJFU1NJT05QQVJBTVM7Ci0JCX0gZWxzZSBpZiAoTUFUQ0goInRvcGxpZ2h0IikpIHsKLQkJCWlmICghcmV0dmFsICYmIE1BVENIKCJvbiIpKQotCQkJCW5ld19wYXJhbXMucXgzLnRvcGxpZ2h0ID0gMTsKLQkJCWVsc2UgaWYgKCFyZXR2YWwgJiYgTUFUQ0goIm9mZiIpKQotCQkJCW5ld19wYXJhbXMucXgzLnRvcGxpZ2h0ID0gMDsKLQkJCWVsc2UKLQkJCQlyZXR2YWwgPSAtRUlOVkFMOwotCQkJY29tbWFuZF9mbGFncyB8PSBDT01NQU5EX1NFVExJR0hUUzsKLQkJfSBlbHNlIGlmIChNQVRDSCgiYm90dG9tbGlnaHQiKSkgewotCQkJaWYgKCFyZXR2YWwgJiYgTUFUQ0goIm9uIikpCi0JCQkJbmV3X3BhcmFtcy5xeDMuYm90dG9tbGlnaHQgPSAxOwotCQkJZWxzZSBpZiAoIXJldHZhbCAmJiBNQVRDSCgib2ZmIikpCi0JCQkJbmV3X3BhcmFtcy5xeDMuYm90dG9tbGlnaHQgPSAwOwotCQkJZWxzZQotCQkJCXJldHZhbCA9IC1FSU5WQUw7Ci0JCQljb21tYW5kX2ZsYWdzIHw9IENPTU1BTkRfU0VUTElHSFRTOwotCQl9IGVsc2UgewotCQkJREJHKCJObyBtYXRjaCBmb3VuZFxuIik7Ci0JCQlyZXR2YWwgPSAtRUlOVkFMOwotCQl9Ci0KLQkJaWYgKCFyZXR2YWwpIHsKLQkJCXdoaWxlIChjb3VudCAmJiBpc3NwYWNlKCpidWZmZXIpICYmICpidWZmZXIgIT0gJ1xuJykgewotCQkJCS0tY291bnQ7Ci0JCQkJKytidWZmZXI7Ci0JCQl9Ci0JCQlpZiAoY291bnQpIHsKLQkJCQlpZiAoKmJ1ZmZlciA9PSAnXDAnICYmIGNvdW50ICE9IDEpCi0JCQkJCXJldHZhbCA9IC1FSU5WQUw7Ci0JCQkJZWxzZSBpZiAoKmJ1ZmZlciAhPSAnXG4nICYmICpidWZmZXIgIT0gJzsnICYmCi0JCQkJCSAqYnVmZmVyICE9ICdcMCcpCi0JCQkJCXJldHZhbCA9IC1FSU5WQUw7Ci0JCQkJZWxzZSB7Ci0JCQkJCS0tY291bnQ7Ci0JCQkJCSsrYnVmZmVyOwotCQkJCX0KLQkJCX0KLQkJfQotCX0KLSN1bmRlZiBNQVRDSAotI3VuZGVmIFZBTFVFCi0jdW5kZWYgRklSTVdBUkVfVkVSU0lPTgotCWlmICghcmV0dmFsKSB7Ci0JCWlmIChjb21tYW5kX2ZsYWdzICYgQ09NTUFORF9TRVRDT0xPVVJQQVJBTVMpIHsKLQkJCS8qIEFkanVzdCBjYW0tPnZwIHRvIHJlZmxlY3QgdGhlc2UgY2hhbmdlcyAqLwotCQkJY2FtLT52cC5icmlnaHRuZXNzID0KLQkJCQluZXdfcGFyYW1zLmNvbG91clBhcmFtcy5icmlnaHRuZXNzKjY1NTM1LzEwMDsKLQkJCWNhbS0+dnAuY29udHJhc3QgPQotCQkJCW5ld19wYXJhbXMuY29sb3VyUGFyYW1zLmNvbnRyYXN0KjY1NTM1LzEwMDsKLQkJCWNhbS0+dnAuY29sb3VyID0KLQkJCQluZXdfcGFyYW1zLmNvbG91clBhcmFtcy5zYXR1cmF0aW9uKjY1NTM1LzEwMDsKLQkJfQotCQlpZigoY29tbWFuZF9mbGFncyAmIENPTU1BTkRfU0VURVhQT1NVUkUpICYmCi0JCSAgIG5ld19wYXJhbXMuZXhwb3N1cmUuZXhwTW9kZSA9PSAyKQotCQkJY2FtLT5leHBvc3VyZV9zdGF0dXMgPSBFWFBPU1VSRV9OT1JNQUw7Ci0KLQkJbWVtY3B5KCZjYW0tPnBhcmFtcywgJm5ld19wYXJhbXMsIHNpemVvZihzdHJ1Y3QgY2FtX3BhcmFtcykpOwotCQljYW0tPm1haW5zRnJlcSA9IG5ld19tYWluczsKLQkJY2FtLT5jbWRfcXVldWUgfD0gY29tbWFuZF9mbGFnczsKLQkJcmV0dmFsID0gc2l6ZTsKLQl9IGVsc2UKLQkJREJHKCJlcnJvcjogJWRcbiIsIHJldHZhbCk7Ci0KLQltdXRleF91bmxvY2soJmNhbS0+cGFyYW1fbG9jayk7Ci0KLW91dDoKLQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcGFnZSk7Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY3BpYV9wcm9jX2ZvcHMgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5vcGVuCQk9IGNwaWFfcHJvY19vcGVuLAotCS5yZWFkCQk9IHNlcV9yZWFkLAotCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAotCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCi0JLndyaXRlCQk9IGNwaWFfcHJvY193cml0ZSwKLX07Ci0KLXN0YXRpYyB2b2lkIGNyZWF0ZV9wcm9jX2NwaWFfY2FtKHN0cnVjdCBjYW1fZGF0YSAqY2FtKQotewotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZW50OwotCi0JaWYgKCFjcGlhX3Byb2Nfcm9vdCB8fCAhY2FtKQotCQlyZXR1cm47Ci0KLQllbnQgPSBwcm9jX2NyZWF0ZV9kYXRhKHZpZGVvX2RldmljZV9ub2RlX25hbWUoJmNhbS0+dmRldiksCi0JCQkgICAgICAgU19JUlVHT3xTX0lXVVNSLCBjcGlhX3Byb2Nfcm9vdCwKLQkJCSAgICAgICAmY3BpYV9wcm9jX2ZvcHMsIGNhbSk7Ci0JaWYgKCFlbnQpCi0JCXJldHVybjsKLQotCS8qCi0JICAgc2l6ZSBvZiB0aGUgcHJvYyBlbnRyeSBpcyAzNzM2IGJ5dGVzIGZvciB0aGUgc3RhbmRhcmQgd2ViY2FtOwotCSAgIHRoZSBleHRyYSBmZWF0dXJlcyBvZiB0aGUgUVgzIG1pY3Jvc2NvcGUgYWRkIDE4OSBieXRlcy4KLQkgICAod2UgaGF2ZSBub3QgeWV0IHByb2JlZCB0aGUgY2FtZXJhIHRvIHNlZSB3aGljaCB0eXBlIGl0IGlzKS4KLQkqLwotCWVudC0+c2l6ZSA9IDM3MzYgKyAxODk7Ci0JY2FtLT5wcm9jX2VudHJ5ID0gZW50OwotfQotCi1zdGF0aWMgdm9pZCBkZXN0cm95X3Byb2NfY3BpYV9jYW0oc3RydWN0IGNhbV9kYXRhICpjYW0pCi17Ci0JaWYgKCFjYW0gfHwgIWNhbS0+cHJvY19lbnRyeSkKLQkJcmV0dXJuOwotCi0JcmVtb3ZlX3Byb2NfZW50cnkodmlkZW9fZGV2aWNlX25vZGVfbmFtZSgmY2FtLT52ZGV2KSwgY3BpYV9wcm9jX3Jvb3QpOwotCWNhbS0+cHJvY19lbnRyeSA9IE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkIHByb2NfY3BpYV9jcmVhdGUodm9pZCkKLXsKLQljcGlhX3Byb2Nfcm9vdCA9IHByb2NfbWtkaXIoImNwaWEiLCBOVUxMKTsKLQotCWlmICghY3BpYV9wcm9jX3Jvb3QpCi0JCUxPRygiVW5hYmxlIHRvIGluaXRpYWxpc2UgL3Byb2MvY3BpYVxuIik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBwcm9jX2NwaWFfZGVzdHJveSh2b2lkKQotewotCXJlbW92ZV9wcm9jX2VudHJ5KCJjcGlhIiwgTlVMTCk7Ci19Ci0jZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi8KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gZGVidWcgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2RlZmluZSBwcmludHN0YXR1cyhjYW0pIFwKLSAgREJHKCIlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnhcbiIsXAotCWNhbS0+cGFyYW1zLnN0YXR1cy5zeXN0ZW1TdGF0ZSwgY2FtLT5wYXJhbXMuc3RhdHVzLmdyYWJTdGF0ZSwgXAotCWNhbS0+cGFyYW1zLnN0YXR1cy5zdHJlYW1TdGF0ZSwgY2FtLT5wYXJhbXMuc3RhdHVzLmZhdGFsRXJyb3IsIFwKLQljYW0tPnBhcmFtcy5zdGF0dXMuY21kRXJyb3IsIGNhbS0+cGFyYW1zLnN0YXR1cy5kZWJ1Z0ZsYWdzLCBcCi0JY2FtLT5wYXJhbXMuc3RhdHVzLnZwU3RhdHVzLCBjYW0tPnBhcmFtcy5zdGF0dXMuZXJyb3JDb2RlKTsKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gdjRsIGhlbHBlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyogc3VwcG9ydGVkIGZyYW1lIHBhbGV0dGVzIGFuZCBkZXB0aHMgKi8KLXN0YXRpYyBpbmxpbmUgaW50IHZhbGlkX21vZGUodTE2IHBhbGV0dGUsIHUxNiBkZXB0aCkKLXsKLQlpZiAoKHBhbGV0dGUgPT0gVklERU9fUEFMRVRURV9ZVVY0MjIgJiYgZGVwdGggPT0gMTYpIHx8Ci0JICAgIChwYWxldHRlID09IFZJREVPX1BBTEVUVEVfWVVZViAmJiBkZXB0aCA9PSAxNikpCi0JCXJldHVybiAxOwotCi0JaWYgKGNvbG9yc3BhY2VfY29udikKLQkJcmV0dXJuIChwYWxldHRlID09IFZJREVPX1BBTEVUVEVfR1JFWSAmJiBkZXB0aCA9PSA4KSB8fAotCQkgICAgICAgKHBhbGV0dGUgPT0gVklERU9fUEFMRVRURV9SR0I1NTUgJiYgZGVwdGggPT0gMTYpIHx8Ci0JCSAgICAgICAocGFsZXR0ZSA9PSBWSURFT19QQUxFVFRFX1JHQjU2NSAmJiBkZXB0aCA9PSAxNikgfHwKLQkJICAgICAgIChwYWxldHRlID09IFZJREVPX1BBTEVUVEVfUkdCMjQgJiYgZGVwdGggPT0gMjQpIHx8Ci0JCSAgICAgICAocGFsZXR0ZSA9PSBWSURFT19QQUxFVFRFX1JHQjMyICYmIGRlcHRoID09IDMyKSB8fAotCQkgICAgICAgKHBhbGV0dGUgPT0gVklERU9fUEFMRVRURV9VWVZZICYmIGRlcHRoID09IDE2KTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG1hdGNoX3ZpZGVvc2l6ZSggaW50IHdpZHRoLCBpbnQgaGVpZ2h0ICkKLXsKLQkvKiByZXR1cm4gdGhlIGJlc3QgbWF0Y2gsIHdoZXJlICdiZXN0JyBpcyBhcyBhbHdheXMKLQkgKiB0aGUgbGFyZ2VzdCB0aGF0IGlzIG5vdCBiaWdnZXIgdGhhbiB3aGF0IGlzIHJlcXVlc3RlZC4gKi8KLQlpZiAod2lkdGg+PTM1MiAmJiBoZWlnaHQ+PTI4OCkKLQkJcmV0dXJuIFZJREVPU0laRV8zNTJfMjg4OyAvKiBDSUYgKi8KLQotCWlmICh3aWR0aD49MzIwICYmIGhlaWdodD49MjQwKQotCQlyZXR1cm4gVklERU9TSVpFXzMyMF8yNDA7IC8qIFNJRiAqLwotCi0JaWYgKHdpZHRoPj0yODggJiYgaGVpZ2h0Pj0yMTYpCi0JCXJldHVybiBWSURFT1NJWkVfMjg4XzIxNjsKLQotCWlmICh3aWR0aD49MjU2ICYmIGhlaWdodD49MTkyKQotCQlyZXR1cm4gVklERU9TSVpFXzI1Nl8xOTI7Ci0KLQlpZiAod2lkdGg+PTIyNCAmJiBoZWlnaHQ+PTE2OCkKLQkJcmV0dXJuIFZJREVPU0laRV8yMjRfMTY4OwotCi0JaWYgKHdpZHRoPj0xOTIgJiYgaGVpZ2h0Pj0xNDQpCi0JCXJldHVybiBWSURFT1NJWkVfMTkyXzE0NDsKLQotCWlmICh3aWR0aD49MTc2ICYmIGhlaWdodD49MTQ0KQotCQlyZXR1cm4gVklERU9TSVpFXzE3Nl8xNDQ7IC8qIFFDSUYgKi8KLQotCWlmICh3aWR0aD49MTYwICYmIGhlaWdodD49MTIwKQotCQlyZXR1cm4gVklERU9TSVpFXzE2MF8xMjA7IC8qIFFTSUYgKi8KLQotCWlmICh3aWR0aD49MTI4ICYmIGhlaWdodD49OTYpCi0JCXJldHVybiBWSURFT1NJWkVfMTI4Xzk2OwotCi0JaWYgKHdpZHRoPj04OCAmJiBoZWlnaHQ+PTcyKQotCQlyZXR1cm4gVklERU9TSVpFXzg4XzcyOwotCi0JaWYgKHdpZHRoPj02NCAmJiBoZWlnaHQ+PTQ4KQotCQlyZXR1cm4gVklERU9TSVpFXzY0XzQ4OwotCi0JaWYgKHdpZHRoPj00OCAmJiBoZWlnaHQ+PTQ4KQotCQlyZXR1cm4gVklERU9TSVpFXzQ4XzQ4OwotCi0JcmV0dXJuIC0xOwotfQotCi0vKiB0aGVzZSBhcmUgdGhlIGNhcHR1cmUgc2l6ZXMgd2Ugc3VwcG9ydCAqLwotc3RhdGljIHZvaWQgc2V0X3Z3X3NpemUoc3RydWN0IGNhbV9kYXRhICpjYW0pCi17Ci0JLyogdGhlIGNvbC9yb3cvc3RhcnQvZW5kIHZhbHVlcyBhcmUgdGhlIHJlc3VsdCBvZiBzaW1wbGUgbWF0aCAgICAqLwotCS8qIHN0dWR5IHRoZSBTZXRST0ktY29tbWFuZCBpbiBjcGlhIGRldmVsb3BlcnMgZ3VpZGUgcCAyLTIyICAgICAgKi8KLQkvKiBzdHJlYW1TdGFydExpbmUgaXMgc2V0IHRvIHRoZSByZWNvbW1lbmRlZCB2YWx1ZSBpbiB0aGUgY3BpYSAgICovCi0JLyogIGRldmVsb3BlcnMgZ3VpZGUgcCAzLTM3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCXN3aXRjaChjYW0tPnZpZGVvX3NpemUpIHsKLQljYXNlIFZJREVPU0laRV9DSUY6Ci0JCWNhbS0+dncud2lkdGggPSAzNTI7Ci0JCWNhbS0+dncuaGVpZ2h0ID0gMjg4OwotCQljYW0tPnBhcmFtcy5mb3JtYXQudmlkZW9TaXplPVZJREVPU0laRV9DSUY7Ci0JCWNhbS0+cGFyYW1zLnJvaS5jb2xTdGFydD0wOwotCQljYW0tPnBhcmFtcy5yb2kucm93U3RhcnQ9MDsKLQkJY2FtLT5wYXJhbXMuc3RyZWFtU3RhcnRMaW5lID0gMTIwOwotCQlicmVhazsKLQljYXNlIFZJREVPU0laRV9TSUY6Ci0JCWNhbS0+dncud2lkdGggPSAzMjA7Ci0JCWNhbS0+dncuaGVpZ2h0ID0gMjQwOwotCQljYW0tPnBhcmFtcy5mb3JtYXQudmlkZW9TaXplPVZJREVPU0laRV9DSUY7Ci0JCWNhbS0+cGFyYW1zLnJvaS5jb2xTdGFydD0yOwotCQljYW0tPnBhcmFtcy5yb2kucm93U3RhcnQ9NjsKLQkJY2FtLT5wYXJhbXMuc3RyZWFtU3RhcnRMaW5lID0gMTIwOwotCQlicmVhazsKLQljYXNlIFZJREVPU0laRV8yODhfMjE2OgotCQljYW0tPnZ3LndpZHRoID0gMjg4OwotCQljYW0tPnZ3LmhlaWdodCA9IDIxNjsKLQkJY2FtLT5wYXJhbXMuZm9ybWF0LnZpZGVvU2l6ZT1WSURFT1NJWkVfQ0lGOwotCQljYW0tPnBhcmFtcy5yb2kuY29sU3RhcnQ9NDsKLQkJY2FtLT5wYXJhbXMucm9pLnJvd1N0YXJ0PTk7Ci0JCWNhbS0+cGFyYW1zLnN0cmVhbVN0YXJ0TGluZSA9IDEyMDsKLQkJYnJlYWs7Ci0JY2FzZSBWSURFT1NJWkVfMjU2XzE5MjoKLQkJY2FtLT52dy53aWR0aCA9IDI1NjsKLQkJY2FtLT52dy5oZWlnaHQgPSAxOTI7Ci0JCWNhbS0+cGFyYW1zLmZvcm1hdC52aWRlb1NpemU9VklERU9TSVpFX0NJRjsKLQkJY2FtLT5wYXJhbXMucm9pLmNvbFN0YXJ0PTY7Ci0JCWNhbS0+cGFyYW1zLnJvaS5yb3dTdGFydD0xMjsKLQkJY2FtLT5wYXJhbXMuc3RyZWFtU3RhcnRMaW5lID0gMTIwOwotCQlicmVhazsKLQljYXNlIFZJREVPU0laRV8yMjRfMTY4OgotCQljYW0tPnZ3LndpZHRoID0gMjI0OwotCQljYW0tPnZ3LmhlaWdodCA9IDE2ODsKLQkJY2FtLT5wYXJhbXMuZm9ybWF0LnZpZGVvU2l6ZT1WSURFT1NJWkVfQ0lGOwotCQljYW0tPnBhcmFtcy5yb2kuY29sU3RhcnQ9ODsKLQkJY2FtLT5wYXJhbXMucm9pLnJvd1N0YXJ0PTE1OwotCQljYW0tPnBhcmFtcy5zdHJlYW1TdGFydExpbmUgPSAxMjA7Ci0JCWJyZWFrOwotCWNhc2UgVklERU9TSVpFXzE5Ml8xNDQ6Ci0JCWNhbS0+dncud2lkdGggPSAxOTI7Ci0JCWNhbS0+dncuaGVpZ2h0ID0gMTQ0OwotCQljYW0tPnBhcmFtcy5mb3JtYXQudmlkZW9TaXplPVZJREVPU0laRV9DSUY7Ci0JCWNhbS0+cGFyYW1zLnJvaS5jb2xTdGFydD0xMDsKLQkJY2FtLT5wYXJhbXMucm9pLnJvd1N0YXJ0PTE4OwotCQljYW0tPnBhcmFtcy5zdHJlYW1TdGFydExpbmUgPSAxMjA7Ci0JCWJyZWFrOwotCWNhc2UgVklERU9TSVpFX1FDSUY6Ci0JCWNhbS0+dncud2lkdGggPSAxNzY7Ci0JCWNhbS0+dncuaGVpZ2h0ID0gMTQ0OwotCQljYW0tPnBhcmFtcy5mb3JtYXQudmlkZW9TaXplPVZJREVPU0laRV9RQ0lGOwotCQljYW0tPnBhcmFtcy5yb2kuY29sU3RhcnQ9MDsKLQkJY2FtLT5wYXJhbXMucm9pLnJvd1N0YXJ0PTA7Ci0JCWNhbS0+cGFyYW1zLnN0cmVhbVN0YXJ0TGluZSA9IDYwOwotCQlicmVhazsKLQljYXNlIFZJREVPU0laRV9RU0lGOgotCQljYW0tPnZ3LndpZHRoID0gMTYwOwotCQljYW0tPnZ3LmhlaWdodCA9IDEyMDsKLQkJY2FtLT5wYXJhbXMuZm9ybWF0LnZpZGVvU2l6ZT1WSURFT1NJWkVfUUNJRjsKLQkJY2FtLT5wYXJhbXMucm9pLmNvbFN0YXJ0PTE7Ci0JCWNhbS0+cGFyYW1zLnJvaS5yb3dTdGFydD0zOwotCQljYW0tPnBhcmFtcy5zdHJlYW1TdGFydExpbmUgPSA2MDsKLQkJYnJlYWs7Ci0JY2FzZSBWSURFT1NJWkVfMTI4Xzk2OgotCQljYW0tPnZ3LndpZHRoID0gMTI4OwotCQljYW0tPnZ3LmhlaWdodCA9IDk2OwotCQljYW0tPnBhcmFtcy5mb3JtYXQudmlkZW9TaXplPVZJREVPU0laRV9RQ0lGOwotCQljYW0tPnBhcmFtcy5yb2kuY29sU3RhcnQ9MzsKLQkJY2FtLT5wYXJhbXMucm9pLnJvd1N0YXJ0PTY7Ci0JCWNhbS0+cGFyYW1zLnN0cmVhbVN0YXJ0TGluZSA9IDYwOwotCQlicmVhazsKLQljYXNlIFZJREVPU0laRV84OF83MjoKLQkJY2FtLT52dy53aWR0aCA9IDg4OwotCQljYW0tPnZ3LmhlaWdodCA9IDcyOwotCQljYW0tPnBhcmFtcy5mb3JtYXQudmlkZW9TaXplPVZJREVPU0laRV9RQ0lGOwotCQljYW0tPnBhcmFtcy5yb2kuY29sU3RhcnQ9NTsKLQkJY2FtLT5wYXJhbXMucm9pLnJvd1N0YXJ0PTk7Ci0JCWNhbS0+cGFyYW1zLnN0cmVhbVN0YXJ0TGluZSA9IDYwOwotCQlicmVhazsKLQljYXNlIFZJREVPU0laRV82NF80ODoKLQkJY2FtLT52dy53aWR0aCA9IDY0OwotCQljYW0tPnZ3LmhlaWdodCA9IDQ4OwotCQljYW0tPnBhcmFtcy5mb3JtYXQudmlkZW9TaXplPVZJREVPU0laRV9RQ0lGOwotCQljYW0tPnBhcmFtcy5yb2kuY29sU3RhcnQ9NzsKLQkJY2FtLT5wYXJhbXMucm9pLnJvd1N0YXJ0PTEyOwotCQljYW0tPnBhcmFtcy5zdHJlYW1TdGFydExpbmUgPSA2MDsKLQkJYnJlYWs7Ci0JY2FzZSBWSURFT1NJWkVfNDhfNDg6Ci0JCWNhbS0+dncud2lkdGggPSA0ODsKLQkJY2FtLT52dy5oZWlnaHQgPSA0ODsKLQkJY2FtLT5wYXJhbXMuZm9ybWF0LnZpZGVvU2l6ZT1WSURFT1NJWkVfUUNJRjsKLQkJY2FtLT5wYXJhbXMucm9pLmNvbFN0YXJ0PTg7Ci0JCWNhbS0+cGFyYW1zLnJvaS5yb3dTdGFydD02OwotCQljYW0tPnBhcmFtcy5zdHJlYW1TdGFydExpbmUgPSA2MDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJTE9HKCJiYWQgdmlkZW9zaXplIHZhbHVlOiAlZFxuIiwgY2FtLT52aWRlb19zaXplKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmKGNhbS0+dmMud2lkdGggPT0gMCkKLQkJY2FtLT52Yy53aWR0aCA9IGNhbS0+dncud2lkdGg7Ci0JaWYoY2FtLT52Yy5oZWlnaHQgPT0gMCkKLQkJY2FtLT52Yy5oZWlnaHQgPSBjYW0tPnZ3LmhlaWdodDsKLQotCWNhbS0+cGFyYW1zLnJvaS5jb2xTdGFydCArPSBjYW0tPnZjLnggPj4gMzsKLQljYW0tPnBhcmFtcy5yb2kuY29sRW5kID0gY2FtLT5wYXJhbXMucm9pLmNvbFN0YXJ0ICsKLQkJCQkgKGNhbS0+dmMud2lkdGggPj4gMyk7Ci0JY2FtLT5wYXJhbXMucm9pLnJvd1N0YXJ0ICs9IGNhbS0+dmMueSA+PiAyOwotCWNhbS0+cGFyYW1zLnJvaS5yb3dFbmQgPSBjYW0tPnBhcmFtcy5yb2kucm93U3RhcnQgKwotCQkJCSAoY2FtLT52Yy5oZWlnaHQgPj4gMik7Ci0KLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyBpbnQgYWxsb2NhdGVfZnJhbWVfYnVmKHN0cnVjdCBjYW1fZGF0YSAqY2FtKQotewotCWludCBpOwotCi0JY2FtLT5mcmFtZV9idWYgPSBydm1hbGxvYyhGUkFNRV9OVU0gKiBDUElBX01BWF9GUkFNRV9TSVpFKTsKLQlpZiAoIWNhbS0+ZnJhbWVfYnVmKQotCQlyZXR1cm4gLUVOT0JVRlM7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgRlJBTUVfTlVNOyBpKyspCi0JCWNhbS0+ZnJhbWVbaV0uZGF0YSA9IGNhbS0+ZnJhbWVfYnVmICsgaSAqIENQSUFfTUFYX0ZSQU1FX1NJWkU7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBmcmVlX2ZyYW1lX2J1ZihzdHJ1Y3QgY2FtX2RhdGEgKmNhbSkKLXsKLQlpbnQgaTsKLQotCXJ2ZnJlZShjYW0tPmZyYW1lX2J1ZiwgRlJBTUVfTlVNKkNQSUFfTUFYX0ZSQU1FX1NJWkUpOwotCWNhbS0+ZnJhbWVfYnVmID0gTlVMTDsKLQlmb3IgKGk9MDsgaSA8IEZSQU1FX05VTTsgaSsrKQotCQljYW0tPmZyYW1lW2ldLmRhdGEgPSBOVUxMOwotCi0JcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIGlubGluZSB2b2lkIGZyZWVfZnJhbWVzKHN0cnVjdCBjcGlhX2ZyYW1lIGZyYW1lW0ZSQU1FX05VTV0pCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGk9MDsgaSA8IEZSQU1FX05VTTsgaSsrKQotCQlmcmFtZVtpXS5zdGF0ZSA9IEZSQU1FX1VOVVNFRDsKLQlyZXR1cm47Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogR2VuZXJhbCBmdW5jdGlvbnMKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIHNlbmQgYW4gYXJiaXRyYXJ5IGNvbW1hbmQgdG8gdGhlIGNhbWVyYSAqLwotc3RhdGljIGludCBkb19jb21tYW5kKHN0cnVjdCBjYW1fZGF0YSAqY2FtLCB1MTYgY29tbWFuZCwgdTggYSwgdTggYiwgdTggYywgdTggZCkKLXsKLQlpbnQgcmV0dmFsLCBkYXRhc2l6ZTsKLQl1OCBjbWRbOF0sIGRhdGFbOF07Ci0KLQlzd2l0Y2goY29tbWFuZCkgewotCWNhc2UgQ1BJQV9DT01NQU5EX0dldENQSUFWZXJzaW9uOgotCWNhc2UgQ1BJQV9DT01NQU5EX0dldFBuUElEOgotCWNhc2UgQ1BJQV9DT01NQU5EX0dldENhbWVyYVN0YXR1czoKLQljYXNlIENQSUFfQ09NTUFORF9HZXRWUFZlcnNpb246Ci0JCWRhdGFzaXplPTg7Ci0JCWJyZWFrOwotCWNhc2UgQ1BJQV9DT01NQU5EX0dldENvbG91clBhcmFtczoKLQljYXNlIENQSUFfQ09NTUFORF9HZXRDb2xvdXJCYWxhbmNlOgotCWNhc2UgQ1BJQV9DT01NQU5EX0dldEV4cG9zdXJlOgotCQltdXRleF9sb2NrKCZjYW0tPnBhcmFtX2xvY2spOwotCQlkYXRhc2l6ZT04OwotCQlicmVhazsKLQljYXNlIENQSUFfQ09NTUFORF9SZWFkTUNQb3J0czoKLQljYXNlIENQSUFfQ09NTUFORF9SZWFkVkNSZWdzOgotCQlkYXRhc2l6ZSA9IDQ7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWRhdGFzaXplPTA7Ci0JCWJyZWFrOwotCX0KLQotCWNtZFswXSA9IGNvbW1hbmQ+Pjg7Ci0JY21kWzFdID0gY29tbWFuZCYweGZmOwotCWNtZFsyXSA9IGE7Ci0JY21kWzNdID0gYjsKLQljbWRbNF0gPSBjOwotCWNtZFs1XSA9IGQ7Ci0JY21kWzZdID0gZGF0YXNpemU7Ci0JY21kWzddID0gMDsKLQotCXJldHZhbCA9IGNhbS0+b3BzLT50cmFuc2ZlckNtZChjYW0tPmxvd2xldmVsX2RhdGEsIGNtZCwgZGF0YSk7Ci0JaWYgKHJldHZhbCkgewotCQlEQkcoIiV4IC0gZmFpbGVkLCByZXR2YWw9JWRcbiIsIGNvbW1hbmQsIHJldHZhbCk7Ci0JCWlmIChjb21tYW5kID09IENQSUFfQ09NTUFORF9HZXRDb2xvdXJQYXJhbXMgfHwKLQkJICAgIGNvbW1hbmQgPT0gQ1BJQV9DT01NQU5EX0dldENvbG91ckJhbGFuY2UgfHwKLQkJICAgIGNvbW1hbmQgPT0gQ1BJQV9DT01NQU5EX0dldEV4cG9zdXJlKQotCQkJbXV0ZXhfdW5sb2NrKCZjYW0tPnBhcmFtX2xvY2spOwotCX0gZWxzZSB7Ci0JCXN3aXRjaChjb21tYW5kKSB7Ci0JCWNhc2UgQ1BJQV9DT01NQU5EX0dldENQSUFWZXJzaW9uOgotCQkJY2FtLT5wYXJhbXMudmVyc2lvbi5maXJtd2FyZVZlcnNpb24gPSBkYXRhWzBdOwotCQkJY2FtLT5wYXJhbXMudmVyc2lvbi5maXJtd2FyZVJldmlzaW9uID0gZGF0YVsxXTsKLQkJCWNhbS0+cGFyYW1zLnZlcnNpb24udmNWZXJzaW9uID0gZGF0YVsyXTsKLQkJCWNhbS0+cGFyYW1zLnZlcnNpb24udmNSZXZpc2lvbiA9IGRhdGFbM107Ci0JCQlicmVhazsKLQkJY2FzZSBDUElBX0NPTU1BTkRfR2V0UG5QSUQ6Ci0JCQljYW0tPnBhcmFtcy5wbnBJRC52ZW5kb3IgPSBkYXRhWzBdKygoKHUxNilkYXRhWzFdKTw8OCk7Ci0JCQljYW0tPnBhcmFtcy5wbnBJRC5wcm9kdWN0ID0gZGF0YVsyXSsoKCh1MTYpZGF0YVszXSk8PDgpOwotCQkJY2FtLT5wYXJhbXMucG5wSUQuZGV2aWNlUmV2aXNpb24gPQotCQkJCWRhdGFbNF0rKCgodTE2KWRhdGFbNV0pPDw4KTsKLQkJCWJyZWFrOwotCQljYXNlIENQSUFfQ09NTUFORF9HZXRDYW1lcmFTdGF0dXM6Ci0JCQljYW0tPnBhcmFtcy5zdGF0dXMuc3lzdGVtU3RhdGUgPSBkYXRhWzBdOwotCQkJY2FtLT5wYXJhbXMuc3RhdHVzLmdyYWJTdGF0ZSA9IGRhdGFbMV07Ci0JCQljYW0tPnBhcmFtcy5zdGF0dXMuc3RyZWFtU3RhdGUgPSBkYXRhWzJdOwotCQkJY2FtLT5wYXJhbXMuc3RhdHVzLmZhdGFsRXJyb3IgPSBkYXRhWzNdOwotCQkJY2FtLT5wYXJhbXMuc3RhdHVzLmNtZEVycm9yID0gZGF0YVs0XTsKLQkJCWNhbS0+cGFyYW1zLnN0YXR1cy5kZWJ1Z0ZsYWdzID0gZGF0YVs1XTsKLQkJCWNhbS0+cGFyYW1zLnN0YXR1cy52cFN0YXR1cyA9IGRhdGFbNl07Ci0JCQljYW0tPnBhcmFtcy5zdGF0dXMuZXJyb3JDb2RlID0gZGF0YVs3XTsKLQkJCWJyZWFrOwotCQljYXNlIENQSUFfQ09NTUFORF9HZXRWUFZlcnNpb246Ci0JCQljYW0tPnBhcmFtcy52cFZlcnNpb24udnBWZXJzaW9uID0gZGF0YVswXTsKLQkJCWNhbS0+cGFyYW1zLnZwVmVyc2lvbi52cFJldmlzaW9uID0gZGF0YVsxXTsKLQkJCWNhbS0+cGFyYW1zLnZwVmVyc2lvbi5jYW1lcmFIZWFkSUQgPQotCQkJCWRhdGFbMl0rKCgodTE2KWRhdGFbM10pPDw4KTsKLQkJCWJyZWFrOwotCQljYXNlIENQSUFfQ09NTUFORF9HZXRDb2xvdXJQYXJhbXM6Ci0JCQljYW0tPnBhcmFtcy5jb2xvdXJQYXJhbXMuYnJpZ2h0bmVzcyA9IGRhdGFbMF07Ci0JCQljYW0tPnBhcmFtcy5jb2xvdXJQYXJhbXMuY29udHJhc3QgPSBkYXRhWzFdOwotCQkJY2FtLT5wYXJhbXMuY29sb3VyUGFyYW1zLnNhdHVyYXRpb24gPSBkYXRhWzJdOwotCQkJbXV0ZXhfdW5sb2NrKCZjYW0tPnBhcmFtX2xvY2spOwotCQkJYnJlYWs7Ci0JCWNhc2UgQ1BJQV9DT01NQU5EX0dldENvbG91ckJhbGFuY2U6Ci0JCQljYW0tPnBhcmFtcy5jb2xvdXJCYWxhbmNlLnJlZEdhaW4gPSBkYXRhWzBdOwotCQkJY2FtLT5wYXJhbXMuY29sb3VyQmFsYW5jZS5ncmVlbkdhaW4gPSBkYXRhWzFdOwotCQkJY2FtLT5wYXJhbXMuY29sb3VyQmFsYW5jZS5ibHVlR2FpbiA9IGRhdGFbMl07Ci0JCQltdXRleF91bmxvY2soJmNhbS0+cGFyYW1fbG9jayk7Ci0JCQlicmVhazsKLQkJY2FzZSBDUElBX0NPTU1BTkRfR2V0RXhwb3N1cmU6Ci0JCQljYW0tPnBhcmFtcy5leHBvc3VyZS5nYWluID0gZGF0YVswXTsKLQkJCWNhbS0+cGFyYW1zLmV4cG9zdXJlLmZpbmVFeHAgPSBkYXRhWzFdOwotCQkJY2FtLT5wYXJhbXMuZXhwb3N1cmUuY29hcnNlRXhwTG8gPSBkYXRhWzJdOwotCQkJY2FtLT5wYXJhbXMuZXhwb3N1cmUuY29hcnNlRXhwSGkgPSBkYXRhWzNdOwotCQkJY2FtLT5wYXJhbXMuZXhwb3N1cmUucmVkQ29tcCA9IGRhdGFbNF07Ci0JCQljYW0tPnBhcmFtcy5leHBvc3VyZS5ncmVlbjFDb21wID0gZGF0YVs1XTsKLQkJCWNhbS0+cGFyYW1zLmV4cG9zdXJlLmdyZWVuMkNvbXAgPSBkYXRhWzZdOwotCQkJY2FtLT5wYXJhbXMuZXhwb3N1cmUuYmx1ZUNvbXAgPSBkYXRhWzddOwotCQkJbXV0ZXhfdW5sb2NrKCZjYW0tPnBhcmFtX2xvY2spOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBDUElBX0NPTU1BTkRfUmVhZE1DUG9ydHM6Ci0JCQlpZiAoIWNhbS0+cGFyYW1zLnF4My5xeDNfZGV0ZWN0ZWQpCi0JCQkJYnJlYWs7Ci0JCQkvKiB0ZXN0IGJ1dHRvbiBwcmVzcyAqLwotCQkJY2FtLT5wYXJhbXMucXgzLmJ1dHRvbiA9ICgoZGF0YVsxXSAmIDB4MDIpID09IDApOwotCQkJaWYgKGNhbS0+cGFyYW1zLnF4My5idXR0b24pIHsKLQkJCQkvKiBidXR0b24gcHJlc3NlZCAtIHVubG9jayB0aGUgbGF0Y2ggKi8KLQkJCQlkb19jb21tYW5kKGNhbSxDUElBX0NPTU1BTkRfV3JpdGVNQ1BvcnQsMywweERGLDB4REYsMCk7Ci0JCQkJZG9fY29tbWFuZChjYW0sQ1BJQV9DT01NQU5EX1dyaXRlTUNQb3J0LDMsMHhGRiwweEZGLDApOwotCQkJfQotCi0JCQkvKiB0ZXN0IHdoZXRoZXIgbWljcm9zY29wZSBpcyBjcmFkbGVkICovCi0JCQljYW0tPnBhcmFtcy5xeDMuY3JhZGxlZCA9ICgoZGF0YVsyXSAmIDB4NDApID09IDApOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwotCQl9Ci0JfQotCXJldHVybiByZXR2YWw7Ci19Ci0KLS8qIHNlbmQgYSBjb21tYW5kICB0byB0aGUgY2FtZXJhIHdpdGggYW4gYWRkaXRpb25hbCBkYXRhIHRyYW5zYWN0aW9uICovCi1zdGF0aWMgaW50IGRvX2NvbW1hbmRfZXh0ZW5kZWQoc3RydWN0IGNhbV9kYXRhICpjYW0sIHUxNiBjb21tYW5kLAotCQkJICAgICAgIHU4IGEsIHU4IGIsIHU4IGMsIHU4IGQsCi0JCQkgICAgICAgdTggZSwgdTggZiwgdTggZywgdTggaCwKLQkJCSAgICAgICB1OCBpLCB1OCBqLCB1OCBrLCB1OCBsKQotewotCWludCByZXR2YWw7Ci0JdTggY21kWzhdLCBkYXRhWzhdOwotCi0JY21kWzBdID0gY29tbWFuZD4+ODsKLQljbWRbMV0gPSBjb21tYW5kJjB4ZmY7Ci0JY21kWzJdID0gYTsKLQljbWRbM10gPSBiOwotCWNtZFs0XSA9IGM7Ci0JY21kWzVdID0gZDsKLQljbWRbNl0gPSA4OwotCWNtZFs3XSA9IDA7Ci0JZGF0YVswXSA9IGU7Ci0JZGF0YVsxXSA9IGY7Ci0JZGF0YVsyXSA9IGc7Ci0JZGF0YVszXSA9IGg7Ci0JZGF0YVs0XSA9IGk7Ci0JZGF0YVs1XSA9IGo7Ci0JZGF0YVs2XSA9IGs7Ci0JZGF0YVs3XSA9IGw7Ci0KLQlyZXR2YWwgPSBjYW0tPm9wcy0+dHJhbnNmZXJDbWQoY2FtLT5sb3dsZXZlbF9kYXRhLCBjbWQsIGRhdGEpOwotCWlmIChyZXR2YWwpCi0JCURCRygiJXggLSBmYWlsZWRcbiIsIGNvbW1hbmQpOwotCi0JcmV0dXJuIHJldHZhbDsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBDb2xvcnNwYWNlIGNvbnZlcnNpb24KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNkZWZpbmUgTElNSVQoeCkgKCgoKHgpPjB4ZmZmZmZmKT8weGZmMDAwMDooKCh4KTw9MHhmZmZmKT8wOih4KSYweGZmMDAwMCkpPj4xNikKLQotc3RhdGljIGludCBjb252ZXJ0NDIwKHVuc2lnbmVkIGNoYXIgKnl1diwgdW5zaWduZWQgY2hhciAqcmdiLCBpbnQgb3V0X2ZtdCwKLQkJICAgICAgaW50IGxpbmVzaXplLCBpbnQgbW1hcF9rbHVkZ2UpCi17Ci0JaW50IHksIHUsIHYsIHIsIGcsIGIsIHkxOwotCi0JLyogT2RkIGxpbmVzIHVzZSB0aGUgc2FtZSB1IGFuZCB2IGFzIHRoZSBwcmV2aW91cyBsaW5lLgotCSAqIEJlY2F1c2Ugb2YgY29tcHJlc3Npb24sIGl0IGlzIG5lY2Vzc2FyeSB0byBnZXQgdGhpcwotCSAqIGluZm9ybWF0aW9uIGZyb20gdGhlIGRlY29kZWQgaW1hZ2UuICovCi0Jc3dpdGNoKG91dF9mbXQpIHsKLQljYXNlIFZJREVPX1BBTEVUVEVfUkdCNTU1OgotCQl5ID0gKCp5dXYrKyAtIDE2KSAqIDc2MzEwOwotCQl5MSA9ICgqeXV2IC0gMTYpICogNzYzMTA7Ci0JCXIgPSAoKCoocmdiKzEtbGluZXNpemUpKSAmIDB4N2MpIDw8IDE7Ci0JCWcgPSAoKCoocmdiLWxpbmVzaXplKSkgJiAweGUwKSA+PiA0IHwKLQkJICAgICgoKihyZ2IrMS1saW5lc2l6ZSkpICYgMHgwMykgPDwgNjsKLQkJYiA9ICgoKihyZ2ItbGluZXNpemUpKSAmIDB4MWYpIDw8IDM7Ci0JCXUgPSAoLTUzMjk0ICogciAtIDEwNDYzNSAqIGcgKyAxNTc5MjkgKiBiKSAvIDU3NTY0OTU7Ci0JCXYgPSAoMTU3OTY4ICogciAtIDEzMjI3OCAqIGcgLSAyNTY5MCAqIGIpIC8gNTM2NjE1OTsKLQkJciA9IDEwNDYzNSAqIHY7Ci0JCWcgPSAtMjU2OTAgKiB1IC0gNTMyOTQgKiB2OwotCQliID0gMTMyMjc4ICogdTsKLQkJKnJnYisrID0gKChMSU1JVChnK3kpICYgMHhmOCkgPDwgMikgfCAoTElNSVQoYit5KSA+PiAzKTsKLQkJKnJnYisrID0gKChMSU1JVChyK3kpICYgMHhmOCkgPj4gMSkgfCAoTElNSVQoZyt5KSA+PiA2KTsKLQkJKnJnYisrID0gKChMSU1JVChnK3kxKSAmIDB4ZjgpIDw8IDIpIHwgKExJTUlUKGIreTEpID4+IDMpOwotCQkqcmdiID0gKChMSU1JVChyK3kxKSAmIDB4ZjgpID4+IDEpIHwgKExJTUlUKGcreTEpID4+IDYpOwotCQlyZXR1cm4gNDsKLQljYXNlIFZJREVPX1BBTEVUVEVfUkdCNTY1OgotCQl5ID0gKCp5dXYrKyAtIDE2KSAqIDc2MzEwOwotCQl5MSA9ICgqeXV2IC0gMTYpICogNzYzMTA7Ci0JCXIgPSAoKihyZ2IrMS1saW5lc2l6ZSkpICYgMHhmODsKLQkJZyA9ICgoKihyZ2ItbGluZXNpemUpKSAmIDB4ZTApID4+IDMgfAotCQkgICAgKCgqKHJnYisxLWxpbmVzaXplKSkgJiAweDA3KSA8PCA1OwotCQliID0gKCgqKHJnYi1saW5lc2l6ZSkpICYgMHgxZikgPDwgMzsKLQkJdSA9ICgtNTMyOTQgKiByIC0gMTA0NjM1ICogZyArIDE1NzkyOSAqIGIpIC8gNTc1NjQ5NTsKLQkJdiA9ICgxNTc5NjggKiByIC0gMTMyMjc4ICogZyAtIDI1NjkwICogYikgLyA1MzY2MTU5OwotCQlyID0gMTA0NjM1ICogdjsKLQkJZyA9IC0yNTY5MCAqIHUgLSA1MzI5NCAqIHY7Ci0JCWIgPSAxMzIyNzggKiB1OwotCQkqcmdiKysgPSAoKExJTUlUKGcreSkgJiAweGZjKSA8PCAzKSB8IChMSU1JVChiK3kpID4+IDMpOwotCQkqcmdiKysgPSAoTElNSVQocit5KSAmIDB4ZjgpIHwgKExJTUlUKGcreSkgPj4gNSk7Ci0JCSpyZ2IrKyA9ICgoTElNSVQoZyt5MSkgJiAweGZjKSA8PCAzKSB8IChMSU1JVChiK3kxKSA+PiAzKTsKLQkJKnJnYiA9IChMSU1JVChyK3kxKSAmIDB4ZjgpIHwgKExJTUlUKGcreTEpID4+IDUpOwotCQlyZXR1cm4gNDsKLQkJYnJlYWs7Ci0JY2FzZSBWSURFT19QQUxFVFRFX1JHQjI0OgotCWNhc2UgVklERU9fUEFMRVRURV9SR0IzMjoKLQkJeSA9ICgqeXV2KysgLSAxNikgKiA3NjMxMDsKLQkJeTEgPSAoKnl1diAtIDE2KSAqIDc2MzEwOwotCQlpZiAobW1hcF9rbHVkZ2UpIHsKLQkJCXIgPSAqKHJnYisyLWxpbmVzaXplKTsKLQkJCWcgPSAqKHJnYisxLWxpbmVzaXplKTsKLQkJCWIgPSAqKHJnYi1saW5lc2l6ZSk7Ci0JCX0gZWxzZSB7Ci0JCQlyID0gKihyZ2ItbGluZXNpemUpOwotCQkJZyA9ICoocmdiKzEtbGluZXNpemUpOwotCQkJYiA9ICoocmdiKzItbGluZXNpemUpOwotCQl9Ci0JCXUgPSAoLTUzMjk0ICogciAtIDEwNDYzNSAqIGcgKyAxNTc5MjkgKiBiKSAvIDU3NTY0OTU7Ci0JCXYgPSAoMTU3OTY4ICogciAtIDEzMjI3OCAqIGcgLSAyNTY5MCAqIGIpIC8gNTM2NjE1OTsKLQkJciA9IDEwNDYzNSAqIHY7Ci0JCWcgPSAtMjU2OTAgKiB1ICsgLTUzMjk0ICogdjsKLQkJYiA9IDEzMjI3OCAqIHU7Ci0JCWlmIChtbWFwX2tsdWRnZSkgewotCQkJKnJnYisrID0gTElNSVQoYit5KTsKLQkJCSpyZ2IrKyA9IExJTUlUKGcreSk7Ci0JCQkqcmdiKysgPSBMSU1JVChyK3kpOwotCQkJaWYob3V0X2ZtdCA9PSBWSURFT19QQUxFVFRFX1JHQjMyKQotCQkJCXJnYisrOwotCQkJKnJnYisrID0gTElNSVQoYit5MSk7Ci0JCQkqcmdiKysgPSBMSU1JVChnK3kxKTsKLQkJCSpyZ2IgPSBMSU1JVChyK3kxKTsKLQkJfSBlbHNlIHsKLQkJCSpyZ2IrKyA9IExJTUlUKHIreSk7Ci0JCQkqcmdiKysgPSBMSU1JVChnK3kpOwotCQkJKnJnYisrID0gTElNSVQoYit5KTsKLQkJCWlmKG91dF9mbXQgPT0gVklERU9fUEFMRVRURV9SR0IzMikKLQkJCQlyZ2IrKzsKLQkJCSpyZ2IrKyA9IExJTUlUKHIreTEpOwotCQkJKnJnYisrID0gTElNSVQoZyt5MSk7Ci0JCQkqcmdiID0gTElNSVQoYit5MSk7Ci0JCX0KLQkJaWYob3V0X2ZtdCA9PSBWSURFT19QQUxFVFRFX1JHQjMyKQotCQkJcmV0dXJuIDg7Ci0JCXJldHVybiA2OwotCWNhc2UgVklERU9fUEFMRVRURV9ZVVY0MjI6Ci0JY2FzZSBWSURFT19QQUxFVFRFX1lVWVY6Ci0JCXkgPSAqeXV2Kys7Ci0JCXUgPSAqKHJnYisxLWxpbmVzaXplKTsKLQkJeTEgPSAqeXV2OwotCQl2ID0gKihyZ2IrMy1saW5lc2l6ZSk7Ci0JCSpyZ2IrKyA9IHk7Ci0JCSpyZ2IrKyA9IHU7Ci0JCSpyZ2IrKyA9IHkxOwotCQkqcmdiID0gdjsKLQkJcmV0dXJuIDQ7Ci0JY2FzZSBWSURFT19QQUxFVFRFX1VZVlk6Ci0JCXUgPSAqKHJnYi1saW5lc2l6ZSk7Ci0JCXkgPSAqeXV2Kys7Ci0JCXYgPSAqKHJnYisyLWxpbmVzaXplKTsKLQkJeTEgPSAqeXV2OwotCQkqcmdiKysgPSB1OwotCQkqcmdiKysgPSB5OwotCQkqcmdiKysgPSB2OwotCQkqcmdiID0geTE7Ci0JCXJldHVybiA0OwotCWNhc2UgVklERU9fUEFMRVRURV9HUkVZOgotCQkqcmdiKysgPSAqeXV2Kys7Ci0JCSpyZ2IgPSAqeXV2OwotCQlyZXR1cm4gMjsKLQlkZWZhdWx0OgotCQlEQkcoIkVtcHR5OiAlZFxuIiwgb3V0X2ZtdCk7Ci0JCXJldHVybiAwOwotCX0KLX0KLQotCi1zdGF0aWMgaW50IHl1dmNvbnZlcnQodW5zaWduZWQgY2hhciAqeXV2LCB1bnNpZ25lZCBjaGFyICpyZ2IsIGludCBvdXRfZm10LAotCQkgICAgICBpbnQgaW5fdXl2eSwgaW50IG1tYXBfa2x1ZGdlKQotewotCWludCB5LCB1LCB2LCByLCBnLCBiLCB5MTsKLQotCXN3aXRjaChvdXRfZm10KSB7Ci0JY2FzZSBWSURFT19QQUxFVFRFX1JHQjU1NToKLQljYXNlIFZJREVPX1BBTEVUVEVfUkdCNTY1OgotCWNhc2UgVklERU9fUEFMRVRURV9SR0IyNDoKLQljYXNlIFZJREVPX1BBTEVUVEVfUkdCMzI6Ci0JCWlmIChpbl91eXZ5KSB7Ci0JCQl1ID0gKnl1disrIC0gMTI4OwotCQkJeSA9ICgqeXV2KysgLSAxNikgKiA3NjMxMDsKLQkJCXYgPSAqeXV2KysgLSAxMjg7Ci0JCQl5MSA9ICgqeXV2IC0gMTYpICogNzYzMTA7Ci0JCX0gZWxzZSB7Ci0JCQl5ID0gKCp5dXYrKyAtIDE2KSAqIDc2MzEwOwotCQkJdSA9ICp5dXYrKyAtIDEyODsKLQkJCXkxID0gKCp5dXYrKyAtIDE2KSAqIDc2MzEwOwotCQkJdiA9ICp5dXYgLSAxMjg7Ci0JCX0KLQkJciA9IDEwNDYzNSAqIHY7Ci0JCWcgPSAtMjU2OTAgKiB1ICsgLTUzMjk0ICogdjsKLQkJYiA9IDEzMjI3OCAqIHU7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXkgPSAqeXV2Kys7Ci0JCXUgPSAqeXV2Kys7Ci0JCXkxID0gKnl1disrOwotCQl2ID0gKnl1djsKLQkJLyogSnVzdCB0byBhdm9pZCBjb21waWxlciB3YXJuaW5ncyAqLwotCQlyID0gMDsKLQkJZyA9IDA7Ci0JCWIgPSAwOwotCQlicmVhazsKLQl9Ci0Jc3dpdGNoKG91dF9mbXQpIHsKLQljYXNlIFZJREVPX1BBTEVUVEVfUkdCNTU1OgotCQkqcmdiKysgPSAoKExJTUlUKGcreSkgJiAweGY4KSA8PCAyKSB8IChMSU1JVChiK3kpID4+IDMpOwotCQkqcmdiKysgPSAoKExJTUlUKHIreSkgJiAweGY4KSA+PiAxKSB8IChMSU1JVChnK3kpID4+IDYpOwotCQkqcmdiKysgPSAoKExJTUlUKGcreTEpICYgMHhmOCkgPDwgMikgfCAoTElNSVQoYit5MSkgPj4gMyk7Ci0JCSpyZ2IgPSAoKExJTUlUKHIreTEpICYgMHhmOCkgPj4gMSkgfCAoTElNSVQoZyt5MSkgPj4gNik7Ci0JCXJldHVybiA0OwotCWNhc2UgVklERU9fUEFMRVRURV9SR0I1NjU6Ci0JCSpyZ2IrKyA9ICgoTElNSVQoZyt5KSAmIDB4ZmMpIDw8IDMpIHwgKExJTUlUKGIreSkgPj4gMyk7Ci0JCSpyZ2IrKyA9IChMSU1JVChyK3kpICYgMHhmOCkgfCAoTElNSVQoZyt5KSA+PiA1KTsKLQkJKnJnYisrID0gKChMSU1JVChnK3kxKSAmIDB4ZmMpIDw8IDMpIHwgKExJTUlUKGIreTEpID4+IDMpOwotCQkqcmdiID0gKExJTUlUKHIreTEpICYgMHhmOCkgfCAoTElNSVQoZyt5MSkgPj4gNSk7Ci0JCXJldHVybiA0OwotCWNhc2UgVklERU9fUEFMRVRURV9SR0IyNDoKLQkJaWYgKG1tYXBfa2x1ZGdlKSB7Ci0JCQkqcmdiKysgPSBMSU1JVChiK3kpOwotCQkJKnJnYisrID0gTElNSVQoZyt5KTsKLQkJCSpyZ2IrKyA9IExJTUlUKHIreSk7Ci0JCQkqcmdiKysgPSBMSU1JVChiK3kxKTsKLQkJCSpyZ2IrKyA9IExJTUlUKGcreTEpOwotCQkJKnJnYiA9IExJTUlUKHIreTEpOwotCQl9IGVsc2UgewotCQkJKnJnYisrID0gTElNSVQocit5KTsKLQkJCSpyZ2IrKyA9IExJTUlUKGcreSk7Ci0JCQkqcmdiKysgPSBMSU1JVChiK3kpOwotCQkJKnJnYisrID0gTElNSVQocit5MSk7Ci0JCQkqcmdiKysgPSBMSU1JVChnK3kxKTsKLQkJCSpyZ2IgPSBMSU1JVChiK3kxKTsKLQkJfQotCQlyZXR1cm4gNjsKLQljYXNlIFZJREVPX1BBTEVUVEVfUkdCMzI6Ci0JCWlmIChtbWFwX2tsdWRnZSkgewotCQkJKnJnYisrID0gTElNSVQoYit5KTsKLQkJCSpyZ2IrKyA9IExJTUlUKGcreSk7Ci0JCQkqcmdiKysgPSBMSU1JVChyK3kpOwotCQkJcmdiKys7Ci0JCQkqcmdiKysgPSBMSU1JVChiK3kxKTsKLQkJCSpyZ2IrKyA9IExJTUlUKGcreTEpOwotCQkJKnJnYiA9IExJTUlUKHIreTEpOwotCQl9IGVsc2UgewotCQkJKnJnYisrID0gTElNSVQocit5KTsKLQkJCSpyZ2IrKyA9IExJTUlUKGcreSk7Ci0JCQkqcmdiKysgPSBMSU1JVChiK3kpOwotCQkJcmdiKys7Ci0JCQkqcmdiKysgPSBMSU1JVChyK3kxKTsKLQkJCSpyZ2IrKyA9IExJTUlUKGcreTEpOwotCQkJKnJnYiA9IExJTUlUKGIreTEpOwotCQl9Ci0JCXJldHVybiA4OwotCWNhc2UgVklERU9fUEFMRVRURV9HUkVZOgotCQkqcmdiKysgPSB5OwotCQkqcmdiID0geTE7Ci0JCXJldHVybiAyOwotCWNhc2UgVklERU9fUEFMRVRURV9ZVVY0MjI6Ci0JY2FzZSBWSURFT19QQUxFVFRFX1lVWVY6Ci0JCSpyZ2IrKyA9IHk7Ci0JCSpyZ2IrKyA9IHU7Ci0JCSpyZ2IrKyA9IHkxOwotCQkqcmdiID0gdjsKLQkJcmV0dXJuIDQ7Ci0JY2FzZSBWSURFT19QQUxFVFRFX1VZVlk6Ci0JCSpyZ2IrKyA9IHU7Ci0JCSpyZ2IrKyA9IHk7Ci0JCSpyZ2IrKyA9IHY7Ci0JCSpyZ2IgPSB5MTsKLQkJcmV0dXJuIDQ7Ci0JZGVmYXVsdDoKLQkJREJHKCJFbXB0eTogJWRcbiIsIG91dF9mbXQpOwotCQlyZXR1cm4gMDsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgc2tpcGNvdW50KGludCBjb3VudCwgaW50IGZtdCkKLXsKLQlzd2l0Y2goZm10KSB7Ci0JY2FzZSBWSURFT19QQUxFVFRFX0dSRVk6Ci0JCXJldHVybiBjb3VudDsKLQljYXNlIFZJREVPX1BBTEVUVEVfUkdCNTU1OgotCWNhc2UgVklERU9fUEFMRVRURV9SR0I1NjU6Ci0JY2FzZSBWSURFT19QQUxFVFRFX1lVVjQyMjoKLQljYXNlIFZJREVPX1BBTEVUVEVfWVVZVjoKLQljYXNlIFZJREVPX1BBTEVUVEVfVVlWWToKLQkJcmV0dXJuIDIqY291bnQ7Ci0JY2FzZSBWSURFT19QQUxFVFRFX1JHQjI0OgotCQlyZXR1cm4gMypjb3VudDsKLQljYXNlIFZJREVPX1BBTEVUVEVfUkdCMzI6Ci0JCXJldHVybiA0KmNvdW50OwotCWRlZmF1bHQ6Ci0JCXJldHVybiAwOwotCX0KLX0KLQotc3RhdGljIGludCBwYXJzZV9waWN0dXJlKHN0cnVjdCBjYW1fZGF0YSAqY2FtLCBpbnQgc2l6ZSkKLXsKLQl1OCAqb2J1ZiwgKmlidWYsICplbmRfb2J1ZjsKLQlpbnQgbGwsIGluX3V5dnksIGNvbXByZXNzZWQsIGRlY2ltYXRpb24sIGV2ZW5fbGluZSwgb3JpZ3NpemUsIG91dF9mbXQ7Ci0JaW50IHJvd3MsIGNvbHMsIGxpbmVzaXplLCBzdWJzYW1wbGVfNDIyOwotCi0JLyogbWFrZSBzdXJlIHBhcmFtcyBkb24ndCBjaGFuZ2Ugd2hpbGUgd2UgYXJlIGRlY29kaW5nICovCi0JbXV0ZXhfbG9jaygmY2FtLT5wYXJhbV9sb2NrKTsKLQotCW9idWYgPSBjYW0tPmRlY29tcHJlc3NlZF9mcmFtZS5kYXRhOwotCWVuZF9vYnVmID0gb2J1ZitDUElBX01BWF9GUkFNRV9TSVpFOwotCWlidWYgPSBjYW0tPnJhd19pbWFnZTsKLQlvcmlnc2l6ZSA9IHNpemU7Ci0Jb3V0X2ZtdCA9IGNhbS0+dnAucGFsZXR0ZTsKLQotCWlmICgoaWJ1ZlswXSAhPSBNQUdJQ18wKSB8fCAoaWJ1ZlsxXSAhPSBNQUdJQ18xKSkgewotCQlMT0coImhlYWRlciBub3QgZm91bmRcbiIpOwotCQltdXRleF91bmxvY2soJmNhbS0+cGFyYW1fbG9jayk7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlpZiAoKGlidWZbMTZdICE9IFZJREVPU0laRV9RQ0lGKSAmJiAoaWJ1ZlsxNl0gIT0gVklERU9TSVpFX0NJRikpIHsKLQkJTE9HKCJ3cm9uZyB2aWRlbyBzaXplXG4iKTsKLQkJbXV0ZXhfdW5sb2NrKCZjYW0tPnBhcmFtX2xvY2spOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JaWYgKGlidWZbMTddICE9IFNVQlNBTVBMRV80MjAgJiYgaWJ1ZlsxN10gIT0gU1VCU0FNUExFXzQyMikgewotCQlMT0coImlsbGVnYWwgc3VidHlwZSAlZFxuIixpYnVmWzE3XSk7Ci0JCW11dGV4X3VubG9jaygmY2FtLT5wYXJhbV9sb2NrKTsKLQkJcmV0dXJuIC0xOwotCX0KLQlzdWJzYW1wbGVfNDIyID0gaWJ1ZlsxN10gPT0gU1VCU0FNUExFXzQyMjsKLQotCWlmIChpYnVmWzE4XSAhPSBZVVZPUkRFUl9ZVVlWICYmIGlidWZbMThdICE9IFlVVk9SREVSX1VZVlkpIHsKLQkJTE9HKCJpbGxlZ2FsIHl1dm9yZGVyICVkXG4iLGlidWZbMThdKTsKLQkJbXV0ZXhfdW5sb2NrKCZjYW0tPnBhcmFtX2xvY2spOwotCQlyZXR1cm4gLTE7Ci0JfQotCWluX3V5dnkgPSBpYnVmWzE4XSA9PSBZVVZPUkRFUl9VWVZZOwotCi0JaWYgKChpYnVmWzI0XSAhPSBjYW0tPnBhcmFtcy5yb2kuY29sU3RhcnQpIHx8Ci0JICAgIChpYnVmWzI1XSAhPSBjYW0tPnBhcmFtcy5yb2kuY29sRW5kKSB8fAotCSAgICAoaWJ1ZlsyNl0gIT0gY2FtLT5wYXJhbXMucm9pLnJvd1N0YXJ0KSB8fAotCSAgICAoaWJ1ZlsyN10gIT0gY2FtLT5wYXJhbXMucm9pLnJvd0VuZCkpIHsKLQkJTE9HKCJST0kgbWlzbWF0Y2hcbiIpOwotCQltdXRleF91bmxvY2soJmNhbS0+cGFyYW1fbG9jayk7Ci0JCXJldHVybiAtMTsKLQl9Ci0JY29scyA9IDgqKGlidWZbMjVdIC0gaWJ1ZlsyNF0pOwotCXJvd3MgPSA0KihpYnVmWzI3XSAtIGlidWZbMjZdKTsKLQotCi0JaWYgKChpYnVmWzI4XSAhPSBOT1RfQ09NUFJFU1NFRCkgJiYgKGlidWZbMjhdICE9IENPTVBSRVNTRUQpKSB7Ci0JCUxPRygiaWxsZWdhbCBjb21wcmVzc2lvbiAlZFxuIixpYnVmWzI4XSk7Ci0JCW11dGV4X3VubG9jaygmY2FtLT5wYXJhbV9sb2NrKTsKLQkJcmV0dXJuIC0xOwotCX0KLQljb21wcmVzc2VkID0gKGlidWZbMjhdID09IENPTVBSRVNTRUQpOwotCi0JaWYgKGlidWZbMjldICE9IE5PX0RFQ0lNQVRJT04gJiYgaWJ1ZlsyOV0gIT0gREVDSU1BVElPTl9FTkFCKSB7Ci0JCUxPRygiaWxsZWdhbCBkZWNpbWF0aW9uICVkXG4iLGlidWZbMjldKTsKLQkJbXV0ZXhfdW5sb2NrKCZjYW0tPnBhcmFtX2xvY2spOwotCQlyZXR1cm4gLTE7Ci0JfQotCWRlY2ltYXRpb24gPSAoaWJ1ZlsyOV0gPT0gREVDSU1BVElPTl9FTkFCKTsKLQotCWNhbS0+cGFyYW1zLnl1dlRocmVzaG9sZC55VGhyZXNob2xkID0gaWJ1ZlszMF07Ci0JY2FtLT5wYXJhbXMueXV2VGhyZXNob2xkLnV2VGhyZXNob2xkID0gaWJ1ZlszMV07Ci0JY2FtLT5wYXJhbXMuc3RhdHVzLnN5c3RlbVN0YXRlID0gaWJ1ZlszMl07Ci0JY2FtLT5wYXJhbXMuc3RhdHVzLmdyYWJTdGF0ZSA9IGlidWZbMzNdOwotCWNhbS0+cGFyYW1zLnN0YXR1cy5zdHJlYW1TdGF0ZSA9IGlidWZbMzRdOwotCWNhbS0+cGFyYW1zLnN0YXR1cy5mYXRhbEVycm9yID0gaWJ1ZlszNV07Ci0JY2FtLT5wYXJhbXMuc3RhdHVzLmNtZEVycm9yID0gaWJ1ZlszNl07Ci0JY2FtLT5wYXJhbXMuc3RhdHVzLmRlYnVnRmxhZ3MgPSBpYnVmWzM3XTsKLQljYW0tPnBhcmFtcy5zdGF0dXMudnBTdGF0dXMgPSBpYnVmWzM4XTsKLQljYW0tPnBhcmFtcy5zdGF0dXMuZXJyb3JDb2RlID0gaWJ1ZlszOV07Ci0JY2FtLT5mcHMgPSBpYnVmWzQxXTsKLQltdXRleF91bmxvY2soJmNhbS0+cGFyYW1fbG9jayk7Ci0KLQlsaW5lc2l6ZSA9IHNraXBjb3VudChjb2xzLCBvdXRfZm10KTsKLQlpYnVmICs9IEZSQU1FX0hFQURFUl9TSVpFOwotCXNpemUgLT0gRlJBTUVfSEVBREVSX1NJWkU7Ci0JbGwgPSBpYnVmWzBdIHwgKGlidWZbMV0gPDwgOCk7Ci0JaWJ1ZiArPSAyOwotCWV2ZW5fbGluZSA9IDE7Ci0KLQl3aGlsZSAoc2l6ZSA+IDApIHsKLQkJc2l6ZSAtPSAobGwrMik7Ci0JCWlmIChzaXplIDwgMCkgewotCQkJTE9HKCJJbnN1ZmZpY2llbnQgZGF0YSBpbiBidWZmZXJcbiIpOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0KLQkJd2hpbGUgKGxsID4gMSkgewotCQkJaWYgKCFjb21wcmVzc2VkIHx8IChjb21wcmVzc2VkICYmICEoKmlidWYgJiAxKSkpIHsKLQkJCQlpZihzdWJzYW1wbGVfNDIyIHx8IGV2ZW5fbGluZSkgewotCQkJCW9idWYgKz0geXV2Y29udmVydChpYnVmLCBvYnVmLCBvdXRfZm10LAotCQkJCQkJICAgaW5fdXl2eSwgY2FtLT5tbWFwX2tsdWRnZSk7Ci0JCQkJaWJ1ZiArPSA0OwotCQkJCWxsIC09IDQ7Ci0JCQl9IGVsc2UgewotCQkJCQkvKiBTVUJTQU1QTEVfNDIwIG9uIGFuIG9kZCBsaW5lICovCi0JCQkJCW9idWYgKz0gY29udmVydDQyMChpYnVmLCBvYnVmLAotCQkJCQkJCSAgIG91dF9mbXQsIGxpbmVzaXplLAotCQkJCQkJCSAgIGNhbS0+bW1hcF9rbHVkZ2UpOwotCQkJCQlpYnVmICs9IDI7Ci0JCQkJCWxsIC09IDI7Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQkvKnNraXAgY29tcHJlc3NlZCBpbnRlcnZhbCBmcm9tIHByZXZpb3VzIGZyYW1lKi8KLQkJCQlvYnVmICs9IHNraXBjb3VudCgqaWJ1ZiA+PiAxLCBvdXRfZm10KTsKLQkJCQlpZiAob2J1ZiA+IGVuZF9vYnVmKSB7Ci0JCQkJCUxPRygiSW5zdWZmaWNpZW50IGJ1ZmZlciBzaXplXG4iKTsKLQkJCQkJcmV0dXJuIC0xOwotCQkJCX0KLQkJCQkrK2lidWY7Ci0JCQkJbGwtLTsKLQkJCX0KLQkJfQotCQlpZiAobGwgPT0gMSkgewotCQkJaWYgKCppYnVmICE9IEVPTCkgewotCQkJCURCRygiRU9MIG5vdCBmb3VuZCBnaXZpbmcgdXAgYWZ0ZXIgJWQvJWQiCi0JCQkJICAgICIgYnl0ZXNcbiIsIG9yaWdzaXplLXNpemUsIG9yaWdzaXplKTsKLQkJCQlyZXR1cm4gLTE7Ci0JCQl9Ci0KLQkJCSsraWJ1ZjsgLyogc2tpcCBvdmVyIEVPTCAqLwotCi0JCQlpZiAoKHNpemUgPiAzKSAmJiAoaWJ1ZlswXSA9PSBFT0kpICYmIChpYnVmWzFdID09IEVPSSkgJiYKLQkJCSAgIChpYnVmWzJdID09IEVPSSkgJiYgKGlidWZbM10gPT0gRU9JKSkgewotCQkJCXNpemUgLT0gNDsKLQkJCQlicmVhazsKLQkJCX0KLQotCQkJaWYoZGVjaW1hdGlvbikgewotCQkJCS8qIHNraXAgdGhlIG9kZCBsaW5lcyBmb3Igbm93ICovCi0JCQkJb2J1ZiArPSBsaW5lc2l6ZTsKLQkJCX0KLQotCQkJaWYgKHNpemUgPiAxKSB7Ci0JCQkJbGwgPSBpYnVmWzBdIHwgKGlidWZbMV0gPDwgOCk7Ci0JCQkJaWJ1ZiArPSAyOyAvKiBza2lwIG92ZXIgbGluZSBsZW5ndGggKi8KLQkJCX0KLQkJCWlmKCFkZWNpbWF0aW9uKQotCQkJCWV2ZW5fbGluZSA9ICFldmVuX2xpbmU7Ci0JCX0gZWxzZSB7Ci0JCQlMT0coImxpbmUgbGVuZ3RoIHdhcyBub3QgMSBidXQgJWQgYWZ0ZXIgJWQvJWQgYnl0ZXNcbiIsCi0JCQkgICAgbGwsIG9yaWdzaXplLXNpemUsIG9yaWdzaXplKTsKLQkJCXJldHVybiAtMTsKLQkJfQotCX0KLQotCWlmKGRlY2ltYXRpb24pIHsKLQkJLyogaW50ZXJwb2xhdGUgb2RkIHJvd3MgKi8KLQkJaW50IGksIGo7Ci0JCXU4ICpwcmV2LCAqbmV4dDsKLQkJcHJldiA9IGNhbS0+ZGVjb21wcmVzc2VkX2ZyYW1lLmRhdGE7Ci0JCW9idWYgPSBwcmV2K2xpbmVzaXplOwotCQluZXh0ID0gb2J1ZitsaW5lc2l6ZTsKLQkJZm9yKGk9MTsgaTxyb3dzLTE7IGkrPTIpIHsKLQkJCWZvcihqPTA7IGo8bGluZXNpemU7ICsraikgewotCQkJCSpvYnVmKysgPSAoKGludCkqcHJldisrICsgKm5leHQrKykgLyAyOwotCQkJfQotCQkJcHJldiArPSBsaW5lc2l6ZTsKLQkJCW9idWYgKz0gbGluZXNpemU7Ci0JCQluZXh0ICs9IGxpbmVzaXplOwotCQl9Ci0JCS8qIGxhc3Qgcm93IGlzIG9kZCwganVzdCBjb3B5IHByZXZpb3VzIHJvdyAqLwotCQltZW1jcHkob2J1ZiwgcHJldiwgbGluZXNpemUpOwotCX0KLQotCWNhbS0+ZGVjb21wcmVzc2VkX2ZyYW1lLmNvdW50ID0gb2J1Zi1jYW0tPmRlY29tcHJlc3NlZF9mcmFtZS5kYXRhOwotCi0JcmV0dXJuIGNhbS0+ZGVjb21wcmVzc2VkX2ZyYW1lLmNvdW50OwotfQotCi0vKiBJbml0U3RyZWFtQ2FwIHdyYXBwZXIgdG8gc2VsZWN0IGNvcnJlY3Qgc3RhcnQgbGluZSAqLwotc3RhdGljIGlubGluZSBpbnQgaW5pdF9zdHJlYW1fY2FwKHN0cnVjdCBjYW1fZGF0YSAqY2FtKQotewotCXJldHVybiBkb19jb21tYW5kKGNhbSwgQ1BJQV9DT01NQU5EX0luaXRTdHJlYW1DYXAsCi0JCQkgIDAsIGNhbS0+cGFyYW1zLnN0cmVhbVN0YXJ0TGluZSwgMCwgMCk7Ci19Ci0KLQotLyogIGZpbmRfb3Zlcl9leHBvc3VyZQotICogICAgRmluZHMgYSBzdWl0YWJsZSB2YWx1ZSBvZiBPdmVyRXhwb3N1cmUgZm9yIHVzZSB3aXRoIFNldEZsaWNrZXJDdHJsCi0gKiAgICBTb21lIGNhbGN1bGF0aW9uIGlzIHJlcXVpcmVkIGJlY2F1c2UgdGhpcyB2YWx1ZSBjaGFuZ2VzIHdpdGggdGhlIGJyaWdodG5lc3MKLSAqICAgIHNldCB3aXRoIFNldENvbG91clBhcmFtZXRlcnMKLSAqCi0gKiAgUGFyYW1ldGVyczogQnJpZ2h0bmVzcyAgLSAgbGFzdCBicmlnaHRuZXNzIHZhbHVlIHNldCB3aXRoIFNldENvbG91clBhcmFtZXRlcnMKLSAqCi0gKiAgUmV0dXJuczogT3ZlckV4cG9zdXJlIHZhbHVlIHRvIHVzZSB3aXRoIFNldEZsaWNrZXJDdHJsCi0gKi8KLSNkZWZpbmUgRkxJQ0tFUl9NQVhfRVhQT1NVUkUgICAgICAgICAgICAgICAgICAgIDI1MAotI2RlZmluZSBGTElDS0VSX0FMTE9XQUJMRV9PVkVSX0VYUE9TVVJFICAgICAgICAgMTQ2Ci0jZGVmaW5lIEZMSUNLRVJfQlJJR0hUTkVTU19DT05TVEFOVCAgICAgICAgICAgICA1OQotc3RhdGljIGludCBmaW5kX292ZXJfZXhwb3N1cmUoaW50IGJyaWdodG5lc3MpCi17Ci0JaW50IE1heEFsbG93YWJsZU92ZXJFeHBvc3VyZSwgT3ZlckV4cG9zdXJlOwotCi0JTWF4QWxsb3dhYmxlT3ZlckV4cG9zdXJlID0gRkxJQ0tFUl9NQVhfRVhQT1NVUkUgLSBicmlnaHRuZXNzIC0KLQkJCQkgICBGTElDS0VSX0JSSUdIVE5FU1NfQ09OU1RBTlQ7Ci0KLQlpZiAoTWF4QWxsb3dhYmxlT3ZlckV4cG9zdXJlIDwgRkxJQ0tFUl9BTExPV0FCTEVfT1ZFUl9FWFBPU1VSRSkgewotCQlPdmVyRXhwb3N1cmUgPSBNYXhBbGxvd2FibGVPdmVyRXhwb3N1cmU7Ci0JfSBlbHNlIHsKLQkJT3ZlckV4cG9zdXJlID0gRkxJQ0tFUl9BTExPV0FCTEVfT1ZFUl9FWFBPU1VSRTsKLQl9Ci0KLQlyZXR1cm4gT3ZlckV4cG9zdXJlOwotfQotI3VuZGVmIEZMSUNLRVJfTUFYX0VYUE9TVVJFCi0jdW5kZWYgRkxJQ0tFUl9BTExPV0FCTEVfT1ZFUl9FWFBPU1VSRQotI3VuZGVmIEZMSUNLRVJfQlJJR0hUTkVTU19DT05TVEFOVAotCi0vKiB1cGRhdGUgdmFyaW91cyBjYW1lcmEgbW9kZXMgYW5kIHNldHRpbmdzICovCi1zdGF0aWMgdm9pZCBkaXNwYXRjaF9jb21tYW5kcyhzdHJ1Y3QgY2FtX2RhdGEgKmNhbSkKLXsKLQltdXRleF9sb2NrKCZjYW0tPnBhcmFtX2xvY2spOwotCWlmIChjYW0tPmNtZF9xdWV1ZT09Q09NTUFORF9OT05FKSB7Ci0JCW11dGV4X3VubG9jaygmY2FtLT5wYXJhbV9sb2NrKTsKLQkJcmV0dXJuOwotCX0KLQlERUJfQllURShjYW0tPmNtZF9xdWV1ZSk7Ci0JREVCX0JZVEUoY2FtLT5jbWRfcXVldWU+PjgpOwotCWlmIChjYW0tPmNtZF9xdWV1ZSAmIENPTU1BTkRfU0VURk9STUFUKSB7Ci0JCWRvX2NvbW1hbmQoY2FtLCBDUElBX0NPTU1BTkRfU2V0Rm9ybWF0LAotCQkJICAgY2FtLT5wYXJhbXMuZm9ybWF0LnZpZGVvU2l6ZSwKLQkJCSAgIGNhbS0+cGFyYW1zLmZvcm1hdC5zdWJTYW1wbGUsCi0JCQkgICBjYW0tPnBhcmFtcy5mb3JtYXQueXV2T3JkZXIsIDApOwotCQlkb19jb21tYW5kKGNhbSwgQ1BJQV9DT01NQU5EX1NldFJPSSwKLQkJCSAgIGNhbS0+cGFyYW1zLnJvaS5jb2xTdGFydCwgY2FtLT5wYXJhbXMucm9pLmNvbEVuZCwKLQkJCSAgIGNhbS0+cGFyYW1zLnJvaS5yb3dTdGFydCwgY2FtLT5wYXJhbXMucm9pLnJvd0VuZCk7Ci0JCWNhbS0+Zmlyc3RfZnJhbWUgPSAxOwotCX0KLQotCWlmIChjYW0tPmNtZF9xdWV1ZSAmIENPTU1BTkRfU0VUQ09MT1VSUEFSQU1TKQotCQlkb19jb21tYW5kKGNhbSwgQ1BJQV9DT01NQU5EX1NldENvbG91clBhcmFtcywKLQkJCSAgIGNhbS0+cGFyYW1zLmNvbG91clBhcmFtcy5icmlnaHRuZXNzLAotCQkJICAgY2FtLT5wYXJhbXMuY29sb3VyUGFyYW1zLmNvbnRyYXN0LAotCQkJICAgY2FtLT5wYXJhbXMuY29sb3VyUGFyYW1zLnNhdHVyYXRpb24sIDApOwotCi0JaWYgKGNhbS0+Y21kX3F1ZXVlICYgQ09NTUFORF9TRVRBUENPUikKLQkJZG9fY29tbWFuZChjYW0sIENQSUFfQ09NTUFORF9TZXRBcGNvciwKLQkJCSAgIGNhbS0+cGFyYW1zLmFwY29yLmdhaW4xLAotCQkJICAgY2FtLT5wYXJhbXMuYXBjb3IuZ2FpbjIsCi0JCQkgICBjYW0tPnBhcmFtcy5hcGNvci5nYWluNCwKLQkJCSAgIGNhbS0+cGFyYW1zLmFwY29yLmdhaW44KTsKLQotCWlmIChjYW0tPmNtZF9xdWV1ZSAmIENPTU1BTkRfU0VUVkxPRkZTRVQpCi0JCWRvX2NvbW1hbmQoY2FtLCBDUElBX0NPTU1BTkRfU2V0VkxPZmZzZXQsCi0JCQkgICBjYW0tPnBhcmFtcy52bE9mZnNldC5nYWluMSwKLQkJCSAgIGNhbS0+cGFyYW1zLnZsT2Zmc2V0LmdhaW4yLAotCQkJICAgY2FtLT5wYXJhbXMudmxPZmZzZXQuZ2FpbjQsCi0JCQkgICBjYW0tPnBhcmFtcy52bE9mZnNldC5nYWluOCk7Ci0KLQlpZiAoY2FtLT5jbWRfcXVldWUgJiBDT01NQU5EX1NFVEVYUE9TVVJFKSB7Ci0JCWRvX2NvbW1hbmRfZXh0ZW5kZWQoY2FtLCBDUElBX0NPTU1BTkRfU2V0RXhwb3N1cmUsCi0JCQkJICAgIGNhbS0+cGFyYW1zLmV4cG9zdXJlLmdhaW5Nb2RlLAotCQkJCSAgICAxLAotCQkJCSAgICBjYW0tPnBhcmFtcy5leHBvc3VyZS5jb21wTW9kZSwKLQkJCQkgICAgY2FtLT5wYXJhbXMuZXhwb3N1cmUuY2VudHJlV2VpZ2h0LAotCQkJCSAgICBjYW0tPnBhcmFtcy5leHBvc3VyZS5nYWluLAotCQkJCSAgICBjYW0tPnBhcmFtcy5leHBvc3VyZS5maW5lRXhwLAotCQkJCSAgICBjYW0tPnBhcmFtcy5leHBvc3VyZS5jb2Fyc2VFeHBMbywKLQkJCQkgICAgY2FtLT5wYXJhbXMuZXhwb3N1cmUuY29hcnNlRXhwSGksCi0JCQkJICAgIGNhbS0+cGFyYW1zLmV4cG9zdXJlLnJlZENvbXAsCi0JCQkJICAgIGNhbS0+cGFyYW1zLmV4cG9zdXJlLmdyZWVuMUNvbXAsCi0JCQkJICAgIGNhbS0+cGFyYW1zLmV4cG9zdXJlLmdyZWVuMkNvbXAsCi0JCQkJICAgIGNhbS0+cGFyYW1zLmV4cG9zdXJlLmJsdWVDb21wKTsKLQkJaWYoY2FtLT5wYXJhbXMuZXhwb3N1cmUuZXhwTW9kZSAhPSAxKSB7Ci0JCQlkb19jb21tYW5kX2V4dGVuZGVkKGNhbSwgQ1BJQV9DT01NQU5EX1NldEV4cG9zdXJlLAotCQkJCQkgICAgMCwKLQkJCQkJICAgIGNhbS0+cGFyYW1zLmV4cG9zdXJlLmV4cE1vZGUsCi0JCQkJCSAgICAwLCAwLAotCQkJCQkgICAgY2FtLT5wYXJhbXMuZXhwb3N1cmUuZ2FpbiwKLQkJCQkJICAgIGNhbS0+cGFyYW1zLmV4cG9zdXJlLmZpbmVFeHAsCi0JCQkJCSAgICBjYW0tPnBhcmFtcy5leHBvc3VyZS5jb2Fyc2VFeHBMbywKLQkJCQkJICAgIGNhbS0+cGFyYW1zLmV4cG9zdXJlLmNvYXJzZUV4cEhpLAotCQkJCQkgICAgMCwgMCwgMCwgMCk7Ci0JCX0KLQl9Ci0KLQlpZiAoY2FtLT5jbWRfcXVldWUgJiBDT01NQU5EX1NFVENPTE9VUkJBTEFOQ0UpIHsKLQkJaWYgKGNhbS0+cGFyYW1zLmNvbG91ckJhbGFuY2UuYmFsYW5jZU1vZGUgPT0gMSkgewotCQkJZG9fY29tbWFuZChjYW0sIENQSUFfQ09NTUFORF9TZXRDb2xvdXJCYWxhbmNlLAotCQkJCSAgIDEsCi0JCQkJICAgY2FtLT5wYXJhbXMuY29sb3VyQmFsYW5jZS5yZWRHYWluLAotCQkJCSAgIGNhbS0+cGFyYW1zLmNvbG91ckJhbGFuY2UuZ3JlZW5HYWluLAotCQkJCSAgIGNhbS0+cGFyYW1zLmNvbG91ckJhbGFuY2UuYmx1ZUdhaW4pOwotCQkJZG9fY29tbWFuZChjYW0sIENQSUFfQ09NTUFORF9TZXRDb2xvdXJCYWxhbmNlLAotCQkJCSAgIDMsIDAsIDAsIDApOwotCQl9Ci0JCWlmIChjYW0tPnBhcmFtcy5jb2xvdXJCYWxhbmNlLmJhbGFuY2VNb2RlID09IDIpIHsKLQkJCWRvX2NvbW1hbmQoY2FtLCBDUElBX0NPTU1BTkRfU2V0Q29sb3VyQmFsYW5jZSwKLQkJCQkgICAyLCAwLCAwLCAwKTsKLQkJfQotCQlpZiAoY2FtLT5wYXJhbXMuY29sb3VyQmFsYW5jZS5iYWxhbmNlTW9kZSA9PSAzKSB7Ci0JCQlkb19jb21tYW5kKGNhbSwgQ1BJQV9DT01NQU5EX1NldENvbG91ckJhbGFuY2UsCi0JCQkJICAgMywgMCwgMCwgMCk7Ci0JCX0KLQl9Ci0KLQlpZiAoY2FtLT5jbWRfcXVldWUgJiBDT01NQU5EX1NFVENPTVBSRVNTSU9OVEFSR0VUKQotCQlkb19jb21tYW5kKGNhbSwgQ1BJQV9DT01NQU5EX1NldENvbXByZXNzaW9uVGFyZ2V0LAotCQkJICAgY2FtLT5wYXJhbXMuY29tcHJlc3Npb25UYXJnZXQuZnJUYXJnZXRpbmcsCi0JCQkgICBjYW0tPnBhcmFtcy5jb21wcmVzc2lvblRhcmdldC50YXJnZXRGUiwKLQkJCSAgIGNhbS0+cGFyYW1zLmNvbXByZXNzaW9uVGFyZ2V0LnRhcmdldFEsIDApOwotCi0JaWYgKGNhbS0+Y21kX3F1ZXVlICYgQ09NTUFORF9TRVRZVVZUSFJFU0gpCi0JCWRvX2NvbW1hbmQoY2FtLCBDUElBX0NPTU1BTkRfU2V0WVVWVGhyZXNoLAotCQkJICAgY2FtLT5wYXJhbXMueXV2VGhyZXNob2xkLnlUaHJlc2hvbGQsCi0JCQkgICBjYW0tPnBhcmFtcy55dXZUaHJlc2hvbGQudXZUaHJlc2hvbGQsIDAsIDApOwotCi0JaWYgKGNhbS0+Y21kX3F1ZXVlICYgQ09NTUFORF9TRVRDT01QUkVTU0lPTlBBUkFNUykKLQkJZG9fY29tbWFuZF9leHRlbmRlZChjYW0sIENQSUFfQ09NTUFORF9TZXRDb21wcmVzc2lvblBhcmFtcywKLQkJCSAgICAwLCAwLCAwLCAwLAotCQkJICAgIGNhbS0+cGFyYW1zLmNvbXByZXNzaW9uUGFyYW1zLmh5c3RlcmVzaXMsCi0JCQkgICAgY2FtLT5wYXJhbXMuY29tcHJlc3Npb25QYXJhbXMudGhyZXNoTWF4LAotCQkJICAgIGNhbS0+cGFyYW1zLmNvbXByZXNzaW9uUGFyYW1zLnNtYWxsU3RlcCwKLQkJCSAgICBjYW0tPnBhcmFtcy5jb21wcmVzc2lvblBhcmFtcy5sYXJnZVN0ZXAsCi0JCQkgICAgY2FtLT5wYXJhbXMuY29tcHJlc3Npb25QYXJhbXMuZGVjaW1hdGlvbkh5c3RlcmVzaXMsCi0JCQkgICAgY2FtLT5wYXJhbXMuY29tcHJlc3Npb25QYXJhbXMuZnJEaWZmU3RlcFRocmVzaCwKLQkJCSAgICBjYW0tPnBhcmFtcy5jb21wcmVzc2lvblBhcmFtcy5xRGlmZlN0ZXBUaHJlc2gsCi0JCQkgICAgY2FtLT5wYXJhbXMuY29tcHJlc3Npb25QYXJhbXMuZGVjaW1hdGlvblRocmVzaE1vZCk7Ci0KLQlpZiAoY2FtLT5jbWRfcXVldWUgJiBDT01NQU5EX1NFVENPTVBSRVNTSU9OKQotCQlkb19jb21tYW5kKGNhbSwgQ1BJQV9DT01NQU5EX1NldENvbXByZXNzaW9uLAotCQkJICAgY2FtLT5wYXJhbXMuY29tcHJlc3Npb24ubW9kZSwKLQkJCSAgIGNhbS0+cGFyYW1zLmNvbXByZXNzaW9uLmRlY2ltYXRpb24sIDAsIDApOwotCi0JaWYgKGNhbS0+Y21kX3F1ZXVlICYgQ09NTUFORF9TRVRTRU5TT1JGUFMpCi0JCWRvX2NvbW1hbmQoY2FtLCBDUElBX0NPTU1BTkRfU2V0U2Vuc29yRlBTLAotCQkJICAgY2FtLT5wYXJhbXMuc2Vuc29yRnBzLmRpdmlzb3IsCi0JCQkgICBjYW0tPnBhcmFtcy5zZW5zb3JGcHMuYmFzZXJhdGUsIDAsIDApOwotCi0JaWYgKGNhbS0+Y21kX3F1ZXVlICYgQ09NTUFORF9TRVRGTElDS0VSQ1RSTCkKLQkJZG9fY29tbWFuZChjYW0sIENQSUFfQ09NTUFORF9TZXRGbGlja2VyQ3RybCwKLQkJCSAgIGNhbS0+cGFyYW1zLmZsaWNrZXJDb250cm9sLmZsaWNrZXJNb2RlLAotCQkJICAgY2FtLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuY29hcnNlSnVtcCwKLQkJCSAgIGFicyhjYW0tPnBhcmFtcy5mbGlja2VyQ29udHJvbC5hbGxvd2FibGVPdmVyRXhwb3N1cmUpLAotCQkJICAgMCk7Ci0KLQlpZiAoY2FtLT5jbWRfcXVldWUgJiBDT01NQU5EX1NFVEVDUFRJTUlORykKLQkJZG9fY29tbWFuZChjYW0sIENQSUFfQ09NTUFORF9TZXRFQ1BUaW1pbmcsCi0JCQkgICBjYW0tPnBhcmFtcy5lY3BUaW1pbmcsIDAsIDAsIDApOwotCi0JaWYgKGNhbS0+Y21kX3F1ZXVlICYgQ09NTUFORF9QQVVTRSkKLQkJZG9fY29tbWFuZChjYW0sIENQSUFfQ09NTUFORF9FbmRTdHJlYW1DYXAsIDAsIDAsIDAsIDApOwotCi0JaWYgKGNhbS0+Y21kX3F1ZXVlICYgQ09NTUFORF9SRVNVTUUpCi0JCWluaXRfc3RyZWFtX2NhcChjYW0pOwotCi0JaWYgKGNhbS0+Y21kX3F1ZXVlICYgQ09NTUFORF9TRVRMSUdIVFMgJiYgY2FtLT5wYXJhbXMucXgzLnF4M19kZXRlY3RlZCkKLQkgIHsKLQkgICAgaW50IHAxID0gKGNhbS0+cGFyYW1zLnF4My5ib3R0b21saWdodCA9PSAwKSA8PCAxOwotCSAgICBpbnQgcDIgPSAoY2FtLT5wYXJhbXMucXgzLnRvcGxpZ2h0ID09IDApIDw8IDM7Ci0JICAgIGRvX2NvbW1hbmQoY2FtLCBDUElBX0NPTU1BTkRfV3JpdGVWQ1JlZywgIDB4OTAsIDB4OEYsIDB4NTAsIDApOwotCSAgICBkb19jb21tYW5kKGNhbSwgQ1BJQV9DT01NQU5EX1dyaXRlTUNQb3J0LCAyLCAwLCAocDF8cDJ8MHhFMCksIDApOwotCSAgfQotCi0JY2FtLT5jbWRfcXVldWUgPSBDT01NQU5EX05PTkU7Ci0JbXV0ZXhfdW5sb2NrKCZjYW0tPnBhcmFtX2xvY2spOwotCXJldHVybjsKLX0KLQotCi0KLXN0YXRpYyB2b2lkIHNldF9mbGlja2VyKHN0cnVjdCBjYW1fcGFyYW1zICpwYXJhbXMsIHZvbGF0aWxlIHUzMiAqY29tbWFuZF9mbGFncywKLQkJCWludCBvbikKLXsKLQkvKiBFdmVyeXRoaW5nIGluIGhlcmUgaXMgZnJvbSB0aGUgV2luZG93cyBkcml2ZXIgKi8KLSNkZWZpbmUgRklSTVdBUkVfVkVSU0lPTih4LHkpIChwYXJhbXMtPnZlcnNpb24uZmlybXdhcmVWZXJzaW9uID09ICh4KSAmJiBcCi0JCQkgICAgICAgcGFyYW1zLT52ZXJzaW9uLmZpcm13YXJlUmV2aXNpb24gPT0gKHkpKQotLyogZGVmaW5lIGZvciBjb21wZ2FpbiBjYWxjdWxhdGlvbiAqLwotI2lmIDAKLSNkZWZpbmUgQ09NUEdBSU4oYmFzZSwgY3VyZXhwLCBuZXdleHApIFwKLSAgICAodTgpICgoKChmbG9hdCkgYmFzZSAtIDEyOC4wKSAqICgoZmxvYXQpIGN1cmV4cCAvIChmbG9hdCkgbmV3ZXhwKSkgKyAxMjguNSkKLSNkZWZpbmUgRVhQX0ZST01fQ09NUChiYXNlY29tcCwgY3VyY29tcCwgY3VyZXhwKSBcCi0gICAgKHUxNikoKGZsb2F0KWN1cmV4cCAqIChmbG9hdCkodTgpKGN1cmNvbXAgKyAxMjgpIC8gKGZsb2F0KSh1OCkoYmFzZWNvbXAgLSAxMjgpKQotI2Vsc2UKLSAgLyogZXF1aXZhbGVudCBmdW5jdGlvbnMgd2l0aG91dCBmbG9hdGluZyBwb2ludCBtYXRoICovCi0jZGVmaW5lIENPTVBHQUlOKGJhc2UsIGN1cmV4cCwgbmV3ZXhwKSBcCi0gICAgKHU4KSgxMjggKyAoKCh1MzIpKDIqKGJhc2UtMTI4KSpjdXJleHAgKyBuZXdleHApKSAvICgyKiBuZXdleHApKSApCi0jZGVmaW5lIEVYUF9GUk9NX0NPTVAoYmFzZWNvbXAsIGN1cmNvbXAsIGN1cmV4cCkgXAotICAgICAodTE2KSgoKHUzMikoY3VyZXhwICogKHU4KShjdXJjb21wICsgMTI4KSkgLyAodTgpKGJhc2Vjb21wIC0gMTI4KSkpCi0jZW5kaWYKLQotCi0JaW50IGN1cnJlbnRleHAgPSBwYXJhbXMtPmV4cG9zdXJlLmNvYXJzZUV4cExvICsKLQkJCSBwYXJhbXMtPmV4cG9zdXJlLmNvYXJzZUV4cEhpKjI1NjsKLQlpbnQgc3RhcnRleHA7Ci0JaWYgKG9uKSB7Ci0JCWludCBjaiA9IHBhcmFtcy0+ZmxpY2tlckNvbnRyb2wuY29hcnNlSnVtcDsKLQkJcGFyYW1zLT5mbGlja2VyQ29udHJvbC5mbGlja2VyTW9kZSA9IDE7Ci0JCXBhcmFtcy0+ZmxpY2tlckNvbnRyb2wuZGlzYWJsZWQgPSAwOwotCQlpZihwYXJhbXMtPmV4cG9zdXJlLmV4cE1vZGUgIT0gMikKLQkJCSpjb21tYW5kX2ZsYWdzIHw9IENPTU1BTkRfU0VURVhQT1NVUkU7Ci0JCXBhcmFtcy0+ZXhwb3N1cmUuZXhwTW9kZSA9IDI7Ci0JCWN1cnJlbnRleHAgPSBjdXJyZW50ZXhwIDw8IHBhcmFtcy0+ZXhwb3N1cmUuZ2FpbjsKLQkJcGFyYW1zLT5leHBvc3VyZS5nYWluID0gMDsKLQkJLyogcm91bmQgZG93biBjdXJyZW50IGV4cG9zdXJlIHRvIG5lYXJlc3QgdmFsdWUgKi8KLQkJc3RhcnRleHAgPSAoY3VycmVudGV4cCArIFJPVU5EX1VQX0VYUF9GT1JfRkxJQ0tFUikgLyBjajsKLQkJaWYoc3RhcnRleHAgPCAxKQotCQkJc3RhcnRleHAgPSAxOwotCQlzdGFydGV4cCA9IChzdGFydGV4cCAqIGNqKSAtIDE7Ci0JCWlmKEZJUk1XQVJFX1ZFUlNJT04oMSwyKSkKLQkJCXdoaWxlKHN0YXJ0ZXhwID4gTUFYX0VYUF8xMDIpCi0JCQkJc3RhcnRleHAgLT0gY2o7Ci0JCWVsc2UKLQkJCXdoaWxlKHN0YXJ0ZXhwID4gTUFYX0VYUCkKLQkJCQlzdGFydGV4cCAtPSBjajsKLQkJcGFyYW1zLT5leHBvc3VyZS5jb2Fyc2VFeHBMbyA9IHN0YXJ0ZXhwICYgMHhmZjsKLQkJcGFyYW1zLT5leHBvc3VyZS5jb2Fyc2VFeHBIaSA9IHN0YXJ0ZXhwID4+IDg7Ci0JCWlmIChjdXJyZW50ZXhwID4gc3RhcnRleHApIHsKLQkJCWlmIChjdXJyZW50ZXhwID4gKDIgKiBzdGFydGV4cCkpCi0JCQkJY3VycmVudGV4cCA9IDIgKiBzdGFydGV4cDsKLQkJCXBhcmFtcy0+ZXhwb3N1cmUucmVkQ29tcCA9IENPTVBHQUlOIChDT01QX1JFRCwgY3VycmVudGV4cCwgc3RhcnRleHApOwotCQkJcGFyYW1zLT5leHBvc3VyZS5ncmVlbjFDb21wID0gQ09NUEdBSU4gKENPTVBfR1JFRU4xLCBjdXJyZW50ZXhwLCBzdGFydGV4cCk7Ci0JCQlwYXJhbXMtPmV4cG9zdXJlLmdyZWVuMkNvbXAgPSBDT01QR0FJTiAoQ09NUF9HUkVFTjIsIGN1cnJlbnRleHAsIHN0YXJ0ZXhwKTsKLQkJCXBhcmFtcy0+ZXhwb3N1cmUuYmx1ZUNvbXAgPSBDT01QR0FJTiAoQ09NUF9CTFVFLCBjdXJyZW50ZXhwLCBzdGFydGV4cCk7Ci0JCX0gZWxzZSB7Ci0JCQlwYXJhbXMtPmV4cG9zdXJlLnJlZENvbXAgPSBDT01QX1JFRDsKLQkJCXBhcmFtcy0+ZXhwb3N1cmUuZ3JlZW4xQ29tcCA9IENPTVBfR1JFRU4xOwotCQkJcGFyYW1zLT5leHBvc3VyZS5ncmVlbjJDb21wID0gQ09NUF9HUkVFTjI7Ci0JCQlwYXJhbXMtPmV4cG9zdXJlLmJsdWVDb21wID0gQ09NUF9CTFVFOwotCQl9Ci0JCWlmKEZJUk1XQVJFX1ZFUlNJT04oMSwyKSkKLQkJCXBhcmFtcy0+ZXhwb3N1cmUuY29tcE1vZGUgPSAwOwotCQllbHNlCi0JCQlwYXJhbXMtPmV4cG9zdXJlLmNvbXBNb2RlID0gMTsKLQotCQlwYXJhbXMtPmFwY29yLmdhaW4xID0gMHgxODsKLQkJcGFyYW1zLT5hcGNvci5nYWluMiA9IDB4MTg7Ci0JCXBhcmFtcy0+YXBjb3IuZ2FpbjQgPSAweDE2OwotCQlwYXJhbXMtPmFwY29yLmdhaW44ID0gMHgxNDsKLQkJKmNvbW1hbmRfZmxhZ3MgfD0gQ09NTUFORF9TRVRBUENPUjsKLQl9IGVsc2UgewotCQlwYXJhbXMtPmZsaWNrZXJDb250cm9sLmZsaWNrZXJNb2RlID0gMDsKLQkJcGFyYW1zLT5mbGlja2VyQ29udHJvbC5kaXNhYmxlZCA9IDE7Ci0JCS8qIENvYXJzZSA9IGF2ZXJhZ2Ugb2YgZXF1aXZhbGVudCBjb2Fyc2UgZm9yIGVhY2ggY29tcCBjaGFubmVsICovCi0JCXN0YXJ0ZXhwID0gRVhQX0ZST01fQ09NUChDT01QX1JFRCwgcGFyYW1zLT5leHBvc3VyZS5yZWRDb21wLCBjdXJyZW50ZXhwKTsKLQkJc3RhcnRleHAgKz0gRVhQX0ZST01fQ09NUChDT01QX0dSRUVOMSwgcGFyYW1zLT5leHBvc3VyZS5ncmVlbjFDb21wLCBjdXJyZW50ZXhwKTsKLQkJc3RhcnRleHAgKz0gRVhQX0ZST01fQ09NUChDT01QX0dSRUVOMiwgcGFyYW1zLT5leHBvc3VyZS5ncmVlbjJDb21wLCBjdXJyZW50ZXhwKTsKLQkJc3RhcnRleHAgKz0gRVhQX0ZST01fQ09NUChDT01QX0JMVUUsIHBhcmFtcy0+ZXhwb3N1cmUuYmx1ZUNvbXAsIGN1cnJlbnRleHApOwotCQlzdGFydGV4cCA9IHN0YXJ0ZXhwID4+IDI7Ci0JCXdoaWxlKHN0YXJ0ZXhwID4gTUFYX0VYUCAmJgotCQkgICAgICBwYXJhbXMtPmV4cG9zdXJlLmdhaW4gPCBwYXJhbXMtPmV4cG9zdXJlLmdhaW5Nb2RlLTEpIHsKLQkJCXN0YXJ0ZXhwID0gc3RhcnRleHAgPj4gMTsKLQkJCSsrcGFyYW1zLT5leHBvc3VyZS5nYWluOwotCQl9Ci0JCWlmKEZJUk1XQVJFX1ZFUlNJT04oMSwyKSAmJiBzdGFydGV4cCA+IE1BWF9FWFBfMTAyKQotCQkJc3RhcnRleHAgPSBNQVhfRVhQXzEwMjsKLQkJaWYoc3RhcnRleHAgPiBNQVhfRVhQKQotCQkJc3RhcnRleHAgPSBNQVhfRVhQOwotCQlwYXJhbXMtPmV4cG9zdXJlLmNvYXJzZUV4cExvID0gc3RhcnRleHAmMHhmZjsKLQkJcGFyYW1zLT5leHBvc3VyZS5jb2Fyc2VFeHBIaSA9IHN0YXJ0ZXhwID4+IDg7Ci0JCXBhcmFtcy0+ZXhwb3N1cmUucmVkQ29tcCA9IENPTVBfUkVEOwotCQlwYXJhbXMtPmV4cG9zdXJlLmdyZWVuMUNvbXAgPSBDT01QX0dSRUVOMTsKLQkJcGFyYW1zLT5leHBvc3VyZS5ncmVlbjJDb21wID0gQ09NUF9HUkVFTjI7Ci0JCXBhcmFtcy0+ZXhwb3N1cmUuYmx1ZUNvbXAgPSBDT01QX0JMVUU7Ci0JCXBhcmFtcy0+ZXhwb3N1cmUuY29tcE1vZGUgPSAxOwotCQkqY29tbWFuZF9mbGFncyB8PSBDT01NQU5EX1NFVEVYUE9TVVJFOwotCQlwYXJhbXMtPmFwY29yLmdhaW4xID0gMHgxODsKLQkJcGFyYW1zLT5hcGNvci5nYWluMiA9IDB4MTY7Ci0JCXBhcmFtcy0+YXBjb3IuZ2FpbjQgPSAweDI0OwotCQlwYXJhbXMtPmFwY29yLmdhaW44ID0gMHgzNDsKLQkJKmNvbW1hbmRfZmxhZ3MgfD0gQ09NTUFORF9TRVRBUENPUjsKLQl9Ci0JcGFyYW1zLT52bE9mZnNldC5nYWluMSA9IDIwOwotCXBhcmFtcy0+dmxPZmZzZXQuZ2FpbjIgPSAyNDsKLQlwYXJhbXMtPnZsT2Zmc2V0LmdhaW40ID0gMjY7Ci0JcGFyYW1zLT52bE9mZnNldC5nYWluOCA9IDI2OwotCSpjb21tYW5kX2ZsYWdzIHw9IENPTU1BTkRfU0VUVkxPRkZTRVQ7Ci0jdW5kZWYgRklSTVdBUkVfVkVSU0lPTgotI3VuZGVmIEVYUF9GUk9NX0NPTVAKLSN1bmRlZiBDT01QR0FJTgotfQotCi0jZGVmaW5lIEZJUk1XQVJFX1ZFUlNJT04oeCx5KSAoY2FtLT5wYXJhbXMudmVyc2lvbi5maXJtd2FyZVZlcnNpb24gPT0gKHgpICYmIFwKLQkJCSAgICAgICBjYW0tPnBhcmFtcy52ZXJzaW9uLmZpcm13YXJlUmV2aXNpb24gPT0gKHkpKQotLyogbW9uaXRvciB0aGUgZXhwb3N1cmUgYW5kIGFkanVzdCB0aGUgc2Vuc29yIGZyYW1lIHJhdGUgaWYgbmVlZGVkICovCi1zdGF0aWMgdm9pZCBtb25pdG9yX2V4cG9zdXJlKHN0cnVjdCBjYW1fZGF0YSAqY2FtKQotewotCXU4IGV4cF9hY2MsIGJjb21wLCBnYWluLCBjb2Fyc2VMLCBjbWRbOF0sIGRhdGFbOF07Ci0JaW50IHJldHZhbCwgbGlnaHRfZXhwLCBkYXJrX2V4cCwgdmVyeV9kYXJrX2V4cDsKLQlpbnQgb2xkX2V4cG9zdXJlLCBuZXdfZXhwb3N1cmUsIGZyYW1lcmF0ZTsKLQotCS8qIGdldCBuZWNlc3Nhcnkgc3RhdHMgYW5kIHJlZ2lzdGVyIHNldHRpbmdzIGZyb20gY2FtZXJhICovCi0JLyogZG9fY29tbWFuZCBjYW4ndCBoYW5kbGUgdGhpcywgc28gZG8gaXQgb3Vyc2VsdmVzICovCi0JY21kWzBdID0gQ1BJQV9DT01NQU5EX1JlYWRWUFJlZ3M+Pjg7Ci0JY21kWzFdID0gQ1BJQV9DT01NQU5EX1JlYWRWUFJlZ3MmMHhmZjsKLQljbWRbMl0gPSAzMDsKLQljbWRbM10gPSA0OwotCWNtZFs0XSA9IDk7Ci0JY21kWzVdID0gODsKLQljbWRbNl0gPSA4OwotCWNtZFs3XSA9IDA7Ci0JcmV0dmFsID0gY2FtLT5vcHMtPnRyYW5zZmVyQ21kKGNhbS0+bG93bGV2ZWxfZGF0YSwgY21kLCBkYXRhKTsKLQlpZiAocmV0dmFsKSB7Ci0JCUxPRygiUmVhZFZQUmVncygzMCw0LDksOCkgLSBmYWlsZWQsIHJldHZhbD0lZFxuIiwKLQkJICAgIHJldHZhbCk7Ci0JCXJldHVybjsKLQl9Ci0JZXhwX2FjYyA9IGRhdGFbMF07Ci0JYmNvbXAgPSBkYXRhWzFdOwotCWdhaW4gPSBkYXRhWzJdOwotCWNvYXJzZUwgPSBkYXRhWzNdOwotCi0JbXV0ZXhfbG9jaygmY2FtLT5wYXJhbV9sb2NrKTsKLQlsaWdodF9leHAgPSBjYW0tPnBhcmFtcy5jb2xvdXJQYXJhbXMuYnJpZ2h0bmVzcyArCi0JCSAgICBUQyAtIDUwICsgRVhQX0FDQ19MSUdIVDsKLQlpZihsaWdodF9leHAgPiAyNTUpCi0JCWxpZ2h0X2V4cCA9IDI1NTsKLQlkYXJrX2V4cCA9IGNhbS0+cGFyYW1zLmNvbG91clBhcmFtcy5icmlnaHRuZXNzICsKLQkJICAgVEMgLSA1MCAtIEVYUF9BQ0NfREFSSzsKLQlpZihkYXJrX2V4cCA8IDApCi0JCWRhcmtfZXhwID0gMDsKLQl2ZXJ5X2RhcmtfZXhwID0gZGFya19leHAvMjsKLQotCW9sZF9leHBvc3VyZSA9IGNhbS0+cGFyYW1zLmV4cG9zdXJlLmNvYXJzZUV4cEhpICogMjU2ICsKLQkJICAgICAgIGNhbS0+cGFyYW1zLmV4cG9zdXJlLmNvYXJzZUV4cExvOwotCi0JaWYoIWNhbS0+cGFyYW1zLmZsaWNrZXJDb250cm9sLmRpc2FibGVkKSB7Ci0JCS8qIEZsaWNrZXIgY29udHJvbCBvbiAqLwotCQlpbnQgbWF4X2NvbXAgPSBGSVJNV0FSRV9WRVJTSU9OKDEsMikgPyBNQVhfQ09NUCA6IEhJR0hfQ09NUF8xMDI7Ci0JCWJjb21wICs9IDEyODsJLyogZGVjb2RlICovCi0JCWlmKGJjb21wID49IG1heF9jb21wICYmIGV4cF9hY2MgPCBkYXJrX2V4cCkgewotCQkJLyogZGFyayAqLwotCQkJaWYoZXhwX2FjYyA8IHZlcnlfZGFya19leHApIHsKLQkJCQkvKiB2ZXJ5IGRhcmsgKi8KLQkJCQlpZihjYW0tPmV4cG9zdXJlX3N0YXR1cyA9PSBFWFBPU1VSRV9WRVJZX0RBUkspCi0JCQkJCSsrY2FtLT5leHBvc3VyZV9jb3VudDsKLQkJCQllbHNlIHsKLQkJCQkJY2FtLT5leHBvc3VyZV9zdGF0dXMgPSBFWFBPU1VSRV9WRVJZX0RBUks7Ci0JCQkJCWNhbS0+ZXhwb3N1cmVfY291bnQgPSAxOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJLyoganVzdCBkYXJrICovCi0JCQkJaWYoY2FtLT5leHBvc3VyZV9zdGF0dXMgPT0gRVhQT1NVUkVfREFSSykKLQkJCQkJKytjYW0tPmV4cG9zdXJlX2NvdW50OwotCQkJCWVsc2UgewotCQkJCQljYW0tPmV4cG9zdXJlX3N0YXR1cyA9IEVYUE9TVVJFX0RBUks7Ci0JCQkJCWNhbS0+ZXhwb3N1cmVfY291bnQgPSAxOwotCQkJCX0KLQkJCX0KLQkJfSBlbHNlIGlmKG9sZF9leHBvc3VyZSA8PSBMT1dfRVhQIHx8IGV4cF9hY2MgPiBsaWdodF9leHApIHsKLQkJCS8qIGxpZ2h0ICovCi0JCQlpZihvbGRfZXhwb3N1cmUgPD0gVkVSWV9MT1dfRVhQKSB7Ci0JCQkJLyogdmVyeSBsaWdodCAqLwotCQkJCWlmKGNhbS0+ZXhwb3N1cmVfc3RhdHVzID09IEVYUE9TVVJFX1ZFUllfTElHSFQpCi0JCQkJCSsrY2FtLT5leHBvc3VyZV9jb3VudDsKLQkJCQllbHNlIHsKLQkJCQkJY2FtLT5leHBvc3VyZV9zdGF0dXMgPSBFWFBPU1VSRV9WRVJZX0xJR0hUOwotCQkJCQljYW0tPmV4cG9zdXJlX2NvdW50ID0gMTsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCS8qIGp1c3QgbGlnaHQgKi8KLQkJCQlpZihjYW0tPmV4cG9zdXJlX3N0YXR1cyA9PSBFWFBPU1VSRV9MSUdIVCkKLQkJCQkJKytjYW0tPmV4cG9zdXJlX2NvdW50OwotCQkJCWVsc2UgewotCQkJCQljYW0tPmV4cG9zdXJlX3N0YXR1cyA9IEVYUE9TVVJFX0xJR0hUOwotCQkJCQljYW0tPmV4cG9zdXJlX2NvdW50ID0gMTsKLQkJCQl9Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQkvKiBub3QgZGFyayBvciBsaWdodCAqLwotCQkJY2FtLT5leHBvc3VyZV9zdGF0dXMgPSBFWFBPU1VSRV9OT1JNQUw7Ci0JCX0KLQl9IGVsc2UgewotCQkvKiBGbGlja2VyIGNvbnRyb2wgb2ZmICovCi0JCWlmKG9sZF9leHBvc3VyZSA+PSBNQVhfRVhQICYmIGV4cF9hY2MgPCBkYXJrX2V4cCkgewotCQkJLyogZGFyayAqLwotCQkJaWYoZXhwX2FjYyA8IHZlcnlfZGFya19leHApIHsKLQkJCQkvKiB2ZXJ5IGRhcmsgKi8KLQkJCQlpZihjYW0tPmV4cG9zdXJlX3N0YXR1cyA9PSBFWFBPU1VSRV9WRVJZX0RBUkspCi0JCQkJCSsrY2FtLT5leHBvc3VyZV9jb3VudDsKLQkJCQllbHNlIHsKLQkJCQkJY2FtLT5leHBvc3VyZV9zdGF0dXMgPSBFWFBPU1VSRV9WRVJZX0RBUks7Ci0JCQkJCWNhbS0+ZXhwb3N1cmVfY291bnQgPSAxOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJLyoganVzdCBkYXJrICovCi0JCQkJaWYoY2FtLT5leHBvc3VyZV9zdGF0dXMgPT0gRVhQT1NVUkVfREFSSykKLQkJCQkJKytjYW0tPmV4cG9zdXJlX2NvdW50OwotCQkJCWVsc2UgewotCQkJCQljYW0tPmV4cG9zdXJlX3N0YXR1cyA9IEVYUE9TVVJFX0RBUks7Ci0JCQkJCWNhbS0+ZXhwb3N1cmVfY291bnQgPSAxOwotCQkJCX0KLQkJCX0KLQkJfSBlbHNlIGlmKG9sZF9leHBvc3VyZSA8PSBMT1dfRVhQIHx8IGV4cF9hY2MgPiBsaWdodF9leHApIHsKLQkJCS8qIGxpZ2h0ICovCi0JCQlpZihvbGRfZXhwb3N1cmUgPD0gVkVSWV9MT1dfRVhQKSB7Ci0JCQkJLyogdmVyeSBsaWdodCAqLwotCQkJCWlmKGNhbS0+ZXhwb3N1cmVfc3RhdHVzID09IEVYUE9TVVJFX1ZFUllfTElHSFQpCi0JCQkJCSsrY2FtLT5leHBvc3VyZV9jb3VudDsKLQkJCQllbHNlIHsKLQkJCQkJY2FtLT5leHBvc3VyZV9zdGF0dXMgPSBFWFBPU1VSRV9WRVJZX0xJR0hUOwotCQkJCQljYW0tPmV4cG9zdXJlX2NvdW50ID0gMTsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCS8qIGp1c3QgbGlnaHQgKi8KLQkJCQlpZihjYW0tPmV4cG9zdXJlX3N0YXR1cyA9PSBFWFBPU1VSRV9MSUdIVCkKLQkJCQkJKytjYW0tPmV4cG9zdXJlX2NvdW50OwotCQkJCWVsc2UgewotCQkJCQljYW0tPmV4cG9zdXJlX3N0YXR1cyA9IEVYUE9TVVJFX0xJR0hUOwotCQkJCQljYW0tPmV4cG9zdXJlX2NvdW50ID0gMTsKLQkJCQl9Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQkvKiBub3QgZGFyayBvciBsaWdodCAqLwotCQkJY2FtLT5leHBvc3VyZV9zdGF0dXMgPSBFWFBPU1VSRV9OT1JNQUw7Ci0JCX0KLQl9Ci0KLQlmcmFtZXJhdGUgPSBjYW0tPmZwczsKLQlpZihmcmFtZXJhdGUgPiAzMCB8fCBmcmFtZXJhdGUgPCAxKQotCQlmcmFtZXJhdGUgPSAxOwotCi0JaWYoIWNhbS0+cGFyYW1zLmZsaWNrZXJDb250cm9sLmRpc2FibGVkKSB7Ci0JCS8qIEZsaWNrZXIgY29udHJvbCBvbiAqLwotCQlpZigoY2FtLT5leHBvc3VyZV9zdGF0dXMgPT0gRVhQT1NVUkVfVkVSWV9EQVJLIHx8Ci0JCSAgICBjYW0tPmV4cG9zdXJlX3N0YXR1cyA9PSBFWFBPU1VSRV9EQVJLKSAmJgotCQkgICBjYW0tPmV4cG9zdXJlX2NvdW50ID49IERBUktfVElNRSpmcmFtZXJhdGUgJiYKLQkJICAgY2FtLT5wYXJhbXMuc2Vuc29yRnBzLmRpdmlzb3IgPCAzKSB7Ci0KLQkJCS8qIGRhcmsgZm9yIHRvbyBsb25nICovCi0JCQkrK2NhbS0+cGFyYW1zLnNlbnNvckZwcy5kaXZpc29yOwotCQkJY2FtLT5jbWRfcXVldWUgfD0gQ09NTUFORF9TRVRTRU5TT1JGUFM7Ci0KLQkJCWNhbS0+cGFyYW1zLmZsaWNrZXJDb250cm9sLmNvYXJzZUp1bXAgPQotCQkJCWZsaWNrZXJfanVtcHNbY2FtLT5tYWluc0ZyZXFdCi0JCQkJCSAgICAgW2NhbS0+cGFyYW1zLnNlbnNvckZwcy5iYXNlcmF0ZV0KLQkJCQkJICAgICBbY2FtLT5wYXJhbXMuc2Vuc29yRnBzLmRpdmlzb3JdOwotCQkJY2FtLT5jbWRfcXVldWUgfD0gQ09NTUFORF9TRVRGTElDS0VSQ1RSTDsKLQotCQkJbmV3X2V4cG9zdXJlID0gY2FtLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuY29hcnNlSnVtcC0xOwotCQkJd2hpbGUobmV3X2V4cG9zdXJlIDwgb2xkX2V4cG9zdXJlLzIpCi0JCQkJbmV3X2V4cG9zdXJlICs9IGNhbS0+cGFyYW1zLmZsaWNrZXJDb250cm9sLmNvYXJzZUp1bXA7Ci0JCQljYW0tPnBhcmFtcy5leHBvc3VyZS5jb2Fyc2VFeHBMbyA9IG5ld19leHBvc3VyZSAmIDB4ZmY7Ci0JCQljYW0tPnBhcmFtcy5leHBvc3VyZS5jb2Fyc2VFeHBIaSA9IG5ld19leHBvc3VyZSA+PiA4OwotCQkJY2FtLT5jbWRfcXVldWUgfD0gQ09NTUFORF9TRVRFWFBPU1VSRTsKLQkJCWNhbS0+ZXhwb3N1cmVfc3RhdHVzID0gRVhQT1NVUkVfTk9STUFMOwotCQkJTE9HKCJBdXRvbWF0aWNhbGx5IGRlY3JlYXNpbmcgc2Vuc29yX2Zwc1xuIik7Ci0KLQkJfSBlbHNlIGlmKChjYW0tPmV4cG9zdXJlX3N0YXR1cyA9PSBFWFBPU1VSRV9WRVJZX0xJR0hUIHx8Ci0JCSAgICBjYW0tPmV4cG9zdXJlX3N0YXR1cyA9PSBFWFBPU1VSRV9MSUdIVCkgJiYKLQkJICAgY2FtLT5leHBvc3VyZV9jb3VudCA+PSBMSUdIVF9USU1FKmZyYW1lcmF0ZSAmJgotCQkgICBjYW0tPnBhcmFtcy5zZW5zb3JGcHMuZGl2aXNvciA+IDApIHsKLQotCQkJLyogbGlnaHQgZm9yIHRvbyBsb25nICovCi0JCQlpbnQgbWF4X2V4cCA9IEZJUk1XQVJFX1ZFUlNJT04oMSwyKSA/IE1BWF9FWFBfMTAyIDogTUFYX0VYUCA7Ci0KLQkJCS0tY2FtLT5wYXJhbXMuc2Vuc29yRnBzLmRpdmlzb3I7Ci0JCQljYW0tPmNtZF9xdWV1ZSB8PSBDT01NQU5EX1NFVFNFTlNPUkZQUzsKLQotCQkJY2FtLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuY29hcnNlSnVtcCA9Ci0JCQkJZmxpY2tlcl9qdW1wc1tjYW0tPm1haW5zRnJlcV0KLQkJCQkJICAgICBbY2FtLT5wYXJhbXMuc2Vuc29yRnBzLmJhc2VyYXRlXQotCQkJCQkgICAgIFtjYW0tPnBhcmFtcy5zZW5zb3JGcHMuZGl2aXNvcl07Ci0JCQljYW0tPmNtZF9xdWV1ZSB8PSBDT01NQU5EX1NFVEZMSUNLRVJDVFJMOwotCi0JCQluZXdfZXhwb3N1cmUgPSBjYW0tPnBhcmFtcy5mbGlja2VyQ29udHJvbC5jb2Fyc2VKdW1wLTE7Ci0JCQl3aGlsZShuZXdfZXhwb3N1cmUgPCAyKm9sZF9leHBvc3VyZSAmJgotCQkJICAgICAgbmV3X2V4cG9zdXJlKwotCQkJICAgICAgY2FtLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuY29hcnNlSnVtcCA8IG1heF9leHApCi0JCQkJbmV3X2V4cG9zdXJlICs9IGNhbS0+cGFyYW1zLmZsaWNrZXJDb250cm9sLmNvYXJzZUp1bXA7Ci0JCQljYW0tPnBhcmFtcy5leHBvc3VyZS5jb2Fyc2VFeHBMbyA9IG5ld19leHBvc3VyZSAmIDB4ZmY7Ci0JCQljYW0tPnBhcmFtcy5leHBvc3VyZS5jb2Fyc2VFeHBIaSA9IG5ld19leHBvc3VyZSA+PiA4OwotCQkJY2FtLT5jbWRfcXVldWUgfD0gQ09NTUFORF9TRVRFWFBPU1VSRTsKLQkJCWNhbS0+ZXhwb3N1cmVfc3RhdHVzID0gRVhQT1NVUkVfTk9STUFMOwotCQkJTE9HKCJBdXRvbWF0aWNhbGx5IGluY3JlYXNpbmcgc2Vuc29yX2Zwc1xuIik7Ci0JCX0KLQl9IGVsc2UgewotCQkvKiBGbGlja2VyIGNvbnRyb2wgb2ZmICovCi0JCWlmKChjYW0tPmV4cG9zdXJlX3N0YXR1cyA9PSBFWFBPU1VSRV9WRVJZX0RBUksgfHwKLQkJICAgIGNhbS0+ZXhwb3N1cmVfc3RhdHVzID09IEVYUE9TVVJFX0RBUkspICYmCi0JCSAgIGNhbS0+ZXhwb3N1cmVfY291bnQgPj0gREFSS19USU1FKmZyYW1lcmF0ZSAmJgotCQkgICBjYW0tPnBhcmFtcy5zZW5zb3JGcHMuZGl2aXNvciA8IDMpIHsKLQotCQkJLyogZGFyayBmb3IgdG9vIGxvbmcgKi8KLQkJCSsrY2FtLT5wYXJhbXMuc2Vuc29yRnBzLmRpdmlzb3I7Ci0JCQljYW0tPmNtZF9xdWV1ZSB8PSBDT01NQU5EX1NFVFNFTlNPUkZQUzsKLQotCQkJaWYoY2FtLT5wYXJhbXMuZXhwb3N1cmUuZ2FpbiA+IDApIHsKLQkJCQktLWNhbS0+cGFyYW1zLmV4cG9zdXJlLmdhaW47Ci0JCQkJY2FtLT5jbWRfcXVldWUgfD0gQ09NTUFORF9TRVRFWFBPU1VSRTsKLQkJCX0KLQkJCWNhbS0+ZXhwb3N1cmVfc3RhdHVzID0gRVhQT1NVUkVfTk9STUFMOwotCQkJTE9HKCJBdXRvbWF0aWNhbGx5IGRlY3JlYXNpbmcgc2Vuc29yX2Zwc1xuIik7Ci0KLQkJfSBlbHNlIGlmKChjYW0tPmV4cG9zdXJlX3N0YXR1cyA9PSBFWFBPU1VSRV9WRVJZX0xJR0hUIHx8Ci0JCSAgICBjYW0tPmV4cG9zdXJlX3N0YXR1cyA9PSBFWFBPU1VSRV9MSUdIVCkgJiYKLQkJICAgY2FtLT5leHBvc3VyZV9jb3VudCA+PSBMSUdIVF9USU1FKmZyYW1lcmF0ZSAmJgotCQkgICBjYW0tPnBhcmFtcy5zZW5zb3JGcHMuZGl2aXNvciA+IDApIHsKLQotCQkJLyogbGlnaHQgZm9yIHRvbyBsb25nICovCi0JCQktLWNhbS0+cGFyYW1zLnNlbnNvckZwcy5kaXZpc29yOwotCQkJY2FtLT5jbWRfcXVldWUgfD0gQ09NTUFORF9TRVRTRU5TT1JGUFM7Ci0KLQkJCWlmKGNhbS0+cGFyYW1zLmV4cG9zdXJlLmdhaW4gPAotCQkJICAgY2FtLT5wYXJhbXMuZXhwb3N1cmUuZ2Fpbk1vZGUtMSkgewotCQkJCSsrY2FtLT5wYXJhbXMuZXhwb3N1cmUuZ2FpbjsKLQkJCQljYW0tPmNtZF9xdWV1ZSB8PSBDT01NQU5EX1NFVEVYUE9TVVJFOwotCQkJfQotCQkJY2FtLT5leHBvc3VyZV9zdGF0dXMgPSBFWFBPU1VSRV9OT1JNQUw7Ci0JCQlMT0coIkF1dG9tYXRpY2FsbHkgaW5jcmVhc2luZyBzZW5zb3JfZnBzXG4iKTsKLQkJfQotCX0KLQltdXRleF91bmxvY2soJmNhbS0+cGFyYW1fbG9jayk7Ci19Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogaWYgZmxpY2tlciBpcyBzd2l0Y2hlZCBvZmYsIHRoaXMgZnVuY3Rpb24gc3dpdGNoZXMgaXQgYmFjayBvbi5JdCBjaGVja3MsCi0gICBob3dldmVyLCB0aGF0IGNvbmRpdGlvbnMgYXJlIHN1aXRhYmxlIGJlZm9yZSByZXN0YXJ0aW5nIGl0LgotICAgVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgZm9yIGZpcm13YXJlIHZlcnNpb24gMS4yLgotCi0gICBJdCBhbHNvIGFkanVzdCB0aGUgY29sb3VyIGJhbGFuY2Ugd2hlbiBhbiBleHBvc3VyZSBzdGVwIGlzIGRldGVjdGVkIC0gYXMKLSAgIGxvbmcgYXMgZmxpY2tlciBpcyBydW5uaW5nCi0qLwotc3RhdGljIHZvaWQgcmVzdGFydF9mbGlja2VyKHN0cnVjdCBjYW1fZGF0YSAqY2FtKQotewotCWludCBjYW1fZXhwb3N1cmUsIG9sZF9leHA7Ci0JaWYoIUZJUk1XQVJFX1ZFUlNJT04oMSwyKSkKLQkJcmV0dXJuOwotCW11dGV4X2xvY2soJmNhbS0+cGFyYW1fbG9jayk7Ci0JaWYoY2FtLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuZmxpY2tlck1vZGUgPT0gMCB8fAotCSAgIGNhbS0+cmF3X2ltYWdlWzM5XSA9PSAwKSB7Ci0JCW11dGV4X3VubG9jaygmY2FtLT5wYXJhbV9sb2NrKTsKLQkJcmV0dXJuOwotCX0KLQljYW1fZXhwb3N1cmUgPSBjYW0tPnJhd19pbWFnZVszOV0qMjsKLQlvbGRfZXhwID0gY2FtLT5wYXJhbXMuZXhwb3N1cmUuY29hcnNlRXhwTG8gKwotCQkgIGNhbS0+cGFyYW1zLmV4cG9zdXJlLmNvYXJzZUV4cEhpKjI1NjsKLQkvKgotCSAgc2VlIGhvdyBmYXIgYXdheSBjYW1lcmEgZXhwb3N1cmUgaXMgZnJvbSBhIHZhbGlkCi0JICBmbGlja2VyIGV4cG9zdXJlIHZhbHVlCi0JKi8KLQljYW1fZXhwb3N1cmUgJT0gY2FtLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuY29hcnNlSnVtcDsKLQlpZighY2FtLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuZGlzYWJsZWQgJiYKLQkgICBjYW1fZXhwb3N1cmUgPD0gY2FtLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuY29hcnNlSnVtcCAtIDMpIHsKLQkJLyogRmxpY2tlciBjb250cm9sIGF1dG8tZGlzYWJsZWQgKi8KLQkJY2FtLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuZGlzYWJsZWQgPSAxOwotCX0KLQotCWlmKGNhbS0+cGFyYW1zLmZsaWNrZXJDb250cm9sLmRpc2FibGVkICYmCi0JICAgY2FtLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuZmxpY2tlck1vZGUgJiYKLQkgICBvbGRfZXhwID4gY2FtLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuY29hcnNlSnVtcCArCi0JCSAgICAgUk9VTkRfVVBfRVhQX0ZPUl9GTElDS0VSKSB7Ci0JCS8qIGV4cG9zdXJlIGlzIG5vdyBoaWdoIGVub3VnaCB0byBzd2l0Y2gKLQkJICAgZmxpY2tlciBjb250cm9sIGJhY2sgb24gKi8KLQkJc2V0X2ZsaWNrZXIoJmNhbS0+cGFyYW1zLCAmY2FtLT5jbWRfcXVldWUsIDEpOwotCQlpZigoY2FtLT5jbWRfcXVldWUgJiBDT01NQU5EX1NFVEVYUE9TVVJFKSAmJgotCQkgICBjYW0tPnBhcmFtcy5leHBvc3VyZS5leHBNb2RlID09IDIpCi0JCQljYW0tPmV4cG9zdXJlX3N0YXR1cyA9IEVYUE9TVVJFX05PUk1BTDsKLQotCX0KLQltdXRleF91bmxvY2soJmNhbS0+cGFyYW1fbG9jayk7Ci19Ci0jdW5kZWYgRklSTVdBUkVfVkVSU0lPTgotCi1zdGF0aWMgaW50IGNsZWFyX3N0YWxsKHN0cnVjdCBjYW1fZGF0YSAqY2FtKQotewotCS8qIEZJWE1FOiBEb2VzIHRoaXMgYWN0dWFsbHkgd29yaz8gKi8KLQlMT0coIkNsZWFyaW5nIHN0YWxsXG4iKTsKLQotCWNhbS0+b3BzLT5zdHJlYW1SZWFkKGNhbS0+bG93bGV2ZWxfZGF0YSwgY2FtLT5yYXdfaW1hZ2UsIDApOwotCWRvX2NvbW1hbmQoY2FtLCBDUElBX0NPTU1BTkRfR2V0Q2FtZXJhU3RhdHVzLDAsMCwwLDApOwotCXJldHVybiBjYW0tPnBhcmFtcy5zdGF0dXMuc3RyZWFtU3RhdGUgIT0gU1RSRUFNX1BBVVNFRDsKLX0KLQotLyoga2VybmVsIHRocmVhZCBmdW5jdGlvbiB0byByZWFkIGltYWdlIGZyb20gY2FtZXJhICovCi1zdGF0aWMgaW50IGZldGNoX2ZyYW1lKHZvaWQgKmRhdGEpCi17Ci0JaW50IGltYWdlX3NpemUsIHJldHJ5OwotCXN0cnVjdCBjYW1fZGF0YSAqY2FtID0gKHN0cnVjdCBjYW1fZGF0YSAqKWRhdGE7Ci0JdW5zaWduZWQgbG9uZyBvbGRqaWYsIHJhdGUsIGRpZmY7Ci0KLQkvKiBBbGxvdyB1cCB0byB0d28gYmFkIGltYWdlcyBpbiBhIHJvdyB0byBiZSByZWFkIGFuZAotCSAqIGlnbm9yZWQgYmVmb3JlIGFuIGVycm9yIGlzIHJlcG9ydGVkICovCi0JZm9yIChyZXRyeSA9IDA7IHJldHJ5IDwgMzsgKytyZXRyeSkgewotCQlpZiAocmV0cnkpCi0JCQlEQkcoInJldHJ5PSVkXG4iLCByZXRyeSk7Ci0KLQkJaWYgKCFjYW0tPm9wcykKLQkJCWNvbnRpbnVlOwotCi0JCS8qIGxvYWQgZmlyc3QgZnJhbWUgYWx3YXlzIHVuY29tcHJlc3NlZCAqLwotCQlpZiAoY2FtLT5maXJzdF9mcmFtZSAmJgotCQkgICAgY2FtLT5wYXJhbXMuY29tcHJlc3Npb24ubW9kZSAhPSBDUElBX0NPTVBSRVNTSU9OX05PTkUpIHsKLQkJCWRvX2NvbW1hbmQoY2FtLCBDUElBX0NPTU1BTkRfU2V0Q29tcHJlc3Npb24sCi0JCQkJICAgQ1BJQV9DT01QUkVTU0lPTl9OT05FLAotCQkJCSAgIE5PX0RFQ0lNQVRJT04sIDAsIDApOwotCQkJLyogVHJpYWwgJiBlcnJvciAtIERpc2NhcmRpbmcgYSBmcmFtZSBwcmV2ZW50cyB0aGUKLQkJCSAgIGZpcnN0IGZyYW1lIGZyb20gaGF2aW5nIGFuIGVycm9yIGluIHRoZSBkYXRhLiAqLwotCQkJZG9fY29tbWFuZChjYW0sIENQSUFfQ09NTUFORF9EaXNjYXJkRnJhbWUsIDAsIDAsIDAsIDApOwotCQl9Ci0KLQkJLyogaW5pdCBjYW1lcmEgdXBsb2FkICovCi0JCWlmIChkb19jb21tYW5kKGNhbSwgQ1BJQV9DT01NQU5EX0dyYWJGcmFtZSwgMCwKLQkJCSAgICAgICBjYW0tPnBhcmFtcy5zdHJlYW1TdGFydExpbmUsIDAsIDApKQotCQkJY29udGludWU7Ci0KLQkJaWYgKGNhbS0+b3BzLT53YWl0X2Zvcl9zdHJlYW1fcmVhZHkpIHsKLQkJCS8qIGxvb3AgdW50aWwgaW1hZ2UgcmVhZHkgKi8KLQkJCWludCBjb3VudCA9IDA7Ci0JCQlkb19jb21tYW5kKGNhbSwgQ1BJQV9DT01NQU5EX0dldENhbWVyYVN0YXR1cywwLDAsMCwwKTsKLQkJCXdoaWxlIChjYW0tPnBhcmFtcy5zdGF0dXMuc3RyZWFtU3RhdGUgIT0gU1RSRUFNX1JFQURZKSB7Ci0JCQkJaWYoKytjb3VudCA+IFJFQURZX1RJTUVPVVQpCi0JCQkJCWJyZWFrOwotCQkJCWlmKGNhbS0+cGFyYW1zLnN0YXR1cy5zdHJlYW1TdGF0ZSA9PQotCQkJCSAgIFNUUkVBTV9QQVVTRUQpIHsKLQkJCQkJLyogQmFkIG5ld3MgKi8KLQkJCQkJaWYoIWNsZWFyX3N0YWxsKGNhbSkpCi0JCQkJCQlyZXR1cm4gLUVJTzsKLQkJCQl9Ci0KLQkJCQljb25kX3Jlc2NoZWQoKTsKLQotCQkJCS8qIHNsZWVwIGZvciAxMCBtcywgaG9wZWZ1bGx5IDspICovCi0JCQkJbXNsZWVwX2ludGVycnVwdGlibGUoMTApOwotCQkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKLQkJCQkJcmV0dXJuIC1FSU5UUjsKLQotCQkJCWRvX2NvbW1hbmQoY2FtLCBDUElBX0NPTU1BTkRfR2V0Q2FtZXJhU3RhdHVzLAotCQkJCQkgICAwLCAwLCAwLCAwKTsKLQkJCX0KLQkJCWlmKGNhbS0+cGFyYW1zLnN0YXR1cy5zdHJlYW1TdGF0ZSAhPSBTVFJFQU1fUkVBRFkpIHsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJfQotCi0JCWNvbmRfcmVzY2hlZCgpOwotCi0JCS8qIGdyYWIgaW1hZ2UgZnJvbSBjYW1lcmEgKi8KLQkJb2xkamlmID0gamlmZmllczsKLQkJaW1hZ2Vfc2l6ZSA9IGNhbS0+b3BzLT5zdHJlYW1SZWFkKGNhbS0+bG93bGV2ZWxfZGF0YSwKLQkJCQkJCSAgY2FtLT5yYXdfaW1hZ2UsIDApOwotCQlpZiAoaW1hZ2Vfc2l6ZSA8PSAwKSB7Ci0JCQlEQkcoInN0cmVhbVJlYWQgZmFpbGVkOiAlZFxuIiwgaW1hZ2Vfc2l6ZSk7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCXJhdGUgPSBpbWFnZV9zaXplICogSFogLyAxMDI0OwotCQlkaWZmID0gamlmZmllcy1vbGRqaWY7Ci0JCWNhbS0+dHJhbnNmZXJfcmF0ZSA9IGRpZmY9PTAgPyByYXRlIDogcmF0ZS9kaWZmOwotCQkJLyogZGlmZj09MCA/IHVubGlrZWx5IGJ1dCBwb3NzaWJsZSAqLwotCi0JCS8qIFN3aXRjaCBmbGlja2VyIGNvbnRyb2wgYmFjayBvbiBpZiBpdCBnb3QgdHVybmVkIG9mZiAqLwotCQlyZXN0YXJ0X2ZsaWNrZXIoY2FtKTsKLQotCQkvKiBJZiBBRUMgaXMgZW5hYmxlZCwgbW9uaXRvciB0aGUgZXhwb3N1cmUgYW5kCi0JCSAgIGFkanVzdCB0aGUgc2Vuc29yIGZyYW1lIHJhdGUgaWYgbmVlZGVkICovCi0JCWlmKGNhbS0+cGFyYW1zLmV4cG9zdXJlLmV4cE1vZGUgPT0gMikKLQkJCW1vbml0b3JfZXhwb3N1cmUoY2FtKTsKLQotCQkvKiBjYW1lcmEgaWRsZSBub3cgc28gZGlzcGF0Y2ggcXVldWVkIGNvbW1hbmRzICovCi0JCWRpc3BhdGNoX2NvbW1hbmRzKGNhbSk7Ci0KLQkJLyogVXBkYXRlIG91ciBrbm93bGVkZ2Ugb2YgdGhlIGNhbWVyYSBzdGF0ZSAqLwotCQlkb19jb21tYW5kKGNhbSwgQ1BJQV9DT01NQU5EX0dldENvbG91ckJhbGFuY2UsIDAsIDAsIDAsIDApOwotCQlkb19jb21tYW5kKGNhbSwgQ1BJQV9DT01NQU5EX0dldEV4cG9zdXJlLCAwLCAwLCAwLCAwKTsKLQkJZG9fY29tbWFuZChjYW0sIENQSUFfQ09NTUFORF9SZWFkTUNQb3J0cywgMCwgMCwgMCwgMCk7Ci0KLQkJLyogZGVjb21wcmVzcyBhbmQgY29udmVydCBpbWFnZSB0byBieSBjb3B5aW5nIGl0IGZyb20KLQkJICogcmF3X2ltYWdlIHRvIGRlY29tcHJlc3NlZF9mcmFtZQotCQkgKi8KLQotCQljb25kX3Jlc2NoZWQoKTsKLQotCQljYW0tPmltYWdlX3NpemUgPSBwYXJzZV9waWN0dXJlKGNhbSwgaW1hZ2Vfc2l6ZSk7Ci0JCWlmIChjYW0tPmltYWdlX3NpemUgPD0gMCkgewotCQkJREJHKCJwYXJzZV9waWN0dXJlIGZhaWxlZCAlZFxuIiwgY2FtLT5pbWFnZV9zaXplKTsKLQkJCWlmKGNhbS0+cGFyYW1zLmNvbXByZXNzaW9uLm1vZGUgIT0KLQkJCSAgIENQSUFfQ09NUFJFU1NJT05fTk9ORSkgewotCQkJCS8qIENvbXByZXNzaW9uIG1heSBub3Qgd29yayByaWdodCBpZiB3ZQotCQkJCSAgIGhhZCBhIGJhZCBmcmFtZSwgZ2V0IHRoZSBuZXh0IG9uZQotCQkJCSAgIHVuY29tcHJlc3NlZC4gKi8KLQkJCQljYW0tPmZpcnN0X2ZyYW1lID0gMTsKLQkJCQlkb19jb21tYW5kKGNhbSwgQ1BJQV9DT01NQU5EX1NldEdyYWJNb2RlLAotCQkJCQkgICBDUElBX0dSQUJfU0lOR0xFLCAwLCAwLCAwKTsKLQkJCQkvKiBGSVhNRTogVHJpYWwgJiBlcnJvciAtIG5lZWQgdXAgdG8gNzBtcyBmb3IKLQkJCQkgICB0aGUgZ3JhYiBtb2RlIGNoYW5nZSB0byBjb21wbGV0ZSA/ICovCi0JCQkJbXNsZWVwX2ludGVycnVwdGlibGUoNzApOwotCQkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKLQkJCQkJcmV0dXJuIC1FSU5UUjsKLQkJCX0KLQkJfSBlbHNlCi0JCQlicmVhazsKLQl9Ci0KLQlpZiAocmV0cnkgPCAzKSB7Ci0JCS8qIEZJWE1FOiB0aGlzIG9ubHkgd29ya3MgZm9yIGRvdWJsZSBidWZmZXJpbmcgKi8KLQkJaWYgKGNhbS0+ZnJhbWVbY2FtLT5jdXJmcmFtZV0uc3RhdGUgPT0gRlJBTUVfUkVBRFkpIHsKLQkJCW1lbWNweShjYW0tPmZyYW1lW2NhbS0+Y3VyZnJhbWVdLmRhdGEsCi0JCQkgICAgICAgY2FtLT5kZWNvbXByZXNzZWRfZnJhbWUuZGF0YSwKLQkJCSAgICAgICBjYW0tPmRlY29tcHJlc3NlZF9mcmFtZS5jb3VudCk7Ci0JCQljYW0tPmZyYW1lW2NhbS0+Y3VyZnJhbWVdLnN0YXRlID0gRlJBTUVfRE9ORTsKLQkJfSBlbHNlCi0JCQljYW0tPmRlY29tcHJlc3NlZF9mcmFtZS5zdGF0ZSA9IEZSQU1FX0RPTkU7Ci0KLQkJaWYgKGNhbS0+Zmlyc3RfZnJhbWUpIHsKLQkJCWNhbS0+Zmlyc3RfZnJhbWUgPSAwOwotCQkJZG9fY29tbWFuZChjYW0sIENQSUFfQ09NTUFORF9TZXRDb21wcmVzc2lvbiwKLQkJCQkgICBjYW0tPnBhcmFtcy5jb21wcmVzc2lvbi5tb2RlLAotCQkJCSAgIGNhbS0+cGFyYW1zLmNvbXByZXNzaW9uLmRlY2ltYXRpb24sIDAsIDApOwotCi0JCQkvKiBTd2l0Y2ggZnJvbSBzaW5nbGUtZ3JhYiB0byBjb250aW51b3VzIGdyYWIgKi8KLQkJCWRvX2NvbW1hbmQoY2FtLCBDUElBX0NPTU1BTkRfU2V0R3JhYk1vZGUsCi0JCQkJICAgQ1BJQV9HUkFCX0NPTlRJTlVPVVMsIDAsIDAsIDApOwotCQl9Ci0JCXJldHVybiAwOwotCX0KLQlyZXR1cm4gLUVJTzsKLX0KLQotc3RhdGljIGludCBjYXB0dXJlX2ZyYW1lKHN0cnVjdCBjYW1fZGF0YSAqY2FtLCBzdHJ1Y3QgdmlkZW9fbW1hcCAqdm0pCi17Ci0JaWYgKCFjYW0tPmZyYW1lX2J1ZikgewotCQkvKiB3ZSBkbyBsYXp5IGFsbG9jYXRpb24gKi8KLQkJaW50IGVycjsKLQkJaWYgKChlcnIgPSBhbGxvY2F0ZV9mcmFtZV9idWYoY2FtKSkpCi0JCQlyZXR1cm4gZXJyOwotCX0KLQotCWNhbS0+Y3VyZnJhbWUgPSB2bS0+ZnJhbWU7Ci0JY2FtLT5mcmFtZVtjYW0tPmN1cmZyYW1lXS5zdGF0ZSA9IEZSQU1FX1JFQURZOwotCXJldHVybiBmZXRjaF9mcmFtZShjYW0pOwotfQotCi1zdGF0aWMgaW50IGdvdG9faGlnaF9wb3dlcihzdHJ1Y3QgY2FtX2RhdGEgKmNhbSkKLXsKLQlpZiAoZG9fY29tbWFuZChjYW0sIENQSUFfQ09NTUFORF9Hb3RvSGlQb3dlciwgMCwgMCwgMCwgMCkpCi0JCXJldHVybiAtRUlPOwotCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDQwKTsJLyogd2luZG93cyBkcml2ZXIgZG9lcyBpdCB0b28gKi8KLQlpZihzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKLQkJcmV0dXJuIC1FSU5UUjsKLQlpZiAoZG9fY29tbWFuZChjYW0sIENQSUFfQ09NTUFORF9HZXRDYW1lcmFTdGF0dXMsIDAsIDAsIDAsIDApKQotCQlyZXR1cm4gLUVJTzsKLQlpZiAoY2FtLT5wYXJhbXMuc3RhdHVzLnN5c3RlbVN0YXRlID09IEhJX1BPV0VSX1NUQVRFKSB7Ci0JCURCRygiY2FtZXJhIG5vdyBpbiBISUdIIHBvd2VyIHN0YXRlXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCXByaW50c3RhdHVzKGNhbSk7Ci0JcmV0dXJuIC1FSU87Ci19Ci0KLXN0YXRpYyBpbnQgZ290b19sb3dfcG93ZXIoc3RydWN0IGNhbV9kYXRhICpjYW0pCi17Ci0JaWYgKGRvX2NvbW1hbmQoY2FtLCBDUElBX0NPTU1BTkRfR290b0xvUG93ZXIsIDAsIDAsIDAsIDApKQotCQlyZXR1cm4gLTE7Ci0JaWYgKGRvX2NvbW1hbmQoY2FtLCBDUElBX0NPTU1BTkRfR2V0Q2FtZXJhU3RhdHVzLCAwLCAwLCAwLCAwKSkKLQkJcmV0dXJuIC0xOwotCWlmIChjYW0tPnBhcmFtcy5zdGF0dXMuc3lzdGVtU3RhdGUgPT0gTE9fUE9XRVJfU1RBVEUpIHsKLQkJREJHKCJjYW1lcmEgbm93IGluIExPVyBwb3dlciBzdGF0ZVxuIik7Ci0JCXJldHVybiAwOwotCX0KLQlwcmludHN0YXR1cyhjYW0pOwotCXJldHVybiAtMTsKLX0KLQotc3RhdGljIHZvaWQgc2F2ZV9jYW1lcmFfc3RhdGUoc3RydWN0IGNhbV9kYXRhICpjYW0pCi17Ci0JaWYoIShjYW0tPmNtZF9xdWV1ZSAmIENPTU1BTkRfU0VUQ09MT1VSQkFMQU5DRSkpCi0JCWRvX2NvbW1hbmQoY2FtLCBDUElBX0NPTU1BTkRfR2V0Q29sb3VyQmFsYW5jZSwgMCwgMCwgMCwgMCk7Ci0JaWYoIShjYW0tPmNtZF9xdWV1ZSAmIENPTU1BTkRfU0VURVhQT1NVUkUpKQotCQlkb19jb21tYW5kKGNhbSwgQ1BJQV9DT01NQU5EX0dldEV4cG9zdXJlLCAwLCAwLCAwLCAwKTsKLQotCURCRygiJWQvJWQvJWQvJWQvJWQvJWQvJWQvJWRcbiIsCi0JICAgICBjYW0tPnBhcmFtcy5leHBvc3VyZS5nYWluLAotCSAgICAgY2FtLT5wYXJhbXMuZXhwb3N1cmUuZmluZUV4cCwKLQkgICAgIGNhbS0+cGFyYW1zLmV4cG9zdXJlLmNvYXJzZUV4cExvLAotCSAgICAgY2FtLT5wYXJhbXMuZXhwb3N1cmUuY29hcnNlRXhwSGksCi0JICAgICBjYW0tPnBhcmFtcy5leHBvc3VyZS5yZWRDb21wLAotCSAgICAgY2FtLT5wYXJhbXMuZXhwb3N1cmUuZ3JlZW4xQ29tcCwKLQkgICAgIGNhbS0+cGFyYW1zLmV4cG9zdXJlLmdyZWVuMkNvbXAsCi0JICAgICBjYW0tPnBhcmFtcy5leHBvc3VyZS5ibHVlQ29tcCk7Ci0JREJHKCIlZC8lZC8lZFxuIiwKLQkgICAgIGNhbS0+cGFyYW1zLmNvbG91ckJhbGFuY2UucmVkR2FpbiwKLQkgICAgIGNhbS0+cGFyYW1zLmNvbG91ckJhbGFuY2UuZ3JlZW5HYWluLAotCSAgICAgY2FtLT5wYXJhbXMuY29sb3VyQmFsYW5jZS5ibHVlR2Fpbik7Ci19Ci0KLXN0YXRpYyBpbnQgc2V0X2NhbWVyYV9zdGF0ZShzdHJ1Y3QgY2FtX2RhdGEgKmNhbSkKLXsKLQljYW0tPmNtZF9xdWV1ZSA9IENPTU1BTkRfU0VUQ09NUFJFU1NJT04gfAotCQkJIENPTU1BTkRfU0VUQ09NUFJFU1NJT05UQVJHRVQgfAotCQkJIENPTU1BTkRfU0VUQ09MT1VSUEFSQU1TIHwKLQkJCSBDT01NQU5EX1NFVEZPUk1BVCB8Ci0JCQkgQ09NTUFORF9TRVRZVVZUSFJFU0ggfAotCQkJIENPTU1BTkRfU0VURUNQVElNSU5HIHwKLQkJCSBDT01NQU5EX1NFVENPTVBSRVNTSU9OUEFSQU1TIHwKLQkJCSBDT01NQU5EX1NFVEVYUE9TVVJFIHwKLQkJCSBDT01NQU5EX1NFVENPTE9VUkJBTEFOQ0UgfAotCQkJIENPTU1BTkRfU0VUU0VOU09SRlBTIHwKLQkJCSBDT01NQU5EX1NFVEFQQ09SIHwKLQkJCSBDT01NQU5EX1NFVEZMSUNLRVJDVFJMIHwKLQkJCSBDT01NQU5EX1NFVFZMT0ZGU0VUOwotCi0JZG9fY29tbWFuZChjYW0sIENQSUFfQ09NTUFORF9TZXRHcmFiTW9kZSwgQ1BJQV9HUkFCX1NJTkdMRSwwLDAsMCk7Ci0JZGlzcGF0Y2hfY29tbWFuZHMoY2FtKTsKLQotCS8qIFdhaXQgNiBmcmFtZXMgZm9yIHRoZSBzZW5zb3IgdG8gZ2V0IGFsbCBzZXR0aW5ncyBhbmQKLQkgICBBRUMvQUNCIHRvIHNldHRsZSAqLwotCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDYqKGNhbS0+cGFyYW1zLnNlbnNvckZwcy5iYXNlcmF0ZSA/IDMzIDogNDApICoKLQkJCSAgICAgICAoMSA8PCBjYW0tPnBhcmFtcy5zZW5zb3JGcHMuZGl2aXNvcikgKyAxMCk7Ci0KLQlpZihzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKLQkJcmV0dXJuIC1FSU5UUjsKLQotCXNhdmVfY2FtZXJhX3N0YXRlKGNhbSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgZ2V0X3ZlcnNpb25faW5mb3JtYXRpb24oc3RydWN0IGNhbV9kYXRhICpjYW0pCi17Ci0JLyogR2V0Q1BJQVZlcnNpb24gKi8KLQlkb19jb21tYW5kKGNhbSwgQ1BJQV9DT01NQU5EX0dldENQSUFWZXJzaW9uLCAwLCAwLCAwLCAwKTsKLQotCS8qIEdldFBuUElEICovCi0JZG9fY29tbWFuZChjYW0sIENQSUFfQ09NTUFORF9HZXRQblBJRCwgMCwgMCwgMCwgMCk7Ci19Ci0KLS8qIGluaXRpYWxpemUgY2FtZXJhICovCi1zdGF0aWMgaW50IHJlc2V0X2NhbWVyYShzdHJ1Y3QgY2FtX2RhdGEgKmNhbSkKLXsKLQlpbnQgZXJyOwotCS8qIFN0YXJ0IHRoZSBjYW1lcmEgaW4gbG93IHBvd2VyIG1vZGUgKi8KLQlpZiAoZ290b19sb3dfcG93ZXIoY2FtKSkgewotCQlpZiAoY2FtLT5wYXJhbXMuc3RhdHVzLnN5c3RlbVN0YXRlICE9IFdBUk1fQk9PVF9TVEFURSkKLQkJCXJldHVybiAtRU5PREVWOwotCi0JCS8qIEZJWE1FOiB0aGlzIGlzIGp1c3QgZGlydHkgdHJpYWwgYW5kIGVycm9yICovCi0JCWVyciA9IGdvdG9faGlnaF9wb3dlcihjYW0pOwotCQlpZihlcnIpCi0JCQlyZXR1cm4gZXJyOwotCQlkb19jb21tYW5kKGNhbSwgQ1BJQV9DT01NQU5EX0Rpc2NhcmRGcmFtZSwgMCwgMCwgMCwgMCk7Ci0JCWlmIChnb3RvX2xvd19wb3dlcihjYW0pKQotCQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JLyogcHJvY2VkdXJlIGRlc2NyaWJlZCBpbiBkZXZlbG9wZXIncyBndWlkZSBwMy0yOCAqLwotCi0JLyogQ2hlY2sgdGhlIGZpcm13YXJlIHZlcnNpb24uICovCi0JY2FtLT5wYXJhbXMudmVyc2lvbi5maXJtd2FyZVZlcnNpb24gPSAwOwotCWdldF92ZXJzaW9uX2luZm9ybWF0aW9uKGNhbSk7Ci0JaWYgKGNhbS0+cGFyYW1zLnZlcnNpb24uZmlybXdhcmVWZXJzaW9uICE9IDEpCi0JCXJldHVybiAtRU5PREVWOwotCi0JLyogQSBidWcgaW4gZmlybXdhcmUgMS0wMiBsaW1pdHMgZ2Fpbk1vZGUgdG8gMiAqLwotCWlmKGNhbS0+cGFyYW1zLnZlcnNpb24uZmlybXdhcmVSZXZpc2lvbiA8PSAyICYmCi0JICAgY2FtLT5wYXJhbXMuZXhwb3N1cmUuZ2Fpbk1vZGUgPiAyKSB7Ci0JCWNhbS0+cGFyYW1zLmV4cG9zdXJlLmdhaW5Nb2RlID0gMjsKLQl9Ci0KLQkvKiBzZXQgUVgzIGRldGVjdGVkIGZsYWcgKi8KLQljYW0tPnBhcmFtcy5xeDMucXgzX2RldGVjdGVkID0gKGNhbS0+cGFyYW1zLnBucElELnZlbmRvciA9PSAweDA4MTMgJiYKLQkJCQkJY2FtLT5wYXJhbXMucG5wSUQucHJvZHVjdCA9PSAweDAwMDEpOwotCi0JLyogVGhlIGZhdGFsIGVycm9yIGNoZWNraW5nIHNob3VsZCBiZSBkb25lIGFmdGVyCi0JICogdGhlIGNhbWVyYSBwb3dlcnMgdXAgKGRldmVsb3BlcidzIGd1aWRlIHAgMy0zOCkgKi8KLQotCS8qIFNldCBzdHJlYW1TdGF0ZSBiZWZvcmUgdHJhbnNpdGlvbiB0byBoaWdoIHBvd2VyIHRvIGF2b2lkIGJ1ZwotCSAqIGluIGZpcm13YXJlIDEtMDIgKi8KLQlkb19jb21tYW5kKGNhbSwgQ1BJQV9DT01NQU5EX01vZGlmeUNhbWVyYVN0YXR1cywgU1RSRUFNU1RBVEUsIDAsCi0JCSAgIFNUUkVBTV9OT1RfUkVBRFksIDApOwotCi0JLyogR290b0hpUG93ZXIgKi8KLQllcnIgPSBnb3RvX2hpZ2hfcG93ZXIoY2FtKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JLyogQ2hlY2sgdGhlIGNhbWVyYSBzdGF0dXMgKi8KLQlpZiAoZG9fY29tbWFuZChjYW0sIENQSUFfQ09NTUFORF9HZXRDYW1lcmFTdGF0dXMsIDAsIDAsIDAsIDApKQotCQlyZXR1cm4gLUVJTzsKLQotCWlmIChjYW0tPnBhcmFtcy5zdGF0dXMuZmF0YWxFcnJvcikgewotCQlEQkcoImZhdGFsX2Vycm9yOiAgICAgICAgICAgICAgJSMwNHhcbiIsCi0JCSAgICBjYW0tPnBhcmFtcy5zdGF0dXMuZmF0YWxFcnJvcik7Ci0JCURCRygidnBfc3RhdHVzOiAgICAgICAgICAgICAgICAlIzA0eFxuIiwKLQkJICAgIGNhbS0+cGFyYW1zLnN0YXR1cy52cFN0YXR1cyk7Ci0JCWlmIChjYW0tPnBhcmFtcy5zdGF0dXMuZmF0YWxFcnJvciAmIH4oQ09NX0ZMQUd8Q1BJQV9GTEFHKSkgewotCQkJLyogRmF0YWwgZXJyb3IgaW4gY2FtZXJhICovCi0JCQlyZXR1cm4gLUVJTzsKLQkJfSBlbHNlIGlmIChjYW0tPnBhcmFtcy5zdGF0dXMuZmF0YWxFcnJvciAmIChDT01fRkxBR3xDUElBX0ZMQUcpKSB7Ci0JCQkvKiBGaXJtd2FyZSAxLTAyIG1heSBkbyB0aGlzIGZvciBwYXJhbGxlbCBwb3J0IGNhbWVyYXMsCi0JCQkgKiBqdXN0IGNsZWFyIHRoZSBmbGFncyAoZGV2ZWxvcGVyJ3MgZ3VpZGUgcCAzLTM4KSAqLwotCQkJZG9fY29tbWFuZChjYW0sIENQSUFfQ09NTUFORF9Nb2RpZnlDYW1lcmFTdGF0dXMsCi0JCQkJICAgRkFUQUxFUlJPUiwgfihDT01fRkxBR3xDUElBX0ZMQUcpLCAwLCAwKTsKLQkJfQotCX0KLQotCS8qIENoZWNrIHRoZSBjYW1lcmEgc3RhdHVzIGFnYWluICovCi0JaWYgKGNhbS0+cGFyYW1zLnN0YXR1cy5mYXRhbEVycm9yKSB7Ci0JCWlmIChjYW0tPnBhcmFtcy5zdGF0dXMuZmF0YWxFcnJvcikKLQkJCXJldHVybiAtRUlPOwotCX0KLQotCS8qIFZQVmVyc2lvbiBjYW4ndCBiZSByZXRyaWV2ZWQgYmVmb3JlIHRoZSBjYW1lcmEgaXMgaW4gSGlQb3dlciwKLQkgKiBzbyBnZXQgaXQgaGVyZSBpbnN0ZWFkIG9mIGluIGdldF92ZXJzaW9uX2luZm9ybWF0aW9uLiAqLwotCWRvX2NvbW1hbmQoY2FtLCBDUElBX0NPTU1BTkRfR2V0VlBWZXJzaW9uLCAwLCAwLCAwLCAwKTsKLQotCS8qIHNldCBjYW1lcmEgdG8gYSBrbm93biBzdGF0ZSAqLwotCXJldHVybiBzZXRfY2FtZXJhX3N0YXRlKGNhbSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHB1dF9jYW0oc3RydWN0IGNwaWFfY2FtZXJhX29wcyogb3BzKQotewotCW1vZHVsZV9wdXQob3BzLT5vd25lcik7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVjRMIGludGVyZmFjZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXN0YXRpYyBpbnQgY3BpYV9vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQotewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IGNhbV9kYXRhICpjYW0gPSB2aWRlb19nZXRfZHJ2ZGF0YShkZXYpOwotCWludCBlcnI7Ci0KLQlpZiAoIWNhbSkgewotCQlEQkcoIkludGVybmFsIGVycm9yLCBjYW1fZGF0YSBub3QgZm91bmQhXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JaWYgKGNhbS0+b3Blbl9jb3VudCA+IDApIHsKLQkJREJHKCJDYW1lcmEgYWxyZWFkeSBvcGVuXG4iKTsKLQkJcmV0dXJuIC1FQlVTWTsKLQl9Ci0KLQlpZiAoIXRyeV9tb2R1bGVfZ2V0KGNhbS0+b3BzLT5vd25lcikpCi0JCXJldHVybiAtRU5PREVWOwotCi0JbXV0ZXhfbG9jaygmY2FtLT5idXN5X2xvY2spOwotCWVyciA9IC1FTk9NRU07Ci0JaWYgKCFjYW0tPnJhd19pbWFnZSkgewotCQljYW0tPnJhd19pbWFnZSA9IHJ2bWFsbG9jKENQSUFfTUFYX0lNQUdFX1NJWkUpOwotCQlpZiAoIWNhbS0+cmF3X2ltYWdlKQotCQkJZ290byBvb3BzOwotCX0KLQotCWlmICghY2FtLT5kZWNvbXByZXNzZWRfZnJhbWUuZGF0YSkgewotCQljYW0tPmRlY29tcHJlc3NlZF9mcmFtZS5kYXRhID0gcnZtYWxsb2MoQ1BJQV9NQVhfRlJBTUVfU0laRSk7Ci0JCWlmICghY2FtLT5kZWNvbXByZXNzZWRfZnJhbWUuZGF0YSkKLQkJCWdvdG8gb29wczsKLQl9Ci0KLQkvKiBvcGVuIGNwaWEgKi8KLQllcnIgPSAtRU5PREVWOwotCWlmIChjYW0tPm9wcy0+b3BlbihjYW0tPmxvd2xldmVsX2RhdGEpKQotCQlnb3RvIG9vcHM7Ci0KLQkvKiByZXNldCB0aGUgY2FtZXJhICovCi0JaWYgKChlcnIgPSByZXNldF9jYW1lcmEoY2FtKSkgIT0gMCkgewotCQljYW0tPm9wcy0+Y2xvc2UoY2FtLT5sb3dsZXZlbF9kYXRhKTsKLQkJZ290byBvb3BzOwotCX0KLQotCS8qIFNldCBvd25lcnNoaXAgb2YgL3Byb2MvY3BpYS92aWRlb1ggdG8gY3VycmVudCB1c2VyICovCi0JaWYoY2FtLT5wcm9jX2VudHJ5KQotCQljYW0tPnByb2NfZW50cnktPnVpZCA9IGN1cnJlbnRfZXVpZCgpOwotCi0JLyogc2V0IG1hcmsgZm9yIGxvYWRpbmcgZmlyc3QgZnJhbWUgdW5jb21wcmVzc2VkICovCi0JY2FtLT5maXJzdF9mcmFtZSA9IDE7Ci0KLQkvKiBpbml0IGl0IHRvIHNvbWV0aGluZyAqLwotCWNhbS0+bW1hcF9rbHVkZ2UgPSAwOwotCi0JKytjYW0tPm9wZW5fY291bnQ7Ci0JZmlsZS0+cHJpdmF0ZV9kYXRhID0gZGV2OwotCW11dGV4X3VubG9jaygmY2FtLT5idXN5X2xvY2spOwotCXJldHVybiAwOwotCi0gb29wczoKLQlpZiAoY2FtLT5kZWNvbXByZXNzZWRfZnJhbWUuZGF0YSkgewotCQlydmZyZWUoY2FtLT5kZWNvbXByZXNzZWRfZnJhbWUuZGF0YSwgQ1BJQV9NQVhfRlJBTUVfU0laRSk7Ci0JCWNhbS0+ZGVjb21wcmVzc2VkX2ZyYW1lLmRhdGEgPSBOVUxMOwotCX0KLQlpZiAoY2FtLT5yYXdfaW1hZ2UpIHsKLQkJcnZmcmVlKGNhbS0+cmF3X2ltYWdlLCBDUElBX01BWF9JTUFHRV9TSVpFKTsKLQkJY2FtLT5yYXdfaW1hZ2UgPSBOVUxMOwotCX0KLQltdXRleF91bmxvY2soJmNhbS0+YnVzeV9sb2NrKTsKLQlwdXRfY2FtKGNhbS0+b3BzKTsKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IGNwaWFfY2xvc2Uoc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0Jc3RydWN0ICB2aWRlb19kZXZpY2UgKmRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgY2FtX2RhdGEgKmNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKGRldik7Ci0KLQlpZiAoY2FtLT5vcHMpIHsKLQkJLyogUmV0dXJuIG93bmVyc2hpcCBvZiAvcHJvYy9jcGlhL3ZpZGVvWCB0byByb290ICovCi0JCWlmKGNhbS0+cHJvY19lbnRyeSkKLQkJCWNhbS0+cHJvY19lbnRyeS0+dWlkID0gMDsKLQotCQkvKiBzYXZlIGNhbWVyYSBzdGF0ZSBmb3IgbGF0ZXIgb3BlbiAoZGV2ZWxvcGVycyBndWlkZSBjaCAzLjUuMykgKi8KLQkJc2F2ZV9jYW1lcmFfc3RhdGUoY2FtKTsKLQotCQkvKiBHb3RvTG9Qb3dlciAqLwotCQlnb3RvX2xvd19wb3dlcihjYW0pOwotCi0JCS8qIFVwZGF0ZSB0aGUgY2FtZXJhIHN0YXR1cyAqLwotCQlkb19jb21tYW5kKGNhbSwgQ1BJQV9DT01NQU5EX0dldENhbWVyYVN0YXR1cywgMCwgMCwgMCwgMCk7Ci0KLQkJLyogY2xlYW51cCBpbnRlcm5hbCBzdGF0ZSBzdHVmZiAqLwotCQlmcmVlX2ZyYW1lcyhjYW0tPmZyYW1lKTsKLQotCQkvKiBjbG9zZSBjcGlhICovCi0JCWNhbS0+b3BzLT5jbG9zZShjYW0tPmxvd2xldmVsX2RhdGEpOwotCi0JCXB1dF9jYW0oY2FtLT5vcHMpOwotCX0KLQotCWlmICgtLWNhbS0+b3Blbl9jb3VudCA9PSAwKSB7Ci0JCS8qIGNsZWFuIHVwIGNhcHR1cmUtYnVmZmVycyAqLwotCQlpZiAoY2FtLT5yYXdfaW1hZ2UpIHsKLQkJCXJ2ZnJlZShjYW0tPnJhd19pbWFnZSwgQ1BJQV9NQVhfSU1BR0VfU0laRSk7Ci0JCQljYW0tPnJhd19pbWFnZSA9IE5VTEw7Ci0JCX0KLQotCQlpZiAoY2FtLT5kZWNvbXByZXNzZWRfZnJhbWUuZGF0YSkgewotCQkJcnZmcmVlKGNhbS0+ZGVjb21wcmVzc2VkX2ZyYW1lLmRhdGEsIENQSUFfTUFYX0ZSQU1FX1NJWkUpOwotCQkJY2FtLT5kZWNvbXByZXNzZWRfZnJhbWUuZGF0YSA9IE5VTEw7Ci0JCX0KLQotCQlpZiAoY2FtLT5mcmFtZV9idWYpCi0JCQlmcmVlX2ZyYW1lX2J1ZihjYW0pOwotCi0JCWlmICghY2FtLT5vcHMpCi0JCQlrZnJlZShjYW0pOwotCX0KLQlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGNwaWFfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKLQkJCSBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKLXsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGNhbV9kYXRhICpjYW0gPSB2aWRlb19nZXRfZHJ2ZGF0YShkZXYpOwotCWludCBlcnI7Ci0KLQkvKiBtYWtlIHRoaXMgX3JlYWxseV8gc21wIGFuZCBtdWx0aXRocmVhZC1zYWZlICovCi0JaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY2FtLT5idXN5X2xvY2spKQotCQlyZXR1cm4gLUVJTlRSOwotCi0JaWYgKCFidWYpIHsKLQkJREJHKCJidWYgTlVMTFxuIik7Ci0JCW11dGV4X3VubG9jaygmY2FtLT5idXN5X2xvY2spOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoIWNvdW50KSB7Ci0JCURCRygiY291bnQgMFxuIik7Ci0JCW11dGV4X3VubG9jaygmY2FtLT5idXN5X2xvY2spOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAoIWNhbS0+b3BzKSB7Ci0JCURCRygib3BzIE5VTExcbiIpOwotCQltdXRleF91bmxvY2soJmNhbS0+YnVzeV9sb2NrKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JLyogdXBsb2FkIGZyYW1lICovCi0JY2FtLT5kZWNvbXByZXNzZWRfZnJhbWUuc3RhdGUgPSBGUkFNRV9SRUFEWTsKLQljYW0tPm1tYXBfa2x1ZGdlPTA7Ci0JaWYoKGVyciA9IGZldGNoX2ZyYW1lKGNhbSkpICE9IDApIHsKLQkJREJHKCJFUlJPUiBmcm9tIGZldGNoX2ZyYW1lOiAlZFxuIiwgZXJyKTsKLQkJbXV0ZXhfdW5sb2NrKCZjYW0tPmJ1c3lfbG9jayk7Ci0JCXJldHVybiBlcnI7Ci0JfQotCWNhbS0+ZGVjb21wcmVzc2VkX2ZyYW1lLnN0YXRlID0gRlJBTUVfVU5VU0VEOwotCi0JLyogY29weSBkYXRhIHRvIHVzZXIgc3BhY2UgKi8KLQlpZiAoY2FtLT5kZWNvbXByZXNzZWRfZnJhbWUuY291bnQgPiBjb3VudCkgewotCQlEQkcoImNvdW50IHdyb25nOiAlZCwgJWx1XG4iLCBjYW0tPmRlY29tcHJlc3NlZF9mcmFtZS5jb3VudCwKLQkJICAgICh1bnNpZ25lZCBsb25nKSBjb3VudCk7Ci0JCW11dGV4X3VubG9jaygmY2FtLT5idXN5X2xvY2spOwotCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0JaWYgKGNvcHlfdG9fdXNlcihidWYsIGNhbS0+ZGVjb21wcmVzc2VkX2ZyYW1lLmRhdGEsCi0JCQljYW0tPmRlY29tcHJlc3NlZF9mcmFtZS5jb3VudCkpIHsKLQkJREJHKCJjb3B5X3RvX3VzZXIgZmFpbGVkXG4iKTsKLQkJbXV0ZXhfdW5sb2NrKCZjYW0tPmJ1c3lfbG9jayk7Ci0JCXJldHVybiAtRUZBVUxUOwotCX0KLQotCW11dGV4X3VubG9jaygmY2FtLT5idXN5X2xvY2spOwotCXJldHVybiBjYW0tPmRlY29tcHJlc3NlZF9mcmFtZS5jb3VudDsKLX0KLQotc3RhdGljIGxvbmcgY3BpYV9kb19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQotewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgY2FtX2RhdGEgKmNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKGRldik7Ci0JaW50IHJldHZhbCA9IDA7Ci0KLQlpZiAoIWNhbSB8fCAhY2FtLT5vcHMpCi0JCXJldHVybiAtRU5PREVWOwotCi0JLyogbWFrZSB0aGlzIF9yZWFsbHlfIHNtcC1zYWZlICovCi0JaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY2FtLT5idXN5X2xvY2spKQotCQlyZXR1cm4gLUVJTlRSOwotCi0JLyogREJHKCJjcGlhX2lvY3RsOiAldVxuIiwgY21kKTsgKi8KLQotCXN3aXRjaCAoY21kKSB7Ci0JLyogcXVlcnkgY2FwYWJpbGl0aWVzICovCi0JY2FzZSBWSURJT0NHQ0FQOgotCXsKLQkJc3RydWN0IHZpZGVvX2NhcGFiaWxpdHkgKmIgPSBhcmc7Ci0KLQkJREJHKCJWSURJT0NHQ0FQXG4iKTsKLQkJc3RyY3B5KGItPm5hbWUsICJDUGlBIENhbWVyYSIpOwotCQliLT50eXBlID0gVklEX1RZUEVfQ0FQVFVSRSB8IFZJRF9UWVBFX1NVQkNBUFRVUkU7Ci0JCWItPmNoYW5uZWxzID0gMTsKLQkJYi0+YXVkaW9zID0gMDsKLQkJYi0+bWF4d2lkdGggPSAzNTI7CS8qIFZJREVPU0laRV9DSUYgKi8KLQkJYi0+bWF4aGVpZ2h0ID0gMjg4OwotCQliLT5taW53aWR0aCA9IDQ4OwkvKiBWSURFT1NJWkVfNDhfNDggKi8KLQkJYi0+bWluaGVpZ2h0ID0gNDg7Ci0JCWJyZWFrOwotCX0KLQotCS8qIGdldC9zZXQgdmlkZW8gc291cmNlIC0gd2UgYXJlIGEgY2FtZXJhIGFuZCBub3RoaW5nIGVsc2UgKi8KLQljYXNlIFZJRElPQ0dDSEFOOgotCXsKLQkJc3RydWN0IHZpZGVvX2NoYW5uZWwgKnYgPSBhcmc7Ci0KLQkJREJHKCJWSURJT0NHQ0hBTlxuIik7Ci0JCWlmICh2LT5jaGFubmVsICE9IDApIHsKLQkJCXJldHZhbCA9IC1FSU5WQUw7Ci0JCQlicmVhazsKLQkJfQotCi0JCXYtPmNoYW5uZWwgPSAwOwotCQlzdHJjcHkodi0+bmFtZSwgIkNhbWVyYSIpOwotCQl2LT50dW5lcnMgPSAwOwotCQl2LT5mbGFncyA9IDA7Ci0JCXYtPnR5cGUgPSBWSURFT19UWVBFX0NBTUVSQTsKLQkJdi0+bm9ybSA9IDA7Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgVklESU9DU0NIQU46Ci0JewotCQlzdHJ1Y3QgdmlkZW9fY2hhbm5lbCAqdiA9IGFyZzsKLQotCQlEQkcoIlZJRElPQ1NDSEFOXG4iKTsKLQkJaWYgKHYtPmNoYW5uZWwgIT0gMCkKLQkJCXJldHZhbCA9IC1FSU5WQUw7Ci0JCWJyZWFrOwotCX0KLQotCS8qIGltYWdlIHByb3BlcnRpZXMgKi8KLQljYXNlIFZJRElPQ0dQSUNUOgotCXsKLQkJc3RydWN0IHZpZGVvX3BpY3R1cmUgKnBpYyA9IGFyZzsKLQkJREJHKCJWSURJT0NHUElDVFxuIik7Ci0JCSpwaWMgPSBjYW0tPnZwOwotCQlicmVhazsKLQl9Ci0KLQljYXNlIFZJRElPQ1NQSUNUOgotCXsKLQkJc3RydWN0IHZpZGVvX3BpY3R1cmUgKnZwID0gYXJnOwotCi0JCURCRygiVklESU9DU1BJQ1RcbiIpOwotCi0JCS8qIGNoZWNrIHZhbGlkaXR5ICovCi0JCURCRygicGFsZXR0ZTogJWRcbiIsIHZwLT5wYWxldHRlKTsKLQkJREJHKCJkZXB0aDogJWRcbiIsIHZwLT5kZXB0aCk7Ci0JCWlmICghdmFsaWRfbW9kZSh2cC0+cGFsZXR0ZSwgdnAtPmRlcHRoKSkgewotCQkJcmV0dmFsID0gLUVJTlZBTDsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJbXV0ZXhfbG9jaygmY2FtLT5wYXJhbV9sb2NrKTsKLQkJLyogYnJpZ2h0bmVzcywgY29sb3VyLCBjb250cmFzdCBuZWVkIG5vIGNoZWNrIDAtNjU1MzUgKi8KLQkJY2FtLT52cCA9ICp2cDsKLQkJLyogdXBkYXRlIGNhbS0+cGFyYW1zLmNvbG91clBhcmFtcyAqLwotCQljYW0tPnBhcmFtcy5jb2xvdXJQYXJhbXMuYnJpZ2h0bmVzcyA9IHZwLT5icmlnaHRuZXNzKjEwMC82NTUzNTsKLQkJY2FtLT5wYXJhbXMuY29sb3VyUGFyYW1zLmNvbnRyYXN0ID0gdnAtPmNvbnRyYXN0KjEwMC82NTUzNTsKLQkJY2FtLT5wYXJhbXMuY29sb3VyUGFyYW1zLnNhdHVyYXRpb24gPSB2cC0+Y29sb3VyKjEwMC82NTUzNTsKLQkJLyogY29udHJhc3QgaXMgaW4gc3RlcHMgb2YgOCwgc28gcm91bmQgKi8KLQkJY2FtLT5wYXJhbXMuY29sb3VyUGFyYW1zLmNvbnRyYXN0ID0KLQkJCSgoY2FtLT5wYXJhbXMuY29sb3VyUGFyYW1zLmNvbnRyYXN0ICsgMykgLyA4KSAqIDg7Ci0JCWlmIChjYW0tPnBhcmFtcy52ZXJzaW9uLmZpcm13YXJlVmVyc2lvbiA9PSAxICYmCi0JCSAgICBjYW0tPnBhcmFtcy52ZXJzaW9uLmZpcm13YXJlUmV2aXNpb24gPT0gMiAmJgotCQkgICAgY2FtLT5wYXJhbXMuY29sb3VyUGFyYW1zLmNvbnRyYXN0ID4gODApIHsKLQkJCS8qIDEtMDIgZmlybXdhcmUgbGltaXRzIGNvbnRyYXN0IHRvIDgwICovCi0JCQljYW0tPnBhcmFtcy5jb2xvdXJQYXJhbXMuY29udHJhc3QgPSA4MDsKLQkJfQotCi0JCS8qIEFkanVzdCBmbGlja2VyIGNvbnRyb2wgaWYgbmVjZXNzYXJ5ICovCi0JCWlmKGNhbS0+cGFyYW1zLmZsaWNrZXJDb250cm9sLmFsbG93YWJsZU92ZXJFeHBvc3VyZSA8IDApCi0JCQljYW0tPnBhcmFtcy5mbGlja2VyQ29udHJvbC5hbGxvd2FibGVPdmVyRXhwb3N1cmUgPQotCQkJCS1maW5kX292ZXJfZXhwb3N1cmUoY2FtLT5wYXJhbXMuY29sb3VyUGFyYW1zLmJyaWdodG5lc3MpOwotCQlpZihjYW0tPnBhcmFtcy5mbGlja2VyQ29udHJvbC5mbGlja2VyTW9kZSAhPSAwKQotCQkJY2FtLT5jbWRfcXVldWUgfD0gQ09NTUFORF9TRVRGTElDS0VSQ1RSTDsKLQotCi0JCS8qIHF1ZXVlIGNvbW1hbmQgdG8gdXBkYXRlIGNhbWVyYSAqLwotCQljYW0tPmNtZF9xdWV1ZSB8PSBDT01NQU5EX1NFVENPTE9VUlBBUkFNUzsKLQkJbXV0ZXhfdW5sb2NrKCZjYW0tPnBhcmFtX2xvY2spOwotCQlEQkcoIlZJRElPQ1NQSUNUOiAlZCAvICVkIC8vICVkIC8gJWQgLyAlZCAvICVkXG4iLAotCQkgICAgdnAtPmRlcHRoLCB2cC0+cGFsZXR0ZSwgdnAtPmJyaWdodG5lc3MsIHZwLT5odWUsIHZwLT5jb2xvdXIsCi0JCSAgICB2cC0+Y29udHJhc3QpOwotCQlicmVhazsKLQl9Ci0KLQkvKiBnZXQvc2V0IGNhcHR1cmUgd2luZG93ICovCi0JY2FzZSBWSURJT0NHV0lOOgotCXsKLQkJc3RydWN0IHZpZGVvX3dpbmRvdyAqdncgPSBhcmc7Ci0JCURCRygiVklESU9DR1dJTlxuIik7Ci0KLQkJKnZ3ID0gY2FtLT52dzsKLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBWSURJT0NTV0lOOgotCXsKLQkJLyogY29weV9mcm9tX3VzZXIsIGNoZWNrIHZhbGlkaXR5LCBjb3B5IHRvIGludGVybmFsIHN0cnVjdHVyZSAqLwotCQlzdHJ1Y3QgdmlkZW9fd2luZG93ICp2dyA9IGFyZzsKLQkJREJHKCJWSURJT0NTV0lOXG4iKTsKLQotCQlpZiAodnctPmNsaXBjb3VudCAhPSAwKSB7ICAgIC8qIGNsaXBwaW5nIG5vdCBzdXBwb3J0ZWQgKi8KLQkJCXJldHZhbCA9IC1FSU5WQUw7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAodnctPmNsaXBzICE9IE5VTEwpIHsgICAgIC8qIGNsaXBwaW5nIG5vdCBzdXBwb3J0ZWQgKi8KLQkJCXJldHZhbCA9IC1FSU5WQUw7Ci0JCQlicmVhazsKLQkJfQotCi0JCS8qIHdlIHNldCB0aGUgdmlkZW8gd2luZG93IHRvIHNvbWV0aGluZyBzbWFsbGVyIG9yIGVxdWFsIHRvIHdoYXQKLQkJKiBpcyByZXF1ZXN0ZWQgYnkgdGhlIHVzZXI/Pz8KLQkJKi8KLQkJbXV0ZXhfbG9jaygmY2FtLT5wYXJhbV9sb2NrKTsKLQkJaWYgKHZ3LT53aWR0aCAhPSBjYW0tPnZ3LndpZHRoIHx8IHZ3LT5oZWlnaHQgIT0gY2FtLT52dy5oZWlnaHQpIHsKLQkJCWludCB2aWRlb19zaXplID0gbWF0Y2hfdmlkZW9zaXplKHZ3LT53aWR0aCwgdnctPmhlaWdodCk7Ci0KLQkJCWlmICh2aWRlb19zaXplIDwgMCkgewotCQkJCXJldHZhbCA9IC1FSU5WQUw7Ci0JCQkJbXV0ZXhfdW5sb2NrKCZjYW0tPnBhcmFtX2xvY2spOwotCQkJCWJyZWFrOwotCQkJfQotCQkJY2FtLT52aWRlb19zaXplID0gdmlkZW9fc2l6ZTsKLQotCQkJLyogdmlkZW8gc2l6ZSBpcyBjaGFuZ2luZywgcmVzZXQgdGhlIHN1YmNhcHR1cmUgYXJlYSAqLwotCQkJbWVtc2V0KCZjYW0tPnZjLCAwLCBzaXplb2YoY2FtLT52YykpOwotCi0JCQlzZXRfdndfc2l6ZShjYW0pOwotCQkJREJHKCIlZCAvICVkXG4iLCBjYW0tPnZ3LndpZHRoLCBjYW0tPnZ3LmhlaWdodCk7Ci0JCQljYW0tPmNtZF9xdWV1ZSB8PSBDT01NQU5EX1NFVEZPUk1BVDsKLQkJfQotCi0JCW11dGV4X3VubG9jaygmY2FtLT5wYXJhbV9sb2NrKTsKLQotCQkvKiBzZXRmb3JtYXQgaWdub3JlZCBieSBjYW1lcmEgZHVyaW5nIHN0cmVhbWluZywKLQkJICogc28gc3RvcC9kaXNwYXRjaC9zdGFydCAqLwotCQlpZiAoY2FtLT5jbWRfcXVldWUgJiBDT01NQU5EX1NFVEZPUk1BVCkgewotCQkJREJHKCJcbiIpOwotCQkJZGlzcGF0Y2hfY29tbWFuZHMoY2FtKTsKLQkJfQotCQlEQkcoIiVkLyVkOiVkXG4iLCBjYW0tPnZpZGVvX3NpemUsCi0JCSAgICBjYW0tPnZ3LndpZHRoLCBjYW0tPnZ3LmhlaWdodCk7Ci0JCWJyZWFrOwotCX0KLQotCS8qIG1tYXAgaW50ZXJmYWNlICovCi0JY2FzZSBWSURJT0NHTUJVRjoKLQl7Ci0JCXN0cnVjdCB2aWRlb19tYnVmICp2bSA9IGFyZzsKLQkJaW50IGk7Ci0KLQkJREJHKCJWSURJT0NHTUJVRlxuIik7Ci0JCW1lbXNldCh2bSwgMCwgc2l6ZW9mKCp2bSkpOwotCQl2bS0+c2l6ZSA9IENQSUFfTUFYX0ZSQU1FX1NJWkUqRlJBTUVfTlVNOwotCQl2bS0+ZnJhbWVzID0gRlJBTUVfTlVNOwotCQlmb3IgKGkgPSAwOyBpIDwgRlJBTUVfTlVNOyBpKyspCi0JCQl2bS0+b2Zmc2V0c1tpXSA9IENQSUFfTUFYX0ZSQU1FX1NJWkUgKiBpOwotCQlicmVhazsKLQl9Ci0KLQljYXNlIFZJRElPQ01DQVBUVVJFOgotCXsKLQkJc3RydWN0IHZpZGVvX21tYXAgKnZtID0gYXJnOwotCQlpbnQgdmlkZW9fc2l6ZTsKLQotCQlEQkcoIlZJRElPQ01DQVBUVVJFOiAlZCAvICVkIC8gJWR4JWRcbiIsIHZtLT5mb3JtYXQsIHZtLT5mcmFtZSwKLQkJICAgIHZtLT53aWR0aCwgdm0tPmhlaWdodCk7Ci0JCWlmICh2bS0+ZnJhbWU8MHx8dm0tPmZyYW1lPj1GUkFNRV9OVU0pIHsKLQkJCXJldHZhbCA9IC1FSU5WQUw7Ci0JCQlicmVhazsKLQkJfQotCi0JCS8qIHNldCB2aWRlbyBmb3JtYXQgKi8KLQkJY2FtLT52cC5wYWxldHRlID0gdm0tPmZvcm1hdDsKLQkJc3dpdGNoKHZtLT5mb3JtYXQpIHsKLQkJY2FzZSBWSURFT19QQUxFVFRFX0dSRVk6Ci0JCQljYW0tPnZwLmRlcHRoPTg7Ci0JCQlicmVhazsKLQkJY2FzZSBWSURFT19QQUxFVFRFX1JHQjU1NToKLQkJY2FzZSBWSURFT19QQUxFVFRFX1JHQjU2NToKLQkJY2FzZSBWSURFT19QQUxFVFRFX1lVVjQyMjoKLQkJY2FzZSBWSURFT19QQUxFVFRFX1lVWVY6Ci0JCWNhc2UgVklERU9fUEFMRVRURV9VWVZZOgotCQkJY2FtLT52cC5kZXB0aCA9IDE2OwotCQkJYnJlYWs7Ci0JCWNhc2UgVklERU9fUEFMRVRURV9SR0IyNDoKLQkJCWNhbS0+dnAuZGVwdGggPSAyNDsKLQkJCWJyZWFrOwotCQljYXNlIFZJREVPX1BBTEVUVEVfUkdCMzI6Ci0JCQljYW0tPnZwLmRlcHRoID0gMzI7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHZhbCA9IC1FSU5WQUw7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAocmV0dmFsKQotCQkJYnJlYWs7Ci0KLQkJLyogc2V0IHZpZGVvIHNpemUgKi8KLQkJdmlkZW9fc2l6ZSA9IG1hdGNoX3ZpZGVvc2l6ZSh2bS0+d2lkdGgsIHZtLT5oZWlnaHQpOwotCQlpZiAodmlkZW9fc2l6ZSA8IDApIHsKLQkJCXJldHZhbCA9IC1FSU5WQUw7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAodmlkZW9fc2l6ZSAhPSBjYW0tPnZpZGVvX3NpemUpIHsKLQkJCWNhbS0+dmlkZW9fc2l6ZSA9IHZpZGVvX3NpemU7Ci0KLQkJCS8qIHZpZGVvIHNpemUgaXMgY2hhbmdpbmcsIHJlc2V0IHRoZSBzdWJjYXB0dXJlIGFyZWEgKi8KLQkJCW1lbXNldCgmY2FtLT52YywgMCwgc2l6ZW9mKGNhbS0+dmMpKTsKLQotCQkJc2V0X3Z3X3NpemUoY2FtKTsKLQkJCWNhbS0+Y21kX3F1ZXVlIHw9IENPTU1BTkRfU0VURk9STUFUOwotCQkJZGlzcGF0Y2hfY29tbWFuZHMoY2FtKTsKLQkJfQotCQkvKiBhY2NvcmRpbmcgdG8gdjRsLXNwZWMgd2UgbXVzdCBzdGFydCBzdHJlYW1pbmcgaGVyZSAqLwotCQljYW0tPm1tYXBfa2x1ZGdlID0gMTsKLQkJcmV0dmFsID0gY2FwdHVyZV9mcmFtZShjYW0sIHZtKTsKLQotCQlicmVhazsKLQl9Ci0KLQljYXNlIFZJRElPQ1NZTkM6Ci0JewotCQlpbnQgKmZyYW1lID0gYXJnOwotCi0JCS8vREJHKCJWSURJT0NTWU5DOiAlZFxuIiwgKmZyYW1lKTsKLQotCQlpZiAoKmZyYW1lPDAgfHwgKmZyYW1lID49IEZSQU1FX05VTSkgewotCQkJcmV0dmFsID0gLUVJTlZBTDsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJc3dpdGNoIChjYW0tPmZyYW1lWypmcmFtZV0uc3RhdGUpIHsKLQkJY2FzZSBGUkFNRV9VTlVTRUQ6Ci0JCWNhc2UgRlJBTUVfUkVBRFk6Ci0JCWNhc2UgRlJBTUVfR1JBQkJJTkc6Ci0JCQlEQkcoInN5bmMgdG8gdW51c2VkIGZyYW1lICVkXG4iLCAqZnJhbWUpOwotCQkJcmV0dmFsID0gLUVJTlZBTDsKLQkJCWJyZWFrOwotCi0JCWNhc2UgRlJBTUVfRE9ORToKLQkJCWNhbS0+ZnJhbWVbKmZyYW1lXS5zdGF0ZSA9IEZSQU1FX1VOVVNFRDsKLQkJCS8vREJHKCJWSURJT0NTWU5DOiAlZCBzeW5jZWRcbiIsICpmcmFtZSk7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAocmV0dmFsID09IC1FSU5UUikgewotCQkJLyogRklYTUUgLSB4YXd0diBkb2VzIG5vdCBoYW5kbGUgdGhpcyBuaWNlICovCi0JCQlyZXR2YWwgPSAwOwotCQl9Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgVklESU9DR0NBUFRVUkU6Ci0JewotCQlzdHJ1Y3QgdmlkZW9fY2FwdHVyZSAqdmMgPSBhcmc7Ci0KLQkJREJHKCJWSURJT0NHQ0FQVFVSRVxuIik7Ci0KLQkJKnZjID0gY2FtLT52YzsKLQotCQlicmVhazsKLQl9Ci0KLQljYXNlIFZJRElPQ1NDQVBUVVJFOgotCXsKLQkJc3RydWN0IHZpZGVvX2NhcHR1cmUgKnZjID0gYXJnOwotCi0JCURCRygiVklESU9DU0NBUFRVUkVcbiIpOwotCi0JCWlmICh2Yy0+ZGVjaW1hdGlvbiAhPSAwKSB7ICAgIC8qIEhvdyBzaG91bGQgdGhpcyBiZSB1c2VkPyAqLwotCQkJcmV0dmFsID0gLUVJTlZBTDsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmICh2Yy0+ZmxhZ3MgIT0gMCkgeyAgICAgLyogRXZlbi9vZGQgZ3JhYiBub3Qgc3VwcG9ydGVkICovCi0JCQlyZXR2YWwgPSAtRUlOVkFMOwotCQkJYnJlYWs7Ci0JCX0KLQotCQkvKiBDbGlwIHRvIHRoZSByZXNvbHV0aW9uIHdlIGNhbiBzZXQgZm9yIHRoZSBST0kKLQkJICAgKGV2ZXJ5IDggY29sdW1ucyBhbmQgNCByb3dzKSAqLwotCQl2Yy0+eCAgICAgID0gdmMtPnggICAgICAmIH4oX191MzIpNzsKLQkJdmMtPnkgICAgICA9IHZjLT55ICAgICAgJiB+KF9fdTMyKTM7Ci0JCXZjLT53aWR0aCAgPSB2Yy0+d2lkdGggICYgfihfX3UzMik3OwotCQl2Yy0+aGVpZ2h0ID0gdmMtPmhlaWdodCAmIH4oX191MzIpMzsKLQotCQlpZih2Yy0+d2lkdGggPT0gMCB8fCB2Yy0+aGVpZ2h0ID09IDAgfHwKLQkJICAgdmMtPnggKyB2Yy0+d2lkdGggID4gY2FtLT52dy53aWR0aCB8fAotCQkgICB2Yy0+eSArIHZjLT5oZWlnaHQgPiBjYW0tPnZ3LmhlaWdodCkgewotCQkJcmV0dmFsID0gLUVJTlZBTDsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJREJHKCIlZCwlZC8lZHglZFxuIiwgdmMtPngsdmMtPnksdmMtPndpZHRoLCB2Yy0+aGVpZ2h0KTsKLQotCQltdXRleF9sb2NrKCZjYW0tPnBhcmFtX2xvY2spOwotCi0JCWNhbS0+dmMueCAgICAgID0gdmMtPng7Ci0JCWNhbS0+dmMueSAgICAgID0gdmMtPnk7Ci0JCWNhbS0+dmMud2lkdGggID0gdmMtPndpZHRoOwotCQljYW0tPnZjLmhlaWdodCA9IHZjLT5oZWlnaHQ7Ci0KLQkJc2V0X3Z3X3NpemUoY2FtKTsKLQkJY2FtLT5jbWRfcXVldWUgfD0gQ09NTUFORF9TRVRGT1JNQVQ7Ci0KLQkJbXV0ZXhfdW5sb2NrKCZjYW0tPnBhcmFtX2xvY2spOwotCi0JCS8qIHNldGZvcm1hdCBpZ25vcmVkIGJ5IGNhbWVyYSBkdXJpbmcgc3RyZWFtaW5nLAotCQkgKiBzbyBzdG9wL2Rpc3BhdGNoL3N0YXJ0ICovCi0JCWRpc3BhdGNoX2NvbW1hbmRzKGNhbSk7Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgVklESU9DR1VOSVQ6Ci0JewotCQlzdHJ1Y3QgdmlkZW9fdW5pdCAqdnUgPSBhcmc7Ci0KLQkJREJHKCJWSURJT0NHVU5JVFxuIik7Ci0KLQkJdnUtPnZpZGVvICAgID0gY2FtLT52ZGV2Lm1pbm9yOwotCQl2dS0+dmJpICAgICAgPSBWSURFT19OT19VTklUOwotCQl2dS0+cmFkaW8gICAgPSBWSURFT19OT19VTklUOwotCQl2dS0+YXVkaW8gICAgPSBWSURFT19OT19VTklUOwotCQl2dS0+dGVsZXRleHQgPSBWSURFT19OT19VTklUOwotCi0JCWJyZWFrOwotCX0KLQotCi0JLyogcG9pbnRsZXNzIHRvIGltcGxlbWVudCBvdmVybGF5IHdpdGggdGhpcyBjYW1lcmEgKi8KLQljYXNlIFZJRElPQ0NBUFRVUkU6Ci0JY2FzZSBWSURJT0NHRkJVRjoKLQljYXNlIFZJRElPQ1NGQlVGOgotCWNhc2UgVklESU9DS0VZOgotCS8qIHR1bmVyIGludGVyZmFjZSAtIHdlIGhhdmUgbm9uZSAqLwotCWNhc2UgVklESU9DR1RVTkVSOgotCWNhc2UgVklESU9DU1RVTkVSOgotCWNhc2UgVklESU9DR0ZSRVE6Ci0JY2FzZSBWSURJT0NTRlJFUToKLQkvKiBhdWRpbyBpbnRlcmZhY2UgLSB3ZSBoYXZlIG5vbmUgKi8KLQljYXNlIFZJRElPQ0dBVURJTzoKLQljYXNlIFZJRElPQ1NBVURJTzoKLQkJcmV0dmFsID0gLUVJTlZBTDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dmFsID0gLUVOT0lPQ1RMQ01EOwotCQlicmVhazsKLQl9Ci0KLQltdXRleF91bmxvY2soJmNhbS0+YnVzeV9sb2NrKTsKLQlyZXR1cm4gcmV0dmFsOwotfQotCi1zdGF0aWMgbG9uZyBjcGlhX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLAotCQkgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQotewotCXJldHVybiB2aWRlb191c2VyY29weShmaWxlLCBjbWQsIGFyZywgY3BpYV9kb19pb2N0bCk7Ci19Ci0KLQotLyogRklYTUUgKi8KLXN0YXRpYyBpbnQgY3BpYV9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKLXsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JdW5zaWduZWQgbG9uZyBzdGFydCA9IHZtYS0+dm1fc3RhcnQ7Ci0JdW5zaWduZWQgbG9uZyBzaXplICA9IHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydDsKLQl1bnNpZ25lZCBsb25nIHBhZ2UsIHBvczsKLQlzdHJ1Y3QgY2FtX2RhdGEgKmNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKGRldik7Ci0JaW50IHJldHZhbDsKLQotCWlmICghY2FtIHx8ICFjYW0tPm9wcykKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlEQkcoImNwaWFfbW1hcDogJWxkXG4iLCBzaXplKTsKLQotCWlmIChzaXplID4gRlJBTUVfTlVNKkNQSUFfTUFYX0ZSQU1FX1NJWkUpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JLyogbWFrZSB0aGlzIF9yZWFsbHlfIHNtcC1zYWZlICovCi0JaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY2FtLT5idXN5X2xvY2spKQotCQlyZXR1cm4gLUVJTlRSOwotCi0JaWYgKCFjYW0tPmZyYW1lX2J1ZikgewkvKiB3ZSBkbyBsYXp5IGFsbG9jYXRpb24gKi8KLQkJaWYgKChyZXR2YWwgPSBhbGxvY2F0ZV9mcmFtZV9idWYoY2FtKSkpIHsKLQkJCW11dGV4X3VubG9jaygmY2FtLT5idXN5X2xvY2spOwotCQkJcmV0dXJuIHJldHZhbDsKLQkJfQotCX0KLQotCXBvcyA9ICh1bnNpZ25lZCBsb25nKShjYW0tPmZyYW1lX2J1Zik7Ci0Jd2hpbGUgKHNpemUgPiAwKSB7Ci0JCXBhZ2UgPSB2bWFsbG9jX3RvX3Bmbigodm9pZCAqKXBvcyk7Ci0JCWlmIChyZW1hcF9wZm5fcmFuZ2Uodm1hLCBzdGFydCwgcGFnZSwgUEFHRV9TSVpFLCBQQUdFX1NIQVJFRCkpIHsKLQkJCW11dGV4X3VubG9jaygmY2FtLT5idXN5X2xvY2spOwotCQkJcmV0dXJuIC1FQUdBSU47Ci0JCX0KLQkJc3RhcnQgKz0gUEFHRV9TSVpFOwotCQlwb3MgKz0gUEFHRV9TSVpFOwotCQlpZiAoc2l6ZSA+IFBBR0VfU0laRSkKLQkJCXNpemUgLT0gUEFHRV9TSVpFOwotCQllbHNlCi0JCQlzaXplID0gMDsKLQl9Ci0KLQlEQkcoImNwaWFfbW1hcDogJWxkXG4iLCBzaXplKTsKLQltdXRleF91bmxvY2soJmNhbS0+YnVzeV9sb2NrKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIGNwaWFfZm9wcyA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLm9wZW4JCT0gY3BpYV9vcGVuLAotCS5yZWxlYXNlICAgICAgIAk9IGNwaWFfY2xvc2UsCi0JLnJlYWQJCT0gY3BpYV9yZWFkLAotCS5tbWFwCQk9IGNwaWFfbW1hcCwKLQkuaW9jdGwgICAgICAgICAgPSBjcGlhX2lvY3RsLAotfTsKLQotc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgY3BpYV90ZW1wbGF0ZSA9IHsKLQkubmFtZQkJPSAiQ1BpQSBDYW1lcmEiLAotCS5mb3BzICAgICAgICAgICA9ICZjcGlhX2ZvcHMsCi0JLnJlbGVhc2UgCT0gdmlkZW9fZGV2aWNlX3JlbGVhc2VfZW1wdHksCi19OwotCi0vKiBpbml0aWFsaXNlIGNhbV9kYXRhIHN0cnVjdHVyZSAgKi8KLXN0YXRpYyB2b2lkIHJlc2V0X2NhbWVyYV9zdHJ1Y3Qoc3RydWN0IGNhbV9kYXRhICpjYW0pCi17Ci0JLyogVGhlIGZvbGxvd2luZyBwYXJhbWV0ZXIgdmFsdWVzIGFyZSB0aGUgZGVmYXVsdHMgZnJvbQotCSAqICJTb2Z0d2FyZSBEZXZlbG9wZXIncyBHdWlkZSBmb3IgQ1BpQSBDYW1lcmFzIi4gIEFueSBjaGFuZ2VzCi0JICogdG8gdGhlIGRlZmF1bHRzIGFyZSBub3RlZCBpbiBjb21tZW50cy4gKi8KLQljYW0tPnBhcmFtcy5jb2xvdXJQYXJhbXMuYnJpZ2h0bmVzcyA9IDUwOwotCWNhbS0+cGFyYW1zLmNvbG91clBhcmFtcy5jb250cmFzdCA9IDQ4OwotCWNhbS0+cGFyYW1zLmNvbG91clBhcmFtcy5zYXR1cmF0aW9uID0gNTA7Ci0JY2FtLT5wYXJhbXMuZXhwb3N1cmUuZ2Fpbk1vZGUgPSA0OwotCWNhbS0+cGFyYW1zLmV4cG9zdXJlLmV4cE1vZGUgPSAyOwkJLyogQUVDICovCi0JY2FtLT5wYXJhbXMuZXhwb3N1cmUuY29tcE1vZGUgPSAxOwotCWNhbS0+cGFyYW1zLmV4cG9zdXJlLmNlbnRyZVdlaWdodCA9IDE7Ci0JY2FtLT5wYXJhbXMuZXhwb3N1cmUuZ2FpbiA9IDA7Ci0JY2FtLT5wYXJhbXMuZXhwb3N1cmUuZmluZUV4cCA9IDA7Ci0JY2FtLT5wYXJhbXMuZXhwb3N1cmUuY29hcnNlRXhwTG8gPSAxODU7Ci0JY2FtLT5wYXJhbXMuZXhwb3N1cmUuY29hcnNlRXhwSGkgPSAwOwotCWNhbS0+cGFyYW1zLmV4cG9zdXJlLnJlZENvbXAgPSBDT01QX1JFRDsKLQljYW0tPnBhcmFtcy5leHBvc3VyZS5ncmVlbjFDb21wID0gQ09NUF9HUkVFTjE7Ci0JY2FtLT5wYXJhbXMuZXhwb3N1cmUuZ3JlZW4yQ29tcCA9IENPTVBfR1JFRU4yOwotCWNhbS0+cGFyYW1zLmV4cG9zdXJlLmJsdWVDb21wID0gQ09NUF9CTFVFOwotCWNhbS0+cGFyYW1zLmNvbG91ckJhbGFuY2UuYmFsYW5jZU1vZGUgPSAyOwkvKiBBQ0IgKi8KLQljYW0tPnBhcmFtcy5jb2xvdXJCYWxhbmNlLnJlZEdhaW4gPSAzMjsKLQljYW0tPnBhcmFtcy5jb2xvdXJCYWxhbmNlLmdyZWVuR2FpbiA9IDY7Ci0JY2FtLT5wYXJhbXMuY29sb3VyQmFsYW5jZS5ibHVlR2FpbiA9IDkyOwotCWNhbS0+cGFyYW1zLmFwY29yLmdhaW4xID0gMHgxODsKLQljYW0tPnBhcmFtcy5hcGNvci5nYWluMiA9IDB4MTY7Ci0JY2FtLT5wYXJhbXMuYXBjb3IuZ2FpbjQgPSAweDI0OwotCWNhbS0+cGFyYW1zLmFwY29yLmdhaW44ID0gMHgzNDsKLQljYW0tPnBhcmFtcy5mbGlja2VyQ29udHJvbC5mbGlja2VyTW9kZSA9IDA7Ci0JY2FtLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuZGlzYWJsZWQgPSAxOwotCi0JY2FtLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuY29hcnNlSnVtcCA9Ci0JCWZsaWNrZXJfanVtcHNbY2FtLT5tYWluc0ZyZXFdCi0JCQkgICAgIFtjYW0tPnBhcmFtcy5zZW5zb3JGcHMuYmFzZXJhdGVdCi0JCQkgICAgIFtjYW0tPnBhcmFtcy5zZW5zb3JGcHMuZGl2aXNvcl07Ci0JY2FtLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuYWxsb3dhYmxlT3ZlckV4cG9zdXJlID0KLQkJLWZpbmRfb3Zlcl9leHBvc3VyZShjYW0tPnBhcmFtcy5jb2xvdXJQYXJhbXMuYnJpZ2h0bmVzcyk7Ci0JY2FtLT5wYXJhbXMudmxPZmZzZXQuZ2FpbjEgPSAyMDsKLQljYW0tPnBhcmFtcy52bE9mZnNldC5nYWluMiA9IDI0OwotCWNhbS0+cGFyYW1zLnZsT2Zmc2V0LmdhaW40ID0gMjY7Ci0JY2FtLT5wYXJhbXMudmxPZmZzZXQuZ2FpbjggPSAyNjsKLQljYW0tPnBhcmFtcy5jb21wcmVzc2lvblBhcmFtcy5oeXN0ZXJlc2lzID0gMzsKLQljYW0tPnBhcmFtcy5jb21wcmVzc2lvblBhcmFtcy50aHJlc2hNYXggPSAxMTsKLQljYW0tPnBhcmFtcy5jb21wcmVzc2lvblBhcmFtcy5zbWFsbFN0ZXAgPSAxOwotCWNhbS0+cGFyYW1zLmNvbXByZXNzaW9uUGFyYW1zLmxhcmdlU3RlcCA9IDM7Ci0JY2FtLT5wYXJhbXMuY29tcHJlc3Npb25QYXJhbXMuZGVjaW1hdGlvbkh5c3RlcmVzaXMgPSAyOwotCWNhbS0+cGFyYW1zLmNvbXByZXNzaW9uUGFyYW1zLmZyRGlmZlN0ZXBUaHJlc2ggPSA1OwotCWNhbS0+cGFyYW1zLmNvbXByZXNzaW9uUGFyYW1zLnFEaWZmU3RlcFRocmVzaCA9IDM7Ci0JY2FtLT5wYXJhbXMuY29tcHJlc3Npb25QYXJhbXMuZGVjaW1hdGlvblRocmVzaE1vZCA9IDI7Ci0JLyogRW5kIG9mIGRlZmF1bHQgdmFsdWVzIGZyb20gU29mdHdhcmUgRGV2ZWxvcGVyJ3MgR3VpZGUgKi8KLQotCWNhbS0+dHJhbnNmZXJfcmF0ZSA9IDA7Ci0JY2FtLT5leHBvc3VyZV9zdGF0dXMgPSBFWFBPU1VSRV9OT1JNQUw7Ci0KLQkvKiBTZXQgU2Vuc29yIEZQUyB0byAxNWZwcy4gVGhpcyBzZWVtcyBiZXR0ZXIgdGhhbiAzMGZwcwotCSAqIGZvciBpbmRvb3IgbGlnaHRpbmcuICovCi0JY2FtLT5wYXJhbXMuc2Vuc29yRnBzLmRpdmlzb3IgPSAxOwotCWNhbS0+cGFyYW1zLnNlbnNvckZwcy5iYXNlcmF0ZSA9IDE7Ci0KLQljYW0tPnBhcmFtcy55dXZUaHJlc2hvbGQueVRocmVzaG9sZCA9IDY7IC8qIEZyb20gd2luZG93cyBkcml2ZXIgKi8KLQljYW0tPnBhcmFtcy55dXZUaHJlc2hvbGQudXZUaHJlc2hvbGQgPSA2OyAvKiBGcm9tIHdpbmRvd3MgZHJpdmVyICovCi0KLQljYW0tPnBhcmFtcy5mb3JtYXQuc3ViU2FtcGxlID0gU1VCU0FNUExFXzQyMjsKLQljYW0tPnBhcmFtcy5mb3JtYXQueXV2T3JkZXIgPSBZVVZPUkRFUl9ZVVlWOwotCi0JY2FtLT5wYXJhbXMuY29tcHJlc3Npb24ubW9kZSA9IENQSUFfQ09NUFJFU1NJT05fQVVUTzsKLQljYW0tPnBhcmFtcy5jb21wcmVzc2lvblRhcmdldC5mclRhcmdldGluZyA9Ci0JCUNQSUFfQ09NUFJFU1NJT05fVEFSR0VUX1FVQUxJVFk7Ci0JY2FtLT5wYXJhbXMuY29tcHJlc3Npb25UYXJnZXQudGFyZ2V0RlIgPSAxNTsgLyogRnJvbSB3aW5kb3dzIGRyaXZlciAqLwotCWNhbS0+cGFyYW1zLmNvbXByZXNzaW9uVGFyZ2V0LnRhcmdldFEgPSA1OyAvKiBGcm9tIHdpbmRvd3MgZHJpdmVyICovCi0KLQljYW0tPnBhcmFtcy5xeDMucXgzX2RldGVjdGVkID0gMDsKLQljYW0tPnBhcmFtcy5xeDMudG9wbGlnaHQgPSAwOwotCWNhbS0+cGFyYW1zLnF4My5ib3R0b21saWdodCA9IDA7Ci0JY2FtLT5wYXJhbXMucXgzLmJ1dHRvbiA9IDA7Ci0JY2FtLT5wYXJhbXMucXgzLmNyYWRsZWQgPSAwOwotCi0JY2FtLT52aWRlb19zaXplID0gVklERU9TSVpFX0NJRjsKLQotCWNhbS0+dnAuY29sb3VyID0gMzI3Njg7ICAgICAgLyogNTAlICovCi0JY2FtLT52cC5odWUgPSAzMjc2ODsgICAgICAgICAvKiA1MCUgKi8KLQljYW0tPnZwLmJyaWdodG5lc3MgPSAzMjc2ODsgIC8qIDUwJSAqLwotCWNhbS0+dnAuY29udHJhc3QgPSAzMjc2ODsgICAgLyogNTAlICovCi0JY2FtLT52cC53aGl0ZW5lc3MgPSAwOyAgICAgICAvKiBub3QgdXNlZCAtPiBncmF5c2NhbGUgb25seSAqLwotCWNhbS0+dnAuZGVwdGggPSAyNDsgICAgICAgICAgLyogdG8gYmUgc2V0IGJ5IHVzZXIgKi8KLQljYW0tPnZwLnBhbGV0dGUgPSBWSURFT19QQUxFVFRFX1JHQjI0OyAvKiB0byBiZSBzZXQgYnkgdXNlciAqLwotCi0JY2FtLT52Yy54ID0gMDsKLQljYW0tPnZjLnkgPSAwOwotCWNhbS0+dmMud2lkdGggPSAwOwotCWNhbS0+dmMuaGVpZ2h0ID0gMDsKLQotCWNhbS0+dncueCA9IDA7Ci0JY2FtLT52dy55ID0gMDsKLQlzZXRfdndfc2l6ZShjYW0pOwotCWNhbS0+dncuY2hyb21ha2V5ID0gMDsKLQljYW0tPnZ3LmZsYWdzID0gMDsKLQljYW0tPnZ3LmNsaXBjb3VudCA9IDA7Ci0JY2FtLT52dy5jbGlwcyA9IE5VTEw7Ci0KLQljYW0tPmNtZF9xdWV1ZSA9IENPTU1BTkRfTk9ORTsKLQljYW0tPmZpcnN0X2ZyYW1lID0gMTsKLQotCXJldHVybjsKLX0KLQotLyogaW5pdGlhbGl6ZSBjYW1fZGF0YSBzdHJ1Y3R1cmUgICovCi1zdGF0aWMgdm9pZCBpbml0X2NhbWVyYV9zdHJ1Y3Qoc3RydWN0IGNhbV9kYXRhICpjYW0sCi0JCQkgICAgICAgc3RydWN0IGNwaWFfY2FtZXJhX29wcyAqb3BzICkKLXsKLQlpbnQgaTsKLQotCS8qIERlZmF1bHQgZXZlcnl0aGluZyB0byAwICovCi0JbWVtc2V0KGNhbSwgMCwgc2l6ZW9mKHN0cnVjdCBjYW1fZGF0YSkpOwotCi0JY2FtLT5vcHMgPSBvcHM7Ci0JbXV0ZXhfaW5pdCgmY2FtLT5wYXJhbV9sb2NrKTsKLQltdXRleF9pbml0KCZjYW0tPmJ1c3lfbG9jayk7Ci0KLQlyZXNldF9jYW1lcmFfc3RydWN0KGNhbSk7Ci0KLQljYW0tPnByb2NfZW50cnkgPSBOVUxMOwotCi0JbWVtY3B5KCZjYW0tPnZkZXYsICZjcGlhX3RlbXBsYXRlLCBzaXplb2YoY3BpYV90ZW1wbGF0ZSkpOwotCXZpZGVvX3NldF9kcnZkYXRhKCZjYW0tPnZkZXYsIGNhbSk7Ci0KLQljYW0tPmN1cmZyYW1lID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgRlJBTUVfTlVNOyBpKyspIHsKLQkJY2FtLT5mcmFtZVtpXS53aWR0aCA9IDA7Ci0JCWNhbS0+ZnJhbWVbaV0uaGVpZ2h0ID0gMDsKLQkJY2FtLT5mcmFtZVtpXS5zdGF0ZSA9IEZSQU1FX1VOVVNFRDsKLQkJY2FtLT5mcmFtZVtpXS5kYXRhID0gTlVMTDsKLQl9Ci0JY2FtLT5kZWNvbXByZXNzZWRfZnJhbWUud2lkdGggPSAwOwotCWNhbS0+ZGVjb21wcmVzc2VkX2ZyYW1lLmhlaWdodCA9IDA7Ci0JY2FtLT5kZWNvbXByZXNzZWRfZnJhbWUuc3RhdGUgPSBGUkFNRV9VTlVTRUQ7Ci0JY2FtLT5kZWNvbXByZXNzZWRfZnJhbWUuZGF0YSA9IE5VTEw7Ci19Ci0KLXN0cnVjdCBjYW1fZGF0YSAqY3BpYV9yZWdpc3Rlcl9jYW1lcmEoc3RydWN0IGNwaWFfY2FtZXJhX29wcyAqb3BzLCB2b2lkICpsb3dsZXZlbCkKLXsKLQlzdHJ1Y3QgY2FtX2RhdGEgKmNhbWVyYTsKLQotCWlmICgoY2FtZXJhID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGNhbV9kYXRhKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpCi0JCXJldHVybiBOVUxMOwotCi0KLQlpbml0X2NhbWVyYV9zdHJ1Y3QoIGNhbWVyYSwgb3BzICk7Ci0JY2FtZXJhLT5sb3dsZXZlbF9kYXRhID0gbG93bGV2ZWw7Ci0KLQkvKiByZWdpc3RlciB2NGwgZGV2aWNlICovCi0JaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmY2FtZXJhLT52ZGV2LCBWRkxfVFlQRV9HUkFCQkVSLCB2aWRlb19ucikgPCAwKSB7Ci0JCWtmcmVlKGNhbWVyYSk7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJ2aWRlb19yZWdpc3Rlcl9kZXZpY2UgZmFpbGVkXG4iKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JLyogZ2V0IHZlcnNpb24gaW5mb3JtYXRpb24gZnJvbSBjYW1lcmE6IG9wZW4vcmVzZXQvY2xvc2UgKi8KLQotCS8qIG9wZW4gY3BpYSAqLwotCWlmIChjYW1lcmEtPm9wcy0+b3BlbihjYW1lcmEtPmxvd2xldmVsX2RhdGEpKQotCQlyZXR1cm4gY2FtZXJhOwotCi0JLyogcmVzZXQgdGhlIGNhbWVyYSAqLwotCWlmIChyZXNldF9jYW1lcmEoY2FtZXJhKSAhPSAwKSB7Ci0JCWNhbWVyYS0+b3BzLT5jbG9zZShjYW1lcmEtPmxvd2xldmVsX2RhdGEpOwotCQlyZXR1cm4gY2FtZXJhOwotCX0KLQotCS8qIGNsb3NlIGNwaWEgKi8KLQljYW1lcmEtPm9wcy0+Y2xvc2UoY2FtZXJhLT5sb3dsZXZlbF9kYXRhKTsKLQotI2lmZGVmIENPTkZJR19QUk9DX0ZTCi0JY3JlYXRlX3Byb2NfY3BpYV9jYW0oY2FtZXJhKTsKLSNlbmRpZgotCi0JcHJpbnRrKEtFUk5fSU5GTyAiICBDUGlBIFZlcnNpb246ICVkLiUwMmQgKCVkLiVkKVxuIiwKLQkgICAgICAgY2FtZXJhLT5wYXJhbXMudmVyc2lvbi5maXJtd2FyZVZlcnNpb24sCi0JICAgICAgIGNhbWVyYS0+cGFyYW1zLnZlcnNpb24uZmlybXdhcmVSZXZpc2lvbiwKLQkgICAgICAgY2FtZXJhLT5wYXJhbXMudmVyc2lvbi52Y1ZlcnNpb24sCi0JICAgICAgIGNhbWVyYS0+cGFyYW1zLnZlcnNpb24udmNSZXZpc2lvbik7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiICBDUGlBIFBuUC1JRDogJTA0eDolMDR4OiUwNHhcbiIsCi0JICAgICAgIGNhbWVyYS0+cGFyYW1zLnBucElELnZlbmRvciwKLQkgICAgICAgY2FtZXJhLT5wYXJhbXMucG5wSUQucHJvZHVjdCwKLQkgICAgICAgY2FtZXJhLT5wYXJhbXMucG5wSUQuZGV2aWNlUmV2aXNpb24pOwotCXByaW50ayhLRVJOX0lORk8gIiAgVlAtVmVyc2lvbjogJWQuJWQgJTA0eFxuIiwKLQkgICAgICAgY2FtZXJhLT5wYXJhbXMudnBWZXJzaW9uLnZwVmVyc2lvbiwKLQkgICAgICAgY2FtZXJhLT5wYXJhbXMudnBWZXJzaW9uLnZwUmV2aXNpb24sCi0JICAgICAgIGNhbWVyYS0+cGFyYW1zLnZwVmVyc2lvbi5jYW1lcmFIZWFkSUQpOwotCi0JcmV0dXJuIGNhbWVyYTsKLX0KLQotdm9pZCBjcGlhX3VucmVnaXN0ZXJfY2FtZXJhKHN0cnVjdCBjYW1fZGF0YSAqY2FtKQotewotCURCRygidW5yZWdpc3RlcmluZyB2aWRlb1xuIik7Ci0JdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJmNhbS0+dmRldik7Ci0JaWYgKGNhbS0+b3Blbl9jb3VudCkgewotCQlwdXRfY2FtKGNhbS0+b3BzKTsKLQkJREJHKCJjYW1lcmEgb3BlbiAtLSBzZXR0aW5nIG9wcyB0byBOVUxMXG4iKTsKLQkJY2FtLT5vcHMgPSBOVUxMOwotCX0KLQotI2lmZGVmIENPTkZJR19QUk9DX0ZTCi0JREJHKCJkZXN0cm95aW5nIC9wcm9jL2NwaWEvJXNcbiIsIHZpZGVvX2RldmljZV9ub2RlX25hbWUoJmNhbS0+dmRldikpOwotCWRlc3Ryb3lfcHJvY19jcGlhX2NhbShjYW0pOwotI2VuZGlmCi0JaWYgKCFjYW0tPm9wZW5fY291bnQpIHsKLQkJREJHKCJmcmVlaW5nIGNhbWVyYVxuIik7Ci0JCWtmcmVlKGNhbSk7Ci0JfQotfQotCi1zdGF0aWMgaW50IF9faW5pdCBjcGlhX2luaXQodm9pZCkKLXsKLQlwcmludGsoS0VSTl9JTkZPICIlcyB2JWQuJWQuJWRcbiIsIEFCT1VULAotCSAgICAgICBDUElBX01BSl9WRVIsIENQSUFfTUlOX1ZFUiwgQ1BJQV9QQVRDSF9WRVIpOwotCi0JcHJpbnRrKEtFUk5fV0FSTklORyAiU2luY2UgaW4ta2VybmVsIGNvbG9yc3BhY2UgY29udmVyc2lvbiBpcyBub3QgIgotCSAgICAgICAiYWxsb3dlZCwgaXQgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCBub3cuIFVzZXJzIHNob3VsZCBmaXggdGhlICIKLQkgICAgICAgImFwcGxpY2F0aW9ucyBpbiBjYXNlIHRoZXkgZG9uJ3Qgd29yayB3aXRob3V0IGNvbnZlcnNpb24gIgotCSAgICAgICAicmVlbmFibGVkIGJ5IHNldHRpbmcgdGhlICdjb2xvcnNwYWNlX2NvbnYnIG1vZHVsZSAiCi0JICAgICAgICJwYXJhbWV0ZXIgdG8gMVxuIik7Ci0KLSNpZmRlZiBDT05GSUdfUFJPQ19GUwotCXByb2NfY3BpYV9jcmVhdGUoKTsKLSNlbmRpZgotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBjcGlhX2V4aXQodm9pZCkKLXsKLSNpZmRlZiBDT05GSUdfUFJPQ19GUwotCXByb2NfY3BpYV9kZXN0cm95KCk7Ci0jZW5kaWYKLX0KLQotbW9kdWxlX2luaXQoY3BpYV9pbml0KTsKLW1vZHVsZV9leGl0KGNwaWFfZXhpdCk7Ci0KLS8qIEV4cG9ydGVkIHN5bWJvbHMgZm9yIG1vZHVsZXMuICovCi0KLUVYUE9SVF9TWU1CT0woY3BpYV9yZWdpc3Rlcl9jYW1lcmEpOwotRVhQT1JUX1NZTUJPTChjcGlhX3VucmVnaXN0ZXJfY2FtZXJhKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jcGlhL2NwaWEuaCBiL2RyaXZlcnMvc3RhZ2luZy9jcGlhL2NwaWEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGYwY2ZlZS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY3BpYS9jcGlhLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MzIgKzAsMCBAQAotI2lmbmRlZiBjcGlhX2gKLSNkZWZpbmUgY3BpYV9oCi0KLS8qCi0gKiBDUGlBIFBhcmFsbGVsIFBvcnQgVmlkZW80TGludXggZHJpdmVyCi0gKgotICogU3VwcG9ydHMgQ1BpQSBiYXNlZCBwYXJhbGxlbCBwb3J0IFZpZGVvIENhbWVyYSdzLgotICoKLSAqIChDKSBDb3B5cmlnaHQgMTk5OSBCYXMgSHVpc21hbiwKLSAqICAgICAgICAgICAgICAgICAgICBQZXRlciBQcmVnbGVyLAotICogICAgICAgICAgICAgICAgICAgIFNjb3R0IEouIEJlcnRpbiwKLSAqICAgICAgICAgICAgICAgICAgICBWTFNJIFZpc2lvbiBMdGQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLQotI2RlZmluZSBDUElBX01BSl9WRVIJMQotI2RlZmluZSBDUElBX01JTl9WRVIgICAyCi0jZGVmaW5lIENQSUFfUEFUQ0hfVkVSCTMKLQotI2RlZmluZSBDUElBX1BQX01BSl9WRVIgICAgICAgQ1BJQV9NQUpfVkVSCi0jZGVmaW5lIENQSUFfUFBfTUlOX1ZFUiAgICAgICBDUElBX01JTl9WRVIKLSNkZWZpbmUgQ1BJQV9QUF9QQVRDSF9WRVIgICAgIENQSUFfUEFUQ0hfVkVSCi0KLSNkZWZpbmUgQ1BJQV9VU0JfTUFKX1ZFUiAgICAgIENQSUFfTUFKX1ZFUgotI2RlZmluZSBDUElBX1VTQl9NSU5fVkVSICAgICAgQ1BJQV9NSU5fVkVSCi0jZGVmaW5lIENQSUFfVVNCX1BBVENIX1ZFUiAgICBDUElBX1BBVENIX1ZFUgotCi0jZGVmaW5lIENQSUFfTUFYX0ZSQU1FX1NJWkVfVU5BTElHTkVECSgzNTIgKiAyODggKiA0KSAgIC8qIENJRiBhdCBSR0IzMiAqLwotI2RlZmluZSBDUElBX01BWF9GUkFNRV9TSVpFCSgoQ1BJQV9NQVhfRlJBTUVfU0laRV9VTkFMSUdORUQgKyBQQUdFX1NJWkUgLSAxKSAmIH4oUEFHRV9TSVpFIC0gMSkpIC8qIGFsaWduIGFib3ZlIHRvIFBBR0VfU0laRSAqLwotCi0jaWZkZWYgX19LRVJORUxfXwotCi0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgotCi1zdHJ1Y3QgY3BpYV9jYW1lcmFfb3BzCi17Ci0JLyogb3BlbiBzZXRzIHByaXZkYXRhIHRvIHBvaW50IHRvIHN0cnVjdHVyZSBmb3IgdGhpcyBjYW1lcmEuCi0JICogUmV0dXJucyBuZWdhdGl2ZSB2YWx1ZSBvbiBlcnJvciwgb3RoZXJ3aXNlIDAuCi0JICovCi0JaW50ICgqb3Blbikodm9pZCAqcHJpdmRhdGEpOwotCi0JLyogUmVnaXN0ZXJzIGNhbGxiYWNrIGZ1bmN0aW9uIGNiIHRvIGJlIGNhbGxlZCB3aXRoIGNiZGF0YQotCSAqIHdoZW4gYW4gaW1hZ2UgaXMgcmVhZHkuICBJZiBjYiBpcyBOVUxMLCBvbmx5IHNpbmdsZSBpbWFnZSBncmFicwotCSAqIHNob3VsZCBiZSB1c2VkLiAgY2Igc2hvdWxkIGltbWVkaWF0ZWx5IGNhbGwgc3RyZWFtUmVhZCB0byByZWFkCi0JICogdGhlIGRhdGEgb3IgZGF0YSBtYXkgYmUgbG9zdC4gUmV0dXJucyBuZWdhdGl2ZSB2YWx1ZSBvbiBlcnJvciwKLQkgKiBvdGhlcndpc2UgMC4KLQkgKi8KLQlpbnQgKCpyZWdpc3RlckNhbGxiYWNrKSh2b2lkICpwcml2ZGF0YSwgdm9pZCAoKmNiKSh2b2lkICpjYmRhdGEpLAotCQkJCXZvaWQgKmNiZGF0YSk7Ci0KLQkvKiB0cmFuc2ZlckNtZCBzZW5kcyBjb21tYW5kcyB0byB0aGUgY2FtZXJhLiAgY29tbWFuZCBNVVNUIHBvaW50IHRvCi0JICogYW4gIDggYnl0ZSBidWZmZXIgaW4ga2VybmVsIHNwYWNlLiBkYXRhIGNhbiBiZSBOVUxMIGlmIG5vIGV4dHJhCi0JICogZGF0YSBpcyBuZWVkZWQuICBUaGUgc2l6ZSBvZiB0aGUgZGF0YSBpcyBnaXZlbiBieSB0aGUgbGFzdCAyCi0JICogYnl0ZXMgb2YgY29tbWFuZC4gIGRhdGEgbXVzdCBhbHNvIHBvaW50IHRvIG1lbW9yeSBpbiBrZXJuZWwgc3BhY2UuCi0JICogUmV0dXJucyBuZWdhdGl2ZSB2YWx1ZSBvbiBlcnJvciwgb3RoZXJ3aXNlIDAuCi0JICovCi0JaW50ICgqdHJhbnNmZXJDbWQpKHZvaWQgKnByaXZkYXRhLCB1OCAqY29tbWFuZCwgdTggKmRhdGEpOwotCi0JLyogc3RyZWFtU3RhcnQgaW5pdGlhdGVzIHN0cmVhbSBjYXB0dXJlIG1vZGUuCi0JICogUmV0dXJucyBuZWdhdGl2ZSB2YWx1ZSBvbiBlcnJvciwgb3RoZXJ3aXNlIDAuCi0JICovCi0JaW50ICgqc3RyZWFtU3RhcnQpKHZvaWQgKnByaXZkYXRhKTsKLQotCS8qIHN0cmVhbVN0b3AgdGVybWluYXRlcyBzdHJlYW0gY2FwdHVyZSBtb2RlLgotCSAqIFJldHVybnMgbmVnYXRpdmUgdmFsdWUgb24gZXJyb3IsIG90aGVyd2lzZSAwLgotCSAqLwotCWludCAoKnN0cmVhbVN0b3ApKHZvaWQgKnByaXZkYXRhKTsKLQotCS8qIHN0cmVhbVJlYWQgcmVhZHMgYSBmcmFtZSBmcm9tIHRoZSBjYW1lcmEuICBidWZmZXIgcG9pbnRzIHRvIGEKLQkgKiBidWZmZXIgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgYSBjb21wbGV0ZSBmcmFtZSBpbiBrZXJuZWwgc3BhY2UuCi0JICogbm9ibG9jayBpbmRpY2F0ZXMgaWYgdGhpcyBzaG91bGQgYmUgYSBub24gYmxvY2tpbmcgcmVhZC4KLQkgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVhZCwgb3IgbmVnYXRpdmUgdmFsdWUgb24gZXJyb3IuCi0JICovCi0JaW50ICgqc3RyZWFtUmVhZCkodm9pZCAqcHJpdmRhdGEsIHU4ICpidWZmZXIsIGludCBub2Jsb2NrKTsKLQotCS8qIGNsb3NlIGRpc2FibGVzIHRoZSBkZXZpY2UgdW50aWwgb3BlbigpIGlzIGNhbGxlZCBhZ2Fpbi4KLQkgKiBSZXR1cm5zIG5lZ2F0aXZlIHZhbHVlIG9uIGVycm9yLCBvdGhlcndpc2UgMC4KLQkgKi8KLQlpbnQgKCpjbG9zZSkodm9pZCAqcHJpdmRhdGEpOwotCi0JLyogSWYgd2FpdF9mb3Jfc3RyZWFtX3JlYWR5IGlzIG5vbi16ZXJvLCB3YWl0IHVudGlsIHRoZSBzdHJlYW1TdGF0ZQotCSAqIGlzIFNUUkVBTV9SRUFEWSBiZWZvcmUgY2FsbGluZyBzdHJlYW1SZWFkLgotCSAqLwotCWludCB3YWl0X2Zvcl9zdHJlYW1fcmVhZHk7Ci0KLQkvKgotCSAqIFVzZWQgdG8gbWFpbnRhaW4gbG93bGV2ZWwgbW9kdWxlIHVzYWdlIGNvdW50cwotCSAqLwotCXN0cnVjdCBtb2R1bGUgKm93bmVyOwotfTsKLQotc3RydWN0IGNwaWFfZnJhbWUgewotCXU4ICpkYXRhOwotCWludCBjb3VudDsKLQlpbnQgd2lkdGg7Ci0JaW50IGhlaWdodDsKLQl2b2xhdGlsZSBpbnQgc3RhdGU7Ci19OwotCi1zdHJ1Y3QgY2FtX3BhcmFtcyB7Ci0Jc3RydWN0IHsKLQkJdTggZmlybXdhcmVWZXJzaW9uOwotCQl1OCBmaXJtd2FyZVJldmlzaW9uOwotCQl1OCB2Y1ZlcnNpb247Ci0JCXU4IHZjUmV2aXNpb247Ci0JfSB2ZXJzaW9uOwotCXN0cnVjdCB7Ci0JCXUxNiB2ZW5kb3I7Ci0JCXUxNiBwcm9kdWN0OwotCQl1MTYgZGV2aWNlUmV2aXNpb247Ci0JfSBwbnBJRDsKLQlzdHJ1Y3QgewotCQl1OCB2cFZlcnNpb247Ci0JCXU4IHZwUmV2aXNpb247Ci0JCXUxNiBjYW1lcmFIZWFkSUQ7Ci0JfSB2cFZlcnNpb247Ci0Jc3RydWN0IHsKLQkJdTggc3lzdGVtU3RhdGU7Ci0JCXU4IGdyYWJTdGF0ZTsKLQkJdTggc3RyZWFtU3RhdGU7Ci0JCXU4IGZhdGFsRXJyb3I7Ci0JCXU4IGNtZEVycm9yOwotCQl1OCBkZWJ1Z0ZsYWdzOwotCQl1OCB2cFN0YXR1czsKLQkJdTggZXJyb3JDb2RlOwotCX0gc3RhdHVzOwotCXN0cnVjdCB7Ci0JCXU4IGJyaWdodG5lc3M7Ci0JCXU4IGNvbnRyYXN0OwotCQl1OCBzYXR1cmF0aW9uOwotCX0gY29sb3VyUGFyYW1zOwotCXN0cnVjdCB7Ci0JCXU4IGdhaW5Nb2RlOwotCQl1OCBleHBNb2RlOwotCQl1OCBjb21wTW9kZTsKLQkJdTggY2VudHJlV2VpZ2h0OwotCQl1OCBnYWluOwotCQl1OCBmaW5lRXhwOwotCQl1OCBjb2Fyc2VFeHBMbzsKLQkJdTggY29hcnNlRXhwSGk7Ci0JCXU4IHJlZENvbXA7Ci0JCXU4IGdyZWVuMUNvbXA7Ci0JCXU4IGdyZWVuMkNvbXA7Ci0JCXU4IGJsdWVDb21wOwotCX0gZXhwb3N1cmU7Ci0Jc3RydWN0IHsKLQkJdTggYmFsYW5jZU1vZGU7Ci0JCXU4IHJlZEdhaW47Ci0JCXU4IGdyZWVuR2FpbjsKLQkJdTggYmx1ZUdhaW47Ci0JfSBjb2xvdXJCYWxhbmNlOwotCXN0cnVjdCB7Ci0JCXU4IGRpdmlzb3I7Ci0JCXU4IGJhc2VyYXRlOwotCX0gc2Vuc29yRnBzOwotCXN0cnVjdCB7Ci0JCXU4IGdhaW4xOwotCQl1OCBnYWluMjsKLQkJdTggZ2FpbjQ7Ci0JCXU4IGdhaW44OwotCX0gYXBjb3I7Ci0Jc3RydWN0IHsKLQkJdTggZGlzYWJsZWQ7Ci0JCXU4IGZsaWNrZXJNb2RlOwotCQl1OCBjb2Fyc2VKdW1wOwotCQlpbnQgYWxsb3dhYmxlT3ZlckV4cG9zdXJlOwotCX0gZmxpY2tlckNvbnRyb2w7Ci0Jc3RydWN0IHsKLQkJdTggZ2FpbjE7Ci0JCXU4IGdhaW4yOwotCQl1OCBnYWluNDsKLQkJdTggZ2Fpbjg7Ci0JfSB2bE9mZnNldDsKLQlzdHJ1Y3QgewotCQl1OCBtb2RlOwotCQl1OCBkZWNpbWF0aW9uOwotCX0gY29tcHJlc3Npb247Ci0Jc3RydWN0IHsKLQkJdTggZnJUYXJnZXRpbmc7Ci0JCXU4IHRhcmdldEZSOwotCQl1OCB0YXJnZXRROwotCX0gY29tcHJlc3Npb25UYXJnZXQ7Ci0Jc3RydWN0IHsKLQkJdTggeVRocmVzaG9sZDsKLQkJdTggdXZUaHJlc2hvbGQ7Ci0JfSB5dXZUaHJlc2hvbGQ7Ci0Jc3RydWN0IHsKLQkJdTggaHlzdGVyZXNpczsKLQkJdTggdGhyZXNoTWF4OwotCQl1OCBzbWFsbFN0ZXA7Ci0JCXU4IGxhcmdlU3RlcDsKLQkJdTggZGVjaW1hdGlvbkh5c3RlcmVzaXM7Ci0JCXU4IGZyRGlmZlN0ZXBUaHJlc2g7Ci0JCXU4IHFEaWZmU3RlcFRocmVzaDsKLQkJdTggZGVjaW1hdGlvblRocmVzaE1vZDsKLQl9IGNvbXByZXNzaW9uUGFyYW1zOwotCXN0cnVjdCB7Ci0JCXU4IHZpZGVvU2l6ZTsJCS8qIENJRi9RQ0lGICovCi0JCXU4IHN1YlNhbXBsZTsKLQkJdTggeXV2T3JkZXI7Ci0JfSBmb3JtYXQ7Ci0Jc3RydWN0IHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbnRlbCBRWDMgc3BlY2lmaWMgZGF0YSAqLwotCQl1OCBxeDNfZGV0ZWN0ZWQ7ICAgICAgICAvKiBhIFFYMyBpcyBwcmVzZW50ICovCi0JCXU4IHRvcGxpZ2h0OyAgICAgICAgICAgIC8qIHRvcCBsaWdodCBsaXQgLCBSL1cgKi8KLQkJdTggYm90dG9tbGlnaHQ7ICAgICAgICAgLyogYm90dG9tIGxpZ2h0IGxpdCwgUi9XICovCi0JCXU4IGJ1dHRvbjsgICAgICAgICAgICAgIC8qIHNuYXBzaG90IGJ1dHRvbiBwcmVzc2VkIChSL08pICovCi0JCXU4IGNyYWRsZWQ7ICAgICAgICAgICAgIC8qIG1pY3Jvc2NvcGUgaXMgaW4gY3JhZGxlIChSL08pICovCi0JfSBxeDM7Ci0Jc3RydWN0IHsKLQkJdTggY29sU3RhcnQ7CQkvKiBza2lwIGZpcnN0IDgqY29sU3RhcnQgcGl4ZWxzICovCi0JCXU4IGNvbEVuZDsJCS8qIGZpbmlzaCBhdCA4KmNvbEVuZCBwaXhlbHMgKi8KLQkJdTggcm93U3RhcnQ7CQkvKiBza2lwIGZpcnN0IDQqcm93U3RhcnQgbGluZXMgKi8KLQkJdTggcm93RW5kOwkJLyogZmluaXNoIGF0IDQqcm93RW5kIGxpbmVzICovCi0JfSByb2k7Ci0JdTggZWNwVGltaW5nOwotCXU4IHN0cmVhbVN0YXJ0TGluZTsKLX07Ci0KLWVudW0gdjRsX2NhbXN0YXRlcyB7Ci0JQ1BJQV9WNExfSURMRSA9IDAsCi0JQ1BJQV9WNExfRVJST1IsCi0JQ1BJQV9WNExfQ09NTUFORCwKLQlDUElBX1Y0TF9HUkFCQklORywKLQlDUElBX1Y0TF9TVFJFQU1JTkcsCi0JQ1BJQV9WNExfU1RSRUFNSU5HX1BBVVNFRCwKLX07Ci0KLSNkZWZpbmUgRlJBTUVfTlVNCTIJLyogZG91YmxlIGJ1ZmZlcmluZyBmb3Igbm93ICovCi0KLXN0cnVjdCBjYW1fZGF0YSB7Ci0Jc3RydWN0IGxpc3RfaGVhZCBjYW1fZGF0YV9saXN0OwotCi0Jc3RydWN0IG11dGV4IGJ1c3lfbG9jazsJCS8qIGd1YXJkIGFnYWluc3QgU01QIG11bHRpdGhyZWFkaW5nICovCi0Jc3RydWN0IGNwaWFfY2FtZXJhX29wcyAqb3BzOwkvKiBsb3dsZXZlbCBkcml2ZXIgb3BlcmF0aW9ucyAqLwotCXZvaWQgKmxvd2xldmVsX2RhdGE7CQkvKiBwcml2YXRlIGRhdGEgZm9yIGxvd2xldmVsIGRyaXZlciAqLwotCXU4ICpyYXdfaW1hZ2U7CQkJLyogYnVmZmVyIGZvciByYXcgaW1hZ2UgZGF0YSAqLwotCXN0cnVjdCBjcGlhX2ZyYW1lIGRlY29tcHJlc3NlZF9mcmFtZTsKLQkJCQkJLyogYnVmZmVyIHRvIGhvbGQgZGVjb21wcmVzc2VkIGZyYW1lICovCi0JaW50IGltYWdlX3NpemU7CQkJLyogc2l6ZW9mIGxhc3QgZGVjb21wcmVzc2VkIGltYWdlICovCi0JaW50IG9wZW5fY291bnQ7CQkJLyogIyBvZiBwcm9jZXNzIHRoYXQgaGF2ZSBjYW1lcmEgb3BlbiAqLwotCi0JCQkJLyogY2FtZXJhIHN0YXR1cyAqLwotCWludCBmcHM7CQkJLyogYWN0dWFsIGZwcyByZXBvcnRlZCBieSB0aGUgY2FtZXJhICovCi0JaW50IHRyYW5zZmVyX3JhdGU7CQkvKiB0cmFuc2ZlciByYXRlIGZyb20gY2FtZXJhIGluIGtCL3MgKi8KLQl1OCBtYWluc0ZyZXE7CQkJLyogZm9yIGZsaWNrZXIgY29udHJvbCAqLwotCi0JCQkJLyogcHJvYyBpbnRlcmZhY2UgKi8KLQlzdHJ1Y3QgbXV0ZXggcGFyYW1fbG9jazsJLyogcGFyYW1zIGxvY2sgZm9yIHRoaXMgY2FtZXJhICovCi0Jc3RydWN0IGNhbV9wYXJhbXMgcGFyYW1zOwkvKiBjYW1lcmEgc2V0dGluZ3MgKi8KLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2NfZW50cnk7CS8qIC9wcm9jL2NwaWEvdmlkZW9YICovCi0KLQkJCQkJLyogdjRsICovCi0JaW50IHZpZGVvX3NpemU7CQkJLyogVklERU9fU0laRV8gKi8KLQl2b2xhdGlsZSBlbnVtIHY0bF9jYW1zdGF0ZXMgY2Ftc3RhdGU7CS8qIHY0bCBsYXllciBzdGF0dXMgKi8KLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlIHZkZXY7CS8qIHY0bCB2aWRlb2RldiAqLwotCXN0cnVjdCB2aWRlb19waWN0dXJlIHZwOwkvKiB2NGwgY2FtZXJhIHNldHRpbmdzICovCi0Jc3RydWN0IHZpZGVvX3dpbmRvdyB2dzsJCS8qIHY0bCBjYXB0dXJlIGFyZWEgKi8KLQlzdHJ1Y3QgdmlkZW9fY2FwdHVyZSB2YzsgICAgICAgCS8qIHY0bCBzdWJjYXB0dXJlIGFyZWEgKi8KLQotCQkJCS8qIG1tYXAgaW50ZXJmYWNlICovCi0JaW50IGN1cmZyYW1lOwkJCS8qIHRoZSBjdXJyZW50IGZyYW1lIHRvIGdyYWIgaW50byAqLwotCXU4ICpmcmFtZV9idWY7CQkJLyogZnJhbWUgYnVmZmVyIGRhdGEgKi8KLQlzdHJ1Y3QgY3BpYV9mcmFtZSBmcmFtZVtGUkFNRV9OVU1dOwotCQkJCS8qIEZSQU1FX05VTS1idWZmZXJpbmcsIHNvIHdlIG5lZWQgYSBhcnJheSAqLwotCi0JaW50IGZpcnN0X2ZyYW1lOwotCWludCBtbWFwX2tsdWRnZTsJCS8qICd3cm9uZycgYnl0ZSBvcmRlciBmb3IgbW1hcCAqLwotCXZvbGF0aWxlIHUzMiBjbWRfcXVldWU7CQkvKiBxdWV1ZWQgY29tbWFuZHMgKi8KLQlpbnQgZXhwb3N1cmVfc3RhdHVzOwkJLyogRVhQT1NVUkVfKiAqLwotCWludCBleHBvc3VyZV9jb3VudDsJCS8qIG51bWJlciBvZiBmcmFtZXMgYXQgdGhpcyBzdGF0dXMgKi8KLX07Ci0KLS8qIGNwaWFfcmVnaXN0ZXJfY2FtZXJhIGlzIGNhbGxlZCBieSBsb3cgbGV2ZWwgZHJpdmVyIGZvciBlYWNoIGNhbWVyYS4KLSAqIEEgdW5pcXVlIGNhbWVyYSBudW1iZXIgaXMgcmV0dXJuZWQsIG9yIGEgbmVnYXRpdmUgdmFsdWUgb24gZXJyb3IgKi8KLXN0cnVjdCBjYW1fZGF0YSAqY3BpYV9yZWdpc3Rlcl9jYW1lcmEoc3RydWN0IGNwaWFfY2FtZXJhX29wcyAqb3BzLCB2b2lkICpsb3dsZXZlbCk7Ci0KLS8qIGNwaWFfdW5yZWdpc3Rlcl9jYW1lcmEgaXMgY2FsbGVkIGJ5IGxvdyBsZXZlbCBkcml2ZXIgd2hlbiBhIGNhbWVyYQotICogaXMgcmVtb3ZlZC4gIFRoaXMgbXVzdCBub3QgZmFpbC4gKi8KLXZvaWQgY3BpYV91bnJlZ2lzdGVyX2NhbWVyYShzdHJ1Y3QgY2FtX2RhdGEgKmNhbSk7Ci0KLS8qIHJhdyBDSUYgKyA2NCBieXRlIGhlYWRlciArICgyIGJ5dGVzIGxpbmVfbGVuZ3RoICsgRU9MKSBwZXIgbGluZSArIDQqRU9JICsKLSAqIG9uZSBieXRlIDE2Yml0IERNQSBhbGlnbm1lbnQKLSAqLwotI2RlZmluZSBDUElBX01BWF9JTUFHRV9TSVpFICgoMzUyKjI4OCoyKSs2NCsoMjg4KjMpKzUpCi0KLS8qIGNvbnN0YW50IHZhbHVlJ3MgKi8KLSNkZWZpbmUgTUFHSUNfMAkJMHgxOQotI2RlZmluZSBNQUdJQ18xCQkweDY4Ci0jZGVmaW5lIERBVEFfSU4JCTB4QzAKLSNkZWZpbmUgREFUQV9PVVQJMHg0MAotI2RlZmluZSBWSURFT1NJWkVfUUNJRgkwCS8qIDE3NngxNDQgKi8KLSNkZWZpbmUgVklERU9TSVpFX0NJRgkxCS8qIDM1MngyODggKi8KLSNkZWZpbmUgVklERU9TSVpFX1NJRgkyCS8qIDMyMHgyNDAgKi8KLSNkZWZpbmUgVklERU9TSVpFX1FTSUYJMwkvKiAxNjB4MTIwICovCi0jZGVmaW5lIFZJREVPU0laRV80OF80OAkJNCAvKiB3aGVyZSBubyBvbmUgaGFzIGdvbmUgYmVmb3JlLCBpY29uc2l6ZSEgKi8KLSNkZWZpbmUgVklERU9TSVpFXzY0XzQ4CQk1Ci0jZGVmaW5lIFZJREVPU0laRV8xMjhfOTYJNgotI2RlZmluZSBWSURFT1NJWkVfMTYwXzEyMAlWSURFT1NJWkVfUVNJRgotI2RlZmluZSBWSURFT1NJWkVfMTc2XzE0NAlWSURFT1NJWkVfUUNJRgotI2RlZmluZSBWSURFT1NJWkVfMTkyXzE0NAk3Ci0jZGVmaW5lIFZJREVPU0laRV8yMjRfMTY4CTgKLSNkZWZpbmUgVklERU9TSVpFXzI1Nl8xOTIJOQotI2RlZmluZSBWSURFT1NJWkVfMjg4XzIxNgkxMAotI2RlZmluZSBWSURFT1NJWkVfMzIwXzI0MAlWSURFT1NJWkVfU0lGCi0jZGVmaW5lIFZJREVPU0laRV8zNTJfMjg4CVZJREVPU0laRV9DSUYKLSNkZWZpbmUgVklERU9TSVpFXzg4XzcyCQkxMSAvKiBxdWFydGVyIENJRiAqLwotI2RlZmluZSBTVUJTQU1QTEVfNDIwCTAKLSNkZWZpbmUgU1VCU0FNUExFXzQyMgkxCi0jZGVmaW5lIFlVVk9SREVSX1lVWVYJMAotI2RlZmluZSBZVVZPUkRFUl9VWVZZCTEKLSNkZWZpbmUgTk9UX0NPTVBSRVNTRUQJMAotI2RlZmluZSBDT01QUkVTU0VECTEKLSNkZWZpbmUgTk9fREVDSU1BVElPTgkwCi0jZGVmaW5lIERFQ0lNQVRJT05fRU5BQgkxCi0jZGVmaW5lIEVPSQkJMHhmZgkvKiBFbmQgT2YgSW1hZ2UgKi8KLSNkZWZpbmUgRU9MCQkweGZkCS8qIEVuZCBPZiBMaW5lICovCi0jZGVmaW5lIEZSQU1FX0hFQURFUl9TSVpFCTY0Ci0KLS8qIEltYWdlIGdyYWIgbW9kZXMgKi8KLSNkZWZpbmUgQ1BJQV9HUkFCX1NJTkdMRQkwCi0jZGVmaW5lIENQSUFfR1JBQl9DT05USU5VT1VTCTEKLQotLyogQ29tcHJlc3Npb24gcGFyYW1ldGVycyAqLwotI2RlZmluZSBDUElBX0NPTVBSRVNTSU9OX05PTkUJMAotI2RlZmluZSBDUElBX0NPTVBSRVNTSU9OX0FVVE8JMQotI2RlZmluZSBDUElBX0NPTVBSRVNTSU9OX01BTlVBTAkyCi0jZGVmaW5lIENQSUFfQ09NUFJFU1NJT05fVEFSR0VUX1FVQUxJVFkgICAgICAgICAwCi0jZGVmaW5lIENQSUFfQ09NUFJFU1NJT05fVEFSR0VUX0ZSQU1FUkFURSAgICAgICAxCi0KLS8qIFJldHVybiBvZmZzZXRzIGZvciBHZXRDYW1lcmFTdGF0ZSAqLwotI2RlZmluZSBTWVNURU1TVEFURQkwCi0jZGVmaW5lIEdSQUJTVEFURQkxCi0jZGVmaW5lIFNUUkVBTVNUQVRFCTIKLSNkZWZpbmUgRkFUQUxFUlJPUgkzCi0jZGVmaW5lIENNREVSUk9SCTQKLSNkZWZpbmUgREVCVUdGTEFHUwk1Ci0jZGVmaW5lIFZQU1RBVFVTCTYKLSNkZWZpbmUgRVJST1JDT0RFCTcKLQotLyogU3lzdGVtU3RhdGUgKi8KLSNkZWZpbmUgVU5JTklUSUFMSVNFRF9TVEFURQkwCi0jZGVmaW5lIFBBU1NfVEhST1VHSF9TVEFURQkxCi0jZGVmaW5lIExPX1BPV0VSX1NUQVRFCQkyCi0jZGVmaW5lIEhJX1BPV0VSX1NUQVRFCQkzCi0jZGVmaW5lIFdBUk1fQk9PVF9TVEFURQkJNAotCi0vKiBHcmFiU3RhdGUgKi8KLSNkZWZpbmUgR1JBQl9JRExFCQkwCi0jZGVmaW5lIEdSQUJfQUNUSVZFCQkxCi0jZGVmaW5lIEdSQUJfRE9ORQkJMgotCi0vKiBTdHJlYW1TdGF0ZSAqLwotI2RlZmluZSBTVFJFQU1fTk9UX1JFQURZCTAKLSNkZWZpbmUgU1RSRUFNX1JFQURZCQkxCi0jZGVmaW5lIFNUUkVBTV9PUEVOCQkyCi0jZGVmaW5lIFNUUkVBTV9QQVVTRUQJCTMKLSNkZWZpbmUgU1RSRUFNX0ZJTklTSEVECQk0Ci0KLS8qIEZhdGFsIEVycm9yLCBDbWRFcnJvciwgYW5kIERlYnVnRmxhZ3MgKi8KLSNkZWZpbmUgQ1BJQV9GTEFHCSAgMQotI2RlZmluZSBTWVNURU1fRkxBRwkgIDIKLSNkZWZpbmUgSU5UX0NUUkxfRkxBRwkgIDQKLSNkZWZpbmUgUFJPQ0VTU19GTEFHCSAgOAotI2RlZmluZSBDT01fRkxBRwkgMTYKLSNkZWZpbmUgVlBfQ1RSTF9GTEFHCSAzMgotI2RlZmluZSBDQVBUVVJFX0ZMQUcJIDY0Ci0jZGVmaW5lIERFQlVHX0ZMQUcJMTI4Ci0KLS8qIFZQU3RhdHVzICovCi0jZGVmaW5lIFZQX1NUQVRFX09LCQkJMHgwMAotCi0jZGVmaW5lIFZQX1NUQVRFX0ZBSUxFRF9WSURFT0lOSVQJMHgwMQotI2RlZmluZSBWUF9TVEFURV9GQUlMRURfQUVDQUNCSU5JVAkweDAyCi0jZGVmaW5lIFZQX1NUQVRFX0FFQ19NQVgJCTB4MDQKLSNkZWZpbmUgVlBfU1RBVEVfQUNCX0JNQVgJCTB4MDgKLQotI2RlZmluZSBWUF9TVEFURV9BQ0JfUk1JTgkJMHgxMAotI2RlZmluZSBWUF9TVEFURV9BQ0JfR01JTgkJMHgyMAotI2RlZmluZSBWUF9TVEFURV9BQ0JfUk1BWAkJMHg0MAotI2RlZmluZSBWUF9TVEFURV9BQ0JfR01BWAkJMHg4MAotCi0vKiBkZWZhdWx0IChtaW5pbXVtKSBjb21wZW5zYXRpb24gdmFsdWVzICovCi0jZGVmaW5lIENPTVBfUkVEICAgICAgICAyMjAKLSNkZWZpbmUgQ09NUF9HUkVFTjEgICAgIDIxNAotI2RlZmluZSBDT01QX0dSRUVOMiAgICAgQ09NUF9HUkVFTjEKLSNkZWZpbmUgQ09NUF9CTFVFICAgICAgIDIzMAotCi0vKiBleHBvc3VyZSBzdGF0dXMgKi8KLSNkZWZpbmUgRVhQT1NVUkVfVkVSWV9MSUdIVCAwCi0jZGVmaW5lIEVYUE9TVVJFX0xJR0hUICAgICAgMQotI2RlZmluZSBFWFBPU1VSRV9OT1JNQUwgICAgIDIKLSNkZWZpbmUgRVhQT1NVUkVfREFSSyAgICAgICAzCi0jZGVmaW5lIEVYUE9TVVJFX1ZFUllfREFSSyAgNAotCi0vKiBFcnJvckNvZGUgKi8KLSNkZWZpbmUgRVJST1JfRkxJQ0tFUl9CRUxPV19NSU5fRVhQICAgICAweDAxIC8qZmxpY2tlciBleHBvc3VyZSBnb3QgYmVsb3cgbWluaW11bSBleHBvc3VyZSAqLwotI2RlZmluZSBBTE9HKGZtdCxhcmdzLi4uKSBwcmludGsoZm10LCAjI2FyZ3MpCi0jZGVmaW5lIExPRyhmbXQsYXJncy4uLikgQUxPRyhLRVJOX0lORk8gX19GSUxFX18gIjolcyglZCk6IiBmbXQsIF9fZnVuY19fICwgX19MSU5FX18gLCAjI2FyZ3MpCi0KLSNpZmRlZiBfQ1BJQV9ERUJVR18KLSNkZWZpbmUgQURCRyhmbXQsYXJncy4uLikgcHJpbnRrKGZtdCwgamlmZmllcywgIyNhcmdzKQotI2RlZmluZSBEQkcoZm10LGFyZ3MuLi4pIEFEQkcoS0VSTl9ERUJVRyBfX0ZJTEVfXyIgKCVsZCk6JXMoJWQpOiIgZm10LCBfX2Z1bmNfXywgX19MSU5FX18gLCAjI2FyZ3MpCi0jZWxzZQotI2RlZmluZSBEQkcoZm1uLGFyZ3MuLi4pIGRvIHt9IHdoaWxlKDApCi0jZW5kaWYKLQotI2RlZmluZSBERUJfQllURShwKVwKLSAgREJHKCIlMWQgJTFkICUxZCAlMWQgJTFkICUxZCAlMWQgJTFkIFxuIixcCi0gICAgICAocCkmMHg4MD8xOjAsIChwKSYweDQwPzE6MCwgKHApJjB4MjA/MTowLCAocCkmMHgxMD8xOjAsXAotCShwKSYweDA4PzE6MCwgKHApJjB4MDQ/MTowLCAocCkmMHgwMj8xOjAsIChwKSYweDAxPzE6MCk7Ci0KLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCi0KLSNlbmRpZiAvKiBjcGlhX2ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jcGlhL2NwaWFfcHAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jcGlhL2NwaWFfcHAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjU2MDRjMS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY3BpYS9jcGlhX3BwLmMKKysrIC9kZXYvbnVsbApAQCAtMSw4NjkgKzAsMCBAQAotLyoKLSAqIGNwaWFfcHAgQ1BpQSBQYXJhbGxlbCBQb3J0IGRyaXZlcgotICoKLSAqIFN1cHBvcnRzIENQaUEgYmFzZWQgcGFyYWxsZWwgcG9ydCBWaWRlbyBDYW1lcmEncy4KLSAqCi0gKiAoQykgQ29weXJpZ2h0IDE5OTkgQmFzIEh1aXNtYW4gPGJodWlzbUBjcy51dHdlbnRlLm5sPgotICogKEMpIENvcHlyaWdodCAxOTk5LTIwMDAgU2NvdHQgSi4gQmVydGluIDxzYmVydGluQHNlY3VyZW55bS5uZXQ+LAotICogKEMpIENvcHlyaWdodCAxOTk5LTIwMDAgUGV0ZXIgUHJlZ2xlciA8UGV0ZXJfUHJlZ2xlckBlbWFpbC5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLQotLyogZGVmaW5lIF9DUElBX0RFQlVHXyBmb3IgdmVyYm9zZSBkZWJ1ZyBvdXRwdXQgKHNlZSBjcGlhLmgpICovCi0vKiAjZGVmaW5lIF9DUElBX0RFQlVHXyAgMSAqLwotCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9wYXJwb3J0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLQotI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KLQotLyogI2RlZmluZSBfQ1BJQV9ERUJVR18JCWRlZmluZSBmb3IgdmVyYm9zZSBkZWJ1ZyBvdXRwdXQgKi8KLSNpbmNsdWRlICJjcGlhLmgiCi0KLXN0YXRpYyBpbnQgY3BpYV9wcF9vcGVuKHZvaWQgKnByaXZkYXRhKTsKLXN0YXRpYyBpbnQgY3BpYV9wcF9yZWdpc3RlckNhbGxiYWNrKHZvaWQgKnByaXZkYXRhLCB2b2lkICgqY2IpICh2b2lkICpjYmRhdGEpLAotCQkJCSAgICB2b2lkICpjYmRhdGEpOwotc3RhdGljIGludCBjcGlhX3BwX3RyYW5zZmVyQ21kKHZvaWQgKnByaXZkYXRhLCB1OCAqY29tbWFuZCwgdTggKmRhdGEpOwotc3RhdGljIGludCBjcGlhX3BwX3N0cmVhbVN0YXJ0KHZvaWQgKnByaXZkYXRhKTsKLXN0YXRpYyBpbnQgY3BpYV9wcF9zdHJlYW1TdG9wKHZvaWQgKnByaXZkYXRhKTsKLXN0YXRpYyBpbnQgY3BpYV9wcF9zdHJlYW1SZWFkKHZvaWQgKnByaXZkYXRhLCB1OCAqYnVmZmVyLCBpbnQgbm9ibG9jayk7Ci1zdGF0aWMgaW50IGNwaWFfcHBfY2xvc2Uodm9pZCAqcHJpdmRhdGEpOwotCi0KLSNkZWZpbmUgQUJPVVQgIlBhcmFsbGVsIHBvcnQgZHJpdmVyIGZvciBWaXNpb24gQ1BpQSBiYXNlZCBjYW1lcmFzIgotCi0jZGVmaW5lIFBBQ0tFVF9MRU5HVEggIDgKLQotLyogTWFnaWMgbnVtYmVycyBmb3IgZGVmaW5pbmcgcG9ydC1kZXZpY2UgbWFwcGluZ3MgKi8KLSNkZWZpbmUgUFBDUElBX1BBUlBPUlRfVU5TUEVDIC00Ci0jZGVmaW5lIFBQQ1BJQV9QQVJQT1JUX0FVVE8gLTMKLSNkZWZpbmUgUFBDUElBX1BBUlBPUlRfT0ZGIC0yCi0jZGVmaW5lIFBQQ1BJQV9QQVJQT1JUX05PTkUgLTEKLQotc3RhdGljIGludCBwYXJwb3J0X25yW1BBUlBPUlRfTUFYXSA9IHtbMCAuLi4gUEFSUE9SVF9NQVggLSAxXSA9IFBQQ1BJQV9QQVJQT1JUX1VOU1BFQ307Ci1zdGF0aWMgY2hhciAqcGFycG9ydFtQQVJQT1JUX01BWF0gPSB7TlVMTCx9OwotCi1NT0RVTEVfQVVUSE9SKCJCLiBIdWlzbWFuIDxiaHVpc21AY3MudXR3ZW50ZS5ubD4gJiBQZXRlciBQcmVnbGVyIDxQZXRlcl9QcmVnbGVyQGVtYWlsLmNvbT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiUGFyYWxsZWwgcG9ydCBkcml2ZXIgZm9yIFZpc2lvbiBDUGlBIGJhc2VkIGNhbWVyYXMiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotbW9kdWxlX3BhcmFtX2FycmF5KHBhcnBvcnQsIGNoYXJwLCBOVUxMLCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MocGFycG9ydCwgIidhdXRvJyBvciBhIGxpc3Qgb2YgcGFyYWxsZWwgcG9ydCBudW1iZXJzLiBKdXN0IGxpa2UgbHAuIik7Ci0KLXN0cnVjdCBwcF9jYW1fZW50cnkgewotCXN0cnVjdCBwYXJkZXZpY2UgKnBkZXY7Ci0Jc3RydWN0IHBhcnBvcnQgKnBvcnQ7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IGNiX3Rhc2s7Ci0Jdm9pZCAoKmNiX2Z1bmMpKHZvaWQgKmNiZGF0YSk7Ci0Jdm9pZCAqY2JfZGF0YTsKLQlpbnQgb3Blbl9jb3VudDsKLQl3YWl0X3F1ZXVlX2hlYWRfdCB3cV9zdHJlYW07Ci0JLyogaW1hZ2Ugc3RhdGUgZmxhZ3MgKi8KLQlpbnQgaW1hZ2VfcmVhZHk7CS8qIHdlIGdvdCBhbiBpbnRlcnJ1cHQgKi8KLQlpbnQgaW1hZ2VfY29tcGxldGU7CS8qIHdlIGhhdmUgc2VlbiA0IEVPSSAqLwotCi0JaW50IHN0cmVhbWluZzsgLyogd2UgYXJlIGluIHN0cmVhbWluZyBtb2RlICovCi0JaW50IHN0cmVhbV9pcnE7Ci19OwotCi1zdGF0aWMgc3RydWN0IGNwaWFfY2FtZXJhX29wcyBjcGlhX3BwX29wcyA9Ci17Ci0JY3BpYV9wcF9vcGVuLAotCWNwaWFfcHBfcmVnaXN0ZXJDYWxsYmFjaywKLQljcGlhX3BwX3RyYW5zZmVyQ21kLAotCWNwaWFfcHBfc3RyZWFtU3RhcnQsCi0JY3BpYV9wcF9zdHJlYW1TdG9wLAotCWNwaWFfcHBfc3RyZWFtUmVhZCwKLQljcGlhX3BwX2Nsb3NlLAotCTEsCi0JVEhJU19NT0RVTEUKLX07Ci0KLXN0YXRpYyBMSVNUX0hFQUQoY2FtX2xpc3QpOwotc3RhdGljIHNwaW5sb2NrX3QgY2FtX2xpc3RfbG9ja19wcDsKLQotLyogRklYTUUgKi8KLXN0YXRpYyB2b2lkIGNwaWFfcGFycG9ydF9lbmFibGVfaXJxKCBzdHJ1Y3QgcGFycG9ydCAqcG9ydCApIHsKLQlwYXJwb3J0X2VuYWJsZV9pcnEocG9ydCk7Ci0JbWRlbGF5KDEwKTsKLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkIGNwaWFfcGFycG9ydF9kaXNhYmxlX2lycSggc3RydWN0IHBhcnBvcnQgKnBvcnQgKSB7Ci0JcGFycG9ydF9kaXNhYmxlX2lycShwb3J0KTsKLQltZGVsYXkoMTApOwotCXJldHVybjsKLX0KLQotLyogU3BlY2lhbCBDUGlBIFBQQyBtb2RlczogVGhlc2UgYXJlIGludm9rZWQgYnkgdXNpbmcgdGhlIDEyODQgRXh0ZW5zaWJpbGl0eQotICogTGluayBGbGFnIGR1cmluZyBuZWdvdGlhdGlvbiAqLwotI2RlZmluZSBVUExPQURfRkxBRyAgMHgwOAotI2RlZmluZSBOSUJCTEVfVFJBTlNGRVIgMHgwMQotI2RlZmluZSBFQ1BfVFJBTlNGRVIgMHgwMwotCi0jZGVmaW5lIFBBUlBPUlRfQ0hVTktfU0laRQlQQUdFX1NJWkUKLQotCi1zdGF0aWMgdm9pZCBjcGlhX3BwX3J1bl9jYWxsYmFjayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jdm9pZCAoKmNiX2Z1bmMpKHZvaWQgKmNiZGF0YSk7Ci0Jdm9pZCAqY2JfZGF0YTsKLQlzdHJ1Y3QgcHBfY2FtX2VudHJ5ICpjYW07Ci0KLQljYW0gPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHBwX2NhbV9lbnRyeSwgY2JfdGFzayk7Ci0JY2JfZnVuYyA9IGNhbS0+Y2JfZnVuYzsKLQljYl9kYXRhID0gY2FtLT5jYl9kYXRhOwotCi0JY2JfZnVuYyhjYl9kYXRhKTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiAgQ1BpQS1zcGVjaWZpYyAgbG93LWxldmVsIHBhcnBvcnQgZnVuY3Rpb25zIGZvciBuaWJibGUgdXBsb2FkcwotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgQ1BpQSBub25zdGFuZGFyZCAiTmliYmxlIiBtb2RlIChubyBuRGF0YUF2YWlsIHNpZ25hbCBhZnRlciBlYWNoIGJ5dGUpLiAqLwotLyogVGhlIHN0YW5kYXJkIGtlcm5lbCBwYXJwb3J0X2llZWUxMjg0X3JlYWRfbmliYmxlKCkgZmFpbHMgd2l0aCB0aGUgQ1BpQS4uLiAqLwotCi1zdGF0aWMgc2l6ZV90IGNwaWFfcmVhZF9uaWJibGUgKHN0cnVjdCBwYXJwb3J0ICpwb3J0LAotCQkJIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGxlbiwKLQkJCSBpbnQgZmxhZ3MpCi17Ci0JLyogYWRhcHRlZCB2ZXJiYXRpbSwgd2l0aCBvbmUgY2hhbmdlLCBmcm9tCi0JICAgcGFycG9ydF9pZWVlMTI4NF9yZWFkX25pYmJsZSgpIGluIGRyaXZlcnMvcGFycG9ydC9pZWVlMTI4NC1vcHMuYyAqLwotCi0JdW5zaWduZWQgY2hhciAqYnVmID0gYnVmZmVyOwotCWludCBpOwotCXVuc2lnbmVkIGNoYXIgYnl0ZSA9IDA7Ci0KLQlsZW4gKj0gMjsgLyogaW4gbmliYmxlcyAqLwotCWZvciAoaT0wOyBpIDwgbGVuOyBpKyspIHsKLQkJdW5zaWduZWQgY2hhciBuaWJibGU7Ci0KLQkJLyogVGhlIENQaUEgZmlybXdhcmUgc3VwcHJlc3NlcyB0aGUgdXNlIG9mIG5EYXRhQXZhaWwgKG5GYXVsdCBMTykKLQkJICogYWZ0ZXIgZXZlcnkgc2Vjb25kIG5pYmJsZSB0byBzaWduYWwgdGhhdCBtb3JlCi0JCSAqIGRhdGEgaXMgYXZhaWxhYmxlLiAgKHRoZSB0b3RhbCBudW1iZXIgb2YgQnl0ZXMgdGhhdAotCQkgKiBzaG91bGQgYmUgc2VudCBpcyBrbm93bjsgaWYgdG9vIGZldyBhcmUgcmVjZWl2ZWQsIGFuIGVycm9yCi0JCSAqIHdpbGwgYmUgcmVjb3JkZWQgYWZ0ZXIgYSB0aW1lb3V0KS4KLQkJICogVGhpcyBpcyBpbmNvbXBhdGlibGUgd2l0aCBwYXJwb3J0X2llZWUxMjg0X3JlYWRfbmliYmxlKCksCi0JCSAqIHdoaWNoIGV4cGVjdHMgdG8gZmluZCBuRmF1bHQgTE8gYWZ0ZXIgZXZlcnkgc2Vjb25kIG5pYmJsZS4KLQkJICovCi0KLQkJLyogU29sdXRpb246IG1vZGlmeSBjcGlhX3JlYWRfbmliYmxlIHRvIG9ubHkgY2hlY2sgZm9yCi0JCSAqIG5EYXRhQXZhaWwgYmVmb3JlIHRoZSBmaXJzdCBuaWJibGUgaXMgc2VudC4KLQkJICovCi0KLQkJLyogRG9lcyB0aGUgZXJyb3IgbGluZSBpbmRpY2F0ZSBlbmQgb2YgZGF0YT8gKi8KLQkJaWYgKCgoaSAvKiYgMSovKSA9PSAwKSAmJgotCQkgICAgKHBhcnBvcnRfcmVhZF9zdGF0dXMocG9ydCkgJiBQQVJQT1JUX1NUQVRVU19FUlJPUikpIHsKLQkJCURCRygiJXM6IE5vIG1vcmUgbmliYmxlIGRhdGEgKCVkIGJ5dGVzKVxuIiwKLQkJCSAgICBwb3J0LT5uYW1lLCBpLzIpOwotCQkJZ290byBlbmRfb2ZfZGF0YTsKLQkJfQotCi0JCS8qIEV2ZW50IDc6IFNldCBuQXV0b0ZkIGxvdy4gKi8KLQkJcGFycG9ydF9mcm9iX2NvbnRyb2wgKHBvcnQsCi0JCQkJICAgICAgUEFSUE9SVF9DT05UUk9MX0FVVE9GRCwKLQkJCQkgICAgICBQQVJQT1JUX0NPTlRST0xfQVVUT0ZEKTsKLQotCQkvKiBFdmVudCA5OiBuQWNrIGdvZXMgbG93LiAqLwotCQlwb3J0LT5pZWVlMTI4NC5waGFzZSA9IElFRUUxMjg0X1BIX1JFVl9EQVRBOwotCQlpZiAocGFycG9ydF93YWl0X3BlcmlwaGVyYWwgKHBvcnQsCi0JCQkJCSAgICAgUEFSUE9SVF9TVEFUVVNfQUNLLCAwKSkgewotCQkJLyogVGltZW91dCAtLSBubyBtb3JlIGRhdGE/ICovCi0JCQkJIERCRygiJXM6IE5pYmJsZSB0aW1lb3V0IGF0IGV2ZW50IDkgKCVkIGJ5dGVzKVxuIiwKLQkJCQkgcG9ydC0+bmFtZSwgaS8yKTsKLQkJCXBhcnBvcnRfZnJvYl9jb250cm9sIChwb3J0LCBQQVJQT1JUX0NPTlRST0xfQVVUT0ZELCAwKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQotCQkvKiBSZWFkIGEgbmliYmxlLiAqLwotCQluaWJibGUgPSBwYXJwb3J0X3JlYWRfc3RhdHVzIChwb3J0KSA+PiAzOwotCQluaWJibGUgJj0gfjg7Ci0JCWlmICgobmliYmxlICYgMHgxMCkgPT0gMCkKLQkJCW5pYmJsZSB8PSA4OwotCQluaWJibGUgJj0gMHhmOwotCi0JCS8qIEV2ZW50IDEwOiBTZXQgbkF1dG9GZCBoaWdoLiAqLwotCQlwYXJwb3J0X2Zyb2JfY29udHJvbCAocG9ydCwgUEFSUE9SVF9DT05UUk9MX0FVVE9GRCwgMCk7Ci0KLQkJLyogRXZlbnQgMTE6IG5BY2sgZ29lcyBoaWdoLiAqLwotCQlpZiAocGFycG9ydF93YWl0X3BlcmlwaGVyYWwgKHBvcnQsCi0JCQkJCSAgICAgUEFSUE9SVF9TVEFUVVNfQUNLLAotCQkJCQkgICAgIFBBUlBPUlRfU1RBVFVTX0FDSykpIHsKLQkJCS8qIFRpbWVvdXQgLS0gbm8gbW9yZSBkYXRhPyAqLwotCQkJREJHKCIlczogTmliYmxlIHRpbWVvdXQgYXQgZXZlbnQgMTFcbiIsCi0JCQkJIHBvcnQtPm5hbWUpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlpZiAoaSAmIDEpIHsKLQkJCS8qIFNlY29uZCBuaWJibGUgKi8KLQkJCWJ5dGUgfD0gbmliYmxlIDw8IDQ7Ci0JCQkqYnVmKysgPSBieXRlOwotCQl9IGVsc2UKLQkJCWJ5dGUgPSBuaWJibGU7Ci0JfQotCi0JaWYgKGkgPT0gbGVuKSB7Ci0JCS8qIFJlYWQgdGhlIGxhc3QgbmliYmxlIHdpdGhvdXQgY2hlY2tpbmcgZGF0YSBhdmFpbC4gKi8KLQkJaWYgKHBhcnBvcnRfcmVhZF9zdGF0dXMgKHBvcnQpICYgUEFSUE9SVF9TVEFUVVNfRVJST1IpIHsKLQkJZW5kX29mX2RhdGE6Ci0JCQkvKiBHbyB0byByZXZlcnNlIGlkbGUgcGhhc2UuICovCi0JCQlwYXJwb3J0X2Zyb2JfY29udHJvbCAocG9ydCwKLQkJCQkJICAgICAgUEFSUE9SVF9DT05UUk9MX0FVVE9GRCwKLQkJCQkJICAgICAgUEFSUE9SVF9DT05UUk9MX0FVVE9GRCk7Ci0JCQlwb3J0LT5waHlzcG9ydC0+aWVlZTEyODQucGhhc2UgPSBJRUVFMTI4NF9QSF9SRVZfSURMRTsKLQkJfQotCQllbHNlCi0JCQlwb3J0LT5waHlzcG9ydC0+aWVlZTEyODQucGhhc2UgPSBJRUVFMTI4NF9QSF9IQlVTWV9EQVZBSUw7Ci0JfQotCi0JcmV0dXJuIGkvMjsKLX0KLQotLyogQ1BpQSBub25zdGFuZGFyZCAiTmliYmxlIFN0cmVhbSIgbW9kZSAoMiBuaWJibGVzIHBlciBjeWNsZSwgaW5zdGVhZCBvZiAxKQotICogKFNlZSBDUGlBIERhdGEgc2hlZXQgcC4gMzEpCi0gKgotICogIk5pYmJsZSBTdHJlYW0iIG1vZGUgdXNlZCBieSBDUGlBIGZvciB1cGxvYWRzIHRvIG5vbi1FQ1AgcG9ydHMgaXMgYQotICogbm9uc3RhbmRhcmQgdmFyaWFudCBvZiBuaWJibGUgbW9kZSB3aGljaCBhbGxvd3MgdGhlIHNhbWUgKG1lZGlvY3JlKQotICogZGF0YSBmbG93IG9mIDggYml0cyBwZXIgY3ljbGUgYXMgc29mdHdhcmUtZW5hYmxlZCBFQ1AgYnkgVFJJU1RBVEUtY2FwYWJsZQotICogcGFyYWxsZWwgcG9ydHMsIGJ1dCB3b3JrcyBhbHNvIGZvciAgbm9uLVRSSVNUQVRFLWNhcGFibGUgcG9ydHMuCi0gKiAoU3RhbmRhcmQgbmliYmxlIG1vZGUgb25seSBzZW5kIDQgYml0cyBwZXIgY3ljbGUpCi0gKgotICovCi0KLXN0YXRpYyBzaXplX3QgY3BpYV9yZWFkX25pYmJsZV9zdHJlYW0oc3RydWN0IHBhcnBvcnQgKnBvcnQsCi0JCQkgICAgICAgdm9pZCAqYnVmZmVyLCBzaXplX3QgbGVuLAotCQkJICAgICAgIGludCBmbGFncykKLXsKLQlpbnQgaTsKLQl1bnNpZ25lZCBjaGFyICpidWYgPSBidWZmZXI7Ci0JaW50IGVuZHNlZW4gPSAwOwotCi0JZm9yIChpPTA7IGkgPCBsZW47IGkrKykgewotCQl1bnNpZ25lZCBjaGFyIG5pYmJsZVsyXSwgYnl0ZSA9IDA7Ci0JCWludCBqOwotCi0JCS8qIEltYWdlIERhdGEgaXMgY29tcGxldGUgd2hlbiA0IGNvbnNlY3V0aXZlIEVPSSBieXRlcyAoMHhmZikgYXJlIHNlZW4gKi8KLQkJaWYgKGVuZHNlZW4gPiAzICkKLQkJCWJyZWFrOwotCi0JCS8qIEV2ZW50IDc6IFNldCBuQXV0b0ZkIGxvdy4gKi8KLQkJcGFycG9ydF9mcm9iX2NvbnRyb2wgKHBvcnQsCi0JCQkJICAgICAgUEFSUE9SVF9DT05UUk9MX0FVVE9GRCwKLQkJCQkgICAgICBQQVJQT1JUX0NPTlRST0xfQVVUT0ZEKTsKLQotCQkvKiBFdmVudCA5OiBuQWNrIGdvZXMgbG93LiAqLwotCQlwb3J0LT5pZWVlMTI4NC5waGFzZSA9IElFRUUxMjg0X1BIX1JFVl9EQVRBOwotCQlpZiAocGFycG9ydF93YWl0X3BlcmlwaGVyYWwgKHBvcnQsCi0JCQkJCSAgICAgUEFSUE9SVF9TVEFUVVNfQUNLLCAwKSkgewotCQkJLyogVGltZW91dCAtLSBubyBtb3JlIGRhdGE/ICovCi0JCQkJIERCRygiJXM6IE5pYmJsZSB0aW1lb3V0IGF0IGV2ZW50IDkgKCVkIGJ5dGVzKVxuIiwKLQkJCQkgcG9ydC0+bmFtZSwgaS8yKTsKLQkJCXBhcnBvcnRfZnJvYl9jb250cm9sIChwb3J0LCBQQVJQT1JUX0NPTlRST0xfQVVUT0ZELCAwKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJLyogUmVhZCBsb3dlciBuaWJibGUgKi8KLQkJbmliYmxlWzBdID0gcGFycG9ydF9yZWFkX3N0YXR1cyAocG9ydCkgPj4zOwotCi0JCS8qIEV2ZW50IDEwOiBTZXQgbkF1dG9GZCBoaWdoLiAqLwotCQlwYXJwb3J0X2Zyb2JfY29udHJvbCAocG9ydCwgUEFSUE9SVF9DT05UUk9MX0FVVE9GRCwgMCk7Ci0KLQkJLyogRXZlbnQgMTE6IG5BY2sgZ29lcyBoaWdoLiAqLwotCQlpZiAocGFycG9ydF93YWl0X3BlcmlwaGVyYWwgKHBvcnQsCi0JCQkJCSAgICAgUEFSUE9SVF9TVEFUVVNfQUNLLAotCQkJCQkgICAgIFBBUlBPUlRfU1RBVFVTX0FDSykpIHsKLQkJCS8qIFRpbWVvdXQgLS0gbm8gbW9yZSBkYXRhPyAqLwotCQkJREJHKCIlczogTmliYmxlIHRpbWVvdXQgYXQgZXZlbnQgMTFcbiIsCi0JCQkJIHBvcnQtPm5hbWUpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQkvKiBSZWFkIHVwcGVyIG5pYmJsZSAqLwotCQluaWJibGVbMV0gPSBwYXJwb3J0X3JlYWRfc3RhdHVzIChwb3J0KSA+PjM7Ci0KLQkJLyogcmVhc3NlbWJsZSB0aGUgYnl0ZSAqLwotCQlmb3IgKGogPSAwOyBqIDwgMiA7IGorKyApIHsKLQkJCW5pYmJsZVtqXSAmPSB+ODsKLQkJCWlmICgobmliYmxlW2pdICYgMHgxMCkgPT0gMCkKLQkJCQluaWJibGVbal0gfD0gODsKLQkJCW5pYmJsZVtqXSAmPSAweGY7Ci0JCX0KLQkJYnl0ZSA9IChuaWJibGVbMF0gfChuaWJibGVbMV0gPDwgNCkpOwotCQkqYnVmKysgPSBieXRlOwotCi0JCWlmKGJ5dGUgPT0gRU9JKQotCQkgIGVuZHNlZW4rKzsKLQkJZWxzZQotCQkgIGVuZHNlZW4gPSAwOwotCX0KLQlyZXR1cm4gaTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiAgRW5kVHJhbnNmZXJNb2RlCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyB2b2lkIEVuZFRyYW5zZmVyTW9kZShzdHJ1Y3QgcHBfY2FtX2VudHJ5ICpjYW0pCi17Ci0JcGFycG9ydF9uZWdvdGlhdGUoY2FtLT5wb3J0LCBJRUVFMTI4NF9NT0RFX0NPTVBBVCk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogIEZvcndhcmRTZXR1cAotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50IEZvcndhcmRTZXR1cChzdHJ1Y3QgcHBfY2FtX2VudHJ5ICpjYW0pCi17Ci0JaW50IHJldHJ5OwotCi0JLyogVGhlIENQaUEgdXNlcyBFQ1AgcHJvdG9jb2wgZm9yIERvd25sb2FkcyBmcm9tIHRoZSBIb3N0IHRvIHRoZSBjYW1lcmEuCi0JICogVGhpcyB3aWxsIGJlIHNvZnR3YXJlLWVtdWxhdGVkIGlmIEVDUCBoYXJkd2FyZSBpcyBub3QgcHJlc2VudAotCSAqLwotCi0JLyogdGhlIHVzdWFsIGNhbWVyYSBtYXhpbXVtIHJlc3BvbnNlIHRpbWUgaXMgMTBtcywgYnV0IGFmdGVyIHJlY2VpdmluZwotCSAqIHNvbWUgY29tbWFuZHMsIGl0IG5lZWRzIHVwIHRvIDQwbXMuIChEYXRhIFNoZWV0IHAuIDMyKSovCi0KLQlmb3IocmV0cnkgPSAwOyByZXRyeSA8IDQ7ICsrcmV0cnkpIHsKLQkJaWYoIXBhcnBvcnRfbmVnb3RpYXRlKGNhbS0+cG9ydCwgSUVFRTEyODRfTU9ERV9FQ1ApKSB7Ci0JCQlicmVhazsKLQkJfQotCQltZGVsYXkoMTApOwotCX0KLQlpZihyZXRyeSA9PSA0KSB7Ci0JCURCRygiVW5hYmxlIHRvIG5lZ290aWF0ZSBJRUVFMTI4NCBFQ1AgRG93bmxvYWQgbW9kZVxuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqICBSZXZlcnNlU2V0dXAKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludCBSZXZlcnNlU2V0dXAoc3RydWN0IHBwX2NhbV9lbnRyeSAqY2FtLCBpbnQgZXh0ZW5zaWJpbGl0eSkKLXsKLQlpbnQgcmV0cnk7Ci0JaW50IHVwbG9hZF9tb2RlLCBtb2RlID0gSUVFRTEyODRfTU9ERV9FQ1A7Ci0JaW50IHRyYW5zZmVyX21vZGUgPSBFQ1BfVFJBTlNGRVI7Ci0KLQlpZiAoIShjYW0tPnBvcnQtPm1vZGVzICYgUEFSUE9SVF9NT0RFX0VDUCkgJiYKLQkgICAgICEoY2FtLT5wb3J0LT5tb2RlcyAmIFBBUlBPUlRfTU9ERV9UUklTVEFURSkpIHsKLQkJbW9kZSA9IElFRUUxMjg0X01PREVfTklCQkxFOwotCQl0cmFuc2Zlcl9tb2RlID0gTklCQkxFX1RSQU5TRkVSOwotCX0KLQotCXVwbG9hZF9tb2RlID0gbW9kZTsKLQlpZihleHRlbnNpYmlsaXR5KSBtb2RlID0gVVBMT0FEX0ZMQUd8dHJhbnNmZXJfbW9kZXxJRUVFMTI4NF9FWFRfTElOSzsKLQotCS8qIHRoZSB1c3VhbCBjYW1lcmEgbWF4aW11bSByZXNwb25zZSB0aW1lIGlzIDEwbXMsIGJ1dCBhZnRlcgotCSAqIHJlY2VpdmluZyBzb21lIGNvbW1hbmRzLCBpdCBuZWVkcyB1cCB0byA0MG1zLiAqLwotCi0JZm9yKHJldHJ5ID0gMDsgcmV0cnkgPCA0OyArK3JldHJ5KSB7Ci0JCWlmKCFwYXJwb3J0X25lZ290aWF0ZShjYW0tPnBvcnQsIG1vZGUpKSB7Ci0JCQlicmVhazsKLQkJfQotCQltZGVsYXkoMTApOwotCX0KLQlpZihyZXRyeSA9PSA0KSB7Ci0JCWlmKGV4dGVuc2liaWxpdHkpCi0JCQlEQkcoIlVuYWJsZSB0byBuZWdvdGlhdGUgdXBsb2FkIGV4dGVuc2liaWxpdHkgbW9kZVxuIik7Ci0JCWVsc2UKLQkJCURCRygiVW5hYmxlIHRvIG5lZ290aWF0ZSB1cGxvYWQgbW9kZVxuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0JaWYoZXh0ZW5zaWJpbGl0eSkgY2FtLT5wb3J0LT5pZWVlMTI4NC5tb2RlID0gdXBsb2FkX21vZGU7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogIFdyaXRlUGFja2V0Ci0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQgV3JpdGVQYWNrZXQoc3RydWN0IHBwX2NhbV9lbnRyeSAqY2FtLCBjb25zdCB1OCAqcGFja2V0LCBzaXplX3Qgc2l6ZSkKLXsKLQlpbnQgcmV0dmFsPTA7Ci0JaW50IHNpemVfd3JpdHRlbjsKLQotCWlmIChwYWNrZXQgPT0gTlVMTCkgewotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JaWYgKEZvcndhcmRTZXR1cChjYW0pKSB7Ci0JCURCRygiV3JpdGUgZmFpbGVkIGluIHNldHVwXG4iKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCXNpemVfd3JpdHRlbiA9IHBhcnBvcnRfd3JpdGUoY2FtLT5wb3J0LCBwYWNrZXQsIHNpemUpOwotCWlmKHNpemVfd3JpdHRlbiAhPSBzaXplKSB7Ci0JCURCRygiV3JpdGUgZmFpbGVkLCB3cm90ZSAlZC8lZFxuIiwgc2l6ZV93cml0dGVuLCBzaXplKTsKLQkJcmV0dmFsID0gLUVJTzsKLQl9Ci0JRW5kVHJhbnNmZXJNb2RlKGNhbSk7Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiAgUmVhZFBhY2tldAotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50IFJlYWRQYWNrZXQoc3RydWN0IHBwX2NhbV9lbnRyeSAqY2FtLCB1OCAqcGFja2V0LCBzaXplX3Qgc2l6ZSkKLXsKLQlpbnQgcmV0dmFsPTA7Ci0KLQlpZiAocGFja2V0ID09IE5VTEwpIHsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCWlmIChSZXZlcnNlU2V0dXAoY2FtLCAwKSkgewotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQkvKiBzdXBwb3J0IGZvciBDUGlBIHZhcmlhbnQgbmliYmxlIHJlYWRzICovCi0JaWYoY2FtLT5wb3J0LT5pZWVlMTI4NC5tb2RlID09IElFRUUxMjg0X01PREVfTklCQkxFKSB7Ci0JCWlmKGNwaWFfcmVhZF9uaWJibGUoY2FtLT5wb3J0LCBwYWNrZXQsIHNpemUsIDApICE9IHNpemUpCi0JCQlyZXR2YWwgPSAtRUlPOwotCX0gZWxzZSB7Ci0JCWlmKHBhcnBvcnRfcmVhZChjYW0tPnBvcnQsIHBhY2tldCwgc2l6ZSkgIT0gc2l6ZSkKLQkJCXJldHZhbCA9IC1FSU87Ci0JfQotCUVuZFRyYW5zZmVyTW9kZShjYW0pOwotCXJldHVybiByZXR2YWw7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogIGNwaWFfcHBfc3RyZWFtU3RhcnQKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludCBjcGlhX3BwX3N0cmVhbVN0YXJ0KHZvaWQgKnByaXZkYXRhKQotewotCXN0cnVjdCBwcF9jYW1fZW50cnkgKmNhbSA9IHByaXZkYXRhOwotCURCRygiXG4iKTsKLQljYW0tPnN0cmVhbWluZz0xOwotCWNhbS0+aW1hZ2VfcmVhZHk9MDsKLQkvL2lmIChSZXZlcnNlU2V0dXAoY2FtLDEpKSByZXR1cm4gLUVJTzsKLQlpZihjYW0tPnN0cmVhbV9pcnEpIGNwaWFfcGFycG9ydF9lbmFibGVfaXJxKGNhbS0+cG9ydCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogIGNwaWFfcHBfc3RyZWFtU3RvcAotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50IGNwaWFfcHBfc3RyZWFtU3RvcCh2b2lkICpwcml2ZGF0YSkKLXsKLQlzdHJ1Y3QgcHBfY2FtX2VudHJ5ICpjYW0gPSBwcml2ZGF0YTsKLQotCURCRygiXG4iKTsKLQljYW0tPnN0cmVhbWluZz0wOwotCWNwaWFfcGFycG9ydF9kaXNhYmxlX2lycShjYW0tPnBvcnQpOwotCS8vRW5kVHJhbnNmZXJNb2RlKGNhbSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiAgY3BpYV9wcF9zdHJlYW1SZWFkCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQgY3BpYV9wcF9yZWFkKHN0cnVjdCBwYXJwb3J0ICpwb3J0LCB1OCAqYnVmZmVyLCBpbnQgbGVuKQotewotCWludCBieXRlc19yZWFkOwotCi0JLyogc3VwcG9ydCBmb3IgQ1BpQSB2YXJpYW50ICJuaWJibGUgc3RyZWFtIiByZWFkcyAqLwotCWlmKHBvcnQtPmllZWUxMjg0Lm1vZGUgPT0gSUVFRTEyODRfTU9ERV9OSUJCTEUpCi0JCWJ5dGVzX3JlYWQgPSBjcGlhX3JlYWRfbmliYmxlX3N0cmVhbShwb3J0LGJ1ZmZlcixsZW4sMCk7Ci0JZWxzZSB7Ci0JCWludCBuZXdfYnl0ZXM7Ci0JCWZvcihieXRlc19yZWFkPTA7IGJ5dGVzX3JlYWQ8bGVuOyBieXRlc19yZWFkICs9IG5ld19ieXRlcykgewotCQkJbmV3X2J5dGVzID0gcGFycG9ydF9yZWFkKHBvcnQsIGJ1ZmZlcitieXRlc19yZWFkLAotCQkJCQkJIGxlbi1ieXRlc19yZWFkKTsKLQkJCWlmKG5ld19ieXRlcyA8IDApIGJyZWFrOwotCQl9Ci0JfQotCXJldHVybiBieXRlc19yZWFkOwotfQotCi1zdGF0aWMgaW50IGNwaWFfcHBfc3RyZWFtUmVhZCh2b2lkICpwcml2ZGF0YSwgdTggKmJ1ZmZlciwgaW50IG5vYmxvY2spCi17Ci0Jc3RydWN0IHBwX2NhbV9lbnRyeSAqY2FtID0gcHJpdmRhdGE7Ci0JaW50IHJlYWRfYnl0ZXMgPSAwOwotCWludCBpLCBlbmRzZWVuLCBibG9ja19zaXplLCBuZXdfYnl0ZXM7Ci0KLQlpZihjYW0gPT0gTlVMTCkgewotCQlEQkcoIkludGVybmFsIGRyaXZlciBlcnJvcjogY2FtIGlzIE5VTExcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JaWYoYnVmZmVyID09IE5VTEwpIHsKLQkJREJHKCJJbnRlcm5hbCBkcml2ZXIgZXJyb3I6IGJ1ZmZlciBpcyBOVUxMXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCS8vaWYoY2FtLT5zdHJlYW1pbmcpIERCRygiJWQgLyAlZFxuIiwgY2FtLT5pbWFnZV9yZWFkeSwgbm9ibG9jayk7Ci0JaWYoIGNhbS0+c3RyZWFtX2lycSApIHsKLQkJREJHKCIlZFxuIiwgY2FtLT5pbWFnZV9yZWFkeSk7Ci0JCWNhbS0+aW1hZ2VfcmVhZHktLTsKLQl9Ci0JY2FtLT5pbWFnZV9jb21wbGV0ZT0wOwotCWlmICgwLypjYW0tPnN0cmVhbWluZyovKSB7Ci0JCWlmKCFjYW0tPmltYWdlX3JlYWR5KSB7Ci0JCQlpZihub2Jsb2NrKSByZXR1cm4gLUVXT1VMREJMT0NLOwotCQkJaW50ZXJydXB0aWJsZV9zbGVlcF9vbigmY2FtLT53cV9zdHJlYW0pOwotCQkJaWYoIHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpICkgcmV0dXJuIC1FSU5UUjsKLQkJCURCRygiJWRcbiIsIGNhbS0+aW1hZ2VfcmVhZHkpOwotCQl9Ci0JfSBlbHNlIHsKLQkJaWYgKFJldmVyc2VTZXR1cChjYW0sIDEpKSB7Ci0JCQlEQkcoInVuYWJsZSB0byBSZXZlcnNlU2V0dXBcbiIpOwotCQkJcmV0dXJuIC1FSU87Ci0JCX0KLQl9Ci0JZW5kc2VlbiA9IDA7Ci0JYmxvY2tfc2l6ZSA9IFBBUlBPUlRfQ0hVTktfU0laRTsKLQl3aGlsZSggIWNhbS0+aW1hZ2VfY29tcGxldGUgKSB7Ci0JCWNvbmRfcmVzY2hlZCgpOwotCi0JCW5ld19ieXRlcyA9IGNwaWFfcHBfcmVhZChjYW0tPnBvcnQsIGJ1ZmZlciwgYmxvY2tfc2l6ZSApOwotCQlpZiggbmV3X2J5dGVzIDw9IDAgKSB7Ci0JCQlicmVhazsKLQkJfQotCQlpPS0xOwotCQl3aGlsZSgrK2k8bmV3X2J5dGVzICYmIGVuZHNlZW48NCkgewotCQkJaWYoKmJ1ZmZlcj09RU9JKSB7Ci0JCQkJZW5kc2VlbisrOwotCQkJfSBlbHNlIHsKLQkJCQllbmRzZWVuPTA7Ci0JCQl9Ci0JCQlidWZmZXIrKzsKLQkJfQotCQlyZWFkX2J5dGVzICs9IGk7Ci0JCWlmKCBlbmRzZWVuPT00ICkgewotCQkJY2FtLT5pbWFnZV9jb21wbGV0ZT0xOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYoIENQSUFfTUFYX0lNQUdFX1NJWkUtcmVhZF9ieXRlcyA8PSBQQVJQT1JUX0NIVU5LX1NJWkUgKSB7Ci0JCQlibG9ja19zaXplPUNQSUFfTUFYX0lNQUdFX1NJWkUtcmVhZF9ieXRlczsKLQkJfQotCX0KLQlFbmRUcmFuc2Zlck1vZGUoY2FtKTsKLQlyZXR1cm4gY2FtLT5pbWFnZV9jb21wbGV0ZSA/IHJlYWRfYnl0ZXMgOiAtRUlPOwotfQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiAgY3BpYV9wcF90cmFuc2ZlckNtZAotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50IGNwaWFfcHBfdHJhbnNmZXJDbWQodm9pZCAqcHJpdmRhdGEsIHU4ICpjb21tYW5kLCB1OCAqZGF0YSkKLXsKLQlpbnQgZXJyOwotCWludCByZXR2YWw9MDsKLQlpbnQgZGF0YWJ5dGVzOwotCXN0cnVjdCBwcF9jYW1fZW50cnkgKmNhbSA9IHByaXZkYXRhOwotCi0JaWYoY2FtID09IE5VTEwpIHsKLQkJREJHKCJJbnRlcm5hbCBkcml2ZXIgZXJyb3I6IGNhbSBpcyBOVUxMXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCWlmKGNvbW1hbmQgPT0gTlVMTCkgewotCQlEQkcoIkludGVybmFsIGRyaXZlciBlcnJvcjogY29tbWFuZCBpcyBOVUxMXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCWRhdGFieXRlcyA9ICgoKGludCljb21tYW5kWzddKTw8OCkgfCBjb21tYW5kWzZdOwotCWlmICgoZXJyID0gV3JpdGVQYWNrZXQoY2FtLCBjb21tYW5kLCBQQUNLRVRfTEVOR1RIKSkgPCAwKSB7Ci0JCURCRygiRXJyb3Igd3JpdGluZyBjb21tYW5kXG4iKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0JaWYoY29tbWFuZFswXSA9PSBEQVRBX0lOKSB7Ci0JCXU4IGJ1ZmZlcls4XTsKLQkJaWYoZGF0YSA9PSBOVUxMKSB7Ci0JCQlEQkcoIkludGVybmFsIGRyaXZlciBlcnJvcjogZGF0YSBpcyBOVUxMXG4iKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCWlmKChlcnIgPSBSZWFkUGFja2V0KGNhbSwgYnVmZmVyLCA4KSkgPCAwKSB7Ci0JCQlEQkcoIkVycm9yIHJlYWRpbmcgY29tbWFuZCByZXN1bHRcbiIpOwotCQkgICAgICAgcmV0dXJuIGVycjsKLQkJfQotCQltZW1jcHkoZGF0YSwgYnVmZmVyLCBkYXRhYnl0ZXMpOwotCX0gZWxzZSBpZihjb21tYW5kWzBdID09IERBVEFfT1VUKSB7Ci0JCWlmKGRhdGFieXRlcyA+IDApIHsKLQkJCWlmKGRhdGEgPT0gTlVMTCkgewotCQkJCURCRygiSW50ZXJuYWwgZHJpdmVyIGVycm9yOiBkYXRhIGlzIE5VTExcbiIpOwotCQkJCXJldHZhbCA9IC1FSU5WQUw7Ci0JCQl9IGVsc2UgewotCQkJCWlmKChlcnI9V3JpdGVQYWNrZXQoY2FtLCBkYXRhLCBkYXRhYnl0ZXMpKSA8IDApewotCQkJCQlEQkcoIkVycm9yIHdyaXRpbmcgY29tbWFuZCBkYXRhXG4iKTsKLQkJCQkJcmV0dXJuIGVycjsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9IGVsc2UgewotCQlEQkcoIlVuZXhwZWN0ZWQgZmlyc3QgYnl0ZSBvZiBjb21tYW5kOiAleFxuIiwgY29tbWFuZFswXSk7Ci0JCXJldHZhbCA9IC1FSU5WQUw7Ci0JfQotCXJldHVybiByZXR2YWw7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogIGNwaWFfcHBfb3BlbgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50IGNwaWFfcHBfb3Blbih2b2lkICpwcml2ZGF0YSkKLXsKLQlzdHJ1Y3QgcHBfY2FtX2VudHJ5ICpjYW0gPSAoc3RydWN0IHBwX2NhbV9lbnRyeSAqKXByaXZkYXRhOwotCi0JaWYgKGNhbSA9PSBOVUxMKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmKGNhbS0+b3Blbl9jb3VudCA9PSAwKSB7Ci0JCWlmIChwYXJwb3J0X2NsYWltKGNhbS0+cGRldikpIHsKLQkJCURCRygiZmFpbGVkIHRvIGNsYWltIHRoZSBwb3J0XG4iKTsKLQkJCXJldHVybiAtRUJVU1k7Ci0JCX0KLQkJcGFycG9ydF9uZWdvdGlhdGUoY2FtLT5wb3J0LCBJRUVFMTI4NF9NT0RFX0NPTVBBVCk7Ci0JCXBhcnBvcnRfZGF0YV9mb3J3YXJkKGNhbS0+cG9ydCk7Ci0JCXBhcnBvcnRfd3JpdGVfY29udHJvbChjYW0tPnBvcnQsIFBBUlBPUlRfQ09OVFJPTF9TRUxFQ1QpOwotCQl1ZGVsYXkoNTApOwotCQlwYXJwb3J0X3dyaXRlX2NvbnRyb2woY2FtLT5wb3J0LAotCQkJCSAgICAgIFBBUlBPUlRfQ09OVFJPTF9TRUxFQ1QKLQkJCQkgICAgICB8IFBBUlBPUlRfQ09OVFJPTF9JTklUKTsKLQl9Ci0KLQkrK2NhbS0+b3Blbl9jb3VudDsKLQotCXJldHVybiAwOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqICBjcGlhX3BwX3JlZ2lzdGVyQ2FsbGJhY2sKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludCBjcGlhX3BwX3JlZ2lzdGVyQ2FsbGJhY2sodm9pZCAqcHJpdmRhdGEsIHZvaWQgKCpjYikodm9pZCAqY2JkYXRhKSwgdm9pZCAqY2JkYXRhKQotewotCXN0cnVjdCBwcF9jYW1fZW50cnkgKmNhbSA9IHByaXZkYXRhOwotCWludCByZXR2YWwgPSAwOwotCi0JaWYoY2FtLT5wb3J0LT5pcnEgIT0gUEFSUE9SVF9JUlFfTk9ORSkgewotCQljYW0tPmNiX2Z1bmMgPSBjYjsKLQkJY2FtLT5jYl9kYXRhID0gY2JkYXRhOwotCQlJTklUX1dPUksoJmNhbS0+Y2JfdGFzaywgY3BpYV9wcF9ydW5fY2FsbGJhY2spOwotCX0gZWxzZSB7Ci0JCXJldHZhbCA9IC0xOwotCX0KLQlyZXR1cm4gcmV0dmFsOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqICBjcGlhX3BwX2Nsb3NlCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQgY3BpYV9wcF9jbG9zZSh2b2lkICpwcml2ZGF0YSkKLXsKLQlzdHJ1Y3QgcHBfY2FtX2VudHJ5ICpjYW0gPSBwcml2ZGF0YTsKLQlpZiAoLS1jYW0tPm9wZW5fY291bnQgPT0gMCkgewotCQlwYXJwb3J0X3JlbGVhc2UoY2FtLT5wZGV2KTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogIGNwaWFfcHBfcmVnaXN0ZXIKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludCBjcGlhX3BwX3JlZ2lzdGVyKHN0cnVjdCBwYXJwb3J0ICpwb3J0KQotewotCXN0cnVjdCBwYXJkZXZpY2UgKnBkZXYgPSBOVUxMOwotCXN0cnVjdCBwcF9jYW1fZW50cnkgKmNhbTsKLQlzdHJ1Y3QgY2FtX2RhdGEgKmNwaWE7Ci0KLQlpZiAoIShwb3J0LT5tb2RlcyAmIFBBUlBPUlRfTU9ERV9QQ1NQUCkpIHsKLQkJTE9HKCJwb3J0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgQ1BpQSBkcml2ZXJcbiIpOwotCQlyZXR1cm4gLUVOWElPOwotCX0KLQotCWNhbSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwcF9jYW1fZW50cnkpLCBHRlBfS0VSTkVMKTsKLQlpZiAoY2FtID09IE5VTEwpIHsKLQkJTE9HKCJmYWlsZWQgdG8gYWxsb2NhdGUgY2FtZXJhIHN0cnVjdHVyZVxuIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCXBkZXYgPSBwYXJwb3J0X3JlZ2lzdGVyX2RldmljZShwb3J0LCAiY3BpYV9wcCIsIE5VTEwsIE5VTEwsCi0JCQkJICAgICAgIE5VTEwsIDAsIGNhbSk7Ci0KLQlpZiAoIXBkZXYpIHsKLQkJTE9HKCJmYWlsZWQgdG8gcGFycG9ydF9yZWdpc3Rlcl9kZXZpY2VcbiIpOwotCQlrZnJlZShjYW0pOwotCQlyZXR1cm4gLUVOWElPOwotCX0KLQotCWNhbS0+cGRldiA9IHBkZXY7Ci0JY2FtLT5wb3J0ID0gcG9ydDsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjYW0tPndxX3N0cmVhbSk7Ci0KLQljYW0tPnN0cmVhbWluZyA9IDA7Ci0JY2FtLT5zdHJlYW1faXJxID0gMDsKLQotCWlmKChjcGlhID0gY3BpYV9yZWdpc3Rlcl9jYW1lcmEoJmNwaWFfcHBfb3BzLCBjYW0pKSA9PSBOVUxMKSB7Ci0JCUxPRygiZmFpbGVkIHRvIGNwaWFfcmVnaXN0ZXJfY2FtZXJhXG4iKTsKLQkJcGFycG9ydF91bnJlZ2lzdGVyX2RldmljZShwZGV2KTsKLQkJa2ZyZWUoY2FtKTsKLQkJcmV0dXJuIC1FTlhJTzsKLQl9Ci0Jc3Bpbl9sb2NrKCAmY2FtX2xpc3RfbG9ja19wcCApOwotCWxpc3RfYWRkKCAmY3BpYS0+Y2FtX2RhdGFfbGlzdCwgJmNhbV9saXN0ICk7Ci0Jc3Bpbl91bmxvY2soICZjYW1fbGlzdF9sb2NrX3BwICk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgY3BpYV9wcF9kZXRhY2ggKHN0cnVjdCBwYXJwb3J0ICpwb3J0KQotewotCXN0cnVjdCBsaXN0X2hlYWQgKnRtcDsKLQlzdHJ1Y3QgY2FtX2RhdGEgKmNwaWEgPSBOVUxMOwotCXN0cnVjdCBwcF9jYW1fZW50cnkgKmNhbTsKLQotCXNwaW5fbG9jayggJmNhbV9saXN0X2xvY2tfcHAgKTsKLQlsaXN0X2Zvcl9lYWNoICh0bXAsICZjYW1fbGlzdCkgewotCQljcGlhID0gbGlzdF9lbnRyeSh0bXAsIHN0cnVjdCBjYW1fZGF0YSwgY2FtX2RhdGFfbGlzdCk7Ci0JCWNhbSA9IChzdHJ1Y3QgcHBfY2FtX2VudHJ5ICopIGNwaWEtPmxvd2xldmVsX2RhdGE7Ci0JCWlmIChjYW0gJiYgY2FtLT5wb3J0LT5udW1iZXIgPT0gcG9ydC0+bnVtYmVyKSB7Ci0JCQlsaXN0X2RlbCgmY3BpYS0+Y2FtX2RhdGFfbGlzdCk7Ci0JCQlicmVhazsKLQkJfQotCQljcGlhID0gTlVMTDsKLQl9Ci0Jc3Bpbl91bmxvY2soICZjYW1fbGlzdF9sb2NrX3BwICk7Ci0KLQlpZiAoIWNwaWEpIHsKLQkJREJHKCJjcGlhX3BwX2RldGFjaCBmYWlsZWQgdG8gZmluZCBjYW1fZGF0YSBpbiBjYW1fbGlzdFxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQljYW0gPSAoc3RydWN0IHBwX2NhbV9lbnRyeSAqKSBjcGlhLT5sb3dsZXZlbF9kYXRhOwotCWNwaWFfdW5yZWdpc3Rlcl9jYW1lcmEoY3BpYSk7Ci0JaWYoY2FtLT5vcGVuX2NvdW50ID4gMCkKLQkJY3BpYV9wcF9jbG9zZShjYW0pOwotCXBhcnBvcnRfdW5yZWdpc3Rlcl9kZXZpY2UoY2FtLT5wZGV2KTsKLQljcGlhLT5sb3dsZXZlbF9kYXRhID0gTlVMTDsKLQlrZnJlZShjYW0pOwotfQotCi1zdGF0aWMgdm9pZCBjcGlhX3BwX2F0dGFjaCAoc3RydWN0IHBhcnBvcnQgKnBvcnQpCi17Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlzd2l0Y2ggKHBhcnBvcnRfbnJbMF0pCi0JewotCWNhc2UgUFBDUElBX1BBUlBPUlRfVU5TUEVDOgotCWNhc2UgUFBDUElBX1BBUlBPUlRfQVVUTzoKLQkJaWYgKHBvcnQtPnByb2JlX2luZm9bMF0uY2xhc3MgIT0gUEFSUE9SVF9DTEFTU19NRURJQSB8fAotCQkgICAgcG9ydC0+cHJvYmVfaW5mb1swXS5jbWRzZXQgPT0gTlVMTCB8fAotCQkgICAgc3RybmNtcChwb3J0LT5wcm9iZV9pbmZvWzBdLmNtZHNldCwgIkNQSUFfMSIsIDYpICE9IDApCi0JCQlyZXR1cm47Ci0KLQkJY3BpYV9wcF9yZWdpc3Rlcihwb3J0KTsKLQotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCWZvciAoaSA9IDA7IGkgPCBQQVJQT1JUX01BWDsgKytpKSB7Ci0JCQlpZiAocG9ydC0+bnVtYmVyID09IHBhcnBvcnRfbnJbaV0pIHsKLQkJCQljcGlhX3BwX3JlZ2lzdGVyKHBvcnQpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCWJyZWFrOwotCX0KLX0KLQotc3RhdGljIHN0cnVjdCBwYXJwb3J0X2RyaXZlciBjcGlhX3BwX2RyaXZlciA9IHsKLQkubmFtZSA9ICJjcGlhX3BwIiwKLQkuYXR0YWNoID0gY3BpYV9wcF9hdHRhY2gsCi0JLmRldGFjaCA9IGNwaWFfcHBfZGV0YWNoLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgY3BpYV9wcF9pbml0KHZvaWQpCi17Ci0JcHJpbnRrKEtFUk5fSU5GTyAiJXMgdiVkLiVkLiVkXG4iLEFCT1VULAotCSAgICAgICBDUElBX1BQX01BSl9WRVIsQ1BJQV9QUF9NSU5fVkVSLENQSUFfUFBfUEFUQ0hfVkVSKTsKLQotCWlmKHBhcnBvcnRfbnJbMF0gPT0gUFBDUElBX1BBUlBPUlRfT0ZGKSB7Ci0JCXByaW50aygiICBkaXNhYmxlZFxuIik7Ci0JCXJldHVybiAwOwotCX0KLQotCXNwaW5fbG9ja19pbml0KCAmY2FtX2xpc3RfbG9ja19wcCApOwotCi0JaWYgKHBhcnBvcnRfcmVnaXN0ZXJfZHJpdmVyICgmY3BpYV9wcF9kcml2ZXIpKSB7Ci0JCUxPRyAoInVuYWJsZSB0byByZWdpc3RlciB3aXRoIHBhcnBvcnRcbiIpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGNwaWFfaW5pdCh2b2lkKQotewotCWlmIChwYXJwb3J0WzBdKSB7Ci0JCS8qIFRoZSB1c2VyIGdhdmUgc29tZSBwYXJhbWV0ZXJzLiAgTGV0J3Mgc2VlIHdoYXQgdGhleSB3ZXJlLiAqLwotCQlpZiAoIXN0cm5jbXAocGFycG9ydFswXSwgImF1dG8iLCA0KSkgewotCQkJcGFycG9ydF9uclswXSA9IFBQQ1BJQV9QQVJQT1JUX0FVVE87Ci0JCX0gZWxzZSB7Ci0JCQlpbnQgbjsKLQkJCWZvciAobiA9IDA7IG4gPCBQQVJQT1JUX01BWCAmJiBwYXJwb3J0W25dOyBuKyspIHsKLQkJCQlpZiAoIXN0cm5jbXAocGFycG9ydFtuXSwgIm5vbmUiLCA0KSkgewotCQkJCQlwYXJwb3J0X25yW25dID0gUFBDUElBX1BBUlBPUlRfTk9ORTsKLQkJCQl9IGVsc2UgewotCQkJCQljaGFyICplcDsKLQkJCQkJdW5zaWduZWQgbG9uZyByID0gc2ltcGxlX3N0cnRvdWwocGFycG9ydFtuXSwgJmVwLCAwKTsKLQkJCQkJaWYgKGVwICE9IHBhcnBvcnRbbl0pIHsKLQkJCQkJCXBhcnBvcnRfbnJbbl0gPSByOwotCQkJCQl9IGVsc2UgewotCQkJCQkJTE9HKCJiYWQgcG9ydCBzcGVjaWZpZXIgYCVzJ1xuIiwgcGFycG9ydFtuXSk7Ci0JCQkJCQlyZXR1cm4gLUVOT0RFVjsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQlyZXR1cm4gY3BpYV9wcF9pbml0KCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBjcGlhX2NsZWFudXAodm9pZCkKLXsKLQlwYXJwb3J0X3VucmVnaXN0ZXJfZHJpdmVyKCZjcGlhX3BwX2RyaXZlcik7Ci0JcmV0dXJuOwotfQotCi1tb2R1bGVfaW5pdChjcGlhX2luaXQpOwotbW9kdWxlX2V4aXQoY3BpYV9jbGVhbnVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jcGlhL2NwaWFfdXNiLmMgYi9kcml2ZXJzL3N0YWdpbmcvY3BpYS9jcGlhX3VzYi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OGQxOTNmLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jcGlhL2NwaWFfdXNiLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2NDAgKzAsMCBAQAotLyoKLSAqIGNwaWFfdXNiIENQaUEgVVNCIGRyaXZlcgotICoKLSAqIFN1cHBvcnRzIENQaUEgYmFzZWQgcGFyYWxsZWwgcG9ydCBWaWRlbyBDYW1lcmEncy4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTkgICAgICAgIEpvY2hlbiBTY2hhcnJsYWNoIDxKb2NoZW4uU2NoYXJybGFjaEBzY2h3YWJlbi5kZT4KLSAqIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCAgSm9oYW5uZXMgRXJkZmVsdCA8am9oYW5uZXNAZXJkZmVsdC5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLQotLyogZGVmaW5lIF9DUElBX0RFQlVHXyBmb3IgdmVyYm9zZSBkZWJ1ZyBvdXRwdXQgKHNlZSBjcGlhLmgpICovCi0vKiAjZGVmaW5lIF9DUElBX0RFQlVHXyAgMSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KLSNpbmNsdWRlIDxsaW51eC91c2IuaD4KLQotI2luY2x1ZGUgImNwaWEuaCIKLQotI2RlZmluZSBVU0JfUkVRX0NQSUFfR1JBQl9GUkFNRQkJCTB4QzEKLSNkZWZpbmUgVVNCX1JFUV9DUElBX1VQTE9BRF9GUkFNRQkJMHhDMgotI2RlZmluZSAgV0FJVF9GT1JfTkVYVF9GUkFNRQkJCTAKLSNkZWZpbmUgIEZPUkNFX0ZSQU1FX1VQTE9BRAkJCTEKLQotI2RlZmluZSBGUkFNRVNfUEVSX0RFU0MJCTEwCi0jZGVmaW5lIEZSQU1FX1NJWkVfUEVSX0RFU0MJOTYwCS8qIFNob3VsZG4ndCBiZSBoYXJkY29kZWQgKi8KLSNkZWZpbmUgQ1BJQV9OVU1TQlVGCQkyCi0jZGVmaW5lIFNUUkVBTV9CVUZfU0laRQkJKFBBR0VfU0laRSAqIDQpCi0jZGVmaW5lIFNDUkFUQ0hfQlVGX1NJWkUJKFNUUkVBTV9CVUZfU0laRSAqIDIpCi0KLXN0cnVjdCBjcGlhX3NidWYgewotCWNoYXIgKmRhdGE7Ci0Jc3RydWN0IHVyYiAqdXJiOwotfTsKLQotI2RlZmluZSBGUkFNRUJVRl9MRU4gKENQSUFfTUFYX0ZSQU1FX1NJWkUrMTAwKQotZW51bSBmcmFtZWJ1Zl9zdGF0dXMgewotCUZSQU1FX0VNUFRZLAotCUZSQU1FX1JFQURJTkcsCi0JRlJBTUVfUkVBRFksCi0JRlJBTUVfRVJST1IsCi19OwotCi1zdHJ1Y3QgZnJhbWVidWYgewotCWludCBsZW5ndGg7Ci0JZW51bSBmcmFtZWJ1Zl9zdGF0dXMgc3RhdHVzOwotCXU4IGRhdGFbRlJBTUVCVUZfTEVOXTsKLQlzdHJ1Y3QgZnJhbWVidWYgKm5leHQ7Ci19OwotCi1zdHJ1Y3QgdXNiX2NwaWEgewotCS8qIERldmljZSBzdHJ1Y3R1cmUgKi8KLQlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2OwotCi0JdW5zaWduZWQgY2hhciBpZmFjZTsKLQl3YWl0X3F1ZXVlX2hlYWRfdCB3cV9zdHJlYW07Ci0KLQlpbnQgY3Vyc2J1ZjsJCS8qIEN1cnJlbnQgcmVjZWl2aW5nIHNidWYgKi8KLQlzdHJ1Y3QgY3BpYV9zYnVmIHNidWZbQ1BJQV9OVU1TQlVGXTsJCS8qIERvdWJsZSBidWZmZXJpbmcgKi8KLQotCWludCBzdHJlYW1pbmc7Ci0JaW50IG9wZW47Ci0JaW50IHByZXNlbnQ7Ci0Jc3RydWN0IGZyYW1lYnVmICpidWZmZXJzWzNdOwotCXN0cnVjdCBmcmFtZWJ1ZiAqY3VyYnVmZiwgKndvcmtidWZmOwotfTsKLQotc3RhdGljIGludCBjcGlhX3VzYl9vcGVuKHZvaWQgKnByaXZkYXRhKTsKLXN0YXRpYyBpbnQgY3BpYV91c2JfcmVnaXN0ZXJDYWxsYmFjayh2b2lkICpwcml2ZGF0YSwgdm9pZCAoKmNiKSAodm9pZCAqY2JkYXRhKSwKLQkJCQkgICAgIHZvaWQgKmNiZGF0YSk7Ci1zdGF0aWMgaW50IGNwaWFfdXNiX3RyYW5zZmVyQ21kKHZvaWQgKnByaXZkYXRhLCB1OCAqY29tbWFuZCwgdTggKmRhdGEpOwotc3RhdGljIGludCBjcGlhX3VzYl9zdHJlYW1TdGFydCh2b2lkICpwcml2ZGF0YSk7Ci1zdGF0aWMgaW50IGNwaWFfdXNiX3N0cmVhbVN0b3Aodm9pZCAqcHJpdmRhdGEpOwotc3RhdGljIGludCBjcGlhX3VzYl9zdHJlYW1SZWFkKHZvaWQgKnByaXZkYXRhLCB1OCAqZnJhbWUsIGludCBub2Jsb2NrKTsKLXN0YXRpYyBpbnQgY3BpYV91c2JfY2xvc2Uodm9pZCAqcHJpdmRhdGEpOwotCi0jZGVmaW5lIEFCT1VUICJVU0IgZHJpdmVyIGZvciBWaXNpb24gQ1BpQSBiYXNlZCBjYW1lcmFzIgotCi1zdGF0aWMgc3RydWN0IGNwaWFfY2FtZXJhX29wcyBjcGlhX3VzYl9vcHMgPSB7Ci0JY3BpYV91c2Jfb3BlbiwKLQljcGlhX3VzYl9yZWdpc3RlckNhbGxiYWNrLAotCWNwaWFfdXNiX3RyYW5zZmVyQ21kLAotCWNwaWFfdXNiX3N0cmVhbVN0YXJ0LAotCWNwaWFfdXNiX3N0cmVhbVN0b3AsCi0JY3BpYV91c2Jfc3RyZWFtUmVhZCwKLQljcGlhX3VzYl9jbG9zZSwKLQkwLAotCVRISVNfTU9EVUxFCi19OwotCi1zdGF0aWMgTElTVF9IRUFEKGNhbV9saXN0KTsKLXN0YXRpYyBzcGlubG9ja190IGNhbV9saXN0X2xvY2tfdXNiOwotCi1zdGF0aWMgdm9pZCBjcGlhX3VzYl9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpCi17Ci0JaW50IGk7Ci0JY2hhciAqY2RhdGE7Ci0Jc3RydWN0IHVzYl9jcGlhICp1Y3BpYTsKLQotCWlmICghdXJiIHx8ICF1cmItPmNvbnRleHQpCi0JCXJldHVybjsKLQotCXVjcGlhID0gKHN0cnVjdCB1c2JfY3BpYSAqKSB1cmItPmNvbnRleHQ7Ci0KLQlpZiAoIXVjcGlhLT5kZXYgfHwgIXVjcGlhLT5zdHJlYW1pbmcgfHwgIXVjcGlhLT5wcmVzZW50IHx8ICF1Y3BpYS0+b3BlbikKLQkJcmV0dXJuOwotCi0JaWYgKHVjcGlhLT53b3JrYnVmZi0+c3RhdHVzID09IEZSQU1FX0VNUFRZKSB7Ci0JCXVjcGlhLT53b3JrYnVmZi0+c3RhdHVzID0gRlJBTUVfUkVBRElORzsKLQkJdWNwaWEtPndvcmtidWZmLT5sZW5ndGggPSAwOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCB1cmItPm51bWJlcl9vZl9wYWNrZXRzOyBpKyspIHsKLQkJaW50IG4gPSB1cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGg7Ci0JCWludCBzdCA9IHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzOwotCi0JCWNkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXIgKyB1cmItPmlzb19mcmFtZV9kZXNjW2ldLm9mZnNldDsKLQotCQlpZiAoc3QpCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiY3BpYSBkYXRhIGVycm9yOiBbJWRdIGxlbj0lZCwgc3RhdHVzPSVYXG4iLCBpLCBuLCBzdCk7Ci0KLQkJaWYgKEZSQU1FQlVGX0xFTiA8IHVjcGlhLT53b3JrYnVmZi0+bGVuZ3RoICsgbikgewotCQkJcHJpbnRrKEtFUk5fREVCVUcgImNwaWE6IHNjcmF0Y2ggYnVmIG92ZXJmbG93IXNjcl9sZW46ICVkLCBuOiAlZFxuIiwgdWNwaWEtPndvcmtidWZmLT5sZW5ndGgsIG4pOwotCQkJcmV0dXJuOwotCQl9Ci0KLQkJaWYgKG4pIHsKLQkJCWlmICgodWNwaWEtPndvcmtidWZmLT5sZW5ndGggPiAwKSB8fAotCQkJICAgICgweDE5ID09IGNkYXRhWzBdICYmIDB4NjggPT0gY2RhdGFbMV0pKSB7Ci0JCQkJbWVtY3B5KHVjcGlhLT53b3JrYnVmZi0+ZGF0YSArIHVjcGlhLT53b3JrYnVmZi0+bGVuZ3RoLCBjZGF0YSwgbik7Ci0JCQkJdWNwaWEtPndvcmtidWZmLT5sZW5ndGggKz0gbjsKLQkJCX0gZWxzZQotCQkJCURCRygiSWdub3JpbmcgcGFja2V0IVxuIik7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAodWNwaWEtPndvcmtidWZmLT5sZW5ndGggPiA0ICYmCi0JCQkgICAgMHhmZiA9PSB1Y3BpYS0+d29ya2J1ZmYtPmRhdGFbdWNwaWEtPndvcmtidWZmLT5sZW5ndGgtMV0gJiYKLQkJCSAgICAweGZmID09IHVjcGlhLT53b3JrYnVmZi0+ZGF0YVt1Y3BpYS0+d29ya2J1ZmYtPmxlbmd0aC0yXSAmJgotCQkJICAgIDB4ZmYgPT0gdWNwaWEtPndvcmtidWZmLT5kYXRhW3VjcGlhLT53b3JrYnVmZi0+bGVuZ3RoLTNdICYmCi0JCQkgICAgMHhmZiA9PSB1Y3BpYS0+d29ya2J1ZmYtPmRhdGFbdWNwaWEtPndvcmtidWZmLT5sZW5ndGgtNF0pIHsKLQkJCQl1Y3BpYS0+d29ya2J1ZmYtPnN0YXR1cyA9IEZSQU1FX1JFQURZOwotCQkJCXVjcGlhLT5jdXJidWZmID0gdWNwaWEtPndvcmtidWZmOwotCQkJCXVjcGlhLT53b3JrYnVmZiA9IHVjcGlhLT53b3JrYnVmZi0+bmV4dDsKLQkJCQl1Y3BpYS0+d29ya2J1ZmYtPnN0YXR1cyA9IEZSQU1FX0VNUFRZOwotCQkJCXVjcGlhLT53b3JrYnVmZi0+bGVuZ3RoID0gMDsKLQotCQkJCWlmICh3YWl0cXVldWVfYWN0aXZlKCZ1Y3BpYS0+d3Ffc3RyZWFtKSkKLQkJCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ1Y3BpYS0+d3Ffc3RyZWFtKTsKLQkJCX0KLQkJfQotCX0KLQotCS8qIHJlc3VibWl0ICovCi0JdXJiLT5kZXYgPSB1Y3BpYS0+ZGV2OwotCWlmICgoaSA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQykpICE9IDApCi0JCXByaW50ayhLRVJOX0VSUiAiJXM6IHVzYl9zdWJtaXRfdXJiIHJldCAlZFxuIiwgX19mdW5jX18sICBpKTsKLX0KLQotc3RhdGljIGludCBjcGlhX3VzYl9vcGVuKHZvaWQgKnByaXZkYXRhKQotewotCXN0cnVjdCB1c2JfY3BpYSAqdWNwaWEgPSAoc3RydWN0IHVzYl9jcGlhICopIHByaXZkYXRhOwotCXN0cnVjdCB1cmIgKnVyYjsKLQlpbnQgcmV0LCByZXR2YWwgPSAwLCBmeCwgZXJyOwotCi0JaWYgKCF1Y3BpYSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQl1Y3BpYS0+c2J1ZlswXS5kYXRhID0ga21hbGxvYyhGUkFNRVNfUEVSX0RFU0MgKiBGUkFNRV9TSVpFX1BFUl9ERVNDLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXVjcGlhLT5zYnVmWzBdLmRhdGEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JdWNwaWEtPnNidWZbMV0uZGF0YSA9IGttYWxsb2MoRlJBTUVTX1BFUl9ERVNDICogRlJBTUVfU0laRV9QRVJfREVTQywgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF1Y3BpYS0+c2J1ZlsxXS5kYXRhKSB7Ci0JCXJldHZhbCA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyb3JfMDsKLQl9Ci0KLQlyZXQgPSB1c2Jfc2V0X2ludGVyZmFjZSh1Y3BpYS0+ZGV2LCB1Y3BpYS0+aWZhY2UsIDMpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY3BpYV91c2Jfb3BlbjogdXNiX3NldF9pbnRlcmZhY2UgZXJyb3IgKHJldCA9ICVkKVxuIiwgcmV0KTsKLQkJcmV0dmFsID0gLUVCVVNZOwotCQlnb3RvIGVycm9yXzE7Ci0JfQotCi0JdWNwaWEtPmJ1ZmZlcnNbMF0tPnN0YXR1cyA9IEZSQU1FX0VNUFRZOwotCXVjcGlhLT5idWZmZXJzWzBdLT5sZW5ndGggPSAwOwotCXVjcGlhLT5idWZmZXJzWzFdLT5zdGF0dXMgPSBGUkFNRV9FTVBUWTsKLQl1Y3BpYS0+YnVmZmVyc1sxXS0+bGVuZ3RoID0gMDsKLQl1Y3BpYS0+YnVmZmVyc1syXS0+c3RhdHVzID0gRlJBTUVfRU1QVFk7Ci0JdWNwaWEtPmJ1ZmZlcnNbMl0tPmxlbmd0aCA9IDA7Ci0JdWNwaWEtPmN1cmJ1ZmYgPSB1Y3BpYS0+YnVmZmVyc1swXTsKLQl1Y3BpYS0+d29ya2J1ZmYgPSB1Y3BpYS0+YnVmZmVyc1sxXTsKLQotCS8qIFdlIGRvdWJsZSBidWZmZXIgdGhlIElzbyBsaXN0cywgYW5kIGFsc28ga25vdyB0aGUgcG9sbGluZwotCSAqIGludGVydmFsIGlzIGV2ZXJ5IGZyYW1lICgxID09ICgxIDw8IChiSW50ZXJ2YWwgLTEpKSkuCi0JICovCi0JdXJiID0gdXNiX2FsbG9jX3VyYihGUkFNRVNfUEVSX0RFU0MsIEdGUF9LRVJORUwpOwotCWlmICghdXJiKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY3BpYV9pbml0X2lzb2M6IHVzYl9hbGxvY191cmIgMFxuIik7Ci0JCXJldHZhbCA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyb3JfMTsKLQl9Ci0KLQl1Y3BpYS0+c2J1ZlswXS51cmIgPSB1cmI7Ci0JdXJiLT5kZXYgPSB1Y3BpYS0+ZGV2OwotCXVyYi0+Y29udGV4dCA9IHVjcGlhOwotCXVyYi0+cGlwZSA9IHVzYl9yY3Zpc29jcGlwZSh1Y3BpYS0+ZGV2LCAxKTsKLQl1cmItPnRyYW5zZmVyX2ZsYWdzID0gVVJCX0lTT19BU0FQOwotCXVyYi0+dHJhbnNmZXJfYnVmZmVyID0gdWNwaWEtPnNidWZbMF0uZGF0YTsKLQl1cmItPmNvbXBsZXRlID0gY3BpYV91c2JfY29tcGxldGU7Ci0JdXJiLT5udW1iZXJfb2ZfcGFja2V0cyA9IEZSQU1FU19QRVJfREVTQzsKLQl1cmItPmludGVydmFsID0gMTsKLQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBGUkFNRV9TSVpFX1BFUl9ERVNDICogRlJBTUVTX1BFUl9ERVNDOwotCWZvciAoZnggPSAwOyBmeCA8IEZSQU1FU19QRVJfREVTQzsgZngrKykgewotCQl1cmItPmlzb19mcmFtZV9kZXNjW2Z4XS5vZmZzZXQgPSBGUkFNRV9TSVpFX1BFUl9ERVNDICogZng7Ci0JCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbZnhdLmxlbmd0aCA9IEZSQU1FX1NJWkVfUEVSX0RFU0M7Ci0JfQotCi0JdXJiID0gdXNiX2FsbG9jX3VyYihGUkFNRVNfUEVSX0RFU0MsIEdGUF9LRVJORUwpOwotCWlmICghdXJiKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY3BpYV9pbml0X2lzb2M6IHVzYl9hbGxvY191cmIgMVxuIik7Ci0JCXJldHZhbCA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyb3JfdXJiMDsKLQl9Ci0KLQl1Y3BpYS0+c2J1ZlsxXS51cmIgPSB1cmI7Ci0JdXJiLT5kZXYgPSB1Y3BpYS0+ZGV2OwotCXVyYi0+Y29udGV4dCA9IHVjcGlhOwotCXVyYi0+cGlwZSA9IHVzYl9yY3Zpc29jcGlwZSh1Y3BpYS0+ZGV2LCAxKTsKLQl1cmItPnRyYW5zZmVyX2ZsYWdzID0gVVJCX0lTT19BU0FQOwotCXVyYi0+dHJhbnNmZXJfYnVmZmVyID0gdWNwaWEtPnNidWZbMV0uZGF0YTsKLQl1cmItPmNvbXBsZXRlID0gY3BpYV91c2JfY29tcGxldGU7Ci0JdXJiLT5udW1iZXJfb2ZfcGFja2V0cyA9IEZSQU1FU19QRVJfREVTQzsKLQl1cmItPmludGVydmFsID0gMTsKLQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBGUkFNRV9TSVpFX1BFUl9ERVNDICogRlJBTUVTX1BFUl9ERVNDOwotCWZvciAoZnggPSAwOyBmeCA8IEZSQU1FU19QRVJfREVTQzsgZngrKykgewotCQl1cmItPmlzb19mcmFtZV9kZXNjW2Z4XS5vZmZzZXQgPSBGUkFNRV9TSVpFX1BFUl9ERVNDICogZng7Ci0JCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbZnhdLmxlbmd0aCA9IEZSQU1FX1NJWkVfUEVSX0RFU0M7Ci0JfQotCi0JLyogcXVldWUgdGhlIElTTyB1cmJzLCBhbmQgcmVzdWJtaXQgaW4gdGhlIGNvbXBsZXRpb24gaGFuZGxlciAqLwotCWVyciA9IHVzYl9zdWJtaXRfdXJiKHVjcGlhLT5zYnVmWzBdLnVyYiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgImNwaWFfaW5pdF9pc29jOiB1c2Jfc3VibWl0X3VyYiAwIHJldCAlZFxuIiwKLQkJCWVycik7Ci0JCWdvdG8gZXJyb3JfdXJiMTsKLQl9Ci0JZXJyID0gdXNiX3N1Ym1pdF91cmIodWNwaWEtPnNidWZbMV0udXJiLCBHRlBfS0VSTkVMKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY3BpYV9pbml0X2lzb2M6IHVzYl9zdWJtaXRfdXJiIDEgcmV0ICVkXG4iLAotCQkJZXJyKTsKLQkJZ290byBlcnJvcl91cmIxOwotCX0KLQotCXVjcGlhLT5zdHJlYW1pbmcgPSAxOwotCXVjcGlhLT5vcGVuID0gMTsKLQotCXJldHVybiAwOwotCi1lcnJvcl91cmIxOgkJLyogZnJlZSB1cmIgMSAqLwotCXVzYl9mcmVlX3VyYih1Y3BpYS0+c2J1ZlsxXS51cmIpOwotCXVjcGlhLT5zYnVmWzFdLnVyYiA9IE5VTEw7Ci1lcnJvcl91cmIwOgkJLyogZnJlZSB1cmIgMCAqLwotCXVzYl9mcmVlX3VyYih1Y3BpYS0+c2J1ZlswXS51cmIpOwotCXVjcGlhLT5zYnVmWzBdLnVyYiA9IE5VTEw7Ci1lcnJvcl8xOgotCWtmcmVlICh1Y3BpYS0+c2J1ZlsxXS5kYXRhKTsKLQl1Y3BpYS0+c2J1ZlsxXS5kYXRhID0gTlVMTDsKLWVycm9yXzA6Ci0Ja2ZyZWUgKHVjcGlhLT5zYnVmWzBdLmRhdGEpOwotCXVjcGlhLT5zYnVmWzBdLmRhdGEgPSBOVUxMOwotCi0JcmV0dXJuIHJldHZhbDsKLX0KLQotLy8KLS8vIGNvbnZlbmllbmNlIGZ1bmN0aW9ucwotLy8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiAgV3JpdGVQYWNrZXQKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludCBXcml0ZVBhY2tldChzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgY29uc3QgdTggKnBhY2tldCwgdTggKmJ1Ziwgc2l6ZV90IHNpemUpCi17Ci0JaWYgKCFwYWNrZXQpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0dXJuIHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2Jfc25kY3RybHBpcGUodWRldiwgMCksCi0JCQkgcGFja2V0WzFdICsgKHBhY2tldFswXSA8PCA4KSwKLQkJCSBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAotCQkJIHBhY2tldFsyXSArIChwYWNrZXRbM10gPDwgOCksCi0JCQkgcGFja2V0WzRdICsgKHBhY2tldFs1XSA8PCA4KSwgYnVmLCBzaXplLCAxMDAwKTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiAgUmVhZFBhY2tldAotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50IFJlYWRQYWNrZXQoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIHU4ICpwYWNrZXQsIHU4ICpidWYsIHNpemVfdCBzaXplKQotewotCWlmICghcGFja2V0IHx8IHNpemUgPD0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXR1cm4gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9yY3ZjdHJscGlwZSh1ZGV2LCAwKSwKLQkJCSBwYWNrZXRbMV0gKyAocGFja2V0WzBdIDw8IDgpLAotCQkJIFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAotCQkJIHBhY2tldFsyXSArIChwYWNrZXRbM10gPDwgOCksCi0JCQkgcGFja2V0WzRdICsgKHBhY2tldFs1XSA8PCA4KSwgYnVmLCBzaXplLCAxMDAwKTsKLX0KLQotc3RhdGljIGludCBjcGlhX3VzYl90cmFuc2ZlckNtZCh2b2lkICpwcml2ZGF0YSwgdTggKmNvbW1hbmQsIHU4ICpkYXRhKQotewotCWludCBlcnIgPSAwOwotCWludCBkYXRhYnl0ZXM7Ci0Jc3RydWN0IHVzYl9jcGlhICp1Y3BpYSA9IChzdHJ1Y3QgdXNiX2NwaWEgKilwcml2ZGF0YTsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IHVjcGlhLT5kZXY7Ci0KLQlpZiAoIXVkZXYpIHsKLQkJREJHKCJJbnRlcm5hbCBkcml2ZXIgZXJyb3I6IHVkZXYgaXMgTlVMTFxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmICghY29tbWFuZCkgewotCQlEQkcoIkludGVybmFsIGRyaXZlciBlcnJvcjogY29tbWFuZCBpcyBOVUxMXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JZGF0YWJ5dGVzID0gKCgoaW50KWNvbW1hbmRbN10pPDw4KSB8IGNvbW1hbmRbNl07Ci0KLQlpZiAoY29tbWFuZFswXSA9PSBEQVRBX0lOKSB7Ci0JCXU4IGJ1ZmZlcls4XTsKLQotCQlpZiAoIWRhdGEpIHsKLQkJCURCRygiSW50ZXJuYWwgZHJpdmVyIGVycm9yOiBkYXRhIGlzIE5VTExcbiIpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQllcnIgPSBSZWFkUGFja2V0KHVkZXYsIGNvbW1hbmQsIGJ1ZmZlciwgOCk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQotCQltZW1jcHkoZGF0YSwgYnVmZmVyLCBkYXRhYnl0ZXMpOwotCX0gZWxzZSBpZihjb21tYW5kWzBdID09IERBVEFfT1VUKQotCQlXcml0ZVBhY2tldCh1ZGV2LCBjb21tYW5kLCBkYXRhLCBkYXRhYnl0ZXMpOwotCWVsc2UgewotCQlEQkcoIlVuZXhwZWN0ZWQgZmlyc3QgYnl0ZSBvZiBjb21tYW5kOiAleFxuIiwgY29tbWFuZFswXSk7Ci0JCWVyciA9IC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgY3BpYV91c2JfcmVnaXN0ZXJDYWxsYmFjayh2b2lkICpwcml2ZGF0YSwgdm9pZCAoKmNiKSAodm9pZCAqY2JkYXRhKSwKLQl2b2lkICpjYmRhdGEpCi17Ci0JcmV0dXJuIC1FTk9ERVY7Ci19Ci0KLXN0YXRpYyBpbnQgY3BpYV91c2Jfc3RyZWFtU3RhcnQodm9pZCAqcHJpdmRhdGEpCi17Ci0JcmV0dXJuIC1FTk9ERVY7Ci19Ci0KLXN0YXRpYyBpbnQgY3BpYV91c2Jfc3RyZWFtU3RvcCh2b2lkICpwcml2ZGF0YSkKLXsKLQlyZXR1cm4gLUVOT0RFVjsKLX0KLQotc3RhdGljIGludCBjcGlhX3VzYl9zdHJlYW1SZWFkKHZvaWQgKnByaXZkYXRhLCB1OCAqZnJhbWUsIGludCBub2Jsb2NrKQotewotCXN0cnVjdCB1c2JfY3BpYSAqdWNwaWEgPSAoc3RydWN0IHVzYl9jcGlhICopIHByaXZkYXRhOwotCXN0cnVjdCBmcmFtZWJ1ZiAqbXlidWZmOwotCi0JaWYgKCF1Y3BpYSB8fCAhdWNwaWEtPnByZXNlbnQpCi0JCXJldHVybiAtMTsKLQotCWlmICh1Y3BpYS0+Y3VyYnVmZi0+c3RhdHVzICE9IEZSQU1FX1JFQURZKQotCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uKCZ1Y3BpYS0+d3Ffc3RyZWFtKTsKLQllbHNlCi0JCURCRygiRnJhbWUgYWxyZWFkeSB3YWl0aW5nIVxuIik7Ci0KLQlteWJ1ZmYgPSB1Y3BpYS0+Y3VyYnVmZjsKLQotCWlmICghbXlidWZmKQotCQlyZXR1cm4gLTE7Ci0KLQlpZiAobXlidWZmLT5zdGF0dXMgIT0gRlJBTUVfUkVBRFkgfHwgbXlidWZmLT5sZW5ndGggPCA0KSB7Ci0JCURCRygiU29tZXRoaW5nIHdlbnQgd3JvbmchXG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCW1lbWNweShmcmFtZSwgbXlidWZmLT5kYXRhLCBteWJ1ZmYtPmxlbmd0aCk7Ci0JbXlidWZmLT5zdGF0dXMgPSBGUkFNRV9FTVBUWTsKLQotLyogICBEQkcoInJlYWQgZG9uZSwgJWQgYnl0ZXMsIEhlYWRlcjogJXgvJXgsIEZvb3RlcjogJXgleCV4JXhcbiIsICAqLwotLyogICAgICAgbXlidWZmLT5sZW5ndGgsIGZyYW1lWzBdLCBmcmFtZVsxXSwgKi8KLS8qICAgICAgIGZyYW1lW215YnVmZi0+bGVuZ3RoLTRdLCBmcmFtZVtteWJ1ZmYtPmxlbmd0aC0zXSwgICovCi0vKiAgICAgICBmcmFtZVtteWJ1ZmYtPmxlbmd0aC0yXSwgZnJhbWVbbXlidWZmLT5sZW5ndGgtMV0pOyAqLwotCi0JcmV0dXJuIG15YnVmZi0+bGVuZ3RoOwotfQotCi1zdGF0aWMgdm9pZCBjcGlhX3VzYl9mcmVlX3Jlc291cmNlcyhzdHJ1Y3QgdXNiX2NwaWEgKnVjcGlhLCBpbnQgdHJ5KQotewotCWlmICghdWNwaWEtPnN0cmVhbWluZykKLQkJcmV0dXJuOwotCi0JdWNwaWEtPnN0cmVhbWluZyA9IDA7Ci0KLQkvKiBTZXQgcGFja2V0IHNpemUgdG8gMCAqLwotCWlmICh0cnkpIHsKLQkJaW50IHJldDsKLQotCQlyZXQgPSB1c2Jfc2V0X2ludGVyZmFjZSh1Y3BpYS0+ZGV2LCB1Y3BpYS0+aWZhY2UsIDApOwotCQlpZiAocmV0IDwgMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJ1c2Jfc2V0X2ludGVyZmFjZSBlcnJvciAocmV0ID0gJWQpXG4iLCByZXQpOwotCQkJcmV0dXJuOwotCQl9Ci0JfQotCi0JLyogVW5zY2hlZHVsZSBhbGwgb2YgdGhlIGlzbyB0ZCdzICovCi0JaWYgKHVjcGlhLT5zYnVmWzFdLnVyYikgewotCQl1c2Jfa2lsbF91cmIodWNwaWEtPnNidWZbMV0udXJiKTsKLQkJdXNiX2ZyZWVfdXJiKHVjcGlhLT5zYnVmWzFdLnVyYik7Ci0JCXVjcGlhLT5zYnVmWzFdLnVyYiA9IE5VTEw7Ci0JfQotCi0Ja2ZyZWUodWNwaWEtPnNidWZbMV0uZGF0YSk7Ci0JdWNwaWEtPnNidWZbMV0uZGF0YSA9IE5VTEw7Ci0KLQlpZiAodWNwaWEtPnNidWZbMF0udXJiKSB7Ci0JCXVzYl9raWxsX3VyYih1Y3BpYS0+c2J1ZlswXS51cmIpOwotCQl1c2JfZnJlZV91cmIodWNwaWEtPnNidWZbMF0udXJiKTsKLQkJdWNwaWEtPnNidWZbMF0udXJiID0gTlVMTDsKLQl9Ci0KLQlrZnJlZSh1Y3BpYS0+c2J1ZlswXS5kYXRhKTsKLQl1Y3BpYS0+c2J1ZlswXS5kYXRhID0gTlVMTDsKLX0KLQotc3RhdGljIGludCBjcGlhX3VzYl9jbG9zZSh2b2lkICpwcml2ZGF0YSkKLXsKLQlzdHJ1Y3QgdXNiX2NwaWEgKnVjcGlhID0gKHN0cnVjdCB1c2JfY3BpYSAqKSBwcml2ZGF0YTsKLQotCWlmKCF1Y3BpYSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQl1Y3BpYS0+b3BlbiA9IDA7Ci0KLQkvKiB1Y3BpYS0+cHJlc2VudCA9IDAgcHJvdGVjdHMgYWdhaW5zdCB0cnlpbmcgdG8gcmVzZXQgdGhlCi0JICogYWx0IHNldHRpbmcgaWYgY2FtZXJhIGlzIHBoeXNpY2FsbHkgZGlzY29ubmVjdGVkIHdoaWxlIG9wZW4gKi8KLQljcGlhX3VzYl9mcmVlX3Jlc291cmNlcyh1Y3BpYSwgdWNwaWEtPnByZXNlbnQpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIFByb2JpbmcgYW5kIGluaXRpYWxpemluZyAqLwotCi1zdGF0aWMgaW50IGNwaWFfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCi0JCSAgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKLXsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7Ci0Jc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaW50ZXJmYWNlOwotCXN0cnVjdCB1c2JfY3BpYSAqdWNwaWE7Ci0Jc3RydWN0IGNhbV9kYXRhICpjYW07Ci0JaW50IHJldDsKLQotCS8qIEEgbXVsdGktY29uZmlnIENQaUEgY2FtZXJhPyAqLwotCWlmICh1ZGV2LT5kZXNjcmlwdG9yLmJOdW1Db25maWd1cmF0aW9ucyAhPSAxKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWludGVyZmFjZSA9IGludGYtPmN1cl9hbHRzZXR0aW5nOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiVVNCIENQaUEgY2FtZXJhIGZvdW5kXG4iKTsKLQotCXVjcGlhID0ga3phbGxvYyhzaXplb2YoKnVjcGlhKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF1Y3BpYSkgewotCQlwcmludGsoS0VSTl9FUlIgImNvdWxkbid0IGttYWxsb2MgY3BpYSBzdHJ1Y3RcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQl1Y3BpYS0+ZGV2ID0gdWRldjsKLQl1Y3BpYS0+aWZhY2UgPSBpbnRlcmZhY2UtPmRlc2MuYkludGVyZmFjZU51bWJlcjsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ1Y3BpYS0+d3Ffc3RyZWFtKTsKLQotCXVjcGlhLT5idWZmZXJzWzBdID0gdm1hbGxvYyhzaXplb2YoKnVjcGlhLT5idWZmZXJzWzBdKSk7Ci0JaWYgKCF1Y3BpYS0+YnVmZmVyc1swXSkgewotCQlwcmludGsoS0VSTl9FUlIgImNvdWxkbid0IHZtYWxsb2MgZnJhbWUgYnVmZmVyIDBcbiIpOwotCQlnb3RvIGZhaWxfYWxsb2NfMDsKLQl9Ci0KLQl1Y3BpYS0+YnVmZmVyc1sxXSA9IHZtYWxsb2Moc2l6ZW9mKCp1Y3BpYS0+YnVmZmVyc1sxXSkpOwotCWlmICghdWNwaWEtPmJ1ZmZlcnNbMV0pIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjb3VsZG4ndCB2bWFsbG9jIGZyYW1lIGJ1ZmZlciAxXG4iKTsKLQkJZ290byBmYWlsX2FsbG9jXzE7Ci0JfQotCi0JdWNwaWEtPmJ1ZmZlcnNbMl0gPSB2bWFsbG9jKHNpemVvZigqdWNwaWEtPmJ1ZmZlcnNbMl0pKTsKLQlpZiAoIXVjcGlhLT5idWZmZXJzWzJdKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY291bGRuJ3Qgdm1hbGxvYyBmcmFtZSBidWZmZXIgMlxuIik7Ci0JCWdvdG8gZmFpbF9hbGxvY18yOwotCX0KLQotCXVjcGlhLT5idWZmZXJzWzBdLT5uZXh0ID0gdWNwaWEtPmJ1ZmZlcnNbMV07Ci0JdWNwaWEtPmJ1ZmZlcnNbMV0tPm5leHQgPSB1Y3BpYS0+YnVmZmVyc1syXTsKLQl1Y3BpYS0+YnVmZmVyc1syXS0+bmV4dCA9IHVjcGlhLT5idWZmZXJzWzBdOwotCi0JcmV0ID0gdXNiX3NldF9pbnRlcmZhY2UodWRldiwgdWNwaWEtPmlmYWNlLCAwKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgImNwaWFfcHJvYmU6IHVzYl9zZXRfaW50ZXJmYWNlIGVycm9yIChyZXQgPSAlZClcbiIsIHJldCk7Ci0JCS8qIGdvdG8gZmFpbF9hbGw7ICovCi0JfQotCi0JLyogQmVmb3JlIHJlZ2lzdGVyX2NhbWVyYSwgaW1wb3J0YW50ICovCi0JdWNwaWEtPnByZXNlbnQgPSAxOwotCi0JY2FtID0gY3BpYV9yZWdpc3Rlcl9jYW1lcmEoJmNwaWFfdXNiX29wcywgdWNwaWEpOwotCWlmICghY2FtKSB7Ci0JCUxPRygiZmFpbGVkIHRvIGNwaWFfcmVnaXN0ZXJfY2FtZXJhXG4iKTsKLQkJZ290byBmYWlsX2FsbDsKLQl9Ci0KLQlzcGluX2xvY2soICZjYW1fbGlzdF9sb2NrX3VzYiApOwotCWxpc3RfYWRkKCAmY2FtLT5jYW1fZGF0YV9saXN0LCAmY2FtX2xpc3QgKTsKLQlzcGluX3VubG9jayggJmNhbV9saXN0X2xvY2tfdXNiICk7Ci0KLQl1c2Jfc2V0X2ludGZkYXRhKGludGYsIGNhbSk7Ci0JcmV0dXJuIDA7Ci0KLWZhaWxfYWxsOgotCXZmcmVlKHVjcGlhLT5idWZmZXJzWzJdKTsKLQl1Y3BpYS0+YnVmZmVyc1syXSA9IE5VTEw7Ci1mYWlsX2FsbG9jXzI6Ci0JdmZyZWUodWNwaWEtPmJ1ZmZlcnNbMV0pOwotCXVjcGlhLT5idWZmZXJzWzFdID0gTlVMTDsKLWZhaWxfYWxsb2NfMToKLQl2ZnJlZSh1Y3BpYS0+YnVmZmVyc1swXSk7Ci0JdWNwaWEtPmJ1ZmZlcnNbMF0gPSBOVUxMOwotZmFpbF9hbGxvY18wOgotCWtmcmVlKHVjcGlhKTsKLQlyZXR1cm4gLUVJTzsKLX0KLQotc3RhdGljIHZvaWQgY3BpYV9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKTsKLQotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGNwaWFfaWRfdGFibGUgW10gPSB7Ci0JeyBVU0JfREVWSUNFKDB4MDU1MywgMHgwMDAyKSB9LAotCXsgVVNCX0RFVklDRSgweDA4MTMsIDB4MDAwMSkgfSwKLQl7IH0JCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCi19OwotCi1NT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIGNwaWFfaWRfdGFibGUpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi0KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBjcGlhX2RyaXZlciA9IHsKLQkubmFtZQkJPSAiY3BpYSIsCi0JLnByb2JlCQk9IGNwaWFfcHJvYmUsCi0JLmRpc2Nvbm5lY3QJPSBjcGlhX2Rpc2Nvbm5lY3QsCi0JLmlkX3RhYmxlCT0gY3BpYV9pZF90YWJsZSwKLX07Ci0KLXN0YXRpYyB2b2lkIGNwaWFfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKLXsKLQlzdHJ1Y3QgY2FtX2RhdGEgKmNhbSA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7Ci0Jc3RydWN0IHVzYl9jcGlhICp1Y3BpYTsKLQotCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7Ci0JaWYgKCFjYW0pCi0JCXJldHVybjsKLQotCXVjcGlhID0gKHN0cnVjdCB1c2JfY3BpYSAqKSBjYW0tPmxvd2xldmVsX2RhdGE7Ci0Jc3Bpbl9sb2NrKCAmY2FtX2xpc3RfbG9ja191c2IgKTsKLQlsaXN0X2RlbCgmY2FtLT5jYW1fZGF0YV9saXN0KTsKLQlzcGluX3VubG9jayggJmNhbV9saXN0X2xvY2tfdXNiICk7Ci0KLQl1Y3BpYS0+cHJlc2VudCA9IDA7Ci0KLQljcGlhX3VucmVnaXN0ZXJfY2FtZXJhKGNhbSk7Ci0JaWYodWNwaWEtPm9wZW4pCi0JCWNwaWFfdXNiX2Nsb3NlKGNhbS0+bG93bGV2ZWxfZGF0YSk7Ci0KLQl1Y3BpYS0+Y3VyYnVmZi0+c3RhdHVzID0gRlJBTUVfRVJST1I7Ci0KLQlpZiAod2FpdHF1ZXVlX2FjdGl2ZSgmdWNwaWEtPndxX3N0cmVhbSkpCi0JCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdWNwaWEtPndxX3N0cmVhbSk7Ci0KLQl1Y3BpYS0+Y3VyYnVmZiA9IHVjcGlhLT53b3JrYnVmZiA9IE5VTEw7Ci0KLQl2ZnJlZSh1Y3BpYS0+YnVmZmVyc1syXSk7Ci0JdWNwaWEtPmJ1ZmZlcnNbMl0gPSBOVUxMOwotCi0JdmZyZWUodWNwaWEtPmJ1ZmZlcnNbMV0pOwotCXVjcGlhLT5idWZmZXJzWzFdID0gTlVMTDsKLQotCXZmcmVlKHVjcGlhLT5idWZmZXJzWzBdKTsKLQl1Y3BpYS0+YnVmZmVyc1swXSA9IE5VTEw7Ci0KLQljYW0tPmxvd2xldmVsX2RhdGEgPSBOVUxMOwotCWtmcmVlKHVjcGlhKTsKLX0KLQotc3RhdGljIGludCBfX2luaXQgdXNiX2NwaWFfaW5pdCh2b2lkKQotewotCXByaW50ayhLRVJOX0lORk8gIiVzIHYlZC4lZC4lZFxuIixBQk9VVCwKLQkgICAgICAgQ1BJQV9VU0JfTUFKX1ZFUixDUElBX1VTQl9NSU5fVkVSLENQSUFfVVNCX1BBVENIX1ZFUik7Ci0KLQlzcGluX2xvY2tfaW5pdCgmY2FtX2xpc3RfbG9ja191c2IpOwotCXJldHVybiB1c2JfcmVnaXN0ZXIoJmNwaWFfZHJpdmVyKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IHVzYl9jcGlhX2NsZWFudXAodm9pZCkKLXsKLQl1c2JfZGVyZWdpc3RlcigmY3BpYV9kcml2ZXIpOwotfQotCi0KLW1vZHVsZV9pbml0ICh1c2JfY3BpYV9pbml0KTsKLW1vZHVsZV9leGl0ICh1c2JfY3BpYV9jbGVhbnVwKTsKLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL0tjb25maWcKaW5kZXggMWQ3MzMzNC4uYjI2NTY5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9LY29uZmlnCkBAIC0xLDExICsxLDExIEBACiBjb25maWcgVklERU9fQ1gyNTgyMQogCXRyaXN0YXRlICJDb25leGFudCBjeDI1ODIxIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBWSURFT19ERVYgJiYgUENJICYmIEkyQyAmJiBJTlBVVAorCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgVklERU9fREVWICYmIFBDSSAmJiBJMkMKIAlkZXBlbmRzIG9uIEJLTCAjIHBsZWFzZSBmaXgKIAlzZWxlY3QgSTJDX0FMR09CSVQKIAlzZWxlY3QgVklERU9fQlRDWAogCXNlbGVjdCBWSURFT19UVkVFUFJPTQotCWRlcGVuZHMgb24gVklERU9fSVIKKwlkZXBlbmRzIG9uIFJDX0NPUkUKIAlzZWxlY3QgVklERU9CVUZfRFZCCiAJc2VsZWN0IFZJREVPQlVGX0RNQV9TRwogCXNlbGVjdCBWSURFT19DWDI1ODQwCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLWFsc2EuYyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtYWxzYS5jCmluZGV4IDJhMDFkYzAuLjlhMjA1YTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtYWxzYS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtYWxzYS5jCkBAIC0yMCw2ICsyMCw4IEBACiAgKgogICovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KQEAgLTQyLDExICs0NCwxNiBAQAogCiAjZGVmaW5lIEFVRElPX1NSQU1fQ0hBTk5FTAlTUkFNX0NIMDgKIAotI2RlZmluZSBkcHJpbnRrKGxldmVsLCBmbXQsIGFyZy4uLikJaWYgKGRlYnVnID49IGxldmVsKSBcCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXMvMTogIiBmbXQsIGNoaXAtPmRldi0+bmFtZSAsICMjIGFyZykKLQotI2RlZmluZSBkcHJpbnRrX2NvcmUobGV2ZWwsIGZtdCwgYXJnLi4uKQlpZiAoZGVidWcgPj0gbGV2ZWwpIFwKLQlwcmludGsoS0VSTl9ERUJVRyAiJXMvMTogIiBmbXQsIGNoaXAtPmRldi0+bmFtZSAsICMjIGFyZykKKyNkZWZpbmUgZHByaW50ayhsZXZlbCwgZm10LCBhcmcuLi4pCQkJCVwKK2RvIHsJCQkJCQkJCVwKKwlpZiAoZGVidWcgPj0gbGV2ZWwpCQkJCQlcCisJCXByX2luZm8oIiVzLzE6ICIgZm10LCBjaGlwLT5kZXYtPm5hbWUsICMjYXJnKTsJXAorfSB3aGlsZSAoMCkKKyNkZWZpbmUgZHByaW50a19jb3JlKGxldmVsLCBmbXQsIGFyZy4uLikJCQkJXAorZG8gewkJCQkJCQkJCVwKKwlpZiAoZGVidWcgPj0gbGV2ZWwpCQkJCQkJXAorCQlwcmludGsoS0VSTl9ERUJVRyAiJXMvMTogIiBmbXQsIGNoaXAtPmRldi0+bmFtZSwgIyNhcmcpOyBcCit9IHdoaWxlICgwKQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCURhdGEgdHlwZSBkZWNsYXJhdGlvbnMgLSBDYW4gYmUgbW9kZWQgdG8gYSBoZWFkZXIgZmlsZSBsYXRlcgpAQCAtMTczLDEyICsxODAsMTEgQEAKIAkJIHRtcCB8IEZMRF9BVURfRFNUX1BLX01PREUgfCBGTERfQVVEX0RTVF9FTkFCTEUgfAogCQkgRkxEX0FVRF9DTEtfRU5BQkxFKTsKIAotCS8qIHByaW50ayhLRVJOX0lORk8gIkRFQlVHOiBTdGFydCBhdWRpbyBETUEsICVkIEIvbGluZSwiCi0JCQkJImNtZHNfc3RhcnQoMHgleCk9ICVkIGxpbmVzL0ZJRk8sICVkIHBlcmlvZHMsICIKLQkJCQkiJWQgYnl0ZSBidWZmZXJcbiIsIGJ1Zi0+YnBsLAotCQkJCWF1ZGlvX2NoLT5jbWRzX3N0YXJ0LAotCQkJCWN4X3JlYWQoYXVkaW9fY2gtPmNtZHNfc3RhcnQgKyAxMik+PjEsCi0JCQkJY2hpcC0+bnVtX3BlcmlvZHMsIGJ1Zi0+YnBsICpjaGlwLT5udW1fcGVyaW9kcyk7CisJLyoKKwlwcl9pbmZvKCJERUJVRzogU3RhcnQgYXVkaW8gRE1BLCAlZCBCL2xpbmUsIGNtZHNfc3RhcnQoMHgleCk9ICVkIGxpbmVzL0ZJRk8sICVkIHBlcmlvZHMsICVkIGJ5dGUgYnVmZmVyXG4iLAorCQlidWYtPmJwbCwgYXVkaW9fY2gtPmNtZHNfc3RhcnQsCisJCWN4X3JlYWQoYXVkaW9fY2gtPmNtZHNfc3RhcnQgKyAxMik+PjEsCisJCWNoaXAtPm51bV9wZXJpb2RzLCBidWYtPmJwbCAqIGNoaXAtPm51bV9wZXJpb2RzKTsKIAkqLwogCiAJLyogRW5hYmxlcyBjb3JyZXNwb25kaW5nIGJpdHMgYXQgQVVEX0lOVF9TVEFUICovCkBAIC0yNTksOCArMjY1LDcgQEAKIAogCS8qIHJpc2Mgb3AgY29kZSBlcnJvciAqLwogCWlmIChzdGF0dXMgJiBBVURfSU5UX09QQ19FUlIpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiV0FSTklORyAlcy8xOiBBdWRpbyByaXNjIG9wIGNvZGUgZXJyb3JcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOworCQlwcl93YXJuKCJXQVJOSU5HICVzLzE6IEF1ZGlvIHJpc2Mgb3AgY29kZSBlcnJvclxuIiwgZGV2LT5uYW1lKTsKIAogCQljeF9jbGVhcihBVURfSU5UX0RNQV9DVEwsCiAJCQkgRkxEX0FVRF9EU1RfQV9SSVNDX0VOIHwgRkxEX0FVRF9EU1RfQV9GSUZPX0VOKTsKQEAgLTI2OSw4ICsyNzQsNyBAQAogCQkJCQkJW0FVRElPX1NSQU1fQ0hBTk5FTF0pOwogCX0KIAlpZiAoc3RhdHVzICYgQVVEX0lOVF9ETl9TWU5DKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIldBUk5JTkcgJXM6IERvd25zdHJlYW0gc3luYyBlcnJvciFcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOworCQlwcl93YXJuKCJXQVJOSU5HICVzOiBEb3duc3RyZWFtIHN5bmMgZXJyb3IhXG4iLCBkZXYtPm5hbWUpOwogCQljeF93cml0ZShBVURfQV9HUENOVF9DVEwsIEdQX0NPVU5UX0NPTlRST0xfUkVTRVQpOwogCQlyZXR1cm47CiAJfQpAQCAtMzg4LDggKzM5Miw3IEBACiAJdW5zaWduZWQgaW50IGJwbCA9IDA7CiAKIAlpZiAoIWNoaXApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJERUJVRzogY3gyNTgyMSBjYW4ndCBmaW5kIGRldmljZSBzdHJ1Y3QuIgotCQkgICAgICAgIiBDYW4ndCBwcm9jZWVkIHdpdGggb3BlblxuIik7CisJCXByX2VycigiREVCVUc6IGN4MjU4MjEgY2FuJ3QgZmluZCBkZXZpY2Ugc3RydWN0LiBDYW4ndCBwcm9jZWVkIHdpdGggb3BlblxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtNDc5LDggKzQ4Miw3IEBACiAJCQkJCSAgY2hpcC0+cGVyaW9kX3NpemUsIGNoaXAtPm51bV9wZXJpb2RzLAogCQkJCQkgIDEpOwogCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0lORk8KLQkJCSJERUJVRzogRVJST1IgYWZ0ZXIgY3gyNTgyMV9yaXNjX2RhdGFidWZmZXJfYXVkaW8oKVxuIik7CisJCXByX2luZm8oIkRFQlVHOiBFUlJPUiBhZnRlciBjeDI1ODIxX3Jpc2NfZGF0YWJ1ZmZlcl9hdWRpbygpXG4iKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKQEAgLTYwOCw4ICs2MTAsNyBAQAogCiAJZXJyID0gc25kX3BjbV9uZXcoY2hpcC0+Y2FyZCwgbmFtZSwgZGV2aWNlLCAwLCAxLCAmcGNtKTsKIAlpZiAoZXJyIDwgMCkgewotCQlwcmludGsoS0VSTl9JTkZPICJFUlJPUjogRkFJTEVEIHNuZF9wY21fbmV3KCkgaW4gJXNcbiIsCi0JCSAgICAgICBfX2Z1bmNfXyk7CisJCXByX2luZm8oIkVSUk9SOiBGQUlMRUQgc25kX3BjbV9uZXcoKSBpbiAlc1xuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gZXJyOwogCX0KIAlwY20tPnByaXZhdGVfZGF0YSA9IGNoaXA7CkBAIC02NzQsMjMgKzY3NSwyMSBAQAogCWludCBlcnI7CiAKIAlpZiAoZGV2bm8gPj0gU05EUlZfQ0FSRFMpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiREVCVUcgRVJST1I6IGRldm5vID49IFNORFJWX0NBUkRTICVzXG4iLAotCQkgICAgICAgX19mdW5jX18pOworCQlwcl9pbmZvKCJERUJVRyBFUlJPUjogZGV2bm8gPj0gU05EUlZfQ0FSRFMgJXNcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJaWYgKCFlbmFibGVbZGV2bm9dKSB7CiAJCSsrZGV2bm87Ci0JCXByaW50ayhLRVJOX0lORk8gIkRFQlVHIEVSUk9SOiAhZW5hYmxlW2Rldm5vXSAlc1xuIiwgX19mdW5jX18pOworCQlwcl9pbmZvKCJERUJVRyBFUlJPUjogIWVuYWJsZVtkZXZub10gJXNcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCiAJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldm5vXSwgaWRbZGV2bm9dLCBUSElTX01PRFVMRSwKIAkJCSBzaXplb2Yoc3RydWN0IGN4MjU4MjFfYXVkaW9fZGV2KSwgJmNhcmQpOwogCWlmIChlcnIgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0lORk8KLQkJICAgICAgICJERUJVRyBFUlJPUjogY2Fubm90IGNyZWF0ZSBzbmRfY2FyZF9uZXcgaW4gJXNcbiIsCi0JCSAgICAgICBfX2Z1bmNfXyk7CisJCXByX2luZm8oIkRFQlVHIEVSUk9SOiBjYW5ub3QgY3JlYXRlIHNuZF9jYXJkX25ldyBpbiAlc1xuIiwKKwkJCV9fZnVuY19fKTsKIAkJcmV0dXJuIGVycjsKIAl9CiAKQEAgLTcxMiwxNiArNzExLDE1IEBACiAJCQkgIElSUUZfU0hBUkVEIHwgSVJRRl9ESVNBQkxFRCwgY2hpcC0+ZGV2LT5uYW1lLCBjaGlwKTsKIAogCWlmIChlcnIgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiRVJST1IgJXM6IGNhbid0IGdldCBJUlEgJWQgZm9yIEFMU0FcbiIsCisJCXByX2VycigiRVJST1IgJXM6IGNhbid0IGdldCBJUlEgJWQgZm9yIEFMU0FcbiIsCiAJCSAgICAgICBjaGlwLT5kZXYtPm5hbWUsIGRldi0+cGNpLT5pcnEpOwogCQlnb3RvIGVycm9yOwogCX0KIAogCWVyciA9IHNuZF9jeDI1ODIxX3BjbShjaGlwLCAwLCAiY3gyNTgyMSBEaWdpdGFsIik7CiAJaWYgKGVyciA8IDApIHsKLQkJcHJpbnRrKEtFUk5fSU5GTwotCQkgICAgICAgIkRFQlVHIEVSUk9SOiBjYW5ub3QgY3JlYXRlIHNuZF9jeDI1ODIxX3BjbSAlc1xuIiwKLQkJICAgICAgIF9fZnVuY19fKTsKKwkJcHJfaW5mbygiREVCVUcgRVJST1I6IGNhbm5vdCBjcmVhdGUgc25kX2N4MjU4MjFfcGNtICVzXG4iLAorCQkJX19mdW5jX18pOwogCQlnb3RvIGVycm9yOwogCX0KIApAQCAtNzMyLDEzICs3MzAsMTMgQEAKIAkJY2hpcC0+aW9iYXNlLCBjaGlwLT5pcnEpOwogCXN0cmNweShjYXJkLT5taXhlcm5hbWUsICJDWDI1ODIxIik7CiAKLQlwcmludGsoS0VSTl9JTkZPICIlcy8laTogQUxTQSBzdXBwb3J0IGZvciBjeDI1ODIxIGJvYXJkc1xuIiwKLQkgICAgICAgY2FyZC0+ZHJpdmVyLCBkZXZubyk7CisJcHJfaW5mbygiJXMvJWk6IEFMU0Egc3VwcG9ydCBmb3IgY3gyNTgyMSBib2FyZHNcbiIsCisJCWNhcmQtPmRyaXZlciwgZGV2bm8pOwogCiAJZXJyID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCk7CiAJaWYgKGVyciA8IDApIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiREVCVUcgRVJST1I6IGNhbm5vdCByZWdpc3RlciBzb3VuZCBjYXJkICVzXG4iLAotCQkgICAgICAgX19mdW5jX18pOworCQlwcl9pbmZvKCJERUJVRyBFUlJPUjogY2Fubm90IHJlZ2lzdGVyIHNvdW5kIGNhcmQgJXNcbiIsCisJCQlfX2Z1bmNfXyk7CiAJCWdvdG8gZXJyb3I7CiAJfQogCkBAIC03NzgsOCArNzc2LDcgQEAKIAl9CiAKIAlpZiAoZGV2ID09IE5VTEwpCi0JCXByaW50ayhLRVJOX0lORk8KLQkJICAgICAgICJjeDI1ODIxIEVSUk9SIEFMU0E6IG5vIGN4MjU4MjEgY2FyZHMgZm91bmRcbiIpOworCQlwcl9pbmZvKCJFUlJPUiBBTFNBOiBubyBjeDI1ODIxIGNhcmRzIGZvdW5kXG4iKTsKIAogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLWF1ZGlvLXVwc3RyZWFtLmMgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLWF1ZGlvLXVwc3RyZWFtLmMKaW5kZXggMTYwN2IwZC4uNzk5MmEzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS1hdWRpby11cHN0cmVhbS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtYXVkaW8tdXBzdHJlYW0uYwpAQCAtMjAsNiArMjAsOCBAQAogICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKwogI2luY2x1ZGUgImN4MjU4MjEtdmlkZW8uaCIKICNpbmNsdWRlICJjeDI1ODIxLWF1ZGlvLXVwc3RyZWFtLmgiCiAKQEAgLTIyMSw3ICsyMjMsNyBAQAogCiAJaWYgKCFkZXYtPl9hdWRpb19pc19ydW5uaW5nKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHCi0JCSAgICAiY3gyNTgyMTogTm8gYXVkaW8gZmlsZSBpcyBjdXJyZW50bHkgcnVubmluZyBzbyByZXR1cm4hXG4iKTsKKwkJICAgICAgIHByX2ZtdCgiTm8gYXVkaW8gZmlsZSBpcyBjdXJyZW50bHkgcnVubmluZyBzbyByZXR1cm4hXG4iKSk7CiAJCXJldHVybjsKIAl9CiAJLyogRGlzYWJsZSBSSVNDIGludGVycnVwdHMgKi8KQEAgLTI4MSwxOSArMjgzLDE5IEBACiAKIAlpZiAoSVNfRVJSKG15ZmlsZSkpIHsKIAkJY29uc3QgaW50IG9wZW5fZXJybm8gPSAtUFRSX0VSUihteWZpbGUpOwotCQlwcmludGsoS0VSTl9FUlIgIiVzKCk6IEVSUk9SIG9wZW5pbmcgZmlsZSglcykgd2l0aCBlcnJubyA9ICVkIVxuIiwKKwkJcHJfZXJyKCIlcygpOiBFUlJPUiBvcGVuaW5nIGZpbGUoJXMpIHdpdGggZXJybm8gPSAlZCFcbiIsCiAJCSAgICAgICBfX2Z1bmNfXywgZGV2LT5fYXVkaW9maWxlbmFtZSwgb3Blbl9lcnJubyk7CiAJCXJldHVybiBQVFJfRVJSKG15ZmlsZSk7CiAJfSBlbHNlIHsKIAkJaWYgKCEobXlmaWxlLT5mX29wKSkgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRmlsZSBoYXMgbm8gZmlsZSBvcGVyYXRpb25zIHJlZ2lzdGVyZWQhXG4iLAorCQkJcHJfZXJyKCIlcygpOiBGaWxlIGhhcyBubyBmaWxlIG9wZXJhdGlvbnMgcmVnaXN0ZXJlZCFcbiIsCiAJCQkgICAgICAgX19mdW5jX18pOwogCQkJZmlscF9jbG9zZShteWZpbGUsIE5VTEwpOwogCQkJcmV0dXJuIC1FSU87CiAJCX0KIAogCQlpZiAoIW15ZmlsZS0+Zl9vcC0+cmVhZCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRmlsZSBoYXMgbm8gUkVBRCBvcGVyYXRpb25zIHJlZ2lzdGVyZWQhXG4iLAorCQkJcHJfZXJyKCIlcygpOiBGaWxlIGhhcyBubyBSRUFEIG9wZXJhdGlvbnMgcmVnaXN0ZXJlZCFcbiIsCiAJCQkgICAgICAgX19mdW5jX18pOwogCQkJZmlscF9jbG9zZShteWZpbGUsIE5VTEwpOwogCQkJcmV0dXJuIC1FSU87CkBAIC0zMjAsOSArMzIyLDggQEAKIAkJCWZyYW1lX29mZnNldCArPSB2ZnNfcmVhZF9yZXR2YWw7CiAKIAkJCWlmICh2ZnNfcmVhZF9yZXR2YWwgPCBsaW5lX3NpemUpIHsKLQkJCQlwcmludGsoS0VSTl9JTkZPCi0JCQkJICAgICAgICJEb25lOiBleGl0ICVzKCkgc2luY2Ugbm8gbW9yZSBieXRlcyB0byByZWFkIGZyb20gQXVkaW8gZmlsZS5cbiIsCi0JCQkJICAgICAgIF9fZnVuY19fKTsKKwkJCQlwcl9pbmZvKCJEb25lOiBleGl0ICVzKCkgc2luY2Ugbm8gbW9yZSBieXRlcyB0byByZWFkIGZyb20gQXVkaW8gZmlsZVxuIiwKKwkJCQkJX19mdW5jX18pOwogCQkJCWJyZWFrOwogCQkJfQogCQl9CkBAIC0zNDYsNyArMzQ3LDcgQEAKIAkgICAgY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBjeDI1ODIxX2RldiwgX2F1ZGlvX3dvcmtfZW50cnkpOwogCiAJaWYgKCFkZXYpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJFUlJPUiAlcygpOiBzaW5jZSBjb250YWluZXJfb2Yod29ya19zdHJ1Y3QpIEZBSUxFRCFcbiIsCisJCXByX2VycigiRVJST1IgJXMoKTogc2luY2UgY29udGFpbmVyX29mKHdvcmtfc3RydWN0KSBGQUlMRUQhXG4iLAogCQkgICAgICAgX19mdW5jX18pOwogCQlyZXR1cm47CiAJfQpAQCAtMzczLDE5ICszNzQsMTkgQEAKIAogCWlmIChJU19FUlIobXlmaWxlKSkgewogCQljb25zdCBpbnQgb3Blbl9lcnJubyA9IC1QVFJfRVJSKG15ZmlsZSk7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXMoKTogRVJST1Igb3BlbmluZyBmaWxlKCVzKSB3aXRoIGVycm5vID0gJWQhXG4iLAorCQlwcl9lcnIoIiVzKCk6IEVSUk9SIG9wZW5pbmcgZmlsZSglcykgd2l0aCBlcnJubyA9ICVkIVxuIiwKIAkJICAgICAgIF9fZnVuY19fLCBkZXYtPl9hdWRpb2ZpbGVuYW1lLCBvcGVuX2Vycm5vKTsKIAkJcmV0dXJuIFBUUl9FUlIobXlmaWxlKTsKIAl9IGVsc2UgewogCQlpZiAoIShteWZpbGUtPmZfb3ApKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBGaWxlIGhhcyBubyBmaWxlIG9wZXJhdGlvbnMgcmVnaXN0ZXJlZCFcbiIsCisJCQlwcl9lcnIoIiVzKCk6IEZpbGUgaGFzIG5vIGZpbGUgb3BlcmF0aW9ucyByZWdpc3RlcmVkIVxuIiwKIAkJCSAgICAgICBfX2Z1bmNfXyk7CiAJCQlmaWxwX2Nsb3NlKG15ZmlsZSwgTlVMTCk7CiAJCQlyZXR1cm4gLUVJTzsKIAkJfQogCiAJCWlmICghbXlmaWxlLT5mX29wLT5yZWFkKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBGaWxlIGhhcyBubyBSRUFEIG9wZXJhdGlvbnMgcmVnaXN0ZXJlZCFcbiIsCisJCQlwcl9lcnIoIiVzKCk6IEZpbGUgaGFzIG5vIFJFQUQgb3BlcmF0aW9ucyByZWdpc3RlcmVkIVxuIiwKIAkJCSAgICAgICBfX2Z1bmNfXyk7CiAJCQlmaWxwX2Nsb3NlKG15ZmlsZSwgTlVMTCk7CiAJCQlyZXR1cm4gLUVJTzsKQEAgLTQxNCw5ICs0MTUsOCBAQAogCQkJCW9mZnNldCArPSB2ZnNfcmVhZF9yZXR2YWw7CiAKIAkJCQlpZiAodmZzX3JlYWRfcmV0dmFsIDwgbGluZV9zaXplKSB7Ci0JCQkJCXByaW50ayhLRVJOX0lORk8KLQkJCQkJICAgICAgICJEb25lOiBleGl0ICVzKCkgc2luY2Ugbm8gbW9yZSBieXRlcyB0byByZWFkIGZyb20gQXVkaW8gZmlsZS5cbiIsCi0JCQkJCSAgICAgICBfX2Z1bmNfXyk7CisJCQkJCXByX2luZm8oIkRvbmU6IGV4aXQgJXMoKSBzaW5jZSBubyBtb3JlIGJ5dGVzIHRvIHJlYWQgZnJvbSBBdWRpbyBmaWxlXG4iLAorCQkJCQkJX19mdW5jX18pOwogCQkJCQlicmVhazsKIAkJCQl9CiAJCQl9CkBAIC00NTksNyArNDU5LDcgQEAKIAogCWlmICghZGV2LT5fcmlzY192aXJ0X2FkZHIpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcKLQkJCSJjeDI1ODIxIEVSUk9SOiBwY2lfYWxsb2NfY29uc2lzdGVudCgpIEZBSUxFRCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIFJJU0MgcHJvZ3JhbSEgUmV0dXJuaW5nLlxuIik7CisJCSAgICAgICBwcl9mbXQoIkVSUk9SOiBwY2lfYWxsb2NfY29uc2lzdGVudCgpIEZBSUxFRCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIFJJU0MgcHJvZ3JhbSEgUmV0dXJuaW5nXG4iKSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAkvKiBDbGVhciBvdXQgbWVtb3J5IGF0IGFkZHJlc3MgKi8KQEAgLTQ3NCw3ICs0NzQsNyBAQAogCiAJaWYgKCFkZXYtPl9hdWRpb2RhdGFfYnVmX3ZpcnRfYWRkcikgewogCQlwcmludGsoS0VSTl9ERUJVRwotCQkJImN4MjU4MjEgRVJST1I6IHBjaV9hbGxvY19jb25zaXN0ZW50KCkgRkFJTEVEIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgZGF0YSBidWZmZXIhIFJldHVybmluZy5cbiIpOworCQkgICAgICAgcHJfZm10KCJFUlJPUjogcGNpX2FsbG9jX2NvbnNpc3RlbnQoKSBGQUlMRUQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBkYXRhIGJ1ZmZlciEgUmV0dXJuaW5nXG4iKSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAkvKiBDbGVhciBvdXQgbWVtb3J5IGF0IGFkZHJlc3MgKi8KQEAgLTQ5MCw3ICs0OTAsNyBAQAogCQkJCQkgICAgICAgZGV2LT5fYXVkaW9fbGluZXNfY291bnQpOwogCWlmIChyZXQgPCAwKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHCi0JCSAgICAgICJjeDI1ODIxIEVSUk9SIGNyZWF0aW5nIGF1ZGlvIHVwc3RyZWFtIFJJU0MgcHJvZ3JhbXMhXG4iKTsKKwkJICAgICAgIHByX2ZtdCgiRVJST1IgY3JlYXRpbmcgYXVkaW8gdXBzdHJlYW0gUklTQyBwcm9ncmFtcyFcbiIpKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKQEAgLTU2OSwxNiArNTY5LDE2IEBACiAJCXNwaW5fdW5sb2NrKCZkZXYtPnNsb2NrKTsKIAl9IGVsc2UgewogCQlpZiAoc3RhdHVzICYgRkxEX0FVRF9TUkNfT0YpCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogQXVkaW8gUmVjZWl2ZWQgT3ZlcmZsb3cgRXJyb3IgSW50ZXJydXB0IVxuIiwKLQkJCSAgICAgICBfX2Z1bmNfXyk7CisJCQlwcl93YXJuKCIlcygpOiBBdWRpbyBSZWNlaXZlZCBPdmVyZmxvdyBFcnJvciBJbnRlcnJ1cHQhXG4iLAorCQkJCV9fZnVuY19fKTsKIAogCQlpZiAoc3RhdHVzICYgRkxEX0FVRF9TUkNfU1lOQykKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBBdWRpbyBSZWNlaXZlZCBTeW5jIEVycm9yIEludGVycnVwdCFcbiIsCi0JCQkgICAgICAgX19mdW5jX18pOworCQkJcHJfd2FybigiJXMoKTogQXVkaW8gUmVjZWl2ZWQgU3luYyBFcnJvciBJbnRlcnJ1cHQhXG4iLAorCQkJCV9fZnVuY19fKTsKIAogCQlpZiAoc3RhdHVzICYgRkxEX0FVRF9TUkNfT1BDX0VSUikKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBBdWRpbyBSZWNlaXZlZCBPcENvZGUgRXJyb3IgSW50ZXJydXB0IVxuIiwKLQkJCSAgICAgICBfX2Z1bmNfXyk7CisJCQlwcl93YXJuKCIlcygpOiBBdWRpbyBSZWNlaXZlZCBPcENvZGUgRXJyb3IgSW50ZXJydXB0IVxuIiwKKwkJCQlfX2Z1bmNfXyk7CiAKIAkJLyogUmVhZCBhbmQgd3JpdGUgYmFjayB0aGUgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciB0byBjbGVhcgogCQkgKiBvdXIgYml0cyAqLwpAQCAtNTg2LDggKzU4Niw4IEBACiAJfQogCiAJaWYgKGRldi0+X2F1ZGlvZmlsZV9zdGF0dXMgPT0gRU5EX09GX0ZJTEUpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY3gyNTgyMTogRU9GIENoYW5uZWwgQXVkaW8gRnJhbWVjb3VudCA9ICVkXG4iLAotCQkgICAgICAgZGV2LT5fYXVkaW9mcmFtZV9jb3VudCk7CisJCXByX3dhcm4oIkVPRiBDaGFubmVsIEF1ZGlvIEZyYW1lY291bnQgPSAlZFxuIiwKKwkJCWRldi0+X2F1ZGlvZnJhbWVfY291bnQpOwogCQlyZXR1cm4gLTE7CiAJfQogCS8qIEVsU0UsIHNldCB0aGUgaW50ZXJydXB0IG1hc2sgcmVnaXN0ZXIsIHJlLWVuYWJsZSBpcnEuICovCkBAIC02NDQsOSArNjQ0LDggQEAKIAogCQkvKiAxMCBtaWxsaXNlY29uZCB0aW1lb3V0ICovCiAJCWlmIChjb3VudCsrID4gMTAwMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgImN4MjU4MjEgRVJST1I6ICVzKCkgZmlmbyBpcyBOT1QgdHVybmVkIG9uLiBUaW1lb3V0IVxuIiwKLQkJCSAgICAgX19mdW5jX18pOworCQkJcHJfZXJyKCJFUlJPUjogJXMoKSBmaWZvIGlzIE5PVCB0dXJuZWQgb24uIFRpbWVvdXQhXG4iLAorCQkJICAgICAgIF9fZnVuY19fKTsKIAkJCXJldHVybjsKIAkJfQogCkBAIC02OTYsOCArNjk1LDggQEAKIAkgICAgcmVxdWVzdF9pcnEoZGV2LT5wY2ktPmlycSwgY3gyNTgyMV91cHN0cmVhbV9pcnFfYXVkaW8sCiAJCQlJUlFGX1NIQVJFRCB8IElSUUZfRElTQUJMRUQsIGRldi0+bmFtZSwgZGV2KTsKIAlpZiAoZXJyIDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYW4ndCBnZXQgdXBzdHJlYW0gSVJRICVkXG4iLCBkZXYtPm5hbWUsCi0JCSAgICAgICBkZXYtPnBjaS0+aXJxKTsKKwkJcHJfZXJyKCIlczogY2FuJ3QgZ2V0IHVwc3RyZWFtIElSUSAlZFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgZGV2LT5wY2ktPmlycSk7CiAJCWdvdG8gZmFpbF9pcnE7CiAJfQogCkBAIC03MjYsNyArNzI1LDcgQEAKIAlpbnQgc3RyX2xlbmd0aCA9IDA7CiAKIAlpZiAoZGV2LT5fYXVkaW9faXNfcnVubmluZykgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJBdWRpbyBDaGFubmVsIGlzIHN0aWxsIHJ1bm5pbmcgc28gcmV0dXJuIVxuIik7CisJCXByX3dhcm4oIkF1ZGlvIENoYW5uZWwgaXMgc3RpbGwgcnVubmluZyBzbyByZXR1cm4hXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC03NDAsNyArNzM5LDcgQEAKIAogCWlmICghZGV2LT5faXJxX2F1ZGlvX3F1ZXVlcykgewogCQlwcmludGsoS0VSTl9ERUJVRwotCQkJImN4MjU4MjEgRVJST1I6IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCkgZm9yIEF1ZGlvIEZBSUxFRCFcbiIpOworCQkgICAgICAgcHJfZm10KCJFUlJPUjogY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoKSBmb3IgQXVkaW8gRkFJTEVEIVxuIikpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTc4Nyw4ICs3ODYsNyBAQAogCXJldHZhbCA9CiAJICAgIGN4MjU4MjFfYXVkaW9fdXBzdHJlYW1fYnVmZmVyX3ByZXBhcmUoZGV2LCBzcmFtX2NoLCBfbGluZV9zaXplKTsKIAlpZiAocmV0dmFsIDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICIlczogRmFpbGVkIHRvIHNldCB1cCBBdWRpbyB1cHN0cmVhbSBidWZmZXJzIVxuIiwKKwkJcHJfZXJyKCIlczogRmFpbGVkIHRvIHNldCB1cCBBdWRpbyB1cHN0cmVhbSBidWZmZXJzIVxuIiwKIAkJICAgICAgIGRldi0+bmFtZSk7CiAJCWdvdG8gZXJyb3I7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS1jYXJkcy5jIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS1jYXJkcy5jCmluZGV4IGRhMGY1NmQuLjk0ZThkNjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtY2FyZHMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLWNhcmRzLmMKQEAgLTIxLDYgKzIxLDggQEAKICAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwogCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLWNvcmUuYyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtY29yZS5jCmluZGV4IDMwMGRhMzEuLmEyMTZiNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtY29yZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtY29yZS5jCkBAIC0yMSw2ICsyMSw4IEBACiAgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KIAorI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgImN4MjU4MjEuaCIKQEAgLTMzMiw3ICszMzQsNyBAQAogCiBzdGF0aWMgaW50IGN4MjU4MjFfcmlzY19kZWNvZGUodTMyIHJpc2MpCiB7Ci0Jc3RhdGljIGNoYXIgKmluc3RyWzE2XSA9IHsKKwlzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGluc3RyWzE2XSA9IHsKIAkJW1JJU0NfU1lOQyA+PiAyOF0gPSAic3luYyIsCiAJCVtSSVNDX1dSSVRFID4+IDI4XSA9ICJ3cml0ZSIsCiAJCVtSSVNDX1dSSVRFQyA+PiAyOF0gPSAid3JpdGVjIiwKQEAgLTM0NCw3ICszNDYsNyBAQAogCQlbUklTQ19XUklURUNNID4+IDI4XSA9ICJ3cml0ZWNtIiwKIAkJW1JJU0NfV1JJVEVDUiA+PiAyOF0gPSAid3JpdGVjciIsCiAJfTsKLQlzdGF0aWMgaW50IGluY3JbMTZdID0geworCXN0YXRpYyBjb25zdCBpbnQgaW5jclsxNl0gPSB7CiAJCVtSSVNDX1dSSVRFID4+IDI4XSA9IDMsCiAJCVtSSVNDX0pVTVAgPj4gMjhdID0gMywKIAkJW1JJU0NfU0tJUCA+PiAyOF0gPSAxLApAQCAtMzUzLDcgKzM1NSw3IEBACiAJCVtSSVNDX1dSSVRFQ00gPj4gMjhdID0gMywKIAkJW1JJU0NfV1JJVEVDUiA+PiAyOF0gPSA0LAogCX07Ci0Jc3RhdGljIGNoYXIgKmJpdHNbXSA9IHsKKwlzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJpdHNbXSA9IHsKIAkJIjEyIiwgIjEzIiwgIjE0IiwgInJlc3luYyIsCiAJCSJjbnQwIiwgImNudDEiLCAiMTgiLCAiMTkiLAogCQkiMjAiLCAiMjEiLCAiMjIiLCAiMjMiLApAQCAtMzYxLDEzICszNjMsMTMgQEAKIAl9OwogCWludCBpOwogCi0JcHJpbnRrKCIweCUwOHggWyAlcyIsIHJpc2MsCi0JICAgICAgIGluc3RyW3Jpc2MgPj4gMjhdID8gaW5zdHJbcmlzYyA+PiAyOF0gOiAiSU5WQUxJRCIpOworCXByX2NvbnQoIjB4JTA4eCBbICVzIiwKKwkJcmlzYywgaW5zdHJbcmlzYyA+PiAyOF0gPyBpbnN0cltyaXNjID4+IDI4XSA6ICJJTlZBTElEIik7CiAJZm9yIChpID0gQVJSQVlfU0laRShiaXRzKSAtIDE7IGkgPj0gMDsgaS0tKSB7CiAJCWlmIChyaXNjICYgKDEgPDwgKGkgKyAxMikpKQotCQkJcHJpbnRrKCIgJXMiLCBiaXRzW2ldKTsKKwkJCXByX2NvbnQoIiAlcyIsIGJpdHNbaV0pOwogCX0KLQlwcmludGsoIiBjb3VudD0lZCBdXG4iLCByaXNjICYgMHhmZmYpOworCXByX2NvbnQoIiBjb3VudD0lZCBdXG4iLCByaXNjICYgMHhmZmYpOwogCXJldHVybiBpbmNyW3Jpc2MgPj4gMjhdID8gaW5jcltyaXNjID4+IDI4XSA6IDE7CiB9CiAKQEAgLTYyMCwxNiArNjIyLDE1IEBACiAJdTMyIHJpc2M7CiAJdW5zaWduZWQgaW50IGksIGosIG47CiAKLQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogJXMgLSBkbWEgY2hhbm5lbCBzdGF0dXMgZHVtcFxuIiwgZGV2LT5uYW1lLAotCSAgICAgICBjaC0+bmFtZSk7CisJcHJfd2FybigiJXM6ICVzIC0gZG1hIGNoYW5uZWwgc3RhdHVzIGR1bXBcbiIsIGRldi0+bmFtZSwgY2gtPm5hbWUpOwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG5hbWUpOyBpKyspCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgImNtZHMgKyAweCUyeDogICAlLTE1czogMHglMDh4XG4iLCBpICogNCwKLQkJICAgICAgIG5hbWVbaV0sIGN4X3JlYWQoY2gtPmNtZHNfc3RhcnQgKyA0ICogaSkpOworCQlwcl93YXJuKCJjbWRzICsgMHglMng6ICAgJS0xNXM6IDB4JTA4eFxuIiwKKwkJCWkgKiA0LCBuYW1lW2ldLCBjeF9yZWFkKGNoLT5jbWRzX3N0YXJ0ICsgNCAqIGkpKTsKIAogCWogPSBpICogNDsKIAlmb3IgKGkgPSAwOyBpIDwgNDspIHsKIAkJcmlzYyA9IGN4X3JlYWQoY2gtPmNtZHNfc3RhcnQgKyA0ICogKGkgKyAxNCkpOwotCQlwcmludGsoS0VSTl9XQVJOSU5HICJjbWRzICsgMHglMng6ICAgcmlzYyVkOiAiLCBqICsgaSAqIDQsIGkpOworCQlwcl93YXJuKCJjbWRzICsgMHglMng6ICAgcmlzYyVkOiAiLCBqICsgaSAqIDQsIGkpOwogCQlpICs9IGN4MjU4MjFfcmlzY19kZWNvZGUocmlzYyk7CiAJfQogCkBAIC02MzcsMzYgKzYzOCwzNSBAQAogCQlyaXNjID0gY3hfcmVhZChjaC0+Y3RybF9zdGFydCArIDQgKiBpKTsKIAkJLyogTm8gY29uc2lkZXJhdGlvbiBmb3IgYml0cyA2My0zMiAqLwogCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgImN0cmwgKyAweCUyeCAoMHglMDh4KTogaXEgJXg6ICIsIGkgKiA0LAotCQkgICAgICAgY2gtPmN0cmxfc3RhcnQgKyA0ICogaSwgaSk7CisJCXByX3dhcm4oImN0cmwgKyAweCUyeCAoMHglMDh4KTogaXEgJXg6ICIsCisJCQlpICogNCwgY2gtPmN0cmxfc3RhcnQgKyA0ICogaSwgaSk7CiAJCW4gPSBjeDI1ODIxX3Jpc2NfZGVjb2RlKHJpc2MpOwogCQlmb3IgKGogPSAxOyBqIDwgbjsgaisrKSB7CiAJCQlyaXNjID0gY3hfcmVhZChjaC0+Y3RybF9zdGFydCArIDQgKiAoaSArIGopKTsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSAgICAgICAiY3RybCArIDB4JTJ4IDogICBpcSAleDogMHglMDh4IFsgYXJnICMlZCBdXG4iLAotCQkJICAgICAgIDQgKiAoaSArIGopLCBpICsgaiwgcmlzYywgaik7CisJCQlwcl93YXJuKCJjdHJsICsgMHglMnggOiAgIGlxICV4OiAweCUwOHggWyBhcmcgIyVkIF1cbiIsCisJCQkJNCAqIChpICsgaiksIGkgKyBqLCByaXNjLCBqKTsKIAkJfQogCX0KIAotCXByaW50ayhLRVJOX1dBUk5JTkcgIiAgICAgICAgOiAgIGZpZm86IDB4JTA4eCAtPiAweCV4XG4iLAotCSAgICAgICBjaC0+Zmlmb19zdGFydCwgY2gtPmZpZm9fc3RhcnQgKyBjaC0+Zmlmb19zaXplKTsKLQlwcmludGsoS0VSTl9XQVJOSU5HICIgICAgICAgIDogICBjdHJsOiAweCUwOHggLT4gMHgleFxuIiwKLQkgICAgICAgY2gtPmN0cmxfc3RhcnQsIGNoLT5jdHJsX3N0YXJ0ICsgNiAqIDE2KTsKLQlwcmludGsoS0VSTl9XQVJOSU5HICIgICAgICAgIDogICBwdHIxX3JlZzogMHglMDh4XG4iLAotCSAgICAgICBjeF9yZWFkKGNoLT5wdHIxX3JlZykpOwotCXByaW50ayhLRVJOX1dBUk5JTkcgIiAgICAgICAgOiAgIHB0cjJfcmVnOiAweCUwOHhcbiIsCi0JICAgICAgIGN4X3JlYWQoY2gtPnB0cjJfcmVnKSk7Ci0JcHJpbnRrKEtFUk5fV0FSTklORyAiICAgICAgICA6ICAgY250MV9yZWc6IDB4JTA4eFxuIiwKLQkgICAgICAgY3hfcmVhZChjaC0+Y250MV9yZWcpKTsKLQlwcmludGsoS0VSTl9XQVJOSU5HICIgICAgICAgIDogICBjbnQyX3JlZzogMHglMDh4XG4iLAotCSAgICAgICBjeF9yZWFkKGNoLT5jbnQyX3JlZykpOworCXByX3dhcm4oIiAgICAgICAgOiAgIGZpZm86IDB4JTA4eCAtPiAweCV4XG4iLAorCQljaC0+Zmlmb19zdGFydCwgY2gtPmZpZm9fc3RhcnQgKyBjaC0+Zmlmb19zaXplKTsKKwlwcl93YXJuKCIgICAgICAgIDogICBjdHJsOiAweCUwOHggLT4gMHgleFxuIiwKKwkJY2gtPmN0cmxfc3RhcnQsIGNoLT5jdHJsX3N0YXJ0ICsgNiAqIDE2KTsKKwlwcl93YXJuKCIgICAgICAgIDogICBwdHIxX3JlZzogMHglMDh4XG4iLAorCQljeF9yZWFkKGNoLT5wdHIxX3JlZykpOworCXByX3dhcm4oIiAgICAgICAgOiAgIHB0cjJfcmVnOiAweCUwOHhcbiIsCisJCWN4X3JlYWQoY2gtPnB0cjJfcmVnKSk7CisJcHJfd2FybigiICAgICAgICA6ICAgY250MV9yZWc6IDB4JTA4eFxuIiwKKwkJY3hfcmVhZChjaC0+Y250MV9yZWcpKTsKKwlwcl93YXJuKCIgICAgICAgIDogICBjbnQyX3JlZzogMHglMDh4XG4iLAorCQljeF9yZWFkKGNoLT5jbnQyX3JlZykpOwogfQogRVhQT1JUX1NZTUJPTChjeDI1ODIxX3NyYW1fY2hhbm5lbF9kdW1wKTsKIAogdm9pZCBjeDI1ODIxX3NyYW1fY2hhbm5lbF9kdW1wX2F1ZGlvKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LAogCQkJCSAgICAgc3RydWN0IHNyYW1fY2hhbm5lbCAqY2gpCiB7Ci0Jc3RhdGljIGNoYXIgKm5hbWVbXSA9IHsKKwlzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG5hbWVbXSA9IHsKIAkJImluaXQgcmlzYyBsbyIsCiAJCSJpbml0IHJpc2MgaGkiLAogCQkiY2R0IGJhc2UiLApAQCAtNjg2LDE4ICs2ODYsMTggQEAKIAl1MzIgcmlzYywgdmFsdWUsIHRtcDsKIAl1bnNpZ25lZCBpbnQgaSwgaiwgbjsKIAotCXByaW50ayhLRVJOX0lORk8gIlxuJXM6ICVzIC0gZG1hIEF1ZGlvIGNoYW5uZWwgc3RhdHVzIGR1bXBcbiIsCi0JICAgICAgIGRldi0+bmFtZSwgY2gtPm5hbWUpOworCXByX2luZm8oIlxuJXM6ICVzIC0gZG1hIEF1ZGlvIGNoYW5uZWwgc3RhdHVzIGR1bXBcbiIsCisJCWRldi0+bmFtZSwgY2gtPm5hbWUpOwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobmFtZSk7IGkrKykKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGNtZHMgKyAweCUyeDogICAlLTE1czogMHglMDh4XG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBpICogNCwgbmFtZVtpXSwKLQkJICAgICAgIGN4X3JlYWQoY2gtPmNtZHNfc3RhcnQgKyA0ICogaSkpOworCQlwcl9pbmZvKCIlczogY21kcyArIDB4JTJ4OiAgICUtMTVzOiAweCUwOHhcbiIsCisJCQlkZXYtPm5hbWUsIGkgKiA0LCBuYW1lW2ldLAorCQkJY3hfcmVhZChjaC0+Y21kc19zdGFydCArIDQgKiBpKSk7CiAKIAlqID0gaSAqIDQ7CiAJZm9yIChpID0gMDsgaSA8IDQ7KSB7CiAJCXJpc2MgPSBjeF9yZWFkKGNoLT5jbWRzX3N0YXJ0ICsgNCAqIChpICsgMTQpKTsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY21kcyArIDB4JTJ4OiAgIHJpc2MlZDogIiwgaiArIGkgKiA0LCBpKTsKKwkJcHJfd2FybigiY21kcyArIDB4JTJ4OiAgIHJpc2MlZDogIiwgaiArIGkgKiA0LCBpKTsKIAkJaSArPSBjeDI1ODIxX3Jpc2NfZGVjb2RlKHJpc2MpOwogCX0KIApAQCAtNzA1LDQ0ICs3MDUsNDMgQEAKIAkJcmlzYyA9IGN4X3JlYWQoY2gtPmN0cmxfc3RhcnQgKyA0ICogaSk7CiAJCS8qIE5vIGNvbnNpZGVyYXRpb24gZm9yIGJpdHMgNjMtMzIgKi8KIAotCQlwcmludGsoS0VSTl9XQVJOSU5HICJjdHJsICsgMHglMnggKDB4JTA4eCk6IGlxICV4OiAiLCBpICogNCwKLQkJICAgICAgIGNoLT5jdHJsX3N0YXJ0ICsgNCAqIGksIGkpOworCQlwcl93YXJuKCJjdHJsICsgMHglMnggKDB4JTA4eCk6IGlxICV4OiAiLAorCQkJaSAqIDQsIGNoLT5jdHJsX3N0YXJ0ICsgNCAqIGksIGkpOwogCQluID0gY3gyNTgyMV9yaXNjX2RlY29kZShyaXNjKTsKIAogCQlmb3IgKGogPSAxOyBqIDwgbjsgaisrKSB7CiAJCQlyaXNjID0gY3hfcmVhZChjaC0+Y3RybF9zdGFydCArIDQgKiAoaSArIGopKTsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSAgICAgICAiY3RybCArIDB4JTJ4IDogICBpcSAleDogMHglMDh4IFsgYXJnICMlZCBdXG4iLAotCQkJICAgICAgIDQgKiAoaSArIGopLCBpICsgaiwgcmlzYywgaik7CisJCQlwcl93YXJuKCJjdHJsICsgMHglMnggOiAgIGlxICV4OiAweCUwOHggWyBhcmcgIyVkIF1cbiIsCisJCQkJNCAqIChpICsgaiksIGkgKyBqLCByaXNjLCBqKTsKIAkJfQogCX0KIAotCXByaW50ayhLRVJOX1dBUk5JTkcgIiAgICAgICAgOiAgIGZpZm86IDB4JTA4eCAtPiAweCV4XG4iLAotCSAgICAgICBjaC0+Zmlmb19zdGFydCwgY2gtPmZpZm9fc3RhcnQgKyBjaC0+Zmlmb19zaXplKTsKLQlwcmludGsoS0VSTl9XQVJOSU5HICIgICAgICAgIDogICBjdHJsOiAweCUwOHggLT4gMHgleFxuIiwKLQkgICAgICAgY2gtPmN0cmxfc3RhcnQsIGNoLT5jdHJsX3N0YXJ0ICsgNiAqIDE2KTsKLQlwcmludGsoS0VSTl9XQVJOSU5HICIgICAgICAgIDogICBwdHIxX3JlZzogMHglMDh4XG4iLAotCSAgICAgICBjeF9yZWFkKGNoLT5wdHIxX3JlZykpOwotCXByaW50ayhLRVJOX1dBUk5JTkcgIiAgICAgICAgOiAgIHB0cjJfcmVnOiAweCUwOHhcbiIsCi0JICAgICAgIGN4X3JlYWQoY2gtPnB0cjJfcmVnKSk7Ci0JcHJpbnRrKEtFUk5fV0FSTklORyAiICAgICAgICA6ICAgY250MV9yZWc6IDB4JTA4eFxuIiwKLQkgICAgICAgY3hfcmVhZChjaC0+Y250MV9yZWcpKTsKLQlwcmludGsoS0VSTl9XQVJOSU5HICIgICAgICAgIDogICBjbnQyX3JlZzogMHglMDh4XG4iLAotCSAgICAgICBjeF9yZWFkKGNoLT5jbnQyX3JlZykpOworCXByX3dhcm4oIiAgICAgICAgOiAgIGZpZm86IDB4JTA4eCAtPiAweCV4XG4iLAorCQljaC0+Zmlmb19zdGFydCwgY2gtPmZpZm9fc3RhcnQgKyBjaC0+Zmlmb19zaXplKTsKKwlwcl93YXJuKCIgICAgICAgIDogICBjdHJsOiAweCUwOHggLT4gMHgleFxuIiwKKwkJY2gtPmN0cmxfc3RhcnQsIGNoLT5jdHJsX3N0YXJ0ICsgNiAqIDE2KTsKKwlwcl93YXJuKCIgICAgICAgIDogICBwdHIxX3JlZzogMHglMDh4XG4iLAorCQljeF9yZWFkKGNoLT5wdHIxX3JlZykpOworCXByX3dhcm4oIiAgICAgICAgOiAgIHB0cjJfcmVnOiAweCUwOHhcbiIsCisJCWN4X3JlYWQoY2gtPnB0cjJfcmVnKSk7CisJcHJfd2FybigiICAgICAgICA6ICAgY250MV9yZWc6IDB4JTA4eFxuIiwKKwkJY3hfcmVhZChjaC0+Y250MV9yZWcpKTsKKwlwcl93YXJuKCIgICAgICAgIDogICBjbnQyX3JlZzogMHglMDh4XG4iLAorCQljeF9yZWFkKGNoLT5jbnQyX3JlZykpOwogCiAJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewogCQlyaXNjID0gY3hfcmVhZChjaC0+Y21kc19zdGFydCArIDU2ICsgKGkgKiA0KSk7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImluc3RydWN0aW9uICVkID0gMHgleFxuIiwgaSwgcmlzYyk7CisJCXByX3dhcm4oImluc3RydWN0aW9uICVkID0gMHgleFxuIiwgaSwgcmlzYyk7CiAJfQogCiAJLyogcmVhZCBkYXRhIGZyb20gdGhlIGZpcnN0IGNkdCBidWZmZXIgKi8KIAlyaXNjID0gY3hfcmVhZChBVURfQV9DRFQpOwotCXByaW50ayhLRVJOX1dBUk5JTkcgIlxucmVhZCBjZHQgbG9jPTB4JXhcbiIsIHJpc2MpOworCXByX3dhcm4oIlxucmVhZCBjZHQgbG9jPTB4JXhcbiIsIHJpc2MpOwogCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKIAkJbiA9IGN4X3JlYWQocmlzYyArIGkgKiA0KTsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiMHgleCAiLCBuKTsKKwkJcHJfY29udCgiMHgleCAiLCBuKTsKIAl9Ci0JcHJpbnRrKEtFUk5fV0FSTklORyAiXG5cbiIpOworCXByX2NvbnQoIlxuXG4iKTsKIAogCXZhbHVlID0gY3hfcmVhZChDTEtfUlNUKTsKIAlDWDI1ODIxX0lORk8oIiBDTEtfUlNUID0gMHgleFxuXG4iLCB2YWx1ZSk7CkBAIC04NzAsNyArODY5LDcgQEAKIAkgICAgIGRldi0+bmFtZSkpCiAJCXJldHVybiAwOwogCi0JcHJpbnRrKEtFUk5fRVJSICIlczogY2FuJ3QgZ2V0IE1NSU8gbWVtb3J5IEAgMHglbGx4XG4iLAorCXByX2VycigiJXM6IGNhbid0IGdldCBNTUlPIG1lbW9yeSBAIDB4JWxseFxuIiwKIAkgICAgICAgZGV2LT5uYW1lLCAodW5zaWduZWQgbG9uZyBsb25nKXBjaV9yZXNvdXJjZV9zdGFydChkZXYtPnBjaSwgMCkpOwogCiAJcmV0dXJuIC1FQlVTWTsKQEAgLTg4MCw4ICs4NzksOCBAQAogewogCWRldi0+aHdyZXZpc2lvbiA9IGN4X3JlYWQoUkRSX0NGRzIpICYgMHhmZjsKIAotCXByaW50ayhLRVJOX0lORk8gIiVzKCkgSGFyZHdhcmUgcmV2aXNpb24gPSAweCUwMnhcbiIsIF9fZnVuY19fLAotCSAgICAgICBkZXYtPmh3cmV2aXNpb24pOworCXByX2luZm8oIiVzKCk6IEhhcmR3YXJlIHJldmlzaW9uID0gMHglMDJ4XG4iLAorCQlfX2Z1bmNfXywgZGV2LT5od3JldmlzaW9uKTsKIH0KIAogc3RhdGljIHZvaWQgY3gyNTgyMV9pb3VubWFwKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2KQpAQCAtOTAxLDkgKzkwMCw5IEBACiB7CiAJaW50IGlvX3NpemUgPSAwLCBpOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIik7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiY3gyNTgyMSBzZXQgdXBcbiIpOwotCXByaW50ayhLRVJOX0lORk8gIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbiIpOworCXByX2luZm8oIlxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiIpOworCXByX2luZm8oImN4MjU4MjEgc2V0IHVwXG4iKTsKKwlwcl9pbmZvKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG4iKTsKIAogCW11dGV4X2luaXQoJmRldi0+bG9jayk7CiAKQEAgLTkyMCwxMyArOTE5LDExIEBACiAJc3RyY3B5KGN4MjU4MjFfYm9hcmRzW0NYMjU4MjFfQk9BUkRdLm5hbWUsICJjeDI1ODIxIik7CiAKIAlpZiAoZGV2LT5wY2ktPmRldmljZSAhPSAweDgyMTApIHsKLQkJcHJpbnRrKEtFUk5fSU5GTwotCQkgICAgICAgIiVzKCkgRXhpdGluZy4gSW5jb3JyZWN0IEhhcmR3YXJlIGRldmljZSA9IDB4JTAyeFxuIiwKLQkJICAgICAgIF9fZnVuY19fLCBkZXYtPnBjaS0+ZGV2aWNlKTsKKwkJcHJfaW5mbygiJXMoKTogRXhpdGluZy4gSW5jb3JyZWN0IEhhcmR3YXJlIGRldmljZSA9IDB4JTAyeFxuIiwKKwkJCV9fZnVuY19fLCBkZXYtPnBjaS0+ZGV2aWNlKTsKIAkJcmV0dXJuIC0xOwogCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIkF0aGVuYSBIYXJkd2FyZSBkZXZpY2UgPSAweCUwMnhcbiIsCi0JCSAgICAgICBkZXYtPnBjaS0+ZGV2aWNlKTsKKwkJcHJfaW5mbygiQXRoZW5hIEhhcmR3YXJlIGRldmljZSA9IDB4JTAyeFxuIiwgZGV2LT5wY2ktPmRldmljZSk7CiAJfQogCiAJLyogQXBwbHkgYSBzZW5zaWJsZSBjbG9jayBmcmVxdWVuY3kgZm9yIHRoZSBQQ0llIGJyaWRnZSAqLwpAQCAtOTU2LDggKzk1Myw3IEBACiAJZGV2LT5pMmNfYnVzWzBdLmkyY19wZXJpb2QgPSAoMHgwNyA8PCAyNCk7CS8qIDEuOTVNSHogKi8KIAogCWlmIChjeDI1ODIxX2dldF9yZXNvdXJjZXMoZGV2KSA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlcyBObyBtb3JlIFBDSWUgcmVzb3VyY2VzIGZvciAiCi0JCSAgICAgICAic3Vic3lzdGVtOiAlMDR4OiUwNHhcbiIsCisJCXByX2VycigiJXM6IE5vIG1vcmUgUENJZSByZXNvdXJjZXMgZm9yIHN1YnN5c3RlbTogJTA0eDolMDR4XG4iLAogCQkgICAgICAgZGV2LT5uYW1lLCBkZXYtPnBjaS0+c3Vic3lzdGVtX3ZlbmRvciwKIAkJICAgICAgIGRldi0+cGNpLT5zdWJzeXN0ZW1fZGV2aWNlKTsKIApAQCAtOTg1LDExICs5ODEsMTEgQEAKIAogCWRldi0+Ym1taW8gPSAodTggX19pb21lbSAqKSBkZXYtPmxtbWlvOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHN1YnN5c3RlbTogJTA0eDolMDR4LCBib2FyZDogJXMgW2NhcmQ9JWQsJXNdXG4iLAotCSAgICAgICBkZXYtPm5hbWUsIGRldi0+cGNpLT5zdWJzeXN0ZW1fdmVuZG9yLAotCSAgICAgICBkZXYtPnBjaS0+c3Vic3lzdGVtX2RldmljZSwgY3gyNTgyMV9ib2FyZHNbZGV2LT5ib2FyZF0ubmFtZSwKLQkgICAgICAgZGV2LT5ib2FyZCwgY2FyZFtkZXYtPm5yXSA9PSBkZXYtPmJvYXJkID8KLQkgICAgICAgImluc21vZCBvcHRpb24iIDogImF1dG9kZXRlY3RlZCIpOworCXByX2luZm8oIiVzOiBzdWJzeXN0ZW06ICUwNHg6JTA0eCwgYm9hcmQ6ICVzIFtjYXJkPSVkLCVzXVxuIiwKKwkJZGV2LT5uYW1lLCBkZXYtPnBjaS0+c3Vic3lzdGVtX3ZlbmRvciwKKwkJZGV2LT5wY2ktPnN1YnN5c3RlbV9kZXZpY2UsIGN4MjU4MjFfYm9hcmRzW2Rldi0+Ym9hcmRdLm5hbWUsCisJCWRldi0+Ym9hcmQsIGNhcmRbZGV2LT5ucl0gPT0gZGV2LT5ib2FyZCA/CisJCSJpbnNtb2Qgb3B0aW9uIiA6ICJhdXRvZGV0ZWN0ZWQiKTsKIAogCS8qIGluaXQgaGFyZHdhcmUgKi8KIAljeDI1ODIxX2luaXRpYWxpemUoZGV2KTsKQEAgLTEwMDQsOCArMTAwMCw3IEBACiAJY3gyNTgyMV9jYXJkX3NldHVwKGRldik7CiAKIAlpZiAobWVkdXNhX3ZpZGVvX2luaXQoZGV2KSA8IDApCi0JCUNYMjU4MjFfRVJSKCIlcygpIEZhaWxlZCB0byBpbml0aWFsaXplIG1lZHVzYSFcbiIKLQkJLCBfX2Z1bmNfXyk7CisJCUNYMjU4MjFfRVJSKCIlcygpOiBGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtZWR1c2EhXG4iLCBfX2Z1bmNfXyk7CiAKIAljeDI1ODIxX3ZpZGVvX3JlZ2lzdGVyKGRldik7CiAKQEAgLTEwMTcsMTMgKzEwMTIsMTIgQEAKIAlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlCiAJICAgIChkZXYtPmlvY3RsX2RldiwgVkZMX1RZUEVfR1JBQkJFUiwgVklERU9fSU9DVExfQ0gpIDwgMCkgewogCQljeDI1ODIxX3ZpZGVvaW9jdGxfdW5yZWdpc3RlcihkZXYpOwotCQlwcmludGsoS0VSTl9FUlIKLQkJICAgIiVzKCkgRmFpbGVkIHRvIHJlZ2lzdGVyIHZpZGVvIGFkYXB0ZXIgZm9yIElPQ1RMLCBzbyBcCi0JCSAgIHVucmVnaXN0ZXJpbmcgdmlkZW9pb2N0bCBkZXZpY2UuXG4iLCBfX2Z1bmNfXyk7CisJCXByX2VycigiJXMoKTogRmFpbGVkIHRvIHJlZ2lzdGVyIHZpZGVvIGFkYXB0ZXIgZm9yIElPQ1RMLCBzbyB1bnJlZ2lzdGVyaW5nIHZpZGVvaW9jdGwgZGV2aWNlXG4iLAorCQkgICAgICAgX19mdW5jX18pOwogCX0KIAogCWN4MjU4MjFfZGV2X2NoZWNrcmV2aXNpb24oZGV2KTsKLQlDWDI1ODIxX0lORk8oImN4MjU4MjEgc2V0dXAgZG9uZSFcbiIpOworCUNYMjU4MjFfSU5GTygic2V0dXAgZG9uZSFcbiIpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMzYyLDIwICsxMzU2LDIwIEBACiB7CiAJdW5zaWduZWQgaW50IGk7CiAKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICVzIFsweCV4XSIsIG5hbWUsIHRhZywgYml0cyk7CisJcHJpbnRrKEtFUk5fREVCVUcgcHJfZm10KCIlczogJXMgWzB4JXhdIiksIG5hbWUsIHRhZywgYml0cyk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKIAkJaWYgKCEoYml0cyAmICgxIDw8IGkpKSkKIAkJCWNvbnRpbnVlOwogCQlpZiAoc3RyaW5nc1tpXSkKLQkJCXByaW50aygiICVzIiwgc3RyaW5nc1tpXSk7CisJCQlwcl9jb250KCIgJXMiLCBzdHJpbmdzW2ldKTsKIAkJZWxzZQotCQkJcHJpbnRrKCIgJWQiLCBpKTsKKwkJCXByX2NvbnQoIiAlZCIsIGkpOwogCQlpZiAoIShtYXNrICYgKDEgPDwgaSkpKQogCQkJY29udGludWU7Ci0JCXByaW50aygiKiIpOworCQlwcl9jb250KCIqIik7CiAJfQotCXByaW50aygiXG4iKTsKKwlwcl9jb250KCJcbiIpOwogfQogRVhQT1JUX1NZTUJPTChjeDI1ODIxX3ByaW50X2lycWJpdHMpOwogCkBAIC0xNDA1LDEyICsxMzk5LDEyIEBACiAJaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBjaV9kZXYpKSB7CiAJCWVyciA9IC1FSU87CiAKLQkJcHJpbnRrKEtFUk5fSU5GTyAicGNpIGVuYWJsZSBmYWlsZWQhICIpOworCQlwcl9pbmZvKCJwY2kgZW5hYmxlIGZhaWxlZCFcbiIpOwogCiAJCWdvdG8gZmFpbF91bnJlZ2lzdGVyX2RldmljZTsKIAl9CiAKLQlwcmludGsoS0VSTl9JTkZPICJjeDI1ODIxIEF0aGVuYSBwY2kgZW5hYmxlICFcbiIpOworCXByX2luZm8oIkF0aGVuYSBwY2kgZW5hYmxlICFcbiIpOwogCiAJZXJyID0gY3gyNTgyMV9kZXZfc2V0dXAoZGV2KTsKIAlpZiAoZXJyKSB7CkBAIC0xNDIzLDE0ICsxNDE3LDEzIEBACiAJLyogcHJpbnQgcGNpIGluZm8gKi8KIAlwY2lfcmVhZF9jb25maWdfYnl0ZShwY2lfZGV2LCBQQ0lfQ0xBU1NfUkVWSVNJT04sICZkZXYtPnBjaV9yZXYpOwogCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBjaV9kZXYsIFBDSV9MQVRFTkNZX1RJTUVSLCAmZGV2LT5wY2lfbGF0KTsKLQlwcmludGsoS0VSTl9JTkZPICIlcy8wOiBmb3VuZCBhdCAlcywgcmV2OiAlZCwgaXJxOiAlZCwgIgotCSAgICAgICAibGF0ZW5jeTogJWQsIG1taW86IDB4JWxseFxuIiwgZGV2LT5uYW1lLAotCSAgICAgICBwY2lfbmFtZShwY2lfZGV2KSwgZGV2LT5wY2lfcmV2LCBwY2lfZGV2LT5pcnEsCi0JICAgICAgIGRldi0+cGNpX2xhdCwgKHVuc2lnbmVkIGxvbmcgbG9uZylkZXYtPmJhc2VfaW9fYWRkcik7CisJcHJfaW5mbygiJXMvMDogZm91bmQgYXQgJXMsIHJldjogJWQsIGlycTogJWQsIGxhdGVuY3k6ICVkLCBtbWlvOiAweCVsbHhcbiIsCisJCWRldi0+bmFtZSwgcGNpX25hbWUocGNpX2RldiksIGRldi0+cGNpX3JldiwgcGNpX2Rldi0+aXJxLAorCQlkZXYtPnBjaV9sYXQsICh1bnNpZ25lZCBsb25nIGxvbmcpZGV2LT5iYXNlX2lvX2FkZHIpOwogCiAJcGNpX3NldF9tYXN0ZXIocGNpX2Rldik7CiAJaWYgKCFwY2lfZG1hX3N1cHBvcnRlZChwY2lfZGV2LCAweGZmZmZmZmZmKSkgewotCQlwcmludGsoIiVzLzA6IE9vcHM6IG5vIDMyYml0IFBDSSBETUEgPz8/XG4iLCBkZXYtPm5hbWUpOworCQlwcl9lcnIoIiVzLzA6IE9vcHM6IG5vIDMyYml0IFBDSSBETUEgPz8/XG4iLCBkZXYtPm5hbWUpOwogCQllcnIgPSAtRUlPOwogCQlnb3RvIGZhaWxfaXJxOwogCX0KQEAgLTE0NDAsMTUgKzE0MzMsMTQgQEAKIAkJCWRldi0+bmFtZSwgZGV2KTsKIAogCWlmIChlcnIgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbid0IGdldCBJUlEgJWRcbiIsIGRldi0+bmFtZSwKLQkJICAgICAgIHBjaV9kZXYtPmlycSk7CisJCXByX2VycigiJXM6IGNhbid0IGdldCBJUlEgJWRcbiIsIGRldi0+bmFtZSwgcGNpX2Rldi0+aXJxKTsKIAkJZ290byBmYWlsX2lycTsKIAl9CiAKIAlyZXR1cm4gMDsKIAogZmFpbF9pcnE6Ci0JcHJpbnRrKEtFUk5fSU5GTyAiY3gyNTgyMSBjeDI1ODIxX2luaXRkZXYoKSBjYW4ndCBnZXQgSVJRICFcbiIpOworCXByX2luZm8oImN4MjU4MjFfaW5pdGRldigpIGNhbid0IGdldCBJUlEgIVxuIik7CiAJY3gyNTgyMV9kZXZfdW5yZWdpc3RlcihkZXYpOwogCiBmYWlsX3VucmVnaXN0ZXJfcGNpOgpAQCAtMTUxMCw5ICsxNTAyLDEwIEBACiBzdGF0aWMgaW50IF9faW5pdCBjeDI1ODIxX2luaXQodm9pZCkKIHsKIAlJTklUX0xJU1RfSEVBRCgmY3gyNTgyMV9kZXZsaXN0KTsKLQlwcmludGsoS0VSTl9JTkZPICJjeDI1ODIxIGRyaXZlciB2ZXJzaW9uICVkLiVkLiVkIGxvYWRlZFxuIiwKLQkgICAgICAgKENYMjU4MjFfVkVSU0lPTl9DT0RFID4+IDE2KSAmIDB4ZmYsCi0JICAgICAgIChDWDI1ODIxX1ZFUlNJT05fQ09ERSA+PiA4KSAmIDB4ZmYsIENYMjU4MjFfVkVSU0lPTl9DT0RFICYgMHhmZik7CisJcHJfaW5mbygiZHJpdmVyIHZlcnNpb24gJWQuJWQuJWQgbG9hZGVkXG4iLAorCQkoQ1gyNTgyMV9WRVJTSU9OX0NPREUgPj4gMTYpICYgMHhmZiwKKwkJKENYMjU4MjFfVkVSU0lPTl9DT0RFID4+IDgpICYgMHhmZiwKKwkJQ1gyNTgyMV9WRVJTSU9OX0NPREUgJiAweGZmKTsKIAlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmY3gyNTgyMV9wY2lfZHJpdmVyKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS1pMmMuYyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtaTJjLmMKaW5kZXggMmIxNGJjYy4uMTMwZGZlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS1pMmMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLWkyYy5jCkBAIC0yMSw2ICsyMSw4IEBACiAgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KIAorI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAorCiAjaW5jbHVkZSAiY3gyNTgyMS5oIgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogCkBAIC0zMiwxMCArMzQsMTEgQEAKIG1vZHVsZV9wYXJhbShpMmNfc2NhbiwgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoaTJjX3NjYW4sICJzY2FuIGkyYyBidXMgYXQgaW5zbW9kIHRpbWUiKTsKIAotI2RlZmluZSBkcHJpbnRrKGxldmVsLCBmbXQsIGFyZy4uLilcCi0JZG8geyBpZiAoaTJjX2RlYnVnID49IGxldmVsKVwKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzLzA6ICIgZm10LCBkZXYtPm5hbWUsICMjIGFyZyk7XAotCX0gd2hpbGUgKDApCisjZGVmaW5lIGRwcmludGsobGV2ZWwsIGZtdCwgYXJnLi4uKQkJCQkJXAorZG8gewkJCQkJCQkJCVwKKwlpZiAoaTJjX2RlYnVnID49IGxldmVsKQkJCQkJCVwKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzLzA6ICIgZm10LCBkZXYtPm5hbWUsICMjYXJnKTsJXAorfSB3aGlsZSAoMCkKIAogI2RlZmluZSBJMkNfV0FJVF9ERUxBWSAzMgogI2RlZmluZSBJMkNfV0FJVF9SRVRSWSA2NApAQCAtOTgsNyArMTAxLDcgQEAKIAkJaWYgKCFpMmNfc2xhdmVfZGlkX2FjayhpMmNfYWRhcCkpCiAJCQlyZXR1cm4gLUVJTzsKIAotCQlkcHJpbnRrKDEsICIlcygpIHJldHVybnMgMFxuIiwgX19mdW5jX18pOworCQlkcHJpbnRrKDEsICIlcygpOiByZXR1cm5zIDBcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0xNjMsNyArMTY2LDcgQEAKIAlyZXR2YWwgPSAtRUlPOwogZXJyOgogCWlmIChpMmNfZGVidWcpCi0JCXByaW50ayhLRVJOX0VSUiAiIEVSUjogJWRcbiIsIHJldHZhbCk7CisJCXByX2VycigiIEVSUjogJWRcbiIsIHJldHZhbCk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtMTg3LDcgKzE5MCw3IEBACiAJCWlmICghaTJjX3NsYXZlX2RpZF9hY2soaTJjX2FkYXApKQogCQkJcmV0dXJuIC1FSU87CiAKLQkJZHByaW50aygxLCAiJXMoKSByZXR1cm5zIDBcbiIsIF9fZnVuY19fKTsKKwkJZHByaW50aygxLCAiJXMoKTogcmV0dXJucyAwXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMjI3LDcgKzIzMCw3IEBACiAJcmV0dmFsID0gLUVJTzsKIGVycjoKIAlpZiAoaTJjX2RlYnVnKQotCQlwcmludGsoS0VSTl9FUlIgIiBFUlI6ICVkXG4iLCByZXR2YWwpOworCQlwcl9lcnIoIiBFUlI6ICVkXG4iLCByZXR2YWwpOwogCXJldHVybiByZXR2YWw7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtbWVkdXNhLXZpZGVvLmMgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLW1lZHVzYS12aWRlby5jCmluZGV4IDFlMTFlMGMuLmZjNzgwZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtbWVkdXNhLXZpZGVvLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS1tZWR1c2EtdmlkZW8uYwpAQCAtMjAsNiArMjAsOCBAQAogICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKwogI2luY2x1ZGUgImN4MjU4MjEuaCIKICNpbmNsdWRlICJjeDI1ODIxLW1lZHVzYS12aWRlby5oIgogI2luY2x1ZGUgImN4MjU4MjEtYmlmZnVuY3MuaCIKQEAgLTQ5OSw5ICs1MDEsOCBAQAogCiAJLyogdmFsaWRhdGUgdGhlIHdpZHRoIC0gY2Fubm90IGJlIG5lZ2F0aXZlICovCiAJaWYgKHdpZHRoID4gTUFYX1dJRFRIKSB7Ci0JCXByaW50awotCQkgICAgKCJjeDI1ODIxICVzKCkgOiB3aWR0aCAlZCA+IE1BWF9XSURUSCAlZCAhIHJlc2V0dGluZyB0byBNQVhfV0lEVEhcbiIsCi0JCSAgICAgX19mdW5jX18sIHdpZHRoLCBNQVhfV0lEVEgpOworCQlwcl9pbmZvKCIlcygpOiB3aWR0aCAlZCA+IE1BWF9XSURUSCAlZCAhIHJlc2V0dGluZyB0byBNQVhfV0lEVEhcbiIsCisJCQlfX2Z1bmNfXywgd2lkdGgsIE1BWF9XSURUSCk7CiAJCXdpZHRoID0gTUFYX1dJRFRIOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlby11cHN0cmVhbS1jaDIuYyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkZW8tdXBzdHJlYW0tY2gyLmMKaW5kZXggNDA1ZTJkYi4uZTJlZmFjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlby11cHN0cmVhbS1jaDIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvLXVwc3RyZWFtLWNoMi5jCkBAIC0yMCw2ICsyMCw4IEBACiAgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KIAorI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAorCiAjaW5jbHVkZSAiY3gyNTgyMS12aWRlby5oIgogI2luY2x1ZGUgImN4MjU4MjEtdmlkZW8tdXBzdHJlYW0tY2gyLmgiCiAKQEAgLTIxMSw4ICsyMTMsNyBAQAogCXUzMiB0bXAgPSAwOwogCiAJaWYgKCFkZXYtPl9pc19ydW5uaW5nX2NoMikgewotCQlwcmludGsKLQkJICAgICgiY3gyNTgyMTogTm8gdmlkZW8gZmlsZSBpcyBjdXJyZW50bHkgcnVubmluZyBzbyByZXR1cm4hXG4iKTsKKwkJcHJfaW5mbygiTm8gdmlkZW8gZmlsZSBpcyBjdXJyZW50bHkgcnVubmluZyBzbyByZXR1cm4hXG4iKTsKIAkJcmV0dXJuOwogCX0KIAkvKiBEaXNhYmxlIFJJU0MgaW50ZXJydXB0cyAqLwpAQCAtMzAxLDE5ICszMDIsMTkgQEAKIAlteWZpbGUgPSBmaWxwX29wZW4oZGV2LT5fZmlsZW5hbWVfY2gyLCBPX1JET05MWSB8IE9fTEFSR0VGSUxFLCAwKTsKIAlpZiAoSVNfRVJSKG15ZmlsZSkpIHsKIAkJY29uc3QgaW50IG9wZW5fZXJybm8gPSAtUFRSX0VSUihteWZpbGUpOwotCQlwcmludGsoIiVzKCk6IEVSUk9SIG9wZW5pbmcgZmlsZSglcykgd2l0aCBlcnJubyA9ICVkIVxuIiwKLQkJCV9fZnVuY19fLCBkZXYtPl9maWxlbmFtZV9jaDIsIG9wZW5fZXJybm8pOworCQlwcl9lcnIoIiVzKCk6IEVSUk9SIG9wZW5pbmcgZmlsZSglcykgd2l0aCBlcnJubyA9ICVkIVxuIiwKKwkJICAgICAgIF9fZnVuY19fLCBkZXYtPl9maWxlbmFtZV9jaDIsIG9wZW5fZXJybm8pOwogCQlyZXR1cm4gUFRSX0VSUihteWZpbGUpOwogCX0gZWxzZSB7CiAJCWlmICghKG15ZmlsZS0+Zl9vcCkpIHsKLQkJCXByaW50aygiJXM6IEZpbGUgaGFzIG5vIGZpbGUgb3BlcmF0aW9ucyByZWdpc3RlcmVkISIsCisJCQlwcl9lcnIoIiVzKCk6IEZpbGUgaGFzIG5vIGZpbGUgb3BlcmF0aW9ucyByZWdpc3RlcmVkIVxuIiwKIAkJCSAgICAgICBfX2Z1bmNfXyk7CiAJCQlmaWxwX2Nsb3NlKG15ZmlsZSwgTlVMTCk7CiAJCQlyZXR1cm4gLUVJTzsKIAkJfQogCiAJCWlmICghbXlmaWxlLT5mX29wLT5yZWFkKSB7Ci0JCQlwcmludGsoIiVzOiBGaWxlIGhhcyBubyBSRUFEIG9wZXJhdGlvbnMgcmVnaXN0ZXJlZCEiLAorCQkJcHJfZXJyKCIlcygpOiBGaWxlIGhhcyBubyBSRUFEIG9wZXJhdGlvbnMgcmVnaXN0ZXJlZCFcbiIsCiAJCQkgICAgICAgX19mdW5jX18pOwogCQkJZmlscF9jbG9zZShteWZpbGUsIE5VTEwpOwogCQkJcmV0dXJuIC1FSU87CkBAIC0zNDAsOSArMzQxLDggQEAKIAkJCWZyYW1lX29mZnNldCArPSB2ZnNfcmVhZF9yZXR2YWw7CiAKIAkJCWlmICh2ZnNfcmVhZF9yZXR2YWwgPCBsaW5lX3NpemUpIHsKLQkJCQlwcmludGsoS0VSTl9JTkZPCi0JCQkJICAgICAgICJEb25lOiBleGl0ICVzKCkgc2luY2Ugbm8gbW9yZSBieXRlcyB0byByZWFkIGZyb20gVmlkZW8gZmlsZS5cbiIsCi0JCQkJICAgICAgIF9fZnVuY19fKTsKKwkJCQlwcl9pbmZvKCJEb25lOiBleGl0ICVzKCkgc2luY2Ugbm8gbW9yZSBieXRlcyB0byByZWFkIGZyb20gVmlkZW8gZmlsZVxuIiwKKwkJCQkJX19mdW5jX18pOwogCQkJCWJyZWFrOwogCQkJfQogCQl9CkBAIC0zNjYsOCArMzY2LDggQEAKIAkgICAgY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBjeDI1ODIxX2RldiwgX2lycV93b3JrX2VudHJ5X2NoMik7CiAKIAlpZiAoIWRldikgewotCQlwcmludGsoIkVSUk9SICVzKCk6IHNpbmNlIGNvbnRhaW5lcl9vZih3b3JrX3N0cnVjdCkgRkFJTEVEIVxuIiwKLQkJCV9fZnVuY19fKTsKKwkJcHJfZXJyKCJFUlJPUiAlcygpOiBzaW5jZSBjb250YWluZXJfb2Yod29ya19zdHJ1Y3QpIEZBSUxFRCFcbiIsCisJCSAgICAgICBfX2Z1bmNfXyk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTM5MywyMSArMzkzLDIwIEBACiAKIAlpZiAoSVNfRVJSKG15ZmlsZSkpIHsKIAkJY29uc3QgaW50IG9wZW5fZXJybm8gPSAtUFRSX0VSUihteWZpbGUpOwotCQlwcmludGsoIiVzKCk6IEVSUk9SIG9wZW5pbmcgZmlsZSglcykgd2l0aCBlcnJubyA9ICVkIVxuIiwKLQkJCV9fZnVuY19fLCBkZXYtPl9maWxlbmFtZV9jaDIsIG9wZW5fZXJybm8pOworCQlwcl9lcnIoIiVzKCk6IEVSUk9SIG9wZW5pbmcgZmlsZSglcykgd2l0aCBlcnJubyA9ICVkIVxuIiwKKwkJICAgICAgIF9fZnVuY19fLCBkZXYtPl9maWxlbmFtZV9jaDIsIG9wZW5fZXJybm8pOwogCQlyZXR1cm4gUFRSX0VSUihteWZpbGUpOwogCX0gZWxzZSB7CiAJCWlmICghKG15ZmlsZS0+Zl9vcCkpIHsKLQkJCXByaW50aygiJXM6IEZpbGUgaGFzIG5vIGZpbGUgb3BlcmF0aW9ucyByZWdpc3RlcmVkISIsCisJCQlwcl9lcnIoIiVzKCk6IEZpbGUgaGFzIG5vIGZpbGUgb3BlcmF0aW9ucyByZWdpc3RlcmVkIVxuIiwKIAkJCSAgICAgICBfX2Z1bmNfXyk7CiAJCQlmaWxwX2Nsb3NlKG15ZmlsZSwgTlVMTCk7CiAJCQlyZXR1cm4gLUVJTzsKIAkJfQogCiAJCWlmICghbXlmaWxlLT5mX29wLT5yZWFkKSB7Ci0JCQlwcmludGsKLQkJCSAgICAoIiVzOiBGaWxlIGhhcyBubyBSRUFEIG9wZXJhdGlvbnMgcmVnaXN0ZXJlZCEgIFJldHVybmluZy4iLAotCQkJICAgICBfX2Z1bmNfXyk7CisJCQlwcl9lcnIoIiVzKCk6IEZpbGUgaGFzIG5vIFJFQUQgb3BlcmF0aW9ucyByZWdpc3RlcmVkISAgUmV0dXJuaW5nXG4iLAorCQkJICAgICAgIF9fZnVuY19fKTsKIAkJCWZpbHBfY2xvc2UobXlmaWxlLCBOVUxMKTsKIAkJCXJldHVybiAtRUlPOwogCQl9CkBAIC00MzUsOSArNDM0LDggQEAKIAkJCQlvZmZzZXQgKz0gdmZzX3JlYWRfcmV0dmFsOwogCiAJCQkJaWYgKHZmc19yZWFkX3JldHZhbCA8IGxpbmVfc2l6ZSkgewotCQkJCQlwcmludGsoS0VSTl9JTkZPCi0JCQkJCSAgICAgICAiRG9uZTogZXhpdCAlcygpIHNpbmNlIG5vIG1vcmUgYnl0ZXMgdG8gcmVhZCBmcm9tIFZpZGVvIGZpbGUuXG4iLAotCQkJCQkgICAgICAgX19mdW5jX18pOworCQkJCQlwcl9pbmZvKCJEb25lOiBleGl0ICVzKCkgc2luY2Ugbm8gbW9yZSBieXRlcyB0byByZWFkIGZyb20gVmlkZW8gZmlsZVxuIiwKKwkJCQkJCV9fZnVuY19fKTsKIAkJCQkJYnJlYWs7CiAJCQkJfQogCQkJfQpAQCAtNDgzLDggKzQ4MSw3IEBACiAJZGV2LT5fcmlzY19zaXplX2NoMiA9IGRldi0+dXBzdHJlYW1fcmlzY2J1Zl9zaXplX2NoMjsKIAogCWlmICghZGV2LT5fZG1hX3ZpcnRfYWRkcl9jaDIpIHsKLQkJcHJpbnRrCi0JCSAgICAoImN4MjU4MjE6IEZBSUxFRCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIFJpc2MgYnVmZmVyISBSZXR1cm5pbmcuXG4iKTsKKwkJcHJfZXJyKCJGQUlMRUQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBSaXNjIGJ1ZmZlciEgUmV0dXJuaW5nXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC01MDQsOCArNTAxLDcgQEAKIAlkZXYtPl9kYXRhX2J1Zl9zaXplX2NoMiA9IGRldi0+dXBzdHJlYW1fZGF0YWJ1Zl9zaXplX2NoMjsKIAogCWlmICghZGV2LT5fZGF0YV9idWZfdmlydF9hZGRyX2NoMikgewotCQlwcmludGsKLQkJICAgICgiY3gyNTgyMTogRkFJTEVEIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgZGF0YSBidWZmZXIhIFJldHVybmluZy5cbiIpOworCQlwcl9lcnIoIkZBSUxFRCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGRhdGEgYnVmZmVyISBSZXR1cm5pbmdcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTUyMSw4ICs1MTcsNyBAQAogCSAgICBjeDI1ODIxX3Jpc2NfYnVmZmVyX3Vwc3RyZWFtX2NoMihkZXYsIGRldi0+cGNpLCAwLCBicGwsCiAJCQkJCSAgICAgZGV2LT5fbGluZXNfY291bnRfY2gyKTsKIAlpZiAocmV0IDwgMCkgewotCQlwcmludGsoS0VSTl9JTkZPCi0JCQkiY3gyNTgyMTogRmFpbGVkIGNyZWF0aW5nIFZpZGVvIFVwc3RyZWFtIFJpc2MgcHJvZ3JhbXMhXG4iKTsKKwkJcHJfaW5mbygiRmFpbGVkIGNyZWF0aW5nIFZpZGVvIFVwc3RyZWFtIFJpc2MgcHJvZ3JhbXMhXG4iKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKQEAgLTYwMiw4ICs1OTcsOCBAQAogCX0KIAogCWlmIChkZXYtPl9maWxlX3N0YXR1c19jaDIgPT0gRU5EX09GX0ZJTEUpIHsKLQkJcHJpbnRrKCJjeDI1ODIxOiBFT0YgQ2hhbm5lbCAyIEZyYW1lY291bnQgPSAlZFxuIiwKLQkJICAgICAgIGRldi0+X2ZyYW1lX2NvdW50X2NoMik7CisJCXByX2luZm8oIkVPRiBDaGFubmVsIDIgRnJhbWVjb3VudCA9ICVkXG4iLAorCQkJZGV2LT5fZnJhbWVfY291bnRfY2gyKTsKIAkJcmV0dXJuIC0xOwogCX0KIAkvKiBFbFNFLCBzZXQgdGhlIGludGVycnVwdCBtYXNrIHJlZ2lzdGVyLCByZS1lbmFibGUgaXJxLiAqLwpAQCAtNzE0LDggKzcwOSw4IEBACiAJICAgIHJlcXVlc3RfaXJxKGRldi0+cGNpLT5pcnEsIGN4MjU4MjFfdXBzdHJlYW1faXJxX2NoMiwKIAkJCUlSUUZfU0hBUkVEIHwgSVJRRl9ESVNBQkxFRCwgZGV2LT5uYW1lLCBkZXYpOwogCWlmIChlcnIgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbid0IGdldCB1cHN0cmVhbSBJUlEgJWRcbiIsIGRldi0+bmFtZSwKLQkJICAgICAgIGRldi0+cGNpLT5pcnEpOworCQlwcl9lcnIoIiVzOiBjYW4ndCBnZXQgdXBzdHJlYW0gSVJRICVkXG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBkZXYtPnBjaS0+aXJxKTsKIAkJZ290byBmYWlsX2lycTsKIAl9CiAJLyogU3RhcnQgdGhlIERNQSAgZW5naW5lICovCkBAIC03NDQsNyArNzM5LDcgQEAKIAlpbnQgc3RyX2xlbmd0aCA9IDA7CiAKIAlpZiAoZGV2LT5faXNfcnVubmluZ19jaDIpIHsKLQkJcHJpbnRrKCJWaWRlbyBDaGFubmVsIGlzIHN0aWxsIHJ1bm5pbmcgc28gcmV0dXJuIVxuIik7CisJCXByX2luZm8oIlZpZGVvIENoYW5uZWwgaXMgc3RpbGwgcnVubmluZyBzbyByZXR1cm4hXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC03NTYsOCArNzUxLDcgQEAKIAkgICAgY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoImN4MjU4MjFfd29ya3F1ZXVlMiIpOwogCiAJaWYgKCFkZXYtPl9pcnFfcXVldWVzX2NoMikgewotCQlwcmludGsKLQkJICAgICgiY3gyNTgyMTogY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoKSBmb3IgVmlkZW8gRkFJTEVEIVxuIik7CisJCXByX2VycigiY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoKSBmb3IgVmlkZW8gRkFJTEVEIVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAkvKgpAQCAtODI5LDggKzgyMyw3IEBACiAJICAgIGN4MjU4MjFfdXBzdHJlYW1fYnVmZmVyX3ByZXBhcmVfY2gyKGRldiwgc3JhbV9jaCwKIAkJCQkJCWRldi0+X2xpbmVfc2l6ZV9jaDIpOwogCWlmIChyZXR2YWwgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgIiVzOiBGYWlsZWQgdG8gc2V0IHVwIFZpZGVvIHVwc3RyZWFtIGJ1ZmZlcnMhXG4iLAorCQlwcl9lcnIoIiVzOiBGYWlsZWQgdG8gc2V0IHVwIFZpZGVvIHVwc3RyZWFtIGJ1ZmZlcnMhXG4iLAogCQkgICAgICAgZGV2LT5uYW1lKTsKIAkJZ290byBlcnJvcjsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvLXVwc3RyZWFtLmMgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvLXVwc3RyZWFtLmMKaW5kZXggMTZiZjc0ZC4uMzFiNGUzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlby11cHN0cmVhbS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkZW8tdXBzdHJlYW0uYwpAQCAtMjAsNiArMjAsOCBAQAogICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKwogI2luY2x1ZGUgImN4MjU4MjEtdmlkZW8uaCIKICNpbmNsdWRlICJjeDI1ODIxLXZpZGVvLXVwc3RyZWFtLmgiCiAKQEAgLTI1Nyw4ICsyNTksNyBAQAogCXUzMiB0bXAgPSAwOwogCiAJaWYgKCFkZXYtPl9pc19ydW5uaW5nKSB7Ci0JCXByaW50awotCQkgICAoS0VSTl9JTkZPICJjeDI1ODIxOiBObyB2aWRlbyBmaWxlIGlzIGN1cnJlbnRseSBydW5uaW5nIHNvIHJldHVybiFcbiIpOworCQlwcl9pbmZvKCJObyB2aWRlbyBmaWxlIGlzIGN1cnJlbnRseSBydW5uaW5nIHNvIHJldHVybiFcbiIpOwogCQlyZXR1cm47CiAJfQogCS8qIERpc2FibGUgUklTQyBpbnRlcnJ1cHRzICovCkBAIC0zNDYsMjMgKzM0NywyMCBAQAogCiAJaWYgKElTX0VSUihteWZpbGUpKSB7CiAJCWNvbnN0IGludCBvcGVuX2Vycm5vID0gLVBUUl9FUlIobXlmaWxlKTsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICIlcygpOiBFUlJPUiBvcGVuaW5nIGZpbGUoJXMpIHdpdGggZXJybm8gPSAlZCFcbiIsCi0JCSAgIF9fZnVuY19fLCBkZXYtPl9maWxlbmFtZSwgb3Blbl9lcnJubyk7CisJCXByX2VycigiJXMoKTogRVJST1Igb3BlbmluZyBmaWxlKCVzKSB3aXRoIGVycm5vID0gJWQhXG4iLAorCQkgICAgICAgX19mdW5jX18sIGRldi0+X2ZpbGVuYW1lLCBvcGVuX2Vycm5vKTsKIAkJcmV0dXJuIFBUUl9FUlIobXlmaWxlKTsKIAl9IGVsc2UgewogCQlpZiAoIShteWZpbGUtPmZfb3ApKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIKLQkJCSAgICIlczogRmlsZSBoYXMgbm8gZmlsZSBvcGVyYXRpb25zIHJlZ2lzdGVyZWQhIiwKLQkJCSAgIF9fZnVuY19fKTsKKwkJCXByX2VycigiJXMoKTogRmlsZSBoYXMgbm8gZmlsZSBvcGVyYXRpb25zIHJlZ2lzdGVyZWQhXG4iLAorCQkJICAgICAgIF9fZnVuY19fKTsKIAkJCWZpbHBfY2xvc2UobXlmaWxlLCBOVUxMKTsKIAkJCXJldHVybiAtRUlPOwogCQl9CiAKIAkJaWYgKCFteWZpbGUtPmZfb3AtPnJlYWQpIHsKLQkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgIiVzOiBGaWxlIGhhcyBubyBSRUFEIG9wZXJhdGlvbnMgcmVnaXN0ZXJlZCEiLAotCQkJICAgX19mdW5jX18pOworCQkJcHJfZXJyKCIlcygpOiBGaWxlIGhhcyBubyBSRUFEIG9wZXJhdGlvbnMgcmVnaXN0ZXJlZCFcbiIsCisJCQkgICAgICAgX19mdW5jX18pOwogCQkJZmlscF9jbG9zZShteWZpbGUsIE5VTEwpOwogCQkJcmV0dXJuIC1FSU87CiAJCX0KQEAgLTM4OCwxMCArMzg2LDggQEAKIAkJCWZyYW1lX29mZnNldCArPSB2ZnNfcmVhZF9yZXR2YWw7CiAKIAkJCWlmICh2ZnNfcmVhZF9yZXR2YWwgPCBsaW5lX3NpemUpIHsKLQkJCQlwcmludGsoS0VSTl9JTkZPCi0JCQkJICAgICAgIkRvbmU6IGV4aXQgJXMoKSBzaW5jZSBubyBtb3JlIGJ5dGVzIHRvIFwKLQkJCQkgICAgICByZWFkIGZyb20gVmlkZW8gZmlsZS5cbiIsCi0JCQkJICAgICAgIF9fZnVuY19fKTsKKwkJCQlwcl9pbmZvKCJEb25lOiBleGl0ICVzKCkgc2luY2Ugbm8gbW9yZSBieXRlcyB0byByZWFkIGZyb20gVmlkZW8gZmlsZVxuIiwKKwkJCQkJX19mdW5jX18pOwogCQkJCWJyZWFrOwogCQkJfQogCQl9CkBAIC00MTUsOSArNDExLDggQEAKIAkgICAgY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBjeDI1ODIxX2RldiwgX2lycV93b3JrX2VudHJ5KTsKIAogCWlmICghZGV2KSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkgICAiRVJST1IgJXMoKTogc2luY2UgY29udGFpbmVyX29mKHdvcmtfc3RydWN0KSBGQUlMRUQhXG4iLAotCQkgICBfX2Z1bmNfXyk7CisJCXByX2VycigiRVJST1IgJXMoKTogc2luY2UgY29udGFpbmVyX29mKHdvcmtfc3RydWN0KSBGQUlMRUQhXG4iLAorCQkgICAgICAgX19mdW5jX18pOwogCQlyZXR1cm47CiAJfQogCkBAIC00NDMsMjMgKzQzOCwyMCBAQAogCiAJaWYgKElTX0VSUihteWZpbGUpKSB7CiAJCWNvbnN0IGludCBvcGVuX2Vycm5vID0gLVBUUl9FUlIobXlmaWxlKTsKLQkgICAgICAgcHJpbnRrKEtFUk5fRVJSICAiJXMoKTogRVJST1Igb3BlbmluZyBmaWxlKCVzKSB3aXRoIGVycm5vID0gJWQhXG4iLAorCQlwcl9lcnIoIiVzKCk6IEVSUk9SIG9wZW5pbmcgZmlsZSglcykgd2l0aCBlcnJubyA9ICVkIVxuIiwKIAkJICAgICAgIF9fZnVuY19fLCBkZXYtPl9maWxlbmFtZSwgb3Blbl9lcnJubyk7CiAJCXJldHVybiBQVFJfRVJSKG15ZmlsZSk7CiAJfSBlbHNlIHsKIAkJaWYgKCEobXlmaWxlLT5mX29wKSkgewotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAiJXM6IEZpbGUgaGFzIG5vIGZpbGUgb3BlcmF0aW9ucyByZWdpc3RlcmVkISIsCi0JCQkgICBfX2Z1bmNfXyk7CisJCQlwcl9lcnIoIiVzKCk6IEZpbGUgaGFzIG5vIGZpbGUgb3BlcmF0aW9ucyByZWdpc3RlcmVkIVxuIiwKKwkJCSAgICAgICBfX2Z1bmNfXyk7CiAJCQlmaWxwX2Nsb3NlKG15ZmlsZSwgTlVMTCk7CiAJCQlyZXR1cm4gLUVJTzsKIAkJfQogCiAJCWlmICghbXlmaWxlLT5mX29wLT5yZWFkKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIKLQkJCSAgICIlczogRmlsZSBoYXMgbm8gUkVBRCBvcGVyYXRpb25zIHJlZ2lzdGVyZWQhICBcCi0JCQkgICBSZXR1cm5pbmcuIiwKLQkJCSAgICAgX19mdW5jX18pOworCQkJcHJfZXJyKCIlcygpOiBGaWxlIGhhcyBubyBSRUFEIG9wZXJhdGlvbnMgcmVnaXN0ZXJlZCEgIFJldHVybmluZ1xuIiwKKwkJCSAgICAgICBfX2Z1bmNfXyk7CiAJCQlmaWxwX2Nsb3NlKG15ZmlsZSwgTlVMTCk7CiAJCQlyZXR1cm4gLUVJTzsKIAkJfQpAQCAtNDg3LDEwICs0NzksOCBAQAogCQkJCW9mZnNldCArPSB2ZnNfcmVhZF9yZXR2YWw7CiAKIAkJCQlpZiAodmZzX3JlYWRfcmV0dmFsIDwgbGluZV9zaXplKSB7Ci0JCQkJCXByaW50ayhLRVJOX0lORk8KLQkJCQkJICAgICJEb25lOiBleGl0ICVzKCkgc2luY2Ugbm8gbW9yZSBcCi0JCQkJCSAgICBieXRlcyB0byByZWFkIGZyb20gVmlkZW8gZmlsZS5cbiIsCi0JCQkJCSAgICAgICBfX2Z1bmNfXyk7CisJCQkJCXByX2luZm8oIkRvbmU6IGV4aXQgJXMoKSBzaW5jZSBubyBtb3JlIGJ5dGVzIHRvIHJlYWQgZnJvbSBWaWRlbyBmaWxlXG4iLAorCQkJCQkJX19mdW5jX18pOwogCQkJCQlicmVhazsKIAkJCQl9CiAJCQl9CkBAIC01MzQsOSArNTI0LDcgQEAKIAlkZXYtPl9yaXNjX3NpemUgPSBkZXYtPnVwc3RyZWFtX3Jpc2NidWZfc2l6ZTsKIAogCWlmICghZGV2LT5fZG1hX3ZpcnRfYWRkcikgewotCQlwcmludGsKLQkJICAgKEtFUk5fRVJSICJjeDI1ODIxOiBGQUlMRUQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBSaXNjIFwKLQkJICAgYnVmZmVyISBSZXR1cm5pbmcuXG4iKTsKKwkJcHJfZXJyKCJGQUlMRUQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBSaXNjIGJ1ZmZlciEgUmV0dXJuaW5nXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC01NTYsOSArNTQ0LDcgQEAKIAlkZXYtPl9kYXRhX2J1Zl9zaXplID0gZGV2LT51cHN0cmVhbV9kYXRhYnVmX3NpemU7CiAKIAlpZiAoIWRldi0+X2RhdGFfYnVmX3ZpcnRfYWRkcikgewotCQlwcmludGsKLQkJICAgKEtFUk5fRVJSICJjeDI1ODIxOiBGQUlMRUQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBkYXRhIFwKLQkJICAgYnVmZmVyISBSZXR1cm5pbmcuXG4iKTsKKwkJcHJfZXJyKCJGQUlMRUQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBkYXRhIGJ1ZmZlciEgUmV0dXJuaW5nXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC01NzQsOCArNTYwLDcgQEAKIAkgICAgY3gyNTgyMV9yaXNjX2J1ZmZlcl91cHN0cmVhbShkZXYsIGRldi0+cGNpLCAwLCBicGwsCiAJCQkJCSBkZXYtPl9saW5lc19jb3VudCk7CiAJaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fSU5GTwotCQkgICAgImN4MjU4MjE6IEZhaWxlZCBjcmVhdGluZyBWaWRlbyBVcHN0cmVhbSBSaXNjIHByb2dyYW1zIVxuIik7CisJCXByX2luZm8oIkZhaWxlZCBjcmVhdGluZyBWaWRlbyBVcHN0cmVhbSBSaXNjIHByb2dyYW1zIVxuIik7CiAJCWdvdG8gZXJyb3I7CiAJfQogCkBAIC02NTIsMjIgKzYzNywyMCBAQAogCQlzcGluX3VubG9jaygmZGV2LT5zbG9jayk7CiAJfSBlbHNlIHsKIAkJaWYgKHN0YXR1cyAmIEZMRF9WSURfU1JDX1VGKQotCQkJcHJpbnRrCi0JCQkgICAoS0VSTl9FUlIgIiVzOiBWaWRlbyBSZWNlaXZlZCBVbmRlcmZsb3cgRXJyb3IgXAotCQkJICAgSW50ZXJydXB0IVxuIiwgX19mdW5jX18pOworCQkJcHJfZXJyKCIlcygpOiBWaWRlbyBSZWNlaXZlZCBVbmRlcmZsb3cgRXJyb3IgSW50ZXJydXB0IVxuIiwKKwkJCSAgICAgICBfX2Z1bmNfXyk7CiAKIAkJaWYgKHN0YXR1cyAmIEZMRF9WSURfU1JDX1NZTkMpCi0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBWaWRlbyBSZWNlaXZlZCBTeW5jIEVycm9yIFwKLQkJCQlJbnRlcnJ1cHQhXG4iLCBfX2Z1bmNfXyk7CisJCQlwcl9lcnIoIiVzKCk6IFZpZGVvIFJlY2VpdmVkIFN5bmMgRXJyb3IgSW50ZXJydXB0IVxuIiwKKwkJCSAgICAgICBfX2Z1bmNfXyk7CiAKIAkJaWYgKHN0YXR1cyAmIEZMRF9WSURfU1JDX09QQ19FUlIpCi0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBWaWRlbyBSZWNlaXZlZCBPcENvZGUgRXJyb3IgXAotCQkJCUludGVycnVwdCFcbiIsIF9fZnVuY19fKTsKKwkJCXByX2VycigiJXMoKTogVmlkZW8gUmVjZWl2ZWQgT3BDb2RlIEVycm9yIEludGVycnVwdCFcbiIsCisJCQkgICAgICAgX19mdW5jX18pOwogCX0KIAogCWlmIChkZXYtPl9maWxlX3N0YXR1cyA9PSBFTkRfT0ZfRklMRSkgewotCQlwcmludGsoS0VSTl9FUlIgImN4MjU4MjE6IEVPRiBDaGFubmVsIDEgRnJhbWVjb3VudCA9ICVkXG4iLAotCQkgICAgICAgZGV2LT5fZnJhbWVfY291bnQpOworCQlwcl9lcnIoIkVPRiBDaGFubmVsIDEgRnJhbWVjb3VudCA9ICVkXG4iLCBkZXYtPl9mcmFtZV9jb3VudCk7CiAJCXJldHVybiAtMTsKIAl9CiAJLyogRWxTRSwgc2V0IHRoZSBpbnRlcnJ1cHQgbWFzayByZWdpc3RlciwgcmUtZW5hYmxlIGlycS4gKi8KQEAgLTc3NSw4ICs3NTgsOCBAQAogCSAgICByZXF1ZXN0X2lycShkZXYtPnBjaS0+aXJxLCBjeDI1ODIxX3Vwc3RyZWFtX2lycSwKIAkJCUlSUUZfU0hBUkVEIHwgSVJRRl9ESVNBQkxFRCwgZGV2LT5uYW1lLCBkZXYpOwogCWlmIChlcnIgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbid0IGdldCB1cHN0cmVhbSBJUlEgJWRcbiIsIGRldi0+bmFtZSwKLQkJICAgICAgIGRldi0+cGNpLT5pcnEpOworCQlwcl9lcnIoIiVzOiBjYW4ndCBnZXQgdXBzdHJlYW0gSVJRICVkXG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBkZXYtPnBjaS0+aXJxKTsKIAkJZ290byBmYWlsX2lycTsKIAl9CiAKQEAgLTgwNiw3ICs3ODksNyBAQAogCWludCBzdHJfbGVuZ3RoID0gMDsKIAogCWlmIChkZXYtPl9pc19ydW5uaW5nKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIlZpZGVvIENoYW5uZWwgaXMgc3RpbGwgcnVubmluZyBzbyByZXR1cm4hXG4iKTsKKwkJcHJfaW5mbygiVmlkZW8gQ2hhbm5lbCBpcyBzdGlsbCBydW5uaW5nIHNvIHJldHVybiFcbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTgxNyw5ICs4MDAsNyBAQAogCWRldi0+X2lycV9xdWV1ZXMgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgiY3gyNTgyMV93b3JrcXVldWUiKTsKIAogCWlmICghZGV2LT5faXJxX3F1ZXVlcykgewotCQlwcmludGsKLQkJICAgKEtFUk5fRVJSICJjeDI1ODIxOiBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgpIGZvciBcCi0JCSAgIFZpZGVvIEZBSUxFRCFcbiIpOworCQlwcl9lcnIoImNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCkgZm9yIFZpZGVvIEZBSUxFRCFcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJLyogNjU2L1ZJUCBTUkMgVXBzdHJlYW0gQ2hhbm5lbCBJICYgSiBhbmQgNyAtIEhvc3QgQnVzIEludGVyZmFjZSBmb3IKQEAgLTg5NSw4ICs4NzYsNyBAQAogCS8qIEFsbG9jYXRpbmcgYnVmZmVycyBhbmQgcHJlcGFyZSBSSVNDIHByb2dyYW0gKi8KIAlyZXR2YWwgPSBjeDI1ODIxX3Vwc3RyZWFtX2J1ZmZlcl9wcmVwYXJlKGRldiwgc3JhbV9jaCwgZGV2LT5fbGluZV9zaXplKTsKIAlpZiAocmV0dmFsIDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICIlczogRmFpbGVkIHRvIHNldCB1cCBWaWRlbyB1cHN0cmVhbSBidWZmZXJzIVxuIiwKKwkJcHJfZXJyKCIlczogRmFpbGVkIHRvIHNldCB1cCBWaWRlbyB1cHN0cmVhbSBidWZmZXJzIVxuIiwKIAkJICAgICAgIGRldi0+bmFtZSk7CiAJCWdvdG8gZXJyb3I7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlby5jIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlby5jCmluZGV4IDUyMzg5MzAuLjBkOGQ3NTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkZW8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvLmMKQEAgLTI0LDcgKzI0LDEwIEBACiAgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KIAorI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAorCiAjaW5jbHVkZSAiY3gyNTgyMS12aWRlby5oIgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAKIE1PRFVMRV9ERVNDUklQVElPTigidjRsMiBkcml2ZXIgbW9kdWxlIGZvciBjeDI1ODIxIGJhc2VkIFRWIGNhcmRzIik7CiBNT0RVTEVfQVVUSE9SKCJIaWVwIEh1eW5oIDxoaWVwLmh1eW5oQGNvbmV4YW50LmNvbT4iKTsKQEAgLTEwNCw3ICsxMDcsNyBAQAogCQlpZiAoZm9ybWF0c1tpXS5mb3VyY2MgPT0gZm91cmNjKQogCQkJcmV0dXJuIGZvcm1hdHMgKyBpOwogCi0JcHJpbnRrKEtFUk5fRVJSICIlcygweCUwOHgpIE5PVCBGT1VORFxuIiwgX19mdW5jX18sIGZvdXJjYyk7CisJcHJfZXJyKCIlcygweCUwOHgpIE5PVCBGT1VORFxuIiwgX19mdW5jX18sIGZvdXJjYyk7CiAJcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTE1OSwxNSArMTYyLDE1IEBACiAJZWxzZQogCQltb2RfdGltZXIoJnEtPnRpbWVvdXQsIGppZmZpZXMgKyBCVUZGRVJfVElNRU9VVCk7CiAJaWYgKGJjICE9IDEpCi0JCXByaW50ayhLRVJOX0VSUiAiJXM6ICVkIGJ1ZmZlcnMgaGFuZGxlZCAoc2hvdWxkIGJlIDEpXG4iLAorCQlwcl9lcnIoIiVzOiAlZCBidWZmZXJzIGhhbmRsZWQgKHNob3VsZCBiZSAxKVxuIiwKIAkJICAgICAgIF9fZnVuY19fLCBiYyk7CiB9CiAKICNpZmRlZiBUVU5FUl9GTEFHCiBpbnQgY3gyNTgyMV9zZXRfdHZub3JtKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LCB2NGwyX3N0ZF9pZCBub3JtKQogewotCWRwcmludGsoMSwgIiVzKG5vcm0gPSAweCUwOHgpIG5hbWU6IFslc11cbiIsIF9fZnVuY19fLAotCQkodW5zaWduZWQgaW50KW5vcm0sIHY0bDJfbm9ybV90b19uYW1lKG5vcm0pKTsKKwlkcHJpbnRrKDEsICIlcyhub3JtID0gMHglMDh4KSBuYW1lOiBbJXNdXG4iLAorCQlfX2Z1bmNfXywgKHVuc2lnbmVkIGludClub3JtLCB2NGwyX25vcm1fdG9fbmFtZShub3JtKSk7CiAKIAlkZXYtPnR2bm9ybSA9IG5vcm07CiAKQEAgLTI2Nyw3ICsyNzAsNyBAQAogCXN0cnVjdCB2NGwyX3JvdXRpbmcgcm91dGU7CiAJbWVtc2V0KCZyb3V0ZSwgMCwgc2l6ZW9mKHJvdXRlKSk7CiAKLQlkcHJpbnRrKDEsICIlcygpIHZpZGVvX211eDogJWQgW3ZtdXg9JWQsIGdwaW89MHgleCwweCV4LDB4JXgsMHgleF1cbiIsCisJZHByaW50aygxLCAiJXMoKTogdmlkZW9fbXV4OiAlZCBbdm11eD0lZCwgZ3Bpbz0weCV4LDB4JXgsMHgleCwweCV4XVxuIiwKIAkJX19mdW5jX18sIGlucHV0LCBJTlBVVChpbnB1dCktPnZtdXgsIElOUFVUKGlucHV0KS0+Z3BpbzAsCiAJCUlOUFVUKGlucHV0KS0+Z3BpbzEsIElOUFVUKGlucHV0KS0+Z3BpbzIsIElOUFVUKGlucHV0KS0+Z3BpbzMpOwogCWRldi0+aW5wdXQgPSBpbnB1dDsKQEAgLTQwMCw4ICs0MDMsOCBAQAogCiAJLyogcmlzYyBvcCBjb2RlIGVycm9yICovCiAJaWYgKHN0YXR1cyAmICgxIDw8IDE2KSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlcywgJXM6IHZpZGVvIHJpc2Mgb3AgY29kZSBlcnJvclxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgY2hhbm5lbC0+bmFtZSk7CisJCXByX3dhcm4oIiVzLCAlczogdmlkZW8gcmlzYyBvcCBjb2RlIGVycm9yXG4iLAorCQkJZGV2LT5uYW1lLCBjaGFubmVsLT5uYW1lKTsKIAkJY3hfY2xlYXIoY2hhbm5lbC0+ZG1hX2N0bCwgMHgxMSk7CiAJCWN4MjU4MjFfc3JhbV9jaGFubmVsX2R1bXAoZGV2LCBjaGFubmVsKTsKIAl9CkBAIC00NTgsNyArNDYxLDcgQEAKIAkgICAgICAgYnRjeF9yaXNjbWVtX2ZyZWUoZGV2LT5wY2ksCiAJCSAgICAgICAmZGV2LT5jaGFubmVsc1tjaGFuX251bV0udmlkcS5zdG9wcGVyKTsKIAotCQlwcmludGsoS0VSTl9XQVJOSU5HICJkZXZpY2UgJWQgcmVsZWFzZWQhXG4iLCBjaGFuX251bSk7CisJCXByX3dhcm4oImRldmljZSAlZCByZWxlYXNlZCFcbiIsIGNoYW5fbnVtKTsKIAl9CiAKIH0KQEAgLTU5MCw3ICs1OTMsNyBAQAogCQlpbml0X2J1ZmZlciA9IDE7CiAJCXJjID0gdmlkZW9idWZfaW9sb2NrKHEsICZidWYtPnZiLCBOVUxMKTsKIAkJaWYgKDAgIT0gcmMpIHsKLQkJCXByaW50ayhLRVJOX0RFQlVHICJ2aWRlb2J1Zl9pb2xvY2sgZmFpbGVkIVxuIik7CisJCQlwcmludGsoS0VSTl9ERUJVRyBwcl9mbXQoInZpZGVvYnVmX2lvbG9jayBmYWlsZWQhXG4iKSk7CiAJCQlnb3RvIGZhaWw7CiAJCX0KIAl9CkBAIC0xMDM4LDggKzEwNDEsOCBAQAogICAgICAgIGRldi0+Y2hhbm5lbHNbZmgtPmNoYW5uZWxfaWRdLmNpZl93aWR0aCA9IGZoLT53aWR0aDsKICAgICAgICBtZWR1c2Ffc2V0X3Jlc29sdXRpb24oZGV2LCBmaC0+d2lkdGgsIFNSQU1fQ0gwMCk7CiAKLSAgICAgICBkcHJpbnRrKDIsICIlcygpIHdpZHRoPSVkIGhlaWdodD0lZCBmaWVsZD0lZFxuIiwgX19mdW5jX18sIGZoLT53aWR0aCwKLQkgICAgICAgZmgtPmhlaWdodCwgZmgtPnZpZHEuZmllbGQpOworCWRwcmludGsoMiwgIiVzKCk6IHdpZHRoPSVkIGhlaWdodD0lZCBmaWVsZD0lZFxuIiwgX19mdW5jX18sIGZoLT53aWR0aCwKKwkJZmgtPmhlaWdodCwgZmgtPnZpZHEuZmllbGQpOwogCXY0bDJfZmlsbF9tYnVzX2Zvcm1hdCgmbWJ1c19mbXQsICZmLT5mbXQucGl4LCBWNEwyX01CVVNfRk1UX0ZJWEVEKTsKIAljeDI1ODIxX2NhbGxfYWxsKGRldiwgdmlkZW8sIHNfbWJ1c19mbXQsICZtYnVzX2ZtdCk7CiAKQEAgLTEwNzAsMTQgKzEwNzMsMTQgQEAKICAgICAgICB1MzIgdG1wID0gMDsKIAogICAgICAgIHNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIiVzLzIiLCBkZXYtPm5hbWUpOwotICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzLzI6ID09PT09PT09PT09PSAgU1RBUlQgTE9HIFNUQVRVUyAgPT09PT09PT09PT09XG4iLAotCSAgICAgIGRldi0+bmFtZSk7CisJcHJfaW5mbygiJXMvMjogPT09PT09PT09PT09ICBTVEFSVCBMT0cgU1RBVFVTICA9PT09PT09PT09PT1cbiIsCisJCWRldi0+bmFtZSk7CiAgICAgICAgY3gyNTgyMV9jYWxsX2FsbChkZXYsIGNvcmUsIGxvZ19zdGF0dXMpOwogICAgICAgIHRtcCA9IGN4X3JlYWQoc3JhbV9jaC0+ZG1hX2N0bCk7Ci0gICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiVmlkZW8gaW5wdXQgMCBpcyAlc1xuIiwKLQkgICAgICAodG1wICYgMHgxMSkgPyAic3RyZWFtaW5nIiA6ICJzdG9wcGVkIik7Ci0gICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXMvMjogPT09PT09PT09PT09PSAgRU5EIExPRyBTVEFUVVMgID09PT09PT09PT09PT1cbiIsCi0JICAgICAgZGV2LT5uYW1lKTsKKwlwcl9pbmZvKCJWaWRlbyBpbnB1dCAwIGlzICVzXG4iLAorCQkodG1wICYgMHgxMSkgPyAic3RyZWFtaW5nIiA6ICJzdG9wcGVkIik7CisJcHJfaW5mbygiJXMvMjogPT09PT09PT09PT09PSAgRU5EIExPRyBTVEFUVVMgID09PT09PT09PT09PT1cbiIsCisJCWRldi0+bmFtZSk7CiAgICAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTExODYsMzQgKzExODksNiBAQAogCXJldHVybiAwOwogfQogCi0jaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCi1pbnQgY3gyNTgyMV92aWRpb2NnbWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHZpZGVvX21idWYgKm1idWYpCi17Ci0Jc3RydWN0IGN4MjU4MjFfZmggKmZoID0gcHJpdjsKLQlzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnE7Ci0Jc3RydWN0IHY0bDJfcmVxdWVzdGJ1ZmZlcnMgcmVxOwotCXVuc2lnbmVkIGludCBpOwotCWludCBlcnI7Ci0KLQlxID0gZ2V0X3F1ZXVlKGZoKTsKLQltZW1zZXQoJnJlcSwgMCwgc2l6ZW9mKHJlcSkpOwotCXJlcS50eXBlID0gcS0+dHlwZTsKLQlyZXEuY291bnQgPSA4OwotCXJlcS5tZW1vcnkgPSBWNEwyX01FTU9SWV9NTUFQOwotCWVyciA9IHZpZGVvYnVmX3JlcWJ1ZnMocSwgJnJlcSk7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7Ci0KLQltYnVmLT5mcmFtZXMgPSByZXEuY291bnQ7Ci0JbWJ1Zi0+c2l6ZSA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IG1idWYtPmZyYW1lczsgaSsrKSB7Ci0JCW1idWYtPm9mZnNldHNbaV0gPSBxLT5idWZzW2ldLT5ib2ZmOwotCQltYnVmLT5zaXplICs9IHEtPmJ1ZnNbaV0tPmJzaXplOwotCX0KLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgotCiBpbnQgY3gyNTgyMV92aWRpb2NfcmVxYnVmcyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfcmVxdWVzdGJ1ZmZlcnMgKnApCiB7CiAJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gcHJpdjsKQEAgLTEyOTgsOCArMTI3Myw2IEBACiAJaWYgKDAgPT0gSU5QVVQobiktPnR5cGUpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JbWVtc2V0KGksIDAsIHNpemVvZigqaSkpOwotCWktPmluZGV4ID0gbjsKIAlpLT50eXBlID0gVjRMMl9JTlBVVF9UWVBFX0NBTUVSQTsKIAlzdHJjcHkoaS0+bmFtZSwgaW5hbWVbSU5QVVQobiktPnR5cGVdKTsKIApAQCAtMTMxOSw3ICsxMjkyLDcgQEAKIAlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9ICgoc3RydWN0IGN4MjU4MjFfZmggKilwcml2KS0+ZGV2OwogCiAJKmkgPSBkZXYtPmlucHV0OwotCWRwcmludGsoMSwgIiVzKCkgcmV0dXJucyAlZFxuIiwgX19mdW5jX18sICppKTsKKwlkcHJpbnRrKDEsICIlcygpOiByZXR1cm5zICVkXG4iLCBfX2Z1bmNfXywgKmkpOwogCXJldHVybiAwOwogfQogCkBAIC0xMzM5LDcgKzEzMTIsNyBAQAogCX0KIAogCWlmIChpID4gMikgewotCQlkcHJpbnRrKDEsICIlcygpIC1FSU5WQUxcbiIsIF9fZnVuY19fKTsKKwkJZHByaW50aygxLCAiJXMoKTogLUVJTlZBTFxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTEzOTAsNyArMTM2Myw3IEBACiAJCWlmICgwICE9IGVycikKIAkJCXJldHVybiBlcnI7CiAgICAgICAgfSBlbHNlIHsKLQkgICAgICAgcHJpbnRrKEtFUk5fRVJSICJJbnZhbGlkIGZoIHBvaW50ZXIhXG4iKTsKKwkgICAgICAgcHJfZXJyKCJJbnZhbGlkIGZoIHBvaW50ZXIhXG4iKTsKIAkgICAgICAgcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0xNzMzLDEyICsxNzA2LDEwIEBACiAKICAgICAgICBkYXRhX2Zyb21fdXNlciA9IChzdHJ1Y3QgdXBzdHJlYW1fdXNlcl9zdHJ1Y3QgKilhcmc7CiAKLSAgICAgICBpZiAoIWRhdGFfZnJvbV91c2VyKSB7Ci0JICAgICAgIHByaW50awotCQkgICAoImN4MjU4MjEgaW4gJXMoKTogVXBzdHJlYW0gZGF0YSBpcyBJTlZBTElELiBSZXR1cm5pbmcuXG4iLAotCQkgICAgX19mdW5jX18pOwotCSAgICAgICByZXR1cm4gMDsKLSAgICAgICB9CisJaWYgKCFkYXRhX2Zyb21fdXNlcikgeworCQlwcl9lcnIoIiVzKCk6IFVwc3RyZWFtIGRhdGEgaXMgSU5WQUxJRC4gUmV0dXJuaW5nXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAwOworCX0KIAogICAgICAgIGNvbW1hbmQgPSBkYXRhX2Zyb21fdXNlci0+Y29tbWFuZDsKIApAQCAtMTc3NiwxMiArMTc0NywxMCBAQAogCiAgICAgICAgZGF0YV9mcm9tX3VzZXIgPSAoc3RydWN0IHVwc3RyZWFtX3VzZXJfc3RydWN0ICopYXJnOwogCi0gICAgICAgaWYgKCFkYXRhX2Zyb21fdXNlcikgewotCSAgICAgICBwcmludGsKLQkJICAgKCJjeDI1ODIxIGluICVzKCk6IFVwc3RyZWFtIGRhdGEgaXMgSU5WQUxJRC4gUmV0dXJuaW5nLlxuIiwKLQkJICAgIF9fZnVuY19fKTsKLQkgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgfQorCWlmICghZGF0YV9mcm9tX3VzZXIpIHsKKwkJcHJfZXJyKCIlcygpOiBVcHN0cmVhbSBkYXRhIGlzIElOVkFMSUQuIFJldHVybmluZ1xuIiwgX19mdW5jX18pOworCQlyZXR1cm4gMDsKKwl9CiAKICAgICAgICBjb21tYW5kID0gZGF0YV9mcm9tX3VzZXItPmNvbW1hbmQ7CiAKQEAgLTE4MTksMTIgKzE3ODgsMTAgQEAKIAogICAgICAgIGRhdGFfZnJvbV91c2VyID0gKHN0cnVjdCB1cHN0cmVhbV91c2VyX3N0cnVjdCAqKWFyZzsKIAotICAgICAgIGlmICghZGF0YV9mcm9tX3VzZXIpIHsKLQkgICAgICAgcHJpbnRrCi0JCSAgICgiY3gyNTgyMSBpbiAlcygpOiBVcHN0cmVhbSBkYXRhIGlzIElOVkFMSUQuIFJldHVybmluZy5cbiIsCi0JCSAgICBfX2Z1bmNfXyk7Ci0JICAgICAgIHJldHVybiAwOwotICAgICAgIH0KKwlpZiAoIWRhdGFfZnJvbV91c2VyKSB7CisJCXByX2VycigiJXMoKTogVXBzdHJlYW0gZGF0YSBpcyBJTlZBTElELiBSZXR1cm5pbmdcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIDA7CisJfQogCiAgICAgICAgY29tbWFuZCA9IGRhdGFfZnJvbV91c2VyLT5jb21tYW5kOwogCkBAIC0xODY2LDEyICsxODMzLDEwIEBACiAKICAgICAgICBkYXRhX2Zyb21fdXNlciA9IChzdHJ1Y3QgZG93bnN0cmVhbV91c2VyX3N0cnVjdCAqKWFyZzsKIAotICAgICAgIGlmICghZGF0YV9mcm9tX3VzZXIpIHsKLQkgICAgICAgcHJpbnRrKAotCSAgICAgICAiY3gyNTgyMSBpbiAlcygpOiBVc2VyIGRhdGEgaXMgSU5WQUxJRC4gUmV0dXJuaW5nLlxuIiwKLQkgICAgICAgX19mdW5jX18pOwotCSAgICAgICByZXR1cm4gMDsKLSAgICAgICB9CisJaWYgKCFkYXRhX2Zyb21fdXNlcikgeworCQlwcl9lcnIoIiVzKCk6IFVzZXIgZGF0YSBpcyBJTlZBTElELiBSZXR1cm5pbmdcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIDA7CisJfQogCiAgICAgICAgY29tbWFuZCA9IGRhdGFfZnJvbV91c2VyLT5jb21tYW5kOwogCkBAIC0yMDIyLDkgKzE5ODcsNiBAQAogICAgICAgIC52aWRpb2NfbG9nX3N0YXR1cyA9IHZpZGlvY19sb2dfc3RhdHVzLAogICAgICAgIC52aWRpb2NfZ19wcmlvcml0eSA9IGN4MjU4MjFfdmlkaW9jX2dfcHJpb3JpdHksCiAgICAgICAgLnZpZGlvY19zX3ByaW9yaXR5ID0gY3gyNTgyMV92aWRpb2Nfc19wcmlvcml0eSwKLSNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKLSAgICAgICAudmlkaW9jZ21idWYgPSBjeDI1ODIxX3ZpZGlvY2dtYnVmLAotI2VuZGlmCiAjaWZkZWYgVFVORVJfRkxBRwogICAgICAgIC52aWRpb2NfZ190dW5lciA9IGN4MjU4MjFfdmlkaW9jX2dfdHVuZXIsCiAgICAgICAgLnZpZGlvY19zX3R1bmVyID0gY3gyNTgyMV92aWRpb2Nfc190dW5lciwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkZW8uaCBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkZW8uaAppbmRleCBhMjQxNWQzLi5mNGVlODA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlby5oCkBAIC00MCwxOSArNDAsMTUgQEAKICNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KIAotI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAotLyogSW5jbHVkZSBWNEwxIHNwZWNpZmljIGZ1bmN0aW9ucy4gU2hvdWxkIGJlIHJlbW92ZWQgc29vbiAqLwotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+Ci0jZW5kaWYKLQogI2RlZmluZSBUVU5FUl9GTEFHCiAKICNkZWZpbmUgVklERU9fREVCVUcgMAogCi0jZGVmaW5lIGRwcmludGsobGV2ZWwsIGZtdCwgYXJnLi4uKVwKLSAgICBkbyB7IGlmIChWSURFT19ERUJVRyA+PSBsZXZlbClcCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzLzA6ICIgZm10LCBkZXYtPm5hbWUsICMjIGFyZyk7XAotICAgIH0gd2hpbGUgKDApCisjZGVmaW5lIGRwcmludGsobGV2ZWwsIGZtdCwgYXJnLi4uKQkJCQkJXAorZG8gewkJCQkJCQkJCVwKKwlpZiAoVklERU9fREVCVUcgPj0gbGV2ZWwpCQkJCQlcCisJCXByaW50ayhLRVJOX0RFQlVHICIlcy8wOiAiIGZtdCwgZGV2LT5uYW1lLCAjI2FyZyk7CVwKK30gd2hpbGUgKDApCiAKIC8qIEZvciBJT0NUTCB0byBpZGVudGlmeSBydW5uaW5nIHVwc3RyZWFtICovCiAjZGVmaW5lIFVQU1RSRUFNX1NUQVJUX1ZJREVPICAgICAgICA3MDAKQEAgLTEzMyw3ICsxMjksNiBAQAogCQkJICAgc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqY2FwKTsKIGV4dGVybiBpbnQgY3gyNTgyMV92aWRpb2NfZW51bV9mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkgICBzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmKTsKLWV4dGVybiBpbnQgY3gyNTgyMV92aWRpb2NnbWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHZpZGVvX21idWYgKm1idWYpOwogZXh0ZXJuIGludCBjeDI1ODIxX3ZpZGlvY19yZXFidWZzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJICBzdHJ1Y3QgdjRsMl9yZXF1ZXN0YnVmZmVycyAqcCk7CiBleHRlcm4gaW50IGN4MjU4MjFfdmlkaW9jX3F1ZXJ5YnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS5oIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS5oCmluZGV4IGM5NDAwMDEuLjU1MTE1MjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLmgKQEAgLTUxOSw5ICs1MTksMTIgQEAKICNkZWZpbmUgU2V0X0dQSU9fQml0KEJpdCkgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IEJpdCkKICNkZWZpbmUgQ2xlYXJfR1BJT19CaXQoQml0KSAgICAgICAgICAgICAgICAgICAgICh+KDEgPDwgQml0KSkKIAotI2RlZmluZSBDWDI1ODIxX0VSUihmbXQsIGFyZ3MuLi4pICAgICAgcHJpbnRrKEtFUk5fRVJSICAiY3gyNTgyMSglZCk6ICIgZm10LCBkZXYtPmJvYXJkLCAjIyBhcmdzKQotI2RlZmluZSBDWDI1ODIxX1dBUk4oZm10LCBhcmdzLi4uKSAgICAgcHJpbnRrKEtFUk5fV0FSTklORyAiY3gyNTgyMSglZCk6ICIgZm10LCBkZXYtPmJvYXJkICwgIyMgYXJncykKLSNkZWZpbmUgQ1gyNTgyMV9JTkZPKGZtdCwgYXJncy4uLikgICAgIHByaW50ayhLRVJOX0lORk8gImN4MjU4MjEoJWQpOiAiIGZtdCwgZGV2LT5ib2FyZCAsICMjIGFyZ3MpCisjZGVmaW5lIENYMjU4MjFfRVJSKGZtdCwgYXJncy4uLikJCQlcCisJcHJfZXJyKCIoJWQpOiAiIGZtdCwgZGV2LT5ib2FyZCwgIyNhcmdzKQorI2RlZmluZSBDWDI1ODIxX1dBUk4oZm10LCBhcmdzLi4uKQkJCVwKKwlwcl93YXJuKCIoJWQpOiAiIGZtdCwgZGV2LT5ib2FyZCwgIyNhcmdzKQorI2RlZmluZSBDWDI1ODIxX0lORk8oZm10LCBhcmdzLi4uKQkJCVwKKwlwcl9pbmZvKCIoJWQpOiAiIGZtdCwgZGV2LT5ib2FyZCwgIyNhcmdzKQogCiBleHRlcm4gaW50IGN4MjU4MjFfaTJjX3JlZ2lzdGVyKHN0cnVjdCBjeDI1ODIxX2kyYyAqYnVzKTsKIGV4dGVybiB2b2lkIGN4MjU4MjFfY2FyZF9zZXR1cChzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZGFidXNiL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvZGFidXNiL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdiZGM0MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9kYWJ1c2IvS2NvbmZpZwpAQCAtMCwwICsxLDE0IEBACitjb25maWcgVVNCX0RBQlVTQgorCXRyaXN0YXRlICJEQUJVU0IgZHJpdmVyIgorCWRlcGVuZHMgb24gVVNCCisJLS0taGVscC0tLQorCSAgQSBEaWdpdGFsIEF1ZGlvIEJyb2FkY2FzdGluZyAoREFCKSBSZWNlaXZlciBmb3IgVVNCIGFuZCBMaW51eAorCSAgYnJvdWdodCB0byB5b3UgYnkgdGhlIERBQi1UZWFtCisJICA8aHR0cDovL3d3d2JvZGUuY3MudHVtLmVkdS9QYXIvYXJjaC9kYWIvPi4gIFRoaXMgZHJpdmVyIGNhbiBiZSB0YWtlbgorCSAgYXMgYW4gZXhhbXBsZSBmb3IgVVJCLWJhc2VkIGJ1bGssIGNvbnRyb2wsIGFuZCBpc29jaHJvbm91cworCSAgdHJhbnNhY3Rpb25zLiBVUkIncyBhcmUgZXhwbGFpbmVkIGluCisJICA8RG9jdW1lbnRhdGlvbi91c2IvVVJCLnR4dD4uCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGRhYnVzYi4KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2RhYnVzYi9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9kYWJ1c2IvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZmMmYyMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9kYWJ1c2IvTWFrZWZpbGUKQEAgLTAsMCArMSwyIEBACitvYmotJChDT05GSUdfVVNCX0RBQlVTQikgICAgICAgICs9IGRhYnVzYi5vCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9kYWJ1c2IvVE9ETyBiL2RyaXZlcnMvc3RhZ2luZy9kYWJ1c2IvVE9ETwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWMwMzE0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2RhYnVzYi9UT0RPCkBAIC0wLDAgKzEsNSBAQAorVGhpcyBpcyBhIGRyaXZlciBmb3IgYW4gZXhwZXJpbWVudGFsIHNhbXBsZSBkZXZlbG9wZWQgaW4gMjAwMy4gVGhlIGRyaXZlcgorbmV2ZXIgc3VwcG9ydGVkIGFueSBjb21tZXJjaWFsIHByb2R1Y3QsIG5vciBoYWQgYW55IGtub3duIHVzZXIuCitJZiBub2JvZHkgdGFrZXMgY2FyZSBvbiBpdCwgdGhlIGRyaXZlciB3aWxsIGJlIHJlbW92ZWQgZm9yIDIuNi4zOS4KKworUGxlYXNlIHNlbmQgcGF0Y2hlcyB0byBsaW51eC1tZWRpYUB2Z2VyLmtlcm5lbC5vcmcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGFidXNiLmMgYi9kcml2ZXJzL3N0YWdpbmcvZGFidXNiL2RhYnVzYi5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL21lZGlhL3ZpZGVvL2RhYnVzYi5jCnJlbmFtZSB0byBkcml2ZXJzL3N0YWdpbmcvZGFidXNiL2RhYnVzYi5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhYnVzYi5oIGIvZHJpdmVycy9zdGFnaW5nL2RhYnVzYi9kYWJ1c2IuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9tZWRpYS92aWRlby9kYWJ1c2IuaApyZW5hbWUgdG8gZHJpdmVycy9zdGFnaW5nL2RhYnVzYi9kYWJ1c2IuaApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2R0MzE1NXY0bC9kdDMxNTV2NGwuYyBiL2RyaXZlcnMvc3RhZ2luZy9kdDMxNTV2NGwvZHQzMTU1djRsLmMKaW5kZXggYjk5NjY5Ny4uMTVkN2VmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2R0MzE1NXY0bC9kdDMxNTV2NGwuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZHQzMTU1djRsL2R0MzE1NXY0bC5jCkBAIC04NzYsOSArODc2LDYgQEAKIAkudmlkaW9jX3NfY3JvcCA9IGR0MzE1NV9pb2Nfc19jcm9wLAogCS52aWRpb2NfZW51bV9mcmFtZXNpemVzID0gZHQzMTU1X2lvY19lbnVtX2ZyYW1lc2l6ZXMsCiAJLnZpZGlvY19lbnVtX2ZyYW1laW50ZXJ2YWxzID0gZHQzMTU1X2lvY19lbnVtX2ZyYW1laW50ZXJ2YWxzLAotI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAotCS52aWRpb2NnbWJ1ZiA9IGlvY2dtYnVmLAotI2VuZGlmCiAqLwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9LY29uZmlnCmluZGV4IDNhZWNkMzAuLjFkYTU3ZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L0tjb25maWcKQEAgLTEsMTAgKzEsMTAgQEAKIGNvbmZpZyBWSURFT19HTzcwMDcKIAl0cmlzdGF0ZSAiV0lTIEdPNzAwNyBNUEVHIGVuY29kZXIgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFZJREVPX0RFViAmJiBQQ0kgJiYgSTJDICYmIElOUFVUCisJZGVwZW5kcyBvbiBWSURFT19ERVYgJiYgUENJICYmIEkyQwogCWRlcGVuZHMgb24gQktMICMgcGxlYXNlIGZpeAogCWRlcGVuZHMgb24gU05ECiAJc2VsZWN0IFZJREVPQlVGX0RNQV9TRwotCWRlcGVuZHMgb24gVklERU9fSVIKKwlkZXBlbmRzIG9uIFJDX0NPUkUKIAlzZWxlY3QgVklERU9fVFVORVIKIAlzZWxlY3QgVklERU9fVFZFRVBST00KIAlzZWxlY3QgU05EX1BDTQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2xpcmMvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9saXJjL0tjb25maWcKaW5kZXggZmE3OTBkYi4uY2RhZmY1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2xpcmMvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvbGlyYy9LY29uZmlnCkBAIC0xNCwyNiArMTQsMTkgQEAKIAogY29uZmlnIExJUkNfQlQ4MjkKICAgICAgICAgdHJpc3RhdGUgIkJUODI5IGJhc2VkIGhhcmR3YXJlIgotCWRlcGVuZHMgb24gTElSQ19TVEFHSU5HICYmIFBDSQorCWRlcGVuZHMgb24gTElSQyAmJiBQQ0kKIAloZWxwCiAJICBEcml2ZXIgZm9yIHRoZSBJUiBpbnRlcmZhY2Ugb24gQlQ4MjktYmFzZWQgaGFyZHdhcmUKIAotY29uZmlnIExJUkNfSTJDCi0JdHJpc3RhdGUgIkkyQyBCYXNlZCBJUiBSZWNlaXZlcnMiCi0JZGVwZW5kcyBvbiBMSVJDX1NUQUdJTkcgJiYgSTJDCi0JaGVscAotCSAgRHJpdmVyIGZvciBJMkMtYmFzZWQgSVIgcmVjZWl2ZXJzLCBzdWNoIGFzIHRob3NlIGNvbW1vbmx5Ci0JICBmb3VuZCBvbmJvYXJkIEhhdXBwYXVnZSBQVlItMTUwLzI1MC8zNTAgdmlkZW8gY2FwdHVyZSBjYXJkcwotCiBjb25maWcgTElSQ19JR09SUExVR1VTQgogCXRyaXN0YXRlICJJZ29yIENlc2tvJ3MgVVNCIElSIFJlY2VpdmVyIgotCWRlcGVuZHMgb24gTElSQ19TVEFHSU5HICYmIFVTQgorCWRlcGVuZHMgb24gTElSQyAmJiBVU0IKIAloZWxwCiAJICBEcml2ZXIgZm9yIElnb3IgQ2Vza28ncyBVU0IgSVIgUmVjZWl2ZXIKIAogY29uZmlnIExJUkNfSU1PTgogCXRyaXN0YXRlICJMZWdhY3kgU291bmRHcmFwaCBpTU9OIFJlY2VpdmVyIGFuZCBEaXNwbGF5IgotCWRlcGVuZHMgb24gTElSQ19TVEFHSU5HICYmIFVTQgorCWRlcGVuZHMgb24gTElSQyAmJiBVU0IKIAloZWxwCiAJICBEcml2ZXIgZm9yIHRoZSBvcmlnaW5hbCBTb3VuZEdyYXBoIGlNT04gSVIgUmVjZWl2ZXIgYW5kIERpc3BsYXkKIApAQCAtNDEsMzEgKzM0LDMxIEBACiAKIGNvbmZpZyBMSVJDX0lUODcKIAl0cmlzdGF0ZSAiSVRFIElUODdYWCBDSVIgUG9ydCBSZWNlaXZlciIKLQlkZXBlbmRzIG9uIExJUkNfU1RBR0lORyAmJiBQTlAKKwlkZXBlbmRzIG9uIExJUkMgJiYgUE5QCiAJaGVscAogCSAgRHJpdmVyIGZvciB0aGUgSVRFIElUODd4eCBJUiBSZWNlaXZlcgogCiBjb25maWcgTElSQ19JVEU4NzA5CiAJdHJpc3RhdGUgIklURTg3MDkgQ0lSIFBvcnQgUmVjZWl2ZXIiCi0JZGVwZW5kcyBvbiBMSVJDX1NUQUdJTkcgJiYgUE5QCisJZGVwZW5kcyBvbiBMSVJDICYmIFBOUAogCWhlbHAKIAkgIERyaXZlciBmb3IgdGhlIElURTg3MDkgSVIgUmVjZWl2ZXIKIAogY29uZmlnIExJUkNfUEFSQUxMRUwKIAl0cmlzdGF0ZSAiSG9tZWJyZXcgUGFyYWxsZWwgUG9ydCBSZWNlaXZlciIKLQlkZXBlbmRzIG9uIExJUkNfU1RBR0lORyAmJiBQQVJQT1JUCisJZGVwZW5kcyBvbiBMSVJDICYmIFBBUlBPUlQKIAloZWxwCiAJICBEcml2ZXIgZm9yIEhvbWVicmV3IFBhcmFsbGVsIFBvcnQgUmVjZWl2ZXJzCiAKIGNvbmZpZyBMSVJDX1NBU0VNCiAJdHJpc3RhdGUgIlNhc2VtIFVTQiBJUiBSZW1vdGUiCi0JZGVwZW5kcyBvbiBMSVJDX1NUQUdJTkcgJiYgVVNCCisJZGVwZW5kcyBvbiBMSVJDICYmIFVTQgogCWhlbHAKIAkgIERyaXZlciBmb3IgdGhlIFNhc2VtIE9uQWlyIFJlbW9jb24tViBvciBEaWduIEhWNSBIVFBDIElSL1ZGRCBNb2R1bGUKIAogY29uZmlnIExJUkNfU0VSSUFMCiAJdHJpc3RhdGUgIkhvbWVicmV3IFNlcmlhbCBQb3J0IFJlY2VpdmVyIgotCWRlcGVuZHMgb24gTElSQ19TVEFHSU5HCisJZGVwZW5kcyBvbiBMSVJDCiAJaGVscAogCSAgRHJpdmVyIGZvciBIb21lYnJldyBTZXJpYWwgUG9ydCBSZWNlaXZlcnMKIApAQCAtNzgsMTkgKzcxLDE5IEBACiAKIGNvbmZpZyBMSVJDX1NJUgogCXRyaXN0YXRlICJCdWlsdC1pbiBTSVIgSXJEQSBwb3J0IgotCWRlcGVuZHMgb24gTElSQ19TVEFHSU5HCisJZGVwZW5kcyBvbiBMSVJDCiAJaGVscAogCSAgRHJpdmVyIGZvciB0aGUgU0lSIElyREEgcG9ydAogCiBjb25maWcgTElSQ19UVFVTQklSCiAJdHJpc3RhdGUgIlRlY2hub3RyZW5kIFVTQiBJUiBSZWNlaXZlciIKLQlkZXBlbmRzIG9uIExJUkNfU1RBR0lORyAmJiBVU0IKKwlkZXBlbmRzIG9uIExJUkMgJiYgVVNCCiAJaGVscAogCSAgRHJpdmVyIGZvciB0aGUgVGVjaG5vdHJlbmQgVVNCIElSIFJlY2VpdmVyCiAKIGNvbmZpZyBMSVJDX1pJTE9HCiAJdHJpc3RhdGUgIlppbG9nL0hhdXBwYXVnZSBJUiBUcmFuc21pdHRlciIKLQlkZXBlbmRzIG9uIExJUkNfU1RBR0lORyAmJiBJMkMKKwlkZXBlbmRzIG9uIExJUkMgJiYgSTJDCiAJaGVscAogCSAgRHJpdmVyIGZvciB0aGUgWmlsb2cvSGF1cHBhdWdlIElSIFRyYW5zbWl0dGVyLCBmb3VuZCBvbgogCSAgUFZSLTE1MC81MDAsIEhWUi0xMjAwLzEyNTAvMTcwMC8xODAwLCBIRC1QVlIgYW5kIG90aGVyIGNhcmRzCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbGlyYy9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9saXJjL01ha2VmaWxlCmluZGV4IDRkYTFmMzMuLjk0YWYyMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9saXJjL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9saXJjL01ha2VmaWxlCkBAIC00LDcgKzQsNiBAQAogIyBFYWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGVuYWJsZXMgYSBsaXN0IG9mIGZpbGVzLgogCiBvYmotJChDT05GSUdfTElSQ19CVDgyOSkJKz0gbGlyY19idDgyOS5vCi1vYmotJChDT05GSUdfTElSQ19JMkMpCQkrPSBsaXJjX2kyYy5vCiBvYmotJChDT05GSUdfTElSQ19JR09SUExVR1VTQikJKz0gbGlyY19pZ29ycGx1Z3VzYi5vCiBvYmotJChDT05GSUdfTElSQ19JTU9OKQkJKz0gbGlyY19pbW9uLm8KIG9iai0kKENPTkZJR19MSVJDX0lUODcpCQkrPSBsaXJjX2l0ODcubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2xpcmMvVE9ETy5saXJjX2kyYyBiL2RyaXZlcnMvc3RhZ2luZy9saXJjL1RPRE8ubGlyY19pMmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmMGE2ZmYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2xpcmMvVE9ETy5saXJjX2kyYworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotbGlyY19pMmMgcHJvdmlkZXMgc3VwcG9ydCBmb3Igc29tZSBkcml2ZXJzIHRoYXQgaGF2ZSBhbHJlYWR5IGEgUkMKLWRyaXZlciB1bmRlciBkcml2ZXJzL21lZGlhL3ZpZGVvLiBJdCBzaG91bGQgYmUgaW50ZWdyYXRlZCBpbnRvIHRob3NlCi1kcml2ZXJzLCBpbiBzcGVjaWFsIHdpdGggZHJpdmVycy9tZWRpYS92aWRlby9pci1rYmQtaTJjLmMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbGlyYy9UT0RPLmxpcmNfemlsb2cgYi9kcml2ZXJzL3N0YWdpbmcvbGlyYy9UT0RPLmxpcmNfemlsb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFhMzEyZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9saXJjL1RPRE8ubGlyY196aWxvZwpAQCAtMCwwICsxLDEzIEBACitUaGUgYmluZGluZyBiZXR3ZWVuIGhkcHZyIGFuZCBsaXJjX3ppbG9nIGlzIGN1cnJlbnRseSBkaXNhYmxlZCwKK2R1ZSB0byBhbiBPT1BTIHJlcG9ydGVkIGEgZmV3IHllYXJzIGFnbyB3aGVuIGJvdGggdGhlIGhkcHZyIGFuZCBjeDE4Citkcml2ZXJzIHdlcmUgbG9hZGVkIGluIGhpcyBzeXN0ZW0uIE1vcmUgZGV0YWlscyBjYW4gYmUgc2VlbiBhdDoKKwlodHRwOi8vd3d3Lm1haWwtYXJjaGl2ZS5jb20vbGludXgtbWVkaWFAdmdlci5rZXJuZWwub3JnL21zZzA5MTYzLmh0bWwKK01vcmUgdGVzdHMgbmVlZCB0byBiZSBkb25lLCBpbiBvcmRlciB0byBmaXggdGhlIHJlcG9ydGVkIGlzc3VlLgorCitUaGVyZSdzIGEgY29uZmxpY3QgYmV0d2VlbiBpci1rYmQtaTJjOiBCb3RoIHByb3ZpZGUgc3VwcG9ydCBmb3IgUlggZXZlbnRzLgorU3VjaCBjb25mbGljdCBuZWVkcyB0byBiZSBmaXhlZCwgYmVmb3JlIG1vdmluZyBpdCBvdXQgb2Ygc3RhZ2luZy4KKworVGhlIHdheSBJMkMgcHJvYmUgd29ya3MsIGl0IHdpbGwgdHJ5IHRvIHJlZ2lzdGVyIHRoZSBkcml2ZXIgdHdpY2UsIG9uZQorZm9yIFJYIGFuZCBhbm90aGVyIGZvciBUWC4gVGhlIGxvZ2ljIG5lZWRzIHRvIGJlIGZpeGVkIHRvIGF2b2lkIHN1Y2gKK2lzc3VlLgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbGlyYy9saXJjX2kyYy5jIGIvZHJpdmVycy9zdGFnaW5nL2xpcmMvbGlyY19pMmMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmRmMmMwZS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbGlyYy9saXJjX2kyYy5jCisrKyAvZGV2L251bGwKQEAgLTEsNTM2ICswLDAgQEAKLS8qCi0gKiBsaXJjX2kyYy5jCi0gKgotICogaTJjIElSIGRyaXZlciBmb3IgdGhlIG9uYm9hcmQgSVIgcG9ydCBvbiBtYW55IFRWIHR1bmVyIGNhcmRzLCBpbmNsdWRpbmc6Ci0gKiAgLUZsYXZvcnMgb2YgdGhlIEhhdXBwYXVnZSBQVlItMTUwLzI1MC8zNTAKLSAqICAtSGF1cHBhdWdlIEhWUi0xMzAwCi0gKiAgLVBpeGVsVmlldyAoQlQ4NzhQK1cvRk0pCi0gKiAgLUtOQyBPTkUgVFYgU3RhdGlvbi9BbnViaXMgVHlwaG9vbiBUVmlldyBUdW5lcgotICogIC1Bc3VzIFRWLUJveCBhbmQgQ3JlYXRpdmUvVmlzaW9uVGVrIEJyZWFrT3V0LUJveAotICogIC1MZWFkdGVrIFdpbmZhc3QgUFZSMjAwMAotICoKLSAqIENvcHlyaWdodCAoYykgMjAwMCBHZXJkIEtub3JyIDxrcmF4ZWxAZ29sZGJhY2guaW4tYmVybGluLmRlPgotICogbW9kaWZpZWQgZm9yIFBpeGVsVmlldyAoQlQ4NzhQK1cvRk0pIGJ5Ci0gKiAgICAgIE1pY2hhbCBLb2NoYW5vd2ljeiA8bWtvY2hhbm9AcGxkLm9yZy5wbD4KLSAqICAgICAgQ2hyaXN0b3BoIEJhcnRlbG11cyA8bGlyY0BiYXJ0ZWxtdXMuZGU+Ci0gKiBtb2RpZmllZCBmb3IgS05DIE9ORSBUViBTdGF0aW9uL0FudWJpcyBUeXBob29uIFRWaWV3IFR1bmVyIGJ5Ci0gKiAgICAgIFVscmljaCBNdWVsbGVyIDx1bHJpY2gubXVlbGxlcjQyQHdlYi5kZT4KLSAqIG1vZGlmaWVkIGZvciBBc3VzIFRWLUJveCBhbmQgQ3JlYXRpdmUvVmlzaW9uVGVrIEJyZWFrT3V0LUJveCBieQotICogICAgICBTdGVmYW4gSmFobiA8c3RlZmFuQGxrY2Mub3JnPgotICogbW9kaWZpZWQgZm9yIGluY2x1c2lvbiBpbnRvIGtlcm5lbCBzb3VyY2VzIGJ5Ci0gKiAgICAgIEplcm9tZSBCcm9jayA8amJyb2NrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLSAqIG1vZGlmaWVkIGZvciBMZWFkdGVrIFdpbmZhc3QgUFZSMjAwMCBieQotICogICAgICBUaG9tYXMgUmVpdG1heXIgKHRyZWl0bWF5ckB5YWhvby5jb20pCi0gKiBtb2RpZmllZCBmb3IgSGF1cHBhdWdlIEhWUi0xMzAwIGJ5Ci0gKiAgICAgIEphbiBGcmV5IChqZnJleUBnbXguZGUpCi0gKgotICogcGFydHMgYXJlIGN1dCZwYXN0ZWQgZnJvbSB0aGUgb2xkIGxpcmNfaGF1cC5jIGRyaXZlcgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0KLQotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9rbW9kLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC90aW1lci5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLWFsZ28tYml0Lmg+Ci0KLSNpbmNsdWRlIDxtZWRpYS9saXJjX2Rldi5oPgotCi1zdHJ1Y3QgSVIgewotCXN0cnVjdCBsaXJjX2RyaXZlciBsOwotCXN0cnVjdCBpMmNfY2xpZW50ICBjOwotCWludCBuZXh0a2V5OwotCXVuc2lnbmVkIGNoYXIgYlszXTsKLQl1bnNpZ25lZCBjaGFyIGJpdHM7Ci0JdW5zaWduZWQgY2hhciBmbGFnOwotfTsKLQotI2RlZmluZSBERVZJQ0VfTkFNRSAibGlyY19pMmMiCi0KLS8qIG1vZHVsZSBwYXJhbWV0ZXJzICovCi1zdGF0aWMgaW50IGRlYnVnOwkvKiBkZWJ1ZyBvdXRwdXQgKi8KLXN0YXRpYyBpbnQgbWlub3IgPSAtMTsJLyogbWlub3IgbnVtYmVyICovCi0KLSNkZWZpbmUgZHByaW50ayhmbXQsIGFyZ3MuLi4pCQkJCQkJXAotCWRvIHsJCQkJCQkJCVwKLQkJaWYgKGRlYnVnKQkJCQkJCVwKLQkJCXByaW50ayhLRVJOX0RFQlVHIERFVklDRV9OQU1FICI6ICIgZm10LAkJXAotCQkJICAgICAgICMjIGFyZ3MpOwkJCQlcCi0JfSB3aGlsZSAoMCkKLQotc3RhdGljIGludCByZXZlcnNlKGludCBkYXRhLCBpbnQgYml0cykKLXsKLQlpbnQgaTsKLQlpbnQgYzsKLQotCWZvciAoYyA9IDAsIGkgPSAwOyBpIDwgYml0czsgaSsrKQotCQljIHw9ICgoZGF0YSAmICgxPDxpKSkgPyAxIDogMCkgPDwgKGJpdHMtMS1pKTsKLQotCXJldHVybiBjOwotfQotCi1zdGF0aWMgaW50IGFkZF90b19idWZfYWRhcCh2b2lkICpkYXRhLCBzdHJ1Y3QgbGlyY19idWZmZXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgSVIgKmlyID0gZGF0YTsKLQl1bnNpZ25lZCBjaGFyIGtleWJ1Zls0XTsKLQotCWtleWJ1ZlswXSA9IDB4MDA7Ci0JaTJjX21hc3Rlcl9zZW5kKCZpci0+Yywga2V5YnVmLCAxKTsKLQkvKiBwb2xsIElSIGNoaXAgKi8KLQlpZiAoaTJjX21hc3Rlcl9yZWN2KCZpci0+Yywga2V5YnVmLCBzaXplb2Yoa2V5YnVmKSkgIT0gc2l6ZW9mKGtleWJ1ZikpIHsKLQkJZHByaW50aygicmVhZCBlcnJvclxuIik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCWRwcmludGsoImtleSAoMHglMDJ4JTAyeCUwMnglMDJ4KVxuIiwKLQkJa2V5YnVmWzBdLCBrZXlidWZbMV0sIGtleWJ1ZlsyXSwga2V5YnVmWzNdKTsKLQotCS8qIGtleSBwcmVzc2VkID8gKi8KLQlpZiAoa2V5YnVmWzJdID09IDB4ZmYpCi0JCXJldHVybiAtRU5PREFUQTsKLQotCS8qIHJlbW92ZSByZXBlYXQgYml0ICovCi0Ja2V5YnVmWzJdICY9IDB4N2Y7Ci0Ja2V5YnVmWzNdIHw9IDB4ODA7Ci0KLQlsaXJjX2J1ZmZlcl93cml0ZShidWYsIGtleWJ1Zik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYWRkX3RvX2J1Zl9wY2Y4NTc0KHZvaWQgKmRhdGEsIHN0cnVjdCBsaXJjX2J1ZmZlciAqYnVmKQotewotCXN0cnVjdCBJUiAqaXIgPSBkYXRhOwotCWludCByYzsKLQl1bnNpZ25lZCBjaGFyIGFsbCwgbWFzazsKLQl1bnNpZ25lZCBjaGFyIGtleTsKLQotCS8qIGNvbXB1dGUgYWxsIHZhbGlkIGJpdHMgKGtleSBjb2RlICsgcHJlc3NlZC9yZWxlYXNlIGZsYWcpICovCi0JYWxsID0gaXItPmJpdHMgfCBpci0+ZmxhZzsKLQotCS8qIHNhdmUgSVIgd3JpdGFibGUgbWFzayBiaXRzICovCi0JbWFzayA9IGkyY19zbWJ1c19yZWFkX2J5dGUoJmlyLT5jKSAmIH5hbGw7Ci0KLQkvKiBzZW5kIGJpdCBtYXNrICovCi0JcmMgPSBpMmNfc21idXNfd3JpdGVfYnl0ZSgmaXItPmMsICgweGZmICYgYWxsKSB8IG1hc2spOwotCi0JLyogcmVjZWl2ZSBzY2FuIGNvZGUgKi8KLQlyYyA9IGkyY19zbWJ1c19yZWFkX2J5dGUoJmlyLT5jKTsKLQotCWlmIChyYyA9PSAtMSkgewotCQlkcHJpbnRrKCIlcyByZWFkIGVycm9yXG4iLCBpci0+Yy5uYW1lKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCi0JLyogZHJvcCBkdXBsaWNhdGUgcG9sbHMgKi8KLQlpZiAoaXItPmJbMF0gPT0gKHJjICYgYWxsKSkKLQkJcmV0dXJuIC1FTk9EQVRBOwotCi0JaXItPmJbMF0gPSByYyAmIGFsbDsKLQotCWRwcmludGsoIiVzIGtleSAweCUwMlggJXNcbiIsIGlyLT5jLm5hbWUsIHJjICYgaXItPmJpdHMsCi0JCShyYyAmIGlyLT5mbGFnKSA/ICJyZWxlYXNlZCIgOiAicHJlc3NlZCIpOwotCi0JLyogaWdub3JlIHJlbGVhc2VkIGJ1dHRvbnMgKi8KLQlpZiAocmMgJiBpci0+ZmxhZykKLQkJcmV0dXJuIC1FTk9EQVRBOwotCi0JLyogc2V0IHZhbGlkIGtleSBjb2RlICovCi0Ja2V5ICA9IHJjICYgaXItPmJpdHM7Ci0JbGlyY19idWZmZXJfd3JpdGUoYnVmLCAma2V5KTsKLQlyZXR1cm4gMDsKLX0KLQotLyogY29tbW9uIGZvciBIYXVwcGF1Z2UgSVIgcmVjZWl2ZXJzICovCi1zdGF0aWMgaW50IGFkZF90b19idWZfaGF1cF9jb21tb24odm9pZCAqZGF0YSwgc3RydWN0IGxpcmNfYnVmZmVyICpidWYsCi0JCXVuc2lnbmVkIGNoYXIgKmtleWJ1ZiwgaW50IHNpemUsIGludCBvZmZzZXQpCi17Ci0Jc3RydWN0IElSICppciA9IGRhdGE7Ci0JX191MTYgY29kZTsKLQl1bnNpZ25lZCBjaGFyIGNvZGVzWzJdOwotCWludCByZXQ7Ci0KLQkvKiBwb2xsIElSIGNoaXAgKi8KLQlyZXQgPSBpMmNfbWFzdGVyX3JlY3YoJmlyLT5jLCBrZXlidWYsIHNpemUpOwotCWlmIChyZXQgPT0gc2l6ZSkgewotCQlpci0+YlswXSA9IGtleWJ1ZltvZmZzZXRdOwotCQlpci0+YlsxXSA9IGtleWJ1ZltvZmZzZXQrMV07Ci0JCWlyLT5iWzJdID0ga2V5YnVmW29mZnNldCsyXTsKLQkJaWYgKGlyLT5iWzBdICE9IDB4MDAgJiYgaXItPmJbMV0gIT0gMHgwMCkKLQkJCWRwcmludGsoImtleSAoMHglMDJ4LzB4JTAyeClcbiIsIGlyLT5iWzBdLCBpci0+YlsxXSk7Ci0JfSBlbHNlIHsKLQkJZHByaW50aygicmVhZCBlcnJvciAocmV0PSVkKVxuIiwgcmV0KTsKLQkJLyoga2VlcCBsYXN0IHN1Y2Nlc3NmdWwgcmVhZCBidWZmZXIgKi8KLQl9Ci0KLQkvKiBrZXkgcHJlc3NlZCA/ICovCi0JaWYgKChpci0+YlswXSAmIDB4ODApID09IDApCi0JCXJldHVybiAtRU5PREFUQTsKLQotCS8qIGxvb2sgd2hhdCB3ZSBoYXZlICovCi0JY29kZSA9ICgoKF9fdTE2KWlyLT5iWzBdJjB4N2YpPDw2KSB8IChpci0+YlsxXT4+Mik7Ci0KLQljb2Rlc1swXSA9IChjb2RlID4+IDgpICYgMHhmZjsKLQljb2Rlc1sxXSA9IGNvZGUgJiAweGZmOwotCi0JLyogcmV0dXJuIGl0ICovCi0JZHByaW50aygic2VuZGluZyBjb2RlIDB4JTAyeCUwMnggdG8gbGlyY1xuIiwgY29kZXNbMF0sIGNvZGVzWzFdKTsKLQlsaXJjX2J1ZmZlcl93cml0ZShidWYsIGNvZGVzKTsKLQlyZXR1cm4gMDsKLX0KLQotLyogc3BlY2lmaWMgZm9yIHRoZSBIYXVwcGF1Z2UgUFZSMTUwIElSIHJlY2VpdmVyICovCi1zdGF0aWMgaW50IGFkZF90b19idWZfaGF1cF9wdnIxNTAodm9pZCAqZGF0YSwgc3RydWN0IGxpcmNfYnVmZmVyICpidWYpCi17Ci0JdW5zaWduZWQgY2hhciBrZXlidWZbNl07Ci0JLyogZmV0Y2ggNiBieXRlcywgZmlyc3QgcmVsZXZhbnQgaXMgYXQgb2Zmc2V0IDMgKi8KLQlyZXR1cm4gYWRkX3RvX2J1Zl9oYXVwX2NvbW1vbihkYXRhLCBidWYsIGtleWJ1ZiwgNiwgMyk7Ci19Ci0KLS8qIHVzZWQgZm9yIGFsbCBIYXVwcGF1Z2UgSVIgcmVjZWl2ZXJzIGJ1dCB0aGUgUFZSMTUwICovCi1zdGF0aWMgaW50IGFkZF90b19idWZfaGF1cCh2b2lkICpkYXRhLCBzdHJ1Y3QgbGlyY19idWZmZXIgKmJ1ZikKLXsKLQl1bnNpZ25lZCBjaGFyIGtleWJ1ZlszXTsKLQkvKiBmZXRjaCAzIGJ5dGVzLCBmaXJzdCByZWxldmFudCBpcyBhdCBvZmZzZXQgMCAqLwotCXJldHVybiBhZGRfdG9fYnVmX2hhdXBfY29tbW9uKGRhdGEsIGJ1Ziwga2V5YnVmLCAzLCAwKTsKLX0KLQotCi1zdGF0aWMgaW50IGFkZF90b19idWZfcHZyMjAwMCh2b2lkICpkYXRhLCBzdHJ1Y3QgbGlyY19idWZmZXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgSVIgKmlyID0gZGF0YTsKLQl1bnNpZ25lZCBjaGFyIGtleTsKLQlzMzIgZmxhZ3M7Ci0JczMyIGNvZGU7Ci0KLQkvKiBwb2xsIElSIGNoaXAgKi8KLQlmbGFncyA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YSgmaXItPmMsIDB4MTApOwotCWlmICgtMSA9PSBmbGFncykgewotCQlkcHJpbnRrKCJyZWFkIGVycm9yXG4iKTsKLQkJcmV0dXJuIC1FTk9EQVRBOwotCX0KLQkvKiBrZXkgcHJlc3NlZCA/ICovCi0JaWYgKDAgPT0gKGZsYWdzICYgMHg4MCkpCi0JCXJldHVybiAtRU5PREFUQTsKLQotCS8qIHJlYWQgYWN0dWFsIGtleSBjb2RlICovCi0JY29kZSA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YSgmaXItPmMsIDB4MDApOwotCWlmICgtMSA9PSBjb2RlKSB7Ci0JCWRwcmludGsoInJlYWQgZXJyb3JcbiIpOwotCQlyZXR1cm4gLUVOT0RBVEE7Ci0JfQotCi0Ja2V5ID0gY29kZSAmIDB4RkY7Ci0KLQlkcHJpbnRrKCJJUiBLZXkvRmxhZ3M6ICgweCUwMngvMHglMDJ4KVxuIiwga2V5LCBmbGFncyAmIDB4RkYpOwotCi0JLyogcmV0dXJuIGl0ICovCi0JbGlyY19idWZmZXJfd3JpdGUoYnVmLCAma2V5KTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBhZGRfdG9fYnVmX3BpeGVsdmlldyh2b2lkICpkYXRhLCBzdHJ1Y3QgbGlyY19idWZmZXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgSVIgKmlyID0gZGF0YTsKLQl1bnNpZ25lZCBjaGFyIGtleTsKLQotCS8qIHBvbGwgSVIgY2hpcCAqLwotCWlmICgxICE9IGkyY19tYXN0ZXJfcmVjdigmaXItPmMsICZrZXksIDEpKSB7Ci0JCWRwcmludGsoInJlYWQgZXJyb3JcbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCWRwcmludGsoImtleSAlMDJ4XG4iLCBrZXkpOwotCi0JLyogcmV0dXJuIGl0ICovCi0JbGlyY19idWZmZXJfd3JpdGUoYnVmLCAma2V5KTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBhZGRfdG9fYnVmX3B2OTUxKHZvaWQgKmRhdGEsIHN0cnVjdCBsaXJjX2J1ZmZlciAqYnVmKQotewotCXN0cnVjdCBJUiAqaXIgPSBkYXRhOwotCXVuc2lnbmVkIGNoYXIga2V5OwotCXVuc2lnbmVkIGNoYXIgY29kZXNbNF07Ci0KLQkvKiBwb2xsIElSIGNoaXAgKi8KLQlpZiAoMSAhPSBpMmNfbWFzdGVyX3JlY3YoJmlyLT5jLCAma2V5LCAxKSkgewotCQlkcHJpbnRrKCJyZWFkIGVycm9yXG4iKTsKLQkJcmV0dXJuIC1FTk9EQVRBOwotCX0KLQkvKiBpZ25vcmUgMHhhYSAqLwotCWlmIChrZXkgPT0gMHhhYSkKLQkJcmV0dXJuIC1FTk9EQVRBOwotCWRwcmludGsoImtleSAlMDJ4XG4iLCBrZXkpOwotCi0JY29kZXNbMF0gPSAweDYxOwotCWNvZGVzWzFdID0gMHhENjsKLQljb2Rlc1syXSA9IHJldmVyc2Uoa2V5LCA4KTsKLQljb2Rlc1szXSA9ICh+Y29kZXNbMl0pJjB4ZmY7Ci0KLQlsaXJjX2J1ZmZlcl93cml0ZShidWYsIGNvZGVzKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBhZGRfdG9fYnVmX2tuYzEodm9pZCAqZGF0YSwgc3RydWN0IGxpcmNfYnVmZmVyICpidWYpCi17Ci0Jc3RhdGljIHVuc2lnbmVkIGNoYXIgbGFzdF9rZXkgPSAweEZGOwotCXN0cnVjdCBJUiAqaXIgPSBkYXRhOwotCXVuc2lnbmVkIGNoYXIga2V5OwotCi0JLyogcG9sbCBJUiBjaGlwICovCi0JaWYgKDEgIT0gaTJjX21hc3Rlcl9yZWN2KCZpci0+YywgJmtleSwgMSkpIHsKLQkJZHByaW50aygicmVhZCBlcnJvclxuIik7Ci0JCXJldHVybiAtRU5PREFUQTsKLQl9Ci0KLQkvKgotCSAqIGl0IHNlZW1zIHRoYXQgMHhGRSBpbmRpY2F0ZXMgdGhhdCBhIGJ1dHRvbiBpcyBzdGlsbCBoZWxkCi0JICogZG93biwgd2hpbGUgMHhGRiBpbmRpY2F0ZXMgdGhhdCBubyBidXR0b24gaXMgaGVsZAotCSAqIGRvd24uIDB4RkUgc2VxdWVuY2VzIGFyZSBzb21ldGltZXMgaW50ZXJydXB0ZWQgYnkgMHhGRgotCSAqLwotCi0JZHByaW50aygia2V5ICUwMnhcbiIsIGtleSk7Ci0KLQlpZiAoa2V5ID09IDB4RkYpCi0JCXJldHVybiAtRU5PREFUQTsKLQotCWlmIChrZXkgPT0gMHhGRSkKLQkJa2V5ID0gbGFzdF9rZXk7Ci0KLQlsYXN0X2tleSA9IGtleTsKLQlsaXJjX2J1ZmZlcl93cml0ZShidWYsICZrZXkpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc2V0X3VzZV9pbmModm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgSVIgKmlyID0gZGF0YTsKLQotCWRwcmludGsoIiVzIGNhbGxlZFxuIiwgX19mdW5jX18pOwotCi0JLyogbG9jayBidHR2IGluIG1lbW9yeSB3aGlsZSAvZGV2L2xpcmMgaXMgaW4gdXNlICAqLwotCWkyY191c2VfY2xpZW50KCZpci0+Yyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgc2V0X3VzZV9kZWModm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgSVIgKmlyID0gZGF0YTsKLQotCWRwcmludGsoIiVzIGNhbGxlZFxuIiwgX19mdW5jX18pOwotCi0JaTJjX3JlbGVhc2VfY2xpZW50KCZpci0+Yyk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgbGlyY19kcml2ZXIgbGlyY190ZW1wbGF0ZSA9IHsKLQkubmFtZQkJPSAibGlyY19pMmMiLAotCS5zZXRfdXNlX2luYwk9IHNldF91c2VfaW5jLAotCS5zZXRfdXNlX2RlYwk9IHNldF91c2VfZGVjLAotCS5kZXYJCT0gTlVMTCwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi19OwotCi1zdGF0aWMgaW50IGlyX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCk7Ci1zdGF0aWMgaW50IGlyX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKLXN0YXRpYyBpbnQgaXJfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpOwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgaXJfcmVjZWl2ZXJfaWRbXSA9IHsKLQkvKiBHZW5lcmljIGVudHJ5IGZvciBhbnkgSVIgcmVjZWl2ZXIgKi8KLQl7ICJpcl92aWRlbyIsIDAgfSwKLQkvKiBJUiBkZXZpY2Ugc3BlY2lmaWMgZW50cmllcyBjb3VsZCBiZSBhZGRlZCBoZXJlICovCi0JeyB9Ci19OwotCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgZHJpdmVyID0gewotCS5kcml2ZXIgPSB7Ci0JCS5vd25lcgk9IFRISVNfTU9EVUxFLAotCQkubmFtZQk9ICJpMmMgaXIgZHJpdmVyIiwKLQl9LAotCS5wcm9iZQkJPSBpcl9wcm9iZSwKLQkucmVtb3ZlCQk9IGlyX3JlbW92ZSwKLQkuaWRfdGFibGUJPSBpcl9yZWNlaXZlcl9pZCwKLQkuY29tbWFuZAk9IGlyX2NvbW1hbmQsCi19OwotCi1zdGF0aWMgdm9pZCBwY2ZfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgc3RydWN0IElSICppcikKLXsKLQlpbnQgcmV0MSwgcmV0MiwgcmV0MywgcmV0NDsKLQotCXJldDEgPSBpMmNfc21idXNfd3JpdGVfYnl0ZShjbGllbnQsIDB4ZmYpOwotCXJldDIgPSBpMmNfc21idXNfcmVhZF9ieXRlKGNsaWVudCk7Ci0JcmV0MyA9IGkyY19zbWJ1c193cml0ZV9ieXRlKGNsaWVudCwgMHgwMCk7Ci0JcmV0NCA9IGkyY19zbWJ1c19yZWFkX2J5dGUoY2xpZW50KTsKLQotCS8qIGluIHRoZSBBc3VzIFRWLUJveDogYml0IDEtMCAqLwotCWlmICgoKHJldDIgJiAweDAzKSA9PSAweDAzKSAmJiAoKHJldDQgJiAweDAzKSA9PSAweDAwKSkgewotCQlpci0+Yml0cyA9ICh1bnNpZ25lZCBjaGFyKSB+MHgwNzsKLQkJaXItPmZsYWcgPSAweDA0OwotCS8qIGluIHRoZSBDcmVhdGl2ZS9WaXNpb25UZWsgQnJlYWtPdXQtQm94OiBiaXQgNy02ICovCi0JfSBlbHNlIGlmICgoKHJldDIgJiAweGMwKSA9PSAweGMwKSAmJiAoKHJldDQgJiAweGMwKSA9PSAweDAwKSkgewotCQlpci0+Yml0cyA9ICh1bnNpZ25lZCBjaGFyKSB+MHhlMDsKLQkJaXItPmZsYWcgPSAweDIwOwotCX0KLQotCXJldHVybjsKLX0KLQotc3RhdGljIGludCBpcl9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCi17Ci0Jc3RydWN0IElSICppcjsKLQlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAgPSBjbGllbnQtPmFkYXB0ZXI7Ci0JdW5zaWduZWQgc2hvcnQgYWRkciA9IGNsaWVudC0+YWRkcjsKLQlpbnQgcmV0dmFsOwotCi0JaXIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgSVIpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWlyKQotCQlyZXR1cm4gLUVOT01FTTsKLQltZW1jcHkoJmlyLT5sLCAmbGlyY190ZW1wbGF0ZSwgc2l6ZW9mKHN0cnVjdCBsaXJjX2RyaXZlcikpOwotCW1lbWNweSgmaXItPmMsIGNsaWVudCwgc2l6ZW9mKHN0cnVjdCBpMmNfY2xpZW50KSk7Ci0KLQlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBpcik7Ci0JaXItPmwuZGF0YSAgICA9IGlyOwotCWlyLT5sLm1pbm9yICAgPSBtaW5vcjsKLQlpci0+bC5zYW1wbGVfcmF0ZSA9IDEwOwotCWlyLT5sLmRldiAgICAgPSAmaXItPmMuZGV2OwotCWlyLT5uZXh0a2V5ICAgPSAtMTsKLQotCXN3aXRjaCAoYWRkcikgewotCWNhc2UgMHg2NDoKLQkJc3RybGNweShpci0+Yy5uYW1lLCAiUGl4ZWx2aWV3IElSIiwgSTJDX05BTUVfU0laRSk7Ci0JCWlyLT5sLmNvZGVfbGVuZ3RoID0gODsKLQkJaXItPmwuYWRkX3RvX2J1ZiA9IGFkZF90b19idWZfcGl4ZWx2aWV3OwotCQlicmVhazsKLQljYXNlIDB4NGI6Ci0JCXN0cmxjcHkoaXItPmMubmFtZSwgIlBWOTUxIElSIiwgSTJDX05BTUVfU0laRSk7Ci0JCWlyLT5sLmNvZGVfbGVuZ3RoID0gMzI7Ci0JCWlyLT5sLmFkZF90b19idWYgPSBhZGRfdG9fYnVmX3B2OTUxOwotCQlicmVhazsKLQljYXNlIDB4NzE6Ci0JCWlmIChhZGFwLT5pZCA9PSBJMkNfSFdfQl9DWDIzODh4KQotCQkJc3RybGNweShpci0+Yy5uYW1lLCAiSGF1cHBhdWdlIEhWUjEzMDAiLCBJMkNfTkFNRV9TSVpFKTsKLQkJZWxzZSAvKiBidDh4eCBvciBjeDIzNDF4ICovCi0JCQkvKgotCQkJICogVGhlIFBWUjE1MCBJUiByZWNlaXZlciB1c2VzIHRoZSBzYW1lIHByb3RvY29sIGFzCi0JCQkgKiBvdGhlciBIYXVwcGF1Z2UgY2FyZHMsIGJ1dCB0aGUgZGF0YSBmbG93IGlzCi0JCQkgKiBkaWZmZXJlbnQsIHNvIHdlIG5lZWQgdG8gZGVhbCB3aXRoIGl0IGJ5IGl0cyBvd24uCi0JCQkgKi8KLQkJCXN0cmxjcHkoaXItPmMubmFtZSwgIkhhdXBwYXVnZSBQVlIxNTAiLCBJMkNfTkFNRV9TSVpFKTsKLQkJaXItPmwuY29kZV9sZW5ndGggPSAxMzsKLQkJaXItPmwuYWRkX3RvX2J1ZiA9IGFkZF90b19idWZfaGF1cF9wdnIxNTA7Ci0JCWJyZWFrOwotCWNhc2UgMHg2YjoKLQkJc3RybGNweShpci0+Yy5uYW1lLCAiQWRhcHRlYyBJUiIsIEkyQ19OQU1FX1NJWkUpOwotCQlpci0+bC5jb2RlX2xlbmd0aCA9IDMyOwotCQlpci0+bC5hZGRfdG9fYnVmID0gYWRkX3RvX2J1Zl9hZGFwOwotCQlicmVhazsKLQljYXNlIDB4MTg6Ci0JY2FzZSAweDFhOgotCQlpZiAoYWRhcC0+aWQgPT0gSTJDX0hXX0JfQ1gyMzg4eCkgewotCQkJc3RybGNweShpci0+Yy5uYW1lLCAiTGVhZHRlayBJUiIsIEkyQ19OQU1FX1NJWkUpOwotCQkJaXItPmwuY29kZV9sZW5ndGggPSA4OwotCQkJaXItPmwuYWRkX3RvX2J1ZiA9IGFkZF90b19idWZfcHZyMjAwMDsKLQkJfSBlbHNlIHsgLyogYnQ4eHggb3IgY3gyMzQxeCAqLwotCQkJc3RybGNweShpci0+Yy5uYW1lLCAiSGF1cHBhdWdlIElSIiwgSTJDX05BTUVfU0laRSk7Ci0JCQlpci0+bC5jb2RlX2xlbmd0aCA9IDEzOwotCQkJaXItPmwuYWRkX3RvX2J1ZiA9IGFkZF90b19idWZfaGF1cDsKLQkJfQotCQlicmVhazsKLQljYXNlIDB4MzA6Ci0JCXN0cmxjcHkoaXItPmMubmFtZSwgIktOQyBPTkUgSVIiLCBJMkNfTkFNRV9TSVpFKTsKLQkJaXItPmwuY29kZV9sZW5ndGggPSA4OwotCQlpci0+bC5hZGRfdG9fYnVmID0gYWRkX3RvX2J1Zl9rbmMxOwotCQlicmVhazsKLQljYXNlIDB4MjE6Ci0JY2FzZSAweDIzOgotCQlwY2ZfcHJvYmUoY2xpZW50LCBpcik7Ci0JCXN0cmxjcHkoaXItPmMubmFtZSwgIlRWLUJveCBJUiIsIEkyQ19OQU1FX1NJWkUpOwotCQlpci0+bC5jb2RlX2xlbmd0aCA9IDg7Ci0JCWlyLT5sLmFkZF90b19idWYgPSBhZGRfdG9fYnVmX3BjZjg1NzQ7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCS8qIHNob3VsZG4ndCBoYXBwZW4gKi8KLQkJcHJpbnRrKCJsaXJjX2kyYzogSHVoPyB1bmtub3duIGkyYyBhZGRyZXNzICgweCUwMngpP1xuIiwgYWRkcik7Ci0JCWtmcmVlKGlyKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCXByaW50ayhLRVJOX0lORk8gImxpcmNfaTJjOiBjaGlwIDB4JXggZm91bmQgQCAweCUwMnggKCVzKVxuIiwKLQkgICAgICAgYWRhcC0+aWQsIGFkZHIsIGlyLT5jLm5hbWUpOwotCi0JcmV0dmFsID0gbGlyY19yZWdpc3Rlcl9kcml2ZXIoJmlyLT5sKTsKLQotCWlmIChyZXR2YWwgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAibGlyY19pMmM6IGZhaWxlZCB0byByZWdpc3RlciBkcml2ZXIhXG4iKTsKLQkJa2ZyZWUoaXIpOwotCQlyZXR1cm4gcmV0dmFsOwotCX0KLQotCWlyLT5sLm1pbm9yID0gcmV0dmFsOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaXJfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0Jc3RydWN0IElSICppciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCi0JLyogdW5yZWdpc3RlciBkZXZpY2UgKi8KLQlsaXJjX3VucmVnaXN0ZXJfZHJpdmVyKGlyLT5sLm1pbm9yKTsKLQotCS8qIGZyZWUgbWVtb3J5ICovCi0Ja2ZyZWUoaXIpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGlyX2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQotewotCS8qIG5vdGhpbmcgKi8KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBfX2luaXQgbGlyY19pMmNfaW5pdCh2b2lkKQotewotCWkyY19hZGRfZHJpdmVyKCZkcml2ZXIpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgbGlyY19pMmNfZXhpdCh2b2lkKQotewotCWkyY19kZWxfZHJpdmVyKCZkcml2ZXIpOwotfQotCi1NT0RVTEVfREVTQ1JJUFRJT04oIkluZnJhcmVkIHJlY2VpdmVyIGRyaXZlciBmb3IgSGF1cHBhdWdlIGFuZCAiCi0JCSAgICJQaXhlbHZpZXcgY2FyZHMgKGkyYyBzdGFjaykiKTsKLU1PRFVMRV9BVVRIT1IoIkdlcmQgS25vcnIsIE1pY2hhbCBLb2NoYW5vd2ljeiwgQ2hyaXN0b3BoIEJhcnRlbG11cywgIgotCSAgICAgICJVbHJpY2ggTXVlbGxlciwgU3RlZmFuIEphaG4sIEplcm9tZSBCcm9jayIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1tb2R1bGVfcGFyYW0obWlub3IsIGludCwgU19JUlVHTyk7Ci1NT0RVTEVfUEFSTV9ERVNDKG1pbm9yLCAiUHJlZmVycmVkIG1pbm9yIGRldmljZSBudW1iZXIiKTsKLQotbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7Ci1NT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRW5hYmxlIGRlYnVnZ2luZyBtZXNzYWdlcyIpOwotCi1tb2R1bGVfaW5pdChsaXJjX2kyY19pbml0KTsKLW1vZHVsZV9leGl0KGxpcmNfaTJjX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2xpcmMvbGlyY19zZXJpYWwuYyBiL2RyaXZlcnMvc3RhZ2luZy9saXJjL2xpcmNfc2VyaWFsLmMKaW5kZXggOTcxODQ0Yi4uOWJjZjE0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2xpcmMvbGlyY19zZXJpYWwuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbGlyYy9saXJjX3NlcmlhbC5jCkBAIC0zNzcsNyArMzc3LDcgQEAKIAlkdXR5X2N5Y2xlID0gbmV3X2R1dHlfY3ljbGU7CiAJZnJlcSA9IG5ld19mcmVxOwogCi0JbG9vcHNfcGVyX3NlYyA9IGN1cnJlbnRfY3B1X2RhdGEubG9vcHNfcGVyX2ppZmZ5OworCWxvb3BzX3Blcl9zZWMgPSBfX3RoaXNfY3B1X3JlYWQoY3B1LmluZm8ubG9vcHNfcGVyX2ppZmZ5KTsKIAlsb29wc19wZXJfc2VjICo9IEhaOwogCiAJLyogSG93IG1hbnkgY2xvY2tzIGluIGEgbWljcm9zZWNvbmQ/LCBhdm9pZGluZyBsb25nIGxvbmcgZGl2aWRlICovCkBAIC0zOTgsNyArMzk4LDcgQEAKIAlkcHJpbnRrKCJpbiBpbml0X3RpbWluZ19wYXJhbXMsIGZyZXE9JWQsIGR1dHlfY3ljbGU9JWQsICIKIAkJImNsay9qaWZmeT0lbGQsIHB1bHNlPSVsZCwgc3BhY2U9JWxkLCAiCiAJCSJjb252X3VzX3RvX2Nsb2Nrcz0lbGRcbiIsCi0JCWZyZXEsIGR1dHlfY3ljbGUsIGN1cnJlbnRfY3B1X2RhdGEubG9vcHNfcGVyX2ppZmZ5LAorCQlmcmVxLCBkdXR5X2N5Y2xlLCBfX3RoaXNfY3B1X3JlYWQoY3B1X2luZm8ubG9vcHNfcGVyX2ppZmZ5KSwKIAkJcHVsc2Vfd2lkdGgsIHNwYWNlX3dpZHRoLCBjb252X3VzX3RvX2Nsb2Nrcyk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbGlyYy9saXJjX3ppbG9nLmMgYi9kcml2ZXJzL3N0YWdpbmcvbGlyYy9saXJjX3ppbG9nLmMKaW5kZXggZjAwNzZlYi4uYWQyOWJiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2xpcmMvbGlyY196aWxvZy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9saXJjL2xpcmNfemlsb2cuYwpAQCAtNjYsNiArNjYsNyBAQAogCS8qIERldmljZSBpbmZvICovCiAJc3RydWN0IG11dGV4IGlyX2xvY2s7CiAJaW50IG9wZW47CisJYm9vbCBpc19oZHB2cjsKIAogCS8qIFJYIGRldmljZSAqLwogCXN0cnVjdCBpMmNfY2xpZW50IGNfcng7CkBAIC0yMDYsMTYgKzIwNywxMiBAQAogCQl9CiAKIAkJLyoga2V5IHByZXNzZWQgPyAqLwotI2lmZGVmIEkyQ19IV19CX0hEUFZSCi0JCWlmIChpci0+Y19yeC5hZGFwdGVyLT5pZCA9PSBJMkNfSFdfQl9IRFBWUikgeworCQlpZiAoaXItPmlzX2hkcHZyKSB7CiAJCQlpZiAoZ290X2RhdGEgJiYgKGtleWJ1ZlswXSA9PSAweDgwKSkKIAkJCQlyZXR1cm4gMDsKIAkJCWVsc2UgaWYgKGdvdF9kYXRhICYmIChrZXlidWZbMF0gPT0gMHgwMCkpCiAJCQkJcmV0dXJuIC1FTk9EQVRBOwogCQl9IGVsc2UgaWYgKChpci0+YlswXSAmIDB4ODApID09IDApCi0jZWxzZQotCQlpZiAoKGlyLT5iWzBdICYgMHg4MCkgPT0gMCkKLSNlbmRpZgogCQkJcmV0dXJuIGdvdF9kYXRhID8gMCA6IC1FTk9EQVRBOwogCiAJCS8qIGxvb2sgd2hhdCB3ZSBoYXZlICovCkBAIC04NDEsMTUgKzgzOCwxNSBAQAogCQlyZXR1cm4gcmV0IDwgMCA/IHJldCA6IC1FRkFVTFQ7CiAJfQogCi0jaWZkZWYgSTJDX0hXX0JfSERQVlIKIAkvKgogCSAqIFRoZSBzbGVlcCBiaXRzIGFyZW4ndCBuZWNlc3Nhcnkgb24gdGhlIEhEIFBWUiwgYW5kIGluIGZhY3QsIHRoZQogCSAqIGxhc3QgaTJjX21hc3Rlcl9yZWN2IGFsd2F5cyBmYWlscyB3aXRoIGEgLTUsIHNvIGZvciBub3csIHdlJ3JlCiAJICogZ29pbmcgdG8gc2tpcCB0aGlzIHdob2xlIG1lc3MgYW5kIHNheSB3ZSdyZSBkb25lIG9uIHRoZSBIRCBQVlIKIAkgKi8KLQlpZiAoaXItPmNfcnguYWRhcHRlci0+aWQgPT0gSTJDX0hXX0JfSERQVlIpCi0JCWdvdG8gZG9uZTsKLSNlbmRpZgorCWlmIChpci0+aXNfaGRwdnIpIHsKKwkJZHByaW50aygic2VudCBjb2RlICV1LCBrZXkgJXVcbiIsIGNvZGUsIGtleSk7CisJCXJldHVybiAwOworCX0KIAogCS8qCiAJICogVGhpcyBiaXQgTkFLcyB1bnRpbCB0aGUgZGV2aWNlIGlzIHJlYWR5LCBzbyB3ZSByZXRyeSBpdApAQCAtODgzLDcgKzg4MCw2IEBACiAJCXJldHVybiAtRUZBVUxUOwogCX0KIAotZG9uZToKIAkvKiBPaCBnb29kLCBpdCB3b3JrZWQgKi8KIAlkcHJpbnRrKCJzZW50IGNvZGUgJXUsIGtleSAldVxuIiwgY29kZSwga2V5KTsKIAlyZXR1cm4gMDsKQEAgLTExMTIsMTIgKzExMDgsMTQgQEAKIHN0YXRpYyBpbnQgaXJfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKTsKIHN0YXRpYyBpbnQgaXJfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpOwogCisjZGVmaW5lIElEX0ZMQUdfVFgJMHgwMQorI2RlZmluZSBJRF9GTEFHX0hEUFZSCTB4MDIKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGlyX3RyYW5zY2VpdmVyX2lkW10gPSB7Ci0JLyogR2VuZXJpYyBlbnRyeSBmb3IgYW55IElSIHRyYW5zY2VpdmVyICovCi0JeyAiaXJfdmlkZW8iLCAwIH0sCi0JLyogSVIgZGV2aWNlIHNwZWNpZmljIGVudHJpZXMgc2hvdWxkIGJlIGFkZGVkIGhlcmUgKi8KLQl7ICJpcl90eF96OGYwODExX2hhdXAiLCAwIH0sCi0JeyAiaXJfcnhfejhmMDgxMV9oYXVwIiwgMCB9LAorCXsgImlyX3R4X3o4ZjA4MTFfaGF1cCIsICBJRF9GTEFHX1RYICAgICAgICAgICAgICAgICB9LAorCXsgImlyX3J4X3o4ZjA4MTFfaGF1cCIsICAwICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorCXsgImlyX3R4X3o4ZjA4MTFfaGRwdnIiLCBJRF9GTEFHX0hEUFZSIHwgSURfRkxBR19UWCB9LAorCXsgImlyX3J4X3o4ZjA4MTFfaGRwdnIiLCBJRF9GTEFHX0hEUFZSICAgICAgICAgICAgICB9LAogCXsgfQogfTsKIApAQCAtMTE5NywxMCArMTE5NSwyNSBAQAogCWludCByZXQ7CiAJaW50IGhhdmVfcnggPSAwLCBoYXZlX3R4ID0gMDsKIAotCWRwcmludGsoIiVzOiBhZGFwdGVyIGlkPTB4JXgsIGNsaWVudCBhZGRyPTB4JTAyeFxuIiwKLQkJX19mdW5jX18sIGFkYXAtPmlkLCBjbGllbnQtPmFkZHIpOworCWRwcmludGsoIiVzOiBhZGFwdGVyIG5hbWUgKCVzKSBuciAlZCwgaTJjX2RldmljZV9pZCBuYW1lICglcyksICIKKwkJImNsaWVudCBhZGRyPTB4JTAyeFxuIiwKKwkJX19mdW5jX18sIGFkYXAtPm5hbWUsIGFkYXAtPm5yLCBpZC0+bmFtZSwgY2xpZW50LT5hZGRyKTsKIAogCS8qCisJICogRklYTUUgLSBUaGlzIHByb2JlIGZ1bmN0aW9uIHByb2JlcyBib3RoIHRoZSBUeCBhbmQgUngKKwkgKiBhZGRyZXNzZXMgb2YgdGhlIElSIG1pY3JvY29udHJvbGxlci4KKwkgKgorCSAqIEhvd2V2ZXIsIHRoZSBJMkMgc3Vic3lzdGVtIGlzIHBhc3NpbmcgYWxvbmcgb25lIEkyQyBjbGllbnQgYXQgYQorCSAqIHRpbWUsIGJhc2VkIG9uIG1hdGNoZXMgdG8gdGhlIGlyX3RyYW5zY2VpdmVyX2lkW10gdGFibGUgYWJvdmUuCisJICogVGhlIGV4cGVjdGF0aW9uIGlzIHRoYXQgZWFjaCBpMmNfY2xpZW50IGFkZHJlc3Mgd2lsbCBiZSBwcm9iZWQKKwkgKiBpbmRpdmlkdWFsbHkgYnkgZHJpdmVycyBzbyB0aGUgSTJDIHN1YnN5c3RlbSBjYW4gbWFyayBhbGwgY2xpZW50CisJICogYWRkcmVzc2VzIGFzIGNsYWltZWQgb3Igbm90LgorCSAqCisJICogVGhpcyBwcm9iZSByb3V0aW5lIGNhdXNlcyBvbmx5IG9uZSBvZiB0aGUgY2xpZW50IGFkZHJlc3NlcywgVFggb3IgUlgsCisJICogdG8gYmUgY2xhaW1lZC4gIFRoaXMgd2lsbCBjYXVzZSBhIHByb2JsZW0gaWYgdGhlIEkyQyBzdWJzeXN0ZW0gaXMKKwkgKiBzdWJzZXF1ZW50bHkgdHJpZ2dlcmVkIHRvIHByb2JlIHVuY2xhaW1lZCBjbGllbnRzIGFnYWluLgorCSAqLworCS8qCiAJICogVGhlIGV4dGVybmFsIElSIHJlY2VpdmVyIGlzIGF0IGkyYyBhZGRyZXNzIDB4NzEuCiAJICogVGhlIElSIHRyYW5zbWl0dGVyIGlzIGF0IDB4NzAuCiAJICovCkBAIC0xMjQyLDYgKzEyNTUsNyBAQAogCW11dGV4X2luaXQoJmlyLT5pcl9sb2NrKTsKIAltdXRleF9pbml0KCZpci0+YnVmX2xvY2spOwogCWlyLT5uZWVkX2Jvb3QgPSAxOworCWlyLT5pc19oZHB2ciA9IChpZC0+ZHJpdmVyX2RhdGEgJiBJRF9GTEFHX0hEUFZSKSA/IHRydWUgOiBmYWxzZTsKIAogCW1lbWNweSgmaXItPmwsICZsaXJjX3RlbXBsYXRlLCBzaXplb2Yoc3RydWN0IGxpcmNfZHJpdmVyKSk7CiAJaXItPmwubWlub3IgPSAtMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9wb2htZWxmcy9pbm9kZS5jIGIvZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL2lub2RlLmMKaW5kZXggNjE2ODVjYy4uNTZkM2E0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL2lub2RlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL2lub2RlLmMKQEAgLTgyNiw2ICs4MjYsMTMgQEAKIAkuc2V0X3BhZ2VfZGlydHkgCT0gX19zZXRfcGFnZV9kaXJ0eV9ub2J1ZmZlcnMsCiB9OwogCitzdGF0aWMgdm9pZCBwb2htZWxmc19pX2NhbGxiYWNrKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBpbm9kZSwgaV9yY3UpOworCUlOSVRfTElTVF9IRUFEKCZpbm9kZS0+aV9kZW50cnkpOworCWttZW1fY2FjaGVfZnJlZShwb2htZWxmc19pbm9kZV9jYWNoZSwgUE9ITUVMRlNfSShpbm9kZSkpOworfQorCiAvKgogICogLT5kZXRyb3lfaW5vZGUoKSBjYWxsYmFjay4gRGVsZXRlcyBpbm9kZSBmcm9tIHRoZSBjYWNoZXMKICAqICBhbmQgZnJlZXMgcHJpdmF0ZSBkYXRhLgpAQCAtODQyLDggKzg0OSw4IEBACiAKIAlkcHJpbnRrKCIlczogcGk6ICVwLCBpbm9kZTogJXAsIGlubzogJWxsdS5cbiIsCiAJCV9fZnVuY19fLCBwaSwgJnBpLT52ZnNfaW5vZGUsIHBpLT5pbm8pOwotCWttZW1fY2FjaGVfZnJlZShwb2htZWxmc19pbm9kZV9jYWNoZSwgcGkpOwogCWF0b21pY19sb25nX2RlYygmcHNiLT50b3RhbF9pbm9kZXMpOworCWNhbGxfcmN1KCZpbm9kZS0+aV9yY3UsIHBvaG1lbGZzX2lfY2FsbGJhY2spOwogfQogCiAvKgpAQCAtMTMxOCw4ICsxMzI1LDggQEAKIAl9CiAKIAlwc2ItPnRyYW5zX3NjYW5fdGltZW91dCA9IHBzYi0+ZHJvcF9zY2FuX3RpbWVvdXQgPSAwOwotCWNhbmNlbF9yZWFybWluZ19kZWxheWVkX3dvcmsoJnBzYi0+ZHdvcmspOwotCWNhbmNlbF9yZWFybWluZ19kZWxheWVkX3dvcmsoJnBzYi0+ZHJvcF9kd29yayk7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZwc2ItPmR3b3JrKTsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnBzYi0+ZHJvcF9kd29yayk7CiAJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKIAogCWRwcmludGsoIiVzOiBzdG9wcGVkIHdvcmtxdWV1ZXMuXG4iLCBfX2Z1bmNfXyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcG9obWVsZnMvcGF0aF9lbnRyeS5jIGIvZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL3BhdGhfZW50cnkuYwppbmRleCA4ZWM4M2QyLi40MDBhOWZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcG9obWVsZnMvcGF0aF9lbnRyeS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9wb2htZWxmcy9wYXRoX2VudHJ5LmMKQEAgLTgzLDEwICs4MywxMSBAQAogaW50IHBvaG1lbGZzX3BhdGhfbGVuZ3RoKHN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGkpCiB7CiAJc3RydWN0IGRlbnRyeSAqZCwgKnJvb3QsICpmaXJzdDsKLQlpbnQgbGVuID0gMTsgLyogUm9vdCBzbGFzaCAqLworCWludCBsZW47CisJdW5zaWduZWQgc2VxOwogCi0JZmlyc3QgPSBkID0gZF9maW5kX2FsaWFzKCZwaS0+dmZzX2lub2RlKTsKLQlpZiAoIWQpIHsKKwlmaXJzdCA9IGRfZmluZF9hbGlhcygmcGktPnZmc19pbm9kZSk7CisJaWYgKCFmaXJzdCkgewogCQlkcHJpbnRrKCIlczogaW5vOiAlbGx1LCBtb2RlOiAlby5cbiIsIF9fZnVuY19fLCBwaS0+aW5vLCBwaS0+dmZzX2lub2RlLmlfbW9kZSk7CiAJCXJldHVybiAtRU5PRU5UOwogCX0KQEAgLTk1LDcgKzk2LDExIEBACiAJcm9vdCA9IGRnZXQoY3VycmVudC0+ZnMtPnJvb3QuZGVudHJ5KTsKIAlzcGluX3VubG9jaygmY3VycmVudC0+ZnMtPmxvY2spOwogCi0Jc3Bpbl9sb2NrKCZkY2FjaGVfbG9jayk7CityZW5hbWVfcmV0cnk6CisJbGVuID0gMTsgLyogUm9vdCBzbGFzaCAqLworCWQgPSBmaXJzdDsKKwlzZXEgPSByZWFkX3NlcWJlZ2luKCZyZW5hbWVfbG9jayk7CisJcmN1X3JlYWRfbG9jaygpOwogCiAJaWYgKCFJU19ST09UKGQpICYmIGRfdW5oYXNoZWQoZCkpCiAJCWxlbiArPSBVTkhBU0hFRF9PQlNDVVJFX1NUUklOR19TSVpFOyAvKiBPYnNjdXJlICIgKGRlbGV0ZWQpIiBzdHJpbmcgKi8KQEAgLTEwNCw3ICsxMDksOSBAQAogCQlsZW4gKz0gZC0+ZF9uYW1lLmxlbiArIDE7IC8qIFBsdXMgc2xhc2ggKi8KIAkJZCA9IGQtPmRfcGFyZW50OwogCX0KLQlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOworCXJjdV9yZWFkX3VubG9jaygpOworCWlmIChyZWFkX3NlcXJldHJ5KCZyZW5hbWVfbG9jaywgc2VxKSkKKwkJZ290byByZW5hbWVfcmV0cnk7CiAKIAlkcHV0KHJvb3QpOwogCWRwdXQoZmlyc3QpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NlNDAxL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvc2U0MDEvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iN2Y4MjIyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NlNDAxL0tjb25maWcKQEAgLTAsMCArMSwxMyBAQAorY29uZmlnIFVTQl9TRTQwMQorCXRyaXN0YXRlICJVU0IgU0U0MDEgQ2FtZXJhIHN1cHBvcnQgKERFUFJFQ0FURUQpIgorCWRlcGVuZHMgb24gVklERU9fREVWICYmIFZJREVPX1Y0TDJfQ09NTU9OICYmIFVTQgorCS0tLWhlbHAtLS0KKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gY29ubmVjdCB0aGlzIHR5cGUgb2YgY2FtZXJhIHRvIHlvdXIKKwkgIGNvbXB1dGVyJ3MgVVNCIHBvcnQuIFNlZSA8ZmlsZTpEb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3NlNDAxLnR4dD4KKwkgIGZvciBtb3JlIGluZm9ybWF0aW9uIGFuZCBmb3IgYSBsaXN0IG9mIHN1cHBvcnRlZCBjYW1lcmFzLgorCisJICBUaGlzIGRyaXZlciB1c2VzIHRoZSBkZXByZWNhdGVkIFY0TDEgQVBJIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4KKwkgIDIuNi4zOSwgdW5sZXNzIHNvbWVvbmUgY29udmVydHMgaXQgdG8gdGhlIFY0TDIgQVBJLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzZTQwMS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zZTQwMS9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9zZTQwMS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDY1ZDQ5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NlNDAxL01ha2VmaWxlCkBAIC0wLDAgKzEgQEAKK29iai0kKENPTkZJR19VU0JfU0U0MDEpICAgICAgICAgKz0gc2U0MDEubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NlNDAxL1RPRE8gYi9kcml2ZXJzL3N0YWdpbmcvc2U0MDEvVE9ETwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjJjMDM4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NlNDAxL1RPRE8KQEAgLTAsMCArMSw1IEBACitUaGlzIGlzIGFuIG9ic29sZXRlIGRyaXZlciBmb3Igc29tZSBvbGQgd2ViY2FtcyB0aGF0IHN0aWxsIHVzZSBWNEwxIEFQSS4gCitBcyBWNEwxIHN1cHBvcnQgaXMgYmVpbmcgcmVtb3ZlZCBmcm9tIGtlcm5lbCwgaWYgbm9ib2R5IHRha2UgY2FyZSBvbiBpdCwgCit0aGUgZHJpdmVyIHdpbGwgYmUgcmVtb3ZlZCBmb3IgMi42LjM5LgorCitQbGVhc2Ugc2VuZCBwYXRjaGVzIHRvIGxpbnV4LW1lZGlhQHZnZXIua2VybmVsLm9yZwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zZTQwMS5jIGIvZHJpdmVycy9zdGFnaW5nL3NlNDAxL3NlNDAxLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvbWVkaWEvdmlkZW8vc2U0MDEuYwpyZW5hbWUgdG8gZHJpdmVycy9zdGFnaW5nL3NlNDAxL3NlNDAxLmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zZTQwMS9zZTQwMS5oIGIvZHJpdmVycy9zdGFnaW5nL3NlNDAxL3NlNDAxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc1OGY0NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zZTQwMS9zZTQwMS5oCkBAIC0wLDAgKzEsMjM2IEBACisKKyNpZm5kZWYgX19MSU5VWF9zZTQwMV9ICisjZGVmaW5lIF9fTElOVVhfc2U0MDFfSAorCisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgInZpZGVvZGV2LmgiCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKworI2RlZmluZSBzZTQwMV9ERUJVRwkvKiBUdXJuIG9uIGRlYnVnIG1lc3NhZ2VzICovCisKKyNpZmRlZiBzZTQwMV9ERUJVRworIyAgZGVmaW5lIFBERUJVRyhsZXZlbCwgZm10LCBhcmdzLi4uKSBcCitpZiAoZGVidWcgPj0gbGV2ZWwpIFwKKwlpbmZvKCJbIiBfX1BSRVRUWV9GVU5DVElPTl9fICI6JWRdICIgZm10LCBfX0xJTkVfXyAsICMjIGFyZ3MpCisjZWxzZQorIyAgZGVmaW5lIFBERUJVRyhsZXZlbCwgZm10LCBhcmdzLi4uKSBkbyB7fSB3aGlsZSAoMCkKKyNlbmRpZgorCisvKiBBbiBhbG1vc3QgZHJvcC1pbiByZXBsYWNlbWVudCBmb3Igc2xlZXBfb25faW50ZXJydXB0aWJsZSAqLworI2RlZmluZSB3YWl0X2ludGVycnVwdGlibGUodGVzdCwgcXVldWUsIHdhaXQpIFwKK3sgXAorCWFkZF93YWl0X3F1ZXVlKHF1ZXVlLCB3YWl0KTsgXAorCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7IFwKKwlpZiAodGVzdCkgXAorCQlzY2hlZHVsZSgpOyBcCisJcmVtb3ZlX3dhaXRfcXVldWUocXVldWUsIHdhaXQpOyBcCisJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsgXAorCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgXAorCQlicmVhazsgXAorfQorCisjZGVmaW5lIFNFNDAxX1JFUV9HRVRfQ0FNRVJBX0RFU0NSSVBUT1IJCTB4MDYKKyNkZWZpbmUgU0U0MDFfUkVRX1NUQVJUX0NPTlRJTlVPVVNfQ0FQVFVSRQkweDQxCisjZGVmaW5lIFNFNDAxX1JFUV9TVE9QX0NPTlRJTlVPVVNfQ0FQVFVSRQkweDQyCisjZGVmaW5lIFNFNDAxX1JFUV9DQVBUVVJFX0ZSQU1FCQkJMHg0MworI2RlZmluZSBTRTQwMV9SRVFfR0VUX0JSVAkJCTB4NDQKKyNkZWZpbmUgU0U0MDFfUkVRX1NFVF9CUlQJCQkweDQ1CisjZGVmaW5lIFNFNDAxX1JFUV9HRVRfV0lEVEgJCQkweDRjCisjZGVmaW5lIFNFNDAxX1JFUV9TRVRfV0lEVEgJCQkweDRkCisjZGVmaW5lIFNFNDAxX1JFUV9HRVRfSEVJR0hUCQkJMHg0ZQorI2RlZmluZSBTRTQwMV9SRVFfU0VUX0hFSUdIVAkJCTB4NGYKKyNkZWZpbmUgU0U0MDFfUkVRX0dFVF9PVVRQVVRfTU9ERQkJMHg1MAorI2RlZmluZSBTRTQwMV9SRVFfU0VUX09VVFBVVF9NT0RFCQkweDUxCisjZGVmaW5lIFNFNDAxX1JFUV9HRVRfRVhUX0ZFQVRVUkUJCTB4NTIKKyNkZWZpbmUgU0U0MDFfUkVRX1NFVF9FWFRfRkVBVFVSRQkJMHg1MworI2RlZmluZSBTRTQwMV9SRVFfQ0FNRVJBX1BPV0VSCQkJMHg1NgorI2RlZmluZSBTRTQwMV9SRVFfTEVEX0NPTlRST0wJCQkweDU3CisjZGVmaW5lIFNFNDAxX1JFUV9CSU9TCQkJCTB4ZmYKKworI2RlZmluZSBTRTQwMV9CSU9TX1JFQUQJCQkJMHgwNworCisjZGVmaW5lIFNFNDAxX0ZPUk1BVF9CQVlFUgkweDQwCisKKy8qIEh5dW5kYWkgaHY3MTMxYiByZWdpc3RlcnMKKyAgIDcxMjEgYW5kIDcxNDEgc2hvdWxkIGJlIHRoZSBzYW1lIChoYXZlbid0IHJlYWxseSBjaGVja2VkLi4uKSAqLworLyogTW9kZSByZWdpc3RlcnM6ICovCisjZGVmaW5lIEhWNzEzMV9SRUdfTU9ERV9BCQkweDAwCisjZGVmaW5lIEhWNzEzMV9SRUdfTU9ERV9CCQkweDAxCisjZGVmaW5lIEhWNzEzMV9SRUdfTU9ERV9DCQkweDAyCisvKiBGcmFtZSByZWdpc3RlcnM6ICovCisjZGVmaW5lIEhWNzEzMV9SRUdfRlJTVQkJMHgxMAorI2RlZmluZSBIVjcxMzFfUkVHX0ZSU0wJCTB4MTEKKyNkZWZpbmUgSFY3MTMxX1JFR19GQ1NVCQkweDEyCisjZGVmaW5lIEhWNzEzMV9SRUdfRkNTTAkJMHgxMworI2RlZmluZSBIVjcxMzFfUkVHX0ZXSFUJCTB4MTQKKyNkZWZpbmUgSFY3MTMxX1JFR19GV0hMCQkweDE1CisjZGVmaW5lIEhWNzEzMV9SRUdfRldXVQkJMHgxNgorI2RlZmluZSBIVjcxMzFfUkVHX0ZXV0wJCTB4MTcKKy8qIFRpbWluZyByZWdpc3RlcnM6ICovCisjZGVmaW5lIEhWNzEzMV9SRUdfVEhCVQkJMHgyMAorI2RlZmluZSBIVjcxMzFfUkVHX1RIQkwJCTB4MjEKKyNkZWZpbmUgSFY3MTMxX1JFR19UVkJVCQkweDIyCisjZGVmaW5lIEhWNzEzMV9SRUdfVFZCTAkJMHgyMworI2RlZmluZSBIVjcxMzFfUkVHX1RJVFUJCTB4MjUKKyNkZWZpbmUgSFY3MTMxX1JFR19USVRNCQkweDI2CisjZGVmaW5lIEhWNzEzMV9SRUdfVElUTAkJMHgyNworI2RlZmluZSBIVjcxMzFfUkVHX1RNQ0QJCTB4MjgKKy8qIEFkanVzdCBSZWdpc3RlcnM6ICovCisjZGVmaW5lIEhWNzEzMV9SRUdfQVJMVgkJMHgzMAorI2RlZmluZSBIVjcxMzFfUkVHX0FSQ0cJCTB4MzEKKyNkZWZpbmUgSFY3MTMxX1JFR19BR0NHCQkweDMyCisjZGVmaW5lIEhWNzEzMV9SRUdfQUJDRwkJMHgzMworI2RlZmluZSBIVjcxMzFfUkVHX0FQQlYJCTB4MzQKKyNkZWZpbmUgSFY3MTMxX1JFR19BU0xQCQkweDU0CisvKiBPZmZzZXQgUmVnaXN0ZXJzOiAqLworI2RlZmluZSBIVjcxMzFfUkVHX09GU1IJCTB4NTAKKyNkZWZpbmUgSFY3MTMxX1JFR19PRlNHCQkweDUxCisjZGVmaW5lIEhWNzEzMV9SRUdfT0ZTQgkJMHg1MgorLyogUkVzZXQgbGV2ZWwgc3RhdGlzdGljcyByZWdpc3RlcnM6ICovCisjZGVmaW5lIEhWNzEzMV9SRUdfTE9SRUZOT0gJMHg1NworI2RlZmluZSBIVjcxMzFfUkVHX0xPUkVGTk9MCTB4NTgKKyNkZWZpbmUgSFY3MTMxX1JFR19ISVJFRk5PSAkweDU5CisjZGVmaW5lIEhWNzEzMV9SRUdfSElSRUZOT0wJMHg1YQorCisvKiBzZTQwMSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgU0U0MDFfT1BFUkFUSU5HTU9ERQkweDIwMDAKKworCisvKiBzaXplIG9mIHVzYiB0cmFuc2ZlcnMgKi8KKyNkZWZpbmUgU0U0MDFfUEFDS0VUU0laRQk0MDk2CisvKiBudW1iZXIgb2YgcXVldWVkIGJ1bGsgdHJhbnNmZXJzIHRvIHVzZSwgc2hvdWxkIGJlIGFib3V0IDggKi8KKyNkZWZpbmUgU0U0MDFfTlVNU0JVRgkJMQorLyogcmVhZCB0aGUgdXNiIHNwZWNzIGZvciB0aGlzIG9uZSA6KSAqLworI2RlZmluZSBTRTQwMV9WSURFT19FTkRQT0lOVAkxCisjZGVmaW5lIFNFNDAxX0JVVFRPTl9FTkRQT0lOVAkyCisvKiBudW1iZXIgb2YgZnJhbWVzIHN1cHBvcnRlZCBieSB0aGUgdjRsIHBhcnQgKi8KKyNkZWZpbmUgU0U0MDFfTlVNRlJBTUVTCQkyCisvKiBzY3JhdGNoIGJ1ZmZlcnMgZm9yIHBhc3NpbmcgZGF0YSB0byB0aGUgZGVjb2RlcnMgKi8KKyNkZWZpbmUgU0U0MDFfTlVNU0NSQVRDSAkzMgorLyogbWF4aW11bSBhbW91bnQgb2YgZGF0YSBpbiBhIEphbmdHdSBwYWNrZXQgKi8KKyNkZWZpbmUgU0U0MDFfVkxDREFUQUxFTgkxMDI0CisvKiBudW1iZXIgb2YgbnVsIHNpemVkIHBhY2tldHMgdG8gcmVjZWl2ZSBiZWZvcmUga2lja2luZyB0aGUgY2FtZXJhICovCisjZGVmaW5lIFNFNDAxX01BWF9OVUxMUEFDS0VUUwk0MDAwCisvKiBudW1iZXIgb2YgZGVjb2RpbmcgZXJyb3JzIGJlZm9yZSBraWNraW5nIHRoZSBjYW1lcmEgKi8KKyNkZWZpbmUgU0U0MDFfTUFYX0VSUk9SUwkyMDAKKworc3RydWN0IHVzYl9kZXZpY2U7CisKK3N0cnVjdCBzZTQwMV9zYnVmIHsKKwl1bnNpZ25lZCBjaGFyICpkYXRhOworfTsKKworZW51bSB7CisJRlJBTUVfVU5VU0VELAkJLyogVW51c2VkIChubyBNQ0FQVFVSRSkgKi8KKwlGUkFNRV9SRUFEWSwJCS8qIFJlYWR5IHRvIHN0YXJ0IGdyYWJiaW5nICovCisJRlJBTUVfR1JBQkJJTkcsCQkvKiBJbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBncmFiYmVkIGludG8gKi8KKwlGUkFNRV9ET05FLAkJLyogRmluaXNoZWQgZ3JhYmJpbmcsIGJ1dCBub3QgYmVlbiBzeW5jZWQgeWV0ICovCisJRlJBTUVfRVJST1IsCQkvKiBTb21ldGhpbmcgYmFkIGhhcHBlbmVkIHdoaWxlIHByb2Nlc3NpbmcgKi8KK307CisKK2VudW0geworCUZNVF9CQVlFUiwKKwlGTVRfSkFOR0dVLAorfTsKKworZW51bSB7CisJQlVGRkVSX1VOVVNFRCwKKwlCVUZGRVJfUkVBRFksCisJQlVGRkVSX0JVU1ksCisJQlVGRkVSX0RPTkUsCit9OworCitzdHJ1Y3Qgc2U0MDFfc2NyYXRjaCB7CisJdW5zaWduZWQgY2hhciAqZGF0YTsKKwl2b2xhdGlsZSBpbnQgc3RhdGU7CisJaW50IG9mZnNldDsKKwlpbnQgbGVuZ3RoOworfTsKKworc3RydWN0IHNlNDAxX2ZyYW1lIHsKKwl1bnNpZ25lZCBjaGFyICpkYXRhOwkJLyogRnJhbWUgYnVmZmVyICovCisKKwl2b2xhdGlsZSBpbnQgZ3JhYnN0YXRlOwkvKiBTdGF0ZSBvZiBncmFiYmluZyAqLworCisJdW5zaWduZWQgY2hhciAqY3VybGluZTsKKwlpbnQgY3VybGluZXBpeDsKKwlpbnQgY3VycGl4OworfTsKKworc3RydWN0IHVzYl9zZTQwMSB7CisJc3RydWN0IHZpZGVvX2RldmljZSB2ZGV2OworCisJLyogRGV2aWNlIHN0cnVjdHVyZSAqLworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXY7CisKKwl1bnNpZ25lZCBjaGFyIGlmYWNlOworCisJY2hhciAqY2FtZXJhX25hbWU7CisKKwlpbnQgY2hhbmdlOworCWludCBicmlnaHRuZXNzOworCWludCBodWU7CisJaW50IHJnYWluOworCWludCBnZ2FpbjsKKwlpbnQgYmdhaW47CisJaW50IGV4cG9zZV9oOworCWludCBleHBvc2VfbTsKKwlpbnQgZXhwb3NlX2w7CisJaW50IHJlc2V0bGV2ZWw7CisKKwlpbnQgZW5oYW5jZTsKKworCWludCBmb3JtYXQ7CisJaW50IHNpemVzOworCWludCAqd2lkdGg7CisJaW50ICpoZWlnaHQ7CisJaW50IGN3aWR0aDsJCS8qIGN1cnJlbnQgd2lkdGggKi8KKwlpbnQgY2hlaWdodDsJCS8qIGN1cnJlbnQgaGVpZ2h0ICovCisJaW50IHBhbGV0dGU7CisJaW50IG1heGZyYW1lc2l6ZTsKKwlpbnQgY2ZyYW1lc2l6ZTsJCS8qIGN1cnJlbnQgZnJhbWVzaXplICovCisKKwlzdHJ1Y3QgbXV0ZXggbG9jazsKKwlpbnQgdXNlcjsJCS8qIHVzZXIgY291bnQgZm9yIGV4Y2x1c2l2ZSB1c2UgKi8KKwlpbnQgcmVtb3ZlZDsJCS8qIGRldmljZSBkaXNjb25uZWN0ZWQgKi8KKworCWludCBzdHJlYW1pbmc7CQkvKiBBcmUgd2Ugc3RyZWFtaW5nIHZpZGVvPyAqLworCisJY2hhciAqZmJ1ZjsJCS8qIFZpZGVvZGV2IGJ1ZmZlciBhcmVhICovCisKKwlzdHJ1Y3QgdXJiICp1cmJbU0U0MDFfTlVNU0JVRl07CisJc3RydWN0IHVyYiAqaW50dXJiOworCisJaW50IGJ1dHRvbjsKKwlpbnQgYnV0dG9ucHJlc3NlZDsKKworCWludCBjdXJmcmFtZTsJCS8qIEN1cnJlbnQgcmVjZWl2aW5nIGZyYW1lICovCisJc3RydWN0IHNlNDAxX2ZyYW1lIGZyYW1lW1NFNDAxX05VTUZSQU1FU107CisJaW50IHJlYWRjb3VudDsKKwlpbnQgZnJhbWVjb3VudDsKKwlpbnQgZXJyb3I7CisJaW50IGRyb3BwZWQ7CisKKwlpbnQgc2NyYXRjaF9uZXh0OworCWludCBzY3JhdGNoX3VzZTsKKwlpbnQgc2NyYXRjaF9vdmVyZmxvdzsKKwlzdHJ1Y3Qgc2U0MDFfc2NyYXRjaCBzY3JhdGNoW1NFNDAxX05VTVNDUkFUQ0hdOworCisJLyogRGVjb2RlciBzcGVjaWZpYyBkYXRhOiAqLworCXVuc2lnbmVkIGNoYXIgdmxjZGF0YVtTRTQwMV9WTENEQVRBTEVOXTsKKwlpbnQgdmxjZGF0YXBvczsKKwlpbnQgYmF5ZXJvZmZzZXQ7CisKKwlzdHJ1Y3Qgc2U0MDFfc2J1ZiBzYnVmW1NFNDAxX05VTVNCVUZdOworCisJd2FpdF9xdWV1ZV9oZWFkX3Qgd3E7CS8qIFByb2Nlc3NlcyB3YWl0aW5nICovCisKKwlpbnQgbnVsbHBhY2tldHM7Cit9OworCisKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zZTQwMS92aWRlb2Rldi5oIGIvZHJpdmVycy9zdGFnaW5nL3NlNDAxL3ZpZGVvZGV2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjExZWZiZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zZTQwMS92aWRlb2Rldi5oCkBAIC0wLDAgKzEsMzE4IEBACisvKgorICoJVmlkZW8gZm9yIExpbnV4IHZlcnNpb24gMSAtIE9CU09MRVRFCisgKgorICoJSGVhZGVyIGZpbGUgZm9yIHY0bDEgZHJpdmVycyBhbmQgYXBwbGljYXRpb25zLCBmb3IKKyAqCUxpbnV4IGtlcm5lbHMgMi4yLnggb3IgMi40LnguCisgKgorICoJUHJvdmlkZXMgaGVhZGVyIGZvciBsZWdhY3kgZHJpdmVycyBhbmQgYXBwbGljYXRpb25zCisgKgorICoJU2VlIGh0dHA6Ly9saW51eHR2Lm9yZyBmb3IgbW9yZSBpbmZvCisgKgorICovCisjaWZuZGVmIF9fTElOVVhfVklERU9ERVZfSAorI2RlZmluZSBfX0xJTlVYX1ZJREVPREVWX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKworI2RlZmluZSBWSURfVFlQRV9DQVBUVVJFCTEJLyogQ2FuIGNhcHR1cmUgKi8KKyNkZWZpbmUgVklEX1RZUEVfVFVORVIJCTIJLyogQ2FuIHR1bmUgKi8KKyNkZWZpbmUgVklEX1RZUEVfVEVMRVRFWFQJNAkvKiBEb2VzIHRlbGV0ZXh0ICovCisjZGVmaW5lIFZJRF9UWVBFX09WRVJMQVkJOAkvKiBPdmVybGF5IG9udG8gZnJhbWUgYnVmZmVyICovCisjZGVmaW5lIFZJRF9UWVBFX0NIUk9NQUtFWQkxNgkvKiBPdmVybGF5IGJ5IGNocm9tYWtleSAqLworI2RlZmluZSBWSURfVFlQRV9DTElQUElORwkzMgkvKiBDYW4gY2xpcCAqLworI2RlZmluZSBWSURfVFlQRV9GUkFNRVJBTQk2NAkvKiBVc2VzIHRoZSBmcmFtZSBidWZmZXIgbWVtb3J5ICovCisjZGVmaW5lIFZJRF9UWVBFX1NDQUxFUwkJMTI4CS8qIFNjYWxhYmxlICovCisjZGVmaW5lIFZJRF9UWVBFX01PTk9DSFJPTUUJMjU2CS8qIE1vbm9jaHJvbWUgb25seSAqLworI2RlZmluZSBWSURfVFlQRV9TVUJDQVBUVVJFCTUxMgkvKiBDYW4gY2FwdHVyZSBzdWJhcmVhcyBvZiB0aGUgaW1hZ2UgKi8KKyNkZWZpbmUgVklEX1RZUEVfTVBFR19ERUNPREVSCTEwMjQJLyogQ2FuIGRlY29kZSBNUEVHIHN0cmVhbXMgKi8KKyNkZWZpbmUgVklEX1RZUEVfTVBFR19FTkNPREVSCTIwNDgJLyogQ2FuIGVuY29kZSBNUEVHIHN0cmVhbXMgKi8KKyNkZWZpbmUgVklEX1RZUEVfTUpQRUdfREVDT0RFUgk0MDk2CS8qIENhbiBkZWNvZGUgTUpQRUcgc3RyZWFtcyAqLworI2RlZmluZSBWSURfVFlQRV9NSlBFR19FTkNPREVSCTgxOTIJLyogQ2FuIGVuY29kZSBNSlBFRyBzdHJlYW1zICovCisKK3N0cnVjdCB2aWRlb19jYXBhYmlsaXR5Cit7CisJY2hhciBuYW1lWzMyXTsKKwlpbnQgdHlwZTsKKwlpbnQgY2hhbm5lbHM7CS8qIE51bSBjaGFubmVscyAqLworCWludCBhdWRpb3M7CS8qIE51bSBhdWRpbyBkZXZpY2VzICovCisJaW50IG1heHdpZHRoOwkvKiBTdXBwb3J0ZWQgd2lkdGggKi8KKwlpbnQgbWF4aGVpZ2h0OwkvKiBBbmQgaGVpZ2h0ICovCisJaW50IG1pbndpZHRoOwkvKiBTdXBwb3J0ZWQgd2lkdGggKi8KKwlpbnQgbWluaGVpZ2h0OwkvKiBBbmQgaGVpZ2h0ICovCit9OworCisKK3N0cnVjdCB2aWRlb19jaGFubmVsCit7CisJaW50IGNoYW5uZWw7CisJY2hhciBuYW1lWzMyXTsKKwlpbnQgdHVuZXJzOworCV9fdTMyICBmbGFnczsKKyNkZWZpbmUgVklERU9fVkNfVFVORVIJCTEJLyogQ2hhbm5lbCBoYXMgYSB0dW5lciAqLworI2RlZmluZSBWSURFT19WQ19BVURJTwkJMgkvKiBDaGFubmVsIGhhcyBhdWRpbyAqLworCV9fdTE2ICB0eXBlOworI2RlZmluZSBWSURFT19UWVBFX1RWCQkxCisjZGVmaW5lIFZJREVPX1RZUEVfQ0FNRVJBCTIKKwlfX3UxNiBub3JtOwkJCS8qIE5vcm0gc2V0IGJ5IGNoYW5uZWwgKi8KK307CisKK3N0cnVjdCB2aWRlb190dW5lcgoreworCWludCB0dW5lcjsKKwljaGFyIG5hbWVbMzJdOworCXVuc2lnbmVkIGxvbmcgcmFuZ2Vsb3csIHJhbmdlaGlnaDsJLyogVHVuZXIgcmFuZ2UgKi8KKwlfX3UzMiBmbGFnczsKKyNkZWZpbmUgVklERU9fVFVORVJfUEFMCQkxCisjZGVmaW5lIFZJREVPX1RVTkVSX05UU0MJMgorI2RlZmluZSBWSURFT19UVU5FUl9TRUNBTQk0CisjZGVmaW5lIFZJREVPX1RVTkVSX0xPVwkJOAkvKiBVc2VzIEtIeiBub3QgTUh6ICovCisjZGVmaW5lIFZJREVPX1RVTkVSX05PUk0JMTYJLyogVHVuZXIgY2FuIHNldCBub3JtICovCisjZGVmaW5lIFZJREVPX1RVTkVSX1NURVJFT19PTgkxMjgJLyogVHVuZXIgaXMgc2VlaW5nIHN0ZXJlbyAqLworI2RlZmluZSBWSURFT19UVU5FUl9SRFNfT04gICAgICAyNTYgICAgIC8qIFR1bmVyIGlzIHNlZWluZyBhbiBSRFMgZGF0YXN0cmVhbSAqLworI2RlZmluZSBWSURFT19UVU5FUl9NQlNfT04gICAgICA1MTIgICAgIC8qIFR1bmVyIGlzIHNlZWluZyBhbiBNQlMgZGF0YXN0cmVhbSAqLworCV9fdTE2IG1vZGU7CQkJLyogUEFML05UU0MvU0VDQU0vT1RIRVIgKi8KKyNkZWZpbmUgVklERU9fTU9ERV9QQUwJCTAKKyNkZWZpbmUgVklERU9fTU9ERV9OVFNDCQkxCisjZGVmaW5lIFZJREVPX01PREVfU0VDQU0JMgorI2RlZmluZSBWSURFT19NT0RFX0FVVE8JCTMKKwlfX3UxNiBzaWduYWw7CQkJLyogU2lnbmFsIHN0cmVuZ3RoIDE2Yml0IHNjYWxlICovCit9OworCitzdHJ1Y3QgdmlkZW9fcGljdHVyZQoreworCV9fdTE2CWJyaWdodG5lc3M7CisJX191MTYJaHVlOworCV9fdTE2CWNvbG91cjsKKwlfX3UxNgljb250cmFzdDsKKwlfX3UxNgl3aGl0ZW5lc3M7CS8qIEJsYWNrIGFuZCB3aGl0ZSBvbmx5ICovCisJX191MTYJZGVwdGg7CQkvKiBDYXB0dXJlIGRlcHRoICovCisJX191MTYgICBwYWxldHRlOwkvKiBQYWxldHRlIGluIHVzZSAqLworI2RlZmluZSBWSURFT19QQUxFVFRFX0dSRVkJMQkvKiBMaW5lYXIgZ3JleXNjYWxlICovCisjZGVmaW5lIFZJREVPX1BBTEVUVEVfSEkyNDAJMgkvKiBIaWdoIDI0MCBjdWJlIChCVDg0OCkgKi8KKyNkZWZpbmUgVklERU9fUEFMRVRURV9SR0I1NjUJMwkvKiA1NjUgMTYgYml0IFJHQiAqLworI2RlZmluZSBWSURFT19QQUxFVFRFX1JHQjI0CTQJLyogMjRiaXQgUkdCICovCisjZGVmaW5lIFZJREVPX1BBTEVUVEVfUkdCMzIJNQkvKiAzMmJpdCBSR0IgKi8KKyNkZWZpbmUgVklERU9fUEFMRVRURV9SR0I1NTUJNgkvKiA1NTUgMTViaXQgUkdCICovCisjZGVmaW5lIFZJREVPX1BBTEVUVEVfWVVWNDIyCTcJLyogWVVWNDIyIGNhcHR1cmUgKi8KKyNkZWZpbmUgVklERU9fUEFMRVRURV9ZVVlWCTgKKyNkZWZpbmUgVklERU9fUEFMRVRURV9VWVZZCTkJLyogVGhlIGdyZWF0IHRoaW5nIGFib3V0IHN0YW5kYXJkcyBpcyAuLi4gKi8KKyNkZWZpbmUgVklERU9fUEFMRVRURV9ZVVY0MjAJMTAKKyNkZWZpbmUgVklERU9fUEFMRVRURV9ZVVY0MTEJMTEJLyogWVVWNDExIGNhcHR1cmUgKi8KKyNkZWZpbmUgVklERU9fUEFMRVRURV9SQVcJMTIJLyogUkFXIGNhcHR1cmUgKEJUODQ4KSAqLworI2RlZmluZSBWSURFT19QQUxFVFRFX1lVVjQyMlAJMTMJLyogWVVWIDQ6MjoyIFBsYW5hciAqLworI2RlZmluZSBWSURFT19QQUxFVFRFX1lVVjQxMVAJMTQJLyogWVVWIDQ6MToxIFBsYW5hciAqLworI2RlZmluZSBWSURFT19QQUxFVFRFX1lVVjQyMFAJMTUJLyogWVVWIDQ6MjowIFBsYW5hciAqLworI2RlZmluZSBWSURFT19QQUxFVFRFX1lVVjQxMFAJMTYJLyogWVVWIDQ6MTowIFBsYW5hciAqLworI2RlZmluZSBWSURFT19QQUxFVFRFX1BMQU5BUgkxMwkvKiBzdGFydCBvZiBwbGFuYXIgZW50cmllcyAqLworI2RlZmluZSBWSURFT19QQUxFVFRFX0NPTVBPTkVOVCA3CS8qIHN0YXJ0IG9mIGNvbXBvbmVudCBlbnRyaWVzICovCit9OworCitzdHJ1Y3QgdmlkZW9fYXVkaW8KK3sKKwlpbnQJYXVkaW87CQkvKiBBdWRpbyBjaGFubmVsICovCisJX191MTYJdm9sdW1lOwkJLyogSWYgc2V0dGFibGUgKi8KKwlfX3UxNgliYXNzLCB0cmVibGU7CisJX191MzIJZmxhZ3M7CisjZGVmaW5lIFZJREVPX0FVRElPX01VVEUJMQorI2RlZmluZSBWSURFT19BVURJT19NVVRBQkxFCTIKKyNkZWZpbmUgVklERU9fQVVESU9fVk9MVU1FCTQKKyNkZWZpbmUgVklERU9fQVVESU9fQkFTUwk4CisjZGVmaW5lIFZJREVPX0FVRElPX1RSRUJMRQkxNgorI2RlZmluZSBWSURFT19BVURJT19CQUxBTkNFCTMyCisJY2hhciAgICBuYW1lWzE2XTsKKyNkZWZpbmUgVklERU9fU09VTkRfTU9OTwkxCisjZGVmaW5lIFZJREVPX1NPVU5EX1NURVJFTwkyCisjZGVmaW5lIFZJREVPX1NPVU5EX0xBTkcxCTQKKyNkZWZpbmUgVklERU9fU09VTkRfTEFORzIJOAorCV9fdTE2ICAgbW9kZTsKKwlfX3UxNgliYWxhbmNlOwkvKiBTdGVyZW8gYmFsYW5jZSAqLworCV9fdTE2CXN0ZXA7CQkvKiBTdGVwIGFjdHVhbCB2b2x1bWUgdXNlcyAqLworfTsKKworc3RydWN0IHZpZGVvX2NsaXAKK3sKKwlfX3MzMgl4LHk7CisJX19zMzIJd2lkdGgsIGhlaWdodDsKKwlzdHJ1Y3QJdmlkZW9fY2xpcCAqbmV4dDsJLyogRm9yIHVzZXIgdXNlL2RyaXZlciB1c2Ugb25seSAqLworfTsKKworc3RydWN0IHZpZGVvX3dpbmRvdworeworCV9fdTMyCXgseTsJCQkvKiBQb3NpdGlvbiBvZiB3aW5kb3cgKi8KKwlfX3UzMgl3aWR0aCxoZWlnaHQ7CQkvKiBJdHMgc2l6ZSAqLworCV9fdTMyCWNocm9tYWtleTsKKwlfX3UzMglmbGFnczsKKwlzdHJ1Y3QJdmlkZW9fY2xpcCBfX3VzZXIgKmNsaXBzOwkvKiBTZXQgb25seSAqLworCWludAljbGlwY291bnQ7CisjZGVmaW5lIFZJREVPX1dJTkRPV19JTlRFUkxBQ0UJMQorI2RlZmluZSBWSURFT19XSU5ET1dfQ0hST01BS0VZCTE2CS8qIE92ZXJsYXkgYnkgY2hyb21ha2V5ICovCisjZGVmaW5lIFZJREVPX0NMSVBfQklUTUFQCS0xCisvKiBiaXRtYXAgaXMgMTAyNHg2MjUsIGEgJzEnIGJpdCByZXByZXNlbnRzIGEgY2xpcHBlZCBwaXhlbCAqLworI2RlZmluZSBWSURFT19DTElQTUFQX1NJWkUJKDEyOCAqIDYyNSkKK307CisKK3N0cnVjdCB2aWRlb19jYXB0dXJlCit7CisJX191MzIgCXgseTsJCQkvKiBPZmZzZXRzIGludG8gaW1hZ2UgKi8KKwlfX3UzMgl3aWR0aCwgaGVpZ2h0OwkJLyogQXJlYSB0byBjYXB0dXJlICovCisJX191MTYJZGVjaW1hdGlvbjsJCS8qIERlY2ltYXRpb24gZGl2aWRlciAqLworCV9fdTE2CWZsYWdzOwkJCS8qIEZsYWdzIGZvciBjYXB0dXJlICovCisjZGVmaW5lIFZJREVPX0NBUFRVUkVfT0RECQkwCS8qIFRlbXBvcmFsICovCisjZGVmaW5lIFZJREVPX0NBUFRVUkVfRVZFTgkJMQorfTsKKworc3RydWN0IHZpZGVvX2J1ZmZlcgoreworCXZvaWQJKmJhc2U7CisJaW50CWhlaWdodCx3aWR0aDsKKwlpbnQJZGVwdGg7CisJaW50CWJ5dGVzcGVybGluZTsKK307CisKK3N0cnVjdCB2aWRlb19tbWFwCit7CisJdW5zaWduZWQJaW50IGZyYW1lOwkJLyogRnJhbWUgKDAgLSBuKSBmb3IgZG91YmxlIGJ1ZmZlciAqLworCWludAkJaGVpZ2h0LHdpZHRoOworCXVuc2lnbmVkCWludCBmb3JtYXQ7CQkvKiBzaG91bGQgYmUgVklERU9fUEFMRVRURV8qICovCit9OworCitzdHJ1Y3QgdmlkZW9fa2V5Cit7CisJX191OAlrZXlbOF07CisJX191MzIJZmxhZ3M7Cit9OworCitzdHJ1Y3QgdmlkZW9fbWJ1ZgoreworCWludAlzaXplOwkJLyogVG90YWwgbWVtb3J5IHRvIG1hcCAqLworCWludAlmcmFtZXM7CQkvKiBGcmFtZXMgKi8KKwlpbnQJb2Zmc2V0c1tWSURFT19NQVhfRlJBTUVdOworfTsKKworI2RlZmluZSAJVklERU9fTk9fVU5JVAkoLTEpCisKK3N0cnVjdCB2aWRlb191bml0Cit7CisJaW50IAl2aWRlbzsJCS8qIFZpZGVvIG1pbm9yICovCisJaW50CXZiaTsJCS8qIFZCSSBtaW5vciAqLworCWludAlyYWRpbzsJCS8qIFJhZGlvIG1pbm9yICovCisJaW50CWF1ZGlvOwkJLyogQXVkaW8gbWlub3IgKi8KKwlpbnQJdGVsZXRleHQ7CS8qIFRlbGV0ZXh0IG1pbm9yICovCit9OworCitzdHJ1Y3QgdmJpX2Zvcm1hdCB7CisJX191MzIJc2FtcGxpbmdfcmF0ZTsJLyogaW4gSHogKi8KKwlfX3UzMglzYW1wbGVzX3Blcl9saW5lOworCV9fdTMyCXNhbXBsZV9mb3JtYXQ7CS8qIFZJREVPX1BBTEVUVEVfUkFXIG9ubHkgKDEgYnl0ZSkgKi8KKwlfX3MzMglzdGFydFsyXTsJLyogc3RhcnRpbmcgbGluZSBmb3IgZWFjaCBmcmFtZSAqLworCV9fdTMyCWNvdW50WzJdOwkvKiBjb3VudCBvZiBsaW5lcyBmb3IgZWFjaCBmcmFtZSAqLworCV9fdTMyCWZsYWdzOworI2RlZmluZQlWQklfVU5TWU5DCTEJLyogY2FuIGRpc3Rpbmd1ZXMgYmV0d2VlbiB0b3AvYm90dG9tIGZpZWxkICovCisjZGVmaW5lCVZCSV9JTlRFUkxBQ0VECTIJLyogbGluZXMgYXJlIGludGVybGFjZWQgKi8KK307CisKKy8qIHZpZGVvX2luZm8gaXMgYmlhc2VkIHRvd2FyZHMgaGFyZHdhcmUgbXBlZyBlbmNvZGUvZGVjb2RlICovCisvKiBidXQgaXQgY291bGQgYXBwbHkgZ2VuZXJpY2FsbHkgdG8gYW55IGhhcmR3YXJlIGNvbXByZXNzb3IvZGVjb21wcmVzc29yICovCitzdHJ1Y3QgdmlkZW9faW5mbworeworCV9fdTMyCWZyYW1lX2NvdW50OwkvKiBmcmFtZXMgb3V0cHV0IHNpbmNlIGRlY29kZS9lbmNvZGUgYmVnYW4gKi8KKwlfX3UzMgloX3NpemU7CQkvKiBjdXJyZW50IHVuc2NhbGVkIGhvcml6b250YWwgc2l6ZSAqLworCV9fdTMyCXZfc2l6ZTsJCS8qIGN1cnJlbnQgdW5zY2FsZWQgdmVyaXRjYWwgc2l6ZSAqLworCV9fdTMyCXNtcHRlX3RpbWVjb2RlOwkvKiBjdXJyZW50IFNNUFRFIHRpbWVjb2RlIChmb3IgY3VycmVudCBHT1ApICovCisJX191MzIJcGljdHVyZV90eXBlOwkvKiBjdXJyZW50IHBpY3R1cmUgdHlwZSAqLworCV9fdTMyCXRlbXBvcmFsX3JlZmVyZW5jZTsJLyogY3VycmVudCB0ZW1wb3JhbCByZWZlcmVuY2UgKi8KKwlfX3U4CXVzZXJfZGF0YVsyNTZdOwkvKiB1c2VyIGRhdGEgbGFzdCBmb3VuZCBpbiBjb21wcmVzc2VkIHN0cmVhbSAqLworCS8qIHVzZXJfZGF0YVswXSBjb250YWlucyB1c2VyIGRhdGEgZmxhZ3MsIHVzZXJfZGF0YVsxXSBoYXMgY291bnQgKi8KK307CisKKy8qIGdlbmVyaWMgc3RydWN0dXJlIGZvciBzZXR0aW5nIHBsYXliYWNrIG1vZGVzICovCitzdHJ1Y3QgdmlkZW9fcGxheV9tb2RlCit7CisJaW50CW1vZGU7CisJaW50CXAxOworCWludAlwMjsKK307CisKKy8qIGZvciBsb2FkaW5nIG1pY3JvY29kZSAvIGZwZ2EgcHJvZ3JhbW1pbmcgKi8KK3N0cnVjdCB2aWRlb19jb2RlCit7CisJY2hhcglsb2Fkd2hhdFsxNl07CS8qIG5hbWUgb3IgdGFnIG9mIGZpbGUgYmVpbmcgcGFzc2VkICovCisJaW50CWRhdGFzaXplOworCV9fdTgJKmRhdGE7Cit9OworCisjZGVmaW5lIFZJRElPQ0dDQVAJCV9JT1IoJ3YnLDEsc3RydWN0IHZpZGVvX2NhcGFiaWxpdHkpCS8qIEdldCBjYXBhYmlsaXRpZXMgKi8KKyNkZWZpbmUgVklESU9DR0NIQU4JCV9JT1dSKCd2JywyLHN0cnVjdCB2aWRlb19jaGFubmVsKQkvKiBHZXQgY2hhbm5lbCBpbmZvIChzb3VyY2VzKSAqLworI2RlZmluZSBWSURJT0NTQ0hBTgkJX0lPVygndicsMyxzdHJ1Y3QgdmlkZW9fY2hhbm5lbCkJLyogU2V0IGNoYW5uZWwgCSovCisjZGVmaW5lIFZJRElPQ0dUVU5FUgkJX0lPV1IoJ3YnLDQsc3RydWN0IHZpZGVvX3R1bmVyKQkJLyogR2V0IHR1bmVyIGFiaWxpdGllcyAqLworI2RlZmluZSBWSURJT0NTVFVORVIJCV9JT1coJ3YnLDUsc3RydWN0IHZpZGVvX3R1bmVyKQkJLyogVHVuZSB0aGUgdHVuZXIgZm9yIHRoZSBjdXJyZW50IGNoYW5uZWwgKi8KKyNkZWZpbmUgVklESU9DR1BJQ1QJCV9JT1IoJ3YnLDYsc3RydWN0IHZpZGVvX3BpY3R1cmUpCS8qIEdldCBwaWN0dXJlIHByb3BlcnRpZXMgKi8KKyNkZWZpbmUgVklESU9DU1BJQ1QJCV9JT1coJ3YnLDcsc3RydWN0IHZpZGVvX3BpY3R1cmUpCS8qIFNldCBwaWN0dXJlIHByb3BlcnRpZXMgKi8KKyNkZWZpbmUgVklESU9DQ0FQVFVSRQkJX0lPVygndicsOCxpbnQpCQkJCS8qIFN0YXJ0LCBlbmQgY2FwdHVyZSAqLworI2RlZmluZSBWSURJT0NHV0lOCQlfSU9SKCd2Jyw5LCBzdHJ1Y3QgdmlkZW9fd2luZG93KQkvKiBHZXQgdGhlIHZpZGVvIG92ZXJsYXkgd2luZG93ICovCisjZGVmaW5lIFZJRElPQ1NXSU4JCV9JT1coJ3YnLDEwLCBzdHJ1Y3QgdmlkZW9fd2luZG93KQkvKiBTZXQgdGhlIHZpZGVvIG92ZXJsYXkgd2luZG93IC0gcGFzc2VzIGNsaXAgbGlzdCBmb3IgaGFyZHdhcmUgc21hcnRzICwgY2hyb21ha2V5IGV0YyAqLworI2RlZmluZSBWSURJT0NHRkJVRgkJX0lPUigndicsMTEsIHN0cnVjdCB2aWRlb19idWZmZXIpCS8qIEdldCBmcmFtZSBidWZmZXIgKi8KKyNkZWZpbmUgVklESU9DU0ZCVUYJCV9JT1coJ3YnLDEyLCBzdHJ1Y3QgdmlkZW9fYnVmZmVyKQkvKiBTZXQgZnJhbWUgYnVmZmVyIC0gcm9vdCBvbmx5ICovCisjZGVmaW5lIFZJRElPQ0tFWQkJX0lPUigndicsMTMsIHN0cnVjdCB2aWRlb19rZXkpCQkvKiBWaWRlbyBrZXkgZXZlbnQgLSB0byBkZXYgMjU1IGlzIHRvIGFsbCAtIGN1dHMgY2FwdHVyZSBvbiBhbGwgRE1BIHdpbmRvd3Mgd2l0aCB0aGlzIGtleSAoMHhGRkZGRkZGRiA9PSBhbGwpICovCisjZGVmaW5lIFZJRElPQ0dGUkVRCQlfSU9SKCd2JywxNCwgdW5zaWduZWQgbG9uZykJCS8qIFNldCB0dW5lciAqLworI2RlZmluZSBWSURJT0NTRlJFUQkJX0lPVygndicsMTUsIHVuc2lnbmVkIGxvbmcpCQkvKiBTZXQgdHVuZXIgKi8KKyNkZWZpbmUgVklESU9DR0FVRElPCQlfSU9SKCd2JywxNiwgc3RydWN0IHZpZGVvX2F1ZGlvKQkvKiBHZXQgYXVkaW8gaW5mbyAqLworI2RlZmluZSBWSURJT0NTQVVESU8JCV9JT1coJ3YnLDE3LCBzdHJ1Y3QgdmlkZW9fYXVkaW8pCS8qIEF1ZGlvIHNvdXJjZSwgbXV0ZSBldGMgKi8KKyNkZWZpbmUgVklESU9DU1lOQwkJX0lPVygndicsMTgsIGludCkJCQkvKiBTeW5jIHdpdGggbW1hcCBncmFiYmluZyAqLworI2RlZmluZSBWSURJT0NNQ0FQVFVSRQkJX0lPVygndicsMTksIHN0cnVjdCB2aWRlb19tbWFwKQkJLyogR3JhYiBmcmFtZXMgKi8KKyNkZWZpbmUgVklESU9DR01CVUYJCV9JT1IoJ3YnLDIwLCBzdHJ1Y3QgdmlkZW9fbWJ1ZikJCS8qIE1lbW9yeSBtYXAgYnVmZmVyIGluZm8gKi8KKyNkZWZpbmUgVklESU9DR1VOSVQJCV9JT1IoJ3YnLDIxLCBzdHJ1Y3QgdmlkZW9fdW5pdCkJCS8qIEdldCBhdHRhY2hlZCB1bml0cyAqLworI2RlZmluZSBWSURJT0NHQ0FQVFVSRQkJX0lPUigndicsMjIsIHN0cnVjdCB2aWRlb19jYXB0dXJlKQkvKiBHZXQgc3ViY2FwdHVyZSAqLworI2RlZmluZSBWSURJT0NTQ0FQVFVSRQkJX0lPVygndicsMjMsIHN0cnVjdCB2aWRlb19jYXB0dXJlKQkvKiBTZXQgc3ViY2FwdHVyZSAqLworI2RlZmluZSBWSURJT0NTUExBWU1PREUJCV9JT1coJ3YnLDI0LCBzdHJ1Y3QgdmlkZW9fcGxheV9tb2RlKQkvKiBTZXQgb3V0cHV0IHZpZGVvIG1vZGUvZmVhdHVyZSAqLworI2RlZmluZSBWSURJT0NTV1JJVEVNT0RFCV9JT1coJ3YnLDI1LCBpbnQpCQkJLyogU2V0IHdyaXRlIG1vZGUgKi8KKyNkZWZpbmUgVklESU9DR1BMQVlJTkZPCQlfSU9SKCd2JywyNiwgc3RydWN0IHZpZGVvX2luZm8pCQkvKiBHZXQgY3VycmVudCBwbGF5YmFjayBpbmZvIGZyb20gaGFyZHdhcmUgKi8KKyNkZWZpbmUgVklESU9DU01JQ1JPQ09ERQlfSU9XKCd2JywyNywgc3RydWN0IHZpZGVvX2NvZGUpCQkvKiBMb2FkIG1pY3JvY29kZSBpbnRvIGhhcmR3YXJlICovCisjZGVmaW5lCVZJRElPQ0dWQklGTVQJCV9JT1IoJ3YnLDI4LCBzdHJ1Y3QgdmJpX2Zvcm1hdCkJCS8qIEdldCBWQkkgaW5mb3JtYXRpb24gKi8KKyNkZWZpbmUJVklESU9DU1ZCSUZNVAkJX0lPVygndicsMjksIHN0cnVjdCB2YmlfZm9ybWF0KQkJLyogU2V0IFZCSSBpbmZvcm1hdGlvbiAqLworCisKKyNkZWZpbmUgQkFTRV9WSURJT0NQUklWQVRFCTE5MgkJLyogMTkyLTI1NSBhcmUgcHJpdmF0ZSAqLworCisvKiBWSURJT0NTV1JJVEVNT0RFICovCisjZGVmaW5lIFZJRF9XUklURV9NUEVHX0FVRAkJMAorI2RlZmluZSBWSURfV1JJVEVfTVBFR19WSUQJCTEKKyNkZWZpbmUgVklEX1dSSVRFX09TRAkJCTIKKyNkZWZpbmUgVklEX1dSSVRFX1RUWAkJCTMKKyNkZWZpbmUgVklEX1dSSVRFX0NDCQkJNAorI2RlZmluZSBWSURfV1JJVEVfTUpQRUcJCQk1CisKKy8qIFZJRElPQ1NQTEFZTU9ERSAqLworI2RlZmluZSBWSURfUExBWV9WSURfT1VUX01PREUJCTAKKwkvKiBwMTogPSBWSURFT19NT0RFX1BBTCwgVklERU9fTU9ERV9OVFNDLCBldGMgLi4uICovCisjZGVmaW5lIFZJRF9QTEFZX0dFTkxPQ0sJCTEKKwkvKiBwMTogMCA9IE9GRiwgMSA9IE9OICovCisJLyogcDI6IEdFTkxPQ0sgRklORSBERUxBWSB2YWx1ZSAqLworI2RlZmluZSBWSURfUExBWV9OT1JNQUwJCQkyCisjZGVmaW5lIFZJRF9QTEFZX1BBVVNFCQkJMworI2RlZmluZSBWSURfUExBWV9TSU5HTEVfRlJBTUUJCTQKKyNkZWZpbmUgVklEX1BMQVlfRkFTVF9GT1JXQVJECQk1CisjZGVmaW5lIFZJRF9QTEFZX1NMT1dfTU9USU9OCQk2CisjZGVmaW5lIFZJRF9QTEFZX0lNTUVESUFURV9OT1JNQUwJNworI2RlZmluZSBWSURfUExBWV9TV0lUQ0hfQ0hBTk5FTFMJOAorI2RlZmluZSBWSURfUExBWV9GUkVFWkVfRlJBTUUJCTkKKyNkZWZpbmUgVklEX1BMQVlfU1RJTExfTU9ERQkJMTAKKyNkZWZpbmUgVklEX1BMQVlfTUFTVEVSX01PREUJCTExCisJLyogcDE6IHNlZSBiZWxvdyAqLworI2RlZmluZQkJVklEX1BMQVlfTUFTVEVSX05PTkUJMQorI2RlZmluZQkJVklEX1BMQVlfTUFTVEVSX1ZJREVPCTIKKyNkZWZpbmUJCVZJRF9QTEFZX01BU1RFUl9BVURJTwkzCisjZGVmaW5lIFZJRF9QTEFZX0FDVElWRV9TQ0FOTElORVMJMTIKKwkvKiBwMSA9IGZpcnN0IGFjdGl2ZTsgcDIgPSBsYXN0IGFjdGl2ZSAqLworI2RlZmluZSBWSURfUExBWV9SRVNFVAkJCTEzCisjZGVmaW5lIFZJRF9QTEFZX0VORF9NQVJLCQkxNAorCisjZW5kaWYgLyogX19MSU5VWF9WSURFT0RFVl9IICovCisKKy8qCisgKiBMb2NhbCB2YXJpYWJsZXM6CisgKiBjLWJhc2ljLW9mZnNldDogOAorICogRW5kOgorICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc21iZnMvY2FjaGUuYyBiL2RyaXZlcnMvc3RhZ2luZy9zbWJmcy9jYWNoZS5jCmluZGV4IGRiYjk4NjUuLmYyYTEzMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zbWJmcy9jYWNoZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zbWJmcy9jYWNoZS5jCkBAIC02Miw3ICs2Miw3IEBACiAJc3RydWN0IGxpc3RfaGVhZCAqbmV4dDsKIAlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CiAKLQlzcGluX2xvY2soJmRjYWNoZV9sb2NrKTsKKwlzcGluX2xvY2soJnBhcmVudC0+ZF9sb2NrKTsKIAluZXh0ID0gcGFyZW50LT5kX3N1YmRpcnMubmV4dDsKIAl3aGlsZSAobmV4dCAhPSAmcGFyZW50LT5kX3N1YmRpcnMpIHsKIAkJZGVudHJ5ID0gbGlzdF9lbnRyeShuZXh0LCBzdHJ1Y3QgZGVudHJ5LCBkX3UuZF9jaGlsZCk7CkBAIC03MCw3ICs3MCw3IEBACiAJCXNtYl9hZ2VfZGVudHJ5KHNlcnZlciwgZGVudHJ5KTsKIAkJbmV4dCA9IG5leHQtPm5leHQ7CiAJfQotCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7CisJc3Bpbl91bmxvY2soJnBhcmVudC0+ZF9sb2NrKTsKIH0KIAogLyoKQEAgLTk2LDEzICs5NiwxMyBAQAogCX0KIAogCS8qIElmIGEgcG9pbnRlciBpcyBpbnZhbGlkLCB3ZSBzZWFyY2ggdGhlIGRlbnRyeS4gKi8KLQlzcGluX2xvY2soJmRjYWNoZV9sb2NrKTsKKwlzcGluX2xvY2soJnBhcmVudC0+ZF9sb2NrKTsKIAluZXh0ID0gcGFyZW50LT5kX3N1YmRpcnMubmV4dDsKIAl3aGlsZSAobmV4dCAhPSAmcGFyZW50LT5kX3N1YmRpcnMpIHsKIAkJZGVudCA9IGxpc3RfZW50cnkobmV4dCwgc3RydWN0IGRlbnRyeSwgZF91LmRfY2hpbGQpOwogCQlpZiAoKHVuc2lnbmVkIGxvbmcpZGVudC0+ZF9mc2RhdGEgPT0gZnBvcykgewogCQkJaWYgKGRlbnQtPmRfaW5vZGUpCi0JCQkJZGdldF9sb2NrZWQoZGVudCk7CisJCQkJZGdldChkZW50KTsKIAkJCWVsc2UKIAkJCQlkZW50ID0gTlVMTDsKIAkJCWdvdG8gb3V0X3VubG9jazsKQEAgLTExMSw3ICsxMTEsNyBAQAogCX0KIAlkZW50ID0gTlVMTDsKIG91dF91bmxvY2s6Ci0Jc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKKwlzcGluX3VubG9jaygmcGFyZW50LT5kX2xvY2spOwogCXJldHVybiBkZW50OwogfQogCkBAIC0xMzQsNyArMTM0LDcgQEAKIAlxbmFtZS0+aGFzaCA9IGZ1bGxfbmFtZV9oYXNoKHFuYW1lLT5uYW1lLCBxbmFtZS0+bGVuKTsKIAogCWlmIChkZW50cnktPmRfb3AgJiYgZGVudHJ5LT5kX29wLT5kX2hhc2gpCi0JCWlmIChkZW50cnktPmRfb3AtPmRfaGFzaChkZW50cnksIHFuYW1lKSAhPSAwKQorCQlpZiAoZGVudHJ5LT5kX29wLT5kX2hhc2goZGVudHJ5LCBpbm9kZSwgcW5hbWUpICE9IDApCiAJCQlnb3RvIGVuZF9hZHZhbmNlOwogCiAJbmV3ZGVudCA9IGRfbG9va3VwKGRlbnRyeSwgcW5hbWUpOwpAQCAtMTQ1LDggKzE0NSw4IEBACiAJCQlnb3RvIGVuZF9hZHZhbmNlOwogCX0gZWxzZSB7CiAJCWhhc2hlZCA9IDE7Ci0JCW1lbWNweSgoY2hhciAqKSBuZXdkZW50LT5kX25hbWUubmFtZSwgcW5hbWUtPm5hbWUsCi0JCSAgICAgICBuZXdkZW50LT5kX25hbWUubGVuKTsKKwkJLyogZGlyIGlfbXV0ZXggaXMgbG9ja2VkIGJlY2F1c2Ugd2UncmUgaW4gcmVhZGRpciAqLworCQlkZW50cnlfdXBkYXRlX25hbWVfY2FzZShuZXdkZW50LCBxbmFtZSk7CiAJfQogCiAJaWYgKCFuZXdkZW50LT5kX2lub2RlKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc21iZnMvZGlyLmMgYi9kcml2ZXJzL3N0YWdpbmcvc21iZnMvZGlyLmMKaW5kZXggZjA4OGVhMi4uZGQ2MTJmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3NtYmZzL2Rpci5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zbWJmcy9kaXIuYwpAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgogCiAjaW5jbHVkZSAic21iX2ZzLmgiCiAjaW5jbHVkZSAic21iX21vdW50LmgiCkBAIC0yNzQsOSArMjc1LDEzIEBACiAgKiBEZW50cnkgb3BlcmF0aW9ucyByb3V0aW5lcwogICovCiBzdGF0aWMgaW50IHNtYl9sb29rdXBfdmFsaWRhdGUoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgbmFtZWlkYXRhICopOwotc3RhdGljIGludCBzbWJfaGFzaF9kZW50cnkoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgcXN0ciAqKTsKLXN0YXRpYyBpbnQgc21iX2NvbXBhcmVfZGVudHJ5KHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IHFzdHIgKiwgc3RydWN0IHFzdHIgKik7Ci1zdGF0aWMgaW50IHNtYl9kZWxldGVfZGVudHJ5KHN0cnVjdCBkZW50cnkgKik7CitzdGF0aWMgaW50IHNtYl9oYXNoX2RlbnRyeShjb25zdCBzdHJ1Y3QgZGVudHJ5ICosIGNvbnN0IHN0cnVjdCBpbm9kZSAqLAorCQlzdHJ1Y3QgcXN0ciAqKTsKK3N0YXRpYyBpbnQgc21iX2NvbXBhcmVfZGVudHJ5KGNvbnN0IHN0cnVjdCBkZW50cnkgKiwKKwkJY29uc3Qgc3RydWN0IGlub2RlICosCisJCWNvbnN0IHN0cnVjdCBkZW50cnkgKiwgY29uc3Qgc3RydWN0IGlub2RlICosCisJCXVuc2lnbmVkIGludCwgY29uc3QgY2hhciAqLCBjb25zdCBzdHJ1Y3QgcXN0ciAqKTsKK3N0YXRpYyBpbnQgc21iX2RlbGV0ZV9kZW50cnkoY29uc3Qgc3RydWN0IGRlbnRyeSAqKTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBzbWJmc19kZW50cnlfb3BlcmF0aW9ucyA9CiB7CkBAIC0yOTcsMTMgKzMwMiwyMCBAQAogICogVGhpcyBpcyB0aGUgY2FsbGJhY2sgd2hlbiB0aGUgZGNhY2hlIGhhcyBhIGxvb2t1cCBoaXQuCiAgKi8KIHN0YXRpYyBpbnQKLXNtYl9sb29rdXBfdmFsaWRhdGUoc3RydWN0IGRlbnRyeSAqIGRlbnRyeSwgc3RydWN0IG5hbWVpZGF0YSAqbmQpCitzbWJfbG9va3VwX3ZhbGlkYXRlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IG5hbWVpZGF0YSAqbmQpCiB7Ci0Jc3RydWN0IHNtYl9zYl9pbmZvICpzZXJ2ZXIgPSBzZXJ2ZXJfZnJvbV9kZW50cnkoZGVudHJ5KTsKLQlzdHJ1Y3QgaW5vZGUgKiBpbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKLQl1bnNpZ25lZCBsb25nIGFnZSA9IGppZmZpZXMgLSBkZW50cnktPmRfdGltZTsKKwlzdHJ1Y3Qgc21iX3NiX2luZm8gKnNlcnZlcjsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCXVuc2lnbmVkIGxvbmcgYWdlOwogCWludCB2YWxpZDsKIAorCWlmIChuZC0+ZmxhZ3MgJiBMT09LVVBfUkNVKQorCQlyZXR1cm4gLUVDSElMRDsKKworCXNlcnZlciA9IHNlcnZlcl9mcm9tX2RlbnRyeShkZW50cnkpOworCWlub2RlID0gZGVudHJ5LT5kX2lub2RlOworCWFnZSA9IGppZmZpZXMgLSBkZW50cnktPmRfdGltZTsKKwogCS8qCiAJICogVGhlIGRlZmF1bHQgdmFsaWRhdGlvbiBpcyBiYXNlZCBvbiBkZW50cnkgYWdlOgogCSAqIHdlIGJlbGlldmUgaW4gZGVudHJpZXMgZm9yIGEgZmV3IHNlY29uZHMuICAoQnV0IGVhY2gKQEAgLTMzMyw3ICszNDUsOCBAQAogfQogCiBzdGF0aWMgaW50IAotc21iX2hhc2hfZGVudHJ5KHN0cnVjdCBkZW50cnkgKmRpciwgc3RydWN0IHFzdHIgKnRoaXMpCitzbWJfaGFzaF9kZW50cnkoY29uc3Qgc3RydWN0IGRlbnRyeSAqZGlyLCBjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQlzdHJ1Y3QgcXN0ciAqdGhpcykKIHsKIAl1bnNpZ25lZCBsb25nIGhhc2g7CiAJaW50IGk7CkBAIC0zNDcsMTQgKzM2MCwxNyBAQAogfQogCiBzdGF0aWMgaW50Ci1zbWJfY29tcGFyZV9kZW50cnkoc3RydWN0IGRlbnRyeSAqZGlyLCBzdHJ1Y3QgcXN0ciAqYSwgc3RydWN0IHFzdHIgKmIpCitzbWJfY29tcGFyZV9kZW50cnkoY29uc3Qgc3RydWN0IGRlbnRyeSAqcGFyZW50LAorCQljb25zdCBzdHJ1Y3QgaW5vZGUgKnBpbm9kZSwKKwkJY29uc3Qgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQl1bnNpZ25lZCBpbnQgbGVuLCBjb25zdCBjaGFyICpzdHIsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKQogewogCWludCBpLCByZXN1bHQgPSAxOwogCi0JaWYgKGEtPmxlbiAhPSBiLT5sZW4pCisJaWYgKGxlbiAhPSBuYW1lLT5sZW4pCiAJCWdvdG8gb3V0OwotCWZvciAoaT0wOyBpIDwgYS0+bGVuOyBpKyspIHsKLQkJaWYgKHRvbG93ZXIoYS0+bmFtZVtpXSkgIT0gdG9sb3dlcihiLT5uYW1lW2ldKSkKKwlmb3IgKGk9MDsgaSA8IGxlbjsgaSsrKSB7CisJCWlmICh0b2xvd2VyKHN0cltpXSkgIT0gdG9sb3dlcihuYW1lLT5uYW1lW2ldKSkKIAkJCWdvdG8gb3V0OwogCX0KIAlyZXN1bHQgPSAwOwpAQCAtMzY3LDcgKzM4Myw3IEBACiAgKiBXZSB1c2UgdGhpcyB0byB1bmhhc2ggZGVudHJpZXMgd2l0aCBiYWQgaW5vZGVzLgogICovCiBzdGF0aWMgaW50Ci1zbWJfZGVsZXRlX2RlbnRyeShzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5KQorc21iX2RlbGV0ZV9kZW50cnkoY29uc3Qgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogewogCWlmIChkZW50cnktPmRfaW5vZGUpIHsKIAkJaWYgKGlzX2JhZF9pbm9kZShkZW50cnktPmRfaW5vZGUpKSB7CkBAIC0zOTAsOSArNDA2LDkgQEAKIAlzdHJ1Y3Qgc21iX3NiX2luZm8gKnNlcnZlciA9IHNlcnZlcl9mcm9tX2RlbnRyeShkZW50cnkpOwogCiAJaWYgKHNlcnZlci0+bW50LT5mbGFncyAmIFNNQl9NT1VOVF9DQVNFKQotCQlkZW50cnktPmRfb3AgPSAmc21iZnNfZGVudHJ5X29wZXJhdGlvbnNfY2FzZTsKKwkJZF9zZXRfZF9vcChkZW50cnksICZzbWJmc19kZW50cnlfb3BlcmF0aW9uc19jYXNlKTsKIAllbHNlCi0JCWRlbnRyeS0+ZF9vcCA9ICZzbWJmc19kZW50cnlfb3BlcmF0aW9uczsKKwkJZF9zZXRfZF9vcChkZW50cnksICZzbWJmc19kZW50cnlfb3BlcmF0aW9ucyk7CiAJZGVudHJ5LT5kX3RpbWUgPSBqaWZmaWVzOwogfQogCkBAIC00NTQsOSArNDcwLDkgQEAKIAlhZGRfZW50cnk6CiAJCQlzZXJ2ZXIgPSBzZXJ2ZXJfZnJvbV9kZW50cnkoZGVudHJ5KTsKIAkJCWlmIChzZXJ2ZXItPm1udC0+ZmxhZ3MgJiBTTUJfTU9VTlRfQ0FTRSkKLQkJCQlkZW50cnktPmRfb3AgPSAmc21iZnNfZGVudHJ5X29wZXJhdGlvbnNfY2FzZTsKKwkJCQlkX3NldF9kX29wKGRlbnRyeSwgJnNtYmZzX2RlbnRyeV9vcGVyYXRpb25zX2Nhc2UpOwogCQkJZWxzZQotCQkJCWRlbnRyeS0+ZF9vcCA9ICZzbWJmc19kZW50cnlfb3BlcmF0aW9uczsKKwkJCQlkX3NldF9kX29wKGRlbnRyeSwgJnNtYmZzX2RlbnRyeV9vcGVyYXRpb25zKTsKIAogCQkJZF9hZGQoZGVudHJ5LCBpbm9kZSk7CiAJCQlzbWJfcmVuZXdfdGltZXMoZGVudHJ5KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zbWJmcy9maWxlLmMgYi9kcml2ZXJzL3N0YWdpbmcvc21iZnMvZmlsZS5jCmluZGV4IDVkY2QxOWMuLjMxMzcyZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zbWJmcy9maWxlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NtYmZzL2ZpbGUuYwpAQCAtNDA3LDExICs0MDcsMTQgQEAKICAqIHByaXZpbGVnZXMsIHNvIHdlIG5lZWQgb3VyIG93biBjaGVjayBmb3IgdGhpcy4KICAqLwogc3RhdGljIGludAotc21iX2ZpbGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaykKK3NtYl9maWxlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2ssIHVuc2lnbmVkIGludCBmbGFncykKIHsKIAlpbnQgbW9kZSA9IGlub2RlLT5pX21vZGU7CiAJaW50IGVycm9yID0gMDsKIAorCWlmIChmbGFncyAmIElQRVJNX0ZMQUdfUkNVKQorCQlyZXR1cm4gLUVDSElMRDsKKwogCVZFUkJPU0UoIm1vZGU9JXgsIG1hc2s9JXhcbiIsIG1vZGUsIG1hc2spOwogCiAJLyogTG9vayBhdCB1c2VyIHBlcm1pc3Npb25zICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc21iZnMvaW5vZGUuYyBiL2RyaXZlcnMvc3RhZ2luZy9zbWJmcy9pbm9kZS5jCmluZGV4IDU0MGE5ODQuLjI0NDMxOWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zbWJmcy9pbm9kZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zbWJmcy9pbm9kZS5jCkBAIC02Miw5ICs2MiwxNiBAQAogCXJldHVybiAmZWktPnZmc19pbm9kZTsKIH0KIAorc3RhdGljIHZvaWQgc21iX2lfY2FsbGJhY2soc3RydWN0IHJjdV9oZWFkICpoZWFkKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGlub2RlLCBpX3JjdSk7CisJSU5JVF9MSVNUX0hFQUQoJmlub2RlLT5pX2RlbnRyeSk7CisJa21lbV9jYWNoZV9mcmVlKHNtYl9pbm9kZV9jYWNoZXAsIFNNQl9JKGlub2RlKSk7Cit9CisKIHN0YXRpYyB2b2lkIHNtYl9kZXN0cm95X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7Ci0Ja21lbV9jYWNoZV9mcmVlKHNtYl9pbm9kZV9jYWNoZXAsIFNNQl9JKGlub2RlKSk7CisJY2FsbF9yY3UoJmlub2RlLT5pX3JjdSwgc21iX2lfY2FsbGJhY2spOwogfQogCiBzdGF0aWMgdm9pZCBpbml0X29uY2Uodm9pZCAqZm9vKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NwZWFrdXAvZmFrZWtleS5jIGIvZHJpdmVycy9zdGFnaW5nL3NwZWFrdXAvZmFrZWtleS5jCmluZGV4IDY1YjIzMTEuLjFiMzRhODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zcGVha3VwL2Zha2VrZXkuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvc3BlYWt1cC9mYWtla2V5LmMKQEAgLTc4LDEwICs3OCwxMCBAQAogCS8qIGRvbid0IGNoYW5nZSBDUFUgKi8KIAlwcmVlbXB0X2Rpc2FibGUoKTsKIAotCV9fZ2V0X2NwdV92YXIocmVwb3J0aW5nX2tleXN0cm9rZSkgPSB0cnVlOworCV9fdGhpc19jcHVfd3JpdGUocmVwb3J0aW5nX2tleXN0cm9rZSwgdHJ1ZSk7CiAJaW5wdXRfcmVwb3J0X2tleSh2aXJ0X2tleWJvYXJkLCBLRVlfRE9XTiwgUFJFU1NFRCk7CiAJaW5wdXRfcmVwb3J0X2tleSh2aXJ0X2tleWJvYXJkLCBLRVlfRE9XTiwgUkVMRUFTRUQpOwotCV9fZ2V0X2NwdV92YXIocmVwb3J0aW5nX2tleXN0cm9rZSkgPSBmYWxzZTsKKwlfX3RoaXNfY3B1X3dyaXRlKHJlcG9ydGluZ19rZXlzdHJva2UsIGZhbHNlKTsKIAogCS8qIHJlZW5hYmxlIHByZWVtcHRpb24gKi8KIAlwcmVlbXB0X2VuYWJsZSgpOwpAQCAtOTUsMTAgKzk1LDUgQEAKIAkgKi8KIGJvb2wgc3BlYWt1cF9mYWtlX2tleV9wcmVzc2VkKHZvaWQpCiB7Ci0JYm9vbCBpc19wcmVzc2VkOwotCi0JaXNfcHJlc3NlZCA9IGdldF9jcHVfdmFyKHJlcG9ydGluZ19rZXlzdHJva2UpOwotCXB1dF9jcHVfdmFyKHJlcG9ydGluZ19rZXlzdHJva2UpOwotCi0JcmV0dXJuIGlzX3ByZXNzZWQ7CisJcmV0dXJuIHRoaXNfY3B1X3JlYWQocmVwb3J0aW5nX2tleXN0cm9rZSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc3RyYWRpcy9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL3N0cmFkaXMvS2NvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDJmMGZjNS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc3RyYWRpcy9LY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi1jb25maWcgVklERU9fU1RSQURJUwotICAgICAgICB0cmlzdGF0ZSAiU3RyYWRpcyA0OjI6MiBNUEVHLTIgdmlkZW8gZHJpdmVyIChERVBSRUNBVEVEKSIKLSAgICAgICAgZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwgJiYgUENJICYmIFZJREVPX1Y0TDEgJiYgVklSVF9UT19CVVMgJiYgQktMCi0gICAgICAgIGhlbHAKLSAgICAgICAgICBTYXkgWSBoZXJlIHRvIGVuYWJsZSBzdXBwb3J0IGZvciB0aGUgU3RyYWRpcyA0OjI6MiBNUEVHLTIgdmlkZW8KLSAgICAgICAgICBkcml2ZXIgZm9yIFBDSS4gIFRoZXJlIGlzIGEgcHJvZHVjdCBwYWdlIGF0Ci0gICAgICAgICAgPGh0dHA6Ly93d3cuc3RyYWRpcy5jb20vPi4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zdHJhZGlzL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL3N0cmFkaXMvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmMWZlYWIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3N0cmFkaXMvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLW9iai0kKENPTkZJR19WSURFT19TVFJBRElTKSArPSBzdHJhZGlzLm8KLQotRVhUUkFfQ0ZMQUdTICs9IC1JZHJpdmVycy9tZWRpYS92aWRlbwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3N0cmFkaXMvVE9ETyBiL2RyaXZlcnMvc3RhZ2luZy9zdHJhZGlzL1RPRE8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0ODE1MGYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3N0cmFkaXMvVE9ETworKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotVGhpcyBpcyBhbiBvYnNvbGV0ZSBkcml2ZXIgZm9yIGFuY2llbnQgc3RyYWRpcyBoYXJkd2FyZS4KLVdlIGNvdWxkbid0IGZpbmQgYW55b25lIHdpdGggdGhpcyBoYXJkd2FyZSBpbiBvcmRlciB0byBwb3J0IGl0IHRvIHVzZSBWNEwyLgotCi1JZiBub2JvZHkgdGFrZSBjYXJlIG9uIGl0LCB0aGUgZHJpdmVyIHdpbGwgYmUgcmVtb3ZlZCBmb3IgMi42LjM4LgotCi1QbGVhc2Ugc2VuZCBwYXRjaGVzIHRvIGxpbnV4LW1lZGlhQHZnZXIua2VybmVsLm9yZwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3N0cmFkaXMvc3RyYWRpcy5jIGIvZHJpdmVycy9zdGFnaW5nL3N0cmFkaXMvc3RyYWRpcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MDdkZDdlLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zdHJhZGlzL3N0cmFkaXMuYworKysgL2Rldi9udWxsCkBAIC0xLDIyMjIgKzAsMCBAQAotLyoKLSAqIHN0cmFkaXMuYyAtIHN0cmFkaXMgNDoyOjIgbXBlZyBkZWNvZGVyIGRyaXZlcgotICoKLSAqIFN0cmFkaXMgNDoyOjIgTVBFRy0yIERlY29kZXIgRHJpdmVyCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTkgTmF0aGFuIExhcmVkbyA8bGFyZWRvQGdudS5vcmc+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcG9sbC5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+Ci0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGFzbS90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KLQotI2luY2x1ZGUgInNhYTcxNDYuaCIKLSNpbmNsdWRlICJzYWE3MTQ2cmVnLmgiCi0jaW5jbHVkZSAiaWJtbXBlZzIuaCIKLSNpbmNsdWRlICJzYWE3MTIxLmgiCi0jaW5jbHVkZSAiY3M4NDIwLmgiCi0KLSNkZWZpbmUgREVCVUcoeCkJCS8qIGRlYnVnIGRyaXZlciAqLwotI3VuZGVmICBJREVCVUcJCQkvKiBkZWJ1ZyBpcnEgaGFuZGxlciAqLwotI3VuZGVmICBNREVCVUcJCQkvKiBkZWJ1ZyBtZW1vcnkgbWFuYWdlbWVudCAqLwotCi0jZGVmaW5lIFNBQTcxNDZfTUFYIDYKLQotc3RhdGljIHN0cnVjdCBzYWE3MTQ2IHNhYTcxNDZzW1NBQTcxNDZfTUFYXTsKLQotc3RhdGljIGludCBzYWFfbnVtOwkJLyogbnVtYmVyIG9mIFNBQTcxNDZzIGluIHVzZSAqLwotCi1zdGF0aWMgaW50IHZpZGVvX25yID0gLTE7Ci1tb2R1bGVfcGFyYW0odmlkZW9fbnIsIGludCwgMCk7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLSNkZWZpbmUgbkRlYk5vcm1hbAkweDAwNDgwMDAwCi0jZGVmaW5lIG5EZWJOb0luYwkweDAwNDgwMDAwCi0jZGVmaW5lIG5EZWJWaWRlbwkweGQwNDgwMDAwCi0jZGVmaW5lIG5EZWJBdWRpbwkweGQwNDAwMDAwCi0jZGVmaW5lIG5EZWJETUEJCTB4MDJjODAwMDAKLQotI2RlZmluZSBvRGViTm9ybWFsCTB4MTNjODAwMDAKLSNkZWZpbmUgb0RlYk5vSW5jCTB4MTNjODAwMDAKLSNkZWZpbmUgb0RlYlZpZGVvCTB4ZDEwODAwMDAKLSNkZWZpbmUgb0RlYkF1ZGlvCTB4ZDEwODAwMDAKLSNkZWZpbmUgb0RlYkRNQQkJMHgwMzA4MDAwMAotCi0jZGVmaW5lIE5ld0NhcmQJCShzYWEtPmJvYXJkY2ZnWzNdKQotI2RlZmluZSBDaGlwQ29udHJvbAkoc2FhLT5ib2FyZGNmZ1sxXSkKLSNkZWZpbmUgTlRTQ0ZpcnN0QWN0aXZlCShzYWEtPmJvYXJkY2ZnWzRdKQotI2RlZmluZSBQQUxGaXJzdEFjdGl2ZQkoc2FhLT5ib2FyZGNmZ1s1XSkKLSNkZWZpbmUgTlRTQ0xhc3RBY3RpdmUJKHNhYS0+Ym9hcmRjZmdbNTRdKQotI2RlZmluZSBQQUxMYXN0QWN0aXZlCShzYWEtPmJvYXJkY2ZnWzU1XSkKLSNkZWZpbmUgSGF2ZTJNQgkJKHNhYS0+Ym9hcmRjZmdbMThdICYgMHg0MCkKLSNkZWZpbmUgSGF2ZUNTODQyMAkoc2FhLT5ib2FyZGNmZ1sxOF0gJiAweDA0KQotI2RlZmluZSBJQk1NUEVHQ0QyMAkoc2FhLT5ib2FyZGNmZ1sxOF0gJiAweDIwKQotI2RlZmluZSBIYXZlQ1MzMzEwCShzYWEtPmJvYXJkY2ZnWzE4XSAmIDB4MDEpCi0jZGVmaW5lIENTMzMxME1heEx2bAkoKHNhYS0+Ym9hcmRjZmdbMzBdIDw8IDgpIHwgc2FhLT5ib2FyZGNmZ1szMV0pCi0jZGVmaW5lIEhhdmVDUzQzNDEJKHNhYS0+Ym9hcmRjZmdbNDBdID09IDIpCi0jZGVmaW5lIFNESVR5cGUJCShzYWEtPmJvYXJkY2ZnWzI3XSkKLSNkZWZpbmUgQ3VycmVudE1vZGUJKHNhYS0+Ym9hcmRjZmdbMl0pCi0KLSNkZWZpbmUgZGViTm9ybWFsCShOZXdDYXJkID8gbkRlYk5vcm1hbCA6IG9EZWJOb3JtYWwpCi0jZGVmaW5lIGRlYk5vSW5jCShOZXdDYXJkID8gbkRlYk5vSW5jIDogb0RlYk5vSW5jKQotI2RlZmluZSBkZWJWaWRlbwkoTmV3Q2FyZCA/IG5EZWJWaWRlbyA6IG9EZWJWaWRlbykKLSNkZWZpbmUgZGViQXVkaW8JKE5ld0NhcmQgPyBuRGViQXVkaW8gOiBvRGViQXVkaW8pCi0jZGVmaW5lIGRlYkRNQQkJKE5ld0NhcmQgPyBuRGViRE1BIDogb0RlYkRNQSkKLQotI2lmZGVmIFVTRV9SRVNDVUVfRUVQUk9NX1NETTI3NQotc3RhdGljIHVuc2lnbmVkIGNoYXIgcmVzY3VlX2VlcHJvbVs2NF0gPSB7Ci0JMHgwMCwgMHgwMSwgMHgwNCwgMHgxMywgMHgyNiwgMHgwZiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MywKLQkweDIyLCAweDAxLCAweDI5LCAweDE1LCAweDczLCAweDAwLCAweDFmLCAgJ2QnLCAgJ2UnLCAgJ2MnLCAgJ3gnLCAgJ2wnLAotCSAnZCcsICAndicsICAnYScsIDB4MDIsIDB4MDAsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4YTQsIDB4NjMsIDB4MDksIDB4ZTIsCi0JMHgxMCwgMHgwMCwgMHgwYSwgMHgwMCwgMHgwMiwgMHgwMiwgICdkJywgICdlJywgICdjJywgICd4JywgICdsJywgICdhJywKLQkweDAwLCAweDAwLCAweDQyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi19OwotI2VuZGlmCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKiBIYXJkd2FyZSBJMkMgZnVuY3Rpb25zICovCi1zdGF0aWMgdm9pZCBJMkNXaXBlKHN0cnVjdCBzYWE3MTQ2ICpzYWEpCi17Ci0JaW50IGk7Ci0JLyogc2V0IGkyYyB0byB+PTEwMGtIeiwgYWJvcnQgdHJhbnNmZXIsIGNsZWFyIGJ1c3kgKi8KLQlzYWF3cml0ZSgweDYwMCB8IFNBQTcxNDZfSTJDX0FCT1JULCBTQUE3MTQ2X0kyQ19TVEFUVVMpOwotCXNhYXdyaXRlKChTQUE3MTQ2X01DMl9VUExEX0kyQyA8PCAxNikgfAotCQkgU0FBNzE0Nl9NQzJfVVBMRF9JMkMsIFNBQTcxNDZfTUMyKTsKLQkvKiB3YWl0IGZvciBpMmMgcmVnaXN0ZXJzIHRvIGJlIHByb2dyYW1tZWQgKi8KLQlmb3IgKGkgPSAwOyBpIDwgMTAwMCAmJgotCSAgICAgIShzYWFyZWFkKFNBQTcxNDZfTUMyKSAmIFNBQTcxNDZfTUMyX1VQTERfSTJDKTsgaSsrKQotCQlzY2hlZHVsZSgpOwotCXNhYXdyaXRlKDB4NjAwLCBTQUE3MTQ2X0kyQ19TVEFUVVMpOwotCXNhYXdyaXRlKChTQUE3MTQ2X01DMl9VUExEX0kyQyA8PCAxNikgfAotCQkgU0FBNzE0Nl9NQzJfVVBMRF9JMkMsIFNBQTcxNDZfTUMyKTsKLQkvKiB3YWl0IGZvciBpMmMgcmVnaXN0ZXJzIHRvIGJlIHByb2dyYW1tZWQgKi8KLQlmb3IgKGkgPSAwOyBpIDwgMTAwMCAmJgotCSAgICAgIShzYWFyZWFkKFNBQTcxNDZfTUMyKSAmIFNBQTcxNDZfTUMyX1VQTERfSTJDKTsgaSsrKQotCQlzY2hlZHVsZSgpOwotCXNhYXdyaXRlKDB4NjAwLCBTQUE3MTQ2X0kyQ19TVEFUVVMpOwotCXNhYXdyaXRlKChTQUE3MTQ2X01DMl9VUExEX0kyQyA8PCAxNikgfAotCQkgU0FBNzE0Nl9NQzJfVVBMRF9JMkMsIFNBQTcxNDZfTUMyKTsKLQkvKiB3YWl0IGZvciBpMmMgcmVnaXN0ZXJzIHRvIGJlIHByb2dyYW1tZWQgKi8KLQlmb3IgKGkgPSAwOyBpIDwgMTAwMCAmJgotCSAgICAgIShzYWFyZWFkKFNBQTcxNDZfTUMyKSAmIFNBQTcxNDZfTUMyX1VQTERfSTJDKTsgaSsrKQotCQlzY2hlZHVsZSgpOwotfQotCi0vKiByZWFkIEkyQyAqLwotc3RhdGljIGludCBJMkNSZWFkKHN0cnVjdCBzYWE3MTQ2ICpzYWEsIHVuc2lnbmVkIGNoYXIgYWRkciwKLQkJICAgdW5zaWduZWQgY2hhciBzdWJhZGRyLCBpbnQgZG9zdWIpCi17Ci0JaW50IGk7Ci0KLQlpZiAoc2FhcmVhZChTQUE3MTQ2X0kyQ19TVEFUVVMpICYgMHgzYykKLQkJSTJDV2lwZShzYWEpOwotCWZvciAoaSA9IDA7Ci0JCWkgPCAxMDAwICYmIChzYWFyZWFkKFNBQTcxNDZfSTJDX1NUQVRVUykgJiBTQUE3MTQ2X0kyQ19CVVNZKTsKLQkJaSsrKQotCQlzY2hlZHVsZSgpOwotCWlmIChpID09IDEwMDApCi0JCUkyQ1dpcGUoc2FhKTsKLQlpZiAoZG9zdWIpCi0JCXNhYXdyaXRlKCgoYWRkciAmIDB4ZmUpIDw8IDI0KSB8ICgoKGFkZHIgfCAxKSAmIDB4ZmYpIDw8IDgpIHwKLQkJCSgoc3ViYWRkciAmIDB4ZmYpIDw8IDE2KSB8IDB4ZWQsIFNBQTcxNDZfSTJDX1RSQU5TRkVSKTsKLQllbHNlCi0JCXNhYXdyaXRlKCgoYWRkciAmIDB4ZmUpIDw8IDI0KSB8ICgoKGFkZHIgfCAxKSAmIDB4ZmYpIDw8IDE2KSB8Ci0JCQkweGYxLCBTQUE3MTQ2X0kyQ19UUkFOU0ZFUik7Ci0Jc2Fhd3JpdGUoKFNBQTcxNDZfTUMyX1VQTERfSTJDIDw8IDE2KSB8Ci0JCSBTQUE3MTQ2X01DMl9VUExEX0kyQywgU0FBNzE0Nl9NQzIpOwotCS8qIHdhaXQgZm9yIGkyYyByZWdpc3RlcnMgdG8gYmUgcHJvZ3JhbW1lZCAqLwotCWZvciAoaSA9IDA7IGkgPCAxMDAwICYmCi0JICAgICAhKHNhYXJlYWQoU0FBNzE0Nl9NQzIpICYgU0FBNzE0Nl9NQzJfVVBMRF9JMkMpOyBpKyspCi0JCXNjaGVkdWxlKCk7Ci0JLyogd2FpdCBmb3IgdmFsaWQgZGF0YSAqLwotCWZvciAoaSA9IDA7IGkgPCAxMDAwICYmCi0JICAgICAoc2FhcmVhZChTQUE3MTQ2X0kyQ19TVEFUVVMpICYgU0FBNzE0Nl9JMkNfQlVTWSk7IGkrKykKLQkJc2NoZWR1bGUoKTsKLQlpZiAoc2FhcmVhZChTQUE3MTQ2X0kyQ19TVEFUVVMpICYgU0FBNzE0Nl9JMkNfRVJSKQotCQlyZXR1cm4gLTE7Ci0JaWYgKGkgPT0gMTAwMCkKLQkJcHJpbnRrKCJpMmMgc2V0dXAgcmVhZCB0aW1lb3V0XG4iKTsKLQlzYWF3cml0ZSgweDQxLCBTQUE3MTQ2X0kyQ19UUkFOU0ZFUik7Ci0Jc2Fhd3JpdGUoKFNBQTcxNDZfTUMyX1VQTERfSTJDIDw8IDE2KSB8Ci0JCSBTQUE3MTQ2X01DMl9VUExEX0kyQywgU0FBNzE0Nl9NQzIpOwotCS8qIHdhaXQgZm9yIGkyYyByZWdpc3RlcnMgdG8gYmUgcHJvZ3JhbW1lZCAqLwotCWZvciAoaSA9IDA7IGkgPCAxMDAwICYmCi0JICAgICAhKHNhYXJlYWQoU0FBNzE0Nl9NQzIpICYgU0FBNzE0Nl9NQzJfVVBMRF9JMkMpOyBpKyspCi0JCXNjaGVkdWxlKCk7Ci0JLyogd2FpdCBmb3IgdmFsaWQgZGF0YSAqLwotCWZvciAoaSA9IDA7IGkgPCAxMDAwICYmCi0JICAgICAoc2FhcmVhZChTQUE3MTQ2X0kyQ19UUkFOU0ZFUikgJiBTQUE3MTQ2X0kyQ19CVVNZKTsgaSsrKQotCQlzY2hlZHVsZSgpOwotCWlmIChzYWFyZWFkKFNBQTcxNDZfSTJDX1RSQU5TRkVSKSAmIFNBQTcxNDZfSTJDX0VSUikKLQkJcmV0dXJuIC0xOwotCWlmIChpID09IDEwMDApCi0JCXByaW50aygiaTJjIHJlYWQgdGltZW91dFxuIik7Ci0JcmV0dXJuICgoc2FhcmVhZChTQUE3MTQ2X0kyQ19UUkFOU0ZFUikgPj4gMjQpICYgMHhmZik7Ci19Ci0KLS8qIHNldCBib3RoIHRvIHdyaXRlIGJvdGggYnl0ZXMsIHJlc2V0IGl0IHRvIHdyaXRlIG9ubHkgYjEgKi8KLQotc3RhdGljIGludCBJMkNXcml0ZShzdHJ1Y3Qgc2FhNzE0NiAqc2FhLCB1bnNpZ25lZCBjaGFyIGFkZHIsIHVuc2lnbmVkIGNoYXIgYjEsCi0JCSAgICB1bnNpZ25lZCBjaGFyIGIyLCBpbnQgYm90aCkKLXsKLQlpbnQgaTsKLQl1MzIgZGF0YTsKLQotCWlmIChzYWFyZWFkKFNBQTcxNDZfSTJDX1NUQVRVUykgJiAweDNjKQotCQlJMkNXaXBlKHNhYSk7Ci0JZm9yIChpID0gMDsgaSA8IDEwMDAgJiYKLQkgICAgIChzYWFyZWFkKFNBQTcxNDZfSTJDX1NUQVRVUykgJiBTQUE3MTQ2X0kyQ19CVVNZKTsgaSsrKQotCQlzY2hlZHVsZSgpOwotCWlmIChpID09IDEwMDApCi0JCUkyQ1dpcGUoc2FhKTsKLQlkYXRhID0gKChhZGRyICYgMHhmZSkgPDwgMjQpIHwgKChiMSAmIDB4ZmYpIDw8IDE2KTsKLQlpZiAoYm90aCkKLQkJZGF0YSB8PSAoKGIyICYgMHhmZikgPDwgOCkgfCAweGU1OwotCWVsc2UKLQkJZGF0YSB8PSAweGQxOwotCXNhYXdyaXRlKGRhdGEsIFNBQTcxNDZfSTJDX1RSQU5TRkVSKTsKLQlzYWF3cml0ZSgoU0FBNzE0Nl9NQzJfVVBMRF9JMkMgPDwgMTYpIHwgU0FBNzE0Nl9NQzJfVVBMRF9JMkMsCi0JCSBTQUE3MTQ2X01DMik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGF0dGFjaF9pbmZvcm0oc3RydWN0IHNhYTcxNDYgKnNhYSwgaW50IGlkKQotewotCWludCBpOwotCi0JREVCVUcocHJpbnRrKEtFUk5fREVCVUcgInN0cmFkaXMlZDogaTJjOiBkZXZpY2UgZm91bmQ9JTAyeFxuIiwgc2FhLT5uciwKLQkJaWQpKTsKLQlpZiAoaWQgPT0gMHhhMCkgewkvKiB3ZSBoYXZlIHJldjIgb3IgbGF0ZXIgYm9hcmQsIGZpbGwgaW4gaW5mbyAqLwotCQlmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykKLQkJCXNhYS0+Ym9hcmRjZmdbaV0gPSBJMkNSZWFkKHNhYSwgMHhhMCwgaSwgMSk7Ci0jaWZkZWYgVVNFX1JFU0NVRV9FRVBST01fU0RNMjc1Ci0JCWlmIChzYWEtPmJvYXJkY2ZnWzBdICE9IDApIHsKLQkJCXByaW50aygic3RyYWRpcyVkOiBXQVJOSU5HOiBFRVBST00gU1RPUkVEIFZBTFVFUyBIQVZFICIKLQkJCQkiQkVFTiBJR05PUkVEXG4iLCBzYWEtPm5yKTsKLQkJCWZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKQotCQkJCXNhYS0+Ym9hcmRjZmdbaV0gPSByZXNjdWVfZWVwcm9tW2ldOwotCQl9Ci0jZW5kaWYKLQkJcHJpbnRrKCJzdHJhZGlzJWQ6IGNvbmZpZyA9Iiwgc2FhLT5ucik7Ci0JCWZvciAoaSA9IDA7IGkgPCA1MTsgaSsrKSB7Ci0JCQlwcmludGsoIiAlMDJ4Iiwgc2FhLT5ib2FyZGNmZ1tpXSk7Ci0JCX0KLQkJcHJpbnRrKCJcbiIpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgSTJDQnVzU2NhbihzdHJ1Y3Qgc2FhNzE0NiAqc2FhKQotewotCWludCBpOwotCWZvciAoaSA9IDA7IGkgPCAweGZmOyBpICs9IDIpCi0JCWlmICgoSTJDUmVhZChzYWEsIGksIDAsIDApKSA+PSAwKQotCQkJYXR0YWNoX2luZm9ybShzYWEsIGkpOwotfQotCi1zdGF0aWMgaW50IGRlYml3YWl0X21heHdhaXQ7Ci0KLXN0YXRpYyBpbnQgd2FpdF9mb3JfZGViaV9kb25lKHN0cnVjdCBzYWE3MTQ2ICpzYWEpCi17Ci0JaW50IGk7Ci0KLQkvKiB3YWl0IGZvciByZWdpc3RlcnMgdG8gYmUgcHJvZ3JhbW1lZCAqLwotCWZvciAoaSA9IDA7IGkgPCAxMDAwMDAgJiYKLQkgICAgICEoc2FhcmVhZChTQUE3MTQ2X01DMikgJiBTQUE3MTQ2X01DMl9VUExEX0RFQkkpOyBpKyspCi0JCXNhYXJlYWQoU0FBNzE0Nl9NQzIpOwotCS8qIHdhaXQgZm9yIHRyYW5zZmVyIHRvIGNvbXBsZXRlICovCi0JZm9yIChpID0gMDsgaSA8IDUwMDAwMCAmJgotCSAgICAgKHNhYXJlYWQoU0FBNzE0Nl9QU1IpICYgU0FBNzE0Nl9QU1JfREVCSV9TKTsgaSsrKQotCQlzYWFyZWFkKFNBQTcxNDZfTUMyKTsKLQotCWlmIChpID4gZGViaXdhaXRfbWF4d2FpdCkKLQkJcHJpbnRrKCJ3YWl0LWZvci1kZWJpLWRvbmUgbWF4d2FpdDogJWRcbiIsCi0JCQlkZWJpd2FpdF9tYXh3YWl0ID0gaSk7Ci0KLQlpZiAoaSA9PSA1MDAwMDApCi0JCXJldHVybiAtMTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGRlYml3cml0ZShzdHJ1Y3Qgc2FhNzE0NiAqc2FhLCB1MzIgY29uZmlnLCBpbnQgYWRkciwKLQl1MzIgdmFsLCBpbnQgY291bnQpCi17Ci0JdTMyIGNtZDsKLQlpZiAoY291bnQgPD0gMCB8fCBjb3VudCA+IDMyNzY0KQotCQlyZXR1cm4gLTE7Ci0JaWYgKHdhaXRfZm9yX2RlYmlfZG9uZShzYWEpIDwgMCkKLQkJcmV0dXJuIC0xOwotCXNhYXdyaXRlKGNvbmZpZywgU0FBNzE0Nl9ERUJJX0NPTkZJRyk7Ci0JaWYgKGNvdW50IDw9IDQpCQkvKiBpbW1lZGlhdGUgdHJhbnNmZXIgKi8KLQkJc2Fhd3JpdGUodmFsLCBTQUE3MTQ2X0RFQklfQUQpOwotCWVsc2UJCQkvKiBibG9jayB0cmFuc2ZlciAqLwotCQlzYWF3cml0ZSh2aXJ0X3RvX2J1cyhzYWEtPmRtYWRlYmkpLCBTQUE3MTQ2X0RFQklfQUQpOwotCXNhYXdyaXRlKChjbWQgPSAoY291bnQgPDwgMTcpIHwgKGFkZHIgJiAweGZmZmYpKSwgU0FBNzE0Nl9ERUJJX0NPTU1BTkQpOwotCXNhYXdyaXRlKChTQUE3MTQ2X01DMl9VUExEX0RFQkkgPDwgMTYpIHwgU0FBNzE0Nl9NQzJfVVBMRF9ERUJJLAotCQkgU0FBNzE0Nl9NQzIpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdTMyIGRlYmlyZWFkKHN0cnVjdCBzYWE3MTQ2ICpzYWEsIHUzMiBjb25maWcsIGludCBhZGRyLCBpbnQgY291bnQpCi17Ci0JdTMyIHJlc3VsdCA9IDA7Ci0KLQlpZiAoY291bnQgPiAzMjc2NCB8fCBjb3VudCA8PSAwKQotCQlyZXR1cm4gMDsKLQlpZiAod2FpdF9mb3JfZGViaV9kb25lKHNhYSkgPCAwKQotCQlyZXR1cm4gMDsKLQlzYWF3cml0ZSh2aXJ0X3RvX2J1cyhzYWEtPmRtYWRlYmkpLCBTQUE3MTQ2X0RFQklfQUQpOwotCXNhYXdyaXRlKChjb3VudCA8PCAxNykgfCAweDEwMDAwIHwgKGFkZHIgJiAweGZmZmYpLAotCQkgU0FBNzE0Nl9ERUJJX0NPTU1BTkQpOwotCXNhYXdyaXRlKGNvbmZpZywgU0FBNzE0Nl9ERUJJX0NPTkZJRyk7Ci0Jc2Fhd3JpdGUoKFNBQTcxNDZfTUMyX1VQTERfREVCSSA8PCAxNikgfCBTQUE3MTQ2X01DMl9VUExEX0RFQkksCi0JCSBTQUE3MTQ2X01DMik7Ci0JaWYgKGNvdW50ID4gNCkJCS8qIG5vdCBhbiBpbW1lZGlhdGUgdHJhbnNmZXIgKi8KLQkJcmV0dXJuIGNvdW50OwotCXdhaXRfZm9yX2RlYmlfZG9uZShzYWEpOwotCXJlc3VsdCA9IHNhYXJlYWQoU0FBNzE0Nl9ERUJJX0FEKTsKLQlpZiAoY291bnQgPT0gMSkKLQkJcmVzdWx0ICY9IDB4ZmY7Ci0JaWYgKGNvdW50ID09IDIpCi0JCXJlc3VsdCAmPSAweGZmZmY7Ci0JaWYgKGNvdW50ID09IDMpCi0JCXJlc3VsdCAmPSAweGZmZmZmZjsKLQlyZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgdm9pZCBkb19pcnFfc2VuZF9kYXRhKHN0cnVjdCBzYWE3MTQ2ICpzYWEpCi17Ci0JaW50IHNwbGl0LCBhdWRieXRlcywgdmlkYnl0ZXM7Ci0KLQlzYWF3cml0ZShTQUE3MTQ2X1BTUl9QSU4xLCBTQUE3MTQ2X0lFUik7Ci0JLyogaWYgc3BlY2lhbCBmZWF0dXJlIG1vZGUgaW4gZWZmZWN0LCBkaXNhYmxlIGF1ZGlvIHNlbmRpbmcgKi8KLQlpZiAoc2FhLT5wbGF5bW9kZSAhPSBWSURfUExBWV9OT1JNQUwpCi0JCXNhYS0+YXVkdGFpbCA9IHNhYS0+YXVkaGVhZCA9IDA7Ci0JaWYgKHNhYS0+YXVkaGVhZCA8PSBzYWEtPmF1ZHRhaWwpCi0JCWF1ZGJ5dGVzID0gc2FhLT5hdWR0YWlsIC0gc2FhLT5hdWRoZWFkOwotCWVsc2UKLQkJYXVkYnl0ZXMgPSA2NTUzNiAtIChzYWEtPmF1ZGhlYWQgLSBzYWEtPmF1ZHRhaWwpOwotCWlmIChzYWEtPnZpZGhlYWQgPD0gc2FhLT52aWR0YWlsKQotCQl2aWRieXRlcyA9IHNhYS0+dmlkdGFpbCAtIHNhYS0+dmlkaGVhZDsKLQllbHNlCi0JCXZpZGJ5dGVzID0gNTI0Mjg4IC0gKHNhYS0+dmlkaGVhZCAtIHNhYS0+dmlkdGFpbCk7Ci0JaWYgKGF1ZGJ5dGVzID09IDAgJiYgdmlkYnl0ZXMgPT0gMCAmJiBzYWEtPm9zZHRhaWwgPT0gc2FhLT5vc2RoZWFkKSB7Ci0JCXNhYXdyaXRlKDAsIFNBQTcxNDZfSUVSKTsKLQkJcmV0dXJuOwotCX0KLQkvKiBpZiBhdCBsZWFzdCAxIGJsb2NrIGF1ZGlvIHdhaXRpbmcgYW5kIGF1ZGlvIGZpZm8gaXNuJ3QgZnVsbCAqLwotCWlmIChhdWRieXRlcyA+PSAyMDQ4ICYmIChkZWJpcmVhZChzYWEsIGRlYk5vcm1hbCwgSUJNX01QMl9BVURfRklGTywgMikKLQkJCSYgMHhmZikgPCA2MCkgewotCQlpZiAoc2FhLT5hdWRoZWFkID4gc2FhLT5hdWR0YWlsKQotCQkJc3BsaXQgPSA2NTUzNiAtIHNhYS0+YXVkaGVhZDsKLQkJZWxzZQotCQkJc3BsaXQgPSAwOwotCQlhdWRieXRlcyA9IDIwNDg7Ci0JCWlmIChzcGxpdCA+IDAgJiYgc3BsaXQgPCAyMDQ4KSB7Ci0JCQltZW1jcHkoc2FhLT5kbWFkZWJpLCBzYWEtPmF1ZGJ1ZiArIHNhYS0+YXVkaGVhZCwgc3BsaXQpOwotCQkJc2FhLT5hdWRoZWFkID0gMDsKLQkJCWF1ZGJ5dGVzIC09IHNwbGl0OwotCQl9IGVsc2UKLQkJCXNwbGl0ID0gMDsKLQkJbWVtY3B5KHNhYS0+ZG1hZGViaSArIHNwbGl0LCBzYWEtPmF1ZGJ1ZiArIHNhYS0+YXVkaGVhZCwKLQkJCWF1ZGJ5dGVzKTsKLQkJc2FhLT5hdWRoZWFkICs9IGF1ZGJ5dGVzOwotCQlzYWEtPmF1ZGhlYWQgJj0gMHhmZmZmOwotCQlkZWJpd3JpdGUoc2FhLCBkZWJBdWRpbywgKE5ld0NhcmQgPyBJQk1fTVAyX0FVRF9GSUZPIDoKLQkJCUlCTV9NUDJfQVVEX0ZJRk9XKSwgMCwgMjA0OCk7Ci0JCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmc2FhLT5hdWRxKTsKLQkJLyogaWYgYXQgbGVhc3QgMSBibG9jayB2aWRlbyB3YWl0aW5nIGFuZCB2aWRlbyBmaWZvIGlzbid0IGZ1bGwgKi8KLQl9IGVsc2UgaWYgKHZpZGJ5dGVzID49IDMwNzIwICYmIChkZWJpcmVhZChzYWEsIGRlYk5vcm1hbCwKLQkJCQkJCSAgSUJNX01QMl9GSUZPLCAyKSkgPCAxNjM4NCkgewotCQlpZiAoc2FhLT52aWRoZWFkID4gc2FhLT52aWR0YWlsKQotCQkJc3BsaXQgPSA1MjQyODggLSBzYWEtPnZpZGhlYWQ7Ci0JCWVsc2UKLQkJCXNwbGl0ID0gMDsKLQkJdmlkYnl0ZXMgPSAzMDcyMDsKLQkJaWYgKHNwbGl0ID4gMCAmJiBzcGxpdCA8IDMwNzIwKSB7Ci0JCQltZW1jcHkoc2FhLT5kbWFkZWJpLCBzYWEtPnZpZGJ1ZiArIHNhYS0+dmlkaGVhZCwgc3BsaXQpOwotCQkJc2FhLT52aWRoZWFkID0gMDsKLQkJCXZpZGJ5dGVzIC09IHNwbGl0OwotCQl9IGVsc2UKLQkJCXNwbGl0ID0gMDsKLQkJbWVtY3B5KHNhYS0+ZG1hZGViaSArIHNwbGl0LCBzYWEtPnZpZGJ1ZiArIHNhYS0+dmlkaGVhZCwKLQkJCXZpZGJ5dGVzKTsKLQkJc2FhLT52aWRoZWFkICs9IHZpZGJ5dGVzOwotCQlzYWEtPnZpZGhlYWQgJj0gMHg3ZmZmZjsKLQkJZGViaXdyaXRlKHNhYSwgZGViVmlkZW8sIChOZXdDYXJkID8gSUJNX01QMl9GSUZPIDoKLQkJCQkJICBJQk1fTVAyX0ZJRk9XKSwgMCwgMzA3MjApOwotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnNhYS0+dmlkcSk7Ci0JfQotCXNhYXdyaXRlKFNBQTcxNDZfUFNSX0RFQklfUyB8IFNBQTcxNDZfUFNSX1BJTjEsIFNBQTcxNDZfSUVSKTsKLX0KLQotc3RhdGljIHZvaWQgc2VuZF9vc2RfZGF0YShzdHJ1Y3Qgc2FhNzE0NiAqc2FhKQotewotCWludCBzaXplID0gc2FhLT5vc2R0YWlsIC0gc2FhLT5vc2RoZWFkOwotCWlmIChzaXplID4gMzA3MjApCi0JCXNpemUgPSAzMDcyMDsKLQkvKiBlbnN1cmUgc29tZSBtdWx0aXBsZSBvZiA4IGJ5dGVzIGlzIHRyYW5zZmVycmVkICovCi0Jc2l6ZSA9IDggKiAoKHNpemUgKyA4KSA+PiAzKTsKLQlpZiAoc2l6ZSkgewotCQlkZWJpd3JpdGUoc2FhLCBkZWJOb3JtYWwsIElCTV9NUDJfT1NEX0FERFIsCi0JCQkgIChzYWEtPm9zZGhlYWQgPj4gMyksIDIpOwotCQltZW1jcHkoc2FhLT5kbWFkZWJpLCAmc2FhLT5vc2RidWZbc2FhLT5vc2RoZWFkXSwgc2l6ZSk7Ci0JCXNhYS0+b3NkaGVhZCArPSBzaXplOwotCQkvKiBibG9jayB0cmFuc2ZlciBvZiBuZXh0IDggYnl0ZXMgdG8gfjMyayBieXRlcyAqLwotCQlkZWJpd3JpdGUoc2FhLCBkZWJOb3JtYWwsIElCTV9NUDJfT1NEX0RBVEEsIDAsIHNpemUpOwotCX0KLQlpZiAoc2FhLT5vc2RoZWFkID49IHNhYS0+b3NkdGFpbCkgewotCQlzYWEtPm9zZGhlYWQgPSBzYWEtPm9zZHRhaWwgPSAwOwotCQlkZWJpd3JpdGUoc2FhLCBkZWJOb3JtYWwsIElCTV9NUDJfTUFTSzAsIDB4YzAwYywgMik7Ci0JfQotfQotCi1zdGF0aWMgaXJxcmV0dXJuX3Qgc2FhNzE0Nl9pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKQotewotCXN0cnVjdCBzYWE3MTQ2ICpzYWEgPSBkZXZfaWQ7Ci0JdTMyIHN0YXQsIGFzdGF0OwotCWludCBjb3VudDsKLQlpbnQgaGFuZGxlZCA9IDA7Ci0KLQljb3VudCA9IDA7Ci0Jd2hpbGUgKDEpIHsKLQkJLyogZ2V0L2NsZWFyIGludGVycnVwdCBzdGF0dXMgYml0cyAqLwotCQlzdGF0ID0gc2FhcmVhZChTQUE3MTQ2X0lTUik7Ci0JCWFzdGF0ID0gc3RhdCAmIHNhYXJlYWQoU0FBNzE0Nl9JRVIpOwotCQlpZiAoIWFzdGF0KQotCQkJYnJlYWs7Ci0JCWhhbmRsZWQgPSAxOwotCQlzYWF3cml0ZShhc3RhdCwgU0FBNzE0Nl9JU1IpOwotCQlpZiAoYXN0YXQgJiBTQUE3MTQ2X1BTUl9ERUJJX1MpIHsKLQkJCWRvX2lycV9zZW5kX2RhdGEoc2FhKTsKLQkJfQotCQlpZiAoYXN0YXQgJiBTQUE3MTQ2X1BTUl9QSU4xKSB7Ci0JCQlpbnQgaXN0YXQ7Ci0JCQkvKiB0aGUgZm9sbG93aW5nIHJlYWQgd2lsbCB0cmlnZ2VyIERFQklfUyAqLwotCQkJaXN0YXQgPSBkZWJpcmVhZChzYWEsIGRlYk5vcm1hbCwgSUJNX01QMl9IT1NUX0lOVCwgMik7Ci0JCQlpZiAoaXN0YXQgJiAxKSB7Ci0JCQkJc2Fhd3JpdGUoMCwgU0FBNzE0Nl9JRVIpOwotCQkJCXNlbmRfb3NkX2RhdGEoc2FhKTsKLQkJCQlzYWF3cml0ZShTQUE3MTQ2X1BTUl9ERUJJX1MgfAotCQkJCQkgU0FBNzE0Nl9QU1JfUElOMSwgU0FBNzE0Nl9JRVIpOwotCQkJfQotCQkJaWYgKGlzdGF0ICYgMHgyMCkgewkvKiBWaWRlbyBTdGFydCAqLwotCQkJCXNhYS0+dmlkaW5mby5mcmFtZV9jb3VudCsrOwotCQkJfQotCQkJaWYgKGlzdGF0ICYgMHg0MDApIHsJLyogUGljdHVyZSBTdGFydCAqLwotCQkJCS8qIHVwZGF0ZSB0ZW1wb3JhbCByZWZlcmVuY2UgKi8KLQkJCX0KLQkJCWlmIChpc3RhdCAmIDB4MjAwKSB7CS8qIFBpY3R1cmUgUmVzb2x1dGlvbiBDaGFuZ2UgKi8KLQkJCQkvKiByZWFkIG5ldyByZXNvbHV0aW9uICovCi0JCQl9Ci0JCQlpZiAoaXN0YXQgJiAweDEwMCkgewkvKiBOZXcgVXNlciBEYXRhIGZvdW5kICovCi0JCQkJLyogcmVhZCBuZXcgdXNlciBkYXRhICovCi0JCQl9Ci0JCQlpZiAoaXN0YXQgJiAweDEwMDApIHsJLyogbmV3IEdPUC9TTVBURSAqLwotCQkJCS8qIHJlYWQgbmV3IFNNUFRFICovCi0JCQl9Ci0JCQlpZiAoaXN0YXQgJiAweDgwMDApIHsJLyogU2VxdWVuY2UgU3RhcnQgQ29kZSAqLwotCQkJCS8qIHJlc2V0IGZyYW1lIGNvdW50ZXIsIGxvYWQgc2l6ZXMgKi8KLQkJCQlzYWEtPnZpZGluZm8uZnJhbWVfY291bnQgPSAwOwotCQkJCXNhYS0+dmlkaW5mby5oX3NpemUgPSA3MDQ7Ci0JCQkJc2FhLT52aWRpbmZvLnZfc2l6ZSA9IDQ4MDsKLSNpZiAwCi0JCQkJaWYgKHNhYS0+ZW5kbWFya2hlYWQgIT0gc2FhLT5lbmRtYXJrdGFpbCkgewotCQkJCQlzYWEtPmF1ZGhlYWQgPQotCQkJCQkJc2FhLT5lbmRtYXJrW3NhYS0+ZW5kbWFya2hlYWRdOwotCQkJCQlzYWEtPmVuZG1hcmtoZWFkKys7Ci0JCQkJCWlmIChzYWEtPmVuZG1hcmtoZWFkID49IE1BWF9NQVJLUykKLQkJCQkJCXNhYS0+ZW5kbWFya2hlYWQgPSAwOwotCQkJCX0KLSNlbmRpZgotCQkJfQotCQkJaWYgKGlzdGF0ICYgMHg0MDAwKSB7CS8qIFNlcXVlbmNlIEVycm9yIENvZGUgKi8KLQkJCQlpZiAoc2FhLT5lbmRtYXJraGVhZCAhPSBzYWEtPmVuZG1hcmt0YWlsKSB7Ci0JCQkJCXNhYS0+YXVkaGVhZCA9Ci0JCQkJCQlzYWEtPmVuZG1hcmtbc2FhLT5lbmRtYXJraGVhZF07Ci0JCQkJCXNhYS0+ZW5kbWFya2hlYWQrKzsKLQkJCQkJaWYgKHNhYS0+ZW5kbWFya2hlYWQgPj0gTUFYX01BUktTKQotCQkJCQkJc2FhLT5lbmRtYXJraGVhZCA9IDA7Ci0JCQkJfQotCQkJfQotCQl9Ci0jaWZkZWYgSURFQlVHCi0JCWlmIChhc3RhdCAmIFNBQTcxNDZfUFNSX1BQRUYpIHsKLQkJCUlERUJVRyhwcmludGsoInN0cmFkaXMlZCBpcnE6IFBQRUZcbiIsIHNhYS0+bnIpKTsKLQkJfQotCQlpZiAoYXN0YXQgJiBTQUE3MTQ2X1BTUl9QQUJPKSB7Ci0JCQlJREVCVUcocHJpbnRrKCJzdHJhZGlzJWQgaXJxOiBQQUJPXG4iLCBzYWEtPm5yKSk7Ci0JCX0KLQkJaWYgKGFzdGF0ICYgU0FBNzE0Nl9QU1JfUFBFRCkgewotCQkJSURFQlVHKHByaW50aygic3RyYWRpcyVkIGlycTogUFBFRFxuIiwgc2FhLT5ucikpOwotCQl9Ci0JCWlmIChhc3RhdCAmIFNBQTcxNDZfUFNSX1JQU19JMSkgewotCQkJSURFQlVHKHByaW50aygic3RyYWRpcyVkIGlycTogUlBTX0kxXG4iLCBzYWEtPm5yKSk7Ci0JCX0KLQkJaWYgKGFzdGF0ICYgU0FBNzE0Nl9QU1JfUlBTX0kwKSB7Ci0JCQlJREVCVUcocHJpbnRrKCJzdHJhZGlzJWQgaXJxOiBSUFNfSTBcbiIsIHNhYS0+bnIpKTsKLQkJfQotCQlpZiAoYXN0YXQgJiBTQUE3MTQ2X1BTUl9SUFNfTEFURTEpIHsKLQkJCUlERUJVRyhwcmludGsoInN0cmFkaXMlZCBpcnE6IFJQU19MQVRFMVxuIiwgc2FhLT5ucikpOwotCQl9Ci0JCWlmIChhc3RhdCAmIFNBQTcxNDZfUFNSX1JQU19MQVRFMCkgewotCQkJSURFQlVHKHByaW50aygic3RyYWRpcyVkIGlycTogUlBTX0xBVEUwXG4iLCBzYWEtPm5yKSk7Ci0JCX0KLQkJaWYgKGFzdGF0ICYgU0FBNzE0Nl9QU1JfUlBTX0UxKSB7Ci0JCQlJREVCVUcocHJpbnRrKCJzdHJhZGlzJWQgaXJxOiBSUFNfRTFcbiIsIHNhYS0+bnIpKTsKLQkJfQotCQlpZiAoYXN0YXQgJiBTQUE3MTQ2X1BTUl9SUFNfRTApIHsKLQkJCUlERUJVRyhwcmludGsoInN0cmFkaXMlZCBpcnE6IFJQU19FMFxuIiwgc2FhLT5ucikpOwotCQl9Ci0JCWlmIChhc3RhdCAmIFNBQTcxNDZfUFNSX1JQU19UTzEpIHsKLQkJCUlERUJVRyhwcmludGsoInN0cmFkaXMlZCBpcnE6IFJQU19UTzFcbiIsIHNhYS0+bnIpKTsKLQkJfQotCQlpZiAoYXN0YXQgJiBTQUE3MTQ2X1BTUl9SUFNfVE8wKSB7Ci0JCQlJREVCVUcocHJpbnRrKCJzdHJhZGlzJWQgaXJxOiBSUFNfVE8wXG4iLCBzYWEtPm5yKSk7Ci0JCX0KLQkJaWYgKGFzdGF0ICYgU0FBNzE0Nl9QU1JfVVBMRCkgewotCQkJSURFQlVHKHByaW50aygic3RyYWRpcyVkIGlycTogVVBMRFxuIiwgc2FhLT5ucikpOwotCQl9Ci0JCWlmIChhc3RhdCAmIFNBQTcxNDZfUFNSX0RFQklfRSkgewotCQkJSURFQlVHKHByaW50aygic3RyYWRpcyVkIGlycTogREVCSV9FXG4iLCBzYWEtPm5yKSk7Ci0JCX0KLQkJaWYgKGFzdGF0ICYgU0FBNzE0Nl9QU1JfSTJDX1MpIHsKLQkJCUlERUJVRyhwcmludGsoInN0cmFkaXMlZCBpcnE6IEkyQ19TXG4iLCBzYWEtPm5yKSk7Ci0JCX0KLQkJaWYgKGFzdGF0ICYgU0FBNzE0Nl9QU1JfSTJDX0UpIHsKLQkJCUlERUJVRyhwcmludGsoInN0cmFkaXMlZCBpcnE6IEkyQ19FXG4iLCBzYWEtPm5yKSk7Ci0JCX0KLQkJaWYgKGFzdGF0ICYgU0FBNzE0Nl9QU1JfQTJfSU4pIHsKLQkJCUlERUJVRyhwcmludGsoInN0cmFkaXMlZCBpcnE6IEEyX0lOXG4iLCBzYWEtPm5yKSk7Ci0JCX0KLQkJaWYgKGFzdGF0ICYgU0FBNzE0Nl9QU1JfQTJfT1VUKSB7Ci0JCQlJREVCVUcocHJpbnRrKCJzdHJhZGlzJWQgaXJxOiBBMl9PVVRcbiIsIHNhYS0+bnIpKTsKLQkJfQotCQlpZiAoYXN0YXQgJiBTQUE3MTQ2X1BTUl9BMV9JTikgewotCQkJSURFQlVHKHByaW50aygic3RyYWRpcyVkIGlycTogQTFfSU5cbiIsIHNhYS0+bnIpKTsKLQkJfQotCQlpZiAoYXN0YXQgJiBTQUE3MTQ2X1BTUl9BMV9PVVQpIHsKLQkJCUlERUJVRyhwcmludGsoInN0cmFkaXMlZCBpcnE6IEExX09VVFxuIiwgc2FhLT5ucikpOwotCQl9Ci0JCWlmIChhc3RhdCAmIFNBQTcxNDZfUFNSX0FGT1UpIHsKLQkJCUlERUJVRyhwcmludGsoInN0cmFkaXMlZCBpcnE6IEFGT1VcbiIsIHNhYS0+bnIpKTsKLQkJfQotCQlpZiAoYXN0YXQgJiBTQUE3MTQ2X1BTUl9WX1BFKSB7Ci0JCQlJREVCVUcocHJpbnRrKCJzdHJhZGlzJWQgaXJxOiBWX1BFXG4iLCBzYWEtPm5yKSk7Ci0JCX0KLQkJaWYgKGFzdGF0ICYgU0FBNzE0Nl9QU1JfVkZPVSkgewotCQkJSURFQlVHKHByaW50aygic3RyYWRpcyVkIGlycTogVkZPVVxuIiwgc2FhLT5ucikpOwotCQl9Ci0JCWlmIChhc3RhdCAmIFNBQTcxNDZfUFNSX0ZJREEpIHsKLQkJCUlERUJVRyhwcmludGsoInN0cmFkaXMlZCBpcnE6IEZJREFcbiIsIHNhYS0+bnIpKTsKLQkJfQotCQlpZiAoYXN0YXQgJiBTQUE3MTQ2X1BTUl9GSURCKSB7Ci0JCQlJREVCVUcocHJpbnRrKCJzdHJhZGlzJWQgaXJxOiBGSURCXG4iLCBzYWEtPm5yKSk7Ci0JCX0KLQkJaWYgKGFzdGF0ICYgU0FBNzE0Nl9QU1JfUElOMykgewotCQkJSURFQlVHKHByaW50aygic3RyYWRpcyVkIGlycTogUElOM1xuIiwgc2FhLT5ucikpOwotCQl9Ci0JCWlmIChhc3RhdCAmIFNBQTcxNDZfUFNSX1BJTjIpIHsKLQkJCUlERUJVRyhwcmludGsoInN0cmFkaXMlZCBpcnE6IFBJTjJcbiIsIHNhYS0+bnIpKTsKLQkJfQotCQlpZiAoYXN0YXQgJiBTQUE3MTQ2X1BTUl9QSU4wKSB7Ci0JCQlJREVCVUcocHJpbnRrKCJzdHJhZGlzJWQgaXJxOiBQSU4wXG4iLCBzYWEtPm5yKSk7Ci0JCX0KLQkJaWYgKGFzdGF0ICYgU0FBNzE0Nl9QU1JfRUNTKSB7Ci0JCQlJREVCVUcocHJpbnRrKCJzdHJhZGlzJWQgaXJxOiBFQ1NcbiIsIHNhYS0+bnIpKTsKLQkJfQotCQlpZiAoYXN0YXQgJiBTQUE3MTQ2X1BTUl9FQzNTKSB7Ci0JCQlJREVCVUcocHJpbnRrKCJzdHJhZGlzJWQgaXJxOiBFQzNTXG4iLCBzYWEtPm5yKSk7Ci0JCX0KLQkJaWYgKGFzdGF0ICYgU0FBNzE0Nl9QU1JfRUMwUykgewotCQkJSURFQlVHKHByaW50aygic3RyYWRpcyVkIGlycTogRUMwU1xuIiwgc2FhLT5ucikpOwotCQl9Ci0jZW5kaWYKLQkJY291bnQrKzsKLQkJaWYgKGNvdW50ID4gMTUpCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJzdHJhZGlzJWQ6IGlycSBsb29wICVkXG4iLAotCQkJICAgICAgIHNhYS0+bnIsIGNvdW50KTsKLQkJaWYgKGNvdW50ID4gMjApIHsKLQkJCXNhYXdyaXRlKDAsIFNBQTcxNDZfSUVSKTsKLQkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgICAgICJzdHJhZGlzJWQ6IElSUSBsb29wIGNsZWFyZWRcbiIsIHNhYS0+bnIpOwotCQl9Ci0JfQotCXJldHVybiBJUlFfUkVUVkFMKGhhbmRsZWQpOwotfQotCi1zdGF0aWMgaW50IGlibV9zZW5kX2NvbW1hbmQoc3RydWN0IHNhYTcxNDYgKnNhYSwKLQkJCSAgICBpbnQgY29tbWFuZCwgaW50IGRhdGEsIGludCBjaGFpbikKLXsKLQlpbnQgaTsKLQotCWlmIChjaGFpbikKLQkJZGViaXdyaXRlKHNhYSwgZGViTm9ybWFsLCBJQk1fTVAyX0NPTU1BTkQsIChjb21tYW5kIDw8IDEpfCAxLDIpOwotCWVsc2UKLQkJZGViaXdyaXRlKHNhYSwgZGViTm9ybWFsLCBJQk1fTVAyX0NPTU1BTkQsIGNvbW1hbmQgPDwgMSwgMik7Ci0JZGViaXdyaXRlKHNhYSwgZGViTm9ybWFsLCBJQk1fTVAyX0NNRF9EQVRBLCBkYXRhLCAyKTsKLQlkZWJpd3JpdGUoc2FhLCBkZWJOb3JtYWwsIElCTV9NUDJfQ01EX1NUQVQsIDEsIDIpOwotCWZvciAoaSA9IDA7IGkgPCAxMDAgJiYKLQkgICAgIChkZWJpcmVhZChzYWEsIGRlYk5vcm1hbCwgSUJNX01QMl9DTURfU1RBVCwgMikgJiAxKTsgaSsrKQotCQlzY2hlZHVsZSgpOwotCWlmIChpID09IDEwMCkKLQkJcmV0dXJuIC0xOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBjczQzNDFfc2V0bGV2ZWwoc3RydWN0IHNhYTcxNDYgKnNhYSwgaW50IGxlZnQsIGludCByaWdodCkKLXsKLQlJMkNXcml0ZShzYWEsIDB4MjIsIDB4MDMsIGxlZnQgPiA5NCA/IDk0IDogbGVmdCwgMik7Ci0JSTJDV3JpdGUoc2FhLCAweDIyLCAweDA0LCByaWdodCA+IDk0ID8gOTQgOiByaWdodCwgMik7Ci19Ci0KLXN0YXRpYyB2b2lkIGluaXRpYWxpemVfY3M0MzQxKHN0cnVjdCBzYWE3MTQ2ICpzYWEpCi17Ci0JaW50IGk7Ci0JZm9yIChpID0gMDsgaSA8IDIwMDsgaSsrKSB7Ci0JCS8qIGF1dG8gbXV0ZSBvZmYsIHBvd2VyIG9uLCBubyBkZS1lbXBoYXNpcyAqLwotCQkvKiBJMlMgZGF0YSB1cCB0byAyNC1iaXQgNjR4RnMgaW50ZXJuYWwgU0NMSyAqLwotCQlJMkNXcml0ZShzYWEsIDB4MjIsIDB4MDEsIDB4MTEsIDIpOwotCQkvKiBBVEFQSSBtaXhlciBzZXR0aW5ncyAqLwotCQlJMkNXcml0ZShzYWEsIDB4MjIsIDB4MDIsIDB4NDksIDIpOwotCQkvKiBhdHRlbnVhdGlvbiBsZWZ0IDNkYiAqLwotCQlJMkNXcml0ZShzYWEsIDB4MjIsIDB4MDMsIDB4MDAsIDIpOwotCQkvKiBhdHRlbnVhdGlvbiByaWdodCAzZGIgKi8KLQkJSTJDV3JpdGUoc2FhLCAweDIyLCAweDA0LCAweDAwLCAyKTsKLQkJSTJDV3JpdGUoc2FhLCAweDIyLCAweDAxLCAweDEwLCAyKTsKLQkJaWYgKEkyQ1JlYWQoc2FhLCAweDIyLCAweDAyLCAxKSA9PSAweDQ5KQotCQkJYnJlYWs7Ci0JCXNjaGVkdWxlKCk7Ci0JfQotCXByaW50aygic3RyYWRpcyVkOiBDUzQzNDEgaW5pdGlhbGl6ZWQgKCVkKVxuIiwgc2FhLT5uciwgaSk7Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZCBpbml0aWFsaXplX2NzODQyMChzdHJ1Y3Qgc2FhNzE0NiAqc2FhLCBpbnQgcHJvKQotewotCWludCBpOwotCXU4ICpzZXF1ZW5jZTsKLQlpZiAocHJvKQotCQlzZXF1ZW5jZSA9IG1vZGU4NDIwcHJvOwotCWVsc2UKLQkJc2VxdWVuY2UgPSBtb2RlODQyMGNvbjsKLQlmb3IgKGkgPSAwOyBpIDwgSU5JVDg0MjBMRU47IGkrKykKLQkJSTJDV3JpdGUoc2FhLCAweDIwLCBpbml0ODQyMFtpICogMl0sIGluaXQ4NDIwW2kgKiAyICsgMV0sIDIpOwotCWZvciAoaSA9IDA7IGkgPCBNT0RFODQyMExFTjsgaSsrKQotCQlJMkNXcml0ZShzYWEsIDB4MjAsIHNlcXVlbmNlW2kgKiAyXSwgc2VxdWVuY2VbaSAqIDIgKyAxXSwgMik7Ci0JcHJpbnRrKCJzdHJhZGlzJWQ6IENTODQyMCBpbml0aWFsaXplZFxuIiwgc2FhLT5ucik7Ci19Ci0KLXN0YXRpYyB2b2lkIGluaXRpYWxpemVfc2FhNzEyMShzdHJ1Y3Qgc2FhNzE0NiAqc2FhLCBpbnQgZG9wYWwpCi17Ci0JaW50IGksIG1vZDsKLQl1OCAqc2VxdWVuY2U7Ci0JaWYgKGRvcGFsKQotCQlzZXF1ZW5jZSA9IGluaXQ3MTIxcGFsOwotCWVsc2UKLQkJc2VxdWVuY2UgPSBpbml0NzEyMW50c2M7Ci0JbW9kID0gc2FhcmVhZChTQUE3MTQ2X1BTUikgJiAweDA4OwotCS8qIGluaXRpYWxpemUgUEFML05UU0MgdmlkZW8gZW5jb2RlciAqLwotCWZvciAoaSA9IDA7IGkgPCBJTklUNzEyMUxFTjsgaSsrKSB7Ci0JCWlmIChOZXdDYXJkKSB7CS8qIGhhbmRsZSBuZXcgY2FyZCBlbmNvZGVyIGRpZmZlcmVuY2VzICovCi0JCQlpZiAoc2VxdWVuY2VbaSAqIDJdID09IDB4M2EpCi0JCQkJSTJDV3JpdGUoc2FhLCAweDg4LCAweDNhLCAweDEzLCAyKTsKLQkJCWVsc2UgaWYgKHNlcXVlbmNlW2kgKiAyXSA9PSAweDZiKQotCQkJCUkyQ1dyaXRlKHNhYSwgMHg4OCwgMHg2YiwgMHgyMCwgMik7Ci0JCQllbHNlIGlmIChzZXF1ZW5jZVtpICogMl0gPT0gMHg2YykKLQkJCQlJMkNXcml0ZShzYWEsIDB4ODgsIDB4NmMsCi0JCQkJCSBkb3BhbCA/IDB4MDkgOiAweGY1LCAyKTsKLQkJCWVsc2UgaWYgKHNlcXVlbmNlW2kgKiAyXSA9PSAweDZkKQotCQkJCUkyQ1dyaXRlKHNhYSwgMHg4OCwgMHg2ZCwKLQkJCQkJIGRvcGFsID8gMHgyMCA6IDB4MDAsIDIpOwotCQkJZWxzZSBpZiAoc2VxdWVuY2VbaSAqIDJdID09IDB4N2EpCi0JCQkJSTJDV3JpdGUoc2FhLCAweDg4LCAweDdhLAotCQkJCQkgZG9wYWwgPyAoUEFMRmlyc3RBY3RpdmUgLSAxKSA6Ci0JCQkJCSAoTlRTQ0ZpcnN0QWN0aXZlIC0gNCksIDIpOwotCQkJZWxzZSBpZiAoc2VxdWVuY2VbaSAqIDJdID09IDB4N2IpCi0JCQkJSTJDV3JpdGUoc2FhLCAweDg4LCAweDdiLAotCQkJCQkgZG9wYWwgPyBQQUxMYXN0QWN0aXZlIDoKLQkJCQkJIE5UU0NMYXN0QWN0aXZlLCAyKTsKLQkJCWVsc2UKLQkJCQlJMkNXcml0ZShzYWEsIDB4ODgsIHNlcXVlbmNlW2kgKiAyXSwKLQkJCQkJIHNlcXVlbmNlW2kgKiAyICsgMV0sIDIpOwotCQl9IGVsc2UgewotCQkJaWYgKHNlcXVlbmNlW2kgKiAyXSA9PSAweDZiICYmIG1vZCkKLQkJCQlJMkNXcml0ZShzYWEsIDB4ODgsIDB4NmIsCi0JCQkJCSAoc2VxdWVuY2VbaSAqIDIgKyAxXSBeIDB4MDkpLCAyKTsKLQkJCWVsc2UgaWYgKHNlcXVlbmNlW2kgKiAyXSA9PSAweDdhKQotCQkJCUkyQ1dyaXRlKHNhYSwgMHg4OCwgMHg3YSwKLQkJCQkJIGRvcGFsID8gKFBBTEZpcnN0QWN0aXZlIC0gMSkgOgotCQkJCQkgKE5UU0NGaXJzdEFjdGl2ZSAtIDQpLCAyKTsKLQkJCWVsc2UgaWYgKHNlcXVlbmNlW2kgKiAyXSA9PSAweDdiKQotCQkJCUkyQ1dyaXRlKHNhYSwgMHg4OCwgMHg3YiwKLQkJCQkJIGRvcGFsID8gUEFMTGFzdEFjdGl2ZSA6Ci0JCQkJCSBOVFNDTGFzdEFjdGl2ZSwgMik7Ci0JCQllbHNlCi0JCQkJSTJDV3JpdGUoc2FhLCAweDg4LCBzZXF1ZW5jZVtpICogMl0sCi0JCQkJCSBzZXF1ZW5jZVtpICogMiArIDFdLCAyKTsKLQkJfQotCX0KLX0KLQotc3RhdGljIHZvaWQgc2V0X2dlbmxvY2tfb2Zmc2V0KHN0cnVjdCBzYWE3MTQ2ICpzYWEsIGludCBub2Zmc2V0KQotewotCWludCBuQ29kZTsKLQlpbnQgUGl4ZWxzUGVyTGluZSA9IDg1ODsKLQlpZiAoQ3VycmVudE1vZGUgPT0gVklERU9fTU9ERV9QQUwpCi0JCVBpeGVsc1BlckxpbmUgPSA4NjQ7Ci0JaWYgKG5vZmZzZXQgPiA1MDApCi0JCW5vZmZzZXQgPSA1MDA7Ci0JZWxzZSBpZiAobm9mZnNldCA8IC01MDApCi0JCW5vZmZzZXQgPSAtNTAwOwotCW5Db2RlID0gbm9mZnNldCArIDB4MTAwOwotCWlmIChuQ29kZSA9PSAxKQotCQluQ29kZSA9IDB4NDAxOwotCWVsc2UgaWYgKG5Db2RlIDwgMSkKLQkJbkNvZGUgPSAweDQwMCArIFBpeGVsc1BlckxpbmUgKyBuQ29kZTsKLQlkZWJpd3JpdGUoc2FhLCBkZWJOb3JtYWwsIFhJTElOWF9HTERFTEFZLCBuQ29kZSwgMik7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldF9vdXRfZm9ybWF0KHN0cnVjdCBzYWE3MTQ2ICpzYWEsIGludCBtb2RlKQotewotCWluaXRpYWxpemVfc2FhNzEyMShzYWEsIChtb2RlID09IFZJREVPX01PREVfTlRTQyA/IDAgOiAxKSk7Ci0Jc2FhLT5ib2FyZGNmZ1syXSA9IG1vZGU7Ci0JLyogZG8gbm90IGFkanVzdCBhbmFsb2cgdmlkZW8gcGFyYW1ldGVycyBoZXJlLCB1c2Ugc2FhNzEyMSBpbml0ICovCi0JLyogeW91IHdpbGwgYWZmZWN0IHRoZSBTREkgb3V0cHV0IG9uIHRoZSBuZXcgY2FyZCAqLwotCWlmIChtb2RlID09IFZJREVPX01PREVfUEFMKSB7CS8qIFBBTCAqLwotCQlkZWJpd3JpdGUoc2FhLCBkZWJOb3JtYWwsIFhJTElOWF9DVEwwLCAweDA4MDgsIDIpOwotCQltZGVsYXkoNTApOwotCQlzYWF3cml0ZSgweDAxMjAwMmMwLCBTQUE3MTQ2X05VTV9MSU5FX0JZVEUxKTsKLQkJaWYgKE5ld0NhcmQpIHsKLQkJCWRlYml3cml0ZShzYWEsIGRlYk5vcm1hbCwgSUJNX01QMl9ESVNQX01PREUsIDB4ZTEwMCwgMik7Ci0JCQltZGVsYXkoNTApOwotCQl9Ci0JCWRlYml3cml0ZShzYWEsIGRlYk5vcm1hbCwgSUJNX01QMl9ESVNQX01PREUsCi0JCQkgIE5ld0NhcmQgPyAweGU1MDAgOiAweDY1MDAsIDIpOwotCQlkZWJpd3JpdGUoc2FhLCBkZWJOb3JtYWwsIElCTV9NUDJfRElTUF9ETFksCi0JCQkgICgxIDw8IDgpIHwKLQkJCSAgKE5ld0NhcmQgPyBQQUxGaXJzdEFjdGl2ZSA6IFBBTEZpcnN0QWN0aXZlIC0gNiksIDIpOwotCX0gZWxzZSB7CQkvKiBOVFNDICovCi0JCWRlYml3cml0ZShzYWEsIGRlYk5vcm1hbCwgWElMSU5YX0NUTDAsIDB4MDgwMCwgMik7Ci0JCW1kZWxheSg1MCk7Ci0JCXNhYXdyaXRlKDB4MDBmMDAyYzAsIFNBQTcxNDZfTlVNX0xJTkVfQllURTEpOwotCQlkZWJpd3JpdGUoc2FhLCBkZWJOb3JtYWwsIElCTV9NUDJfRElTUF9NT0RFLAotCQkJICBOZXdDYXJkID8gMHhlMTAwIDogMHg2MTAwLCAyKTsKLQkJZGViaXdyaXRlKHNhYSwgZGViTm9ybWFsLCBJQk1fTVAyX0RJU1BfRExZLAotCQkJICAoMSA8PCA4KSB8Ci0JCQkgIChOZXdDYXJkID8gTlRTQ0ZpcnN0QWN0aXZlIDogTlRTQ0ZpcnN0QWN0aXZlIC0gNiksIDIpOwotCX0KLX0KLQotLyogSW50aWFsaXplIGJpdG1hbmdsZXIgdG8gbWFwIGZyb20gYSBieXRlIHZhbHVlIHRvIHRoZSBtYW5nbGVkIHdvcmQgdGhhdAotICogbXVzdCBiZSBvdXRwdXQgdG8gcHJvZ3JhbSB0aGUgWGlsaW54IHBhcnQgdGhyb3VnaCB0aGUgREVCSSBwb3J0LgotICogWGlsaW54IERhdGEgQml0LT5ERUJJIEJpdDogMC0+MTUgMS0+NyAyLT42IDMtPjEyIDQtPjExIDUtPjIgNi0+MSA3LT4wCi0gKiB0cmFuc2ZlciBGUEdBIGNvZGUsIGluaXQgSUJNIGNoaXAsIHRyYW5zZmVyIElCTSBtaWNyb2NvZGUKLSAqIHJldjIgY2FyZCBtYW5nbGVzOiAwLT43IDEtPjYgMi0+NSAzLT40IDQtPjMgNS0+MiA2LT4xIDctPjAKLSAqLwotc3RhdGljIHUxNiBiaXRtYW5nbGVyWzI1Nl07Ci0KLXN0YXRpYyBpbnQgaW5pdGlhbGl6ZV9mcGdhKHN0cnVjdCB2aWRlb19jb2RlICpiaXRkYXRhKQotewotCWludCBpLCBudW0sIHN0YXJ0aW5kZXgsIGZhaWx1cmUgPSAwLCBsb2FkdHdvLCBsb2FkZmlsZSA9IDA7Ci0JdTE2ICpkbWFidWY7Ci0JdTggKm5ld2RtYTsKLQlzdHJ1Y3Qgc2FhNzE0NiAqc2FhOwotCi0JLyogdmVyaWZ5IGZwZ2EgY29kZSAqLwotCWZvciAoc3RhcnRpbmRleCA9IDA7IHN0YXJ0aW5kZXggPCBiaXRkYXRhLT5kYXRhc2l6ZTsgc3RhcnRpbmRleCsrKQotCQlpZiAoYml0ZGF0YS0+ZGF0YVtzdGFydGluZGV4XSA9PSAyNTUpCi0JCQlicmVhazsKLQlpZiAoc3RhcnRpbmRleCA9PSBiaXRkYXRhLT5kYXRhc2l6ZSkgewotCQlwcmludGsoS0VSTl9JTkZPICJzdHJhZGlzOiBiYWQgZnBnYSBjb2RlXG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQkvKiBpbml0aWFsaXplIGFsbCBkZXRlY3RlZCBjYXJkcyAqLwotCWZvciAobnVtID0gMDsgbnVtIDwgc2FhX251bTsgbnVtKyspIHsKLQkJc2FhID0gJnNhYTcxNDZzW251bV07Ci0JCWlmIChzYWEtPmJvYXJkY2ZnWzBdID4gMjApCi0JCQljb250aW51ZTsJLyogY2FyZCB3YXMgcHJvZ3JhbW1lZCAqLwotCQlsb2FkdHdvID0gKHNhYS0+Ym9hcmRjZmdbMThdICYgMHgxMCk7Ci0JCWlmICghTmV3Q2FyZCkJLyogd2UgaGF2ZSBhbiBvbGQgYm9hcmQgKi8KLQkJCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKLQkJCQliaXRtYW5nbGVyW2ldID0gKChpICYgMHgwMSkgPDwgMTUpIHwKLQkJCQkJKChpICYgMHgwMikgPDwgNikgfCAoKGkgJiAweDA0KSA8PCA0KSB8Ci0JCQkJCSgoaSAmIDB4MDgpIDw8IDkpIHwgKChpICYgMHgxMCkgPDwgNykgfAotCQkJCQkoKGkgJiAweDIwKSA+PiAzKSB8ICgoaSAmIDB4NDApID4+IDUpIHwKLQkJCQkJKChpICYgMHg4MCkgPj4gNyk7Ci0JCWVsc2UJCS8qIGVsc2Ugd2UgaGF2ZSBhIG5ldyBib2FyZCAqLwotCQkJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQotCQkJCWJpdG1hbmdsZXJbaV0gPSAoKGkgJiAweDAxKSA8PCA3KSB8Ci0JCQkJCSgoaSAmIDB4MDIpIDw8IDUpIHwgKChpICYgMHgwNCkgPDwgMykgfAotCQkJCQkoKGkgJiAweDA4KSA8PCAxKSB8ICgoaSAmIDB4MTApID4+IDEpIHwKLQkJCQkJKChpICYgMHgyMCkgPj4gMykgfCAoKGkgJiAweDQwKSA+PiA1KSB8Ci0JCQkJCSgoaSAmIDB4ODApID4+IDcpOwotCi0JCWRtYWJ1ZiA9ICh1MTYgKikgc2FhLT5kbWFkZWJpOwotCQluZXdkbWEgPSAodTggKikgc2FhLT5kbWFkZWJpOwotCQlpZiAoTmV3Q2FyZCkgewkvKiBTRE0yeHh4ICovCi0JCQlpZiAoIXN0cm5jbXAoYml0ZGF0YS0+bG9hZHdoYXQsICJkZWNvZGVyMiIsIDgpKQotCQkJCWNvbnRpbnVlOwkvKiBmcGdhIG5vdCBmb3IgdGhpcyBjYXJkICovCi0JCQlpZiAoIXN0cm5jbXAoJnNhYS0+Ym9hcmRjZmdbNDJdLCBiaXRkYXRhLT5sb2Fkd2hhdCwgOCkpCi0JCQkJbG9hZGZpbGUgPSAxOwotCQkJZWxzZSBpZiAobG9hZHR3byAmJiAhc3RybmNtcCgmc2FhLT5ib2FyZGNmZ1sxOV0sCi0JCQkJICAgICAgIGJpdGRhdGEtPmxvYWR3aGF0LCA4KSkKLQkJCQlsb2FkZmlsZSA9IDI7Ci0JCQllbHNlIGlmICghc2FhLT5ib2FyZGNmZ1s0Ml0gJiYgIXN0cm5jbXAoImRlY3hsIiwKLQkJCQkJYml0ZGF0YS0+bG9hZHdoYXQsIDgpKQotCQkJCWxvYWRmaWxlID0gMTsJLyogc3BlY2lhbCAqLwotCQkJZWxzZQotCQkJCWNvbnRpbnVlOwkvKiBmcGdhIG5vdCBmb3IgdGhpcyBjYXJkICovCi0JCQlpZiAobG9hZGZpbGUgIT0gMSAmJiBsb2FkZmlsZSAhPSAyKQotCQkJCWNvbnRpbnVlOwkvKiBza2lwIHRvIG5leHQgY2FyZCAqLwotCQkJaWYgKHNhYS0+Ym9hcmRjZmdbMF0gJiYgbG9hZGZpbGUgPT0gMSkKLQkJCQljb250aW51ZTsJLyogc2tpcCB0byBuZXh0IGNhcmQgKi8KLQkJCWlmIChzYWEtPmJvYXJkY2ZnWzBdICE9IDEgJiYgbG9hZGZpbGUgPT0gMikKLQkJCQljb250aW51ZTsJLyogc2tpcCB0byBuZXh0IGNhcmQgKi8KLQkJCXNhYS0+Ym9hcmRjZmdbMF0rKzsJLyogbWFyayBmcGdhIGhhbmRsZWQgKi8KLQkJCXByaW50aygic3RyYWRpcyVkOiBsb2FkaW5nICVzXG4iLCBzYWEtPm5yLAotCQkJCWJpdGRhdGEtPmxvYWR3aGF0KTsKLQkJCWlmIChsb2FkdHdvICYmIGxvYWRmaWxlID09IDIpCi0JCQkJZ290byBzZW5kX2ZwZ2Ffc3R1ZmY7Ci0JCQkvKiB0dXJuIG9uIHRoZSBBdWRpbyBpbnRlcmZhY2UgdG8gc2V0IFBST0cgbG93ICovCi0JCQlzYWF3cml0ZSgweDAwNDAwMDQwLCBTQUE3MTQ2X0dQSU9fQ1RSTCk7Ci0JCQlzYWFyZWFkKFNBQTcxNDZfUFNSKTsJLyogZW5zdXJlIHBvc3RlZCB3cml0ZSAqLwotCQkJLyogd2FpdCBmb3IgZXZlcnlvbmUgdG8gcmVzZXQgKi8KLQkJCW1kZWxheSgxMCk7Ci0JCQlzYWF3cml0ZSgweDAwNDAwMDAwLCBTQUE3MTQ2X0dQSU9fQ1RSTCk7Ci0JCX0gZWxzZSB7CS8qIG9yaWdpbmFsIGNhcmQgKi8KLQkJCWlmIChzdHJuY21wKGJpdGRhdGEtPmxvYWR3aGF0LCAiZGVjb2RlcjIiLCA4KSkKLQkJCQljb250aW51ZTsJLyogZnBnYSBub3QgZm9yIHRoaXMgY2FyZCAqLwotCQkJLyogUHVsbCB0aGUgWGlsaW54IFBST0cgc2lnbmFsIFdTMyBsb3cgKi8KLQkJCXNhYXdyaXRlKDB4MDIwMDAyMDAsIFNBQTcxNDZfTUMxKTsKLQkJCS8qIFR1cm4gb24gdGhlIEF1ZGlvIGludGVyZmFjZSBzbyBjYW4gc2V0IFBST0cgbG93ICovCi0JCQlzYWF3cml0ZSgweDAwMDAwMGMwLCBTQUE3MTQ2X0FDT04xKTsKLQkJCS8qIFB1bGwgdGhlIFhpbGlueCBJTklUIHNpZ25hbCAoR1BJTzIpIGxvdyAqLwotCQkJc2Fhd3JpdGUoMHgwMDQwMDAwMCwgU0FBNzE0Nl9HUElPX0NUUkwpOwotCQkJLyogTWFrZSBzdXJlIGV2ZXJ5Ym9keSByZXNldHMgKi8KLQkJCXNhYXJlYWQoU0FBNzE0Nl9QU1IpOwkvKiBlbnN1cmUgcG9zdGVkIHdyaXRlICovCi0JCQltZGVsYXkoMTApOwotCQkJLyogUmVsZWFzZSB0aGUgWGlsaW54IFBST0cgc2lnbmFsICovCi0JCQlzYWF3cml0ZSgweDAwMDAwMDAwLCBTQUE3MTQ2X0FDT04xKTsKLQkJCS8qIFR1cm4gb2ZmIHRoZSBBdWRpbyBpbnRlcmZhY2UgKi8KLQkJCXNhYXdyaXRlKDB4MDIwMDAwMDAsIFNBQTcxNDZfTUMxKTsKLQkJfQotCQkvKiBSZWxlYXNlIFhpbGlueCBJTklUIHNpZ25hbCAoV1MyKSAqLwotCQlzYWF3cml0ZSgweDAwMDAwMDAwLCBTQUE3MTQ2X0dQSU9fQ1RSTCk7Ci0JCS8qIFdhaXQgZm9yIHRoZSBJTklUIHRvIGdvIEhpZ2ggKi8KLQkJZm9yIChpID0gMDsKLQkJCWkgPCAxMDAwMCAmJiAhKHNhYXJlYWQoU0FBNzE0Nl9QU1IpICYgU0FBNzE0Nl9QU1JfUElOMik7Ci0JCQlpKyspCi0JCQlzY2hlZHVsZSgpOwotCQlpZiAoaSA9PSAxMDAwKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJzdHJhZGlzJWQ6IG5vIGZwZ2EgSU5JVFxuIiwgc2FhLT5ucik7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLXNlbmRfZnBnYV9zdHVmZjoKLQkJaWYgKE5ld0NhcmQpIHsKLQkJCWZvciAoaSA9IHN0YXJ0aW5kZXg7IGkgPCBiaXRkYXRhLT5kYXRhc2l6ZTsgaSsrKQotCQkJCW5ld2RtYVtpIC0gc3RhcnRpbmRleF0gPQotCQkJCSAgICBiaXRtYW5nbGVyW2JpdGRhdGEtPmRhdGFbaV1dOwotCQkJZGViaXdyaXRlKHNhYSwgMHgwMTQyMDAwMCwgMCwgMCwKLQkJCQkoKGJpdGRhdGEtPmRhdGFzaXplIC0gc3RhcnRpbmRleCkgKyA1KSk7Ci0JCQlpZiAobG9hZHR3byAmJiBsb2FkZmlsZSA9PSAxKSB7Ci0JCQkJcHJpbnRrKCJzdHJhZGlzJWQ6IGF3YWl0aW5nIDJuZCBGUEdBIGJpdGZpbGVcbiIsCi0JCQkJICAgICAgIHNhYS0+bnIpOwotCQkJCWNvbnRpbnVlOwkvKiBza2lwIHRvIG5leHQgY2FyZCAqLwotCQkJfQotCQl9IGVsc2UgewotCQkJZm9yIChpID0gc3RhcnRpbmRleDsgaSA8IGJpdGRhdGEtPmRhdGFzaXplOyBpKyspCi0JCQkJZG1hYnVmW2kgLSBzdGFydGluZGV4XSA9Ci0JCQkJCWJpdG1hbmdsZXJbYml0ZGF0YS0+ZGF0YVtpXV07Ci0JCQlkZWJpd3JpdGUoc2FhLCAweDAxNGEwMDAwLCAwLCAwLAotCQkJCSgoYml0ZGF0YS0+ZGF0YXNpemUgLSBzdGFydGluZGV4KSArIDUpICogMik7Ci0JCX0KLQkJZm9yIChpID0gMDsKLQkJCWkgPCAxMDAwICYmICEoc2FhcmVhZChTQUE3MTQ2X1BTUikgJiBTQUE3MTQ2X1BTUl9QSU4yKTsKLQkJCWkrKykKLQkJCXNjaGVkdWxlKCk7Ci0JCWlmIChpID09IDEwMDApIHsKLQkJCXByaW50ayhLRVJOX0lORk8gInN0cmFkaXMlZDogRlBHQSBsb2FkIGZhaWxlZFxuIiwKLQkJCSAgICAgICBzYWEtPm5yKTsKLQkJCWZhaWx1cmUrKzsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICghTmV3Q2FyZCkgewotCQkJLyogUHVsbCB0aGUgWGlsaW54IElOSVQgc2lnbmFsIChHUElPMikgbG93ICovCi0JCQlzYWF3cml0ZSgweDAwNDAwMDAwLCBTQUE3MTQ2X0dQSU9fQ1RSTCk7Ci0JCQlzYWFyZWFkKFNBQTcxNDZfUFNSKTsJLyogZW5zdXJlIHBvc3RlZCB3cml0ZSAqLwotCQkJbWRlbGF5KDIpOwotCQkJc2Fhd3JpdGUoMHgwMDAwMDAwMCwgU0FBNzE0Nl9HUElPX0NUUkwpOwotCQkJbWRlbGF5KDIpOwotCQl9Ci0JCXByaW50ayhLRVJOX0lORk8gInN0cmFkaXMlZDogRlBHQSBMb2FkZWRcbiIsIHNhYS0+bnIpOwotCQlzYWEtPmJvYXJkY2ZnWzBdID0gMjY7CS8qIG1hcmsgZnBnYSBwcm9ncmFtbWVkICovCi0JCS8qIHNldCBWWENPIHRvIGl0cyBsb3dlc3QgZnJlcXVlbmN5ICovCi0JCWRlYml3cml0ZShzYWEsIGRlYk5vcm1hbCwgWElMSU5YX1BXTSwgMCwgMik7Ci0JCWlmIChOZXdDYXJkKSB7Ci0JCQkvKiBtdXRlIENTMzMxMCAqLwotCQkJaWYgKEhhdmVDUzMzMTApCi0JCQkJZGViaXdyaXRlKHNhYSwgZGViTm9ybWFsLCBYSUxJTlhfQ1MzMzEwX0NNUExULAotCQkJCQkwLCAyKTsKLQkJCS8qIHNldCBWWENPIHRvIFBXTSBtb2RlLCByZWxlYXNlIHJlc2V0LCBibGFuayBvbiAqLwotCQkJZGViaXdyaXRlKHNhYSwgZGViTm9ybWFsLCBYSUxJTlhfQ1RMMCwgMHhmZmM0LCAyKTsKLQkJCW1kZWxheSgxMCk7Ci0JCQkvKiB1bm11dGUgQ1MzMzEwICovCi0JCQlpZiAoSGF2ZUNTMzMxMCkKLQkJCQlkZWJpd3JpdGUoc2FhLCBkZWJOb3JtYWwsIFhJTElOWF9DVEwwLAotCQkJCQkweDIwMjAsIDIpOwotCQl9Ci0JCS8qIHNldCBzb3VyY2UgQmxhY2sgKi8KLQkJZGViaXdyaXRlKHNhYSwgZGViTm9ybWFsLCBYSUxJTlhfQ1RMMCwgMHgxNzA3LCAyKTsKLQkJc2FhLT5ib2FyZGNmZ1s0XSA9IDIyOwkvKiBzZXQgTlRTQyBGaXJzdCBBY3RpdmUgTGluZSAqLwotCQlzYWEtPmJvYXJkY2ZnWzVdID0gMjM7CS8qIHNldCBQQUwgRmlyc3QgQWN0aXZlIExpbmUgKi8KLQkJc2FhLT5ib2FyZGNmZ1s1NF0gPSAyOwkvKiBzZXQgTlRTQyBMYXN0IEFjdGl2ZSBMaW5lIC0gMjU2ICovCi0JCXNhYS0+Ym9hcmRjZmdbNTVdID0gNTQ7CS8qIHNldCBQQUwgTGFzdCBBY3RpdmUgTGluZSAtIDI1NiAqLwotCQlzZXRfb3V0X2Zvcm1hdChzYWEsIFZJREVPX01PREVfTlRTQyk7Ci0JCW1kZWxheSg1MCk7Ci0JCS8qIGJlZ2luIElCTSBjaGlwIGluaXQgKi8KLQkJZGViaXdyaXRlKHNhYSwgZGViTm9ybWFsLCBJQk1fTVAyX0NISVBfQ09OVFJPTCwgNCwgMik7Ci0JCXNhYXJlYWQoU0FBNzE0Nl9QU1IpOwkvKiB3YWl0IGZvciByZXNldCAqLwotCQltZGVsYXkoNSk7Ci0JCWRlYml3cml0ZShzYWEsIGRlYk5vcm1hbCwgSUJNX01QMl9DSElQX0NPTlRST0wsIDAsIDIpOwotCQlkZWJpcmVhZChzYWEsIGRlYk5vcm1hbCwgSUJNX01QMl9DSElQX0NPTlRST0wsIDIpOwotCQlkZWJpd3JpdGUoc2FhLCBkZWJOb3JtYWwsIElCTV9NUDJfQ0hJUF9DT05UUk9MLCAweDEwLCAyKTsKLQkJZGViaXdyaXRlKHNhYSwgZGViTm9ybWFsLCBJQk1fTVAyX0NNRF9BRERSLCAwLCAyKTsKLQkJZGViaXdyaXRlKHNhYSwgZGViTm9ybWFsLCBJQk1fTVAyX0NISVBfTU9ERSwgMHgyZSwgMik7Ci0JCWlmIChOZXdDYXJkKSB7Ci0JCQltZGVsYXkoNSk7Ci0JCQkvKiBzZXQgaTJzIHJhdGUgY29udmVydGVyIHRvIDQ4S0h6ICovCi0JCQlkZWJpd3JpdGUoc2FhLCBkZWJOb3JtYWwsIDB4ODBjMCwgNiwgMik7Ci0JCQkvKiB3ZSBtdXN0IGluaXQgQ1M4NDIwIGZpcnN0IHNpbmNlIHJldiBiIHB1bGxzIGkycyAqLwotCQkJLyogbWFzdGVyIGNsb2NrIGxvdyBhbmQgQ1M0MzQxIG5lZWRzIGkycyBtYXN0ZXIgdG8gKi8KLQkJCS8qIHJ1biB0aGUgaTJjIHBvcnQuICovCi0JCQlpZiAoSGF2ZUNTODQyMCkKLQkJCQkvKiAwPWNvbnN1bWVyLCAxPXBybyAqLwotCQkJCWluaXRpYWxpemVfY3M4NDIwKHNhYSwgMCk7Ci0KLQkJCW1kZWxheSg1KTsKLQkJCWlmIChIYXZlQ1M0MzQxKQotCQkJCWluaXRpYWxpemVfY3M0MzQxKHNhYSk7Ci0JCX0KLQkJZGViaXdyaXRlKHNhYSwgZGViTm9ybWFsLCBJQk1fTVAyX0lORkNfQ1RMLCAweDQ4LCAyKTsKLQkJZGViaXdyaXRlKHNhYSwgZGViTm9ybWFsLCBJQk1fTVAyX0JFRVBfQ1RMLCAweGEwMDAsIDIpOwotCQlkZWJpd3JpdGUoc2FhLCBkZWJOb3JtYWwsIElCTV9NUDJfRElTUF9MQk9SLCAwLCAyKTsKLQkJZGViaXdyaXRlKHNhYSwgZGViTm9ybWFsLCBJQk1fTVAyX0RJU1BfVEJPUiwgMCwgMik7Ci0JCWlmIChOZXdDYXJkKQotCQkJc2V0X2dlbmxvY2tfb2Zmc2V0KHNhYSwgMCk7Ci0JCWRlYml3cml0ZShzYWEsIGRlYk5vcm1hbCwgSUJNX01QMl9GUk5UX0FUVEVOLCAwLCAyKTsKLSNpZiAwCi0JCS8qIGVuYWJsZSBnZW5sb2NrICovCi0JCWRlYml3cml0ZShzYWEsIGRlYk5vcm1hbCwgWElMSU5YX0NUTDAsIDB4ODAwMCwgMik7Ci0jZWxzZQotCQkvKiBkaXNhYmxlIGdlbmxvY2sgKi8KLQkJZGViaXdyaXRlKHNhYSwgZGViTm9ybWFsLCBYSUxJTlhfQ1RMMCwgMHg4MDgwLCAyKTsKLSNlbmRpZgotCX0KLQotCXJldHVybiBmYWlsdXJlOwotfQotCi1zdGF0aWMgaW50IGRvX2libV9yZXNldChzdHJ1Y3Qgc2FhNzE0NiAqc2FhKQotewotCS8qIGZhaWx1cmUgaWYgZGVjb2RlciBub3QgcHJldmlvdXNseSBwcm9ncmFtbWVkICovCi0JaWYgKHNhYS0+Ym9hcmRjZmdbMF0gPCAzNykKLQkJcmV0dXJuIC1FSU87Ci0JLyogbXV0ZSBDUzMzMTAgKi8KLQlpZiAoSGF2ZUNTMzMxMCkKLQkJZGViaXdyaXRlKHNhYSwgZGViTm9ybWFsLCBYSUxJTlhfQ1MzMzEwX0NNUExULCAwLCAyKTsKLQkvKiBkaXNhYmxlIGludGVycnVwdHMgKi8KLQlzYWF3cml0ZSgwLCBTQUE3MTQ2X0lFUik7Ci0Jc2FhLT5hdWRoZWFkID0gc2FhLT5hdWR0YWlsID0gMDsKLQlzYWEtPnZpZGhlYWQgPSBzYWEtPnZpZHRhaWwgPSAwOwotCS8qIHRyaXN0YXRlIGRlYmkgYnVzLCBkaXNhYmxlIGRlYmkgdHJhbnNmZXJzICovCi0Jc2Fhd3JpdGUoMHgwMDg4MDAwMCwgU0FBNzE0Nl9NQzEpOwotCS8qIGVuc3VyZSBwb3N0ZWQgd3JpdGUgKi8KLQlzYWFyZWFkKFNBQTcxNDZfTUMxKTsKLQltZGVsYXkoNTApOwotCS8qIHJlLWVuYWJsZSBkZWJpIHRyYW5zZmVycyAqLwotCXNhYXdyaXRlKDB4MDA4ODAwODgsIFNBQTcxNDZfTUMxKTsKLQkvKiBzZXQgc291cmNlIEJsYWNrICovCi0JZGViaXdyaXRlKHNhYSwgZGViTm9ybWFsLCBYSUxJTlhfQ1RMMCwgMHgxNzA3LCAyKTsKLQkvKiBiZWdpbiBJQk0gY2hpcCBpbml0ICovCi0Jc2V0X291dF9mb3JtYXQoc2FhLCBDdXJyZW50TW9kZSk7Ci0JZGViaXdyaXRlKHNhYSwgZGViTm9ybWFsLCBJQk1fTVAyX0NISVBfQ09OVFJPTCwgNCwgMik7Ci0Jc2FhcmVhZChTQUE3MTQ2X1BTUik7CS8qIHdhaXQgZm9yIHJlc2V0ICovCi0JbWRlbGF5KDUpOwotCWRlYml3cml0ZShzYWEsIGRlYk5vcm1hbCwgSUJNX01QMl9DSElQX0NPTlRST0wsIDAsIDIpOwotCWRlYmlyZWFkKHNhYSwgZGViTm9ybWFsLCBJQk1fTVAyX0NISVBfQ09OVFJPTCwgMik7Ci0JZGViaXdyaXRlKHNhYSwgZGViTm9ybWFsLCBJQk1fTVAyX0NISVBfQ09OVFJPTCwgQ2hpcENvbnRyb2wsIDIpOwotCWRlYml3cml0ZShzYWEsIGRlYk5vcm1hbCwgSUJNX01QMl9DSElQX01PREUsIDB4MmUsIDIpOwotCWlmIChOZXdDYXJkKSB7Ci0JCW1kZWxheSg1KTsKLQkJLyogc2V0IGkycyByYXRlIGNvbnZlcnRlciB0byA0OEtIeiAqLwotCQlkZWJpd3JpdGUoc2FhLCBkZWJOb3JtYWwsIDB4ODBjMCwgNiwgMik7Ci0JCS8qIHdlIG11c3QgaW5pdCBDUzg0MjAgZmlyc3Qgc2luY2UgcmV2IGIgcHVsbHMgaTJzICovCi0JCS8qIG1hc3RlciBjbG9jayBsb3cgYW5kIENTNDM0MSBuZWVkcyBpMnMgbWFzdGVyIHRvICovCi0JCS8qIHJ1biB0aGUgaTJjIHBvcnQuICovCi0JCWlmIChIYXZlQ1M4NDIwKQotCQkJLyogMD1jb25zdW1lciwgMT1wcm8gKi8KLQkJCWluaXRpYWxpemVfY3M4NDIwKHNhYSwgMSk7Ci0KLQkJbWRlbGF5KDUpOwotCQlpZiAoSGF2ZUNTNDM0MSkKLQkJCWluaXRpYWxpemVfY3M0MzQxKHNhYSk7Ci0JfQotCWRlYml3cml0ZShzYWEsIGRlYk5vcm1hbCwgSUJNX01QMl9JTkZDX0NUTCwgMHg0OCwgMik7Ci0JZGViaXdyaXRlKHNhYSwgZGViTm9ybWFsLCBJQk1fTVAyX0JFRVBfQ1RMLCAweGEwMDAsIDIpOwotCWRlYml3cml0ZShzYWEsIGRlYk5vcm1hbCwgSUJNX01QMl9ESVNQX0xCT1IsIDAsIDIpOwotCWRlYml3cml0ZShzYWEsIGRlYk5vcm1hbCwgSUJNX01QMl9ESVNQX1RCT1IsIDAsIDIpOwotCWlmIChOZXdDYXJkKQotCQlzZXRfZ2VubG9ja19vZmZzZXQoc2FhLCAwKTsKLQlkZWJpd3JpdGUoc2FhLCBkZWJOb3JtYWwsIElCTV9NUDJfRlJOVF9BVFRFTiwgMCwgMik7Ci0JZGViaXdyaXRlKHNhYSwgZGViTm9ybWFsLCBJQk1fTVAyX09TRF9TSVpFLCAweDIwMDAsIDIpOwotCWRlYml3cml0ZShzYWEsIGRlYk5vcm1hbCwgSUJNX01QMl9BVURfQ1RMLCAweDQ1NTIsIDIpOwotCWlmIChpYm1fc2VuZF9jb21tYW5kKHNhYSwgSUJNX01QMl9DT05GSUdfREVDT0RFUiwKLQkJCShDaGlwQ29udHJvbCA9PSAweDQzID8gMHhlODAwIDogMHhlMDAwKSwgMSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJzdHJhZGlzJWQ6IElCTSBjb25maWcgZmFpbGVkXG4iLCBzYWEtPm5yKTsKLQl9Ci0JaWYgKEhhdmVDUzMzMTApIHsKLQkJaW50IGkgPSBDUzMzMTBNYXhMdmw7Ci0JCWRlYml3cml0ZShzYWEsIGRlYk5vcm1hbCwgWElMSU5YX0NTMzMxMF9DTVBMVCwgKChpIDw8IDgpfCBpKSwyKTsKLQl9Ci0JLyogc3RhcnQgdmlkZW8gZGVjb2RlciAqLwotCWRlYml3cml0ZShzYWEsIGRlYk5vcm1hbCwgSUJNX01QMl9DSElQX0NPTlRST0wsIENoaXBDb250cm9sLCAyKTsKLQkvKiAyNTZrIHZpZCwgMzUyMCBieXRlcyBhdWQgKi8KLQlkZWJpd3JpdGUoc2FhLCBkZWJOb3JtYWwsIElCTV9NUDJfUkJfVEhSRVNIT0xELCAweDQwMzcsIDIpOwotCWRlYml3cml0ZShzYWEsIGRlYk5vcm1hbCwgSUJNX01QMl9BVURfQ1RMLCAweDQ1NzMsIDIpOwotCWlibV9zZW5kX2NvbW1hbmQoc2FhLCBJQk1fTVAyX1BMQVksIDAsIDApOwotCS8qIGVuYWJsZSBidWZmZXIgdGhyZXNob2xkIGlycSAqLwotCWRlYml3cml0ZShzYWEsIGRlYk5vcm1hbCwgSUJNX01QMl9NQVNLMCwgMHhjMDBjLCAyKTsKLQkvKiBjbGVhciBwZW5kaW5nIGludGVycnVwdHMgKi8KLQlkZWJpcmVhZChzYWEsIGRlYk5vcm1hbCwgSUJNX01QMl9IT1NUX0lOVCwgMik7Ci0JZGViaXdyaXRlKHNhYSwgZGViTm9ybWFsLCBYSUxJTlhfQ1RMMCwgMHgxNzExLCAyKTsKLQotCXJldHVybiAwOwotfQotCi0vKiBsb2FkIHRoZSBkZWNvZGVyIG1pY3JvY29kZSAqLwotc3RhdGljIGludCBpbml0aWFsaXplX2libW1wZWcyKHN0cnVjdCB2aWRlb19jb2RlICptaWNyb2NvZGUpCi17Ci0JaW50IGksIG51bTsKLQlzdHJ1Y3Qgc2FhNzE0NiAqc2FhOwotCi0JZm9yIChudW0gPSAwOyBudW0gPCBzYWFfbnVtOyBudW0rKykgewotCQlzYWEgPSAmc2FhNzE0NnNbbnVtXTsKLQkJLyogY2hlY2sgdGhhdCBGUEdBIGlzIGxvYWRlZCAqLwotCQlkZWJpd3JpdGUoc2FhLCBkZWJOb3JtYWwsIElCTV9NUDJfT1NEX1NJWkUsIDB4YTU1YSwgMik7Ci0JCWkgPSBkZWJpcmVhZChzYWEsIGRlYk5vcm1hbCwgSUJNX01QMl9PU0RfU0laRSwgMik7Ci0JCWlmIChpICE9IDB4YTU1YSkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAic3RyYWRpcyVkOiAlMDR4ICE9IDB4YTU1YVxuIiwKLQkJCQlzYWEtPm5yLCBpKTsKLSNpZiAwCi0JCQlyZXR1cm4gLTE7Ci0jZW5kaWYKLQkJfQotCQlpZiAoIXN0cm5jbXAobWljcm9jb2RlLT5sb2Fkd2hhdCwgImRlY29kZXIudmlkIiwgMTEpKSB7Ci0JCQlpZiAoc2FhLT5ib2FyZGNmZ1swXSA+IDI3KQotCQkJCWNvbnRpbnVlOwkvKiBza2lwIHRvIG5leHQgY2FyZCAqLwotCQkJLyogbG9hZCB2aWRlbyBjb250cm9sIHN0b3JlICovCi0JCQlzYWEtPmJvYXJkY2ZnWzFdID0gMHgxMzsJLyogbm8tc3luYyBkZWZhdWx0ICovCi0JCQlkZWJpd3JpdGUoc2FhLCBkZWJOb3JtYWwsIElCTV9NUDJfV1JfUFJPVCwgMSwgMik7Ci0JCQlkZWJpd3JpdGUoc2FhLCBkZWJOb3JtYWwsIElCTV9NUDJfUFJPQ19JQUREUiwgMCwgMik7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgbWljcm9jb2RlLT5kYXRhc2l6ZSAvIDI7IGkrKykKLQkJCQlkZWJpd3JpdGUoc2FhLCBkZWJOb3JtYWwsIElCTV9NUDJfUFJPQ19JREFUQSwKLQkJCQkJKG1pY3JvY29kZS0+ZGF0YVtpICogMl0gPDwgOCkgfAotCQkJCQltaWNyb2NvZGUtPmRhdGFbaSAqIDIgKyAxXSwgMik7Ci0JCQlkZWJpd3JpdGUoc2FhLCBkZWJOb3JtYWwsIElCTV9NUDJfUFJPQ19JQUREUiwgMCwgMik7Ci0JCQlkZWJpd3JpdGUoc2FhLCBkZWJOb3JtYWwsIElCTV9NUDJfV1JfUFJPVCwgMCwgMik7Ci0JCQlkZWJpd3JpdGUoc2FhLCBkZWJOb3JtYWwsIElCTV9NUDJfQ0hJUF9DT05UUk9MLAotCQkJCUNoaXBDb250cm9sLCAyKTsKLQkJCXNhYS0+Ym9hcmRjZmdbMF0gPSAyODsKLQkJfQotCQlpZiAoIXN0cm5jbXAobWljcm9jb2RlLT5sb2Fkd2hhdCwgImRlY29kZXIuYXVkIiwgMTEpKSB7Ci0JCQlpZiAoc2FhLT5ib2FyZGNmZ1swXSA+IDM1KQotCQkJCWNvbnRpbnVlOwkvKiBza2lwIHRvIG5leHQgY2FyZCAqLwotCQkJLyogbG9hZCBhdWRpbyBjb250cm9sIHN0b3JlICovCi0JCQlkZWJpd3JpdGUoc2FhLCBkZWJOb3JtYWwsIElCTV9NUDJfV1JfUFJPVCwgMSwgMik7Ci0JCQlkZWJpd3JpdGUoc2FhLCBkZWJOb3JtYWwsIElCTV9NUDJfQVVEX0lBRERSLCAwLCAyKTsKLQkJCWZvciAoaSA9IDA7IGkgPCBtaWNyb2NvZGUtPmRhdGFzaXplOyBpKyspCi0JCQkJZGViaXdyaXRlKHNhYSwgZGViTm9ybWFsLCBJQk1fTVAyX0FVRF9JREFUQSwKLQkJCQkJbWljcm9jb2RlLT5kYXRhW2ldLCAxKTsKLQkJCWRlYml3cml0ZShzYWEsIGRlYk5vcm1hbCwgSUJNX01QMl9BVURfSUFERFIsIDAsIDIpOwotCQkJZGViaXdyaXRlKHNhYSwgZGViTm9ybWFsLCBJQk1fTVAyX1dSX1BST1QsIDAsIDIpOwotCQkJZGViaXdyaXRlKHNhYSwgZGViTm9ybWFsLCBJQk1fTVAyX09TRF9TSVpFLCAweDIwMDAsIDIpOwotCQkJZGViaXdyaXRlKHNhYSwgZGViTm9ybWFsLCBJQk1fTVAyX0FVRF9DVEwsIDB4NDU1MiwgMik7Ci0JCQlpZiAoaWJtX3NlbmRfY29tbWFuZChzYWEsIElCTV9NUDJfQ09ORklHX0RFQ09ERVIsCi0JCQkJCTB4ZTAwMCwgMSkpIHsKLQkJCQlwcmludGsoS0VSTl9FUlIgInN0cmFkaXMlZDogSUJNIGNvbmZpZyAiCi0JCQkJCSJmYWlsZWRcbiIsIHNhYS0+bnIpOwotCQkJCXJldHVybiAtMTsKLQkJCX0KLQkJCS8qIHNldCBQV00gdG8gY2VudGVyIHZhbHVlICovCi0JCQlpZiAoTmV3Q2FyZCkgewotCQkJCWRlYml3cml0ZShzYWEsIGRlYk5vcm1hbCwgWElMSU5YX1BXTSwKLQkJCQkJc2FhLT5ib2FyZGNmZ1sxNF0gKwotCQkJCQkoc2FhLT5ib2FyZGNmZ1sxM10gPDwgOCksIDIpOwotCQkJfSBlbHNlCi0JCQkJZGViaXdyaXRlKHNhYSwgZGViTm9ybWFsLCBYSUxJTlhfUFdNLCAweDQ2LCAyKTsKLQotCQkJaWYgKEhhdmVDUzMzMTApIHsKLQkJCQlpID0gQ1MzMzEwTWF4THZsOwotCQkJCWRlYml3cml0ZShzYWEsIGRlYk5vcm1hbCwgWElMSU5YX0NTMzMxMF9DTVBMVCwKLQkJCQkJKGkgPDwgOCkgfCBpLCAyKTsKLQkJCX0KLQkJCXByaW50ayhLRVJOX0lORk8gInN0cmFkaXMlZDogSUJNIE1QRUdDRCVkIEluaXRlZFxuIiwKLQkJCQlzYWEtPm5yLCAxOCArIChkZWJpcmVhZChzYWEsIGRlYk5vcm1hbCwKLQkJCQlJQk1fTVAyX0NISVBfQ09OVFJPTCwgMikgPj4gMTIpKTsKLQkJCS8qIHN0YXJ0IHZpZGVvIGRlY29kZXIgKi8KLQkJCWRlYml3cml0ZShzYWEsIGRlYk5vcm1hbCwgSUJNX01QMl9DSElQX0NPTlRST0wsCi0JCQkJQ2hpcENvbnRyb2wsIDIpOwotCQkJZGViaXdyaXRlKHNhYSwgZGViTm9ybWFsLCBJQk1fTVAyX1JCX1RIUkVTSE9MRCwgMHg0MDM3LAotCQkJCTIpOwkvKiAyNTZrIHZpZCwgMzUyMCBieXRlcyBhdWQgKi8KLQkJCWRlYml3cml0ZShzYWEsIGRlYk5vcm1hbCwgSUJNX01QMl9BVURfQ1RMLCAweDQ1NzMsIDIpOwotCQkJaWJtX3NlbmRfY29tbWFuZChzYWEsIElCTV9NUDJfUExBWSwgMCwgMCk7Ci0JCQkvKiBlbmFibGUgYnVmZmVyIHRocmVzaG9sZCBpcnEgKi8KLQkJCWRlYml3cml0ZShzYWEsIGRlYk5vcm1hbCwgSUJNX01QMl9NQVNLMCwgMHhjMDBjLCAyKTsKLQkJCWRlYmlyZWFkKHNhYSwgZGViTm9ybWFsLCBJQk1fTVAyX0hPU1RfSU5ULCAyKTsKLQkJCS8qIGVuYWJsZSBncGlvIGlycSAqLwotCQkJc2Fhd3JpdGUoMHgwMDAwMjAwMCwgU0FBNzE0Nl9HUElPX0NUUkwpOwotCQkJLyogZW5hYmxlIGRlY29kZXIgb3V0cHV0IHRvIEhQUyAqLwotCQkJZGViaXdyaXRlKHNhYSwgZGViTm9ybWFsLCBYSUxJTlhfQ1RMMCwgMHgxNzExLCAyKTsKLQkJCXNhYS0+Ym9hcmRjZmdbMF0gPSAzNzsKLQkJfQotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdTMyIHBhbGV0dGUyZm10W10gPSB7CS8qIHNvbWUgb2YgdGhlc2UgWVVWIHRyYW5zbGF0aW9ucyBhcmUgd3JvbmcgKi8KLQkweGZmZmZmZmZmLCAweDg2MDAwMDAwLCAweDg3MDAwMDAwLCAweDgwMDAwMDAwLCAweDgxMDAwMDAsIDB4ODIwMDAwMDAsCi0JMHg4MzAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMzAwMDAwMCwgMHgwMzAwMDAwMCwgMHgwYTAwMDAwLCAweDAzMDAwMDAwLAotCTB4MDYwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDMwMDAwMDAsIDB4MGEwMDAwMDAsIDB4MDMwMDAwMAotfTsKLXN0YXRpYyBpbnQgYnBwMmZtdFs0XSA9IHsKLQlWSURFT19QQUxFVFRFX0hJMjQwLCBWSURFT19QQUxFVFRFX1JHQjU2NSwgVklERU9fUEFMRVRURV9SR0IyNCwKLQlWSURFT19QQUxFVFRFX1JHQjMyCi19OwotCi0vKiBJIHdpc2ggSSBjb3VsZCBmaW5kIGEgZm9ybXVsYSB0byBjYWxjdWxhdGUgdGhlc2UuLi4gKi8KLXN0YXRpYyB1MzIgaF9wcmVzY2FsZVs2NF0gPSB7Ci0JMHgxMDAwMDAwMCwgMHgxODA0MDIwMiwgMHgxODA4MDAwMCwgMHgzODBjMDYwNiwgMHgzODEwMDIwNCwgMHgzODE0MDgwOCwKLQkweDM4MTgwMDAwLCAweDM4MWMwMDAwLCAweDM4MjAxNjFjLCAweDM4MjQyYTNiLCAweDM4MjgxMjMwLCAweDM4MmM0NDYwLAotCTB4MzgzMDEwNDAsIDB4MzgzNDAwODAsIDB4MzgzODAwMDAsIDB4MzgzYzAwMDAsIDB4Mzg0MGZlZmUsIDB4Mzg0NGVlOWYsCi0JMHgzODQ4ZWU5ZiwgMHgzODRjZWU5ZiwgMHgzODUwZWU5ZiwgMHgzODU0MmEzYiwgMHgzODU4MTIzMCwgMHgzODVjMDAwMCwKLQkweDM4NjAwMDAwLCAweDM4NjQwMDAwLCAweDM4NjgwMDAwLCAweDM4NmMwMDAwLCAweDM4NzAwMDAwLCAweDM4NzQwMDAwLAotCTB4Mzg3ODAwMDAsIDB4Mzg3YzAwMDAsIDB4MzA4MDAwMDAsIDB4Mzg4NDAwMDAsIDB4Mzg4ODAwMDAsIDB4Mzg4YzAwMDAsCi0JMHgzODkwMDAwMCwgMHgzODk0MDAwMCwgMHgzODk4MDAwMCwgMHgzODljMDAwMCwgMHgzOGEwMDAwMCwgMHgzOGE0MDAwMCwKLQkweDM4YTgwMDAwLCAweDM4YWMwMDAwLCAweDM4YjAwMDAwLCAweDM4YjQwMDAwLCAweDM4YjgwMDAwLCAweDM4YmMwMDAwLAotCTB4MzhjMDAwMDAsIDB4MzhjNDAwMDAsIDB4MzhjODAwMDAsIDB4MzhjYzAwMDAsIDB4MzhkMDAwMDAsIDB4MzhkNDAwMDAsCi0JMHgzOGQ4MDAwMCwgMHgzOGRjMDAwMCwgMHgzOGUwMDAwMCwgMHgzOGU0MDAwMCwgMHgzOGU4MDAwMCwgMHgzOGVjMDAwMCwKLQkweDM4ZjAwMDAwLCAweDM4ZjQwMDAwLCAweDM4ZjgwMDAwLCAweDM4ZmMwMDAwLAotfTsKLXN0YXRpYyB1MzIgdl9nYWluWzY0XSA9IHsKLQkweDAxNjAwMGZmLCAweDAxNjEwMGZmLCAweDAxNjEwMGZmLCAweDAxNjIwMGZmLCAweDAxNjIwMGZmLCAweDAxNjIwMGZmLAotCTB4MDE2MjAwZmYsIDB4MDE2MzAwZmYsIDB4MDE2MzAwZmYsIDB4MDE2MzAwZmYsIDB4MDE2MzAwZmYsIDB4MDE2MzAwZmYsCi0JMHgwMTYzMDBmZiwgMHgwMTYzMDBmZiwgMHgwMTYzMDBmZiwgMHgwMTY0MDBmZiwgMHgwMTY0MDBmZiwgMHgwMTY0MDBmZiwKLQkweDAxNjQwMGZmLCAweDAxNjQwMGZmLCAweDAxNjQwMGZmLCAweDAxNjQwMGZmLCAweDAxNjQwMGZmLCAweDAxNjQwMGZmLAotCTB4MDE2NDAwZmYsIDB4MDE2NDAwZmYsIDB4MDE2NDAwZmYsIDB4MDE2NDAwZmYsIDB4MDE2NDAwZmYsIDB4MDE2NDAwZmYsCi0JMHgwMTY0MDBmZiwgMHgwMTY0MDBmZiwgMHgwMTY0MDBmZiwgMHgwMTY0MDBmZiwgMHgwMTY0MDBmZiwgMHgwMTY0MDBmZiwKLQkweDAxNjQwMGZmLCAweDAxNjQwMGZmLCAweDAxNjQwMGZmLCAweDAxNjQwMGZmLCAweDAxNjQwMGZmLCAweDAxNjQwMGZmLAotCTB4MDE2NDAwZmYsIDB4MDE2NDAwZmYsIDB4MDE2NDAwZmYsIDB4MDE2NDAwZmYsIDB4MDE2NDAwZmYsIDB4MDE2NDAwZmYsCi0JMHgwMTY0MDBmZiwgMHgwMTY0MDBmZiwgMHgwMTY0MDBmZiwgMHgwMTY0MDBmZiwgMHgwMTY0MDBmZiwgMHgwMTY0MDBmZiwKLQkweDAxNjQwMGZmLCAweDAxNjQwMGZmLCAweDAxNjQwMGZmLCAweDAxNjQwMGZmLCAweDAxNjQwMGZmLCAweDAxNjQwMGZmLAotCTB4MDE2NDAwZmYsIDB4MDE2NDAwZmYsIDB4MDE2NDAwZmYsIDB4MDE2NDAwZmYsCi19OwotCi1zdGF0aWMgdm9pZCBzYWE3MTQ2X3NldF93aW5zaXplKHN0cnVjdCBzYWE3MTQ2ICpzYWEpCi17Ci0JdTMyIGZvcm1hdDsKLQlpbnQgb2Zmc2V0LCB5YWNsLCB5c2NpOwotCXNhYS0+d2luLmNvbG9yX2ZtdCA9IGZvcm1hdCA9Ci0JICAgIChzYWEtPndpbi5kZXB0aCA9PSAxNSkgPyBwYWxldHRlMmZtdFtWSURFT19QQUxFVFRFX1JHQjU1NV0gOgotCSAgICBwYWxldHRlMmZtdFticHAyZm10WyhzYWEtPndpbi5icHAgLSAxKSAmIDNdXTsKLQlvZmZzZXQgPSBzYWEtPndpbi54ICogc2FhLT53aW4uYnBwICsgc2FhLT53aW4ueSAqIHNhYS0+d2luLmJwbDsKLQlzYWF3cml0ZShzYWEtPndpbi52aWRhZHIgKyBvZmZzZXQsIFNBQTcxNDZfQkFTRV9FVkVOMSk7Ci0Jc2Fhd3JpdGUoc2FhLT53aW4udmlkYWRyICsgb2Zmc2V0ICsgc2FhLT53aW4uYnBsLCBTQUE3MTQ2X0JBU0VfT0REMSk7Ci0Jc2Fhd3JpdGUoc2FhLT53aW4uYnBsICogMiwgU0FBNzE0Nl9QSVRDSDEpOwotCXNhYXdyaXRlKHNhYS0+d2luLnZpZGFkciArIHNhYS0+d2luLmJwbCAqIHNhYS0+d2luLnNoZWlnaHQsCi0JCSBTQUE3MTQ2X1BST1RfQUREUjEpOwotCXNhYXdyaXRlKDAsIFNBQTcxNDZfUEFHRTEpOwotCXNhYXdyaXRlKGZvcm1hdCB8IDB4NjAsIFNBQTcxNDZfQ0xJUF9GT1JNQVRfQ1RSTCk7Ci0Jb2Zmc2V0ID0gKDcwNCAvIChzYWEtPndpbi53aWR0aCAtIDEpKSAmIDB4M2Y7Ci0Jc2Fhd3JpdGUoaF9wcmVzY2FsZVtvZmZzZXRdLCBTQUE3MTQ2X0hQU19IX1BSRVNDQUxFKTsKLQlvZmZzZXQgPSAoNzIwODk2IC8gc2FhLT53aW4ud2lkdGgpIC8gKG9mZnNldCArIDEpOwotCXNhYXdyaXRlKChvZmZzZXQgPDwgMTIpIHwgMHgwYywgU0FBNzE0Nl9IUFNfSF9TQ0FMRSk7Ci0JaWYgKEN1cnJlbnRNb2RlID09IFZJREVPX01PREVfTlRTQykgewotCQl5YWNsID0gLyooNDgwIC8gc2FhLT53aW4uaGVpZ2h0IC0gMSkgJiAweDNmICovIDA7Ci0JCXlzY2kgPSAxMDI0IC0gKHNhYS0+d2luLmhlaWdodCAqIDEwMjQgLyA0ODApOwotCX0gZWxzZSB7Ci0JCXlhY2wgPSAvKig1NzYgLyBzYWEtPndpbi5oZWlnaHQgLSAxKSAmIDB4M2YgKi8gMDsKLQkJeXNjaSA9IDEwMjQgLSAoc2FhLT53aW4uaGVpZ2h0ICogMTAyNCAvIDU3Nik7Ci0JfQotCXNhYXdyaXRlKCgxIDw8IDMxKSB8ICh5c2NpIDw8IDIxKSB8ICh5YWNsIDw8IDE1KSwgU0FBNzE0Nl9IUFNfVl9TQ0FMRSk7Ci0Jc2Fhd3JpdGUodl9nYWluW3lhY2xdLCBTQUE3MTQ2X0hQU19WX0dBSU4pOwotCXNhYXdyaXRlKCgoU0FBNzE0Nl9NQzJfVVBMRF9ETUExIHwgU0FBNzE0Nl9NQzJfVVBMRF9IUFNfViB8Ci0JCVNBQTcxNDZfTUMyX1VQTERfSFBTX0gpIDw8IDE2KSB8IChTQUE3MTQ2X01DMl9VUExEX0RNQTEgfAotCQlTQUE3MTQ2X01DMl9VUExEX0hQU19WIHwgU0FBNzE0Nl9NQzJfVVBMRF9IUFNfSCksIFNBQTcxNDZfTUMyKTsKLX0KLQotLyogY2xpcF9kcmF3X3JlY3RhbmdsZShjbSx4LHksdyxoKSAtLSBoYW5kbGUgY2xpcHBpbmcgYW4gYXJlYQotICogYml0bWFwIGlzIGZpeGVkIHdpZHRoLCAxMjggYnl0ZXMgKDEwMjQgcGl4ZWxzIHJlcHJlc2VudGVkKQotICogYXJyYW5nZWQgbW9zdC1zaWdpZmljYW50LWJpdC1sZWZ0IGluIDMyLWJpdCB3b3JkcwotICogYmFzZWQgb24gc2FhNzE0NiBjbGlwcGluZyBoYXJkd2FyZSwgaXQgc3dhcHMgYnl0ZXMgaWYgTEUKLSAqIG11Y2ggb2YgdGhpcyBtYWtlcyB1cCBmb3IgZWdjcyBicmFpbiBkYW1hZ2UgLS0gc28gaWYgeW91Ci0gKiBhcmUgd29uZGVyaW5nICJ3aHkgZGlkIGhlIGRvIHRoaXM/IiBpdCBpcyBiZWNhdXNlIHRoZSBDCi0gKiB3YXMgYWRqdXN0ZWQgdG8gZ2VuZXJhdGUgdGhlIG9wdGltYWwgYXNtIG91dHB1dCB3aXRob3V0Ci0gKiB3cml0aW5nIG5vbi1wb3J0YWJsZSBfX2FzbV9fIGRpcmVjdGl2ZXMuCi0gKi8KLQotc3RhdGljIHZvaWQgY2xpcF9kcmF3X3JlY3RhbmdsZSh1MzIgKmNsaXBtYXAsIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoKQotewotCXJlZ2lzdGVyIGludCBzdGFydHdvcmQsIGVuZHdvcmQ7Ci0JcmVnaXN0ZXIgdTMyIGJpdHNsZWZ0LCBiaXRzcmlnaHQ7Ci0JdTMyICp0ZW1wOwotCWlmICh4IDwgMCkgewotCQl3ICs9IHg7Ci0JCXggPSAwOwotCX0KLQlpZiAoeSA8IDApIHsKLQkJaCArPSB5OwotCQl5ID0gMDsKLQl9Ci0JaWYgKHcgPD0gMCB8fCBoIDw9IDAgfHwgeCA+IDEwMjMgfHwgeSA+IDYzOSkKLQkJcmV0dXJuOwkJLyogdGhyb3cgYXdheSBiYWQgY2xpcHMgKi8KLQlpZiAoeCArIHcgPiAxMDI0KQotCQl3ID0gMTAyNCAtIHg7Ci0JaWYgKHkgKyBoID4gNjQwKQotCQloID0gNjQwIC0geTsKLQlzdGFydHdvcmQgPSAoeCA+PiA1KTsKLQllbmR3b3JkID0gKCh4ICsgdykgPj4gNSk7Ci0JYml0c2xlZnQgPSAoMHhmZmZmZmZmZiA+PiAoeCAmIDMxKSk7Ci0JYml0c3JpZ2h0ID0gKDB4ZmZmZmZmZmYgPDwgKH4oKHggKyB3KSAtIChlbmR3b3JkIDw8IDUpKSkpOwotCXRlbXAgPSAmY2xpcG1hcFsoeSA8PCA1KSArIHN0YXJ0d29yZF07Ci0JdyA9IGVuZHdvcmQgLSBzdGFydHdvcmQ7Ci0JaWYgKCF3KSB7Ci0JCWJpdHNsZWZ0IHw9IGJpdHNyaWdodDsKLQkJZm9yICh5ID0gMDsgeSA8IGg7IHkrKykgewotCQkJKnRlbXAgfD0gYml0c2xlZnQ7Ci0JCQl0ZW1wICs9IDMyOwotCQl9Ci0JfSBlbHNlIHsKLQkJZm9yICh5ID0gMDsgeSA8IGg7IHkrKykgewotCQkJKnRlbXArKyB8PSBiaXRzbGVmdDsKLQkJCWZvciAoeCA9IDE7IHggPCB3OyB4KyspCi0JCQkJKnRlbXArKyA9IDB4ZmZmZmZmZmY7Ci0JCQkqdGVtcCB8PSBiaXRzcmlnaHQ7Ci0JCQl0ZW1wICs9ICgzMiAtIHcpOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBtYWtlX2NsaXBfdGFiKHN0cnVjdCBzYWE3MTQ2ICpzYWEsIHN0cnVjdCB2aWRlb19jbGlwICpjciwgaW50IG5jcikKLXsKLQlpbnQgaSwgd2lkdGgsIGhlaWdodDsKLQl1MzIgKmNsaXBtYXA7Ci0KLQljbGlwbWFwID0gc2FhLT5kbWF2aWQyOwotCWlmICgod2lkdGggPSBzYWEtPndpbi53aWR0aCkgPiAxMDIzKQotCQl3aWR0aCA9IDEwMjM7CS8qIHNhbml0eSBjaGVjayAqLwotCWlmICgoaGVpZ2h0ID0gc2FhLT53aW4uaGVpZ2h0KSA+IDY0MCkKLQkJaGVpZ2h0ID0gNjM5OwkvKiBzYW5pdHkgY2hlY2sgKi8KLQlpZiAobmNyID4gMCkgewkJLyogcmVjdGFuZ2xlcyBwYXNlZCAqLwotCQkvKiBjb252ZXJ0IHJlY3Rhbmd1bGFyIGNsaXBzIHRvIGEgYml0bWFwICovCi0JCW1lbXNldChjbGlwbWFwLCAwLCBWSURFT19DTElQTUFQX1NJWkUpOwkvKiBjbGVhciBtYXAgKi8KLQkJZm9yIChpID0gMDsgaSA8IG5jcjsgaSsrKQotCQkJY2xpcF9kcmF3X3JlY3RhbmdsZShjbGlwbWFwLCBjcltpXS54LCBjcltpXS55LAotCQkJCWNyW2ldLndpZHRoLCBjcltpXS5oZWlnaHQpOwotCX0KLQkvKiBjbGlwIGFnYWluc3Qgdmlld2luZyB3aW5kb3cgQU5EIHNjcmVlbgotCSAgIHNvIHdlIGRvIG5vdCBoYXZlIHRvIHJlbHkgb24gdGhlIHVzZXIgcHJvZ3JhbQotCSAqLwotCWNsaXBfZHJhd19yZWN0YW5nbGUoY2xpcG1hcCwgKHNhYS0+d2luLnggKyB3aWR0aCA+IHNhYS0+d2luLnN3aWR0aCkgPwotCQkoc2FhLT53aW4uc3dpZHRoIC0gc2FhLT53aW4ueCkgOiB3aWR0aCwgMCwgMTAyNCwgNzY4KTsKLQljbGlwX2RyYXdfcmVjdGFuZ2xlKGNsaXBtYXAsIDAsCi0JCShzYWEtPndpbi55ICsgaGVpZ2h0ID4gc2FhLT53aW4uc2hlaWdodCkgPwotCQkoc2FhLT53aW4uc2hlaWdodCAtIHNhYS0+d2luLnkpIDogaGVpZ2h0LCAxMDI0LCA3NjgpOwotCWlmIChzYWEtPndpbi54IDwgMCkKLQkJY2xpcF9kcmF3X3JlY3RhbmdsZShjbGlwbWFwLCAwLCAwLCAtc2FhLT53aW4ueCwgNzY4KTsKLQlpZiAoc2FhLT53aW4ueSA8IDApCi0JCWNsaXBfZHJhd19yZWN0YW5nbGUoY2xpcG1hcCwgMCwgMCwgMTAyNCwgLXNhYS0+d2luLnkpOwotfQotCi1zdGF0aWMgbG9uZyBzYWFfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsCi0JCSAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmdsKQotewotCXN0cnVjdCBzYWE3MTQ2ICpzYWEgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jdm9pZCBfX3VzZXIgKmFyZyA9ICh2b2lkIF9fdXNlciAqKWFyZ2w7Ci0KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgVklESU9DR0NBUDoKLQkJewotCQkJc3RydWN0IHZpZGVvX2NhcGFiaWxpdHkgYjsKLQkJCW1lbXNldCgmYiwgMCwgc2l6ZW9mKGIpKTsKLQkJCXN0cmNweShiLm5hbWUsIHNhYS0+dmlkZW9fZGV2Lm5hbWUpOwotCQkJYi50eXBlID0gVklEX1RZUEVfQ0FQVFVSRSB8IFZJRF9UWVBFX09WRVJMQVkgfAotCQkJCVZJRF9UWVBFX0NMSVBQSU5HIHwgVklEX1RZUEVfRlJBTUVSQU0gfAotCQkJCVZJRF9UWVBFX1NDQUxFUzsKLQkJCWIuY2hhbm5lbHMgPSAxOwotCQkJYi5hdWRpb3MgPSAxOwotCQkJYi5tYXh3aWR0aCA9IDc2ODsKLQkJCWIubWF4aGVpZ2h0ID0gNTc2OwotCQkJYi5taW53aWR0aCA9IDMyOwotCQkJYi5taW5oZWlnaHQgPSAzMjsKLQkJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmYiwgc2l6ZW9mKGIpKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCXJldHVybiAwOwotCQl9Ci0JY2FzZSBWSURJT0NHUElDVDoKLQkJewotCQkJc3RydWN0IHZpZGVvX3BpY3R1cmUgcCA9IHNhYS0+cGljdHVyZTsKLQkJCWlmIChzYWEtPndpbi5kZXB0aCA9PSA4KQotCQkJCXAucGFsZXR0ZSA9IFZJREVPX1BBTEVUVEVfSEkyNDA7Ci0JCQlpZiAoc2FhLT53aW4uZGVwdGggPT0gMTUpCi0JCQkJcC5wYWxldHRlID0gVklERU9fUEFMRVRURV9SR0I1NTU7Ci0JCQlpZiAoc2FhLT53aW4uZGVwdGggPT0gMTYpCi0JCQkJcC5wYWxldHRlID0gVklERU9fUEFMRVRURV9SR0I1NjU7Ci0JCQlpZiAoc2FhLT53aW4uZGVwdGggPT0gMjQpCi0JCQkJcC5wYWxldHRlID0gVklERU9fUEFMRVRURV9SR0IyNDsKLQkJCWlmIChzYWEtPndpbi5kZXB0aCA9PSAzMikKLQkJCQlwLnBhbGV0dGUgPSBWSURFT19QQUxFVFRFX1JHQjMyOwotCQkJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZwLCBzaXplb2YocCkpKQotCQkJCXJldHVybiAtRUZBVUxUOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQljYXNlIFZJRElPQ1NQSUNUOgotCQl7Ci0JCQlzdHJ1Y3QgdmlkZW9fcGljdHVyZSBwOwotCQkJdTMyIGZvcm1hdDsKLQkJCWlmIChjb3B5X2Zyb21fdXNlcigmcCwgYXJnLCBzaXplb2YocCkpKQotCQkJCXJldHVybiAtRUZBVUxUOwotCQkJaWYgKHAucGFsZXR0ZSA8IEFSUkFZX1NJWkUocGFsZXR0ZTJmbXQpKSB7Ci0JCQkJZm9ybWF0ID0gcGFsZXR0ZTJmbXRbcC5wYWxldHRlXTsKLQkJCQlzYWEtPndpbi5jb2xvcl9mbXQgPSBmb3JtYXQ7Ci0JCQkJc2Fhd3JpdGUoZm9ybWF0IHwgMHg2MCwKLQkJCQkJU0FBNzE0Nl9DTElQX0ZPUk1BVF9DVFJMKTsKLQkJCX0KLQkJCXNhYXdyaXRlKCgocC5icmlnaHRuZXNzICYgMHhmZjAwKSA8PCAxNikgfAotCQkJCSgocC5jb250cmFzdCAmIDB4ZmUwMCkgPDwgNykgfAotCQkJCSgocC5jb2xvdXIgJiAweGZlMDApID4+IDkpLCBTQUE3MTQ2X0JDU19DVFJMKTsKLQkJCXNhYS0+cGljdHVyZSA9IHA7Ci0JCQkvKiB1cGxvYWQgY2hhbmdlZCByZWdpc3RlcnMgKi8KLQkJCXNhYXdyaXRlKCgoU0FBNzE0Nl9NQzJfVVBMRF9IUFNfSCB8Ci0JCQkJU0FBNzE0Nl9NQzJfVVBMRF9IUFNfVikgPDwgMTYpIHwKLQkJCQlTQUE3MTQ2X01DMl9VUExEX0hQU19IIHwKLQkJCQlTQUE3MTQ2X01DMl9VUExEX0hQU19WLCBTQUE3MTQ2X01DMik7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCWNhc2UgVklESU9DU1dJTjoKLQkJewotCQkJc3RydWN0IHZpZGVvX3dpbmRvdyB2dzsKLQkJCXN0cnVjdCB2aWRlb19jbGlwICp2Y3AgPSBOVUxMOwotCi0JCQlpZiAoY29weV9mcm9tX3VzZXIoJnZ3LCBhcmcsIHNpemVvZih2dykpKQotCQkJCXJldHVybiAtRUZBVUxUOwotCi0JCQkvKiBzdG9wIGNhcHR1cmUgKi8KLQkJCWlmICh2dy5mbGFncyB8fCB2dy53aWR0aCA8IDE2IHx8IHZ3LmhlaWdodCA8IDE2KSB7Ci0JCQkJc2Fhd3JpdGUoKFNBQTcxNDZfTUMxX1RSX0VfMSA8PCAxNiksCi0JCQkJCVNBQTcxNDZfTUMxKTsKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KLQkJCS8qIDMyLWJpdCBhbGlnbiBzdGFydCBhbmQgYWRqdXN0IHdpZHRoICovCi0JCQlpZiAoc2FhLT53aW4uYnBwIDwgNCkgewotCQkJCWludCBpID0gdncueDsKLQkJCQl2dy54ID0gKHZ3LnggKyAzKSAmIH4zOwotCQkJCWkgPSB2dy54IC0gaTsKLQkJCQl2dy53aWR0aCAtPSBpOwotCQkJfQotCQkJc2FhLT53aW4ueCA9IHZ3Lng7Ci0JCQlzYWEtPndpbi55ID0gdncueTsKLQkJCXNhYS0+d2luLndpZHRoID0gdncud2lkdGg7Ci0JCQlpZiAoc2FhLT53aW4ud2lkdGggPiA3NjgpCi0JCQkJc2FhLT53aW4ud2lkdGggPSA3Njg7Ci0JCQlzYWEtPndpbi5oZWlnaHQgPSB2dy5oZWlnaHQ7Ci0JCQlpZiAoQ3VycmVudE1vZGUgPT0gVklERU9fTU9ERV9OVFNDKSB7Ci0JCQkJaWYgKHNhYS0+d2luLmhlaWdodCA+IDQ4MCkKLQkJCQkJc2FhLT53aW4uaGVpZ2h0ID0gNDgwOwotCQkJfSBlbHNlIHsKLQkJCQlpZiAoc2FhLT53aW4uaGVpZ2h0ID4gNTc2KQotCQkJCQlzYWEtPndpbi5oZWlnaHQgPSA1NzY7Ci0JCQl9Ci0KLQkJCS8qIHN0b3AgY2FwdHVyZSAqLwotCQkJc2Fhd3JpdGUoKFNBQTcxNDZfTUMxX1RSX0VfMSA8PCAxNiksIFNBQTcxNDZfTUMxKTsKLQkJCXNhYTcxNDZfc2V0X3dpbnNpemUoc2FhKTsKLQotCQkJLyoKLQkJCSAqICAgIERvIGFueSBjbGlwcy4KLQkJCSAqLwotCQkJaWYgKHZ3LmNsaXBjb3VudCA8IDApIHsKLQkJCQlpZiAoY29weV9mcm9tX3VzZXIoc2FhLT5kbWF2aWQyLCB2dy5jbGlwcywKLQkJCQkJCVZJREVPX0NMSVBNQVBfU0laRSkpCi0JCQkJCXJldHVybiAtRUZBVUxUOwotCQkJfSBlbHNlIGlmICh2dy5jbGlwY291bnQgPiAxNjM4NCkgewotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJfSBlbHNlIGlmICh2dy5jbGlwY291bnQgPiAwKSB7Ci0JCQkJdmNwID0gdm1hbGxvYyhzaXplb2Yoc3RydWN0IHZpZGVvX2NsaXApICoKLQkJCQkJdncuY2xpcGNvdW50KTsKLQkJCQlpZiAodmNwID09IE5VTEwpCi0JCQkJCXJldHVybiAtRU5PTUVNOwotCQkJCWlmIChjb3B5X2Zyb21fdXNlcih2Y3AsIHZ3LmNsaXBzLAotCQkJCQkJc2l6ZW9mKHN0cnVjdCB2aWRlb19jbGlwKSAqCi0JCQkJCQl2dy5jbGlwY291bnQpKSB7Ci0JCQkJCXZmcmVlKHZjcCk7Ci0JCQkJCXJldHVybiAtRUZBVUxUOwotCQkJCX0KLQkJCX0gZWxzZQkvKiBub3RoaW5nIGNsaXBwZWQgKi8KLQkJCQltZW1zZXQoc2FhLT5kbWF2aWQyLCAwLCBWSURFT19DTElQTUFQX1NJWkUpOwotCi0JCQltYWtlX2NsaXBfdGFiKHNhYSwgdmNwLCB2dy5jbGlwY291bnQpOwotCQkJaWYgKHZ3LmNsaXBjb3VudCA+IDApCi0JCQkJdmZyZWUodmNwKTsKLQotCQkJLyogc3RhcnQgY2FwdHVyZSAmIGNsaXAgZG1hIGlmIHdlIGhhdmUgYW4gYWRkcmVzcyAqLwotCQkJaWYgKChzYWEtPmNhcCAmIDMpICYmIHNhYS0+d2luLnZpZGFkciAhPSAwKQotCQkJCXNhYXdyaXRlKCgoU0FBNzE0Nl9NQzFfVFJfRV8xIHwKLQkJCQkJU0FBNzE0Nl9NQzFfVFJfRV8yKSA8PCAxNikgfCAweGZmZmYsCi0JCQkJCVNBQTcxNDZfTUMxKTsKLQkJCXJldHVybiAwOwotCQl9Ci0JY2FzZSBWSURJT0NHV0lOOgotCQl7Ci0JCQlzdHJ1Y3QgdmlkZW9fd2luZG93IHZ3OwotCQkJbWVtc2V0KCZ2dywgMCwgc2l6ZW9mKHZ3KSk7Ci0JCQl2dy54ID0gc2FhLT53aW4ueDsKLQkJCXZ3LnkgPSBzYWEtPndpbi55OwotCQkJdncud2lkdGggPSBzYWEtPndpbi53aWR0aDsKLQkJCXZ3LmhlaWdodCA9IHNhYS0+d2luLmhlaWdodDsKLQkJCXZ3LmNocm9tYWtleSA9IDA7Ci0JCQl2dy5mbGFncyA9IDA7Ci0JCQlpZiAoY29weV90b191c2VyKGFyZywgJnZ3LCBzaXplb2YodncpKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCXJldHVybiAwOwotCQl9Ci0JY2FzZSBWSURJT0NDQVBUVVJFOgotCQl7Ci0JCQlpbnQgdjsKLQkJCWlmIChjb3B5X2Zyb21fdXNlcigmdiwgYXJnLCBzaXplb2YodikpKQotCQkJCXJldHVybiAtRUZBVUxUOwotCQkJaWYgKHYgPT0gMCkgewotCQkJCXNhYS0+Y2FwICY9IH4xOwotCQkJCXNhYXdyaXRlKChTQUE3MTQ2X01DMV9UUl9FXzEgPDwgMTYpLAotCQkJCQlTQUE3MTQ2X01DMSk7Ci0JCQl9IGVsc2UgewotCQkJCWlmIChzYWEtPndpbi52aWRhZHIgPT0gMCB8fCBzYWEtPndpbi53aWR0aCA9PSAwCi0JCQkJCQl8fCBzYWEtPndpbi5oZWlnaHQgPT0gMCkKLQkJCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQkJc2FhLT5jYXAgfD0gMTsKLQkJCQlzYWF3cml0ZSgoU0FBNzE0Nl9NQzFfVFJfRV8xIDw8IDE2KSB8IDB4ZmZmZiwKLQkJCQkJU0FBNzE0Nl9NQzEpOwotCQkJfQotCQkJcmV0dXJuIDA7Ci0JCX0KLQljYXNlIFZJRElPQ0dGQlVGOgotCQl7Ci0JCQlzdHJ1Y3QgdmlkZW9fYnVmZmVyIHY7Ci0JCQltZW1zZXQoJnYsIDAsIHNpemVvZih2KSk7Ci0JCQl2LmJhc2UgPSAodm9pZCAqKXNhYS0+d2luLnZpZGFkcjsKLQkJCXYuaGVpZ2h0ID0gc2FhLT53aW4uc2hlaWdodDsKLQkJCXYud2lkdGggPSBzYWEtPndpbi5zd2lkdGg7Ci0JCQl2LmRlcHRoID0gc2FhLT53aW4uZGVwdGg7Ci0JCQl2LmJ5dGVzcGVybGluZSA9IHNhYS0+d2luLmJwbDsKLQkJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmdiwgc2l6ZW9mKHYpKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCXJldHVybiAwOwotCi0JCX0KLQljYXNlIFZJRElPQ1NGQlVGOgotCQl7Ci0JCQlzdHJ1Y3QgdmlkZW9fYnVmZmVyIHY7Ci0JCQlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCi0JCQkJcmV0dXJuIC1FUEVSTTsKLQkJCWlmIChjb3B5X2Zyb21fdXNlcigmdiwgYXJnLCBzaXplb2YodikpKQotCQkJCXJldHVybiAtRUZBVUxUOwotCQkJaWYgKHYuZGVwdGggIT0gOCAmJiB2LmRlcHRoICE9IDE1ICYmIHYuZGVwdGggIT0gMTYgJiYKLQkJCSAgICB2LmRlcHRoICE9IDI0ICYmIHYuZGVwdGggIT0gMzIgJiYgdi53aWR0aCA+IDE2ICYmCi0JCQkgICAgdi5oZWlnaHQgPiAxNiAmJiB2LmJ5dGVzcGVybGluZSA+IDE2KQotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJaWYgKHYuYmFzZSkKLQkJCQlzYWEtPndpbi52aWRhZHIgPSAodW5zaWduZWQgbG9uZyl2LmJhc2U7Ci0JCQlzYWEtPndpbi5zaGVpZ2h0ID0gdi5oZWlnaHQ7Ci0JCQlzYWEtPndpbi5zd2lkdGggPSB2LndpZHRoOwotCQkJc2FhLT53aW4uYnBwID0gKCh2LmRlcHRoICsgNykgJiAweDM4KSAvIDg7Ci0JCQlzYWEtPndpbi5kZXB0aCA9IHYuZGVwdGg7Ci0JCQlzYWEtPndpbi5icGwgPSB2LmJ5dGVzcGVybGluZTsKLQotCQkJREVCVUcocHJpbnRrKCJEaXNwbGF5IGF0ICVwIGlzICVkIGJ5ICVkLCBieXRlZGVwdGggJWQsICIKLQkJCQkJImJwbCAlZFxuIiwgdi5iYXNlLCB2LndpZHRoLCB2LmhlaWdodCwKLQkJCQkJc2FhLT53aW4uYnBwLCBzYWEtPndpbi5icGwpKTsKLQkJCXNhYTcxNDZfc2V0X3dpbnNpemUoc2FhKTsKLQkJCXJldHVybiAwOwotCQl9Ci0JY2FzZSBWSURJT0NLRVk6Ci0JCXsKLQkJCS8qIFdpbGwgYmUgaGFuZGxlZCBoaWdoZXIgdXAgLi4gKi8KLQkJCXJldHVybiAwOwotCQl9Ci0KLQljYXNlIFZJRElPQ0dBVURJTzoKLQkJewotCQkJc3RydWN0IHZpZGVvX2F1ZGlvIHY7Ci0JCQltZW1zZXQoJnYsIDAsIHNpemVvZih2KSk7Ci0JCQl2ID0gc2FhLT5hdWRpb19kZXY7Ci0JCQl2LmZsYWdzICY9IH4oVklERU9fQVVESU9fTVVURSB8IFZJREVPX0FVRElPX01VVEFCTEUpOwotCQkJdi5mbGFncyB8PSBWSURFT19BVURJT19NVVRBQkxFIHwgVklERU9fQVVESU9fVk9MVU1FOwotCQkJc3RyY3B5KHYubmFtZSwgIk1QRUciKTsKLQkJCXYubW9kZSA9IFZJREVPX1NPVU5EX1NURVJFTzsKLQkJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmdiwgc2l6ZW9mKHYpKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCXJldHVybiAwOwotCQl9Ci0JY2FzZSBWSURJT0NTQVVESU86Ci0JCXsKLQkJCXN0cnVjdCB2aWRlb19hdWRpbyB2OwotCQkJaW50IGk7Ci0JCQlpZiAoY29weV9mcm9tX3VzZXIoJnYsIGFyZywgc2l6ZW9mKHYpKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCWkgPSAofih2LnZvbHVtZSA+PiA4KSkgJiAweGZmOwotCQkJaWYgKCFIYXZlQ1M0MzQxKSB7Ci0JCQkJaWYgKHYuZmxhZ3MgJiBWSURFT19BVURJT19NVVRFKQotCQkJCQlkZWJpd3JpdGUoc2FhLCBkZWJOb3JtYWwsCi0JCQkJCQlJQk1fTVAyX0ZSTlRfQVRURU4sIDB4ZmZmZiwgMik7Ci0JCQkJaWYgKCEodi5mbGFncyAmIFZJREVPX0FVRElPX01VVEUpKQotCQkJCQlkZWJpd3JpdGUoc2FhLCBkZWJOb3JtYWwsCi0JCQkJCQlJQk1fTVAyX0ZSTlRfQVRURU4sIDB4MDAwMCwgMik7Ci0JCQkJaWYgKHYuZmxhZ3MgJiBWSURFT19BVURJT19WT0xVTUUpCi0JCQkJCWRlYml3cml0ZShzYWEsIGRlYk5vcm1hbCwKLQkJCQkJCUlCTV9NUDJfRlJOVF9BVFRFTiwKLQkJCQkJCShpIDw8IDgpIHwgaSwgMik7Ci0JCQl9IGVsc2UgewotCQkJCWlmICh2LmZsYWdzICYgVklERU9fQVVESU9fTVVURSkKLQkJCQkJY3M0MzQxX3NldGxldmVsKHNhYSwgMHhmZiwgMHhmZik7Ci0JCQkJaWYgKCEodi5mbGFncyAmIFZJREVPX0FVRElPX01VVEUpKQotCQkJCQljczQzNDFfc2V0bGV2ZWwoc2FhLCAwLCAwKTsKLQkJCQlpZiAodi5mbGFncyAmIFZJREVPX0FVRElPX1ZPTFVNRSkKLQkJCQkJY3M0MzQxX3NldGxldmVsKHNhYSwgaSwgaSk7Ci0JCQl9Ci0JCQlzYWEtPmF1ZGlvX2RldiA9IHY7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCi0JY2FzZSBWSURJT0NHVU5JVDoKLQkJewotCQkJc3RydWN0IHZpZGVvX3VuaXQgdnU7Ci0JCQltZW1zZXQoJnZ1LCAwLCBzaXplb2YodnUpKTsKLQkJCXZ1LnZpZGVvID0gc2FhLT52aWRlb19kZXYubWlub3I7Ci0JCQl2dS52YmkgPSBWSURFT19OT19VTklUOwotCQkJdnUucmFkaW8gPSBWSURFT19OT19VTklUOwotCQkJdnUuYXVkaW8gPSBWSURFT19OT19VTklUOwotCQkJdnUudGVsZXRleHQgPSBWSURFT19OT19VTklUOwotCQkJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZ2dSwgc2l6ZW9mKHZ1KSkpCi0JCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCWNhc2UgVklESU9DU1BMQVlNT0RFOgotCQl7Ci0JCQlzdHJ1Y3QgdmlkZW9fcGxheV9tb2RlIHBtb2RlOwotCQkJaWYgKGNvcHlfZnJvbV91c2VyKCh2b2lkICopJnBtb2RlLCBhcmcsCi0JCQkJCXNpemVvZihzdHJ1Y3QgdmlkZW9fcGxheV9tb2RlKSkpCi0JCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQlzd2l0Y2ggKHBtb2RlLm1vZGUpIHsKLQkJCWNhc2UgVklEX1BMQVlfVklEX09VVF9NT0RFOgotCQkJCWlmIChwbW9kZS5wMSAhPSBWSURFT19NT0RFX05UU0MgJiYKLQkJCQkJCXBtb2RlLnAxICE9IFZJREVPX01PREVfUEFMKQotCQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCQlzZXRfb3V0X2Zvcm1hdChzYWEsIHBtb2RlLnAxKTsKLQkJCQlyZXR1cm4gMDsKLQkJCWNhc2UgVklEX1BMQVlfR0VOTE9DSzoKLQkJCQlkZWJpd3JpdGUoc2FhLCBkZWJOb3JtYWwsIFhJTElOWF9DVEwwLAotCQkJCQlwbW9kZS5wMSA/IDB4ODAwMCA6IDB4ODA4MCwgMik7Ci0JCQkJaWYgKE5ld0NhcmQpCi0JCQkJCXNldF9nZW5sb2NrX29mZnNldChzYWEsIHBtb2RlLnAyKTsKLQkJCQlyZXR1cm4gMDsKLQkJCWNhc2UgVklEX1BMQVlfTk9STUFMOgotCQkJCWRlYml3cml0ZShzYWEsIGRlYk5vcm1hbCwKLQkJCQkJSUJNX01QMl9DSElQX0NPTlRST0wsIENoaXBDb250cm9sLCAyKTsKLQkJCQlpYm1fc2VuZF9jb21tYW5kKHNhYSwgSUJNX01QMl9QTEFZLCAwLCAwKTsKLQkJCQlzYWEtPnBsYXltb2RlID0gcG1vZGUubW9kZTsKLQkJCQlyZXR1cm4gMDsKLQkJCWNhc2UgVklEX1BMQVlfUEFVU0U6Ci0JCQkJLyogSUJNIHJlbW92ZWQgdGhlIFBBVVNFIGNvbW1hbmQgKi8KLQkJCQkvKiB0aGV5IHNheSB1c2UgU0lOR0xFX0ZSQU1FIG5vdyAqLwotCQkJY2FzZSBWSURfUExBWV9TSU5HTEVfRlJBTUU6Ci0JCQkJaWJtX3NlbmRfY29tbWFuZChzYWEsIElCTV9NUDJfU0lOR0xFX0ZSQU1FLDAsMCk7Ci0JCQkJaWYgKHNhYS0+cGxheW1vZGUgPT0gcG1vZGUubW9kZSkgewotCQkJCQlkZWJpd3JpdGUoc2FhLCBkZWJOb3JtYWwsCi0JCQkJCQlJQk1fTVAyX0NISVBfQ09OVFJPTCwKLQkJCQkJCUNoaXBDb250cm9sLCAyKTsKLQkJCQl9Ci0JCQkJc2FhLT5wbGF5bW9kZSA9IHBtb2RlLm1vZGU7Ci0JCQkJcmV0dXJuIDA7Ci0JCQljYXNlIFZJRF9QTEFZX0ZBU1RfRk9SV0FSRDoKLQkJCQlpYm1fc2VuZF9jb21tYW5kKHNhYSwgSUJNX01QMl9GQVNUX0ZPUldBUkQsMCwwKTsKLQkJCQlzYWEtPnBsYXltb2RlID0gcG1vZGUubW9kZTsKLQkJCQlyZXR1cm4gMDsKLQkJCWNhc2UgVklEX1BMQVlfU0xPV19NT1RJT046Ci0JCQkJaWJtX3NlbmRfY29tbWFuZChzYWEsIElCTV9NUDJfU0xPV19NT1RJT04sCi0JCQkJCXBtb2RlLnAxLCAwKTsKLQkJCQlzYWEtPnBsYXltb2RlID0gcG1vZGUubW9kZTsKLQkJCQlyZXR1cm4gMDsKLQkJCWNhc2UgVklEX1BMQVlfSU1NRURJQVRFX05PUk1BTDoKLQkJCQkvKiBlbnN1cmUgdHJhbnNmZXJzIHJlc3VtZSAqLwotCQkJCWRlYml3cml0ZShzYWEsIGRlYk5vcm1hbCwKLQkJCQkJSUJNX01QMl9DSElQX0NPTlRST0wsIENoaXBDb250cm9sLCAyKTsKLQkJCQlpYm1fc2VuZF9jb21tYW5kKHNhYSwgSUJNX01QMl9JTUVEX05PUk1fUExBWSwKLQkJCQkJMCwgMCk7Ci0JCQkJc2FhLT5wbGF5bW9kZSA9IFZJRF9QTEFZX05PUk1BTDsKLQkJCQlyZXR1cm4gMDsKLQkJCWNhc2UgVklEX1BMQVlfU1dJVENIX0NIQU5ORUxTOgotCQkJCXNhYS0+YXVkaGVhZCA9IHNhYS0+YXVkdGFpbCA9IDA7Ci0JCQkJc2FhLT52aWRoZWFkID0gc2FhLT52aWR0YWlsID0gMDsKLQkJCQlpYm1fc2VuZF9jb21tYW5kKHNhYSwgSUJNX01QMl9GUkVFWkVfRlJBTUUsMCwxKTsKLQkJCQlpYm1fc2VuZF9jb21tYW5kKHNhYSwgSUJNX01QMl9SRVNFVF9BVURfUkFURSwKLQkJCQkJMCwgMSk7Ci0JCQkJZGViaXdyaXRlKHNhYSwgZGViTm9ybWFsLCBJQk1fTVAyX0NISVBfQ09OVFJPTCwKLQkJCQkJMCwgMik7Ci0JCQkJaWJtX3NlbmRfY29tbWFuZChzYWEsIElCTV9NUDJfQ0hBTk5FTF9TV0lUQ0gsCi0JCQkJCTAsIDEpOwotCQkJCWRlYml3cml0ZShzYWEsIGRlYk5vcm1hbCwgSUJNX01QMl9DSElQX0NPTlRST0wsCi0JCQkJCUNoaXBDb250cm9sLCAyKTsKLQkJCQlpYm1fc2VuZF9jb21tYW5kKHNhYSwgSUJNX01QMl9QTEFZLCAwLCAwKTsKLQkJCQlzYWEtPnBsYXltb2RlID0gVklEX1BMQVlfTk9STUFMOwotCQkJCXJldHVybiAwOwotCQkJY2FzZSBWSURfUExBWV9GUkVFWkVfRlJBTUU6Ci0JCQkJaWJtX3NlbmRfY29tbWFuZChzYWEsIElCTV9NUDJfRlJFRVpFX0ZSQU1FLDAsMCk7Ci0JCQkJc2FhLT5wbGF5bW9kZSA9IHBtb2RlLm1vZGU7Ci0JCQkJcmV0dXJuIDA7Ci0JCQljYXNlIFZJRF9QTEFZX1NUSUxMX01PREU6Ci0JCQkJaWJtX3NlbmRfY29tbWFuZChzYWEsIElCTV9NUDJfU0VUX1NUSUxMX01PREUsCi0JCQkJCTAsIDApOwotCQkJCXNhYS0+cGxheW1vZGUgPSBwbW9kZS5tb2RlOwotCQkJCXJldHVybiAwOwotCQkJY2FzZSBWSURfUExBWV9NQVNURVJfTU9ERToKLQkJCQlpZiAocG1vZGUucDEgPT0gVklEX1BMQVlfTUFTVEVSX05PTkUpCi0JCQkJCXNhYS0+Ym9hcmRjZmdbMV0gPSAweDEzOwotCQkJCWVsc2UgaWYgKHBtb2RlLnAxID09IFZJRF9QTEFZX01BU1RFUl9WSURFTykKLQkJCQkJc2FhLT5ib2FyZGNmZ1sxXSA9IDB4MjM7Ci0JCQkJZWxzZSBpZiAocG1vZGUucDEgPT0gVklEX1BMQVlfTUFTVEVSX0FVRElPKQotCQkJCQlzYWEtPmJvYXJkY2ZnWzFdID0gMHg0MzsKLQkJCQllbHNlCi0JCQkJCXJldHVybiAtRUlOVkFMOwotCQkJCWRlYml3cml0ZShzYWEsIGRlYk5vcm1hbCwKLQkJCQkJICBJQk1fTVAyX0NISVBfQ09OVFJPTCwgQ2hpcENvbnRyb2wsIDIpOwotCQkJCXJldHVybiAwOwotCQkJY2FzZSBWSURfUExBWV9BQ1RJVkVfU0NBTkxJTkVTOgotCQkJCWlmIChDdXJyZW50TW9kZSA9PSBWSURFT19NT0RFX1BBTCkgewotCQkJCQlpZiAocG1vZGUucDEgPCAxIHx8IHBtb2RlLnAyID4gNjI1KQotCQkJCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQkJCXNhYS0+Ym9hcmRjZmdbNV0gPSBwbW9kZS5wMTsKLQkJCQkJc2FhLT5ib2FyZGNmZ1s1NV0gPSAocG1vZGUucDEgKwotCQkJCQkJKHBtb2RlLnAyIC8gMikgLSAxKSAmIDB4ZmY7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJaWYgKHBtb2RlLnAxIDwgNCB8fCBwbW9kZS5wMiA+IDUyNSkKLQkJCQkJCXJldHVybiAtRUlOVkFMOwotCQkJCQlzYWEtPmJvYXJkY2ZnWzRdID0gcG1vZGUucDE7Ci0JCQkJCXNhYS0+Ym9hcmRjZmdbNTRdID0gKHBtb2RlLnAxICsKLQkJCQkJCShwbW9kZS5wMiAvIDIpIC0gNCkgJiAweGZmOwotCQkJCX0KLQkJCQlzZXRfb3V0X2Zvcm1hdChzYWEsIEN1cnJlbnRNb2RlKTsKLQkJCWNhc2UgVklEX1BMQVlfUkVTRVQ6Ci0JCQkJcmV0dXJuIGRvX2libV9yZXNldChzYWEpOwotCQkJY2FzZSBWSURfUExBWV9FTkRfTUFSSzoKLQkJCQlpZiAoc2FhLT5lbmRtYXJrdGFpbCA8IHNhYS0+ZW5kbWFya2hlYWQpIHsKLQkJCQkJaWYgKHNhYS0+ZW5kbWFya2hlYWQgLQotCQkJCQkJCXNhYS0+ZW5kbWFya3RhaWwgPCAyKQotCQkJCQkJcmV0dXJuIC1FTk9TUEM7Ci0JCQkJfSBlbHNlIGlmIChzYWEtPmVuZG1hcmtoZWFkIDw9c2FhLT5lbmRtYXJrdGFpbCl7Ci0JCQkJCWlmIChzYWEtPmVuZG1hcmt0YWlsIC0gc2FhLT5lbmRtYXJraGVhZAotCQkJCQkJCT4gKE1BWF9NQVJLUyAtIDIpKQotCQkJCQkJcmV0dXJuIC1FTk9TUEM7Ci0JCQkJfSBlbHNlCi0JCQkJCXJldHVybiAtRU5PU1BDOwotCQkJCXNhYS0+ZW5kbWFya1tzYWEtPmVuZG1hcmt0YWlsXSA9IHNhYS0+YXVkdGFpbDsKLQkJCQlzYWEtPmVuZG1hcmt0YWlsKys7Ci0JCQkJaWYgKHNhYS0+ZW5kbWFya3RhaWwgPj0gTUFYX01BUktTKQotCQkJCQlzYWEtPmVuZG1hcmt0YWlsID0gMDsKLQkJCX0KLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JY2FzZSBWSURJT0NTV1JJVEVNT0RFOgotCQl7Ci0JCQlpbnQgbW9kZTsKLQkJCWlmIChjb3B5X2Zyb21fdXNlcigodm9pZCAqKSZtb2RlLCBhcmcsIHNpemVvZihpbnQpKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCWlmIChtb2RlID09IFZJRF9XUklURV9NUEVHX0FVRCB8fAotCQkJCQltb2RlID09IFZJRF9XUklURV9NUEVHX1ZJRCB8fAotCQkJCQltb2RlID09IFZJRF9XUklURV9DQyB8fAotCQkJCQltb2RlID09IFZJRF9XUklURV9UVFggfHwKLQkJCQkJbW9kZSA9PSBWSURfV1JJVEVfT1NEKSB7Ci0JCQkJc2FhLT53cml0ZW1vZGUgPSBtb2RlOwotCQkJCXJldHVybiAwOwotCQkJfQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQljYXNlIFZJRElPQ1NNSUNST0NPREU6Ci0JCXsKLQkJCXN0cnVjdCB2aWRlb19jb2RlIHVjb2RlOwotCQkJX191OCAqdWRhdGE7Ci0JCQlpbnQgaTsKLQkJCWlmIChjb3B5X2Zyb21fdXNlcigmdWNvZGUsIGFyZywgc2l6ZW9mKHVjb2RlKSkpCi0JCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQlpZiAodWNvZGUuZGF0YXNpemUgPiA2NTUzNiB8fCB1Y29kZS5kYXRhc2l6ZSA8IDEwMjQgfHwKLQkJCQkJc3RybmNtcCh1Y29kZS5sb2Fkd2hhdCwgImRlYyIsIDMpKQotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJaWYgKCh1ZGF0YSA9IHZtYWxsb2ModWNvZGUuZGF0YXNpemUpKSA9PSBOVUxMKQotCQkJCXJldHVybiAtRU5PTUVNOwotCQkJaWYgKGNvcHlfZnJvbV91c2VyKHVkYXRhLCB1Y29kZS5kYXRhLCB1Y29kZS5kYXRhc2l6ZSkpIHsKLQkJCQl2ZnJlZSh1ZGF0YSk7Ci0JCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQl9Ci0JCQl1Y29kZS5kYXRhID0gdWRhdGE7Ci0JCQlpZiAoIXN0cm5jbXAodWNvZGUubG9hZHdoYXQsICJkZWNvZGVyLmF1ZCIsIDExKSB8fAotCQkJCSFzdHJuY21wKHVjb2RlLmxvYWR3aGF0LCAiZGVjb2Rlci52aWQiLCAxMSkpCi0JCQkJaSA9IGluaXRpYWxpemVfaWJtbXBlZzIoJnVjb2RlKTsKLQkJCWVsc2UKLQkJCQlpID0gaW5pdGlhbGl6ZV9mcGdhKCZ1Y29kZSk7Ci0JCQl2ZnJlZSh1ZGF0YSk7Ci0JCQlpZiAoaSkKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCXJldHVybiAwOwotCi0JCX0KLQljYXNlIFZJRElPQ0dDSEFOOgkvKiB0aGlzIG1ha2VzIHhhd3R2IGhhcHB5ICovCi0JCXsKLQkJCXN0cnVjdCB2aWRlb19jaGFubmVsIHY7Ci0JCQlpZiAoY29weV9mcm9tX3VzZXIoJnYsIGFyZywgc2l6ZW9mKHYpKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCXYuZmxhZ3MgPSBWSURFT19WQ19BVURJTzsKLQkJCXYudHVuZXJzID0gMDsKLQkJCXYudHlwZSA9IFZJRF9UWVBFX01QRUdfREVDT0RFUjsKLQkJCXYubm9ybSA9IEN1cnJlbnRNb2RlOwotCQkJc3RyY3B5KHYubmFtZSwgIk1QRUcyIik7Ci0JCQlpZiAoY29weV90b191c2VyKGFyZywgJnYsIHNpemVvZih2KSkpCi0JCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCWNhc2UgVklESU9DU0NIQU46CS8qIHRoaXMgbWFrZXMgeGF3dHYgaGFwcHkgKi8KLQkJewotCQkJc3RydWN0IHZpZGVvX2NoYW5uZWwgdjsKLQkJCWlmIChjb3B5X2Zyb21fdXNlcigmdiwgYXJnLCBzaXplb2YodikpKQotCQkJCXJldHVybiAtRUZBVUxUOwotCQkJLyogZG8gbm90aGluZyAqLwotCQkJcmV0dXJuIDA7Ci0JCX0KLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzYWFfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCi17Ci0Jc3RydWN0IHNhYTcxNDYgKnNhYSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlwcmludGsoS0VSTl9ERUJVRyAic3RyYWRpcyVkOiBzYWFfbW1hcCBjYWxsZWRcbiIsIHNhYS0+bnIpOwotCXJldHVybiAtRUlOVkFMOwotfQotCi1zdGF0aWMgc3NpemVfdCBzYWFfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKiBidWYsCi0Jc2l6ZV90IGNvdW50LCBsb2ZmX3QgKiBwcG9zKQotewotCXJldHVybiAtRUlOVkFMOwotfQotCi1zdGF0aWMgc3NpemVfdCBzYWFfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICogYnVmLAotCXNpemVfdCBjb3VudCwgbG9mZl90ICogcHBvcykKLXsKLQlzdHJ1Y3Qgc2FhNzE0NiAqc2FhID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXVuc2lnbmVkIGxvbmcgdG9kbyA9IGNvdW50OwotCWludCBibG9ja3NpemUsIHNwbGl0OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQl3aGlsZSAodG9kbyA+IDApIHsKLQkJaWYgKHNhYS0+d3JpdGVtb2RlID09IFZJRF9XUklURV9NUEVHX0FVRCkgewotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnNhYS0+bG9jaywgZmxhZ3MpOwotCQkJaWYgKHNhYS0+YXVkaGVhZCA8PSBzYWEtPmF1ZHRhaWwpCi0JCQkJYmxvY2tzaXplID0gNjU1MzYgLQotCQkJCQkoc2FhLT5hdWR0YWlsIC0gc2FhLT5hdWRoZWFkKTsKLQkJCWVsc2UKLQkJCQlibG9ja3NpemUgPSBzYWEtPmF1ZGhlYWQgLSBzYWEtPmF1ZHRhaWw7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYWEtPmxvY2ssIGZsYWdzKTsKLQkJCWlmIChibG9ja3NpemUgPCAxNjM4NCkgewotCQkJCXNhYXdyaXRlKFNBQTcxNDZfUFNSX0RFQklfUyB8Ci0JCQkJCVNBQTcxNDZfUFNSX1BJTjEsIFNBQTcxNDZfSUVSKTsKLQkJCQlzYWF3cml0ZShTQUE3MTQ2X1BTUl9QSU4xLCBTQUE3MTQ2X1BTUik7Ci0JCQkJLyogd2FpdCBmb3IgYnVmZmVyIHNwYWNlIHRvIG9wZW4gKi8KLQkJCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uKCZzYWEtPmF1ZHEpOwotCQkJfQotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnNhYS0+bG9jaywgZmxhZ3MpOwotCQkJaWYgKHNhYS0+YXVkaGVhZCA8PSBzYWEtPmF1ZHRhaWwpIHsKLQkJCQlibG9ja3NpemUgPSA2NTUzNiAtCi0JCQkJCShzYWEtPmF1ZHRhaWwgLSBzYWEtPmF1ZGhlYWQpOwotCQkJCXNwbGl0ID0gNjU1MzYgLSBzYWEtPmF1ZHRhaWw7Ci0JCQl9IGVsc2UgewotCQkJCWJsb2Nrc2l6ZSA9IHNhYS0+YXVkaGVhZCAtIHNhYS0+YXVkdGFpbDsKLQkJCQlzcGxpdCA9IDY1NTM2OwotCQkJfQotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2FhLT5sb2NrLCBmbGFncyk7Ci0JCQlibG9ja3NpemUtLTsKLQkJCWlmIChibG9ja3NpemUgPiB0b2RvKQotCQkJCWJsb2Nrc2l6ZSA9IHRvZG87Ci0JCQkvKiBkb3VibGUgY2hlY2sgdGhhdCB3ZSByZWFsbHkgaGF2ZSBzcGFjZSAqLwotCQkJaWYgKCFibG9ja3NpemUpCi0JCQkJcmV0dXJuIC1FTk9TUEM7Ci0JCQlpZiAoc3BsaXQgPCBibG9ja3NpemUpIHsKLQkJCQlpZiAoY29weV9mcm9tX3VzZXIoc2FhLT5hdWRidWYgKwotCQkJCQkJc2FhLT5hdWR0YWlsLCBidWYsIHNwbGl0KSkKLQkJCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQkJYnVmICs9IHNwbGl0OwotCQkJCXRvZG8gLT0gc3BsaXQ7Ci0JCQkJYmxvY2tzaXplIC09IHNwbGl0OwotCQkJCXNhYS0+YXVkdGFpbCA9IDA7Ci0JCQl9Ci0JCQlpZiAoY29weV9mcm9tX3VzZXIoc2FhLT5hdWRidWYgKyBzYWEtPmF1ZHRhaWwsIGJ1ZiwKLQkJCQkJYmxvY2tzaXplKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCXNhYS0+YXVkdGFpbCArPSBibG9ja3NpemU7Ci0JCQl0b2RvIC09IGJsb2Nrc2l6ZTsKLQkJCWJ1ZiArPSBibG9ja3NpemU7Ci0JCQlzYWEtPmF1ZHRhaWwgJj0gMHhmZmZmOwotCQl9IGVsc2UgaWYgKHNhYS0+d3JpdGVtb2RlID09IFZJRF9XUklURV9NUEVHX1ZJRCkgewotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnNhYS0+bG9jaywgZmxhZ3MpOwotCQkJaWYgKHNhYS0+dmlkaGVhZCA8PSBzYWEtPnZpZHRhaWwpCi0JCQkJYmxvY2tzaXplID0gNTI0Mjg4IC0KLQkJCQkJKHNhYS0+dmlkdGFpbCAtIHNhYS0+dmlkaGVhZCk7Ci0JCQllbHNlCi0JCQkJYmxvY2tzaXplID0gc2FhLT52aWRoZWFkIC0gc2FhLT52aWR0YWlsOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2FhLT5sb2NrLCBmbGFncyk7Ci0JCQlpZiAoYmxvY2tzaXplIDwgNjU1MzYpIHsKLQkJCQlzYWF3cml0ZShTQUE3MTQ2X1BTUl9ERUJJX1MgfAotCQkJCQlTQUE3MTQ2X1BTUl9QSU4xLCBTQUE3MTQ2X0lFUik7Ci0JCQkJc2Fhd3JpdGUoU0FBNzE0Nl9QU1JfUElOMSwgU0FBNzE0Nl9QU1IpOwotCQkJCS8qIHdhaXQgZm9yIGJ1ZmZlciBzcGFjZSB0byBvcGVuICovCi0JCQkJaW50ZXJydXB0aWJsZV9zbGVlcF9vbigmc2FhLT52aWRxKTsKLQkJCX0KLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZzYWEtPmxvY2ssIGZsYWdzKTsKLQkJCWlmIChzYWEtPnZpZGhlYWQgPD0gc2FhLT52aWR0YWlsKSB7Ci0JCQkJYmxvY2tzaXplID0gNTI0Mjg4IC0KLQkJCQkJKHNhYS0+dmlkdGFpbCAtIHNhYS0+dmlkaGVhZCk7Ci0JCQkJc3BsaXQgPSA1MjQyODggLSBzYWEtPnZpZHRhaWw7Ci0JCQl9IGVsc2UgewotCQkJCWJsb2Nrc2l6ZSA9IHNhYS0+dmlkaGVhZCAtIHNhYS0+dmlkdGFpbDsKLQkJCQlzcGxpdCA9IDUyNDI4ODsKLQkJCX0KLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNhYS0+bG9jaywgZmxhZ3MpOwotCQkJYmxvY2tzaXplLS07Ci0JCQlpZiAoYmxvY2tzaXplID4gdG9kbykKLQkJCQlibG9ja3NpemUgPSB0b2RvOwotCQkJLyogZG91YmxlIGNoZWNrIHRoYXQgd2UgcmVhbGx5IGhhdmUgc3BhY2UgKi8KLQkJCWlmICghYmxvY2tzaXplKQotCQkJCXJldHVybiAtRU5PU1BDOwotCQkJaWYgKHNwbGl0IDwgYmxvY2tzaXplKSB7Ci0JCQkJaWYgKGNvcHlfZnJvbV91c2VyKHNhYS0+dmlkYnVmICsKLQkJCQkJCXNhYS0+dmlkdGFpbCwgYnVmLCBzcGxpdCkpCi0JCQkJCXJldHVybiAtRUZBVUxUOwotCQkJCWJ1ZiArPSBzcGxpdDsKLQkJCQl0b2RvIC09IHNwbGl0OwotCQkJCWJsb2Nrc2l6ZSAtPSBzcGxpdDsKLQkJCQlzYWEtPnZpZHRhaWwgPSAwOwotCQkJfQotCQkJaWYgKGNvcHlfZnJvbV91c2VyKHNhYS0+dmlkYnVmICsgc2FhLT52aWR0YWlsLCBidWYsCi0JCQkJCWJsb2Nrc2l6ZSkpCi0JCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQlzYWEtPnZpZHRhaWwgKz0gYmxvY2tzaXplOwotCQkJdG9kbyAtPSBibG9ja3NpemU7Ci0JCQlidWYgKz0gYmxvY2tzaXplOwotCQkJc2FhLT52aWR0YWlsICY9IDB4N2ZmZmY7Ci0JCX0gZWxzZSBpZiAoc2FhLT53cml0ZW1vZGUgPT0gVklEX1dSSVRFX09TRCkgewotCQkJaWYgKGNvdW50ID4gMTMxMDcyKQotCQkJCXJldHVybiAtRU5PU1BDOwotCQkJaWYgKGNvcHlfZnJvbV91c2VyKHNhYS0+b3NkYnVmLCBidWYsIGNvdW50KSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCWJ1ZiArPSBjb3VudDsKLQkJCXNhYS0+b3NkaGVhZCA9IDA7Ci0JCQlzYWEtPm9zZHRhaWwgPSBjb3VudDsKLQkJCWRlYml3cml0ZShzYWEsIGRlYk5vcm1hbCwgSUJNX01QMl9PU0RfQUREUiwgMCwgMik7Ci0JCQlkZWJpd3JpdGUoc2FhLCBkZWJOb3JtYWwsIElCTV9NUDJfT1NEX0xJTktfQUREUiwgMCwgMik7Ci0JCQlkZWJpd3JpdGUoc2FhLCBkZWJOb3JtYWwsIElCTV9NUDJfTUFTSzAsIDB4YzAwZCwgMik7Ci0JCQlkZWJpd3JpdGUoc2FhLCBkZWJOb3JtYWwsIElCTV9NUDJfRElTUF9NT0RFLAotCQkJCWRlYmlyZWFkKHNhYSwgZGViTm9ybWFsLAotCQkJCQlJQk1fTVAyX0RJU1BfTU9ERSwgMikgfCAxLCAyKTsKLQkJCS8qIHRyaWdnZXIgb3NkIGRhdGEgdHJhbnNmZXIgKi8KLQkJCXNhYXdyaXRlKFNBQTcxNDZfUFNSX0RFQklfUyB8Ci0JCQkJIFNBQTcxNDZfUFNSX1BJTjEsIFNBQTcxNDZfSUVSKTsKLQkJCXNhYXdyaXRlKFNBQTcxNDZfUFNSX1BJTjEsIFNBQTcxNDZfUFNSKTsKLQkJfQotCX0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyBpbnQgc2FhX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHNhYTcxNDYgKnNhYSA9IGNvbnRhaW5lcl9vZih2ZGV2LCBzdHJ1Y3Qgc2FhNzE0NiwgdmlkZW9fZGV2KTsKLQotCWxvY2tfa2VybmVsKCk7Ci0JZmlsZS0+cHJpdmF0ZV9kYXRhID0gc2FhOwotCi0Jc2FhLT51c2VyKys7Ci0JaWYgKHNhYS0+dXNlciA+IDEpIHsKLQkJc2FhLT51c2VyLS07Ci0JCXVubG9ja19rZXJuZWwoKTsKLQkJcmV0dXJuIDA7CS8qIGRldmljZSBvcGVuIGFscmVhZHksIGRvbid0IHJlc2V0ICovCi0JfQotCXNhYS0+d3JpdGVtb2RlID0gVklEX1dSSVRFX01QRUdfVklEOwkvKiBkZWZhdWx0IHRvIHZpZGVvICovCi0JdW5sb2NrX2tlcm5lbCgpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNhYV9yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKQotewotCXN0cnVjdCBzYWE3MTQ2ICpzYWEgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc2FhLT51c2VyLS07Ci0KLQlpZiAoc2FhLT51c2VyID4gMCkJLyogc3RpbGwgc29tZW9uZSB1c2luZyBkZXZpY2UgKi8KLQkJcmV0dXJuIDA7Ci0Jc2Fhd3JpdGUoMHgwMDdmMDAwMCwgU0FBNzE0Nl9NQzEpOwkvKiBzdG9wIGFsbCBvdmVybGF5IGRtYSAqLwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIHNhYV9mb3BzID0gewotCS5vd25lciA9IFRISVNfTU9EVUxFLAotCS5vcGVuID0gc2FhX29wZW4sCi0JLnJlbGVhc2UgPSBzYWFfcmVsZWFzZSwKLQkuaW9jdGwgPSBzYWFfaW9jdGwsCi0JLnJlYWQgPSBzYWFfcmVhZCwKLQkud3JpdGUgPSBzYWFfd3JpdGUsCi0JLm1tYXAgPSBzYWFfbW1hcCwKLX07Ci0KLS8qIHRlbXBsYXRlIGZvciB2aWRlb19kZXZpY2Utc3RydWN0dXJlICovCi1zdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSBzYWFfdGVtcGxhdGUgPSB7Ci0JLm5hbWUgPSAiU0FBNzE0NkEiLAotCS5mb3BzID0gJnNhYV9mb3BzLAotCS5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2VfZW1wdHksCi19OwotCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBjb25maWd1cmVfc2FhNzE0NihzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG51bSkKLXsKLQlpbnQgcmV0dmFsOwotCXN0cnVjdCBzYWE3MTQ2ICpzYWEgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7Ci0KLQlzYWEtPmVuZG1hcmtoZWFkID0gc2FhLT5lbmRtYXJrdGFpbCA9IDA7Ci0Jc2FhLT53aW4ueCA9IHNhYS0+d2luLnkgPSAwOwotCXNhYS0+d2luLndpZHRoID0gc2FhLT53aW4uY3JvcHdpZHRoID0gNzIwOwotCXNhYS0+d2luLmhlaWdodCA9IHNhYS0+d2luLmNyb3BoZWlnaHQgPSA0ODA7Ci0Jc2FhLT53aW4uY3JvcHggPSBzYWEtPndpbi5jcm9weSA9IDA7Ci0Jc2FhLT53aW4uYnBwID0gMjsKLQlzYWEtPndpbi5kZXB0aCA9IDE2OwotCXNhYS0+d2luLmNvbG9yX2ZtdCA9IHBhbGV0dGUyZm10W1ZJREVPX1BBTEVUVEVfUkdCNTY1XTsKLQlzYWEtPndpbi5icGwgPSAxMDI0ICogc2FhLT53aW4uYnBwOwotCXNhYS0+d2luLnN3aWR0aCA9IDEwMjQ7Ci0Jc2FhLT53aW4uc2hlaWdodCA9IDc2ODsKLQlzYWEtPnBpY3R1cmUuYnJpZ2h0bmVzcyA9IDMyNzY4OwotCXNhYS0+cGljdHVyZS5jb250cmFzdCA9IDM4NzY4OwotCXNhYS0+cGljdHVyZS5jb2xvdXIgPSAzMjc2ODsKLQlzYWEtPmNhcCA9IDA7Ci0Jc2FhLT5uciA9IG51bTsKLQlzYWEtPnBsYXltb2RlID0gVklEX1BMQVlfTk9STUFMOwotCW1lbXNldChzYWEtPmJvYXJkY2ZnLCAwLCA2NCk7CS8qIGNsZWFyIGJvYXJkIGNvbmZpZyBhcmVhICovCi0Jc2FhLT5zYWE3MTQ2X21lbSA9IE5VTEw7Ci0Jc2FhLT5kbWF2aWQxID0gc2FhLT5kbWF2aWQyID0gc2FhLT5kbWF2aWQzID0gc2FhLT5kbWFhMWluID0KLQkgICAgc2FhLT5kbWFhMW91dCA9IHNhYS0+ZG1hYTJpbiA9IHNhYS0+ZG1hYTJvdXQgPQotCSAgICBzYWEtPnBhZ2V2aWQxID0gc2FhLT5wYWdldmlkMiA9IHNhYS0+cGFnZXZpZDMgPSBzYWEtPnBhZ2VhMWluID0KLQkgICAgc2FhLT5wYWdlYTFvdXQgPSBzYWEtPnBhZ2VhMmluID0gc2FhLT5wYWdlYTJvdXQgPQotCSAgICBzYWEtPnBhZ2VkZWJpID0gc2FhLT5kbWFSUFMxID0gc2FhLT5kbWFSUFMyID0gc2FhLT5wYWdlUlBTMSA9Ci0JICAgIHNhYS0+cGFnZVJQUzIgPSBOVUxMOwotCXNhYS0+YXVkYnVmID0gc2FhLT52aWRidWYgPSBzYWEtPm9zZGJ1ZiA9IHNhYS0+ZG1hZGViaSA9IE5VTEw7Ci0Jc2FhLT5hdWRoZWFkID0gc2FhLT52aWR0YWlsID0gMDsKLQotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnNhYS0+aTJjcSk7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmc2FhLT5hdWRxKTsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzYWEtPmRlYmlxKTsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzYWEtPnZpZHEpOwotCXNwaW5fbG9ja19pbml0KCZzYWEtPmxvY2spOwotCi0JcmV0dmFsID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7Ci0JaWYgKHJldHZhbCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICIlZDogcGNpX2VuYWJsZV9kZXZpY2UgZmFpbGVkIVxuIiwgbnVtKTsKLQkJZ290byBlcnI7Ci0JfQotCi0Jc2FhLT5pZCA9IHBkZXYtPmRldmljZTsKLQlzYWEtPmlycSA9IHBkZXYtPmlycTsKLQlzYWEtPnNhYTcxNDZfYWRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOwotCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIFBDSV9DTEFTU19SRVZJU0lPTiwgJnNhYS0+cmV2aXNpb24pOwotCi0Jc2FhLT5zYWE3MTQ2X21lbSA9IGlvcmVtYXAoc2FhLT5zYWE3MTQ2X2FkciwgMHgyMDApOwotCWlmIChzYWEtPnNhYTcxNDZfbWVtID09IE5VTEwpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiJWQ6IGlvcmVtYXAgZmFpbGVkIVxuIiwgbnVtKTsKLQkJcmV0dmFsID0gLUVJTzsKLQkJZ290byBlcnI7Ci0JfQotCi0JbWVtY3B5KCZzYWEtPnZpZGVvX2RldiwgJnNhYV90ZW1wbGF0ZSwgc2l6ZW9mKHNhYV90ZW1wbGF0ZSkpOwotCXNhYXdyaXRlKDAsIFNBQTcxNDZfSUVSKTsJLyogdHVybiBvZmYgYWxsIGludGVycnVwdHMgKi8KLQotCXJldHZhbCA9IHJlcXVlc3RfaXJxKHNhYS0+aXJxLCBzYWE3MTQ2X2lycSwgSVJRRl9TSEFSRUQgfCBJUlFGX0RJU0FCTEVELAotCQkic3RyYWRpcyIsIHNhYSk7Ci0JaWYgKHJldHZhbCA9PSAtRUlOVkFMKQotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICIlZDogQmFkIGlycSBudW1iZXIgb3IgaGFuZGxlclxuIiwgbnVtKTsKLQllbHNlIGlmIChyZXR2YWwgPT0gLUVCVVNZKQotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICIlZDogSVJRICVsZCBidXN5LCBjaGFuZ2UgeW91ciBQblAgY29uZmlnICIKLQkJCSJpbiBCSU9TXG4iLCBudW0sIHNhYS0+aXJxKTsKLQlpZiAocmV0dmFsIDwgMCkKLQkJZ290byBlcnJpbzsKLQotCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwotCXJldHZhbCA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmc2FhLT52aWRlb19kZXYsIFZGTF9UWVBFX0dSQUJCRVIsCi0JCXZpZGVvX25yKTsKLQlpZiAocmV0dmFsIDwgMCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICIlZDogZXJyb3IgaW4gcmVnaXN0ZXJpbmcgdmlkZW8gZGV2aWNlIVxuIiwKLQkJCW51bSk7Ci0JCWdvdG8gZXJyaXJxOwotCX0KLQotCXJldHVybiAwOwotCi1lcnJpcnE6Ci0JZnJlZV9pcnEoc2FhLT5pcnEsIHNhYSk7Ci1lcnJpbzoKLQlpb3VubWFwKHNhYS0+c2FhNzE0Nl9tZW0pOwotZXJyOgotCXJldHVybiByZXR2YWw7Ci19Ci0KLXN0YXRpYyBpbnQgX19kZXZpbml0IGluaXRfc2FhNzE0NihzdHJ1Y3QgcGNpX2RldiAqcGRldikKLXsKLQlzdHJ1Y3Qgc2FhNzE0NiAqc2FhID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCi0Jc2FhLT51c2VyID0gMDsKLQkvKiByZXNldCB0aGUgc2FhNzE0NiAqLwotCXNhYXdyaXRlKDB4ZmZmZjAwMDAsIFNBQTcxNDZfTUMxKTsKLQltZGVsYXkoNSk7Ci0JLyogZW5hYmxlIGRlYmkgYW5kIGkyYyB0cmFuc2ZlcnMgYW5kIHBpbnMgKi8KLQlzYWF3cml0ZSgoKFNBQTcxNDZfTUMxX0VEUCB8IFNBQTcxNDZfTUMxX0VJMkMgfAotCQkgICBTQUE3MTQ2X01DMV9UUl9FX0RFQkkpIDw8IDE2KSB8IDB4ZmZmZiwgU0FBNzE0Nl9NQzEpOwotCS8qIGVuc3VyZSBwcm9wZXIgc3RhdGUgb2YgY2hpcCAqLwotCXNhYXdyaXRlKDB4MDAwMDAwMDAsIFNBQTcxNDZfUEFHRTEpOwotCXNhYXdyaXRlKDB4MDBmMzAyYzAsIFNBQTcxNDZfTlVNX0xJTkVfQllURTEpOwotCXNhYXdyaXRlKDB4MDAwMDAwMDAsIFNBQTcxNDZfUEFHRTIpOwotCXNhYXdyaXRlKDB4MDE0MDAwODAsIFNBQTcxNDZfTlVNX0xJTkVfQllURTIpOwotCXNhYXdyaXRlKDB4MDAwMDAwMDAsIFNBQTcxNDZfREQxX0lOSVQpOwotCXNhYXdyaXRlKDB4MDAwMDAwMDAsIFNBQTcxNDZfREQxX1NUUkVBTV9CKTsKLQlzYWF3cml0ZSgweDAwMDAwMDAwLCBTQUE3MTQ2X0REMV9TVFJFQU1fQSk7Ci0Jc2Fhd3JpdGUoMHgwMDAwMDAwMCwgU0FBNzE0Nl9CUlNfQ1RSTCk7Ci0Jc2Fhd3JpdGUoMHg4MDQwMDA0MCwgU0FBNzE0Nl9CQ1NfQ1RSTCk7Ci0Jc2Fhd3JpdGUoMHgwMDAwZTAwMCAvKnwgKDE8PDI5KSAqLyAsIFNBQTcxNDZfSFBTX0NUUkwpOwotCXNhYXdyaXRlKDB4MDAwMDAwNjAsIFNBQTcxNDZfQ0xJUF9GT1JNQVRfQ1RSTCk7Ci0Jc2Fhd3JpdGUoMHgwMDAwMDAwMCwgU0FBNzE0Nl9BQ09OMSk7Ci0Jc2Fhd3JpdGUoMHgwMDAwMDAwMCwgU0FBNzE0Nl9BQ09OMik7Ci0Jc2Fhd3JpdGUoMHgwMDAwMDYwMCwgU0FBNzE0Nl9JMkNfU1RBVFVTKTsKLQlzYWF3cml0ZSgoKFNBQTcxNDZfTUMyX1VQTERfRDFfQiB8IFNBQTcxNDZfTUMyX1VQTERfRDFfQSB8Ci0JCVNBQTcxNDZfTUMyX1VQTERfQlJTIHwgU0FBNzE0Nl9NQzJfVVBMRF9IUFNfSCB8Ci0JCVNBQTcxNDZfTUMyX1VQTERfSFBTX1YgfCBTQUE3MTQ2X01DMl9VUExEX0RNQTIgfAotCQlTQUE3MTQ2X01DMl9VUExEX0RNQTEgfCBTQUE3MTQ2X01DMl9VUExEX0kyQykgPDwgMTYpIHwgMHhmZmZmLAotCQlTQUE3MTQ2X01DMik7Ci0JLyogc2V0dXAgYXJiaXRyYXRpb24gY29udHJvbCByZWdpc3RlcnMgKi8KLQlzYWF3cml0ZSgweDE0MTIxMjFhLCBTQUE3MTQ2X1BDSV9CVF9WMSk7Ci0KLQkvKiBhbGxvY2F0ZSAzMmsgZG1hIGJ1ZmZlciArIDRrIGZvciBwYWdlIHRhYmxlICovCi0JaWYgKChzYWEtPmRtYWRlYmkgPSBrbWFsbG9jKDMyNzY4ICsgNDA5NiwgR0ZQX0tFUk5FTCkpID09IE5VTEwpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiJWQ6IGRlYmkga21hbGxvYyBmYWlsZWRcbiIsIHNhYS0+bnIpOwotCQlnb3RvIGVycjsKLQl9Ci0jaWYgMAotCXNhYS0+cGFnZWRlYmkgPSBzYWEtPmRtYWRlYmkgKyAzMjc2ODsJLyogdG9wIDRrIGlzIGZvciBtbXUgKi8KLQlzYWF3cml0ZSh2aXJ0X3RvX2J1cyhzYWEtPnBhZ2VkZWJpKSAvKnwweDgwMCAqLyAsIFNBQTcxNDZfREVCSV9QQUdFKTsKLQlmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykJLyogc2V0dXAgbW11IHBhZ2UgdGFibGUgKi8KLQkJc2FhLT5wYWdlZGViaVtpXSA9IHZpcnRfdG9fYnVzKChzYWEtPmRtYWRlYmkgKyBpICogNDA5NikpOwotI2VuZGlmCi0Jc2FhLT5hdWRoZWFkID0gc2FhLT52aWRoZWFkID0gc2FhLT5vc2RoZWFkID0gMDsKLQlzYWEtPmF1ZHRhaWwgPSBzYWEtPnZpZHRhaWwgPSBzYWEtPm9zZHRhaWwgPSAwOwotCWlmIChzYWEtPnZpZGJ1ZiA9PSBOVUxMICYmIChzYWEtPnZpZGJ1ZiA9IHZtYWxsb2MoNTI0Mjg4KSkgPT0gTlVMTCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICIlZDogbWFsbG9jIGZhaWxlZFxuIiwgc2FhLT5ucik7Ci0JCWdvdG8gZXJyOwotCX0KLQlpZiAoc2FhLT5hdWRidWYgPT0gTlVMTCAmJiAoc2FhLT5hdWRidWYgPSB2bWFsbG9jKDY1NTM2KSkgPT0gTlVMTCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICIlZDogbWFsbG9jIGZhaWxlZFxuIiwgc2FhLT5ucik7Ci0JCWdvdG8gZXJyZnJlZTsKLQl9Ci0JaWYgKHNhYS0+b3NkYnVmID09IE5VTEwgJiYgKHNhYS0+b3NkYnVmID0gdm1hbGxvYygxMzEwNzIpKSA9PSBOVUxMKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIiVkOiBtYWxsb2MgZmFpbGVkXG4iLCBzYWEtPm5yKTsKLQkJZ290byBlcnJmcmVlOwotCX0KLQkvKiBhbGxvY2F0ZSA4MTkyMCBieXRlIGJ1ZmZlciBmb3IgY2xpcHBpbmcgKi8KLQlpZiAoKHNhYS0+ZG1hdmlkMiA9IGt6YWxsb2MoVklERU9fQ0xJUE1BUF9TSVpFLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICIlZDogY2xpcCBrbWFsbG9jIGZhaWxlZFxuIiwgc2FhLT5ucik7Ci0JCWdvdG8gZXJyZnJlZTsKLQl9Ci0JLyogc2V0dXAgY2xpcHBpbmcgcmVnaXN0ZXJzICovCi0Jc2Fhd3JpdGUodmlydF90b19idXMoc2FhLT5kbWF2aWQyKSwgU0FBNzE0Nl9CQVNFX0VWRU4yKTsKLQlzYWF3cml0ZSh2aXJ0X3RvX2J1cyhzYWEtPmRtYXZpZDIpICsgMTI4LCBTQUE3MTQ2X0JBU0VfT0REMik7Ci0Jc2Fhd3JpdGUodmlydF90b19idXMoc2FhLT5kbWF2aWQyKSArIFZJREVPX0NMSVBNQVBfU0laRSwKLQkJIFNBQTcxNDZfUFJPVF9BRERSMik7Ci0Jc2Fhd3JpdGUoMjU2LCBTQUE3MTQ2X1BJVENIMik7Ci0Jc2Fhd3JpdGUoNCwgU0FBNzE0Nl9QQUdFMik7CS8qIGRtYSBkaXJlY3Rpb246IHJlYWQsIG5vIGJ5dGVzd2FwICovCi0Jc2Fhd3JpdGUoKChTQUE3MTQ2X01DMl9VUExEX0RNQTIpIDw8IDE2KSB8IFNBQTcxNDZfTUMyX1VQTERfRE1BMiwKLQkJIFNBQTcxNDZfTUMyKTsKLQlJMkNCdXNTY2FuKHNhYSk7Ci0KLQlyZXR1cm4gMDsKLWVycmZyZWU6Ci0JdmZyZWUoc2FhLT5vc2RidWYpOwotCXZmcmVlKHNhYS0+YXVkYnVmKTsKLQl2ZnJlZShzYWEtPnZpZGJ1Zik7Ci0Jc2FhLT5hdWRidWYgPSBzYWEtPm9zZGJ1ZiA9IHNhYS0+dmlkYnVmID0gTlVMTDsKLWVycjoKLQlyZXR1cm4gLUVOT01FTTsKLX0KLQotc3RhdGljIHZvaWQgc3RyYWRpc19yZWxlYXNlX3NhYShzdHJ1Y3QgcGNpX2RldiAqcGRldikKLXsKLQl1OCBjb21tYW5kOwotCXN0cnVjdCBzYWE3MTQ2ICpzYWEgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7Ci0KLQkvKiB0dXJuIG9mZiBhbGwgY2FwdHVyaW5nLCBETUEgYW5kIElSUXMgKi8KLQlzYWF3cml0ZSgweGZmZmYwMDAwLCBTQUE3MTQ2X01DMSk7CS8qIHJlc2V0IGNoaXAgKi8KLQlzYWF3cml0ZSgwLCBTQUE3MTQ2X01DMik7Ci0Jc2Fhd3JpdGUoMCwgU0FBNzE0Nl9JRVIpOwotCXNhYXdyaXRlKDB4ZmZmZmZmZmZVTCwgU0FBNzE0Nl9JU1IpOwotCi0JLyogZGlzYWJsZSBQQ0kgYnVzLW1hc3RlcmluZyAqLwotCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIFBDSV9DT01NQU5ELCAmY29tbWFuZCk7Ci0JY29tbWFuZCAmPSB+UENJX0NPTU1BTkRfTUFTVEVSOwotCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBQQ0lfQ09NTUFORCwgY29tbWFuZCk7Ci0KLQkvKiB1bm1hcCBhbmQgZnJlZSBtZW1vcnkgKi8KLQlzYWEtPmF1ZGhlYWQgPSBzYWEtPmF1ZHRhaWwgPSBzYWEtPm9zZGhlYWQgPSAwOwotCXNhYS0+dmlkaGVhZCA9IHNhYS0+dmlkdGFpbCA9IHNhYS0+b3NkdGFpbCA9IDA7Ci0JdmZyZWUoc2FhLT52aWRidWYpOwotCXZmcmVlKHNhYS0+YXVkYnVmKTsKLQl2ZnJlZShzYWEtPm9zZGJ1Zik7Ci0Ja2ZyZWUoc2FhLT5kbWF2aWQyKTsKLQlzYWEtPmF1ZGJ1ZiA9IHNhYS0+dmlkYnVmID0gc2FhLT5vc2RidWYgPSBOVUxMOwotCXNhYS0+ZG1hdmlkMiA9IE5VTEw7Ci0Ja2ZyZWUoc2FhLT5kbWFkZWJpKTsKLQlrZnJlZShzYWEtPmRtYXZpZDEpOwotCWtmcmVlKHNhYS0+ZG1hdmlkMyk7Ci0Ja2ZyZWUoc2FhLT5kbWFhMWluKTsKLQlrZnJlZShzYWEtPmRtYWExb3V0KTsKLQlrZnJlZShzYWEtPmRtYWEyaW4pOwotCWtmcmVlKHNhYS0+ZG1hYTJvdXQpOwotCWtmcmVlKHNhYS0+ZG1hUlBTMSk7Ci0Ja2ZyZWUoc2FhLT5kbWFSUFMyKTsKLQlmcmVlX2lycShzYWEtPmlycSwgc2FhKTsKLQlpZiAoc2FhLT5zYWE3MTQ2X21lbSkKLQkJaW91bm1hcChzYWEtPnNhYTcxNDZfbWVtKTsKLQlpZiAodmlkZW9faXNfcmVnaXN0ZXJlZCgmc2FhLT52aWRlb19kZXYpKQotCQl2aWRlb191bnJlZ2lzdGVyX2RldmljZSgmc2FhLT52aWRlb19kZXYpOwotfQotCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBzdHJhZGlzX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAotCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCi17Ci0JaW50IHJldHZhbCA9IC1FSU5WQUw7Ci0KLQlpZiAoc2FhX251bSA+PSBTQUE3MTQ2X01BWCkKLQkJZ290byBlcnI7Ci0KLQlpZiAoIXBkZXYtPnN1YnN5c3RlbV92ZW5kb3IpCi0JCWRldl9pbmZvKCZwZGV2LT5kZXYsICIlZDogcmV2MSBkZWNvZGVyXG4iLCBzYWFfbnVtKTsKLQllbHNlCi0JCWRldl9pbmZvKCZwZGV2LT5kZXYsICIlZDogU0RNMnh4IGZvdW5kXG4iLCBzYWFfbnVtKTsKLQotCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCAmc2FhNzE0NnNbc2FhX251bV0pOwotCi0JcmV0dmFsID0gY29uZmlndXJlX3NhYTcxNDYocGRldiwgc2FhX251bSk7Ci0JaWYgKHJldHZhbCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICIlZDogZXJyb3IgaW4gY29uZmlndXJpbmdcbiIsIHNhYV9udW0pOwotCQlnb3RvIGVycjsKLQl9Ci0KLQlpZiAoaW5pdF9zYWE3MTQ2KHBkZXYpIDwgMCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICIlZDogZXJyb3IgaW4gaW5pdGlhbGl6YXRpb25cbiIsIHNhYV9udW0pOwotCQlyZXR2YWwgPSAtRUlPOwotCQlnb3RvIGVycnJlbDsKLQl9Ci0KLQlzYWFfbnVtKys7Ci0KLQlyZXR1cm4gMDsKLWVycnJlbDoKLQlzdHJhZGlzX3JlbGVhc2Vfc2FhKHBkZXYpOwotZXJyOgotCXJldHVybiByZXR2YWw7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBzdHJhZGlzX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKLXsKLQlzdHJhZGlzX3JlbGVhc2Vfc2FhKHBkZXYpOwotfQotCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc3RyYWRpc19wY2lfdGJsW10gPSB7Ci0JeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfUEhJTElQUywgUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxNDYpIH0sCi0JeyAwIH0KLX07Ci0KLQotc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHN0cmFkaXNfZHJpdmVyID0gewotCS5uYW1lID0gInN0cmFkaXMiLAotCS5pZF90YWJsZSA9IHN0cmFkaXNfcGNpX3RibCwKLQkucHJvYmUgPSBzdHJhZGlzX3Byb2JlLAotCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzdHJhZGlzX3JlbW92ZSkKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IHN0cmFkaXNfaW5pdCh2b2lkKQotewotCWludCByZXR2YWw7Ci0KLQlzYWFfbnVtID0gMDsKLQotCXJldHZhbCA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnN0cmFkaXNfZHJpdmVyKTsKLQlpZiAocmV0dmFsKQotCQlwcmludGsoS0VSTl9FUlIgInN0cmFkaXM6IFVuYWJsZSB0byByZWdpc3RlciBwY2kgZHJpdmVyLlxuIik7Ci0KLQlyZXR1cm4gcmV0dmFsOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgc3RyYWRpc19leGl0KHZvaWQpCi17Ci0JcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZzdHJhZGlzX2RyaXZlcik7Ci0JcHJpbnRrKEtFUk5fSU5GTyAic3RyYWRpczogbW9kdWxlIGNsZWFudXAgY29tcGxldGVcbiIpOwotfQotCi1tb2R1bGVfaW5pdChzdHJhZGlzX2luaXQpOwotbW9kdWxlX2V4aXQoc3RyYWRpc19leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9jb3JlL190aW9tYXAuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9jb3JlL190aW9tYXAuaAppbmRleCAxYzFmMTU3Li4xMTU5YTUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvY29yZS9fdGlvbWFwLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2NvcmUvX3Rpb21hcC5oCkBAIC0xOSw4ICsxOSwxOSBAQAogI2lmbmRlZiBfVElPTUFQXwogI2RlZmluZSBfVElPTUFQXwogCi0jaW5jbHVkZSA8cGxhdC9wb3dlcmRvbWFpbi5oPgotI2luY2x1ZGUgPHBsYXQvY2xvY2tkb21haW4uaD4KKy8qCisgKiBYWFggVGhlc2UgcG93ZXJkb21haW4uaC9jbG9ja2RvbWFpbi5oIGluY2x1ZGVzIGFyZSB3cm9uZyBhbmQgc2hvdWxkCisgKiBiZSByZW1vdmVkLiAgTm8gZHJpdmVyIHNob3VsZCBjYWxsIHB3cmRtXyogb3IgY2xrZG1fKiBmdW5jdGlvbnMKKyAqIGRpcmVjdGx5OyB0aGV5IHNob3VsZCByZWx5IG9uIE9NQVAgY29yZSBjb2RlIHRvIGRvIHRoaXMuCisgKi8KKyNpbmNsdWRlIDxtYWNoLW9tYXAyL3Bvd2VyZG9tYWluLmg+CisjaW5jbHVkZSA8bWFjaC1vbWFwMi9jbG9ja2RvbWFpbi5oPgorLyoKKyAqIFhYWCBUaGVzZSBtYWNoLW9tYXAyLyBpbmNsdWRlcyBhcmUgd3JvbmcgYW5kIHNob3VsZCBiZSByZW1vdmVkLiAgTm8KKyAqIGRyaXZlciBzaG91bGQgcmVhZCBvciB3cml0ZSB0byBQUk0vQ00gcmVnaXN0ZXJzIGRpcmVjdGx5OyB0aGV5CisgKiBzaG91bGQgcmVseSBvbiBPTUFQIGNvcmUgY29kZSB0byBkbyB0aGlzLgorICovCisjaW5jbHVkZSA8bWFjaC1vbWFwMi9jbTJ4eHhfM3h4eC5oPgogI2luY2x1ZGUgPG1hY2gtb21hcDIvcHJtLXJlZ2JpdHMtMzR4eC5oPgogI2luY2x1ZGUgPG1hY2gtb21hcDIvY20tcmVnYml0cy0zNHh4Lmg+CiAjaW5jbHVkZSA8ZHNwYnJpZGdlL2RldmRlZnMuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90bTYwMDAvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy90bTYwMDAvS2NvbmZpZwppbmRleCBkZTdlYmI5Li4xMTRlZWM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdG02MDAwL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RtNjAwMC9LY29uZmlnCkBAIC0xLDYgKzEsNiBAQAogY29uZmlnIFZJREVPX1RNNjAwMAogCXRyaXN0YXRlICJUViBNYXN0ZXIgVE01NjAwLzYwMDAvNjAxMCBkcml2ZXIiCi0JZGVwZW5kcyBvbiBWSURFT19ERVYgJiYgSTJDICYmIElOUFVUICYmIElSX0NPUkUgJiYgVVNCICYmIEVYUEVSSU1FTlRBTAorCWRlcGVuZHMgb24gVklERU9fREVWICYmIEkyQyAmJiBJTlBVVCAmJiBSQ19DT1JFICYmIFVTQiAmJiBFWFBFUklNRU5UQUwKIAlzZWxlY3QgVklERU9fVFVORVIKIAlzZWxlY3QgTUVESUFfVFVORVJfWEMyMDI4CiAJc2VsZWN0IE1FRElBX1RVTkVSX1hDNTAwMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RtNjAwMC9UT0RPIGIvZHJpdmVycy9zdGFnaW5nL3RtNjAwMC9UT0RPCmluZGV4IDM0NzgwZmMuLjEzNWQwZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy90bTYwMDAvVE9ETworKysgYi9kcml2ZXJzL3N0YWdpbmcvdG02MDAwL1RPRE8KQEAgLTEsNCArMSw2IEBACiBUaGVyZSBhIGZldyB0aGluZ3MgdG8gZG8gYmVmb3JlIHB1dHRpbmcgdGhpcyBkcml2ZXIgaW4gcHJvZHVjdGlvbjoKKwktIElSIE5FQyB3aXRoIHRtNTYwMC82MDAwIFRWIGNhcmRzCisJLSBJUiBSQzUgd2l0aCB0bTU2MDAvNjAwMC82MDEwIFRWIGNhcmRzCiAJLSBDb2RpbmdTdHlsZTsKIAktIEZpeCBhdWRpbzsKIAktIEZpeCBzb21lIHBhbmljL09PUFMgY29uZGl0aW9ucy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90bTYwMDAvdG02MDAwLWNhcmRzLmMgYi9kcml2ZXJzL3N0YWdpbmcvdG02MDAwL3RtNjAwMC1jYXJkcy5jCmluZGV4IGIxNDMyNTguLjQ1NTAzOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy90bTYwMDAvdG02MDAwLWNhcmRzLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RtNjAwMC90bTYwMDAtY2FyZHMuYwpAQCAtMzI4LDYgKzMyOCw0NyBAQAogCXsgfSwKIH07CiAKKy8qIENvbnRyb2wgcG93ZXIgbGVkIGZvciBzaG93IHNvbWUgYWN0aXZpdHkgKi8KK3ZvaWQgdG02MDAwX2ZsYXNoX2xlZChzdHJ1Y3QgdG02MDAwX2NvcmUgKmRldiwgdTggc3RhdGUpCit7CisJLyogUG93ZXIgTEVEIHVuY29uZmlndXJlZCAqLworCWlmICghZGV2LT5ncGlvLnBvd2VyX2xlZCkKKwkJcmV0dXJuOworCisJLyogT04gUG93ZXIgTEVEICovCisJaWYgKHN0YXRlKSB7CisJCXN3aXRjaCAoZGV2LT5tb2RlbCkgeworCQljYXNlIFRNNjAxMF9CT0FSRF9IQVVQUEFVR0VfOTAwSDoKKwkJY2FzZSBUTTYwMTBfQk9BUkRfVEVSUkFURUNfQ0lORVJHWV9IWUJSSURfWEU6CisJCWNhc2UgVE02MDEwX0JPQVJEX1RXSU5IQU5fVFU1MDE6CisJCQl0bTYwMDBfc2V0X3JlZyhkZXYsIFJFUV8wM19TRVRfR0VUX01DVV9QSU4sCisJCQkJZGV2LT5ncGlvLnBvd2VyX2xlZCwgMHgwMCk7CisJCQlicmVhazsKKwkJY2FzZSBUTTYwMTBfQk9BUkRfQkVIT0xEX1dBTkRFUjoKKwkJY2FzZSBUTTYwMTBfQk9BUkRfQkVIT0xEX1ZPWUFHRVI6CisJCQl0bTYwMDBfc2V0X3JlZyhkZXYsIFJFUV8wM19TRVRfR0VUX01DVV9QSU4sCisJCQkJZGV2LT5ncGlvLnBvd2VyX2xlZCwgMHgwMSk7CisJCQlicmVhazsKKwkJfQorCX0KKwkvKiBPRkYgUG93ZXIgTEVEICovCisJZWxzZSB7CisJCXN3aXRjaCAoZGV2LT5tb2RlbCkgeworCQljYXNlIFRNNjAxMF9CT0FSRF9IQVVQUEFVR0VfOTAwSDoKKwkJY2FzZSBUTTYwMTBfQk9BUkRfVEVSUkFURUNfQ0lORVJHWV9IWUJSSURfWEU6CisJCWNhc2UgVE02MDEwX0JPQVJEX1RXSU5IQU5fVFU1MDE6CisJCQl0bTYwMDBfc2V0X3JlZyhkZXYsIFJFUV8wM19TRVRfR0VUX01DVV9QSU4sCisJCQkJZGV2LT5ncGlvLnBvd2VyX2xlZCwgMHgwMSk7CisJCQlicmVhazsKKwkJY2FzZSBUTTYwMTBfQk9BUkRfQkVIT0xEX1dBTkRFUjoKKwkJY2FzZSBUTTYwMTBfQk9BUkRfQkVIT0xEX1ZPWUFHRVI6CisJCQl0bTYwMDBfc2V0X3JlZyhkZXYsIFJFUV8wM19TRVRfR0VUX01DVV9QSU4sCisJCQkJZGV2LT5ncGlvLnBvd2VyX2xlZCwgMHgwMCk7CisJCQlicmVhazsKKwkJfQorCX0KK30KKwogLyogVHVuZXIgY2FsbGJhY2sgdG8gcHJvdmlkZSB0aGUgcHJvcGVyIGdwaW8gY2hhbmdlcyBuZWVkZWQgZm9yIHhjNTAwMCAqLwogaW50IHRtNjAwMF94YzUwMDBfY2FsbGJhY2sodm9pZCAqcHRyLCBpbnQgY29tcG9uZW50LCBpbnQgY29tbWFuZCwgaW50IGFyZykKIHsKQEAgLTUyMSwxMyArNTYyLDYgQEAKIAkJCQlwcmludGsoS0VSTl9FUlIgIkVycm9yICVpIGRvaW5nIHR1bmVyIHJlc2V0XG4iLCByYyk7CiAJCQkJcmV0dXJuIHJjOwogCQkJfQotCQkJbXNsZWVwKDEwKTsKLQotCQkJaWYgKCFpKSB7Ci0JCQkJcmMgPSB0bTYwMDBfZ2V0X3JlZzMyKGRldiwgUkVRXzQwX0dFVF9WRVJTSU9OLCAwLCAwKTsKLQkJCQlpZiAocmMgPj0gMCkKLQkJCQkJcHJpbnRrKEtFUk5fREVCVUcgImJvYXJkPTB4JTA4eFxuIiwgcmMpOwotCQkJfQogCQl9CiAJfSBlbHNlIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJUdW5lciByZXNldCBpcyBub3QgY29uZmlndXJlZFxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdG02MDAwL3RtNjAwMC1jb3JlLmMgYi9kcml2ZXJzL3N0YWdpbmcvdG02MDAwL3RtNjAwMC1jb3JlLmMKaW5kZXggNDBhMDIwNi4uOTZhZWQ0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3RtNjAwMC90bTYwMDAtY29yZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90bTYwMDAvdG02MDAwLWNvcmUuYwpAQCAtNTQyLDYgKzU0MiwyNiBAQAogCWludCBib2FyZCwgcmMgPSAwLCBpLCBzaXplOwogCXN0cnVjdCByZWdfaW5pdCAqdGFiOwogCisJLyogQ2hlY2sgYm9hcmQgcmV2aXNpb24gKi8KKwlib2FyZCA9IHRtNjAwMF9nZXRfcmVnMzIoZGV2LCBSRVFfNDBfR0VUX1ZFUlNJT04sIDAsIDApOworCWlmIChib2FyZCA+PSAwKSB7CisJCXN3aXRjaCAoYm9hcmQgJiAweGZmKSB7CisJCWNhc2UgMHhmMzoKKwkJCXByaW50ayhLRVJOX0lORk8gIkZvdW5kIHRtNjAwMFxuIik7CisJCQlpZiAoZGV2LT5kZXZfdHlwZSAhPSBUTTYwMDApCisJCQkJZGV2LT5kZXZfdHlwZSA9IFRNNjAwMDsKKwkJCWJyZWFrOworCQljYXNlIDB4ZjQ6CisJCQlwcmludGsoS0VSTl9JTkZPICJGb3VuZCB0bTYwMTBcbiIpOworCQkJaWYgKGRldi0+ZGV2X3R5cGUgIT0gVE02MDEwKQorCQkJCWRldi0+ZGV2X3R5cGUgPSBUTTYwMTA7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByaW50ayhLRVJOX0lORk8gIlVua25vd24gYm9hcmQgdmVyc2lvbiA9IDB4JTA4eFxuIiwgYm9hcmQpOworCQl9CisJfSBlbHNlCisJCXByaW50ayhLRVJOX0VSUiAiRXJyb3IgJWkgd2hpbGUgcmV0cmlldmluZyBib2FyZCB2ZXJzaW9uXG4iLCBib2FyZCk7CisKIAlpZiAoZGV2LT5kZXZfdHlwZSA9PSBUTTYwMTApIHsKIAkJdGFiID0gdG02MDEwX2luaXRfdGFiOwogCQlzaXplID0gQVJSQVlfU0laRSh0bTYwMTBfaW5pdF90YWIpOwpAQCAtNTYzLDEzICs1ODMsNiBAQAogCiAJbXNsZWVwKDUpOyAvKiBKdXN0IHRvIGJlIGNvbnNlcnZhdGl2ZSAqLwogCi0JLyogQ2hlY2sgYm9hcmQgdmVyc2lvbiAtIG1heWJlIDEwTW9vbnMgc3BlY2lmaWMgKi8KLQlib2FyZCA9IHRtNjAwMF9nZXRfcmVnMzIoZGV2LCBSRVFfNDBfR0VUX1ZFUlNJT04sIDAsIDApOwotCWlmIChib2FyZCA+PSAwKQotCQlwcmludGsoS0VSTl9JTkZPICJCb2FyZCB2ZXJzaW9uID0gMHglMDh4XG4iLCBib2FyZCk7Ci0JZWxzZQotCQlwcmludGsoS0VSTl9FUlIgIkVycm9yICVpIHdoaWxlIHJldHJpZXZpbmcgYm9hcmQgdmVyc2lvblxuIiwgYm9hcmQpOwotCiAJcmMgPSB0bTYwMDBfY2FyZHNfc2V0dXAoZGV2KTsKIAogCXJldHVybiByYzsKQEAgLTcwOSw1ICs3MjIsNSBAQAogCQkJCW9wcy0+ZmluaShkZXYpOwogCQl9CiAJfQotCW11dGV4X2xvY2soJnRtNjAwMF9kZXZsaXN0X211dGV4KTsKKwltdXRleF91bmxvY2soJnRtNjAwMF9kZXZsaXN0X211dGV4KTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90bTYwMDAvdG02MDAwLWkyYy5jIGIvZHJpdmVycy9zdGFnaW5nL3RtNjAwMC90bTYwMDAtaTJjLmMKaW5kZXggOTNmNjI1Zi4uMThkZTQ3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3RtNjAwMC90bTYwMDAtaTJjLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RtNjAwMC90bTYwMDAtaTJjLmMKQEAgLTMwMSwzMyArMzAxLDExIEBACiAJcmV0dXJuIEkyQ19GVU5DX1NNQlVTX0VNVUw7CiB9CiAKLSNkZWZpbmUgbWFzc193cml0ZShhZGRyLCByZWcsIGRhdGEuLi4pCQkJCQlcCi0JeyBzdGF0aWMgY29uc3QgdTggX3ZhbFtdID0gZGF0YTsJCQkJXAotCXJjID0gdG02MDAwX3JlYWRfd3JpdGVfdXNiKGRldiwgVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IsCVwKLQlSRVFfMTZfU0VUX0dFVF9JMkNfV1IxX1JETiwgKHJlZzw8OCkrYWRkciwgMHgwMCwgKHU4ICopIF92YWwsCVwKLQlBUlJBWV9TSVpFKF92YWwpKTsJCQkJCQlcCi0JaWYgKHJjIDwgMCkgewkJCQkJCQlcCi0JCXByaW50ayhLRVJOX0VSUiAiRXJyb3Igb24gbGluZSAlZDogJWRcbiIsIF9fTElORV9fLCByYyk7CVwKLQkJcmV0dXJuIHJjOwkJCQkJCVwKLQl9CQkJCQkJCQlcCi0JbXNsZWVwKDEwKTsJCQkJCQkJXAotCX0KLQotc3RhdGljIHN0cnVjdCBpMmNfYWxnb3JpdGhtIHRtNjAwMF9hbGdvID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfYWxnb3JpdGhtIHRtNjAwMF9hbGdvID0gewogCS5tYXN0ZXJfeGZlciAgID0gdG02MDAwX2kyY194ZmVyLAogCS5mdW5jdGlvbmFsaXR5ID0gZnVuY3Rpb25hbGl0eSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2FkYXB0ZXIgdG02MDAwX2FkYXBfdGVtcGxhdGUgPSB7Ci0JLm93bmVyID0gVEhJU19NT0RVTEUsCi0JLm5hbWUgPSAidG02MDAwIiwKLQkuYWxnbyA9ICZ0bTYwMDBfYWxnbywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudCB0bTYwMDBfY2xpZW50X3RlbXBsYXRlID0gewotCS5uYW1lID0gInRtNjAwMCBpbnRlcm5hbCIsCi19OwotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiAvKgpAQCAtMzM3LDE3ICszMTUsMjAgQEAKIGludCB0bTYwMDBfaTJjX3JlZ2lzdGVyKHN0cnVjdCB0bTYwMDBfY29yZSAqZGV2KQogewogCXVuc2lnbmVkIGNoYXIgZWVkYXRhWzI1Nl07CisJaW50IHJjOwogCi0JZGV2LT5pMmNfYWRhcCA9IHRtNjAwMF9hZGFwX3RlbXBsYXRlOworCWRldi0+aTJjX2FkYXAub3duZXIgPSBUSElTX01PRFVMRTsKKwlkZXYtPmkyY19hZGFwLmFsZ28gPSAmdG02MDAwX2FsZ287CiAJZGV2LT5pMmNfYWRhcC5kZXYucGFyZW50ID0gJmRldi0+dWRldi0+ZGV2OwotCXN0cmNweShkZXYtPmkyY19hZGFwLm5hbWUsIGRldi0+bmFtZSk7CisJc3RybGNweShkZXYtPmkyY19hZGFwLm5hbWUsIGRldi0+bmFtZSwgc2l6ZW9mKGRldi0+aTJjX2FkYXAubmFtZSkpOwogCWRldi0+aTJjX2FkYXAuYWxnb19kYXRhID0gZGV2OwotCWkyY19hZGRfYWRhcHRlcigmZGV2LT5pMmNfYWRhcCk7Ci0KLQlkZXYtPmkyY19jbGllbnQgPSB0bTYwMDBfY2xpZW50X3RlbXBsYXRlOwotCWRldi0+aTJjX2NsaWVudC5hZGFwdGVyID0gJmRldi0+aTJjX2FkYXA7Ci0KIAlpMmNfc2V0X2FkYXBkYXRhKCZkZXYtPmkyY19hZGFwLCAmZGV2LT52NGwyX2Rldik7CisJcmMgPSBpMmNfYWRkX2FkYXB0ZXIoJmRldi0+aTJjX2FkYXApOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJZGV2LT5pMmNfY2xpZW50LmFkYXB0ZXIgPSAmZGV2LT5pMmNfYWRhcDsKKwlzdHJsY3B5KGRldi0+aTJjX2NsaWVudC5uYW1lLCAidG02MDAwIGludGVybmFsIiwgSTJDX05BTUVfU0laRSk7CiAKIAl0bTYwMDBfaTJjX2VlcHJvbShkZXYsIGVlZGF0YSwgc2l6ZW9mKGVlZGF0YSkpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdG02MDAwL3RtNjAwMC1pbnB1dC5jIGIvZHJpdmVycy9zdGFnaW5nL3RtNjAwMC90bTYwMDAtaW5wdXQuYwppbmRleCA2MDIyY2FhLi4yMWU3ZGE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdG02MDAwL3RtNjAwMC1pbnB1dC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90bTYwMDAvdG02MDAwLWlucHV0LmMKQEAgLTI0LDggKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogCi0jaW5jbHVkZSA8bWVkaWEvaXItY29yZS5oPgotI2luY2x1ZGUgPG1lZGlhL2lyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3JjLWNvcmUuaD4KIAogI2luY2x1ZGUgInRtNjAwMC5oIgogI2luY2x1ZGUgInRtNjAwMC1yZWdzLmgiCkBAIC0zOCw2ICszNywxMCBAQAogbW9kdWxlX3BhcmFtKGVuYWJsZV9pciwgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZW5hYmxlX2lyLCAiZW5hYmxlIGlyIChkZWZhdWx0IGlzIGVuYWJsZSkiKTsKIAorLyogbnVtYmVyIG9mIDUwbXMgZm9yIE9OLU9GRi1PTiBwb3dlciBsZWQgKi8KKy8qIHNob3cgSVIgYWN0aXZpdHkgKi8KKyNkZWZpbmUgUFdMRURfT0ZGIDIKKwogI3VuZGVmIGRwcmludGsKIAogI2RlZmluZSBkcHJpbnRrKGZtdCwgYXJnLi4uKSBcCkBAIC01MSw4ICs1NCw3IEBACiAKIHN0cnVjdCB0bTYwMDBfSVIgewogCXN0cnVjdCB0bTYwMDBfY29yZQkqZGV2OwotCXN0cnVjdCBpcl9pbnB1dF9kZXYJKmlucHV0OwotCXN0cnVjdCBpcl9pbnB1dF9zdGF0ZQlpcjsKKwlzdHJ1Y3QgcmNfZGV2CQkqcmM7CiAJY2hhcgkJCW5hbWVbMzJdOwogCWNoYXIJCQlwaHlzWzMyXTsKIApAQCAtNjEsMTMgKzYzLDE2IEBACiAJc3RydWN0IGRlbGF5ZWRfd29yawl3b3JrOwogCXU4CQkJd2FpdDoxOwogCXU4CQkJa2V5OjE7CisJdTgJCQlwd2xlZDoxOworCXU4CQkJcHdsZWRjbnQ7CisJdTE2CQkJa2V5X2FkZHI7CiAJc3RydWN0IHVyYgkJKmludF91cmI7CiAJdTgJCQkqdXJiX2RhdGE7CiAKIAlpbnQgKCpnZXRfa2V5KSAoc3RydWN0IHRtNjAwMF9JUiAqLCBzdHJ1Y3QgdG02MDAwX2lyX3BvbGxfcmVzdWx0ICopOwogCiAJLyogSVIgZGV2aWNlIHByb3BlcnRpZXMgKi8KLQlzdHJ1Y3QgaXJfZGV2X3Byb3BzCXByb3BzOworCXU2NAkJCXJjX3R5cGU7CiB9OwogCiAKQEAgLTkxLDI2ICs5Niw0OSBAQAogCXU4IGJ1ZlsxMF07CiAJaW50IHJjOwogCi0JLyogaGFjayAqLwotCWJ1ZlswXSA9IDB4ZmY7Ci0JYnVmWzFdID0gMHhmZjsKLQlidWZbMl0gPSAweGYyOwotCWJ1ZlszXSA9IDB4MmI7Ci0JYnVmWzRdID0gMHgyMDsKLQlidWZbNV0gPSAweDM1OwotCWJ1Zls2XSA9IDB4NjA7Ci0JYnVmWzddID0gMHgwNDsKLQlidWZbOF0gPSAweGMwOwotCWJ1Zls5XSA9IDB4MDg7CisJc3dpdGNoIChpci0+cmNfdHlwZSkgeworCWNhc2UgUkNfVFlQRV9ORUM6CisJCS8qIFNldHVwIElSIGRlY29kZXIgZm9yIE5FQyBzdGFuZGFyZCAxMk1IeiBzeXN0ZW0gY2xvY2sgKi8KKwkJLyogSVJfTEVBREVSX0NOVCA9IDAuOW1zICAgICAgICAgICAgICovCisJCXRtNjAwMF9zZXRfcmVnKGRldiwgVE02MDEwX1JFUTA3X1JEOF9JUl9MRUFERVIxLCAweGFhKTsKKwkJdG02MDAwX3NldF9yZWcoZGV2LCBUTTYwMTBfUkVRMDdfUkQ4X0lSX0xFQURFUjAsIDB4MzApOworCQkvKiBJUl9QVUxTRV9DTlQgPSAwLjdtcyAgICAgICAgICAgICAgKi8KKwkJdG02MDAwX3NldF9yZWcoZGV2LCBUTTYwMTBfUkVRMDdfUkQ4X0lSX1BVTFNFX0NOVDEsIDB4MjApOworCQl0bTYwMDBfc2V0X3JlZyhkZXYsIFRNNjAxMF9SRVEwN19SRDhfSVJfUFVMU0VfQ05UMCwgMHhkMCk7CisJCS8qIFJlbW90ZSBXQUtFVVAgPSBlbmFibGUgKi8KKwkJdG02MDAwX3NldF9yZWcoZGV2LCBUTTYwMTBfUkVRMDdfUkU1X1JFTU9URV9XQUtFVVAsIDB4ZmUpOworCQkvKiBJUl9XS1VQX1NFTCA9IExvdyBieXRlIGluIGRlY29kZWQgSVIgZGF0YSAqLworCQl0bTYwMDBfc2V0X3JlZyhkZXYsIFRNNjAxMF9SRVEwN19SRDhfSVJfV0FLRVVQX1NFTCwgMHhmZik7CisJCS8qIElSX1dLVV9BREQgY29kZSAqLworCQl0bTYwMDBfc2V0X3JlZyhkZXYsIFRNNjAxMF9SRVEwN19SRDhfSVJfV0FLRVVQX0FERCwgMHhmZik7CisJCXRtNjAwMF9mbGFzaF9sZWQoZGV2LCAwKTsKKwkJbXNsZWVwKDEwMCk7CisJCXRtNjAwMF9mbGFzaF9sZWQoZGV2LCAxKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogaGFjayAqLworCQlidWZbMF0gPSAweGZmOworCQlidWZbMV0gPSAweGZmOworCQlidWZbMl0gPSAweGYyOworCQlidWZbM10gPSAweDJiOworCQlidWZbNF0gPSAweDIwOworCQlidWZbNV0gPSAweDM1OworCQlidWZbNl0gPSAweDYwOworCQlidWZbN10gPSAweDA0OworCQlidWZbOF0gPSAweGMwOworCQlidWZbOV0gPSAweDA4OwogCi0JcmMgPSB0bTYwMDBfcmVhZF93cml0ZV91c2IoZGV2LCBVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8Ci0JCVVTQl9SRUNJUF9ERVZJQ0UsIFJFUV8wMF9TRVRfSVJfVkFMVUUsIDAsIDAsIGJ1ZiwgMHgwYSk7Ci0JbXNsZWVwKDEwMCk7CisJCXJjID0gdG02MDAwX3JlYWRfd3JpdGVfdXNiKGRldiwgVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfAorCQkJVVNCX1JFQ0lQX0RFVklDRSwgUkVRXzAwX1NFVF9JUl9WQUxVRSwgMCwgMCwgYnVmLCAweDBhKTsKKwkJbXNsZWVwKDEwMCk7CiAKLQlpZiAocmMgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIklSIGNvbmZpZ3VyYXRpb24gZmFpbGVkIik7Ci0JCXJldHVybiByYzsKKwkJaWYgKHJjIDwgMCkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAiSVIgY29uZmlndXJhdGlvbiBmYWlsZWQiKTsKKwkJCXJldHVybiByYzsKKwkJfQorCQlicmVhazsKIAl9CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTQ1LDE3ICsxNzMsMjggQEAKIAkJcmV0dXJuIDA7CiAKIAlpZiAoJmRldi0+aW50X2luKSB7Ci0JCWlmIChpci0+aXIuaXJfdHlwZSA9PSBJUl9UWVBFX1JDNSkKKwkJc3dpdGNoIChpci0+cmNfdHlwZSkgeworCQljYXNlIFJDX1RZUEVfUkM1OgogCQkJcG9sbF9yZXN1bHQtPnJjX2RhdGEgPSBpci0+dXJiX2RhdGFbMF07Ci0JCWVsc2UKLQkJCXBvbGxfcmVzdWx0LT5yY19kYXRhID0gaXItPnVyYl9kYXRhWzBdIHwgaXItPnVyYl9kYXRhWzFdIDw8IDg7CisJCQlicmVhazsKKwkJY2FzZSBSQ19UWVBFX05FQzoKKwkJCWlmIChpci0+dXJiX2RhdGFbMV0gPT0gKChpci0+a2V5X2FkZHIgPj4gOCkgJiAweGZmKSkgeworCQkJCXBvbGxfcmVzdWx0LT5yY19kYXRhID0gaXItPnVyYl9kYXRhWzBdCisJCQkJCQkJfCBpci0+dXJiX2RhdGFbMV0gPDwgODsKKwkJCX0KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcG9sbF9yZXN1bHQtPnJjX2RhdGEgPSBpci0+dXJiX2RhdGFbMF0KKwkJCQkJfCBpci0+dXJiX2RhdGFbMV0gPDwgODsKKwkJCWJyZWFrOworCQl9CiAJfSBlbHNlIHsKIAkJdG02MDAwX3NldF9yZWcoZGV2LCBSRVFfMDRfRU5fRElTQUJMRV9NQ1VfSU5ULCAyLCAwKTsKIAkJbXNsZWVwKDEwKTsKIAkJdG02MDAwX3NldF9yZWcoZGV2LCBSRVFfMDRfRU5fRElTQUJMRV9NQ1VfSU5ULCAyLCAxKTsKIAkJbXNsZWVwKDEwKTsKIAotCQlpZiAoaXItPmlyLmlyX3R5cGUgPT0gSVJfVFlQRV9SQzUpIHsKKwkJaWYgKGlyLT5yY190eXBlID09IFJDX1RZUEVfUkM1KSB7CiAJCQlyYyA9IHRtNjAwMF9yZWFkX3dyaXRlX3VzYihkZXYsIFVTQl9ESVJfSU4gfAogCQkJCVVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCiAJCQkJUkVRXzAyX0dFVF9JUl9DT0RFLCAwLCAwLCBidWYsIDEpOwpAQCAtMTg4LDYgKzIyNyw3IEBACiAKIHN0YXRpYyB2b2lkIHRtNjAwMF9pcl9oYW5kbGVfa2V5KHN0cnVjdCB0bTYwMDBfSVIgKmlyKQogeworCXN0cnVjdCB0bTYwMDBfY29yZSAqZGV2ID0gaXItPmRldjsKIAlpbnQgcmVzdWx0OwogCXN0cnVjdCB0bTYwMDBfaXJfcG9sbF9yZXN1bHQgcG9sbF9yZXN1bHQ7CiAKQEAgLTIwMCwxMiArMjQwLDIxIEBACiAKIAlkcHJpbnRrKCJpci0+Z2V0X2tleSByZXN1bHQgZGF0YT0lMDR4XG4iLCBwb2xsX3Jlc3VsdC5yY19kYXRhKTsKIAotCWlmIChpci0+a2V5KSB7Ci0JCWlyX2lucHV0X2tleWRvd24oaXItPmlucHV0LT5pbnB1dF9kZXYsICZpci0+aXIsCi0JCQkJKHUzMilwb2xsX3Jlc3VsdC5yY19kYXRhKTsKKwlpZiAoaXItPnB3bGVkKSB7CisJCWlmIChpci0+cHdsZWRjbnQgPj0gUFdMRURfT0ZGKSB7CisJCQlpci0+cHdsZWQgPSAwOworCQkJaXItPnB3bGVkY250ID0gMDsKKwkJCXRtNjAwMF9mbGFzaF9sZWQoZGV2LCAxKTsKKwkJfSBlbHNlCisJCQlpci0+cHdsZWRjbnQgKz0gMTsKKwl9CiAKLQkJaXJfaW5wdXRfbm9rZXkoaXItPmlucHV0LT5pbnB1dF9kZXYsICZpci0+aXIpOworCWlmIChpci0+a2V5KSB7CisJCXJjX2tleWRvd24oaXItPnJjLCBwb2xsX3Jlc3VsdC5yY19kYXRhLCAwKTsKIAkJaXItPmtleSA9IDA7CisJCWlyLT5wd2xlZCA9IDE7CisJCWlyLT5wd2xlZGNudCA9IDA7CisJCXRtNjAwMF9mbGFzaF9sZWQoZGV2LCAwKTsKIAl9CiAJcmV0dXJuOwogfQpAQCAtMjE4LDkgKzI2Nyw5IEBACiAJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZpci0+d29yaywgbXNlY3NfdG9famlmZmllcyhpci0+cG9sbGluZykpOwogfQogCi1zdGF0aWMgaW50IHRtNjAwMF9pcl9zdGFydCh2b2lkICpwcml2KQorc3RhdGljIGludCB0bTYwMDBfaXJfc3RhcnQoc3RydWN0IHJjX2RldiAqcmMpCiB7Ci0Jc3RydWN0IHRtNjAwMF9JUiAqaXIgPSBwcml2OworCXN0cnVjdCB0bTYwMDBfSVIgKmlyID0gcmMtPnByaXY7CiAKIAlJTklUX0RFTEFZRURfV09SSygmaXItPndvcmssIHRtNjAwMF9pcl93b3JrKTsKIAlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmlyLT53b3JrLCAwKTsKQEAgLTIyOCwzMCArMjc3LDkxIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHRtNjAwMF9pcl9zdG9wKHZvaWQgKnByaXYpCitzdGF0aWMgdm9pZCB0bTYwMDBfaXJfc3RvcChzdHJ1Y3QgcmNfZGV2ICpyYykKIHsKLQlzdHJ1Y3QgdG02MDAwX0lSICppciA9IHByaXY7CisJc3RydWN0IHRtNjAwMF9JUiAqaXIgPSByYy0+cHJpdjsKIAogCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmaXItPndvcmspOwogfQogCi1pbnQgdG02MDAwX2lyX2NoYW5nZV9wcm90b2NvbCh2b2lkICpwcml2LCB1NjQgaXJfdHlwZSkKK2ludCB0bTYwMDBfaXJfY2hhbmdlX3Byb3RvY29sKHN0cnVjdCByY19kZXYgKnJjLCB1NjQgcmNfdHlwZSkKIHsKLQlzdHJ1Y3QgdG02MDAwX0lSICppciA9IHByaXY7CisJc3RydWN0IHRtNjAwMF9JUiAqaXIgPSByYy0+cHJpdjsKKworCWlmICghaXIpCisJCXJldHVybiAwOworCisJaWYgKChyYy0+cmNfbWFwLnNjYW4pICYmIChyY190eXBlID09IFJDX1RZUEVfTkVDKSkKKwkJaXItPmtleV9hZGRyID0gKChyYy0+cmNfbWFwLnNjYW5bMF0uc2NhbmNvZGUgPj4gOCkgJiAweGZmZmYpOwogCiAJaXItPmdldF9rZXkgPSBkZWZhdWx0X3BvbGxpbmdfZ2V0a2V5OworCWlyLT5yY190eXBlID0gcmNfdHlwZTsKIAogCXRtNjAwMF9pcl9jb25maWcoaXIpOwogCS8qIFRPRE8gKi8KIAlyZXR1cm4gMDsKIH0KIAoraW50IHRtNjAwMF9pcl9pbnRfc3RhcnQoc3RydWN0IHRtNjAwMF9jb3JlICpkZXYpCit7CisJc3RydWN0IHRtNjAwMF9JUiAqaXIgPSBkZXYtPmlyOworCWludCBwaXBlLCBzaXplOworCWludCBlcnIgPSAtRU5PTUVNOworCisKKwlpZiAoIWlyKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlyLT5pbnRfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKworCXBpcGUgPSB1c2JfcmN2aW50cGlwZShkZXYtPnVkZXYsCisJCWRldi0+aW50X2luLmVuZHAtPmRlc2MuYkVuZHBvaW50QWRkcmVzcworCQkmIFVTQl9FTkRQT0lOVF9OVU1CRVJfTUFTSyk7CisKKwlzaXplID0gdXNiX21heHBhY2tldChkZXYtPnVkZXYsIHBpcGUsIHVzYl9waXBlb3V0KHBpcGUpKTsKKwlkcHJpbnRrKCJJUiBtYXggc2l6ZTogJWRcbiIsIHNpemUpOworCisJaXItPmludF91cmItPnRyYW5zZmVyX2J1ZmZlciA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKGlyLT5pbnRfdXJiLT50cmFuc2Zlcl9idWZmZXIgPT0gTlVMTCkgeworCQl1c2JfZnJlZV91cmIoaXItPmludF91cmIpOworCQlyZXR1cm4gZXJyOworCX0KKwlkcHJpbnRrKCJpbnQgaW50ZXJ2YWw6ICVkXG4iLCBkZXYtPmludF9pbi5lbmRwLT5kZXNjLmJJbnRlcnZhbCk7CisJdXNiX2ZpbGxfaW50X3VyYihpci0+aW50X3VyYiwgZGV2LT51ZGV2LCBwaXBlLAorCQlpci0+aW50X3VyYi0+dHJhbnNmZXJfYnVmZmVyLCBzaXplLAorCQl0bTYwMDBfaXJfdXJiX3JlY2VpdmVkLCBkZXYsCisJCWRldi0+aW50X2luLmVuZHAtPmRlc2MuYkludGVydmFsKTsKKwllcnIgPSB1c2Jfc3VibWl0X3VyYihpci0+aW50X3VyYiwgR0ZQX0tFUk5FTCk7CisJaWYgKGVycikgeworCQlrZnJlZShpci0+aW50X3VyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKwkJdXNiX2ZyZWVfdXJiKGlyLT5pbnRfdXJiKTsKKwkJcmV0dXJuIGVycjsKKwl9CisJaXItPnVyYl9kYXRhID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKworCXJldHVybiAwOworfQorCit2b2lkIHRtNjAwMF9pcl9pbnRfc3RvcChzdHJ1Y3QgdG02MDAwX2NvcmUgKmRldikKK3sKKwlzdHJ1Y3QgdG02MDAwX0lSICppciA9IGRldi0+aXI7CisKKwlpZiAoIWlyKQorCQlyZXR1cm47CisKKwl1c2Jfa2lsbF91cmIoaXItPmludF91cmIpOworCWtmcmVlKGlyLT5pbnRfdXJiLT50cmFuc2Zlcl9idWZmZXIpOworCXVzYl9mcmVlX3VyYihpci0+aW50X3VyYik7CisJaXItPmludF91cmIgPSBOVUxMOworCWtmcmVlKGlyLT51cmJfZGF0YSk7CisJaXItPnVyYl9kYXRhID0gTlVMTDsKK30KKwogaW50IHRtNjAwMF9pcl9pbml0KHN0cnVjdCB0bTYwMDBfY29yZSAqZGV2KQogewogCXN0cnVjdCB0bTYwMDBfSVIgKmlyOwotCXN0cnVjdCBpcl9pbnB1dF9kZXYgKmlyX2lucHV0X2RldjsKKwlzdHJ1Y3QgcmNfZGV2ICpyYzsKIAlpbnQgZXJyID0gLUVOT01FTTsKLQlpbnQgcGlwZSwgc2l6ZSwgcmM7CiAKIAlpZiAoIWVuYWJsZV9pcikKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC0yNjMsMjYgKzM3MywyNyBAQAogCQlyZXR1cm4gMDsKIAogCWlyID0ga3phbGxvYyhzaXplb2YoKmlyKSwgR0ZQX0tFUk5FTCk7Ci0JaXJfaW5wdXRfZGV2ID0ga3phbGxvYyhzaXplb2YoKmlyX2lucHV0X2RldiksIEdGUF9LRVJORUwpOwotCWlyX2lucHV0X2Rldi0+aW5wdXRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7Ci0JaWYgKCFpciB8fCAhaXJfaW5wdXRfZGV2IHx8ICFpcl9pbnB1dF9kZXYtPmlucHV0X2RldikKLQkJZ290byBlcnJfb3V0X2ZyZWU7CisJcmMgPSByY19hbGxvY2F0ZV9kZXZpY2UoKTsKKwlpZiAoIWlyIHwgIXJjKQorCQlnb3RvIG91dDsKIAogCS8qIHJlY29yZCBoYW5kbGVzIHRvIG91cnNlbGYgKi8KIAlpci0+ZGV2ID0gZGV2OwogCWRldi0+aXIgPSBpcjsKLQotCWlyLT5pbnB1dCA9IGlyX2lucHV0X2RldjsKKwlpci0+cmMgPSByYzsKIAogCS8qIGlucHV0IGVpbnJpY2h0ZW4gKi8KLQlpci0+cHJvcHMuYWxsb3dlZF9wcm90b3MgPSBJUl9UWVBFX1JDNSB8IElSX1RZUEVfTkVDOwotCWlyLT5wcm9wcy5wcml2ID0gaXI7Ci0JaXItPnByb3BzLmNoYW5nZV9wcm90b2NvbCA9IHRtNjAwMF9pcl9jaGFuZ2VfcHJvdG9jb2w7Ci0JaXItPnByb3BzLm9wZW4gPSB0bTYwMDBfaXJfc3RhcnQ7Ci0JaXItPnByb3BzLmNsb3NlID0gdG02MDAwX2lyX3N0b3A7Ci0JaXItPnByb3BzLmRyaXZlcl90eXBlID0gUkNfRFJJVkVSX1NDQU5DT0RFOworCXJjLT5hbGxvd2VkX3Byb3RvcyA9IFJDX1RZUEVfUkM1IHwgUkNfVFlQRV9ORUM7CisJcmMtPnByaXYgPSBpcjsKKwlyYy0+Y2hhbmdlX3Byb3RvY29sID0gdG02MDAwX2lyX2NoYW5nZV9wcm90b2NvbDsKKwlyYy0+b3BlbiA9IHRtNjAwMF9pcl9zdGFydDsKKwlyYy0+Y2xvc2UgPSB0bTYwMDBfaXJfc3RvcDsKKwlyYy0+ZHJpdmVyX3R5cGUgPSBSQ19EUklWRVJfU0NBTkNPREU7CiAKIAlpci0+cG9sbGluZyA9IDUwOworCWlyLT5wd2xlZCA9IDA7CisJaXItPnB3bGVkY250ID0gMDsKKwogCiAJc25wcmludGYoaXItPm5hbWUsIHNpemVvZihpci0+bmFtZSksICJ0bTU2MDAvNjB4MCBJUiAoJXMpIiwKIAkJCQkJCWRldi0+bmFtZSk7CkBAIC0yOTAsNjQgKzQwMSwzNyBAQAogCXVzYl9tYWtlX3BhdGgoZGV2LT51ZGV2LCBpci0+cGh5cywgc2l6ZW9mKGlyLT5waHlzKSk7CiAJc3RybGNhdChpci0+cGh5cywgIi9pbnB1dDAiLCBzaXplb2YoaXItPnBoeXMpKTsKIAotCXRtNjAwMF9pcl9jaGFuZ2VfcHJvdG9jb2woaXIsIElSX1RZUEVfVU5LTk9XTik7Ci0JZXJyID0gaXJfaW5wdXRfaW5pdChpcl9pbnB1dF9kZXYtPmlucHV0X2RldiwgJmlyLT5pciwgSVJfVFlQRV9PVEhFUik7Ci0JaWYgKGVyciA8IDApCi0JCWdvdG8gZXJyX291dF9mcmVlOworCXRtNjAwMF9pcl9jaGFuZ2VfcHJvdG9jb2wocmMsIFJDX1RZUEVfVU5LTk9XTik7CiAKLQlpcl9pbnB1dF9kZXYtPmlucHV0X2Rldi0+bmFtZSA9IGlyLT5uYW1lOwotCWlyX2lucHV0X2Rldi0+aW5wdXRfZGV2LT5waHlzID0gaXItPnBoeXM7Ci0JaXJfaW5wdXRfZGV2LT5pbnB1dF9kZXYtPmlkLmJ1c3R5cGUgPSBCVVNfVVNCOwotCWlyX2lucHV0X2Rldi0+aW5wdXRfZGV2LT5pZC52ZXJzaW9uID0gMTsKLQlpcl9pbnB1dF9kZXYtPmlucHV0X2Rldi0+aWQudmVuZG9yID0gbGUxNl90b19jcHUoZGV2LT51ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKTsKLQlpcl9pbnB1dF9kZXYtPmlucHV0X2Rldi0+aWQucHJvZHVjdCA9IGxlMTZfdG9fY3B1KGRldi0+dWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpOwotCi0JaXJfaW5wdXRfZGV2LT5pbnB1dF9kZXYtPmRldi5wYXJlbnQgPSAmZGV2LT51ZGV2LT5kZXY7CisJcmMtPmlucHV0X25hbWUgPSBpci0+bmFtZTsKKwlyYy0+aW5wdXRfcGh5cyA9IGlyLT5waHlzOworCXJjLT5pbnB1dF9pZC5idXN0eXBlID0gQlVTX1VTQjsKKwlyYy0+aW5wdXRfaWQudmVyc2lvbiA9IDE7CisJcmMtPmlucHV0X2lkLnZlbmRvciA9IGxlMTZfdG9fY3B1KGRldi0+dWRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcik7CisJcmMtPmlucHV0X2lkLnByb2R1Y3QgPSBsZTE2X3RvX2NwdShkZXYtPnVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KTsKKwlyYy0+bWFwX25hbWUgPSBkZXYtPmlyX2NvZGVzOworCXJjLT5kcml2ZXJfbmFtZSA9ICJ0bTYwMDAiOworCXJjLT5kZXYucGFyZW50ID0gJmRldi0+dWRldi0+ZGV2OwogCiAJaWYgKCZkZXYtPmludF9pbikgewogCQlkcHJpbnRrKCJJUiBvdmVyIGludFxuIik7CiAKLQkJaXItPmludF91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCQllcnIgPSB0bTYwMDBfaXJfaW50X3N0YXJ0KGRldik7CiAKLQkJcGlwZSA9IHVzYl9yY3ZpbnRwaXBlKGRldi0+dWRldiwKLQkJCWRldi0+aW50X2luLmVuZHAtPmRlc2MuYkVuZHBvaW50QWRkcmVzcwotCQkJJiBVU0JfRU5EUE9JTlRfTlVNQkVSX01BU0spOwotCi0JCXNpemUgPSB1c2JfbWF4cGFja2V0KGRldi0+dWRldiwgcGlwZSwgdXNiX3BpcGVvdXQocGlwZSkpOwotCQlkcHJpbnRrKCJJUiBtYXggc2l6ZTogJWRcbiIsIHNpemUpOwotCi0JCWlyLT5pbnRfdXJiLT50cmFuc2Zlcl9idWZmZXIgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwotCQlpZiAoaXItPmludF91cmItPnRyYW5zZmVyX2J1ZmZlciA9PSBOVUxMKSB7Ci0JCQl1c2JfZnJlZV91cmIoaXItPmludF91cmIpOwotCQkJZ290byBlcnJfb3V0X3N0b3A7Ci0JCX0KLQkJZHByaW50aygiaW50IGludGVydmFsOiAlZFxuIiwgZGV2LT5pbnRfaW4uZW5kcC0+ZGVzYy5iSW50ZXJ2YWwpOwotCQl1c2JfZmlsbF9pbnRfdXJiKGlyLT5pbnRfdXJiLCBkZXYtPnVkZXYsIHBpcGUsCi0JCQlpci0+aW50X3VyYi0+dHJhbnNmZXJfYnVmZmVyLCBzaXplLAotCQkJdG02MDAwX2lyX3VyYl9yZWNlaXZlZCwgZGV2LAotCQkJZGV2LT5pbnRfaW4uZW5kcC0+ZGVzYy5iSW50ZXJ2YWwpOwotCQlyYyA9IHVzYl9zdWJtaXRfdXJiKGlyLT5pbnRfdXJiLCBHRlBfS0VSTkVMKTsKLQkJaWYgKHJjKSB7Ci0JCQlrZnJlZShpci0+aW50X3VyYi0+dHJhbnNmZXJfYnVmZmVyKTsKLQkJCXVzYl9mcmVlX3VyYihpci0+aW50X3VyYik7Ci0JCQllcnIgPSByYzsKLQkJCWdvdG8gZXJyX291dF9zdG9wOwotCQl9Ci0JCWlyLT51cmJfZGF0YSA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCWlmIChlcnIpCisJCQlnb3RvIG91dDsKIAl9CiAKIAkvKiBpciByZWdpc3RlciAqLwotCWVyciA9IGlyX2lucHV0X3JlZ2lzdGVyKGlyLT5pbnB1dC0+aW5wdXRfZGV2LCBkZXYtPmlyX2NvZGVzLAotCQkmaXItPnByb3BzLCAidG02MDAwIik7CisJZXJyID0gcmNfcmVnaXN0ZXJfZGV2aWNlKHJjKTsKIAlpZiAoZXJyKQotCQlnb3RvIGVycl9vdXRfc3RvcDsKKwkJZ290byBvdXQ7CiAKIAlyZXR1cm4gMDsKIAotZXJyX291dF9zdG9wOgorb3V0OgogCWRldi0+aXIgPSBOVUxMOwotZXJyX291dF9mcmVlOgotCWtmcmVlKGlyX2lucHV0X2Rldik7CisJcmNfZnJlZV9kZXZpY2UocmMpOwogCWtmcmVlKGlyKTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtMzYxLDE5ICs0NDUsMTIgQEAKIAlpZiAoIWlyKQogCQlyZXR1cm4gMDsKIAotCWlyX2lucHV0X3VucmVnaXN0ZXIoaXItPmlucHV0LT5pbnB1dF9kZXYpOworCXJjX3VucmVnaXN0ZXJfZGV2aWNlKGlyLT5yYyk7CiAKIAlpZiAoaXItPmludF91cmIpIHsKLQkJdXNiX2tpbGxfdXJiKGlyLT5pbnRfdXJiKTsKLQkJa2ZyZWUoaXItPmludF91cmItPnRyYW5zZmVyX2J1ZmZlcik7Ci0JCXVzYl9mcmVlX3VyYihpci0+aW50X3VyYik7Ci0JCWlyLT5pbnRfdXJiID0gTlVMTDsKLQkJa2ZyZWUoaXItPnVyYl9kYXRhKTsKLQkJaXItPnVyYl9kYXRhID0gTlVMTDsKKwkJdG02MDAwX2lyX2ludF9zdG9wKGRldik7CiAJfQogCi0Ja2ZyZWUoaXItPmlucHV0KTsKLQlpci0+aW5wdXQgPSBOVUxMOwogCWtmcmVlKGlyKTsKIAlkZXYtPmlyID0gTlVMTDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RtNjAwMC90bTYwMDAtdmlkZW8uYyBiL2RyaXZlcnMvc3RhZ2luZy90bTYwMDAvdG02MDAwLXZpZGVvLmMKaW5kZXggYzU2OTBiMi4uOGZlMDE3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3RtNjAwMC90bTYwMDAtdmlkZW8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdG02MDAwL3RtNjAwMC12aWRlby5jCkBAIC01NDUsMTEgKzU0NSwxNiBAQAogCiAJLyogRGUtYWxsb2NhdGVzIGFsbCBwZW5kaW5nIHN0dWZmICovCiAJdG02MDAwX3VuaW5pdF9pc29jKGRldik7CisJLyogU3RvcCBpbnRlcnJ1cHQgVVNCIHBpcGUgKi8KKwl0bTYwMDBfaXJfaW50X3N0b3AoZGV2KTsKIAogCXVzYl9zZXRfaW50ZXJmYWNlKGRldi0+dWRldiwKIAkJCSAgZGV2LT5pc29jX2luLmJJbnRlcmZhY2VOdW1iZXIsCiAJCQkgIGRldi0+aXNvY19pbi5iQWx0ZXJuYXRlU2V0dGluZyk7CiAKKwkvKiBTdGFydCBpbnRlcnJ1cHQgVVNCIHBpcGUgKi8KKwl0bTYwMDBfaXJfaW50X3N0YXJ0KGRldik7CisKIAlwaXBlID0gdXNiX3Jjdmlzb2NwaXBlKGRldi0+dWRldiwKIAkJCSAgICAgICBkZXYtPmlzb2NfaW4uZW5kcC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzICYKIAkJCSAgICAgICBVU0JfRU5EUE9JTlRfTlVNQkVSX01BU0spOwpAQCAtOTg2LDE1ICs5OTEsNiBAQAogCQkJCWZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKIH0KIAotI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAotc3RhdGljIGludCB2aWRpb2NnbWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHZpZGVvX21idWYgKm1idWYpCi17Ci0Jc3RydWN0IHRtNjAwMF9maCAgKmZoID0gcHJpdjsKLQotCXJldHVybiB2aWRlb2J1Zl9jZ21idWYoJmZoLT52Yl92aWRxLCBtYnVmLCA4KTsKLX0KLSNlbmRpZgotCiBzdGF0aWMgaW50IHZpZGlvY19zdHJlYW1vbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgZW51bSB2NGwyX2J1Zl90eXBlIGkpCiB7CiAJc3RydWN0IHRtNjAwMF9maCAgKmZoID0gcHJpdjsKQEAgLTE0MzgsOSArMTQzNCw2IEBACiAJLnZpZGlvY19xdWVyeWJ1ZiAgICAgICAgICA9IHZpZGlvY19xdWVyeWJ1ZiwKIAkudmlkaW9jX3FidWYgICAgICAgICAgICAgID0gdmlkaW9jX3FidWYsCiAJLnZpZGlvY19kcWJ1ZiAgICAgICAgICAgICA9IHZpZGlvY19kcWJ1ZiwKLSNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKLQkudmlkaW9jZ21idWYgICAgICAgICAgICAgID0gdmlkaW9jZ21idWYsCi0jZW5kaWYKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIHRtNjAwMF90ZW1wbGF0ZSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90bTYwMDAvdG02MDAwLmggYi9kcml2ZXJzL3N0YWdpbmcvdG02MDAwL3RtNjAwMC5oCmluZGV4IDQ2MDE3YjYuLmJmMTFlZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy90bTYwMDAvdG02MDAwLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RtNjAwMC90bTYwMDAuaApAQCAtMjY2LDYgKzI2Niw3IEBACiBpbnQgdG02MDAwX3R1bmVyX2NhbGxiYWNrKHZvaWQgKnB0ciwgaW50IGNvbXBvbmVudCwgaW50IGNvbW1hbmQsIGludCBhcmcpOwogaW50IHRtNjAwMF94YzUwMDBfY2FsbGJhY2sodm9pZCAqcHRyLCBpbnQgY29tcG9uZW50LCBpbnQgY29tbWFuZCwgaW50IGFyZyk7CiBpbnQgdG02MDAwX2NhcmRzX3NldHVwKHN0cnVjdCB0bTYwMDBfY29yZSAqZGV2KTsKK3ZvaWQgdG02MDAwX2ZsYXNoX2xlZChzdHJ1Y3QgdG02MDAwX2NvcmUgKmRldiwgdTggc3RhdGUpOwogCiAvKiBJbiB0bTYwMDAtY29yZS5jICovCiAKQEAgLTMzMiw2ICszMzMsOCBAQAogaW50IHRtNjAwMF9pcl9pbml0KHN0cnVjdCB0bTYwMDBfY29yZSAqZGV2KTsKIGludCB0bTYwMDBfaXJfZmluaShzdHJ1Y3QgdG02MDAwX2NvcmUgKmRldik7CiB2b2lkIHRtNjAwMF9pcl93YWl0KHN0cnVjdCB0bTYwMDBfY29yZSAqZGV2LCB1OCBzdGF0ZSk7CitpbnQgdG02MDAwX2lyX2ludF9zdGFydChzdHJ1Y3QgdG02MDAwX2NvcmUgKmRldik7Cit2b2lkIHRtNjAwMF9pcl9pbnRfc3RvcChzdHJ1Y3QgdG02MDAwX2NvcmUgKmRldik7CiAKIC8qIERlYnVnIHN0dWZmICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91ZGxmYi9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL3VkbGZiL0tjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1YmQ1ZGIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3VkbGZiL0tjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi1jb25maWcgRkJfVURMCi0JdHJpc3RhdGUgIkRpc3BsYXlsaW5rIFVTQiBGcmFtZWJ1ZmZlciBzdXBwb3J0IgotCWRlcGVuZHMgb24gRkIgJiYgVVNCCi0Jc2VsZWN0IEZCX01PREVfSEVMUEVSUwotCXNlbGVjdCBGQl9TWVNfRklMTFJFQ1QKLQlzZWxlY3QgRkJfU1lTX0NPUFlBUkVBCi0Jc2VsZWN0IEZCX1NZU19JTUFHRUJMSVQKLQlzZWxlY3QgRkJfU1lTX0ZPUFMKLQlzZWxlY3QgRkJfREVGRVJSRURfSU8KLQktLS1oZWxwLS0tCi0JICBUaGlzIGlzIGEga2VybmVsIGZyYW1lYnVmZmVyIGRyaXZlciBmb3IgRGlzcGxheUxpbmsgVVNCIGRldmljZXMuCi0JICBTdXBwb3J0cyBmYmRldiBjbGllbnRzIGxpa2UgeGY4Ni12aWRlby1mYmRldiwga2RyaXZlLCBmYmksIGFuZAotCSAgbXBsYXllciAtdm8gZmJkZXYuIFN1cHBvcnRzIGFsbCBVU0IgMi4wIGVyYSBEaXNwbGF5TGluayBkZXZpY2VzLgotCSAgVG8gY29tcGlsZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSBuYW1lIGlzIHVkbGZiLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VkbGZiL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL3VkbGZiL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMGQ5ZTY3Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy91ZGxmYi9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLW9iai0kKENPTkZJR19GQl9VREwpCQkrPSB1ZGxmYi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdWRsZmIvdWRsZmIuYyBiL2RyaXZlcnMvc3RhZ2luZy91ZGxmYi91ZGxmYi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiN2FjMTYwLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy91ZGxmYi91ZGxmYi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTkxNiArMCwwIEBACi0vKgotICogdWRsZmIuYyAtLSBGcmFtZWJ1ZmZlciBkcml2ZXIgZm9yIERpc3BsYXlMaW5rIFVTQiBjb250cm9sbGVyCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA5IFJvYmVydG8gRGUgSW9yaXMgPHJvYmVydG9AdW5iaXQuaXQ+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmF5YSBLdW1hciA8amF5YWt1bWFyLmxrbWxAZ21haWwuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA5IEJlcm5pZSBUaG9tcHNvbiA8YmVybmllQHBsdWdhYmxlLmNvbT4KLSAqCi0gKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSB2Mi4gU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3IKLSAqIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBMYXlvdXQgaXMgYmFzZWQgb24gc2tlbGV0b25mYiBieSBKYW1lcyBTaW1tb25zIGFuZCBHZWVydCBVeXR0ZXJob2V2ZW4sCi0gKiB1c2Itc2tlbGV0b24gYnkgR3JlZ0tILgotICoKLSAqIERldmljZS1zcGVjaWZpYyBwb3J0aW9ucyBiYXNlZCBvbiBpbmZvcm1hdGlvbiBmcm9tIERpc3BsYXlsaW5rLCB3aXRoIHdvcmsKLSAqIGZyb20gRmxvcmlhbiBFY2h0bGVyLCBIZW5yaWsgQmplcnJlZ2FhcmQgUGVkZXJzZW4sIGFuZCBvdGhlcnMuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC91c2IuaD4KLSNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9mYi5oPgotI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLQotI2luY2x1ZGUgInVkbGZiLmgiCi0KLXN0YXRpYyBzdHJ1Y3QgZmJfZml4X3NjcmVlbmluZm8gZGxmYl9maXggPSB7Ci0JLmlkID0gICAgICAgICAgICJ1ZGxmYiIsCi0JLnR5cGUgPSAgICAgICAgIEZCX1RZUEVfUEFDS0VEX1BJWEVMUywKLQkudmlzdWFsID0gICAgICAgRkJfVklTVUFMX1RSVUVDT0xPUiwKLQkueHBhbnN0ZXAgPSAgICAgMCwKLQkueXBhbnN0ZXAgPSAgICAgMCwKLQkueXdyYXBzdGVwID0gICAgMCwKLQkuYWNjZWwgPSAgICAgICAgRkJfQUNDRUxfTk9ORSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1MzIgdWRsZmJfaW5mb19mbGFncyA9IEZCSU5GT19ERUZBVUxUIHwgRkJJTkZPX1JFQURTX0ZBU1QgfAotI2lmZGVmIEZCSU5GT19WSVJURkIKLQkJRkJJTkZPX1ZJUlRGQiB8Ci0jZW5kaWYKLQkJRkJJTkZPX0hXQUNDRUxfSU1BR0VCTElUIHwgRkJJTkZPX0hXQUNDRUxfRklMTFJFQ1QgfAotCQlGQklORk9fSFdBQ0NFTF9DT1BZQVJFQSB8IEZCSU5GT19NSVNDX0FMV0FZU19TRVRQQVI7Ci0KLS8qCi0gKiBUaGVyZSBhcmUgbWFueSBEaXNwbGF5TGluay1iYXNlZCBwcm9kdWN0cywgYWxsIHdpdGggdW5pcXVlIFBJRHMuIFdlIGFyZSBhYmxlCi0gKiB0byBzdXBwb3J0IGFsbCB2b2x1bWUgb25lcyAoY2lyY2EgMjAwOSkgd2l0aCBhIHNpbmdsZSBkcml2ZXIsIHNvIHdlIG1hdGNoCi0gKiBnbG9iYWxseSBvbiBWSUQuIFRPRE86IFByb2JlKCkgbmVlZHMgdG8gZGV0ZWN0IHdoZW4gd2UgbWlnaHQgYmUgcnVubmluZwotICogImZ1dHVyZSIgY2hpcHMsIGFuZCBiYWlsIG9uIHRob3NlLCBzbyBhIGNvbXBhdGlibGUgZHJpdmVyIGNhbiBtYXRjaC4KLSAqLwotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7Ci0Jey5pZFZlbmRvciA9IDB4MTdlOSwgLm1hdGNoX2ZsYWdzID0gVVNCX0RFVklDRV9JRF9NQVRDSF9WRU5ET1IsfSwKLQl7fSwKLX07Ci1NT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgaWRfdGFibGUpOwotCi0vKiBtb2R1bGUgb3B0aW9ucyAqLwotc3RhdGljIGludCBjb25zb2xlOyAgIC8qIE9wdGlvbmFsbHkgYWxsb3cgZmJjb24gdG8gY29uc3VtZSBmaXJzdCBmcmFtZWJ1ZmZlciAqLwotc3RhdGljIGludCBmYl9kZWZpbzsgIC8qIE9wdGlvbmFsbHkgZW5hYmxlIGV4cGVyaW1lbnRhbCBmYl9kZWZpbyBtbWFwIHN1cHBvcnQgKi8KLQotLyogZGxmYiBrZWVwcyBhIGxpc3Qgb2YgdXJicyBmb3IgZWZmaWNpZW50IGJ1bGsgdHJhbnNmZXJzICovCi1zdGF0aWMgdm9pZCBkbGZiX3VyYl9jb21wbGV0aW9uKHN0cnVjdCB1cmIgKnVyYik7Ci1zdGF0aWMgc3RydWN0IHVyYiAqZGxmYl9nZXRfdXJiKHN0cnVjdCBkbGZiX2RhdGEgKmRldik7Ci1zdGF0aWMgaW50IGRsZmJfc3VibWl0X3VyYihzdHJ1Y3QgZGxmYl9kYXRhICpkZXYsIHN0cnVjdCB1cmIgKiB1cmIsIHNpemVfdCBsZW4pOwotc3RhdGljIGludCBkbGZiX2FsbG9jX3VyYl9saXN0KHN0cnVjdCBkbGZiX2RhdGEgKmRldiwgaW50IGNvdW50LCBzaXplX3Qgc2l6ZSk7Ci1zdGF0aWMgdm9pZCBkbGZiX2ZyZWVfdXJiX2xpc3Qoc3RydWN0IGRsZmJfZGF0YSAqZGV2KTsKLQotLyoKLSAqIEFsbCBEaXNwbGF5TGluayBidWxrIG9wZXJhdGlvbnMgc3RhcnQgd2l0aCAweEFGLCBmb2xsb3dlZCBieSBzcGVjaWZpYyBjb2RlCi0gKiBBbGwgb3BlcmF0aW9ucyBhcmUgd3JpdHRlbiB0byBidWZmZXJzIHdoaWNoIHRoZW4gbGF0ZXIgZ2V0IHNlbnQgdG8gZGV2aWNlCi0gKi8KLXN0YXRpYyBjaGFyICpkbGZiX3NldF9yZWdpc3RlcihjaGFyICpidWYsIHU4IHJlZywgdTggdmFsKQotewotCSpidWYrKyA9IDB4QUY7Ci0JKmJ1ZisrID0gMHgyMDsKLQkqYnVmKysgPSByZWc7Ci0JKmJ1ZisrID0gdmFsOwotCXJldHVybiBidWY7Ci19Ci0KLXN0YXRpYyBjaGFyICpkbGZiX3ZpZHJlZ19sb2NrKGNoYXIgKmJ1ZikKLXsKLQlyZXR1cm4gZGxmYl9zZXRfcmVnaXN0ZXIoYnVmLCAweEZGLCAweDAwKTsKLX0KLQotc3RhdGljIGNoYXIgKmRsZmJfdmlkcmVnX3VubG9jayhjaGFyICpidWYpCi17Ci0JcmV0dXJuIGRsZmJfc2V0X3JlZ2lzdGVyKGJ1ZiwgMHhGRiwgMHhGRik7Ci19Ci0KLS8qCi0gKiBPbi9PZmYgZm9yIGRyaXZpbmcgdGhlIERpc3BsYXlMaW5rIGZyYW1lYnVmZmVyIHRvIHRoZSBkaXNwbGF5Ci0gKiAgMHgwMCBIIGFuZCBWIHN5bmMgb24KLSAqICAweDAxIEggYW5kIFYgc3luYyBvZmYgKHNjcmVlbiBibGFuayBidXQgcG93ZXJlZCkKLSAqICAweDA3IERQTVMgcG93ZXJkb3duIChyZXF1aXJlcyBtb2Rlc2V0IHRvIGNvbWUgYmFjaykKLSAqLwotc3RhdGljIGNoYXIgKmRsZmJfZW5hYmxlX2h2c3luYyhjaGFyICpidWYsIGJvb2wgZW5hYmxlKQotewotCWlmIChlbmFibGUpCi0JCXJldHVybiBkbGZiX3NldF9yZWdpc3RlcihidWYsIDB4MUYsIDB4MDApOwotCWVsc2UKLQkJcmV0dXJuIGRsZmJfc2V0X3JlZ2lzdGVyKGJ1ZiwgMHgxRiwgMHgwNyk7Ci19Ci0KLXN0YXRpYyBjaGFyICpkbGZiX3NldF9jb2xvcl9kZXB0aChjaGFyICpidWYsIHU4IHNlbGVjdGlvbikKLXsKLQlyZXR1cm4gZGxmYl9zZXRfcmVnaXN0ZXIoYnVmLCAweDAwLCBzZWxlY3Rpb24pOwotfQotCi1zdGF0aWMgY2hhciAqZGxmYl9zZXRfYmFzZTE2YnBwKGNoYXIgKndycHRyLCB1MzIgYmFzZSkKLXsKLQkvKiB0aGUgYmFzZSBwb2ludGVyIGlzIDE2IGJpdHMgd2lkZSwgMHgyMCBpcyBoaSBieXRlLiAqLwotCXdycHRyID0gZGxmYl9zZXRfcmVnaXN0ZXIod3JwdHIsIDB4MjAsIGJhc2UgPj4gMTYpOwotCXdycHRyID0gZGxmYl9zZXRfcmVnaXN0ZXIod3JwdHIsIDB4MjEsIGJhc2UgPj4gOCk7Ci0JcmV0dXJuIGRsZmJfc2V0X3JlZ2lzdGVyKHdycHRyLCAweDIyLCBiYXNlKTsKLX0KLQotLyoKLSAqIERpc3BsYXlMaW5rIEhXIGhhcyBzZXBhcmF0ZSAxNmJwcCBhbmQgOGJwcCBmcmFtZWJ1ZmZlcnMuCi0gKiBJbiAyNGJwcCBtb2RlcywgdGhlIGxvdyAzMjMgUkdCIGJpdHMgZ28gaW4gdGhlIDhicHAgZnJhbWVidWZmZXIKLSAqLwotc3RhdGljIGNoYXIgKmRsZmJfc2V0X2Jhc2U4YnBwKGNoYXIgKndycHRyLCB1MzIgYmFzZSkKLXsKLQl3cnB0ciA9IGRsZmJfc2V0X3JlZ2lzdGVyKHdycHRyLCAweDI2LCBiYXNlID4+IDE2KTsKLQl3cnB0ciA9IGRsZmJfc2V0X3JlZ2lzdGVyKHdycHRyLCAweDI3LCBiYXNlID4+IDgpOwotCXJldHVybiBkbGZiX3NldF9yZWdpc3Rlcih3cnB0ciwgMHgyOCwgYmFzZSk7Ci19Ci0KLXN0YXRpYyBjaGFyICpkbGZiX3NldF9yZWdpc3Rlcl8xNihjaGFyICp3cnB0ciwgdTggcmVnLCB1MTYgdmFsdWUpCi17Ci0Jd3JwdHIgPSBkbGZiX3NldF9yZWdpc3Rlcih3cnB0ciwgcmVnLCB2YWx1ZSA+PiA4KTsKLQlyZXR1cm4gZGxmYl9zZXRfcmVnaXN0ZXIod3JwdHIsIHJlZysxLCB2YWx1ZSk7Ci19Ci0KLS8qCi0gKiBUaGlzIGlzIGtpbmQgb2Ygd2VpcmQgYmVjYXVzZSB0aGUgY29udHJvbGxlciB0YWtlcyBzb21lCi0gKiByZWdpc3RlciB2YWx1ZXMgaW4gYSBkaWZmZXJlbnQgYnl0ZSBvcmRlciB0aGFuIG90aGVyIHJlZ2lzdGVycy4KLSAqLwotc3RhdGljIGNoYXIgKmRsZmJfc2V0X3JlZ2lzdGVyXzE2YmUoY2hhciAqd3JwdHIsIHU4IHJlZywgdTE2IHZhbHVlKQotewotCXdycHRyID0gZGxmYl9zZXRfcmVnaXN0ZXIod3JwdHIsIHJlZywgdmFsdWUpOwotCXJldHVybiBkbGZiX3NldF9yZWdpc3Rlcih3cnB0ciwgcmVnKzEsIHZhbHVlID4+IDgpOwotfQotCi0vKgotICogTEZTUiBpcyBsaW5lYXIgZmVlZGJhY2sgc2hpZnQgcmVnaXN0ZXIuIFRoZSByZWFzb24gd2UgaGF2ZSB0aGlzIGlzCi0gKiBiZWNhdXNlIHRoZSBkaXNwbGF5IGNvbnRyb2xsZXIgbmVlZHMgdG8gbWluaW1pemUgdGhlIGNsb2NrIGRlcHRoIG9mCi0gKiB2YXJpb3VzIGNvdW50ZXJzIHVzZWQgaW4gdGhlIGRpc3BsYXkgcGF0aC4gU28gdGhpcyBjb2RlIHJldmVyc2VzIHRoZQotICogcHJvdmlkZWQgdmFsdWUgaW50byB0aGUgbGZzcjE2IHZhbHVlIGJ5IGNvdW50aW5nIGJhY2t3YXJkcyB0byBnZXQKLSAqIHRoZSB2YWx1ZSB0aGF0IG5lZWRzIHRvIGJlIHNldCBpbiB0aGUgaGFyZHdhcmUgY29tcGFyYXRvciB0byBnZXQgdGhlCi0gKiBzYW1lIGFjdHVhbCBjb3VudC4gVGhpcyBtYWtlcyBzZW5zZSBvbmNlIHlvdSByZWFkIGFib3ZlIGEgY291cGxlIG9mCi0gKiB0aW1lcyBhbmQgdGhpbmsgYWJvdXQgaXQgZnJvbSBhIGhhcmR3YXJlIHBlcnNwZWN0aXZlLgotICovCi1zdGF0aWMgdTE2IGRsZmJfbGZzcjE2KHUxNiBhY3R1YWxfY291bnQpCi17Ci0JdTMyIGx2ID0gMHhGRkZGOyAvKiBUaGlzIGlzIHRoZSBsZnNyIHZhbHVlIHRoYXQgdGhlIGh3IHN0YXJ0cyB3aXRoICovCi0KLQl3aGlsZSAoYWN0dWFsX2NvdW50LS0pIHsKLQkJbHYgPQkgKChsdiA8PCAxKSB8Ci0JCQkoKChsdiA+PiAxNSkgXiAobHYgPj4gNCkgXiAobHYgPj4gMikgXiAobHYgPj4gMSkpICYgMSkpCi0JCQkmIDB4RkZGRjsKLQl9Ci0KLQlyZXR1cm4gKHUxNikgbHY7Ci19Ci0KLS8qCi0gKiBUaGlzIGRvZXMgTEZTUiBjb252ZXJzaW9uIG9uIHRoZSB2YWx1ZSB0aGF0IGlzIHRvIGJlIHdyaXR0ZW4uCi0gKiBTZWUgTEZTUiBleHBsYW5hdGlvbiBhYm92ZSBmb3IgbW9yZSBkZXRhaWwuCi0gKi8KLXN0YXRpYyBjaGFyICpkbGZiX3NldF9yZWdpc3Rlcl9sZnNyMTYoY2hhciAqd3JwdHIsIHU4IHJlZywgdTE2IHZhbHVlKQotewotCXJldHVybiBkbGZiX3NldF9yZWdpc3Rlcl8xNih3cnB0ciwgcmVnLCBkbGZiX2xmc3IxNih2YWx1ZSkpOwotfQotCi0vKgotICogVGhpcyB0YWtlcyBhIHN0YW5kYXJkIGZiZGV2IHNjcmVlbmluZm8gc3RydWN0IGFuZCBhbGwgb2YgaXRzIG1vbml0b3IgbW9kZQotICogZGV0YWlscyBhbmQgY29udmVydHMgdGhlbSBpbnRvIHRoZSBEaXNwbGF5TGluayBlcXVpdmFsZW50IHJlZ2lzdGVyIGNvbW1hbmRzLgotICovCi1zdGF0aWMgY2hhciAqZGxmYl9zZXRfdmlkX2NtZHMoY2hhciAqd3JwdHIsIHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyKQotewotCXUxNiB4ZHMsIHlkczsKLQl1MTYgeGRlLCB5ZGU7Ci0JdTE2IHllYzsKLQotCS8qIHggZGlzcGxheSBzdGFydCAqLwotCXhkcyA9IHZhci0+bGVmdF9tYXJnaW4gKyB2YXItPmhzeW5jX2xlbjsKLQl3cnB0ciA9IGRsZmJfc2V0X3JlZ2lzdGVyX2xmc3IxNih3cnB0ciwgMHgwMSwgeGRzKTsKLQkvKiB4IGRpc3BsYXkgZW5kICovCi0JeGRlID0geGRzICsgdmFyLT54cmVzOwotCXdycHRyID0gZGxmYl9zZXRfcmVnaXN0ZXJfbGZzcjE2KHdycHRyLCAweDAzLCB4ZGUpOwotCi0JLyogeSBkaXNwbGF5IHN0YXJ0ICovCi0JeWRzID0gdmFyLT51cHBlcl9tYXJnaW4gKyB2YXItPnZzeW5jX2xlbjsKLQl3cnB0ciA9IGRsZmJfc2V0X3JlZ2lzdGVyX2xmc3IxNih3cnB0ciwgMHgwNSwgeWRzKTsKLQkvKiB5IGRpc3BsYXkgZW5kICovCi0JeWRlID0geWRzICsgdmFyLT55cmVzOwotCXdycHRyID0gZGxmYl9zZXRfcmVnaXN0ZXJfbGZzcjE2KHdycHRyLCAweDA3LCB5ZGUpOwotCi0JLyogeCBlbmQgY291bnQgaXMgYWN0aXZlICsgYmxhbmtpbmcgLSAxICovCi0Jd3JwdHIgPSBkbGZiX3NldF9yZWdpc3Rlcl9sZnNyMTYod3JwdHIsIDB4MDksCi0JCQl4ZGUgKyB2YXItPnJpZ2h0X21hcmdpbiAtIDEpOwotCi0JLyogbGliZGxvIGhhcmRjb2RlcyBoc3luYyBzdGFydCB0byAxICovCi0Jd3JwdHIgPSBkbGZiX3NldF9yZWdpc3Rlcl9sZnNyMTYod3JwdHIsIDB4MEIsIDEpOwotCi0JLyogaHN5bmMgZW5kIGlzIHdpZHRoIG9mIHN5bmMgcHVsc2UgKyAxICovCi0Jd3JwdHIgPSBkbGZiX3NldF9yZWdpc3Rlcl9sZnNyMTYod3JwdHIsIDB4MEQsIHZhci0+aHN5bmNfbGVuICsgMSk7Ci0KLQkvKiBocGl4ZWxzIGlzIGFjdGl2ZSBwaXhlbHMgKi8KLQl3cnB0ciA9IGRsZmJfc2V0X3JlZ2lzdGVyXzE2KHdycHRyLCAweDBGLCB2YXItPnhyZXMpOwotCi0JLyogeWVuZGNvdW50IGlzIHZlcnRpY2FsIGFjdGl2ZSArIHZlcnRpY2FsIGJsYW5raW5nICovCi0JeWVjID0gdmFyLT55cmVzICsgdmFyLT51cHBlcl9tYXJnaW4gKyB2YXItPmxvd2VyX21hcmdpbiArCi0JCQl2YXItPnZzeW5jX2xlbjsKLQl3cnB0ciA9IGRsZmJfc2V0X3JlZ2lzdGVyX2xmc3IxNih3cnB0ciwgMHgxMSwgeWVjKTsKLQotCS8qIGxpYmRsbyBoYXJkY29kZXMgdnN5bmMgc3RhcnQgdG8gMCAqLwotCXdycHRyID0gZGxmYl9zZXRfcmVnaXN0ZXJfbGZzcjE2KHdycHRyLCAweDEzLCAwKTsKLQotCS8qIHZzeW5jIGVuZCBpcyB3aWR0aCBvZiB2c3luYyBwdWxzZSAqLwotCXdycHRyID0gZGxmYl9zZXRfcmVnaXN0ZXJfbGZzcjE2KHdycHRyLCAweDE1LCB2YXItPnZzeW5jX2xlbik7Ci0KLQkvKiB2cGl4ZWxzIGlzIGFjdGl2ZSBwaXhlbHMgKi8KLQl3cnB0ciA9IGRsZmJfc2V0X3JlZ2lzdGVyXzE2KHdycHRyLCAweDE3LCB2YXItPnlyZXMpOwotCi0JLyogY29udmVydCBwaWNvc2Vjb25kcyB0byA1a0h6IG11bHRpcGxlIGZvciBwY2xrNWsgPSB4ICogMUUxMi81ayAqLwotCXdycHRyID0gZGxmYl9zZXRfcmVnaXN0ZXJfMTZiZSh3cnB0ciwgMHgxQiwKLQkJCTIwMCoxMDAwKjEwMDAvdmFyLT5waXhjbG9jayk7Ci0KLQlyZXR1cm4gd3JwdHI7Ci19Ci0KLS8qCi0gKiBUaGlzIHRha2VzIGEgc3RhbmRhcmQgZmJkZXYgc2NyZWVuaW5mbyBzdHJ1Y3QgdGhhdCB3YXMgZmV0Y2hlZCBvciBwcmVwYXJlZAotICogYW5kIHRoZW4gZ2VuZXJhdGVzIHRoZSBhcHByb3ByaWF0ZSBjb21tYW5kIHNlcXVlbmNlIHRoYXQgdGhlbiBkcml2ZXMgdGhlCi0gKiBkaXNwbGF5IGNvbnRyb2xsZXIuCi0gKi8KLXN0YXRpYyBpbnQgZGxmYl9zZXRfdmlkZW9fbW9kZShzdHJ1Y3QgZGxmYl9kYXRhICpkZXYsCi0JCQkJc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIpCi17Ci0JY2hhciAqYnVmOwotCWNoYXIgKndycHRyOwotCWludCByZXR2YWwgPSAwOwotCWludCB3cml0ZXNpemU7Ci0Jc3RydWN0IHVyYiAqdXJiOwotCi0JaWYgKCFhdG9taWNfcmVhZCgmZGV2LT51c2JfYWN0aXZlKSkKLQkJcmV0dXJuIC1FUEVSTTsKLQotCXVyYiA9IGRsZmJfZ2V0X3VyYihkZXYpOwotCWlmICghdXJiKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWJ1ZiA9IChjaGFyICopIHVyYi0+dHJhbnNmZXJfYnVmZmVyOwotCi0JLyoKLQkqIFRoaXMgZmlyc3Qgc2VjdGlvbiBoYXMgdG8gZG8gd2l0aCBzZXR0aW5nIHRoZSBiYXNlIGFkZHJlc3Mgb24gdGhlCi0JKiBjb250cm9sbGVyICogYXNzb2NpYXRlZCB3aXRoIHRoZSBkaXNwbGF5LiBUaGVyZSBhcmUgMiBiYXNlCi0JKiBwb2ludGVycywgY3VycmVudGx5LCB3ZSBvbmx5ICogdXNlIHRoZSAxNiBicHAgc2VnbWVudC4KLQkqLwotCXdycHRyID0gZGxmYl92aWRyZWdfbG9jayhidWYpOwotCXdycHRyID0gZGxmYl9zZXRfY29sb3JfZGVwdGgod3JwdHIsIDB4MDApOwotCS8qIHNldCBiYXNlIGZvciAxNmJwcCBzZWdtZW50IHRvIDAgKi8KLQl3cnB0ciA9IGRsZmJfc2V0X2Jhc2UxNmJwcCh3cnB0ciwgMCk7Ci0JLyogc2V0IGJhc2UgZm9yIDhicHAgc2VnbWVudCB0byBlbmQgb2YgZmIgKi8KLQl3cnB0ciA9IGRsZmJfc2V0X2Jhc2U4YnBwKHdycHRyLCBkZXYtPmluZm8tPmZpeC5zbWVtX2xlbik7Ci0KLQl3cnB0ciA9IGRsZmJfc2V0X3ZpZF9jbWRzKHdycHRyLCB2YXIpOwotCXdycHRyID0gZGxmYl9lbmFibGVfaHZzeW5jKHdycHRyLCB0cnVlKTsKLQl3cnB0ciA9IGRsZmJfdmlkcmVnX3VubG9jayh3cnB0cik7Ci0KLQl3cml0ZXNpemUgPSB3cnB0ciAtIGJ1ZjsKLQotCXJldHZhbCA9IGRsZmJfc3VibWl0X3VyYihkZXYsIHVyYiwgd3JpdGVzaXplKTsKLQotCXJldHVybiByZXR2YWw7Ci19Ci0KLXN0YXRpYyBpbnQgZGxmYl9vcHNfbW1hcChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCi17Ci0JdW5zaWduZWQgbG9uZyBzdGFydCA9IHZtYS0+dm1fc3RhcnQ7Ci0JdW5zaWduZWQgbG9uZyBzaXplID0gdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0OwotCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gdm1hLT52bV9wZ29mZiA8PCBQQUdFX1NISUZUOwotCXVuc2lnbmVkIGxvbmcgcGFnZSwgcG9zOwotCi0JaWYgKG9mZnNldCArIHNpemUgPiBpbmZvLT5maXguc21lbV9sZW4pCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcG9zID0gKHVuc2lnbmVkIGxvbmcpaW5mby0+Zml4LnNtZW1fc3RhcnQgKyBvZmZzZXQ7Ci0KLQlkbF9ub3RpY2UoIm1tYXAoKSBmcmFtZWJ1ZmZlciBhZGRyOiVsdSBzaXplOiVsdVxuIiwKLQkJICBwb3MsIHNpemUpOwotCi0Jd2hpbGUgKHNpemUgPiAwKSB7Ci0JCXBhZ2UgPSB2bWFsbG9jX3RvX3Bmbigodm9pZCAqKXBvcyk7Ci0JCWlmIChyZW1hcF9wZm5fcmFuZ2Uodm1hLCBzdGFydCwgcGFnZSwgUEFHRV9TSVpFLCBQQUdFX1NIQVJFRCkpCi0JCQlyZXR1cm4gLUVBR0FJTjsKLQotCQlzdGFydCArPSBQQUdFX1NJWkU7Ci0JCXBvcyArPSBQQUdFX1NJWkU7Ci0JCWlmIChzaXplID4gUEFHRV9TSVpFKQotCQkJc2l6ZSAtPSBQQUdFX1NJWkU7Ci0JCWVsc2UKLQkJCXNpemUgPSAwOwotCX0KLQotCXZtYS0+dm1fZmxhZ3MgfD0gVk1fUkVTRVJWRUQ7CS8qIGF2b2lkIHRvIHN3YXAgb3V0IHRoaXMgVk1BICovCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBUcmltcyBpZGVudGljYWwgZGF0YSBmcm9tIGZyb250IGFuZCBiYWNrIG9mIGxpbmUKLSAqIFNldHMgbmV3IGZyb250IGJ1ZmZlciBhZGRyZXNzIGFuZCB3aWR0aAotICogQW5kIHJldHVybnMgYnl0ZSBjb3VudCBvZiBpZGVudGljYWwgcGl4ZWxzCi0gKiBBc3N1bWVzIENQVSBuYXR1cmFsIGFsaWdubWVudCAodW5zaWduZWQgbG9uZykKLSAqIGZvciBiYWNrIGFuZCBmcm9udCBidWZmZXIgcHRycyBhbmQgd2lkdGgKLSAqLwotc3RhdGljIGludCBkbGZiX3RyaW1faGxpbmUoY29uc3QgdTggKmJiYWNrLCBjb25zdCB1OCAqKmJmcm9udCwgaW50ICp3aWR0aF9ieXRlcykKLXsKLQlpbnQgaiwgazsKLQljb25zdCB1bnNpZ25lZCBsb25nICpiYWNrID0gKGNvbnN0IHVuc2lnbmVkIGxvbmcgKikgYmJhY2s7Ci0JY29uc3QgdW5zaWduZWQgbG9uZyAqZnJvbnQgPSAoY29uc3QgdW5zaWduZWQgbG9uZyAqKSAqYmZyb250OwotCWNvbnN0IGludCB3aWR0aCA9ICp3aWR0aF9ieXRlcyAvIHNpemVvZih1bnNpZ25lZCBsb25nKTsKLQlpbnQgaWRlbnRpY2FsID0gd2lkdGg7Ci0JaW50IHN0YXJ0ID0gd2lkdGg7Ci0JaW50IGVuZCA9IHdpZHRoOwotCi0JcHJlZmV0Y2goKHZvaWQgKikgZnJvbnQpOwotCXByZWZldGNoKCh2b2lkICopIGJhY2spOwotCi0JZm9yIChqID0gMDsgaiA8IHdpZHRoOyBqKyspIHsKLQkJaWYgKGJhY2tbal0gIT0gZnJvbnRbal0pIHsKLQkJCXN0YXJ0ID0gajsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JZm9yIChrID0gd2lkdGggLSAxOyBrID4gajsgay0tKSB7Ci0JCWlmIChiYWNrW2tdICE9IGZyb250W2tdKSB7Ci0JCQllbmQgPSBrKzE7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCWlkZW50aWNhbCA9IHN0YXJ0ICsgKHdpZHRoIC0gZW5kKTsKLQkqYmZyb250ID0gKHU4ICopICZmcm9udFtzdGFydF07Ci0JKndpZHRoX2J5dGVzID0gKGVuZCAtIHN0YXJ0KSAqIHNpemVvZih1bnNpZ25lZCBsb25nKTsKLQotCXJldHVybiBpZGVudGljYWwgKiBzaXplb2YodW5zaWduZWQgbG9uZyk7Ci19Ci0KLS8qCi0gKiBSZW5kZXIgYSBjb21tYW5kIHN0cmVhbSBmb3IgYW4gZW5jb2RlZCBob3Jpem9udGFsIGxpbmUgc2VnbWVudCBvZiBwaXhlbHMuCi0gKgotICogQSBjb21tYW5kIGJ1ZmZlciBob2xkcyBzZXZlcmFsIGNvbW1hbmRzLgotICogSXQgYWx3YXlzIGJlZ2lucyB3aXRoIGEgZnJlc2ggY29tbWFuZCBoZWFkZXIKLSAqICh0aGUgcHJvdG9jb2wgZG9lc24ndCByZXF1aXJlIHRoaXMsIGJ1dCB3ZSBlbmZvcmNlIGl0IHRvIGFsbG93Ci0gKiBtdWx0aXBsZSBidWZmZXJzIHRvIGJlIHBvdGVudGlhbGx5IGVuY29kZWQgYW5kIHNlbnQgaW4gcGFyYWxsZWwpLgotICogQSBzaW5nbGUgY29tbWFuZCBlbmNvZGVzIG9uZSBjb250aWd1b3VzIGhvcml6b250YWwgbGluZSBvZiBwaXhlbHMKLSAqCi0gKiBUaGUgZnVuY3Rpb24gcmVsaWVzIG9uIHRoZSBjbGllbnQgdG8gZG8gYWxsIGFsbG9jYXRpb24sIHNvIHRoYXQKLSAqIHJlbmRlcmluZyBjYW4gYmUgZG9uZSBkaXJlY3RseSB0byBvdXRwdXQgYnVmZmVycyAoZS5nLiBVU0IgVVJCcykuCi0gKiBUaGUgZnVuY3Rpb24gZmlsbHMgdGhlIHN1cHBsaWVkIGNvbW1hbmQgYnVmZmVyLCBwcm92aWRpbmcgaW5mb3JtYXRpb24KLSAqIG9uIHdoZXJlIGl0IGxlZnQgb2ZmLCBzbyB0aGUgY2xpZW50IG1heSBjYWxsIGluIGFnYWluIHdpdGggYWRkaXRpb25hbAotICogYnVmZmVycyBpZiB0aGUgbGluZSB3aWxsIHRha2Ugc2V2ZXJhbCBidWZmZXJzIHRvIGNvbXBsZXRlLgotICoKLSAqIEEgc2luZ2xlIGNvbW1hbmQgY2FuIHRyYW5zbWl0IGEgbWF4aW11bSBvZiAyNTYgcGl4ZWxzLAotICogcmVnYXJkbGVzcyBvZiB0aGUgY29tcHJlc3Npb24gcmF0aW8gKHByb3RvY29sIGRlc2lnbiBsaW1pdCkuCi0gKiBUbyB0aGUgaGFyZHdhcmUsIDAgZm9yIGEgc2l6ZSBieXRlIG1lYW5zIDI1NgotICoKLSAqIFJhdGhlciB0aGFuIDI1NiBwaXhlbCBjb21tYW5kcyB3aGljaCBhcmUgZWl0aGVyIHJsIG9yIHJhdyBlbmNvZGVkLAotICogdGhlIHJseCBjb21tYW5kIHNpbXBseSBhc3N1bWVzIGFsdGVybmF0aW5nIHJhdyBhbmQgcmwgc3BhbnMgd2l0aGluIG9uZSBjbWQuCi0gKiBUaGlzIGhhcyBhIHNsaWdodGx5IGxhcmdlciBoZWFkZXIgb3ZlcmhlYWQsIGJ1dCBwcm9kdWNlcyBtb3JlIGV2ZW4gcmVzdWx0cy4KLSAqIEl0IGFsc28gcHJvY2Vzc2VzIGFsbCBkYXRhIChyZWFkIGFuZCB3cml0ZSkgaW4gYSBzaW5nbGUgcGFzcy4KLSAqIFBlcmZvcm1hbmNlIGJlbmNobWFya3Mgb2YgY29tbW9uIGNhc2VzIHNob3cgaXQgaGF2aW5nIGp1c3Qgc2xpZ2h0bHkgYmV0dGVyCi0gKiBjb21wcmVzc2lvbiB0aGFuIDI1NiBwaXhlbCByYXcgb3IgcmxlIGNvbW1hbmRzLCB3aXRoIHNpbWlsYXIgQ1BVIGNvbnN1bXBpb24uCi0gKiBCdXQgZm9yIHZlcnkgcmwgZnJpZW5kbHkgZGF0YSwgd2lsbCBjb21wcmVzcyBub3QgcXVpdGUgYXMgd2VsbC4KLSAqLwotc3RhdGljIHZvaWQgZGxmYl9jb21wcmVzc19obGluZSgKLQljb25zdCB1aW50MTZfdCAqKnBpeGVsX3N0YXJ0X3B0ciwKLQljb25zdCB1aW50MTZfdCAqY29uc3QgcGl4ZWxfZW5kLAotCXVpbnQzMl90ICpkZXZpY2VfYWRkcmVzc19wdHIsCi0JdWludDhfdCAqKmNvbW1hbmRfYnVmZmVyX3B0ciwKLQljb25zdCB1aW50OF90ICpjb25zdCBjbWRfYnVmZmVyX2VuZCkKLXsKLQljb25zdCB1aW50MTZfdCAqcGl4ZWwgPSAqcGl4ZWxfc3RhcnRfcHRyOwotCXVpbnQzMl90IGRldl9hZGRyICA9ICpkZXZpY2VfYWRkcmVzc19wdHI7Ci0JdWludDhfdCAqY21kID0gKmNvbW1hbmRfYnVmZmVyX3B0cjsKLQljb25zdCBpbnQgYnBwID0gMjsKLQotCXdoaWxlICgocGl4ZWxfZW5kID4gcGl4ZWwpICYmCi0JICAgICAgIChjbWRfYnVmZmVyX2VuZCAtIE1JTl9STFhfQ01EX0JZVEVTID4gY21kKSkgewotCQl1aW50OF90ICpyYXdfcGl4ZWxzX2NvdW50X2J5dGUgPSAwOwotCQl1aW50OF90ICpjbWRfcGl4ZWxzX2NvdW50X2J5dGUgPSAwOwotCQljb25zdCB1aW50MTZfdCAqcmF3X3BpeGVsX3N0YXJ0ID0gMDsKLQkJY29uc3QgdWludDE2X3QgKmNtZF9waXhlbF9zdGFydCwgKmNtZF9waXhlbF9lbmQgPSAwOwotCi0JCXByZWZldGNodygodm9pZCAqKSBjbWQpOyAvKiBwdWxsIGluIG9uZSBjYWNoZSBsaW5lIGF0IGxlYXN0ICovCi0KLQkJKmNtZCsrID0gMHhBRjsKLQkJKmNtZCsrID0gMHg2QjsKLQkJKmNtZCsrID0gKHVpbnQ4X3QpICgoZGV2X2FkZHIgPj4gMTYpICYgMHhGRik7Ci0JCSpjbWQrKyA9ICh1aW50OF90KSAoKGRldl9hZGRyID4+IDgpICYgMHhGRik7Ci0JCSpjbWQrKyA9ICh1aW50OF90KSAoKGRldl9hZGRyKSAmIDB4RkYpOwotCi0JCWNtZF9waXhlbHNfY291bnRfYnl0ZSA9IGNtZCsrOyAvKiAgd2UnbGwga25vdyB0aGlzIGxhdGVyICovCi0JCWNtZF9waXhlbF9zdGFydCA9IHBpeGVsOwotCi0JCXJhd19waXhlbHNfY291bnRfYnl0ZSA9IGNtZCsrOyAvKiAgd2UnbGwga25vdyB0aGlzIGxhdGVyICovCi0JCXJhd19waXhlbF9zdGFydCA9IHBpeGVsOwotCi0JCWNtZF9waXhlbF9lbmQgPSBwaXhlbCArIG1pbihNQVhfQ01EX1BJWEVMUyArIDEsCi0JCQltaW4oKGludCkocGl4ZWxfZW5kIC0gcGl4ZWwpLAotCQkJICAgIChpbnQpKGNtZF9idWZmZXJfZW5kIC0gY21kKSAvIGJwcCkpOwotCi0JCXByZWZldGNoX3JhbmdlKCh2b2lkICopIHBpeGVsLCAoY21kX3BpeGVsX2VuZCAtIHBpeGVsKSAqIGJwcCk7Ci0KLQkJd2hpbGUgKHBpeGVsIDwgY21kX3BpeGVsX2VuZCkgewotCQkJY29uc3QgdWludDE2X3QgKiBjb25zdCByZXBlYXRpbmdfcGl4ZWwgPSBwaXhlbDsKLQotCQkJKih1aW50MTZfdCAqKWNtZCA9IGNwdV90b19iZTE2cChwaXhlbCk7Ci0JCQljbWQgKz0gMjsKLQkJCXBpeGVsKys7Ci0KLQkJCWlmICh1bmxpa2VseSgocGl4ZWwgPCBjbWRfcGl4ZWxfZW5kKSAmJgotCQkJCSAgICAgKCpwaXhlbCA9PSAqcmVwZWF0aW5nX3BpeGVsKSkpIHsKLQkJCQkvKiBnbyBiYWNrIGFuZCBmaWxsIGluIHJhdyBwaXhlbCBjb3VudCAqLwotCQkJCSpyYXdfcGl4ZWxzX2NvdW50X2J5dGUgPSAoKHJlcGVhdGluZ19waXhlbCAtCi0JCQkJCQlyYXdfcGl4ZWxfc3RhcnQpICsgMSkgJiAweEZGOwotCi0JCQkJd2hpbGUgKChwaXhlbCA8IGNtZF9waXhlbF9lbmQpCi0JCQkJICAgICAgICYmICgqcGl4ZWwgPT0gKnJlcGVhdGluZ19waXhlbCkpIHsKLQkJCQkJcGl4ZWwrKzsKLQkJCQl9Ci0KLQkJCQkvKiBpbW1lZGlhdGVseSBhZnRlciByYXcgZGF0YSBpcyByZXBlYXQgYnl0ZSAqLwotCQkJCSpjbWQrKyA9ICgocGl4ZWwgLSByZXBlYXRpbmdfcGl4ZWwpIC0gMSkgJiAweEZGOwotCi0JCQkJLyogVGhlbiBzdGFydCBhbm90aGVyIHJhdyBwaXhlbCBzcGFuICovCi0JCQkJcmF3X3BpeGVsX3N0YXJ0ID0gcGl4ZWw7Ci0JCQkJcmF3X3BpeGVsc19jb3VudF9ieXRlID0gY21kKys7Ci0JCQl9Ci0JCX0KLQotCQlpZiAocGl4ZWwgPiByYXdfcGl4ZWxfc3RhcnQpIHsKLQkJCS8qIGZpbmFsaXplIGxhc3QgUkFXIHNwYW4gKi8KLQkJCSpyYXdfcGl4ZWxzX2NvdW50X2J5dGUgPSAocGl4ZWwtcmF3X3BpeGVsX3N0YXJ0KSAmIDB4RkY7Ci0JCX0KLQotCQkqY21kX3BpeGVsc19jb3VudF9ieXRlID0gKHBpeGVsIC0gY21kX3BpeGVsX3N0YXJ0KSAmIDB4RkY7Ci0JCWRldl9hZGRyICs9IChwaXhlbCAtIGNtZF9waXhlbF9zdGFydCkgKiBicHA7Ci0JfQotCi0JaWYgKGNtZF9idWZmZXJfZW5kIDw9IE1JTl9STFhfQ01EX0JZVEVTICsgY21kKSB7Ci0JCS8qIEZpbGwgbGVmdG92ZXIgYnl0ZXMgd2l0aCBuby1vcHMgKi8KLQkJaWYgKGNtZF9idWZmZXJfZW5kID4gY21kKQotCQkJbWVtc2V0KGNtZCwgMHhBRiwgY21kX2J1ZmZlcl9lbmQgLSBjbWQpOwotCQljbWQgPSAodWludDhfdCAqKSBjbWRfYnVmZmVyX2VuZDsKLQl9Ci0KLQkqY29tbWFuZF9idWZmZXJfcHRyID0gY21kOwotCSpwaXhlbF9zdGFydF9wdHIgPSBwaXhlbDsKLQkqZGV2aWNlX2FkZHJlc3NfcHRyID0gZGV2X2FkZHI7Ci0KLQlyZXR1cm47Ci19Ci0KLS8qCi0gKiBUaGVyZSBhcmUgMyBjb3BpZXMgb2YgZXZlcnkgcGl4ZWw6IFRoZSBmcm9udCBidWZmZXIgdGhhdCB0aGUgZmJkZXYKLSAqIGNsaWVudCByZW5kZXJzIHRvLCB0aGUgYWN0dWFsIGZyYW1lYnVmZmVyIGFjcm9zcyB0aGUgVVNCIGJ1cyBpbiBoYXJkd2FyZQotICogKHRoYXQgd2UgY2FuIG9ubHkgd3JpdGUgdG8sIHNsb3dseSwgYW5kIGNhbiBuZXZlciByZWFkKSwgYW5kIChvcHRpb25hbGx5KQotICogb3VyIHNoYWRvdyBjb3B5IHRoYXQgdHJhY2tzIHdoYXQncyBiZWVuIHNlbnQgdG8gdGhhdCBoYXJkd2FyZSBidWZmZXIuCi0gKi8KLXN0YXRpYyBpbnQgZGxmYl9yZW5kZXJfaGxpbmUoc3RydWN0IGRsZmJfZGF0YSAqZGV2LCBzdHJ1Y3QgdXJiICoqdXJiX3B0ciwKLQkJCSAgICAgIGNvbnN0IGNoYXIgKmZyb250LCBjaGFyICoqdXJiX2J1Zl9wdHIsCi0JCQkgICAgICB1MzIgYnl0ZV9vZmZzZXQsIHUzMiBieXRlX3dpZHRoLAotCQkJICAgICAgaW50ICppZGVudF9wdHIsIGludCAqc2VudF9wdHIpCi17Ci0JY29uc3QgdTggKmxpbmVfc3RhcnQsICpsaW5lX2VuZCwgKm5leHRfcGl4ZWw7Ci0JdTMyIGRldl9hZGRyID0gZGV2LT5iYXNlMTYgKyBieXRlX29mZnNldDsKLQlzdHJ1Y3QgdXJiICp1cmIgPSAqdXJiX3B0cjsKLQl1OCAqY21kID0gKnVyYl9idWZfcHRyOwotCXU4ICpjbWRfZW5kID0gKHU4ICopIHVyYi0+dHJhbnNmZXJfYnVmZmVyICsgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoOwotCi0JbGluZV9zdGFydCA9ICh1OCAqKSAoZnJvbnQgKyBieXRlX29mZnNldCk7Ci0JbmV4dF9waXhlbCA9IGxpbmVfc3RhcnQ7Ci0JbGluZV9lbmQgPSBuZXh0X3BpeGVsICsgYnl0ZV93aWR0aDsKLQotCWlmIChkZXYtPmJhY2tpbmdfYnVmZmVyKSB7Ci0JCWludCBvZmZzZXQ7Ci0JCWNvbnN0IHU4ICpiYWNrX3N0YXJ0ID0gKHU4ICopIChkZXYtPmJhY2tpbmdfYnVmZmVyCi0JCQkJCQkrIGJ5dGVfb2Zmc2V0KTsKLQotCQkqaWRlbnRfcHRyICs9IGRsZmJfdHJpbV9obGluZShiYWNrX3N0YXJ0LCAmbmV4dF9waXhlbCwKLQkJCSZieXRlX3dpZHRoKTsKLQotCQlvZmZzZXQgPSBuZXh0X3BpeGVsIC0gbGluZV9zdGFydDsKLQkJbGluZV9lbmQgPSBuZXh0X3BpeGVsICsgYnl0ZV93aWR0aDsKLQkJZGV2X2FkZHIgKz0gb2Zmc2V0OwotCQliYWNrX3N0YXJ0ICs9IG9mZnNldDsKLQkJbGluZV9zdGFydCArPSBvZmZzZXQ7Ci0KLQkJbWVtY3B5KChjaGFyICopYmFja19zdGFydCwgKGNoYXIgKikgbGluZV9zdGFydCwKLQkJICAgICAgIGJ5dGVfd2lkdGgpOwotCX0KLQotCXdoaWxlIChuZXh0X3BpeGVsIDwgbGluZV9lbmQpIHsKLQotCQlkbGZiX2NvbXByZXNzX2hsaW5lKChjb25zdCB1aW50MTZfdCAqKikgJm5leHRfcGl4ZWwsCi0JCQkgICAgIChjb25zdCB1aW50MTZfdCAqKSBsaW5lX2VuZCwgJmRldl9hZGRyLAotCQkJKHU4ICoqKSAmY21kLCAodTggKikgY21kX2VuZCk7Ci0KLQkJaWYgKGNtZCA+PSBjbWRfZW5kKSB7Ci0JCQlpbnQgbGVuID0gY21kIC0gKHU4ICopIHVyYi0+dHJhbnNmZXJfYnVmZmVyOwotCQkJaWYgKGRsZmJfc3VibWl0X3VyYihkZXYsIHVyYiwgbGVuKSkKLQkJCQlyZXR1cm4gMTsgLyogbG9zdCBwaXhlbHMgaXMgc2V0ICovCi0JCQkqc2VudF9wdHIgKz0gbGVuOwotCQkJdXJiID0gZGxmYl9nZXRfdXJiKGRldik7Ci0JCQlpZiAoIXVyYikKLQkJCQlyZXR1cm4gMTsgLyogbG9zdF9waXhlbHMgaXMgc2V0ICovCi0JCQkqdXJiX3B0ciA9IHVyYjsKLQkJCWNtZCA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOwotCQkJY21kX2VuZCA9ICZjbWRbdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoXTsKLQkJfQotCX0KLQotCSp1cmJfYnVmX3B0ciA9IGNtZDsKLQotCXJldHVybiAwOwotfQotCi1pbnQgZGxmYl9oYW5kbGVfZGFtYWdlKHN0cnVjdCBkbGZiX2RhdGEgKmRldiwgaW50IHgsIGludCB5LAotCSAgICAgICBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGNoYXIgKmRhdGEpCi17Ci0JaW50IGksIHJldDsKLQljaGFyICpjbWQ7Ci0JY3ljbGVzX3Qgc3RhcnRfY3ljbGVzLCBlbmRfY3ljbGVzOwotCWludCBieXRlc19zZW50ID0gMDsKLQlpbnQgYnl0ZXNfaWRlbnRpY2FsID0gMDsKLQlzdHJ1Y3QgdXJiICp1cmI7Ci0JaW50IGFsaWduZWRfeDsKLQotCXN0YXJ0X2N5Y2xlcyA9IGdldF9jeWNsZXMoKTsKLQotCWFsaWduZWRfeCA9IERMX0FMSUdOX0RPV04oeCwgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKLQl3aWR0aCA9IERMX0FMSUdOX1VQKHdpZHRoICsgKHgtYWxpZ25lZF94KSwgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKLQl4ID0gYWxpZ25lZF94OwotCi0JaWYgKCh3aWR0aCA8PSAwKSB8fAotCSAgICAoeCArIHdpZHRoID4gZGV2LT5pbmZvLT52YXIueHJlcykgfHwKLQkgICAgKHkgKyBoZWlnaHQgPiBkZXYtPmluZm8tPnZhci55cmVzKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoIWF0b21pY19yZWFkKCZkZXYtPnVzYl9hY3RpdmUpKQotCQlyZXR1cm4gMDsKLQotCXVyYiA9IGRsZmJfZ2V0X3VyYihkZXYpOwotCWlmICghdXJiKQotCQlyZXR1cm4gMDsKLQljbWQgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKLQotCWZvciAoaSA9IHk7IGkgPCB5ICsgaGVpZ2h0IDsgaSsrKSB7Ci0JCWNvbnN0IGludCBsaW5lX29mZnNldCA9IGRldi0+aW5mby0+Zml4LmxpbmVfbGVuZ3RoICogaTsKLQkJY29uc3QgaW50IGJ5dGVfb2Zmc2V0ID0gbGluZV9vZmZzZXQgKyAoeCAqIEJQUCk7Ci0KLQkJaWYgKGRsZmJfcmVuZGVyX2hsaW5lKGRldiwgJnVyYiwKLQkJCQkgICAgICAoY2hhciAqKSBkZXYtPmluZm8tPmZpeC5zbWVtX3N0YXJ0LAotCQkJCSAgICAgICZjbWQsIGJ5dGVfb2Zmc2V0LCB3aWR0aCAqIEJQUCwKLQkJCQkgICAgICAmYnl0ZXNfaWRlbnRpY2FsLCAmYnl0ZXNfc2VudCkpCi0JCQlnb3RvIGVycm9yOwotCX0KLQotCWlmIChjbWQgPiAoY2hhciAqKSB1cmItPnRyYW5zZmVyX2J1ZmZlcikgewotCQkvKiBTZW5kIHBhcnRpYWwgYnVmZmVyIHJlbWFpbmluZyBiZWZvcmUgZXhpdGluZyAqLwotCQlpbnQgbGVuID0gY21kIC0gKGNoYXIgKikgdXJiLT50cmFuc2Zlcl9idWZmZXI7Ci0JCXJldCA9IGRsZmJfc3VibWl0X3VyYihkZXYsIHVyYiwgbGVuKTsKLQkJYnl0ZXNfc2VudCArPSBsZW47Ci0JfSBlbHNlCi0JCWRsZmJfdXJiX2NvbXBsZXRpb24odXJiKTsKLQotZXJyb3I6Ci0JYXRvbWljX2FkZChieXRlc19zZW50LCAmZGV2LT5ieXRlc19zZW50KTsKLQlhdG9taWNfYWRkKGJ5dGVzX2lkZW50aWNhbCwgJmRldi0+Ynl0ZXNfaWRlbnRpY2FsKTsKLQlhdG9taWNfYWRkKHdpZHRoKmhlaWdodCoyLCAmZGV2LT5ieXRlc19yZW5kZXJlZCk7Ci0JZW5kX2N5Y2xlcyA9IGdldF9jeWNsZXMoKTsKLQlhdG9taWNfYWRkKCgodW5zaWduZWQgaW50KSAoKGVuZF9jeWNsZXMgLSBzdGFydF9jeWNsZXMpCi0JCSAgICA+PiAxMCkpLCAvKiBLY3ljbGVzICovCi0JCSAgICZkZXYtPmNwdV9rY3ljbGVzX3VzZWQpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGRsZmJfb3BzX3JlYWQoc3RydWN0IGZiX2luZm8gKmluZm8sIGNoYXIgX191c2VyICpidWYsCi0JCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCi17Ci0Jc3NpemVfdCByZXN1bHQgPSAtRU5PU1lTOwotCi0jaWYgZGVmaW5lZCBDT05GSUdfRkJfU1lTX0ZPUFMgfHwgZGVmaW5lZCBDT05GSUdfRkJfU1lTX0ZPUFNfTU9EVUxFCi0JcmVzdWx0ID0gZmJfc3lzX3JlYWQoaW5mbywgYnVmLCBjb3VudCwgcHBvcyk7Ci0jZW5kaWYKLQotCXJldHVybiByZXN1bHQ7Ci19Ci0KLS8qCi0gKiBQYXRoIHRyaWdnZXJlZCBieSB1c2VybW9kZSBjbGllbnRzIHdobyB3cml0ZSB0byBmaWxlc3lzdGVtCi0gKiBlLmcuIGNhdCBmaWxlbmFtZSA+IC9kZXYvZmIxCi0gKiBOb3QgdXNlZCBieSBYIFdpbmRvd3Mgb3IgdGV4dC1tb2RlIGNvbnNvbGUuIEJ1dCB1c2VmdWwgZm9yIHRlc3RpbmcuCi0gKiBTbG93IGJlY2F1c2Ugb2YgZXh0cmEgY29weSBhbmQgd2UgbXVzdCBhc3N1bWUgYWxsIHBpeGVscyBkaXJ0eS4KLSAqLwotc3RhdGljIHNzaXplX3QgZGxmYl9vcHNfd3JpdGUoc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IGNoYXIgX191c2VyICpidWYsCi0JCQkgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQotewotCXNzaXplX3QgcmVzdWx0ID0gLUVOT1NZUzsKLQlzdHJ1Y3QgZGxmYl9kYXRhICpkZXYgPSBpbmZvLT5wYXI7Ci0JdTMyIG9mZnNldCA9ICh1MzIpICpwcG9zOwotCi0jaWYgZGVmaW5lZCBDT05GSUdfRkJfU1lTX0ZPUFMgfHwgZGVmaW5lZCBDT05GSUdfRkJfU1lTX0ZPUFNfTU9EVUxFCi0KLQlyZXN1bHQgPSBmYl9zeXNfd3JpdGUoaW5mbywgYnVmLCBjb3VudCwgcHBvcyk7Ci0KLQlpZiAocmVzdWx0ID4gMCkgewotCQlpbnQgc3RhcnQgPSBtYXgoKGludCkob2Zmc2V0IC8gaW5mby0+Zml4LmxpbmVfbGVuZ3RoKSAtIDEsIDApOwotCQlpbnQgbGluZXMgPSBtaW4oKHUzMikoKHJlc3VsdCAvIGluZm8tPmZpeC5saW5lX2xlbmd0aCkgKyAxKSwKLQkJCQkodTMyKWluZm8tPnZhci55cmVzKTsKLQotCQlkbGZiX2hhbmRsZV9kYW1hZ2UoZGV2LCAwLCBzdGFydCwgaW5mby0+dmFyLnhyZXMsCi0JCQlsaW5lcywgaW5mby0+c2NyZWVuX2Jhc2UpOwotCX0KLSNlbmRpZgotCi0JcmV0dXJuIHJlc3VsdDsKLX0KLQotLyogaGFyZHdhcmUgaGFzIG5hdGl2ZSBDT1BZIGNvbW1hbmQgKHNlZSBsaWJkbG8pLCBidXQgbm90IHdvcnRoIGl0IGZvciBmYmNvbiAqLwotc3RhdGljIHZvaWQgZGxmYl9vcHNfY29weWFyZWEoc3RydWN0IGZiX2luZm8gKmluZm8sCi0JCQkJY29uc3Qgc3RydWN0IGZiX2NvcHlhcmVhICphcmVhKQotewotCi0Jc3RydWN0IGRsZmJfZGF0YSAqZGV2ID0gaW5mby0+cGFyOwotCi0jaWYgZGVmaW5lZCBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIHx8IGRlZmluZWQgQ09ORklHX0ZCX1NZU19DT1BZQVJFQV9NT0RVTEUKLQotCXN5c19jb3B5YXJlYShpbmZvLCBhcmVhKTsKLQotCWRsZmJfaGFuZGxlX2RhbWFnZShkZXYsIGFyZWEtPmR4LCBhcmVhLT5keSwKLQkJCWFyZWEtPndpZHRoLCBhcmVhLT5oZWlnaHQsIGluZm8tPnNjcmVlbl9iYXNlKTsKLSNlbmRpZgotCi19Ci0KLXN0YXRpYyB2b2lkIGRsZmJfb3BzX2ltYWdlYmxpdChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKLQkJCQljb25zdCBzdHJ1Y3QgZmJfaW1hZ2UgKmltYWdlKQotewotCXN0cnVjdCBkbGZiX2RhdGEgKmRldiA9IGluZm8tPnBhcjsKLQotI2lmIGRlZmluZWQgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgfHwgZGVmaW5lZCBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVF9NT0RVTEUKLQotCXN5c19pbWFnZWJsaXQoaW5mbywgaW1hZ2UpOwotCi0JZGxmYl9oYW5kbGVfZGFtYWdlKGRldiwgaW1hZ2UtPmR4LCBpbWFnZS0+ZHksCi0JCQlpbWFnZS0+d2lkdGgsIGltYWdlLT5oZWlnaHQsIGluZm8tPnNjcmVlbl9iYXNlKTsKLQotI2VuZGlmCi0KLX0KLQotc3RhdGljIHZvaWQgZGxmYl9vcHNfZmlsbHJlY3Qoc3RydWN0IGZiX2luZm8gKmluZm8sCi0JCQkgIGNvbnN0IHN0cnVjdCBmYl9maWxscmVjdCAqcmVjdCkKLXsKLQlzdHJ1Y3QgZGxmYl9kYXRhICpkZXYgPSBpbmZvLT5wYXI7Ci0KLSNpZiBkZWZpbmVkIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgfHwgZGVmaW5lZCBDT05GSUdfRkJfU1lTX0ZJTExSRUNUX01PRFVMRQotCi0Jc3lzX2ZpbGxyZWN0KGluZm8sIHJlY3QpOwotCi0JZGxmYl9oYW5kbGVfZGFtYWdlKGRldiwgcmVjdC0+ZHgsIHJlY3QtPmR5LCByZWN0LT53aWR0aCwKLQkJCSAgICAgIHJlY3QtPmhlaWdodCwgaW5mby0+c2NyZWVuX2Jhc2UpOwotI2VuZGlmCi0KLX0KLQotI2lmZGVmIENPTkZJR19GQl9ERUZFUlJFRF9JTwotLyoKLSAqIE5PVEU6IGZiX2RlZmlvLmMgaXMgaG9sZGluZyBpbmZvLT5mYmRlZmlvLm11dGV4Ci0gKiAgIFRvdWNoaW5nIEFOWSBmcmFtZWJ1ZmZlciBtZW1vcnkgdGhhdCB0cmlnZ2VycyBhIHBhZ2UgZmF1bHQKLSAqICAgaW4gZmJfZGVmaW8gd2lsbCBjYXVzZSBhIGRlYWRsb2NrLCB3aGVuIGl0IGFsc28gdHJpZXMgdG8KLSAqICAgZ3JhYiB0aGUgc2FtZSBtdXRleC4KLSAqLwotc3RhdGljIHZvaWQgZGxmYl9kcHlfZGVmZXJyZWRfaW8oc3RydWN0IGZiX2luZm8gKmluZm8sCi0JCQkJc3RydWN0IGxpc3RfaGVhZCAqcGFnZWxpc3QpCi17Ci0Jc3RydWN0IHBhZ2UgKmN1cjsKLQlzdHJ1Y3QgZmJfZGVmZXJyZWRfaW8gKmZiZGVmaW8gPSBpbmZvLT5mYmRlZmlvOwotCXN0cnVjdCBkbGZiX2RhdGEgKmRldiA9IGluZm8tPnBhcjsKLQlzdHJ1Y3QgdXJiICp1cmI7Ci0JY2hhciAqY21kOwotCWN5Y2xlc190IHN0YXJ0X2N5Y2xlcywgZW5kX2N5Y2xlczsKLQlpbnQgYnl0ZXNfc2VudCA9IDA7Ci0JaW50IGJ5dGVzX2lkZW50aWNhbCA9IDA7Ci0JaW50IGJ5dGVzX3JlbmRlcmVkID0gMDsKLQotCWlmICghZmJfZGVmaW8pCi0JCXJldHVybjsKLQotCWlmICghYXRvbWljX3JlYWQoJmRldi0+dXNiX2FjdGl2ZSkpCi0JCXJldHVybjsKLQotCXN0YXJ0X2N5Y2xlcyA9IGdldF9jeWNsZXMoKTsKLQotCXVyYiA9IGRsZmJfZ2V0X3VyYihkZXYpOwotCWlmICghdXJiKQotCQlyZXR1cm47Ci0KLQljbWQgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKLQotCS8qIHdhbGsgdGhlIHdyaXR0ZW4gcGFnZSBsaXN0IGFuZCByZW5kZXIgZWFjaCB0byBkZXZpY2UgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGN1ciwgJmZiZGVmaW8tPnBhZ2VsaXN0LCBscnUpIHsKLQotCQlpZiAoZGxmYl9yZW5kZXJfaGxpbmUoZGV2LCAmdXJiLCAoY2hhciAqKSBpbmZvLT5maXguc21lbV9zdGFydCwKLQkJCQkgICZjbWQsIGN1ci0+aW5kZXggPDwgUEFHRV9TSElGVCwKLQkJCQkgIFBBR0VfU0laRSwgJmJ5dGVzX2lkZW50aWNhbCwgJmJ5dGVzX3NlbnQpKQotCQkJZ290byBlcnJvcjsKLQkJYnl0ZXNfcmVuZGVyZWQgKz0gUEFHRV9TSVpFOwotCX0KLQotCWlmIChjbWQgPiAoY2hhciAqKSB1cmItPnRyYW5zZmVyX2J1ZmZlcikgewotCQkvKiBTZW5kIHBhcnRpYWwgYnVmZmVyIHJlbWFpbmluZyBiZWZvcmUgZXhpdGluZyAqLwotCQlpbnQgbGVuID0gY21kIC0gKGNoYXIgKikgdXJiLT50cmFuc2Zlcl9idWZmZXI7Ci0JCWRsZmJfc3VibWl0X3VyYihkZXYsIHVyYiwgbGVuKTsKLQkJYnl0ZXNfc2VudCArPSBsZW47Ci0JfSBlbHNlCi0JCWRsZmJfdXJiX2NvbXBsZXRpb24odXJiKTsKLQotZXJyb3I6Ci0JYXRvbWljX2FkZChieXRlc19zZW50LCAmZGV2LT5ieXRlc19zZW50KTsKLQlhdG9taWNfYWRkKGJ5dGVzX2lkZW50aWNhbCwgJmRldi0+Ynl0ZXNfaWRlbnRpY2FsKTsKLQlhdG9taWNfYWRkKGJ5dGVzX3JlbmRlcmVkLCAmZGV2LT5ieXRlc19yZW5kZXJlZCk7Ci0JZW5kX2N5Y2xlcyA9IGdldF9jeWNsZXMoKTsKLQlhdG9taWNfYWRkKCgodW5zaWduZWQgaW50KSAoKGVuZF9jeWNsZXMgLSBzdGFydF9jeWNsZXMpCi0JCSAgICA+PiAxMCkpLCAvKiBLY3ljbGVzICovCi0JCSAgICZkZXYtPmNwdV9rY3ljbGVzX3VzZWQpOwotfQotCi0jZW5kaWYKLQotc3RhdGljIGludCBkbGZiX2dldF9lZGlkKHN0cnVjdCBkbGZiX2RhdGEgKmRldiwgY2hhciAqZWRpZCwgaW50IGxlbikKLXsKLQlpbnQgaTsKLQlpbnQgcmV0OwotCWNoYXIgKnJidWY7Ci0KLQlyYnVmID0ga21hbGxvYygyLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXJidWYpCi0JCXJldHVybiAwOwotCi0JZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0JCXJldCA9IHVzYl9jb250cm9sX21zZyhkZXYtPnVkZXYsCi0JCQkJICAgIHVzYl9yY3ZjdHJscGlwZShkZXYtPnVkZXYsIDApLCAoMHgwMiksCi0JCQkJICAgICgweDgwIHwgKDB4MDIgPDwgNSkpLCBpIDw8IDgsIDB4QTEsIHJidWYsIDIsCi0JCQkJICAgIEhaKTsKLQkJaWYgKHJldCA8IDEpIHsKLQkJCWRsX2VycigiUmVhZCBFRElEIGJ5dGUgJWQgZmFpbGVkIGVyciAleFxuIiwgaSwgcmV0KTsKLQkJCWktLTsKLQkJCWJyZWFrOwotCQl9Ci0JCWVkaWRbaV0gPSByYnVmWzFdOwotCX0KLQotCWtmcmVlKHJidWYpOwotCi0JcmV0dXJuIGk7Ci19Ci0KLXN0YXRpYyBpbnQgZGxmYl9vcHNfaW9jdGwoc3RydWN0IGZiX2luZm8gKmluZm8sIHVuc2lnbmVkIGludCBjbWQsCi0JCQkJdW5zaWduZWQgbG9uZyBhcmcpCi17Ci0KLQlzdHJ1Y3QgZGxmYl9kYXRhICpkZXYgPSBpbmZvLT5wYXI7Ci0Jc3RydWN0IGRsb2FyZWEgKmFyZWEgPSBOVUxMOwotCi0JaWYgKCFhdG9taWNfcmVhZCgmZGV2LT51c2JfYWN0aXZlKSkKLQkJcmV0dXJuIDA7Ci0KLQkvKiBUT0RPOiBVcGRhdGUgWCBzZXJ2ZXIgdG8gZ2V0IHRoaXMgZnJvbSBzeXNmcyBpbnN0ZWFkICovCi0JaWYgKGNtZCA9PSBETEZCX0lPQ1RMX1JFVFVSTl9FRElEKSB7Ci0JCWNoYXIgKmVkaWQgPSAoY2hhciAqKWFyZzsKLQkJaWYgKGNvcHlfdG9fdXNlcihlZGlkLCBkZXYtPmVkaWQsIGRldi0+ZWRpZF9zaXplKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQkvKiBUT0RPOiBIZWxwIHByb3Bvc2UgYSBzdGFuZGFyZCBmYi5oIGlvY3RsIHRvIHJlcG9ydCBtbWFwIGRhbWFnZSAqLwotCWlmIChjbWQgPT0gRExGQl9JT0NUTF9SRVBPUlRfREFNQUdFKSB7Ci0KLQkJLyoKLQkJICogSWYgd2UgaGF2ZSBhIGRhbWFnZS1hd2FyZSBjbGllbnQsIHR1cm4gZmJfZGVmaW8gIm9mZiIKLQkJICogVG8gYXZvaWQgcGVyZiBpbWFjdCBvZiB1bmVjZXNzYXJ5IHBhZ2UgZmF1bHQgaGFuZGxpbmcuCi0JCSAqIERvbmUgYnkgcmVzZXR0aW5nIHRoZSBkZWxheSBmb3IgdGhpcyBmYl9pbmZvIHRvIGEgdmVyeQotCQkgKiBsb25nIHBlcmlvZC4gUGFnZXMgd2lsbCBiZWNvbWUgd3JpdGFibGUgYW5kIHN0YXkgdGhhdCB3YXkuCi0JCSAqIFJlc2V0IHRvIG5vcm1hbCB2YWx1ZSB3aGVuIGFsbCBjbGllbnRzIGhhdmUgY2xvc2VkIHRoaXMgZmIuCi0JCSAqLwotCQlpZiAoaW5mby0+ZmJkZWZpbykKLQkJCWluZm8tPmZiZGVmaW8tPmRlbGF5ID0gRExfREVGSU9fV1JJVEVfRElTQUJMRTsKLQotCQlhcmVhID0gKHN0cnVjdCBkbG9hcmVhICopYXJnOwotCi0JCWlmIChhcmVhLT54IDwgMCkKLQkJCWFyZWEtPnggPSAwOwotCi0JCWlmIChhcmVhLT54ID4gaW5mby0+dmFyLnhyZXMpCi0JCQlhcmVhLT54ID0gaW5mby0+dmFyLnhyZXM7Ci0KLQkJaWYgKGFyZWEtPnkgPCAwKQotCQkJYXJlYS0+eSA9IDA7Ci0KLQkJaWYgKGFyZWEtPnkgPiBpbmZvLT52YXIueXJlcykKLQkJCWFyZWEtPnkgPSBpbmZvLT52YXIueXJlczsKLQotCQlkbGZiX2hhbmRsZV9kYW1hZ2UoZGV2LCBhcmVhLT54LCBhcmVhLT55LCBhcmVhLT53LCBhcmVhLT5oLAotCQkJICAgaW5mby0+c2NyZWVuX2Jhc2UpOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKiB0YWtlbiBmcm9tIHZlc2FmYiAqLwotc3RhdGljIGludAotZGxmYl9vcHNfc2V0Y29scmVnKHVuc2lnbmVkIHJlZ25vLCB1bnNpZ25lZCByZWQsIHVuc2lnbmVkIGdyZWVuLAotCSAgICAgICB1bnNpZ25lZCBibHVlLCB1bnNpZ25lZCB0cmFuc3AsIHN0cnVjdCBmYl9pbmZvICppbmZvKQotewotCWludCBlcnIgPSAwOwotCi0JaWYgKHJlZ25vID49IGluZm8tPmNtYXAubGVuKQotCQlyZXR1cm4gMTsKLQotCWlmIChyZWdubyA8IDE2KSB7Ci0JCWlmIChpbmZvLT52YXIucmVkLm9mZnNldCA9PSAxMCkgewotCQkJLyogMTo1OjU6NSAqLwotCQkJKCh1MzIgKikgKGluZm8tPnBzZXVkb19wYWxldHRlKSlbcmVnbm9dID0KLQkJCSAgICAoKHJlZCAmIDB4ZjgwMCkgPj4gMSkgfAotCQkJICAgICgoZ3JlZW4gJiAweGY4MDApID4+IDYpIHwgKChibHVlICYgMHhmODAwKSA+PiAxMSk7Ci0JCX0gZWxzZSB7Ci0JCQkvKiAwOjU6Njo1ICovCi0JCQkoKHUzMiAqKSAoaW5mby0+cHNldWRvX3BhbGV0dGUpKVtyZWdub10gPQotCQkJICAgICgocmVkICYgMHhmODAwKSkgfAotCQkJICAgICgoZ3JlZW4gJiAweGZjMDApID4+IDUpIHwgKChibHVlICYgMHhmODAwKSA+PiAxMSk7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gZXJyOwotfQotCi0vKgotICogSXQncyBjb21tb24gZm9yIHNldmVyYWwgY2xpZW50cyB0byBoYXZlIGZyYW1lYnVmZmVyIG9wZW4gc2ltdWx0YW5lb3VzbHkuCi0gKiBlLmcuIGJvdGggZmJjb24gYW5kIFguIE1ha2VzIHRoaW5ncyBpbnRlcmVzdGluZy4KLSAqIEFzc3VtZXMgY2FsbGVyIGlzIGhvbGRpbmcgaW5mby0+bG9jayAoZm9yIG9wZW4gYW5kIHJlbGVhc2UgYXQgbGVhc3QpCi0gKi8KLXN0YXRpYyBpbnQgZGxmYl9vcHNfb3BlbihzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgaW50IHVzZXIpCi17Ci0Jc3RydWN0IGRsZmJfZGF0YSAqZGV2ID0gaW5mby0+cGFyOwotCi0JLyoKLQkgKiBmYmNvbiBhZ2dyZXNzaXZlbHkgY29ubmVjdHMgdG8gZmlyc3QgZnJhbWVidWZmZXIgaXQgZmluZHMsCi0JICogcHJldmVudGluZyBvdGhlciBjbGllbnRzIChYKSBmcm9tIHdvcmtpbmcgcHJvcGVybHkuIFVzdWFsbHkKLQkgKiBub3Qgd2hhdCB0aGUgdXNlciB3YW50cy4gRmFpbCBieSBkZWZhdWx0IHdpdGggb3B0aW9uIHRvIGVuYWJsZS4KLQkgKi8KLQlpZiAoKHVzZXIgPT0gMCkgJiAoIWNvbnNvbGUpKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JLyogSWYgdGhlIFVTQiBkZXZpY2UgaXMgZ29uZSwgd2UgZG9uJ3QgYWNjZXB0IG5ldyBvcGVucyAqLwotCWlmIChkZXYtPnZpcnR1YWxpemVkKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWRldi0+ZmJfY291bnQrKzsKLQotCWtyZWZfZ2V0KCZkZXYtPmtyZWYpOwotCi0jaWZkZWYgQ09ORklHX0ZCX0RFRkVSUkVEX0lPCi0JaWYgKGZiX2RlZmlvICYmIChpbmZvLT5mYmRlZmlvID09IE5VTEwpKSB7Ci0JCS8qIGVuYWJsZSBkZWZpbyBhdCBsYXN0IG1vbWVudCBpZiBub3QgZGlzYWJsZWQgYnkgY2xpZW50ICovCi0KLQkJc3RydWN0IGZiX2RlZmVycmVkX2lvICpmYmRlZmlvOwotCi0JCWZiZGVmaW8gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZmJfZGVmZXJyZWRfaW8pLCBHRlBfS0VSTkVMKTsKLQotCQlpZiAoZmJkZWZpbykgewotCQkJZmJkZWZpby0+ZGVsYXkgPSBETF9ERUZJT19XUklURV9ERUxBWTsKLQkJCWZiZGVmaW8tPmRlZmVycmVkX2lvID0gZGxmYl9kcHlfZGVmZXJyZWRfaW87Ci0JCX0KLQotCQlpbmZvLT5mYmRlZmlvID0gZmJkZWZpbzsKLQkJZmJfZGVmZXJyZWRfaW9faW5pdChpbmZvKTsKLQl9Ci0jZW5kaWYKLQotCWRsX25vdGljZSgib3BlbiAvZGV2L2ZiJWQgdXNlcj0lZCBmYl9pbmZvPSVwIGNvdW50PSVkXG4iLAotCSAgICBpbmZvLT5ub2RlLCB1c2VyLCBpbmZvLCBkZXYtPmZiX2NvdW50KTsKLQotCXJldHVybiAwOwotfQotCi0vKgotICogQ2FsbGVkIHdoZW4gYWxsIGNsaWVudCBpbnRlcmZhY2VzIHRvIHN0YXJ0IHRyYW5zYWN0aW9ucyBoYXZlIGJlZW4gZGlzYWJsZWQsCi0gKiBhbmQgYWxsIHJlZmVyZW5jZXMgdG8gb3VyIGRldmljZSBpbnN0YW5jZSAoZGxmYl9kYXRhKSBhcmUgcmVsZWFzZWQuCi0gKiBFdmVyeSB0cmFuc2FjdGlvbiBtdXN0IGhhdmUgYSByZWZlcmVuY2UsIHNvIHdlIGtub3cgYXJlIGZ1bGx5IHNwdW4gZG93bgotICovCi1zdGF0aWMgdm9pZCBkbGZiX2ZyZWUoc3RydWN0IGtyZWYgKmtyZWYpCi17Ci0Jc3RydWN0IGRsZmJfZGF0YSAqZGV2ID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCBkbGZiX2RhdGEsIGtyZWYpOwotCi0JLyogdGhpcyBmdW5jdGlvbiB3aWxsIHdhaXQgZm9yIGFsbCBpbi1mbGlnaHQgdXJicyB0byBjb21wbGV0ZSAqLwotCWlmIChkZXYtPnVyYnMuY291bnQgPiAwKQotCQlkbGZiX2ZyZWVfdXJiX2xpc3QoZGV2KTsKLQotCWlmIChkZXYtPmJhY2tpbmdfYnVmZmVyKQotCQl2ZnJlZShkZXYtPmJhY2tpbmdfYnVmZmVyKTsKLQotCWtmcmVlKGRldi0+ZWRpZCk7Ci0KLQlkbF93YXJuKCJmcmVlaW5nIGRsZmJfZGF0YSAlcFxuIiwgZGV2KTsKLQotCWtmcmVlKGRldik7Ci19Ci0KLXN0YXRpYyB2b2lkIGRsZmJfcmVsZWFzZV91cmJfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IHVyYl9ub2RlICp1bm9kZSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgdXJiX25vZGUsCi0JCQkJCSAgICAgIHJlbGVhc2VfdXJiX3dvcmsud29yayk7Ci0KLQl1cCgmdW5vZGUtPmRldi0+dXJicy5saW1pdF9zZW0pOwotfQotCi1zdGF0aWMgdm9pZCBkbGZiX2ZyZWVfZnJhbWVidWZmZXJfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IGRsZmJfZGF0YSAqZGV2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkbGZiX2RhdGEsCi0JCQkJCSAgICAgZnJlZV9mcmFtZWJ1ZmZlcl93b3JrLndvcmspOwotCXN0cnVjdCBmYl9pbmZvICppbmZvID0gZGV2LT5pbmZvOwotCWludCBub2RlID0gaW5mby0+bm9kZTsKLQotCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIoaW5mbyk7Ci0KLQlpZiAoaW5mby0+Y21hcC5sZW4gIT0gMCkKLQkJZmJfZGVhbGxvY19jbWFwKCZpbmZvLT5jbWFwKTsKLQlpZiAoaW5mby0+bW9uc3BlY3MubW9kZWRiKQotCQlmYl9kZXN0cm95X21vZGVkYihpbmZvLT5tb25zcGVjcy5tb2RlZGIpOwotCWlmIChpbmZvLT5zY3JlZW5fYmFzZSkKLQkJdmZyZWUoaW5mby0+c2NyZWVuX2Jhc2UpOwotCi0JZmJfZGVzdHJveV9tb2RlbGlzdCgmaW5mby0+bW9kZWxpc3QpOwotCi0JZGV2LT5pbmZvID0gMDsKLQotCS8qIEFzc3VtZSBpbmZvIHN0cnVjdHVyZSBpcyBmcmVlZCBhZnRlciB0aGlzIHBvaW50ICovCi0JZnJhbWVidWZmZXJfcmVsZWFzZShpbmZvKTsKLQotCWRsX3dhcm4oImZiX2luZm8gZm9yIC9kZXYvZmIlZCBoYXMgYmVlbiBmcmVlZFxuIiwgbm9kZSk7Ci0KLQkvKiByZWYgdGFrZW4gaW4gcHJvYmUoKSBhcyBwYXJ0IG9mIHJlZ2lzdGVyaW5nIGZyYW1lYmZ1ZmVyICovCi0Ja3JlZl9wdXQoJmRldi0+a3JlZiwgZGxmYl9mcmVlKTsKLX0KLQotLyoKLSAqIEFzc3VtZXMgY2FsbGVyIGlzIGhvbGRpbmcgaW5mby0+bG9jayBtdXRleCAoZm9yIG9wZW4gYW5kIHJlbGVhc2UgYXQgbGVhc3QpCi0gKi8KLXN0YXRpYyBpbnQgZGxmYl9vcHNfcmVsZWFzZShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgaW50IHVzZXIpCi17Ci0Jc3RydWN0IGRsZmJfZGF0YSAqZGV2ID0gaW5mby0+cGFyOwotCi0JZGV2LT5mYl9jb3VudC0tOwotCi0JLyogV2UgY2FuJ3QgZnJlZSBmYl9pbmZvIGhlcmUgLSBmYm1lbSB3aWxsIHRvdWNoIGl0IHdoZW4gd2UgcmV0dXJuICovCi0JaWYgKGRldi0+dmlydHVhbGl6ZWQgJiYgKGRldi0+ZmJfY291bnQgPT0gMCkpCi0JCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmZGV2LT5mcmVlX2ZyYW1lYnVmZmVyX3dvcmssIEhaKTsKLQotI2lmZGVmIENPTkZJR19GQl9ERUZFUlJFRF9JTwotCWlmICgoZGV2LT5mYl9jb3VudCA9PSAwKSAmJiAoaW5mby0+ZmJkZWZpbykpIHsKLQkJZmJfZGVmZXJyZWRfaW9fY2xlYW51cChpbmZvKTsKLQkJa2ZyZWUoaW5mby0+ZmJkZWZpbyk7Ci0JCWluZm8tPmZiZGVmaW8gPSBOVUxMOwotCQlpbmZvLT5mYm9wcy0+ZmJfbW1hcCA9IGRsZmJfb3BzX21tYXA7Ci0JfQotI2VuZGlmCi0KLQlkbF93YXJuKCJyZWxlYXNlZCAvZGV2L2ZiJWQgdXNlcj0lZCBjb3VudD0lZFxuIiwKLQkJICBpbmZvLT5ub2RlLCB1c2VyLCBkZXYtPmZiX2NvdW50KTsKLQotCWtyZWZfcHV0KCZkZXYtPmtyZWYsIGRsZmJfZnJlZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIENoZWNrIHdoZXRoZXIgYSB2aWRlbyBtb2RlIGlzIHN1cHBvcnRlZCBieSB0aGUgRGlzcGxheUxpbmsgY2hpcAotICogV2Ugc3RhcnQgZnJvbSBtb25pdG9yJ3MgbW9kZXMsIHNvIGRvbid0IG5lZWQgdG8gZmlsdGVyIHRoYXQgaGVyZQotICovCi1zdGF0aWMgaW50IGRsZmJfaXNfdmFsaWRfbW9kZShzdHJ1Y3QgZmJfdmlkZW9tb2RlICptb2RlLAotCQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKLXsKLQlzdHJ1Y3QgZGxmYl9kYXRhICpkZXYgPSBpbmZvLT5wYXI7Ci0KLQlpZiAobW9kZS0+eHJlcyAqIG1vZGUtPnlyZXMgPiBkZXYtPnNrdV9waXhlbF9saW1pdCkgewotCQlkbF93YXJuKCIlZHglZCBiZXlvbmQgY2hpcCBjYXBhYmlsaXRpZXNcbiIsCi0JCSAgICAgICBtb2RlLT54cmVzLCBtb2RlLT55cmVzKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JZGxfaW5mbygiJWR4JWQgdmFsaWQgbW9kZVxuIiwgbW9kZS0+eHJlcywgbW9kZS0+eXJlcyk7Ci0KLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIHZvaWQgZGxmYl92YXJfY29sb3JfZm9ybWF0KHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyKQotewotCWNvbnN0IHN0cnVjdCBmYl9iaXRmaWVsZCByZWQgPSB7IDExLCA1LCAwIH07Ci0JY29uc3Qgc3RydWN0IGZiX2JpdGZpZWxkIGdyZWVuID0geyA1LCA2LCAwIH07Ci0JY29uc3Qgc3RydWN0IGZiX2JpdGZpZWxkIGJsdWUgPSB7IDAsIDUsIDAgfTsKLQotCXZhci0+Yml0c19wZXJfcGl4ZWwgPSAxNjsKLQl2YXItPnJlZCA9IHJlZDsKLQl2YXItPmdyZWVuID0gZ3JlZW47Ci0JdmFyLT5ibHVlID0gYmx1ZTsKLX0KLQotc3RhdGljIGludCBkbGZiX29wc19jaGVja192YXIoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsCi0JCQkJc3RydWN0IGZiX2luZm8gKmluZm8pCi17Ci0Jc3RydWN0IGZiX3ZpZGVvbW9kZSBtb2RlOwotCi0JLyogVE9ETzogc3VwcG9ydCBkeW5hbWljYWxseSBjaGFuZ2luZyBmcmFtZWJ1ZmZlciBzaXplICovCi0JaWYgKCh2YXItPnhyZXMgKiB2YXItPnlyZXMgKiAyKSA+IGluZm8tPmZpeC5zbWVtX2xlbikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkvKiBzZXQgZGV2aWNlLXNwZWNpZmljIGVsZW1lbnRzIG9mIHZhciB1bnJlbGF0ZWQgdG8gbW9kZSAqLwotCWRsZmJfdmFyX2NvbG9yX2Zvcm1hdCh2YXIpOwotCi0JZmJfdmFyX3RvX3ZpZGVvbW9kZSgmbW9kZSwgdmFyKTsKLQotCWlmICghZGxmYl9pc192YWxpZF9tb2RlKCZtb2RlLCBpbmZvKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBkbGZiX29wc19zZXRfcGFyKHN0cnVjdCBmYl9pbmZvICppbmZvKQotewotCXN0cnVjdCBkbGZiX2RhdGEgKmRldiA9IGluZm8tPnBhcjsKLQlpbnQgcmVzdWx0OwotCXUxNiAqcGl4X2ZyYW1lYnVmZmVyOwotCWludCBpOwotCi0JZGxfbm90aWNlKCJzZXRfcGFyIG1vZGUgJWR4JWRcbiIsIGluZm8tPnZhci54cmVzLCBpbmZvLT52YXIueXJlcyk7Ci0KLQlyZXN1bHQgPSBkbGZiX3NldF92aWRlb19tb2RlKGRldiwgJmluZm8tPnZhcik7Ci0KLQlpZiAoKHJlc3VsdCA9PSAwKSAmJiAoZGV2LT5mYl9jb3VudCA9PSAwKSkgewotCi0JCS8qIHBhaW50IGdyZWVuc2NyZWVuICovCi0KLQkJcGl4X2ZyYW1lYnVmZmVyID0gKHUxNiAqKSBpbmZvLT5zY3JlZW5fYmFzZTsKLQkJZm9yIChpID0gMDsgaSA8IGluZm8tPmZpeC5zbWVtX2xlbiAvIDI7IGkrKykKLQkJCXBpeF9mcmFtZWJ1ZmZlcltpXSA9IDB4MzdlNjsKLQotCQlkbGZiX2hhbmRsZV9kYW1hZ2UoZGV2LCAwLCAwLCBpbmZvLT52YXIueHJlcywgaW5mby0+dmFyLnlyZXMsCi0JCQkJICAgaW5mby0+c2NyZWVuX2Jhc2UpOwotCX0KLQotCXJldHVybiByZXN1bHQ7Ci19Ci0KLS8qCi0gKiBJbiBvcmRlciB0byBjb21lIGJhY2sgZnJvbSBmdWxsIERQTVMgb2ZmLCB3ZSBuZWVkIHRvIHNldCB0aGUgbW9kZSBhZ2FpbgotICovCi1zdGF0aWMgaW50IGRsZmJfb3BzX2JsYW5rKGludCBibGFua19tb2RlLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKLXsKLQlzdHJ1Y3QgZGxmYl9kYXRhICpkZXYgPSBpbmZvLT5wYXI7Ci0KLQlpZiAoYmxhbmtfbW9kZSAhPSBGQl9CTEFOS19VTkJMQU5LKSB7Ci0JCWNoYXIgKmJ1ZnB0cjsKLQkJc3RydWN0IHVyYiAqdXJiOwotCi0JCXVyYiA9IGRsZmJfZ2V0X3VyYihkZXYpOwotCQlpZiAoIXVyYikKLQkJCXJldHVybiAwOwotCi0JCWJ1ZnB0ciA9IChjaGFyICopIHVyYi0+dHJhbnNmZXJfYnVmZmVyOwotCQlidWZwdHIgPSBkbGZiX3ZpZHJlZ19sb2NrKGJ1ZnB0cik7Ci0JCWJ1ZnB0ciA9IGRsZmJfZW5hYmxlX2h2c3luYyhidWZwdHIsIGZhbHNlKTsKLQkJYnVmcHRyID0gZGxmYl92aWRyZWdfdW5sb2NrKGJ1ZnB0cik7Ci0KLQkJZGxmYl9zdWJtaXRfdXJiKGRldiwgdXJiLCBidWZwdHIgLQotCQkJCShjaGFyICopIHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKLQl9IGVsc2UgewotCQlkbGZiX3NldF92aWRlb19tb2RlKGRldiwgJmluZm8tPnZhcik7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZmJfb3BzIGRsZmJfb3BzID0gewotCS5vd25lciA9IFRISVNfTU9EVUxFLAotCS5mYl9yZWFkID0gZGxmYl9vcHNfcmVhZCwKLQkuZmJfd3JpdGUgPSBkbGZiX29wc193cml0ZSwKLQkuZmJfc2V0Y29scmVnID0gZGxmYl9vcHNfc2V0Y29scmVnLAotCS5mYl9maWxscmVjdCA9IGRsZmJfb3BzX2ZpbGxyZWN0LAotCS5mYl9jb3B5YXJlYSA9IGRsZmJfb3BzX2NvcHlhcmVhLAotCS5mYl9pbWFnZWJsaXQgPSBkbGZiX29wc19pbWFnZWJsaXQsCi0JLmZiX21tYXAgPSBkbGZiX29wc19tbWFwLAotCS5mYl9pb2N0bCA9IGRsZmJfb3BzX2lvY3RsLAotCS5mYl9vcGVuID0gZGxmYl9vcHNfb3BlbiwKLQkuZmJfcmVsZWFzZSA9IGRsZmJfb3BzX3JlbGVhc2UsCi0JLmZiX2JsYW5rID0gZGxmYl9vcHNfYmxhbmssCi0JLmZiX2NoZWNrX3ZhciA9IGRsZmJfb3BzX2NoZWNrX3ZhciwKLQkuZmJfc2V0X3BhciA9IGRsZmJfb3BzX3NldF9wYXIsCi19OwotCi0KLS8qCi0gKiBBc3N1bWVzICZpbmZvLT5sb2NrIGhlbGQgYnkgY2FsbGVyCi0gKiBBc3N1bWVzIG5vIGFjdGl2ZSBjbGllbnRzIGhhdmUgZnJhbWVidWZmZXIgb3BlbgotICovCi1zdGF0aWMgaW50IGRsZmJfcmVhbGxvY19mcmFtZWJ1ZmZlcihzdHJ1Y3QgZGxmYl9kYXRhICpkZXYsIHN0cnVjdCBmYl9pbmZvICppbmZvKQotewotCWludCByZXR2YWwgPSAtRU5PTUVNOwotCWludCBvbGRfbGVuID0gaW5mby0+Zml4LnNtZW1fbGVuOwotCWludCBuZXdfbGVuOwotCXVuc2lnbmVkIGNoYXIgKm9sZF9mYiA9IGluZm8tPnNjcmVlbl9iYXNlOwotCXVuc2lnbmVkIGNoYXIgKm5ld19mYjsKLQl1bnNpZ25lZCBjaGFyICpuZXdfYmFjazsKLQotCWRsX3dhcm4oIlJlYWxsb2NhdGluZyBmcmFtZWJ1ZmZlci4gQWRkcmVzc2VzIHdpbGwgY2hhbmdlIVxuIik7Ci0KLQluZXdfbGVuID0gaW5mby0+Zml4LmxpbmVfbGVuZ3RoICogaW5mby0+dmFyLnlyZXM7Ci0KLQlpZiAoUEFHRV9BTElHTihuZXdfbGVuKSA+IG9sZF9sZW4pIHsKLQkJLyoKLQkJICogQWxsb2Mgc3lzdGVtIG1lbW9yeSBmb3IgdmlydHVhbCBmcmFtZWJ1ZmZlcgotCQkgKi8KLQkJbmV3X2ZiID0gdm1hbGxvYyhuZXdfbGVuKTsKLQkJaWYgKCFuZXdfZmIpIHsKLQkJCWRsX2VycigiVmlydHVhbCBmcmFtZWJ1ZmZlciBhbGxvYyBmYWlsZWRcbiIpOwotCQkJZ290byBlcnJvcjsKLQkJfQotCi0JCWlmIChpbmZvLT5zY3JlZW5fYmFzZSkgewotCQkJbWVtY3B5KG5ld19mYiwgb2xkX2ZiLCBvbGRfbGVuKTsKLQkJCXZmcmVlKGluZm8tPnNjcmVlbl9iYXNlKTsKLQkJfQotCi0JCWluZm8tPnNjcmVlbl9iYXNlID0gbmV3X2ZiOwotCQlpbmZvLT5maXguc21lbV9sZW4gPSBQQUdFX0FMSUdOKG5ld19sZW4pOwotCQlpbmZvLT5maXguc21lbV9zdGFydCA9ICh1bnNpZ25lZCBsb25nKSBuZXdfZmI7Ci0JCWluZm8tPmZsYWdzID0gdWRsZmJfaW5mb19mbGFnczsKLQotCQkvKgotCQkgKiBTZWNvbmQgZnJhbWVidWZmZXIgY29weSB0byBtaXJyb3IgdGhlIGZyYW1lYnVmZmVyIHN0YXRlCi0JCSAqIG9uIHRoZSBwaHlzaWNhbCBVU0IgZGV2aWNlLiBXZSBjYW4gZnVuY3Rpb24gd2l0aG91dCB0aGlzLgotCQkgKiBCdXQgd2l0aCBpbXBlcmZlY3QgZGFtYWdlIGluZm8gd2UgbWF5IHNlbmQgcGl4ZWxzIG92ZXIgVVNCCi0JCSAqIHRoYXQgd2VyZSwgaW4gZmFjdCwgdW5jaGFuZ2VkIC0gd2FzdGluZyBsaW1pdGVkIFVTQiBiYW5kd2lkdGgKLQkJICovCi0JCW5ld19iYWNrID0gdm1hbGxvYyhuZXdfbGVuKTsKLQkJaWYgKCFuZXdfYmFjaykKLQkJCWRsX2luZm8oIk5vIHNoYWRvdy9iYWNraW5nIGJ1ZmZlciBhbGxjb2F0ZWRcbiIpOwotCQllbHNlIHsKLQkJCWlmIChkZXYtPmJhY2tpbmdfYnVmZmVyKQotCQkJCXZmcmVlKGRldi0+YmFja2luZ19idWZmZXIpOwotCQkJZGV2LT5iYWNraW5nX2J1ZmZlciA9IG5ld19iYWNrOwotCQkJbWVtc2V0KGRldi0+YmFja2luZ19idWZmZXIsIDAsIG5ld19sZW4pOwotCQl9Ci0JfQotCi0JcmV0dmFsID0gMDsKLQotZXJyb3I6Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQotLyoKLSAqIDEpIEdldCBFRElEIGZyb20gaHcsIG9yIHVzZSBzdyBkZWZhdWx0Ci0gKiAyKSBQYXJzZSBpbnRvIHZhcmlvdXMgZmJfaW5mbyBzdHJ1Y3RzCi0gKiAzKSBBbGxvY2F0ZSB2aXJ0dWFsIGZyYW1lYnVmZmVyIG1lbW9yeSB0byBiYWNrIGhpZ2hlc3QgcmVzIG1vZGUKLSAqCi0gKiBQYXJzZXMgRURJRCBpbnRvIHRocmVlIHBsYWNlcyB1c2VkIGJ5IHZhcmlvdXMgcGFydHMgb2YgZmJkZXY6Ci0gKiBmYl92YXJfc2NyZWVuaW5mbyBjb250YWlucyB0aGUgdGltaW5nIG9mIHRoZSBtb25pdG9yJ3MgcHJlZmVycmVkIG1vZGUKLSAqIGZiX2luZm8ubW9uc3BlY3MgaXMgZnVsbCBwYXJzZWQgRURJRCBpbmZvLCBpbmNsdWRpbmcgbW9uc3BlY3MubW9kZWRiCi0gKiBmYl9pbmZvLm1vZGVsaXN0IGlzIGEgbGlua2VkIGxpc3Qgb2YgYWxsIG1vbml0b3IgJiBWRVNBIG1vZGVzIHdoaWNoIHdvcmsKLSAqCi0gKiBJZiBFRElEIGlzIG5vdCByZWFkYWJsZS92YWxpZCwgdGhlbiBtb2RlbGlzdCBpcyBhbGwgVkVTQSBtb2RlcywKLSAqIG1vbnNwZWNzIGlzIE5VTEwsIGFuZCBmYl92YXJfc2NyZWVuaW5mbyBpcyBzZXQgdG8gc2FmZSBWRVNBIG1vZGUKLSAqIFJldHVybnMgMCBpZiBzdWNjZXNzZnVsCi0gKi8KLXN0YXRpYyBpbnQgZGxmYl9zZXR1cF9tb2RlcyhzdHJ1Y3QgZGxmYl9kYXRhICpkZXYsCi0JCQkgICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKLQkJCSAgIGNoYXIgKmRlZmF1bHRfZWRpZCwgc2l6ZV90IGRlZmF1bHRfZWRpZF9zaXplKQotewotCWludCBpOwotCWNvbnN0IHN0cnVjdCBmYl92aWRlb21vZGUgKmRlZmF1bHRfdm1vZGUgPSBOVUxMOwotCWludCByZXN1bHQgPSAwOwotCWNoYXIgKmVkaWQ7Ci0JaW50IHRyaWVzID0gMzsKLQotCWlmIChpbmZvLT5kZXYpIC8qIG9ubHkgdXNlIG11dGV4IGlmIGluZm8gaGFzIGJlZW4gcmVnaXN0ZXJlZCAqLwotCQltdXRleF9sb2NrKCZpbmZvLT5sb2NrKTsKLQotCWVkaWQgPSBrbWFsbG9jKE1BWF9FRElEX1NJWkUsIEdGUF9LRVJORUwpOwotCWlmICghZWRpZCkgewotCQlyZXN1bHQgPSAtRU5PTUVNOwotCQlnb3RvIGVycm9yOwotCX0KLQotCWZiX2Rlc3Ryb3lfbW9kZWxpc3QoJmluZm8tPm1vZGVsaXN0KTsKLQltZW1zZXQoJmluZm8tPm1vbnNwZWNzLCAwLCBzaXplb2YoaW5mby0+bW9uc3BlY3MpKTsKLQotCS8qCi0JICogVHJ5IHRvIChyZSlyZWFkIEVESUQgZnJvbSBoYXJkd2FyZSBmaXJzdAotCSAqIEVESUQgZGF0YSBtYXkgcmV0dXJuLCBidXQgbm90IHBhcnNlIGFzIHZhbGlkCi0JICogVHJ5IGFnYWluIGEgZmV3IHRpbWVzLCBpbiBjYXNlIG9mIGUuZy4gYW5hbG9nIGNhYmxlIG5vaXNlCi0JICovCi0Jd2hpbGUgKHRyaWVzLS0pIHsKLQotCQlpID0gZGxmYl9nZXRfZWRpZChkZXYsIGVkaWQsIE1BWF9FRElEX1NJWkUpOwotCi0JCWlmIChpID49IE1JTl9FRElEX1NJWkUpCi0JCQlmYl9lZGlkX3RvX21vbnNwZWNzKGVkaWQsICZpbmZvLT5tb25zcGVjcyk7Ci0KLQkJaWYgKGluZm8tPm1vbnNwZWNzLm1vZGVkYl9sZW4gPiAwKSB7Ci0JCQlkZXYtPmVkaWQgPSBlZGlkOwotCQkJZGV2LT5lZGlkX3NpemUgPSBpOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQkvKiBJZiB0aGF0IGZhaWxzLCB1c2UgYSBwcmV2aW91c2x5IHJldHVybmVkIEVESUQgaWYgYXZhaWxhYmxlICovCi0JaWYgKGluZm8tPm1vbnNwZWNzLm1vZGVkYl9sZW4gPT0gMCkgewotCi0JCWRsX2VycigiVW5hYmxlIHRvIGdldCB2YWxpZCBFRElEIGZyb20gZGV2aWNlL2Rpc3BsYXlcbiIpOwotCi0JCWlmIChkZXYtPmVkaWQpIHsKLQkJCWZiX2VkaWRfdG9fbW9uc3BlY3MoZGV2LT5lZGlkLCAmaW5mby0+bW9uc3BlY3MpOwotCQkJaWYgKGluZm8tPm1vbnNwZWNzLm1vZGVkYl9sZW4gPiAwKQotCQkJCWRsX2VycigiVXNpbmcgcHJldmlvdXNseSBxdWVyaWVkIEVESURcbiIpOwotCQl9Ci0JfQotCi0JLyogSWYgdGhhdCBmYWlscywgdXNlIHRoZSBkZWZhdWx0IEVESUQgd2Ugd2VyZSBoYW5kZWQgKi8KLQlpZiAoaW5mby0+bW9uc3BlY3MubW9kZWRiX2xlbiA9PSAwKSB7Ci0JCWlmIChkZWZhdWx0X2VkaWRfc2l6ZSA+PSBNSU5fRURJRF9TSVpFKSB7Ci0JCQlmYl9lZGlkX3RvX21vbnNwZWNzKGRlZmF1bHRfZWRpZCwgJmluZm8tPm1vbnNwZWNzKTsKLQkJCWlmIChpbmZvLT5tb25zcGVjcy5tb2RlZGJfbGVuID4gMCkgewotCQkJCW1lbWNweShlZGlkLCBkZWZhdWx0X2VkaWQsIGRlZmF1bHRfZWRpZF9zaXplKTsKLQkJCQlkZXYtPmVkaWQgPSBlZGlkOwotCQkJCWRldi0+ZWRpZF9zaXplID0gZGVmYXVsdF9lZGlkX3NpemU7Ci0JCQkJZGxfZXJyKCJVc2luZyBkZWZhdWx0L2JhY2t1cCBFRElEXG4iKTsKLQkJCX0KLQkJfQotCX0KLQotCS8qIElmIHdlJ3ZlIGdvdCBtb2RlcywgbGV0J3MgcGljayBhIGJlc3QgZGVmYXVsdCBtb2RlICovCi0JaWYgKGluZm8tPm1vbnNwZWNzLm1vZGVkYl9sZW4gPiAwKSB7Ci0KLQkJZm9yIChpID0gMDsgaSA8IGluZm8tPm1vbnNwZWNzLm1vZGVkYl9sZW47IGkrKykgewotCQkJaWYgKGRsZmJfaXNfdmFsaWRfbW9kZSgmaW5mby0+bW9uc3BlY3MubW9kZWRiW2ldLCBpbmZvKSkKLQkJCQlmYl9hZGRfdmlkZW9tb2RlKCZpbmZvLT5tb25zcGVjcy5tb2RlZGJbaV0sCi0JCQkJCSZpbmZvLT5tb2RlbGlzdCk7Ci0JCQllbHNlIC8qIGlmIHdlJ3ZlIHJlbW92ZWQgdG9wL2Jlc3QgbW9kZSAqLwotCQkJCWluZm8tPm1vbnNwZWNzLm1pc2MgJj0gfkZCX01JU0NfMVNUX0RFVEFJTDsKLQkJfQotCi0JCWRlZmF1bHRfdm1vZGUgPSBmYl9maW5kX2Jlc3RfZGlzcGxheSgmaW5mby0+bW9uc3BlY3MsCi0JCQkJCQkgICAgICZpbmZvLT5tb2RlbGlzdCk7Ci0JfQotCi0JLyogSWYgZXZlcnl0aGluZyBlbHNlIGhhcyBmYWlsZWQsIGZhbGwgYmFjayB0byBzYWZlIGRlZmF1bHQgbW9kZSAqLwotCWlmIChkZWZhdWx0X3Ztb2RlID09IE5VTEwpIHsKLQotCQlzdHJ1Y3QgZmJfdmlkZW9tb2RlIGZiX3Ztb2RlID0gezB9OwotCi0JCS8qCi0JCSAqIEFkZCB0aGUgc3RhbmRhcmQgVkVTQSBtb2RlcyB0byBvdXIgbW9kZWxpc3QKLQkJICogU2luY2Ugd2UgZG9uJ3QgaGF2ZSBFRElELCB0aGVyZSBtYXkgYmUgbW9kZXMgdGhhdAotCQkgKiBvdmVyc3BlYyBtb25pdG9yIGFuZC9vciBhcmUgaW5jb3JyZWN0IGFzcGVjdCByYXRpbywgZXRjLgotCQkgKiBCdXQgYXQgbGVhc3QgdGhlIHVzZXIgaGFzIGEgY2hhbmNlIHRvIGNob29zZQotCQkgKi8KLQkJZm9yIChpID0gMDsgaSA8IFZFU0FfTU9ERURCX1NJWkU7IGkrKykgewotCQkJaWYgKGRsZmJfaXNfdmFsaWRfbW9kZSgoc3RydWN0IGZiX3ZpZGVvbW9kZSAqKQotCQkJCQkJJnZlc2FfbW9kZXNbaV0sIGluZm8pKQotCQkJCWZiX2FkZF92aWRlb21vZGUoJnZlc2FfbW9kZXNbaV0sCi0JCQkJCQkgJmluZm8tPm1vZGVsaXN0KTsKLQkJfQotCi0JCS8qCi0JCSAqIGRlZmF1bHQgdG8gcmVzb2x1dGlvbiBzYWZlIGZvciBwcm9qZWN0b3JzCi0JCSAqIChzaW5jZSB0aGV5IGFyZSBtb3N0IGNvbW1vbiBjYXNlIHdpdGhvdXQgRURJRCkKLQkJICovCi0JCWZiX3Ztb2RlLnhyZXMgPSA4MDA7Ci0JCWZiX3Ztb2RlLnlyZXMgPSA2MDA7Ci0JCWZiX3Ztb2RlLnJlZnJlc2ggPSA2MDsKLQkJZGVmYXVsdF92bW9kZSA9IGZiX2ZpbmRfbmVhcmVzdF9tb2RlKCZmYl92bW9kZSwKLQkJCQkJCSAgICAgJmluZm8tPm1vZGVsaXN0KTsKLQl9Ci0KLQkvKiBJZiB3ZSBoYXZlIGdvb2QgbW9kZSBhbmQgbm8gYWN0aXZlIGNsaWVudHMqLwotCWlmICgoZGVmYXVsdF92bW9kZSAhPSBOVUxMKSAmJiAoZGV2LT5mYl9jb3VudCA9PSAwKSkgewotCi0JCWZiX3ZpZGVvbW9kZV90b192YXIoJmluZm8tPnZhciwgZGVmYXVsdF92bW9kZSk7Ci0JCWRsZmJfdmFyX2NvbG9yX2Zvcm1hdCgmaW5mby0+dmFyKTsKLQotCQkvKgotCQkgKiB3aXRoIG1vZGUgc2l6ZSBpbmZvLCB3ZSBjYW4gbm93IGFsbG9jIG91ciBmcmFtZWJ1ZmZlci4KLQkJICovCi0JCW1lbWNweSgmaW5mby0+Zml4LCAmZGxmYl9maXgsIHNpemVvZihkbGZiX2ZpeCkpOwotCQlpbmZvLT5maXgubGluZV9sZW5ndGggPSBpbmZvLT52YXIueHJlcyAqCi0JCQkoaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsIC8gOCk7Ci0KLQkJcmVzdWx0ID0gZGxmYl9yZWFsbG9jX2ZyYW1lYnVmZmVyKGRldiwgaW5mbyk7Ci0KLQl9IGVsc2UKLQkJcmVzdWx0ID0gLUVJTlZBTDsKLQotZXJyb3I6Ci0JaWYgKGVkaWQgJiYgKGRldi0+ZWRpZCAhPSBlZGlkKSkKLQkJa2ZyZWUoZWRpZCk7Ci0KLQlpZiAoaW5mby0+ZGV2KQotCQltdXRleF91bmxvY2soJmluZm8tPmxvY2spOwotCi0JcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIHNzaXplX3QgbWV0cmljc19ieXRlc19yZW5kZXJlZF9zaG93KHN0cnVjdCBkZXZpY2UgKmZiZGV2LAotCQkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphLCBjaGFyICpidWYpIHsKLQlzdHJ1Y3QgZmJfaW5mbyAqZmJfaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShmYmRldik7Ci0Jc3RydWN0IGRsZmJfZGF0YSAqZGV2ID0gZmJfaW5mby0+cGFyOwotCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiV1XG4iLAotCQkJYXRvbWljX3JlYWQoJmRldi0+Ynl0ZXNfcmVuZGVyZWQpKTsKLX0KLQotc3RhdGljIHNzaXplX3QgbWV0cmljc19ieXRlc19pZGVudGljYWxfc2hvdyhzdHJ1Y3QgZGV2aWNlICpmYmRldiwKLQkJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYSwgY2hhciAqYnVmKSB7Ci0Jc3RydWN0IGZiX2luZm8gKmZiX2luZm8gPSBkZXZfZ2V0X2RydmRhdGEoZmJkZXYpOwotCXN0cnVjdCBkbGZiX2RhdGEgKmRldiA9IGZiX2luZm8tPnBhcjsKLQlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIldVxuIiwKLQkJCWF0b21pY19yZWFkKCZkZXYtPmJ5dGVzX2lkZW50aWNhbCkpOwotfQotCi1zdGF0aWMgc3NpemVfdCBtZXRyaWNzX2J5dGVzX3NlbnRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpmYmRldiwKLQkJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYSwgY2hhciAqYnVmKSB7Ci0Jc3RydWN0IGZiX2luZm8gKmZiX2luZm8gPSBkZXZfZ2V0X2RydmRhdGEoZmJkZXYpOwotCXN0cnVjdCBkbGZiX2RhdGEgKmRldiA9IGZiX2luZm8tPnBhcjsKLQlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIldVxuIiwKLQkJCWF0b21pY19yZWFkKCZkZXYtPmJ5dGVzX3NlbnQpKTsKLX0KLQotc3RhdGljIHNzaXplX3QgbWV0cmljc19jcHVfa2N5Y2xlc191c2VkX3Nob3coc3RydWN0IGRldmljZSAqZmJkZXYsCi0JCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmEsIGNoYXIgKmJ1ZikgewotCXN0cnVjdCBmYl9pbmZvICpmYl9pbmZvID0gZGV2X2dldF9kcnZkYXRhKGZiZGV2KTsKLQlzdHJ1Y3QgZGxmYl9kYXRhICpkZXYgPSBmYl9pbmZvLT5wYXI7Ci0JcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXVcbiIsCi0JCQlhdG9taWNfcmVhZCgmZGV2LT5jcHVfa2N5Y2xlc191c2VkKSk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGVkaWRfc2hvdygKLQkJCXN0cnVjdCBmaWxlICpmaWxwLAotCQkJc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBiaW5fYXR0cmlidXRlICphLAotCQkJIGNoYXIgKmJ1ZiwgbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KSB7Ci0Jc3RydWN0IGRldmljZSAqZmJkZXYgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRldmljZSwga29iaik7Ci0Jc3RydWN0IGZiX2luZm8gKmZiX2luZm8gPSBkZXZfZ2V0X2RydmRhdGEoZmJkZXYpOwotCXN0cnVjdCBkbGZiX2RhdGEgKmRldiA9IGZiX2luZm8tPnBhcjsKLQotCWlmIChkZXYtPmVkaWQgPT0gTlVMTCkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoKG9mZiA+PSBkZXYtPmVkaWRfc2l6ZSkgfHwgKGNvdW50ID4gZGV2LT5lZGlkX3NpemUpKQotCQlyZXR1cm4gMDsKLQotCWlmIChvZmYgKyBjb3VudCA+IGRldi0+ZWRpZF9zaXplKQotCQljb3VudCA9IGRldi0+ZWRpZF9zaXplIC0gb2ZmOwotCi0JZGxfaW5mbygic3lzZnMgZWRpZCBjb3B5ICVwIHRvICVwLCAlZCBieXRlc1xuIiwKLQkJZGV2LT5lZGlkLCBidWYsIChpbnQpIGNvdW50KTsKLQotCW1lbWNweShidWYsIGRldi0+ZWRpZCwgY291bnQpOwotCi0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgc3NpemVfdCBlZGlkX3N0b3JlKAotCQkJc3RydWN0IGZpbGUgKmZpbHAsCi0JCQlzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmEsCi0JCQljaGFyICpzcmMsIGxvZmZfdCBzcmNfb2ZmLCBzaXplX3Qgc3JjX3NpemUpIHsKLQlzdHJ1Y3QgZGV2aWNlICpmYmRldiA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGV2aWNlLCBrb2JqKTsKLQlzdHJ1Y3QgZmJfaW5mbyAqZmJfaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShmYmRldik7Ci0Jc3RydWN0IGRsZmJfZGF0YSAqZGV2ID0gZmJfaW5mby0+cGFyOwotCi0JLyogV2Ugb25seSBzdXBwb3J0IHdyaXRlIG9mIGVudGlyZSBFRElEIGF0IG9uY2UsIG5vIG9mZnNldCovCi0JaWYgKChzcmNfc2l6ZSA8IE1JTl9FRElEX1NJWkUpIHx8Ci0JICAgIChzcmNfc2l6ZSA+IE1BWF9FRElEX1NJWkUpIHx8Ci0JICAgIChzcmNfb2ZmICE9IDApKQotCQlyZXR1cm4gMDsKLQotCWRsZmJfc2V0dXBfbW9kZXMoZGV2LCBmYl9pbmZvLCBzcmMsIHNyY19zaXplKTsKLQotCWlmIChkZXYtPmVkaWQgJiYgKG1lbWNtcChzcmMsIGRldi0+ZWRpZCwgc3JjX3NpemUpID09IDApKSB7Ci0JCWRsX2luZm8oInN5c2ZzIHdyaXR0ZW4gRURJRCBpcyBuZXcgZGVmYXVsdFxuIik7Ci0JCWRsZmJfb3BzX3NldF9wYXIoZmJfaW5mbyk7Ci0JCXJldHVybiBzcmNfc2l6ZTsKLQl9IGVsc2UKLQkJcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IG1ldHJpY3NfcmVzZXRfc3RvcmUoc3RydWN0IGRldmljZSAqZmJkZXYsCi0JCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCSAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQotewotCXN0cnVjdCBmYl9pbmZvICpmYl9pbmZvID0gZGV2X2dldF9kcnZkYXRhKGZiZGV2KTsKLQlzdHJ1Y3QgZGxmYl9kYXRhICpkZXYgPSBmYl9pbmZvLT5wYXI7Ci0KLQlhdG9taWNfc2V0KCZkZXYtPmJ5dGVzX3JlbmRlcmVkLCAwKTsKLQlhdG9taWNfc2V0KCZkZXYtPmJ5dGVzX2lkZW50aWNhbCwgMCk7Ci0JYXRvbWljX3NldCgmZGV2LT5ieXRlc19zZW50LCAwKTsKLQlhdG9taWNfc2V0KCZkZXYtPmNwdV9rY3ljbGVzX3VzZWQsIDApOwotCi0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgc3RydWN0IGJpbl9hdHRyaWJ1dGUgZWRpZF9hdHRyID0gewotCS5hdHRyLm5hbWUgPSAiZWRpZCIsCi0JLmF0dHIubW9kZSA9IDA2NjYsCi0JLnNpemUgPSBNQVhfRURJRF9TSVpFLAotCS5yZWFkID0gZWRpZF9zaG93LAotCS53cml0ZSA9IGVkaWRfc3RvcmUKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBmYl9kZXZpY2VfYXR0cnNbXSA9IHsKLQlfX0FUVFJfUk8obWV0cmljc19ieXRlc19yZW5kZXJlZCksCi0JX19BVFRSX1JPKG1ldHJpY3NfYnl0ZXNfaWRlbnRpY2FsKSwKLQlfX0FUVFJfUk8obWV0cmljc19ieXRlc19zZW50KSwKLQlfX0FUVFJfUk8obWV0cmljc19jcHVfa2N5Y2xlc191c2VkKSwKLQlfX0FUVFIobWV0cmljc19yZXNldCwgU19JV1VTUiwgTlVMTCwgbWV0cmljc19yZXNldF9zdG9yZSksCi19OwotCi0vKgotICogVGhpcyBpcyBuZWNlc3NhcnkgYmVmb3JlIHdlIGNhbiBjb21tdW5pY2F0ZSB3aXRoIHRoZSBkaXNwbGF5IGNvbnRyb2xsZXIuCi0gKi8KLXN0YXRpYyBpbnQgZGxmYl9zZWxlY3Rfc3RkX2NoYW5uZWwoc3RydWN0IGRsZmJfZGF0YSAqZGV2KQotewotCWludCByZXQ7Ci0JdTggc2V0X2RlZl9jaG5bXSA9IHsJICAgMHg1NywgMHhDRCwgMHhEQywgMHhBNywKLQkJCQkweDFDLCAweDg4LCAweDVFLCAweDE1LAotCQkJCTB4NjAsIDB4RkUsIDB4QzYsIDB4OTcsCi0JCQkJMHgxNiwgMHgzRCwgMHg0NywgMHhGMiAgfTsKLQotCXJldCA9IHVzYl9jb250cm9sX21zZyhkZXYtPnVkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYtPnVkZXYsIDApLAotCQkJTlJfVVNCX1JFUVVFU1RfQ0hBTk5FTCwKLQkJCShVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiksIDAsIDAsCi0JCQlzZXRfZGVmX2Nobiwgc2l6ZW9mKHNldF9kZWZfY2huKSwgVVNCX0NUUkxfU0VUX1RJTUVPVVQpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgZGxmYl9wYXJzZV92ZW5kb3JfZGVzY3JpcHRvcihzdHJ1Y3QgZGxmYl9kYXRhICpkZXYsCi0JCQkJCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXYpCi17Ci0JY2hhciAqZGVzYzsKLQljaGFyICpidWY7Ci0JY2hhciAqZGVzY19lbmQ7Ci0KLQl1OCB0b3RhbF9sZW4gPSAwOwotCi0JYnVmID0ga3phbGxvYyhNQVhfVkVORE9SX0RFU0NSSVBUT1JfU0laRSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFidWYpCi0JCXJldHVybiBmYWxzZTsKLQlkZXNjID0gYnVmOwotCi0JdG90YWxfbGVuID0gdXNiX2dldF9kZXNjcmlwdG9yKHVzYmRldiwgMHg1ZiwgLyogdmVuZG9yIHNwZWNpZmljICovCi0JCQkJICAgIDAsIGRlc2MsIE1BWF9WRU5ET1JfREVTQ1JJUFRPUl9TSVpFKTsKLQlpZiAodG90YWxfbGVuID4gNSkgewotCQlkbF9pbmZvKCJ2ZW5kb3IgZGVzY3JpcHRvciBsZW5ndGg6JXggZGF0YTolMDJ4ICUwMnggJTAyeCAlMDJ4IiBcCi0JCQkiJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeFxuIiwKLQkJCXRvdGFsX2xlbiwgZGVzY1swXSwKLQkJCWRlc2NbMV0sIGRlc2NbMl0sIGRlc2NbM10sIGRlc2NbNF0sIGRlc2NbNV0sIGRlc2NbNl0sCi0JCQlkZXNjWzddLCBkZXNjWzhdLCBkZXNjWzldLCBkZXNjWzEwXSk7Ci0KLQkJaWYgKChkZXNjWzBdICE9IHRvdGFsX2xlbikgfHwgLyogZGVzY3JpcHRvciBsZW5ndGggKi8KLQkJICAgIChkZXNjWzFdICE9IDB4NWYpIHx8ICAgLyogdmVuZG9yIGRlc2NyaXB0b3IgdHlwZSAqLwotCQkgICAgKGRlc2NbMl0gIT0gMHgwMSkgfHwgICAvKiB2ZXJzaW9uICgyIGJ5dGVzKSAqLwotCQkgICAgKGRlc2NbM10gIT0gMHgwMCkgfHwKLQkJICAgIChkZXNjWzRdICE9IHRvdGFsX2xlbiAtIDIpKSAvKiBsZW5ndGggYWZ0ZXIgdHlwZSAqLwotCQkJZ290byB1bnJlY29nbml6ZWQ7Ci0KLQkJZGVzY19lbmQgPSBkZXNjICsgdG90YWxfbGVuOwotCQlkZXNjICs9IDU7IC8qIHRoZSBmaXhlZCBoZWFkZXIgd2UndmUgYWxyZWFkeSBwYXJzZWQgKi8KLQotCQl3aGlsZSAoZGVzYyA8IGRlc2NfZW5kKSB7Ci0JCQl1OCBsZW5ndGg7Ci0JCQl1MTYga2V5OwotCi0JCQlrZXkgPSAqKCh1MTYgKikgZGVzYyk7Ci0JCQlkZXNjICs9IHNpemVvZih1MTYpOwotCQkJbGVuZ3RoID0gKmRlc2M7Ci0JCQlkZXNjKys7Ci0KLQkJCXN3aXRjaCAoa2V5KSB7Ci0JCQljYXNlIDB4MDIwMDogeyAvKiBtYXhfYXJlYSAqLwotCQkJCXUzMiBtYXhfYXJlYTsKLQkJCQltYXhfYXJlYSA9IGxlMzJfdG9fY3B1KCooKHUzMiAqKWRlc2MpKTsKLQkJCQlkbF93YXJuKCJETCBjaGlwIGxpbWl0ZWQgdG8gJWQgcGl4ZWwgbW9kZXNcbiIsCi0JCQkJCW1heF9hcmVhKTsKLQkJCQlkZXYtPnNrdV9waXhlbF9saW1pdCA9IG1heF9hcmVhOwotCQkJCWJyZWFrOwotCQkJfQotCQkJZGVmYXVsdDoKLQkJCQlicmVhazsKLQkJCX0KLQkJCWRlc2MgKz0gbGVuZ3RoOwotCQl9Ci0JfQotCi0JZ290byBzdWNjZXNzOwotCi11bnJlY29nbml6ZWQ6Ci0JLyogYWxsb3cgdWRsZmIgdG8gbG9hZCBmb3Igbm93IGV2ZW4gaWYgZmlybXdhcmUgdW5yZWNvZ25pemVkICovCi0JZGxfZXJyKCJVbnJlY29nbml6ZWQgdmVuZG9yIGZpcm13YXJlIGRlc2NyaXB0b3JcbiIpOwotCi1zdWNjZXNzOgotCWtmcmVlKGJ1Zik7Ci0JcmV0dXJuIHRydWU7Ci19Ci1zdGF0aWMgaW50IGRsZmJfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCi0JCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCi17Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldjsKLQlzdHJ1Y3QgZGxmYl9kYXRhICpkZXYgPSAwOwotCXN0cnVjdCBmYl9pbmZvICppbmZvID0gMDsKLQlpbnQgcmV0dmFsID0gLUVOT01FTTsKLQlpbnQgaTsKLQotCS8qIHVzYiBpbml0aWFsaXphdGlvbiAqLwotCi0JdXNiZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpOwotCi0JZGV2ID0ga3phbGxvYyhzaXplb2YoKmRldiksIEdGUF9LRVJORUwpOwotCWlmIChkZXYgPT0gTlVMTCkgewotCQllcnIoImRsZmJfdXNiX3Byb2JlOiBmYWlsZWQgYWxsb2Mgb2YgZGV2IHN0cnVjdFxuIik7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JLyogd2UgbmVlZCB0byB3YWl0IGZvciBib3RoIHVzYiBhbmQgZmJkZXYgdG8gc3BpbiBkb3duIG9uIGRpc2Nvbm5lY3QgKi8KLQlrcmVmX2luaXQoJmRldi0+a3JlZik7IC8qIG1hdGNoaW5nIGtyZWZfcHV0IGluIHVzYiAuZGlzY29ubmVjdCBmbiAqLwotCWtyZWZfZ2V0KCZkZXYtPmtyZWYpOyAvKiBtYXRjaGluZyBrcmVmX3B1dCBpbiBmcmVlX2ZyYW1lYnVmZmVyX3dvcmsgKi8KLQotCWRldi0+dWRldiA9IHVzYmRldjsKLQlkZXYtPmdkZXYgPSAmdXNiZGV2LT5kZXY7IC8qIG91ciBnZW5lcmljIHN0cnVjdCBkZXZpY2UgKiAqLwotCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBkZXYpOwotCi0JZGxfaW5mbygiJXMgJXMgLSBzZXJpYWwgIyVzXG4iLAotCQl1c2JkZXYtPm1hbnVmYWN0dXJlciwgdXNiZGV2LT5wcm9kdWN0LCB1c2JkZXYtPnNlcmlhbCk7Ci0JZGxfaW5mbygidmlkXyUwNHgmcGlkXyUwNHgmcmV2XyUwNHggZHJpdmVyJ3MgZGxmYl9kYXRhIHN0cnVjdCBhdCAlcFxuIiwKLQkJdXNiZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yLCB1c2JkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0LAotCQl1c2JkZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlLCBkZXYpOwotCWRsX2luZm8oImNvbnNvbGUgZW5hYmxlPSVkXG4iLCBjb25zb2xlKTsKLQlkbF9pbmZvKCJmYl9kZWZpbyBlbmFibGU9JWRcbiIsIGZiX2RlZmlvKTsKLQotCWRldi0+c2t1X3BpeGVsX2xpbWl0ID0gMjA0OCAqIDExNTI7IC8qIGRlZmF1bHQgdG8gbWF4aW11bSAqLwotCi0JaWYgKCFkbGZiX3BhcnNlX3ZlbmRvcl9kZXNjcmlwdG9yKGRldiwgdXNiZGV2KSkgewotCQlkbF9lcnIoImZpcm13YXJlIG5vdCByZWNvZ25pemVkLiBBc3N1bWUgaW5jb21wYXRpYmxlIGRldmljZVxuIik7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JaWYgKCFkbGZiX2FsbG9jX3VyYl9saXN0KGRldiwgV1JJVEVTX0lOX0ZMSUdIVCwgTUFYX1RSQU5TRkVSKSkgewotCQlyZXR2YWwgPSAtRU5PTUVNOwotCQlkbF9lcnIoImRsZmJfYWxsb2NfdXJiX2xpc3QgZmFpbGVkXG4iKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQkvKiBXZSBkb24ndCByZWdpc3RlciBhIG5ldyBVU0IgY2xhc3MuIE91ciBjbGllbnQgaW50ZXJmYWNlIGlzIGZiZGV2ICovCi0KLQkvKiBhbGxvY2F0ZXMgZnJhbWVidWZmZXIgZHJpdmVyIHN0cnVjdHVyZSwgbm90IGZyYW1lYnVmZmVyIG1lbW9yeSAqLwotCWluZm8gPSBmcmFtZWJ1ZmZlcl9hbGxvYygwLCAmdXNiZGV2LT5kZXYpOwotCWlmICghaW5mbykgewotCQlyZXR2YWwgPSAtRU5PTUVNOwotCQlkbF9lcnIoImZyYW1lYnVmZmVyX2FsbG9jIGZhaWxlZFxuIik7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JZGV2LT5pbmZvID0gaW5mbzsKLQlpbmZvLT5wYXIgPSBkZXY7Ci0JaW5mby0+cHNldWRvX3BhbGV0dGUgPSBkZXYtPnBzZXVkb19wYWxldHRlOwotCWluZm8tPmZib3BzID0gJmRsZmJfb3BzOwotCi0JcmV0dmFsID0gZmJfYWxsb2NfY21hcCgmaW5mby0+Y21hcCwgMjU2LCAwKTsKLQlpZiAocmV0dmFsIDwgMCkgewotCQlkbF9lcnIoImZiX2FsbG9jX2NtYXAgZmFpbGVkICV4XG4iLCByZXR2YWwpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCUlOSVRfREVMQVlFRF9XT1JLKCZkZXYtPmZyZWVfZnJhbWVidWZmZXJfd29yaywKLQkJCSAgZGxmYl9mcmVlX2ZyYW1lYnVmZmVyX3dvcmspOwotCi0JSU5JVF9MSVNUX0hFQUQoJmluZm8tPm1vZGVsaXN0KTsKLQotCXJldHZhbCA9IGRsZmJfc2V0dXBfbW9kZXMoZGV2LCBpbmZvLCBOVUxMLCAwKTsKLQlpZiAocmV0dmFsICE9IDApIHsKLQkJZGxfZXJyKCJ1bmFibGUgdG8gZmluZCBjb21tb24gbW9kZSBmb3IgZGlzcGxheSBhbmQgYWRhcHRlclxuIik7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JLyogcmVhZHkgdG8gYmVnaW4gdXNpbmcgZGV2aWNlICovCi0KLQlhdG9taWNfc2V0KCZkZXYtPnVzYl9hY3RpdmUsIDEpOwotCWRsZmJfc2VsZWN0X3N0ZF9jaGFubmVsKGRldik7Ci0KLQlkbGZiX29wc19jaGVja192YXIoJmluZm8tPnZhciwgaW5mbyk7Ci0JZGxmYl9vcHNfc2V0X3BhcihpbmZvKTsKLQotCXJldHZhbCA9IHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGluZm8pOwotCWlmIChyZXR2YWwgPCAwKSB7Ci0JCWRsX2VycigicmVnaXN0ZXJfZnJhbWVidWZmZXIgZmFpbGVkICVkXG4iLCByZXR2YWwpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGZiX2RldmljZV9hdHRycyk7IGkrKykKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKGluZm8tPmRldiwgJmZiX2RldmljZV9hdHRyc1tpXSk7Ci0KLQlkZXZpY2VfY3JlYXRlX2Jpbl9maWxlKGluZm8tPmRldiwgJmVkaWRfYXR0cik7Ci0KLQlkbF9pbmZvKCJEaXNwbGF5TGluayBVU0IgZGV2aWNlIC9kZXYvZmIlZCBhdHRhY2hlZC4gJWR4JWQgcmVzb2x1dGlvbi4iCi0JCQkiIFVzaW5nICVkSyBmcmFtZWJ1ZmZlciBtZW1vcnlcbiIsIGluZm8tPm5vZGUsCi0JCQlpbmZvLT52YXIueHJlcywgaW5mby0+dmFyLnlyZXMsCi0JCQkoKGRldi0+YmFja2luZ19idWZmZXIpID8KLQkJCWluZm8tPmZpeC5zbWVtX2xlbiAqIDIgOiBpbmZvLT5maXguc21lbV9sZW4pID4+IDEwKTsKLQlyZXR1cm4gMDsKLQotZXJyb3I6Ci0JaWYgKGRldikgewotCi0JCWlmIChpbmZvKSB7Ci0JCQlpZiAoaW5mby0+Y21hcC5sZW4gIT0gMCkKLQkJCQlmYl9kZWFsbG9jX2NtYXAoJmluZm8tPmNtYXApOwotCQkJaWYgKGluZm8tPm1vbnNwZWNzLm1vZGVkYikKLQkJCQlmYl9kZXN0cm95X21vZGVkYihpbmZvLT5tb25zcGVjcy5tb2RlZGIpOwotCQkJaWYgKGluZm8tPnNjcmVlbl9iYXNlKQotCQkJCXZmcmVlKGluZm8tPnNjcmVlbl9iYXNlKTsKLQotCQkJZmJfZGVzdHJveV9tb2RlbGlzdCgmaW5mby0+bW9kZWxpc3QpOwotCi0JCQlmcmFtZWJ1ZmZlcl9yZWxlYXNlKGluZm8pOwotCQl9Ci0KLQkJaWYgKGRldi0+YmFja2luZ19idWZmZXIpCi0JCQl2ZnJlZShkZXYtPmJhY2tpbmdfYnVmZmVyKTsKLQotCQlrcmVmX3B1dCgmZGV2LT5rcmVmLCBkbGZiX2ZyZWUpOyAvKiByZWYgZm9yIGZyYW1lYnVmZmVyICovCi0JCWtyZWZfcHV0KCZkZXYtPmtyZWYsIGRsZmJfZnJlZSk7IC8qIGxhc3QgcmVmIGZyb20ga3JlZl9pbml0ICovCi0KLQkJLyogZGV2IGhhcyBiZWVuIGRlYWxsb2NhdGVkLiBEbyBub3QgZGVyZWZlcmVuY2UgKi8KLQl9Ci0KLQlyZXR1cm4gcmV0dmFsOwotfQotCi1zdGF0aWMgdm9pZCBkbGZiX3VzYl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCi17Ci0Jc3RydWN0IGRsZmJfZGF0YSAqZGV2OwotCXN0cnVjdCBmYl9pbmZvICppbmZvOwotCWludCBpOwotCi0JZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOwotCWluZm8gPSBkZXYtPmluZm87Ci0KLQlkbF9pbmZvKCJVU0IgZGlzY29ubmVjdCBzdGFydGluZ1xuIik7Ci0KLQkvKiB3ZSB2aXJ0dWFsaXplIHVudGlsIGFsbCBmYiBjbGllbnRzIHJlbGVhc2UuIFRoZW4gd2UgZnJlZSAqLwotCWRldi0+dmlydHVhbGl6ZWQgPSB0cnVlOwotCi0JLyogV2hlbiBub24tYWN0aXZlIHdlJ2xsIHVwZGF0ZSB2aXJ0dWFsIGZyYW1lYnVmZmVyLCBidXQgbm8gbmV3IHVyYnMgKi8KLQlhdG9taWNfc2V0KCZkZXYtPnVzYl9hY3RpdmUsIDApOwotCi0JLyogcmVtb3ZlIHVkbGZiJ3Mgc3lzZnMgaW50ZXJmYWNlcyAqLwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGZiX2RldmljZV9hdHRycyk7IGkrKykKLQkJZGV2aWNlX3JlbW92ZV9maWxlKGluZm8tPmRldiwgJmZiX2RldmljZV9hdHRyc1tpXSk7Ci0JZGV2aWNlX3JlbW92ZV9iaW5fZmlsZShpbmZvLT5kZXYsICZlZGlkX2F0dHIpOwotCi0JdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOwotCi0JLyogaWYgY2xpZW50cyBzdGlsbCBoYXZlIHVzIG9wZW4sIHdpbGwgYmUgZnJlZWQgb24gbGFzdCBjbG9zZSAqLwotCWlmIChkZXYtPmZiX2NvdW50ID09IDApCi0JCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmZGV2LT5mcmVlX2ZyYW1lYnVmZmVyX3dvcmssIDApOwotCi0JLyogcmVsZWFzZSByZWZlcmVuY2UgdGFrZW4gYnkga3JlZl9pbml0IGluIHByb2JlKCkgKi8KLQlrcmVmX3B1dCgmZGV2LT5rcmVmLCBkbGZiX2ZyZWUpOwotCi0JLyogY29uc2lkZXIgZGxmYl9kYXRhIGZyZWVkICovCi0KLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBkbGZiX2RyaXZlciA9IHsKLQkubmFtZSA9ICJ1ZGxmYiIsCi0JLnByb2JlID0gZGxmYl91c2JfcHJvYmUsCi0JLmRpc2Nvbm5lY3QgPSBkbGZiX3VzYl9kaXNjb25uZWN0LAotCS5pZF90YWJsZSA9IGlkX3RhYmxlLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgZGxmYl9tb2R1bGVfaW5pdCh2b2lkKQotewotCWludCByZXM7Ci0KLQlyZXMgPSB1c2JfcmVnaXN0ZXIoJmRsZmJfZHJpdmVyKTsKLQlpZiAocmVzKQotCQllcnIoInVzYl9yZWdpc3RlciBmYWlsZWQuIEVycm9yIG51bWJlciAlZCIsIHJlcyk7Ci0KLQlyZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgZGxmYl9tb2R1bGVfZXhpdCh2b2lkKQotewotCXVzYl9kZXJlZ2lzdGVyKCZkbGZiX2RyaXZlcik7Ci19Ci0KLW1vZHVsZV9pbml0KGRsZmJfbW9kdWxlX2luaXQpOwotbW9kdWxlX2V4aXQoZGxmYl9tb2R1bGVfZXhpdCk7Ci0KLXN0YXRpYyB2b2lkIGRsZmJfdXJiX2NvbXBsZXRpb24oc3RydWN0IHVyYiAqdXJiKQotewotCXN0cnVjdCB1cmJfbm9kZSAqdW5vZGUgPSB1cmItPmNvbnRleHQ7Ci0Jc3RydWN0IGRsZmJfZGF0YSAqZGV2ID0gdW5vZGUtPmRldjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JLyogc3luYy9hc3luYyB1bmxpbmsgZmF1bHRzIGFyZW4ndCBlcnJvcnMgKi8KLQlpZiAodXJiLT5zdGF0dXMpIHsKLQkJaWYgKCEodXJiLT5zdGF0dXMgPT0gLUVOT0VOVCB8fAotCQkgICAgdXJiLT5zdGF0dXMgPT0gLUVDT05OUkVTRVQgfHwKLQkJICAgIHVyYi0+c3RhdHVzID09IC1FU0hVVERPV04pKSB7Ci0JCQlkbF9lcnIoIiVzIC0gbm9uemVybyB3cml0ZSBidWxrIHN0YXR1cyByZWNlaXZlZDogJWRcbiIsCi0JCQkJX19mdW5jX18sIHVyYi0+c3RhdHVzKTsKLQkJCWF0b21pY19zZXQoJmRldi0+bG9zdF9waXhlbHMsIDEpOwotCQl9Ci0JfQotCi0JdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gZGV2LT51cmJzLnNpemU7IC8qIHJlc2V0IHRvIGFjdHVhbCAqLwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+dXJicy5sb2NrLCBmbGFncyk7Ci0JbGlzdF9hZGRfdGFpbCgmdW5vZGUtPmVudHJ5LCAmZGV2LT51cmJzLmxpc3QpOwotCWRldi0+dXJicy5hdmFpbGFibGUrKzsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnVyYnMubG9jaywgZmxhZ3MpOwotCi0JLyoKLQkgKiBXaGVuIHVzaW5nIGZiX2RlZmlvLCB3ZSBkZWFkbG9jayBpZiB1cCgpIGlzIGNhbGxlZAotCSAqIHdoaWxlIGFub3RoZXIgaXMgd2FpdGluZy4gU28gcXVldWUgdG8gYW5vdGhlciBwcm9jZXNzLgotCSAqLwotCWlmIChmYl9kZWZpbykKLQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZ1bm9kZS0+cmVsZWFzZV91cmJfd29yaywgMCk7Ci0JZWxzZQotCQl1cCgmZGV2LT51cmJzLmxpbWl0X3NlbSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRsZmJfZnJlZV91cmJfbGlzdChzdHJ1Y3QgZGxmYl9kYXRhICpkZXYpCi17Ci0JaW50IGNvdW50ID0gZGV2LT51cmJzLmNvdW50OwotCXN0cnVjdCBsaXN0X2hlYWQgKm5vZGU7Ci0Jc3RydWN0IHVyYl9ub2RlICp1bm9kZTsKLQlzdHJ1Y3QgdXJiICp1cmI7Ci0JaW50IHJldDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JZGxfbm90aWNlKCJXYWl0aW5nIGZvciBjb21wbGV0ZXMgYW5kIGZyZWVpbmcgYWxsIHJlbmRlciB1cmJzXG4iKTsKLQotCS8qIGtlZXAgd2FpdGluZyBhbmQgZnJlZWluZywgdW50aWwgd2UndmUgZ290ICdlbSBhbGwgKi8KLQl3aGlsZSAoY291bnQtLSkgewotCi0JCS8qIEdldHRpbmcgaW50ZXJydXB0ZWQgbWVhbnMgYSBsZWFrLCBidXQgb2sgYXQgc2h1dGRvd24qLwotCQlyZXQgPSBkb3duX2ludGVycnVwdGlibGUoJmRldi0+dXJicy5saW1pdF9zZW0pOwotCQlpZiAocmV0KQotCQkJYnJlYWs7Ci0KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+dXJicy5sb2NrLCBmbGFncyk7Ci0KLQkJbm9kZSA9IGRldi0+dXJicy5saXN0Lm5leHQ7IC8qIGhhdmUgcmVzZXJ2ZWQgb25lIHdpdGggc2VtICovCi0JCWxpc3RfZGVsX2luaXQobm9kZSk7Ci0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT51cmJzLmxvY2ssIGZsYWdzKTsKLQotCQl1bm9kZSA9IGxpc3RfZW50cnkobm9kZSwgc3RydWN0IHVyYl9ub2RlLCBlbnRyeSk7Ci0JCXVyYiA9IHVub2RlLT51cmI7Ci0KLQkJLyogRnJlZSBlYWNoIHNlcGFyYXRlbHkgYWxsb2NhdGVkIHBpZWNlICovCi0JCXVzYl9mcmVlX2NvaGVyZW50KHVyYi0+ZGV2LCBkZXYtPnVyYnMuc2l6ZSwKLQkJCQkgIHVyYi0+dHJhbnNmZXJfYnVmZmVyLCB1cmItPnRyYW5zZmVyX2RtYSk7Ci0JCXVzYl9mcmVlX3VyYih1cmIpOwotCQlrZnJlZShub2RlKTsKLQl9Ci0KLX0KLQotc3RhdGljIGludCBkbGZiX2FsbG9jX3VyYl9saXN0KHN0cnVjdCBkbGZiX2RhdGEgKmRldiwgaW50IGNvdW50LCBzaXplX3Qgc2l6ZSkKLXsKLQlpbnQgaSA9IDA7Ci0Jc3RydWN0IHVyYiAqdXJiOwotCXN0cnVjdCB1cmJfbm9kZSAqdW5vZGU7Ci0JY2hhciAqYnVmOwotCi0Jc3Bpbl9sb2NrX2luaXQoJmRldi0+dXJicy5sb2NrKTsKLQotCWRldi0+dXJicy5zaXplID0gc2l6ZTsKLQlJTklUX0xJU1RfSEVBRCgmZGV2LT51cmJzLmxpc3QpOwotCi0Jd2hpbGUgKGkgPCBjb3VudCkgewotCQl1bm9kZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB1cmJfbm9kZSksIEdGUF9LRVJORUwpOwotCQlpZiAoIXVub2RlKQotCQkJYnJlYWs7Ci0JCXVub2RlLT5kZXYgPSBkZXY7Ci0KLQkJSU5JVF9ERUxBWUVEX1dPUksoJnVub2RlLT5yZWxlYXNlX3VyYl93b3JrLAotCQkJICBkbGZiX3JlbGVhc2VfdXJiX3dvcmspOwotCi0JCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghdXJiKSB7Ci0JCQlrZnJlZSh1bm9kZSk7Ci0JCQlicmVhazsKLQkJfQotCQl1bm9kZS0+dXJiID0gdXJiOwotCi0JCWJ1ZiA9IHVzYl9hbGxvY19jb2hlcmVudChkZXYtPnVkZXYsIE1BWF9UUkFOU0ZFUiwgR0ZQX0tFUk5FTCwKLQkJCQkJICZ1cmItPnRyYW5zZmVyX2RtYSk7Ci0JCWlmICghYnVmKSB7Ci0JCQlrZnJlZSh1bm9kZSk7Ci0JCQl1c2JfZnJlZV91cmIodXJiKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJLyogdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoIHNldCB0byBhY3R1YWwgYmVmb3JlIHN1Ym1pdCAqLwotCQl1c2JfZmlsbF9idWxrX3VyYih1cmIsIGRldi0+dWRldiwgdXNiX3NuZGJ1bGtwaXBlKGRldi0+dWRldiwgMSksCi0JCQlidWYsIHNpemUsIGRsZmJfdXJiX2NvbXBsZXRpb24sIHVub2RlKTsKLQkJdXJiLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKLQotCQlsaXN0X2FkZF90YWlsKCZ1bm9kZS0+ZW50cnksICZkZXYtPnVyYnMubGlzdCk7Ci0KLQkJaSsrOwotCX0KLQotCXNlbWFfaW5pdCgmZGV2LT51cmJzLmxpbWl0X3NlbSwgaSk7Ci0JZGV2LT51cmJzLmNvdW50ID0gaTsKLQlkZXYtPnVyYnMuYXZhaWxhYmxlID0gaTsKLQotCWRsX25vdGljZSgiYWxsb2NhdGVkICVkICVkIGJ5dGUgdXJic1xuIiwgaSwgKGludCkgc2l6ZSk7Ci0KLQlyZXR1cm4gaTsKLX0KLQotc3RhdGljIHN0cnVjdCB1cmIgKmRsZmJfZ2V0X3VyYihzdHJ1Y3QgZGxmYl9kYXRhICpkZXYpCi17Ci0JaW50IHJldCA9IDA7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqZW50cnk7Ci0Jc3RydWN0IHVyYl9ub2RlICp1bm9kZTsKLQlzdHJ1Y3QgdXJiICp1cmIgPSBOVUxMOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkvKiBXYWl0IGZvciBhbiBpbi1mbGlnaHQgYnVmZmVyIHRvIGNvbXBsZXRlIGFuZCBnZXQgcmUtcXVldWVkICovCi0JcmV0ID0gZG93bl90aW1lb3V0KCZkZXYtPnVyYnMubGltaXRfc2VtLCBHRVRfVVJCX1RJTUVPVVQpOwotCWlmIChyZXQpIHsKLQkJYXRvbWljX3NldCgmZGV2LT5sb3N0X3BpeGVscywgMSk7Ci0JCWRsX3dhcm4oIndhaXQgZm9yIHVyYiBpbnRlcnJ1cHRlZDogJXggYXZhaWxhYmxlOiAlZFxuIiwKLQkJICAgICAgIHJldCwgZGV2LT51cmJzLmF2YWlsYWJsZSk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+dXJicy5sb2NrLCBmbGFncyk7Ci0KLQlCVUdfT04obGlzdF9lbXB0eSgmZGV2LT51cmJzLmxpc3QpKTsgLyogcmVzZXJ2ZWQgb25lIHdpdGggbGltaXRfc2VtICovCi0JZW50cnkgPSBkZXYtPnVyYnMubGlzdC5uZXh0OwotCWxpc3RfZGVsX2luaXQoZW50cnkpOwotCWRldi0+dXJicy5hdmFpbGFibGUtLTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+dXJicy5sb2NrLCBmbGFncyk7Ci0KLQl1bm9kZSA9IGxpc3RfZW50cnkoZW50cnksIHN0cnVjdCB1cmJfbm9kZSwgZW50cnkpOwotCXVyYiA9IHVub2RlLT51cmI7Ci0KLWVycm9yOgotCXJldHVybiB1cmI7Ci19Ci0KLXN0YXRpYyBpbnQgZGxmYl9zdWJtaXRfdXJiKHN0cnVjdCBkbGZiX2RhdGEgKmRldiwgc3RydWN0IHVyYiAqdXJiLCBzaXplX3QgbGVuKQotewotCWludCByZXQ7Ci0KLQlCVUdfT04obGVuID4gZGV2LT51cmJzLnNpemUpOwotCi0JdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gbGVuOyAvKiBzZXQgdG8gYWN0dWFsIHBheWxvYWQgbGVuICovCi0JcmV0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfS0VSTkVMKTsKLQlpZiAocmV0KSB7Ci0JCWRsZmJfdXJiX2NvbXBsZXRpb24odXJiKTsgLyogYmVjYXVzZSBubyBvbmUgZWxzZSB3aWxsICovCi0JCWF0b21pY19zZXQoJmRldi0+bG9zdF9waXhlbHMsIDEpOwotCQlkbF9lcnIoInVzYl9zdWJtaXRfdXJiIGVycm9yICV4XG4iLCByZXQpOwotCX0KLQlyZXR1cm4gcmV0OwotfQotCi1tb2R1bGVfcGFyYW0oY29uc29sZSwgYm9vbCwgU19JV1VTUiB8IFNfSVJVU1IgfCBTX0lXR1JQIHwgU19JUkdSUCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGNvbnNvbGUsICJBbGxvdyBmYmNvbiB0byBjb25zdW1lIGZpcnN0IGZyYW1lYnVmZmVyIGZvdW5kIik7Ci0KLW1vZHVsZV9wYXJhbShmYl9kZWZpbywgYm9vbCwgU19JV1VTUiB8IFNfSVJVU1IgfCBTX0lXR1JQIHwgU19JUkdSUCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGZiX2RlZmlvLCAiRW5hYmxlIGZiX2RlZmlvIG1tYXAgc3VwcG9ydC4gKkV4cGVyaW1lbnRhbCoiKTsKLQotTU9EVUxFX0FVVEhPUigiUm9iZXJ0byBEZSBJb3JpcyA8cm9iZXJ0b0B1bmJpdC5pdD4sICIKLQkgICAgICAiSmF5YSBLdW1hciA8amF5YWt1bWFyLmxrbWxAZ21haWwuY29tPiwgIgotCSAgICAgICJCZXJuaWUgVGhvbXBzb24gPGJlcm5pZUBwbHVnYWJsZS5jb20+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkRpc3BsYXlMaW5rIGtlcm5lbCBmcmFtZWJ1ZmZlciBkcml2ZXIiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VkbGZiL3VkbGZiLmggYi9kcml2ZXJzL3N0YWdpbmcvdWRsZmIvdWRsZmIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmY5Nzg1ZS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdWRsZmIvdWRsZmIuaAorKysgL2Rldi9udWxsCkBAIC0xLDExNyArMCwwIEBACi0jaWZuZGVmIFVETEZCX0gKLSNkZWZpbmUgVURMRkJfSAotCi0vKgotICogVE9ETzogUHJvcG9zZSBzdGFuZGFyZCBmYi5oIGlvY3RsIGZvciByZXBvcnRpbmcgZGFtYWdlLAotICogdXNpbmcgX0lPV1IoKSBhbmQgb25lIG9mIHRoZSBleGlzdGluZyBhcmVhIHN0cnVjdHMgZnJvbSBmYi5oCi0gKiBDb25zaWRlciB0aGVzZSBpb2N0bHMgZGVwcmVjYXRlZCwgYnV0IHRoZXkncmUgc3RpbGwgdXNlZCBieSB0aGUKLSAqIERpc3BsYXlMaW5rIFggc2VydmVyIGFzIHlldCAtIG5lZWQgYm90aCB0byBiZSBtb2RpZmllZCBpbiB0YW5kZW0KLSAqIHdoZW4gbmV3IGlvY3RsKHMpIGFyZSByZWFkeS4KLSAqLwotI2RlZmluZSBETEZCX0lPQ1RMX1JFVFVSTl9FRElECSAweEFECi0jZGVmaW5lIERMRkJfSU9DVExfUkVQT1JUX0RBTUFHRSAweEFBCi1zdHJ1Y3QgZGxvYXJlYSB7Ci0JaW50IHgsIHk7Ci0JaW50IHcsIGg7Ci0JaW50IHgyLCB5MjsKLX07Ci0KLXN0cnVjdCB1cmJfbm9kZSB7Ci0Jc3RydWN0IGxpc3RfaGVhZCBlbnRyeTsKLQlzdHJ1Y3QgZGxmYl9kYXRhICpkZXY7Ci0Jc3RydWN0IGRlbGF5ZWRfd29yayByZWxlYXNlX3VyYl93b3JrOwotCXN0cnVjdCB1cmIgKnVyYjsKLX07Ci0KLXN0cnVjdCB1cmJfbGlzdCB7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCXNwaW5sb2NrX3QgbG9jazsKLQlzdHJ1Y3Qgc2VtYXBob3JlIGxpbWl0X3NlbTsKLQlpbnQgYXZhaWxhYmxlOwotCWludCBjb3VudDsKLQlzaXplX3Qgc2l6ZTsKLX07Ci0KLXN0cnVjdCBkbGZiX2RhdGEgewotCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OwotCXN0cnVjdCBkZXZpY2UgKmdkZXY7IC8qICZ1ZGV2LT5kZXYgKi8KLQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKLQlzdHJ1Y3QgdXJiX2xpc3QgdXJiczsKLQlzdHJ1Y3Qga3JlZiBrcmVmOwotCWNoYXIgKmJhY2tpbmdfYnVmZmVyOwotCWludCBmYl9jb3VudDsKLQlib29sIHZpcnR1YWxpemVkOyAvKiB0cnVlIHdoZW4gcGh5c2ljYWwgdXNiIGRldmljZSBub3QgcHJlc2VudCAqLwotCXN0cnVjdCBkZWxheWVkX3dvcmsgZnJlZV9mcmFtZWJ1ZmZlcl93b3JrOwotCWF0b21pY190IHVzYl9hY3RpdmU7IC8qIDAgPSB1cGRhdGUgdmlydHVhbCBidWZmZXIsIGJ1dCBubyB1c2IgdHJhZmZpYyAqLwotCWF0b21pY190IGxvc3RfcGl4ZWxzOyAvKiAxID0gYSByZW5kZXIgb3AgZmFpbGVkLiBOZWVkIHNjcmVlbiByZWZyZXNoICovCi0JY2hhciAqZWRpZDsgLyogbnVsbCB1bnRpbCB3ZSByZWFkIGVkaWQgZnJvbSBodyBvciBnZXQgZnJvbSBzeXNmcyAqLwotCXNpemVfdCBlZGlkX3NpemU7Ci0JaW50IHNrdV9waXhlbF9saW1pdDsKLQlpbnQgYmFzZTE2OwotCWludCBiYXNlODsKLQl1MzIgcHNldWRvX3BhbGV0dGVbMjU2XTsKLQkvKiBibGl0LW9ubHkgcmVuZGVyaW5nIHBhdGggbWV0cmljcywgZXhwb3NlZCB0aHJvdWdoIHN5c2ZzICovCi0JYXRvbWljX3QgYnl0ZXNfcmVuZGVyZWQ7IC8qIHJhdyBwaXhlbC1ieXRlcyBkcml2ZXIgYXNrZWQgdG8gcmVuZGVyICovCi0JYXRvbWljX3QgYnl0ZXNfaWRlbnRpY2FsOyAvKiBzYXZlZCBlZmZvcnQgd2l0aCBiYWNrYnVmZmVyIGNvbXBhcmlzb24gKi8KLQlhdG9taWNfdCBieXRlc19zZW50OyAvKiB0byB1c2IsIGFmdGVyIGNvbXByZXNzaW9uIGluY2x1ZGluZyBvdmVyaGVhZCAqLwotCWF0b21pY190IGNwdV9rY3ljbGVzX3VzZWQ7IC8qIHRyYW5zcGlyZWQgZHVyaW5nIHBpeGVsIHByb2Nlc3NpbmcgKi8KLX07Ci0KLSNkZWZpbmUgTlJfVVNCX1JFUVVFU1RfSTJDX1NVQl9JTyAweDAyCi0jZGVmaW5lIE5SX1VTQl9SRVFVRVNUX0NIQU5ORUwgMHgxMgotCi0vKiAtQlVMS19TSVpFIGFzIHBlciB1c2Itc2tlbGV0b24uIENhbiB3ZSBnZXQgZnVsbCBwYWdlIGFuZCBhdm9pZCBvdmVyaGVhZD8gKi8KLSNkZWZpbmUgQlVMS19TSVpFIDUxMgotI2RlZmluZSBNQVhfVFJBTlNGRVIgKFBBR0VfU0laRSoxNiAtIEJVTEtfU0laRSkKLSNkZWZpbmUgV1JJVEVTX0lOX0ZMSUdIVCAoNCkKLQotI2RlZmluZSBNSU5fRURJRF9TSVpFIDEyOAotI2RlZmluZSBNQVhfRURJRF9TSVpFIDEyOAotCi0jZGVmaW5lIE1BWF9WRU5ET1JfREVTQ1JJUFRPUl9TSVpFIDI1NgotCi0jZGVmaW5lIEdFVF9VUkJfVElNRU9VVAlIWgotI2RlZmluZSBGUkVFX1VSQl9USU1FT1VUIChIWioyKQotCi0jZGVmaW5lIEJQUCAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgTUFYX0NNRF9QSVhFTFMJCTI1NQotCi0jZGVmaW5lIFJMWF9IRUFERVJfQllURVMJNwotI2RlZmluZSBNSU5fUkxYX1BJWF9CWVRFUyAgICAgICA0Ci0jZGVmaW5lIE1JTl9STFhfQ01EX0JZVEVTCShSTFhfSEVBREVSX0JZVEVTICsgTUlOX1JMWF9QSVhfQllURVMpCi0KLSNkZWZpbmUgUkxFX0hFQURFUl9CWVRFUwk2Ci0jZGVmaW5lIE1JTl9STEVfUElYX0JZVEVTCTMKLSNkZWZpbmUgTUlOX1JMRV9DTURfQllURVMJKFJMRV9IRUFERVJfQllURVMgKyBNSU5fUkxFX1BJWF9CWVRFUykKLQotI2RlZmluZSBSQVdfSEVBREVSX0JZVEVTCTYKLSNkZWZpbmUgTUlOX1JBV19QSVhfQllURVMJMgotI2RlZmluZSBNSU5fUkFXX0NNRF9CWVRFUwkoUkFXX0hFQURFUl9CWVRFUyArIE1JTl9SQVdfUElYX0JZVEVTKQotCi0jZGVmaW5lIERMX0RFRklPX1dSSVRFX0RFTEFZICAgIDUgLyogZmJfZGVmZXJyZWRfaW8uZGVsYXkgaW4gamlmZmllcyAqLwotI2RlZmluZSBETF9ERUZJT19XUklURV9ESVNBQkxFICAoSFoqNjApIC8qICJkaXNhYmxlIiB3aXRoIGxvbmcgZGVsYXkgKi8KLQotLyogcmVtb3ZlIHRoZXNlIG9uY2UgYWxpZ24uaCBwYXRjaCBpcyB0YWtlbiBpbnRvIGtlcm5lbCAqLwotI2RlZmluZSBETF9BTElHTl9VUCh4LCBhKSBBTElHTih4LCBhKQotI2RlZmluZSBETF9BTElHTl9ET1dOKHgsIGEpIEFMSUdOKHgtKGEtMSksIGEpCi0KLS8qIHJlbW92ZSBvbmNlIHRoaXMgZ2V0cyBhZGRlZCB0byBzeXNmcy5oICovCi0jZGVmaW5lIF9fQVRUUl9SVyhhdHRyKSBfX0FUVFIoYXR0ciwgMDY0NCwgYXR0ciMjX3Nob3csIGF0dHIjI19zdG9yZSkKLQotLyoKLSAqIHVkbGZiIGlzIGJvdGggYSB1c2IgZGV2aWNlLCBhbmQgYSBmcmFtZWJ1ZmZlciBkZXZpY2UuCi0gKiBUaGV5IG1heSBleGlzdCBhdCB0aGUgc2FtZSB0aW1lLCBidXQgZHVyaW5nIHZhcmlvdXMgc3RhZ2VzCi0gKiBpbmFjdGl2aXR5LCB0ZWFyZG93biwgb3IgInZpcnR1YWwiIG9wZXJhdGlvbiwgb25seSBvbmUgb3IgdGhlCi0gKiBvdGhlciB3aWxsIGV4aXN0IChvbmUgd2lsbCBvdXRsaXZlIHRoZSBvdGhlcikuICBTbyB3ZSBjYW4ndAotICogY2FsbCB0aGUgZGV2XyooKSBtYWNyb3MsIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBhIHN0YWJsZSBkZXYgb2JqZWN0LgotICovCi0jZGVmaW5lIGRsX2Vycihmb3JtYXQsIGFyZy4uLikgXAotCXByX2VycigidWRsZmI6ICIgZm9ybWF0LCAjIyBhcmcpCi0jZGVmaW5lIGRsX3dhcm4oZm9ybWF0LCBhcmcuLi4pIFwKLQlwcl93YXJuaW5nKCJ1ZGxmYjogIiBmb3JtYXQsICMjIGFyZykKLSNkZWZpbmUgZGxfbm90aWNlKGZvcm1hdCwgYXJnLi4uKSBcCi0JcHJfbm90aWNlKCJ1ZGxmYjogIiBmb3JtYXQsICMjIGFyZykKLSNkZWZpbmUgZGxfaW5mbyhmb3JtYXQsIGFyZy4uLikgXAotCXByX2luZm8oInVkbGZiOiAiIGZvcm1hdCwgIyMgYXJnKQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2J2aWRlby9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL3VzYnZpZGVvL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY2ZDY1OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2J2aWRlby9LY29uZmlnCkBAIC0wLDAgKzEsMTUgQEAKK2NvbmZpZyBWSURFT19VU0JWSURFTworCXRyaXN0YXRlCisKK2NvbmZpZyBVU0JfVklDQU0KKwl0cmlzdGF0ZSAiVVNCIDNjb20gSG9tZUNvbm5lY3QgKGFrYSB2aWNhbSkgc3VwcG9ydCAoREVQUkVDQVRFRCkiCisJZGVwZW5kcyBvbiBWSURFT19ERVYgJiYgVklERU9fVjRMMl9DT01NT04gJiYgVVNCCisJc2VsZWN0IFZJREVPX1VTQlZJREVPCisJLS0taGVscC0tLQorCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSAzY29tIGhvbWVjb25uZWN0IGNhbWVyYSAodmljYW0pLgorCisJICBUaGlzIGRyaXZlciB1c2VzIHRoZSBkZXByZWNhdGVkIFY0TDEgQVBJIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4KKwkgIDIuNi4zOSwgdW5sZXNzIHNvbWVvbmUgY29udmVydHMgaXQgdG8gdGhlIFY0TDIgQVBJLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB2aWNhbS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2J2aWRlby9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy91c2J2aWRlby9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzk5YTlhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VzYnZpZGVvL01ha2VmaWxlCkBAIC0wLDAgKzEsMiBAQAorb2JqLSQoQ09ORklHX1ZJREVPX1VTQlZJREVPKSAgICArPSB1c2J2aWRlby5vCitvYmotJChDT05GSUdfVVNCX1ZJQ0FNKSAgICAgICAgICs9IHZpY2FtLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2J2aWRlby9UT0RPIGIvZHJpdmVycy9zdGFnaW5nL3VzYnZpZGVvL1RPRE8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2IyYzAzOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2J2aWRlby9UT0RPCkBAIC0wLDAgKzEsNSBAQAorVGhpcyBpcyBhbiBvYnNvbGV0ZSBkcml2ZXIgZm9yIHNvbWUgb2xkIHdlYmNhbXMgdGhhdCBzdGlsbCB1c2UgVjRMMSBBUEkuIAorQXMgVjRMMSBzdXBwb3J0IGlzIGJlaW5nIHJlbW92ZWQgZnJvbSBrZXJuZWwsIGlmIG5vYm9keSB0YWtlIGNhcmUgb24gaXQsIAordGhlIGRyaXZlciB3aWxsIGJlIHJlbW92ZWQgZm9yIDIuNi4zOS4KKworUGxlYXNlIHNlbmQgcGF0Y2hlcyB0byBsaW51eC1tZWRpYUB2Z2VyLmtlcm5lbC5vcmcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vdXNidmlkZW8uYyBiL2RyaXZlcnMvc3RhZ2luZy91c2J2aWRlby91c2J2aWRlby5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL3VzYnZpZGVvLmMKcmVuYW1lIHRvIGRyaXZlcnMvc3RhZ2luZy91c2J2aWRlby91c2J2aWRlby5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdXNidmlkZW8vdXNidmlkZW8uaCBiL2RyaXZlcnMvc3RhZ2luZy91c2J2aWRlby91c2J2aWRlby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1NjM4YTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdXNidmlkZW8vdXNidmlkZW8uaApAQCAtMCwwICsxLDM5NSBAQAorLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisjaWZuZGVmIHVzYnZpZGVvX2gKKyNkZWZpbmUJdXNidmlkZW9faAorCisjaW5jbHVkZSAidmlkZW9kZXYuaCIKKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorCisvKiBNb3N0IGhlbHBmdWwgZGVidWdnaW5nIGFpZCAqLworI2RlZmluZSBhc3NlcnQoZXhwcikgKCh2b2lkKSAoKGV4cHIpID8gMCA6IChlcnIoImFzc2VydCBmYWlsZWQgYXQgbGluZSAlZCIsX19MSU5FX18pKSkpCisKKyNkZWZpbmUgVVNCVklERU9fUkVQT1JUX1NUQVRTCTEJLyogU2V0IHRvIDAgdG8gYmxvY2sgc3RhdGlzdGljcyBvbiBjbG9zZSAqLworCisvKiBCaXQgZmxhZ3MgKG9wdGlvbnMpICovCisjZGVmaW5lIEZMQUdTX1JFVFJZX1ZJRElPQ1NZTkMJCSgxIDw8IDApCisjZGVmaW5lCUZMQUdTX01PTk9DSFJPTUUJCSgxIDw8IDEpCisjZGVmaW5lIEZMQUdTX0RJU1BMQVlfSElOVFMJCSgxIDw8IDIpCisjZGVmaW5lIEZMQUdTX09WRVJMQVlfU1RBVFMJCSgxIDw8IDMpCisjZGVmaW5lIEZMQUdTX0ZPUkNFX1RFU1RQQVRURVJOCQkoMSA8PCA0KQorI2RlZmluZSBGTEFHU19TRVBBUkFURV9GUkFNRVMJCSgxIDw8IDUpCisjZGVmaW5lIEZMQUdTX0NMRUFOX0ZSQU1FUwkJKDEgPDwgNikKKyNkZWZpbmUJRkxBR1NfTk9fREVDT0RJTkcJCSgxIDw8IDcpCisKKy8qIEJpdCBmbGFncyBmb3IgZnJhbWVzIChhcHBseSB0byB0aGUgZnJhbWUgd2hlcmUgdGhleSBhcmUgc3BlY2lmaWVkKSAqLworI2RlZmluZSBVU0JWSURFT19GUkFNRV9GTEFHX1NPRlRXQVJFX0NPTlRSQVNUCSgxIDw8IDApCisKKy8qIENhbWVyYSBjYXBhYmlsaXRpZXMgKG1heGltdW0pICovCisjZGVmaW5lIENBTUVSQV9VUkJfRlJBTUVTICAgICAgIDMyCisjZGVmaW5lIENBTUVSQV9NQVhfSVNPX1BBQ0tFVCAgIDEwMjMgLyogMTAyMiBhY3R1YWxseSBzZW50IGJ5IGNhbWVyYSAqLworI2RlZmluZSBGUkFNRVNfUEVSX0RFU0MJCShDQU1FUkFfVVJCX0ZSQU1FUykKKyNkZWZpbmUgRlJBTUVfU0laRV9QRVJfREVTQwkoQ0FNRVJBX01BWF9JU09fUEFDS0VUKQorCisvKiBUaGlzIG1hY3JvIHJlc3RyaWN0cyBhbiBpbnQgdmFyaWFibGUgdG8gYW4gaW5jbHVzaXZlIHJhbmdlICovCisjZGVmaW5lIFJFU1RSSUNUX1RPX1JBTkdFKHYsbWksbWEpIHsgaWYgKCh2KSA8IChtaSkpICh2KSA9IChtaSk7IGVsc2UgaWYgKCh2KSA+IChtYSkpICh2KSA9IChtYSk7IH0KKworI2RlZmluZSBWNExfQllURVNfUEVSX1BJWEVMICAgICAzCS8qIEJlY2F1c2Ugd2UgcHJvZHVjZSBSR0IyNCAqLworCisvKgorICogVXNlIHRoaXMgbWFjcm8gdG8gY29uc3RydWN0IGNvbnN0YW50cyBmb3IgZGlmZmVyZW50IHZpZGVvIHNpemVzLgorICogV2UgaGF2ZSB0byBkZWFsIHdpdGggZGlmZmVyZW50IHZpZGVvIHNpemVzIHRoYXQgaGF2ZSB0byBiZQorICogY29uZmlndXJlZCBpbiB0aGUgZGV2aWNlIG9yIGNvbXBhcmVkIGFnYWluc3Qgd2hlbiB3ZSByZWNlaXZlCisgKiBhIGRhdGEuIE5vcm1hbGx5IG9uZSB3b3VsZCBkZWZpbmUgYSBidW5jaCBvZiBWSURFT1NJWkVfeF9ieV95CisgKiAjZGVmaW5lcyBhbmQgdGhhdCdzIHRoZSBlbmQgb2Ygc3RvcnkuIEhvd2V2ZXIgdGhpcyBzb2x1dGlvbgorICogZG9lcyBub3QgYWxsb3cgdG8gY29udmVydCBiZXR3ZWVuIHJlYWwgcGl4ZWwgc2l6ZXMgYW5kIHRoZQorICogY29uc3RhbnQgKGludGVnZXIpIHZhbHVlIHRoYXQgbWF5IGJlIHVzZWQgdG8gdGFnIGEgZnJhbWUgb3IKKyAqIHdoYXRldmVyLiBUaGUgc2V0IG9mIG1hY3JvcyBiZWxvdyBjb25zdHJ1Y3RzIHZpZGVvc2l6ZSBjb25zdGFudHMKKyAqIGZyb20gdGhlIHBpeGVsIHNpemUgYW5kIGFsbG93cyB0byByZWNvbnN0cnVjdCB0aGUgcGl4ZWwgc2l6ZQorICogZnJvbSB0aGUgY29tYmluZWQgdmFsdWUgbGF0ZXIuCisgKi8KKyNkZWZpbmUJVklERU9TSVpFKHgseSkJKCgoeCkgJiAweEZGRkZMKSB8ICgoKHkpICYgMHhGRkZGTCkgPDwgMTYpKQorI2RlZmluZQlWSURFT1NJWkVfWCh2cykJKCh2cykgJiAweEZGRkZMKQorI2RlZmluZQlWSURFT1NJWkVfWSh2cykJKCgodnMpID4+IDE2KSAmIDB4RkZGRkwpCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdmlkZW9zaXplX3Q7CisKKy8qCisgKiBUaGlzIG1hY3JvIGNoZWNrcyBpZiB0aGUgY2FtZXJhIGlzIHN0aWxsIG9wZXJhdGlvbmFsLiBUaGUgJ3V2ZCcKKyAqIHBvaW50ZXIgbXVzdCBiZSB2YWxpZCwgdXZkLT5kZXYgbXVzdCBiZSB2YWxpZCwgd2UgYXJlIG5vdAorICogcmVtb3ZpbmcgdGhlIGRldmljZSBhbmQgdGhlIGRldmljZSBoYXMgbm90IGVycmVkIG9uIHVzLgorICovCisjZGVmaW5lIENBTUVSQV9JU19PUEVSQVRJT05BTCh1dmQpIChcCisJKHV2ZCAhPSBOVUxMKSAmJiBcCisJKCh1dmQpLT5kZXYgIT0gTlVMTCkgJiYgXAorCSgodXZkKS0+bGFzdF9lcnJvciA9PSAwKSAmJiBcCisJKCEodXZkKS0+cmVtb3ZlX3BlbmRpbmcpKQorCisvKgorICogV2UgdXNlIG1hY3JvcyB0byBkbyBZVVYgLT4gUkdCIGNvbnZlcnNpb24gYmVjYXVzZSB0aGlzIGlzCisgKiB2ZXJ5IGltcG9ydGFudCBmb3Igc3BlZWQgYW5kIHRvdGFsbHkgdW5pbXBvcnRhbnQgZm9yIHNpemUuCisgKgorICogWVVWIC0+IFJHQiBDb252ZXJzaW9uCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBCID0gMS4xNjQqKFktMTYpCQkgICAgKyAyLjAxOCooVi0xMjgpCisgKiBHID0gMS4xNjQqKFktMTYpIC0gMC44MTMqKFUtMTI4KSAtIDAuMzkxKihWLTEyOCkKKyAqIFIgPSAxLjE2NCooWS0xNikgKyAxLjU5NiooVS0xMjgpCisgKgorICogSWYgeW91IGZhbmN5IGludGVnZXIgYXJpdGhtZXRpY3MgKGFzIHlvdSBzaG91bGQpLCBoZWFyIHRoaXM6CisgKgorICogNjU1MzYqQiA9IDc2Mjg0KihZLTE2KQkJICArIDEzMjI1MiooVi0xMjgpCisgKiA2NTUzNipHID0gNzYyODQqKFktMTYpIC0gIDUzMjgxKihVLTEyOCkgLSAgMjU2MjUqKFYtMTI4KQorICogNjU1MzYqUiA9IDc2Mjg0KihZLTE2KSArIDEwNDU5NSooVS0xMjgpCisgKgorICogTWFrZSBzdXJlIHRoZSBvdXRwdXQgdmFsdWVzIGFyZSB3aXRoaW4gWzAuLjI1NV0gcmFuZ2UuCisgKi8KKyNkZWZpbmUgTElNSVRfUkdCKHgpICgoKHgpIDwgMCkgPyAwIDogKCgoeCkgPiAyNTUpID8gMjU1IDogKHgpKSkKKyNkZWZpbmUgWVVWX1RPX1JHQl9CWV9USEVfQk9PSyhteSxtdSxtdixtcixtZyxtYikgeyBcCisgICAgaW50IG1tX3ksIG1tX3ljLCBtbV91LCBtbV92LCBtbV9yLCBtbV9nLCBtbV9iOyBcCisgICAgbW1feSA9IChteSkgLSAxNjsgIFwKKyAgICBtbV91ID0gKG11KSAtIDEyODsgXAorICAgIG1tX3YgPSAobXYpIC0gMTI4OyBcCisgICAgbW1feWM9IG1tX3kgKiA3NjI4NDsgXAorICAgIG1tX2IgPSAobW1feWMJCSsgMTMyMjUyKm1tX3YJKSA+PiAxNjsgXAorICAgIG1tX2cgPSAobW1feWMgLSAgNTMyODEqbW1fdSAtICAyNTYyNSptbV92CSkgPj4gMTY7IFwKKyAgICBtbV9yID0gKG1tX3ljICsgMTA0NTk1Km1tX3UJCQkpID4+IDE2OyBcCisgICAgbWIgPSBMSU1JVF9SR0IobW1fYik7IFwKKyAgICBtZyA9IExJTUlUX1JHQihtbV9nKTsgXAorICAgIG1yID0gTElNSVRfUkdCKG1tX3IpOyBcCit9CisKKyNkZWZpbmUJUklOR19RVUVVRV9TSVpFCQkoMTI4KjEwMjQpCS8qIE11c3QgYmUgYSBwb3dlciBvZiAyICovCisjZGVmaW5lCVJJTkdfUVVFVUVfQURWQU5DRV9JTkRFWChycSxpbmQsbikgKHJxKS0+aW5kID0gKChycSktPmluZCArIChuKSkgJiAoKHJxKS0+bGVuZ3RoLTEpCisjZGVmaW5lCVJJTkdfUVVFVUVfREVRVUVVRV9CWVRFUyhycSxuKSBSSU5HX1FVRVVFX0FEVkFOQ0VfSU5ERVgocnEscmksbikKKyNkZWZpbmUJUklOR19RVUVVRV9QRUVLKHJxLG9mcykgKChycSktPnF1ZXVlWygob2ZzKSArIChycSktPnJpKSAmICgocnEpLT5sZW5ndGgtMSldKQorCitzdHJ1Y3QgUmluZ1F1ZXVlIHsKKwl1bnNpZ25lZCBjaGFyICpxdWV1ZTsJLyogRGF0YSBmcm9tIHRoZSBJc29jIGRhdGEgcHVtcCAqLworCWludCBsZW5ndGg7CQkvKiBIb3cgbWFueSBieXRlcyBhbGxvY2F0ZWQgZm9yIHRoZSBxdWV1ZSAqLworCWludCB3aTsJCQkvKiBUaGF0J3Mgd2hlcmUgd2Ugd3JpdGUgKi8KKwlpbnQgcmk7CQkJLyogUmVhZCBmcm9tIGhlcmUgdW50aWwgeW91IGhpdCB3cml0ZSBpbmRleCAqLworCXdhaXRfcXVldWVfaGVhZF90IHdxaDsJLyogUHJvY2Vzc2VzIHdhaXRpbmcgKi8KK307CisKK2VudW0gU2NhblN0YXRlIHsKKwlTY2FuU3RhdGVfU2Nhbm5pbmcsCS8qIFNjYW5uaW5nIGZvciBoZWFkZXIgKi8KKwlTY2FuU3RhdGVfTGluZXMJCS8qIFBhcnNpbmcgbGluZXMgKi8KK307CisKKy8qIENvbXBsZXRpb24gc3RhdGVzIG9mIHRoZSBkYXRhIHBhcnNlciAqLworZW51bSBQYXJzZVN0YXRlIHsKKwlzY2FuX0NvbnRpbnVlLAkJLyogSnVzdCBwYXJzZSBuZXh0IGl0ZW0gKi8KKwlzY2FuX05leHRGcmFtZSwJCS8qIEZyYW1lIGRvbmUsIHNlbmQgaXQgdG8gVjRMICovCisJc2Nhbl9PdXQsCQkvKiBOb3QgZW5vdWdoIGRhdGEgZm9yIGZyYW1lICovCisJc2Nhbl9FbmRQYXJzZQkJLyogRW5kIHBhcnNpbmcgKi8KK307CisKK2VudW0gRnJhbWVTdGF0ZSB7CisJRnJhbWVTdGF0ZV9VbnVzZWQsCS8qIFVudXNlZCAobm8gTUNBUFRVUkUpICovCisJRnJhbWVTdGF0ZV9SZWFkeSwJLyogUmVhZHkgdG8gc3RhcnQgZ3JhYmJpbmcgKi8KKwlGcmFtZVN0YXRlX0dyYWJiaW5nLAkvKiBJbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBncmFiYmVkIGludG8gKi8KKwlGcmFtZVN0YXRlX0RvbmUsCS8qIEZpbmlzaGVkIGdyYWJiaW5nLCBidXQgbm90IGJlZW4gc3luY2VkIHlldCAqLworCUZyYW1lU3RhdGVfRG9uZV9Ib2xkLAkvKiBBcmUgc3luY2luZyBvciByZWFkaW5nICovCisJRnJhbWVTdGF0ZV9FcnJvciwJLyogU29tZXRoaW5nIGJhZCBoYXBwZW5lZCB3aGlsZSBwcm9jZXNzaW5nICovCit9OworCisvKgorICogU29tZSBmcmFtZXMgbWF5IGNvbnRhaW4gb25seSBldmVuIG9yIG9kZCBsaW5lcy4gVGhpcyB0eXBlCisgKiBzcGVjaWZpZXMgd2hhdCB0eXBlIG9mIGRlaW50ZXJsYWNpbmcgaXMgcmVxdWlyZWQuCisgKi8KK2VudW0gRGVpbnRlcmxhY2UgeworCURlaW50ZXJsYWNlX05vbmU9MCwKKwlEZWludGVybGFjZV9GaWxsT2RkTGluZXMsCisJRGVpbnRlcmxhY2VfRmlsbEV2ZW5MaW5lcworfTsKKworI2RlZmluZSBVU0JWSURFT19OVU1GUkFNRVMJMgkvKiBIb3cgbWFueSBmcmFtZXMgd2Ugd29yayB3aXRoICovCisjZGVmaW5lIFVTQlZJREVPX05VTVNCVUYJMgkvKiBIb3cgbWFueSBVUkJzIGxpbmtlZCBpbiBhIHJpbmcgKi8KKworLyogVGhpcyBzdHJ1Y3R1cmUgcmVwcmVzZW50cyBvbmUgSXNvYyByZXF1ZXN0IC0gVVJCIGFuZCBidWZmZXIgKi8KK3N0cnVjdCB1c2J2aWRlb19zYnVmIHsKKwljaGFyICpkYXRhOworCXN0cnVjdCB1cmIgKnVyYjsKK307CisKK3N0cnVjdCB1c2J2aWRlb19mcmFtZSB7CisJY2hhciAqZGF0YTsJCS8qIEZyYW1lIGJ1ZmZlciAqLworCXVuc2lnbmVkIGxvbmcgaGVhZGVyOwkvKiBTaWduaWZpY2FudCBiaXRzIGZyb20gdGhlIGhlYWRlciAqLworCisJdmlkZW9zaXplX3QgY2FudmFzOwkvKiBUaGUgY2FudmFzIChtYXguIGltYWdlKSBhbGxvY2F0ZWQgKi8KKwl2aWRlb3NpemVfdCByZXF1ZXN0OwkvKiBUaGF0J3Mgd2hhdCB0aGUgYXBwbGljYXRpb24gYXNrZWQgZm9yICovCisJdW5zaWduZWQgc2hvcnQgcGFsZXR0ZTsJLyogVGhlIGRlc2lyZWQgZm9ybWF0ICovCisKKwllbnVtIEZyYW1lU3RhdGUgZnJhbWVTdGF0ZTsvKiBTdGF0ZSBvZiBncmFiYmluZyAqLworCWVudW0gU2NhblN0YXRlIHNjYW5zdGF0ZTsJLyogU3RhdGUgb2Ygc2Nhbm5pbmcgKi8KKwllbnVtIERlaW50ZXJsYWNlIGRlaW50ZXJsYWNlOworCWludCBmbGFnczsJCS8qIFVTQlZJREVPX0ZSQU1FX0ZMQUdfeHh4IGJpdCBmbGFncyAqLworCisJaW50IGN1cmxpbmU7CQkvKiBMaW5lIG9mIGZyYW1lIHdlJ3JlIHdvcmtpbmcgb24gKi8KKworCWxvbmcgc2VxUmVhZF9MZW5ndGg7CS8qIFJhdyBkYXRhIGxlbmd0aCBvZiBmcmFtZSAqLworCWxvbmcgc2VxUmVhZF9JbmRleDsJLyogQW1vdW50IG9mIGRhdGEgdGhhdCBoYXMgYmVlbiBhbHJlYWR5IHJlYWQgKi8KKworCXZvaWQgKnVzZXI7CQkvKiBBZGRpdGlvbmFsIGRhdGEgdGhhdCB1c2VyIG1heSBuZWVkICovCit9OworCisvKiBTdGF0aXN0aWNzIHRoYXQgY2FuIGJlIG92ZXJsYWlkIG9uIHNjcmVlbiAqLworc3RydWN0IHVzYnZpZGVvX3N0YXRpc3RpY3MgeworCXVuc2lnbmVkIGxvbmcgZnJhbWVfbnVtOwkvKiBTZXF1ZW50aWFsIG51bWJlciBvZiB0aGUgZnJhbWUgKi8KKwl1bnNpZ25lZCBsb25nIHVyYl9jb3VudDsgICAgICAgIC8qIEhvdyBtYW55IFVSQnMgd2UgcmVjZWl2ZWQgc28gZmFyICovCisJdW5zaWduZWQgbG9uZyB1cmJfbGVuZ3RoOyAgICAgICAvKiBMZW5ndGggb2YgbGFzdCBVUkIgKi8KKwl1bnNpZ25lZCBsb25nIGRhdGFfY291bnQ7ICAgICAgIC8qIEhvdyBtYW55IGJ5dGVzIHdlIHJlY2VpdmVkICovCisJdW5zaWduZWQgbG9uZyBoZWFkZXJfY291bnQ7ICAgICAvKiBIb3cgbWFueSBmcmFtZSBoZWFkZXJzIHdlIGZvdW5kICovCisJdW5zaWduZWQgbG9uZyBpc29fc2tpcF9jb3VudDsJLyogSG93IG1hbnkgZW1wdHkgSVNPIHBhY2tldHMgcmVjZWl2ZWQgKi8KKwl1bnNpZ25lZCBsb25nIGlzb19lcnJfY291bnQ7CS8qIEhvdyBtYW55IGJhZCBJU08gcGFja2V0cyByZWNlaXZlZCAqLworfTsKKworc3RydWN0IHVzYnZpZGVvOworCitzdHJ1Y3QgdXZkIHsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlIHZkZXY7CS8qIE11c3QgYmUgdGhlIGZpcnN0IGZpZWxkISAqLworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXY7CisJc3RydWN0IHVzYnZpZGVvICpoYW5kbGU7CS8qIFBvaW50cyBiYWNrIHRvIHRoZSBzdHJ1Y3QgdXNidmlkZW8gKi8KKwl2b2lkICp1c2VyX2RhdGE7CQkvKiBDYW1lcmEtZGVwZW5kZW50IGRhdGEgKi8KKwlpbnQgdXNlcl9zaXplOwkJCS8qIFNpemUgb2YgdGhhdCBjYW1lcmEtZGVwZW5kZW50IGRhdGEgKi8KKwlpbnQgZGVidWc7CQkJLyogRGVidWcgbGV2ZWwgZm9yIHVzYnZpZGVvICovCisJdW5zaWduZWQgY2hhciBpZmFjZTsJCS8qIFZpZGVvIGludGVyZmFjZSBudW1iZXIgKi8KKwl1bnNpZ25lZCBjaGFyIHZpZGVvX2VuZHA7CisJdW5zaWduZWQgY2hhciBpZmFjZUFsdEFjdGl2ZTsKKwl1bnNpZ25lZCBjaGFyIGlmYWNlQWx0SW5hY3RpdmU7IC8qIEFsdCBzZXR0aW5ncyAqLworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CQkvKiBGTEFHU19VU0JWSURFT194eHggKi8KKwl1bnNpZ25lZCBsb25nIHBhbGV0dGVCaXRzOwkvKiBXaGljaCBwYWxldHRlcyB3ZSBhY2NlcHQ/ICovCisJdW5zaWduZWQgc2hvcnQgZGVmYXVsdFBhbGV0dGU7CS8qIFdoYXQgcGFsZXR0ZSB0byB1c2UgZm9yIHJlYWQoKSAqLworCXN0cnVjdCBtdXRleCBsb2NrOworCWludCB1c2VyOwkJLyogdXNlciBjb3VudCBmb3IgZXhjbHVzaXZlIHVzZSAqLworCisJdmlkZW9zaXplX3QgdmlkZW9zaXplOwkvKiBDdXJyZW50IHNldHRpbmcgKi8KKwl2aWRlb3NpemVfdCBjYW52YXM7CS8qIFRoaXMgaXMgdGhlIHdpZHRoLGhlaWdodCBvZiB0aGUgVjRMIGNhbnZhcyAqLworCWludCBtYXhfZnJhbWVfc2l6ZTsJLyogQnl0ZXMgaW4gb25lIHZpZGVvIGZyYW1lICovCisKKwlpbnQgdXZkX3VzZWQ7ICAgICAgICAJLyogSXMgdGhpcyBzdHJ1Y3R1cmUgaW4gdXNlPyAqLworCWludCBzdHJlYW1pbmc7CQkvKiBBcmUgd2Ugc3RyZWFtaW5nIElzb2Nocm9ub3VzPyAqLworCWludCBncmFiYmluZzsJCS8qIEFyZSB3ZSBncmFiYmluZz8gKi8KKwlpbnQgc2V0dGluZ3NBZGp1c3RlZDsJLyogSGF2ZSB3ZSBhZGp1c3RlZCBjb250cmFzdCBldGMuPyAqLworCWludCBsYXN0X2Vycm9yOwkJLyogV2hhdCBjYWxhbWl0eSBzdHJ1Y2sgdXM/ICovCisKKwljaGFyICpmYnVmOwkJLyogVmlkZW9kZXYgYnVmZmVyIGFyZWEgKi8KKwlpbnQgZmJ1Zl9zaXplOwkJLyogVmlkZW9kZXYgYnVmZmVyIHNpemUgKi8KKworCWludCBjdXJmcmFtZTsKKwlpbnQgaXNvX3BhY2tldF9sZW47CS8qIFZpZGVvbW9kZS1kZXBlbmRlbnQsIHNhdmVzIGJ1cyBiYW5kd2lkdGggKi8KKworCXN0cnVjdCBSaW5nUXVldWUgZHA7CS8qIElzb2MgZGF0YSBwdW1wICovCisJc3RydWN0IHVzYnZpZGVvX2ZyYW1lIGZyYW1lW1VTQlZJREVPX05VTUZSQU1FU107CisJc3RydWN0IHVzYnZpZGVvX3NidWYgc2J1ZltVU0JWSURFT19OVU1TQlVGXTsKKworCXZvbGF0aWxlIGludCByZW1vdmVfcGVuZGluZzsJLyogSWYgc2V0IHRoZW4gYWJvdXQgdG8gZXhpdCAqLworCisJc3RydWN0IHZpZGVvX3BpY3R1cmUgdnBpYywgdnBpY19vbGQ7CS8qIFBpY3R1cmUgc2V0dGluZ3MgKi8KKwlzdHJ1Y3QgdmlkZW9fY2FwYWJpbGl0eSB2Y2FwOwkJLyogVmlkZW8gY2FwYWJpbGl0aWVzICovCisJc3RydWN0IHZpZGVvX2NoYW5uZWwgdmNoYW47CS8qIE1heSBiZSB1c2VkIGZvciB0dW5lciBzdXBwb3J0ICovCisJc3RydWN0IHVzYnZpZGVvX3N0YXRpc3RpY3Mgc3RhdHM7CisJY2hhciB2aWRlb05hbWVbMzJdOwkJLyogSG9sZHMgbmFtZSBsaWtlICJ2aWRlbzciICovCit9OworCisvKgorICogdXNidmlkZW8gY2FsbGJhY2tzICh2aXJ0dWFsIG1ldGhvZHMpLiBUaGV5IGFyZSBzZXQgd2hlbiB1c2J2aWRlbworICogc2VydmljZXMgYXJlIHJlZ2lzdGVyZWQuIEFsbCBvZiB0aGVzZSBkZWZhdWx0IHRvIE5VTEwsIGV4Y2VwdCB0aG9zZQorICogdGhhdCBkZWZhdWx0IHRvIHVzYnZpZGVvLXByb3ZpZGVkIG1ldGhvZHMuCisgKi8KK3N0cnVjdCB1c2J2aWRlb19jYiB7CisJaW50ICgqcHJvYmUpKHN0cnVjdCB1c2JfaW50ZXJmYWNlICosIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICopOworCXZvaWQgKCp1c2VyRnJlZSkoc3RydWN0IHV2ZCAqKTsKKwl2b2lkICgqZGlzY29ubmVjdCkoc3RydWN0IHVzYl9pbnRlcmZhY2UgKik7CisJaW50ICgqc2V0dXBPbk9wZW4pKHN0cnVjdCB1dmQgKik7CisJdm9pZCAoKnZpZGVvU3RhcnQpKHN0cnVjdCB1dmQgKik7CisJdm9pZCAoKnZpZGVvU3RvcCkoc3RydWN0IHV2ZCAqKTsKKwl2b2lkICgqcHJvY2Vzc0RhdGEpKHN0cnVjdCB1dmQgKiwgc3RydWN0IHVzYnZpZGVvX2ZyYW1lICopOworCXZvaWQgKCpwb3N0UHJvY2Vzcykoc3RydWN0IHV2ZCAqLCBzdHJ1Y3QgdXNidmlkZW9fZnJhbWUgKik7CisJdm9pZCAoKmFkanVzdFBpY3R1cmUpKHN0cnVjdCB1dmQgKik7CisJaW50ICgqZ2V0RlBTKShzdHJ1Y3QgdXZkICopOworCWludCAoKm92ZXJsYXlIb29rKShzdHJ1Y3QgdXZkICosIHN0cnVjdCB1c2J2aWRlb19mcmFtZSAqKTsKKwlpbnQgKCpnZXRGcmFtZSkoc3RydWN0IHV2ZCAqLCBpbnQpOworCWludCAoKnN0YXJ0RGF0YVB1bXApKHN0cnVjdCB1dmQgKnV2ZCk7CisJdm9pZCAoKnN0b3BEYXRhUHVtcCkoc3RydWN0IHV2ZCAqdXZkKTsKKwlpbnQgKCpzZXRWaWRlb01vZGUpKHN0cnVjdCB1dmQgKnV2ZCwgc3RydWN0IHZpZGVvX3dpbmRvdyAqdncpOworfTsKKworc3RydWN0IHVzYnZpZGVvIHsKKwlpbnQgbnVtX2NhbWVyYXM7CQkvKiBBcyBhbGxvY2F0ZWQgKi8KKwlzdHJ1Y3QgdXNiX2RyaXZlciB1c2JkcnY7CS8qIEludGVyZmFjZSB0byB0aGUgVVNCIHN0YWNrICovCisJY2hhciBkcnZOYW1lWzgwXTsJCS8qIERyaXZlciBuYW1lICovCisJc3RydWN0IG11dGV4IGxvY2s7CQkvKiBNdXRleCBwcm90ZWN0aW5nIGNhbWVyYSBzdHJ1Y3R1cmVzICovCisJc3RydWN0IHVzYnZpZGVvX2NiIGNiOwkJLyogVGFibGUgb2YgY2FsbGJhY2tzICh2aXJ0dWFsIG1ldGhvZHMpICovCisJc3RydWN0IHZpZGVvX2RldmljZSB2ZHQ7CS8qIFZpZGVvIGRldmljZSB0ZW1wbGF0ZSAqLworCXN0cnVjdCB1dmQgKmNhbTsJCQkvKiBBcnJheSBvZiBjYW1lcmEgc3RydWN0dXJlcyAqLworCXN0cnVjdCBtb2R1bGUgKm1kX21vZHVsZTsJLyogTWluaWRyaXZlciBtb2R1bGUgKi8KK307CisKKworLyoKKyAqIFRoaXMgbWFjcm8gcmV0cmlldmVzIGNhbGxiYWNrIGFkZHJlc3MgZnJvbSB0aGUgc3RydWN0IHV2ZCBvYmplY3QuCisgKiBObyB2YWxpZGl0eSBjaGVja3MgYXJlIGRvbmUgaGVyZSwgc28gYmUgc3VyZSB0byBjaGVjayB0aGUKKyAqIGNhbGxiYWNrIGJlZm9yZWhhbmQgd2l0aCBWQUxJRF9DQUxMQkFDSy4KKyAqLworI2RlZmluZQlHRVRfQ0FMTEJBQ0sodXZkLGNiTmFtZSkgKCh1dmQpLT5oYW5kbGUtPmNiLmNiTmFtZSkKKworLyoKKyAqIFRoaXMgbWFjcm8gcmV0dXJucyBlaXRoZXIgY2FsbGJhY2sgcG9pbnRlciBvciBOVUxMLiBUaGlzIGlzIHNhZmUKKyAqIG1hY3JvLCBtZWFuaW5nIHRoYXQgbW9zdCBvZiBjb21wb25lbnRzIG9mIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZAorICogbWF5IGJlIE5VTEwgLSB0aGlzIG9ubHkgcmVzdWx0cyBpbiBOVUxMIGJlaW5nIHJldHVybmVkLiBZb3UgbWF5CisgKiB3aXNoIHRvIHVzZSB0aGlzIG1hY3JvIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBjYWxsYmFjayBpcyBjYWxsYWJsZS4KKyAqIEhvd2V2ZXIga2VlcCBpbiBtaW5kIHRoYXQgdGhvc2UgY2hlY2tzIHRha2UgdGltZS4KKyAqLworI2RlZmluZQlWQUxJRF9DQUxMQkFDSyh1dmQsY2JOYW1lKSAoKCgodXZkKSAhPSBOVUxMKSAmJiBcCisJCSgodXZkKS0+aGFuZGxlICE9IE5VTEwpKSA/IEdFVF9DQUxMQkFDSyh1dmQsY2JOYW1lKSA6IE5VTEwpCisKK2ludCAgUmluZ1F1ZXVlX0RlcXVldWUoc3RydWN0IFJpbmdRdWV1ZSAqcnEsIHVuc2lnbmVkIGNoYXIgKmRzdCwgaW50IGxlbik7CitpbnQgIFJpbmdRdWV1ZV9FbnF1ZXVlKHN0cnVjdCBSaW5nUXVldWUgKnJxLCBjb25zdCB1bnNpZ25lZCBjaGFyICpjZGF0YSwgaW50IG4pOwordm9pZCBSaW5nUXVldWVfV2FrZVVwSW50ZXJydXB0aWJsZShzdHJ1Y3QgUmluZ1F1ZXVlICpycSk7Cit2b2lkIFJpbmdRdWV1ZV9GbHVzaChzdHJ1Y3QgUmluZ1F1ZXVlICpycSk7CisKK3N0YXRpYyBpbmxpbmUgaW50IFJpbmdRdWV1ZV9HZXRMZW5ndGgoY29uc3Qgc3RydWN0IFJpbmdRdWV1ZSAqcnEpCit7CisJcmV0dXJuIChycS0+d2kgLSBycS0+cmkgKyBycS0+bGVuZ3RoKSAmIChycS0+bGVuZ3RoLTEpOworfQorCitzdGF0aWMgaW5saW5lIGludCBSaW5nUXVldWVfR2V0RnJlZVNwYWNlKGNvbnN0IHN0cnVjdCBSaW5nUXVldWUgKnJxKQoreworCXJldHVybiBycS0+bGVuZ3RoIC0gUmluZ1F1ZXVlX0dldExlbmd0aChycSk7Cit9CisKK3ZvaWQgdXNidmlkZW9fRHJhd0xpbmUoCisJc3RydWN0IHVzYnZpZGVvX2ZyYW1lICpmcmFtZSwKKwlpbnQgeDEsIGludCB5MSwKKwlpbnQgeDIsIGludCB5MiwKKwl1bnNpZ25lZCBjaGFyIGNyLCB1bnNpZ25lZCBjaGFyIGNnLCB1bnNpZ25lZCBjaGFyIGNiKTsKK3ZvaWQgdXNidmlkZW9fSGV4RHVtcChjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgbGVuKTsKK3ZvaWQgdXNidmlkZW9fU2F5QW5kV2FpdChjb25zdCBjaGFyICp3aGF0KTsKK3ZvaWQgdXNidmlkZW9fVGVzdFBhdHRlcm4oc3RydWN0IHV2ZCAqdXZkLCBpbnQgZnVsbGZyYW1lLCBpbnQgcG1vZGUpOworCisvKiBNZW1vcnkgYWxsb2NhdGlvbiByb3V0aW5lcyAqLwordW5zaWduZWQgbG9uZyB1c2J2aWRlb19rdmlydF90b19wYSh1bnNpZ25lZCBsb25nIGFkcik7CisKK2ludCB1c2J2aWRlb19yZWdpc3RlcigKKwlzdHJ1Y3QgdXNidmlkZW8gKipwQ2FtcywKKwljb25zdCBpbnQgbnVtX2NhbXMsCisJY29uc3QgaW50IG51bV9leHRyYSwKKwljb25zdCBjaGFyICpkcml2ZXJOYW1lLAorCWNvbnN0IHN0cnVjdCB1c2J2aWRlb19jYiAqY2JUYWJsZSwKKwlzdHJ1Y3QgbW9kdWxlICptZCwKKwljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWRfdGFibGUpOworc3RydWN0IHV2ZCAqdXNidmlkZW9fQWxsb2NhdGVEZXZpY2Uoc3RydWN0IHVzYnZpZGVvICpjYW1zKTsKK2ludCB1c2J2aWRlb19SZWdpc3RlclZpZGVvRGV2aWNlKHN0cnVjdCB1dmQgKnV2ZCk7Cit2b2lkIHVzYnZpZGVvX0RlcmVnaXN0ZXIoc3RydWN0IHVzYnZpZGVvICoqdXZ0KTsKKworaW50IHVzYnZpZGVvX3Y0bF9pbml0aWFsaXplKHN0cnVjdCB2aWRlb19kZXZpY2UgKmRldik7CisKK3ZvaWQgdXNidmlkZW9fRGVpbnRlcmxhY2VGcmFtZShzdHJ1Y3QgdXZkICp1dmQsIHN0cnVjdCB1c2J2aWRlb19mcmFtZSAqZnJhbWUpOworCisvKgorICogVGhpcyBjb2RlIHBlcmZvcm1zIGJvdW5kcyBjaGVja2luZyAtIHVzZSBpdCB3aGVuIHdvcmtpbmcgd2l0aAorICogbmV3IGZvcm1hdHMsIG9yIGVsc2UgeW91IG1heSBnZXQgb29wc2VzIGFsbCBvdmVyIHRoZSBwbGFjZS4KKyAqIElmIHBpeGVsIGZhbGxzIG91dCBvZiBib3VuZHMgdGhlbiBpdCBnZXRzIHNob3ZlZCBiYWNrIChhcyBjbG9zZQorICogdG8gcGxhY2Ugb2Ygb2ZmZW5jZSBhcyBwb3NzaWJsZSkgYW5kIGlzIHBhaW50ZWQgYnJpZ2h0IHJlZC4KKyAqCisgKiBUaGVyZSBhcmUgdHdvIGltcG9ydGFudCBjb25jZXB0czogZnJhbWUgd2lkdGgsIGhlaWdodCBhbmQKKyAqIFY0TCBjYW52YXMgd2lkdGgsIGhlaWdodC4gVGhlIGZvcm1lciBpcyB0aGUgYXJlYSByZXF1ZXN0ZWQgYnkKKyAqIHRoZSBhcHBsaWNhdGlvbiAtZm9yIHRoaXMgdmVyeSBmcmFtZS0uIFRoZSBsYXR0ZXIgaXMgdGhlIGxhcmdlc3QKKyAqIHBvc3NpYmxlIGZyYW1lIHRoYXQgd2UgY2FuIHNlcnZlICh3ZSBhZHZlcnRpc2UgdGhhdCB2aWEgVjRMIGlvY3RsKS4KKyAqIFRoZSBmcmFtZSBkYXRhIGlzIGV4cGVjdGVkIHRvIGJlIGZvcm1hdHRlZCBhcyBsaW5lcyBvZiBsZW5ndGgKKyAqIFZJREVPU0laRV9YKGZyLT5yZXF1ZXN0KSwgdG90YWwgVklERU9TSVpFX1koZnJhbWUtPnJlcXVlc3QpIGxpbmVzLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgUkdCMjRfUFVUUElYRUwoCisJc3RydWN0IHVzYnZpZGVvX2ZyYW1lICpmciwKKwlpbnQgaXgsIGludCBpeSwKKwl1bnNpZ25lZCBjaGFyIHZyLAorCXVuc2lnbmVkIGNoYXIgdmcsCisJdW5zaWduZWQgY2hhciB2YikKK3sKKwlyZWdpc3RlciB1bnNpZ25lZCBjaGFyICpwZjsKKwlpbnQgbGltaXRlciA9IDAsIG14LCBteTsKKwlteCA9IGl4OworCW15ID0gaXk7CisJaWYgKG14IDwgMCkgeworCQlteD0wOworCQlsaW1pdGVyKys7CisJfSBlbHNlIGlmIChteCA+PSBWSURFT1NJWkVfWCgoZnIpLT5yZXF1ZXN0KSkgeworCQlteD0gVklERU9TSVpFX1goKGZyKS0+cmVxdWVzdCkgLSAxOworCQlsaW1pdGVyKys7CisJfQorCWlmIChteSA8IDApIHsKKwkJbXkgPSAwOworCQlsaW1pdGVyKys7CisJfSBlbHNlIGlmIChteSA+PSBWSURFT1NJWkVfWSgoZnIpLT5yZXF1ZXN0KSkgeworCQlteSA9IFZJREVPU0laRV9ZKChmciktPnJlcXVlc3QpIC0gMTsKKwkJbGltaXRlcisrOworCX0KKwlwZiA9IChmciktPmRhdGEgKyBWNExfQllURVNfUEVSX1BJWEVMKigoaXkpKlZJREVPU0laRV9YKChmciktPnJlcXVlc3QpICsgKGl4KSk7CisJaWYgKGxpbWl0ZXIpIHsKKwkJKnBmKysgPSAwOworCQkqcGYrKyA9IDA7CisJCSpwZisrID0gMHhGRjsKKwl9IGVsc2UgeworCQkqcGYrKyA9ICh2Yik7CisJCSpwZisrID0gKHZnKTsKKwkJKnBmKysgPSAodnIpOworCX0KK30KKworI2VuZGlmIC8qIHVzYnZpZGVvX2ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2J2aWRlby92aWNhbS5jIGIvZHJpdmVycy9zdGFnaW5nL3VzYnZpZGVvL3ZpY2FtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNkYjEyMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2J2aWRlby92aWNhbS5jCkBAIC0wLDAgKzEsOTUyIEBACisvKgorICogVVNCIFZpQ2FtIFdlYkNhbSBkcml2ZXIKKyAqIENvcHlyaWdodCAoYykgMjAwMiBKb2UgQnVya3MgKGpidXJrc0B3YXZpY2xlLm9yZyksCisgKiAgICAgICAgICAgICAgICAgICAgQ2hyaXN0b3BoZXIgTCBDaGVuZXkgKGNjaGVuZXlAY2hlbmV5LmN4KSwKKyAqICAgICAgICAgICAgICAgICAgICBQYXZlbCBNYWNoZWsgKHBhdmVsQHVjdy5jeiksCisgKiAgICAgICAgICAgICAgICAgICAgSm9obiBUeW5lciAoanR5bmVyQGNzLnVjci5lZHUpLAorICogICAgICAgICAgICAgICAgICAgIE1vbnJvZSBXaWxsaWFtcyAobW9ucm9lQHBvYm94LmNvbSkKKyAqCisgKiBTdXBwb3J0cyAzQ09NIEhvbWVDb25uZWN0IFBDIERpZ2l0YWwgV2ViQ2FtCisgKiBTdXBwb3J0cyBDb21wcm8gUFMzOVUgV2ViQ2FtCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBiYXNlZCBoZWF2aWx5IG9uIHRoZSBDUGlBIHdlYmNhbSBkcml2ZXIgd2hpY2ggd2FzCisgKiB3cml0dGVuIGJ5IFBldGVyIFByZWdsZXIsIFNjb3R0IEouIEJlcnRpbiBhbmQgSm9oYW5uZXMgRXJkZmVsdAorICoKKyAqIFBvcnRpb25zIG9mIHRoaXMgY29kZSB3ZXJlIGFsc28gY29waWVkIGZyb20gdXNidmlkZW8uYworICoKKyAqIFNwZWNpYWwgdGhhbmtzIHRvIHRoZSB3aG9sZSB0ZWFtIGF0IFNvdXJjZWZvcmdlIGZvciBoZWxwIG1ha2luZworICogdGhpcyBkcml2ZXIgYmVjb21lIGEgcmVhbGl0eS4gIE5vdGFibHk6CisgKiBBbmR5IEFybXN0cm9uZyB3aG8gcmV2ZXJzZSBlbmdpbmVlcmVkIHRoZSBjb2xvciBlbmNvZGluZyBhbmQKKyAqIFBhdmVsIE1hY2hlayBhbmQgQ2hyaXMgQ2hlbmV5IHdobyB3b3JrZWQgb24gcmV2ZXJzZSBlbmdpbmVlcmluZyB0aGUKKyAqICAgIGNhbWVyYSBjb250cm9scyBhbmQgd3JvdGUgdGhlIGZpcnN0IGdlbmVyYXRpb24gZHJpdmVyLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSAidmlkZW9kZXYuaCIKKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L2loZXguaD4KKyNpbmNsdWRlICJ1c2J2aWRlby5oIgorCisvLyAjZGVmaW5lIFZJQ0FNX0RFQlVHCisKKyNpZmRlZiBWSUNBTV9ERUJVRworI2RlZmluZSBBREJHKGxpbmVubyxmbXQsYXJncy4uLikgcHJpbnRrKGZtdCwgamlmZmllcywgX19mdW5jX18sIGxpbmVubywgIyNhcmdzKQorI2RlZmluZSBEQkcoZm10LGFyZ3MuLi4pIEFEQkcoKF9fTElORV9fKSxLRVJOX0RFQlVHIF9fRklMRV9fIiglbGQpOiVzICglZCk6ImZtdCwjI2FyZ3MpCisjZWxzZQorI2RlZmluZSBEQkcoZm1uLGFyZ3MuLi4pIGRvIHt9IHdoaWxlKDApCisjZW5kaWYKKworI2RlZmluZSBEUklWRVJfQVVUSE9SICAgICAgICAgICAiSm9lIEJ1cmtzLCBqYnVya3NAd2F2aWNsZS5vcmciCisjZGVmaW5lIERSSVZFUl9ERVNDICAgICAgICAgICAgICJWaUNhbSBXZWJDYW0gRHJpdmVyIgorCisvKiBEZWZpbmUgdGhlc2UgdmFsdWVzIHRvIG1hdGNoIHlvdXIgZGV2aWNlICovCisjZGVmaW5lIFVTQl9WSUNBTV9WRU5ET1JfSUQJMHgwNGMxCisjZGVmaW5lIFVTQl9WSUNBTV9QUk9EVUNUX0lECTB4MDA5ZAorI2RlZmluZSBVU0JfQ09NUFJPX1ZFTkRPUl9JRAkweDA2MDIKKyNkZWZpbmUgVVNCX0NPTVBST19QUk9EVUNUX0lECTB4MTAwMQorCisjZGVmaW5lIFZJQ0FNX0JZVEVTX1BFUl9QSVhFTCAgIDMKKyNkZWZpbmUgVklDQU1fTUFYX1JFQURfU0laRSAgICAgKDUxMioyNDIrMTI4KQorI2RlZmluZSBWSUNBTV9NQVhfRlJBTUVfU0laRSAgICAoVklDQU1fQllURVNfUEVSX1BJWEVMKjMyMCoyNDApCisjZGVmaW5lIFZJQ0FNX0ZSQU1FUyAgICAgICAgICAgIDIKKworI2RlZmluZSBWSUNBTV9IRUFERVJfU0laRSAgICAgICA2NAorCisvKiBydm1hbGxvYyAvIHJ2ZnJlZSBjb3BpZWQgZnJvbSB1c2J2aWRlby5jCisgKgorICogTm90IHN1cmUgd2h5IHRoZXNlIGFyZSBub3QgeWV0IG5vbi1zdGF0aWNzIHdoaWNoIEkgY2FuIHJlZmVyZW5jZSB0aHJvdWdoCisgKiB1c2J2aWRlby5oIHRoZSBzYW1lIGFzIGl0IGlzIGluIDIuNC4yMC4gIEkgYmV0IHRoaXMgd2lsbCBnZXQgZml4ZWQgc29tZXRpbWUKKyAqIGluIHRoZSBmdXR1cmUuCisgKgorKi8KK3N0YXRpYyB2b2lkICpydm1hbGxvYyh1bnNpZ25lZCBsb25nIHNpemUpCit7CisJdm9pZCAqbWVtOworCXVuc2lnbmVkIGxvbmcgYWRyOworCisJc2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7CisJbWVtID0gdm1hbGxvY18zMihzaXplKTsKKwlpZiAoIW1lbSkKKwkJcmV0dXJuIE5VTEw7CisKKwltZW1zZXQobWVtLCAwLCBzaXplKTsgLyogQ2xlYXIgdGhlIHJhbSBvdXQsIG5vIGp1bmsgdG8gdGhlIHVzZXIgKi8KKwlhZHIgPSAodW5zaWduZWQgbG9uZykgbWVtOworCXdoaWxlIChzaXplID4gMCkgeworCQlTZXRQYWdlUmVzZXJ2ZWQodm1hbGxvY190b19wYWdlKCh2b2lkICopYWRyKSk7CisJCWFkciArPSBQQUdFX1NJWkU7CisJCXNpemUgLT0gUEFHRV9TSVpFOworCX0KKworCXJldHVybiBtZW07Cit9CisKK3N0YXRpYyB2b2lkIHJ2ZnJlZSh2b2lkICptZW0sIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGFkcjsKKworCWlmICghbWVtKQorCQlyZXR1cm47CisKKwlhZHIgPSAodW5zaWduZWQgbG9uZykgbWVtOworCXdoaWxlICgobG9uZykgc2l6ZSA+IDApIHsKKwkJQ2xlYXJQYWdlUmVzZXJ2ZWQodm1hbGxvY190b19wYWdlKCh2b2lkICopYWRyKSk7CisJCWFkciArPSBQQUdFX1NJWkU7CisJCXNpemUgLT0gUEFHRV9TSVpFOworCX0KKwl2ZnJlZShtZW0pOworfQorCitzdHJ1Y3QgdmljYW1fY2FtZXJhIHsKKwl1MTYgc2h1dHRlcl9zcGVlZDsJLy8gY2FwdHVyZSBzaHV0dGVyIHNwZWVkCisJdTE2IGdhaW47CQkvLyBjYXB0dXJlIGdhaW4KKworCXU4ICpyYXdfaW1hZ2U7CQkvLyByYXcgZGF0YSBjYXB0dXJlZCBmcm9tIHRoZSBjYW1lcmEKKwl1OCAqZnJhbWVidWY7CQkvLyBwcm9jZXNzZWQgZGF0YSBpbiBSR0IyNCBmb3JtYXQKKwl1OCAqY250cmxidWY7CQkvLyBhcmVhIHVzZWQgdG8gc2VuZCBjb250cm9sIG1zZ3MKKworCXN0cnVjdCB2aWRlb19kZXZpY2UgdmRldjsJLy8gdjRsIHZpZGVvIGRldmljZQorCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OwkvLyB1c2IgZGV2aWNlCisKKwkvKiBndWFyZCBhZ2FpbnN0IHNpbXVsdGFuZW91cyBhY2Nlc3NlcyB0byB0aGUgY2FtZXJhICovCisJc3RydWN0IG11dGV4IGNhbV9sb2NrOworCisJaW50IGlzX2luaXRpYWxpemVkOworCXU4IG9wZW5fY291bnQ7CisJdTggYnVsa0VuZHBvaW50OworCWludCBuZWVkc0R1bW15UmVhZDsKK307CisKK3N0YXRpYyBpbnQgdmljYW1fcHJvYmUoIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpOworc3RhdGljIHZvaWQgdmljYW1fZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zik7CitzdGF0aWMgdm9pZCByZWFkX2ZyYW1lKHN0cnVjdCB2aWNhbV9jYW1lcmEgKmNhbSwgaW50IGZyYW1lbnVtKTsKK3N0YXRpYyB2b2lkIHZpY2FtX2RlY29kZV9jb2xvcihjb25zdCB1OCAqLCB1OCAqKTsKKworc3RhdGljIGludCBfX3NlbmRfY29udHJvbF9tc2coc3RydWN0IHZpY2FtX2NhbWVyYSAqY2FtLAorCQkJICAgICAgdTggcmVxdWVzdCwKKwkJCSAgICAgIHUxNiB2YWx1ZSwKKwkJCSAgICAgIHUxNiBpbmRleCwKKwkJCSAgICAgIHVuc2lnbmVkIGNoYXIgKmNwLAorCQkJICAgICAgdTE2IHNpemUpCit7CisJaW50IHN0YXR1czsKKworCS8qIGNwIG11c3QgYmUgbWVtb3J5IHRoYXQgaGFzIGJlZW4gYWxsb2NhdGVkIGJ5IGttYWxsb2MgKi8KKworCXN0YXR1cyA9IHVzYl9jb250cm9sX21zZyhjYW0tPnVkZXYsCisJCQkJIHVzYl9zbmRjdHJscGlwZShjYW0tPnVkZXYsIDApLAorCQkJCSByZXF1ZXN0LAorCQkJCSBVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8CisJCQkJIFVTQl9SRUNJUF9ERVZJQ0UsIHZhbHVlLCBpbmRleCwKKwkJCQkgY3AsIHNpemUsIDEwMDApOworCisJc3RhdHVzID0gbWluKHN0YXR1cywgMCk7CisKKwlpZiAoc3RhdHVzIDwgMCkgeworCQlwcmludGsoS0VSTl9JTkZPICJGYWlsZWQgc2VuZGluZyBjb250cm9sIG1lc3NhZ2UsIGVycm9yICVkLlxuIiwKKwkJICAgICAgIHN0YXR1cyk7CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBzZW5kX2NvbnRyb2xfbXNnKHN0cnVjdCB2aWNhbV9jYW1lcmEgKmNhbSwKKwkJCSAgICB1OCByZXF1ZXN0LAorCQkJICAgIHUxNiB2YWx1ZSwKKwkJCSAgICB1MTYgaW5kZXgsCisJCQkgICAgdW5zaWduZWQgY2hhciAqY3AsCisJCQkgICAgdTE2IHNpemUpCit7CisJaW50IHN0YXR1cyA9IC1FTk9ERVY7CisJbXV0ZXhfbG9jaygmY2FtLT5jYW1fbG9jayk7CisJaWYgKGNhbS0+dWRldikgeworCQlzdGF0dXMgPSBfX3NlbmRfY29udHJvbF9tc2coY2FtLCByZXF1ZXN0LCB2YWx1ZSwKKwkJCQkJICAgIGluZGV4LCBjcCwgc2l6ZSk7CisJfQorCW11dGV4X3VubG9jaygmY2FtLT5jYW1fbG9jayk7CisJcmV0dXJuIHN0YXR1czsKK30KK3N0YXRpYyBpbnQKK2luaXRpYWxpemVfY2FtZXJhKHN0cnVjdCB2aWNhbV9jYW1lcmEgKmNhbSkKK3sKKwlpbnQgZXJyOworCWNvbnN0IHN0cnVjdCBpaGV4X2JpbnJlYyAqcmVjOworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqdW5pbml0aWFsaXplZF92YXIoZncpOworCisJZXJyID0gcmVxdWVzdF9paGV4X2Zpcm13YXJlKCZmdywgInZpY2FtL2Zpcm13YXJlLmZ3IiwgJmNhbS0+dWRldi0+ZGV2KTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIGxvYWQgXCJ2aWNhbS9maXJtd2FyZS5md1wiOiAlZFxuIiwKKwkJICAgICAgIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJZm9yIChyZWMgPSAodm9pZCAqKWZ3LT5kYXRhOyByZWM7IHJlYyA9IGloZXhfbmV4dF9iaW5yZWMocmVjKSkgeworCQltZW1jcHkoY2FtLT5jbnRybGJ1ZiwgcmVjLT5kYXRhLCBiZTE2X3RvX2NwdShyZWMtPmxlbikpOworCisJCWVyciA9IHNlbmRfY29udHJvbF9tc2coY2FtLCAweGZmLCAwLCAwLAorCQkJCSAgICAgICBjYW0tPmNudHJsYnVmLCBiZTE2X3RvX2NwdShyZWMtPmxlbikpOworCQlpZiAoZXJyKQorCQkJYnJlYWs7CisJfQorCisJcmVsZWFzZV9maXJtd2FyZShmdyk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50CitzZXRfY2FtZXJhX3Bvd2VyKHN0cnVjdCB2aWNhbV9jYW1lcmEgKmNhbSwgaW50IHN0YXRlKQoreworCWludCBzdGF0dXM7CisKKwlpZiAoKHN0YXR1cyA9IHNlbmRfY29udHJvbF9tc2coY2FtLCAweDUwLCBzdGF0ZSwgMCwgTlVMTCwgMCkpIDwgMCkKKwkJcmV0dXJuIHN0YXR1czsKKworCWlmIChzdGF0ZSkgeworCQlzZW5kX2NvbnRyb2xfbXNnKGNhbSwgMHg1NSwgMSwgMCwgTlVMTCwgMCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBsb25nCit2aWNhbV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGlvY3RsbnIsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXZvaWQgX191c2VyICp1c2VyX2FyZyA9ICh2b2lkIF9fdXNlciAqKWFyZzsKKwlzdHJ1Y3QgdmljYW1fY2FtZXJhICpjYW0gPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJbG9uZyByZXR2YWwgPSAwOworCisJaWYgKCFjYW0pCisJCXJldHVybiAtRU5PREVWOworCisJc3dpdGNoIChpb2N0bG5yKSB7CisJCS8qIHF1ZXJ5IGNhcGFiaWxpdGllcyAqLworCWNhc2UgVklESU9DR0NBUDoKKwkJeworCQkJc3RydWN0IHZpZGVvX2NhcGFiaWxpdHkgYjsKKworCQkJREJHKCJWSURJT0NHQ0FQXG4iKTsKKwkJCW1lbXNldCgmYiwgMCwgc2l6ZW9mKGIpKTsKKwkJCXN0cmNweShiLm5hbWUsICJWaUNhbS1iYXNlZCBDYW1lcmEiKTsKKwkJCWIudHlwZSA9IFZJRF9UWVBFX0NBUFRVUkU7CisJCQliLmNoYW5uZWxzID0gMTsKKwkJCWIuYXVkaW9zID0gMDsKKwkJCWIubWF4d2lkdGggPSAzMjA7CS8qIFZJREVPU0laRV9DSUYgKi8KKwkJCWIubWF4aGVpZ2h0ID0gMjQwOworCQkJYi5taW53aWR0aCA9IDMyMDsJLyogVklERU9TSVpFXzQ4XzQ4ICovCisJCQliLm1pbmhlaWdodCA9IDI0MDsKKworCQkJaWYgKGNvcHlfdG9fdXNlcih1c2VyX2FyZywgJmIsIHNpemVvZihiKSkpCisJCQkJcmV0dmFsID0gLUVGQVVMVDsKKworCQkJYnJlYWs7CisJCX0KKwkJLyogZ2V0L3NldCB2aWRlbyBzb3VyY2UgLSB3ZSBhcmUgYSBjYW1lcmEgYW5kIG5vdGhpbmcgZWxzZSAqLworCWNhc2UgVklESU9DR0NIQU46CisJCXsKKwkJCXN0cnVjdCB2aWRlb19jaGFubmVsIHY7CisKKwkJCURCRygiVklESU9DR0NIQU5cbiIpOworCQkJaWYgKGNvcHlfZnJvbV91c2VyKCZ2LCB1c2VyX2FyZywgc2l6ZW9mKHYpKSkgeworCQkJCXJldHZhbCA9IC1FRkFVTFQ7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAodi5jaGFubmVsICE9IDApIHsKKwkJCQlyZXR2YWwgPSAtRUlOVkFMOworCQkJCWJyZWFrOworCQkJfQorCisJCQl2LmNoYW5uZWwgPSAwOworCQkJc3RyY3B5KHYubmFtZSwgIkNhbWVyYSIpOworCQkJdi50dW5lcnMgPSAwOworCQkJdi5mbGFncyA9IDA7CisJCQl2LnR5cGUgPSBWSURFT19UWVBFX0NBTUVSQTsKKwkJCXYubm9ybSA9IDA7CisKKwkJCWlmIChjb3B5X3RvX3VzZXIodXNlcl9hcmcsICZ2LCBzaXplb2YodikpKQorCQkJCXJldHZhbCA9IC1FRkFVTFQ7CisJCQlicmVhazsKKwkJfQorCisJY2FzZSBWSURJT0NTQ0hBTjoKKwkJeworCQkJaW50IHY7CisKKwkJCWlmIChjb3B5X2Zyb21fdXNlcigmdiwgdXNlcl9hcmcsIHNpemVvZih2KSkpCisJCQkJcmV0dmFsID0gLUVGQVVMVDsKKwkJCURCRygiVklESU9DU0NIQU4gJWRcbiIsIHYpOworCisJCQlpZiAocmV0dmFsID09IDAgJiYgdiAhPSAwKQorCQkJCXJldHZhbCA9IC1FSU5WQUw7CisKKwkJCWJyZWFrOworCQl9CisKKwkJLyogaW1hZ2UgcHJvcGVydGllcyAqLworCWNhc2UgVklESU9DR1BJQ1Q6CisJCXsKKwkJCXN0cnVjdCB2aWRlb19waWN0dXJlIHZwOworCQkJREJHKCJWSURJT0NHUElDVFxuIik7CisJCQltZW1zZXQoJnZwLCAwLCBzaXplb2YgKHN0cnVjdCB2aWRlb19waWN0dXJlKSk7CisJCQl2cC5icmlnaHRuZXNzID0gY2FtLT5nYWluIDw8IDg7CisJCQl2cC5kZXB0aCA9IDI0OworCQkJdnAucGFsZXR0ZSA9IFZJREVPX1BBTEVUVEVfUkdCMjQ7CisJCQlpZiAoY29weV90b191c2VyKHVzZXJfYXJnLCAmdnAsIHNpemVvZiAoc3RydWN0IHZpZGVvX3BpY3R1cmUpKSkKKwkJCQlyZXR2YWwgPSAtRUZBVUxUOworCQkJYnJlYWs7CisJCX0KKworCWNhc2UgVklESU9DU1BJQ1Q6CisJCXsKKwkJCXN0cnVjdCB2aWRlb19waWN0dXJlIHZwOworCisJCQlpZiAoY29weV9mcm9tX3VzZXIoJnZwLCB1c2VyX2FyZywgc2l6ZW9mKHZwKSkpIHsKKwkJCQlyZXR2YWwgPSAtRUZBVUxUOworCQkJCWJyZWFrOworCQkJfQorCisJCQlEQkcoIlZJRElPQ1NQSUNUIGRlcHRoID0gJWQsIHBhbCA9ICVkXG4iLCB2cC5kZXB0aCwKKwkJCSAgICB2cC5wYWxldHRlKTsKKworCQkJY2FtLT5nYWluID0gdnAuYnJpZ2h0bmVzcyA+PiA4OworCisJCQlpZiAodnAuZGVwdGggIT0gMjQKKwkJCSAgICB8fCB2cC5wYWxldHRlICE9IFZJREVPX1BBTEVUVEVfUkdCMjQpCisJCQkJcmV0dmFsID0gLUVJTlZBTDsKKworCQkJYnJlYWs7CisJCX0KKworCQkvKiBnZXQvc2V0IGNhcHR1cmUgd2luZG93ICovCisJY2FzZSBWSURJT0NHV0lOOgorCQl7CisJCQlzdHJ1Y3QgdmlkZW9fd2luZG93IHZ3OworCQkJdncueCA9IDA7CisJCQl2dy55ID0gMDsKKwkJCXZ3LndpZHRoID0gMzIwOworCQkJdncuaGVpZ2h0ID0gMjQwOworCQkJdncuY2hyb21ha2V5ID0gMDsKKwkJCXZ3LmZsYWdzID0gMDsKKwkJCXZ3LmNsaXBzID0gTlVMTDsKKwkJCXZ3LmNsaXBjb3VudCA9IDA7CisKKwkJCURCRygiVklESU9DR1dJTlxuIik7CisKKwkJCWlmIChjb3B5X3RvX3VzZXIodXNlcl9hcmcsICh2b2lkICopJnZ3LCBzaXplb2YodncpKSkKKwkJCQlyZXR2YWwgPSAtRUZBVUxUOworCisJCQkvLyBJJ20gbm90IHN1cmUgd2hhdCB0aGUgZGVhbCB3aXRoIGEgY2FwdHVyZSB3aW5kb3cgaXMsIGl0IGlzIHZlcnkgcG9vcmx5IGRlc2NyaWJlZAorCQkJLy8gaW4gdGhlIGRvYy4gIFNvIEkgd29uJ3Qgc3VwcG9ydCBpdCBub3cuCisJCQlicmVhazsKKwkJfQorCisJY2FzZSBWSURJT0NTV0lOOgorCQl7CisKKwkJCXN0cnVjdCB2aWRlb193aW5kb3cgdnc7CisKKwkJCWlmIChjb3B5X2Zyb21fdXNlcigmdncsIHVzZXJfYXJnLCBzaXplb2YodncpKSkgeworCQkJCXJldHZhbCA9IC1FRkFVTFQ7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCURCRygiVklESU9DU1dJTiAlZCB4ICVkXG4iLCB2dy53aWR0aCwgdncuaGVpZ2h0KTsKKworCQkJaWYgKCB2dy53aWR0aCAhPSAzMjAgfHwgdncuaGVpZ2h0ICE9IDI0MCApCisJCQkJcmV0dmFsID0gLUVGQVVMVDsKKworCQkJYnJlYWs7CisJCX0KKworCQkvKiBtbWFwIGludGVyZmFjZSAqLworCWNhc2UgVklESU9DR01CVUY6CisJCXsKKwkJCXN0cnVjdCB2aWRlb19tYnVmIHZtOworCQkJaW50IGk7CisKKwkJCURCRygiVklESU9DR01CVUZcbiIpOworCQkJbWVtc2V0KCZ2bSwgMCwgc2l6ZW9mICh2bSkpOworCQkJdm0uc2l6ZSA9CisJCQkgICAgVklDQU1fTUFYX0ZSQU1FX1NJWkUgKiBWSUNBTV9GUkFNRVM7CisJCQl2bS5mcmFtZXMgPSBWSUNBTV9GUkFNRVM7CisJCQlmb3IgKGkgPSAwOyBpIDwgVklDQU1fRlJBTUVTOyBpKyspCisJCQkJdm0ub2Zmc2V0c1tpXSA9IFZJQ0FNX01BWF9GUkFNRV9TSVpFICogaTsKKworCQkJaWYgKGNvcHlfdG9fdXNlcih1c2VyX2FyZywgKHZvaWQgKikmdm0sIHNpemVvZih2bSkpKQorCQkJCXJldHZhbCA9IC1FRkFVTFQ7CisKKwkJCWJyZWFrOworCQl9CisKKwljYXNlIFZJRElPQ01DQVBUVVJFOgorCQl7CisJCQlzdHJ1Y3QgdmlkZW9fbW1hcCB2bTsKKwkJCS8vIGludCB2aWRlb19zaXplOworCisJCQlpZiAoY29weV9mcm9tX3VzZXIoKHZvaWQgKikmdm0sIHVzZXJfYXJnLCBzaXplb2Yodm0pKSkgeworCQkJCXJldHZhbCA9IC1FRkFVTFQ7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCURCRygiVklESU9DTUNBUFRVUkUgZnJhbWU9JWQsIGhlaWdodD0lZCwgd2lkdGg9JWQsIGZvcm1hdD0lZC5cbiIsdm0uZnJhbWUsdm0ud2lkdGgsdm0uaGVpZ2h0LHZtLmZvcm1hdCk7CisKKwkJCWlmICggdm0uZnJhbWUgPj0gVklDQU1fRlJBTUVTIHx8IHZtLmZvcm1hdCAhPSBWSURFT19QQUxFVFRFX1JHQjI0ICkKKwkJCQlyZXR2YWwgPSAtRUlOVkFMOworCisJCQkvLyBpbiB0aGVvcnkgcmlnaHQgaGVyZSB3ZSdkIHN0YXJ0IHRoZSBpbWFnZSBjYXB0dXJpbmcKKwkJCS8vIChmaWxsIGluIGEgYnVsayB1cmIgYW5kIHN1Ym1pdCBpdCBhc3luY2hyb25vdXNseSkKKwkJCS8vCisJCQkvLyBJbnN0ZWFkIHdlJ3JlIGdvaW5nIHRvIGRvIGEgdG90YWwgaGFjayBqb2IgZm9yIG5vdyBhbmQKKwkJCS8vIHJldHJpZXZlIHRoZSBmcmFtZSBpbiBWSURJT0NTWU5DCisKKwkJCWJyZWFrOworCQl9CisKKwljYXNlIFZJRElPQ1NZTkM6CisJCXsKKwkJCWludCBmcmFtZTsKKworCQkJaWYgKGNvcHlfZnJvbV91c2VyKCh2b2lkICopJmZyYW1lLCB1c2VyX2FyZywgc2l6ZW9mKGludCkpKSB7CisJCQkJcmV0dmFsID0gLUVGQVVMVDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCURCRygiVklESU9DU1lOQzogJWRcbiIsIGZyYW1lKTsKKworCQkJcmVhZF9mcmFtZShjYW0sIGZyYW1lKTsKKwkJCXZpY2FtX2RlY29kZV9jb2xvcihjYW0tPnJhd19pbWFnZSwKKwkJCQkJICAgY2FtLT5mcmFtZWJ1ZiArCisJCQkJCSAgIGZyYW1lICogVklDQU1fTUFYX0ZSQU1FX1NJWkUgKTsKKworCQkJYnJlYWs7CisJCX0KKworCQkvKiBwb2ludGxlc3MgdG8gaW1wbGVtZW50IG92ZXJsYXkgd2l0aCB0aGlzIGNhbWVyYSAqLworCWNhc2UgVklESU9DQ0FQVFVSRToKKwljYXNlIFZJRElPQ0dGQlVGOgorCWNhc2UgVklESU9DU0ZCVUY6CisJY2FzZSBWSURJT0NLRVk6CisJCXJldHZhbCA9IC1FSU5WQUw7CisJCWJyZWFrOworCisJCS8qIHR1bmVyIGludGVyZmFjZSAtIHdlIGhhdmUgbm9uZSAqLworCWNhc2UgVklESU9DR1RVTkVSOgorCWNhc2UgVklESU9DU1RVTkVSOgorCWNhc2UgVklESU9DR0ZSRVE6CisJY2FzZSBWSURJT0NTRlJFUToKKwkJcmV0dmFsID0gLUVJTlZBTDsKKwkJYnJlYWs7CisKKwkJLyogYXVkaW8gaW50ZXJmYWNlIC0gd2UgaGF2ZSBub25lICovCisJY2FzZSBWSURJT0NHQVVESU86CisJY2FzZSBWSURJT0NTQVVESU86CisJCXJldHZhbCA9IC1FSU5WQUw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHZhbCA9IC1FTk9JT0NUTENNRDsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludAordmljYW1fb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgdmljYW1fY2FtZXJhICpjYW0gPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCisJREJHKCJvcGVuXG4iKTsKKworCWlmICghY2FtKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgInZpY2FtIHZpZGVvX2RldmljZSBpbXByb3Blcmx5IGluaXRpYWxpemVkIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIGNhbV9sb2NrL29wZW5fY291bnQgcHJvdGVjdHMgdXMgZnJvbSBzaW11bHRhbmVvdXMgb3BlbnMKKwkgKiAuLi4gZm9yIG5vdy4gd2UgcHJvYmFibHkgc2hvdWxkbid0IHJlbHkgb24gdGhpcyBmYWN0IGZvcmV2ZXIuCisJICovCisKKwltdXRleF9sb2NrKCZjYW0tPmNhbV9sb2NrKTsKKwlpZiAoY2FtLT5vcGVuX2NvdW50ID4gMCkgeworCQlwcmludGsoS0VSTl9JTkZPCisJCSAgICAgICAidmljYW1fb3BlbiBjYWxsZWQgb24gYWxyZWFkeSBvcGVuZWQgY2FtZXJhIik7CisJCW11dGV4X3VubG9jaygmY2FtLT5jYW1fbG9jayk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJY2FtLT5yYXdfaW1hZ2UgPSBrbWFsbG9jKFZJQ0FNX01BWF9SRUFEX1NJWkUsIEdGUF9LRVJORUwpOworCWlmICghY2FtLT5yYXdfaW1hZ2UpIHsKKwkJbXV0ZXhfdW5sb2NrKCZjYW0tPmNhbV9sb2NrKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJY2FtLT5mcmFtZWJ1ZiA9IHJ2bWFsbG9jKFZJQ0FNX01BWF9GUkFNRV9TSVpFICogVklDQU1fRlJBTUVTKTsKKwlpZiAoIWNhbS0+ZnJhbWVidWYpIHsKKwkJa2ZyZWUoY2FtLT5yYXdfaW1hZ2UpOworCQltdXRleF91bmxvY2soJmNhbS0+Y2FtX2xvY2spOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwljYW0tPmNudHJsYnVmID0ga21hbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOworCWlmICghY2FtLT5jbnRybGJ1ZikgeworCQlrZnJlZShjYW0tPnJhd19pbWFnZSk7CisJCXJ2ZnJlZShjYW0tPmZyYW1lYnVmLCBWSUNBTV9NQVhfRlJBTUVfU0laRSAqIFZJQ0FNX0ZSQU1FUyk7CisJCW11dGV4X3VubG9jaygmY2FtLT5jYW1fbG9jayk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWNhbS0+bmVlZHNEdW1teVJlYWQgPSAxOworCWNhbS0+b3Blbl9jb3VudCsrOworCisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gY2FtOworCW11dGV4X3VubG9jaygmY2FtLT5jYW1fbG9jayk7CisKKworCS8vIEZpcnN0IHVwbG9hZCBmaXJtd2FyZSwgdGhlbiB0dXJuIHRoZSBjYW1lcmEgb24KKworCWlmICghY2FtLT5pc19pbml0aWFsaXplZCkgeworCQlpbml0aWFsaXplX2NhbWVyYShjYW0pOworCisJCWNhbS0+aXNfaW5pdGlhbGl6ZWQgPSAxOworCX0KKworCXNldF9jYW1lcmFfcG93ZXIoY2FtLCAxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50Cit2aWNhbV9jbG9zZShzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgdmljYW1fY2FtZXJhICpjYW0gPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJaW50IG9wZW5fY291bnQ7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CisKKwlEQkcoImNsb3NlXG4iKTsKKworCS8qIGl0J3Mgbm90IHRoZSBlbmQgb2YgdGhlIHdvcmxkIGlmCisJICogd2UgZmFpbCB0byB0dXJuIHRoZSBjYW1lcmEgb2ZmLgorCSAqLworCisJc2V0X2NhbWVyYV9wb3dlcihjYW0sIDApOworCisJa2ZyZWUoY2FtLT5yYXdfaW1hZ2UpOworCXJ2ZnJlZShjYW0tPmZyYW1lYnVmLCBWSUNBTV9NQVhfRlJBTUVfU0laRSAqIFZJQ0FNX0ZSQU1FUyk7CisJa2ZyZWUoY2FtLT5jbnRybGJ1Zik7CisKKwltdXRleF9sb2NrKCZjYW0tPmNhbV9sb2NrKTsKKworCWNhbS0+b3Blbl9jb3VudC0tOworCW9wZW5fY291bnQgPSBjYW0tPm9wZW5fY291bnQ7CisJdWRldiA9IGNhbS0+dWRldjsKKworCW11dGV4X3VubG9jaygmY2FtLT5jYW1fbG9jayk7CisKKwlpZiAoIW9wZW5fY291bnQgJiYgIXVkZXYpIHsKKwkJa2ZyZWUoY2FtKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdmljYW1fZGVjb2RlX2NvbG9yKGNvbnN0IHU4ICpkYXRhLCB1OCAqcmdiKQoreworCS8qIHZpY2FtX2RlY29kZV9jb2xvciAtIENvbnZlcnQgZnJvbSBWaWNhbSBZLUNyLUNiIHRvIFJHQgorCSAqIENvcHlyaWdodCAoQykgMjAwMiBNb25yb2UgV2lsbGlhbXMgKG1vbnJvZUBwb2JveC5jb20pCisJICovCisKKwlpbnQgaSwgcHJldlksIG5leHRZOworCisJcHJldlkgPSA1MTI7CisJbmV4dFkgPSA1MTI7CisKKwlkYXRhICs9IFZJQ0FNX0hFQURFUl9TSVpFOworCisJZm9yKCBpID0gMDsgaSA8IDI0MDsgaSsrLCBkYXRhICs9IDUxMiApIHsKKwkJY29uc3QgaW50IHkgPSAoIGkgKiAyNDIgKSAvIDI0MDsKKworCQlpbnQgaiwgcHJldlgsIG5leHRYOworCQlpbnQgWSwgQ3IsIENiOworCisJCWlmICggeSA9PSAyNDIgLSAxICkgeworCQkJbmV4dFkgPSAtNTEyOworCQl9CisKKwkJcHJldlggPSAxOworCQluZXh0WCA9IDE7CisKKwkJZm9yICggaiA9IDA7IGogPCAzMjA7IGorKywgcmdiICs9IDMgKSB7CisJCQljb25zdCBpbnQgeCA9ICggaiAqIDUxMiApIC8gMzIwOworCQkJY29uc3QgdTggKiBjb25zdCBzcmMgPSAmZGF0YVt4XTsKKworCQkJaWYgKCB4ID09IDUxMiAtIDEgKSB7CisJCQkJbmV4dFggPSAtMTsKKwkJCX0KKworCQkJQ3IgPSAoIHNyY1twcmV2WF0gLSBzcmNbMF0gKSArCisJCQkJKCBzcmNbbmV4dFhdIC0gc3JjWzBdICk7CisJCQlDciAvPSAyOworCisJCQlDYiA9ICggc3JjW3ByZXZZXSAtIHNyY1twcmV2WCArIHByZXZZXSApICsKKwkJCQkoIHNyY1twcmV2WV0gLSBzcmNbbmV4dFggKyBwcmV2WV0gKSArCisJCQkJKCBzcmNbbmV4dFldIC0gc3JjW3ByZXZYICsgbmV4dFldICkgKworCQkJCSggc3JjW25leHRZXSAtIHNyY1tuZXh0WCArIG5leHRZXSApOworCQkJQ2IgLz0gNDsKKworCQkJWSA9IDExNjAgKiAoIHNyY1swXSArICggQ3IgLyAyICkgLSAxNiApOworCisJCQlpZiAoIGkgJiAxICkgeworCQkJCWludCBDdCA9IENyOworCQkJCUNyID0gQ2I7CisJCQkJQ2IgPSBDdDsKKwkJCX0KKworCQkJaWYgKCAoIHggXiBpICkgJiAxICkgeworCQkJCUNyID0gLUNyOworCQkJCUNiID0gLUNiOworCQkJfQorCisJCQlyZ2JbMF0gPSBjbGFtcCggKCAoIFkgKyAoIDIwMTcgKiBDYiApICkgKworCQkJCQk1MDAgKSAvIDkwMCwgMCwgMjU1ICk7CisJCQlyZ2JbMV0gPSBjbGFtcCggKCAoIFkgLSAoIDM5MiAqIENiICkgLQorCQkJCQkgICggODEzICogQ3IgKSApICsKKwkJCQkJICA1MDAgKSAvIDEwMDAsIDAsIDI1NSApOworCQkJcmdiWzJdID0gY2xhbXAoICggKCBZICsgKCAxNTk0ICogQ3IgKSApICsKKwkJCQkJNTAwICkgLyAxMzAwLCAwLCAyNTUgKTsKKworCQkJcHJldlggPSAtMTsKKwkJfQorCisJCXByZXZZID0gLTUxMjsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCityZWFkX2ZyYW1lKHN0cnVjdCB2aWNhbV9jYW1lcmEgKmNhbSwgaW50IGZyYW1lbnVtKQoreworCXVuc2lnbmVkIGNoYXIgKnJlcXVlc3QgPSBjYW0tPmNudHJsYnVmOworCWludCByZWFsU2h1dHRlcjsKKwlpbnQgbjsKKwlpbnQgYWN0dWFsX2xlbmd0aDsKKworCWlmIChjYW0tPm5lZWRzRHVtbXlSZWFkKSB7CisJCWNhbS0+bmVlZHNEdW1teVJlYWQgPSAwOworCQlyZWFkX2ZyYW1lKGNhbSwgZnJhbWVudW0pOworCX0KKworCW1lbXNldChyZXF1ZXN0LCAwLCAxNik7CisJcmVxdWVzdFswXSA9IGNhbS0+Z2FpbjsJLy8gMCA9IDAlIGdhaW4sIEZGID0gMTAwJSBnYWluCisKKwlyZXF1ZXN0WzFdID0gMDsJLy8gNTEyeDI0MiBjYXB0dXJlCisKKwlyZXF1ZXN0WzJdID0gMHg5MDsJLy8gdGhlIGZ1bmN0aW9uIG9mIHRoZXNlIHR3byBieXRlcworCXJlcXVlc3RbM10gPSAweDA3OwkvLyBpcyBub3QgeWV0IHVuZGVyc3Rvb2QKKworCWlmIChjYW0tPnNodXR0ZXJfc3BlZWQgPiA2MCkgeworCQkvLyBTaG9ydCBleHBvc3VyZQorCQlyZWFsU2h1dHRlciA9CisJCSAgICAoKC0xNTYzMTkwMCAvIGNhbS0+c2h1dHRlcl9zcGVlZCkgKyAyNjA1MzMpIC8gMTAwMDsKKwkJcmVxdWVzdFs0XSA9IHJlYWxTaHV0dGVyICYgMHhGRjsKKwkJcmVxdWVzdFs1XSA9IChyZWFsU2h1dHRlciA+PiA4KSAmIDB4RkY7CisJCXJlcXVlc3RbNl0gPSAweDAzOworCQlyZXF1ZXN0WzddID0gMHgwMTsKKwl9IGVsc2UgeworCQkvLyBMb25nIGV4cG9zdXJlCisJCXJlYWxTaHV0dGVyID0gMTU2MDAgLyBjYW0tPnNodXR0ZXJfc3BlZWQgLSAxOworCQlyZXF1ZXN0WzRdID0gMDsKKwkJcmVxdWVzdFs1XSA9IDA7CisJCXJlcXVlc3RbNl0gPSByZWFsU2h1dHRlciAmIDB4RkY7CisJCXJlcXVlc3RbN10gPSByZWFsU2h1dHRlciA+PiA4OworCX0KKworCS8vIFBlciBKb2huIE1hcmt1cyBCasO4cm5kYWxlbiwgYnl0ZSBhdCBpbmRleCA4IGNhdXNlcyBwcm9ibGVtcyBpZiBpdCBpc24ndCAwCisJcmVxdWVzdFs4XSA9IDA7CisJLy8gYnl0ZXMgOS0xNSBkbyBub3Qgc2VlbSB0byBhZmZlY3QgZXhwb3N1cmUgb3IgaW1hZ2UgcXVhbGl0eQorCisJbXV0ZXhfbG9jaygmY2FtLT5jYW1fbG9jayk7CisKKwlpZiAoIWNhbS0+dWRldikgeworCQlnb3RvIGRvbmU7CisJfQorCisJbiA9IF9fc2VuZF9jb250cm9sX21zZyhjYW0sIDB4NTEsIDB4ODAsIDAsIHJlcXVlc3QsIDE2KTsKKworCWlmIChuIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICIgUHJvYmxlbSBzZW5kaW5nIGZyYW1lIGNhcHR1cmUgY29udHJvbCBtZXNzYWdlIik7CisJCWdvdG8gZG9uZTsKKwl9CisKKwluID0gdXNiX2J1bGtfbXNnKGNhbS0+dWRldiwKKwkJCSB1c2JfcmN2YnVsa3BpcGUoY2FtLT51ZGV2LCBjYW0tPmJ1bGtFbmRwb2ludCksCisJCQkgY2FtLT5yYXdfaW1hZ2UsCisJCQkgNTEyICogMjQyICsgMTI4LCAmYWN0dWFsX2xlbmd0aCwgMTAwMDApOworCisJaWYgKG4gPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiUHJvYmxlbSBkdXJpbmcgYnVsayByZWFkIG9mIGZyYW1lIGRhdGE6ICVkXG4iLAorCQkgICAgICAgbik7CisJfQorCisgZG9uZToKKwltdXRleF91bmxvY2soJmNhbS0+Y2FtX2xvY2spOworfQorCitzdGF0aWMgc3NpemVfdAordmljYW1fcmVhZCggc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zICkKK3sKKwlzdHJ1Y3QgdmljYW1fY2FtZXJhICpjYW0gPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlEQkcoInJlYWQgJWQgYnl0ZXMuXG4iLCAoaW50KSBjb3VudCk7CisKKwlpZiAoKnBwb3MgPj0gVklDQU1fTUFYX0ZSQU1FX1NJWkUpIHsKKwkJKnBwb3MgPSAwOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoKnBwb3MgPT0gMCkgeworCQlyZWFkX2ZyYW1lKGNhbSwgMCk7CisJCXZpY2FtX2RlY29kZV9jb2xvcihjYW0tPnJhd19pbWFnZSwKKwkJCQkgICBjYW0tPmZyYW1lYnVmICsKKwkJCQkgICAwICogVklDQU1fTUFYX0ZSQU1FX1NJWkUpOworCX0KKworCWNvdW50ID0gbWluX3Qoc2l6ZV90LCBjb3VudCwgVklDQU1fTUFYX0ZSQU1FX1NJWkUgLSAqcHBvcyk7CisKKwlpZiAoY29weV90b191c2VyKGJ1ZiwgJmNhbS0+ZnJhbWVidWZbKnBwb3NdLCBjb3VudCkpIHsKKwkJY291bnQgPSAtRUZBVUxUOworCX0gZWxzZSB7CisJCSpwcG9zICs9IGNvdW50OworCX0KKworCWlmIChjb3VudCA9PSBWSUNBTV9NQVhfRlJBTUVfU0laRSkgeworCQkqcHBvcyA9IDA7CisJfQorCisJcmV0dXJuIGNvdW50OworfQorCisKK3N0YXRpYyBpbnQKK3ZpY2FtX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCS8vIFRPRE86IGFsbG9jYXRlIHRoZSByYXcgZnJhbWUgYnVmZmVyIGlmIG5lY2Vzc2FyeQorCXVuc2lnbmVkIGxvbmcgcGFnZSwgcG9zOworCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSB2bWEtPnZtX3N0YXJ0OworCXVuc2lnbmVkIGxvbmcgc2l6ZSAgPSB2bWEtPnZtX2VuZC12bWEtPnZtX3N0YXJ0OworCXN0cnVjdCB2aWNhbV9jYW1lcmEgKmNhbSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCWlmICghY2FtKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCURCRygidmljYW1fbW1hcDogJWxkXG4iLCBzaXplKTsKKworCS8qIFdlIGxldCBtbWFwIGFsbG9jYXRlIGFzIG11Y2ggYXMgaXQgd2FudHMgYmVjYXVzZSBMaW51eCB3YXMgYWRkaW5nIDIwNDggYnl0ZXMKKwkgKiB0byB0aGUgc2l6ZSB0aGUgYXBwbGljYXRpb24gcmVxdWVzdGVkIGZvciBtbWFwIGFuZCBpdCB3YXMgc2NyZXdpbmcgYXBwcyB1cC4KKwkgaWYgKHNpemUgPiBWSUNBTV9GUkFNRVMqVklDQU1fTUFYX0ZSQU1FX1NJWkUpCisJIHJldHVybiAtRUlOVkFMOworCSAqLworCisJcG9zID0gKHVuc2lnbmVkIGxvbmcpY2FtLT5mcmFtZWJ1ZjsKKwl3aGlsZSAoc2l6ZSA+IDApIHsKKwkJcGFnZSA9IHZtYWxsb2NfdG9fcGZuKCh2b2lkICopcG9zKTsKKwkJaWYgKHJlbWFwX3Bmbl9yYW5nZSh2bWEsIHN0YXJ0LCBwYWdlLCBQQUdFX1NJWkUsIFBBR0VfU0hBUkVEKSkKKwkJCXJldHVybiAtRUFHQUlOOworCisJCXN0YXJ0ICs9IFBBR0VfU0laRTsKKwkJcG9zICs9IFBBR0VfU0laRTsKKwkJaWYgKHNpemUgPiBQQUdFX1NJWkUpCisJCQlzaXplIC09IFBBR0VfU0laRTsKKwkJZWxzZQorCQkJc2l6ZSA9IDA7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgdmljYW1fZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gdmljYW1fb3BlbiwKKwkucmVsZWFzZQk9IHZpY2FtX2Nsb3NlLAorCS5yZWFkCQk9IHZpY2FtX3JlYWQsCisJLm1tYXAJCT0gdmljYW1fbW1hcCwKKwkuaW9jdGwJCT0gdmljYW1faW9jdGwsCit9OworCitzdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSB2aWNhbV90ZW1wbGF0ZSA9IHsKKwkubmFtZSAJCT0gIlZpQ2FtLWJhc2VkIFVTQiBDYW1lcmEiLAorCS5mb3BzIAkJPSAmdmljYW1fZm9wcywKKwkucmVsZWFzZSAJPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eSwKK307CisKKy8qIHRhYmxlIG9mIGRldmljZXMgdGhhdCB3b3JrIHdpdGggdGhpcyBkcml2ZXIgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCB2aWNhbV90YWJsZVtdID0geworCXtVU0JfREVWSUNFKFVTQl9WSUNBTV9WRU5ET1JfSUQsIFVTQl9WSUNBTV9QUk9EVUNUX0lEKX0sCisJe1VTQl9ERVZJQ0UoVVNCX0NPTVBST19WRU5ET1JfSUQsIFVTQl9DT01QUk9fUFJPRFVDVF9JRCl9LAorCXt9CQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCB2aWNhbV90YWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB2aWNhbV9kcml2ZXIgPSB7CisJLm5hbWUJCT0gInZpY2FtIiwKKwkucHJvYmUJCT0gdmljYW1fcHJvYmUsCisJLmRpc2Nvbm5lY3QJPSB2aWNhbV9kaXNjb25uZWN0LAorCS5pZF90YWJsZQk9IHZpY2FtX3RhYmxlCit9OworCisvKioKKyAqCXZpY2FtX3Byb2JlCisgKglAaW50ZjogdGhlIGludGVyZmFjZQorICoJQGlkOiB0aGUgZGV2aWNlIGlkCisgKgorICoJQ2FsbGVkIGJ5IHRoZSB1c2IgY29yZSB3aGVuIGEgbmV3IGRldmljZSBpcyBjb25uZWN0ZWQgdGhhdCBpdCB0aGlua3MKKyAqCXRoaXMgZHJpdmVyIG1pZ2h0IGJlIGludGVyZXN0ZWQgaW4uCisgKi8KK3N0YXRpYyBpbnQKK3ZpY2FtX3Byb2JlKCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCWludCBidWxrRW5kcG9pbnQgPSAwOworCWNvbnN0IHN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmludGVyZmFjZTsKKwljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVuZHBvaW50OworCXN0cnVjdCB2aWNhbV9jYW1lcmEgKmNhbTsKKworCXByaW50ayhLRVJOX0lORk8gIlZpQ2FtIGJhc2VkIHdlYmNhbSBjb25uZWN0ZWRcbiIpOworCisJaW50ZXJmYWNlID0gaW50Zi0+Y3VyX2FsdHNldHRpbmc7CisKKwlEQkcoS0VSTl9ERUJVRyAiSW50ZXJmYWNlICVkLiBoYXMgJXUuIGVuZHBvaW50cyFcbiIsCisJICAgICAgIGludGVyZmFjZS0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyLCAodW5zaWduZWQpIChpbnRlcmZhY2UtPmRlc2MuYk51bUVuZHBvaW50cykpOworCWVuZHBvaW50ID0gJmludGVyZmFjZS0+ZW5kcG9pbnRbMF0uZGVzYzsKKworCWlmICh1c2JfZW5kcG9pbnRfaXNfYnVsa19pbihlbmRwb2ludCkpIHsKKwkJLyogd2UgZm91bmQgYSBidWxrIGluIGVuZHBvaW50ICovCisJCWJ1bGtFbmRwb2ludCA9IGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk5vIGJ1bGsgaW4gZW5kcG9pbnQgd2FzIGZvdW5kID8hICh0aGlzIGlzIGJhZClcbiIpOworCX0KKworCWlmICgoY2FtID0KKwkgICAgIGt6YWxsb2Moc2l6ZW9mIChzdHJ1Y3QgdmljYW1fY2FtZXJhKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgICAgImNvdWxkIG5vdCBhbGxvY2F0ZSBrZXJuZWwgbWVtb3J5IGZvciB2aWNhbV9jYW1lcmEgc3RydWN0XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisKKwljYW0tPnNodXR0ZXJfc3BlZWQgPSAxNTsKKworCW11dGV4X2luaXQoJmNhbS0+Y2FtX2xvY2spOworCisJbWVtY3B5KCZjYW0tPnZkZXYsICZ2aWNhbV90ZW1wbGF0ZSwgc2l6ZW9mKHZpY2FtX3RlbXBsYXRlKSk7CisJdmlkZW9fc2V0X2RydmRhdGEoJmNhbS0+dmRldiwgY2FtKTsKKworCWNhbS0+dWRldiA9IGRldjsKKwljYW0tPmJ1bGtFbmRwb2ludCA9IGJ1bGtFbmRwb2ludDsKKworCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJmNhbS0+dmRldiwgVkZMX1RZUEVfR1JBQkJFUiwgLTEpIDwgMCkgeworCQlrZnJlZShjYW0pOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJ2aWRlb19yZWdpc3Rlcl9kZXZpY2UgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJcHJpbnRrKEtFUk5fSU5GTyAiVmlDYW0gd2ViY2FtIGRyaXZlciBub3cgY29udHJvbGxpbmcgZGV2aWNlICVzXG4iLAorCQl2aWRlb19kZXZpY2Vfbm9kZV9uYW1lKCZjYW0tPnZkZXYpKTsKKworCXVzYl9zZXRfaW50ZmRhdGEgKGludGYsIGNhbSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3ZpY2FtX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJaW50IG9wZW5fY291bnQ7CisJc3RydWN0IHZpY2FtX2NhbWVyYSAqY2FtID0gdXNiX2dldF9pbnRmZGF0YSAoaW50Zik7CisJdXNiX3NldF9pbnRmZGF0YSAoaW50ZiwgTlVMTCk7CisKKwkvKiB3ZSBtdXN0IHVucmVnaXN0ZXIgdGhlIGRldmljZSBiZWZvcmUgdGFraW5nIGl0cworCSAqIGNhbV9sb2NrLiBUaGlzIGlzIGJlY2F1c2UgdGhlIHZpZGVvIG9wZW4gY2FsbAorCSAqIGhvbGRzIHRoZSBzYW1lIGxvY2sgYXMgdmlkZW8gdW5yZWdpc3Rlci4gaWYgd2UKKwkgKiB1bnJlZ2lzdGVyIGluc2lkZSBvZiB0aGUgY2FtX2xvY2sgYW5kIG9wZW4gYWxzbworCSAqIHVzZXMgdGhlIGNhbV9sb2NrLCB3ZSBnZXQgZGVhZGxvY2suCisJICovCisKKwl2aWRlb191bnJlZ2lzdGVyX2RldmljZSgmY2FtLT52ZGV2KTsKKworCS8qIHN0b3AgdGhlIGNhbWVyYSBmcm9tIGJlaW5nIHVzZWQgKi8KKworCW11dGV4X2xvY2soJmNhbS0+Y2FtX2xvY2spOworCisJLyogbWFyayB0aGUgY2FtZXJhIGFzIGdvbmUgKi8KKworCWNhbS0+dWRldiA9IE5VTEw7CisKKwkvKiB0aGUgb25seSB0aGluZyBsZWZ0IHRvIGRvIGlzIHN5bmNocm9uaXplIHdpdGgKKwkgKiBvdXIgY2xvc2UvcmVsZWFzZSBmdW5jdGlvbiBvbiB3aG8gc2hvdWxkIHJlbGVhc2UKKwkgKiB0aGUgY2FtZXJhIG1lbW9yeS4gaWYgdGhlcmUgYXJlIGFueSB1c2VycyB1c2luZyB0aGUKKwkgKiBjYW1lcmEsIGl0J3MgdGhlaXIgam9iLiBpZiB0aGVyZSBhcmUgbm8gdXNlcnMsCisJICogaXQncyBvdXJzLgorCSAqLworCisJb3Blbl9jb3VudCA9IGNhbS0+b3Blbl9jb3VudDsKKworCW11dGV4X3VubG9jaygmY2FtLT5jYW1fbG9jayk7CisKKwlpZiAoIW9wZW5fY291bnQpIHsKKwkJa2ZyZWUoY2FtKTsKKwl9CisKKwlwcmludGsoS0VSTl9ERUJVRyAiVmlDYW0tYmFzZWQgV2ViQ2FtIGRpc2Nvbm5lY3RlZFxuIik7Cit9CisKKy8qCisgKi8KK3N0YXRpYyBpbnQgX19pbml0Cit1c2JfdmljYW1faW5pdCh2b2lkKQoreworCWludCByZXR2YWw7CisJREJHKEtFUk5fSU5GTyAiVmlDYW0tYmFzZWQgV2ViQ2FtIGRyaXZlciBzdGFydHVwXG4iKTsKKwlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJnZpY2FtX2RyaXZlcik7CisJaWYgKHJldHZhbCkKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAidXNiX3JlZ2lzdGVyIGZhaWxlZCFcbiIpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdAordXNiX3ZpY2FtX2V4aXQodm9pZCkKK3sKKwlEQkcoS0VSTl9JTkZPCisJICAgICAgICJWaUNhbS1iYXNlZCBXZWJDYW0gZHJpdmVyIHNodXRkb3duXG4iKTsKKworCXVzYl9kZXJlZ2lzdGVyKCZ2aWNhbV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh1c2JfdmljYW1faW5pdCk7Cittb2R1bGVfZXhpdCh1c2JfdmljYW1fZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0ZJUk1XQVJFKCJ2aWNhbS9maXJtd2FyZS5mdyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYnZpZGVvL3ZpZGVvZGV2LmggYi9kcml2ZXJzL3N0YWdpbmcvdXNidmlkZW8vdmlkZW9kZXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTFlZmJlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VzYnZpZGVvL3ZpZGVvZGV2LmgKQEAgLTAsMCArMSwzMTggQEAKKy8qCisgKglWaWRlbyBmb3IgTGludXggdmVyc2lvbiAxIC0gT0JTT0xFVEUKKyAqCisgKglIZWFkZXIgZmlsZSBmb3IgdjRsMSBkcml2ZXJzIGFuZCBhcHBsaWNhdGlvbnMsIGZvcgorICoJTGludXgga2VybmVscyAyLjIueCBvciAyLjQueC4KKyAqCisgKglQcm92aWRlcyBoZWFkZXIgZm9yIGxlZ2FjeSBkcml2ZXJzIGFuZCBhcHBsaWNhdGlvbnMKKyAqCisgKglTZWUgaHR0cDovL2xpbnV4dHYub3JnIGZvciBtb3JlIGluZm8KKyAqCisgKi8KKyNpZm5kZWYgX19MSU5VWF9WSURFT0RFVl9ICisjZGVmaW5lIF9fTElOVVhfVklERU9ERVZfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorCisjZGVmaW5lIFZJRF9UWVBFX0NBUFRVUkUJMQkvKiBDYW4gY2FwdHVyZSAqLworI2RlZmluZSBWSURfVFlQRV9UVU5FUgkJMgkvKiBDYW4gdHVuZSAqLworI2RlZmluZSBWSURfVFlQRV9URUxFVEVYVAk0CS8qIERvZXMgdGVsZXRleHQgKi8KKyNkZWZpbmUgVklEX1RZUEVfT1ZFUkxBWQk4CS8qIE92ZXJsYXkgb250byBmcmFtZSBidWZmZXIgKi8KKyNkZWZpbmUgVklEX1RZUEVfQ0hST01BS0VZCTE2CS8qIE92ZXJsYXkgYnkgY2hyb21ha2V5ICovCisjZGVmaW5lIFZJRF9UWVBFX0NMSVBQSU5HCTMyCS8qIENhbiBjbGlwICovCisjZGVmaW5lIFZJRF9UWVBFX0ZSQU1FUkFNCTY0CS8qIFVzZXMgdGhlIGZyYW1lIGJ1ZmZlciBtZW1vcnkgKi8KKyNkZWZpbmUgVklEX1RZUEVfU0NBTEVTCQkxMjgJLyogU2NhbGFibGUgKi8KKyNkZWZpbmUgVklEX1RZUEVfTU9OT0NIUk9NRQkyNTYJLyogTW9ub2Nocm9tZSBvbmx5ICovCisjZGVmaW5lIFZJRF9UWVBFX1NVQkNBUFRVUkUJNTEyCS8qIENhbiBjYXB0dXJlIHN1YmFyZWFzIG9mIHRoZSBpbWFnZSAqLworI2RlZmluZSBWSURfVFlQRV9NUEVHX0RFQ09ERVIJMTAyNAkvKiBDYW4gZGVjb2RlIE1QRUcgc3RyZWFtcyAqLworI2RlZmluZSBWSURfVFlQRV9NUEVHX0VOQ09ERVIJMjA0OAkvKiBDYW4gZW5jb2RlIE1QRUcgc3RyZWFtcyAqLworI2RlZmluZSBWSURfVFlQRV9NSlBFR19ERUNPREVSCTQwOTYJLyogQ2FuIGRlY29kZSBNSlBFRyBzdHJlYW1zICovCisjZGVmaW5lIFZJRF9UWVBFX01KUEVHX0VOQ09ERVIJODE5MgkvKiBDYW4gZW5jb2RlIE1KUEVHIHN0cmVhbXMgKi8KKworc3RydWN0IHZpZGVvX2NhcGFiaWxpdHkKK3sKKwljaGFyIG5hbWVbMzJdOworCWludCB0eXBlOworCWludCBjaGFubmVsczsJLyogTnVtIGNoYW5uZWxzICovCisJaW50IGF1ZGlvczsJLyogTnVtIGF1ZGlvIGRldmljZXMgKi8KKwlpbnQgbWF4d2lkdGg7CS8qIFN1cHBvcnRlZCB3aWR0aCAqLworCWludCBtYXhoZWlnaHQ7CS8qIEFuZCBoZWlnaHQgKi8KKwlpbnQgbWlud2lkdGg7CS8qIFN1cHBvcnRlZCB3aWR0aCAqLworCWludCBtaW5oZWlnaHQ7CS8qIEFuZCBoZWlnaHQgKi8KK307CisKKworc3RydWN0IHZpZGVvX2NoYW5uZWwKK3sKKwlpbnQgY2hhbm5lbDsKKwljaGFyIG5hbWVbMzJdOworCWludCB0dW5lcnM7CisJX191MzIgIGZsYWdzOworI2RlZmluZSBWSURFT19WQ19UVU5FUgkJMQkvKiBDaGFubmVsIGhhcyBhIHR1bmVyICovCisjZGVmaW5lIFZJREVPX1ZDX0FVRElPCQkyCS8qIENoYW5uZWwgaGFzIGF1ZGlvICovCisJX191MTYgIHR5cGU7CisjZGVmaW5lIFZJREVPX1RZUEVfVFYJCTEKKyNkZWZpbmUgVklERU9fVFlQRV9DQU1FUkEJMgorCV9fdTE2IG5vcm07CQkJLyogTm9ybSBzZXQgYnkgY2hhbm5lbCAqLworfTsKKworc3RydWN0IHZpZGVvX3R1bmVyCit7CisJaW50IHR1bmVyOworCWNoYXIgbmFtZVszMl07CisJdW5zaWduZWQgbG9uZyByYW5nZWxvdywgcmFuZ2VoaWdoOwkvKiBUdW5lciByYW5nZSAqLworCV9fdTMyIGZsYWdzOworI2RlZmluZSBWSURFT19UVU5FUl9QQUwJCTEKKyNkZWZpbmUgVklERU9fVFVORVJfTlRTQwkyCisjZGVmaW5lIFZJREVPX1RVTkVSX1NFQ0FNCTQKKyNkZWZpbmUgVklERU9fVFVORVJfTE9XCQk4CS8qIFVzZXMgS0h6IG5vdCBNSHogKi8KKyNkZWZpbmUgVklERU9fVFVORVJfTk9STQkxNgkvKiBUdW5lciBjYW4gc2V0IG5vcm0gKi8KKyNkZWZpbmUgVklERU9fVFVORVJfU1RFUkVPX09OCTEyOAkvKiBUdW5lciBpcyBzZWVpbmcgc3RlcmVvICovCisjZGVmaW5lIFZJREVPX1RVTkVSX1JEU19PTiAgICAgIDI1NiAgICAgLyogVHVuZXIgaXMgc2VlaW5nIGFuIFJEUyBkYXRhc3RyZWFtICovCisjZGVmaW5lIFZJREVPX1RVTkVSX01CU19PTiAgICAgIDUxMiAgICAgLyogVHVuZXIgaXMgc2VlaW5nIGFuIE1CUyBkYXRhc3RyZWFtICovCisJX191MTYgbW9kZTsJCQkvKiBQQUwvTlRTQy9TRUNBTS9PVEhFUiAqLworI2RlZmluZSBWSURFT19NT0RFX1BBTAkJMAorI2RlZmluZSBWSURFT19NT0RFX05UU0MJCTEKKyNkZWZpbmUgVklERU9fTU9ERV9TRUNBTQkyCisjZGVmaW5lIFZJREVPX01PREVfQVVUTwkJMworCV9fdTE2IHNpZ25hbDsJCQkvKiBTaWduYWwgc3RyZW5ndGggMTZiaXQgc2NhbGUgKi8KK307CisKK3N0cnVjdCB2aWRlb19waWN0dXJlCit7CisJX191MTYJYnJpZ2h0bmVzczsKKwlfX3UxNglodWU7CisJX191MTYJY29sb3VyOworCV9fdTE2CWNvbnRyYXN0OworCV9fdTE2CXdoaXRlbmVzczsJLyogQmxhY2sgYW5kIHdoaXRlIG9ubHkgKi8KKwlfX3UxNglkZXB0aDsJCS8qIENhcHR1cmUgZGVwdGggKi8KKwlfX3UxNiAgIHBhbGV0dGU7CS8qIFBhbGV0dGUgaW4gdXNlICovCisjZGVmaW5lIFZJREVPX1BBTEVUVEVfR1JFWQkxCS8qIExpbmVhciBncmV5c2NhbGUgKi8KKyNkZWZpbmUgVklERU9fUEFMRVRURV9ISTI0MAkyCS8qIEhpZ2ggMjQwIGN1YmUgKEJUODQ4KSAqLworI2RlZmluZSBWSURFT19QQUxFVFRFX1JHQjU2NQkzCS8qIDU2NSAxNiBiaXQgUkdCICovCisjZGVmaW5lIFZJREVPX1BBTEVUVEVfUkdCMjQJNAkvKiAyNGJpdCBSR0IgKi8KKyNkZWZpbmUgVklERU9fUEFMRVRURV9SR0IzMgk1CS8qIDMyYml0IFJHQiAqLworI2RlZmluZSBWSURFT19QQUxFVFRFX1JHQjU1NQk2CS8qIDU1NSAxNWJpdCBSR0IgKi8KKyNkZWZpbmUgVklERU9fUEFMRVRURV9ZVVY0MjIJNwkvKiBZVVY0MjIgY2FwdHVyZSAqLworI2RlZmluZSBWSURFT19QQUxFVFRFX1lVWVYJOAorI2RlZmluZSBWSURFT19QQUxFVFRFX1VZVlkJOQkvKiBUaGUgZ3JlYXQgdGhpbmcgYWJvdXQgc3RhbmRhcmRzIGlzIC4uLiAqLworI2RlZmluZSBWSURFT19QQUxFVFRFX1lVVjQyMAkxMAorI2RlZmluZSBWSURFT19QQUxFVFRFX1lVVjQxMQkxMQkvKiBZVVY0MTEgY2FwdHVyZSAqLworI2RlZmluZSBWSURFT19QQUxFVFRFX1JBVwkxMgkvKiBSQVcgY2FwdHVyZSAoQlQ4NDgpICovCisjZGVmaW5lIFZJREVPX1BBTEVUVEVfWVVWNDIyUAkxMwkvKiBZVVYgNDoyOjIgUGxhbmFyICovCisjZGVmaW5lIFZJREVPX1BBTEVUVEVfWVVWNDExUAkxNAkvKiBZVVYgNDoxOjEgUGxhbmFyICovCisjZGVmaW5lIFZJREVPX1BBTEVUVEVfWVVWNDIwUAkxNQkvKiBZVVYgNDoyOjAgUGxhbmFyICovCisjZGVmaW5lIFZJREVPX1BBTEVUVEVfWVVWNDEwUAkxNgkvKiBZVVYgNDoxOjAgUGxhbmFyICovCisjZGVmaW5lIFZJREVPX1BBTEVUVEVfUExBTkFSCTEzCS8qIHN0YXJ0IG9mIHBsYW5hciBlbnRyaWVzICovCisjZGVmaW5lIFZJREVPX1BBTEVUVEVfQ09NUE9ORU5UIDcJLyogc3RhcnQgb2YgY29tcG9uZW50IGVudHJpZXMgKi8KK307CisKK3N0cnVjdCB2aWRlb19hdWRpbworeworCWludAlhdWRpbzsJCS8qIEF1ZGlvIGNoYW5uZWwgKi8KKwlfX3UxNgl2b2x1bWU7CQkvKiBJZiBzZXR0YWJsZSAqLworCV9fdTE2CWJhc3MsIHRyZWJsZTsKKwlfX3UzMglmbGFnczsKKyNkZWZpbmUgVklERU9fQVVESU9fTVVURQkxCisjZGVmaW5lIFZJREVPX0FVRElPX01VVEFCTEUJMgorI2RlZmluZSBWSURFT19BVURJT19WT0xVTUUJNAorI2RlZmluZSBWSURFT19BVURJT19CQVNTCTgKKyNkZWZpbmUgVklERU9fQVVESU9fVFJFQkxFCTE2CisjZGVmaW5lIFZJREVPX0FVRElPX0JBTEFOQ0UJMzIKKwljaGFyICAgIG5hbWVbMTZdOworI2RlZmluZSBWSURFT19TT1VORF9NT05PCTEKKyNkZWZpbmUgVklERU9fU09VTkRfU1RFUkVPCTIKKyNkZWZpbmUgVklERU9fU09VTkRfTEFORzEJNAorI2RlZmluZSBWSURFT19TT1VORF9MQU5HMgk4CisJX191MTYgICBtb2RlOworCV9fdTE2CWJhbGFuY2U7CS8qIFN0ZXJlbyBiYWxhbmNlICovCisJX191MTYJc3RlcDsJCS8qIFN0ZXAgYWN0dWFsIHZvbHVtZSB1c2VzICovCit9OworCitzdHJ1Y3QgdmlkZW9fY2xpcAoreworCV9fczMyCXgseTsKKwlfX3MzMgl3aWR0aCwgaGVpZ2h0OworCXN0cnVjdAl2aWRlb19jbGlwICpuZXh0OwkvKiBGb3IgdXNlciB1c2UvZHJpdmVyIHVzZSBvbmx5ICovCit9OworCitzdHJ1Y3QgdmlkZW9fd2luZG93Cit7CisJX191MzIJeCx5OwkJCS8qIFBvc2l0aW9uIG9mIHdpbmRvdyAqLworCV9fdTMyCXdpZHRoLGhlaWdodDsJCS8qIEl0cyBzaXplICovCisJX191MzIJY2hyb21ha2V5OworCV9fdTMyCWZsYWdzOworCXN0cnVjdAl2aWRlb19jbGlwIF9fdXNlciAqY2xpcHM7CS8qIFNldCBvbmx5ICovCisJaW50CWNsaXBjb3VudDsKKyNkZWZpbmUgVklERU9fV0lORE9XX0lOVEVSTEFDRQkxCisjZGVmaW5lIFZJREVPX1dJTkRPV19DSFJPTUFLRVkJMTYJLyogT3ZlcmxheSBieSBjaHJvbWFrZXkgKi8KKyNkZWZpbmUgVklERU9fQ0xJUF9CSVRNQVAJLTEKKy8qIGJpdG1hcCBpcyAxMDI0eDYyNSwgYSAnMScgYml0IHJlcHJlc2VudHMgYSBjbGlwcGVkIHBpeGVsICovCisjZGVmaW5lIFZJREVPX0NMSVBNQVBfU0laRQkoMTI4ICogNjI1KQorfTsKKworc3RydWN0IHZpZGVvX2NhcHR1cmUKK3sKKwlfX3UzMiAJeCx5OwkJCS8qIE9mZnNldHMgaW50byBpbWFnZSAqLworCV9fdTMyCXdpZHRoLCBoZWlnaHQ7CQkvKiBBcmVhIHRvIGNhcHR1cmUgKi8KKwlfX3UxNglkZWNpbWF0aW9uOwkJLyogRGVjaW1hdGlvbiBkaXZpZGVyICovCisJX191MTYJZmxhZ3M7CQkJLyogRmxhZ3MgZm9yIGNhcHR1cmUgKi8KKyNkZWZpbmUgVklERU9fQ0FQVFVSRV9PREQJCTAJLyogVGVtcG9yYWwgKi8KKyNkZWZpbmUgVklERU9fQ0FQVFVSRV9FVkVOCQkxCit9OworCitzdHJ1Y3QgdmlkZW9fYnVmZmVyCit7CisJdm9pZAkqYmFzZTsKKwlpbnQJaGVpZ2h0LHdpZHRoOworCWludAlkZXB0aDsKKwlpbnQJYnl0ZXNwZXJsaW5lOworfTsKKworc3RydWN0IHZpZGVvX21tYXAKK3sKKwl1bnNpZ25lZAlpbnQgZnJhbWU7CQkvKiBGcmFtZSAoMCAtIG4pIGZvciBkb3VibGUgYnVmZmVyICovCisJaW50CQloZWlnaHQsd2lkdGg7CisJdW5zaWduZWQJaW50IGZvcm1hdDsJCS8qIHNob3VsZCBiZSBWSURFT19QQUxFVFRFXyogKi8KK307CisKK3N0cnVjdCB2aWRlb19rZXkKK3sKKwlfX3U4CWtleVs4XTsKKwlfX3UzMglmbGFnczsKK307CisKK3N0cnVjdCB2aWRlb19tYnVmCit7CisJaW50CXNpemU7CQkvKiBUb3RhbCBtZW1vcnkgdG8gbWFwICovCisJaW50CWZyYW1lczsJCS8qIEZyYW1lcyAqLworCWludAlvZmZzZXRzW1ZJREVPX01BWF9GUkFNRV07Cit9OworCisjZGVmaW5lIAlWSURFT19OT19VTklUCSgtMSkKKworc3RydWN0IHZpZGVvX3VuaXQKK3sKKwlpbnQgCXZpZGVvOwkJLyogVmlkZW8gbWlub3IgKi8KKwlpbnQJdmJpOwkJLyogVkJJIG1pbm9yICovCisJaW50CXJhZGlvOwkJLyogUmFkaW8gbWlub3IgKi8KKwlpbnQJYXVkaW87CQkvKiBBdWRpbyBtaW5vciAqLworCWludAl0ZWxldGV4dDsJLyogVGVsZXRleHQgbWlub3IgKi8KK307CisKK3N0cnVjdCB2YmlfZm9ybWF0IHsKKwlfX3UzMglzYW1wbGluZ19yYXRlOwkvKiBpbiBIeiAqLworCV9fdTMyCXNhbXBsZXNfcGVyX2xpbmU7CisJX191MzIJc2FtcGxlX2Zvcm1hdDsJLyogVklERU9fUEFMRVRURV9SQVcgb25seSAoMSBieXRlKSAqLworCV9fczMyCXN0YXJ0WzJdOwkvKiBzdGFydGluZyBsaW5lIGZvciBlYWNoIGZyYW1lICovCisJX191MzIJY291bnRbMl07CS8qIGNvdW50IG9mIGxpbmVzIGZvciBlYWNoIGZyYW1lICovCisJX191MzIJZmxhZ3M7CisjZGVmaW5lCVZCSV9VTlNZTkMJMQkvKiBjYW4gZGlzdGluZ3VlcyBiZXR3ZWVuIHRvcC9ib3R0b20gZmllbGQgKi8KKyNkZWZpbmUJVkJJX0lOVEVSTEFDRUQJMgkvKiBsaW5lcyBhcmUgaW50ZXJsYWNlZCAqLworfTsKKworLyogdmlkZW9faW5mbyBpcyBiaWFzZWQgdG93YXJkcyBoYXJkd2FyZSBtcGVnIGVuY29kZS9kZWNvZGUgKi8KKy8qIGJ1dCBpdCBjb3VsZCBhcHBseSBnZW5lcmljYWxseSB0byBhbnkgaGFyZHdhcmUgY29tcHJlc3Nvci9kZWNvbXByZXNzb3IgKi8KK3N0cnVjdCB2aWRlb19pbmZvCit7CisJX191MzIJZnJhbWVfY291bnQ7CS8qIGZyYW1lcyBvdXRwdXQgc2luY2UgZGVjb2RlL2VuY29kZSBiZWdhbiAqLworCV9fdTMyCWhfc2l6ZTsJCS8qIGN1cnJlbnQgdW5zY2FsZWQgaG9yaXpvbnRhbCBzaXplICovCisJX191MzIJdl9zaXplOwkJLyogY3VycmVudCB1bnNjYWxlZCB2ZXJpdGNhbCBzaXplICovCisJX191MzIJc21wdGVfdGltZWNvZGU7CS8qIGN1cnJlbnQgU01QVEUgdGltZWNvZGUgKGZvciBjdXJyZW50IEdPUCkgKi8KKwlfX3UzMglwaWN0dXJlX3R5cGU7CS8qIGN1cnJlbnQgcGljdHVyZSB0eXBlICovCisJX191MzIJdGVtcG9yYWxfcmVmZXJlbmNlOwkvKiBjdXJyZW50IHRlbXBvcmFsIHJlZmVyZW5jZSAqLworCV9fdTgJdXNlcl9kYXRhWzI1Nl07CS8qIHVzZXIgZGF0YSBsYXN0IGZvdW5kIGluIGNvbXByZXNzZWQgc3RyZWFtICovCisJLyogdXNlcl9kYXRhWzBdIGNvbnRhaW5zIHVzZXIgZGF0YSBmbGFncywgdXNlcl9kYXRhWzFdIGhhcyBjb3VudCAqLworfTsKKworLyogZ2VuZXJpYyBzdHJ1Y3R1cmUgZm9yIHNldHRpbmcgcGxheWJhY2sgbW9kZXMgKi8KK3N0cnVjdCB2aWRlb19wbGF5X21vZGUKK3sKKwlpbnQJbW9kZTsKKwlpbnQJcDE7CisJaW50CXAyOworfTsKKworLyogZm9yIGxvYWRpbmcgbWljcm9jb2RlIC8gZnBnYSBwcm9ncmFtbWluZyAqLworc3RydWN0IHZpZGVvX2NvZGUKK3sKKwljaGFyCWxvYWR3aGF0WzE2XTsJLyogbmFtZSBvciB0YWcgb2YgZmlsZSBiZWluZyBwYXNzZWQgKi8KKwlpbnQJZGF0YXNpemU7CisJX191OAkqZGF0YTsKK307CisKKyNkZWZpbmUgVklESU9DR0NBUAkJX0lPUigndicsMSxzdHJ1Y3QgdmlkZW9fY2FwYWJpbGl0eSkJLyogR2V0IGNhcGFiaWxpdGllcyAqLworI2RlZmluZSBWSURJT0NHQ0hBTgkJX0lPV1IoJ3YnLDIsc3RydWN0IHZpZGVvX2NoYW5uZWwpCS8qIEdldCBjaGFubmVsIGluZm8gKHNvdXJjZXMpICovCisjZGVmaW5lIFZJRElPQ1NDSEFOCQlfSU9XKCd2JywzLHN0cnVjdCB2aWRlb19jaGFubmVsKQkvKiBTZXQgY2hhbm5lbCAJKi8KKyNkZWZpbmUgVklESU9DR1RVTkVSCQlfSU9XUigndicsNCxzdHJ1Y3QgdmlkZW9fdHVuZXIpCQkvKiBHZXQgdHVuZXIgYWJpbGl0aWVzICovCisjZGVmaW5lIFZJRElPQ1NUVU5FUgkJX0lPVygndicsNSxzdHJ1Y3QgdmlkZW9fdHVuZXIpCQkvKiBUdW5lIHRoZSB0dW5lciBmb3IgdGhlIGN1cnJlbnQgY2hhbm5lbCAqLworI2RlZmluZSBWSURJT0NHUElDVAkJX0lPUigndicsNixzdHJ1Y3QgdmlkZW9fcGljdHVyZSkJLyogR2V0IHBpY3R1cmUgcHJvcGVydGllcyAqLworI2RlZmluZSBWSURJT0NTUElDVAkJX0lPVygndicsNyxzdHJ1Y3QgdmlkZW9fcGljdHVyZSkJLyogU2V0IHBpY3R1cmUgcHJvcGVydGllcyAqLworI2RlZmluZSBWSURJT0NDQVBUVVJFCQlfSU9XKCd2Jyw4LGludCkJCQkJLyogU3RhcnQsIGVuZCBjYXB0dXJlICovCisjZGVmaW5lIFZJRElPQ0dXSU4JCV9JT1IoJ3YnLDksIHN0cnVjdCB2aWRlb193aW5kb3cpCS8qIEdldCB0aGUgdmlkZW8gb3ZlcmxheSB3aW5kb3cgKi8KKyNkZWZpbmUgVklESU9DU1dJTgkJX0lPVygndicsMTAsIHN0cnVjdCB2aWRlb193aW5kb3cpCS8qIFNldCB0aGUgdmlkZW8gb3ZlcmxheSB3aW5kb3cgLSBwYXNzZXMgY2xpcCBsaXN0IGZvciBoYXJkd2FyZSBzbWFydHMgLCBjaHJvbWFrZXkgZXRjICovCisjZGVmaW5lIFZJRElPQ0dGQlVGCQlfSU9SKCd2JywxMSwgc3RydWN0IHZpZGVvX2J1ZmZlcikJLyogR2V0IGZyYW1lIGJ1ZmZlciAqLworI2RlZmluZSBWSURJT0NTRkJVRgkJX0lPVygndicsMTIsIHN0cnVjdCB2aWRlb19idWZmZXIpCS8qIFNldCBmcmFtZSBidWZmZXIgLSByb290IG9ubHkgKi8KKyNkZWZpbmUgVklESU9DS0VZCQlfSU9SKCd2JywxMywgc3RydWN0IHZpZGVvX2tleSkJCS8qIFZpZGVvIGtleSBldmVudCAtIHRvIGRldiAyNTUgaXMgdG8gYWxsIC0gY3V0cyBjYXB0dXJlIG9uIGFsbCBETUEgd2luZG93cyB3aXRoIHRoaXMga2V5ICgweEZGRkZGRkZGID09IGFsbCkgKi8KKyNkZWZpbmUgVklESU9DR0ZSRVEJCV9JT1IoJ3YnLDE0LCB1bnNpZ25lZCBsb25nKQkJLyogU2V0IHR1bmVyICovCisjZGVmaW5lIFZJRElPQ1NGUkVRCQlfSU9XKCd2JywxNSwgdW5zaWduZWQgbG9uZykJCS8qIFNldCB0dW5lciAqLworI2RlZmluZSBWSURJT0NHQVVESU8JCV9JT1IoJ3YnLDE2LCBzdHJ1Y3QgdmlkZW9fYXVkaW8pCS8qIEdldCBhdWRpbyBpbmZvICovCisjZGVmaW5lIFZJRElPQ1NBVURJTwkJX0lPVygndicsMTcsIHN0cnVjdCB2aWRlb19hdWRpbykJLyogQXVkaW8gc291cmNlLCBtdXRlIGV0YyAqLworI2RlZmluZSBWSURJT0NTWU5DCQlfSU9XKCd2JywxOCwgaW50KQkJCS8qIFN5bmMgd2l0aCBtbWFwIGdyYWJiaW5nICovCisjZGVmaW5lIFZJRElPQ01DQVBUVVJFCQlfSU9XKCd2JywxOSwgc3RydWN0IHZpZGVvX21tYXApCQkvKiBHcmFiIGZyYW1lcyAqLworI2RlZmluZSBWSURJT0NHTUJVRgkJX0lPUigndicsMjAsIHN0cnVjdCB2aWRlb19tYnVmKQkJLyogTWVtb3J5IG1hcCBidWZmZXIgaW5mbyAqLworI2RlZmluZSBWSURJT0NHVU5JVAkJX0lPUigndicsMjEsIHN0cnVjdCB2aWRlb191bml0KQkJLyogR2V0IGF0dGFjaGVkIHVuaXRzICovCisjZGVmaW5lIFZJRElPQ0dDQVBUVVJFCQlfSU9SKCd2JywyMiwgc3RydWN0IHZpZGVvX2NhcHR1cmUpCS8qIEdldCBzdWJjYXB0dXJlICovCisjZGVmaW5lIFZJRElPQ1NDQVBUVVJFCQlfSU9XKCd2JywyMywgc3RydWN0IHZpZGVvX2NhcHR1cmUpCS8qIFNldCBzdWJjYXB0dXJlICovCisjZGVmaW5lIFZJRElPQ1NQTEFZTU9ERQkJX0lPVygndicsMjQsIHN0cnVjdCB2aWRlb19wbGF5X21vZGUpCS8qIFNldCBvdXRwdXQgdmlkZW8gbW9kZS9mZWF0dXJlICovCisjZGVmaW5lIFZJRElPQ1NXUklURU1PREUJX0lPVygndicsMjUsIGludCkJCQkvKiBTZXQgd3JpdGUgbW9kZSAqLworI2RlZmluZSBWSURJT0NHUExBWUlORk8JCV9JT1IoJ3YnLDI2LCBzdHJ1Y3QgdmlkZW9faW5mbykJCS8qIEdldCBjdXJyZW50IHBsYXliYWNrIGluZm8gZnJvbSBoYXJkd2FyZSAqLworI2RlZmluZSBWSURJT0NTTUlDUk9DT0RFCV9JT1coJ3YnLDI3LCBzdHJ1Y3QgdmlkZW9fY29kZSkJCS8qIExvYWQgbWljcm9jb2RlIGludG8gaGFyZHdhcmUgKi8KKyNkZWZpbmUJVklESU9DR1ZCSUZNVAkJX0lPUigndicsMjgsIHN0cnVjdCB2YmlfZm9ybWF0KQkJLyogR2V0IFZCSSBpbmZvcm1hdGlvbiAqLworI2RlZmluZQlWSURJT0NTVkJJRk1UCQlfSU9XKCd2JywyOSwgc3RydWN0IHZiaV9mb3JtYXQpCQkvKiBTZXQgVkJJIGluZm9ybWF0aW9uICovCisKKworI2RlZmluZSBCQVNFX1ZJRElPQ1BSSVZBVEUJMTkyCQkvKiAxOTItMjU1IGFyZSBwcml2YXRlICovCisKKy8qIFZJRElPQ1NXUklURU1PREUgKi8KKyNkZWZpbmUgVklEX1dSSVRFX01QRUdfQVVECQkwCisjZGVmaW5lIFZJRF9XUklURV9NUEVHX1ZJRAkJMQorI2RlZmluZSBWSURfV1JJVEVfT1NECQkJMgorI2RlZmluZSBWSURfV1JJVEVfVFRYCQkJMworI2RlZmluZSBWSURfV1JJVEVfQ0MJCQk0CisjZGVmaW5lIFZJRF9XUklURV9NSlBFRwkJCTUKKworLyogVklESU9DU1BMQVlNT0RFICovCisjZGVmaW5lIFZJRF9QTEFZX1ZJRF9PVVRfTU9ERQkJMAorCS8qIHAxOiA9IFZJREVPX01PREVfUEFMLCBWSURFT19NT0RFX05UU0MsIGV0YyAuLi4gKi8KKyNkZWZpbmUgVklEX1BMQVlfR0VOTE9DSwkJMQorCS8qIHAxOiAwID0gT0ZGLCAxID0gT04gKi8KKwkvKiBwMjogR0VOTE9DSyBGSU5FIERFTEFZIHZhbHVlICovCisjZGVmaW5lIFZJRF9QTEFZX05PUk1BTAkJCTIKKyNkZWZpbmUgVklEX1BMQVlfUEFVU0UJCQkzCisjZGVmaW5lIFZJRF9QTEFZX1NJTkdMRV9GUkFNRQkJNAorI2RlZmluZSBWSURfUExBWV9GQVNUX0ZPUldBUkQJCTUKKyNkZWZpbmUgVklEX1BMQVlfU0xPV19NT1RJT04JCTYKKyNkZWZpbmUgVklEX1BMQVlfSU1NRURJQVRFX05PUk1BTAk3CisjZGVmaW5lIFZJRF9QTEFZX1NXSVRDSF9DSEFOTkVMUwk4CisjZGVmaW5lIFZJRF9QTEFZX0ZSRUVaRV9GUkFNRQkJOQorI2RlZmluZSBWSURfUExBWV9TVElMTF9NT0RFCQkxMAorI2RlZmluZSBWSURfUExBWV9NQVNURVJfTU9ERQkJMTEKKwkvKiBwMTogc2VlIGJlbG93ICovCisjZGVmaW5lCQlWSURfUExBWV9NQVNURVJfTk9ORQkxCisjZGVmaW5lCQlWSURfUExBWV9NQVNURVJfVklERU8JMgorI2RlZmluZQkJVklEX1BMQVlfTUFTVEVSX0FVRElPCTMKKyNkZWZpbmUgVklEX1BMQVlfQUNUSVZFX1NDQU5MSU5FUwkxMgorCS8qIHAxID0gZmlyc3QgYWN0aXZlOyBwMiA9IGxhc3QgYWN0aXZlICovCisjZGVmaW5lIFZJRF9QTEFZX1JFU0VUCQkJMTMKKyNkZWZpbmUgVklEX1BMQVlfRU5EX01BUksJCTE0CisKKyNlbmRpZiAvKiBfX0xJTlVYX1ZJREVPREVWX0ggKi8KKworLyoKKyAqIExvY2FsIHZhcmlhYmxlczoKKyAqIGMtYmFzaWMtb2Zmc2V0OiA4CisgKiBFbmQ6CisgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L25fZ3NtLmMgYi9kcml2ZXJzL3R0eS9uX2dzbS5jCmluZGV4IGM1ZjhlNWIuLjQ0Yjg0MTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L25fZ3NtLmMKKysrIGIvZHJpdmVycy90dHkvbl9nc20uYwpAQCAtMTksNyArMTksNyBAQAogICoKICAqIFRPIERPOgogICoJTW9zdGx5IGRvbmU6CWlvY3RscyBmb3Igc2V0dGluZyBtb2Rlcy90aW1pbmcKLSAqCVBhcnRseSBkb25lOiAJaG9va3Mgc28geW91IGNhbiBwdWxsIG9mZiBmcmFtZXMgdG8gbm9uIHR0eSBkZXZzCisgKglQYXJ0bHkgZG9uZToJaG9va3Mgc28geW91IGNhbiBwdWxsIG9mZiBmcmFtZXMgdG8gbm9uIHR0eSBkZXZzCiAgKglSZXN0YXJ0IERMQ0kgMCB3aGVuIGl0IGNsb3NlcyA/CiAgKglUZXN0IGJhc2ljIGVuY29kaW5nCiAgKglJbXByb3ZlIHRoZSB0eCBlbmdpbmUKQEAgLTczLDggKzczLDEwIEBACiAjZGVmaW5lIFQyCSgyICogSFopCiAjZW5kaWYKIAotLyogU2VtaS1hcmJpdGFyeSBidWZmZXIgc2l6ZSBsaW1pdHMuIDA3MTAgaXMgbm9ybWFsbHkgcnVuIHdpdGggMzItNjQgYnl0ZQotICAgbGltaXRzIHNvIHRoaXMgaXMgcGxlbnR5ICovCisvKgorICogU2VtaS1hcmJpdGFyeSBidWZmZXIgc2l6ZSBsaW1pdHMuIDA3MTAgaXMgbm9ybWFsbHkgcnVuIHdpdGggMzItNjQgYnl0ZQorICogbGltaXRzIHNvIHRoaXMgaXMgcGxlbnR5CisgKi8KICNkZWZpbmUgTUFYX01SVSA1MTIKICNkZWZpbmUgTUFYX01UVSA1MTIKIApAQCAtMTg0LDYgKzE4Niw5IEBACiAjZGVmaW5lIEdTTV9EQVRBCQk1CiAjZGVmaW5lIEdTTV9GQ1MJCQk2CiAjZGVmaW5lIEdTTV9PVkVSUlVOCQk3CisjZGVmaW5lIEdTTV9MRU4wCQk4CisjZGVmaW5lIEdTTV9MRU4xCQk5CisjZGVmaW5lIEdTTV9TU09GCQkxMAogCXVuc2lnbmVkIGludCBsZW47CiAJdW5zaWduZWQgaW50IGFkZHJlc3M7CiAJdW5zaWduZWQgaW50IGNvdW50OwpAQCAtMTkxLDYgKzE5Niw3IEBACiAJaW50IGVuY29kaW5nOwogCXU4IGNvbnRyb2w7CiAJdTggZmNzOworCXU4IHJlY2VpdmVkX2ZjczsKIAl1OCAqdHhmcmFtZTsJCQkvKiBUWCBmcmFtaW5nIGJ1ZmZlciAqLwogCiAJLyogTWV0aG9kcyBmb3IgdGhlIHJlY2VpdmVyIHNpZGUgKi8KQEAgLTI4Niw3ICsyOTIsNyBAQAogI2RlZmluZSBNRE1fRFYJCQkweDQwCiAKICNkZWZpbmUgR1NNMF9TT0YJCTB4RjkKLSNkZWZpbmUgR1NNMV9TT0YgCQkweDdFCisjZGVmaW5lIEdTTTFfU09GCQkweDdFCiAjZGVmaW5lIEdTTTFfRVNDQVBFCQkweDdECiAjZGVmaW5lIEdTTTFfRVNDQVBFX0JJVFMJMHgyMAogI2RlZmluZSBYT04JCQkweDExCkBAIC00MjksNjEgKzQzNSw2MyBAQAogCWlmICghKGRlYnVnICYgMSkpCiAJCXJldHVybjsKIAotCXByaW50ayhLRVJOX0lORk8gIiVzICVkKSAlYzogIiwgaGRyLCBhZGRyLCAiUkMiW2NyXSk7CisJcHJfaW5mbygiJXMgJWQpICVjOiAiLCBoZHIsIGFkZHIsICJSQyJbY3JdKTsKIAogCXN3aXRjaCAoY29udHJvbCAmIH5QRikgewogCWNhc2UgU0FCTToKLQkJcHJpbnRrKEtFUk5fQ09OVCAiU0FCTSIpOworCQlwcl9jb250KCJTQUJNIik7CiAJCWJyZWFrOwogCWNhc2UgVUE6Ci0JCXByaW50ayhLRVJOX0NPTlQgIlVBIik7CisJCXByX2NvbnQoIlVBIik7CiAJCWJyZWFrOwogCWNhc2UgRElTQzoKLQkJcHJpbnRrKEtFUk5fQ09OVCAiRElTQyIpOworCQlwcl9jb250KCJESVNDIik7CiAJCWJyZWFrOwogCWNhc2UgRE06Ci0JCXByaW50ayhLRVJOX0NPTlQgIkRNIik7CisJCXByX2NvbnQoIkRNIik7CiAJCWJyZWFrOwogCWNhc2UgVUk6Ci0JCXByaW50ayhLRVJOX0NPTlQgIlVJIik7CisJCXByX2NvbnQoIlVJIik7CiAJCWJyZWFrOwogCWNhc2UgVUlIOgotCQlwcmludGsoS0VSTl9DT05UICJVSUgiKTsKKwkJcHJfY29udCgiVUlIIik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWlmICghKGNvbnRyb2wgJiAweDAxKSkgewotCQkJcHJpbnRrKEtFUk5fQ09OVCAiSSBOKFMpJWQgTihSKSVkIiwKLQkJCQkoY29udHJvbCAmIDB4MEUpID4+IDEsIChjb250cm9sICYgMHhFKT4+IDUpOworCQkJcHJfY29udCgiSSBOKFMpJWQgTihSKSVkIiwKKwkJCQkoY29udHJvbCAmIDB4MEUpID4+IDEsIChjb250cm9sICYgMHhFKSA+PiA1KTsKIAkJfSBlbHNlIHN3aXRjaCAoY29udHJvbCAmIDB4MEYpIHsKLQkJY2FzZSBSUjoKLQkJCXByaW50aygiUlIoJWQpIiwgKGNvbnRyb2wgJiAweEUwKSA+PiA1KTsKLQkJCWJyZWFrOwotCQljYXNlIFJOUjoKLQkJCXByaW50aygiUk5SKCVkKSIsIChjb250cm9sICYgMHhFMCkgPj4gNSk7Ci0JCQlicmVhazsKLQkJY2FzZSBSRUo6Ci0JCQlwcmludGsoIlJFSiglZCkiLCAoY29udHJvbCAmIDB4RTApID4+IDUpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlwcmludGsoS0VSTl9DT05UICJbJTAyWF0iLCBjb250cm9sKTsKKwkJCWNhc2UgUlI6CisJCQkJcHJfY29udCgiUlIoJWQpIiwgKGNvbnRyb2wgJiAweEUwKSA+PiA1KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgUk5SOgorCQkJCXByX2NvbnQoIlJOUiglZCkiLCAoY29udHJvbCAmIDB4RTApID4+IDUpOworCQkJCWJyZWFrOworCQkJY2FzZSBSRUo6CisJCQkJcHJfY29udCgiUkVKKCVkKSIsIChjb250cm9sICYgMHhFMCkgPj4gNSk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXByX2NvbnQoIlslMDJYXSIsIGNvbnRyb2wpOwogCQl9CiAJfQogCiAJaWYgKGNvbnRyb2wgJiBQRikKLQkJcHJpbnRrKEtFUk5fQ09OVCAiKFApIik7CisJCXByX2NvbnQoIihQKSIpOwogCWVsc2UKLQkJcHJpbnRrKEtFUk5fQ09OVCAiKEYpIik7CisJCXByX2NvbnQoIihGKSIpOwogCiAJaWYgKGRsZW4pIHsKIAkJaW50IGN0ID0gMDsKIAkJd2hpbGUgKGRsZW4tLSkgewotCQkJaWYgKGN0ICUgOCA9PSAwKQotCQkJCXByaW50ayhLRVJOX0NPTlQgIlxuICAgICIpOwotCQkJcHJpbnRrKEtFUk5fQ09OVCAiJTAyWCAiLCAqZGF0YSsrKTsKKwkJCWlmIChjdCAlIDggPT0gMCkgeworCQkJCXByX2NvbnQoIlxuIik7CisJCQkJcHJfZGVidWcoIiAgICAiKTsKKwkJCX0KKwkJCXByX2NvbnQoIiUwMlggIiwgKmRhdGErKyk7CiAJCQljdCsrOwogCQl9CiAJfQotCXByaW50ayhLRVJOX0NPTlQgIlxuIik7CisJcHJfY29udCgiXG4iKTsKIH0KIAogCkBAIC01MjIsMTEgKzUzMCwxMyBAQAogewogCWludCBpOwogCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewotCQlpZiAoaSAmJiAoaSAlIDE2KSA9PSAwKQotCQkJcHJpbnRrKCJcbiIpOwotCQlwcmludGsoIiUwMlggIiwgKnArKyk7CisJCWlmIChpICYmIChpICUgMTYpID09IDApIHsKKwkJCXByX2NvbnQoIlxuIik7CisJCQlwcl9kZWJ1ZygiIik7CisJCX0KKwkJcHJfY29udCgiJTAyWCAiLCAqcCsrKTsKIAl9Ci0JcHJpbnRrKCJcbiIpOworCXByX2NvbnQoIlxuIik7CiB9CiAKIC8qKgpAQCAtNjc2LDcgKzY4Niw3IEBACiAJCX0KIAogCQlpZiAoZGVidWcgJiA0KSB7Ci0JCQlwcmludGsoImdzbV9kYXRhX2tpY2s6IFxuIik7CisJCQlwcl9kZWJ1ZygiZ3NtX2RhdGFfa2ljazpcbiIpOwogCQkJaGV4X3BhY2tldChnc20tPnR4ZnJhbWUsIGxlbik7CiAJCX0KIApAQCAtMTIzMSw3ICsxMjQxLDcgQEAKIH0KIAogLyoqCi0gKglnc21fY29udHJvbF90cmFuc21pdCAJLQlzZW5kIGNvbnRyb2wgcGFja2V0CisgKglnc21fY29udHJvbF90cmFuc21pdAktCXNlbmQgY29udHJvbCBwYWNrZXQKICAqCUBnc206IGdzbSBtdXgKICAqCUBjdHJsOiBmcmFtZSB0byBzZW5kCiAgKgpAQCAtMTM2MSw3ICsxMzcxLDcgQEAKIHsKIAlkZWxfdGltZXIoJmRsY2ktPnQxKTsKIAlpZiAoZGVidWcgJiA4KQotCQlwcmludGsoIkRMQ0kgJWQgZ29lcyBjbG9zZWQuXG4iLCBkbGNpLT5hZGRyKTsKKwkJcHJfZGVidWcoIkRMQ0kgJWQgZ29lcyBjbG9zZWQuXG4iLCBkbGNpLT5hZGRyKTsKIAlkbGNpLT5zdGF0ZSA9IERMQ0lfQ0xPU0VEOwogCWlmIChkbGNpLT5hZGRyICE9IDApIHsKIAkJc3RydWN0IHR0eV9zdHJ1Y3QgICp0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZkbGNpLT5wb3J0KTsKQEAgLTEzOTIsNyArMTQwMiw3IEBACiAJLyogVGhpcyB3aWxsIGxldCBhIHR0eSBvcGVuIGNvbnRpbnVlICovCiAJZGxjaS0+c3RhdGUgPSBETENJX09QRU47CiAJaWYgKGRlYnVnICYgOCkKLQkJcHJpbnRrKCJETENJICVkIGdvZXMgb3Blbi5cbiIsIGRsY2ktPmFkZHIpOworCQlwcl9kZWJ1ZygiRExDSSAlZCBnb2VzIG9wZW4uXG4iLCBkbGNpLT5hZGRyKTsKIAl3YWtlX3VwKCZkbGNpLT5nc20tPmV2ZW50KTsKIH0KIApAQCAtMTQ5NCwyOSArMTUwNCwyOSBAQAogCXVuc2lnbmVkIGludCBtb2RlbSA9IDA7CiAKIAlpZiAoZGVidWcgJiAxNikKLQkJcHJpbnRrKCIlZCBieXRlcyBmb3IgdHR5ICVwXG4iLCBsZW4sIHR0eSk7CisJCXByX2RlYnVnKCIlZCBieXRlcyBmb3IgdHR5ICVwXG4iLCBsZW4sIHR0eSk7CiAJaWYgKHR0eSkgewogCQlzd2l0Y2ggKGRsY2ktPmFkYXB0aW9uKSAgewotCQkJLyogVW5zdXBwb3J0ZWQgdHlwZXMgKi8KLQkJCS8qIFBhY2tldGlzZWQgaW50ZXJydXB0aWJsZSBkYXRhICovCi0JCQljYXNlIDQ6Ci0JCQkJYnJlYWs7Ci0JCQkvKiBQYWNrZXRpc2VkIHVpbmludGVycnVwdGlibGUgdm9pY2UvZGF0YSAqLwotCQkJY2FzZSAzOgotCQkJCWJyZWFrOwotCQkJLyogQXN5bmNocm9ub3VzIHNlcmlhbCB3aXRoIGxpbmUgc3RhdGUgaW4gZWFjaCBmcmFtZSAqLwotCQkJY2FzZSAyOgotCQkJCXdoaWxlIChnc21fcmVhZF9lYSgmbW9kZW0sICpkYXRhKyspID09IDApIHsKLQkJCQkJbGVuLS07Ci0JCQkJCWlmIChsZW4gPT0gMCkKLQkJCQkJCXJldHVybjsKLQkJCQl9Ci0JCQkJZ3NtX3Byb2Nlc3NfbW9kZW0odHR5LCBkbGNpLCBtb2RlbSk7Ci0JCQkvKiBMaW5lIHN0YXRlIHdpbGwgZ28gdmlhIERMQ0kgMCBjb250cm9scyBvbmx5ICovCi0JCQljYXNlIDE6Ci0JCQlkZWZhdWx0OgotCQkJCXR0eV9pbnNlcnRfZmxpcF9zdHJpbmcodHR5LCBkYXRhLCBsZW4pOwotCQkJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CisJCS8qIFVuc3VwcG9ydGVkIHR5cGVzICovCisJCS8qIFBhY2tldGlzZWQgaW50ZXJydXB0aWJsZSBkYXRhICovCisJCWNhc2UgNDoKKwkJCWJyZWFrOworCQkvKiBQYWNrZXRpc2VkIHVpbmludGVycnVwdGlibGUgdm9pY2UvZGF0YSAqLworCQljYXNlIDM6CisJCQlicmVhazsKKwkJLyogQXN5bmNocm9ub3VzIHNlcmlhbCB3aXRoIGxpbmUgc3RhdGUgaW4gZWFjaCBmcmFtZSAqLworCQljYXNlIDI6CisJCQl3aGlsZSAoZ3NtX3JlYWRfZWEoJm1vZGVtLCAqZGF0YSsrKSA9PSAwKSB7CisJCQkJbGVuLS07CisJCQkJaWYgKGxlbiA9PSAwKQorCQkJCQlyZXR1cm47CisJCQl9CisJCQlnc21fcHJvY2Vzc19tb2RlbSh0dHksIGRsY2ksIG1vZGVtKTsKKwkJLyogTGluZSBzdGF0ZSB3aWxsIGdvIHZpYSBETENJIDAgY29udHJvbHMgb25seSAqLworCQljYXNlIDE6CisJCWRlZmF1bHQ6CisJCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgZGF0YSwgbGVuKTsKKwkJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CiAJCX0KIAkJdHR5X2tyZWZfcHV0KHR0eSk7CiAJfQpAQCAtMTYyNSw3ICsxNjM1LDYgQEAKIAlrZnJlZShkbGNpKTsKIH0KIAotCiAvKgogICoJTEFQQmlzaCBsaW5rIGxheWVyIGxvZ2ljCiAgKi8KQEAgLTE2NTAsMTAgKzE2NTksMTIgQEAKIAogCWlmICgoZ3NtLT5jb250cm9sICYgflBGKSA9PSBVSSkKIAkJZ3NtLT5mY3MgPSBnc21fZmNzX2FkZF9ibG9jayhnc20tPmZjcywgZ3NtLT5idWYsIGdzbS0+bGVuKTsKKwkvKiBnZW5lcmF0ZSBmaW5hbCBDUkMgd2l0aCByZWNlaXZlZCBGQ1MgKi8KKwlnc20tPmZjcyA9IGdzbV9mY3NfYWRkKGdzbS0+ZmNzLCBnc20tPnJlY2VpdmVkX2Zjcyk7CiAJaWYgKGdzbS0+ZmNzICE9IEdPT0RfRkNTKSB7CiAJCWdzbS0+YmFkX2ZjcysrOwogCQlpZiAoZGVidWcgJiA0KQotCQkJcHJpbnRrKCJCQUQgRkNTICUwMnhcbiIsIGdzbS0+ZmNzKTsKKwkJCXByX2RlYnVnKCJCQUQgRkNTICUwMnhcbiIsIGdzbS0+ZmNzKTsKIAkJcmV0dXJuOwogCX0KIAlhZGRyZXNzID0gZ3NtLT5hZGRyZXNzID4+IDE7CkBAIC0xNzQ4LDYgKzE3NTksOCBAQAogCiBzdGF0aWMgdm9pZCBnc20wX3JlY2VpdmUoc3RydWN0IGdzbV9tdXggKmdzbSwgdW5zaWduZWQgY2hhciBjKQogeworCXVuc2lnbmVkIGludCBsZW47CisKIAlzd2l0Y2ggKGdzbS0+c3RhdGUpIHsKIAljYXNlIEdTTV9TRUFSQ0g6CS8qIFNPRiBtYXJrZXIgKi8KIAkJaWYgKGMgPT0gR1NNMF9TT0YpIHsKQEAgLTE3NTYsOCArMTc2OSw4IEBACiAJCQlnc20tPmxlbiA9IDA7CiAJCQlnc20tPmZjcyA9IElOSVRfRkNTOwogCQl9Ci0JCWJyZWFrOwkJLyogQWRkcmVzcyBFQSAqLwotCWNhc2UgR1NNX0FERFJFU1M6CisJCWJyZWFrOworCWNhc2UgR1NNX0FERFJFU1M6CS8qIEFkZHJlc3MgRUEgKi8KIAkJZ3NtLT5mY3MgPSBnc21fZmNzX2FkZChnc20tPmZjcywgYyk7CiAJCWlmIChnc21fcmVhZF9lYSgmZ3NtLT5hZGRyZXNzLCBjKSkKIAkJCWdzbS0+c3RhdGUgPSBHU01fQ09OVFJPTDsKQEAgLTE3NjUsOSArMTc3OCw5IEBACiAJY2FzZSBHU01fQ09OVFJPTDoJLyogQ29udHJvbCBCeXRlICovCiAJCWdzbS0+ZmNzID0gZ3NtX2Zjc19hZGQoZ3NtLT5mY3MsIGMpOwogCQlnc20tPmNvbnRyb2wgPSBjOwotCQlnc20tPnN0YXRlID0gR1NNX0xFTjsKKwkJZ3NtLT5zdGF0ZSA9IEdTTV9MRU4wOwogCQlicmVhazsKLQljYXNlIEdTTV9MRU46CQkvKiBMZW5ndGggRUEgKi8KKwljYXNlIEdTTV9MRU4wOgkJLyogTGVuZ3RoIEVBICovCiAJCWdzbS0+ZmNzID0gZ3NtX2Zjc19hZGQoZ3NtLT5mY3MsIGMpOwogCQlpZiAoZ3NtX3JlYWRfZWEoJmdzbS0+bGVuLCBjKSkgewogCQkJaWYgKGdzbS0+bGVuID4gZ3NtLT5tcnUpIHsKQEAgLTE3NzYsOCArMTc4OSwyOCBAQAogCQkJCWJyZWFrOwogCQkJfQogCQkJZ3NtLT5jb3VudCA9IDA7Ci0JCQlnc20tPnN0YXRlID0gR1NNX0RBVEE7CisJCQlpZiAoIWdzbS0+bGVuKQorCQkJCWdzbS0+c3RhdGUgPSBHU01fRkNTOworCQkJZWxzZQorCQkJCWdzbS0+c3RhdGUgPSBHU01fREFUQTsKKwkJCWJyZWFrOwogCQl9CisJCWdzbS0+c3RhdGUgPSBHU01fTEVOMTsKKwkJYnJlYWs7CisJY2FzZSBHU01fTEVOMToKKwkJZ3NtLT5mY3MgPSBnc21fZmNzX2FkZChnc20tPmZjcywgYyk7CisJCWxlbiA9IGM7CisJCWdzbS0+bGVuIHw9IGxlbiA8PCA3OworCQlpZiAoZ3NtLT5sZW4gPiBnc20tPm1ydSkgeworCQkJZ3NtLT5iYWRfc2l6ZSsrOworCQkJZ3NtLT5zdGF0ZSA9IEdTTV9TRUFSQ0g7CisJCQlicmVhazsKKwkJfQorCQlnc20tPmNvdW50ID0gMDsKKwkJaWYgKCFnc20tPmxlbikKKwkJCWdzbS0+c3RhdGUgPSBHU01fRkNTOworCQllbHNlCisJCQlnc20tPnN0YXRlID0gR1NNX0RBVEE7CiAJCWJyZWFrOwogCWNhc2UgR1NNX0RBVEE6CQkvKiBEYXRhICovCiAJCWdzbS0+YnVmW2dzbS0+Y291bnQrK10gPSBjOwpAQCAtMTc4NSwxNiArMTgxOCwyNSBAQAogCQkJZ3NtLT5zdGF0ZSA9IEdTTV9GQ1M7CiAJCWJyZWFrOwogCWNhc2UgR1NNX0ZDUzoJCS8qIEZDUyBmb2xsb3dzIHRoZSBwYWNrZXQgKi8KLQkJZ3NtLT5mY3MgPSBjOworCQlnc20tPnJlY2VpdmVkX2ZjcyA9IGM7CisJCWlmIChjID09IEdTTTBfU09GKSB7CisJCQlnc20tPnN0YXRlID0gR1NNX1NFQVJDSDsKKwkJCWJyZWFrOworCQl9CiAJCWdzbV9xdWV1ZShnc20pOwotCQkvKiBBbmQgdGhlbiBiYWNrIGZvciB0aGUgbmV4dCBmcmFtZSAqLwotCQlnc20tPnN0YXRlID0gR1NNX1NFQVJDSDsKKwkJZ3NtLT5zdGF0ZSA9IEdTTV9TU09GOworCQlicmVhazsKKwljYXNlIEdTTV9TU09GOgorCQlpZiAoYyA9PSBHU00wX1NPRikgeworCQkJZ3NtLT5zdGF0ZSA9IEdTTV9TRUFSQ0g7CisJCQlicmVhazsKKwkJfQogCQlicmVhazsKIAl9CiB9CiAKIC8qKgotICoJZ3NtMF9yZWNlaXZlCS0JcGVyZm9ybSBwcm9jZXNzaW5nIGZvciBub24tdHJhbnNwYXJlbmN5CisgKglnc20xX3JlY2VpdmUJLQlwZXJmb3JtIHByb2Nlc3NpbmcgZm9yIG5vbi10cmFuc3BhcmVuY3kKICAqCUBnc206IGdzbSBkYXRhIGZvciB0aGlzIGxkaXNjIGluc3RhbmNlCiAgKglAYzogY2hhcmFjdGVyCiAgKgpAQCAtMTg1Niw3ICsxODk4LDcgQEAKIAkJZ3NtLT5zdGF0ZSA9IEdTTV9EQVRBOwogCQlicmVhazsKIAljYXNlIEdTTV9EQVRBOgkJLyogRGF0YSAqLwotCQlpZiAoZ3NtLT5jb3VudCA+IGdzbS0+bXJ1ICkgewkvKiBBbGxvdyBvbmUgZm9yIHRoZSBGQ1MgKi8KKwkJaWYgKGdzbS0+Y291bnQgPiBnc20tPm1ydSkgewkvKiBBbGxvdyBvbmUgZm9yIHRoZSBGQ1MgKi8KIAkJCWdzbS0+c3RhdGUgPSBHU01fT1ZFUlJVTjsKIAkJCWdzbS0+YmFkX3NpemUrKzsKIAkJfSBlbHNlCkBAIC0yMDM0LDkgKzIwNzYsNiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoZ3NtX2FsbG9jX211eCk7CiAKLQotCi0KIC8qKgogICoJZ3NtbGRfb3V0cHV0CQktCXdyaXRlIHRvIGxpbmsKICAqCUBnc206IG91ciBtdXgKQEAgLTIwNTQsNyArMjA5Myw3IEBACiAJCXJldHVybiAtRU5PU1BDOwogCX0KIAlpZiAoZGVidWcgJiA0KSB7Ci0JCXByaW50aygiLS0+JWQgYnl0ZXMgb3V0XG4iLCBsZW4pOworCQlwcl9kZWJ1ZygiLS0+JWQgYnl0ZXMgb3V0XG4iLCBsZW4pOwogCQloZXhfcGFja2V0KGRhdGEsIGxlbik7CiAJfQogCWdzbS0+dHR5LT5vcHMtPndyaXRlKGdzbS0+dHR5LCBkYXRhLCBsZW4pOwpAQCAtMjExMSw3ICsyMTUwLDcgQEAKIAljaGFyIGZsYWdzOwogCiAJaWYgKGRlYnVnICYgNCkgewotCQlwcmludGsoIkluYnl0ZXMgJWRkXG4iLCBjb3VudCk7CisJCXByX2RlYnVnKCJJbmJ5dGVzICVkZFxuIiwgY291bnQpOwogCQloZXhfcGFja2V0KGNwLCBjb3VudCk7CiAJfQogCkBAIC0yMTI4LDcgKzIxNjcsNyBAQAogCQkJZ3NtLT5lcnJvcihnc20sICpkcCwgZmxhZ3MpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmtub3duIGZsYWcgJWRcbiIsCisJCQlXQVJOX09OQ0UoIiVzOiB1bmtub3duIGZsYWcgJWRcbiIsCiAJCQkgICAgICAgdHR5X25hbWUodHR5LCBidWYpLCBmbGFncyk7CiAJCQlicmVhazsKIAkJfQpAQCAtMjMyMyw3ICsyMzYyLDcgQEAKIAlpbnQgbmVlZF9yZXN0YXJ0ID0gMDsKIAogCS8qIFN0dWZmIHdlIGRvbid0IHN1cHBvcnQgeWV0IC0gVUkgb3IgSSBmcmFtZSB0cmFuc3BvcnQsIHdpbmRvd2luZyAqLwotCWlmICgoYy0+YWRhcHRpb24gIT0xICYmIGMtPmFkYXB0aW9uICE9IDIpIHx8IGMtPmspCisJaWYgKChjLT5hZGFwdGlvbiAhPSAxICYmIGMtPmFkYXB0aW9uICE9IDIpIHx8IGMtPmspCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAkvKiBDaGVjayB0aGUgTVJVL01UVSByYW5nZSBsb29rcyBzYW5lICovCiAJaWYgKGMtPm1ydSA+IE1BWF9NUlUgfHwgYy0+bXR1ID4gTUFYX01UVSB8fCBjLT5tcnUgPCA4IHx8IGMtPm10dSA8IDgpCkBAIC0yNDE4LDcgKzI0NTcsNyBAQAogCQkJYy5pID0gMTsKIAkJZWxzZQogCQkJYy5pID0gMjsKLQkJcHJpbnRrKCJGdHlwZSAlZCBpICVkXG4iLCBnc20tPmZ0eXBlLCBjLmkpOworCQlwcl9kZWJ1ZygiRnR5cGUgJWQgaSAlZFxuIiwgZ3NtLT5mdHlwZSwgYy5pKTsKIAkJYy5tcnUgPSBnc20tPm1ydTsKIAkJYy5tdHUgPSBnc20tPm10dTsKIAkJYy5rID0gMDsKQEAgLTI3MTIsMTQgKzI3NTEsMTUgQEAKIAkvKiBGaWxsIGluIG91ciBsaW5lIHByb3RvY29sIGRpc2NpcGxpbmUsIGFuZCByZWdpc3RlciBpdCAqLwogCWludCBzdGF0dXMgPSB0dHlfcmVnaXN0ZXJfbGRpc2MoTl9HU00wNzEwLCAmdHR5X2xkaXNjX3BhY2tldCk7CiAJaWYgKHN0YXR1cyAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAibl9nc206IGNhbid0IHJlZ2lzdGVyIGxpbmUgZGlzY2lwbGluZSAoZXJyID0gJWQpXG4iLCBzdGF0dXMpOworCQlwcl9lcnIoIm5fZ3NtOiBjYW4ndCByZWdpc3RlciBsaW5lIGRpc2NpcGxpbmUgKGVyciA9ICVkKVxuIiwKKwkJCQkJCQkJc3RhdHVzKTsKIAkJcmV0dXJuIHN0YXR1czsKIAl9CiAKIAlnc21fdHR5X2RyaXZlciA9IGFsbG9jX3R0eV9kcml2ZXIoMjU2KTsKIAlpZiAoIWdzbV90dHlfZHJpdmVyKSB7CiAJCXR0eV91bnJlZ2lzdGVyX2xkaXNjKE5fR1NNMDcxMCk7Ci0JCXByaW50ayhLRVJOX0VSUiAiZ3NtX2luaXQ6IHR0eSBhbGxvY2F0aW9uIGZhaWxlZC5cbiIpOworCQlwcl9lcnIoImdzbV9pbml0OiB0dHkgYWxsb2NhdGlvbiBmYWlsZWQuXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWdzbV90dHlfZHJpdmVyLT5vd25lcgk9IFRISVNfTU9EVUxFOwpAQCAtMjczMCw3ICsyNzcwLDcgQEAKIAlnc21fdHR5X2RyaXZlci0+dHlwZQkJPSBUVFlfRFJJVkVSX1RZUEVfU0VSSUFMOwogCWdzbV90dHlfZHJpdmVyLT5zdWJ0eXBlCT0gU0VSSUFMX1RZUEVfTk9STUFMOwogCWdzbV90dHlfZHJpdmVyLT5mbGFncwk9IFRUWV9EUklWRVJfUkVBTF9SQVcgfCBUVFlfRFJJVkVSX0RZTkFNSUNfREVWCi0JCQkJCQkJfCBUVFlfRFJJVkVSX0hBUkRXQVJFX0JSRUFLOworCQkJCQkJfCBUVFlfRFJJVkVSX0hBUkRXQVJFX0JSRUFLOwogCWdzbV90dHlfZHJpdmVyLT5pbml0X3Rlcm1pb3MJPSB0dHlfc3RkX3Rlcm1pb3M7CiAJLyogRml4bWUgKi8KIAlnc21fdHR5X2RyaXZlci0+aW5pdF90ZXJtaW9zLmNfbGZsYWcgJj0gfkVDSE87CkBAIC0yNzQxLDEwICsyNzgxLDExIEBACiAJaWYgKHR0eV9yZWdpc3Rlcl9kcml2ZXIoZ3NtX3R0eV9kcml2ZXIpKSB7CiAJCXB1dF90dHlfZHJpdmVyKGdzbV90dHlfZHJpdmVyKTsKIAkJdHR5X3VucmVnaXN0ZXJfbGRpc2MoTl9HU00wNzEwKTsKLQkJcHJpbnRrKEtFUk5fRVJSICJnc21faW5pdDogdHR5IHJlZ2lzdHJhdGlvbiBmYWlsZWQuXG4iKTsKKwkJcHJfZXJyKCJnc21faW5pdDogdHR5IHJlZ2lzdHJhdGlvbiBmYWlsZWQuXG4iKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9Ci0JcHJpbnRrKEtFUk5fSU5GTyAiZ3NtX2luaXQ6IGxvYWRlZCBhcyAlZCwlZC5cbiIsIGdzbV90dHlfZHJpdmVyLT5tYWpvciwgZ3NtX3R0eV9kcml2ZXItPm1pbm9yX3N0YXJ0KTsKKwlwcl9kZWJ1ZygiZ3NtX2luaXQ6IGxvYWRlZCBhcyAlZCwlZC5cbiIsCisJCQlnc21fdHR5X2RyaXZlci0+bWFqb3IsIGdzbV90dHlfZHJpdmVyLT5taW5vcl9zdGFydCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI3NTIsMTAgKzI3OTMsMTAgQEAKIHsKIAlpbnQgc3RhdHVzID0gdHR5X3VucmVnaXN0ZXJfbGRpc2MoTl9HU00wNzEwKTsKIAlpZiAoc3RhdHVzICE9IDApCi0JCXByaW50ayhLRVJOX0VSUiAibl9nc206IGNhbid0IHVucmVnaXN0ZXIgbGluZSBkaXNjaXBsaW5lIChlcnIgPSAlZClcbiIsIHN0YXR1cyk7CisJCXByX2Vycigibl9nc206IGNhbid0IHVucmVnaXN0ZXIgbGluZSBkaXNjaXBsaW5lIChlcnIgPSAlZClcbiIsCisJCQkJCQkJCXN0YXR1cyk7CiAJdHR5X3VucmVnaXN0ZXJfZHJpdmVyKGdzbV90dHlfZHJpdmVyKTsKIAlwdXRfdHR5X2RyaXZlcihnc21fdHR5X2RyaXZlcik7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiZ3NtX2luaXQ6IHVubG9hZGVkLlxuIik7CiB9CiAKIG1vZHVsZV9pbml0KGdzbV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3R0eV9pby5jIGIvZHJpdmVycy90dHkvdHR5X2lvLmMKaW5kZXggMzU0ODBkZC4uNDY0ZDA5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvdHR5X2lvLmMKKysrIGIvZHJpdmVycy90dHkvdHR5X2lvLmMKQEAgLTI2MjcsNiArMjYyNywxMSBAQAogCQlyZXR1cm4gcHV0X3VzZXIodHR5LT5sZGlzYy0+b3BzLT5udW0sIChpbnQgX191c2VyICopcCk7CiAJY2FzZSBUSU9DU0VURDoKIAkJcmV0dXJuIHRpb2NzZXRkKHR0eSwgcCk7CisJY2FzZSBUSU9DR0RFVjoKKwl7CisJCXVuc2lnbmVkIGludCByZXQgPSBuZXdfZW5jb2RlX2Rldih0dHlfZGV2bnVtKHJlYWxfdHR5KSk7CisJCXJldHVybiBwdXRfdXNlcihyZXQsICh1bnNpZ25lZCBpbnQgX191c2VyICopcCk7CisJfQogCS8qCiAJICogQnJlYWsgaGFuZGxpbmcKIAkgKi8KQEAgLTMyNDEsOSArMzI0Niw0NSBAQAogcG9zdGNvcmVfaW5pdGNhbGwodHR5X2NsYXNzX2luaXQpOwogCiAvKiAzLzIwMDQgam1jOiB3aHkgZG8gdGhlc2UgZGV2aWNlcyBleGlzdD8gKi8KLQogc3RhdGljIHN0cnVjdCBjZGV2IHR0eV9jZGV2LCBjb25zb2xlX2NkZXY7CiAKK3N0YXRpYyBzc2l6ZV90IHNob3dfY29uc19hY3RpdmUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IGNvbnNvbGUgKmNzWzE2XTsKKwlpbnQgaSA9IDA7CisJc3RydWN0IGNvbnNvbGUgKmM7CisJc3NpemVfdCBjb3VudCA9IDA7CisKKwlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJZm9yIChjID0gY29uc29sZV9kcml2ZXJzOyBjOyBjID0gYy0+bmV4dCkgeworCQlpZiAoIWMtPmRldmljZSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIWMtPndyaXRlKQorCQkJY29udGludWU7CisJCWlmICgoYy0+ZmxhZ3MgJiBDT05fRU5BQkxFRCkgPT0gMCkKKwkJCWNvbnRpbnVlOworCQljc1tpKytdID0gYzsKKwkJaWYgKGkgPj0gQVJSQVlfU0laRShjcykpCisJCQlicmVhazsKKwl9CisJd2hpbGUgKGktLSkKKwkJY291bnQgKz0gc3ByaW50ZihidWYgKyBjb3VudCwgIiVzJWQlYyIsCisJCQkJIGNzW2ldLT5uYW1lLCBjc1tpXS0+aW5kZXgsIGkgPyAnICc6J1xuJyk7CisJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCisJcmV0dXJuIGNvdW50OworfQorc3RhdGljIERFVklDRV9BVFRSKGFjdGl2ZSwgU19JUlVHTywgc2hvd19jb25zX2FjdGl2ZSwgTlVMTCk7CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlICpjb25zZGV2OworCit2b2lkIGNvbnNvbGVfc3lzZnNfbm90aWZ5KHZvaWQpCit7CisJaWYgKGNvbnNkZXYpCisJCXN5c2ZzX25vdGlmeSgmY29uc2Rldi0+a29iaiwgTlVMTCwgImFjdGl2ZSIpOworfQorCiAvKgogICogT2ssIG5vdyB3ZSBjYW4gaW5pdGlhbGl6ZSB0aGUgcmVzdCBvZiB0aGUgdHR5IGRldmljZXMgYW5kIGNhbiBjb3VudAogICogb24gbWVtb3J5IGFsbG9jYXRpb25zLCBpbnRlcnJ1cHRzIGV0Yy4uCkBAIC0zMjU0LDE1ICszMjk1LDE4IEBACiAJaWYgKGNkZXZfYWRkKCZ0dHlfY2RldiwgTUtERVYoVFRZQVVYX01BSk9SLCAwKSwgMSkgfHwKIAkgICAgcmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihNS0RFVihUVFlBVVhfTUFKT1IsIDApLCAxLCAiL2Rldi90dHkiKSA8IDApCiAJCXBhbmljKCJDb3VsZG4ndCByZWdpc3RlciAvZGV2L3R0eSBkcml2ZXJcbiIpOwotCWRldmljZV9jcmVhdGUodHR5X2NsYXNzLCBOVUxMLCBNS0RFVihUVFlBVVhfTUFKT1IsIDApLCBOVUxMLAotCQkJICAgICAgInR0eSIpOworCWRldmljZV9jcmVhdGUodHR5X2NsYXNzLCBOVUxMLCBNS0RFVihUVFlBVVhfTUFKT1IsIDApLCBOVUxMLCAidHR5Iik7CiAKIAljZGV2X2luaXQoJmNvbnNvbGVfY2RldiwgJmNvbnNvbGVfZm9wcyk7CiAJaWYgKGNkZXZfYWRkKCZjb25zb2xlX2NkZXYsIE1LREVWKFRUWUFVWF9NQUpPUiwgMSksIDEpIHx8CiAJICAgIHJlZ2lzdGVyX2NocmRldl9yZWdpb24oTUtERVYoVFRZQVVYX01BSk9SLCAxKSwgMSwgIi9kZXYvY29uc29sZSIpIDwgMCkKIAkJcGFuaWMoIkNvdWxkbid0IHJlZ2lzdGVyIC9kZXYvY29uc29sZSBkcml2ZXJcbiIpOwotCWRldmljZV9jcmVhdGUodHR5X2NsYXNzLCBOVUxMLCBNS0RFVihUVFlBVVhfTUFKT1IsIDEpLCBOVUxMLAorCWNvbnNkZXYgPSBkZXZpY2VfY3JlYXRlKHR0eV9jbGFzcywgTlVMTCwgTUtERVYoVFRZQVVYX01BSk9SLCAxKSwgTlVMTCwKIAkJCSAgICAgICJjb25zb2xlIik7CisJaWYgKElTX0VSUihjb25zZGV2KSkKKwkJY29uc2RldiA9IE5VTEw7CisJZWxzZQorCQlkZXZpY2VfY3JlYXRlX2ZpbGUoY29uc2RldiwgJmRldl9hdHRyX2FjdGl2ZSk7CiAKICNpZmRlZiBDT05GSUdfVlQKIAl2dHlfaW5pdCgmY29uc29sZV9mb3BzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3Z0L3Z0LmMgYi9kcml2ZXJzL3R0eS92dC92dC5jCmluZGV4IGE4ZWM0OGUuLjc2NDA3ZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3Z0L3Z0LmMKKysrIGIvZHJpdmVycy90dHkvdnQvdnQuYwpAQCAtMjM2LDYgKzIzNiwxNCBAQAogfTsKIAogLyoKKyAqIC9zeXMvY2xhc3MvdHR5L3R0eTAvCisgKgorICogdGhlIGF0dHJpYnV0ZSAnYWN0aXZlJyBjb250YWlucyB0aGUgbmFtZSBvZiB0aGUgY3VycmVudCB2YworICogY29uc29sZSBhbmQgaXQgc3VwcG9ydHMgcG9sbCgpIHRvIGRldGVjdCB2YyBzd2l0Y2hlcworICovCitzdGF0aWMgc3RydWN0IGRldmljZSAqdHR5MGRldjsKKworLyoKICAqIE5vdGlmaWVyIGxpc3QgZm9yIGNvbnNvbGUgZXZlbnRzLgogICovCiBzdGF0aWMgQVRPTUlDX05PVElGSUVSX0hFQUQodnRfbm90aWZpZXJfbGlzdCk7CkBAIC02ODgsNiArNjk2LDggQEAKIAkJCXNhdmVfc2NyZWVuKG9sZF92Yyk7CiAJCQlzZXRfb3JpZ2luKG9sZF92Yyk7CiAJCX0KKwkJaWYgKHR0eTBkZXYpCisJCQlzeXNmc19ub3RpZnkoJnR0eTBkZXYtPmtvYmosIE5VTEwsICJhY3RpdmUiKTsKIAl9IGVsc2UgewogCQloaWRlX2N1cnNvcih2Yyk7CiAJCXJlZHJhdyA9IDE7CkBAIC0yOTY3LDEzICsyOTc3LDI0IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2RldiB2YzBfY2RldjsKIAorc3RhdGljIHNzaXplX3Qgc2hvd190dHlfYWN0aXZlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXJldHVybiBzcHJpbnRmKGJ1ZiwgInR0eSVkXG4iLCBmZ19jb25zb2xlICsgMSk7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIoYWN0aXZlLCBTX0lSVUdPLCBzaG93X3R0eV9hY3RpdmUsIE5VTEwpOworCiBpbnQgX19pbml0IHZ0eV9pbml0KGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmNvbnNvbGVfZm9wcykKIHsKIAljZGV2X2luaXQoJnZjMF9jZGV2LCBjb25zb2xlX2ZvcHMpOwogCWlmIChjZGV2X2FkZCgmdmMwX2NkZXYsIE1LREVWKFRUWV9NQUpPUiwgMCksIDEpIHx8CiAJICAgIHJlZ2lzdGVyX2NocmRldl9yZWdpb24oTUtERVYoVFRZX01BSk9SLCAwKSwgMSwgIi9kZXYvdmMvMCIpIDwgMCkKIAkJcGFuaWMoIkNvdWxkbid0IHJlZ2lzdGVyIC9kZXYvdHR5MCBkcml2ZXJcbiIpOwotCWRldmljZV9jcmVhdGUodHR5X2NsYXNzLCBOVUxMLCBNS0RFVihUVFlfTUFKT1IsIDApLCBOVUxMLCAidHR5MCIpOworCXR0eTBkZXYgPSBkZXZpY2VfY3JlYXRlKHR0eV9jbGFzcywgTlVMTCwgTUtERVYoVFRZX01BSk9SLCAwKSwgTlVMTCwgInR0eTAiKTsKKwlpZiAoSVNfRVJSKHR0eTBkZXYpKQorCQl0dHkwZGV2ID0gTlVMTDsKKwllbHNlCisJCWRldmljZV9jcmVhdGVfZmlsZSh0dHkwZGV2LCAmZGV2X2F0dHJfYWN0aXZlKTsKIAogCXZjc19pbml0KCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL0tjb25maWcgYi9kcml2ZXJzL3VzYi9LY29uZmlnCmluZGV4IDY3ZWIzNzcuLmZjZWVhNWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvS2NvbmZpZwpAQCAtNDEsMTcgKzQxLDE0IEBACiAJZGVmYXVsdCB5IGlmIE1GRF9UQzYzOTNYQgogCWRlZmF1bHQgeSBpZiBBUkNIX1c5MFg5MDAKIAlkZWZhdWx0IHkgaWYgQVJDSF9EQVZJTkNJX0RBOFhYCisJZGVmYXVsdCB5IGlmIEFSQ0hfQ05TM1hYWAorCWRlZmF1bHQgeSBpZiBQTEFUX1NQRUFSCiAJIyBQUEM6CiAJZGVmYXVsdCB5IGlmIFNUQjAzeHh4CiAJZGVmYXVsdCB5IGlmIFBQQ19NUEM1Mnh4CiAJIyBNSVBTOgogCWRlZmF1bHQgeSBpZiBNSVBTX0FMQ0hFTVkKIAlkZWZhdWx0IHkgaWYgTUFDSF9KWjQ3NDAKLQkjIFNIOgotCWRlZmF1bHQgeSBpZiBDUFVfU1VCVFlQRV9TSDc3MjAKLQlkZWZhdWx0IHkgaWYgQ1BVX1NVQlRZUEVfU0g3NzIxCi0JZGVmYXVsdCB5IGlmIENQVV9TVUJUWVBFX1NINzc2MwotCWRlZmF1bHQgeSBpZiBDUFVfU1VCVFlQRV9TSDc3ODYKIAkjIG1vcmU6CiAJZGVmYXVsdCBQQ0kKIApAQCAtNjYsNiArNjMsMTAgQEAKIAlkZWZhdWx0IHkgaWYgQVJDSF9BVDkxU0FNOUc0NQogCWRlZmF1bHQgeSBpZiBBUkNIX01YQwogCWRlZmF1bHQgeSBpZiBBUkNIX09NQVAzCisJZGVmYXVsdCB5IGlmIEFSQ0hfQ05TM1hYWAorCWRlZmF1bHQgeSBpZiBBUkNIX1ZUODUwMAorCWRlZmF1bHQgeSBpZiBQTEFUX1NQRUFSCisJZGVmYXVsdCB5IGlmIEFSQ0hfTVNNCiAJZGVmYXVsdCBQQ0kKIAogIyBBUk0gU0ExMTExIGNoaXBzIGhhdmUgYSBub24tUENJIGJhc2VkICJPSENJLWNvbXBhdGlibGUiIFVTQiBob3N0IGludGVyZmFjZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYyBiL2RyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYwppbmRleCBmMzgzY2I0Li5hODQ1ZjhiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMKKysrIGIvZHJpdmVycy91c2IvYXRtL2N4YWNydS5jCkBAIC0xMjQ3LDcgKzEyNDcsNyBAQAogCW11dGV4X3VubG9jaygmaW5zdGFuY2UtPnBvbGxfc3RhdGVfc2VyaWFsaXplKTsKIAogCWlmIChpc19wb2xsaW5nKQotCQljYW5jZWxfcmVhcm1pbmdfZGVsYXllZF93b3JrKCZpbnN0YW5jZS0+cG9sbF93b3JrKTsKKwkJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZpbnN0YW5jZS0+cG9sbF93b3JrKTsKIAogCXVzYl9raWxsX3VyYihpbnN0YW5jZS0+c25kX3VyYik7CiAJdXNiX2tpbGxfdXJiKGluc3RhbmNlLT5yY3ZfdXJiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2F0bS9zcGVlZHRjaC5jIGIvZHJpdmVycy91c2IvYXRtL3NwZWVkdGNoLmMKaW5kZXggNDcxNmU3MC4uMDg0MmNmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvYXRtL3NwZWVkdGNoLmMKKysrIGIvZHJpdmVycy91c2IvYXRtL3NwZWVkdGNoLmMKQEAgLTEzOSw3ICsxMzksOCBAQAogCiAJc3RydWN0IHNwZWVkdGNoX3BhcmFtcyBwYXJhbXM7IC8qIHNldCBpbiBwcm9iZSwgY29uc3RhbnQgYWZ0ZXJ3YXJkcyAqLwogCi0Jc3RydWN0IGRlbGF5ZWRfd29yayBzdGF0dXNfY2hlY2tlcjsKKwlzdHJ1Y3QgdGltZXJfbGlzdCBzdGF0dXNfY2hlY2tfdGltZXI7CisJc3RydWN0IHdvcmtfc3RydWN0IHN0YXR1c19jaGVja193b3JrOwogCiAJdW5zaWduZWQgY2hhciBsYXN0X3N0YXR1czsKIApAQCAtNDk4LDcgKzQ5OSw3IEBACiB7CiAJc3RydWN0IHNwZWVkdGNoX2luc3RhbmNlX2RhdGEgKmluc3RhbmNlID0KIAkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBzcGVlZHRjaF9pbnN0YW5jZV9kYXRhLAotCQkJICAgICBzdGF0dXNfY2hlY2tlci53b3JrKTsKKwkJCSAgICAgc3RhdHVzX2NoZWNrX3dvcmspOwogCXN0cnVjdCB1c2JhdG1fZGF0YSAqdXNiYXRtID0gaW5zdGFuY2UtPnVzYmF0bTsKIAlzdHJ1Y3QgYXRtX2RldiAqYXRtX2RldiA9IHVzYmF0bS0+YXRtX2RldjsKIAl1bnNpZ25lZCBjaGFyICpidWYgPSBpbnN0YW5jZS0+c2NyYXRjaF9idWZmZXI7CkBAIC01NzUsMTEgKzU3NiwxMSBAQAogewogCXN0cnVjdCBzcGVlZHRjaF9pbnN0YW5jZV9kYXRhICppbnN0YW5jZSA9ICh2b2lkICopZGF0YTsKIAotCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmaW5zdGFuY2UtPnN0YXR1c19jaGVja2VyLCAwKTsKKwlzY2hlZHVsZV93b3JrKCZpbnN0YW5jZS0+c3RhdHVzX2NoZWNrX3dvcmspOwogCiAJLyogVGhlIGZvbGxvd2luZyBjaGVjayBpcyByYWN5LCBidXQgdGhlIHJhY2UgaXMgaGFybWxlc3MgKi8KIAlpZiAoaW5zdGFuY2UtPnBvbGxfZGVsYXkgPCBNQVhfUE9MTF9ERUxBWSkKLQkJbW9kX3RpbWVyKCZpbnN0YW5jZS0+c3RhdHVzX2NoZWNrZXIudGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKGluc3RhbmNlLT5wb2xsX2RlbGF5KSk7CisJCW1vZF90aW1lcigmaW5zdGFuY2UtPnN0YXR1c19jaGVja190aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoaW5zdGFuY2UtPnBvbGxfZGVsYXkpKTsKIAllbHNlCiAJCWF0bV93YXJuKGluc3RhbmNlLT51c2JhdG0sICJUb28gbWFueSBmYWlsdXJlcyAtIGRpc2FibGluZyBsaW5lIHN0YXR1cyBwb2xsaW5nXG4iKTsKIH0KQEAgLTU5NSw3ICs1OTYsNyBAQAogCWlmIChpbnRfdXJiKSB7CiAJCXJldCA9IHVzYl9zdWJtaXRfdXJiKGludF91cmIsIEdGUF9BVE9NSUMpOwogCQlpZiAoIXJldCkKLQkJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmaW5zdGFuY2UtPnN0YXR1c19jaGVja2VyLCAwKTsKKwkJCXNjaGVkdWxlX3dvcmsoJmluc3RhbmNlLT5zdGF0dXNfY2hlY2tfd29yayk7CiAJCWVsc2UgewogCQkJYXRtX2RiZyhpbnN0YW5jZS0+dXNiYXRtLCAiJXM6IHVzYl9zdWJtaXRfdXJiIGZhaWxlZCB3aXRoIHJlc3VsdCAlZFxuIiwgX19mdW5jX18sIHJldCk7CiAJCQltb2RfdGltZXIoJmluc3RhbmNlLT5yZXN1Ym1pdF90aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoUkVTVUJNSVRfREVMQVkpKTsKQEAgLTYyNCw3ICs2MjUsNyBAQAogCX0KIAogCWlmICgoY291bnQgPT0gNikgJiYgIW1lbWNtcCh1cF9pbnQsIGluc3RhbmNlLT5pbnRfZGF0YSwgNikpIHsKLQkJZGVsX3RpbWVyKCZpbnN0YW5jZS0+c3RhdHVzX2NoZWNrZXIudGltZXIpOworCQlkZWxfdGltZXIoJmluc3RhbmNlLT5zdGF0dXNfY2hlY2tfdGltZXIpOwogCQlhdG1faW5mbyh1c2JhdG0sICJEU0wgbGluZSBnb2VzIHVwXG4iKTsKIAl9IGVsc2UgaWYgKChjb3VudCA9PSA2KSAmJiAhbWVtY21wKGRvd25faW50LCBpbnN0YW5jZS0+aW50X2RhdGEsIDYpKSB7CiAJCWF0bV9pbmZvKHVzYmF0bSwgIkRTTCBsaW5lIGdvZXMgZG93blxuIik7CkBAIC02NDAsNyArNjQxLDcgQEAKIAogCWlmICgoaW50X3VyYiA9IGluc3RhbmNlLT5pbnRfdXJiKSkgewogCQlyZXQgPSB1c2Jfc3VibWl0X3VyYihpbnRfdXJiLCBHRlBfQVRPTUlDKTsKLQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZpbnN0YW5jZS0+c3RhdHVzX2NoZWNrZXIsIDApOworCQlzY2hlZHVsZV93b3JrKCZpbnN0YW5jZS0+c3RhdHVzX2NoZWNrX3dvcmspOwogCQlpZiAocmV0IDwgMCkgewogCQkJYXRtX2RiZyh1c2JhdG0sICIlczogdXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggcmVzdWx0ICVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKIAkJCWdvdG8gZmFpbDsKQEAgLTY4Niw3ICs2ODcsNyBAQAogCX0KIAogCS8qIFN0YXJ0IHN0YXR1cyBwb2xsaW5nICovCi0JbW9kX3RpbWVyKCZpbnN0YW5jZS0+c3RhdHVzX2NoZWNrZXIudGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDEwMDApKTsKKwltb2RfdGltZXIoJmluc3RhbmNlLT5zdGF0dXNfY2hlY2tfdGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDEwMDApKTsKIAogCXJldHVybiAwOwogfQpAQCAtNjk4LDcgKzY5OSw3IEBACiAKIAlhdG1fZGJnKHVzYmF0bSwgIiVzIGVudGVyZWRcbiIsIF9fZnVuY19fKTsKIAotCWRlbF90aW1lcl9zeW5jKCZpbnN0YW5jZS0+c3RhdHVzX2NoZWNrZXIudGltZXIpOworCWRlbF90aW1lcl9zeW5jKCZpbnN0YW5jZS0+c3RhdHVzX2NoZWNrX3RpbWVyKTsKIAogCS8qCiAJICogU2luY2UgcmVzdWJtaXRfdGltZXIgYW5kIGludF91cmIgY2FuIHNjaGVkdWxlIHRoZW1zZWx2ZXMgYW5kCkBAIC03MTcsNyArNzE4LDcgQEAKIAlkZWxfdGltZXJfc3luYygmaW5zdGFuY2UtPnJlc3VibWl0X3RpbWVyKTsKIAl1c2JfZnJlZV91cmIoaW50X3VyYik7CiAKLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCWZsdXNoX3dvcmtfc3luYygmaW5zdGFuY2UtPnN0YXR1c19jaGVja193b3JrKTsKIH0KIAogc3RhdGljIGludCBzcGVlZHRjaF9wcmVfcmVzZXQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCkBAIC04NjksMTAgKzg3MCwxMSBAQAogCiAJdXNiYXRtLT5mbGFncyB8PSAodXNlX2lzb2MgPyBVRFNMX1VTRV9JU09DIDogMCk7CiAKLQlJTklUX0RFTEFZRURfV09SSygmaW5zdGFuY2UtPnN0YXR1c19jaGVja2VyLCBzcGVlZHRjaF9jaGVja19zdGF0dXMpOworCUlOSVRfV09SSygmaW5zdGFuY2UtPnN0YXR1c19jaGVja193b3JrLCBzcGVlZHRjaF9jaGVja19zdGF0dXMpOworCWluaXRfdGltZXIoJmluc3RhbmNlLT5zdGF0dXNfY2hlY2tfdGltZXIpOwogCi0JaW5zdGFuY2UtPnN0YXR1c19jaGVja2VyLnRpbWVyLmZ1bmN0aW9uID0gc3BlZWR0Y2hfc3RhdHVzX3BvbGw7Ci0JaW5zdGFuY2UtPnN0YXR1c19jaGVja2VyLnRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylpbnN0YW5jZTsKKwlpbnN0YW5jZS0+c3RhdHVzX2NoZWNrX3RpbWVyLmZ1bmN0aW9uID0gc3BlZWR0Y2hfc3RhdHVzX3BvbGw7CisJaW5zdGFuY2UtPnN0YXR1c19jaGVja190aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpaW5zdGFuY2U7CiAJaW5zdGFuY2UtPmxhc3Rfc3RhdHVzID0gMHhmZjsKIAlpbnN0YW5jZS0+cG9sbF9kZWxheSA9IE1JTl9QT0xMX0RFTEFZOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jIGIvZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYwppbmRleCBjMGU2MGZiLi5mY2E2MTcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmMKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxsaW51eC91c2IvcXVpcmtzLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL2hjZC5oPgotI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KIAogI2luY2x1ZGUgInVzYi5oIgogCkBAIC0zNzYsNyArMzc1LDcgQEAKIAkJICogSnVzdCByZS1lbmFibGUgaXQgd2l0aG91dCBhZmZlY3RpbmcgdGhlIGVuZHBvaW50IHRvZ2dsZXMuCiAJCSAqLwogCQl1c2JfZW5hYmxlX2ludGVyZmFjZSh1ZGV2LCBpbnRmLCBmYWxzZSk7Ci0JfSBlbHNlIGlmICghZXJyb3IgJiYgaW50Zi0+ZGV2LnBvd2VyLnN0YXR1cyA9PSBEUE1fT04pIHsKKwl9IGVsc2UgaWYgKCFlcnJvciAmJiAhaW50Zi0+ZGV2LnBvd2VyLmluX3N1c3BlbmQpIHsKIAkJciA9IHVzYl9zZXRfaW50ZXJmYWNlKHVkZXYsIGludGYtPmFsdHNldHRpbmdbMF0uCiAJCQkJZGVzYy5iSW50ZXJmYWNlTnVtYmVyLCAwKTsKIAkJaWYgKHIgPCAwKQpAQCAtOTYxLDcgKzk2MCw3IEBACiAJfQogCiAJLyogVHJ5IHRvIHJlYmluZCB0aGUgaW50ZXJmYWNlICovCi0JaWYgKGludGYtPmRldi5wb3dlci5zdGF0dXMgPT0gRFBNX09OKSB7CisJaWYgKCFpbnRmLT5kZXYucG93ZXIuaW5fc3VzcGVuZCkgewogCQlpbnRmLT5uZWVkc19iaW5kaW5nID0gMDsKIAkJcmMgPSBkZXZpY2VfYXR0YWNoKCZpbnRmLT5kZXYpOwogCQlpZiAocmMgPCAwKQpAQCAtMTEwOCw4ICsxMTA3LDcgQEAKIAlpZiAoaW50Zi0+Y29uZGl0aW9uID09IFVTQl9JTlRFUkZBQ0VfVU5CT1VORCkgewogCiAJCS8qIENhcnJ5IG91dCBhIGRlZmVycmVkIHN3aXRjaCB0byBhbHRzZXR0aW5nIDAgKi8KLQkJaWYgKGludGYtPm5lZWRzX2FsdHNldHRpbmcwICYmCi0JCQkJaW50Zi0+ZGV2LnBvd2VyLnN0YXR1cyA9PSBEUE1fT04pIHsKKwkJaWYgKGludGYtPm5lZWRzX2FsdHNldHRpbmcwICYmICFpbnRmLT5kZXYucG93ZXIuaW5fc3VzcGVuZCkgewogCQkJdXNiX3NldF9pbnRlcmZhY2UodWRldiwgaW50Zi0+YWx0c2V0dGluZ1swXS4KIAkJCQkJZGVzYy5iSW50ZXJmYWNlTnVtYmVyLCAwKTsKIAkJCWludGYtPm5lZWRzX2FsdHNldHRpbmcwID0gMDsKQEAgLTEyNjIsNiArMTI2MCw3IEBACiAJCQkJCXVkZXYtPnJlc2V0X3Jlc3VtZSk7CiAJCX0KIAl9CisJdXNiX21hcmtfbGFzdF9idXN5KHVkZXYpOwogCiAgZG9uZToKIAlkZXZfdmRiZygmdWRldi0+ZGV2LCAiJXM6IHN0YXR1cyAlZFxuIiwgX19mdW5jX18sIHN0YXR1cyk7CkBAIC0xMzI5LDcgKzEzMjgsNiBAQAogCQkJcG1fcnVudGltZV9kaXNhYmxlKGRldik7CiAJCQlwbV9ydW50aW1lX3NldF9hY3RpdmUoZGV2KTsKIAkJCXBtX3J1bnRpbWVfZW5hYmxlKGRldik7Ci0JCQl1ZGV2LT5sYXN0X2J1c3kgPSBqaWZmaWVzOwogCQkJZG9fdW5iaW5kX3JlYmluZCh1ZGV2LCBET19SRUJJTkQpOwogCQl9CiAJfQpAQCAtMTM5NywzMyArMTM5NSw4IEBACiB7CiAJaW50CXN0YXR1czsKIAotCXVkZXYtPmxhc3RfYnVzeSA9IGppZmZpZXM7Ci0Jc3RhdHVzID0gcG1fcnVudGltZV9wdXRfc3luYygmdWRldi0+ZGV2KTsKLQlkZXZfdmRiZygmdWRldi0+ZGV2LCAiJXM6IGNudCAlZCAtPiAlZFxuIiwKLQkJCV9fZnVuY19fLCBhdG9taWNfcmVhZCgmdWRldi0+ZGV2LnBvd2VyLnVzYWdlX2NvdW50KSwKLQkJCXN0YXR1cyk7Ci19Ci0KLS8qKgotICogdXNiX3RyeV9hdXRvc3VzcGVuZF9kZXZpY2UgLSBhdHRlbXB0IGFuIGF1dG9zdXNwZW5kIG9mIGEgVVNCIGRldmljZSBhbmQgaXRzIGludGVyZmFjZXMKLSAqIEB1ZGV2OiB0aGUgdXNiX2RldmljZSB0byBhdXRvc3VzcGVuZAotICoKLSAqIFRoaXMgcm91dGluZSBzaG91bGQgYmUgY2FsbGVkIHdoZW4gYSBjb3JlIHN1YnN5c3RlbSB0aGlua3MgQHVkZXYgbWF5Ci0gKiBiZSByZWFkeSB0byBhdXRvc3VzcGVuZC4KLSAqCi0gKiBAdWRldidzIHVzYWdlIGNvdW50ZXIgbGVmdCB1bmNoYW5nZWQuICBJZiBpdCBpcyAwIGFuZCBhbGwgdGhlIGludGVyZmFjZXMKLSAqIGFyZSBpbmFjdGl2ZSB0aGVuIGFuIGF1dG9zdXNwZW5kIHdpbGwgYmUgYXR0ZW1wdGVkLiAgVGhlIGF0dGVtcHQgbWF5Ci0gKiBmYWlsIG9yIGJlIGRlbGF5ZWQuCi0gKgotICogVGhlIGNhbGxlciBtdXN0IGhvbGQgQHVkZXYncyBkZXZpY2UgbG9jay4KLSAqCi0gKiBUaGlzIHJvdXRpbmUgY2FuIHJ1biBvbmx5IGluIHByb2Nlc3MgY29udGV4dC4KLSAqLwotdm9pZCB1c2JfdHJ5X2F1dG9zdXNwZW5kX2RldmljZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKLXsKLQlpbnQJc3RhdHVzOwotCi0Jc3RhdHVzID0gcG1fcnVudGltZV9pZGxlKCZ1ZGV2LT5kZXYpOworCXVzYl9tYXJrX2xhc3RfYnVzeSh1ZGV2KTsKKwlzdGF0dXMgPSBwbV9ydW50aW1lX3B1dF9zeW5jX2F1dG9zdXNwZW5kKCZ1ZGV2LT5kZXYpOwogCWRldl92ZGJnKCZ1ZGV2LT5kZXYsICIlczogY250ICVkIC0+ICVkXG4iLAogCQkJX19mdW5jX18sIGF0b21pY19yZWFkKCZ1ZGV2LT5kZXYucG93ZXIudXNhZ2VfY291bnQpLAogCQkJc3RhdHVzKTsKQEAgLTE0ODIsNyArMTQ1NSw3IEBACiAJc3RydWN0IHVzYl9kZXZpY2UJKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOwogCWludAkJCXN0YXR1czsKIAotCXVkZXYtPmxhc3RfYnVzeSA9IGppZmZpZXM7CisJdXNiX21hcmtfbGFzdF9idXN5KHVkZXYpOwogCWF0b21pY19kZWMoJmludGYtPnBtX3VzYWdlX2NudCk7CiAJc3RhdHVzID0gcG1fcnVudGltZV9wdXRfc3luYygmaW50Zi0+ZGV2KTsKIAlkZXZfdmRiZygmaW50Zi0+ZGV2LCAiJXM6IGNudCAlZCAtPiAlZFxuIiwKQEAgLTE1MDksMzIgKzE0ODIsMTEgQEAKIHZvaWQgdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlX2FzeW5jKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQogewogCXN0cnVjdCB1c2JfZGV2aWNlCSp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKLQl1bnNpZ25lZCBsb25nCQlsYXN0X2J1c3k7Ci0JaW50CQkJc3RhdHVzID0gMDsKKwlpbnQJCQlzdGF0dXM7CiAKLQlsYXN0X2J1c3kgPSB1ZGV2LT5sYXN0X2J1c3k7Ci0JdWRldi0+bGFzdF9idXN5ID0gamlmZmllczsKKwl1c2JfbWFya19sYXN0X2J1c3kodWRldik7CiAJYXRvbWljX2RlYygmaW50Zi0+cG1fdXNhZ2VfY250KTsKLQlwbV9ydW50aW1lX3B1dF9ub2lkbGUoJmludGYtPmRldik7Ci0KLQlpZiAodWRldi0+ZGV2LnBvd2VyLnJ1bnRpbWVfYXV0bykgewotCQkvKiBPcHRpbWl6YXRpb246IERvbid0IHNjaGVkdWxlIGEgZGVsYXllZCBhdXRvc3VzcGVuZCBpZgotCQkgKiB0aGUgdGltZXIgaXMgYWxyZWFkeSBydW5uaW5nIGFuZCB0aGUgZXhwaXJhdGlvbiB0aW1lCi0JCSAqIHdvdWxkbid0IGNoYW5nZS4KLQkJICoKLQkJICogV2UgaGF2ZSB0byB1c2UgdGhlIGludGVyZmFjZSdzIHRpbWVyLiAgQXR0ZW1wdHMgdG8KLQkJICogc2NoZWR1bGUgYSBzdXNwZW5kIGZvciB0aGUgZGV2aWNlIHdvdWxkIGZhaWwgYmVjYXVzZQotCQkgKiB0aGUgaW50ZXJmYWNlIGlzIHN0aWxsIGFjdGl2ZS4KLQkJICovCi0JCWlmIChpbnRmLT5kZXYucG93ZXIudGltZXJfZXhwaXJlcyA9PSAwIHx8Ci0JCQkJcm91bmRfamlmZmllc191cChsYXN0X2J1c3kpICE9Ci0JCQkJcm91bmRfamlmZmllc191cChqaWZmaWVzKSkgewotCQkJc3RhdHVzID0gcG1fc2NoZWR1bGVfc3VzcGVuZCgmaW50Zi0+ZGV2LAotCQkJCQlqaWZmaWVzX3RvX21zZWNzKAotCQkJCQlyb3VuZF9qaWZmaWVzX3VwX3JlbGF0aXZlKAotCQkJCQkJdWRldi0+YXV0b3N1c3BlbmRfZGVsYXkpKSk7Ci0JCX0KLQl9CisJc3RhdHVzID0gcG1fcnVudGltZV9wdXQoJmludGYtPmRldik7CiAJZGV2X3ZkYmcoJmludGYtPmRldiwgIiVzOiBjbnQgJWQgLT4gJWRcbiIsCiAJCQlfX2Z1bmNfXywgYXRvbWljX3JlYWQoJmludGYtPmRldi5wb3dlci51c2FnZV9jb3VudCksCiAJCQlzdGF0dXMpOwpAQCAtMTU1NCw3ICsxNTA2LDcgQEAKIHsKIAlzdHJ1Y3QgdXNiX2RldmljZQkqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CiAKLQl1ZGV2LT5sYXN0X2J1c3kgPSBqaWZmaWVzOworCXVzYl9tYXJrX2xhc3RfYnVzeSh1ZGV2KTsKIAlhdG9taWNfZGVjKCZpbnRmLT5wbV91c2FnZV9jbnQpOwogCXBtX3J1bnRpbWVfcHV0X25vaWRsZSgmaW50Zi0+ZGV2KTsKIH0KQEAgLTE2MTIsMTggKzE1NjQsOSBAQAogICovCiBpbnQgdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlX2FzeW5jKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQogewotCWludAkJc3RhdHVzID0gMDsKLQllbnVtIHJwbV9zdGF0dXMJczsKKwlpbnQJc3RhdHVzOwogCi0JLyogRG9uJ3QgcmVxdWVzdCBhIHJlc3VtZSB1bmxlc3MgdGhlIGludGVyZmFjZSBpcyBhbHJlYWR5IHN1c3BlbmRpbmcKLQkgKiBvciBzdXNwZW5kZWQuICBEb2luZyBzbyB3b3VsZCBmb3JjZSBhIHJ1bm5pbmcgc3VzcGVuZCB0aW1lciB0byBiZQotCSAqIGNhbmNlbGxlZC4KLQkgKi8KLQlwbV9ydW50aW1lX2dldF9ub3Jlc3VtZSgmaW50Zi0+ZGV2KTsKLQlzID0gQUNDRVNTX09OQ0UoaW50Zi0+ZGV2LnBvd2VyLnJ1bnRpbWVfc3RhdHVzKTsKLQlpZiAocyA9PSBSUE1fU1VTUEVORElORyB8fCBzID09IFJQTV9TVVNQRU5ERUQpCi0JCXN0YXR1cyA9IHBtX3JlcXVlc3RfcmVzdW1lKCZpbnRmLT5kZXYpOwotCisJc3RhdHVzID0gcG1fcnVudGltZV9nZXQoJmludGYtPmRldik7CiAJaWYgKHN0YXR1cyA8IDAgJiYgc3RhdHVzICE9IC1FSU5QUk9HUkVTUykKIAkJcG1fcnVudGltZV9wdXRfbm9pZGxlKCZpbnRmLT5kZXYpOwogCWVsc2UKQEAgLTE2NTAsNyArMTU5Myw3IEBACiB7CiAJc3RydWN0IHVzYl9kZXZpY2UJKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOwogCi0JdWRldi0+bGFzdF9idXN5ID0gamlmZmllczsKKwl1c2JfbWFya19sYXN0X2J1c3kodWRldik7CiAJYXRvbWljX2luYygmaW50Zi0+cG1fdXNhZ2VfY250KTsKIAlwbV9ydW50aW1lX2dldF9ub3Jlc3VtZSgmaW50Zi0+ZGV2KTsKIH0KQEAgLTE2NjEsNyArMTYwNCw2IEBACiB7CiAJaW50CQkJdywgaTsKIAlzdHJ1Y3QgdXNiX2ludGVyZmFjZQkqaW50ZjsKLQl1bnNpZ25lZCBsb25nCQlzdXNwZW5kX3RpbWUsIGo7CiAKIAkvKiBGYWlsIGlmIGF1dG9zdXNwZW5kIGlzIGRpc2FibGVkLCBvciBhbnkgaW50ZXJmYWNlcyBhcmUgaW4gdXNlLCBvcgogCSAqIGFueSBpbnRlcmZhY2UgZHJpdmVycyByZXF1aXJlIHJlbW90ZSB3YWtldXAgYnV0IGl0IGlzbid0IGF2YWlsYWJsZS4KQEAgLTE3MDEsODcgKzE2NDMsNDYgQEAKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KIAl1ZGV2LT5kb19yZW1vdGVfd2FrZXVwID0gdzsKLQotCS8qIElmIGV2ZXJ5dGhpbmcgaXMgb2theSBidXQgdGhlIGRldmljZSBoYXNuJ3QgYmVlbiBpZGxlIGZvciBsb25nCi0JICogZW5vdWdoLCBxdWV1ZSBhIGRlbGF5ZWQgYXV0b3N1c3BlbmQgcmVxdWVzdC4KLQkgKi8KLQlqID0gQUNDRVNTX09OQ0UoamlmZmllcyk7Ci0Jc3VzcGVuZF90aW1lID0gdWRldi0+bGFzdF9idXN5ICsgdWRldi0+YXV0b3N1c3BlbmRfZGVsYXk7Ci0JaWYgKHRpbWVfYmVmb3JlKGosIHN1c3BlbmRfdGltZSkpIHsKLQkJcG1fc2NoZWR1bGVfc3VzcGVuZCgmdWRldi0+ZGV2LCBqaWZmaWVzX3RvX21zZWNzKAotCQkJCXJvdW5kX2ppZmZpZXNfdXBfcmVsYXRpdmUoc3VzcGVuZF90aW1lIC0gaikpKTsKLQkJcmV0dXJuIC1FQUdBSU47Ci0JfQogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHVzYl9ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewotCWludAlzdGF0dXMgPSAwOworCXN0cnVjdCB1c2JfZGV2aWNlCSp1ZGV2ID0gdG9fdXNiX2RldmljZShkZXYpOworCWludAkJCXN0YXR1czsKIAogCS8qIEEgVVNCIGRldmljZSBjYW4gYmUgc3VzcGVuZGVkIGlmIGl0IHBhc3NlcyB0aGUgdmFyaW91cyBhdXRvc3VzcGVuZAogCSAqIGNoZWNrcy4gIFJ1bnRpbWUgc3VzcGVuZCBmb3IgYSBVU0IgZGV2aWNlIG1lYW5zIHN1c3BlbmRpbmcgYWxsIHRoZQogCSAqIGludGVyZmFjZXMgYW5kIHRoZW4gdGhlIGRldmljZSBpdHNlbGYuCiAJICovCi0JaWYgKGlzX3VzYl9kZXZpY2UoZGV2KSkgewotCQlzdHJ1Y3QgdXNiX2RldmljZQkqdWRldiA9IHRvX3VzYl9kZXZpY2UoZGV2KTsKKwlpZiAoYXV0b3N1c3BlbmRfY2hlY2sodWRldikgIT0gMCkKKwkJcmV0dXJuIC1FQUdBSU47CiAKLQkJaWYgKGF1dG9zdXNwZW5kX2NoZWNrKHVkZXYpICE9IDApCi0JCQlyZXR1cm4gLUVBR0FJTjsKLQotCQlzdGF0dXMgPSB1c2Jfc3VzcGVuZF9ib3RoKHVkZXYsIFBNU0dfQVVUT19TVVNQRU5EKTsKLQotCQkvKiBJZiBhbiBpbnRlcmZhY2UgZmFpbHMgdGhlIHN1c3BlbmQsIGFkanVzdCB0aGUgbGFzdF9idXN5Ci0JCSAqIHRpbWUgc28gdGhhdCB3ZSBkb24ndCBnZXQgYW5vdGhlciBzdXNwZW5kIGF0dGVtcHQgcmlnaHQKLQkJICogYXdheS4KLQkJICovCi0JCWlmIChzdGF0dXMpIHsKLQkJCXVkZXYtPmxhc3RfYnVzeSA9IGppZmZpZXMgKwotCQkJCQkodWRldi0+YXV0b3N1c3BlbmRfZGVsYXkgPT0gMCA/Ci0JCQkJCQlIWi8yIDogMCk7Ci0JCX0KLQotCQkvKiBQcmV2ZW50IHRoZSBwYXJlbnQgZnJvbSBzdXNwZW5kaW5nIGltbWVkaWF0ZWx5IGFmdGVyICovCi0JCWVsc2UgaWYgKHVkZXYtPnBhcmVudCkKLQkJCXVkZXYtPnBhcmVudC0+bGFzdF9idXN5ID0gamlmZmllczsKLQl9Ci0KLQkvKiBSdW50aW1lIHN1c3BlbmQgZm9yIGEgVVNCIGludGVyZmFjZSBkb2Vzbid0IG1lYW4gYW55dGhpbmcuICovCisJc3RhdHVzID0gdXNiX3N1c3BlbmRfYm90aCh1ZGV2LCBQTVNHX0FVVE9fU1VTUEVORCk7CiAJcmV0dXJuIHN0YXR1czsKIH0KIAogc3RhdGljIGludCB1c2JfcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogeworCXN0cnVjdCB1c2JfZGV2aWNlCSp1ZGV2ID0gdG9fdXNiX2RldmljZShkZXYpOworCWludAkJCXN0YXR1czsKKwogCS8qIFJ1bnRpbWUgcmVzdW1lIGZvciBhIFVTQiBkZXZpY2UgbWVhbnMgcmVzdW1pbmcgYm90aCB0aGUgZGV2aWNlCiAJICogYW5kIGFsbCBpdHMgaW50ZXJmYWNlcy4KIAkgKi8KLQlpZiAoaXNfdXNiX2RldmljZShkZXYpKSB7Ci0JCXN0cnVjdCB1c2JfZGV2aWNlCSp1ZGV2ID0gdG9fdXNiX2RldmljZShkZXYpOwotCQlpbnQJCQlzdGF0dXM7Ci0KLQkJc3RhdHVzID0gdXNiX3Jlc3VtZV9ib3RoKHVkZXYsIFBNU0dfQVVUT19SRVNVTUUpOwotCQl1ZGV2LT5sYXN0X2J1c3kgPSBqaWZmaWVzOwotCQlyZXR1cm4gc3RhdHVzOwotCX0KLQotCS8qIFJ1bnRpbWUgcmVzdW1lIGZvciBhIFVTQiBpbnRlcmZhY2UgZG9lc24ndCBtZWFuIGFueXRoaW5nLiAqLwotCXJldHVybiAwOworCXN0YXR1cyA9IHVzYl9yZXN1bWVfYm90aCh1ZGV2LCBQTVNHX0FVVE9fUkVTVU1FKTsKKwlyZXR1cm4gc3RhdHVzOwogfQogCiBzdGF0aWMgaW50IHVzYl9ydW50aW1lX2lkbGUoc3RydWN0IGRldmljZSAqZGV2KQogeworCXN0cnVjdCB1c2JfZGV2aWNlCSp1ZGV2ID0gdG9fdXNiX2RldmljZShkZXYpOworCiAJLyogQW4gaWRsZSBVU0IgZGV2aWNlIGNhbiBiZSBzdXNwZW5kZWQgaWYgaXQgcGFzc2VzIHRoZSB2YXJpb3VzCi0JICogYXV0b3N1c3BlbmQgY2hlY2tzLiAgQW4gaWRsZSBpbnRlcmZhY2UgY2FuIGJlIHN1c3BlbmRlZCBhdAotCSAqIGFueSB0aW1lLgorCSAqIGF1dG9zdXNwZW5kIGNoZWNrcy4KIAkgKi8KLQlpZiAoaXNfdXNiX2RldmljZShkZXYpKSB7Ci0JCXN0cnVjdCB1c2JfZGV2aWNlCSp1ZGV2ID0gdG9fdXNiX2RldmljZShkZXYpOwotCi0JCWlmIChhdXRvc3VzcGVuZF9jaGVjayh1ZGV2KSAhPSAwKQotCQkJcmV0dXJuIDA7Ci0JfQotCi0JcG1fcnVudGltZV9zdXNwZW5kKGRldik7CisJaWYgKGF1dG9zdXNwZW5kX2NoZWNrKHVkZXYpID09IDApCisJCXBtX3J1bnRpbWVfYXV0b3N1c3BlbmQoZGV2KTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9oY2QtcGNpLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2hjZC1wY2kuYwppbmRleCAzNzk5NTczLi5iNTVkNDYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2hjZC1wY2kuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2hjZC1wY2kuYwpAQCAtMTksNyArMTksNiBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxsaW51eC91c2IvaGNkLmg+CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2hjZC5jCmluZGV4IGNlZDg0NmEuLjZhOTUwMTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9oY2QuYwpAQCAtMzgsNyArMzgsNiBAQAogI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KLSNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CiAKICNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxsaW51eC91c2IvaGNkLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jIGIvZHJpdmVycy91c2IvY29yZS9odWIuYwppbmRleCAyNzExNWI0Li5iOThlZmFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMKQEAgLTI0LDcgKzI0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9mcmVlemVyLmg+Ci0jaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CkBAIC0xODA0LDggKzE4MDMsMTUgQEAKIAogCS8qIFRlbGwgdGhlIHJ1bnRpbWUtUE0gZnJhbWV3b3JrIHRoZSBkZXZpY2UgaXMgYWN0aXZlICovCiAJcG1fcnVudGltZV9zZXRfYWN0aXZlKCZ1ZGV2LT5kZXYpOworCXBtX3J1bnRpbWVfZ2V0X25vcmVzdW1lKCZ1ZGV2LT5kZXYpOworCXBtX3J1bnRpbWVfdXNlX2F1dG9zdXNwZW5kKCZ1ZGV2LT5kZXYpOwogCXBtX3J1bnRpbWVfZW5hYmxlKCZ1ZGV2LT5kZXYpOwogCisJLyogQnkgZGVmYXVsdCwgZm9yYmlkIGF1dG9zdXNwZW5kIGZvciBhbGwgZGV2aWNlcy4gIEl0IHdpbGwgYmUKKwkgKiBhbGxvd2VkIGZvciBodWJzIGR1cmluZyBiaW5kaW5nLgorCSAqLworCXVzYl9kaXNhYmxlX2F1dG9zdXNwZW5kKHVkZXYpOworCiAJZXJyID0gdXNiX2VudW1lcmF0ZV9kZXZpY2UodWRldik7CS8qIFJlYWQgZGVzY3JpcHRvcnMgKi8KIAlpZiAoZXJyIDwgMCkKIAkJZ290byBmYWlsOwpAQCAtMTgzMSw2ICsxODM3LDggQEAKIAl9CiAKIAkodm9pZCkgdXNiX2NyZWF0ZV9lcF9kZXZzKCZ1ZGV2LT5kZXYsICZ1ZGV2LT5lcDAsIHVkZXYpOworCXVzYl9tYXJrX2xhc3RfYnVzeSh1ZGV2KTsKKwlwbV9ydW50aW1lX3B1dF9zeW5jX2F1dG9zdXNwZW5kKCZ1ZGV2LT5kZXYpOwogCXJldHVybiBlcnI7CiAKIGZhaWw6CkBAIC0yMjIxLDYgKzIyMjksNyBAQAogCQl1c2Jfc2V0X2RldmljZV9zdGF0ZSh1ZGV2LCBVU0JfU1RBVEVfU1VTUEVOREVEKTsKIAkJbXNsZWVwKDEwKTsKIAl9CisJdXNiX21hcmtfbGFzdF9idXN5KGh1Yi0+aGRldik7CiAJcmV0dXJuIHN0YXR1czsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9pbm9kZS5jIGIvZHJpdmVycy91c2IvY29yZS9pbm9kZS5jCmluZGV4IGI2OTBhYTMuLjFiMTI1YzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvaW5vZGUuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2lub2RlLmMKQEAgLTM0MywxNyArMzQzLDE5IEBACiB7CiAJc3RydWN0IGxpc3RfaGVhZCAqbGlzdDsKIAotCXNwaW5fbG9jaygmZGNhY2hlX2xvY2spOwotCisJc3Bpbl9sb2NrKCZkZW50cnktPmRfbG9jayk7CiAJbGlzdF9mb3JfZWFjaChsaXN0LCAmZGVudHJ5LT5kX3N1YmRpcnMpIHsKIAkJc3RydWN0IGRlbnRyeSAqZGUgPSBsaXN0X2VudHJ5KGxpc3QsIHN0cnVjdCBkZW50cnksIGRfdS5kX2NoaWxkKTsKKworCQlzcGluX2xvY2tfbmVzdGVkKCZkZS0+ZF9sb2NrLCBERU5UUllfRF9MT0NLX05FU1RFRCk7CiAJCWlmICh1c2Jmc19wb3NpdGl2ZShkZSkpIHsKLQkJCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7CisJCQlzcGluX3VubG9jaygmZGUtPmRfbG9jayk7CisJCQlzcGluX3VubG9jaygmZGVudHJ5LT5kX2xvY2spOwogCQkJcmV0dXJuIDA7CiAJCX0KKwkJc3Bpbl91bmxvY2soJmRlLT5kX2xvY2spOwogCX0KLQotCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7CisJc3Bpbl91bmxvY2soJmRlbnRyeS0+ZF9sb2NrKTsKIAlyZXR1cm4gMTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmMgYi9kcml2ZXJzL3VzYi9jb3JlL21lc3NhZ2UuYwppbmRleCBkNmUzZTQxLi44MzI0ODc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL21lc3NhZ2UuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL21lc3NhZ2UuYwpAQCAtMTgwNCw2ICsxODA0LDcgQEAKIAkJSU5JVF9XT1JLKCZpbnRmLT5yZXNldF93cywgX191c2JfcXVldWVfcmVzZXRfZGV2aWNlKTsKIAkJaW50Zi0+bWlub3IgPSAtMTsKIAkJZGV2aWNlX2luaXRpYWxpemUoJmludGYtPmRldik7CisJCXBtX3J1bnRpbWVfbm9fY2FsbGJhY2tzKCZpbnRmLT5kZXYpOwogCQlkZXZfc2V0X25hbWUoJmludGYtPmRldiwgIiVkLSVzOiVkLiVkIiwKIAkJCWRldi0+YnVzLT5idXNudW0sIGRldi0+ZGV2cGF0aCwKIAkJCWNvbmZpZ3VyYXRpb24sIGFsdC0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvcXVpcmtzLmMgYi9kcml2ZXJzL3VzYi9jb3JlL3F1aXJrcy5jCmluZGV4IDI1NzE5ZGEuLjQ0YzU5NTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvcXVpcmtzLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9xdWlya3MuYwpAQCAtMTE3LDIxICsxMTcsNiBAQAogCQlkZXZfZGJnKCZ1ZGV2LT5kZXYsICJVU0IgcXVpcmtzIGZvciB0aGlzIGRldmljZTogJXhcbiIsCiAJCQkJdWRldi0+cXVpcmtzKTsKIAotI2lmZGVmCUNPTkZJR19VU0JfU1VTUEVORAotCi0JLyogQnkgZGVmYXVsdCwgZGlzYWJsZSBhdXRvc3VzcGVuZCBmb3IgYWxsIGRldmljZXMuICBUaGUgaHViIGRyaXZlcgotCSAqIHdpbGwgZW5hYmxlIGl0IGZvciBodWJzLgotCSAqLwotCXVzYl9kaXNhYmxlX2F1dG9zdXNwZW5kKHVkZXYpOwotCi0JLyogQXV0b3N1c3BlbmQgY2FuIGFsc28gYmUgZGlzYWJsZWQgaWYgdGhlIGluaXRpYWwgYXV0b3N1c3BlbmRfZGVsYXkKLQkgKiBpcyBuZWdhdGl2ZS4KLQkgKi8KLQlpZiAodWRldi0+YXV0b3N1c3BlbmRfZGVsYXkgPCAwKQotCQl1c2JfYXV0b3Jlc3VtZV9kZXZpY2UodWRldik7Ci0KLSNlbmRpZgotCiAJLyogRm9yIHRoZSBwcmVzZW50LCBhbGwgZGV2aWNlcyBkZWZhdWx0IHRvIFVTQi1QRVJTSVNUIGVuYWJsZWQgKi8KICNpZiAwCQkvKiB3YXM6ICNpZmRlZiBDT05GSUdfUE0gKi8KIAkvKiBIdWJzIGFyZSBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgZm9yIFVTQi1QRVJTSVNUICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL3N5c2ZzLmMgYi9kcml2ZXJzL3VzYi9jb3JlL3N5c2ZzLmMKaW5kZXggNDQ4ZjViNC4uNjc4MWMzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9zeXNmcy5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvc3lzZnMuYwpAQCAtMjMzLDggKzIzMyw2IEBACiAKICNpZmRlZglDT05GSUdfUE0KIAotc3RhdGljIGNvbnN0IGNoYXIgcG93ZXJfZ3JvdXBbXSA9ICJwb3dlciI7Ci0KIHN0YXRpYyBzc2l6ZV90CiBzaG93X3BlcnNpc3Qoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewpAQCAtMjc4LDcgKzI3Niw3IEBACiAJCWlmICh1ZGV2LT5kZXNjcmlwdG9yLmJEZXZpY2VDbGFzcyAhPSBVU0JfQ0xBU1NfSFVCKQogCQkJcmMgPSBzeXNmc19hZGRfZmlsZV90b19ncm91cCgmZGV2LT5rb2JqLAogCQkJCQkmZGV2X2F0dHJfcGVyc2lzdC5hdHRyLAotCQkJCQlwb3dlcl9ncm91cCk7CisJCQkJCXBvd2VyX2dyb3VwX25hbWUpOwogCX0KIAlyZXR1cm4gcmM7CiB9CkBAIC0yODcsNyArMjg1LDcgQEAKIHsKIAlzeXNmc19yZW1vdmVfZmlsZV9mcm9tX2dyb3VwKCZkZXYtPmtvYmosCiAJCQkmZGV2X2F0dHJfcGVyc2lzdC5hdHRyLAotCQkJcG93ZXJfZ3JvdXApOworCQkJcG93ZXJfZ3JvdXBfbmFtZSk7CiB9CiAjZWxzZQogCkBAIC0zMzYsNDQgKzMzNCwyMCBAQAogc3RhdGljIHNzaXplX3QKIHNob3dfYXV0b3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gdG9fdXNiX2RldmljZShkZXYpOwotCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHVkZXYtPmF1dG9zdXNwZW5kX2RlbGF5IC8gSFopOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBkZXYtPnBvd2VyLmF1dG9zdXNwZW5kX2RlbGF5IC8gMTAwMCk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90CiBzZXRfYXV0b3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSB0b191c2JfZGV2aWNlKGRldik7Ci0JaW50IHZhbHVlLCBvbGRfZGVsYXk7Ci0JaW50IHJjOworCWludCB2YWx1ZTsKIAotCWlmIChzc2NhbmYoYnVmLCAiJWQiLCAmdmFsdWUpICE9IDEgfHwgdmFsdWUgPj0gSU5UX01BWC9IWiB8fAotCQkJdmFsdWUgPD0gLSBJTlRfTUFYL0haKQorCWlmIChzc2NhbmYoYnVmLCAiJWQiLCAmdmFsdWUpICE9IDEgfHwgdmFsdWUgPj0gSU5UX01BWC8xMDAwIHx8CisJCQl2YWx1ZSA8PSAtSU5UX01BWC8xMDAwKQogCQlyZXR1cm4gLUVJTlZBTDsKLQl2YWx1ZSAqPSBIWjsKIAotCXVzYl9sb2NrX2RldmljZSh1ZGV2KTsKLQlvbGRfZGVsYXkgPSB1ZGV2LT5hdXRvc3VzcGVuZF9kZWxheTsKLQl1ZGV2LT5hdXRvc3VzcGVuZF9kZWxheSA9IHZhbHVlOwotCi0JaWYgKG9sZF9kZWxheSA8IDApIHsJLyogQXV0b3N1c3BlbmQgd2Fzbid0IGFsbG93ZWQgKi8KLQkJaWYgKHZhbHVlID49IDApCi0JCQl1c2JfYXV0b3N1c3BlbmRfZGV2aWNlKHVkZXYpOwotCX0gZWxzZSB7CQkvKiBBdXRvc3VzcGVuZCB3YXMgYWxsb3dlZCAqLwotCQlpZiAodmFsdWUgPCAwKSB7Ci0JCQlyYyA9IHVzYl9hdXRvcmVzdW1lX2RldmljZSh1ZGV2KTsKLQkJCWlmIChyYyA8IDApIHsKLQkJCQljb3VudCA9IHJjOwotCQkJCXVkZXYtPmF1dG9zdXNwZW5kX2RlbGF5ID0gb2xkX2RlbGF5OwotCQkJfQotCQl9IGVsc2UgewotCQkJdXNiX3RyeV9hdXRvc3VzcGVuZF9kZXZpY2UodWRldik7Ci0JCX0KLQl9Ci0KLQl1c2JfdW5sb2NrX2RldmljZSh1ZGV2KTsKKwlwbV9ydW50aW1lX3NldF9hdXRvc3VzcGVuZF9kZWxheShkZXYsIHZhbHVlICogMTAwMCk7CiAJcmV0dXJuIGNvdW50OwogfQogCkBAIC00MzgsNDQgKzQxMiwzMCBAQAogCiBzdGF0aWMgREVWSUNFX0FUVFIobGV2ZWwsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X2xldmVsLCBzZXRfbGV2ZWwpOwogCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqcG93ZXJfYXR0cnNbXSA9IHsKKwkmZGV2X2F0dHJfYXV0b3N1c3BlbmQuYXR0ciwKKwkmZGV2X2F0dHJfbGV2ZWwuYXR0ciwKKwkmZGV2X2F0dHJfY29ubmVjdGVkX2R1cmF0aW9uLmF0dHIsCisJJmRldl9hdHRyX2FjdGl2ZV9kdXJhdGlvbi5hdHRyLAorCU5VTEwsCit9Oworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgcG93ZXJfYXR0cl9ncm91cCA9IHsKKwkubmFtZQk9IHBvd2VyX2dyb3VwX25hbWUsCisJLmF0dHJzCT0gcG93ZXJfYXR0cnMsCit9OworCiBzdGF0aWMgaW50IGFkZF9wb3dlcl9hdHRyaWJ1dGVzKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlpbnQgcmMgPSAwOwogCi0JaWYgKGlzX3VzYl9kZXZpY2UoZGV2KSkgewotCQlyYyA9IHN5c2ZzX2FkZF9maWxlX3RvX2dyb3VwKCZkZXYtPmtvYmosCi0JCQkJJmRldl9hdHRyX2F1dG9zdXNwZW5kLmF0dHIsCi0JCQkJcG93ZXJfZ3JvdXApOwotCQlpZiAocmMgPT0gMCkKLQkJCXJjID0gc3lzZnNfYWRkX2ZpbGVfdG9fZ3JvdXAoJmRldi0+a29iaiwKLQkJCQkJJmRldl9hdHRyX2xldmVsLmF0dHIsCi0JCQkJCXBvd2VyX2dyb3VwKTsKLQkJaWYgKHJjID09IDApCi0JCQlyYyA9IHN5c2ZzX2FkZF9maWxlX3RvX2dyb3VwKCZkZXYtPmtvYmosCi0JCQkJCSZkZXZfYXR0cl9jb25uZWN0ZWRfZHVyYXRpb24uYXR0ciwKLQkJCQkJcG93ZXJfZ3JvdXApOwotCQlpZiAocmMgPT0gMCkKLQkJCXJjID0gc3lzZnNfYWRkX2ZpbGVfdG9fZ3JvdXAoJmRldi0+a29iaiwKLQkJCQkJJmRldl9hdHRyX2FjdGl2ZV9kdXJhdGlvbi5hdHRyLAotCQkJCQlwb3dlcl9ncm91cCk7Ci0JfQorCWlmIChpc191c2JfZGV2aWNlKGRldikpCisJCXJjID0gc3lzZnNfbWVyZ2VfZ3JvdXAoJmRldi0+a29iaiwgJnBvd2VyX2F0dHJfZ3JvdXApOwogCXJldHVybiByYzsKIH0KIAogc3RhdGljIHZvaWQgcmVtb3ZlX3Bvd2VyX2F0dHJpYnV0ZXMoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN5c2ZzX3JlbW92ZV9maWxlX2Zyb21fZ3JvdXAoJmRldi0+a29iaiwKLQkJCSZkZXZfYXR0cl9hY3RpdmVfZHVyYXRpb24uYXR0ciwKLQkJCXBvd2VyX2dyb3VwKTsKLQlzeXNmc19yZW1vdmVfZmlsZV9mcm9tX2dyb3VwKCZkZXYtPmtvYmosCi0JCQkmZGV2X2F0dHJfY29ubmVjdGVkX2R1cmF0aW9uLmF0dHIsCi0JCQlwb3dlcl9ncm91cCk7Ci0Jc3lzZnNfcmVtb3ZlX2ZpbGVfZnJvbV9ncm91cCgmZGV2LT5rb2JqLAotCQkJJmRldl9hdHRyX2xldmVsLmF0dHIsCi0JCQlwb3dlcl9ncm91cCk7Ci0Jc3lzZnNfcmVtb3ZlX2ZpbGVfZnJvbV9ncm91cCgmZGV2LT5rb2JqLAotCQkJJmRldl9hdHRyX2F1dG9zdXNwZW5kLmF0dHIsCi0JCQlwb3dlcl9ncm91cCk7CisJc3lzZnNfdW5tZXJnZV9ncm91cCgmZGV2LT5rb2JqLCAmcG93ZXJfYXR0cl9ncm91cCk7CiB9CiAKICNlbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL3VzYi5jIGIvZHJpdmVycy91c2IvY29yZS91c2IuYwppbmRleCBmZGQ0MTMwLi4wNzljYjU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL3VzYi5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvdXNiLmMKQEAgLTQ0NSw3ICs0NDUsOCBAQAogCUlOSVRfTElTVF9IRUFEKCZkZXYtPmZpbGVsaXN0KTsKIAogI2lmZGVmCUNPTkZJR19QTQotCWRldi0+YXV0b3N1c3BlbmRfZGVsYXkgPSB1c2JfYXV0b3N1c3BlbmRfZGVsYXkgKiBIWjsKKwlwbV9ydW50aW1lX3NldF9hdXRvc3VzcGVuZF9kZWxheSgmZGV2LT5kZXYsCisJCQl1c2JfYXV0b3N1c3BlbmRfZGVsYXkgKiAxMDAwKTsKIAlkZXYtPmNvbm5lY3RfdGltZSA9IGppZmZpZXM7CiAJZGV2LT5hY3RpdmVfZHVyYXRpb24gPSAtamlmZmllczsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS91c2IuaCBiL2RyaXZlcnMvdXNiL2NvcmUvdXNiLmgKaW5kZXggY2Q4ODIyMC4uYjk3NTQ1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS91c2IuaAorKysgYi9kcml2ZXJzL3VzYi9jb3JlL3VzYi5oCkBAIC03NSwxNCArNzUsMTIgQEAKICNpZmRlZiBDT05GSUdfVVNCX1NVU1BFTkQKIAogZXh0ZXJuIHZvaWQgdXNiX2F1dG9zdXNwZW5kX2RldmljZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldik7Ci1leHRlcm4gdm9pZCB1c2JfdHJ5X2F1dG9zdXNwZW5kX2RldmljZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldik7CiBleHRlcm4gaW50IHVzYl9hdXRvcmVzdW1lX2RldmljZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldik7CiBleHRlcm4gaW50IHVzYl9yZW1vdGVfd2FrZXVwKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpOwogCiAjZWxzZQogCiAjZGVmaW5lIHVzYl9hdXRvc3VzcGVuZF9kZXZpY2UodWRldikJCWRvIHt9IHdoaWxlICgwKQotI2RlZmluZSB1c2JfdHJ5X2F1dG9zdXNwZW5kX2RldmljZSh1ZGV2KQlkbyB7fSB3aGlsZSAoMCkKIHN0YXRpYyBpbmxpbmUgaW50IHVzYl9hdXRvcmVzdW1lX2RldmljZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKIHsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnIGIvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcKaW5kZXggNjA3ZDBkYi4uMWRjOTczOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcKQEAgLTMzOCw2ICszMzgsMTkgQEAKIAlib29sZWFuICJTM0MyNDEwIHVkYyBkZWJ1ZyBtZXNzYWdlcyIKIAlkZXBlbmRzIG9uIFVTQl9HQURHRVRfUzNDMjQxMAogCitjb25maWcgVVNCX0dBREdFVF9QWEFfVTJPCisJYm9vbGVhbiAiUFhBOXh4IFByb2Nlc3NvciBVU0IyLjAgY29udHJvbGxlciIKKwlzZWxlY3QgVVNCX0dBREdFVF9EVUFMU1BFRUQKKwloZWxwCisJICBQWEE5eHggUHJvY2Vzc29yIHNlcmllcyBpbmNsdWRlIGEgaGlnaCBzcGVlZCBVU0IyLjAgZGV2aWNlCisJICBjb250cm9sbGVyLCB3aGljaCBzdXBwb3J0IGhpZ2ggc3BlZWQgYW5kIGZ1bGwgc3BlZWQgVVNCIHBlcmlwaGVyYWwuCisKK2NvbmZpZyBVU0JfUFhBX1UyTworCXRyaXN0YXRlCisJZGVwZW5kcyBvbiBVU0JfR0FER0VUX1BYQV9VMk8KKwlkZWZhdWx0IFVTQl9HQURHRVQKKwlzZWxlY3QgVVNCX0dBREdFVF9TRUxFQ1RFRAorCiAjCiAjIENvbnRyb2xsZXJzIGF2YWlsYWJsZSBpbiBib3RoIGludGVncmF0ZWQgYW5kIGRpc2NyZXRlIHZlcnNpb25zCiAjCkBAIC00MTQsOCArNDI3LDggQEAKIAlkZWZhdWx0IFVTQl9HQURHRVQKIAlzZWxlY3QgVVNCX0dBREdFVF9TRUxFQ1RFRAogCi1jb25maWcgVVNCX0dBREdFVF9DSTEzWFhYCi0JYm9vbGVhbiAiTUlQUyBVU0IgQ0kxM3h4eCIKK2NvbmZpZyBVU0JfR0FER0VUX0NJMTNYWFhfUENJCisJYm9vbGVhbiAiTUlQUyBVU0IgQ0kxM3h4eCBQQ0kgVURDIgogCWRlcGVuZHMgb24gUENJCiAJc2VsZWN0IFVTQl9HQURHRVRfRFVBTFNQRUVECiAJaGVscApAQCAtNDI2LDkgKzQzOSw5IEBACiAJICBkeW5hbWljYWxseSBsaW5rZWQgbW9kdWxlIGNhbGxlZCAiY2kxM3h4eF91ZGMiIGFuZCBmb3JjZSBhbGwKIAkgIGdhZGdldCBkcml2ZXJzIHRvIGFsc28gYmUgZHluYW1pY2FsbHkgbGlua2VkLgogCi1jb25maWcgVVNCX0NJMTNYWFgKK2NvbmZpZyBVU0JfQ0kxM1hYWF9QQ0kKIAl0cmlzdGF0ZQotCWRlcGVuZHMgb24gVVNCX0dBREdFVF9DSTEzWFhYCisJZGVwZW5kcyBvbiBVU0JfR0FER0VUX0NJMTNYWFhfUENJCiAJZGVmYXVsdCBVU0JfR0FER0VUCiAJc2VsZWN0IFVTQl9HQURHRVRfU0VMRUNURUQKIApAQCAtNDk1LDYgKzUwOCw0OSBAQAogCWRlZmF1bHQgVVNCX0dBREdFVAogCXNlbGVjdCBVU0JfR0FER0VUX1NFTEVDVEVECiAKK2NvbmZpZyBVU0JfR0FER0VUX0VHMjBUCisJYm9vbGVhbiAiSW50ZWwgRUcyMFQoVG9wY2xpZmYpIFVTQiBEZXZpY2UgY29udHJvbGxlciIKKwlkZXBlbmRzIG9uIFBDSQorCXNlbGVjdCBVU0JfR0FER0VUX0RVQUxTUEVFRAorCWhlbHAKKwkgIFRoaXMgaXMgYSBVU0IgZGV2aWNlIGRyaXZlciBmb3IgRUcyMFQgUENILgorCSAgRUcyMFQgUENIIGlzIHRoZSBwbGF0Zm9ybSBjb250cm9sbGVyIGh1YiB0aGF0IGlzIHVzZWQgaW4gSW50ZWwncworCSAgZ2VuZXJhbCBlbWJlZGRlZCBwbGF0Zm9ybS4gRUcyMFQgUENIIGhhcyBVU0IgZGV2aWNlIGludGVyZmFjZS4KKwkgIFVzaW5nIHRoaXMgaW50ZXJmYWNlLCBpdCBpcyBhYmxlIHRvIGFjY2VzcyBzeXN0ZW0gZGV2aWNlcyBjb25uZWN0ZWQKKwkgIHRvIFVTQiBkZXZpY2UuCisJICBUaGlzIGRyaXZlciBlbmFibGVzIFVTQiBkZXZpY2UgZnVuY3Rpb24uCisJICBVU0IgZGV2aWNlIGlzIGEgVVNCIHBlcmlwaGVyYWwgY29udHJvbGxlciB3aGljaAorCSAgc3VwcG9ydHMgYm90aCBmdWxsIGFuZCBoaWdoIHNwZWVkIFVTQiAyLjAgZGF0YSB0cmFuc2ZlcnMuCisJICBUaGlzIGRyaXZlciBzdXBwb3J0cyBib3RoIGNvbnRyb2wgdHJhbnNmZXIgYW5kIGJ1bGsgdHJhbnNmZXIgbW9kZXMuCisJICBUaGlzIGRyaXZlciBkb3NlIG5vdCBzdXBwb3J0IGludGVycnVwdCB0cmFuc2ZlciBvciBpc29jaHJvbm91cworCSAgdHJhbnNmZXIgbW9kZXMuCisKK2NvbmZpZyBVU0JfRUcyMFQKKwl0cmlzdGF0ZQorCWRlcGVuZHMgb24gVVNCX0dBREdFVF9FRzIwVAorCWRlZmF1bHQgVVNCX0dBREdFVAorCXNlbGVjdCBVU0JfR0FER0VUX1NFTEVDVEVECisKK2NvbmZpZyBVU0JfR0FER0VUX0NJMTNYWFhfTVNNCisJYm9vbGVhbiAiTUlQUyBVU0IgQ0kxM3h4eCBmb3IgTVNNIgorCWRlcGVuZHMgb24gQVJDSF9NU00KKwlzZWxlY3QgVVNCX0dBREdFVF9EVUFMU1BFRUQKKwlzZWxlY3QgVVNCX01TTV9PVEdfNzJLCisJaGVscAorCSAgTVNNIFNvQyBoYXMgY2hpcGlkZWEgVVNCIGNvbnRyb2xsZXIuICBUaGlzIGRyaXZlciB1c2VzCisJICBjaTEzeHh4X3VkYyBjb3JlLgorCSAgVGhpcyBkcml2ZXIgZGVwZW5kcyBvbiBPVEcgZHJpdmVyIGZvciBQSFkgaW5pdGlhbGl6YXRpb24sCisJICBjbG9jayBtYW5hZ2VtZW50LCBwb3dlcmluZyB1cCBWQlVTLCBhbmQgcG93ZXIgbWFuYWdlbWVudC4KKworCSAgU2F5ICJ5IiB0byBsaW5rIHRoZSBkcml2ZXIgc3RhdGljYWxseSwgb3IgIm0iIHRvIGJ1aWxkIGEKKwkgIGR5bmFtaWNhbGx5IGxpbmtlZCBtb2R1bGUgY2FsbGVkICJjaTEzeHh4X21zbSIgYW5kIGZvcmNlIGFsbAorCSAgZ2FkZ2V0IGRyaXZlcnMgdG8gYWxzbyBiZSBkeW5hbWljYWxseSBsaW5rZWQuCisKK2NvbmZpZyBVU0JfQ0kxM1hYWF9NU00KKwl0cmlzdGF0ZQorCWRlcGVuZHMgb24gVVNCX0dBREdFVF9DSTEzWFhYX01TTQorCWRlZmF1bHQgVVNCX0dBREdFVAorCXNlbGVjdCBVU0JfR0FER0VUX1NFTEVDVEVECiAKICMKICMgTEFTVCAtLSBkdW1teS9lbXVsYXRlZCBjb250cm9sbGVyCkBAIC02ODUsNiArNzQxLDE5IEBACiAgICAgICAgICBJZiB5b3Ugc2F5ICJ5IiBoZXJlLCB0aGUgRXRoZXJuZXQgZ2FkZ2V0IGRyaXZlciB3aWxsIHVzZSB0aGUgRUVNCiAgICAgICAgICBwcm90b2NvbCByYXRoZXIgdGhhbiBFQ00uICBJZiB1bnN1cmUsIHNheSAibiIuCiAKK2NvbmZpZyBVU0JfR19OQ00KKwl0cmlzdGF0ZSAiTmV0d29yayBDb250cm9sIE1vZGVsIChOQ00pIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBORVQKKwlzZWxlY3QgQ1JDMzIKKwloZWxwCisJICBUaGlzIGRyaXZlciBpbXBsZW1lbnRzIFVTQiBDREMgTkNNIHN1YmNsYXNzIHN0YW5kYXJkLiBOQ00gaXMKKwkgIGFuIGFkdmFuY2VkIHByb3RvY29sIGZvciBFdGhlcm5ldCBlbmNhcHN1bGF0aW9uLCBhbGxvd3MgZ3JvdXBpbmcKKwkgIG9mIHNldmVyYWwgZXRoZXJuZXQgZnJhbWVzIGludG8gb25lIFVTQiB0cmFuc2ZlciBhbmQgZGlmZmZlcmVudAorCSAgYWxpZ25tZW50IHBvc3NpYmlsaXRpZXMuCisKKwkgIFNheSAieSIgdG8gbGluayB0aGUgZHJpdmVyIHN0YXRpY2FsbHksIG9yICJtIiB0byBidWlsZCBhCisJICBkeW5hbWljYWxseSBsaW5rZWQgbW9kdWxlIGNhbGxlZCAiZ19uY20iLgorCiBjb25maWcgVVNCX0dBREdFVEZTCiAJdHJpc3RhdGUgIkdhZGdldCBGaWxlc3lzdGVtIChFWFBFUklNRU5UQUwpIgogCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9nYWRnZXQvTWFrZWZpbGUKaW5kZXggNTc4MGRiNC4uNTVmNWU4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9NYWtlZmlsZQpAQCAtMjEsOSArMjEsMTMgQEAKIG9iai0kKENPTkZJR19VU0JfTTY2NTkyKQkrPSBtNjY1OTItdWRjLm8KIG9iai0kKENPTkZJR19VU0JfUjhBNjY1OTcpCSs9IHI4YTY2NTk3LXVkYy5vCiBvYmotJChDT05GSUdfVVNCX0ZTTF9RRSkJKz0gZnNsX3FlX3VkYy5vCi1vYmotJChDT05GSUdfVVNCX0NJMTNYWFgpCSs9IGNpMTN4eHhfdWRjLm8KK29iai0kKENPTkZJR19VU0JfQ0kxM1hYWF9QQ0kpCSs9IGNpMTN4eHhfcGNpLm8KIG9iai0kKENPTkZJR19VU0JfUzNDX0hTT1RHKQkrPSBzM2MtaHNvdGcubwogb2JqLSQoQ09ORklHX1VTQl9MQU5HV0VMTCkJKz0gbGFuZ3dlbGxfdWRjLm8KK29iai0kKENPTkZJR19VU0JfRUcyMFQpCQkrPSBwY2hfdWRjLm8KK29iai0kKENPTkZJR19VU0JfUFhBX1UyTykJKz0gbXZfdWRjLm8KK212X3VkYy15CQkJOj0gbXZfdWRjX2NvcmUubyBtdl91ZGNfcGh5Lm8KK29iai0kKENPTkZJR19VU0JfQ0kxM1hYWF9NU00pCSs9IGNpMTN4eHhfbXNtLm8KIAogIwogIyBVU0IgZ2FkZ2V0IGRyaXZlcnMKQEAgLTQzLDYgKzQ3LDcgQEAKIGdfZGJncC15CQkJOj0gZGJncC5vCiBnX25va2lhLXkJCQk6PSBub2tpYS5vCiBnX3dlYmNhbS15CQkJOj0gd2ViY2FtLm8KK2dfbmNtLXkJCQkJOj0gbmNtLm8KIAogb2JqLSQoQ09ORklHX1VTQl9aRVJPKQkJKz0gZ196ZXJvLm8KIG9iai0kKENPTkZJR19VU0JfQVVESU8pCQkrPSBnX2F1ZGlvLm8KQEAgLTYwLDMgKzY1LDQgQEAKIG9iai0kKENPTkZJR19VU0JfR19NVUxUSSkJKz0gZ19tdWx0aS5vCiBvYmotJChDT05GSUdfVVNCX0dfTk9LSUEpCSs9IGdfbm9raWEubwogb2JqLSQoQ09ORklHX1VTQl9HX1dFQkNBTSkJKz0gZ193ZWJjYW0ubworb2JqLSQoQ09ORklHX1VTQl9HX05DTSkJCSs9IGdfbmNtLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9hbWQ1NTM2dWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvYW1kNTUzNnVkYy5jCmluZGV4IDkwMzRlMDM0Li5mOGRkNzI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvYW1kNTUzNnVkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9hbWQ1NTM2dWRjLmMKQEAgLTMzNTksNyArMzM1OSw2IEBACiAJZGV2X3NldF9uYW1lKCZkZXYtPmdhZGdldC5kZXYsICJnYWRnZXQiKTsKIAlkZXYtPmdhZGdldC5kZXYucmVsZWFzZSA9IGdhZGdldF9yZWxlYXNlOwogCWRldi0+Z2FkZ2V0Lm5hbWUgPSBuYW1lOwotCWRldi0+Z2FkZ2V0Lm5hbWUgPSBuYW1lOwogCWRldi0+Z2FkZ2V0LmlzX2R1YWxzcGVlZCA9IDE7CiAKIAkvKiBpbml0IHJlZ2lzdGVycywgaW50ZXJydXB0cywgLi4uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvYXRtZWxfdXNiYV91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9hdG1lbF91c2JhX3VkYy5jCmluZGV4IDcxN2ZmNjUuLmU3YzY1YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9hdG1lbF91c2JhX3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9hdG1lbF91c2JhX3VkYy5jCkBAIC0yMDU3LDggKzIwNTcsMTAgQEAKIAkJdXNiYV9lcF9jbGVhbnVwX2RlYnVnZnMoJnVzYmFfZXBbaV0pOwogCXVzYmFfY2xlYW51cF9kZWJ1Z2ZzKHVkYyk7CiAKLQlpZiAoZ3Bpb19pc192YWxpZCh1ZGMtPnZidXNfcGluKSkKKwlpZiAoZ3Bpb19pc192YWxpZCh1ZGMtPnZidXNfcGluKSkgeworCQlmcmVlX2lycShncGlvX3RvX2lycSh1ZGMtPnZidXNfcGluKSwgdWRjKTsKIAkJZ3Bpb19mcmVlKHVkYy0+dmJ1c19waW4pOworCX0KIAogCWZyZWVfaXJxKHVkYy0+aXJxLCB1ZGMpOwogCWtmcmVlKHVzYmFfZXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2NpMTN4eHhfbXNtLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvY2kxM3h4eF9tc20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzlhYzk0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2NpMTN4eHhfbXNtLmMKQEAgLTAsMCArMSwxMzQgQEAKKy8qIENvcHlyaWdodCAoYykgMjAxMCwgQ29kZSBBdXJvcmEgRm9ydW0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAorICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvbXNtX2hzdXNiX2h3Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiL3VscGkuaD4KKworI2luY2x1ZGUgImNpMTN4eHhfdWRjLmMiCisKKyNkZWZpbmUgTVNNX1VTQl9CQVNFCSh1ZGMtPnJlZ3MpCisKK3N0YXRpYyBpcnFyZXR1cm5fdCBtc21fdWRjX2lycShpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXJldHVybiB1ZGNfaXJxKCk7Cit9CisKK3N0YXRpYyB2b2lkIGNpMTN4eHhfbXNtX25vdGlmeV9ldmVudChzdHJ1Y3QgY2kxM3h4eCAqdWRjLCB1bnNpZ25lZCBldmVudCkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB1ZGMtPmdhZGdldC5kZXYucGFyZW50OworCWludCB2YWw7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBDSTEzWFhYX0NPTlRST0xMRVJfUkVTRVRfRVZFTlQ6CisJCWRldl9kYmcoZGV2LCAiQ0kxM1hYWF9DT05UUk9MTEVSX1JFU0VUX0VWRU5UIHJlY2VpdmVkXG4iKTsKKwkJd3JpdGVsKDAsIFVTQl9BSEJCVVJTVCk7CisJCXdyaXRlbCgwLCBVU0JfQUhCTU9ERSk7CisJCWJyZWFrOworCWNhc2UgQ0kxM1hYWF9DT05UUk9MTEVSX1NUT1BQRURfRVZFTlQ6CisJCWRldl9kYmcoZGV2LCAiQ0kxM1hYWF9DT05UUk9MTEVSX1NUT1BQRURfRVZFTlQgcmVjZWl2ZWRcbiIpOworCQkvKgorCQkgKiBQdXQgdGhlIHRyYW5zY2VpdmVyIGluIG5vbi1kcml2aW5nIG1vZGUuIE90aGVyd2lzZSBob3N0CisJCSAqIG1heSBub3QgZGV0ZWN0IHNvZnQtZGlzY29ubmVjdGlvbi4KKwkJICovCisJCXZhbCA9IG90Z19pb19yZWFkKHVkYy0+dHJhbnNjZWl2ZXIsIFVMUElfRlVOQ19DVFJMKTsKKwkJdmFsICY9IH5VTFBJX0ZVTkNfQ1RSTF9PUE1PREVfTUFTSzsKKwkJdmFsIHw9IFVMUElfRlVOQ19DVFJMX09QTU9ERV9OT05EUklWSU5HOworCQlvdGdfaW9fd3JpdGUodWRjLT50cmFuc2NlaXZlciwgdmFsLCBVTFBJX0ZVTkNfQ1RSTCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9kYmcoZGV2LCAidW5rbm93biBjaTEzeHh4X3VkYyBldmVudFxuIik7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHN0cnVjdCBjaTEzeHh4X3VkY19kcml2ZXIgY2kxM3h4eF9tc21fdWRjX2RyaXZlciA9IHsKKwkubmFtZQkJCT0gImNpMTN4eHhfbXNtIiwKKwkuZmxhZ3MJCQk9IENJMTNYWFhfUkVHU19TSEFSRUQgfAorCQkJCSAgQ0kxM1hYWF9SRVFVSVJFX1RSQU5TQ0VJVkVSIHwKKwkJCQkgIENJMTNYWFhfUFVMTFVQX09OX1ZCVVMgfAorCQkJCSAgQ0kxM1hYWF9ESVNBQkxFX1NUUkVBTUlORywKKworCS5ub3RpZnlfZXZlbnQJCT0gY2kxM3h4eF9tc21fbm90aWZ5X2V2ZW50LAorfTsKKworc3RhdGljIGludCBjaTEzeHh4X21zbV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXZvaWQgX19pb21lbSAqcmVnczsKKwlpbnQgaXJxOworCWludCByZXQ7CisKKwlkZXZfZGJnKCZwZGV2LT5kZXYsICJjaTEzeHh4X21zbV9wcm9iZVxuIik7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVzKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBnZXQgcGxhdGZvcm0gcmVzb3VyY2UgbWVtXG4iKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwlyZWdzID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCWlmICghcmVncykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJpb3JlbWFwIGZhaWxlZFxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXJldCA9IHVkY19wcm9iZSgmY2kxM3h4eF9tc21fdWRjX2RyaXZlciwgJnBkZXYtPmRldiwgcmVncyk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAidWRjX3Byb2JlIGZhaWxlZFxuIik7CisJCWdvdG8gaW91bm1hcDsKKwl9CisKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChpcnEgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIklSUSBub3QgZm91bmRcbiIpOworCQlyZXQgPSAtRU5YSU87CisJCWdvdG8gdWRjX3JlbW92ZTsKKwl9CisKKwlyZXQgPSByZXF1ZXN0X2lycShpcnEsIG1zbV91ZGNfaXJxLCBJUlFGX1NIQVJFRCwgcGRldi0+bmFtZSwgcGRldik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAicmVxdWVzdF9pcnEgZmFpbGVkXG4iKTsKKwkJZ290byB1ZGNfcmVtb3ZlOworCX0KKworCXBtX3J1bnRpbWVfbm9fY2FsbGJhY2tzKCZwZGV2LT5kZXYpOworCXBtX3J1bnRpbWVfZW5hYmxlKCZwZGV2LT5kZXYpOworCisJcmV0dXJuIDA7CisKK3VkY19yZW1vdmU6CisJdWRjX3JlbW92ZSgpOworaW91bm1hcDoKKwlpb3VubWFwKHJlZ3MpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgY2kxM3h4eF9tc21fZHJpdmVyID0geworCS5wcm9iZSA9IGNpMTN4eHhfbXNtX3Byb2JlLAorCS5kcml2ZXIgPSB7IC5uYW1lID0gIm1zbV9oc3VzYiIsIH0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBjaTEzeHh4X21zbV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmY2kxM3h4eF9tc21fZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KGNpMTN4eHhfbXNtX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2NpMTN4eHhfcGNpLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvY2kxM3h4eF9wY2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODNhYjVlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2NpMTN4eHhfcGNpLmMKQEAgLTAsMCArMSwxNzYgQEAKKy8qCisgKiBjaTEzeHh4X3BjaS5jIC0gTUlQUyBVU0IgSVAgY29yZSBmYW1pbHkgZGV2aWNlIGNvbnRyb2xsZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ2hpcGlkZWEgLSBNSVBTIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIEF1dGhvcjogRGF2aWQgTG9wbworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorCisjaW5jbHVkZSAiY2kxM3h4eF91ZGMuYyIKKworLyogZHJpdmVyIG5hbWUgKi8KKyNkZWZpbmUgVURDX0RSSVZFUl9OQU1FICAgImNpMTN4eHhfcGNpIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQQ0kgYmxvY2sKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICogY2kxM3h4eF9wY2lfaXJxOiBpbnRlcnJ1dCBoYW5kbGVyCisgKiBAaXJxOiAgaXJxIG51bWJlcgorICogQHBkZXY6IFVTQiBEZXZpY2UgQ29udHJvbGxlciBpbnRlcnJ1cHQgc291cmNlCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIElSUV9IQU5ETEVEIGlmIHRoZSBJUlEgaGFzIGJlZW4gaGFuZGxlZAorICogVGhpcyBpcyBhbiBJU1IgZG9uJ3QgdHJhY2UsIHVzZSBhdHRyaWJ1dGUgaW50ZXJmYWNlIGluc3RlYWQKKyAqLworc3RhdGljIGlycXJldHVybl90IGNpMTN4eHhfcGNpX2lycShpbnQgaXJxLCB2b2lkICpwZGV2KQoreworCWlmIChpcnEgPT0gMCkgeworCQlkZXZfZXJyKCYoKHN0cnVjdCBwY2lfZGV2ICopcGRldiktPmRldiwgIkludmFsaWQgSVJRMCB1c2FnZSEiKTsKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0KKwlyZXR1cm4gdWRjX2lycSgpOworfQorCitzdGF0aWMgc3RydWN0IGNpMTN4eHhfdWRjX2RyaXZlciBjaTEzeHh4X3BjaV91ZGNfZHJpdmVyID0geworCS5uYW1lCQk9IFVEQ19EUklWRVJfTkFNRSwKK307CisKKy8qKgorICogY2kxM3h4eF9wY2lfcHJvYmU6IFBDSSBwcm9iZQorICogQHBkZXY6IFVTQiBkZXZpY2UgY29udHJvbGxlciBiZWluZyBwcm9iZWQKKyAqIEBpZDogICBQQ0kgaG90cGx1ZyBJRCBjb25uZWN0aW5nIGNvbnRyb2xsZXIgdG8gVURDIGZyYW1ld29yaworICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbiBlcnJvciBjb2RlCisgKiBBbGxvY2F0ZXMgYmFzaWMgUENJIHJlc291cmNlcyBmb3IgdGhpcyBVU0IgZGV2aWNlIGNvbnRyb2xsZXIsIGFuZCB0aGVuCisgKiBpbnZva2VzIHRoZSB1ZGNfcHJvYmUoKSBtZXRob2QgdG8gc3RhcnQgdGhlIFVEQyBhc3NvY2lhdGVkIHdpdGggaXQKKyAqLworc3RhdGljIGludCBfX2RldmluaXQgY2kxM3h4eF9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKK3sKKwl2b2lkIF9faW9tZW0gKnJlZ3MgPSBOVUxMOworCWludCByZXR2YWwgPSAwOworCisJaWYgKGlkID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dmFsID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJaWYgKHJldHZhbCkKKwkJZ290byBkb25lOworCisJaWYgKCFwZGV2LT5pcnEpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiTm8gSVJRLCBjaGVjayBCSU9TL1BDSSBzZXR1cCEiKTsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBkaXNhYmxlX2RldmljZTsKKwl9CisKKwlyZXR2YWwgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBkZXYsIFVEQ19EUklWRVJfTkFNRSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBkaXNhYmxlX2RldmljZTsKKworCS8qIEJBUiAwIGhvbGRzIGFsbCB0aGUgcmVnaXN0ZXJzICovCisJcmVncyA9IHBjaV9pb21hcChwZGV2LCAwLCAwKTsKKwlpZiAoIXJlZ3MpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRXJyb3IgbWFwcGluZyBtZW1vcnkhIik7CisJCXJldHZhbCA9IC1FRkFVTFQ7CisJCWdvdG8gcmVsZWFzZV9yZWdpb25zOworCX0KKwlwY2lfc2V0X2RydmRhdGEocGRldiwgKF9fZm9yY2Ugdm9pZCAqKXJlZ3MpOworCisJcGNpX3NldF9tYXN0ZXIocGRldik7CisJcGNpX3RyeV9zZXRfbXdpKHBkZXYpOworCisJcmV0dmFsID0gdWRjX3Byb2JlKCZjaTEzeHh4X3BjaV91ZGNfZHJpdmVyLCAmcGRldi0+ZGV2LCByZWdzKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGlvdW5tYXA7CisKKwkvKiBvdXIgZGV2aWNlIGRvZXMgbm90IGhhdmUgTVNJIGNhcGFiaWxpdHkgKi8KKworCXJldHZhbCA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgY2kxM3h4eF9wY2lfaXJxLCBJUlFGX1NIQVJFRCwKKwkJCSAgICAgVURDX0RSSVZFUl9OQU1FLCBwZGV2KTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGdhZGdldF9yZW1vdmU7CisKKwlyZXR1cm4gMDsKKworIGdhZGdldF9yZW1vdmU6CisJdWRjX3JlbW92ZSgpOworIGlvdW5tYXA6CisJcGNpX2lvdW5tYXAocGRldiwgcmVncyk7CisgcmVsZWFzZV9yZWdpb25zOgorCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CisgZGlzYWJsZV9kZXZpY2U6CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworIGRvbmU6CisJcmV0dXJuIHJldHZhbDsKK30KKworLyoqCisgKiBjaTEzeHh4X3BjaV9yZW1vdmU6IFBDSSByZW1vdmUKKyAqIEBwZGV2OiBVU0IgRGV2aWNlIENvbnRyb2xsZXIgYmVpbmcgcmVtb3ZlZAorICoKKyAqIFJldmVyc2VzIHRoZSBlZmZlY3Qgb2YgY2kxM3h4eF9wY2lfcHJvYmUoKSwKKyAqIGZpcnN0IGludm9raW5nIHRoZSB1ZGNfcmVtb3ZlKCkgYW5kIHRoZW4gcmVsZWFzZXMKKyAqIGFsbCBQQ0kgcmVzb3VyY2VzIGFsbG9jYXRlZCBmb3IgdGhpcyBVU0IgZGV2aWNlIGNvbnRyb2xsZXIKKyAqLworc3RhdGljIHZvaWQgX19kZXZleGl0IGNpMTN4eHhfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlmcmVlX2lycShwZGV2LT5pcnEsIHBkZXYpOworCXVkY19yZW1vdmUoKTsKKwlwY2lfaW91bm1hcChwZGV2LCAoX19mb3JjZSB2b2lkIF9faW9tZW0gKilwY2lfZ2V0X2RydmRhdGEocGRldikpOworCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworfQorCisvKioKKyAqIFBDSSBkZXZpY2UgdGFibGUKKyAqIFBDSSBkZXZpY2Ugc3RydWN0dXJlCisgKgorICogQ2hlY2sgInBjaS5oIiBmb3IgZGV0YWlscworICovCitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoY2kxM3h4eF9wY2lfaWRfdGFibGUpID0geworCXsgUENJX0RFVklDRSgweDE1M0YsIDB4MTAwNCkgfSwKKwl7IFBDSV9ERVZJQ0UoMHgxNTNGLCAweDEwMDYpIH0sCisJeyAwLCAwLCAwLCAwLCAwLCAwLCAwIC8qIGVuZDogYWxsIHplcm9lcyAqLyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGNpMTN4eHhfcGNpX2lkX3RhYmxlKTsKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGNpMTN4eHhfcGNpX2RyaXZlciA9IHsKKwkubmFtZSAgICAgICAgID0JVURDX0RSSVZFUl9OQU1FLAorCS5pZF90YWJsZSAgICAgPQljaTEzeHh4X3BjaV9pZF90YWJsZSwKKwkucHJvYmUgICAgICAgID0JY2kxM3h4eF9wY2lfcHJvYmUsCisJLnJlbW92ZSAgICAgICA9CV9fZGV2ZXhpdF9wKGNpMTN4eHhfcGNpX3JlbW92ZSksCit9OworCisvKioKKyAqIGNpMTN4eHhfcGNpX2luaXQ6IG1vZHVsZSBpbml0CisgKgorICogRHJpdmVyIGxvYWQKKyAqLworc3RhdGljIGludCBfX2luaXQgY2kxM3h4eF9wY2lfaW5pdCh2b2lkKQoreworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZjaTEzeHh4X3BjaV9kcml2ZXIpOworfQorbW9kdWxlX2luaXQoY2kxM3h4eF9wY2lfaW5pdCk7CisKKy8qKgorICogY2kxM3h4eF9wY2lfZXhpdDogbW9kdWxlIGV4aXQKKyAqCisgKiBEcml2ZXIgdW5sb2FkCisgKi8KK3N0YXRpYyB2b2lkIF9fZXhpdCBjaTEzeHh4X3BjaV9leGl0KHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZjaTEzeHh4X3BjaV9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQoY2kxM3h4eF9wY2lfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIk1JUFMgLSBEYXZpZCBMb3BvIDxkbG9wb0BjaGlwaWRlYS5taXBzLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTUlQUyBDSTEzWFhYIFVTQiBQZXJpcGhlcmFsIENvbnRyb2xsZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9WRVJTSU9OKCJKdW5lIDIwMDgiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9jaTEzeHh4X3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2NpMTN4eHhfdWRjLmMKaW5kZXggOThiMzZmYy4uMzE2NTZhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2NpMTN4eHhfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2NpMTN4eHhfdWRjLmMKQEAgLTIyLDcgKzIyLDYgQEAKICAqIC0gRU5EUFQ6ICBlbmRwb2ludCBvcGVyYXRpb25zIChHYWRnZXQgQVBJKQogICogLSBHQURHRVQ6IGdhZGdldCBvcGVyYXRpb25zIChHYWRnZXQgQVBJKQogICogLSBCVVM6ICAgIGJ1cyBnbHVlIGNvZGUsIGJ1cyBhYnN0cmFjdGlvbiBsYXllcgotICogLSBQQ0k6ICAgIFBDSSBjb3JlIGludGVyZmFjZSBhbmQgUENJIHJlc291cmNlcyAoaW50ZXJydXB0cywgbWVtb3J5Li4uKQogICoKICAqIENvbXBpbGUgT3B0aW9ucwogICogLSBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUzogZW5hYmxlIGRlYnVnIGZhY2lsaXRpZXMKQEAgLTYwLDExICs1OSwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KICNpbmNsdWRlIDxsaW51eC91c2IvY2g5Lmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL2dhZGdldC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi9vdGcuaD4KIAogI2luY2x1ZGUgImNpMTN4eHhfdWRjLmgiCiAKQEAgLTc1LDkgKzc0LDYgQEAKIC8qIGN0cmwgcmVnaXN0ZXIgYmFuayBhY2Nlc3MgKi8KIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodWRjX2xvY2spOwogCi0vKiBkcml2ZXIgbmFtZSAqLwotI2RlZmluZSBVRENfRFJJVkVSX05BTUUgICAiY2kxM3h4eF91ZGMiCi0KIC8qIGNvbnRyb2wgZW5kcG9pbnQgZGVzY3JpcHRpb24gKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IKIGN0cmxfZW5kcHRfZGVzYyA9IHsKQEAgLTEzMiw2ICsxMjgsOSBAQAogCXNpemVfdCAgICAgICAgc2l6ZTsgICAvKiBiYW5rIHNpemUgKi8KIH0gaHdfYmFuazsKIAorLyogTVNNIHNwZWNpZmljICovCisjZGVmaW5lIEFCU19BSEJCVVJTVCAgICAgICAgKDB4MDA5MFVMKQorI2RlZmluZSBBQlNfQUhCTU9ERSAgICAgICAgICgweDAwOThVTCkKIC8qIFVEQyByZWdpc3RlciBtYXAgKi8KICNkZWZpbmUgQUJTX0NBUExFTkdUSCAgICAgICAoMHgxMDBVTCkKICNkZWZpbmUgQUJTX0hDQ1BBUkFNUyAgICAgICAoMHgxMDhVTCkKQEAgLTI0OCwxMyArMjQ3LDcgQEAKIAlyZXR1cm4gKHJlZyAmIG1hc2spID4+IGZmc19ucihtYXNrKTsKIH0KIAotLyoqCi0gKiBod19kZXZpY2VfcmVzZXQ6IHJlc2V0cyBjaGlwIChleGVjdXRlIHdpdGhvdXQgaW50ZXJydXB0aW9uKQotICogQGJhc2U6IHJlZ2lzdGVyIGJhc2UgYWRkcmVzcwotICoKLSAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbiBlcnJvciBjb2RlCi0gKi8KLXN0YXRpYyBpbnQgaHdfZGV2aWNlX3Jlc2V0KHZvaWQgX19pb21lbSAqYmFzZSkKK3N0YXRpYyBpbnQgaHdfZGV2aWNlX2luaXQodm9pZCBfX2lvbWVtICpiYXNlKQogewogCXUzMiByZWc7CiAKQEAgLTI3MSwyNSArMjY0LDYgQEAKIAlod19iYW5rLnNpemUgKz0gQ0FQX0xBU1Q7CiAJaHdfYmFuay5zaXplIC89IHNpemVvZih1MzIpOwogCi0JLyogc2hvdWxkIGZsdXNoICYgc3RvcCBiZWZvcmUgcmVzZXQgKi8KLQlod19jd3JpdGUoQ0FQX0VORFBURkxVU0gsIH4wLCB+MCk7Ci0JaHdfY3dyaXRlKENBUF9VU0JDTUQsIFVTQkNNRF9SUywgMCk7Ci0KLQlod19jd3JpdGUoQ0FQX1VTQkNNRCwgVVNCQ01EX1JTVCwgVVNCQ01EX1JTVCk7Ci0Jd2hpbGUgKGh3X2NyZWFkKENBUF9VU0JDTUQsIFVTQkNNRF9SU1QpKQotCQl1ZGVsYXkoMTApOyAgICAgICAgICAgICAvKiBub3QgUlRPUyBmcmllbmRseSAqLwotCi0JLyogVVNCTU9ERSBzaG91bGQgYmUgY29uZmlndXJlZCBzdGVwIGJ5IHN0ZXAgKi8KLQlod19jd3JpdGUoQ0FQX1VTQk1PREUsIFVTQk1PREVfQ00sIFVTQk1PREVfQ01fSURMRSk7Ci0JaHdfY3dyaXRlKENBUF9VU0JNT0RFLCBVU0JNT0RFX0NNLCBVU0JNT0RFX0NNX0RFVklDRSk7Ci0JaHdfY3dyaXRlKENBUF9VU0JNT0RFLCBVU0JNT0RFX1NMT00sIFVTQk1PREVfU0xPTSk7ICAvKiBIVyA+PSAyLjMgKi8KLQotCWlmIChod19jcmVhZChDQVBfVVNCTU9ERSwgVVNCTU9ERV9DTSkgIT0gVVNCTU9ERV9DTV9ERVZJQ0UpIHsKLQkJcHJfZXJyKCJjYW5ub3QgZW50ZXIgaW4gZGV2aWNlIG1vZGUiKTsKLQkJcHJfZXJyKCJscG0gPSAlaSIsIGh3X2JhbmsubHBtKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCiAJcmVnID0gaHdfYXJlYWQoQUJTX0RDQ1BBUkFNUywgRENDUEFSQU1TX0RFTikgPj4gZmZzX25yKERDQ1BBUkFNU19ERU4pOwogCWlmIChyZWcgPT0gMCB8fCByZWcgPiBFTkRQVF9NQVgpCiAJCXJldHVybiAtRU5PREVWOwpAQCAtMzA0LDYgKzI3OCw0MyBAQAogCiAJcmV0dXJuIDA7CiB9CisvKioKKyAqIGh3X2RldmljZV9yZXNldDogcmVzZXRzIGNoaXAgKGV4ZWN1dGUgd2l0aG91dCBpbnRlcnJ1cHRpb24pCisgKiBAYmFzZTogcmVnaXN0ZXIgYmFzZSBhZGRyZXNzCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIGVycm9yIGNvZGUKKyAqLworc3RhdGljIGludCBod19kZXZpY2VfcmVzZXQoc3RydWN0IGNpMTN4eHggKnVkYykKK3sKKwkvKiBzaG91bGQgZmx1c2ggJiBzdG9wIGJlZm9yZSByZXNldCAqLworCWh3X2N3cml0ZShDQVBfRU5EUFRGTFVTSCwgfjAsIH4wKTsKKwlod19jd3JpdGUoQ0FQX1VTQkNNRCwgVVNCQ01EX1JTLCAwKTsKKworCWh3X2N3cml0ZShDQVBfVVNCQ01ELCBVU0JDTURfUlNULCBVU0JDTURfUlNUKTsKKwl3aGlsZSAoaHdfY3JlYWQoQ0FQX1VTQkNNRCwgVVNCQ01EX1JTVCkpCisJCXVkZWxheSgxMCk7ICAgICAgICAgICAgIC8qIG5vdCBSVE9TIGZyaWVuZGx5ICovCisKKworCWlmICh1ZGMtPnVkY19kcml2ZXItPm5vdGlmeV9ldmVudCkKKwkJdWRjLT51ZGNfZHJpdmVyLT5ub3RpZnlfZXZlbnQodWRjLAorCQkJQ0kxM1hYWF9DT05UUk9MTEVSX1JFU0VUX0VWRU5UKTsKKworCWlmICh1ZGMtPnVkY19kcml2ZXItPmZsYWdzICYmIENJMTNYWFhfRElTQUJMRV9TVFJFQU1JTkcpCisJCWh3X2N3cml0ZShDQVBfVVNCTU9ERSwgVVNCTU9ERV9TRElTLCBVU0JNT0RFX1NESVMpOworCisJLyogVVNCTU9ERSBzaG91bGQgYmUgY29uZmlndXJlZCBzdGVwIGJ5IHN0ZXAgKi8KKwlod19jd3JpdGUoQ0FQX1VTQk1PREUsIFVTQk1PREVfQ00sIFVTQk1PREVfQ01fSURMRSk7CisJaHdfY3dyaXRlKENBUF9VU0JNT0RFLCBVU0JNT0RFX0NNLCBVU0JNT0RFX0NNX0RFVklDRSk7CisJaHdfY3dyaXRlKENBUF9VU0JNT0RFLCBVU0JNT0RFX1NMT00sIFVTQk1PREVfU0xPTSk7ICAvKiBIVyA+PSAyLjMgKi8KKworCWlmIChod19jcmVhZChDQVBfVVNCTU9ERSwgVVNCTU9ERV9DTSkgIT0gVVNCTU9ERV9DTV9ERVZJQ0UpIHsKKwkJcHJfZXJyKCJjYW5ub3QgZW50ZXIgaW4gZGV2aWNlIG1vZGUiKTsKKwkJcHJfZXJyKCJscG0gPSAlaSIsIGh3X2JhbmsubHBtKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcmV0dXJuIDA7Cit9CiAKIC8qKgogICogaHdfZGV2aWNlX3N0YXRlOiBlbmFibGVzL2Rpc2FibGVzIGludGVycnVwdHMgJiBzdGFydHMvc3RvcHMgZGV2aWNlIChleGVjdXRlCkBAIC0xNDQ5LDcgKzE0NjAsNyBAQAogCW1SZXEtPnB0ci0+cGFnZVswXSAgPSBtUmVxLT5yZXEuZG1hOwogCWZvciAoaSA9IDE7IGkgPCA1OyBpKyspCiAJCW1SZXEtPnB0ci0+cGFnZVtpXSA9Ci0JCQkobVJlcS0+cmVxLmRtYSArIGkgKiBQQUdFX1NJWkUpICYgflREX1JFU0VSVkVEX01BU0s7CisJCQkobVJlcS0+cmVxLmRtYSArIGkgKiBDSTEzWFhYX1BBR0VfU0laRSkgJiB+VERfUkVTRVJWRURfTUFTSzsKIAogCS8qCiAJICogIFFIIGNvbmZpZ3VyYXRpb24KQEAgLTE1NDAsNyArMTU1MSw3IEBACiAJCWxpc3RfZGVsX2luaXQoJm1SZXEtPnF1ZXVlKTsKIAkJbVJlcS0+cmVxLnN0YXR1cyA9IC1FU0hVVERPV047CiAKLQkJaWYgKCFtUmVxLT5yZXEubm9faW50ZXJydXB0ICYmIG1SZXEtPnJlcS5jb21wbGV0ZSAhPSBOVUxMKSB7CisJCWlmIChtUmVxLT5yZXEuY29tcGxldGUgIT0gTlVMTCkgewogCQkJc3Bpbl91bmxvY2sobUVwLT5sb2NrKTsKIAkJCW1SZXEtPnJlcS5jb21wbGV0ZSgmbUVwLT5lcCwgJm1SZXEtPnJlcSk7CiAJCQlzcGluX2xvY2sobUVwLT5sb2NrKTsKQEAgLTE1NTcsOCArMTU2OCw2IEBACiAgKiBDYWxsZXIgbXVzdCBob2xkIGxvY2sKICAqLwogc3RhdGljIGludCBfZ2FkZ2V0X3N0b3BfYWN0aXZpdHkoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCkKLV9fcmVsZWFzZXModWRjLT5sb2NrKQotX19hY3F1aXJlcyh1ZGMtPmxvY2spCiB7CiAJc3RydWN0IHVzYl9lcCAqZXA7CiAJc3RydWN0IGNpMTN4eHggICAgKnVkYyA9IGNvbnRhaW5lcl9vZihnYWRnZXQsIHN0cnVjdCBjaTEzeHh4LCBnYWRnZXQpOwpAQCAtMTU3MCw4ICsxNTc5LDYgQEAKIAlpZiAoZ2FkZ2V0ID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jc3Bpbl91bmxvY2sodWRjLT5sb2NrKTsKLQogCS8qIGZsdXNoIGFsbCBlbmRwb2ludHMgKi8KIAlnYWRnZXRfZm9yX2VhY2hfZXAoZXAsIGdhZGdldCkgewogCQl1c2JfZXBfZmlmb19mbHVzaChlcCk7CkBAIC0xNTkxLDggKzE1OTgsNiBAQAogCQltRXAtPnN0YXR1cyA9IE5VTEw7CiAJfQogCi0Jc3Bpbl9sb2NrKHVkYy0+bG9jayk7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMTYyMSw2ICsxNjI2LDcgQEAKIAogCWRiZ19ldmVudCgweEZGLCAiQlVTIFJTVCIsIDApOwogCisJc3Bpbl91bmxvY2sodWRjLT5sb2NrKTsKIAlyZXR2YWwgPSBfZ2FkZ2V0X3N0b3BfYWN0aXZpdHkoJnVkYy0+Z2FkZ2V0KTsKIAlpZiAocmV0dmFsKQogCQlnb3RvIGRvbmU7CkBAIC0xNjI5LDEwICsxNjM1LDkgQEAKIAlpZiAocmV0dmFsKQogCQlnb3RvIGRvbmU7CiAKLQlzcGluX3VubG9jayh1ZGMtPmxvY2spOwogCXJldHZhbCA9IHVzYl9lcF9lbmFibGUoJm1FcC0+ZXAsICZjdHJsX2VuZHB0X2Rlc2MpOwogCWlmICghcmV0dmFsKSB7Ci0JCW1FcC0+c3RhdHVzID0gdXNiX2VwX2FsbG9jX3JlcXVlc3QoJm1FcC0+ZXAsIEdGUF9LRVJORUwpOworCQltRXAtPnN0YXR1cyA9IHVzYl9lcF9hbGxvY19yZXF1ZXN0KCZtRXAtPmVwLCBHRlBfQVRPTUlDKTsKIAkJaWYgKG1FcC0+c3RhdHVzID09IE5VTEwpIHsKIAkJCXVzYl9lcF9kaXNhYmxlKCZtRXAtPmVwKTsKIAkJCXJldHZhbCA9IC1FTk9NRU07CkBAIC0xNzg5LDE4ICsxNzk0LDIwIEBACiAKIAlkYmdfZG9uZShfdXNiX2FkZHIobUVwKSwgbVJlcS0+cHRyLT50b2tlbiwgcmV0dmFsKTsKIAotCWlmICghbVJlcS0+cmVxLm5vX2ludGVycnVwdCAmJiBtUmVxLT5yZXEuY29tcGxldGUgIT0gTlVMTCkgeworCWlmICghbGlzdF9lbXB0eSgmbUVwLT5xaFttRXAtPmRpcl0ucXVldWUpKSB7CisJCXN0cnVjdCBjaTEzeHh4X3JlcSogbVJlcUVucTsKKworCQltUmVxRW5xID0gbGlzdF9lbnRyeShtRXAtPnFoW21FcC0+ZGlyXS5xdWV1ZS5uZXh0LAorCQkJCSAgc3RydWN0IGNpMTN4eHhfcmVxLCBxdWV1ZSk7CisJCV9oYXJkd2FyZV9lbnF1ZXVlKG1FcCwgbVJlcUVucSk7CisJfQorCisJaWYgKG1SZXEtPnJlcS5jb21wbGV0ZSAhPSBOVUxMKSB7CiAJCXNwaW5fdW5sb2NrKG1FcC0+bG9jayk7CiAJCW1SZXEtPnJlcS5jb21wbGV0ZSgmbUVwLT5lcCwgJm1SZXEtPnJlcSk7CiAJCXNwaW5fbG9jayhtRXAtPmxvY2spOwogCX0KIAotCWlmICghbGlzdF9lbXB0eSgmbUVwLT5xaFttRXAtPmRpcl0ucXVldWUpKSB7Ci0JCW1SZXEgPSBsaXN0X2VudHJ5KG1FcC0+cWhbbUVwLT5kaXJdLnF1ZXVlLm5leHQsCi0JCQkJICBzdHJ1Y3QgY2kxM3h4eF9yZXEsIHF1ZXVlKTsKLQkJX2hhcmR3YXJlX2VucXVldWUobUVwLCBtUmVxKTsKLQl9Ci0KICBkb25lOgogCXJldHVybiByZXR2YWw7CiB9CkBAIC0yMDYxLDcgKzIwNjgsNiBAQAogewogCXN0cnVjdCBjaTEzeHh4X2VwICAqbUVwICA9IGNvbnRhaW5lcl9vZihlcCwgc3RydWN0IGNpMTN4eHhfZXAsIGVwKTsKIAlzdHJ1Y3QgY2kxM3h4eF9yZXEgKm1SZXEgPSBOVUxMOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAl0cmFjZSgiJXAsICVpIiwgZXAsIGdmcF9mbGFncyk7CiAKQEAgLTIwNzAsOCArMjA3Niw2IEBACiAJCXJldHVybiBOVUxMOwogCX0KIAotCXNwaW5fbG9ja19pcnFzYXZlKG1FcC0+bG9jaywgZmxhZ3MpOwotCiAJbVJlcSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjaTEzeHh4X3JlcSksIGdmcF9mbGFncyk7CiAJaWYgKG1SZXEgIT0gTlVMTCkgewogCQlJTklUX0xJU1RfSEVBRCgmbVJlcS0+cXVldWUpOwpAQCAtMjA4Niw4ICsyMDkwLDYgQEAKIAogCWRiZ19ldmVudChfdXNiX2FkZHIobUVwKSwgIkFMTE9DIiwgbVJlcSA9PSBOVUxMKTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUobUVwLT5sb2NrLCBmbGFncyk7Ci0KIAlyZXR1cm4gKG1SZXEgPT0gTlVMTCkgPyBOVUxMIDogJm1SZXEtPnJlcTsKIH0KIApAQCAtMjE1Nyw4ICsyMTU5LDggQEAKIAkJZ290byBkb25lOwogCX0KIAotCWlmIChyZXEtPmxlbmd0aCA+ICg0ICogUEFHRV9TSVpFKSkgewotCQlyZXEtPmxlbmd0aCA9ICg0ICogUEFHRV9TSVpFKTsKKwlpZiAocmVxLT5sZW5ndGggPiAoNCAqIENJMTNYWFhfUEFHRV9TSVpFKSkgeworCQlyZXEtPmxlbmd0aCA9ICg0ICogQ0kxM1hYWF9QQUdFX1NJWkUpOwogCQlyZXR2YWwgPSAtRU1TR1NJWkU7CiAJCXdhcm4oInJlcXVlc3QgbGVuZ3RoIHRydW5jYXRlZCIpOwogCX0KQEAgLTIxNzAsOCArMjE3MiwxMCBAQAogCW1SZXEtPnJlcS5hY3R1YWwgPSAwOwogCWxpc3RfYWRkX3RhaWwoJm1SZXEtPnF1ZXVlLCAmbUVwLT5xaFttRXAtPmRpcl0ucXVldWUpOwogCi0JcmV0dmFsID0gX2hhcmR3YXJlX2VucXVldWUobUVwLCBtUmVxKTsKLQlpZiAocmV0dmFsID09IC1FQUxSRUFEWSB8fCByZXR2YWwgPT0gLUVCVVNZKSB7CisJaWYgKGxpc3RfaXNfc2luZ3VsYXIoJm1FcC0+cWhbbUVwLT5kaXJdLnF1ZXVlKSkKKwkJcmV0dmFsID0gX2hhcmR3YXJlX2VucXVldWUobUVwLCBtUmVxKTsKKworCWlmIChyZXR2YWwgPT0gLUVBTFJFQURZKSB7CiAJCWRiZ19ldmVudChfdXNiX2FkZHIobUVwKSwgIlFVRVVFIiwgcmV0dmFsKTsKIAkJcmV0dmFsID0gMDsKIAl9CkBAIC0yMjA5LDcgKzIyMTMsNyBAQAogCWxpc3RfZGVsX2luaXQoJm1SZXEtPnF1ZXVlKTsKIAlyZXEtPnN0YXR1cyA9IC1FQ09OTlJFU0VUOwogCi0JaWYgKCFtUmVxLT5yZXEubm9faW50ZXJydXB0ICYmIG1SZXEtPnJlcS5jb21wbGV0ZSAhPSBOVUxMKSB7CisJaWYgKG1SZXEtPnJlcS5jb21wbGV0ZSAhPSBOVUxMKSB7CiAJCXNwaW5fdW5sb2NrKG1FcC0+bG9jayk7CiAJCW1SZXEtPnJlcS5jb21wbGV0ZSgmbUVwLT5lcCwgJm1SZXEtPnJlcSk7CiAJCXNwaW5fbG9jayhtRXAtPmxvY2spOwpAQCAtMjMzMiwxMiArMjMzNiw0NyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogR0FER0VUIGJsb2NrCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IGNpMTN4eHhfdmJ1c19zZXNzaW9uKHN0cnVjdCB1c2JfZ2FkZ2V0ICpfZ2FkZ2V0LCBpbnQgaXNfYWN0aXZlKQoreworCXN0cnVjdCBjaTEzeHh4ICp1ZGMgPSBjb250YWluZXJfb2YoX2dhZGdldCwgc3RydWN0IGNpMTN4eHgsIGdhZGdldCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgZ2FkZ2V0X3JlYWR5ID0gMDsKKworCWlmICghKHVkYy0+dWRjX2RyaXZlci0+ZmxhZ3MgJiBDSTEzWFhYX1BVTExVUF9PTl9WQlVTKSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJc3Bpbl9sb2NrX2lycXNhdmUodWRjLT5sb2NrLCBmbGFncyk7CisJdWRjLT52YnVzX2FjdGl2ZSA9IGlzX2FjdGl2ZTsKKwlpZiAodWRjLT5kcml2ZXIpCisJCWdhZGdldF9yZWFkeSA9IDE7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSh1ZGMtPmxvY2ssIGZsYWdzKTsKKworCWlmIChnYWRnZXRfcmVhZHkpIHsKKwkJaWYgKGlzX2FjdGl2ZSkgeworCQkJcG1fcnVudGltZV9nZXRfc3luYygmX2dhZGdldC0+ZGV2KTsKKwkJCWh3X2RldmljZV9yZXNldCh1ZGMpOworCQkJaHdfZGV2aWNlX3N0YXRlKHVkYy0+Y2kxM3h4eF9lcFswXS5xaFtSWF0uZG1hKTsKKwkJfSBlbHNlIHsKKwkJCWh3X2RldmljZV9zdGF0ZSgwKTsKKwkJCWlmICh1ZGMtPnVkY19kcml2ZXItPm5vdGlmeV9ldmVudCkKKwkJCQl1ZGMtPnVkY19kcml2ZXItPm5vdGlmeV9ldmVudCh1ZGMsCisJCQkJQ0kxM1hYWF9DT05UUk9MTEVSX1NUT1BQRURfRVZFTlQpOworCQkJX2dhZGdldF9zdG9wX2FjdGl2aXR5KCZ1ZGMtPmdhZGdldCk7CisJCQlwbV9ydW50aW1lX3B1dF9zeW5jKCZfZ2FkZ2V0LT5kZXYpOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKIC8qKgogICogRGV2aWNlIG9wZXJhdGlvbnMgcGFydCBvZiB0aGUgQVBJIHRvIHRoZSBVU0IgY29udHJvbGxlciBoYXJkd2FyZSwKICAqIHdoaWNoIGRvbid0IGludm9sdmUgZW5kcG9pbnRzIChvciBpL28pCiAgKiBDaGVjayAgInVzYl9nYWRnZXQuaCIgZm9yIGRldGFpbHMKICAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZ2FkZ2V0X29wcyB1c2JfZ2FkZ2V0X29wczsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2dhZGdldF9vcHMgdXNiX2dhZGdldF9vcHMgPSB7CisJLnZidXNfc2Vzc2lvbgk9IGNpMTN4eHhfdmJ1c19zZXNzaW9uLAorfTsKIAogLyoqCiAgKiB1c2JfZ2FkZ2V0X3Byb2JlX2RyaXZlcjogcmVnaXN0ZXIgYSBnYWRnZXQgZHJpdmVyCkBAIC0yMzU4LDcgKzIzOTcsNiBAQAogCiAJaWYgKGRyaXZlciAgICAgICAgICAgICA9PSBOVUxMIHx8CiAJICAgIGJpbmQgICAgICAgICAgICAgICA9PSBOVUxMIHx8Ci0JICAgIGRyaXZlci0+dW5iaW5kICAgICA9PSBOVUxMIHx8CiAJICAgIGRyaXZlci0+c2V0dXAgICAgICA9PSBOVUxMIHx8CiAJICAgIGRyaXZlci0+ZGlzY29ubmVjdCA9PSBOVUxMIHx8CiAJICAgIGRyaXZlci0+c3VzcGVuZCAgICA9PSBOVUxMIHx8CkBAIC0yMzcyLDEzICsyNDEwLDEzIEBACiAJLyogYWxsb2MgcmVzb3VyY2VzICovCiAJdWRjLT5xaF9wb29sID0gZG1hX3Bvb2xfY3JlYXRlKCJjaTEzeHh4X3FoIiwgJnVkYy0+Z2FkZ2V0LmRldiwKIAkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBjaTEzeHh4X3FoKSwKLQkJCQkgICAgICAgNjQsIFBBR0VfU0laRSk7CisJCQkJICAgICAgIDY0LCBDSTEzWFhYX1BBR0VfU0laRSk7CiAJaWYgKHVkYy0+cWhfcG9vbCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCXVkYy0+dGRfcG9vbCA9IGRtYV9wb29sX2NyZWF0ZSgiY2kxM3h4eF90ZCIsICZ1ZGMtPmdhZGdldC5kZXYsCiAJCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgY2kxM3h4eF90ZCksCi0JCQkJICAgICAgIDY0LCBQQUdFX1NJWkUpOworCQkJCSAgICAgICA2NCwgQ0kxM1hYWF9QQUdFX1NJWkUpOwogCWlmICh1ZGMtPnRkX3Bvb2wgPT0gTlVMTCkgewogCQlkbWFfcG9vbF9kZXN0cm95KHVkYy0+cWhfcG9vbCk7CiAJCXVkYy0+cWhfcG9vbCA9IE5VTEw7CkBAIC0yMzkwLDcgKzI0MjgsNiBAQAogCWluZm8oImh3X2VwX21heCA9ICVkIiwgaHdfZXBfbWF4KTsKIAogCXVkYy0+ZHJpdmVyID0gZHJpdmVyOwotCXVkYy0+Z2FkZ2V0Lm9wcyAgICAgICAgPSBOVUxMOwogCXVkYy0+Z2FkZ2V0LmRldi5kcml2ZXIgPSBOVUxMOwogCiAJcmV0dmFsID0gMDsKQEAgLTI0MTAsOSArMjQ0NywxMSBAQAogCQkvKiB0aGlzIGFsbG9jYXRpb24gY2Fubm90IGJlIHJhbmRvbSAqLwogCQlmb3IgKGsgPSBSWDsgayA8PSBUWDsgaysrKSB7CiAJCQlJTklUX0xJU1RfSEVBRCgmbUVwLT5xaFtrXS5xdWV1ZSk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHVkYy0+bG9jaywgZmxhZ3MpOwogCQkJbUVwLT5xaFtrXS5wdHIgPSBkbWFfcG9vbF9hbGxvYyh1ZGMtPnFoX3Bvb2wsCiAJCQkJCQkJR0ZQX0tFUk5FTCwKIAkJCQkJCQkmbUVwLT5xaFtrXS5kbWEpOworCQkJc3Bpbl9sb2NrX2lycXNhdmUodWRjLT5sb2NrLCBmbGFncyk7CiAJCQlpZiAobUVwLT5xaFtrXS5wdHIgPT0gTlVMTCkKIAkJCQlyZXR2YWwgPSAtRU5PTUVNOwogCQkJZWxzZQpAQCAtMjQyOSw3ICsyNDY4LDYgQEAKIAogCS8qIGJpbmQgZ2FkZ2V0ICovCiAJZHJpdmVyLT5kcml2ZXIuYnVzICAgICA9IE5VTEw7Ci0JdWRjLT5nYWRnZXQub3BzICAgICAgICA9ICZ1c2JfZ2FkZ2V0X29wczsKIAl1ZGMtPmdhZGdldC5kZXYuZHJpdmVyID0gJmRyaXZlci0+ZHJpdmVyOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSh1ZGMtPmxvY2ssIGZsYWdzKTsKQEAgLTI0MzcsMTIgKzI0NzUsMjQgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSh1ZGMtPmxvY2ssIGZsYWdzKTsKIAogCWlmIChyZXR2YWwpIHsKLQkJdWRjLT5nYWRnZXQub3BzICAgICAgICA9IE5VTEw7CiAJCXVkYy0+Z2FkZ2V0LmRldi5kcml2ZXIgPSBOVUxMOwogCQlnb3RvIGRvbmU7CiAJfQogCisJcG1fcnVudGltZV9nZXRfc3luYygmdWRjLT5nYWRnZXQuZGV2KTsKKwlpZiAodWRjLT51ZGNfZHJpdmVyLT5mbGFncyAmIENJMTNYWFhfUFVMTFVQX09OX1ZCVVMpIHsKKwkJaWYgKHVkYy0+dmJ1c19hY3RpdmUpIHsKKwkJCWlmICh1ZGMtPnVkY19kcml2ZXItPmZsYWdzICYgQ0kxM1hYWF9SRUdTX1NIQVJFRCkKKwkJCQlod19kZXZpY2VfcmVzZXQodWRjKTsKKwkJfSBlbHNlIHsKKwkJCXBtX3J1bnRpbWVfcHV0X3N5bmMoJnVkYy0+Z2FkZ2V0LmRldik7CisJCQlnb3RvIGRvbmU7CisJCX0KKwl9CisKIAlyZXR2YWwgPSBod19kZXZpY2Vfc3RhdGUodWRjLT5jaTEzeHh4X2VwWzBdLnFoW1JYXS5kbWEpOworCWlmIChyZXR2YWwpCisJCXBtX3J1bnRpbWVfcHV0X3N5bmMoJnVkYy0+Z2FkZ2V0LmRldik7CiAKICBkb25lOgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUodWRjLT5sb2NrLCBmbGFncyk7CkBAIC0yNDc1LDE5ICsyNTI1LDIyIEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSh1ZGMtPmxvY2ssIGZsYWdzKTsKIAotCWh3X2RldmljZV9zdGF0ZSgwKTsKKwlpZiAoISh1ZGMtPnVkY19kcml2ZXItPmZsYWdzICYgQ0kxM1hYWF9QVUxMVVBfT05fVkJVUykgfHwKKwkJCXVkYy0+dmJ1c19hY3RpdmUpIHsKKwkJaHdfZGV2aWNlX3N0YXRlKDApOworCQlpZiAodWRjLT51ZGNfZHJpdmVyLT5ub3RpZnlfZXZlbnQpCisJCQl1ZGMtPnVkY19kcml2ZXItPm5vdGlmeV9ldmVudCh1ZGMsCisJCQlDSTEzWFhYX0NPTlRST0xMRVJfU1RPUFBFRF9FVkVOVCk7CisJCV9nYWRnZXRfc3RvcF9hY3Rpdml0eSgmdWRjLT5nYWRnZXQpOworCQlwbV9ydW50aW1lX3B1dCgmdWRjLT5nYWRnZXQuZGV2KTsKKwl9CiAKIAkvKiB1bmJpbmQgZ2FkZ2V0ICovCi0JaWYgKHVkYy0+Z2FkZ2V0Lm9wcyAhPSBOVUxMKSB7Ci0JCV9nYWRnZXRfc3RvcF9hY3Rpdml0eSgmdWRjLT5nYWRnZXQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUodWRjLT5sb2NrLCBmbGFncyk7CisJZHJpdmVyLT51bmJpbmQoJnVkYy0+Z2FkZ2V0KTsgICAgICAgICAgICAgICAvKiBNQVkgU0xFRVAgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSh1ZGMtPmxvY2ssIGZsYWdzKTsKIAotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHVkYy0+bG9jaywgZmxhZ3MpOwotCQlkcml2ZXItPnVuYmluZCgmdWRjLT5nYWRnZXQpOyAgICAgICAgICAgICAgIC8qIE1BWSBTTEVFUCAqLwotCQlzcGluX2xvY2tfaXJxc2F2ZSh1ZGMtPmxvY2ssIGZsYWdzKTsKLQotCQl1ZGMtPmdhZGdldC5vcHMgICAgICAgID0gTlVMTDsKLQkJdWRjLT5nYWRnZXQuZGV2LmRyaXZlciA9IE5VTEw7Ci0JfQorCXVkYy0+Z2FkZ2V0LmRldi5kcml2ZXIgPSBOVUxMOwogCiAJLyogZnJlZSByZXNvdXJjZXMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgaHdfZXBfbWF4OyBpKyspIHsKQEAgLTI1NDQsNiArMjU5NywxNCBAQAogCX0KIAogCXNwaW5fbG9jayh1ZGMtPmxvY2spOworCisJaWYgKHVkYy0+dWRjX2RyaXZlci0+ZmxhZ3MgJiBDSTEzWFhYX1JFR1NfU0hBUkVEKSB7CisJCWlmIChod19jcmVhZChDQVBfVVNCTU9ERSwgVVNCTU9ERV9DTSkgIT0KKwkJCQlVU0JNT0RFX0NNX0RFVklDRSkgeworCQkJc3Bpbl91bmxvY2sodWRjLT5sb2NrKTsKKwkJCXJldHVybiBJUlFfTk9ORTsKKwkJfQorCX0KIAlpbnRyID0gaHdfdGVzdF9hbmRfY2xlYXJfaW50cl9hY3RpdmUoKTsKIAlpZiAoaW50cikgewogCQlpc3Jfc3RhdGlzdGljcy5obmRsLmJ1Zltpc3Jfc3RhdGlzdGljcy5obmRsLmlkeCsrXSA9IGludHI7CkBAIC0yNjAyLDE0ICsyNjYzLDE2IEBACiAgKiBObyBpbnRlcnJ1cHRzIGFjdGl2ZSwgdGhlIElSUSBoYXMgbm90IGJlZW4gcmVxdWVzdGVkIHlldAogICogS2VybmVsIGFzc3VtZXMgMzItYml0IERNQSBvcGVyYXRpb25zIGJ5IGRlZmF1bHQsIG5vIG5lZWQgdG8gZG1hX3NldF9tYXNrCiAgKi8KLXN0YXRpYyBpbnQgdWRjX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCBfX2lvbWVtICpyZWdzLCBjb25zdCBjaGFyICpuYW1lKQorc3RhdGljIGludCB1ZGNfcHJvYmUoc3RydWN0IGNpMTN4eHhfdWRjX2RyaXZlciAqZHJpdmVyLCBzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXZvaWQgX19pb21lbSAqcmVncykKIHsKIAlzdHJ1Y3QgY2kxM3h4eCAqdWRjOwogCWludCByZXR2YWwgPSAwOwogCiAJdHJhY2UoIiVwLCAlcCwgJXAiLCBkZXYsIHJlZ3MsIG5hbWUpOwogCi0JaWYgKGRldiA9PSBOVUxMIHx8IHJlZ3MgPT0gTlVMTCB8fCBuYW1lID09IE5VTEwpCisJaWYgKGRldiA9PSBOVUxMIHx8IHJlZ3MgPT0gTlVMTCB8fCBkcml2ZXIgPT0gTlVMTCB8fAorCQkJZHJpdmVyLT5uYW1lID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJdWRjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNpMTN4eHgpLCBHRlBfS0VSTkVMKTsKQEAgLTI2MTcsNDIgKzI2ODAsNzcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAl1ZGMtPmxvY2sgPSAmdWRjX2xvY2s7CisJdWRjLT5yZWdzID0gcmVnczsKKwl1ZGMtPnVkY19kcml2ZXIgPSBkcml2ZXI7CiAKLQlyZXR2YWwgPSBod19kZXZpY2VfcmVzZXQocmVncyk7Ci0JaWYgKHJldHZhbCkKLQkJZ290byBkb25lOwotCi0JdWRjLT5nYWRnZXQub3BzICAgICAgICAgID0gTlVMTDsKKwl1ZGMtPmdhZGdldC5vcHMgICAgICAgICAgPSAmdXNiX2dhZGdldF9vcHM7CiAJdWRjLT5nYWRnZXQuc3BlZWQgICAgICAgID0gVVNCX1NQRUVEX1VOS05PV047CiAJdWRjLT5nYWRnZXQuaXNfZHVhbHNwZWVkID0gMTsKIAl1ZGMtPmdhZGdldC5pc19vdGcgICAgICAgPSAwOwotCXVkYy0+Z2FkZ2V0Lm5hbWUgICAgICAgICA9IG5hbWU7CisJdWRjLT5nYWRnZXQubmFtZSAgICAgICAgID0gZHJpdmVyLT5uYW1lOwogCiAJSU5JVF9MSVNUX0hFQUQoJnVkYy0+Z2FkZ2V0LmVwX2xpc3QpOwogCXVkYy0+Z2FkZ2V0LmVwMCA9IE5VTEw7CiAKIAlkZXZfc2V0X25hbWUoJnVkYy0+Z2FkZ2V0LmRldiwgImdhZGdldCIpOwogCXVkYy0+Z2FkZ2V0LmRldi5kbWFfbWFzayA9IGRldi0+ZG1hX21hc2s7CisJdWRjLT5nYWRnZXQuZGV2LmNvaGVyZW50X2RtYV9tYXNrID0gZGV2LT5jb2hlcmVudF9kbWFfbWFzazsKIAl1ZGMtPmdhZGdldC5kZXYucGFyZW50ICAgPSBkZXY7CiAJdWRjLT5nYWRnZXQuZGV2LnJlbGVhc2UgID0gdWRjX3JlbGVhc2U7CiAKKwlyZXR2YWwgPSBod19kZXZpY2VfaW5pdChyZWdzKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJZ290byBmcmVlX3VkYzsKKworCXVkYy0+dHJhbnNjZWl2ZXIgPSBvdGdfZ2V0X3RyYW5zY2VpdmVyKCk7CisKKwlpZiAodWRjLT51ZGNfZHJpdmVyLT5mbGFncyAmIENJMTNYWFhfUkVRVUlSRV9UUkFOU0NFSVZFUikgeworCQlpZiAodWRjLT50cmFuc2NlaXZlciA9PSBOVUxMKSB7CisJCQlyZXR2YWwgPSAtRU5PREVWOworCQkJZ290byBmcmVlX3VkYzsKKwkJfQorCX0KKworCWlmICghKHVkYy0+dWRjX2RyaXZlci0+ZmxhZ3MgJiBDSTEzWFhYX1JFR1NfU0hBUkVEKSkgeworCQlyZXR2YWwgPSBod19kZXZpY2VfcmVzZXQodWRjKTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gcHV0X3RyYW5zY2VpdmVyOworCX0KKwogCXJldHZhbCA9IGRldmljZV9yZWdpc3RlcigmdWRjLT5nYWRnZXQuZGV2KTsKLQlpZiAocmV0dmFsKQotCQlnb3RvIGRvbmU7CisJaWYgKHJldHZhbCkgeworCQlwdXRfZGV2aWNlKCZ1ZGMtPmdhZGdldC5kZXYpOworCQlnb3RvIHB1dF90cmFuc2NlaXZlcjsKKwl9CiAKICNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUwogCXJldHZhbCA9IGRiZ19jcmVhdGVfZmlsZXMoJnVkYy0+Z2FkZ2V0LmRldik7CiAjZW5kaWYKLQlpZiAocmV0dmFsKSB7Ci0JCWRldmljZV91bnJlZ2lzdGVyKCZ1ZGMtPmdhZGdldC5kZXYpOwotCQlnb3RvIGRvbmU7CisJaWYgKHJldHZhbCkKKwkJZ290byB1bnJlZ19kZXZpY2U7CisKKwlpZiAodWRjLT50cmFuc2NlaXZlcikgeworCQlyZXR2YWwgPSBvdGdfc2V0X3BlcmlwaGVyYWwodWRjLT50cmFuc2NlaXZlciwgJnVkYy0+Z2FkZ2V0KTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gcmVtb3ZlX2RiZzsKIAl9CisJcG1fcnVudGltZV9ub19jYWxsYmFja3MoJnVkYy0+Z2FkZ2V0LmRldik7CisJcG1fcnVudGltZV9lbmFibGUoJnVkYy0+Z2FkZ2V0LmRldik7CiAKIAlfdWRjID0gdWRjOwogCXJldHVybiByZXR2YWw7CiAKLSBkb25lOgogCWVycigiZXJyb3IgPSAlaSIsIHJldHZhbCk7CityZW1vdmVfZGJnOgorI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTCisJZGJnX3JlbW92ZV9maWxlcygmdWRjLT5nYWRnZXQuZGV2KTsKKyNlbmRpZgordW5yZWdfZGV2aWNlOgorCWRldmljZV91bnJlZ2lzdGVyKCZ1ZGMtPmdhZGdldC5kZXYpOworcHV0X3RyYW5zY2VpdmVyOgorCWlmICh1ZGMtPnRyYW5zY2VpdmVyKQorCQlvdGdfcHV0X3RyYW5zY2VpdmVyKHVkYy0+dHJhbnNjZWl2ZXIpOworZnJlZV91ZGM6CiAJa2ZyZWUodWRjKTsKIAlfdWRjID0gTlVMTDsKIAlyZXR1cm4gcmV0dmFsOwpAQCAtMjY3Miw2ICsyNzcwLDEwIEBACiAJCXJldHVybjsKIAl9CiAKKwlpZiAodWRjLT50cmFuc2NlaXZlcikgeworCQlvdGdfc2V0X3BlcmlwaGVyYWwodWRjLT50cmFuc2NlaXZlciwgJnVkYy0+Z2FkZ2V0KTsKKwkJb3RnX3B1dF90cmFuc2NlaXZlcih1ZGMtPnRyYW5zY2VpdmVyKTsKKwl9CiAjaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMKIAlkYmdfcmVtb3ZlX2ZpbGVzKCZ1ZGMtPmdhZGdldC5kZXYpOwogI2VuZGlmCkBAIC0yNjgwLDE1NiArMjc4MiwzIEBACiAJa2ZyZWUodWRjKTsKIAlfdWRjID0gTlVMTDsKIH0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogUENJIGJsb2NrCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKioKLSAqIGNpMTN4eHhfcGNpX2lycTogaW50ZXJydXQgaGFuZGxlcgotICogQGlycTogIGlycSBudW1iZXIKLSAqIEBwZGV2OiBVU0IgRGV2aWNlIENvbnRyb2xsZXIgaW50ZXJydXB0IHNvdXJjZQotICoKLSAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBJUlFfSEFORExFRCBpZiB0aGUgSVJRIGhhcyBiZWVuIGhhbmRsZWQKLSAqIFRoaXMgaXMgYW4gSVNSIGRvbid0IHRyYWNlLCB1c2UgYXR0cmlidXRlIGludGVyZmFjZSBpbnN0ZWFkCi0gKi8KLXN0YXRpYyBpcnFyZXR1cm5fdCBjaTEzeHh4X3BjaV9pcnEoaW50IGlycSwgdm9pZCAqcGRldikKLXsKLQlpZiAoaXJxID09IDApIHsKLQkJZGV2X2VycigmKChzdHJ1Y3QgcGNpX2RldiAqKXBkZXYpLT5kZXYsICJJbnZhbGlkIElSUTAgdXNhZ2UhIik7Ci0JCXJldHVybiBJUlFfSEFORExFRDsKLQl9Ci0JcmV0dXJuIHVkY19pcnEoKTsKLX0KLQotLyoqCi0gKiBjaTEzeHh4X3BjaV9wcm9iZTogUENJIHByb2JlCi0gKiBAcGRldjogVVNCIGRldmljZSBjb250cm9sbGVyIGJlaW5nIHByb2JlZAotICogQGlkOiAgIFBDSSBob3RwbHVnIElEIGNvbm5lY3RpbmcgY29udHJvbGxlciB0byBVREMgZnJhbWV3b3JrCi0gKgotICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIGVycm9yIGNvZGUKLSAqIEFsbG9jYXRlcyBiYXNpYyBQQ0kgcmVzb3VyY2VzIGZvciB0aGlzIFVTQiBkZXZpY2UgY29udHJvbGxlciwgYW5kIHRoZW4KLSAqIGludm9rZXMgdGhlIHVkY19wcm9iZSgpIG1ldGhvZCB0byBzdGFydCB0aGUgVURDIGFzc29jaWF0ZWQgd2l0aCBpdAotICovCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBjaTEzeHh4X3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKLQkJCQkgICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQotewotCXZvaWQgX19pb21lbSAqcmVncyA9IE5VTEw7Ci0JaW50IHJldHZhbCA9IDA7Ci0KLQlpZiAoaWQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXR2YWwgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKLQlpZiAocmV0dmFsKQotCQlnb3RvIGRvbmU7Ci0KLQlpZiAoIXBkZXYtPmlycSkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJObyBJUlEsIGNoZWNrIEJJT1MvUENJIHNldHVwISIpOwotCQlyZXR2YWwgPSAtRU5PREVWOwotCQlnb3RvIGRpc2FibGVfZGV2aWNlOwotCX0KLQotCXJldHZhbCA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgVURDX0RSSVZFUl9OQU1FKTsKLQlpZiAocmV0dmFsKQotCQlnb3RvIGRpc2FibGVfZGV2aWNlOwotCi0JLyogQkFSIDAgaG9sZHMgYWxsIHRoZSByZWdpc3RlcnMgKi8KLQlyZWdzID0gcGNpX2lvbWFwKHBkZXYsIDAsIDApOwotCWlmICghcmVncykgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJFcnJvciBtYXBwaW5nIG1lbW9yeSEiKTsKLQkJcmV0dmFsID0gLUVGQVVMVDsKLQkJZ290byByZWxlYXNlX3JlZ2lvbnM7Ci0JfQotCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCAoX19mb3JjZSB2b2lkICopcmVncyk7Ci0KLQlwY2lfc2V0X21hc3RlcihwZGV2KTsKLQlwY2lfdHJ5X3NldF9td2kocGRldik7Ci0KLQlyZXR2YWwgPSB1ZGNfcHJvYmUoJnBkZXYtPmRldiwgcmVncywgVURDX0RSSVZFUl9OQU1FKTsKLQlpZiAocmV0dmFsKQotCQlnb3RvIGlvdW5tYXA7Ci0KLQkvKiBvdXIgZGV2aWNlIGRvZXMgbm90IGhhdmUgTVNJIGNhcGFiaWxpdHkgKi8KLQotCXJldHZhbCA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgY2kxM3h4eF9wY2lfaXJxLCBJUlFGX1NIQVJFRCwKLQkJCSAgICAgVURDX0RSSVZFUl9OQU1FLCBwZGV2KTsKLQlpZiAocmV0dmFsKQotCQlnb3RvIGdhZGdldF9yZW1vdmU7Ci0KLQlyZXR1cm4gMDsKLQotIGdhZGdldF9yZW1vdmU6Ci0JdWRjX3JlbW92ZSgpOwotIGlvdW5tYXA6Ci0JcGNpX2lvdW5tYXAocGRldiwgcmVncyk7Ci0gcmVsZWFzZV9yZWdpb25zOgotCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7Ci0gZGlzYWJsZV9kZXZpY2U6Ci0JcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwotIGRvbmU6Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQotLyoqCi0gKiBjaTEzeHh4X3BjaV9yZW1vdmU6IFBDSSByZW1vdmUKLSAqIEBwZGV2OiBVU0IgRGV2aWNlIENvbnRyb2xsZXIgYmVpbmcgcmVtb3ZlZAotICoKLSAqIFJldmVyc2VzIHRoZSBlZmZlY3Qgb2YgY2kxM3h4eF9wY2lfcHJvYmUoKSwKLSAqIGZpcnN0IGludm9raW5nIHRoZSB1ZGNfcmVtb3ZlKCkgYW5kIHRoZW4gcmVsZWFzZXMKLSAqIGFsbCBQQ0kgcmVzb3VyY2VzIGFsbG9jYXRlZCBmb3IgdGhpcyBVU0IgZGV2aWNlIGNvbnRyb2xsZXIKLSAqLwotc3RhdGljIHZvaWQgX19kZXZleGl0IGNpMTN4eHhfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKLXsKLQlmcmVlX2lycShwZGV2LT5pcnEsIHBkZXYpOwotCXVkY19yZW1vdmUoKTsKLQlwY2lfaW91bm1hcChwZGV2LCAoX19mb3JjZSB2b2lkIF9faW9tZW0gKilwY2lfZ2V0X2RydmRhdGEocGRldikpOwotCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7Ci0JcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwotfQotCi0vKioKLSAqIFBDSSBkZXZpY2UgdGFibGUKLSAqIFBDSSBkZXZpY2Ugc3RydWN0dXJlCi0gKgotICogQ2hlY2sgInBjaS5oIiBmb3IgZGV0YWlscwotICovCi1zdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoY2kxM3h4eF9wY2lfaWRfdGFibGUpID0gewotCXsgUENJX0RFVklDRSgweDE1M0YsIDB4MTAwNCkgfSwKLQl7IFBDSV9ERVZJQ0UoMHgxNTNGLCAweDEwMDYpIH0sCi0JeyAwLCAwLCAwLCAwLCAwLCAwLCAwIC8qIGVuZDogYWxsIHplcm9lcyAqLyB9Ci19OwotTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGNpMTN4eHhfcGNpX2lkX3RhYmxlKTsKLQotc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGNpMTN4eHhfcGNpX2RyaXZlciA9IHsKLQkubmFtZSAgICAgICAgID0JVURDX0RSSVZFUl9OQU1FLAotCS5pZF90YWJsZSAgICAgPQljaTEzeHh4X3BjaV9pZF90YWJsZSwKLQkucHJvYmUgICAgICAgID0JY2kxM3h4eF9wY2lfcHJvYmUsCi0JLnJlbW92ZSAgICAgICA9CV9fZGV2ZXhpdF9wKGNpMTN4eHhfcGNpX3JlbW92ZSksCi19OwotCi0vKioKLSAqIGNpMTN4eHhfcGNpX2luaXQ6IG1vZHVsZSBpbml0Ci0gKgotICogRHJpdmVyIGxvYWQKLSAqLwotc3RhdGljIGludCBfX2luaXQgY2kxM3h4eF9wY2lfaW5pdCh2b2lkKQotewotCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZjaTEzeHh4X3BjaV9kcml2ZXIpOwotfQotbW9kdWxlX2luaXQoY2kxM3h4eF9wY2lfaW5pdCk7Ci0KLS8qKgotICogY2kxM3h4eF9wY2lfZXhpdDogbW9kdWxlIGV4aXQKLSAqCi0gKiBEcml2ZXIgdW5sb2FkCi0gKi8KLXN0YXRpYyB2b2lkIF9fZXhpdCBjaTEzeHh4X3BjaV9leGl0KHZvaWQpCi17Ci0JcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZjaTEzeHh4X3BjaV9kcml2ZXIpOwotfQotbW9kdWxlX2V4aXQoY2kxM3h4eF9wY2lfZXhpdCk7Ci0KLU1PRFVMRV9BVVRIT1IoIk1JUFMgLSBEYXZpZCBMb3BvIDxkbG9wb0BjaGlwaWRlYS5taXBzLmNvbT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiTUlQUyBDSTEzWFhYIFVTQiBQZXJpcGhlcmFsIENvbnRyb2xsZXIiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9WRVJTSU9OKCJKdW5lIDIwMDgiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9jaTEzeHh4X3VkYy5oIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2NpMTN4eHhfdWRjLmgKaW5kZXggNDAyNmU5Yy4uZjYxZmVkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2NpMTN4eHhfdWRjLmgKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2NpMTN4eHhfdWRjLmgKQEAgLTE5LDYgKzE5LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIERFRklORQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBDSTEzWFhYX1BBR0VfU0laRSAgNDA5NnVsIC8qIHBhZ2Ugc2l6ZSBmb3IgVEQncyAqLwogI2RlZmluZSBFTkRQVF9NQVggICAgICAgICAgKDE2KQogI2RlZmluZSBDVFJMX1BBWUxPQURfTUFYICAgKDY0KQogI2RlZmluZSBSWCAgICAgICAgKDApICAvKiBzaW1pbGFyIHRvIFVTQl9ESVJfT1VUIGJ1dCBjYW4gYmUgdXNlZCBhcyBhbiBpbmRleCAqLwpAQCAtOTcsOSArOTgsMjQgQEAKIAlzdHJ1Y3QgZG1hX3Bvb2wgICAgICAgICAgICAgICAgICAgICAgICp0ZF9wb29sOwogfTsKIAorc3RydWN0IGNpMTN4eHg7CitzdHJ1Y3QgY2kxM3h4eF91ZGNfZHJpdmVyIHsKKwljb25zdCBjaGFyCSpuYW1lOworCXVuc2lnbmVkIGxvbmcJIGZsYWdzOworI2RlZmluZSBDSTEzWFhYX1JFR1NfU0hBUkVECQlCSVQoMCkKKyNkZWZpbmUgQ0kxM1hYWF9SRVFVSVJFX1RSQU5TQ0VJVkVSCUJJVCgxKQorI2RlZmluZSBDSTEzWFhYX1BVTExVUF9PTl9WQlVTCQlCSVQoMikKKyNkZWZpbmUgQ0kxM1hYWF9ESVNBQkxFX1NUUkVBTUlORwlCSVQoMykKKworI2RlZmluZSBDSTEzWFhYX0NPTlRST0xMRVJfUkVTRVRfRVZFTlQJCTAKKyNkZWZpbmUgQ0kxM1hYWF9DT05UUk9MTEVSX1NUT1BQRURfRVZFTlQJMQorCXZvaWQJKCpub3RpZnlfZXZlbnQpIChzdHJ1Y3QgY2kxM3h4eCAqdWRjLCB1bnNpZ25lZCBldmVudCk7Cit9OworCiAvKiBDSTEzWFhYIFVEQyBkZXNjcmlwdG9yICYgZ2xvYmFsIHJlc291cmNlcyAqLwogc3RydWN0IGNpMTN4eHggewogCXNwaW5sb2NrX3QJCSAgKmxvY2s7ICAgICAgLyogY3RybCByZWdpc3RlciBiYW5rIGFjY2VzcyAqLworCXZvaWQgX19pb21lbSAgICAgICAgICAgICAgKnJlZ3M7ICAgICAgLyogcmVnaXN0ZXJzIGFkZHJlc3Mgc3BhY2UgKi8KIAogCXN0cnVjdCBkbWFfcG9vbCAgICAgICAgICAgKnFoX3Bvb2w7ICAgLyogRE1BIHBvb2wgZm9yIHF1ZXVlIGhlYWRzICovCiAJc3RydWN0IGRtYV9wb29sICAgICAgICAgICAqdGRfcG9vbDsgICAvKiBETUEgcG9vbCBmb3IgdHJhbnNmZXIgZGVzY3MgKi8KQEAgLTEwOCw2ICsxMjQsOSBAQAogCXN0cnVjdCBjaTEzeHh4X2VwICAgICAgICAgIGNpMTN4eHhfZXBbRU5EUFRfTUFYXTsgLyogZXh0ZW5kZWQgZW5kcHRzICovCiAKIAlzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgICpkcml2ZXI7ICAgICAvKiAzcmQgcGFydHkgZ2FkZ2V0IGRyaXZlciAqLworCXN0cnVjdCBjaTEzeHh4X3VkY19kcml2ZXIgKnVkY19kcml2ZXI7IC8qIGRldmljZSBjb250cm9sbGVyIGRyaXZlciAqLworCWludCAgICAgICAgICAgICAgICAgICAgICAgIHZidXNfYWN0aXZlOyAvKiBpcyBWQlVTIGFjdGl2ZSAqLworCXN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIgICAgKnRyYW5zY2VpdmVyOyAvKiBUcmFuc2NlaXZlciBzdHJ1Y3QgKi8KIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTE1Nyw2ICsxNzYsNyBAQAogI2RlZmluZSAgICBVU0JNT0RFX0NNX0RFVklDRSAgKDB4MDJVTCA8PCAgMCkKICNkZWZpbmUgICAgVVNCTU9ERV9DTV9IT1NUICAgICgweDAzVUwgPDwgIDApCiAjZGVmaW5lIFVTQk1PREVfU0xPTSAgICAgICAgICBCSVQoMykKKyNkZWZpbmUgVVNCTU9ERV9TRElTICAgICAgICAgIEJJVCg0KQogCiAvKiBFTkRQVENUUkwgKi8KICNkZWZpbmUgRU5EUFRDVFJMX1JYUyAgICAgICAgIEJJVCgwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2NvbXBvc2l0ZS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2NvbXBvc2l0ZS5jCmluZGV4IDg1NzJkYWQuLmY2ZmY4NDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9jb21wb3NpdGUuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvY29tcG9zaXRlLmMKQEAgLTExMjYsNyArMTEyNiw3IEBACiAJaWYgKGJjZERldmljZSkKIAkJY2Rldi0+ZGVzYy5iY2REZXZpY2UgPSBjcHVfdG9fbGUxNihiY2REZXZpY2UpOwogCi0JLyogc3Rpcm5nIG92ZXJyaWRlcyAqLworCS8qIHN0cmluZyBvdmVycmlkZXMgKi8KIAlpZiAoaU1hbnVmYWN0dXJlciB8fCAhY2Rldi0+ZGVzYy5pTWFudWZhY3R1cmVyKSB7CiAJCWlmICghaU1hbnVmYWN0dXJlciAmJiAhY29tcG9zaXRlLT5pTWFudWZhY3R1cmVyICYmCiAJCSAgICAhKmNvbXBvc2l0ZV9tYW51ZmFjdHVyZXIpCkBAIC0xMTg4LDYgKzExODgsOCBAQAogCQljb21wb3NpdGUtPnN1c3BlbmQoY2Rldik7CiAKIAljZGV2LT5zdXNwZW5kZWQgPSAxOworCisJdXNiX2dhZGdldF92YnVzX2RyYXcoZ2FkZ2V0LCAyKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTExOTUsNiArMTE5Nyw3IEBACiB7CiAJc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2CSpjZGV2ID0gZ2V0X2dhZGdldF9kYXRhKGdhZGdldCk7CiAJc3RydWN0IHVzYl9mdW5jdGlvbgkJKmY7CisJdTgJCQkJbWF4cG93ZXI7CiAKIAkvKiBSRVZJU0lUOiAgc2hvdWxkIHdlIGhhdmUgY29uZmlnIGxldmVsCiAJICogc3VzcGVuZC9yZXN1bWUgY2FsbGJhY2tzPwpAQCAtMTIwNyw2ICsxMjEwLDExIEBACiAJCQlpZiAoZi0+cmVzdW1lKQogCQkJCWYtPnJlc3VtZShmKTsKIAkJfQorCisJCW1heHBvd2VyID0gY2Rldi0+Y29uZmlnLT5iTWF4UG93ZXI7CisKKwkJdXNiX2dhZGdldF92YnVzX2RyYXcoZ2FkZ2V0LCBtYXhwb3dlciA/CisJCQkoMiAqIG1heHBvd2VyKSA6IENPTkZJR19VU0JfR0FER0VUX1ZCVVNfRFJBVyk7CiAJfQogCiAJY2Rldi0+c3VzcGVuZGVkID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9kdW1teV9oY2QuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9kdW1teV9oY2QuYwppbmRleCAxZDJhMmFiLi4xM2I5ZjQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZHVtbXlfaGNkLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2R1bW15X2hjZC5jCkBAIC0xMTk3LDYgKzExOTcsMTM5IEBACiAjZGVmaW5lIEVwX1JlcXVlc3QJKFVTQl9UWVBFX1NUQU5EQVJEIHwgVVNCX1JFQ0lQX0VORFBPSU5UKQogI2RlZmluZSBFcF9JblJlcXVlc3QJKEVwX1JlcXVlc3QgfCBVU0JfRElSX0lOKQogCisKKy8qKgorICogaGFuZGxlX2NvbnRyb2xfcmVxdWVzdCgpIC0gaGFuZGxlcyBhbGwgY29udHJvbCB0cmFuc2ZlcnMKKyAqIEBkdW06IHBvaW50ZXIgdG8gZHVtbXkgKHRoZV9jb250cm9sbGVyKQorICogQHVyYjogdGhlIHVyYiByZXF1ZXN0IHRvIGhhbmRsZQorICogQHNldHVwOiBwb2ludGVyIHRvIHRoZSBzZXR1cCBkYXRhIGZvciBhIFVTQiBkZXZpY2UgY29udHJvbAorICoJIHJlcXVlc3QKKyAqIEBzdGF0dXM6IHBvaW50ZXIgdG8gcmVxdWVzdCBoYW5kbGluZyBzdGF0dXMKKyAqCisgKiBSZXR1cm4gMCAtIGlmIHRoZSByZXF1ZXN0IHdhcyBoYW5kbGVkCisgKgkgIDEgLSBpZiB0aGUgcmVxdWVzdCB3YXNuJ3QgaGFuZGxlcworICoJICBlcnJvciBjb2RlIG9uIGVycm9yCisgKi8KK3N0YXRpYyBpbnQgaGFuZGxlX2NvbnRyb2xfcmVxdWVzdChzdHJ1Y3QgZHVtbXkgKmR1bSwgc3RydWN0IHVyYiAqdXJiLAorCQkJCSAgc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqc2V0dXAsCisJCQkJICBpbnQgKnN0YXR1cykKK3sKKwlzdHJ1Y3QgZHVtbXlfZXAJCSplcDI7CisJaW50CQkJcmV0X3ZhbCA9IDE7CisJdW5zaWduZWQJd19pbmRleDsKKwl1bnNpZ25lZAl3X3ZhbHVlOworCisJd19pbmRleCA9IGxlMTZfdG9fY3B1KHNldHVwLT53SW5kZXgpOworCXdfdmFsdWUgPSBsZTE2X3RvX2NwdShzZXR1cC0+d1ZhbHVlKTsKKwlzd2l0Y2ggKHNldHVwLT5iUmVxdWVzdCkgeworCWNhc2UgVVNCX1JFUV9TRVRfQUREUkVTUzoKKwkJaWYgKHNldHVwLT5iUmVxdWVzdFR5cGUgIT0gRGV2X1JlcXVlc3QpCisJCQlicmVhazsKKwkJZHVtLT5hZGRyZXNzID0gd192YWx1ZTsKKwkJKnN0YXR1cyA9IDA7CisJCWRldl9kYmcodWRjX2RldihkdW0pLCAic2V0X2FkZHJlc3MgPSAlZFxuIiwKKwkJCQl3X3ZhbHVlKTsKKwkJcmV0X3ZhbCA9IDA7CisJCWJyZWFrOworCWNhc2UgVVNCX1JFUV9TRVRfRkVBVFVSRToKKwkJaWYgKHNldHVwLT5iUmVxdWVzdFR5cGUgPT0gRGV2X1JlcXVlc3QpIHsKKwkJCXJldF92YWwgPSAwOworCQkJc3dpdGNoICh3X3ZhbHVlKSB7CisJCQljYXNlIFVTQl9ERVZJQ0VfUkVNT1RFX1dBS0VVUDoKKwkJCQlicmVhazsKKwkJCWNhc2UgVVNCX0RFVklDRV9CX0hOUF9FTkFCTEU6CisJCQkJZHVtLT5nYWRnZXQuYl9obnBfZW5hYmxlID0gMTsKKwkJCQlicmVhazsKKwkJCWNhc2UgVVNCX0RFVklDRV9BX0hOUF9TVVBQT1JUOgorCQkJCWR1bS0+Z2FkZ2V0LmFfaG5wX3N1cHBvcnQgPSAxOworCQkJCWJyZWFrOworCQkJY2FzZSBVU0JfREVWSUNFX0FfQUxUX0hOUF9TVVBQT1JUOgorCQkJCWR1bS0+Z2FkZ2V0LmFfYWx0X2hucF9zdXBwb3J0ID0gMTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJcmV0X3ZhbCA9IC1FT1BOT1RTVVBQOworCQkJfQorCQkJaWYgKHJldF92YWwgPT0gMCkgeworCQkJCWR1bS0+ZGV2c3RhdHVzIHw9ICgxIDw8IHdfdmFsdWUpOworCQkJCSpzdGF0dXMgPSAwOworCQkJfQorCQl9IGVsc2UgaWYgKHNldHVwLT5iUmVxdWVzdFR5cGUgPT0gRXBfUmVxdWVzdCkgeworCQkJLyogZW5kcG9pbnQgaGFsdCAqLworCQkJZXAyID0gZmluZF9lbmRwb2ludChkdW0sIHdfaW5kZXgpOworCQkJaWYgKCFlcDIgfHwgZXAyLT5lcC5uYW1lID09IGVwMG5hbWUpIHsKKwkJCQlyZXRfdmFsID0gLUVPUE5PVFNVUFA7CisJCQkJYnJlYWs7CisJCQl9CisJCQllcDItPmhhbHRlZCA9IDE7CisJCQlyZXRfdmFsID0gMDsKKwkJCSpzdGF0dXMgPSAwOworCQl9CisJCWJyZWFrOworCWNhc2UgVVNCX1JFUV9DTEVBUl9GRUFUVVJFOgorCQlpZiAoc2V0dXAtPmJSZXF1ZXN0VHlwZSA9PSBEZXZfUmVxdWVzdCkgeworCQkJcmV0X3ZhbCA9IDA7CisJCQlzd2l0Y2ggKHdfdmFsdWUpIHsKKwkJCWNhc2UgVVNCX0RFVklDRV9SRU1PVEVfV0FLRVVQOgorCQkJCXdfdmFsdWUgPSBVU0JfREVWSUNFX1JFTU9URV9XQUtFVVA7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXJldF92YWwgPSAtRU9QTk9UU1VQUDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChyZXRfdmFsID09IDApIHsKKwkJCQlkdW0tPmRldnN0YXR1cyAmPSB+KDEgPDwgd192YWx1ZSk7CisJCQkJKnN0YXR1cyA9IDA7CisJCQl9CisJCX0gZWxzZSBpZiAoc2V0dXAtPmJSZXF1ZXN0VHlwZSA9PSBFcF9SZXF1ZXN0KSB7CisJCQkvKiBlbmRwb2ludCBoYWx0ICovCisJCQllcDIgPSBmaW5kX2VuZHBvaW50KGR1bSwgd19pbmRleCk7CisJCQlpZiAoIWVwMikgeworCQkJCXJldF92YWwgPSAtRU9QTk9UU1VQUDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmICghZXAyLT53ZWRnZWQpCisJCQkJZXAyLT5oYWx0ZWQgPSAwOworCQkJcmV0X3ZhbCA9IDA7CisJCQkqc3RhdHVzID0gMDsKKwkJfQorCQlicmVhazsKKwljYXNlIFVTQl9SRVFfR0VUX1NUQVRVUzoKKwkJaWYgKHNldHVwLT5iUmVxdWVzdFR5cGUgPT0gRGV2X0luUmVxdWVzdAorCQkJCXx8IHNldHVwLT5iUmVxdWVzdFR5cGUgPT0gSW50Zl9JblJlcXVlc3QKKwkJCQl8fCBzZXR1cC0+YlJlcXVlc3RUeXBlID09IEVwX0luUmVxdWVzdCkgeworCQkJY2hhciAqYnVmOworCQkJLyoKKwkJCSAqIGRldmljZTogcmVtb3RlIHdha2V1cCwgc2VsZnBvd2VyZWQKKwkJCSAqIGludGVyZmFjZTogbm90aGluZworCQkJICogZW5kcG9pbnQ6IGhhbHQKKwkJCSAqLworCQkJYnVmID0gKGNoYXIgKil1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwkJCWlmICh1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPiAwKSB7CisJCQkJaWYgKHNldHVwLT5iUmVxdWVzdFR5cGUgPT0gRXBfSW5SZXF1ZXN0KSB7CisJCQkJCWVwMiA9IGZpbmRfZW5kcG9pbnQoZHVtLCB3X2luZGV4KTsKKwkJCQkJaWYgKCFlcDIpIHsKKwkJCQkJCXJldF92YWwgPSAtRU9QTk9UU1VQUDsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWJ1ZlswXSA9IGVwMi0+aGFsdGVkOworCQkJCX0gZWxzZSBpZiAoc2V0dXAtPmJSZXF1ZXN0VHlwZSA9PQorCQkJCQkgICBEZXZfSW5SZXF1ZXN0KSB7CisJCQkJCWJ1ZlswXSA9ICh1OClkdW0tPmRldnN0YXR1czsKKwkJCQl9IGVsc2UKKwkJCQkJYnVmWzBdID0gMDsKKwkJCX0KKwkJCWlmICh1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPiAxKQorCQkJCWJ1ZlsxXSA9IDA7CisJCQl1cmItPmFjdHVhbF9sZW5ndGggPSBtaW5fdCh1MzIsIDIsCisJCQkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKKwkJCXJldF92YWwgPSAwOworCQkJKnN0YXR1cyA9IDA7CisJCX0KKwkJYnJlYWs7CisJfQorCXJldHVybiByZXRfdmFsOworfQorCiAvKiBkcml2ZSBib3RoIHNpZGVzIG9mIHRoZSB0cmFuc2ZlcnM7IGxvb2tzIGxpa2UgaXJxIGhhbmRsZXJzIHRvCiAgKiBib3RoIGRyaXZlcnMgZXhjZXB0IHRoZSBjYWxsYmFja3MgYXJlbid0IGluX2lycSgpLgogICovCkBAIC0xMjk5LDE0ICsxNDMyLDggQEAKIAkJaWYgKGVwID09ICZkdW0tPmVwIFswXSAmJiBlcC0+c2V0dXBfc3RhZ2UpIHsKIAkJCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QJCXNldHVwOwogCQkJaW50CQkJCXZhbHVlID0gMTsKLQkJCXN0cnVjdCBkdW1teV9lcAkJCSplcDI7Ci0JCQl1bnNpZ25lZAkJCXdfaW5kZXg7Ci0JCQl1bnNpZ25lZAkJCXdfdmFsdWU7CiAKIAkJCXNldHVwID0gKihzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0KikgdXJiLT5zZXR1cF9wYWNrZXQ7Ci0JCQl3X2luZGV4ID0gbGUxNl90b19jcHUoc2V0dXAud0luZGV4KTsKLQkJCXdfdmFsdWUgPSBsZTE2X3RvX2NwdShzZXR1cC53VmFsdWUpOwotCiAJCQkvKiBwYXJhbm9pYSwgaW4gY2FzZSBvZiBzdGFsZSBxdWV1ZWQgZGF0YSAqLwogCQkJbGlzdF9mb3JfZWFjaF9lbnRyeSAocmVxLCAmZXAtPnF1ZXVlLCBxdWV1ZSkgewogCQkJCWxpc3RfZGVsX2luaXQgKCZyZXEtPnF1ZXVlKTsKQEAgLTEzMjgsMTE3ICsxNDU1LDkgQEAKIAkJCWVwLT5sYXN0X2lvID0gamlmZmllczsKIAkJCWVwLT5zZXR1cF9zdGFnZSA9IDA7CiAJCQllcC0+aGFsdGVkID0gMDsKLQkJCXN3aXRjaCAoc2V0dXAuYlJlcXVlc3QpIHsKLQkJCWNhc2UgVVNCX1JFUV9TRVRfQUREUkVTUzoKLQkJCQlpZiAoc2V0dXAuYlJlcXVlc3RUeXBlICE9IERldl9SZXF1ZXN0KQotCQkJCQlicmVhazsKLQkJCQlkdW0tPmFkZHJlc3MgPSB3X3ZhbHVlOwotCQkJCXN0YXR1cyA9IDA7Ci0JCQkJZGV2X2RiZyAodWRjX2RldihkdW0pLCAic2V0X2FkZHJlc3MgPSAlZFxuIiwKLQkJCQkJCXdfdmFsdWUpOwotCQkJCXZhbHVlID0gMDsKLQkJCQlicmVhazsKLQkJCWNhc2UgVVNCX1JFUV9TRVRfRkVBVFVSRToKLQkJCQlpZiAoc2V0dXAuYlJlcXVlc3RUeXBlID09IERldl9SZXF1ZXN0KSB7Ci0JCQkJCXZhbHVlID0gMDsKLQkJCQkJc3dpdGNoICh3X3ZhbHVlKSB7Ci0JCQkJCWNhc2UgVVNCX0RFVklDRV9SRU1PVEVfV0FLRVVQOgotCQkJCQkJYnJlYWs7Ci0JCQkJCWNhc2UgVVNCX0RFVklDRV9CX0hOUF9FTkFCTEU6Ci0JCQkJCQlkdW0tPmdhZGdldC5iX2hucF9lbmFibGUgPSAxOwotCQkJCQkJYnJlYWs7Ci0JCQkJCWNhc2UgVVNCX0RFVklDRV9BX0hOUF9TVVBQT1JUOgotCQkJCQkJZHVtLT5nYWRnZXQuYV9obnBfc3VwcG9ydCA9IDE7Ci0JCQkJCQlicmVhazsKLQkJCQkJY2FzZSBVU0JfREVWSUNFX0FfQUxUX0hOUF9TVVBQT1JUOgotCQkJCQkJZHVtLT5nYWRnZXQuYV9hbHRfaG5wX3N1cHBvcnQKLQkJCQkJCQk9IDE7Ci0JCQkJCQlicmVhazsKLQkJCQkJZGVmYXVsdDoKLQkJCQkJCXZhbHVlID0gLUVPUE5PVFNVUFA7Ci0JCQkJCX0KLQkJCQkJaWYgKHZhbHVlID09IDApIHsKLQkJCQkJCWR1bS0+ZGV2c3RhdHVzIHw9Ci0JCQkJCQkJKDEgPDwgd192YWx1ZSk7Ci0JCQkJCQlzdGF0dXMgPSAwOwotCQkJCQl9CiAKLQkJCQl9IGVsc2UgaWYgKHNldHVwLmJSZXF1ZXN0VHlwZSA9PSBFcF9SZXF1ZXN0KSB7Ci0JCQkJCS8vIGVuZHBvaW50IGhhbHQKLQkJCQkJZXAyID0gZmluZF9lbmRwb2ludCAoZHVtLCB3X2luZGV4KTsKLQkJCQkJaWYgKCFlcDIgfHwgZXAyLT5lcC5uYW1lID09IGVwMG5hbWUpIHsKLQkJCQkJCXZhbHVlID0gLUVPUE5PVFNVUFA7Ci0JCQkJCQlicmVhazsKLQkJCQkJfQotCQkJCQllcDItPmhhbHRlZCA9IDE7Ci0JCQkJCXZhbHVlID0gMDsKLQkJCQkJc3RhdHVzID0gMDsKLQkJCQl9Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFVTQl9SRVFfQ0xFQVJfRkVBVFVSRToKLQkJCQlpZiAoc2V0dXAuYlJlcXVlc3RUeXBlID09IERldl9SZXF1ZXN0KSB7Ci0JCQkJCXN3aXRjaCAod192YWx1ZSkgewotCQkJCQljYXNlIFVTQl9ERVZJQ0VfUkVNT1RFX1dBS0VVUDoKLQkJCQkJCWR1bS0+ZGV2c3RhdHVzICY9IH4oMSA8PAotCQkJCQkJCVVTQl9ERVZJQ0VfUkVNT1RFX1dBS0VVUCk7Ci0JCQkJCQl2YWx1ZSA9IDA7Ci0JCQkJCQlzdGF0dXMgPSAwOwotCQkJCQkJYnJlYWs7Ci0JCQkJCWRlZmF1bHQ6Ci0JCQkJCQl2YWx1ZSA9IC1FT1BOT1RTVVBQOwotCQkJCQkJYnJlYWs7Ci0JCQkJCX0KLQkJCQl9IGVsc2UgaWYgKHNldHVwLmJSZXF1ZXN0VHlwZSA9PSBFcF9SZXF1ZXN0KSB7Ci0JCQkJCS8vIGVuZHBvaW50IGhhbHQKLQkJCQkJZXAyID0gZmluZF9lbmRwb2ludCAoZHVtLCB3X2luZGV4KTsKLQkJCQkJaWYgKCFlcDIpIHsKLQkJCQkJCXZhbHVlID0gLUVPUE5PVFNVUFA7Ci0JCQkJCQlicmVhazsKLQkJCQkJfQotCQkJCQlpZiAoIWVwMi0+d2VkZ2VkKQotCQkJCQkJZXAyLT5oYWx0ZWQgPSAwOwotCQkJCQl2YWx1ZSA9IDA7Ci0JCQkJCXN0YXR1cyA9IDA7Ci0JCQkJfQotCQkJCWJyZWFrOwotCQkJY2FzZSBVU0JfUkVRX0dFVF9TVEFUVVM6Ci0JCQkJaWYgKHNldHVwLmJSZXF1ZXN0VHlwZSA9PSBEZXZfSW5SZXF1ZXN0Ci0JCQkJCQl8fCBzZXR1cC5iUmVxdWVzdFR5cGUKLQkJCQkJCQk9PSBJbnRmX0luUmVxdWVzdAotCQkJCQkJfHwgc2V0dXAuYlJlcXVlc3RUeXBlCi0JCQkJCQkJPT0gRXBfSW5SZXF1ZXN0Ci0JCQkJCQkpIHsKLQkJCQkJY2hhciAqYnVmOwotCi0JCQkJCS8vIGRldmljZTogcmVtb3RlIHdha2V1cCwgc2VsZnBvd2VyZWQKLQkJCQkJLy8gaW50ZXJmYWNlOiBub3RoaW5nCi0JCQkJCS8vIGVuZHBvaW50OiBoYWx0Ci0JCQkJCWJ1ZiA9IChjaGFyICopdXJiLT50cmFuc2Zlcl9idWZmZXI7Ci0JCQkJCWlmICh1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPiAwKSB7Ci0JCQkJCQlpZiAoc2V0dXAuYlJlcXVlc3RUeXBlID09Ci0JCQkJCQkJCUVwX0luUmVxdWVzdCkgewotCWVwMiA9IGZpbmRfZW5kcG9pbnQgKGR1bSwgd19pbmRleCk7Ci0JaWYgKCFlcDIpIHsKLQkJdmFsdWUgPSAtRU9QTk9UU1VQUDsKLQkJYnJlYWs7Ci0JfQotCWJ1ZiBbMF0gPSBlcDItPmhhbHRlZDsKLQkJCQkJCX0gZWxzZSBpZiAoc2V0dXAuYlJlcXVlc3RUeXBlID09Ci0JCQkJCQkJCURldl9JblJlcXVlc3QpIHsKLQkJCQkJCQlidWYgWzBdID0gKHU4KQotCQkJCQkJCQlkdW0tPmRldnN0YXR1czsKLQkJCQkJCX0gZWxzZQotCQkJCQkJCWJ1ZiBbMF0gPSAwOwotCQkJCQl9Ci0JCQkJCWlmICh1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPiAxKQotCQkJCQkJYnVmIFsxXSA9IDA7Ci0JCQkJCXVyYi0+YWN0dWFsX2xlbmd0aCA9IG1pbl90KHUzMiwgMiwKLQkJCQkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCk7Ci0JCQkJCXZhbHVlID0gMDsKLQkJCQkJc3RhdHVzID0gMDsKLQkJCQl9Ci0JCQkJYnJlYWs7Ci0JCQl9CisJCQl2YWx1ZSA9IGhhbmRsZV9jb250cm9sX3JlcXVlc3QoZHVtLCB1cmIsICZzZXR1cCwKKwkJCQkJCSAgICAgICAmc3RhdHVzKTsKIAogCQkJLyogZ2FkZ2V0IGRyaXZlciBoYW5kbGVzIGFsbCBvdGhlciByZXF1ZXN0cy4gIGJsb2NrCiAJCQkgKiB1bnRpbCBzZXR1cCgpIHJldHVybnM7IG5vIHJlZW50cmFuY3kgaXNzdWVzIGV0Yy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX2ZzLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9mcy5jCmluZGV4IDQ4NGM1YmEuLjE0OTlmOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX2ZzLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfZnMuYwpAQCAtMSwxMCArMSwxMCBAQAogLyoKLSAqIGZfZnMuYyAtLSB1c2VyIG1vZGUgZmlsZXN5c3RlbSBhcGkgZm9yIHVzYiBjb21wb3NpdGUgZnVudGNpb24gY29udHJvbGxlcnMKKyAqIGZfZnMuYyAtLSB1c2VyIG1vZGUgZmlsZSBzeXN0ZW0gQVBJIGZvciBVU0IgY29tcG9zaXRlIGZ1bmN0aW9uIGNvbnRyb2xsZXJzCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKICAqIEF1dGhvcjogTWljaGFsIE5hemFyZXdpY3ogPG0ubmF6YXJld2ljekBzYW1zdW5nLmNvbT4KICAqCi0gKiBCYXNlZCBvbiBpbm9kZS5jIChHYWRnZXRGUyk6CisgKiBCYXNlZCBvbiBpbm9kZS5jIChHYWRnZXRGUykgd2hpY2ggd2FzOgogICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDQgRGF2aWQgQnJvd25lbGwKICAqIENvcHlyaWdodCAoQykgMjAwMyBBZ2lsZW50IFRlY2hub2xvZ2llcwogICoKQEAgLTM4LDYyICszOCw1NiBAQAogI2RlZmluZSBGVU5DVElPTkZTX01BR0lDCTB4YTY0NzM2MSAvKiBDaG9zZW4gYnkgYSBob25lc3QgZGljZSByb2xsIDspICovCiAKIAotLyogRGVidWdpbmcgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNkZWZpbmUgZmZzX3ByaW50ayhsZXZlbCwgZm10LCBhcmdzLi4uKSBwcmludGsobGV2ZWwgImZfZnM6ICIgZm10ICJcbiIsICMjIGFyZ3MpCi0KLSNkZWZpbmUgRkVSUiguLi4pICBmZnNfcHJpbnRrKEtFUk5fRVJSLCAgX19WQV9BUkdTX18pCi0jZGVmaW5lIEZJTkZPKC4uLikgZmZzX3ByaW50ayhLRVJOX0lORk8sIF9fVkFfQVJHU19fKQotCi0jaWZkZWYgREVCVUcKLSMgIGRlZmluZSBGREJHKC4uLikgZmZzX3ByaW50ayhLRVJOX0RFQlVHLCBfX1ZBX0FSR1NfXykKLSNlbHNlCi0jICBkZWZpbmUgRkRCRyguLi4pIGRvIHsgfSB3aGlsZSAoMCkKLSNlbmRpZiAvKiBERUJVRyAqLworLyogRGVidWdnaW5nICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKICNpZmRlZiBWRVJCT1NFX0RFQlVHCi0jICBkZWZpbmUgRlZEQkcgRkRCRworIyAgZGVmaW5lIHByX3ZkZWJ1ZyBwcl9kZWJ1ZworIyAgZGVmaW5lIGZmc19kdW1wX21lbShwcmVmaXgsIHB0ciwgbGVuKSBcCisJcHJpbnRfaGV4X2R1bXBfYnl0ZXMocHJfZm10KHByZWZpeCAiOiAiKSwgRFVNUF9QUkVGSVhfTk9ORSwgcHRyLCBsZW4pCiAjZWxzZQotIyAgZGVmaW5lIEZWREJHKC4uLikgZG8geyB9IHdoaWxlICgwKQorIyAgZGVmaW5lIHByX3ZkZWJ1ZyguLi4pICAgICAgICAgICAgICAgICBkbyB7IH0gd2hpbGUgKDApCisjICBkZWZpbmUgZmZzX2R1bXBfbWVtKHByZWZpeCwgcHRyLCBsZW4pIGRvIHsgfSB3aGlsZSAoMCkKICNlbmRpZiAvKiBWRVJCT1NFX0RFQlVHICovCiAKLSNkZWZpbmUgRU5URVIoKSAgICBGVkRCRygiJXMoKSIsIF9fZnVuY19fKQotCi0jaWZkZWYgVkVSQk9TRV9ERUJVRwotIyAgZGVmaW5lIGZmc19kdW1wX21lbShwcmVmaXgsIHB0ciwgbGVuKSBcCi0JcHJpbnRfaGV4X2R1bXBfYnl0ZXMoImZfZnMiIHByZWZpeCAiOiAiLCBEVU1QX1BSRUZJWF9OT05FLCBwdHIsIGxlbikKLSNlbHNlCi0jICBkZWZpbmUgZmZzX2R1bXBfbWVtKHByZWZpeCwgcHRyLCBsZW4pIGRvIHsgfSB3aGlsZSAoMCkKLSNlbmRpZgorI2RlZmluZSBFTlRFUigpICAgIHByX3ZkZWJ1ZygiJXMoKVxuIiwgX19mdW5jX18pCiAKIAogLyogVGhlIGRhdGEgc3RydWN0dXJlIGFuZCBzZXR1cCBmaWxlICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIGVudW0gZmZzX3N0YXRlIHsKLQkvKiBXYWl0aW5nIGZvciBkZXNjcmlwdG9ycyBhbmQgc3RyaW5ncy4gKi8KLQkvKiBJbiB0aGlzIHN0YXRlIG5vIG9wZW4oMiksIHJlYWQoMikgb3Igd3JpdGUoMikgb24gZXBmaWxlcworCS8qCisJICogV2FpdGluZyBmb3IgZGVzY3JpcHRvcnMgYW5kIHN0cmluZ3MuCisJICoKKwkgKiBJbiB0aGlzIHN0YXRlIG5vIG9wZW4oMiksIHJlYWQoMikgb3Igd3JpdGUoMikgb24gZXBmaWxlcwogCSAqIG1heSBzdWNjZWVkICh3aGljaCBzaG91bGQgbm90IGJlIHRoZSBwcm9ibGVtIGFzIHRoZXJlCi0JICogc2hvdWxkIGJlIG5vIHN1Y2ggZmlsZXMgb3BlbmVkIGluIHRoZSBmaXJ0cyBwbGFjZSkuICovCisJICogc2hvdWxkIGJlIG5vIHN1Y2ggZmlsZXMgb3BlbmVkIGluIHRoZSBmaXJzdCBwbGFjZSkuCisJICovCiAJRkZTX1JFQURfREVTQ1JJUFRPUlMsCiAJRkZTX1JFQURfU1RSSU5HUywKIAotCS8qIFdlJ3ZlIGdvdCBkZXNjcmlwdG9ycyBhbmQgc3RyaW5ncy4gIFdlIGFyZSBvciBoYXZlIGNhbGxlZAorCS8qCisJICogV2UndmUgZ290IGRlc2NyaXB0b3JzIGFuZCBzdHJpbmdzLiAgV2UgYXJlIG9yIGhhdmUgY2FsbGVkCiAJICogZnVuY3Rpb25mc19yZWFkeV9jYWxsYmFjaygpLiAgZnVuY3Rpb25mc19iaW5kKCkgbWF5IGhhdmUKLQkgKiBiZWVuIGNhbGxlZCBidXQgd2UgZG9uJ3Qga25vdy4gKi8KLQkvKiBUaGlzIGlzIHRoZSBvbmx5IHN0YXRlIGluIHdoaWNoIG9wZXJhdGlvbnMgb24gZXBmaWxlcyBtYXkKLQkgKiBzdWNjZWVkLiAqLworCSAqIGJlZW4gY2FsbGVkIGJ1dCB3ZSBkb24ndCBrbm93LgorCSAqCisJICogVGhpcyBpcyB0aGUgb25seSBzdGF0ZSBpbiB3aGljaCBvcGVyYXRpb25zIG9uIGVwZmlsZXMgbWF5CisJICogc3VjY2VlZC4KKwkgKi8KIAlGRlNfQUNUSVZFLAogCi0JLyogQWxsIGVuZHBvaW50cyBoYXZlIGJlZW4gY2xvc2VkLiAgVGhpcyBzdGF0ZSBpcyBhbHNvIHNldCBpZgorCS8qCisJICogQWxsIGVuZHBvaW50cyBoYXZlIGJlZW4gY2xvc2VkLiAgVGhpcyBzdGF0ZSBpcyBhbHNvIHNldCBpZgogCSAqIHdlIGVuY291bnRlciBhbiB1bnJlY292ZXJhYmxlIGVycm9yLiAgVGhlIG9ubHkKIAkgKiB1bnJlY292ZXJhYmxlIGVycm9yIGlzIHNpdHVhdGlvbiB3aGVuIGFmdGVyIHJlYWRpbmcgc3RyaW5ncwotCSAqIGZyb20gdXNlciBzcGFjZSB3ZSBmYWlsIHRvIGluaXRpYWxpc2UgRVAgZmlsZXMgb3IKLQkgKiBmdW5jdGlvbmZzX3JlYWR5X2NhbGxiYWNrKCkgcmV0dXJucyB3aXRoIGVycm9yICg8MCkuICovCi0JLyogSW4gdGhpcyBzdGF0ZSBubyBvcGVuKDIpLCByZWFkKDIpIG9yIHdyaXRlKDIpIChib3RoIG9uIGVwMAorCSAqIGZyb20gdXNlciBzcGFjZSB3ZSBmYWlsIHRvIGluaXRpYWxpc2UgZXBmaWxlcyBvcgorCSAqIGZ1bmN0aW9uZnNfcmVhZHlfY2FsbGJhY2soKSByZXR1cm5zIHdpdGggZXJyb3IgKDwwKS4KKwkgKgorCSAqIEluIHRoaXMgc3RhdGUgbm8gb3BlbigyKSwgcmVhZCgyKSBvciB3cml0ZSgyKSAoYm90aCBvbiBlcDAKIAkgKiBhcyB3ZWxsIGFzIGVwZmlsZSkgbWF5IHN1Y2NlZWQgKGF0IHRoaXMgcG9pbnQgZXBmaWxlcyBhcmUKIAkgKiB1bmxpbmtlZCBhbmQgYWxsIGNsb3NlZCBzbyB0aGlzIGlzIG5vdCBhIHByb2JsZW07IGVwMCBpcwogCSAqIGFsc28gY2xvc2VkIGJ1dCBlcDAgZmlsZSBleGlzdHMgYW5kIHNvIG9wZW4oMikgb24gZXAwIG11c3QKLQkgKiBmYWlsKS4gKi8KKwkgKiBmYWlsKS4KKwkgKi8KIAlGRlNfQ0xPU0lORwogfTsKIApAQCAtMTAxLDE0ICs5NSwxOCBAQAogZW51bSBmZnNfc2V0dXBfc3RhdGUgewogCS8qIFRoZXJlIGlzIG5vIHNldHVwIHJlcXVlc3QgcGVuZGluZy4gKi8KIAlGRlNfTk9fU0VUVVAsCi0JLyogVXNlciBoYXMgcmVhZCBldmVudHMgYW5kIHRoZXJlIHdhcyBhIHNldHVwIHJlcXVlc3QgZXZlbnQKKwkvKgorCSAqIFVzZXIgaGFzIHJlYWQgZXZlbnRzIGFuZCB0aGVyZSB3YXMgYSBzZXR1cCByZXF1ZXN0IGV2ZW50CiAJICogdGhlcmUuICBUaGUgbmV4dCByZWFkL3dyaXRlIG9uIGVwMCB3aWxsIGhhbmRsZSB0aGUKLQkgKiByZXF1ZXN0LiAqLworCSAqIHJlcXVlc3QuCisJICovCiAJRkZTX1NFVFVQX1BFTkRJTkcsCi0JLyogVGhlcmUgd2FzIGV2ZW50IHBlbmRpbmcgYnV0IGJlZm9yZSB1c2VyIHNwYWNlIGhhbmRsZWQgaXQKKwkvKgorCSAqIFRoZXJlIHdhcyBldmVudCBwZW5kaW5nIGJ1dCBiZWZvcmUgdXNlciBzcGFjZSBoYW5kbGVkIGl0CiAJICogc29tZSBvdGhlciBldmVudCB3YXMgaW50cm9kdWNlZCB3aGljaCBjYW5jZWxlZCBleGlzdGluZwogCSAqIHNldHVwLiAgSWYgdGhpcyBzdGF0ZSBpcyBzZXQgcmVhZC93cml0ZSBvbiBlcDAgcmV0dXJuCi0JICogLUVJRFJNLiAgVGhpcyBzdGF0ZSBpcyBvbmx5IHNldCB3aGVuIGFkZGluZyBldmVudC4gKi8KKwkgKiAtRUlEUk0uICBUaGlzIHN0YXRlIGlzIG9ubHkgc2V0IHdoZW4gYWRkaW5nIGV2ZW50LgorCSAqLwogCUZGU19TRVRVUF9DQU5DRUxFRAogfTsKIApAQCAtMTIwLDIzICsxMTgsMjkgQEAKIHN0cnVjdCBmZnNfZGF0YSB7CiAJc3RydWN0IHVzYl9nYWRnZXQJCSpnYWRnZXQ7CiAKLQkvKiBQcm90ZWN0IGFjY2VzcyByZWFkL3dyaXRlIG9wZXJhdGlvbnMsIG9ubHkgb25lIHJlYWQvd3JpdGUKKwkvKgorCSAqIFByb3RlY3QgYWNjZXNzIHJlYWQvd3JpdGUgb3BlcmF0aW9ucywgb25seSBvbmUgcmVhZC93cml0ZQogCSAqIGF0IGEgdGltZS4gIEFzIGEgY29uc2VxdWVuY2UgcHJvdGVjdHMgZXAwcmVxIGFuZCBjb21wYW55LgogCSAqIFdoaWxlIHNldHVwIHJlcXVlc3QgaXMgYmVpbmcgcHJvY2Vzc2VkIChxdWV1ZWQpIHRoaXMgaXMKLQkgKiBoZWxkLiAqLworCSAqIGhlbGQuCisJICovCiAJc3RydWN0IG11dGV4CQkJbXV0ZXg7CiAKLQkvKiBQcm90ZWN0IGFjY2VzcyB0byBlbnBvaW50IHJlbGF0ZWQgc3RydWN0dXJlcyAoYmFzaWNhbGx5CisJLyoKKwkgKiBQcm90ZWN0IGFjY2VzcyB0byBlbmRwb2ludCByZWxhdGVkIHN0cnVjdHVyZXMgKGJhc2ljYWxseQogCSAqIHVzYl9lcF9xdWV1ZSgpLCB1c2JfZXBfZGVxdWV1ZSgpLCBldGMuIGNhbGxzKSBleGNlcHQgZm9yCi0JICogZW5kcGludCB6ZXJvLiAqLworCSAqIGVuZHBvaW50IHplcm8uCisJICovCiAJc3BpbmxvY2tfdAkJCWVwc19sb2NrOwogCi0JLyogWFhYIFJFVklTSVQgZG8gd2UgbmVlZCBvdXIgb3duIHJlcXVlc3Q/IFNpbmNlIHdlIGFyZSBub3QKLQkgKiBoYW5kbGluZyBzZXR1cCByZXF1ZXN0cyBpbW1pZGlhdGVsbHkgdXNlciBzcGFjZSBtYXkgYmUgc28KKwkvKgorCSAqIFhYWCBSRVZJU0lUIGRvIHdlIG5lZWQgb3VyIG93biByZXF1ZXN0PyBTaW5jZSB3ZSBhcmUgbm90CisJICogaGFuZGxpbmcgc2V0dXAgcmVxdWVzdHMgaW1tZWRpYXRlbHkgdXNlciBzcGFjZSBtYXkgYmUgc28KIAkgKiBzbG93IHRoYXQgYW5vdGhlciBzZXR1cCB3aWxsIGJlIHNlbnQgdG8gdGhlIGdhZGdldCBidXQgdGhpcwogCSAqIHRpbWUgbm90IHRvIHVzIGJ1dCBhbm90aGVyIGZ1bmN0aW9uIGFuZCB0aGVuIHRoZXJlIGNvdWxkIGJlCiAJICogYSByYWNlLiAgSXMgdGhhdCB0aGUgY2FzZT8gT3IgbWF5YmUgd2UgY2FuIHVzZSBjZGV2LT5yZXEKLQkgKiBhZnRlciBhbGwsIG1heWJlIHdlIGp1c3QgbmVlZCBzb21lIHNwaW5sb2NrIGZvciB0aGF0PyAqLworCSAqIGFmdGVyIGFsbCwgbWF5YmUgd2UganVzdCBuZWVkIHNvbWUgc3BpbmxvY2sgZm9yIHRoYXQ/CisJICovCiAJc3RydWN0IHVzYl9yZXF1ZXN0CQkqZXAwcmVxOwkJLyogUDogbXV0ZXggKi8KIAlzdHJ1Y3QgY29tcGxldGlvbgkJZXAwcmVxX2NvbXBsZXRpb247CS8qIFA6IG11dGV4ICovCiAJaW50CQkJCWVwMHJlcV9zdGF0dXM7CQkvKiBQOiBtdXRleCAqLwpAQCAtMTUwLDcgKzE1NCw3IEBACiAJZW51bSBmZnNfc3RhdGUJCQlzdGF0ZTsKIAogCS8qCi0JICogUG9zc2libGUgdHJhbnNhdGlvbnM6CisJICogUG9zc2libGUgdHJhbnNpdGlvbnM6CiAJICogKyBGRlNfTk9fU0VUVVAgICAgICAgLT4gRkZTX1NFVFVQX1BFTkRJTkcgIC0tIFA6IGV2LndhaXRxLmxvY2sKIAkgKiAgICAgICAgICAgICAgIGhhcHBlbnMgb25seSBpbiBlcDAgcmVhZCB3aGljaCBpcyBQOiBtdXRleAogCSAqICsgRkZTX1NFVFVQX1BFTkRJTkcgIC0+IEZGU19OT19TRVRVUCAgICAgICAtLSBQOiBldi53YWl0cS5sb2NrCkBAIC0xODMsMTggKzE4NywyMSBAQAogCS8qIEFjdGl2ZSBmdW5jdGlvbiAqLwogCXN0cnVjdCBmZnNfZnVuY3Rpb24JCSpmdW5jOwogCi0JLyogRGV2aWNlIG5hbWUsIHdyaXRlIG9uY2Ugd2hlbiBmaWxlIHN5c3RlbSBpcyBtb3VudGVkLgotCSAqIEludGVuZGV0IGZvciB1c2VyIHRvIHJlYWQgaWYgc2hlIHdhbnRzLiAqLworCS8qCisJICogRGV2aWNlIG5hbWUsIHdyaXRlIG9uY2Ugd2hlbiBmaWxlIHN5c3RlbSBpcyBtb3VudGVkLgorCSAqIEludGVuZGVkIGZvciB1c2VyIHRvIHJlYWQgaWYgc2hlIHdhbnRzLgorCSAqLwogCWNvbnN0IGNoYXIJCQkqZGV2X25hbWU7Ci0JLyogUHJpdmF0ZSBkYXRhIGZvciBvdXIgdXNlciAoaWUuIGdhZGdldCkuICBNYW5hZ2VkIGJ5Ci0JICogdXNlci4gKi8KKwkvKiBQcml2YXRlIGRhdGEgZm9yIG91ciB1c2VyIChpZS4gZ2FkZ2V0KS4gIE1hbmFnZWQgYnkgdXNlci4gKi8KIAl2b2lkCQkJCSpwcml2YXRlX2RhdGE7CiAKIAkvKiBmaWxsZWQgYnkgX19mZnNfZGF0YV9nb3RfZGVzY3MoKSAqLwotCS8qIHJlYWwgZGVzY3JpcHRvcnMgYXJlIDE2IGJ5dGVzIGFmdGVyIHJhd19kZXNjcyAoc28geW91IG5lZWQKKwkvKgorCSAqIFJlYWwgZGVzY3JpcHRvcnMgYXJlIDE2IGJ5dGVzIGFmdGVyIHJhd19kZXNjcyAoc28geW91IG5lZWQKIAkgKiB0byBza2lwIDE2IGJ5dGVzIChpZS4gZmZzLT5yYXdfZGVzY3MgKyAxNikgdG8gZ2V0IHRvIHRoZQogCSAqIGZpcnN0IGZ1bGwgc3BlZWQgZGVzY3JpcHRvcikuICByYXdfZGVzY3NfbGVuZ3RoIGFuZAotCSAqIHJhd19mc19kZXNjc19sZW5ndGggZG8gbm90IGhhdmUgdGhvc2UgMTYgYnl0ZXMgYWRkZWQuICovCisJICogcmF3X2ZzX2Rlc2NzX2xlbmd0aCBkbyBub3QgaGF2ZSB0aG9zZSAxNiBieXRlcyBhZGRlZC4KKwkgKi8KIAljb25zdCB2b2lkCQkJKnJhd19kZXNjczsKIAl1bnNpZ25lZAkJCXJhd19kZXNjc19sZW5ndGg7CiAJdW5zaWduZWQJCQlyYXdfZnNfZGVzY3NfbGVuZ3RoOwpAQCAtMjExLDE4ICsyMTgsMjMgQEAKIAljb25zdCB2b2lkCQkJKnJhd19zdHJpbmdzOwogCXN0cnVjdCB1c2JfZ2FkZ2V0X3N0cmluZ3MJKipzdHJpbmd0YWJzOwogCi0JLyogRmlsZSBzeXN0ZW0ncyBzdXBlciBibG9jaywgd3JpdGUgb25jZSB3aGVuIGZpbGUgc3lzdGVtIGlzIG1vdW50ZWQuICovCisJLyoKKwkgKiBGaWxlIHN5c3RlbSdzIHN1cGVyIGJsb2NrLCB3cml0ZSBvbmNlIHdoZW4gZmlsZSBzeXN0ZW0gaXMKKwkgKiBtb3VudGVkLgorCSAqLwogCXN0cnVjdCBzdXBlcl9ibG9jawkJKnNiOwogCi0JLyogRmlsZSBwZXJtaXNzaW9ucywgd3JpdHRlbiBvbmNlIHdoZW4gZnMgaXMgbW91bnRlZCovCisJLyogRmlsZSBwZXJtaXNzaW9ucywgd3JpdHRlbiBvbmNlIHdoZW4gZnMgaXMgbW91bnRlZCAqLwogCXN0cnVjdCBmZnNfZmlsZV9wZXJtcyB7CiAJCXVtb2RlX3QJCQkJbW9kZTsKIAkJdWlkX3QJCQkJdWlkOwogCQlnaWRfdAkJCQlnaWQ7CiAJfQkJCQlmaWxlX3Blcm1zOwogCi0JLyogVGhlIGVuZHBvaW50IGZpbGVzLCBmaWxsZWQgYnkgZmZzX2VwZmlsZXNfY3JlYXRlKCksCi0JICogZGVzdHJveWVkIGJ5IGZmc19lcGZpbGVzX2Rlc3Ryb3koKS4gKi8KKwkvKgorCSAqIFRoZSBlbmRwb2ludCBmaWxlcywgZmlsbGVkIGJ5IGZmc19lcGZpbGVzX2NyZWF0ZSgpLAorCSAqIGRlc3Ryb3llZCBieSBmZnNfZXBmaWxlc19kZXN0cm95KCkuCisJICovCiAJc3RydWN0IGZmc19lcGZpbGUJCSplcGZpbGVzOwogfTsKIApAQCAtMjM2LDcgKzI0OCw3IEBACiBzdGF0aWMgdm9pZCBmZnNfZGF0YV9vcGVuZWQoc3RydWN0IGZmc19kYXRhICpmZnMpOwogc3RhdGljIHZvaWQgZmZzX2RhdGFfY2xvc2VkKHN0cnVjdCBmZnNfZGF0YSAqZmZzKTsKIAotLyogQ2FsbGVkIHdpdGggZmZzLT5tdXRleCBoZWxkOyB0YWtlIG92ZXIgb3duZXJyc2hpcCBvZiBkYXRhLiAqLworLyogQ2FsbGVkIHdpdGggZmZzLT5tdXRleCBoZWxkOyB0YWtlIG92ZXIgb3duZXJzaGlwIG9mIGRhdGEuICovCiBzdGF0aWMgaW50IF9fbXVzdF9jaGVjawogX19mZnNfZGF0YV9nb3RfZGVzY3Moc3RydWN0IGZmc19kYXRhICpmZnMsIGNoYXIgKmRhdGEsIHNpemVfdCBsZW4pOwogc3RhdGljIGludCBfX211c3RfY2hlY2sKQEAgLTI2NywxMSArMjc5LDkgQEAKIAogc3RhdGljIHZvaWQgZmZzX2Z1bmNfZnJlZShzdHJ1Y3QgZmZzX2Z1bmN0aW9uICpmdW5jKTsKIAotCiBzdGF0aWMgdm9pZCBmZnNfZnVuY19lcHNfZGlzYWJsZShzdHJ1Y3QgZmZzX2Z1bmN0aW9uICpmdW5jKTsKIHN0YXRpYyBpbnQgX19tdXN0X2NoZWNrIGZmc19mdW5jX2Vwc19lbmFibGUoc3RydWN0IGZmc19mdW5jdGlvbiAqZnVuYyk7CiAKLQogc3RhdGljIGludCBmZnNfZnVuY19iaW5kKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqLAogCQkJIHN0cnVjdCB1c2JfZnVuY3Rpb24gKik7CiBzdGF0aWMgdm9pZCBmZnNfZnVuY191bmJpbmQoc3RydWN0IHVzYl9jb25maWd1cmF0aW9uICosCkBAIC0yODgsNyArMjk4LDYgQEAKIHN0YXRpYyBpbnQgZmZzX2Z1bmNfcmV2bWFwX2ludGYoc3RydWN0IGZmc19mdW5jdGlvbiAqZnVuYywgdTggaW50Zik7CiAKIAotCiAvKiBUaGUgZW5kcG9pbnRzIHN0cnVjdHVyZXMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogc3RydWN0IGZmc19lcCB7CkBAIC0zMjEsNyArMzMwLDYgQEAKIAl1bnNpZ25lZCBjaGFyCQkJX3BhZDsKIH07CiAKLQogc3RhdGljIGludCAgX19tdXN0X2NoZWNrIGZmc19lcGZpbGVzX2NyZWF0ZShzdHJ1Y3QgZmZzX2RhdGEgKmZmcyk7CiBzdGF0aWMgdm9pZCBmZnNfZXBmaWxlc19kZXN0cm95KHN0cnVjdCBmZnNfZXBmaWxlICplcGZpbGVzLCB1bnNpZ25lZCBjb3VudCk7CiAKQEAgLTM0OCw3ICszNTYsNiBAQAogCWNvbXBsZXRlX2FsbCgmZmZzLT5lcDByZXFfY29tcGxldGlvbik7CiB9CiAKLQogc3RhdGljIGludCBfX2Zmc19lcDBfcXVldWVfd2FpdChzdHJ1Y3QgZmZzX2RhdGEgKmZmcywgY2hhciAqZGF0YSwgc2l6ZV90IGxlbikKIHsKIAlzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSA9IGZmcy0+ZXAwcmVxOwpAQCAtMzgwLDE3ICszODcsMTYgQEAKIHN0YXRpYyBpbnQgX19mZnNfZXAwX3N0YWxsKHN0cnVjdCBmZnNfZGF0YSAqZmZzKQogewogCWlmIChmZnMtPmV2LmNhbl9zdGFsbCkgewotCQlGVkRCRygiZXAwIHN0YWxsXG4iKTsKKwkJcHJfdmRlYnVnKCJlcDAgc3RhbGxcbiIpOwogCQl1c2JfZXBfc2V0X2hhbHQoZmZzLT5nYWRnZXQtPmVwMCk7CiAJCWZmcy0+c2V0dXBfc3RhdGUgPSBGRlNfTk9fU0VUVVA7CiAJCXJldHVybiAtRUwySExUOwogCX0gZWxzZSB7Ci0JCUZEQkcoImJvZ3VzIGVwMCBzdGFsbCFcbiIpOworCQlwcl9kZWJ1ZygiYm9ndXMgZXAwIHN0YWxsIVxuIik7CiAJCXJldHVybiAtRVNSQ0g7CiAJfQogfQogCi0KIHN0YXRpYyBzc2l6ZV90IGZmc19lcDBfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCiAJCQkgICAgIHNpemVfdCBsZW4sIGxvZmZfdCAqcHRyKQogewpAQCAtNDA5LDcgKzQxNSw2IEBACiAJaWYgKHVubGlrZWx5KHJldCA8IDApKQogCQlyZXR1cm4gcmV0OwogCi0KIAkvKiBDaGVjayBzdGF0ZSAqLwogCXN3aXRjaCAoZmZzLT5zdGF0ZSkgewogCWNhc2UgRkZTX1JFQURfREVTQ1JJUFRPUlM6CkBAIC00MjEsMTQgKzQyNiwxNCBAQAogCQl9CiAKIAkJZGF0YSA9IGZmc19wcmVwYXJlX2J1ZmZlcihidWYsIGxlbik7Ci0JCWlmICh1bmxpa2VseShJU19FUlIoZGF0YSkpKSB7CisJCWlmIChJU19FUlIoZGF0YSkpIHsKIAkJCXJldCA9IFBUUl9FUlIoZGF0YSk7CiAJCQlicmVhazsKIAkJfQogCiAJCS8qIEhhbmRsZSBkYXRhICovCiAJCWlmIChmZnMtPnN0YXRlID09IEZGU19SRUFEX0RFU0NSSVBUT1JTKSB7Ci0JCQlGSU5GTygicmVhZCBkZXNjcmlwdG9ycyIpOworCQkJcHJfaW5mbygicmVhZCBkZXNjcmlwdG9yc1xuIik7CiAJCQlyZXQgPSBfX2Zmc19kYXRhX2dvdF9kZXNjcyhmZnMsIGRhdGEsIGxlbik7CiAJCQlpZiAodW5saWtlbHkocmV0IDwgMCkpCiAJCQkJYnJlYWs7CkBAIC00MzYsNyArNDQxLDcgQEAKIAkJCWZmcy0+c3RhdGUgPSBGRlNfUkVBRF9TVFJJTkdTOwogCQkJcmV0ID0gbGVuOwogCQl9IGVsc2UgewotCQkJRklORk8oInJlYWQgc3RyaW5ncyIpOworCQkJcHJfaW5mbygicmVhZCBzdHJpbmdzXG4iKTsKIAkJCXJldCA9IF9fZmZzX2RhdGFfZ290X3N0cmluZ3MoZmZzLCBkYXRhLCBsZW4pOwogCQkJaWYgKHVubGlrZWx5KHJldCA8IDApKQogCQkJCWJyZWFrOwpAQCAtNDYxLDExICs0NjYsMTIgQEAKIAkJfQogCQlicmVhazsKIAotCiAJY2FzZSBGRlNfQUNUSVZFOgogCQlkYXRhID0gTlVMTDsKLQkJLyogV2UncmUgY2FsbGVkIGZyb20gdXNlciBzcGFjZSwgd2UgY2FuIHVzZSBfaXJxCi0JCSAqIHJhdGhlciB0aGVuIF9pcnFzYXZlICovCisJCS8qCisJCSAqIFdlJ3JlIGNhbGxlZCBmcm9tIHVzZXIgc3BhY2UsIHdlIGNhbiB1c2UgX2lycQorCQkgKiByYXRoZXIgdGhlbiBfaXJxc2F2ZQorCQkgKi8KIAkJc3Bpbl9sb2NrX2lycSgmZmZzLT5ldi53YWl0cS5sb2NrKTsKIAkJc3dpdGNoIChGRlNfU0VUVVBfU1RBVEUoZmZzKSkgewogCQljYXNlIEZGU19TRVRVUF9DQU5DRUxFRDoKQEAgLTQ5MywyMyArNDk5LDI1IEBACiAJCXNwaW5fdW5sb2NrX2lycSgmZmZzLT5ldi53YWl0cS5sb2NrKTsKIAogCQlkYXRhID0gZmZzX3ByZXBhcmVfYnVmZmVyKGJ1ZiwgbGVuKTsKLQkJaWYgKHVubGlrZWx5KElTX0VSUihkYXRhKSkpIHsKKwkJaWYgKElTX0VSUihkYXRhKSkgewogCQkJcmV0ID0gUFRSX0VSUihkYXRhKTsKIAkJCWJyZWFrOwogCQl9CiAKIAkJc3Bpbl9sb2NrX2lycSgmZmZzLT5ldi53YWl0cS5sb2NrKTsKIAotCQkvKiBXZSBhcmUgZ3VhcmFudGVlZCB0byBiZSBzdGlsbCBpbiBGRlNfQUNUSVZFIHN0YXRlCisJCS8qCisJCSAqIFdlIGFyZSBndWFyYW50ZWVkIHRvIGJlIHN0aWxsIGluIEZGU19BQ1RJVkUgc3RhdGUKIAkJICogYnV0IHRoZSBzdGF0ZSBvZiBzZXR1cCBjb3VsZCBoYXZlIGNoYW5nZWQgZnJvbQogCQkgKiBGRlNfU0VUVVBfUEVORElORyB0byBGRlNfU0VUVVBfQ0FOQ0VMRUQgc28gd2UgbmVlZAogCQkgKiB0byBjaGVjayBmb3IgdGhhdC4gIElmIHRoYXQgaGFwcGVuZWQgd2UgY29waWVkIGRhdGEKLQkJICogZnJvbSB1c2VyIHNwYWNlIGluIHZhaW4gYnV0IGl0J3MgdW5saWtlbHkuICovCi0JCS8qIEZvciBzdXJlIHdlIGFyZSBub3QgaW4gRkZTX05PX1NFVFVQIHNpbmNlIHRoaXMgaXMKKwkJICogZnJvbSB1c2VyIHNwYWNlIGluIHZhaW4gYnV0IGl0J3MgdW5saWtlbHkuCisJCSAqCisJCSAqIEZvciBzdXJlIHdlIGFyZSBub3QgaW4gRkZTX05PX1NFVFVQIHNpbmNlIHRoaXMgaXMKIAkJICogdGhlIG9ubHkgcGxhY2UgRkZTX1NFVFVQX1BFTkRJTkcgLT4gRkZTX05PX1NFVFVQCiAJCSAqIHRyYW5zaXRpb24gY2FuIGJlIHBlcmZvcm1lZCBhbmQgaXQncyBwcm90ZWN0ZWQgYnkKLQkJICogbXV0ZXguICovCi0KKwkJICogbXV0ZXguCisJCSAqLwogCQlpZiAoRkZTX1NFVFVQX1NUQVRFKGZmcykgPT0gRkZTX1NFVFVQX0NBTkNFTEVEKSB7CiAJCQlyZXQgPSAtRUlEUk07CiBkb25lX3NwaW46CkBAIC01MjEsMjUgKzUyOSwyMiBAQAogCQlrZnJlZShkYXRhKTsKIAkJYnJlYWs7CiAKLQogCWRlZmF1bHQ6CiAJCXJldCA9IC1FQkFERkQ7CiAJCWJyZWFrOwogCX0KIAotCiAJbXV0ZXhfdW5sb2NrKCZmZnMtPm11dGV4KTsKIAlyZXR1cm4gcmV0OwogfQogCi0KLQogc3RhdGljIHNzaXplX3QgX19mZnNfZXAwX3JlYWRfZXZlbnRzKHN0cnVjdCBmZnNfZGF0YSAqZmZzLCBjaGFyIF9fdXNlciAqYnVmLAogCQkJCSAgICAgc2l6ZV90IG4pCiB7Ci0JLyogV2UgYXJlIGhvbGRpbmcgZmZzLT5ldi53YWl0cS5sb2NrIGFuZCBmZnMtPm11dGV4IGFuZCB3ZSBuZWVkCi0JICogdG8gcmVsZWFzZSB0aGVtLiAqLwotCisJLyoKKwkgKiBXZSBhcmUgaG9sZGluZyBmZnMtPmV2LndhaXRxLmxvY2sgYW5kIGZmcy0+bXV0ZXggYW5kIHdlIG5lZWQKKwkgKiB0byByZWxlYXNlIHRoZW0uCisJICovCiAJc3RydWN0IHVzYl9mdW5jdGlvbmZzX2V2ZW50IGV2ZW50c1tuXTsKIAl1bnNpZ25lZCBpID0gMDsKIApAQCAtNTY4LDcgKzU3Myw2IEBACiAJCT8gLUVGQVVMVCA6IHNpemVvZiBldmVudHM7CiB9CiAKLQogc3RhdGljIHNzaXplX3QgZmZzX2VwMF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAogCQkJICAgIHNpemVfdCBsZW4sIGxvZmZfdCAqcHRyKQogewpAQCAtNTg4LDE2ICs1OTIsMTYgQEAKIAlpZiAodW5saWtlbHkocmV0IDwgMCkpCiAJCXJldHVybiByZXQ7CiAKLQogCS8qIENoZWNrIHN0YXRlICovCiAJaWYgKGZmcy0+c3RhdGUgIT0gRkZTX0FDVElWRSkgewogCQlyZXQgPSAtRUJBREZEOwogCQlnb3RvIGRvbmVfbXV0ZXg7CiAJfQogCi0KLQkvKiBXZSdyZSBjYWxsZWQgZnJvbSB1c2VyIHNwYWNlLCB3ZSBjYW4gdXNlIF9pcnEgcmF0aGVyIHRoZW4KLQkgKiBfaXJxc2F2ZSAqLworCS8qCisJICogV2UncmUgY2FsbGVkIGZyb20gdXNlciBzcGFjZSwgd2UgY2FuIHVzZSBfaXJxIHJhdGhlciB0aGVuCisJICogX2lycXNhdmUKKwkgKi8KIAlzcGluX2xvY2tfaXJxKCZmZnMtPmV2LndhaXRxLmxvY2spOwogCiAJc3dpdGNoIChGRlNfU0VUVVBfU1RBVEUoZmZzKSkgewpAQCAtNjE3LDcgKzYyMSw4IEBACiAJCQlicmVhazsKIAkJfQogCi0JCWlmICh1bmxpa2VseSh3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfZXhjbHVzaXZlX2xvY2tlZF9pcnEoZmZzLT5ldi53YWl0cSwgZmZzLT5ldi5jb3VudCkpKSB7CisJCWlmICh3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfZXhjbHVzaXZlX2xvY2tlZF9pcnEoZmZzLT5ldi53YWl0cSwKKwkJCQkJCQlmZnMtPmV2LmNvdW50KSkgewogCQkJcmV0ID0gLUVJTlRSOwogCQkJYnJlYWs7CiAJCX0KQEAgLTYyNSw3ICs2MzAsNiBAQAogCQlyZXR1cm4gX19mZnNfZXAwX3JlYWRfZXZlbnRzKGZmcywgYnVmLAogCQkJCQkgICAgIG1pbihuLCAoc2l6ZV90KWZmcy0+ZXYuY291bnQpKTsKIAotCiAJY2FzZSBGRlNfU0VUVVBfUEVORElORzoKIAkJaWYgKGZmcy0+ZXYuc2V0dXAuYlJlcXVlc3RUeXBlICYgVVNCX0RJUl9JTikgewogCQkJc3Bpbl91bmxvY2tfaXJxKCZmZnMtPmV2LndhaXRxLmxvY2spOwpAQCAtNjcxLDggKzY3NSw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotCi0KIHN0YXRpYyBpbnQgZmZzX2VwMF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewogCXN0cnVjdCBmZnNfZGF0YSAqZmZzID0gaW5vZGUtPmlfcHJpdmF0ZTsKQEAgLTY4OCw3ICs2OTAsNiBAQAogCXJldHVybiAwOwogfQogCi0KIHN0YXRpYyBpbnQgZmZzX2VwMF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewogCXN0cnVjdCBmZnNfZGF0YSAqZmZzID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwpAQCAtNzAwLDcgKzcwMSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLQogc3RhdGljIGxvbmcgZmZzX2VwMF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgY29kZSwgdW5zaWduZWQgbG9uZyB2YWx1ZSkKIHsKIAlzdHJ1Y3QgZmZzX2RhdGEgKmZmcyA9IGZpbGUtPnByaXZhdGVfZGF0YTsKQEAgLTcyMSw3ICs3MjEsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLQogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZmZzX2VwMF9vcGVyYXRpb25zID0gewogCS5vd25lciA9CVRISVNfTU9EVUxFLAogCS5sbHNlZWsgPQlub19sbHNlZWssCkBAIC03MzYsNyArNzM1LDYgQEAKIAogLyogIk5vcm1hbCIgZW5kcG9pbnRzIG9wZXJhdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLQogc3RhdGljIHZvaWQgZmZzX2VwZmlsZV9pb19jb21wbGV0ZShzdHJ1Y3QgdXNiX2VwICpfZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQogewogCUVOVEVSKCk7CkBAIC03NDcsNyArNzQ1LDYgQEAKIAl9CiB9CiAKLQogc3RhdGljIHNzaXplX3QgZmZzX2VwZmlsZV9pbyhzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCSAgICAgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGxlbiwgaW50IHJlYWQpCiB7CkBAIC03NzcsOCArNzc0LDggQEAKIAkJCQlnb3RvIGVycm9yOwogCQkJfQogCi0JCQlpZiAodW5saWtlbHkod2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlCi0JCQkJICAgICAoZXBmaWxlLT53YWl0LCAoZXAgPSBlcGZpbGUtPmVwKSkpKSB7CisJCQlpZiAod2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGVwZmlsZS0+d2FpdCwKKwkJCQkJCSAgICAgKGVwID0gZXBmaWxlLT5lcCkpKSB7CiAJCQkJcmV0ID0gLUVJTlRSOwogCQkJCWdvdG8gZXJyb3I7CiAJCQl9CkBAIC04MTAsMTIgKzgwNywxNiBAQAogCQlpZiAodW5saWtlbHkocmV0KSkKIAkJCWdvdG8gZXJyb3I7CiAKLQkJLyogV2UncmUgY2FsbGVkIGZyb20gdXNlciBzcGFjZSwgd2UgY2FuIHVzZSBfaXJxIHJhdGhlciB0aGVuCi0JCSAqIF9pcnFzYXZlICovCisJCS8qCisJCSAqIFdlJ3JlIGNhbGxlZCBmcm9tIHVzZXIgc3BhY2UsIHdlIGNhbiB1c2UgX2lycSByYXRoZXIgdGhlbgorCQkgKiBfaXJxc2F2ZQorCQkgKi8KIAkJc3Bpbl9sb2NrX2lycSgmZXBmaWxlLT5mZnMtPmVwc19sb2NrKTsKIAotCQkvKiBXaGlsZSB3ZSB3ZXJlIGFjcXVpcmluZyBtdXRleCBlbmRwb2ludCBnb3QgZGlzYWJsZWQKLQkJICogb3IgY2hhbmdlZD8gKi8KKwkJLyoKKwkJICogV2hpbGUgd2Ugd2VyZSBhY3F1aXJpbmcgbXV0ZXggZW5kcG9pbnQgZ290IGRpc2FibGVkCisJCSAqIG9yIGNoYW5nZWQ/CisJCSAqLwogCX0gd2hpbGUgKHVubGlrZWx5KGVwZmlsZS0+ZXAgIT0gZXApKTsKIAogCS8qIEhhbHQgKi8KQEAgLTg1Nyw3ICs4NTgsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLQogc3RhdGljIHNzaXplX3QKIGZmc19lcGZpbGVfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsIHNpemVfdCBsZW4sCiAJCSBsb2ZmX3QgKnB0cikKQEAgLTkwMyw3ICs5MDMsNiBAQAogCXJldHVybiAwOwogfQogCi0KIHN0YXRpYyBsb25nIGZmc19lcGZpbGVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGNvZGUsCiAJCQkgICAgIHVuc2lnbmVkIGxvbmcgdmFsdWUpCiB7CkBAIC05NDIsNyArOTQxLDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZmc19lcGZpbGVfb3BlcmF0aW9ucyA9IHsKIAkub3duZXIgPQlUSElTX01PRFVMRSwKIAkubGxzZWVrID0Jbm9fbGxzZWVrLApAQCAtOTU1LDE1ICs5NTMsMTMgQEAKIH07CiAKIAotCiAvKiBGaWxlIHN5c3RlbSBhbmQgc3VwZXIgYmxvY2sgb3BlcmF0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIE1vdW50aW5nIHRoZSBmaWxlc3lzdGVtIGNyZWF0ZXMgYSBjb250cm9sbGVyIGZpbGUsIHVzZWQgZmlyc3QgZm9yCisgKiBNb3VudGluZyB0aGUgZmlsZSBzeXN0ZW0gY3JlYXRlcyBhIGNvbnRyb2xsZXIgZmlsZSwgdXNlZCBmaXJzdCBmb3IKICAqIGZ1bmN0aW9uIGNvbmZpZ3VyYXRpb24gdGhlbiBsYXRlciBmb3IgZXZlbnQgbW9uaXRvcmluZy4KICAqLwogCi0KIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKl9fbXVzdF9jaGVjawogZmZzX3NiX21ha2VfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdm9pZCAqZGF0YSwKIAkJICBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmb3BzLApAQCAtOTk2LDkgKzk5Miw3IEBACiAJcmV0dXJuIGlub2RlOwogfQogCi0KIC8qIENyZWF0ZSAicmVndWxhciIgZmlsZSAqLwotCiBzdGF0aWMgc3RydWN0IGlub2RlICpmZnNfc2JfY3JlYXRlX2ZpbGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCQkJY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqZGF0YSwKIAkJCQkJY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZm9wcywKQEAgLTEwMjcsOSArMTAyMSw3IEBACiAJcmV0dXJuIGlub2RlOwogfQogCi0KIC8qIFN1cGVyIGJsb2NrICovCi0KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBmZnNfc2Jfb3BlcmF0aW9ucyA9IHsKIAkuc3RhdGZzID0Jc2ltcGxlX3N0YXRmcywKIAkuZHJvcF9pbm9kZSA9CWdlbmVyaWNfZGVsZXRlX2lub2RlLApAQCAtMTA1MCw3ICsxMDQyLDcgQEAKIAogCUVOVEVSKCk7CiAKLQkvKiBJbml0aWFsaXplIGRhdGEgKi8KKwkvKiBJbml0aWFsaXNlIGRhdGEgKi8KIAlmZnMgPSBmZnNfZGF0YV9uZXcoKTsKIAlpZiAodW5saWtlbHkoIWZmcykpCiAJCWdvdG8gZW5vbWVtMDsKQEAgLTEwOTYsNyArMTA4OCw2IEBACiAJcmV0dXJuIC1FTk9NRU07CiB9CiAKLQogc3RhdGljIGludCBmZnNfZnNfcGFyc2Vfb3B0cyhzdHJ1Y3QgZmZzX3NiX2ZpbGxfZGF0YSAqZGF0YSwgY2hhciAqb3B0cykKIHsKIAlFTlRFUigpOwpAQCAtMTExNiw3ICsxMTA3LDcgQEAKIAkJLyogVmFsdWUgbGltaXQgKi8KIAkJZXEgPSBzdHJjaHIob3B0cywgJz0nKTsKIAkJaWYgKHVubGlrZWx5KCFlcSkpIHsKLQkJCUZFUlIoIic9JyBtaXNzaW5nIGluICVzIiwgb3B0cyk7CisJCQlwcl9lcnIoIic9JyBtaXNzaW5nIGluICVzXG4iLCBvcHRzKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCSplcSA9IDA7CkBAIC0xMTI0LDcgKzExMTUsNyBAQAogCQkvKiBQYXJzZSB2YWx1ZSAqLwogCQl2YWx1ZSA9IHNpbXBsZV9zdHJ0b3VsKGVxICsgMSwgJmVuZCwgMCk7CiAJCWlmICh1bmxpa2VseSgqZW5kICE9ICcsJyAmJiAqZW5kICE9IDApKSB7Ci0JCQlGRVJSKCIlczogaW52YWxpZCB2YWx1ZTogJXMiLCBvcHRzLCBlcSArIDEpOworCQkJcHJfZXJyKCIlczogaW52YWxpZCB2YWx1ZTogJXNcbiIsIG9wdHMsIGVxICsgMSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCkBAIC0xMTU5LDcgKzExNTAsNyBAQAogCiAJCWRlZmF1bHQ6CiBpbnZhbGlkOgotCQkJRkVSUigiJXM6IGludmFsaWQgb3B0aW9uIiwgb3B0cyk7CisJCQlwcl9lcnIoIiVzOiBpbnZhbGlkIG9wdGlvblxuIiwgb3B0cyk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCkBAIC0xMTcyLDcgKzExNjMsNiBAQAogCXJldHVybiAwOwogfQogCi0KIC8qICJtb3VudCAtdCBmdW5jdGlvbmZzIGRldl9uYW1lIC9kZXYvZnVuY3Rpb24iIGVuZHMgdXAgaGVyZSAqLwogCiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqCkBAIC0xMjI0LDEwICsxMjE0LDggQEAKIH07CiAKIAotCiAvKiBEcml2ZXIncyBtYWluIGluaXQvY2xlYW51cCBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotCiBzdGF0aWMgaW50IGZ1bmN0aW9uZnNfaW5pdCh2b2lkKQogewogCWludCByZXQ7CkBAIC0xMjM2LDkgKzEyMjQsOSBAQAogCiAJcmV0ID0gcmVnaXN0ZXJfZmlsZXN5c3RlbSgmZmZzX2ZzX3R5cGUpOwogCWlmIChsaWtlbHkoIXJldCkpCi0JCUZJTkZPKCJmaWxlIHN5c3RlbSByZWdpc3RlcmVkIik7CisJCXByX2luZm8oImZpbGUgc3lzdGVtIHJlZ2lzdGVyZWRcbiIpOwogCWVsc2UKLQkJRkVSUigiZmFpbGVkIHJlZ2lzdGVyaW5nIGZpbGUgc3lzdGVtICglZCkiLCByZXQpOworCQlwcl9lcnIoImZhaWxlZCByZWdpc3RlcmluZyBmaWxlIHN5c3RlbSAoJWQpXG4iLCByZXQpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTEyNDcsMTggKzEyMzUsMTYgQEAKIHsKIAlFTlRFUigpOwogCi0JRklORk8oInVubG9hZGluZyIpOworCXByX2luZm8oInVubG9hZGluZ1xuIik7CiAJdW5yZWdpc3Rlcl9maWxlc3lzdGVtKCZmZnNfZnNfdHlwZSk7CiB9CiAKIAotCiAvKiBmZnNfZGF0YSBhbmQgZmZzX2Z1bmN0aW9uIGNvbnN0cnVjdGlvbiBhbmQgZGVzdHJ1Y3Rpb24gY29kZSAqKioqKioqKioqKioqKi8KIAogc3RhdGljIHZvaWQgZmZzX2RhdGFfY2xlYXIoc3RydWN0IGZmc19kYXRhICpmZnMpOwogc3RhdGljIHZvaWQgZmZzX2RhdGFfcmVzZXQoc3RydWN0IGZmc19kYXRhICpmZnMpOwogCi0KIHN0YXRpYyB2b2lkIGZmc19kYXRhX2dldChzdHJ1Y3QgZmZzX2RhdGEgKmZmcykKIHsKIAlFTlRFUigpOwpAQCAtMTI3OSw3ICsxMjY1LDcgQEAKIAlFTlRFUigpOwogCiAJaWYgKHVubGlrZWx5KGF0b21pY19kZWNfYW5kX3Rlc3QoJmZmcy0+cmVmKSkpIHsKLQkJRklORk8oIiVzKCk6IGZyZWVpbmciLCBfX2Z1bmNfXyk7CisJCXByX2luZm8oIiVzKCk6IGZyZWVpbmdcbiIsIF9fZnVuY19fKTsKIAkJZmZzX2RhdGFfY2xlYXIoZmZzKTsKIAkJQlVHX09OKG11dGV4X2lzX2xvY2tlZCgmZmZzLT5tdXRleCkgfHwKIAkJICAgICAgIHNwaW5faXNfbG9ja2VkKCZmZnMtPmV2LndhaXRxLmxvY2spIHx8CkBAIC0xMjg5LDggKzEyNzUsNiBAQAogCX0KIH0KIAotCi0KIHN0YXRpYyB2b2lkIGZmc19kYXRhX2Nsb3NlZChzdHJ1Y3QgZmZzX2RhdGEgKmZmcykKIHsKIAlFTlRFUigpOwpAQCAtMTMwMyw3ICsxMjg3LDYgQEAKIAlmZnNfZGF0YV9wdXQoZmZzKTsKIH0KIAotCiBzdGF0aWMgc3RydWN0IGZmc19kYXRhICpmZnNfZGF0YV9uZXcodm9pZCkKIHsKIAlzdHJ1Y3QgZmZzX2RhdGEgKmZmcyA9IGt6YWxsb2Moc2l6ZW9mICpmZnMsIEdGUF9LRVJORUwpOwpAQCAtMTMyNiw3ICsxMzA5LDYgQEAKIAlyZXR1cm4gZmZzOwogfQogCi0KIHN0YXRpYyB2b2lkIGZmc19kYXRhX2NsZWFyKHN0cnVjdCBmZnNfZGF0YSAqZmZzKQogewogCUVOVEVSKCk7CkBAIC0xMzQ0LDcgKzEzMjYsNiBAQAogCWtmcmVlKGZmcy0+c3RyaW5ndGFicyk7CiB9CiAKLQogc3RhdGljIHZvaWQgZmZzX2RhdGFfcmVzZXQoc3RydWN0IGZmc19kYXRhICpmZnMpCiB7CiAJRU5URVIoKTsKQEAgLTE0MDcsNyArMTM4OCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLQogc3RhdGljIHZvaWQgZnVuY3Rpb25mc191bmJpbmQoc3RydWN0IGZmc19kYXRhICpmZnMpCiB7CiAJRU5URVIoKTsKQEAgLTE0MjAsNyArMTQwMCw2IEBACiAJfQogfQogCi0KIHN0YXRpYyBpbnQgZmZzX2VwZmlsZXNfY3JlYXRlKHN0cnVjdCBmZnNfZGF0YSAqZmZzKQogewogCXN0cnVjdCBmZnNfZXBmaWxlICplcGZpbGUsICplcGZpbGVzOwpAQCAtMTQ1MSw3ICsxNDMwLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotCiBzdGF0aWMgdm9pZCBmZnNfZXBmaWxlc19kZXN0cm95KHN0cnVjdCBmZnNfZXBmaWxlICplcGZpbGVzLCB1bnNpZ25lZCBjb3VudCkKIHsKIAlzdHJ1Y3QgZmZzX2VwZmlsZSAqZXBmaWxlID0gZXBmaWxlczsKQEAgLTE0NzEsNyArMTQ0OSw2IEBACiAJa2ZyZWUoZXBmaWxlcyk7CiB9CiAKLQogc3RhdGljIGludCBmdW5jdGlvbmZzX2JpbmRfY29uZmlnKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldiwKIAkJCQkgIHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYywKIAkJCQkgIHN0cnVjdCBmZnNfZGF0YSAqZmZzKQpAQCAtMTQ5MSw3ICsxNDY4LDYgQEAKIAlmdW5jLT5mdW5jdGlvbi5iaW5kICAgID0gZmZzX2Z1bmNfYmluZDsKIAlmdW5jLT5mdW5jdGlvbi51bmJpbmQgID0gZmZzX2Z1bmNfdW5iaW5kOwogCWZ1bmMtPmZ1bmN0aW9uLnNldF9hbHQgPSBmZnNfZnVuY19zZXRfYWx0OwotCS8qZnVuYy0+ZnVuY3Rpb24uZ2V0X2FsdCA9IGZmc19mdW5jX2dldF9hbHQ7Ki8KIAlmdW5jLT5mdW5jdGlvbi5kaXNhYmxlID0gZmZzX2Z1bmNfZGlzYWJsZTsKIAlmdW5jLT5mdW5jdGlvbi5zZXR1cCAgID0gZmZzX2Z1bmNfc2V0dXA7CiAJZnVuYy0+ZnVuY3Rpb24uc3VzcGVuZCA9IGZmc19mdW5jX3N1c3BlbmQ7CkBAIC0xNTE2LDE0ICsxNDkyLDE1IEBACiAJZmZzX2RhdGFfcHV0KGZ1bmMtPmZmcyk7CiAKIAlrZnJlZShmdW5jLT5lcHMpOwotCS8qIGVwcyBhbmQgaW50ZXJmYWNlc19udW1zIGFyZSBhbGxvY2F0ZWQgaW4gdGhlIHNhbWUgY2h1bmsgc28KKwkvKgorCSAqIGVwcyBhbmQgaW50ZXJmYWNlc19udW1zIGFyZSBhbGxvY2F0ZWQgaW4gdGhlIHNhbWUgY2h1bmsgc28KIAkgKiBvbmx5IG9uZSBmcmVlIGlzIHJlcXVpcmVkLiAgRGVzY3JpcHRvcnMgYXJlIGFsc28gYWxsb2NhdGVkCi0JICogaW4gdGhlIHNhbWUgY2h1bmsuICovCisJICogaW4gdGhlIHNhbWUgY2h1bmsuCisJICovCiAKIAlrZnJlZShmdW5jKTsKIH0KIAotCiBzdGF0aWMgdm9pZCBmZnNfZnVuY19lcHNfZGlzYWJsZShzdHJ1Y3QgZmZzX2Z1bmN0aW9uICpmdW5jKQogewogCXN0cnVjdCBmZnNfZXAgKmVwICAgICAgICAgPSBmdW5jLT5lcHM7CkBAIC0xNTgxLDExICsxNTU4LDEyIEBACiAKIC8qIFBhcnNpbmcgYW5kIGJ1aWxkaW5nIGRlc2NyaXB0b3JzIGFuZCBzdHJpbmdzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0KLS8qIFRoaXMgdmFsaWRhdGVzIGlmIGRhdGEgcG9pbnRlZCBieSBkYXRhIGlzIGEgdmFsaWQgVVNCIGRlc2NyaXB0b3IgYXMKKy8qCisgKiBUaGlzIHZhbGlkYXRlcyBpZiBkYXRhIHBvaW50ZWQgYnkgZGF0YSBpcyBhIHZhbGlkIFVTQiBkZXNjcmlwdG9yIGFzCiAgKiB3ZWxsIGFzIHJlY29yZCBob3cgbWFueSBpbnRlcmZhY2VzLCBlbmRwb2ludHMgYW5kIHN0cmluZ3MgYXJlCi0gKiByZXF1aXJlZCBieSBnaXZlbiBjb25maWd1cmF0aW9uLiAgUmV0dXJucyBhZGRyZXNzIGFmdGhlciB0aGUKLSAqIGRlc2NyaXB0b3Igb3IgTlVMTCBpZiBkYXRhIGlzIGludmFsaWQuICovCisgKiByZXF1aXJlZCBieSBnaXZlbiBjb25maWd1cmF0aW9uLiAgUmV0dXJucyBhZGRyZXNzIGFmdGVyIHRoZQorICogZGVzY3JpcHRvciBvciBOVUxMIGlmIGRhdGEgaXMgaW52YWxpZC4KKyAqLwogCiBlbnVtIGZmc19lbnRpdHlfdHlwZSB7CiAJRkZTX0RFU0NSSVBUT1IsIEZGU19JTlRFUkZBQ0UsIEZGU19TVFJJTkcsIEZGU19FTkRQT0lOVApAQCAtMTYwNywxNCArMTU4NSwxNCBAQAogCiAJLyogQXQgbGVhc3QgdHdvIGJ5dGVzIGFyZSByZXF1aXJlZDogbGVuZ3RoIGFuZCB0eXBlICovCiAJaWYgKGxlbiA8IDIpIHsKLQkJRlZEQkcoImRlc2NyaXB0b3IgdG9vIHNob3J0Iik7CisJCXByX3ZkZWJ1ZygiZGVzY3JpcHRvciB0b28gc2hvcnRcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAkvKiBJZiB3ZSBoYXZlIGF0IGxlYXN0IGFzIG1hbnkgYnl0ZXMgYXMgdGhlIGRlc2NyaXB0b3IgdGFrZXM/ICovCiAJbGVuZ3RoID0gX2RzLT5iTGVuZ3RoOwogCWlmIChsZW4gPCBsZW5ndGgpIHsKLQkJRlZEQkcoImRlc2NyaXB0b3IgbG9uZ2VyIHRoZW4gYXZhaWxhYmxlIGRhdGEiKTsKKwkJcHJfdmRlYnVnKCJkZXNjcmlwdG9yIGxvbmdlciB0aGVuIGF2YWlsYWJsZSBkYXRhXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0xNjIyLDE1ICsxNjAwLDE1IEBACiAjZGVmaW5lIF9fZW50aXR5X2NoZWNrX1NUUklORyh2YWwpICAgICAodmFsKQogI2RlZmluZSBfX2VudGl0eV9jaGVja19FTkRQT0lOVCh2YWwpICAgKCh2YWwpICYgVVNCX0VORFBPSU5UX05VTUJFUl9NQVNLKQogI2RlZmluZSBfX2VudGl0eSh0eXBlLCB2YWwpIGRvIHsJCQkJCVwKLQkJRlZEQkcoImVudGl0eSAiICN0eXBlICIoJTAyeCkiLCAodmFsKSk7CQkJXAorCQlwcl92ZGVidWcoImVudGl0eSAiICN0eXBlICIoJTAyeClcbiIsICh2YWwpKTsJCVwKIAkJaWYgKHVubGlrZWx5KCFfX2VudGl0eV9jaGVja18gIyN0eXBlKHZhbCkpKSB7CQlcCi0JCQlGVkRCRygiaW52YWxpZCBlbnRpdHkncyB2YWx1ZSIpOwkJXAorCQkJcHJfdmRlYnVnKCJpbnZhbGlkIGVudGl0eSdzIHZhbHVlXG4iKTsJCVwKIAkJCXJldHVybiAtRUlOVkFMOwkJCQkJXAogCQl9CQkJCQkJCVwKIAkJcmV0ID0gZW50aXR5KEZGU18gIyN0eXBlLCAmdmFsLCBfZHMsIHByaXYpOwkJXAogCQlpZiAodW5saWtlbHkocmV0IDwgMCkpIHsJCQkJXAotCQkJRkRCRygiZW50aXR5ICIgI3R5cGUgIiglMDJ4KTsgcmV0ID0gJWQiLAlcCi0JCQkgICAgICh2YWwpLCByZXQpOwkJCQlcCisJCQlwcl9kZWJ1ZygiZW50aXR5ICIgI3R5cGUgIiglMDJ4KTsgcmV0ID0gJWRcbiIsCVwKKwkJCQkgKHZhbCksIHJldCk7CQkJCVwKIAkJCXJldHVybiByZXQ7CQkJCQlcCiAJCX0JCQkJCQkJXAogCX0gd2hpbGUgKDApCkBAIC0xNjQyLDEyICsxNjIwLDEzIEBACiAJY2FzZSBVU0JfRFRfU1RSSU5HOgogCWNhc2UgVVNCX0RUX0RFVklDRV9RVUFMSUZJRVI6CiAJCS8qIGZ1bmN0aW9uIGNhbid0IGhhdmUgYW55IG9mIHRob3NlICovCi0JCUZWREJHKCJkZXNjcmlwdG9yIHJlc2VydmVkIGZvciBnYWRnZXQ6ICVkIiwgX2RzLT5iRGVzY3JpcHRvclR5cGUpOworCQlwcl92ZGVidWcoImRlc2NyaXB0b3IgcmVzZXJ2ZWQgZm9yIGdhZGdldDogJWRcbiIsCisJCSAgICAgIF9kcy0+YkRlc2NyaXB0b3JUeXBlKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAljYXNlIFVTQl9EVF9JTlRFUkZBQ0U6IHsKIAkJc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvciAqZHMgPSAodm9pZCAqKV9kczsKLQkJRlZEQkcoImludGVyZmFjZSBkZXNjcmlwdG9yIik7CisJCXByX3ZkZWJ1ZygiaW50ZXJmYWNlIGRlc2NyaXB0b3JcbiIpOwogCQlpZiAobGVuZ3RoICE9IHNpemVvZiAqZHMpCiAJCQlnb3RvIGludl9sZW5ndGg7CiAKQEAgLTE2NTksNyArMTYzOCw3IEBACiAKIAljYXNlIFVTQl9EVF9FTkRQT0lOVDogewogCQlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmRzID0gKHZvaWQgKilfZHM7Ci0JCUZWREJHKCJlbmRwb2ludCBkZXNjcmlwdG9yIik7CisJCXByX3ZkZWJ1ZygiZW5kcG9pbnQgZGVzY3JpcHRvclxuIik7CiAJCWlmIChsZW5ndGggIT0gVVNCX0RUX0VORFBPSU5UX1NJWkUgJiYKIAkJICAgIGxlbmd0aCAhPSBVU0JfRFRfRU5EUE9JTlRfQVVESU9fU0laRSkKIAkJCWdvdG8gaW52X2xlbmd0aDsKQEAgLTE2NzQsNyArMTY1Myw3IEBACiAKIAljYXNlIFVTQl9EVF9JTlRFUkZBQ0VfQVNTT0NJQVRJT046IHsKIAkJc3RydWN0IHVzYl9pbnRlcmZhY2VfYXNzb2NfZGVzY3JpcHRvciAqZHMgPSAodm9pZCAqKV9kczsKLQkJRlZEQkcoImludGVyZmFjZSBhc3NvY2lhdGlvbiBkZXNjcmlwdG9yIik7CisJCXByX3ZkZWJ1ZygiaW50ZXJmYWNlIGFzc29jaWF0aW9uIGRlc2NyaXB0b3JcbiIpOwogCQlpZiAobGVuZ3RoICE9IHNpemVvZiAqZHMpCiAJCQlnb3RvIGludl9sZW5ndGg7CiAJCWlmIChkcy0+aUZ1bmN0aW9uKQpAQCAtMTY4OCwxNyArMTY2NywxNyBAQAogCWNhc2UgVVNCX0RUX1NFQ1VSSVRZOgogCWNhc2UgVVNCX0RUX0NTX1JBRElPX0NPTlRST0w6CiAJCS8qIFRPRE8gKi8KLQkJRlZEQkcoInVuaW1wbGVtZW50ZWQgZGVzY3JpcHRvcjogJWQiLCBfZHMtPmJEZXNjcmlwdG9yVHlwZSk7CisJCXByX3ZkZWJ1ZygidW5pbXBsZW1lbnRlZCBkZXNjcmlwdG9yOiAlZFxuIiwgX2RzLT5iRGVzY3JpcHRvclR5cGUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWRlZmF1bHQ6CiAJCS8qIFdlIHNob3VsZCBuZXZlciBiZSBoZXJlICovCi0JCUZWREJHKCJ1bmtub3duIGRlc2NyaXB0b3I6ICVkIiwgX2RzLT5iRGVzY3JpcHRvclR5cGUpOworCQlwcl92ZGVidWcoInVua25vd24gZGVzY3JpcHRvcjogJWRcbiIsIF9kcy0+YkRlc2NyaXB0b3JUeXBlKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpbnZfbGVuZ3RoOgotCQlGVkRCRygiaW52YWxpZCBsZW5ndGg6ICVkIChkZXNjcmlwdG9yICVkKSIsCi0JCSAgICAgIF9kcy0+Ykxlbmd0aCwgX2RzLT5iRGVzY3JpcHRvclR5cGUpOworaW52X2xlbmd0aDoKKwkJcHJfdmRlYnVnKCJpbnZhbGlkIGxlbmd0aDogJWQgKGRlc2NyaXB0b3IgJWQpXG4iLAorCQkJICBfZHMtPmJMZW5ndGgsIF9kcy0+YkRlc2NyaXB0b3JUeXBlKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0xNzExLDcgKzE2OTAsNiBAQAogCXJldHVybiBsZW5ndGg7CiB9CiAKLQogc3RhdGljIGludCBfX211c3RfY2hlY2sgZmZzX2RvX2Rlc2NzKHVuc2lnbmVkIGNvdW50LCBjaGFyICpkYXRhLCB1bnNpZ25lZCBsZW4sCiAJCQkJICAgICBmZnNfZW50aXR5X2NhbGxiYWNrIGVudGl0eSwgdm9pZCAqcHJpdikKIHsKQEAgLTE3MjYsMTAgKzE3MDQsMTEgQEAKIAkJaWYgKG51bSA9PSBjb3VudCkKIAkJCWRhdGEgPSBOVUxMOwogCi0JCS8qIFJlY29yZCAiZGVzY3JpcHRvciIgZW50aXRueSAqLworCQkvKiBSZWNvcmQgImRlc2NyaXB0b3IiIGVudGl0eSAqLwogCQlyZXQgPSBlbnRpdHkoRkZTX0RFU0NSSVBUT1IsICh1OCAqKW51bSwgKHZvaWQgKilkYXRhLCBwcml2KTsKIAkJaWYgKHVubGlrZWx5KHJldCA8IDApKSB7Ci0JCQlGREJHKCJlbnRpdHkgREVTQ1JJUFRPUiglMDJseCk7IHJldCA9ICVkIiwgbnVtLCByZXQpOworCQkJcHJfZGVidWcoImVudGl0eSBERVNDUklQVE9SKCUwMmx4KTsgcmV0ID0gJWRcbiIsCisJCQkJIG51bSwgcmV0KTsKIAkJCXJldHVybiByZXQ7CiAJCX0KIApAQCAtMTczOCw3ICsxNzE3LDcgQEAKIAogCQlyZXQgPSBmZnNfZG9fZGVzYyhkYXRhLCBsZW4sIGVudGl0eSwgcHJpdik7CiAJCWlmICh1bmxpa2VseShyZXQgPCAwKSkgewotCQkJRkRCRygiJXMgcmV0dXJucyAlZCIsIF9fZnVuY19fLCByZXQpOworCQkJcHJfZGVidWcoIiVzIHJldHVybnMgJWRcbiIsIF9fZnVuY19fLCByZXQpOwogCQkJcmV0dXJuIHJldDsKIAkJfQogCkBAIC0xNzQ4LDcgKzE3MjcsNiBAQAogCX0KIH0KIAotCiBzdGF0aWMgaW50IF9fZmZzX2RhdGFfZG9fZW50aXR5KGVudW0gZmZzX2VudGl0eV90eXBlIHR5cGUsCiAJCQkJdTggKnZhbHVlcCwgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqZGVzYywKIAkJCQl2b2lkICpwcml2KQpAQCAtMTc2MiwxNiArMTc0MCwyMCBAQAogCQlicmVhazsKIAogCWNhc2UgRkZTX0lOVEVSRkFDRToKLQkJLyogSW50ZXJmYWNlcyBhcmUgaW5kZXhlZCBmcm9tIHplcm8gc28gaWYgd2UKKwkJLyoKKwkJICogSW50ZXJmYWNlcyBhcmUgaW5kZXhlZCBmcm9tIHplcm8gc28gaWYgd2UKIAkJICogZW5jb3VudGVyZWQgaW50ZXJmYWNlICJuIiB0aGVuIHRoZXJlIGFyZSBhdCBsZWFzdAotCQkgKiAibisxIiBpbnRlcmZhY2VzLiAqLworCQkgKiAibisxIiBpbnRlcmZhY2VzLgorCQkgKi8KIAkJaWYgKCp2YWx1ZXAgPj0gZmZzLT5pbnRlcmZhY2VzX2NvdW50KQogCQkJZmZzLT5pbnRlcmZhY2VzX2NvdW50ID0gKnZhbHVlcCArIDE7CiAJCWJyZWFrOwogCiAJY2FzZSBGRlNfU1RSSU5HOgotCQkvKiBTdHJpbmdzIGFyZSBpbmRleGVkIGZyb20gMSAoMCBpcyBtYWdpYyA7KSByZXNlcnZlZAotCQkgKiBmb3IgbGFuZ3VhZ2VzIGxpc3Qgb3Igc29tZSBzdWNoKSAqLworCQkvKgorCQkgKiBTdHJpbmdzIGFyZSBpbmRleGVkIGZyb20gMSAoMCBpcyBtYWdpYyA7KSByZXNlcnZlZAorCQkgKiBmb3IgbGFuZ3VhZ2VzIGxpc3Qgb3Igc29tZSBzdWNoKQorCQkgKi8KIAkJaWYgKCp2YWx1ZXAgPiBmZnMtPnN0cmluZ3NfY291bnQpCiAJCQlmZnMtPnN0cmluZ3NfY291bnQgPSAqdmFsdWVwOwogCQlicmVhazsKQEAgLTE3ODYsNyArMTc2OCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLQogc3RhdGljIGludCBfX2Zmc19kYXRhX2dvdF9kZXNjcyhzdHJ1Y3QgZmZzX2RhdGEgKmZmcywKIAkJCQljaGFyICpjb25zdCBfZGF0YSwgc2l6ZV90IGxlbikKIHsKQEAgLTE4NDksOCArMTgzMCw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotCi0KIHN0YXRpYyBpbnQgX19mZnNfZGF0YV9nb3Rfc3RyaW5ncyhzdHJ1Y3QgZmZzX2RhdGEgKmZmcywKIAkJCQkgIGNoYXIgKmNvbnN0IF9kYXRhLCBzaXplX3QgbGVuKQogewpAQCAtMTg3NiwxNyArMTg1NSwxNyBAQAogCWlmICh1bmxpa2VseShzdHJfY291bnQgPCBuZWVkZWRfY291bnQpKQogCQlnb3RvIGVycm9yOwogCi0JLyogSWYgd2UgZG9uJ3QgbmVlZCBhbnkgc3RyaW5ncyBqdXN0IHJldHVybiBhbmQgZnJlZSBhbGwKLQkgKiBtZW1vcnkgKi8KKwkvKgorCSAqIElmIHdlIGRvbid0IG5lZWQgYW55IHN0cmluZ3MganVzdCByZXR1cm4gYW5kIGZyZWUgYWxsCisJICogbWVtb3J5LgorCSAqLwogCWlmICghbmVlZGVkX2NvdW50KSB7CiAJCWtmcmVlKF9kYXRhKTsKIAkJcmV0dXJuIDA7CiAJfQogCi0JLyogQWxsb2NhdGUgKi8KKwkvKiBBbGxvY2F0ZSBldmVyeXRoaW5nIGluIG9uZSBjaHVuayBzbyB0aGVyZSdzIGxlc3MgbWFpbnRlbmFuY2UuICovCiAJewotCQkvKiBBbGxvY2F0ZSBldmVyeXRoaW5nIGluIG9uZSBjaHVuayBzbyB0aGVyZSdzIGxlc3MKLQkJICogbWFpbnRhbmFuY2UuICovCiAJCXN0cnVjdCB7CiAJCQlzdHJ1Y3QgdXNiX2dhZGdldF9zdHJpbmdzICpzdHJpbmd0YWJzW2xhbmdfY291bnQgKyAxXTsKIAkJCXN0cnVjdCB1c2JfZ2FkZ2V0X3N0cmluZ3Mgc3RyaW5ndGFiW2xhbmdfY291bnRdOwpAQCAtMTkzNywxMyArMTkxNiwxNyBAQAogCQkJaWYgKHVubGlrZWx5KGxlbmd0aCA9PSBsZW4pKQogCQkJCWdvdG8gZXJyb3JfZnJlZTsKIAotCQkJLyogdXNlciBtYXkgcHJvdmlkZSBtb3JlIHN0cmluZ3MgdGhlbiB3ZSBuZWVkLAotCQkJICogaWYgdGhhdCdzIHRoZSBjYXNlIHdlIHNpbXBseSBpbmdvcmUgdGhlCi0JCQkgKiByZXN0ICovCisJCQkvKgorCQkJICogVXNlciBtYXkgcHJvdmlkZSBtb3JlIHN0cmluZ3MgdGhlbiB3ZSBuZWVkLAorCQkJICogaWYgdGhhdCdzIHRoZSBjYXNlIHdlIHNpbXBseSBpZ25vcmUgdGhlCisJCQkgKiByZXN0CisJCQkgKi8KIAkJCWlmIChsaWtlbHkobmVlZGVkKSkgewotCQkJCS8qIHMtPmlkIHdpbGwgYmUgc2V0IHdoaWxlIGFkZGluZworCQkJCS8qCisJCQkJICogcy0+aWQgd2lsbCBiZSBzZXQgd2hpbGUgYWRkaW5nCiAJCQkJICogZnVuY3Rpb24gdG8gY29uZmlndXJhdGlvbiBzbyBmb3IKLQkJCQkgKiBub3cganVzdCBsZWF2ZSBnYXJiYWdlIGhlcmUuICovCisJCQkJICogbm93IGp1c3QgbGVhdmUgZ2FyYmFnZSBoZXJlLgorCQkJCSAqLwogCQkJCXMtPnMgPSBkYXRhOwogCQkJCS0tbmVlZGVkOwogCQkJCSsrczsKQEAgLTE5NzcsOCArMTk2MCw2IEBACiB9CiAKIAotCi0KIC8qIEV2ZW50cyBoYW5kbGluZyBhbmQgbWFuYWdlbWVudCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiBzdGF0aWMgdm9pZCBfX2Zmc19ldmVudF9hZGQoc3RydWN0IGZmc19kYXRhICpmZnMsCkBAIC0xOTg3LDI5ICsxOTY4LDMyIEBACiAJZW51bSB1c2JfZnVuY3Rpb25mc19ldmVudF90eXBlIHJlbV90eXBlMSwgcmVtX3R5cGUyID0gdHlwZTsKIAlpbnQgbmVnID0gMDsKIAotCS8qIEFib3J0IGFueSB1bmhhbmRsZWQgc2V0dXAgKi8KLQkvKiBXZSBkbyBub3QgbmVlZCB0byB3b3JyeSBhYm91dCBzb21lIGNtcHhjaGcoKSBjaGFuZ2luZyB2YWx1ZQorCS8qCisJICogQWJvcnQgYW55IHVuaGFuZGxlZCBzZXR1cAorCSAqCisJICogV2UgZG8gbm90IG5lZWQgdG8gd29ycnkgYWJvdXQgc29tZSBjbXB4Y2hnKCkgY2hhbmdpbmcgdmFsdWUKIAkgKiBvZiBmZnMtPnNldHVwX3N0YXRlIHdpdGhvdXQgaG9sZGluZyB0aGUgbG9jayBiZWNhdXNlIHdoZW4KIAkgKiBzdGF0ZSBpcyBGRlNfU0VUVVBfUEVORElORyBjbXB4Y2hnKCkgaW4gc2V2ZXJhbCBwbGFjZXMgaW4KLQkgKiB0aGUgc291cmNlIGRvZXMgbm90aGluZy4gKi8KKwkgKiB0aGUgc291cmNlIGRvZXMgbm90aGluZy4KKwkgKi8KIAlpZiAoZmZzLT5zZXR1cF9zdGF0ZSA9PSBGRlNfU0VUVVBfUEVORElORykKIAkJZmZzLT5zZXR1cF9zdGF0ZSA9IEZGU19TRVRVUF9DQU5DRUxFRDsKIAogCXN3aXRjaCAodHlwZSkgewogCWNhc2UgRlVOQ1RJT05GU19SRVNVTUU6CiAJCXJlbV90eXBlMiA9IEZVTkNUSU9ORlNfU1VTUEVORDsKLQkJLyogRkFMTCBUSEdPVVRIICovCisJCS8qIEZBTEwgVEhST1VHSCAqLwogCWNhc2UgRlVOQ1RJT05GU19TVVNQRU5EOgogCWNhc2UgRlVOQ1RJT05GU19TRVRVUDoKIAkJcmVtX3R5cGUxID0gdHlwZTsKLQkJLyogZGlzY2FyZCBhbGwgc2ltaWxhciBldmVudHMgKi8KKwkJLyogRGlzY2FyZCBhbGwgc2ltaWxhciBldmVudHMgKi8KIAkJYnJlYWs7CiAKIAljYXNlIEZVTkNUSU9ORlNfQklORDoKIAljYXNlIEZVTkNUSU9ORlNfVU5CSU5EOgogCWNhc2UgRlVOQ1RJT05GU19ESVNBQkxFOgogCWNhc2UgRlVOQ1RJT05GU19FTkFCTEU6Ci0JCS8qIGRpc2NhcmQgZXZlcnl0aGluZyBvdGhlciB0aGVuIHBvd2VyIG1hbmFnZW1lbnQuICovCisJCS8qIERpc2NhcmQgZXZlcnl0aGluZyBvdGhlciB0aGVuIHBvd2VyIG1hbmFnZW1lbnQuICovCiAJCXJlbV90eXBlMSA9IEZVTkNUSU9ORlNfU1VTUEVORDsKIAkJcmVtX3R5cGUyID0gRlVOQ1RJT05GU19SRVNVTUU7CiAJCW5lZyA9IDE7CkBAIC0yMDI2LDExICsyMDEwLDExIEBACiAJCQlpZiAoKCpldiA9PSByZW1fdHlwZTEgfHwgKmV2ID09IHJlbV90eXBlMikgPT0gbmVnKQogCQkJCSpvdXQrKyA9ICpldjsKIAkJCWVsc2UKLQkJCQlGVkRCRygicHVyZ2luZyBldmVudCAlZCIsICpldik7CisJCQkJcHJfdmRlYnVnKCJwdXJnaW5nIGV2ZW50ICVkXG4iLCAqZXYpOwogCQlmZnMtPmV2LmNvdW50ID0gb3V0IC0gZmZzLT5ldi50eXBlczsKIAl9CiAKLQlGVkRCRygiYWRkaW5nIGV2ZW50ICVkIiwgdHlwZSk7CisJcHJfdmRlYnVnKCJhZGRpbmcgZXZlbnQgJWRcbiIsIHR5cGUpOwogCWZmcy0+ZXYudHlwZXNbZmZzLT5ldi5jb3VudCsrXSA9IHR5cGU7CiAJd2FrZV91cF9sb2NrZWQoJmZmcy0+ZXYud2FpdHEpOwogfQpAQCAtMjA1NSw4ICsyMDM5LDEwIEBACiAJc3RydWN0IGZmc19mdW5jdGlvbiAqZnVuYyA9IHByaXY7CiAJc3RydWN0IGZmc19lcCAqZmZzX2VwOwogCi0JLyogSWYgaHNfZGVzY3JpcHRvcnMgaXMgbm90IE5VTEwgdGhlbiB3ZSBhcmUgcmVhZGluZyBocwotCSAqIGRlc2NyaXB0b3JzIG5vdyAqLworCS8qCisJICogSWYgaHNfZGVzY3JpcHRvcnMgaXMgbm90IE5VTEwgdGhlbiB3ZSBhcmUgcmVhZGluZyBocworCSAqIGRlc2NyaXB0b3JzIG5vdworCSAqLwogCWNvbnN0IGludCBpc0hTID0gZnVuYy0+ZnVuY3Rpb24uaHNfZGVzY3JpcHRvcnMgIT0gTlVMTDsKIAl1bnNpZ25lZCBpZHg7CiAKQEAgLTIwNzUsOSArMjA2MSw5IEBACiAJZmZzX2VwID0gZnVuYy0+ZXBzICsgaWR4OwogCiAJaWYgKHVubGlrZWx5KGZmc19lcC0+ZGVzY3NbaXNIU10pKSB7Ci0JCUZWREJHKCJ0d28gJXNzcGVlZCBkZXNjcmlwdG9ycyBmb3IgRVAgJWQiLAotCQkgICAgICBpc0hTID8gImhpZ2giIDogImZ1bGwiLAotCQkgICAgICBkcy0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9FTkRQT0lOVF9OVU1CRVJfTUFTSyk7CisJCXByX3ZkZWJ1ZygidHdvICVzc3BlZWQgZGVzY3JpcHRvcnMgZm9yIEVQICVkXG4iLAorCQkJICBpc0hTID8gImhpZ2giIDogImZ1bGwiLAorCQkJICBkcy0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9FTkRQT0lOVF9OVU1CRVJfTUFTSyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlmZnNfZXAtPmRlc2NzW2lzSFNdID0gZHM7CkBAIC0yMDkxLDExICsyMDc3LDExIEBACiAJCXN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxOwogCQlzdHJ1Y3QgdXNiX2VwICplcDsKIAotCQlGVkRCRygiYXV0b2NvbmZpZyIpOworCQlwcl92ZGVidWcoImF1dG9jb25maWdcbiIpOwogCQllcCA9IHVzYl9lcF9hdXRvY29uZmlnKGZ1bmMtPmdhZGdldCwgZHMpOwogCQlpZiAodW5saWtlbHkoIWVwKSkKIAkJCXJldHVybiAtRU5PVFNVUFA7Ci0JCWVwLT5kcml2ZXJfZGF0YSA9IGZ1bmMtPmVwcyArIGlkeDs7CisJCWVwLT5kcml2ZXJfZGF0YSA9IGZ1bmMtPmVwcyArIGlkeDsKIAogCQlyZXEgPSB1c2JfZXBfYWxsb2NfcmVxdWVzdChlcCwgR0ZQX0tFUk5FTCk7CiAJCWlmICh1bmxpa2VseSghcmVxKSkKQEAgLTIxMTEsNyArMjA5Nyw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLQogc3RhdGljIGludCBfX2Zmc19mdW5jX2JpbmRfZG9fbnVtcyhlbnVtIGZmc19lbnRpdHlfdHlwZSB0eXBlLCB1OCAqdmFsdWVwLAogCQkJCSAgIHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKmRlc2MsCiAJCQkJICAgdm9pZCAqcHJpdikKQEAgLTIxNDMsOCArMjEyOCwxMCBAQAogCQlicmVhazsKIAogCWNhc2UgRkZTX0VORFBPSU5UOgotCQkvKiBVU0JfRFRfRU5EUE9JTlQgYXJlIGhhbmRsZWQgaW4KLQkJICogX19mZnNfZnVuY19iaW5kX2RvX2Rlc2NzKCkuICovCisJCS8qCisJCSAqIFVTQl9EVF9FTkRQT0lOVCBhcmUgaGFuZGxlZCBpbgorCQkgKiBfX2Zmc19mdW5jX2JpbmRfZG9fZGVzY3MoKS4KKwkJICovCiAJCWlmIChkZXNjLT5iRGVzY3JpcHRvclR5cGUgPT0gVVNCX0RUX0VORFBPSU5UKQogCQkJcmV0dXJuIDA7CiAKQEAgLTIxNjAsNyArMjE0Nyw3IEBACiAJCWJyZWFrOwogCX0KIAotCUZWREJHKCIlMDJ4IC0+ICUwMngiLCAqdmFsdWVwLCBuZXdWYWx1ZSk7CisJcHJfdmRlYnVnKCIlMDJ4IC0+ICUwMnhcbiIsICp2YWx1ZXAsIG5ld1ZhbHVlKTsKIAkqdmFsdWVwID0gbmV3VmFsdWU7CiAJcmV0dXJuIDA7CiB9CkBAIC0yMjExLDkgKzIxOTgsMTEgQEAKIAlmdW5jLT5lcHMgICAgICAgICAgICAgPSBkYXRhLT5lcHM7CiAJZnVuYy0+aW50ZXJmYWNlc19udW1zID0gZGF0YS0+aW51bXM7CiAKLQkvKiBHbyB0aHJvdWdodCBhbGwgdGhlIGVuZHBvaW50IGRlc2NyaXB0b3JzIGFuZCBhbGxvY2F0ZQorCS8qCisJICogR28gdGhyb3VnaCBhbGwgdGhlIGVuZHBvaW50IGRlc2NyaXB0b3JzIGFuZCBhbGxvY2F0ZQogCSAqIGVuZHBvaW50cyBmaXJzdCwgc28gdGhhdCBsYXRlciB3ZSBjYW4gcmV3cml0ZSB0aGUgZW5kcG9pbnQKLQkgKiBudW1iZXJzIHdpdGhvdXQgd29yeWluZyB0aGF0IGl0IG1heSBiZSBkZXNjcmliZWQgbGF0ZXIgb24uICovCisJICogbnVtYmVycyB3aXRob3V0IHdvcnJ5aW5nIHRoYXQgaXQgbWF5IGJlIGRlc2NyaWJlZCBsYXRlciBvbi4KKwkgKi8KIAlpZiAobGlrZWx5KGZ1bGwpKSB7CiAJCWZ1bmMtPmZ1bmN0aW9uLmRlc2NyaXB0b3JzID0gZGF0YS0+ZnNfZGVzY3M7CiAJCXJldCA9IGZmc19kb19kZXNjcyhmZnMtPmZzX2Rlc2NzX2NvdW50LApAQCAtMjIzNCw5ICsyMjIzLDExIEBACiAJCQkJICAgX19mZnNfZnVuY19iaW5kX2RvX2Rlc2NzLCBmdW5jKTsKIAl9CiAKLQkvKiBOb3cgaGFuZGxlIGludGVyZmFjZSBudW1iZXJzIGFsbG9jYXRpb24gYW5kIGludGVyZmFjZSBhbmQKLQkgKiBlbnBvaW50IG51bWJlcnMgcmV3cml0dGluZy4gIFdlIGNhbiBkbyB0aGF0IGluIG9uZSBnbwotCSAqIG5vdy4gKi8KKwkvKgorCSAqIE5vdyBoYW5kbGUgaW50ZXJmYWNlIG51bWJlcnMgYWxsb2NhdGlvbiBhbmQgaW50ZXJmYWNlIGFuZAorCSAqIGVuZHBvaW50IG51bWJlcnMgcmV3cml0aW5nLiAgV2UgY2FuIGRvIHRoYXQgaW4gb25lIGdvCisJICogbm93LgorCSAqLwogCXJldCA9IGZmc19kb19kZXNjcyhmZnMtPmZzX2Rlc2NzX2NvdW50ICsKIAkJCSAgIChoaWdoID8gZmZzLT5oc19kZXNjc19jb3VudCA6IDApLAogCQkJICAgZGF0YS0+cmF3X2Rlc2NzLCBzaXplb2YgZGF0YS0+cmF3X2Rlc2NzLApAQCAtMjI3NCw3ICsyMjY1LDYgQEAKIAlmZnNfZnVuY19mcmVlKGZ1bmMpOwogfQogCi0KIHN0YXRpYyBpbnQgZmZzX2Z1bmNfc2V0X2FsdChzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmLAogCQkJICAgIHVuc2lnbmVkIGludGVyZmFjZSwgdW5zaWduZWQgYWx0KQogewpAQCAtMjMyMiwyMCArMjMxMiwyMSBAQAogCiAJRU5URVIoKTsKIAotCUZWREJHKCJjcmVxLT5iUmVxdWVzdFR5cGUgPSAlMDJ4IiwgY3JlcS0+YlJlcXVlc3RUeXBlKTsKLQlGVkRCRygiY3JlcS0+YlJlcXVlc3QgICAgID0gJTAyeCIsIGNyZXEtPmJSZXF1ZXN0KTsKLQlGVkRCRygiY3JlcS0+d1ZhbHVlICAgICAgID0gJTA0eCIsIGxlMTZfdG9fY3B1KGNyZXEtPndWYWx1ZSkpOwotCUZWREJHKCJjcmVxLT53SW5kZXggICAgICAgPSAlMDR4IiwgbGUxNl90b19jcHUoY3JlcS0+d0luZGV4KSk7Ci0JRlZEQkcoImNyZXEtPndMZW5ndGggICAgICA9ICUwNHgiLCBsZTE2X3RvX2NwdShjcmVxLT53TGVuZ3RoKSk7CisJcHJfdmRlYnVnKCJjcmVxLT5iUmVxdWVzdFR5cGUgPSAlMDJ4XG4iLCBjcmVxLT5iUmVxdWVzdFR5cGUpOworCXByX3ZkZWJ1ZygiY3JlcS0+YlJlcXVlc3QgICAgID0gJTAyeFxuIiwgY3JlcS0+YlJlcXVlc3QpOworCXByX3ZkZWJ1ZygiY3JlcS0+d1ZhbHVlICAgICAgID0gJTA0eFxuIiwgbGUxNl90b19jcHUoY3JlcS0+d1ZhbHVlKSk7CisJcHJfdmRlYnVnKCJjcmVxLT53SW5kZXggICAgICAgPSAlMDR4XG4iLCBsZTE2X3RvX2NwdShjcmVxLT53SW5kZXgpKTsKKwlwcl92ZGVidWcoImNyZXEtPndMZW5ndGggICAgICA9ICUwNHhcbiIsIGxlMTZfdG9fY3B1KGNyZXEtPndMZW5ndGgpKTsKIAotCS8qIE1vc3QgcmVxdWVzdHMgZGlyZWN0ZWQgdG8gaW50ZXJmYWNlIGdvIHRocm91Z2h0IGhlcmUKKwkvKgorCSAqIE1vc3QgcmVxdWVzdHMgZGlyZWN0ZWQgdG8gaW50ZXJmYWNlIGdvIHRocm91Z2ggaGVyZQogCSAqIChub3RhYmxlIGV4Y2VwdGlvbnMgYXJlIHNldC9nZXQgaW50ZXJmYWNlKSBzbyB3ZSBuZWVkIHRvCiAJICogaGFuZGxlIHRoZW0uICBBbGwgb3RoZXIgZWl0aGVyIGhhbmRsZWQgYnkgY29tcG9zaXRlIG9yCiAJICogcGFzc2VkIHRvIHVzYl9jb25maWd1cmF0aW9uLT5zZXR1cCgpIChpZiBvbmUgaXMgc2V0KS4gIE5vCiAJICogbWF0dGVyLCB3ZSB3aWxsIGhhbmRsZSByZXF1ZXN0cyBkaXJlY3RlZCB0byBlbmRwb2ludCBoZXJlCiAJICogYXMgd2VsbCAoYXMgaXQncyBzdHJhaWdodGZvcndhcmQpIGJ1dCB3aGF0IHRvIGRvIHdpdGggYW55Ci0JICogb3RoZXIgcmVxdWVzdD8gKi8KLQorCSAqIG90aGVyIHJlcXVlc3Q/CisJICovCiAJaWYgKGZmcy0+c3RhdGUgIT0gRkZTX0FDVElWRSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKQEAgLTIzNzgsOCArMjM2OSw3IEBACiB9CiAKIAotCi0vKiBFbnBvaW50IGFuZCBpbnRlcmZhY2UgbnVtYmVycyByZXZlcnNlIG1hcHBpbmcgKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEVuZHBvaW50IGFuZCBpbnRlcmZhY2UgbnVtYmVycyByZXZlcnNlIG1hcHBpbmcgKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiBzdGF0aWMgaW50IGZmc19mdW5jX3Jldm1hcF9lcChzdHJ1Y3QgZmZzX2Z1bmN0aW9uICpmdW5jLCB1OCBudW0pCiB7CkBAIC0yNDEwLDcgKzI0MDAsNiBAQAogCQk6IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZShtdXRleCk7CiB9CiAKLQogc3RhdGljIGNoYXIgKmZmc19wcmVwYXJlX2J1ZmZlcihjb25zdCBjaGFyICogX191c2VyIGJ1Ziwgc2l6ZV90IGxlbikKIHsKIAljaGFyICpkYXRhOwpAQCAtMjQyNyw3ICsyNDE2LDcgQEAKIAkJcmV0dXJuIEVSUl9QVFIoLUVGQVVMVCk7CiAJfQogCi0JRlZEQkcoIkJ1ZmZlciBmcm9tIHVzZXIgc3BhY2U6Iik7CisJcHJfdmRlYnVnKCJCdWZmZXIgZnJvbSB1c2VyIHNwYWNlOlxuIik7CiAJZmZzX2R1bXBfbWVtKCIiLCBkYXRhLCBsZW4pOwogCiAJcmV0dXJuIGRhdGE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9tYXNzX3N0b3JhZ2UuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX21hc3Nfc3RvcmFnZS5jCmluZGV4IDgzODI4NmIuLmI1ZGJiMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX21hc3Nfc3RvcmFnZS5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX21hc3Nfc3RvcmFnZS5jCkBAIC0zNyw3ICszNyw2IEBACiAgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0KIC8qCiAgKiBUaGUgTWFzcyBTdG9yYWdlIEZ1bmN0aW9uIGFjdHMgYXMgYSBVU0IgTWFzcyBTdG9yYWdlIGRldmljZSwKICAqIGFwcGVhcmluZyB0byB0aGUgaG9zdCBhcyBhIGRpc2sgZHJpdmUgb3IgYXMgYSBDRC1ST00gZHJpdmUuICBJbgpAQCAtMTg1LDcgKzE4NCw2IEBACiAgKiA8aHR0cDovL3d3dy51c2Iub3JnL2RldmVsb3BlcnMvZGV2Y2xhc3NfZG9jcy91c2JtYXNzLXVmaTEwLnBkZj4uCiAgKi8KIAotCiAvKgogICoJCQkJRHJpdmVyIERlc2lnbgogICoKQEAgLTI3NSw3ICsyNzMsNiBAQAogLyogI2RlZmluZSBWRVJCT1NFX0RFQlVHICovCiAvKiAjZGVmaW5lIERVTVBfTVNHUyAqLwogCi0KICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CiAjaW5jbHVkZSA8bGludXgvZGNhY2hlLmg+CkBAIC0zMDAsNyArMjk3LDYgQEAKICNpbmNsdWRlICJnYWRnZXRfY2hpcHMuaCIKIAogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogI2RlZmluZSBGU0dfRFJJVkVSX0RFU0MJCSJNYXNzIFN0b3JhZ2UgRnVuY3Rpb24iCkBAIC0zMDgsNyArMzA0LDYgQEAKIAogc3RhdGljIGNvbnN0IGNoYXIgZnNnX3N0cmluZ19pbnRlcmZhY2VbXSA9ICJNYXNzIFN0b3JhZ2UiOwogCi0KICNkZWZpbmUgRlNHX05PX0lOVFJfRVAgMQogI2RlZmluZSBGU0dfTk9fREVWSUNFX1NUUklOR1MgICAgMQogI2RlZmluZSBGU0dfTk9fT1RHICAgICAgICAgICAgICAgMQpAQCAtMzI0LDI1ICszMTksMzAgQEAKIAogLyogRlNGIGNhbGxiYWNrIGZ1bmN0aW9ucyAqLwogc3RydWN0IGZzZ19vcGVyYXRpb25zIHsKLQkvKiBDYWxsYmFjayBmdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhyZWFkIGV4aXRzLiAgSWYgbm8KKwkvKgorCSAqIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aHJlYWQgZXhpdHMuICBJZiBubwogCSAqIGNhbGxiYWNrIGlzIHNldCBvciBpdCByZXR1cm5zIHZhbHVlIGxvd2VyIHRoZW4gemVybyBNU0YKIAkgKiB3aWxsIGZvcmNlIGVqZWN0IGFsbCBMVU5zIGl0IG9wZXJhdGVzIG9uIChpbmNsdWRpbmcgdGhvc2UKIAkgKiBtYXJrZWQgYXMgbm9uLXJlbW92YWJsZSBvciB3aXRoIHByZXZlbnRfbWVkaXVtX3JlbW92YWwgZmxhZwotCSAqIHNldCkuICovCisJICogc2V0KS4KKwkgKi8KIAlpbnQgKCp0aHJlYWRfZXhpdHMpKHN0cnVjdCBmc2dfY29tbW9uICpjb21tb24pOwogCi0JLyogQ2FsbGVkIHByaW9yIHRvIGVqZWN0aW9uLiAgTmVnYXRpdmUgcmV0dXJuIG1lYW5zIGVycm9yLAorCS8qCisJICogQ2FsbGVkIHByaW9yIHRvIGVqZWN0aW9uLiAgTmVnYXRpdmUgcmV0dXJuIG1lYW5zIGVycm9yLAogCSAqIHplcm8gbWVhbnMgdG8gY29udGludWUgd2l0aCBlamVjdGlvbiwgcG9zaXRpdmUgbWVhbnMgbm90IHRvCi0JICogZWplY3QuICovCisJICogZWplY3QuCisJICovCiAJaW50ICgqcHJlX2VqZWN0KShzdHJ1Y3QgZnNnX2NvbW1vbiAqY29tbW9uLAogCQkJIHN0cnVjdCBmc2dfbHVuICpsdW4sIGludCBudW0pOwotCS8qIENhbGxlZCBhZnRlciBlamVjdGlvbi4gIE5lZ2F0aXZlIHJldHVybiBtZWFucyBlcnJvciwgemVybwotCSAqIG9yIHBvc2l0aXZlIGlzIGp1c3QgYSBzdWNjZXNzLiAqLworCS8qCisJICogQ2FsbGVkIGFmdGVyIGVqZWN0aW9uLiAgTmVnYXRpdmUgcmV0dXJuIG1lYW5zIGVycm9yLCB6ZXJvCisJICogb3IgcG9zaXRpdmUgaXMganVzdCBhIHN1Y2Nlc3MuCisJICovCiAJaW50ICgqcG9zdF9lamVjdCkoc3RydWN0IGZzZ19jb21tb24gKmNvbW1vbiwKIAkJCSAgc3RydWN0IGZzZ19sdW4gKmx1biwgaW50IG51bSk7CiB9OwogCi0KIC8qIERhdGEgc2hhcmVkIGJ5IGFsbCB0aGUgRlNHIGluc3RhbmNlcy4gKi8KIHN0cnVjdCBmc2dfY29tbW9uIHsKIAlzdHJ1Y3QgdXNiX2dhZGdldAkqZ2FkZ2V0OwpAQCAtMzk4LDE0ICszOTgsMTUgQEAKIAkvKiBHYWRnZXQncyBwcml2YXRlIGRhdGEuICovCiAJdm9pZAkJCSpwcml2YXRlX2RhdGE7CiAKLQkvKiBWZW5kb3IgKDggY2hhcnMpLCBwcm9kdWN0ICgxNiBjaGFycyksIHJlbGVhc2UgKDQKLQkgKiBoZXhhZGVjaW1hbCBkaWdpdHMpIGFuZCBOVUwgYnl0ZSAqLworCS8qCisJICogVmVuZG9yICg4IGNoYXJzKSwgcHJvZHVjdCAoMTYgY2hhcnMpLCByZWxlYXNlICg0CisJICogaGV4YWRlY2ltYWwgZGlnaXRzKSBhbmQgTlVMIGJ5dGUKKwkgKi8KIAljaGFyIGlucXVpcnlfc3RyaW5nWzggKyAxNiArIDQgKyAxXTsKIAogCXN0cnVjdCBrcmVmCQlyZWY7CiB9OwogCi0KIHN0cnVjdCBmc2dfY29uZmlnIHsKIAl1bnNpZ25lZCBubHVuczsKIAlzdHJ1Y3QgZnNnX2x1bl9jb25maWcgewpAQCAtNDMxLDcgKzQzMiw2IEBACiAJY2hhcgkJCWNhbl9zdGFsbDsKIH07CiAKLQogc3RydWN0IGZzZ19kZXYgewogCXN0cnVjdCB1c2JfZnVuY3Rpb24JZnVuY3Rpb247CiAJc3RydWN0IHVzYl9nYWRnZXQJKmdhZGdldDsJLyogQ29weSBvZiBjZGV2LT5nYWRnZXQgKi8KQEAgLTQ0OSw3ICs0NDksNiBAQAogCXN0cnVjdCB1c2JfZXAJCSpidWxrX291dDsKIH07CiAKLQogc3RhdGljIGlubGluZSBpbnQgX19mc2dfaXNfc2V0KHN0cnVjdCBmc2dfY29tbW9uICpjb21tb24sCiAJCQkgICAgICAgY29uc3QgY2hhciAqZnVuYywgdW5zaWduZWQgbGluZSkKIHsKQEAgLTQ2MiwxMyArNDYxLDExIEBACiAKICNkZWZpbmUgZnNnX2lzX3NldChjb21tb24pIGxpa2VseShfX2ZzZ19pc19zZXQoY29tbW9uLCBfX2Z1bmNfXywgX19MSU5FX18pKQogCi0KIHN0YXRpYyBpbmxpbmUgc3RydWN0IGZzZ19kZXYgKmZzZ19mcm9tX2Z1bmMoc3RydWN0IHVzYl9mdW5jdGlvbiAqZikKIHsKIAlyZXR1cm4gY29udGFpbmVyX29mKGYsIHN0cnVjdCBmc2dfZGV2LCBmdW5jdGlvbik7CiB9CiAKLQogdHlwZWRlZiB2b2lkICgqZnNnX3JvdXRpbmVfdCkoc3RydWN0IGZzZ19kZXYgKik7CiAKIHN0YXRpYyBpbnQgZXhjZXB0aW9uX2luX3Byb2dyZXNzKHN0cnVjdCBmc2dfY29tbW9uICpjb21tb24pCkBAIC00NzgsNyArNDc1LDcgQEAKIAogLyogTWFrZSBidWxrLW91dCByZXF1ZXN0cyBiZSBkaXZpc2libGUgYnkgdGhlIG1heHBhY2tldCBzaXplICovCiBzdGF0aWMgdm9pZCBzZXRfYnVsa19vdXRfcmVxX2xlbmd0aChzdHJ1Y3QgZnNnX2NvbW1vbiAqY29tbW9uLAotCQlzdHJ1Y3QgZnNnX2J1ZmZoZCAqYmgsIHVuc2lnbmVkIGludCBsZW5ndGgpCisJCQkJICAgIHN0cnVjdCBmc2dfYnVmZmhkICpiaCwgdW5zaWduZWQgaW50IGxlbmd0aCkKIHsKIAl1bnNpZ25lZCBpbnQJcmVtOwogCkBAIC00ODksNiArNDg2LDcgQEAKIAliaC0+b3V0cmVxLT5sZW5ndGggPSBsZW5ndGg7CiB9CiAKKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogc3RhdGljIGludCBmc2dfc2V0X2hhbHQoc3RydWN0IGZzZ19kZXYgKmZzZywgc3RydWN0IHVzYl9lcCAqZXApCkBAIC01MTksMTQgKzUxNywxNSBAQAogCQl3YWtlX3VwX3Byb2Nlc3MoY29tbW9uLT50aHJlYWRfdGFzayk7CiB9CiAKLQogc3RhdGljIHZvaWQgcmFpc2VfZXhjZXB0aW9uKHN0cnVjdCBmc2dfY29tbW9uICpjb21tb24sIGVudW0gZnNnX3N0YXRlIG5ld19zdGF0ZSkKIHsKIAl1bnNpZ25lZCBsb25nCQlmbGFnczsKIAotCS8qIERvIG5vdGhpbmcgaWYgYSBoaWdoZXItcHJpb3JpdHkgZXhjZXB0aW9uIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MuCisJLyoKKwkgKiBEbyBub3RoaW5nIGlmIGEgaGlnaGVyLXByaW9yaXR5IGV4Y2VwdGlvbiBpcyBhbHJlYWR5IGluIHByb2dyZXNzLgogCSAqIElmIGEgbG93ZXItb3ItZXF1YWwgcHJpb3JpdHkgZXhjZXB0aW9uIGlzIGluIHByb2dyZXNzLCBwcmVlbXB0IGl0Ci0JICogYW5kIG5vdGlmeSB0aGUgbWFpbiB0aHJlYWQgYnkgc2VuZGluZyBpdCBhIHNpZ25hbC4gKi8KKwkgKiBhbmQgbm90aWZ5IHRoZSBtYWluIHRocmVhZCBieSBzZW5kaW5nIGl0IGEgc2lnbmFsLgorCSAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZjb21tb24tPmxvY2ssIGZsYWdzKTsKIAlpZiAoY29tbW9uLT5zdGF0ZSA8PSBuZXdfc3RhdGUpIHsKIAkJY29tbW9uLT5leGNlcHRpb25fcmVxX3RhZyA9IGNvbW1vbi0+ZXAwX3JlcV90YWc7CkBAIC01NTUsMTAgKzU1NCwxMCBAQAogCXJldHVybiByYzsKIH0KIAorCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0vKiBCdWxrIGFuZCBpbnRlcnJ1cHQgZW5kcG9pbnQgY29tcGxldGlvbiBoYW5kbGVycy4KLSAqIFRoZXNlIGFsd2F5cyBydW4gaW5faXJxLiAqLworLyogQ29tcGxldGlvbiBoYW5kbGVycy4gVGhlc2UgYWx3YXlzIHJ1biBpbl9pcnEuICovCiAKIHN0YXRpYyB2b2lkIGJ1bGtfaW5fY29tcGxldGUoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQogewpAQCAtNTY3LDcgKzU2Niw3IEBACiAKIAlpZiAocmVxLT5zdGF0dXMgfHwgcmVxLT5hY3R1YWwgIT0gcmVxLT5sZW5ndGgpCiAJCURCRyhjb21tb24sICIlcyAtLT4gJWQsICV1LyV1XG4iLCBfX2Z1bmNfXywKLQkJCQlyZXEtPnN0YXR1cywgcmVxLT5hY3R1YWwsIHJlcS0+bGVuZ3RoKTsKKwkJICAgIHJlcS0+c3RhdHVzLCByZXEtPmFjdHVhbCwgcmVxLT5sZW5ndGgpOwogCWlmIChyZXEtPnN0YXR1cyA9PSAtRUNPTk5SRVNFVCkJCS8qIFJlcXVlc3Qgd2FzIGNhbmNlbGxlZCAqLwogCQl1c2JfZXBfZmlmb19mbHVzaChlcCk7CiAKQEAgLTU4OCw4ICs1ODcsNyBAQAogCWR1bXBfbXNnKGNvbW1vbiwgImJ1bGstb3V0IiwgcmVxLT5idWYsIHJlcS0+YWN0dWFsKTsKIAlpZiAocmVxLT5zdGF0dXMgfHwgcmVxLT5hY3R1YWwgIT0gYmgtPmJ1bGtfb3V0X2ludGVuZGVkX2xlbmd0aCkKIAkJREJHKGNvbW1vbiwgIiVzIC0tPiAlZCwgJXUvJXVcbiIsIF9fZnVuY19fLAotCQkJCXJlcS0+c3RhdHVzLCByZXEtPmFjdHVhbCwKLQkJCQliaC0+YnVsa19vdXRfaW50ZW5kZWRfbGVuZ3RoKTsKKwkJICAgIHJlcS0+c3RhdHVzLCByZXEtPmFjdHVhbCwgYmgtPmJ1bGtfb3V0X2ludGVuZGVkX2xlbmd0aCk7CiAJaWYgKHJlcS0+c3RhdHVzID09IC1FQ09OTlJFU0VUKQkJLyogUmVxdWVzdCB3YXMgY2FuY2VsbGVkICovCiAJCXVzYl9lcF9maWZvX2ZsdXNoKGVwKTsKIApAQCAtNjAyLDEzICs2MDAsOCBAQAogCXNwaW5fdW5sb2NrKCZjb21tb24tPmxvY2spOwogfQogCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qIEVwMCBjbGFzcy1zcGVjaWZpYyBoYW5kbGVycy4gIFRoZXNlIGFsd2F5cyBydW4gaW5faXJxLiAqLwotCiBzdGF0aWMgaW50IGZzZ19zZXR1cChzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmLAotCQljb25zdCBzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpjdHJsKQorCQkgICAgIGNvbnN0IHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmN0cmwpCiB7CiAJc3RydWN0IGZzZ19kZXYJCSpmc2cgPSBmc2dfZnJvbV9mdW5jKGYpOwogCXN0cnVjdCB1c2JfcmVxdWVzdAkqcmVxID0gZnNnLT5jb21tb24tPmVwMHJlcTsKQEAgLTYyOCw4ICs2MjEsMTAgQEAKIAkJaWYgKHdfaW5kZXggIT0gZnNnLT5pbnRlcmZhY2VfbnVtYmVyIHx8IHdfdmFsdWUgIT0gMCkKIAkJCXJldHVybiAtRURPTTsKIAotCQkvKiBSYWlzZSBhbiBleGNlcHRpb24gdG8gc3RvcCB0aGUgY3VycmVudCBvcGVyYXRpb24KLQkJICogYW5kIHJlaW5pdGlhbGl6ZSBvdXIgc3RhdGUuICovCisJCS8qCisJCSAqIFJhaXNlIGFuIGV4Y2VwdGlvbiB0byBzdG9wIHRoZSBjdXJyZW50IG9wZXJhdGlvbgorCQkgKiBhbmQgcmVpbml0aWFsaXplIG91ciBzdGF0ZS4KKwkJICovCiAJCURCRyhmc2csICJidWxrIHJlc2V0IHJlcXVlc3RcbiIpOwogCQlyYWlzZV9leGNlcHRpb24oZnNnLT5jb21tb24sIEZTR19TVEFURV9SRVNFVCk7CiAJCXJldHVybiBERUxBWUVEX1NUQVRVUzsKQEAgLTY0MSw3ICs2MzYsNyBAQAogCQlpZiAod19pbmRleCAhPSBmc2ctPmludGVyZmFjZV9udW1iZXIgfHwgd192YWx1ZSAhPSAwKQogCQkJcmV0dXJuIC1FRE9NOwogCQlWREJHKGZzZywgImdldCBtYXggTFVOXG4iKTsKLQkJKih1OCAqKSByZXEtPmJ1ZiA9IGZzZy0+Y29tbW9uLT5ubHVucyAtIDE7CisJCSoodTggKilyZXEtPmJ1ZiA9IGZzZy0+Y29tbW9uLT5ubHVucyAtIDE7CiAKIAkJLyogUmVzcG9uZCB3aXRoIGRhdGEvc3RhdHVzICovCiAJCXJlcS0+bGVuZ3RoID0gbWluKCh1MTYpMSwgd19sZW5ndGgpOwpAQCAtNjQ5LDggKzY0NCw3IEBACiAJfQogCiAJVkRCRyhmc2csCi0JICAgICAidW5rbm93biBjbGFzcy1zcGVjaWZpYyBjb250cm9sIHJlcSAiCi0JICAgICAiJTAyeC4lMDJ4IHYlMDR4IGklMDR4IGwldVxuIiwKKwkgICAgICJ1bmtub3duIGNsYXNzLXNwZWNpZmljIGNvbnRyb2wgcmVxICUwMnguJTAyeCB2JTA0eCBpJTA0eCBsJXVcbiIsCiAJICAgICBjdHJsLT5iUmVxdWVzdFR5cGUsIGN0cmwtPmJSZXF1ZXN0LAogCSAgICAgbGUxNl90b19jcHUoY3RybC0+d1ZhbHVlKSwgd19pbmRleCwgd19sZW5ndGgpOwogCXJldHVybiAtRU9QTk9UU1VQUDsKQEAgLTY2MSwxMSArNjU1LDEwIEBACiAKIC8qIEFsbCB0aGUgZm9sbG93aW5nIHJvdXRpbmVzIHJ1biBpbiBwcm9jZXNzIGNvbnRleHQgKi8KIAotCiAvKiBVc2UgdGhpcyBmb3IgYnVsayBvciBpbnRlcnJ1cHQgdHJhbnNmZXJzLCBub3QgZXAwICovCiBzdGF0aWMgdm9pZCBzdGFydF90cmFuc2ZlcihzdHJ1Y3QgZnNnX2RldiAqZnNnLCBzdHJ1Y3QgdXNiX2VwICplcCwKLQkJc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEsIGludCAqcGJ1c3ksCi0JCWVudW0gZnNnX2J1ZmZlcl9zdGF0ZSAqc3RhdGUpCisJCQkgICBzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSwgaW50ICpwYnVzeSwKKwkJCSAgIGVudW0gZnNnX2J1ZmZlcl9zdGF0ZSAqc3RhdGUpCiB7CiAJaW50CXJjOwogCkBAIC02ODMsMjUgKzY3NiwzNCBAQAogCiAJCS8qIFdlIGNhbid0IGRvIG11Y2ggbW9yZSB0aGFuIHdhaXQgZm9yIGEgcmVzZXQgKi8KIAotCQkvKiBOb3RlOiBjdXJyZW50bHkgdGhlIG5ldDIyODAgZHJpdmVyIGZhaWxzIHplcm8tbGVuZ3RoCi0JCSAqIHN1Ym1pc3Npb25zIGlmIERNQSBpcyBlbmFibGVkLiAqLwotCQlpZiAocmMgIT0gLUVTSFVURE9XTiAmJiAhKHJjID09IC1FT1BOT1RTVVBQICYmCi0JCQkJCQlyZXEtPmxlbmd0aCA9PSAwKSkKKwkJLyoKKwkJICogTm90ZTogY3VycmVudGx5IHRoZSBuZXQyMjgwIGRyaXZlciBmYWlscyB6ZXJvLWxlbmd0aAorCQkgKiBzdWJtaXNzaW9ucyBpZiBETUEgaXMgZW5hYmxlZC4KKwkJICovCisJCWlmIChyYyAhPSAtRVNIVVRET1dOICYmCisJCSAgICAhKHJjID09IC1FT1BOT1RTVVBQICYmIHJlcS0+bGVuZ3RoID09IDApKQogCQkJV0FSTklORyhmc2csICJlcnJvciBpbiBzdWJtaXNzaW9uOiAlcyAtLT4gJWRcbiIsCi0JCQkJCWVwLT5uYW1lLCByYyk7CisJCQkJZXAtPm5hbWUsIHJjKTsKIAl9CiB9CiAKLSNkZWZpbmUgU1RBUlRfVFJBTlNGRVJfT1IoY29tbW9uLCBlcF9uYW1lLCByZXEsIHBidXN5LCBzdGF0ZSkJCVwKLQlpZiAoZnNnX2lzX3NldChjb21tb24pKQkJCQkJCVwKLQkJc3RhcnRfdHJhbnNmZXIoKGNvbW1vbiktPmZzZywgKGNvbW1vbiktPmZzZy0+ZXBfbmFtZSwJXAotCQkJICAgICAgIHJlcSwgcGJ1c3ksIHN0YXRlKTsJCQlcCi0JZWxzZQorc3RhdGljIGJvb2wgc3RhcnRfaW5fdHJhbnNmZXIoc3RydWN0IGZzZ19jb21tb24gKmNvbW1vbiwgc3RydWN0IGZzZ19idWZmaGQgKmJoKQoreworCWlmICghZnNnX2lzX3NldChjb21tb24pKQorCQlyZXR1cm4gZmFsc2U7CisJc3RhcnRfdHJhbnNmZXIoY29tbW9uLT5mc2csIGNvbW1vbi0+ZnNnLT5idWxrX2luLAorCQkgICAgICAgYmgtPmlucmVxLCAmYmgtPmlucmVxX2J1c3ksICZiaC0+c3RhdGUpOworCXJldHVybiB0cnVlOworfQogCi0jZGVmaW5lIFNUQVJUX1RSQU5TRkVSKGNvbW1vbiwgZXBfbmFtZSwgcmVxLCBwYnVzeSwgc3RhdGUpCQlcCi0JU1RBUlRfVFJBTlNGRVJfT1IoY29tbW9uLCBlcF9uYW1lLCByZXEsIHBidXN5LCBzdGF0ZSkgKHZvaWQpMAotCi0KK3N0YXRpYyBib29sIHN0YXJ0X291dF90cmFuc2ZlcihzdHJ1Y3QgZnNnX2NvbW1vbiAqY29tbW9uLCBzdHJ1Y3QgZnNnX2J1ZmZoZCAqYmgpCit7CisJaWYgKCFmc2dfaXNfc2V0KGNvbW1vbikpCisJCXJldHVybiBmYWxzZTsKKwlzdGFydF90cmFuc2Zlcihjb21tb24tPmZzZywgY29tbW9uLT5mc2ctPmJ1bGtfb3V0LAorCQkgICAgICAgYmgtPm91dHJlcSwgJmJoLT5vdXRyZXFfYnVzeSwgJmJoLT5zdGF0ZSk7CisJcmV0dXJuIHRydWU7Cit9CiAKIHN0YXRpYyBpbnQgc2xlZXBfdGhyZWFkKHN0cnVjdCBmc2dfY29tbW9uICpjb21tb24pCiB7CkBAIC03MzksMTYgKzc0MSwyMCBAQAogCXVuc2lnbmVkIGludAkJcGFydGlhbF9wYWdlOwogCXNzaXplX3QJCQlucmVhZDsKIAotCS8qIEdldCB0aGUgc3RhcnRpbmcgTG9naWNhbCBCbG9jayBBZGRyZXNzIGFuZCBjaGVjayB0aGF0IGl0J3MKLQkgKiBub3QgdG9vIGJpZyAqLworCS8qCisJICogR2V0IHRoZSBzdGFydGluZyBMb2dpY2FsIEJsb2NrIEFkZHJlc3MgYW5kIGNoZWNrIHRoYXQgaXQncworCSAqIG5vdCB0b28gYmlnLgorCSAqLwogCWlmIChjb21tb24tPmNtbmRbMF0gPT0gUkVBRF82KQogCQlsYmEgPSBnZXRfdW5hbGlnbmVkX2JlMjQoJmNvbW1vbi0+Y21uZFsxXSk7CiAJZWxzZSB7CiAJCWxiYSA9IGdldF91bmFsaWduZWRfYmUzMigmY29tbW9uLT5jbW5kWzJdKTsKIAotCQkvKiBXZSBhbGxvdyBEUE8gKERpc2FibGUgUGFnZSBPdXQgPSBkb24ndCBzYXZlIGRhdGEgaW4gdGhlCisJCS8qCisJCSAqIFdlIGFsbG93IERQTyAoRGlzYWJsZSBQYWdlIE91dCA9IGRvbid0IHNhdmUgZGF0YSBpbiB0aGUKIAkJICogY2FjaGUpIGFuZCBGVUEgKEZvcmNlIFVuaXQgQWNjZXNzID0gZG9uJ3QgcmVhZCBmcm9tIHRoZQotCQkgKiBjYWNoZSksIGJ1dCB3ZSBkb24ndCBpbXBsZW1lbnQgdGhlbS4gKi8KKwkJICogY2FjaGUpLCBidXQgd2UgZG9uJ3QgaW1wbGVtZW50IHRoZW0uCisJCSAqLwogCQlpZiAoKGNvbW1vbi0+Y21uZFsxXSAmIH4weDE4KSAhPSAwKSB7CiAJCQljdXJsdW4tPnNlbnNlX2RhdGEgPSBTU19JTlZBTElEX0ZJRUxEX0lOX0NEQjsKIAkJCXJldHVybiAtRUlOVkFMOwpAQCAtNzY2LDIyICs3NzIsMjMgQEAKIAkJcmV0dXJuIC1FSU87CQkvKiBObyBkZWZhdWx0IHJlcGx5ICovCiAKIAlmb3IgKDs7KSB7Ci0KLQkJLyogRmlndXJlIG91dCBob3cgbXVjaCB3ZSBuZWVkIHRvIHJlYWQ6CisJCS8qCisJCSAqIEZpZ3VyZSBvdXQgaG93IG11Y2ggd2UgbmVlZCB0byByZWFkOgogCQkgKiBUcnkgdG8gcmVhZCB0aGUgcmVtYWluaW5nIGFtb3VudC4KIAkJICogQnV0IGRvbid0IHJlYWQgbW9yZSB0aGFuIHRoZSBidWZmZXIgc2l6ZS4KIAkJICogQW5kIGRvbid0IHRyeSB0byByZWFkIHBhc3QgdGhlIGVuZCBvZiB0aGUgZmlsZS4KIAkJICogRmluYWxseSwgaWYgd2UncmUgbm90IGF0IGEgcGFnZSBib3VuZGFyeSwgZG9uJ3QgcmVhZCBwYXN0CiAJCSAqCXRoZSBuZXh0IHBhZ2UuCiAJCSAqIElmIHRoaXMgbWVhbnMgcmVhZGluZyAwIHRoZW4gd2Ugd2VyZSBhc2tlZCB0byByZWFkIHBhc3QKLQkJICoJdGhlIGVuZCBvZiBmaWxlLiAqLworCQkgKgl0aGUgZW5kIG9mIGZpbGUuCisJCSAqLwogCQlhbW91bnQgPSBtaW4oYW1vdW50X2xlZnQsIEZTR19CVUZMRU4pOwotCQlhbW91bnQgPSBtaW4oKGxvZmZfdCkgYW1vdW50LAotCQkJCWN1cmx1bi0+ZmlsZV9sZW5ndGggLSBmaWxlX29mZnNldCk7CisJCWFtb3VudCA9IG1pbigobG9mZl90KWFtb3VudCwKKwkJCSAgICAgY3VybHVuLT5maWxlX2xlbmd0aCAtIGZpbGVfb2Zmc2V0KTsKIAkJcGFydGlhbF9wYWdlID0gZmlsZV9vZmZzZXQgJiAoUEFHRV9DQUNIRV9TSVpFIC0gMSk7CiAJCWlmIChwYXJ0aWFsX3BhZ2UgPiAwKQotCQkJYW1vdW50ID0gbWluKGFtb3VudCwgKHVuc2lnbmVkIGludCkgUEFHRV9DQUNIRV9TSVpFIC0KLQkJCQkJcGFydGlhbF9wYWdlKTsKKwkJCWFtb3VudCA9IG1pbihhbW91bnQsICh1bnNpZ25lZCBpbnQpUEFHRV9DQUNIRV9TSVpFIC0KKwkJCQkJICAgICBwYXJ0aWFsX3BhZ2UpOwogCiAJCS8qIFdhaXQgZm9yIHRoZSBuZXh0IGJ1ZmZlciB0byBiZWNvbWUgYXZhaWxhYmxlICovCiAJCWJoID0gY29tbW9uLT5uZXh0X2J1ZmZoZF90b19maWxsOwpAQCAtNzkxLDggKzc5OCwxMCBAQAogCQkJCXJldHVybiByYzsKIAkJfQogCi0JCS8qIElmIHdlIHdlcmUgYXNrZWQgdG8gcmVhZCBwYXN0IHRoZSBlbmQgb2YgZmlsZSwKLQkJICogZW5kIHdpdGggYW4gZW1wdHkgYnVmZmVyLiAqLworCQkvKgorCQkgKiBJZiB3ZSB3ZXJlIGFza2VkIHRvIHJlYWQgcGFzdCB0aGUgZW5kIG9mIGZpbGUsCisJCSAqIGVuZCB3aXRoIGFuIGVtcHR5IGJ1ZmZlci4KKwkJICovCiAJCWlmIChhbW91bnQgPT0gMCkgewogCQkJY3VybHVuLT5zZW5zZV9kYXRhID0KIAkJCQkJU1NfTE9HSUNBTF9CTE9DS19BRERSRVNTX09VVF9PRl9SQU5HRTsKQEAgLTgwNiwyMSArODE1LDE5IEBACiAJCS8qIFBlcmZvcm0gdGhlIHJlYWQgKi8KIAkJZmlsZV9vZmZzZXRfdG1wID0gZmlsZV9vZmZzZXQ7CiAJCW5yZWFkID0gdmZzX3JlYWQoY3VybHVuLT5maWxwLAotCQkJCShjaGFyIF9fdXNlciAqKSBiaC0+YnVmLAotCQkJCWFtb3VudCwgJmZpbGVfb2Zmc2V0X3RtcCk7CisJCQkJIChjaGFyIF9fdXNlciAqKWJoLT5idWYsCisJCQkJIGFtb3VudCwgJmZpbGVfb2Zmc2V0X3RtcCk7CiAJCVZMREJHKGN1cmx1biwgImZpbGUgcmVhZCAldSBAICVsbHUgLT4gJWRcbiIsIGFtb3VudCwKLQkJCQkodW5zaWduZWQgbG9uZyBsb25nKSBmaWxlX29mZnNldCwKLQkJCQkoaW50KSBucmVhZCk7CisJCSAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpZmlsZV9vZmZzZXQsIChpbnQpbnJlYWQpOwogCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCiAJCQlyZXR1cm4gLUVJTlRSOwogCiAJCWlmIChucmVhZCA8IDApIHsKLQkJCUxEQkcoY3VybHVuLCAiZXJyb3IgaW4gZmlsZSByZWFkOiAlZFxuIiwKLQkJCQkJKGludCkgbnJlYWQpOworCQkJTERCRyhjdXJsdW4sICJlcnJvciBpbiBmaWxlIHJlYWQ6ICVkXG4iLCAoaW50KW5yZWFkKTsKIAkJCW5yZWFkID0gMDsKIAkJfSBlbHNlIGlmIChucmVhZCA8IGFtb3VudCkgewogCQkJTERCRyhjdXJsdW4sICJwYXJ0aWFsIGZpbGUgcmVhZDogJWQvJXVcbiIsCi0JCQkJCShpbnQpIG5yZWFkLCBhbW91bnQpOworCQkJICAgICAoaW50KW5yZWFkLCBhbW91bnQpOwogCQkJbnJlYWQgLT0gKG5yZWFkICYgNTExKTsJLyogUm91bmQgZG93biB0byBhIGJsb2NrICovCiAJCX0KIAkJZmlsZV9vZmZzZXQgICs9IG5yZWFkOwpAQCAtODQyLDEwICs4NDksOCBAQAogCiAJCS8qIFNlbmQgdGhpcyBidWZmZXIgYW5kIGdvIHJlYWQgc29tZSBtb3JlICovCiAJCWJoLT5pbnJlcS0+emVybyA9IDA7Ci0JCVNUQVJUX1RSQU5TRkVSX09SKGNvbW1vbiwgYnVsa19pbiwgYmgtPmlucmVxLAotCQkJICAgICAgICZiaC0+aW5yZXFfYnVzeSwgJmJoLT5zdGF0ZSkKLQkJCS8qIERvbid0IGtub3cgd2hhdCB0byBkbyBpZgotCQkJICogY29tbW9uLT5mc2cgaXMgTlVMTCAqLworCQlpZiAoIXN0YXJ0X2luX3RyYW5zZmVyKGNvbW1vbiwgYmgpKQorCQkJLyogRG9uJ3Qga25vdyB3aGF0IHRvIGRvIGlmIGNvbW1vbi0+ZnNnIGlzIE5VTEwgKi8KIAkJCXJldHVybiAtRUlPOwogCQljb21tb24tPm5leHRfYnVmZmhkX3RvX2ZpbGwgPSBiaC0+bmV4dDsKIAl9CkBAIC04NzcsMTcgKzg4MiwyMSBAQAogCWN1cmx1bi0+ZmlscC0+Zl9mbGFncyAmPSB+T19TWU5DOwkvKiBEZWZhdWx0IGlzIG5vdCB0byB3YWl0ICovCiAJc3Bpbl91bmxvY2soJmN1cmx1bi0+ZmlscC0+Zl9sb2NrKTsKIAotCS8qIEdldCB0aGUgc3RhcnRpbmcgTG9naWNhbCBCbG9jayBBZGRyZXNzIGFuZCBjaGVjayB0aGF0IGl0J3MKLQkgKiBub3QgdG9vIGJpZyAqLworCS8qCisJICogR2V0IHRoZSBzdGFydGluZyBMb2dpY2FsIEJsb2NrIEFkZHJlc3MgYW5kIGNoZWNrIHRoYXQgaXQncworCSAqIG5vdCB0b28gYmlnCisJICovCiAJaWYgKGNvbW1vbi0+Y21uZFswXSA9PSBXUklURV82KQogCQlsYmEgPSBnZXRfdW5hbGlnbmVkX2JlMjQoJmNvbW1vbi0+Y21uZFsxXSk7CiAJZWxzZSB7CiAJCWxiYSA9IGdldF91bmFsaWduZWRfYmUzMigmY29tbW9uLT5jbW5kWzJdKTsKIAotCQkvKiBXZSBhbGxvdyBEUE8gKERpc2FibGUgUGFnZSBPdXQgPSBkb24ndCBzYXZlIGRhdGEgaW4gdGhlCisJCS8qCisJCSAqIFdlIGFsbG93IERQTyAoRGlzYWJsZSBQYWdlIE91dCA9IGRvbid0IHNhdmUgZGF0YSBpbiB0aGUKIAkJICogY2FjaGUpIGFuZCBGVUEgKEZvcmNlIFVuaXQgQWNjZXNzID0gd3JpdGUgZGlyZWN0bHkgdG8gdGhlCiAJCSAqIG1lZGl1bSkuICBXZSBkb24ndCBpbXBsZW1lbnQgRFBPOyB3ZSBpbXBsZW1lbnQgRlVBIGJ5Ci0JCSAqIHBlcmZvcm1pbmcgc3luY2hyb25vdXMgb3V0cHV0LiAqLworCQkgKiBwZXJmb3JtaW5nIHN5bmNocm9ub3VzIG91dHB1dC4KKwkJICovCiAJCWlmIChjb21tb24tPmNtbmRbMV0gJiB+MHgxOCkgewogCQkJY3VybHVuLT5zZW5zZV9kYXRhID0gU1NfSU5WQUxJRF9GSUVMRF9JTl9DREI7CiAJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTkxNSw3ICs5MjQsOCBAQAogCQliaCA9IGNvbW1vbi0+bmV4dF9idWZmaGRfdG9fZmlsbDsKIAkJaWYgKGJoLT5zdGF0ZSA9PSBCVUZfU1RBVEVfRU1QVFkgJiYgZ2V0X3NvbWVfbW9yZSkgewogCi0JCQkvKiBGaWd1cmUgb3V0IGhvdyBtdWNoIHdlIHdhbnQgdG8gZ2V0OgorCQkJLyoKKwkJCSAqIEZpZ3VyZSBvdXQgaG93IG11Y2ggd2Ugd2FudCB0byBnZXQ6CiAJCQkgKiBUcnkgdG8gZ2V0IHRoZSByZW1haW5pbmcgYW1vdW50LgogCQkJICogQnV0IGRvbid0IGdldCBtb3JlIHRoYW4gdGhlIGJ1ZmZlciBzaXplLgogCQkJICogQW5kIGRvbid0IHRyeSB0byBnbyBwYXN0IHRoZSBlbmQgb2YgdGhlIGZpbGUuCkBAIC05MjMsMTQgKzkzMywxNSBAQAogCQkJICoJZG9uJ3QgZ28gcGFzdCB0aGUgbmV4dCBwYWdlLgogCQkJICogSWYgdGhpcyBtZWFucyBnZXR0aW5nIDAsIHRoZW4gd2Ugd2VyZSBhc2tlZAogCQkJICoJdG8gd3JpdGUgcGFzdCB0aGUgZW5kIG9mIGZpbGUuCi0JCQkgKiBGaW5hbGx5LCByb3VuZCBkb3duIHRvIGEgYmxvY2sgYm91bmRhcnkuICovCisJCQkgKiBGaW5hbGx5LCByb3VuZCBkb3duIHRvIGEgYmxvY2sgYm91bmRhcnkuCisJCQkgKi8KIAkJCWFtb3VudCA9IG1pbihhbW91bnRfbGVmdF90b19yZXEsIEZTR19CVUZMRU4pOwotCQkJYW1vdW50ID0gbWluKChsb2ZmX3QpIGFtb3VudCwgY3VybHVuLT5maWxlX2xlbmd0aCAtCi0JCQkJCXVzYl9vZmZzZXQpOworCQkJYW1vdW50ID0gbWluKChsb2ZmX3QpYW1vdW50LAorCQkJCSAgICAgY3VybHVuLT5maWxlX2xlbmd0aCAtIHVzYl9vZmZzZXQpOwogCQkJcGFydGlhbF9wYWdlID0gdXNiX29mZnNldCAmIChQQUdFX0NBQ0hFX1NJWkUgLSAxKTsKIAkJCWlmIChwYXJ0aWFsX3BhZ2UgPiAwKQogCQkJCWFtb3VudCA9IG1pbihhbW91bnQsCi0JKHVuc2lnbmVkIGludCkgUEFHRV9DQUNIRV9TSVpFIC0gcGFydGlhbF9wYWdlKTsKKwkodW5zaWduZWQgaW50KVBBR0VfQ0FDSEVfU0laRSAtIHBhcnRpYWxfcGFnZSk7CiAKIAkJCWlmIChhbW91bnQgPT0gMCkgewogCQkJCWdldF9zb21lX21vcmUgPSAwOwpAQCAtOTQwLDExICs5NTEsMTMgQEAKIAkJCQljdXJsdW4tPmluZm9fdmFsaWQgPSAxOwogCQkJCWNvbnRpbnVlOwogCQkJfQotCQkJYW1vdW50IC09IChhbW91bnQgJiA1MTEpOworCQkJYW1vdW50IC09IGFtb3VudCAmIDUxMTsKIAkJCWlmIChhbW91bnQgPT0gMCkgewogCi0JCQkJLyogV2h5IHdlcmUgd2Ugd2VyZSBhc2tlZCB0byB0cmFuc2ZlciBhCi0JCQkJICogcGFydGlhbCBibG9jaz8gKi8KKwkJCQkvKgorCQkJCSAqIFdoeSB3ZXJlIHdlIHdlcmUgYXNrZWQgdG8gdHJhbnNmZXIgYQorCQkJCSAqIHBhcnRpYWwgYmxvY2s/CisJCQkJICovCiAJCQkJZ2V0X3NvbWVfbW9yZSA9IDA7CiAJCQkJY29udGludWU7CiAJCQl9CkBAIC05NTYsMTUgKzk2OSwxNSBAQAogCQkJaWYgKGFtb3VudF9sZWZ0X3RvX3JlcSA9PSAwKQogCQkJCWdldF9zb21lX21vcmUgPSAwOwogCi0JCQkvKiBhbW91bnQgaXMgYWx3YXlzIGRpdmlzaWJsZSBieSA1MTIsIGhlbmNlIGJ5Ci0JCQkgKiB0aGUgYnVsay1vdXQgbWF4cGFja2V0IHNpemUgKi8KKwkJCS8qCisJCQkgKiBhbW91bnQgaXMgYWx3YXlzIGRpdmlzaWJsZSBieSA1MTIsIGhlbmNlIGJ5CisJCQkgKiB0aGUgYnVsay1vdXQgbWF4cGFja2V0IHNpemUKKwkJCSAqLwogCQkJYmgtPm91dHJlcS0+bGVuZ3RoID0gYW1vdW50OwogCQkJYmgtPmJ1bGtfb3V0X2ludGVuZGVkX2xlbmd0aCA9IGFtb3VudDsKIAkJCWJoLT5vdXRyZXEtPnNob3J0X25vdF9vayA9IDE7Ci0JCQlTVEFSVF9UUkFOU0ZFUl9PUihjb21tb24sIGJ1bGtfb3V0LCBiaC0+b3V0cmVxLAotCQkJCQkgICZiaC0+b3V0cmVxX2J1c3ksICZiaC0+c3RhdGUpCi0JCQkJLyogRG9uJ3Qga25vdyB3aGF0IHRvIGRvIGlmCi0JCQkJICogY29tbW9uLT5mc2cgaXMgTlVMTCAqLworCQkJaWYgKCFzdGFydF9vdXRfdHJhbnNmZXIoY29tbW9uLCBiaCkpCisJCQkJLyogRHVubm8gd2hhdCB0byBkbyBpZiBjb21tb24tPmZzZyBpcyBOVUxMICovCiAJCQkJcmV0dXJuIC1FSU87CiAJCQljb21tb24tPm5leHRfYnVmZmhkX3RvX2ZpbGwgPSBiaC0+bmV4dDsKIAkJCWNvbnRpbnVlOwpAQCAtOTkwLDMwICsxMDAzLDI5IEBACiAJCQlhbW91bnQgPSBiaC0+b3V0cmVxLT5hY3R1YWw7CiAJCQlpZiAoY3VybHVuLT5maWxlX2xlbmd0aCAtIGZpbGVfb2Zmc2V0IDwgYW1vdW50KSB7CiAJCQkJTEVSUk9SKGN1cmx1biwKLQkid3JpdGUgJXUgQCAlbGx1IGJleW9uZCBlbmQgJWxsdVxuIiwKLQlhbW91bnQsICh1bnNpZ25lZCBsb25nIGxvbmcpIGZpbGVfb2Zmc2V0LAotCSh1bnNpZ25lZCBsb25nIGxvbmcpIGN1cmx1bi0+ZmlsZV9sZW5ndGgpOworCQkJCSAgICAgICAid3JpdGUgJXUgQCAlbGx1IGJleW9uZCBlbmQgJWxsdVxuIiwKKwkJCQkgICAgICAgYW1vdW50LCAodW5zaWduZWQgbG9uZyBsb25nKWZpbGVfb2Zmc2V0LAorCQkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWN1cmx1bi0+ZmlsZV9sZW5ndGgpOwogCQkJCWFtb3VudCA9IGN1cmx1bi0+ZmlsZV9sZW5ndGggLSBmaWxlX29mZnNldDsKIAkJCX0KIAogCQkJLyogUGVyZm9ybSB0aGUgd3JpdGUgKi8KIAkJCWZpbGVfb2Zmc2V0X3RtcCA9IGZpbGVfb2Zmc2V0OwogCQkJbndyaXR0ZW4gPSB2ZnNfd3JpdGUoY3VybHVuLT5maWxwLAotCQkJCQkoY2hhciBfX3VzZXIgKikgYmgtPmJ1ZiwKLQkJCQkJYW1vdW50LCAmZmlsZV9vZmZzZXRfdG1wKTsKKwkJCQkJICAgICAoY2hhciBfX3VzZXIgKiliaC0+YnVmLAorCQkJCQkgICAgIGFtb3VudCwgJmZpbGVfb2Zmc2V0X3RtcCk7CiAJCQlWTERCRyhjdXJsdW4sICJmaWxlIHdyaXRlICV1IEAgJWxsdSAtPiAlZFxuIiwgYW1vdW50LAotCQkJCQkodW5zaWduZWQgbG9uZyBsb25nKSBmaWxlX29mZnNldCwKLQkJCQkJKGludCkgbndyaXR0ZW4pOworCQkJICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylmaWxlX29mZnNldCwgKGludClud3JpdHRlbik7CiAJCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCiAJCQkJcmV0dXJuIC1FSU5UUjsJCS8qIEludGVycnVwdGVkISAqLwogCiAJCQlpZiAobndyaXR0ZW4gPCAwKSB7CiAJCQkJTERCRyhjdXJsdW4sICJlcnJvciBpbiBmaWxlIHdyaXRlOiAlZFxuIiwKLQkJCQkJCShpbnQpIG53cml0dGVuKTsKKwkJCQkgICAgIChpbnQpbndyaXR0ZW4pOwogCQkJCW53cml0dGVuID0gMDsKIAkJCX0gZWxzZSBpZiAobndyaXR0ZW4gPCBhbW91bnQpIHsKIAkJCQlMREJHKGN1cmx1biwgInBhcnRpYWwgZmlsZSB3cml0ZTogJWQvJXVcbiIsCi0JCQkJCQkoaW50KSBud3JpdHRlbiwgYW1vdW50KTsKKwkJCQkgICAgIChpbnQpbndyaXR0ZW4sIGFtb3VudCk7CiAJCQkJbndyaXR0ZW4gLT0gKG53cml0dGVuICYgNTExKTsKIAkJCQkvKiBSb3VuZCBkb3duIHRvIGEgYmxvY2sgKi8KIAkJCX0KQEAgLTEwODYsMTYgKzEwOTgsMjAgQEAKIAl1bnNpZ25lZCBpbnQJCWFtb3VudDsKIAlzc2l6ZV90CQkJbnJlYWQ7CiAKLQkvKiBHZXQgdGhlIHN0YXJ0aW5nIExvZ2ljYWwgQmxvY2sgQWRkcmVzcyBhbmQgY2hlY2sgdGhhdCBpdCdzCi0JICogbm90IHRvbyBiaWcgKi8KKwkvKgorCSAqIEdldCB0aGUgc3RhcnRpbmcgTG9naWNhbCBCbG9jayBBZGRyZXNzIGFuZCBjaGVjayB0aGF0IGl0J3MKKwkgKiBub3QgdG9vIGJpZy4KKwkgKi8KIAlsYmEgPSBnZXRfdW5hbGlnbmVkX2JlMzIoJmNvbW1vbi0+Y21uZFsyXSk7CiAJaWYgKGxiYSA+PSBjdXJsdW4tPm51bV9zZWN0b3JzKSB7CiAJCWN1cmx1bi0+c2Vuc2VfZGF0YSA9IFNTX0xPR0lDQUxfQkxPQ0tfQUREUkVTU19PVVRfT0ZfUkFOR0U7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCS8qIFdlIGFsbG93IERQTyAoRGlzYWJsZSBQYWdlIE91dCA9IGRvbid0IHNhdmUgZGF0YSBpbiB0aGUKLQkgKiBjYWNoZSkgYnV0IHdlIGRvbid0IGltcGxlbWVudCBpdC4gKi8KKwkvKgorCSAqIFdlIGFsbG93IERQTyAoRGlzYWJsZSBQYWdlIE91dCA9IGRvbid0IHNhdmUgZGF0YSBpbiB0aGUKKwkgKiBjYWNoZSkgYnV0IHdlIGRvbid0IGltcGxlbWVudCBpdC4KKwkgKi8KIAlpZiAoY29tbW9uLT5jbW5kWzFdICYgfjB4MTApIHsKIAkJY3VybHVuLT5zZW5zZV9kYXRhID0gU1NfSU5WQUxJRF9GSUVMRF9JTl9DREI7CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTEyMCwxNiArMTEzNiwxNyBAQAogCiAJLyogSnVzdCB0cnkgdG8gcmVhZCB0aGUgcmVxdWVzdGVkIGJsb2NrcyAqLwogCXdoaWxlIChhbW91bnRfbGVmdCA+IDApIHsKLQotCQkvKiBGaWd1cmUgb3V0IGhvdyBtdWNoIHdlIG5lZWQgdG8gcmVhZDoKKwkJLyoKKwkJICogRmlndXJlIG91dCBob3cgbXVjaCB3ZSBuZWVkIHRvIHJlYWQ6CiAJCSAqIFRyeSB0byByZWFkIHRoZSByZW1haW5pbmcgYW1vdW50LCBidXQgbm90IG1vcmUgdGhhbgogCQkgKiB0aGUgYnVmZmVyIHNpemUuCiAJCSAqIEFuZCBkb24ndCB0cnkgdG8gcmVhZCBwYXN0IHRoZSBlbmQgb2YgdGhlIGZpbGUuCiAJCSAqIElmIHRoaXMgbWVhbnMgcmVhZGluZyAwIHRoZW4gd2Ugd2VyZSBhc2tlZCB0byByZWFkCi0JCSAqIHBhc3QgdGhlIGVuZCBvZiBmaWxlLiAqLworCQkgKiBwYXN0IHRoZSBlbmQgb2YgZmlsZS4KKwkJICovCiAJCWFtb3VudCA9IG1pbihhbW91bnRfbGVmdCwgRlNHX0JVRkxFTik7Ci0JCWFtb3VudCA9IG1pbigobG9mZl90KSBhbW91bnQsCi0JCQkJY3VybHVuLT5maWxlX2xlbmd0aCAtIGZpbGVfb2Zmc2V0KTsKKwkJYW1vdW50ID0gbWluKChsb2ZmX3QpYW1vdW50LAorCQkJICAgICBjdXJsdW4tPmZpbGVfbGVuZ3RoIC0gZmlsZV9vZmZzZXQpOwogCQlpZiAoYW1vdW50ID09IDApIHsKIAkJCWN1cmx1bi0+c2Vuc2VfZGF0YSA9CiAJCQkJCVNTX0xPR0lDQUxfQkxPQ0tfQUREUkVTU19PVVRfT0ZfUkFOR0U7CkBAIC0xMTUwLDEzICsxMTY3LDEyIEBACiAJCQlyZXR1cm4gLUVJTlRSOwogCiAJCWlmIChucmVhZCA8IDApIHsKLQkJCUxEQkcoY3VybHVuLCAiZXJyb3IgaW4gZmlsZSB2ZXJpZnk6ICVkXG4iLAotCQkJCQkoaW50KSBucmVhZCk7CisJCQlMREJHKGN1cmx1biwgImVycm9yIGluIGZpbGUgdmVyaWZ5OiAlZFxuIiwgKGludClucmVhZCk7CiAJCQlucmVhZCA9IDA7CiAJCX0gZWxzZSBpZiAobnJlYWQgPCBhbW91bnQpIHsKIAkJCUxEQkcoY3VybHVuLCAicGFydGlhbCBmaWxlIHZlcmlmeTogJWQvJXVcbiIsCi0JCQkJCShpbnQpIG5yZWFkLCBhbW91bnQpOwotCQkJbnJlYWQgLT0gKG5yZWFkICYgNTExKTsJLyogUm91bmQgZG93biB0byBhIHNlY3RvciAqLworCQkJICAgICAoaW50KW5yZWFkLCBhbW91bnQpOworCQkJbnJlYWQgLT0gbnJlYWQgJiA1MTE7CS8qIFJvdW5kIGRvd24gdG8gYSBzZWN0b3IgKi8KIAkJfQogCQlpZiAobnJlYWQgPT0gMCkgewogCQkJY3VybHVuLT5zZW5zZV9kYXRhID0gU1NfVU5SRUNPVkVSRURfUkVBRF9FUlJPUjsKQEAgLTExOTgsNyArMTIxNCw2IEBACiAJcmV0dXJuIDM2OwogfQogCi0KIHN0YXRpYyBpbnQgZG9fcmVxdWVzdF9zZW5zZShzdHJ1Y3QgZnNnX2NvbW1vbiAqY29tbW9uLCBzdHJ1Y3QgZnNnX2J1ZmZoZCAqYmgpCiB7CiAJc3RydWN0IGZzZ19sdW4JKmN1cmx1biA9IGNvbW1vbi0+Y3VybHVuOwpAQCAtMTI1MiwxMyArMTI2NywxMiBAQAogCXJldHVybiAxODsKIH0KIAotCiBzdGF0aWMgaW50IGRvX3JlYWRfY2FwYWNpdHkoc3RydWN0IGZzZ19jb21tb24gKmNvbW1vbiwgc3RydWN0IGZzZ19idWZmaGQgKmJoKQogewogCXN0cnVjdCBmc2dfbHVuCSpjdXJsdW4gPSBjb21tb24tPmN1cmx1bjsKIAl1MzIJCWxiYSA9IGdldF91bmFsaWduZWRfYmUzMigmY29tbW9uLT5jbW5kWzJdKTsKIAlpbnQJCXBtaSA9IGNvbW1vbi0+Y21uZFs4XTsKLQl1OAkJKmJ1ZiA9ICh1OCAqKSBiaC0+YnVmOworCXU4CQkqYnVmID0gKHU4ICopYmgtPmJ1ZjsKIAogCS8qIENoZWNrIHRoZSBQTUkgYW5kIExCQSBmaWVsZHMgKi8KIAlpZiAocG1pID4gMSB8fCAocG1pID09IDAgJiYgbGJhICE9IDApKSB7CkBAIC0xMjcyLDEzICsxMjg2LDEyIEBACiAJcmV0dXJuIDg7CiB9CiAKLQogc3RhdGljIGludCBkb19yZWFkX2hlYWRlcihzdHJ1Y3QgZnNnX2NvbW1vbiAqY29tbW9uLCBzdHJ1Y3QgZnNnX2J1ZmZoZCAqYmgpCiB7CiAJc3RydWN0IGZzZ19sdW4JKmN1cmx1biA9IGNvbW1vbi0+Y3VybHVuOwogCWludAkJbXNmID0gY29tbW9uLT5jbW5kWzFdICYgMHgwMjsKIAl1MzIJCWxiYSA9IGdldF91bmFsaWduZWRfYmUzMigmY29tbW9uLT5jbW5kWzJdKTsKLQl1OAkJKmJ1ZiA9ICh1OCAqKSBiaC0+YnVmOworCXU4CQkqYnVmID0gKHU4ICopYmgtPmJ1ZjsKIAogCWlmIChjb21tb24tPmNtbmRbMV0gJiB+MHgwMikgewkJLyogTWFzayBhd2F5IE1TRiAqLwogCQljdXJsdW4tPnNlbnNlX2RhdGEgPSBTU19JTlZBTElEX0ZJRUxEX0lOX0NEQjsKQEAgLTEyOTUsMTMgKzEzMDgsMTIgQEAKIAlyZXR1cm4gODsKIH0KIAotCiBzdGF0aWMgaW50IGRvX3JlYWRfdG9jKHN0cnVjdCBmc2dfY29tbW9uICpjb21tb24sIHN0cnVjdCBmc2dfYnVmZmhkICpiaCkKIHsKIAlzdHJ1Y3QgZnNnX2x1bgkqY3VybHVuID0gY29tbW9uLT5jdXJsdW47CiAJaW50CQltc2YgPSBjb21tb24tPmNtbmRbMV0gJiAweDAyOwogCWludAkJc3RhcnRfdHJhY2sgPSBjb21tb24tPmNtbmRbNl07Ci0JdTgJCSpidWYgPSAodTggKikgYmgtPmJ1ZjsKKwl1OAkJKmJ1ZiA9ICh1OCAqKWJoLT5idWY7CiAKIAlpZiAoKGNvbW1vbi0+Y21uZFsxXSAmIH4weDAyKSAhPSAwIHx8CS8qIE1hc2sgYXdheSBNU0YgKi8KIAkJCXN0YXJ0X3RyYWNrID4gMSkgewpAQCAtMTMyMyw3ICsxMzM1LDYgQEAKIAlyZXR1cm4gMjA7CiB9CiAKLQogc3RhdGljIGludCBkb19tb2RlX3NlbnNlKHN0cnVjdCBmc2dfY29tbW9uICpjb21tb24sIHN0cnVjdCBmc2dfYnVmZmhkICpiaCkKIHsKIAlzdHJ1Y3QgZnNnX2x1bgkqY3VybHVuID0gY29tbW9uLT5jdXJsdW47CkBAIC0xMzQ4LDEwICsxMzU5LDEyIEBACiAJY2hhbmdlYWJsZV92YWx1ZXMgPSAocGMgPT0gMSk7CiAJYWxsX3BhZ2VzID0gKHBhZ2VfY29kZSA9PSAweDNmKTsKIAotCS8qIFdyaXRlIHRoZSBtb2RlIHBhcmFtZXRlciBoZWFkZXIuICBGaXhlZCB2YWx1ZXMgYXJlOiBkZWZhdWx0CisJLyoKKwkgKiBXcml0ZSB0aGUgbW9kZSBwYXJhbWV0ZXIgaGVhZGVyLiAgRml4ZWQgdmFsdWVzIGFyZTogZGVmYXVsdAogCSAqIG1lZGl1bSB0eXBlLCBubyBjYWNoZSBjb250cm9sIChEUE9GVUEpLCBhbmQgbm8gYmxvY2sgZGVzY3JpcHRvcnMuCiAJICogVGhlIG9ubHkgdmFyaWFibGUgdmFsdWUgaXMgdGhlIFdyaXRlUHJvdGVjdCBiaXQuICBXZSB3aWxsIGZpbGwgaW4KLQkgKiB0aGUgbW9kZSBkYXRhIGxlbmd0aCBsYXRlci4gKi8KKwkgKiB0aGUgbW9kZSBkYXRhIGxlbmd0aCBsYXRlci4KKwkgKi8KIAltZW1zZXQoYnVmLCAwLCA4KTsKIAlpZiAobXNjbW5kID09IE1PREVfU0VOU0UpIHsKIAkJYnVmWzJdID0gKGN1cmx1bi0+cm8gPyAweDgwIDogMHgwMCk7CQkvKiBXUCwgRFBPRlVBICovCkBAIC0xMzY1LDggKzEzNzgsMTAgQEAKIAogCS8qIE5vIGJsb2NrIGRlc2NyaXB0b3JzICovCiAKLQkvKiBUaGUgbW9kZSBwYWdlcywgaW4gbnVtZXJpY2FsIG9yZGVyLiAgVGhlIG9ubHkgcGFnZSB3ZSBzdXBwb3J0Ci0JICogaXMgdGhlIENhY2hpbmcgcGFnZS4gKi8KKwkvKgorCSAqIFRoZSBtb2RlIHBhZ2VzLCBpbiBudW1lcmljYWwgb3JkZXIuICBUaGUgb25seSBwYWdlIHdlIHN1cHBvcnQKKwkgKiBpcyB0aGUgQ2FjaGluZyBwYWdlLgorCSAqLwogCWlmIChwYWdlX2NvZGUgPT0gMHgwOCB8fCBhbGxfcGFnZXMpIHsKIAkJdmFsaWRfcGFnZSA9IDE7CiAJCWJ1ZlswXSA9IDB4MDg7CQkvKiBQYWdlIGNvZGUgKi8KQEAgLTEzODgsOCArMTQwMywxMCBAQAogCQlidWYgKz0gMTI7CiAJfQogCi0JLyogQ2hlY2sgdGhhdCBhIHZhbGlkIHBhZ2Ugd2FzIHJlcXVlc3RlZCBhbmQgdGhlIG1vZGUgZGF0YSBsZW5ndGgKLQkgKiBpc24ndCB0b28gbG9uZy4gKi8KKwkvKgorCSAqIENoZWNrIHRoYXQgYSB2YWxpZCBwYWdlIHdhcyByZXF1ZXN0ZWQgYW5kIHRoZSBtb2RlIGRhdGEgbGVuZ3RoCisJICogaXNuJ3QgdG9vIGxvbmcuCisJICovCiAJbGVuID0gYnVmIC0gYnVmMDsKIAlpZiAoIXZhbGlkX3BhZ2UgfHwgbGVuID4gbGltaXQpIHsKIAkJY3VybHVuLT5zZW5zZV9kYXRhID0gU1NfSU5WQUxJRF9GSUVMRF9JTl9DREI7CkBAIC0xNDA0LDcgKzE0MjEsNiBAQAogCXJldHVybiBsZW47CiB9CiAKLQogc3RhdGljIGludCBkb19zdGFydF9zdG9wKHN0cnVjdCBmc2dfY29tbW9uICpjb21tb24pCiB7CiAJc3RydWN0IGZzZ19sdW4JKmN1cmx1biA9IGNvbW1vbi0+Y3VybHVuOwpAQCAtMTQyNCw4ICsxNDQwLDEwIEBACiAJbG9laiAgPSBjb21tb24tPmNtbmRbNF0gJiAweDAyOwogCXN0YXJ0ID0gY29tbW9uLT5jbW5kWzRdICYgMHgwMTsKIAotCS8qIE91ciBlbXVsYXRpb24gZG9lc24ndCBzdXBwb3J0IG1vdW50aW5nOyB0aGUgbWVkaXVtIGlzCi0JICogYXZhaWxhYmxlIGZvciB1c2UgYXMgc29vbiBhcyBpdCBpcyBsb2FkZWQuICovCisJLyoKKwkgKiBPdXIgZW11bGF0aW9uIGRvZXNuJ3Qgc3VwcG9ydCBtb3VudGluZzsgdGhlIG1lZGl1bSBpcworCSAqIGF2YWlsYWJsZSBmb3IgdXNlIGFzIHNvb24gYXMgaXQgaXMgbG9hZGVkLgorCSAqLwogCWlmIChzdGFydCkgewogCQlpZiAoIWZzZ19sdW5faXNfb3BlbihjdXJsdW4pKSB7CiAJCQljdXJsdW4tPnNlbnNlX2RhdGEgPSBTU19NRURJVU1fTk9UX1BSRVNFTlQ7CkBAIC0xNDY2LDcgKzE0ODQsNiBAQAogCQk6IDA7CiB9CiAKLQogc3RhdGljIGludCBkb19wcmV2ZW50X2FsbG93KHN0cnVjdCBmc2dfY29tbW9uICpjb21tb24pCiB7CiAJc3RydWN0IGZzZ19sdW4JKmN1cmx1biA9IGNvbW1vbi0+Y3VybHVuOwpAQCAtMTQ5MSw3ICsxNTA4LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotCiBzdGF0aWMgaW50IGRvX3JlYWRfZm9ybWF0X2NhcGFjaXRpZXMoc3RydWN0IGZzZ19jb21tb24gKmNvbW1vbiwKIAkJCXN0cnVjdCBmc2dfYnVmZmhkICpiaCkKIHsKQEAgLTE1MDksNyArMTUyNSw2IEBACiAJcmV0dXJuIDEyOwogfQogCi0KIHN0YXRpYyBpbnQgZG9fbW9kZV9zZWxlY3Qoc3RydWN0IGZzZ19jb21tb24gKmNvbW1vbiwgc3RydWN0IGZzZ19idWZmaGQgKmJoKQogewogCXN0cnVjdCBmc2dfbHVuCSpjdXJsdW4gPSBjb21tb24tPmN1cmx1bjsKQEAgLTE1OTEsNyArMTYwNiw3IEBACiAJCWJoLT5pbnJlcS0+bGVuZ3RoID0gbnNlbmQ7CiAJCWJoLT5pbnJlcS0+emVybyA9IDA7CiAJCXN0YXJ0X3RyYW5zZmVyKGZzZywgZnNnLT5idWxrX2luLCBiaC0+aW5yZXEsCi0JCQkJJmJoLT5pbnJlcV9idXN5LCAmYmgtPnN0YXRlKTsKKwkJCSAgICAgICAmYmgtPmlucmVxX2J1c3ksICZiaC0+c3RhdGUpOwogCQliaCA9IGZzZy0+Y29tbW9uLT5uZXh0X2J1ZmZoZF90b19maWxsID0gYmgtPm5leHQ7CiAJCWZzZy0+Y29tbW9uLT51c2JfYW1vdW50X2xlZnQgLT0gbnNlbmQ7CiAJCW5rZWVwID0gMDsKQEAgLTE2MTcsNyArMTYzMiw3IEBACiAKIAkJCS8qIEEgc2hvcnQgcGFja2V0IG9yIGFuIGVycm9yIGVuZHMgZXZlcnl0aGluZyAqLwogCQkJaWYgKGJoLT5vdXRyZXEtPmFjdHVhbCAhPSBiaC0+b3V0cmVxLT5sZW5ndGggfHwKLQkJCQkJYmgtPm91dHJlcS0+c3RhdHVzICE9IDApIHsKKwkJCSAgICBiaC0+b3V0cmVxLT5zdGF0dXMgIT0gMCkgewogCQkJCXJhaXNlX2V4Y2VwdGlvbihjb21tb24sCiAJCQkJCQlGU0dfU1RBVEVfQUJPUlRfQlVMS19PVVQpOwogCQkJCXJldHVybiAtRUlOVFI7CkBAIC0xNjMxLDE1ICsxNjQ2LDE1IEBACiAJCSAmJiBjb21tb24tPnVzYl9hbW91bnRfbGVmdCA+IDApIHsKIAkJCWFtb3VudCA9IG1pbihjb21tb24tPnVzYl9hbW91bnRfbGVmdCwgRlNHX0JVRkxFTik7CiAKLQkJCS8qIGFtb3VudCBpcyBhbHdheXMgZGl2aXNpYmxlIGJ5IDUxMiwgaGVuY2UgYnkKLQkJCSAqIHRoZSBidWxrLW91dCBtYXhwYWNrZXQgc2l6ZSAqLworCQkJLyoKKwkJCSAqIGFtb3VudCBpcyBhbHdheXMgZGl2aXNpYmxlIGJ5IDUxMiwgaGVuY2UgYnkKKwkJCSAqIHRoZSBidWxrLW91dCBtYXhwYWNrZXQgc2l6ZS4KKwkJCSAqLwogCQkJYmgtPm91dHJlcS0+bGVuZ3RoID0gYW1vdW50OwogCQkJYmgtPmJ1bGtfb3V0X2ludGVuZGVkX2xlbmd0aCA9IGFtb3VudDsKIAkJCWJoLT5vdXRyZXEtPnNob3J0X25vdF9vayA9IDE7Ci0JCQlTVEFSVF9UUkFOU0ZFUl9PUihjb21tb24sIGJ1bGtfb3V0LCBiaC0+b3V0cmVxLAotCQkJCQkgICZiaC0+b3V0cmVxX2J1c3ksICZiaC0+c3RhdGUpCi0JCQkJLyogRG9uJ3Qga25vdyB3aGF0IHRvIGRvIGlmCi0JCQkJICogY29tbW9uLT5mc2cgaXMgTlVMTCAqLworCQkJaWYgKCFzdGFydF9vdXRfdHJhbnNmZXIoY29tbW9uLCBiaCkpCisJCQkJLyogRHVubm8gd2hhdCB0byBkbyBpZiBjb21tb24tPmZzZyBpcyBOVUxMICovCiAJCQkJcmV0dXJuIC1FSU87CiAJCQljb21tb24tPm5leHRfYnVmZmhkX3RvX2ZpbGwgPSBiaC0+bmV4dDsKIAkJCWNvbW1vbi0+dXNiX2Ftb3VudF9sZWZ0IC09IGFtb3VudDsKQEAgLTE2NTQsNyArMTY2OSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLQogc3RhdGljIGludCBmaW5pc2hfcmVwbHkoc3RydWN0IGZzZ19jb21tb24gKmNvbW1vbikKIHsKIAlzdHJ1Y3QgZnNnX2J1ZmZoZAkqYmggPSBjb21tb24tPm5leHRfYnVmZmhkX3RvX2ZpbGw7CkBAIC0xNjY0LDEwICsxNjc4LDEyIEBACiAJY2FzZSBEQVRBX0RJUl9OT05FOgogCQlicmVhazsJCQkvKiBOb3RoaW5nIHRvIHNlbmQgKi8KIAotCS8qIElmIHdlIGRvbid0IGtub3cgd2hldGhlciB0aGUgaG9zdCB3YW50cyB0byByZWFkIG9yIHdyaXRlLAorCS8qCisJICogSWYgd2UgZG9uJ3Qga25vdyB3aGV0aGVyIHRoZSBob3N0IHdhbnRzIHRvIHJlYWQgb3Igd3JpdGUsCiAJICogdGhpcyBtdXN0IGJlIENCIG9yIENCSSB3aXRoIGFuIHVua25vd24gY29tbWFuZC4gIFdlIG11c3RuJ3QKIAkgKiB0cnkgdG8gc2VuZCBvciByZWNlaXZlIGFueSBkYXRhLiAgU28gc3RhbGwgYm90aCBidWxrIHBpcGVzCi0JICogaWYgd2UgY2FuIGFuZCB3YWl0IGZvciBhIHJlc2V0LiAqLworCSAqIGlmIHdlIGNhbiBhbmQgd2FpdCBmb3IgYSByZXNldC4KKwkgKi8KIAljYXNlIERBVEFfRElSX1VOS05PV046CiAJCWlmICghY29tbW9uLT5jYW5fc3RhbGwpIHsKIAkJCS8qIE5vdGhpbmcgKi8KQEAgLTE2ODgsMTggKzE3MDQsMTggQEAKIAkJLyogSWYgdGhlcmUncyBubyByZXNpZHVlLCBzaW1wbHkgc2VuZCB0aGUgbGFzdCBidWZmZXIgKi8KIAkJfSBlbHNlIGlmIChjb21tb24tPnJlc2lkdWUgPT0gMCkgewogCQkJYmgtPmlucmVxLT56ZXJvID0gMDsKLQkJCVNUQVJUX1RSQU5TRkVSX09SKGNvbW1vbiwgYnVsa19pbiwgYmgtPmlucmVxLAotCQkJCQkgICZiaC0+aW5yZXFfYnVzeSwgJmJoLT5zdGF0ZSkKKwkJCWlmICghc3RhcnRfaW5fdHJhbnNmZXIoY29tbW9uLCBiaCkpCiAJCQkJcmV0dXJuIC1FSU87CiAJCQljb21tb24tPm5leHRfYnVmZmhkX3RvX2ZpbGwgPSBiaC0+bmV4dDsKIAotCQkvKiBGb3IgQnVsay1vbmx5LCBpZiB3ZSdyZSBhbGxvd2VkIHRvIHN0YWxsIHRoZW4gc2VuZCB0aGUKKwkJLyoKKwkJICogRm9yIEJ1bGstb25seSwgaWYgd2UncmUgYWxsb3dlZCB0byBzdGFsbCB0aGVuIHNlbmQgdGhlCiAJCSAqIHNob3J0IHBhY2tldCBhbmQgaGFsdCB0aGUgYnVsay1pbiBlbmRwb2ludC4gIElmIHdlIGNhbid0Ci0JCSAqIHN0YWxsLCBwYWQgb3V0IHRoZSByZW1haW5pbmcgZGF0YSB3aXRoIDAncy4gKi8KKwkJICogc3RhbGwsIHBhZCBvdXQgdGhlIHJlbWFpbmluZyBkYXRhIHdpdGggMCdzLgorCQkgKi8KIAkJfSBlbHNlIGlmIChjb21tb24tPmNhbl9zdGFsbCkgewogCQkJYmgtPmlucmVxLT56ZXJvID0gMTsKLQkJCVNUQVJUX1RSQU5TRkVSX09SKGNvbW1vbiwgYnVsa19pbiwgYmgtPmlucmVxLAotCQkJCQkgICZiaC0+aW5yZXFfYnVzeSwgJmJoLT5zdGF0ZSkKKwkJCWlmICghc3RhcnRfaW5fdHJhbnNmZXIoY29tbW9uLCBiaCkpCiAJCQkJLyogRG9uJ3Qga25vdyB3aGF0IHRvIGRvIGlmCiAJCQkJICogY29tbW9uLT5mc2cgaXMgTlVMTCAqLwogCQkJCXJjID0gLUVJTzsKQEAgLTE3MTQsOCArMTczMCwxMCBAQAogCQl9CiAJCWJyZWFrOwogCi0JLyogV2UgaGF2ZSBwcm9jZXNzZWQgYWxsIHdlIHdhbnQgZnJvbSB0aGUgZGF0YSB0aGUgaG9zdCBoYXMgc2VudC4KLQkgKiBUaGVyZSBtYXkgc3RpbGwgYmUgb3V0c3RhbmRpbmcgYnVsay1vdXQgcmVxdWVzdHMuICovCisJLyoKKwkgKiBXZSBoYXZlIHByb2Nlc3NlZCBhbGwgd2Ugd2FudCBmcm9tIHRoZSBkYXRhIHRoZSBob3N0IGhhcyBzZW50LgorCSAqIFRoZXJlIG1heSBzdGlsbCBiZSBvdXRzdGFuZGluZyBidWxrLW91dCByZXF1ZXN0cy4KKwkgKi8KIAljYXNlIERBVEFfRElSX0ZST01fSE9TVDoKIAkJaWYgKGNvbW1vbi0+cmVzaWR1ZSA9PSAwKSB7CiAJCQkvKiBOb3RoaW5nIHRvIHJlY2VpdmUgKi8KQEAgLTE3MjUsMTIgKzE3NDMsMTQgQEAKIAkJCXJhaXNlX2V4Y2VwdGlvbihjb21tb24sIEZTR19TVEFURV9BQk9SVF9CVUxLX09VVCk7CiAJCQlyYyA9IC1FSU5UUjsKIAotCQkvKiBXZSBoYXZlbid0IHByb2Nlc3NlZCBhbGwgdGhlIGluY29taW5nIGRhdGEuICBFdmVuIHRob3VnaAorCQkvKgorCQkgKiBXZSBoYXZlbid0IHByb2Nlc3NlZCBhbGwgdGhlIGluY29taW5nIGRhdGEuICBFdmVuIHRob3VnaAogCQkgKiB3ZSBtYXkgYmUgYWxsb3dlZCB0byBzdGFsbCwgZG9pbmcgc28gd291bGQgY2F1c2UgYSByYWNlLgogCQkgKiBUaGUgY29udHJvbGxlciBtYXkgYWxyZWFkeSBoYXZlIEFDSydlZCBhbGwgdGhlIHJlbWFpbmluZwogCQkgKiBidWxrLW91dCBwYWNrZXRzLCBpbiB3aGljaCBjYXNlIHRoZSBob3N0IHdvdWxkbid0IHNlZSBhCiAJCSAqIFNUQUxMLiAgTm90IHJlYWxpemluZyB0aGUgZW5kcG9pbnQgd2FzIGhhbHRlZCwgaXQgd291bGRuJ3QKLQkJICogY2xlYXIgdGhlIGhhbHQgLS0gbGVhZGluZyB0byBwcm9ibGVtcyBsYXRlciBvbi4gKi8KKwkJICogY2xlYXIgdGhlIGhhbHQgLS0gbGVhZGluZyB0byBwcm9ibGVtcyBsYXRlciBvbi4KKwkJICovCiAjaWYgMAogCQl9IGVsc2UgaWYgKGNvbW1vbi0+Y2FuX3N0YWxsKSB7CiAJCQlpZiAoZnNnX2lzX3NldChjb21tb24pKQpAQCAtMTc0MCw4ICsxNzYwLDEwIEBACiAJCQlyYyA9IC1FSU5UUjsKICNlbmRpZgogCi0JCS8qIFdlIGNhbid0IHN0YWxsLiAgUmVhZCBpbiB0aGUgZXhjZXNzIGRhdGEgYW5kIHRocm93IGl0Ci0JCSAqIGFsbCBhd2F5LiAqLworCQkvKgorCQkgKiBXZSBjYW4ndCBzdGFsbC4gIFJlYWQgaW4gdGhlIGV4Y2VzcyBkYXRhIGFuZCB0aHJvdyBpdAorCQkgKiBhbGwgYXdheS4KKwkJICovCiAJCX0gZWxzZSB7CiAJCQlyYyA9IHRocm93X2F3YXlfZGF0YShjb21tb24pOwogCQl9CkBAIC0xNzUwLDcgKzE3NzIsNiBAQAogCXJldHVybiByYzsKIH0KIAotCiBzdGF0aWMgaW50IHNlbmRfc3RhdHVzKHN0cnVjdCBmc2dfY29tbW9uICpjb21tb24pCiB7CiAJc3RydWN0IGZzZ19sdW4JCSpjdXJsdW4gPSBjb21tb24tPmN1cmx1bjsKQEAgLTE3OTgsOCArMTgxOSw3IEBACiAKIAliaC0+aW5yZXEtPmxlbmd0aCA9IFVTQl9CVUxLX0NTX1dSQVBfTEVOOwogCWJoLT5pbnJlcS0+emVybyA9IDA7Ci0JU1RBUlRfVFJBTlNGRVJfT1IoY29tbW9uLCBidWxrX2luLCBiaC0+aW5yZXEsCi0JCQkgICZiaC0+aW5yZXFfYnVzeSwgJmJoLT5zdGF0ZSkKKwlpZiAoIXN0YXJ0X2luX3RyYW5zZmVyKGNvbW1vbiwgYmgpKQogCQkvKiBEb24ndCBrbm93IHdoYXQgdG8gZG8gaWYgY29tbW9uLT5mc2cgaXMgTlVMTCAqLwogCQlyZXR1cm4gLUVJTzsKIApAQCAtMTgxMCwxMSArMTgzMCwxMyBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0vKiBDaGVjayB3aGV0aGVyIHRoZSBjb21tYW5kIGlzIHByb3Blcmx5IGZvcm1lZCBhbmQgd2hldGhlciBpdHMgZGF0YSBzaXplCi0gKiBhbmQgZGlyZWN0aW9uIGFncmVlIHdpdGggdGhlIHZhbHVlcyB3ZSBhbHJlYWR5IGhhdmUuICovCisvKgorICogQ2hlY2sgd2hldGhlciB0aGUgY29tbWFuZCBpcyBwcm9wZXJseSBmb3JtZWQgYW5kIHdoZXRoZXIgaXRzIGRhdGEgc2l6ZQorICogYW5kIGRpcmVjdGlvbiBhZ3JlZSB3aXRoIHRoZSB2YWx1ZXMgd2UgYWxyZWFkeSBoYXZlLgorICovCiBzdGF0aWMgaW50IGNoZWNrX2NvbW1hbmQoc3RydWN0IGZzZ19jb21tb24gKmNvbW1vbiwgaW50IGNtbmRfc2l6ZSwKLQkJZW51bSBkYXRhX2RpcmVjdGlvbiBkYXRhX2RpciwgdW5zaWduZWQgaW50IG1hc2ssCi0JCWludCBuZWVkc19tZWRpdW0sIGNvbnN0IGNoYXIgKm5hbWUpCisJCQkgZW51bSBkYXRhX2RpcmVjdGlvbiBkYXRhX2RpciwgdW5zaWduZWQgaW50IG1hc2ssCisJCQkgaW50IG5lZWRzX21lZGl1bSwgY29uc3QgY2hhciAqbmFtZSkKIHsKIAlpbnQJCQlpOwogCWludAkJCWx1biA9IGNvbW1vbi0+Y21uZFsxXSA+PiA1OwpAQCAtMTgyNSwxOSArMTg0NywyMyBAQAogCWhkbGVuWzBdID0gMDsKIAlpZiAoY29tbW9uLT5kYXRhX2RpciAhPSBEQVRBX0RJUl9VTktOT1dOKQogCQlzcHJpbnRmKGhkbGVuLCAiLCBIJWM9JXUiLCBkaXJsZXR0ZXJbKGludCkgY29tbW9uLT5kYXRhX2Rpcl0sCi0JCQkJY29tbW9uLT5kYXRhX3NpemUpOworCQkJY29tbW9uLT5kYXRhX3NpemUpOwogCVZEQkcoY29tbW9uLCAiU0NTSSBjb21tYW5kOiAlczsgIERjPSVkLCBEJWM9JXU7ICBIYz0lZCVzXG4iLAogCSAgICAgbmFtZSwgY21uZF9zaXplLCBkaXJsZXR0ZXJbKGludCkgZGF0YV9kaXJdLAogCSAgICAgY29tbW9uLT5kYXRhX3NpemVfZnJvbV9jbW5kLCBjb21tb24tPmNtbmRfc2l6ZSwgaGRsZW4pOwogCi0JLyogV2UgY2FuJ3QgcmVwbHkgYXQgYWxsIHVudGlsIHdlIGtub3cgdGhlIGNvcnJlY3QgZGF0YSBkaXJlY3Rpb24KLQkgKiBhbmQgc2l6ZS4gKi8KKwkvKgorCSAqIFdlIGNhbid0IHJlcGx5IGF0IGFsbCB1bnRpbCB3ZSBrbm93IHRoZSBjb3JyZWN0IGRhdGEgZGlyZWN0aW9uCisJICogYW5kIHNpemUuCisJICovCiAJaWYgKGNvbW1vbi0+ZGF0YV9zaXplX2Zyb21fY21uZCA9PSAwKQogCQlkYXRhX2RpciA9IERBVEFfRElSX05PTkU7CiAJaWYgKGNvbW1vbi0+ZGF0YV9zaXplIDwgY29tbW9uLT5kYXRhX3NpemVfZnJvbV9jbW5kKSB7Ci0JCS8qIEhvc3QgZGF0YSBzaXplIDwgRGV2aWNlIGRhdGEgc2l6ZSBpcyBhIHBoYXNlIGVycm9yLgorCQkvKgorCQkgKiBIb3N0IGRhdGEgc2l6ZSA8IERldmljZSBkYXRhIHNpemUgaXMgYSBwaGFzZSBlcnJvci4KIAkJICogQ2Fycnkgb3V0IHRoZSBjb21tYW5kLCBidXQgb25seSB0cmFuc2ZlciBhcyBtdWNoIGFzCi0JCSAqIHdlIGFyZSBhbGxvd2VkLiAqLworCQkgKiB3ZSBhcmUgYWxsb3dlZC4KKwkJICovCiAJCWNvbW1vbi0+ZGF0YV9zaXplX2Zyb21fY21uZCA9IGNvbW1vbi0+ZGF0YV9zaXplOwogCQljb21tb24tPnBoYXNlX2Vycm9yID0gMTsKIAl9CkBAIC0xODQ1LDggKzE4NzEsNyBAQAogCWNvbW1vbi0+dXNiX2Ftb3VudF9sZWZ0ID0gY29tbW9uLT5kYXRhX3NpemU7CiAKIAkvKiBDb25mbGljdGluZyBkYXRhIGRpcmVjdGlvbnMgaXMgYSBwaGFzZSBlcnJvciAqLwotCWlmIChjb21tb24tPmRhdGFfZGlyICE9IGRhdGFfZGlyCi0JICYmIGNvbW1vbi0+ZGF0YV9zaXplX2Zyb21fY21uZCA+IDApIHsKKwlpZiAoY29tbW9uLT5kYXRhX2RpciAhPSBkYXRhX2RpciAmJiBjb21tb24tPmRhdGFfc2l6ZV9mcm9tX2NtbmQgPiAwKSB7CiAJCWNvbW1vbi0+cGhhc2VfZXJyb3IgPSAxOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0xODU0LDcgKzE4NzksOCBAQAogCS8qIFZlcmlmeSB0aGUgbGVuZ3RoIG9mIHRoZSBjb21tYW5kIGl0c2VsZiAqLwogCWlmIChjbW5kX3NpemUgIT0gY29tbW9uLT5jbW5kX3NpemUpIHsKIAotCQkvKiBTcGVjaWFsIGNhc2Ugd29ya2Fyb3VuZDogVGhlcmUgYXJlIHBsZW50eSBvZiBidWdneSBTQ1NJCisJCS8qCisJCSAqIFNwZWNpYWwgY2FzZSB3b3JrYXJvdW5kOiBUaGVyZSBhcmUgcGxlbnR5IG9mIGJ1Z2d5IFNDU0kKIAkJICogaW1wbGVtZW50YXRpb25zLiBNYW55IGhhdmUgaXNzdWVzIHdpdGggY2J3LT5MZW5ndGgKIAkJICogZmllbGQgcGFzc2luZyBhIHdyb25nIGNvbW1hbmQgc2l6ZS4gRm9yIHRob3NlIGNhc2VzIHdlCiAJCSAqIGFsd2F5cyB0cnkgdG8gd29yayBhcm91bmQgdGhlIHByb2JsZW0gYnkgdXNpbmcgdGhlIGxlbmd0aApAQCAtMTg5Niw4ICsxOTIyLDEwIEBACiAJCWN1cmx1biA9IE5VTEw7CiAJCWNvbW1vbi0+YmFkX2x1bl9va2F5ID0gMDsKIAotCQkvKiBJTlFVSVJZIGFuZCBSRVFVRVNUIFNFTlNFIGNvbW1hbmRzIGFyZSBleHBsaWNpdGx5IGFsbG93ZWQKLQkJICogdG8gdXNlIHVuc3VwcG9ydGVkIExVTnM7IGFsbCBvdGhlcnMgbWF5IG5vdC4gKi8KKwkJLyoKKwkJICogSU5RVUlSWSBhbmQgUkVRVUVTVCBTRU5TRSBjb21tYW5kcyBhcmUgZXhwbGljaXRseSBhbGxvd2VkCisJCSAqIHRvIHVzZSB1bnN1cHBvcnRlZCBMVU5zOyBhbGwgb3RoZXJzIG1heSBub3QuCisJCSAqLwogCQlpZiAoY29tbW9uLT5jbW5kWzBdICE9IElOUVVJUlkgJiYKIAkJICAgIGNvbW1vbi0+Y21uZFswXSAhPSBSRVFVRVNUX1NFTlNFKSB7CiAJCQlEQkcoY29tbW9uLCAidW5zdXBwb3J0ZWQgTFVOICVkXG4iLCBjb21tb24tPmx1bik7CkBAIC0xOTA1LDExICsxOTMzLDEzIEBACiAJCX0KIAl9CiAKLQkvKiBJZiBhIHVuaXQgYXR0ZW50aW9uIGNvbmRpdGlvbiBleGlzdHMsIG9ubHkgSU5RVUlSWSBhbmQKLQkgKiBSRVFVRVNUIFNFTlNFIGNvbW1hbmRzIGFyZSBhbGxvd2VkOyBhbnl0aGluZyBlbHNlIG11c3QgZmFpbC4gKi8KKwkvKgorCSAqIElmIGEgdW5pdCBhdHRlbnRpb24gY29uZGl0aW9uIGV4aXN0cywgb25seSBJTlFVSVJZIGFuZAorCSAqIFJFUVVFU1QgU0VOU0UgY29tbWFuZHMgYXJlIGFsbG93ZWQ7IGFueXRoaW5nIGVsc2UgbXVzdCBmYWlsLgorCSAqLwogCWlmIChjdXJsdW4gJiYgY3VybHVuLT51bml0X2F0dGVudGlvbl9kYXRhICE9IFNTX05PX1NFTlNFICYmCi0JCQljb21tb24tPmNtbmRbMF0gIT0gSU5RVUlSWSAmJgotCQkJY29tbW9uLT5jbW5kWzBdICE9IFJFUVVFU1RfU0VOU0UpIHsKKwkgICAgY29tbW9uLT5jbW5kWzBdICE9IElOUVVJUlkgJiYKKwkgICAgY29tbW9uLT5jbW5kWzBdICE9IFJFUVVFU1RfU0VOU0UpIHsKIAkJY3VybHVuLT5zZW5zZV9kYXRhID0gY3VybHVuLT51bml0X2F0dGVudGlvbl9kYXRhOwogCQljdXJsdW4tPnVuaXRfYXR0ZW50aW9uX2RhdGEgPSBTU19OT19TRU5TRTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xOTM1LDcgKzE5NjUsNiBAQAogCXJldHVybiAwOwogfQogCi0KIHN0YXRpYyBpbnQgZG9fc2NzaV9jb21tYW5kKHN0cnVjdCBmc2dfY29tbW9uICpjb21tb24pCiB7CiAJc3RydWN0IGZzZ19idWZmaGQJKmJoOwpAQCAtMjEyMyw4ICsyMTUyLDEwIEBACiAJCQkJIlRFU1QgVU5JVCBSRUFEWSIpOwogCQlicmVhazsKIAotCS8qIEFsdGhvdWdoIG9wdGlvbmFsLCB0aGlzIGNvbW1hbmQgaXMgdXNlZCBieSBNUy1XaW5kb3dzLiAgV2UKLQkgKiBzdXBwb3J0IGEgbWluaW1hbCB2ZXJzaW9uOiBCeXRDaGsgbXVzdCBiZSAwLiAqLworCS8qCisJICogQWx0aG91Z2ggb3B0aW9uYWwsIHRoaXMgY29tbWFuZCBpcyB1c2VkIGJ5IE1TLVdpbmRvd3MuICBXZQorCSAqIHN1cHBvcnQgYSBtaW5pbWFsIHZlcnNpb246IEJ5dENoayBtdXN0IGJlIDAuCisJICovCiAJY2FzZSBWRVJJRlk6CiAJCWNvbW1vbi0+ZGF0YV9zaXplX2Zyb21fY21uZCA9IDA7CiAJCXJlcGx5ID0gY2hlY2tfY29tbWFuZChjb21tb24sIDEwLCBEQVRBX0RJUl9OT05FLApAQCAtMjE2NCwxMCArMjE5NSwxMiBAQAogCQkJcmVwbHkgPSBkb193cml0ZShjb21tb24pOwogCQlicmVhazsKIAotCS8qIFNvbWUgbWFuZGF0b3J5IGNvbW1hbmRzIHRoYXQgd2UgcmVjb2duaXplIGJ1dCBkb24ndCBpbXBsZW1lbnQuCisJLyoKKwkgKiBTb21lIG1hbmRhdG9yeSBjb21tYW5kcyB0aGF0IHdlIHJlY29nbml6ZSBidXQgZG9uJ3QgaW1wbGVtZW50LgogCSAqIFRoZXkgZG9uJ3QgbWVhbiBtdWNoIGluIHRoaXMgc2V0dGluZy4gIEl0J3MgbGVmdCBhcyBhbiBleGVyY2lzZQogCSAqIGZvciBhbnlvbmUgaW50ZXJlc3RlZCB0byBpbXBsZW1lbnQgUkVTRVJWRSBhbmQgUkVMRUFTRSBpbiB0ZXJtcwotCSAqIG9mIFBvc2l4IGxvY2tzLiAqLworCSAqIG9mIFBvc2l4IGxvY2tzLgorCSAqLwogCWNhc2UgRk9STUFUX1VOSVQ6CiAJY2FzZSBSRUxFQVNFOgogCWNhc2UgUkVTRVJWRToKQEAgLTIxOTUsNyArMjIyOCw3IEBACiAJaWYgKHJlcGx5ID09IC1FSU5WQUwpCiAJCXJlcGx5ID0gMDsJCS8qIEVycm9yIHJlcGx5IGxlbmd0aCAqLwogCWlmIChyZXBseSA+PSAwICYmIGNvbW1vbi0+ZGF0YV9kaXIgPT0gREFUQV9ESVJfVE9fSE9TVCkgewotCQlyZXBseSA9IG1pbigodTMyKSByZXBseSwgY29tbW9uLT5kYXRhX3NpemVfZnJvbV9jbW5kKTsKKwkJcmVwbHkgPSBtaW4oKHUzMilyZXBseSwgY29tbW9uLT5kYXRhX3NpemVfZnJvbV9jbW5kKTsKIAkJYmgtPmlucmVxLT5sZW5ndGggPSByZXBseTsKIAkJYmgtPnN0YXRlID0gQlVGX1NUQVRFX0ZVTEw7CiAJCWNvbW1vbi0+cmVzaWR1ZSAtPSByZXBseTsKQEAgLTIyMjUsNyArMjI1OCw4IEBACiAJCQkJcmVxLT5hY3R1YWwsCiAJCQkJbGUzMl90b19jcHUoY2J3LT5TaWduYXR1cmUpKTsKIAotCQkvKiBUaGUgQnVsay1vbmx5IHNwZWMgc2F5cyB3ZSBNVVNUIHN0YWxsIHRoZSBJTiBlbmRwb2ludAorCQkvKgorCQkgKiBUaGUgQnVsay1vbmx5IHNwZWMgc2F5cyB3ZSBNVVNUIHN0YWxsIHRoZSBJTiBlbmRwb2ludAogCQkgKiAoNi42LjEpLCBzbyBpdCdzIHVuYXZvaWRhYmxlLiAgSXQgYWxzbyBzYXlzIHdlIG11c3QKIAkJICogcmV0YWluIHRoaXMgc3RhdGUgdW50aWwgdGhlIG5leHQgcmVzZXQsIGJ1dCB0aGVyZSdzCiAJCSAqIG5vIHdheSB0byB0ZWxsIHRoZSBjb250cm9sbGVyIGRyaXZlciBpdCBzaG91bGQgaWdub3JlCkBAIC0yMjMzLDcgKzIyNjcsOCBAQAogCQkgKgogCQkgKiBXZSBhcmVuJ3QgcmVxdWlyZWQgdG8gaGFsdCB0aGUgT1VUIGVuZHBvaW50OyBpbnN0ZWFkCiAJCSAqIHdlIGNhbiBzaW1wbHkgYWNjZXB0IGFuZCBkaXNjYXJkIGFueSBkYXRhIHJlY2VpdmVkCi0JCSAqIHVudGlsIHRoZSBuZXh0IHJlc2V0LiAqLworCQkgKiB1bnRpbCB0aGUgbmV4dCByZXNldC4KKwkJICovCiAJCXdlZGdlX2J1bGtfaW5fZW5kcG9pbnQoZnNnKTsKIAkJc2V0X2JpdChJR05PUkVfQlVMS19PVVQsICZmc2ctPmF0b21pY19iaXRmbGFncyk7CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMjI0Niw4ICsyMjgxLDEwIEBACiAJCQkJImNtZGxlbiAldVxuIiwKIAkJCQljYnctPkx1biwgY2J3LT5GbGFncywgY2J3LT5MZW5ndGgpOwogCi0JCS8qIFdlIGNhbiBkbyBhbnl0aGluZyB3ZSB3YW50IGhlcmUsIHNvIGxldCdzIHN0YWxsIHRoZQotCQkgKiBidWxrIHBpcGVzIGlmIHdlIGFyZSBhbGxvd2VkIHRvLiAqLworCQkvKgorCQkgKiBXZSBjYW4gZG8gYW55dGhpbmcgd2Ugd2FudCBoZXJlLCBzbyBsZXQncyBzdGFsbCB0aGUKKwkJICogYnVsayBwaXBlcyBpZiB3ZSBhcmUgYWxsb3dlZCB0by4KKwkJICovCiAJCWlmIChjb21tb24tPmNhbl9zdGFsbCkgewogCQkJZnNnX3NldF9oYWx0KGZzZywgZnNnLT5idWxrX291dCk7CiAJCQloYWx0X2J1bGtfaW5fZW5kcG9pbnQoZnNnKTsKQEAgLTIyNzAsNyArMjMwNyw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLQogc3RhdGljIGludCBnZXRfbmV4dF9jb21tYW5kKHN0cnVjdCBmc2dfY29tbW9uICpjb21tb24pCiB7CiAJc3RydWN0IGZzZ19idWZmaGQJKmJoOwpAQCAtMjI4NywxNCArMjMyMywxNSBAQAogCS8qIFF1ZXVlIGEgcmVxdWVzdCB0byByZWFkIGEgQnVsay1vbmx5IENCVyAqLwogCXNldF9idWxrX291dF9yZXFfbGVuZ3RoKGNvbW1vbiwgYmgsIFVTQl9CVUxLX0NCX1dSQVBfTEVOKTsKIAliaC0+b3V0cmVxLT5zaG9ydF9ub3Rfb2sgPSAxOwotCVNUQVJUX1RSQU5TRkVSX09SKGNvbW1vbiwgYnVsa19vdXQsIGJoLT5vdXRyZXEsCi0JCQkgICZiaC0+b3V0cmVxX2J1c3ksICZiaC0+c3RhdGUpCisJaWYgKCFzdGFydF9vdXRfdHJhbnNmZXIoY29tbW9uLCBiaCkpCiAJCS8qIERvbid0IGtub3cgd2hhdCB0byBkbyBpZiBjb21tb24tPmZzZyBpcyBOVUxMICovCiAJCXJldHVybiAtRUlPOwogCi0JLyogV2Ugd2lsbCBkcmFpbiB0aGUgYnVmZmVyIGluIHNvZnR3YXJlLCB3aGljaCBtZWFucyB3ZQorCS8qCisJICogV2Ugd2lsbCBkcmFpbiB0aGUgYnVmZmVyIGluIHNvZnR3YXJlLCB3aGljaCBtZWFucyB3ZQogCSAqIGNhbiByZXVzZSBpdCBmb3IgdGhlIG5leHQgZmlsbGluZy4gIE5vIG5lZWQgdG8gYWR2YW5jZQotCSAqIG5leHRfYnVmZmhkX3RvX2ZpbGwuICovCisJICogbmV4dF9idWZmaGRfdG9fZmlsbC4KKwkgKi8KIAogCS8qIFdhaXQgZm9yIHRoZSBDQlcgdG8gYXJyaXZlICovCiAJd2hpbGUgKGJoLT5zdGF0ZSAhPSBCVUZfU1RBVEVfRlVMTCkgewpAQCAtMjQyNSw3ICsyNDYyLDYgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBBTFQgQ09ORklHUyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLQogc3RhdGljIGludCBmc2dfc2V0X2FsdChzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmLCB1bnNpZ25lZCBpbnRmLCB1bnNpZ25lZCBhbHQpCiB7CiAJc3RydWN0IGZzZ19kZXYgKmZzZyA9IGZzZ19mcm9tX2Z1bmMoZik7CkBAIC0yNDUzLDggKzI0ODksMTAgQEAKIAlzdHJ1Y3QgZnNnX2x1bgkJKmN1cmx1bjsKIAl1bnNpZ25lZCBpbnQJCWV4Y2VwdGlvbl9yZXFfdGFnOwogCi0JLyogQ2xlYXIgdGhlIGV4aXN0aW5nIHNpZ25hbHMuICBBbnl0aGluZyBidXQgU0lHVVNSMSBpcyBjb252ZXJ0ZWQKLQkgKiBpbnRvIGEgaGlnaC1wcmlvcml0eSBFWElUIGV4Y2VwdGlvbi4gKi8KKwkvKgorCSAqIENsZWFyIHRoZSBleGlzdGluZyBzaWduYWxzLiAgQW55dGhpbmcgYnV0IFNJR1VTUjEgaXMgY29udmVydGVkCisJICogaW50byBhIGhpZ2gtcHJpb3JpdHkgRVhJVCBleGNlcHRpb24uCisJICovCiAJZm9yICg7OykgewogCQlpbnQgc2lnID0KIAkJCWRlcXVldWVfc2lnbmFsX2xvY2soY3VycmVudCwgJmN1cnJlbnQtPmJsb2NrZWQsICZpbmZvKTsKQEAgLTI0OTgsOCArMjUzNiwxMCBAQAogCQkJdXNiX2VwX2ZpZm9fZmx1c2goY29tbW9uLT5mc2ctPmJ1bGtfb3V0KTsKIAl9CiAKLQkvKiBSZXNldCB0aGUgSS9PIGJ1ZmZlciBzdGF0ZXMgYW5kIHBvaW50ZXJzLCB0aGUgU0NTSQotCSAqIHN0YXRlLCBhbmQgdGhlIGV4Y2VwdGlvbi4gIFRoZW4gaW52b2tlIHRoZSBoYW5kbGVyLiAqLworCS8qCisJICogUmVzZXQgdGhlIEkvTyBidWZmZXIgc3RhdGVzIGFuZCBwb2ludGVycywgdGhlIFNDU0kKKwkgKiBzdGF0ZSwgYW5kIHRoZSBleGNlcHRpb24uICBUaGVuIGludm9rZSB0aGUgaGFuZGxlci4KKwkgKi8KIAlzcGluX2xvY2tfaXJxKCZjb21tb24tPmxvY2spOwogCiAJZm9yIChpID0gMDsgaSA8IEZTR19OVU1fQlVGRkVSUzsgKytpKSB7CkBAIC0yNTM3LDkgKzI1NzcsMTEgQEAKIAkJYnJlYWs7CiAKIAljYXNlIEZTR19TVEFURV9SRVNFVDoKLQkJLyogSW4gY2FzZSB3ZSB3ZXJlIGZvcmNlZCBhZ2FpbnN0IG91ciB3aWxsIHRvIGhhbHQgYQorCQkvKgorCQkgKiBJbiBjYXNlIHdlIHdlcmUgZm9yY2VkIGFnYWluc3Qgb3VyIHdpbGwgdG8gaGFsdCBhCiAJCSAqIGJ1bGsgZW5kcG9pbnQsIGNsZWFyIHRoZSBoYWx0IG5vdy4gIChUaGUgU3VwZXJIIFVEQwotCQkgKiByZXF1aXJlcyB0aGlzLikgKi8KKwkJICogcmVxdWlyZXMgdGhpcy4pCisJCSAqLwogCQlpZiAoIWZzZ19pc19zZXQoY29tbW9uKSkKIAkJCWJyZWFrOwogCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KElHTk9SRV9CVUxLX09VVCwKQEAgLTI1NDksOSArMjU5MSwxMSBAQAogCQlpZiAoY29tbW9uLT5lcDBfcmVxX3RhZyA9PSBleGNlcHRpb25fcmVxX3RhZykKIAkJCWVwMF9xdWV1ZShjb21tb24pOwkvKiBDb21wbGV0ZSB0aGUgc3RhdHVzIHN0YWdlICovCiAKLQkJLyogVGVjaG5pY2FsbHkgdGhpcyBzaG91bGQgZ28gaGVyZSwgYnV0IGl0IHdvdWxkIG9ubHkgYmUKKwkJLyoKKwkJICogVGVjaG5pY2FsbHkgdGhpcyBzaG91bGQgZ28gaGVyZSwgYnV0IGl0IHdvdWxkIG9ubHkgYmUKIAkJICogYSB3YXN0ZSBvZiB0aW1lLiAgRGl0dG8gZm9yIHRoZSBJTlRFUkZBQ0VfQ0hBTkdFIGFuZAotCQkgKiBDT05GSUdfQ0hBTkdFIGNhc2VzLiAqLworCQkgKiBDT05GSUdfQ0hBTkdFIGNhc2VzLgorCQkgKi8KIAkJLyogZm9yIChpID0gMDsgaSA8IGNvbW1vbi0+bmx1bnM7ICsraSkgKi8KIAkJLyoJY29tbW9uLT5sdW5zW2ldLnVuaXRfYXR0ZW50aW9uX2RhdGEgPSAqLwogCQkvKgkJU1NfUkVTRVRfT0NDVVJSRUQ7ICAqLwpAQCAtMjU4Niw4ICsyNjMwLDEwIEBACiB7CiAJc3RydWN0IGZzZ19jb21tb24JKmNvbW1vbiA9IGNvbW1vbl87CiAKLQkvKiBBbGxvdyB0aGUgdGhyZWFkIHRvIGJlIGtpbGxlZCBieSBhIHNpZ25hbCwgYnV0IHNldCB0aGUgc2lnbmFsIG1hc2sKLQkgKiB0byBibG9jayBldmVyeXRoaW5nIGJ1dCBJTlQsIFRFUk0sIEtJTEwsIGFuZCBVU1IxLiAqLworCS8qCisJICogQWxsb3cgdGhlIHRocmVhZCB0byBiZSBraWxsZWQgYnkgYSBzaWduYWwsIGJ1dCBzZXQgdGhlIHNpZ25hbCBtYXNrCisJICogdG8gYmxvY2sgZXZlcnl0aGluZyBidXQgSU5ULCBURVJNLCBLSUxMLCBhbmQgVVNSMS4KKwkgKi8KIAlhbGxvd19zaWduYWwoU0lHSU5UKTsKIAlhbGxvd19zaWduYWwoU0lHVEVSTSk7CiAJYWxsb3dfc2lnbmFsKFNJR0tJTEwpOwpAQCAtMjU5Niw5ICsyNjQyLDExIEBACiAJLyogQWxsb3cgdGhlIHRocmVhZCB0byBiZSBmcm96ZW4gKi8KIAlzZXRfZnJlZXphYmxlKCk7CiAKLQkvKiBBcnJhbmdlIGZvciB1c2Vyc3BhY2UgcmVmZXJlbmNlcyB0byBiZSBpbnRlcnByZXRlZCBhcyBrZXJuZWwKKwkvKgorCSAqIEFycmFuZ2UgZm9yIHVzZXJzcGFjZSByZWZlcmVuY2VzIHRvIGJlIGludGVycHJldGVkIGFzIGtlcm5lbAogCSAqIHBvaW50ZXJzLiAgVGhhdCB3YXkgd2UgY2FuIHBhc3MgYSBrZXJuZWwgcG9pbnRlciB0byBhIHJvdXRpbmUKLQkgKiB0aGF0IGV4cGVjdHMgYSBfX3VzZXIgcG9pbnRlciBhbmQgaXQgd2lsbCB3b3JrIG9rYXkuICovCisJICogdGhhdCBleHBlY3RzIGEgX191c2VyIHBvaW50ZXIgYW5kIGl0IHdpbGwgd29yayBva2F5LgorCSAqLwogCXNldF9mcyhnZXRfZHMoKSk7CiAKIAkvKiBUaGUgbWFpbiBsb29wICovCkBAIC0yNjU4LDcgKzI3MDYsNyBAQAogCQl1cF93cml0ZSgmY29tbW9uLT5maWxlc2VtKTsKIAl9CiAKLQkvKiBMZXQgdGhlIHVuYmluZCBhbmQgY2xlYW51cCByb3V0aW5lcyBrbm93IHRoZSB0aHJlYWQgaGFzIGV4aXRlZCAqLworCS8qIExldCBmc2dfdW5iaW5kKCkga25vdyB0aGUgdGhyZWFkIGhhcyBleGl0ZWQgKi8KIAljb21wbGV0ZV9hbmRfZXhpdCgmY29tbW9uLT50aHJlYWRfbm90aWZpZXIsIDApOwogfQogCkBAIC0yNjkwLDcgKzI3MzgsNiBAQAogCWtyZWZfcHV0KCZjb21tb24tPnJlZiwgZnNnX2NvbW1vbl9yZWxlYXNlKTsKIH0KIAotCiBzdGF0aWMgc3RydWN0IGZzZ19jb21tb24gKmZzZ19jb21tb25faW5pdChzdHJ1Y3QgZnNnX2NvbW1vbiAqY29tbW9uLAogCQkJCQkgIHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldiwKIAkJCQkJICBzdHJ1Y3QgZnNnX2NvbmZpZyAqY2ZnKQpAQCAtMjczNiw4ICsyNzgzLDEwIEBACiAJCWZzZ19pbnRmX2Rlc2MuaUludGVyZmFjZSA9IHJjOwogCX0KIAotCS8qIENyZWF0ZSB0aGUgTFVOcywgb3BlbiB0aGVpciBiYWNraW5nIGZpbGVzLCBhbmQgcmVnaXN0ZXIgdGhlCi0JICogTFVOIGRldmljZXMgaW4gc3lzZnMuICovCisJLyoKKwkgKiBDcmVhdGUgdGhlIExVTnMsIG9wZW4gdGhlaXIgYmFja2luZyBmaWxlcywgYW5kIHJlZ2lzdGVyIHRoZQorCSAqIExVTiBkZXZpY2VzIGluIHN5c2ZzLgorCSAqLwogCWN1cmx1biA9IGt6YWxsb2Mobmx1bnMgKiBzaXplb2YgKmN1cmx1biwgR0ZQX0tFUk5FTCk7CiAJaWYgKHVubGlrZWx5KCFjdXJsdW4pKSB7CiAJCXJjID0gLUVOT01FTTsKQEAgLTI3NjUsNiArMjgxNCw3IEBACiAJCWlmIChyYykgewogCQkJSU5GTyhjb21tb24sICJmYWlsZWQgdG8gcmVnaXN0ZXIgTFVOJWQ6ICVkXG4iLCBpLCByYyk7CiAJCQljb21tb24tPm5sdW5zID0gaTsKKwkJCXB1dF9kZXZpY2UoJmN1cmx1bi0+ZGV2KTsKIAkJCWdvdG8gZXJyb3JfcmVsZWFzZTsKIAkJfQogCkBAIC0yNzkwLDcgKzI4NDAsNiBAQAogCX0KIAljb21tb24tPm5sdW5zID0gbmx1bnM7CiAKLQogCS8qIERhdGEgYnVmZmVycyBjeWNsaWMgbGlzdCAqLwogCWJoID0gY29tbW9uLT5idWZmaGRzOwogCWkgPSBGU0dfTlVNX0JVRkZFUlM7CkBAIC0yODA3LDcgKzI4NTYsNiBAQAogCX0gd2hpbGUgKC0taSk7CiAJYmgtPm5leHQgPSBjb21tb24tPmJ1ZmZoZHM7CiAKLQogCS8qIFByZXBhcmUgaW5xdWlyeVN0cmluZyAqLwogCWlmIChjZmctPnJlbGVhc2UgIT0gMHhmZmZmKSB7CiAJCWkgPSBjZmctPnJlbGVhc2U7CkBAIC0yODIxLDQxICsyODY5LDM1IEBACiAJCQlpID0gMHgwMzk5OwogCQl9CiAJfQotI2RlZmluZSBPUih4LCB5KSAoKHgpID8gKHgpIDogKHkpKQogCXNucHJpbnRmKGNvbW1vbi0+aW5xdWlyeV9zdHJpbmcsIHNpemVvZiBjb21tb24tPmlucXVpcnlfc3RyaW5nLAotCQkgIiUtOHMlLTE2cyUwNHgiLAotCQkgT1IoY2ZnLT52ZW5kb3JfbmFtZSwgIkxpbnV4ICAgIiksCisJCSAiJS04cyUtMTZzJTA0eCIsIGNmZy0+dmVuZG9yX25hbWUgPzogIkxpbnV4IiwKIAkJIC8qIEFzc3VtZSBwcm9kdWN0IG5hbWUgZGVwZW5kZW50IG9uIHRoZSBmaXJzdCBMVU4gKi8KLQkJIE9SKGNmZy0+cHJvZHVjdF9uYW1lLCBjb21tb24tPmx1bnMtPmNkcm9tCisJCSBjZmctPnByb2R1Y3RfbmFtZSA/OiAoY29tbW9uLT5sdW5zLT5jZHJvbQogCQkJCSAgICAgPyAiRmlsZS1TdG9yIEdhZGdldCIKLQkJCQkgICAgIDogIkZpbGUtQ0QgR2FkZ2V0ICAiKSwKKwkJCQkgICAgIDogIkZpbGUtQ0QgR2FkZ2V0IiksCiAJCSBpKTsKIAotCi0JLyogU29tZSBwZXJpcGhlcmFsIGNvbnRyb2xsZXJzIGFyZSBrbm93biBub3QgdG8gYmUgYWJsZSB0bworCS8qCisJICogU29tZSBwZXJpcGhlcmFsIGNvbnRyb2xsZXJzIGFyZSBrbm93biBub3QgdG8gYmUgYWJsZSB0bwogCSAqIGhhbHQgYnVsayBlbmRwb2ludHMgY29ycmVjdGx5LiAgSWYgb25lIG9mIHRoZW0gaXMgcHJlc2VudCwKIAkgKiBkaXNhYmxlIHN0YWxscy4KIAkgKi8KIAljb21tb24tPmNhbl9zdGFsbCA9IGNmZy0+Y2FuX3N0YWxsICYmCiAJCSEoZ2FkZ2V0X2lzX2F0OTEoY29tbW9uLT5nYWRnZXQpKTsKIAotCiAJc3Bpbl9sb2NrX2luaXQoJmNvbW1vbi0+bG9jayk7CiAJa3JlZl9pbml0KCZjb21tb24tPnJlZik7CiAKLQogCS8qIFRlbGwgdGhlIHRocmVhZCB0byBzdGFydCB3b3JraW5nICovCiAJY29tbW9uLT50aHJlYWRfdGFzayA9CiAJCWt0aHJlYWRfY3JlYXRlKGZzZ19tYWluX3RocmVhZCwgY29tbW9uLAotCQkJICAgICAgIE9SKGNmZy0+dGhyZWFkX25hbWUsICJmaWxlLXN0b3JhZ2UiKSk7CisJCQkgICAgICAgY2ZnLT50aHJlYWRfbmFtZSA/OiAiZmlsZS1zdG9yYWdlIik7CiAJaWYgKElTX0VSUihjb21tb24tPnRocmVhZF90YXNrKSkgewogCQlyYyA9IFBUUl9FUlIoY29tbW9uLT50aHJlYWRfdGFzayk7CiAJCWdvdG8gZXJyb3JfcmVsZWFzZTsKIAl9CiAJaW5pdF9jb21wbGV0aW9uKCZjb21tb24tPnRocmVhZF9ub3RpZmllcik7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmY29tbW9uLT5mc2dfd2FpdCk7Ci0jdW5kZWYgT1IKLQogCiAJLyogSW5mb3JtYXRpb24gKi8KIAlJTkZPKGNvbW1vbiwgRlNHX0RSSVZFUl9ERVNDICIsIHZlcnNpb246ICIgRlNHX0RSSVZFUl9WRVJTSU9OICJcbiIpOwpAQCAtMjg4OSwxOCArMjkzMSwxNSBAQAogCiAJcmV0dXJuIGNvbW1vbjsKIAotCiBlcnJvcl9sdW5zOgogCWNvbW1vbi0+bmx1bnMgPSBpICsgMTsKIGVycm9yX3JlbGVhc2U6CiAJY29tbW9uLT5zdGF0ZSA9IEZTR19TVEFURV9URVJNSU5BVEVEOwkvKiBUaGUgdGhyZWFkIGlzIGRlYWQgKi8KLQkvKiBDYWxsIGZzZ19jb21tb25fcmVsZWFzZSgpIGRpcmVjdGx5LCByZWYgbWlnaHQgYmUgbm90Ci0JICogaW5pdGlhbGlzZWQgKi8KKwkvKiBDYWxsIGZzZ19jb21tb25fcmVsZWFzZSgpIGRpcmVjdGx5LCByZWYgbWlnaHQgYmUgbm90IGluaXRpYWxpc2VkLiAqLwogCWZzZ19jb21tb25fcmVsZWFzZSgmY29tbW9uLT5yZWYpOwogCXJldHVybiBFUlJfUFRSKHJjKTsKIH0KIAotCiBzdGF0aWMgdm9pZCBmc2dfY29tbW9uX3JlbGVhc2Uoc3RydWN0IGtyZWYgKnJlZikKIHsKIAlzdHJ1Y3QgZnNnX2NvbW1vbiAqY29tbW9uID0gY29udGFpbmVyX29mKHJlZiwgc3RydWN0IGZzZ19jb21tb24sIHJlZik7CkBAIC0yOTA5LDkgKzI5NDgsNiBAQAogCWlmIChjb21tb24tPnN0YXRlICE9IEZTR19TVEFURV9URVJNSU5BVEVEKSB7CiAJCXJhaXNlX2V4Y2VwdGlvbihjb21tb24sIEZTR19TVEFURV9FWElUKTsKIAkJd2FpdF9mb3JfY29tcGxldGlvbigmY29tbW9uLT50aHJlYWRfbm90aWZpZXIpOwotCi0JCS8qIFRoZSBjbGVhbnVwIHJvdXRpbmUgd2FpdHMgZm9yIHRoaXMgY29tcGxldGlvbiBhbHNvICovCi0JCWNvbXBsZXRlKCZjb21tb24tPnRocmVhZF9ub3RpZmllcik7CiAJfQogCiAJaWYgKGxpa2VseShjb21tb24tPmx1bnMpKSB7CkBAIC0yOTQ1LDcgKzI5ODEsNiBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0KIHN0YXRpYyB2b2lkIGZzZ191bmJpbmQoc3RydWN0IHVzYl9jb25maWd1cmF0aW9uICpjLCBzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmKQogewogCXN0cnVjdCBmc2dfZGV2CQkqZnNnID0gZnNnX2Zyb21fZnVuYyhmKTsKQEAgLTI5NjUsNyArMzAwMCw2IEBACiAJa2ZyZWUoZnNnKTsKIH0KIAotCiBzdGF0aWMgaW50IGZzZ19iaW5kKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYywgc3RydWN0IHVzYl9mdW5jdGlvbiAqZikKIHsKIAlzdHJ1Y3QgZnNnX2RldgkJKmZzZyA9IGZzZ19mcm9tX2Z1bmMoZik7CkBAIC0zMDQ4LDExICszMDgyLDEzIEBACiAJZnNnLT5mdW5jdGlvbi5kaXNhYmxlICAgICA9IGZzZ19kaXNhYmxlOwogCiAJZnNnLT5jb21tb24gICAgICAgICAgICAgICA9IGNvbW1vbjsKLQkvKiBPdXIgY2FsbGVyIGhvbGRzIGEgcmVmZXJlbmNlIHRvIGNvbW1vbiBzdHJ1Y3R1cmUgc28gd2UKKwkvKgorCSAqIE91ciBjYWxsZXIgaG9sZHMgYSByZWZlcmVuY2UgdG8gY29tbW9uIHN0cnVjdHVyZSBzbyB3ZQogCSAqIGRvbid0IGhhdmUgdG8gYmUgd29ycnkgYWJvdXQgaXQgYmVpbmcgZnJlZWQgdW50aWwgd2UgcmV0dXJuCiAJICogZnJvbSB0aGlzIGZ1bmN0aW9uLiAgU28gaW5zdGVhZCBvZiBpbmNyZW1lbnRpbmcgY291bnRlciBub3cKIAkgKiBhbmQgZGVjcmVtZW50IGluIGVycm9yIHJlY292ZXJ5IHdlIGluY3JlbWVudCBpdCBvbmx5IHdoZW4KLQkgKiBjYWxsIHRvIHVzYl9hZGRfZnVuY3Rpb24oKSB3YXMgc3VjY2Vzc2Z1bC4gKi8KKwkgKiBjYWxsIHRvIHVzYl9hZGRfZnVuY3Rpb24oKSB3YXMgc3VjY2Vzc2Z1bC4KKwkgKi8KIAogCXJjID0gdXNiX2FkZF9mdW5jdGlvbihjLCAmZnNnLT5mdW5jdGlvbik7CiAJaWYgKHVubGlrZWx5KHJjKSkKQEAgLTMwNjMsOCArMzA5OSw3IEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IF9fZGVwcmVjYXRlZCBfX21heWJlX3VudXNlZAotZnNnX2FkZChzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYsCi0Jc3RydWN0IHVzYl9jb25maWd1cmF0aW9uICpjLAorZnNnX2FkZChzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYsIHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYywKIAlzdHJ1Y3QgZnNnX2NvbW1vbiAqY29tbW9uKQogewogCXJldHVybiBmc2dfYmluZF9jb25maWcoY2RldiwgYywgY29tbW9uKTsKQEAgLTMwNzMsNyArMzEwOCw2IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqIE1vZHVsZSBwYXJhbWV0ZXJzICoqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLQogc3RydWN0IGZzZ19tb2R1bGVfcGFyYW1ldGVycyB7CiAJY2hhcgkJKmZpbGVbRlNHX01BWF9MVU5TXTsKIAlpbnQJCXJvW0ZTR19NQVhfTFVOU107CkBAIC0zMDg3LDcgKzMxMjEsNiBAQAogCWludAkJc3RhbGw7CS8qIGNhbl9zdGFsbCAqLwogfTsKIAotCiAjZGVmaW5lIF9GU0dfTU9EVUxFX1BBUkFNX0FSUkFZKHByZWZpeCwgcGFyYW1zLCBuYW1lLCB0eXBlLCBkZXNjKQlcCiAJbW9kdWxlX3BhcmFtX2FycmF5X25hbWVkKHByZWZpeCAjIyBuYW1lLCBwYXJhbXMubmFtZSwgdHlwZSwJXAogCQkJCSAmcHJlZml4ICMjIHBhcmFtcy5uYW1lICMjIF9jb3VudCwJXApAQCAtMzExNSw3ICszMTQ4LDYgQEAKIAlfRlNHX01PRFVMRV9QQVJBTShwcmVmaXgsIHBhcmFtcywgc3RhbGwsIGJvb2wsCQkJXAogCQkJICAiZmFsc2UgdG8gcHJldmVudCBidWxrIHN0YWxscyIpCiAKLQogc3RhdGljIHZvaWQKIGZzZ19jb25maWdfZnJvbV9wYXJhbXMoc3RydWN0IGZzZ19jb25maWcgKmNmZywKIAkJICAgICAgIGNvbnN0IHN0cnVjdCBmc2dfbW9kdWxlX3BhcmFtZXRlcnMgKnBhcmFtcykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX25jbS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfbmNtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTMwZWVlNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX25jbS5jCkBAIC0wLDAgKzEsMTQwNyBAQAorLyoKKyAqIGZfbmNtLmMgLS0gVVNCIENEQyBOZXR3b3JrIChOQ00pIGxpbmsgZnVuY3Rpb24gZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uCisgKiBDb250YWN0OiBZYXVoZW5pIEthbGl1dGEgPHlhdWhlbmkua2FsaXV0YUBub2tpYS5jb20+CisgKgorICogVGhlIGRyaXZlciBib3Jyb3dzIGZyb20gZl9lY20uYyB3aGljaCBpczoKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNSwyMDA4IERhdmlkIEJyb3duZWxsCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KKworI2luY2x1ZGUgPGxpbnV4L3VzYi9jZGMuaD4KKworI2luY2x1ZGUgInVfZXRoZXIuaCIKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgYSAiQ0RDIE5ldHdvcmsgQ29udHJvbCBNb2RlbCIgKENEQyBOQ00pIEV0aGVybmV0IGxpbmsuCisgKiBOQ00gaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB3aXRoIGhpZ2gtc3BlZWQgbmV0d29yayBhdHRhY2htZW50cy4KKyAqCisgKiBOb3RlIHRoYXQgTkNNIHJlcXVpcmVzIHRoZSB1c2Ugb2YgImFsdGVybmF0ZSBzZXR0aW5ncyIgZm9yIGl0cyBkYXRhCisgKiBpbnRlcmZhY2UuICBUaGlzIG1lYW5zIHRoYXQgdGhlIHNldF9hbHQoKSBtZXRob2QgaGFzIHJlYWwgd29yayB0byBkbywKKyAqIGFuZCBhbHNvIG1lYW5zIHRoYXQgYSBnZXRfYWx0KCkgbWV0aG9kIGlzIHJlcXVpcmVkLgorICovCisKKy8qIHRvIHRyaWdnZXIgY3JjL25vbi1jcmMgbmRwIHNpZ25hdHVyZSAqLworCisjZGVmaW5lIE5DTV9ORFBfSERSX0NSQ19NQVNLCTB4MDEwMDAwMDAKKyNkZWZpbmUgTkNNX05EUF9IRFJfQ1JDCQkweDAxMDAwMDAwCisjZGVmaW5lIE5DTV9ORFBfSERSX05PQ1JDCTB4MDAwMDAwMDAKKworc3RydWN0IG5jbV9lcF9kZXNjcyB7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCSppbjsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IJKm91dDsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IJKm5vdGlmeTsKK307CisKK2VudW0gbmNtX25vdGlmeV9zdGF0ZSB7CisJTkNNX05PVElGWV9OT05FLAkJLyogZG9uJ3Qgbm90aWZ5ICovCisJTkNNX05PVElGWV9DT05ORUNULAkJLyogaXNzdWUgQ09OTkVDVCBuZXh0ICovCisJTkNNX05PVElGWV9TUEVFRCwJCS8qIGlzc3VlIFNQRUVEX0NIQU5HRSBuZXh0ICovCit9OworCitzdHJ1Y3QgZl9uY20geworCXN0cnVjdCBnZXRoZXIJCQlwb3J0OworCXU4CQkJCWN0cmxfaWQsIGRhdGFfaWQ7CisKKwljaGFyCQkJCWV0aGFkZHJbMTRdOworCisJc3RydWN0IG5jbV9lcF9kZXNjcwkJZnM7CisJc3RydWN0IG5jbV9lcF9kZXNjcwkJaHM7CisKKwlzdHJ1Y3QgdXNiX2VwCQkJKm5vdGlmeTsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IJKm5vdGlmeV9kZXNjOworCXN0cnVjdCB1c2JfcmVxdWVzdAkJKm5vdGlmeV9yZXE7CisJdTgJCQkJbm90aWZ5X3N0YXRlOworCWJvb2wJCQkJaXNfb3BlbjsKKworCXN0cnVjdCBuZHBfcGFyc2VyX29wdHMJCSpwYXJzZXJfb3B0czsKKwlib29sCQkJCWlzX2NyYzsKKworCS8qCisJICogZm9yIG5vdGlmaWNhdGlvbiwgaXQgaXMgYWNjZXNzZWQgZnJvbSBib3RoCisJICogY2FsbGJhY2sgYW5kIGV0aGVybmV0IG9wZW4vY2xvc2UKKwkgKi8KKwlzcGlubG9ja190CQkJbG9jazsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGZfbmNtICpmdW5jX3RvX25jbShzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmKQoreworCXJldHVybiBjb250YWluZXJfb2YoZiwgc3RydWN0IGZfbmNtLCBwb3J0LmZ1bmMpOworfQorCisvKiBwZWFrICh0aGVvcmV0aWNhbCkgYnVsayB0cmFuc2ZlciByYXRlIGluIGJpdHMtcGVyLXNlY29uZCAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBuY21fYml0cmF0ZShzdHJ1Y3QgdXNiX2dhZGdldCAqZykKK3sKKwlpZiAoZ2FkZ2V0X2lzX2R1YWxzcGVlZChnKSAmJiBnLT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCkKKwkJcmV0dXJuIDEzICogNTEyICogOCAqIDEwMDAgKiA4OworCWVsc2UKKwkJcmV0dXJuIDE5ICogIDY0ICogMSAqIDEwMDAgKiA4OworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogV2UgY2Fubm90IGdyb3VwIGZyYW1lcyBzbyB1c2UganVzdCB0aGUgbWluaW1hbCBzaXplIHdoaWNoIG9rIHRvIHB1dAorICogb25lIG1heC1zaXplIGV0aGVybmV0IGZyYW1lLgorICogSWYgdGhlIGhvc3QgY2FuIGdyb3VwIGZyYW1lcywgYWxsb3cgaXQgdG8gZG8gdGhhdCwgMTZLIGlzIHNlbGVjdGVkLAorICogYmVjYXVzZSBpdCdzIHVzZWQgYnkgZGVmYXVsdCBieSB0aGUgY3VycmVudCBsaW51eCBob3N0IGRyaXZlcgorICovCisjZGVmaW5lIE5UQl9ERUZBVUxUX0lOX1NJWkUJVVNCX0NEQ19OQ01fTlRCX01JTl9JTl9TSVpFCisjZGVmaW5lIE5UQl9PVVRfU0laRQkJMTYzODQKKworLyoKKyAqIHNrYnMgb2Ygc2l6ZSBsZXNzIHRoYW4gdGhhdCB3aWxsIG5vdCBiZSBhbGxpZ25lZAorICogdG8gTkNNJ3MgZHdOdGJJbk1heFNpemUgdG8gc2F2ZSBidXMgYmFuZHdpZHRoCisgKi8KKworI2RlZmluZQlNQVhfVFhfTk9ORklYRUQJCSg1MTIgKiAzKQorCisjZGVmaW5lIEZPUk1BVFNfU1VQUE9SVEVECShVU0JfQ0RDX05DTV9OVEIxNl9TVVBQT1JURUQgfAlcCisJCQkJIFVTQl9DRENfTkNNX05UQjMyX1NVUFBPUlRFRCkKKworc3RhdGljIHN0cnVjdCB1c2JfY2RjX25jbV9udGJfcGFyYW1ldGVycyBudGJfcGFyYW1ldGVycyA9IHsKKwkud0xlbmd0aCA9IHNpemVvZiBudGJfcGFyYW1ldGVycywKKwkuYm1OdGJGb3JtYXRzU3VwcG9ydGVkID0gY3B1X3RvX2xlMTYoRk9STUFUU19TVVBQT1JURUQpLAorCS5kd050YkluTWF4U2l6ZSA9IGNwdV90b19sZTMyKE5UQl9ERUZBVUxUX0lOX1NJWkUpLAorCS53TmRwSW5EaXZpc29yID0gY3B1X3RvX2xlMTYoNCksCisJLndOZHBJblBheWxvYWRSZW1haW5kZXIgPSBjcHVfdG9fbGUxNigwKSwKKwkud05kcEluQWxpZ25tZW50ID0gY3B1X3RvX2xlMTYoNCksCisKKwkuZHdOdGJPdXRNYXhTaXplID0gY3B1X3RvX2xlMzIoTlRCX09VVF9TSVpFKSwKKwkud05kcE91dERpdmlzb3IgPSBjcHVfdG9fbGUxNig0KSwKKwkud05kcE91dFBheWxvYWRSZW1haW5kZXIgPSBjcHVfdG9fbGUxNigwKSwKKwkud05kcE91dEFsaWdubWVudCA9IGNwdV90b19sZTE2KDQpLAorfTsKKworLyoKKyAqIFVzZSB3TWF4UGFja2V0U2l6ZSBiaWcgZW5vdWdoIHRvIGZpdCBDRENfTk9USUZZX1NQRUVEX0NIQU5HRSBpbiBvbmUKKyAqIHBhY2tldCwgdG8gc2ltcGxpZnkgY2FuY2VsbGF0aW9uOyBhbmQgYSBiaWcgdHJhbnNmZXIgaW50ZXJ2YWwsIHRvCisgKiB3YXN0ZSBsZXNzIGJhbmR3aWR0aC4KKyAqLworCisjZGVmaW5lIExPRzJfU1RBVFVTX0lOVEVSVkFMX01TRUMJNQkvKiAxIDw8IDUgPT0gMzIgbXNlYyAqLworI2RlZmluZSBOQ01fU1RBVFVTX0JZVEVDT1VOVAkJMTYJLyogOCBieXRlIGhlYWRlciArIGRhdGEgKi8KKworc3RhdGljIHN0cnVjdCB1c2JfaW50ZXJmYWNlX2Fzc29jX2Rlc2NyaXB0b3IgbmNtX2lhZF9kZXNjIF9faW5pdGRhdGEgPSB7CisJLmJMZW5ndGggPQkJc2l6ZW9mIG5jbV9pYWRfZGVzYywKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0lOVEVSRkFDRV9BU1NPQ0lBVElPTiwKKworCS8qIC5iRmlyc3RJbnRlcmZhY2UgPQlEWU5BTUlDLCAqLworCS5iSW50ZXJmYWNlQ291bnQgPQkyLAkvKiBjb250cm9sICsgZGF0YSAqLworCS5iRnVuY3Rpb25DbGFzcyA9CVVTQl9DTEFTU19DT01NLAorCS5iRnVuY3Rpb25TdWJDbGFzcyA9CVVTQl9DRENfU1VCQ0xBU1NfTkNNLAorCS5iRnVuY3Rpb25Qcm90b2NvbCA9CVVTQl9DRENfUFJPVE9fTk9ORSwKKwkvKiAuaUZ1bmN0aW9uID0JCURZTkFNSUMgKi8KK307CisKKy8qIGludGVyZmFjZSBkZXNjcmlwdG9yOiAqLworCitzdGF0aWMgc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvciBuY21fY29udHJvbF9pbnRmIF9faW5pdGRhdGEgPSB7CisJLmJMZW5ndGggPQkJc2l6ZW9mIG5jbV9jb250cm9sX2ludGYsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9JTlRFUkZBQ0UsCisKKwkvKiAuYkludGVyZmFjZU51bWJlciA9IERZTkFNSUMgKi8KKwkuYk51bUVuZHBvaW50cyA9CTEsCisJLmJJbnRlcmZhY2VDbGFzcyA9CVVTQl9DTEFTU19DT01NLAorCS5iSW50ZXJmYWNlU3ViQ2xhc3MgPQlVU0JfQ0RDX1NVQkNMQVNTX05DTSwKKwkuYkludGVyZmFjZVByb3RvY29sID0JVVNCX0NEQ19QUk9UT19OT05FLAorCS8qIC5pSW50ZXJmYWNlID0gRFlOQU1JQyAqLworfTsKKworc3RhdGljIHN0cnVjdCB1c2JfY2RjX2hlYWRlcl9kZXNjIG5jbV9oZWFkZXJfZGVzYyBfX2luaXRkYXRhID0geworCS5iTGVuZ3RoID0JCXNpemVvZiBuY21faGVhZGVyX2Rlc2MsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9DU19JTlRFUkZBQ0UsCisJLmJEZXNjcmlwdG9yU3ViVHlwZSA9CVVTQl9DRENfSEVBREVSX1RZUEUsCisKKwkuYmNkQ0RDID0JCWNwdV90b19sZTE2KDB4MDExMCksCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9jZGNfdW5pb25fZGVzYyBuY21fdW5pb25fZGVzYyBfX2luaXRkYXRhID0geworCS5iTGVuZ3RoID0JCXNpemVvZihuY21fdW5pb25fZGVzYyksCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9DU19JTlRFUkZBQ0UsCisJLmJEZXNjcmlwdG9yU3ViVHlwZSA9CVVTQl9DRENfVU5JT05fVFlQRSwKKwkvKiAuYk1hc3RlckludGVyZmFjZTAgPQlEWU5BTUlDICovCisJLyogLmJTbGF2ZUludGVyZmFjZTAgPQlEWU5BTUlDICovCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9jZGNfZXRoZXJfZGVzYyBlY21fZGVzYyBfX2luaXRkYXRhID0geworCS5iTGVuZ3RoID0JCXNpemVvZiBlY21fZGVzYywKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0NTX0lOVEVSRkFDRSwKKwkuYkRlc2NyaXB0b3JTdWJUeXBlID0JVVNCX0NEQ19FVEhFUk5FVF9UWVBFLAorCisJLyogdGhpcyBkZXNjcmlwdG9yIGFjdHVhbGx5IGFkZHMgdmFsdWUsIHN1cnByaXNlISAqLworCS8qIC5pTUFDQWRkcmVzcyA9IERZTkFNSUMgKi8KKwkuYm1FdGhlcm5ldFN0YXRpc3RpY3MgPQljcHVfdG9fbGUzMigwKSwgLyogbm8gc3RhdGlzdGljcyAqLworCS53TWF4U2VnbWVudFNpemUgPQljcHVfdG9fbGUxNihFVEhfRlJBTUVfTEVOKSwKKwkud051bWJlck1DRmlsdGVycyA9CWNwdV90b19sZTE2KDApLAorCS5iTnVtYmVyUG93ZXJGaWx0ZXJzID0JMCwKK307CisKKyNkZWZpbmUgTkNBUFMJKFVTQl9DRENfTkNNX05DQVBfRVRIX0ZJTFRFUiB8IFVTQl9DRENfTkNNX05DQVBfQ1JDX01PREUpCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2NkY19uY21fZGVzYyBuY21fZGVzYyBfX2luaXRkYXRhID0geworCS5iTGVuZ3RoID0JCXNpemVvZiBuY21fZGVzYywKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0NTX0lOVEVSRkFDRSwKKwkuYkRlc2NyaXB0b3JTdWJUeXBlID0JVVNCX0NEQ19OQ01fVFlQRSwKKworCS5iY2ROY21WZXJzaW9uID0JY3B1X3RvX2xlMTYoMHgwMTAwKSwKKwkvKiBjYW4gcHJvY2VzcyBTZXRFdGhlcm5ldFBhY2tldEZpbHRlciAqLworCS5ibU5ldHdvcmtDYXBhYmlsaXRpZXMgPSBOQ0FQUywKK307CisKKy8qIHRoZSBkZWZhdWx0IGRhdGEgaW50ZXJmYWNlIGhhcyBubyBlbmRwb2ludHMgLi4uICovCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yIG5jbV9kYXRhX25vcF9pbnRmIF9faW5pdGRhdGEgPSB7CisJLmJMZW5ndGggPQkJc2l6ZW9mIG5jbV9kYXRhX25vcF9pbnRmLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfSU5URVJGQUNFLAorCisJLmJJbnRlcmZhY2VOdW1iZXIgPQkxLAorCS5iQWx0ZXJuYXRlU2V0dGluZyA9CTAsCisJLmJOdW1FbmRwb2ludHMgPQkwLAorCS5iSW50ZXJmYWNlQ2xhc3MgPQlVU0JfQ0xBU1NfQ0RDX0RBVEEsCisJLmJJbnRlcmZhY2VTdWJDbGFzcyA9CTAsCisJLmJJbnRlcmZhY2VQcm90b2NvbCA9CVVTQl9DRENfTkNNX1BST1RPX05UQiwKKwkvKiAuaUludGVyZmFjZSA9IERZTkFNSUMgKi8KK307CisKKy8qIC4uLiBidXQgdGhlICJyZWFsIiBkYXRhIGludGVyZmFjZSBoYXMgdHdvIGJ1bGsgZW5kcG9pbnRzICovCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yIG5jbV9kYXRhX2ludGYgX19pbml0ZGF0YSA9IHsKKwkuYkxlbmd0aCA9CQlzaXplb2YgbmNtX2RhdGFfaW50ZiwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0lOVEVSRkFDRSwKKworCS5iSW50ZXJmYWNlTnVtYmVyID0JMSwKKwkuYkFsdGVybmF0ZVNldHRpbmcgPQkxLAorCS5iTnVtRW5kcG9pbnRzID0JMiwKKwkuYkludGVyZmFjZUNsYXNzID0JVVNCX0NMQVNTX0NEQ19EQVRBLAorCS5iSW50ZXJmYWNlU3ViQ2xhc3MgPQkwLAorCS5iSW50ZXJmYWNlUHJvdG9jb2wgPQlVU0JfQ0RDX05DTV9QUk9UT19OVEIsCisJLyogLmlJbnRlcmZhY2UgPSBEWU5BTUlDICovCit9OworCisvKiBmdWxsIHNwZWVkIHN1cHBvcnQ6ICovCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgZnNfbmNtX25vdGlmeV9kZXNjIF9faW5pdGRhdGEgPSB7CisJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKKworCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9JTiwKKwkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0lOVCwKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNihOQ01fU1RBVFVTX0JZVEVDT1VOVCksCisJLmJJbnRlcnZhbCA9CQkxIDw8IExPRzJfU1RBVFVTX0lOVEVSVkFMX01TRUMsCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGZzX25jbV9pbl9kZXNjIF9faW5pdGRhdGEgPSB7CisJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKKworCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9JTiwKKwkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGZzX25jbV9vdXRfZGVzYyBfX2luaXRkYXRhID0geworCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCisKKwkuYkVuZHBvaW50QWRkcmVzcyA9CVVTQl9ESVJfT1VULAorCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICpuY21fZnNfZnVuY3Rpb25bXSBfX2luaXRkYXRhID0geworCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZuY21faWFkX2Rlc2MsCisJLyogQ0RDIE5DTSBjb250cm9sIGRlc2NyaXB0b3JzICovCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJm5jbV9jb250cm9sX2ludGYsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJm5jbV9oZWFkZXJfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmbmNtX3VuaW9uX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmVjbV9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZuY21fZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZnNfbmNtX25vdGlmeV9kZXNjLAorCS8qIGRhdGEgaW50ZXJmYWNlLCBhbHRzZXR0aW5ncyAwIGFuZCAxICovCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJm5jbV9kYXRhX25vcF9pbnRmLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZuY21fZGF0YV9pbnRmLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZmc19uY21faW5fZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZnNfbmNtX291dF9kZXNjLAorCU5VTEwsCit9OworCisvKiBoaWdoIHNwZWVkIHN1cHBvcnQ6ICovCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgaHNfbmNtX25vdGlmeV9kZXNjIF9faW5pdGRhdGEgPSB7CisJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKKworCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9JTiwKKwkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0lOVCwKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNihOQ01fU1RBVFVTX0JZVEVDT1VOVCksCisJLmJJbnRlcnZhbCA9CQlMT0cyX1NUQVRVU19JTlRFUlZBTF9NU0VDICsgNCwKK307CitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGhzX25jbV9pbl9kZXNjIF9faW5pdGRhdGEgPSB7CisJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKKworCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9JTiwKKwkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCisJLndNYXhQYWNrZXRTaXplID0JY3B1X3RvX2xlMTYoNTEyKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgaHNfbmNtX291dF9kZXNjIF9faW5pdGRhdGEgPSB7CisJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKKworCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9PVVQsCisJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KDUxMiksCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqbmNtX2hzX2Z1bmN0aW9uW10gX19pbml0ZGF0YSA9IHsKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmbmNtX2lhZF9kZXNjLAorCS8qIENEQyBOQ00gY29udHJvbCBkZXNjcmlwdG9ycyAqLworCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZuY21fY29udHJvbF9pbnRmLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZuY21faGVhZGVyX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJm5jbV91bmlvbl9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZlY21fZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmbmNtX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmhzX25jbV9ub3RpZnlfZGVzYywKKwkvKiBkYXRhIGludGVyZmFjZSwgYWx0c2V0dGluZ3MgMCBhbmQgMSAqLworCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZuY21fZGF0YV9ub3BfaW50ZiwKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmbmNtX2RhdGFfaW50ZiwKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmaHNfbmNtX2luX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmhzX25jbV9vdXRfZGVzYywKKwlOVUxMLAorfTsKKworLyogc3RyaW5nIGRlc2NyaXB0b3JzOiAqLworCisjZGVmaW5lIFNUUklOR19DVFJMX0lEWAkwCisjZGVmaW5lIFNUUklOR19NQUNfSURYCTEKKyNkZWZpbmUgU1RSSU5HX0RBVEFfSURYCTIKKyNkZWZpbmUgU1RSSU5HX0lBRF9JRFgJMworCitzdGF0aWMgc3RydWN0IHVzYl9zdHJpbmcgbmNtX3N0cmluZ19kZWZzW10gPSB7CisJW1NUUklOR19DVFJMX0lEWF0ucyA9ICJDREMgTmV0d29yayBDb250cm9sIE1vZGVsIChOQ00pIiwKKwlbU1RSSU5HX01BQ19JRFhdLnMgPSBOVUxMIC8qIERZTkFNSUMgKi8sCisJW1NUUklOR19EQVRBX0lEWF0ucyA9ICJDREMgTmV0d29yayBEYXRhIiwKKwlbU1RSSU5HX0lBRF9JRFhdLnMgPSAiQ0RDIE5DTSIsCisJeyAgfSAvKiBlbmQgb2YgbGlzdCAqLworfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZ2FkZ2V0X3N0cmluZ3MgbmNtX3N0cmluZ190YWJsZSA9IHsKKwkubGFuZ3VhZ2UgPQkJMHgwNDA5LAkvKiBlbi11cyAqLworCS5zdHJpbmdzID0JCW5jbV9zdHJpbmdfZGVmcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2dhZGdldF9zdHJpbmdzICpuY21fc3RyaW5nc1tdID0geworCSZuY21fc3RyaW5nX3RhYmxlLAorCU5VTEwsCit9OworCisvKgorICogSGVyZSBhcmUgb3B0aW9ucyBmb3IgTkNNIERhdGFncmFtIFBvaW50ZXIgdGFibGUgKE5EUCkgcGFyc2VyLgorICogVGhlcmUgYXJlIDIgZGlmZmVyZW50IGZvcm1hdHM6IE5EUDE2IGFuZCBORFAzMiBpbiB0aGUgc3BlYyAoY2guIDMpLAorICogaW4gTkRQMTYgb2Zmc2V0cyBhbmQgc2l6ZXMgZmllbGRzIGFyZSAxIDE2Yml0IHdvcmQgd2lkZSwKKyAqIGluIE5EUDMyIC0tIDIgMTZiaXQgd29yZHMgd2lkZS4gQWxzbyBzaWduYXR1cmVzIGFyZSBkaWZmZXJlbnQuCisgKiBUbyBtYWtlIHRoZSBwYXJzZXIgY29kZSB0aGUgc2FtZSwgcHV0IHRoZSBkaWZmZXJlbmNlcyBpbiB0aGUgc3RydWN0dXJlLAorICogYW5kIHN3aXRjaCBwb2ludGVycyB0byB0aGUgc3RydWN0dXJlcyB3aGVuIHRoZSBmb3JtYXQgaXMgY2hhbmdlZC4KKyAqLworCitzdHJ1Y3QgbmRwX3BhcnNlcl9vcHRzIHsKKwl1MzIJCW50aF9zaWduOworCXUzMgkJbmRwX3NpZ247CisJdW5zaWduZWQJbnRoX3NpemU7CisJdW5zaWduZWQJbmRwX3NpemU7CisJdW5zaWduZWQJbmRwbGVuX2FsaWduOworCS8qIHNpemVzIGluIHUxNiB1bml0cyAqLworCXVuc2lnbmVkCWRncmFtX2l0ZW1fbGVuOyAvKiBpbmRleCBvciBsZW5ndGggKi8KKwl1bnNpZ25lZAlibG9ja19sZW5ndGg7CisJdW5zaWduZWQJZnBfaW5kZXg7CisJdW5zaWduZWQJcmVzZXJ2ZWQxOworCXVuc2lnbmVkCXJlc2VydmVkMjsKKwl1bnNpZ25lZAluZXh0X2ZwX2luZGV4OworfTsKKworI2RlZmluZSBJTklUX05EUDE2X09QVFMgewkJCQkJXAorCQkubnRoX3NpZ24gPSBVU0JfQ0RDX05DTV9OVEgxNl9TSUdOLAkJXAorCQkubmRwX3NpZ24gPSBVU0JfQ0RDX05DTV9ORFAxNl9OT0NSQ19TSUdOLAlcCisJCS5udGhfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdXNiX2NkY19uY21fbnRoMTYpLAlcCisJCS5uZHBfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdXNiX2NkY19uY21fbmRwMTYpLAlcCisJCS5uZHBsZW5fYWxpZ24gPSA0LAkJCQlcCisJCS5kZ3JhbV9pdGVtX2xlbiA9IDEsCQkJCVwKKwkJLmJsb2NrX2xlbmd0aCA9IDEsCQkJCVwKKwkJLmZwX2luZGV4ID0gMSwJCQkJCVwKKwkJLnJlc2VydmVkMSA9IDAsCQkJCQlcCisJCS5yZXNlcnZlZDIgPSAwLAkJCQkJXAorCQkubmV4dF9mcF9pbmRleCA9IDEsCQkJCVwKKwl9CisKKworI2RlZmluZSBJTklUX05EUDMyX09QVFMgewkJCQkJXAorCQkubnRoX3NpZ24gPSBVU0JfQ0RDX05DTV9OVEgzMl9TSUdOLAkJXAorCQkubmRwX3NpZ24gPSBVU0JfQ0RDX05DTV9ORFAzMl9OT0NSQ19TSUdOLAlcCisJCS5udGhfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdXNiX2NkY19uY21fbnRoMzIpLAlcCisJCS5uZHBfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdXNiX2NkY19uY21fbmRwMzIpLAlcCisJCS5uZHBsZW5fYWxpZ24gPSA4LAkJCQlcCisJCS5kZ3JhbV9pdGVtX2xlbiA9IDIsCQkJCVwKKwkJLmJsb2NrX2xlbmd0aCA9IDIsCQkJCVwKKwkJLmZwX2luZGV4ID0gMiwJCQkJCVwKKwkJLnJlc2VydmVkMSA9IDEsCQkJCQlcCisJCS5yZXNlcnZlZDIgPSAyLAkJCQkJXAorCQkubmV4dF9mcF9pbmRleCA9IDIsCQkJCVwKKwl9CisKK3N0YXRpYyBzdHJ1Y3QgbmRwX3BhcnNlcl9vcHRzIG5kcDE2X29wdHMgPSBJTklUX05EUDE2X09QVFM7CitzdGF0aWMgc3RydWN0IG5kcF9wYXJzZXJfb3B0cyBuZHAzMl9vcHRzID0gSU5JVF9ORFAzMl9PUFRTOworCitzdGF0aWMgaW5saW5lIHZvaWQgcHV0X25jbShfX2xlMTYgKipwLCB1bnNpZ25lZCBzaXplLCB1bnNpZ25lZCB2YWwpCit7CisJc3dpdGNoIChzaXplKSB7CisJY2FzZSAxOgorCQlwdXRfdW5hbGlnbmVkX2xlMTYoKHUxNil2YWwsICpwKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlwdXRfdW5hbGlnbmVkX2xlMzIoKHUzMil2YWwsICpwKTsKKworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwl9CisKKwkqcCArPSBzaXplOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGdldF9uY20oX19sZTE2ICoqcCwgdW5zaWduZWQgc2l6ZSkKK3sKKwl1bnNpZ25lZCB0bXA7CisKKwlzd2l0Y2ggKHNpemUpIHsKKwljYXNlIDE6CisJCXRtcCA9IGdldF91bmFsaWduZWRfbGUxNigqcCk7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJdG1wID0gZ2V0X3VuYWxpZ25lZF9sZTMyKCpwKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJfQorCisJKnAgKz0gc2l6ZTsKKwlyZXR1cm4gdG1wOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIHZvaWQgbmNtX3Jlc2V0X3ZhbHVlcyhzdHJ1Y3QgZl9uY20gKm5jbSkKK3sKKwluY20tPnBhcnNlcl9vcHRzID0gJm5kcDE2X29wdHM7CisJbmNtLT5pc19jcmMgPSBmYWxzZTsKKwluY20tPnBvcnQuY2RjX2ZpbHRlciA9IERFRkFVTFRfRklMVEVSOworCisJLyogZG9lc24ndCBtYWtlIHNlbnNlIGZvciBuY20sIGZpeGVkIHNpemUgdXNlZCAqLworCW5jbS0+cG9ydC5oZWFkZXJfbGVuID0gMDsKKworCW5jbS0+cG9ydC5maXhlZF9vdXRfbGVuID0gbGUzMl90b19jcHUobnRiX3BhcmFtZXRlcnMuZHdOdGJPdXRNYXhTaXplKTsKKwluY20tPnBvcnQuZml4ZWRfaW5fbGVuID0gTlRCX0RFRkFVTFRfSU5fU0laRTsKK30KKworLyoKKyAqIENvbnRleHQ6IG5jbS0+bG9jayBoZWxkCisgKi8KK3N0YXRpYyB2b2lkIG5jbV9kb19ub3RpZnkoc3RydWN0IGZfbmNtICpuY20pCit7CisJc3RydWN0IHVzYl9yZXF1ZXN0CQkqcmVxID0gbmNtLT5ub3RpZnlfcmVxOworCXN0cnVjdCB1c2JfY2RjX25vdGlmaWNhdGlvbgkqZXZlbnQ7CisJc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2CSpjZGV2ID0gbmNtLT5wb3J0LmZ1bmMuY29uZmlnLT5jZGV2OworCV9fbGUzMgkJCQkqZGF0YTsKKwlpbnQJCQkJc3RhdHVzOworCisJLyogbm90aWZpY2F0aW9uIGFscmVhZHkgaW4gZmxpZ2h0PyAqLworCWlmICghcmVxKQorCQlyZXR1cm47CisKKwlldmVudCA9IHJlcS0+YnVmOworCXN3aXRjaCAobmNtLT5ub3RpZnlfc3RhdGUpIHsKKwljYXNlIE5DTV9OT1RJRllfTk9ORToKKwkJcmV0dXJuOworCisJY2FzZSBOQ01fTk9USUZZX0NPTk5FQ1Q6CisJCWV2ZW50LT5iTm90aWZpY2F0aW9uVHlwZSA9IFVTQl9DRENfTk9USUZZX05FVFdPUktfQ09OTkVDVElPTjsKKwkJaWYgKG5jbS0+aXNfb3BlbikKKwkJCWV2ZW50LT53VmFsdWUgPSBjcHVfdG9fbGUxNigxKTsKKwkJZWxzZQorCQkJZXZlbnQtPndWYWx1ZSA9IGNwdV90b19sZTE2KDApOworCQlldmVudC0+d0xlbmd0aCA9IDA7CisJCXJlcS0+bGVuZ3RoID0gc2l6ZW9mICpldmVudDsKKworCQlEQkcoY2RldiwgIm5vdGlmeSBjb25uZWN0ICVzXG4iLAorCQkJCW5jbS0+aXNfb3BlbiA/ICJ0cnVlIiA6ICJmYWxzZSIpOworCQluY20tPm5vdGlmeV9zdGF0ZSA9IE5DTV9OT1RJRllfTk9ORTsKKwkJYnJlYWs7CisKKwljYXNlIE5DTV9OT1RJRllfU1BFRUQ6CisJCWV2ZW50LT5iTm90aWZpY2F0aW9uVHlwZSA9IFVTQl9DRENfTk9USUZZX1NQRUVEX0NIQU5HRTsKKwkJZXZlbnQtPndWYWx1ZSA9IGNwdV90b19sZTE2KDApOworCQlldmVudC0+d0xlbmd0aCA9IGNwdV90b19sZTE2KDgpOworCQlyZXEtPmxlbmd0aCA9IE5DTV9TVEFUVVNfQllURUNPVU5UOworCisJCS8qIFNQRUVEX0NIQU5HRSBkYXRhIGlzIHVwL2Rvd24gc3BlZWRzIGluIGJpdHMvc2VjICovCisJCWRhdGEgPSByZXEtPmJ1ZiArIHNpemVvZiAqZXZlbnQ7CisJCWRhdGFbMF0gPSBjcHVfdG9fbGUzMihuY21fYml0cmF0ZShjZGV2LT5nYWRnZXQpKTsKKwkJZGF0YVsxXSA9IGRhdGFbMF07CisKKwkJREJHKGNkZXYsICJub3RpZnkgc3BlZWQgJWRcbiIsIG5jbV9iaXRyYXRlKGNkZXYtPmdhZGdldCkpOworCQluY20tPm5vdGlmeV9zdGF0ZSA9IE5DTV9OT1RJRllfQ09OTkVDVDsKKwkJYnJlYWs7CisJfQorCWV2ZW50LT5ibVJlcXVlc3RUeXBlID0gMHhBMTsKKwlldmVudC0+d0luZGV4ID0gY3B1X3RvX2xlMTYobmNtLT5jdHJsX2lkKTsKKworCW5jbS0+bm90aWZ5X3JlcSA9IE5VTEw7CisJLyoKKwkgKiBJbiBkb3VibGUgYnVmZmVyaW5nIGlmIHRoZXJlIGlzIGEgc3BhY2UgaW4gRklGTywKKwkgKiBjb21wbGV0aW9uIGNhbGxiYWNrIGNhbiBiZSBjYWxsZWQgcmlnaHQgYWZ0ZXIgdGhlIGNhbGwsCisJICogc28gdW5sb2NraW5nCisJICovCisJc3Bpbl91bmxvY2soJm5jbS0+bG9jayk7CisJc3RhdHVzID0gdXNiX2VwX3F1ZXVlKG5jbS0+bm90aWZ5LCByZXEsIEdGUF9BVE9NSUMpOworCXNwaW5fbG9jaygmbmNtLT5sb2NrKTsKKwlpZiAoc3RhdHVzIDwgMCkgeworCQluY20tPm5vdGlmeV9yZXEgPSByZXE7CisJCURCRyhjZGV2LCAibm90aWZ5IC0tPiAlZFxuIiwgc3RhdHVzKTsKKwl9Cit9CisKKy8qCisgKiBDb250ZXh0OiBuY20tPmxvY2sgaGVsZAorICovCitzdGF0aWMgdm9pZCBuY21fbm90aWZ5KHN0cnVjdCBmX25jbSAqbmNtKQoreworCS8qCisJICogTk9URSBvbiBtb3N0IHZlcnNpb25zIG9mIExpbnV4LCBob3N0IHNpZGUgY2RjLWV0aGVybmV0CisJICogd29uJ3QgbGlzdGVuIGZvciBub3RpZmljYXRpb25zIHVudGlsIGl0cyBuZXRkZXZpY2Ugb3BlbnMuCisJICogVGhlIGZpcnN0IG5vdGlmaWNhdGlvbiB0aGVuIHNpdHMgaW4gdGhlIEZJRk8gZm9yIGEgbG9uZworCSAqIHRpbWUsIGFuZCB0aGUgc2Vjb25kIG9uZSBpcyBxdWV1ZWQuCisJICoKKwkgKiBJZiBuY21fbm90aWZ5KCkgaXMgY2FsbGVkIGJlZm9yZSB0aGUgc2Vjb25kIChDT05ORUNUKQorCSAqIG5vdGlmaWNhdGlvbiBpcyBzZW50LCB0aGVuIGl0IHdpbGwgcmVzZXQgdG8gc2VuZCB0aGUgU1BFRUQKKwkgKiBub3RpZmljYWlvbiBhZ2FpbiAoYW5kIGFnYWluLCBhbmQgYWdhaW4pLCBidXQgaXQncyBub3QgYSBwcm9ibGVtCisJICovCisJbmNtLT5ub3RpZnlfc3RhdGUgPSBOQ01fTk9USUZZX1NQRUVEOworCW5jbV9kb19ub3RpZnkobmNtKTsKK30KKworc3RhdGljIHZvaWQgbmNtX25vdGlmeV9jb21wbGV0ZShzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IGZfbmNtCQkJKm5jbSA9IHJlcS0+Y29udGV4dDsKKwlzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYJKmNkZXYgPSBuY20tPnBvcnQuZnVuYy5jb25maWctPmNkZXY7CisJc3RydWN0IHVzYl9jZGNfbm90aWZpY2F0aW9uCSpldmVudCA9IHJlcS0+YnVmOworCisJc3Bpbl9sb2NrKCZuY20tPmxvY2spOworCXN3aXRjaCAocmVxLT5zdGF0dXMpIHsKKwljYXNlIDA6CisJCVZEQkcoY2RldiwgIk5vdGlmaWNhdGlvbiAlMDJ4IHNlbnRcbiIsCisJCSAgICAgZXZlbnQtPmJOb3RpZmljYXRpb25UeXBlKTsKKwkJYnJlYWs7CisJY2FzZSAtRUNPTk5SRVNFVDoKKwljYXNlIC1FU0hVVERPV046CisJCW5jbS0+bm90aWZ5X3N0YXRlID0gTkNNX05PVElGWV9OT05FOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlEQkcoY2RldiwgImV2ZW50ICUwMnggLS0+ICVkXG4iLAorCQkJZXZlbnQtPmJOb3RpZmljYXRpb25UeXBlLCByZXEtPnN0YXR1cyk7CisJCWJyZWFrOworCX0KKwluY20tPm5vdGlmeV9yZXEgPSByZXE7CisJbmNtX2RvX25vdGlmeShuY20pOworCXNwaW5fdW5sb2NrKCZuY20tPmxvY2spOworfQorCitzdGF0aWMgdm9pZCBuY21fZXAwb3V0X2NvbXBsZXRlKHN0cnVjdCB1c2JfZXAgKmVwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSkKK3sKKwkvKiBub3cgZm9yIFNFVF9OVEJfSU5QVVRfU0laRSBvbmx5ICovCisJdW5zaWduZWQJCWluX3NpemU7CisJc3RydWN0IHVzYl9mdW5jdGlvbgkqZiA9IHJlcS0+Y29udGV4dDsKKwlzdHJ1Y3QgZl9uY20JCSpuY20gPSBmdW5jX3RvX25jbShmKTsKKwlzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYgPSBlcC0+ZHJpdmVyX2RhdGE7CisKKwlyZXEtPmNvbnRleHQgPSBOVUxMOworCWlmIChyZXEtPnN0YXR1cyB8fCByZXEtPmFjdHVhbCAhPSByZXEtPmxlbmd0aCkgeworCQlEQkcoY2RldiwgIkJhZCBjb250cm9sLU9VVCB0cmFuc2ZlclxuIik7CisJCWdvdG8gaW52YWxpZDsKKwl9CisKKwlpbl9zaXplID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHJlcS0+YnVmKTsKKwlpZiAoaW5fc2l6ZSA8IFVTQl9DRENfTkNNX05UQl9NSU5fSU5fU0laRSB8fAorCSAgICBpbl9zaXplID4gbGUzMl90b19jcHUobnRiX3BhcmFtZXRlcnMuZHdOdGJJbk1heFNpemUpKSB7CisJCURCRyhjZGV2LCAiR290IHdyb25nIElOUFVUIFNJWkUgKCVkKSBmcm9tIGhvc3RcbiIsIGluX3NpemUpOworCQlnb3RvIGludmFsaWQ7CisJfQorCisJbmNtLT5wb3J0LmZpeGVkX2luX2xlbiA9IGluX3NpemU7CisJVkRCRyhjZGV2LCAiU2V0IE5UQiBJTlBVVCBTSVpFICVkXG4iLCBpbl9zaXplKTsKKwlyZXR1cm47CisKK2ludmFsaWQ6CisJdXNiX2VwX3NldF9oYWx0KGVwKTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgbmNtX3NldHVwKHN0cnVjdCB1c2JfZnVuY3Rpb24gKmYsIGNvbnN0IHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmN0cmwpCit7CisJc3RydWN0IGZfbmNtCQkqbmNtID0gZnVuY190b19uY20oZik7CisJc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2ID0gZi0+Y29uZmlnLT5jZGV2OworCXN0cnVjdCB1c2JfcmVxdWVzdAkqcmVxID0gY2Rldi0+cmVxOworCWludAkJCXZhbHVlID0gLUVPUE5PVFNVUFA7CisJdTE2CQkJd19pbmRleCA9IGxlMTZfdG9fY3B1KGN0cmwtPndJbmRleCk7CisJdTE2CQkJd192YWx1ZSA9IGxlMTZfdG9fY3B1KGN0cmwtPndWYWx1ZSk7CisJdTE2CQkJd19sZW5ndGggPSBsZTE2X3RvX2NwdShjdHJsLT53TGVuZ3RoKTsKKworCS8qCisJICogY29tcG9zaXRlIGRyaXZlciBpbmZyYXN0cnVjdHVyZSBoYW5kbGVzIGV2ZXJ5dGhpbmcgZXhjZXB0CisJICogQ0RDIGNsYXNzIG1lc3NhZ2VzOyBpbnRlcmZhY2UgYWN0aXZhdGlvbiB1c2VzIHNldF9hbHQoKS4KKwkgKi8KKwlzd2l0Y2ggKChjdHJsLT5iUmVxdWVzdFR5cGUgPDwgOCkgfCBjdHJsLT5iUmVxdWVzdCkgeworCWNhc2UgKChVU0JfRElSX09VVCB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSkgPDwgOCkKKwkJCXwgVVNCX0NEQ19TRVRfRVRIRVJORVRfUEFDS0VUX0ZJTFRFUjoKKwkJLyoKKwkJICogc2VlIDYuMi4zMDogbm8gZGF0YSwgd0luZGV4ID0gaW50ZXJmYWNlLAorCQkgKiB3VmFsdWUgPSBwYWNrZXQgZmlsdGVyIGJpdG1hcAorCQkgKi8KKwkJaWYgKHdfbGVuZ3RoICE9IDAgfHwgd19pbmRleCAhPSBuY20tPmN0cmxfaWQpCisJCQlnb3RvIGludmFsaWQ7CisJCURCRyhjZGV2LCAicGFja2V0IGZpbHRlciAlMDJ4XG4iLCB3X3ZhbHVlKTsKKwkJLyoKKwkJICogUkVWSVNJVCBsb2NraW5nIG9mIGNkY19maWx0ZXIuICBUaGlzIGFzc3VtZXMgdGhlIFVEQworCQkgKiBkcml2ZXIgd29uJ3QgaGF2ZSBhIGNvbmN1cnJlbnQgcGFja2V0IFRYIGlycSBydW5uaW5nIG9uCisJCSAqIGFub3RoZXIgQ1BVOyBvciB0aGF0IGlmIGl0IGRvZXMsIHRoaXMgd3JpdGUgaXMgYXRvbWljLi4uCisJCSAqLworCQluY20tPnBvcnQuY2RjX2ZpbHRlciA9IHdfdmFsdWU7CisJCXZhbHVlID0gMDsKKwkJYnJlYWs7CisJLyoKKwkgKiBhbmQgb3B0aW9uYWxseToKKwkgKiBjYXNlIFVTQl9DRENfU0VORF9FTkNBUFNVTEFURURfQ09NTUFORDoKKwkgKiBjYXNlIFVTQl9DRENfR0VUX0VOQ0FQU1VMQVRFRF9SRVNQT05TRToKKwkgKiBjYXNlIFVTQl9DRENfU0VUX0VUSEVSTkVUX01VTFRJQ0FTVF9GSUxURVJTOgorCSAqIGNhc2UgVVNCX0NEQ19TRVRfRVRIRVJORVRfUE1fUEFUVEVSTl9GSUxURVI6CisJICogY2FzZSBVU0JfQ0RDX0dFVF9FVEhFUk5FVF9QTV9QQVRURVJOX0ZJTFRFUjoKKwkgKiBjYXNlIFVTQl9DRENfR0VUX0VUSEVSTkVUX1NUQVRJU1RJQzoKKwkgKi8KKworCWNhc2UgKChVU0JfRElSX0lOIHwgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfSU5URVJGQUNFKSA8PCA4KQorCQl8IFVTQl9DRENfR0VUX05UQl9QQVJBTUVURVJTOgorCisJCWlmICh3X2xlbmd0aCA9PSAwIHx8IHdfdmFsdWUgIT0gMCB8fCB3X2luZGV4ICE9IG5jbS0+Y3RybF9pZCkKKwkJCWdvdG8gaW52YWxpZDsKKwkJdmFsdWUgPSB3X2xlbmd0aCA+IHNpemVvZiBudGJfcGFyYW1ldGVycyA/CisJCQlzaXplb2YgbnRiX3BhcmFtZXRlcnMgOiB3X2xlbmd0aDsKKwkJbWVtY3B5KHJlcS0+YnVmLCAmbnRiX3BhcmFtZXRlcnMsIHZhbHVlKTsKKwkJVkRCRyhjZGV2LCAiSG9zdCBhc2tlZCBOVEIgcGFyYW1ldGVyc1xuIik7CisJCWJyZWFrOworCisJY2FzZSAoKFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UpIDw8IDgpCisJCXwgVVNCX0NEQ19HRVRfTlRCX0lOUFVUX1NJWkU6CisKKwkJaWYgKHdfbGVuZ3RoIDwgNCB8fCB3X3ZhbHVlICE9IDAgfHwgd19pbmRleCAhPSBuY20tPmN0cmxfaWQpCisJCQlnb3RvIGludmFsaWQ7CisJCXB1dF91bmFsaWduZWRfbGUzMihuY20tPnBvcnQuZml4ZWRfaW5fbGVuLCByZXEtPmJ1Zik7CisJCXZhbHVlID0gNDsKKwkJVkRCRyhjZGV2LCAiSG9zdCBhc2tlZCBJTlBVVCBTSVpFLCBzZW5kaW5nICVkXG4iLAorCQkgICAgIG5jbS0+cG9ydC5maXhlZF9pbl9sZW4pOworCQlicmVhazsKKworCWNhc2UgKChVU0JfRElSX09VVCB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSkgPDwgOCkKKwkJfCBVU0JfQ0RDX1NFVF9OVEJfSU5QVVRfU0laRToKKwl7CisJCWlmICh3X2xlbmd0aCAhPSA0IHx8IHdfdmFsdWUgIT0gMCB8fCB3X2luZGV4ICE9IG5jbS0+Y3RybF9pZCkKKwkJCWdvdG8gaW52YWxpZDsKKwkJcmVxLT5jb21wbGV0ZSA9IG5jbV9lcDBvdXRfY29tcGxldGU7CisJCXJlcS0+bGVuZ3RoID0gd19sZW5ndGg7CisJCXJlcS0+Y29udGV4dCA9IGY7CisKKwkJdmFsdWUgPSByZXEtPmxlbmd0aDsKKwkJYnJlYWs7CisJfQorCisJY2FzZSAoKFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UpIDw8IDgpCisJCXwgVVNCX0NEQ19HRVRfTlRCX0ZPUk1BVDoKKwl7CisJCXVpbnQxNl90IGZvcm1hdDsKKworCQlpZiAod19sZW5ndGggPCAyIHx8IHdfdmFsdWUgIT0gMCB8fCB3X2luZGV4ICE9IG5jbS0+Y3RybF9pZCkKKwkJCWdvdG8gaW52YWxpZDsKKwkJZm9ybWF0ID0gKG5jbS0+cGFyc2VyX29wdHMgPT0gJm5kcDE2X29wdHMpID8gMHgwMDAwIDogMHgwMDAxOworCQlwdXRfdW5hbGlnbmVkX2xlMTYoZm9ybWF0LCByZXEtPmJ1Zik7CisJCXZhbHVlID0gMjsKKwkJVkRCRyhjZGV2LCAiSG9zdCBhc2tlZCBOVEIgRk9STUFULCBzZW5kaW5nICVkXG4iLCBmb3JtYXQpOworCQlicmVhazsKKwl9CisKKwljYXNlICgoVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UpIDw8IDgpCisJCXwgVVNCX0NEQ19TRVRfTlRCX0ZPUk1BVDoKKwl7CisJCWlmICh3X2xlbmd0aCAhPSAwIHx8IHdfaW5kZXggIT0gbmNtLT5jdHJsX2lkKQorCQkJZ290byBpbnZhbGlkOworCQlzd2l0Y2ggKHdfdmFsdWUpIHsKKwkJY2FzZSAweDAwMDA6CisJCQluY20tPnBhcnNlcl9vcHRzID0gJm5kcDE2X29wdHM7CisJCQlEQkcoY2RldiwgIk5DTTE2IHNlbGVjdGVkXG4iKTsKKwkJCWJyZWFrOworCQljYXNlIDB4MDAwMToKKwkJCW5jbS0+cGFyc2VyX29wdHMgPSAmbmRwMzJfb3B0czsKKwkJCURCRyhjZGV2LCAiTkNNMzIgc2VsZWN0ZWRcbiIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlnb3RvIGludmFsaWQ7CisJCX0KKwkJdmFsdWUgPSAwOworCQlicmVhazsKKwl9CisJY2FzZSAoKFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UpIDw8IDgpCisJCXwgVVNCX0NEQ19HRVRfQ1JDX01PREU6CisJeworCQl1aW50MTZfdCBpc19jcmM7CisKKwkJaWYgKHdfbGVuZ3RoIDwgMiB8fCB3X3ZhbHVlICE9IDAgfHwgd19pbmRleCAhPSBuY20tPmN0cmxfaWQpCisJCQlnb3RvIGludmFsaWQ7CisJCWlzX2NyYyA9IG5jbS0+aXNfY3JjID8gMHgwMDAxIDogMHgwMDAwOworCQlwdXRfdW5hbGlnbmVkX2xlMTYoaXNfY3JjLCByZXEtPmJ1Zik7CisJCXZhbHVlID0gMjsKKwkJVkRCRyhjZGV2LCAiSG9zdCBhc2tlZCBDUkMgTU9ERSwgc2VuZGluZyAlZFxuIiwgaXNfY3JjKTsKKwkJYnJlYWs7CisJfQorCisJY2FzZSAoKFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfSU5URVJGQUNFKSA8PCA4KQorCQl8IFVTQl9DRENfU0VUX0NSQ19NT0RFOgorCXsKKwkJaW50IG5kcF9oZHJfY3JjID0gMDsKKworCQlpZiAod19sZW5ndGggIT0gMCB8fCB3X2luZGV4ICE9IG5jbS0+Y3RybF9pZCkKKwkJCWdvdG8gaW52YWxpZDsKKwkJc3dpdGNoICh3X3ZhbHVlKSB7CisJCWNhc2UgMHgwMDAwOgorCQkJbmNtLT5pc19jcmMgPSBmYWxzZTsKKwkJCW5kcF9oZHJfY3JjID0gTkNNX05EUF9IRFJfTk9DUkM7CisJCQlEQkcoY2RldiwgIm5vbi1DUkMgbW9kZSBzZWxlY3RlZFxuIik7CisJCQlicmVhazsKKwkJY2FzZSAweDAwMDE6CisJCQluY20tPmlzX2NyYyA9IHRydWU7CisJCQluZHBfaGRyX2NyYyA9IE5DTV9ORFBfSERSX0NSQzsKKwkJCURCRyhjZGV2LCAiQ1JDIG1vZGUgc2VsZWN0ZWRcbiIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlnb3RvIGludmFsaWQ7CisJCX0KKwkJbmNtLT5wYXJzZXJfb3B0cy0+bmRwX3NpZ24gJj0gfk5DTV9ORFBfSERSX0NSQ19NQVNLOworCQluY20tPnBhcnNlcl9vcHRzLT5uZHBfc2lnbiB8PSBuZHBfaGRyX2NyYzsKKwkJdmFsdWUgPSAwOworCQlicmVhazsKKwl9CisKKwkvKiBhbmQgZGlzYWJsZWQgaW4gbmNtIGRlc2NyaXB0b3I6ICovCisJLyogY2FzZSBVU0JfQ0RDX0dFVF9ORVRfQUREUkVTUzogKi8KKwkvKiBjYXNlIFVTQl9DRENfU0VUX05FVF9BRERSRVNTOiAqLworCS8qIGNhc2UgVVNCX0NEQ19HRVRfTUFYX0RBVEFHUkFNX1NJWkU6ICovCisJLyogY2FzZSBVU0JfQ0RDX1NFVF9NQVhfREFUQUdSQU1fU0laRTogKi8KKworCWRlZmF1bHQ6CitpbnZhbGlkOgorCQlEQkcoY2RldiwgImludmFsaWQgY29udHJvbCByZXElMDJ4LiUwMnggdiUwNHggaSUwNHggbCVkXG4iLAorCQkJY3RybC0+YlJlcXVlc3RUeXBlLCBjdHJsLT5iUmVxdWVzdCwKKwkJCXdfdmFsdWUsIHdfaW5kZXgsIHdfbGVuZ3RoKTsKKwl9CisKKwkvKiByZXNwb25kIHdpdGggZGF0YSB0cmFuc2ZlciBvciBzdGF0dXMgcGhhc2U/ICovCisJaWYgKHZhbHVlID49IDApIHsKKwkJREJHKGNkZXYsICJuY20gcmVxJTAyeC4lMDJ4IHYlMDR4IGklMDR4IGwlZFxuIiwKKwkJCWN0cmwtPmJSZXF1ZXN0VHlwZSwgY3RybC0+YlJlcXVlc3QsCisJCQl3X3ZhbHVlLCB3X2luZGV4LCB3X2xlbmd0aCk7CisJCXJlcS0+emVybyA9IDA7CisJCXJlcS0+bGVuZ3RoID0gdmFsdWU7CisJCXZhbHVlID0gdXNiX2VwX3F1ZXVlKGNkZXYtPmdhZGdldC0+ZXAwLCByZXEsIEdGUF9BVE9NSUMpOworCQlpZiAodmFsdWUgPCAwKQorCQkJRVJST1IoY2RldiwgIm5jbSByZXEgJTAyeC4lMDJ4IHJlc3BvbnNlIGVyciAlZFxuIiwKKwkJCQkJY3RybC0+YlJlcXVlc3RUeXBlLCBjdHJsLT5iUmVxdWVzdCwKKwkJCQkJdmFsdWUpOworCX0KKworCS8qIGRldmljZSBlaXRoZXIgc3RhbGxzICh2YWx1ZSA8IDApIG9yIHJlcG9ydHMgc3VjY2VzcyAqLworCXJldHVybiB2YWx1ZTsKK30KKworCitzdGF0aWMgaW50IG5jbV9zZXRfYWx0KHN0cnVjdCB1c2JfZnVuY3Rpb24gKmYsIHVuc2lnbmVkIGludGYsIHVuc2lnbmVkIGFsdCkKK3sKKwlzdHJ1Y3QgZl9uY20JCSpuY20gPSBmdW5jX3RvX25jbShmKTsKKwlzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYgPSBmLT5jb25maWctPmNkZXY7CisKKwkvKiBDb250cm9sIGludGVyZmFjZSBoYXMgb25seSBhbHRzZXR0aW5nIDAgKi8KKwlpZiAoaW50ZiA9PSBuY20tPmN0cmxfaWQpIHsKKwkJaWYgKGFsdCAhPSAwKQorCQkJZ290byBmYWlsOworCisJCWlmIChuY20tPm5vdGlmeS0+ZHJpdmVyX2RhdGEpIHsKKwkJCURCRyhjZGV2LCAicmVzZXQgbmNtIGNvbnRyb2wgJWRcbiIsIGludGYpOworCQkJdXNiX2VwX2Rpc2FibGUobmNtLT5ub3RpZnkpOworCQl9IGVsc2UgeworCQkJREJHKGNkZXYsICJpbml0IG5jbSBjdHJsICVkXG4iLCBpbnRmKTsKKwkJCW5jbS0+bm90aWZ5X2Rlc2MgPSBlcF9jaG9vc2UoY2Rldi0+Z2FkZ2V0LAorCQkJCQluY20tPmhzLm5vdGlmeSwKKwkJCQkJbmNtLT5mcy5ub3RpZnkpOworCQl9CisJCXVzYl9lcF9lbmFibGUobmNtLT5ub3RpZnksIG5jbS0+bm90aWZ5X2Rlc2MpOworCQluY20tPm5vdGlmeS0+ZHJpdmVyX2RhdGEgPSBuY207CisKKwkvKiBEYXRhIGludGVyZmFjZSBoYXMgdHdvIGFsdHNldHRpbmdzLCAwIGFuZCAxICovCisJfSBlbHNlIGlmIChpbnRmID09IG5jbS0+ZGF0YV9pZCkgeworCQlpZiAoYWx0ID4gMSkKKwkJCWdvdG8gZmFpbDsKKworCQlpZiAobmNtLT5wb3J0LmluX2VwLT5kcml2ZXJfZGF0YSkgeworCQkJREJHKGNkZXYsICJyZXNldCBuY21cbiIpOworCQkJZ2V0aGVyX2Rpc2Nvbm5lY3QoJm5jbS0+cG9ydCk7CisJCQluY21fcmVzZXRfdmFsdWVzKG5jbSk7CisJCX0KKworCQkvKgorCQkgKiBDREMgTmV0d29yayBvbmx5IHNlbmRzIGRhdGEgaW4gbm9uLWRlZmF1bHQgYWx0c2V0dGluZ3MuCisJCSAqIENoYW5naW5nIGFsdHNldHRpbmdzIHJlc2V0cyBmaWx0ZXJzLCBzdGF0aXN0aWNzLCBldGMuCisJCSAqLworCQlpZiAoYWx0ID09IDEpIHsKKwkJCXN0cnVjdCBuZXRfZGV2aWNlCSpuZXQ7CisKKwkJCWlmICghbmNtLT5wb3J0LmluKSB7CisJCQkJREJHKGNkZXYsICJpbml0IG5jbVxuIik7CisJCQkJbmNtLT5wb3J0LmluID0gZXBfY2hvb3NlKGNkZXYtPmdhZGdldCwKKwkJCQkJCQkgbmNtLT5ocy5pbiwKKwkJCQkJCQkgbmNtLT5mcy5pbik7CisJCQkJbmNtLT5wb3J0Lm91dCA9IGVwX2Nob29zZShjZGV2LT5nYWRnZXQsCisJCQkJCQkJICBuY20tPmhzLm91dCwKKwkJCQkJCQkgIG5jbS0+ZnMub3V0KTsKKwkJCX0KKworCQkJLyogVE9ETyAqLworCQkJLyogRW5hYmxlIHpscHMgYnkgZGVmYXVsdCBmb3IgTkNNIGNvbmZvcm1hbmNlOworCQkJICogb3ZlcnJpZGUgZm9yIG11c2JfaGRyYyAoYXZvaWRzIHR4ZG1hIG92aGVhZCkKKwkJCSAqLworCQkJbmNtLT5wb3J0LmlzX3pscF9vayA9ICEoCisJCQkJZ2FkZ2V0X2lzX211c2JoZHJjKGNkZXYtPmdhZGdldCkKKwkJCQkpOworCQkJbmNtLT5wb3J0LmNkY19maWx0ZXIgPSBERUZBVUxUX0ZJTFRFUjsKKwkJCURCRyhjZGV2LCAiYWN0aXZhdGUgbmNtXG4iKTsKKwkJCW5ldCA9IGdldGhlcl9jb25uZWN0KCZuY20tPnBvcnQpOworCQkJaWYgKElTX0VSUihuZXQpKQorCQkJCXJldHVybiBQVFJfRVJSKG5ldCk7CisJCX0KKworCQlzcGluX2xvY2soJm5jbS0+bG9jayk7CisJCW5jbV9ub3RpZnkobmNtKTsKKwkJc3Bpbl91bmxvY2soJm5jbS0+bG9jayk7CisJfSBlbHNlCisJCWdvdG8gZmFpbDsKKworCXJldHVybiAwOworZmFpbDoKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyoKKyAqIEJlY2F1c2UgdGhlIGRhdGEgaW50ZXJmYWNlIHN1cHBvcnRzIG11bHRpcGxlIGFsdHNldHRpbmdzLAorICogdGhpcyBOQ00gZnVuY3Rpb24gKk1VU1QqIGltcGxlbWVudCBhIGdldF9hbHQoKSBtZXRob2QuCisgKi8KK3N0YXRpYyBpbnQgbmNtX2dldF9hbHQoc3RydWN0IHVzYl9mdW5jdGlvbiAqZiwgdW5zaWduZWQgaW50ZikKK3sKKwlzdHJ1Y3QgZl9uY20JCSpuY20gPSBmdW5jX3RvX25jbShmKTsKKworCWlmIChpbnRmID09IG5jbS0+Y3RybF9pZCkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIG5jbS0+cG9ydC5pbl9lcC0+ZHJpdmVyX2RhdGEgPyAxIDogMDsKK30KKworc3RhdGljIHN0cnVjdCBza19idWZmICpuY21fd3JhcF9udGIoc3RydWN0IGdldGhlciAqcG9ydCwKKwkJCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgZl9uY20JKm5jbSA9IGZ1bmNfdG9fbmNtKCZwb3J0LT5mdW5jKTsKKwlzdHJ1Y3Qgc2tfYnVmZgkqc2tiMjsKKwlpbnQJCW5jYl9sZW4gPSAwOworCV9fbGUxNgkJKnRtcDsKKwlpbnQJCWRpdiA9IG50Yl9wYXJhbWV0ZXJzLndOZHBJbkRpdmlzb3I7CisJaW50CQlyZW0gPSBudGJfcGFyYW1ldGVycy53TmRwSW5QYXlsb2FkUmVtYWluZGVyOworCWludAkJcGFkOworCWludAkJbmRwX2FsaWduID0gbnRiX3BhcmFtZXRlcnMud05kcEluQWxpZ25tZW50OworCWludAkJbmRwX3BhZDsKKwl1bnNpZ25lZAltYXhfc2l6ZSA9IG5jbS0+cG9ydC5maXhlZF9pbl9sZW47CisJc3RydWN0IG5kcF9wYXJzZXJfb3B0cyAqb3B0cyA9IG5jbS0+cGFyc2VyX29wdHM7CisJdW5zaWduZWQJY3JjX2xlbiA9IG5jbS0+aXNfY3JjID8gc2l6ZW9mKHVpbnQzMl90KSA6IDA7CisKKwluY2JfbGVuICs9IG9wdHMtPm50aF9zaXplOworCW5kcF9wYWQgPSBBTElHTihuY2JfbGVuLCBuZHBfYWxpZ24pIC0gbmNiX2xlbjsKKwluY2JfbGVuICs9IG5kcF9wYWQ7CisJbmNiX2xlbiArPSBvcHRzLT5uZHBfc2l6ZTsKKwluY2JfbGVuICs9IDIgKiAyICogb3B0cy0+ZGdyYW1faXRlbV9sZW47IC8qIERhdGFncmFtIGVudHJ5ICovCisJbmNiX2xlbiArPSAyICogMiAqIG9wdHMtPmRncmFtX2l0ZW1fbGVuOyAvKiBaZXJvIGRhdGFncmFtIGVudHJ5ICovCisJcGFkID0gQUxJR04obmNiX2xlbiwgZGl2KSArIHJlbSAtIG5jYl9sZW47CisJbmNiX2xlbiArPSBwYWQ7CisKKwlpZiAobmNiX2xlbiArIHNrYi0+bGVuICsgY3JjX2xlbiA+IG1heF9zaXplKSB7CisJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJCXJldHVybiBOVUxMOworCX0KKworCXNrYjIgPSBza2JfY29weV9leHBhbmQoc2tiLCBuY2JfbGVuLAorCQkJICAgICAgIG1heF9zaXplIC0gc2tiLT5sZW4gLSBuY2JfbGVuIC0gY3JjX2xlbiwKKwkJCSAgICAgICBHRlBfQVRPTUlDKTsKKwlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCWlmICghc2tiMikKKwkJcmV0dXJuIE5VTEw7CisKKwlza2IgPSBza2IyOworCisJdG1wID0gKHZvaWQgKikgc2tiX3B1c2goc2tiLCBuY2JfbGVuKTsKKwltZW1zZXQodG1wLCAwLCBuY2JfbGVuKTsKKworCXB1dF91bmFsaWduZWRfbGUzMihvcHRzLT5udGhfc2lnbiwgdG1wKTsgLyogZHdTaWduYXR1cmUgKi8KKwl0bXAgKz0gMjsKKwkvKiB3SGVhZGVyTGVuZ3RoICovCisJcHV0X3VuYWxpZ25lZF9sZTE2KG9wdHMtPm50aF9zaXplLCB0bXArKyk7CisJdG1wKys7IC8qIHNraXAgd1NlcXVlbmNlICovCisJcHV0X25jbSgmdG1wLCBvcHRzLT5ibG9ja19sZW5ndGgsIHNrYi0+bGVuKTsgLyogKGQpd0Jsb2NrTGVuZ3RoICovCisJLyogKGQpd0ZwSW5kZXggKi8KKwkvKiB0aGUgZmlyc3QgcG9pbnRlciBpcyByaWdodCBhZnRlciB0aGUgTlRIICsgYWxpZ24gKi8KKwlwdXRfbmNtKCZ0bXAsIG9wdHMtPmZwX2luZGV4LCBvcHRzLT5udGhfc2l6ZSArIG5kcF9wYWQpOworCisJdG1wID0gKHZvaWQgKil0bXAgKyBuZHBfcGFkOworCisJLyogTkRQICovCisJcHV0X3VuYWxpZ25lZF9sZTMyKG9wdHMtPm5kcF9zaWduLCB0bXApOyAvKiBkd1NpZ25hdHVyZSAqLworCXRtcCArPSAyOworCS8qIHdMZW5ndGggKi8KKwlwdXRfdW5hbGlnbmVkX2xlMTYobmNiX2xlbiAtIG9wdHMtPm50aF9zaXplIC0gcGFkLCB0bXArKyk7CisKKwl0bXAgKz0gb3B0cy0+cmVzZXJ2ZWQxOworCXRtcCArPSBvcHRzLT5uZXh0X2ZwX2luZGV4OyAvKiBza2lwIHJlc2VydmVkIChkKXdOZXh0RnBJbmRleCAqLworCXRtcCArPSBvcHRzLT5yZXNlcnZlZDI7CisKKwlpZiAobmNtLT5pc19jcmMpIHsKKwkJdWludDMyX3QgY3JjOworCisJCWNyYyA9IH5jcmMzMl9sZSh+MCwKKwkJCQlza2ItPmRhdGEgKyBuY2JfbGVuLAorCQkJCXNrYi0+bGVuIC0gbmNiX2xlbik7CisJCXB1dF91bmFsaWduZWRfbGUzMihjcmMsIHNrYi0+ZGF0YSArIHNrYi0+bGVuKTsKKwkJc2tiX3B1dChza2IsIGNyY19sZW4pOworCX0KKworCS8qIChkKXdEYXRhZ3JhbUluZGV4WzBdICovCisJcHV0X25jbSgmdG1wLCBvcHRzLT5kZ3JhbV9pdGVtX2xlbiwgbmNiX2xlbik7CisJLyogKGQpd0RhdGFncmFtTGVuZ3RoWzBdICovCisJcHV0X25jbSgmdG1wLCBvcHRzLT5kZ3JhbV9pdGVtX2xlbiwgc2tiLT5sZW4gLSBuY2JfbGVuKTsKKwkvKiAoZCl3RGF0YWdyYW1JbmRleFsxXSBhbmQgIChkKXdEYXRhZ3JhbUxlbmd0aFsxXSBhbHJlYWR5IHplcm9lZCAqLworCisJaWYgKHNrYi0+bGVuID4gTUFYX1RYX05PTkZJWEVEKQorCQltZW1zZXQoc2tiX3B1dChza2IsIG1heF9zaXplIC0gc2tiLT5sZW4pLAorCQkgICAgICAgMCwgbWF4X3NpemUgLSBza2ItPmxlbik7CisKKwlyZXR1cm4gc2tiOworfQorCitzdGF0aWMgaW50IG5jbV91bndyYXBfbnRiKHN0cnVjdCBnZXRoZXIgKnBvcnQsCisJCQkgIHN0cnVjdCBza19idWZmICpza2IsCisJCQkgIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QpCit7CisJc3RydWN0IGZfbmNtCSpuY20gPSBmdW5jX3RvX25jbSgmcG9ydC0+ZnVuYyk7CisJX19sZTE2CQkqdG1wID0gKHZvaWQgKikgc2tiLT5kYXRhOworCXVuc2lnbmVkCWluZGV4LCBpbmRleDI7CisJdW5zaWduZWQJZGdfbGVuLCBkZ19sZW4yOworCXVuc2lnbmVkCW5kcF9sZW47CisJc3RydWN0IHNrX2J1ZmYJKnNrYjI7CisJaW50CQlyZXQgPSAtRUlOVkFMOworCXVuc2lnbmVkCW1heF9zaXplID0gbGUzMl90b19jcHUobnRiX3BhcmFtZXRlcnMuZHdOdGJPdXRNYXhTaXplKTsKKwlzdHJ1Y3QgbmRwX3BhcnNlcl9vcHRzICpvcHRzID0gbmNtLT5wYXJzZXJfb3B0czsKKwl1bnNpZ25lZAljcmNfbGVuID0gbmNtLT5pc19jcmMgPyBzaXplb2YodWludDMyX3QpIDogMDsKKwlpbnQJCWRncmFtX2NvdW50ZXI7CisKKwkvKiBkd1NpZ25hdHVyZSAqLworCWlmIChnZXRfdW5hbGlnbmVkX2xlMzIodG1wKSAhPSBvcHRzLT5udGhfc2lnbikgeworCQlJTkZPKHBvcnQtPmZ1bmMuY29uZmlnLT5jZGV2LCAiV3JvbmcgTlRIIFNJR04sIHNrYmxlbiAlZFxuIiwKKwkJCXNrYi0+bGVuKTsKKwkJcHJpbnRfaGV4X2R1bXAoS0VSTl9JTkZPLCAiSEVBRDoiLCBEVU1QX1BSRUZJWF9BRERSRVNTLCAzMiwgMSwKKwkJCSAgICAgICBza2ItPmRhdGEsIDMyLCBmYWxzZSk7CisKKwkJZ290byBlcnI7CisJfQorCXRtcCArPSAyOworCS8qIHdIZWFkZXJMZW5ndGggKi8KKwlpZiAoZ2V0X3VuYWxpZ25lZF9sZTE2KHRtcCsrKSAhPSBvcHRzLT5udGhfc2l6ZSkgeworCQlJTkZPKHBvcnQtPmZ1bmMuY29uZmlnLT5jZGV2LCAiV3JvbmcgTlRCIGhlYWRlcnNpemVcbiIpOworCQlnb3RvIGVycjsKKwl9CisJdG1wKys7IC8qIHNraXAgd1NlcXVlbmNlICovCisKKwkvKiAoZCl3QmxvY2tMZW5ndGggKi8KKwlpZiAoZ2V0X25jbSgmdG1wLCBvcHRzLT5ibG9ja19sZW5ndGgpID4gbWF4X3NpemUpIHsKKwkJSU5GTyhwb3J0LT5mdW5jLmNvbmZpZy0+Y2RldiwgIk9VVCBzaXplIGV4Y2VlZGVkXG4iKTsKKwkJZ290byBlcnI7CisJfQorCisJaW5kZXggPSBnZXRfbmNtKCZ0bXAsIG9wdHMtPmZwX2luZGV4KTsKKwkvKiBOQ00gMy4yICovCisJaWYgKCgoaW5kZXggJSA0KSAhPSAwKSAmJiAoaW5kZXggPCBvcHRzLT5udGhfc2l6ZSkpIHsKKwkJSU5GTyhwb3J0LT5mdW5jLmNvbmZpZy0+Y2RldiwgIkJhZCBpbmRleDogJXhcbiIsCisJCQlpbmRleCk7CisJCWdvdG8gZXJyOworCX0KKworCS8qIHdhbGsgdGhyb3VnaCBORFAgKi8KKwl0bXAgPSAoKHZvaWQgKilza2ItPmRhdGEpICsgaW5kZXg7CisJaWYgKGdldF91bmFsaWduZWRfbGUzMih0bXApICE9IG9wdHMtPm5kcF9zaWduKSB7CisJCUlORk8ocG9ydC0+ZnVuYy5jb25maWctPmNkZXYsICJXcm9uZyBORFAgU0lHTlxuIik7CisJCWdvdG8gZXJyOworCX0KKwl0bXAgKz0gMjsKKworCW5kcF9sZW4gPSBnZXRfdW5hbGlnbmVkX2xlMTYodG1wKyspOworCS8qCisJICogTkNNIDMuMy4xCisJICogZW50cnkgaXMgMiBpdGVtcworCSAqIGl0ZW0gc2l6ZSBpcyAxNi8zMiBiaXRzLCBvcHRzLT5kZ3JhbV9pdGVtX2xlbiAqIDIgYnl0ZXMKKwkgKiBtaW5pbWFsOiBzdHJ1Y3QgdXNiX2NkY19uY21fbmRwWCArIG5vcm1hbCBlbnRyeSArIHplcm8gZW50cnkKKwkgKi8KKwlpZiAoKG5kcF9sZW4gPCBvcHRzLT5uZHBfc2l6ZSArIDIgKiAyICogKG9wdHMtPmRncmFtX2l0ZW1fbGVuICogMikpCisJICAgIHx8IChuZHBfbGVuICUgb3B0cy0+bmRwbGVuX2FsaWduICE9IDApKSB7CisJCUlORk8ocG9ydC0+ZnVuYy5jb25maWctPmNkZXYsICJCYWQgTkRQIGxlbmd0aDogJXhcbiIsIG5kcF9sZW4pOworCQlnb3RvIGVycjsKKwl9CisJdG1wICs9IG9wdHMtPnJlc2VydmVkMTsKKwl0bXAgKz0gb3B0cy0+bmV4dF9mcF9pbmRleDsgLyogc2tpcCByZXNlcnZlZCAoZCl3TmV4dEZwSW5kZXggKi8KKwl0bXAgKz0gb3B0cy0+cmVzZXJ2ZWQyOworCisJbmRwX2xlbiAtPSBvcHRzLT5uZHBfc2l6ZTsKKwlpbmRleDIgPSBnZXRfbmNtKCZ0bXAsIG9wdHMtPmRncmFtX2l0ZW1fbGVuKTsKKwlkZ19sZW4yID0gZ2V0X25jbSgmdG1wLCBvcHRzLT5kZ3JhbV9pdGVtX2xlbik7CisJZGdyYW1fY291bnRlciA9IDA7CisKKwlkbyB7CisJCWluZGV4ID0gaW5kZXgyOworCQlkZ19sZW4gPSBkZ19sZW4yOworCQlpZiAoZGdfbGVuIDwgMTQgKyBjcmNfbGVuKSB7IC8qIGV0aGVybmV0IGhlYWRlciArIGNyYyAqLworCQkJSU5GTyhwb3J0LT5mdW5jLmNvbmZpZy0+Y2RldiwgIkJhZCBkZ3JhbSBsZW5ndGg6ICV4XG4iLAorCQkJICAgICBkZ19sZW4pOworCQkJZ290byBlcnI7CisJCX0KKwkJaWYgKG5jbS0+aXNfY3JjKSB7CisJCQl1aW50MzJfdCBjcmMsIGNyYzI7CisKKwkJCWNyYyA9IGdldF91bmFsaWduZWRfbGUzMihza2ItPmRhdGEgKworCQkJCQkJIGluZGV4ICsgZGdfbGVuIC0gY3JjX2xlbik7CisJCQljcmMyID0gfmNyYzMyX2xlKH4wLAorCQkJCQkgc2tiLT5kYXRhICsgaW5kZXgsCisJCQkJCSBkZ19sZW4gLSBjcmNfbGVuKTsKKwkJCWlmIChjcmMgIT0gY3JjMikgeworCQkJCUlORk8ocG9ydC0+ZnVuYy5jb25maWctPmNkZXYsICJCYWQgQ1JDXG4iKTsKKwkJCQlnb3RvIGVycjsKKwkJCX0KKwkJfQorCisJCWluZGV4MiA9IGdldF9uY20oJnRtcCwgb3B0cy0+ZGdyYW1faXRlbV9sZW4pOworCQlkZ19sZW4yID0gZ2V0X25jbSgmdG1wLCBvcHRzLT5kZ3JhbV9pdGVtX2xlbik7CisKKwkJaWYgKGluZGV4MiA9PSAwIHx8IGRnX2xlbjIgPT0gMCkgeworCQkJc2tiMiA9IHNrYjsKKwkJfSBlbHNlIHsKKwkJCXNrYjIgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTsKKwkJCWlmIChza2IyID09IE5VTEwpCisJCQkJZ290byBlcnI7CisJCX0KKworCQlpZiAoIXNrYl9wdWxsKHNrYjIsIGluZGV4KSkgeworCQkJcmV0ID0gLUVPVkVSRkxPVzsKKwkJCWdvdG8gZXJyOworCQl9CisKKwkJc2tiX3RyaW0oc2tiMiwgZGdfbGVuIC0gY3JjX2xlbik7CisJCXNrYl9xdWV1ZV90YWlsKGxpc3QsIHNrYjIpOworCisJCW5kcF9sZW4gLT0gMiAqIChvcHRzLT5kZ3JhbV9pdGVtX2xlbiAqIDIpOworCisJCWRncmFtX2NvdW50ZXIrKzsKKworCQlpZiAoaW5kZXgyID09IDAgfHwgZGdfbGVuMiA9PSAwKQorCQkJYnJlYWs7CisJfSB3aGlsZSAobmRwX2xlbiA+IDIgKiAob3B0cy0+ZGdyYW1faXRlbV9sZW4gKiAyKSk7IC8qIHplcm8gZW50cnkgKi8KKworCVZEQkcocG9ydC0+ZnVuYy5jb25maWctPmNkZXYsCisJICAgICAiUGFyc2VkIE5UQiB3aXRoICVkIGZyYW1lc1xuIiwgZGdyYW1fY291bnRlcik7CisJcmV0dXJuIDA7CitlcnI6CisJc2tiX3F1ZXVlX3B1cmdlKGxpc3QpOworCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgbmNtX2Rpc2FibGUoc3RydWN0IHVzYl9mdW5jdGlvbiAqZikKK3sKKwlzdHJ1Y3QgZl9uY20JCSpuY20gPSBmdW5jX3RvX25jbShmKTsKKwlzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYgPSBmLT5jb25maWctPmNkZXY7CisKKwlEQkcoY2RldiwgIm5jbSBkZWFjdGl2YXRlZFxuIik7CisKKwlpZiAobmNtLT5wb3J0LmluX2VwLT5kcml2ZXJfZGF0YSkKKwkJZ2V0aGVyX2Rpc2Nvbm5lY3QoJm5jbS0+cG9ydCk7CisKKwlpZiAobmNtLT5ub3RpZnktPmRyaXZlcl9kYXRhKSB7CisJCXVzYl9lcF9kaXNhYmxlKG5jbS0+bm90aWZ5KTsKKwkJbmNtLT5ub3RpZnktPmRyaXZlcl9kYXRhID0gTlVMTDsKKwkJbmNtLT5ub3RpZnlfZGVzYyA9IE5VTEw7CisJfQorfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogQ2FsbGJhY2tzIGxldCB1cyBub3RpZnkgdGhlIGhvc3QgYWJvdXQgY29ubmVjdC9kaXNjb25uZWN0IHdoZW4gdGhlCisgKiBuZXQgZGV2aWNlIGlzIG9wZW5lZCBvciBjbG9zZWQuCisgKgorICogRm9yIHRlc3RpbmcsIG5vdGUgdGhhdCBsaW5rIHN0YXRlcyBvbiB0aGlzIHNpZGUgaW5jbHVkZSBib3RoIG9wZW5lZAorICogYW5kIGNsb3NlZCB2YXJpYW50cyBvZjoKKyAqCisgKiAgIC0gZGlzY29ubmVjdGVkL3VuY29uZmlndXJlZAorICogICAtIGNvbmZpZ3VyZWQgYnV0IGluYWN0aXZlIChkYXRhIGFsdCAwKQorICogICAtIGNvbmZpZ3VyZWQgYW5kIGFjdGl2ZSAoZGF0YSBhbHQgMSkKKyAqCisgKiBFYWNoIG5lZWRzIHRvIGJlIHRlc3RlZCB3aXRoIHVucGx1Zywgcm1tb2QsIFNFVF9DT05GSUdVUkFUSU9OLCBhbmQKKyAqIFNFVF9JTlRFUkZBQ0UgKGFsdHNldHRpbmcpLiAgUmVtZW1iZXIgYWxzbyB0aGF0ICJjb25maWd1cmVkIiBkb2Vzbid0CisgKiBpbXBseSB0aGUgaG9zdCBpcyBhY3R1YWxseSBwb2xsaW5nIHRoZSBub3RpZmljYXRpb24gZW5kcG9pbnQsIGFuZAorICogbGlrZXdpc2UgdGhhdCAiYWN0aXZlIiBkb2Vzbid0IGltcGx5IGl0J3MgYWN0dWFsbHkgdXNpbmcgdGhlIGRhdGEKKyAqIGVuZHBvaW50cyBmb3IgdHJhZmZpYy4KKyAqLworCitzdGF0aWMgdm9pZCBuY21fb3BlbihzdHJ1Y3QgZ2V0aGVyICpnZXRoKQoreworCXN0cnVjdCBmX25jbQkJKm5jbSA9IGZ1bmNfdG9fbmNtKCZnZXRoLT5mdW5jKTsKKworCURCRyhuY20tPnBvcnQuZnVuYy5jb25maWctPmNkZXYsICIlc1xuIiwgX19mdW5jX18pOworCisJc3Bpbl9sb2NrKCZuY20tPmxvY2spOworCW5jbS0+aXNfb3BlbiA9IHRydWU7CisJbmNtX25vdGlmeShuY20pOworCXNwaW5fdW5sb2NrKCZuY20tPmxvY2spOworfQorCitzdGF0aWMgdm9pZCBuY21fY2xvc2Uoc3RydWN0IGdldGhlciAqZ2V0aCkKK3sKKwlzdHJ1Y3QgZl9uY20JCSpuY20gPSBmdW5jX3RvX25jbSgmZ2V0aC0+ZnVuYyk7CisKKwlEQkcobmNtLT5wb3J0LmZ1bmMuY29uZmlnLT5jZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKKworCXNwaW5fbG9jaygmbmNtLT5sb2NrKTsKKwluY20tPmlzX29wZW4gPSBmYWxzZTsKKwluY21fbm90aWZ5KG5jbSk7CisJc3Bpbl91bmxvY2soJm5jbS0+bG9jayk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIGV0aGVybmV0IGZ1bmN0aW9uIGRyaXZlciBzZXR1cC9iaW5kaW5nICovCisKK3N0YXRpYyBpbnQgX19pbml0CituY21fYmluZChzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKmMsIHN0cnVjdCB1c2JfZnVuY3Rpb24gKmYpCit7CisJc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2ID0gYy0+Y2RldjsKKwlzdHJ1Y3QgZl9uY20JCSpuY20gPSBmdW5jX3RvX25jbShmKTsKKwlpbnQJCQlzdGF0dXM7CisJc3RydWN0IHVzYl9lcAkJKmVwOworCisJLyogYWxsb2NhdGUgaW5zdGFuY2Utc3BlY2lmaWMgaW50ZXJmYWNlIElEcyAqLworCXN0YXR1cyA9IHVzYl9pbnRlcmZhY2VfaWQoYywgZik7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZmFpbDsKKwluY20tPmN0cmxfaWQgPSBzdGF0dXM7CisJbmNtX2lhZF9kZXNjLmJGaXJzdEludGVyZmFjZSA9IHN0YXR1czsKKworCW5jbV9jb250cm9sX2ludGYuYkludGVyZmFjZU51bWJlciA9IHN0YXR1czsKKwluY21fdW5pb25fZGVzYy5iTWFzdGVySW50ZXJmYWNlMCA9IHN0YXR1czsKKworCXN0YXR1cyA9IHVzYl9pbnRlcmZhY2VfaWQoYywgZik7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZmFpbDsKKwluY20tPmRhdGFfaWQgPSBzdGF0dXM7CisKKwluY21fZGF0YV9ub3BfaW50Zi5iSW50ZXJmYWNlTnVtYmVyID0gc3RhdHVzOworCW5jbV9kYXRhX2ludGYuYkludGVyZmFjZU51bWJlciA9IHN0YXR1czsKKwluY21fdW5pb25fZGVzYy5iU2xhdmVJbnRlcmZhY2UwID0gc3RhdHVzOworCisJc3RhdHVzID0gLUVOT0RFVjsKKworCS8qIGFsbG9jYXRlIGluc3RhbmNlLXNwZWNpZmljIGVuZHBvaW50cyAqLworCWVwID0gdXNiX2VwX2F1dG9jb25maWcoY2Rldi0+Z2FkZ2V0LCAmZnNfbmNtX2luX2Rlc2MpOworCWlmICghZXApCisJCWdvdG8gZmFpbDsKKwluY20tPnBvcnQuaW5fZXAgPSBlcDsKKwllcC0+ZHJpdmVyX2RhdGEgPSBjZGV2OwkvKiBjbGFpbSAqLworCisJZXAgPSB1c2JfZXBfYXV0b2NvbmZpZyhjZGV2LT5nYWRnZXQsICZmc19uY21fb3V0X2Rlc2MpOworCWlmICghZXApCisJCWdvdG8gZmFpbDsKKwluY20tPnBvcnQub3V0X2VwID0gZXA7CisJZXAtPmRyaXZlcl9kYXRhID0gY2RldjsJLyogY2xhaW0gKi8KKworCWVwID0gdXNiX2VwX2F1dG9jb25maWcoY2Rldi0+Z2FkZ2V0LCAmZnNfbmNtX25vdGlmeV9kZXNjKTsKKwlpZiAoIWVwKQorCQlnb3RvIGZhaWw7CisJbmNtLT5ub3RpZnkgPSBlcDsKKwllcC0+ZHJpdmVyX2RhdGEgPSBjZGV2OwkvKiBjbGFpbSAqLworCisJc3RhdHVzID0gLUVOT01FTTsKKworCS8qIGFsbG9jYXRlIG5vdGlmaWNhdGlvbiByZXF1ZXN0IGFuZCBidWZmZXIgKi8KKwluY20tPm5vdGlmeV9yZXEgPSB1c2JfZXBfYWxsb2NfcmVxdWVzdChlcCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFuY20tPm5vdGlmeV9yZXEpCisJCWdvdG8gZmFpbDsKKwluY20tPm5vdGlmeV9yZXEtPmJ1ZiA9IGttYWxsb2MoTkNNX1NUQVRVU19CWVRFQ09VTlQsIEdGUF9LRVJORUwpOworCWlmICghbmNtLT5ub3RpZnlfcmVxLT5idWYpCisJCWdvdG8gZmFpbDsKKwluY20tPm5vdGlmeV9yZXEtPmNvbnRleHQgPSBuY207CisJbmNtLT5ub3RpZnlfcmVxLT5jb21wbGV0ZSA9IG5jbV9ub3RpZnlfY29tcGxldGU7CisKKwkvKiBjb3B5IGRlc2NyaXB0b3JzLCBhbmQgdHJhY2sgZW5kcG9pbnQgY29waWVzICovCisJZi0+ZGVzY3JpcHRvcnMgPSB1c2JfY29weV9kZXNjcmlwdG9ycyhuY21fZnNfZnVuY3Rpb24pOworCWlmICghZi0+ZGVzY3JpcHRvcnMpCisJCWdvdG8gZmFpbDsKKworCW5jbS0+ZnMuaW4gPSB1c2JfZmluZF9lbmRwb2ludChuY21fZnNfZnVuY3Rpb24sCisJCQlmLT5kZXNjcmlwdG9ycywgJmZzX25jbV9pbl9kZXNjKTsKKwluY20tPmZzLm91dCA9IHVzYl9maW5kX2VuZHBvaW50KG5jbV9mc19mdW5jdGlvbiwKKwkJCWYtPmRlc2NyaXB0b3JzLCAmZnNfbmNtX291dF9kZXNjKTsKKwluY20tPmZzLm5vdGlmeSA9IHVzYl9maW5kX2VuZHBvaW50KG5jbV9mc19mdW5jdGlvbiwKKwkJCWYtPmRlc2NyaXB0b3JzLCAmZnNfbmNtX25vdGlmeV9kZXNjKTsKKworCS8qCisJICogc3VwcG9ydCBhbGwgcmVsZXZhbnQgaGFyZHdhcmUgc3BlZWRzLi4uIHdlIGV4cGVjdCB0aGF0IHdoZW4KKwkgKiBoYXJkd2FyZSBpcyBkdWFsIHNwZWVkLCBhbGwgYnVsay1jYXBhYmxlIGVuZHBvaW50cyB3b3JrIGF0CisJICogYm90aCBzcGVlZHMKKwkgKi8KKwlpZiAoZ2FkZ2V0X2lzX2R1YWxzcGVlZChjLT5jZGV2LT5nYWRnZXQpKSB7CisJCWhzX25jbV9pbl9kZXNjLmJFbmRwb2ludEFkZHJlc3MgPQorCQkJCWZzX25jbV9pbl9kZXNjLmJFbmRwb2ludEFkZHJlc3M7CisJCWhzX25jbV9vdXRfZGVzYy5iRW5kcG9pbnRBZGRyZXNzID0KKwkJCQlmc19uY21fb3V0X2Rlc2MuYkVuZHBvaW50QWRkcmVzczsKKwkJaHNfbmNtX25vdGlmeV9kZXNjLmJFbmRwb2ludEFkZHJlc3MgPQorCQkJCWZzX25jbV9ub3RpZnlfZGVzYy5iRW5kcG9pbnRBZGRyZXNzOworCisJCS8qIGNvcHkgZGVzY3JpcHRvcnMsIGFuZCB0cmFjayBlbmRwb2ludCBjb3BpZXMgKi8KKwkJZi0+aHNfZGVzY3JpcHRvcnMgPSB1c2JfY29weV9kZXNjcmlwdG9ycyhuY21faHNfZnVuY3Rpb24pOworCQlpZiAoIWYtPmhzX2Rlc2NyaXB0b3JzKQorCQkJZ290byBmYWlsOworCisJCW5jbS0+aHMuaW4gPSB1c2JfZmluZF9lbmRwb2ludChuY21faHNfZnVuY3Rpb24sCisJCQkJZi0+aHNfZGVzY3JpcHRvcnMsICZoc19uY21faW5fZGVzYyk7CisJCW5jbS0+aHMub3V0ID0gdXNiX2ZpbmRfZW5kcG9pbnQobmNtX2hzX2Z1bmN0aW9uLAorCQkJCWYtPmhzX2Rlc2NyaXB0b3JzLCAmaHNfbmNtX291dF9kZXNjKTsKKwkJbmNtLT5ocy5ub3RpZnkgPSB1c2JfZmluZF9lbmRwb2ludChuY21faHNfZnVuY3Rpb24sCisJCQkJZi0+aHNfZGVzY3JpcHRvcnMsICZoc19uY21fbm90aWZ5X2Rlc2MpOworCX0KKworCS8qCisJICogTk9URTogIGFsbCB0aGF0IGlzIGRvbmUgd2l0aG91dCBrbm93aW5nIG9yIGNhcmluZyBhYm91dAorCSAqIHRoZSBuZXR3b3JrIGxpbmsgLi4uIHdoaWNoIGlzIHVuYXZhaWxhYmxlIHRvIHRoaXMgY29kZQorCSAqIHVudGlsIHdlJ3JlIGFjdGl2YXRlZCB2aWEgc2V0X2FsdCgpLgorCSAqLworCisJbmNtLT5wb3J0Lm9wZW4gPSBuY21fb3BlbjsKKwluY20tPnBvcnQuY2xvc2UgPSBuY21fY2xvc2U7CisKKwlEQkcoY2RldiwgIkNEQyBOZXR3b3JrOiAlcyBzcGVlZCBJTi8lcyBPVVQvJXMgTk9USUZZLyVzXG4iLAorCQkJZ2FkZ2V0X2lzX2R1YWxzcGVlZChjLT5jZGV2LT5nYWRnZXQpID8gImR1YWwiIDogImZ1bGwiLAorCQkJbmNtLT5wb3J0LmluX2VwLT5uYW1lLCBuY20tPnBvcnQub3V0X2VwLT5uYW1lLAorCQkJbmNtLT5ub3RpZnktPm5hbWUpOworCXJldHVybiAwOworCitmYWlsOgorCWlmIChmLT5kZXNjcmlwdG9ycykKKwkJdXNiX2ZyZWVfZGVzY3JpcHRvcnMoZi0+ZGVzY3JpcHRvcnMpOworCisJaWYgKG5jbS0+bm90aWZ5X3JlcSkgeworCQlrZnJlZShuY20tPm5vdGlmeV9yZXEtPmJ1Zik7CisJCXVzYl9lcF9mcmVlX3JlcXVlc3QobmNtLT5ub3RpZnksIG5jbS0+bm90aWZ5X3JlcSk7CisJfQorCisJLyogd2UgbWlnaHQgYXMgd2VsbCByZWxlYXNlIG91ciBjbGFpbXMgb24gZW5kcG9pbnRzICovCisJaWYgKG5jbS0+bm90aWZ5KQorCQluY20tPm5vdGlmeS0+ZHJpdmVyX2RhdGEgPSBOVUxMOworCWlmIChuY20tPnBvcnQub3V0KQorCQluY20tPnBvcnQub3V0X2VwLT5kcml2ZXJfZGF0YSA9IE5VTEw7CisJaWYgKG5jbS0+cG9ydC5pbikKKwkJbmNtLT5wb3J0LmluX2VwLT5kcml2ZXJfZGF0YSA9IE5VTEw7CisKKwlFUlJPUihjZGV2LCAiJXM6IGNhbid0IGJpbmQsIGVyciAlZFxuIiwgZi0+bmFtZSwgc3RhdHVzKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyB2b2lkCituY21fdW5iaW5kKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYywgc3RydWN0IHVzYl9mdW5jdGlvbiAqZikKK3sKKwlzdHJ1Y3QgZl9uY20JCSpuY20gPSBmdW5jX3RvX25jbShmKTsKKworCURCRyhjLT5jZGV2LCAibmNtIHVuYmluZFxuIik7CisKKwlpZiAoZ2FkZ2V0X2lzX2R1YWxzcGVlZChjLT5jZGV2LT5nYWRnZXQpKQorCQl1c2JfZnJlZV9kZXNjcmlwdG9ycyhmLT5oc19kZXNjcmlwdG9ycyk7CisJdXNiX2ZyZWVfZGVzY3JpcHRvcnMoZi0+ZGVzY3JpcHRvcnMpOworCisJa2ZyZWUobmNtLT5ub3RpZnlfcmVxLT5idWYpOworCXVzYl9lcF9mcmVlX3JlcXVlc3QobmNtLT5ub3RpZnksIG5jbS0+bm90aWZ5X3JlcSk7CisKKwluY21fc3RyaW5nX2RlZnNbMV0ucyA9IE5VTEw7CisJa2ZyZWUobmNtKTsKK30KKworLyoqCisgKiBuY21fYmluZF9jb25maWcgLSBhZGQgQ0RDIE5ldHdvcmsgbGluayB0byBhIGNvbmZpZ3VyYXRpb24KKyAqIEBjOiB0aGUgY29uZmlndXJhdGlvbiB0byBzdXBwb3J0IHRoZSBuZXR3b3JrIGxpbmsKKyAqIEBldGhhZGRyOiBhIGJ1ZmZlciBpbiB3aGljaCB0aGUgZXRoZXJuZXQgYWRkcmVzcyBvZiB0aGUgaG9zdCBzaWRlCisgKglzaWRlIG9mIHRoZSBsaW5rIHdhcyByZWNvcmRlZAorICogQ29udGV4dDogc2luZ2xlIHRocmVhZGVkIGR1cmluZyBnYWRnZXQgc2V0dXAKKyAqCisgKiBSZXR1cm5zIHplcm8gb24gc3VjY2VzcywgZWxzZSBuZWdhdGl2ZSBlcnJuby4KKyAqCisgKiBDYWxsZXIgbXVzdCBoYXZlIGNhbGxlZCBAZ2V0aGVyX3NldHVwKCkuICBDYWxsZXIgaXMgYWxzbyByZXNwb25zaWJsZQorICogZm9yIGNhbGxpbmcgQGdldGhlcl9jbGVhbnVwKCkgYmVmb3JlIG1vZHVsZSB1bmxvYWQuCisgKi8KK2ludCBfX2luaXQgbmNtX2JpbmRfY29uZmlnKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYywgdTggZXRoYWRkcltFVEhfQUxFTl0pCit7CisJc3RydWN0IGZfbmNtCSpuY207CisJaW50CQlzdGF0dXM7CisKKwlpZiAoIWNhbl9zdXBwb3J0X2VjbShjLT5jZGV2LT5nYWRnZXQpIHx8ICFldGhhZGRyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIG1heWJlIGFsbG9jYXRlIGRldmljZS1nbG9iYWwgc3RyaW5nIElEcyAqLworCWlmIChuY21fc3RyaW5nX2RlZnNbMF0uaWQgPT0gMCkgeworCisJCS8qIGNvbnRyb2wgaW50ZXJmYWNlIGxhYmVsICovCisJCXN0YXR1cyA9IHVzYl9zdHJpbmdfaWQoYy0+Y2Rldik7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJcmV0dXJuIHN0YXR1czsKKwkJbmNtX3N0cmluZ19kZWZzW1NUUklOR19DVFJMX0lEWF0uaWQgPSBzdGF0dXM7CisJCW5jbV9jb250cm9sX2ludGYuaUludGVyZmFjZSA9IHN0YXR1czsKKworCQkvKiBkYXRhIGludGVyZmFjZSBsYWJlbCAqLworCQlzdGF0dXMgPSB1c2Jfc3RyaW5nX2lkKGMtPmNkZXYpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCXJldHVybiBzdGF0dXM7CisJCW5jbV9zdHJpbmdfZGVmc1tTVFJJTkdfREFUQV9JRFhdLmlkID0gc3RhdHVzOworCQluY21fZGF0YV9ub3BfaW50Zi5pSW50ZXJmYWNlID0gc3RhdHVzOworCQluY21fZGF0YV9pbnRmLmlJbnRlcmZhY2UgPSBzdGF0dXM7CisKKwkJLyogTUFDIGFkZHJlc3MgKi8KKwkJc3RhdHVzID0gdXNiX3N0cmluZ19pZChjLT5jZGV2KTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlyZXR1cm4gc3RhdHVzOworCQluY21fc3RyaW5nX2RlZnNbU1RSSU5HX01BQ19JRFhdLmlkID0gc3RhdHVzOworCQllY21fZGVzYy5pTUFDQWRkcmVzcyA9IHN0YXR1czsKKworCQkvKiBJQUQgKi8KKwkJc3RhdHVzID0gdXNiX3N0cmluZ19pZChjLT5jZGV2KTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlyZXR1cm4gc3RhdHVzOworCQluY21fc3RyaW5nX2RlZnNbU1RSSU5HX0lBRF9JRFhdLmlkID0gc3RhdHVzOworCQluY21faWFkX2Rlc2MuaUZ1bmN0aW9uID0gc3RhdHVzOworCX0KKworCS8qIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIG9uZSBuZXcgaW5zdGFuY2UgKi8KKwluY20gPSBremFsbG9jKHNpemVvZiAqbmNtLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW5jbSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBleHBvcnQgaG9zdCdzIEV0aGVybmV0IGFkZHJlc3MgaW4gQ0RDIGZvcm1hdCAqLworCXNucHJpbnRmKG5jbS0+ZXRoYWRkciwgc2l6ZW9mIG5jbS0+ZXRoYWRkciwKKwkJIiUwMlglMDJYJTAyWCUwMlglMDJYJTAyWCIsCisJCWV0aGFkZHJbMF0sIGV0aGFkZHJbMV0sIGV0aGFkZHJbMl0sCisJCWV0aGFkZHJbM10sIGV0aGFkZHJbNF0sIGV0aGFkZHJbNV0pOworCW5jbV9zdHJpbmdfZGVmc1sxXS5zID0gbmNtLT5ldGhhZGRyOworCisJc3Bpbl9sb2NrX2luaXQoJm5jbS0+bG9jayk7CisJbmNtX3Jlc2V0X3ZhbHVlcyhuY20pOworCW5jbS0+cG9ydC5pc19maXhlZCA9IHRydWU7CisKKwluY20tPnBvcnQuZnVuYy5uYW1lID0gImNkY19uZXR3b3JrIjsKKwluY20tPnBvcnQuZnVuYy5zdHJpbmdzID0gbmNtX3N0cmluZ3M7CisJLyogZGVzY3JpcHRvcnMgYXJlIHBlci1pbnN0YW5jZSBjb3BpZXMgKi8KKwluY20tPnBvcnQuZnVuYy5iaW5kID0gbmNtX2JpbmQ7CisJbmNtLT5wb3J0LmZ1bmMudW5iaW5kID0gbmNtX3VuYmluZDsKKwluY20tPnBvcnQuZnVuYy5zZXRfYWx0ID0gbmNtX3NldF9hbHQ7CisJbmNtLT5wb3J0LmZ1bmMuZ2V0X2FsdCA9IG5jbV9nZXRfYWx0OworCW5jbS0+cG9ydC5mdW5jLnNldHVwID0gbmNtX3NldHVwOworCW5jbS0+cG9ydC5mdW5jLmRpc2FibGUgPSBuY21fZGlzYWJsZTsKKworCW5jbS0+cG9ydC53cmFwID0gbmNtX3dyYXBfbnRiOworCW5jbS0+cG9ydC51bndyYXAgPSBuY21fdW53cmFwX250YjsKKworCXN0YXR1cyA9IHVzYl9hZGRfZnVuY3Rpb24oYywgJm5jbS0+cG9ydC5mdW5jKTsKKwlpZiAoc3RhdHVzKSB7CisJCW5jbV9zdHJpbmdfZGVmc1sxXS5zID0gTlVMTDsKKwkJa2ZyZWUobmNtKTsKKwl9CisJcmV0dXJuIHN0YXR1czsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9maWxlX3N0b3JhZ2UuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9maWxlX3N0b3JhZ2UuYwppbmRleCBkNGZkZjY1Li5hNmVhY2I1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZmlsZV9zdG9yYWdlLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZpbGVfc3RvcmFnZS5jCkBAIC0zMzkyLDI1ICszMzkyLDI4IEBACiAJCWRldl9zZXRfbmFtZSgmY3VybHVuLT5kZXYsIiVzLWx1biVkIiwKIAkJCSAgICAgZGV2X25hbWUoJmdhZGdldC0+ZGV2KSwgaSk7CiAKLQkJaWYgKChyYyA9IGRldmljZV9yZWdpc3RlcigmY3VybHVuLT5kZXYpKSAhPSAwKSB7CisJCWtyZWZfZ2V0KCZmc2ctPnJlZik7CisJCXJjID0gZGV2aWNlX3JlZ2lzdGVyKCZjdXJsdW4tPmRldik7CisJCWlmIChyYykgewogCQkJSU5GTyhmc2csICJmYWlsZWQgdG8gcmVnaXN0ZXIgTFVOJWQ6ICVkXG4iLCBpLCByYyk7Ci0JCQlnb3RvIG91dDsKLQkJfQotCQlpZiAoKHJjID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZjdXJsdW4tPmRldiwKLQkJCQkJJmRldl9hdHRyX3JvKSkgIT0gMCB8fAotCQkJCShyYyA9IGRldmljZV9jcmVhdGVfZmlsZSgmY3VybHVuLT5kZXYsCi0JCQkJCSZkZXZfYXR0cl9ub2Z1YSkpICE9IDAgfHwKLQkJCQkocmMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmN1cmx1bi0+ZGV2LAotCQkJCQkmZGV2X2F0dHJfZmlsZSkpICE9IDApIHsKLQkJCWRldmljZV91bnJlZ2lzdGVyKCZjdXJsdW4tPmRldik7CisJCQlwdXRfZGV2aWNlKCZjdXJsdW4tPmRldik7CiAJCQlnb3RvIG91dDsKIAkJfQogCQljdXJsdW4tPnJlZ2lzdGVyZWQgPSAxOwotCQlrcmVmX2dldCgmZnNnLT5yZWYpOworCisJCXJjID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZjdXJsdW4tPmRldiwgJmRldl9hdHRyX3JvKTsKKwkJaWYgKHJjKQorCQkJZ290byBvdXQ7CisJCXJjID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZjdXJsdW4tPmRldiwgJmRldl9hdHRyX25vZnVhKTsKKwkJaWYgKHJjKQorCQkJZ290byBvdXQ7CisJCXJjID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZjdXJsdW4tPmRldiwgJmRldl9hdHRyX2ZpbGUpOworCQlpZiAocmMpCisJCQlnb3RvIG91dDsKIAogCQlpZiAobW9kX2RhdGEuZmlsZVtpXSAmJiAqbW9kX2RhdGEuZmlsZVtpXSkgewotCQkJaWYgKChyYyA9IGZzZ19sdW5fb3BlbihjdXJsdW4sCi0JCQkJCW1vZF9kYXRhLmZpbGVbaV0pKSAhPSAwKQorCQkJcmMgPSBmc2dfbHVuX29wZW4oY3VybHVuLCBtb2RfZGF0YS5maWxlW2ldKTsKKwkJCWlmIChyYykKIAkJCQlnb3RvIG91dDsKIAkJfSBlbHNlIGlmICghbW9kX2RhdGEucmVtb3ZhYmxlKSB7CiAJCQlFUlJPUihmc2csICJubyBmaWxlIGdpdmVuIGZvciBMVU4lZFxuIiwgaSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX214Y191ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfbXhjX3VkYy5jCmluZGV4IDViZGJmZTYuLjc3YjFlYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfbXhjX3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfbXhjX3VkYy5jCkBAIC05Myw5ICs5Myw5IEBACiAKIAkvKiB3b3JrYXJvdW5kIEVOR2NtMDkxNTIgZm9yIGkuTVgzNSAqLwogCWlmIChwZGF0YS0+d29ya2Fyb3VuZCAmIEZMU19VU0IyX1dPUktBUk9VTkRfRU5HQ00wOTE1MikgewotCQl2ID0gcmVhZGwoTVgzNV9JT19BRERSRVNTKE1YMzVfT1RHX0JBU0VfQUREUiArCisJCXYgPSByZWFkbChNWDM1X0lPX0FERFJFU1MoTVgzNV9VU0JfQkFTRV9BRERSICsKIAkJCQlVU0JQSFlDVFJMX09UR0JBU0VfT0ZGU0VUKSk7Ci0JCXdyaXRlbCh2IHwgVVNCUEhZQ1RSTF9FVkRPLCBNWDM1X0lPX0FERFJFU1MoTVgzNV9PVEdfQkFTRV9BRERSICsKKwkJd3JpdGVsKHYgfCBVU0JQSFlDVFJMX0VWRE8sIE1YMzVfSU9fQUREUkVTUyhNWDM1X1VTQl9CQVNFX0FERFIgKwogCQkJCVVTQlBIWUNUUkxfT1RHQkFTRV9PRkZTRVQpKTsKIAl9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9nX2Zmcy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2dfZmZzLmMKaW5kZXggYWY3NWUzNi4uZWJmNjk3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2dfZmZzLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2dfZmZzLmMKQEAgLTEsNyArMSwyOSBAQAorLyoKKyAqIGdfZmZzLmMgLS0gdXNlciBtb2RlIGZpbGUgc3lzdGVtIEFQSSBmb3IgVVNCIGNvbXBvc2l0ZSBmdW5jdGlvbiBjb250cm9sbGVycworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKiBBdXRob3I6IE1pY2hhbCBOYXphcmV3aWN6IDxtLm5hemFyZXdpY3pAc2Ftc3VuZy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNkZWZpbmUgcHJfZm10KGZtdCkgImdfZmZzOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdXRzbmFtZS5oPgogCi0KIC8qCiAgKiBrYnVpbGQgaXMgbm90IHZlcnkgY29vcGVyYXRpdmUgd2l0aCByZXNwZWN0IHRvIGxpbmtpbmcgc2VwYXJhdGVseQogICogY29tcGlsZWQgbGlicmFyeSBvYmplY3RzIGludG8gb25lIG1vZHVsZS4gIFNvIGZvciBub3cgd2Ugd29uJ3QgdXNlCkBAIC00Myw3ICs2NSw2IEBACiAKICNpbmNsdWRlICJmX2ZzLmMiCiAKLQogI2RlZmluZSBEUklWRVJfTkFNRQkiZ19mZnMiCiAjZGVmaW5lIERSSVZFUl9ERVNDCSJVU0IgRnVuY3Rpb24gRmlsZXN5c3RlbSIKICNkZWZpbmUgRFJJVkVSX1ZFUlNJT04JIjI0IEF1ZyAyMDA0IgpAQCAtNzMsOCArOTQsNiBAQAogbW9kdWxlX3BhcmFtX25hbWVkKGJEZXZpY2VQcm90b2NvbCwgZ2ZzX2Rldl9kZXNjLmJEZXZpY2VQcm90b2NvbCwgYnl0ZSwgICAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoYkRldmljZVByb3RvY29sLCAiVVNCIERldmljZSBwcm90b2NvbCIpOwogCi0KLQogc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKmdmc19vdGdfZGVzY1tdID0gewogCShjb25zdCBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopCiAJJihjb25zdCBzdHJ1Y3QgdXNiX290Z19kZXNjcmlwdG9yKSB7CkBAIC05MSw4ICsxMTAsNyBAQAogCU5VTEwKIH07CiAKLS8qIHN0cmluZyBJRHMgYXJlIGFzc2lnbmVkIGR5bmFtaWNhbGx5ICovCi0KKy8qIFN0cmluZyBJRHMgYXJlIGFzc2lnbmVkIGR5bmFtaWNhbGx5ICovCiBzdGF0aWMgc3RydWN0IHVzYl9zdHJpbmcgZ2ZzX3N0cmluZ3NbXSA9IHsKICNpZmRlZiBDT05GSUdfVVNCX0ZVTkNUSU9ORlNfUk5ESVMKIAl7IC5zID0gIkZ1bmN0aW9uRlMgKyBSTkRJUyIgfSwKQEAgLTExNCw4ICsxMzIsNiBAQAogCU5VTEwsCiB9OwogCi0KLQogc3RydWN0IGdmc19jb25maWd1cmF0aW9uIHsKIAlzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gYzsKIAlpbnQgKCpldGgpKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYywgdTggKmV0aGFkZHIpOwpAQCAtMTM4LDcgKzE1NCw2IEBACiAjZW5kaWYKIH07CiAKLQogc3RhdGljIGludCBnZnNfYmluZChzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYpOwogc3RhdGljIGludCBnZnNfdW5iaW5kKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2Rldik7CiBzdGF0aWMgaW50IGdmc19kb19jb25maWcoc3RydWN0IHVzYl9jb25maWd1cmF0aW9uICpjKTsKQEAgLTE1MSwxMSArMTY2LDkgQEAKIAkuaVByb2R1Y3QJPSBEUklWRVJfREVTQywKIH07CiAKLQogc3RhdGljIHN0cnVjdCBmZnNfZGF0YSAqZ2ZzX2Zmc19kYXRhOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2ZzX3JlZ2lzdGVyZWQ7CiAKLQogc3RhdGljIGludCAgZ2ZzX2luaXQodm9pZCkKIHsKIAlFTlRFUigpOwpAQCAtMTc1LDcgKzE4OCw2IEBACiB9CiBtb2R1bGVfZXhpdChnZnNfZXhpdCk7CiAKLQogc3RhdGljIGludCBmdW5jdGlvbmZzX3JlYWR5X2NhbGxiYWNrKHN0cnVjdCBmZnNfZGF0YSAqZmZzKQogewogCWludCByZXQ7CkBAIC0yMDAsMTQgKzIxMiwxMSBAQAogCQl1c2JfY29tcG9zaXRlX3VucmVnaXN0ZXIoJmdmc19kcml2ZXIpOwogfQogCi0KIHN0YXRpYyBpbnQgZnVuY3Rpb25mc19jaGVja19kZXZfY2FsbGJhY2soY29uc3QgY2hhciAqZGV2X25hbWUpCiB7CiAJcmV0dXJuIDA7CiB9CiAKLQotCiBzdGF0aWMgaW50IGdmc19iaW5kKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldikKIHsKIAlpbnQgcmV0LCBpOwpAQCAtMjc0LDcgKzI4Myw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLQogc3RhdGljIGludCBnZnNfZG9fY29uZmlnKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYykKIHsKIAlzdHJ1Y3QgZ2ZzX2NvbmZpZ3VyYXRpb24gKmdjID0KQEAgLTMxNSw3ICszMjMsNiBAQAogCXJldHVybiAwOwogfQogCi0KICNpZmRlZiBDT05GSUdfVVNCX0ZVTkNUSU9ORlNfRVRICiAKIHN0YXRpYyBpbnQgZXRoX2JpbmRfY29uZmlnKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYywgdTggZXRoYWRkcltFVEhfQUxFTl0pCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZ2FkZ2V0X2NoaXBzLmggYi9kcml2ZXJzL3VzYi9nYWRnZXQvZ2FkZ2V0X2NoaXBzLmgKaW5kZXggZTUxMWZlYy4uNWMyNzIwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2dhZGdldF9jaGlwcy5oCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9nYWRnZXRfY2hpcHMuaApAQCAtOTYsNyArOTYsNyBAQAogCiAvKiBNZW50b3IgaGlnaCBzcGVlZCAiZHVhbCByb2xlIiBjb250cm9sbGVyLCBpbiBwZXJpcGhlcmFsIHJvbGUgKi8KICNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkMKLSNkZWZpbmUgZ2FkZ2V0X2lzX211c2JoZHJjKGcpCSFzdHJjbXAoIm11c2JfaGRyYyIsIChnKS0+bmFtZSkKKyNkZWZpbmUgZ2FkZ2V0X2lzX211c2JoZHJjKGcpCSFzdHJjbXAoIm11c2ItaGRyYyIsIChnKS0+bmFtZSkKICNlbHNlCiAjZGVmaW5lIGdhZGdldF9pc19tdXNiaGRyYyhnKQkwCiAjZW5kaWYKQEAgLTEyMCwxMCArMTIwLDEwIEBACiAjZGVmaW5lIGdhZGdldF9pc19mc2xfcWUoZykJMAogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9DSTEzWFhYCi0jZGVmaW5lIGdhZGdldF9pc19jaTEzeHh4KGcpCSghc3RyY21wKCJjaTEzeHh4X3VkYyIsIChnKS0+bmFtZSkpCisjaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfQ0kxM1hYWF9QQ0kKKyNkZWZpbmUgZ2FkZ2V0X2lzX2NpMTN4eHhfcGNpKGcpCSghc3RyY21wKCJjaTEzeHh4X3BjaSIsIChnKS0+bmFtZSkpCiAjZWxzZQotI2RlZmluZSBnYWRnZXRfaXNfY2kxM3h4eChnKQkwCisjZGVmaW5lIGdhZGdldF9pc19jaTEzeHh4X3BjaShnKQkwCiAjZW5kaWYKIAogLy8gQ09ORklHX1VTQl9HQURHRVRfU1gyCkBAIC0xNDIsNiArMTQyLDE3IEBACiAjZGVmaW5lIGdhZGdldF9pc19zM2NfaHNvdGcoZykgICAgMAogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9FRzIwVAorI2RlZmluZQlnYWRnZXRfaXNfcGNoKGcpCSghc3RyY21wKCJwY2hfdWRjIiwgKGcpLT5uYW1lKSkKKyNlbHNlCisjZGVmaW5lCWdhZGdldF9pc19wY2goZykJMAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9DSTEzWFhYX01TTQorI2RlZmluZSBnYWRnZXRfaXNfY2kxM3h4eF9tc20oZykJKCFzdHJjbXAoImNpMTN4eHhfbXNtIiwgKGcpLT5uYW1lKSkKKyNlbHNlCisjZGVmaW5lIGdhZGdldF9pc19jaTEzeHh4X21zbShnKQkwCisjZW5kaWYKIAogLyoqCiAgKiB1c2JfZ2FkZ2V0X2NvbnRyb2xsZXJfbnVtYmVyIC0gc3VwcG9ydCBiY2REZXZpY2UgaWQgY29udmVudGlvbgpAQCAtMTkyLDcgKzIwMyw3IEBACiAJCXJldHVybiAweDIxOwogCWVsc2UgaWYgKGdhZGdldF9pc19mc2xfcWUoZ2FkZ2V0KSkKIAkJcmV0dXJuIDB4MjI7Ci0JZWxzZSBpZiAoZ2FkZ2V0X2lzX2NpMTN4eHgoZ2FkZ2V0KSkKKwllbHNlIGlmIChnYWRnZXRfaXNfY2kxM3h4eF9wY2koZ2FkZ2V0KSkKIAkJcmV0dXJuIDB4MjM7CiAJZWxzZSBpZiAoZ2FkZ2V0X2lzX2xhbmd3ZWxsKGdhZGdldCkpCiAJCXJldHVybiAweDI0OwpAQCAtMjAwLDYgKzIxMSwxMCBAQAogCQlyZXR1cm4gMHgyNTsKIAllbHNlIGlmIChnYWRnZXRfaXNfczNjX2hzb3RnKGdhZGdldCkpCiAJCXJldHVybiAweDI2OworCWVsc2UgaWYgKGdhZGdldF9pc19wY2goZ2FkZ2V0KSkKKwkJcmV0dXJuIDB4Mjc7CisJZWxzZSBpZiAoZ2FkZ2V0X2lzX2NpMTN4eHhfbXNtKGdhZGdldCkpCisJCXJldHVybiAweDI4OwogCXJldHVybiAtRU5PRU5UOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvaW14X3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2lteF91ZGMuYwppbmRleCBlZDAyNjY0Li4xMjEwNTM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvaW14X3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9pbXhfdWRjLmMKQEAgLTExOTEsMTMgKzExOTEsMTcgQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKKyNpZm5kZWYgTVgxX0lOVF9VU0JEMAorI2RlZmluZSBNWDFfSU5UX1VTQkQwIE1YMV9VU0JEX0lOVDAKKyNlbmRpZgorCiBzdGF0aWMgaXJxcmV0dXJuX3QgaW14X3VkY19idWxrX2lycShpbnQgaXJxLCB2b2lkICpkZXYpCiB7CiAJc3RydWN0IGlteF91ZGNfc3RydWN0ICppbXhfdXNiID0gZGV2OwotCXN0cnVjdCBpbXhfZXBfc3RydWN0ICppbXhfZXAgPSAmaW14X3VzYi0+aW14X2VwW2lycSAtIFVTQkRfSU5UMF07CisJc3RydWN0IGlteF9lcF9zdHJ1Y3QgKmlteF9lcCA9ICZpbXhfdXNiLT5pbXhfZXBbaXJxIC0gTVgxX0lOVF9VU0JEMF07CiAJaW50IGludHIgPSBfX3Jhd19yZWFkbChpbXhfdXNiLT5iYXNlICsgVVNCX0VQX0lOVFIoRVBfTk8oaW14X2VwKSkpOwogCi0JZHVtcF9lcF9pbnRyKF9fZnVuY19fLCBpcnEgLSBVU0JEX0lOVDAsIGludHIsIGlteF91c2ItPmRldik7CisJZHVtcF9lcF9pbnRyKF9fZnVuY19fLCBpcnEgLSBNWDFfSU5UX1VTQkQwLCBpbnRyLCBpbXhfdXNiLT5kZXYpOwogCiAJaWYgKCFpbXhfdXNiLT5kcml2ZXIpIHsKIAkJX19yYXdfd3JpdGVsKGludHIsIGlteF91c2ItPmJhc2UgKyBVU0JfRVBfSU5UUihFUF9OTyhpbXhfZXApKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvaW14X3VkYy5oIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2lteF91ZGMuaAppbmRleCBiNDhhZDU5Li43MTM2YzI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvaW14X3VkYy5oCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9pbXhfdWRjLmgKQEAgLTIzLDkgKzIzLDYgQEAKIC8qIEhlbHBlciBtYWNyb3MgKi8KICNkZWZpbmUgRVBfTk8oZXApCSgoZXAtPmJFbmRwb2ludEFkZHJlc3MpICYgflVTQl9ESVJfSU4pIC8qIElOOjEsIE9VVDowICovCiAjZGVmaW5lIEVQX0RJUihlcCkJKChlcC0+YkVuZHBvaW50QWRkcmVzcykgJiBVU0JfRElSX0lOID8gMSA6IDApCi0jZGVmaW5lIGlycV90b19lcChpcnEpCSgoKGlycSkgPj0gVVNCRF9JTlQwKSB8fCAoKGlycSkgPD0gVVNCRF9JTlQ2KSBcCi0JCT8gKChpcnEpIC0gVVNCRF9JTlQwKSA6IChVU0JEX0lOVDYpKSAvKnNob3VsZCBub3QgaGFwcGVuKi8KLSNkZWZpbmUgZXBfdG9faXJxKGVwKQkoRVBfTk8oKGVwKSkgKyBVU0JEX0lOVDApCiAjZGVmaW5lIElNWF9VU0JfTkJfRVAJNgogCiAvKiBEcml2ZXIgc3RydWN0dXJlcyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2xhbmd3ZWxsX3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2xhbmd3ZWxsX3VkYy5jCmluZGV4IGI4ZWM5NTQuLjc3Nzk3MjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9sYW5nd2VsbF91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbGFuZ3dlbGxfdWRjLmMKQEAgLTIyMjUsNiArMjIyNSw3IEBACiAJdTE2CXdWYWx1ZSA9IGxlMTZfdG9fY3B1KHNldHVwLT53VmFsdWUpOwogCXUxNgl3SW5kZXggPSBsZTE2X3RvX2NwdShzZXR1cC0+d0luZGV4KTsKIAl1MTYJd0xlbmd0aCA9IGxlMTZfdG9fY3B1KHNldHVwLT53TGVuZ3RoKTsKKwl1MzIJcG9ydHNjMTsKIAogCWRldl92ZGJnKCZkZXYtPnBkZXYtPmRldiwgIi0tLT4gJXMoKVxuIiwgX19mdW5jX18pOwogCkBAIC0yMzEzLDYgKzIzMTQsMjggQEAKIAkJCQkJZGV2LT5kZXZfc3RhdHVzICY9IH4oMSA8PCB3VmFsdWUpOwogCQkJCX0KIAkJCQlicmVhazsKKwkJCWNhc2UgVVNCX0RFVklDRV9URVNUX01PREU6CisJCQkJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICJTRVRVUDogVEVTVCBNT0RFXG4iKTsKKwkJCQlpZiAoKHdJbmRleCAmIDB4ZmYpIHx8CisJCQkJCShkZXYtPmdhZGdldC5zcGVlZCAhPSBVU0JfU1BFRURfSElHSCkpCisJCQkJCWVwMF9zdGFsbChkZXYpOworCisJCQkJc3dpdGNoICh3SW5kZXggPj4gOCkgeworCQkJCWNhc2UgVEVTVF9KOgorCQkJCWNhc2UgVEVTVF9LOgorCQkJCWNhc2UgVEVTVF9TRTBfTkFLOgorCQkJCWNhc2UgVEVTVF9QQUNLRVQ6CisJCQkJY2FzZSBURVNUX0ZPUkNFX0VOOgorCQkJCQlpZiAocHJpbWVfc3RhdHVzX3BoYXNlKGRldiwgRVBfRElSX0lOKSkKKwkJCQkJCWVwMF9zdGFsbChkZXYpOworCQkJCQlwb3J0c2MxID0gcmVhZGwoJmRldi0+b3BfcmVncy0+cG9ydHNjMSk7CisJCQkJCXBvcnRzYzEgfD0gKHdJbmRleCAmIDB4ZjAwKSA8PCA4OworCQkJCQl3cml0ZWwocG9ydHNjMSwgJmRldi0+b3BfcmVncy0+cG9ydHNjMSk7CisJCQkJCWdvdG8gZW5kOworCQkJCWRlZmF1bHQ6CisJCQkJCXJjID0gLUVPUE5PVFNVUFA7CisJCQkJfQorCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoKIAkJCQlyYyA9IC1FT1BOT1RTVVBQOwogCQkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L21hc3Nfc3RvcmFnZS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L21hc3Nfc3RvcmFnZS5jCmluZGV4IDA3NjkxNzkuLjAxODIyNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9tYXNzX3N0b3JhZ2UuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbWFzc19zdG9yYWdlLmMKQEAgLTEwMiw3ICsxMDIsNyBAQAogfTsKIEZTR19NT0RVTEVfUEFSQU1FVEVSUygvKiBubyBwcmVmaXggKi8sIG1vZF9kYXRhKTsKIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgbXNnX3JlZ2lzdGVyZWQgPSAwOworc3RhdGljIHVuc2lnbmVkIGxvbmcgbXNnX3JlZ2lzdGVyZWQ7CiBzdGF0aWMgdm9pZCBtc2dfY2xlYW51cCh2b2lkKTsKIAogc3RhdGljIGludCBtc2dfdGhyZWFkX2V4aXRzKHN0cnVjdCBmc2dfY29tbW9uICpjb21tb24pCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvbXZfdWRjLmggYi9kcml2ZXJzL3VzYi9nYWRnZXQvbXZfdWRjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjVmMWY3YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9tdl91ZGMuaApAQCAtMCwwICsxLDI5NCBAQAorCisjaWZuZGVmIF9fTVZfVURDX0gKKyNkZWZpbmUgX19NVl9VRENfSAorCisjZGVmaW5lIFZVU0JIU19NQVhfUE9SVFMJOAorCisjZGVmaW5lIERRSF9BTElHTk1FTlQJCTIwNDgKKyNkZWZpbmUgRFREX0FMSUdOTUVOVAkJNjQKKyNkZWZpbmUgRE1BX0JPVU5EQVJZCQk0MDk2CisKKyNkZWZpbmUgRVBfRElSX0lOCTEKKyNkZWZpbmUgRVBfRElSX09VVAkwCisKKyNkZWZpbmUgRE1BX0FERFJfSU5WQUxJRAkofihkbWFfYWRkcl90KTApCisKKyNkZWZpbmUgRVAwX01BWF9QS1RfU0laRQk2NAorLyogZXAwIHRyYW5zZmVyIHN0YXRlICovCisjZGVmaW5lIFdBSVRfRk9SX1NFVFVQCQkwCisjZGVmaW5lIERBVEFfU1RBVEVfWE1JVAkJMQorI2RlZmluZSBEQVRBX1NUQVRFX05FRURfWkxQCTIKKyNkZWZpbmUgV0FJVF9GT1JfT1VUX1NUQVRVUwkzCisjZGVmaW5lIERBVEFfU1RBVEVfUkVDVgkJNAorCisjZGVmaW5lIENBUExFTkdUSF9NQVNLCQkoMHhmZikKKyNkZWZpbmUgRENDUEFSQU1TX0RFTl9NQVNLCSgweDFmKQorCisjZGVmaW5lIEhDU1BBUkFNU19QUEMJCSgweDEwKQorCisvKiBGcmFtZSBJbmRleCBSZWdpc3RlciBCaXQgTWFza3MgKi8KKyNkZWZpbmUgVVNCX0ZSSU5ERVhfTUFTS1MJMHgzZmZmCisKKy8qIENvbW1hbmQgUmVnaXN0ZXIgQml0IE1hc2tzICovCisjZGVmaW5lIFVTQkNNRF9SVU5fU1RPUAkJCQkoMHgwMDAwMDAwMSkKKyNkZWZpbmUgVVNCQ01EX0NUUkxfUkVTRVQJCQkoMHgwMDAwMDAwMikKKyNkZWZpbmUgVVNCQ01EX1NFVFVQX1RSSVBXSVJFX1NFVAkJKDB4MDAwMDIwMDApCisjZGVmaW5lIFVTQkNNRF9TRVRVUF9UUklQV0lSRV9DTEVBUgkJKH5VU0JDTURfU0VUVVBfVFJJUFdJUkVfU0VUKQorCisjZGVmaW5lIFVTQkNNRF9BVERUV19UUklQV0lSRV9TRVQJCSgweDAwMDA0MDAwKQorI2RlZmluZSBVU0JDTURfQVREVFdfVFJJUFdJUkVfQ0xFQVIJCSh+VVNCQ01EX0FURFRXX1RSSVBXSVJFX1NFVCkKKworLyogYml0IDE1LDMsMiBhcmUgZm9yIGZyYW1lIGxpc3Qgc2l6ZSAqLworI2RlZmluZSBVU0JDTURfRlJBTUVfU0laRV8xMDI0CQkJKDB4MDAwMDAwMDApIC8qIDAwMCAqLworI2RlZmluZSBVU0JDTURfRlJBTUVfU0laRV81MTIJCQkoMHgwMDAwMDAwNCkgLyogMDAxICovCisjZGVmaW5lIFVTQkNNRF9GUkFNRV9TSVpFXzI1NgkJCSgweDAwMDAwMDA4KSAvKiAwMTAgKi8KKyNkZWZpbmUgVVNCQ01EX0ZSQU1FX1NJWkVfMTI4CQkJKDB4MDAwMDAwMEMpIC8qIDAxMSAqLworI2RlZmluZSBVU0JDTURfRlJBTUVfU0laRV82NAkJCSgweDAwMDA4MDAwKSAvKiAxMDAgKi8KKyNkZWZpbmUgVVNCQ01EX0ZSQU1FX1NJWkVfMzIJCQkoMHgwMDAwODAwNCkgLyogMTAxICovCisjZGVmaW5lIFVTQkNNRF9GUkFNRV9TSVpFXzE2CQkJKDB4MDAwMDgwMDgpIC8qIDExMCAqLworI2RlZmluZSBVU0JDTURfRlJBTUVfU0laRV84CQkJKDB4MDAwMDgwMEMpIC8qIDExMSAqLworCisjZGVmaW5lIEVQQ1RSTF9UWF9BTExfTUFTSwkJCSgweEZGRkYwMDAwKQorI2RlZmluZSBFUENUUkxfUlhfQUxMX01BU0sJCQkoMHgwMDAwRkZGRikKKworI2RlZmluZSBFUENUUkxfVFhfREFUQV9UT0dHTEVfUlNUCQkoMHgwMDQwMDAwMCkKKyNkZWZpbmUgRVBDVFJMX1RYX0VQX1NUQUxMCQkJKDB4MDAwMTAwMDApCisjZGVmaW5lIEVQQ1RSTF9SWF9FUF9TVEFMTAkJCSgweDAwMDAwMDAxKQorI2RlZmluZSBFUENUUkxfUlhfREFUQV9UT0dHTEVfUlNUCQkoMHgwMDAwMDA0MCkKKyNkZWZpbmUgRVBDVFJMX1JYX0VOQUJMRQkJCSgweDAwMDAwMDgwKQorI2RlZmluZSBFUENUUkxfVFhfRU5BQkxFCQkJKDB4MDA4MDAwMDApCisjZGVmaW5lIEVQQ1RSTF9DT05UUk9MCQkJCSgweDAwMDAwMDAwKQorI2RlZmluZSBFUENUUkxfSVNPQ0hST05PVVMJCQkoMHgwMDA0MDAwMCkKKyNkZWZpbmUgRVBDVFJMX0JVTEsJCQkJKDB4MDAwODAwMDApCisjZGVmaW5lIEVQQ1RSTF9JTlQJCQkJKDB4MDAwQzAwMDApCisjZGVmaW5lIEVQQ1RSTF9UWF9UWVBFCQkJCSgweDAwMEMwMDAwKQorI2RlZmluZSBFUENUUkxfUlhfVFlQRQkJCQkoMHgwMDAwMDAwQykKKyNkZWZpbmUgRVBDVFJMX0RBVEFfVE9HR0xFX0lOSElCSVQJCSgweDAwMDAwMDIwKQorI2RlZmluZSBFUENUUkxfVFhfRVBfVFlQRV9TSElGVAkJCSgxOCkKKyNkZWZpbmUgRVBDVFJMX1JYX0VQX1RZUEVfU0hJRlQJCQkoMikKKworI2RlZmluZSBFUENPTVBMRVRFX01BWF9FTkRQT0lOVFMJCSgxNikKKworLyogZW5kcG9pbnQgbGlzdCBhZGRyZXNzIGJpdCBtYXNrcyAqLworI2RlZmluZSBVU0JfRVBfTElTVF9BRERSRVNTX01BU0sgICAgICAgICAgICAgIDB4ZmZmZmY4MDAKKworI2RlZmluZSBQT1JUU0NYX1cxQ19CSVRTCQkJMHgyYQorI2RlZmluZSBQT1JUU0NYX1BPUlRfUkVTRVQJCQkweDAwMDAwMTAwCisjZGVmaW5lIFBPUlRTQ1hfUE9SVF9QT1dFUgkJCTB4MDAwMDEwMDAKKyNkZWZpbmUgUE9SVFNDWF9GT1JDRV9GVUxMX1NQRUVEX0NPTk5FQ1QJMHgwMTAwMDAwMAorI2RlZmluZSBQT1JUU0NYX1BBUl9YQ1ZSX1NFTEVDVAkJCTB4QzAwMDAwMDAKKyNkZWZpbmUgUE9SVFNDWF9QT1JUX0ZPUkNFX1JFU1VNRQkJMHgwMDAwMDA0MAorI2RlZmluZSBQT1JUU0NYX1BPUlRfU1VTUEVORAkJCTB4MDAwMDAwODAKKyNkZWZpbmUgUE9SVFNDWF9QT1JUX1NQRUVEX0ZVTEwJCQkweDAwMDAwMDAwCisjZGVmaW5lIFBPUlRTQ1hfUE9SVF9TUEVFRF9MT1cJCQkweDA0MDAwMDAwCisjZGVmaW5lIFBPUlRTQ1hfUE9SVF9TUEVFRF9ISUdICQkJMHgwODAwMDAwMAorI2RlZmluZSBQT1JUU0NYX1BPUlRfU1BFRURfTUFTSwkJCTB4MEMwMDAwMDAKKworLyogVVNCIE1PREUgUmVnaXN0ZXIgQml0IE1hc2tzICovCisjZGVmaW5lIFVTQk1PREVfQ1RSTF9NT0RFX0lETEUJCQkweDAwMDAwMDAwCisjZGVmaW5lIFVTQk1PREVfQ1RSTF9NT0RFX0RFVklDRQkJMHgwMDAwMDAwMgorI2RlZmluZSBVU0JNT0RFX0NUUkxfTU9ERV9IT1NUCQkJMHgwMDAwMDAwMworI2RlZmluZSBVU0JNT0RFX0NUUkxfTU9ERV9SU1YJCQkweDAwMDAwMDAxCisjZGVmaW5lIFVTQk1PREVfU0VUVVBfTE9DS19PRkYJCQkweDAwMDAwMDA4CisjZGVmaW5lIFVTQk1PREVfU1RSRUFNX0RJU0FCTEUJCQkweDAwMDAwMDEwCisKKy8qIFVTQiBTVFMgUmVnaXN0ZXIgQml0IE1hc2tzICovCisjZGVmaW5lIFVTQlNUU19JTlQJCQkweDAwMDAwMDAxCisjZGVmaW5lIFVTQlNUU19FUlIJCQkweDAwMDAwMDAyCisjZGVmaW5lIFVTQlNUU19QT1JUX0NIQU5HRQkJMHgwMDAwMDAwNAorI2RlZmluZSBVU0JTVFNfRlJNX0xTVF9ST0xMCQkweDAwMDAwMDA4CisjZGVmaW5lIFVTQlNUU19TWVNfRVJSCQkJMHgwMDAwMDAxMAorI2RlZmluZSBVU0JTVFNfSUFBCQkJMHgwMDAwMDAyMAorI2RlZmluZSBVU0JTVFNfUkVTRVQJCQkweDAwMDAwMDQwCisjZGVmaW5lIFVTQlNUU19TT0YJCQkweDAwMDAwMDgwCisjZGVmaW5lIFVTQlNUU19TVVNQRU5ECQkJMHgwMDAwMDEwMAorI2RlZmluZSBVU0JTVFNfSENfSEFMVEVECQkweDAwMDAxMDAwCisjZGVmaW5lIFVTQlNUU19SQ0wJCQkweDAwMDAyMDAwCisjZGVmaW5lIFVTQlNUU19QRVJJT0RJQ19TQ0hFRFVMRQkweDAwMDA0MDAwCisjZGVmaW5lIFVTQlNUU19BU1lOQ19TQ0hFRFVMRQkJMHgwMDAwODAwMAorCisKKy8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgQml0IE1hc2tzICovCisjZGVmaW5lIFVTQklOVFJfSU5UX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDAwMSkKKyNkZWZpbmUgVVNCSU5UUl9FUlJfSU5UX0VOICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwMDAyKQorI2RlZmluZSBVU0JJTlRSX1BPUlRfQ0hBTkdFX0RFVEVDVF9FTiAgICAgICAgICAgKDB4MDAwMDAwMDQpCisKKyNkZWZpbmUgVVNCSU5UUl9BU1lOQ19BRFZfQUFFICAgICAgICAgICAgICAgICAgICgweDAwMDAwMDIwKQorI2RlZmluZSBVU0JJTlRSX0FTWU5DX0FEVl9BQUVfRU5BQkxFICAgICAgICAgICAgKDB4MDAwMDAwMjApCisjZGVmaW5lIFVTQklOVFJfQVNZTkNfQURWX0FBRV9ESVNBQkxFICAgICAgICAgICAoMHhGRkZGRkZERikKKworI2RlZmluZSBVU0JJTlRSX1JFU0VUX0VOICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwNDApCisjZGVmaW5lIFVTQklOVFJfU09GX1VGUkFNRV9FTiAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDA4MCkKKyNkZWZpbmUgVVNCSU5UUl9ERVZJQ0VfU1VTUEVORCAgICAgICAgICAgICAgICAgICgweDAwMDAwMTAwKQorCisjZGVmaW5lIFVTQl9ERVZJQ0VfQUREUkVTU19NQVNLCQkJKDB4ZmUwMDAwMDApCisjZGVmaW5lIFVTQl9ERVZJQ0VfQUREUkVTU19CSVRfU0hJRlQJCSgyNSkKKworc3RydWN0IG12X2NhcF9yZWdzIHsKKwl1MzIJY2FwbGVuZ3RoX2hjaXZlcnNpb247CisJdTMyCWhjc3BhcmFtczsJLyogSEMgc3RydWN0dXJhbCBwYXJhbWV0ZXJzICovCisJdTMyCWhjY3BhcmFtczsJLyogSEMgQ2FwYWJpbGl0eSBQYXJhbWV0ZXJzKi8KKwl1MzIJcmVzZXJ2ZWRbNV07CisJdTMyCWRjaXZlcnNpb247CS8qIERDIHZlcnNpb24gbnVtYmVyIGFuZCByZXNlcnZlZCAxNiBiaXRzICovCisJdTMyCWRjY3BhcmFtczsJLyogREMgQ2FwYWJpbGl0eSBQYXJhbWV0ZXJzICovCit9OworCitzdHJ1Y3QgbXZfb3BfcmVncyB7CisJdTMyCXVzYmNtZDsJCS8qIENvbW1hbmQgcmVnaXN0ZXIgKi8KKwl1MzIJdXNic3RzOwkJLyogU3RhdHVzIHJlZ2lzdGVyICovCisJdTMyCXVzYmludHI7CS8qIEludGVycnVwdCBlbmFibGUgKi8KKwl1MzIJZnJpbmRleDsJLyogRnJhbWUgaW5kZXggKi8KKwl1MzIJcmVzZXJ2ZWQxWzFdOworCXUzMglkZXZpY2VhZGRyOwkvKiBEZXZpY2UgQWRkcmVzcyAqLworCXUzMgllcGxpc3RhZGRyOwkvKiBFbmRwb2ludCBMaXN0IEFkZHJlc3MgKi8KKwl1MzIJdHRjdHJsOwkJLyogSE9TVCBUVCBzdGF0dXMgYW5kIGNvbnRyb2wgKi8KKwl1MzIJYnVyc3RzaXplOwkvKiBQcm9ncmFtbWFibGUgQnVyc3QgU2l6ZSAqLworCXUzMgl0eGZpbGx0dW5pbmc7CS8qIEhvc3QgVHJhbnNtaXQgUHJlLUJ1ZmZlciBQYWNrZXQgVHVuaW5nICovCisJdTMyCXJlc2VydmVkWzRdOworCXUzMgllcG5hazsJCS8qIEVuZHBvaW50IE5BSyAqLworCXUzMgllcG5ha2VuOwkvKiBFbmRwb2ludCBOQUsgRW5hYmxlICovCisJdTMyCWNvbmZpZ2ZsYWc7CS8qIENvbmZpZ3VyZWQgRmxhZyByZWdpc3RlciAqLworCXUzMglwb3J0c2NbVlVTQkhTX01BWF9QT1JUU107IC8qIFBvcnQgU3RhdHVzL0NvbnRyb2wgeCwgeCA9IDEuLjggKi8KKwl1MzIJb3Rnc2M7CisJdTMyCXVzYm1vZGU7CS8qIFVTQiBIb3N0L0RldmljZSBtb2RlICovCisJdTMyCWVwc2V0dXBzdGF0OwkvKiBFbmRwb2ludCBTZXR1cCBTdGF0dXMgKi8KKwl1MzIJZXBwcmltZTsJLyogRW5kcG9pbnQgSW5pdGlhbGl6ZSAqLworCXUzMgllcGZsdXNoOwkvKiBFbmRwb2ludCBEZS1pbml0aWFsaXplICovCisJdTMyCWVwc3RhdHVzOwkvKiBFbmRwb2ludCBTdGF0dXMgKi8KKwl1MzIJZXBjb21wbGV0ZTsJLyogRW5kcG9pbnQgSW50ZXJydXB0IE9uIENvbXBsZXRlICovCisJdTMyCWVwY3RybHhbMTZdOwkvKiBFbmRwb2ludCBDb250cm9sLCB3aGVyZSB4ID0gMC4uIDE1ICovCisJdTMyCW1jcjsJCS8qIE11eCBDb250cm9sICovCisJdTMyCWlzcjsJCS8qIEludGVycnVwdCBTdGF0dXMgKi8KKwl1MzIJaWVyOwkJLyogSW50ZXJydXB0IEVuYWJsZSAqLworfTsKKworc3RydWN0IG12X3VkYyB7CisJc3RydWN0IHVzYl9nYWRnZXQJCWdhZGdldDsKKwlzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIJKmRyaXZlcjsKKwlzcGlubG9ja190CQkJbG9jazsKKwlzdHJ1Y3QgY29tcGxldGlvbgkJKmRvbmU7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZQkJKmRldjsKKwlpbnQJCQkJaXJxOworCisJc3RydWN0IG12X2NhcF9yZWdzIF9faW9tZW0JKmNhcF9yZWdzOworCXN0cnVjdCBtdl9vcF9yZWdzIF9faW9tZW0JKm9wX3JlZ3M7CisJdW5zaWduZWQgaW50CQkJcGh5X3JlZ3M7CisJdW5zaWduZWQgaW50CQkJbWF4X2VwczsKKwlzdHJ1Y3QgbXZfZHFoCQkJKmVwX2RxaDsKKwlzaXplX3QJCQkJZXBfZHFoX3NpemU7CisJZG1hX2FkZHJfdAkJCWVwX2RxaF9kbWE7CisKKwlzdHJ1Y3QgZG1hX3Bvb2wJCQkqZHRkX3Bvb2w7CisJc3RydWN0IG12X2VwCQkJKmVwczsKKworCXN0cnVjdCBtdl9kdGQJCQkqZHRkX2hlYWQ7CisJc3RydWN0IG12X2R0ZAkJCSpkdGRfdGFpbDsKKwl1bnNpZ25lZCBpbnQJCQlkdGRfZW50cmllczsKKworCXN0cnVjdCBtdl9yZXEJCQkqc3RhdHVzX3JlcTsKKwlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0CQlsb2NhbF9zZXR1cF9idWZmOworCisJdW5zaWduZWQgaW50CQlyZXN1bWVfc3RhdGU7CS8qIFVTQiBzdGF0ZSB0byByZXN1bWUgKi8KKwl1bnNpZ25lZCBpbnQJCXVzYl9zdGF0ZTsJLyogVVNCIGN1cnJlbnQgc3RhdGUgKi8KKwl1bnNpZ25lZCBpbnQJCWVwMF9zdGF0ZTsJLyogRW5kcG9pbnQgemVybyBzdGF0ZSAqLworCXVuc2lnbmVkIGludAkJZXAwX2RpcjsKKworCXVuc2lnbmVkIGludAkJZGV2X2FkZHI7CisKKwlpbnQJCQllcnJvcnM7CisJdW5zaWduZWQJCXNvZnRjb25uZWN0OjEsCisJCQkJdmJ1c19hY3RpdmU6MSwKKwkJCQlyZW1vdGVfd2FrZXVwOjEsCisJCQkJc29mdGNvbm5lY3RlZDoxLAorCQkJCWZvcmNlX2ZzOjE7CisJc3RydWN0IGNsawkJKmNsazsKK307CisKKy8qIGVuZHBvaW50IGRhdGEgc3RydWN0dXJlICovCitzdHJ1Y3QgbXZfZXAgeworCXN0cnVjdCB1c2JfZXAJCWVwOworCXN0cnVjdCBtdl91ZGMJCSp1ZGM7CisJc3RydWN0IGxpc3RfaGVhZAlxdWV1ZTsKKwlzdHJ1Y3QgbXZfZHFoCQkqZHFoOworCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgkqZGVzYzsKKwl1MzIJCQlkaXJlY3Rpb247CisJY2hhcgkJCW5hbWVbMTRdOworCXVuc2lnbmVkCQlzdG9wcGVkOjEsCisJCQkJd2VkZ2U6MSwKKwkJCQllcF90eXBlOjIsCisJCQkJZXBfbnVtOjg7Cit9OworCisvKiByZXF1ZXN0IGRhdGEgc3RydWN0dXJlICovCitzdHJ1Y3QgbXZfcmVxIHsKKwlzdHJ1Y3QgdXNiX3JlcXVlc3QJcmVxOworCXN0cnVjdCBtdl9kdGQJCSpkdGQsICpoZWFkLCAqdGFpbDsKKwlzdHJ1Y3QgbXZfZXAJCSplcDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXF1ZXVlOworCXVuc2lnbmVkCQlkdGRfY291bnQ7CisJdW5zaWduZWQJCW1hcHBlZDoxOworfTsKKworI2RlZmluZSBFUF9RVUVVRV9IRUFEX01VTFRfUE9TCQkJMzAKKyNkZWZpbmUgRVBfUVVFVUVfSEVBRF9aTFRfU0VMCQkJMHgyMDAwMDAwMAorI2RlZmluZSBFUF9RVUVVRV9IRUFEX01BWF9QS1RfTEVOX1BPUwkJMTYKKyNkZWZpbmUgRVBfUVVFVUVfSEVBRF9NQVhfUEtUX0xFTihlcF9pbmZvKQkoKChlcF9pbmZvKT4+MTYpJjB4MDdmZikKKyNkZWZpbmUgRVBfUVVFVUVfSEVBRF9JT1MJCQkweDAwMDA4MDAwCisjZGVmaW5lIEVQX1FVRVVFX0hFQURfTkVYVF9URVJNSU5BVEUJCTB4MDAwMDAwMDEKKyNkZWZpbmUgRVBfUVVFVUVfSEVBRF9JT0MJCQkweDAwMDA4MDAwCisjZGVmaW5lIEVQX1FVRVVFX0hFQURfTVVMVE8JCQkweDAwMDAwQzAwCisjZGVmaW5lIEVQX1FVRVVFX0hFQURfU1RBVFVTX0hBTFQJCTB4MDAwMDAwNDAKKyNkZWZpbmUgRVBfUVVFVUVfSEVBRF9TVEFUVVNfQUNUSVZFCQkweDAwMDAwMDgwCisjZGVmaW5lIEVQX1FVRVVFX0NVUlJFTlRfT0ZGU0VUX01BU0sJCTB4MDAwMDBGRkYKKyNkZWZpbmUgRVBfUVVFVUVfSEVBRF9ORVhUX1BPSU5URVJfTUFTSwkJMHhGRkZGRkZFMAorI2RlZmluZSBFUF9RVUVVRV9GUklOREVYX01BU0sJCQkweDAwMDAwN0ZGCisjZGVmaW5lIEVQX01BWF9MRU5HVEhfVFJBTlNGRVIJCQkweDQwMDAKKworc3RydWN0IG12X2RxaCB7CisJLyogQml0cyAxNi4uMjYgQml0IDE1IGlzIEludGVycnVwdCBPbiBTZXR1cCAqLworCXUzMgltYXhfcGFja2V0X2xlbmd0aDsKKwl1MzIJY3Vycl9kdGRfcHRyOwkJLyogQ3VycmVudCBkVEQgUG9pbnRlciAqLworCXUzMgluZXh0X2R0ZF9wdHI7CQkvKiBOZXh0IGRURCBQb2ludGVyICovCisJLyogVG90YWwgYnl0ZXMgKDE2Li4zMCksIElPQyAoMTUpLCBJTlQgKDgpLCBTVFMgKDAtNykgKi8KKwl1MzIJc2l6ZV9pb2NfaW50X3N0czsKKwl1MzIJYnVmZl9wdHIwOwkJLyogQnVmZmVyIHBvaW50ZXIgUGFnZSAwICgxMi0zMSkgKi8KKwl1MzIJYnVmZl9wdHIxOwkJLyogQnVmZmVyIHBvaW50ZXIgUGFnZSAxICgxMi0zMSkgKi8KKwl1MzIJYnVmZl9wdHIyOwkJLyogQnVmZmVyIHBvaW50ZXIgUGFnZSAyICgxMi0zMSkgKi8KKwl1MzIJYnVmZl9wdHIzOwkJLyogQnVmZmVyIHBvaW50ZXIgUGFnZSAzICgxMi0zMSkgKi8KKwl1MzIJYnVmZl9wdHI0OwkJLyogQnVmZmVyIHBvaW50ZXIgUGFnZSA0ICgxMi0zMSkgKi8KKwl1MzIJcmVzZXJ2ZWQxOworCS8qIDggYnl0ZXMgb2Ygc2V0dXAgZGF0YSB0aGF0IGZvbGxvd3MgdGhlIFNldHVwIFBJRCAqLworCXU4CXNldHVwX2J1ZmZlcls4XTsKKwl1MzIJcmVzZXJ2ZWQyWzRdOworfTsKKworCisjZGVmaW5lIERURF9ORVhUX1RFUk1JTkFURQkJKDB4MDAwMDAwMDEpCisjZGVmaW5lIERURF9JT0MJCQkJKDB4MDAwMDgwMDApCisjZGVmaW5lIERURF9TVEFUVVNfQUNUSVZFCQkoMHgwMDAwMDA4MCkKKyNkZWZpbmUgRFREX1NUQVRVU19IQUxURUQJCSgweDAwMDAwMDQwKQorI2RlZmluZSBEVERfU1RBVFVTX0RBVEFfQlVGRl9FUlIJKDB4MDAwMDAwMjApCisjZGVmaW5lIERURF9TVEFUVVNfVFJBTlNBQ1RJT05fRVJSCSgweDAwMDAwMDA4KQorI2RlZmluZSBEVERfUkVTRVJWRURfRklFTERTCQkoMHgwMDAwN0YwMCkKKyNkZWZpbmUgRFREX0VSUk9SX01BU0sJCQkoMHg2OCkKKyNkZWZpbmUgRFREX0FERFJfTUFTSwkJCSgweEZGRkZGRkUwKQorI2RlZmluZSBEVERfUEFDS0VUX1NJWkUJCQkweDdGRkYwMDAwCisjZGVmaW5lIERURF9MRU5HVEhfQklUX1BPUwkJKDE2KQorCitzdHJ1Y3QgbXZfZHRkIHsKKwl1MzIJZHRkX25leHQ7CisJdTMyCXNpemVfaW9jX3N0czsKKwl1MzIJYnVmZl9wdHIwOwkJLyogQnVmZmVyIHBvaW50ZXIgUGFnZSAwICovCisJdTMyCWJ1ZmZfcHRyMTsJCS8qIEJ1ZmZlciBwb2ludGVyIFBhZ2UgMSAqLworCXUzMglidWZmX3B0cjI7CQkvKiBCdWZmZXIgcG9pbnRlciBQYWdlIDIgKi8KKwl1MzIJYnVmZl9wdHIzOwkJLyogQnVmZmVyIHBvaW50ZXIgUGFnZSAzICovCisJdTMyCWJ1ZmZfcHRyNDsJCS8qIEJ1ZmZlciBwb2ludGVyIFBhZ2UgNCAqLworCXUzMglzY3JhdGNoX3B0cjsKKwkvKiAzMiBieXRlcyAqLworCWRtYV9hZGRyX3QgdGRfZG1hOwkJLyogZG1hIGFkZHJlc3MgZm9yIHRoaXMgdGQgKi8KKwlzdHJ1Y3QgbXZfZHRkICpuZXh0X2R0ZF92aXJ0OworfTsKKworZXh0ZXJuIGludCBtdl91ZGNfcGh5X2luaXQodW5zaWduZWQgaW50IGJhc2UpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9tdl91ZGNfY29yZS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L212X3VkY19jb3JlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU0NjhhNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9tdl91ZGNfY29yZS5jCkBAIC0wLDAgKzEsMjE0OSBAQAorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvZG1hcG9vbC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvY2g5Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiL2dhZGdldC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi9vdGcuaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKworI2luY2x1ZGUgIm12X3VkYy5oIgorCisjZGVmaW5lIERSSVZFUl9ERVNDCQkiTWFydmVsbCBQWEEgVVNCIERldmljZSBDb250cm9sbGVyIGRyaXZlciIKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04JCSI4IE5vdiAyMDEwIgorCisjZGVmaW5lIGVwX2RpcihlcCkJKCgoZXApLT5lcF9udW0gPT0gMCkgPyBcCisJCQkJKChlcCktPnVkYy0+ZXAwX2RpcikgOiAoKGVwKS0+ZGlyZWN0aW9uKSkKKworLyogdGltZW91dCB2YWx1ZSAtLSB1c2VjICovCisjZGVmaW5lIFJFU0VUX1RJTUVPVVQJCTEwMDAwCisjZGVmaW5lIEZMVVNIX1RJTUVPVVQJCTEwMDAwCisjZGVmaW5lIEVQU1RBVFVTX1RJTUVPVVQJMTAwMDAKKyNkZWZpbmUgUFJJTUVfVElNRU9VVAkJMTAwMDAKKyNkZWZpbmUgUkVBRFNBRkVfVElNRU9VVAkxMDAwCisjZGVmaW5lIERURF9USU1FT1VUCQkxMDAwCisKKyNkZWZpbmUgTE9PUFNfVVNFQ19TSElGVAk0CisjZGVmaW5lIExPT1BTX1VTRUMJCSgxIDw8IExPT1BTX1VTRUNfU0hJRlQpCisjZGVmaW5lIExPT1BTKHRpbWVvdXQpCQkoKHRpbWVvdXQpID4+IExPT1BTX1VTRUNfU0hJRlQpCisKK3N0YXRpYyBjb25zdCBjaGFyIGRyaXZlcl9uYW1lW10gPSAibXZfdWRjIjsKK3N0YXRpYyBjb25zdCBjaGFyIGRyaXZlcl9kZXNjW10gPSBEUklWRVJfREVTQzsKKworLyogY29udHJvbGxlciBkZXZpY2UgZ2xvYmFsIHZhcmlhYmxlICovCitzdGF0aWMgc3RydWN0IG12X3VkYwkqdGhlX2NvbnRyb2xsZXI7CitpbnQgbXZfdXNiX290Z3NjOworCitzdGF0aWMgdm9pZCBudWtlKHN0cnVjdCBtdl9lcCAqZXAsIGludCBzdGF0dXMpOworCisvKiBmb3IgZW5kcG9pbnQgMCBvcGVyYXRpb25zICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIG12X2VwMF9kZXNjID0geworCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCisJLmJFbmRwb2ludEFkZHJlc3MgPQkwLAorCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQ09OVFJPTCwKKwkud01heFBhY2tldFNpemUgPQlFUDBfTUFYX1BLVF9TSVpFLAorfTsKKworc3RhdGljIHZvaWQgZXAwX3Jlc2V0KHN0cnVjdCBtdl91ZGMgKnVkYykKK3sKKwlzdHJ1Y3QgbXZfZXAgKmVwOworCXUzMiBlcGN0cmx4OworCWludCBpID0gMDsKKworCS8qIGVwMCBpbiBhbmQgb3V0ICovCisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQllcCA9ICZ1ZGMtPmVwc1tpXTsKKwkJZXAtPnVkYyA9IHVkYzsKKworCQkvKiBlcDAgZFFIICovCisJCWVwLT5kcWggPSAmdWRjLT5lcF9kcWhbaV07CisKKwkJLyogY29uZmlndXJlIGVwMCBlbmRwb2ludCBjYXBhYmlsaXRpZXMgaW4gZFFIICovCisJCWVwLT5kcWgtPm1heF9wYWNrZXRfbGVuZ3RoID0KKwkJCShFUDBfTUFYX1BLVF9TSVpFIDw8IEVQX1FVRVVFX0hFQURfTUFYX1BLVF9MRU5fUE9TKQorCQkJfCBFUF9RVUVVRV9IRUFEX0lPUzsKKworCQllcGN0cmx4ID0gcmVhZGwoJnVkYy0+b3BfcmVncy0+ZXBjdHJseFswXSk7CisJCWlmIChpKSB7CS8qIFRYICovCisJCQllcGN0cmx4IHw9IEVQQ1RSTF9UWF9FTkFCTEUgfCBFUENUUkxfVFhfREFUQV9UT0dHTEVfUlNUCisJCQkJfCAoVVNCX0VORFBPSU5UX1hGRVJfQ09OVFJPTAorCQkJCQk8PCBFUENUUkxfVFhfRVBfVFlQRV9TSElGVCk7CisKKwkJfSBlbHNlIHsJLyogUlggKi8KKwkJCWVwY3RybHggfD0gRVBDVFJMX1JYX0VOQUJMRSB8IEVQQ1RSTF9SWF9EQVRBX1RPR0dMRV9SU1QKKwkJCQl8IChVU0JfRU5EUE9JTlRfWEZFUl9DT05UUk9MCisJCQkJCTw8IEVQQ1RSTF9SWF9FUF9UWVBFX1NISUZUKTsKKwkJfQorCisJCXdyaXRlbChlcGN0cmx4LCAmdWRjLT5vcF9yZWdzLT5lcGN0cmx4WzBdKTsKKwl9Cit9CisKKy8qIHByb3RvY29sIGVwMCBzdGFsbCwgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGNsZWFyZWQgb24gbmV3IHRyYW5zYWN0aW9uICovCitzdGF0aWMgdm9pZCBlcDBfc3RhbGwoc3RydWN0IG12X3VkYyAqdWRjKQoreworCXUzMgllcGN0cmx4OworCisJLyogc2V0IFRYIGFuZCBSWCB0byBzdGFsbCAqLworCWVwY3RybHggPSByZWFkbCgmdWRjLT5vcF9yZWdzLT5lcGN0cmx4WzBdKTsKKwllcGN0cmx4IHw9IEVQQ1RSTF9SWF9FUF9TVEFMTCB8IEVQQ1RSTF9UWF9FUF9TVEFMTDsKKwl3cml0ZWwoZXBjdHJseCwgJnVkYy0+b3BfcmVncy0+ZXBjdHJseFswXSk7CisKKwkvKiB1cGRhdGUgZXAwIHN0YXRlICovCisJdWRjLT5lcDBfc3RhdGUgPSBXQUlUX0ZPUl9TRVRVUDsKKwl1ZGMtPmVwMF9kaXIgPSBFUF9ESVJfT1VUOworfQorCitzdGF0aWMgaW50IHByb2Nlc3NfZXBfcmVxKHN0cnVjdCBtdl91ZGMgKnVkYywgaW50IGluZGV4LAorCXN0cnVjdCBtdl9yZXEgKmN1cnJfcmVxKQoreworCXN0cnVjdCBtdl9kdGQJKmN1cnJfZHRkOworCXN0cnVjdCBtdl9kcWgJKmN1cnJfZHFoOworCWludCB0ZF9jb21wbGV0ZSwgYWN0dWFsLCByZW1haW5pbmdfbGVuZ3RoOworCWludCBpLCBkaXJlY3Rpb247CisJaW50IHJldHZhbCA9IDA7CisJdTMyIGVycm9yczsKKworCWN1cnJfZHFoID0gJnVkYy0+ZXBfZHFoW2luZGV4XTsKKwlkaXJlY3Rpb24gPSBpbmRleCAlIDI7CisKKwljdXJyX2R0ZCA9IGN1cnJfcmVxLT5oZWFkOworCXRkX2NvbXBsZXRlID0gMDsKKwlhY3R1YWwgPSBjdXJyX3JlcS0+cmVxLmxlbmd0aDsKKworCWZvciAoaSA9IDA7IGkgPCBjdXJyX3JlcS0+ZHRkX2NvdW50OyBpKyspIHsKKwkJaWYgKGN1cnJfZHRkLT5zaXplX2lvY19zdHMgJiBEVERfU1RBVFVTX0FDVElWRSkgeworCQkJZGV2X2RiZygmdWRjLT5kZXYtPmRldiwgIiVzLCBkVEQgbm90IGNvbXBsZXRlZFxuIiwKKwkJCQl1ZGMtPmVwc1tpbmRleF0ubmFtZSk7CisJCQlyZXR1cm4gMTsKKwkJfQorCisJCWVycm9ycyA9IGN1cnJfZHRkLT5zaXplX2lvY19zdHMgJiBEVERfRVJST1JfTUFTSzsKKwkJaWYgKCFlcnJvcnMpIHsKKwkJCXJlbWFpbmluZ19sZW5ndGggKz0KKwkJCQkoY3Vycl9kdGQtPnNpemVfaW9jX3N0cwkmIERURF9QQUNLRVRfU0laRSkKKwkJCQkJPj4gRFREX0xFTkdUSF9CSVRfUE9TOworCQkJYWN0dWFsIC09IHJlbWFpbmluZ19sZW5ndGg7CisJCX0gZWxzZSB7CisJCQlkZXZfaW5mbygmdWRjLT5kZXYtPmRldiwKKwkJCQkiY29tcGxldGVfdHIgZXJyb3I6IGVwPSVkICVzOiBlcnJvciA9IDB4JXhcbiIsCisJCQkJaW5kZXggPj4gMSwgZGlyZWN0aW9uID8gIlNFTkQiIDogIlJFQ1YiLAorCQkJCWVycm9ycyk7CisJCQlpZiAoZXJyb3JzICYgRFREX1NUQVRVU19IQUxURUQpIHsKKwkJCQkvKiBDbGVhciB0aGUgZXJyb3JzIGFuZCBIYWx0IGNvbmRpdGlvbiAqLworCQkJCWN1cnJfZHFoLT5zaXplX2lvY19pbnRfc3RzICY9IH5lcnJvcnM7CisJCQkJcmV0dmFsID0gLUVQSVBFOworCQkJfSBlbHNlIGlmIChlcnJvcnMgJiBEVERfU1RBVFVTX0RBVEFfQlVGRl9FUlIpIHsKKwkJCQlyZXR2YWwgPSAtRVBST1RPOworCQkJfSBlbHNlIGlmIChlcnJvcnMgJiBEVERfU1RBVFVTX1RSQU5TQUNUSU9OX0VSUikgeworCQkJCXJldHZhbCA9IC1FSUxTRVE7CisJCQl9CisJCX0KKwkJaWYgKGkgIT0gY3Vycl9yZXEtPmR0ZF9jb3VudCAtIDEpCisJCQljdXJyX2R0ZCA9IChzdHJ1Y3QgbXZfZHRkICopY3Vycl9kdGQtPm5leHRfZHRkX3ZpcnQ7CisJfQorCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwljdXJyX3JlcS0+cmVxLmFjdHVhbCA9IGFjdHVhbDsKKworCXJldHVybiAwOworfQorCisvKgorICogZG9uZSgpIC0gcmV0aXJlIGEgcmVxdWVzdDsgY2FsbGVyIGJsb2NrZWQgaXJxcworICogQHN0YXR1cyA6IHJlcXVlc3Qgc3RhdHVzIHRvIGJlIHNldCwgb25seSB3b3JrcyB3aGVuCisgKiByZXF1ZXN0IGlzIHN0aWxsIGluIHByb2dyZXNzLgorICovCitzdGF0aWMgdm9pZCBkb25lKHN0cnVjdCBtdl9lcCAqZXAsIHN0cnVjdCBtdl9yZXEgKnJlcSwgaW50IHN0YXR1cykKK3sKKwlzdHJ1Y3QgbXZfdWRjICp1ZGMgPSBOVUxMOworCXVuc2lnbmVkIGNoYXIgc3RvcHBlZCA9IGVwLT5zdG9wcGVkOworCXN0cnVjdCBtdl9kdGQgKmN1cnJfdGQsICpuZXh0X3RkOworCWludCBqOworCisJdWRjID0gKHN0cnVjdCBtdl91ZGMgKillcC0+dWRjOworCS8qIFJlbW92ZWQgdGhlIHJlcSBmcm9tIGZzbF9lcC0+cXVldWUgKi8KKwlsaXN0X2RlbF9pbml0KCZyZXEtPnF1ZXVlKTsKKworCS8qIHJlcS5zdGF0dXMgc2hvdWxkIGJlIHNldCBhcyAtRUlOUFJPR1JFU1MgaW4gZXBfcXVldWUoKSAqLworCWlmIChyZXEtPnJlcS5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKQorCQlyZXEtPnJlcS5zdGF0dXMgPSBzdGF0dXM7CisJZWxzZQorCQlzdGF0dXMgPSByZXEtPnJlcS5zdGF0dXM7CisKKwkvKiBGcmVlIGR0ZCBmb3IgdGhlIHJlcXVlc3QgKi8KKwluZXh0X3RkID0gcmVxLT5oZWFkOworCWZvciAoaiA9IDA7IGogPCByZXEtPmR0ZF9jb3VudDsgaisrKSB7CisJCWN1cnJfdGQgPSBuZXh0X3RkOworCQlpZiAoaiAhPSByZXEtPmR0ZF9jb3VudCAtIDEpCisJCQluZXh0X3RkID0gY3Vycl90ZC0+bmV4dF9kdGRfdmlydDsKKwkJZG1hX3Bvb2xfZnJlZSh1ZGMtPmR0ZF9wb29sLCBjdXJyX3RkLCBjdXJyX3RkLT50ZF9kbWEpOworCX0KKworCWlmIChyZXEtPm1hcHBlZCkgeworCQlkbWFfdW5tYXBfc2luZ2xlKGVwLT51ZGMtPmdhZGdldC5kZXYucGFyZW50LAorCQkJcmVxLT5yZXEuZG1hLCByZXEtPnJlcS5sZW5ndGgsCisJCQkoKGVwX2RpcihlcCkgPT0gRVBfRElSX0lOKSA/CisJCQkJRE1BX1RPX0RFVklDRSA6IERNQV9GUk9NX0RFVklDRSkpOworCQlyZXEtPnJlcS5kbWEgPSBETUFfQUREUl9JTlZBTElEOworCQlyZXEtPm1hcHBlZCA9IDA7CisJfSBlbHNlCisJCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGVwLT51ZGMtPmdhZGdldC5kZXYucGFyZW50LAorCQkJcmVxLT5yZXEuZG1hLCByZXEtPnJlcS5sZW5ndGgsCisJCQkoKGVwX2RpcihlcCkgPT0gRVBfRElSX0lOKSA/CisJCQkJRE1BX1RPX0RFVklDRSA6IERNQV9GUk9NX0RFVklDRSkpOworCisJaWYgKHN0YXR1cyAmJiAoc3RhdHVzICE9IC1FU0hVVERPV04pKQorCQlkZXZfaW5mbygmdWRjLT5kZXYtPmRldiwgImNvbXBsZXRlICVzIHJlcSAlcCBzdGF0ICVkIGxlbiAldS8ldSIsCisJCQllcC0+ZXAubmFtZSwgJnJlcS0+cmVxLCBzdGF0dXMsCisJCQlyZXEtPnJlcS5hY3R1YWwsIHJlcS0+cmVxLmxlbmd0aCk7CisKKwllcC0+c3RvcHBlZCA9IDE7CisKKwlzcGluX3VubG9jaygmZXAtPnVkYy0+bG9jayk7CisJLyoKKwkgKiBjb21wbGV0ZSgpIGlzIGZyb20gZ2FkZ2V0IGxheWVyLAorCSAqIGVnIGZzZy0+YnVsa19pbl9jb21wbGV0ZSgpCisJICovCisJaWYgKHJlcS0+cmVxLmNvbXBsZXRlKQorCQlyZXEtPnJlcS5jb21wbGV0ZSgmZXAtPmVwLCAmcmVxLT5yZXEpOworCisJc3Bpbl9sb2NrKCZlcC0+dWRjLT5sb2NrKTsKKwllcC0+c3RvcHBlZCA9IHN0b3BwZWQ7Cit9CisKK3N0YXRpYyBpbnQgcXVldWVfZHRkKHN0cnVjdCBtdl9lcCAqZXAsIHN0cnVjdCBtdl9yZXEgKnJlcSkKK3sKKwl1MzIgdG1wLCBlcHN0YXR1cywgYml0X3BvcywgZGlyZWN0aW9uOworCXN0cnVjdCBtdl91ZGMgKnVkYzsKKwlzdHJ1Y3QgbXZfZHFoICpkcWg7CisJdW5zaWduZWQgaW50IGxvb3BzOworCWludCByZWFkc2FmZSwgcmV0dmFsID0gMDsKKworCXVkYyA9IGVwLT51ZGM7CisJZGlyZWN0aW9uID0gZXBfZGlyKGVwKTsKKwlkcWggPSAmKHVkYy0+ZXBfZHFoW2VwLT5lcF9udW0gKiAyICsgZGlyZWN0aW9uXSk7CisJYml0X3BvcyA9IDEgPDwgKCgoZGlyZWN0aW9uID09IEVQX0RJUl9PVVQpID8gMCA6IDE2KSArIGVwLT5lcF9udW0pOworCisJLyogY2hlY2sgaWYgdGhlIHBpcGUgaXMgZW1wdHkgKi8KKwlpZiAoIShsaXN0X2VtcHR5KCZlcC0+cXVldWUpKSkgeworCQlzdHJ1Y3QgbXZfcmVxICpsYXN0cmVxOworCQlsYXN0cmVxID0gbGlzdF9lbnRyeShlcC0+cXVldWUucHJldiwgc3RydWN0IG12X3JlcSwgcXVldWUpOworCQlsYXN0cmVxLT50YWlsLT5kdGRfbmV4dCA9CisJCQlyZXEtPmhlYWQtPnRkX2RtYSAmIEVQX1FVRVVFX0hFQURfTkVYVF9QT0lOVEVSX01BU0s7CisJCWlmIChyZWFkbCgmdWRjLT5vcF9yZWdzLT5lcHByaW1lKSAmIGJpdF9wb3MpIHsKKwkJCWxvb3BzID0gTE9PUFMoUFJJTUVfVElNRU9VVCk7CisJCQl3aGlsZSAocmVhZGwoJnVkYy0+b3BfcmVncy0+ZXBwcmltZSkgJiBiaXRfcG9zKSB7CisJCQkJaWYgKGxvb3BzID09IDApIHsKKwkJCQkJcmV0dmFsID0gLUVUSU1FOworCQkJCQlnb3RvIGRvbmU7CisJCQkJfQorCQkJCXVkZWxheShMT09QU19VU0VDKTsKKwkJCQlsb29wcy0tOworCQkJfQorCQkJaWYgKHJlYWRsKCZ1ZGMtPm9wX3JlZ3MtPmVwc3RhdHVzKSAmIGJpdF9wb3MpCisJCQkJZ290byBkb25lOworCQl9CisJCXJlYWRzYWZlID0gMDsKKwkJbG9vcHMgPSBMT09QUyhSRUFEU0FGRV9USU1FT1VUKTsKKwkJd2hpbGUgKHJlYWRzYWZlID09IDApIHsKKwkJCWlmIChsb29wcyA9PSAwKSB7CisJCQkJcmV0dmFsID0gLUVUSU1FOworCQkJCWdvdG8gZG9uZTsKKwkJCX0KKwkJCS8qIHN0YXJ0IHdpdGggc2V0dGluZyB0aGUgc2VtYXBob3JlcyAqLworCQkJdG1wID0gcmVhZGwoJnVkYy0+b3BfcmVncy0+dXNiY21kKTsKKwkJCXRtcCB8PSBVU0JDTURfQVREVFdfVFJJUFdJUkVfU0VUOworCQkJd3JpdGVsKHRtcCwgJnVkYy0+b3BfcmVncy0+dXNiY21kKTsKKworCQkJLyogcmVhZCB0aGUgZW5kcG9pbnQgc3RhdHVzICovCisJCQllcHN0YXR1cyA9IHJlYWRsKCZ1ZGMtPm9wX3JlZ3MtPmVwc3RhdHVzKSAmIGJpdF9wb3M7CisKKwkJCS8qCisJCQkgKiBSZXJlYWQgdGhlIEFURFRXIHNlbWFwaG9yZSBiaXQgdG8gY2hlY2sgaWYgaXQgaXMKKwkJCSAqIGNsZWFyZWQuIFdoZW4gaGFyZHdhcmUgc2VlIGEgaGF6YXJkLCBpdCB3aWxsIGNsZWFyCisJCQkgKiB0aGUgYml0IG9yIGVsc2Ugd2UgcmVtYWluIHNldCB0byAxIGFuZCB3ZSBjYW4KKwkJCSAqIHByb2NlZWQgd2l0aCBwcmltaW5nIG9mIGVuZHBvaW50IGlmIG5vdCBhbHJlYWR5CisJCQkgKiBwcmltZWQuCisJCQkgKi8KKwkJCWlmIChyZWFkbCgmdWRjLT5vcF9yZWdzLT51c2JjbWQpCisJCQkJJiBVU0JDTURfQVREVFdfVFJJUFdJUkVfU0VUKSB7CisJCQkJcmVhZHNhZmUgPSAxOworCQkJfQorCQkJbG9vcHMtLTsKKwkJCXVkZWxheShMT09QU19VU0VDKTsKKwkJfQorCisJCS8qIENsZWFyIHRoZSBzZW1hcGhvcmUgKi8KKwkJdG1wID0gcmVhZGwoJnVkYy0+b3BfcmVncy0+dXNiY21kKTsKKwkJdG1wICY9IFVTQkNNRF9BVERUV19UUklQV0lSRV9DTEVBUjsKKwkJd3JpdGVsKHRtcCwgJnVkYy0+b3BfcmVncy0+dXNiY21kKTsKKworCQkvKiBJZiBlbmRwb2ludCBpcyBub3QgYWN0aXZlLCB3ZSBhY3RpdmF0ZSBpdCBub3cuICovCisJCWlmICghZXBzdGF0dXMpIHsKKwkJCWlmIChkaXJlY3Rpb24gPT0gRVBfRElSX0lOKSB7CisJCQkJc3RydWN0IG12X2R0ZCAqY3Vycl9kdGQgPSBkbWFfdG9fdmlydCgKKwkJCQkJJnVkYy0+ZGV2LT5kZXYsIGRxaC0+Y3Vycl9kdGRfcHRyKTsKKworCQkJCWxvb3BzID0gTE9PUFMoRFREX1RJTUVPVVQpOworCQkJCXdoaWxlIChjdXJyX2R0ZC0+c2l6ZV9pb2Nfc3RzCisJCQkJCSYgRFREX1NUQVRVU19BQ1RJVkUpIHsKKwkJCQkJaWYgKGxvb3BzID09IDApIHsKKwkJCQkJCXJldHZhbCA9IC1FVElNRTsKKwkJCQkJCWdvdG8gZG9uZTsKKwkJCQkJfQorCQkJCQlsb29wcy0tOworCQkJCQl1ZGVsYXkoTE9PUFNfVVNFQyk7CisJCQkJfQorCQkJfQorCQkJLyogTm8gb3RoZXIgdHJhbnNmZXJzIG9uIHRoZSBxdWV1ZSAqLworCisJCQkvKiBXcml0ZSBkUUggbmV4dCBwb2ludGVyIGFuZCB0ZXJtaW5hdGUgYml0IHRvIDAgKi8KKwkJCWRxaC0+bmV4dF9kdGRfcHRyID0gcmVxLT5oZWFkLT50ZF9kbWEKKwkJCQkmIEVQX1FVRVVFX0hFQURfTkVYVF9QT0lOVEVSX01BU0s7CisJCQlkcWgtPnNpemVfaW9jX2ludF9zdHMgPSAwOworCisJCQkvKgorCQkJICogRW5zdXJlIHRoYXQgdXBkYXRlcyB0byB0aGUgUUggd2lsbAorCQkJICogb2NjdXJlIGJlZm9yZSBwcmltaW5nLgorCQkJICovCisJCQl3bWIoKTsKKworCQkJLyogUHJpbWUgdGhlIEVuZHBvaW50ICovCisJCQl3cml0ZWwoYml0X3BvcywgJnVkYy0+b3BfcmVncy0+ZXBwcmltZSk7CisJCX0KKwl9IGVsc2UgeworCQkvKiBXcml0ZSBkUUggbmV4dCBwb2ludGVyIGFuZCB0ZXJtaW5hdGUgYml0IHRvIDAgKi8KKwkJZHFoLT5uZXh0X2R0ZF9wdHIgPSByZXEtPmhlYWQtPnRkX2RtYQorCQkJJiBFUF9RVUVVRV9IRUFEX05FWFRfUE9JTlRFUl9NQVNLOzsKKwkJZHFoLT5zaXplX2lvY19pbnRfc3RzID0gMDsKKworCQkvKiBFbnN1cmUgdGhhdCB1cGRhdGVzIHRvIHRoZSBRSCB3aWxsIG9jY3VyZSBiZWZvcmUgcHJpbWluZy4gKi8KKwkJd21iKCk7CisKKwkJLyogUHJpbWUgdGhlIEVuZHBvaW50ICovCisJCXdyaXRlbChiaXRfcG9zLCAmdWRjLT5vcF9yZWdzLT5lcHByaW1lKTsKKworCQlpZiAoZGlyZWN0aW9uID09IEVQX0RJUl9JTikgeworCQkJLyogRklYTUUgYWRkIHN0YXR1cyBjaGVjayBhZnRlciBwcmltZSB0aGUgSU4gZXAgKi8KKwkJCWludCBwcmltZV9hZ2FpbjsKKwkJCXUzMiBjdXJyX2R0ZF9wdHIgPSBkcWgtPmN1cnJfZHRkX3B0cjsKKworCQkJbG9vcHMgPSBMT09QUyhEVERfVElNRU9VVCk7CisJCQlwcmltZV9hZ2FpbiA9IDA7CisJCQl3aGlsZSAoKGN1cnJfZHRkX3B0ciAhPSByZXEtPmhlYWQtPnRkX2RtYSkpIHsKKwkJCQljdXJyX2R0ZF9wdHIgPSBkcWgtPmN1cnJfZHRkX3B0cjsKKwkJCQlpZiAobG9vcHMgPT0gMCkgeworCQkJCQlkZXZfZXJyKCZ1ZGMtPmRldi0+ZGV2LAorCQkJCQkJImZhaWxlZCB0byBwcmltZSAlc1xuIiwKKwkJCQkJCWVwLT5uYW1lKTsKKwkJCQkJcmV0dmFsID0gLUVUSU1FOworCQkJCQlnb3RvIGRvbmU7CisJCQkJfQorCQkJCWxvb3BzLS07CisJCQkJdWRlbGF5KExPT1BTX1VTRUMpOworCisJCQkJaWYgKGxvb3BzID09IChMT09QUyhEVERfVElNRU9VVCkgPj4gMikpIHsKKwkJCQkJaWYgKHByaW1lX2FnYWluKQorCQkJCQkJZ290byBkb25lOworCQkJCQlkZXZfaW5mbygmdWRjLT5kZXYtPmRldiwKKwkJCQkJCSJwcmltZSBhZ2FpblxuIik7CisJCQkJCXdyaXRlbChiaXRfcG9zLAorCQkJCQkJJnVkYy0+b3BfcmVncy0+ZXBwcmltZSk7CisJCQkJCXByaW1lX2FnYWluID0gMTsKKwkJCQl9CisJCQl9CisJCX0KKwl9Citkb25lOgorCXJldHVybiByZXR2YWw7OworfQorCitzdGF0aWMgc3RydWN0IG12X2R0ZCAqYnVpbGRfZHRkKHN0cnVjdCBtdl9yZXEgKnJlcSwgdW5zaWduZWQgKmxlbmd0aCwKKwkJZG1hX2FkZHJfdCAqZG1hLCBpbnQgKmlzX2xhc3QpCit7CisJdTMyIHRlbXA7CisJc3RydWN0IG12X2R0ZCAqZHRkOworCXN0cnVjdCBtdl91ZGMgKnVkYzsKKworCS8qIGhvdyBiaWcgd2lsbCB0aGlzIHRyYW5zZmVyIGJlPyAqLworCSpsZW5ndGggPSBtaW4ocmVxLT5yZXEubGVuZ3RoIC0gcmVxLT5yZXEuYWN0dWFsLAorCQkJKHVuc2lnbmVkKUVQX01BWF9MRU5HVEhfVFJBTlNGRVIpOworCisJdWRjID0gcmVxLT5lcC0+dWRjOworCisJLyoKKwkgKiBCZSBjYXJlZnVsIHRoYXQgbm8gX0dGUF9ISUdITUVNIGlzIHNldCwKKwkgKiBvciB3ZSBjYW4gbm90IHVzZSBkbWFfdG9fdmlydAorCSAqLworCWR0ZCA9IGRtYV9wb29sX2FsbG9jKHVkYy0+ZHRkX3Bvb2wsIEdGUF9LRVJORUwsIGRtYSk7CisJaWYgKGR0ZCA9PSBOVUxMKQorCQlyZXR1cm4gZHRkOworCisJZHRkLT50ZF9kbWEgPSAqZG1hOworCS8qIGluaXRpYWxpemUgYnVmZmVyIHBhZ2UgcG9pbnRlcnMgKi8KKwl0ZW1wID0gKHUzMikocmVxLT5yZXEuZG1hICsgcmVxLT5yZXEuYWN0dWFsKTsKKwlkdGQtPmJ1ZmZfcHRyMCA9IGNwdV90b19sZTMyKHRlbXApOworCXRlbXAgJj0gfjB4RkZGOworCWR0ZC0+YnVmZl9wdHIxID0gY3B1X3RvX2xlMzIodGVtcCArIDB4MTAwMCk7CisJZHRkLT5idWZmX3B0cjIgPSBjcHVfdG9fbGUzMih0ZW1wICsgMHgyMDAwKTsKKwlkdGQtPmJ1ZmZfcHRyMyA9IGNwdV90b19sZTMyKHRlbXAgKyAweDMwMDApOworCWR0ZC0+YnVmZl9wdHI0ID0gY3B1X3RvX2xlMzIodGVtcCArIDB4NDAwMCk7CisKKwlyZXEtPnJlcS5hY3R1YWwgKz0gKmxlbmd0aDsKKworCS8qIHpscCBpcyBuZWVkZWQgaWYgcmVxLT5yZXEuemVybyBpcyBzZXQgKi8KKwlpZiAocmVxLT5yZXEuemVybykgeworCQlpZiAoKmxlbmd0aCA9PSAwIHx8ICgqbGVuZ3RoICUgcmVxLT5lcC0+ZXAubWF4cGFja2V0KSAhPSAwKQorCQkJKmlzX2xhc3QgPSAxOworCQllbHNlCisJCQkqaXNfbGFzdCA9IDA7CisJfSBlbHNlIGlmIChyZXEtPnJlcS5sZW5ndGggPT0gcmVxLT5yZXEuYWN0dWFsKQorCQkqaXNfbGFzdCA9IDE7CisJZWxzZQorCQkqaXNfbGFzdCA9IDA7CisKKwkvKiBGaWxsIGluIHRoZSB0cmFuc2ZlciBzaXplOyBzZXQgYWN0aXZlIGJpdCAqLworCXRlbXAgPSAoKCpsZW5ndGggPDwgRFREX0xFTkdUSF9CSVRfUE9TKSB8IERURF9TVEFUVVNfQUNUSVZFKTsKKworCS8qIEVuYWJsZSBpbnRlcnJ1cHQgZm9yIHRoZSBsYXN0IGR0ZCBvZiBhIHJlcXVlc3QgKi8KKwlpZiAoKmlzX2xhc3QgJiYgIXJlcS0+cmVxLm5vX2ludGVycnVwdCkKKwkJdGVtcCB8PSBEVERfSU9DOworCisJZHRkLT5zaXplX2lvY19zdHMgPSB0ZW1wOworCisJbWIoKTsKKworCXJldHVybiBkdGQ7Cit9CisKKy8qIGdlbmVyYXRlIGRURCBsaW5rZWQgbGlzdCBmb3IgYSByZXF1ZXN0ICovCitzdGF0aWMgaW50IHJlcV90b19kdGQoc3RydWN0IG12X3JlcSAqcmVxKQoreworCXVuc2lnbmVkIGNvdW50OworCWludCBpc19sYXN0LCBpc19maXJzdCA9IDE7CisJc3RydWN0IG12X2R0ZCAqZHRkLCAqbGFzdF9kdGQgPSBOVUxMOworCXN0cnVjdCBtdl91ZGMgKnVkYzsKKwlkbWFfYWRkcl90IGRtYTsKKworCXVkYyA9IHJlcS0+ZXAtPnVkYzsKKworCWRvIHsKKwkJZHRkID0gYnVpbGRfZHRkKHJlcSwgJmNvdW50LCAmZG1hLCAmaXNfbGFzdCk7CisJCWlmIChkdGQgPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PTUVNOworCisJCWlmIChpc19maXJzdCkgeworCQkJaXNfZmlyc3QgPSAwOworCQkJcmVxLT5oZWFkID0gZHRkOworCQl9IGVsc2UgeworCQkJbGFzdF9kdGQtPmR0ZF9uZXh0ID0gZG1hOworCQkJbGFzdF9kdGQtPm5leHRfZHRkX3ZpcnQgPSBkdGQ7CisJCX0KKwkJbGFzdF9kdGQgPSBkdGQ7CisJCXJlcS0+ZHRkX2NvdW50Kys7CisJfSB3aGlsZSAoIWlzX2xhc3QpOworCisJLyogc2V0IHRlcm1pbmF0ZSBiaXQgdG8gMSBmb3IgdGhlIGxhc3QgZFREICovCisJZHRkLT5kdGRfbmV4dCA9IERURF9ORVhUX1RFUk1JTkFURTsKKworCXJlcS0+dGFpbCA9IGR0ZDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG12X2VwX2VuYWJsZShzdHJ1Y3QgdXNiX2VwICpfZXAsCisJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZGVzYykKK3sKKwlzdHJ1Y3QgbXZfdWRjICp1ZGM7CisJc3RydWN0IG12X2VwICplcDsKKwlzdHJ1Y3QgbXZfZHFoICpkcWg7CisJdTE2IG1heCA9IDA7CisJdTMyIGJpdF9wb3MsIGVwY3RybHgsIGRpcmVjdGlvbjsKKwl1bnNpZ25lZCBjaGFyIHpsdCA9IDAsIGlvcyA9IDAsIG11bHQgPSAwOworCisJZXAgPSBjb250YWluZXJfb2YoX2VwLCBzdHJ1Y3QgbXZfZXAsIGVwKTsKKwl1ZGMgPSBlcC0+dWRjOworCisJaWYgKCFfZXAgfHwgIWRlc2MgfHwgZXAtPmRlc2MKKwkJCXx8IGRlc2MtPmJEZXNjcmlwdG9yVHlwZSAhPSBVU0JfRFRfRU5EUE9JTlQpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCF1ZGMtPmRyaXZlciB8fCB1ZGMtPmdhZGdldC5zcGVlZCA9PSBVU0JfU1BFRURfVU5LTk9XTikKKwkJcmV0dXJuIC1FU0hVVERPV047CisKKwlkaXJlY3Rpb24gPSBlcF9kaXIoZXApOworCW1heCA9IGxlMTZfdG9fY3B1KGRlc2MtPndNYXhQYWNrZXRTaXplKTsKKworCS8qCisJICogZGlzYWJsZSBIVyB6ZXJvIGxlbmd0aCB0ZXJtaW5hdGlvbiBzZWxlY3QKKwkgKiBkcml2ZXIgaGFuZGxlcyB6ZXJvIGxlbmd0aCBwYWNrZXQgdGhyb3VnaCByZXEtPnJlcS56ZXJvCisJICovCisJemx0ID0gMTsKKworCS8qIEdldCB0aGUgZW5kcG9pbnQgcXVldWUgaGVhZCBhZGRyZXNzICovCisJZHFoID0gKHN0cnVjdCBtdl9kcWggKillcC0+ZHFoOworCisJYml0X3BvcyA9IDEgPDwgKChkaXJlY3Rpb24gPT0gRVBfRElSX09VVCA/IDAgOiAxNikgKyBlcC0+ZXBfbnVtKTsKKworCS8qIENoZWNrIGlmIHRoZSBFbmRwb2ludCBpcyBQcmltZWQgKi8KKwlpZiAoKHJlYWRsKCZ1ZGMtPm9wX3JlZ3MtPmVwcHJpbWUpICYgYml0X3BvcykKKwkJfHwgKHJlYWRsKCZ1ZGMtPm9wX3JlZ3MtPmVwc3RhdHVzKSAmIGJpdF9wb3MpKSB7CisJCWRldl9pbmZvKCZ1ZGMtPmRldi0+ZGV2LAorCQkJImVwPSVkICVzOiBJbml0IEVSUk9SOiBFTkRQVFBSSU1FPTB4JXgsIgorCQkJIiBFTkRQVFNUQVRVUz0weCV4LCBiaXRfcG9zPTB4JXhcbiIsCisJCQkodW5zaWduZWQpZXAtPmVwX251bSwgZGlyZWN0aW9uID8gIlNFTkQiIDogIlJFQ1YiLAorCQkJKHVuc2lnbmVkKXJlYWRsKCZ1ZGMtPm9wX3JlZ3MtPmVwcHJpbWUpLAorCQkJKHVuc2lnbmVkKXJlYWRsKCZ1ZGMtPm9wX3JlZ3MtPmVwc3RhdHVzKSwKKwkJCSh1bnNpZ25lZCliaXRfcG9zKTsKKwkJZ290byBlbl9kb25lOworCX0KKwkvKiBTZXQgdGhlIG1heCBwYWNrZXQgbGVuZ3RoLCBpbnRlcnJ1cHQgb24gU2V0dXAgYW5kIE11bHQgZmllbGRzICovCisJc3dpdGNoIChkZXNjLT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykgeworCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfQlVMSzoKKwkJemx0ID0gMTsKKwkJbXVsdCA9IDA7CisJCWJyZWFrOworCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfQ09OVFJPTDoKKwkJaW9zID0gMTsKKwljYXNlIFVTQl9FTkRQT0lOVF9YRkVSX0lOVDoKKwkJbXVsdCA9IDA7CisJCWJyZWFrOworCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfSVNPQzoKKwkJLyogQ2FsY3VsYXRlIHRyYW5zYWN0aW9ucyBuZWVkZWQgZm9yIGhpZ2ggYmFuZHdpZHRoIGlzbyAqLworCQltdWx0ID0gKHVuc2lnbmVkIGNoYXIpKDEgKyAoKG1heCA+PiAxMSkgJiAweDAzKSk7CisJCW1heCA9IG1heCAmIDB4OGZmOwkvKiBiaXQgMH4xMCAqLworCQkvKiAzIHRyYW5zYWN0aW9ucyBhdCBtb3N0ICovCisJCWlmIChtdWx0ID4gMykKKwkJCWdvdG8gZW5fZG9uZTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZ290byBlbl9kb25lOworCX0KKwlkcWgtPm1heF9wYWNrZXRfbGVuZ3RoID0gKG1heCA8PCBFUF9RVUVVRV9IRUFEX01BWF9QS1RfTEVOX1BPUykKKwkJfCAobXVsdCA8PCBFUF9RVUVVRV9IRUFEX01VTFRfUE9TKQorCQl8ICh6bHQgPyBFUF9RVUVVRV9IRUFEX1pMVF9TRUwgOiAwKQorCQl8IChpb3MgPyBFUF9RVUVVRV9IRUFEX0lPUyA6IDApOworCWRxaC0+bmV4dF9kdGRfcHRyID0gMTsKKwlkcWgtPnNpemVfaW9jX2ludF9zdHMgPSAwOworCisJZXAtPmVwLm1heHBhY2tldCA9IG1heDsKKwllcC0+ZGVzYyA9IGRlc2M7CisJZXAtPnN0b3BwZWQgPSAwOworCisJLyogRW5hYmxlIHRoZSBlbmRwb2ludCBmb3IgUnggb3IgVHggYW5kIHNldCB0aGUgZW5kcG9pbnQgdHlwZSAqLworCWVwY3RybHggPSByZWFkbCgmdWRjLT5vcF9yZWdzLT5lcGN0cmx4W2VwLT5lcF9udW1dKTsKKwlpZiAoZGlyZWN0aW9uID09IEVQX0RJUl9JTikgeworCQllcGN0cmx4ICY9IH5FUENUUkxfVFhfQUxMX01BU0s7CisJCWVwY3RybHggfD0gRVBDVFJMX1RYX0VOQUJMRSB8IEVQQ1RSTF9UWF9EQVRBX1RPR0dMRV9SU1QKKwkJCXwgKChkZXNjLT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykKKwkJCQk8PCBFUENUUkxfVFhfRVBfVFlQRV9TSElGVCk7CisJfSBlbHNlIHsKKwkJZXBjdHJseCAmPSB+RVBDVFJMX1JYX0FMTF9NQVNLOworCQllcGN0cmx4IHw9IEVQQ1RSTF9SWF9FTkFCTEUgfCBFUENUUkxfUlhfREFUQV9UT0dHTEVfUlNUCisJCQl8ICgoZGVzYy0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spCisJCQkJPDwgRVBDVFJMX1JYX0VQX1RZUEVfU0hJRlQpOworCX0KKwl3cml0ZWwoZXBjdHJseCwgJnVkYy0+b3BfcmVncy0+ZXBjdHJseFtlcC0+ZXBfbnVtXSk7CisKKwkvKgorCSAqIEltcGxlbWVudCBHdWlkZWxpbmUgKEdMIyBVU0ItNykgVGhlIHVudXNlZCBlbmRwb2ludCB0eXBlIG11c3QKKwkgKiBiZSBwcm9ncmFtbWVkIHRvIGJ1bGsuCisJICovCisJZXBjdHJseCA9IHJlYWRsKCZ1ZGMtPm9wX3JlZ3MtPmVwY3RybHhbZXAtPmVwX251bV0pOworCWlmICgoZXBjdHJseCAmIEVQQ1RSTF9SWF9FTkFCTEUpID09IDApIHsKKwkJZXBjdHJseCB8PSAoKGRlc2MtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKQorCQkJCTw8IEVQQ1RSTF9SWF9FUF9UWVBFX1NISUZUKTsKKwkJd3JpdGVsKGVwY3RybHgsICZ1ZGMtPm9wX3JlZ3MtPmVwY3RybHhbZXAtPmVwX251bV0pOworCX0KKworCWVwY3RybHggPSByZWFkbCgmdWRjLT5vcF9yZWdzLT5lcGN0cmx4W2VwLT5lcF9udW1dKTsKKwlpZiAoKGVwY3RybHggJiBFUENUUkxfVFhfRU5BQkxFKSA9PSAwKSB7CisJCWVwY3RybHggfD0gKChkZXNjLT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykKKwkJCQk8PCBFUENUUkxfVFhfRVBfVFlQRV9TSElGVCk7CisJCXdyaXRlbChlcGN0cmx4LCAmdWRjLT5vcF9yZWdzLT5lcGN0cmx4W2VwLT5lcF9udW1dKTsKKwl9CisKKwlyZXR1cm4gMDsKK2VuX2RvbmU6CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgIG12X2VwX2Rpc2FibGUoc3RydWN0IHVzYl9lcCAqX2VwKQoreworCXN0cnVjdCBtdl91ZGMgKnVkYzsKKwlzdHJ1Y3QgbXZfZXAgKmVwOworCXN0cnVjdCBtdl9kcWggKmRxaDsKKwl1MzIgYml0X3BvcywgZXBjdHJseCwgZGlyZWN0aW9uOworCisJZXAgPSBjb250YWluZXJfb2YoX2VwLCBzdHJ1Y3QgbXZfZXAsIGVwKTsKKwlpZiAoKF9lcCA9PSBOVUxMKSB8fCAhZXAtPmRlc2MpCisJCXJldHVybiAtRUlOVkFMOworCisJdWRjID0gZXAtPnVkYzsKKworCS8qIEdldCB0aGUgZW5kcG9pbnQgcXVldWUgaGVhZCBhZGRyZXNzICovCisJZHFoID0gZXAtPmRxaDsKKworCWRpcmVjdGlvbiA9IGVwX2RpcihlcCk7CisJYml0X3BvcyA9IDEgPDwgKChkaXJlY3Rpb24gPT0gRVBfRElSX09VVCA/IDAgOiAxNikgKyBlcC0+ZXBfbnVtKTsKKworCS8qIFJlc2V0IHRoZSBtYXggcGFja2V0IGxlbmd0aCBhbmQgdGhlIGludGVycnVwdCBvbiBTZXR1cCAqLworCWRxaC0+bWF4X3BhY2tldF9sZW5ndGggPSAwOworCisJLyogRGlzYWJsZSB0aGUgZW5kcG9pbnQgZm9yIFJ4IG9yIFR4IGFuZCByZXNldCB0aGUgZW5kcG9pbnQgdHlwZSAqLworCWVwY3RybHggPSByZWFkbCgmdWRjLT5vcF9yZWdzLT5lcGN0cmx4W2VwLT5lcF9udW1dKTsKKwllcGN0cmx4ICY9IH4oKGRpcmVjdGlvbiA9PSBFUF9ESVJfSU4pCisJCQk/IChFUENUUkxfVFhfRU5BQkxFIHwgRVBDVFJMX1RYX1RZUEUpCisJCQk6IChFUENUUkxfUlhfRU5BQkxFIHwgRVBDVFJMX1JYX1RZUEUpKTsKKwl3cml0ZWwoZXBjdHJseCwgJnVkYy0+b3BfcmVncy0+ZXBjdHJseFtlcC0+ZXBfbnVtXSk7CisKKwkvKiBudWtlIGFsbCBwZW5kaW5nIHJlcXVlc3RzIChkb2VzIGZsdXNoKSAqLworCW51a2UoZXAsIC1FU0hVVERPV04pOworCisJZXAtPmRlc2MgPSBOVUxMOworCWVwLT5zdG9wcGVkID0gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfcmVxdWVzdCAqCittdl9hbGxvY19yZXF1ZXN0KHN0cnVjdCB1c2JfZXAgKl9lcCwgZ2ZwX3QgZ2ZwX2ZsYWdzKQoreworCXN0cnVjdCBtdl9yZXEgKnJlcSA9IE5VTEw7CisKKwlyZXEgPSBremFsbG9jKHNpemVvZiAqcmVxLCBnZnBfZmxhZ3MpOworCWlmICghcmVxKQorCQlyZXR1cm4gTlVMTDsKKworCXJlcS0+cmVxLmRtYSA9IERNQV9BRERSX0lOVkFMSUQ7CisJSU5JVF9MSVNUX0hFQUQoJnJlcS0+cXVldWUpOworCisJcmV0dXJuICZyZXEtPnJlcTsKK30KKworc3RhdGljIHZvaWQgbXZfZnJlZV9yZXF1ZXN0KHN0cnVjdCB1c2JfZXAgKl9lcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpfcmVxKQoreworCXN0cnVjdCBtdl9yZXEgKnJlcSA9IE5VTEw7CisKKwlyZXEgPSBjb250YWluZXJfb2YoX3JlcSwgc3RydWN0IG12X3JlcSwgcmVxKTsKKworCWlmIChfcmVxKQorCQlrZnJlZShyZXEpOworfQorCitzdGF0aWMgdm9pZCBtdl9lcF9maWZvX2ZsdXNoKHN0cnVjdCB1c2JfZXAgKl9lcCkKK3sKKwlzdHJ1Y3QgbXZfdWRjICp1ZGM7CisJdTMyIGJpdF9wb3MsIGRpcmVjdGlvbjsKKwlzdHJ1Y3QgbXZfZXAgKmVwID0gY29udGFpbmVyX29mKF9lcCwgc3RydWN0IG12X2VwLCBlcCk7CisJdW5zaWduZWQgaW50IGxvb3BzOworCisJdWRjID0gZXAtPnVkYzsKKwlkaXJlY3Rpb24gPSBlcF9kaXIoZXApOworCWJpdF9wb3MgPSAxIDw8ICgoZGlyZWN0aW9uID09IEVQX0RJUl9PVVQgPyAwIDogMTYpICsgZXAtPmVwX251bSk7CisJLyoKKwkgKiBGbHVzaGluZyB3aWxsIGhhbHQgdGhlIHBpcGUKKwkgKiBXcml0ZSAxIHRvIHRoZSBGbHVzaCByZWdpc3RlcgorCSAqLworCXdyaXRlbChiaXRfcG9zLCAmdWRjLT5vcF9yZWdzLT5lcGZsdXNoKTsKKworCS8qIFdhaXQgdW50aWwgZmx1c2hpbmcgY29tcGxldGVkICovCisJbG9vcHMgPSBMT09QUyhGTFVTSF9USU1FT1VUKTsKKwl3aGlsZSAocmVhZGwoJnVkYy0+b3BfcmVncy0+ZXBmbHVzaCkgJiBiaXRfcG9zKSB7CisJCS8qCisJCSAqIEVORFBURkxVU0ggYml0IHNob3VsZCBiZSBjbGVhcmVkIHRvIGluZGljYXRlIHRoaXMKKwkJICogb3BlcmF0aW9uIGlzIGNvbXBsZXRlCisJCSAqLworCQlpZiAobG9vcHMgPT0gMCkgeworCQkJZGV2X2VycigmdWRjLT5kZXYtPmRldiwKKwkJCQkiVElNRU9VVCBmb3IgRU5EUFRGTFVTSD0weCV4LCBiaXRfcG9zPTB4JXhcbiIsCisJCQkJKHVuc2lnbmVkKXJlYWRsKCZ1ZGMtPm9wX3JlZ3MtPmVwZmx1c2gpLAorCQkJCSh1bnNpZ25lZCliaXRfcG9zKTsKKwkJCXJldHVybjsKKwkJfQorCQlsb29wcy0tOworCQl1ZGVsYXkoTE9PUFNfVVNFQyk7CisJfQorCWxvb3BzID0gTE9PUFMoRVBTVEFUVVNfVElNRU9VVCk7CisJd2hpbGUgKHJlYWRsKCZ1ZGMtPm9wX3JlZ3MtPmVwc3RhdHVzKSAmIGJpdF9wb3MpIHsKKwkJdW5zaWduZWQgaW50IGludGVyX2xvb3BzOworCisJCWlmIChsb29wcyA9PSAwKSB7CisJCQlkZXZfZXJyKCZ1ZGMtPmRldi0+ZGV2LAorCQkJCSJUSU1FT1VUIGZvciBFTkRQVFNUQVRVUz0weCV4LCBiaXRfcG9zPTB4JXhcbiIsCisJCQkJKHVuc2lnbmVkKXJlYWRsKCZ1ZGMtPm9wX3JlZ3MtPmVwc3RhdHVzKSwKKwkJCQkodW5zaWduZWQpYml0X3Bvcyk7CisJCQlyZXR1cm47CisJCX0KKwkJLyogV3JpdGUgMSB0byB0aGUgRmx1c2ggcmVnaXN0ZXIgKi8KKwkJd3JpdGVsKGJpdF9wb3MsICZ1ZGMtPm9wX3JlZ3MtPmVwZmx1c2gpOworCisJCS8qIFdhaXQgdW50aWwgZmx1c2hpbmcgY29tcGxldGVkICovCisJCWludGVyX2xvb3BzID0gTE9PUFMoRkxVU0hfVElNRU9VVCk7CisJCXdoaWxlIChyZWFkbCgmdWRjLT5vcF9yZWdzLT5lcGZsdXNoKSAmIGJpdF9wb3MpIHsKKwkJCS8qCisJCQkgKiBFTkRQVEZMVVNIIGJpdCBzaG91bGQgYmUgY2xlYXJlZCB0byBpbmRpY2F0ZSB0aGlzCisJCQkgKiBvcGVyYXRpb24gaXMgY29tcGxldGUKKwkJCSAqLworCQkJaWYgKGludGVyX2xvb3BzID09IDApIHsKKwkJCQlkZXZfZXJyKCZ1ZGMtPmRldi0+ZGV2LAorCQkJCQkiVElNRU9VVCBmb3IgRU5EUFRGTFVTSD0weCV4LCIKKwkJCQkJImJpdF9wb3M9MHgleFxuIiwKKwkJCQkJKHVuc2lnbmVkKXJlYWRsKCZ1ZGMtPm9wX3JlZ3MtPmVwZmx1c2gpLAorCQkJCQkodW5zaWduZWQpYml0X3Bvcyk7CisJCQkJcmV0dXJuOworCQkJfQorCQkJaW50ZXJfbG9vcHMtLTsKKwkJCXVkZWxheShMT09QU19VU0VDKTsKKwkJfQorCQlsb29wcy0tOworCX0KK30KKworLyogcXVldWVzIChzdWJtaXRzKSBhbiBJL08gcmVxdWVzdCB0byBhbiBlbmRwb2ludCAqLworc3RhdGljIGludAorbXZfZXBfcXVldWUoc3RydWN0IHVzYl9lcCAqX2VwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKl9yZXEsIGdmcF90IGdmcF9mbGFncykKK3sKKwlzdHJ1Y3QgbXZfZXAgKmVwID0gY29udGFpbmVyX29mKF9lcCwgc3RydWN0IG12X2VwLCBlcCk7CisJc3RydWN0IG12X3JlcSAqcmVxID0gY29udGFpbmVyX29mKF9yZXEsIHN0cnVjdCBtdl9yZXEsIHJlcSk7CisJc3RydWN0IG12X3VkYyAqdWRjID0gZXAtPnVkYzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogY2F0Y2ggdmFyaW91cyBib2d1cyBwYXJhbWV0ZXJzICovCisJaWYgKCFfcmVxIHx8ICFyZXEtPnJlcS5jb21wbGV0ZSB8fCAhcmVxLT5yZXEuYnVmCisJCQl8fCAhbGlzdF9lbXB0eSgmcmVxLT5xdWV1ZSkpIHsKKwkJZGV2X2VycigmdWRjLT5kZXYtPmRldiwgIiVzLCBiYWQgcGFyYW1zIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKHVubGlrZWx5KCFfZXAgfHwgIWVwLT5kZXNjKSkgeworCQlkZXZfZXJyKCZ1ZGMtPmRldi0+ZGV2LCAiJXMsIGJhZCBlcCIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmIChlcC0+ZGVzYy0+Ym1BdHRyaWJ1dGVzID09IFVTQl9FTkRQT0lOVF9YRkVSX0lTT0MpIHsKKwkJaWYgKHJlcS0+cmVxLmxlbmd0aCA+IGVwLT5lcC5tYXhwYWNrZXQpCisJCQlyZXR1cm4gLUVNU0dTSVpFOworCX0KKworCXVkYyA9IGVwLT51ZGM7CisJaWYgKCF1ZGMtPmRyaXZlciB8fCB1ZGMtPmdhZGdldC5zcGVlZCA9PSBVU0JfU1BFRURfVU5LTk9XTikKKwkJcmV0dXJuIC1FU0hVVERPV047CisKKwlyZXEtPmVwID0gZXA7CisKKwkvKiBtYXAgdmlydHVhbCBhZGRyZXNzIHRvIGhhcmR3YXJlICovCisJaWYgKHJlcS0+cmVxLmRtYSA9PSBETUFfQUREUl9JTlZBTElEKSB7CisJCXJlcS0+cmVxLmRtYSA9IGRtYV9tYXBfc2luZ2xlKGVwLT51ZGMtPmdhZGdldC5kZXYucGFyZW50LAorCQkJCQlyZXEtPnJlcS5idWYsCisJCQkJCXJlcS0+cmVxLmxlbmd0aCwgZXBfZGlyKGVwKQorCQkJCQkJPyBETUFfVE9fREVWSUNFCisJCQkJCQk6IERNQV9GUk9NX0RFVklDRSk7CisJCXJlcS0+bWFwcGVkID0gMTsKKwl9IGVsc2UgeworCQlkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShlcC0+dWRjLT5nYWRnZXQuZGV2LnBhcmVudCwKKwkJCQkJcmVxLT5yZXEuZG1hLCByZXEtPnJlcS5sZW5ndGgsCisJCQkJCWVwX2RpcihlcCkKKwkJCQkJCT8gRE1BX1RPX0RFVklDRQorCQkJCQkJOiBETUFfRlJPTV9ERVZJQ0UpOworCQlyZXEtPm1hcHBlZCA9IDA7CisJfQorCisJcmVxLT5yZXEuc3RhdHVzID0gLUVJTlBST0dSRVNTOworCXJlcS0+cmVxLmFjdHVhbCA9IDA7CisJcmVxLT5kdGRfY291bnQgPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnVkYy0+bG9jaywgZmxhZ3MpOworCisJLyogYnVpbGQgZHRkcyBhbmQgcHVzaCB0aGVtIHRvIGRldmljZSBxdWV1ZSAqLworCWlmICghcmVxX3RvX2R0ZChyZXEpKSB7CisJCWludCByZXR2YWw7CisJCXJldHZhbCA9IHF1ZXVlX2R0ZChlcCwgcmVxKTsKKwkJaWYgKHJldHZhbCkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWRjLT5sb2NrLCBmbGFncyk7CisJCQlyZXR1cm4gcmV0dmFsOworCQl9CisJfSBlbHNlIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWRjLT5sb2NrLCBmbGFncyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIFVwZGF0ZSBlcDAgc3RhdGUgKi8KKwlpZiAoZXAtPmVwX251bSA9PSAwKQorCQl1ZGMtPmVwMF9zdGF0ZSA9IERBVEFfU1RBVEVfWE1JVDsKKworCS8qIGlycSBoYW5kbGVyIGFkdmFuY2VzIHRoZSBxdWV1ZSAqLworCWlmIChyZXEgIT0gTlVMTCkKKwkJbGlzdF9hZGRfdGFpbCgmcmVxLT5xdWV1ZSwgJmVwLT5xdWV1ZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWRjLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworLyogZGVxdWV1ZXMgKGNhbmNlbHMsIHVubGlua3MpIGFuIEkvTyByZXF1ZXN0IGZyb20gYW4gZW5kcG9pbnQgKi8KK3N0YXRpYyBpbnQgbXZfZXBfZGVxdWV1ZShzdHJ1Y3QgdXNiX2VwICpfZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqX3JlcSkKK3sKKwlzdHJ1Y3QgbXZfZXAgKmVwID0gY29udGFpbmVyX29mKF9lcCwgc3RydWN0IG12X2VwLCBlcCk7CisJc3RydWN0IG12X3JlcSAqcmVxOworCXN0cnVjdCBtdl91ZGMgKnVkYyA9IGVwLT51ZGM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgc3RvcHBlZCwgcmV0ID0gMDsKKwl1MzIgZXBjdHJseDsKKworCWlmICghX2VwIHx8ICFfcmVxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZlcC0+dWRjLT5sb2NrLCBmbGFncyk7CisJc3RvcHBlZCA9IGVwLT5zdG9wcGVkOworCisJLyogU3RvcCB0aGUgZXAgYmVmb3JlIHdlIGRlYWwgd2l0aCB0aGUgcXVldWUgKi8KKwllcC0+c3RvcHBlZCA9IDE7CisJZXBjdHJseCA9IHJlYWRsKCZ1ZGMtPm9wX3JlZ3MtPmVwY3RybHhbZXAtPmVwX251bV0pOworCWlmIChlcF9kaXIoZXApID09IEVQX0RJUl9JTikKKwkJZXBjdHJseCAmPSB+RVBDVFJMX1RYX0VOQUJMRTsKKwllbHNlCisJCWVwY3RybHggJj0gfkVQQ1RSTF9SWF9FTkFCTEU7CisJd3JpdGVsKGVwY3RybHgsICZ1ZGMtPm9wX3JlZ3MtPmVwY3RybHhbZXAtPmVwX251bV0pOworCisJLyogbWFrZSBzdXJlIGl0J3MgYWN0dWFsbHkgcXVldWVkIG9uIHRoaXMgZW5kcG9pbnQgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlcSwgJmVwLT5xdWV1ZSwgcXVldWUpIHsKKwkJaWYgKCZyZXEtPnJlcSA9PSBfcmVxKQorCQkJYnJlYWs7CisJfQorCWlmICgmcmVxLT5yZXEgIT0gX3JlcSkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBUaGUgcmVxdWVzdCBpcyBpbiBwcm9ncmVzcywgb3IgY29tcGxldGVkIGJ1dCBub3QgZGVxdWV1ZWQgKi8KKwlpZiAoZXAtPnF1ZXVlLm5leHQgPT0gJnJlcS0+cXVldWUpIHsKKwkJX3JlcS0+c3RhdHVzID0gLUVDT05OUkVTRVQ7CisJCW12X2VwX2ZpZm9fZmx1c2goX2VwKTsJLyogZmx1c2ggY3VycmVudCB0cmFuc2ZlciAqLworCisJCS8qIFRoZSByZXF1ZXN0IGlzbid0IHRoZSBsYXN0IHJlcXVlc3QgaW4gdGhpcyBlcCBxdWV1ZSAqLworCQlpZiAocmVxLT5xdWV1ZS5uZXh0ICE9ICZlcC0+cXVldWUpIHsKKwkJCXN0cnVjdCBtdl9kcWggKnFoOworCQkJc3RydWN0IG12X3JlcSAqbmV4dF9yZXE7CisKKwkJCXFoID0gZXAtPmRxaDsKKwkJCW5leHRfcmVxID0gbGlzdF9lbnRyeShyZXEtPnF1ZXVlLm5leHQsIHN0cnVjdCBtdl9yZXEsCisJCQkJCXF1ZXVlKTsKKworCQkJLyogUG9pbnQgdGhlIFFIIHRvIHRoZSBmaXJzdCBURCBvZiBuZXh0IHJlcXVlc3QgKi8KKwkJCXdyaXRlbCgodTMyKSBuZXh0X3JlcS0+aGVhZCwgJnFoLT5jdXJyX2R0ZF9wdHIpOworCQl9IGVsc2UgeworCQkJc3RydWN0IG12X2RxaCAqcWg7CisKKwkJCXFoID0gZXAtPmRxaDsKKwkJCXFoLT5uZXh0X2R0ZF9wdHIgPSAxOworCQkJcWgtPnNpemVfaW9jX2ludF9zdHMgPSAwOworCQl9CisKKwkJLyogVGhlIHJlcXVlc3QgaGFzbid0IGJlZW4gcHJvY2Vzc2VkLCBwYXRjaCB1cCB0aGUgVEQgY2hhaW4gKi8KKwl9IGVsc2UgeworCQlzdHJ1Y3QgbXZfcmVxICpwcmV2X3JlcTsKKworCQlwcmV2X3JlcSA9IGxpc3RfZW50cnkocmVxLT5xdWV1ZS5wcmV2LCBzdHJ1Y3QgbXZfcmVxLCBxdWV1ZSk7CisJCXdyaXRlbChyZWFkbCgmcmVxLT50YWlsLT5kdGRfbmV4dCksCisJCQkJJnByZXZfcmVxLT50YWlsLT5kdGRfbmV4dCk7CisKKwl9CisKKwlkb25lKGVwLCByZXEsIC1FQ09OTlJFU0VUKTsKKworCS8qIEVuYWJsZSBFUCAqLworb3V0OgorCWVwY3RybHggPSByZWFkbCgmdWRjLT5vcF9yZWdzLT5lcGN0cmx4W2VwLT5lcF9udW1dKTsKKwlpZiAoZXBfZGlyKGVwKSA9PSBFUF9ESVJfSU4pCisJCWVwY3RybHggfD0gRVBDVFJMX1RYX0VOQUJMRTsKKwllbHNlCisJCWVwY3RybHggfD0gRVBDVFJMX1JYX0VOQUJMRTsKKwl3cml0ZWwoZXBjdHJseCwgJnVkYy0+b3BfcmVncy0+ZXBjdHJseFtlcC0+ZXBfbnVtXSk7CisJZXAtPnN0b3BwZWQgPSBzdG9wcGVkOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZXAtPnVkYy0+bG9jaywgZmxhZ3MpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGVwX3NldF9zdGFsbChzdHJ1Y3QgbXZfdWRjICp1ZGMsIHU4IGVwX251bSwgdTggZGlyZWN0aW9uLCBpbnQgc3RhbGwpCit7CisJdTMyIGVwY3RybHg7CisKKwllcGN0cmx4ID0gcmVhZGwoJnVkYy0+b3BfcmVncy0+ZXBjdHJseFtlcF9udW1dKTsKKworCWlmIChzdGFsbCkgeworCQlpZiAoZGlyZWN0aW9uID09IEVQX0RJUl9JTikKKwkJCWVwY3RybHggfD0gRVBDVFJMX1RYX0VQX1NUQUxMOworCQllbHNlCisJCQllcGN0cmx4IHw9IEVQQ1RSTF9SWF9FUF9TVEFMTDsKKwl9IGVsc2UgeworCQlpZiAoZGlyZWN0aW9uID09IEVQX0RJUl9JTikgeworCQkJZXBjdHJseCAmPSB+RVBDVFJMX1RYX0VQX1NUQUxMOworCQkJZXBjdHJseCB8PSBFUENUUkxfVFhfREFUQV9UT0dHTEVfUlNUOworCQl9IGVsc2UgeworCQkJZXBjdHJseCAmPSB+RVBDVFJMX1JYX0VQX1NUQUxMOworCQkJZXBjdHJseCB8PSBFUENUUkxfUlhfREFUQV9UT0dHTEVfUlNUOworCQl9CisJfQorCXdyaXRlbChlcGN0cmx4LCAmdWRjLT5vcF9yZWdzLT5lcGN0cmx4W2VwX251bV0pOworfQorCitzdGF0aWMgaW50IGVwX2lzX3N0YWxsKHN0cnVjdCBtdl91ZGMgKnVkYywgdTggZXBfbnVtLCB1OCBkaXJlY3Rpb24pCit7CisJdTMyIGVwY3RybHg7CisKKwllcGN0cmx4ID0gcmVhZGwoJnVkYy0+b3BfcmVncy0+ZXBjdHJseFtlcF9udW1dKTsKKworCWlmIChkaXJlY3Rpb24gPT0gRVBfRElSX09VVCkKKwkJcmV0dXJuIChlcGN0cmx4ICYgRVBDVFJMX1JYX0VQX1NUQUxMKSA/IDEgOiAwOworCWVsc2UKKwkJcmV0dXJuIChlcGN0cmx4ICYgRVBDVFJMX1RYX0VQX1NUQUxMKSA/IDEgOiAwOworfQorCitzdGF0aWMgaW50IG12X2VwX3NldF9oYWx0X3dlZGdlKHN0cnVjdCB1c2JfZXAgKl9lcCwgaW50IGhhbHQsIGludCB3ZWRnZSkKK3sKKwlzdHJ1Y3QgbXZfZXAgKmVwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBtdl91ZGMgKnVkYzsKKworCWVwID0gY29udGFpbmVyX29mKF9lcCwgc3RydWN0IG12X2VwLCBlcCk7CisJdWRjID0gZXAtPnVkYzsKKwlpZiAoIV9lcCB8fCAhZXAtPmRlc2MpIHsKKwkJc3RhdHVzID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGVwLT5kZXNjLT5ibUF0dHJpYnV0ZXMgPT0gVVNCX0VORFBPSU5UX1hGRVJfSVNPQykgeworCQlzdGF0dXMgPSAtRU9QTk9UU1VQUDsKKwkJZ290byBvdXQ7CisJfQorCisJLyoKKwkgKiBBdHRlbXB0IHRvIGhhbHQgSU4gZXAgd2lsbCBmYWlsIGlmIGFueSB0cmFuc2ZlciByZXF1ZXN0cworCSAqIGFyZSBzdGlsbCBxdWV1ZQorCSAqLworCWlmIChoYWx0ICYmIChlcF9kaXIoZXApID09IEVQX0RJUl9JTikgJiYgIWxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpIHsKKwkJc3RhdHVzID0gLUVBR0FJTjsKKwkJZ290byBvdXQ7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmVwLT51ZGMtPmxvY2ssIGZsYWdzKTsKKwllcF9zZXRfc3RhbGwodWRjLCBlcC0+ZXBfbnVtLCBlcF9kaXIoZXApLCBoYWx0KTsKKwlpZiAoaGFsdCAmJiB3ZWRnZSkKKwkJZXAtPndlZGdlID0gMTsKKwllbHNlIGlmICghaGFsdCkKKwkJZXAtPndlZGdlID0gMDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlcC0+dWRjLT5sb2NrLCBmbGFncyk7CisKKwlpZiAoZXAtPmVwX251bSA9PSAwKSB7CisJCXVkYy0+ZXAwX3N0YXRlID0gV0FJVF9GT1JfU0VUVVA7CisJCXVkYy0+ZXAwX2RpciA9IEVQX0RJUl9PVVQ7CisJfQorb3V0OgorCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgbXZfZXBfc2V0X2hhbHQoc3RydWN0IHVzYl9lcCAqX2VwLCBpbnQgaGFsdCkKK3sKKwlyZXR1cm4gbXZfZXBfc2V0X2hhbHRfd2VkZ2UoX2VwLCBoYWx0LCAwKTsKK30KKworc3RhdGljIGludCBtdl9lcF9zZXRfd2VkZ2Uoc3RydWN0IHVzYl9lcCAqX2VwKQoreworCXJldHVybiBtdl9lcF9zZXRfaGFsdF93ZWRnZShfZXAsIDEsIDEpOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9lcF9vcHMgbXZfZXBfb3BzID0geworCS5lbmFibGUJCT0gbXZfZXBfZW5hYmxlLAorCS5kaXNhYmxlCT0gbXZfZXBfZGlzYWJsZSwKKworCS5hbGxvY19yZXF1ZXN0CT0gbXZfYWxsb2NfcmVxdWVzdCwKKwkuZnJlZV9yZXF1ZXN0CT0gbXZfZnJlZV9yZXF1ZXN0LAorCisJLnF1ZXVlCQk9IG12X2VwX3F1ZXVlLAorCS5kZXF1ZXVlCT0gbXZfZXBfZGVxdWV1ZSwKKworCS5zZXRfd2VkZ2UJPSBtdl9lcF9zZXRfd2VkZ2UsCisJLnNldF9oYWx0CT0gbXZfZXBfc2V0X2hhbHQsCisJLmZpZm9fZmx1c2gJPSBtdl9lcF9maWZvX2ZsdXNoLAkvKiBmbHVzaCBmaWZvICovCit9OworCitzdGF0aWMgdm9pZCB1ZGNfc3RvcChzdHJ1Y3QgbXZfdWRjICp1ZGMpCit7CisJdTMyIHRtcDsKKworCS8qIERpc2FibGUgaW50ZXJydXB0cyAqLworCXRtcCA9IHJlYWRsKCZ1ZGMtPm9wX3JlZ3MtPnVzYmludHIpOworCXRtcCAmPSB+KFVTQklOVFJfSU5UX0VOIHwgVVNCSU5UUl9FUlJfSU5UX0VOIHwKKwkJVVNCSU5UUl9QT1JUX0NIQU5HRV9ERVRFQ1RfRU4gfCBVU0JJTlRSX1JFU0VUX0VOKTsKKwl3cml0ZWwodG1wLCAmdWRjLT5vcF9yZWdzLT51c2JpbnRyKTsKKworCS8qIFJlc2V0IHRoZSBSdW4gdGhlIGJpdCBpbiB0aGUgY29tbWFuZCByZWdpc3RlciB0byBzdG9wIFZVU0IgKi8KKwl0bXAgPSByZWFkbCgmdWRjLT5vcF9yZWdzLT51c2JjbWQpOworCXRtcCAmPSB+VVNCQ01EX1JVTl9TVE9QOworCXdyaXRlbCh0bXAsICZ1ZGMtPm9wX3JlZ3MtPnVzYmNtZCk7Cit9CisKK3N0YXRpYyB2b2lkIHVkY19zdGFydChzdHJ1Y3QgbXZfdWRjICp1ZGMpCit7CisJdTMyIHVzYmludHI7CisKKwl1c2JpbnRyID0gVVNCSU5UUl9JTlRfRU4gfCBVU0JJTlRSX0VSUl9JTlRfRU4KKwkJfCBVU0JJTlRSX1BPUlRfQ0hBTkdFX0RFVEVDVF9FTgorCQl8IFVTQklOVFJfUkVTRVRfRU4gfCBVU0JJTlRSX0RFVklDRV9TVVNQRU5EOworCS8qIEVuYWJsZSBpbnRlcnJ1cHRzICovCisJd3JpdGVsKHVzYmludHIsICZ1ZGMtPm9wX3JlZ3MtPnVzYmludHIpOworCisJLyogU2V0IHRoZSBSdW4gYml0IGluIHRoZSBjb21tYW5kIHJlZ2lzdGVyICovCisJd3JpdGVsKFVTQkNNRF9SVU5fU1RPUCwgJnVkYy0+b3BfcmVncy0+dXNiY21kKTsKK30KKworc3RhdGljIGludCB1ZGNfcmVzZXQoc3RydWN0IG12X3VkYyAqdWRjKQoreworCXVuc2lnbmVkIGludCBsb29wczsKKwl1MzIgdG1wLCBwb3J0c2M7CisKKwkvKiBTdG9wIHRoZSBjb250cm9sbGVyICovCisJdG1wID0gcmVhZGwoJnVkYy0+b3BfcmVncy0+dXNiY21kKTsKKwl0bXAgJj0gflVTQkNNRF9SVU5fU1RPUDsKKwl3cml0ZWwodG1wLCAmdWRjLT5vcF9yZWdzLT51c2JjbWQpOworCisJLyogUmVzZXQgdGhlIGNvbnRyb2xsZXIgdG8gZ2V0IGRlZmF1bHQgdmFsdWVzICovCisJd3JpdGVsKFVTQkNNRF9DVFJMX1JFU0VULCAmdWRjLT5vcF9yZWdzLT51c2JjbWQpOworCisJLyogd2FpdCBmb3IgcmVzZXQgdG8gY29tcGxldGUgKi8KKwlsb29wcyA9IExPT1BTKFJFU0VUX1RJTUVPVVQpOworCXdoaWxlIChyZWFkbCgmdWRjLT5vcF9yZWdzLT51c2JjbWQpICYgVVNCQ01EX0NUUkxfUkVTRVQpIHsKKwkJaWYgKGxvb3BzID09IDApIHsKKwkJCWRldl9lcnIoJnVkYy0+ZGV2LT5kZXYsCisJCQkJIldhaXQgZm9yIFJFU0VUIGNvbXBsZXRlZCBUSU1FT1VUXG4iKTsKKwkJCXJldHVybiAtRVRJTUVET1VUOworCQl9CisJCWxvb3BzLS07CisJCXVkZWxheShMT09QU19VU0VDKTsKKwl9CisKKwkvKiBzZXQgY29udHJvbGxlciB0byBkZXZpY2UgbW9kZSAqLworCXRtcCA9IHJlYWRsKCZ1ZGMtPm9wX3JlZ3MtPnVzYm1vZGUpOworCXRtcCB8PSBVU0JNT0RFX0NUUkxfTU9ERV9ERVZJQ0U7CisKKwkvKiB0dXJuIHNldHVwIGxvY2tvdXQgb2ZmLCByZXF1aXJlIHNldHVwIHRyaXB3aXJlIGluIHVzYmNtZCAqLworCXRtcCB8PSBVU0JNT0RFX1NFVFVQX0xPQ0tfT0ZGIHwgVVNCTU9ERV9TVFJFQU1fRElTQUJMRTsKKworCXdyaXRlbCh0bXAsICZ1ZGMtPm9wX3JlZ3MtPnVzYm1vZGUpOworCisJd3JpdGVsKDB4MCwgJnVkYy0+b3BfcmVncy0+ZXBzZXR1cHN0YXQpOworCisJLyogQ29uZmlndXJlIHRoZSBFbmRwb2ludCBMaXN0IEFkZHJlc3MgKi8KKwl3cml0ZWwodWRjLT5lcF9kcWhfZG1hICYgVVNCX0VQX0xJU1RfQUREUkVTU19NQVNLLAorCQkmdWRjLT5vcF9yZWdzLT5lcGxpc3RhZGRyKTsKKworCXBvcnRzYyA9IHJlYWRsKCZ1ZGMtPm9wX3JlZ3MtPnBvcnRzY1swXSk7CisJaWYgKHJlYWRsKCZ1ZGMtPmNhcF9yZWdzLT5oY3NwYXJhbXMpICYgSENTUEFSQU1TX1BQQykKKwkJcG9ydHNjICY9ICh+UE9SVFNDWF9XMUNfQklUUyB8IH5QT1JUU0NYX1BPUlRfUE9XRVIpOworCisJaWYgKHVkYy0+Zm9yY2VfZnMpCisJCXBvcnRzYyB8PSBQT1JUU0NYX0ZPUkNFX0ZVTExfU1BFRURfQ09OTkVDVDsKKwllbHNlCisJCXBvcnRzYyAmPSAoflBPUlRTQ1hfRk9SQ0VfRlVMTF9TUEVFRF9DT05ORUNUKTsKKworCXdyaXRlbChwb3J0c2MsICZ1ZGMtPm9wX3JlZ3MtPnBvcnRzY1swXSk7CisKKwl0bXAgPSByZWFkbCgmdWRjLT5vcF9yZWdzLT5lcGN0cmx4WzBdKTsKKwl0bXAgJj0gfihFUENUUkxfVFhfRVBfU1RBTEwgfCBFUENUUkxfUlhfRVBfU1RBTEwpOworCXdyaXRlbCh0bXAsICZ1ZGMtPm9wX3JlZ3MtPmVwY3RybHhbMF0pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXZfdWRjX2dldF9mcmFtZShzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KQoreworCXN0cnVjdCBtdl91ZGMgKnVkYzsKKwl1MTYJcmV0dmFsOworCisJaWYgKCFnYWRnZXQpCisJCXJldHVybiAtRU5PREVWOworCisJdWRjID0gY29udGFpbmVyX29mKGdhZGdldCwgc3RydWN0IG12X3VkYywgZ2FkZ2V0KTsKKworCXJldHZhbCA9IHJlYWRsKHVkYy0+b3BfcmVncy0+ZnJpbmRleCkgJiBVU0JfRlJJTkRFWF9NQVNLUzsKKworCXJldHVybiByZXR2YWw7Cit9CisKKy8qIFRyaWVzIHRvIHdha2UgdXAgdGhlIGhvc3QgY29ubmVjdGVkIHRvIHRoaXMgZ2FkZ2V0ICovCitzdGF0aWMgaW50IG12X3VkY193YWtldXAoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCkKK3sKKwlzdHJ1Y3QgbXZfdWRjICp1ZGMgPSBjb250YWluZXJfb2YoZ2FkZ2V0LCBzdHJ1Y3QgbXZfdWRjLCBnYWRnZXQpOworCXUzMiBwb3J0c2M7CisKKwkvKiBSZW1vdGUgd2FrZXVwIGZlYXR1cmUgbm90IGVuYWJsZWQgYnkgaG9zdCAqLworCWlmICghdWRjLT5yZW1vdGVfd2FrZXVwKQorCQlyZXR1cm4gLUVOT1RTVVBQOworCisJcG9ydHNjID0gcmVhZGwoJnVkYy0+b3BfcmVncy0+cG9ydHNjKTsKKwkvKiBub3Qgc3VzcGVuZGVkPyAqLworCWlmICghKHBvcnRzYyAmIFBPUlRTQ1hfUE9SVF9TVVNQRU5EKSkKKwkJcmV0dXJuIDA7CisJLyogdHJpZ2dlciBmb3JjZSByZXN1bWUgKi8KKwlwb3J0c2MgfD0gUE9SVFNDWF9QT1JUX0ZPUkNFX1JFU1VNRTsKKwl3cml0ZWwocG9ydHNjLCAmdWRjLT5vcF9yZWdzLT5wb3J0c2NbMF0pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG12X3VkY19wdWxsdXAoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCwgaW50IGlzX29uKQoreworCXN0cnVjdCBtdl91ZGMgKnVkYzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJdWRjID0gY29udGFpbmVyX29mKGdhZGdldCwgc3RydWN0IG12X3VkYywgZ2FkZ2V0KTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdWRjLT5sb2NrLCBmbGFncyk7CisKKwl1ZGMtPnNvZnRjb25uZWN0ID0gKGlzX29uICE9IDApOworCWlmICh1ZGMtPmRyaXZlciAmJiB1ZGMtPnNvZnRjb25uZWN0KQorCQl1ZGNfc3RhcnQodWRjKTsKKwllbHNlCisJCXVkY19zdG9wKHVkYyk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1ZGMtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworLyogZGV2aWNlIGNvbnRyb2xsZXIgdXNiX2dhZGdldF9vcHMgc3RydWN0dXJlICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9nYWRnZXRfb3BzIG12X29wcyA9IHsKKworCS8qIHJldHVybnMgdGhlIGN1cnJlbnQgZnJhbWUgbnVtYmVyICovCisJLmdldF9mcmFtZQk9IG12X3VkY19nZXRfZnJhbWUsCisKKwkvKiB0cmllcyB0byB3YWtlIHVwIHRoZSBob3N0IGNvbm5lY3RlZCB0byB0aGlzIGdhZGdldCAqLworCS53YWtldXAJCT0gbXZfdWRjX3dha2V1cCwKKworCS8qIEQrIHB1bGx1cCwgc29mdHdhcmUtY29udHJvbGxlZCBjb25uZWN0L2Rpc2Nvbm5lY3QgdG8gVVNCIGhvc3QgKi8KKwkucHVsbHVwCQk9IG12X3VkY19wdWxsdXAsCit9OworCitzdGF0aWMgdm9pZCBtdl91ZGNfdGVzdG1vZGUoc3RydWN0IG12X3VkYyAqdWRjLCB1MTYgaW5kZXgsIGJvb2wgZW50ZXIpCit7CisJZGV2X2luZm8oJnVkYy0+ZGV2LT5kZXYsICJUZXN0IE1vZGUgaXMgbm90IHN1cHBvcnQgeWV0XG4iKTsKK30KKworc3RhdGljIGludCBlcHNfaW5pdChzdHJ1Y3QgbXZfdWRjICp1ZGMpCit7CisJc3RydWN0IG12X2VwCSplcDsKKwljaGFyIG5hbWVbMTRdOworCWludCBpOworCisJLyogaW5pdGlhbGl6ZSBlcDAgKi8KKwllcCA9ICZ1ZGMtPmVwc1swXTsKKwllcC0+dWRjID0gdWRjOworCXN0cm5jcHkoZXAtPm5hbWUsICJlcDAiLCBzaXplb2YoZXAtPm5hbWUpKTsKKwllcC0+ZXAubmFtZSA9IGVwLT5uYW1lOworCWVwLT5lcC5vcHMgPSAmbXZfZXBfb3BzOworCWVwLT53ZWRnZSA9IDA7CisJZXAtPnN0b3BwZWQgPSAwOworCWVwLT5lcC5tYXhwYWNrZXQgPSBFUDBfTUFYX1BLVF9TSVpFOworCWVwLT5lcF9udW0gPSAwOworCWVwLT5kZXNjID0gJm12X2VwMF9kZXNjOworCUlOSVRfTElTVF9IRUFEKCZlcC0+cXVldWUpOworCisJZXAtPmVwX3R5cGUgPSBVU0JfRU5EUE9JTlRfWEZFUl9DT05UUk9MOworCisJLyogaW5pdGlhbGl6ZSBvdGhlciBlbmRwb2ludHMgKi8KKwlmb3IgKGkgPSAyOyBpIDwgdWRjLT5tYXhfZXBzICogMjsgaSsrKSB7CisJCWVwID0gJnVkYy0+ZXBzW2ldOworCQlpZiAoaSAlIDIpIHsKKwkJCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgImVwJWRpbiIsIGkgLyAyKTsKKwkJCWVwLT5kaXJlY3Rpb24gPSBFUF9ESVJfSU47CisJCX0gZWxzZSB7CisJCQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJlcCVkb3V0IiwgaSAvIDIpOworCQkJZXAtPmRpcmVjdGlvbiA9IEVQX0RJUl9PVVQ7CisJCX0KKwkJZXAtPnVkYyA9IHVkYzsKKwkJc3RybmNweShlcC0+bmFtZSwgbmFtZSwgc2l6ZW9mKGVwLT5uYW1lKSk7CisJCWVwLT5lcC5uYW1lID0gZXAtPm5hbWU7CisKKwkJZXAtPmVwLm9wcyA9ICZtdl9lcF9vcHM7CisJCWVwLT5zdG9wcGVkID0gMDsKKwkJZXAtPmVwLm1heHBhY2tldCA9ICh1bnNpZ25lZCBzaG9ydCkgfjA7CisJCWVwLT5lcF9udW0gPSBpIC8gMjsKKworCQlJTklUX0xJU1RfSEVBRCgmZXAtPnF1ZXVlKTsKKwkJbGlzdF9hZGRfdGFpbCgmZXAtPmVwLmVwX2xpc3QsICZ1ZGMtPmdhZGdldC5lcF9saXN0KTsKKworCQllcC0+ZHFoID0gJnVkYy0+ZXBfZHFoW2ldOworCX0KKworCXJldHVybiAwOworfQorCisvKiBkZWxldGUgYWxsIGVuZHBvaW50IHJlcXVlc3RzLCBjYWxsZWQgd2l0aCBzcGlubG9jayBoZWxkICovCitzdGF0aWMgdm9pZCBudWtlKHN0cnVjdCBtdl9lcCAqZXAsIGludCBzdGF0dXMpCit7CisJLyogY2FsbGVkIHdpdGggc3BpbmxvY2sgaGVsZCAqLworCWVwLT5zdG9wcGVkID0gMTsKKworCS8qIGVuZHBvaW50IGZpZm8gZmx1c2ggKi8KKwltdl9lcF9maWZvX2ZsdXNoKCZlcC0+ZXApOworCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZlcC0+cXVldWUpKSB7CisJCXN0cnVjdCBtdl9yZXEgKnJlcSA9IE5VTEw7CisJCXJlcSA9IGxpc3RfZW50cnkoZXAtPnF1ZXVlLm5leHQsIHN0cnVjdCBtdl9yZXEsIHF1ZXVlKTsKKwkJZG9uZShlcCwgcmVxLCBzdGF0dXMpOworCX0KK30KKworLyogc3RvcCBhbGwgVVNCIGFjdGl2aXRpZXMgKi8KK3N0YXRpYyB2b2lkIHN0b3BfYWN0aXZpdHkoc3RydWN0IG12X3VkYyAqdWRjLCBzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcikKK3sKKwlzdHJ1Y3QgbXZfZXAJKmVwOworCisJbnVrZSgmdWRjLT5lcHNbMF0sIC1FU0hVVERPV04pOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShlcCwgJnVkYy0+Z2FkZ2V0LmVwX2xpc3QsIGVwLmVwX2xpc3QpIHsKKwkJbnVrZShlcCwgLUVTSFVURE9XTik7CisJfQorCisJLyogcmVwb3J0IGRpc2Nvbm5lY3Q7IHRoZSBkcml2ZXIgaXMgYWxyZWFkeSBxdWllc2NlZCAqLworCWlmIChkcml2ZXIpIHsKKwkJc3Bpbl91bmxvY2soJnVkYy0+bG9jayk7CisJCWRyaXZlci0+ZGlzY29ubmVjdCgmdWRjLT5nYWRnZXQpOworCQlzcGluX2xvY2soJnVkYy0+bG9jayk7CisJfQorfQorCitpbnQgdXNiX2dhZGdldF9wcm9iZV9kcml2ZXIoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIsCisJCWludCAoKmJpbmQpKHN0cnVjdCB1c2JfZ2FkZ2V0ICopKQoreworCXN0cnVjdCBtdl91ZGMgKnVkYyA9IHRoZV9jb250cm9sbGVyOworCWludCByZXR2YWwgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIXVkYykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAodWRjLT5kcml2ZXIpCisJCXJldHVybiAtRUJVU1k7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdWRjLT5sb2NrLCBmbGFncyk7CisKKwkvKiBob29rIHVwIHRoZSBkcml2ZXIgLi4uICovCisJZHJpdmVyLT5kcml2ZXIuYnVzID0gTlVMTDsKKwl1ZGMtPmRyaXZlciA9IGRyaXZlcjsKKwl1ZGMtPmdhZGdldC5kZXYuZHJpdmVyID0gJmRyaXZlci0+ZHJpdmVyOworCisJdWRjLT51c2Jfc3RhdGUgPSBVU0JfU1RBVEVfQVRUQUNIRUQ7CisJdWRjLT5lcDBfc3RhdGUgPSBXQUlUX0ZPUl9TRVRVUDsKKwl1ZGMtPmVwMF9kaXIgPSBVU0JfRElSX09VVDsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVkYy0+bG9jaywgZmxhZ3MpOworCisJcmV0dmFsID0gYmluZCgmdWRjLT5nYWRnZXQpOworCWlmIChyZXR2YWwpIHsKKwkJZGV2X2VycigmdWRjLT5kZXYtPmRldiwgImJpbmQgdG8gZHJpdmVyICVzIC0tPiAlZFxuIiwKKwkJCQlkcml2ZXItPmRyaXZlci5uYW1lLCByZXR2YWwpOworCQl1ZGMtPmRyaXZlciA9IE5VTEw7CisJCXVkYy0+Z2FkZ2V0LmRldi5kcml2ZXIgPSBOVUxMOworCQlyZXR1cm4gcmV0dmFsOworCX0KKwl1ZGNfcmVzZXQodWRjKTsKKwllcDBfcmVzZXQodWRjKTsKKwl1ZGNfc3RhcnQodWRjKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTCh1c2JfZ2FkZ2V0X3Byb2JlX2RyaXZlcik7CisKK2ludCB1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyKQoreworCXN0cnVjdCBtdl91ZGMgKnVkYyA9IHRoZV9jb250cm9sbGVyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIXVkYykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwl1ZGNfc3RvcCh1ZGMpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnVkYy0+bG9jaywgZmxhZ3MpOworCisJLyogc3RvcCBhbGwgdXNiIGFjdGl2aXRpZXMgKi8KKwl1ZGMtPmdhZGdldC5zcGVlZCA9IFVTQl9TUEVFRF9VTktOT1dOOworCXN0b3BfYWN0aXZpdHkodWRjLCBkcml2ZXIpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVkYy0+bG9jaywgZmxhZ3MpOworCisJLyogdW5iaW5kIGdhZGdldCBkcml2ZXIgKi8KKwlkcml2ZXItPnVuYmluZCgmdWRjLT5nYWRnZXQpOworCXVkYy0+Z2FkZ2V0LmRldi5kcml2ZXIgPSBOVUxMOworCXVkYy0+ZHJpdmVyID0gTlVMTDsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTCh1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyKTsKKworc3RhdGljIGludAordWRjX3ByaW1lX3N0YXR1cyhzdHJ1Y3QgbXZfdWRjICp1ZGMsIHU4IGRpcmVjdGlvbiwgdTE2IHN0YXR1cywgYm9vbCBlbXB0eSkKK3sKKwlpbnQgcmV0dmFsID0gMDsKKwlzdHJ1Y3QgbXZfcmVxICpyZXE7CisJc3RydWN0IG12X2VwICplcDsKKworCWVwID0gJnVkYy0+ZXBzWzBdOworCXVkYy0+ZXAwX2RpciA9IGRpcmVjdGlvbjsKKworCXJlcSA9IHVkYy0+c3RhdHVzX3JlcTsKKworCS8qIGZpbGwgaW4gdGhlIHJlcWVzdCBzdHJ1Y3R1cmUgKi8KKwlpZiAoZW1wdHkgPT0gZmFsc2UpIHsKKwkJKigodTE2ICopIHJlcS0+cmVxLmJ1ZikgPSBjcHVfdG9fbGUxNihzdGF0dXMpOworCQlyZXEtPnJlcS5sZW5ndGggPSAyOworCX0gZWxzZQorCQlyZXEtPnJlcS5sZW5ndGggPSAwOworCisJcmVxLT5lcCA9IGVwOworCXJlcS0+cmVxLnN0YXR1cyA9IC1FSU5QUk9HUkVTUzsKKwlyZXEtPnJlcS5hY3R1YWwgPSAwOworCXJlcS0+cmVxLmNvbXBsZXRlID0gTlVMTDsKKwlyZXEtPmR0ZF9jb3VudCA9IDA7CisKKwkvKiBwcmltZSB0aGUgZGF0YSBwaGFzZSAqLworCWlmICghcmVxX3RvX2R0ZChyZXEpKQorCQlyZXR2YWwgPSBxdWV1ZV9kdGQoZXAsIHJlcSk7CisJZWxzZXsJLyogbm8gbWVtICovCisJCXJldHZhbCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWlmIChyZXR2YWwpIHsKKwkJZGV2X2VycigmdWRjLT5kZXYtPmRldiwgInJlc3BvbnNlIGVycm9yIG9uIEdFVF9TVEFUVVMgcmVxdWVzdFxuIik7CisJCWdvdG8gb3V0OworCX0KKworCWxpc3RfYWRkX3RhaWwoJnJlcS0+cXVldWUsICZlcC0+cXVldWUpOworCisJcmV0dXJuIDA7CitvdXQ6CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgY2g5c2V0YWRkcmVzcyhzdHJ1Y3QgbXZfdWRjICp1ZGMsIHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKnNldHVwKQoreworCXVkYy0+ZGV2X2FkZHIgPSAodTgpc2V0dXAtPndWYWx1ZTsKKworCS8qIHVwZGF0ZSB1c2Igc3RhdGUgKi8KKwl1ZGMtPnVzYl9zdGF0ZSA9IFVTQl9TVEFURV9BRERSRVNTOworCisJaWYgKHVkY19wcmltZV9zdGF0dXModWRjLCBFUF9ESVJfSU4sIDAsIHRydWUpKQorCQllcDBfc3RhbGwodWRjKTsKK30KKworc3RhdGljIHZvaWQgY2g5Z2V0c3RhdHVzKHN0cnVjdCBtdl91ZGMgKnVkYywgdTggZXBfbnVtLAorCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKnNldHVwKQoreworCXUxNiBzdGF0dXM7CisJaW50IHJldHZhbDsKKworCWlmICgoc2V0dXAtPmJSZXF1ZXN0VHlwZSAmIChVU0JfRElSX0lOIHwgVVNCX1RZUEVfTUFTSykpCisJCSE9IChVU0JfRElSX0lOIHwgVVNCX1RZUEVfU1RBTkRBUkQpKQorCQlyZXR1cm47CisKKwlpZiAoKHNldHVwLT5iUmVxdWVzdFR5cGUgJiBVU0JfUkVDSVBfTUFTSykgPT0gVVNCX1JFQ0lQX0RFVklDRSkgeworCQlzdGF0dXMgPSAxIDw8IFVTQl9ERVZJQ0VfU0VMRl9QT1dFUkVEOworCQlzdGF0dXMgfD0gdWRjLT5yZW1vdGVfd2FrZXVwIDw8IFVTQl9ERVZJQ0VfUkVNT1RFX1dBS0VVUDsKKwl9IGVsc2UgaWYgKChzZXR1cC0+YlJlcXVlc3RUeXBlICYgVVNCX1JFQ0lQX01BU0spCisJCQk9PSBVU0JfUkVDSVBfSU5URVJGQUNFKSB7CisJCS8qIGdldCBpbnRlcmZhY2Ugc3RhdHVzICovCisJCXN0YXR1cyA9IDA7CisJfSBlbHNlIGlmICgoc2V0dXAtPmJSZXF1ZXN0VHlwZSAmIFVTQl9SRUNJUF9NQVNLKQorCQkJPT0gVVNCX1JFQ0lQX0VORFBPSU5UKSB7CisJCXU4IGVwX251bSwgZGlyZWN0aW9uOworCisJCWVwX251bSA9IHNldHVwLT53SW5kZXggJiBVU0JfRU5EUE9JTlRfTlVNQkVSX01BU0s7CisJCWRpcmVjdGlvbiA9IChzZXR1cC0+d0luZGV4ICYgVVNCX0VORFBPSU5UX0RJUl9NQVNLKQorCQkJCT8gRVBfRElSX0lOIDogRVBfRElSX09VVDsKKwkJc3RhdHVzID0gZXBfaXNfc3RhbGwodWRjLCBlcF9udW0sIGRpcmVjdGlvbikKKwkJCQk8PCBVU0JfRU5EUE9JTlRfSEFMVDsKKwl9CisKKwlyZXR2YWwgPSB1ZGNfcHJpbWVfc3RhdHVzKHVkYywgRVBfRElSX0lOLCBzdGF0dXMsIGZhbHNlKTsKKwlpZiAocmV0dmFsKQorCQllcDBfc3RhbGwodWRjKTsKK30KKworc3RhdGljIHZvaWQgY2g5Y2xlYXJmZWF0dXJlKHN0cnVjdCBtdl91ZGMgKnVkYywgc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqc2V0dXApCit7CisJdTggZXBfbnVtOworCXU4IGRpcmVjdGlvbjsKKwlzdHJ1Y3QgbXZfZXAgKmVwOworCisJaWYgKChzZXR1cC0+YlJlcXVlc3RUeXBlICYgKFVTQl9UWVBFX01BU0sgfCBVU0JfUkVDSVBfTUFTSykpCisJCT09ICgoVVNCX1RZUEVfU1RBTkRBUkQgfCBVU0JfUkVDSVBfREVWSUNFKSkpIHsKKwkJc3dpdGNoIChzZXR1cC0+d1ZhbHVlKSB7CisJCWNhc2UgVVNCX0RFVklDRV9SRU1PVEVfV0FLRVVQOgorCQkJdWRjLT5yZW1vdGVfd2FrZXVwID0gMDsKKwkJCWJyZWFrOworCQljYXNlIFVTQl9ERVZJQ0VfVEVTVF9NT0RFOgorCQkJbXZfdWRjX3Rlc3Rtb2RlKHVkYywgMCwgZmFsc2UpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlnb3RvIG91dDsKKwkJfQorCX0gZWxzZSBpZiAoKHNldHVwLT5iUmVxdWVzdFR5cGUgJiAoVVNCX1RZUEVfTUFTSyB8IFVTQl9SRUNJUF9NQVNLKSkKKwkJPT0gKChVU0JfVFlQRV9TVEFOREFSRCB8IFVTQl9SRUNJUF9FTkRQT0lOVCkpKSB7CisJCXN3aXRjaCAoc2V0dXAtPndWYWx1ZSkgeworCQljYXNlIFVTQl9FTkRQT0lOVF9IQUxUOgorCQkJZXBfbnVtID0gc2V0dXAtPndJbmRleCAmIFVTQl9FTkRQT0lOVF9OVU1CRVJfTUFTSzsKKwkJCWRpcmVjdGlvbiA9IChzZXR1cC0+d0luZGV4ICYgVVNCX0VORFBPSU5UX0RJUl9NQVNLKQorCQkJCT8gRVBfRElSX0lOIDogRVBfRElSX09VVDsKKwkJCWlmIChzZXR1cC0+d1ZhbHVlICE9IDAgfHwgc2V0dXAtPndMZW5ndGggIT0gMAorCQkJCXx8IGVwX251bSA+IHVkYy0+bWF4X2VwcykKKwkJCQlnb3RvIG91dDsKKwkJCWVwID0gJnVkYy0+ZXBzW2VwX251bSAqIDIgKyBkaXJlY3Rpb25dOworCQkJaWYgKGVwLT53ZWRnZSA9PSAxKQorCQkJCWJyZWFrOworCQkJc3Bpbl91bmxvY2soJnVkYy0+bG9jayk7CisJCQllcF9zZXRfc3RhbGwodWRjLCBlcF9udW0sIGRpcmVjdGlvbiwgMCk7CisJCQlzcGluX2xvY2soJnVkYy0+bG9jayk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWdvdG8gb3V0OworCQl9CisJfSBlbHNlCisJCWdvdG8gb3V0OworCisJaWYgKHVkY19wcmltZV9zdGF0dXModWRjLCBFUF9ESVJfSU4sIDAsIHRydWUpKQorCQllcDBfc3RhbGwodWRjKTsKKwllbHNlCisJCXVkYy0+ZXAwX3N0YXRlID0gREFUQV9TVEFURV9YTUlUOworb3V0OgorCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgY2g5c2V0ZmVhdHVyZShzdHJ1Y3QgbXZfdWRjICp1ZGMsIHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKnNldHVwKQoreworCXU4IGVwX251bTsKKwl1OCBkaXJlY3Rpb247CisKKwlpZiAoKHNldHVwLT5iUmVxdWVzdFR5cGUgJiAoVVNCX1RZUEVfTUFTSyB8IFVTQl9SRUNJUF9NQVNLKSkKKwkJPT0gKChVU0JfVFlQRV9TVEFOREFSRCB8IFVTQl9SRUNJUF9ERVZJQ0UpKSkgeworCQlzd2l0Y2ggKHNldHVwLT53VmFsdWUpIHsKKwkJY2FzZSBVU0JfREVWSUNFX1JFTU9URV9XQUtFVVA6CisJCQl1ZGMtPnJlbW90ZV93YWtldXAgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgVVNCX0RFVklDRV9URVNUX01PREU6CisJCQlpZiAoc2V0dXAtPndJbmRleCAmIDB4RkYKKwkJCQkmJiB1ZGMtPmdhZGdldC5zcGVlZCAhPSBVU0JfU1BFRURfSElHSCkKKwkJCQlnb3RvIG91dDsKKwkJCWlmICh1ZGMtPnVzYl9zdGF0ZSA9PSBVU0JfU1RBVEVfQ09ORklHVVJFRAorCQkJCXx8IHVkYy0+dXNiX3N0YXRlID09IFVTQl9TVEFURV9BRERSRVNTCisJCQkJfHwgdWRjLT51c2Jfc3RhdGUgPT0gVVNCX1NUQVRFX0RFRkFVTFQpCisJCQkJbXZfdWRjX3Rlc3Rtb2RlKHVkYywKKwkJCQkJc2V0dXAtPndJbmRleCAmIDB4RkYwMCwgdHJ1ZSk7CisJCQllbHNlCisJCQkJZ290byBvdXQ7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWdvdG8gb3V0OworCQl9CisJfSBlbHNlIGlmICgoc2V0dXAtPmJSZXF1ZXN0VHlwZSAmIChVU0JfVFlQRV9NQVNLIHwgVVNCX1JFQ0lQX01BU0spKQorCQk9PSAoKFVTQl9UWVBFX1NUQU5EQVJEIHwgVVNCX1JFQ0lQX0VORFBPSU5UKSkpIHsKKwkJc3dpdGNoIChzZXR1cC0+d1ZhbHVlKSB7CisJCWNhc2UgVVNCX0VORFBPSU5UX0hBTFQ6CisJCQllcF9udW0gPSBzZXR1cC0+d0luZGV4ICYgVVNCX0VORFBPSU5UX05VTUJFUl9NQVNLOworCQkJZGlyZWN0aW9uID0gKHNldHVwLT53SW5kZXggJiBVU0JfRU5EUE9JTlRfRElSX01BU0spCisJCQkJPyBFUF9ESVJfSU4gOiBFUF9ESVJfT1VUOworCQkJaWYgKHNldHVwLT53VmFsdWUgIT0gMCB8fCBzZXR1cC0+d0xlbmd0aCAhPSAwCisJCQkJfHwgZXBfbnVtID4gdWRjLT5tYXhfZXBzKQorCQkJCWdvdG8gb3V0OworCQkJc3Bpbl91bmxvY2soJnVkYy0+bG9jayk7CisJCQllcF9zZXRfc3RhbGwodWRjLCBlcF9udW0sIGRpcmVjdGlvbiwgMSk7CisJCQlzcGluX2xvY2soJnVkYy0+bG9jayk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWdvdG8gb3V0OworCQl9CisJfSBlbHNlCisJCWdvdG8gb3V0OworCisJaWYgKHVkY19wcmltZV9zdGF0dXModWRjLCBFUF9ESVJfSU4sIDAsIHRydWUpKQorCQllcDBfc3RhbGwodWRjKTsKK291dDoKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9zZXR1cF9wYWNrZXQoc3RydWN0IG12X3VkYyAqdWRjLCB1OCBlcF9udW0sCisJc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqc2V0dXApCit7CisJYm9vbCBkZWxlZ2F0ZSA9IGZhbHNlOworCisJbnVrZSgmdWRjLT5lcHNbZXBfbnVtICogMiArIEVQX0RJUl9PVVRdLCAtRVNIVVRET1dOKTsKKworCWRldl9kYmcoJnVkYy0+ZGV2LT5kZXYsICJTRVRVUCAlMDJ4LiUwMnggdiUwNHggaSUwNHggbCUwNHhcbiIsCisJCQlzZXR1cC0+YlJlcXVlc3RUeXBlLCBzZXR1cC0+YlJlcXVlc3QsCisJCQlzZXR1cC0+d1ZhbHVlLCBzZXR1cC0+d0luZGV4LCBzZXR1cC0+d0xlbmd0aCk7CisJLyogV2UgcHJvY2VzcyBzb21lIHN0YXJkYXJkIHNldHVwIHJlcXVlc3RzIGhlcmUgKi8KKwlpZiAoKHNldHVwLT5iUmVxdWVzdFR5cGUgJiBVU0JfVFlQRV9NQVNLKSA9PSBVU0JfVFlQRV9TVEFOREFSRCkgeworCQlzd2l0Y2ggKHNldHVwLT5iUmVxdWVzdCkgeworCQljYXNlIFVTQl9SRVFfR0VUX1NUQVRVUzoKKwkJCWNoOWdldHN0YXR1cyh1ZGMsIGVwX251bSwgc2V0dXApOworCQkJYnJlYWs7CisKKwkJY2FzZSBVU0JfUkVRX1NFVF9BRERSRVNTOgorCQkJY2g5c2V0YWRkcmVzcyh1ZGMsIHNldHVwKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVVNCX1JFUV9DTEVBUl9GRUFUVVJFOgorCQkJY2g5Y2xlYXJmZWF0dXJlKHVkYywgc2V0dXApOworCQkJYnJlYWs7CisKKwkJY2FzZSBVU0JfUkVRX1NFVF9GRUFUVVJFOgorCQkJY2g5c2V0ZmVhdHVyZSh1ZGMsIHNldHVwKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlkZWxlZ2F0ZSA9IHRydWU7CisJCX0KKwl9IGVsc2UKKwkJZGVsZWdhdGUgPSB0cnVlOworCisJLyogZGVsZWdhdGUgVVNCIHN0YW5kYXJkIHJlcXVlc3RzIHRvIHRoZSBnYWRnZXQgZHJpdmVyICovCisJaWYgKGRlbGVnYXRlID09IHRydWUpIHsKKwkJLyogVVNCIHJlcXVlc3RzIGhhbmRsZWQgYnkgZ2FkZ2V0ICovCisJCWlmIChzZXR1cC0+d0xlbmd0aCkgeworCQkJLyogREFUQSBwaGFzZSBmcm9tIGdhZGdldCwgU1RBVFVTIHBoYXNlIGZyb20gdWRjICovCisJCQl1ZGMtPmVwMF9kaXIgPSAoc2V0dXAtPmJSZXF1ZXN0VHlwZSAmIFVTQl9ESVJfSU4pCisJCQkJCT8gIEVQX0RJUl9JTiA6IEVQX0RJUl9PVVQ7CisJCQlzcGluX3VubG9jaygmdWRjLT5sb2NrKTsKKwkJCWlmICh1ZGMtPmRyaXZlci0+c2V0dXAoJnVkYy0+Z2FkZ2V0LAorCQkJCSZ1ZGMtPmxvY2FsX3NldHVwX2J1ZmYpIDwgMCkKKwkJCQllcDBfc3RhbGwodWRjKTsKKwkJCXNwaW5fbG9jaygmdWRjLT5sb2NrKTsKKwkJCXVkYy0+ZXAwX3N0YXRlID0gKHNldHVwLT5iUmVxdWVzdFR5cGUgJiBVU0JfRElSX0lOKQorCQkJCQk/ICBEQVRBX1NUQVRFX1hNSVQgOiBEQVRBX1NUQVRFX1JFQ1Y7CisJCX0gZWxzZSB7CisJCQkvKiBubyBEQVRBIHBoYXNlLCBJTiBTVEFUVVMgcGhhc2UgZnJvbSBnYWRnZXQgKi8KKwkJCXVkYy0+ZXAwX2RpciA9IEVQX0RJUl9JTjsKKwkJCXNwaW5fdW5sb2NrKCZ1ZGMtPmxvY2spOworCQkJaWYgKHVkYy0+ZHJpdmVyLT5zZXR1cCgmdWRjLT5nYWRnZXQsCisJCQkJJnVkYy0+bG9jYWxfc2V0dXBfYnVmZikgPCAwKQorCQkJCWVwMF9zdGFsbCh1ZGMpOworCQkJc3Bpbl9sb2NrKCZ1ZGMtPmxvY2spOworCQkJdWRjLT5lcDBfc3RhdGUgPSBXQUlUX0ZPUl9PVVRfU1RBVFVTOworCQl9CisJfQorfQorCisvKiBjb21wbGV0ZSBEQVRBIG9yIFNUQVRVUyBwaGFzZSBvZiBlcDAgcHJpbWUgc3RhdHVzIHBoYXNlIGlmIG5lZWRlZCAqLworc3RhdGljIHZvaWQgZXAwX3JlcV9jb21wbGV0ZShzdHJ1Y3QgbXZfdWRjICp1ZGMsCisJc3RydWN0IG12X2VwICplcDAsIHN0cnVjdCBtdl9yZXEgKnJlcSkKK3sKKwl1MzIgbmV3X2FkZHI7CisKKwlpZiAodWRjLT51c2Jfc3RhdGUgPT0gVVNCX1NUQVRFX0FERFJFU1MpIHsKKwkJLyogc2V0IHRoZSBuZXcgYWRkcmVzcyAqLworCQluZXdfYWRkciA9ICh1MzIpdWRjLT5kZXZfYWRkcjsKKwkJd3JpdGVsKG5ld19hZGRyIDw8IFVTQl9ERVZJQ0VfQUREUkVTU19CSVRfU0hJRlQsCisJCQkmdWRjLT5vcF9yZWdzLT5kZXZpY2VhZGRyKTsKKwl9CisKKwlkb25lKGVwMCwgcmVxLCAwKTsKKworCXN3aXRjaCAodWRjLT5lcDBfc3RhdGUpIHsKKwljYXNlIERBVEFfU1RBVEVfWE1JVDoKKwkJLyogcmVjZWl2ZSBzdGF0dXMgcGhhc2UgKi8KKwkJaWYgKHVkY19wcmltZV9zdGF0dXModWRjLCBFUF9ESVJfT1VULCAwLCB0cnVlKSkKKwkJCWVwMF9zdGFsbCh1ZGMpOworCQlicmVhazsKKwljYXNlIERBVEFfU1RBVEVfUkVDVjoKKwkJLyogc2VuZCBzdGF0dXMgcGhhc2UgKi8KKwkJaWYgKHVkY19wcmltZV9zdGF0dXModWRjLCBFUF9ESVJfSU4sIDAgLCB0cnVlKSkKKwkJCWVwMF9zdGFsbCh1ZGMpOworCQlicmVhazsKKwljYXNlIFdBSVRfRk9SX09VVF9TVEFUVVM6CisJCXVkYy0+ZXAwX3N0YXRlID0gV0FJVF9GT1JfU0VUVVA7CisJCWJyZWFrOworCWNhc2UgV0FJVF9GT1JfU0VUVVA6CisJCWRldl9lcnIoJnVkYy0+ZGV2LT5kZXYsICJ1bmV4cGVjdCBlcDAgcGFja2V0c1xuIik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWVwMF9zdGFsbCh1ZGMpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGdldF9zZXR1cF9kYXRhKHN0cnVjdCBtdl91ZGMgKnVkYywgdTggZXBfbnVtLCB1OCAqYnVmZmVyX3B0cikKK3sKKwl1MzIgdGVtcDsKKwlzdHJ1Y3QgbXZfZHFoICpkcWg7CisKKwlkcWggPSAmdWRjLT5lcF9kcWhbZXBfbnVtICogMiArIEVQX0RJUl9PVVRdOworCisJLyogQ2xlYXIgYml0IGluIEVORFBUU0VUVVBTVEFUICovCisJdGVtcCA9IHJlYWRsKCZ1ZGMtPm9wX3JlZ3MtPmVwc2V0dXBzdGF0KTsKKwl3cml0ZWwodGVtcCB8ICgxIDw8IGVwX251bSksICZ1ZGMtPm9wX3JlZ3MtPmVwc2V0dXBzdGF0KTsKKworCS8qIHdoaWxlIGEgaGF6YXJkIGV4aXN0cyB3aGVuIHNldHVwIHBhY2thZ2UgYXJyaXZlcyAqLworCWRvIHsKKwkJLyogU2V0IFNldHVwIFRyaXB3aXJlICovCisJCXRlbXAgPSByZWFkbCgmdWRjLT5vcF9yZWdzLT51c2JjbWQpOworCQl3cml0ZWwodGVtcCB8IFVTQkNNRF9TRVRVUF9UUklQV0lSRV9TRVQsICZ1ZGMtPm9wX3JlZ3MtPnVzYmNtZCk7CisKKwkJLyogQ29weSB0aGUgc2V0dXAgcGFja2V0IHRvIGxvY2FsIGJ1ZmZlciAqLworCQltZW1jcHkoYnVmZmVyX3B0ciwgKHU4ICopIGRxaC0+c2V0dXBfYnVmZmVyLCA4KTsKKwl9IHdoaWxlICghKHJlYWRsKCZ1ZGMtPm9wX3JlZ3MtPnVzYmNtZCkgJiBVU0JDTURfU0VUVVBfVFJJUFdJUkVfU0VUKSk7CisKKwkvKiBDbGVhciBTZXR1cCBUcmlwd2lyZSAqLworCXRlbXAgPSByZWFkbCgmdWRjLT5vcF9yZWdzLT51c2JjbWQpOworCXdyaXRlbCh0ZW1wICYgflVTQkNNRF9TRVRVUF9UUklQV0lSRV9TRVQsICZ1ZGMtPm9wX3JlZ3MtPnVzYmNtZCk7Cit9CisKK3N0YXRpYyB2b2lkIGlycV9wcm9jZXNzX3RyX2NvbXBsZXRlKHN0cnVjdCBtdl91ZGMgKnVkYykKK3sKKwl1MzIgdG1wLCBiaXRfcG9zOworCWludCBpLCBlcF9udW0gPSAwLCBkaXJlY3Rpb24gPSAwOworCXN0cnVjdCBtdl9lcAkqY3Vycl9lcDsKKwlzdHJ1Y3QgbXZfcmVxICpjdXJyX3JlcSwgKnRlbXBfcmVxOworCWludCBzdGF0dXM7CisKKwkvKgorCSAqIFdlIHVzZSBzZXBhcmF0ZSBsb29wcyBmb3IgRU5EUFRTRVRVUFNUQVQgYW5kIEVORFBUQ09NUExFVEUKKwkgKiBiZWNhdXNlIHRoZSBzZXR1cCBwYWNrZXRzIGFyZSB0byBiZSByZWFkIEFTQVAKKwkgKi8KKworCS8qIFByb2Nlc3MgYWxsIFNldHVwIHBhY2tldCByZWNlaXZlZCBpbnRlcnJ1cHRzICovCisJdG1wID0gcmVhZGwoJnVkYy0+b3BfcmVncy0+ZXBzZXR1cHN0YXQpOworCisJaWYgKHRtcCkgeworCQlmb3IgKGkgPSAwOyBpIDwgdWRjLT5tYXhfZXBzOyBpKyspIHsKKwkJCWlmICh0bXAgJiAoMSA8PCBpKSkgeworCQkJCWdldF9zZXR1cF9kYXRhKHVkYywgaSwKKwkJCQkJKHU4ICopKCZ1ZGMtPmxvY2FsX3NldHVwX2J1ZmYpKTsKKwkJCQloYW5kbGVfc2V0dXBfcGFja2V0KHVkYywgaSwKKwkJCQkJJnVkYy0+bG9jYWxfc2V0dXBfYnVmZik7CisJCQl9CisJCX0KKwl9CisKKwkvKiBEb24ndCBjbGVhciB0aGUgZW5kcG9pbnQgc2V0dXAgc3RhdHVzIHJlZ2lzdGVyIGhlcmUuCisJICogSXQgaXMgY2xlYXJlZCBhcyBhIHNldHVwIHBhY2tldCBpcyByZWFkIG91dCBvZiB0aGUgYnVmZmVyCisJICovCisKKwkvKiBQcm9jZXNzIG5vbi1zZXR1cCB0cmFuc2FjdGlvbiBjb21wbGV0ZSBpbnRlcnJ1cHRzICovCisJdG1wID0gcmVhZGwoJnVkYy0+b3BfcmVncy0+ZXBjb21wbGV0ZSk7CisKKwlpZiAoIXRtcCkKKwkJcmV0dXJuOworCisJd3JpdGVsKHRtcCwgJnVkYy0+b3BfcmVncy0+ZXBjb21wbGV0ZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgdWRjLT5tYXhfZXBzICogMjsgaSsrKSB7CisJCWVwX251bSA9IGkgPj4gMTsKKwkJZGlyZWN0aW9uID0gaSAlIDI7CisKKwkJYml0X3BvcyA9IDEgPDwgKGVwX251bSArIDE2ICogZGlyZWN0aW9uKTsKKworCQlpZiAoIShiaXRfcG9zICYgdG1wKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChpID09IDEpCisJCQljdXJyX2VwID0gJnVkYy0+ZXBzWzBdOworCQllbHNlCisJCQljdXJyX2VwID0gJnVkYy0+ZXBzW2ldOworCQkvKiBwcm9jZXNzIHRoZSByZXEgcXVldWUgdW50aWwgYW4gdW5jb21wbGV0ZSByZXF1ZXN0ICovCisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjdXJyX3JlcSwgdGVtcF9yZXEsCisJCQkmY3Vycl9lcC0+cXVldWUsIHF1ZXVlKSB7CisJCQlzdGF0dXMgPSBwcm9jZXNzX2VwX3JlcSh1ZGMsIGksIGN1cnJfcmVxKTsKKwkJCWlmIChzdGF0dXMpCisJCQkJYnJlYWs7CisKKwkJCS8qIHdyaXRlIGJhY2sgc3RhdHVzIHRvIHJlcSAqLworCQkJY3Vycl9yZXEtPnJlcS5zdGF0dXMgPSBzdGF0dXM7CisKKwkJCS8qIGVwMCByZXF1ZXN0IGNvbXBsZXRpb24gKi8KKwkJCWlmIChlcF9udW0gPT0gMCkgeworCQkJCWVwMF9yZXFfY29tcGxldGUodWRjLCBjdXJyX2VwLCBjdXJyX3JlcSk7CisJCQkJYnJlYWs7CisJCQl9IGVsc2UgeworCQkJCWRvbmUoY3Vycl9lcCwgY3Vycl9yZXEsIHN0YXR1cyk7CisJCQl9CisJCX0KKwl9Cit9CisKK3ZvaWQgaXJxX3Byb2Nlc3NfcmVzZXQoc3RydWN0IG12X3VkYyAqdWRjKQoreworCXUzMiB0bXA7CisJdW5zaWduZWQgaW50IGxvb3BzOworCisJdWRjLT5lcDBfZGlyID0gRVBfRElSX09VVDsKKwl1ZGMtPmVwMF9zdGF0ZSA9IFdBSVRfRk9SX1NFVFVQOworCXVkYy0+cmVtb3RlX3dha2V1cCA9IDA7CQkvKiBkZWZhdWx0IHRvIDAgb24gcmVzZXQgKi8KKworCS8qIFRoZSBhZGRyZXNzIGJpdHMgYXJlIHBhc3QgYml0IDI1LTMxLiBTZXQgdGhlIGFkZHJlc3MgKi8KKwl0bXAgPSByZWFkbCgmdWRjLT5vcF9yZWdzLT5kZXZpY2VhZGRyKTsKKwl0bXAgJj0gfihVU0JfREVWSUNFX0FERFJFU1NfTUFTSyk7CisJd3JpdGVsKHRtcCwgJnVkYy0+b3BfcmVncy0+ZGV2aWNlYWRkcik7CisKKwkvKiBDbGVhciBhbGwgdGhlIHNldHVwIHRva2VuIHNlbWFwaG9yZXMgKi8KKwl0bXAgPSByZWFkbCgmdWRjLT5vcF9yZWdzLT5lcHNldHVwc3RhdCk7CisJd3JpdGVsKHRtcCwgJnVkYy0+b3BfcmVncy0+ZXBzZXR1cHN0YXQpOworCisJLyogQ2xlYXIgYWxsIHRoZSBlbmRwb2ludCBjb21wbGV0ZSBzdGF0dXMgYml0cyAqLworCXRtcCA9IHJlYWRsKCZ1ZGMtPm9wX3JlZ3MtPmVwY29tcGxldGUpOworCXdyaXRlbCh0bXAsICZ1ZGMtPm9wX3JlZ3MtPmVwY29tcGxldGUpOworCisJLyogd2FpdCB1bnRpbCBhbGwgZW5kcHRwcmltZSBiaXRzIGNsZWFyZWQgKi8KKwlsb29wcyA9IExPT1BTKFBSSU1FX1RJTUVPVVQpOworCXdoaWxlIChyZWFkbCgmdWRjLT5vcF9yZWdzLT5lcHByaW1lKSAmIDB4RkZGRkZGRkYpIHsKKwkJaWYgKGxvb3BzID09IDApIHsKKwkJCWRldl9lcnIoJnVkYy0+ZGV2LT5kZXYsCisJCQkJIlRpbWVvdXQgZm9yIEVORFBUUFJJTUUgPSAweCV4XG4iLAorCQkJCXJlYWRsKCZ1ZGMtPm9wX3JlZ3MtPmVwcHJpbWUpKTsKKwkJCWJyZWFrOworCQl9CisJCWxvb3BzLS07CisJCXVkZWxheShMT09QU19VU0VDKTsKKwl9CisKKwkvKiBXcml0ZSAxcyB0byB0aGUgRmx1c2ggcmVnaXN0ZXIgKi8KKwl3cml0ZWwoKHUzMil+MCwgJnVkYy0+b3BfcmVncy0+ZXBmbHVzaCk7CisKKwlpZiAocmVhZGwoJnVkYy0+b3BfcmVncy0+cG9ydHNjWzBdKSAmIFBPUlRTQ1hfUE9SVF9SRVNFVCkgeworCQlkZXZfaW5mbygmdWRjLT5kZXYtPmRldiwgInVzYiBidXMgcmVzZXRcbiIpOworCQl1ZGMtPnVzYl9zdGF0ZSA9IFVTQl9TVEFURV9ERUZBVUxUOworCQkvKiByZXNldCBhbGwgdGhlIHF1ZXVlcywgc3RvcCBhbGwgVVNCIGFjdGl2aXRpZXMgKi8KKwkJc3RvcF9hY3Rpdml0eSh1ZGMsIHVkYy0+ZHJpdmVyKTsKKwl9IGVsc2UgeworCQlkZXZfaW5mbygmdWRjLT5kZXYtPmRldiwgIlVTQiByZXNldCBwb3J0c2MgMHgleFxuIiwKKwkJCXJlYWRsKCZ1ZGMtPm9wX3JlZ3MtPnBvcnRzYykpOworCisJCS8qCisJCSAqIHJlLWluaXRpYWxpemUKKwkJICogY29udHJvbGxlciByZXNldAorCQkgKi8KKwkJdWRjX3Jlc2V0KHVkYyk7CisKKwkJLyogcmVzZXQgYWxsIHRoZSBxdWV1ZXMsIHN0b3AgYWxsIFVTQiBhY3Rpdml0aWVzICovCisJCXN0b3BfYWN0aXZpdHkodWRjLCB1ZGMtPmRyaXZlcik7CisKKwkJLyogcmVzZXQgZXAwIGRRSCBhbmQgZW5kcHRjdHJsICovCisJCWVwMF9yZXNldCh1ZGMpOworCisJCS8qIGVuYWJsZSBpbnRlcnJ1cHQgYW5kIHNldCBjb250cm9sbGVyIHRvIHJ1biBzdGF0ZSAqLworCQl1ZGNfc3RhcnQodWRjKTsKKworCQl1ZGMtPnVzYl9zdGF0ZSA9IFVTQl9TVEFURV9BVFRBQ0hFRDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9idXNfcmVzdW1lKHN0cnVjdCBtdl91ZGMgKnVkYykKK3sKKwl1ZGMtPnVzYl9zdGF0ZSA9IHVkYy0+cmVzdW1lX3N0YXRlOworCXVkYy0+cmVzdW1lX3N0YXRlID0gMDsKKworCS8qIHJlcG9ydCByZXN1bWUgdG8gdGhlIGRyaXZlciAqLworCWlmICh1ZGMtPmRyaXZlcikgeworCQlpZiAodWRjLT5kcml2ZXItPnJlc3VtZSkgeworCQkJc3Bpbl91bmxvY2soJnVkYy0+bG9jayk7CisJCQl1ZGMtPmRyaXZlci0+cmVzdW1lKCZ1ZGMtPmdhZGdldCk7CisJCQlzcGluX2xvY2soJnVkYy0+bG9jayk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGlycV9wcm9jZXNzX3N1c3BlbmQoc3RydWN0IG12X3VkYyAqdWRjKQoreworCXVkYy0+cmVzdW1lX3N0YXRlID0gdWRjLT51c2Jfc3RhdGU7CisJdWRjLT51c2Jfc3RhdGUgPSBVU0JfU1RBVEVfU1VTUEVOREVEOworCisJaWYgKHVkYy0+ZHJpdmVyLT5zdXNwZW5kKSB7CisJCXNwaW5fdW5sb2NrKCZ1ZGMtPmxvY2spOworCQl1ZGMtPmRyaXZlci0+c3VzcGVuZCgmdWRjLT5nYWRnZXQpOworCQlzcGluX2xvY2soJnVkYy0+bG9jayk7CisJfQorfQorCitzdGF0aWMgdm9pZCBpcnFfcHJvY2Vzc19wb3J0X2NoYW5nZShzdHJ1Y3QgbXZfdWRjICp1ZGMpCit7CisJdTMyIHBvcnRzYzsKKworCXBvcnRzYyA9IHJlYWRsKCZ1ZGMtPm9wX3JlZ3MtPnBvcnRzY1swXSk7CisJaWYgKCEocG9ydHNjICYgUE9SVFNDWF9QT1JUX1JFU0VUKSkgeworCQkvKiBHZXQgdGhlIHNwZWVkICovCisJCXUzMiBzcGVlZCA9IHBvcnRzYyAmIFBPUlRTQ1hfUE9SVF9TUEVFRF9NQVNLOworCQlzd2l0Y2ggKHNwZWVkKSB7CisJCWNhc2UgUE9SVFNDWF9QT1JUX1NQRUVEX0hJR0g6CisJCQl1ZGMtPmdhZGdldC5zcGVlZCA9IFVTQl9TUEVFRF9ISUdIOworCQkJYnJlYWs7CisJCWNhc2UgUE9SVFNDWF9QT1JUX1NQRUVEX0ZVTEw6CisJCQl1ZGMtPmdhZGdldC5zcGVlZCA9IFVTQl9TUEVFRF9GVUxMOworCQkJYnJlYWs7CisJCWNhc2UgUE9SVFNDWF9QT1JUX1NQRUVEX0xPVzoKKwkJCXVkYy0+Z2FkZ2V0LnNwZWVkID0gVVNCX1NQRUVEX0xPVzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJdWRjLT5nYWRnZXQuc3BlZWQgPSBVU0JfU1BFRURfVU5LTk9XTjsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKHBvcnRzYyAmIFBPUlRTQ1hfUE9SVF9TVVNQRU5EKSB7CisJCXVkYy0+cmVzdW1lX3N0YXRlID0gdWRjLT51c2Jfc3RhdGU7CisJCXVkYy0+dXNiX3N0YXRlID0gVVNCX1NUQVRFX1NVU1BFTkRFRDsKKwkJaWYgKHVkYy0+ZHJpdmVyLT5zdXNwZW5kKSB7CisJCQlzcGluX3VubG9jaygmdWRjLT5sb2NrKTsKKwkJCXVkYy0+ZHJpdmVyLT5zdXNwZW5kKCZ1ZGMtPmdhZGdldCk7CisJCQlzcGluX2xvY2soJnVkYy0+bG9jayk7CisJCX0KKwl9CisKKwlpZiAoIShwb3J0c2MgJiBQT1JUU0NYX1BPUlRfU1VTUEVORCkKKwkJJiYgdWRjLT51c2Jfc3RhdGUgPT0gVVNCX1NUQVRFX1NVU1BFTkRFRCkgeworCQloYW5kbGVfYnVzX3Jlc3VtZSh1ZGMpOworCX0KKworCWlmICghdWRjLT5yZXN1bWVfc3RhdGUpCisJCXVkYy0+dXNiX3N0YXRlID0gVVNCX1NUQVRFX0RFRkFVTFQ7Cit9CisKK3N0YXRpYyB2b2lkIGlycV9wcm9jZXNzX2Vycm9yKHN0cnVjdCBtdl91ZGMgKnVkYykKK3sKKwkvKiBJbmNyZW1lbnQgdGhlIGVycm9yIGNvdW50ICovCisJdWRjLT5lcnJvcnMrKzsKK30KKworc3RhdGljIGlycXJldHVybl90IG12X3VkY19pcnEoaW50IGlycSwgdm9pZCAqZGV2KQoreworCXN0cnVjdCBtdl91ZGMgKnVkYyA9IChzdHJ1Y3QgbXZfdWRjICopZGV2OworCXUzMiBzdGF0dXMsIGludHI7CisKKwlzcGluX2xvY2soJnVkYy0+bG9jayk7CisKKwlzdGF0dXMgPSByZWFkbCgmdWRjLT5vcF9yZWdzLT51c2JzdHMpOworCWludHIgPSByZWFkbCgmdWRjLT5vcF9yZWdzLT51c2JpbnRyKTsKKwlzdGF0dXMgJj0gaW50cjsKKworCWlmIChzdGF0dXMgPT0gMCkgeworCQlzcGluX3VubG9jaygmdWRjLT5sb2NrKTsKKwkJcmV0dXJuIElSUV9OT05FOworCX0KKworCS8qIENsZWFyIGFsbCB0aGUgaW50ZXJydXB0cyBvY2N1cmVkICovCisJd3JpdGVsKHN0YXR1cywgJnVkYy0+b3BfcmVncy0+dXNic3RzKTsKKworCWlmIChzdGF0dXMgJiBVU0JTVFNfRVJSKQorCQlpcnFfcHJvY2Vzc19lcnJvcih1ZGMpOworCisJaWYgKHN0YXR1cyAmIFVTQlNUU19SRVNFVCkKKwkJaXJxX3Byb2Nlc3NfcmVzZXQodWRjKTsKKworCWlmIChzdGF0dXMgJiBVU0JTVFNfUE9SVF9DSEFOR0UpCisJCWlycV9wcm9jZXNzX3BvcnRfY2hhbmdlKHVkYyk7CisKKwlpZiAoc3RhdHVzICYgVVNCU1RTX0lOVCkKKwkJaXJxX3Byb2Nlc3NfdHJfY29tcGxldGUodWRjKTsKKworCWlmIChzdGF0dXMgJiBVU0JTVFNfU1VTUEVORCkKKwkJaXJxX3Byb2Nlc3Nfc3VzcGVuZCh1ZGMpOworCisJc3Bpbl91bmxvY2soJnVkYy0+bG9jayk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qIHJlbGVhc2UgZGV2aWNlIHN0cnVjdHVyZSAqLworc3RhdGljIHZvaWQgZ2FkZ2V0X3JlbGVhc2Uoc3RydWN0IGRldmljZSAqX2RldikKK3sKKwlzdHJ1Y3QgbXZfdWRjICp1ZGMgPSB0aGVfY29udHJvbGxlcjsKKworCWNvbXBsZXRlKHVkYy0+ZG9uZSk7CisJa2ZyZWUodWRjKTsKK30KKworc3RhdGljIGludCBtdl91ZGNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbXZfdWRjICp1ZGMgPSB0aGVfY29udHJvbGxlcjsKKworCURFQ0xBUkVfQ09NUExFVElPTihkb25lKTsKKworCXVkYy0+ZG9uZSA9ICZkb25lOworCisJLyogZnJlZSBtZW1vcnkgYWxsb2NhdGVkIGluIHByb2JlICovCisJaWYgKHVkYy0+ZHRkX3Bvb2wpCisJCWRtYV9wb29sX2Rlc3Ryb3kodWRjLT5kdGRfcG9vbCk7CisKKwlpZiAodWRjLT5lcF9kcWgpCisJCWRtYV9mcmVlX2NvaGVyZW50KCZkZXYtPmRldiwgdWRjLT5lcF9kcWhfc2l6ZSwKKwkJCXVkYy0+ZXBfZHFoLCB1ZGMtPmVwX2RxaF9kbWEpOworCisJa2ZyZWUodWRjLT5lcHMpOworCisJaWYgKHVkYy0+aXJxKQorCQlmcmVlX2lycSh1ZGMtPmlycSwgJmRldi0+ZGV2KTsKKworCWlmICh1ZGMtPmNhcF9yZWdzKQorCQlpb3VubWFwKHVkYy0+Y2FwX3JlZ3MpOworCXVkYy0+Y2FwX3JlZ3MgPSBOVUxMOworCisJaWYgKHVkYy0+cGh5X3JlZ3MpCisJCWlvdW5tYXAoKHZvaWQgKil1ZGMtPnBoeV9yZWdzKTsKKwl1ZGMtPnBoeV9yZWdzID0gMDsKKworCWlmICh1ZGMtPnN0YXR1c19yZXEpIHsKKwkJa2ZyZWUodWRjLT5zdGF0dXNfcmVxLT5yZXEuYnVmKTsKKwkJa2ZyZWUodWRjLT5zdGF0dXNfcmVxKTsKKwl9CisKKwlkZXZpY2VfdW5yZWdpc3RlcigmdWRjLT5nYWRnZXQuZGV2KTsKKworCS8qIGZyZWUgZGV2LCB3YWl0IGZvciB0aGUgcmVsZWFzZSgpIGZpbmlzaGVkICovCisJd2FpdF9mb3JfY29tcGxldGlvbigmZG9uZSk7CisKKwl0aGVfY29udHJvbGxlciA9IE5VTEw7CisKKwlyZXR1cm4gMDsKK30KKworaW50IG12X3VkY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG12X3VkYyAqdWRjOworCWludCByZXR2YWwgPSAwOworCXN0cnVjdCByZXNvdXJjZSAqcjsKKwlzaXplX3Qgc2l6ZTsKKworCXVkYyA9IGt6YWxsb2Moc2l6ZW9mICp1ZGMsIEdGUF9LRVJORUwpOworCWlmICh1ZGMgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHVkY1xuIik7CisJCXJldHZhbCA9IC1FTk9NRU07CisJCWdvdG8gZXJyb3I7CisJfQorCisJc3Bpbl9sb2NrX2luaXQoJnVkYy0+bG9jayk7CisKKwl1ZGMtPmRldiA9IGRldjsKKworCXVkYy0+Y2xrID0gY2xrX2dldCgmZGV2LT5kZXYsICJVMk9DTEsiKTsKKwlpZiAoSVNfRVJSKHVkYy0+Y2xrKSkgeworCQlyZXR2YWwgPSBQVFJfRVJSKHVkYy0+Y2xrKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZSh1ZGMtPmRldiwgSU9SRVNPVVJDRV9NRU0sICJ1Mm8iKTsKKwlpZiAociA9PSBOVUxMKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAibm8gSS9PIG1lbW9yeSByZXNvdXJjZSBkZWZpbmVkXG4iKTsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBlcnJvcjsKKwl9CisKKwl1ZGMtPmNhcF9yZWdzID0gKHN0cnVjdCBtdl9jYXBfcmVncyBfX2lvbWVtICopCisJCWlvcmVtYXAoci0+c3RhcnQsIHJlc291cmNlX3NpemUocikpOworCWlmICh1ZGMtPmNhcF9yZWdzID09IE5VTEwpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJmYWlsZWQgdG8gbWFwIEkvTyBtZW1vcnlcbiIpOworCQlyZXR2YWwgPSAtRUJVU1k7CisJCWdvdG8gZXJyb3I7CisJfQorCisJciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUodWRjLT5kZXYsIElPUkVTT1VSQ0VfTUVNLCAidTJvcGh5Iik7CisJaWYgKHIgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgIm5vIHBoeSBJL08gbWVtb3J5IHJlc291cmNlIGRlZmluZWRcbiIpOworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIGVycm9yOworCX0KKworCXVkYy0+cGh5X3JlZ3MgPSAodW5zaWduZWQgaW50KWlvcmVtYXAoci0+c3RhcnQsIHJlc291cmNlX3NpemUocikpOworCWlmICh1ZGMtPnBoeV9yZWdzID09IDApIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJmYWlsZWQgdG8gbWFwIHBoeSBJL08gbWVtb3J5XG4iKTsKKwkJcmV0dmFsID0gLUVCVVNZOworCQlnb3RvIGVycm9yOworCX0KKworCS8qIHdlIHdpbGwgYWNjZXMgY29udHJvbGxlciByZWdpc3Rlciwgc28gZW5hYmxlIHRoZSBjbGsgKi8KKwljbGtfZW5hYmxlKHVkYy0+Y2xrKTsKKwlyZXR2YWwgPSBtdl91ZGNfcGh5X2luaXQodWRjLT5waHlfcmVncyk7CisJaWYgKHJldHZhbCkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgInBoeSBpbml0aWFsaXphdGlvbiBlcnJvciAlZFxuIiwgcmV0dmFsKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwl1ZGMtPm9wX3JlZ3MgPSAoc3RydWN0IG12X29wX3JlZ3MgX19pb21lbSAqKSgodTMyKXVkYy0+Y2FwX3JlZ3MKKwkJKyAocmVhZGwoJnVkYy0+Y2FwX3JlZ3MtPmNhcGxlbmd0aF9oY2l2ZXJzaW9uKQorCQkJJiBDQVBMRU5HVEhfTUFTSykpOworCXVkYy0+bWF4X2VwcyA9IHJlYWRsKCZ1ZGMtPmNhcF9yZWdzLT5kY2NwYXJhbXMpICYgRENDUEFSQU1TX0RFTl9NQVNLOworCisJc2l6ZSA9IHVkYy0+bWF4X2VwcyAqIHNpemVvZihzdHJ1Y3QgbXZfZHFoKSAqMjsKKwlzaXplID0gKHNpemUgKyBEUUhfQUxJR05NRU5UIC0gMSkgJiB+KERRSF9BTElHTk1FTlQgLSAxKTsKKwl1ZGMtPmVwX2RxaCA9IGRtYV9hbGxvY19jb2hlcmVudCgmZGV2LT5kZXYsIHNpemUsCisJCQkJCSZ1ZGMtPmVwX2RxaF9kbWEsIEdGUF9LRVJORUwpOworCisJaWYgKHVkYy0+ZXBfZHFoID09IE5VTEwpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJhbGxvY2F0ZSBkUUggbWVtb3J5IGZhaWxlZFxuIik7CisJCXJldHZhbCA9IC1FTk9NRU07CisJCWdvdG8gZXJyb3I7CisJfQorCXVkYy0+ZXBfZHFoX3NpemUgPSBzaXplOworCisJLyogY3JlYXRlIGRURCBkbWFfcG9vbCByZXNvdXJjZSAqLworCXVkYy0+ZHRkX3Bvb2wgPSBkbWFfcG9vbF9jcmVhdGUoIm12X2R0ZCIsCisJCQkmZGV2LT5kZXYsCisJCQlzaXplb2Yoc3RydWN0IG12X2R0ZCksCisJCQlEVERfQUxJR05NRU5ULAorCQkJRE1BX0JPVU5EQVJZKTsKKworCWlmICghdWRjLT5kdGRfcG9vbCkgeworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIGVycm9yOworCX0KKworCXNpemUgPSB1ZGMtPm1heF9lcHMgKiBzaXplb2Yoc3RydWN0IG12X2VwKSAqMjsKKwl1ZGMtPmVwcyA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKHVkYy0+ZXBzID09IE5VTEwpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJhbGxvY2F0ZSBlcCBtZW1vcnkgZmFpbGVkXG4iKTsKKwkJcmV0dmFsID0gLUVOT01FTTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwkvKiBpbml0aWFsaXplIGVwMCBzdGF0dXMgcmVxdWVzdCBzdHJ1Y3R1cmUgKi8KKwl1ZGMtPnN0YXR1c19yZXEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbXZfcmVxKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF1ZGMtPnN0YXR1c19yZXEpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJhbGxvY2F0ZSBzdGF0dXNfcmVxIG1lbW9yeSBmYWlsZWRcbiIpOworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIGVycm9yOworCX0KKwlJTklUX0xJU1RfSEVBRCgmdWRjLT5zdGF0dXNfcmVxLT5xdWV1ZSk7CisKKwkvKiBhbGxvY2F0ZSBhIHNtYWxsIGFtb3VudCBvZiBtZW1vcnkgdG8gZ2V0IHZhbGlkIGFkZHJlc3MgKi8KKwl1ZGMtPnN0YXR1c19yZXEtPnJlcS5idWYgPSBremFsbG9jKDgsIEdGUF9LRVJORUwpOworCXVkYy0+c3RhdHVzX3JlcS0+cmVxLmRtYSA9IHZpcnRfdG9fcGh5cyh1ZGMtPnN0YXR1c19yZXEtPnJlcS5idWYpOworCisJdWRjLT5yZXN1bWVfc3RhdGUgPSBVU0JfU1RBVEVfTk9UQVRUQUNIRUQ7CisJdWRjLT51c2Jfc3RhdGUgPSBVU0JfU1RBVEVfUE9XRVJFRDsKKwl1ZGMtPmVwMF9kaXIgPSBFUF9ESVJfT1VUOworCXVkYy0+cmVtb3RlX3dha2V1cCA9IDA7CisKKwlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHVkYy0+ZGV2LCBJT1JFU09VUkNFX0lSUSwgMCk7CisJaWYgKHIgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgIm5vIElSUSByZXNvdXJjZSBkZWZpbmVkXG4iKTsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBlcnJvcjsKKwl9CisJdWRjLT5pcnEgPSByLT5zdGFydDsKKwlpZiAocmVxdWVzdF9pcnEodWRjLT5pcnEsIG12X3VkY19pcnEsCisJCUlSUUZfRElTQUJMRUQgfCBJUlFGX1NIQVJFRCwgZHJpdmVyX25hbWUsIHVkYykpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJSZXF1ZXN0IGlycSAlZCBmb3IgVURDIGZhaWxlZFxuIiwKKwkJCXVkYy0+aXJxKTsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBlcnJvcjsKKwl9CisKKwkvKiBpbml0aWFsaXplIGdhZGdldCBzdHJ1Y3R1cmUgKi8KKwl1ZGMtPmdhZGdldC5vcHMgPSAmbXZfb3BzOwkvKiB1c2JfZ2FkZ2V0X29wcyAqLworCXVkYy0+Z2FkZ2V0LmVwMCA9ICZ1ZGMtPmVwc1swXS5lcDsJLyogZ2FkZ2V0IGVwMCAqLworCUlOSVRfTElTVF9IRUFEKCZ1ZGMtPmdhZGdldC5lcF9saXN0KTsJLyogZXBfbGlzdCAqLworCXVkYy0+Z2FkZ2V0LnNwZWVkID0gVVNCX1NQRUVEX1VOS05PV047CS8qIHNwZWVkICovCisJdWRjLT5nYWRnZXQuaXNfZHVhbHNwZWVkID0gMTsJCS8qIHN1cHBvcnQgZHVhbCBzcGVlZCAqLworCisJLyogdGhlICJnYWRnZXQiIGFic3RyYWN0cy92aXJ0dWFsaXplcyB0aGUgY29udHJvbGxlciAqLworCWRldl9zZXRfbmFtZSgmdWRjLT5nYWRnZXQuZGV2LCAiZ2FkZ2V0Iik7CisJdWRjLT5nYWRnZXQuZGV2LnBhcmVudCA9ICZkZXYtPmRldjsKKwl1ZGMtPmdhZGdldC5kZXYuZG1hX21hc2sgPSBkZXYtPmRldi5kbWFfbWFzazsKKwl1ZGMtPmdhZGdldC5kZXYucmVsZWFzZSA9IGdhZGdldF9yZWxlYXNlOworCXVkYy0+Z2FkZ2V0Lm5hbWUgPSBkcml2ZXJfbmFtZTsJCS8qIGdhZGdldCBuYW1lICovCisKKwlyZXR2YWwgPSBkZXZpY2VfcmVnaXN0ZXIoJnVkYy0+Z2FkZ2V0LmRldik7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJvcjsKKworCWVwc19pbml0KHVkYyk7CisKKwl0aGVfY29udHJvbGxlciA9IHVkYzsKKworCWdvdG8gb3V0OworZXJyb3I6CisJaWYgKHVkYykKKwkJbXZfdWRjX3JlbW92ZSh1ZGMtPmRldik7CitvdXQ6CisJcmV0dXJuIHJldHZhbDsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBtdl91ZGNfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpfZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IG12X3VkYyAqdWRjID0gdGhlX2NvbnRyb2xsZXI7CisKKwl1ZGNfc3RvcCh1ZGMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXZfdWRjX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpfZGV2KQoreworCXN0cnVjdCBtdl91ZGMgKnVkYyA9IHRoZV9jb250cm9sbGVyOworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSBtdl91ZGNfcGh5X2luaXQodWRjLT5waHlfcmVncyk7CisJaWYgKHJldHZhbCkgeworCQlkZXZfZXJyKF9kZXYsICJwaHkgaW5pdGlhbGl6YXRpb24gZXJyb3IgJWRcbiIsIHJldHZhbCk7CisJCWdvdG8gZXJyb3I7CisJfQorCXVkY19yZXNldCh1ZGMpOworCWVwMF9yZXNldCh1ZGMpOworCXVkY19zdGFydCh1ZGMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBtdl91ZGNfcG1fb3BzID0geworCS5zdXNwZW5kCT0gbXZfdWRjX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBtdl91ZGNfcmVzdW1lLAorfTsKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB1ZGNfZHJpdmVyID0geworCS5wcm9iZQkJPSBtdl91ZGNfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2V4aXRfcChtdl91ZGNfcmVtb3ZlKSwKKwkuZHJpdmVyCQk9IHsKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5uYW1lCT0gInB4YS11Mm8iLAorI2lmZGVmIENPTkZJR19QTQorCQkucG0JPSBtdl91ZGNfcG1fb3BzLAorI2VuZGlmCisJfSwKK307CisKKworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9BVVRIT1IoIkNoYW8gWGllIDxjaGFvLnhpZUBtYXJ2ZWxsLmNvbT4iKTsKK01PRFVMRV9WRVJTSU9OKERSSVZFUl9WRVJTSU9OKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworCitzdGF0aWMgaW50IF9faW5pdCBpbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmdWRjX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdChpbml0KTsKKworCitzdGF0aWMgdm9pZCBfX2V4aXQgY2xlYW51cCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ1ZGNfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KGNsZWFudXApOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvbXZfdWRjX3BoeS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L212X3VkY19waHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGRlYTk3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L212X3VkY19waHkuYwpAQCAtMCwwICsxLDIxNCBAQAorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisKKyNpbmNsdWRlIDxtYWNoL2NwdXR5cGUuaD4KKworI2lmZGVmIENPTkZJR19BUkNIX01NUAorCisjZGVmaW5lIFVUTUlfUkVWSVNJT04JCTB4MAorI2RlZmluZSBVVE1JX0NUUkwJCTB4NAorI2RlZmluZSBVVE1JX1BMTAkJMHg4CisjZGVmaW5lIFVUTUlfVFgJCQkweGMKKyNkZWZpbmUgVVRNSV9SWAkJCTB4MTAKKyNkZWZpbmUgVVRNSV9JVlJFRgkJMHgxNAorI2RlZmluZSBVVE1JX1QwCQkJMHgxOAorI2RlZmluZSBVVE1JX1QxCQkJMHgxYworI2RlZmluZSBVVE1JX1QyCQkJMHgyMAorI2RlZmluZSBVVE1JX1QzCQkJMHgyNAorI2RlZmluZSBVVE1JX1Q0CQkJMHgyOAorI2RlZmluZSBVVE1JX1Q1CQkJMHgyYworI2RlZmluZSBVVE1JX1JFU0VSVkUJCTB4MzAKKyNkZWZpbmUgVVRNSV9VU0JfSU5UCQkweDM0CisjZGVmaW5lIFVUTUlfREJHX0NUTAkJMHgzOAorI2RlZmluZSBVVE1JX09UR19BRERPTgkJMHgzYworCisvKiBGb3IgVVRNSUNUUkwgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVVRNSV9DVFJMX1VTQl9DTEtfRU4JCQkoMSA8PCAzMSkKKy8qIHB4YTE2OCAqLworI2RlZmluZSBVVE1JX0NUUkxfU1VTUEVORF9TRVQxCQkJKDEgPDwgMzApCisjZGVmaW5lIFVUTUlfQ1RSTF9TVVNQRU5EX1NFVDIJCQkoMSA8PCAyOSkKKyNkZWZpbmUgVVRNSV9DVFJMX1JYQlVGX1BEV04JCQkoMSA8PCAyNCkKKyNkZWZpbmUgVVRNSV9DVFJMX1RYQlVGX1BEV04JCQkoMSA8PCAxMSkKKworI2RlZmluZSBVVE1JX0NUUkxfSU5QS1RfREVMQVlfU0hJRlQJCTMwCisjZGVmaW5lIFVUTUlfQ1RSTF9JTlBLVF9ERUxBWV9TT0ZfU0hJRlQJCTI4CisjZGVmaW5lIFVUTUlfQ1RSTF9QVV9SRUZfU0hJRlQJCQkyMAorI2RlZmluZSBVVE1JX0NUUkxfQVJDX1BVTExETl9TSElGVAkJMTIKKyNkZWZpbmUgVVRNSV9DVFJMX1BMTF9QV1JfVVBfU0hJRlQJCTEKKyNkZWZpbmUgVVRNSV9DVFJMX1BXUl9VUF9TSElGVAkJCTAKKy8qIEZvciBVVE1JX1BMTCBSZWdpc3RlciAqLworI2RlZmluZSBVVE1JX1BMTF9DTEtfQkxLX0VOX1NISUZUCQkyNAorI2RlZmluZSBVVE1JX1BMTF9GQkRJVl9TSElGVAkJCTQKKyNkZWZpbmUgVVRNSV9QTExfUkVGRElWX1NISUZUCQkJMAorI2RlZmluZSBVVE1JX1BMTF9GQkRJVl9NQVNLCQkJMHgwMDAwMEZGMAorI2RlZmluZSBVVE1JX1BMTF9SRUZESVZfTUFTSwkJCTB4MDAwMDAwMEYKKyNkZWZpbmUgVVRNSV9QTExfSUNQX01BU0sJCQkweDAwMDA3MDAwCisjZGVmaW5lIFVUTUlfUExMX0tWQ09fTUFTSwkJCTB4MDAwMzEwMDAKKyNkZWZpbmUgVVRNSV9QTExfUExMQ0FMSTEyX1NISUZUCQkyOQorI2RlZmluZSBVVE1JX1BMTF9QTExDQUxJMTJfTUFTSwkJCSgweDMgPDwgMjkpCisjZGVmaW5lIFVUTUlfUExMX1BMTFZERDE4X1NISUZUCQkJMjcKKyNkZWZpbmUgVVRNSV9QTExfUExMVkREMThfTUFTSwkJCSgweDMgPDwgMjcpCisjZGVmaW5lIFVUTUlfUExMX1BMTFZERDEyX1NISUZUCQkJMjUKKyNkZWZpbmUgVVRNSV9QTExfUExMVkREMTJfTUFTSwkJCSgweDMgPDwgMjUpCisjZGVmaW5lIFVUTUlfUExMX0tWQ09fU0hJRlQJCQkxNQorI2RlZmluZSBVVE1JX1BMTF9JQ1BfU0hJRlQJCQkxMgorLyogRm9yIFVUTUlfVFggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVVRNSV9UWF9SRUdfRVhUX0ZTX1JDQUxfU0hJRlQJCTI3CisjZGVmaW5lIFVUTUlfVFhfUkVHX0VYVF9GU19SQ0FMX01BU0sJCSgweGYgPDwgMjcpCisjZGVmaW5lIFVUTUlfVFhfUkVHX0VYVF9GU19SQ0FMX0VOX01BU0sJCTI2CisjZGVmaW5lIFVUTUlfVFhfUkVHX0VYVF9GU19SQ0FMX0VOCQkoMHgxIDw8IDI2KQorI2RlZmluZSBVVE1JX1RYX0xPV19WRERfRU5fU0hJRlQJCTExCisjZGVmaW5lIFVUTUlfVFhfSU1QQ0FMX1ZUSF9TSElGVAkJMTQKKyNkZWZpbmUgVVRNSV9UWF9JTVBDQUxfVlRIX01BU0sJCQkoMHg3IDw8IDE0KQorI2RlZmluZSBVVE1JX1RYX0NLNjBfUEhTRUxfU0hJRlQJCTE3CisjZGVmaW5lIFVUTUlfVFhfQ0s2MF9QSFNFTF9NQVNLCQkJKDB4ZiA8PCAxNykKKyNkZWZpbmUgVVRNSV9UWF9UWFZERDEyX1NISUZUICAgICAgICAgICAgICAgICAgIDIyCisjZGVmaW5lIFVUTUlfVFhfVFhWREQxMl9NQVNLCQkJKDB4MyA8PCAyMikKKyNkZWZpbmUgVVRNSV9UWF9BTVBfU0hJRlQJCQkwCisjZGVmaW5lIFVUTUlfVFhfQU1QX01BU0sJCQkoMHg3IDw8IDApCisvKiBGb3IgVVRNSV9SWCBSZWdpc3RlciAqLworI2RlZmluZSBVVE1JX1JYX1NRX1RIUkVTSF9TSElGVAkJCTQKKyNkZWZpbmUgVVRNSV9SWF9TUV9USFJFU0hfTUFTSwkJCSgweGYgPDwgNCkKKyNkZWZpbmUgVVRNSV9SRUdfU1FfTEVOR1RIX1NISUZUCQkxNQorI2RlZmluZSBVVE1JX1JFR19TUV9MRU5HVEhfTUFTSwkJCSgweDMgPDwgMTUpCisKKyNkZWZpbmUgUkVHX1JDQUxfU1RBUlQJCQkJMHgwMDAwMTAwMAorI2RlZmluZSBWQ09DQUxfU1RBUlQJCQkJMHgwMDIwMDAwMAorI2RlZmluZSBLVkNPX0VYVAkJCQkweDAwNDAwMDAwCisjZGVmaW5lIFBMTF9SRUFEWQkJCQkweDAwODAwMDAwCisjZGVmaW5lIENMS19CTEtfRU4JCQkJMHgwMTAwMDAwMAorI2VuZGlmCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdTJvX3JlYWQodW5zaWduZWQgaW50IGJhc2UsIHVuc2lnbmVkIGludCBvZmZzZXQpCit7CisJcmV0dXJuIHJlYWRsKGJhc2UgKyBvZmZzZXQpOworfQorCitzdGF0aWMgdm9pZCB1Mm9fc2V0KHVuc2lnbmVkIGludCBiYXNlLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgdmFsdWUpCit7CisJdW5zaWduZWQgaW50IHJlZzsKKworCXJlZyA9IHJlYWRsKGJhc2UgKyBvZmZzZXQpOworCXJlZyB8PSB2YWx1ZTsKKwl3cml0ZWwocmVnLCBiYXNlICsgb2Zmc2V0KTsKKwlyZWFkbChiYXNlICsgb2Zmc2V0KTsKK30KKworc3RhdGljIHZvaWQgdTJvX2NsZWFyKHVuc2lnbmVkIGludCBiYXNlLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LAorCXVuc2lnbmVkIGludCB2YWx1ZSkKK3sKKwl1bnNpZ25lZCBpbnQgcmVnOworCisJcmVnID0gcmVhZGwoYmFzZSArIG9mZnNldCk7CisJcmVnICY9IH52YWx1ZTsKKwl3cml0ZWwocmVnLCBiYXNlICsgb2Zmc2V0KTsKKwlyZWFkbChiYXNlICsgb2Zmc2V0KTsKK30KKworc3RhdGljIHZvaWQgdTJvX3dyaXRlKHVuc2lnbmVkIGludCBiYXNlLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LAorCXVuc2lnbmVkIGludCB2YWx1ZSkKK3sKKwl3cml0ZWwodmFsdWUsIGJhc2UgKyBvZmZzZXQpOworCXJlYWRsKGJhc2UgKyBvZmZzZXQpOworfQorCisjaWZkZWYgQ09ORklHX0FSQ0hfTU1QCitpbnQgbXZfdWRjX3BoeV9pbml0KHVuc2lnbmVkIGludCBiYXNlKQoreworCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKKworCS8qIEluaXRpYWxpemUgdGhlIFVTQiBQSFkgcG93ZXIgKi8KKwlpZiAoY3B1X2lzX3B4YTkxMCgpKSB7CisJCXUyb19zZXQoYmFzZSwgVVRNSV9DVFJMLCAoMSA8PCBVVE1JX0NUUkxfSU5QS1RfREVMQVlfU09GX1NISUZUKQorCQkJfCAoMSA8PCBVVE1JX0NUUkxfUFVfUkVGX1NISUZUKSk7CisJfQorCisJdTJvX3NldChiYXNlLCBVVE1JX0NUUkwsIDEgPDwgVVRNSV9DVFJMX1BMTF9QV1JfVVBfU0hJRlQpOworCXUyb19zZXQoYmFzZSwgVVRNSV9DVFJMLCAxIDw8IFVUTUlfQ1RSTF9QV1JfVVBfU0hJRlQpOworCisJLyogVVRNSV9QTEwgc2V0dGluZ3MgKi8KKwl1Mm9fY2xlYXIoYmFzZSwgVVRNSV9QTEwsIFVUTUlfUExMX1BMTFZERDE4X01BU0sKKwkJfCBVVE1JX1BMTF9QTExWREQxMl9NQVNLIHwgVVRNSV9QTExfUExMQ0FMSTEyX01BU0sKKwkJfCBVVE1JX1BMTF9GQkRJVl9NQVNLIHwgVVRNSV9QTExfUkVGRElWX01BU0sKKwkJfCBVVE1JX1BMTF9JQ1BfTUFTSyB8IFVUTUlfUExMX0tWQ09fTUFTSyk7CisKKwl1Mm9fc2V0KGJhc2UsIFVUTUlfUExMLCAoMHhlZSA8PCBVVE1JX1BMTF9GQkRJVl9TSElGVCkKKwkJfCAoMHhiIDw8IFVUTUlfUExMX1JFRkRJVl9TSElGVCkKKwkJfCAoMyA8PCBVVE1JX1BMTF9QTExWREQxOF9TSElGVCkKKwkJfCAoMyA8PCBVVE1JX1BMTF9QTExWREQxMl9TSElGVCkKKwkJfCAoMyA8PCBVVE1JX1BMTF9QTExDQUxJMTJfU0hJRlQpCisJCXwgKDEgPDwgVVRNSV9QTExfSUNQX1NISUZUKSB8ICgzIDw8IFVUTUlfUExMX0tWQ09fU0hJRlQpKTsKKworCS8qIFVUTUlfVFggKi8KKwl1Mm9fY2xlYXIoYmFzZSwgVVRNSV9UWCwgVVRNSV9UWF9SRUdfRVhUX0ZTX1JDQUxfRU5fTUFTSworCQl8IFVUTUlfVFhfVFhWREQxMl9NQVNLCisJCXwgVVRNSV9UWF9DSzYwX1BIU0VMX01BU0sgfCBVVE1JX1RYX0lNUENBTF9WVEhfTUFTSworCQl8IFVUTUlfVFhfUkVHX0VYVF9GU19SQ0FMX01BU0sgfCBVVE1JX1RYX0FNUF9NQVNLKTsKKwl1Mm9fc2V0KGJhc2UsIFVUTUlfVFgsICgzIDw8IFVUTUlfVFhfVFhWREQxMl9TSElGVCkKKwkJfCAoNCA8PCBVVE1JX1RYX0NLNjBfUEhTRUxfU0hJRlQpCisJCXwgKDQgPDwgVVRNSV9UWF9JTVBDQUxfVlRIX1NISUZUKQorCQl8ICg4IDw8IFVUTUlfVFhfUkVHX0VYVF9GU19SQ0FMX1NISUZUKQorCQl8ICgzIDw8IFVUTUlfVFhfQU1QX1NISUZUKSk7CisKKwkvKiBVVE1JX1JYICovCisJdTJvX2NsZWFyKGJhc2UsIFVUTUlfUlgsIFVUTUlfUlhfU1FfVEhSRVNIX01BU0sKKwkJfCBVVE1JX1JFR19TUV9MRU5HVEhfTUFTSyk7CisJaWYgKGNwdV9pc19weGExNjgoKSkKKwkJdTJvX3NldChiYXNlLCBVVE1JX1JYLCAoNyA8PCBVVE1JX1JYX1NRX1RIUkVTSF9TSElGVCkKKwkJCXwgKDIgPDwgVVRNSV9SRUdfU1FfTEVOR1RIX1NISUZUKSk7CisJZWxzZQorCQl1Mm9fc2V0KGJhc2UsIFVUTUlfUlgsICgweDcgPDwgVVRNSV9SWF9TUV9USFJFU0hfU0hJRlQpCisJCQl8ICgyIDw8IFVUTUlfUkVHX1NRX0xFTkdUSF9TSElGVCkpOworCisJLyogVVRNSV9JVlJFRiAqLworCWlmIChjcHVfaXNfcHhhMTY4KCkpCisJCS8qCisJCSAqIGZpeGluZyBNaWNyb3NvZnQgQWx0YWlyIGJvYXJkIGludGVyZmFjZSB3aXRoIE5FQyBodWIgaXNzdWUgLQorCQkgKiBTZXQgVVRNSV9JVlJFRiBmcm9tIDB4NGEzIHRvIDB4NGJmCisJCSAqLworCQl1Mm9fd3JpdGUoYmFzZSwgVVRNSV9JVlJFRiwgMHg0YmYpOworCisJLyogY2FsaWJyYXRlICovCisJdGltZW91dCA9IGppZmZpZXMgKyAxMDA7CisJd2hpbGUgKCh1Mm9fcmVhZChiYXNlLCBVVE1JX1BMTCkgJiBQTExfUkVBRFkpID09IDApIHsKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpCisJCQlyZXR1cm4gLUVUSU1FOworCQljcHVfcmVsYXgoKTsKKwl9CisKKwkvKiB0b2dnbGUgVkNPQ0FMX1NUQVJUIGJpdCBvZiBVVE1JX1BMTCAqLworCXVkZWxheSgyMDApOworCXUyb19zZXQoYmFzZSwgVVRNSV9QTEwsIFZDT0NBTF9TVEFSVCk7CisJdWRlbGF5KDQwKTsKKwl1Mm9fY2xlYXIoYmFzZSwgVVRNSV9QTEwsIFZDT0NBTF9TVEFSVCk7CisKKwkvKiB0b2dnbGUgUkVHX1JDQUxfU1RBUlQgYml0IG9mIFVUTUlfVFggKi8KKwl1ZGVsYXkoMjAwKTsKKwl1Mm9fc2V0KGJhc2UsIFVUTUlfVFgsIFJFR19SQ0FMX1NUQVJUKTsKKwl1ZGVsYXkoNDApOworCXUyb19jbGVhcihiYXNlLCBVVE1JX1RYLCBSRUdfUkNBTF9TVEFSVCk7CisJdWRlbGF5KDIwMCk7CisKKwkvKiBtYWtlIHN1cmUgcGh5IGlzIHJlYWR5ICovCisJdGltZW91dCA9IGppZmZpZXMgKyAxMDA7CisJd2hpbGUgKCh1Mm9fcmVhZChiYXNlLCBVVE1JX1BMTCkgJiBQTExfUkVBRFkpID09IDApIHsKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpCisJCQlyZXR1cm4gLUVUSU1FOworCQljcHVfcmVsYXgoKTsKKwl9CisKKwlpZiAoY3B1X2lzX3B4YTE2OCgpKSB7CisJCXUyb19zZXQoYmFzZSwgVVRNSV9SRVNFUlZFLCAxIDw8IDUpOworCQkvKiBUdXJuIG9uIFVUTUkgUEhZIE9URyBleHRlbnNpb24gKi8KKwkJdTJvX3dyaXRlKGJhc2UsIFVUTUlfT1RHX0FERE9OLCAxKTsKKwl9CisJcmV0dXJuIDA7Cit9CisjZWxzZQoraW50IG12X3VkY19waHlfaW5pdCh1bnNpZ25lZCBpbnQgYmFzZSkKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L25jbS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L25jbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5YzE3OWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbmNtLmMKQEAgLTAsMCArMSwyNDggQEAKKy8qCisgKiBuY20uYyAtLSBOQ00gZ2FkZ2V0IGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgorICogQ29udGFjdDogWWF1aGVuaSBLYWxpdXRhIDx5YXVoZW5pLmthbGl1dGFAbm9raWEuY29tPgorICoKKyAqIFRoZSBkcml2ZXIgYm9ycm93cyBmcm9tIGV0aGVyLmMgd2hpY2ggaXM6CisgKgorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDUsMjAwOCBEYXZpZCBCcm93bmVsbAorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDQgUm9iZXJ0IFNjaHdlYmVsLCBCZW5lZGlrdCBTcHJhbmdlcgorICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKy8qICNkZWZpbmUgREVCVUcgKi8KKy8qICNkZWZpbmUgVkVSQk9TRV9ERUJVRyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdXRzbmFtZS5oPgorCisKKyNpbmNsdWRlICJ1X2V0aGVyLmgiCisKKyNkZWZpbmUgRFJJVkVSX0RFU0MJCSJOQ00gR2FkZ2V0IgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogS2J1aWxkIGlzIG5vdCB2ZXJ5IGNvb3BlcmF0aXZlIHdpdGggcmVzcGVjdCB0byBsaW5raW5nIHNlcGFyYXRlbHkKKyAqIGNvbXBpbGVkIGxpYnJhcnkgb2JqZWN0cyBpbnRvIG9uZSBtb2R1bGUuICBTbyBmb3Igbm93IHdlIHdvbid0IHVzZQorICogc2VwYXJhdGUgY29tcGlsYXRpb24gLi4uIGVuc3VyaW5nIGluaXQvZXhpdCBzZWN0aW9ucyB3b3JrIHRvIHNocmluaworICogdGhlIHJ1bnRpbWUgZm9vdHByaW50LCBhbmQgZ2l2aW5nIHVzIGF0IGxlYXN0IHNvbWUgcGFydHMgb2Ygd2hhdAorICogYSAiZ2NjIC0tY29tYmluZSAuLi4gcGFydDEuYyBwYXJ0Mi5jIHBhcnQzLmMgLi4uICIgYnVpbGQgd291bGQuCisgKi8KKyNpbmNsdWRlICJjb21wb3NpdGUuYyIKKyNpbmNsdWRlICJ1c2JzdHJpbmcuYyIKKyNpbmNsdWRlICJjb25maWcuYyIKKyNpbmNsdWRlICJlcGF1dG9jb25mLmMiCisKKyNpbmNsdWRlICJmX25jbS5jIgorI2luY2x1ZGUgInVfZXRoZXIuYyIKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogRE8gTk9UIFJFVVNFIFRIRVNFIElEcyB3aXRoIGEgcHJvdG9jb2wtaW5jb21wYXRpYmxlIGRyaXZlciEhICBFdmVyISEKKyAqIEluc3RlYWQ6ICBhbGxvY2F0ZSB5b3VyIG93biwgdXNpbmcgbm9ybWFsIFVTQi1JRiBwcm9jZWR1cmVzLgorICovCisKKy8qIFRoYW5rcyB0byBOZXRDaGlwIFRlY2hub2xvZ2llcyBmb3IgZG9uYXRpbmcgdGhpcyBwcm9kdWN0IElELgorICogSXQncyBmb3IgZGV2aWNlcyB3aXRoIG9ubHkgQ0RDIEV0aGVybmV0IGNvbmZpZ3VyYXRpb25zLgorICovCisjZGVmaW5lIENEQ19WRU5ET1JfTlVNCQkweDA1MjUJLyogTmV0Q2hpcCAqLworI2RlZmluZSBDRENfUFJPRFVDVF9OVU0JCTB4YTRhMQkvKiBMaW51eC1VU0IgRXRoZXJuZXQgR2FkZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9kZXNjcmlwdG9yIGRldmljZV9kZXNjID0geworCS5iTGVuZ3RoID0JCXNpemVvZiBkZXZpY2VfZGVzYywKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0RFVklDRSwKKworCS5iY2RVU0IgPQkJY3B1X3RvX2xlMTYgKDB4MDIwMCksCisKKwkuYkRldmljZUNsYXNzID0JCVVTQl9DTEFTU19DT01NLAorCS5iRGV2aWNlU3ViQ2xhc3MgPQkwLAorCS5iRGV2aWNlUHJvdG9jb2wgPQkwLAorCS8qIC5iTWF4UGFja2V0U2l6ZTAgPSBmKGhhcmR3YXJlKSAqLworCisJLyogVmVuZG9yIGFuZCBwcm9kdWN0IGlkIGRlZmF1bHRzIGNoYW5nZSBhY2NvcmRpbmcgdG8gd2hhdCBjb25maWdzCisJICogd2Ugc3VwcG9ydC4gIChBcyBkb2VzIGJOdW1Db25maWd1cmF0aW9ucy4pICBUaGVzZSB2YWx1ZXMgY2FuCisJICogYWxzbyBiZSBvdmVycmlkZGVuIGJ5IG1vZHVsZSBwYXJhbWV0ZXJzLgorCSAqLworCS5pZFZlbmRvciA9CQljcHVfdG9fbGUxNiAoQ0RDX1ZFTkRPUl9OVU0pLAorCS5pZFByb2R1Y3QgPQkJY3B1X3RvX2xlMTYgKENEQ19QUk9EVUNUX05VTSksCisJLyogLmJjZERldmljZSA9IGYoaGFyZHdhcmUpICovCisJLyogLmlNYW51ZmFjdHVyZXIgPSBEWU5BTUlDICovCisJLyogLmlQcm9kdWN0ID0gRFlOQU1JQyAqLworCS8qIE5PIFNFUklBTCBOVU1CRVIgKi8KKwkuYk51bUNvbmZpZ3VyYXRpb25zID0JMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX290Z19kZXNjcmlwdG9yIG90Z19kZXNjcmlwdG9yID0geworCS5iTGVuZ3RoID0JCXNpemVvZiBvdGdfZGVzY3JpcHRvciwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX09URywKKworCS8qIFJFVklTSVQgU1JQLW9ubHkgaGFyZHdhcmUgaXMgcG9zc2libGUsIGFsdGhvdWdoCisJICogaXQgd291bGQgbm90IGJlIGNhbGxlZCAiT1RHIiAuLi4KKwkgKi8KKwkuYm1BdHRyaWJ1dGVzID0JCVVTQl9PVEdfU1JQIHwgVVNCX09UR19ITlAsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqb3RnX2Rlc2NbXSA9IHsKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmb3RnX2Rlc2NyaXB0b3IsCisJTlVMTCwKK307CisKKworLyogc3RyaW5nIElEcyBhcmUgYXNzaWduZWQgZHluYW1pY2FsbHkgKi8KKworI2RlZmluZSBTVFJJTkdfTUFOVUZBQ1RVUkVSX0lEWAkJMAorI2RlZmluZSBTVFJJTkdfUFJPRFVDVF9JRFgJCTEKKworc3RhdGljIGNoYXIgbWFudWZhY3R1cmVyWzUwXTsKKworc3RhdGljIHN0cnVjdCB1c2Jfc3RyaW5nIHN0cmluZ3NfZGV2W10gPSB7CisJW1NUUklOR19NQU5VRkFDVFVSRVJfSURYXS5zID0gbWFudWZhY3R1cmVyLAorCVtTVFJJTkdfUFJPRFVDVF9JRFhdLnMgPSBEUklWRVJfREVTQywKKwl7ICB9IC8qIGVuZCBvZiBsaXN0ICovCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9nYWRnZXRfc3RyaW5ncyBzdHJpbmd0YWJfZGV2ID0geworCS5sYW5ndWFnZQk9IDB4MDQwOSwJLyogZW4tdXMgKi8KKwkuc3RyaW5ncwk9IHN0cmluZ3NfZGV2LAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZ2FkZ2V0X3N0cmluZ3MgKmRldl9zdHJpbmdzW10gPSB7CisJJnN0cmluZ3RhYl9kZXYsCisJTlVMTCwKK307CisKK3N0YXRpYyB1OCBob3N0YWRkcltFVEhfQUxFTl07CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgX19pbml0IG5jbV9kb19jb25maWcoc3RydWN0IHVzYl9jb25maWd1cmF0aW9uICpjKQoreworCS8qIEZJWE1FIGFsbG9jIGlDb25maWd1cmF0aW9uIHN0cmluZywgc2V0IGl0IGluIGMtPnN0cmluZ3MgKi8KKworCWlmIChnYWRnZXRfaXNfb3RnKGMtPmNkZXYtPmdhZGdldCkpIHsKKwkJYy0+ZGVzY3JpcHRvcnMgPSBvdGdfZGVzYzsKKwkJYy0+Ym1BdHRyaWJ1dGVzIHw9IFVTQl9DT05GSUdfQVRUX1dBS0VVUDsKKwl9CisKKwlyZXR1cm4gbmNtX2JpbmRfY29uZmlnKGMsIGhvc3RhZGRyKTsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiBuY21fY29uZmlnX2RyaXZlciA9IHsKKwkvKiAubGFiZWwgPSBmKGhhcmR3YXJlKSAqLworCS5sYWJlbAkJCT0gIkNEQyBFdGhlcm5ldCAoTkNNKSIsCisJLmJDb25maWd1cmF0aW9uVmFsdWUJPSAxLAorCS8qIC5pQ29uZmlndXJhdGlvbiA9IERZTkFNSUMgKi8KKwkuYm1BdHRyaWJ1dGVzCQk9IFVTQl9DT05GSUdfQVRUX1NFTEZQT1dFUiwKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgX19pbml0IGduY21fYmluZChzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYpCit7CisJaW50CQkJZ2NudW07CisJc3RydWN0IHVzYl9nYWRnZXQJKmdhZGdldCA9IGNkZXYtPmdhZGdldDsKKwlpbnQJCQlzdGF0dXM7CisKKwkvKiBzZXQgdXAgbmV0d29yayBsaW5rIGxheWVyICovCisJc3RhdHVzID0gZ2V0aGVyX3NldHVwKGNkZXYtPmdhZGdldCwgaG9zdGFkZHIpOworCWlmIChzdGF0dXMgPCAwKQorCQlyZXR1cm4gc3RhdHVzOworCisJZ2NudW0gPSB1c2JfZ2FkZ2V0X2NvbnRyb2xsZXJfbnVtYmVyKGdhZGdldCk7CisJaWYgKGdjbnVtID49IDApCisJCWRldmljZV9kZXNjLmJjZERldmljZSA9IGNwdV90b19sZTE2KDB4MDMwMCB8IGdjbnVtKTsKKwllbHNlIHsKKwkJLyogV2UgYXNzdW1lIHRoYXQgY2FuX3N1cHBvcnRfZWNtKCkgdGVsbHMgdGhlIHRydXRoOworCQkgKiBidXQgaWYgdGhlIGNvbnRyb2xsZXIgaXNuJ3QgcmVjb2duaXplZCBhdCBhbGwgdGhlbgorCQkgKiB0aGF0IGFzc3VtcHRpb24gaXMgYSBiaXQgbW9yZSBsaWtlbHkgdG8gYmUgd3JvbmcuCisJCSAqLworCQlkZXZfd2FybigmZ2FkZ2V0LT5kZXYsCisJCQkgImNvbnRyb2xsZXIgJyVzJyBub3QgcmVjb2duaXplZDsgdHJ5aW5nICVzXG4iLAorCQkJIGdhZGdldC0+bmFtZSwKKwkJCSBuY21fY29uZmlnX2RyaXZlci5sYWJlbCk7CisJCWRldmljZV9kZXNjLmJjZERldmljZSA9CisJCQljcHVfdG9fbGUxNigweDAzMDAgfCAweDAwOTkpOworCX0KKworCisJLyogQWxsb2NhdGUgc3RyaW5nIGRlc2NyaXB0b3IgbnVtYmVycyAuLi4gbm90ZSB0aGF0IHN0cmluZworCSAqIGNvbnRlbnRzIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSBjb21wb3NpdGVfZGV2IGdsdWUuCisJICovCisKKwkvKiBkZXZpY2UgZGVzY3JpcHRvciBzdHJpbmdzOiBtYW51ZmFjdHVyZXIsIHByb2R1Y3QgKi8KKwlzbnByaW50ZihtYW51ZmFjdHVyZXIsIHNpemVvZiBtYW51ZmFjdHVyZXIsICIlcyAlcyB3aXRoICVzIiwKKwkJaW5pdF91dHNuYW1lKCktPnN5c25hbWUsIGluaXRfdXRzbmFtZSgpLT5yZWxlYXNlLAorCQlnYWRnZXQtPm5hbWUpOworCXN0YXR1cyA9IHVzYl9zdHJpbmdfaWQoY2Rldik7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZmFpbDsKKwlzdHJpbmdzX2RldltTVFJJTkdfTUFOVUZBQ1RVUkVSX0lEWF0uaWQgPSBzdGF0dXM7CisJZGV2aWNlX2Rlc2MuaU1hbnVmYWN0dXJlciA9IHN0YXR1czsKKworCXN0YXR1cyA9IHVzYl9zdHJpbmdfaWQoY2Rldik7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZmFpbDsKKwlzdHJpbmdzX2RldltTVFJJTkdfUFJPRFVDVF9JRFhdLmlkID0gc3RhdHVzOworCWRldmljZV9kZXNjLmlQcm9kdWN0ID0gc3RhdHVzOworCisJc3RhdHVzID0gdXNiX2FkZF9jb25maWcoY2RldiwgJm5jbV9jb25maWdfZHJpdmVyLAorCQkJCW5jbV9kb19jb25maWcpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGZhaWw7CisKKwlkZXZfaW5mbygmZ2FkZ2V0LT5kZXYsICIlc1xuIiwgRFJJVkVSX0RFU0MpOworCisJcmV0dXJuIDA7CisKK2ZhaWw6CisJZ2V0aGVyX2NsZWFudXAoKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IF9fZXhpdCBnbmNtX3VuYmluZChzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYpCit7CisJZ2V0aGVyX2NsZWFudXAoKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfY29tcG9zaXRlX2RyaXZlciBuY21fZHJpdmVyID0geworCS5uYW1lCQk9ICJnX25jbSIsCisJLmRldgkJPSAmZGV2aWNlX2Rlc2MsCisJLnN0cmluZ3MJPSBkZXZfc3RyaW5ncywKKwkudW5iaW5kCQk9IF9fZXhpdF9wKGduY21fdW5iaW5kKSwKK307CisKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfQVVUSE9SKCJZYXVoZW5pIEthbGl1dGEiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworc3RhdGljIGludCBfX2luaXQgaW5pdCh2b2lkKQoreworCXJldHVybiB1c2JfY29tcG9zaXRlX3Byb2JlKCZuY21fZHJpdmVyLCBnbmNtX2JpbmQpOworfQorbW9kdWxlX2luaXQoaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBjbGVhbnVwKHZvaWQpCit7CisJdXNiX2NvbXBvc2l0ZV91bnJlZ2lzdGVyKCZuY21fZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KGNsZWFudXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3BjaF91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9wY2hfdWRjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM4ZGQ4MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9wY2hfdWRjLmMKQEAgLTAsMCArMSwyOTQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIE9LSSBTRU1JQ09ORFVDVE9SIENPLiwgTFRELgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgorICovCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvY2g5Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiL2dhZGdldC5oPgorCisvKiBBZGRyZXNzIG9mZnNldCBvZiBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgVURDX0VQX1JFR19TSElGVAkweDIwCS8qIE9mZnNldCB0byBuZXh0IEVQICovCisKKyNkZWZpbmUgVURDX0VQQ1RMX0FERFIJCTB4MDAJLyogRW5kcG9pbnQgY29udHJvbCAqLworI2RlZmluZSBVRENfRVBTVFNfQUREUgkJMHgwNAkvKiBFbmRwb2ludCBzdGF0dXMgKi8KKyNkZWZpbmUgVURDX0JVRklOX0ZSQU1FTlVNX0FERFIJMHgwOAkvKiBidWZmZXIgc2l6ZSBpbiAvIGZyYW1lIG51bWJlciBvdXQgKi8KKyNkZWZpbmUgVURDX0JVRk9VVF9NQVhQS1RfQUREUgkweDBDCS8qIGJ1ZmZlciBzaXplIG91dCAvIG1heHBrdCBpbiAqLworI2RlZmluZSBVRENfU1VCUFRSX0FERFIJCTB4MTAJLyogc2V0dXAgYnVmZmVyIHBvaW50ZXIgKi8KKyNkZWZpbmUgVURDX0RFU1BUUl9BRERSCQkweDE0CS8qIERhdGEgZGVzY3JpcHRvciBwb2ludGVyICovCisjZGVmaW5lIFVEQ19DT05GSVJNX0FERFIJMHgxOAkvKiBXcml0ZS9SZWFkIGNvbmZpcm1hdGlvbiAqLworCisjZGVmaW5lIFVEQ19ERVZDRkdfQUREUgkJMHg0MDAJLyogRGV2aWNlIGNvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgVURDX0RFVkNUTF9BRERSCQkweDQwNAkvKiBEZXZpY2UgY29udHJvbCAqLworI2RlZmluZSBVRENfREVWU1RTX0FERFIJCTB4NDA4CS8qIERldmljZSBzdGF0dXMgKi8KKyNkZWZpbmUgVURDX0RFVklSUVNUU19BRERSCTB4NDBDCS8qIERldmljZSBpcnEgc3RhdHVzICovCisjZGVmaW5lIFVEQ19ERVZJUlFNU0tfQUREUgkweDQxMAkvKiBEZXZpY2UgaXJxIG1hc2sgKi8KKyNkZWZpbmUgVURDX0VQSVJRU1RTX0FERFIJMHg0MTQJLyogRW5kcG9pbnQgaXJxIHN0YXR1cyAqLworI2RlZmluZSBVRENfRVBJUlFNU0tfQUREUgkweDQxOAkvKiBFbmRwb2ludCBpcnEgbWFzayAqLworI2RlZmluZSBVRENfREVWTFBNX0FERFIJCTB4NDFDCS8qIExQTSBjb250cm9sIC8gc3RhdHVzICovCisjZGVmaW5lIFVEQ19DU1JfQlVTWV9BRERSCTB4NGYwCS8qIFVEQ19DU1JfQlVTWSBTdGF0dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgVURDX1NSU1RfQUREUgkJMHg0ZmMJLyogU09GVCBSRVNFVCByZWdpc3RlciAqLworI2RlZmluZSBVRENfQ1NSX0FERFIJCTB4NTAwCS8qIFVTQl9ERVZJQ0UgZW5kcG9pbnQgcmVnaXN0ZXIgKi8KKworLyogRW5kcG9pbnQgY29udHJvbCByZWdpc3RlciAqLworLyogQml0IHBvc2l0aW9uICovCisjZGVmaW5lIFVEQ19FUENUTF9NUlhGTFVTSAkJKDEgPDwgMTIpCisjZGVmaW5lIFVEQ19FUENUTF9SUkRZCQkJKDEgPDwgOSkKKyNkZWZpbmUgVURDX0VQQ1RMX0NOQUsJCQkoMSA8PCA4KQorI2RlZmluZSBVRENfRVBDVExfU05BSwkJCSgxIDw8IDcpCisjZGVmaW5lIFVEQ19FUENUTF9OQUsJCQkoMSA8PCA2KQorI2RlZmluZSBVRENfRVBDVExfUAkJCSgxIDw8IDMpCisjZGVmaW5lIFVEQ19FUENUTF9GCQkJKDEgPDwgMSkKKyNkZWZpbmUgVURDX0VQQ1RMX1MJCQkoMSA8PCAwKQorI2RlZmluZSBVRENfRVBDVExfRVRfU0hJRlQJCTQKKy8qIE1hc2sgcGF0ZXJuICovCisjZGVmaW5lIFVEQ19FUENUTF9FVF9NQVNLCQkweDAwMDAwMDMwCisvKiBWYWx1ZSBmb3IgRVQgZmllbGQgKi8KKyNkZWZpbmUgVURDX0VQQ1RMX0VUX0NPTlRST0wJCTAKKyNkZWZpbmUgVURDX0VQQ1RMX0VUX0lTTwkJMQorI2RlZmluZSBVRENfRVBDVExfRVRfQlVMSwkJMgorI2RlZmluZSBVRENfRVBDVExfRVRfSU5URVJSVVBUCQkzCisKKy8qIEVuZHBvaW50IHN0YXR1cyByZWdpc3RlciAqLworLyogQml0IHBvc2l0aW9uICovCisjZGVmaW5lIFVEQ19FUFNUU19YRkVSRE9ORQkJKDEgPDwgMjcpCisjZGVmaW5lIFVEQ19FUFNUU19SU1MJCQkoMSA8PCAyNikKKyNkZWZpbmUgVURDX0VQU1RTX1JDUwkJCSgxIDw8IDI1KQorI2RlZmluZSBVRENfRVBTVFNfVFhFTVBUWQkJKDEgPDwgMjQpCisjZGVmaW5lIFVEQ19FUFNUU19UREMJCQkoMSA8PCAxMCkKKyNkZWZpbmUgVURDX0VQU1RTX0hFCQkJKDEgPDwgOSkKKyNkZWZpbmUgVURDX0VQU1RTX01SWEZJRk9fRU1QCQkoMSA8PCA4KQorI2RlZmluZSBVRENfRVBTVFNfQk5BCQkJKDEgPDwgNykKKyNkZWZpbmUgVURDX0VQU1RTX0lOCQkJKDEgPDwgNikKKyNkZWZpbmUgVURDX0VQU1RTX09VVF9TSElGVAkJNAorLyogTWFzayBwYXRlcm4gKi8KKyNkZWZpbmUgVURDX0VQU1RTX09VVF9NQVNLCQkweDAwMDAwMDMwCisjZGVmaW5lIFVEQ19FUFNUU19BTExfQ0xSX01BU0sJCTB4MUYwMDA2RjAKKy8qIFZhbHVlIGZvciBPVVQgZmllbGQgKi8KKyNkZWZpbmUgVURDX0VQU1RTX09VVF9TRVRVUAkJMgorI2RlZmluZSBVRENfRVBTVFNfT1VUX0RBVEEJCTEKKworLyogRGV2aWNlIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgKi8KKy8qIEJpdCBwb3NpdGlvbiAqLworI2RlZmluZSBVRENfREVWQ0ZHX0NTUl9QUkcJCSgxIDw8IDE3KQorI2RlZmluZSBVRENfREVWQ0ZHX1NQCQkJKDEgPDwgMykKKy8qIFNQRCBWYWxlZSAqLworI2RlZmluZSBVRENfREVWQ0ZHX1NQRF9IUwkJMHgwCisjZGVmaW5lIFVEQ19ERVZDRkdfU1BEX0ZTCQkweDEKKyNkZWZpbmUgVURDX0RFVkNGR19TUERfTFMJCTB4MgorCisvKiBEZXZpY2UgY29udHJvbCByZWdpc3RlciAqLworLyogQml0IHBvc2l0aW9uICovCisjZGVmaW5lIFVEQ19ERVZDVExfVEhMRU5fU0hJRlQJCTI0CisjZGVmaW5lIFVEQ19ERVZDVExfQlJMRU5fU0hJRlQJCTE2CisjZGVmaW5lIFVEQ19ERVZDVExfQ1NSX0RPTkUJCSgxIDw8IDEzKQorI2RlZmluZSBVRENfREVWQ1RMX1NECQkJKDEgPDwgMTApCisjZGVmaW5lIFVEQ19ERVZDVExfTU9ERQkJCSgxIDw8IDkpCisjZGVmaW5lIFVEQ19ERVZDVExfQlJFTgkJCSgxIDw8IDgpCisjZGVmaW5lIFVEQ19ERVZDVExfVEhFCQkJKDEgPDwgNykKKyNkZWZpbmUgVURDX0RFVkNUTF9EVQkJCSgxIDw8IDQpCisjZGVmaW5lIFVEQ19ERVZDVExfVERFCQkJKDEgPDwgMykKKyNkZWZpbmUgVURDX0RFVkNUTF9SREUJCQkoMSA8PCAyKQorI2RlZmluZSBVRENfREVWQ1RMX1JFUwkJCSgxIDw8IDApCisKKy8qIERldmljZSBzdGF0dXMgcmVnaXN0ZXIgKi8KKy8qIEJpdCBwb3NpdGlvbiAqLworI2RlZmluZSBVRENfREVWU1RTX1RTX1NISUZUCQkxOAorI2RlZmluZSBVRENfREVWU1RTX0VOVU1fU1BFRURfU0hJRlQJMTMKKyNkZWZpbmUgVURDX0RFVlNUU19BTFRfU0hJRlQJCTgKKyNkZWZpbmUgVURDX0RFVlNUU19JTlRGX1NISUZUCQk0CisjZGVmaW5lIFVEQ19ERVZTVFNfQ0ZHX1NISUZUCQkwCisvKiBNYXNrIHBhdGVybiAqLworI2RlZmluZSBVRENfREVWU1RTX1RTX01BU0sJCTB4ZmZmYzAwMDAKKyNkZWZpbmUgVURDX0RFVlNUU19FTlVNX1NQRUVEX01BU0sJMHgwMDAwNjAwMAorI2RlZmluZSBVRENfREVWU1RTX0FMVF9NQVNLCQkweDAwMDAwZjAwCisjZGVmaW5lIFVEQ19ERVZTVFNfSU5URl9NQVNLCQkweDAwMDAwMGYwCisjZGVmaW5lIFVEQ19ERVZTVFNfQ0ZHX01BU0sJCTB4MDAwMDAwMGYKKy8qIHZhbHVlIGZvciBtYXhpbXVtIHNwZWVkIGZvciBTUEVFRCBmaWVsZCAqLworI2RlZmluZSBVRENfREVWU1RTX0VOVU1fU1BFRURfRlVMTAkxCisjZGVmaW5lIFVEQ19ERVZTVFNfRU5VTV9TUEVFRF9ISUdICTAKKyNkZWZpbmUgVURDX0RFVlNUU19FTlVNX1NQRUVEX0xPVwkyCisjZGVmaW5lIFVEQ19ERVZTVFNfRU5VTV9TUEVFRF9GVUxMWAkzCisKKy8qIERldmljZSBpcnEgcmVnaXN0ZXIgKi8KKy8qIEJpdCBwb3NpdGlvbiAqLworI2RlZmluZSBVRENfREVWSU5UX1JXS1AJCQkoMSA8PCA3KQorI2RlZmluZSBVRENfREVWSU5UX0VOVU0JCQkoMSA8PCA2KQorI2RlZmluZSBVRENfREVWSU5UX1NPRgkJCSgxIDw8IDUpCisjZGVmaW5lIFVEQ19ERVZJTlRfVVMJCQkoMSA8PCA0KQorI2RlZmluZSBVRENfREVWSU5UX1VSCQkJKDEgPDwgMykKKyNkZWZpbmUgVURDX0RFVklOVF9FUwkJCSgxIDw8IDIpCisjZGVmaW5lIFVEQ19ERVZJTlRfU0kJCQkoMSA8PCAxKQorI2RlZmluZSBVRENfREVWSU5UX1NDCQkJKDEgPDwgMCkKKy8qIE1hc2sgcGF0ZXJuICovCisjZGVmaW5lIFVEQ19ERVZJTlRfTVNLCQkJMHg3ZgorCisvKiBFbmRwb2ludCBpcnEgcmVnaXN0ZXIgKi8KKy8qIEJpdCBwb3NpdGlvbiAqLworI2RlZmluZSBVRENfRVBJTlRfSU5fU0hJRlQJCTAKKyNkZWZpbmUgVURDX0VQSU5UX09VVF9TSElGVAkJMTYKKyNkZWZpbmUgVURDX0VQSU5UX0lOX0VQMAkJKDEgPDwgMCkKKyNkZWZpbmUgVURDX0VQSU5UX09VVF9FUDAJCSgxIDw8IDE2KQorLyogTWFzayBwYXRlcm4gKi8KKyNkZWZpbmUgVURDX0VQSU5UX01TS19ESVNBQkxFX0FMTAkweGZmZmZmZmZmCisKKy8qIFVEQ19DU1JfQlVTWSBTdGF0dXMgcmVnaXN0ZXIgKi8KKy8qIEJpdCBwb3NpdGlvbiAqLworI2RlZmluZSBVRENfQ1NSX0JVU1kJCQkoMSA8PCAwKQorCisvKiBTT0ZUIFJFU0VUIHJlZ2lzdGVyICovCisvKiBCaXQgcG9zaXRpb24gKi8KKyNkZWZpbmUgVURDX1BTUlNUCQkJKDEgPDwgMSkKKyNkZWZpbmUgVURDX1NSU1QJCQkoMSA8PCAwKQorCisvKiBVU0JfREVWSUNFIGVuZHBvaW50IHJlZ2lzdGVyICovCisvKiBCaXQgcG9zaXRpb24gKi8KKyNkZWZpbmUgVURDX0NTUl9ORV9OVU1fU0hJRlQJCTAKKyNkZWZpbmUgVURDX0NTUl9ORV9ESVJfU0hJRlQJCTQKKyNkZWZpbmUgVURDX0NTUl9ORV9UWVBFX1NISUZUCQk1CisjZGVmaW5lIFVEQ19DU1JfTkVfQ0ZHX1NISUZUCQk3CisjZGVmaW5lIFVEQ19DU1JfTkVfSU5URl9TSElGVAkJMTEKKyNkZWZpbmUgVURDX0NTUl9ORV9BTFRfU0hJRlQJCTE1CisjZGVmaW5lIFVEQ19DU1JfTkVfTUFYX1BLVF9TSElGVAkxOQorLyogTWFzayBwYXRlcm4gKi8KKyNkZWZpbmUgVURDX0NTUl9ORV9OVU1fTUFTSwkJMHgwMDAwMDAwZgorI2RlZmluZSBVRENfQ1NSX05FX0RJUl9NQVNLCQkweDAwMDAwMDEwCisjZGVmaW5lIFVEQ19DU1JfTkVfVFlQRV9NQVNLCQkweDAwMDAwMDYwCisjZGVmaW5lIFVEQ19DU1JfTkVfQ0ZHX01BU0sJCTB4MDAwMDA3ODAKKyNkZWZpbmUgVURDX0NTUl9ORV9JTlRGX01BU0sJCTB4MDAwMDc4MDAKKyNkZWZpbmUgVURDX0NTUl9ORV9BTFRfTUFTSwkJMHgwMDA3ODAwMAorI2RlZmluZSBVRENfQ1NSX05FX01BWF9QS1RfTUFTSwkJMHgzZmY4MDAwMAorCisjZGVmaW5lIFBDSF9VRENfQ1NSKGVwKQkoVURDX0NTUl9BRERSICsgZXAqNCkKKyNkZWZpbmUgUENIX1VEQ19FUElOVChpbiwgbnVtKVwKKwkJKDEgPDwgKG51bSArIChpbiA/IFVEQ19FUElOVF9JTl9TSElGVCA6IFVEQ19FUElOVF9PVVRfU0hJRlQpKSkKKworLyogSW5kZXggb2YgZW5kcG9pbnQgKi8KKyNkZWZpbmUgVURDX0VQMElOX0lEWAkJMAorI2RlZmluZSBVRENfRVAwT1VUX0lEWAkJMQorI2RlZmluZSBVRENfRVBJTl9JRFgoZXApCShlcCAqIDIpCisjZGVmaW5lIFVEQ19FUE9VVF9JRFgoZXApCShlcCAqIDIgKyAxKQorI2RlZmluZSBQQ0hfVURDX0VQMAkJMAorI2RlZmluZSBQQ0hfVURDX0VQMQkJMQorI2RlZmluZSBQQ0hfVURDX0VQMgkJMgorI2RlZmluZSBQQ0hfVURDX0VQMwkJMworCisvKiBOdW1iZXIgb2YgZW5kcG9pbnQgKi8KKyNkZWZpbmUgUENIX1VEQ19FUF9OVU0JCTMyCS8qIFRvdGFsIG51bWJlciBvZiBFUHMgKDE2IElOLDE2IE9VVCkgKi8KKyNkZWZpbmUgUENIX1VEQ19VU0VEX0VQX05VTQk0CS8qIEVQIG51bWJlciBvZiBFUCdzIHJlYWxseSB1c2VkICovCisvKiBMZW5ndGggVmFsdWUgKi8KKyNkZWZpbmUgUENIX1VEQ19CUkxFTgkJMHgwRgkvKiBCdXJzdCBsZW5ndGggKi8KKyNkZWZpbmUgUENIX1VEQ19USExFTgkJMHgxRgkvKiBUaHJlc2hvbGQgbGVuZ3RoICovCisvKiBWYWx1ZSBvZiBFUCBCdWZmZXIgU2l6ZSAqLworI2RlZmluZSBVRENfRVAwSU5fQlVGRl9TSVpFCTY0CisjZGVmaW5lIFVEQ19FUElOX0JVRkZfU0laRQk1MTIKKyNkZWZpbmUgVURDX0VQME9VVF9CVUZGX1NJWkUJNjQKKyNkZWZpbmUgVURDX0VQT1VUX0JVRkZfU0laRQk1MTIKKy8qIFZhbHVlIG9mIEVQIG1heGltdW0gcGFja2V0IHNpemUgKi8KKyNkZWZpbmUgVURDX0VQMElOX01BWF9QS1RfU0laRQk2NAorI2RlZmluZSBVRENfRVAwT1VUX01BWF9QS1RfU0laRQk2NAorI2RlZmluZSBVRENfQlVMS19NQVhfUEtUX1NJWkUJNTEyCisKKy8qIERNQSAqLworI2RlZmluZSBETUFfRElSX1JYCQkxCS8qIERNQSBmb3IgZGF0YSByZWNlaXZlICovCisjZGVmaW5lIERNQV9ESVJfVFgJCTIJLyogRE1BIGZvciBkYXRhIHRyYW5zbWl0ICovCisjZGVmaW5lIERNQV9BRERSX0lOVkFMSUQJKH4oZG1hX2FkZHJfdCkwKQorI2RlZmluZSBVRENfRE1BX01BWFBBQ0tFVAk2NTUzNgkvKiBtYXhpbXVtIHBhY2tldCBzaXplIGZvciBETUEgKi8KKworLyoqCisgKiBzdHJ1Y3QgcGNoX3VkY19kYXRhX2RtYV9kZXNjIC0gU3RydWN0dXJlIHRvIGhvbGQgRE1BIGRlc2NyaXB0b3IgaW5mb3JtYXRpb24KKyAqCQkJCSAgZm9yIGRhdGEKKyAqIEBzdGF0dXM6CQlTdGF0dXMgcXVhZGxldAorICogQHJlc2VydmVkOgkJUmVzZXJ2ZWQKKyAqIEBkYXRhcHRyOgkJQnVmZmVyIGRlc2NyaXB0b3IKKyAqIEBuZXh0OgkJTmV4dCBkZXNjcmlwdG9yCisgKi8KK3N0cnVjdCBwY2hfdWRjX2RhdGFfZG1hX2Rlc2MgeworCXUzMiBzdGF0dXM7CisJdTMyIHJlc2VydmVkOworCXUzMiBkYXRhcHRyOworCXUzMiBuZXh0OworfTsKKworLyoqCisgKiBzdHJ1Y3QgcGNoX3VkY19zdHBfZG1hX2Rlc2MgLSBTdHJ1Y3R1cmUgdG8gaG9sZCBETUEgZGVzY3JpcHRvciBpbmZvcm1hdGlvbgorICoJCQkJIGZvciBjb250cm9sIGRhdGEKKyAqIEBzdGF0dXM6CVN0YXR1cworICogQHJlc2VydmVkOglSZXNlcnZlZAorICogQGRhdGExMjoJRmlyc3Qgc2V0dXAgd29yZAorICogQGRhdGEzNDoJU2Vjb25kIHNldHVwIHdvcmQKKyAqLworc3RydWN0IHBjaF91ZGNfc3RwX2RtYV9kZXNjIHsKKwl1MzIgc3RhdHVzOworCXUzMiByZXNlcnZlZDsKKwlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0IHJlcXVlc3Q7Cit9IF9fYXR0cmlidXRlKChwYWNrZWQpKTsKKworLyogRE1BIHN0YXR1cyBkZWZpbml0aW9ucyAqLworLyogQnVmZmVyIHN0YXR1cyAqLworI2RlZmluZSBQQ0hfVURDX0JVRkZfU1RTCTB4QzAwMDAwMDAKKyNkZWZpbmUgUENIX1VEQ19CU19IU1RfUkRZCTB4MDAwMDAwMDAKKyNkZWZpbmUgUENIX1VEQ19CU19ETUFfQlNZCTB4NDAwMDAwMDAKKyNkZWZpbmUgUENIX1VEQ19CU19ETUFfRE9ORQkweDgwMDAwMDAwCisjZGVmaW5lIFBDSF9VRENfQlNfSFNUX0JTWQkweEMwMDAwMDAwCisvKiAgUngvVHggU3RhdHVzICovCisjZGVmaW5lIFBDSF9VRENfUlhUWF9TVFMJMHgzMDAwMDAwMAorI2RlZmluZSBQQ0hfVURDX1JUU19TVUNDCTB4MDAwMDAwMDAKKyNkZWZpbmUgUENIX1VEQ19SVFNfREVTRVJSCTB4MTAwMDAwMDAKKyNkZWZpbmUgUENIX1VEQ19SVFNfQlVGRVJSCTB4MzAwMDAwMDAKKy8qIExhc3QgRGVzY3JpcHRvciBJbmRpY2F0aW9uICovCisjZGVmaW5lIFBDSF9VRENfRE1BX0xBU1QJMHgwODAwMDAwMAorLyogTnVtYmVyIG9mIFJ4L1R4IEJ5dGVzIE1hc2sgKi8KKyNkZWZpbmUgUENIX1VEQ19SWFRYX0JZVEVTCTB4MDAwMGZmZmYKKworLyoqCisgKiBzdHJ1Y3QgcGNoX3VkY19jZmdfZGF0YSAtIFN0cnVjdHVyZSB0byBob2xkIGN1cnJlbnQgY29uZmlndXJhdGlvbgorICoJCQkgICAgIGFuZCBpbnRlcmZhY2UgaW5mb3JtYXRpb24KKyAqIEBjdXJfY2ZnOgljdXJyZW50IGNvbmZpZ3VyYXRpb24gaW4gdXNlCisgKiBAY3VyX2ludGY6CWN1cnJlbnQgaW50ZXJmYWNlIGluIHVzZQorICogQGN1cl9hbHQ6CWN1cnJlbnQgYWx0IGludGVyZmFjZSBpbiB1c2UKKyAqLworc3RydWN0IHBjaF91ZGNfY2ZnX2RhdGEgeworCXUxNiBjdXJfY2ZnOworCXUxNiBjdXJfaW50ZjsKKwl1MTYgY3VyX2FsdDsKK307CisKKy8qKgorICogc3RydWN0IHBjaF91ZGNfZXAgLSBTdHJ1Y3R1cmUgaG9sZGluZyBhIFBDSCBVU0IgZGV2aWNlIEVuZHBvaW50IGluZm9ybWF0aW9uCisgKiBAZXA6CQkJZW1iZWRkZWQgZXAgcmVxdWVzdAorICogQHRkX3N0cF9waHlzOglmb3Igc2V0dXAgcmVxdWVzdAorICogQHRkX2RhdGFfcGh5czoJZm9yIGRhdGEgcmVxdWVzdAorICogQHRkX3N0cDoJCWZvciBzZXR1cCByZXF1ZXN0CisgKiBAdGRfZGF0YToJCWZvciBkYXRhIHJlcXVlc3QKKyAqIEBkZXY6CQlyZWZlcmVuY2UgdG8gZGV2aWNlIHN0cnVjdAorICogQG9mZnNldF9hZGRyOglvZmZzZXQgYWRkcmVzcyBvZiBlcCByZWdpc3RlcgorICogQGRlc2M6CQlmb3IgdGhpcyBlcAorICogQHF1ZXVlOgkJcXVldWUgZm9yIHJlcXVlc3RzCisgKiBAbnVtOgkJZW5kcG9pbnQgbnVtYmVyCisgKiBAaW46CQkJZW5kcG9pbnQgaXMgSU4KKyAqIEBoYWx0ZWQ6CQllbmRwb2ludCBoYWx0ZWQ/CisgKiBAZXBzdHM6CQlFbmRwb2ludCBzdGF0dXMKKyAqLworc3RydWN0IHBjaF91ZGNfZXAgeworCXN0cnVjdCB1c2JfZXAJCQllcDsKKwlkbWFfYWRkcl90CQkJdGRfc3RwX3BoeXM7CisJZG1hX2FkZHJfdAkJCXRkX2RhdGFfcGh5czsKKwlzdHJ1Y3QgcGNoX3VkY19zdHBfZG1hX2Rlc2MJKnRkX3N0cDsKKwlzdHJ1Y3QgcGNoX3VkY19kYXRhX2RtYV9kZXNjCSp0ZF9kYXRhOworCXN0cnVjdCBwY2hfdWRjX2RldgkJKmRldjsKKwl1bnNpZ25lZCBsb25nCQkJb2Zmc2V0X2FkZHI7CisJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCSpkZXNjOworCXN0cnVjdCBsaXN0X2hlYWQJCXF1ZXVlOworCXVuc2lnbmVkCQkJbnVtOjUsCisJCQkJCWluOjEsCisJCQkJCWhhbHRlZDoxOworCXVuc2lnbmVkIGxvbmcJCQllcHN0czsKK307CisKKy8qKgorICogc3RydWN0IHBjaF91ZGNfZGV2IC0gU3RydWN0dXJlIGhvbGRpbmcgY29tcGxldGUgaW5mb3JtYXRpb24KKyAqCQkJb2YgdGhlIFBDSCBVU0IgZGV2aWNlCisgKiBAZ2FkZ2V0OgkJZ2FkZ2V0IGRyaXZlciBkYXRhCisgKiBAZHJpdmVyOgkJcmVmZXJlbmNlIHRvIGdhZGdldCBkcml2ZXIgYm91bmQKKyAqIEBwZGV2OgkJcmVmZXJlbmNlIHRvIHRoZSBQQ0kgZGV2aWNlCisgKiBAZXA6CQkJYXJyYXkgb2YgZW5kcG9pbnRzCisgKiBAbG9jazoJCXByb3RlY3RzIGFsbCBzdGF0ZQorICogQGFjdGl2ZToJCWVuYWJsZWQgdGhlIFBDSSBkZXZpY2UKKyAqIEBzdGFsbDoJCXN0YWxsIHJlcXVlc3RlZAorICogQHByb3Rfc3RhbGw6CQlwcm90Y29sIHN0YWxsIHJlcXVlc3RlZAorICogQGlycV9yZWdpc3RlcmVkOglpcnEgcmVnaXN0ZXJlZCB3aXRoIHN5c3RlbQorICogQG1lbV9yZWdpb246CQlkZXZpY2UgbWVtb3J5IG1hcHBlZAorICogQHJlZ2lzdGVyZWQ6CQlkcml2ZXIgcmVnc2l0ZXJlZCB3aXRoIHN5c3RlbQorICogQHN1c3BlbmRlZDoJCWRyaXZlciBpbiBzdXNwZW5kZWQgc3RhdGUKKyAqIEBjb25uZWN0ZWQ6CQlnYWRnZXQgZHJpdmVyIGFzc29jaWF0ZWQKKyAqIEBzZXRfY2ZnX25vdF9hY2tlZDoJcGVuZGluZyBhY2tub3dsZWRnZW1lbnQgNCBzZXR1cAorICogQHdhaXRpbmdfemxwX2FjazoJcGVuZGluZyBhY2tub3dsZWRnZW1lbnQgNCBaTFAKKyAqIEBkYXRhX3JlcXVlc3RzOglETUEgcG9vbCBmb3IgZGF0YSByZXF1ZXN0cworICogQHN0cF9yZXF1ZXN0czoJRE1BIHBvb2wgZm9yIHNldHVwIHJlcXVlc3RzCisgKiBAZG1hX2FkZHI6CQlETUEgcG9vbCBmb3IgcmVjZWl2ZWQKKyAqIEBlcDBvdXRfYnVmOgkJQnVmZmVyIGZvciBETUEKKyAqIEBzZXR1cF9kYXRhOgkJUmVjZWl2ZWQgc2V0dXAgZGF0YQorICogQHBoeXNfYWRkcjoJCW9mIGRldmljZSBtZW1vcnkKKyAqIEBiYXNlX2FkZHI6CQlmb3IgbWFwcGVkIGRldmljZSBtZW1vcnkKKyAqIEBpcnE6CQlJUlEgbGluZSBmb3IgdGhlIGRldmljZQorICogQGNmZ19kYXRhOgkJY3VycmVudCBjZmcsIGludGYsIGFuZCBhbHQgaW4gdXNlCisgKi8KK3N0cnVjdCBwY2hfdWRjX2RldiB7CisJc3RydWN0IHVzYl9nYWRnZXQJCWdhZGdldDsKKwlzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIJKmRyaXZlcjsKKwlzdHJ1Y3QgcGNpX2RldgkJCSpwZGV2OworCXN0cnVjdCBwY2hfdWRjX2VwCQllcFtQQ0hfVURDX0VQX05VTV07CisJc3BpbmxvY2tfdAkJCWxvY2s7IC8qIHByb3RlY3RzIGFsbCBzdGF0ZSAqLworCXVuc2lnbmVkCWFjdGl2ZToxLAorCQkJc3RhbGw6MSwKKwkJCXByb3Rfc3RhbGw6MSwKKwkJCWlycV9yZWdpc3RlcmVkOjEsCisJCQltZW1fcmVnaW9uOjEsCisJCQlyZWdpc3RlcmVkOjEsCisJCQlzdXNwZW5kZWQ6MSwKKwkJCWNvbm5lY3RlZDoxLAorCQkJc2V0X2NmZ19ub3RfYWNrZWQ6MSwKKwkJCXdhaXRpbmdfemxwX2FjazoxOworCXN0cnVjdCBwY2lfcG9vbAkJKmRhdGFfcmVxdWVzdHM7CisJc3RydWN0IHBjaV9wb29sCQkqc3RwX3JlcXVlc3RzOworCWRtYV9hZGRyX3QJCQlkbWFfYWRkcjsKKwl1bnNpZ25lZCBsb25nCQkJZXAwb3V0X2J1Zls2NF07CisJc3RydWN0IHVzYl9jdHJscmVxdWVzdAkJc2V0dXBfZGF0YTsKKwl1bnNpZ25lZCBsb25nCQkJcGh5c19hZGRyOworCXZvaWQgX19pb21lbQkJCSpiYXNlX2FkZHI7CisJdW5zaWduZWQJCQlpcnE7CisJc3RydWN0IHBjaF91ZGNfY2ZnX2RhdGEJY2ZnX2RhdGE7Cit9OworCisjZGVmaW5lIFBDSF9VRENfUENJX0JBUgkJCTEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9FRzIwVF9VREMJMHg4ODA4CisKK3N0YXRpYyBjb25zdCBjaGFyCWVwMF9zdHJpbmdbXSA9ICJlcDBpbiI7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHVkY19zdGFsbF9zcGlubG9jayk7CS8qIHN0YWxsIHNwaW4gbG9jayAqLworc3RydWN0IHBjaF91ZGNfZGV2ICpwY2hfdWRjOwkJLyogcG9pbnRlciB0byBkZXZpY2Ugb2JqZWN0ICovCisKK3N0YXRpYyBpbnQgc3BlZWRfZnM7Cittb2R1bGVfcGFyYW1fbmFtZWQoc3BlZWRfZnMsIHNwZWVkX2ZzLCBib29sLCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0Moc3BlZWRfZnMsICJ0cnVlIGZvciBGdWxsIHNwZWVkIG9wZXJhdGlvbiIpOworCisvKioKKyAqIHN0cnVjdCBwY2hfdWRjX3JlcXVlc3QgLSBTdHJ1Y3R1cmUgaG9sZGluZyBhIFBDSCBVU0IgZGV2aWNlIHJlcXVlc3QgcGFja2V0CisgKiBAcmVxOgkJZW1iZWRkZWQgZXAgcmVxdWVzdAorICogQHRkX2RhdGFfcGh5czoJcGh5cy4gYWRkcmVzcworICogQHRkX2RhdGE6CQlmaXJzdCBkbWEgZGVzYy4gb2YgY2hhaW4KKyAqIEB0ZF9kYXRhX2xhc3Q6CWxhc3QgZG1hIGRlc2MuIG9mIGNoYWluCisgKiBAcXVldWU6CQlhc3NvY2lhdGVkIHF1ZXVlCisgKiBAZG1hX2dvaW5nOgkJRE1BIGluIHByb2dyZXNzIGZvciByZXF1ZXN0CisgKiBAZG1hX21hcHBlZDoJCURNQSBtZW1vcnkgbWFwcGVkIGZvciByZXF1ZXN0CisgKiBAZG1hX2RvbmU6CQlETUEgY29tcGxldGVkIGZvciByZXF1ZXN0CisgKiBAY2hhaW5fbGVuOgkJY2hhaW4gbGVuZ3RoCisgKi8KK3N0cnVjdCBwY2hfdWRjX3JlcXVlc3QgeworCXN0cnVjdCB1c2JfcmVxdWVzdAkJcmVxOworCWRtYV9hZGRyX3QJCQl0ZF9kYXRhX3BoeXM7CisJc3RydWN0IHBjaF91ZGNfZGF0YV9kbWFfZGVzYwkqdGRfZGF0YTsKKwlzdHJ1Y3QgcGNoX3VkY19kYXRhX2RtYV9kZXNjCSp0ZF9kYXRhX2xhc3Q7CisJc3RydWN0IGxpc3RfaGVhZAkJcXVldWU7CisJdW5zaWduZWQJCQlkbWFfZ29pbmc6MSwKKwkJCQkJZG1hX21hcHBlZDoxLAorCQkJCQlkbWFfZG9uZToxOworCXVuc2lnbmVkCQkJY2hhaW5fbGVuOworfTsKKworc3RhdGljIGlubGluZSB1MzIgcGNoX3VkY19yZWFkbChzdHJ1Y3QgcGNoX3VkY19kZXYgKmRldiwgdW5zaWduZWQgbG9uZyByZWcpCit7CisJcmV0dXJuIGlvcmVhZDMyKGRldi0+YmFzZV9hZGRyICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBjaF91ZGNfd3JpdGVsKHN0cnVjdCBwY2hfdWRjX2RldiAqZGV2LAorCQkJCSAgICB1bnNpZ25lZCBsb25nIHZhbCwgdW5zaWduZWQgbG9uZyByZWcpCit7CisJaW93cml0ZTMyKHZhbCwgZGV2LT5iYXNlX2FkZHIgKyByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcGNoX3VkY19iaXRfc2V0KHN0cnVjdCBwY2hfdWRjX2RldiAqZGV2LAorCQkJCSAgICAgdW5zaWduZWQgbG9uZyByZWcsCisJCQkJICAgICB1bnNpZ25lZCBsb25nIGJpdG1hc2spCit7CisJcGNoX3VkY193cml0ZWwoZGV2LCBwY2hfdWRjX3JlYWRsKGRldiwgcmVnKSB8IGJpdG1hc2ssIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwY2hfdWRjX2JpdF9jbHIoc3RydWN0IHBjaF91ZGNfZGV2ICpkZXYsCisJCQkJICAgICB1bnNpZ25lZCBsb25nIHJlZywKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgYml0bWFzaykKK3sKKwlwY2hfdWRjX3dyaXRlbChkZXYsIHBjaF91ZGNfcmVhZGwoZGV2LCByZWcpICYgfihiaXRtYXNrKSwgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB1MzIgcGNoX3VkY19lcF9yZWFkbChzdHJ1Y3QgcGNoX3VkY19lcCAqZXAsIHVuc2lnbmVkIGxvbmcgcmVnKQoreworCXJldHVybiBpb3JlYWQzMihlcC0+ZGV2LT5iYXNlX2FkZHIgKyBlcC0+b2Zmc2V0X2FkZHIgKyByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcGNoX3VkY19lcF93cml0ZWwoc3RydWN0IHBjaF91ZGNfZXAgKmVwLAorCQkJCSAgICB1bnNpZ25lZCBsb25nIHZhbCwgdW5zaWduZWQgbG9uZyByZWcpCit7CisJaW93cml0ZTMyKHZhbCwgZXAtPmRldi0+YmFzZV9hZGRyICsgZXAtPm9mZnNldF9hZGRyICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBjaF91ZGNfZXBfYml0X3NldChzdHJ1Y3QgcGNoX3VkY19lcCAqZXAsCisJCQkJICAgICB1bnNpZ25lZCBsb25nIHJlZywKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgYml0bWFzaykKK3sKKwlwY2hfdWRjX2VwX3dyaXRlbChlcCwgcGNoX3VkY19lcF9yZWFkbChlcCwgcmVnKSB8IGJpdG1hc2ssIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwY2hfdWRjX2VwX2JpdF9jbHIoc3RydWN0IHBjaF91ZGNfZXAgKmVwLAorCQkJCSAgICAgdW5zaWduZWQgbG9uZyByZWcsCisJCQkJICAgICB1bnNpZ25lZCBsb25nIGJpdG1hc2spCit7CisJcGNoX3VkY19lcF93cml0ZWwoZXAsIHBjaF91ZGNfZXBfcmVhZGwoZXAsIHJlZykgJiB+KGJpdG1hc2spLCByZWcpOworfQorCisvKioKKyAqIHBjaF91ZGNfY3NyX2J1c3koKSAtIFdhaXQgdGlsbCBpZGxlLgorICogQGRldjoJUmVmZXJlbmNlIHRvIHBjaF91ZGNfZGV2IHN0cnVjdHVyZQorICovCitzdGF0aWMgdm9pZCBwY2hfdWRjX2Nzcl9idXN5KHN0cnVjdCBwY2hfdWRjX2RldiAqZGV2KQoreworCXVuc2lnbmVkIGludCBjb3VudCA9IDIwMDsKKworCS8qIFdhaXQgdGlsbCBpZGxlICovCisJd2hpbGUgKChwY2hfdWRjX3JlYWRsKGRldiwgVURDX0NTUl9CVVNZX0FERFIpICYgVURDX0NTUl9CVVNZKQorCQkmJiAtLWNvdW50KQorCQljcHVfcmVsYXgoKTsKKwlpZiAoIWNvdW50KQorCQlkZXZfZXJyKCZkZXYtPnBkZXYtPmRldiwgIiVzOiB3YWl0IGVycm9yXG4iLCBfX2Z1bmNfXyk7Cit9CisKKy8qKgorICogcGNoX3VkY193cml0ZV9jc3IoKSAtIFdyaXRlIHRoZSBjb21tYW5kIGFuZCBzdGF0dXMgcmVnaXN0ZXJzLgorICogQGRldjoJUmVmZXJlbmNlIHRvIHBjaF91ZGNfZGV2IHN0cnVjdHVyZQorICogQHZhbDoJdmFsdWUgdG8gYmUgd3JpdHRlbiB0byBDU1IgcmVnaXN0ZXIKKyAqIEBhZGRyOglhZGRyZXNzIG9mIENTUiByZWdpc3RlcgorICovCitzdGF0aWMgdm9pZCBwY2hfdWRjX3dyaXRlX2NzcihzdHJ1Y3QgcGNoX3VkY19kZXYgKmRldiwgdW5zaWduZWQgbG9uZyB2YWwsCisJCQkgICAgICAgdW5zaWduZWQgaW50IGVwKQoreworCXVuc2lnbmVkIGxvbmcgcmVnID0gUENIX1VEQ19DU1IoZXApOworCisJcGNoX3VkY19jc3JfYnVzeShkZXYpOwkJLyogV2FpdCB0aWxsIGlkbGUgKi8KKwlwY2hfdWRjX3dyaXRlbChkZXYsIHZhbCwgcmVnKTsKKwlwY2hfdWRjX2Nzcl9idXN5KGRldik7CQkvKiBXYWl0IHRpbGwgaWRsZSAqLworfQorCisvKioKKyAqIHBjaF91ZGNfcmVhZF9jc3IoKSAtIFJlYWQgdGhlIGNvbW1hbmQgYW5kIHN0YXR1cyByZWdpc3RlcnMuCisgKiBAZGV2OglSZWZlcmVuY2UgdG8gcGNoX3VkY19kZXYgc3RydWN0dXJlCisgKiBAYWRkcjoJYWRkcmVzcyBvZiBDU1IgcmVnaXN0ZXIKKyAqCisgKiBSZXR1cm4gY29kZXM6CWNvbnRlbnQgb2YgQ1NSIHJlZ2lzdGVyCisgKi8KK3N0YXRpYyB1MzIgcGNoX3VkY19yZWFkX2NzcihzdHJ1Y3QgcGNoX3VkY19kZXYgKmRldiwgdW5zaWduZWQgaW50IGVwKQoreworCXVuc2lnbmVkIGxvbmcgcmVnID0gUENIX1VEQ19DU1IoZXApOworCisJcGNoX3VkY19jc3JfYnVzeShkZXYpOwkJLyogV2FpdCB0aWxsIGlkbGUgKi8KKwlwY2hfdWRjX3JlYWRsKGRldiwgcmVnKTsJLyogRHVtbXkgcmVhZCAqLworCXBjaF91ZGNfY3NyX2J1c3koZGV2KTsJCS8qIFdhaXQgdGlsbCBpZGxlICovCisJcmV0dXJuIHBjaF91ZGNfcmVhZGwoZGV2LCByZWcpOworfQorCisvKioKKyAqIHBjaF91ZGNfcm10X3dha2V1cCgpIC0gSW5pdGlhdGUgZm9yIHJlbW90ZSB3YWtldXAKKyAqIEBkZXY6CVJlZmVyZW5jZSB0byBwY2hfdWRjX2RldiBzdHJ1Y3R1cmUKKyAqLworc3RhdGljIGlubGluZSB2b2lkIHBjaF91ZGNfcm10X3dha2V1cChzdHJ1Y3QgcGNoX3VkY19kZXYgKmRldikKK3sKKwlwY2hfdWRjX2JpdF9zZXQoZGV2LCBVRENfREVWQ1RMX0FERFIsIFVEQ19ERVZDVExfUkVTKTsKKwltZGVsYXkoMSk7CisJcGNoX3VkY19iaXRfY2xyKGRldiwgVURDX0RFVkNUTF9BRERSLCBVRENfREVWQ1RMX1JFUyk7Cit9CisKKy8qKgorICogcGNoX3VkY19nZXRfZnJhbWUoKSAtIEdldCB0aGUgY3VycmVudCBmcmFtZSBmcm9tIGRldmljZSBzdGF0dXMgcmVnaXN0ZXIKKyAqIEBkZXY6CVJlZmVyZW5jZSB0byBwY2hfdWRjX2RldiBzdHJ1Y3R1cmUKKyAqIFJldGVybgljdXJyZW50IGZyYW1lCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHBjaF91ZGNfZ2V0X2ZyYW1lKHN0cnVjdCBwY2hfdWRjX2RldiAqZGV2KQoreworCXUzMiBmcmFtZSA9IHBjaF91ZGNfcmVhZGwoZGV2LCBVRENfREVWU1RTX0FERFIpOworCXJldHVybiAoZnJhbWUgJiBVRENfREVWU1RTX1RTX01BU0spID4+IFVEQ19ERVZTVFNfVFNfU0hJRlQ7Cit9CisKKy8qKgorICogcGNoX3VkY19jbGVhcl9zZWxmcG93ZXJlZCgpIC0gQ2xlYXIgdGhlIHNlbGYgcG93ZXIgY29udHJvbAorICogQGRldjoJUmVmZXJlbmNlIHRvIHBjaF91ZGNfcmVncyBzdHJ1Y3R1cmUKKyAqLworc3RhdGljIGlubGluZSB2b2lkIHBjaF91ZGNfY2xlYXJfc2VsZnBvd2VyZWQoc3RydWN0IHBjaF91ZGNfZGV2ICpkZXYpCit7CisJcGNoX3VkY19iaXRfY2xyKGRldiwgVURDX0RFVkNGR19BRERSLCBVRENfREVWQ0ZHX1NQKTsKK30KKworLyoqCisgKiBwY2hfdWRjX3NldF9zZWxmcG93ZXJlZCgpIC0gU2V0IHRoZSBzZWxmIHBvd2VyIGNvbnRyb2wKKyAqIEBkZXY6CVJlZmVyZW5jZSB0byBwY2hfdWRjX3JlZ3Mgc3RydWN0dXJlCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBwY2hfdWRjX3NldF9zZWxmcG93ZXJlZChzdHJ1Y3QgcGNoX3VkY19kZXYgKmRldikKK3sKKwlwY2hfdWRjX2JpdF9zZXQoZGV2LCBVRENfREVWQ0ZHX0FERFIsIFVEQ19ERVZDRkdfU1ApOworfQorCisvKioKKyAqIHBjaF91ZGNfc2V0X2Rpc2Nvbm5lY3QoKSAtIFNldCB0aGUgZGlzY29ubmVjdCBzdGF0dXMuCisgKiBAZGV2OglSZWZlcmVuY2UgdG8gcGNoX3VkY19yZWdzIHN0cnVjdHVyZQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgcGNoX3VkY19zZXRfZGlzY29ubmVjdChzdHJ1Y3QgcGNoX3VkY19kZXYgKmRldikKK3sKKwlwY2hfdWRjX2JpdF9zZXQoZGV2LCBVRENfREVWQ1RMX0FERFIsIFVEQ19ERVZDVExfU0QpOworfQorCisvKioKKyAqIHBjaF91ZGNfY2xlYXJfZGlzY29ubmVjdCgpIC0gQ2xlYXIgdGhlIGRpc2Nvbm5lY3Qgc3RhdHVzLgorICogQGRldjoJUmVmZXJlbmNlIHRvIHBjaF91ZGNfcmVncyBzdHJ1Y3R1cmUKKyAqLworc3RhdGljIHZvaWQgcGNoX3VkY19jbGVhcl9kaXNjb25uZWN0KHN0cnVjdCBwY2hfdWRjX2RldiAqZGV2KQoreworCS8qIENsZWFyIHRoZSBkaXNjb25uZWN0ICovCisJcGNoX3VkY19iaXRfc2V0KGRldiwgVURDX0RFVkNUTF9BRERSLCBVRENfREVWQ1RMX1JFUyk7CisJcGNoX3VkY19iaXRfY2xyKGRldiwgVURDX0RFVkNUTF9BRERSLCBVRENfREVWQ1RMX1NEKTsKKwltZGVsYXkoMSk7CisJLyogUmVzdW1lIFVTQiBzaWduYWxsaW5nICovCisJcGNoX3VkY19iaXRfY2xyKGRldiwgVURDX0RFVkNUTF9BRERSLCBVRENfREVWQ1RMX1JFUyk7Cit9CisKKy8qKgorICogcGNoX3VkY192YnVzX3Nlc3Npb24oKSAtIHNldCBvciBjbGVhcnIgdGhlIGRpc2Nvbm5lY3Qgc3RhdHVzLgorICogQGRldjoJUmVmZXJlbmNlIHRvIHBjaF91ZGNfcmVncyBzdHJ1Y3R1cmUKKyAqIEBpc19hY3RpdmU6CVBhcmFtZXRlciBzcGVjaWZ5aW5nIHRoZSBhY3Rpb24KKyAqCQkgIDA6ICAgaW5kaWNhdGluZyBWQlVTIHBvd2VyIGlzIGVuZGluZworICoJCSAgITA6ICBpbmRpY2F0aW5nIFZCVVMgcG93ZXIgaXMgc3RhcnRpbmcKKyAqLworc3RhdGljIGlubGluZSB2b2lkIHBjaF91ZGNfdmJ1c19zZXNzaW9uKHN0cnVjdCBwY2hfdWRjX2RldiAqZGV2LAorCQkJCQkgIGludCBpc19hY3RpdmUpCit7CisJaWYgKGlzX2FjdGl2ZSkKKwkJcGNoX3VkY19jbGVhcl9kaXNjb25uZWN0KGRldik7CisJZWxzZQorCQlwY2hfdWRjX3NldF9kaXNjb25uZWN0KGRldik7Cit9CisKKy8qKgorICogcGNoX3VkY19lcF9zZXRfc3RhbGwoKSAtIFNldCB0aGUgc3RhbGwgb2YgZW5kcG9pbnQKKyAqIEBlcDoJCVJlZmVyZW5jZSB0byBzdHJ1Y3R1cmUgb2YgdHlwZSBwY2hfdWRjX2VwX3JlZ3MKKyAqLworc3RhdGljIHZvaWQgcGNoX3VkY19lcF9zZXRfc3RhbGwoc3RydWN0IHBjaF91ZGNfZXAgKmVwKQoreworCWlmIChlcC0+aW4pIHsKKwkJcGNoX3VkY19lcF9iaXRfc2V0KGVwLCBVRENfRVBDVExfQUREUiwgVURDX0VQQ1RMX0YpOworCQlwY2hfdWRjX2VwX2JpdF9zZXQoZXAsIFVEQ19FUENUTF9BRERSLCBVRENfRVBDVExfUyk7CisJfSBlbHNlIHsKKwkJcGNoX3VkY19lcF9iaXRfc2V0KGVwLCBVRENfRVBDVExfQUREUiwgVURDX0VQQ1RMX1MpOworCX0KK30KKworLyoqCisgKiBwY2hfdWRjX2VwX2NsZWFyX3N0YWxsKCkgLSBDbGVhciB0aGUgc3RhbGwgb2YgZW5kcG9pbnQKKyAqIEBlcDoJCVJlZmVyZW5jZSB0byBzdHJ1Y3R1cmUgb2YgdHlwZSBwY2hfdWRjX2VwX3JlZ3MKKyAqLworc3RhdGljIGlubGluZSB2b2lkIHBjaF91ZGNfZXBfY2xlYXJfc3RhbGwoc3RydWN0IHBjaF91ZGNfZXAgKmVwKQoreworCS8qIENsZWFyIHRoZSBzdGFsbCAqLworCXBjaF91ZGNfZXBfYml0X2NscihlcCwgVURDX0VQQ1RMX0FERFIsIFVEQ19FUENUTF9TKTsKKwkvKiBDbGVhciBOQUsgYnkgd3JpdGluZyBDTkFLICovCisJcGNoX3VkY19lcF9iaXRfc2V0KGVwLCBVRENfRVBDVExfQUREUiwgVURDX0VQQ1RMX0NOQUspOworfQorCisvKioKKyAqIHBjaF91ZGNfZXBfc2V0X3RyZnJfdHlwZSgpIC0gU2V0IHRoZSB0cmFuc2ZlciB0eXBlIG9mIGVuZHBvaW50CisgKiBAZXA6CQlSZWZlcmVuY2UgdG8gc3RydWN0dXJlIG9mIHR5cGUgcGNoX3VkY19lcF9yZWdzCisgKiBAdHlwZToJVHlwZSBvZiBlbmRwb2ludAorICovCitzdGF0aWMgaW5saW5lIHZvaWQgcGNoX3VkY19lcF9zZXRfdHJmcl90eXBlKHN0cnVjdCBwY2hfdWRjX2VwICplcCwKKwkJCQkJdTggdHlwZSkKK3sKKwlwY2hfdWRjX2VwX3dyaXRlbChlcCwgKCh0eXBlIDw8IFVEQ19FUENUTF9FVF9TSElGVCkgJgorCQkJCVVEQ19FUENUTF9FVF9NQVNLKSwgVURDX0VQQ1RMX0FERFIpOworfQorCisvKioKKyAqIHBjaF91ZGNfZXBfc2V0X2J1ZnN6KCkgLSBTZXQgdGhlIG1heGltdW0gcGFja2V0IHNpemUgZm9yIHRoZSBlbmRwb2ludAorICogQGVwOgkJUmVmZXJlbmNlIHRvIHN0cnVjdHVyZSBvZiB0eXBlIHBjaF91ZGNfZXBfcmVncworICogQGJ1Zl9zaXplOglUaGUgYnVmZmVyIHNpemUKKyAqLworc3RhdGljIHZvaWQgcGNoX3VkY19lcF9zZXRfYnVmc3ooc3RydWN0IHBjaF91ZGNfZXAgKmVwLAorCQkJCQkJIHUzMiBidWZfc2l6ZSwgdTMyIGVwX2luKQoreworCXUzMiBkYXRhOworCWlmIChlcF9pbikgeworCQlkYXRhID0gcGNoX3VkY19lcF9yZWFkbChlcCwgVURDX0JVRklOX0ZSQU1FTlVNX0FERFIpOworCQlkYXRhID0gKGRhdGEgJiAweGZmZmYwMDAwKSB8IChidWZfc2l6ZSAmIDB4ZmZmZik7CisJCXBjaF91ZGNfZXBfd3JpdGVsKGVwLCBkYXRhLCBVRENfQlVGSU5fRlJBTUVOVU1fQUREUik7CisJfSBlbHNlIHsKKwkJZGF0YSA9IHBjaF91ZGNfZXBfcmVhZGwoZXAsIFVEQ19CVUZPVVRfTUFYUEtUX0FERFIpOworCQlkYXRhID0gKGJ1Zl9zaXplIDw8IDE2KSB8IChkYXRhICYgMHhmZmZmKTsKKwkJcGNoX3VkY19lcF93cml0ZWwoZXAsIGRhdGEsIFVEQ19CVUZPVVRfTUFYUEtUX0FERFIpOworCX0KK30KKworLyoqCisgKiBwY2hfdWRjX2VwX3NldF9tYXhwa3QoKSAtIFNldCB0aGUgTWF4IHBhY2tldCBzaXplIGZvciB0aGUgZW5kcG9pbnQKKyAqIEBlcDoJCVJlZmVyZW5jZSB0byBzdHJ1Y3R1cmUgb2YgdHlwZSBwY2hfdWRjX2VwX3JlZ3MKKyAqIEBwa3Rfc2l6ZToJVGhlIHBhY2tldCBzaXplCisgKi8KK3N0YXRpYyB2b2lkIHBjaF91ZGNfZXBfc2V0X21heHBrdChzdHJ1Y3QgcGNoX3VkY19lcCAqZXAsIHUzMiBwa3Rfc2l6ZSkKK3sKKwl1MzIgZGF0YSA9IHBjaF91ZGNfZXBfcmVhZGwoZXAsIFVEQ19CVUZPVVRfTUFYUEtUX0FERFIpOworCWRhdGEgPSAoZGF0YSAmIDB4ZmZmZjAwMDApIHwgKHBrdF9zaXplICYgMHhmZmZmKTsKKwlwY2hfdWRjX2VwX3dyaXRlbChlcCwgZGF0YSwgVURDX0JVRk9VVF9NQVhQS1RfQUREUik7Cit9CisKKy8qKgorICogcGNoX3VkY19lcF9zZXRfc3VicHRyKCkgLSBTZXQgdGhlIFNldHVwIGJ1ZmZlciBwb2ludGVyIGZvciB0aGUgZW5kcG9pbnQKKyAqIEBlcDoJCVJlZmVyZW5jZSB0byBzdHJ1Y3R1cmUgb2YgdHlwZSBwY2hfdWRjX2VwX3JlZ3MKKyAqIEBhZGRyOglBZGRyZXNzIG9mIHRoZSByZWdpc3RlcgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgcGNoX3VkY19lcF9zZXRfc3VicHRyKHN0cnVjdCBwY2hfdWRjX2VwICplcCwgdTMyIGFkZHIpCit7CisJcGNoX3VkY19lcF93cml0ZWwoZXAsIGFkZHIsIFVEQ19TVUJQVFJfQUREUik7Cit9CisKKy8qKgorICogcGNoX3VkY19lcF9zZXRfZGRwdHIoKSAtIFNldCB0aGUgRGF0YSBkZXNjcmlwdG9yIHBvaW50ZXIgZm9yIHRoZSBlbmRwb2ludAorICogQGVwOgkJUmVmZXJlbmNlIHRvIHN0cnVjdHVyZSBvZiB0eXBlIHBjaF91ZGNfZXBfcmVncworICogQGFkZHI6CUFkZHJlc3Mgb2YgdGhlIHJlZ2lzdGVyCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBwY2hfdWRjX2VwX3NldF9kZHB0cihzdHJ1Y3QgcGNoX3VkY19lcCAqZXAsIHUzMiBhZGRyKQoreworCXBjaF91ZGNfZXBfd3JpdGVsKGVwLCBhZGRyLCBVRENfREVTUFRSX0FERFIpOworfQorCisvKioKKyAqIHBjaF91ZGNfZXBfc2V0X3BkKCkgLSBTZXQgdGhlIHBvbGwgZGVtYW5kIGJpdCBmb3IgdGhlIGVuZHBvaW50CisgKiBAZXA6CQlSZWZlcmVuY2UgdG8gc3RydWN0dXJlIG9mIHR5cGUgcGNoX3VkY19lcF9yZWdzCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBwY2hfdWRjX2VwX3NldF9wZChzdHJ1Y3QgcGNoX3VkY19lcCAqZXApCit7CisJcGNoX3VkY19lcF9iaXRfc2V0KGVwLCBVRENfRVBDVExfQUREUiwgVURDX0VQQ1RMX1ApOworfQorCisvKioKKyAqIHBjaF91ZGNfZXBfc2V0X3JyZHkoKSAtIFNldCB0aGUgcmVjZWl2ZSByZWFkeSBiaXQgZm9yIHRoZSBlbmRwb2ludAorICogQGVwOgkJUmVmZXJlbmNlIHRvIHN0cnVjdHVyZSBvZiB0eXBlIHBjaF91ZGNfZXBfcmVncworICovCitzdGF0aWMgaW5saW5lIHZvaWQgcGNoX3VkY19lcF9zZXRfcnJkeShzdHJ1Y3QgcGNoX3VkY19lcCAqZXApCit7CisJcGNoX3VkY19lcF9iaXRfc2V0KGVwLCBVRENfRVBDVExfQUREUiwgVURDX0VQQ1RMX1JSRFkpOworfQorCisvKioKKyAqIHBjaF91ZGNfZXBfY2xlYXJfcnJkeSgpIC0gQ2xlYXIgdGhlIHJlY2VpdmUgcmVhZHkgYml0IGZvciB0aGUgZW5kcG9pbnQKKyAqIEBlcDoJCVJlZmVyZW5jZSB0byBzdHJ1Y3R1cmUgb2YgdHlwZSBwY2hfdWRjX2VwX3JlZ3MKKyAqLworc3RhdGljIGlubGluZSB2b2lkIHBjaF91ZGNfZXBfY2xlYXJfcnJkeShzdHJ1Y3QgcGNoX3VkY19lcCAqZXApCit7CisJcGNoX3VkY19lcF9iaXRfY2xyKGVwLCBVRENfRVBDVExfQUREUiwgVURDX0VQQ1RMX1JSRFkpOworfQorCisvKioKKyAqIHBjaF91ZGNfc2V0X2RtYSgpIC0gU2V0IHRoZSAnVERFJyBvciBSREUgYml0IG9mIGRldmljZSBjb250cm9sCisgKgkJCXJlZ2lzdGVyIGRlcGVuZGluZyBvbiB0aGUgZGlyZWN0aW9uIHNwZWNpZmllZAorICogQGRldjoJUmVmZXJlbmNlIHRvIHN0cnVjdHVyZSBvZiB0eXBlIHBjaF91ZGNfcmVncworICogQGRpcjoJd2hldGhlciBUeCBvciBSeAorICoJCSAgRE1BX0RJUl9SWDogUmVjZWl2ZQorICoJCSAgRE1BX0RJUl9UWDogVHJhbnNtaXQKKyAqLworc3RhdGljIGlubGluZSB2b2lkIHBjaF91ZGNfc2V0X2RtYShzdHJ1Y3QgcGNoX3VkY19kZXYgKmRldiwgaW50IGRpcikKK3sKKwlpZiAoZGlyID09IERNQV9ESVJfUlgpCisJCXBjaF91ZGNfYml0X3NldChkZXYsIFVEQ19ERVZDVExfQUREUiwgVURDX0RFVkNUTF9SREUpOworCWVsc2UgaWYgKGRpciA9PSBETUFfRElSX1RYKQorCQlwY2hfdWRjX2JpdF9zZXQoZGV2LCBVRENfREVWQ1RMX0FERFIsIFVEQ19ERVZDVExfVERFKTsKK30KKworLyoqCisgKiBwY2hfdWRjX2NsZWFyX2RtYSgpIC0gQ2xlYXIgdGhlICdUREUnIG9yIFJERSBiaXQgb2YgZGV2aWNlIGNvbnRyb2wKKyAqCQkJCSByZWdpc3RlciBkZXBlbmRpbmcgb24gdGhlIGRpcmVjdGlvbiBzcGVjaWZpZWQKKyAqIEBkZXY6CVJlZmVyZW5jZSB0byBzdHJ1Y3R1cmUgb2YgdHlwZSBwY2hfdWRjX3JlZ3MKKyAqIEBkaXI6CVdoZXRoZXIgVHggb3IgUngKKyAqCQkgIERNQV9ESVJfUlg6IFJlY2VpdmUKKyAqCQkgIERNQV9ESVJfVFg6IFRyYW5zbWl0CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBwY2hfdWRjX2NsZWFyX2RtYShzdHJ1Y3QgcGNoX3VkY19kZXYgKmRldiwgaW50IGRpcikKK3sKKwlpZiAoZGlyID09IERNQV9ESVJfUlgpCisJCXBjaF91ZGNfYml0X2NscihkZXYsIFVEQ19ERVZDVExfQUREUiwgVURDX0RFVkNUTF9SREUpOworCWVsc2UgaWYgKGRpciA9PSBETUFfRElSX1RYKQorCQlwY2hfdWRjX2JpdF9jbHIoZGV2LCBVRENfREVWQ1RMX0FERFIsIFVEQ19ERVZDVExfVERFKTsKK30KKworLyoqCisgKiBwY2hfdWRjX3NldF9jc3JfZG9uZSgpIC0gU2V0IHRoZSBkZXZpY2UgY29udHJvbCByZWdpc3RlcgorICoJCQkJQ1NSIGRvbmUgZmllbGQgKGJpdCAxMykKKyAqIEBkZXY6CXJlZmVyZW5jZSB0byBzdHJ1Y3R1cmUgb2YgdHlwZSBwY2hfdWRjX3JlZ3MKKyAqLworc3RhdGljIGlubGluZSB2b2lkIHBjaF91ZGNfc2V0X2Nzcl9kb25lKHN0cnVjdCBwY2hfdWRjX2RldiAqZGV2KQoreworCXBjaF91ZGNfYml0X3NldChkZXYsIFVEQ19ERVZDVExfQUREUiwgVURDX0RFVkNUTF9DU1JfRE9ORSk7Cit9CisKKy8qKgorICogcGNoX3VkY19kaXNhYmxlX2ludGVycnVwdHMoKSAtIERpc2FibGVzIHRoZSBzcGVjaWZpZWQgaW50ZXJydXB0cworICogQGRldjoJUmVmZXJlbmNlIHRvIHN0cnVjdHVyZSBvZiB0eXBlIHBjaF91ZGNfcmVncworICogQG1hc2s6CU1hc2sgdG8gZGlzYWJsZSBpbnRlcnJ1cHRzCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBwY2hfdWRjX2Rpc2FibGVfaW50ZXJydXB0cyhzdHJ1Y3QgcGNoX3VkY19kZXYgKmRldiwKKwkJCQkJICAgIHUzMiBtYXNrKQoreworCXBjaF91ZGNfYml0X3NldChkZXYsIFVEQ19ERVZJUlFNU0tfQUREUiwgbWFzayk7Cit9CisKKy8qKgorICogcGNoX3VkY19lbmFibGVfaW50ZXJydXB0cygpIC0gRW5hYmxlIHRoZSBzcGVjaWZpZWQgaW50ZXJydXB0cworICogQGRldjoJUmVmZXJlbmNlIHRvIHN0cnVjdHVyZSBvZiB0eXBlIHBjaF91ZGNfcmVncworICogQG1hc2s6CU1hc2sgdG8gZW5hYmxlIGludGVycnVwdHMKKyAqLworc3RhdGljIGlubGluZSB2b2lkIHBjaF91ZGNfZW5hYmxlX2ludGVycnVwdHMoc3RydWN0IHBjaF91ZGNfZGV2ICpkZXYsCisJCQkJCSAgIHUzMiBtYXNrKQoreworCXBjaF91ZGNfYml0X2NscihkZXYsIFVEQ19ERVZJUlFNU0tfQUREUiwgbWFzayk7Cit9CisKKy8qKgorICogcGNoX3VkY19kaXNhYmxlX2VwX2ludGVycnVwdHMoKSAtIERpc2FibGUgZW5kcG9pbnQgaW50ZXJydXB0cworICogQGRldjoJUmVmZXJlbmNlIHRvIHN0cnVjdHVyZSBvZiB0eXBlIHBjaF91ZGNfcmVncworICogQG1hc2s6CU1hc2sgdG8gZGlzYWJsZSBpbnRlcnJ1cHRzCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBwY2hfdWRjX2Rpc2FibGVfZXBfaW50ZXJydXB0cyhzdHJ1Y3QgcGNoX3VkY19kZXYgKmRldiwKKwkJCQkJCXUzMiBtYXNrKQoreworCXBjaF91ZGNfYml0X3NldChkZXYsIFVEQ19FUElSUU1TS19BRERSLCBtYXNrKTsKK30KKworLyoqCisgKiBwY2hfdWRjX2VuYWJsZV9lcF9pbnRlcnJ1cHRzKCkgLSBFbmFibGUgZW5kcG9pbnQgaW50ZXJydXB0cworICogQGRldjoJUmVmZXJlbmNlIHRvIHN0cnVjdHVyZSBvZiB0eXBlIHBjaF91ZGNfcmVncworICogQG1hc2s6CU1hc2sgdG8gZW5hYmxlIGludGVycnVwdHMKKyAqLworc3RhdGljIGlubGluZSB2b2lkIHBjaF91ZGNfZW5hYmxlX2VwX2ludGVycnVwdHMoc3RydWN0IHBjaF91ZGNfZGV2ICpkZXYsCisJCQkJCSAgICAgIHUzMiBtYXNrKQoreworCXBjaF91ZGNfYml0X2NscihkZXYsIFVEQ19FUElSUU1TS19BRERSLCBtYXNrKTsKK30KKworLyoqCisgKiBwY2hfdWRjX3JlYWRfZGV2aWNlX2ludGVycnVwdHMoKSAtIFJlYWQgdGhlIGRldmljZSBpbnRlcnJ1cHRzCisgKiBAZGV2OglSZWZlcmVuY2UgdG8gc3RydWN0dXJlIG9mIHR5cGUgcGNoX3VkY19yZWdzCisgKiBSZXRlcm4JVGhlIGRldmljZSBpbnRlcnJ1cHRzCisgKi8KK3N0YXRpYyBpbmxpbmUgdTMyIHBjaF91ZGNfcmVhZF9kZXZpY2VfaW50ZXJydXB0cyhzdHJ1Y3QgcGNoX3VkY19kZXYgKmRldikKK3sKKwlyZXR1cm4gcGNoX3VkY19yZWFkbChkZXYsIFVEQ19ERVZJUlFTVFNfQUREUik7Cit9CisKKy8qKgorICogcGNoX3VkY193cml0ZV9kZXZpY2VfaW50ZXJydXB0cygpIC0gV3JpdGUgZGV2aWNlIGludGVycnVwdHMKKyAqIEBkZXY6CVJlZmVyZW5jZSB0byBzdHJ1Y3R1cmUgb2YgdHlwZSBwY2hfdWRjX3JlZ3MKKyAqIEB2YWw6CVRoZSB2YWx1ZSB0byBiZSB3cml0dGVuIHRvIGludGVycnVwdCByZWdpc3RlcgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgcGNoX3VkY193cml0ZV9kZXZpY2VfaW50ZXJydXB0cyhzdHJ1Y3QgcGNoX3VkY19kZXYgKmRldiwKKwkJCQkJCSAgICAgdTMyIHZhbCkKK3sKKwlwY2hfdWRjX3dyaXRlbChkZXYsIHZhbCwgVURDX0RFVklSUVNUU19BRERSKTsKK30KKworLyoqCisgKiBwY2hfdWRjX3JlYWRfZXBfaW50ZXJydXB0cygpIC0gUmVhZCB0aGUgZW5kcG9pbnQgaW50ZXJydXB0cworICogQGRldjoJUmVmZXJlbmNlIHRvIHN0cnVjdHVyZSBvZiB0eXBlIHBjaF91ZGNfcmVncworICogUmV0ZXJuCVRoZSBlbmRwb2ludCBpbnRlcnJ1cHQKKyAqLworc3RhdGljIGlubGluZSB1MzIgcGNoX3VkY19yZWFkX2VwX2ludGVycnVwdHMoc3RydWN0IHBjaF91ZGNfZGV2ICpkZXYpCit7CisJcmV0dXJuIHBjaF91ZGNfcmVhZGwoZGV2LCBVRENfRVBJUlFTVFNfQUREUik7Cit9CisKKy8qKgorICogcGNoX3VkY193cml0ZV9lcF9pbnRlcnJ1cHRzKCkgLSBDbGVhciBlbmRwb2ludCBpbnRlcnVwdHMKKyAqIEBkZXY6CVJlZmVyZW5jZSB0byBzdHJ1Y3R1cmUgb2YgdHlwZSBwY2hfdWRjX3JlZ3MKKyAqIEB2YWw6CVRoZSB2YWx1ZSB0byBiZSB3cml0dGVuIHRvIGludGVycnVwdCByZWdpc3RlcgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgcGNoX3VkY193cml0ZV9lcF9pbnRlcnJ1cHRzKHN0cnVjdCBwY2hfdWRjX2RldiAqZGV2LAorCQkJCQkgICAgIHUzMiB2YWwpCit7CisJcGNoX3VkY193cml0ZWwoZGV2LCB2YWwsIFVEQ19FUElSUVNUU19BRERSKTsKK30KKworLyoqCisgKiBwY2hfdWRjX3JlYWRfZGV2aWNlX3N0YXR1cygpIC0gUmVhZCB0aGUgZGV2aWNlIHN0YXR1cworICogQGRldjoJUmVmZXJlbmNlIHRvIHN0cnVjdHVyZSBvZiB0eXBlIHBjaF91ZGNfcmVncworICogUmV0ZXJuCVRoZSBkZXZpY2Ugc3RhdHVzCisgKi8KK3N0YXRpYyBpbmxpbmUgdTMyIHBjaF91ZGNfcmVhZF9kZXZpY2Vfc3RhdHVzKHN0cnVjdCBwY2hfdWRjX2RldiAqZGV2KQoreworCXJldHVybiBwY2hfdWRjX3JlYWRsKGRldiwgVURDX0RFVlNUU19BRERSKTsKK30KKworLyoqCisgKiBwY2hfdWRjX3JlYWRfZXBfY29udHJvbCgpIC0gUmVhZCB0aGUgZW5kcG9pbnQgY29udHJvbAorICogQGVwOgkJUmVmZXJlbmNlIHRvIHN0cnVjdHVyZSBvZiB0eXBlIHBjaF91ZGNfZXBfcmVncworICogUmV0ZXJuCVRoZSBlbmRwb2ludCBjb250cm9sIHJlZ2lzdGVyIHZhbHVlCisgKi8KK3N0YXRpYyBpbmxpbmUgdTMyIHBjaF91ZGNfcmVhZF9lcF9jb250cm9sKHN0cnVjdCBwY2hfdWRjX2VwICplcCkKK3sKKwlyZXR1cm4gcGNoX3VkY19lcF9yZWFkbChlcCwgVURDX0VQQ1RMX0FERFIpOworfQorCisvKioKKyAqIHBjaF91ZGNfY2xlYXJfZXBfY29udHJvbCgpIC0gQ2xlYXIgdGhlIGVuZHBvaW50IGNvbnRyb2wgcmVnaXN0ZXIKKyAqIEBlcDoJCVJlZmVyZW5jZSB0byBzdHJ1Y3R1cmUgb2YgdHlwZSBwY2hfdWRjX2VwX3JlZ3MKKyAqIFJldGVybglUaGUgZW5kcG9pbnQgY29udHJvbCByZWdpc3RlciB2YWx1ZQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgcGNoX3VkY19jbGVhcl9lcF9jb250cm9sKHN0cnVjdCBwY2hfdWRjX2VwICplcCkKK3sKKwlyZXR1cm4gcGNoX3VkY19lcF93cml0ZWwoZXAsIDAsIFVEQ19FUENUTF9BRERSKTsKK30KKworLyoqCisgKiBwY2hfdWRjX3JlYWRfZXBfc3RhdHVzKCkgLSBSZWFkIHRoZSBlbmRwb2ludCBzdGF0dXMKKyAqIEBlcDoJCVJlZmVyZW5jZSB0byBzdHJ1Y3R1cmUgb2YgdHlwZSBwY2hfdWRjX2VwX3JlZ3MKKyAqIFJldGVybglUaGUgZW5kcG9pbnQgc3RhdHVzCisgKi8KK3N0YXRpYyBpbmxpbmUgdTMyIHBjaF91ZGNfcmVhZF9lcF9zdGF0dXMoc3RydWN0IHBjaF91ZGNfZXAgKmVwKQoreworCXJldHVybiBwY2hfdWRjX2VwX3JlYWRsKGVwLCBVRENfRVBTVFNfQUREUik7Cit9CisKKy8qKgorICogcGNoX3VkY19jbGVhcl9lcF9zdGF0dXMoKSAtIENsZWFyIHRoZSBlbmRwb2ludCBzdGF0dXMKKyAqIEBlcDoJCVJlZmVyZW5jZSB0byBzdHJ1Y3R1cmUgb2YgdHlwZSBwY2hfdWRjX2VwX3JlZ3MKKyAqIEBzdGF0OglFbmRwb2ludCBzdGF0dXMKKyAqLworc3RhdGljIGlubGluZSB2b2lkIHBjaF91ZGNfY2xlYXJfZXBfc3RhdHVzKHN0cnVjdCBwY2hfdWRjX2VwICplcCwKKwkJCQkJIHUzMiBzdGF0KQoreworCXJldHVybiBwY2hfdWRjX2VwX3dyaXRlbChlcCwgc3RhdCwgVURDX0VQU1RTX0FERFIpOworfQorCisvKioKKyAqIHBjaF91ZGNfZXBfc2V0X25haygpIC0gU2V0IHRoZSBiaXQgNyAoU05BSyBmaWVsZCkKKyAqCQkJCW9mIHRoZSBlbmRwb2ludCBjb250cm9sIHJlZ2lzdGVyCisgKiBAZXA6CQlSZWZlcmVuY2UgdG8gc3RydWN0dXJlIG9mIHR5cGUgcGNoX3VkY19lcF9yZWdzCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBwY2hfdWRjX2VwX3NldF9uYWsoc3RydWN0IHBjaF91ZGNfZXAgKmVwKQoreworCXBjaF91ZGNfZXBfYml0X3NldChlcCwgVURDX0VQQ1RMX0FERFIsIFVEQ19FUENUTF9TTkFLKTsKK30KKworLyoqCisgKiBwY2hfdWRjX2VwX2NsZWFyX25haygpIC0gU2V0IHRoZSBiaXQgOCAoQ05BSyBmaWVsZCkKKyAqCQkJCW9mIHRoZSBlbmRwb2ludCBjb250cm9sIHJlZ2lzdGVyCisgKiBAZXA6CQlyZWZlcmVuY2UgdG8gc3RydWN0dXJlIG9mIHR5cGUgcGNoX3VkY19lcF9yZWdzCisgKi8KK3N0YXRpYyB2b2lkIHBjaF91ZGNfZXBfY2xlYXJfbmFrKHN0cnVjdCBwY2hfdWRjX2VwICplcCkKK3sKKwl1bnNpZ25lZCBpbnQgbG9vcGNudCA9IDA7CisJc3RydWN0IHBjaF91ZGNfZGV2ICpkZXYgPSBlcC0+ZGV2OworCisJaWYgKCEocGNoX3VkY19lcF9yZWFkbChlcCwgVURDX0VQQ1RMX0FERFIpICYgVURDX0VQQ1RMX05BSykpCisJCXJldHVybjsKKwlpZiAoIWVwLT5pbikgeworCQlsb29wY250ID0gMTAwMDA7CisJCXdoaWxlICghKHBjaF91ZGNfcmVhZF9lcF9zdGF0dXMoZXApICYgVURDX0VQU1RTX01SWEZJRk9fRU1QKSAmJgorCQkJLS1sb29wY250KQorCQkJdWRlbGF5KDUpOworCQlpZiAoIWxvb3BjbnQpCisJCQlkZXZfZXJyKCZkZXYtPnBkZXYtPmRldiwgIiVzOiBSeEZJRk8gbm90IEVtcHR5XG4iLAorCQkJCV9fZnVuY19fKTsKKwl9CisJbG9vcGNudCA9IDEwMDAwOworCXdoaWxlICgocGNoX3VkY19yZWFkX2VwX2NvbnRyb2woZXApICYgVURDX0VQQ1RMX05BSykgJiYgLS1sb29wY250KSB7CisJCXBjaF91ZGNfZXBfYml0X3NldChlcCwgVURDX0VQQ1RMX0FERFIsIFVEQ19FUENUTF9DTkFLKTsKKwkJdWRlbGF5KDUpOworCX0KKwlpZiAoIWxvb3BjbnQpCisJCWRldl9lcnIoJmRldi0+cGRldi0+ZGV2LCAiJXM6IENsZWFyIE5BSyBub3Qgc2V0IGZvciBlcCVkJXNcbiIsCisJCQlfX2Z1bmNfXywgZXAtPm51bSwgKGVwLT5pbiA/ICJpbiIgOiAib3V0IikpOworfQorCisvKioKKyAqIHBjaF91ZGNfZXBfZmlmb19mbHVzaCgpIC0gRmx1c2ggdGhlIGVuZHBvaW50IGZpZm8KKyAqIEBlcDoJcmVmZXJlbmNlIHRvIHN0cnVjdHVyZSBvZiB0eXBlIHBjaF91ZGNfZXBfcmVncworICogQGRpcjoJZGlyZWN0aW9uIG9mIGVuZHBvaW50CisgKgkJICAwOiAgZW5kcG9pbnQgaXMgT1VUCisgKgkJICAhMDogZW5kcG9pbnQgaXMgSU4KKyAqLworc3RhdGljIHZvaWQgcGNoX3VkY19lcF9maWZvX2ZsdXNoKHN0cnVjdCBwY2hfdWRjX2VwICplcCwgaW50IGRpcikKK3sKKwl1bnNpZ25lZCBpbnQgbG9vcGNudCA9IDA7CisJc3RydWN0IHBjaF91ZGNfZGV2ICpkZXYgPSBlcC0+ZGV2OworCisJaWYgKGRpcikgewkvKiBJTiBlcCAqLworCQlwY2hfdWRjX2VwX2JpdF9zZXQoZXAsIFVEQ19FUENUTF9BRERSLCBVRENfRVBDVExfRik7CisJCXJldHVybjsKKwl9CisKKwlpZiAocGNoX3VkY19yZWFkX2VwX3N0YXR1cyhlcCkgJiBVRENfRVBTVFNfTVJYRklGT19FTVApCisJCXJldHVybjsKKwlwY2hfdWRjX2VwX2JpdF9zZXQoZXAsIFVEQ19FUENUTF9BRERSLCBVRENfRVBDVExfTVJYRkxVU0gpOworCS8qIFdhaXQgZm9yIFJ4RklGTyBFbXB0eSAqLworCWxvb3BjbnQgPSAxMDAwMDsKKwl3aGlsZSAoIShwY2hfdWRjX3JlYWRfZXBfc3RhdHVzKGVwKSAmIFVEQ19FUFNUU19NUlhGSUZPX0VNUCkgJiYKKwkJLS1sb29wY250KQorCQl1ZGVsYXkoNSk7CisJaWYgKCFsb29wY250KQorCQlkZXZfZXJyKCZkZXYtPnBkZXYtPmRldiwgIlJ4RklGTyBub3QgRW1wdHlcbiIpOworCXBjaF91ZGNfZXBfYml0X2NscihlcCwgVURDX0VQQ1RMX0FERFIsIFVEQ19FUENUTF9NUlhGTFVTSCk7Cit9CisKKy8qKgorICogcGNoX3VkY19lcF9lbmFibGUoKSAtIFRoaXMgYXBpIGVuYWJsZXMgZW5kcG9pbnQKKyAqIEByZWdzOglSZWZlcmVuY2UgdG8gc3RydWN0dXJlIHBjaF91ZGNfZXBfcmVncworICogQGRlc2M6CWVuZHBvaW50IGRlc2NyaXB0b3IKKyAqLworc3RhdGljIHZvaWQgcGNoX3VkY19lcF9lbmFibGUoc3RydWN0IHBjaF91ZGNfZXAgKmVwLAorCQkJICAgICAgIHN0cnVjdCBwY2hfdWRjX2NmZ19kYXRhICpjZmcsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICpkZXNjKQoreworCXUzMiB2YWwgPSAwOworCXUzMiBidWZmX3NpemUgPSAwOworCisJcGNoX3VkY19lcF9zZXRfdHJmcl90eXBlKGVwLCBkZXNjLT5ibUF0dHJpYnV0ZXMpOworCWlmIChlcC0+aW4pCisJCWJ1ZmZfc2l6ZSA9IFVEQ19FUElOX0JVRkZfU0laRTsKKwllbHNlCisJCWJ1ZmZfc2l6ZSA9IFVEQ19FUE9VVF9CVUZGX1NJWkU7CisJcGNoX3VkY19lcF9zZXRfYnVmc3ooZXAsIGJ1ZmZfc2l6ZSwgZXAtPmluKTsKKwlwY2hfdWRjX2VwX3NldF9tYXhwa3QoZXAsIGxlMTZfdG9fY3B1KGRlc2MtPndNYXhQYWNrZXRTaXplKSk7CisJcGNoX3VkY19lcF9zZXRfbmFrKGVwKTsKKwlwY2hfdWRjX2VwX2ZpZm9fZmx1c2goZXAsIGVwLT5pbik7CisJLyogQ29uZmlndXJlIHRoZSBlbmRwb2ludCAqLworCXZhbCA9IGVwLT5udW0gPDwgVURDX0NTUl9ORV9OVU1fU0hJRlQgfCBlcC0+aW4gPDwgVURDX0NTUl9ORV9ESVJfU0hJRlQgfAorCSAgICAgICgoZGVzYy0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spIDw8CisJCVVEQ19DU1JfTkVfVFlQRV9TSElGVCkgfAorCSAgICAgIChjZmctPmN1cl9jZmcgPDwgVURDX0NTUl9ORV9DRkdfU0hJRlQpIHwKKwkgICAgICAoY2ZnLT5jdXJfaW50ZiA8PCBVRENfQ1NSX05FX0lOVEZfU0hJRlQpIHwKKwkgICAgICAoY2ZnLT5jdXJfYWx0IDw8IFVEQ19DU1JfTkVfQUxUX1NISUZUKSB8CisJICAgICAgbGUxNl90b19jcHUoZGVzYy0+d01heFBhY2tldFNpemUpIDw8IFVEQ19DU1JfTkVfTUFYX1BLVF9TSElGVDsKKworCWlmIChlcC0+aW4pCisJCXBjaF91ZGNfd3JpdGVfY3NyKGVwLT5kZXYsIHZhbCwgVURDX0VQSU5fSURYKGVwLT5udW0pKTsKKwllbHNlCisJCXBjaF91ZGNfd3JpdGVfY3NyKGVwLT5kZXYsIHZhbCwgVURDX0VQT1VUX0lEWChlcC0+bnVtKSk7Cit9CisKKy8qKgorICogcGNoX3VkY19lcF9kaXNhYmxlKCkgLSBUaGlzIGFwaSBkaXNhYmxlcyBlbmRwb2ludAorICogQHJlZ3M6CVJlZmVyZW5jZSB0byBzdHJ1Y3R1cmUgcGNoX3VkY19lcF9yZWdzCisgKi8KK3N0YXRpYyB2b2lkIHBjaF91ZGNfZXBfZGlzYWJsZShzdHJ1Y3QgcGNoX3VkY19lcCAqZXApCit7CisJaWYgKGVwLT5pbikgeworCQkvKiBmbHVzaCB0aGUgZmlmbyAqLworCQlwY2hfdWRjX2VwX3dyaXRlbChlcCwgVURDX0VQQ1RMX0YsIFVEQ19FUENUTF9BRERSKTsKKwkJLyogc2V0IE5BSyAqLworCQlwY2hfdWRjX2VwX3dyaXRlbChlcCwgVURDX0VQQ1RMX1NOQUssIFVEQ19FUENUTF9BRERSKTsKKwkJcGNoX3VkY19lcF9iaXRfc2V0KGVwLCBVRENfRVBTVFNfQUREUiwgVURDX0VQU1RTX0lOKTsKKwl9IGVsc2UgeworCQkvKiBzZXQgTkFLICovCisJCXBjaF91ZGNfZXBfd3JpdGVsKGVwLCBVRENfRVBDVExfU05BSywgVURDX0VQQ1RMX0FERFIpOworCX0KKwkvKiByZXNldCBkZXNjIHBvaW50ZXIgKi8KKwlwY2hfdWRjX2VwX3dyaXRlbChlcCwgMCwgVURDX0RFU1BUUl9BRERSKTsKK30KKworLyoqCisgKiBwY2hfdWRjX3dhaXRfZXBfc3RhbGwoKSAtIFdhaXQgRVAgc3RhbGwuCisgKiBAZGV2OglSZWZlcmVuY2UgdG8gcGNoX3VkY19kZXYgc3RydWN0dXJlCisgKi8KK3N0YXRpYyB2b2lkIHBjaF91ZGNfd2FpdF9lcF9zdGFsbChzdHJ1Y3QgcGNoX3VkY19lcCAqZXApCit7CisJdW5zaWduZWQgaW50IGNvdW50ID0gMTAwMDA7CisKKwkvKiBXYWl0IHRpbGwgaWRsZSAqLworCXdoaWxlICgocGNoX3VkY19yZWFkX2VwX2NvbnRyb2woZXApICYgVURDX0VQQ1RMX1MpICYmIC0tY291bnQpCisJCXVkZWxheSg1KTsKKwlpZiAoIWNvdW50KQorCQlkZXZfZXJyKCZlcC0+ZGV2LT5wZGV2LT5kZXYsICIlczogd2FpdCBlcnJvclxuIiwgX19mdW5jX18pOworfQorCisvKioKKyAqIHBjaF91ZGNfaW5pdCgpIC0gVGhpcyBBUEkgaW5pdGlhbGl6ZXMgdXNiIGRldmljZSBjb250cm9sbGVyCisgKiBAZGV2OglScmVmZXJlbmNlIHRvIHBjaF91ZGNfcmVncyBzdHJ1Y3R1cmUKKyAqLworc3RhdGljIHZvaWQgcGNoX3VkY19pbml0KHN0cnVjdCBwY2hfdWRjX2RldiAqZGV2KQoreworCWlmIChOVUxMID09IGRldikgeworCQlwcl9lcnIoIiVzOiBJbnZhbGlkIGFkZHJlc3NcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuOworCX0KKwkvKiBTb2Z0IFJlc2V0IGFuZCBSZXNldCBQSFkgKi8KKwlwY2hfdWRjX3dyaXRlbChkZXYsIFVEQ19TUlNULCBVRENfU1JTVF9BRERSKTsKKwlwY2hfdWRjX3dyaXRlbChkZXYsIFVEQ19TUlNUIHwgVURDX1BTUlNULCBVRENfU1JTVF9BRERSKTsKKwltZGVsYXkoMSk7CisJcGNoX3VkY193cml0ZWwoZGV2LCBVRENfU1JTVCwgVURDX1NSU1RfQUREUik7CisJcGNoX3VkY193cml0ZWwoZGV2LCAweDAwLCBVRENfU1JTVF9BRERSKTsKKwltZGVsYXkoMSk7CisJLyogbWFzayBhbmQgY2xlYXIgYWxsIGRldmljZSBpbnRlcnJ1cHRzICovCisJcGNoX3VkY19iaXRfc2V0KGRldiwgVURDX0RFVklSUU1TS19BRERSLCBVRENfREVWSU5UX01TSyk7CisJcGNoX3VkY19iaXRfc2V0KGRldiwgVURDX0RFVklSUVNUU19BRERSLCBVRENfREVWSU5UX01TSyk7CisKKwkvKiBtYXNrIGFuZCBjbGVhciBhbGwgZXAgaW50ZXJydXB0cyAqLworCXBjaF91ZGNfYml0X3NldChkZXYsIFVEQ19FUElSUU1TS19BRERSLCBVRENfRVBJTlRfTVNLX0RJU0FCTEVfQUxMKTsKKwlwY2hfdWRjX2JpdF9zZXQoZGV2LCBVRENfRVBJUlFTVFNfQUREUiwgVURDX0VQSU5UX01TS19ESVNBQkxFX0FMTCk7CisKKwkvKiBlbmFibGUgZHluYW1pYyBDU1IgcHJvZ3JhbW1pbmdpLCBzZWxmIHBvd2VyZWQgYW5kIGRldmljZSBzcGVlZCAqLworCWlmIChzcGVlZF9mcykKKwkJcGNoX3VkY19iaXRfc2V0KGRldiwgVURDX0RFVkNGR19BRERSLCBVRENfREVWQ0ZHX0NTUl9QUkcgfAorCQkJCVVEQ19ERVZDRkdfU1AgfCBVRENfREVWQ0ZHX1NQRF9GUyk7CisJZWxzZSAvKiBkZWZhdWwgaGlnaCBzcGVlZCAqLworCQlwY2hfdWRjX2JpdF9zZXQoZGV2LCBVRENfREVWQ0ZHX0FERFIsIFVEQ19ERVZDRkdfQ1NSX1BSRyB8CisJCQkJVURDX0RFVkNGR19TUCB8IFVEQ19ERVZDRkdfU1BEX0hTKTsKKwlwY2hfdWRjX2JpdF9zZXQoZGV2LCBVRENfREVWQ1RMX0FERFIsCisJCQkoUENIX1VEQ19USExFTiA8PCBVRENfREVWQ1RMX1RITEVOX1NISUZUKSB8CisJCQkoUENIX1VEQ19CUkxFTiA8PCBVRENfREVWQ1RMX0JSTEVOX1NISUZUKSB8CisJCQlVRENfREVWQ1RMX01PREUgfCBVRENfREVWQ1RMX0JSRU4gfAorCQkJVURDX0RFVkNUTF9USEUpOworfQorCisvKioKKyAqIHBjaF91ZGNfZXhpdCgpIC0gVGhpcyBBUEkgZXhpdCB1c2IgZGV2aWNlIGNvbnRyb2xsZXIKKyAqIEBkZXY6CVJlZmVyZW5jZSB0byBwY2hfdWRjX3JlZ3Mgc3RydWN0dXJlCisgKi8KK3N0YXRpYyB2b2lkIHBjaF91ZGNfZXhpdChzdHJ1Y3QgcGNoX3VkY19kZXYgKmRldikKK3sKKwkvKiBtYXNrIGFsbCBkZXZpY2UgaW50ZXJydXB0cyAqLworCXBjaF91ZGNfYml0X3NldChkZXYsIFVEQ19ERVZJUlFNU0tfQUREUiwgVURDX0RFVklOVF9NU0spOworCS8qIG1hc2sgYWxsIGVwIGludGVycnVwdHMgKi8KKwlwY2hfdWRjX2JpdF9zZXQoZGV2LCBVRENfRVBJUlFNU0tfQUREUiwgVURDX0VQSU5UX01TS19ESVNBQkxFX0FMTCk7CisJLyogcHV0IGRldmljZSBpbiBkaXNjb25uZWN0ZWQgc3RhdGUgKi8KKwlwY2hfdWRjX3NldF9kaXNjb25uZWN0KGRldik7Cit9CisKKy8qKgorICogcGNoX3VkY19wY2RfZ2V0X2ZyYW1lKCkgLSBUaGlzIEFQSSBpcyBpbnZva2VkIHRvIGdldCB0aGUgY3VycmVudCBmcmFtZSBudW1iZXIKKyAqIEBnYWRnZXQ6CVJlZmVyZW5jZSB0byB0aGUgZ2FkZ2V0IGRyaXZlcgorICoKKyAqIFJldHVybiBjb2RlczoKKyAqCTA6CQlTdWNjZXNzCisgKgktRUlOVkFMOglJZiB0aGUgZ2FkZ2V0IHBhc3NlZCBpcyBOVUxMCisgKi8KK3N0YXRpYyBpbnQgcGNoX3VkY19wY2RfZ2V0X2ZyYW1lKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpCit7CisJc3RydWN0IHBjaF91ZGNfZGV2CSpkZXY7CisKKwlpZiAoIWdhZGdldCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJZGV2ID0gY29udGFpbmVyX29mKGdhZGdldCwgc3RydWN0IHBjaF91ZGNfZGV2LCBnYWRnZXQpOworCXJldHVybiBwY2hfdWRjX2dldF9mcmFtZShkZXYpOworfQorCisvKioKKyAqIHBjaF91ZGNfcGNkX3dha2V1cCgpIC0gVGhpcyBBUEkgaXMgaW52b2tlZCB0byBpbml0aWF0ZSBhIHJlbW90ZSB3YWtldXAKKyAqIEBnYWRnZXQ6CVJlZmVyZW5jZSB0byB0aGUgZ2FkZ2V0IGRyaXZlcgorICoKKyAqIFJldHVybiBjb2RlczoKKyAqCTA6CQlTdWNjZXNzCisgKgktRUlOVkFMOglJZiB0aGUgZ2FkZ2V0IHBhc3NlZCBpcyBOVUxMCisgKi8KK3N0YXRpYyBpbnQgcGNoX3VkY19wY2Rfd2FrZXVwKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpCit7CisJc3RydWN0IHBjaF91ZGNfZGV2CSpkZXY7CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisKKwlpZiAoIWdhZGdldCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJZGV2ID0gY29udGFpbmVyX29mKGdhZGdldCwgc3RydWN0IHBjaF91ZGNfZGV2LCBnYWRnZXQpOworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmxvY2ssIGZsYWdzKTsKKwlwY2hfdWRjX3JtdF93YWtldXAoZGV2KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBwY2hfdWRjX3BjZF9zZWxmcG93ZXJlZCgpIC0gVGhpcyBBUEkgaXMgaW52b2tlZCB0byBzcGVjaWZ5IHdoZXRoZXIgdGhlIGRldmljZQorICoJCQkJaXMgc2VsZiBwb3dlcmVkIG9yIG5vdAorICogQGdhZGdldDoJUmVmZXJlbmNlIHRvIHRoZSBnYWRnZXQgZHJpdmVyCisgKiBAdmFsdWU6CVNwZWNpZmllcyBzZWxmIHBvd2VyZWQgb3Igbm90CisgKgorICogUmV0dXJuIGNvZGVzOgorICoJMDoJCVN1Y2Nlc3MKKyAqCS1FSU5WQUw6CUlmIHRoZSBnYWRnZXQgcGFzc2VkIGlzIE5VTEwKKyAqLworc3RhdGljIGludCBwY2hfdWRjX3BjZF9zZWxmcG93ZXJlZChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0LCBpbnQgdmFsdWUpCit7CisJc3RydWN0IHBjaF91ZGNfZGV2CSpkZXY7CisKKwlpZiAoIWdhZGdldCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJZGV2ID0gY29udGFpbmVyX29mKGdhZGdldCwgc3RydWN0IHBjaF91ZGNfZGV2LCBnYWRnZXQpOworCWlmICh2YWx1ZSkKKwkJcGNoX3VkY19zZXRfc2VsZnBvd2VyZWQoZGV2KTsKKwllbHNlCisJCXBjaF91ZGNfY2xlYXJfc2VsZnBvd2VyZWQoZGV2KTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBwY2hfdWRjX3BjZF9wdWxsdXAoKSAtIFRoaXMgQVBJIGlzIGludm9rZWQgdG8gbWFrZSB0aGUgZGV2aWNlCisgKgkJCQl2aXNpYmxlL2ludmlzaWJsZSB0byB0aGUgaG9zdAorICogQGdhZGdldDoJUmVmZXJlbmNlIHRvIHRoZSBnYWRnZXQgZHJpdmVyCisgKiBAaXNfb246CVNwZWNpZmllcyB3aGV0aGVyIHRoZSBwdWxsIHVwIGlzIG1hZGUgYWN0aXZlIG9yIGluYWN0aXZlCisgKgorICogUmV0dXJuIGNvZGVzOgorICoJMDoJCVN1Y2Nlc3MKKyAqCS1FSU5WQUw6CUlmIHRoZSBnYWRnZXQgcGFzc2VkIGlzIE5VTEwKKyAqLworc3RhdGljIGludCBwY2hfdWRjX3BjZF9wdWxsdXAoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCwgaW50IGlzX29uKQoreworCXN0cnVjdCBwY2hfdWRjX2RldgkqZGV2OworCisJaWYgKCFnYWRnZXQpCisJCXJldHVybiAtRUlOVkFMOworCWRldiA9IGNvbnRhaW5lcl9vZihnYWRnZXQsIHN0cnVjdCBwY2hfdWRjX2RldiwgZ2FkZ2V0KTsKKwlwY2hfdWRjX3ZidXNfc2Vzc2lvbihkZXYsIGlzX29uKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBwY2hfdWRjX3BjZF92YnVzX3Nlc3Npb24oKSAtIFRoaXMgQVBJIGlzIHVzZWQgYnkgYSBkcml2ZXIgZm9yIGFuIGV4dGVybmFsCisgKgkJCQl0cmFuc2NlaXZlciAob3IgR1BJTykgdGhhdAorICoJCQkJZGV0ZWN0cyBhIFZCVVMgcG93ZXIgc2Vzc2lvbiBzdGFydGluZy9lbmRpbmcKKyAqIEBnYWRnZXQ6CVJlZmVyZW5jZSB0byB0aGUgZ2FkZ2V0IGRyaXZlcgorICogQGlzX2FjdGl2ZToJc3BlY2lmaWVzIHdoZXRoZXIgdGhlIHNlc3Npb24gaXMgc3RhcnRpbmcgb3IgZW5kaW5nCisgKgorICogUmV0dXJuIGNvZGVzOgorICoJMDoJCVN1Y2Nlc3MKKyAqCS1FSU5WQUw6CUlmIHRoZSBnYWRnZXQgcGFzc2VkIGlzIE5VTEwKKyAqLworc3RhdGljIGludCBwY2hfdWRjX3BjZF92YnVzX3Nlc3Npb24oc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCwgaW50IGlzX2FjdGl2ZSkKK3sKKwlzdHJ1Y3QgcGNoX3VkY19kZXYJKmRldjsKKworCWlmICghZ2FkZ2V0KQorCQlyZXR1cm4gLUVJTlZBTDsKKwlkZXYgPSBjb250YWluZXJfb2YoZ2FkZ2V0LCBzdHJ1Y3QgcGNoX3VkY19kZXYsIGdhZGdldCk7CisJcGNoX3VkY192YnVzX3Nlc3Npb24oZGV2LCBpc19hY3RpdmUpOworCXJldHVybiAwOworfQorCisvKioKKyAqIHBjaF91ZGNfcGNkX3ZidXNfZHJhdygpIC0gVGhpcyBBUEkgaXMgdXNlZCBieSBnYWRnZXQgZHJpdmVycyBkdXJpbmcKKyAqCQkJCVNFVF9DT05GSUdVUkFUSU9OIGNhbGxzIHRvCisgKgkJCQlzcGVjaWZ5IGhvdyBtdWNoIHBvd2VyIHRoZSBkZXZpY2UgY2FuIGNvbnN1bWUKKyAqIEBnYWRnZXQ6CVJlZmVyZW5jZSB0byB0aGUgZ2FkZ2V0IGRyaXZlcgorICogQG1BOgkJc3BlY2lmaWVzIHRoZSBjdXJyZW50IGxpbWl0IGluIDJtQSB1bml0CisgKgorICogUmV0dXJuIGNvZGVzOgorICoJLUVJTlZBTDoJSWYgdGhlIGdhZGdldCBwYXNzZWQgaXMgTlVMTAorICoJLUVPUE5PVFNVUFA6CisgKi8KK3N0YXRpYyBpbnQgcGNoX3VkY19wY2RfdmJ1c19kcmF3KHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQsIHVuc2lnbmVkIGludCBtQSkKK3sKKwlyZXR1cm4gLUVPUE5PVFNVUFA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2dhZGdldF9vcHMgcGNoX3VkY19vcHMgPSB7CisJLmdldF9mcmFtZSA9IHBjaF91ZGNfcGNkX2dldF9mcmFtZSwKKwkud2FrZXVwID0gcGNoX3VkY19wY2Rfd2FrZXVwLAorCS5zZXRfc2VsZnBvd2VyZWQgPSBwY2hfdWRjX3BjZF9zZWxmcG93ZXJlZCwKKwkucHVsbHVwID0gcGNoX3VkY19wY2RfcHVsbHVwLAorCS52YnVzX3Nlc3Npb24gPSBwY2hfdWRjX3BjZF92YnVzX3Nlc3Npb24sCisJLnZidXNfZHJhdyA9IHBjaF91ZGNfcGNkX3ZidXNfZHJhdywKK307CisKKy8qKgorICogY29tcGxldGVfcmVxKCkgLSBUaGlzIEFQSSBpcyBpbnZva2VkIGZyb20gdGhlIGRyaXZlciB3aGVuIHByb2Nlc3NpbmcKKyAqCQkJb2YgYSByZXF1ZXN0IGlzIGNvbXBsZXRlCisgKiBAZXA6CQlSZWZlcmVuY2UgdG8gdGhlIGVuZHBvaW50IHN0cnVjdHVyZQorICogQHJlcToJUmVmZXJlbmNlIHRvIHRoZSByZXF1ZXN0IHN0cnVjdHVyZQorICogQHN0YXR1czoJSW5kaWNhdGVzIHRoZSBzdWNjZXNzL2ZhaWx1cmUgb2YgY29tcGxldGlvbgorICovCitzdGF0aWMgdm9pZCBjb21wbGV0ZV9yZXEoc3RydWN0IHBjaF91ZGNfZXAgKmVwLCBzdHJ1Y3QgcGNoX3VkY19yZXF1ZXN0ICpyZXEsCisJCQkJCQkJCSBpbnQgc3RhdHVzKQoreworCXN0cnVjdCBwY2hfdWRjX2RldgkqZGV2OworCXVuc2lnbmVkIGhhbHRlZCA9IGVwLT5oYWx0ZWQ7CisKKwlsaXN0X2RlbF9pbml0KCZyZXEtPnF1ZXVlKTsKKworCS8qIHNldCBuZXcgc3RhdHVzIGlmIHBlbmRpbmcgKi8KKwlpZiAocmVxLT5yZXEuc3RhdHVzID09IC1FSU5QUk9HUkVTUykKKwkJcmVxLT5yZXEuc3RhdHVzID0gc3RhdHVzOworCWVsc2UKKwkJc3RhdHVzID0gcmVxLT5yZXEuc3RhdHVzOworCisJZGV2ID0gZXAtPmRldjsKKwlpZiAocmVxLT5kbWFfbWFwcGVkKSB7CisJCWlmIChlcC0+aW4pCisJCQlwY2lfdW5tYXBfc2luZ2xlKGRldi0+cGRldiwgcmVxLT5yZXEuZG1hLAorCQkJCQkgcmVxLT5yZXEubGVuZ3RoLCBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJZWxzZQorCQkJcGNpX3VubWFwX3NpbmdsZShkZXYtPnBkZXYsIHJlcS0+cmVxLmRtYSwKKwkJCQkJIHJlcS0+cmVxLmxlbmd0aCwgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJcmVxLT5kbWFfbWFwcGVkID0gMDsKKwkJcmVxLT5yZXEuZG1hID0gRE1BX0FERFJfSU5WQUxJRDsKKwl9CisJZXAtPmhhbHRlZCA9IDE7CisJc3Bpbl91bmxvY2soJmRldi0+bG9jayk7CisJaWYgKCFlcC0+aW4pCisJCXBjaF91ZGNfZXBfY2xlYXJfcnJkeShlcCk7CisJcmVxLT5yZXEuY29tcGxldGUoJmVwLT5lcCwgJnJlcS0+cmVxKTsKKwlzcGluX2xvY2soJmRldi0+bG9jayk7CisJZXAtPmhhbHRlZCA9IGhhbHRlZDsKK30KKworLyoqCisgKiBlbXB0eV9yZXFfcXVldWUoKSAtIFRoaXMgQVBJIGVtcHRpZXMgdGhlIHJlcXVlc3QgcXVldWUgb2YgYW4gZW5kcG9pbnQKKyAqIEBlcDoJCVJlZmVyZW5jZSB0byB0aGUgZW5kcG9pbnQgc3RydWN0dXJlCisgKi8KK3N0YXRpYyB2b2lkIGVtcHR5X3JlcV9xdWV1ZShzdHJ1Y3QgcGNoX3VkY19lcCAqZXApCit7CisJc3RydWN0IHBjaF91ZGNfcmVxdWVzdAkqcmVxOworCisJZXAtPmhhbHRlZCA9IDE7CisJd2hpbGUgKCFsaXN0X2VtcHR5KCZlcC0+cXVldWUpKSB7CisJCXJlcSA9IGxpc3RfZW50cnkoZXAtPnF1ZXVlLm5leHQsIHN0cnVjdCBwY2hfdWRjX3JlcXVlc3QsIHF1ZXVlKTsKKwkJY29tcGxldGVfcmVxKGVwLCByZXEsIC1FU0hVVERPV04pOwkvKiBSZW1vdmUgZnJvbSBsaXN0ICovCisJfQorfQorCisvKioKKyAqIHBjaF91ZGNfZnJlZV9kbWFfY2hhaW4oKSAtIFRoaXMgZnVuY3Rpb24gZnJlZXMgdGhlIERNQSBjaGFpbiBjcmVhdGVkCisgKgkJCQlmb3IgdGhlIHJlcXVlc3QKKyAqIEBkZXYJCVJlZmVyZW5jZSB0byB0aGUgZHJpdmVyIHN0cnVjdHVyZQorICogQHJlcQkJUmVmZXJlbmNlIHRvIHRoZSByZXF1ZXN0IHRvIGJlIGZyZWVkCisgKgorICogUmV0dXJuIGNvZGVzOgorICoJMDogU3VjY2VzcworICovCitzdGF0aWMgdm9pZCBwY2hfdWRjX2ZyZWVfZG1hX2NoYWluKHN0cnVjdCBwY2hfdWRjX2RldiAqZGV2LAorCQkJCSAgIHN0cnVjdCBwY2hfdWRjX3JlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3QgcGNoX3VkY19kYXRhX2RtYV9kZXNjICp0ZCA9IHJlcS0+dGRfZGF0YTsKKwl1bnNpZ25lZCBpID0gcmVxLT5jaGFpbl9sZW47CisKKwlmb3IgKDsgaSA+IDE7IC0taSkgeworCQlkbWFfYWRkcl90IGFkZHIgPSAoZG1hX2FkZHJfdCl0ZC0+bmV4dDsKKwkJLyogZG8gbm90IGZyZWUgZmlyc3QgZGVzYy4sIHdpbGwgYmUgZG9uZSBieSBmcmVlIGZvciByZXF1ZXN0ICovCisJCXRkID0gcGh5c190b192aXJ0KGFkZHIpOworCQlwY2lfcG9vbF9mcmVlKGRldi0+ZGF0YV9yZXF1ZXN0cywgdGQsIGFkZHIpOworCX0KK30KKworLyoqCisgKiBwY2hfdWRjX2NyZWF0ZV9kbWFfY2hhaW4oKSAtIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBvciByZWluaXRpYWxpemVzCisgKgkJCQlhIERNQSBjaGFpbgorICogQGVwOgkJUmVmZXJlbmNlIHRvIHRoZSBlbmRwb2ludCBzdHJ1Y3R1cmUKKyAqIEByZXE6CVJlZmVyZW5jZSB0byB0aGUgcmVxdWVzdAorICogQGJ1Zl9sZW46CVRoZSBidWZmZXIgbGVuZ3RoCisgKiBAZ2ZwX2ZsYWdzOglGbGFncyB0byBiZSB1c2VkIHdoaWxlIG1hcHBpbmcgdGhlIGRhdGEgYnVmZmVyCisgKgorICogUmV0dXJuIGNvZGVzOgorICoJMDoJCXN1Y2Nlc3MsCisgKgktRU5PTUVNOglwY2lfcG9vbF9hbGxvYyBpbnZvY2F0aW9uIGZhaWxzCisgKi8KK3N0YXRpYyBpbnQgcGNoX3VkY19jcmVhdGVfZG1hX2NoYWluKHN0cnVjdCBwY2hfdWRjX2VwICplcCwKKwkJCQkgICAgc3RydWN0IHBjaF91ZGNfcmVxdWVzdCAqcmVxLAorCQkJCSAgICB1bnNpZ25lZCBsb25nIGJ1Zl9sZW4sCisJCQkJICAgIGdmcF90IGdmcF9mbGFncykKK3sKKwlzdHJ1Y3QgcGNoX3VkY19kYXRhX2RtYV9kZXNjICp0ZCA9IHJlcS0+dGRfZGF0YSwgKmxhc3Q7CisJdW5zaWduZWQgbG9uZyBieXRlcyA9IHJlcS0+cmVxLmxlbmd0aCwgaSA9IDA7CisJZG1hX2FkZHJfdCBkbWFfYWRkcjsKKwl1bnNpZ25lZCBsZW4gPSAxOworCisJaWYgKHJlcS0+Y2hhaW5fbGVuID4gMSkKKwkJcGNoX3VkY19mcmVlX2RtYV9jaGFpbihlcC0+ZGV2LCByZXEpOworCisJZm9yICg7IDsgYnl0ZXMgLT0gYnVmX2xlbiwgKytsZW4pIHsKKwkJaWYgKGVwLT5pbikKKwkJCXRkLT5zdGF0dXMgPSBQQ0hfVURDX0JTX0hTVF9CU1kgfCBtaW4oYnVmX2xlbiwgYnl0ZXMpOworCQllbHNlCisJCQl0ZC0+c3RhdHVzID0gUENIX1VEQ19CU19IU1RfQlNZOworCisJCWlmIChieXRlcyA8PSBidWZfbGVuKQorCQkJYnJlYWs7CisKKwkJbGFzdCA9IHRkOworCQl0ZCA9IHBjaV9wb29sX2FsbG9jKGVwLT5kZXYtPmRhdGFfcmVxdWVzdHMsIGdmcF9mbGFncywKKwkJCQkgICAgJmRtYV9hZGRyKTsKKwkJaWYgKCF0ZCkKKwkJCWdvdG8gbm9tZW07CisKKwkJaSArPSBidWZfbGVuOworCQl0ZC0+ZGF0YXB0ciA9IHJlcS0+cmVxLmRtYSArIGk7CisJCWxhc3QtPm5leHQgPSBkbWFfYWRkcjsKKwl9CisKKwlyZXEtPnRkX2RhdGFfbGFzdCA9IHRkOworCXRkLT5zdGF0dXMgfD0gUENIX1VEQ19ETUFfTEFTVDsKKwl0ZC0+bmV4dCA9IHJlcS0+dGRfZGF0YV9waHlzOworCXJlcS0+Y2hhaW5fbGVuID0gbGVuOworCXJldHVybiAwOworCitub21lbToKKwlpZiAobGVuID4gMSkgeworCQlyZXEtPmNoYWluX2xlbiA9IGxlbjsKKwkJcGNoX3VkY19mcmVlX2RtYV9jaGFpbihlcC0+ZGV2LCByZXEpOworCX0KKwlyZXEtPmNoYWluX2xlbiA9IDE7CisJcmV0dXJuIC1FTk9NRU07Cit9CisKKy8qKgorICogcHJlcGFyZV9kbWEoKSAtIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhbmQgaW5pdGlhbGl6ZXMgdGhlIERNQSBjaGFpbgorICoJCQlmb3IgdGhlIHJlcXVlc3QKKyAqIEBlcDoJCVJlZmVyZW5jZSB0byB0aGUgZW5kcG9pbnQgc3RydWN0dXJlCisgKiBAcmVxOglSZWZlcmVuY2UgdG8gdGhlIHJlcXVlc3QKKyAqIEBnZnA6CUZsYWcgdG8gYmUgdXNlZCB3aGlsZSBtYXBwaW5nIHRoZSBkYXRhIGJ1ZmZlcgorICoKKyAqIFJldHVybiBjb2RlczoKKyAqCTA6CQlTdWNjZXNzCisgKglPdGhlciAwOglsaW51eCBlcnJvciBudW1iZXIgb24gZmFpbHVyZQorICovCitzdGF0aWMgaW50IHByZXBhcmVfZG1hKHN0cnVjdCBwY2hfdWRjX2VwICplcCwgc3RydWN0IHBjaF91ZGNfcmVxdWVzdCAqcmVxLAorCQkJICBnZnBfdCBnZnApCit7CisJaW50CXJldHZhbDsKKworCXJlcS0+dGRfZGF0YS0+ZGF0YXB0ciA9IHJlcS0+cmVxLmRtYTsKKwlyZXEtPnRkX2RhdGEtPnN0YXR1cyB8PSBQQ0hfVURDX0RNQV9MQVNUOworCS8qIEFsbG9jYXRlIGFuZCBjcmVhdGUgYSBETUEgY2hhaW4gKi8KKwlyZXR2YWwgPSBwY2hfdWRjX2NyZWF0ZV9kbWFfY2hhaW4oZXAsIHJlcSwgZXAtPmVwLm1heHBhY2tldCwgZ2ZwKTsKKwlpZiAocmV0dmFsKSB7CisJCXByX2VycigiJXM6IGNvdWxkIG5vdCBjcmVhdGUgRE1BIGNoYWluOiAlZFxuIiwKKwkJICAgICAgIF9fZnVuY19fLCByZXR2YWwpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKwlpZiAoIWVwLT5pbikKKwkJcmV0dXJuIDA7CisJaWYgKHJlcS0+cmVxLmxlbmd0aCA8PSBlcC0+ZXAubWF4cGFja2V0KQorCQlyZXEtPnRkX2RhdGEtPnN0YXR1cyA9IFBDSF9VRENfRE1BX0xBU1QgfCBQQ0hfVURDX0JTX0hTVF9CU1kgfAorCQkJCSAgICAgICByZXEtPnJlcS5sZW5ndGg7CisJLyogaWYgYnl0ZXMgPCBtYXggcGFja2V0IHRoZW4gdHggYnl0ZXMgbXVzdAorCSAqIGJlIHdyaXR0ZW4gaW4gcGFja2V0IHBlciBidWZmZXIgbW9kZQorCSAqLworCWlmICgocmVxLT5yZXEubGVuZ3RoIDwgZXAtPmVwLm1heHBhY2tldCkgfHwgIWVwLT5udW0pCisJCXJlcS0+dGRfZGF0YS0+c3RhdHVzID0gKHJlcS0+dGRfZGF0YS0+c3RhdHVzICYKKwkJCQkJflBDSF9VRENfUlhUWF9CWVRFUykgfCByZXEtPnJlcS5sZW5ndGg7CisJcmVxLT50ZF9kYXRhLT5zdGF0dXMgPSAocmVxLT50ZF9kYXRhLT5zdGF0dXMgJgorCQkJCX5QQ0hfVURDX0JVRkZfU1RTKSB8IFBDSF9VRENfQlNfSFNUX0JTWTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBwcm9jZXNzX3pscCgpIC0gVGhpcyBmdW5jdGlvbiBwcm9jZXNzIHplcm8gbGVuZ3RoIHBhY2tldHMKKyAqCQkJZnJvbSB0aGUgZ2FkZ2V0IGRyaXZlcgorICogQGVwOgkJUmVmZXJlbmNlIHRvIHRoZSBlbmRwb2ludCBzdHJ1Y3R1cmUKKyAqIEByZXE6CVJlZmVyZW5jZSB0byB0aGUgcmVxdWVzdAorICovCitzdGF0aWMgdm9pZCBwcm9jZXNzX3pscChzdHJ1Y3QgcGNoX3VkY19lcCAqZXAsIHN0cnVjdCBwY2hfdWRjX3JlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3QgcGNoX3VkY19kZXYJKmRldiA9IGVwLT5kZXY7CisKKwkvKiBJTiB6bHAncyBhcmUgaGFuZGxlZCBieSBoYXJkd2FyZSAqLworCWNvbXBsZXRlX3JlcShlcCwgcmVxLCAwKTsKKworCS8qIGlmIHNldF9jb25maWcgb3Igc2V0X2ludGYgaXMgd2FpdGluZyBmb3IgYWNrIGJ5IHpscAorCSAqIHRoZW4gc2V0IENTUl9ET05FCisJICovCisJaWYgKGRldi0+c2V0X2NmZ19ub3RfYWNrZWQpIHsKKwkJcGNoX3VkY19zZXRfY3NyX2RvbmUoZGV2KTsKKwkJZGV2LT5zZXRfY2ZnX25vdF9hY2tlZCA9IDA7CisJfQorCS8qIHNldHVwIGNvbW1hbmQgaXMgQUNLJ2VkIG5vdyBieSB6bHAgKi8KKwlpZiAoIWRldi0+c3RhbGwgJiYgZGV2LT53YWl0aW5nX3pscF9hY2spIHsKKwkJcGNoX3VkY19lcF9jbGVhcl9uYWsoJihkZXYtPmVwW1VEQ19FUDBJTl9JRFhdKSk7CisJCWRldi0+d2FpdGluZ196bHBfYWNrID0gMDsKKwl9Cit9CisKKy8qKgorICogcGNoX3VkY19zdGFydF9yeHJlcXVlc3QoKSAtIFRoaXMgZnVuY3Rpb24gc3RhcnRzIHRoZSByZWNlaXZlIHJlcXVpcmVtZW50LgorICogQGVwOgkJUmVmZXJlbmNlIHRvIHRoZSBlbmRwb2ludCBzdHJ1Y3R1cmUKKyAqIEByZXE6CVJlZmVyZW5jZSB0byB0aGUgcmVxdWVzdCBzdHJ1Y3R1cmUKKyAqLworc3RhdGljIHZvaWQgcGNoX3VkY19zdGFydF9yeHJlcXVlc3Qoc3RydWN0IHBjaF91ZGNfZXAgKmVwLAorCQkJCQkgc3RydWN0IHBjaF91ZGNfcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCBwY2hfdWRjX2RhdGFfZG1hX2Rlc2MgKnRkX2RhdGE7CisKKwlwY2hfdWRjX2NsZWFyX2RtYShlcC0+ZGV2LCBETUFfRElSX1JYKTsKKwl0ZF9kYXRhID0gcmVxLT50ZF9kYXRhOworCWVwLT50ZF9kYXRhID0gcmVxLT50ZF9kYXRhOworCS8qIFNldCB0aGUgc3RhdHVzIGJpdHMgZm9yIGFsbCBkZXNjcmlwdG9ycyAqLworCXdoaWxlICgxKSB7CisJCXRkX2RhdGEtPnN0YXR1cyA9ICh0ZF9kYXRhLT5zdGF0dXMgJiB+UENIX1VEQ19CVUZGX1NUUykgfAorCQkJCSAgICBQQ0hfVURDX0JTX0hTVF9SRFk7CisJCWlmICgodGRfZGF0YS0+c3RhdHVzICYgUENIX1VEQ19ETUFfTEFTVCkgPT0gIFBDSF9VRENfRE1BX0xBU1QpCisJCQlicmVhazsKKwkJdGRfZGF0YSA9IHBoeXNfdG9fdmlydCh0ZF9kYXRhLT5uZXh0KTsKKwl9CisJLyogV3JpdGUgdGhlIGRlc2NyaXB0b3IgcG9pbnRlciAqLworCXBjaF91ZGNfZXBfc2V0X2RkcHRyKGVwLCByZXEtPnRkX2RhdGFfcGh5cyk7CisJcmVxLT5kbWFfZ29pbmcgPSAxOworCXBjaF91ZGNfZW5hYmxlX2VwX2ludGVycnVwdHMoZXAtPmRldiwgVURDX0VQSU5UX09VVF9FUDAgPDwgZXAtPm51bSk7CisJcGNoX3VkY19zZXRfZG1hKGVwLT5kZXYsIERNQV9ESVJfUlgpOworCXBjaF91ZGNfZXBfY2xlYXJfbmFrKGVwKTsKKwlwY2hfdWRjX2VwX3NldF9ycmR5KGVwKTsKK30KKworLyoqCisgKiBwY2hfdWRjX3BjZF9lcF9lbmFibGUoKSAtIFRoaXMgQVBJIGVuYWJsZXMgdGhlIGVuZHBvaW50LiBJdCBpcyBjYWxsZWQKKyAqCQkJCWZyb20gZ2FkZ2V0IGRyaXZlcgorICogQHVzYmVwOglSZWZlcmVuY2UgdG8gdGhlIFVTQiBlbmRwb2ludCBzdHJ1Y3R1cmUKKyAqIEBkZXNjOglSZWZlcmVuY2UgdG8gdGhlIFVTQiBlbmRwb2ludCBkZXNjcmlwdG9yIHN0cnVjdHVyZQorICoKKyAqIFJldHVybiBjb2RlczoKKyAqCTA6CQlTdWNjZXNzCisgKgktRUlOVkFMOgorICoJLUVTSFVURE9XTjoKKyAqLworc3RhdGljIGludCBwY2hfdWRjX3BjZF9lcF9lbmFibGUoc3RydWN0IHVzYl9lcCAqdXNiZXAsCisJCQkJICAgIGNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZGVzYykKK3sKKwlzdHJ1Y3QgcGNoX3VkY19lcAkqZXA7CisJc3RydWN0IHBjaF91ZGNfZGV2CSpkZXY7CisJdW5zaWduZWQgbG9uZwkJaWZsYWdzOworCisJaWYgKCF1c2JlcCB8fCAodXNiZXAtPm5hbWUgPT0gZXAwX3N0cmluZykgfHwgIWRlc2MgfHwKKwkgICAgKGRlc2MtPmJEZXNjcmlwdG9yVHlwZSAhPSBVU0JfRFRfRU5EUE9JTlQpIHx8ICFkZXNjLT53TWF4UGFja2V0U2l6ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwllcCA9IGNvbnRhaW5lcl9vZih1c2JlcCwgc3RydWN0IHBjaF91ZGNfZXAsIGVwKTsKKwlkZXYgPSBlcC0+ZGV2OworCWlmICghZGV2LT5kcml2ZXIgfHwgKGRldi0+Z2FkZ2V0LnNwZWVkID09IFVTQl9TUEVFRF9VTktOT1dOKSkKKwkJcmV0dXJuIC1FU0hVVERPV047CisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+bG9jaywgaWZsYWdzKTsKKwllcC0+ZGVzYyA9IGRlc2M7CisJZXAtPmhhbHRlZCA9IDA7CisJcGNoX3VkY19lcF9lbmFibGUoZXAsICZlcC0+ZGV2LT5jZmdfZGF0YSwgZGVzYyk7CisJZXAtPmVwLm1heHBhY2tldCA9IGxlMTZfdG9fY3B1KGRlc2MtPndNYXhQYWNrZXRTaXplKTsKKwlwY2hfdWRjX2VuYWJsZV9lcF9pbnRlcnJ1cHRzKGVwLT5kZXYsIFBDSF9VRENfRVBJTlQoZXAtPmluLCBlcC0+bnVtKSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5sb2NrLCBpZmxhZ3MpOworCXJldHVybiAwOworfQorCisvKioKKyAqIHBjaF91ZGNfcGNkX2VwX2Rpc2FibGUoKSAtIFRoaXMgQVBJIGRpc2FibGVzIGVuZHBvaW50IGFuZCBpcyBjYWxsZWQKKyAqCQkJCWZyb20gZ2FkZ2V0IGRyaXZlcgorICogQHVzYmVwCVJlZmVyZW5jZSB0byB0aGUgVVNCIGVuZHBvaW50IHN0cnVjdHVyZQorICoKKyAqIFJldHVybiBjb2RlczoKKyAqCTA6CQlTdWNjZXNzCisgKgktRUlOVkFMOgorICovCitzdGF0aWMgaW50IHBjaF91ZGNfcGNkX2VwX2Rpc2FibGUoc3RydWN0IHVzYl9lcCAqdXNiZXApCit7CisJc3RydWN0IHBjaF91ZGNfZXAJKmVwOworCXN0cnVjdCBwY2hfdWRjX2RldgkqZGV2OworCXVuc2lnbmVkIGxvbmcJaWZsYWdzOworCisJaWYgKCF1c2JlcCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwllcCA9IGNvbnRhaW5lcl9vZih1c2JlcCwgc3RydWN0IHBjaF91ZGNfZXAsIGVwKTsKKwlkZXYgPSBlcC0+ZGV2OworCWlmICgodXNiZXAtPm5hbWUgPT0gZXAwX3N0cmluZykgfHwgIWVwLT5kZXNjKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZlcC0+ZGV2LT5sb2NrLCBpZmxhZ3MpOworCWVtcHR5X3JlcV9xdWV1ZShlcCk7CisJZXAtPmhhbHRlZCA9IDE7CisJcGNoX3VkY19lcF9kaXNhYmxlKGVwKTsKKwlwY2hfdWRjX2Rpc2FibGVfZXBfaW50ZXJydXB0cyhlcC0+ZGV2LCBQQ0hfVURDX0VQSU5UKGVwLT5pbiwgZXAtPm51bSkpOworCWVwLT5kZXNjID0gTlVMTDsKKwlJTklUX0xJU1RfSEVBRCgmZXAtPnF1ZXVlKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlcC0+ZGV2LT5sb2NrLCBpZmxhZ3MpOworCXJldHVybiAwOworfQorCisvKioKKyAqIHBjaF91ZGNfYWxsb2NfcmVxdWVzdCgpIC0gVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgcmVxdWVzdCBzdHJ1Y3R1cmUuCisgKgkJCQlJdCBpcyBjYWxsZWQgYnkgZ2FkZ2V0IGRyaXZlcgorICogQHVzYmVwOglSZWZlcmVuY2UgdG8gdGhlIFVTQiBlbmRwb2ludCBzdHJ1Y3R1cmUKKyAqIEBnZnA6CUZsYWcgdG8gYmUgdXNlZCB3aGlsZSBhbGxvY2F0aW5nIG1lbW9yeQorICoKKyAqIFJldHVybiBjb2RlczoKKyAqCU5VTEw6CQkJRmFpbHVyZQorICoJQWxsb2NhdGVkIGFkZHJlc3M6CVN1Y2Nlc3MKKyAqLworc3RhdGljIHN0cnVjdCB1c2JfcmVxdWVzdCAqcGNoX3VkY19hbGxvY19yZXF1ZXN0KHN0cnVjdCB1c2JfZXAgKnVzYmVwLAorCQkJCQkJICBnZnBfdCBnZnApCit7CisJc3RydWN0IHBjaF91ZGNfcmVxdWVzdAkJKnJlcTsKKwlzdHJ1Y3QgcGNoX3VkY19lcAkJKmVwOworCXN0cnVjdCBwY2hfdWRjX2RhdGFfZG1hX2Rlc2MJKmRtYV9kZXNjOworCXN0cnVjdCBwY2hfdWRjX2RldgkJKmRldjsKKworCWlmICghdXNiZXApCisJCXJldHVybiBOVUxMOworCWVwID0gY29udGFpbmVyX29mKHVzYmVwLCBzdHJ1Y3QgcGNoX3VkY19lcCwgZXApOworCWRldiA9IGVwLT5kZXY7CisJcmVxID0ga3phbGxvYyhzaXplb2YgKnJlcSwgZ2ZwKTsKKwlpZiAoIXJlcSkKKwkJcmV0dXJuIE5VTEw7CisJcmVxLT5yZXEuZG1hID0gRE1BX0FERFJfSU5WQUxJRDsKKwlJTklUX0xJU1RfSEVBRCgmcmVxLT5xdWV1ZSk7CisJaWYgKCFlcC0+ZGV2LT5kbWFfYWRkcikKKwkJcmV0dXJuICZyZXEtPnJlcTsKKwkvKiBlcDAgaW4gcmVxdWVzdHMgYXJlIGFsbG9jYXRlZCBmcm9tIGRhdGEgcG9vbCBoZXJlICovCisJZG1hX2Rlc2MgPSBwY2lfcG9vbF9hbGxvYyhlcC0+ZGV2LT5kYXRhX3JlcXVlc3RzLCBnZnAsCisJCQkJICAmcmVxLT50ZF9kYXRhX3BoeXMpOworCWlmIChOVUxMID09IGRtYV9kZXNjKSB7CisJCWtmcmVlKHJlcSk7CisJCXJldHVybiBOVUxMOworCX0KKwkvKiBwcmV2ZW50IGZyb20gdXNpbmcgZGVzYy4gLSBzZXQgSE9TVCBCVVNZICovCisJZG1hX2Rlc2MtPnN0YXR1cyB8PSBQQ0hfVURDX0JTX0hTVF9CU1k7CisJZG1hX2Rlc2MtPmRhdGFwdHIgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyKERNQV9BRERSX0lOVkFMSUQpOworCXJlcS0+dGRfZGF0YSA9IGRtYV9kZXNjOworCXJlcS0+dGRfZGF0YV9sYXN0ID0gZG1hX2Rlc2M7CisJcmVxLT5jaGFpbl9sZW4gPSAxOworCXJldHVybiAmcmVxLT5yZXE7Cit9CisKKy8qKgorICogcGNoX3VkY19mcmVlX3JlcXVlc3QoKSAtIFRoaXMgZnVuY3Rpb24gZnJlZXMgcmVxdWVzdCBzdHJ1Y3R1cmUuCisgKgkJCQlJdCBpcyBjYWxsZWQgYnkgZ2FkZ2V0IGRyaXZlcgorICogQHVzYmVwOglSZWZlcmVuY2UgdG8gdGhlIFVTQiBlbmRwb2ludCBzdHJ1Y3R1cmUKKyAqIEB1c2JyZXE6CVJlZmVyZW5jZSB0byB0aGUgVVNCIHJlcXVlc3QKKyAqLworc3RhdGljIHZvaWQgcGNoX3VkY19mcmVlX3JlcXVlc3Qoc3RydWN0IHVzYl9lcCAqdXNiZXAsCisJCQkJICBzdHJ1Y3QgdXNiX3JlcXVlc3QgKnVzYnJlcSkKK3sKKwlzdHJ1Y3QgcGNoX3VkY19lcAkqZXA7CisJc3RydWN0IHBjaF91ZGNfcmVxdWVzdAkqcmVxOworCXN0cnVjdCBwY2hfdWRjX2RldgkqZGV2OworCisJaWYgKCF1c2JlcCB8fCAhdXNicmVxKQorCQlyZXR1cm47CisJZXAgPSBjb250YWluZXJfb2YodXNiZXAsIHN0cnVjdCBwY2hfdWRjX2VwLCBlcCk7CisJcmVxID0gY29udGFpbmVyX29mKHVzYnJlcSwgc3RydWN0IHBjaF91ZGNfcmVxdWVzdCwgcmVxKTsKKwlkZXYgPSBlcC0+ZGV2OworCWlmICghbGlzdF9lbXB0eSgmcmVxLT5xdWV1ZSkpCisJCWRldl9lcnIoJmRldi0+cGRldi0+ZGV2LCAiJXM6ICVzIHJlcT0weCVwIHF1ZXVlIG5vdCBlbXB0eVxuIiwKKwkJCV9fZnVuY19fLCB1c2JlcC0+bmFtZSwgcmVxKTsKKwlpZiAocmVxLT50ZF9kYXRhICE9IE5VTEwpIHsKKwkJaWYgKHJlcS0+Y2hhaW5fbGVuID4gMSkKKwkJCXBjaF91ZGNfZnJlZV9kbWFfY2hhaW4oZXAtPmRldiwgcmVxKTsKKwkJcGNpX3Bvb2xfZnJlZShlcC0+ZGV2LT5kYXRhX3JlcXVlc3RzLCByZXEtPnRkX2RhdGEsCisJCQkgICAgICByZXEtPnRkX2RhdGFfcGh5cyk7CisJfQorCWtmcmVlKHJlcSk7Cit9CisKKy8qKgorICogcGNoX3VkY19wY2RfcXVldWUoKSAtIFRoaXMgZnVuY3Rpb24gcXVldWVzIGEgcmVxdWVzdCBwYWNrZXQuIEl0IGlzIGNhbGxlZAorICoJCQlieSBnYWRnZXQgZHJpdmVyCisgKiBAdXNiZXA6CVJlZmVyZW5jZSB0byB0aGUgVVNCIGVuZHBvaW50IHN0cnVjdHVyZQorICogQHVzYnJlcToJUmVmZXJlbmNlIHRvIHRoZSBVU0IgcmVxdWVzdAorICogQGdmcDoJRmxhZyB0byBiZSB1c2VkIHdoaWxlIG1hcHBpbmcgdGhlIGRhdGEgYnVmZmVyCisgKgorICogUmV0dXJuIGNvZGVzOgorICoJMDoJCQlTdWNjZXNzCisgKglsaW51eCBlcnJvciBudW1iZXI6CUZhaWx1cmUKKyAqLworc3RhdGljIGludCBwY2hfdWRjX3BjZF9xdWV1ZShzdHJ1Y3QgdXNiX2VwICp1c2JlcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICp1c2JyZXEsCisJCQkJCQkJCSBnZnBfdCBnZnApCit7CisJaW50IHJldHZhbCA9IDA7CisJc3RydWN0IHBjaF91ZGNfZXAJKmVwOworCXN0cnVjdCBwY2hfdWRjX2RldgkqZGV2OworCXN0cnVjdCBwY2hfdWRjX3JlcXVlc3QJKnJlcTsKKwl1bnNpZ25lZCBsb25nCWlmbGFnczsKKworCWlmICghdXNiZXAgfHwgIXVzYnJlcSB8fCAhdXNicmVxLT5jb21wbGV0ZSB8fCAhdXNicmVxLT5idWYpCisJCXJldHVybiAtRUlOVkFMOworCWVwID0gY29udGFpbmVyX29mKHVzYmVwLCBzdHJ1Y3QgcGNoX3VkY19lcCwgZXApOworCWRldiA9IGVwLT5kZXY7CisJaWYgKCFlcC0+ZGVzYyAmJiBlcC0+bnVtKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXEgPSBjb250YWluZXJfb2YodXNicmVxLCBzdHJ1Y3QgcGNoX3VkY19yZXF1ZXN0LCByZXEpOworCWlmICghbGlzdF9lbXB0eSgmcmVxLT5xdWV1ZSkpCisJCXJldHVybiAtRUlOVkFMOworCWlmICghZGV2LT5kcml2ZXIgfHwgKGRldi0+Z2FkZ2V0LnNwZWVkID09IFVTQl9TUEVFRF9VTktOT1dOKSkKKwkJcmV0dXJuIC1FU0hVVERPV047CisJc3Bpbl9sb2NrX2lycXNhdmUoJmVwLT5kZXYtPmxvY2ssIGlmbGFncyk7CisJLyogbWFwIHRoZSBidWZmZXIgZm9yIGRtYSAqLworCWlmICh1c2JyZXEtPmxlbmd0aCAmJgorCSAgICAoKHVzYnJlcS0+ZG1hID09IERNQV9BRERSX0lOVkFMSUQpIHx8ICF1c2JyZXEtPmRtYSkpIHsKKwkJaWYgKGVwLT5pbikKKwkJCXVzYnJlcS0+ZG1hID0gcGNpX21hcF9zaW5nbGUoZGV2LT5wZGV2LCB1c2JyZXEtPmJ1ZiwKKwkJCQkJdXNicmVxLT5sZW5ndGgsIFBDSV9ETUFfVE9ERVZJQ0UpOworCQllbHNlCisJCQl1c2JyZXEtPmRtYSA9IHBjaV9tYXBfc2luZ2xlKGRldi0+cGRldiwgdXNicmVxLT5idWYsCisJCQkJCXVzYnJlcS0+bGVuZ3RoLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQlyZXEtPmRtYV9tYXBwZWQgPSAxOworCX0KKwlpZiAodXNicmVxLT5sZW5ndGggPiAwKSB7CisJCXJldHZhbCA9IHByZXBhcmVfZG1hKGVwLCByZXEsIGdmcCk7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIHByb2JlX2VuZDsKKwl9CisJdXNicmVxLT5hY3R1YWwgPSAwOworCXVzYnJlcS0+c3RhdHVzID0gLUVJTlBST0dSRVNTOworCXJlcS0+ZG1hX2RvbmUgPSAwOworCWlmIChsaXN0X2VtcHR5KCZlcC0+cXVldWUpICYmICFlcC0+aGFsdGVkKSB7CisJCS8qIG5vIHBlbmRpbmcgdHJhbnNmZXIsIHNvIHN0YXJ0IHRoaXMgcmVxICovCisJCWlmICghdXNicmVxLT5sZW5ndGgpIHsKKwkJCXByb2Nlc3NfemxwKGVwLCByZXEpOworCQkJcmV0dmFsID0gMDsKKwkJCWdvdG8gcHJvYmVfZW5kOworCQl9CisJCWlmICghZXAtPmluKSB7CisJCQlwY2hfdWRjX3N0YXJ0X3J4cmVxdWVzdChlcCwgcmVxKTsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkqIEZvciBJTiB0cmZyIHRoZSBkZXNjcmlwdG9ycyB3aWxsIGJlIHByb2dyYW1tZWQgYW5kCisJCQkqIFAgYml0IHdpbGwgYmUgc2V0IHdoZW4KKwkJCSogd2UgZ2V0IGFuIElOIHRva2VuCisJCQkqLworCQkJcGNoX3VkY193YWl0X2VwX3N0YWxsKGVwKTsKKwkJCXBjaF91ZGNfZXBfY2xlYXJfbmFrKGVwKTsKKwkJCXBjaF91ZGNfZW5hYmxlX2VwX2ludGVycnVwdHMoZXAtPmRldiwgKDEgPDwgZXAtPm51bSkpOworCQkJcGNoX3VkY19zZXRfZG1hKGRldiwgRE1BX0RJUl9UWCk7CisJCX0KKwl9CisJLyogTm93IGFkZCB0aGlzIHJlcXVlc3QgdG8gdGhlIGVwJ3MgcGVuZGluZyByZXF1ZXN0cyAqLworCWlmIChyZXEgIT0gTlVMTCkKKwkJbGlzdF9hZGRfdGFpbCgmcmVxLT5xdWV1ZSwgJmVwLT5xdWV1ZSk7CisKK3Byb2JlX2VuZDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmxvY2ssIGlmbGFncyk7CisJcmV0dXJuIHJldHZhbDsKK30KKworLyoqCisgKiBwY2hfdWRjX3BjZF9kZXF1ZXVlKCkgLSBUaGlzIGZ1bmN0aW9uIGRlLXF1ZXVlcyBhIHJlcXVlc3QgcGFja2V0LgorICoJCQkJSXQgaXMgY2FsbGVkIGJ5IGdhZGdldCBkcml2ZXIKKyAqIEB1c2JlcDoJUmVmZXJlbmNlIHRvIHRoZSBVU0IgZW5kcG9pbnQgc3RydWN0dXJlCisgKiBAdXNicmVxOglSZWZlcmVuY2UgdG8gdGhlIFVTQiByZXF1ZXN0CisgKgorICogUmV0dXJuIGNvZGVzOgorICoJMDoJCQlTdWNjZXNzCisgKglsaW51eCBlcnJvciBudW1iZXI6CUZhaWx1cmUKKyAqLworc3RhdGljIGludCBwY2hfdWRjX3BjZF9kZXF1ZXVlKHN0cnVjdCB1c2JfZXAgKnVzYmVwLAorCQkJCXN0cnVjdCB1c2JfcmVxdWVzdCAqdXNicmVxKQoreworCXN0cnVjdCBwY2hfdWRjX2VwCSplcDsKKwlzdHJ1Y3QgcGNoX3VkY19yZXF1ZXN0CSpyZXE7CisJc3RydWN0IHBjaF91ZGNfZGV2CSpkZXY7CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisJaW50IHJldCA9IC1FSU5WQUw7CisKKwllcCA9IGNvbnRhaW5lcl9vZih1c2JlcCwgc3RydWN0IHBjaF91ZGNfZXAsIGVwKTsKKwlkZXYgPSBlcC0+ZGV2OworCWlmICghdXNiZXAgfHwgIXVzYnJlcSB8fCAoIWVwLT5kZXNjICYmIGVwLT5udW0pKQorCQlyZXR1cm4gcmV0OworCXJlcSA9IGNvbnRhaW5lcl9vZih1c2JyZXEsIHN0cnVjdCBwY2hfdWRjX3JlcXVlc3QsIHJlcSk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmVwLT5kZXYtPmxvY2ssIGZsYWdzKTsKKwkvKiBtYWtlIHN1cmUgaXQncyBzdGlsbCBxdWV1ZWQgb24gdGhpcyBlbmRwb2ludCAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkocmVxLCAmZXAtPnF1ZXVlLCBxdWV1ZSkgeworCQlpZiAoJnJlcS0+cmVxID09IHVzYnJlcSkgeworCQkJcGNoX3VkY19lcF9zZXRfbmFrKGVwKTsKKwkJCWlmICghbGlzdF9lbXB0eSgmcmVxLT5xdWV1ZSkpCisJCQkJY29tcGxldGVfcmVxKGVwLCByZXEsIC1FQ09OTlJFU0VUKTsKKwkJCXJldCA9IDA7CisJCQlicmVhazsKKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlcC0+ZGV2LT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBwY2hfdWRjX3BjZF9zZXRfaGFsdCgpIC0gVGhpcyBmdW5jdGlvbiBTZXRzIG9yIGNsZWFyIHRoZSBlbmRwb2ludCBoYWx0CisgKgkJCSAgICBmZWF0dXJlCisgKiBAdXNiZXA6CVJlZmVyZW5jZSB0byB0aGUgVVNCIGVuZHBvaW50IHN0cnVjdHVyZQorICogQGhhbHQ6CVNwZWNpZmllcyB3aGV0aGVyIHRvIHNldCBvciBjbGVhciB0aGUgZmVhdHVyZQorICoKKyAqIFJldHVybiBjb2RlczoKKyAqCTA6CQkJU3VjY2VzcworICoJbGludXggZXJyb3IgbnVtYmVyOglGYWlsdXJlCisgKi8KK3N0YXRpYyBpbnQgcGNoX3VkY19wY2Rfc2V0X2hhbHQoc3RydWN0IHVzYl9lcCAqdXNiZXAsIGludCBoYWx0KQoreworCXN0cnVjdCBwY2hfdWRjX2VwCSplcDsKKwlzdHJ1Y3QgcGNoX3VkY19kZXYJKmRldjsKKwl1bnNpZ25lZCBsb25nIGlmbGFnczsKKwlpbnQgcmV0OworCisJaWYgKCF1c2JlcCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJZXAgPSBjb250YWluZXJfb2YodXNiZXAsIHN0cnVjdCBwY2hfdWRjX2VwLCBlcCk7CisJZGV2ID0gZXAtPmRldjsKKwlpZiAoIWVwLT5kZXNjICYmICFlcC0+bnVtKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIWVwLT5kZXYtPmRyaXZlciB8fCAoZXAtPmRldi0+Z2FkZ2V0LnNwZWVkID09IFVTQl9TUEVFRF9VTktOT1dOKSkKKwkJcmV0dXJuIC1FU0hVVERPV047CisJc3Bpbl9sb2NrX2lycXNhdmUoJnVkY19zdGFsbF9zcGlubG9jaywgaWZsYWdzKTsKKwlpZiAobGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSkgeworCQlpZiAoaGFsdCkgeworCQkJaWYgKGVwLT5udW0gPT0gUENIX1VEQ19FUDApCisJCQkJZXAtPmRldi0+c3RhbGwgPSAxOworCQkJcGNoX3VkY19lcF9zZXRfc3RhbGwoZXApOworCQkJcGNoX3VkY19lbmFibGVfZXBfaW50ZXJydXB0cyhlcC0+ZGV2LAorCQkJCQkJICAgICBQQ0hfVURDX0VQSU5UKGVwLT5pbiwKKwkJCQkJCQkJICAgZXAtPm51bSkpOworCQl9IGVsc2UgeworCQkJcGNoX3VkY19lcF9jbGVhcl9zdGFsbChlcCk7CisJCX0KKwkJcmV0ID0gMDsKKwl9IGVsc2UgeworCQlyZXQgPSAtRUFHQUlOOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1ZGNfc3RhbGxfc3BpbmxvY2ssIGlmbGFncyk7CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBwY2hfdWRjX3BjZF9zZXRfd2VkZ2UoKSAtIFRoaXMgZnVuY3Rpb24gU2V0cyBvciBjbGVhciB0aGUgZW5kcG9pbnQKKyAqCQkJCWhhbHQgZmVhdHVyZQorICogQHVzYmVwOglSZWZlcmVuY2UgdG8gdGhlIFVTQiBlbmRwb2ludCBzdHJ1Y3R1cmUKKyAqIEBoYWx0OglTcGVjaWZpZXMgd2hldGhlciB0byBzZXQgb3IgY2xlYXIgdGhlIGZlYXR1cmUKKyAqCisgKiBSZXR1cm4gY29kZXM6CisgKgkwOgkJCVN1Y2Nlc3MKKyAqCWxpbnV4IGVycm9yIG51bWJlcjoJRmFpbHVyZQorICovCitzdGF0aWMgaW50IHBjaF91ZGNfcGNkX3NldF93ZWRnZShzdHJ1Y3QgdXNiX2VwICp1c2JlcCkKK3sKKwlzdHJ1Y3QgcGNoX3VkY19lcAkqZXA7CisJc3RydWN0IHBjaF91ZGNfZGV2CSpkZXY7CisJdW5zaWduZWQgbG9uZyBpZmxhZ3M7CisJaW50IHJldDsKKworCWlmICghdXNiZXApCisJCXJldHVybiAtRUlOVkFMOworCWVwID0gY29udGFpbmVyX29mKHVzYmVwLCBzdHJ1Y3QgcGNoX3VkY19lcCwgZXApOworCWRldiA9IGVwLT5kZXY7CisJaWYgKCFlcC0+ZGVzYyAmJiAhZXAtPm51bSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFlcC0+ZGV2LT5kcml2ZXIgfHwgKGVwLT5kZXYtPmdhZGdldC5zcGVlZCA9PSBVU0JfU1BFRURfVU5LTk9XTikpCisJCXJldHVybiAtRVNIVVRET1dOOworCXNwaW5fbG9ja19pcnFzYXZlKCZ1ZGNfc3RhbGxfc3BpbmxvY2ssIGlmbGFncyk7CisJaWYgKCFsaXN0X2VtcHR5KCZlcC0+cXVldWUpKSB7CisJCXJldCA9IC1FQUdBSU47CisJfSBlbHNlIHsKKwkJaWYgKGVwLT5udW0gPT0gUENIX1VEQ19FUDApCisJCQllcC0+ZGV2LT5zdGFsbCA9IDE7CisJCXBjaF91ZGNfZXBfc2V0X3N0YWxsKGVwKTsKKwkJcGNoX3VkY19lbmFibGVfZXBfaW50ZXJydXB0cyhlcC0+ZGV2LAorCQkJCQkgICAgIFBDSF9VRENfRVBJTlQoZXAtPmluLCBlcC0+bnVtKSk7CisJCWVwLT5kZXYtPnByb3Rfc3RhbGwgPSAxOworCQlyZXQgPSAwOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1ZGNfc3RhbGxfc3BpbmxvY2ssIGlmbGFncyk7CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBwY2hfdWRjX3BjZF9maWZvX2ZsdXNoKCkgLSBUaGlzIGZ1bmN0aW9uIEZsdXNoIHRoZSBGSUZPIG9mIHNwZWNpZmllZCBlbmRwb2ludAorICogQHVzYmVwOglSZWZlcmVuY2UgdG8gdGhlIFVTQiBlbmRwb2ludCBzdHJ1Y3R1cmUKKyAqLworc3RhdGljIHZvaWQgcGNoX3VkY19wY2RfZmlmb19mbHVzaChzdHJ1Y3QgdXNiX2VwICp1c2JlcCkKK3sKKwlzdHJ1Y3QgcGNoX3VkY19lcCAgKmVwOworCisJaWYgKCF1c2JlcCkKKwkJcmV0dXJuOworCisJZXAgPSBjb250YWluZXJfb2YodXNiZXAsIHN0cnVjdCBwY2hfdWRjX2VwLCBlcCk7CisJaWYgKGVwLT5kZXNjIHx8ICFlcC0+bnVtKQorCQlwY2hfdWRjX2VwX2ZpZm9fZmx1c2goZXAsIGVwLT5pbik7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2VwX29wcyBwY2hfdWRjX2VwX29wcyA9IHsKKwkuZW5hYmxlCQk9IHBjaF91ZGNfcGNkX2VwX2VuYWJsZSwKKwkuZGlzYWJsZQk9IHBjaF91ZGNfcGNkX2VwX2Rpc2FibGUsCisJLmFsbG9jX3JlcXVlc3QJPSBwY2hfdWRjX2FsbG9jX3JlcXVlc3QsCisJLmZyZWVfcmVxdWVzdAk9IHBjaF91ZGNfZnJlZV9yZXF1ZXN0LAorCS5xdWV1ZQkJPSBwY2hfdWRjX3BjZF9xdWV1ZSwKKwkuZGVxdWV1ZQk9IHBjaF91ZGNfcGNkX2RlcXVldWUsCisJLnNldF9oYWx0CT0gcGNoX3VkY19wY2Rfc2V0X2hhbHQsCisJLnNldF93ZWRnZQk9IHBjaF91ZGNfcGNkX3NldF93ZWRnZSwKKwkuZmlmb19zdGF0dXMJPSBOVUxMLAorCS5maWZvX2ZsdXNoCT0gcGNoX3VkY19wY2RfZmlmb19mbHVzaCwKK307CisKKy8qKgorICogcGNoX3VkY19pbml0X3NldHVwX2J1ZmYoKSAtIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIFNFVFVQIGJ1ZmZlcgorICogQHRkX3N0cDoJUmVmZXJlbmNlIHRvIHRoZSBTRVRQIGJ1ZmZlciBzdHJ1Y3R1cmUKKyAqLworc3RhdGljIHZvaWQgcGNoX3VkY19pbml0X3NldHVwX2J1ZmYoc3RydWN0IHBjaF91ZGNfc3RwX2RtYV9kZXNjICp0ZF9zdHApCit7CisJc3RhdGljIHUzMglwa3lfbWFya2VyOworCisJaWYgKCF0ZF9zdHApCisJCXJldHVybjsKKwl0ZF9zdHAtPnJlc2VydmVkID0gKytwa3lfbWFya2VyOworCW1lbXNldCgmdGRfc3RwLT5yZXF1ZXN0LCAweEZGLCBzaXplb2YgdGRfc3RwLT5yZXF1ZXN0KTsKKwl0ZF9zdHAtPnN0YXR1cyA9IFBDSF9VRENfQlNfSFNUX1JEWTsKK30KKworLyoqCisgKiBwY2hfdWRjX3N0YXJ0X25leHRfdHhyZXF1ZXN0KCkgLSBUaGlzIGZ1bmN0aW9uIHN0YXJ0cworICoJCQkJCXRoZSBuZXh0IHRyYW5zbWlzc2lvbiByZXF1aXJlbWVudAorICogQGVwOglSZWZlcmVuY2UgdG8gdGhlIGVuZHBvaW50IHN0cnVjdHVyZQorICovCitzdGF0aWMgdm9pZCBwY2hfdWRjX3N0YXJ0X25leHRfdHhyZXF1ZXN0KHN0cnVjdCBwY2hfdWRjX2VwICplcCkKK3sKKwlzdHJ1Y3QgcGNoX3VkY19yZXF1ZXN0ICpyZXE7CisJc3RydWN0IHBjaF91ZGNfZGF0YV9kbWFfZGVzYyAqdGRfZGF0YTsKKworCWlmIChwY2hfdWRjX3JlYWRfZXBfY29udHJvbChlcCkgJiBVRENfRVBDVExfUCkKKwkJcmV0dXJuOworCisJaWYgKGxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpCisJCXJldHVybjsKKworCS8qIG5leHQgcmVxdWVzdCAqLworCXJlcSA9IGxpc3RfZW50cnkoZXAtPnF1ZXVlLm5leHQsIHN0cnVjdCBwY2hfdWRjX3JlcXVlc3QsIHF1ZXVlKTsKKwlpZiAocmVxLT5kbWFfZ29pbmcpCisJCXJldHVybjsKKwlpZiAoIXJlcS0+dGRfZGF0YSkKKwkJcmV0dXJuOworCXBjaF91ZGNfd2FpdF9lcF9zdGFsbChlcCk7CisJcmVxLT5kbWFfZ29pbmcgPSAxOworCXBjaF91ZGNfZXBfc2V0X2RkcHRyKGVwLCAwKTsKKwl0ZF9kYXRhID0gcmVxLT50ZF9kYXRhOworCXdoaWxlICgxKSB7CisJCXRkX2RhdGEtPnN0YXR1cyA9ICh0ZF9kYXRhLT5zdGF0dXMgJiB+UENIX1VEQ19CVUZGX1NUUykgfAorCQkJCSAgIFBDSF9VRENfQlNfSFNUX1JEWTsKKwkJaWYgKCh0ZF9kYXRhLT5zdGF0dXMgJiBQQ0hfVURDX0RNQV9MQVNUKSA9PSBQQ0hfVURDX0RNQV9MQVNUKQorCQkJYnJlYWs7CisJCXRkX2RhdGEgPSBwaHlzX3RvX3ZpcnQodGRfZGF0YS0+bmV4dCk7CisJfQorCXBjaF91ZGNfZXBfc2V0X2RkcHRyKGVwLCByZXEtPnRkX2RhdGFfcGh5cyk7CisJcGNoX3VkY19zZXRfZG1hKGVwLT5kZXYsIERNQV9ESVJfVFgpOworCXBjaF91ZGNfZXBfc2V0X3BkKGVwKTsKKwlwY2hfdWRjX2VuYWJsZV9lcF9pbnRlcnJ1cHRzKGVwLT5kZXYsIFBDSF9VRENfRVBJTlQoZXAtPmluLCBlcC0+bnVtKSk7CisJcGNoX3VkY19lcF9jbGVhcl9uYWsoZXApOworfQorCisvKioKKyAqIHBjaF91ZGNfY29tcGxldGVfdHJhbnNmZXIoKSAtIFRoaXMgZnVuY3Rpb24gY29tcGxldGVzIGEgdHJhbnNmZXIKKyAqIEBlcDoJCVJlZmVyZW5jZSB0byB0aGUgZW5kcG9pbnQgc3RydWN0dXJlCisgKi8KK3N0YXRpYyB2b2lkIHBjaF91ZGNfY29tcGxldGVfdHJhbnNmZXIoc3RydWN0IHBjaF91ZGNfZXAgKmVwKQoreworCXN0cnVjdCBwY2hfdWRjX3JlcXVlc3QgKnJlcTsKKwlzdHJ1Y3QgcGNoX3VkY19kZXYgKmRldiA9IGVwLT5kZXY7CisKKwlpZiAobGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSkKKwkJcmV0dXJuOworCXJlcSA9IGxpc3RfZW50cnkoZXAtPnF1ZXVlLm5leHQsIHN0cnVjdCBwY2hfdWRjX3JlcXVlc3QsIHF1ZXVlKTsKKwlpZiAoKHJlcS0+dGRfZGF0YV9sYXN0LT5zdGF0dXMgJiBQQ0hfVURDX0JVRkZfU1RTKSAhPQorCSAgICBQQ0hfVURDX0JTX0RNQV9ET05FKQorCQlyZXR1cm47CisJaWYgKChyZXEtPnRkX2RhdGFfbGFzdC0+c3RhdHVzICYgUENIX1VEQ19SWFRYX1NUUykgIT0KKwkgICAgIFBDSF9VRENfUlRTX1NVQ0MpIHsKKwkJZGV2X2VycigmZGV2LT5wZGV2LT5kZXYsICJJbnZhbGlkIFJYVFggc3RhdHVzICgweCUwOHgpICIKKwkJCSJlcHN0YXR1cz0weCUwOHhcbiIsCisJCSAgICAgICAocmVxLT50ZF9kYXRhX2xhc3QtPnN0YXR1cyAmIFBDSF9VRENfUlhUWF9TVFMpLAorCQkgICAgICAgKGludCkoZXAtPmVwc3RzKSk7CisJCXJldHVybjsKKwl9CisKKwlyZXEtPnJlcS5hY3R1YWwgPSByZXEtPnJlcS5sZW5ndGg7CisJcmVxLT50ZF9kYXRhX2xhc3QtPnN0YXR1cyA9IFBDSF9VRENfQlNfSFNUX0JTWSB8IFBDSF9VRENfRE1BX0xBU1Q7CisJcmVxLT50ZF9kYXRhLT5zdGF0dXMgPSBQQ0hfVURDX0JTX0hTVF9CU1kgfCBQQ0hfVURDX0RNQV9MQVNUOworCWNvbXBsZXRlX3JlcShlcCwgcmVxLCAwKTsKKwlyZXEtPmRtYV9nb2luZyA9IDA7CisJaWYgKCFsaXN0X2VtcHR5KCZlcC0+cXVldWUpKSB7CisJCXBjaF91ZGNfd2FpdF9lcF9zdGFsbChlcCk7CisJCXBjaF91ZGNfZXBfY2xlYXJfbmFrKGVwKTsKKwkJcGNoX3VkY19lbmFibGVfZXBfaW50ZXJydXB0cyhlcC0+ZGV2LAorCQkJCQkgICAgIFBDSF9VRENfRVBJTlQoZXAtPmluLCBlcC0+bnVtKSk7CisJfSBlbHNlIHsKKwkJcGNoX3VkY19kaXNhYmxlX2VwX2ludGVycnVwdHMoZXAtPmRldiwKKwkJCQkJICAgICAgUENIX1VEQ19FUElOVChlcC0+aW4sIGVwLT5udW0pKTsKKwl9Cit9CisKKy8qKgorICogcGNoX3VkY19jb21wbGV0ZV9yZWNlaXZlcigpIC0gVGhpcyBmdW5jdGlvbiBjb21wbGV0ZXMgYSByZWNlaXZlcgorICogQGVwOgkJUmVmZXJlbmNlIHRvIHRoZSBlbmRwb2ludCBzdHJ1Y3R1cmUKKyAqLworc3RhdGljIHZvaWQgcGNoX3VkY19jb21wbGV0ZV9yZWNlaXZlcihzdHJ1Y3QgcGNoX3VkY19lcCAqZXApCit7CisJc3RydWN0IHBjaF91ZGNfcmVxdWVzdCAqcmVxOworCXN0cnVjdCBwY2hfdWRjX2RldiAqZGV2ID0gZXAtPmRldjsKKwl1bnNpZ25lZCBpbnQgY291bnQ7CisKKwlpZiAobGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSkKKwkJcmV0dXJuOworCisJLyogbmV4dCByZXF1ZXN0ICovCisJcmVxID0gbGlzdF9lbnRyeShlcC0+cXVldWUubmV4dCwgc3RydWN0IHBjaF91ZGNfcmVxdWVzdCwgcXVldWUpOworCWlmICgocmVxLT50ZF9kYXRhX2xhc3QtPnN0YXR1cyAmIFBDSF9VRENfQlVGRl9TVFMpICE9CisJICAgIFBDSF9VRENfQlNfRE1BX0RPTkUpCisJCXJldHVybjsKKwlwY2hfdWRjX2NsZWFyX2RtYShlcC0+ZGV2LCBETUFfRElSX1JYKTsKKwlpZiAoKHJlcS0+dGRfZGF0YV9sYXN0LT5zdGF0dXMgJiBQQ0hfVURDX1JYVFhfU1RTKSAhPQorCSAgICBQQ0hfVURDX1JUU19TVUNDKSB7CisJCWRldl9lcnIoJmRldi0+cGRldi0+ZGV2LCAiSW52YWxpZCBSWFRYIHN0YXR1cyAoMHglMDh4KSAiCisJCQkiZXBzdGF0dXM9MHglMDh4XG4iLAorCQkJKHJlcS0+dGRfZGF0YV9sYXN0LT5zdGF0dXMgJiBQQ0hfVURDX1JYVFhfU1RTKSwKKwkJCShpbnQpKGVwLT5lcHN0cykpOworCQlyZXR1cm47CisJfQorCWNvdW50ID0gcmVxLT50ZF9kYXRhX2xhc3QtPnN0YXR1cyAmIFBDSF9VRENfUlhUWF9CWVRFUzsKKworCS8qIG9uIDY0ayBwYWNrZXRzIHRoZSBSWEJZVEVTIGZpZWxkIGlzIHplcm8gKi8KKwlpZiAoIWNvdW50ICYmIChyZXEtPnJlcS5sZW5ndGggPT0gVURDX0RNQV9NQVhQQUNLRVQpKQorCQljb3VudCA9IFVEQ19ETUFfTUFYUEFDS0VUOworCXJlcS0+dGRfZGF0YS0+c3RhdHVzIHw9IFBDSF9VRENfRE1BX0xBU1Q7CisJcmVxLT50ZF9kYXRhX2xhc3QtPnN0YXR1cyB8PSBQQ0hfVURDX0JTX0hTVF9CU1k7CisKKwlyZXEtPmRtYV9nb2luZyA9IDA7CisJcmVxLT5yZXEuYWN0dWFsID0gY291bnQ7CisJY29tcGxldGVfcmVxKGVwLCByZXEsIDApOworCS8qIElmIHRoZXJlIGlzIGEgbmV3L2ZhaWxlZCByZXF1ZXN0cyB0cnkgdGhhdCBub3cgKi8KKwlpZiAoIWxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpIHsKKwkJcmVxID0gbGlzdF9lbnRyeShlcC0+cXVldWUubmV4dCwgc3RydWN0IHBjaF91ZGNfcmVxdWVzdCwgcXVldWUpOworCQlwY2hfdWRjX3N0YXJ0X3J4cmVxdWVzdChlcCwgcmVxKTsKKwl9Cit9CisKKy8qKgorICogcGNoX3VkY19zdmNfZGF0YV9pbigpIC0gVGhpcyBmdW5jdGlvbiBwcm9jZXNzIGVuZHBvaW50IGludGVycnVwdHMKKyAqCQkJCWZvciBJTiBlbmRwb2ludHMKKyAqIEBkZXY6CVJlZmVyZW5jZSB0byB0aGUgZGV2aWNlIHN0cnVjdHVyZQorICogQGVwX251bToJRW5kcG9pbnQgdGhhdCBnZW5lcmF0ZWQgdGhlIGludGVycnVwdAorICovCitzdGF0aWMgdm9pZCBwY2hfdWRjX3N2Y19kYXRhX2luKHN0cnVjdCBwY2hfdWRjX2RldiAqZGV2LCBpbnQgZXBfbnVtKQoreworCXUzMgllcHN0czsKKwlzdHJ1Y3QgcGNoX3VkY19lcAkqZXA7CisKKwllcCA9ICZkZXYtPmVwWzIqZXBfbnVtXTsKKwllcHN0cyA9IGVwLT5lcHN0czsKKwllcC0+ZXBzdHMgPSAwOworCisJaWYgKCEoZXBzdHMgJiAoVURDX0VQU1RTX0lOIHwgVURDX0VQU1RTX0JOQSAgfCBVRENfRVBTVFNfSEUgfAorCQkgICAgICAgVURDX0VQU1RTX1REQyB8IFVEQ19FUFNUU19SQ1MgfCBVRENfRVBTVFNfVFhFTVBUWSB8CisJCSAgICAgICBVRENfRVBTVFNfUlNTIHwgVURDX0VQU1RTX1hGRVJET05FKSkpCisJCXJldHVybjsKKwlpZiAoKGVwc3RzICYgVURDX0VQU1RTX0JOQSkpCisJCXJldHVybjsKKwlpZiAoZXBzdHMgJiBVRENfRVBTVFNfSEUpCisJCXJldHVybjsKKwlpZiAoZXBzdHMgJiBVRENfRVBTVFNfUlNTKSB7CisJCXBjaF91ZGNfZXBfc2V0X3N0YWxsKGVwKTsKKwkJcGNoX3VkY19lbmFibGVfZXBfaW50ZXJydXB0cyhlcC0+ZGV2LAorCQkJCQkgICAgIFBDSF9VRENfRVBJTlQoZXAtPmluLCBlcC0+bnVtKSk7CisJfQorCWlmIChlcHN0cyAmIFVEQ19FUFNUU19SQ1MpIHsKKwkJaWYgKCFkZXYtPnByb3Rfc3RhbGwpIHsKKwkJCXBjaF91ZGNfZXBfY2xlYXJfc3RhbGwoZXApOworCQl9IGVsc2UgeworCQkJcGNoX3VkY19lcF9zZXRfc3RhbGwoZXApOworCQkJcGNoX3VkY19lbmFibGVfZXBfaW50ZXJydXB0cyhlcC0+ZGV2LAorCQkJCQkJUENIX1VEQ19FUElOVChlcC0+aW4sIGVwLT5udW0pKTsKKwkJfQorCX0KKwlpZiAoZXBzdHMgJiBVRENfRVBTVFNfVERDKQorCQlwY2hfdWRjX2NvbXBsZXRlX3RyYW5zZmVyKGVwKTsKKwkvKiBPbiBJTiBpbnRlcnJ1cHQsIHByb3ZpZGUgZGF0YSBpZiB3ZSBoYXZlIGFueSAqLworCWlmICgoZXBzdHMgJiBVRENfRVBTVFNfSU4pICYmICEoZXBzdHMgJiBVRENfRVBTVFNfUlNTKSAmJgorCSAgICAhKGVwc3RzICYgVURDX0VQU1RTX1REQykgJiYgIShlcHN0cyAmIFVEQ19FUFNUU19UWEVNUFRZKSkKKwkJcGNoX3VkY19zdGFydF9uZXh0X3R4cmVxdWVzdChlcCk7Cit9CisKKy8qKgorICogcGNoX3VkY19zdmNfZGF0YV9vdXQoKSAtIEhhbmRsZXMgaW50ZXJydXB0cyBmcm9tIE9VVCBlbmRwb2ludAorICogQGRldjoJUmVmZXJlbmNlIHRvIHRoZSBkZXZpY2Ugc3RydWN0dXJlCisgKiBAZXBfbnVtOglFbmRwb2ludCB0aGF0IGdlbmVyYXRlZCB0aGUgaW50ZXJydXB0CisgKi8KK3N0YXRpYyB2b2lkIHBjaF91ZGNfc3ZjX2RhdGFfb3V0KHN0cnVjdCBwY2hfdWRjX2RldiAqZGV2LCBpbnQgZXBfbnVtKQoreworCXUzMgkJCWVwc3RzOworCXN0cnVjdCBwY2hfdWRjX2VwCQkqZXA7CisJc3RydWN0IHBjaF91ZGNfcmVxdWVzdAkJKnJlcSA9IE5VTEw7CisKKwllcCA9ICZkZXYtPmVwWzIqZXBfbnVtICsgMV07CisJZXBzdHMgPSBlcC0+ZXBzdHM7CisJZXAtPmVwc3RzID0gMDsKKworCWlmICgoZXBzdHMgJiBVRENfRVBTVFNfQk5BKSAmJiAoIWxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpKSB7CisJCS8qIG5leHQgcmVxdWVzdCAqLworCQlyZXEgPSBsaXN0X2VudHJ5KGVwLT5xdWV1ZS5uZXh0LCBzdHJ1Y3QgcGNoX3VkY19yZXF1ZXN0LAorCQkJCSBxdWV1ZSk7CisJCWlmICgocmVxLT50ZF9kYXRhX2xhc3QtPnN0YXR1cyAmIFBDSF9VRENfQlVGRl9TVFMpICE9CisJCSAgICAgUENIX1VEQ19CU19ETUFfRE9ORSkgeworCQkJaWYgKCFyZXEtPmRtYV9nb2luZykKKwkJCQlwY2hfdWRjX3N0YXJ0X3J4cmVxdWVzdChlcCwgcmVxKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKwlpZiAoZXBzdHMgJiBVRENfRVBTVFNfSEUpCisJCXJldHVybjsKKwlpZiAoZXBzdHMgJiBVRENfRVBTVFNfUlNTKQorCQlwY2hfdWRjX2VwX3NldF9zdGFsbChlcCk7CisJCXBjaF91ZGNfZW5hYmxlX2VwX2ludGVycnVwdHMoZXAtPmRldiwKKwkJCQkJICAgICBQQ0hfVURDX0VQSU5UKGVwLT5pbiwgZXAtPm51bSkpOworCWlmIChlcHN0cyAmIFVEQ19FUFNUU19SQ1MpIHsKKwkJaWYgKCFkZXYtPnByb3Rfc3RhbGwpIHsKKwkJCXBjaF91ZGNfZXBfY2xlYXJfc3RhbGwoZXApOworCQl9IGVsc2UgeworCQkJcGNoX3VkY19lcF9zZXRfc3RhbGwoZXApOworCQkJcGNoX3VkY19lbmFibGVfZXBfaW50ZXJydXB0cyhlcC0+ZGV2LAorCQkJCQkJUENIX1VEQ19FUElOVChlcC0+aW4sIGVwLT5udW0pKTsKKwkJfQorCX0KKwlpZiAoKChlcHN0cyAmIFVEQ19FUFNUU19PVVRfTUFTSykgPj4gVURDX0VQU1RTX09VVF9TSElGVCkgPT0KKwkgICAgVURDX0VQU1RTX09VVF9EQVRBKSB7CisJCWlmIChlcC0+ZGV2LT5wcm90X3N0YWxsID09IDEpIHsKKwkJCXBjaF91ZGNfZXBfc2V0X3N0YWxsKGVwKTsKKwkJCXBjaF91ZGNfZW5hYmxlX2VwX2ludGVycnVwdHMoZXAtPmRldiwKKwkJCQkJCVBDSF9VRENfRVBJTlQoZXAtPmluLCBlcC0+bnVtKSk7CisJCX0gZWxzZSB7CisJCQlwY2hfdWRjX2NvbXBsZXRlX3JlY2VpdmVyKGVwKTsKKwkJfQorCX0KKwlpZiAobGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSkKKwkJcGNoX3VkY19zZXRfZG1hKGRldiwgRE1BX0RJUl9SWCk7Cit9CisKKy8qKgorICogcGNoX3VkY19zdmNfY29udHJvbF9pbigpIC0gSGFuZGxlIENvbnRyb2wgSU4gZW5kcG9pbnQgaW50ZXJydXB0cworICogQGRldjoJUmVmZXJlbmNlIHRvIHRoZSBkZXZpY2Ugc3RydWN0dXJlCisgKi8KK3N0YXRpYyB2b2lkIHBjaF91ZGNfc3ZjX2NvbnRyb2xfaW4oc3RydWN0IHBjaF91ZGNfZGV2ICpkZXYpCit7CisJdTMyCWVwc3RzOworCXN0cnVjdCBwY2hfdWRjX2VwCSplcDsKKworCWVwID0gJmRldi0+ZXBbVURDX0VQMElOX0lEWF07CisJZXBzdHMgPSBlcC0+ZXBzdHM7CisJZXAtPmVwc3RzID0gMDsKKworCWlmICghKGVwc3RzICYgKFVEQ19FUFNUU19JTiB8IFVEQ19FUFNUU19CTkEgfCBVRENfRVBTVFNfSEUgfAorCQkgICAgICAgVURDX0VQU1RTX1REQyB8IFVEQ19FUFNUU19SQ1MgfCBVRENfRVBTVFNfVFhFTVBUWSB8CisJCSAgICAgICBVRENfRVBTVFNfWEZFUkRPTkUpKSkKKwkJcmV0dXJuOworCWlmICgoZXBzdHMgJiBVRENfRVBTVFNfQk5BKSkKKwkJcmV0dXJuOworCWlmIChlcHN0cyAmIFVEQ19FUFNUU19IRSkKKwkJcmV0dXJuOworCWlmICgoZXBzdHMgJiBVRENfRVBTVFNfVERDKSAmJiAoIWRldi0+c3RhbGwpKQorCQlwY2hfdWRjX2NvbXBsZXRlX3RyYW5zZmVyKGVwKTsKKwkvKiBPbiBJTiBpbnRlcnJ1cHQsIHByb3ZpZGUgZGF0YSBpZiB3ZSBoYXZlIGFueSAqLworCWlmICgoZXBzdHMgJiBVRENfRVBTVFNfSU4pICYmICEoZXBzdHMgJiBVRENfRVBTVFNfVERDKSAmJgorCSAgICAgIShlcHN0cyAmIFVEQ19FUFNUU19UWEVNUFRZKSkKKwkJcGNoX3VkY19zdGFydF9uZXh0X3R4cmVxdWVzdChlcCk7Cit9CisKKy8qKgorICogcGNoX3VkY19zdmNfY29udHJvbF9vdXQoKSAtIFJvdXRpbmUgdGhhdCBoYW5kbGUgQ29udHJvbAorICoJCQkJCU9VVCBlbmRwb2ludCBpbnRlcnJ1cHRzCisgKiBAZGV2OglSZWZlcmVuY2UgdG8gdGhlIGRldmljZSBzdHJ1Y3R1cmUKKyAqLworc3RhdGljIHZvaWQgcGNoX3VkY19zdmNfY29udHJvbF9vdXQoc3RydWN0IHBjaF91ZGNfZGV2ICpkZXYpCit7CisJdTMyCXN0YXQ7CisJaW50IHNldHVwX3N1cHBvcnRlZDsKKwlzdHJ1Y3QgcGNoX3VkY19lcAkqZXA7CisKKwllcCA9ICZkZXYtPmVwW1VEQ19FUDBPVVRfSURYXTsKKwlzdGF0ID0gZXAtPmVwc3RzOworCWVwLT5lcHN0cyA9IDA7CisKKwkvKiBJZiBzZXR1cCBkYXRhICovCisJaWYgKCgoc3RhdCAmIFVEQ19FUFNUU19PVVRfTUFTSykgPj4gVURDX0VQU1RTX09VVF9TSElGVCkgPT0KKwkgICAgVURDX0VQU1RTX09VVF9TRVRVUCkgeworCQlkZXYtPnN0YWxsID0gMDsKKwkJZGV2LT5lcFtVRENfRVAwSU5fSURYXS5oYWx0ZWQgPSAwOworCQlkZXYtPmVwW1VEQ19FUDBPVVRfSURYXS5oYWx0ZWQgPSAwOworCQkvKiBJbiBkYXRhIG5vdCByZWFkeSAqLworCQlwY2hfdWRjX2VwX3NldF9uYWsoJihkZXYtPmVwW1VEQ19FUDBJTl9JRFhdKSk7CisJCWRldi0+c2V0dXBfZGF0YSA9IGVwLT50ZF9zdHAtPnJlcXVlc3Q7CisJCXBjaF91ZGNfaW5pdF9zZXR1cF9idWZmKGVwLT50ZF9zdHApOworCQlwY2hfdWRjX2NsZWFyX2RtYShkZXYsIERNQV9ESVJfVFgpOworCQlwY2hfdWRjX2VwX2ZpZm9fZmx1c2goJihkZXYtPmVwW1VEQ19FUDBJTl9JRFhdKSwKKwkJCQkgICAgICBkZXYtPmVwW1VEQ19FUDBJTl9JRFhdLmluKTsKKwkJaWYgKChkZXYtPnNldHVwX2RhdGEuYlJlcXVlc3RUeXBlICYgVVNCX0RJUl9JTikpCisJCQlkZXYtPmdhZGdldC5lcDAgPSAmZGV2LT5lcFtVRENfRVAwSU5fSURYXS5lcDsKKwkJZWxzZSAvKiBPVVQgKi8KKwkJCWRldi0+Z2FkZ2V0LmVwMCA9ICZlcC0+ZXA7CisJCXNwaW5fdW5sb2NrKCZkZXYtPmxvY2spOworCQkvKiBJZiBNYXNzIHN0b3JhZ2UgUmVzZXQgKi8KKwkJaWYgKChkZXYtPnNldHVwX2RhdGEuYlJlcXVlc3RUeXBlID09IDB4MjEpICYmCisJCSAgICAoZGV2LT5zZXR1cF9kYXRhLmJSZXF1ZXN0ID09IDB4RkYpKQorCQkJZGV2LT5wcm90X3N0YWxsID0gMDsKKwkJLyogY2FsbCBnYWRnZXQgd2l0aCBzZXR1cCBkYXRhIHJlY2VpdmVkICovCisJCXNldHVwX3N1cHBvcnRlZCA9IGRldi0+ZHJpdmVyLT5zZXR1cCgmZGV2LT5nYWRnZXQsCisJCQkJCQkgICAgICZkZXYtPnNldHVwX2RhdGEpOworCQlzcGluX2xvY2soJmRldi0+bG9jayk7CisJCS8qIGVwMCBpbiByZXR1cm5zIGRhdGEgb24gSU4gcGhhc2UgKi8KKwkJaWYgKHNldHVwX3N1cHBvcnRlZCA+PSAwICYmIHNldHVwX3N1cHBvcnRlZCA8CisJCQkJCSAgICBVRENfRVAwSU5fTUFYX1BLVF9TSVpFKSB7CisJCQlwY2hfdWRjX2VwX2NsZWFyX25haygmKGRldi0+ZXBbVURDX0VQMElOX0lEWF0pKTsKKwkJCS8qIEdhZGdldCB3b3VsZCBoYXZlIHF1ZXVlZCBhIHJlcXVlc3Qgd2hlbgorCQkJICogd2UgY2FsbGVkIHRoZSBzZXR1cCAqLworCQkJcGNoX3VkY19zZXRfZG1hKGRldiwgRE1BX0RJUl9SWCk7CisJCQlwY2hfdWRjX2VwX2NsZWFyX25hayhlcCk7CisJCX0gZWxzZSBpZiAoc2V0dXBfc3VwcG9ydGVkIDwgMCkgeworCQkJLyogaWYgdW5zdXBwb3J0ZWQgcmVxdWVzdCwgdGhlbiBzdGFsbCAqLworCQkJcGNoX3VkY19lcF9zZXRfc3RhbGwoJihkZXYtPmVwW1VEQ19FUDBJTl9JRFhdKSk7CisJCQlwY2hfdWRjX2VuYWJsZV9lcF9pbnRlcnJ1cHRzKGVwLT5kZXYsCisJCQkJCQlQQ0hfVURDX0VQSU5UKGVwLT5pbiwgZXAtPm51bSkpOworCQkJZGV2LT5zdGFsbCA9IDA7CisJCQlwY2hfdWRjX3NldF9kbWEoZGV2LCBETUFfRElSX1JYKTsKKwkJfSBlbHNlIHsKKwkJCWRldi0+d2FpdGluZ196bHBfYWNrID0gMTsKKwkJfQorCX0gZWxzZSBpZiAoKCgoc3RhdCAmIFVEQ19FUFNUU19PVVRfTUFTSykgPj4gVURDX0VQU1RTX09VVF9TSElGVCkgPT0KKwkJICAgICBVRENfRVBTVFNfT1VUX0RBVEEpICYmICFkZXYtPnN0YWxsKSB7CisJCWlmIChsaXN0X2VtcHR5KCZlcC0+cXVldWUpKSB7CisJCQlkZXZfZXJyKCZkZXYtPnBkZXYtPmRldiwgIiVzOiBObyByZXF1ZXN0XG4iLCBfX2Z1bmNfXyk7CisJCQllcC0+dGRfZGF0YS0+c3RhdHVzID0gKGVwLT50ZF9kYXRhLT5zdGF0dXMgJgorCQkJCQkgICAgICAgflBDSF9VRENfQlVGRl9TVFMpIHwKKwkJCQkJICAgICAgIFBDSF9VRENfQlNfSFNUX1JEWTsKKwkJCXBjaF91ZGNfc2V0X2RtYShkZXYsIERNQV9ESVJfUlgpOworCQl9IGVsc2UgeworCQkJLyogY29udHJvbCB3cml0ZSAqLworCQkJLyogbmV4dCBmdW5jdGlvbiB3aWxsIHBpY2t1byBhbiBjbGVhciB0aGUgc3RhdHVzICovCisJCQllcC0+ZXBzdHMgPSBzdGF0OworCisJCQlwY2hfdWRjX3N2Y19kYXRhX291dChkZXYsIDApOworCQkJLyogcmUtcHJvZ3JhbSBkZXNjLiBwb2ludGVyIGZvciBwb3NzaWJsZSBaTFBzICovCisJCQlwY2hfdWRjX2VwX3NldF9kZHB0cihlcCwgZXAtPnRkX2RhdGFfcGh5cyk7CisJCQlwY2hfdWRjX3NldF9kbWEoZGV2LCBETUFfRElSX1JYKTsKKwkJfQorCX0KKwlwY2hfdWRjX2VwX3NldF9ycmR5KGVwKTsKK30KKworCisvKioKKyAqIHBjaF91ZGNfcG9zdHN2Y19lcGludGVycygpIC0gVGhpcyBmdW5jdGlvbiBlbmFibGVzIGVuZCBwb2ludCBpbnRlcnJ1cHRzCisgKgkJCQlhbmQgY2xlYXJzIE5BSyBzdGF0dXMKKyAqIEBkZXY6CVJlZmVyZW5jZSB0byB0aGUgZGV2aWNlIHN0cnVjdHVyZQorICogQGVwX251bToJRW5kIHBvaW50IG51bWJlcgorICovCitzdGF0aWMgdm9pZCBwY2hfdWRjX3Bvc3RzdmNfZXBpbnRlcnMoc3RydWN0IHBjaF91ZGNfZGV2ICpkZXYsIGludCBlcF9udW0pCit7CisJc3RydWN0IHBjaF91ZGNfZXAJKmVwOworCXN0cnVjdCBwY2hfdWRjX3JlcXVlc3QgKnJlcTsKKworCWVwID0gJmRldi0+ZXBbMiplcF9udW1dOworCWlmICghbGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSkgeworCQlyZXEgPSBsaXN0X2VudHJ5KGVwLT5xdWV1ZS5uZXh0LCBzdHJ1Y3QgcGNoX3VkY19yZXF1ZXN0LCBxdWV1ZSk7CisJCXBjaF91ZGNfZW5hYmxlX2VwX2ludGVycnVwdHMoZXAtPmRldiwKKwkJCQkJICAgICBQQ0hfVURDX0VQSU5UKGVwLT5pbiwgZXAtPm51bSkpOworCQlwY2hfdWRjX2VwX2NsZWFyX25hayhlcCk7CisJfQorfQorCisvKioKKyAqIHBjaF91ZGNfcmVhZF9hbGxfZXBzdGF0dXMoKSAtIFRoaXMgZnVuY3Rpb24gcmVhZCBhbGwgZW5kcG9pbnQgc3RhdHVzCisgKiBAZGV2OglSZWZlcmVuY2UgdG8gdGhlIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEBlcF9pbnRyOglTdGF0dXMgb2YgZW5kcG9pbnQgaW50ZXJydXB0CisgKi8KK3N0YXRpYyB2b2lkIHBjaF91ZGNfcmVhZF9hbGxfZXBzdGF0dXMoc3RydWN0IHBjaF91ZGNfZGV2ICpkZXYsIHUzMiBlcF9pbnRyKQoreworCWludCBpOworCXN0cnVjdCBwY2hfdWRjX2VwCSplcDsKKworCWZvciAoaSA9IDA7IGkgPCBQQ0hfVURDX1VTRURfRVBfTlVNOyBpKyspIHsKKwkJLyogSU4gKi8KKwkJaWYgKGVwX2ludHIgJiAoMHgxIDw8IGkpKSB7CisJCQllcCA9ICZkZXYtPmVwWzIqaV07CisJCQllcC0+ZXBzdHMgPSBwY2hfdWRjX3JlYWRfZXBfc3RhdHVzKGVwKTsKKwkJCXBjaF91ZGNfY2xlYXJfZXBfc3RhdHVzKGVwLCBlcC0+ZXBzdHMpOworCQl9CisJCS8qIE9VVCAqLworCQlpZiAoZXBfaW50ciAmICgweDEwMDAwIDw8IGkpKSB7CisJCQllcCA9ICZkZXYtPmVwWzIqaSsxXTsKKwkJCWVwLT5lcHN0cyA9IHBjaF91ZGNfcmVhZF9lcF9zdGF0dXMoZXApOworCQkJcGNoX3VkY19jbGVhcl9lcF9zdGF0dXMoZXAsIGVwLT5lcHN0cyk7CisJCX0KKwl9Cit9CisKKy8qKgorICogcGNoX3VkY19hY3RpdmF0ZV9jb250cm9sX2VwKCkgLSBUaGlzIGZ1bmN0aW9uIGVuYWJsZXMgdGhlIGNvbnRyb2wgZW5kcG9pbnRzCisgKgkJCQkJZm9yIHRyYWZmaWMgYWZ0ZXIgYSByZXNldAorICogQGRldjoJUmVmZXJlbmNlIHRvIHRoZSBkZXZpY2Ugc3RydWN0dXJlCisgKi8KK3N0YXRpYyB2b2lkIHBjaF91ZGNfYWN0aXZhdGVfY29udHJvbF9lcChzdHJ1Y3QgcGNoX3VkY19kZXYgKmRldikKK3sKKwlzdHJ1Y3QgcGNoX3VkY19lcAkqZXA7CisJdTMyIHZhbDsKKworCS8qIFNldHVwIHRoZSBJTiBlbmRwb2ludCAqLworCWVwID0gJmRldi0+ZXBbVURDX0VQMElOX0lEWF07CisJcGNoX3VkY19jbGVhcl9lcF9jb250cm9sKGVwKTsKKwlwY2hfdWRjX2VwX2ZpZm9fZmx1c2goZXAsIGVwLT5pbik7CisJcGNoX3VkY19lcF9zZXRfYnVmc3ooZXAsIFVEQ19FUDBJTl9CVUZGX1NJWkUsIGVwLT5pbik7CisJcGNoX3VkY19lcF9zZXRfbWF4cGt0KGVwLCBVRENfRVAwSU5fTUFYX1BLVF9TSVpFKTsKKwkvKiBJbml0aWFsaXplIHRoZSBJTiBFUCBEZXNjcmlwdG9yICovCisJZXAtPnRkX2RhdGEgICAgICA9IE5VTEw7CisJZXAtPnRkX3N0cCAgICAgICA9IE5VTEw7CisJZXAtPnRkX2RhdGFfcGh5cyA9IDA7CisJZXAtPnRkX3N0cF9waHlzICA9IDA7CisKKwkvKiBTZXR1cCB0aGUgT1VUIGVuZHBvaW50ICovCisJZXAgPSAmZGV2LT5lcFtVRENfRVAwT1VUX0lEWF07CisJcGNoX3VkY19jbGVhcl9lcF9jb250cm9sKGVwKTsKKwlwY2hfdWRjX2VwX2ZpZm9fZmx1c2goZXAsIGVwLT5pbik7CisJcGNoX3VkY19lcF9zZXRfYnVmc3ooZXAsIFVEQ19FUDBPVVRfQlVGRl9TSVpFLCBlcC0+aW4pOworCXBjaF91ZGNfZXBfc2V0X21heHBrdChlcCwgVURDX0VQME9VVF9NQVhfUEtUX1NJWkUpOworCXZhbCA9IFVEQ19FUDBPVVRfTUFYX1BLVF9TSVpFIDw8IFVEQ19DU1JfTkVfTUFYX1BLVF9TSElGVDsKKwlwY2hfdWRjX3dyaXRlX2NzcihlcC0+ZGV2LCB2YWwsIFVEQ19FUDBPVVRfSURYKTsKKworCS8qIEluaXRpYWxpemUgdGhlIFNFVFVQIGJ1ZmZlciAqLworCXBjaF91ZGNfaW5pdF9zZXR1cF9idWZmKGVwLT50ZF9zdHApOworCS8qIFdyaXRlIHRoZSBwb2ludGVyIGFkZHJlc3Mgb2YgZG1hIGRlc2NyaXB0b3IgKi8KKwlwY2hfdWRjX2VwX3NldF9zdWJwdHIoZXAsIGVwLT50ZF9zdHBfcGh5cyk7CisJLyogV3JpdGUgdGhlIHBvaW50ZXIgYWRkcmVzcyBvZiBTZXR1cCBkZXNjcmlwdG9yICovCisJcGNoX3VkY19lcF9zZXRfZGRwdHIoZXAsIGVwLT50ZF9kYXRhX3BoeXMpOworCisJLyogSW5pdGlhbGl6ZSB0aGUgZG1hIGRlc2NyaXB0b3IgKi8KKwllcC0+dGRfZGF0YS0+c3RhdHVzICA9IFBDSF9VRENfRE1BX0xBU1Q7CisJZXAtPnRkX2RhdGEtPmRhdGFwdHIgPSBkZXYtPmRtYV9hZGRyOworCWVwLT50ZF9kYXRhLT5uZXh0ICAgID0gZXAtPnRkX2RhdGFfcGh5czsKKworCXBjaF91ZGNfZXBfY2xlYXJfbmFrKGVwKTsKK30KKworCisvKioKKyAqIHBjaF91ZGNfc3ZjX3VyX2ludGVycnVwdCgpIC0gVGhpcyBmdW5jdGlvbiBoYW5kbGVzIGEgVVNCIHJlc2V0IGludGVycnVwdAorICogQGRldjoJUmVmZXJlbmNlIHRvIGRyaXZlciBzdHJ1Y3R1cmUKKyAqLworc3RhdGljIHZvaWQgcGNoX3VkY19zdmNfdXJfaW50ZXJydXB0KHN0cnVjdCBwY2hfdWRjX2RldiAqZGV2KQoreworCXN0cnVjdCBwY2hfdWRjX2VwCSplcDsKKwlpbnQgaTsKKworCXBjaF91ZGNfY2xlYXJfZG1hKGRldiwgRE1BX0RJUl9UWCk7CisJcGNoX3VkY19jbGVhcl9kbWEoZGV2LCBETUFfRElSX1JYKTsKKwkvKiBNYXNrIGFsbCBlbmRwb2ludCBpbnRlcnJ1cHRzICovCisJcGNoX3VkY19kaXNhYmxlX2VwX2ludGVycnVwdHMoZGV2LCBVRENfRVBJTlRfTVNLX0RJU0FCTEVfQUxMKTsKKwkvKiBjbGVhciBhbGwgZW5kcG9pbnQgaW50ZXJydXB0cyAqLworCXBjaF91ZGNfd3JpdGVfZXBfaW50ZXJydXB0cyhkZXYsIFVEQ19FUElOVF9NU0tfRElTQUJMRV9BTEwpOworCisJZm9yIChpID0gMDsgaSA8IFBDSF9VRENfRVBfTlVNOyBpKyspIHsKKwkJZXAgPSAmZGV2LT5lcFtpXTsKKwkJcGNoX3VkY19jbGVhcl9lcF9zdGF0dXMoZXAsIFVEQ19FUFNUU19BTExfQ0xSX01BU0spOworCQlwY2hfdWRjX2NsZWFyX2VwX2NvbnRyb2woZXApOworCQlwY2hfdWRjX2VwX3NldF9kZHB0cihlcCwgMCk7CisJCXBjaF91ZGNfd3JpdGVfY3NyKGVwLT5kZXYsIDB4MDAsIGkpOworCX0KKwlkZXYtPnN0YWxsID0gMDsKKwlkZXYtPnByb3Rfc3RhbGwgPSAwOworCWRldi0+d2FpdGluZ196bHBfYWNrID0gMDsKKwlkZXYtPnNldF9jZmdfbm90X2Fja2VkID0gMDsKKworCS8qIGRpc2FibGUgZXAgdG8gZW1wdHkgcmVxIHF1ZXVlLiBTa2lwIHRoZSBjb250cm9sIEVQJ3MgKi8KKwlmb3IgKGkgPSAwOyBpIDwgKFBDSF9VRENfVVNFRF9FUF9OVU0qMik7IGkrKykgeworCQllcCA9ICZkZXYtPmVwW2ldOworCQlwY2hfdWRjX2VwX3NldF9uYWsoZXApOworCQlwY2hfdWRjX2VwX2ZpZm9fZmx1c2goZXAsIGVwLT5pbik7CisJCS8qIENvbXBsZXRlIHJlcXVlc3QgcXVldWUgKi8KKwkJZW1wdHlfcmVxX3F1ZXVlKGVwKTsKKwl9CisJaWYgKGRldi0+ZHJpdmVyICYmIGRldi0+ZHJpdmVyLT5kaXNjb25uZWN0KQorCQlkZXYtPmRyaXZlci0+ZGlzY29ubmVjdCgmZGV2LT5nYWRnZXQpOworfQorCisvKioKKyAqIHBjaF91ZGNfc3ZjX2VudW1faW50ZXJydXB0KCkgLSBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgYSBVU0Igc3BlZWQgZW51bWVyYXRpb24KKyAqCQkJCWRvbmUgaW50ZXJydXB0CisgKiBAZGV2OglSZWZlcmVuY2UgdG8gZHJpdmVyIHN0cnVjdHVyZQorICovCitzdGF0aWMgdm9pZCBwY2hfdWRjX3N2Y19lbnVtX2ludGVycnVwdChzdHJ1Y3QgcGNoX3VkY19kZXYgKmRldikKK3sKKwl1MzIgZGV2X3N0YXQsIGRldl9zcGVlZDsKKwl1MzIgc3BlZWQgPSBVU0JfU1BFRURfRlVMTDsKKworCWRldl9zdGF0ID0gcGNoX3VkY19yZWFkX2RldmljZV9zdGF0dXMoZGV2KTsKKwlkZXZfc3BlZWQgPSAoZGV2X3N0YXQgJiBVRENfREVWU1RTX0VOVU1fU1BFRURfTUFTSykgPj4KKwkJCQkJCSBVRENfREVWU1RTX0VOVU1fU1BFRURfU0hJRlQ7CisJc3dpdGNoIChkZXZfc3BlZWQpIHsKKwljYXNlIFVEQ19ERVZTVFNfRU5VTV9TUEVFRF9ISUdIOgorCQlzcGVlZCA9IFVTQl9TUEVFRF9ISUdIOworCQlicmVhazsKKwljYXNlICBVRENfREVWU1RTX0VOVU1fU1BFRURfRlVMTDoKKwkJc3BlZWQgPSBVU0JfU1BFRURfRlVMTDsKKwkJYnJlYWs7CisJY2FzZSAgVURDX0RFVlNUU19FTlVNX1NQRUVEX0xPVzoKKwkJc3BlZWQgPSBVU0JfU1BFRURfTE9XOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwl9CisJZGV2LT5nYWRnZXQuc3BlZWQgPSBzcGVlZDsKKwlwY2hfdWRjX2FjdGl2YXRlX2NvbnRyb2xfZXAoZGV2KTsKKwlwY2hfdWRjX2VuYWJsZV9lcF9pbnRlcnJ1cHRzKGRldiwgVURDX0VQSU5UX0lOX0VQMCB8IFVEQ19FUElOVF9PVVRfRVAwKTsKKwlwY2hfdWRjX3NldF9kbWEoZGV2LCBETUFfRElSX1RYKTsKKwlwY2hfdWRjX3NldF9kbWEoZGV2LCBETUFfRElSX1JYKTsKKwlwY2hfdWRjX2VwX3NldF9ycmR5KCYoZGV2LT5lcFtVRENfRVAwT1VUX0lEWF0pKTsKK30KKworLyoqCisgKiBwY2hfdWRjX3N2Y19pbnRmX2ludGVycnVwdCgpIC0gVGhpcyBmdW5jdGlvbiBoYW5kbGVzIGEgc2V0IGludGVyZmFjZQorICoJCQkJICBpbnRlcnJ1cHQKKyAqIEBkZXY6CVJlZmVyZW5jZSB0byBkcml2ZXIgc3RydWN0dXJlCisgKi8KK3N0YXRpYyB2b2lkIHBjaF91ZGNfc3ZjX2ludGZfaW50ZXJydXB0KHN0cnVjdCBwY2hfdWRjX2RldiAqZGV2KQoreworCXUzMiByZWcsIGRldl9zdGF0ID0gMDsKKwlpbnQgaSwgcmV0OworCisJZGV2X3N0YXQgPSBwY2hfdWRjX3JlYWRfZGV2aWNlX3N0YXR1cyhkZXYpOworCWRldi0+Y2ZnX2RhdGEuY3VyX2ludGYgPSAoZGV2X3N0YXQgJiBVRENfREVWU1RTX0lOVEZfTUFTSykgPj4KKwkJCQkJCQkgVURDX0RFVlNUU19JTlRGX1NISUZUOworCWRldi0+Y2ZnX2RhdGEuY3VyX2FsdCA9IChkZXZfc3RhdCAmIFVEQ19ERVZTVFNfQUxUX01BU0spID4+CisJCQkJCQkJIFVEQ19ERVZTVFNfQUxUX1NISUZUOworCWRldi0+c2V0X2NmZ19ub3RfYWNrZWQgPSAxOworCS8qIENvbnN0cnVjdCB0aGUgdXNiIHJlcXVlc3QgZm9yIGdhZGdldCBkcml2ZXIgYW5kIGluZm9ybSBpdCAqLworCW1lbXNldCgmZGV2LT5zZXR1cF9kYXRhLCAwICwgc2l6ZW9mIGRldi0+c2V0dXBfZGF0YSk7CisJZGV2LT5zZXR1cF9kYXRhLmJSZXF1ZXN0ID0gVVNCX1JFUV9TRVRfSU5URVJGQUNFOworCWRldi0+c2V0dXBfZGF0YS5iUmVxdWVzdFR5cGUgPSBVU0JfUkVDSVBfSU5URVJGQUNFOworCWRldi0+c2V0dXBfZGF0YS53VmFsdWUgPSBjcHVfdG9fbGUxNihkZXYtPmNmZ19kYXRhLmN1cl9hbHQpOworCWRldi0+c2V0dXBfZGF0YS53SW5kZXggPSBjcHVfdG9fbGUxNihkZXYtPmNmZ19kYXRhLmN1cl9pbnRmKTsKKwkvKiBwcm9ncmFtbSB0aGUgRW5kcG9pbnQgQ2ZnIHJlZ2lzdGVycyAqLworCS8qIE9ubHkgb25lIGVuZCBwb2ludCBjZmcgcmVnaXN0ZXIgKi8KKwlyZWcgPSBwY2hfdWRjX3JlYWRfY3NyKGRldiwgVURDX0VQME9VVF9JRFgpOworCXJlZyA9IChyZWcgJiB+VURDX0NTUl9ORV9JTlRGX01BU0spIHwKKwkgICAgICAoZGV2LT5jZmdfZGF0YS5jdXJfaW50ZiA8PCBVRENfQ1NSX05FX0lOVEZfU0hJRlQpOworCXJlZyA9IChyZWcgJiB+VURDX0NTUl9ORV9BTFRfTUFTSykgfAorCSAgICAgIChkZXYtPmNmZ19kYXRhLmN1cl9hbHQgPDwgVURDX0NTUl9ORV9BTFRfU0hJRlQpOworCXBjaF91ZGNfd3JpdGVfY3NyKGRldiwgcmVnLCBVRENfRVAwT1VUX0lEWCk7CisJZm9yIChpID0gMDsgaSA8IFBDSF9VRENfVVNFRF9FUF9OVU0gKiAyOyBpKyspIHsKKwkJLyogY2xlYXIgc3RhbGwgYml0cyAqLworCQlwY2hfdWRjX2VwX2NsZWFyX3N0YWxsKCYoZGV2LT5lcFtpXSkpOworCQlkZXYtPmVwW2ldLmhhbHRlZCA9IDA7CisJfQorCWRldi0+c3RhbGwgPSAwOworCXNwaW5fdW5sb2NrKCZkZXYtPmxvY2spOworCXJldCA9IGRldi0+ZHJpdmVyLT5zZXR1cCgmZGV2LT5nYWRnZXQsICZkZXYtPnNldHVwX2RhdGEpOworCXNwaW5fbG9jaygmZGV2LT5sb2NrKTsKK30KKworLyoqCisgKiBwY2hfdWRjX3N2Y19jZmdfaW50ZXJydXB0KCkgLSBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgYSBzZXQgY29uZmlndXJhdGlvbgorICoJCQkJaW50ZXJydXB0CisgKiBAZGV2OglSZWZlcmVuY2UgdG8gZHJpdmVyIHN0cnVjdHVyZQorICovCitzdGF0aWMgdm9pZCBwY2hfdWRjX3N2Y19jZmdfaW50ZXJydXB0KHN0cnVjdCBwY2hfdWRjX2RldiAqZGV2KQoreworCWludCBpLCByZXQ7CisJdTMyIHJlZywgZGV2X3N0YXQgPSAwOworCisJZGV2X3N0YXQgPSBwY2hfdWRjX3JlYWRfZGV2aWNlX3N0YXR1cyhkZXYpOworCWRldi0+c2V0X2NmZ19ub3RfYWNrZWQgPSAxOworCWRldi0+Y2ZnX2RhdGEuY3VyX2NmZyA9IChkZXZfc3RhdCAmIFVEQ19ERVZTVFNfQ0ZHX01BU0spID4+CisJCQkJVURDX0RFVlNUU19DRkdfU0hJRlQ7CisJLyogbWFrZSB1c2IgcmVxdWVzdCBmb3IgZ2FkZ2V0IGRyaXZlciAqLworCW1lbXNldCgmZGV2LT5zZXR1cF9kYXRhLCAwICwgc2l6ZW9mIGRldi0+c2V0dXBfZGF0YSk7CisJZGV2LT5zZXR1cF9kYXRhLmJSZXF1ZXN0ID0gVVNCX1JFUV9TRVRfQ09ORklHVVJBVElPTjsKKwlkZXYtPnNldHVwX2RhdGEud1ZhbHVlID0gY3B1X3RvX2xlMTYoZGV2LT5jZmdfZGF0YS5jdXJfY2ZnKTsKKwkvKiBwcm9ncmFtIHRoZSBORSByZWdpc3RlcnMgKi8KKwkvKiBPbmx5IG9uZSBlbmQgcG9pbnQgY2ZnIHJlZ2lzdGVyICovCisJcmVnID0gcGNoX3VkY19yZWFkX2NzcihkZXYsIFVEQ19FUDBPVVRfSURYKTsKKwlyZWcgPSAocmVnICYgflVEQ19DU1JfTkVfQ0ZHX01BU0spIHwKKwkgICAgICAoZGV2LT5jZmdfZGF0YS5jdXJfY2ZnIDw8IFVEQ19DU1JfTkVfQ0ZHX1NISUZUKTsKKwlwY2hfdWRjX3dyaXRlX2NzcihkZXYsIHJlZywgVURDX0VQME9VVF9JRFgpOworCWZvciAoaSA9IDA7IGkgPCBQQ0hfVURDX1VTRURfRVBfTlVNICogMjsgaSsrKSB7CisJCS8qIGNsZWFyIHN0YWxsIGJpdHMgKi8KKwkJcGNoX3VkY19lcF9jbGVhcl9zdGFsbCgmKGRldi0+ZXBbaV0pKTsKKwkJZGV2LT5lcFtpXS5oYWx0ZWQgPSAwOworCX0KKwlkZXYtPnN0YWxsID0gMDsKKworCS8qIGNhbGwgZ2FkZ2V0IHplcm8gd2l0aCBzZXR1cCBkYXRhIHJlY2VpdmVkICovCisJc3Bpbl91bmxvY2soJmRldi0+bG9jayk7CisJcmV0ID0gZGV2LT5kcml2ZXItPnNldHVwKCZkZXYtPmdhZGdldCwgJmRldi0+c2V0dXBfZGF0YSk7CisJc3Bpbl9sb2NrKCZkZXYtPmxvY2spOworfQorCisvKioKKyAqIHBjaF91ZGNfZGV2X2lzcigpIC0gVGhpcyBmdW5jdGlvbiBzZXJ2aWNlcyBkZXZpY2UgaW50ZXJydXB0cworICoJCQlieSBpbnZva2luZyBhcHByb3ByaWF0ZSByb3V0aW5lcy4KKyAqIEBkZXY6CVJlZmVyZW5jZSB0byB0aGUgZGV2aWNlIHN0cnVjdHVyZQorICogQGRldl9pbnRyOglUaGUgRGV2aWNlIGludGVycnVwdCBzdGF0dXMuCisgKi8KK3N0YXRpYyB2b2lkIHBjaF91ZGNfZGV2X2lzcihzdHJ1Y3QgcGNoX3VkY19kZXYgKmRldiwgdTMyIGRldl9pbnRyKQoreworCS8qIFVTQiBSZXNldCBJbnRlcnJ1cHQgKi8KKwlpZiAoZGV2X2ludHIgJiBVRENfREVWSU5UX1VSKQorCQlwY2hfdWRjX3N2Y191cl9pbnRlcnJ1cHQoZGV2KTsKKwkvKiBFbnVtZXJhdGlvbiBEb25lIEludGVycnVwdCAqLworCWlmIChkZXZfaW50ciAmIFVEQ19ERVZJTlRfRU5VTSkKKwkJcGNoX3VkY19zdmNfZW51bV9pbnRlcnJ1cHQoZGV2KTsKKwkvKiBTZXQgSW50ZXJmYWNlIEludGVycnVwdCAqLworCWlmIChkZXZfaW50ciAmIFVEQ19ERVZJTlRfU0kpCisJCXBjaF91ZGNfc3ZjX2ludGZfaW50ZXJydXB0KGRldik7CisJLyogU2V0IENvbmZpZyBJbnRlcnJ1cHQgKi8KKwlpZiAoZGV2X2ludHIgJiBVRENfREVWSU5UX1NDKQorCQlwY2hfdWRjX3N2Y19jZmdfaW50ZXJydXB0KGRldik7CisJLyogVVNCIFN1c3BlbmQgaW50ZXJydXB0ICovCisJaWYgKGRldl9pbnRyICYgVURDX0RFVklOVF9VUykKKwkJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICJVU0JfU1VTUEVORFxuIik7CisJLyogQ2xlYXIgdGhlIFNPRiBpbnRlcnJ1cHQsIGlmIGVuYWJsZWQgKi8KKwlpZiAoZGV2X2ludHIgJiBVRENfREVWSU5UX1NPRikKKwkJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICJTT0ZcbiIpOworCS8qIEVTIGludGVycnVwdCwgSURMRSA+IDNtcyBvbiB0aGUgVVNCICovCisJaWYgKGRldl9pbnRyICYgVURDX0RFVklOVF9FUykKKwkJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICJFU1xuIik7CisJLyogUldLUCBpbnRlcnJ1cHQgKi8KKwlpZiAoZGV2X2ludHIgJiBVRENfREVWSU5UX1JXS1ApCisJCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAiUldLUFxuIik7Cit9CisKKy8qKgorICogcGNoX3VkY19pc3IoKSAtIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyBpbnRlcnJ1cHRzIGZyb20gdGhlIFBDSCBVU0IgRGV2aWNlCisgKiBAaXJxOglJbnRlcnJ1cHQgcmVxdWVzdCBudW1iZXIKKyAqIEBkZXY6CVJlZmVyZW5jZSB0byB0aGUgZGV2aWNlIHN0cnVjdHVyZQorICovCitzdGF0aWMgaXJxcmV0dXJuX3QgcGNoX3VkY19pc3IoaW50IGlycSwgdm9pZCAqcGRldikKK3sKKwlzdHJ1Y3QgcGNoX3VkY19kZXYgKmRldiA9IChzdHJ1Y3QgcGNoX3VkY19kZXYgKikgcGRldjsKKwl1MzIgZGV2X2ludHIsIGVwX2ludHI7CisJaW50IGk7CisKKwlkZXZfaW50ciA9IHBjaF91ZGNfcmVhZF9kZXZpY2VfaW50ZXJydXB0cyhkZXYpOworCWVwX2ludHIgPSBwY2hfdWRjX3JlYWRfZXBfaW50ZXJydXB0cyhkZXYpOworCisJaWYgKGRldl9pbnRyKQorCQkvKiBDbGVhciBkZXZpY2UgaW50ZXJydXB0cyAqLworCQlwY2hfdWRjX3dyaXRlX2RldmljZV9pbnRlcnJ1cHRzKGRldiwgZGV2X2ludHIpOworCWlmIChlcF9pbnRyKQorCQkvKiBDbGVhciBlcCBpbnRlcnJ1cHRzICovCisJCXBjaF91ZGNfd3JpdGVfZXBfaW50ZXJydXB0cyhkZXYsIGVwX2ludHIpOworCWlmICghZGV2X2ludHIgJiYgIWVwX2ludHIpCisJCXJldHVybiBJUlFfTk9ORTsKKwlzcGluX2xvY2soJmRldi0+bG9jayk7CisJaWYgKGRldl9pbnRyKQorCQlwY2hfdWRjX2Rldl9pc3IoZGV2LCBkZXZfaW50cik7CisJaWYgKGVwX2ludHIpIHsKKwkJcGNoX3VkY19yZWFkX2FsbF9lcHN0YXR1cyhkZXYsIGVwX2ludHIpOworCQkvKiBQcm9jZXNzIENvbnRyb2wgSW4gaW50ZXJydXB0cywgaWYgcHJlc2VudCAqLworCQlpZiAoZXBfaW50ciAmIFVEQ19FUElOVF9JTl9FUDApIHsKKwkJCXBjaF91ZGNfc3ZjX2NvbnRyb2xfaW4oZGV2KTsKKwkJCXBjaF91ZGNfcG9zdHN2Y19lcGludGVycyhkZXYsIDApOworCQl9CisJCS8qIFByb2Nlc3MgQ29udHJvbCBPdXQgaW50ZXJydXB0cywgaWYgcHJlc2VudCAqLworCQlpZiAoZXBfaW50ciAmIFVEQ19FUElOVF9PVVRfRVAwKQorCQkJcGNoX3VkY19zdmNfY29udHJvbF9vdXQoZGV2KTsKKwkJLyogUHJvY2VzcyBkYXRhIGluIGVuZCBwb2ludCBpbnRlcnJ1cHRzICovCisJCWZvciAoaSA9IDE7IGkgPCBQQ0hfVURDX1VTRURfRVBfTlVNOyBpKyspIHsKKwkJCWlmIChlcF9pbnRyICYgKDEgPDwgIGkpKSB7CisJCQkJcGNoX3VkY19zdmNfZGF0YV9pbihkZXYsIGkpOworCQkJCXBjaF91ZGNfcG9zdHN2Y19lcGludGVycyhkZXYsIGkpOworCQkJfQorCQl9CisJCS8qIFByb2Nlc3MgZGF0YSBvdXQgZW5kIHBvaW50IGludGVycnVwdHMgKi8KKwkJZm9yIChpID0gVURDX0VQSU5UX09VVF9TSElGVCArIDE7IGkgPCAoVURDX0VQSU5UX09VVF9TSElGVCArCisJCQkJCQkgUENIX1VEQ19VU0VEX0VQX05VTSk7IGkrKykKKwkJCWlmIChlcF9pbnRyICYgKDEgPDwgIGkpKQorCQkJCXBjaF91ZGNfc3ZjX2RhdGFfb3V0KGRldiwgaSAtCisJCQkJCQkJIFVEQ19FUElOVF9PVVRfU0hJRlQpOworCX0KKwlzcGluX3VubG9jaygmZGV2LT5sb2NrKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qKgorICogcGNoX3VkY19zZXR1cF9lcDAoKSAtIFRoaXMgZnVuY3Rpb24gZW5hYmxlcyBjb250cm9sIGVuZHBvaW50IGZvciB0cmFmZmljCisgKiBAZGV2OglSZWZlcmVuY2UgdG8gdGhlIGRldmljZSBzdHJ1Y3R1cmUKKyAqLworc3RhdGljIHZvaWQgcGNoX3VkY19zZXR1cF9lcDAoc3RydWN0IHBjaF91ZGNfZGV2ICpkZXYpCit7CisJLyogZW5hYmxlIGVwMCBpbnRlcnJ1cHRzICovCisJcGNoX3VkY19lbmFibGVfZXBfaW50ZXJydXB0cyhkZXYsIFVEQ19FUElOVF9JTl9FUDAgfAorCQkJCQkJVURDX0VQSU5UX09VVF9FUDApOworCS8qIGVuYWJsZSBkZXZpY2UgaW50ZXJydXB0cyAqLworCXBjaF91ZGNfZW5hYmxlX2ludGVycnVwdHMoZGV2LCBVRENfREVWSU5UX1VSIHwgVURDX0RFVklOVF9VUyB8CisJCQkJICAgICAgIFVEQ19ERVZJTlRfRVMgfCBVRENfREVWSU5UX0VOVU0gfAorCQkJCSAgICAgICBVRENfREVWSU5UX1NJIHwgVURDX0RFVklOVF9TQyk7Cit9CisKKy8qKgorICogZ2FkZ2V0X3JlbGVhc2UoKSAtIEZyZWUgdGhlIGdhZGdldCBkcml2ZXIgcHJpdmF0ZSBkYXRhCisgKiBAcGRldglyZWZlcmVuY2UgdG8gc3RydWN0IHBjaV9kZXYKKyAqLworc3RhdGljIHZvaWQgZ2FkZ2V0X3JlbGVhc2Uoc3RydWN0IGRldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcGNoX3VkY19kZXYgKmRldiA9IGRldl9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWtmcmVlKGRldik7Cit9CisKKy8qKgorICogcGNoX3VkY19wY2RfcmVpbml0KCkgLSBUaGlzIEFQSSBpbml0aWFsaXplcyB0aGUgZW5kcG9pbnQgc3RydWN0dXJlcworICogQGRldjoJUmVmZXJlbmNlIHRvIHRoZSBkcml2ZXIgc3RydWN0dXJlCisgKi8KK3N0YXRpYyB2b2lkIHBjaF91ZGNfcGNkX3JlaW5pdChzdHJ1Y3QgcGNoX3VkY19kZXYgKmRldikKK3sKKwljb25zdCBjaGFyICpjb25zdCBlcF9zdHJpbmdbXSA9IHsKKwkJZXAwX3N0cmluZywgImVwMG91dCIsICJlcDFpbiIsICJlcDFvdXQiLCAiZXAyaW4iLCAiZXAyb3V0IiwKKwkJImVwM2luIiwgImVwM291dCIsICJlcDRpbiIsICJlcDRvdXQiLCAiZXA1aW4iLCAiZXA1b3V0IiwKKwkJImVwNmluIiwgImVwNm91dCIsICJlcDdpbiIsICJlcDdvdXQiLCAiZXA4aW4iLCAiZXA4b3V0IiwKKwkJImVwOWluIiwgImVwOW91dCIsICJlcDEwaW4iLCAiZXAxMG91dCIsICJlcDExaW4iLCAiZXAxMW91dCIsCisJCSJlcDEyaW4iLCAiZXAxMm91dCIsICJlcDEzaW4iLCAiZXAxM291dCIsICJlcDE0aW4iLCAiZXAxNG91dCIsCisJCSJlcDE1aW4iLCAiZXAxNW91dCIsCisJfTsKKwlpbnQgaTsKKworCWRldi0+Z2FkZ2V0LnNwZWVkID0gVVNCX1NQRUVEX1VOS05PV047CisJSU5JVF9MSVNUX0hFQUQoJmRldi0+Z2FkZ2V0LmVwX2xpc3QpOworCisJLyogSW5pdGlhbGl6ZSB0aGUgZW5kcG9pbnRzIHN0cnVjdHVyZXMgKi8KKwltZW1zZXQoZGV2LT5lcCwgMCwgc2l6ZW9mIGRldi0+ZXApOworCWZvciAoaSA9IDA7IGkgPCBQQ0hfVURDX0VQX05VTTsgaSsrKSB7CisJCXN0cnVjdCBwY2hfdWRjX2VwICplcCA9ICZkZXYtPmVwW2ldOworCQllcC0+ZGV2ID0gZGV2OworCQllcC0+aGFsdGVkID0gMTsKKwkJZXAtPm51bSA9IGkgLyAyOworCQllcC0+aW4gPSB+aSAmIDE7CisJCWVwLT5lcC5uYW1lID0gZXBfc3RyaW5nW2ldOworCQllcC0+ZXAub3BzID0gJnBjaF91ZGNfZXBfb3BzOworCQlpZiAoZXAtPmluKQorCQkJZXAtPm9mZnNldF9hZGRyID0gZXAtPm51bSAqIFVEQ19FUF9SRUdfU0hJRlQ7CisJCWVsc2UKKwkJCWVwLT5vZmZzZXRfYWRkciA9IChVRENfRVBJTlRfT1VUX1NISUZUICsgZXAtPm51bSkgKgorCQkJCQkgIFVEQ19FUF9SRUdfU0hJRlQ7CisJCS8qIG5lZWQgdG8gc2V0IGVwLT5lcC5tYXhwYWNrZXQgYW5kIHNldCBEZWZhdWx0IENvbmZpZ3VyYXRpb24/Ki8KKwkJZXAtPmVwLm1heHBhY2tldCA9IFVEQ19CVUxLX01BWF9QS1RfU0laRTsKKwkJbGlzdF9hZGRfdGFpbCgmZXAtPmVwLmVwX2xpc3QsICZkZXYtPmdhZGdldC5lcF9saXN0KTsKKwkJSU5JVF9MSVNUX0hFQUQoJmVwLT5xdWV1ZSk7CisJfQorCWRldi0+ZXBbVURDX0VQMElOX0lEWF0uZXAubWF4cGFja2V0ID0gVURDX0VQMElOX01BWF9QS1RfU0laRTsKKwlkZXYtPmVwW1VEQ19FUDBPVVRfSURYXS5lcC5tYXhwYWNrZXQgPSBVRENfRVAwT1VUX01BWF9QS1RfU0laRTsKKworCWRldi0+ZG1hX2FkZHIgPSBwY2lfbWFwX3NpbmdsZShkZXYtPnBkZXYsIGRldi0+ZXAwb3V0X2J1ZiwgMjU2LAorCQkJCSAgUENJX0RNQV9GUk9NREVWSUNFKTsKKworCS8qIHJlbW92ZSBlcDAgaW4gYW5kIG91dCBmcm9tIHRoZSBsaXN0LiAgVGhleSBoYXZlIG93biBwb2ludGVyICovCisJbGlzdF9kZWxfaW5pdCgmZGV2LT5lcFtVRENfRVAwSU5fSURYXS5lcC5lcF9saXN0KTsKKwlsaXN0X2RlbF9pbml0KCZkZXYtPmVwW1VEQ19FUDBPVVRfSURYXS5lcC5lcF9saXN0KTsKKworCWRldi0+Z2FkZ2V0LmVwMCA9ICZkZXYtPmVwW1VEQ19FUDBJTl9JRFhdLmVwOworCUlOSVRfTElTVF9IRUFEKCZkZXYtPmdhZGdldC5lcDAtPmVwX2xpc3QpOworfQorCisvKioKKyAqIHBjaF91ZGNfcGNkX2luaXQoKSAtIFRoaXMgQVBJIGluaXRpYWxpemVzIHRoZSBkcml2ZXIgc3RydWN0dXJlCisgKiBAZGV2OglSZWZlcmVuY2UgdG8gdGhlIGRyaXZlciBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm4gY29kZXM6CisgKgkwOiBTdWNjZXNzCisgKi8KK3N0YXRpYyBpbnQgcGNoX3VkY19wY2RfaW5pdChzdHJ1Y3QgcGNoX3VkY19kZXYgKmRldikKK3sKKwlwY2hfdWRjX2luaXQoZGV2KTsKKwlwY2hfdWRjX3BjZF9yZWluaXQoZGV2KTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBpbml0X2RtYV9wb29scygpIC0gY3JlYXRlIGRtYSBwb29scyBkdXJpbmcgaW5pdGlhbGl6YXRpb24KKyAqIEBwZGV2OglyZWZlcmVuY2UgdG8gc3RydWN0IHBjaV9kZXYKKyAqLworc3RhdGljIGludCBpbml0X2RtYV9wb29scyhzdHJ1Y3QgcGNoX3VkY19kZXYgKmRldikKK3sKKwlzdHJ1Y3QgcGNoX3VkY19zdHBfZG1hX2Rlc2MJKnRkX3N0cDsKKwlzdHJ1Y3QgcGNoX3VkY19kYXRhX2RtYV9kZXNjCSp0ZF9kYXRhOworCisJLyogRE1BIHNldHVwICovCisJZGV2LT5kYXRhX3JlcXVlc3RzID0gcGNpX3Bvb2xfY3JlYXRlKCJkYXRhX3JlcXVlc3RzIiwgZGV2LT5wZGV2LAorCQlzaXplb2Yoc3RydWN0IHBjaF91ZGNfZGF0YV9kbWFfZGVzYyksIDAsIDApOworCWlmICghZGV2LT5kYXRhX3JlcXVlc3RzKSB7CisJCWRldl9lcnIoJmRldi0+cGRldi0+ZGV2LCAiJXM6IGNhbid0IGdldCByZXF1ZXN0IGRhdGEgcG9vbFxuIiwKKwkJCV9fZnVuY19fKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogZG1hIGRlc2MgZm9yIHNldHVwIGRhdGEgKi8KKwlkZXYtPnN0cF9yZXF1ZXN0cyA9IHBjaV9wb29sX2NyZWF0ZSgic2V0dXAgcmVxdWVzdHMiLCBkZXYtPnBkZXYsCisJCXNpemVvZihzdHJ1Y3QgcGNoX3VkY19zdHBfZG1hX2Rlc2MpLCAwLCAwKTsKKwlpZiAoIWRldi0+c3RwX3JlcXVlc3RzKSB7CisJCWRldl9lcnIoJmRldi0+cGRldi0+ZGV2LCAiJXM6IGNhbid0IGdldCBzZXR1cCByZXF1ZXN0IHBvb2xcbiIsCisJCQlfX2Z1bmNfXyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwkvKiBzZXR1cCAqLworCXRkX3N0cCA9IHBjaV9wb29sX2FsbG9jKGRldi0+c3RwX3JlcXVlc3RzLCBHRlBfS0VSTkVMLAorCQkJCSZkZXYtPmVwW1VEQ19FUDBPVVRfSURYXS50ZF9zdHBfcGh5cyk7CisJaWYgKCF0ZF9zdHApIHsKKwkJZGV2X2VycigmZGV2LT5wZGV2LT5kZXYsCisJCQkiJXM6IGNhbid0IGFsbG9jYXRlIHNldHVwIGRtYSBkZXNjcmlwdG9yXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlkZXYtPmVwW1VEQ19FUDBPVVRfSURYXS50ZF9zdHAgPSB0ZF9zdHA7CisKKwkvKiBkYXRhOiAwIHBhY2tldHMgIT8gKi8KKwl0ZF9kYXRhID0gcGNpX3Bvb2xfYWxsb2MoZGV2LT5kYXRhX3JlcXVlc3RzLCBHRlBfS0VSTkVMLAorCQkJCSZkZXYtPmVwW1VEQ19FUDBPVVRfSURYXS50ZF9kYXRhX3BoeXMpOworCWlmICghdGRfZGF0YSkgeworCQlkZXZfZXJyKCZkZXYtPnBkZXYtPmRldiwKKwkJCSIlczogY2FuJ3QgYWxsb2NhdGUgZGF0YSBkbWEgZGVzY3JpcHRvclxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJZGV2LT5lcFtVRENfRVAwT1VUX0lEWF0udGRfZGF0YSA9IHRkX2RhdGE7CisJZGV2LT5lcFtVRENfRVAwSU5fSURYXS50ZF9zdHAgPSBOVUxMOworCWRldi0+ZXBbVURDX0VQMElOX0lEWF0udGRfc3RwX3BoeXMgPSAwOworCWRldi0+ZXBbVURDX0VQMElOX0lEWF0udGRfZGF0YSA9IE5VTEw7CisJZGV2LT5lcFtVRENfRVAwSU5fSURYXS50ZF9kYXRhX3BoeXMgPSAwOworCXJldHVybiAwOworfQorCitpbnQgdXNiX2dhZGdldF9wcm9iZV9kcml2ZXIoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIsCisJaW50ICgqYmluZCkoc3RydWN0IHVzYl9nYWRnZXQgKikpCit7CisJc3RydWN0IHBjaF91ZGNfZGV2CSpkZXYgPSBwY2hfdWRjOworCWludAkJCXJldHZhbDsKKworCWlmICghZHJpdmVyIHx8IChkcml2ZXItPnNwZWVkID09IFVTQl9TUEVFRF9VTktOT1dOKSB8fCAhYmluZCB8fAorCSAgICAhZHJpdmVyLT5zZXR1cCB8fCAhZHJpdmVyLT51bmJpbmQgfHwgIWRyaXZlci0+ZGlzY29ubmVjdCkgeworCQlkZXZfZXJyKCZkZXYtPnBkZXYtPmRldiwKKwkJCSIlczogaW52YWxpZCBkcml2ZXIgcGFyYW1ldGVyXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICghZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmIChkZXYtPmRyaXZlcikgeworCQlkZXZfZXJyKCZkZXYtPnBkZXYtPmRldiwgIiVzOiBhbHJlYWR5IGJvdW5kXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCWRyaXZlci0+ZHJpdmVyLmJ1cyA9IE5VTEw7CisJZGV2LT5kcml2ZXIgPSBkcml2ZXI7CisJZGV2LT5nYWRnZXQuZGV2LmRyaXZlciA9ICZkcml2ZXItPmRyaXZlcjsKKworCS8qIEludm9rZSB0aGUgYmluZCByb3V0aW5lIG9mIHRoZSBnYWRnZXQgZHJpdmVyICovCisJcmV0dmFsID0gYmluZCgmZGV2LT5nYWRnZXQpOworCisJaWYgKHJldHZhbCkgeworCQlkZXZfZXJyKCZkZXYtPnBkZXYtPmRldiwgIiVzOiBiaW5kaW5nIHRvICVzIHJldHVybmluZyAlZFxuIiwKKwkJICAgICAgIF9fZnVuY19fLCBkcml2ZXItPmRyaXZlci5uYW1lLCByZXR2YWwpOworCQlkZXYtPmRyaXZlciA9IE5VTEw7CisJCWRldi0+Z2FkZ2V0LmRldi5kcml2ZXIgPSBOVUxMOworCQlyZXR1cm4gcmV0dmFsOworCX0KKwkvKiBnZXQgcmVhZHkgZm9yIGVwMCB0cmFmZmljICovCisJcGNoX3VkY19zZXR1cF9lcDAoZGV2KTsKKworCS8qIGNsZWFyIFNEICovCisJcGNoX3VkY19jbGVhcl9kaXNjb25uZWN0KGRldik7CisKKwlkZXYtPmNvbm5lY3RlZCA9IDE7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKHVzYl9nYWRnZXRfcHJvYmVfZHJpdmVyKTsKKworaW50IHVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIpCit7CisJc3RydWN0IHBjaF91ZGNfZGV2CSpkZXYgPSBwY2hfdWRjOworCisJaWYgKCFkZXYpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKCFkcml2ZXIgfHwgKGRyaXZlciAhPSBkZXYtPmRyaXZlcikpIHsKKwkJZGV2X2VycigmZGV2LT5wZGV2LT5kZXYsCisJCQkiJXM6IGludmFsaWQgZHJpdmVyIHBhcmFtZXRlclxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlwY2hfdWRjX2Rpc2FibGVfaW50ZXJydXB0cyhkZXYsIFVEQ19ERVZJTlRfTVNLKTsKKworCS8qIEFzc3VlcyB0aGF0IHRoZXJlIGFyZSBubyBwZW5kaW5nIHJlcXVldHMgd2l0aCB0aGlzIGRyaXZlciAqLworCWRyaXZlci0+dW5iaW5kKCZkZXYtPmdhZGdldCk7CisJZGV2LT5nYWRnZXQuZGV2LmRyaXZlciA9IE5VTEw7CisJZGV2LT5kcml2ZXIgPSBOVUxMOworCWRldi0+Y29ubmVjdGVkID0gMDsKKworCS8qIHNldCBTRCAqLworCXBjaF91ZGNfc2V0X2Rpc2Nvbm5lY3QoZGV2KTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wodXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcik7CisKK3N0YXRpYyB2b2lkIHBjaF91ZGNfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IHBjaF91ZGNfZGV2ICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisKKwlwY2hfdWRjX2Rpc2FibGVfaW50ZXJydXB0cyhkZXYsIFVEQ19ERVZJTlRfTVNLKTsKKwlwY2hfdWRjX2Rpc2FibGVfZXBfaW50ZXJydXB0cyhkZXYsIFVEQ19FUElOVF9NU0tfRElTQUJMRV9BTEwpOworCisJLyogZGlzYWJsZSB0aGUgcHVsbHVwIHNvIHRoZSBob3N0IHdpbGwgdGhpbmsgd2UncmUgZ29uZSAqLworCXBjaF91ZGNfc2V0X2Rpc2Nvbm5lY3QoZGV2KTsKK30KKworc3RhdGljIHZvaWQgcGNoX3VkY19yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IHBjaF91ZGNfZGV2CSpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisKKwkvKiBnYWRnZXQgZHJpdmVyIG11c3Qgbm90IGJlIHJlZ2lzdGVyZWQgKi8KKwlpZiAoZGV2LT5kcml2ZXIpCisJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCSIlczogZ2FkZ2V0IGRyaXZlciBzdGlsbCBib3VuZCEhIVxuIiwgX19mdW5jX18pOworCS8qIGRtYSBwb29sIGNsZWFudXAgKi8KKwlpZiAoZGV2LT5kYXRhX3JlcXVlc3RzKQorCQlwY2lfcG9vbF9kZXN0cm95KGRldi0+ZGF0YV9yZXF1ZXN0cyk7CisKKwlpZiAoZGV2LT5zdHBfcmVxdWVzdHMpIHsKKwkJLyogY2xlYW51cCBETUEgZGVzYydzIGZvciBlcDBpbiAqLworCQlpZiAoZGV2LT5lcFtVRENfRVAwT1VUX0lEWF0udGRfc3RwKSB7CisJCQlwY2lfcG9vbF9mcmVlKGRldi0+c3RwX3JlcXVlc3RzLAorCQkJCWRldi0+ZXBbVURDX0VQME9VVF9JRFhdLnRkX3N0cCwKKwkJCQlkZXYtPmVwW1VEQ19FUDBPVVRfSURYXS50ZF9zdHBfcGh5cyk7CisJCX0KKwkJaWYgKGRldi0+ZXBbVURDX0VQME9VVF9JRFhdLnRkX2RhdGEpIHsKKwkJCXBjaV9wb29sX2ZyZWUoZGV2LT5zdHBfcmVxdWVzdHMsCisJCQkJZGV2LT5lcFtVRENfRVAwT1VUX0lEWF0udGRfZGF0YSwKKwkJCQlkZXYtPmVwW1VEQ19FUDBPVVRfSURYXS50ZF9kYXRhX3BoeXMpOworCQl9CisJCXBjaV9wb29sX2Rlc3Ryb3koZGV2LT5zdHBfcmVxdWVzdHMpOworCX0KKworCXBjaF91ZGNfZXhpdChkZXYpOworCisJaWYgKGRldi0+aXJxX3JlZ2lzdGVyZWQpCisJCWZyZWVfaXJxKHBkZXYtPmlycSwgZGV2KTsKKwlpZiAoZGV2LT5iYXNlX2FkZHIpCisJCWlvdW5tYXAoZGV2LT5iYXNlX2FkZHIpOworCWlmIChkZXYtPm1lbV9yZWdpb24pCisJCXJlbGVhc2VfbWVtX3JlZ2lvbihkZXYtPnBoeXNfYWRkciwKKwkJCQkgICBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIFBDSF9VRENfUENJX0JBUikpOworCWlmIChkZXYtPmFjdGl2ZSkKKwkJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCWlmIChkZXYtPnJlZ2lzdGVyZWQpCisJCWRldmljZV91bnJlZ2lzdGVyKCZkZXYtPmdhZGdldC5kZXYpOworCWtmcmVlKGRldik7CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHBjaF91ZGNfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCBwY2hfdWRjX2RldiAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCisJcGNoX3VkY19kaXNhYmxlX2ludGVycnVwdHMoZGV2LCBVRENfREVWSU5UX01TSyk7CisJcGNoX3VkY19kaXNhYmxlX2VwX2ludGVycnVwdHMoZGV2LCBVRENfRVBJTlRfTVNLX0RJU0FCTEVfQUxMKTsKKworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzaG90LCAwKTsKKworCWlmIChwY2lfc2F2ZV9zdGF0ZShwZGV2KSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkiJXM6IGNvdWxkIG5vdCBzYXZlIFBDSSBjb25maWcgc3RhdGVcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgcGNpX2Nob29zZV9zdGF0ZShwZGV2LCBzdGF0ZSkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBjaF91ZGNfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCWludCByZXQ7CisKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7CisJcmV0ID0gcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICIlczogcGNpX3Jlc3RvcmVfc3RhdGUgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiByZXQ7CisJfQorCXJldCA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiJXM6IHBjaV9lbmFibGVfZGV2aWNlIGZhaWxlZFxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gcmV0OworCX0KKwlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzaG90LCAwKTsKKwlyZXR1cm4gMDsKK30KKyNlbHNlCisjZGVmaW5lIHBjaF91ZGNfc3VzcGVuZAlOVUxMCisjZGVmaW5lIHBjaF91ZGNfcmVzdW1lCU5VTEwKKyNlbmRpZiAvKiBDT05GSUdfUE0gKi8KKworc3RhdGljIGludCBwY2hfdWRjX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQkJICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCit7CisJdW5zaWduZWQgbG9uZwkJcmVzb3VyY2U7CisJdW5zaWduZWQgbG9uZwkJbGVuOworCWludAkJCXJldHZhbDsKKwlzdHJ1Y3QgcGNoX3VkY19kZXYJKmRldjsKKworCS8qIG9uZSB1ZGMgb25seSAqLworCWlmIChwY2hfdWRjKSB7CisJCXByX2VycigiJXM6IGFscmVhZHkgcHJvYmVkXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCS8qIGluaXQgKi8KKwlkZXYgPSBremFsbG9jKHNpemVvZiAqZGV2LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldikgeworCQlwcl9lcnIoIiVzOiBubyBtZW1vcnkgZm9yIGRldmljZSBzdHJ1Y3R1cmVcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCS8qIHBjaSBzZXR1cCAqLworCWlmIChwY2lfZW5hYmxlX2RldmljZShwZGV2KSA8IDApIHsKKwkJa2ZyZWUoZGV2KTsKKwkJcHJfZXJyKCIlczogcGNpX2VuYWJsZV9kZXZpY2UgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlkZXYtPmFjdGl2ZSA9IDE7CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGRldik7CisKKwkvKiBQQ0kgcmVzb3VyY2UgYWxsb2NhdGlvbiAqLworCXJlc291cmNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDEpOworCWxlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMSk7CisKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyZXNvdXJjZSwgbGVuLCBLQlVJTERfTU9ETkFNRSkpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiJXM6IHBjaSBkZXZpY2UgdXNlZCBhbHJlYWR5XG4iLCBfX2Z1bmNfXyk7CisJCXJldHZhbCA9IC1FQlVTWTsKKwkJZ290byBmaW5pc2hlZDsKKwl9CisJZGV2LT5waHlzX2FkZHIgPSByZXNvdXJjZTsKKwlkZXYtPm1lbV9yZWdpb24gPSAxOworCisJZGV2LT5iYXNlX2FkZHIgPSBpb3JlbWFwX25vY2FjaGUocmVzb3VyY2UsIGxlbik7CisJaWYgKCFkZXYtPmJhc2VfYWRkcikgeworCQlwcl9lcnIoIiVzOiBkZXZpY2UgbWVtb3J5IGNhbm5vdCBiZSBtYXBwZWRcbiIsIF9fZnVuY19fKTsKKwkJcmV0dmFsID0gLUVOT01FTTsKKwkJZ290byBmaW5pc2hlZDsKKwl9CisJaWYgKCFwZGV2LT5pcnEpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiJXM6IGlycSBub3Qgc2V0XG4iLCBfX2Z1bmNfXyk7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gZmluaXNoZWQ7CisJfQorCXBjaF91ZGMgPSBkZXY7CisJLyogaW5pdGlhbGl6ZSB0aGUgaGFyZHdhcmUgKi8KKwlpZiAocGNoX3VkY19wY2RfaW5pdChkZXYpKQorCQlnb3RvIGZpbmlzaGVkOworCWlmIChyZXF1ZXN0X2lycShwZGV2LT5pcnEsIHBjaF91ZGNfaXNyLCBJUlFGX1NIQVJFRCwgS0JVSUxEX01PRE5BTUUsCisJCQlkZXYpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIiVzOiByZXF1ZXN0X2lycSglZCkgZmFpbFxuIiwgX19mdW5jX18sCisJCQlwZGV2LT5pcnEpOworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIGZpbmlzaGVkOworCX0KKwlkZXYtPmlycSA9IHBkZXYtPmlycTsKKwlkZXYtPmlycV9yZWdpc3RlcmVkID0gMTsKKworCXBjaV9zZXRfbWFzdGVyKHBkZXYpOworCXBjaV90cnlfc2V0X213aShwZGV2KTsKKworCS8qIGRldmljZSBzdHJ1Y3Qgc2V0dXAgKi8KKwlzcGluX2xvY2tfaW5pdCgmZGV2LT5sb2NrKTsKKwlkZXYtPnBkZXYgPSBwZGV2OworCWRldi0+Z2FkZ2V0Lm9wcyA9ICZwY2hfdWRjX29wczsKKworCXJldHZhbCA9IGluaXRfZG1hX3Bvb2xzKGRldik7CisJaWYgKHJldHZhbCkKKwkJZ290byBmaW5pc2hlZDsKKworCWRldl9zZXRfbmFtZSgmZGV2LT5nYWRnZXQuZGV2LCAiZ2FkZ2V0Iik7CisJZGV2LT5nYWRnZXQuZGV2LnBhcmVudCA9ICZwZGV2LT5kZXY7CisJZGV2LT5nYWRnZXQuZGV2LmRtYV9tYXNrID0gcGRldi0+ZGV2LmRtYV9tYXNrOworCWRldi0+Z2FkZ2V0LmRldi5yZWxlYXNlID0gZ2FkZ2V0X3JlbGVhc2U7CisJZGV2LT5nYWRnZXQubmFtZSA9IEtCVUlMRF9NT0ROQU1FOworCWRldi0+Z2FkZ2V0LmlzX2R1YWxzcGVlZCA9IDE7CisKKwlyZXR2YWwgPSBkZXZpY2VfcmVnaXN0ZXIoJmRldi0+Z2FkZ2V0LmRldik7CisJaWYgKHJldHZhbCkKKwkJZ290byBmaW5pc2hlZDsKKwlkZXYtPnJlZ2lzdGVyZWQgPSAxOworCisJLyogUHV0IHRoZSBkZXZpY2UgaW4gZGlzY29ubmVjdGVkIHN0YXRlIHRpbGwgYSBkcml2ZXIgaXMgYm91bmQgKi8KKwlwY2hfdWRjX3NldF9kaXNjb25uZWN0KGRldik7CisJcmV0dXJuIDA7CisKK2ZpbmlzaGVkOgorCXBjaF91ZGNfcmVtb3ZlKHBkZXYpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShwY2hfdWRjX3BjaWRldl9pZCkgPSB7CisJeworCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfRUcyMFRfVURDKSwKKwkJLmNsYXNzID0gKFBDSV9DTEFTU19TRVJJQUxfVVNCIDw8IDgpIHwgMHhmZSwKKwkJLmNsYXNzX21hc2sgPSAweGZmZmZmZmZmLAorCX0sCisJeyAwIH0sCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgcGNoX3VkY19wY2lkZXZfaWQpOworCisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBwY2hfdWRjX2RyaXZlciA9IHsKKwkubmFtZSA9CUtCVUlMRF9NT0ROQU1FLAorCS5pZF90YWJsZSA9CXBjaF91ZGNfcGNpZGV2X2lkLAorCS5wcm9iZSA9CXBjaF91ZGNfcHJvYmUsCisJLnJlbW92ZSA9CXBjaF91ZGNfcmVtb3ZlLAorCS5zdXNwZW5kID0JcGNoX3VkY19zdXNwZW5kLAorCS5yZXN1bWUgPQlwY2hfdWRjX3Jlc3VtZSwKKwkuc2h1dGRvd24gPQlwY2hfdWRjX3NodXRkb3duLAorfTsKKworc3RhdGljIGludCBfX2luaXQgcGNoX3VkY19wY2lfaW5pdCh2b2lkKQoreworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZwY2hfdWRjX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdChwY2hfdWRjX3BjaV9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHBjaF91ZGNfcGNpX2V4aXQodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnBjaF91ZGNfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHBjaF91ZGNfcGNpX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkludGVsIEVHMjBUIFVTQiBEZXZpY2UgQ29udHJvbGxlciIpOworTU9EVUxFX0FVVEhPUigiT0tJIFNFTUlDT05EVUNUT1IsIDx0b3NoaWhhcnUtbGludXhAZHNuLm9raXNlbWkuY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3VfYXVkaW8uYyBiL2RyaXZlcnMvdXNiL2dhZGdldC91X2F1ZGlvLmMKaW5kZXggN2E4NmQyYy4uNTlmZmUxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3VfYXVkaW8uYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvdV9hdWRpby5jCkBAIC0yNTUsNiArMjU1LDcgQEAKIAkJRVJST1IoY2FyZCwgIk5vIHN1Y2ggUENNIGNhcHR1cmUgZGV2aWNlOiAlc1xuIiwgZm5fY2FwKTsKIAkJc25kLT5zdWJzdHJlYW0gPSBOVUxMOwogCQlzbmQtPmNhcmQgPSBOVUxMOworCQlzbmQtPmZpbHAgPSBOVUxMOwogCX0gZWxzZSB7CiAJCXBjbV9maWxlID0gc25kLT5maWxwLT5wcml2YXRlX2RhdGE7CiAJCXNuZC0+c3Vic3RyZWFtID0gcGNtX2ZpbGUtPnN1YnN0cmVhbTsKQEAgLTI3MywxNyArMjc0LDE3IEBACiAKIAkvKiBDbG9zZSBjb250cm9sIGRldmljZSAqLwogCXNuZCA9ICZnYXUtPmNvbnRyb2w7Ci0JaWYgKCFJU19FUlIoc25kLT5maWxwKSkKKwlpZiAoc25kLT5maWxwKQogCQlmaWxwX2Nsb3NlKHNuZC0+ZmlscCwgY3VycmVudC0+ZmlsZXMpOwogCiAJLyogQ2xvc2UgUENNIHBsYXliYWNrIGRldmljZSBhbmQgc2V0dXAgc3Vic3RyZWFtICovCiAJc25kID0gJmdhdS0+cGxheWJhY2s7Ci0JaWYgKCFJU19FUlIoc25kLT5maWxwKSkKKwlpZiAoc25kLT5maWxwKQogCQlmaWxwX2Nsb3NlKHNuZC0+ZmlscCwgY3VycmVudC0+ZmlsZXMpOwogCiAJLyogQ2xvc2UgUENNIGNhcHR1cmUgZGV2aWNlIGFuZCBzZXR1cCBzdWJzdHJlYW0gKi8KIAlzbmQgPSAmZ2F1LT5jYXB0dXJlOwotCWlmICghSVNfRVJSKHNuZC0+ZmlscCkpCisJaWYgKHNuZC0+ZmlscCkKIAkJZmlscF9jbG9zZShzbmQtPmZpbHAsIGN1cnJlbnQtPmZpbGVzKTsKIAogCXJldHVybiAwOwpAQCAtMzA0LDggKzMwNSw3IEBACiAJcmV0ID0gZ2F1ZGlvX29wZW5fc25kX2RldihjYXJkKTsKIAlpZiAocmV0KQogCQlFUlJPUihjYXJkLCAid2UgbmVlZCBhdCBsZWFzdCBvbmUgY29udHJvbCBkZXZpY2VcbiIpOwotCi0JaWYgKCF0aGVfY2FyZCkKKwllbHNlIGlmICghdGhlX2NhcmQpCiAJCXRoZV9jYXJkID0gY2FyZDsKIAogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvdV9ldGhlci5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3VfZXRoZXIuYwppbmRleCBmYmU4NmNhLi4xZWRhOTY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvdV9ldGhlci5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC91X2V0aGVyLmMKQEAgLTI0MCw2ICsyNDAsOSBAQAogCXNpemUgKz0gb3V0LT5tYXhwYWNrZXQgLSAxOwogCXNpemUgLT0gc2l6ZSAlIG91dC0+bWF4cGFja2V0OwogCisJaWYgKGRldi0+cG9ydF91c2ItPmlzX2ZpeGVkKQorCQlzaXplID0gbWF4KHNpemUsIGRldi0+cG9ydF91c2ItPmZpeGVkX291dF9sZW4pOworCiAJc2tiID0gYWxsb2Nfc2tiKHNpemUgKyBORVRfSVBfQUxJR04sIGdmcF9mbGFncyk7CiAJaWYgKHNrYiA9PSBOVUxMKSB7CiAJCURCRyhkZXYsICJubyByeCBza2JcbiIpOwpAQCAtNTc4LDEyICs1ODEsMTkgQEAKIAlyZXEtPmNvbnRleHQgPSBza2I7CiAJcmVxLT5jb21wbGV0ZSA9IHR4X2NvbXBsZXRlOwogCisJLyogTkNNIHJlcXVpcmVzIG5vIHpscCBpZiB0cmFuc2ZlciBpcyBkd050YkluTWF4U2l6ZSAqLworCWlmIChkZXYtPnBvcnRfdXNiLT5pc19maXhlZCAmJgorCSAgICBsZW5ndGggPT0gZGV2LT5wb3J0X3VzYi0+Zml4ZWRfaW5fbGVuICYmCisJICAgIChsZW5ndGggJSBpbi0+bWF4cGFja2V0KSA9PSAwKQorCQlyZXEtPnplcm8gPSAwOworCWVsc2UKKwkJcmVxLT56ZXJvID0gMTsKKwogCS8qIHVzZSB6bHAgZnJhbWluZyBvbiB0eCBmb3Igc3RyaWN0IENEQy1FdGhlciBjb25mb3JtYW5jZSwKIAkgKiB0aG91Z2ggYW55IHJvYnVzdCBuZXR3b3JrIHJ4IHBhdGggaWdub3JlcyBleHRyYSBwYWRkaW5nLgogCSAqIGFuZCBzb21lIGhhcmR3YXJlIGRvZXNuJ3QgbGlrZSB0byB3cml0ZSB6bHBzLgogCSAqLwotCXJlcS0+emVybyA9IDE7Ci0JaWYgKCFkZXYtPnpscCAmJiAobGVuZ3RoICUgaW4tPm1heHBhY2tldCkgPT0gMCkKKwlpZiAocmVxLT56ZXJvICYmICFkZXYtPnpscCAmJiAobGVuZ3RoICUgaW4tPm1heHBhY2tldCkgPT0gMCkKIAkJbGVuZ3RoKys7CiAKIAlyZXEtPmxlbmd0aCA9IGxlbmd0aDsKQEAgLTgyOSwxMSArODM5LDkgQEAKIAkJcmV0dXJuOwogCiAJdW5yZWdpc3Rlcl9uZXRkZXYodGhlX2Rldi0+bmV0KTsKKwlmbHVzaF93b3JrX3N5bmMoJnRoZV9kZXYtPndvcmspOwogCWZyZWVfbmV0ZGV2KHRoZV9kZXYtPm5ldCk7CiAKLQkvKiBhc3N1bWluZyB3ZSB1c2VkIGtldmVudGQsIGl0IG11c3QgcXVpZXNjZSB0b28gKi8KLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwotCiAJdGhlX2RldiA9IE5VTEw7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC91X2V0aGVyLmggYi9kcml2ZXJzL3VzYi9nYWRnZXQvdV9ldGhlci5oCmluZGV4IDNjOGMwYzkuLmI1NmUxZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC91X2V0aGVyLmgKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3VfZXRoZXIuaApAQCAtNjIsNiArNjIsMTAgQEAKIAogCS8qIGhvb2tzIGZvciBhZGRlZCBmcmFtaW5nLCBhcyBuZWVkZWQgZm9yIFJORElTIGFuZCBFRU0uICovCiAJdTMyCQkJCWhlYWRlcl9sZW47CisJLyogTkNNIHJlcXVpcmVzIGZpeGVkIHNpemUgYnVuZGxlcyAqLworCWJvb2wJCQkJaXNfZml4ZWQ7CisJdTMyCQkJCWZpeGVkX291dF9sZW47CisJdTMyCQkJCWZpeGVkX2luX2xlbjsKIAlzdHJ1Y3Qgc2tfYnVmZgkJCSooKndyYXApKHN0cnVjdCBnZXRoZXIgKnBvcnQsCiAJCQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAlpbnQJCQkJKCp1bndyYXApKHN0cnVjdCBnZXRoZXIgKnBvcnQsCkBAIC0xMDMsNiArMTA3LDcgQEAKIC8qIGVhY2ggY29uZmlndXJhdGlvbiBtYXkgYmluZCBvbmUgaW5zdGFuY2Ugb2YgYW4gZXRoZXJuZXQgbGluayAqLwogaW50IGdldGhfYmluZF9jb25maWcoc3RydWN0IHVzYl9jb25maWd1cmF0aW9uICpjLCB1OCBldGhhZGRyW0VUSF9BTEVOXSk7CiBpbnQgZWNtX2JpbmRfY29uZmlnKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYywgdTggZXRoYWRkcltFVEhfQUxFTl0pOworaW50IG5jbV9iaW5kX2NvbmZpZyhzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKmMsIHU4IGV0aGFkZHJbRVRIX0FMRU5dKTsKIGludCBlZW1fYmluZF9jb25maWcoc3RydWN0IHVzYl9jb25maWd1cmF0aW9uICpjKTsKIAogI2lmZGVmIFVTQl9FVEhfUk5ESVMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZwppbmRleCA2ZjRmOGU2Li4yNDA0NmMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvaG9zdC9LY29uZmlnCkBAIC0xMzMsNiArMTMzLDI1IEBACiAJLS0taGVscC0tLQogCSAgVmFyaWF0aW9uIG9mIEFSQyBVU0IgYmxvY2sgdXNlZCBpbiBzb21lIEZyZWVzY2FsZSBjaGlwcy4KIAorY29uZmlnIFVTQl9FSENJX0hDRF9PTUFQCisJYm9vbCAiRUhDSSBzdXBwb3J0IGZvciBPTUFQMyBhbmQgbGF0ZXIgY2hpcHMiCisJZGVwZW5kcyBvbiBVU0JfRUhDSV9IQ0QgJiYgQVJDSF9PTUFQCisJZGVmYXVsdCB5CisJLS0tIGhlbHAgLS0tCisJICBFbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBvbi1jaGlwIEVIQ0kgY29udHJvbGxlciBvbgorCSAgT01BUDMgYW5kIGxhdGVyIGNoaXBzLgorCitjb25maWcgVVNCX0VIQ0lfTVNNCisJYm9vbCAiU3VwcG9ydCBmb3IgTVNNIG9uLWNoaXAgRUhDSSBVU0IgY29udHJvbGxlciIKKwlkZXBlbmRzIG9uIFVTQl9FSENJX0hDRCAmJiBBUkNIX01TTQorCXNlbGVjdCBVU0JfRUhDSV9ST09UX0hVQl9UVAorCXNlbGVjdCBVU0JfTVNNX09UR183MksKKwktLS1oZWxwLS0tCisJICBFbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBVU0IgSG9zdCBjb250cm9sbGVyIHByZXNlbnQgb24gdGhlCisJICBRdWFsY29tbSBjaGlwc2V0cy4gUm9vdCBIdWIgaGFzIGluYnVpbHQgVFQuCisJICBUaGlzIGRyaXZlciBkZXBlbmRzIG9uIE9URyBkcml2ZXIgZm9yIFBIWSBpbml0aWFsaXphdGlvbiwKKwkgIGNsb2NrIG1hbmFnZW1lbnQsIHBvd2VyaW5nIHVwIFZCVVMsIGFuZCBwb3dlciBtYW5hZ2VtZW50LgorCiBjb25maWcgVVNCX0VIQ0lfSENEX1BQQ19PRgogCWJvb2wgIkVIQ0kgc3VwcG9ydCBmb3IgUFBDIFVTQiBjb250cm9sbGVyIG9uIE9GIHBsYXRmb3JtIGJ1cyIKIAlkZXBlbmRzIG9uIFVTQl9FSENJX0hDRCAmJiBQUENfT0YKQEAgLTE0Nyw2ICsxNjYsMTQgQEAKIAktLS1oZWxwLS0tCiAJCUVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIFc5MFg5MDAgVVNCIGNvbnRyb2xsZXIKIAorY29uZmlnIFVTQl9DTlMzWFhYX0VIQ0kKKwlib29sICJDYXZpdW0gQ05TM1hYWCBFSENJIE1vZHVsZSIKKwlkZXBlbmRzIG9uIFVTQl9FSENJX0hDRCAmJiBBUkNIX0NOUzNYWFgKKwktLS1oZWxwLS0tCisJICBFbmFibGUgc3VwcG9ydCBmb3IgdGhlIENOUzNYWFggU09DJ3Mgb24tY2hpcCBFSENJIGNvbnRyb2xsZXIuCisJICBJdCBpcyBuZWVkZWQgZm9yIGhpZ2gtc3BlZWQgKDQ4ME1iaXQvc2VjKSBVU0IgMi4wIGRldmljZQorCSAgc3VwcG9ydC4KKwogY29uZmlnIFVTQl9PWFUyMTBIUF9IQ0QKIAl0cmlzdGF0ZSAiT1hVMjEwSFAgSENEIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBVU0IKQEAgLTI4Niw2ICszMTMsMTMgQEAKIAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAorY29uZmlnIFVTQl9DTlMzWFhYX09IQ0kKKwlib29sICJDYXZpdW0gQ05TM1hYWCBPSENJIE1vZHVsZSIKKwlkZXBlbmRzIG9uIFVTQl9PSENJX0hDRCAmJiBBUkNIX0NOUzNYWFgKKwktLS1oZWxwLS0tCisJICBFbmFibGUgc3VwcG9ydCBmb3IgdGhlIENOUzNYWFggU09DJ3Mgb24tY2hpcCBPSENJIGNvbnRyb2xsZXIuCisJICBJdCBpcyBuZWVkZWQgZm9yIGxvdy1zcGVlZCBVU0IgMS4wIGRldmljZSBzdXBwb3J0LgorCiBjb25maWcgVVNCX09IQ0lfQklHX0VORElBTl9ERVNDCiAJYm9vbAogCWRlcGVuZHMgb24gVVNCX09IQ0lfSENECmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktYXRtZWwuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1hdG1lbC5jCmluZGV4IDUxYmQwZWQuLmQ2YTY5ZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1hdG1lbC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1hdG1lbC5jCkBAIC05OSw2ICs5OSw3IEBACiAJLnVyYl9lbnF1ZXVlCQk9IGVoY2lfdXJiX2VucXVldWUsCiAJLnVyYl9kZXF1ZXVlCQk9IGVoY2lfdXJiX2RlcXVldWUsCiAJLmVuZHBvaW50X2Rpc2FibGUJPSBlaGNpX2VuZHBvaW50X2Rpc2FibGUsCisJLmVuZHBvaW50X3Jlc2V0CQk9IGVoY2lfZW5kcG9pbnRfcmVzZXQsCiAKIAkvKiBzY2hlZHVsaW5nIHN1cHBvcnQgKi8KIAkuZ2V0X2ZyYW1lX251bWJlcgk9IGVoY2lfZ2V0X2ZyYW1lLApAQCAtMTEwLDYgKzExMSw4IEBACiAJLmJ1c19yZXN1bWUJCT0gZWhjaV9idXNfcmVzdW1lLAogCS5yZWxpbnF1aXNoX3BvcnQJPSBlaGNpX3JlbGlucXVpc2hfcG9ydCwKIAkucG9ydF9oYW5kZWRfb3Zlcgk9IGVoY2lfcG9ydF9oYW5kZWRfb3ZlciwKKworCS5jbGVhcl90dF9idWZmZXJfY29tcGxldGUJPSBlaGNpX2NsZWFyX3R0X2J1ZmZlcl9jb21wbGV0ZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGVoY2lfYXRtZWxfZHJ2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktY25zM3h4eC5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWNuczN4eHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDhhMDViCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWNuczN4eHguYwpAQCAtMCwwICsxLDE3MSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA4IENhdml1bSBOZXR3b3JrcworICoKKyAqIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBWZXJzaW9uIDIsIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvYXRvbWljLmg+CisjaW5jbHVkZSA8bWFjaC9jbnMzeHh4Lmg+CisjaW5jbHVkZSA8bWFjaC9wbS5oPgorCitzdGF0aWMgaW50IGNuczN4eHhfZWhjaV9pbml0KHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJc3RydWN0IGVoY2lfaGNkICplaGNpID0gaGNkX3RvX2VoY2koaGNkKTsKKwlpbnQgcmV0dmFsOworCisJLyoKKwkgKiBFSENJIGFuZCBPSENJIHNoYXJlIHRoZSBzYW1lIGNsb2NrIGFuZCBwb3dlciwKKwkgKiByZXNldHRpbmcgdHdpY2Ugd291bGQgY2F1c2UgdGhlIDFzdCBjb250cm9sbGVyIGJlZW4gcmVzZXQuCisJICogVGhlcmVmb3JlIG9ubHkgZG8gcG93ZXIgdXAgIGF0IHRoZSBmaXJzdCB1cCBkZXZpY2UsIGFuZAorCSAqIHBvd2VyIGRvd24gYXQgdGhlIGxhc3QgZG93biBkZXZpY2UuCisJICoKKwkgKiBTZXQgVVNCIEFIQiBJTkNSIGxlbmd0aCB0byAxNgorCSAqLworCWlmIChhdG9taWNfaW5jX3JldHVybigmdXNiX3B3cl9yZWYpID09IDEpIHsKKwkJY25zM3h4eF9wd3JfcG93ZXJfdXAoMSA8PCBQTV9QTExfSE1fUERfQ1RSTF9SRUdfT0ZGU0VUX1BMTF9VU0IpOworCQljbnMzeHh4X3B3cl9jbGtfZW4oMSA8PCBQTV9DTEtfR0FURV9SRUdfT0ZGU0VUX1VTQl9IT1NUKTsKKwkJY25zM3h4eF9wd3Jfc29mdF9yc3QoMSA8PCBQTV9TT0ZUX1JTVF9SRUdfT0ZGU1RfVVNCX0hPU1QpOworCQlfX3Jhd193cml0ZWwoKF9fcmF3X3JlYWRsKE1JU0NfQ0hJUF9DT05GSUdfUkVHKSB8ICgwWDIgPDwgMjQpKSwKKwkJCU1JU0NfQ0hJUF9DT05GSUdfUkVHKTsKKwl9CisKKwllaGNpLT5jYXBzID0gaGNkLT5yZWdzOworCWVoY2ktPnJlZ3MgPSBoY2QtPnJlZ3MKKwkJKyBIQ19MRU5HVEgoZWhjaV9yZWFkbChlaGNpLCAmZWhjaS0+Y2Fwcy0+aGNfY2FwYmFzZSkpOworCWVoY2ktPmhjc19wYXJhbXMgPSBlaGNpX3JlYWRsKGVoY2ksICZlaGNpLT5jYXBzLT5oY3NfcGFyYW1zKTsKKworCWhjZC0+aGFzX3R0ID0gMDsKKwllaGNpX3Jlc2V0KGVoY2kpOworCisJcmV0dmFsID0gZWhjaV9pbml0KGhjZCk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWVoY2lfcG9ydF9wb3dlcihlaGNpLCAwKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGNfZHJpdmVyIGNuczN4eHhfZWhjaV9oY19kcml2ZXIgPSB7CisJLmRlc2NyaXB0aW9uCQk9IGhjZF9uYW1lLAorCS5wcm9kdWN0X2Rlc2MJCT0gIkNOUzNYWFggRUhDSSBIb3N0IENvbnRyb2xsZXIiLAorCS5oY2RfcHJpdl9zaXplCQk9IHNpemVvZihzdHJ1Y3QgZWhjaV9oY2QpLAorCS5pcnEJCQk9IGVoY2lfaXJxLAorCS5mbGFncwkJCT0gSENEX01FTU9SWSB8IEhDRF9VU0IyLAorCS5yZXNldAkJCT0gY25zM3h4eF9laGNpX2luaXQsCisJLnN0YXJ0CQkJPSBlaGNpX3J1biwKKwkuc3RvcAkJCT0gZWhjaV9zdG9wLAorCS5zaHV0ZG93bgkJPSBlaGNpX3NodXRkb3duLAorCS51cmJfZW5xdWV1ZQkJPSBlaGNpX3VyYl9lbnF1ZXVlLAorCS51cmJfZGVxdWV1ZQkJPSBlaGNpX3VyYl9kZXF1ZXVlLAorCS5lbmRwb2ludF9kaXNhYmxlCT0gZWhjaV9lbmRwb2ludF9kaXNhYmxlLAorCS5lbmRwb2ludF9yZXNldAkJPSBlaGNpX2VuZHBvaW50X3Jlc2V0LAorCS5nZXRfZnJhbWVfbnVtYmVyCT0gZWhjaV9nZXRfZnJhbWUsCisJLmh1Yl9zdGF0dXNfZGF0YQk9IGVoY2lfaHViX3N0YXR1c19kYXRhLAorCS5odWJfY29udHJvbAkJPSBlaGNpX2h1Yl9jb250cm9sLAorI2lmZGVmIENPTkZJR19QTQorCS5idXNfc3VzcGVuZAkJPSBlaGNpX2J1c19zdXNwZW5kLAorCS5idXNfcmVzdW1lCQk9IGVoY2lfYnVzX3Jlc3VtZSwKKyNlbmRpZgorCS5yZWxpbnF1aXNoX3BvcnQJPSBlaGNpX3JlbGlucXVpc2hfcG9ydCwKKwkucG9ydF9oYW5kZWRfb3Zlcgk9IGVoY2lfcG9ydF9oYW5kZWRfb3ZlciwKKworCS5jbGVhcl90dF9idWZmZXJfY29tcGxldGUJPSBlaGNpX2NsZWFyX3R0X2J1ZmZlcl9jb21wbGV0ZSwKK307CisKK3N0YXRpYyBpbnQgY25zM3h4eF9laGNpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkOworCWNvbnN0IHN0cnVjdCBoY19kcml2ZXIgKmRyaXZlciA9ICZjbnMzeHh4X2VoY2lfaGNfZHJpdmVyOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCBpcnE7CisJaW50IHJldHZhbDsKKworCWlmICh1c2JfZGlzYWJsZWQoKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIDApOworCWlmICghcmVzKSB7CisJCWRldl9lcnIoZGV2LCAiRm91bmQgSEMgd2l0aCBubyBJUlEuXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWlycSA9IHJlcy0+c3RhcnQ7CisKKwloY2QgPSB1c2JfY3JlYXRlX2hjZChkcml2ZXIsICZwZGV2LT5kZXYsIGRldl9uYW1lKCZwZGV2LT5kZXYpKTsKKwlpZiAoIWhjZCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVzKSB7CisJCWRldl9lcnIoZGV2LCAiRm91bmQgSEMgd2l0aCBubyByZWdpc3RlciBhZGRyLlxuIik7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyMTsKKwl9CisKKwloY2QtPnJzcmNfc3RhcnQgPSByZXMtPnN0YXJ0OworCWhjZC0+cnNyY19sZW4gPSByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxOworCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuLAorCQkJCWRyaXZlci0+ZGVzY3JpcHRpb24pKSB7CisJCWRldl9kYmcoZGV2LCAiY29udHJvbGxlciBhbHJlYWR5IGluIHVzZVxuIik7CisJCXJldHZhbCA9IC1FQlVTWTsKKwkJZ290byBlcnIxOworCX0KKworCWhjZC0+cmVncyA9IGlvcmVtYXAoaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuKTsKKwlpZiAoaGNkLT5yZWdzID09IE5VTEwpIHsKKwkJZGV2X2RiZyhkZXYsICJlcnJvciBtYXBwaW5nIG1lbW9yeVxuIik7CisJCXJldHZhbCA9IC1FRkFVTFQ7CisJCWdvdG8gZXJyMjsKKwl9CisKKwlyZXR2YWwgPSB1c2JfYWRkX2hjZChoY2QsIGlycSwgSVJRRl9TSEFSRUQpOworCWlmIChyZXR2YWwgPT0gMCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWlvdW5tYXAoaGNkLT5yZWdzKTsKK2VycjI6CisJcmVsZWFzZV9tZW1fcmVnaW9uKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7CitlcnIxOgorCXVzYl9wdXRfaGNkKGhjZCk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IGNuczN4eHhfZWhjaV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwl1c2JfcmVtb3ZlX2hjZChoY2QpOworCWlvdW5tYXAoaGNkLT5yZWdzKTsKKwlyZWxlYXNlX21lbV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuKTsKKworCS8qCisJICogRUhDSSBhbmQgT0hDSSBzaGFyZSB0aGUgc2FtZSBjbG9jayBhbmQgcG93ZXIsCisJICogcmVzZXR0aW5nIHR3aWNlIHdvdWxkIGNhdXNlIHRoZSAxc3QgY29udHJvbGxlciBiZWVuIHJlc2V0LgorCSAqIFRoZXJlZm9yZSBvbmx5IGRvIHBvd2VyIHVwICBhdCB0aGUgZmlyc3QgdXAgZGV2aWNlLCBhbmQKKwkgKiBwb3dlciBkb3duIGF0IHRoZSBsYXN0IGRvd24gZGV2aWNlLgorCSAqLworCWlmIChhdG9taWNfZGVjX3JldHVybigmdXNiX3B3cl9yZWYpID09IDApCisJCWNuczN4eHhfcHdyX2Nsa19kaXMoMSA8PCBQTV9DTEtfR0FURV9SRUdfT0ZGU0VUX1VTQl9IT1NUKTsKKworCXVzYl9wdXRfaGNkKGhjZCk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKworCXJldHVybiAwOworfQorCitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOmNuczN4eHgtZWhjaSIpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBjbnMzeHh4X2VoY2lfZHJpdmVyID0geworCS5wcm9iZSA9IGNuczN4eHhfZWhjaV9wcm9iZSwKKwkucmVtb3ZlID0gY25zM3h4eF9laGNpX3JlbW92ZSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJjbnMzeHh4LWVoY2kiLAorCX0sCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWRiZy5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWRiZy5jCmluZGV4IDZlMjU5OTYuLjNiZTIzOGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1kYmcuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZGJnLmMKQEAgLTg3OSw3ICs4NzksNyBAQAogCWludCByZXQgPSAwOwogCiAJaWYgKCFidWYtPm91dHB1dF9idWYpCi0JCWJ1Zi0+b3V0cHV0X2J1ZiA9IChjaGFyICopdm1hbGxvYyhidWYtPmFsbG9jX3NpemUpOworCQlidWYtPm91dHB1dF9idWYgPSB2bWFsbG9jKGJ1Zi0+YWxsb2Nfc2l6ZSk7CiAKIAlpZiAoIWJ1Zi0+b3V0cHV0X2J1ZikgewogCQlyZXQgPSAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWhjZC5jCmluZGV4IGU5MDYyODAuLjZmZWUzY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaGNkLmMKQEAgLTExNCw2ICsxMTQsOSBAQAogCiAjZGVmaW5lCUlOVFJfTUFTSyAoU1RTX0lBQSB8IFNUU19GQVRBTCB8IFNUU19QQ0QgfCBTVFNfRVJSIHwgU1RTX0lOVCkKIAorLyogZm9yIEFTUE0gcXVpcmsgb2YgSVNPQyBvbiBBTUQgU0I4MDAgKi8KK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldiAqYW1kX25iX2RldjsKKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogI2luY2x1ZGUgImVoY2kuaCIKQEAgLTUyOSw2ICs1MzIsMTEgQEAKIAlzcGluX3VubG9ja19pcnEgKCZlaGNpLT5sb2NrKTsKIAllaGNpX21lbV9jbGVhbnVwIChlaGNpKTsKIAorCWlmIChhbWRfbmJfZGV2KSB7CisJCXBjaV9kZXZfcHV0KGFtZF9uYl9kZXYpOworCQlhbWRfbmJfZGV2ID0gTlVMTDsKKwl9CisKICNpZmRlZglFSENJX1NUQVRTCiAJZWhjaV9kYmcgKGVoY2ksICJpcnEgbm9ybWFsICVsZCBlcnIgJWxkIHJlY2xhaW0gJWxkIChsb3N0ICVsZClcbiIsCiAJCWVoY2ktPnN0YXRzLm5vcm1hbCwgZWhjaS0+c3RhdHMuZXJyb3IsIGVoY2ktPnN0YXRzLnJlY2xhaW0sCkBAIC0xMTY2LDEyICsxMTc0LDE3IEBACiAjZGVmaW5lIFBMQVRGT1JNX0RSSVZFUgkJZWhjaV9teGNfZHJpdmVyCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYKKyNpbmNsdWRlICJlaGNpLXNoLmMiCisjZGVmaW5lIFBMQVRGT1JNX0RSSVZFUgkJZWhjaV9oY2Rfc2hfZHJpdmVyCisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19TT0NfQVUxMjAwCiAjaW5jbHVkZSAiZWhjaS1hdTF4eHguYyIKICNkZWZpbmUJUExBVEZPUk1fRFJJVkVSCQllaGNpX2hjZF9hdTF4eHhfZHJpdmVyCiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19BUkNIX09NQVAzCisjaWZkZWYgQ09ORklHX1VTQl9FSENJX0hDRF9PTUFQCiAjaW5jbHVkZSAiZWhjaS1vbWFwLmMiCiAjZGVmaW5lICAgICAgICBQTEFURk9STV9EUklWRVIgICAgICAgICBlaGNpX2hjZF9vbWFwX2RyaXZlcgogI2VuZGlmCkBAIC0xMjE2LDYgKzEyMjksMjYgQEAKICNkZWZpbmUgUExBVEZPUk1fRFJJVkVSCQllaGNpX29jdGVvbl9kcml2ZXIKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX1VTQl9DTlMzWFhYX0VIQ0kKKyNpbmNsdWRlICJlaGNpLWNuczN4eHguYyIKKyNkZWZpbmUgUExBVEZPUk1fRFJJVkVSCQljbnMzeHh4X2VoY2lfZHJpdmVyCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19BUkNIX1ZUODUwMAorI2luY2x1ZGUgImVoY2ktdnQ4NTAwLmMiCisjZGVmaW5lCVBMQVRGT1JNX0RSSVZFUgkJdnQ4NTAwX2VoY2lfZHJpdmVyCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19QTEFUX1NQRUFSCisjaW5jbHVkZSAiZWhjaS1zcGVhci5jIgorI2RlZmluZSBQTEFURk9STV9EUklWRVIJCXNwZWFyX2VoY2lfaGNkX2RyaXZlcgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVVNCX0VIQ0lfTVNNCisjaW5jbHVkZSAiZWhjaS1tc20uYyIKKyNkZWZpbmUgUExBVEZPUk1fRFJJVkVSCQllaGNpX21zbV9kcml2ZXIKKyNlbmRpZgorCiAjaWYgIWRlZmluZWQoUENJX0RSSVZFUikgJiYgIWRlZmluZWQoUExBVEZPUk1fRFJJVkVSKSAmJiBcCiAgICAgIWRlZmluZWQoUFMzX1NZU1RFTV9CVVNfRFJJVkVSKSAmJiAhZGVmaW5lZChPRl9QTEFURk9STV9EUklWRVIpICYmIFwKICAgICAhZGVmaW5lZChYSUxJTlhfT0ZfUExBVEZPUk1fRFJJVkVSKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLW1zbS5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLW1zbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxM2Y0ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktbXNtLmMKQEAgLTAsMCArMSwzNDUgQEAKKy8qIGVoY2ktbXNtLmMgLSBIU1VTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVyIEltcGxlbWVudGF0aW9uCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTAsIENvZGUgQXVyb3JhIEZvcnVtLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFBhcnRseSBkZXJpdmVkIGZyb20gZWhjaS1mc2wuYyBhbmQgZWhjaS1oY2QuYworICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMDQgYnkgRGF2aWQgQnJvd25lbGwKKyAqIENvcHlyaWdodCAoYykgMjAwNSBNb250YVZpc3RhIFNvZnR3YXJlCisgKgorICogQWxsIHNvdXJjZSBjb2RlIGluIHRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgZm9sbG93aW5nIGxpY2Vuc2UgZXhjZXB0CisgKiB3aGVyZSBpbmRpY2F0ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZAorICogYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKgorICogU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHlvdSBjYW4gZmluZCBpdCBhdCBodHRwOi8vd3d3LmZzZi5vcmcKKyAqLworCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgorCisjaW5jbHVkZSA8bGludXgvdXNiL290Zy5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi9tc21faHN1c2JfaHcuaD4KKworI2RlZmluZSBNU01fVVNCX0JBU0UgKGhjZC0+cmVncykKKworc3RhdGljIHN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIgKm90ZzsKKworLyoKKyAqIGVoY2lfcnVuIGRlZmluZWQgaW4gZHJpdmVycy91c2IvaG9zdC9laGNpLWhjZC5jIHJlc2V0IHRoZSBjb250cm9sbGVyIGFuZAorICogdGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgaW4gZWhjaV9tc21fcmVzZXQgdmFuaXNoIGFmdGVyIGNvbnRyb2xsZXIgaXMKKyAqIHJlc2V0LiBSZXNldHRpbmcgdGhlIGNvbnRyb2xlciBpbiBlaGNpX3J1biBzZWVtcyB0byBiZSB1bi1uZWNlc3NhcnkKKyAqIHByb3ZpZGVkIEhDRCByZXNldCB0aGUgY29udHJvbGxlciBiZWZvcmUgY2FsbGluZyBlaGNpX3J1bi4gTW9zdCBvZiB0aGUgSENECisgKiBkbyBidXQgc29tZSBhcmUgbm90LiBTbyB0aGlzIGZ1bmN0aW9uIGlzIHNhbWUgYXMgZWhjaV9ydW4gYnV0IHdlIGRvbid0CisgKiByZXNldCB0aGUgY29udHJvbGxlciBoZXJlLgorICovCitzdGF0aWMgaW50IGVoY2lfbXNtX3J1bihzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCBlaGNpX2hjZAkJKmVoY2kgPSBoY2RfdG9fZWhjaShoY2QpOworCXUzMgkJCXRlbXA7CisJdTMyCQkJaGNjX3BhcmFtczsKKworCWhjZC0+dXNlc19uZXdfcG9sbGluZyA9IDE7CisKKwllaGNpX3dyaXRlbChlaGNpLCBlaGNpLT5wZXJpb2RpY19kbWEsICZlaGNpLT5yZWdzLT5mcmFtZV9saXN0KTsKKwllaGNpX3dyaXRlbChlaGNpLCAodTMyKWVoY2ktPmFzeW5jLT5xaF9kbWEsICZlaGNpLT5yZWdzLT5hc3luY19uZXh0KTsKKworCS8qCisJICogaGNjX3BhcmFtcyBjb250cm9scyB3aGV0aGVyIGVoY2ktPnJlZ3MtPnNlZ21lbnQgbXVzdCAoISEhKQorCSAqIGJlIHVzZWQ7IGl0IGNvbnN0cmFpbnMgUUgvSVREL1NJVEQgYW5kIFFURCBsb2NhdGlvbnMuCisJICogcGNpX3Bvb2wgY29uc2lzdGVudCBtZW1vcnkgYWx3YXlzIHVzZXMgc2VnbWVudCB6ZXJvLgorCSAqIHN0cmVhbWluZyBtYXBwaW5ncyBmb3IgSS9PIGJ1ZmZlcnMsIGxpa2UgcGNpX21hcF9zaW5nbGUoKSwKKwkgKiBjYW4gcmV0dXJuIHNlZ21lbnRzIGFib3ZlIDRHQiwgaWYgdGhlIGRldmljZSBhbGxvd3MuCisJICoKKwkgKiBOT1RFOiAgdGhlIGRtYSBtYXNrIGlzIHZpc2libGUgdGhyb3VnaCBkbWFfc3VwcG9ydGVkKCksIHNvCisJICogZHJpdmVycyBjYW4gcGFzcyB0aGlzIGluZm8gYWxvbmcgLi4uIGxpa2UgTkVUSUZfRl9ISUdIRE1BLAorCSAqIFNjc2lfSG9zdC5oaWdobWVtX2lvLCBhbmQgc28gZm9ydGguICBJdCdzIHJlYWRvbmx5IHRvIGFsbAorCSAqIGhvc3Qgc2lkZSBkcml2ZXJzIHRob3VnaC4KKwkgKi8KKwloY2NfcGFyYW1zID0gZWhjaV9yZWFkbChlaGNpLCAmZWhjaS0+Y2Fwcy0+aGNjX3BhcmFtcyk7CisJaWYgKEhDQ182NEJJVF9BRERSKGhjY19wYXJhbXMpKQorCQllaGNpX3dyaXRlbChlaGNpLCAwLCAmZWhjaS0+cmVncy0+c2VnbWVudCk7CisKKwkvKgorCSAqIFBoaWxpcHMsIEludGVsLCBhbmQgbWF5YmUgb3RoZXJzIG5lZWQgQ01EX1JVTiBiZWZvcmUgdGhlCisJICogcm9vdCBodWIgd2lsbCBkZXRlY3QgbmV3IGRldmljZXMgKHdoeT8pOyBORUMgZG9lc24ndAorCSAqLworCWVoY2ktPmNvbW1hbmQgJj0gfihDTURfTFJFU0VUfENNRF9JQUFEfENNRF9QU0V8Q01EX0FTRXxDTURfUkVTRVQpOworCWVoY2ktPmNvbW1hbmQgfD0gQ01EX1JVTjsKKwllaGNpX3dyaXRlbChlaGNpLCBlaGNpLT5jb21tYW5kLCAmZWhjaS0+cmVncy0+Y29tbWFuZCk7CisJZGJnX2NtZChlaGNpLCAiaW5pdCIsIGVoY2ktPmNvbW1hbmQpOworCisJLyoKKwkgKiBTdGFydCwgZW5hYmxpbmcgZnVsbCBVU0IgMi4wIGZ1bmN0aW9uYWxpdHkgLi4uIHVzYiAxLjEgZGV2aWNlcworCSAqIGFyZSBleHBsaWNpdGx5IGhhbmRlZCB0byBjb21wYW5pb24gY29udHJvbGxlcihzKSwgc28gbm8gVFQgaXMKKwkgKiBpbnZvbHZlZCB3aXRoIHRoZSByb290IGh1Yi4gIChFeGNlcHQgd2hlcmUgb25lIGlzIGludGVncmF0ZWQsCisJICogYW5kIHRoZXJlJ3Mgbm8gY29tcGFuaW9uIGNvbnRyb2xsZXIgdW5sZXNzIG1heWJlIGZvciBVU0IgT1RHLikKKwkgKgorCSAqIFR1cm5pbmcgb24gdGhlIENGIGZsYWcgd2lsbCB0cmFuc2ZlciBvd25lcnNoaXAgb2YgYWxsIHBvcnRzCisJICogZnJvbSB0aGUgY29tcGFuaW9ucyB0byB0aGUgRUhDSSBjb250cm9sbGVyLiAgSWYgYW55IG9mIHRoZQorCSAqIGNvbXBhbmlvbnMgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBwb3J0IHJlc2V0IGF0IHRoZSB0aW1lLCBpdAorCSAqIGNvdWxkIGNhdXNlIHRyb3VibGUuICBXcml0ZS1sb2NraW5nIGVoY2lfY2ZfcG9ydF9yZXNldF9yd3NlbQorCSAqIGd1YXJhbnRlZXMgdGhhdCBubyByZXNldHMgYXJlIGluIHByb2dyZXNzLiAgQWZ0ZXIgd2Ugc2V0IENGLAorCSAqIGEgc2hvcnQgZGVsYXkgbGV0cyB0aGUgaGFyZHdhcmUgY2F0Y2ggdXA7IG5ldyByZXNldHMgc2hvdWxkbid0CisJICogYmUgc3RhcnRlZCBiZWZvcmUgdGhlIHBvcnQgc3dpdGNoaW5nIGFjdGlvbnMgY291bGQgY29tcGxldGUuCisJICovCisJZG93bl93cml0ZSgmZWhjaV9jZl9wb3J0X3Jlc2V0X3J3c2VtKTsKKwloY2QtPnN0YXRlID0gSENfU1RBVEVfUlVOTklORzsKKwllaGNpX3dyaXRlbChlaGNpLCBGTEFHX0NGLCAmZWhjaS0+cmVncy0+Y29uZmlndXJlZF9mbGFnKTsKKwllaGNpX3JlYWRsKGVoY2ksICZlaGNpLT5yZWdzLT5jb21tYW5kKTsJLyogdW5ibG9jayBwb3N0ZWQgd3JpdGVzICovCisJdXNsZWVwX3JhbmdlKDUwMDAsIDU1MDApOworCXVwX3dyaXRlKCZlaGNpX2NmX3BvcnRfcmVzZXRfcndzZW0pOworCWVoY2ktPmxhc3RfcGVyaW9kaWNfZW5hYmxlID0ga3RpbWVfZ2V0X3JlYWwoKTsKKworCXRlbXAgPSBIQ19WRVJTSU9OKGVoY2lfcmVhZGwoZWhjaSwgJmVoY2ktPmNhcHMtPmhjX2NhcGJhc2UpKTsKKwllaGNpX2luZm8oZWhjaSwKKwkJIlVTQiAleC4leCBzdGFydGVkLCBFSENJICV4LiUwMnglc1xuIiwKKwkJKChlaGNpLT5zYnJuICYgMHhmMCk+PjQpLCAoZWhjaS0+c2JybiAmIDB4MGYpLAorCQl0ZW1wID4+IDgsIHRlbXAgJiAweGZmLAorCQlpZ25vcmVfb2MgPyAiLCBvdmVyY3VycmVudCBpZ25vcmVkIiA6ICIiKTsKKworCWVoY2lfd3JpdGVsKGVoY2ksIElOVFJfTUFTSywKKwkJICAgICZlaGNpLT5yZWdzLT5pbnRyX2VuYWJsZSk7IC8qIFR1cm4gT24gSW50ZXJydXB0cyAqLworCisJLyogR1JSIHRoaXMgaXMgcnVuLW9uY2UgaW5pdCgpLCBiZWluZyBkb25lIGV2ZXJ5IHRpbWUgdGhlIEhDIHN0YXJ0cy4KKwkgKiBTbyBsb25nIGFzIHRoZXkncmUgcGFydCBvZiBjbGFzcyBkZXZpY2VzLCB3ZSBjYW4ndCBkbyBpdCBpbml0KCkKKwkgKiBzaW5jZSB0aGUgY2xhc3MgZGV2aWNlIGlzbid0IGNyZWF0ZWQgdGhhdCBlYXJseS4KKwkgKi8KKwljcmVhdGVfZGVidWdfZmlsZXMoZWhjaSk7CisJY3JlYXRlX2NvbXBhbmlvbl9maWxlKGVoY2kpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZWhjaV9tc21fcmVzZXQoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlzdHJ1Y3QgZWhjaV9oY2QgKmVoY2kgPSBoY2RfdG9fZWhjaShoY2QpOworCWludCByZXR2YWw7CisKKwllaGNpLT5jYXBzID0gVVNCX0NBUExFTkdUSDsKKwllaGNpLT5yZWdzID0gVVNCX0NBUExFTkdUSCArCisJCUhDX0xFTkdUSChlaGNpX3JlYWRsKGVoY2ksICZlaGNpLT5jYXBzLT5oY19jYXBiYXNlKSk7CisKKwkvKiBjYWNoZSB0aGUgZGF0YSB0byBtaW5pbWl6ZSB0aGUgY2hpcCByZWFkcyovCisJZWhjaS0+aGNzX3BhcmFtcyA9IGVoY2lfcmVhZGwoZWhjaSwgJmVoY2ktPmNhcHMtPmhjc19wYXJhbXMpOworCisJaGNkLT5oYXNfdHQgPSAxOworCWVoY2ktPnNicm4gPSBIQ0RfVVNCMjsKKworCS8qIGRhdGEgc3RydWN0dXJlIGluaXQgKi8KKwlyZXR2YWwgPSBlaGNpX2luaXQoaGNkKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJcmV0dmFsID0gZWhjaV9yZXNldChlaGNpKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJLyogYnVyc3RzIG9mIHVuc3BlY2lmaWVkIGxlbmd0aC4gKi8KKwl3cml0ZWwoMCwgVVNCX0FIQkJVUlNUKTsKKwkvKiBVc2UgdGhlIEFIQiB0cmFuc2FjdG9yICovCisJd3JpdGVsKDAsIFVTQl9BSEJNT0RFKTsKKwkvKiBEaXNhYmxlIHN0cmVhbWluZyBtb2RlIGFuZCBzZWxlY3QgaG9zdCBtb2RlICovCisJd3JpdGVsKDB4MTMsIFVTQl9VU0JNT0RFKTsKKworCWVoY2lfcG9ydF9wb3dlcihlaGNpLCAxKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBoY19kcml2ZXIgbXNtX2hjX2RyaXZlciA9IHsKKwkuZGVzY3JpcHRpb24JCT0gaGNkX25hbWUsCisJLnByb2R1Y3RfZGVzYwkJPSAiUXVhbGNvbW0gT24tQ2hpcCBFSENJIEhvc3QgQ29udHJvbGxlciIsCisJLmhjZF9wcml2X3NpemUJCT0gc2l6ZW9mKHN0cnVjdCBlaGNpX2hjZCksCisKKwkvKgorCSAqIGdlbmVyaWMgaGFyZHdhcmUgbGlua2FnZQorCSAqLworCS5pcnEJCQk9IGVoY2lfaXJxLAorCS5mbGFncwkJCT0gSENEX1VTQjIgfCBIQ0RfTUVNT1JZLAorCisJLnJlc2V0CQkJPSBlaGNpX21zbV9yZXNldCwKKwkuc3RhcnQJCQk9IGVoY2lfbXNtX3J1biwKKworCS5zdG9wCQkJPSBlaGNpX3N0b3AsCisJLnNodXRkb3duCQk9IGVoY2lfc2h1dGRvd24sCisKKwkvKgorCSAqIG1hbmFnaW5nIGkvbyByZXF1ZXN0cyBhbmQgYXNzb2NpYXRlZCBkZXZpY2UgcmVzb3VyY2VzCisJICovCisJLnVyYl9lbnF1ZXVlCQk9IGVoY2lfdXJiX2VucXVldWUsCisJLnVyYl9kZXF1ZXVlCQk9IGVoY2lfdXJiX2RlcXVldWUsCisJLmVuZHBvaW50X2Rpc2FibGUJPSBlaGNpX2VuZHBvaW50X2Rpc2FibGUsCisJLmVuZHBvaW50X3Jlc2V0CQk9IGVoY2lfZW5kcG9pbnRfcmVzZXQsCisJLmNsZWFyX3R0X2J1ZmZlcl9jb21wbGV0ZSA9IGVoY2lfY2xlYXJfdHRfYnVmZmVyX2NvbXBsZXRlLAorCisJLyoKKwkgKiBzY2hlZHVsaW5nIHN1cHBvcnQKKwkgKi8KKwkuZ2V0X2ZyYW1lX251bWJlcgk9IGVoY2lfZ2V0X2ZyYW1lLAorCisJLyoKKwkgKiByb290IGh1YiBzdXBwb3J0CisJICovCisJLmh1Yl9zdGF0dXNfZGF0YQk9IGVoY2lfaHViX3N0YXR1c19kYXRhLAorCS5odWJfY29udHJvbAkJPSBlaGNpX2h1Yl9jb250cm9sLAorCS5yZWxpbnF1aXNoX3BvcnQJPSBlaGNpX3JlbGlucXVpc2hfcG9ydCwKKwkucG9ydF9oYW5kZWRfb3Zlcgk9IGVoY2lfcG9ydF9oYW5kZWRfb3ZlciwKKworCS8qCisJICogUE0gc3VwcG9ydAorCSAqLworCS5idXNfc3VzcGVuZAkJPSBlaGNpX2J1c19zdXNwZW5kLAorCS5idXNfcmVzdW1lCQk9IGVoY2lfYnVzX3Jlc3VtZSwKK307CisKK3N0YXRpYyBpbnQgZWhjaV9tc21fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCByZXQ7CisKKwlkZXZfZGJnKCZwZGV2LT5kZXYsICJlaGNpX21zbSBwcm9ibGVcbiIpOworCisJaGNkID0gdXNiX2NyZWF0ZV9oY2QoJm1zbV9oY19kcml2ZXIsICZwZGV2LT5kZXYsIGRldl9uYW1lKCZwZGV2LT5kZXYpKTsKKwlpZiAoIWhjZCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJVbmFibGUgdG8gY3JlYXRlIEhDRFxuIik7CisJCXJldHVybiAgLUVOT01FTTsKKwl9CisKKwloY2QtPmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKGhjZC0+aXJxIDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJVbmFibGUgdG8gZ2V0IElSUSByZXNvdXJjZVxuIik7CisJCXJldCA9IGhjZC0+aXJxOworCQlnb3RvIHB1dF9oY2Q7CisJfQorCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlcykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJVbmFibGUgdG8gZ2V0IG1lbW9yeSByZXNvdXJjZVxuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gcHV0X2hjZDsKKwl9CisKKwloY2QtPnJzcmNfc3RhcnQgPSByZXMtPnN0YXJ0OworCWhjZC0+cnNyY19sZW4gPSByZXNvdXJjZV9zaXplKHJlcyk7CisJaGNkLT5yZWdzID0gaW9yZW1hcChoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOworCWlmICghaGNkLT5yZWdzKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImlvcmVtYXAgZmFpbGVkXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBwdXRfaGNkOworCX0KKworCS8qCisJICogT1RHIGRyaXZlciB0YWtlcyBjYXJlIG9mIFBIWSBpbml0aWFsaXphdGlvbiwgY2xvY2sgbWFuYWdlbWVudCwKKwkgKiBwb3dlcmluZyB1cCBWQlVTLCBtYXBwaW5nIG9mIHJlZ2lzdGVycyBhZGRyZXNzIHNwYWNlIGFuZCBwb3dlcgorCSAqIG1hbmFnZW1lbnQuCisJICovCisJb3RnID0gb3RnX2dldF90cmFuc2NlaXZlcigpOworCWlmICghb3RnKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInVuYWJsZSB0byBmaW5kIHRyYW5zY2VpdmVyXG4iKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byB1bm1hcDsKKwl9CisKKwlyZXQgPSBvdGdfc2V0X2hvc3Qob3RnLCAmaGNkLT5zZWxmKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJ1bmFibGUgdG8gcmVnaXN0ZXIgd2l0aCB0cmFuc2NlaXZlclxuIik7CisJCWdvdG8gcHV0X3RyYW5zY2VpdmVyOworCX0KKworCWRldmljZV9pbml0X3dha2V1cCgmcGRldi0+ZGV2LCAxKTsKKwkvKgorCSAqIE9URyBkZXZpY2UgcGFyZW50IG9mIEhDRCB0YWtlcyBjYXJlIG9mIHB1dHRpbmcKKwkgKiBoYXJkd2FyZSBpbnRvIGxvdyBwb3dlciBtb2RlLgorCSAqLworCXBtX3J1bnRpbWVfbm9fY2FsbGJhY2tzKCZwZGV2LT5kZXYpOworCXBtX3J1bnRpbWVfZW5hYmxlKCZwZGV2LT5kZXYpOworCisJcmV0dXJuIDA7CisKK3B1dF90cmFuc2NlaXZlcjoKKwlvdGdfcHV0X3RyYW5zY2VpdmVyKG90Zyk7Cit1bm1hcDoKKwlpb3VubWFwKGhjZC0+cmVncyk7CitwdXRfaGNkOgorCXVzYl9wdXRfaGNkKGhjZCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBlaGNpX21zbV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlkZXZpY2VfaW5pdF93YWtldXAoJnBkZXYtPmRldiwgMCk7CisJcG1fcnVudGltZV9kaXNhYmxlKCZwZGV2LT5kZXYpOworCXBtX3J1bnRpbWVfc2V0X3N1c3BlbmRlZCgmcGRldi0+ZGV2KTsKKworCW90Z19zZXRfaG9zdChvdGcsIE5VTEwpOworCW90Z19wdXRfdHJhbnNjZWl2ZXIob3RnKTsKKworCXVzYl9wdXRfaGNkKGhjZCk7CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBlaGNpX21zbV9wbV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJYm9vbCB3YWtldXAgPSBkZXZpY2VfbWF5X3dha2V1cChkZXYpOworCisJZGV2X2RiZyhkZXYsICJlaGNpLW1zbSBQTSBzdXNwZW5kXG4iKTsKKworCS8qCisJICogRUhDSSBoZWxwZXIgZnVuY3Rpb24gaGFzIGFsc28gdGhlIHNhbWUgY2hlY2sgYmVmb3JlIG1hbmlwdWxhdGluZworCSAqIHBvcnQgd2FrZXVwIGZsYWdzLiAgV2UgZG8gY2hlY2sgaGVyZSB0aGUgc2FtZSBjb25kaXRpb24gYmVmb3JlCisJICogY2FsbGluZyB0aGUgc2FtZSBoZWxwZXIgZnVuY3Rpb24gdG8gYXZvaWQgYnJpbmdpbmcgaGFyZHdhcmUKKwkgKiBmcm9tIExvdyBwb3dlciBtb2RlIHdoZW4gdGhlcmUgaXMgbm8gbmVlZCBmb3IgYWRqdXN0aW5nIHBvcnQKKwkgKiB3YWtldXAgZmxhZ3MuCisJICovCisJaWYgKGhjZC0+c2VsZi5yb290X2h1Yi0+ZG9fcmVtb3RlX3dha2V1cCAmJiAhd2FrZXVwKSB7CisJCXBtX3J1bnRpbWVfcmVzdW1lKGRldik7CisJCWVoY2lfcHJlcGFyZV9wb3J0c19mb3JfY29udHJvbGxlcl9zdXNwZW5kKGhjZF90b19laGNpKGhjZCksCisJCQkJd2FrZXVwKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBlaGNpX21zbV9wbV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWRldl9kYmcoZGV2LCAiZWhjaS1tc20gUE0gcmVzdW1lXG4iKTsKKwllaGNpX3ByZXBhcmVfcG9ydHNfZm9yX2NvbnRyb2xsZXJfcmVzdW1lKGhjZF90b19laGNpKGhjZCkpOworCisJcmV0dXJuIDA7Cit9CisjZWxzZQorI2RlZmluZSBlaGNpX21zbV9wbV9zdXNwZW5kCU5VTEwKKyNkZWZpbmUgZWhjaV9tc21fcG1fcmVzdW1lCU5VTEwKKyNlbmRpZgorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgZWhjaV9tc21fZGV2X3BtX29wcyA9IHsKKwkuc3VzcGVuZCAgICAgICAgID0gZWhjaV9tc21fcG1fc3VzcGVuZCwKKwkucmVzdW1lICAgICAgICAgID0gZWhjaV9tc21fcG1fcmVzdW1lLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZWhjaV9tc21fZHJpdmVyID0geworCS5wcm9iZQk9IGVoY2lfbXNtX3Byb2JlLAorCS5yZW1vdmUJPSBfX2RldmV4aXRfcChlaGNpX21zbV9yZW1vdmUpLAorCS5kcml2ZXIgPSB7CisJCSAgIC5uYW1lID0gIm1zbV9oc3VzYl9ob3N0IiwKKwkJICAgLnBtID0gJmVoY2lfbXNtX2Rldl9wbV9vcHMsCisJfSwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktbXhjLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktbXhjLmMKaW5kZXggYmNlODUwNS4uZmE1OWIyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLW14Yy5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1teGMuYwpAQCAtMjgsNyArMjgsNyBAQAogI2RlZmluZSBVTFBJX1ZJRVdQT1JUX09GRlNFVAkweDE3MAogCiBzdHJ1Y3QgZWhjaV9teGNfcHJpdiB7Ci0Jc3RydWN0IGNsayAqdXNiY2xrLCAqYWhiY2xrOworCXN0cnVjdCBjbGsgKnVzYmNsaywgKmFoYmNsaywgKnBoeTFjbGs7CiAJc3RydWN0IHVzYl9oY2QgKmhjZDsKIH07CiAKQEAgLTM2LDE0ICszNiw4IEBACiBzdGF0aWMgaW50IGVoY2lfbXhjX3NldHVwKHN0cnVjdCB1c2JfaGNkICpoY2QpCiB7CiAJc3RydWN0IGVoY2lfaGNkICplaGNpID0gaGNkX3RvX2VoY2koaGNkKTsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBoY2QtPnNlbGYuY29udHJvbGxlcjsKLQlzdHJ1Y3QgbXhjX3VzYmhfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBkZXZfZ2V0X3BsYXRkYXRhKGRldik7CiAJaW50IHJldHZhbDsKIAotCS8qIEVIQ0kgcmVnaXN0ZXJzIHN0YXJ0IGF0IG9mZnNldCAweDEwMCAqLwotCWVoY2ktPmNhcHMgPSBoY2QtPnJlZ3MgKyAweDEwMDsKLQllaGNpLT5yZWdzID0gaGNkLT5yZWdzICsgMHgxMDAgKwotCSAgICBIQ19MRU5HVEgoZWhjaV9yZWFkbChlaGNpLCAmZWhjaS0+Y2Fwcy0+aGNfY2FwYmFzZSkpOwogCWRiZ19oY3NfcGFyYW1zKGVoY2ksICJyZXNldCIpOwogCWRiZ19oY2NfcGFyYW1zKGVoY2ksICJyZXNldCIpOwogCkBAIC02NSwxMiArNTksNiBAQAogCiAJZWhjaV9yZXNldChlaGNpKTsKIAotCS8qIHNldCB1cCB0aGUgUE9SVFNDeCByZWdpc3RlciAqLwotCWVoY2lfd3JpdGVsKGVoY2ksIHBkYXRhLT5wb3J0c2MsICZlaGNpLT5yZWdzLT5wb3J0X3N0YXR1c1swXSk7Ci0KLQkvKiBpcyB0aGlzIHJlYWxseSBuZWVkZWQ/ICovCi0JbXNsZWVwKDEwKTsKLQogCWVoY2lfcG9ydF9wb3dlcihlaGNpLCAwKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTEwMCw2ICs4OCw3IEBACiAJLnVyYl9lbnF1ZXVlID0gZWhjaV91cmJfZW5xdWV1ZSwKIAkudXJiX2RlcXVldWUgPSBlaGNpX3VyYl9kZXF1ZXVlLAogCS5lbmRwb2ludF9kaXNhYmxlID0gZWhjaV9lbmRwb2ludF9kaXNhYmxlLAorCS5lbmRwb2ludF9yZXNldCA9IGVoY2lfZW5kcG9pbnRfcmVzZXQsCiAKIAkvKgogCSAqIHNjaGVkdWxpbmcgc3VwcG9ydApAQCAtMTE1LDYgKzEwNCw4IEBACiAJLmJ1c19yZXN1bWUgPSBlaGNpX2J1c19yZXN1bWUsCiAJLnJlbGlucXVpc2hfcG9ydCA9IGVoY2lfcmVsaW5xdWlzaF9wb3J0LAogCS5wb3J0X2hhbmRlZF9vdmVyID0gZWhjaV9wb3J0X2hhbmRlZF9vdmVyLAorCisJLmNsZWFyX3R0X2J1ZmZlcl9jb21wbGV0ZSA9IGVoY2lfY2xlYXJfdHRfYnVmZmVyX2NvbXBsZXRlLAogfTsKIAogc3RhdGljIGludCBlaGNpX214Y19kcnZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKQEAgLTEyNSw2ICsxMTYsNyBAQAogCWludCBpcnEsIHJldDsKIAlzdHJ1Y3QgZWhjaV9teGNfcHJpdiAqcHJpdjsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCBlaGNpX2hjZCAqZWhjaTsKIAogCWRldl9pbmZvKCZwZGV2LT5kZXYsICJpbml0aWFsaXppbmcgaS5NWCBVU0IgQ29udHJvbGxlclxuIik7CiAKQEAgLTE2OCwxNyArMTYwLDYgQEAKIAkJZ290byBlcnJfaW9yZW1hcDsKIAl9CiAKLQkvKiBjYWxsIHBsYXRmb3JtIHNwZWNpZmljIGluaXQgZnVuY3Rpb24gKi8KLQlpZiAocGRhdGEtPmluaXQpIHsKLQkJcmV0ID0gcGRhdGEtPmluaXQocGRldik7Ci0JCWlmIChyZXQpIHsKLQkJCWRldl9lcnIoZGV2LCAicGxhdGZvcm0gaW5pdCBmYWlsZWRcbiIpOwotCQkJZ290byBlcnJfaW5pdDsKLQkJfQotCQkvKiBwbGF0Zm9ybXMgbmVlZCBzb21lIHRpbWUgdG8gc2V0dGxlIGNoYW5nZWQgSU8gc2V0dGluZ3MgKi8KLQkJbWRlbGF5KDEwKTsKLQl9Ci0KIAkvKiBlbmFibGUgY2xvY2tzICovCiAJcHJpdi0+dXNiY2xrID0gY2xrX2dldChkZXYsICJ1c2IiKTsKIAlpZiAoSVNfRVJSKHByaXYtPnVzYmNsaykpIHsKQEAgLTE5NiwxMSArMTc3LDQ2IEBACiAJCWNsa19lbmFibGUocHJpdi0+YWhiY2xrKTsKIAl9CiAKKwkvKiAiZHIiIGRldmljZSBoYXMgaXRzIG93biBjbG9jayAqLworCWlmIChwZGV2LT5pZCA9PSAwKSB7CisJCXByaXYtPnBoeTFjbGsgPSBjbGtfZ2V0KGRldiwgInVzYl9waHkxIik7CisJCWlmIChJU19FUlIocHJpdi0+cGh5MWNsaykpIHsKKwkJCXJldCA9IFBUUl9FUlIocHJpdi0+cGh5MWNsayk7CisJCQlnb3RvIGVycl9jbGtfcGh5OworCQl9CisJCWNsa19lbmFibGUocHJpdi0+cGh5MWNsayk7CisJfQorCisKKwkvKiBjYWxsIHBsYXRmb3JtIHNwZWNpZmljIGluaXQgZnVuY3Rpb24gKi8KKwlpZiAocGRhdGEtPmluaXQpIHsKKwkJcmV0ID0gcGRhdGEtPmluaXQocGRldik7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIoZGV2LCAicGxhdGZvcm0gaW5pdCBmYWlsZWRcbiIpOworCQkJZ290byBlcnJfaW5pdDsKKwkJfQorCQkvKiBwbGF0Zm9ybXMgbmVlZCBzb21lIHRpbWUgdG8gc2V0dGxlIGNoYW5nZWQgSU8gc2V0dGluZ3MgKi8KKwkJbWRlbGF5KDEwKTsKKwl9CisKIAkvKiBzZXR1cCBzcGVjaWZpYyB1c2IgaHcgKi8KIAlyZXQgPSBteGNfaW5pdGlhbGl6ZV91c2JfaHcocGRldi0+aWQsIHBkYXRhLT5mbGFncyk7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZXJyX2luaXQ7CiAKKwllaGNpID0gaGNkX3RvX2VoY2koaGNkKTsKKworCS8qIEVIQ0kgcmVnaXN0ZXJzIHN0YXJ0IGF0IG9mZnNldCAweDEwMCAqLworCWVoY2ktPmNhcHMgPSBoY2QtPnJlZ3MgKyAweDEwMDsKKwllaGNpLT5yZWdzID0gaGNkLT5yZWdzICsgMHgxMDAgKworCSAgICBIQ19MRU5HVEgoZWhjaV9yZWFkbChlaGNpLCAmZWhjaS0+Y2Fwcy0+aGNfY2FwYmFzZSkpOworCisJLyogc2V0IHVwIHRoZSBQT1JUU0N4IHJlZ2lzdGVyICovCisJZWhjaV93cml0ZWwoZWhjaSwgcGRhdGEtPnBvcnRzYywgJmVoY2ktPnJlZ3MtPnBvcnRfc3RhdHVzWzBdKTsKKworCS8qIGlzIHRoaXMgcmVhbGx5IG5lZWRlZD8gKi8KKwltc2xlZXAoMTApOworCiAJLyogSW5pdGlhbGl6ZSB0aGUgdHJhbnNjZWl2ZXIgKi8KIAlpZiAocGRhdGEtPm90ZykgewogCQlwZGF0YS0+b3RnLT5pb19wcml2ID0gaGNkLT5yZWdzICsgVUxQSV9WSUVXUE9SVF9PRkZTRVQ7CkBAIC0yMzAsNiArMjQ2LDExIEBACiAJaWYgKHBkYXRhICYmIHBkYXRhLT5leGl0KQogCQlwZGF0YS0+ZXhpdChwZGV2KTsKIGVycl9pbml0OgorCWlmIChwcml2LT5waHkxY2xrKSB7CisJCWNsa19kaXNhYmxlKHByaXYtPnBoeTFjbGspOworCQljbGtfcHV0KHByaXYtPnBoeTFjbGspOworCX0KK2Vycl9jbGtfcGh5OgogCWlmIChwcml2LT5haGJjbGspIHsKIAkJY2xrX2Rpc2FibGUocHJpdi0+YWhiY2xrKTsKIAkJY2xrX3B1dChwcml2LT5haGJjbGspOwpAQCAtMjczLDYgKzI5NCwxMCBAQAogCQljbGtfZGlzYWJsZShwcml2LT5haGJjbGspOwogCQljbGtfcHV0KHByaXYtPmFoYmNsayk7CiAJfQorCWlmIChwcml2LT5waHkxY2xrKSB7CisJCWNsa19kaXNhYmxlKHByaXYtPnBoeTFjbGspOworCQljbGtfcHV0KHByaXYtPnBoeTFjbGspOworCX0KIAogCWtmcmVlKHByaXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktb21hcC5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLW9tYXAuYwppbmRleCAxMTZhZTI4Li42ODBmMmVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktb21hcC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1vbWFwLmMKQEAgLTEsMTEgKzEsMTIgQEAKIC8qCi0gKiBlaGNpLW9tYXAuYyAtIGRyaXZlciBmb3IgVVNCSE9TVCBvbiBPTUFQIDM0eHggcHJvY2Vzc29yCisgKiBlaGNpLW9tYXAuYyAtIGRyaXZlciBmb3IgVVNCSE9TVCBvbiBPTUFQMy80IHByb2Nlc3NvcnMKICAqCi0gKiBCdXMgR2x1ZSBmb3IgT01BUDM0eHggVVNCSE9TVCAzIHBvcnQgRUhDSSBjb250cm9sbGVyCi0gKiBUZXN0ZWQgb24gT01BUDM0MzAgRVMyLjAgU0RQCisgKiBCdXMgR2x1ZSBmb3IgdGhlIEVIQ0kgY29udHJvbGxlcnMgaW4gT01BUDMvNAorICogVGVzdGVkIG9uIHNldmVyYWwgT01BUDMgYm9hcmRzLCBhbmQgT01BUDQgUGFuZGFib2FyZAogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgogICoJQXV0aG9yOiBWaWtyYW0gUGFuZGl0YSA8dmlrcmFtLnBhbmRpdGFAdGkuY29tPgorICoJQXV0aG9yOiBBbmFuZCBHYWRpeWFyIDxnYWRpeWFyQHRpLmNvbT4KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24KICAqCUNvbnRhY3Q6IEZlbGlwZSBCYWxiaSA8ZmVsaXBlLmJhbGJpQG5va2lhLmNvbT4KQEAgLTI2LDExICsyNywxNCBAQAogICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQogICoKLSAqIFRPRE8gKGxhc3QgdXBkYXRlZCBGZWIgMTIsIDIwMTApOgorICogVE9ETyAobGFzdCB1cGRhdGVkIE5vdiAyMSwgMjAxMCk6CiAgKgktIGFkZCBrZXJuZWwtZG9jCiAgKgktIGVuYWJsZSBBVVRPSURMRQogICoJLSBhZGQgc3VzcGVuZC9yZXN1bWUKICAqCS0gbW92ZSB3b3JrYXJvdW5kcyB0byBib2FyZC1maWxlcworICoJLSBmYWN0b3Igb3V0IGNvZGUgY29tbW9uIHRvIE9IQ0kKKyAqCS0gYWRkIEhTSUMgYW5kIFRMTCBzdXBwb3J0CisgKgktIGNvbnZlcnQgdG8gdXNlIGh3bW9kIGFuZCBydW50aW1lIFBNCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgpAQCAtODYsOSArOTAsOSBAQAogI2RlZmluZQlPTUFQX1RMTF9VTFBJX1NDUkFUQ0hfUkVHSVNURVIobnVtKQkJKDB4ODE2ICsgMHgxMDAgKiBudW0pCiAKICNkZWZpbmUgT01BUF9UTExfQ0hBTk5FTF9DT1VOVAkJCQkzCi0jZGVmaW5lIE9NQVBfVExMX0NIQU5ORUxfMV9FTl9NQVNLCQkJKDEgPDwgMSkKLSNkZWZpbmUgT01BUF9UTExfQ0hBTk5FTF8yX0VOX01BU0sJCQkoMSA8PCAyKQotI2RlZmluZSBPTUFQX1RMTF9DSEFOTkVMXzNfRU5fTUFTSwkJCSgxIDw8IDQpCisjZGVmaW5lIE9NQVBfVExMX0NIQU5ORUxfMV9FTl9NQVNLCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUF9UTExfQ0hBTk5FTF8yX0VOX01BU0sJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQX1RMTF9DSEFOTkVMXzNfRU5fTUFTSwkJCSgxIDw8IDIpCiAKIC8qIFVISCBSZWdpc3RlciBTZXQgKi8KICNkZWZpbmUJT01BUF9VSEhfUkVWSVNJT04JCQkJKDB4MDApCkBAIC0xMTQsNiArMTE4LDIzIEBACiAjZGVmaW5lIE9NQVBfVUhIX0hPU1RDT05GSUdfUDJfQ09OTkVDVF9TVEFUVVMJCSgxIDw8IDkpCiAjZGVmaW5lIE9NQVBfVUhIX0hPU1RDT05GSUdfUDNfQ09OTkVDVF9TVEFUVVMJCSgxIDw8IDEwKQogCisvKiBPTUFQNC1zcGVjaWZpYyBkZWZpbmVzICovCisjZGVmaW5lIE9NQVA0X1VISF9TWVNDT05GSUdfSURMRU1PREVfQ0xFQVIJCSgzIDw8IDIpCisjZGVmaW5lIE9NQVA0X1VISF9TWVNDT05GSUdfTk9JRExFCQkJKDEgPDwgMikKKworI2RlZmluZSBPTUFQNF9VSEhfU1lTQ09ORklHX1NUREJZTU9ERV9DTEVBUgkJKDMgPDwgNCkKKyNkZWZpbmUgT01BUDRfVUhIX1NZU0NPTkZJR19OT1NUREJZCQkJKDEgPDwgNCkKKyNkZWZpbmUgT01BUDRfVUhIX1NZU0NPTkZJR19TT0ZUUkVTRVQJCQkoMSA8PCAwKQorCisjZGVmaW5lIE9NQVA0X1AxX01PREVfQ0xFQVIJCQkJKDMgPDwgMTYpCisjZGVmaW5lIE9NQVA0X1AxX01PREVfVExMCQkJCSgxIDw8IDE2KQorI2RlZmluZSBPTUFQNF9QMV9NT0RFX0hTSUMJCQkJKDMgPDwgMTYpCisjZGVmaW5lIE9NQVA0X1AyX01PREVfQ0xFQVIJCQkJKDMgPDwgMTgpCisjZGVmaW5lIE9NQVA0X1AyX01PREVfVExMCQkJCSgxIDw8IDE4KQorI2RlZmluZSBPTUFQNF9QMl9NT0RFX0hTSUMJCQkJKDMgPDwgMTgpCisKKyNkZWZpbmUgT01BUF9SRVYyX1RMTF9DSEFOTkVMX0NPVU5UCQkJMgorCiAjZGVmaW5lCU9NQVBfVUhIX0RFQlVHX0NTUgkJCQkoMHg0NCkKIAogLyogRUhDSSBSZWdpc3RlciBTZXQgKi8KQEAgLTEyNyw2ICsxNDgsMTcgQEAKICNkZWZpbmUJRUhDSV9JTlNOUkVHMDVfVUxQSV9FWFRSRUdBRERfU0hJRlQJCTgKICNkZWZpbmUJRUhDSV9JTlNOUkVHMDVfVUxQSV9XUkRBVEFfU0hJRlQJCTAKIAorLyogVmFsdWVzIG9mIFVISF9SRVZJU0lPTiAtIE5vdGU6IHRoZXNlIGFyZSBub3QgZ2l2ZW4gaW4gdGhlIFRSTSAqLworI2RlZmluZSBPTUFQX0VIQ0lfUkVWMQkweDAwMDAwMDEwCS8qIE9NQVAzICovCisjZGVmaW5lIE9NQVBfRUhDSV9SRVYyCTB4NTA3MDAxMDAJLyogT01BUDQgKi8KKworI2RlZmluZSBpc19vbWFwX2VoY2lfcmV2MSh4KQkoeC0+b21hcF9laGNpX3JldiA9PSBPTUFQX0VIQ0lfUkVWMSkKKyNkZWZpbmUgaXNfb21hcF9laGNpX3JldjIoeCkJKHgtPm9tYXBfZWhjaV9yZXYgPT0gT01BUF9FSENJX1JFVjIpCisKKyNkZWZpbmUgaXNfZWhjaV9waHlfbW9kZSh4KQkoeCA9PSBFSENJX0hDRF9PTUFQX01PREVfUEhZKQorI2RlZmluZSBpc19laGNpX3RsbF9tb2RlKHgpCSh4ID09IEVIQ0lfSENEX09NQVBfTU9ERV9UTEwpCisjZGVmaW5lIGlzX2VoY2lfaHNpY19tb2RlKHgpCSh4ID09IEVIQ0lfSENEX09NQVBfTU9ERV9IU0lDKQorCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiBzdGF0aWMgaW5saW5lIHZvaWQgZWhjaV9vbWFwX3dyaXRlbCh2b2lkIF9faW9tZW0gKmJhc2UsIHUzMiByZWcsIHUzMiB2YWwpCkBAIC0xNTYsMTAgKzE4OCwxNCBAQAogCXN0cnVjdCBkZXZpY2UJCSpkZXY7CiAKIAlzdHJ1Y3QgY2xrCQkqdXNiaG9zdF9pY2s7Ci0Jc3RydWN0IGNsawkJKnVzYmhvc3QyXzEyMG1fZmNrOwotCXN0cnVjdCBjbGsJCSp1c2Job3N0MV80OG1fZmNrOworCXN0cnVjdCBjbGsJCSp1c2Job3N0X2hzX2ZjazsKKwlzdHJ1Y3QgY2xrCQkqdXNiaG9zdF9mc19mY2s7CiAJc3RydWN0IGNsawkJKnVzYnRsbF9mY2s7CiAJc3RydWN0IGNsawkJKnVzYnRsbF9pY2s7CisJc3RydWN0IGNsawkJKnhjbGs2MG1oc3AxX2NrOworCXN0cnVjdCBjbGsJCSp4Y2xrNjBtaHNwMl9jazsKKwlzdHJ1Y3QgY2xrCQkqdXRtaV9wMV9mY2s7CisJc3RydWN0IGNsawkJKnV0bWlfcDJfZmNrOwogCiAJLyogRklYTUUgdGhlIGZvbGxvd2luZyB0d28gd29ya2Fyb3VuZHMgYXJlCiAJICogYm9hcmQgc3BlY2lmaWMgbm90IHNpbGljb24tc3BlY2lmaWMgc28gdGhlc2UKQEAgLTE3Niw2ICsyMTIsOSBAQAogCS8qIHBoeSByZXNldCB3b3JrYXJvdW5kICovCiAJaW50CQkJcGh5X3Jlc2V0OwogCisJLyogSVAgcmV2aXNpb24gKi8KKwl1MzIJCQlvbWFwX2VoY2lfcmV2OworCiAJLyogZGVzaXJlZCBwaHlfbW9kZTogVExMLCBQSFkgKi8KIAllbnVtIGVoY2lfaGNkX29tYXBfbW9kZQlwb3J0X21vZGVbT01BUDNfSFNfVVNCX1BPUlRTXTsKIApAQCAtMTkxLDEzICsyMzAsMTQgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIHZvaWQgb21hcF91c2JfdXRtaV9pbml0KHN0cnVjdCBlaGNpX2hjZF9vbWFwICpvbWFwLCB1OCB0bGxfY2hhbm5lbF9tYXNrKQorc3RhdGljIHZvaWQgb21hcF91c2JfdXRtaV9pbml0KHN0cnVjdCBlaGNpX2hjZF9vbWFwICpvbWFwLCB1OCB0bGxfY2hhbm5lbF9tYXNrLAorCQkJCXU4IHRsbF9jaGFubmVsX2NvdW50KQogewogCXVuc2lnbmVkIHJlZzsKIAlpbnQgaTsKIAogCS8qIFByb2dyYW0gdGhlIDMgVExMIGNoYW5uZWxzIHVwZnJvbnQgKi8KLQlmb3IgKGkgPSAwOyBpIDwgT01BUF9UTExfQ0hBTk5FTF9DT1VOVDsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IHRsbF9jaGFubmVsX2NvdW50OyBpKyspIHsKIAkJcmVnID0gZWhjaV9vbWFwX3JlYWRsKG9tYXAtPnRsbF9iYXNlLCBPTUFQX1RMTF9DSEFOTkVMX0NPTkYoaSkpOwogCiAJCS8qIERpc2FibGUgQXV0b0lkbGUsIEJpdFN0dWZmaW5nIGFuZCB1c2UgU0RSIE1vZGUgKi8KQEAgLTIxNyw3ICsyNTcsNyBAQAogCWVoY2lfb21hcF93cml0ZWwob21hcC0+dGxsX2Jhc2UsIE9NQVBfVExMX1NIQVJFRF9DT05GLCByZWcpOwogCiAJLyogRW5hYmxlIGNoYW5uZWxzIG5vdyAqLwotCWZvciAoaSA9IDA7IGkgPCBPTUFQX1RMTF9DSEFOTkVMX0NPVU5UOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgdGxsX2NoYW5uZWxfY291bnQ7IGkrKykgewogCQlyZWcgPSBlaGNpX29tYXBfcmVhZGwob21hcC0+dGxsX2Jhc2UsIE9NQVBfVExMX0NIQU5ORUxfQ09ORihpKSk7CiAKIAkJLyogRW5hYmxlIG9ubHkgdGhlIHJlZyB0aGF0IGlzIG5lZWRlZCAqLwpAQCAtMjg2LDE5ICszMjYsMTkgQEAKIAl9CiAJY2xrX2VuYWJsZShvbWFwLT51c2Job3N0X2ljayk7CiAKLQlvbWFwLT51c2Job3N0Ml8xMjBtX2ZjayA9IGNsa19nZXQob21hcC0+ZGV2LCAidXNiaG9zdF8xMjBtX2ZjayIpOwotCWlmIChJU19FUlIob21hcC0+dXNiaG9zdDJfMTIwbV9mY2spKSB7Ci0JCXJldCA9IFBUUl9FUlIob21hcC0+dXNiaG9zdDJfMTIwbV9mY2spOworCW9tYXAtPnVzYmhvc3RfaHNfZmNrID0gY2xrX2dldChvbWFwLT5kZXYsICJoc19mY2siKTsKKwlpZiAoSVNfRVJSKG9tYXAtPnVzYmhvc3RfaHNfZmNrKSkgeworCQlyZXQgPSBQVFJfRVJSKG9tYXAtPnVzYmhvc3RfaHNfZmNrKTsKIAkJZ290byBlcnJfaG9zdF8xMjBtX2ZjazsKIAl9Ci0JY2xrX2VuYWJsZShvbWFwLT51c2Job3N0Ml8xMjBtX2Zjayk7CisJY2xrX2VuYWJsZShvbWFwLT51c2Job3N0X2hzX2Zjayk7CiAKLQlvbWFwLT51c2Job3N0MV80OG1fZmNrID0gY2xrX2dldChvbWFwLT5kZXYsICJ1c2Job3N0XzQ4bV9mY2siKTsKLQlpZiAoSVNfRVJSKG9tYXAtPnVzYmhvc3QxXzQ4bV9mY2spKSB7Ci0JCXJldCA9IFBUUl9FUlIob21hcC0+dXNiaG9zdDFfNDhtX2Zjayk7CisJb21hcC0+dXNiaG9zdF9mc19mY2sgPSBjbGtfZ2V0KG9tYXAtPmRldiwgImZzX2ZjayIpOworCWlmIChJU19FUlIob21hcC0+dXNiaG9zdF9mc19mY2spKSB7CisJCXJldCA9IFBUUl9FUlIob21hcC0+dXNiaG9zdF9mc19mY2spOwogCQlnb3RvIGVycl9ob3N0XzQ4bV9mY2s7CiAJfQotCWNsa19lbmFibGUob21hcC0+dXNiaG9zdDFfNDhtX2Zjayk7CisJY2xrX2VuYWJsZShvbWFwLT51c2Job3N0X2ZzX2Zjayk7CiAKIAlpZiAob21hcC0+cGh5X3Jlc2V0KSB7CiAJCS8qIFJlZmVyOiBJU1NVRTEgKi8KQEAgLTMzMyw2ICszNzMsODAgQEAKIAl9CiAJY2xrX2VuYWJsZShvbWFwLT51c2J0bGxfaWNrKTsKIAorCW9tYXAtPm9tYXBfZWhjaV9yZXYgPSBlaGNpX29tYXBfcmVhZGwob21hcC0+dWhoX2Jhc2UsCisJCQkJCQlPTUFQX1VISF9SRVZJU0lPTik7CisJZGV2X2RiZyhvbWFwLT5kZXYsICJPTUFQIFVISF9SRVZJU0lPTiAweCV4XG4iLAorCQkJCQlvbWFwLT5vbWFwX2VoY2lfcmV2KTsKKworCS8qCisJICogRW5hYmxlIHBlci1wb3J0IGNsb2NrcyBhcyBuZWVkZWQgKG5ld2VyIGNvbnRyb2xsZXJzIG9ubHkpLgorCSAqIC0gRXh0ZXJuYWwgVUxQSSBjbG9jayBmb3IgUEhZIG1vZGUKKwkgKiAtIEludGVybmFsIGNsb2NrcyBmb3IgVExMIGFuZCBIU0lDIG1vZGVzIChUT0RPKQorCSAqLworCWlmIChpc19vbWFwX2VoY2lfcmV2MihvbWFwKSkgeworCQlzd2l0Y2ggKG9tYXAtPnBvcnRfbW9kZVswXSkgeworCQljYXNlIEVIQ0lfSENEX09NQVBfTU9ERV9QSFk6CisJCQlvbWFwLT54Y2xrNjBtaHNwMV9jayA9IGNsa19nZXQob21hcC0+ZGV2LAorCQkJCQkJCSJ4Y2xrNjBtaHNwMV9jayIpOworCQkJaWYgKElTX0VSUihvbWFwLT54Y2xrNjBtaHNwMV9jaykpIHsKKwkJCQlyZXQgPSBQVFJfRVJSKG9tYXAtPnhjbGs2MG1oc3AxX2NrKTsKKwkJCQlkZXZfZXJyKG9tYXAtPmRldiwKKwkJCQkJIlVuYWJsZSB0byBnZXQgUG9ydDEgVUxQSSBjbG9ja1xuIik7CisJCQl9CisKKwkJCW9tYXAtPnV0bWlfcDFfZmNrID0gY2xrX2dldChvbWFwLT5kZXYsCisJCQkJCQkJInV0bWlfcDFfZ2ZjbGsiKTsKKwkJCWlmIChJU19FUlIob21hcC0+dXRtaV9wMV9mY2spKSB7CisJCQkJcmV0ID0gUFRSX0VSUihvbWFwLT51dG1pX3AxX2Zjayk7CisJCQkJZGV2X2VycihvbWFwLT5kZXYsCisJCQkJCSJVbmFibGUgdG8gZ2V0IHV0bWlfcDFfZmNrXG4iKTsKKwkJCX0KKworCQkJcmV0ID0gY2xrX3NldF9wYXJlbnQob21hcC0+dXRtaV9wMV9mY2ssCisJCQkJCQlvbWFwLT54Y2xrNjBtaHNwMV9jayk7CisJCQlpZiAocmV0ICE9IDApIHsKKwkJCQlkZXZfZXJyKG9tYXAtPmRldiwKKwkJCQkJIlVuYWJsZSB0byBzZXQgUDEgZi1jbG9ja1xuIik7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBFSENJX0hDRF9PTUFQX01PREVfVExMOgorCQkJLyogVE9ETyAqLworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwkJc3dpdGNoIChvbWFwLT5wb3J0X21vZGVbMV0pIHsKKwkJY2FzZSBFSENJX0hDRF9PTUFQX01PREVfUEhZOgorCQkJb21hcC0+eGNsazYwbWhzcDJfY2sgPSBjbGtfZ2V0KG9tYXAtPmRldiwKKwkJCQkJCQkieGNsazYwbWhzcDJfY2siKTsKKwkJCWlmIChJU19FUlIob21hcC0+eGNsazYwbWhzcDJfY2spKSB7CisJCQkJcmV0ID0gUFRSX0VSUihvbWFwLT54Y2xrNjBtaHNwMl9jayk7CisJCQkJZGV2X2VycihvbWFwLT5kZXYsCisJCQkJCSJVbmFibGUgdG8gZ2V0IFBvcnQyIFVMUEkgY2xvY2tcbiIpOworCQkJfQorCisJCQlvbWFwLT51dG1pX3AyX2ZjayA9IGNsa19nZXQob21hcC0+ZGV2LAorCQkJCQkJCSJ1dG1pX3AyX2dmY2xrIik7CisJCQlpZiAoSVNfRVJSKG9tYXAtPnV0bWlfcDJfZmNrKSkgeworCQkJCXJldCA9IFBUUl9FUlIob21hcC0+dXRtaV9wMl9mY2spOworCQkJCWRldl9lcnIob21hcC0+ZGV2LAorCQkJCQkiVW5hYmxlIHRvIGdldCB1dG1pX3AyX2Zja1xuIik7CisJCQl9CisKKwkJCXJldCA9IGNsa19zZXRfcGFyZW50KG9tYXAtPnV0bWlfcDJfZmNrLAorCQkJCQkJb21hcC0+eGNsazYwbWhzcDJfY2spOworCQkJaWYgKHJldCAhPSAwKSB7CisJCQkJZGV2X2VycihvbWFwLT5kZXYsCisJCQkJCSJVbmFibGUgdG8gc2V0IFAyIGYtY2xvY2tcbiIpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgRUhDSV9IQ0RfT01BUF9NT0RFX1RMTDoKKwkJCS8qIFRPRE8gKi8KKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJfQorCisKIAkvKiBwZXJmb3JtIFRMTCBzb2Z0IHJlc2V0LCBhbmQgd2FpdCB1bnRpbCByZXNldCBpcyBjb21wbGV0ZSAqLwogCWVoY2lfb21hcF93cml0ZWwob21hcC0+dGxsX2Jhc2UsIE9NQVBfVVNCVExMX1NZU0NPTkZJRywKIAkJCU9NQVBfVVNCVExMX1NZU0NPTkZJR19TT0ZUUkVTRVQpOwpAQCAtMzYwLDEyICs0NzQsMjAgQEAKIAogCS8qIFB1dCBVSEggaW4gTm9JZGxlL05vU3RhbmRieSBtb2RlICovCiAJcmVnID0gZWhjaV9vbWFwX3JlYWRsKG9tYXAtPnVoaF9iYXNlLCBPTUFQX1VISF9TWVNDT05GSUcpOwotCXJlZyB8PSAoT01BUF9VSEhfU1lTQ09ORklHX0VOQVdBS0VVUAotCQkJfCBPTUFQX1VISF9TWVNDT05GSUdfU0lETEVNT0RFCi0JCQl8IE9NQVBfVUhIX1NZU0NPTkZJR19DQUNUSVZJVFkKLQkJCXwgT01BUF9VSEhfU1lTQ09ORklHX01JRExFTU9ERSk7Ci0JcmVnICY9IH5PTUFQX1VISF9TWVNDT05GSUdfQVVUT0lETEU7CisJaWYgKGlzX29tYXBfZWhjaV9yZXYxKG9tYXApKSB7CisJCXJlZyB8PSAoT01BUF9VSEhfU1lTQ09ORklHX0VOQVdBS0VVUAorCQkJCXwgT01BUF9VSEhfU1lTQ09ORklHX1NJRExFTU9ERQorCQkJCXwgT01BUF9VSEhfU1lTQ09ORklHX0NBQ1RJVklUWQorCQkJCXwgT01BUF9VSEhfU1lTQ09ORklHX01JRExFTU9ERSk7CisJCXJlZyAmPSB+T01BUF9VSEhfU1lTQ09ORklHX0FVVE9JRExFOwogCisKKwl9IGVsc2UgaWYgKGlzX29tYXBfZWhjaV9yZXYyKG9tYXApKSB7CisJCXJlZyAmPSB+T01BUDRfVUhIX1NZU0NPTkZJR19JRExFTU9ERV9DTEVBUjsKKwkJcmVnIHw9IE9NQVA0X1VISF9TWVNDT05GSUdfTk9JRExFOworCQlyZWcgJj0gfk9NQVA0X1VISF9TWVNDT05GSUdfU1REQllNT0RFX0NMRUFSOworCQlyZWcgfD0gT01BUDRfVUhIX1NZU0NPTkZJR19OT1NUREJZOworCX0KIAllaGNpX29tYXBfd3JpdGVsKG9tYXAtPnVoaF9iYXNlLCBPTUFQX1VISF9TWVNDT05GSUcsIHJlZyk7CiAKIAlyZWcgPSBlaGNpX29tYXBfcmVhZGwob21hcC0+dWhoX2Jhc2UsIE9NQVBfVUhIX0hPU1RDT05GSUcpOwpAQCAtMzc2LDQwICs0OTgsNTYgQEAKIAkJCXwgT01BUF9VSEhfSE9TVENPTkZJR19JTkNSMTZfQlVSU1RfRU4pOwogCXJlZyAmPSB+T01BUF9VSEhfSE9TVENPTkZJR19JTkNSWF9BTElHTl9FTjsKIAotCWlmIChvbWFwLT5wb3J0X21vZGVbMF0gPT0gRUhDSV9IQ0RfT01BUF9NT0RFX1VOS05PV04pCi0JCXJlZyAmPSB+T01BUF9VSEhfSE9TVENPTkZJR19QMV9DT05ORUNUX1NUQVRVUzsKLQlpZiAob21hcC0+cG9ydF9tb2RlWzFdID09IEVIQ0lfSENEX09NQVBfTU9ERV9VTktOT1dOKQotCQlyZWcgJj0gfk9NQVBfVUhIX0hPU1RDT05GSUdfUDJfQ09OTkVDVF9TVEFUVVM7Ci0JaWYgKG9tYXAtPnBvcnRfbW9kZVsyXSA9PSBFSENJX0hDRF9PTUFQX01PREVfVU5LTk9XTikKLQkJcmVnICY9IH5PTUFQX1VISF9IT1NUQ09ORklHX1AzX0NPTk5FQ1RfU1RBVFVTOworCWlmIChpc19vbWFwX2VoY2lfcmV2MShvbWFwKSkgeworCQlpZiAob21hcC0+cG9ydF9tb2RlWzBdID09IEVIQ0lfSENEX09NQVBfTU9ERV9VTktOT1dOKQorCQkJcmVnICY9IH5PTUFQX1VISF9IT1NUQ09ORklHX1AxX0NPTk5FQ1RfU1RBVFVTOworCQlpZiAob21hcC0+cG9ydF9tb2RlWzFdID09IEVIQ0lfSENEX09NQVBfTU9ERV9VTktOT1dOKQorCQkJcmVnICY9IH5PTUFQX1VISF9IT1NUQ09ORklHX1AyX0NPTk5FQ1RfU1RBVFVTOworCQlpZiAob21hcC0+cG9ydF9tb2RlWzJdID09IEVIQ0lfSENEX09NQVBfTU9ERV9VTktOT1dOKQorCQkJcmVnICY9IH5PTUFQX1VISF9IT1NUQ09ORklHX1AzX0NPTk5FQ1RfU1RBVFVTOwogCi0JLyogQnlwYXNzIHRoZSBUTEwgbW9kdWxlIGZvciBQSFkgbW9kZSBvcGVyYXRpb24gKi8KLQlpZiAoY3B1X2lzX29tYXAzNDMwKCkgJiYgKG9tYXBfcmV2KCkgPD0gT01BUDM0MzBfUkVWX0VTMl8xKSkgewotCQlkZXZfZGJnKG9tYXAtPmRldiwgIk9NQVAzIEVTIHZlcnNpb24gPD0gRVMyLjFcbiIpOwotCQlpZiAoKG9tYXAtPnBvcnRfbW9kZVswXSA9PSBFSENJX0hDRF9PTUFQX01PREVfUEhZKSB8fAotCQkJKG9tYXAtPnBvcnRfbW9kZVsxXSA9PSBFSENJX0hDRF9PTUFQX01PREVfUEhZKSB8fAotCQkJCShvbWFwLT5wb3J0X21vZGVbMl0gPT0gRUhDSV9IQ0RfT01BUF9NT0RFX1BIWSkpCi0JCQlyZWcgJj0gfk9NQVBfVUhIX0hPU1RDT05GSUdfVUxQSV9CWVBBU1M7Ci0JCWVsc2UKLQkJCXJlZyB8PSBPTUFQX1VISF9IT1NUQ09ORklHX1VMUElfQllQQVNTOwotCX0gZWxzZSB7Ci0JCWRldl9kYmcob21hcC0+ZGV2LCAiT01BUDMgRVMgdmVyc2lvbiA+IEVTMi4xXG4iKTsKLQkJaWYgKG9tYXAtPnBvcnRfbW9kZVswXSA9PSBFSENJX0hDRF9PTUFQX01PREVfUEhZKQotCQkJcmVnICY9IH5PTUFQX1VISF9IT1NUQ09ORklHX1VMUElfUDFfQllQQVNTOwotCQllbHNlIGlmIChvbWFwLT5wb3J0X21vZGVbMF0gPT0gRUhDSV9IQ0RfT01BUF9NT0RFX1RMTCkKLQkJCXJlZyB8PSBPTUFQX1VISF9IT1NUQ09ORklHX1VMUElfUDFfQllQQVNTOworCQkvKiBCeXBhc3MgdGhlIFRMTCBtb2R1bGUgZm9yIFBIWSBtb2RlIG9wZXJhdGlvbiAqLworCQlpZiAoY3B1X2lzX29tYXAzNDMwKCkgJiYgKG9tYXBfcmV2KCkgPD0gT01BUDM0MzBfUkVWX0VTMl8xKSkgeworCQkJZGV2X2RiZyhvbWFwLT5kZXYsICJPTUFQMyBFUyB2ZXJzaW9uIDw9IEVTMi4xXG4iKTsKKwkJCWlmIChpc19laGNpX3BoeV9tb2RlKG9tYXAtPnBvcnRfbW9kZVswXSkgfHwKKwkJCQlpc19laGNpX3BoeV9tb2RlKG9tYXAtPnBvcnRfbW9kZVsxXSkgfHwKKwkJCQkJaXNfZWhjaV9waHlfbW9kZShvbWFwLT5wb3J0X21vZGVbMl0pKQorCQkJCXJlZyAmPSB+T01BUF9VSEhfSE9TVENPTkZJR19VTFBJX0JZUEFTUzsKKwkJCWVsc2UKKwkJCQlyZWcgfD0gT01BUF9VSEhfSE9TVENPTkZJR19VTFBJX0JZUEFTUzsKKwkJfSBlbHNlIHsKKwkJCWRldl9kYmcob21hcC0+ZGV2LCAiT01BUDMgRVMgdmVyc2lvbiA+IEVTMi4xXG4iKTsKKwkJCWlmIChpc19laGNpX3BoeV9tb2RlKG9tYXAtPnBvcnRfbW9kZVswXSkpCisJCQkJcmVnICY9IH5PTUFQX1VISF9IT1NUQ09ORklHX1VMUElfUDFfQllQQVNTOworCQkJZWxzZSBpZiAoaXNfZWhjaV90bGxfbW9kZShvbWFwLT5wb3J0X21vZGVbMF0pKQorCQkJCXJlZyB8PSBPTUFQX1VISF9IT1NUQ09ORklHX1VMUElfUDFfQllQQVNTOwogCi0JCWlmIChvbWFwLT5wb3J0X21vZGVbMV0gPT0gRUhDSV9IQ0RfT01BUF9NT0RFX1BIWSkKLQkJCXJlZyAmPSB+T01BUF9VSEhfSE9TVENPTkZJR19VTFBJX1AyX0JZUEFTUzsKLQkJZWxzZSBpZiAob21hcC0+cG9ydF9tb2RlWzFdID09IEVIQ0lfSENEX09NQVBfTU9ERV9UTEwpCi0JCQlyZWcgfD0gT01BUF9VSEhfSE9TVENPTkZJR19VTFBJX1AyX0JZUEFTUzsKKwkJCWlmIChpc19laGNpX3BoeV9tb2RlKG9tYXAtPnBvcnRfbW9kZVsxXSkpCisJCQkJcmVnICY9IH5PTUFQX1VISF9IT1NUQ09ORklHX1VMUElfUDJfQllQQVNTOworCQkJZWxzZSBpZiAoaXNfZWhjaV90bGxfbW9kZShvbWFwLT5wb3J0X21vZGVbMV0pKQorCQkJCXJlZyB8PSBPTUFQX1VISF9IT1NUQ09ORklHX1VMUElfUDJfQllQQVNTOwogCi0JCWlmIChvbWFwLT5wb3J0X21vZGVbMl0gPT0gRUhDSV9IQ0RfT01BUF9NT0RFX1BIWSkKLQkJCXJlZyAmPSB+T01BUF9VSEhfSE9TVENPTkZJR19VTFBJX1AzX0JZUEFTUzsKLQkJZWxzZSBpZiAob21hcC0+cG9ydF9tb2RlWzJdID09IEVIQ0lfSENEX09NQVBfTU9ERV9UTEwpCi0JCQlyZWcgfD0gT01BUF9VSEhfSE9TVENPTkZJR19VTFBJX1AzX0JZUEFTUzsKKwkJCWlmIChpc19laGNpX3BoeV9tb2RlKG9tYXAtPnBvcnRfbW9kZVsyXSkpCisJCQkJcmVnICY9IH5PTUFQX1VISF9IT1NUQ09ORklHX1VMUElfUDNfQllQQVNTOworCQkJZWxzZSBpZiAoaXNfZWhjaV90bGxfbW9kZShvbWFwLT5wb3J0X21vZGVbMl0pKQorCQkJCXJlZyB8PSBPTUFQX1VISF9IT1NUQ09ORklHX1VMUElfUDNfQllQQVNTOworCQl9CisJfSBlbHNlIGlmIChpc19vbWFwX2VoY2lfcmV2MihvbWFwKSkgeworCQkvKiBDbGVhciBwb3J0IG1vZGUgZmllbGRzIGZvciBQSFkgbW9kZSovCisJCXJlZyAmPSB+T01BUDRfUDFfTU9ERV9DTEVBUjsKKwkJcmVnICY9IH5PTUFQNF9QMl9NT0RFX0NMRUFSOwogCisJCWlmIChpc19laGNpX3RsbF9tb2RlKG9tYXAtPnBvcnRfbW9kZVswXSkpCisJCQlyZWcgfD0gT01BUDRfUDFfTU9ERV9UTEw7CisJCWVsc2UgaWYgKGlzX2VoY2lfaHNpY19tb2RlKG9tYXAtPnBvcnRfbW9kZVswXSkpCisJCQlyZWcgfD0gT01BUDRfUDFfTU9ERV9IU0lDOworCisJCWlmIChpc19laGNpX3RsbF9tb2RlKG9tYXAtPnBvcnRfbW9kZVsxXSkpCisJCQlyZWcgfD0gT01BUDRfUDJfTU9ERV9UTEw7CisJCWVsc2UgaWYgKGlzX2VoY2lfaHNpY19tb2RlKG9tYXAtPnBvcnRfbW9kZVsxXSkpCisJCQlyZWcgfD0gT01BUDRfUDJfTU9ERV9IU0lDOwogCX0KKwogCWVoY2lfb21hcF93cml0ZWwob21hcC0+dWhoX2Jhc2UsIE9NQVBfVUhIX0hPU1RDT05GSUcsIHJlZyk7CiAJZGV2X2RiZyhvbWFwLT5kZXYsICJVSEggc2V0dXAgZG9uZSwgdWhoX2hvc3Rjb25maWc9JXhcbiIsIHJlZyk7CiAKQEAgLTQzOCw3ICs1NzYsNyBAQAogCQkJdGxsX2NoX21hc2sgfD0gT01BUF9UTExfQ0hBTk5FTF8zX0VOX01BU0s7CiAKIAkJLyogRW5hYmxlIFVUTUkgbW9kZSBmb3IgcmVxdWlyZWQgVExMIGNoYW5uZWxzICovCi0JCW9tYXBfdXNiX3V0bWlfaW5pdChvbWFwLCB0bGxfY2hfbWFzayk7CisJCW9tYXBfdXNiX3V0bWlfaW5pdChvbWFwLCB0bGxfY2hfbWFzaywgT01BUF9UTExfQ0hBTk5FTF9DT1VOVCk7CiAJfQogCiAJaWYgKG9tYXAtPnBoeV9yZXNldCkgewpAQCAtNDY0LDYgKzYwMiwxNCBAQAogCXJldHVybiAwOwogCiBlcnJfc3lzX3N0YXR1czoKKwljbGtfZGlzYWJsZShvbWFwLT51dG1pX3AyX2Zjayk7CisJY2xrX3B1dChvbWFwLT51dG1pX3AyX2Zjayk7CisJY2xrX2Rpc2FibGUob21hcC0+eGNsazYwbWhzcDJfY2spOworCWNsa19wdXQob21hcC0+eGNsazYwbWhzcDJfY2spOworCWNsa19kaXNhYmxlKG9tYXAtPnV0bWlfcDFfZmNrKTsKKwljbGtfcHV0KG9tYXAtPnV0bWlfcDFfZmNrKTsKKwljbGtfZGlzYWJsZShvbWFwLT54Y2xrNjBtaHNwMV9jayk7CisJY2xrX3B1dChvbWFwLT54Y2xrNjBtaHNwMV9jayk7CiAJY2xrX2Rpc2FibGUob21hcC0+dXNidGxsX2ljayk7CiAJY2xrX3B1dChvbWFwLT51c2J0bGxfaWNrKTsKIApAQCAtNDcyLDggKzYxOCw4IEBACiAJY2xrX3B1dChvbWFwLT51c2J0bGxfZmNrKTsKIAogZXJyX3RsbF9mY2s6Ci0JY2xrX2Rpc2FibGUob21hcC0+dXNiaG9zdDFfNDhtX2Zjayk7Ci0JY2xrX3B1dChvbWFwLT51c2Job3N0MV80OG1fZmNrKTsKKwljbGtfZGlzYWJsZShvbWFwLT51c2Job3N0X2ZzX2Zjayk7CisJY2xrX3B1dChvbWFwLT51c2Job3N0X2ZzX2Zjayk7CiAKIAlpZiAob21hcC0+cGh5X3Jlc2V0KSB7CiAJCWlmIChncGlvX2lzX3ZhbGlkKG9tYXAtPnJlc2V0X2dwaW9fcG9ydFswXSkpCkBAIC00ODQsOCArNjMwLDggQEAKIAl9CiAKIGVycl9ob3N0XzQ4bV9mY2s6Ci0JY2xrX2Rpc2FibGUob21hcC0+dXNiaG9zdDJfMTIwbV9mY2spOwotCWNsa19wdXQob21hcC0+dXNiaG9zdDJfMTIwbV9mY2spOworCWNsa19kaXNhYmxlKG9tYXAtPnVzYmhvc3RfaHNfZmNrKTsKKwljbGtfcHV0KG9tYXAtPnVzYmhvc3RfaHNfZmNrKTsKIAogZXJyX2hvc3RfMTIwbV9mY2s6CiAJY2xrX2Rpc2FibGUob21hcC0+dXNiaG9zdF9pY2spOwpAQCAtNTAzLDYgKzY0OSw4IEBACiAKIAkvKiBSZXNldCBPTUFQIG1vZHVsZXMgZm9yIGluc21vZC9ybW1vZCB0byB3b3JrICovCiAJZWhjaV9vbWFwX3dyaXRlbChvbWFwLT51aGhfYmFzZSwgT01BUF9VSEhfU1lTQ09ORklHLAorCQkJaXNfb21hcF9laGNpX3JldjIob21hcCkgPworCQkJT01BUDRfVUhIX1NZU0NPTkZJR19TT0ZUUkVTRVQgOgogCQkJT01BUF9VSEhfU1lTQ09ORklHX1NPRlRSRVNFVCk7CiAJd2hpbGUgKCEoZWhjaV9vbWFwX3JlYWRsKG9tYXAtPnVoaF9iYXNlLCBPTUFQX1VISF9TWVNTVEFUVVMpCiAJCQkJJiAoMSA8PCAwKSkpIHsKQEAgLTU1MCwxNiArNjk4LDE2IEBACiAJCW9tYXAtPnVzYmhvc3RfaWNrID0gTlVMTDsKIAl9CiAKLQlpZiAob21hcC0+dXNiaG9zdDFfNDhtX2ZjayAhPSBOVUxMKSB7Ci0JCWNsa19kaXNhYmxlKG9tYXAtPnVzYmhvc3QxXzQ4bV9mY2spOwotCQljbGtfcHV0KG9tYXAtPnVzYmhvc3QxXzQ4bV9mY2spOwotCQlvbWFwLT51c2Job3N0MV80OG1fZmNrID0gTlVMTDsKKwlpZiAob21hcC0+dXNiaG9zdF9mc19mY2sgIT0gTlVMTCkgeworCQljbGtfZGlzYWJsZShvbWFwLT51c2Job3N0X2ZzX2Zjayk7CisJCWNsa19wdXQob21hcC0+dXNiaG9zdF9mc19mY2spOworCQlvbWFwLT51c2Job3N0X2ZzX2ZjayA9IE5VTEw7CiAJfQogCi0JaWYgKG9tYXAtPnVzYmhvc3QyXzEyMG1fZmNrICE9IE5VTEwpIHsKLQkJY2xrX2Rpc2FibGUob21hcC0+dXNiaG9zdDJfMTIwbV9mY2spOwotCQljbGtfcHV0KG9tYXAtPnVzYmhvc3QyXzEyMG1fZmNrKTsKLQkJb21hcC0+dXNiaG9zdDJfMTIwbV9mY2sgPSBOVUxMOworCWlmIChvbWFwLT51c2Job3N0X2hzX2ZjayAhPSBOVUxMKSB7CisJCWNsa19kaXNhYmxlKG9tYXAtPnVzYmhvc3RfaHNfZmNrKTsKKwkJY2xrX3B1dChvbWFwLT51c2Job3N0X2hzX2Zjayk7CisJCW9tYXAtPnVzYmhvc3RfaHNfZmNrID0gTlVMTDsKIAl9CiAKIAlpZiAob21hcC0+dXNidGxsX2ljayAhPSBOVUxMKSB7CkBAIC01NjgsNiArNzE2LDMyIEBACiAJCW9tYXAtPnVzYnRsbF9pY2sgPSBOVUxMOwogCX0KIAorCWlmIChpc19vbWFwX2VoY2lfcmV2MihvbWFwKSkgeworCQlpZiAob21hcC0+eGNsazYwbWhzcDFfY2sgIT0gTlVMTCkgeworCQkJY2xrX2Rpc2FibGUob21hcC0+eGNsazYwbWhzcDFfY2spOworCQkJY2xrX3B1dChvbWFwLT54Y2xrNjBtaHNwMV9jayk7CisJCQlvbWFwLT54Y2xrNjBtaHNwMV9jayA9IE5VTEw7CisJCX0KKworCQlpZiAob21hcC0+dXRtaV9wMV9mY2sgIT0gTlVMTCkgeworCQkJY2xrX2Rpc2FibGUob21hcC0+dXRtaV9wMV9mY2spOworCQkJY2xrX3B1dChvbWFwLT51dG1pX3AxX2Zjayk7CisJCQlvbWFwLT51dG1pX3AxX2ZjayA9IE5VTEw7CisJCX0KKworCQlpZiAob21hcC0+eGNsazYwbWhzcDJfY2sgIT0gTlVMTCkgeworCQkJY2xrX2Rpc2FibGUob21hcC0+eGNsazYwbWhzcDJfY2spOworCQkJY2xrX3B1dChvbWFwLT54Y2xrNjBtaHNwMl9jayk7CisJCQlvbWFwLT54Y2xrNjBtaHNwMl9jayA9IE5VTEw7CisJCX0KKworCQlpZiAob21hcC0+dXRtaV9wMl9mY2sgIT0gTlVMTCkgeworCQkJY2xrX2Rpc2FibGUob21hcC0+dXRtaV9wMl9mY2spOworCQkJY2xrX3B1dChvbWFwLT51dG1pX3AyX2Zjayk7CisJCQlvbWFwLT51dG1pX3AyX2ZjayA9IE5VTEw7CisJCX0KKwl9CisKIAlpZiAob21hcC0+cGh5X3Jlc2V0KSB7CiAJCWlmIChncGlvX2lzX3ZhbGlkKG9tYXAtPnJlc2V0X2dwaW9fcG9ydFswXSkpCiAJCQlncGlvX2ZyZWUob21hcC0+cmVzZXRfZ3Bpb19wb3J0WzBdKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1wY2kuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1wY2kuYwppbmRleCA2NTVmM2M5Li43NjE3OWMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcGNpLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXBjaS5jCkBAIC0yMiw2ICsyMiw5IEBACiAjZXJyb3IgIlRoaXMgZmlsZSBpcyBQQ0kgYnVzIGdsdWUuICBDT05GSUdfUENJIG11c3QgYmUgZGVmaW5lZC4iCiAjZW5kaWYKIAorLyogZGVmaW5lZCBoZXJlIHRvIGF2b2lkIGFkZGluZyB0byBwY2lfaWRzLmggZm9yIHNpbmdsZSBpbnN0YW5jZSB1c2UgKi8KKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9DRTQxMDBfVVNCCTB4MmU3MAorCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAvKiBjYWxsZWQgYWZ0ZXIgcG93ZXJ1cCwgYnkgcHJvYmUgb3Igc3lzdGVtLXBtICJ3YWtldXAiICovCkBAIC00MSw2ICs0NCwzNSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGVoY2lfcXVpcmtfYW1kX1NCODAwKHN0cnVjdCBlaGNpX2hjZCAqZWhjaSkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqYW1kX3NtYnVzX2RldjsKKwl1OCByZXYgPSAwOworCisJYW1kX3NtYnVzX2RldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfQVRJLCAweDQzODUsIE5VTEwpOworCWlmICghYW1kX3NtYnVzX2RldikKKwkJcmV0dXJuIDA7CisKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShhbWRfc21idXNfZGV2LCBQQ0lfUkVWSVNJT05fSUQsICZyZXYpOworCWlmIChyZXYgPCAweDQwKSB7CisJCXBjaV9kZXZfcHV0KGFtZF9zbWJ1c19kZXYpOworCQlhbWRfc21idXNfZGV2ID0gTlVMTDsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFhbWRfbmJfZGV2KQorCQlhbWRfbmJfZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9BTUQsIDB4MTUxMCwgTlVMTCk7CisJaWYgKCFhbWRfbmJfZGV2KQorCQllaGNpX2VycihlaGNpLCAiUVVJUks6IHVuYWJsZSB0byBnZXQgQU1EIE5CIGRldmljZVxuIik7CisKKwllaGNpX2luZm8oZWhjaSwgIlFVSVJLOiBFbmFibGUgQU1EIFNCODAwIEwxIGZpeFxuIik7CisKKwlwY2lfZGV2X3B1dChhbWRfc21idXNfZGV2KTsKKwlhbWRfc21idXNfZGV2ID0gTlVMTDsKKworCXJldHVybiAxOworfQorCiAvKiBjYWxsZWQgZHVyaW5nIHByb2JlKCkgYWZ0ZXIgY2hpcCByZXNldCBjb21wbGV0ZXMgKi8KIHN0YXRpYyBpbnQgZWhjaV9wY2lfc2V0dXAoc3RydWN0IHVzYl9oY2QgKmhjZCkKIHsKQEAgLTk5LDYgKzEzMSw5IEBACiAJLyogY2FjaGUgdGhpcyByZWFkb25seSBkYXRhOyBtaW5pbWl6ZSBjaGlwIHJlYWRzICovCiAJZWhjaS0+aGNzX3BhcmFtcyA9IGVoY2lfcmVhZGwoZWhjaSwgJmVoY2ktPmNhcHMtPmhjc19wYXJhbXMpOwogCisJaWYgKGVoY2lfcXVpcmtfYW1kX1NCODAwKGVoY2kpKQorCQllaGNpLT5hbWRfbDFfZml4ID0gMTsKKwogCXJldHZhbCA9IGVoY2lfaGFsdChlaGNpKTsKIAlpZiAocmV0dmFsKQogCQlyZXR1cm4gcmV0dmFsOwpAQCAtMTM3LDYgKzE3MiwxMCBAQAogCQkJZWhjaV9pbmZvKGVoY2ksICJkaXNhYmxlIGxwbSBmb3IgbGFuZ3dlbGwvcGVud2VsbFxuIik7CiAJCQllaGNpLT5oYXNfbHBtID0gMDsKIAkJfQorCQlpZiAocGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSU5URUxfQ0U0MTAwX1VTQikgeworCQkJaGNkLT5oYXNfdHQgPSAxOworCQkJdGRpX3Jlc2V0KGVoY2kpOworCQl9CiAJCWJyZWFrOwogCWNhc2UgUENJX1ZFTkRPUl9JRF9UREk6CiAJCWlmIChwZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9URElfRUhDSSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLXNjaGVkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktc2NoZWQuYwppbmRleCBkOWY3OGViLi5hYTQ2ZjU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktc2NoZWQuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktc2NoZWQuYwpAQCAtMTU5MCw2ICsxNTkwLDYzIEBACiAJKmh3X3AgPSBjcHVfdG9faGMzMihlaGNpLCBpdGQtPml0ZF9kbWEgfCBRX1RZUEVfSVREKTsKIH0KIAorI2RlZmluZSBBQl9SRUdfQkFSX0xPVyAweGUwCisjZGVmaW5lIEFCX1JFR19CQVJfSElHSCAweGUxCisjZGVmaW5lIEFCX0lORFgoYWRkcikgKChhZGRyKSArIDB4MDApCisjZGVmaW5lIEFCX0RBVEEoYWRkcikgKChhZGRyKSArIDB4MDQpCisjZGVmaW5lIE5CX1BDSUVfSU5EWF9BRERSIDB4ZTAKKyNkZWZpbmUgTkJfUENJRV9JTkRYX0RBVEEgMHhlNAorI2RlZmluZSBOQl9QSUYwX1BXUkRPV05fMCAweDAxMTAwMDEyCisjZGVmaW5lIE5CX1BJRjBfUFdSRE9XTl8xIDB4MDExMDAwMTMKKworc3RhdGljIHZvaWQgZWhjaV9xdWlya19hbWRfTDEoc3RydWN0IGVoY2lfaGNkICplaGNpLCBpbnQgZGlzYWJsZSkKK3sKKwl1MzIgYWRkciwgYWRkcl9sb3csIGFkZHJfaGlnaCwgdmFsOworCisJb3V0Yl9wKEFCX1JFR19CQVJfTE9XLCAweGNkNik7CisJYWRkcl9sb3cgPSBpbmJfcCgweGNkNyk7CisJb3V0Yl9wKEFCX1JFR19CQVJfSElHSCwgMHhjZDYpOworCWFkZHJfaGlnaCA9IGluYl9wKDB4Y2Q3KTsKKwlhZGRyID0gYWRkcl9oaWdoIDw8IDggfCBhZGRyX2xvdzsKKwlvdXRsX3AoMHgzMCwgQUJfSU5EWChhZGRyKSk7CisJb3V0bF9wKDB4NDAsIEFCX0RBVEEoYWRkcikpOworCW91dGxfcCgweDM0LCBBQl9JTkRYKGFkZHIpKTsKKwl2YWwgPSBpbmxfcChBQl9EQVRBKGFkZHIpKTsKKworCWlmIChkaXNhYmxlKSB7CisJCXZhbCAmPSB+MHg4OworCQl2YWwgfD0gKDEgPDwgNCkgfCAoMSA8PCA5KTsKKwl9IGVsc2UgeworCQl2YWwgfD0gMHg4OworCQl2YWwgJj0gfigoMSA8PCA0KSB8ICgxIDw8IDkpKTsKKwl9CisJb3V0bF9wKHZhbCwgQUJfREFUQShhZGRyKSk7CisKKwlpZiAoYW1kX25iX2RldikgeworCQlhZGRyID0gTkJfUElGMF9QV1JET1dOXzA7CisJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoYW1kX25iX2RldiwgTkJfUENJRV9JTkRYX0FERFIsIGFkZHIpOworCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoYW1kX25iX2RldiwgTkJfUENJRV9JTkRYX0RBVEEsICZ2YWwpOworCQlpZiAoZGlzYWJsZSkKKwkJCXZhbCAmPSB+KDB4M2YgPDwgNyk7CisJCWVsc2UKKwkJCXZhbCB8PSAweDNmIDw8IDc7CisKKwkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChhbWRfbmJfZGV2LCBOQl9QQ0lFX0lORFhfREFUQSwgdmFsKTsKKworCQlhZGRyID0gTkJfUElGMF9QV1JET1dOXzE7CisJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoYW1kX25iX2RldiwgTkJfUENJRV9JTkRYX0FERFIsIGFkZHIpOworCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoYW1kX25iX2RldiwgTkJfUENJRV9JTkRYX0RBVEEsICZ2YWwpOworCQlpZiAoZGlzYWJsZSkKKwkJCXZhbCAmPSB+KDB4M2YgPDwgNyk7CisJCWVsc2UKKwkJCXZhbCB8PSAweDNmIDw8IDc7CisKKwkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChhbWRfbmJfZGV2LCBOQl9QQ0lFX0lORFhfREFUQSwgdmFsKTsKKwl9CisKKwlyZXR1cm47Cit9CisKIC8qIGZpdCB1cmIncyBpdGRzIGludG8gdGhlIHNlbGVjdGVkIHNjaGVkdWxlIHNsb3Q7IGFjdGl2YXRlIGFzIG5lZWRlZCAqLwogc3RhdGljIGludAogaXRkX2xpbmtfdXJiICgKQEAgLTE2MTYsNiArMTY3MywxMiBAQAogCQkJdXJiLT5pbnRlcnZhbCwKIAkJCW5leHRfdWZyYW1lID4+IDMsIG5leHRfdWZyYW1lICYgMHg3KTsKIAl9CisKKwlpZiAoZWhjaV90b19oY2QoZWhjaSktPnNlbGYuYmFuZHdpZHRoX2lzb2NfcmVxcyA9PSAwKSB7CisJCWlmIChlaGNpLT5hbWRfbDFfZml4ID09IDEpCisJCQllaGNpX3F1aXJrX2FtZF9MMShlaGNpLCAxKTsKKwl9CisKIAllaGNpX3RvX2hjZChlaGNpKS0+c2VsZi5iYW5kd2lkdGhfaXNvY19yZXFzKys7CiAKIAkvKiBmaWxsIGlURHMgdWZyYW1lIGJ5IHVmcmFtZSAqLwpAQCAtMTc0MCw2ICsxODAzLDExIEBACiAJKHZvaWQpIGRpc2FibGVfcGVyaW9kaWMoZWhjaSk7CiAJZWhjaV90b19oY2QoZWhjaSktPnNlbGYuYmFuZHdpZHRoX2lzb2NfcmVxcy0tOwogCisJaWYgKGVoY2lfdG9faGNkKGVoY2kpLT5zZWxmLmJhbmR3aWR0aF9pc29jX3JlcXMgPT0gMCkgeworCQlpZiAoZWhjaS0+YW1kX2wxX2ZpeCA9PSAxKQorCQkJZWhjaV9xdWlya19hbWRfTDEoZWhjaSwgMCk7CisJfQorCiAJaWYgKHVubGlrZWx5KGxpc3RfaXNfc2luZ3VsYXIoJnN0cmVhbS0+dGRfbGlzdCkpKSB7CiAJCWVoY2lfdG9faGNkKGVoY2kpLT5zZWxmLmJhbmR3aWR0aF9hbGxvY2F0ZWQKIAkJCQktPSBzdHJlYW0tPmJhbmR3aWR0aDsKQEAgLTIwMjUsNiArMjA5MywxMiBAQAogCQkJKG5leHRfdWZyYW1lID4+IDMpICYgKGVoY2ktPnBlcmlvZGljX3NpemUgLSAxKSwKIAkJCXN0cmVhbS0+aW50ZXJ2YWwsIGhjMzJfdG9fY3B1KGVoY2ksIHN0cmVhbS0+c3BsaXRzKSk7CiAJfQorCisJaWYgKGVoY2lfdG9faGNkKGVoY2kpLT5zZWxmLmJhbmR3aWR0aF9pc29jX3JlcXMgPT0gMCkgeworCQlpZiAoZWhjaS0+YW1kX2wxX2ZpeCA9PSAxKQorCQkJZWhjaV9xdWlya19hbWRfTDEoZWhjaSwgMSk7CisJfQorCiAJZWhjaV90b19oY2QoZWhjaSktPnNlbGYuYmFuZHdpZHRoX2lzb2NfcmVxcysrOwogCiAJLyogZmlsbCBzSVREcyBmcmFtZSBieSBmcmFtZSAqLwpAQCAtMjEyNSw2ICsyMTk5LDExIEBACiAJKHZvaWQpIGRpc2FibGVfcGVyaW9kaWMoZWhjaSk7CiAJZWhjaV90b19oY2QoZWhjaSktPnNlbGYuYmFuZHdpZHRoX2lzb2NfcmVxcy0tOwogCisJaWYgKGVoY2lfdG9faGNkKGVoY2kpLT5zZWxmLmJhbmR3aWR0aF9pc29jX3JlcXMgPT0gMCkgeworCQlpZiAoZWhjaS0+YW1kX2wxX2ZpeCA9PSAxKQorCQkJZWhjaV9xdWlya19hbWRfTDEoZWhjaSwgMCk7CisJfQorCiAJaWYgKGxpc3RfaXNfc2luZ3VsYXIoJnN0cmVhbS0+dGRfbGlzdCkpIHsKIAkJZWhjaV90b19oY2QoZWhjaSktPnNlbGYuYmFuZHdpZHRoX2FsbG9jYXRlZAogCQkJCS09IHN0cmVhbS0+YmFuZHdpZHRoOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLXNoLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktc2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTVmNzBmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXNoLmMKQEAgLTAsMCArMSwyNDMgQEAKKy8qCisgKiBTdXBlckggRUhDSSBob3N0IGNvbnRyb2xsZXIgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwICBQYXVsIE11bmR0CisgKgorICogQmFzZWQgb24gb2hjaS1zaC5jIGFuZCBlaGNpLWF0bWVsLmMuCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKworc3RydWN0IGVoY2lfc2hfcHJpdiB7CisJc3RydWN0IGNsayAqaWNsaywgKmZjbGs7CisJc3RydWN0IHVzYl9oY2QgKmhjZDsKK307CisKK3N0YXRpYyBpbnQgZWhjaV9zaF9yZXNldChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCBlaGNpX2hjZAkqZWhjaSA9IGhjZF90b19laGNpKGhjZCk7CisJaW50IHJldDsKKworCWVoY2ktPmNhcHMgPSBoY2QtPnJlZ3M7CisJZWhjaS0+cmVncyA9IGhjZC0+cmVncyArIEhDX0xFTkdUSChlaGNpX3JlYWRsKGVoY2ksCisJCSZlaGNpLT5jYXBzLT5oY19jYXBiYXNlKSk7CisKKwlkYmdfaGNzX3BhcmFtcyhlaGNpLCAicmVzZXQiKTsKKwlkYmdfaGNjX3BhcmFtcyhlaGNpLCAicmVzZXQiKTsKKworCWVoY2ktPmhjc19wYXJhbXMgPSBlaGNpX3JlYWRsKGVoY2ksICZlaGNpLT5jYXBzLT5oY3NfcGFyYW1zKTsKKworCXJldCA9IGVoY2lfaGFsdChlaGNpKTsKKwlpZiAodW5saWtlbHkocmV0KSkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGVoY2lfaW5pdChoY2QpOworCWlmICh1bmxpa2VseShyZXQpKQorCQlyZXR1cm4gcmV0OworCisJZWhjaS0+c2JybiA9IDB4MjA7CisKKwllaGNpX3Jlc2V0KGVoY2kpOworCWVoY2lfcG9ydF9wb3dlcihlaGNpLCAwKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGNfZHJpdmVyIGVoY2lfc2hfaGNfZHJpdmVyID0geworCS5kZXNjcmlwdGlvbgkJCT0gaGNkX25hbWUsCisJLnByb2R1Y3RfZGVzYwkJCT0gIlN1cGVySCBFSENJIiwKKwkuaGNkX3ByaXZfc2l6ZQkJCT0gc2l6ZW9mKHN0cnVjdCBlaGNpX2hjZCksCisKKwkvKgorCSAqIGdlbmVyaWMgaGFyZHdhcmUgbGlua2FnZQorCSAqLworCS5pcnEJCQkJPSBlaGNpX2lycSwKKwkuZmxhZ3MJCQkJPSBIQ0RfVVNCMiB8IEhDRF9NRU1PUlksCisKKwkvKgorCSAqIGJhc2ljIGxpZmVjeWNsZSBvcGVyYXRpb25zCisJICovCisJLnJlc2V0CQkJCT0gZWhjaV9zaF9yZXNldCwKKwkuc3RhcnQJCQkJPSBlaGNpX3J1biwKKwkuc3RvcAkJCQk9IGVoY2lfc3RvcCwKKwkuc2h1dGRvd24JCQk9IGVoY2lfc2h1dGRvd24sCisKKwkvKgorCSAqIG1hbmFnaW5nIGkvbyByZXF1ZXN0cyBhbmQgYXNzb2NpYXRlZCBkZXZpY2UgcmVzb3VyY2VzCisJICovCisJLnVyYl9lbnF1ZXVlCQkJPSBlaGNpX3VyYl9lbnF1ZXVlLAorCS51cmJfZGVxdWV1ZQkJCT0gZWhjaV91cmJfZGVxdWV1ZSwKKwkuZW5kcG9pbnRfZGlzYWJsZQkJPSBlaGNpX2VuZHBvaW50X2Rpc2FibGUsCisJLmVuZHBvaW50X3Jlc2V0CQkJPSBlaGNpX2VuZHBvaW50X3Jlc2V0LAorCisJLyoKKwkgKiBzY2hlZHVsaW5nIHN1cHBvcnQKKwkgKi8KKwkuZ2V0X2ZyYW1lX251bWJlcgkJPSBlaGNpX2dldF9mcmFtZSwKKworCS8qCisJICogcm9vdCBodWIgc3VwcG9ydAorCSAqLworCS5odWJfc3RhdHVzX2RhdGEJCT0gZWhjaV9odWJfc3RhdHVzX2RhdGEsCisJLmh1Yl9jb250cm9sCQkJPSBlaGNpX2h1Yl9jb250cm9sLAorCisjaWZkZWYgQ09ORklHX1BNCisJLmJ1c19zdXNwZW5kCQkJPSBlaGNpX2J1c19zdXNwZW5kLAorCS5idXNfcmVzdW1lCQkJPSBlaGNpX2J1c19yZXN1bWUsCisjZW5kaWYKKworCS5yZWxpbnF1aXNoX3BvcnQJCT0gZWhjaV9yZWxpbnF1aXNoX3BvcnQsCisJLnBvcnRfaGFuZGVkX292ZXIJCT0gZWhjaV9wb3J0X2hhbmRlZF9vdmVyLAorCS5jbGVhcl90dF9idWZmZXJfY29tcGxldGUJPSBlaGNpX2NsZWFyX3R0X2J1ZmZlcl9jb21wbGV0ZSwKK307CisKK3N0YXRpYyBpbnQgZWhjaV9oY2Rfc2hfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwljb25zdCBzdHJ1Y3QgaGNfZHJpdmVyICpkcml2ZXIgPSAmZWhjaV9zaF9oY19kcml2ZXI7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJc3RydWN0IGVoY2lfc2hfcHJpdiAqcHJpdjsKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkOworCWludCBpcnEsIHJldDsKKworCWlmICh1c2JfZGlzYWJsZWQoKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVzKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCSJGb3VuZCBIQyB3aXRoIG5vIHJlZ2lzdGVyIGFkZHIuIENoZWNrICVzIHNldHVwIVxuIiwKKwkJCWRldl9uYW1lKCZwZGV2LT5kZXYpKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBmYWlsX2NyZWF0ZV9oY2Q7CisJfQorCisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAoaXJxIDw9IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJIkZvdW5kIEhDIHdpdGggbm8gSVJRLiBDaGVjayAlcyBzZXR1cCFcbiIsCisJCQlkZXZfbmFtZSgmcGRldi0+ZGV2KSk7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZmFpbF9jcmVhdGVfaGNkOworCX0KKworCS8qIGluaXRpYWxpemUgaGNkICovCisJaGNkID0gdXNiX2NyZWF0ZV9oY2QoJmVoY2lfc2hfaGNfZHJpdmVyLCAmcGRldi0+ZGV2LAorCQkJICAgICBkZXZfbmFtZSgmcGRldi0+ZGV2KSk7CisJaWYgKCFoY2QpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBmYWlsX2NyZWF0ZV9oY2Q7CisJfQorCisJaGNkLT5yc3JjX3N0YXJ0ID0gcmVzLT5zdGFydDsKKwloY2QtPnJzcmNfbGVuID0gcmVzb3VyY2Vfc2l6ZShyZXMpOworCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuLAorCQkJCWRyaXZlci0+ZGVzY3JpcHRpb24pKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgImNvbnRyb2xsZXIgYWxyZWFkeSBpbiB1c2VcbiIpOworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZmFpbF9yZXF1ZXN0X3Jlc291cmNlOworCX0KKworCWhjZC0+cmVncyA9IGlvcmVtYXBfbm9jYWNoZShoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOworCWlmIChoY2QtPnJlZ3MgPT0gTlVMTCkgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJlcnJvciBtYXBwaW5nIG1lbW9yeVxuIik7CisJCXJldCA9IC1FTlhJTzsKKwkJZ290byBmYWlsX2lvcmVtYXA7CisJfQorCisJcHJpdiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBlaGNpX3NoX3ByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXYpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiZXJyb3IgYWxsb2NhdGluZyBwcml2IGRhdGFcbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGZhaWxfYWxsb2M7CisJfQorCisJLyogVGhlc2UgYXJlIG9wdGlvbmFsLCB3ZSBkb24ndCBjYXJlIGlmIHRoZXkgZmFpbCAqLworCXByaXYtPmZjbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJ1c2JfZmNrIik7CisJaWYgKElTX0VSUihwcml2LT5mY2xrKSkKKwkJcHJpdi0+ZmNsayA9IE5VTEw7CisKKwlwcml2LT5pY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAidXNiX2ljayIpOworCWlmIChJU19FUlIocHJpdi0+aWNsaykpCisJCXByaXYtPmljbGsgPSBOVUxMOworCisJY2xrX2VuYWJsZShwcml2LT5mY2xrKTsKKwljbGtfZW5hYmxlKHByaXYtPmljbGspOworCisJcmV0ID0gdXNiX2FkZF9oY2QoaGNkLCBpcnEsIElSUUZfRElTQUJMRUQgfCBJUlFGX1NIQVJFRCk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBhZGQgaGNkIik7CisJCWdvdG8gZmFpbF9hZGRfaGNkOworCX0KKworCXByaXYtPmhjZCA9IGhjZDsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwcml2KTsKKworCXJldHVybiByZXQ7CisKK2ZhaWxfYWRkX2hjZDoKKwljbGtfZGlzYWJsZShwcml2LT5pY2xrKTsKKwljbGtfZGlzYWJsZShwcml2LT5mY2xrKTsKKworCWNsa19wdXQocHJpdi0+aWNsayk7CisJY2xrX3B1dChwcml2LT5mY2xrKTsKKworCWtmcmVlKHByaXYpOworZmFpbF9hbGxvYzoKKwlpb3VubWFwKGhjZC0+cmVncyk7CitmYWlsX2lvcmVtYXA6CisJcmVsZWFzZV9tZW1fcmVnaW9uKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7CitmYWlsX3JlcXVlc3RfcmVzb3VyY2U6CisJdXNiX3B1dF9oY2QoaGNkKTsKK2ZhaWxfY3JlYXRlX2hjZDoKKwlkZXZfZXJyKCZwZGV2LT5kZXYsICJpbml0ICVzIGZhaWwsICVkXG4iLCBkZXZfbmFtZSgmcGRldi0+ZGV2KSwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19leGl0IGVoY2lfaGNkX3NoX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBlaGNpX3NoX3ByaXYgKnByaXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gcHJpdi0+aGNkOworCisJdXNiX3JlbW92ZV9oY2QoaGNkKTsKKwlpb3VubWFwKGhjZC0+cmVncyk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7CisJdXNiX3B1dF9oY2QoaGNkKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKworCWNsa19kaXNhYmxlKHByaXYtPmZjbGspOworCWNsa19kaXNhYmxlKHByaXYtPmljbGspOworCisJY2xrX3B1dChwcml2LT5mY2xrKTsKKwljbGtfcHV0KHByaXYtPmljbGspOworCisJa2ZyZWUocHJpdik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZWhjaV9oY2Rfc2hfc2h1dGRvd24oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZWhjaV9zaF9wcml2ICpwcml2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHVzYl9oY2QgKmhjZCA9IHByaXYtPmhjZDsKKworCWlmIChoY2QtPmRyaXZlci0+c2h1dGRvd24pCisJCWhjZC0+ZHJpdmVyLT5zaHV0ZG93bihoY2QpOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBlaGNpX2hjZF9zaF9kcml2ZXIgPSB7CisJLnByb2JlCQk9IGVoY2lfaGNkX3NoX3Byb2JlLAorCS5yZW1vdmUJCT0gX19leGl0X3AoZWhjaV9oY2Rfc2hfcmVtb3ZlKSwKKwkuc2h1dGRvd24JPSBlaGNpX2hjZF9zaF9zaHV0ZG93biwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAic2hfZWhjaSIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOnNoX2VoY2kiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1zcGVhci5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXNwZWFyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVjMDA4NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1zcGVhci5jCkBAIC0wLDAgKzEsMjEyIEBACisvKgorKiBEcml2ZXIgZm9yIEVIQ0kgSENEIG9uIFNQRUFSIFNPQworKgorKiBDb3B5cmlnaHQgKEMpIDIwMTAgU1QgTWljcm8gRWxlY3Ryb25pY3MsCisqIERlZXBhayBTaWtyaSA8ZGVlcGFrLnNpa3JpQHN0LmNvbT4KKyoKKyogQmFzZWQgb24gdmFyaW91cyBlaGNpLSouYyBkcml2ZXJzCisqCisqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisqIExpY2Vuc2UuIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUgZm9yCisqIG1vcmUgZGV0YWlscy4KKyovCisKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKworc3RydWN0IHNwZWFyX2VoY2kgeworCXN0cnVjdCBlaGNpX2hjZCBlaGNpOworCXN0cnVjdCBjbGsgKmNsazsKK307CisKKyNkZWZpbmUgdG9fc3BlYXJfZWhjaShoY2QpCShzdHJ1Y3Qgc3BlYXJfZWhjaSAqKWhjZF90b19laGNpKGhjZCkKKworc3RhdGljIHZvaWQgc3BlYXJfc3RhcnRfZWhjaShzdHJ1Y3Qgc3BlYXJfZWhjaSAqZWhjaSkKK3sKKwljbGtfZW5hYmxlKGVoY2ktPmNsayk7Cit9CisKK3N0YXRpYyB2b2lkIHNwZWFyX3N0b3BfZWhjaShzdHJ1Y3Qgc3BlYXJfZWhjaSAqZWhjaSkKK3sKKwljbGtfZGlzYWJsZShlaGNpLT5jbGspOworfQorCitzdGF0aWMgaW50IGVoY2lfc3BlYXJfc2V0dXAoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlzdHJ1Y3QgZWhjaV9oY2QgKmVoY2kgPSBoY2RfdG9fZWhjaShoY2QpOworCWludCByZXR2YWwgPSAwOworCisJLyogcmVnaXN0ZXJzIHN0YXJ0IGF0IG9mZnNldCAweDAgKi8KKwllaGNpLT5jYXBzID0gaGNkLT5yZWdzOworCWVoY2ktPnJlZ3MgPSBoY2QtPnJlZ3MgKyBIQ19MRU5HVEgoZWhjaV9yZWFkbChlaGNpLAorCQkJCSZlaGNpLT5jYXBzLT5oY19jYXBiYXNlKSk7CisJLyogY2FjaGUgdGhpcyByZWFkb25seSBkYXRhOyBtaW5pbWl6ZSBjaGlwIHJlYWRzICovCisJZWhjaS0+aGNzX3BhcmFtcyA9IGVoY2lfcmVhZGwoZWhjaSwgJmVoY2ktPmNhcHMtPmhjc19wYXJhbXMpOworCXJldHZhbCA9IGVoY2lfaGFsdChlaGNpKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJcmV0dmFsID0gZWhjaV9pbml0KGhjZCk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWVoY2lfcmVzZXQoZWhjaSk7CisJZWhjaV9wb3J0X3Bvd2VyKGVoY2ksIDApOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBoY19kcml2ZXIgZWhjaV9zcGVhcl9oY19kcml2ZXIgPSB7CisJLmRlc2NyaXB0aW9uCQkJPSBoY2RfbmFtZSwKKwkucHJvZHVjdF9kZXNjCQkJPSAiU1BFQXIgRUhDSSIsCisJLmhjZF9wcml2X3NpemUJCQk9IHNpemVvZihzdHJ1Y3Qgc3BlYXJfZWhjaSksCisKKwkvKiBnZW5lcmljIGhhcmR3YXJlIGxpbmthZ2UgKi8KKwkuaXJxCQkJCT0gZWhjaV9pcnEsCisJLmZsYWdzCQkJCT0gSENEX01FTU9SWSB8IEhDRF9VU0IyLAorCisJLyogYmFzaWMgbGlmZWN5Y2xlIG9wZXJhdGlvbnMgKi8KKwkucmVzZXQJCQkJPSBlaGNpX3NwZWFyX3NldHVwLAorCS5zdGFydAkJCQk9IGVoY2lfcnVuLAorCS5zdG9wCQkJCT0gZWhjaV9zdG9wLAorCS5zaHV0ZG93bgkJCT0gZWhjaV9zaHV0ZG93biwKKworCS8qIG1hbmFnaW5nIGkvbyByZXF1ZXN0cyBhbmQgYXNzb2NpYXRlZCBkZXZpY2UgcmVzb3VyY2VzICovCisJLnVyYl9lbnF1ZXVlCQkJPSBlaGNpX3VyYl9lbnF1ZXVlLAorCS51cmJfZGVxdWV1ZQkJCT0gZWhjaV91cmJfZGVxdWV1ZSwKKwkuZW5kcG9pbnRfZGlzYWJsZQkJPSBlaGNpX2VuZHBvaW50X2Rpc2FibGUsCisJLmVuZHBvaW50X3Jlc2V0CQkJPSBlaGNpX2VuZHBvaW50X3Jlc2V0LAorCisJLyogc2NoZWR1bGluZyBzdXBwb3J0ICovCisJLmdldF9mcmFtZV9udW1iZXIJCT0gZWhjaV9nZXRfZnJhbWUsCisKKwkvKiByb290IGh1YiBzdXBwb3J0ICovCisJLmh1Yl9zdGF0dXNfZGF0YQkJPSBlaGNpX2h1Yl9zdGF0dXNfZGF0YSwKKwkuaHViX2NvbnRyb2wJCQk9IGVoY2lfaHViX2NvbnRyb2wsCisJLmJ1c19zdXNwZW5kCQkJPSBlaGNpX2J1c19zdXNwZW5kLAorCS5idXNfcmVzdW1lCQkJPSBlaGNpX2J1c19yZXN1bWUsCisJLnJlbGlucXVpc2hfcG9ydAkJPSBlaGNpX3JlbGlucXVpc2hfcG9ydCwKKwkucG9ydF9oYW5kZWRfb3ZlcgkJPSBlaGNpX3BvcnRfaGFuZGVkX292ZXIsCisJLmNsZWFyX3R0X2J1ZmZlcl9jb21wbGV0ZQk9IGVoY2lfY2xlYXJfdHRfYnVmZmVyX2NvbXBsZXRlLAorfTsKKworc3RhdGljIGludCBzcGVhcl9laGNpX2hjZF9kcnZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkIDsKKwlzdHJ1Y3Qgc3BlYXJfZWhjaSAqZWhjaTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlzdHJ1Y3QgY2xrICp1c2JoX2NsazsKKwljb25zdCBzdHJ1Y3QgaGNfZHJpdmVyICpkcml2ZXIgPSAmZWhjaV9zcGVhcl9oY19kcml2ZXI7CisJaW50ICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWludCBpcnEsIHJldHZhbDsKKwljaGFyIGNsa19uYW1lWzIwXSA9ICJ1c2JoX2NsayI7CisKKwlpZiAocGRhdGEgPT0gTlVMTCkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlpZiAodXNiX2Rpc2FibGVkKCkpCisJCXJldHVybiAtRU5PREVWOworCisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAoaXJxIDwgMCkgeworCQlyZXR2YWwgPSBpcnE7CisJCWdvdG8gZmFpbF9pcnFfZ2V0OworCX0KKworCWlmICgqcGRhdGEgPj0gMCkKKwkJc3ByaW50ZihjbGtfbmFtZSwgInVzYmguJTAxZF9jbGsiLCAqcGRhdGEpOworCisJdXNiaF9jbGsgPSBjbGtfZ2V0KE5VTEwsIGNsa19uYW1lKTsKKwlpZiAoSVNfRVJSKHVzYmhfY2xrKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJFcnJvciBnZXR0aW5nIGludGVyZmFjZSBjbG9ja1xuIik7CisJCXJldHZhbCA9IFBUUl9FUlIodXNiaF9jbGspOworCQlnb3RvIGZhaWxfZ2V0X3VzYmhfY2xrOworCX0KKworCWhjZCA9IHVzYl9jcmVhdGVfaGNkKGRyaXZlciwgJnBkZXYtPmRldiwgZGV2X25hbWUoJnBkZXYtPmRldikpOworCWlmICghaGNkKSB7CisJCXJldHZhbCA9IC1FTk9NRU07CisJCWdvdG8gZmFpbF9jcmVhdGVfaGNkOworCX0KKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXMpIHsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBmYWlsX3JlcXVlc3RfcmVzb3VyY2U7CisJfQorCisJaGNkLT5yc3JjX3N0YXJ0ID0gcmVzLT5zdGFydDsKKwloY2QtPnJzcmNfbGVuID0gcmVzb3VyY2Vfc2l6ZShyZXMpOworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbiwKKwkJCQlkcml2ZXItPmRlc2NyaXB0aW9uKSkgeworCQlyZXR2YWwgPSAtRUJVU1k7CisJCWdvdG8gZmFpbF9yZXF1ZXN0X3Jlc291cmNlOworCX0KKworCWhjZC0+cmVncyA9IGlvcmVtYXAoaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuKTsKKwlpZiAoaGNkLT5yZWdzID09IE5VTEwpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiZXJyb3IgbWFwcGluZyBtZW1vcnlcbiIpOworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIGZhaWxfaW9yZW1hcDsKKwl9CisKKwllaGNpID0gKHN0cnVjdCBzcGVhcl9laGNpICopaGNkX3RvX2VoY2koaGNkKTsKKwllaGNpLT5jbGsgPSB1c2JoX2NsazsKKworCXNwZWFyX3N0YXJ0X2VoY2koZWhjaSk7CisJcmV0dmFsID0gdXNiX2FkZF9oY2QoaGNkLCBpcnEsIElSUUZfU0hBUkVEIHwgSVJRRl9ESVNBQkxFRCk7CisJaWYgKHJldHZhbCkKKwkJZ290byBmYWlsX2FkZF9oY2Q7CisKKwlyZXR1cm4gcmV0dmFsOworCitmYWlsX2FkZF9oY2Q6CisJc3BlYXJfc3RvcF9laGNpKGVoY2kpOworCWlvdW5tYXAoaGNkLT5yZWdzKTsKK2ZhaWxfaW9yZW1hcDoKKwlyZWxlYXNlX21lbV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuKTsKK2ZhaWxfcmVxdWVzdF9yZXNvdXJjZToKKwl1c2JfcHV0X2hjZChoY2QpOworZmFpbF9jcmVhdGVfaGNkOgorCWNsa19wdXQodXNiaF9jbGspOworZmFpbF9nZXRfdXNiaF9jbGs6CitmYWlsX2lycV9nZXQ6CisJZGV2X2VycigmcGRldi0+ZGV2LCAiaW5pdCBmYWlsLCAlZFxuIiwgcmV0dmFsKTsKKworCXJldHVybiByZXR2YWwgOworfQorCitzdGF0aWMgaW50IHNwZWFyX2VoY2lfaGNkX2Rydl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNwZWFyX2VoY2kgKmVoY2lfcCA9IHRvX3NwZWFyX2VoY2koaGNkKTsKKworCWlmICghaGNkKQorCQlyZXR1cm4gMDsKKwlpZiAoaW5faW50ZXJydXB0KCkpCisJCUJVRygpOworCXVzYl9yZW1vdmVfaGNkKGhjZCk7CisKKwlpZiAoZWhjaV9wLT5jbGspCisJCXNwZWFyX3N0b3BfZWhjaShlaGNpX3ApOworCWlvdW5tYXAoaGNkLT5yZWdzKTsKKwlyZWxlYXNlX21lbV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuKTsKKwl1c2JfcHV0X2hjZChoY2QpOworCisJaWYgKGVoY2lfcC0+Y2xrKQorCQljbGtfcHV0KGVoY2lfcC0+Y2xrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzcGVhcl9laGNpX2hjZF9kcml2ZXIgPSB7CisJLnByb2JlCQk9IHNwZWFyX2VoY2lfaGNkX2Rydl9wcm9iZSwKKwkucmVtb3ZlCQk9IHNwZWFyX2VoY2lfaGNkX2Rydl9yZW1vdmUsCisJLnNodXRkb3duCT0gdXNiX2hjZF9wbGF0Zm9ybV9zaHV0ZG93biwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUgPSAic3BlYXItZWhjaSIsCisJCS5idXMgPSAmcGxhdGZvcm1fYnVzX3R5cGUKKwl9Cit9OworCitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOnNwZWFyLWVoY2kiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS12dDg1MDAuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS12dDg1MDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDE2ODA2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXZ0ODUwMC5jCkBAIC0wLDAgKzEsMTcyIEBACisvKgorICogZHJpdmVycy91c2IvaG9zdC9laGNpLXZ0ODUwMC5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFsZXhleSBDaGFya292IDxhbGNoYXJrQGdtYWlsLmNvbT4KKyAqCisgKiBCYXNlZCBvbiBlaGNpLWF1MXh4eC5jCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCitzdGF0aWMgaW50IGVoY2lfdXBkYXRlX2RldmljZShzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKK3sKKwlzdHJ1Y3QgZWhjaV9oY2QgKmVoY2kgPSBoY2RfdG9fZWhjaShoY2QpOworCWludCByYyA9IDA7CisKKwlpZiAoIXVkZXYtPnBhcmVudCkgLyogdWRldiBpcyByb290IGh1YiBpdHNlbGYsIGltcG9zc2libGUgKi8KKwkJcmMgPSAtMTsKKwkvKiB3ZSBvbmx5IHN1cHBvcnQgbHBtIGRldmljZSBjb25uZWN0ZWQgdG8gcm9vdCBodWIgeWV0ICovCisJaWYgKGVoY2ktPmhhc19scG0gJiYgIXVkZXYtPnBhcmVudC0+cGFyZW50KSB7CisJCXJjID0gZWhjaV9scG1fc2V0X2RhKGVoY2ksIHVkZXYtPmRldm51bSwgdWRldi0+cG9ydG51bSk7CisJCWlmICghcmMpCisJCQlyYyA9IGVoY2lfbHBtX2NoZWNrKGVoY2ksIHVkZXYtPnBvcnRudW0pOworCX0KKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGNfZHJpdmVyIHZ0ODUwMF9laGNpX2hjX2RyaXZlciA9IHsKKwkuZGVzY3JpcHRpb24JCT0gaGNkX25hbWUsCisJLnByb2R1Y3RfZGVzYwkJPSAiVlQ4NTAwIEVIQ0kiLAorCS5oY2RfcHJpdl9zaXplCQk9IHNpemVvZihzdHJ1Y3QgZWhjaV9oY2QpLAorCisJLyoKKwkgKiBnZW5lcmljIGhhcmR3YXJlIGxpbmthZ2UKKwkgKi8KKwkuaXJxCQkJPSBlaGNpX2lycSwKKwkuZmxhZ3MJCQk9IEhDRF9NRU1PUlkgfCBIQ0RfVVNCMiwKKworCS8qCisJICogYmFzaWMgbGlmZWN5Y2xlIG9wZXJhdGlvbnMKKwkgKi8KKwkucmVzZXQJCQk9IGVoY2lfaW5pdCwKKwkuc3RhcnQJCQk9IGVoY2lfcnVuLAorCS5zdG9wCQkJPSBlaGNpX3N0b3AsCisJLnNodXRkb3duCQk9IGVoY2lfc2h1dGRvd24sCisKKwkvKgorCSAqIG1hbmFnaW5nIGkvbyByZXF1ZXN0cyBhbmQgYXNzb2NpYXRlZCBkZXZpY2UgcmVzb3VyY2VzCisJICovCisJLnVyYl9lbnF1ZXVlCQk9IGVoY2lfdXJiX2VucXVldWUsCisJLnVyYl9kZXF1ZXVlCQk9IGVoY2lfdXJiX2RlcXVldWUsCisJLmVuZHBvaW50X2Rpc2FibGUJPSBlaGNpX2VuZHBvaW50X2Rpc2FibGUsCisJLmVuZHBvaW50X3Jlc2V0CQk9IGVoY2lfZW5kcG9pbnRfcmVzZXQsCisKKwkvKgorCSAqIHNjaGVkdWxpbmcgc3VwcG9ydAorCSAqLworCS5nZXRfZnJhbWVfbnVtYmVyCT0gZWhjaV9nZXRfZnJhbWUsCisKKwkvKgorCSAqIHJvb3QgaHViIHN1cHBvcnQKKwkgKi8KKwkuaHViX3N0YXR1c19kYXRhCT0gZWhjaV9odWJfc3RhdHVzX2RhdGEsCisJLmh1Yl9jb250cm9sCQk9IGVoY2lfaHViX2NvbnRyb2wsCisJLmJ1c19zdXNwZW5kCQk9IGVoY2lfYnVzX3N1c3BlbmQsCisJLmJ1c19yZXN1bWUJCT0gZWhjaV9idXNfcmVzdW1lLAorCS5yZWxpbnF1aXNoX3BvcnQJPSBlaGNpX3JlbGlucXVpc2hfcG9ydCwKKwkucG9ydF9oYW5kZWRfb3Zlcgk9IGVoY2lfcG9ydF9oYW5kZWRfb3ZlciwKKworCS8qCisJICogY2FsbCBiYWNrIHdoZW4gZGV2aWNlIGNvbm5lY3RlZCBhbmQgYWRkcmVzc2VkCisJICovCisJLnVwZGF0ZV9kZXZpY2UgPQllaGNpX3VwZGF0ZV9kZXZpY2UsCisKKwkuY2xlYXJfdHRfYnVmZmVyX2NvbXBsZXRlCT0gZWhjaV9jbGVhcl90dF9idWZmZXJfY29tcGxldGUsCit9OworCitzdGF0aWMgaW50IHZ0ODUwMF9laGNpX2Rydl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB1c2JfaGNkICpoY2Q7CisJc3RydWN0IGVoY2lfaGNkICplaGNpOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCByZXQ7CisKKwlpZiAodXNiX2Rpc2FibGVkKCkpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKHBkZXYtPnJlc291cmNlWzFdLmZsYWdzICE9IElPUkVTT1VSQ0VfSVJRKSB7CisJCXByX2RlYnVnKCJyZXNvdXJjZVsxXSBpcyBub3QgSU9SRVNPVVJDRV9JUlEiKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWhjZCA9IHVzYl9jcmVhdGVfaGNkKCZ2dDg1MDBfZWhjaV9oY19kcml2ZXIsICZwZGV2LT5kZXYsICJWVDg1MDAiKTsKKwlpZiAoIWhjZCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWhjZC0+cnNyY19zdGFydCA9IHJlcy0+c3RhcnQ7CisJaGNkLT5yc3JjX2xlbiA9IHJlc291cmNlX3NpemUocmVzKTsKKworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbiwgaGNkX25hbWUpKSB7CisJCXByX2RlYnVnKCJyZXF1ZXN0X21lbV9yZWdpb24gZmFpbGVkIik7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBlcnIxOworCX0KKworCWhjZC0+cmVncyA9IGlvcmVtYXAoaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuKTsKKwlpZiAoIWhjZC0+cmVncykgeworCQlwcl9kZWJ1ZygiaW9yZW1hcCBmYWlsZWQiKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnIyOworCX0KKworCWVoY2kgPSBoY2RfdG9fZWhjaShoY2QpOworCWVoY2ktPmNhcHMgPSBoY2QtPnJlZ3M7CisJZWhjaS0+cmVncyA9IGhjZC0+cmVncyArIEhDX0xFTkdUSChyZWFkbCgmZWhjaS0+Y2Fwcy0+aGNfY2FwYmFzZSkpOworCisJZGJnX2hjc19wYXJhbXMoZWhjaSwgInJlc2V0Iik7CisJZGJnX2hjY19wYXJhbXMoZWhjaSwgInJlc2V0Iik7CisKKwkvKiBjYWNoZSB0aGlzIHJlYWRvbmx5IGRhdGE7IG1pbmltaXplIGNoaXAgcmVhZHMgKi8KKwllaGNpLT5oY3NfcGFyYW1zID0gcmVhZGwoJmVoY2ktPmNhcHMtPmhjc19wYXJhbXMpOworCisJZWhjaV9wb3J0X3Bvd2VyKGVoY2ksIDEpOworCisJcmV0ID0gdXNiX2FkZF9oY2QoaGNkLCBwZGV2LT5yZXNvdXJjZVsxXS5zdGFydCwKKwkJCSAgSVJRRl9ESVNBQkxFRCB8IElSUUZfU0hBUkVEKTsKKwlpZiAocmV0ID09IDApIHsKKwkJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaGNkKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlpb3VubWFwKGhjZC0+cmVncyk7CitlcnIyOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOworZXJyMToKKwl1c2JfcHV0X2hjZChoY2QpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdnQ4NTAwX2VoY2lfZHJ2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXVzYl9yZW1vdmVfaGNkKGhjZCk7CisJaW91bm1hcChoY2QtPnJlZ3MpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOworCXVzYl9wdXRfaGNkKGhjZCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdnQ4NTAwX2VoY2lfZHJpdmVyID0geworCS5wcm9iZQkJPSB2dDg1MDBfZWhjaV9kcnZfcHJvYmUsCisJLnJlbW92ZQkJPSB2dDg1MDBfZWhjaV9kcnZfcmVtb3ZlLAorCS5zaHV0ZG93bgk9IHVzYl9oY2RfcGxhdGZvcm1fc2h1dGRvd24sCisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSAidnQ4NTAwLWVoY2kiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9Cit9OworCitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOnZ0ODUwMC1laGNpIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktdzkweDkwMC5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXc5MHg5MDAuYwppbmRleCBjZmEyMWVhLi42YmMzNTgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktdzkweDkwMC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS13OTB4OTAwLmMKQEAgLTEzMCw2ICsxMzAsNyBAQAogCS51cmJfZW5xdWV1ZSA9IGVoY2lfdXJiX2VucXVldWUsCiAJLnVyYl9kZXF1ZXVlID0gZWhjaV91cmJfZGVxdWV1ZSwKIAkuZW5kcG9pbnRfZGlzYWJsZSA9IGVoY2lfZW5kcG9pbnRfZGlzYWJsZSwKKwkuZW5kcG9pbnRfcmVzZXQgPSBlaGNpX2VuZHBvaW50X3Jlc2V0LAogCiAJLyoKIAkgKiBzY2hlZHVsaW5nIHN1cHBvcnQKQEAgLTE0Nyw2ICsxNDgsOCBAQAogI2VuZGlmCiAJLnJlbGlucXVpc2hfcG9ydAk9IGVoY2lfcmVsaW5xdWlzaF9wb3J0LAogCS5wb3J0X2hhbmRlZF9vdmVyCT0gZWhjaV9wb3J0X2hhbmRlZF9vdmVyLAorCisJLmNsZWFyX3R0X2J1ZmZlcl9jb21wbGV0ZSA9IGVoY2lfY2xlYXJfdHRfYnVmZmVyX2NvbXBsZXRlLAogfTsKIAogc3RhdGljIGludCBfX2RldmluaXQgZWhjaV93OTB4OTAwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2kteGlsaW54LW9mLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2kteGlsaW54LW9mLmMKaW5kZXggNmM4MDc2YS4uZThmNGYzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLXhpbGlueC1vZi5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS14aWxpbngtb2YuYwpAQCAtMTE3LDYgKzExNyw3IEBACiAJLnVyYl9lbnF1ZXVlCQk9IGVoY2lfdXJiX2VucXVldWUsCiAJLnVyYl9kZXF1ZXVlCQk9IGVoY2lfdXJiX2RlcXVldWUsCiAJLmVuZHBvaW50X2Rpc2FibGUJPSBlaGNpX2VuZHBvaW50X2Rpc2FibGUsCisJLmVuZHBvaW50X3Jlc2V0CQk9IGVoY2lfZW5kcG9pbnRfcmVzZXQsCiAKIAkvKgogCSAqIHNjaGVkdWxpbmcgc3VwcG9ydApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLmggYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2kuaAppbmRleCBiYThlYWIzLi43OTlhYzE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2kuaAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2kuaApAQCAtMTMxLDYgKzEzMSw3IEBACiAJdW5zaWduZWQJCWhhc19hbWNjX3VzYjIzOjE7CiAJdW5zaWduZWQJCW5lZWRfaW9fd2F0Y2hkb2c6MTsKIAl1bnNpZ25lZAkJYnJva2VuX3BlcmlvZGljOjE7CisJdW5zaWduZWQJCWFtZF9sMV9maXg6MTsKIAl1bnNpZ25lZAkJZnNfaV90aHJlc2g6MTsJLyogSW50ZWwgaXNvIHNjaGVkdWxpbmcgKi8KIAl1bnNpZ25lZAkJdXNlX2R1bW15X3FoOjE7CS8qIEFNRCBGcmFtZSBMaXN0IHRhYmxlIHF1aXJrKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWNuczN4eHguYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1jbnMzeHh4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA1ZWY4NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1jbnMzeHh4LmMKQEAgLTAsMCArMSwxNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOCBDYXZpdW0gTmV0d29ya3MKKyAqCisgKiBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgVmVyc2lvbiAyLCBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2F0b21pYy5oPgorI2luY2x1ZGUgPG1hY2gvY25zM3h4eC5oPgorI2luY2x1ZGUgPG1hY2gvcG0uaD4KKworc3RhdGljIGludCBfX2RldmluaXQKK2NuczN4eHhfb2hjaV9zdGFydChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCBvaGNpX2hjZAkqb2hjaSA9IGhjZF90b19vaGNpKGhjZCk7CisJaW50IHJldDsKKworCS8qCisJICogRUhDSSBhbmQgT0hDSSBzaGFyZSB0aGUgc2FtZSBjbG9jayBhbmQgcG93ZXIsCisJICogcmVzZXR0aW5nIHR3aWNlIHdvdWxkIGNhdXNlIHRoZSAxc3QgY29udHJvbGxlciBiZWVuIHJlc2V0LgorCSAqIFRoZXJlZm9yZSBvbmx5IGRvIHBvd2VyIHVwICBhdCB0aGUgZmlyc3QgdXAgZGV2aWNlLCBhbmQKKwkgKiBwb3dlciBkb3duIGF0IHRoZSBsYXN0IGRvd24gZGV2aWNlLgorCSAqCisJICogU2V0IFVTQiBBSEIgSU5DUiBsZW5ndGggdG8gMTYKKwkgKi8KKwlpZiAoYXRvbWljX2luY19yZXR1cm4oJnVzYl9wd3JfcmVmKSA9PSAxKSB7CisJCWNuczN4eHhfcHdyX3Bvd2VyX3VwKDEgPDwgUE1fUExMX0hNX1BEX0NUUkxfUkVHX09GRlNFVF9QTExfVVNCKTsKKwkJY25zM3h4eF9wd3JfY2xrX2VuKDEgPDwgUE1fQ0xLX0dBVEVfUkVHX09GRlNFVF9VU0JfSE9TVCk7CisJCWNuczN4eHhfcHdyX3NvZnRfcnN0KDEgPDwgUE1fU09GVF9SU1RfUkVHX09GRlNUX1VTQl9IT1NUKTsKKwkJX19yYXdfd3JpdGVsKChfX3Jhd19yZWFkbChNSVNDX0NISVBfQ09ORklHX1JFRykgfCAoMFgyIDw8IDI0KSksCisJCQlNSVNDX0NISVBfQ09ORklHX1JFRyk7CisJfQorCisJcmV0ID0gb2hjaV9pbml0KG9oY2kpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJb2hjaS0+bnVtX3BvcnRzID0gMTsKKworCXJldCA9IG9oY2lfcnVuKG9oY2kpOworCWlmIChyZXQgPCAwKSB7CisJCWVycigiY2FuJ3Qgc3RhcnQgJXMiLCBoY2QtPnNlbGYuYnVzX25hbWUpOworCQlvaGNpX3N0b3AoaGNkKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGNfZHJpdmVyIGNuczN4eHhfb2hjaV9oY19kcml2ZXIgPSB7CisJLmRlc2NyaXB0aW9uCQk9IGhjZF9uYW1lLAorCS5wcm9kdWN0X2Rlc2MJCT0gIkNOUzNYWFggT0hDSSBIb3N0IGNvbnRyb2xsZXIiLAorCS5oY2RfcHJpdl9zaXplCQk9IHNpemVvZihzdHJ1Y3Qgb2hjaV9oY2QpLAorCS5pcnEJCQk9IG9oY2lfaXJxLAorCS5mbGFncwkJCT0gSENEX1VTQjExIHwgSENEX01FTU9SWSwKKwkuc3RhcnQJCQk9IGNuczN4eHhfb2hjaV9zdGFydCwKKwkuc3RvcAkJCT0gb2hjaV9zdG9wLAorCS5zaHV0ZG93bgkJPSBvaGNpX3NodXRkb3duLAorCS51cmJfZW5xdWV1ZQkJPSBvaGNpX3VyYl9lbnF1ZXVlLAorCS51cmJfZGVxdWV1ZQkJPSBvaGNpX3VyYl9kZXF1ZXVlLAorCS5lbmRwb2ludF9kaXNhYmxlCT0gb2hjaV9lbmRwb2ludF9kaXNhYmxlLAorCS5nZXRfZnJhbWVfbnVtYmVyCT0gb2hjaV9nZXRfZnJhbWUsCisJLmh1Yl9zdGF0dXNfZGF0YQk9IG9oY2lfaHViX3N0YXR1c19kYXRhLAorCS5odWJfY29udHJvbAkJPSBvaGNpX2h1Yl9jb250cm9sLAorI2lmZGVmIENPTkZJR19QTQorCS5idXNfc3VzcGVuZAkJPSBvaGNpX2J1c19zdXNwZW5kLAorCS5idXNfcmVzdW1lCQk9IG9oY2lfYnVzX3Jlc3VtZSwKKyNlbmRpZgorCS5zdGFydF9wb3J0X3Jlc2V0CT0gb2hjaV9zdGFydF9wb3J0X3Jlc2V0LAorfTsKKworc3RhdGljIGludCBjbnMzeHh4X29oY2lfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCB1c2JfaGNkICpoY2Q7CisJY29uc3Qgc3RydWN0IGhjX2RyaXZlciAqZHJpdmVyID0gJmNuczN4eHhfb2hjaV9oY19kcml2ZXI7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJaW50IGlycTsKKwlpbnQgcmV0dmFsOworCisJaWYgKHVzYl9kaXNhYmxlZCgpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgMCk7CisJaWYgKCFyZXMpIHsKKwkJZGV2X2VycihkZXYsICJGb3VuZCBIQyB3aXRoIG5vIElSUS5cbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJaXJxID0gcmVzLT5zdGFydDsKKworCWhjZCA9IHVzYl9jcmVhdGVfaGNkKGRyaXZlciwgZGV2LCBkZXZfbmFtZShkZXYpKTsKKwlpZiAoIWhjZCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVzKSB7CisJCWRldl9lcnIoZGV2LCAiRm91bmQgSEMgd2l0aCBubyByZWdpc3RlciBhZGRyLlxuIik7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyMTsKKwl9CisJaGNkLT5yc3JjX3N0YXJ0ID0gcmVzLT5zdGFydDsKKwloY2QtPnJzcmNfbGVuID0gcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMTsKKworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbiwKKwkJCWRyaXZlci0+ZGVzY3JpcHRpb24pKSB7CisJCWRldl9kYmcoZGV2LCAiY29udHJvbGxlciBhbHJlYWR5IGluIHVzZVxuIik7CisJCXJldHZhbCA9IC1FQlVTWTsKKwkJZ290byBlcnIxOworCX0KKworCWhjZC0+cmVncyA9IGlvcmVtYXAoaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuKTsKKwlpZiAoIWhjZC0+cmVncykgeworCQlkZXZfZGJnKGRldiwgImVycm9yIG1hcHBpbmcgbWVtb3J5XG4iKTsKKwkJcmV0dmFsID0gLUVGQVVMVDsKKwkJZ290byBlcnIyOworCX0KKworCW9oY2lfaGNkX2luaXQoaGNkX3RvX29oY2koaGNkKSk7CisKKwlyZXR2YWwgPSB1c2JfYWRkX2hjZChoY2QsIGlycSwgSVJRRl9TSEFSRUQpOworCWlmIChyZXR2YWwgPT0gMCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWlvdW5tYXAoaGNkLT5yZWdzKTsKK2VycjI6CisJcmVsZWFzZV9tZW1fcmVnaW9uKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7CitlcnIxOgorCXVzYl9wdXRfaGNkKGhjZCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBjbnMzeHh4X29oY2lfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHVzYl9oY2QgKmhjZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJdXNiX3JlbW92ZV9oY2QoaGNkKTsKKwlpb3VubWFwKGhjZC0+cmVncyk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7CisKKwkvKgorCSAqIEVIQ0kgYW5kIE9IQ0kgc2hhcmUgdGhlIHNhbWUgY2xvY2sgYW5kIHBvd2VyLAorCSAqIHJlc2V0dGluZyB0d2ljZSB3b3VsZCBjYXVzZSB0aGUgMXN0IGNvbnRyb2xsZXIgYmVlbiByZXNldC4KKwkgKiBUaGVyZWZvcmUgb25seSBkbyBwb3dlciB1cCAgYXQgdGhlIGZpcnN0IHVwIGRldmljZSwgYW5kCisJICogcG93ZXIgZG93biBhdCB0aGUgbGFzdCBkb3duIGRldmljZS4KKwkgKi8KKwlpZiAoYXRvbWljX2RlY19yZXR1cm4oJnVzYl9wd3JfcmVmKSA9PSAwKQorCQljbnMzeHh4X3B3cl9jbGtfZGlzKDEgPDwgUE1fQ0xLX0dBVEVfUkVHX09GRlNFVF9VU0JfSE9TVCk7CisKKwl1c2JfcHV0X2hjZChoY2QpOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisKKwlyZXR1cm4gMDsKK30KKworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpjbnMzeHh4LW9oY2kiKTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb2hjaV9oY2RfY25zM3h4eF9kcml2ZXIgPSB7CisJLnByb2JlID0gY25zM3h4eF9vaGNpX3Byb2JlLAorCS5yZW1vdmUgPSBjbnMzeHh4X29oY2lfcmVtb3ZlLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gImNuczN4eHgtb2hjaSIsCisJfSwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMKaW5kZXggNTE3OWFjYi4uNzU5YTEyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYwpAQCAtOTAxLDcgKzkwMSw4IEBACiAKIAlvaGNpX2R1bXAgKG9oY2ksIDEpOwogCi0JZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwlpZiAocXVpcmtfbmVjKG9oY2kpKQorCQlmbHVzaF93b3JrX3N5bmMoJm9oY2ktPm5lY193b3JrKTsKIAogCW9oY2lfdXNiX3Jlc2V0IChvaGNpKTsKIAlvaGNpX3dyaXRlbCAob2hjaSwgT0hDSV9JTlRSX01JRSwgJm9oY2ktPnJlZ3MtPmludHJkaXNhYmxlKTsKQEAgLTEwODEsNiArMTA4MiwxMSBAQAogI2RlZmluZSBPRl9QTEFURk9STV9EUklWRVIJb2hjaV9oY2RfcHBjX29mX2RyaXZlcgogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfUExBVF9TUEVBUgorI2luY2x1ZGUgIm9oY2ktc3BlYXIuYyIKKyNkZWZpbmUgUExBVEZPUk1fRFJJVkVSCQlzcGVhcl9vaGNpX2hjZF9kcml2ZXIKKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX1BQQ19QUzMKICNpbmNsdWRlICJvaGNpLXBzMy5jIgogI2RlZmluZSBQUzNfU1lTVEVNX0JVU19EUklWRVIJcHMzX29oY2lfZHJpdmVyCkBAIC0xMTExLDYgKzExMTcsMTEgQEAKICNkZWZpbmUgUExBVEZPUk1fRFJJVkVSCQlvaGNpX29jdGVvbl9kcml2ZXIKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX1VTQl9DTlMzWFhYX09IQ0kKKyNpbmNsdWRlICJvaGNpLWNuczN4eHguYyIKKyNkZWZpbmUgUExBVEZPUk1fRFJJVkVSCQlvaGNpX2hjZF9jbnMzeHh4X2RyaXZlcgorI2VuZGlmCisKICNpZgkhZGVmaW5lZChQQ0lfRFJJVkVSKSAmJgkJXAogCSFkZWZpbmVkKFBMQVRGT1JNX0RSSVZFUikgJiYJXAogCSFkZWZpbmVkKE9NQVAxX1BMQVRGT1JNX0RSSVZFUikgJiYJXApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLW9tYXAzLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktb21hcDMuYwppbmRleCAyY2M4YTUwLi5hMzdkNTk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktb21hcDMuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktb21hcDMuYwpAQCAtNjQ4LDcgKzY0OCw3IEBACiAKIAlyZXQgPSBvbWFwM19zdGFydF9vaGNpKG9tYXAsIGhjZCk7CiAJaWYgKHJldCkgewotCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gc3RhcnQgZWhjaVxuIik7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgImZhaWxlZCB0byBzdGFydCBvaGNpXG4iKTsKIAkJZ290byBlcnJfc3RhcnQ7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktc2guYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1zaC5jCmluZGV4IDBiMzVkMjIuLmY0Nzg2N2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1zaC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1zaC5jCkBAIC0xMDksNyArMTA5LDcgQEAKIAloY2QtPnJlZ3MgPSAodm9pZCBfX2lvbWVtICopcmVzLT5zdGFydDsKIAloY2QtPnJzcmNfc3RhcnQgPSByZXMtPnN0YXJ0OwogCWhjZC0+cnNyY19sZW4gPSByZXNvdXJjZV9zaXplKHJlcyk7Ci0JcmV0ID0gdXNiX2FkZF9oY2QoaGNkLCBpcnEsIElSUUZfRElTQUJMRUQpOworCXJldCA9IHVzYl9hZGRfaGNkKGhjZCwgaXJxLCBJUlFGX0RJU0FCTEVEIHwgSVJRRl9TSEFSRUQpOwogCWlmIChyZXQgIT0gMCkgewogCQllcnIoIkZhaWxlZCB0byBhZGQgaGNkIik7CiAJCXVzYl9wdXRfaGNkKGhjZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktc3BlYXIuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1zcGVhci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmZDRiZWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktc3BlYXIuYwpAQCAtMCwwICsxLDI0MCBAQAorLyoKKyogT0hDSSBIQ0QgKEhvc3QgQ29udHJvbGxlciBEcml2ZXIpIGZvciBVU0IuCisqCisqIENvcHlyaWdodCAoQykgMjAxMCBTVCBNaWNyb2VsZWN0cm9uaWNzLgorKiBEZWVwYWsgU2lrcmk8ZGVlcGFrLnNpa3JpQHN0LmNvbT4KKyoKKyogQmFzZWQgb24gdmFyaW91cyBvaGNpLSouYyBkcml2ZXJzCisqCisqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworKiBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorKi8KKworI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorCitzdHJ1Y3Qgc3BlYXJfb2hjaSB7CisJc3RydWN0IG9oY2lfaGNkIG9oY2k7CisJc3RydWN0IGNsayAqY2xrOworfTsKKworI2RlZmluZSB0b19zcGVhcl9vaGNpKGhjZCkJKHN0cnVjdCBzcGVhcl9vaGNpICopaGNkX3RvX29oY2koaGNkKQorCitzdGF0aWMgdm9pZCBzcGVhcl9zdGFydF9vaGNpKHN0cnVjdCBzcGVhcl9vaGNpICpvaGNpKQoreworCWNsa19lbmFibGUob2hjaS0+Y2xrKTsKK30KKworc3RhdGljIHZvaWQgc3BlYXJfc3RvcF9vaGNpKHN0cnVjdCBzcGVhcl9vaGNpICpvaGNpKQoreworCWNsa19kaXNhYmxlKG9oY2ktPmNsayk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IG9oY2lfc3BlYXJfc3RhcnQoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2kgPSBoY2RfdG9fb2hjaShoY2QpOworCWludCByZXQ7CisKKwlyZXQgPSBvaGNpX2luaXQob2hjaSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJb2hjaS0+cmVncyA9IGhjZC0+cmVnczsKKworCXJldCA9IG9oY2lfcnVuKG9oY2kpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoaGNkLT5zZWxmLmNvbnRyb2xsZXIsICJjYW4ndCBzdGFydFxuIik7CisJCW9oY2lfc3RvcChoY2QpOworCQlyZXR1cm4gcmV0OworCX0KKworCWNyZWF0ZV9kZWJ1Z19maWxlcyhvaGNpKTsKKworI2lmZGVmIERFQlVHCisJb2hjaV9kdW1wKG9oY2ksIDEpOworI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGNfZHJpdmVyIG9oY2lfc3BlYXJfaGNfZHJpdmVyID0geworCS5kZXNjcmlwdGlvbgkJPSBoY2RfbmFtZSwKKwkucHJvZHVjdF9kZXNjCQk9ICJTUEVBciBPSENJIiwKKwkuaGNkX3ByaXZfc2l6ZQkJPSBzaXplb2Yoc3RydWN0IHNwZWFyX29oY2kpLAorCisJLyogZ2VuZXJpYyBoYXJkd2FyZSBsaW5rYWdlICovCisJLmlycQkJCT0gb2hjaV9pcnEsCisJLmZsYWdzCQkJPSBIQ0RfVVNCMTEgfCBIQ0RfTUVNT1JZLAorCisJLyogYmFzaWMgbGlmZWN5Y2xlIG9wZXJhdGlvbnMgKi8KKwkuc3RhcnQJCQk9IG9oY2lfc3BlYXJfc3RhcnQsCisJLnN0b3AJCQk9IG9oY2lfc3RvcCwKKwkuc2h1dGRvd24JCT0gb2hjaV9zaHV0ZG93biwKKyNpZmRlZglDT05GSUdfUE0KKwkuYnVzX3N1c3BlbmQJCT0gb2hjaV9idXNfc3VzcGVuZCwKKwkuYnVzX3Jlc3VtZQkJPSBvaGNpX2J1c19yZXN1bWUsCisjZW5kaWYKKworCS8qIG1hbmFnaW5nIGkvbyByZXF1ZXN0cyBhbmQgYXNzb2NpYXRlZCBkZXZpY2UgcmVzb3VyY2VzICovCisJLnVyYl9lbnF1ZXVlCQk9IG9oY2lfdXJiX2VucXVldWUsCisJLnVyYl9kZXF1ZXVlCQk9IG9oY2lfdXJiX2RlcXVldWUsCisJLmVuZHBvaW50X2Rpc2FibGUJPSBvaGNpX2VuZHBvaW50X2Rpc2FibGUsCisKKwkvKiBzY2hlZHVsaW5nIHN1cHBvcnQgKi8KKwkuZ2V0X2ZyYW1lX251bWJlcgk9IG9oY2lfZ2V0X2ZyYW1lLAorCisJLyogcm9vdCBodWIgc3VwcG9ydCAqLworCS5odWJfc3RhdHVzX2RhdGEJPSBvaGNpX2h1Yl9zdGF0dXNfZGF0YSwKKwkuaHViX2NvbnRyb2wJCT0gb2hjaV9odWJfY29udHJvbCwKKworCS5zdGFydF9wb3J0X3Jlc2V0CT0gb2hjaV9zdGFydF9wb3J0X3Jlc2V0LAorfTsKKworc3RhdGljIGludCBzcGVhcl9vaGNpX2hjZF9kcnZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwljb25zdCBzdHJ1Y3QgaGNfZHJpdmVyICpkcml2ZXIgPSAmb2hjaV9zcGVhcl9oY19kcml2ZXI7CisJc3RydWN0IHVzYl9oY2QgKmhjZCA9IE5VTEw7CisJc3RydWN0IGNsayAqdXNiaF9jbGs7CisJc3RydWN0IHNwZWFyX29oY2kgKm9oY2lfcDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQgcmV0dmFsLCBpcnE7CisJaW50ICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWNoYXIgY2xrX25hbWVbMjBdID0gInVzYmhfY2xrIjsKKworCWlmIChwZGF0YSA9PSBOVUxMKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKGlycSA8IDApIHsKKwkJcmV0dmFsID0gaXJxOworCQlnb3RvIGZhaWxfaXJxX2dldDsKKwl9CisKKwlpZiAoKnBkYXRhID49IDApCisJCXNwcmludGYoY2xrX25hbWUsICJ1c2JoLiUwMWRfY2xrIiwgKnBkYXRhKTsKKworCXVzYmhfY2xrID0gY2xrX2dldChOVUxMLCBjbGtfbmFtZSk7CisJaWYgKElTX0VSUih1c2JoX2NsaykpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRXJyb3IgZ2V0dGluZyBpbnRlcmZhY2UgY2xvY2tcbiIpOworCQlyZXR2YWwgPSBQVFJfRVJSKHVzYmhfY2xrKTsKKwkJZ290byBmYWlsX2dldF91c2JoX2NsazsKKwl9CisKKwloY2QgPSB1c2JfY3JlYXRlX2hjZChkcml2ZXIsICZwZGV2LT5kZXYsIGRldl9uYW1lKCZwZGV2LT5kZXYpKTsKKwlpZiAoIWhjZCkgeworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIGZhaWxfY3JlYXRlX2hjZDsKKwl9CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVzKSB7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gZmFpbF9yZXF1ZXN0X3Jlc291cmNlOworCX0KKworCWhjZC0+cnNyY19zdGFydCA9IHBkZXYtPnJlc291cmNlWzBdLnN0YXJ0OworCWhjZC0+cnNyY19sZW4gPSByZXNvdXJjZV9zaXplKHJlcyk7CisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuLCBoY2RfbmFtZSkpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAicmVxdWVzdF9tZW1fcmVnaW9uIGZhaWxlZFxuIik7CisJCXJldHZhbCA9IC1FQlVTWTsKKwkJZ290byBmYWlsX3JlcXVlc3RfcmVzb3VyY2U7CisJfQorCisJaGNkLT5yZWdzID0gaW9yZW1hcChoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOworCWlmICghaGNkLT5yZWdzKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgImlvcmVtYXAgZmFpbGVkXG4iKTsKKwkJcmV0dmFsID0gLUVOT01FTTsKKwkJZ290byBmYWlsX2lvcmVtYXA7CisJfQorCisJb2hjaV9wID0gKHN0cnVjdCBzcGVhcl9vaGNpICopaGNkX3RvX29oY2koaGNkKTsKKwlvaGNpX3AtPmNsayA9IHVzYmhfY2xrOworCXNwZWFyX3N0YXJ0X29oY2kob2hjaV9wKTsKKwlvaGNpX2hjZF9pbml0KGhjZF90b19vaGNpKGhjZCkpOworCisJcmV0dmFsID0gdXNiX2FkZF9oY2QoaGNkLCBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApLCBJUlFGX0RJU0FCTEVEKTsKKwlpZiAocmV0dmFsID09IDApCisJCXJldHVybiByZXR2YWw7CisKKwlzcGVhcl9zdG9wX29oY2kob2hjaV9wKTsKKwlpb3VubWFwKGhjZC0+cmVncyk7CitmYWlsX2lvcmVtYXA6CisJcmVsZWFzZV9tZW1fcmVnaW9uKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7CitmYWlsX3JlcXVlc3RfcmVzb3VyY2U6CisJdXNiX3B1dF9oY2QoaGNkKTsKK2ZhaWxfY3JlYXRlX2hjZDoKKwljbGtfcHV0KHVzYmhfY2xrKTsKK2ZhaWxfZ2V0X3VzYmhfY2xrOgorZmFpbF9pcnFfZ2V0OgorCWRldl9lcnIoJnBkZXYtPmRldiwgImluaXQgZmFpbCwgJWRcbiIsIHJldHZhbCk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IHNwZWFyX29oY2lfaGNkX2Rydl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNwZWFyX29oY2kgKm9oY2lfcCA9IHRvX3NwZWFyX29oY2koaGNkKTsKKworCXVzYl9yZW1vdmVfaGNkKGhjZCk7CisJaWYgKG9oY2lfcC0+Y2xrKQorCQlzcGVhcl9zdG9wX29oY2kob2hjaV9wKTsKKworCWlvdW5tYXAoaGNkLT5yZWdzKTsKKwlyZWxlYXNlX21lbV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuKTsKKwl1c2JfcHV0X2hjZChoY2QpOworCisJaWYgKG9oY2lfcC0+Y2xrKQorCQljbGtfcHV0KG9oY2lfcC0+Y2xrKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwlyZXR1cm4gMDsKK30KKworI2lmIGRlZmluZWQoQ09ORklHX1BNKQorc3RhdGljIGludCBzcGVhcl9vaGNpX2hjZF9kcnZfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsCisJCXBtX21lc3NhZ2VfdCBtZXNzYWdlKQoreworCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBvaGNpX2hjZAkqb2hjaSA9IGhjZF90b19vaGNpKGhjZCk7CisJc3RydWN0IHNwZWFyX29oY2kgKm9oY2lfcCA9IHRvX3NwZWFyX29oY2koaGNkKTsKKworCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCBvaGNpLT5uZXh0X3N0YXRlY2hhbmdlKSkKKwkJbXNsZWVwKDUpOworCW9oY2ktPm5leHRfc3RhdGVjaGFuZ2UgPSBqaWZmaWVzOworCisJc3BlYXJfc3RvcF9vaGNpKG9oY2lfcCk7CisJb2hjaV90b19oY2Qob2hjaSktPnN0YXRlID0gSENfU1RBVEVfU1VTUEVOREVEOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNwZWFyX29oY2lfaGNkX2Rydl9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBvaGNpX2hjZAkqb2hjaSA9IGhjZF90b19vaGNpKGhjZCk7CisJc3RydWN0IHNwZWFyX29oY2kgKm9oY2lfcCA9IHRvX3NwZWFyX29oY2koaGNkKTsKKworCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCBvaGNpLT5uZXh0X3N0YXRlY2hhbmdlKSkKKwkJbXNsZWVwKDUpOworCW9oY2ktPm5leHRfc3RhdGVjaGFuZ2UgPSBqaWZmaWVzOworCisJc3BlYXJfc3RhcnRfb2hjaShvaGNpX3ApOworCW9oY2lfZmluaXNoX2NvbnRyb2xsZXJfcmVzdW1lKGhjZCk7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworLyogRHJpdmVyIGRlZmluaXRpb24gdG8gcmVnaXN0ZXIgd2l0aCB0aGUgcGxhdGZvcm0gYnVzICovCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzcGVhcl9vaGNpX2hjZF9kcml2ZXIgPSB7CisJLnByb2JlID0Jc3BlYXJfb2hjaV9oY2RfZHJ2X3Byb2JlLAorCS5yZW1vdmUgPQlzcGVhcl9vaGNpX2hjZF9kcnZfcmVtb3ZlLAorI2lmZGVmIENPTkZJR19QTQorCS5zdXNwZW5kID0Jc3BlYXJfb2hjaV9oY2RfZHJ2X3N1c3BlbmQsCisJLnJlc3VtZSA9CXNwZWFyX29oY2lfaGNkX2Rydl9yZXN1bWUsCisjZW5kaWYKKwkuZHJpdmVyID0geworCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwkJLm5hbWUgPSAic3BlYXItb2hjaSIsCisJfSwKK307CisKK01PRFVMRV9BTElBUygicGxhdGZvcm06c3BlYXItb2hjaSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC91aGNpLWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC91aGNpLWhjZC5jCmluZGV4IGY1MmQwNGQuLmNlZTg2NzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaGNkLmMKQEAgLTU2OSw3ICs1NjksNyBAQAogICovCiBzdGF0aWMgdm9pZCB1aGNpX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewotCXN0cnVjdCB1c2JfaGNkICpoY2QgPSAoc3RydWN0IHVzYl9oY2QgKikgcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAKIAl1aGNpX2hjX2RpZWQoaGNkX3RvX3VoY2koaGNkKSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktcS5jIGIvZHJpdmVycy91c2IvaG9zdC91aGNpLXEuYwppbmRleCAyMDkwYjQ1Li5hZjc3YWJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktcS5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1xLmMKQEAgLTI5LDcgKzI5LDcgQEAKIHsKIAlpZiAodWhjaS0+aXNfc3RvcHBlZCkKIAkJbW9kX3RpbWVyKCZ1aGNpX3RvX2hjZCh1aGNpKS0+cmhfdGltZXIsIGppZmZpZXMpOwotCXVoY2ktPnRlcm1fdGQtPnN0YXR1cyB8PSBjcHVfdG9fbGUzMihURF9DVFJMX0lPQyk7IAorCXVoY2ktPnRlcm1fdGQtPnN0YXR1cyB8PSBjcHVfdG9fbGUzMihURF9DVFJMX0lPQyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB1aGNpX2NsZWFyX25leHRfaW50ZXJydXB0KHN0cnVjdCB1aGNpX2hjZCAqdWhjaSkKQEAgLTE5NSw3ICsxOTUsOSBAQAogCQl9IGVsc2UgewogCQkJc3RydWN0IHVoY2lfdGQgKm50ZDsKIAotCQkJbnRkID0gbGlzdF9lbnRyeSh0ZC0+ZmxfbGlzdC5uZXh0LCBzdHJ1Y3QgdWhjaV90ZCwgZmxfbGlzdCk7CisJCQludGQgPSBsaXN0X2VudHJ5KHRkLT5mbF9saXN0Lm5leHQsCisJCQkJCSBzdHJ1Y3QgdWhjaV90ZCwKKwkJCQkJIGZsX2xpc3QpOwogCQkJdWhjaS0+ZnJhbWVbdGQtPmZyYW1lXSA9IExJTktfVE9fVEQobnRkKTsKIAkJCXVoY2ktPmZyYW1lX2NwdVt0ZC0+ZnJhbWVdID0gbnRkOwogCQl9CkBAIC03MjgsNyArNzMwLDcgQEAKIAogCXVyYnAtPnVyYiA9IHVyYjsKIAl1cmItPmhjcHJpdiA9IHVyYnA7Ci0JCisKIAlJTklUX0xJU1RfSEVBRCgmdXJicC0+bm9kZSk7CiAJSU5JVF9MSVNUX0hFQUQoJnVyYnAtPnRkX2xpc3QpOwogCkBAIC04NDYsNyArODQ4LDcgQEAKIAogCQkvKiBBbHRlcm5hdGUgRGF0YTAvMSAoc3RhcnQgd2l0aCBEYXRhMSkgKi8KIAkJZGVzdGluYXRpb24gXj0gVERfVE9LRU5fVE9HR0xFOwotCQorCiAJCXVoY2lfYWRkX3RkX3RvX3VyYnAodGQsIHVyYnApOwogCQl1aGNpX2ZpbGxfdGQodGQsIHN0YXR1cywgZGVzdGluYXRpb24gfCB1aGNpX2V4cGxlbihwa3RzemUpLAogCQkJCWRhdGEpOwpAQCAtODU3LDcgKzg1OSw3IEBACiAJfQogCiAJLyoKLQkgKiBCdWlsZCB0aGUgZmluYWwgVEQgZm9yIGNvbnRyb2wgc3RhdHVzIAorCSAqIEJ1aWxkIHRoZSBmaW5hbCBURCBmb3IgY29udHJvbCBzdGF0dXMKIAkgKi8KIAl0ZCA9IHVoY2lfYWxsb2NfdGQodWhjaSk7CiAJaWYgKCF0ZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvd2hjaS9oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvd2hjaS9oY2QuYwppbmRleCA3MmI2ODkyLi45NTQ2ZjZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3doY2kvaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC93aGNpL2hjZC5jCkBAIC0zNTYsNyArMzU2LDcgQEAKIG1vZHVsZV9leGl0KHdoY2lfaGNfZHJpdmVyX2V4aXQpOwogCiAvKiBQQ0kgZGV2aWNlIElEJ3MgdGhhdCB3ZSBoYW5kbGUgKHNvIGl0IGdldHMgbG9hZGVkKSAqLwotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHdoY2lfaGNkX2lkX3RhYmxlW10gPSB7CitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgX191c2VkIHdoY2lfaGNkX2lkX3RhYmxlW10gPSB7CiAJeyBQQ0lfREVWSUNFX0NMQVNTKFBDSV9DTEFTU19XSVJFTEVTU19XSENJLCB+MCkgfSwKIAl7IC8qIGVtcHR5IGxhc3QgZW50cnkgKi8gfQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvdXNibGVkLmMgYi9kcml2ZXJzL3VzYi9taXNjL3VzYmxlZC5jCmluZGV4IGM5NmY1MWQuLjE3MzJkOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvdXNibGVkLmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy91c2JsZWQuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBVU0IgTEVEIGRyaXZlciAtIDEuMQorICogVVNCIExFRCBkcml2ZXIKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQgR3JlZyBLcm9haC1IYXJ0bWFuIChncmVnQGtyb2FoLmNvbSkKICAqCkBAIC0yMCwxMiArMjAsMTcgQEAKICNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiR3JlZyBLcm9haC1IYXJ0bWFuLCBncmVnQGtyb2FoLmNvbSIKICNkZWZpbmUgRFJJVkVSX0RFU0MgIlVTQiBMRUQgRHJpdmVyIgogCi0jZGVmaW5lIFZFTkRPUl9JRAkweDBmYzUKLSNkZWZpbmUgUFJPRFVDVF9JRAkweDEyMjMKK2VudW0gbGVkX3R5cGUgeworCURFTENPTV9WSVNVQUxfU0lHTkFMX0lORElDQVRPUiwKKwlEUkVBTV9DSEVFS1lfV0VCTUFJTF9OT1RJRklFUiwKK307CiAKIC8qIHRhYmxlIG9mIGRldmljZXMgdGhhdCB3b3JrIHdpdGggdGhpcyBkcml2ZXIgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZVtdID0gewotCXsgVVNCX0RFVklDRShWRU5ET1JfSUQsIFBST0RVQ1RfSUQpIH0sCisJeyBVU0JfREVWSUNFKDB4MGZjNSwgMHgxMjIzKSwKKwkJCS5kcml2ZXJfaW5mbyA9IERFTENPTV9WSVNVQUxfU0lHTkFMX0lORElDQVRPUiB9LAorCXsgVVNCX0RFVklDRSgweDFkMzQsIDB4MDAwNCksCisJCQkuZHJpdmVyX2luZm8gPSBEUkVBTV9DSEVFS1lfV0VCTUFJTF9OT1RJRklFUiB9LAogCXsgfSwKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIGlkX3RhYmxlKTsKQEAgLTM1LDE1ICs0MCwxMiBAQAogCXVuc2lnbmVkIGNoYXIJCWJsdWU7CiAJdW5zaWduZWQgY2hhcgkJcmVkOwogCXVuc2lnbmVkIGNoYXIJCWdyZWVuOworCWVudW0gbGVkX3R5cGUJCXR5cGU7CiB9OwogCi0jZGVmaW5lIEJMVUUJMHgwNAotI2RlZmluZSBSRUQJMHgwMgotI2RlZmluZSBHUkVFTgkweDAxCiBzdGF0aWMgdm9pZCBjaGFuZ2VfY29sb3Ioc3RydWN0IHVzYl9sZWQgKmxlZCkKIHsKIAlpbnQgcmV0dmFsOwotCXVuc2lnbmVkIGNoYXIgY29sb3IgPSAweDA3OwogCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKIAogCWJ1ZmZlciA9IGttYWxsb2MoOCwgR0ZQX0tFUk5FTCk7CkBAIC01MiwyNSArNTQsNTkgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmIChsZWQtPmJsdWUpCi0JCWNvbG9yICY9IH4oQkxVRSk7Ci0JaWYgKGxlZC0+cmVkKQotCQljb2xvciAmPSB+KFJFRCk7Ci0JaWYgKGxlZC0+Z3JlZW4pCi0JCWNvbG9yICY9IH4oR1JFRU4pOwotCWRldl9kYmcoJmxlZC0+dWRldi0+ZGV2LAotCQkiYmx1ZSA9ICVkLCByZWQgPSAlZCwgZ3JlZW4gPSAlZCwgY29sb3IgPSAlLjJ4XG4iLAotCQlsZWQtPmJsdWUsIGxlZC0+cmVkLCBsZWQtPmdyZWVuLCBjb2xvcik7CisJc3dpdGNoIChsZWQtPnR5cGUpIHsKKwljYXNlIERFTENPTV9WSVNVQUxfU0lHTkFMX0lORElDQVRPUjogeworCQl1bnNpZ25lZCBjaGFyIGNvbG9yID0gMHgwNzsKIAotCXJldHZhbCA9IHVzYl9jb250cm9sX21zZyhsZWQtPnVkZXYsCi0JCQkJdXNiX3NuZGN0cmxwaXBlKGxlZC0+dWRldiwgMCksCi0JCQkJMHgxMiwKLQkJCQkweGM4LAotCQkJCSgweDAyICogMHgxMDApICsgMHgwYSwKLQkJCQkoMHgwMCAqIDB4MTAwKSArIGNvbG9yLAotCQkJCWJ1ZmZlciwJCi0JCQkJOCwKLQkJCQkyMDAwKTsKKwkJaWYgKGxlZC0+Ymx1ZSkKKwkJCWNvbG9yICY9IH4weDA0OworCQlpZiAobGVkLT5yZWQpCisJCQljb2xvciAmPSB+MHgwMjsKKwkJaWYgKGxlZC0+Z3JlZW4pCisJCQljb2xvciAmPSB+MHgwMTsKKwkJZGV2X2RiZygmbGVkLT51ZGV2LT5kZXYsCisJCQkiYmx1ZSA9ICVkLCByZWQgPSAlZCwgZ3JlZW4gPSAlZCwgY29sb3IgPSAlLjJ4XG4iLAorCQkJbGVkLT5ibHVlLCBsZWQtPnJlZCwgbGVkLT5ncmVlbiwgY29sb3IpOworCisJCXJldHZhbCA9IHVzYl9jb250cm9sX21zZyhsZWQtPnVkZXYsCisJCQkJCXVzYl9zbmRjdHJscGlwZShsZWQtPnVkZXYsIDApLAorCQkJCQkweDEyLAorCQkJCQkweGM4LAorCQkJCQkoMHgwMiAqIDB4MTAwKSArIDB4MGEsCisJCQkJCSgweDAwICogMHgxMDApICsgY29sb3IsCisJCQkJCWJ1ZmZlciwKKwkJCQkJOCwKKwkJCQkJMjAwMCk7CisJCWJyZWFrOworCX0KKworCWNhc2UgRFJFQU1fQ0hFRUtZX1dFQk1BSUxfTk9USUZJRVI6CisJCWRldl9kYmcoJmxlZC0+dWRldi0+ZGV2LAorCQkJInJlZCA9ICVkLCBncmVlbiA9ICVkLCBibHVlID0gJWRcbiIsCisJCQlsZWQtPnJlZCwgbGVkLT5ncmVlbiwgbGVkLT5ibHVlKTsKKworCQlidWZmZXJbMF0gPSBsZWQtPnJlZDsKKwkJYnVmZmVyWzFdID0gbGVkLT5ncmVlbjsKKwkJYnVmZmVyWzJdID0gbGVkLT5ibHVlOworCQlidWZmZXJbM10gPSBidWZmZXJbNF0gPSBidWZmZXJbNV0gPSAwOworCQlidWZmZXJbNl0gPSAweDFhOworCQlidWZmZXJbN10gPSAweDA1OworCisJCXJldHZhbCA9IHVzYl9jb250cm9sX21zZyhsZWQtPnVkZXYsCisJCQkJCXVzYl9zbmRjdHJscGlwZShsZWQtPnVkZXYsIDApLAorCQkJCQkweDA5LAorCQkJCQkweDIxLAorCQkJCQkweDIwMCwKKwkJCQkJMCwKKwkJCQkJYnVmZmVyLAorCQkJCQk4LAorCQkJCQkyMDAwKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlkZXZfZXJyKCZsZWQtPnVkZXYtPmRldiwgInVua25vd24gZGV2aWNlIHR5cGUgJWRcbiIsIGxlZC0+dHlwZSk7CisJfQorCiAJaWYgKHJldHZhbCkKIAkJZGV2X2RiZygmbGVkLT51ZGV2LT5kZXYsICJyZXR2YWwgPSAlZFxuIiwgcmV0dmFsKTsKIAlrZnJlZShidWZmZXIpOwpAQCAtMTA3LDExICsxNDMsMTIgQEAKIAogCWRldiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB1c2JfbGVkKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGRldiA9PSBOVUxMKSB7Ci0JCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAiT3V0IG9mIG1lbW9yeVxuIik7CisJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAib3V0IG9mIG1lbW9yeVxuIik7CiAJCWdvdG8gZXJyb3JfbWVtOwogCX0KIAogCWRldi0+dWRldiA9IHVzYl9nZXRfZGV2KHVkZXYpOworCWRldi0+dHlwZSA9IGlkLT5kcml2ZXJfaW5mbzsKIAogCXVzYl9zZXRfaW50ZmRhdGEgKGludGVyZmFjZSwgZGV2KTsKIApAQCAtMTI1LDYgKzE2MiwzMSBAQAogCWlmIChyZXR2YWwpCiAJCWdvdG8gZXJyb3I7CiAKKwlpZiAoZGV2LT50eXBlID09IERSRUFNX0NIRUVLWV9XRUJNQUlMX05PVElGSUVSKSB7CisJCXVuc2lnbmVkIGNoYXIgKmVuYWJsZTsKKworCQllbmFibGUgPSBrbWVtZHVwKCJceDFmXHgwMlwwXHg1ZlwwXDBceDFhXHgwMyIsIDgsIEdGUF9LRVJORUwpOworCQlpZiAoIWVuYWJsZSkgeworCQkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJvdXQgb2YgbWVtb3J5XG4iKTsKKwkJCXJldHZhbCA9IC1FTk9NRU07CisJCQlnb3RvIGVycm9yOworCQl9CisKKwkJcmV0dmFsID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsCisJCQkJCXVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwKKwkJCQkJMHgwOSwKKwkJCQkJMHgyMSwKKwkJCQkJMHgyMDAsCisJCQkJCTAsCisJCQkJCWVuYWJsZSwKKwkJCQkJOCwKKwkJCQkJMjAwMCk7CisKKwkJa2ZyZWUoZW5hYmxlKTsKKwkJaWYgKHJldHZhbCAhPSA4KQorCQkJZ290byBlcnJvcjsKKwl9CisKIAlkZXZfaW5mbygmaW50ZXJmYWNlLT5kZXYsICJVU0IgTEVEIGRldmljZSBub3cgYXR0YWNoZWRcbiIpOwogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tb24vbW9uX2Jpbi5jIGIvZHJpdmVycy91c2IvbW9uL21vbl9iaW4uYwppbmRleCBjNDM2ZTFlLi5hMDlkYmQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tb24vbW9uX2Jpbi5jCisrKyBiL2RyaXZlcnMvdXNiL21vbi9tb25fYmluLmMKQEAgLTQzNiw2ICs0MzYsMjggQEAKIAlyZXR1cm4gbGVuZ3RoOwogfQogCisvKgorICogVGhpcyBpcyB0aGUgbG9vay1haGVhZCBwYXNzIGluIGNhc2Ugb2YgJ0MgWmknLCB3aGVuIGFjdHVhbF9sZW5ndGggY2Fubm90CisgKiBiZSB1c2VkIHRvIGRldGVybWluZSB0aGUgbGVuZ3RoIG9mIHRoZSB3aG9sZSBjb250aWd1b3VzIGJ1ZmZlci4KKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBtb25fYmluX2NvbGxhdGVfaXNvZGVzYyhjb25zdCBzdHJ1Y3QgbW9uX3JlYWRlcl9iaW4gKnJwLAorICAgIHN0cnVjdCB1cmIgKnVyYiwgdW5zaWduZWQgaW50IG5kZXNjKQoreworCXN0cnVjdCB1c2JfaXNvX3BhY2tldF9kZXNjcmlwdG9yICpmcDsKKwl1bnNpZ25lZCBpbnQgbGVuZ3RoOworCisJbGVuZ3RoID0gMDsKKwlmcCA9IHVyYi0+aXNvX2ZyYW1lX2Rlc2M7CisJd2hpbGUgKG5kZXNjLS0gIT0gMCkgeworCQlpZiAoZnAtPmFjdHVhbF9sZW5ndGggIT0gMCkgeworCQkJaWYgKGZwLT5vZmZzZXQgKyBmcC0+YWN0dWFsX2xlbmd0aCA+IGxlbmd0aCkKKwkJCQlsZW5ndGggPSBmcC0+b2Zmc2V0ICsgZnAtPmFjdHVhbF9sZW5ndGg7CisJCX0KKwkJZnArKzsKKwl9CisJcmV0dXJuIGxlbmd0aDsKK30KKwogc3RhdGljIHZvaWQgbW9uX2Jpbl9nZXRfaXNvZGVzYyhjb25zdCBzdHJ1Y3QgbW9uX3JlYWRlcl9iaW4gKnJwLAogICAgIHVuc2lnbmVkIGludCBvZmZzZXQsIHN0cnVjdCB1cmIgKnVyYiwgY2hhciBldl90eXBlLCB1bnNpZ25lZCBpbnQgbmRlc2MpCiB7CkBAIC00NzgsNiArNTAwLDEwIEBACiAJLyoKIAkgKiBGaW5kIHRoZSBtYXhpbXVtIGFsbG93YWJsZSBsZW5ndGgsIHRoZW4gYWxsb2NhdGUgc3BhY2UuCiAJICovCisJdXJiX2xlbmd0aCA9IChldl90eXBlID09ICdTJykgPworCSAgICB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggOiB1cmItPmFjdHVhbF9sZW5ndGg7CisJbGVuZ3RoID0gdXJiX2xlbmd0aDsKKwogCWlmICh1c2JfZW5kcG9pbnRfeGZlcl9pc29jKGVwZCkpIHsKIAkJaWYgKHVyYi0+bnVtYmVyX29mX3BhY2tldHMgPCAwKSB7CiAJCQluZGVzYyA9IDA7CkBAIC00ODYsMTQgKzUxMiwxNiBAQAogCQl9IGVsc2UgewogCQkJbmRlc2MgPSB1cmItPm51bWJlcl9vZl9wYWNrZXRzOwogCQl9CisJCWlmIChldl90eXBlID09ICdDJyAmJiB1c2JfdXJiX2Rpcl9pbih1cmIpKQorCQkJbGVuZ3RoID0gbW9uX2Jpbl9jb2xsYXRlX2lzb2Rlc2MocnAsIHVyYiwgbmRlc2MpOwogCX0gZWxzZSB7CiAJCW5kZXNjID0gMDsKIAl9CiAJbGVuZGVzYyA9IG5kZXNjKnNpemVvZihzdHJ1Y3QgbW9uX2Jpbl9pc29kZXNjKTsKIAotCXVyYl9sZW5ndGggPSAoZXZfdHlwZSA9PSAnUycpID8KLQkgICAgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoIDogdXJiLT5hY3R1YWxfbGVuZ3RoOwotCWxlbmd0aCA9IHVyYl9sZW5ndGg7CisJLyogbm90IGFuIGlzc3VlIHVubGVzcyB0aGVyZSdzIGEgc3VidGxlIGJ1ZyBpbiBhIEhDRCBzb21ld2hlcmUgKi8KKwlpZiAobGVuZ3RoID49IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCkKKwkJbGVuZ3RoID0gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoOwogCiAJaWYgKGxlbmd0aCA+PSBycC0+Yl9zaXplLzUpCiAJCWxlbmd0aCA9IHJwLT5iX3NpemUvNTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL211c2IvS2NvbmZpZwppbmRleCAzNDFhMzdhLi40Y2JiN2U0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvbXVzYi9LY29uZmlnCkBAIC0xMiw2ICsxMiw3IEBACiAJZGVwZW5kcyBvbiAoQVJNIHx8IChCRjU0eCAmJiAhQkY1NDQpIHx8IChCRjUyeCAmJiAhQkY1MjIgJiYgIUJGNTIzKSkKIAlzZWxlY3QgTk9QX1VTQl9YQ0VJViBpZiAoQVJDSF9EQVZJTkNJIHx8IE1BQ0hfT01BUDNFVk0gfHwgQkxBQ0tGSU4pCiAJc2VsZWN0IFRXTDQwMzBfVVNCIGlmIE1BQ0hfT01BUF8zNDMwU0RQCisJc2VsZWN0IFRXTDYwMzBfVVNCIGlmIE1BQ0hfT01BUF80NDMwU0RQIHx8IE1BQ0hfT01BUDRfUEFOREEKIAlzZWxlY3QgVVNCX09UR19VVElMUwogCXRyaXN0YXRlICdJbnZlbnRyYSBIaWdoc3BlZWQgRHVhbCBSb2xlIENvbnRyb2xsZXIgKFRJLCBBREksIC4uLiknCiAJaGVscApAQCAtMzAsNTcgKzMxLDQxIEBACiAJICBJZiB5b3UgZG8gbm90IGtub3cgd2hhdCB0aGlzIGlzLCBwbGVhc2Ugc2F5IE4uCiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU7IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkICJtdXNiX2hkcmMiLgorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkICJtdXNiLWhkcmMiLgogCi1jb25maWcgVVNCX01VU0JfU09DCi0JYm9vbGVhbgorY2hvaWNlCisJcHJvbXB0ICJQbGF0Zm9ybSBHbHVlIExheWVyIgogCWRlcGVuZHMgb24gVVNCX01VU0JfSERSQwotCWRlZmF1bHQgeSBpZiBBUkNIX0RBVklOQ0kKLQlkZWZhdWx0IHkgaWYgQVJDSF9PTUFQMjQzMAotCWRlZmF1bHQgeSBpZiBBUkNIX09NQVAzCi0JZGVmYXVsdCB5IGlmIEFSQ0hfT01BUDQKLQlkZWZhdWx0IHkgaWYgKEJGNTR4ICYmICFCRjU0NCkKLQlkZWZhdWx0IHkgaWYgKEJGNTJ4ICYmICFCRjUyMiAmJiAhQkY1MjMpCiAKLWNvbW1lbnQgIkRhVmluY2kgMzV4IGFuZCA2NDR4IFVTQiBzdXBwb3J0IgotCWRlcGVuZHMgb24gVVNCX01VU0JfSERSQyAmJiBBUkNIX0RBVklOQ0lfRE14Citjb25maWcgVVNCX01VU0JfREFWSU5DSQorCWJvb2wgIkRhVmluY2kiCisJZGVwZW5kcyBvbiBBUkNIX0RBVklOQ0lfRE14CiAKLWNvbW1lbnQgIkRBOHh4L09NQVAtTDF4IFVTQiBzdXBwb3J0IgotCWRlcGVuZHMgb24gVVNCX01VU0JfSERSQyAmJiBBUkNIX0RBVklOQ0lfREE4WFgKK2NvbmZpZyBVU0JfTVVTQl9EQThYWAorCWJvb2wgIkRBOHh4L09NQVAtTDF4IgorCWRlcGVuZHMgb24gQVJDSF9EQVZJTkNJX0RBOFhYCiAKLWNvbW1lbnQgIk9NQVAgMjQzeCBoaWdoIHNwZWVkIFVTQiBzdXBwb3J0IgotCWRlcGVuZHMgb24gVVNCX01VU0JfSERSQyAmJiBBUkNIX09NQVAyNDMwCitjb25maWcgVVNCX01VU0JfVFVTQjYwMTAKKwlib29sICJUVVNCNjAxMCIKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUAogCi1jb21tZW50ICJPTUFQIDM0M3ggaGlnaCBzcGVlZCBVU0Igc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFVTQl9NVVNCX0hEUkMgJiYgQVJDSF9PTUFQMwotCi1jb21tZW50ICJPTUFQIDQ0eHggaGlnaCBzcGVlZCBVU0Igc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFVTQl9NVVNCX0hEUkMgJiYgQVJDSF9PTUFQNAotCi1jb21tZW50ICJCbGFja2ZpbiBoaWdoIHNwZWVkIFVTQiBTdXBwb3J0IgotCWRlcGVuZHMgb24gVVNCX01VU0JfSERSQyAmJiAoKEJGNTR4ICYmICFCRjU0NCkgfHwgKEJGNTJ4ICYmICFCRjUyMiAmJiAhQkY1MjMpKQorY29uZmlnIFVTQl9NVVNCX09NQVAyUExVUworCWJvb2wgIk9NQVAyNDMwIGFuZCBvbndhcmRzIgorCWRlcGVuZHMgb24gQVJDSF9PTUFQMlBMVVMKIAogY29uZmlnIFVTQl9NVVNCX0FNMzVYCi0JYm9vbAotCWRlcGVuZHMgb24gVVNCX01VU0JfSERSQyAmJiAhQVJDSF9PTUFQMjQzMCAmJiAhQVJDSF9PTUFQNAotCXNlbGVjdCBOT1BfVVNCX1hDRUlWCi0JZGVmYXVsdCBNQUNIX09NQVAzNTE3RVZNCi0JaGVscAotCSAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdXIgcGxhdGZvcm0gaXMgYmFzZWQgb24gQU0zNXguIEFzCi0JICBBTTM1eCBoYXMgYW4gdXBkYXRlZCBNVVNCIHdpdGggQ1BQSTQuMSBETUEgc28gdGhpcyBjb25maWcKLQkgIGlzIGludHJvZHVjZWQgdG8gZGlmZmVyZW50aWF0ZSBtdXNiIGlwIGJldHdlZW4gT01BUDN4IGFuZAotCSAgQU0zNXggcGxhdGZvcm1zLgorCWJvb2wgIkFNMzV4IgorCWRlcGVuZHMgb24gQVJDSF9PTUFQCiAKLWNvbmZpZyBVU0JfVFVTQjYwMTAKLQlib29sZWFuICJUVVNCIDYwMTAgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFVTQl9NVVNCX0hEUkMgJiYgIVVTQl9NVVNCX1NPQwotCXNlbGVjdCBOT1BfVVNCX1hDRUlWCi0JZGVmYXVsdCB5Ci0JaGVscAotCSAgVGhlIFRVU0IgNjAxMCBjaGlwLCBmcm9tIFRleGFzIEluc3RydW1lbnRzLCBjb25uZWN0cyBhIGRpc2NyZXRlCi0JICBIRFJDIGNvcmUgdXNpbmcgYSAxNi1iaXQgcGFyYWxsZWwgYnVzIChOT1IgZmxhc2ggc3R5bGUpIG9yIFZMWU5RCi0JICAoYSBoaWdoIHNwZWVkIHNlcmlhbCBsaW5rKS4gIEl0IGNhbiB1c2Ugc3lzdGVtLXNwZWNpZmljIGV4dGVybmFsCi0JICBETUEgY29udHJvbGxlcnMuCitjb25maWcgVVNCX01VU0JfQkxBQ0tGSU4KKwlib29sICJCbGFja2ZpbiIKKwlkZXBlbmRzIG9uIChCRjU0eCAmJiAhQkY1NDQpIHx8IChCRjUyeCAmJiAhIEJGNTIyICYmICFCRjUyMykKKworY29uZmlnIFVTQl9NVVNCX1VYNTAwCisJYm9vbCAiVTg1MDAgYW5kIFU1NTAwIgorCWRlcGVuZHMgb24gKEFSQ0hfVTg1MDAgJiYgQUI4NTAwX1VTQikgfHwgKEFSQ0hfVTU1MDApCisKK2VuZGNob2ljZQogCiBjaG9pY2UKIAlwcm9tcHQgIkRyaXZlciBNb2RlIgpAQCAtMTU4LDcgKzE0Myw3IEBACiBjb25maWcgTVVTQl9QSU9fT05MWQogCWJvb2wgJ0Rpc2FibGUgRE1BIChhbHdheXMgdXNlIFBJTyknCiAJZGVwZW5kcyBvbiBVU0JfTVVTQl9IRFJDCi0JZGVmYXVsdCBVU0JfVFVTQjYwMTAgfHwgQVJDSF9EQVZJTkNJX0RBOFhYIHx8IFVTQl9NVVNCX0FNMzVYCisJZGVmYXVsdCBVU0JfTVVTQl9UVVNCNjAxMCB8fCBVU0JfTVVTQl9EQThYWCB8fCBVU0JfTVVTQl9BTTM1WAogCWhlbHAKIAkgIEFsbCBkYXRhIGlzIGNvcGllZCBiZXR3ZWVuIG1lbW9yeSBhbmQgRklGTyBieSB0aGUgQ1BVLgogCSAgRE1BIGNvbnRyb2xsZXJzIGFyZSBpZ25vcmVkLgpAQCAtMTcxLDIxICsxNTYsMjEgQEAKIGNvbmZpZyBVU0JfSU5WRU5UUkFfRE1BCiAJYm9vbAogCWRlcGVuZHMgb24gVVNCX01VU0JfSERSQyAmJiAhTVVTQl9QSU9fT05MWQotCWRlZmF1bHQgQVJDSF9PTUFQMjQzMCB8fCBBUkNIX09NQVAzIHx8IEJMQUNLRklOIHx8IEFSQ0hfT01BUDQKKwlkZWZhdWx0IFVTQl9NVVNCX09NQVAyUExVUyB8fCBVU0JfTVVTQl9CTEFDS0ZJTgogCWhlbHAKIAkgIEVuYWJsZSBETUEgdHJhbnNmZXJzIHVzaW5nIE1lbnRvcidzIGVuZ2luZS4KIAogY29uZmlnIFVTQl9USV9DUFBJX0RNQQogCWJvb2wKIAlkZXBlbmRzIG9uIFVTQl9NVVNCX0hEUkMgJiYgIU1VU0JfUElPX09OTFkKLQlkZWZhdWx0IEFSQ0hfREFWSU5DSQorCWRlZmF1bHQgVVNCX01VU0JfREFWSU5DSQogCWhlbHAKIAkgIEVuYWJsZSBETUEgdHJhbnNmZXJzIHdoZW4gVEkgQ1BQSSBETUEgaXMgYXZhaWxhYmxlLgogCiBjb25maWcgVVNCX1RVU0JfT01BUF9ETUEKIAlib29sCiAJZGVwZW5kcyBvbiBVU0JfTVVTQl9IRFJDICYmICFNVVNCX1BJT19PTkxZCi0JZGVwZW5kcyBvbiBVU0JfVFVTQjYwMTAKKwlkZXBlbmRzIG9uIFVTQl9NVVNCX1RVU0I2MDEwCiAJZGVwZW5kcyBvbiBBUkNIX09NQVAKIAlkZWZhdWx0IHkKIAloZWxwCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL01ha2VmaWxlIGIvZHJpdmVycy91c2IvbXVzYi9NYWtlZmlsZQppbmRleCBjZTE2NGU4Li43NGRmNTI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdXNiL211c2IvTWFrZWZpbGUKQEAgLTgsMjIgKzgsMTkgQEAKIAogbXVzYl9oZHJjLXkgOj0gbXVzYl9jb3JlLm8KIAotbXVzYl9oZHJjLSQoQ09ORklHX0FSQ0hfREFWSU5DSV9ETXgpCQkrPSBkYXZpbmNpLm8KLW11c2JfaGRyYy0kKENPTkZJR19BUkNIX0RBVklOQ0lfREE4WFgpCQkrPSBkYTh4eC5vCi1tdXNiX2hkcmMtJChDT05GSUdfVVNCX1RVU0I2MDEwKQkJKz0gdHVzYjYwMTAubwotbXVzYl9oZHJjLSQoQ09ORklHX0FSQ0hfT01BUDI0MzApCQkrPSBvbWFwMjQzMC5vCi1pZmVxICgkKENPTkZJR19VU0JfTVVTQl9BTTM1WCkseSkKLQltdXNiX2hkcmMtJChDT05GSUdfQVJDSF9PTUFQMzQzMCkJKz0gYW0zNXgubwotZWxzZQotCW11c2JfaGRyYy0kKENPTkZJR19BUkNIX09NQVAzNDMwKQkrPSBvbWFwMjQzMC5vCi1lbmRpZgotbXVzYl9oZHJjLSQoQ09ORklHX0FSQ0hfT01BUDQpCQkJKz0gb21hcDI0MzAubwotbXVzYl9oZHJjLSQoQ09ORklHX0JGNTR4KQkJCSs9IGJsYWNrZmluLm8KLW11c2JfaGRyYy0kKENPTkZJR19CRjUyeCkJCQkrPSBibGFja2Zpbi5vCiBtdXNiX2hkcmMtJChDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkMpCSs9IG11c2JfZ2FkZ2V0X2VwMC5vIG11c2JfZ2FkZ2V0Lm8KIG11c2JfaGRyYy0kKENPTkZJR19VU0JfTVVTQl9IRFJDX0hDRCkJCSs9IG11c2JfdmlydGh1Yi5vIG11c2JfaG9zdC5vCiBtdXNiX2hkcmMtJChDT05GSUdfREVCVUdfRlMpCQkJKz0gbXVzYl9kZWJ1Z2ZzLm8KIAorIyBIYXJkd2FyZSBHbHVlIExheWVyCitvYmotJChDT05GSUdfVVNCX01VU0JfT01BUDJQTFVTKQkJKz0gb21hcDI0MzAubworb2JqLSQoQ09ORklHX1VTQl9NVVNCX0FNMzVYKQkJCSs9IGFtMzV4Lm8KK29iai0kKENPTkZJR19VU0JfTVVTQl9UVVNCNjAxMCkJCQkrPSB0dXNiNjAxMC5vCitvYmotJChDT05GSUdfVVNCX01VU0JfREFWSU5DSSkJCQkrPSBkYXZpbmNpLm8KK29iai0kKENPTkZJR19VU0JfTVVTQl9EQThYWCkJCQkrPSBkYTh4eC5vCitvYmotJChDT05GSUdfVVNCX01VU0JfQkxBQ0tGSU4pCQkJKz0gYmxhY2tmaW4ubworb2JqLSQoQ09ORklHX1VTQl9NVVNCX1VYNTAwKQkJCSs9IHV4NTAwLm8KKwogIyB0aGUga2NvbmZpZyBtdXN0IGd1YXJhbnRlZSB0aGF0IG9ubHkgb25lIG9mIHRoZQogIyBwb3NzaWJsZSBJL08gc2NoZW1lcyB3aWxsIGJlIGVuYWJsZWQgYXQgYSB0aW1lIC4uLgogIyBQSU8gb25seSwgb3IgRE1BIChzZXZlcmFsIHBvdGVudGlhbCBzY2hlbWVzKS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvYW0zNXguYyBiL2RyaXZlcnMvdXNiL211c2IvYW0zNXguYwppbmRleCBiMGFhYmYzLi5kNWEzZGEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL2FtMzV4LmMKKysrIGIvZHJpdmVycy91c2IvbXVzYi9hbTM1eC5jCkBAIC0yOSw4ICsyOSw5IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KIAotI2luY2x1ZGUgPHBsYXQvY29udHJvbC5oPgogI2luY2x1ZGUgPHBsYXQvdXNiLmg+CiAKICNpbmNsdWRlICJtdXNiX2NvcmUuaCIKQEAgLTgwLDUxICs4MSwxOCBAQAogCiAjZGVmaW5lIFVTQl9NRU5UT1JfQ09SRV9PRkZTRVQJMHg0MDAKIAotc3RhdGljIGlubGluZSB2b2lkIHBoeV9vbih2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDEwMCk7Ci0JdTMyIGRldmNvbmYyOwotCi0JLyoKLQkgKiBTdGFydCB0aGUgb24tY2hpcCBQSFkgYW5kIGl0cyBQTEwuCi0JICovCi0JZGV2Y29uZjIgPSBvbWFwX2N0cmxfcmVhZGwoQU0zNVhYX0NPTlRST0xfREVWQ09ORjIpOwotCi0JZGV2Y29uZjIgJj0gfihDT05GMl9SRVNFVCB8IENPTkYyX1BIWVBXUkROIHwgQ09ORjJfT1RHUFdSRE4pOwotCWRldmNvbmYyIHw9IENPTkYyX1BIWV9QTExPTjsKLQotCW9tYXBfY3RybF93cml0ZWwoZGV2Y29uZjIsIEFNMzVYWF9DT05UUk9MX0RFVkNPTkYyKTsKLQotCURCRygxLCAiV2FpdGluZyBmb3IgUEhZIGNsb2NrIGdvb2QuLi5cbiIpOwotCXdoaWxlICghKG9tYXBfY3RybF9yZWFkbChBTTM1WFhfQ09OVFJPTF9ERVZDT05GMikKLQkJCSYgQ09ORjJfUEhZQ0xLR0QpKSB7Ci0JCWNwdV9yZWxheCgpOwotCi0JCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7Ci0JCQlEQkcoMSwgIm11c2IgUEhZIGNsb2NrIGdvb2QgdGltZWQgb3V0XG4iKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcGh5X29mZih2b2lkKQotewotCXUzMiBkZXZjb25mMjsKLQotCS8qCi0JICogUG93ZXIgZG93biB0aGUgb24tY2hpcCBQSFkuCi0JICovCi0JZGV2Y29uZjIgPSBvbWFwX2N0cmxfcmVhZGwoQU0zNVhYX0NPTlRST0xfREVWQ09ORjIpOwotCi0JZGV2Y29uZjIgJj0gfkNPTkYyX1BIWV9QTExPTjsKLQlkZXZjb25mMiB8PSAgQ09ORjJfUEhZUFdSRE4gfCBDT05GMl9PVEdQV1JETjsKLQlvbWFwX2N0cmxfd3JpdGVsKGRldmNvbmYyLCBBTTM1WFhfQ09OVFJPTF9ERVZDT05GMik7Ci19CitzdHJ1Y3QgYW0zNXhfZ2x1ZSB7CisJc3RydWN0IGRldmljZQkJKmRldjsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCSptdXNiOworCXN0cnVjdCBjbGsJCSpwaHlfY2xrOworCXN0cnVjdCBjbGsJCSpjbGs7Cit9OworI2RlZmluZSBnbHVlX3RvX211c2IoZykJCXBsYXRmb3JtX2dldF9kcnZkYXRhKGctPm11c2IpCiAKIC8qCi0gKiBtdXNiX3BsYXRmb3JtX2VuYWJsZSAtIGVuYWJsZSBpbnRlcnJ1cHRzCisgKiBhbTM1eF9tdXNiX2VuYWJsZSAtIGVuYWJsZSBpbnRlcnJ1cHRzCiAgKi8KLXZvaWQgbXVzYl9wbGF0Zm9ybV9lbmFibGUoc3RydWN0IG11c2IgKm11c2IpCitzdGF0aWMgdm9pZCBhbTM1eF9tdXNiX2VuYWJsZShzdHJ1Y3QgbXVzYiAqbXVzYikKIHsKIAl2b2lkIF9faW9tZW0gKnJlZ19iYXNlID0gbXVzYi0+Y3RybF9iYXNlOwogCXUzMiBlcG1hc2s7CkBAIC0xNDMsOSArMTExLDkgQEAKIH0KIAogLyoKLSAqIG11c2JfcGxhdGZvcm1fZGlzYWJsZSAtIGRpc2FibGUgSERSQyBhbmQgZmx1c2ggaW50ZXJydXB0cworICogYW0zNXhfbXVzYl9kaXNhYmxlIC0gZGlzYWJsZSBIRFJDIGFuZCBmbHVzaCBpbnRlcnJ1cHRzCiAgKi8KLXZvaWQgbXVzYl9wbGF0Zm9ybV9kaXNhYmxlKHN0cnVjdCBtdXNiICptdXNiKQorc3RhdGljIHZvaWQgYW0zNXhfbXVzYl9kaXNhYmxlKHN0cnVjdCBtdXNiICptdXNiKQogewogCXZvaWQgX19pb21lbSAqcmVnX2Jhc2UgPSBtdXNiLT5jdHJsX2Jhc2U7CiAKQEAgLTE2Miw3ICsxMzAsNyBAQAogI2RlZmluZSBwb3J0c3RhdGUoc3RtdCkKICNlbmRpZgogCi1zdGF0aWMgdm9pZCBhbTM1eF9zZXRfdmJ1cyhzdHJ1Y3QgbXVzYiAqbXVzYiwgaW50IGlzX29uKQorc3RhdGljIHZvaWQgYW0zNXhfbXVzYl9zZXRfdmJ1cyhzdHJ1Y3QgbXVzYiAqbXVzYiwgaW50IGlzX29uKQogewogCVdBUk5fT04oaXNfb24gJiYgaXNfcGVyaXBoZXJhbF9hY3RpdmUobXVzYikpOwogfQpAQCAtMjIxLDcgKzE4OSw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXVzYi0+bG9jaywgZmxhZ3MpOwogfQogCi12b2lkIG11c2JfcGxhdGZvcm1fdHJ5X2lkbGUoc3RydWN0IG11c2IgKm11c2IsIHVuc2lnbmVkIGxvbmcgdGltZW91dCkKK3N0YXRpYyB2b2lkIGFtMzV4X211c2JfdHJ5X2lkbGUoc3RydWN0IG11c2IgKm11c2IsIHVuc2lnbmVkIGxvbmcgdGltZW91dCkKIHsKIAlzdGF0aWMgdW5zaWduZWQgbG9uZyBsYXN0X3RpbWVyOwogCkBAIC0yNTEsMTMgKzIxOSwxNiBAQAogCW1vZF90aW1lcigmb3RnX3dvcmthcm91bmQsIHRpbWVvdXQpOwogfQogCi1zdGF0aWMgaXJxcmV0dXJuX3QgYW0zNXhfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmhjaSkKK3N0YXRpYyBpcnFyZXR1cm5fdCBhbTM1eF9tdXNiX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpoY2kpCiB7CiAJc3RydWN0IG11c2IgICptdXNiID0gaGNpOwogCXZvaWQgX19pb21lbSAqcmVnX2Jhc2UgPSBtdXNiLT5jdHJsX2Jhc2U7CisJc3RydWN0IGRldmljZSAqZGV2ID0gbXVzYi0+Y29udHJvbGxlcjsKKwlzdHJ1Y3QgbXVzYl9oZHJjX3BsYXRmb3JtX2RhdGEgKnBsYXQgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IG9tYXBfbXVzYl9ib2FyZF9kYXRhICpkYXRhID0gcGxhdC0+Ym9hcmRfZGF0YTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWlycXJldHVybl90IHJldCA9IElSUV9OT05FOwotCXUzMiBlcGludHIsIHVzYmludHIsIGx2bF9pbnRyOworCXUzMiBlcGludHIsIHVzYmludHI7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbXVzYi0+bG9jaywgZmxhZ3MpOwogCkBAIC0zNDYsOSArMzE3LDggQEAKIAkvKiBFT0kgbmVlZHMgdG8gYmUgd3JpdHRlbiBmb3IgdGhlIElSUSB0byBiZSByZS1hc3NlcnRlZC4gKi8KIAlpZiAocmV0ID09IElSUV9IQU5ETEVEIHx8IGVwaW50ciB8fCB1c2JpbnRyKSB7CiAJCS8qIGNsZWFyIGxldmVsIGludGVycnVwdCAqLwotCQlsdmxfaW50ciA9IG9tYXBfY3RybF9yZWFkbChBTTM1WFhfQ09OVFJPTF9MVkxfSU5UUl9DTEVBUik7Ci0JCWx2bF9pbnRyIHw9IEFNMzVYWF9VU0JPVEdTU19JTlRfQ0xSOwotCQlvbWFwX2N0cmxfd3JpdGVsKGx2bF9pbnRyLCBBTTM1WFhfQ09OVFJPTF9MVkxfSU5UUl9DTEVBUik7CisJCWlmIChkYXRhLT5jbGVhcl9pcnEpCisJCQlkYXRhLT5jbGVhcl9pcnEoKTsKIAkJLyogd3JpdGUgRU9JICovCiAJCW11c2Jfd3JpdGVsKHJlZ19iYXNlLCBVU0JfRU5EX09GX0lOVFJfUkVHLCAwKTsKIAl9CkBAIC0zNjIsMTM3ICszMzIsODUgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgbXVzYl9wbGF0Zm9ybV9zZXRfbW9kZShzdHJ1Y3QgbXVzYiAqbXVzYiwgdTggbXVzYl9tb2RlKQorc3RhdGljIGludCBhbTM1eF9tdXNiX3NldF9tb2RlKHN0cnVjdCBtdXNiICptdXNiLCB1OCBtdXNiX21vZGUpCiB7Ci0JdTMyIGRldmNvbmYyID0gb21hcF9jdHJsX3JlYWRsKEFNMzVYWF9DT05UUk9MX0RFVkNPTkYyKTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBtdXNiLT5jb250cm9sbGVyOworCXN0cnVjdCBtdXNiX2hkcmNfcGxhdGZvcm1fZGF0YSAqcGxhdCA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3Qgb21hcF9tdXNiX2JvYXJkX2RhdGEgKmRhdGEgPSBwbGF0LT5ib2FyZF9kYXRhOworCWludCAgICAgcmV0dmFsID0gMDsKIAotCWRldmNvbmYyICY9IH5DT05GMl9PVEdNT0RFOwotCXN3aXRjaCAobXVzYl9tb2RlKSB7Ci0jaWZkZWYJQ09ORklHX1VTQl9NVVNCX0hEUkNfSENECi0JY2FzZSBNVVNCX0hPU1Q6CQkvKiBGb3JjZSBWQlVTIHZhbGlkLCBJRCA9IDAgKi8KLQkJZGV2Y29uZjIgfD0gQ09ORjJfRk9SQ0VfSE9TVDsKLQkJYnJlYWs7Ci0jZW5kaWYKLSNpZmRlZglDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkMKLQljYXNlIE1VU0JfUEVSSVBIRVJBTDoJLyogRm9yY2UgVkJVUyB2YWxpZCwgSUQgPSAxICovCi0JCWRldmNvbmYyIHw9IENPTkYyX0ZPUkNFX0RFVklDRTsKLQkJYnJlYWs7Ci0jZW5kaWYKLSNpZmRlZglDT05GSUdfVVNCX01VU0JfT1RHCi0JY2FzZSBNVVNCX09URzoJCS8qIERvbid0IG92ZXJyaWRlIHRoZSBWQlVTL0lEIGNvbXBhcmF0b3JzICovCi0JCWRldmNvbmYyIHw9IENPTkYyX05PX09WRVJSSURFOwotCQlicmVhazsKLSNlbmRpZgotCWRlZmF1bHQ6Ci0JCURCRygyLCAiVHJ5aW5nIHRvIHNldCB1bnN1cHBvcnRlZCBtb2RlICV1XG4iLCBtdXNiX21vZGUpOwotCX0KKwlpZiAoZGF0YS0+c2V0X21vZGUpCisJCWRhdGEtPnNldF9tb2RlKG11c2JfbW9kZSk7CisJZWxzZQorCQlyZXR2YWwgPSAtRUlPOwogCi0Jb21hcF9jdHJsX3dyaXRlbChkZXZjb25mMiwgQU0zNVhYX0NPTlRST0xfREVWQ09ORjIpOwotCXJldHVybiAwOworCXJldHVybiByZXR2YWw7CiB9CiAKLWludCBfX2luaXQgbXVzYl9wbGF0Zm9ybV9pbml0KHN0cnVjdCBtdXNiICptdXNiLCB2b2lkICpib2FyZF9kYXRhKQorc3RhdGljIGludCBhbTM1eF9tdXNiX2luaXQoc3RydWN0IG11c2IgKm11c2IpCiB7CisJc3RydWN0IGRldmljZSAqZGV2ID0gbXVzYi0+Y29udHJvbGxlcjsKKwlzdHJ1Y3QgbXVzYl9oZHJjX3BsYXRmb3JtX2RhdGEgKnBsYXQgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IG9tYXBfbXVzYl9ib2FyZF9kYXRhICpkYXRhID0gcGxhdC0+Ym9hcmRfZGF0YTsKIAl2b2lkIF9faW9tZW0gKnJlZ19iYXNlID0gbXVzYi0+Y3RybF9iYXNlOwotCXUzMiByZXYsIGx2bF9pbnRyLCBzd19yZXNldDsKLQlpbnQgc3RhdHVzOworCXUzMiByZXY7CiAKIAltdXNiLT5tcmVncyArPSBVU0JfTUVOVE9SX0NPUkVfT0ZGU0VUOwogCi0JY2xrX2VuYWJsZShtdXNiLT5jbG9jayk7Ci0JREJHKDIsICJtdXNiLT5jbG9jaz0lbHVkXG4iLCBjbGtfZ2V0X3JhdGUobXVzYi0+Y2xvY2spKTsKLQotCW11c2ItPnBoeV9jbG9jayA9IGNsa19nZXQobXVzYi0+Y29udHJvbGxlciwgImZjayIpOwotCWlmIChJU19FUlIobXVzYi0+cGh5X2Nsb2NrKSkgewotCQlzdGF0dXMgPSBQVFJfRVJSKG11c2ItPnBoeV9jbG9jayk7Ci0JCWdvdG8gZXhpdDA7Ci0JfQotCWNsa19lbmFibGUobXVzYi0+cGh5X2Nsb2NrKTsKLQlEQkcoMiwgIm11c2ItPnBoeV9jbG9jaz0lbHVkXG4iLCBjbGtfZ2V0X3JhdGUobXVzYi0+cGh5X2Nsb2NrKSk7Ci0KIAkvKiBSZXR1cm5zIHplcm8gaWYgZS5nLiBub3QgY2xvY2tlZCAqLwogCXJldiA9IG11c2JfcmVhZGwocmVnX2Jhc2UsIFVTQl9SRVZJU0lPTl9SRUcpOwotCWlmICghcmV2KSB7Ci0JCXN0YXR1cyA9IC1FTk9ERVY7Ci0JCWdvdG8gZXhpdDE7Ci0JfQorCWlmICghcmV2KQorCQlyZXR1cm4gLUVOT0RFVjsKIAogCXVzYl9ub3BfeGNlaXZfcmVnaXN0ZXIoKTsKIAltdXNiLT54Y2VpdiA9IG90Z19nZXRfdHJhbnNjZWl2ZXIoKTsKLQlpZiAoIW11c2ItPnhjZWl2KSB7Ci0JCXN0YXR1cyA9IC1FTk9ERVY7Ci0JCWdvdG8gZXhpdDE7Ci0JfQorCWlmICghbXVzYi0+eGNlaXYpCisJCXJldHVybiAtRU5PREVWOwogCiAJaWYgKGlzX2hvc3RfZW5hYmxlZChtdXNiKSkKIAkJc2V0dXBfdGltZXIoJm90Z193b3JrYXJvdW5kLCBvdGdfdGltZXIsICh1bnNpZ25lZCBsb25nKSBtdXNiKTsKIAotCW11c2ItPmJvYXJkX3NldF92YnVzID0gYW0zNXhfc2V0X3ZidXM7Ci0KLQkvKiBHbG9iYWwgcmVzZXQgKi8KLQlzd19yZXNldCA9IG9tYXBfY3RybF9yZWFkbChBTTM1WFhfQ09OVFJPTF9JUF9TV19SRVNFVCk7Ci0KLQlzd19yZXNldCB8PSBBTTM1WFhfVVNCT1RHU1NfU1dfUlNUOwotCW9tYXBfY3RybF93cml0ZWwoc3dfcmVzZXQsIEFNMzVYWF9DT05UUk9MX0lQX1NXX1JFU0VUKTsKLQotCXN3X3Jlc2V0ICY9IH5BTTM1WFhfVVNCT1RHU1NfU1dfUlNUOwotCW9tYXBfY3RybF93cml0ZWwoc3dfcmVzZXQsIEFNMzVYWF9DT05UUk9MX0lQX1NXX1JFU0VUKTsKKwkvKiBSZXNldCB0aGUgbXVzYiAqLworCWlmIChkYXRhLT5yZXNldCkKKwkJZGF0YS0+cmVzZXQoKTsKIAogCS8qIFJlc2V0IHRoZSBjb250cm9sbGVyICovCiAJbXVzYl93cml0ZWwocmVnX2Jhc2UsIFVTQl9DVFJMX1JFRywgQU0zNVhfU09GVF9SRVNFVF9NQVNLKTsKIAogCS8qIFN0YXJ0IHRoZSBvbi1jaGlwIFBIWSBhbmQgaXRzIFBMTC4gKi8KLQlwaHlfb24oKTsKKwlpZiAoZGF0YS0+c2V0X3BoeV9wb3dlcikKKwkJZGF0YS0+c2V0X3BoeV9wb3dlcigxKTsKIAogCW1zbGVlcCg1KTsKIAotCW11c2ItPmlzciA9IGFtMzV4X2ludGVycnVwdDsKKwltdXNiLT5pc3IgPSBhbTM1eF9tdXNiX2ludGVycnVwdDsKIAogCS8qIGNsZWFyIGxldmVsIGludGVycnVwdCAqLwotCWx2bF9pbnRyID0gb21hcF9jdHJsX3JlYWRsKEFNMzVYWF9DT05UUk9MX0xWTF9JTlRSX0NMRUFSKTsKLQlsdmxfaW50ciB8PSBBTTM1WFhfVVNCT1RHU1NfSU5UX0NMUjsKLQlvbWFwX2N0cmxfd3JpdGVsKGx2bF9pbnRyLCBBTTM1WFhfQ09OVFJPTF9MVkxfSU5UUl9DTEVBUik7CisJaWYgKGRhdGEtPmNsZWFyX2lycSkKKwkJZGF0YS0+Y2xlYXJfaXJxKCk7CisKIAlyZXR1cm4gMDsKLWV4aXQxOgotCWNsa19kaXNhYmxlKG11c2ItPnBoeV9jbG9jayk7Ci0JY2xrX3B1dChtdXNiLT5waHlfY2xvY2spOwotZXhpdDA6Ci0JY2xrX2Rpc2FibGUobXVzYi0+Y2xvY2spOwotCXJldHVybiBzdGF0dXM7CiB9CiAKLWludCBtdXNiX3BsYXRmb3JtX2V4aXQoc3RydWN0IG11c2IgKm11c2IpCitzdGF0aWMgaW50IGFtMzV4X211c2JfZXhpdChzdHJ1Y3QgbXVzYiAqbXVzYikKIHsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBtdXNiLT5jb250cm9sbGVyOworCXN0cnVjdCBtdXNiX2hkcmNfcGxhdGZvcm1fZGF0YSAqcGxhdCA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3Qgb21hcF9tdXNiX2JvYXJkX2RhdGEgKmRhdGEgPSBwbGF0LT5ib2FyZF9kYXRhOworCiAJaWYgKGlzX2hvc3RfZW5hYmxlZChtdXNiKSkKIAkJZGVsX3RpbWVyX3N5bmMoJm90Z193b3JrYXJvdW5kKTsKIAotCXBoeV9vZmYoKTsKKwkvKiBTaHV0ZG93biB0aGUgb24tY2hpcCBQSFkgYW5kIGl0cyBQTEwuICovCisJaWYgKGRhdGEtPnNldF9waHlfcG93ZXIpCisJCWRhdGEtPnNldF9waHlfcG93ZXIoMCk7CiAKIAlvdGdfcHV0X3RyYW5zY2VpdmVyKG11c2ItPnhjZWl2KTsKIAl1c2Jfbm9wX3hjZWl2X3VucmVnaXN0ZXIoKTsKIAotCWNsa19kaXNhYmxlKG11c2ItPmNsb2NrKTsKLQotCWNsa19kaXNhYmxlKG11c2ItPnBoeV9jbG9jayk7Ci0JY2xrX3B1dChtdXNiLT5waHlfY2xvY2spOwotCiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBDT05GSUdfUE0KLXZvaWQgbXVzYl9wbGF0Zm9ybV9zYXZlX2NvbnRleHQoc3RydWN0IG11c2IgKm11c2IsCi0Jc3RydWN0IG11c2JfY29udGV4dF9yZWdpc3RlcnMgKm11c2JfY29udGV4dCkKLXsKLQlwaHlfb2ZmKCk7Ci19Ci0KLXZvaWQgbXVzYl9wbGF0Zm9ybV9yZXN0b3JlX2NvbnRleHQoc3RydWN0IG11c2IgKm11c2IsCi0Jc3RydWN0IG11c2JfY29udGV4dF9yZWdpc3RlcnMgKm11c2JfY29udGV4dCkKLXsKLQlwaHlfb24oKTsKLX0KLSNlbmRpZgotCiAvKiBBTTM1eCBzdXBwb3J0cyBvbmx5IDMyYml0IHJlYWQgb3BlcmF0aW9uICovCiB2b2lkIG11c2JfcmVhZF9maWZvKHN0cnVjdCBtdXNiX2h3X2VwICpod19lcCwgdTE2IGxlbiwgdTggKmRzdCkKIHsKQEAgLTUyMiwzICs0NDAsMjE1IEBACiAJCW1lbWNweShkc3QsICZ2YWwsIGxlbik7CiAJfQogfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG11c2JfcGxhdGZvcm1fb3BzIGFtMzV4X29wcyA9IHsKKwkuaW5pdAkJPSBhbTM1eF9tdXNiX2luaXQsCisJLmV4aXQJCT0gYW0zNXhfbXVzYl9leGl0LAorCisJLmVuYWJsZQkJPSBhbTM1eF9tdXNiX2VuYWJsZSwKKwkuZGlzYWJsZQk9IGFtMzV4X211c2JfZGlzYWJsZSwKKworCS5zZXRfbW9kZQk9IGFtMzV4X211c2Jfc2V0X21vZGUsCisJLnRyeV9pZGxlCT0gYW0zNXhfbXVzYl90cnlfaWRsZSwKKworCS5zZXRfdmJ1cwk9IGFtMzV4X211c2Jfc2V0X3ZidXMsCit9OworCitzdGF0aWMgdTY0IGFtMzV4X2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOworCitzdGF0aWMgaW50IF9faW5pdCBhbTM1eF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBtdXNiX2hkcmNfcGxhdGZvcm1fZGF0YQkqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCQkqbXVzYjsKKwlzdHJ1Y3QgYW0zNXhfZ2x1ZQkJKmdsdWU7CisKKwlzdHJ1Y3QgY2xrCQkJKnBoeV9jbGs7CisJc3RydWN0IGNsawkJCSpjbGs7CisKKwlpbnQJCQkJcmV0ID0gLUVOT01FTTsKKworCWdsdWUgPSBremFsbG9jKHNpemVvZigqZ2x1ZSksIEdGUF9LRVJORUwpOworCWlmICghZ2x1ZSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gYWxsb2NhdGUgZ2x1ZSBjb250ZXh0XG4iKTsKKwkJZ290byBlcnIwOworCX0KKworCW11c2IgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoIm11c2ItaGRyYyIsIC0xKTsKKwlpZiAoIW11c2IpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIG11c2IgZGV2aWNlXG4iKTsKKwkJZ290byBlcnIxOworCX0KKworCXBoeV9jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJmY2siKTsKKwlpZiAoSVNfRVJSKHBoeV9jbGspKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBnZXQgUEhZIGNsb2NrXG4iKTsKKwkJcmV0ID0gUFRSX0VSUihwaHlfY2xrKTsKKwkJZ290byBlcnIyOworCX0KKworCWNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgImljayIpOworCWlmIChJU19FUlIoY2xrKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IGNsb2NrXG4iKTsKKwkJcmV0ID0gUFRSX0VSUihjbGspOworCQlnb3RvIGVycjM7CisJfQorCisJcmV0ID0gY2xrX2VuYWJsZShwaHlfY2xrKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBlbmFibGUgUEhZIGNsb2NrXG4iKTsKKwkJZ290byBlcnI0OworCX0KKworCXJldCA9IGNsa19lbmFibGUoY2xrKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBlbmFibGUgY2xvY2tcbiIpOworCQlnb3RvIGVycjU7CisJfQorCisJbXVzYi0+ZGV2LnBhcmVudAkJPSAmcGRldi0+ZGV2OworCW11c2ItPmRldi5kbWFfbWFzawkJPSAmYW0zNXhfZG1hbWFzazsKKwltdXNiLT5kZXYuY29oZXJlbnRfZG1hX21hc2sJPSBhbTM1eF9kbWFtYXNrOworCisJZ2x1ZS0+ZGV2CQkJPSAmcGRldi0+ZGV2OworCWdsdWUtPm11c2IJCQk9IG11c2I7CisJZ2x1ZS0+cGh5X2NsawkJCT0gcGh5X2NsazsKKwlnbHVlLT5jbGsJCQk9IGNsazsKKworCXBkYXRhLT5wbGF0Zm9ybV9vcHMJCT0gJmFtMzV4X29wczsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGdsdWUpOworCisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9yZXNvdXJjZXMobXVzYiwgcGRldi0+cmVzb3VyY2UsCisJCQlwZGV2LT5udW1fcmVzb3VyY2VzKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBhZGQgcmVzb3VyY2VzXG4iKTsKKwkJZ290byBlcnI2OworCX0KKworCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGRfZGF0YShtdXNiLCBwZGF0YSwgc2l6ZW9mKCpwZGF0YSkpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGFkZCBwbGF0Zm9ybV9kYXRhXG4iKTsKKwkJZ290byBlcnI2OworCX0KKworCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQobXVzYik7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgbXVzYiBkZXZpY2VcbiIpOworCQlnb3RvIGVycjY7CisJfQorCisJcmV0dXJuIDA7CisKK2VycjY6CisJY2xrX2Rpc2FibGUoY2xrKTsKKworZXJyNToKKwljbGtfZGlzYWJsZShwaHlfY2xrKTsKKworZXJyNDoKKwljbGtfcHV0KGNsayk7CisKK2VycjM6CisJY2xrX3B1dChwaHlfY2xrKTsKKworZXJyMjoKKwlwbGF0Zm9ybV9kZXZpY2VfcHV0KG11c2IpOworCitlcnIxOgorCWtmcmVlKGdsdWUpOworCitlcnIwOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19leGl0IGFtMzV4X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBhbTM1eF9nbHVlCSpnbHVlID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlwbGF0Zm9ybV9kZXZpY2VfZGVsKGdsdWUtPm11c2IpOworCXBsYXRmb3JtX2RldmljZV9wdXQoZ2x1ZS0+bXVzYik7CisJY2xrX2Rpc2FibGUoZ2x1ZS0+Y2xrKTsKKwljbGtfZGlzYWJsZShnbHVlLT5waHlfY2xrKTsKKwljbGtfcHV0KGdsdWUtPmNsayk7CisJY2xrX3B1dChnbHVlLT5waHlfY2xrKTsKKwlrZnJlZShnbHVlKTsKKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IGFtMzV4X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBhbTM1eF9nbHVlCSpnbHVlID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IG11c2JfaGRyY19wbGF0Zm9ybV9kYXRhICpwbGF0ID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBvbWFwX211c2JfYm9hcmRfZGF0YSAqZGF0YSA9IHBsYXQtPmJvYXJkX2RhdGE7CisKKwkvKiBTaHV0ZG93biB0aGUgb24tY2hpcCBQSFkgYW5kIGl0cyBQTEwuICovCisJaWYgKGRhdGEtPnNldF9waHlfcG93ZXIpCisJCWRhdGEtPnNldF9waHlfcG93ZXIoMCk7CisKKwljbGtfZGlzYWJsZShnbHVlLT5waHlfY2xrKTsKKwljbGtfZGlzYWJsZShnbHVlLT5jbGspOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYW0zNXhfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgYW0zNXhfZ2x1ZQkqZ2x1ZSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBtdXNiX2hkcmNfcGxhdGZvcm1fZGF0YSAqcGxhdCA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3Qgb21hcF9tdXNiX2JvYXJkX2RhdGEgKmRhdGEgPSBwbGF0LT5ib2FyZF9kYXRhOworCWludAkJCXJldDsKKworCS8qIFN0YXJ0IHRoZSBvbi1jaGlwIFBIWSBhbmQgaXRzIFBMTC4gKi8KKwlpZiAoZGF0YS0+c2V0X3BoeV9wb3dlcikKKwkJZGF0YS0+c2V0X3BoeV9wb3dlcigxKTsKKworCXJldCA9IGNsa19lbmFibGUoZ2x1ZS0+cGh5X2Nsayk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBlbmFibGUgUEhZIGNsb2NrXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBjbGtfZW5hYmxlKGdsdWUtPmNsayk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBlbmFibGUgY2xvY2tcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgYW0zNXhfcG1fb3BzID0geworCS5zdXNwZW5kCT0gYW0zNXhfc3VzcGVuZCwKKwkucmVzdW1lCQk9IGFtMzV4X3Jlc3VtZSwKK307CisKKyNkZWZpbmUgREVWX1BNX09QUwkmYW0zNXhfcG1fb3BzCisjZWxzZQorI2RlZmluZSBERVZfUE1fT1BTCU5VTEwKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhbTM1eF9kcml2ZXIgPSB7CisJLnJlbW92ZQkJPSBfX2V4aXRfcChhbTM1eF9yZW1vdmUpLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJtdXNiLWFtMzV4IiwKKwkJLnBtCT0gREVWX1BNX09QUywKKwl9LAorfTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJBTTM1eCBNVVNCIEdsdWUgTGF5ZXIiKTsKK01PRFVMRV9BVVRIT1IoIkFqYXkgS3VtYXIgR3VwdGEgPGFqYXkuZ3VwdGFAdGkuY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworCitzdGF0aWMgaW50IF9faW5pdCBhbTM1eF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9wcm9iZSgmYW0zNXhfZHJpdmVyLCBhbTM1eF9wcm9iZSk7Cit9CitzdWJzeXNfaW5pdGNhbGwoYW0zNXhfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhbTM1eF9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmFtMzV4X2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChhbTM1eF9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvYmxhY2tmaW4uYyBiL2RyaXZlcnMvdXNiL211c2IvYmxhY2tmaW4uYwppbmRleCBmY2I1MjA2Li5lZWJhMjI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL2JsYWNrZmluLmMKKysrIGIvZHJpdmVycy91c2IvbXVzYi9ibGFja2Zpbi5jCkBAIC0xNSwxMiArMTUsMjAgQEAKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KIAogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAKICNpbmNsdWRlICJtdXNiX2NvcmUuaCIKICNpbmNsdWRlICJibGFja2Zpbi5oIgogCitzdHJ1Y3QgYmZpbl9nbHVlIHsKKwlzdHJ1Y3QgZGV2aWNlCQkqZGV2OworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJKm11c2I7Cit9OworI2RlZmluZSBnbHVlX3RvX211c2IoZykJCXBsYXRmb3JtX2dldF9kcnZkYXRhKGctPm11c2IpCisKIC8qCiAgKiBMb2FkIGFuIGVuZHBvaW50J3MgRklGTwogICovCkBAIC0yNzgsNyArMjg2LDcgQEAKIAlEQkcoNCwgInN0YXRlIGlzICVzXG4iLCBvdGdfc3RhdGVfc3RyaW5nKG11c2IpKTsKIH0KIAotdm9pZCBtdXNiX3BsYXRmb3JtX2VuYWJsZShzdHJ1Y3QgbXVzYiAqbXVzYikKK3N0YXRpYyB2b2lkIGJmaW5fbXVzYl9lbmFibGUoc3RydWN0IG11c2IgKm11c2IpCiB7CiAJaWYgKCFpc19vdGdfZW5hYmxlZChtdXNiKSAmJiBpc19ob3N0X2VuYWJsZWQobXVzYikpIHsKIAkJbW9kX3RpbWVyKCZtdXNiX2Nvbm5fdGltZXIsIGppZmZpZXMgKyBUSU1FUl9ERUxBWSk7CkBAIC0yODYsMTEgKzI5NCwxMSBAQAogCX0KIH0KIAotdm9pZCBtdXNiX3BsYXRmb3JtX2Rpc2FibGUoc3RydWN0IG11c2IgKm11c2IpCitzdGF0aWMgdm9pZCBiZmluX211c2JfZGlzYWJsZShzdHJ1Y3QgbXVzYiAqbXVzYikKIHsKIH0KIAotc3RhdGljIHZvaWQgYmZpbl9zZXRfdmJ1cyhzdHJ1Y3QgbXVzYiAqbXVzYiwgaW50IGlzX29uKQorc3RhdGljIHZvaWQgYmZpbl9tdXNiX3NldF92YnVzKHN0cnVjdCBtdXNiICptdXNiLCBpbnQgaXNfb24pCiB7CiAJaW50IHZhbHVlID0gbXVzYi0+Y29uZmlnLT5ncGlvX3Zyc2VsX2FjdGl2ZTsKIAlpZiAoIWlzX29uKQpAQCAtMzAzLDI4ICszMTEsMjggQEAKIAkJbXVzYl9yZWFkYihtdXNiLT5tcmVncywgTVVTQl9ERVZDVEwpKTsKIH0KIAotc3RhdGljIGludCBiZmluX3NldF9wb3dlcihzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyICp4LCB1bnNpZ25lZCBtQSkKK3N0YXRpYyBpbnQgYmZpbl9tdXNiX3NldF9wb3dlcihzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyICp4LCB1bnNpZ25lZCBtQSkKIHsKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBtdXNiX3BsYXRmb3JtX3RyeV9pZGxlKHN0cnVjdCBtdXNiICptdXNiLCB1bnNpZ25lZCBsb25nIHRpbWVvdXQpCitzdGF0aWMgdm9pZCBiZmluX211c2JfdHJ5X2lkbGUoc3RydWN0IG11c2IgKm11c2IsIHVuc2lnbmVkIGxvbmcgdGltZW91dCkKIHsKIAlpZiAoIWlzX290Z19lbmFibGVkKG11c2IpICYmIGlzX2hvc3RfZW5hYmxlZChtdXNiKSkKIAkJbW9kX3RpbWVyKCZtdXNiX2Nvbm5fdGltZXIsIGppZmZpZXMgKyBUSU1FUl9ERUxBWSk7CiB9CiAKLWludCBtdXNiX3BsYXRmb3JtX2dldF92YnVzX3N0YXR1cyhzdHJ1Y3QgbXVzYiAqbXVzYikKK3N0YXRpYyBpbnQgYmZpbl9tdXNiX2dldF92YnVzX3N0YXR1cyhzdHJ1Y3QgbXVzYiAqbXVzYikKIHsKIAlyZXR1cm4gMDsKIH0KIAotaW50IG11c2JfcGxhdGZvcm1fc2V0X21vZGUoc3RydWN0IG11c2IgKm11c2IsIHU4IG11c2JfbW9kZSkKK3N0YXRpYyBpbnQgYmZpbl9tdXNiX3NldF9tb2RlKHN0cnVjdCBtdXNiICptdXNiLCB1OCBtdXNiX21vZGUpCiB7CiAJcmV0dXJuIC1FSU87CiB9CiAKLXN0YXRpYyB2b2lkIG11c2JfcGxhdGZvcm1fcmVnX2luaXQoc3RydWN0IG11c2IgKm11c2IpCitzdGF0aWMgdm9pZCBiZmluX211c2JfcmVnX2luaXQoc3RydWN0IG11c2IgKm11c2IpCiB7CiAJaWYgKEFOT01BTFlfMDUwMDAzNDYpIHsKIAkJYmZpbl93cml0ZV9VU0JfQVBIWV9DQUxJQihBTk9NQUxZXzA1MDAwMzQ2X3ZhbHVlKTsKQEAgLTM2Miw3ICszNzAsNyBAQAogCVNTWU5DKCk7CiB9CiAKLWludCBfX2luaXQgbXVzYl9wbGF0Zm9ybV9pbml0KHN0cnVjdCBtdXNiICptdXNiLCB2b2lkICpib2FyZF9kYXRhKQorc3RhdGljIGludCBiZmluX211c2JfaW5pdChzdHJ1Y3QgbXVzYiAqbXVzYikKIHsKIAogCS8qCkBAIC0zODYsMjUgKzM5NCwxMjQgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JbXVzYl9wbGF0Zm9ybV9yZWdfaW5pdChtdXNiKTsKKwliZmluX211c2JfcmVnX2luaXQobXVzYik7CiAKIAlpZiAoaXNfaG9zdF9lbmFibGVkKG11c2IpKSB7Ci0JCW11c2ItPmJvYXJkX3NldF92YnVzID0gYmZpbl9zZXRfdmJ1czsKIAkJc2V0dXBfdGltZXIoJm11c2JfY29ubl90aW1lciwKIAkJCW11c2JfY29ubl90aW1lcl9oYW5kbGVyLCAodW5zaWduZWQgbG9uZykgbXVzYik7CiAJfQogCWlmIChpc19wZXJpcGhlcmFsX2VuYWJsZWQobXVzYikpCi0JCW11c2ItPnhjZWl2LT5zZXRfcG93ZXIgPSBiZmluX3NldF9wb3dlcjsKKwkJbXVzYi0+eGNlaXYtPnNldF9wb3dlciA9IGJmaW5fbXVzYl9zZXRfcG93ZXI7CiAKIAltdXNiLT5pc3IgPSBibGFja2Zpbl9pbnRlcnJ1cHQ7CiAKIAlyZXR1cm4gMDsKIH0KIAotI2lmZGVmIENPTkZJR19QTQotdm9pZCBtdXNiX3BsYXRmb3JtX3NhdmVfY29udGV4dChzdHJ1Y3QgbXVzYiAqbXVzYiwKLQkJCXN0cnVjdCBtdXNiX2NvbnRleHRfcmVnaXN0ZXJzICptdXNiX2NvbnRleHQpCitzdGF0aWMgaW50IGJmaW5fbXVzYl9leGl0KHN0cnVjdCBtdXNiICptdXNiKQogeworCWdwaW9fZnJlZShtdXNiLT5jb25maWctPmdwaW9fdnJzZWwpOworCisJb3RnX3B1dF90cmFuc2NlaXZlcihtdXNiLT54Y2Vpdik7CisJdXNiX25vcF94Y2Vpdl91bnJlZ2lzdGVyKCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXVzYl9wbGF0Zm9ybV9vcHMgYmZpbl9vcHMgPSB7CisJLmluaXQJCT0gYmZpbl9tdXNiX2luaXQsCisJLmV4aXQJCT0gYmZpbl9tdXNiX2V4aXQsCisKKwkuZW5hYmxlCQk9IGJmaW5fbXVzYl9lbmFibGUsCisJLmRpc2FibGUJPSBiZmluX211c2JfZGlzYWJsZSwKKworCS5zZXRfbW9kZQk9IGJmaW5fbXVzYl9zZXRfbW9kZSwKKwkudHJ5X2lkbGUJPSBiZmluX211c2JfdHJ5X2lkbGUsCisKKwkudmJ1c19zdGF0dXMJPSBiZmluX211c2JfdmJ1c19zdGF0dXMsCisJLnNldF92YnVzCT0gYmZpbl9tdXNiX3NldF92YnVzLAorfTsKKworc3RhdGljIHU2NCBiZmluX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOworCitzdGF0aWMgaW50IF9faW5pdCBiZmluX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG11c2JfaGRyY19wbGF0Zm9ybV9kYXRhCSpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJCSptdXNiOworCXN0cnVjdCBiZmluX2dsdWUJCSpnbHVlOworCisJaW50CQkJCXJldCA9IC1FTk9NRU07CisKKwlnbHVlID0ga3phbGxvYyhzaXplb2YoKmdsdWUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWdsdWUpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIGdsdWUgY29udGV4dFxuIik7CisJCWdvdG8gZXJyMDsKKwl9CisKKwltdXNiID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJtdXNiLWhkcmMiLCAtMSk7CisJaWYgKCFtdXNiKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBtdXNiIGRldmljZVxuIik7CisJCWdvdG8gZXJyMTsKKwl9CisKKwltdXNiLT5kZXYucGFyZW50CQk9ICZwZGV2LT5kZXY7CisJbXVzYi0+ZGV2LmRtYV9tYXNrCQk9ICZiZmluX2RtYW1hc2s7CisJbXVzYi0+ZGV2LmNvaGVyZW50X2RtYV9tYXNrCT0gYmZpbl9kbWFtYXNrOworCisJZ2x1ZS0+ZGV2CQkJPSAmcGRldi0+ZGV2OworCWdsdWUtPm11c2IJCQk9IG11c2I7CisKKwlwZGF0YS0+cGxhdGZvcm1fb3BzCQk9ICZiZmluX29wczsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGdsdWUpOworCisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9yZXNvdXJjZXMobXVzYiwgcGRldi0+cmVzb3VyY2UsCisJCQlwZGV2LT5udW1fcmVzb3VyY2VzKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBhZGQgcmVzb3VyY2VzXG4iKTsKKwkJZ290byBlcnIyOworCX0KKworCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGRfZGF0YShtdXNiLCBwZGF0YSwgc2l6ZW9mKCpwZGF0YSkpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGFkZCBwbGF0Zm9ybV9kYXRhXG4iKTsKKwkJZ290byBlcnIyOworCX0KKworCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQobXVzYik7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgbXVzYiBkZXZpY2VcbiIpOworCQlnb3RvIGVycjI7CisJfQorCisJcmV0dXJuIDA7CisKK2VycjI6CisJcGxhdGZvcm1fZGV2aWNlX3B1dChtdXNiKTsKKworZXJyMToKKwlrZnJlZShnbHVlKTsKKworZXJyMDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZXhpdCBiZmluX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBiZmluX2dsdWUJCSpnbHVlID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlwbGF0Zm9ybV9kZXZpY2VfZGVsKGdsdWUtPm11c2IpOworCXBsYXRmb3JtX2RldmljZV9wdXQoZ2x1ZS0+bXVzYik7CisJa2ZyZWUoZ2x1ZSk7CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBiZmluX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBiZmluX2dsdWUJKmdsdWUgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgbXVzYgkJKm11c2IgPSBnbHVlX3RvX211c2IoZ2x1ZSk7CisKIAlpZiAoaXNfaG9zdF9hY3RpdmUobXVzYikpCiAJCS8qCiAJCSAqIER1cmluZyBoaWJlcm5hdGUgZ3Bpb192cnNlbCB3aWxsIGNoYW5nZSBmcm9tIGhpZ2ggdG8gbG93CkBAIC00MTMsMjAgKzUyMCw1MCBAQAogCQkgKiB3YWtldXAgZXZlbnQuCiAJCSAqLwogCQlncGlvX3NldF92YWx1ZShtdXNiLT5jb25maWctPmdwaW9fdnJzZWwsIDApOwotfQogCi12b2lkIG11c2JfcGxhdGZvcm1fcmVzdG9yZV9jb250ZXh0KHN0cnVjdCBtdXNiICptdXNiLAotCQkJc3RydWN0IG11c2JfY29udGV4dF9yZWdpc3RlcnMgKm11c2JfY29udGV4dCkKLXsKLQltdXNiX3BsYXRmb3JtX3JlZ19pbml0KG11c2IpOwotfQotI2VuZGlmCi0KLWludCBtdXNiX3BsYXRmb3JtX2V4aXQoc3RydWN0IG11c2IgKm11c2IpCi17Ci0JZ3Bpb19mcmVlKG11c2ItPmNvbmZpZy0+Z3Bpb192cnNlbCk7Ci0KLQlvdGdfcHV0X3RyYW5zY2VpdmVyKG11c2ItPnhjZWl2KTsKLQl1c2Jfbm9wX3hjZWl2X3VucmVnaXN0ZXIoKTsKIAlyZXR1cm4gMDsKIH0KKworc3RhdGljIGludCBiZmluX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGJmaW5fZ2x1ZQkqZ2x1ZSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBtdXNiCQkqbXVzYiA9IGdsdWVfdG9fbXVzYihnbHVlKTsKKworCWJmaW5fbXVzYl9yZWdfaW5pdChtdXNiKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgYmZpbl9wbV9vcHMgPSB7CisJLnN1c3BlbmQJPSBiZmluX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBiZmluX3Jlc3VtZSwKK307CisKKyNkZWZpbmUgREVWX1BNX09QUwkmYmZpbl9wbV9vcCwKKyNlbHNlCisjZGVmaW5lIERFVl9QTV9PUFMJTlVMTAorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGJmaW5fZHJpdmVyID0geworCS5yZW1vdmUJCT0gX19leGl0X3AoYmZpbl9yZW1vdmUpLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJtdXNiLWJmaW4iLAorCQkucG0JPSBERVZfUE1fT1BTLAorCX0sCit9OworCitNT0RVTEVfREVTQ1JJUFRJT04oIkJsYWNrZmluIE1VU0IgR2x1ZSBMYXllciIpOworTU9EVUxFX0FVVEhPUigiQnJ5YW4gV3kgPGNvb2xvbmV5QGtlcm5lbC5vcmc+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CisKK3N0YXRpYyBpbnQgX19pbml0IGJmaW5faW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJmJmaW5fZHJpdmVyLCBiZmluX3Byb2JlKTsKK30KK3N1YnN5c19pbml0Y2FsbChiZmluX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgYmZpbl9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmJmaW5fZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KGJmaW5fZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL2NwcGlfZG1hLmMgYi9kcml2ZXJzL3VzYi9tdXNiL2NwcGlfZG1hLmMKaW5kZXggZjVhNjVmZi4uZGU1NWEzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9jcHBpX2RtYS5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvY3BwaV9kbWEuYwpAQCAtMTMwOCw3ICsxMzA4LDcgQEAKIAlzdHJ1Y3QgY3BwaQkJKmNvbnRyb2xsZXI7CiAJc3RydWN0IGRldmljZQkJKmRldiA9IG11c2ItPmNvbnRyb2xsZXI7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZQkqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwotCWludAkJCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMSk7CisJaW50CQkJaXJxID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUocGRldiwgImRtYSIpOwogCiAJY29udHJvbGxlciA9IGt6YWxsb2Moc2l6ZW9mICpjb250cm9sbGVyLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNvbnRyb2xsZXIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL2RhOHh4LmMgYi9kcml2ZXJzL3VzYi9tdXNiL2RhOHh4LmMKaW5kZXggODQ0MjdiZS4uNjlhMGRhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9kYTh4eC5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvZGE4eHguYwpAQCAtMjksNiArMjksOCBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAKICNpbmNsdWRlIDxtYWNoL2RhOHh4Lmg+CiAjaW5jbHVkZSA8bWFjaC91c2IuaD4KQEAgLTc4LDYgKzgwLDEyIEBACiAKICNkZWZpbmUgQ0ZHQ0hJUDIJSU9fQUREUkVTUyhEQThYWF9TWVNDRkcwX0JBU0UgKyBEQThYWF9DRkdDSElQMl9SRUcpCiAKK3N0cnVjdCBkYTh4eF9nbHVlIHsKKwlzdHJ1Y3QgZGV2aWNlCQkqZGV2OworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJKm11c2I7CisJc3RydWN0IGNsawkJKmNsazsKK307CisKIC8qCiAgKiBSRVZJU0lUIChQTSk6IHdlIHNob3VsZCBiZSBhYmxlIHRvIGtlZXAgdGhlIFBIWSBpbiBsb3cgcG93ZXIgbW9kZSBtb3N0CiAgKiBvZiB0aGUgdGltZSAoMjQgTUh6IG9zY2lsbGF0b3IgYW5kIFBMTCBvZmYsIGV0Yy4pIGJ5IHNldHRpbmcgUE9XRVIuRDAKQEAgLTEzMSw5ICsxMzksOSBAQAogICovCiAKIC8qKgotICogbXVzYl9wbGF0Zm9ybV9lbmFibGUgLSBlbmFibGUgaW50ZXJydXB0cworICogZGE4eHhfbXVzYl9lbmFibGUgLSBlbmFibGUgaW50ZXJydXB0cwogICovCi12b2lkIG11c2JfcGxhdGZvcm1fZW5hYmxlKHN0cnVjdCBtdXNiICptdXNiKQorc3RhdGljIHZvaWQgZGE4eHhfbXVzYl9lbmFibGUoc3RydWN0IG11c2IgKm11c2IpCiB7CiAJdm9pZCBfX2lvbWVtICpyZWdfYmFzZSA9IG11c2ItPmN0cmxfYmFzZTsKIAl1MzIgbWFzazsKQEAgLTE1MSw5ICsxNTksOSBAQAogfQogCiAvKioKLSAqIG11c2JfcGxhdGZvcm1fZGlzYWJsZSAtIGRpc2FibGUgSERSQyBhbmQgZmx1c2ggaW50ZXJydXB0cworICogZGE4eHhfbXVzYl9kaXNhYmxlIC0gZGlzYWJsZSBIRFJDIGFuZCBmbHVzaCBpbnRlcnJ1cHRzCiAgKi8KLXZvaWQgbXVzYl9wbGF0Zm9ybV9kaXNhYmxlKHN0cnVjdCBtdXNiICptdXNiKQorc3RhdGljIHZvaWQgZGE4eHhfbXVzYl9kaXNhYmxlKHN0cnVjdCBtdXNiICptdXNiKQogewogCXZvaWQgX19pb21lbSAqcmVnX2Jhc2UgPSBtdXNiLT5jdHJsX2Jhc2U7CiAKQEAgLTE3MCw3ICsxNzgsNyBAQAogI2RlZmluZSBwb3J0c3RhdGUoc3RtdCkKICNlbmRpZgogCi1zdGF0aWMgdm9pZCBkYTh4eF9zZXRfdmJ1cyhzdHJ1Y3QgbXVzYiAqbXVzYiwgaW50IGlzX29uKQorc3RhdGljIHZvaWQgZGE4eHhfbXVzYl9zZXRfdmJ1cyhzdHJ1Y3QgbXVzYiAqbXVzYiwgaW50IGlzX29uKQogewogCVdBUk5fT04oaXNfb24gJiYgaXNfcGVyaXBoZXJhbF9hY3RpdmUobXVzYikpOwogfQpAQCAtMjUyLDcgKzI2MCw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXVzYi0+bG9jaywgZmxhZ3MpOwogfQogCi12b2lkIG11c2JfcGxhdGZvcm1fdHJ5X2lkbGUoc3RydWN0IG11c2IgKm11c2IsIHVuc2lnbmVkIGxvbmcgdGltZW91dCkKK3N0YXRpYyB2b2lkIGRhOHh4X211c2JfdHJ5X2lkbGUoc3RydWN0IG11c2IgKm11c2IsIHVuc2lnbmVkIGxvbmcgdGltZW91dCkKIHsKIAlzdGF0aWMgdW5zaWduZWQgbG9uZyBsYXN0X3RpbWVyOwogCkBAIC0yODIsNyArMjkwLDcgQEAKIAltb2RfdGltZXIoJm90Z193b3JrYXJvdW5kLCB0aW1lb3V0KTsKIH0KIAotc3RhdGljIGlycXJldHVybl90IGRhOHh4X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpoY2kpCitzdGF0aWMgaXJxcmV0dXJuX3QgZGE4eHhfbXVzYl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqaGNpKQogewogCXN0cnVjdCBtdXNiCQkqbXVzYiA9IGhjaTsKIAl2b2lkIF9faW9tZW0JCSpyZWdfYmFzZSA9IG11c2ItPmN0cmxfYmFzZTsKQEAgLTM4MCw3ICszODgsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLWludCBtdXNiX3BsYXRmb3JtX3NldF9tb2RlKHN0cnVjdCBtdXNiICptdXNiLCB1OCBtdXNiX21vZGUpCitzdGF0aWMgaW50IGRhOHh4X211c2Jfc2V0X21vZGUoc3RydWN0IG11c2IgKm11c2IsIHU4IG11c2JfbW9kZSkKIHsKIAl1MzIgY2ZnY2hpcDIgPSBfX3Jhd19yZWFkbChDRkdDSElQMik7CiAKQEAgLTQwOSwxNSArNDE3LDEzIEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBfX2luaXQgbXVzYl9wbGF0Zm9ybV9pbml0KHN0cnVjdCBtdXNiICptdXNiLCB2b2lkICpib2FyZF9kYXRhKQorc3RhdGljIGludCBkYTh4eF9tdXNiX2luaXQoc3RydWN0IG11c2IgKm11c2IpCiB7CiAJdm9pZCBfX2lvbWVtICpyZWdfYmFzZSA9IG11c2ItPmN0cmxfYmFzZTsKIAl1MzIgcmV2OwogCiAJbXVzYi0+bXJlZ3MgKz0gREE4WFhfTUVOVE9SX0NPUkVfT0ZGU0VUOwogCi0JY2xrX2VuYWJsZShtdXNiLT5jbG9jayk7Ci0KIAkvKiBSZXR1cm5zIHplcm8gaWYgZS5nLiBub3QgY2xvY2tlZCAqLwogCXJldiA9IG11c2JfcmVhZGwocmVnX2Jhc2UsIERBOFhYX1VTQl9SRVZJU0lPTl9SRUcpOwogCWlmICghcmV2KQpAQCAtNDMxLDggKzQzNyw2IEBACiAJaWYgKGlzX2hvc3RfZW5hYmxlZChtdXNiKSkKIAkJc2V0dXBfdGltZXIoJm90Z193b3JrYXJvdW5kLCBvdGdfdGltZXIsICh1bnNpZ25lZCBsb25nKW11c2IpOwogCi0JbXVzYi0+Ym9hcmRfc2V0X3ZidXMgPSBkYTh4eF9zZXRfdmJ1czsKLQogCS8qIFJlc2V0IHRoZSBjb250cm9sbGVyICovCiAJbXVzYl93cml0ZWwocmVnX2Jhc2UsIERBOFhYX1VTQl9DVFJMX1JFRywgREE4WFhfU09GVF9SRVNFVF9NQVNLKTsKIApAQCAtNDQ2LDE0ICs0NTAsMTMgQEAKIAkJIHJldiwgX19yYXdfcmVhZGwoQ0ZHQ0hJUDIpLAogCQkgbXVzYl9yZWFkYihyZWdfYmFzZSwgREE4WFhfVVNCX0NUUkxfUkVHKSk7CiAKLQltdXNiLT5pc3IgPSBkYTh4eF9pbnRlcnJ1cHQ7CisJbXVzYi0+aXNyID0gZGE4eHhfbXVzYl9pbnRlcnJ1cHQ7CiAJcmV0dXJuIDA7CiBmYWlsOgotCWNsa19kaXNhYmxlKG11c2ItPmNsb2NrKTsKIAlyZXR1cm4gLUVOT0RFVjsKIH0KIAotaW50IG11c2JfcGxhdGZvcm1fZXhpdChzdHJ1Y3QgbXVzYiAqbXVzYikKK3N0YXRpYyBpbnQgZGE4eHhfbXVzYl9leGl0KHN0cnVjdCBtdXNiICptdXNiKQogewogCWlmIChpc19ob3N0X2VuYWJsZWQobXVzYikpCiAJCWRlbF90aW1lcl9zeW5jKCZvdGdfd29ya2Fyb3VuZCk7CkBAIC00NjMsNyArNDY2LDE0MCBAQAogCW90Z19wdXRfdHJhbnNjZWl2ZXIobXVzYi0+eGNlaXYpOwogCXVzYl9ub3BfeGNlaXZfdW5yZWdpc3RlcigpOwogCi0JY2xrX2Rpc2FibGUobXVzYi0+Y2xvY2spOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG11c2JfcGxhdGZvcm1fb3BzIGRhOHh4X29wcyA9IHsKKwkuaW5pdAkJPSBkYTh4eF9tdXNiX2luaXQsCisJLmV4aXQJCT0gZGE4eHhfbXVzYl9leGl0LAorCisJLmVuYWJsZQkJPSBkYTh4eF9tdXNiX2VuYWJsZSwKKwkuZGlzYWJsZQk9IGRhOHh4X211c2JfZGlzYWJsZSwKKworCS5zZXRfbW9kZQk9IGRhOHh4X211c2Jfc2V0X21vZGUsCisJLnRyeV9pZGxlCT0gZGE4eHhfbXVzYl90cnlfaWRsZSwKKworCS5zZXRfdmJ1cwk9IGRhOHh4X211c2Jfc2V0X3ZidXMsCit9OworCitzdGF0aWMgdTY0IGRhOHh4X2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOworCitzdGF0aWMgaW50IF9faW5pdCBkYTh4eF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBtdXNiX2hkcmNfcGxhdGZvcm1fZGF0YQkqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCQkqbXVzYjsKKwlzdHJ1Y3QgZGE4eHhfZ2x1ZQkJKmdsdWU7CisKKwlzdHJ1Y3QgY2xrCQkJKmNsazsKKworCWludAkJCQlyZXQgPSAtRU5PTUVNOworCisJZ2x1ZSA9IGt6YWxsb2Moc2l6ZW9mKCpnbHVlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFnbHVlKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBnbHVlIGNvbnRleHRcbiIpOworCQlnb3RvIGVycjA7CisJfQorCisJbXVzYiA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygibXVzYi1oZHJjIiwgLTEpOworCWlmICghbXVzYikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gYWxsb2NhdGUgbXVzYiBkZXZpY2VcbiIpOworCQlnb3RvIGVycjE7CisJfQorCisJY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAidXNiMjAiKTsKKwlpZiAoSVNfRVJSKGNsaykpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCBjbG9ja1xuIik7CisJCXJldCA9IFBUUl9FUlIoY2xrKTsKKwkJZ290byBlcnIyOworCX0KKworCXJldCA9IGNsa19lbmFibGUoY2xrKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBlbmFibGUgY2xvY2tcbiIpOworCQlnb3RvIGVycjM7CisJfQorCisJbXVzYi0+ZGV2LnBhcmVudAkJPSAmcGRldi0+ZGV2OworCW11c2ItPmRldi5kbWFfbWFzawkJPSAmZGE4eHhfZG1hbWFzazsKKwltdXNiLT5kZXYuY29oZXJlbnRfZG1hX21hc2sJPSBkYTh4eF9kbWFtYXNrOworCisJZ2x1ZS0+ZGV2CQkJPSAmcGRldi0+ZGV2OworCWdsdWUtPm11c2IJCQk9IG11c2I7CisJZ2x1ZS0+Y2xrCQkJPSBjbGs7CisKKwlwZGF0YS0+cGxhdGZvcm1fb3BzCQk9ICZkYTh4eF9vcHM7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBnbHVlKTsKKworCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGRfcmVzb3VyY2VzKG11c2IsIHBkZXYtPnJlc291cmNlLAorCQkJcGRldi0+bnVtX3Jlc291cmNlcyk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gYWRkIHJlc291cmNlc1xuIik7CisJCWdvdG8gZXJyNDsKKwl9CisKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX2RhdGEobXVzYiwgcGRhdGEsIHNpemVvZigqcGRhdGEpKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBhZGQgcGxhdGZvcm1fZGF0YVxuIik7CisJCWdvdG8gZXJyNDsKKwl9CisKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKG11c2IpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIG11c2IgZGV2aWNlXG4iKTsKKwkJZ290byBlcnI0OworCX0KKworCXJldHVybiAwOworCitlcnI0OgorCWNsa19kaXNhYmxlKGNsayk7CisKK2VycjM6CisJY2xrX3B1dChjbGspOworCitlcnIyOgorCXBsYXRmb3JtX2RldmljZV9wdXQobXVzYik7CisKK2VycjE6CisJa2ZyZWUoZ2x1ZSk7CisKK2VycjA6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2V4aXQgZGE4eHhfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRhOHh4X2dsdWUJCSpnbHVlID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlwbGF0Zm9ybV9kZXZpY2VfZGVsKGdsdWUtPm11c2IpOworCXBsYXRmb3JtX2RldmljZV9wdXQoZ2x1ZS0+bXVzYik7CisJY2xrX2Rpc2FibGUoZ2x1ZS0+Y2xrKTsKKwljbGtfcHV0KGdsdWUtPmNsayk7CisJa2ZyZWUoZ2x1ZSk7CiAKIAlyZXR1cm4gMDsKIH0KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZGE4eHhfZHJpdmVyID0geworCS5yZW1vdmUJCT0gX19leGl0X3AoZGE4eHhfcmVtb3ZlKSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAibXVzYi1kYTh4eCIsCisJfSwKK307CisKK01PRFVMRV9ERVNDUklQVElPTigiREE4eHgvT01BUC1MMXggTVVTQiBHbHVlIExheWVyIik7CitNT0RVTEVfQVVUSE9SKCJTZXJnZWkgU2h0eWx5b3YgPHNzaHR5bHlvdkBydS5tdmlzdGEuY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworCitzdGF0aWMgaW50IF9faW5pdCBkYTh4eF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9wcm9iZSgmZGE4eHhfZHJpdmVyLCBkYTh4eF9wcm9iZSk7Cit9CitzdWJzeXNfaW5pdGNhbGwoZGE4eHhfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkYTh4eF9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmRhOHh4X2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChkYTh4eF9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvZGF2aW5jaS5jIGIvZHJpdmVycy91c2IvbXVzYi9kYXZpbmNpLmMKaW5kZXggNmU2NzYyOS4uZTZkZTA5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9kYXZpbmNpLmMKKysrIGIvZHJpdmVycy91c2IvbXVzYi9kYXZpbmNpLmMKQEAgLTMwLDYgKzMwLDggQEAKICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvbWVtb3J5Lmg+CkBAIC01MSw2ICs1MywxMiBAQAogI2RlZmluZSBVU0JfUEhZX0NUUkwJSU9fQUREUkVTUyhVU0JQSFlfQ1RMX1BBRERSKQogI2RlZmluZSBETTM1NV9ERUVQU0xFRVAJSU9fQUREUkVTUyhETTM1NV9ERUVQU0xFRVBfUEFERFIpCiAKK3N0cnVjdCBkYXZpbmNpX2dsdWUgeworCXN0cnVjdCBkZXZpY2UJCSpkZXY7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZQkqbXVzYjsKKwlzdHJ1Y3QgY2xrCQkqY2xrOworfTsKKwogLyogUkVWSVNJVCAoUE0pIHdlIHNob3VsZCBiZSBhYmxlIHRvIGtlZXAgdGhlIFBIWSBpbiBsb3cgcG93ZXIgbW9kZSBtb3N0CiAgKiBvZiB0aGUgdGltZSAoMjQgTUhaIG9zY2lsbGF0b3IgYW5kIFBMTCBvZmYsIGV0YykgYnkgc2V0dGluZyBQT1dFUi5EMAogICogYW5kLCB3aGVuIGluIGhvc3QgbW9kZSwgYXV0b3N1c3BlbmRpbmcgaWRsZSByb290IHBvcnRzLi4uIFBIWVBMTE9OCkBAIC04Myw3ICs5MSw3IEBACiAKIHN0YXRpYyBpbnQgZG1hX29mZiA9IDE7CiAKLXZvaWQgbXVzYl9wbGF0Zm9ybV9lbmFibGUoc3RydWN0IG11c2IgKm11c2IpCitzdGF0aWMgdm9pZCBkYXZpbmNpX211c2JfZW5hYmxlKHN0cnVjdCBtdXNiICptdXNiKQogewogCXUzMgl0bXAsIG9sZCwgdmFsOwogCkBAIC0xMTYsNyArMTI0LDcgQEAKIC8qCiAgKiBEaXNhYmxlIHRoZSBIRFJDIGFuZCBmbHVzaCBpbnRlcnJ1cHRzCiAgKi8KLXZvaWQgbXVzYl9wbGF0Zm9ybV9kaXNhYmxlKHN0cnVjdCBtdXNiICptdXNiKQorc3RhdGljIHZvaWQgZGF2aW5jaV9tdXNiX2Rpc2FibGUoc3RydWN0IG11c2IgKm11c2IpCiB7CiAJLyogYmVjYXVzZSB3ZSBkb24ndCBzZXQgQ1RSTFIuVUlOVCwgImltcG9ydGFudCIgdG86CiAJICogIC0gbm90IHJlYWQvd3JpdGUgSU5UUlVTQi9JTlRSVVNCRQpAQCAtMTY3LDcgKzE3NSw3IEBACiAKICNlbmRpZgkvKiBFVk0gKi8KIAotc3RhdGljIHZvaWQgZGF2aW5jaV9zb3VyY2VfcG93ZXIoc3RydWN0IG11c2IgKm11c2IsIGludCBpc19vbiwgaW50IGltbWVkaWF0ZSkKK3N0YXRpYyB2b2lkIGRhdmluY2lfbXVzYl9zb3VyY2VfcG93ZXIoc3RydWN0IG11c2IgKm11c2IsIGludCBpc19vbiwgaW50IGltbWVkaWF0ZSkKIHsKICNpZmRlZiBDT05GSUdfTUFDSF9EQVZJTkNJX0VWTQogCWlmIChpc19vbikKQEAgLTE5MCwxMCArMTk4LDEwIEBACiAjZW5kaWYKIH0KIAotc3RhdGljIHZvaWQgZGF2aW5jaV9zZXRfdmJ1cyhzdHJ1Y3QgbXVzYiAqbXVzYiwgaW50IGlzX29uKQorc3RhdGljIHZvaWQgZGF2aW5jaV9tdXNiX3NldF92YnVzKHN0cnVjdCBtdXNiICptdXNiLCBpbnQgaXNfb24pCiB7CiAJV0FSTl9PTihpc19vbiAmJiBpc19wZXJpcGhlcmFsX2FjdGl2ZShtdXNiKSk7Ci0JZGF2aW5jaV9zb3VyY2VfcG93ZXIobXVzYiwgaXNfb24sIDApOworCWRhdmluY2lfbXVzYl9zb3VyY2VfcG93ZXIobXVzYiwgaXNfb24sIDApOwogfQogCiAKQEAgLTI1OSw3ICsyNjcsNyBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm11c2ItPmxvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIGlycXJldHVybl90IGRhdmluY2lfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKl9faGNpKQorc3RhdGljIGlycXJldHVybl90IGRhdmluY2lfbXVzYl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqX19oY2kpCiB7CiAJdW5zaWduZWQgbG9uZwlmbGFnczsKIAlpcnFyZXR1cm5fdAlyZXR2YWwgPSBJUlFfTk9ORTsKQEAgLTM0NSw3ICszNTMsNyBAQAogCQkvKiBOT1RFOiAgdGhpcyBtdXN0IGNvbXBsZXRlIHBvd2Vyb24gd2l0aGluIDEwMCBtc2VjCiAJCSAqIChPVEdfVElNRV9BX1dBSVRfVlJJU0UpIGJ1dCB3ZSBkb24ndCBjaGVjayBmb3IgdGhhdC4KIAkJICovCi0JCWRhdmluY2lfc291cmNlX3Bvd2VyKG11c2IsIGRydnZidXMsIDApOworCQlkYXZpbmNpX211c2Jfc291cmNlX3Bvd2VyKG11c2IsIGRydnZidXMsIDApOwogCQlEQkcoMiwgIlZCVVMgJXMgKCVzKSVzLCBkZXZjdGwgJTAyeFxuIiwKIAkJCQlkcnZ2YnVzID8gIm9uIiA6ICJvZmYiLAogCQkJCW90Z19zdGF0ZV9zdHJpbmcobXVzYiksCkBAIC0zNzAsMTMgKzM3OCwxMyBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLWludCBtdXNiX3BsYXRmb3JtX3NldF9tb2RlKHN0cnVjdCBtdXNiICptdXNiLCB1OCBtb2RlKQorc3RhdGljIGludCBkYXZpbmNpX211c2Jfc2V0X21vZGUoc3RydWN0IG11c2IgKm11c2IsIHU4IG1vZGUpCiB7CiAJLyogRVZNIGNhbid0IGRvIHRoaXMgKHJpZ2h0PykgKi8KIAlyZXR1cm4gLUVJTzsKIH0KIAotaW50IF9faW5pdCBtdXNiX3BsYXRmb3JtX2luaXQoc3RydWN0IG11c2IgKm11c2IsIHZvaWQgKmJvYXJkX2RhdGEpCitzdGF0aWMgaW50IGRhdmluY2lfbXVzYl9pbml0KHN0cnVjdCBtdXNiICptdXNiKQogewogCXZvaWQgX19pb21lbQkqdGliYXNlID0gbXVzYi0+Y3RybF9iYXNlOwogCXUzMgkJcmV2aXNpb247CkBAIC0zODgsOCArMzk2LDYgQEAKIAogCW11c2ItPm1yZWdzICs9IERBVklOQ0lfQkFTRV9PRkZTRVQ7CiAKLQljbGtfZW5hYmxlKG11c2ItPmNsb2NrKTsKLQogCS8qIHJldHVybnMgemVybyBpZiBlLmcuIG5vdCBjbG9ja2VkICovCiAJcmV2aXNpb24gPSBtdXNiX3JlYWRsKHRpYmFzZSwgREFWSU5DSV9VU0JfVkVSU0lPTl9SRUcpOwogCWlmIChyZXZpc2lvbiA9PSAwKQpAQCAtMzk4LDggKzQwNCw3IEBACiAJaWYgKGlzX2hvc3RfZW5hYmxlZChtdXNiKSkKIAkJc2V0dXBfdGltZXIoJm90Z193b3JrYXJvdW5kLCBvdGdfdGltZXIsICh1bnNpZ25lZCBsb25nKSBtdXNiKTsKIAotCW11c2ItPmJvYXJkX3NldF92YnVzID0gZGF2aW5jaV9zZXRfdmJ1czsKLQlkYXZpbmNpX3NvdXJjZV9wb3dlcihtdXNiLCAwLCAxKTsKKwlkYXZpbmNpX211c2Jfc291cmNlX3Bvd2VyKG11c2IsIDAsIDEpOwogCiAJLyogZG0zNTUgRVZNIHN3YXBzIEQrL0QtIGZvciBzaWduYWwgaW50ZWdyaXR5LCBhbmQKIAkgKiBpcyBjbG9ja2VkIGZyb20gdGhlIG1haW4gMjQgTUh6IGNyeXN0YWwuCkBAIC00NDAsMTggKzQ0NSwxNiBAQAogCQlyZXZpc2lvbiwgX19yYXdfcmVhZGwoVVNCX1BIWV9DVFJMKSwKIAkJbXVzYl9yZWFkYih0aWJhc2UsIERBVklOQ0lfVVNCX0NUUkxfUkVHKSk7CiAKLQltdXNiLT5pc3IgPSBkYXZpbmNpX2ludGVycnVwdDsKKwltdXNiLT5pc3IgPSBkYXZpbmNpX211c2JfaW50ZXJydXB0OwogCXJldHVybiAwOwogCiBmYWlsOgotCWNsa19kaXNhYmxlKG11c2ItPmNsb2NrKTsKLQogCW90Z19wdXRfdHJhbnNjZWl2ZXIobXVzYi0+eGNlaXYpOwogCXVzYl9ub3BfeGNlaXZfdW5yZWdpc3RlcigpOwogCXJldHVybiAtRU5PREVWOwogfQogCi1pbnQgbXVzYl9wbGF0Zm9ybV9leGl0KHN0cnVjdCBtdXNiICptdXNiKQorc3RhdGljIGludCBkYXZpbmNpX211c2JfZXhpdChzdHJ1Y3QgbXVzYiAqbXVzYikKIHsKIAlpZiAoaXNfaG9zdF9lbmFibGVkKG11c2IpKQogCQlkZWxfdGltZXJfc3luYygmb3RnX3dvcmthcm91bmQpOwpAQCAtNDY1LDcgKzQ2OCw3IEBACiAJCV9fcmF3X3dyaXRlbChkZWVwc2xlZXAsIERNMzU1X0RFRVBTTEVFUCk7CiAJfQogCi0JZGF2aW5jaV9zb3VyY2VfcG93ZXIobXVzYiwgMCAvKm9mZiovLCAxKTsKKwlkYXZpbmNpX211c2Jfc291cmNlX3Bvd2VyKG11c2IsIDAgLypvZmYqLywgMSk7CiAKIAkvKiBkZWxheSwgdG8gYXZvaWQgcHJvYmxlbXMgd2l0aCBtb2R1bGUgcmVsb2FkICovCiAJaWYgKGlzX2hvc3RfZW5hYmxlZChtdXNiKSAmJiBtdXNiLT54Y2Vpdi0+ZGVmYXVsdF9hKSB7CkBAIC00OTUsMTAgKzQ5OCwxNDEgQEAKIAogCXBoeV9vZmYoKTsKIAotCWNsa19kaXNhYmxlKG11c2ItPmNsb2NrKTsKLQogCW90Z19wdXRfdHJhbnNjZWl2ZXIobXVzYi0+eGNlaXYpOwogCXVzYl9ub3BfeGNlaXZfdW5yZWdpc3RlcigpOwogCiAJcmV0dXJuIDA7CiB9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXVzYl9wbGF0Zm9ybV9vcHMgZGF2aW5jaV9vcHMgPSB7CisJLmluaXQJCT0gZGF2aW5jaV9tdXNiX2luaXQsCisJLmV4aXQJCT0gZGF2aW5jaV9tdXNiX2V4aXQsCisKKwkuZW5hYmxlCQk9IGRhdmluY2lfbXVzYl9lbmFibGUsCisJLmRpc2FibGUJPSBkYXZpbmNpX211c2JfZGlzYWJsZSwKKworCS5zZXRfbW9kZQk9IGRhdmluY2lfbXVzYl9zZXRfbW9kZSwKKworCS5zZXRfdmJ1cwk9IGRhdmluY2lfbXVzYl9zZXRfdmJ1cywKK307CisKK3N0YXRpYyB1NjQgZGF2aW5jaV9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKKworc3RhdGljIGludCBfX2luaXQgZGF2aW5jaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBtdXNiX2hkcmNfcGxhdGZvcm1fZGF0YQkqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCQkqbXVzYjsKKwlzdHJ1Y3QgZGF2aW5jaV9nbHVlCQkqZ2x1ZTsKKwlzdHJ1Y3QgY2xrCQkJKmNsazsKKworCWludAkJCQlyZXQgPSAtRU5PTUVNOworCisJZ2x1ZSA9IGt6YWxsb2Moc2l6ZW9mKCpnbHVlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFnbHVlKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBnbHVlIGNvbnRleHRcbiIpOworCQlnb3RvIGVycjA7CisJfQorCisJbXVzYiA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygibXVzYi1oZHJjIiwgLTEpOworCWlmICghbXVzYikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gYWxsb2NhdGUgbXVzYiBkZXZpY2VcbiIpOworCQlnb3RvIGVycjE7CisJfQorCisJY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAidXNiIik7CisJaWYgKElTX0VSUihjbGspKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBnZXQgY2xvY2tcbiIpOworCQlyZXQgPSBQVFJfRVJSKGNsayk7CisJCWdvdG8gZXJyMjsKKwl9CisKKwlyZXQgPSBjbGtfZW5hYmxlKGNsayk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZW5hYmxlIGNsb2NrXG4iKTsKKwkJZ290byBlcnIzOworCX0KKworCW11c2ItPmRldi5wYXJlbnQJCT0gJnBkZXYtPmRldjsKKwltdXNiLT5kZXYuZG1hX21hc2sJCT0gJmRhdmluY2lfZG1hbWFzazsKKwltdXNiLT5kZXYuY29oZXJlbnRfZG1hX21hc2sJPSBkYXZpbmNpX2RtYW1hc2s7CisKKwlnbHVlLT5kZXYJCQk9ICZwZGV2LT5kZXY7CisJZ2x1ZS0+bXVzYgkJCT0gbXVzYjsKKwlnbHVlLT5jbGsJCQk9IGNsazsKKworCXBkYXRhLT5wbGF0Zm9ybV9vcHMJCT0gJmRhdmluY2lfb3BzOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZ2x1ZSk7CisKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX3Jlc291cmNlcyhtdXNiLCBwZGV2LT5yZXNvdXJjZSwKKwkJCXBkZXYtPm51bV9yZXNvdXJjZXMpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGFkZCByZXNvdXJjZXNcbiIpOworCQlnb3RvIGVycjQ7CisJfQorCisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9kYXRhKG11c2IsIHBkYXRhLCBzaXplb2YoKnBkYXRhKSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gYWRkIHBsYXRmb3JtX2RhdGFcbiIpOworCQlnb3RvIGVycjQ7CisJfQorCisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChtdXNiKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBtdXNiIGRldmljZVxuIik7CisJCWdvdG8gZXJyNDsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyNDoKKwljbGtfZGlzYWJsZShjbGspOworCitlcnIzOgorCWNsa19wdXQoY2xrKTsKKworZXJyMjoKKwlwbGF0Zm9ybV9kZXZpY2VfcHV0KG11c2IpOworCitlcnIxOgorCWtmcmVlKGdsdWUpOworCitlcnIwOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19leGl0IGRhdmluY2lfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRhdmluY2lfZ2x1ZQkJKmdsdWUgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXBsYXRmb3JtX2RldmljZV9kZWwoZ2x1ZS0+bXVzYik7CisJcGxhdGZvcm1fZGV2aWNlX3B1dChnbHVlLT5tdXNiKTsKKwljbGtfZGlzYWJsZShnbHVlLT5jbGspOworCWNsa19wdXQoZ2x1ZS0+Y2xrKTsKKwlrZnJlZShnbHVlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBkYXZpbmNpX2RyaXZlciA9IHsKKwkucmVtb3ZlCQk9IF9fZXhpdF9wKGRhdmluY2lfcmVtb3ZlKSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAibXVzYi1kYXZpbmNpIiwKKwl9LAorfTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJEYVZpbmNpIE1VU0IgR2x1ZSBMYXllciIpOworTU9EVUxFX0FVVEhPUigiRmVsaXBlIEJhbGJpIDxiYWxiaUB0aS5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CisKK3N0YXRpYyBpbnQgX19pbml0IGRhdmluY2lfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJmRhdmluY2lfZHJpdmVyLCBkYXZpbmNpX3Byb2JlKTsKK30KK3N1YnN5c19pbml0Y2FsbChkYXZpbmNpX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgZGF2aW5jaV9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmRhdmluY2lfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KGRhdmluY2lfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5jIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuYwppbmRleCA5OWJlZWJjLi4wN2NmMzk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmMKQEAgLTk5LDE5ICs5OSw4IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAotI2lmZGVmCUNPTkZJR19BUk0KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9tZW1vcnkuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2VuZGlmCi0KICNpbmNsdWRlICJtdXNiX2NvcmUuaCIKIAotCi0jaWZkZWYgQ09ORklHX0FSQ0hfREFWSU5DSQotI2luY2x1ZGUgImRhdmluY2kuaCIKLSNlbmRpZgotCiAjZGVmaW5lIFRBX1dBSVRfQkNPTihtKSBtYXhfdChpbnQsIChtKS0+YV93YWl0X2Jjb24sIE9UR19USU1FX0FfV0FJVF9CQ09OKQogCiAKQEAgLTEyNiw3ICsxMTUsNyBAQAogCiAjZGVmaW5lIERSSVZFUl9JTkZPIERSSVZFUl9ERVNDICIsIHYiIE1VU0JfVkVSU0lPTgogCi0jZGVmaW5lIE1VU0JfRFJJVkVSX05BTUUgIm11c2JfaGRyYyIKKyNkZWZpbmUgTVVTQl9EUklWRVJfTkFNRSAibXVzYi1oZHJjIgogY29uc3QgY2hhciBtdXNiX2RyaXZlcl9uYW1lW10gPSBNVVNCX0RSSVZFUl9OQU1FOwogCiBNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0lORk8pOwpAQCAtMjMwLDcgKzIxOSw3IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLSNpZiAhZGVmaW5lZChDT05GSUdfVVNCX1RVU0I2MDEwKSAmJiAhZGVmaW5lZChDT05GSUdfQkxBQ0tGSU4pCisjaWYgIWRlZmluZWQoQ09ORklHX1VTQl9NVVNCX1RVU0I2MDEwKSAmJiAhZGVmaW5lZChDT05GSUdfVVNCX01VU0JfQkxBQ0tGSU4pCiAKIC8qCiAgKiBMb2FkIGFuIGVuZHBvaW50J3MgRklGTwpAQCAtMzkwLDcgKzM3OSw3IEBACiAJY2FzZSBPVEdfU1RBVEVfQV9TVVNQRU5EOgogCWNhc2UgT1RHX1NUQVRFX0FfV0FJVF9CQ09OOgogCQlEQkcoMSwgIkhOUDogJXMgdGltZW91dFxuIiwgb3RnX3N0YXRlX3N0cmluZyhtdXNiKSk7Ci0JCW11c2Jfc2V0X3ZidXMobXVzYiwgMCk7CisJCW11c2JfcGxhdGZvcm1fc2V0X3ZidXMobXVzYiwgMCk7CiAJCW11c2ItPnhjZWl2LT5zdGF0ZSA9IE9UR19TVEFURV9BX1dBSVRfVkZBTEw7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC01NzEsNyArNTYwLDcgQEAKIAkJbXVzYi0+ZXAwX3N0YWdlID0gTVVTQl9FUDBfU1RBUlQ7CiAJCW11c2ItPnhjZWl2LT5zdGF0ZSA9IE9UR19TVEFURV9BX0lETEU7CiAJCU1VU0JfSFNUX01PREUobXVzYik7Ci0JCW11c2Jfc2V0X3ZidXMobXVzYiwgMSk7CisJCW11c2JfcGxhdGZvcm1fc2V0X3ZidXMobXVzYiwgMSk7CiAKIAkJaGFuZGxlZCA9IElSUV9IQU5ETEVEOwogCX0KQEAgLTY0Miw3ICs2MzEsNyBAQAogCiAJCS8qIGdvIHRocm91Z2ggQV9XQUlUX1ZGQUxMIHRoZW4gc3RhcnQgYSBuZXcgc2Vzc2lvbiAqLwogCQlpZiAoIWlnbm9yZSkKLQkJCW11c2Jfc2V0X3ZidXMobXVzYiwgMCk7CisJCQltdXNiX3BsYXRmb3JtX3NldF92YnVzKG11c2IsIDApOwogCQloYW5kbGVkID0gSVJRX0hBTkRMRUQ7CiAJfQogCkBAIC0xMDQ5LDggKzEwMzgsNiBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZtdXNiLT5sb2NrLCBmbGFncyk7CiAJbXVzYl9wbGF0Zm9ybV9kaXNhYmxlKG11c2IpOwogCW11c2JfZ2VuZXJpY19kaXNhYmxlKG11c2IpOwotCWlmIChtdXNiLT5jbG9jaykKLQkJY2xrX3B1dChtdXNiLT5jbG9jayk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXVzYi0+bG9jaywgZmxhZ3MpOwogCiAJaWYgKCFpc19vdGdfZW5hYmxlZChtdXNiKSAmJiBpc19ob3N0X2VuYWJsZWQobXVzYikpCkBAIC0xMDc0LDEwICsxMDYxLDExIEBACiAgKiBXZSBkb24ndCBjdXJyZW50bHkgdXNlIGR5bmFtaWMgZmlmbyBzZXR1cCBjYXBhYmlsaXR5IHRvIGRvIGFueXRoaW5nCiAgKiBtb3JlIHRoYW4gc2VsZWN0aW5nIG9uZSBvZiBhIGJ1bmNoIG9mIHByZWRlZmluZWQgY29uZmlndXJhdGlvbnMuCiAgKi8KLSNpZiBkZWZpbmVkKENPTkZJR19VU0JfVFVTQjYwMTApIHx8IFwKLQlkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNDMwKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKSBcCi0JfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNCkKKyNpZiBkZWZpbmVkKENPTkZJR19VU0JfTVVTQl9UVVNCNjAxMCkgfHwgZGVmaW5lZChDT05GSUdfVVNCX01VU0JfT01BUDJQTFVTKSBcCisJfHwgZGVmaW5lZChDT05GSUdfVVNCX01VU0JfQU0zNVgpCiBzdGF0aWMgdXNob3J0IF9faW5pdGRhdGEgZmlmb19tb2RlID0gNDsKKyNlbGlmIGRlZmluZWQoQ09ORklHX1VTQl9NVVNCX1VYNTAwKQorc3RhdGljIHVzaG9ydCBfX2luaXRkYXRhIGZpZm9fbW9kZSA9IDU7CiAjZWxzZQogc3RhdGljIHVzaG9ydCBfX2luaXRkYXRhIGZpZm9fbW9kZSA9IDI7CiAjZW5kaWYKQEAgLTE1MDEsNyArMTQ4OSw3IEBACiAJCXN0cnVjdCBtdXNiX2h3X2VwCSpod19lcCA9IG11c2ItPmVuZHBvaW50cyArIGk7CiAKIAkJaHdfZXAtPmZpZm8gPSBNVVNCX0ZJRk9fT0ZGU0VUKGkpICsgbWJhc2U7Ci0jaWZkZWYgQ09ORklHX1VTQl9UVVNCNjAxMAorI2lmZGVmIENPTkZJR19VU0JfTVVTQl9UVVNCNjAxMAogCQlod19lcC0+Zmlmb19hc3luYyA9IG11c2ItPmFzeW5jICsgMHg0MDAgKyBNVVNCX0ZJRk9fT0ZGU0VUKGkpOwogCQlod19lcC0+Zmlmb19zeW5jID0gbXVzYi0+c3luYyArIDB4NDAwICsgTVVTQl9GSUZPX09GRlNFVChpKTsKIAkJaHdfZXAtPmZpZm9fc3luY192YSA9CkBAIC0xNTQ4LDcgKzE1MzYsOCBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0MzApIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0MzApIHx8IFwKLQlkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQorCWRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDQpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfVTg1MDApIHx8IFwKKwlkZWZpbmVkKENPTkZJR19BUkNIX1U1NTAwKQogCiBzdGF0aWMgaXJxcmV0dXJuX3QgZ2VuZXJpY19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqX19oY2kpCiB7CkBAIC0xOTA0LDYgKzE4OTMsNyBAQAogCX0KIAogCW11c2ItPmNvbnRyb2xsZXIgPSBkZXY7CisKIAlyZXR1cm4gbXVzYjsKIH0KIApAQCAtMjAwMCwzMCArMTk5MCwxNCBAQAogCXNwaW5fbG9ja19pbml0KCZtdXNiLT5sb2NrKTsKIAltdXNiLT5ib2FyZF9tb2RlID0gcGxhdC0+bW9kZTsKIAltdXNiLT5ib2FyZF9zZXRfcG93ZXIgPSBwbGF0LT5zZXRfcG93ZXI7Ci0JbXVzYi0+c2V0X2Nsb2NrID0gcGxhdC0+c2V0X2Nsb2NrOwogCW11c2ItPm1pbl9wb3dlciA9IHBsYXQtPm1pbl9wb3dlcjsKLQotCS8qIENsb2NrIHVzYWdlIGlzIGNoaXAtc3BlY2lmaWMgLi4uIGZ1bmN0aW9uYWwgY2xvY2sgKERhVmluY2ksCi0JICogT01BUDI0MzApLCBvciBQSFkgcmVmIChzb21lIFRVU0I2MDEwIGJvYXJkcykuICBBbGwgdGhpcyBjb3JlCi0JICogY29kZSBkb2VzIGlzIG1ha2Ugc3VyZSBhIGNsb2NrIGhhbmRsZSBpcyBhdmFpbGFibGU7IHBsYXRmb3JtCi0JICogY29kZSBtYW5hZ2VzIGl0IGR1cmluZyBzdGFydC9zdG9wIGFuZCBzdXNwZW5kL3Jlc3VtZS4KLQkgKi8KLQlpZiAocGxhdC0+Y2xvY2spIHsKLQkJbXVzYi0+Y2xvY2sgPSBjbGtfZ2V0KGRldiwgcGxhdC0+Y2xvY2spOwotCQlpZiAoSVNfRVJSKG11c2ItPmNsb2NrKSkgewotCQkJc3RhdHVzID0gUFRSX0VSUihtdXNiLT5jbG9jayk7Ci0JCQltdXNiLT5jbG9jayA9IE5VTEw7Ci0JCQlnb3RvIGZhaWwxOwotCQl9Ci0JfQorCW11c2ItPm9wcyA9IHBsYXQtPnBsYXRmb3JtX29wczsKIAogCS8qIFRoZSBtdXNiX3BsYXRmb3JtX2luaXQoKSBjYWxsOgogCSAqICAgLSBhZGp1c3RzIG11c2ItPm1yZWdzIGFuZCBtdXNiLT5pc3IgaWYgbmVlZGVkLAogCSAqICAgLSBtYXkgaW5pdGlhbGl6ZSBhbiBpbnRlZ3JhdGVkIHRyYW5jZWl2ZXIKIAkgKiAgIC0gaW5pdGlhbGl6ZXMgbXVzYi0+eGNlaXYsIHVzdWFsbHkgYnkgb3RnX2dldF90cmFuc2NlaXZlcigpCi0JICogICAtIGFjdGl2YXRlcyBjbG9ja3MuCiAJICogICAtIHN0b3BzIHBvd2VyaW5nIFZCVVMKLQkgKiAgIC0gYXNzaWducyBtdXNiLT5ib2FyZF9zZXRfdmJ1cyBpZiBob3N0IG1vZGUgaXMgZW5hYmxlZAogCSAqCiAJICogVGhlcmUgYXJlIHZhcmlvdXMgdHJhbnNjaWV2ZXIgY29uZmlndXJhdGlvbnMuICBCbGFja2ZpbiwKIAkgKiBEYVZpbmNpLCBUVVNCNjB4MCwgYW5kIG90aGVycyBpbnRlZ3JhdGUgdGhlbS4gIE9NQVAzIHVzZXMKQEAgLTIwMzEsOSArMjAwNSw5IEBACiAJICogaXNwMTUwNCwgbm9uLU9URywgZXRjKSBtb3N0bHkgaG9va2luZyB1cCB0aHJvdWdoIFVMUEkuCiAJICovCiAJbXVzYi0+aXNyID0gZ2VuZXJpY19pbnRlcnJ1cHQ7Ci0Jc3RhdHVzID0gbXVzYl9wbGF0Zm9ybV9pbml0KG11c2IsIHBsYXQtPmJvYXJkX2RhdGEpOworCXN0YXR1cyA9IG11c2JfcGxhdGZvcm1faW5pdChtdXNiKTsKIAlpZiAoc3RhdHVzIDwgMCkKLQkJZ290byBmYWlsMjsKKwkJZ290byBmYWlsMTsKIAogCWlmICghbXVzYi0+aXNyKSB7CiAJCXN0YXR1cyA9IC1FTk9ERVY7CkBAIC0yMTg2LDEwICsyMTYwLDYgQEAKIAkJZGV2aWNlX2luaXRfd2FrZXVwKGRldiwgMCk7CiAJbXVzYl9wbGF0Zm9ybV9leGl0KG11c2IpOwogCi1mYWlsMjoKLQlpZiAobXVzYi0+Y2xvY2spCi0JCWNsa19wdXQobXVzYi0+Y2xvY2spOwotCiBmYWlsMToKIAlkZXZfZXJyKG11c2ItPmNvbnRyb2xsZXIsCiAJCSJtdXNiX2luaXRfY29udHJvbGxlciBmYWlsZWQgd2l0aCBzdGF0dXMgJWRcbiIsIHN0YXR1cyk7CkBAIC0yMjE1LDcgKzIxODUsNyBAQAogc3RhdGljIGludCBfX2luaXQgbXVzYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBkZXZpY2UJKmRldiA9ICZwZGV2LT5kZXY7Ci0JaW50CQlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWludAkJaXJxID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUocGRldiwgIm1jIik7CiAJaW50CQlzdGF0dXM7CiAJc3RydWN0IHJlc291cmNlCSppb21lbTsKIAl2b2lkIF9faW9tZW0JKmJhc2U7CkBAIC0yMjY1LDE0NCArMjIzNSwxMzggQEAKIAogI2lmZGVmCUNPTkZJR19QTQogCi1zdGF0aWMgc3RydWN0IG11c2JfY29udGV4dF9yZWdpc3RlcnMgbXVzYl9jb250ZXh0OwotCi12b2lkIG11c2Jfc2F2ZV9jb250ZXh0KHN0cnVjdCBtdXNiICptdXNiKQorc3RhdGljIHZvaWQgbXVzYl9zYXZlX2NvbnRleHQoc3RydWN0IG11c2IgKm11c2IpCiB7CiAJaW50IGk7CiAJdm9pZCBfX2lvbWVtICptdXNiX2Jhc2UgPSBtdXNiLT5tcmVnczsKIAl2b2lkIF9faW9tZW0gKmVwaW87CiAKIAlpZiAoaXNfaG9zdF9lbmFibGVkKG11c2IpKSB7Ci0JCW11c2JfY29udGV4dC5mcmFtZSA9IG11c2JfcmVhZHcobXVzYl9iYXNlLCBNVVNCX0ZSQU1FKTsKLQkJbXVzYl9jb250ZXh0LnRlc3Rtb2RlID0gbXVzYl9yZWFkYihtdXNiX2Jhc2UsIE1VU0JfVEVTVE1PREUpOwotCQltdXNiX2NvbnRleHQuYnVzY3RsID0gbXVzYl9yZWFkX3VscGlfYnVzY29udHJvbChtdXNiLT5tcmVncyk7CisJCW11c2ItPmNvbnRleHQuZnJhbWUgPSBtdXNiX3JlYWR3KG11c2JfYmFzZSwgTVVTQl9GUkFNRSk7CisJCW11c2ItPmNvbnRleHQudGVzdG1vZGUgPSBtdXNiX3JlYWRiKG11c2JfYmFzZSwgTVVTQl9URVNUTU9ERSk7CisJCW11c2ItPmNvbnRleHQuYnVzY3RsID0gbXVzYl9yZWFkX3VscGlfYnVzY29udHJvbChtdXNiLT5tcmVncyk7CiAJfQotCW11c2JfY29udGV4dC5wb3dlciA9IG11c2JfcmVhZGIobXVzYl9iYXNlLCBNVVNCX1BPV0VSKTsKLQltdXNiX2NvbnRleHQuaW50cnR4ZSA9IG11c2JfcmVhZHcobXVzYl9iYXNlLCBNVVNCX0lOVFJUWEUpOwotCW11c2JfY29udGV4dC5pbnRycnhlID0gbXVzYl9yZWFkdyhtdXNiX2Jhc2UsIE1VU0JfSU5UUlJYRSk7Ci0JbXVzYl9jb250ZXh0LmludHJ1c2JlID0gbXVzYl9yZWFkYihtdXNiX2Jhc2UsIE1VU0JfSU5UUlVTQkUpOwotCW11c2JfY29udGV4dC5pbmRleCA9IG11c2JfcmVhZGIobXVzYl9iYXNlLCBNVVNCX0lOREVYKTsKLQltdXNiX2NvbnRleHQuZGV2Y3RsID0gbXVzYl9yZWFkYihtdXNiX2Jhc2UsIE1VU0JfREVWQ1RMKTsKKwltdXNiLT5jb250ZXh0LnBvd2VyID0gbXVzYl9yZWFkYihtdXNiX2Jhc2UsIE1VU0JfUE9XRVIpOworCW11c2ItPmNvbnRleHQuaW50cnR4ZSA9IG11c2JfcmVhZHcobXVzYl9iYXNlLCBNVVNCX0lOVFJUWEUpOworCW11c2ItPmNvbnRleHQuaW50cnJ4ZSA9IG11c2JfcmVhZHcobXVzYl9iYXNlLCBNVVNCX0lOVFJSWEUpOworCW11c2ItPmNvbnRleHQuaW50cnVzYmUgPSBtdXNiX3JlYWRiKG11c2JfYmFzZSwgTVVTQl9JTlRSVVNCRSk7CisJbXVzYi0+Y29udGV4dC5pbmRleCA9IG11c2JfcmVhZGIobXVzYl9iYXNlLCBNVVNCX0lOREVYKTsKKwltdXNiLT5jb250ZXh0LmRldmN0bCA9IG11c2JfcmVhZGIobXVzYl9iYXNlLCBNVVNCX0RFVkNUTCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbXVzYi0+Y29uZmlnLT5udW1fZXBzOyArK2kpIHsKIAkJZXBpbyA9IG11c2ItPmVuZHBvaW50c1tpXS5yZWdzOwotCQltdXNiX2NvbnRleHQuaW5kZXhfcmVnc1tpXS50eG1heHAgPQorCQltdXNiLT5jb250ZXh0LmluZGV4X3JlZ3NbaV0udHhtYXhwID0KIAkJCW11c2JfcmVhZHcoZXBpbywgTVVTQl9UWE1BWFApOwotCQltdXNiX2NvbnRleHQuaW5kZXhfcmVnc1tpXS50eGNzciA9CisJCW11c2ItPmNvbnRleHQuaW5kZXhfcmVnc1tpXS50eGNzciA9CiAJCQltdXNiX3JlYWR3KGVwaW8sIE1VU0JfVFhDU1IpOwotCQltdXNiX2NvbnRleHQuaW5kZXhfcmVnc1tpXS5yeG1heHAgPQorCQltdXNiLT5jb250ZXh0LmluZGV4X3JlZ3NbaV0ucnhtYXhwID0KIAkJCW11c2JfcmVhZHcoZXBpbywgTVVTQl9SWE1BWFApOwotCQltdXNiX2NvbnRleHQuaW5kZXhfcmVnc1tpXS5yeGNzciA9CisJCW11c2ItPmNvbnRleHQuaW5kZXhfcmVnc1tpXS5yeGNzciA9CiAJCQltdXNiX3JlYWR3KGVwaW8sIE1VU0JfUlhDU1IpOwogCiAJCWlmIChtdXNiLT5keW5fZmlmbykgewotCQkJbXVzYl9jb250ZXh0LmluZGV4X3JlZ3NbaV0udHhmaWZvYWRkID0KKwkJCW11c2ItPmNvbnRleHQuaW5kZXhfcmVnc1tpXS50eGZpZm9hZGQgPQogCQkJCQltdXNiX3JlYWRfdHhmaWZvYWRkKG11c2JfYmFzZSk7Ci0JCQltdXNiX2NvbnRleHQuaW5kZXhfcmVnc1tpXS5yeGZpZm9hZGQgPQorCQkJbXVzYi0+Y29udGV4dC5pbmRleF9yZWdzW2ldLnJ4Zmlmb2FkZCA9CiAJCQkJCW11c2JfcmVhZF9yeGZpZm9hZGQobXVzYl9iYXNlKTsKLQkJCW11c2JfY29udGV4dC5pbmRleF9yZWdzW2ldLnR4Zmlmb3N6ID0KKwkJCW11c2ItPmNvbnRleHQuaW5kZXhfcmVnc1tpXS50eGZpZm9zeiA9CiAJCQkJCW11c2JfcmVhZF90eGZpZm9zeihtdXNiX2Jhc2UpOwotCQkJbXVzYl9jb250ZXh0LmluZGV4X3JlZ3NbaV0ucnhmaWZvc3ogPQorCQkJbXVzYi0+Y29udGV4dC5pbmRleF9yZWdzW2ldLnJ4Zmlmb3N6ID0KIAkJCQkJbXVzYl9yZWFkX3J4Zmlmb3N6KG11c2JfYmFzZSk7CiAJCX0KIAkJaWYgKGlzX2hvc3RfZW5hYmxlZChtdXNiKSkgewotCQkJbXVzYl9jb250ZXh0LmluZGV4X3JlZ3NbaV0udHh0eXBlID0KKwkJCW11c2ItPmNvbnRleHQuaW5kZXhfcmVnc1tpXS50eHR5cGUgPQogCQkJCW11c2JfcmVhZGIoZXBpbywgTVVTQl9UWFRZUEUpOwotCQkJbXVzYl9jb250ZXh0LmluZGV4X3JlZ3NbaV0udHhpbnRlcnZhbCA9CisJCQltdXNiLT5jb250ZXh0LmluZGV4X3JlZ3NbaV0udHhpbnRlcnZhbCA9CiAJCQkJbXVzYl9yZWFkYihlcGlvLCBNVVNCX1RYSU5URVJWQUwpOwotCQkJbXVzYl9jb250ZXh0LmluZGV4X3JlZ3NbaV0ucnh0eXBlID0KKwkJCW11c2ItPmNvbnRleHQuaW5kZXhfcmVnc1tpXS5yeHR5cGUgPQogCQkJCW11c2JfcmVhZGIoZXBpbywgTVVTQl9SWFRZUEUpOwotCQkJbXVzYl9jb250ZXh0LmluZGV4X3JlZ3NbaV0ucnhpbnRlcnZhbCA9CisJCQltdXNiLT5jb250ZXh0LmluZGV4X3JlZ3NbaV0ucnhpbnRlcnZhbCA9CiAJCQkJbXVzYl9yZWFkYihlcGlvLCBNVVNCX1JYSU5URVJWQUwpOwogCi0JCQltdXNiX2NvbnRleHQuaW5kZXhfcmVnc1tpXS50eGZ1bmFkZHIgPQorCQkJbXVzYi0+Y29udGV4dC5pbmRleF9yZWdzW2ldLnR4ZnVuYWRkciA9CiAJCQkJbXVzYl9yZWFkX3R4ZnVuYWRkcihtdXNiX2Jhc2UsIGkpOwotCQkJbXVzYl9jb250ZXh0LmluZGV4X3JlZ3NbaV0udHhodWJhZGRyID0KKwkJCW11c2ItPmNvbnRleHQuaW5kZXhfcmVnc1tpXS50eGh1YmFkZHIgPQogCQkJCW11c2JfcmVhZF90eGh1YmFkZHIobXVzYl9iYXNlLCBpKTsKLQkJCW11c2JfY29udGV4dC5pbmRleF9yZWdzW2ldLnR4aHVicG9ydCA9CisJCQltdXNiLT5jb250ZXh0LmluZGV4X3JlZ3NbaV0udHhodWJwb3J0ID0KIAkJCQltdXNiX3JlYWRfdHhodWJwb3J0KG11c2JfYmFzZSwgaSk7CiAKLQkJCW11c2JfY29udGV4dC5pbmRleF9yZWdzW2ldLnJ4ZnVuYWRkciA9CisJCQltdXNiLT5jb250ZXh0LmluZGV4X3JlZ3NbaV0ucnhmdW5hZGRyID0KIAkJCQltdXNiX3JlYWRfcnhmdW5hZGRyKG11c2JfYmFzZSwgaSk7Ci0JCQltdXNiX2NvbnRleHQuaW5kZXhfcmVnc1tpXS5yeGh1YmFkZHIgPQorCQkJbXVzYi0+Y29udGV4dC5pbmRleF9yZWdzW2ldLnJ4aHViYWRkciA9CiAJCQkJbXVzYl9yZWFkX3J4aHViYWRkcihtdXNiX2Jhc2UsIGkpOwotCQkJbXVzYl9jb250ZXh0LmluZGV4X3JlZ3NbaV0ucnhodWJwb3J0ID0KKwkJCW11c2ItPmNvbnRleHQuaW5kZXhfcmVnc1tpXS5yeGh1YnBvcnQgPQogCQkJCW11c2JfcmVhZF9yeGh1YnBvcnQobXVzYl9iYXNlLCBpKTsKIAkJfQogCX0KLQotCW11c2JfcGxhdGZvcm1fc2F2ZV9jb250ZXh0KG11c2IsICZtdXNiX2NvbnRleHQpOwogfQogCi12b2lkIG11c2JfcmVzdG9yZV9jb250ZXh0KHN0cnVjdCBtdXNiICptdXNiKQorc3RhdGljIHZvaWQgbXVzYl9yZXN0b3JlX2NvbnRleHQoc3RydWN0IG11c2IgKm11c2IpCiB7CiAJaW50IGk7CiAJdm9pZCBfX2lvbWVtICptdXNiX2Jhc2UgPSBtdXNiLT5tcmVnczsKIAl2b2lkIF9faW9tZW0gKmVwX3RhcmdldF9yZWdzOwogCXZvaWQgX19pb21lbSAqZXBpbzsKIAotCW11c2JfcGxhdGZvcm1fcmVzdG9yZV9jb250ZXh0KG11c2IsICZtdXNiX2NvbnRleHQpOwotCiAJaWYgKGlzX2hvc3RfZW5hYmxlZChtdXNiKSkgewotCQltdXNiX3dyaXRldyhtdXNiX2Jhc2UsIE1VU0JfRlJBTUUsIG11c2JfY29udGV4dC5mcmFtZSk7Ci0JCW11c2Jfd3JpdGViKG11c2JfYmFzZSwgTVVTQl9URVNUTU9ERSwgbXVzYl9jb250ZXh0LnRlc3Rtb2RlKTsKLQkJbXVzYl93cml0ZV91bHBpX2J1c2NvbnRyb2wobXVzYi0+bXJlZ3MsIG11c2JfY29udGV4dC5idXNjdGwpOworCQltdXNiX3dyaXRldyhtdXNiX2Jhc2UsIE1VU0JfRlJBTUUsIG11c2ItPmNvbnRleHQuZnJhbWUpOworCQltdXNiX3dyaXRlYihtdXNiX2Jhc2UsIE1VU0JfVEVTVE1PREUsIG11c2ItPmNvbnRleHQudGVzdG1vZGUpOworCQltdXNiX3dyaXRlX3VscGlfYnVzY29udHJvbChtdXNiLT5tcmVncywgbXVzYi0+Y29udGV4dC5idXNjdGwpOwogCX0KLQltdXNiX3dyaXRlYihtdXNiX2Jhc2UsIE1VU0JfUE9XRVIsIG11c2JfY29udGV4dC5wb3dlcik7Ci0JbXVzYl93cml0ZXcobXVzYl9iYXNlLCBNVVNCX0lOVFJUWEUsIG11c2JfY29udGV4dC5pbnRydHhlKTsKLQltdXNiX3dyaXRldyhtdXNiX2Jhc2UsIE1VU0JfSU5UUlJYRSwgbXVzYl9jb250ZXh0LmludHJyeGUpOwotCW11c2Jfd3JpdGViKG11c2JfYmFzZSwgTVVTQl9JTlRSVVNCRSwgbXVzYl9jb250ZXh0LmludHJ1c2JlKTsKLQltdXNiX3dyaXRlYihtdXNiX2Jhc2UsIE1VU0JfREVWQ1RMLCBtdXNiX2NvbnRleHQuZGV2Y3RsKTsKKwltdXNiX3dyaXRlYihtdXNiX2Jhc2UsIE1VU0JfUE9XRVIsIG11c2ItPmNvbnRleHQucG93ZXIpOworCW11c2Jfd3JpdGV3KG11c2JfYmFzZSwgTVVTQl9JTlRSVFhFLCBtdXNiLT5jb250ZXh0LmludHJ0eGUpOworCW11c2Jfd3JpdGV3KG11c2JfYmFzZSwgTVVTQl9JTlRSUlhFLCBtdXNiLT5jb250ZXh0LmludHJyeGUpOworCW11c2Jfd3JpdGViKG11c2JfYmFzZSwgTVVTQl9JTlRSVVNCRSwgbXVzYi0+Y29udGV4dC5pbnRydXNiZSk7CisJbXVzYl93cml0ZWIobXVzYl9iYXNlLCBNVVNCX0RFVkNUTCwgbXVzYi0+Y29udGV4dC5kZXZjdGwpOwogCiAJZm9yIChpID0gMDsgaSA8IG11c2ItPmNvbmZpZy0+bnVtX2VwczsgKytpKSB7CiAJCWVwaW8gPSBtdXNiLT5lbmRwb2ludHNbaV0ucmVnczsKIAkJbXVzYl93cml0ZXcoZXBpbywgTVVTQl9UWE1BWFAsCi0JCQltdXNiX2NvbnRleHQuaW5kZXhfcmVnc1tpXS50eG1heHApOworCQkJbXVzYi0+Y29udGV4dC5pbmRleF9yZWdzW2ldLnR4bWF4cCk7CiAJCW11c2Jfd3JpdGV3KGVwaW8sIE1VU0JfVFhDU1IsCi0JCQltdXNiX2NvbnRleHQuaW5kZXhfcmVnc1tpXS50eGNzcik7CisJCQltdXNiLT5jb250ZXh0LmluZGV4X3JlZ3NbaV0udHhjc3IpOwogCQltdXNiX3dyaXRldyhlcGlvLCBNVVNCX1JYTUFYUCwKLQkJCW11c2JfY29udGV4dC5pbmRleF9yZWdzW2ldLnJ4bWF4cCk7CisJCQltdXNiLT5jb250ZXh0LmluZGV4X3JlZ3NbaV0ucnhtYXhwKTsKIAkJbXVzYl93cml0ZXcoZXBpbywgTVVTQl9SWENTUiwKLQkJCW11c2JfY29udGV4dC5pbmRleF9yZWdzW2ldLnJ4Y3NyKTsKKwkJCW11c2ItPmNvbnRleHQuaW5kZXhfcmVnc1tpXS5yeGNzcik7CiAKIAkJaWYgKG11c2ItPmR5bl9maWZvKSB7CiAJCQltdXNiX3dyaXRlX3R4Zmlmb3N6KG11c2JfYmFzZSwKLQkJCQltdXNiX2NvbnRleHQuaW5kZXhfcmVnc1tpXS50eGZpZm9zeik7CisJCQkJbXVzYi0+Y29udGV4dC5pbmRleF9yZWdzW2ldLnR4Zmlmb3N6KTsKIAkJCW11c2Jfd3JpdGVfcnhmaWZvc3oobXVzYl9iYXNlLAotCQkJCW11c2JfY29udGV4dC5pbmRleF9yZWdzW2ldLnJ4Zmlmb3N6KTsKKwkJCQltdXNiLT5jb250ZXh0LmluZGV4X3JlZ3NbaV0ucnhmaWZvc3opOwogCQkJbXVzYl93cml0ZV90eGZpZm9hZGQobXVzYl9iYXNlLAotCQkJCW11c2JfY29udGV4dC5pbmRleF9yZWdzW2ldLnR4Zmlmb2FkZCk7CisJCQkJbXVzYi0+Y29udGV4dC5pbmRleF9yZWdzW2ldLnR4Zmlmb2FkZCk7CiAJCQltdXNiX3dyaXRlX3J4Zmlmb2FkZChtdXNiX2Jhc2UsCi0JCQkJbXVzYl9jb250ZXh0LmluZGV4X3JlZ3NbaV0ucnhmaWZvYWRkKTsKKwkJCQltdXNiLT5jb250ZXh0LmluZGV4X3JlZ3NbaV0ucnhmaWZvYWRkKTsKIAkJfQogCiAJCWlmIChpc19ob3N0X2VuYWJsZWQobXVzYikpIHsKIAkJCW11c2Jfd3JpdGViKGVwaW8sIE1VU0JfVFhUWVBFLAotCQkJCW11c2JfY29udGV4dC5pbmRleF9yZWdzW2ldLnR4dHlwZSk7CisJCQkJbXVzYi0+Y29udGV4dC5pbmRleF9yZWdzW2ldLnR4dHlwZSk7CiAJCQltdXNiX3dyaXRlYihlcGlvLCBNVVNCX1RYSU5URVJWQUwsCi0JCQkJbXVzYl9jb250ZXh0LmluZGV4X3JlZ3NbaV0udHhpbnRlcnZhbCk7CisJCQkJbXVzYi0+Y29udGV4dC5pbmRleF9yZWdzW2ldLnR4aW50ZXJ2YWwpOwogCQkJbXVzYl93cml0ZWIoZXBpbywgTVVTQl9SWFRZUEUsCi0JCQkJbXVzYl9jb250ZXh0LmluZGV4X3JlZ3NbaV0ucnh0eXBlKTsKKwkJCQltdXNiLT5jb250ZXh0LmluZGV4X3JlZ3NbaV0ucnh0eXBlKTsKIAkJCW11c2Jfd3JpdGViKGVwaW8sIE1VU0JfUlhJTlRFUlZBTCwKIAotCQkJbXVzYl9jb250ZXh0LmluZGV4X3JlZ3NbaV0ucnhpbnRlcnZhbCk7CisJCQltdXNiLT5jb250ZXh0LmluZGV4X3JlZ3NbaV0ucnhpbnRlcnZhbCk7CiAJCQltdXNiX3dyaXRlX3R4ZnVuYWRkcihtdXNiX2Jhc2UsIGksCi0JCQkJbXVzYl9jb250ZXh0LmluZGV4X3JlZ3NbaV0udHhmdW5hZGRyKTsKKwkJCQltdXNiLT5jb250ZXh0LmluZGV4X3JlZ3NbaV0udHhmdW5hZGRyKTsKIAkJCW11c2Jfd3JpdGVfdHhodWJhZGRyKG11c2JfYmFzZSwgaSwKLQkJCQltdXNiX2NvbnRleHQuaW5kZXhfcmVnc1tpXS50eGh1YmFkZHIpOworCQkJCW11c2ItPmNvbnRleHQuaW5kZXhfcmVnc1tpXS50eGh1YmFkZHIpOwogCQkJbXVzYl93cml0ZV90eGh1YnBvcnQobXVzYl9iYXNlLCBpLAotCQkJCW11c2JfY29udGV4dC5pbmRleF9yZWdzW2ldLnR4aHVicG9ydCk7CisJCQkJbXVzYi0+Y29udGV4dC5pbmRleF9yZWdzW2ldLnR4aHVicG9ydCk7CiAKIAkJCWVwX3RhcmdldF9yZWdzID0KIAkJCQltdXNiX3JlYWRfdGFyZ2V0X3JlZ19iYXNlKGksIG11c2JfYmFzZSk7CiAKIAkJCW11c2Jfd3JpdGVfcnhmdW5hZGRyKGVwX3RhcmdldF9yZWdzLAotCQkJCW11c2JfY29udGV4dC5pbmRleF9yZWdzW2ldLnJ4ZnVuYWRkcik7CisJCQkJbXVzYi0+Y29udGV4dC5pbmRleF9yZWdzW2ldLnJ4ZnVuYWRkcik7CiAJCQltdXNiX3dyaXRlX3J4aHViYWRkcihlcF90YXJnZXRfcmVncywKLQkJCQltdXNiX2NvbnRleHQuaW5kZXhfcmVnc1tpXS5yeGh1YmFkZHIpOworCQkJCW11c2ItPmNvbnRleHQuaW5kZXhfcmVnc1tpXS5yeGh1YmFkZHIpOwogCQkJbXVzYl93cml0ZV9yeGh1YnBvcnQoZXBfdGFyZ2V0X3JlZ3MsCi0JCQkJbXVzYl9jb250ZXh0LmluZGV4X3JlZ3NbaV0ucnhodWJwb3J0KTsKKwkJCQltdXNiLT5jb250ZXh0LmluZGV4X3JlZ3NbaV0ucnhodWJwb3J0KTsKIAkJfQogCX0KIH0KQEAgLTI0MjcsMTIgKzIzOTEsNiBAQAogCiAJbXVzYl9zYXZlX2NvbnRleHQobXVzYik7CiAKLQlpZiAobXVzYi0+Y2xvY2spIHsKLQkJaWYgKG11c2ItPnNldF9jbG9jaykKLQkJCW11c2ItPnNldF9jbG9jayhtdXNiLT5jbG9jaywgMCk7Ci0JCWVsc2UKLQkJCWNsa19kaXNhYmxlKG11c2ItPmNsb2NrKTsKLQl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXVzYi0+bG9jaywgZmxhZ3MpOwogCXJldHVybiAwOwogfQpAQCAtMjQ0MiwxMyArMjQwMCw2IEBACiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXN0cnVjdCBtdXNiCSptdXNiID0gZGV2X3RvX211c2IoJnBkZXYtPmRldik7CiAKLQlpZiAobXVzYi0+Y2xvY2spIHsKLQkJaWYgKG11c2ItPnNldF9jbG9jaykKLQkJCW11c2ItPnNldF9jbG9jayhtdXNiLT5jbG9jaywgMSk7Ci0JCWVsc2UKLQkJCWNsa19lbmFibGUobXVzYi0+Y2xvY2spOwotCX0KLQogCW11c2JfcmVzdG9yZV9jb250ZXh0KG11c2IpOwogCiAJLyogZm9yIHN0YXRpYyBjbW9zIGxpa2UgRGFWaW5jaSwgcmVnaXN0ZXIgdmFsdWVzIHdlcmUgcHJlc2VydmVkCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5oIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuaAppbmRleCBmZWJhYWJjLi5kMGMyMzZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5oCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmgKQEAgLTIyMiw3ICsyMjIsNyBAQAogI2VuZGlmCiAKIC8qIFRVU0IgbWFwcGluZzogImZsYXQiIHBsdXMgZXAwIHNwZWNpYWwgY2FzZXMgKi8KLSNpZglkZWZpbmVkKENPTkZJR19VU0JfVFVTQjYwMTApCisjaWYJZGVmaW5lZChDT05GSUdfVVNCX01VU0JfVFVTQjYwMTApCiAjZGVmaW5lIG11c2JfZXBfc2VsZWN0KF9tYmFzZSwgX2VwbnVtKSBcCiAJbXVzYl93cml0ZWIoKF9tYmFzZSksIE1VU0JfSU5ERVgsIChfZXBudW0pKQogI2RlZmluZQlNVVNCX0VQX09GRlNFVAkJCU1VU0JfVFVTQl9PRkZTRVQKQEAgLTI1Myw2ICsyNTMsMjkgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIFRZUEVTICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKKy8qKgorICogc3RydWN0IG11c2JfcGxhdGZvcm1fb3BzIC0gT3BlcmF0aW9ucyBwYXNzZWQgdG8gbXVzYl9jb3JlIGJ5IEhXIGdsdWUgbGF5ZXIKKyAqIEBpbml0Ogl0dXJucyBvbiBjbG9ja3MsIHNldHMgdXAgcGxhdGZvcm0tc3BlY2lmaWMgcmVnaXN0ZXJzLCBldGMKKyAqIEBleGl0Ogl1bmRvZXMgQGluaXQKKyAqIEBzZXRfbW9kZToJZm9yY2VmdWxseSBjaGFuZ2VzIG9wZXJhdGluZyBtb2RlCisgKiBAdHJ5X2lsZGU6CXRyaWVzIHRvIGlkbGUgdGhlIElQCisgKiBAdmJ1c19zdGF0dXM6IHJldHVybnMgdmJ1cyBzdGF0dXMgaWYgcG9zc2libGUKKyAqIEBzZXRfdmJ1czoJZm9yY2VzIHZidXMgc3RhdHVzCisgKi8KK3N0cnVjdCBtdXNiX3BsYXRmb3JtX29wcyB7CisJaW50CSgqaW5pdCkoc3RydWN0IG11c2IgKm11c2IpOworCWludAkoKmV4aXQpKHN0cnVjdCBtdXNiICptdXNiKTsKKworCXZvaWQJKCplbmFibGUpKHN0cnVjdCBtdXNiICptdXNiKTsKKwl2b2lkCSgqZGlzYWJsZSkoc3RydWN0IG11c2IgKm11c2IpOworCisJaW50CSgqc2V0X21vZGUpKHN0cnVjdCBtdXNiICptdXNiLCB1OCBtb2RlKTsKKwl2b2lkCSgqdHJ5X2lkbGUpKHN0cnVjdCBtdXNiICptdXNiLCB1bnNpZ25lZCBsb25nIHRpbWVvdXQpOworCisJaW50CSgqdmJ1c19zdGF0dXMpKHN0cnVjdCBtdXNiICptdXNiKTsKKwl2b2lkCSgqc2V0X3ZidXMpKHN0cnVjdCBtdXNiICptdXNiLCBpbnQgb24pOworfTsKKwogLyoKICAqIHN0cnVjdCBtdXNiX2h3X2VwIC0gZW5kcG9pbnQgaGFyZHdhcmUgKGJpZGlyZWN0aW9uYWwpCiAgKgpAQCAtMjYzLDcgKzI4Niw3IEBACiAJdm9pZCBfX2lvbWVtCQkqZmlmbzsKIAl2b2lkIF9faW9tZW0JCSpyZWdzOwogCi0jaWZkZWYgQ09ORklHX1VTQl9UVVNCNjAxMAorI2lmZGVmIENPTkZJR19VU0JfTVVTQl9UVVNCNjAxMAogCXZvaWQgX19pb21lbQkJKmNvbmY7CiAjZW5kaWYKIApAQCAtMjgwLDcgKzMwMyw3IEBACiAJc3RydWN0IGRtYV9jaGFubmVsCSp0eF9jaGFubmVsOwogCXN0cnVjdCBkbWFfY2hhbm5lbAkqcnhfY2hhbm5lbDsKIAotI2lmZGVmIENPTkZJR19VU0JfVFVTQjYwMTAKKyNpZmRlZiBDT05GSUdfVVNCX01VU0JfVFVTQjYwMTAKIAkvKiBUVVNCIGhhcyAiYXN5bmNocm9ub3VzIiBhbmQgInN5bmNocm9ub3VzIiBkbWEgbW9kZXMgKi8KIAlkbWFfYWRkcl90CQlmaWZvX2FzeW5jOwogCWRtYV9hZGRyX3QJCWZpZm9fc3luYzsKQEAgLTMyMywxNCArMzQ2LDQzIEBACiAjZW5kaWYKIH0KIAorc3RydWN0IG11c2JfY3NyX3JlZ3MgeworCS8qIEZJRk8gcmVnaXN0ZXJzICovCisJdTE2IHR4bWF4cCwgdHhjc3IsIHJ4bWF4cCwgcnhjc3I7CisJdTE2IHJ4Zmlmb2FkZCwgdHhmaWZvYWRkOworCXU4IHR4dHlwZSwgdHhpbnRlcnZhbCwgcnh0eXBlLCByeGludGVydmFsOworCXU4IHJ4Zmlmb3N6LCB0eGZpZm9zejsKKwl1OCB0eGZ1bmFkZHIsIHR4aHViYWRkciwgdHhodWJwb3J0OworCXU4IHJ4ZnVuYWRkciwgcnhodWJhZGRyLCByeGh1YnBvcnQ7Cit9OworCitzdHJ1Y3QgbXVzYl9jb250ZXh0X3JlZ2lzdGVycyB7CisKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNDMwKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNCkKKwl1MzIgb3RnX3N5c2NvbmZpZywgb3RnX2ZvcmNlc3RhbmRieTsKKyNlbmRpZgorCXU4IHBvd2VyOworCXUxNiBpbnRydHhlLCBpbnRycnhlOworCXU4IGludHJ1c2JlOworCXUxNiBmcmFtZTsKKwl1OCBpbmRleCwgdGVzdG1vZGU7CisKKwl1OCBkZXZjdGwsIGJ1c2N0bCwgbWlzYzsKKworCXN0cnVjdCBtdXNiX2Nzcl9yZWdzIGluZGV4X3JlZ3NbTVVTQl9DX05VTV9FUFNdOworfTsKKwogLyoKICAqIHN0cnVjdCBtdXNiIC0gRHJpdmVyIGluc3RhbmNlIGRhdGEuCiAgKi8KIHN0cnVjdCBtdXNiIHsKIAkvKiBkZXZpY2UgbG9jayAqLwogCXNwaW5sb2NrX3QJCWxvY2s7Ci0Jc3RydWN0IGNsawkJKmNsb2NrOwotCXN0cnVjdCBjbGsJCSpwaHlfY2xvY2s7CisKKwljb25zdCBzdHJ1Y3QgbXVzYl9wbGF0Zm9ybV9vcHMgKm9wczsKKwlzdHJ1Y3QgbXVzYl9jb250ZXh0X3JlZ2lzdGVycyBjb250ZXh0OworCiAJaXJxcmV0dXJuX3QJCSgqaXNyKShpbnQsIHZvaWQgKik7CiAJc3RydWN0IHdvcmtfc3RydWN0CWlycV93b3JrOwogCXUxNgkJCWh3dmVyczsKQEAgLTM1OSwxMSArNDExLDcgQEAKIAogCXN0cnVjdCB0aW1lcl9saXN0CW90Z190aW1lcjsKICNlbmRpZgotCi0JLyogY2FsbGVkIHdpdGggSVJRcyBibG9ja2VkOyBPTi9ub256ZXJvIGltcGxpZXMgc3RhcnRpbmcgYSBzZXNzaW9uLAotCSAqIGFuZCB3YWl0aW5nIGF0IGxlYXN0IGFfd2FpdF92cmlzZV90bW91dC4KLQkgKi8KLQl2b2lkCQkJKCpib2FyZF9zZXRfdmJ1cykoc3RydWN0IG11c2IgKiwgaW50IGlzX29uKTsKKwlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sJbmI7CiAKIAlzdHJ1Y3QgZG1hX2NvbnRyb2xsZXIJKmRtYV9jb250cm9sbGVyOwogCkBAIC0zNzEsNyArNDE5LDcgQEAKIAl2b2lkIF9faW9tZW0JCSpjdHJsX2Jhc2U7CiAJdm9pZCBfX2lvbWVtCQkqbXJlZ3M7CiAKLSNpZmRlZiBDT05GSUdfVVNCX1RVU0I2MDEwCisjaWZkZWYgQ09ORklHX1VTQl9NVVNCX1RVU0I2MDEwCiAJZG1hX2FkZHJfdAkJYXN5bmM7CiAJZG1hX2FkZHJfdAkJc3luYzsKIAl2b2lkIF9faW9tZW0JCSpzeW5jX3ZhOwpAQCAtMzk4LDggKzQ0Niw2IEBACiAJdTggYm9hcmRfbW9kZTsJCS8qIGVudW0gbXVzYl9tb2RlICovCiAJaW50CQkJKCpib2FyZF9zZXRfcG93ZXIpKGludCBzdGF0ZSk7CiAKLQlpbnQJCQkoKnNldF9jbG9jaykoc3RydWN0IGNsayAqY2xrLCBpbnQgaXNfYWN0aXZlKTsKLQogCXU4CQkJbWluX3Bvd2VyOwkvKiB2YnVzIGZvciBwZXJpcGgsIGluIG1BLzIgKi8KIAogCWJvb2wJCQlpc19ob3N0OwpAQCAtNDU4LDUyICs1MDQsNiBAQAogI2VuZGlmCiB9OwogCi0jaWZkZWYgQ09ORklHX1BNCi1zdHJ1Y3QgbXVzYl9jc3JfcmVncyB7Ci0JLyogRklGTyByZWdpc3RlcnMgKi8KLQl1MTYgdHhtYXhwLCB0eGNzciwgcnhtYXhwLCByeGNzcjsKLQl1MTYgcnhmaWZvYWRkLCB0eGZpZm9hZGQ7Ci0JdTggdHh0eXBlLCB0eGludGVydmFsLCByeHR5cGUsIHJ4aW50ZXJ2YWw7Ci0JdTggcnhmaWZvc3osIHR4Zmlmb3N6OwotCXU4IHR4ZnVuYWRkciwgdHhodWJhZGRyLCB0eGh1YnBvcnQ7Ci0JdTggcnhmdW5hZGRyLCByeGh1YmFkZHIsIHJ4aHVicG9ydDsKLX07Ci0KLXN0cnVjdCBtdXNiX2NvbnRleHRfcmVnaXN0ZXJzIHsKLQotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0MzApIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpIHx8IFwKLSAgICBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQotCXUzMiBvdGdfc3lzY29uZmlnLCBvdGdfZm9yY2VzdGFuZGJ5OwotI2VuZGlmCi0JdTggcG93ZXI7Ci0JdTE2IGludHJ0eGUsIGludHJyeGU7Ci0JdTggaW50cnVzYmU7Ci0JdTE2IGZyYW1lOwotCXU4IGluZGV4LCB0ZXN0bW9kZTsKLQotCXU4IGRldmN0bCwgYnVzY3RsLCBtaXNjOwotCi0Jc3RydWN0IG11c2JfY3NyX3JlZ3MgaW5kZXhfcmVnc1tNVVNCX0NfTlVNX0VQU107Ci19OwotCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjQzMCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykgfHwgXAotICAgIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDQpIHx8IGRlZmluZWQoQ09ORklHX0JMQUNLRklOKQotZXh0ZXJuIHZvaWQgbXVzYl9wbGF0Zm9ybV9zYXZlX2NvbnRleHQoc3RydWN0IG11c2IgKm11c2IsCi0JCXN0cnVjdCBtdXNiX2NvbnRleHRfcmVnaXN0ZXJzICptdXNiX2NvbnRleHQpOwotZXh0ZXJuIHZvaWQgbXVzYl9wbGF0Zm9ybV9yZXN0b3JlX2NvbnRleHQoc3RydWN0IG11c2IgKm11c2IsCi0JCXN0cnVjdCBtdXNiX2NvbnRleHRfcmVnaXN0ZXJzICptdXNiX2NvbnRleHQpOwotI2Vsc2UKLSNkZWZpbmUgbXVzYl9wbGF0Zm9ybV9zYXZlX2NvbnRleHQobSwgeCkJZG8ge30gd2hpbGUgKDApCi0jZGVmaW5lIG11c2JfcGxhdGZvcm1fcmVzdG9yZV9jb250ZXh0KG0sIHgpCWRvIHt9IHdoaWxlICgwKQotI2VuZGlmCi0KLSNlbmRpZgotCi1zdGF0aWMgaW5saW5lIHZvaWQgbXVzYl9zZXRfdmJ1cyhzdHJ1Y3QgbXVzYiAqbXVzYiwgaW50IGlzX29uKQotewotCW11c2ItPmJvYXJkX3NldF92YnVzKG11c2IsIGlzX29uKTsKLX0KLQogI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX01VU0JfSERSQwogc3RhdGljIGlubGluZSBzdHJ1Y3QgbXVzYiAqZ2FkZ2V0X3RvX211c2Ioc3RydWN0IHVzYl9nYWRnZXQgKmcpCiB7CkBAIC01OTIsMjkgKzU5Miw2MyBAQAogCiBleHRlcm4gaXJxcmV0dXJuX3QgbXVzYl9pbnRlcnJ1cHQoc3RydWN0IG11c2IgKik7CiAKLWV4dGVybiB2b2lkIG11c2JfcGxhdGZvcm1fZW5hYmxlKHN0cnVjdCBtdXNiICptdXNiKTsKLWV4dGVybiB2b2lkIG11c2JfcGxhdGZvcm1fZGlzYWJsZShzdHJ1Y3QgbXVzYiAqbXVzYik7Ci0KIGV4dGVybiB2b2lkIG11c2JfaG5wX3N0b3Aoc3RydWN0IG11c2IgKm11c2IpOwogCi1leHRlcm4gaW50IG11c2JfcGxhdGZvcm1fc2V0X21vZGUoc3RydWN0IG11c2IgKm11c2IsIHU4IG11c2JfbW9kZSk7CitzdGF0aWMgaW5saW5lIHZvaWQgbXVzYl9wbGF0Zm9ybV9zZXRfdmJ1cyhzdHJ1Y3QgbXVzYiAqbXVzYiwgaW50IGlzX29uKQoreworCWlmIChtdXNiLT5vcHMtPnNldF92YnVzKQorCQltdXNiLT5vcHMtPnNldF92YnVzKG11c2IsIGlzX29uKTsKK30KIAotI2lmIGRlZmluZWQoQ09ORklHX1VTQl9UVVNCNjAxMCkgfHwgZGVmaW5lZChDT05GSUdfQkxBQ0tGSU4pIHx8IFwKLQlkZWZpbmVkKENPTkZJR19BUkNIX0RBVklOQ0lfREE4WFgpIHx8IFwKLQlkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNDMwKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKSB8fCBcCi0JZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNCkKLWV4dGVybiB2b2lkIG11c2JfcGxhdGZvcm1fdHJ5X2lkbGUoc3RydWN0IG11c2IgKm11c2IsIHVuc2lnbmVkIGxvbmcgdGltZW91dCk7Ci0jZWxzZQotI2RlZmluZSBtdXNiX3BsYXRmb3JtX3RyeV9pZGxlKHgsIHkpCQlkbyB7fSB3aGlsZSAoMCkKLSNlbmRpZgorc3RhdGljIGlubGluZSB2b2lkIG11c2JfcGxhdGZvcm1fZW5hYmxlKHN0cnVjdCBtdXNiICptdXNiKQoreworCWlmIChtdXNiLT5vcHMtPmVuYWJsZSkKKwkJbXVzYi0+b3BzLT5lbmFibGUobXVzYik7Cit9CiAKLSNpZiBkZWZpbmVkKENPTkZJR19VU0JfVFVTQjYwMTApIHx8IGRlZmluZWQoQ09ORklHX0JMQUNLRklOKQotZXh0ZXJuIGludCBtdXNiX3BsYXRmb3JtX2dldF92YnVzX3N0YXR1cyhzdHJ1Y3QgbXVzYiAqbXVzYik7Ci0jZWxzZQotI2RlZmluZSBtdXNiX3BsYXRmb3JtX2dldF92YnVzX3N0YXR1cyh4KQkwCi0jZW5kaWYKK3N0YXRpYyBpbmxpbmUgdm9pZCBtdXNiX3BsYXRmb3JtX2Rpc2FibGUoc3RydWN0IG11c2IgKm11c2IpCit7CisJaWYgKG11c2ItPm9wcy0+ZGlzYWJsZSkKKwkJbXVzYi0+b3BzLT5kaXNhYmxlKG11c2IpOworfQogCi1leHRlcm4gaW50IF9faW5pdCBtdXNiX3BsYXRmb3JtX2luaXQoc3RydWN0IG11c2IgKm11c2IsIHZvaWQgKmJvYXJkX2RhdGEpOwotZXh0ZXJuIGludCBtdXNiX3BsYXRmb3JtX2V4aXQoc3RydWN0IG11c2IgKm11c2IpOworc3RhdGljIGlubGluZSBpbnQgbXVzYl9wbGF0Zm9ybV9zZXRfbW9kZShzdHJ1Y3QgbXVzYiAqbXVzYiwgdTggbW9kZSkKK3sKKwlpZiAoIW11c2ItPm9wcy0+c2V0X21vZGUpCisJCXJldHVybiAwOworCisJcmV0dXJuIG11c2ItPm9wcy0+c2V0X21vZGUobXVzYiwgbW9kZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtdXNiX3BsYXRmb3JtX3RyeV9pZGxlKHN0cnVjdCBtdXNiICptdXNiLAorCQl1bnNpZ25lZCBsb25nIHRpbWVvdXQpCit7CisJaWYgKG11c2ItPm9wcy0+dHJ5X2lkbGUpCisJCW11c2ItPm9wcy0+dHJ5X2lkbGUobXVzYiwgdGltZW91dCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG11c2JfcGxhdGZvcm1fZ2V0X3ZidXNfc3RhdHVzKHN0cnVjdCBtdXNiICptdXNiKQoreworCWlmICghbXVzYi0+b3BzLT52YnVzX3N0YXR1cykKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gbXVzYi0+b3BzLT52YnVzX3N0YXR1cyhtdXNiKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgbXVzYl9wbGF0Zm9ybV9pbml0KHN0cnVjdCBtdXNiICptdXNiKQoreworCWlmICghbXVzYi0+b3BzLT5pbml0KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBtdXNiLT5vcHMtPmluaXQobXVzYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG11c2JfcGxhdGZvcm1fZXhpdChzdHJ1Y3QgbXVzYiAqbXVzYikKK3sKKwlpZiAoIW11c2ItPm9wcy0+ZXhpdCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gbXVzYi0+b3BzLT5leGl0KG11c2IpOworfQogCiAjZW5kaWYJLyogX19NVVNCX0NPUkVfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfZ2FkZ2V0LmMgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfZ2FkZ2V0LmMKaW5kZXggOWQ2YWRlOC4uOWIxNjJkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2dhZGdldC5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9nYWRnZXQuYwpAQCAtMTEzNiwxMyArMTEzNiwxNiBAQAogCXN0cnVjdCBtdXNiX3JlcXVlc3QJKnJlcXVlc3QgPSBOVUxMOwogCiAJcmVxdWVzdCA9IGt6YWxsb2Moc2l6ZW9mICpyZXF1ZXN0LCBnZnBfZmxhZ3MpOwotCWlmIChyZXF1ZXN0KSB7Ci0JCUlOSVRfTElTVF9IRUFEKCZyZXF1ZXN0LT5yZXF1ZXN0Lmxpc3QpOwotCQlyZXF1ZXN0LT5yZXF1ZXN0LmRtYSA9IERNQV9BRERSX0lOVkFMSUQ7Ci0JCXJlcXVlc3QtPmVwbnVtID0gbXVzYl9lcC0+Y3VycmVudF9lcG51bTsKLQkJcmVxdWVzdC0+ZXAgPSBtdXNiX2VwOworCWlmICghcmVxdWVzdCkgeworCQlEQkcoNCwgIm5vdCBlbm91Z2ggbWVtb3J5XG4iKTsKKwkJcmV0dXJuIE5VTEw7CiAJfQogCisJSU5JVF9MSVNUX0hFQUQoJnJlcXVlc3QtPnJlcXVlc3QubGlzdCk7CisJcmVxdWVzdC0+cmVxdWVzdC5kbWEgPSBETUFfQUREUl9JTlZBTElEOworCXJlcXVlc3QtPmVwbnVtID0gbXVzYl9lcC0+Y3VycmVudF9lcG51bTsKKwlyZXF1ZXN0LT5lcCA9IG11c2JfZXA7CisKIAlyZXR1cm4gJnJlcXVlc3QtPnJlcXVlc3Q7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9pby5oIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2lvLmgKaW5kZXggYjA2ZTllZi4uMDNjNmNjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2lvLmgKKysrIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2lvLmgKQEAgLTc0LDcgKzc0LDcgQEAKIAl7IF9fcmF3X3dyaXRlbChkYXRhLCBhZGRyICsgb2Zmc2V0KTsgfQogCiAKLSNpZmRlZiBDT05GSUdfVVNCX1RVU0I2MDEwCisjaWZkZWYgQ09ORklHX1VTQl9NVVNCX1RVU0I2MDEwCiAKIC8qCiAgKiBUVVNCNjAxMCBkb2Vzbid0IGFsbG93IDgtYml0IGFjY2VzczsgMTYtYml0IGFjY2VzcyBpcyB0aGUgbWluaW11bS4KQEAgLTExNCw3ICsxMTQsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIG11c2Jfd3JpdGViKHZvaWQgX19pb21lbSAqYWRkciwgdW5zaWduZWQgb2Zmc2V0LCB1OCBkYXRhKQogCXsgX19yYXdfd3JpdGViKGRhdGEsIGFkZHIgKyBvZmZzZXQpOyB9CiAKLSNlbmRpZgkvKiBDT05GSUdfVVNCX1RVU0I2MDEwICovCisjZW5kaWYJLyogQ09ORklHX1VTQl9NVVNCX1RVU0I2MDEwICovCiAKICNlbHNlCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9yZWdzLmggYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfcmVncy5oCmluZGV4IDVhNzI3YzUuLjgyNDEwNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9yZWdzLmgKKysrIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX3JlZ3MuaApAQCAtMjM0LDcgKzIzNCw3IEBACiAjZGVmaW5lIE1VU0JfVEVTVE1PREUJCTB4MEYJLyogOCBiaXQgKi8KIAogLyogR2V0IG9mZnNldCBmb3IgYSBnaXZlbiBGSUZPIGZyb20gbXVzYi0+bXJlZ3MgKi8KLSNpZmRlZglDT05GSUdfVVNCX1RVU0I2MDEwCisjaWZkZWYJQ09ORklHX1VTQl9NVVNCX1RVU0I2MDEwCiAjZGVmaW5lIE1VU0JfRklGT19PRkZTRVQoZXBudW0pCSgweDIwMCArICgoZXBudW0pICogMHgyMCkpCiAjZWxzZQogI2RlZmluZSBNVVNCX0ZJRk9fT0ZGU0VUKGVwbnVtKQkoMHgyMCArICgoZXBudW0pICogNCkpCkBAIC0yOTUsNyArMjk1LDcgQEAKICNkZWZpbmUgTVVTQl9GTEFUX09GRlNFVChfZXBudW0sIF9vZmZzZXQpCVwKIAkoMHgxMDAgKyAoMHgxMCooX2VwbnVtKSkgKyAoX29mZnNldCkpCiAKLSNpZmRlZiBDT05GSUdfVVNCX1RVU0I2MDEwCisjaWZkZWYgQ09ORklHX1VTQl9NVVNCX1RVU0I2MDEwCiAvKiBUVVNCNjAxMCBFUDAgY29uZmlndXJhdGlvbiByZWdpc3RlciBpcyBzcGVjaWFsICovCiAjZGVmaW5lIE1VU0JfVFVTQl9PRkZTRVQoX2VwbnVtLCBfb2Zmc2V0KQlcCiAJKDB4MTAgKyBfb2Zmc2V0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX3ZpcnRodWIuYyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl92aXJ0aHViLmMKaW5kZXggNDMyMzNjMy4uYjQ2ZDE4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX3ZpcnRodWIuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfdmlydGh1Yi5jCkBAIC0yNzYsNyArMjc2LDcgQEAKIAkJCWJyZWFrOwogCQljYXNlIFVTQl9QT1JUX0ZFQVRfUE9XRVI6CiAJCQlpZiAoIShpc19vdGdfZW5hYmxlZChtdXNiKSAmJiBoY2QtPnNlbGYuaXNfYl9ob3N0KSkKLQkJCQltdXNiX3NldF92YnVzKG11c2IsIDApOworCQkJCW11c2JfcGxhdGZvcm1fc2V0X3ZidXMobXVzYiwgMCk7CiAJCQlicmVhazsKIAkJY2FzZSBVU0JfUE9SVF9GRUFUX0NfQ09OTkVDVElPTjoKIAkJY2FzZSBVU0JfUE9SVF9GRUFUX0NfRU5BQkxFOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiaHNkbWEuYyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYmhzZG1hLmMKaW5kZXggNTYzMTE0ZC4uMDE0NGEyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiaHNkbWEuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2Joc2RtYS5jCkBAIC0zNzcsNyArMzc3LDcgQEAKIAlzdHJ1Y3QgbXVzYl9kbWFfY29udHJvbGxlciAqY29udHJvbGxlcjsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBtdXNiLT5jb250cm9sbGVyOwogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKLQlpbnQgaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAxKTsKKwlpbnQgaXJxID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUocGRldiwgImRtYSIpOwogCiAJaWYgKGlycSA9PSAwKSB7CiAJCWRldl9lcnIoZGV2LCAiTm8gRE1BIGludGVycnVwdCBsaW5lIVxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL29tYXAyNDMwLmMgYi9kcml2ZXJzL3VzYi9tdXNiL29tYXAyNDMwLmMKaW5kZXggZWQ2MThiZC4uYTNmMTIzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9vbWFwMjQzMC5jCisrKyBiL2RyaXZlcnMvdXNiL211c2Ivb21hcDI0MzAuYwpAQCAtMzEsMTAgKzMxLDE4IEBACiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KIAogI2luY2x1ZGUgIm11c2JfY29yZS5oIgogI2luY2x1ZGUgIm9tYXAyNDMwLmgiCiAKK3N0cnVjdCBvbWFwMjQzMF9nbHVlIHsKKwlzdHJ1Y3QgZGV2aWNlCQkqZGV2OworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJKm11c2I7CisJc3RydWN0IGNsawkJKmNsazsKK307CisjZGVmaW5lIGdsdWVfdG9fbXVzYihnKQkJcGxhdGZvcm1fZ2V0X2RydmRhdGEoZy0+bXVzYikKIAogc3RhdGljIHN0cnVjdCB0aW1lcl9saXN0IG11c2JfaWRsZV90aW1lcjsKIApAQCAtNDksMTIgKzU3LDggQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZtdXNiLT5sb2NrLCBmbGFncyk7CiAKLQlkZXZjdGwgPSBtdXNiX3JlYWRiKG11c2ItPm1yZWdzLCBNVVNCX0RFVkNUTCk7Ci0KIAlzd2l0Y2ggKG11c2ItPnhjZWl2LT5zdGF0ZSkgewogCWNhc2UgT1RHX1NUQVRFX0FfV0FJVF9CQ09OOgotCQlkZXZjdGwgJj0gfk1VU0JfREVWQ1RMX1NFU1NJT047Ci0JCW11c2Jfd3JpdGViKG11c2ItPm1yZWdzLCBNVVNCX0RFVkNUTCwgZGV2Y3RsKTsKIAogCQlkZXZjdGwgPSBtdXNiX3JlYWRiKG11c2ItPm1yZWdzLCBNVVNCX0RFVkNUTCk7CiAJCWlmIChkZXZjdGwgJiBNVVNCX0RFVkNUTF9CREVWSUNFKSB7CkBAIC05OCw3ICsxMDIsNyBAQAogfQogCiAKLXZvaWQgbXVzYl9wbGF0Zm9ybV90cnlfaWRsZShzdHJ1Y3QgbXVzYiAqbXVzYiwgdW5zaWduZWQgbG9uZyB0aW1lb3V0KQorc3RhdGljIHZvaWQgb21hcDI0MzBfbXVzYl90cnlfaWRsZShzdHJ1Y3QgbXVzYiAqbXVzYiwgdW5zaWduZWQgbG9uZyB0aW1lb3V0KQogewogCXVuc2lnbmVkIGxvbmcJCWRlZmF1bHRfdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDMpOwogCXN0YXRpYyB1bnNpZ25lZCBsb25nCWxhc3RfdGltZXI7CkBAIC0xMzEsMTUgKzEzNSwxMSBAQAogCW1vZF90aW1lcigmbXVzYl9pZGxlX3RpbWVyLCB0aW1lb3V0KTsKIH0KIAotdm9pZCBtdXNiX3BsYXRmb3JtX2VuYWJsZShzdHJ1Y3QgbXVzYiAqbXVzYikKLXsKLX0KLXZvaWQgbXVzYl9wbGF0Zm9ybV9kaXNhYmxlKHN0cnVjdCBtdXNiICptdXNiKQotewotfQotc3RhdGljIHZvaWQgb21hcF9zZXRfdmJ1cyhzdHJ1Y3QgbXVzYiAqbXVzYiwgaW50IGlzX29uKQorc3RhdGljIHZvaWQgb21hcDI0MzBfbXVzYl9zZXRfdmJ1cyhzdHJ1Y3QgbXVzYiAqbXVzYiwgaW50IGlzX29uKQogewogCXU4CQlkZXZjdGw7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMTAwMCk7CisJaW50IHJldCA9IDE7CiAJLyogSERSQyBjb250cm9scyBDUEVOLCBidXQgYmV3YXJlIGN1cnJlbnQgc3VyZ2VzIGR1cmluZyBkZXZpY2UKIAkgKiBjb25uZWN0LiAgVGhleSBjYW4gdHJpZ2dlciB0cmFuc2llbnQgb3ZlcmN1cnJlbnQgY29uZGl0aW9ucwogCSAqIHRoYXQgbXVzdCBiZSBpZ25vcmVkLgpAQCAtMTQ4LDEyICsxNDgsMzUgQEAKIAlkZXZjdGwgPSBtdXNiX3JlYWRiKG11c2ItPm1yZWdzLCBNVVNCX0RFVkNUTCk7CiAKIAlpZiAoaXNfb24pIHsKLQkJbXVzYi0+aXNfYWN0aXZlID0gMTsKLQkJbXVzYi0+eGNlaXYtPmRlZmF1bHRfYSA9IDE7Ci0JCW11c2ItPnhjZWl2LT5zdGF0ZSA9IE9UR19TVEFURV9BX1dBSVRfVlJJU0U7Ci0JCWRldmN0bCB8PSBNVVNCX0RFVkNUTF9TRVNTSU9OOworCQlpZiAobXVzYi0+eGNlaXYtPnN0YXRlID09IE9UR19TVEFURV9BX0lETEUpIHsKKwkJCS8qIHN0YXJ0IHRoZSBzZXNzaW9uICovCisJCQlkZXZjdGwgfD0gTVVTQl9ERVZDVExfU0VTU0lPTjsKKwkJCW11c2Jfd3JpdGViKG11c2ItPm1yZWdzLCBNVVNCX0RFVkNUTCwgZGV2Y3RsKTsKKwkJCS8qCisJCQkgKiBXYWl0IGZvciB0aGUgbXVzYiB0byBzZXQgYXMgQSBkZXZpY2UgdG8gZW5hYmxlIHRoZQorCQkJICogVkJVUworCQkJICovCisJCQl3aGlsZSAobXVzYl9yZWFkYihtdXNiLT5tcmVncywgTVVTQl9ERVZDVEwpICYgMHg4MCkgewogCi0JCU1VU0JfSFNUX01PREUobXVzYik7CisJCQkJY3B1X3JlbGF4KCk7CisKKwkJCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgeworCQkJCQlkZXZfZXJyKG11c2ItPmNvbnRyb2xsZXIsCisJCQkJCSJjb25maWd1cmVkIGFzIEEgZGV2aWNlIHRpbWVvdXQiKTsKKwkJCQkJcmV0ID0gLUVJTlZBTDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCisJCQlpZiAocmV0ICYmIG11c2ItPnhjZWl2LT5zZXRfdmJ1cykKKwkJCQlvdGdfc2V0X3ZidXMobXVzYi0+eGNlaXYsIDEpOworCQl9IGVsc2UgeworCQkJbXVzYi0+aXNfYWN0aXZlID0gMTsKKwkJCW11c2ItPnhjZWl2LT5kZWZhdWx0X2EgPSAxOworCQkJbXVzYi0+eGNlaXYtPnN0YXRlID0gT1RHX1NUQVRFX0FfV0FJVF9WUklTRTsKKwkJCWRldmN0bCB8PSBNVVNCX0RFVkNUTF9TRVNTSU9OOworCQkJTVVTQl9IU1RfTU9ERShtdXNiKTsKKwkJfQogCX0gZWxzZSB7CiAJCW11c2ItPmlzX2FjdGl2ZSA9IDA7CiAKQEAgLTE3NSw5ICsxOTgsNyBAQAogCQltdXNiX3JlYWRiKG11c2ItPm1yZWdzLCBNVVNCX0RFVkNUTCkpOwogfQogCi1zdGF0aWMgaW50IG11c2JfcGxhdGZvcm1fcmVzdW1lKHN0cnVjdCBtdXNiICptdXNiKTsKLQotaW50IG11c2JfcGxhdGZvcm1fc2V0X21vZGUoc3RydWN0IG11c2IgKm11c2IsIHU4IG11c2JfbW9kZSkKK3N0YXRpYyBpbnQgb21hcDI0MzBfbXVzYl9zZXRfbW9kZShzdHJ1Y3QgbXVzYiAqbXVzYiwgdTggbXVzYl9tb2RlKQogewogCXU4CWRldmN0bCA9IG11c2JfcmVhZGIobXVzYi0+bXJlZ3MsIE1VU0JfREVWQ1RMKTsKIApAQCAtMTg3LDEwICsyMDgsOTQgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IF9faW5pdCBtdXNiX3BsYXRmb3JtX2luaXQoc3RydWN0IG11c2IgKm11c2IsIHZvaWQgKmJvYXJkX2RhdGEpCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcDI0MzBfbG93X2xldmVsX2V4aXQoc3RydWN0IG11c2IgKm11c2IpCiB7CiAJdTMyIGw7Ci0Jc3RydWN0IG9tYXBfbXVzYl9ib2FyZF9kYXRhICpkYXRhID0gYm9hcmRfZGF0YTsKKworCS8qIGluIGFueSByb2xlICovCisJbCA9IG11c2JfcmVhZGwobXVzYi0+bXJlZ3MsIE9UR19GT1JDRVNUREJZKTsKKwlsIHw9IEVOQUJMRUZPUkNFOwkvKiBlbmFibGUgTVNUQU5EQlkgKi8KKwltdXNiX3dyaXRlbChtdXNiLT5tcmVncywgT1RHX0ZPUkNFU1REQlksIGwpOworCisJbCA9IG11c2JfcmVhZGwobXVzYi0+bXJlZ3MsIE9UR19TWVNDT05GSUcpOworCWwgfD0gRU5BQkxFV0FLRVVQOwkvKiBlbmFibGUgd2FrZXVwICovCisJbXVzYl93cml0ZWwobXVzYi0+bXJlZ3MsIE9UR19TWVNDT05GSUcsIGwpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcDI0MzBfbG93X2xldmVsX2luaXQoc3RydWN0IG11c2IgKm11c2IpCit7CisJdTMyIGw7CisKKwlsID0gbXVzYl9yZWFkbChtdXNiLT5tcmVncywgT1RHX1NZU0NPTkZJRyk7CisJbCAmPSB+RU5BQkxFV0FLRVVQOwkvKiBkaXNhYmxlIHdha2V1cCAqLworCW11c2Jfd3JpdGVsKG11c2ItPm1yZWdzLCBPVEdfU1lTQ09ORklHLCBsKTsKKworCWwgPSBtdXNiX3JlYWRsKG11c2ItPm1yZWdzLCBPVEdfRk9SQ0VTVERCWSk7CisJbCAmPSB+RU5BQkxFRk9SQ0U7CS8qIGRpc2FibGUgTVNUQU5EQlkgKi8KKwltdXNiX3dyaXRlbChtdXNiLT5tcmVncywgT1RHX0ZPUkNFU1REQlksIGwpOworfQorCisvKiBibG9ja2luZyBub3RpZmllciBzdXBwb3J0ICovCitzdGF0aWMgaW50IG11c2Jfb3RnX25vdGlmaWNhdGlvbnMoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwKKwkJdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqdW51c2VkKQoreworCXN0cnVjdCBtdXNiCSptdXNiID0gY29udGFpbmVyX29mKG5iLCBzdHJ1Y3QgbXVzYiwgbmIpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IG11c2ItPmNvbnRyb2xsZXI7CisJc3RydWN0IG11c2JfaGRyY19wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3Qgb21hcF9tdXNiX2JvYXJkX2RhdGEgKmRhdGEgPSBwZGF0YS0+Ym9hcmRfZGF0YTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFVTQl9FVkVOVF9JRDoKKwkJREJHKDQsICJJRCBHTkRcbiIpOworCisJCWlmIChpc19vdGdfZW5hYmxlZChtdXNiKSkgeworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX01VU0JfSERSQworCQkJaWYgKG11c2ItPmdhZGdldF9kcml2ZXIpIHsKKwkJCQlvdGdfaW5pdChtdXNiLT54Y2Vpdik7CisKKwkJCQlpZiAoZGF0YS0+aW50ZXJmYWNlX3R5cGUgPT0KKwkJCQkJCU1VU0JfSU5URVJGQUNFX1VUTUkpCisJCQkJCW9tYXAyNDMwX211c2Jfc2V0X3ZidXMobXVzYiwgMSk7CisKKwkJCX0KKyNlbmRpZgorCQl9IGVsc2UgeworCQkJb3RnX2luaXQobXVzYi0+eGNlaXYpOworCQkJaWYgKGRhdGEtPmludGVyZmFjZV90eXBlID09CisJCQkJCU1VU0JfSU5URVJGQUNFX1VUTUkpCisJCQkJb21hcDI0MzBfbXVzYl9zZXRfdmJ1cyhtdXNiLCAxKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgVVNCX0VWRU5UX1ZCVVM6CisJCURCRyg0LCAiVkJVUyBDb25uZWN0XG4iKTsKKworCQlvdGdfaW5pdChtdXNiLT54Y2Vpdik7CisJCWJyZWFrOworCisJY2FzZSBVU0JfRVZFTlRfTk9ORToKKwkJREJHKDQsICJWQlVTIERpc2Nvbm5lY3RcbiIpOworCisJCWlmIChkYXRhLT5pbnRlcmZhY2VfdHlwZSA9PSBNVVNCX0lOVEVSRkFDRV9VVE1JKSB7CisJCQlpZiAobXVzYi0+eGNlaXYtPnNldF92YnVzKQorCQkJCW90Z19zZXRfdmJ1cyhtdXNiLT54Y2VpdiwgMCk7CisJCX0KKwkJb3RnX3NodXRkb3duKG11c2ItPnhjZWl2KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJREJHKDQsICJJRCBmbG9hdFxuIik7CisJCXJldHVybiBOT1RJRllfRE9ORTsKKwl9CisKKwlyZXR1cm4gTk9USUZZX09LOworfQorCitzdGF0aWMgaW50IG9tYXAyNDMwX211c2JfaW5pdChzdHJ1Y3QgbXVzYiAqbXVzYikKK3sKKwl1MzIgbCwgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBtdXNiLT5jb250cm9sbGVyOworCXN0cnVjdCBtdXNiX2hkcmNfcGxhdGZvcm1fZGF0YSAqcGxhdCA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3Qgb21hcF9tdXNiX2JvYXJkX2RhdGEgKmRhdGEgPSBwbGF0LT5ib2FyZF9kYXRhOwogCiAJLyogV2UgcmVxdWlyZSBzb21lIGtpbmQgb2YgZXh0ZXJuYWwgdHJhbnNjZWl2ZXIsIGhvb2tlZAogCSAqIHVwIHRocm91Z2ggVUxQSS4gIFRXTDQwMzAtZmFtaWx5IFBNSUNzIGluY2x1ZGUgb25lLApAQCAtMjAyLDcgKzMwNyw3IEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCW11c2JfcGxhdGZvcm1fcmVzdW1lKG11c2IpOworCW9tYXAyNDMwX2xvd19sZXZlbF9pbml0KG11c2IpOwogCiAJbCA9IG11c2JfcmVhZGwobXVzYi0+bXJlZ3MsIE9UR19TWVNDT05GSUcpOwogCWwgJj0gfkVOQUJMRVdBS0VVUDsJLyogZGlzYWJsZSB3YWtldXAgKi8KQEAgLTIzOSw4NyArMzQ0LDIxNCBAQAogCQkJbXVzYl9yZWFkbChtdXNiLT5tcmVncywgT1RHX0lOVEVSRlNFTCksCiAJCQltdXNiX3JlYWRsKG11c2ItPm1yZWdzLCBPVEdfU0lNRU5BQkxFKSk7CiAKLQlpZiAoaXNfaG9zdF9lbmFibGVkKG11c2IpKQotCQltdXNiLT5ib2FyZF9zZXRfdmJ1cyA9IG9tYXBfc2V0X3ZidXM7CisJbXVzYi0+bmIubm90aWZpZXJfY2FsbCA9IG11c2Jfb3RnX25vdGlmaWNhdGlvbnM7CisJc3RhdHVzID0gb3RnX3JlZ2lzdGVyX25vdGlmaWVyKG11c2ItPnhjZWl2LCAmbXVzYi0+bmIpOworCisJaWYgKHN0YXR1cykKKwkJREJHKDEsICJub3RpZmljYXRpb24gcmVnaXN0ZXIgZmFpbGVkXG4iKTsKKworCS8qIGNoZWNrIHdoZXRoZXIgY2FibGUgaXMgYWxyZWFkeSBjb25uZWN0ZWQgKi8KKwlpZiAobXVzYi0+eGNlaXYtPnN0YXRlID09T1RHX1NUQVRFX0JfSURMRSkKKwkJbXVzYl9vdGdfbm90aWZpY2F0aW9ucygmbXVzYi0+bmIsIDEsCisJCQkJCW11c2ItPnhjZWl2LT5nYWRnZXQpOwogCiAJc2V0dXBfdGltZXIoJm11c2JfaWRsZV90aW1lciwgbXVzYl9kb19pZGxlLCAodW5zaWduZWQgbG9uZykgbXVzYik7CiAKIAlyZXR1cm4gMDsKIH0KIAotI2lmZGVmIENPTkZJR19QTQotdm9pZCBtdXNiX3BsYXRmb3JtX3NhdmVfY29udGV4dChzdHJ1Y3QgbXVzYiAqbXVzYiwKLQkJc3RydWN0IG11c2JfY29udGV4dF9yZWdpc3RlcnMgKm11c2JfY29udGV4dCkKK3N0YXRpYyBpbnQgb21hcDI0MzBfbXVzYl9leGl0KHN0cnVjdCBtdXNiICptdXNiKQogewotCW11c2JfY29udGV4dC0+b3RnX3N5c2NvbmZpZyA9IG11c2JfcmVhZGwobXVzYi0+bXJlZ3MsIE9UR19TWVNDT05GSUcpOwotCW11c2JfY29udGV4dC0+b3RnX2ZvcmNlc3RhbmRieSA9IG11c2JfcmVhZGwobXVzYi0+bXJlZ3MsIE9UR19GT1JDRVNUREJZKTsKLX0KIAotdm9pZCBtdXNiX3BsYXRmb3JtX3Jlc3RvcmVfY29udGV4dChzdHJ1Y3QgbXVzYiAqbXVzYiwKLQkJc3RydWN0IG11c2JfY29udGV4dF9yZWdpc3RlcnMgKm11c2JfY29udGV4dCkKLXsKLQltdXNiX3dyaXRlbChtdXNiLT5tcmVncywgT1RHX1NZU0NPTkZJRywgbXVzYl9jb250ZXh0LT5vdGdfc3lzY29uZmlnKTsKLQltdXNiX3dyaXRlbChtdXNiLT5tcmVncywgT1RHX0ZPUkNFU1REQlksIG11c2JfY29udGV4dC0+b3RnX2ZvcmNlc3RhbmRieSk7Ci19Ci0jZW5kaWYKLQotc3RhdGljIGludCBtdXNiX3BsYXRmb3JtX3N1c3BlbmQoc3RydWN0IG11c2IgKm11c2IpCi17Ci0JdTMyIGw7Ci0KLQlpZiAoIW11c2ItPmNsb2NrKQotCQlyZXR1cm4gMDsKLQotCS8qIGluIGFueSByb2xlICovCi0JbCA9IG11c2JfcmVhZGwobXVzYi0+bXJlZ3MsIE9UR19GT1JDRVNUREJZKTsKLQlsIHw9IEVOQUJMRUZPUkNFOwkvKiBlbmFibGUgTVNUQU5EQlkgKi8KLQltdXNiX3dyaXRlbChtdXNiLT5tcmVncywgT1RHX0ZPUkNFU1REQlksIGwpOwotCi0JbCA9IG11c2JfcmVhZGwobXVzYi0+bXJlZ3MsIE9UR19TWVNDT05GSUcpOwotCWwgfD0gRU5BQkxFV0FLRVVQOwkvKiBlbmFibGUgd2FrZXVwICovCi0JbXVzYl93cml0ZWwobXVzYi0+bXJlZ3MsIE9UR19TWVNDT05GSUcsIGwpOwotCi0Jb3RnX3NldF9zdXNwZW5kKG11c2ItPnhjZWl2LCAxKTsKLQotCWlmIChtdXNiLT5zZXRfY2xvY2spCi0JCW11c2ItPnNldF9jbG9jayhtdXNiLT5jbG9jaywgMCk7Ci0JZWxzZQotCQljbGtfZGlzYWJsZShtdXNiLT5jbG9jayk7CisJb21hcDI0MzBfbG93X2xldmVsX2V4aXQobXVzYik7CisJb3RnX3B1dF90cmFuc2NlaXZlcihtdXNiLT54Y2Vpdik7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtdXNiX3BsYXRmb3JtX3Jlc3VtZShzdHJ1Y3QgbXVzYiAqbXVzYikKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXVzYl9wbGF0Zm9ybV9vcHMgb21hcDI0MzBfb3BzID0geworCS5pbml0CQk9IG9tYXAyNDMwX211c2JfaW5pdCwKKwkuZXhpdAkJPSBvbWFwMjQzMF9tdXNiX2V4aXQsCisKKwkuc2V0X21vZGUJPSBvbWFwMjQzMF9tdXNiX3NldF9tb2RlLAorCS50cnlfaWRsZQk9IG9tYXAyNDMwX211c2JfdHJ5X2lkbGUsCisKKwkuc2V0X3ZidXMJPSBvbWFwMjQzMF9tdXNiX3NldF92YnVzLAorfTsKKworc3RhdGljIHU2NCBvbWFwMjQzMF9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKKworc3RhdGljIGludCBfX2luaXQgb21hcDI0MzBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQl1MzIgbDsKKwlzdHJ1Y3QgbXVzYl9oZHJjX3BsYXRmb3JtX2RhdGEJKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZQkJKm11c2I7CisJc3RydWN0IG9tYXAyNDMwX2dsdWUJCSpnbHVlOworCXN0cnVjdCBjbGsJCQkqY2xrOwogCi0JaWYgKCFtdXNiLT5jbG9jaykKLQkJcmV0dXJuIDA7CisJaW50CQkJCXJldCA9IC1FTk9NRU07CiAKKwlnbHVlID0ga3phbGxvYyhzaXplb2YoKmdsdWUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWdsdWUpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIGdsdWUgY29udGV4dFxuIik7CisJCWdvdG8gZXJyMDsKKwl9CisKKwltdXNiID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJtdXNiLWhkcmMiLCAtMSk7CisJaWYgKCFtdXNiKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBtdXNiIGRldmljZVxuIik7CisJCWdvdG8gZXJyMTsKKwl9CisKKwljbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJpY2siKTsKKwlpZiAoSVNfRVJSKGNsaykpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCBjbG9ja1xuIik7CisJCXJldCA9IFBUUl9FUlIoY2xrKTsKKwkJZ290byBlcnIyOworCX0KKworCXJldCA9IGNsa19lbmFibGUoY2xrKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBlbmFibGUgY2xvY2tcbiIpOworCQlnb3RvIGVycjM7CisJfQorCisJbXVzYi0+ZGV2LnBhcmVudAkJPSAmcGRldi0+ZGV2OworCW11c2ItPmRldi5kbWFfbWFzawkJPSAmb21hcDI0MzBfZG1hbWFzazsKKwltdXNiLT5kZXYuY29oZXJlbnRfZG1hX21hc2sJPSBvbWFwMjQzMF9kbWFtYXNrOworCisJZ2x1ZS0+ZGV2CQkJPSAmcGRldi0+ZGV2OworCWdsdWUtPm11c2IJCQk9IG11c2I7CisJZ2x1ZS0+Y2xrCQkJPSBjbGs7CisKKwlwZGF0YS0+cGxhdGZvcm1fb3BzCQk9ICZvbWFwMjQzMF9vcHM7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBnbHVlKTsKKworCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGRfcmVzb3VyY2VzKG11c2IsIHBkZXYtPnJlc291cmNlLAorCQkJcGRldi0+bnVtX3Jlc291cmNlcyk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gYWRkIHJlc291cmNlc1xuIik7CisJCWdvdG8gZXJyNDsKKwl9CisKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX2RhdGEobXVzYiwgcGRhdGEsIHNpemVvZigqcGRhdGEpKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBhZGQgcGxhdGZvcm1fZGF0YVxuIik7CisJCWdvdG8gZXJyNDsKKwl9CisKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKG11c2IpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIG11c2IgZGV2aWNlXG4iKTsKKwkJZ290byBlcnI0OworCX0KKworCXJldHVybiAwOworCitlcnI0OgorCWNsa19kaXNhYmxlKGNsayk7CisKK2VycjM6CisJY2xrX3B1dChjbGspOworCitlcnIyOgorCXBsYXRmb3JtX2RldmljZV9wdXQobXVzYik7CisKK2VycjE6CisJa2ZyZWUoZ2x1ZSk7CisKK2VycjA6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2V4aXQgb21hcDI0MzBfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG9tYXAyNDMwX2dsdWUJCSpnbHVlID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlwbGF0Zm9ybV9kZXZpY2VfZGVsKGdsdWUtPm11c2IpOworCXBsYXRmb3JtX2RldmljZV9wdXQoZ2x1ZS0+bXVzYik7CisJY2xrX2Rpc2FibGUoZ2x1ZS0+Y2xrKTsKKwljbGtfcHV0KGdsdWUtPmNsayk7CisJa2ZyZWUoZ2x1ZSk7CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIHZvaWQgb21hcDI0MzBfc2F2ZV9jb250ZXh0KHN0cnVjdCBtdXNiICptdXNiKQoreworCW11c2ItPmNvbnRleHQub3RnX3N5c2NvbmZpZyA9IG11c2JfcmVhZGwobXVzYi0+bXJlZ3MsIE9UR19TWVNDT05GSUcpOworCW11c2ItPmNvbnRleHQub3RnX2ZvcmNlc3RhbmRieSA9IG11c2JfcmVhZGwobXVzYi0+bXJlZ3MsIE9UR19GT1JDRVNUREJZKTsKK30KKworc3RhdGljIHZvaWQgb21hcDI0MzBfcmVzdG9yZV9jb250ZXh0KHN0cnVjdCBtdXNiICptdXNiKQoreworCW11c2Jfd3JpdGVsKG11c2ItPm1yZWdzLCBPVEdfU1lTQ09ORklHLCBtdXNiLT5jb250ZXh0Lm90Z19zeXNjb25maWcpOworCW11c2Jfd3JpdGVsKG11c2ItPm1yZWdzLCBPVEdfRk9SQ0VTVERCWSwgbXVzYi0+Y29udGV4dC5vdGdfZm9yY2VzdGFuZGJ5KTsKK30KKworc3RhdGljIGludCBvbWFwMjQzMF9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgb21hcDI0MzBfZ2x1ZQkJKmdsdWUgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgbXVzYgkJCSptdXNiID0gZ2x1ZV90b19tdXNiKGdsdWUpOworCisJb21hcDI0MzBfbG93X2xldmVsX2V4aXQobXVzYik7CisJb3RnX3NldF9zdXNwZW5kKG11c2ItPnhjZWl2LCAxKTsKKwlvbWFwMjQzMF9zYXZlX2NvbnRleHQobXVzYik7CisJY2xrX2Rpc2FibGUoZ2x1ZS0+Y2xrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9tYXAyNDMwX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG9tYXAyNDMwX2dsdWUJCSpnbHVlID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IG11c2IJCQkqbXVzYiA9IGdsdWVfdG9fbXVzYihnbHVlKTsKKwlpbnQJCQkJcmV0OworCisJcmV0ID0gY2xrX2VuYWJsZShnbHVlLT5jbGspOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJmYWxlZCB0byBlbmFibGUgY2xvY2tcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCW9tYXAyNDMwX2xvd19sZXZlbF9pbml0KG11c2IpOworCW9tYXAyNDMwX3Jlc3RvcmVfY29udGV4dChtdXNiKTsKIAlvdGdfc2V0X3N1c3BlbmQobXVzYi0+eGNlaXYsIDApOwogCi0JaWYgKG11c2ItPnNldF9jbG9jaykKLQkJbXVzYi0+c2V0X2Nsb2NrKG11c2ItPmNsb2NrLCAxKTsKLQllbHNlCi0JCWNsa19lbmFibGUobXVzYi0+Y2xvY2spOwotCi0JbCA9IG11c2JfcmVhZGwobXVzYi0+bXJlZ3MsIE9UR19TWVNDT05GSUcpOwotCWwgJj0gfkVOQUJMRVdBS0VVUDsJLyogZGlzYWJsZSB3YWtldXAgKi8KLQltdXNiX3dyaXRlbChtdXNiLT5tcmVncywgT1RHX1NZU0NPTkZJRywgbCk7Ci0KLQlsID0gbXVzYl9yZWFkbChtdXNiLT5tcmVncywgT1RHX0ZPUkNFU1REQlkpOwotCWwgJj0gfkVOQUJMRUZPUkNFOwkvKiBkaXNhYmxlIE1TVEFOREJZICovCi0JbXVzYl93cml0ZWwobXVzYi0+bXJlZ3MsIE9UR19GT1JDRVNUREJZLCBsKTsKLQogCXJldHVybiAwOwogfQogCitzdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgb21hcDI0MzBfcG1fb3BzID0geworCS5zdXNwZW5kCT0gb21hcDI0MzBfc3VzcGVuZCwKKwkucmVzdW1lCQk9IG9tYXAyNDMwX3Jlc3VtZSwKK307CiAKLWludCBtdXNiX3BsYXRmb3JtX2V4aXQoc3RydWN0IG11c2IgKm11c2IpCisjZGVmaW5lIERFVl9QTV9PUFMJKCZvbWFwMjQzMF9wbV9vcHMpCisjZWxzZQorI2RlZmluZSBERVZfUE1fT1BTCU5VTEwKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBvbWFwMjQzMF9kcml2ZXIgPSB7CisJLnJlbW92ZQkJPSBfX2V4aXRfcChvbWFwMjQzMF9yZW1vdmUpLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJtdXNiLW9tYXAyNDMwIiwKKwkJLnBtCT0gREVWX1BNX09QUywKKwl9LAorfTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJPTUFQMlBMVVMgTVVTQiBHbHVlIExheWVyIik7CitNT0RVTEVfQVVUSE9SKCJGZWxpcGUgQmFsYmkgPGJhbGJpQHRpLmNvbT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKKworc3RhdGljIGludCBfX2luaXQgb21hcDI0MzBfaW5pdCh2b2lkKQogewotCi0JbXVzYl9wbGF0Zm9ybV9zdXNwZW5kKG11c2IpOwotCi0Jb3RnX3B1dF90cmFuc2NlaXZlcihtdXNiLT54Y2Vpdik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9wcm9iZSgmb21hcDI0MzBfZHJpdmVyLCBvbWFwMjQzMF9wcm9iZSk7CiB9CitzdWJzeXNfaW5pdGNhbGwob21hcDI0MzBfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBvbWFwMjQzMF9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm9tYXAyNDMwX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChvbWFwMjQzMF9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvdHVzYjYwMTAuYyBiL2RyaXZlcnMvdXNiL211c2IvdHVzYjYwMTAuYwppbmRleCBiZGU0MGVmLi4yYmEzYjA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL3R1c2I2MDEwLmMKKysrIGIvZHJpdmVycy91c2IvbXVzYi90dXNiNjAxMC5jCkBAIC0yMSwxMCArMjEsMTYgQEAKICNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogCiAjaW5jbHVkZSAibXVzYl9jb3JlLmgiCiAKLXN0YXRpYyB2b2lkIHR1c2Jfc291cmNlX3Bvd2VyKHN0cnVjdCBtdXNiICptdXNiLCBpbnQgaXNfb24pOworc3RydWN0IHR1c2I2MDEwX2dsdWUgeworCXN0cnVjdCBkZXZpY2UJCSpkZXY7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZQkqbXVzYjsKK307CisKK3N0YXRpYyB2b2lkIHR1c2JfbXVzYl9zZXRfdmJ1cyhzdHJ1Y3QgbXVzYiAqbXVzYiwgaW50IGlzX29uKTsKIAogI2RlZmluZSBUVVNCX1JFVl9NQUpPUihyZWdfdmFsKQkJKChyZWdfdmFsID4+IDQpICYgMHhmKQogI2RlZmluZSBUVVNCX1JFVl9NSU5PUihyZWdfdmFsKQkJKHJlZ192YWwgJiAweGYpCkBAIC01MCw3ICs1Niw3IEBACiAJcmV0dXJuIHJldjsKIH0KIAotc3RhdGljIGludCBfX2luaXQgdHVzYl9wcmludF9yZXZpc2lvbihzdHJ1Y3QgbXVzYiAqbXVzYikKK3N0YXRpYyBpbnQgdHVzYl9wcmludF9yZXZpc2lvbihzdHJ1Y3QgbXVzYiAqbXVzYikKIHsKIAl2b2lkIF9faW9tZW0JKnRiYXNlID0gbXVzYi0+Y3RybF9iYXNlOwogCXU4CQlyZXY7CkBAIC0yNzUsMTcgKzI4MSw2IEBACiAJdm9pZCBfX2lvbWVtCSp0YmFzZSA9IG11c2ItPmN0cmxfYmFzZTsKIAl1MzIJCXJlZzsKIAotCS8qCi0JICogS2VlcCBjbG9jayBhY3RpdmUgd2hlbiBlbmFibGVkLiBOb3RlIHRoYXQgdGhpcyBpcyBub3QgdGllZCB0bwotCSAqIGRyYXdpbmcgVkJVUywgYXMgd2l0aCBPVEcgbUEgY2FuIGJlIGxlc3MgdGhhbiBtdXNiLT5taW5fcG93ZXIuCi0JICovCi0JaWYgKG11c2ItPnNldF9jbG9jaykgewotCQlpZiAobUEpCi0JCQltdXNiLT5zZXRfY2xvY2sobXVzYi0+Y2xvY2ssIDEpOwotCQllbHNlCi0JCQltdXNiLT5zZXRfY2xvY2sobXVzYi0+Y2xvY2ssIDApOwotCX0KLQogCS8qIHRwczY1MDMwIHNlZW1zIHRvIGNvbnN1bWUgbWF4IDEwMG1BLCB3aXRoIG1heWJlIDYwbUEgYXZhaWxhYmxlCiAJICogKG1lYXN1cmVkIG9uIG9uZSBib2FyZCkgZm9yIHRoaW5ncyBvdGhlciB0aGFuIHRwcyBhbmQgdHVzYi4KIAkgKgpAQCAtMzQ4LDcgKzM0Myw3IEBACiAgKiBVU0IgbGluayBpcyBub3Qgc3VzcGVuZGVkIC4uLiBhbmQgdGVsbHMgdXMgdGhlIHJlbGV2YW50IHdha2V1cAogICogZXZlbnRzLiAgU1dfRU4gZm9yIHZvbHRhZ2UgaXMgaGFuZGxlZCBzZXBhcmF0ZWx5LgogICovCi12b2lkIHR1c2JfYWxsb3dfaWRsZShzdHJ1Y3QgbXVzYiAqbXVzYiwgdTMyIHdha2V1cF9lbmFibGVzKQorc3RhdGljIHZvaWQgdHVzYl9hbGxvd19pZGxlKHN0cnVjdCBtdXNiICptdXNiLCB1MzIgd2FrZXVwX2VuYWJsZXMpCiB7CiAJdm9pZCBfX2lvbWVtCSp0YmFzZSA9IG11c2ItPmN0cmxfYmFzZTsKIAl1MzIJCXJlZzsKQEAgLTM4NSw3ICszODAsNyBAQAogLyoKICAqIFVwZGF0ZXMgY2FibGUgVkJVUyBzdGF0dXMuIENhbGxlciBtdXN0IHRha2UgY2FyZSBvZiBsb2NraW5nLgogICovCi1pbnQgbXVzYl9wbGF0Zm9ybV9nZXRfdmJ1c19zdGF0dXMoc3RydWN0IG11c2IgKm11c2IpCitzdGF0aWMgaW50IHR1c2JfbXVzYl92YnVzX3N0YXR1cyhzdHJ1Y3QgbXVzYiAqbXVzYikKIHsKIAl2b2lkIF9faW9tZW0JKnRiYXNlID0gbXVzYi0+Y3RybF9iYXNlOwogCXUzMgkJb3RnX3N0YXQsIHByY21fbW5nbXQ7CkBAIC00MzEsNyArNDI2LDcgQEAKIAkJfQogCQkvKiBGQUxMVEhST1VHSCAqLwogCWNhc2UgT1RHX1NUQVRFX0FfSURMRToKLQkJdHVzYl9zb3VyY2VfcG93ZXIobXVzYiwgMCk7CisJCXR1c2JfbXVzYl9zZXRfdmJ1cyhtdXNiLCAwKTsKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9CkBAIC00NzUsNyArNDcwLDcgQEAKICAqIHdlIGRvbid0IHdhbnQgdG8gdHJlYXQgdGhhdCBmdWxsIHNwZWVkIEogYXMgYSB3YWtldXAgZXZlbnQuCiAgKiAuLi4gcGVyaXBoZXJhbHMgbXVzdCBkcmF3IG9ubHkgc3VzcGVuZCBjdXJyZW50IGFmdGVyIDEwIG1zZWMuCiAgKi8KLXZvaWQgbXVzYl9wbGF0Zm9ybV90cnlfaWRsZShzdHJ1Y3QgbXVzYiAqbXVzYiwgdW5zaWduZWQgbG9uZyB0aW1lb3V0KQorc3RhdGljIHZvaWQgdHVzYl9tdXNiX3RyeV9pZGxlKHN0cnVjdCBtdXNiICptdXNiLCB1bnNpZ25lZCBsb25nIHRpbWVvdXQpCiB7CiAJdW5zaWduZWQgbG9uZwkJZGVmYXVsdF90aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMyk7CiAJc3RhdGljIHVuc2lnbmVkIGxvbmcJbGFzdF90aW1lcjsKQEAgLTUxNSw3ICs1MTAsNyBAQAogCQkJCXwgVFVTQl9ERVZfT1RHX1RJTUVSX0VOQUJMRSkgXAogCQk6IDApCiAKLXN0YXRpYyB2b2lkIHR1c2Jfc291cmNlX3Bvd2VyKHN0cnVjdCBtdXNiICptdXNiLCBpbnQgaXNfb24pCitzdGF0aWMgdm9pZCB0dXNiX211c2Jfc2V0X3ZidXMoc3RydWN0IG11c2IgKm11c2IsIGludCBpc19vbikKIHsKIAl2b2lkIF9faW9tZW0JKnRiYXNlID0gbXVzYi0+Y3RybF9iYXNlOwogCXUzMgkJY29uZiwgcHJjbSwgdGltZXI7CkBAIC01MzEsOCArNTI2LDYgQEAKIAlkZXZjdGwgPSBtdXNiX3JlYWRiKG11c2ItPm1yZWdzLCBNVVNCX0RFVkNUTCk7CiAKIAlpZiAoaXNfb24pIHsKLQkJaWYgKG11c2ItPnNldF9jbG9jaykKLQkJCW11c2ItPnNldF9jbG9jayhtdXNiLT5jbG9jaywgMSk7CiAJCXRpbWVyID0gT1RHX1RJTUVSX01TKE9UR19USU1FX0FfV0FJVF9WUklTRSk7CiAJCW11c2ItPnhjZWl2LT5kZWZhdWx0X2EgPSAxOwogCQltdXNiLT54Y2Vpdi0+c3RhdGUgPSBPVEdfU1RBVEVfQV9XQUlUX1ZSSVNFOwpAQCAtNTcxLDggKzU2NCw2IEBACiAKIAkJZGV2Y3RsICY9IH5NVVNCX0RFVkNUTF9TRVNTSU9OOwogCQljb25mICY9IH5UVVNCX0RFVl9DT05GX1VTQl9IT1NUX01PREU7Ci0JCWlmIChtdXNiLT5zZXRfY2xvY2spCi0JCQltdXNiLT5zZXRfY2xvY2sobXVzYi0+Y2xvY2ssIDApOwogCX0KIAlwcmNtICY9IH4oVFVTQl9QUkNNX01OR01UXzE1X1NXX0VOIHwgVFVTQl9QUkNNX01OR01UXzMzX1NXX0VOKTsKIApAQCAtNTk5LDcgKzU5MCw3IEBACiAgKiBhbmQgcGVyaXBoZXJhbCBtb2RlcyBpbiBub24tT1RHIGNvbmZpZ3VyYXRpb25zIGJ5IHJlY29uZmlndXJpbmcgaGFyZHdhcmUKICAqIGFuZCB0aGVuIHNldHRpbmcgbXVzYi0+Ym9hcmRfbW9kZS4gRm9yIG5vdywgb25seSBzdXBwb3J0IE9URyBtb2RlLgogICovCi1pbnQgbXVzYl9wbGF0Zm9ybV9zZXRfbW9kZShzdHJ1Y3QgbXVzYiAqbXVzYiwgdTggbXVzYl9tb2RlKQorc3RhdGljIGludCB0dXNiX211c2Jfc2V0X21vZGUoc3RydWN0IG11c2IgKm11c2IsIHU4IG11c2JfbW9kZSkKIHsKIAl2b2lkIF9faW9tZW0JKnRiYXNlID0gbXVzYi0+Y3RybF9iYXNlOwogCXUzMgkJb3RnX3N0YXQsIHBoeV9vdGdfY3RybCwgcGh5X290Z19lbmEsIGRldl9jb25mOwpAQCAtNjc3LDcgKzY2OCw3IEBACiAJCQlkZWZhdWx0X2EgPSBpc19ob3N0X2VuYWJsZWQobXVzYik7CiAJCURCRygyLCAiRGVmYXVsdC0lY1xuIiwgZGVmYXVsdF9hID8gJ0EnIDogJ0InKTsKIAkJbXVzYi0+eGNlaXYtPmRlZmF1bHRfYSA9IGRlZmF1bHRfYTsKLQkJdHVzYl9zb3VyY2VfcG93ZXIobXVzYiwgZGVmYXVsdF9hKTsKKwkJdHVzYl9tdXNiX3NldF92YnVzKG11c2IsIGRlZmF1bHRfYSk7CiAKIAkJLyogRG9uJ3QgYWxsb3cgaWRsaW5nIGltbWVkaWF0ZWx5ICovCiAJCWlmIChkZWZhdWx0X2EpCkBAIC03MjIsNyArNzEzLDcgQEAKIAkJCXN3aXRjaCAobXVzYi0+eGNlaXYtPnN0YXRlKSB7CiAJCQljYXNlIE9UR19TVEFURV9BX0lETEU6CiAJCQkJREJHKDIsICJHb3QgU1JQLCB0dXJuaW5nIG9uIFZCVVNcbiIpOwotCQkJCW11c2Jfc2V0X3ZidXMobXVzYiwgMSk7CisJCQkJbXVzYl9wbGF0Zm9ybV9zZXRfdmJ1cyhtdXNiLCAxKTsKIAogCQkJCS8qIENPTk5FQ1QgY2FuIHdha2UgaWYgYV93YWl0X2Jjb24gaXMgc2V0ICovCiAJCQkJaWYgKG11c2ItPmFfd2FpdF9iY29uICE9IDApCkBAIC03NDgsMTEgKzczOSwxMSBAQAogCQkJCSAqLwogCQkJCWlmIChtdXNiLT52YnVzZXJyX3JldHJ5KSB7CiAJCQkJCW11c2ItPnZidXNlcnJfcmV0cnktLTsKLQkJCQkJdHVzYl9zb3VyY2VfcG93ZXIobXVzYiwgMSk7CisJCQkJCXR1c2JfbXVzYl9zZXRfdmJ1cyhtdXNiLCAxKTsKIAkJCQl9IGVsc2UgewogCQkJCQltdXNiLT52YnVzZXJyX3JldHJ5CiAJCQkJCQk9IFZCVVNFUlJfUkVUUllfQ09VTlQ7Ci0JCQkJCXR1c2Jfc291cmNlX3Bvd2VyKG11c2IsIDApOworCQkJCQl0dXNiX211c2Jfc2V0X3ZidXMobXVzYiwgMCk7CiAJCQkJfQogCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoKQEAgLTc4Niw3ICs3NzcsNyBAQAogCQkJfSBlbHNlIHsKIAkJCQkvKiBSRVZJU0lUIHJlcG9ydCBvdmVyY3VycmVudCB0byBodWI/ICovCiAJCQkJRVJSKCJ2YnVzIHRvbyBzbG93LCBkZXZjdGwgJTAyeFxuIiwgZGV2Y3RsKTsKLQkJCQl0dXNiX3NvdXJjZV9wb3dlcihtdXNiLCAwKTsKKwkJCQl0dXNiX211c2Jfc2V0X3ZidXMobXVzYiwgMCk7CiAJCQl9CiAJCQlicmVhazsKIAkJY2FzZSBPVEdfU1RBVEVfQV9XQUlUX0JDT046CkBAIC04MDcsNyArNzk4LDcgQEAKIAlyZXR1cm4gaWRsZV90aW1lb3V0OwogfQogCi1zdGF0aWMgaXJxcmV0dXJuX3QgdHVzYl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqX19oY2kpCitzdGF0aWMgaXJxcmV0dXJuX3QgdHVzYl9tdXNiX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpfX2hjaSkKIHsKIAlzdHJ1Y3QgbXVzYgkqbXVzYiA9IF9faGNpOwogCXZvaWQgX19pb21lbQkqdGJhc2UgPSBtdXNiLT5jdHJsX2Jhc2U7CkBAIC05MTEsNyArOTAyLDcgQEAKIAltdXNiX3dyaXRlbCh0YmFzZSwgVFVTQl9JTlRfU1JDX0NMRUFSLAogCQlpbnRfc3JjICYgflRVU0JfSU5UX01BU0tfUkVTRVJWRURfQklUUyk7CiAKLQltdXNiX3BsYXRmb3JtX3RyeV9pZGxlKG11c2IsIGlkbGVfdGltZW91dCk7CisJdHVzYl9tdXNiX3RyeV9pZGxlKG11c2IsIGlkbGVfdGltZW91dCk7CiAKIAltdXNiX3dyaXRlbCh0YmFzZSwgVFVTQl9JTlRfTUFTSywgaW50X21hc2spOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm11c2ItPmxvY2ssIGZsYWdzKTsKQEAgLTkyNiw3ICs5MTcsNyBAQAogICogUkVWSVNJVDoKICAqIC0gQ2hlY2sgd2hhdCBpcyB1bm5lY2Vzc2FyeSBpbiBNR0NfSGRyY1N0YXJ0KCkKICAqLwotdm9pZCBtdXNiX3BsYXRmb3JtX2VuYWJsZShzdHJ1Y3QgbXVzYiAqbXVzYikKK3N0YXRpYyB2b2lkIHR1c2JfbXVzYl9lbmFibGUoc3RydWN0IG11c2IgKm11c2IpCiB7CiAJdm9pZCBfX2lvbWVtCSp0YmFzZSA9IG11c2ItPmN0cmxfYmFzZTsKIApAQCAtOTcwLDcgKzk2MSw3IEBACiAvKgogICogRGlzYWJsZXMgVFVTQjYwMTAuIENhbGxlciBtdXN0IHRha2UgY2FyZSBvZiBsb2NraW5nLgogICovCi12b2lkIG11c2JfcGxhdGZvcm1fZGlzYWJsZShzdHJ1Y3QgbXVzYiAqbXVzYikKK3N0YXRpYyB2b2lkIHR1c2JfbXVzYl9kaXNhYmxlKHN0cnVjdCBtdXNiICptdXNiKQogewogCXZvaWQgX19pb21lbQkqdGJhc2UgPSBtdXNiLT5jdHJsX2Jhc2U7CiAKQEAgLTk5NSw3ICs5ODYsNyBAQAogICogU2V0cyB1cCBUVVNCNjAxMCBDUFUgaW50ZXJmYWNlIHNwZWNpZmljIHNpZ25hbHMgYW5kIHJlZ2lzdGVycwogICogTm90ZTogU2V0dGluZ3Mgb3B0aW1pemVkIGZvciBPTUFQMjR4eAogICovCi1zdGF0aWMgdm9pZCBfX2luaXQgdHVzYl9zZXR1cF9jcHVfaW50ZXJmYWNlKHN0cnVjdCBtdXNiICptdXNiKQorc3RhdGljIHZvaWQgdHVzYl9zZXR1cF9jcHVfaW50ZXJmYWNlKHN0cnVjdCBtdXNiICptdXNiKQogewogCXZvaWQgX19pb21lbQkqdGJhc2UgPSBtdXNiLT5jdHJsX2Jhc2U7CiAKQEAgLTEwMjIsNyArMTAxMyw3IEBACiAJbXVzYl93cml0ZWwodGJhc2UsIFRVU0JfV0FJVF9DT1VOVCwgMSk7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IHR1c2Jfc3RhcnQoc3RydWN0IG11c2IgKm11c2IpCitzdGF0aWMgaW50IHR1c2JfbXVzYl9zdGFydChzdHJ1Y3QgbXVzYiAqbXVzYikKIHsKIAl2b2lkIF9faW9tZW0JKnRiYXNlID0gbXVzYi0+Y3RybF9iYXNlOwogCWludAkJcmV0ID0gMDsKQEAgLTEwOTEsNyArMTA4Miw3IEBACiAJcmV0dXJuIC1FTk9ERVY7CiB9CiAKLWludCBfX2luaXQgbXVzYl9wbGF0Zm9ybV9pbml0KHN0cnVjdCBtdXNiICptdXNiLCB2b2lkICpib2FyZF9kYXRhKQorc3RhdGljIGludCB0dXNiX211c2JfaW5pdChzdHJ1Y3QgbXVzYiAqbXVzYikKIHsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCSpwZGV2OwogCXN0cnVjdCByZXNvdXJjZQkJKm1lbTsKQEAgLTExMzEsMTYgKzExMjIsMTQgQEAKIAkgKi8KIAltdXNiLT5tcmVncyArPSBUVVNCX0JBU0VfT0ZGU0VUOwogCi0JcmV0ID0gdHVzYl9zdGFydChtdXNiKTsKKwlyZXQgPSB0dXNiX211c2Jfc3RhcnQobXVzYik7CiAJaWYgKHJldCkgewogCQlwcmludGsoS0VSTl9FUlIgIkNvdWxkIG5vdCBzdGFydCB0dXNiNjAxMCAoJWQpXG4iLAogCQkJCXJldCk7CiAJCWdvdG8gZG9uZTsKIAl9Ci0JbXVzYi0+aXNyID0gdHVzYl9pbnRlcnJ1cHQ7CisJbXVzYi0+aXNyID0gdHVzYl9tdXNiX2ludGVycnVwdDsKIAotCWlmIChpc19ob3N0X2VuYWJsZWQobXVzYikpCi0JCW11c2ItPmJvYXJkX3NldF92YnVzID0gdHVzYl9zb3VyY2VfcG93ZXI7CiAJaWYgKGlzX3BlcmlwaGVyYWxfZW5hYmxlZChtdXNiKSkgewogCQltdXNiLT54Y2Vpdi0+c2V0X3Bvd2VyID0gdHVzYl9kcmF3X3Bvd2VyOwogCQl0aGVfbXVzYiA9IG11c2I7CkBAIC0xMTU5LDcgKzExNDgsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLWludCBtdXNiX3BsYXRmb3JtX2V4aXQoc3RydWN0IG11c2IgKm11c2IpCitzdGF0aWMgaW50IHR1c2JfbXVzYl9leGl0KHN0cnVjdCBtdXNiICptdXNiKQogewogCWRlbF90aW1lcl9zeW5jKCZtdXNiX2lkbGVfdGltZXIpOwogCXRoZV9tdXNiID0gTlVMTDsKQEAgLTExNzMsMyArMTE2MiwxMTUgQEAKIAl1c2Jfbm9wX3hjZWl2X3VucmVnaXN0ZXIoKTsKIAlyZXR1cm4gMDsKIH0KKworc3RhdGljIGNvbnN0IHN0cnVjdCBtdXNiX3BsYXRmb3JtX29wcyB0dXNiX29wcyA9IHsKKwkuaW5pdAkJPSB0dXNiX211c2JfaW5pdCwKKwkuZXhpdAkJPSB0dXNiX211c2JfZXhpdCwKKworCS5lbmFibGUJCT0gdHVzYl9tdXNiX2VuYWJsZSwKKwkuZGlzYWJsZQk9IHR1c2JfbXVzYl9kaXNhYmxlLAorCisJLnNldF9tb2RlCT0gdHVzYl9tdXNiX3NldF9tb2RlLAorCS50cnlfaWRsZQk9IHR1c2JfbXVzYl90cnlfaWRsZSwKKworCS52YnVzX3N0YXR1cwk9IHR1c2JfbXVzYl92YnVzX3N0YXR1cywKKwkuc2V0X3ZidXMJPSB0dXNiX211c2Jfc2V0X3ZidXMsCit9OworCitzdGF0aWMgdTY0IHR1c2JfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7CisKK3N0YXRpYyBpbnQgX19pbml0IHR1c2JfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbXVzYl9oZHJjX3BsYXRmb3JtX2RhdGEJKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZQkJKm11c2I7CisJc3RydWN0IHR1c2I2MDEwX2dsdWUJCSpnbHVlOworCisJaW50CQkJCXJldCA9IC1FTk9NRU07CisKKwlnbHVlID0ga3phbGxvYyhzaXplb2YoKmdsdWUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWdsdWUpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIGdsdWUgY29udGV4dFxuIik7CisJCWdvdG8gZXJyMDsKKwl9CisKKwltdXNiID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJtdXNiLWhkcmMiLCAtMSk7CisJaWYgKCFtdXNiKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBtdXNiIGRldmljZVxuIik7CisJCWdvdG8gZXJyMTsKKwl9CisKKwltdXNiLT5kZXYucGFyZW50CQk9ICZwZGV2LT5kZXY7CisJbXVzYi0+ZGV2LmRtYV9tYXNrCQk9ICZ0dXNiX2RtYW1hc2s7CisJbXVzYi0+ZGV2LmNvaGVyZW50X2RtYV9tYXNrCT0gdHVzYl9kbWFtYXNrOworCisJZ2x1ZS0+ZGV2CQkJPSAmcGRldi0+ZGV2OworCWdsdWUtPm11c2IJCQk9IG11c2I7CisKKwlwZGF0YS0+cGxhdGZvcm1fb3BzCQk9ICZ0dXNiX29wczsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGdsdWUpOworCisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9yZXNvdXJjZXMobXVzYiwgcGRldi0+cmVzb3VyY2UsCisJCQlwZGV2LT5udW1fcmVzb3VyY2VzKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBhZGQgcmVzb3VyY2VzXG4iKTsKKwkJZ290byBlcnIyOworCX0KKworCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGRfZGF0YShtdXNiLCBwZGF0YSwgc2l6ZW9mKCpwZGF0YSkpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGFkZCBwbGF0Zm9ybV9kYXRhXG4iKTsKKwkJZ290byBlcnIyOworCX0KKworCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQobXVzYik7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgbXVzYiBkZXZpY2VcbiIpOworCQlnb3RvIGVycjE7CisJfQorCisJcmV0dXJuIDA7CisKK2VycjI6CisJcGxhdGZvcm1fZGV2aWNlX3B1dChtdXNiKTsKKworZXJyMToKKwlrZnJlZShnbHVlKTsKKworZXJyMDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZXhpdCB0dXNiX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB0dXNiNjAxMF9nbHVlCQkqZ2x1ZSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJcGxhdGZvcm1fZGV2aWNlX2RlbChnbHVlLT5tdXNiKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcHV0KGdsdWUtPm11c2IpOworCWtmcmVlKGdsdWUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHR1c2JfZHJpdmVyID0geworCS5yZW1vdmUJCT0gX19leGl0X3AodHVzYl9yZW1vdmUpLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJtdXNiLXR1c2IiLAorCX0sCit9OworCitNT0RVTEVfREVTQ1JJUFRJT04oIlRVU0I2MDEwIE1VU0IgR2x1ZSBMYXllciIpOworTU9EVUxFX0FVVEhPUigiRmVsaXBlIEJhbGJpIDxiYWxiaUB0aS5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CisKK3N0YXRpYyBpbnQgX19pbml0IHR1c2JfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJnR1c2JfZHJpdmVyLCB0dXNiX3Byb2JlKTsKK30KK3N1YnN5c19pbml0Y2FsbCh0dXNiX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgdHVzYl9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnR1c2JfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHR1c2JfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL3V4NTAwLmMgYi9kcml2ZXJzL3VzYi9tdXNiL3V4NTAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYzODRlNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL211c2IvdXg1MDAuYwpAQCAtMCwwICsxLDIxNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBTVC1Fcmljc3NvbiBBQgorICogTWlhbiBZb3VzYWYgS2F1a2FiIDxtaWFuLnlvdXNhZi5rYXVrYWJAc3Rlcmljc3Nvbi5jb20+CisgKgorICogQmFzZWQgb24gb21hcDI0MzAuYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgIm11c2JfY29yZS5oIgorCitzdHJ1Y3QgdXg1MDBfZ2x1ZSB7CisJc3RydWN0IGRldmljZQkJKmRldjsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCSptdXNiOworCXN0cnVjdCBjbGsJCSpjbGs7Cit9OworI2RlZmluZSBnbHVlX3RvX211c2IoZykJcGxhdGZvcm1fZ2V0X2RydmRhdGEoZy0+bXVzYikKKworc3RhdGljIGludCB1eDUwMF9tdXNiX2luaXQoc3RydWN0IG11c2IgKm11c2IpCit7CisJbXVzYi0+eGNlaXYgPSBvdGdfZ2V0X3RyYW5zY2VpdmVyKCk7CisJaWYgKCFtdXNiLT54Y2VpdikgeworCQlwcl9lcnIoIkhTIFVTQiBPVEc6IG5vIHRyYW5zY2VpdmVyIGNvbmZpZ3VyZWRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1eDUwMF9tdXNiX2V4aXQoc3RydWN0IG11c2IgKm11c2IpCit7CisJb3RnX3B1dF90cmFuc2NlaXZlcihtdXNiLT54Y2Vpdik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBtdXNiX3BsYXRmb3JtX29wcyB1eDUwMF9vcHMgPSB7CisJLmluaXQJCT0gdXg1MDBfbXVzYl9pbml0LAorCS5leGl0CQk9IHV4NTAwX211c2JfZXhpdCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHV4NTAwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG11c2JfaGRyY19wbGF0Zm9ybV9kYXRhCSpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJCSptdXNiOworCXN0cnVjdCB1eDUwMF9nbHVlCQkqZ2x1ZTsKKwlzdHJ1Y3QgY2xrCQkJKmNsazsKKworCWludAkJCQlyZXQgPSAtRU5PTUVNOworCisJZ2x1ZSA9IGt6YWxsb2Moc2l6ZW9mKCpnbHVlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFnbHVlKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBnbHVlIGNvbnRleHRcbiIpOworCQlnb3RvIGVycjA7CisJfQorCisJbXVzYiA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygibXVzYi1oZHJjIiwgLTEpOworCWlmICghbXVzYikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gYWxsb2NhdGUgbXVzYiBkZXZpY2VcbiIpOworCQlnb3RvIGVycjE7CisJfQorCisJY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAidXNiIik7CisJaWYgKElTX0VSUihjbGspKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBnZXQgY2xvY2tcbiIpOworCQlyZXQgPSBQVFJfRVJSKGNsayk7CisJCWdvdG8gZXJyMjsKKwl9CisKKwlyZXQgPSBjbGtfZW5hYmxlKGNsayk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZW5hYmxlIGNsb2NrXG4iKTsKKwkJZ290byBlcnIzOworCX0KKworCW11c2ItPmRldi5wYXJlbnQJCT0gJnBkZXYtPmRldjsKKworCWdsdWUtPmRldgkJCT0gJnBkZXYtPmRldjsKKwlnbHVlLT5tdXNiCQkJPSBtdXNiOworCWdsdWUtPmNsawkJCT0gY2xrOworCisJcGRhdGEtPnBsYXRmb3JtX29wcwkJPSAmdXg1MDBfb3BzOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZ2x1ZSk7CisKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX3Jlc291cmNlcyhtdXNiLCBwZGV2LT5yZXNvdXJjZSwKKwkJCXBkZXYtPm51bV9yZXNvdXJjZXMpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGFkZCByZXNvdXJjZXNcbiIpOworCQlnb3RvIGVycjQ7CisJfQorCisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9kYXRhKG11c2IsIHBkYXRhLCBzaXplb2YoKnBkYXRhKSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gYWRkIHBsYXRmb3JtX2RhdGFcbiIpOworCQlnb3RvIGVycjQ7CisJfQorCisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChtdXNiKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBtdXNiIGRldmljZVxuIik7CisJCWdvdG8gZXJyNDsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyNDoKKwljbGtfZGlzYWJsZShjbGspOworCitlcnIzOgorCWNsa19wdXQoY2xrKTsKKworZXJyMjoKKwlwbGF0Zm9ybV9kZXZpY2VfcHV0KG11c2IpOworCitlcnIxOgorCWtmcmVlKGdsdWUpOworCitlcnIwOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19leGl0IHV4NTAwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB1eDUwMF9nbHVlCSpnbHVlID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlwbGF0Zm9ybV9kZXZpY2VfZGVsKGdsdWUtPm11c2IpOworCXBsYXRmb3JtX2RldmljZV9wdXQoZ2x1ZS0+bXVzYik7CisJY2xrX2Rpc2FibGUoZ2x1ZS0+Y2xrKTsKKwljbGtfcHV0KGdsdWUtPmNsayk7CisJa2ZyZWUoZ2x1ZSk7CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCB1eDUwMF9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdXg1MDBfZ2x1ZQkqZ2x1ZSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBtdXNiCQkqbXVzYiA9IGdsdWVfdG9fbXVzYihnbHVlKTsKKworCW90Z19zZXRfc3VzcGVuZChtdXNiLT54Y2VpdiwgMSk7CisJY2xrX2Rpc2FibGUoZ2x1ZS0+Y2xrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHV4NTAwX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHV4NTAwX2dsdWUJKmdsdWUgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgbXVzYgkJKm11c2IgPSBnbHVlX3RvX211c2IoZ2x1ZSk7CisJaW50CQkJcmV0OworCisJcmV0ID0gY2xrX2VuYWJsZShnbHVlLT5jbGspOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZW5hYmxlIGNsb2NrXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlvdGdfc2V0X3N1c3BlbmQobXVzYi0+eGNlaXYsIDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyB1eDUwMF9wbV9vcHMgPSB7CisJLnN1c3BlbmQJPSB1eDUwMF9zdXNwZW5kLAorCS5yZXN1bWUJCT0gdXg1MDBfcmVzdW1lLAorfTsKKworI2RlZmluZSBERVZfUE1fT1BTCSgmdXg1MDBfcG1fb3BzKQorI2Vsc2UKKyNkZWZpbmUgREVWX1BNX09QUwlOVUxMCisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdXg1MDBfZHJpdmVyID0geworCS5yZW1vdmUJCT0gX19leGl0X3AodXg1MDBfcmVtb3ZlKSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAibXVzYi11eDUwMCIsCisJCS5wbQk9IERFVl9QTV9PUFMsCisJfSwKK307CisKK01PRFVMRV9ERVNDUklQVElPTigiVVg1MDAgTVVTQiBHbHVlIExheWVyIik7CitNT0RVTEVfQVVUSE9SKCJNaWFuIFlvdXNhZiBLYXVrYWIgPG1pYW4ueW91c2FmLmthdWthYkBzdGVyaWNzc29uLmNvbT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKKworc3RhdGljIGludCBfX2luaXQgdXg1MDBfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJnV4NTAwX2RyaXZlciwgdXg1MDBfcHJvYmUpOworfQorc3Vic3lzX2luaXRjYWxsKHV4NTAwX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgdXg1MDBfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ1eDUwMF9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQodXg1MDBfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9vdGcvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL290Zy9LY29uZmlnCmluZGV4IDVjZTA3NTIuLjlmYjg3NWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL290Zy9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL290Zy9LY29uZmlnCkBAIC01OSw2ICs1OSwxOCBAQAogCSAgVGhpcyB0cmFuc2NlaXZlciBzdXBwb3J0cyBoaWdoIGFuZCBmdWxsIHNwZWVkIGRldmljZXMgcGx1cywKIAkgIGluIGhvc3QgbW9kZSwgbG93IHNwZWVkLgogCitjb25maWcgVFdMNjAzMF9VU0IKKwl0cmlzdGF0ZSAiVFdMNjAzMCBVU0IgVHJhbnNjZWl2ZXIgRHJpdmVyIgorCWRlcGVuZHMgb24gVFdMNDAzMF9DT1JFCisJc2VsZWN0IFVTQl9PVEdfVVRJTFMKKwloZWxwCisJICBFbmFibGUgdGhpcyB0byBzdXBwb3J0IHRoZSBVU0IgT1RHIHRyYW5zY2VpdmVyIG9uIFRXTDYwMzAKKwkgIGZhbWlseSBjaGlwcy4gVGhpcyBUV0w2MDMwIHRyYW5zY2VpdmVyIGhhcyB0aGUgVkJVUyBhbmQgSUQgR05ECisJICBhbmQgT1RHIFNSUCBldmVudHMgY2FwYWJpbGl0aWVzLiBGb3IgYWxsIG90aGVyIHRyYW5zY2VpdmVyIGZ1bmN0aW9uYWxpdHkKKwkgIFVUTUkgUEhZIGlzIGVtYmVkZGVkIGluIE9NQVA0NDMwLiBUaGUgaW50ZXJuYWwgUEhZIGNvbmZpZ3VyYXRpb25zIEFQSXMKKwkgIGFyZSBob29rZWQgdG8gdGhpcyBkcml2ZXIgdGhyb3VnaCBwbGF0Zm9ybV9kYXRhIHN0cnVjdHVyZS4KKwkgIFRoZSBkZWZpbml0aW9uIG9mIGludGVybmFsIFBIWSBBUElzIGFyZSBpbiB0aGUgbWFjaC1vbWFwMiBsYXllci4KKwogY29uZmlnIE5PUF9VU0JfWENFSVYKIAl0cmlzdGF0ZSAiTk9QIFVTQiBUcmFuc2NlaXZlciBEcml2ZXIiCiAJc2VsZWN0IFVTQl9PVEdfVVRJTFMKQEAgLTgxLDQgKzkzLDI0IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBsYW5nd2VsbF9vdGcuCiAKK2NvbmZpZyBVU0JfTVNNX09UR183MksKKwl0cmlzdGF0ZSAiT1RHIHN1cHBvcnQgZm9yIFF1YWxjb21tIG9uLWNoaXAgVVNCIGNvbnRyb2xsZXIiCisJZGVwZW5kcyBvbiAoVVNCIHx8IFVTQl9HQURHRVQpICYmIEFSQ0hfTVNNCisJc2VsZWN0IFVTQl9PVEdfVVRJTFMKKwloZWxwCisJICBFbmFibGUgdGhpcyB0byBzdXBwb3J0IHRoZSBVU0IgT1RHIHRyYW5zY2VpdmVyIG9uIE1TTSBjaGlwcy4gSXQKKwkgIGhhbmRsZXMgUEhZIGluaXRpYWxpemF0aW9uLCBjbG9jayBtYW5hZ2VtZW50LCBhbmQgd29ya2Fyb3VuZHMKKwkgIHJlcXVpcmVkIGFmdGVyIHJlc2V0dGluZyB0aGUgaGFyZHdhcmUgYW5kIHBvd2VyIG1hbmFnZW1lbnQuCisJICBUaGlzIGRyaXZlciBpcyByZXF1aXJlZCBldmVuIGZvciBwZXJpcGhlcmFsIG9ubHkgb3IgaG9zdCBvbmx5CisJICBtb2RlIGNvbmZpZ3VyYXRpb25zLgorCitjb25maWcgQUI4NTAwX1VTQgorICAgICAgICB0cmlzdGF0ZSAiQUI4NTAwIFVTQiBUcmFuc2NlaXZlciBEcml2ZXIiCisgICAgICAgIGRlcGVuZHMgb24gQUI4NTAwX0NPUkUKKyAgICAgICAgc2VsZWN0IFVTQl9PVEdfVVRJTFMKKyAgICAgICAgaGVscAorICAgICAgICAgIEVuYWJsZSB0aGlzIHRvIHN1cHBvcnQgdGhlIFVTQiBPVEcgdHJhbnNjZWl2ZXIgaW4gQUI4NTAwIGNoaXAuCisgICAgICAgICAgVGhpcyB0cmFuc2NlaXZlciBzdXBwb3J0cyBoaWdoIGFuZCBmdWxsIHNwZWVkIGRldmljZXMgcGx1cywKKyAgICAgICAgICBpbiBob3N0IG1vZGUsIGxvdyBzcGVlZC4KKwogZW5kaWYgIyBVU0IgfHwgT1RHCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9vdGcvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9vdGcvTWFrZWZpbGUKaW5kZXggNjZmMWI4My4uYTUyMGU3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivb3RnL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdXNiL290Zy9NYWtlZmlsZQpAQCAtMTIsNiArMTIsOSBAQAogb2JqLSQoQ09ORklHX1VTQl9HUElPX1ZCVVMpCSs9IGdwaW9fdmJ1cy5vCiBvYmotJChDT05GSUdfSVNQMTMwMV9PTUFQKQkrPSBpc3AxMzAxX29tYXAubwogb2JqLSQoQ09ORklHX1RXTDQwMzBfVVNCKQkrPSB0d2w0MDMwLXVzYi5vCitvYmotJChDT05GSUdfVFdMNjAzMF9VU0IpCSs9IHR3bDYwMzAtdXNiLm8KIG9iai0kKENPTkZJR19VU0JfTEFOR1dFTExfT1RHKQkrPSBsYW5nd2VsbF9vdGcubwogb2JqLSQoQ09ORklHX05PUF9VU0JfWENFSVYpCSs9IG5vcC11c2IteGNlaXYubwogb2JqLSQoQ09ORklHX1VTQl9VTFBJKQkJKz0gdWxwaS5vCitvYmotJChDT05GSUdfVVNCX01TTV9PVEdfNzJLKQkrPSBtc203Mmtfb3RnLm8KK29iai0kKENPTkZJR19BQjg1MDBfVVNCKQkrPSBhYjg1MDAtdXNiLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL290Zy9hYjg1MDAtdXNiLmMgYi9kcml2ZXJzL3VzYi9vdGcvYWI4NTAwLXVzYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxNDczNmIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9vdGcvYWI4NTAwLXVzYi5jCkBAIC0wLDAgKzEsNTg1IEBACisvKgorICogZHJpdmVycy91c2Ivb3RnL2FiODUwMF91c2IuYworICoKKyAqIFVTQiB0cmFuc2NlaXZlciBkcml2ZXIgZm9yIEFCODUwMCBjaGlwCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFNULUVyaWNzc29uIEFCCisgKiBNaWFuIFlvdXNhZiBLYXVrYWIgPG1pYW4ueW91c2FmLmthdWthYkBzdGVyaWNzc29uLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi9vdGcuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9hYng1MDAuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvYWI4NTAwLmg+CisKKyNkZWZpbmUgQUI4NTAwX01BSU5fV0RfQ1RSTF9SRUcgMHgwMQorI2RlZmluZSBBQjg1MDBfVVNCX0xJTkVfU1RBVF9SRUcgMHg4MAorI2RlZmluZSBBQjg1MDBfVVNCX1BIWV9DVFJMX1JFRyAweDhBCisKKyNkZWZpbmUgQUI4NTAwX0JJVF9PVEdfU1RBVF9JRCAoMSA8PCAwKQorI2RlZmluZSBBQjg1MDBfQklUX1BIWV9DVFJMX0hPU1RfRU4gKDEgPDwgMCkKKyNkZWZpbmUgQUI4NTAwX0JJVF9QSFlfQ1RSTF9ERVZJQ0VfRU4gKDEgPDwgMSkKKyNkZWZpbmUgQUI4NTAwX0JJVF9XRF9DVFJMX0VOQUJMRSAoMSA8PCAwKQorI2RlZmluZSBBQjg1MDBfQklUX1dEX0NUUkxfS0lDSyAoMSA8PCAxKQorCisjZGVmaW5lIEFCODUwMF9WMXhfTElOS19TVEFUX1dBSVQgKEhaLzEwKQorI2RlZmluZSBBQjg1MDBfV0RfS0lDS19ERUxBWV9VUyAxMDAgLyogdXNlYyAqLworI2RlZmluZSBBQjg1MDBfV0RfVjExX0RJU0FCTEVfREVMQVlfVVMgMTAwIC8qIHVzZWMgKi8KKyNkZWZpbmUgQUI4NTAwX1dEX1YxMF9ESVNBQkxFX0RFTEFZX01TIDEwMCAvKiBtcyAqLworCisvKiBVc2IgbGluZSBzdGF0dXMgcmVnaXN0ZXIgKi8KK2VudW0gYWI4NTAwX3VzYl9saW5rX3N0YXR1cyB7CisJVVNCX0xJTktfTk9UX0NPTkZJR1VSRUQgPSAwLAorCVVTQl9MSU5LX1NURF9IT1NUX05DLAorCVVTQl9MSU5LX1NURF9IT1NUX0NfTlMsCisJVVNCX0xJTktfU1REX0hPU1RfQ19TLAorCVVTQl9MSU5LX0hPU1RfQ0hHX05NLAorCVVTQl9MSU5LX0hPU1RfQ0hHX0hTLAorCVVTQl9MSU5LX0hPU1RfQ0hHX0hTX0NISVJQLAorCVVTQl9MSU5LX0RFRElDQVRFRF9DSEcsCisJVVNCX0xJTktfQUNBX1JJRF9BLAorCVVTQl9MSU5LX0FDQV9SSURfQiwKKwlVU0JfTElOS19BQ0FfUklEX0NfTk0sCisJVVNCX0xJTktfQUNBX1JJRF9DX0hTLAorCVVTQl9MSU5LX0FDQV9SSURfQ19IU19DSElSUCwKKwlVU0JfTElOS19ITV9JREdORCwKKwlVU0JfTElOS19SRVNFUlZFRCwKKwlVU0JfTElOS19OT1RfVkFMSURfTElOSworfTsKKworc3RydWN0IGFiODUwMF91c2IgeworCXN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIgb3RnOworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlpbnQgaXJxX251bV9pZF9yaXNlOworCWludCBpcnFfbnVtX2lkX2ZhbGw7CisJaW50IGlycV9udW1fdmJ1c19yaXNlOworCWludCBpcnFfbnVtX3ZidXNfZmFsbDsKKwlpbnQgaXJxX251bV9saW5rX3N0YXR1czsKKwl1bnNpZ25lZCB2YnVzX2RyYXc7CisJc3RydWN0IGRlbGF5ZWRfd29yayBkd29yazsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcGh5X2Rpc193b3JrOworCXVuc2lnbmVkIGxvbmcgbGlua19zdGF0dXNfd2FpdDsKKwlpbnQgcmV2OworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgYWI4NTAwX3VzYiAqeGNlaXZfdG9fYWIoc3RydWN0IG90Z190cmFuc2NlaXZlciAqeCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHgsIHN0cnVjdCBhYjg1MDBfdXNiLCBvdGcpOworfQorCitzdGF0aWMgdm9pZCBhYjg1MDBfdXNiX3dkX3dvcmthcm91bmQoc3RydWN0IGFiODUwMF91c2IgKmFiKQoreworCWFieDUwMF9zZXRfcmVnaXN0ZXJfaW50ZXJydXB0aWJsZShhYi0+ZGV2LAorCQlBQjg1MDBfU1lTX0NUUkwyX0JMT0NLLAorCQlBQjg1MDBfTUFJTl9XRF9DVFJMX1JFRywKKwkJQUI4NTAwX0JJVF9XRF9DVFJMX0VOQUJMRSk7CisKKwl1ZGVsYXkoQUI4NTAwX1dEX0tJQ0tfREVMQVlfVVMpOworCisJYWJ4NTAwX3NldF9yZWdpc3Rlcl9pbnRlcnJ1cHRpYmxlKGFiLT5kZXYsCisJCUFCODUwMF9TWVNfQ1RSTDJfQkxPQ0ssCisJCUFCODUwMF9NQUlOX1dEX0NUUkxfUkVHLAorCQkoQUI4NTAwX0JJVF9XRF9DVFJMX0VOQUJMRQorCQl8IEFCODUwMF9CSVRfV0RfQ1RSTF9LSUNLKSk7CisKKwlpZiAoYWItPnJldiA+IDB4MTApIC8qIHYxLjEgdjIuMCAqLworCQl1ZGVsYXkoQUI4NTAwX1dEX1YxMV9ESVNBQkxFX0RFTEFZX1VTKTsKKwllbHNlIC8qIHYxLjAgKi8KKwkJbXNsZWVwKEFCODUwMF9XRF9WMTBfRElTQUJMRV9ERUxBWV9NUyk7CisKKwlhYng1MDBfc2V0X3JlZ2lzdGVyX2ludGVycnVwdGlibGUoYWItPmRldiwKKwkJQUI4NTAwX1NZU19DVFJMMl9CTE9DSywKKwkJQUI4NTAwX01BSU5fV0RfQ1RSTF9SRUcsCisJCTApOworfQorCitzdGF0aWMgdm9pZCBhYjg1MDBfdXNiX3BoeV9jdHJsKHN0cnVjdCBhYjg1MDBfdXNiICphYiwgYm9vbCBzZWxfaG9zdCwKKwkJCQkJYm9vbCBlbmFibGUpCit7CisJdTggY3RybF9yZWc7CisJYWJ4NTAwX2dldF9yZWdpc3Rlcl9pbnRlcnJ1cHRpYmxlKGFiLT5kZXYsCisJCQkJQUI4NTAwX1VTQiwKKwkJCQlBQjg1MDBfVVNCX1BIWV9DVFJMX1JFRywKKwkJCQkmY3RybF9yZWcpOworCWlmIChzZWxfaG9zdCkgeworCQlpZiAoZW5hYmxlKQorCQkJY3RybF9yZWcgfD0gQUI4NTAwX0JJVF9QSFlfQ1RSTF9IT1NUX0VOOworCQllbHNlCisJCQljdHJsX3JlZyAmPSB+QUI4NTAwX0JJVF9QSFlfQ1RSTF9IT1NUX0VOOworCX0gZWxzZSB7CisJCWlmIChlbmFibGUpCisJCQljdHJsX3JlZyB8PSBBQjg1MDBfQklUX1BIWV9DVFJMX0RFVklDRV9FTjsKKwkJZWxzZQorCQkJY3RybF9yZWcgJj0gfkFCODUwMF9CSVRfUEhZX0NUUkxfREVWSUNFX0VOOworCX0KKworCWFieDUwMF9zZXRfcmVnaXN0ZXJfaW50ZXJydXB0aWJsZShhYi0+ZGV2LAorCQkJCUFCODUwMF9VU0IsCisJCQkJQUI4NTAwX1VTQl9QSFlfQ1RSTF9SRUcsCisJCQkJY3RybF9yZWcpOworCisJLyogTmVlZGVkIHRvIGVuYWJsZSB0aGUgcGh5LiovCisJaWYgKGVuYWJsZSkKKwkJYWI4NTAwX3VzYl93ZF93b3JrYXJvdW5kKGFiKTsKK30KKworI2RlZmluZSBhYjg1MDBfdXNiX2hvc3RfcGh5X2VuKGFiKQlhYjg1MDBfdXNiX3BoeV9jdHJsKGFiLCB0cnVlLCB0cnVlKQorI2RlZmluZSBhYjg1MDBfdXNiX2hvc3RfcGh5X2RpcyhhYikJYWI4NTAwX3VzYl9waHlfY3RybChhYiwgdHJ1ZSwgZmFsc2UpCisjZGVmaW5lIGFiODUwMF91c2JfcGVyaV9waHlfZW4oYWIpCWFiODUwMF91c2JfcGh5X2N0cmwoYWIsIGZhbHNlLCB0cnVlKQorI2RlZmluZSBhYjg1MDBfdXNiX3BlcmlfcGh5X2RpcyhhYikJYWI4NTAwX3VzYl9waHlfY3RybChhYiwgZmFsc2UsIGZhbHNlKQorCitzdGF0aWMgaW50IGFiODUwMF91c2JfbGlua19zdGF0dXNfdXBkYXRlKHN0cnVjdCBhYjg1MDBfdXNiICphYikKK3sKKwl1OCByZWc7CisJZW51bSBhYjg1MDBfdXNiX2xpbmtfc3RhdHVzIGxzdHM7CisJdm9pZCAqdiA9IE5VTEw7CisJZW51bSB1c2JfeGNlaXZfZXZlbnRzIGV2ZW50OworCisJYWJ4NTAwX2dldF9yZWdpc3Rlcl9pbnRlcnJ1cHRpYmxlKGFiLT5kZXYsCisJCQlBQjg1MDBfVVNCLAorCQkJQUI4NTAwX1VTQl9MSU5FX1NUQVRfUkVHLAorCQkJJnJlZyk7CisKKwlsc3RzID0gKHJlZyA+PiAzKSAmIDB4MEY7CisKKwlzd2l0Y2ggKGxzdHMpIHsKKwljYXNlIFVTQl9MSU5LX05PVF9DT05GSUdVUkVEOgorCWNhc2UgVVNCX0xJTktfUkVTRVJWRUQ6CisJY2FzZSBVU0JfTElOS19OT1RfVkFMSURfTElOSzoKKwkJLyogVE9ETzogRGlzYWJsZSByZWd1bGF0b3JzLiAqLworCQlhYjg1MDBfdXNiX2hvc3RfcGh5X2RpcyhhYik7CisJCWFiODUwMF91c2JfcGVyaV9waHlfZGlzKGFiKTsKKwkJYWItPm90Zy5zdGF0ZSA9IE9UR19TVEFURV9CX0lETEU7CisJCWFiLT5vdGcuZGVmYXVsdF9hID0gZmFsc2U7CisJCWFiLT52YnVzX2RyYXcgPSAwOworCQlldmVudCA9IFVTQl9FVkVOVF9OT05FOworCQlicmVhazsKKworCWNhc2UgVVNCX0xJTktfU1REX0hPU1RfTkM6CisJY2FzZSBVU0JfTElOS19TVERfSE9TVF9DX05TOgorCWNhc2UgVVNCX0xJTktfU1REX0hPU1RfQ19TOgorCWNhc2UgVVNCX0xJTktfSE9TVF9DSEdfTk06CisJY2FzZSBVU0JfTElOS19IT1NUX0NIR19IUzoKKwljYXNlIFVTQl9MSU5LX0hPU1RfQ0hHX0hTX0NISVJQOgorCQlpZiAoYWItPm90Zy5nYWRnZXQpIHsKKwkJCS8qIFRPRE86IEVuYWJsZSByZWd1bGF0b3JzLiAqLworCQkJYWI4NTAwX3VzYl9wZXJpX3BoeV9lbihhYik7CisJCQl2ID0gYWItPm90Zy5nYWRnZXQ7CisJCX0KKwkJZXZlbnQgPSBVU0JfRVZFTlRfVkJVUzsKKwkJYnJlYWs7CisKKwljYXNlIFVTQl9MSU5LX0hNX0lER05EOgorCQlpZiAoYWItPm90Zy5ob3N0KSB7CisJCQkvKiBUT0RPOiBFbmFibGUgcmVndWxhdG9ycy4gKi8KKwkJCWFiODUwMF91c2JfaG9zdF9waHlfZW4oYWIpOworCQkJdiA9IGFiLT5vdGcuaG9zdDsKKwkJfQorCQlhYi0+b3RnLnN0YXRlID0gT1RHX1NUQVRFX0FfSURMRTsKKwkJYWItPm90Zy5kZWZhdWx0X2EgPSB0cnVlOworCQlldmVudCA9IFVTQl9FVkVOVF9JRDsKKwkJYnJlYWs7CisKKwljYXNlIFVTQl9MSU5LX0FDQV9SSURfQToKKwljYXNlIFVTQl9MSU5LX0FDQV9SSURfQjoKKwkJLyogVE9ETyAqLworCWNhc2UgVVNCX0xJTktfQUNBX1JJRF9DX05NOgorCWNhc2UgVVNCX0xJTktfQUNBX1JJRF9DX0hTOgorCWNhc2UgVVNCX0xJTktfQUNBX1JJRF9DX0hTX0NISVJQOgorCWNhc2UgVVNCX0xJTktfREVESUNBVEVEX0NIRzoKKwkJLyogVE9ETzogdmJ1c19kcmF3ICovCisJCWV2ZW50ID0gVVNCX0VWRU5UX0NIQVJHRVI7CisJCWJyZWFrOworCX0KKworCWJsb2NraW5nX25vdGlmaWVyX2NhbGxfY2hhaW4oJmFiLT5vdGcubm90aWZpZXIsIGV2ZW50LCB2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBhYjg1MDBfdXNiX2RlbGF5ZWRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGFiODUwMF91c2IgKmFiID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhYjg1MDBfdXNiLAorCQkJCQkJZHdvcmsud29yayk7CisKKwlhYjg1MDBfdXNiX2xpbmtfc3RhdHVzX3VwZGF0ZShhYik7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBhYjg1MDBfdXNiX3YxeF9jb21tb25faXJxKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGFiODUwMF91c2IgKmFiID0gKHN0cnVjdCBhYjg1MDBfdXNiICopIGRhdGE7CisKKwkvKiBXYWl0IGZvciBsaW5rIHN0YXR1cyB0byBiZWNvbWUgc3RhYmxlLiAqLworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmYWItPmR3b3JrLCBhYi0+bGlua19zdGF0dXNfd2FpdCk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBhYjg1MDBfdXNiX3YxeF92YnVzX2ZhbGxfaXJxKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGFiODUwMF91c2IgKmFiID0gKHN0cnVjdCBhYjg1MDBfdXNiICopIGRhdGE7CisKKwkvKiBMaW5rIHN0YXR1cyB3aWxsIG5vdCBiZSB1cGRhdGVkIHRpbGwgcGh5IGlzIGRpc2FibGVkLiAqLworCWFiODUwMF91c2JfcGVyaV9waHlfZGlzKGFiKTsKKworCS8qIFdhaXQgZm9yIGxpbmsgc3RhdHVzIHRvIGJlY29tZSBzdGFibGUuICovCisJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZhYi0+ZHdvcmssIGFiLT5saW5rX3N0YXR1c193YWl0KTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGlycXJldHVybl90IGFiODUwMF91c2JfdjIwX2lycShpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBhYjg1MDBfdXNiICphYiA9IChzdHJ1Y3QgYWI4NTAwX3VzYiAqKSBkYXRhOworCisJYWI4NTAwX3VzYl9saW5rX3N0YXR1c191cGRhdGUoYWIpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCBhYjg1MDBfdXNiX3BoeV9kaXNhYmxlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBhYjg1MDBfdXNiICphYiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYWI4NTAwX3VzYiwKKwkJCQkJCXBoeV9kaXNfd29yayk7CisKKwlpZiAoIWFiLT5vdGcuaG9zdCkKKwkJYWI4NTAwX3VzYl9ob3N0X3BoeV9kaXMoYWIpOworCisJaWYgKCFhYi0+b3RnLmdhZGdldCkKKwkJYWI4NTAwX3VzYl9wZXJpX3BoeV9kaXMoYWIpOworfQorCitzdGF0aWMgaW50IGFiODUwMF91c2Jfc2V0X3Bvd2VyKHN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIgKm90ZywgdW5zaWduZWQgbUEpCit7CisJc3RydWN0IGFiODUwMF91c2IgKmFiOworCisJaWYgKCFvdGcpCisJCXJldHVybiAtRU5PREVWOworCisJYWIgPSB4Y2Vpdl90b19hYihvdGcpOworCisJYWItPnZidXNfZHJhdyA9IG1BOworCisJaWYgKG1BKQorCQlibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKCZhYi0+b3RnLm5vdGlmaWVyLAorCQkJCVVTQl9FVkVOVF9FTlVNRVJBVEVELCBhYi0+b3RnLmdhZGdldCk7CisJcmV0dXJuIDA7Cit9CisKKy8qIFRPRE86IEltcGxlbWVudCBzb21lIHdheSBmb3IgY2hhcmdpbmcgb3Igb3RoZXIgZHJpdmVycyB0byByZWFkCisgKiBhYi0+dmJ1c19kcmF3LgorICovCisKK3N0YXRpYyBpbnQgYWI4NTAwX3VzYl9zZXRfc3VzcGVuZChzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyICp4LCBpbnQgc3VzcGVuZCkKK3sKKwkvKiBUT0RPICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWI4NTAwX3VzYl9zZXRfcGVyaXBoZXJhbChzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyICpvdGcsCisJCXN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpCit7CisJc3RydWN0IGFiODUwMF91c2IgKmFiOworCisJaWYgKCFvdGcpCisJCXJldHVybiAtRU5PREVWOworCisJYWIgPSB4Y2Vpdl90b19hYihvdGcpOworCisJLyogU29tZSBkcml2ZXJzIGNhbGwgdGhpcyBmdW5jdGlvbiBpbiBhdG9taWMgY29udGV4dC4KKwkgKiBEbyBub3QgdXBkYXRlIGFiODUwMCByZWdpc3RlcnMgZGlyZWN0bHkgdGlsbCB0aGlzCisJICogaXMgZml4ZWQuCisJICovCisKKwlpZiAoIWdhZGdldCkgeworCQkvKiBUT0RPOiBEaXNhYmxlIHJlZ3VsYXRvcnMuICovCisJCWFiLT5vdGcuZ2FkZ2V0ID0gTlVMTDsKKwkJc2NoZWR1bGVfd29yaygmYWItPnBoeV9kaXNfd29yayk7CisJfSBlbHNlIHsKKwkJYWItPm90Zy5nYWRnZXQgPSBnYWRnZXQ7CisJCWFiLT5vdGcuc3RhdGUgPSBPVEdfU1RBVEVfQl9JRExFOworCisJCS8qIFBoeSB3aWxsIG5vdCBiZSBlbmFibGVkIGlmIGNhYmxlIGlzIGFscmVhZHkKKwkJICogcGx1Z2dlZC1pbi4gU2NoZWR1bGUgdG8gZW5hYmxlIHBoeS4KKwkJICogVXNlIHNhbWUgZGVsYXkgdG8gYXZvaWQgYW55IHJhY2UgY29uZGl0aW9uLgorCQkgKi8KKwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZhYi0+ZHdvcmssIGFiLT5saW5rX3N0YXR1c193YWl0KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhYjg1MDBfdXNiX3NldF9ob3N0KHN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIgKm90ZywKKwkJCQkJc3RydWN0IHVzYl9idXMgKmhvc3QpCit7CisJc3RydWN0IGFiODUwMF91c2IgKmFiOworCisJaWYgKCFvdGcpCisJCXJldHVybiAtRU5PREVWOworCisJYWIgPSB4Y2Vpdl90b19hYihvdGcpOworCisJLyogU29tZSBkcml2ZXJzIGNhbGwgdGhpcyBmdW5jdGlvbiBpbiBhdG9taWMgY29udGV4dC4KKwkgKiBEbyBub3QgdXBkYXRlIGFiODUwMCByZWdpc3RlcnMgZGlyZWN0bHkgdGlsbCB0aGlzCisJICogaXMgZml4ZWQuCisJICovCisKKwlpZiAoIWhvc3QpIHsKKwkJLyogVE9ETzogRGlzYWJsZSByZWd1bGF0b3JzLiAqLworCQlhYi0+b3RnLmhvc3QgPSBOVUxMOworCQlzY2hlZHVsZV93b3JrKCZhYi0+cGh5X2Rpc193b3JrKTsKKwl9IGVsc2UgeworCQlhYi0+b3RnLmhvc3QgPSBob3N0OworCQkvKiBQaHkgd2lsbCBub3QgYmUgZW5hYmxlZCBpZiBjYWJsZSBpcyBhbHJlYWR5CisJCSAqIHBsdWdnZWQtaW4uIFNjaGVkdWxlIHRvIGVuYWJsZSBwaHkuCisJCSAqIFVzZSBzYW1lIGRlbGF5IHRvIGF2b2lkIGFueSByYWNlIGNvbmRpdGlvbi4KKwkJICovCisJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmYWItPmR3b3JrLCBhYi0+bGlua19zdGF0dXNfd2FpdCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGFiODUwMF91c2JfaXJxX2ZyZWUoc3RydWN0IGFiODUwMF91c2IgKmFiKQoreworCWlmIChhYi0+cmV2IDwgMHgyMCkgeworCQlmcmVlX2lycShhYi0+aXJxX251bV9pZF9yaXNlLCBhYik7CisJCWZyZWVfaXJxKGFiLT5pcnFfbnVtX2lkX2ZhbGwsIGFiKTsKKwkJZnJlZV9pcnEoYWItPmlycV9udW1fdmJ1c19yaXNlLCBhYik7CisJCWZyZWVfaXJxKGFiLT5pcnFfbnVtX3ZidXNfZmFsbCwgYWIpOworCX0gZWxzZSB7CisJCWZyZWVfaXJxKGFiLT5pcnFfbnVtX2xpbmtfc3RhdHVzLCBhYik7CisJfQorfQorCitzdGF0aWMgaW50IGFiODUwMF91c2JfdjF4X3Jlc19zZXR1cChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQkJCXN0cnVjdCBhYjg1MDBfdXNiICphYikKK3sKKwlpbnQgZXJyOworCisJYWItPmlycV9udW1faWRfcmlzZSA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKHBkZXYsICJJRF9XQUtFVVBfUiIpOworCWlmIChhYi0+aXJxX251bV9pZF9yaXNlIDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJJRCByaXNlIGlycSBub3QgZm91bmRcbiIpOworCQlyZXR1cm4gYWItPmlycV9udW1faWRfcmlzZTsKKwl9CisJZXJyID0gcmVxdWVzdF90aHJlYWRlZF9pcnEoYWItPmlycV9udW1faWRfcmlzZSwgTlVMTCwKKwkJYWI4NTAwX3VzYl92MXhfY29tbW9uX2lycSwKKwkJSVJRRl9OT19TVVNQRU5EIHwgSVJRRl9TSEFSRUQsCisJCSJ1c2ItaWQtcmlzZSIsIGFiKTsKKwlpZiAoZXJyIDwgMCkgeworCQlkZXZfZXJyKGFiLT5kZXYsICJyZXF1ZXN0X2lycSBmYWlsZWQgZm9yIElEIHJpc2UgaXJxXG4iKTsKKwkJZ290byBmYWlsMDsKKwl9CisKKwlhYi0+aXJxX251bV9pZF9mYWxsID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUocGRldiwgIklEX1dBS0VVUF9GIik7CisJaWYgKGFiLT5pcnFfbnVtX2lkX2ZhbGwgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIklEIGZhbGwgaXJxIG5vdCBmb3VuZFxuIik7CisJCXJldHVybiBhYi0+aXJxX251bV9pZF9mYWxsOworCX0KKwllcnIgPSByZXF1ZXN0X3RocmVhZGVkX2lycShhYi0+aXJxX251bV9pZF9mYWxsLCBOVUxMLAorCQlhYjg1MDBfdXNiX3YxeF9jb21tb25faXJxLAorCQlJUlFGX05PX1NVU1BFTkQgfCBJUlFGX1NIQVJFRCwKKwkJInVzYi1pZC1mYWxsIiwgYWIpOworCWlmIChlcnIgPCAwKSB7CisJCWRldl9lcnIoYWItPmRldiwgInJlcXVlc3RfaXJxIGZhaWxlZCBmb3IgSUQgZmFsbCBpcnFcbiIpOworCQlnb3RvIGZhaWwxOworCX0KKworCWFiLT5pcnFfbnVtX3ZidXNfcmlzZSA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKHBkZXYsICJWQlVTX0RFVF9SIik7CisJaWYgKGFiLT5pcnFfbnVtX3ZidXNfcmlzZSA8IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiVkJVUyByaXNlIGlycSBub3QgZm91bmRcbiIpOworCQlyZXR1cm4gYWItPmlycV9udW1fdmJ1c19yaXNlOworCX0KKwllcnIgPSByZXF1ZXN0X3RocmVhZGVkX2lycShhYi0+aXJxX251bV92YnVzX3Jpc2UsIE5VTEwsCisJCWFiODUwMF91c2JfdjF4X2NvbW1vbl9pcnEsCisJCUlSUUZfTk9fU1VTUEVORCB8IElSUUZfU0hBUkVELAorCQkidXNiLXZidXMtcmlzZSIsIGFiKTsKKwlpZiAoZXJyIDwgMCkgeworCQlkZXZfZXJyKGFiLT5kZXYsICJyZXF1ZXN0X2lycSBmYWlsZWQgZm9yIFZidXMgcmlzZSBpcnFcbiIpOworCQlnb3RvIGZhaWwyOworCX0KKworCWFiLT5pcnFfbnVtX3ZidXNfZmFsbCA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKHBkZXYsICJWQlVTX0RFVF9GIik7CisJaWYgKGFiLT5pcnFfbnVtX3ZidXNfZmFsbCA8IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiVkJVUyBmYWxsIGlycSBub3QgZm91bmRcbiIpOworCQlyZXR1cm4gYWItPmlycV9udW1fdmJ1c19mYWxsOworCX0KKwllcnIgPSByZXF1ZXN0X3RocmVhZGVkX2lycShhYi0+aXJxX251bV92YnVzX2ZhbGwsIE5VTEwsCisJCWFiODUwMF91c2JfdjF4X3ZidXNfZmFsbF9pcnEsCisJCUlSUUZfTk9fU1VTUEVORCB8IElSUUZfU0hBUkVELAorCQkidXNiLXZidXMtZmFsbCIsIGFiKTsKKwlpZiAoZXJyIDwgMCkgeworCQlkZXZfZXJyKGFiLT5kZXYsICJyZXF1ZXN0X2lycSBmYWlsZWQgZm9yIFZidXMgZmFsbCBpcnFcbiIpOworCQlnb3RvIGZhaWwzOworCX0KKworCXJldHVybiAwOworZmFpbDM6CisJZnJlZV9pcnEoYWItPmlycV9udW1fdmJ1c19yaXNlLCBhYik7CitmYWlsMjoKKwlmcmVlX2lycShhYi0+aXJxX251bV9pZF9mYWxsLCBhYik7CitmYWlsMToKKwlmcmVlX2lycShhYi0+aXJxX251bV9pZF9yaXNlLCBhYik7CitmYWlsMDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGFiODUwMF91c2JfdjJfcmVzX3NldHVwKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJCQkJc3RydWN0IGFiODUwMF91c2IgKmFiKQoreworCWludCBlcnI7CisKKwlhYi0+aXJxX251bV9saW5rX3N0YXR1cyA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKHBkZXYsCisJCQkJCQkiVVNCX0xJTktfU1RBVFVTIik7CisJaWYgKGFiLT5pcnFfbnVtX2xpbmtfc3RhdHVzIDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJMaW5rIHN0YXR1cyBpcnEgbm90IGZvdW5kXG4iKTsKKwkJcmV0dXJuIGFiLT5pcnFfbnVtX2xpbmtfc3RhdHVzOworCX0KKworCWVyciA9IHJlcXVlc3RfdGhyZWFkZWRfaXJxKGFiLT5pcnFfbnVtX2xpbmtfc3RhdHVzLCBOVUxMLAorCQlhYjg1MDBfdXNiX3YyMF9pcnEsCisJCUlSUUZfTk9fU1VTUEVORCB8IElSUUZfU0hBUkVELAorCQkidXNiLWxpbmstc3RhdHVzIiwgYWIpOworCWlmIChlcnIgPCAwKSB7CisJCWRldl9lcnIoYWItPmRldiwKKwkJCSJyZXF1ZXN0X2lycSBmYWlsZWQgZm9yIGxpbmsgc3RhdHVzIGlycVxuIik7CisJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGFiODUwMF91c2JfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgYWI4NTAwX3VzYgkqYWI7CisJaW50IGVycjsKKwlpbnQgcmV2OworCisJcmV2ID0gYWJ4NTAwX2dldF9jaGlwX2lkKCZwZGV2LT5kZXYpOworCWlmIChyZXYgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNoaXAgaWQgcmVhZCBmYWlsZWRcbiIpOworCQlyZXR1cm4gcmV2OworCX0gZWxzZSBpZiAocmV2IDwgMHgxMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJVbnN1cHBvcnRlZCBBQjg1MDAgY2hpcFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWFiID0ga3phbGxvYyhzaXplb2YgKmFiLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWFiKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWFiLT5kZXYJCQk9ICZwZGV2LT5kZXY7CisJYWItPnJldgkJCT0gcmV2OworCWFiLT5vdGcuZGV2CQk9IGFiLT5kZXY7CisJYWItPm90Zy5sYWJlbAkJPSAiYWI4NTAwIjsKKwlhYi0+b3RnLnN0YXRlCQk9IE9UR19TVEFURV9VTkRFRklORUQ7CisJYWItPm90Zy5zZXRfaG9zdAk9IGFiODUwMF91c2Jfc2V0X2hvc3Q7CisJYWItPm90Zy5zZXRfcGVyaXBoZXJhbAk9IGFiODUwMF91c2Jfc2V0X3BlcmlwaGVyYWw7CisJYWItPm90Zy5zZXRfc3VzcGVuZAk9IGFiODUwMF91c2Jfc2V0X3N1c3BlbmQ7CisJYWItPm90Zy5zZXRfcG93ZXIJPSBhYjg1MDBfdXNiX3NldF9wb3dlcjsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGFiKTsKKworCUJMT0NLSU5HX0lOSVRfTk9USUZJRVJfSEVBRCgmYWItPm90Zy5ub3RpZmllcik7CisKKwkvKiB2MTogV2FpdCBmb3IgbGluayBzdGF0dXMgdG8gYmVjb21lIHN0YWJsZS4KKwkgKiBhbGw6IFVwZGF0ZXMgZm9ybSBzZXRfaG9zdCBhbmQgc2V0X3BlcmlwaGVyYWwgYXMgdGhleSBhcmUgYXRvbWljLgorCSAqLworCUlOSVRfREVMQVlFRF9XT1JLKCZhYi0+ZHdvcmssIGFiODUwMF91c2JfZGVsYXllZF93b3JrKTsKKworCS8qIGFsbDogRGlzYWJsZSBwaHkgd2hlbiBjYWxsZWQgZnJvbSBzZXRfaG9zdCBhbmQgc2V0X3BlcmlwaGVyYWwgKi8KKwlJTklUX1dPUksoJmFiLT5waHlfZGlzX3dvcmssIGFiODUwMF91c2JfcGh5X2Rpc2FibGVfd29yayk7CisKKwlpZiAoYWItPnJldiA8IDB4MjApIHsKKwkJZXJyID0gYWI4NTAwX3VzYl92MXhfcmVzX3NldHVwKHBkZXYsIGFiKTsKKwkJYWItPmxpbmtfc3RhdHVzX3dhaXQgPSBBQjg1MDBfVjF4X0xJTktfU1RBVF9XQUlUOworCX0gZWxzZSB7CisJCWVyciA9IGFiODUwMF91c2JfdjJfcmVzX3NldHVwKHBkZXYsIGFiKTsKKwl9CisKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBmYWlsMDsKKworCWVyciA9IG90Z19zZXRfdHJhbnNjZWl2ZXIoJmFiLT5vdGcpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2FuJ3QgcmVnaXN0ZXIgdHJhbnNjZWl2ZXJcbiIpOworCQlnb3RvIGZhaWwxOworCX0KKworCWRldl9pbmZvKCZwZGV2LT5kZXYsICJBQjg1MDAgdXNiIGRyaXZlciBpbml0aWFsaXplZFxuIik7CisKKwlyZXR1cm4gMDsKK2ZhaWwxOgorCWFiODUwMF91c2JfaXJxX2ZyZWUoYWIpOworZmFpbDA6CisJa2ZyZWUoYWIpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGFiODUwMF91c2JfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGFiODUwMF91c2IgKmFiID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlhYjg1MDBfdXNiX2lycV9mcmVlKGFiKTsKKworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmYWItPmR3b3JrKTsKKworCWNhbmNlbF93b3JrX3N5bmMoJmFiLT5waHlfZGlzX3dvcmspOworCisJb3RnX3NldF90cmFuc2NlaXZlcihOVUxMKTsKKworCWFiODUwMF91c2JfaG9zdF9waHlfZGlzKGFiKTsKKwlhYjg1MDBfdXNiX3BlcmlfcGh5X2RpcyhhYik7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKworCWtmcmVlKGFiKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhYjg1MDBfdXNiX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gYWI4NTAwX3VzYl9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGFiODUwMF91c2JfcmVtb3ZlKSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAiYWI4NTAwLXVzYiIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBhYjg1MDBfdXNiX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZhYjg1MDBfdXNiX2RyaXZlcik7Cit9CitzdWJzeXNfaW5pdGNhbGwoYWI4NTAwX3VzYl9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IGFiODUwMF91c2JfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZhYjg1MDBfdXNiX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChhYjg1MDBfdXNiX2V4aXQpOworCitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOmFiODUwMF91c2IiKTsKK01PRFVMRV9BVVRIT1IoIlNULUVyaWNzc29uIEFCIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkFCODUwMCB1c2IgdHJhbnNjZWl2ZXIgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9vdGcvaXNwMTMwMV9vbWFwLmMgYi9kcml2ZXJzL3VzYi9vdGcvaXNwMTMwMV9vbWFwLmMKaW5kZXggNDU2OTY5NC4uZTAwZmExYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivb3RnL2lzcDEzMDFfb21hcC5jCisrKyBiL2RyaXZlcnMvdXNiL290Zy9pc3AxMzAxX29tYXAuYwpAQCAtMTI0Nyw3ICsxMjQ3LDcgQEAKIAlpc3AtPnRpbWVyLmRhdGEgPSAwOwogCXNldF9iaXQoV09SS19TVE9QLCAmaXNwLT50b2RvKTsKIAlkZWxfdGltZXJfc3luYygmaXNwLT50aW1lcik7Ci0JZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwlmbHVzaF93b3JrX3N5bmMoJmlzcC0+d29yayk7CiAKIAlwdXRfZGV2aWNlKCZpMmMtPmRldik7CiAJdGhlX3RyYW5zY2VpdmVyID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL290Zy9tc203Mmtfb3RnLmMgYi9kcml2ZXJzL3VzYi9vdGcvbXNtNzJrX290Zy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjZDUyZWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9vdGcvbXNtNzJrX290Zy5jCkBAIC0wLDAgKzEsMTEyNSBAQAorLyogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTAsIENvZGUgQXVyb3JhIEZvcnVtLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKKyAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CisKKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC91c2Ivb3RnLmg+CisjaW5jbHVkZSA8bGludXgvdXNiL3VscGkuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvZ2FkZ2V0Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiL2hjZC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi9tc21faHN1c2IuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvbXNtX2hzdXNiX2h3Lmg+CisKKyNpbmNsdWRlIDxtYWNoL2Nsay5oPgorCisjZGVmaW5lIE1TTV9VU0JfQkFTRQkobW90Zy0+cmVncykKKyNkZWZpbmUgRFJJVkVSX05BTUUJIm1zbV9vdGciCisKKyNkZWZpbmUgVUxQSV9JT19USU1FT1VUX1VTRUMJKDEwICogMTAwMCkKK3N0YXRpYyBpbnQgdWxwaV9yZWFkKHN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIgKm90ZywgdTMyIHJlZykKK3sKKwlzdHJ1Y3QgbXNtX290ZyAqbW90ZyA9IGNvbnRhaW5lcl9vZihvdGcsIHN0cnVjdCBtc21fb3RnLCBvdGcpOworCWludCBjbnQgPSAwOworCisJLyogaW5pdGlhdGUgcmVhZCBvcGVyYXRpb24gKi8KKwl3cml0ZWwoVUxQSV9SVU4gfCBVTFBJX1JFQUQgfCBVTFBJX0FERFIocmVnKSwKKwkgICAgICAgVVNCX1VMUElfVklFV1BPUlQpOworCisJLyogd2FpdCBmb3IgY29tcGxldGlvbiAqLworCXdoaWxlIChjbnQgPCBVTFBJX0lPX1RJTUVPVVRfVVNFQykgeworCQlpZiAoIShyZWFkbChVU0JfVUxQSV9WSUVXUE9SVCkgJiBVTFBJX1JVTikpCisJCQlicmVhazsKKwkJdWRlbGF5KDEpOworCQljbnQrKzsKKwl9CisKKwlpZiAoY250ID49IFVMUElfSU9fVElNRU9VVF9VU0VDKSB7CisJCWRldl9lcnIob3RnLT5kZXYsICJ1bHBpX3JlYWQ6IHRpbWVvdXQgJTA4eFxuIiwKKwkJCXJlYWRsKFVTQl9VTFBJX1ZJRVdQT1JUKSk7CisJCXJldHVybiAtRVRJTUVET1VUOworCX0KKwlyZXR1cm4gVUxQSV9EQVRBX1JFQUQocmVhZGwoVVNCX1VMUElfVklFV1BPUlQpKTsKK30KKworc3RhdGljIGludCB1bHBpX3dyaXRlKHN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIgKm90ZywgdTMyIHZhbCwgdTMyIHJlZykKK3sKKwlzdHJ1Y3QgbXNtX290ZyAqbW90ZyA9IGNvbnRhaW5lcl9vZihvdGcsIHN0cnVjdCBtc21fb3RnLCBvdGcpOworCWludCBjbnQgPSAwOworCisJLyogaW5pdGlhdGUgd3JpdGUgb3BlcmF0aW9uICovCisJd3JpdGVsKFVMUElfUlVOIHwgVUxQSV9XUklURSB8CisJICAgICAgIFVMUElfQUREUihyZWcpIHwgVUxQSV9EQVRBKHZhbCksCisJICAgICAgIFVTQl9VTFBJX1ZJRVdQT1JUKTsKKworCS8qIHdhaXQgZm9yIGNvbXBsZXRpb24gKi8KKwl3aGlsZSAoY250IDwgVUxQSV9JT19USU1FT1VUX1VTRUMpIHsKKwkJaWYgKCEocmVhZGwoVVNCX1VMUElfVklFV1BPUlQpICYgVUxQSV9SVU4pKQorCQkJYnJlYWs7CisJCXVkZWxheSgxKTsKKwkJY250Kys7CisJfQorCisJaWYgKGNudCA+PSBVTFBJX0lPX1RJTUVPVVRfVVNFQykgeworCQlkZXZfZXJyKG90Zy0+ZGV2LCAidWxwaV93cml0ZTogdGltZW91dFxuIik7CisJCXJldHVybiAtRVRJTUVET1VUOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBvdGdfaW9fYWNjZXNzX29wcyBtc21fb3RnX2lvX29wcyA9IHsKKwkucmVhZCA9IHVscGlfcmVhZCwKKwkud3JpdGUgPSB1bHBpX3dyaXRlLAorfTsKKworc3RhdGljIHZvaWQgdWxwaV9pbml0KHN0cnVjdCBtc21fb3RnICptb3RnKQoreworCXN0cnVjdCBtc21fb3RnX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gbW90Zy0+cGRhdGE7CisJaW50ICpzZXEgPSBwZGF0YS0+cGh5X2luaXRfc2VxOworCisJaWYgKCFzZXEpCisJCXJldHVybjsKKworCXdoaWxlIChzZXFbMF0gPj0gMCkgeworCQlkZXZfdmRiZyhtb3RnLT5vdGcuZGV2LCAidWxwaTogd3JpdGUgMHglMDJ4IHRvIDB4JTAyeFxuIiwKKwkJCQlzZXFbMF0sIHNlcVsxXSk7CisJCXVscGlfd3JpdGUoJm1vdGctPm90Zywgc2VxWzBdLCBzZXFbMV0pOworCQlzZXEgKz0gMjsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbXNtX290Z19saW5rX2Nsa19yZXNldChzdHJ1Y3QgbXNtX290ZyAqbW90ZywgYm9vbCBhc3NlcnQpCit7CisJaW50IHJldDsKKworCWlmIChhc3NlcnQpIHsKKwkJcmV0ID0gY2xrX3Jlc2V0KG1vdGctPmNsaywgQ0xLX1JFU0VUX0FTU0VSVCk7CisJCWlmIChyZXQpCisJCQlkZXZfZXJyKG1vdGctPm90Zy5kZXYsICJ1c2IgaHNfY2xrIGFzc2VydCBmYWlsZWRcbiIpOworCX0gZWxzZSB7CisJCXJldCA9IGNsa19yZXNldChtb3RnLT5jbGssIENMS19SRVNFVF9ERUFTU0VSVCk7CisJCWlmIChyZXQpCisJCQlkZXZfZXJyKG1vdGctPm90Zy5kZXYsICJ1c2IgaHNfY2xrIGRlYXNzZXJ0IGZhaWxlZFxuIik7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbXNtX290Z19waHlfY2xrX3Jlc2V0KHN0cnVjdCBtc21fb3RnICptb3RnKQoreworCWludCByZXQ7CisKKwlyZXQgPSBjbGtfcmVzZXQobW90Zy0+cGh5X3Jlc2V0X2NsaywgQ0xLX1JFU0VUX0FTU0VSVCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKG1vdGctPm90Zy5kZXYsICJ1c2IgcGh5IGNsayBhc3NlcnQgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJdXNsZWVwX3JhbmdlKDEwMDAwLCAxMjAwMCk7CisJcmV0ID0gY2xrX3Jlc2V0KG1vdGctPnBoeV9yZXNldF9jbGssIENMS19SRVNFVF9ERUFTU0VSVCk7CisJaWYgKHJldCkKKwkJZGV2X2Vycihtb3RnLT5vdGcuZGV2LCAidXNiIHBoeSBjbGsgZGVhc3NlcnQgZmFpbGVkXG4iKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG1zbV9vdGdfcGh5X3Jlc2V0KHN0cnVjdCBtc21fb3RnICptb3RnKQoreworCXUzMiB2YWw7CisJaW50IHJldDsKKwlpbnQgcmV0cmllczsKKworCXJldCA9IG1zbV9vdGdfbGlua19jbGtfcmVzZXQobW90ZywgMSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlyZXQgPSBtc21fb3RnX3BoeV9jbGtfcmVzZXQobW90Zyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlyZXQgPSBtc21fb3RnX2xpbmtfY2xrX3Jlc2V0KG1vdGcsIDApOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwl2YWwgPSByZWFkbChVU0JfUE9SVFNDKSAmIH5QT1JUU0NfUFRTX01BU0s7CisJd3JpdGVsKHZhbCB8IFBPUlRTQ19QVFNfVUxQSSwgVVNCX1BPUlRTQyk7CisKKwlmb3IgKHJldHJpZXMgPSAzOyByZXRyaWVzID4gMDsgcmV0cmllcy0tKSB7CisJCXJldCA9IHVscGlfd3JpdGUoJm1vdGctPm90ZywgVUxQSV9GVU5DX0NUUkxfU1VTUEVORE0sCisJCQkJVUxQSV9DTFIoVUxQSV9GVU5DX0NUUkwpKTsKKwkJaWYgKCFyZXQpCisJCQlicmVhazsKKwkJcmV0ID0gbXNtX290Z19waHlfY2xrX3Jlc2V0KG1vdGcpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisJaWYgKCFyZXRyaWVzKQorCQlyZXR1cm4gLUVUSU1FRE9VVDsKKworCS8qIFRoaXMgcmVzZXQgY2FsaWJyYXRlcyB0aGUgcGh5LCBpZiB0aGUgYWJvdmUgd3JpdGUgc3VjY2VlZGVkICovCisJcmV0ID0gbXNtX290Z19waHlfY2xrX3Jlc2V0KG1vdGcpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlmb3IgKHJldHJpZXMgPSAzOyByZXRyaWVzID4gMDsgcmV0cmllcy0tKSB7CisJCXJldCA9IHVscGlfcmVhZCgmbW90Zy0+b3RnLCBVTFBJX0RFQlVHKTsKKwkJaWYgKHJldCAhPSAtRVRJTUVET1VUKQorCQkJYnJlYWs7CisJCXJldCA9IG1zbV9vdGdfcGh5X2Nsa19yZXNldChtb3RnKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCWlmICghcmV0cmllcykKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisKKwlkZXZfaW5mbyhtb3RnLT5vdGcuZGV2LCAicGh5X3Jlc2V0OiBzdWNjZXNzXG4iKTsKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBMSU5LX1JFU0VUX1RJTUVPVVRfVVNFQwkJKDI1MCAqIDEwMDApCitzdGF0aWMgaW50IG1zbV9vdGdfcmVzZXQoc3RydWN0IG90Z190cmFuc2NlaXZlciAqb3RnKQoreworCXN0cnVjdCBtc21fb3RnICptb3RnID0gY29udGFpbmVyX29mKG90Zywgc3RydWN0IG1zbV9vdGcsIG90Zyk7CisJc3RydWN0IG1zbV9vdGdfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBtb3RnLT5wZGF0YTsKKwlpbnQgY250ID0gMDsKKwlpbnQgcmV0OworCXUzMiB2YWwgPSAwOworCXUzMiB1bHBpX3ZhbCA9IDA7CisKKwlyZXQgPSBtc21fb3RnX3BoeV9yZXNldChtb3RnKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIob3RnLT5kZXYsICJwaHlfcmVzZXQgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwl1bHBpX2luaXQobW90Zyk7CisKKwl3cml0ZWwoVVNCQ01EX1JFU0VULCBVU0JfVVNCQ01EKTsKKwl3aGlsZSAoY250IDwgTElOS19SRVNFVF9USU1FT1VUX1VTRUMpIHsKKwkJaWYgKCEocmVhZGwoVVNCX1VTQkNNRCkgJiBVU0JDTURfUkVTRVQpKQorCQkJYnJlYWs7CisJCXVkZWxheSgxKTsKKwkJY250Kys7CisJfQorCWlmIChjbnQgPj0gTElOS19SRVNFVF9USU1FT1VUX1VTRUMpCisJCXJldHVybiAtRVRJTUVET1VUOworCisJLyogc2VsZWN0IFVMUEkgcGh5ICovCisJd3JpdGVsKDB4ODAwMDAwMDAsIFVTQl9QT1JUU0MpOworCisJbXNsZWVwKDEwMCk7CisKKwl3cml0ZWwoMHgwLCBVU0JfQUhCQlVSU1QpOworCXdyaXRlbCgweDAwLCBVU0JfQUhCTU9ERSk7CisKKwlpZiAocGRhdGEtPm90Z19jb250cm9sID09IE9UR19QSFlfQ09OVFJPTCkgeworCQl2YWwgPSByZWFkbChVU0JfT1RHU0MpOworCQlpZiAocGRhdGEtPm1vZGUgPT0gVVNCX09URykgeworCQkJdWxwaV92YWwgPSBVTFBJX0lOVF9JREdSRCB8IFVMUElfSU5UX1NFU1NfVkFMSUQ7CisJCQl2YWwgfD0gT1RHU0NfSURJRSB8IE9UR1NDX0JTVklFOworCQl9IGVsc2UgaWYgKHBkYXRhLT5tb2RlID09IFVTQl9QRVJJUEhFUkFMKSB7CisJCQl1bHBpX3ZhbCA9IFVMUElfSU5UX1NFU1NfVkFMSUQ7CisJCQl2YWwgfD0gT1RHU0NfQlNWSUU7CisJCX0KKwkJd3JpdGVsKHZhbCwgVVNCX09UR1NDKTsKKwkJdWxwaV93cml0ZShvdGcsIHVscGlfdmFsLCBVTFBJX1VTQl9JTlRfRU5fUklTRSk7CisJCXVscGlfd3JpdGUob3RnLCB1bHBpX3ZhbCwgVUxQSV9VU0JfSU5UX0VOX0ZBTEwpOworCX0KKworCXJldHVybiAwOworfQorCisjZGVmaW5lIFBIWV9TVVNQRU5EX1RJTUVPVVRfVVNFQwkoNTAwICogMTAwMCkKK3N0YXRpYyBpbnQgbXNtX290Z19zdXNwZW5kKHN0cnVjdCBtc21fb3RnICptb3RnKQoreworCXN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIgKm90ZyA9ICZtb3RnLT5vdGc7CisJc3RydWN0IHVzYl9idXMgKmJ1cyA9IG90Zy0+aG9zdDsKKwlzdHJ1Y3QgbXNtX290Z19wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IG1vdGctPnBkYXRhOworCWludCBjbnQgPSAwOworCisJaWYgKGF0b21pY19yZWFkKCZtb3RnLT5pbl9scG0pKQorCQlyZXR1cm4gMDsKKworCWRpc2FibGVfaXJxKG1vdGctPmlycSk7CisJLyoKKwkgKiBJbnRlcnJ1cHQgTGF0Y2ggUmVnaXN0ZXIgYXV0by1jbGVhciBmZWF0dXJlIGlzIG5vdCBwcmVzZW50CisJICogaW4gYWxsIFBIWSB2ZXJzaW9ucy4gTGF0Y2ggcmVnaXN0ZXIgaXMgY2xlYXIgb24gcmVhZCB0eXBlLgorCSAqIENsZWFyIGxhdGNoIHJlZ2lzdGVyIHRvIGF2b2lkIHNwdXJpb3VzIHdha2V1cCBmcm9tCisJICogbG93IHBvd2VyIG1vZGUgKExQTSkuCisJICovCisJdWxwaV9yZWFkKG90ZywgMHgxNCk7CisKKwkvKgorCSAqIFBIWSBjb21wYXJhdG9ycyBhcmUgZGlzYWJsZWQgd2hlbiBQSFkgZW50ZXJzIGludG8gbG93IHBvd2VyCisJICogbW9kZSAoTFBNKS4gS2VlcCBQSFkgY29tcGFyYXRvcnMgT04gaW4gTFBNIG9ubHkgd2hlbiB3ZSBleHBlY3QKKwkgKiBWQlVTL0lkIG5vdGlmaWNhdGlvbnMgZnJvbSBVU0IgUEhZLiBPdGhlcndpc2UgdHVybiBvZmYgVVNCCisJICogUEhZIGNvbXBhcmF0b3JzLiBUaGlzIHNhdmUgc2lnbmlmaWNhbnQgYW1vdW50IG9mIHBvd2VyLgorCSAqLworCWlmIChwZGF0YS0+b3RnX2NvbnRyb2wgPT0gT1RHX1BIWV9DT05UUk9MKQorCQl1bHBpX3dyaXRlKG90ZywgMHgwMSwgMHgzMCk7CisKKwkvKgorCSAqIFBMTCBpcyBub3QgdHVybmVkIG9mZiB3aGVuIFBIWSBlbnRlcnMgaW50byBsb3cgcG93ZXIgbW9kZSAoTFBNKS4KKwkgKiBEaXNhYmxlIFBMTCBmb3IgbWF4aW11bSBwb3dlciBzYXZpbmdzLgorCSAqLworCXVscGlfd3JpdGUob3RnLCAweDA4LCAweDA5KTsKKworCS8qCisJICogUEhZIG1heSB0YWtlIHNvbWUgdGltZSBvciBldmVuIGZhaWwgdG8gZW50ZXIgaW50byBsb3cgcG93ZXIKKwkgKiBtb2RlIChMUE0pLiBIZW5jZSBwb2xsIGZvciA1MDAgbXNlYyBhbmQgcmVzZXQgdGhlIFBIWSBhbmQgbGluaworCSAqIGluIGZhaWx1cmUgY2FzZS4KKwkgKi8KKwl3cml0ZWwocmVhZGwoVVNCX1BPUlRTQykgfCBQT1JUU0NfUEhDRCwgVVNCX1BPUlRTQyk7CisJd2hpbGUgKGNudCA8IFBIWV9TVVNQRU5EX1RJTUVPVVRfVVNFQykgeworCQlpZiAocmVhZGwoVVNCX1BPUlRTQykgJiBQT1JUU0NfUEhDRCkKKwkJCWJyZWFrOworCQl1ZGVsYXkoMSk7CisJCWNudCsrOworCX0KKworCWlmIChjbnQgPj0gUEhZX1NVU1BFTkRfVElNRU9VVF9VU0VDKSB7CisJCWRldl9lcnIob3RnLT5kZXYsICJVbmFibGUgdG8gc3VzcGVuZCBQSFlcbiIpOworCQltc21fb3RnX3Jlc2V0KG90Zyk7CisJCWVuYWJsZV9pcnEobW90Zy0+aXJxKTsKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisJfQorCisJLyoKKwkgKiBQSFkgaGFzIGNhcGFiaWxpdHkgdG8gZ2VuZXJhdGUgaW50ZXJydXB0IGFzeW5jaHJvbm91c2x5IGluIGxvdworCSAqIHBvd2VyIG1vZGUgKExQTSkuIFRoaXMgaW50ZXJydXB0IGlzIGxldmVsIHRyaWdnZXJlZC4gU28gVVNCIElSUQorCSAqIGxpbmUgbXVzdCBiZSBkaXNhYmxlZCB0aWxsIGFzeW5jIGludGVycnVwdCBlbmFibGUgYml0IGlzIGNsZWFyZWQKKwkgKiBpbiBVU0JDTUQgcmVnaXN0ZXIuIEFzc2VydCBTVFAgKFVMUEkgaW50ZXJmYWNlIFNUT1Agc2lnbmFsKSB0bworCSAqIGJsb2NrIGRhdGEgY29tbXVuaWNhdGlvbiBmcm9tIFBIWS4KKwkgKi8KKwl3cml0ZWwocmVhZGwoVVNCX1VTQkNNRCkgfCBBU1lOQ19JTlRSX0NUUkwgfCBVTFBJX1NUUF9DVFJMLCBVU0JfVVNCQ01EKTsKKworCWNsa19kaXNhYmxlKG1vdGctPnBjbGspOworCWNsa19kaXNhYmxlKG1vdGctPmNsayk7CisJaWYgKG1vdGctPmNvcmVfY2xrKQorCQljbGtfZGlzYWJsZShtb3RnLT5jb3JlX2Nsayk7CisKKwlpZiAoZGV2aWNlX21heV93YWtldXAob3RnLT5kZXYpKQorCQllbmFibGVfaXJxX3dha2UobW90Zy0+aXJxKTsKKwlpZiAoYnVzKQorCQljbGVhcl9iaXQoSENEX0ZMQUdfSFdfQUNDRVNTSUJMRSwgJihidXNfdG9faGNkKGJ1cykpLT5mbGFncyk7CisKKwlhdG9taWNfc2V0KCZtb3RnLT5pbl9scG0sIDEpOworCWVuYWJsZV9pcnEobW90Zy0+aXJxKTsKKworCWRldl9pbmZvKG90Zy0+ZGV2LCAiVVNCIGluIGxvdyBwb3dlciBtb2RlXG4iKTsKKworCXJldHVybiAwOworfQorCisjZGVmaW5lIFBIWV9SRVNVTUVfVElNRU9VVF9VU0VDCSgxMDAgKiAxMDAwKQorc3RhdGljIGludCBtc21fb3RnX3Jlc3VtZShzdHJ1Y3QgbXNtX290ZyAqbW90ZykKK3sKKwlzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyICpvdGcgPSAmbW90Zy0+b3RnOworCXN0cnVjdCB1c2JfYnVzICpidXMgPSBvdGctPmhvc3Q7CisJaW50IGNudCA9IDA7CisJdW5zaWduZWQgdGVtcDsKKworCWlmICghYXRvbWljX3JlYWQoJm1vdGctPmluX2xwbSkpCisJCXJldHVybiAwOworCisJY2xrX2VuYWJsZShtb3RnLT5wY2xrKTsKKwljbGtfZW5hYmxlKG1vdGctPmNsayk7CisJaWYgKG1vdGctPmNvcmVfY2xrKQorCQljbGtfZW5hYmxlKG1vdGctPmNvcmVfY2xrKTsKKworCXRlbXAgPSByZWFkbChVU0JfVVNCQ01EKTsKKwl0ZW1wICY9IH5BU1lOQ19JTlRSX0NUUkw7CisJdGVtcCAmPSB+VUxQSV9TVFBfQ1RSTDsKKwl3cml0ZWwodGVtcCwgVVNCX1VTQkNNRCk7CisKKwkvKgorCSAqIFBIWSBjb21lcyBvdXQgb2YgbG93IHBvd2VyIG1vZGUgKExQTSkgaW4gY2FzZSBvZiB3YWtldXAKKwkgKiBmcm9tIGFzeW5jaHJvbm91cyBpbnRlcnJ1cHQuCisJICovCisJaWYgKCEocmVhZGwoVVNCX1BPUlRTQykgJiBQT1JUU0NfUEhDRCkpCisJCWdvdG8gc2tpcF9waHlfcmVzdW1lOworCisJd3JpdGVsKHJlYWRsKFVTQl9QT1JUU0MpICYgflBPUlRTQ19QSENELCBVU0JfUE9SVFNDKTsKKwl3aGlsZSAoY250IDwgUEhZX1JFU1VNRV9USU1FT1VUX1VTRUMpIHsKKwkJaWYgKCEocmVhZGwoVVNCX1BPUlRTQykgJiBQT1JUU0NfUEhDRCkpCisJCQlicmVhazsKKwkJdWRlbGF5KDEpOworCQljbnQrKzsKKwl9CisKKwlpZiAoY250ID49IFBIWV9SRVNVTUVfVElNRU9VVF9VU0VDKSB7CisJCS8qCisJCSAqIFRoaXMgaXMgYSBmYXRhbCBlcnJvci4gUmVzZXQgdGhlIGxpbmsgYW5kCisJCSAqIFBIWS4gVVNCIHN0YXRlIGNhbiBub3QgYmUgcmVzdG9yZWQuIFJlLWluc2VydGlvbgorCQkgKiBvZiBVU0IgY2FibGUgaXMgdGhlIG9ubHkgd2F5IHRvIGdldCBVU0Igd29ya2luZy4KKwkJICovCisJCWRldl9lcnIob3RnLT5kZXYsICJVbmFibGUgdG8gcmVzdW1lIFVTQi4iCisJCQkJIlJlLXBsdWdpbiB0aGUgY2FibGVcbiIpOworCQltc21fb3RnX3Jlc2V0KG90Zyk7CisJfQorCitza2lwX3BoeV9yZXN1bWU6CisJaWYgKGRldmljZV9tYXlfd2FrZXVwKG90Zy0+ZGV2KSkKKwkJZGlzYWJsZV9pcnFfd2FrZShtb3RnLT5pcnEpOworCWlmIChidXMpCisJCXNldF9iaXQoSENEX0ZMQUdfSFdfQUNDRVNTSUJMRSwgJihidXNfdG9faGNkKGJ1cykpLT5mbGFncyk7CisKKwlpZiAobW90Zy0+YXN5bmNfaW50KSB7CisJCW1vdGctPmFzeW5jX2ludCA9IDA7CisJCXBtX3J1bnRpbWVfcHV0KG90Zy0+ZGV2KTsKKwkJZW5hYmxlX2lycShtb3RnLT5pcnEpOworCX0KKworCWF0b21pY19zZXQoJm1vdGctPmluX2xwbSwgMCk7CisKKwlkZXZfaW5mbyhvdGctPmRldiwgIlVTQiBleGl0ZWQgZnJvbSBsb3cgcG93ZXIgbW9kZVxuIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbXNtX290Z19zdGFydF9ob3N0KHN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIgKm90ZywgaW50IG9uKQoreworCXN0cnVjdCBtc21fb3RnICptb3RnID0gY29udGFpbmVyX29mKG90Zywgc3RydWN0IG1zbV9vdGcsIG90Zyk7CisJc3RydWN0IG1zbV9vdGdfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBtb3RnLT5wZGF0YTsKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkOworCisJaWYgKCFvdGctPmhvc3QpCisJCXJldHVybjsKKworCWhjZCA9IGJ1c190b19oY2Qob3RnLT5ob3N0KTsKKworCWlmIChvbikgeworCQlkZXZfZGJnKG90Zy0+ZGV2LCAiaG9zdCBvblxuIik7CisKKwkJaWYgKHBkYXRhLT52YnVzX3Bvd2VyKQorCQkJcGRhdGEtPnZidXNfcG93ZXIoMSk7CisJCS8qCisJCSAqIFNvbWUgYm9hcmRzIGhhdmUgYSBzd2l0Y2ggY290cm9sbGVkIGJ5IGdwaW8KKwkJICogdG8gZW5hYmxlL2Rpc2FibGUgaW50ZXJuYWwgSFVCLiBFbmFibGUgaW50ZXJuYWwKKwkJICogSFVCIGJlZm9yZSBraWNraW5nIHRoZSBob3N0LgorCQkgKi8KKwkJaWYgKHBkYXRhLT5zZXR1cF9ncGlvKQorCQkJcGRhdGEtPnNldHVwX2dwaW8oT1RHX1NUQVRFX0FfSE9TVCk7CisjaWZkZWYgQ09ORklHX1VTQgorCQl1c2JfYWRkX2hjZChoY2QsIGhjZC0+aXJxLCBJUlFGX1NIQVJFRCk7CisjZW5kaWYKKwl9IGVsc2UgeworCQlkZXZfZGJnKG90Zy0+ZGV2LCAiaG9zdCBvZmZcbiIpOworCisjaWZkZWYgQ09ORklHX1VTQgorCQl1c2JfcmVtb3ZlX2hjZChoY2QpOworI2VuZGlmCisJCWlmIChwZGF0YS0+c2V0dXBfZ3BpbykKKwkJCXBkYXRhLT5zZXR1cF9ncGlvKE9UR19TVEFURV9VTkRFRklORUQpOworCQlpZiAocGRhdGEtPnZidXNfcG93ZXIpCisJCQlwZGF0YS0+dmJ1c19wb3dlcigwKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbXNtX290Z19zZXRfaG9zdChzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyICpvdGcsIHN0cnVjdCB1c2JfYnVzICpob3N0KQoreworCXN0cnVjdCBtc21fb3RnICptb3RnID0gY29udGFpbmVyX29mKG90Zywgc3RydWN0IG1zbV9vdGcsIG90Zyk7CisJc3RydWN0IHVzYl9oY2QgKmhjZDsKKworCS8qCisJICogRmFpbCBob3N0IHJlZ2lzdHJhdGlvbiBpZiB0aGlzIGJvYXJkIGNhbiBzdXBwb3J0CisJICogb25seSBwZXJpcGhlcmFsIGNvbmZpZ3VyYXRpb24uCisJICovCisJaWYgKG1vdGctPnBkYXRhLT5tb2RlID09IFVTQl9QRVJJUEhFUkFMKSB7CisJCWRldl9pbmZvKG90Zy0+ZGV2LCAiSG9zdCBtb2RlIGlzIG5vdCBzdXBwb3J0ZWRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAoIWhvc3QpIHsKKwkJaWYgKG90Zy0+c3RhdGUgPT0gT1RHX1NUQVRFX0FfSE9TVCkgeworCQkJcG1fcnVudGltZV9nZXRfc3luYyhvdGctPmRldik7CisJCQltc21fb3RnX3N0YXJ0X2hvc3Qob3RnLCAwKTsKKwkJCW90Zy0+aG9zdCA9IE5VTEw7CisJCQlvdGctPnN0YXRlID0gT1RHX1NUQVRFX1VOREVGSU5FRDsKKwkJCXNjaGVkdWxlX3dvcmsoJm1vdGctPnNtX3dvcmspOworCQl9IGVsc2UgeworCQkJb3RnLT5ob3N0ID0gTlVMTDsKKwkJfQorCisJCXJldHVybiAwOworCX0KKworCWhjZCA9IGJ1c190b19oY2QoaG9zdCk7CisJaGNkLT5wb3dlcl9idWRnZXQgPSBtb3RnLT5wZGF0YS0+cG93ZXJfYnVkZ2V0OworCisJb3RnLT5ob3N0ID0gaG9zdDsKKwlkZXZfZGJnKG90Zy0+ZGV2LCAiaG9zdCBkcml2ZXIgcmVnaXN0ZXJlZCB3LyB0cmFuY2VpdmVyXG4iKTsKKworCS8qCisJICogS2ljayB0aGUgc3RhdGUgbWFjaGluZSB3b3JrLCBpZiBwZXJpcGhlcmFsIGlzIG5vdCBzdXBwb3J0ZWQKKwkgKiBvciBwZXJpcGhlcmFsIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCB3aXRoIHVzLgorCSAqLworCWlmIChtb3RnLT5wZGF0YS0+bW9kZSA9PSBVU0JfSE9TVCB8fCBvdGctPmdhZGdldCkgeworCQlwbV9ydW50aW1lX2dldF9zeW5jKG90Zy0+ZGV2KTsKKwkJc2NoZWR1bGVfd29yaygmbW90Zy0+c21fd29yayk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG1zbV9vdGdfc3RhcnRfcGVyaXBoZXJhbChzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyICpvdGcsIGludCBvbikKK3sKKwlzdHJ1Y3QgbXNtX290ZyAqbW90ZyA9IGNvbnRhaW5lcl9vZihvdGcsIHN0cnVjdCBtc21fb3RnLCBvdGcpOworCXN0cnVjdCBtc21fb3RnX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gbW90Zy0+cGRhdGE7CisKKwlpZiAoIW90Zy0+Z2FkZ2V0KQorCQlyZXR1cm47CisKKwlpZiAob24pIHsKKwkJZGV2X2RiZyhvdGctPmRldiwgImdhZGdldCBvblxuIik7CisJCS8qCisJCSAqIFNvbWUgYm9hcmRzIGhhdmUgYSBzd2l0Y2ggY290cm9sbGVkIGJ5IGdwaW8KKwkJICogdG8gZW5hYmxlL2Rpc2FibGUgaW50ZXJuYWwgSFVCLiBEaXNhYmxlIGludGVybmFsCisJCSAqIEhVQiBiZWZvcmUga2lja2luZyB0aGUgZ2FkZ2V0LgorCQkgKi8KKwkJaWYgKHBkYXRhLT5zZXR1cF9ncGlvKQorCQkJcGRhdGEtPnNldHVwX2dwaW8oT1RHX1NUQVRFX0JfUEVSSVBIRVJBTCk7CisJCXVzYl9nYWRnZXRfdmJ1c19jb25uZWN0KG90Zy0+Z2FkZ2V0KTsKKwl9IGVsc2UgeworCQlkZXZfZGJnKG90Zy0+ZGV2LCAiZ2FkZ2V0IG9mZlxuIik7CisJCXVzYl9nYWRnZXRfdmJ1c19kaXNjb25uZWN0KG90Zy0+Z2FkZ2V0KTsKKwkJaWYgKHBkYXRhLT5zZXR1cF9ncGlvKQorCQkJcGRhdGEtPnNldHVwX2dwaW8oT1RHX1NUQVRFX1VOREVGSU5FRCk7CisJfQorCit9CisKK3N0YXRpYyBpbnQgbXNtX290Z19zZXRfcGVyaXBoZXJhbChzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyICpvdGcsCisJCQlzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KQoreworCXN0cnVjdCBtc21fb3RnICptb3RnID0gY29udGFpbmVyX29mKG90Zywgc3RydWN0IG1zbV9vdGcsIG90Zyk7CisKKwkvKgorCSAqIEZhaWwgcGVyaXBoZXJhbCByZWdpc3RyYXRpb24gaWYgdGhpcyBib2FyZCBjYW4gc3VwcG9ydAorCSAqIG9ubHkgaG9zdCBjb25maWd1cmF0aW9uLgorCSAqLworCWlmIChtb3RnLT5wZGF0YS0+bW9kZSA9PSBVU0JfSE9TVCkgeworCQlkZXZfaW5mbyhvdGctPmRldiwgIlBlcmlwaGVyYWwgbW9kZSBpcyBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKCFnYWRnZXQpIHsKKwkJaWYgKG90Zy0+c3RhdGUgPT0gT1RHX1NUQVRFX0JfUEVSSVBIRVJBTCkgeworCQkJcG1fcnVudGltZV9nZXRfc3luYyhvdGctPmRldik7CisJCQltc21fb3RnX3N0YXJ0X3BlcmlwaGVyYWwob3RnLCAwKTsKKwkJCW90Zy0+Z2FkZ2V0ID0gTlVMTDsKKwkJCW90Zy0+c3RhdGUgPSBPVEdfU1RBVEVfVU5ERUZJTkVEOworCQkJc2NoZWR1bGVfd29yaygmbW90Zy0+c21fd29yayk7CisJCX0gZWxzZSB7CisJCQlvdGctPmdhZGdldCA9IE5VTEw7CisJCX0KKworCQlyZXR1cm4gMDsKKwl9CisJb3RnLT5nYWRnZXQgPSBnYWRnZXQ7CisJZGV2X2RiZyhvdGctPmRldiwgInBlcmlwaGVyYWwgZHJpdmVyIHJlZ2lzdGVyZWQgdy8gdHJhbmNlaXZlclxuIik7CisKKwkvKgorCSAqIEtpY2sgdGhlIHN0YXRlIG1hY2hpbmUgd29yaywgaWYgaG9zdCBpcyBub3Qgc3VwcG9ydGVkCisJICogb3IgaG9zdCBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQgd2l0aCB1cy4KKwkgKi8KKwlpZiAobW90Zy0+cGRhdGEtPm1vZGUgPT0gVVNCX1BFUklQSEVSQUwgfHwgb3RnLT5ob3N0KSB7CisJCXBtX3J1bnRpbWVfZ2V0X3N5bmMob3RnLT5kZXYpOworCQlzY2hlZHVsZV93b3JrKCZtb3RnLT5zbV93b3JrKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFdlIHN1cHBvcnQgT1RHLCBQZXJpcGhlcmFsIG9ubHkgYW5kIEhvc3Qgb25seSBjb25maWd1cmF0aW9ucy4gSW4gY2FzZQorICogb2YgT1RHLCBtb2RlIHN3aXRjaCAoaG9zdC0tPnBlcmlwaGVyYWwvcGVyaXBoZXJhbC0tPmhvc3QpIGNhbiBoYXBwZW4KKyAqIHZpYSBJZCBwaW4gc3RhdHVzIG9yIHVzZXIgcmVxdWVzdCAoZGVidWdmcykuIElkL0JTViBpbnRlcnJ1cHRzIGFyZSBub3QKKyAqIGVuYWJsZWQgd2hlbiBzd2l0Y2ggaXMgY29udHJvbGxlZCBieSB1c2VyIGFuZCBkZWZhdWx0IG1vZGUgaXMgc3VwcGxpZWQKKyAqIGJ5IGJvYXJkIGZpbGUsIHdoaWNoIGNhbiBiZSBjaGFuZ2VkIGJ5IHVzZXJzcGFjZSBsYXRlci4KKyAqLworc3RhdGljIHZvaWQgbXNtX290Z19pbml0X3NtKHN0cnVjdCBtc21fb3RnICptb3RnKQoreworCXN0cnVjdCBtc21fb3RnX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gbW90Zy0+cGRhdGE7CisJdTMyIG90Z3NjID0gcmVhZGwoVVNCX09UR1NDKTsKKworCXN3aXRjaCAocGRhdGEtPm1vZGUpIHsKKwljYXNlIFVTQl9PVEc6CisJCWlmIChwZGF0YS0+b3RnX2NvbnRyb2wgPT0gT1RHX1BIWV9DT05UUk9MKSB7CisJCQlpZiAob3Rnc2MgJiBPVEdTQ19JRCkKKwkJCQlzZXRfYml0KElELCAmbW90Zy0+aW5wdXRzKTsKKwkJCWVsc2UKKwkJCQljbGVhcl9iaXQoSUQsICZtb3RnLT5pbnB1dHMpOworCisJCQlpZiAob3Rnc2MgJiBPVEdTQ19CU1YpCisJCQkJc2V0X2JpdChCX1NFU1NfVkxELCAmbW90Zy0+aW5wdXRzKTsKKwkJCWVsc2UKKwkJCQljbGVhcl9iaXQoQl9TRVNTX1ZMRCwgJm1vdGctPmlucHV0cyk7CisJCX0gZWxzZSBpZiAocGRhdGEtPm90Z19jb250cm9sID09IE9UR19VU0VSX0NPTlRST0wpIHsKKwkJCWlmIChwZGF0YS0+ZGVmYXVsdF9tb2RlID09IFVTQl9IT1NUKSB7CisJCQkJY2xlYXJfYml0KElELCAmbW90Zy0+aW5wdXRzKTsKKwkJCX0gZWxzZSBpZiAocGRhdGEtPmRlZmF1bHRfbW9kZSA9PSBVU0JfUEVSSVBIRVJBTCkgeworCQkJCXNldF9iaXQoSUQsICZtb3RnLT5pbnB1dHMpOworCQkJCXNldF9iaXQoQl9TRVNTX1ZMRCwgJm1vdGctPmlucHV0cyk7CisJCQl9IGVsc2UgeworCQkJCXNldF9iaXQoSUQsICZtb3RnLT5pbnB1dHMpOworCQkJCWNsZWFyX2JpdChCX1NFU1NfVkxELCAmbW90Zy0+aW5wdXRzKTsKKwkJCX0KKwkJfQorCQlicmVhazsKKwljYXNlIFVTQl9IT1NUOgorCQljbGVhcl9iaXQoSUQsICZtb3RnLT5pbnB1dHMpOworCQlicmVhazsKKwljYXNlIFVTQl9QRVJJUEhFUkFMOgorCQlzZXRfYml0KElELCAmbW90Zy0+aW5wdXRzKTsKKwkJaWYgKG90Z3NjICYgT1RHU0NfQlNWKQorCQkJc2V0X2JpdChCX1NFU1NfVkxELCAmbW90Zy0+aW5wdXRzKTsKKwkJZWxzZQorCQkJY2xlYXJfYml0KEJfU0VTU19WTEQsICZtb3RnLT5pbnB1dHMpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG1zbV9vdGdfc21fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpCit7CisJc3RydWN0IG1zbV9vdGcgKm1vdGcgPSBjb250YWluZXJfb2Yodywgc3RydWN0IG1zbV9vdGcsIHNtX3dvcmspOworCXN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIgKm90ZyA9ICZtb3RnLT5vdGc7CisKKwlzd2l0Y2ggKG90Zy0+c3RhdGUpIHsKKwljYXNlIE9UR19TVEFURV9VTkRFRklORUQ6CisJCWRldl9kYmcob3RnLT5kZXYsICJPVEdfU1RBVEVfVU5ERUZJTkVEIHN0YXRlXG4iKTsKKwkJbXNtX290Z19yZXNldChvdGcpOworCQltc21fb3RnX2luaXRfc20obW90Zyk7CisJCW90Zy0+c3RhdGUgPSBPVEdfU1RBVEVfQl9JRExFOworCQkvKiBGQUxMIFRIUk9VR0ggKi8KKwljYXNlIE9UR19TVEFURV9CX0lETEU6CisJCWRldl9kYmcob3RnLT5kZXYsICJPVEdfU1RBVEVfQl9JRExFIHN0YXRlXG4iKTsKKwkJaWYgKCF0ZXN0X2JpdChJRCwgJm1vdGctPmlucHV0cykgJiYgb3RnLT5ob3N0KSB7CisJCQkvKiBkaXNhYmxlIEJTViBiaXQgKi8KKwkJCXdyaXRlbChyZWFkbChVU0JfT1RHU0MpICYgfk9UR1NDX0JTVklFLCBVU0JfT1RHU0MpOworCQkJbXNtX290Z19zdGFydF9ob3N0KG90ZywgMSk7CisJCQlvdGctPnN0YXRlID0gT1RHX1NUQVRFX0FfSE9TVDsKKwkJfSBlbHNlIGlmICh0ZXN0X2JpdChCX1NFU1NfVkxELCAmbW90Zy0+aW5wdXRzKSAmJiBvdGctPmdhZGdldCkgeworCQkJbXNtX290Z19zdGFydF9wZXJpcGhlcmFsKG90ZywgMSk7CisJCQlvdGctPnN0YXRlID0gT1RHX1NUQVRFX0JfUEVSSVBIRVJBTDsKKwkJfQorCQlwbV9ydW50aW1lX3B1dF9zeW5jKG90Zy0+ZGV2KTsKKwkJYnJlYWs7CisJY2FzZSBPVEdfU1RBVEVfQl9QRVJJUEhFUkFMOgorCQlkZXZfZGJnKG90Zy0+ZGV2LCAiT1RHX1NUQVRFX0JfUEVSSVBIRVJBTCBzdGF0ZVxuIik7CisJCWlmICghdGVzdF9iaXQoQl9TRVNTX1ZMRCwgJm1vdGctPmlucHV0cykgfHwKKwkJCQkhdGVzdF9iaXQoSUQsICZtb3RnLT5pbnB1dHMpKSB7CisJCQltc21fb3RnX3N0YXJ0X3BlcmlwaGVyYWwob3RnLCAwKTsKKwkJCW90Zy0+c3RhdGUgPSBPVEdfU1RBVEVfQl9JRExFOworCQkJbXNtX290Z19yZXNldChvdGcpOworCQkJc2NoZWR1bGVfd29yayh3KTsKKwkJfQorCQlicmVhazsKKwljYXNlIE9UR19TVEFURV9BX0hPU1Q6CisJCWRldl9kYmcob3RnLT5kZXYsICJPVEdfU1RBVEVfQV9IT1NUIHN0YXRlXG4iKTsKKwkJaWYgKHRlc3RfYml0KElELCAmbW90Zy0+aW5wdXRzKSkgeworCQkJbXNtX290Z19zdGFydF9ob3N0KG90ZywgMCk7CisJCQlvdGctPnN0YXRlID0gT1RHX1NUQVRFX0JfSURMRTsKKwkJCW1zbV9vdGdfcmVzZXQob3RnKTsKKwkJCXNjaGVkdWxlX3dvcmsodyk7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgbXNtX290Z19pcnEoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgbXNtX290ZyAqbW90ZyA9IGRhdGE7CisJc3RydWN0IG90Z190cmFuc2NlaXZlciAqb3RnID0gJm1vdGctPm90ZzsKKwl1MzIgb3Rnc2MgPSAwOworCisJaWYgKGF0b21pY19yZWFkKCZtb3RnLT5pbl9scG0pKSB7CisJCWRpc2FibGVfaXJxX25vc3luYyhpcnEpOworCQltb3RnLT5hc3luY19pbnQgPSAxOworCQlwbV9ydW50aW1lX2dldChvdGctPmRldik7CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisKKwlvdGdzYyA9IHJlYWRsKFVTQl9PVEdTQyk7CisJaWYgKCEob3Rnc2MgJiAoT1RHU0NfSURJUyB8IE9UR1NDX0JTVklTKSkpCisJCXJldHVybiBJUlFfTk9ORTsKKworCWlmICgob3Rnc2MgJiBPVEdTQ19JRElTKSAmJiAob3Rnc2MgJiBPVEdTQ19JRElFKSkgeworCQlpZiAob3Rnc2MgJiBPVEdTQ19JRCkKKwkJCXNldF9iaXQoSUQsICZtb3RnLT5pbnB1dHMpOworCQllbHNlCisJCQljbGVhcl9iaXQoSUQsICZtb3RnLT5pbnB1dHMpOworCQlkZXZfZGJnKG90Zy0+ZGV2LCAiSUQgc2V0L2NsZWFyXG4iKTsKKwkJcG1fcnVudGltZV9nZXRfbm9yZXN1bWUob3RnLT5kZXYpOworCX0gZWxzZSBpZiAoKG90Z3NjICYgT1RHU0NfQlNWSVMpICYmIChvdGdzYyAmIE9UR1NDX0JTVklFKSkgeworCQlpZiAob3Rnc2MgJiBPVEdTQ19CU1YpCisJCQlzZXRfYml0KEJfU0VTU19WTEQsICZtb3RnLT5pbnB1dHMpOworCQllbHNlCisJCQljbGVhcl9iaXQoQl9TRVNTX1ZMRCwgJm1vdGctPmlucHV0cyk7CisJCWRldl9kYmcob3RnLT5kZXYsICJCU1Ygc2V0L2NsZWFyXG4iKTsKKwkJcG1fcnVudGltZV9nZXRfbm9yZXN1bWUob3RnLT5kZXYpOworCX0KKworCXdyaXRlbChvdGdzYywgVVNCX09UR1NDKTsKKwlzY2hlZHVsZV93b3JrKCZtb3RnLT5zbV93b3JrKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgbXNtX290Z19tb2RlX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp1bnVzZWQpCit7CisJc3RydWN0IG1zbV9vdGcgKm1vdGcgPSBzLT5wcml2YXRlOworCXN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIgKm90ZyA9ICZtb3RnLT5vdGc7CisKKwlzd2l0Y2ggKG90Zy0+c3RhdGUpIHsKKwljYXNlIE9UR19TVEFURV9BX0hPU1Q6CisJCXNlcV9wcmludGYocywgImhvc3RcbiIpOworCQlicmVhazsKKwljYXNlIE9UR19TVEFURV9CX1BFUklQSEVSQUw6CisJCXNlcV9wcmludGYocywgInBlcmlwaGVyYWxcbiIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlzZXFfcHJpbnRmKHMsICJub25lXG4iKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXNtX290Z19tb2RlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIG1zbV9vdGdfbW9kZV9zaG93LCBpbm9kZS0+aV9wcml2YXRlKTsKK30KKworc3RhdGljIHNzaXplX3QgbXNtX290Z19tb2RlX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqdWJ1ZiwKKwkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgbXNtX290ZyAqbW90ZyA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwljaGFyIGJ1ZlsxNl07CisJc3RydWN0IG90Z190cmFuc2NlaXZlciAqb3RnID0gJm1vdGctPm90ZzsKKwlpbnQgc3RhdHVzID0gY291bnQ7CisJZW51bSB1c2JfbW9kZV90eXBlIHJlcV9tb2RlOworCisJbWVtc2V0KGJ1ZiwgMHgwMCwgc2l6ZW9mKGJ1ZikpOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZidWYsIHVidWYsIG1pbl90KHNpemVfdCwgc2l6ZW9mKGJ1ZikgLSAxLCBjb3VudCkpKSB7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJCWdvdG8gb3V0OworCX0KKworCWlmICghc3RybmNtcChidWYsICJob3N0IiwgNCkpIHsKKwkJcmVxX21vZGUgPSBVU0JfSE9TVDsKKwl9IGVsc2UgaWYgKCFzdHJuY21wKGJ1ZiwgInBlcmlwaGVyYWwiLCAxMCkpIHsKKwkJcmVxX21vZGUgPSBVU0JfUEVSSVBIRVJBTDsKKwl9IGVsc2UgaWYgKCFzdHJuY21wKGJ1ZiwgIm5vbmUiLCA0KSkgeworCQlyZXFfbW9kZSA9IFVTQl9OT05FOworCX0gZWxzZSB7CisJCXN0YXR1cyA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCXN3aXRjaCAocmVxX21vZGUpIHsKKwljYXNlIFVTQl9OT05FOgorCQlzd2l0Y2ggKG90Zy0+c3RhdGUpIHsKKwkJY2FzZSBPVEdfU1RBVEVfQV9IT1NUOgorCQljYXNlIE9UR19TVEFURV9CX1BFUklQSEVSQUw6CisJCQlzZXRfYml0KElELCAmbW90Zy0+aW5wdXRzKTsKKwkJCWNsZWFyX2JpdChCX1NFU1NfVkxELCAmbW90Zy0+aW5wdXRzKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZ290byBvdXQ7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBVU0JfUEVSSVBIRVJBTDoKKwkJc3dpdGNoIChvdGctPnN0YXRlKSB7CisJCWNhc2UgT1RHX1NUQVRFX0JfSURMRToKKwkJY2FzZSBPVEdfU1RBVEVfQV9IT1NUOgorCQkJc2V0X2JpdChJRCwgJm1vdGctPmlucHV0cyk7CisJCQlzZXRfYml0KEJfU0VTU19WTEQsICZtb3RnLT5pbnB1dHMpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlnb3RvIG91dDsKKwkJfQorCQlicmVhazsKKwljYXNlIFVTQl9IT1NUOgorCQlzd2l0Y2ggKG90Zy0+c3RhdGUpIHsKKwkJY2FzZSBPVEdfU1RBVEVfQl9JRExFOgorCQljYXNlIE9UR19TVEFURV9CX1BFUklQSEVSQUw6CisJCQljbGVhcl9iaXQoSUQsICZtb3RnLT5pbnB1dHMpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlnb3RvIG91dDsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlnb3RvIG91dDsKKwl9CisKKwlwbV9ydW50aW1lX2dldF9zeW5jKG90Zy0+ZGV2KTsKKwlzY2hlZHVsZV93b3JrKCZtb3RnLT5zbV93b3JrKTsKK291dDoKKwlyZXR1cm4gc3RhdHVzOworfQorCitjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1zbV9vdGdfbW9kZV9mb3BzID0geworCS5vcGVuID0gbXNtX290Z19tb2RlX29wZW4sCisJLnJlYWQgPSBzZXFfcmVhZCwKKwkud3JpdGUgPSBtc21fb3RnX21vZGVfd3JpdGUsCisJLmxsc2VlayA9IHNlcV9sc2VlaywKKwkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlLAorfTsKKworc3RhdGljIHN0cnVjdCBkZW50cnkgKm1zbV9vdGdfZGJnX3Jvb3Q7CitzdGF0aWMgc3RydWN0IGRlbnRyeSAqbXNtX290Z19kYmdfbW9kZTsKKworc3RhdGljIGludCBtc21fb3RnX2RlYnVnZnNfaW5pdChzdHJ1Y3QgbXNtX290ZyAqbW90ZykKK3sKKwltc21fb3RnX2RiZ19yb290ID0gZGVidWdmc19jcmVhdGVfZGlyKCJtc21fb3RnIiwgTlVMTCk7CisKKwlpZiAoIW1zbV9vdGdfZGJnX3Jvb3QgfHwgSVNfRVJSKG1zbV9vdGdfZGJnX3Jvb3QpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCW1zbV9vdGdfZGJnX21vZGUgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJtb2RlIiwgU19JUlVHTyB8IFNfSVdVU1IsCisJCQkJbXNtX290Z19kYmdfcm9vdCwgbW90ZywgJm1zbV9vdGdfbW9kZV9mb3BzKTsKKwlpZiAoIW1zbV9vdGdfZGJnX21vZGUpIHsKKwkJZGVidWdmc19yZW1vdmUobXNtX290Z19kYmdfcm9vdCk7CisJCW1zbV9vdGdfZGJnX3Jvb3QgPSBOVUxMOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbXNtX290Z19kZWJ1Z2ZzX2NsZWFudXAodm9pZCkKK3sKKwlkZWJ1Z2ZzX3JlbW92ZShtc21fb3RnX2RiZ19tb2RlKTsKKwlkZWJ1Z2ZzX3JlbW92ZShtc21fb3RnX2RiZ19yb290KTsKK30KKworc3RhdGljIGludCBfX2luaXQgbXNtX290Z19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWludCByZXQgPSAwOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXN0cnVjdCBtc21fb3RnICptb3RnOworCXN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIgKm90ZzsKKworCWRldl9pbmZvKCZwZGV2LT5kZXYsICJtc21fb3RnIHByb2JlXG4iKTsKKwlpZiAoIXBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIk5vIHBsYXRmb3JtIGRhdGEgZ2l2ZW4uIEJhaWxpbmcgb3V0XG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJbW90ZyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtc21fb3RnKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtb3RnKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInVuYWJsZSB0byBhbGxvY2F0ZSBtc21fb3RnXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJbW90Zy0+cGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlvdGcgPSAmbW90Zy0+b3RnOworCW90Zy0+ZGV2ID0gJnBkZXYtPmRldjsKKworCW1vdGctPnBoeV9yZXNldF9jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJ1c2JfcGh5X2NsayIpOworCWlmIChJU19FUlIobW90Zy0+cGh5X3Jlc2V0X2NsaykpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCB1c2JfcGh5X2Nsa1xuIik7CisJCXJldCA9IFBUUl9FUlIobW90Zy0+cGh5X3Jlc2V0X2Nsayk7CisJCWdvdG8gZnJlZV9tb3RnOworCX0KKworCW1vdGctPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgInVzYl9oc19jbGsiKTsKKwlpZiAoSVNfRVJSKG1vdGctPmNsaykpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCB1c2JfaHNfY2xrXG4iKTsKKwkJcmV0ID0gUFRSX0VSUihtb3RnLT5jbGspOworCQlnb3RvIHB1dF9waHlfcmVzZXRfY2xrOworCX0KKworCW1vdGctPnBjbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJ1c2JfaHNfcGNsayIpOworCWlmIChJU19FUlIobW90Zy0+cGNsaykpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCB1c2JfaHNfcGNsa1xuIik7CisJCXJldCA9IFBUUl9FUlIobW90Zy0+cGNsayk7CisJCWdvdG8gcHV0X2NsazsKKwl9CisKKwkvKgorCSAqIFVTQiBjb3JlIGNsb2NrIGlzIG5vdCBwcmVzZW50IG9uIGFsbCBNU00gY2hpcHMuIFRoaXMKKwkgKiBjbG9jayBpcyBpbnRyb2R1Y2VkIHRvIHJlbW92ZSB0aGUgZGVwZW5kZW5jeSBvbiBBWEkKKwkgKiBidXMgZnJlcXVlbmN5LgorCSAqLworCW1vdGctPmNvcmVfY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAidXNiX2hzX2NvcmVfY2xrIik7CisJaWYgKElTX0VSUihtb3RnLT5jb3JlX2NsaykpCisJCW1vdGctPmNvcmVfY2xrID0gTlVMTDsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXMpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCBwbGF0Zm9ybSByZXNvdXJjZSBtZW1cbiIpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIHB1dF9jb3JlX2NsazsKKwl9CisKKwltb3RnLT5yZWdzID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCWlmICghbW90Zy0+cmVncykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJpb3JlbWFwIGZhaWxlZFxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gcHV0X2NvcmVfY2xrOworCX0KKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiT1RHIHJlZ3MgPSAlcFxuIiwgbW90Zy0+cmVncyk7CisKKwltb3RnLT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmICghbW90Zy0+aXJxKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInBsYXRmb3JtX2dldF9pcnEgZmFpbGVkXG4iKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBmcmVlX3JlZ3M7CisJfQorCisJY2xrX2VuYWJsZShtb3RnLT5jbGspOworCWNsa19lbmFibGUobW90Zy0+cGNsayk7CisJaWYgKG1vdGctPmNvcmVfY2xrKQorCQljbGtfZW5hYmxlKG1vdGctPmNvcmVfY2xrKTsKKworCXdyaXRlbCgwLCBVU0JfVVNCSU5UUik7CisJd3JpdGVsKDAsIFVTQl9PVEdTQyk7CisKKwlJTklUX1dPUksoJm1vdGctPnNtX3dvcmssIG1zbV9vdGdfc21fd29yayk7CisJcmV0ID0gcmVxdWVzdF9pcnEobW90Zy0+aXJxLCBtc21fb3RnX2lycSwgSVJRRl9TSEFSRUQsCisJCQkJCSJtc21fb3RnIiwgbW90Zyk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJyZXF1ZXN0IGlycSBmYWlsZWRcbiIpOworCQlnb3RvIGRpc2FibGVfY2xrczsKKwl9CisKKwlvdGctPmluaXQgPSBtc21fb3RnX3Jlc2V0OworCW90Zy0+c2V0X2hvc3QgPSBtc21fb3RnX3NldF9ob3N0OworCW90Zy0+c2V0X3BlcmlwaGVyYWwgPSBtc21fb3RnX3NldF9wZXJpcGhlcmFsOworCisJb3RnLT5pb19vcHMgPSAmbXNtX290Z19pb19vcHM7CisKKwlyZXQgPSBvdGdfc2V0X3RyYW5zY2VpdmVyKCZtb3RnLT5vdGcpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAib3RnX3NldF90cmFuc2NlaXZlciBmYWlsZWRcbiIpOworCQlnb3RvIGZyZWVfaXJxOworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG1vdGcpOworCWRldmljZV9pbml0X3dha2V1cCgmcGRldi0+ZGV2LCAxKTsKKworCWlmIChtb3RnLT5wZGF0YS0+bW9kZSA9PSBVU0JfT1RHICYmCisJCQltb3RnLT5wZGF0YS0+b3RnX2NvbnRyb2wgPT0gT1RHX1VTRVJfQ09OVFJPTCkgeworCQlyZXQgPSBtc21fb3RnX2RlYnVnZnNfaW5pdChtb3RnKTsKKwkJaWYgKHJldCkKKwkJCWRldl9kYmcoJnBkZXYtPmRldiwgIm1vZGUgZGVidWdmcyBmaWxlIGlzIgorCQkJCQkibm90IGF2YWlsYWJsZVxuIik7CisJfQorCisJcG1fcnVudGltZV9zZXRfYWN0aXZlKCZwZGV2LT5kZXYpOworCXBtX3J1bnRpbWVfZW5hYmxlKCZwZGV2LT5kZXYpOworCisJcmV0dXJuIDA7CitmcmVlX2lycToKKwlmcmVlX2lycShtb3RnLT5pcnEsIG1vdGcpOworZGlzYWJsZV9jbGtzOgorCWNsa19kaXNhYmxlKG1vdGctPnBjbGspOworCWNsa19kaXNhYmxlKG1vdGctPmNsayk7CitmcmVlX3JlZ3M6CisJaW91bm1hcChtb3RnLT5yZWdzKTsKK3B1dF9jb3JlX2NsazoKKwlpZiAobW90Zy0+Y29yZV9jbGspCisJCWNsa19wdXQobW90Zy0+Y29yZV9jbGspOworCWNsa19wdXQobW90Zy0+cGNsayk7CitwdXRfY2xrOgorCWNsa19wdXQobW90Zy0+Y2xrKTsKK3B1dF9waHlfcmVzZXRfY2xrOgorCWNsa19wdXQobW90Zy0+cGh5X3Jlc2V0X2Nsayk7CitmcmVlX21vdGc6CisJa2ZyZWUobW90Zyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgbXNtX290Z19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbXNtX290ZyAqbW90ZyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIgKm90ZyA9ICZtb3RnLT5vdGc7CisJaW50IGNudCA9IDA7CisKKwlpZiAob3RnLT5ob3N0IHx8IG90Zy0+Z2FkZ2V0KQorCQlyZXR1cm4gLUVCVVNZOworCisJbXNtX290Z19kZWJ1Z2ZzX2NsZWFudXAoKTsKKwljYW5jZWxfd29ya19zeW5jKCZtb3RnLT5zbV93b3JrKTsKKworCW1zbV9vdGdfcmVzdW1lKG1vdGcpOworCisJZGV2aWNlX2luaXRfd2FrZXVwKCZwZGV2LT5kZXYsIDApOworCXBtX3J1bnRpbWVfZGlzYWJsZSgmcGRldi0+ZGV2KTsKKworCW90Z19zZXRfdHJhbnNjZWl2ZXIoTlVMTCk7CisJZnJlZV9pcnEobW90Zy0+aXJxLCBtb3RnKTsKKworCS8qCisJICogUHV0IFBIWSBpbiBsb3cgcG93ZXIgbW9kZS4KKwkgKi8KKwl1bHBpX3JlYWQob3RnLCAweDE0KTsKKwl1bHBpX3dyaXRlKG90ZywgMHgwOCwgMHgwOSk7CisKKwl3cml0ZWwocmVhZGwoVVNCX1BPUlRTQykgfCBQT1JUU0NfUEhDRCwgVVNCX1BPUlRTQyk7CisJd2hpbGUgKGNudCA8IFBIWV9TVVNQRU5EX1RJTUVPVVRfVVNFQykgeworCQlpZiAocmVhZGwoVVNCX1BPUlRTQykgJiBQT1JUU0NfUEhDRCkKKwkJCWJyZWFrOworCQl1ZGVsYXkoMSk7CisJCWNudCsrOworCX0KKwlpZiAoY250ID49IFBIWV9TVVNQRU5EX1RJTUVPVVRfVVNFQykKKwkJZGV2X2VycihvdGctPmRldiwgIlVuYWJsZSB0byBzdXNwZW5kIFBIWVxuIik7CisKKwljbGtfZGlzYWJsZShtb3RnLT5wY2xrKTsKKwljbGtfZGlzYWJsZShtb3RnLT5jbGspOworCWlmIChtb3RnLT5jb3JlX2NsaykKKwkJY2xrX2Rpc2FibGUobW90Zy0+Y29yZV9jbGspOworCisJaW91bm1hcChtb3RnLT5yZWdzKTsKKwlwbV9ydW50aW1lX3NldF9zdXNwZW5kZWQoJnBkZXYtPmRldik7CisKKwljbGtfcHV0KG1vdGctPnBoeV9yZXNldF9jbGspOworCWNsa19wdXQobW90Zy0+cGNsayk7CisJY2xrX3B1dChtb3RnLT5jbGspOworCWlmIChtb3RnLT5jb3JlX2NsaykKKwkJY2xrX3B1dChtb3RnLT5jb3JlX2Nsayk7CisKKwlrZnJlZShtb3RnKTsKKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKK3N0YXRpYyBpbnQgbXNtX290Z19ydW50aW1lX2lkbGUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBtc21fb3RnICptb3RnID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IG90Z190cmFuc2NlaXZlciAqb3RnID0gJm1vdGctPm90ZzsKKworCWRldl9kYmcoZGV2LCAiT1RHIHJ1bnRpbWUgaWRsZVxuIik7CisKKwkvKgorCSAqIEl0IGlzIG9ic2VydmVkIHNvbWUgdGltZXMgdGhhdCBhIHNwdXJpb3VzIGludGVycnVwdAorCSAqIGNvbWVzIHdoZW4gUEhZIGlzIHB1dCBpbnRvIExQTSBpbW1lZGlhdGVseSBhZnRlciBQSFkgcmVzZXQuCisJICogVGhpcyAxIHNlYyBkZWxheSBhbHNvIHByZXZlbnRzIGVudGVyaW5nIGludG8gTFBNIGltbWVkaWF0ZWx5CisJICogYWZ0ZXIgYXN5bmNocm9ub3VzIGludGVycnVwdC4KKwkgKi8KKwlpZiAob3RnLT5zdGF0ZSAhPSBPVEdfU1RBVEVfVU5ERUZJTkVEKQorCQlwbV9zY2hlZHVsZV9zdXNwZW5kKGRldiwgMTAwMCk7CisKKwlyZXR1cm4gLUVBR0FJTjsKK30KKworc3RhdGljIGludCBtc21fb3RnX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG1zbV9vdGcgKm1vdGcgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWRldl9kYmcoZGV2LCAiT1RHIHJ1bnRpbWUgc3VzcGVuZFxuIik7CisJcmV0dXJuIG1zbV9vdGdfc3VzcGVuZChtb3RnKTsKK30KKworc3RhdGljIGludCBtc21fb3RnX3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbXNtX290ZyAqbW90ZyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJZGV2X2RiZyhkZXYsICJPVEcgcnVudGltZSByZXN1bWVcbiIpOworCXJldHVybiBtc21fb3RnX3Jlc3VtZShtb3RnKTsKK30KKyNlbHNlCisjZGVmaW5lIG1zbV9vdGdfcnVudGltZV9pZGxlCU5VTEwKKyNkZWZpbmUgbXNtX290Z19ydW50aW1lX3N1c3BlbmQJTlVMTAorI2RlZmluZSBtc21fb3RnX3J1bnRpbWVfcmVzdW1lCU5VTEwKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IG1zbV9vdGdfcG1fc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG1zbV9vdGcgKm1vdGcgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWRldl9kYmcoZGV2LCAiT1RHIFBNIHN1c3BlbmRcbiIpOworCXJldHVybiBtc21fb3RnX3N1c3BlbmQobW90Zyk7Cit9CisKK3N0YXRpYyBpbnQgbXNtX290Z19wbV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBtc21fb3RnICptb3RnID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IHJldDsKKworCWRldl9kYmcoZGV2LCAiT1RHIFBNIHJlc3VtZVxuIik7CisKKwlyZXQgPSBtc21fb3RnX3Jlc3VtZShtb3RnKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyoKKwkgKiBSdW50aW1lIFBNIERvY3VtZW50YXRpb24gcmVjb21tZW5kcyBicmluZ2luZyB0aGUKKwkgKiBkZXZpY2UgdG8gZnVsbCBwb3dlcmVkIHN0YXRlIHVwb24gcmVzdW1lLgorCSAqLworCXBtX3J1bnRpbWVfZGlzYWJsZShkZXYpOworCXBtX3J1bnRpbWVfc2V0X2FjdGl2ZShkZXYpOworCXBtX3J1bnRpbWVfZW5hYmxlKGRldik7CisKKwlyZXR1cm4gMDsKK30KKyNlbHNlCisjZGVmaW5lIG1zbV9vdGdfcG1fc3VzcGVuZAlOVUxMCisjZGVmaW5lIG1zbV9vdGdfcG1fcmVzdW1lCU5VTEwKKyNlbmRpZgorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgbXNtX290Z19kZXZfcG1fb3BzID0geworCS5ydW50aW1lX3N1c3BlbmQgPSBtc21fb3RnX3J1bnRpbWVfc3VzcGVuZCwKKwkucnVudGltZV9yZXN1bWUgID0gbXNtX290Z19ydW50aW1lX3Jlc3VtZSwKKwkucnVudGltZV9pZGxlICAgID0gbXNtX290Z19ydW50aW1lX2lkbGUsCisJLnN1c3BlbmQgICAgICAgICA9IG1zbV9vdGdfcG1fc3VzcGVuZCwKKwkucmVzdW1lICAgICAgICAgID0gbXNtX290Z19wbV9yZXN1bWUsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtc21fb3RnX2RyaXZlciA9IHsKKwkucmVtb3ZlID0gX19kZXZleGl0X3AobXNtX290Z19yZW1vdmUpLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gRFJJVkVSX05BTUUsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQkucG0gPSAmbXNtX290Z19kZXZfcG1fb3BzLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBtc21fb3RnX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3Byb2JlKCZtc21fb3RnX2RyaXZlciwgbXNtX290Z19wcm9iZSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBtc21fb3RnX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbXNtX290Z19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChtc21fb3RnX2luaXQpOworbW9kdWxlX2V4aXQobXNtX290Z19leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJNU00gVVNCIHRyYW5zY2VpdmVyIGRyaXZlciIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivb3RnL3R3bDQwMzAtdXNiLmMgYi9kcml2ZXJzL3VzYi9vdGcvdHdsNDAzMC11c2IuYwppbmRleCBkMzM1ZjQ4Li42Y2E1MDVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9vdGcvdHdsNDAzMC11c2IuYworKysgYi9kcml2ZXJzL3VzYi9vdGcvdHdsNDAzMC11c2IuYwpAQCAtNjc4LDcgKzY3OCw4IEBACiAJLyogZGlzYWJsZSBjb21wbGV0ZSBPVEcgYmxvY2sgKi8KIAl0d2w0MDMwX3VzYl9jbGVhcl9iaXRzKHR3bCwgUE9XRVJfQ1RSTCwgUE9XRVJfQ1RSTF9PVEdfRU5BQik7CiAKLQl0d2w0MDMwX3BoeV9wb3dlcih0d2wsIDApOworCWlmICghdHdsLT5hc2xlZXApCisJCXR3bDQwMzBfcGh5X3Bvd2VyKHR3bCwgMCk7CiAJcmVndWxhdG9yX3B1dCh0d2wtPnVzYjF2NSk7CiAJcmVndWxhdG9yX3B1dCh0d2wtPnVzYjF2OCk7CiAJcmVndWxhdG9yX3B1dCh0d2wtPnVzYjN2MSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9vdGcvdHdsNjAzMC11c2IuYyBiL2RyaXZlcnMvdXNiL290Zy90d2w2MDMwLXVzYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4Zjc3MDEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9vdGcvdHdsNjAzMC11c2IuYwpAQCAtMCwwICsxLDQ5MyBAQAorLyoKKyAqIHR3bDYwMzBfdXNiIC0gVFdMNjAzMCBVU0IgdHJhbnNjZWl2ZXIsIHRhbGtpbmcgdG8gT01BUCBPVEcgZHJpdmVyLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQgLSBodHRwOi8vd3d3LnRpLmNvbQorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBBdXRob3I6IEhlbWEgSEsgPGhlbWFoa0B0aS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvdXNiL290Zy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy90d2wuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworLyogdXNiIHJlZ2lzdGVyIGRlZmluaXRpb25zICovCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfTFNCCQkweDAwCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfTVNCCQkweDAxCisjZGVmaW5lIFVTQl9QUk9EVUNUX0lEX0xTQgkJMHgwMgorI2RlZmluZSBVU0JfUFJPRFVDVF9JRF9NU0IJCTB4MDMKKyNkZWZpbmUgVVNCX1ZCVVNfQ1RSTF9TRVQJCTB4MDQKKyNkZWZpbmUgVVNCX1ZCVVNfQ1RSTF9DTFIJCTB4MDUKKyNkZWZpbmUgVVNCX0lEX0NUUkxfU0VUCQkJMHgwNgorI2RlZmluZSBVU0JfSURfQ1RSTF9DTFIJCQkweDA3CisjZGVmaW5lIFVTQl9WQlVTX0lOVF9TUkMJCTB4MDgKKyNkZWZpbmUgVVNCX1ZCVVNfSU5UX0xBVENIX1NFVAkJMHgwOQorI2RlZmluZSBVU0JfVkJVU19JTlRfTEFUQ0hfQ0xSCQkweDBBCisjZGVmaW5lIFVTQl9WQlVTX0lOVF9FTl9MT19TRVQJCTB4MEIKKyNkZWZpbmUgVVNCX1ZCVVNfSU5UX0VOX0xPX0NMUgkJMHgwQworI2RlZmluZSBVU0JfVkJVU19JTlRfRU5fSElfU0VUCQkweDBECisjZGVmaW5lIFVTQl9WQlVTX0lOVF9FTl9ISV9DTFIJCTB4MEUKKyNkZWZpbmUgVVNCX0lEX0lOVF9TUkMJCQkweDBGCisjZGVmaW5lIFVTQl9JRF9JTlRfTEFUQ0hfU0VUCQkweDEwCisjZGVmaW5lIFVTQl9JRF9JTlRfTEFUQ0hfQ0xSCQkweDExCisKKyNkZWZpbmUgVVNCX0lEX0lOVF9FTl9MT19TRVQJCTB4MTIKKyNkZWZpbmUgVVNCX0lEX0lOVF9FTl9MT19DTFIJCTB4MTMKKyNkZWZpbmUgVVNCX0lEX0lOVF9FTl9ISV9TRVQJCTB4MTQKKyNkZWZpbmUgVVNCX0lEX0lOVF9FTl9ISV9DTFIJCTB4MTUKKyNkZWZpbmUgVVNCX09UR19BRFBfQ1RSTAkJMHgxNgorI2RlZmluZSBVU0JfT1RHX0FEUF9ISUdICQkweDE3CisjZGVmaW5lIFVTQl9PVEdfQURQX0xPVwkJCTB4MTgKKyNkZWZpbmUgVVNCX09UR19BRFBfUklTRQkJMHgxOQorI2RlZmluZSBVU0JfT1RHX1JFVklTSU9OCQkweDFBCisKKy8qIHRvIGJlIG1vdmVkIHRvIExETyAqLworI2RlZmluZSBUV0w2MDMwX01JU0MyCQkJMHhFNQorI2RlZmluZSBUV0w2MDMwX0NGR19MRE9fUEQyCQkweEY1CisjZGVmaW5lIFRXTDYwMzBfQkFDS1VQX1JFRwkJMHhGQQorCisjZGVmaW5lIFNUU19IV19DT05ESVRJT05TCQkweDIxCisKKy8qIEluIG1vZHVsZSBUV0w2MDMwX01PRFVMRV9QTV9NQVNURVIgKi8KKyNkZWZpbmUgU1RTX0hXX0NPTkRJVElPTlMJCTB4MjEKKyNkZWZpbmUgU1RTX1VTQl9JRAkJCUJJVCgyKQorCisvKiBJbiBtb2R1bGUgVFdMNjAzMF9NT0RVTEVfUE1fUkVDRUlWRVIgKi8KKyNkZWZpbmUgVlVTQl9DRkdfVFJBTlMJCQkweDcxCisjZGVmaW5lIFZVU0JfQ0ZHX1NUQVRFCQkJMHg3MgorI2RlZmluZSBWVVNCX0NGR19WT0xUQUdFCQkweDczCisKKy8qIGluIG1vZHVsZSBUV0w2MDMwX01PRFVMRV9NQUlOX0NIQVJHRSAqLworCisjZGVmaW5lIENIQVJHRVJVU0JfQ1RSTDEJCTB4OAorCisjZGVmaW5lIENPTlRST0xMRVJfU1RBVDEJCTB4MDMKKyNkZWZpbmUJVkJVU19ERVQJCQlCSVQoMikKKworc3RydWN0IHR3bDYwMzBfdXNiIHsKKwlzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyCW90ZzsKKwlzdHJ1Y3QgZGV2aWNlCQkqZGV2OworCisJLyogZm9yIHZidXMgcmVwb3J0aW5nIHdpdGggaXJxcyBkaXNhYmxlZCAqLworCXNwaW5sb2NrX3QJCWxvY2s7CisKKwlzdHJ1Y3QgcmVndWxhdG9yCQkqdXNiM3YzOworCisJaW50CQkJaXJxMTsKKwlpbnQJCQlpcnEyOworCXU4CQkJbGlua3N0YXQ7CisJdTgJCQlhc2xlZXA7CisJYm9vbAkJCWlycV9lbmFibGVkOworfTsKKworI2RlZmluZSB4Y2Vpdl90b190d2woeCkJCWNvbnRhaW5lcl9vZigoeCksIHN0cnVjdCB0d2w2MDMwX3VzYiwgb3RnKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBpbnQgdHdsNjAzMF93cml0ZWIoc3RydWN0IHR3bDYwMzBfdXNiICp0d2wsIHU4IG1vZHVsZSwKKwkJCQkJCXU4IGRhdGEsIHU4IGFkZHJlc3MpCit7CisJaW50IHJldCA9IDA7CisKKwlyZXQgPSB0d2xfaTJjX3dyaXRlX3U4KG1vZHVsZSwgZGF0YSwgYWRkcmVzcyk7CisJaWYgKHJldCA8IDApCisJCWRldl9lcnIodHdsLT5kZXYsCisJCQkiV3JpdGVbMHgleF0gRXJyb3IgJWRcbiIsIGFkZHJlc3MsIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSB1OCB0d2w2MDMwX3JlYWRiKHN0cnVjdCB0d2w2MDMwX3VzYiAqdHdsLCB1OCBtb2R1bGUsIHU4IGFkZHJlc3MpCit7CisJdTggZGF0YSwgcmV0ID0gMDsKKworCXJldCA9IHR3bF9pMmNfcmVhZF91OChtb2R1bGUsICZkYXRhLCBhZGRyZXNzKTsKKwlpZiAocmV0ID49IDApCisJCXJldCA9IGRhdGE7CisJZWxzZQorCQlkZXZfZXJyKHR3bC0+ZGV2LAorCQkJInJlYWRiWzB4JXgsMHgleF0gRXJyb3IgJWRcbiIsCisJCQkJCW1vZHVsZSwgYWRkcmVzcywgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludCB0d2w2MDMwX3NldF9waHlfY2xrKHN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIgKngsIGludCBvbikKK3sKKwlzdHJ1Y3QgdHdsNjAzMF91c2IgKnR3bDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IHR3bDQwMzBfdXNiX2RhdGEgKnBkYXRhOworCisJdHdsID0geGNlaXZfdG9fdHdsKHgpOworCWRldiAgPSB0d2wtPmRldjsKKwlwZGF0YSA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKworCXBkYXRhLT5waHlfc2V0X2Nsb2NrKHR3bC0+ZGV2LCBvbik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0d2w2MDMwX3BoeV9pbml0KHN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIgKngpCit7CisJdTggaHdfc3RhdGU7CisJc3RydWN0IHR3bDYwMzBfdXNiICp0d2w7CisJc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCB0d2w0MDMwX3VzYl9kYXRhICpwZGF0YTsKKworCXR3bCA9IHhjZWl2X3RvX3R3bCh4KTsKKwlkZXYgID0gdHdsLT5kZXY7CisJcGRhdGEgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisKKwlyZWd1bGF0b3JfZW5hYmxlKHR3bC0+dXNiM3YzKTsKKworCWh3X3N0YXRlID0gdHdsNjAzMF9yZWFkYih0d2wsIFRXTDYwMzBfTU9EVUxFX0lEMCwgU1RTX0hXX0NPTkRJVElPTlMpOworCisJaWYgKGh3X3N0YXRlICYgU1RTX1VTQl9JRCkKKwkJcGRhdGEtPnBoeV9wb3dlcih0d2wtPmRldiwgMSwgMSk7CisJZWxzZQorCQlwZGF0YS0+cGh5X3Bvd2VyKHR3bC0+ZGV2LCAwLCAxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB0d2w2MDMwX3BoeV9zaHV0ZG93bihzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyICp4KQoreworCXN0cnVjdCB0d2w2MDMwX3VzYiAqdHdsOworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgdHdsNDAzMF91c2JfZGF0YSAqcGRhdGE7CisKKwl0d2wgPSB4Y2Vpdl90b190d2woeCk7CisJZGV2ICA9IHR3bC0+ZGV2OworCXBkYXRhID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCXBkYXRhLT5waHlfcG93ZXIodHdsLT5kZXYsIDAsIDApOworCXJlZ3VsYXRvcl9kaXNhYmxlKHR3bC0+dXNiM3YzKTsKK30KKworc3RhdGljIGludCB0d2w2MDMwX3VzYl9sZG9faW5pdChzdHJ1Y3QgdHdsNjAzMF91c2IgKnR3bCkKK3sKKworCS8qIFNldCB0byBPVEdfUkVWIDEuMyBhbmQgdHVybiBvbiB0aGUgSURfV0FLRVVQX0NPTVAgKi8KKwl0d2w2MDMwX3dyaXRlYih0d2wsIFRXTDYwMzBfTU9EVUxFX0lEMCAsIDB4MSwgVFdMNjAzMF9CQUNLVVBfUkVHKTsKKworCS8qIFByb2dyYW0gQ0ZHX0xET19QRDIgcmVnaXN0ZXIgYW5kIHNldCBWVVNCIGJpdCAqLworCXR3bDYwMzBfd3JpdGViKHR3bCwgVFdMNjAzMF9NT0RVTEVfSUQwICwgMHgxLCBUV0w2MDMwX0NGR19MRE9fUEQyKTsKKworCS8qIFByb2dyYW0gTUlTQzIgcmVnaXN0ZXIgYW5kIHNldCBiaXQgVlVTQl9JTl9WQkFUICovCisJdHdsNjAzMF93cml0ZWIodHdsLCBUV0w2MDMwX01PRFVMRV9JRDAgLCAweDEwLCBUV0w2MDMwX01JU0MyKTsKKworCXR3bC0+dXNiM3YzID0gcmVndWxhdG9yX2dldCh0d2wtPmRldiwgInZ1c2IiKTsKKwlpZiAoSVNfRVJSKHR3bC0+dXNiM3YzKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZWd1bGF0b3JfZW5hYmxlKHR3bC0+dXNiM3YzKTsKKworCS8qIFByb2dyYW0gdGhlIFZVU0JfQ0ZHX1RSQU5TIGZvciBBQ1RJVkUgc3RhdGUuICovCisJdHdsNjAzMF93cml0ZWIodHdsLCBUV0xfTU9EVUxFX1BNX1JFQ0VJVkVSLCAweDNGLAorCQkJCQkJVlVTQl9DRkdfVFJBTlMpOworCisJLyogUHJvZ3JhbSB0aGUgVlVTQl9DRkdfU1RBVEUgcmVnaXN0ZXIgdG8gT04gb24gYWxsIGdyb3Vwcy4gKi8KKwl0d2w2MDMwX3dyaXRlYih0d2wsIFRXTF9NT0RVTEVfUE1fUkVDRUlWRVIsIDB4RTEsCisJCQkJCQlWVVNCX0NGR19TVEFURSk7CisKKwkvKiBQcm9ncmFtIHRoZSBVU0JfVkJVU19DVFJMX1NFVCBhbmQgc2V0IFZCVVNfQUNUX0NPTVAgYml0ICovCisJdHdsNjAzMF93cml0ZWIodHdsLCBUV0xfTU9EVUxFX1VTQiwgMHg0LCBVU0JfVkJVU19DVFJMX1NFVCk7CisKKwkvKgorCSAqIFByb2dyYW0gdGhlIFVTQl9JRF9DVFJMX1NFVCByZWdpc3RlciB0byBlbmFibGUgR05EIGRyaXZlCisJICogYW5kIHRoZSBJRCBjb21wYXJhdG9ycworCSAqLworCXR3bDYwMzBfd3JpdGViKHR3bCwgVFdMX01PRFVMRV9VU0IsIDB4MTQsIFVTQl9JRF9DVFJMX1NFVCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QgdHdsNjAzMF91c2JfdmJ1c19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHR3bDYwMzBfdXNiICp0d2wgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQgPSAtRUlOVkFMOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnR3bC0+bG9jaywgZmxhZ3MpOworCisJc3dpdGNoICh0d2wtPmxpbmtzdGF0KSB7CisJY2FzZSBVU0JfRVZFTlRfVkJVUzoKKwkgICAgICAgcmV0ID0gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICJ2YnVzXG4iKTsKKwkgICAgICAgYnJlYWs7CisJY2FzZSBVU0JfRVZFTlRfSUQ6CisJICAgICAgIHJldCA9IHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiaWRcbiIpOworCSAgICAgICBicmVhazsKKwljYXNlIFVTQl9FVkVOVF9OT05FOgorCSAgICAgICByZXQgPSBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIm5vbmVcbiIpOworCSAgICAgICBicmVhazsKKwlkZWZhdWx0OgorCSAgICAgICByZXQgPSBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIlVOS05PV05cbiIpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0d2wtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXQ7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIodmJ1cywgMDQ0NCwgdHdsNjAzMF91c2JfdmJ1c19zaG93LCBOVUxMKTsKKworc3RhdGljIGlycXJldHVybl90IHR3bDYwMzBfdXNiX2lycShpbnQgaXJxLCB2b2lkICpfdHdsKQoreworCXN0cnVjdCB0d2w2MDMwX3VzYiAqdHdsID0gX3R3bDsKKwlpbnQgc3RhdHVzOworCXU4IHZidXNfc3RhdGUsIGh3X3N0YXRlOworCisJaHdfc3RhdGUgPSB0d2w2MDMwX3JlYWRiKHR3bCwgVFdMNjAzMF9NT0RVTEVfSUQwLCBTVFNfSFdfQ09ORElUSU9OUyk7CisKKwl2YnVzX3N0YXRlID0gdHdsNjAzMF9yZWFkYih0d2wsIFRXTF9NT0RVTEVfTUFJTl9DSEFSR0UsCisJCQkJCQlDT05UUk9MTEVSX1NUQVQxKTsKKwlpZiAoIShod19zdGF0ZSAmIFNUU19VU0JfSUQpKSB7CisJCWlmICh2YnVzX3N0YXRlICYgVkJVU19ERVQpIHsKKwkJCXN0YXR1cyA9IFVTQl9FVkVOVF9WQlVTOworCQkJdHdsLT5vdGcuZGVmYXVsdF9hID0gZmFsc2U7CisJCQl0d2wtPm90Zy5zdGF0ZSA9IE9UR19TVEFURV9CX0lETEU7CisJCX0gZWxzZSB7CisJCQlzdGF0dXMgPSBVU0JfRVZFTlRfTk9ORTsKKwkJfQorCQlpZiAoc3RhdHVzID49IDApIHsKKwkJCXR3bC0+bGlua3N0YXQgPSBzdGF0dXM7CisJCQlibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKCZ0d2wtPm90Zy5ub3RpZmllciwKKwkJCQkJCXN0YXR1cywgdHdsLT5vdGcuZ2FkZ2V0KTsKKwkJfQorCX0KKwlzeXNmc19ub3RpZnkoJnR3bC0+ZGV2LT5rb2JqLCBOVUxMLCAidmJ1cyIpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgdHdsNjAzMF91c2JvdGdfaXJxKGludCBpcnEsIHZvaWQgKl90d2wpCit7CisJc3RydWN0IHR3bDYwMzBfdXNiICp0d2wgPSBfdHdsOworCWludCBzdGF0dXMgPSBVU0JfRVZFTlRfTk9ORTsKKwl1OCBod19zdGF0ZTsKKworCWh3X3N0YXRlID0gdHdsNjAzMF9yZWFkYih0d2wsIFRXTDYwMzBfTU9EVUxFX0lEMCwgU1RTX0hXX0NPTkRJVElPTlMpOworCisJaWYgKGh3X3N0YXRlICYgU1RTX1VTQl9JRCkgeworCisJCXR3bDYwMzBfd3JpdGViKHR3bCwgVFdMX01PRFVMRV9VU0IsIFVTQl9JRF9JTlRfRU5fSElfQ0xSLCAweDEpOworCQl0d2w2MDMwX3dyaXRlYih0d2wsIFRXTF9NT0RVTEVfVVNCLCBVU0JfSURfSU5UX0VOX0hJX1NFVCwKKwkJCQkJCQkJMHgxMCk7CisJCXN0YXR1cyA9IFVTQl9FVkVOVF9JRDsKKwkJdHdsLT5vdGcuZGVmYXVsdF9hID0gdHJ1ZTsKKwkJdHdsLT5vdGcuc3RhdGUgPSBPVEdfU1RBVEVfQV9JRExFOworCQlibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKCZ0d2wtPm90Zy5ub3RpZmllciwgc3RhdHVzLAorCQkJCQkJCXR3bC0+b3RnLmdhZGdldCk7CisJfSBlbHNlICB7CisJCXR3bDYwMzBfd3JpdGViKHR3bCwgVFdMX01PRFVMRV9VU0IsIFVTQl9JRF9JTlRfRU5fSElfQ0xSLAorCQkJCQkJCQkweDEwKTsKKwkJdHdsNjAzMF93cml0ZWIodHdsLCBUV0xfTU9EVUxFX1VTQiwgVVNCX0lEX0lOVF9FTl9ISV9TRVQsCisJCQkJCQkJCTB4MSk7CisJfQorCXR3bDYwMzBfd3JpdGViKHR3bCwgVFdMX01PRFVMRV9VU0IsIFVTQl9JRF9JTlRfTEFUQ0hfQ0xSLCBzdGF0dXMpOworCXR3bC0+bGlua3N0YXQgPSBzdGF0dXM7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgdHdsNjAzMF9zZXRfcGVyaXBoZXJhbChzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyICp4LAorCQlzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KQoreworCXN0cnVjdCB0d2w2MDMwX3VzYiAqdHdsOworCisJaWYgKCF4KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXR3bCA9IHhjZWl2X3RvX3R3bCh4KTsKKwl0d2wtPm90Zy5nYWRnZXQgPSBnYWRnZXQ7CisJaWYgKCFnYWRnZXQpCisJCXR3bC0+b3RnLnN0YXRlID0gT1RHX1NUQVRFX1VOREVGSU5FRDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHR3bDYwMzBfZW5hYmxlX2lycShzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyICp4KQoreworCXN0cnVjdCB0d2w2MDMwX3VzYiAqdHdsID0geGNlaXZfdG9fdHdsKHgpOworCisJdHdsNjAzMF93cml0ZWIodHdsLCBUV0xfTU9EVUxFX1VTQiwgVVNCX0lEX0lOVF9FTl9ISV9TRVQsIDB4MSk7CisJdHdsNjAzMF9pbnRlcnJ1cHRfdW5tYXNrKDB4MDUsIFJFR19JTlRfTVNLX0xJTkVfQyk7CisJdHdsNjAzMF9pbnRlcnJ1cHRfdW5tYXNrKDB4MDUsIFJFR19JTlRfTVNLX1NUU19DKTsKKworCXR3bDYwMzBfaW50ZXJydXB0X3VubWFzayhUV0w2MDMwX0NIQVJHRVJfQ1RSTF9JTlRfTUFTSywKKwkJCQlSRUdfSU5UX01TS19MSU5FX0MpOworCXR3bDYwMzBfaW50ZXJydXB0X3VubWFzayhUV0w2MDMwX0NIQVJHRVJfQ1RSTF9JTlRfTUFTSywKKwkJCQlSRUdfSU5UX01TS19TVFNfQyk7CisJdHdsNjAzMF91c2JfaXJxKHR3bC0+aXJxMiwgdHdsKTsKKwl0d2w2MDMwX3VzYm90Z19pcnEodHdsLT5pcnExLCB0d2wpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdHdsNjAzMF9zZXRfdmJ1cyhzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyICp4LCBib29sIGVuYWJsZWQpCit7CisJc3RydWN0IHR3bDYwMzBfdXNiICp0d2wgPSB4Y2Vpdl90b190d2woeCk7CisKKwkvKgorCSAqIFN0YXJ0IGRyaXZpbmcgVkJVUy4gU2V0IE9QQV9NT0RFIGJpdCBpbiBDSEFSR0VSVVNCX0NUUkwxCisJICogcmVnaXN0ZXIuIFRoaXMgZW5hYmxlcyBib29zdCBtb2RlLgorCSAqLworCWlmIChlbmFibGVkKQorCQl0d2w2MDMwX3dyaXRlYih0d2wsIFRXTF9NT0RVTEVfTUFJTl9DSEFSR0UgLCAweDQwLAorCQkJCQkJQ0hBUkdFUlVTQl9DVFJMMSk7CisJIGVsc2UKKwkJdHdsNjAzMF93cml0ZWIodHdsLCBUV0xfTU9EVUxFX01BSU5fQ0hBUkdFICwgMHgwMCwKKwkJCQkJCUNIQVJHRVJVU0JfQ1RSTDEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHR3bDYwMzBfc2V0X2hvc3Qoc3RydWN0IG90Z190cmFuc2NlaXZlciAqeCwgc3RydWN0IHVzYl9idXMgKmhvc3QpCit7CisJc3RydWN0IHR3bDYwMzBfdXNiICp0d2w7CisKKwlpZiAoIXgpCisJCXJldHVybiAtRU5PREVWOworCisJdHdsID0geGNlaXZfdG9fdHdsKHgpOworCXR3bC0+b3RnLmhvc3QgPSBob3N0OworCWlmICghaG9zdCkKKwkJdHdsLT5vdGcuc3RhdGUgPSBPVEdfU1RBVEVfVU5ERUZJTkVEOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCB0d2w2MDMwX3VzYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB0d2w2MDMwX3VzYgkqdHdsOworCWludAkJCXN0YXR1cywgZXJyOworCXN0cnVjdCB0d2w0MDMwX3VzYl9kYXRhICpwZGF0YTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXBkYXRhID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCisJdHdsID0ga3phbGxvYyhzaXplb2YgKnR3bCwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0d2wpCisJCXJldHVybiAtRU5PTUVNOworCisJdHdsLT5kZXYJCT0gJnBkZXYtPmRldjsKKwl0d2wtPmlycTEJCT0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwl0d2wtPmlycTIJCT0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAxKTsKKwl0d2wtPm90Zy5kZXYJCT0gdHdsLT5kZXY7CisJdHdsLT5vdGcubGFiZWwJCT0gInR3bDYwMzAiOworCXR3bC0+b3RnLnNldF9ob3N0CT0gdHdsNjAzMF9zZXRfaG9zdDsKKwl0d2wtPm90Zy5zZXRfcGVyaXBoZXJhbAk9IHR3bDYwMzBfc2V0X3BlcmlwaGVyYWw7CisJdHdsLT5vdGcuc2V0X3ZidXMJPSB0d2w2MDMwX3NldF92YnVzOworCXR3bC0+b3RnLmluaXQJCT0gdHdsNjAzMF9waHlfaW5pdDsKKwl0d2wtPm90Zy5zaHV0ZG93bgk9IHR3bDYwMzBfcGh5X3NodXRkb3duOworCisJLyogaW5pdCBzcGlubG9jayBmb3Igd29ya3F1ZXVlICovCisJc3Bpbl9sb2NrX2luaXQoJnR3bC0+bG9jayk7CisKKwllcnIgPSB0d2w2MDMwX3VzYl9sZG9faW5pdCh0d2wpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibGRvIGluaXQgZmFpbGVkXG4iKTsKKwkJa2ZyZWUodHdsKTsKKwkJcmV0dXJuIGVycjsKKwl9CisJb3RnX3NldF90cmFuc2NlaXZlcigmdHdsLT5vdGcpOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgdHdsKTsKKwlpZiAoZGV2aWNlX2NyZWF0ZV9maWxlKCZwZGV2LT5kZXYsICZkZXZfYXR0cl92YnVzKSkKKwkJZGV2X3dhcm4oJnBkZXYtPmRldiwgImNvdWxkIG5vdCBjcmVhdGUgc3lzZnMgZmlsZVxuIik7CisKKwlCTE9DS0lOR19JTklUX05PVElGSUVSX0hFQUQoJnR3bC0+b3RnLm5vdGlmaWVyKTsKKworCXR3bC0+aXJxX2VuYWJsZWQgPSB0cnVlOworCXN0YXR1cyA9IHJlcXVlc3RfdGhyZWFkZWRfaXJxKHR3bC0+aXJxMSwgTlVMTCwgdHdsNjAzMF91c2JvdGdfaXJxLAorCQkJSVJRRl9UUklHR0VSX0ZBTExJTkcgfCBJUlFGX1RSSUdHRVJfUklTSU5HLAorCQkJInR3bDYwMzBfdXNiIiwgdHdsKTsKKwlpZiAoc3RhdHVzIDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCBnZXQgSVJRICVkLCBlcnIgJWRcbiIsCisJCQl0d2wtPmlycTEsIHN0YXR1cyk7CisJCWRldmljZV9yZW1vdmVfZmlsZSh0d2wtPmRldiwgJmRldl9hdHRyX3ZidXMpOworCQlrZnJlZSh0d2wpOworCQlyZXR1cm4gc3RhdHVzOworCX0KKworCXN0YXR1cyA9IHJlcXVlc3RfdGhyZWFkZWRfaXJxKHR3bC0+aXJxMiwgTlVMTCwgdHdsNjAzMF91c2JfaXJxLAorCQkJSVJRRl9UUklHR0VSX0ZBTExJTkcgfCBJUlFGX1RSSUdHRVJfUklTSU5HLAorCQkJInR3bDYwMzBfdXNiIiwgdHdsKTsKKwlpZiAoc3RhdHVzIDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCBnZXQgSVJRICVkLCBlcnIgJWRcbiIsCisJCQl0d2wtPmlycTIsIHN0YXR1cyk7CisJCWZyZWVfaXJxKHR3bC0+aXJxMSwgdHdsKTsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKHR3bC0+ZGV2LCAmZGV2X2F0dHJfdmJ1cyk7CisJCWtmcmVlKHR3bCk7CisJCXJldHVybiBzdGF0dXM7CisJfQorCisJcGRhdGEtPnBoeV9pbml0KGRldik7CisJdHdsNjAzMF9lbmFibGVfaXJxKCZ0d2wtPm90Zyk7CisJZGV2X2luZm8oJnBkZXYtPmRldiwgIkluaXRpYWxpemVkIFRXTDYwMzAgVVNCIG1vZHVsZVxuIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2V4aXQgdHdsNjAzMF91c2JfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHR3bDYwMzBfdXNiICp0d2wgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXN0cnVjdCB0d2w0MDMwX3VzYl9kYXRhICpwZGF0YTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXBkYXRhID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCisJdHdsNjAzMF9pbnRlcnJ1cHRfbWFzayhUV0w2MDMwX1VTQk9UR19JTlRfTUFTSywKKwkJUkVHX0lOVF9NU0tfTElORV9DKTsKKwl0d2w2MDMwX2ludGVycnVwdF9tYXNrKFRXTDYwMzBfVVNCT1RHX0lOVF9NQVNLLAorCQkJUkVHX0lOVF9NU0tfU1RTX0MpOworCWZyZWVfaXJxKHR3bC0+aXJxMSwgdHdsKTsKKwlmcmVlX2lycSh0d2wtPmlycTIsIHR3bCk7CisJcmVndWxhdG9yX3B1dCh0d2wtPnVzYjN2Myk7CisJcGRhdGEtPnBoeV9leGl0KHR3bC0+ZGV2KTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUodHdsLT5kZXYsICZkZXZfYXR0cl92YnVzKTsKKwlrZnJlZSh0d2wpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHR3bDYwMzBfdXNiX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gdHdsNjAzMF91c2JfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2V4aXRfcCh0d2w2MDMwX3VzYl9yZW1vdmUpLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJ0d2w2MDMwX3VzYiIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCB0d2w2MDMwX3VzYl9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmdHdsNjAzMF91c2JfZHJpdmVyKTsKK30KK3N1YnN5c19pbml0Y2FsbCh0d2w2MDMwX3VzYl9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHR3bDYwMzBfdXNiX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdHdsNjAzMF91c2JfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHR3bDYwMzBfdXNiX2V4aXQpOworCitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOnR3bDYwMzBfdXNiIik7CitNT0RVTEVfQVVUSE9SKCJIZW1hIEhLIDxoZW1haGtAdGkuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJUV0w2MDMwIFVTQiB0cmFuc2NlaXZlciBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMKaW5kZXggMmRlYzUwMC4uYTI2NjhkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMKQEAgLTc1LDYgKzc1LDcgQEAKIAl1bnNpZ25lZCBsb25nIGxhc3RfZHRyX3J0czsJLyogc2F2ZWQgbW9kZW0gY29udHJvbCBvdXRwdXRzICovCiAJd2FpdF9xdWV1ZV9oZWFkX3QgZGVsdGFfbXNyX3dhaXQ7IC8qIFVzZWQgZm9yIFRJT0NNSVdBSVQgKi8KIAljaGFyIHByZXZfc3RhdHVzLCBkaWZmX3N0YXR1czsgICAgICAgIC8qIFVzZWQgZm9yIFRJT0NNSVdBSVQgKi8KKwljaGFyIHRyYW5zbWl0X2VtcHR5OwkvKiBJZiB0cmFuc21pdHRlciBpcyBlbXB0eSBvciBub3QgKi8KIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0OwogCV9fdTE2IGludGVyZmFjZTsJLyogRlQyMjMyQywgRlQyMjMySCBvciBGVDQyMzJIIHBvcnQgaW50ZXJmYWNlCiAJCQkJICAgKDAgZm9yIEZUMjMyLzI0NSkgKi8KQEAgLTEzMjMsNiArMTMyNCwyMyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGdldF9sc3JfaW5mbyhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJc3RydWN0IHNlcmlhbF9zdHJ1Y3QgX191c2VyICpyZXRpbmZvKQoreworCXN0cnVjdCBmdGRpX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdW5zaWduZWQgaW50IHJlc3VsdCA9IDA7CisKKwlpZiAoIXJldGluZm8pCisJCXJldHVybiAtRUZBVUxUOworCisJaWYgKHByaXYtPnRyYW5zbWl0X2VtcHR5KQorCQlyZXN1bHQgPSBUSU9DU0VSX1RFTVQ7CisKKwlpZiAoY29weV90b191c2VyKHJldGluZm8sICZyZXN1bHQsIHNpemVvZih1bnNpZ25lZCBpbnQpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJcmV0dXJuIDA7Cit9CisKIAogLyogRGV0ZXJtaW5lIHR5cGUgb2YgRlRESSBjaGlwIGJhc2VkIG9uIFVTQiBjb25maWcgYW5kIGRlc2NyaXB0b3IuICovCiBzdGF0aWMgdm9pZCBmdGRpX2RldGVybWluZV90eXBlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCkBAIC0xODcyLDYgKzE4OTAsMTIgQEAKIAkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgMCwgVFRZX09WRVJSVU4pOwogCX0KIAorCS8qIHNhdmUgaWYgdGhlIHRyYW5zbWl0dGVyIGlzIGVtcHR5IG9yIG5vdCAqLworCWlmIChwYWNrZXRbMV0gJiBGVERJX1JTX1RFTVQpCisJCXByaXYtPnRyYW5zbWl0X2VtcHR5ID0gMTsKKwllbHNlCisJCXByaXYtPnRyYW5zbWl0X2VtcHR5ID0gMDsKKwogCWxlbiAtPSAyOwogCWlmICghbGVuKQogCQlyZXR1cm4gMDsJLyogc3RhdHVzIG9ubHkgKi8KQEAgLTIyMzUsNiArMjI1OSw5IEBACiAJCQl9CiAJCX0KIAkJcmV0dXJuIDA7CisJY2FzZSBUSU9DU0VSR0VUTFNSOgorCQlyZXR1cm4gZ2V0X2xzcl9pbmZvKHBvcnQsIChzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCBfX3VzZXIgKilhcmcpOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMKaW5kZXggZWYyOTc3ZC4uY2RmYjE4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYwpAQCAtOTg5LDYgKzk4OSw3IEBACiAJLnNldF90ZXJtaW9zICAgICAgID0gdXNiX3d3YW5fc2V0X3Rlcm1pb3MsCiAJLnRpb2NtZ2V0ICAgICAgICAgID0gdXNiX3d3YW5fdGlvY21nZXQsCiAJLnRpb2Ntc2V0ICAgICAgICAgID0gdXNiX3d3YW5fdGlvY21zZXQsCisJLmlvY3RsICAgICAgICAgICAgID0gdXNiX3d3YW5faW9jdGwsCiAJLmF0dGFjaCAgICAgICAgICAgID0gdXNiX3d3YW5fc3RhcnR1cCwKIAkuZGlzY29ubmVjdCAgICAgICAgPSB1c2Jfd3dhbl9kaXNjb25uZWN0LAogCS5yZWxlYXNlICAgICAgICAgICA9IHVzYl93d2FuX3JlbGVhc2UsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvb3RpNjg1OC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL290aTY4NTguYwppbmRleCBlMTk5YjBmLi41YmU4NjZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvb3RpNjg1OC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vdGk2ODU4LmMKQEAgLTYxMyw5ICs2MTMsOCBAQAogCWRiZygiJXMoKTogYWZ0ZXIgYnVmX2NsZWFyKCkiLCBfX2Z1bmNfXyk7CiAKIAkvKiBjYW5jZWwgc2NoZWR1bGVkIHNldHVwICovCi0JY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+ZGVsYXllZF9zZXR1cF93b3JrKTsKLQljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT5kZWxheWVkX3dyaXRlX3dvcmspOwotCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZwcml2LT5kZWxheWVkX3NldHVwX3dvcmspOworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcHJpdi0+ZGVsYXllZF93cml0ZV93b3JrKTsKIAogCS8qIHNodXRkb3duIG91ciB1cmJzICovCiAJZGJnKCIlcygpOiBzaHV0dGluZyBkb3duIHVyYnMiLCBfX2Z1bmNfXyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvc3N1MTAwLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvc3N1MTAwLmMKaW5kZXggZjUzMTJkZDMzMy4uODM1OWVjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3NzdTEwMC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9zc3UxMDAuYwpAQCAtNzksNyArNzksNiBAQAogCXU4IHNoYWRvd0xTUjsKIAl1OCBzaGFkb3dNU1I7CiAJd2FpdF9xdWV1ZV9oZWFkX3QgZGVsdGFfbXNyX3dhaXQ7IC8qIFVzZWQgZm9yIFRJT0NNSVdBSVQgKi8KLQl1bnNpZ25lZCBzaG9ydCBtYXhfcGFja2V0X3NpemU7CiAJc3RydWN0IGFzeW5jX2ljb3VudCBpY291bnQ7CiB9OwogCkBAIC00NjQsMzYgKzQ2Myw2IEBACiAJcmV0dXJuIC1FTk9JT0NUTENNRDsKIH0KIAotc3RhdGljIHZvaWQgc3N1MTAwX3NldF9tYXhfcGFja2V0X3NpemUoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKLXsKLQlzdHJ1Y3Qgc3N1MTAwX3BvcnRfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKLQlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOwotCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gc2VyaWFsLT5kZXY7Ci0KLQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlID0gc2VyaWFsLT5pbnRlcmZhY2U7Ci0Jc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcF9kZXNjID0gJmludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmctPmVuZHBvaW50WzFdLmRlc2M7Ci0KLQl1bnNpZ25lZCBudW1fZW5kcG9pbnRzOwotCWludCBpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQludW1fZW5kcG9pbnRzID0gaW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iTnVtRW5kcG9pbnRzOwotCWRldl9pbmZvKCZ1ZGV2LT5kZXYsICJOdW1iZXIgb2YgZW5kcG9pbnRzICVkXG4iLCBudW1fZW5kcG9pbnRzKTsKLQotCWZvciAoaSA9IDA7IGkgPCBudW1fZW5kcG9pbnRzOyBpKyspIHsKLQkJZGV2X2luZm8oJnVkZXYtPmRldiwgIkVuZHBvaW50ICVkIE1heFBhY2tldFNpemUgJWRcbiIsIGkrMSwKLQkJCWludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmctPmVuZHBvaW50W2ldLmRlc2Mud01heFBhY2tldFNpemUpOwotCQllcF9kZXNjID0gJmludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmctPmVuZHBvaW50W2ldLmRlc2M7Ci0JfQotCi0JLyogc2V0IG1heCBwYWNrZXQgc2l6ZSBiYXNlZCBvbiBkZXNjcmlwdG9yICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnN0YXR1c19sb2NrLCBmbGFncyk7Ci0JcHJpdi0+bWF4X3BhY2tldF9zaXplID0gZXBfZGVzYy0+d01heFBhY2tldFNpemU7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c3RhdHVzX2xvY2ssIGZsYWdzKTsKLQotCWRldl9pbmZvKCZ1ZGV2LT5kZXYsICJTZXR0aW5nIE1heFBhY2tldFNpemUgJWRcbiIsIHByaXYtPm1heF9wYWNrZXRfc2l6ZSk7Ci19Ci0KIHN0YXRpYyBpbnQgc3N1MTAwX2F0dGFjaChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQogewogCXN0cnVjdCBzc3UxMDBfcG9ydF9wcml2YXRlICpwcml2OwpAQCAtNTExLDcgKzQ4MCw2IEBACiAJc3Bpbl9sb2NrX2luaXQoJnByaXYtPnN0YXR1c19sb2NrKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwcml2LT5kZWx0YV9tc3Jfd2FpdCk7CiAJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQsIHByaXYpOwotCXNzdTEwMF9zZXRfbWF4X3BhY2tldF9zaXplKHBvcnQpOwogCiAJcmV0dXJuIHNzdTEwMF9pbml0ZGV2aWNlKHNlcmlhbC0+ZGV2KTsKIH0KQEAgLTY0MSwxMyArNjA5LDE0IEBACiAKIH0KIAotc3RhdGljIGludCBzc3UxMDBfcHJvY2Vzc19wYWNrZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKLQkJCQkgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKLQkJCQkgc3RydWN0IHNzdTEwMF9wb3J0X3ByaXZhdGUgKnByaXYsCi0JCQkJIGNoYXIgKnBhY2tldCwgaW50IGxlbikKK3N0YXRpYyBpbnQgc3N1MTAwX3Byb2Nlc3NfcGFja2V0KHN0cnVjdCB1cmIgKnVyYiwKKwkJCQkgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKLQlpbnQgaTsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdXJiLT5jb250ZXh0OworCWNoYXIgKnBhY2tldCA9IChjaGFyICopdXJiLT50cmFuc2Zlcl9idWZmZXI7CiAJY2hhciBmbGFnID0gVFRZX05PUk1BTDsKKwl1MzIgbGVuID0gdXJiLT5hY3R1YWxfbGVuZ3RoOworCWludCBpOwogCWNoYXIgKmNoOwogCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKQEAgLTY4NSwxMiArNjU0LDggQEAKIHN0YXRpYyB2b2lkIHNzdTEwMF9wcm9jZXNzX3JlYWRfdXJiKHN0cnVjdCB1cmIgKnVyYikKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdXJiLT5jb250ZXh0OwotCXN0cnVjdCBzc3UxMDBfcG9ydF9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwotCWNoYXIgKmRhdGEgPSAoY2hhciAqKXVyYi0+dHJhbnNmZXJfYnVmZmVyOwogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7Ci0JaW50IGNvdW50ID0gMDsKLQlpbnQgaTsKLQlpbnQgbGVuOworCWludCBjb3VudDsKIAogCWRiZygiJXMiLCBfX2Z1bmNfXyk7CiAKQEAgLTY5OCwxMCArNjYzLDcgQEAKIAlpZiAoIXR0eSkKIAkJcmV0dXJuOwogCi0JZm9yIChpID0gMDsgaSA8IHVyYi0+YWN0dWFsX2xlbmd0aDsgaSArPSBwcml2LT5tYXhfcGFja2V0X3NpemUpIHsKLQkJbGVuID0gbWluX3QoaW50LCB1cmItPmFjdHVhbF9sZW5ndGggLSBpLCBwcml2LT5tYXhfcGFja2V0X3NpemUpOwotCQljb3VudCArPSBzc3UxMDBfcHJvY2Vzc19wYWNrZXQodHR5LCBwb3J0LCBwcml2LCAmZGF0YVtpXSwgbGVuKTsKLQl9CisJY291bnQgPSBzc3UxMDBfcHJvY2Vzc19wYWNrZXQodXJiLCB0dHkpOwogCiAJaWYgKGNvdW50KQogCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOwpAQCAtNzE3LDggKzY3OSw2IEBACiAJLmlkX3RhYmxlCSAgICAgPSBpZF90YWJsZSwKIAkudXNiX2RyaXZlcgkgICAgID0gJnNzdTEwMF9kcml2ZXIsCiAJLm51bV9wb3J0cwkgICAgID0gMSwKLQkuYnVsa19pbl9zaXplICAgICAgICA9IDI1NiwKLQkuYnVsa19vdXRfc2l6ZSAgICAgICA9IDI1NiwKIAkub3BlbgkJICAgICA9IHNzdTEwMF9vcGVuLAogCS5jbG9zZQkJICAgICA9IHNzdTEwMF9jbG9zZSwKIAkuYXR0YWNoICAgICAgICAgICAgICA9IHNzdTEwMF9hdHRhY2gsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXd3YW4uaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itd3dhbi5oCmluZGV4IDJiZTI5OGEuLjNhYjc3YzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itd3dhbi5oCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itd3dhbi5oCkBAIC0xOCw2ICsxOCw4IEBACiBleHRlcm4gaW50IHVzYl93d2FuX3Rpb2NtZ2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlKTsKIGV4dGVybiBpbnQgdXNiX3d3YW5fdGlvY21zZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCiAJCQkgICAgIHVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcik7CitleHRlcm4gaW50IHVzYl93d2FuX2lvY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CiBleHRlcm4gaW50IHVzYl93d2FuX3NlbmRfc2V0dXAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CiBleHRlcm4gaW50IHVzYl93d2FuX3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCiAJCQkgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Jfd3dhbi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3VzYl93d2FuLmMKaW5kZXggZmJjOTQ2Ny4uYjAwNGIyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3VzYl93d2FuLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3VzYl93d2FuLmMKQEAgLTMxLDggKzMxLDEwIEBACiAjaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL3NlcmlhbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgogI2luY2x1ZGUgInVzYi13d2FuLmgiCiAKIHN0YXRpYyBpbnQgZGVidWc7CkBAIC0xMjMsNiArMTI1LDgzIEBACiB9CiBFWFBPUlRfU1lNQk9MKHVzYl93d2FuX3Rpb2Ntc2V0KTsKIAorc3RhdGljIGludCBnZXRfc2VyaWFsX2luZm8oc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCSAgIHN0cnVjdCBzZXJpYWxfc3RydWN0IF9fdXNlciAqcmV0aW5mbykKK3sKKwlzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCB0bXA7CisKKwlpZiAoIXJldGluZm8pCisJCXJldHVybiAtRUZBVUxUOworCisJbWVtc2V0KCZ0bXAsIDAsIHNpemVvZih0bXApKTsKKwl0bXAubGluZSAgICAgICAgICAgID0gcG9ydC0+c2VyaWFsLT5taW5vcjsKKwl0bXAucG9ydCAgICAgICAgICAgID0gcG9ydC0+bnVtYmVyOworCXRtcC5iYXVkX2Jhc2UgICAgICAgPSB0dHlfZ2V0X2JhdWRfcmF0ZShwb3J0LT5wb3J0LnR0eSk7CisJdG1wLmNsb3NlX2RlbGF5CSAgICA9IHBvcnQtPnBvcnQuY2xvc2VfZGVsYXkgLyAxMDsKKwl0bXAuY2xvc2luZ193YWl0ICAgID0gcG9ydC0+cG9ydC5jbG9zaW5nX3dhaXQgPT0gQVNZTkNfQ0xPU0lOR19XQUlUX05PTkUgPworCQkJCSBBU1lOQ19DTE9TSU5HX1dBSVRfTk9ORSA6CisJCQkJIHBvcnQtPnBvcnQuY2xvc2luZ193YWl0IC8gMTA7CisKKwlpZiAoY29weV90b191c2VyKHJldGluZm8sICZ0bXAsIHNpemVvZigqcmV0aW5mbykpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZXRfc2VyaWFsX2luZm8oc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCSAgIHN0cnVjdCBzZXJpYWxfc3RydWN0IF9fdXNlciAqbmV3aW5mbykKK3sKKwlzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCBuZXdfc2VyaWFsOworCXVuc2lnbmVkIGludCBjbG9zaW5nX3dhaXQsIGNsb3NlX2RlbGF5OworCWludCByZXR2YWwgPSAwOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZuZXdfc2VyaWFsLCBuZXdpbmZvLCBzaXplb2YobmV3X3NlcmlhbCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWNsb3NlX2RlbGF5ID0gbmV3X3NlcmlhbC5jbG9zZV9kZWxheSAqIDEwOworCWNsb3Npbmdfd2FpdCA9IG5ld19zZXJpYWwuY2xvc2luZ193YWl0ID09IEFTWU5DX0NMT1NJTkdfV0FJVF9OT05FID8KKwkJCUFTWU5DX0NMT1NJTkdfV0FJVF9OT05FIDogbmV3X3NlcmlhbC5jbG9zaW5nX3dhaXQgKiAxMDsKKworCW11dGV4X2xvY2soJnBvcnQtPnBvcnQubXV0ZXgpOworCisJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKSB7CisJCWlmICgoY2xvc2VfZGVsYXkgIT0gcG9ydC0+cG9ydC5jbG9zZV9kZWxheSkgfHwKKwkJICAgIChjbG9zaW5nX3dhaXQgIT0gcG9ydC0+cG9ydC5jbG9zaW5nX3dhaXQpKQorCQkJcmV0dmFsID0gLUVQRVJNOworCQllbHNlCisJCQlyZXR2YWwgPSAtRU9QTk9UU1VQUDsKKwl9IGVsc2UgeworCQlwb3J0LT5wb3J0LmNsb3NlX2RlbGF5ICA9IGNsb3NlX2RlbGF5OworCQlwb3J0LT5wb3J0LmNsb3Npbmdfd2FpdCA9IGNsb3Npbmdfd2FpdDsKKwl9CisKKwltdXRleF91bmxvY2soJnBvcnQtPnBvcnQubXV0ZXgpOworCXJldHVybiByZXR2YWw7Cit9CisKK2ludCB1c2Jfd3dhbl9pb2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CisKKwlkYmcoIiVzIGNtZCAweCUwNHgiLCBfX2Z1bmNfXywgY21kKTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBUSU9DR1NFUklBTDoKKwkJcmV0dXJuIGdldF9zZXJpYWxfaW5mbyhwb3J0LAorCQkJCSAgICAgICAoc3RydWN0IHNlcmlhbF9zdHJ1Y3QgX191c2VyICopIGFyZyk7CisJY2FzZSBUSU9DU1NFUklBTDoKKwkJcmV0dXJuIHNldF9zZXJpYWxfaW5mbyhwb3J0LAorCQkJCSAgICAgICAoc3RydWN0IHNlcmlhbF9zdHJ1Y3QgX191c2VyICopIGFyZyk7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJZGJnKCIlcyBhcmcgbm90IHN1cHBvcnRlZCIsIF9fZnVuY19fKTsKKworCXJldHVybiAtRU5PSU9DVExDTUQ7Cit9CitFWFBPUlRfU1lNQk9MKHVzYl93d2FuX2lvY3RsKTsKKwogLyogV3JpdGUgKi8KIGludCB1c2Jfd3dhbl93cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAogCQkgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdWFzLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3Vhcy5jCmluZGV4IDMzOWZhYzMuLjIzZjBkZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdWFzLmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91YXMuYwpAQCAtNDksMTQgKzQ5LDE3IEBACiAJX191OCBjZGJbMTZdOwkvKiBYWFg6IE92ZXJmbG93LWNoZWNraW5nIHRvb2xzIG1heSBtaXN1bmRlcnN0YW5kICovCiB9OwogCisvKgorICogQWxzbyB1c2VkIGZvciB0aGUgUmVhZCBSZWFkeSBhbmQgV3JpdGUgUmVhZHkgSVVzIHNpbmNlIHRoZXkgaGF2ZSB0aGUKKyAqIHNhbWUgZmlyc3QgZm91ciBieXRlcworICovCiBzdHJ1Y3Qgc2Vuc2VfaXUgewogCV9fdTggaXVfaWQ7CiAJX191OCByc3ZkMTsKIAlfX2JlMTYgdGFnOwogCV9fYmUxNiBzdGF0dXNfcXVhbDsKIAlfX3U4IHN0YXR1czsKLQlfX3U4IHNlcnZpY2VfcmVzcG9uc2U7Ci0JX191OCByc3ZkOFs2XTsKKwlfX3U4IHJzdmQ3WzddOwogCV9fYmUxNiBsZW47CiAJX191OCBzZW5zZVtTQ1NJX1NFTlNFX0JVRkZFUlNJWkVdOwogfTsKQEAgLTk3LDggKzEwMCw4IEBACiB9OwogCiBlbnVtIHsKLQlBTExPQ19TRU5TRV9VUkIJCT0gKDEgPDwgMCksCi0JU1VCTUlUX1NFTlNFX1VSQgk9ICgxIDw8IDEpLAorCUFMTE9DX1NUQVRVU19VUkIJPSAoMSA8PCAwKSwKKwlTVUJNSVRfU1RBVFVTX1VSQgk9ICgxIDw8IDEpLAogCUFMTE9DX0RBVEFfSU5fVVJCCT0gKDEgPDwgMiksCiAJU1VCTUlUX0RBVEFfSU5fVVJCCT0gKDEgPDwgMyksCiAJQUxMT0NfREFUQV9PVVRfVVJCCT0gKDEgPDwgNCksCkBAIC0xMTIsNyArMTE1LDcgQEAKIAl1bnNpZ25lZCBpbnQgc3RhdGU7CiAJdW5zaWduZWQgaW50IHN0cmVhbTsKIAlzdHJ1Y3QgdXJiICpjbWRfdXJiOwotCXN0cnVjdCB1cmIgKnNlbnNlX3VyYjsKKwlzdHJ1Y3QgdXJiICpzdGF0dXNfdXJiOwogCXN0cnVjdCB1cmIgKmRhdGFfaW5fdXJiOwogCXN0cnVjdCB1cmIgKmRhdGFfb3V0X3VyYjsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CkBAIC0xMzgsNyArMTQxLDcgQEAKIAkJc3RydWN0IHNjc2lfcG9pbnRlciAqc2NwID0gKHZvaWQgKiljbWRpbmZvOwogCQlzdHJ1Y3Qgc2NzaV9jbW5kICpjbW5kID0gY29udGFpbmVyX29mKHNjcCwKIAkJCQkJCQlzdHJ1Y3Qgc2NzaV9jbW5kLCBTQ3ApOwotCQl1YXNfc3VibWl0X3VyYnMoY21uZCwgY21uZC0+ZGV2aWNlLT5ob3N0ZGF0YSwgR0ZQX0tFUk5FTCk7CisJCXVhc19zdWJtaXRfdXJicyhjbW5kLCBjbW5kLT5kZXZpY2UtPmhvc3RkYXRhLCBHRlBfTk9JTyk7CiAJfQogfQogCkBAIC0yMDQsNyArMjA3LDcgQEAKIAlzdHJ1Y3QgdWFzX2NtZF9pbmZvICpjbWRpbmZvID0gKHZvaWQgKikmY21uZC0+U0NwOwogCWludCBlcnI7CiAKLQljbWRpbmZvLT5zdGF0ZSA9IGRpcmVjdGlvbiB8IFNVQk1JVF9TRU5TRV9VUkI7CisJY21kaW5mby0+c3RhdGUgPSBkaXJlY3Rpb24gfCBTVUJNSVRfU1RBVFVTX1VSQjsKIAllcnIgPSB1YXNfc3VibWl0X3VyYnMoY21uZCwgY21uZC0+ZGV2aWNlLT5ob3N0ZGF0YSwgR0ZQX0FUT01JQyk7CiAJaWYgKGVycikgewogCQlzcGluX2xvY2soJnVhc193b3JrX2xvY2spOwpAQCAtMjk0LDcgKzI5Nyw3IEBACiAJaWYgKCF1cmIpCiAJCWdvdG8gb3V0OwogCi0JaXUgPSBrbWFsbG9jKHNpemVvZigqaXUpLCBnZnApOworCWl1ID0ga3phbGxvYyhzaXplb2YoKml1KSwgZ2ZwKTsKIAlpZiAoIWl1KQogCQlnb3RvIGZyZWU7CiAKQEAgLTMyNSw3ICszMjgsNyBAQAogCWlmIChsZW4gPCAwKQogCQlsZW4gPSAwOwogCWxlbiA9IEFMSUdOKGxlbiwgNCk7Ci0JaXUgPSBrbWFsbG9jKHNpemVvZigqaXUpICsgbGVuLCBnZnApOworCWl1ID0ga3phbGxvYyhzaXplb2YoKml1KSArIGxlbiwgZ2ZwKTsKIAlpZiAoIWl1KQogCQlnb3RvIGZyZWU7CiAKQEAgLTM1NywyMSArMzYwLDIxIEBACiB7CiAJc3RydWN0IHVhc19jbWRfaW5mbyAqY21kaW5mbyA9ICh2b2lkICopJmNtbmQtPlNDcDsKIAotCWlmIChjbWRpbmZvLT5zdGF0ZSAmIEFMTE9DX1NFTlNFX1VSQikgewotCQljbWRpbmZvLT5zZW5zZV91cmIgPSB1YXNfYWxsb2Nfc2Vuc2VfdXJiKGRldmluZm8sIGdmcCwgY21uZCwKLQkJCQkJCQljbWRpbmZvLT5zdHJlYW0pOwotCQlpZiAoIWNtZGluZm8tPnNlbnNlX3VyYikKKwlpZiAoY21kaW5mby0+c3RhdGUgJiBBTExPQ19TVEFUVVNfVVJCKSB7CisJCWNtZGluZm8tPnN0YXR1c191cmIgPSB1YXNfYWxsb2Nfc2Vuc2VfdXJiKGRldmluZm8sIGdmcCwgY21uZCwKKwkJCQkJCQkgIGNtZGluZm8tPnN0cmVhbSk7CisJCWlmICghY21kaW5mby0+c3RhdHVzX3VyYikKIAkJCXJldHVybiBTQ1NJX01MUVVFVUVfREVWSUNFX0JVU1k7Ci0JCWNtZGluZm8tPnN0YXRlICY9IH5BTExPQ19TRU5TRV9VUkI7CisJCWNtZGluZm8tPnN0YXRlICY9IH5BTExPQ19TVEFUVVNfVVJCOwogCX0KIAotCWlmIChjbWRpbmZvLT5zdGF0ZSAmIFNVQk1JVF9TRU5TRV9VUkIpIHsKLQkJaWYgKHVzYl9zdWJtaXRfdXJiKGNtZGluZm8tPnNlbnNlX3VyYiwgZ2ZwKSkgeworCWlmIChjbWRpbmZvLT5zdGF0ZSAmIFNVQk1JVF9TVEFUVVNfVVJCKSB7CisJCWlmICh1c2Jfc3VibWl0X3VyYihjbWRpbmZvLT5zdGF0dXNfdXJiLCBnZnApKSB7CiAJCQlzY21kX3ByaW50ayhLRVJOX0lORk8sIGNtbmQsCiAJCQkJCSJzZW5zZSB1cmIgc3VibWlzc2lvbiBmYWlsdXJlXG4iKTsKIAkJCXJldHVybiBTQ1NJX01MUVVFVUVfREVWSUNFX0JVU1k7CiAJCX0KLQkJY21kaW5mby0+c3RhdGUgJj0gflNVQk1JVF9TRU5TRV9VUkI7CisJCWNtZGluZm8tPnN0YXRlICY9IH5TVUJNSVRfU1RBVFVTX1VSQjsKIAl9CiAKIAlpZiAoY21kaW5mby0+c3RhdGUgJiBBTExPQ19EQVRBX0lOX1VSQikgewpAQCAtNDQwLDcgKzQ0Myw3IEBACiAKIAlCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCB1YXNfY21kX2luZm8pID4gc2l6ZW9mKHN0cnVjdCBzY3NpX3BvaW50ZXIpKTsKIAotCWlmICghY21kaW5mby0+c2Vuc2VfdXJiICYmIHNkZXYtPmN1cnJlbnRfY21uZCkKKwlpZiAoIWNtZGluZm8tPnN0YXR1c191cmIgJiYgc2Rldi0+Y3VycmVudF9jbW5kKQogCQlyZXR1cm4gU0NTSV9NTFFVRVVFX0RFVklDRV9CVVNZOwogCiAJaWYgKGJsa19ycV90YWdnZWQoY21uZC0+cmVxdWVzdCkpIHsKQEAgLTQ1Miw3ICs0NTUsNyBAQAogCiAJY21uZC0+c2NzaV9kb25lID0gZG9uZTsKIAotCWNtZGluZm8tPnN0YXRlID0gQUxMT0NfU0VOU0VfVVJCIHwgU1VCTUlUX1NFTlNFX1VSQiB8CisJY21kaW5mby0+c3RhdGUgPSBBTExPQ19TVEFUVVNfVVJCIHwgU1VCTUlUX1NUQVRVU19VUkIgfAogCQkJQUxMT0NfQ01EX1VSQiB8IFNVQk1JVF9DTURfVVJCOwogCiAJc3dpdGNoIChjbW5kLT5zY19kYXRhX2RpcmVjdGlvbikgewpAQCAtNDc1LDggKzQ3OCw4IEBACiAJZXJyID0gdWFzX3N1Ym1pdF91cmJzKGNtbmQsIGRldmluZm8sIEdGUF9BVE9NSUMpOwogCWlmIChlcnIpIHsKIAkJLyogSWYgd2UgZGlkIG5vdGhpbmcsIGdpdmUgdXAgbm93ICovCi0JCWlmIChjbWRpbmZvLT5zdGF0ZSAmIFNVQk1JVF9TRU5TRV9VUkIpIHsKLQkJCXVzYl9mcmVlX3VyYihjbWRpbmZvLT5zZW5zZV91cmIpOworCQlpZiAoY21kaW5mby0+c3RhdGUgJiBTVUJNSVRfU1RBVFVTX1VSQikgeworCQkJdXNiX2ZyZWVfdXJiKGNtZGluZm8tPnN0YXR1c191cmIpOwogCQkJcmV0dXJuIFNDU0lfTUxRVUVVRV9ERVZJQ0VfQlVTWTsKIAkJfQogCQlzcGluX2xvY2soJnVhc193b3JrX2xvY2spOwpAQCAtNTc4LDYgKzU4MSwzNCBAQAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCB1YXNfdXNiX2lkcyk7CiAKK3N0YXRpYyBpbnQgdWFzX2lzX2ludGVyZmFjZShzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppbnRmKQoreworCXJldHVybiAoaW50Zi0+ZGVzYy5iSW50ZXJmYWNlQ2xhc3MgPT0gVVNCX0NMQVNTX01BU1NfU1RPUkFHRSAmJgorCQlpbnRmLT5kZXNjLmJJbnRlcmZhY2VTdWJDbGFzcyA9PSBVU0JfU0NfU0NTSSAmJgorCQlpbnRmLT5kZXNjLmJJbnRlcmZhY2VQcm90b2NvbCA9PSBVU0JfUFJfVUFTKTsKK30KKworc3RhdGljIGludCB1YXNfc3dpdGNoX2ludGVyZmFjZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwKKwkJCQkJCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCWludCBpOworCisJaWYgKHVhc19pc19pbnRlcmZhY2UoaW50Zi0+Y3VyX2FsdHNldHRpbmcpKQorCQlyZXR1cm4gMDsKKworCWZvciAoaSA9IDA7IGkgPCBpbnRmLT5udW1fYWx0c2V0dGluZzsgaSsrKSB7CisJCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmFsdCA9ICZpbnRmLT5hbHRzZXR0aW5nW2ldOworCQlpZiAoYWx0ID09IGludGYtPmN1cl9hbHRzZXR0aW5nKQorCQkJY29udGludWU7CisJCWlmICh1YXNfaXNfaW50ZXJmYWNlKGFsdCkpCisJCQlyZXR1cm4gdXNiX3NldF9pbnRlcmZhY2UodWRldiwKKwkJCQkJCWFsdC0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyLAorCQkJCQkJYWx0LT5kZXNjLmJBbHRlcm5hdGVTZXR0aW5nKTsKKwl9CisKKwlyZXR1cm4gLUVOT0RFVjsKK30KKwogc3RhdGljIHZvaWQgdWFzX2NvbmZpZ3VyZV9lbmRwb2ludHMoc3RydWN0IHVhc19kZXZfaW5mbyAqZGV2aW5mbykKIHsKIAlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwc1s0XSA9IHsgfTsKQEAgLTY1MSwxMyArNjgyLDggQEAKIAlzdHJ1Y3QgdWFzX2Rldl9pbmZvICpkZXZpbmZvOwogCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKIAotCWlmIChpZC0+YkludGVyZmFjZVByb3RvY29sID09IDB4NTApIHsKLQkJaW50IGlmbnVtID0gaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlcjsKLS8qIFhYWDogU2hvdWxkbid0IGFzc3VtZSB0aGF0IDEgaXMgdGhlIGFsdGVybmF0aXZlIHdlIHdhbnQgKi8KLQkJaW50IHJldCA9IHVzYl9zZXRfaW50ZXJmYWNlKHVkZXYsIGlmbnVtLCAxKTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiAtRU5PREVWOwotCX0KKwlpZiAodWFzX3N3aXRjaF9pbnRlcmZhY2UodWRldiwgaW50ZikpCisJCXJldHVybiAtRU5PREVWOwogCiAJZGV2aW5mbyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB1YXNfZGV2X2luZm8pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWRldmluZm8pCmRpZmYgLS1naXQgYS9kcml2ZXJzL3V3Yi9pMTQ4MC9pMTQ4MC1lc3QuYyBiL2RyaXZlcnMvdXdiL2kxNDgwL2kxNDgwLWVzdC5jCmluZGV4IGYyZWI0ZDguLmQ1ZGU1ZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXdiL2kxNDgwL2kxNDgwLWVzdC5jCisrKyBiL2RyaXZlcnMvdXdiL2kxNDgwL2kxNDgwLWVzdC5jCkBAIC05MSw3ICs5MSw3IEBACiAgKgogICogW3NvIHdlIGFyZSBsb2FkZWQgd2hlbiB0aGlzIGtpbmQgZGV2aWNlIGlzIGNvbm5lY3RlZF0KICAqLwotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGkxNDgwX2VzdF9pZF90YWJsZVtdID0geworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIF9fdXNlZCBpMTQ4MF9lc3RfaWRfdGFibGVbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoMHg4MDg2LCAweGRmM2IpLCB9LAogCXsgVVNCX0RFVklDRSgweDgwODYsIDB4MGMzYiksIH0sCiAJeyB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy91d2IvdW1jLWRldi5jIGIvZHJpdmVycy91d2IvdW1jLWRldi5jCmluZGV4IDQzZWE5OTguLmNjZDIxODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXdiL3VtYy1kZXYuYworKysgYi9kcml2ZXJzL3V3Yi91bWMtZGV2LmMKQEAgLTU0LDExICs1NCw4IEBACiAKIAllcnIgPSByZXF1ZXN0X3Jlc291cmNlKHVtYy0+cmVzb3VyY2UucGFyZW50LCAmdW1jLT5yZXNvdXJjZSk7CiAJaWYgKGVyciA8IDApIHsKLQkJZGV2X2VycigmdW1jLT5kZXYsICJjYW4ndCBhbGxvY2F0ZSByZXNvdXJjZSByYW5nZSAiCi0JCQkiJTAxNkx4IHRvICUwMTZMeDogJWRcbiIsCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKXVtYy0+cmVzb3VyY2Uuc3RhcnQsCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKXVtYy0+cmVzb3VyY2UuZW5kLAotCQkJZXJyKTsKKwkJZGV2X2VycigmdW1jLT5kZXYsICJjYW4ndCBhbGxvY2F0ZSByZXNvdXJjZSByYW5nZSAlcFI6ICVkXG4iLAorCQkJJnVtYy0+cmVzb3VyY2UsIGVycik7CiAJCWdvdG8gZXJyb3JfcmVxdWVzdF9yZXNvdXJjZTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXdiL3doYy1yYy5jIGIvZHJpdmVycy91d2Ivd2hjLXJjLmMKaW5kZXggNzM0OTU1OC4uNzBhMDA0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy91d2Ivd2hjLXJjLmMKKysrIGIvZHJpdmVycy91d2Ivd2hjLXJjLmMKQEAgLTQ0OSw3ICs0NDksNyBAQAogfQogCiAvKiBQQ0kgZGV2aWNlIElEJ3MgdGhhdCB3ZSBoYW5kbGUgW3NvIGl0IGdldHMgbG9hZGVkXSAqLwotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHdoY3JjX2lkX3RhYmxlW10gPSB7CitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgX191c2VkIHdoY3JjX2lkX3RhYmxlW10gPSB7CiAJeyBQQ0lfREVWSUNFX0NMQVNTKFBDSV9DTEFTU19XSVJFTEVTU19XSENJLCB+MCkgfSwKIAl7IC8qIGVtcHR5IGxhc3QgZW50cnkgKi8gfQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3QvbmV0LmMgYi9kcml2ZXJzL3Zob3N0L25ldC5jCmluZGV4IGY0NDI2NjguLjliM2NhMTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmhvc3QvbmV0LmMKKysrIGIvZHJpdmVycy92aG9zdC9uZXQuYwpAQCAtMTAsNyArMTAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2V2ZW50ZmQuaD4KICNpbmNsdWRlIDxsaW51eC92aG9zdC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19uZXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tbXVfY29udGV4dC5oPgogI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgpAQCAtMTQzLDcgKzE0Miw2IEBACiAJCXJldHVybjsKIAl9CiAKLQl1c2VfbW0obmV0LT5kZXYubW0pOwogCW11dGV4X2xvY2soJnZxLT5tdXRleCk7CiAJdmhvc3RfZGlzYWJsZV9ub3RpZnkodnEpOwogCkBAIC0yMDgsNyArMjA2LDYgQEAKIAl9CiAKIAltdXRleF91bmxvY2soJnZxLT5tdXRleCk7Ci0JdW51c2VfbW0obmV0LT5kZXYubW0pOwogfQogCiBzdGF0aWMgaW50IHBlZWtfaGVhZF9sZW4oc3RydWN0IHNvY2sgKnNrKQpAQCAtMzEzLDcgKzMxMCw2IEBACiAJaWYgKCFzb2NrIHx8IHNrYl9xdWV1ZV9lbXB0eSgmc29jay0+c2stPnNrX3JlY2VpdmVfcXVldWUpKQogCQlyZXR1cm47CiAKLQl1c2VfbW0obmV0LT5kZXYubW0pOwogCW11dGV4X2xvY2soJnZxLT5tdXRleCk7CiAJdmhvc3RfZGlzYWJsZV9ub3RpZnkodnEpOwogCWhkcl9zaXplID0gdnEtPnZob3N0X2hsZW47CkBAIC0zOTIsNyArMzg4LDYgQEAKIAl9CiAKIAltdXRleF91bmxvY2soJnZxLT5tdXRleCk7Ci0JdW51c2VfbW0obmV0LT5kZXYubW0pOwogfQogCiAvKiBFeHBlY3RzIHRvIGJlIGFsd2F5cyBydW4gZnJvbSB3b3JrcXVldWUgLSB3aGljaCBhY3RzIGFzCkBAIC00MjQsNyArNDE5LDYgQEAKIAlpZiAoIXNvY2sgfHwgc2tiX3F1ZXVlX2VtcHR5KCZzb2NrLT5zay0+c2tfcmVjZWl2ZV9xdWV1ZSkpCiAJCXJldHVybjsKIAotCXVzZV9tbShuZXQtPmRldi5tbSk7CiAJbXV0ZXhfbG9jaygmdnEtPm11dGV4KTsKIAl2aG9zdF9kaXNhYmxlX25vdGlmeSh2cSk7CiAJdmhvc3RfaGxlbiA9IHZxLT52aG9zdF9obGVuOwpAQCAtNDU5LDcgKzQ1Myw3IEBACiAJCQltb3ZlX2lvdmVjX2hkcih2cS0+aW92LCB2cS0+aGRyLCB2aG9zdF9obGVuLCBpbik7CiAJCWVsc2UKIAkJCS8qIENvcHkgdGhlIGhlYWRlciBmb3IgdXNlIGluIFZJUlRJT19ORVRfRl9NUkdfUlhCVUY6Ci0JCQkgKiBuZWVkZWQgYmVjYXVzZSBzZW5kbXNnIGNhbiBtb2RpZnkgbXNnX2lvdi4gKi8KKwkJCSAqIG5lZWRlZCBiZWNhdXNlIHJlY3Ztc2cgY2FuIG1vZGlmeSBtc2dfaW92LiAqLwogCQkJY29weV9pb3ZlY19oZHIodnEtPmlvdiwgdnEtPmhkciwgc29ja19obGVuLCBpbik7CiAJCW1zZy5tc2dfaW92bGVuID0gaW47CiAJCWVyciA9IHNvY2stPm9wcy0+cmVjdm1zZyhOVUxMLCBzb2NrLCAmbXNnLApAQCAtNTAxLDcgKzQ5NSw2IEBACiAJfQogCiAJbXV0ZXhfdW5sb2NrKCZ2cS0+bXV0ZXgpOwotCXVudXNlX21tKG5ldC0+ZGV2Lm1tKTsKIH0KIAogc3RhdGljIHZvaWQgaGFuZGxlX3J4KHN0cnVjdCB2aG9zdF9uZXQgKm5ldCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3QvdGVzdC5jIGIvZHJpdmVycy92aG9zdC90ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk5ZjMwMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmhvc3QvdGVzdC5jCkBAIC0wLDAgKzEsMzIwIEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMDkgUmVkIEhhdCwgSW5jLgorICogQXV0aG9yOiBNaWNoYWVsIFMuIFRzaXJraW4gPG1zdEByZWRoYXQuY29tPgorICoKKyAqIFRoaXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwsIHZlcnNpb24gMi4KKyAqCisgKiB0ZXN0IHZpcnRpbyBzZXJ2ZXIgaW4gaG9zdCBrZXJuZWwuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgorI2luY2x1ZGUgPGxpbnV4L2V2ZW50ZmQuaD4KKyNpbmNsdWRlIDxsaW51eC92aG9zdC5oPgorI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+CisjaW5jbHVkZSA8bGludXgvZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworI2luY2x1ZGUgInRlc3QuaCIKKyNpbmNsdWRlICJ2aG9zdC5jIgorCisvKiBNYXggbnVtYmVyIG9mIGJ5dGVzIHRyYW5zZmVycmVkIGJlZm9yZSByZXF1ZXVlaW5nIHRoZSBqb2IuCisgKiBVc2luZyB0aGlzIGxpbWl0IHByZXZlbnRzIG9uZSB2aXJ0cXVldWUgZnJvbSBzdGFydmluZyBvdGhlcnMuICovCisjZGVmaW5lIFZIT1NUX1RFU1RfV0VJR0hUIDB4ODAwMDAKKworZW51bSB7CisJVkhPU1RfVEVTVF9WUSA9IDAsCisJVkhPU1RfVEVTVF9WUV9NQVggPSAxLAorfTsKKworc3RydWN0IHZob3N0X3Rlc3QgeworCXN0cnVjdCB2aG9zdF9kZXYgZGV2OworCXN0cnVjdCB2aG9zdF92aXJ0cXVldWUgdnFzW1ZIT1NUX1RFU1RfVlFfTUFYXTsKK307CisKKy8qIEV4cGVjdHMgdG8gYmUgYWx3YXlzIHJ1biBmcm9tIHdvcmtxdWV1ZSAtIHdoaWNoIGFjdHMgYXMKKyAqIHJlYWQtc2l6ZSBjcml0aWNhbCBzZWN0aW9uIGZvciBvdXIga2luZCBvZiBSQ1UuICovCitzdGF0aWMgdm9pZCBoYW5kbGVfdnEoc3RydWN0IHZob3N0X3Rlc3QgKm4pCit7CisJc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSAmbi0+ZGV2LnZxc1tWSE9TVF9URVNUX1ZRXTsKKwl1bnNpZ25lZCBvdXQsIGluOworCWludCBoZWFkOworCXNpemVfdCBsZW4sIHRvdGFsX2xlbiA9IDA7CisJdm9pZCAqcHJpdmF0ZTsKKworCXByaXZhdGUgPSByY3VfZGVyZWZlcmVuY2VfY2hlY2sodnEtPnByaXZhdGVfZGF0YSwgMSk7CisJaWYgKCFwcml2YXRlKQorCQlyZXR1cm47CisKKwltdXRleF9sb2NrKCZ2cS0+bXV0ZXgpOworCXZob3N0X2Rpc2FibGVfbm90aWZ5KHZxKTsKKworCWZvciAoOzspIHsKKwkJaGVhZCA9IHZob3N0X2dldF92cV9kZXNjKCZuLT5kZXYsIHZxLCB2cS0+aW92LAorCQkJCQkgQVJSQVlfU0laRSh2cS0+aW92KSwKKwkJCQkJICZvdXQsICZpbiwKKwkJCQkJIE5VTEwsIE5VTEwpOworCQkvKiBPbiBlcnJvciwgc3RvcCBoYW5kbGluZyB1bnRpbCB0aGUgbmV4dCBraWNrLiAqLworCQlpZiAodW5saWtlbHkoaGVhZCA8IDApKQorCQkJYnJlYWs7CisJCS8qIE5vdGhpbmcgbmV3PyAgV2FpdCBmb3IgZXZlbnRmZCB0byB0ZWxsIHVzIHRoZXkgcmVmaWxsZWQuICovCisJCWlmIChoZWFkID09IHZxLT5udW0pIHsKKwkJCWlmICh1bmxpa2VseSh2aG9zdF9lbmFibGVfbm90aWZ5KHZxKSkpIHsKKwkJCQl2aG9zdF9kaXNhYmxlX25vdGlmeSh2cSk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlicmVhazsKKwkJfQorCQlpZiAoaW4pIHsKKwkJCXZxX2Vycih2cSwgIlVuZXhwZWN0ZWQgZGVzY3JpcHRvciBmb3JtYXQgZm9yIFRYOiAiCisJCQkgICAgICAgIm91dCAlZCwgaW50ICVkXG4iLCBvdXQsIGluKTsKKwkJCWJyZWFrOworCQl9CisJCWxlbiA9IGlvdl9sZW5ndGgodnEtPmlvdiwgb3V0KTsKKwkJLyogU2FuaXR5IGNoZWNrICovCisJCWlmICghbGVuKSB7CisJCQl2cV9lcnIodnEsICJVbmV4cGVjdGVkIDAgbGVuIGZvciBUWFxuIik7CisJCQlicmVhazsKKwkJfQorCQl2aG9zdF9hZGRfdXNlZF9hbmRfc2lnbmFsKCZuLT5kZXYsIHZxLCBoZWFkLCAwKTsKKwkJdG90YWxfbGVuICs9IGxlbjsKKwkJaWYgKHVubGlrZWx5KHRvdGFsX2xlbiA+PSBWSE9TVF9URVNUX1dFSUdIVCkpIHsKKwkJCXZob3N0X3BvbGxfcXVldWUoJnZxLT5wb2xsKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJbXV0ZXhfdW5sb2NrKCZ2cS0+bXV0ZXgpOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfdnFfa2ljayhzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaykKK3sKKwlzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlLAorCQkJCQkJICBwb2xsLndvcmspOworCXN0cnVjdCB2aG9zdF90ZXN0ICpuID0gY29udGFpbmVyX29mKHZxLT5kZXYsIHN0cnVjdCB2aG9zdF90ZXN0LCBkZXYpOworCisJaGFuZGxlX3ZxKG4pOworfQorCitzdGF0aWMgaW50IHZob3N0X3Rlc3Rfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZikKK3sKKwlzdHJ1Y3Qgdmhvc3RfdGVzdCAqbiA9IGttYWxsb2Moc2l6ZW9mICpuLCBHRlBfS0VSTkVMKTsKKwlzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXY7CisJaW50IHI7CisKKwlpZiAoIW4pCisJCXJldHVybiAtRU5PTUVNOworCisJZGV2ID0gJm4tPmRldjsKKwluLT52cXNbVkhPU1RfVEVTVF9WUV0uaGFuZGxlX2tpY2sgPSBoYW5kbGVfdnFfa2ljazsKKwlyID0gdmhvc3RfZGV2X2luaXQoZGV2LCBuLT52cXMsIFZIT1NUX1RFU1RfVlFfTUFYKTsKKwlpZiAociA8IDApIHsKKwkJa2ZyZWUobik7CisJCXJldHVybiByOworCX0KKworCWYtPnByaXZhdGVfZGF0YSA9IG47CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgKnZob3N0X3Rlc3Rfc3RvcF92cShzdHJ1Y3Qgdmhvc3RfdGVzdCAqbiwKKwkJCQlzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSkKK3sKKwl2b2lkICpwcml2YXRlOworCisJbXV0ZXhfbG9jaygmdnEtPm11dGV4KTsKKwlwcml2YXRlID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh2cS0+cHJpdmF0ZV9kYXRhLAorCQkJCQkgbG9ja2RlcF9pc19oZWxkKCZ2cS0+bXV0ZXgpKTsKKwlyY3VfYXNzaWduX3BvaW50ZXIodnEtPnByaXZhdGVfZGF0YSwgTlVMTCk7CisJbXV0ZXhfdW5sb2NrKCZ2cS0+bXV0ZXgpOworCXJldHVybiBwcml2YXRlOworfQorCitzdGF0aWMgdm9pZCB2aG9zdF90ZXN0X3N0b3Aoc3RydWN0IHZob3N0X3Rlc3QgKm4sIHZvaWQgKipwcml2YXRlcCkKK3sKKwkqcHJpdmF0ZXAgPSB2aG9zdF90ZXN0X3N0b3BfdnEobiwgbi0+dnFzICsgVkhPU1RfVEVTVF9WUSk7Cit9CisKK3N0YXRpYyB2b2lkIHZob3N0X3Rlc3RfZmx1c2hfdnEoc3RydWN0IHZob3N0X3Rlc3QgKm4sIGludCBpbmRleCkKK3sKKwl2aG9zdF9wb2xsX2ZsdXNoKCZuLT5kZXYudnFzW2luZGV4XS5wb2xsKTsKK30KKworc3RhdGljIHZvaWQgdmhvc3RfdGVzdF9mbHVzaChzdHJ1Y3Qgdmhvc3RfdGVzdCAqbikKK3sKKwl2aG9zdF90ZXN0X2ZsdXNoX3ZxKG4sIFZIT1NUX1RFU1RfVlEpOworfQorCitzdGF0aWMgaW50IHZob3N0X3Rlc3RfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZikKK3sKKwlzdHJ1Y3Qgdmhvc3RfdGVzdCAqbiA9IGYtPnByaXZhdGVfZGF0YTsKKwl2b2lkICAqcHJpdmF0ZTsKKworCXZob3N0X3Rlc3Rfc3RvcChuLCAmcHJpdmF0ZSk7CisJdmhvc3RfdGVzdF9mbHVzaChuKTsKKwl2aG9zdF9kZXZfY2xlYW51cCgmbi0+ZGV2KTsKKwkvKiBXZSBkbyBhbiBleHRyYSBmbHVzaCBiZWZvcmUgZnJlZWluZyBtZW1vcnksCisJICogc2luY2Ugam9icyBjYW4gcmUtcXVldWUgdGhlbXNlbHZlcy4gKi8KKwl2aG9zdF90ZXN0X2ZsdXNoKG4pOworCWtmcmVlKG4pOworCXJldHVybiAwOworfQorCitzdGF0aWMgbG9uZyB2aG9zdF90ZXN0X3J1bihzdHJ1Y3Qgdmhvc3RfdGVzdCAqbiwgaW50IHRlc3QpCit7CisJdm9pZCAqcHJpdiwgKm9sZHByaXY7CisJc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnE7CisJaW50IHIsIGluZGV4OworCisJaWYgKHRlc3QgPCAwIHx8IHRlc3QgPiAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJm4tPmRldi5tdXRleCk7CisJciA9IHZob3N0X2Rldl9jaGVja19vd25lcigmbi0+ZGV2KTsKKwlpZiAocikKKwkJZ290byBlcnI7CisKKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBuLT5kZXYubnZxczsgKytpbmRleCkgeworCQkvKiBWZXJpZnkgdGhhdCByaW5nIGhhcyBiZWVuIHNldHVwIGNvcnJlY3RseS4gKi8KKwkJaWYgKCF2aG9zdF92cV9hY2Nlc3Nfb2soJm4tPnZxc1tpbmRleF0pKSB7CisJCQlyID0gLUVGQVVMVDsKKwkJCWdvdG8gZXJyOworCQl9CisJfQorCisJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgbi0+ZGV2Lm52cXM7ICsraW5kZXgpIHsKKwkJdnEgPSBuLT52cXMgKyBpbmRleDsKKwkJbXV0ZXhfbG9jaygmdnEtPm11dGV4KTsKKwkJcHJpdiA9IHRlc3QgPyBuIDogTlVMTDsKKworCQkvKiBzdGFydCBwb2xsaW5nIG5ldyBzb2NrZXQgKi8KKwkJb2xkcHJpdiA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQodnEtPnByaXZhdGVfZGF0YSwKKwkJCQkJCSAgICBsb2NrZGVwX2lzX2hlbGQoJnZxLT5tdXRleCkpOworCQlyY3VfYXNzaWduX3BvaW50ZXIodnEtPnByaXZhdGVfZGF0YSwgcHJpdik7CisKKwkJbXV0ZXhfdW5sb2NrKCZ2cS0+bXV0ZXgpOworCisJCWlmIChvbGRwcml2KSB7CisJCQl2aG9zdF90ZXN0X2ZsdXNoX3ZxKG4sIGluZGV4KTsKKwkJfQorCX0KKworCW11dGV4X3VubG9jaygmbi0+ZGV2Lm11dGV4KTsKKwlyZXR1cm4gMDsKKworZXJyOgorCW11dGV4X3VubG9jaygmbi0+ZGV2Lm11dGV4KTsKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIGxvbmcgdmhvc3RfdGVzdF9yZXNldF9vd25lcihzdHJ1Y3Qgdmhvc3RfdGVzdCAqbikKK3sKKwl2b2lkICpwcml2ID0gTlVMTDsKKwlsb25nIGVycjsKKwltdXRleF9sb2NrKCZuLT5kZXYubXV0ZXgpOworCWVyciA9IHZob3N0X2Rldl9jaGVja19vd25lcigmbi0+ZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIGRvbmU7CisJdmhvc3RfdGVzdF9zdG9wKG4sICZwcml2KTsKKwl2aG9zdF90ZXN0X2ZsdXNoKG4pOworCWVyciA9IHZob3N0X2Rldl9yZXNldF9vd25lcigmbi0+ZGV2KTsKK2RvbmU6CisJbXV0ZXhfdW5sb2NrKCZuLT5kZXYubXV0ZXgpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgdmhvc3RfdGVzdF9zZXRfZmVhdHVyZXMoc3RydWN0IHZob3N0X3Rlc3QgKm4sIHU2NCBmZWF0dXJlcykKK3sKKwltdXRleF9sb2NrKCZuLT5kZXYubXV0ZXgpOworCWlmICgoZmVhdHVyZXMgJiAoMSA8PCBWSE9TVF9GX0xPR19BTEwpKSAmJgorCSAgICAhdmhvc3RfbG9nX2FjY2Vzc19vaygmbi0+ZGV2KSkgeworCQltdXRleF91bmxvY2soJm4tPmRldi5tdXRleCk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwluLT5kZXYuYWNrZWRfZmVhdHVyZXMgPSBmZWF0dXJlczsKKwlzbXBfd21iKCk7CisJdmhvc3RfdGVzdF9mbHVzaChuKTsKKwltdXRleF91bmxvY2soJm4tPmRldi5tdXRleCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBsb25nIHZob3N0X3Rlc3RfaW9jdGwoc3RydWN0IGZpbGUgKmYsIHVuc2lnbmVkIGludCBpb2N0bCwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IHZob3N0X3Rlc3QgKm4gPSBmLT5wcml2YXRlX2RhdGE7CisJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CisJdTY0IF9fdXNlciAqZmVhdHVyZXAgPSBhcmdwOworCWludCB0ZXN0OworCXU2NCBmZWF0dXJlczsKKwlpbnQgcjsKKwlzd2l0Y2ggKGlvY3RsKSB7CisJY2FzZSBWSE9TVF9URVNUX1JVTjoKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZ0ZXN0LCBhcmdwLCBzaXplb2YgdGVzdCkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJcmV0dXJuIHZob3N0X3Rlc3RfcnVuKG4sIHRlc3QpOworCWNhc2UgVkhPU1RfR0VUX0ZFQVRVUkVTOgorCQlmZWF0dXJlcyA9IFZIT1NUX0ZFQVRVUkVTOworCQlpZiAoY29weV90b191c2VyKGZlYXR1cmVwLCAmZmVhdHVyZXMsIHNpemVvZiBmZWF0dXJlcykpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJcmV0dXJuIDA7CisJY2FzZSBWSE9TVF9TRVRfRkVBVFVSRVM6CisJCWlmIChjb3B5X2Zyb21fdXNlcigmZmVhdHVyZXMsIGZlYXR1cmVwLCBzaXplb2YgZmVhdHVyZXMpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWlmIChmZWF0dXJlcyAmIH5WSE9TVF9GRUFUVVJFUykKKwkJCXJldHVybiAtRU9QTk9UU1VQUDsKKwkJcmV0dXJuIHZob3N0X3Rlc3Rfc2V0X2ZlYXR1cmVzKG4sIGZlYXR1cmVzKTsKKwljYXNlIFZIT1NUX1JFU0VUX09XTkVSOgorCQlyZXR1cm4gdmhvc3RfdGVzdF9yZXNldF9vd25lcihuKTsKKwlkZWZhdWx0OgorCQltdXRleF9sb2NrKCZuLT5kZXYubXV0ZXgpOworCQlyID0gdmhvc3RfZGV2X2lvY3RsKCZuLT5kZXYsIGlvY3RsLCBhcmcpOworCQl2aG9zdF90ZXN0X2ZsdXNoKG4pOworCQltdXRleF91bmxvY2soJm4tPmRldi5tdXRleCk7CisJCXJldHVybiByOworCX0KK30KKworI2lmZGVmIENPTkZJR19DT01QQVQKK3N0YXRpYyBsb25nIHZob3N0X3Rlc3RfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmLCB1bnNpZ25lZCBpbnQgaW9jdGwsCisJCQkJICAgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJcmV0dXJuIHZob3N0X3Rlc3RfaW9jdGwoZiwgaW9jdGwsICh1bnNpZ25lZCBsb25nKWNvbXBhdF9wdHIoYXJnKSk7Cit9CisjZW5kaWYKKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmhvc3RfdGVzdF9mb3BzID0geworCS5vd25lciAgICAgICAgICA9IFRISVNfTU9EVUxFLAorCS5yZWxlYXNlICAgICAgICA9IHZob3N0X3Rlc3RfcmVsZWFzZSwKKwkudW5sb2NrZWRfaW9jdGwgPSB2aG9zdF90ZXN0X2lvY3RsLAorI2lmZGVmIENPTkZJR19DT01QQVQKKwkuY29tcGF0X2lvY3RsICAgPSB2aG9zdF90ZXN0X2NvbXBhdF9pb2N0bCwKKyNlbmRpZgorCS5vcGVuICAgICAgICAgICA9IHZob3N0X3Rlc3Rfb3BlbiwKKwkubGxzZWVrCQk9IG5vb3BfbGxzZWVrLAorfTsKKworc3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIHZob3N0X3Rlc3RfbWlzYyA9IHsKKwlNSVNDX0RZTkFNSUNfTUlOT1IsCisJInZob3N0LXRlc3QiLAorCSZ2aG9zdF90ZXN0X2ZvcHMsCit9OworCitzdGF0aWMgaW50IHZob3N0X3Rlc3RfaW5pdCh2b2lkKQoreworCXJldHVybiBtaXNjX3JlZ2lzdGVyKCZ2aG9zdF90ZXN0X21pc2MpOworfQorbW9kdWxlX2luaXQodmhvc3RfdGVzdF9pbml0KTsKKworc3RhdGljIHZvaWQgdmhvc3RfdGVzdF9leGl0KHZvaWQpCit7CisJbWlzY19kZXJlZ2lzdGVyKCZ2aG9zdF90ZXN0X21pc2MpOworfQorbW9kdWxlX2V4aXQodmhvc3RfdGVzdF9leGl0KTsKKworTU9EVUxFX1ZFUlNJT04oIjAuMC4xIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CitNT0RVTEVfQVVUSE9SKCJNaWNoYWVsIFMuIFRzaXJraW4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiSG9zdCBrZXJuZWwgc2lkZSBmb3IgdmlydGlvIHNpbXVsYXRvciIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC90ZXN0LmggYi9kcml2ZXJzL3Zob3N0L3Rlc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmVmNWRmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aG9zdC90ZXN0LmgKQEAgLTAsMCArMSw3IEBACisjaWZuZGVmIExJTlVYX1ZIT1NUX1RFU1RfSAorI2RlZmluZSBMSU5VWF9WSE9TVF9URVNUX0gKKworLyogU3RhcnQgYSBnaXZlbiB0ZXN0IG9uIHRoZSB2aXJ0aW8gbnVsbCBkZXZpY2UuIDAgc3RvcHMgYWxsIHRlc3RzLiAqLworI2RlZmluZSBWSE9TVF9URVNUX1JVTiBfSU9XKFZIT1NUX1ZJUlRJTywgMHgzMSwgaW50KQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3Qvdmhvc3QuYyBiL2RyaXZlcnMvdmhvc3Qvdmhvc3QuYwppbmRleCAxNTljNzdhLi4zODI0NGY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Zob3N0L3Zob3N0LmMKKysrIGIvZHJpdmVycy92aG9zdC92aG9zdC5jCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvdmhvc3QuaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW9fbmV0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tbXVfY29udGV4dC5oPgogI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+CkBAIC0yOSw4ICszMCw2IEBACiAjaW5jbHVkZSA8bGludXgvaWZfcGFja2V0Lmg+CiAjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CiAKLSNpbmNsdWRlIDxuZXQvc29jay5oPgotCiAjaW5jbHVkZSAidmhvc3QuaCIKIAogZW51bSB7CkBAIC0xNTcsNyArMTU2LDYgQEAKIAl2cS0+YXZhaWxfaWR4ID0gMDsKIAl2cS0+bGFzdF91c2VkX2lkeCA9IDA7CiAJdnEtPnVzZWRfZmxhZ3MgPSAwOwotCXZxLT51c2VkX2ZsYWdzID0gMDsKIAl2cS0+bG9nX3VzZWQgPSBmYWxzZTsKIAl2cS0+bG9nX2FkZHIgPSAtMXVsbDsKIAl2cS0+dmhvc3RfaGxlbiA9IDA7CkBAIC0xNzgsNiArMTc2LDggQEAKIAlzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yayA9IE5VTEw7CiAJdW5zaWduZWQgdW5pbml0aWFsaXplZF92YXIoc2VxKTsKIAorCXVzZV9tbShkZXYtPm1tKTsKKwogCWZvciAoOzspIHsKIAkJLyogbWIgcGFpcmVkIHcvIGt0aHJlYWRfc3RvcCAqLwogCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwpAQCAtMTkyLDcgKzE5Miw3IEBACiAJCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKIAkJCXNwaW5fdW5sb2NrX2lycSgmZGV2LT53b3JrX2xvY2spOwogCQkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwotCQkJcmV0dXJuIDA7CisJCQlicmVhazsKIAkJfQogCQlpZiAoIWxpc3RfZW1wdHkoJmRldi0+d29ya19saXN0KSkgewogCQkJd29yayA9IGxpc3RfZmlyc3RfZW50cnkoJmRldi0+d29ya19saXN0LApAQCAtMjEwLDYgKzIxMCw4IEBACiAJCQlzY2hlZHVsZSgpOwogCiAJfQorCXVudXNlX21tKGRldi0+bW0pOworCXJldHVybiAwOwogfQogCiAvKiBIZWxwZXIgdG8gYWxsb2NhdGUgaW92ZWMgYnVmZmVycyBmb3IgYWxsIHZxcy4gKi8KQEAgLTQwMiwxNSArNDA0LDE0IEBACiAJa2ZyZWUocmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChkZXYtPm1lbW9yeSwKIAkJCQkJbG9ja2RlcF9pc19oZWxkKCZkZXYtPm11dGV4KSkpOwogCVJDVV9JTklUX1BPSU5URVIoZGV2LT5tZW1vcnksIE5VTEwpOwotCWlmIChkZXYtPm1tKQotCQltbXB1dChkZXYtPm1tKTsKLQlkZXYtPm1tID0gTlVMTDsKLQogCVdBUk5fT04oIWxpc3RfZW1wdHkoJmRldi0+d29ya19saXN0KSk7CiAJaWYgKGRldi0+d29ya2VyKSB7CiAJCWt0aHJlYWRfc3RvcChkZXYtPndvcmtlcik7CiAJCWRldi0+d29ya2VyID0gTlVMTDsKIAl9CisJaWYgKGRldi0+bW0pCisJCW1tcHV0KGRldi0+bW0pOworCWRldi0+bW0gPSBOVUxMOwogfQogCiBzdGF0aWMgaW50IGxvZ19hY2Nlc3Nfb2sodm9pZCBfX3VzZXIgKmxvZ19iYXNlLCB1NjQgYWRkciwgdW5zaWduZWQgbG9uZyBzeikKQEAgLTg4MSwxNSArODgyLDE1IEBACiBzdGF0aWMgaW50IGxvZ193cml0ZSh2b2lkIF9fdXNlciAqbG9nX2Jhc2UsCiAJCSAgICAgdTY0IHdyaXRlX2FkZHJlc3MsIHU2NCB3cml0ZV9sZW5ndGgpCiB7CisJdTY0IHdyaXRlX3BhZ2UgPSB3cml0ZV9hZGRyZXNzIC8gVkhPU1RfUEFHRV9TSVpFOwogCWludCByOwogCWlmICghd3JpdGVfbGVuZ3RoKQogCQlyZXR1cm4gMDsKIAl3cml0ZV9sZW5ndGggKz0gd3JpdGVfYWRkcmVzcyAlIFZIT1NUX1BBR0VfU0laRTsKLQl3cml0ZV9hZGRyZXNzIC89IFZIT1NUX1BBR0VfU0laRTsKIAlmb3IgKDs7KSB7CiAJCXU2NCBiYXNlID0gKHU2NCkodW5zaWduZWQgbG9uZylsb2dfYmFzZTsKLQkJdTY0IGxvZyA9IGJhc2UgKyB3cml0ZV9hZGRyZXNzIC8gODsKLQkJaW50IGJpdCA9IHdyaXRlX2FkZHJlc3MgJSA4OworCQl1NjQgbG9nID0gYmFzZSArIHdyaXRlX3BhZ2UgLyA4OworCQlpbnQgYml0ID0gd3JpdGVfcGFnZSAlIDg7CiAJCWlmICgodTY0KSh1bnNpZ25lZCBsb25nKWxvZyAhPSBsb2cpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJciA9IHNldF9iaXRfdG9fdXNlcihiaXQsICh2b2lkIF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKWxvZyk7CkBAIC04OTgsNyArODk5LDcgQEAKIAkJaWYgKHdyaXRlX2xlbmd0aCA8PSBWSE9TVF9QQUdFX1NJWkUpCiAJCQlicmVhazsKIAkJd3JpdGVfbGVuZ3RoIC09IFZIT1NUX1BBR0VfU0laRTsKLQkJd3JpdGVfYWRkcmVzcyArPSAxOworCQl3cml0ZV9wYWdlICs9IDE7CiAJfQogCXJldHVybiByOwogfQpAQCAtMTA5Myw3ICsxMDk0LDcgQEAKIAogCS8qIENoZWNrIGl0IGlzbid0IGRvaW5nIHZlcnkgc3RyYW5nZSB0aGluZ3Mgd2l0aCBkZXNjcmlwdG9yIG51bWJlcnMuICovCiAJbGFzdF9hdmFpbF9pZHggPSB2cS0+bGFzdF9hdmFpbF9pZHg7Ci0JaWYgKHVubGlrZWx5KGdldF91c2VyKHZxLT5hdmFpbF9pZHgsICZ2cS0+YXZhaWwtPmlkeCkpKSB7CisJaWYgKHVubGlrZWx5KF9fZ2V0X3VzZXIodnEtPmF2YWlsX2lkeCwgJnZxLT5hdmFpbC0+aWR4KSkpIHsKIAkJdnFfZXJyKHZxLCAiRmFpbGVkIHRvIGFjY2VzcyBhdmFpbCBpZHggYXQgJXBcbiIsCiAJCSAgICAgICAmdnEtPmF2YWlsLT5pZHgpOwogCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTExMTQsOCArMTExNSw4IEBACiAKIAkvKiBHcmFiIHRoZSBuZXh0IGRlc2NyaXB0b3IgbnVtYmVyIHRoZXkncmUgYWR2ZXJ0aXNpbmcsIGFuZCBpbmNyZW1lbnQKIAkgKiB0aGUgaW5kZXggd2UndmUgc2Vlbi4gKi8KLQlpZiAodW5saWtlbHkoZ2V0X3VzZXIoaGVhZCwKLQkJCSAgICAgICZ2cS0+YXZhaWwtPnJpbmdbbGFzdF9hdmFpbF9pZHggJSB2cS0+bnVtXSkpKSB7CisJaWYgKHVubGlrZWx5KF9fZ2V0X3VzZXIoaGVhZCwKKwkJCQkmdnEtPmF2YWlsLT5yaW5nW2xhc3RfYXZhaWxfaWR4ICUgdnEtPm51bV0pKSkgewogCQl2cV9lcnIodnEsICJGYWlsZWQgdG8gcmVhZCBoZWFkOiBpZHggJWQgYWRkcmVzcyAlcFxuIiwKIAkJICAgICAgIGxhc3RfYXZhaWxfaWR4LAogCQkgICAgICAgJnZxLT5hdmFpbC0+cmluZ1tsYXN0X2F2YWlsX2lkeCAlIHZxLT5udW1dKTsKQEAgLTEyMTQsMTcgKzEyMTUsMTcgQEAKIAkvKiBUaGUgdmlydHF1ZXVlIGNvbnRhaW5zIGEgcmluZyBvZiB1c2VkIGJ1ZmZlcnMuICBHZXQgYSBwb2ludGVyIHRvIHRoZQogCSAqIG5leHQgZW50cnkgaW4gdGhhdCB1c2VkIHJpbmcuICovCiAJdXNlZCA9ICZ2cS0+dXNlZC0+cmluZ1t2cS0+bGFzdF91c2VkX2lkeCAlIHZxLT5udW1dOwotCWlmIChwdXRfdXNlcihoZWFkLCAmdXNlZC0+aWQpKSB7CisJaWYgKF9fcHV0X3VzZXIoaGVhZCwgJnVzZWQtPmlkKSkgewogCQl2cV9lcnIodnEsICJGYWlsZWQgdG8gd3JpdGUgdXNlZCBpZCIpOwogCQlyZXR1cm4gLUVGQVVMVDsKIAl9Ci0JaWYgKHB1dF91c2VyKGxlbiwgJnVzZWQtPmxlbikpIHsKKwlpZiAoX19wdXRfdXNlcihsZW4sICZ1c2VkLT5sZW4pKSB7CiAJCXZxX2Vycih2cSwgIkZhaWxlZCB0byB3cml0ZSB1c2VkIGxlbiIpOwogCQlyZXR1cm4gLUVGQVVMVDsKIAl9CiAJLyogTWFrZSBzdXJlIGJ1ZmZlciBpcyB3cml0dGVuIGJlZm9yZSB3ZSB1cGRhdGUgaW5kZXguICovCiAJc21wX3dtYigpOwotCWlmIChwdXRfdXNlcih2cS0+bGFzdF91c2VkX2lkeCArIDEsICZ2cS0+dXNlZC0+aWR4KSkgeworCWlmIChfX3B1dF91c2VyKHZxLT5sYXN0X3VzZWRfaWR4ICsgMSwgJnZxLT51c2VkLT5pZHgpKSB7CiAJCXZxX2Vycih2cSwgIkZhaWxlZCB0byBpbmNyZW1lbnQgdXNlZCBpZHgiKTsKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQpAQCAtMTI1Niw3ICsxMjU3LDcgQEAKIAogCXN0YXJ0ID0gdnEtPmxhc3RfdXNlZF9pZHggJSB2cS0+bnVtOwogCXVzZWQgPSB2cS0+dXNlZC0+cmluZyArIHN0YXJ0OwotCWlmIChjb3B5X3RvX3VzZXIodXNlZCwgaGVhZHMsIGNvdW50ICogc2l6ZW9mICp1c2VkKSkgeworCWlmIChfX2NvcHlfdG9fdXNlcih1c2VkLCBoZWFkcywgY291bnQgKiBzaXplb2YgKnVzZWQpKSB7CiAJCXZxX2Vycih2cSwgIkZhaWxlZCB0byB3cml0ZSB1c2VkIik7CiAJCXJldHVybiAtRUZBVUxUOwogCX0KQEAgLTEzMTcsNyArMTMxOCw3IEBACiAJICogaW50ZXJydXB0cy4gKi8KIAlzbXBfbWIoKTsKIAotCWlmIChnZXRfdXNlcihmbGFncywgJnZxLT5hdmFpbC0+ZmxhZ3MpKSB7CisJaWYgKF9fZ2V0X3VzZXIoZmxhZ3MsICZ2cS0+YXZhaWwtPmZsYWdzKSkgewogCQl2cV9lcnIodnEsICJGYWlsZWQgdG8gZ2V0IGZsYWdzIik7CiAJCXJldHVybjsKIAl9CkBAIC0xMzY4LDcgKzEzNjksNyBAQAogCS8qIFRoZXkgY291bGQgaGF2ZSBzbGlwcGVkIG9uZSBpbiBhcyB3ZSB3ZXJlIGRvaW5nIHRoYXQ6IG1ha2UKIAkgKiBzdXJlIGl0J3Mgd3JpdHRlbiwgdGhlbiBjaGVjayBhZ2Fpbi4gKi8KIAlzbXBfbWIoKTsKLQlyID0gZ2V0X3VzZXIoYXZhaWxfaWR4LCAmdnEtPmF2YWlsLT5pZHgpOworCXIgPSBfX2dldF91c2VyKGF2YWlsX2lkeCwgJnZxLT5hdmFpbC0+aWR4KTsKIAlpZiAocikgewogCQl2cV9lcnIodnEsICJGYWlsZWQgdG8gY2hlY2sgYXZhaWwgaWR4IGF0ICVwOiAlZFxuIiwKIAkJICAgICAgICZ2cS0+YXZhaWwtPmlkeCwgcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Zob3N0LmggYi9kcml2ZXJzL3Zob3N0L3Zob3N0LmgKaW5kZXggMDczZDA2YS4uMmFmNDRiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aG9zdC92aG9zdC5oCisrKyBiL2RyaXZlcnMvdmhvc3Qvdmhvc3QuaApAQCAtMTAyLDcgKzEwMiw3IEBACiAJICogZmx1c2ggdGhlIHZob3N0X3dvcmsgaW5zdGVhZCBvZiBzeW5jaHJvbml6ZV9yY3UuIFRoZXJlZm9yZSByZWFkZXJzIGRvCiAJICogbm90IG5lZWQgdG8gY2FsbCByY3VfcmVhZF9sb2NrL3JjdV9yZWFkX3VubG9jazogdGhlIGJlZ2lubmluZyBvZgogCSAqIHZob3N0X3dvcmsgZXhlY3V0aW9uIGFjdHMgaW5zdGVhZCBvZiByY3VfcmVhZF9sb2NrKCkgYW5kIHRoZSBlbmQgb2YKLQkgKiB2aG9zdF93b3JrIGV4ZWN1dGlvbiBhY3RzIGluc3RlYWQgb2YgcmN1X3JlYWRfbG9jaygpLgorCSAqIHZob3N0X3dvcmsgZXhlY3V0aW9uIGFjdHMgaW5zdGVhZCBvZiByY3VfcmVhZF91bmxvY2soKS4KIAkgKiBXcml0ZXJzIHVzZSB2aXJ0cXVldWUgbXV0ZXguICovCiAJdm9pZCBfX3JjdSAqcHJpdmF0ZV9kYXRhOwogCS8qIExvZyB3cml0ZSBkZXNjcmlwdG9ycyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9LY29uZmlnIGIvZHJpdmVycy92aWRlby9LY29uZmlnCmluZGV4IDI3YzFmYjQuLjU1ZGM2ZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vS2NvbmZpZworKysgYi9kcml2ZXJzL3ZpZGVvL0tjb25maWcKQEAgLTE4Niw2ICsxODYsMTQgQEAKICAgICAgICBkZXBlbmRzIG9uIEZCCiAgICAgICAgZGVmYXVsdCBuCiAKK2NvbmZpZyBGQl9XTVRfR0VfUk9QUworCXRyaXN0YXRlCisJZGVwZW5kcyBvbiBGQgorCWRlZmF1bHQgbgorCS0tLWhlbHAtLS0KKwkgIEluY2x1ZGUgZnVuY3Rpb25zIGZvciBhY2NlbGVyYXRlZCByZWN0YW5nbGUgZmlsbGluZyBhbmQgYXJlYQorCSAgY29weWluZyB1c2luZyBXb25kZXJNZWRpYSBHcmFwaGljcyBFbmdpbmUgb3BlcmF0aW9ucy4KKwogY29uZmlnIEZCX0RFRkVSUkVEX0lPCiAJYm9vbAogCWRlcGVuZHMgb24gRkIKQEAgLTYzNSw2ICs2NDMsNzIgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGJmaW4tbHEwMzVxMS1mYi4KIAorY29uZmlnIEZCX0JGNTM3X0xRMDM1CisJdHJpc3RhdGUgIlNIQVJQIExRMDM1IFRGVCBMQ0QgKEJGNTM3IFNUQU1QKSIKKwlkZXBlbmRzIG9uIEZCICYmIChCRjUzNCB8fCBCRjUzNiB8fCBCRjUzNykgJiYgSTJDX0JMQUNLRklOX1RXSQorCXNlbGVjdCBGQl9DRkJfRklMTFJFQ1QKKwlzZWxlY3QgRkJfQ0ZCX0NPUFlBUkVBCisJc2VsZWN0IEZCX0NGQl9JTUFHRUJMSVQKKwlzZWxlY3QgQkZJTl9HUFRJTUVSUworCWhlbHAKKwkgIFRoaXMgaXMgdGhlIGZyYW1lYnVmZmVyIGRldmljZSBmb3IgYSBTSEFSUCBMUTAzNVE3REIwMyBURlQgTENECisJICBhdHRhY2hlZCB0byBhIEJGNTM3LgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBiZjUzNy1scTAzNS4KKworY29uZmlnIEZCX0JGSU5fNzM5MworCXRyaXN0YXRlICJCbGFja2ZpbiBBRFY3MzkzIFZpZGVvIGVuY29kZXIiCisJZGVwZW5kcyBvbiBGQiAmJiBCTEFDS0ZJTgorCXNlbGVjdCBJMkMKKwlzZWxlY3QgRkJfQ0ZCX0ZJTExSRUNUCisJc2VsZWN0IEZCX0NGQl9DT1BZQVJFQQorCXNlbGVjdCBGQl9DRkJfSU1BR0VCTElUCisJaGVscAorCSAgVGhpcyBpcyB0aGUgZnJhbWVidWZmZXIgZGV2aWNlIGZvciBhIEFEVjczOTMgdmlkZW8gZW5jb2RlcgorCSAgYXR0YWNoZWQgdG8gYSBCbGFja2ZpbiBvbiB0aGUgUFBJIHBvcnQuCisJICBJZiB5b3VyIEJsYWNrZmluIGJvYXJkIGhhcyBhIEFEVjczOTMgc2VsZWN0IFkuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGJmaW5fYWR2NzM5M2ZiLgorCitjaG9pY2UKKwlwcm9tcHQgICJWaWRlbyBtb2RlIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBGQl9CRklOXzczOTMKKwlkZWZhdWx0IE5UU0MKKworY29uZmlnIE5UU0MKKwlib29sICdOVFNDIDcyMHg0ODAnCisKK2NvbmZpZyBQQUwKKwlib29sICdQQUwgNzIweDU3NicKKworY29uZmlnIE5UU0NfNjQweDQ4MAorCWJvb2wgJ05UU0MgNjQweDQ4MCAoRXhwZXJpbWVudGFsKScKKworY29uZmlnIFBBTF82NDB4NDgwCisJYm9vbCAnUEFMIDY0MHg0ODAgKEV4cGVyaW1lbnRhbCknCisKK2NvbmZpZyBOVFNDX1lDQkNSCisJYm9vbCAnTlRTQyA3MjB4NDgwIFlDYkNSIGlucHV0JworCitjb25maWcgUEFMX1lDQkNSCisJYm9vbCAnUEFMIDcyMHg1NzYgWUNiQ1IgaW5wdXQnCisKK2VuZGNob2ljZQorCitjaG9pY2UKKwlwcm9tcHQgICJTaXplIG9mIEFEVjczOTMgZnJhbWUgYnVmZmVyIG1lbW9yeSBTaW5nbGUvRG91YmxlIFNpemUiCisJZGVwZW5kcyBvbiAoRkJfQkZJTl83MzkzKQorCWRlZmF1bHQgQURWNzM5M18xWE1FTQorCitjb25maWcgQURWNzM5M18xWE1FTQorCWJvb2wgJ1NpbmdsZScKKworY29uZmlnIEFEVjczOTNfMlhNRU0KKwlib29sICdEb3VibGUnCitlbmRjaG9pY2UKKwogY29uZmlnIEZCX1NUSQogCXRyaXN0YXRlICJIUCBTVEkgZnJhbWUgYnVmZmVyIGRldmljZSBzdXBwb3J0IgogCWRlcGVuZHMgb24gRkIgJiYgUEFSSVNDCkBAIC03NTAsMjQgKzgyNCwxNCBAQAogY29uZmlnIEZCX0hHQQogCXRyaXN0YXRlICJIZXJjdWxlcyBtb25vIGdyYXBoaWNzIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBGQiAmJiBYODYKLQlzZWxlY3QgRkJfQ0ZCX0ZJTExSRUNUCi0Jc2VsZWN0IEZCX0NGQl9DT1BZQVJFQQotCXNlbGVjdCBGQl9DRkJfSU1BR0VCTElUCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhIEhlcmN1bGVzIG1vbm8gZ3JhcGhpY3MgY2FyZC4KIAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgaGdhZmIuCiAKLQkgIEFzIHRoaXMgY2FyZCB0ZWNobm9sb2d5IGlzIDE1IHllYXJzIG9sZCwgbW9zdCBwZW9wbGUgd2lsbCBhbnN3ZXIgTgotCSAgaGVyZS4KLQotY29uZmlnIEZCX0hHQV9BQ0NFTAotCWJvb2wgIkhlcmN1bGVzIG1vbm8gQWNjZWxlcmF0aW9uIGZ1bmN0aW9ucyAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIEZCX0hHQSAmJiBFWFBFUklNRU5UQUwKLQktLS1oZWxwLS0tCi0JVGhpcyB3aWxsIGNvbXBpbGUgdGhlIEhlcmN1bGVzIG1vbm8gZ3JhcGhpY3Mgd2l0aAotCWFjY2VsZXJhdGlvbiBmdW5jdGlvbnMuCisJICBBcyB0aGlzIGNhcmQgdGVjaG5vbG9neSBpcyBhdCBsZWFzdCAyNSB5ZWFycyBvbGQsCisJICBtb3N0IHBlb3BsZSB3aWxsIGFuc3dlciBOIGhlcmUuCiAKIGNvbmZpZyBGQl9TR0lWVwogCXRyaXN0YXRlICJTR0kgVmlzdWFsIFdvcmtzdGF0aW9uIGZyYW1lYnVmZmVyIHN1cHBvcnQiCkBAIC0xNzIyLDYgKzE3ODYsMjQgQEAKIAkgIHZhcmlvdXMgcGFuZWxzIGFuZCBDUlRzIGJ5IHBhc3NpbmcgaW4ga2VybmVsIGNtZCBsaW5lIG9wdGlvbgogCSAgYXUxMjAwZmI6cGFuZWw9PG5hbWU+LgogCitjb25maWcgRkJfVlQ4NTAwCisJYm9vbCAiVlQ4NTAwIExDRCBEcml2ZXIiCisJZGVwZW5kcyBvbiAoRkIgPSB5KSAmJiBBUk0gJiYgQVJDSF9WVDg1MDAgJiYgVlRXTV9WRVJTSU9OX1ZUODUwMAorCXNlbGVjdCBGQl9XTVRfR0VfUk9QUworCXNlbGVjdCBGQl9TWVNfSU1BR0VCTElUCisJaGVscAorCSAgVGhpcyBpcyB0aGUgZnJhbWVidWZmZXIgZHJpdmVyIGZvciBWSUEgVlQ4NTAwIGludGVncmF0ZWQgTENECisJICBjb250cm9sbGVyLgorCitjb25maWcgRkJfV004NTA1CisJYm9vbCAiV004NTA1IGZyYW1lIGJ1ZmZlciBzdXBwb3J0IgorCWRlcGVuZHMgb24gKEZCID0geSkgJiYgQVJNICYmIEFSQ0hfVlQ4NTAwICYmIFZUV01fVkVSU0lPTl9XTTg1MDUKKwlzZWxlY3QgRkJfV01UX0dFX1JPUFMKKwlzZWxlY3QgRkJfU1lTX0lNQUdFQkxJVAorCWhlbHAKKwkgIFRoaXMgaXMgdGhlIGZyYW1lYnVmZmVyIGRyaXZlciBmb3IgV29uZGVyTWVkaWEgV004NTA1CisJICBpbnRlZ3JhdGVkIExDRCBjb250cm9sbGVyLgorCiBzb3VyY2UgImRyaXZlcnMvdmlkZW8vZ2VvZGUvS2NvbmZpZyIKIAogY29uZmlnIEZCX0hJVApAQCAtMTg1MCw2ICsxOTMyLDE2IEBACiAKIAkgIDxmaWxlOkRvY3VtZW50YXRpb24vZmIvcHhhZmIudHh0PiBkZXNjcmliZXMgdGhlIGF2YWlsYWJsZSBwYXJhbWV0ZXJzLgogCitjb25maWcgUFhBM1hYX0dDVQorCXRyaXN0YXRlICJQWEEzeHggMkQgZ3JhcGhpY3MgYWNjZWxlcmF0b3IgZHJpdmVyIgorCWRlcGVuZHMgb24gRkJfUFhBCisJaGVscAorCSAgS2VybmVsc3BhY2UgZHJpdmVyIGZvciB0aGUgMkQgZ3JhcGhpY3MgY29udHJvbGxlciB1bml0IChHQ1UpCisJICBmb3VuZCBvbiBQWEEzeHggcHJvY2Vzc29ycy4gVGhlcmUgaXMgYSBjb3VudGVycGFydCBkcml2ZXIgaW4gdGhlCisJICBEaXJlY3RGQiBzdWl0ZSwgc2VlIGh0dHA6Ly93d3cuZGlyZWN0ZmIub3JnLworCisJICBJZiB5b3UgY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBpdCB3aWxsIGJlIGNhbGxlZCBweGEzeHhfZ2N1LgorCiBjb25maWcgRkJfTUJYCiAJdHJpc3RhdGUgIjI3MDBHIExDRCBmcmFtZWJ1ZmZlciBzdXBwb3J0IgogCWRlcGVuZHMgb24gRkIgJiYgQVJDSF9QWEEKQEAgLTIwMzQsNiArMjEyNiwyMCBAQAogCiAJICBJZiB1bnN1cmUsIHNheSBOLgogCitjb25maWcgRkJfVURMCisJdHJpc3RhdGUgIkRpc3BsYXlsaW5rIFVTQiBGcmFtZWJ1ZmZlciBzdXBwb3J0IgorCWRlcGVuZHMgb24gRkIgJiYgVVNCCisJc2VsZWN0IEZCX01PREVfSEVMUEVSUworCXNlbGVjdCBGQl9TWVNfRklMTFJFQ1QKKwlzZWxlY3QgRkJfU1lTX0NPUFlBUkVBCisJc2VsZWN0IEZCX1NZU19JTUFHRUJMSVQKKwlzZWxlY3QgRkJfU1lTX0ZPUFMKKwlzZWxlY3QgRkJfREVGRVJSRURfSU8KKwktLS1oZWxwLS0tCisJICBUaGlzIGlzIGEga2VybmVsIGZyYW1lYnVmZmVyIGRyaXZlciBmb3IgRGlzcGxheUxpbmsgVVNCIGRldmljZXMuCisJICBTdXBwb3J0cyBmYmRldiBjbGllbnRzIGxpa2UgeGY4Ni12aWRlby1mYmRldiwga2RyaXZlLCBmYmksIGFuZAorCSAgbXBsYXllciAtdm8gZmJkZXYuIFN1cHBvcnRzIGFsbCBVU0IgMi4wIGVyYSBEaXNwbGF5TGluayBkZXZpY2VzLgorCSAgVG8gY29tcGlsZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSBuYW1lIGlzIHVkbGZiLgogCiBjb25maWcgRkJfUE5YNDAwOF9EVU0KIAl0cmlzdGF0ZSAiRGlzcGxheSBVcGRhdGUgTW9kdWxlIHN1cHBvcnQgb24gUGhpbGlwcyBQTlg0MDA4IGJvYXJkIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9NYWtlZmlsZSBiL2RyaXZlcnMvdmlkZW8vTWFrZWZpbGUKaW5kZXggNDg1ZThlZC4uOGM4ZmFiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3ZpZGVvL01ha2VmaWxlCkBAIC0yNiw2ICsyNiw3IEBACiBvYmotJChDT05GSUdfRkJfTUFDTU9ERVMpICAgICAgKz0gbWFjbW9kZXMubwogb2JqLSQoQ09ORklHX0ZCX0REQykgICAgICAgICAgICs9IGZiX2RkYy5vCiBvYmotJChDT05GSUdfRkJfREVGRVJSRURfSU8pICAgKz0gZmJfZGVmaW8ubworb2JqLSQoQ09ORklHX0ZCX1dNVF9HRV9ST1BTKSAgICs9IHdtdF9nZV9yb3BzLm8KIAogIyBIYXJkd2FyZSBzcGVjaWZpYyBkcml2ZXJzIGdvIGZpcnN0CiBvYmotJChDT05GSUdfRkJfQU1JR0EpICAgICAgICAgICAgKz0gYW1pZmIubyBjMnBfcGxhbmFyLm8KQEAgLTEwMCwxMCArMTAxLDEzIEBACiBvYmotJChDT05GSUdfRkJfQVNJTElBTlQpCSAgKz0gYXNpbGlhbnRmYi5vCiBvYmotJChDT05GSUdfRkJfUFhBKQkJICArPSBweGFmYi5vCiBvYmotJChDT05GSUdfRkJfUFhBMTY4KQkJICArPSBweGExNjhmYi5vCitvYmotJChDT05GSUdfUFhBM1hYX0dDVSkJICArPSBweGEzeHgtZ2N1Lm8KIG9iai0kKENPTkZJR19GQl9XMTAwKQkJICArPSB3MTAwZmIubwogb2JqLSQoQ09ORklHX0ZCX1RNSU8pCQkgICs9IHRtaW9mYi5vCiBvYmotJChDT05GSUdfRkJfQVUxMTAwKQkJICArPSBhdTExMDBmYi5vCiBvYmotJChDT05GSUdfRkJfQVUxMjAwKQkJICArPSBhdTEyMDBmYi5vCitvYmotJChDT05GSUdfRkJfVlQ4NTAwKQkJICArPSB2dDg1MDBsY2RmYi5vCitvYmotJChDT05GSUdfRkJfV004NTA1KQkJICArPSB3bTg1MDVmYi5vCiBvYmotJChDT05GSUdfRkJfUE1BR19BQSkJICArPSBwbWFnLWFhLWZiLm8KIG9iai0kKENPTkZJR19GQl9QTUFHX0JBKQkgICs9IHBtYWctYmEtZmIubwogb2JqLSQoQ09ORklHX0ZCX1BNQUdCX0IpCSAgKz0gcG1hZ2ItYi1mYi5vCkBAIC0xMjIsNiArMTI2LDcgQEAKIG9iai0kKENPTkZJR19GQl9JQk1fR1hUNDUwMCkJICArPSBneHQ0NTAwLm8KIG9iai0kKENPTkZJR19GQl9QUzMpCQkgICs9IHBzM2ZiLm8KIG9iai0kKENPTkZJR19GQl9TTTUwMSkgICAgICAgICAgICArPSBzbTUwMWZiLm8KK29iai0kKENPTkZJR19GQl9VREwpCQkgICs9IHVkbGZiLm8KIG9iai0kKENPTkZJR19GQl9YSUxJTlgpICAgICAgICAgICArPSB4aWxpbnhmYi5vCiBvYmotJChDT05GSUdfU0hfTUlQSV9EU0kpCSAgKz0gc2hfbWlwaV9kc2kubwogb2JqLSQoQ09ORklHX0ZCX1NIX01PQklMRV9IRE1JKQkgICs9IHNoX21vYmlsZV9oZG1pLm8KQEAgLTE0MSw5ICsxNDYsMTEgQEAKIG9iai0kKENPTkZJR19GQl9FRkkpICAgICAgICAgICAgICArPSBlZmlmYi5vCiBvYmotJChDT05GSUdfRkJfVkdBMTYpICAgICAgICAgICAgKz0gdmdhMTZmYi5vCiBvYmotJChDT05GSUdfRkJfT0YpICAgICAgICAgICAgICAgKz0gb2ZmYi5vCitvYmotJChDT05GSUdfRkJfQkY1MzdfTFEwMzUpICAgICAgKz0gYmY1MzctbHEwMzUubwogb2JqLSQoQ09ORklHX0ZCX0JGNTRYX0xRMDQzKQkgICs9IGJmNTR4LWxxMDQzZmIubwogb2JqLSQoQ09ORklHX0ZCX0JGSU5fTFEwMzVRMSkgICAgICs9IGJmaW4tbHEwMzVxMS1mYi5vCiBvYmotJChDT05GSUdfRkJfQkZJTl9UMzUwTUNRQikJICArPSBiZmluLXQzNTBtY3FiLWZiLm8KK29iai0kKENPTkZJR19GQl9CRklOXzczOTMpICAgICAgICArPSBiZmluX2FkdjczOTNmYi5vCiBvYmotJChDT05GSUdfRkJfTVgzKQkJICArPSBteDNmYi5vCiBvYmotJChDT05GSUdfRkJfREE4WFgpCQkgICs9IGRhOHh4LWZiLm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hdHkvYXR5ZmJfYmFzZS5jIGIvZHJpdmVycy92aWRlby9hdHkvYXR5ZmJfYmFzZS5jCmluZGV4IDViZjkxMjMuLjVhM2NlM2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXR5L2F0eWZiX2Jhc2UuYworKysgYi9kcml2ZXJzL3ZpZGVvL2F0eS9hdHlmYl9iYXNlLmMKQEAgLTI5NjksMTAgKzI5NjksOCBAQAogewogCXN0cnVjdCBhdHlmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwOwotCWNoYXIgcHJvcFsxMjhdOwotCXBoYW5kbGUgbm9kZTsKLQlpbnQgbGVuLCBpLCBqLCByZXQ7CiAJdTMyIG1lbSwgY2hpcF9pZDsKKwlpbnQgaSwgaiwgcmV0OwogCiAJLyoKIAkgKiBNYXAgbWVtb3J5LW1hcHBlZCByZWdpc3RlcnMuCkBAIC0zMDg4LDIzICszMDg2LDggQEAKIAkJYXR5X3N0X2xlMzIoTUVNX0NOVEwsIG1lbSwgcGFyKTsKIAl9CiAKLQkvKgotCSAqIElmIHRoaXMgaXMgdGhlIGNvbnNvbGUgZGV2aWNlLCB3ZSB3aWxsIHNldCBkZWZhdWx0IHZpZGVvCi0JICogc2V0dGluZ3MgdG8gd2hhdCB0aGUgUFJPTSBsZWZ0IHVzIHdpdGguCi0JICovCi0Jbm9kZSA9IHByb21fZ2V0Y2hpbGQocHJvbV9yb290X25vZGUpOwotCW5vZGUgPSBwcm9tX3NlYXJjaHNpYmxpbmdzKG5vZGUsICJhbGlhc2VzIik7Ci0JaWYgKG5vZGUpIHsKLQkJbGVuID0gcHJvbV9nZXRwcm9wZXJ0eShub2RlLCAic2NyZWVuIiwgcHJvcCwgc2l6ZW9mKHByb3ApKTsKLQkJaWYgKGxlbiA+IDApIHsKLQkJCXByb3BbbGVuXSA9ICdcMCc7Ci0JCQlub2RlID0gcHJvbV9maW5kZGV2aWNlKHByb3ApOwotCQl9IGVsc2UKLQkJCW5vZGUgPSAwOwotCX0KLQogCWRwID0gcGNpX2RldmljZV90b19PRl9ub2RlKHBkZXYpOwotCWlmIChub2RlID09IGRwLT5waGFuZGxlKSB7CisJaWYgKGRwID09IG9mX2NvbnNvbGVfZGV2aWNlKSB7CiAJCXN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyID0gJmRlZmF1bHRfdmFyOwogCQl1bnNpZ25lZCBpbnQgTiwgUCwgUSwgTSwgVCwgUjsKIAkJdTMyIHZfdG90YWwsIGhfdG90YWw7CkBAIC0zMTEyLDkgKzMwOTUsOSBAQAogCQl1OCBwbGxfcmVnc1sxNl07CiAJCXU4IGNsb2NrX2NudGw7CiAKLQkJY3J0Yy52eHJlcyA9IHByb21fZ2V0aW50ZGVmYXVsdChub2RlLCAid2lkdGgiLCAxMDI0KTsKLQkJY3J0Yy52eXJlcyA9IHByb21fZ2V0aW50ZGVmYXVsdChub2RlLCAiaGVpZ2h0IiwgNzY4KTsKLQkJdmFyLT5iaXRzX3Blcl9waXhlbCA9IHByb21fZ2V0aW50ZGVmYXVsdChub2RlLCAiZGVwdGgiLCA4KTsKKwkJY3J0Yy52eHJlcyA9IG9mX2dldGludHByb3BfZGVmYXVsdChkcCwgIndpZHRoIiwgMTAyNCk7CisJCWNydGMudnlyZXMgPSBvZl9nZXRpbnRwcm9wX2RlZmF1bHQoZHAsICJoZWlnaHQiLCA3NjgpOworCQl2YXItPmJpdHNfcGVyX3BpeGVsID0gb2ZfZ2V0aW50cHJvcF9kZWZhdWx0KGRwLCAiZGVwdGgiLCA4KTsKIAkJdmFyLT54b2Zmc2V0ID0gdmFyLT55b2Zmc2V0ID0gMDsKIAkJY3J0Yy5oX3RvdF9kaXNwID0gYXR5X2xkX2xlMzIoQ1JUQ19IX1RPVEFMX0RJU1AsIHBhcik7CiAJCWNydGMuaF9zeW5jX3N0cnRfd2lkID0gYXR5X2xkX2xlMzIoQ1JUQ19IX1NZTkNfU1RSVF9XSUQsIHBhcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JmNTM3LWxxMDM1LmMgYi9kcml2ZXJzL3ZpZGVvL2JmNTM3LWxxMDM1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThjNTA3OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vYmY1MzctbHEwMzUuYwpAQCAtMCwwICsxLDkxNCBAQAorLyoKKyAqIEFuYWxvZyBEZXZpY2VzIEJsYWNrZmluKEJGNTM3IFNUQU1QKSArIFNIQVJQIFRGVCBMQ0QuCisgKiBodHRwOi8vZG9jcy5ibGFja2Zpbi51Y2xpbnV4Lm9yZy9kb2t1LnBocD9pZD1odzpjYXJkczp0ZnQtbGNkCisgKgorICogQ29weXJpZ2h0IDIwMDYtMjAxMCBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIuCisgKi8KKworI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAorCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZmIuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2JhY2tsaWdodC5oPgorI2luY2x1ZGUgPGxpbnV4L2xjZC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxhc20vYmxhY2tmaW4uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL2RwbWMuaD4KKyNpbmNsdWRlIDxhc20vZG1hLmg+CisjaW5jbHVkZSA8YXNtL3BvcnRtdXguaD4KKworI2RlZmluZSBOT19CTCAxCisKKyNkZWZpbmUgTUFYX0JSSUdIRU5FU1MJOTUKKyNkZWZpbmUgTUlOX0JSSUdIRU5FU1MJNQorI2RlZmluZSBOQlJfUEFMRVRURQkyNTYKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IHBwaV9waW5zW10gPSB7CisJUF9QUEkwX0NMSywgUF9QUEkwX0QwLCBQX1BQSTBfRDEsIFBfUFBJMF9EMiwgUF9QUEkwX0QzLAorCVBfUFBJMF9ENCwgUF9QUEkwX0Q1LCBQX1BQSTBfRDYsIFBfUFBJMF9ENywKKwlQX1BQSTBfRDgsIFBfUFBJMF9EOSwgUF9QUEkwX0QxMCwgUF9QUEkwX0QxMSwKKwlQX1BQSTBfRDEyLCBQX1BQSTBfRDEzLCBQX1BQSTBfRDE0LCBQX1BQSTBfRDE1LCAwCit9OworCitzdGF0aWMgdW5zaWduZWQgY2hhciAqZmJfYnVmZmVyOyAgICAgICAgICAvKiBSR0IgQnVmZmVyICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyAqZG1hX2Rlc2NfdGFibGU7CitzdGF0aWMgaW50IHRfY29uZl9kb25lLCBscTAzNV9vcGVuX2NudDsKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soYmZpbl9scTAzNV9sb2NrKTsKKworc3RhdGljIGludCBsYW5kc2NhcGU7Cittb2R1bGVfcGFyYW0obGFuZHNjYXBlLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhsYW5kc2NhcGUsCisJIkxBTkRTQ0FQRSB1c2UgMzIweDI0MCBpbnN0ZWFkIG9mIE5hdGl2ZSAyNDB4MzIwIFJlc29sdXRpb24iKTsKKworc3RhdGljIGludCBiZ3I7Cittb2R1bGVfcGFyYW0oYmdyLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhiZ3IsCisJIkJHUiB1c2UgMTYtYml0IEJHUi01NjUgaW5zdGVhZCBvZiBSR0ItNTY1Iik7CisKK3N0YXRpYyBpbnQgbm9jdXJzb3IgPSAxOworbW9kdWxlX3BhcmFtKG5vY3Vyc29yLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhub2N1cnNvciwgImN1cnNvciBlbmFibGUvZGlzYWJsZSIpOworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBjdXJyZW50X2JyaWdodG5lc3M7ICAvKiBiYWNrbGlnaHQgKi8KKworLyogQUQ1MjgwIHZjb21tICovCitzdGF0aWMgdW5zaWduZWQgY2hhciB2Y29tbV92YWx1ZSA9IDE1MDsKK3N0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudCAqYWQ1MjgwX2NsaWVudDsKKworc3RhdGljIHZvaWQgc2V0X3Zjb21tKHZvaWQpCit7CisJaW50IG5yOworCisJaWYgKCFhZDUyODBfY2xpZW50KQorCQlyZXR1cm47CisKKwluciA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoYWQ1MjgwX2NsaWVudCwgMHgwMCwgdmNvbW1fdmFsdWUpOworCWlmIChucikKKwkJcHJfZXJyKCJpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhIGZhaWw6ICVkXG4iLCBucik7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGFkNTI4MF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJCSAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCWludCByZXQ7CisJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsCisJCQkJICAgICBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiU01CVVMgQnl0ZSBEYXRhIG5vdCBTdXBwb3J0ZWRcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgMHgwMCwgdmNvbW1fdmFsdWUpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJ3cml0ZSBmYWlsOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlhZDUyODBfY2xpZW50ID0gY2xpZW50OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGFkNTI4MF9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlhZDUyODBfY2xpZW50ID0gTlVMTDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGFkNTI4MF9pZFtdID0geworCXsiYmY1MzctbHEwMzUtYWQ1MjgwIiwgMH0sCisJe30KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBhZDUyODBfaWQpOworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgYWQ1MjgwX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJiZjUzNy1scTAzNS1hZDUyODAiLAorCX0sCisJLnByb2JlID0gYWQ1MjgwX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChhZDUyODBfcmVtb3ZlKSwKKwkuaWRfdGFibGUgPSBhZDUyODBfaWQsCit9OworCisjaWZkZWYgQ09ORklHX1BOQVYxMAorI2RlZmluZSBNT0QgR1BJT19QSDEzCisKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUl9MUF9DT05GSUcJYmZpbl93cml0ZV9USU1FUjBfQ09ORklHCisjZGVmaW5lIGJmaW5fd3JpdGVfVElNRVJfTFBfV0lEVEgJYmZpbl93cml0ZV9USU1FUjBfV0lEVEgKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUl9MUF9QRVJJT0QJYmZpbl93cml0ZV9USU1FUjBfUEVSSU9ECisjZGVmaW5lIGJmaW5fcmVhZF9USU1FUl9MUF9DT1VOVEVSCWJmaW5fcmVhZF9USU1FUjBfQ09VTlRFUgorI2RlZmluZSBUSU1ESVNfTFAJCQlUSU1ESVMwCisjZGVmaW5lIFRJTUVOX0xQCQkJVElNRU4wCisKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUl9TUFNfQ09ORklHCWJmaW5fd3JpdGVfVElNRVIxX0NPTkZJRworI2RlZmluZSBiZmluX3dyaXRlX1RJTUVSX1NQU19XSURUSAliZmluX3dyaXRlX1RJTUVSMV9XSURUSAorI2RlZmluZSBiZmluX3dyaXRlX1RJTUVSX1NQU19QRVJJT0QJYmZpbl93cml0ZV9USU1FUjFfUEVSSU9ECisjZGVmaW5lIFRJTURJU19TUFMJCQlUSU1ESVMxCisjZGVmaW5lIFRJTUVOX1NQUwkJCVRJTUVOMQorCisjZGVmaW5lIGJmaW5fd3JpdGVfVElNRVJfU1BfQ09ORklHCWJmaW5fd3JpdGVfVElNRVI1X0NPTkZJRworI2RlZmluZSBiZmluX3dyaXRlX1RJTUVSX1NQX1dJRFRICWJmaW5fd3JpdGVfVElNRVI1X1dJRFRICisjZGVmaW5lIGJmaW5fd3JpdGVfVElNRVJfU1BfUEVSSU9ECWJmaW5fd3JpdGVfVElNRVI1X1BFUklPRAorI2RlZmluZSBUSU1ESVNfU1AJCQlUSU1ESVM1CisjZGVmaW5lIFRJTUVOX1NQCQkJVElNRU41CisKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUl9QU19DTFNfQ09ORklHCWJmaW5fd3JpdGVfVElNRVIyX0NPTkZJRworI2RlZmluZSBiZmluX3dyaXRlX1RJTUVSX1BTX0NMU19XSURUSAliZmluX3dyaXRlX1RJTUVSMl9XSURUSAorI2RlZmluZSBiZmluX3dyaXRlX1RJTUVSX1BTX0NMU19QRVJJT0QJYmZpbl93cml0ZV9USU1FUjJfUEVSSU9ECisjZGVmaW5lIFRJTURJU19QU19DTFMJCQlUSU1ESVMyCisjZGVmaW5lIFRJTUVOX1BTX0NMUwkJCVRJTUVOMgorCisjZGVmaW5lIGJmaW5fd3JpdGVfVElNRVJfUkVWX0NPTkZJRwliZmluX3dyaXRlX1RJTUVSM19DT05GSUcKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUl9SRVZfV0lEVEgJYmZpbl93cml0ZV9USU1FUjNfV0lEVEgKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUl9SRVZfUEVSSU9ECWJmaW5fd3JpdGVfVElNRVIzX1BFUklPRAorI2RlZmluZSBUSU1ESVNfUkVWCQkJVElNRElTMworI2RlZmluZSBUSU1FTl9SRVYJCQlUSU1FTjMKKyNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSX1JFVl9DT1VOVEVSCWJmaW5fcmVhZF9USU1FUjNfQ09VTlRFUgorCisjZGVmaW5lCUZSRVFfUFBJX0NMSyAgICAgICAgICg1KjEwMjQqMTAyNCkgIC8qIFBQSV9DTEsgNU1IeiAqLworCisjZGVmaW5lIFRJTUVSUyB7UF9UTVIwLCBQX1RNUjEsIFBfVE1SMiwgUF9UTVIzLCBQX1RNUjUsIDB9CisKKyNlbHNlCisKKyNkZWZpbmUgVUQgICAgICBHUElPX1BGMTMJLyogVXAgLyBEb3duICovCisjZGVmaW5lIE1PRCAgICAgR1BJT19QRjEwCisjZGVmaW5lIExCUiAgICAgR1BJT19QRjE0CS8qIExlZnQgUmlnaHQgKi8KKworI2RlZmluZSBiZmluX3dyaXRlX1RJTUVSX0xQX0NPTkZJRwliZmluX3dyaXRlX1RJTUVSNl9DT05GSUcKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUl9MUF9XSURUSAliZmluX3dyaXRlX1RJTUVSNl9XSURUSAorI2RlZmluZSBiZmluX3dyaXRlX1RJTUVSX0xQX1BFUklPRAliZmluX3dyaXRlX1RJTUVSNl9QRVJJT0QKKyNkZWZpbmUgYmZpbl9yZWFkX1RJTUVSX0xQX0NPVU5URVIJYmZpbl9yZWFkX1RJTUVSNl9DT1VOVEVSCisjZGVmaW5lIFRJTURJU19MUAkJCVRJTURJUzYKKyNkZWZpbmUgVElNRU5fTFAJCQlUSU1FTjYKKworI2RlZmluZSBiZmluX3dyaXRlX1RJTUVSX1NQU19DT05GSUcJYmZpbl93cml0ZV9USU1FUjFfQ09ORklHCisjZGVmaW5lIGJmaW5fd3JpdGVfVElNRVJfU1BTX1dJRFRICWJmaW5fd3JpdGVfVElNRVIxX1dJRFRICisjZGVmaW5lIGJmaW5fd3JpdGVfVElNRVJfU1BTX1BFUklPRAliZmluX3dyaXRlX1RJTUVSMV9QRVJJT0QKKyNkZWZpbmUgVElNRElTX1NQUwkJCVRJTURJUzEKKyNkZWZpbmUgVElNRU5fU1BTCQkJVElNRU4xCisKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUl9TUF9DT05GSUcJYmZpbl93cml0ZV9USU1FUjBfQ09ORklHCisjZGVmaW5lIGJmaW5fd3JpdGVfVElNRVJfU1BfV0lEVEgJYmZpbl93cml0ZV9USU1FUjBfV0lEVEgKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUl9TUF9QRVJJT0QJYmZpbl93cml0ZV9USU1FUjBfUEVSSU9ECisjZGVmaW5lIFRJTURJU19TUAkJCVRJTURJUzAKKyNkZWZpbmUgVElNRU5fU1AJCQlUSU1FTjAKKworI2RlZmluZSBiZmluX3dyaXRlX1RJTUVSX1BTX0NMU19DT05GSUcJYmZpbl93cml0ZV9USU1FUjdfQ09ORklHCisjZGVmaW5lIGJmaW5fd3JpdGVfVElNRVJfUFNfQ0xTX1dJRFRICWJmaW5fd3JpdGVfVElNRVI3X1dJRFRICisjZGVmaW5lIGJmaW5fd3JpdGVfVElNRVJfUFNfQ0xTX1BFUklPRAliZmluX3dyaXRlX1RJTUVSN19QRVJJT0QKKyNkZWZpbmUgVElNRElTX1BTX0NMUwkJCVRJTURJUzcKKyNkZWZpbmUgVElNRU5fUFNfQ0xTCQkJVElNRU43CisKKyNkZWZpbmUgYmZpbl93cml0ZV9USU1FUl9SRVZfQ09ORklHCWJmaW5fd3JpdGVfVElNRVI1X0NPTkZJRworI2RlZmluZSBiZmluX3dyaXRlX1RJTUVSX1JFVl9XSURUSAliZmluX3dyaXRlX1RJTUVSNV9XSURUSAorI2RlZmluZSBiZmluX3dyaXRlX1RJTUVSX1JFVl9QRVJJT0QJYmZpbl93cml0ZV9USU1FUjVfUEVSSU9ECisjZGVmaW5lIFRJTURJU19SRVYJCQlUSU1ESVM1CisjZGVmaW5lIFRJTUVOX1JFVgkJCVRJTUVONQorI2RlZmluZSBiZmluX3JlYWRfVElNRVJfUkVWX0NPVU5URVIJYmZpbl9yZWFkX1RJTUVSNV9DT1VOVEVSCisKKyNkZWZpbmUJRlJFUV9QUElfQ0xLICAgICAgICAgKDYqMTAwMCoxMDAwKSAgLyogUFBJX0NMSyA2TUh6ICovCisjZGVmaW5lIFRJTUVSUyB7UF9UTVIwLCBQX1RNUjEsIFBfVE1SNSwgUF9UTVI2LCBQX1RNUjcsIDB9CisKKyNlbmRpZgorCisjZGVmaW5lIExDRF9YX1JFUwkJCTI0MCAvKiBIb3Jpem9udGFsIFJlc29sdXRpb24gKi8KKyNkZWZpbmUgTENEX1lfUkVTCQkJMzIwIC8qIFZlcnRpY2FsIFJlc29sdXRpb24gKi8KKworI2RlZmluZSBMQ0RfQkJQCQkJCTE2ICAvKiBCaXQgUGVyIFBpeGVsICovCisKKy8qIHRoZSBMQ0QgYW5kIHRoZSBETUEgc3RhcnQgY291bnRpbmcgZGlmZmVyZW50bHk7CisgKiBzaW5jZSBvbmUgc3RhcnRzIGF0IDAgYW5kIHRoZSBvdGhlciBzdGFydHMgYXQgMSwKKyAqIHdlIGhhdmUgYSBkaWZmZXJlbmNlIG9mIDEgYmV0d2VlbiBTVEFSVF9MSU5FUworICogYW5kIFVfTElORVMuCisgKi8KKyNkZWZpbmUgU1RBUlRfTElORVMgICAgICAgOCAgIC8qIGxpbmVzIGZvciBmaWVsZCBmbHliYWNrIG9yIGZpZWxkIGJsYW5raW5nIHNpZ25hbCAqLworI2RlZmluZSBVX0xJTkVTICAgICAgICAgICA5ICAgLyogbnVtYmVyIG9mIHVuZGlzcGxheWVkIGJsYW5raW5nIGxpbmVzICovCisKKyNkZWZpbmUgRlJBTUVTX1BFUl9TRUMgICAgKDYwKQorCisjZGVmaW5lIERDTEtTX1BFUl9GUkFNRSAgIChGUkVRX1BQSV9DTEsvRlJBTUVTX1BFUl9TRUMpCisjZGVmaW5lIERDTEtTX1BFUl9MSU5FICAgIChEQ0xLU19QRVJfRlJBTUUvKExDRF9ZX1JFUytVX0xJTkVTKSkKKworI2RlZmluZSBQUElfQ09ORklHX1ZBTFVFICAoUE9SVF9ESVJ8WEZSX1RZUEV8RExFTl8xNnxQT0xTKQorI2RlZmluZSBQUElfREVMQVlfVkFMVUUgICAoMCkKKyNkZWZpbmUgVElNRVJfQ09ORklHICAgICAgKFBXTV9PVVR8UEVSSU9EX0NOVHxUSU5fU0VMfENMS19TRUwpCisKKyNkZWZpbmUgQUNUSVZFX1ZJREVPX01FTV9PRkZTRVQJKExDRF9YX1JFUypTVEFSVF9MSU5FUyooTENEX0JCUC84KSkKKyNkZWZpbmUgQUNUSVZFX1ZJREVPX01FTV9TSVpFCShMQ0RfWV9SRVMqTENEX1hfUkVTKihMQ0RfQkJQLzgpKQorI2RlZmluZSBUT1RBTF9WSURFT19NRU1fU0laRQkoKExDRF9ZX1JFUytVX0xJTkVTKSpMQ0RfWF9SRVMqKExDRF9CQlAvOCkpCisjZGVmaW5lIFRPVEFMX0RNQV9ERVNDX1NJWkUJKDIgKiBzaXplb2YodTMyKSAqIChMQ0RfWV9SRVMgKyBVX0xJTkVTKSkKKworc3RhdGljIHZvaWQgc3RhcnRfdGltZXJzKHZvaWQpIC8qIENIRUNLIHdpdGggSFcgKi8KK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJYmZpbl93cml0ZV9USU1FUl9FTkFCTEUoVElNRU5fUkVWKTsKKwlTU1lOQygpOworCisJd2hpbGUgKGJmaW5fcmVhZF9USU1FUl9SRVZfQ09VTlRFUigpIDw9IDExKQorCQljb250aW51ZTsKKwliZmluX3dyaXRlX1RJTUVSX0VOQUJMRShUSU1FTl9MUCk7CisJU1NZTkMoKTsKKworCXdoaWxlIChiZmluX3JlYWRfVElNRVJfTFBfQ09VTlRFUigpIDwgMykKKwkJY29udGludWU7CisJYmZpbl93cml0ZV9USU1FUl9FTkFCTEUoVElNRU5fU1B8VElNRU5fU1BTfFRJTUVOX1BTX0NMUyk7CisJU1NZTkMoKTsKKwl0X2NvbmZfZG9uZSA9IDE7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBjb25maWdfdGltZXJzKHZvaWQpCit7CisJLyogU3RvcCB0aW1lcnMgKi8KKwliZmluX3dyaXRlX1RJTUVSX0RJU0FCTEUoVElNRElTX1NQfFRJTURJU19TUFN8VElNRElTX1JFVnwKKwkJCQkgVElNRElTX0xQfFRJTURJU19QU19DTFMpOworCVNTWU5DKCk7CisKKwkvKiBMUCwgdGltZXIgNiAqLworCWJmaW5fd3JpdGVfVElNRVJfTFBfQ09ORklHKFRJTUVSX0NPTkZJR3xQVUxTRV9ISSk7CisJYmZpbl93cml0ZV9USU1FUl9MUF9XSURUSCgxKTsKKworCWJmaW5fd3JpdGVfVElNRVJfTFBfUEVSSU9EKERDTEtTX1BFUl9MSU5FKTsKKwlTU1lOQygpOworCisJLyogU1BTLCB0aW1lciAxICovCisJYmZpbl93cml0ZV9USU1FUl9TUFNfQ09ORklHKFRJTUVSX0NPTkZJR3xQVUxTRV9ISSk7CisJYmZpbl93cml0ZV9USU1FUl9TUFNfV0lEVEgoRENMS1NfUEVSX0xJTkUqMik7CisJYmZpbl93cml0ZV9USU1FUl9TUFNfUEVSSU9EKChEQ0xLU19QRVJfTElORSAqIChMQ0RfWV9SRVMrVV9MSU5FUykpKTsKKwlTU1lOQygpOworCisJLyogU1AsIHRpbWVyIDAgKi8KKwliZmluX3dyaXRlX1RJTUVSX1NQX0NPTkZJRyhUSU1FUl9DT05GSUd8UFVMU0VfSEkpOworCWJmaW5fd3JpdGVfVElNRVJfU1BfV0lEVEgoMSk7CisJYmZpbl93cml0ZV9USU1FUl9TUF9QRVJJT0QoRENMS1NfUEVSX0xJTkUpOworCVNTWU5DKCk7CisKKwkvKiBQUyAmIENMUywgdGltZXIgNyAqLworCWJmaW5fd3JpdGVfVElNRVJfUFNfQ0xTX0NPTkZJRyhUSU1FUl9DT05GSUcpOworCWJmaW5fd3JpdGVfVElNRVJfUFNfQ0xTX1dJRFRIKExDRF9YX1JFUyArIFNUQVJUX0xJTkVTKTsKKwliZmluX3dyaXRlX1RJTUVSX1BTX0NMU19QRVJJT0QoRENMS1NfUEVSX0xJTkUpOworCisJU1NZTkMoKTsKKworI2lmZGVmIE5PX0JMCisJLyogUkVWLCB0aW1lciA1ICovCisJYmZpbl93cml0ZV9USU1FUl9SRVZfQ09ORklHKFRJTUVSX0NPTkZJR3xQVUxTRV9ISSk7CisKKwliZmluX3dyaXRlX1RJTUVSX1JFVl9XSURUSChEQ0xLU19QRVJfTElORSk7CisJYmZpbl93cml0ZV9USU1FUl9SRVZfUEVSSU9EKERDTEtTX1BFUl9MSU5FKjIpOworCisJU1NZTkMoKTsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBjb25maWdfcHBpKHZvaWQpCit7CisJYmZpbl93cml0ZV9QUElfREVMQVkoUFBJX0RFTEFZX1ZBTFVFKTsKKwliZmluX3dyaXRlX1BQSV9DT1VOVChMQ0RfWF9SRVMtMSk7CisJLyogMHgxMCAtPiBQT1JUX0NGRyAtPiAyIG9yIDMgZnJhbWUgc3luY3MgKi8KKwliZmluX3dyaXRlX1BQSV9DT05UUk9MKChQUElfQ09ORklHX1ZBTFVFfDB4MTApICYgKH5QT0xTKSk7Cit9CisKK3N0YXRpYyBpbnQgY29uZmlnX2RtYSh2b2lkKQoreworCXUzMiBpOworCisJaWYgKGxhbmRzY2FwZSkgeworCisJCWZvciAoaSA9IDA7IGkgPCBVX0xJTkVTOyArK2kpIHsKKwkJCS8qIGJsYW5raW5nIGxpbmVzIHBvaW50IHRvIGZpcnN0IGxpbmUgb2YgZmJfYnVmZmVyICovCisJCQlkbWFfZGVzY190YWJsZVsyKmldID0gKHVuc2lnbmVkIGxvbmcpJmRtYV9kZXNjX3RhYmxlWzIqaSsyXTsKKwkJCWRtYV9kZXNjX3RhYmxlWzIqaSsxXSA9ICh1bnNpZ25lZCBsb25nKWZiX2J1ZmZlcjsKKwkJfQorCisJCWZvciAoaSA9IFVfTElORVM7IGkgPCBVX0xJTkVTICsgTENEX1lfUkVTOyArK2kpIHsKKwkJCS8qIHZpc2libGUgbGluZXMgKi8KKwkJCWRtYV9kZXNjX3RhYmxlWzIqaV0gPSAodW5zaWduZWQgbG9uZykmZG1hX2Rlc2NfdGFibGVbMippKzJdOworCQkJZG1hX2Rlc2NfdGFibGVbMippKzFdID0gKHVuc2lnbmVkIGxvbmcpZmJfYnVmZmVyICsKKwkJCQkJCShMQ0RfWV9SRVMrVV9MSU5FUy0xLWkpKjI7CisJCX0KKworCQkvKiBsYXN0IGRlc2NyaXB0b3IgcG9pbnRzIHRvIGZpcnN0ICovCisJCWRtYV9kZXNjX3RhYmxlWzIqKExDRF9ZX1JFUytVX0xJTkVTLTEpXSA9ICh1bnNpZ25lZCBsb25nKSZkbWFfZGVzY190YWJsZVswXTsKKworCQlzZXRfZG1hX3hfY291bnQoQ0hfUFBJLCBMQ0RfWF9SRVMpOworCQlzZXRfZG1hX3hfbW9kaWZ5KENIX1BQSSwgTENEX1lfUkVTICogKExDRF9CQlAgLyA4KSk7CisJCXNldF9kbWFfeV9jb3VudChDSF9QUEksIDApOworCQlzZXRfZG1hX3lfbW9kaWZ5KENIX1BQSSwgMCk7CisJCXNldF9kbWFfbmV4dF9kZXNjX2FkZHIoQ0hfUFBJLCAodm9pZCAqKWRtYV9kZXNjX3RhYmxlWzBdKTsKKwkJc2V0X2RtYV9jb25maWcoQ0hfUFBJLCBETUFGTE9XX0xBUkdFIHwgTkRTSVpFXzQgfCBXRFNJWkVfMTYpOworCisJfSBlbHNlIHsKKworCQlzZXRfZG1hX2NvbmZpZyhDSF9QUEksIHNldF9iZmluX2RtYV9jb25maWcoRElSX1JFQUQsCisJCQkJRE1BX0ZMT1dfQVVUTywKKwkJCQlJTlRSX0RJU0FCTEUsCisJCQkJRElNRU5TSU9OXzJELAorCQkJCURBVEFfU0laRV8xNiwKKwkJCQlETUFfTk9TWU5DX0tFRVBfRE1BX0JVRikpOworCQlzZXRfZG1hX3hfY291bnQoQ0hfUFBJLCBMQ0RfWF9SRVMpOworCQlzZXRfZG1hX3hfbW9kaWZ5KENIX1BQSSwgTENEX0JCUCAvIDgpOworCQlzZXRfZG1hX3lfY291bnQoQ0hfUFBJLCBMQ0RfWV9SRVMrVV9MSU5FUyk7CisJCXNldF9kbWFfeV9tb2RpZnkoQ0hfUFBJLCBMQ0RfQkJQIC8gOCk7CisJCXNldF9kbWFfc3RhcnRfYWRkcihDSF9QUEksICh1bnNpZ25lZCBsb25nKSBmYl9idWZmZXIpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCByZXF1ZXN0X3BvcnRzKHZvaWQpCit7CisJdTE2IHRtcl9yZXFbXSA9IFRJTUVSUzsKKworCS8qCisJCVVEOiAgICAgIFBGMTMKKwkJTU9EOiAgICAgUEYxMAorCQlMQlI6ICAgICBQRjE0CisJCVBQSV9DTEs6IFBGMTUKKwkqLworCisJaWYgKHBlcmlwaGVyYWxfcmVxdWVzdF9saXN0KHBwaV9waW5zLCBLQlVJTERfTU9ETkFNRSkpIHsKKwkJcHJfZXJyKCJyZXF1ZXN0aW5nIFBQSSBwZXJpcGhlcmFsIGZhaWxlZFxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJaWYgKHBlcmlwaGVyYWxfcmVxdWVzdF9saXN0KHRtcl9yZXEsIEtCVUlMRF9NT0ROQU1FKSkgeworCQlwZXJpcGhlcmFsX2ZyZWVfbGlzdChwcGlfcGlucyk7CisJCXByX2VycigicmVxdWVzdGluZyB0aW1lciBwZXJpcGhlcmFsIGZhaWxlZFxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisjaWYgKGRlZmluZWQoVUQpICYmIGRlZmluZWQoTEJSKSkKKwlpZiAoZ3Bpb19yZXF1ZXN0KFVELCBLQlVJTERfTU9ETkFNRSkpIHsKKwkJcHJfZXJyKCJyZXF1ZXN0aW5nIEdQSU8gJWQgZmFpbGVkXG4iLCBVRCk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJaWYgKGdwaW9fcmVxdWVzdChMQlIsIEtCVUlMRF9NT0ROQU1FKSkgeworCQlwcl9lcnIoInJlcXVlc3RpbmcgR1BJTyAlZCBmYWlsZWRcbiIsIExCUik7CisJCWdwaW9fZnJlZShVRCk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFVELCAwKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoTEJSLCAxKTsKKworI2VuZGlmCisKKwlpZiAoZ3Bpb19yZXF1ZXN0KE1PRCwgS0JVSUxEX01PRE5BTUUpKSB7CisJCXByX2VycigicmVxdWVzdGluZyBHUElPICVkIGZhaWxlZFxuIiwgTU9EKTsKKyNpZiAoZGVmaW5lZChVRCkgJiYgZGVmaW5lZChMQlIpKQorCQlncGlvX2ZyZWUoTEJSKTsKKwkJZ3Bpb19mcmVlKFVEKTsKKyNlbmRpZgorCQlyZXR1cm4gLUVCVVNZOworCX0KKworCWdwaW9fZGlyZWN0aW9uX291dHB1dChNT0QsIDEpOworCisJU1NZTkMoKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZnJlZV9wb3J0cyh2b2lkKQoreworCXUxNiB0bXJfcmVxW10gPSBUSU1FUlM7CisKKwlwZXJpcGhlcmFsX2ZyZWVfbGlzdChwcGlfcGlucyk7CisJcGVyaXBoZXJhbF9mcmVlX2xpc3QodG1yX3JlcSk7CisKKyNpZiBkZWZpbmVkKFVEKSAmJiBkZWZpbmVkKExCUikKKwlncGlvX2ZyZWUoTEJSKTsKKwlncGlvX2ZyZWUoVUQpOworI2VuZGlmCisJZ3Bpb19mcmVlKE1PRCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmJfaW5mbyBiZmluX2xxMDM1X2ZiOworCitzdGF0aWMgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvIGJmaW5fbHEwMzVfZmJfZGVmaW5lZCA9IHsKKwkuYml0c19wZXJfcGl4ZWwJCT0gTENEX0JCUCwKKwkuYWN0aXZhdGUJCT0gRkJfQUNUSVZBVEVfVEVTVCwKKwkueHJlcwkJCT0gTENEX1hfUkVTLAkvKmRlZmF1bHQgcG9ydHJhaXQgbW9kZSBSR0IqLworCS55cmVzCQkJPSBMQ0RfWV9SRVMsCisJLnhyZXNfdmlydHVhbAkJPSBMQ0RfWF9SRVMsCisJLnlyZXNfdmlydHVhbAkJPSBMQ0RfWV9SRVMsCisJLmhlaWdodAkJCT0gLTEsCisJLndpZHRoCQkJPSAtMSwKKwkubGVmdF9tYXJnaW4JCT0gMCwKKwkucmlnaHRfbWFyZ2luCQk9IDAsCisJLnVwcGVyX21hcmdpbgkJPSAwLAorCS5sb3dlcl9tYXJnaW4JCT0gMCwKKwkucmVkCQkJPSB7MTEsIDUsIDB9LAorCS5ncmVlbgkJCT0gezUsIDYsIDB9LAorCS5ibHVlCQkJPSB7MCwgNSwgMH0sCisJLnRyYW5zcAkJPSB7MCwgMCwgMH0sCit9OworCitzdGF0aWMgc3RydWN0IGZiX2ZpeF9zY3JlZW5pbmZvIGJmaW5fbHEwMzVfZmJfZml4IF9fZGV2aW5pdGRhdGEgPSB7CisJLmlkCQk9IEtCVUlMRF9NT0ROQU1FLAorCS5zbWVtX2xlbgk9IEFDVElWRV9WSURFT19NRU1fU0laRSwKKwkudHlwZQkJPSBGQl9UWVBFX1BBQ0tFRF9QSVhFTFMsCisJLnZpc3VhbAkJPSBGQl9WSVNVQUxfVFJVRUNPTE9SLAorCS54cGFuc3RlcAk9IDAsCisJLnlwYW5zdGVwCT0gMCwKKwkubGluZV9sZW5ndGgJPSBMQ0RfWF9SRVMqKExDRF9CQlAvOCksCisJLmFjY2VsCQk9IEZCX0FDQ0VMX05PTkUsCit9OworCisKK3N0YXRpYyBpbnQgYmZpbl9scTAzNV9mYl9vcGVuKHN0cnVjdCBmYl9pbmZvICppbmZvLCBpbnQgdXNlcikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmJmaW5fbHEwMzVfbG9jaywgZmxhZ3MpOworCWxxMDM1X29wZW5fY250Kys7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZpbl9scTAzNV9sb2NrLCBmbGFncyk7CisKKwlpZiAobHEwMzVfb3Blbl9jbnQgPD0gMSkgeworCQliZmluX3dyaXRlX1BQSV9DT05UUk9MKDApOworCQlTU1lOQygpOworCisJCXNldF92Y29tbSgpOworCQljb25maWdfZG1hKCk7CisJCWNvbmZpZ19wcGkoKTsKKworCQkvKiBzdGFydCBkbWEgKi8KKwkJZW5hYmxlX2RtYShDSF9QUEkpOworCQlTU1lOQygpOworCQliZmluX3dyaXRlX1BQSV9DT05UUk9MKGJmaW5fcmVhZF9QUElfQ09OVFJPTCgpIHwgUE9SVF9FTik7CisJCVNTWU5DKCk7CisKKwkJaWYgKCF0X2NvbmZfZG9uZSkgeworCQkJY29uZmlnX3RpbWVycygpOworCQkJc3RhcnRfdGltZXJzKCk7CisJCX0KKwkJLyogZ3Bpb19zZXRfdmFsdWUoTU9ELDEpOyAqLworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJmaW5fbHEwMzVfZmJfcmVsZWFzZShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgaW50IHVzZXIpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZiZmluX2xxMDM1X2xvY2ssIGZsYWdzKTsKKwlscTAzNV9vcGVuX2NudC0tOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmaW5fbHEwMzVfbG9jaywgZmxhZ3MpOworCisKKwlpZiAobHEwMzVfb3Blbl9jbnQgPD0gMCkgeworCisJCWJmaW5fd3JpdGVfUFBJX0NPTlRST0woMCk7CisJCVNTWU5DKCk7CisKKwkJZGlzYWJsZV9kbWEoQ0hfUFBJKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IGJmaW5fbHEwMzVfZmJfY2hlY2tfdmFyKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAorCQkJCSAgIHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN3aXRjaCAodmFyLT5iaXRzX3Blcl9waXhlbCkgeworCWNhc2UgMTY6LyogRElSRUNUQ09MT1VSLCA2NGsgKi8KKwkJdmFyLT5yZWQub2Zmc2V0ID0gaW5mby0+dmFyLnJlZC5vZmZzZXQ7CisJCXZhci0+Z3JlZW4ub2Zmc2V0ID0gaW5mby0+dmFyLmdyZWVuLm9mZnNldDsKKwkJdmFyLT5ibHVlLm9mZnNldCA9IGluZm8tPnZhci5ibHVlLm9mZnNldDsKKwkJdmFyLT5yZWQubGVuZ3RoID0gaW5mby0+dmFyLnJlZC5sZW5ndGg7CisJCXZhci0+Z3JlZW4ubGVuZ3RoID0gaW5mby0+dmFyLmdyZWVuLmxlbmd0aDsKKwkJdmFyLT5ibHVlLmxlbmd0aCA9IGluZm8tPnZhci5ibHVlLmxlbmd0aDsKKwkJdmFyLT50cmFuc3Aub2Zmc2V0ID0gMDsKKwkJdmFyLT50cmFuc3AubGVuZ3RoID0gMDsKKwkJdmFyLT50cmFuc3AubXNiX3JpZ2h0ID0gMDsKKwkJdmFyLT5yZWQubXNiX3JpZ2h0ID0gMDsKKwkJdmFyLT5ncmVlbi5tc2JfcmlnaHQgPSAwOworCQl2YXItPmJsdWUubXNiX3JpZ2h0ID0gMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJfZGVidWcoIiVzOiBkZXB0aCBub3Qgc3VwcG9ydGVkOiAldSBCUFBcbiIsIF9fZnVuY19fLAorCQkJIHZhci0+Yml0c19wZXJfcGl4ZWwpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoaW5mby0+dmFyLnhyZXMgIT0gdmFyLT54cmVzIHx8CisJICAgIGluZm8tPnZhci55cmVzICE9IHZhci0+eXJlcyB8fAorCSAgICBpbmZvLT52YXIueHJlc192aXJ0dWFsICE9IHZhci0+eHJlc192aXJ0dWFsIHx8CisJICAgIGluZm8tPnZhci55cmVzX3ZpcnR1YWwgIT0gdmFyLT55cmVzX3ZpcnR1YWwpIHsKKwkJcHJfZGVidWcoIiVzOiBSZXNvbHV0aW9uIG5vdCBzdXBwb3J0ZWQ6IFgldSB4IFkldVxuIiwKKwkJCSBfX2Z1bmNfXywgdmFyLT54cmVzLCB2YXItPnlyZXMpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKgorCSAqICBNZW1vcnkgbGltaXQKKwkgKi8KKworCWlmICgoaW5mby0+Zml4LmxpbmVfbGVuZ3RoICogdmFyLT55cmVzX3ZpcnR1YWwpID4gaW5mby0+Zml4LnNtZW1fbGVuKSB7CisJCXByX2RlYnVnKCIlczogTWVtb3J5IExpbWl0IHJlcXVlc3RlZCB5cmVzX3ZpcnR1YWwgPSAldVxuIiwKKwkJCSBfX2Z1bmNfXywgdmFyLT55cmVzX3ZpcnR1YWwpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogZmJfcm90YXRlCisgKiBSb3RhdGUgdGhlIGRpc3BsYXkgb2YgdGhpcyBhbmdsZS4gVGhpcyBkb2Vzbid0IHNlZW1zIHRvIGJlIHVzZWQgYnkgdGhlIGNvcmUsCisgKiBidXQgYXMgb3VyIGhhcmR3YXJlIHN1cHBvcnRzIGl0LCBzbyB3aHkgbm90IGltcGxlbWVudGluZyBpdC4uLgorICovCitzdGF0aWMgdm9pZCBiZmluX2xxMDM1X2ZiX3JvdGF0ZShzdHJ1Y3QgZmJfaW5mbyAqZmJpLCBpbnQgYW5nbGUpCit7CisJcHJfZGVidWcoIiVzOiAlcCAlZCIsIF9fZnVuY19fLCBmYmksIGFuZ2xlKTsKKyNpZiAoZGVmaW5lZChVRCkgJiYgZGVmaW5lZChMQlIpKQorCXN3aXRjaCAoYW5nbGUpIHsKKworCWNhc2UgMTgwOgorCQlncGlvX3NldF92YWx1ZShMQlIsIDApOworCQlncGlvX3NldF92YWx1ZShVRCwgMSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWdwaW9fc2V0X3ZhbHVlKExCUiwgMSk7CisJCWdwaW9fc2V0X3ZhbHVlKFVELCAwKTsKKwkJYnJlYWs7CisJfQorI2VuZGlmCit9CisKK3N0YXRpYyBpbnQgYmZpbl9scTAzNV9mYl9jdXJzb3Ioc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCBmYl9jdXJzb3IgKmN1cnNvcikKK3sKKwlpZiAobm9jdXJzb3IpCisJCXJldHVybiAwOworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CS8qIGp1c3QgdG8gZm9yY2Ugc29mdF9jdXJzb3IoKSBjYWxsICovCit9CisKK3N0YXRpYyBpbnQgYmZpbl9scTAzNV9mYl9zZXRjb2xyZWcodV9pbnQgcmVnbm8sIHVfaW50IHJlZCwgdV9pbnQgZ3JlZW4sCisJCQkJICAgdV9pbnQgYmx1ZSwgdV9pbnQgdHJhbnNwLAorCQkJCSAgIHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCWlmIChyZWdubyA+PSBOQlJfUEFMRVRURSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoaW5mby0+dmFyLmdyYXlzY2FsZSkKKwkJLyogZ3JheXNjYWxlID0gMC4zMCpSICsgMC41OSpHICsgMC4xMSpCICovCisJCXJlZCA9IGdyZWVuID0gYmx1ZSA9IChyZWQgKiA3NyArIGdyZWVuICogMTUxICsgYmx1ZSAqIDI4KSA+PiA4OworCisJaWYgKGluZm8tPmZpeC52aXN1YWwgPT0gRkJfVklTVUFMX1RSVUVDT0xPUikgeworCisJCXUzMiB2YWx1ZTsKKwkJLyogUGxhY2UgY29sb3IgaW4gdGhlIHBzZXVkb3BhbGV0dGUgKi8KKwkJaWYgKHJlZ25vID4gMTYpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlyZWQgICA+Pj0gKDE2IC0gaW5mby0+dmFyLnJlZC5sZW5ndGgpOworCQlncmVlbiA+Pj0gKDE2IC0gaW5mby0+dmFyLmdyZWVuLmxlbmd0aCk7CisJCWJsdWUgID4+PSAoMTYgLSBpbmZvLT52YXIuYmx1ZS5sZW5ndGgpOworCisJCXZhbHVlID0gKHJlZCAgIDw8IGluZm8tPnZhci5yZWQub2Zmc2V0KSB8CisJCQkoZ3JlZW4gPDwgaW5mby0+dmFyLmdyZWVuLm9mZnNldCl8CisJCQkoYmx1ZSAgPDwgaW5mby0+dmFyLmJsdWUub2Zmc2V0KTsKKwkJdmFsdWUgJj0gMHhGRkZGOworCisJCSgodTMyICopIChpbmZvLT5wc2V1ZG9fcGFsZXR0ZSkpW3JlZ25vXSA9IHZhbHVlOworCisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmJfb3BzIGJmaW5fbHEwMzVfZmJfb3BzID0geworCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCisJLmZiX29wZW4JCT0gYmZpbl9scTAzNV9mYl9vcGVuLAorCS5mYl9yZWxlYXNlCQk9IGJmaW5fbHEwMzVfZmJfcmVsZWFzZSwKKwkuZmJfY2hlY2tfdmFyCQk9IGJmaW5fbHEwMzVfZmJfY2hlY2tfdmFyLAorCS5mYl9yb3RhdGUJCT0gYmZpbl9scTAzNV9mYl9yb3RhdGUsCisJLmZiX2ZpbGxyZWN0CQk9IGNmYl9maWxscmVjdCwKKwkuZmJfY29weWFyZWEJCT0gY2ZiX2NvcHlhcmVhLAorCS5mYl9pbWFnZWJsaXQJCT0gY2ZiX2ltYWdlYmxpdCwKKwkuZmJfY3Vyc29yCQk9IGJmaW5fbHEwMzVfZmJfY3Vyc29yLAorCS5mYl9zZXRjb2xyZWcJCT0gYmZpbl9scTAzNV9mYl9zZXRjb2xyZWcsCit9OworCitzdGF0aWMgaW50IGJsX2dldF9icmlnaHRuZXNzKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCkKK3sKKwlyZXR1cm4gY3VycmVudF9icmlnaHRuZXNzOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGJhY2tsaWdodF9vcHMgYmZpbl9scTAzNWZiX2JsX29wcyA9IHsKKwkuZ2V0X2JyaWdodG5lc3MJPSBibF9nZXRfYnJpZ2h0bmVzcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmxfZGV2OworCitzdGF0aWMgaW50IGJmaW5fbGNkX2dldF9wb3dlcihzdHJ1Y3QgbGNkX2RldmljZSAqZGV2KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJmaW5fbGNkX3NldF9wb3dlcihzdHJ1Y3QgbGNkX2RldmljZSAqZGV2LCBpbnQgcG93ZXIpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYmZpbl9sY2RfZ2V0X2NvbnRyYXN0KHN0cnVjdCBsY2RfZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIChpbnQpdmNvbW1fdmFsdWU7Cit9CisKK3N0YXRpYyBpbnQgYmZpbl9sY2Rfc2V0X2NvbnRyYXN0KHN0cnVjdCBsY2RfZGV2aWNlICpkZXYsIGludCBjb250cmFzdCkKK3sKKwlpZiAoY29udHJhc3QgPiAyNTUpCisJCWNvbnRyYXN0ID0gMjU1OworCWlmIChjb250cmFzdCA8IDApCisJCWNvbnRyYXN0ID0gMDsKKworCXZjb21tX3ZhbHVlID0gKHVuc2lnbmVkIGNoYXIpY29udHJhc3Q7CisJc2V0X3Zjb21tKCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYmZpbl9sY2RfY2hlY2tfZmIoc3RydWN0IGxjZF9kZXZpY2UgKmxjZCwgc3RydWN0IGZiX2luZm8gKmZpKQoreworCWlmICghZmkgfHwgKGZpID09ICZiZmluX2xxMDM1X2ZiKSkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbGNkX29wcyBiZmluX2xjZF9vcHMgPSB7CisJLmdldF9wb3dlcgk9IGJmaW5fbGNkX2dldF9wb3dlciwKKwkuc2V0X3Bvd2VyCT0gYmZpbl9sY2Rfc2V0X3Bvd2VyLAorCS5nZXRfY29udHJhc3QJPSBiZmluX2xjZF9nZXRfY29udHJhc3QsCisJLnNldF9jb250cmFzdAk9IGJmaW5fbGNkX3NldF9jb250cmFzdCwKKwkuY2hlY2tfZmIJPSBiZmluX2xjZF9jaGVja19mYiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbGNkX2RldmljZSAqbGNkX2RldjsKKworc3RhdGljIGludCBfX2RldmluaXQgYmZpbl9scTAzNV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBiYWNrbGlnaHRfcHJvcGVydGllcyBwcm9wczsKKwlkbWFfYWRkcl90IGRtYV9oYW5kbGU7CisKKwlpZiAocmVxdWVzdF9kbWEoQ0hfUFBJLCBLQlVJTERfTU9ETkFNRSkpIHsKKwkJcHJfZXJyKCJjb3VsZG4ndCByZXF1ZXN0IFBQSSBETUFcbiIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwlpZiAocmVxdWVzdF9wb3J0cygpKSB7CisJCXByX2VycigiY291bGRuJ3QgcmVxdWVzdCBncGlvIHBvcnRcbiIpOworCQlmcmVlX2RtYShDSF9QUEkpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwlmYl9idWZmZXIgPSBkbWFfYWxsb2NfY29oZXJlbnQoTlVMTCwgVE9UQUxfVklERU9fTUVNX1NJWkUsCisJCQkJICAgICAgICZkbWFfaGFuZGxlLCBHRlBfS0VSTkVMKTsKKwlpZiAoZmJfYnVmZmVyID09IE5VTEwpIHsKKwkJcHJfZXJyKCJjb3VsZG4ndCBhbGxvY2F0ZSBkbWEgYnVmZmVyXG4iKTsKKwkJZnJlZV9kbWEoQ0hfUFBJKTsKKwkJZnJlZV9wb3J0cygpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlpZiAoTDFfREFUQV9BX0xFTkdUSCkKKwkJZG1hX2Rlc2NfdGFibGUgPSBsMV9kYXRhX3NyYW1femFsbG9jKFRPVEFMX0RNQV9ERVNDX1NJWkUpOworCWVsc2UKKwkJZG1hX2Rlc2NfdGFibGUgPSBkbWFfYWxsb2NfY29oZXJlbnQoTlVMTCwgVE9UQUxfRE1BX0RFU0NfU0laRSwKKwkJCQkJCSAgICAmZG1hX2hhbmRsZSwgMCk7CisKKwlpZiAoZG1hX2Rlc2NfdGFibGUgPT0gTlVMTCkgeworCQlwcl9lcnIoImNvdWxkbid0IGFsbG9jYXRlIGRtYSBkZXNjcmlwdG9yXG4iKTsKKwkJZnJlZV9kbWEoQ0hfUFBJKTsKKwkJZnJlZV9wb3J0cygpOworCQlkbWFfZnJlZV9jb2hlcmVudChOVUxMLCBUT1RBTF9WSURFT19NRU1fU0laRSwgZmJfYnVmZmVyLCAwKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJYmZpbl9scTAzNV9mYi5zY3JlZW5fYmFzZSA9ICh2b2lkICopZmJfYnVmZmVyOworCWJmaW5fbHEwMzVfZmJfZml4LnNtZW1fc3RhcnQgPSAoaW50KWZiX2J1ZmZlcjsKKwlpZiAobGFuZHNjYXBlKSB7CisJCWJmaW5fbHEwMzVfZmJfZGVmaW5lZC54cmVzID0gTENEX1lfUkVTOworCQliZmluX2xxMDM1X2ZiX2RlZmluZWQueXJlcyA9IExDRF9YX1JFUzsKKwkJYmZpbl9scTAzNV9mYl9kZWZpbmVkLnhyZXNfdmlydHVhbCA9IExDRF9ZX1JFUzsKKwkJYmZpbl9scTAzNV9mYl9kZWZpbmVkLnlyZXNfdmlydHVhbCA9IExDRF9YX1JFUzsKKworCQliZmluX2xxMDM1X2ZiX2ZpeC5saW5lX2xlbmd0aCA9IExDRF9ZX1JFUyooTENEX0JCUC84KTsKKwl9IGVsc2UgeworCQliZmluX2xxMDM1X2ZiLnNjcmVlbl9iYXNlICs9IEFDVElWRV9WSURFT19NRU1fT0ZGU0VUOworCQliZmluX2xxMDM1X2ZiX2ZpeC5zbWVtX3N0YXJ0ICs9IEFDVElWRV9WSURFT19NRU1fT0ZGU0VUOworCX0KKworCWJmaW5fbHEwMzVfZmJfZGVmaW5lZC5ncmVlbi5tc2JfcmlnaHQgPSAwOworCWJmaW5fbHEwMzVfZmJfZGVmaW5lZC5yZWQubXNiX3JpZ2h0ICAgPSAwOworCWJmaW5fbHEwMzVfZmJfZGVmaW5lZC5ibHVlLm1zYl9yaWdodCAgPSAwOworCWJmaW5fbHEwMzVfZmJfZGVmaW5lZC5ncmVlbi5vZmZzZXQgICAgPSA1OworCWJmaW5fbHEwMzVfZmJfZGVmaW5lZC5ncmVlbi5sZW5ndGggICAgPSA2OworCWJmaW5fbHEwMzVfZmJfZGVmaW5lZC5yZWQubGVuZ3RoICAgICAgPSA1OworCWJmaW5fbHEwMzVfZmJfZGVmaW5lZC5ibHVlLmxlbmd0aCAgICAgPSA1OworCisJaWYgKGJncikgeworCQliZmluX2xxMDM1X2ZiX2RlZmluZWQucmVkLm9mZnNldCAgPSAwOworCQliZmluX2xxMDM1X2ZiX2RlZmluZWQuYmx1ZS5vZmZzZXQgPSAxMTsKKwl9IGVsc2UgeworCQliZmluX2xxMDM1X2ZiX2RlZmluZWQucmVkLm9mZnNldCAgPSAxMTsKKwkJYmZpbl9scTAzNV9mYl9kZWZpbmVkLmJsdWUub2Zmc2V0ID0gMDsKKwl9CisKKwliZmluX2xxMDM1X2ZiLmZib3BzID0gJmJmaW5fbHEwMzVfZmJfb3BzOworCWJmaW5fbHEwMzVfZmIudmFyID0gYmZpbl9scTAzNV9mYl9kZWZpbmVkOworCisJYmZpbl9scTAzNV9mYi5maXggPSBiZmluX2xxMDM1X2ZiX2ZpeDsKKwliZmluX2xxMDM1X2ZiLmZsYWdzID0gRkJJTkZPX0RFRkFVTFQ7CisKKworCWJmaW5fbHEwMzVfZmIucHNldWRvX3BhbGV0dGUgPSBremFsbG9jKHNpemVvZih1MzIpICogMTYsIEdGUF9LRVJORUwpOworCWlmIChiZmluX2xxMDM1X2ZiLnBzZXVkb19wYWxldHRlID09IE5VTEwpIHsKKwkJcHJfZXJyKCJmYWlsZWQgdG8gYWxsb2NhdGUgcHNldWRvX3BhbGV0dGVcbiIpOworCQlmcmVlX2RtYShDSF9QUEkpOworCQlmcmVlX3BvcnRzKCk7CisJCWRtYV9mcmVlX2NvaGVyZW50KE5VTEwsIFRPVEFMX1ZJREVPX01FTV9TSVpFLCBmYl9idWZmZXIsIDApOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlpZiAoZmJfYWxsb2NfY21hcCgmYmZpbl9scTAzNV9mYi5jbWFwLCBOQlJfUEFMRVRURSwgMCkgPCAwKSB7CisJCXByX2VycigiZmFpbGVkIHRvIGFsbG9jYXRlIGNvbG9ybWFwICglZCBlbnRyaWVzKVxuIiwKKwkJCU5CUl9QQUxFVFRFKTsKKwkJZnJlZV9kbWEoQ0hfUFBJKTsKKwkJZnJlZV9wb3J0cygpOworCQlkbWFfZnJlZV9jb2hlcmVudChOVUxMLCBUT1RBTF9WSURFT19NRU1fU0laRSwgZmJfYnVmZmVyLCAwKTsKKwkJa2ZyZWUoYmZpbl9scTAzNV9mYi5wc2V1ZG9fcGFsZXR0ZSk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCWlmIChyZWdpc3Rlcl9mcmFtZWJ1ZmZlcigmYmZpbl9scTAzNV9mYikgPCAwKSB7CisJCXByX2VycigidW5hYmxlIHRvIHJlZ2lzdGVyIGZyYW1lYnVmZmVyXG4iKTsKKwkJZnJlZV9kbWEoQ0hfUFBJKTsKKwkJZnJlZV9wb3J0cygpOworCQlkbWFfZnJlZV9jb2hlcmVudChOVUxMLCBUT1RBTF9WSURFT19NRU1fU0laRSwgZmJfYnVmZmVyLCAwKTsKKwkJZmJfYnVmZmVyID0gTlVMTDsKKwkJa2ZyZWUoYmZpbl9scTAzNV9mYi5wc2V1ZG9fcGFsZXR0ZSk7CisJCWZiX2RlYWxsb2NfY21hcCgmYmZpbl9scTAzNV9mYi5jbWFwKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaTJjX2FkZF9kcml2ZXIoJmFkNTI4MF9kcml2ZXIpOworCisJbWVtc2V0KCZwcm9wcywgMCwgc2l6ZW9mKHByb3BzKSk7CisJcHJvcHMubWF4X2JyaWdodG5lc3MgPSBNQVhfQlJJR0hFTkVTUzsKKwlibF9kZXYgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKCJiZjUzNy1ibCIsIE5VTEwsIE5VTEwsCisJCQkJCSAgICZiZmluX2xxMDM1ZmJfYmxfb3BzLCAmcHJvcHMpOworCisJbGNkX2RldiA9IGxjZF9kZXZpY2VfcmVnaXN0ZXIoS0JVSUxEX01PRE5BTUUsICZwZGV2LT5kZXYsIE5VTEwsCisJCQkJICAgICAgJmJmaW5fbGNkX29wcyk7CisJbGNkX2Rldi0+cHJvcHMubWF4X2NvbnRyYXN0ID0gMjU1LAorCisJcHJfaW5mbygiaW5pdGlhbGl6ZWQiKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBiZmluX2xxMDM1X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWlmIChmYl9idWZmZXIgIT0gTlVMTCkKKwkJZG1hX2ZyZWVfY29oZXJlbnQoTlVMTCwgVE9UQUxfVklERU9fTUVNX1NJWkUsIGZiX2J1ZmZlciwgMCk7CisKKwlpZiAoTDFfREFUQV9BX0xFTkdUSCkKKwkJbDFfZGF0YV9zcmFtX2ZyZWUoZG1hX2Rlc2NfdGFibGUpOworCWVsc2UKKwkJZG1hX2ZyZWVfY29oZXJlbnQoTlVMTCwgVE9UQUxfRE1BX0RFU0NfU0laRSwgTlVMTCwgMCk7CisKKwliZmluX3dyaXRlX1RJTUVSX0RJU0FCTEUoVElNRU5fU1B8VElNRU5fU1BTfFRJTUVOX1BTX0NMU3wKKwkJCQkgVElNRU5fTFB8VElNRU5fUkVWKTsKKwl0X2NvbmZfZG9uZSA9IDA7CisKKwlmcmVlX2RtYShDSF9QUEkpOworCisKKwlrZnJlZShiZmluX2xxMDM1X2ZiLnBzZXVkb19wYWxldHRlKTsKKwlmYl9kZWFsbG9jX2NtYXAoJmJmaW5fbHEwMzVfZmIuY21hcCk7CisKKworCWxjZF9kZXZpY2VfdW5yZWdpc3RlcihsY2RfZGV2KTsKKwliYWNrbGlnaHRfZGV2aWNlX3VucmVnaXN0ZXIoYmxfZGV2KTsKKworCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIoJmJmaW5fbHEwMzVfZmIpOworCWkyY19kZWxfZHJpdmVyKCZhZDUyODBfZHJpdmVyKTsKKworCWZyZWVfcG9ydHMoKTsKKworCXByX2luZm8oInVucmVnaXN0ZXJlZCBMQ0QgZHJpdmVyXG4iKTsKKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IGJmaW5fbHEwMzVfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJaWYgKGxxMDM1X29wZW5fY250ID4gMCkgeworCQliZmluX3dyaXRlX1BQSV9DT05UUk9MKDApOworCQlTU1lOQygpOworCQlkaXNhYmxlX2RtYShDSF9QUEkpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJmaW5fbHEwMzVfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaWYgKGxxMDM1X29wZW5fY250ID4gMCkgeworCQliZmluX3dyaXRlX1BQSV9DT05UUk9MKDApOworCQlTU1lOQygpOworCisJCWNvbmZpZ19kbWEoKTsKKwkJY29uZmlnX3BwaSgpOworCisJCWVuYWJsZV9kbWEoQ0hfUFBJKTsKKwkJYmZpbl93cml0ZV9QUElfQ09OVFJPTChiZmluX3JlYWRfUFBJX0NPTlRST0woKSB8IFBPUlRfRU4pOworCQlTU1lOQygpOworCisJCWNvbmZpZ190aW1lcnMoKTsKKwkJc3RhcnRfdGltZXJzKCk7CisJfSBlbHNlIHsKKwkJdF9jb25mX2RvbmUgPSAwOworCX0KKworCXJldHVybiAwOworfQorI2Vsc2UKKyMgZGVmaW5lIGJmaW5fbHEwMzVfc3VzcGVuZAlOVUxMCisjIGRlZmluZSBiZmluX2xxMDM1X3Jlc3VtZQlOVUxMCisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYmZpbl9scTAzNV9kcml2ZXIgPSB7CisJLnByb2JlID0gYmZpbl9scTAzNV9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoYmZpbl9scTAzNV9yZW1vdmUpLAorCS5zdXNwZW5kID0gYmZpbl9scTAzNV9zdXNwZW5kLAorCS5yZXN1bWUgPSBiZmluX2xxMDM1X3Jlc3VtZSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9IEtCVUlMRF9NT0ROQU1FLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgYmZpbl9scTAzNV9kcml2ZXJfaW5pdCh2b2lkKQoreworCXJlcXVlc3RfbW9kdWxlKCJpMmMtYmZpbi10d2kiKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZiZmluX2xxMDM1X2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdChiZmluX2xxMDM1X2RyaXZlcl9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IGJmaW5fbHEwMzVfZHJpdmVyX2NsZWFudXAodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYmZpbl9scTAzNV9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQoYmZpbl9scTAzNV9kcml2ZXJfY2xlYW51cCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiU0hBUlAgTFEwMzVRN0RCMDMgVEZUIExDRCBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmZpbl9hZHY3MzkzZmIuYyBiL2RyaXZlcnMvdmlkZW8vYmZpbl9hZHY3MzkzZmIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDg2ZjU0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby9iZmluX2FkdjczOTNmYi5jCkBAIC0wLDAgKzEsODMyIEBACisvKgorICogRnJhbWUgYnVmZmVyIGRyaXZlciBmb3IgQURWNzM5My8yIHZpZGVvIGVuY29kZXIKKyAqCisgKiBDb3B5cmlnaHQgMjAwNi0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlLgorICovCisKKy8qCisgKiBUT0RPOiBSZW1vdmUgR2xvYmFscworICogVE9ETzogQ29kZSBDbGVhbnVwCisgKi8KKworI2RlZmluZSBwcl9mbXQoZm10KSBEUklWRVJfTkFNRSAiOiAiIGZtdAorCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxhc20vYmxhY2tmaW4uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL2RtYS5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8YXNtL3BvcnRtdXguaD4KKworI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLWRldi5oPgorCisjaW5jbHVkZSAiYmZpbl9hZHY3MzkzZmIuaCIKKworc3RhdGljIGludCBtb2RlID0gVk1PREU7CitzdGF0aWMgaW50IG1lbSA9IFZNRU07CitzdGF0aWMgaW50IG5vY3Vyc29yID0gMTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IHBwaV9waW5zW10gPSB7CisJUF9QUEkwX0NMSywgUF9QUEkwX0ZTMSwgUF9QUEkwX0ZTMiwKKwlQX1BQSTBfRDAsIFBfUFBJMF9EMSwgUF9QUEkwX0QyLCBQX1BQSTBfRDMsCisJUF9QUEkwX0Q0LCBQX1BQSTBfRDUsIFBfUFBJMF9ENiwgUF9QUEkwX0Q3LAorCVBfUFBJMF9EOCwgUF9QUEkwX0Q5LCBQX1BQSTBfRDEwLCBQX1BQSTBfRDExLAorCVBfUFBJMF9EMTIsIFBfUFBJMF9EMTMsIFBfUFBJMF9EMTQsIFBfUFBJMF9EMTUsCisJMAorfTsKKworLyoKKyAqIGNhcmQgcGFyYW1ldGVycworICovCisKK3N0YXRpYyBzdHJ1Y3QgYmZpbl9hZHY3MzkzX2ZiX3BhciB7CisJLyogc3RydWN0dXJlIGhvbGRpbmcgYmxhY2tmaW4gLyBhZHY3MzkzIHBhcmFtdGVycyB3aGVuCisJICAgc2NyZWVuIGlzIGJsYW5rZWQgKi8KKwlzdHJ1Y3QgeworCQl1OCBNb2RlOwkvKiBudHNjL3BhbC8/ICovCisJfSB2Z2Ffc3RhdGU7CisJYXRvbWljX3QgcmVmX2NvdW50OworfSBiZmluX3BhcjsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gYmZpbl9hZHY3MzkzX2ZiX2RlZmluZWQgPSB7CisJLnhyZXMgPSA3MjAsCisJLnlyZXMgPSA0ODAsCisJLnhyZXNfdmlydHVhbCA9IDcyMCwKKwkueXJlc192aXJ0dWFsID0gNDgwLAorCS5iaXRzX3Blcl9waXhlbCA9IDE2LAorCS5hY3RpdmF0ZSA9IEZCX0FDVElWQVRFX1RFU1QsCisJLmhlaWdodCA9IC0xLAorCS53aWR0aCA9IC0xLAorCS5sZWZ0X21hcmdpbiA9IDAsCisJLnJpZ2h0X21hcmdpbiA9IDAsCisJLnVwcGVyX21hcmdpbiA9IDAsCisJLmxvd2VyX21hcmdpbiA9IDAsCisJLnZtb2RlID0gRkJfVk1PREVfSU5URVJMQUNFRCwKKwkucmVkID0gezExLCA1LCAwfSwKKwkuZ3JlZW4gPSB7NSwgNiwgMH0sCisJLmJsdWUgPSB7MCwgNSwgMH0sCisJLnRyYW5zcCA9IHswLCAwLCAwfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZmJfZml4X3NjcmVlbmluZm8gYmZpbl9hZHY3MzkzX2ZiX2ZpeCBfX2RldmluaXRkYXRhID0geworCS5pZCA9ICJCRklOIEFEVjczOTMiLAorCS5zbWVtX2xlbiA9IDcyMCAqIDQ4MCAqIDIsCisJLnR5cGUgPSBGQl9UWVBFX1BBQ0tFRF9QSVhFTFMsCisJLnZpc3VhbCA9IEZCX1ZJU1VBTF9UUlVFQ09MT1IsCisJLnhwYW5zdGVwID0gMCwKKwkueXBhbnN0ZXAgPSAwLAorCS5saW5lX2xlbmd0aCA9IDcyMCAqIDIsCisJLmFjY2VsID0gRkJfQUNDRUxfTk9ORQorfTsKKworc3RhdGljIHN0cnVjdCBmYl9vcHMgYmZpbl9hZHY3MzkzX2ZiX29wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkuZmJfb3BlbiA9IGJmaW5fYWR2NzM5M19mYl9vcGVuLAorCS5mYl9yZWxlYXNlID0gYmZpbl9hZHY3MzkzX2ZiX3JlbGVhc2UsCisJLmZiX2NoZWNrX3ZhciA9IGJmaW5fYWR2NzM5M19mYl9jaGVja192YXIsCisJLmZiX3Bhbl9kaXNwbGF5ID0gYmZpbl9hZHY3MzkzX2ZiX3Bhbl9kaXNwbGF5LAorCS5mYl9ibGFuayA9IGJmaW5fYWR2NzM5M19mYl9ibGFuaywKKwkuZmJfZmlsbHJlY3QgPSBjZmJfZmlsbHJlY3QsCisJLmZiX2NvcHlhcmVhID0gY2ZiX2NvcHlhcmVhLAorCS5mYl9pbWFnZWJsaXQgPSBjZmJfaW1hZ2VibGl0LAorCS5mYl9jdXJzb3IgPSBiZmluX2FkdjczOTNfZmJfY3Vyc29yLAorCS5mYl9zZXRjb2xyZWcgPSBiZmluX2FkdjczOTNfZmJfc2V0Y29scmVnLAorfTsKKworc3RhdGljIGludCBkbWFfZGVzY19saXN0KHN0cnVjdCBhZHY3MzkzZmJfZGV2aWNlICpmYmRldiwgdTE2IGFyZykKK3sKKwlpZiAoYXJnID09IEJVSUxEKSB7CS8qIEJ1aWxkICovCisJCWZiZGV2LT52YjEgPSBsMV9kYXRhX3NyYW1femFsbG9jKHNpemVvZihzdHJ1Y3QgZG1hc2cpKTsKKwkJaWYgKGZiZGV2LT52YjEgPT0gTlVMTCkKKwkJCWdvdG8gZXJyb3I7CisKKwkJZmJkZXYtPmF2MSA9IGwxX2RhdGFfc3JhbV96YWxsb2Moc2l6ZW9mKHN0cnVjdCBkbWFzZykpOworCQlpZiAoZmJkZXYtPmF2MSA9PSBOVUxMKQorCQkJZ290byBlcnJvcjsKKworCQlmYmRldi0+dmIyID0gbDFfZGF0YV9zcmFtX3phbGxvYyhzaXplb2Yoc3RydWN0IGRtYXNnKSk7CisJCWlmIChmYmRldi0+dmIyID09IE5VTEwpCisJCQlnb3RvIGVycm9yOworCisJCWZiZGV2LT5hdjIgPSBsMV9kYXRhX3NyYW1femFsbG9jKHNpemVvZihzdHJ1Y3QgZG1hc2cpKTsKKwkJaWYgKGZiZGV2LT5hdjIgPT0gTlVMTCkKKwkJCWdvdG8gZXJyb3I7CisKKwkJLyogQnVpbGQgbGlua2VkIERNQSBkZXNjcmlwdG9yIGxpc3QgKi8KKwkJZmJkZXYtPnZiMS0+bmV4dF9kZXNjX2FkZHIgPSBmYmRldi0+YXYxOworCQlmYmRldi0+YXYxLT5uZXh0X2Rlc2NfYWRkciA9IGZiZGV2LT52YjI7CisJCWZiZGV2LT52YjItPm5leHRfZGVzY19hZGRyID0gZmJkZXYtPmF2MjsKKwkJZmJkZXYtPmF2Mi0+bmV4dF9kZXNjX2FkZHIgPSBmYmRldi0+dmIxOworCisJCS8qIFNhdmUgbGlzdCBoZWFkICovCisJCWZiZGV2LT5kZXNjcmlwdG9yX2xpc3RfaGVhZCA9IGZiZGV2LT5hdjI7CisKKwkJLyogVmVydGljYWwgQmxhbmtpbmcgRmllbGQgMSAqLworCQlmYmRldi0+dmIxLT5zdGFydF9hZGRyID0gVkJfRFVNTVlfTUVNT1JZX1NPVVJDRTsKKwkJZmJkZXYtPnZiMS0+Y2ZnID0gRE1BX0NGR19WQUw7CisKKwkJZmJkZXYtPnZiMS0+eF9jb3VudCA9CisJCSAgICBmYmRldi0+bW9kZXNbbW9kZV0ueHJlcyArIGZiZGV2LT5tb2Rlc1ttb2RlXS5ib2VmdF9ibGFuazsKKworCQlmYmRldi0+dmIxLT54X21vZGlmeSA9IDA7CisJCWZiZGV2LT52YjEtPnlfY291bnQgPSBmYmRldi0+bW9kZXNbbW9kZV0udmIxX2xpbmVzOworCQlmYmRldi0+dmIxLT55X21vZGlmeSA9IDA7CisKKwkJLyogQWN0aXZlIFZpZGVvIEZpZWxkIDEgKi8KKworCQlmYmRldi0+YXYxLT5zdGFydF9hZGRyID0gKHVuc2lnbmVkIGxvbmcpZmJkZXYtPmZiX21lbTsKKwkJZmJkZXYtPmF2MS0+Y2ZnID0gRE1BX0NGR19WQUw7CisJCWZiZGV2LT5hdjEtPnhfY291bnQgPQorCQkgICAgZmJkZXYtPm1vZGVzW21vZGVdLnhyZXMgKyBmYmRldi0+bW9kZXNbbW9kZV0uYm9lZnRfYmxhbms7CisJCWZiZGV2LT5hdjEtPnhfbW9kaWZ5ID0gZmJkZXYtPm1vZGVzW21vZGVdLmJwcCAvIDg7CisJCWZiZGV2LT5hdjEtPnlfY291bnQgPSBmYmRldi0+bW9kZXNbbW9kZV0uYV9saW5lczsKKwkJZmJkZXYtPmF2MS0+eV9tb2RpZnkgPQorCQkgICAgKGZiZGV2LT5tb2Rlc1ttb2RlXS54cmVzIC0gZmJkZXYtPm1vZGVzW21vZGVdLmJvZWZ0X2JsYW5rICsKKwkJICAgICAxKSAqIChmYmRldi0+bW9kZXNbbW9kZV0uYnBwIC8gOCk7CisKKwkJLyogVmVydGljYWwgQmxhbmtpbmcgRmllbGQgMiAqLworCisJCWZiZGV2LT52YjItPnN0YXJ0X2FkZHIgPSBWQl9EVU1NWV9NRU1PUllfU09VUkNFOworCQlmYmRldi0+dmIyLT5jZmcgPSBETUFfQ0ZHX1ZBTDsKKwkJZmJkZXYtPnZiMi0+eF9jb3VudCA9CisJCSAgICBmYmRldi0+bW9kZXNbbW9kZV0ueHJlcyArIGZiZGV2LT5tb2Rlc1ttb2RlXS5ib2VmdF9ibGFuazsKKworCQlmYmRldi0+dmIyLT54X21vZGlmeSA9IDA7CisJCWZiZGV2LT52YjItPnlfY291bnQgPSBmYmRldi0+bW9kZXNbbW9kZV0udmIyX2xpbmVzOworCQlmYmRldi0+dmIyLT55X21vZGlmeSA9IDA7CisKKwkJLyogQWN0aXZlIFZpZGVvIEZpZWxkIDIgKi8KKworCQlmYmRldi0+YXYyLT5zdGFydF9hZGRyID0KKwkJICAgICh1bnNpZ25lZCBsb25nKWZiZGV2LT5mYl9tZW0gKyBmYmRldi0+bGluZV9sZW47CisKKwkJZmJkZXYtPmF2Mi0+Y2ZnID0gRE1BX0NGR19WQUw7CisKKwkJZmJkZXYtPmF2Mi0+eF9jb3VudCA9CisJCSAgICBmYmRldi0+bW9kZXNbbW9kZV0ueHJlcyArIGZiZGV2LT5tb2Rlc1ttb2RlXS5ib2VmdF9ibGFuazsKKworCQlmYmRldi0+YXYyLT54X21vZGlmeSA9IChmYmRldi0+bW9kZXNbbW9kZV0uYnBwIC8gOCk7CisJCWZiZGV2LT5hdjItPnlfY291bnQgPSBmYmRldi0+bW9kZXNbbW9kZV0uYV9saW5lczsKKworCQlmYmRldi0+YXYyLT55X21vZGlmeSA9CisJCSAgICAoZmJkZXYtPm1vZGVzW21vZGVdLnhyZXMgLSBmYmRldi0+bW9kZXNbbW9kZV0uYm9lZnRfYmxhbmsgKworCQkgICAgIDEpICogKGZiZGV2LT5tb2Rlc1ttb2RlXS5icHAgLyA4KTsKKworCQlyZXR1cm4gMTsKKwl9CisKK2Vycm9yOgorCWwxX2RhdGFfc3JhbV9mcmVlKGZiZGV2LT52YjEpOworCWwxX2RhdGFfc3JhbV9mcmVlKGZiZGV2LT5hdjEpOworCWwxX2RhdGFfc3JhbV9mcmVlKGZiZGV2LT52YjIpOworCWwxX2RhdGFfc3JhbV9mcmVlKGZiZGV2LT5hdjIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYmZpbl9jb25maWdfZG1hKHN0cnVjdCBhZHY3MzkzZmJfZGV2aWNlICpmYmRldikKK3sKKwlCVUdfT04oIShmYmRldi0+ZmJfbWVtKSk7CisKKwlzZXRfZG1hX3hfY291bnQoQ0hfUFBJLCBmYmRldi0+ZGVzY3JpcHRvcl9saXN0X2hlYWQtPnhfY291bnQpOworCXNldF9kbWFfeF9tb2RpZnkoQ0hfUFBJLCBmYmRldi0+ZGVzY3JpcHRvcl9saXN0X2hlYWQtPnhfbW9kaWZ5KTsKKwlzZXRfZG1hX3lfY291bnQoQ0hfUFBJLCBmYmRldi0+ZGVzY3JpcHRvcl9saXN0X2hlYWQtPnlfY291bnQpOworCXNldF9kbWFfeV9tb2RpZnkoQ0hfUFBJLCBmYmRldi0+ZGVzY3JpcHRvcl9saXN0X2hlYWQtPnlfbW9kaWZ5KTsKKwlzZXRfZG1hX3N0YXJ0X2FkZHIoQ0hfUFBJLCBmYmRldi0+ZGVzY3JpcHRvcl9saXN0X2hlYWQtPnN0YXJ0X2FkZHIpOworCXNldF9kbWFfbmV4dF9kZXNjX2FkZHIoQ0hfUFBJLAorCQkJICAgICAgIGZiZGV2LT5kZXNjcmlwdG9yX2xpc3RfaGVhZC0+bmV4dF9kZXNjX2FkZHIpOworCXNldF9kbWFfY29uZmlnKENIX1BQSSwgZmJkZXYtPmRlc2NyaXB0b3JfbGlzdF9oZWFkLT5jZmcpOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIGJmaW5fZGlzYWJsZV9kbWEodm9pZCkKK3sKKwliZmluX3dyaXRlX0RNQTBfQ09ORklHKGJmaW5fcmVhZF9ETUEwX0NPTkZJRygpICYgfkRNQUVOKTsKK30KKworc3RhdGljIHZvaWQgYmZpbl9jb25maWdfcHBpKHN0cnVjdCBhZHY3MzkzZmJfZGV2aWNlICpmYmRldikKK3sKKwlpZiAoQU5PTUFMWV8wNTAwMDE4MykgeworCQliZmluX3dyaXRlX1RJTUVSMl9DT05GSUcoV0RUSF9DQVApOworCQliZmluX3dyaXRlX1RJTUVSX0VOQUJMRShUSU1FTjIpOworCX0KKworCWJmaW5fd3JpdGVfUFBJX0NPTlRST0woMHgzODFFKTsKKwliZmluX3dyaXRlX1BQSV9GUkFNRShmYmRldi0+bW9kZXNbbW9kZV0udG90X2xpbmVzKTsKKwliZmluX3dyaXRlX1BQSV9DT1VOVChmYmRldi0+bW9kZXNbbW9kZV0ueHJlcyArCisJCQkgICAgIGZiZGV2LT5tb2Rlc1ttb2RlXS5ib2VmdF9ibGFuayAtIDEpOworCWJmaW5fd3JpdGVfUFBJX0RFTEFZKGZiZGV2LT5tb2Rlc1ttb2RlXS5hb2VmdF9ibGFuayAtIDEpOworfQorCitzdGF0aWMgdm9pZCBiZmluX2VuYWJsZV9wcGkodm9pZCkKK3sKKwliZmluX3dyaXRlX1BQSV9DT05UUk9MKGJmaW5fcmVhZF9QUElfQ09OVFJPTCgpIHwgUE9SVF9FTik7Cit9CisKK3N0YXRpYyB2b2lkIGJmaW5fZGlzYWJsZV9wcGkodm9pZCkKK3sKKwliZmluX3dyaXRlX1BQSV9DT05UUk9MKGJmaW5fcmVhZF9QUElfQ09OVFJPTCgpICYgflBPUlRfRU4pOworfQorCitzdGF0aWMgaW5saW5lIGludCBhZHY3MzkzX3dyaXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTggdmFsdWUpCit7CisJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWcsIHZhbHVlKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgYWR2NzM5M19yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZykKK3sKKwlyZXR1cm4gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgcmVnKTsKK30KKworc3RhdGljIGludAorYWR2NzM5M193cml0ZV9ibG9jayhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkgICAgY29uc3QgdTggKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pCit7CisJaW50IHJldCA9IC0xOworCXU4IHJlZzsKKworCXdoaWxlIChsZW4gPj0gMikgeworCQlyZWcgPSAqZGF0YSsrOworCQlyZXQgPSBhZHY3MzkzX3dyaXRlKGNsaWVudCwgcmVnLCAqZGF0YSsrKTsKKwkJaWYgKHJldCA8IDApCisJCQlicmVhazsKKwkJbGVuIC09IDI7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhZHY3MzkzX21vZGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTE2IG1vZGUpCit7CisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBQT1dFUl9PTjoJCS8qIEFEVjczOTMgU2xlZXAgbW9kZSBPRkYgKi8KKwkJYWR2NzM5M193cml0ZShjbGllbnQsIDB4MDAsIDB4MUUpOworCQlicmVhazsKKwljYXNlIFBPV0VSX0RPV046CS8qIEFEVjczOTMgU2xlZXAgbW9kZSBPTiAqLworCQlhZHY3MzkzX3dyaXRlKGNsaWVudCwgMHgwMCwgMHgxRik7CisJCWJyZWFrOworCWNhc2UgQkxBTktfT0ZGOgkJLyogUGl4ZWwgRGF0YSBWYWxpZCAqLworCQlhZHY3MzkzX3dyaXRlKGNsaWVudCwgMHg4MiwgMHhDQik7CisJCWJyZWFrOworCWNhc2UgQkxBTktfT046CQkvKiBQaXhlbCBEYXRhIEludmFsaWQgKi8KKwkJYWR2NzM5M193cml0ZShjbGllbnQsIDB4ODIsIDB4OEIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgcHBpX2lycV9lcnJvcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisKKwlzdHJ1Y3QgYWR2NzM5M2ZiX2RldmljZSAqZmJkZXYgPSAoc3RydWN0IGFkdjczOTNmYl9kZXZpY2UgKilkZXZfaWQ7CisKKwl1MTYgc3RhdHVzID0gYmZpbl9yZWFkX1BQSV9TVEFUVVMoKTsKKworCXByX2RlYnVnKCIlczogUFBJIFN0YXR1cyA9IDB4JVhcbiIsIF9fZnVuY19fLCBzdGF0dXMpOworCisJaWYgKHN0YXR1cykgeworCQliZmluX2Rpc2FibGVfZG1hKCk7CS8qIFRPRE86IENoZWNrIFNlcXVlbmNlICovCisJCWJmaW5fZGlzYWJsZV9wcGkoKTsKKwkJYmZpbl9jbGVhcl9QUElfU1RBVFVTKCk7CisJCWJmaW5fY29uZmlnX2RtYShmYmRldik7CisJCWJmaW5fZW5hYmxlX3BwaSgpOworCX0KKworCXJldHVybiBJUlFfSEFORExFRDsKKworfQorCitzdGF0aWMgaW50IHByb2Nfb3V0cHV0KGNoYXIgKmJ1ZikKK3sKKwljaGFyICpwID0gYnVmOworCisJcCArPSBzcHJpbnRmKHAsCisJCSJVc2FnZTpcbiIKKwkJImVjaG8gMHhbUkVHXVtWYWx1ZV0gPiBhZHY3MzkzXG4iCisJCSJleGFtcGxlOiBlY2hvIDB4MTIzNCA+YWR2NzM5M1xuIgorCQkid3JpdGVzIDB4MzQgaW50byBSZWdpc3RlciAweDEyXG4iKTsKKworCXJldHVybiBwIC0gYnVmOworfQorCitzdGF0aWMgaW50CithZHY3MzkzX3JlYWRfcHJvYyhjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwKKwkJICBpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQoreworCWludCBsZW47CisKKwlsZW4gPSBwcm9jX291dHB1dChwYWdlKTsKKwlpZiAobGVuIDw9IG9mZiArIGNvdW50KQorCQkqZW9mID0gMTsKKwkqc3RhcnQgPSBwYWdlICsgb2ZmOworCWxlbiAtPSBvZmY7CisJaWYgKGxlbiA+IGNvdW50KQorCQlsZW4gPSBjb3VudDsKKwlpZiAobGVuIDwgMCkKKwkJbGVuID0gMDsKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgaW50CithZHY3MzkzX3dyaXRlX3Byb2Moc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICogYnVmZmVyLAorCQkgICB1bnNpZ25lZCBsb25nIGNvdW50LCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBhZHY3MzkzZmJfZGV2aWNlICpmYmRldiA9IGRhdGE7CisJY2hhciBsaW5lWzhdOworCXVuc2lnbmVkIGludCB2YWw7CisJaW50IHJldDsKKworCXJldCA9IGNvcHlfZnJvbV91c2VyKGxpbmUsIGJ1ZmZlciwgY291bnQpOworCWlmIChyZXQpCisJCXJldHVybiAtRUZBVUxUOworCisJdmFsID0gc2ltcGxlX3N0cnRvdWwobGluZSwgTlVMTCwgMCk7CisJYWR2NzM5M193cml0ZShmYmRldi0+Y2xpZW50LCB2YWwgPj4gOCwgdmFsICYgMHhmZik7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGJmaW5fYWR2NzM5M19mYl9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJCQkgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICplbnRyeTsKKwlpbnQgbnVtX21vZGVzID0gQVJSQVlfU0laRShrbm93bl9tb2Rlcyk7CisKKwlzdHJ1Y3QgYWR2NzM5M2ZiX2RldmljZSAqZmJkZXYgPSBOVUxMOworCisJaWYgKG1lbSA+IDIpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJtZW0gb3V0IG9mIGFsbG93ZWQgcmFuZ2UgWzE7Ml1cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAobW9kZSA+IG51bV9tb2RlcykgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIm1vZGUgJWQ6IG5vdCBzdXBwb3J0ZWQiLCBtb2RlKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJZmJkZXYgPSBremFsbG9jKHNpemVvZigqZmJkZXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWZiZGV2KSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIGRldmljZSBwcml2YXRlIHJlY29yZCIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBmYmRldik7CisKKwlmYmRldi0+bW9kZXMgPSBrbm93bl9tb2RlczsKKwlmYmRldi0+Y2xpZW50ID0gY2xpZW50OworCisJZmJkZXYtPmZiX2xlbiA9CisJICAgIG1lbSAqIGZiZGV2LT5tb2Rlc1ttb2RlXS54cmVzICogZmJkZXYtPm1vZGVzW21vZGVdLnhyZXMgKgorCSAgICAoZmJkZXYtPm1vZGVzW21vZGVdLmJwcCAvIDgpOworCisJZmJkZXYtPmxpbmVfbGVuID0KKwkgICAgZmJkZXYtPm1vZGVzW21vZGVdLnhyZXMgKiAoZmJkZXYtPm1vZGVzW21vZGVdLmJwcCAvIDgpOworCisJLyogV29ya2Fyb3VuZCAiUFBJIERvZXMgTm90IFN0YXJ0IFByb3Blcmx5IEluIFNwZWNpZmljIE1vZGUiICovCisJaWYgKEFOT01BTFlfMDUwMDA0MDApIHsKKwkJaWYgKGdwaW9fcmVxdWVzdChQX0lERU5UKFBfUFBJMF9GUzMpLCAiUFBJMF9GUzMiKSkgeworCQkJZGV2X2VycigmY2xpZW50LT5kZXYsICJQUEkwX0ZTMyBHUElPIHJlcXVlc3QgZmFpbGVkXG4iKTsKKwkJCXJldCA9IC1FQlVTWTsKKwkJCWdvdG8gb3V0Xzg7CisJCX0KKwkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFBfSURFTlQoUF9QUEkwX0ZTMyksIDApOworCX0KKworCWlmIChwZXJpcGhlcmFsX3JlcXVlc3RfbGlzdChwcGlfcGlucywgRFJJVkVSX05BTUUpKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAicmVxdWVzdGluZyBQUEkgcGVyaXBoZXJhbCBmYWlsZWRcbiIpOworCQlyZXQgPSAtRUZBVUxUOworCQlnb3RvIG91dF84OworCX0KKworCWZiZGV2LT5mYl9tZW0gPQorCSAgICBkbWFfYWxsb2NfY29oZXJlbnQoTlVMTCwgZmJkZXYtPmZiX2xlbiwgJmZiZGV2LT5kbWFfaGFuZGxlLAorCQkJICAgICAgIEdGUF9LRVJORUwpOworCisJaWYgKE5VTEwgPT0gZmJkZXYtPmZiX21lbSkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgImNvdWxkbid0IGFsbG9jYXRlIGRtYSBidWZmZXIgKCVkIGJ5dGVzKVxuIiwKKwkJICAgICAgICh1MzIpIGZiZGV2LT5mYl9sZW4pOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dF83OworCX0KKworCWZiZGV2LT5pbmZvLnNjcmVlbl9iYXNlID0gKHZvaWQgKilmYmRldi0+ZmJfbWVtOworCWJmaW5fYWR2NzM5M19mYl9maXguc21lbV9zdGFydCA9IChpbnQpZmJkZXYtPmZiX21lbTsKKworCWJmaW5fYWR2NzM5M19mYl9maXguc21lbV9sZW4gPSBmYmRldi0+ZmJfbGVuOworCWJmaW5fYWR2NzM5M19mYl9maXgubGluZV9sZW5ndGggPSBmYmRldi0+bGluZV9sZW47CisKKwlpZiAobWVtID4gMSkKKwkJYmZpbl9hZHY3MzkzX2ZiX2ZpeC55cGFuc3RlcCA9IDE7CisKKwliZmluX2FkdjczOTNfZmJfZGVmaW5lZC5yZWQubGVuZ3RoID0gNTsKKwliZmluX2FkdjczOTNfZmJfZGVmaW5lZC5ncmVlbi5sZW5ndGggPSA2OworCWJmaW5fYWR2NzM5M19mYl9kZWZpbmVkLmJsdWUubGVuZ3RoID0gNTsKKworCWJmaW5fYWR2NzM5M19mYl9kZWZpbmVkLnhyZXMgPSBmYmRldi0+bW9kZXNbbW9kZV0ueHJlczsKKwliZmluX2FkdjczOTNfZmJfZGVmaW5lZC55cmVzID0gZmJkZXYtPm1vZGVzW21vZGVdLnlyZXM7CisJYmZpbl9hZHY3MzkzX2ZiX2RlZmluZWQueHJlc192aXJ0dWFsID0gZmJkZXYtPm1vZGVzW21vZGVdLnhyZXM7CisJYmZpbl9hZHY3MzkzX2ZiX2RlZmluZWQueXJlc192aXJ0dWFsID0gbWVtICogZmJkZXYtPm1vZGVzW21vZGVdLnlyZXM7CisJYmZpbl9hZHY3MzkzX2ZiX2RlZmluZWQuYml0c19wZXJfcGl4ZWwgPSBmYmRldi0+bW9kZXNbbW9kZV0uYnBwOworCisJZmJkZXYtPmluZm8uZmJvcHMgPSAmYmZpbl9hZHY3MzkzX2ZiX29wczsKKwlmYmRldi0+aW5mby52YXIgPSBiZmluX2FkdjczOTNfZmJfZGVmaW5lZDsKKwlmYmRldi0+aW5mby5maXggPSBiZmluX2FkdjczOTNfZmJfZml4OworCWZiZGV2LT5pbmZvLnBhciA9ICZiZmluX3BhcjsKKwlmYmRldi0+aW5mby5mbGFncyA9IEZCSU5GT19ERUZBVUxUOworCisJZmJkZXYtPmluZm8ucHNldWRvX3BhbGV0dGUgPSBremFsbG9jKHNpemVvZih1MzIpICogMTYsIEdGUF9LRVJORUwpOworCWlmICghZmJkZXYtPmluZm8ucHNldWRvX3BhbGV0dGUpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJmYWlsZWQgdG8gYWxsb2NhdGUgcHNldWRvX3BhbGV0dGVcbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dF82OworCX0KKworCWlmIChmYl9hbGxvY19jbWFwKCZmYmRldi0+aW5mby5jbWFwLCBCRklOX0xDRF9OQlJfUEFMRVRURV9FTlRSSUVTLCAwKSA8IDApIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJmYWlsZWQgdG8gYWxsb2NhdGUgY29sb3JtYXAgKCVkIGVudHJpZXMpXG4iLAorCQkJICAgQkZJTl9MQ0RfTkJSX1BBTEVUVEVfRU5UUklFUyk7CisJCXJldCA9IC1FRkFVTFQ7CisJCWdvdG8gb3V0XzU7CisJfQorCisJaWYgKHJlcXVlc3RfZG1hKENIX1BQSSwgIkJGNXh4X1BQSV9ETUEiKSA8IDApIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJ1bmFibGUgdG8gcmVxdWVzdCBQUEkgRE1BXG4iKTsKKwkJcmV0ID0gLUVGQVVMVDsKKwkJZ290byBvdXRfNDsKKwl9CisKKwlpZiAocmVxdWVzdF9pcnEoSVJRX1BQSV9FUlJPUiwgcHBpX2lycV9lcnJvciwgSVJRRl9ESVNBQkxFRCwKKwkJCSJQUEkgRVJST1IiLCBmYmRldikgPCAwKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAidW5hYmxlIHRvIHJlcXVlc3QgUFBJIEVSUk9SIElSUVxuIik7CisJCXJldCA9IC1FRkFVTFQ7CisJCWdvdG8gb3V0XzM7CisJfQorCisJZmJkZXYtPm9wZW4gPSAwOworCisJcmV0ID0gYWR2NzM5M193cml0ZV9ibG9jayhjbGllbnQsIGZiZGV2LT5tb2Rlc1ttb2RlXS5hZHY3MzkzX2kyY19pbml0ZCwKKwkJCQlmYmRldi0+bW9kZXNbbW9kZV0uYWR2NzM5M19pMmNfaW5pdGRfbGVuKTsKKworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJpMmMgYXR0YWNoOiBpbml0IGVycm9yXG4iKTsKKwkJZ290byBvdXRfMTsKKwl9CisKKworCWlmIChyZWdpc3Rlcl9mcmFtZWJ1ZmZlcigmZmJkZXYtPmluZm8pIDwgMCkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgInVuYWJsZSB0byByZWdpc3RlciBmcmFtZWJ1ZmZlclxuIik7CisJCXJldCA9IC1FRkFVTFQ7CisJCWdvdG8gb3V0XzE7CisJfQorCisJZGV2X2luZm8oJmNsaWVudC0+ZGV2LCAiZmIlZDogJXMgZnJhbWUgYnVmZmVyIGRldmljZVxuIiwKKwkgICAgICAgZmJkZXYtPmluZm8ubm9kZSwgZmJkZXYtPmluZm8uZml4LmlkKTsKKwlkZXZfaW5mbygmY2xpZW50LT5kZXYsICJmYiBtZW1vcnkgYWRkcmVzcyA6IDB4JXBcbiIsIGZiZGV2LT5mYl9tZW0pOworCisJZW50cnkgPSBjcmVhdGVfcHJvY19lbnRyeSgiZHJpdmVyL2FkdjczOTMiLCAwLCBOVUxMKTsKKwlpZiAoIWVudHJ5KSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAidW5hYmxlIHRvIGNyZWF0ZSAvcHJvYyBlbnRyeVxuIik7CisJCXJldCA9IC1FRkFVTFQ7CisJCWdvdG8gb3V0XzA7CisJfQorCisJZW50cnktPnJlYWRfcHJvYyA9IGFkdjczOTNfcmVhZF9wcm9jOworCWVudHJ5LT53cml0ZV9wcm9jID0gYWR2NzM5M193cml0ZV9wcm9jOworCWVudHJ5LT5kYXRhID0gZmJkZXY7CisKKwlyZXR1cm4gMDsKKworIG91dF8wOgorCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIoJmZiZGV2LT5pbmZvKTsKKyBvdXRfMToKKwlmcmVlX2lycShJUlFfUFBJX0VSUk9SLCBmYmRldik7Cisgb3V0XzM6CisJZnJlZV9kbWEoQ0hfUFBJKTsKKyBvdXRfNDoKKwlkbWFfZnJlZV9jb2hlcmVudChOVUxMLCBmYmRldi0+ZmJfbGVuLCBmYmRldi0+ZmJfbWVtLAorCQkJICBmYmRldi0+ZG1hX2hhbmRsZSk7Cisgb3V0XzU6CisJZmJfZGVhbGxvY19jbWFwKCZmYmRldi0+aW5mby5jbWFwKTsKKyBvdXRfNjoKKwlrZnJlZShmYmRldi0+aW5mby5wc2V1ZG9fcGFsZXR0ZSk7Cisgb3V0Xzc6CisJcGVyaXBoZXJhbF9mcmVlX2xpc3QocHBpX3BpbnMpOworIG91dF84OgorCWtmcmVlKGZiZGV2KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYmZpbl9hZHY3MzkzX2ZiX29wZW4oc3RydWN0IGZiX2luZm8gKmluZm8sIGludCB1c2VyKQoreworCXN0cnVjdCBhZHY3MzkzZmJfZGV2aWNlICpmYmRldiA9IHRvX2FkdjczOTNmYl9kZXZpY2UoaW5mbyk7CisKKwlmYmRldi0+aW5mby5zY3JlZW5fYmFzZSA9ICh2b2lkICopZmJkZXYtPmZiX21lbTsKKwlpZiAoIWZiZGV2LT5pbmZvLnNjcmVlbl9iYXNlKSB7CisJCWRldl9lcnIoJmZiZGV2LT5jbGllbnQtPmRldiwgInVuYWJsZSB0byBtYXAgZGV2aWNlXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZmJkZXYtPm9wZW4gPSAxOworCWRtYV9kZXNjX2xpc3QoZmJkZXYsIEJVSUxEKTsKKwlhZHY3MzkzX21vZGUoZmJkZXYtPmNsaWVudCwgQkxBTktfT0ZGKTsKKwliZmluX2NvbmZpZ19wcGkoZmJkZXYpOworCWJmaW5fY29uZmlnX2RtYShmYmRldik7CisJYmZpbl9lbmFibGVfcHBpKCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBiZmluX2FkdjczOTNfZmJfcmVsZWFzZShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgaW50IHVzZXIpCit7CisJc3RydWN0IGFkdjczOTNmYl9kZXZpY2UgKmZiZGV2ID0gdG9fYWR2NzM5M2ZiX2RldmljZShpbmZvKTsKKworCWFkdjczOTNfbW9kZShmYmRldi0+Y2xpZW50LCBCTEFOS19PTik7CisJYmZpbl9kaXNhYmxlX2RtYSgpOworCWJmaW5fZGlzYWJsZV9wcGkoKTsKKwlkbWFfZGVzY19saXN0KGZiZGV2LCBERVNUUlVDVCk7CisJZmJkZXYtPm9wZW4gPSAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitiZmluX2FkdjczOTNfZmJfY2hlY2tfdmFyKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKworCXN3aXRjaCAodmFyLT5iaXRzX3Blcl9waXhlbCkgeworCWNhc2UgMTY6LyogRElSRUNUQ09MT1VSLCA2NGsgKi8KKwkJdmFyLT5yZWQub2Zmc2V0ID0gaW5mby0+dmFyLnJlZC5vZmZzZXQ7CisJCXZhci0+Z3JlZW4ub2Zmc2V0ID0gaW5mby0+dmFyLmdyZWVuLm9mZnNldDsKKwkJdmFyLT5ibHVlLm9mZnNldCA9IGluZm8tPnZhci5ibHVlLm9mZnNldDsKKwkJdmFyLT5yZWQubGVuZ3RoID0gaW5mby0+dmFyLnJlZC5sZW5ndGg7CisJCXZhci0+Z3JlZW4ubGVuZ3RoID0gaW5mby0+dmFyLmdyZWVuLmxlbmd0aDsKKwkJdmFyLT5ibHVlLmxlbmd0aCA9IGluZm8tPnZhci5ibHVlLmxlbmd0aDsKKwkJdmFyLT50cmFuc3Aub2Zmc2V0ID0gMDsKKwkJdmFyLT50cmFuc3AubGVuZ3RoID0gMDsKKwkJdmFyLT50cmFuc3AubXNiX3JpZ2h0ID0gMDsKKwkJdmFyLT5yZWQubXNiX3JpZ2h0ID0gMDsKKwkJdmFyLT5ncmVlbi5tc2JfcmlnaHQgPSAwOworCQl2YXItPmJsdWUubXNiX3JpZ2h0ID0gMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJfZGVidWcoIiVzOiBkZXB0aCBub3Qgc3VwcG9ydGVkOiAldSBCUFBcbiIsIF9fZnVuY19fLAorCQkJIHZhci0+Yml0c19wZXJfcGl4ZWwpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoaW5mby0+dmFyLnhyZXMgIT0gdmFyLT54cmVzIHx8CisJICAgIGluZm8tPnZhci55cmVzICE9IHZhci0+eXJlcyB8fAorCSAgICBpbmZvLT52YXIueHJlc192aXJ0dWFsICE9IHZhci0+eHJlc192aXJ0dWFsIHx8CisJICAgIGluZm8tPnZhci55cmVzX3ZpcnR1YWwgIT0gdmFyLT55cmVzX3ZpcnR1YWwpIHsKKwkJcHJfZGVidWcoIiVzOiBSZXNvbHV0aW9uIG5vdCBzdXBwb3J0ZWQ6IFgldSB4IFkldVxuIiwKKwkJCSBfX2Z1bmNfXywgdmFyLT54cmVzLCB2YXItPnlyZXMpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKgorCSAqICBNZW1vcnkgbGltaXQKKwkgKi8KKworCWlmICgoaW5mby0+Zml4LmxpbmVfbGVuZ3RoICogdmFyLT55cmVzX3ZpcnR1YWwpID4gaW5mby0+Zml4LnNtZW1fbGVuKSB7CisJCXByX2RlYnVnKCIlczogTWVtb3J5IExpbWl0IHJlcXVlc3RlZCB5cmVzX3ZpcnR1YWwgPSAldVxuIiwKKwkJCSBfX2Z1bmNfXywgdmFyLT55cmVzX3ZpcnR1YWwpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorYmZpbl9hZHY3MzkzX2ZiX3Bhbl9kaXNwbGF5KHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlpbnQgZHk7CisJdTMyIGRtYWFkZHI7CisJc3RydWN0IGFkdjczOTNmYl9kZXZpY2UgKmZiZGV2ID0gdG9fYWR2NzM5M2ZiX2RldmljZShpbmZvKTsKKworCWlmICghdmFyIHx8ICFpbmZvKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh2YXItPnhvZmZzZXQgLSBpbmZvLT52YXIueG9mZnNldCkgeworCQkvKiBObyBzdXBwb3J0IGZvciBYIHBhbm5pbmcgZm9yIG5vdyEgKi8KKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWR5ID0gdmFyLT55b2Zmc2V0IC0gaW5mby0+dmFyLnlvZmZzZXQ7CisKKwlpZiAoZHkpIHsKKwkJcHJfZGVidWcoIiVzOiBQYW5uaW5nIHNjcmVlbiBvZiAlZCBsaW5lc1xuIiwgX19mdW5jX18sIGR5KTsKKworCQlkbWFhZGRyID0gZmJkZXYtPmF2MS0+c3RhcnRfYWRkcjsKKwkJZG1hYWRkciArPSAoaW5mby0+Zml4LmxpbmVfbGVuZ3RoICogZHkpOworCQkvKiBUT0RPOiBXYWl0IGZvciBjdXJyZW50IGZyYW1lIHRvIGZpbmlzaGVkICovCisKKwkJZmJkZXYtPmF2MS0+c3RhcnRfYWRkciA9ICh1bnNpZ25lZCBsb25nKWRtYWFkZHI7CisJCWZiZGV2LT5hdjItPnN0YXJ0X2FkZHIgPSAodW5zaWduZWQgbG9uZylkbWFhZGRyICsgZmJkZXYtPmxpbmVfbGVuOworCX0KKworCXJldHVybiAwOworCit9CisKKy8qIDAgdW5ibGFuaywgMSBibGFuaywgMiBubyB2c3luYywgMyBubyBoc3luYywgNCBvZmYgKi8KK3N0YXRpYyBpbnQgYmZpbl9hZHY3MzkzX2ZiX2JsYW5rKGludCBibGFuaywgc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJc3RydWN0IGFkdjczOTNmYl9kZXZpY2UgKmZiZGV2ID0gdG9fYWR2NzM5M2ZiX2RldmljZShpbmZvKTsKKworCXN3aXRjaCAoYmxhbmspIHsKKworCWNhc2UgVkVTQV9OT19CTEFOS0lORzoKKwkJLyogVHVybiBvbiBwYW5lbCAqLworCQlhZHY3MzkzX21vZGUoZmJkZXYtPmNsaWVudCwgQkxBTktfT0ZGKTsKKwkJYnJlYWs7CisKKwljYXNlIFZFU0FfVlNZTkNfU1VTUEVORDoKKwljYXNlIFZFU0FfSFNZTkNfU1VTUEVORDoKKwljYXNlIFZFU0FfUE9XRVJET1dOOgorCQkvKiBUdXJuIG9mZiBwYW5lbCAqLworCQlhZHY3MzkzX21vZGUoZmJkZXYtPmNsaWVudCwgQkxBTktfT04pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCBiZmluX2FkdjczOTNfZmJfY3Vyc29yKHN0cnVjdCBmYl9pbmZvICppbmZvLCBzdHJ1Y3QgZmJfY3Vyc29yICpjdXJzb3IpCit7CisJaWYgKG5vY3Vyc29yKQorCQlyZXR1cm4gMDsKKwllbHNlCisJCXJldHVybiAtRUlOVkFMOwkvKiBqdXN0IHRvIGZvcmNlIHNvZnRfY3Vyc29yKCkgY2FsbCAqLworfQorCitzdGF0aWMgaW50IGJmaW5fYWR2NzM5M19mYl9zZXRjb2xyZWcodV9pbnQgcmVnbm8sIHVfaW50IHJlZCwgdV9pbnQgZ3JlZW4sCisJCQkJICAgICB1X2ludCBibHVlLCB1X2ludCB0cmFuc3AsCisJCQkJICAgICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlpZiAocmVnbm8gPj0gQkZJTl9MQ0RfTkJSX1BBTEVUVEVfRU5UUklFUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoaW5mby0+dmFyLmdyYXlzY2FsZSkKKwkJLyogZ3JheXNjYWxlID0gMC4zMCpSICsgMC41OSpHICsgMC4xMSpCICovCisJCXJlZCA9IGdyZWVuID0gYmx1ZSA9IChyZWQgKiA3NyArIGdyZWVuICogMTUxICsgYmx1ZSAqIDI4KSA+PiA4OworCisJaWYgKGluZm8tPmZpeC52aXN1YWwgPT0gRkJfVklTVUFMX1RSVUVDT0xPUikgeworCQl1MzIgdmFsdWU7CisJCS8qIFBsYWNlIGNvbG9yIGluIHRoZSBwc2V1ZG9wYWxldHRlICovCisJCWlmIChyZWdubyA+IDE2KQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJcmVkICAgPj49ICgxNiAtIGluZm8tPnZhci5yZWQubGVuZ3RoKTsKKwkJZ3JlZW4gPj49ICgxNiAtIGluZm8tPnZhci5ncmVlbi5sZW5ndGgpOworCQlibHVlICA+Pj0gKDE2IC0gaW5mby0+dmFyLmJsdWUubGVuZ3RoKTsKKworCQl2YWx1ZSA9IChyZWQgICA8PCBpbmZvLT52YXIucmVkLm9mZnNldCkgfAorCQkJKGdyZWVuIDw8IGluZm8tPnZhci5ncmVlbi5vZmZzZXQpfAorCQkJKGJsdWUgIDw8IGluZm8tPnZhci5ibHVlLm9mZnNldCk7CisJCXZhbHVlICY9IDB4RkZGRjsKKworCQkoKHUzMiAqKSAoaW5mby0+cHNldWRvX3BhbGV0dGUpKVtyZWdub10gPSB2YWx1ZTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgYmZpbl9hZHY3MzkzX2ZiX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBhZHY3MzkzZmJfZGV2aWNlICpmYmRldiA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJYWR2NzM5M19tb2RlKGNsaWVudCwgUE9XRVJfRE9XTik7CisKKwlpZiAoZmJkZXYtPmZiX21lbSkKKwkJZG1hX2ZyZWVfY29oZXJlbnQoTlVMTCwgZmJkZXYtPmZiX2xlbiwgZmJkZXYtPmZiX21lbSwgZmJkZXYtPmRtYV9oYW5kbGUpOworCWZyZWVfZG1hKENIX1BQSSk7CisJZnJlZV9pcnEoSVJRX1BQSV9FUlJPUiwgZmJkZXYpOworCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIoJmZiZGV2LT5pbmZvKTsKKwlyZW1vdmVfcHJvY19lbnRyeSgiZHJpdmVyL2FkdjczOTMiLCBOVUxMKTsKKwlmYl9kZWFsbG9jX2NtYXAoJmZiZGV2LT5pbmZvLmNtYXApOworCWtmcmVlKGZiZGV2LT5pbmZvLnBzZXVkb19wYWxldHRlKTsKKworCWlmIChBTk9NQUxZXzA1MDAwNDAwKQorCQlncGlvX2ZyZWUoUF9JREVOVChQX1BQSTBfRlMzKSk7CS8qIEZTMyAqLworCXBlcmlwaGVyYWxfZnJlZV9saXN0KHBwaV9waW5zKTsKKwlrZnJlZShmYmRldik7CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBiZmluX2FkdjczOTNfZmJfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGFkdjczOTNmYl9kZXZpY2UgKmZiZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAoZmJkZXYtPm9wZW4pIHsKKwkJYmZpbl9kaXNhYmxlX2RtYSgpOworCQliZmluX2Rpc2FibGVfcHBpKCk7CisJCWRtYV9kZXNjX2xpc3QoZmJkZXYsIERFU1RSVUNUKTsKKwl9CisJYWR2NzM5M19tb2RlKGZiZGV2LT5jbGllbnQsIFBPV0VSX0RPV04pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYmZpbl9hZHY3MzkzX2ZiX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGFkdjczOTNmYl9kZXZpY2UgKmZiZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlhZHY3MzkzX21vZGUoZmJkZXYtPmNsaWVudCwgUE9XRVJfT04pOworCisJaWYgKGZiZGV2LT5vcGVuKSB7CisJCWRtYV9kZXNjX2xpc3QoZmJkZXYsIEJVSUxEKTsKKwkJYmZpbl9jb25maWdfcHBpKGZiZGV2KTsKKwkJYmZpbl9jb25maWdfZG1hKGZiZGV2KTsKKwkJYmZpbl9lbmFibGVfcHBpKCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBiZmluX2FkdjczOTNfZGV2X3BtX29wcyA9IHsKKwkuc3VzcGVuZCA9IGJmaW5fYWR2NzM5M19mYl9zdXNwZW5kLAorCS5yZXN1bWUgID0gYmZpbl9hZHY3MzkzX2ZiX3Jlc3VtZSwKK307CisjZW5kaWYKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGJmaW5fYWR2NzM5M19pZFtdID0geworCXtEUklWRVJfTkFNRSwgMH0sCisJe30KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBiZmluX2FkdjczOTNfaWQpOworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgYmZpbl9hZHY3MzkzX2ZiX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9IERSSVZFUl9OQU1FLAorI2lmZGVmIENPTkZJR19QTQorCQkucG0gICA9ICZiZmluX2FkdjczOTNfZGV2X3BtX29wcywKKyNlbmRpZgorCX0sCisJLnByb2JlID0gYmZpbl9hZHY3MzkzX2ZiX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChiZmluX2FkdjczOTNfZmJfcmVtb3ZlKSwKKwkuaWRfdGFibGUgPSBiZmluX2FkdjczOTNfaWQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBiZmluX2FkdjczOTNfZmJfZHJpdmVyX2luaXQodm9pZCkKK3sKKyNpZiAgZGVmaW5lZChDT05GSUdfSTJDX0JMQUNLRklOX1RXSSkgfHwgZGVmaW5lZChDT05GSUdfSTJDX0JMQUNLRklOX1RXSV9NT0RVTEUpCisJcmVxdWVzdF9tb2R1bGUoImkyYy1iZmluLXR3aSIpOworI2Vsc2UKKwlyZXF1ZXN0X21vZHVsZSgiaTJjLWdwaW8iKTsKKyNlbmRpZgorCisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZiZmluX2FkdjczOTNfZmJfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KGJmaW5fYWR2NzM5M19mYl9kcml2ZXJfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBiZmluX2FkdjczOTNfZmJfZHJpdmVyX2NsZWFudXAodm9pZCkKK3sKKwlpMmNfZGVsX2RyaXZlcigmYmZpbl9hZHY3MzkzX2ZiX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChiZmluX2FkdjczOTNfZmJfZHJpdmVyX2NsZWFudXApOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJNaWNoYWVsIEhlbm5lcmljaCA8aGVubmVyaWNoQGJsYWNrZmluLnVjbGludXgub3JnPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJGcmFtZSBidWZmZXIgZHJpdmVyIGZvciBBRFY3MzkzLzIgVmlkZW8gRW5jb2RlciIpOworCittb2R1bGVfcGFyYW0obW9kZSwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MobW9kZSwKKwkiVmlkZW8gTW9kZSAoMD1OVFNDLDE9UEFMLDI9TlRTQyA2NDB4NDgwLDM9UEFMIDY0MHg0ODAsND1OVFNDIFlDYkNyIGlucHV0LDU9UEFMIFlDYkNyIGlucHV0KSIpOworCittb2R1bGVfcGFyYW0obWVtLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhtZW0sCisJIlNpemUgb2YgZnJhbWUgYnVmZmVyIG1lbW9yeSAxPVNpbmdsZSAyPURvdWJsZSBTaXplIChhbGxvd3MgeS1wYW5uaW5nIC8gZnJhbWUgc3RhY2tpbmcpIik7CisKK21vZHVsZV9wYXJhbShub2N1cnNvciwgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0Mobm9jdXJzb3IsICJjdXJzb3IgZW5hYmxlL2Rpc2FibGUiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmZpbl9hZHY3MzkzZmIuaCBiL2RyaXZlcnMvdmlkZW8vYmZpbl9hZHY3MzkzZmIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzdmOWU0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby9iZmluX2FkdjczOTNmYi5oCkBAIC0wLDAgKzEsMzIxIEBACisvKgorICogRnJhbWUgYnVmZmVyIGRyaXZlciBmb3IgQURWNzM5My8yIHZpZGVvIGVuY29kZXIKKyAqCisgKiBDb3B5cmlnaHQgMjAwNi0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlLgorICovCisKKyNpZm5kZWYgX19CRklOX0FEVjczOTNGQl9IX18KKyNkZWZpbmUgX19CRklOX0FEVjczOTNGQl9IX18KKworI2RlZmluZSBCRklOX0xDRF9OQlJfUEFMRVRURV9FTlRSSUVTCTI1NgorCisjaWZkZWYgQ09ORklHX05UU0MKKyMgZGVmaW5lIFZNT0RFIDAKKyNlbmRpZgorI2lmZGVmIENPTkZJR19QQUwKKyMgZGVmaW5lIFZNT0RFIDEKKyNlbmRpZgorI2lmZGVmIENPTkZJR19OVFNDXzY0MHg0ODAKKyMgZGVmaW5lIFZNT0RFIDIKKyNlbmRpZgorI2lmZGVmIENPTkZJR19QQUxfNjQweDQ4MAorIyBkZWZpbmUgVk1PREUgMworI2VuZGlmCisjaWZkZWYgQ09ORklHX05UU0NfWUNCQ1IKKyMgZGVmaW5lIFZNT0RFIDQKKyNlbmRpZgorI2lmZGVmIENPTkZJR19QQUxfWUNCQ1IKKyMgZGVmaW5lIFZNT0RFIDUKKyNlbmRpZgorCisjaWZuZGVmIFZNT0RFCisjIGRlZmluZSBWTU9ERSAxCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19BRFY3MzkzXzJYTUVNCisjIGRlZmluZSBWTUVNIDIKKyNlbHNlCisjIGRlZmluZSBWTUVNIDEKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfQkY1MzcpIHx8IGRlZmluZWQoQ09ORklHX0JGNTM2KSB8fCBkZWZpbmVkKENPTkZJR19CRjUzNCkKKyMgZGVmaW5lIERNQV9DRkdfVkFMCTB4NzkzNQkvKiBTZXQgU3luYyBCaXQgKi8KKyMgZGVmaW5lIFZCX0RVTU1ZX01FTU9SWV9TT1VSQ0UJTDFfREFUQV9CX1NUQVJUCisjZWxzZQorIyBkZWZpbmUgRE1BX0NGR19WQUwJMHg3OTE1CisjIGRlZmluZSBWQl9EVU1NWV9NRU1PUllfU09VUkNFCUJPT1RfUk9NX1NUQVJUCisjZW5kaWYKKworZW51bSB7CisJREVTVFJVQ1QsCisJQlVJTEQsCit9OworCitlbnVtIHsKKwlQT1dFUl9PTiwKKwlQT1dFUl9ET1dOLAorCUJMQU5LX09OLAorCUJMQU5LX09GRiwKK307CisKKyNkZWZpbmUgRFJJVkVSX05BTUUgImJmaW4tYWR2NzM5MyIKKworc3RydWN0IGFkdjczOTNmYl9tb2RlcyB7CisJY29uc3QgczggbmFtZVsyNV07CS8qIEZ1bGwgbmFtZSAqLworCXUxNiB4cmVzOwkJLyogQWN0aXZlIEhvcml6b256YWwgUGl4ZWxzICAqLworCXUxNiB5cmVzOwkJLyogQWN0aXZlIFZlcnRpY2FsIFBpeGVscyAgKi8KKwl1MTYgYnBwOworCXUxNiB2bW9kZTsKKwl1MTYgYV9saW5lczsJCS8qIEFjdGl2ZSBMaW5lcyBwZXIgRmllbGQgKi8KKwl1MTYgdmIxX2xpbmVzOwkJLyogVmVydGljYWwgQmxhbmtpbmcgRmllbGQgMSBMaW5lcyAqLworCXUxNiB2YjJfbGluZXM7CQkvKiBWZXJ0aWNhbCBCbGFua2luZyBGaWVsZCAyIExpbmVzICovCisJdTE2IHRvdF9saW5lczsJCS8qIFRvdGFsIExpbmVzIHBlciBGcmFtZSAqLworCXUxNiBib2VmdF9ibGFuazsJLyogQmVmb3JlIE9kZC9FdmVuIEZpZWxkIFRyYW5zaXRpb24gTm8uIG9mIEJsYW5rIFBpeGVscyAqLworCXUxNiBhb2VmdF9ibGFuazsJLyogQWZ0ZXIgT2RkL0V2ZW4gRmllbGQgVHJhbnNpdGlvbiBOby4gb2YgQmxhbmsgUGl4ZWxzICovCisJY29uc3QgczggKmFkdjczOTNfaTJjX2luaXRkOworCXUxNiBhZHY3MzkzX2kyY19pbml0ZF9sZW47Cit9OworCitzdGF0aWMgY29uc3QgdTggaW5pdF9OVFNDX1RFU1RQQVRURVJOW10gPSB7CisJMHgwMCwgMHgxRSwJLyogUG93ZXIgdXAgYWxsIERBQ3MgYW5kIFBMTCAqLworCTB4MDEsIDB4MDAsCS8qIFNELU9ubHkgTW9kZSAqLworCTB4ODAsIDB4MTAsCS8qIFNTQUYgTHVtYSBGaWx0ZXIgRW5hYmxlZCwgTlRTQyBNb2RlICovCisJMHg4MiwgMHhDQiwJLyogU3RlcCBjb250cm9sIG9uLCBwaXhlbCBkYXRhIHZhbGlkLCBwZWRlc3RhbCBvbiwgUHJQYiBTU0FGIG9uLCBDVkJTL1lDIG91dHB1dCAqLworCTB4ODQsIDB4NDAsCS8qIFNEIENvbG9yIEJhciBUZXN0IFBhdHRlcm4gRW5hYmxlZCwgREFDIDIgPSBMdW1hLCBEQUMgMyA9IENocm9tYSAqLworfTsKKworc3RhdGljIGNvbnN0IHU4IGluaXRfTlRTQ1tdID0geworCTB4MDAsIDB4MUUsCS8qIFBvd2VyIHVwIGFsbCBEQUNzIGFuZCBQTEwgKi8KKwkweEMzLCAweDI2LAkvKiBQcm9ncmFtIFJHQi0+WUNyQ2IgQ29sb3IgU3BhY2UgY29udmVydGlvbiBtYXRyaXggKi8KKwkweEM1LCAweDEyLAkvKiBQcm9ncmFtIFJHQi0+WUNyQ2IgQ29sb3IgU3BhY2UgY29udmVydGlvbiBtYXRyaXggKi8KKwkweEMyLCAweDRBLAkvKiBQcm9ncmFtIFJHQi0+WUNyQ2IgQ29sb3IgU3BhY2UgY29udmVydGlvbiBtYXRyaXggKi8KKwkweEM2LCAweDVFLAkvKiBQcm9ncmFtIFJHQi0+WUNyQ2IgQ29sb3IgU3BhY2UgY29udmVydGlvbiBtYXRyaXggKi8KKwkweEJELCAweDE5LAkvKiBQcm9ncmFtIFJHQi0+WUNyQ2IgQ29sb3IgU3BhY2UgY29udmVydGlvbiBtYXRyaXggKi8KKwkweEJGLCAweDQyLAkvKiBQcm9ncmFtIFJHQi0+WUNyQ2IgQ29sb3IgU3BhY2UgY29udmVydGlvbiBtYXRyaXggKi8KKwkweDhDLCAweDFGLAkvKiBOVFNDIFN1YmNhcnJpZXIgRnJlcXVlbmN5ICovCisJMHg4RCwgMHg3QywJLyogTlRTQyBTdWJjYXJyaWVyIEZyZXF1ZW5jeSAqLworCTB4OEUsIDB4RjAsCS8qIE5UU0MgU3ViY2FycmllciBGcmVxdWVuY3kgKi8KKwkweDhGLCAweDIxLAkvKiBOVFNDIFN1YmNhcnJpZXIgRnJlcXVlbmN5ICovCisJMHgwMSwgMHgwMCwJLyogU0QtT25seSBNb2RlICovCisJMHg4MCwgMHgzMCwJLyogU1NBRiBMdW1hIEZpbHRlciBFbmFibGVkLCBOVFNDIE1vZGUgKi8KKwkweDgyLCAweDhCLAkvKiBTdGVwIGNvbnRyb2wgb24sIHBpeGVsIGRhdGEgaW52YWxpZCwgcGVkZXN0YWwgb24sIFByUGIgU1NBRiBvbiwgQ1ZCUy9ZQyBvdXRwdXQgKi8KKwkweDg3LCAweDgwLAkvKiBTRCBDb2xvciBCYXIgVGVzdCBQYXR0ZXJuIEVuYWJsZWQsIERBQyAyID0gTHVtYSwgREFDIDMgPSBDaHJvbWEgKi8KKwkweDg2LCAweDgyLAorCTB4OEIsIDB4MTEsCisJMHg4OCwgMHgyMCwKKwkweDhBLCAweDBkLAorfTsKKworc3RhdGljIGNvbnN0IHU4IGluaXRfUEFMW10gPSB7CisJMHgwMCwgMHgxRSwJLyogUG93ZXIgdXAgYWxsIERBQ3MgYW5kIFBMTCAqLworCTB4QzMsIDB4MjYsCS8qIFByb2dyYW0gUkdCLT5ZQ3JDYiBDb2xvciBTcGFjZSBjb252ZXJ0aW9uIG1hdHJpeCAqLworCTB4QzUsIDB4MTIsCS8qIFByb2dyYW0gUkdCLT5ZQ3JDYiBDb2xvciBTcGFjZSBjb252ZXJ0aW9uIG1hdHJpeCAqLworCTB4QzIsIDB4NEEsCS8qIFByb2dyYW0gUkdCLT5ZQ3JDYiBDb2xvciBTcGFjZSBjb252ZXJ0aW9uIG1hdHJpeCAqLworCTB4QzYsIDB4NUUsCS8qIFByb2dyYW0gUkdCLT5ZQ3JDYiBDb2xvciBTcGFjZSBjb252ZXJ0aW9uIG1hdHJpeCAqLworCTB4QkQsIDB4MTksCS8qIFByb2dyYW0gUkdCLT5ZQ3JDYiBDb2xvciBTcGFjZSBjb252ZXJ0aW9uIG1hdHJpeCAqLworCTB4QkYsIDB4NDIsCS8qIFByb2dyYW0gUkdCLT5ZQ3JDYiBDb2xvciBTcGFjZSBjb252ZXJ0aW9uIG1hdHJpeCAqLworCTB4OEMsIDB4Q0IsCS8qIFBBTCBTdWJjYXJyaWVyIEZyZXF1ZW5jeSAqLworCTB4OEQsIDB4OEEsCS8qIFBBTCBTdWJjYXJyaWVyIEZyZXF1ZW5jeSAqLworCTB4OEUsIDB4MDksCS8qIFBBTCBTdWJjYXJyaWVyIEZyZXF1ZW5jeSAqLworCTB4OEYsIDB4MkEsCS8qIFBBTCBTdWJjYXJyaWVyIEZyZXF1ZW5jeSAqLworCTB4MDEsIDB4MDAsCS8qIFNELU9ubHkgTW9kZSAqLworCTB4ODAsIDB4MTEsCS8qIFNTQUYgTHVtYSBGaWx0ZXIgRW5hYmxlZCwgUEFMIE1vZGUgKi8KKwkweDgyLCAweDhCLAkvKiBTdGVwIGNvbnRyb2wgb24sIHBpeGVsIGRhdGEgaW52YWxpZCwgcGVkZXN0YWwgb24sIFByUGIgU1NBRiBvbiwgQ1ZCUy9ZQyBvdXRwdXQgKi8KKwkweDg3LCAweDgwLAkvKiBTRCBDb2xvciBCYXIgVGVzdCBQYXR0ZXJuIEVuYWJsZWQsIERBQyAyID0gTHVtYSwgREFDIDMgPSBDaHJvbWEgKi8KKwkweDg2LCAweDgyLAorCTB4OEIsIDB4MTEsCisJMHg4OCwgMHgyMCwKKwkweDhBLCAweDBkLAorfTsKKworc3RhdGljIGNvbnN0IHU4IGluaXRfTlRTQ19ZQ2JDcltdID0geworCTB4MDAsIDB4MUUsCS8qIFBvd2VyIHVwIGFsbCBEQUNzIGFuZCBQTEwgKi8KKwkweDhDLCAweDFGLAkvKiBOVFNDIFN1YmNhcnJpZXIgRnJlcXVlbmN5ICovCisJMHg4RCwgMHg3QywJLyogTlRTQyBTdWJjYXJyaWVyIEZyZXF1ZW5jeSAqLworCTB4OEUsIDB4RjAsCS8qIE5UU0MgU3ViY2FycmllciBGcmVxdWVuY3kgKi8KKwkweDhGLCAweDIxLAkvKiBOVFNDIFN1YmNhcnJpZXIgRnJlcXVlbmN5ICovCisJMHgwMSwgMHgwMCwJLyogU0QtT25seSBNb2RlICovCisJMHg4MCwgMHgzMCwJLyogU1NBRiBMdW1hIEZpbHRlciBFbmFibGVkLCBOVFNDIE1vZGUgKi8KKwkweDgyLCAweDhCLAkvKiBTdGVwIGNvbnRyb2wgb24sIHBpeGVsIGRhdGEgaW52YWxpZCwgcGVkZXN0YWwgb24sIFByUGIgU1NBRiBvbiwgQ1ZCUy9ZQyBvdXRwdXQgKi8KKwkweDg3LCAweDAwLAkvKiBEQUMgMiA9IEx1bWEsIERBQyAzID0gQ2hyb21hICovCisJMHg4NiwgMHg4MiwKKwkweDhCLCAweDExLAorCTB4ODgsIDB4MDgsCisJMHg4QSwgMHgwZCwKK307CisKK3N0YXRpYyBjb25zdCB1OCBpbml0X1BBTF9ZQ2JDcltdID0geworCTB4MDAsIDB4MUUsCS8qIFBvd2VyIHVwIGFsbCBEQUNzIGFuZCBQTEwgKi8KKwkweDhDLCAweENCLAkvKiBQQUwgU3ViY2FycmllciBGcmVxdWVuY3kgKi8KKwkweDhELCAweDhBLAkvKiBQQUwgU3ViY2FycmllciBGcmVxdWVuY3kgKi8KKwkweDhFLCAweDA5LAkvKiBQQUwgU3ViY2FycmllciBGcmVxdWVuY3kgKi8KKwkweDhGLCAweDJBLAkvKiBQQUwgU3ViY2FycmllciBGcmVxdWVuY3kgKi8KKwkweDAxLCAweDAwLAkvKiBTRC1Pbmx5IE1vZGUgKi8KKwkweDgwLCAweDExLAkvKiBTU0FGIEx1bWEgRmlsdGVyIEVuYWJsZWQsIFBBTCBNb2RlICovCisJMHg4MiwgMHg4QiwJLyogU3RlcCBjb250cm9sIG9uLCBwaXhlbCBkYXRhIGludmFsaWQsIHBlZGVzdGFsIG9uLCBQclBiIFNTQUYgb24sIENWQlMvWUMgb3V0cHV0ICovCisJMHg4NywgMHgwMCwJLyogREFDIDIgPSBMdW1hLCBEQUMgMyA9IENocm9tYSAqLworCTB4ODYsIDB4ODIsCisJMHg4QiwgMHgxMSwKKwkweDg4LCAweDA4LAorCTB4OEEsIDB4MGQsCit9OworCitzdGF0aWMgc3RydWN0IGFkdjczOTNmYl9tb2RlcyBrbm93bl9tb2Rlc1tdID0geworCS8qIE5UU0MgNzIweDQ4MCBDUlQgKi8KKwl7CisJCS5uYW1lID0gIk5UU0MgNzIweDQ4MCIsCisJCS54cmVzID0gNzIwLAorCQkueXJlcyA9IDQ4MCwKKwkJLmJwcCA9IDE2LAorCQkudm1vZGUgPSBGQl9WTU9ERV9JTlRFUkxBQ0VELAorCQkuYV9saW5lcyA9IDI0MCwKKwkJLnZiMV9saW5lcyA9IDIyLAorCQkudmIyX2xpbmVzID0gMjMsCisJCS50b3RfbGluZXMgPSA1MjUsCisJCS5ib2VmdF9ibGFuayA9IDE2LAorCQkuYW9lZnRfYmxhbmsgPSAxMjIsCisJCS5hZHY3MzkzX2kyY19pbml0ZCA9IGluaXRfTlRTQywKKwkJLmFkdjczOTNfaTJjX2luaXRkX2xlbiA9IHNpemVvZihpbml0X05UU0MpCisJfSwKKwkvKiBQQUwgNzIweDQ4MCBDUlQgKi8KKwl7CisJCS5uYW1lID0gIlBBTCA3MjB4NTc2IiwKKwkJLnhyZXMgPSA3MjAsCisJCS55cmVzID0gNTc2LAorCQkuYnBwID0gMTYsCisJCS52bW9kZSA9IEZCX1ZNT0RFX0lOVEVSTEFDRUQsCisJCS5hX2xpbmVzID0gMjg4LAorCQkudmIxX2xpbmVzID0gMjQsCisJCS52YjJfbGluZXMgPSAyNSwKKwkJLnRvdF9saW5lcyA9IDYyNSwKKwkJLmJvZWZ0X2JsYW5rID0gMTIsCisJCS5hb2VmdF9ibGFuayA9IDEzMiwKKwkJLmFkdjczOTNfaTJjX2luaXRkID0gaW5pdF9QQUwsCisJCS5hZHY3MzkzX2kyY19pbml0ZF9sZW4gPSBzaXplb2YoaW5pdF9QQUwpCisJfSwKKwkvKiBOVFNDIDY0MHg0ODAgQ1JUIEV4cGVyaW1lbnRhbCAqLworCXsKKwkJLm5hbWUgPSAiTlRTQyA2NDB4NDgwIiwKKwkJLnhyZXMgPSA2NDAsCisJCS55cmVzID0gNDgwLAorCQkuYnBwID0gMTYsCisJCS52bW9kZSA9IEZCX1ZNT0RFX0lOVEVSTEFDRUQsCisJCS5hX2xpbmVzID0gMjQwLAorCQkudmIxX2xpbmVzID0gMjIsCisJCS52YjJfbGluZXMgPSAyMywKKwkJLnRvdF9saW5lcyA9IDUyNSwKKwkJLmJvZWZ0X2JsYW5rID0gMTYgKyA0MCwKKwkJLmFvZWZ0X2JsYW5rID0gMTIyICsgNDAsCisJCS5hZHY3MzkzX2kyY19pbml0ZCA9IGluaXRfTlRTQywKKwkJLmFkdjczOTNfaTJjX2luaXRkX2xlbiA9IHNpemVvZihpbml0X05UU0MpCisJfSwKKwkvKiBQQUwgNjQweDQ4MCBDUlQgRXhwZXJpbWVudGFsICovCisJeworCQkubmFtZSA9ICJQQUwgNjQweDQ4MCIsCisJCS54cmVzID0gNjQwLAorCQkueXJlcyA9IDQ4MCwKKwkJLmJwcCA9IDE2LAorCQkudm1vZGUgPSBGQl9WTU9ERV9JTlRFUkxBQ0VELAorCQkuYV9saW5lcyA9IDI4OCAtIDIwLAorCQkudmIxX2xpbmVzID0gMjQgKyAyMCwKKwkJLnZiMl9saW5lcyA9IDI1ICsgMjAsCisJCS50b3RfbGluZXMgPSA2MjUsCisJCS5ib2VmdF9ibGFuayA9IDEyICsgNDAsCisJCS5hb2VmdF9ibGFuayA9IDEzMiArIDQwLAorCQkuYWR2NzM5M19pMmNfaW5pdGQgPSBpbml0X1BBTCwKKwkJLmFkdjczOTNfaTJjX2luaXRkX2xlbiA9IHNpemVvZihpbml0X1BBTCkKKwl9LAorCS8qIE5UU0MgNzIweDQ4MCBZQ2JDUiAqLworCXsKKwkJLm5hbWUgPSAiTlRTQyA3MjB4NDgwIFlDYkNSIiwKKwkJLnhyZXMgPSA3MjAsCisJCS55cmVzID0gNDgwLAorCQkuYnBwID0gMTYsCisJCS52bW9kZSA9IEZCX1ZNT0RFX0lOVEVSTEFDRUQsCisJCS5hX2xpbmVzID0gMjQwLAorCQkudmIxX2xpbmVzID0gMjIsCisJCS52YjJfbGluZXMgPSAyMywKKwkJLnRvdF9saW5lcyA9IDUyNSwKKwkJLmJvZWZ0X2JsYW5rID0gMTYsCisJCS5hb2VmdF9ibGFuayA9IDEyMiwKKwkJLmFkdjczOTNfaTJjX2luaXRkID0gaW5pdF9OVFNDX1lDYkNyLAorCQkuYWR2NzM5M19pMmNfaW5pdGRfbGVuID0gc2l6ZW9mKGluaXRfTlRTQ19ZQ2JDcikKKwl9LAorCS8qIFBBTCA3MjB4NDgwIENSVCAqLworCXsKKwkJLm5hbWUgPSAiUEFMIDcyMHg1NzYgWUNiQ1IiLAorCQkueHJlcyA9IDcyMCwKKwkJLnlyZXMgPSA1NzYsCisJCS5icHAgPSAxNiwKKwkJLnZtb2RlID0gRkJfVk1PREVfSU5URVJMQUNFRCwKKwkJLmFfbGluZXMgPSAyODgsCisJCS52YjFfbGluZXMgPSAyNCwKKwkJLnZiMl9saW5lcyA9IDI1LAorCQkudG90X2xpbmVzID0gNjI1LAorCQkuYm9lZnRfYmxhbmsgPSAxMiwKKwkJLmFvZWZ0X2JsYW5rID0gMTMyLAorCQkuYWR2NzM5M19pMmNfaW5pdGQgPSBpbml0X1BBTF9ZQ2JDciwKKwkJLmFkdjczOTNfaTJjX2luaXRkX2xlbiA9IHNpemVvZihpbml0X1BBTF9ZQ2JDcikKKwl9Cit9OworCitzdHJ1Y3QgYWR2NzM5M2ZiX3JlZ3MgeworCit9OworCitzdHJ1Y3QgYWR2NzM5M2ZiX2RldmljZSB7CisJc3RydWN0IGZiX2luZm8gaW5mbzsJLyogRkIgZHJpdmVyIGluZm8gcmVjb3JkICovCisKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCisJc3RydWN0IGRtYXNnICpkZXNjcmlwdG9yX2xpc3RfaGVhZDsKKwlzdHJ1Y3QgZG1hc2cgKnZiMTsKKwlzdHJ1Y3QgZG1hc2cgKmF2MTsKKwlzdHJ1Y3QgZG1hc2cgKnZiMjsKKwlzdHJ1Y3QgZG1hc2cgKmF2MjsKKworCWRtYV9hZGRyX3QgZG1hX2hhbmRsZTsKKworCXN0cnVjdCBmYl9pbmZvIGJmaW5fYWR2NzM5M19mYjsKKworCXN0cnVjdCBhZHY3MzkzZmJfbW9kZXMgKm1vZGVzOworCisJc3RydWN0IGFkdjczOTNmYl9yZWdzICpyZWdzOwkvKiBSZWdpc3RlcnMgbWVtb3J5IG1hcCAqLworCXNpemVfdCByZWdzX2xlbjsKKwlzaXplX3QgZmJfbGVuOworCXNpemVfdCBsaW5lX2xlbjsKKwl1MTYgb3BlbjsKKwl1MTYgKmZiX21lbTsJCS8qIFJHQiBCdWZmZXIgKi8KKworfTsKKworI2RlZmluZSB0b19hZHY3MzkzZmJfZGV2aWNlKF9pbmZvKSBcCisJICAoX2luZm8gPyBjb250YWluZXJfb2YoX2luZm8sIHN0cnVjdCBhZHY3MzkzZmJfZGV2aWNlLCBpbmZvKSA6IE5VTEwpOworCitzdGF0aWMgaW50IGJmaW5fYWR2NzM5M19mYl9vcGVuKHN0cnVjdCBmYl9pbmZvICppbmZvLCBpbnQgdXNlcik7CitzdGF0aWMgaW50IGJmaW5fYWR2NzM5M19mYl9yZWxlYXNlKHN0cnVjdCBmYl9pbmZvICppbmZvLCBpbnQgdXNlcik7CitzdGF0aWMgaW50IGJmaW5fYWR2NzM5M19mYl9jaGVja192YXIoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsCisJCQkJICAgICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7CisKK3N0YXRpYyBpbnQgYmZpbl9hZHY3MzkzX2ZiX3Bhbl9kaXNwbGF5KHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAorCQkJCSAgICAgICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7CisKK3N0YXRpYyBpbnQgYmZpbl9hZHY3MzkzX2ZiX2JsYW5rKGludCBibGFuaywgc3RydWN0IGZiX2luZm8gKmluZm8pOworCitzdGF0aWMgdm9pZCBiZmluX2NvbmZpZ19wcGkoc3RydWN0IGFkdjczOTNmYl9kZXZpY2UgKmZiZGV2KTsKK3N0YXRpYyBpbnQgYmZpbl9jb25maWdfZG1hKHN0cnVjdCBhZHY3MzkzZmJfZGV2aWNlICpmYmRldik7CitzdGF0aWMgdm9pZCBiZmluX2Rpc2FibGVfZG1hKHZvaWQpOworc3RhdGljIHZvaWQgYmZpbl9lbmFibGVfcHBpKHZvaWQpOworc3RhdGljIHZvaWQgYmZpbl9kaXNhYmxlX3BwaSh2b2lkKTsKKworc3RhdGljIGlubGluZSBpbnQgYWR2NzM5M193cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHU4IHZhbHVlKTsKK3N0YXRpYyBpbmxpbmUgaW50IGFkdjczOTNfcmVhZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcpOworc3RhdGljIGludCBhZHY3MzkzX3dyaXRlX2Jsb2NrKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGNvbnN0IHU4ICpkYXRhLAorCQkJICAgICAgIHVuc2lnbmVkIGludCBsZW4pOworCitpbnQgYmZpbl9hZHY3MzkzX2ZiX2N1cnNvcihzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IGZiX2N1cnNvciAqY3Vyc29yKTsKK3N0YXRpYyBpbnQgYmZpbl9hZHY3MzkzX2ZiX3NldGNvbHJlZyh1X2ludCwgdV9pbnQsIHVfaW50LCB1X2ludCwKKwkJCQkgICAgIHVfaW50LCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jYXJtaW5lZmIuYyBiL2RyaXZlcnMvdmlkZW8vY2FybWluZWZiLmMKaW5kZXggNmIxOTEzNi4uY2FhYTI3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jYXJtaW5lZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2Nhcm1pbmVmYi5jCkBAIC02NTQsNyArNjU0LDcgQEAKIAkJcHJpbnRrKEtFUk5fRVJSICJjYXJtaW5lZmI6IE1lbW9yeSBiYXIgaXMgb25seSAlZCBieXRlcywgJWQgIgogCQkJCSJhcmUgcmVxdWlyZWQuIiwgY2FybWluZWZiX2ZpeC5zbWVtX2xlbiwKIAkJCQlDQVJNSU5FX1RPVEFMX0RJUExBWV9NRU0pOwotCQlnb3RvIGVycl9mcmVlX3JlZ19tbWlvOworCQlnb3RvIGVycl91bm1hcF92cmVnczsKIAl9CiAKIAlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihjYXJtaW5lZmJfZml4LnNtZW1fc3RhcnQsCkBAIC02NjcsOCArNjY3LDYgQEAKIAkJCWNhcm1pbmVmYl9maXguc21lbV9sZW4pOwogCWlmICghaHctPnNjcmVlbl9tZW0pIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJjYXJtaW5lOiBDYW4ndCBpb3JlbWFwIHNtZW0gYXJlYS5cbiIpOwotCQlyZWxlYXNlX21lbV9yZWdpb24oY2FybWluZWZiX2ZpeC5zbWVtX3N0YXJ0LAotCQkJCWNhcm1pbmVmYl9maXguc21lbV9sZW4pOwogCQlnb3RvIGVycl9yZWdfc21lbTsKIAl9CiAKQEAgLTcxMCw3ICs3MDgsNyBAQAogZXJyX3VubWFwX3NjcmVlbjoKIAlpb3VubWFwKGh3LT5zY3JlZW5fbWVtKTsKIGVycl9yZWdfc21lbToKLQlyZWxlYXNlX21lbV9yZWdpb24oY2FybWluZWZiX2ZpeC5tbWlvX3N0YXJ0LCBjYXJtaW5lZmJfZml4Lm1taW9fbGVuKTsKKwlyZWxlYXNlX21lbV9yZWdpb24oY2FybWluZWZiX2ZpeC5zbWVtX3N0YXJ0LCBjYXJtaW5lZmJfZml4LnNtZW1fbGVuKTsKIGVycl91bm1hcF92cmVnczoKIAlpb3VubWFwKGh3LT52X3JlZ3MpOwogZXJyX2ZyZWVfcmVnX21taW86CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ZiX2RlZmlvLmMgYi9kcml2ZXJzL3ZpZGVvL2ZiX2RlZmlvLmMKaW5kZXggNmI5M2VmOS4uODA0MDAwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9mYl9kZWZpby5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZmJfZGVmaW8uYwpAQCAtNzUsNyArNzUsNyBAQAogCQlyZXR1cm4gMDsKIAogCS8qIEtpbGwgb2ZmIHRoZSBkZWxheWVkIHdvcmsgKi8KLQljYW5jZWxfcmVhcm1pbmdfZGVsYXllZF93b3JrKCZpbmZvLT5kZWZlcnJlZF93b3JrKTsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmluZm8tPmRlZmVycmVkX3dvcmspOwogCiAJLyogUnVuIGl0IGltbWVkaWF0ZWx5ICovCiAJcmV0dXJuIHNjaGVkdWxlX2RlbGF5ZWRfd29yaygmaW5mby0+ZGVmZXJyZWRfd29yaywgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ZibW9uLmMgYi9kcml2ZXJzL3ZpZGVvL2ZibW9uLmMKaW5kZXggNTYzYTk4Yi4uNGY1NzQ4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9mYm1vbi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZmJtb24uYwpAQCAtOTczLDYgKzk3Myw5MCBAQAogCURQUklOVEsoIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIpOwogfQogCisvKioKKyAqIGZiX2VkaWRfYWRkX21vbnNwZWNzKCkgLSBhZGQgbW9uaXRvciB2aWRlbyBtb2RlcyBmcm9tIEUtRURJRCBkYXRhCisgKiBAZWRpZDoJMTI4IGJ5dGUgYXJyYXkgd2l0aCBhbiBFLUVESUQgYmxvY2sKKyAqIEBzcGFjczoJbW9uaXRvciBzcGVjcyB0byBiZSBleHRlbmRlZAorICovCit2b2lkIGZiX2VkaWRfYWRkX21vbnNwZWNzKHVuc2lnbmVkIGNoYXIgKmVkaWQsIHN0cnVjdCBmYl9tb25zcGVjcyAqc3BlY3MpCit7CisJdW5zaWduZWQgY2hhciAqYmxvY2s7CisJc3RydWN0IGZiX3ZpZGVvbW9kZSAqbTsKKwlpbnQgbnVtID0gMCwgaTsKKwl1OCBzdmRbNjRdLCBlZHRbKDEyOCAtIDQpIC8gREVUQUlMRURfVElNSU5HX0RFU0NSSVBUSU9OX1NJWkVdOworCXU4IHBvcyA9IDQsIHN2ZF9uID0gMDsKKworCWlmICghZWRpZCkKKwkJcmV0dXJuOworCisJaWYgKCFlZGlkX2NoZWNrc3VtKGVkaWQpKQorCQlyZXR1cm47CisKKwlpZiAoZWRpZFswXSAhPSAweDIgfHwKKwkgICAgZWRpZFsyXSA8IDQgfHwgZWRpZFsyXSA+IDEyOCAtIERFVEFJTEVEX1RJTUlOR19ERVNDUklQVElPTl9TSVpFKQorCQlyZXR1cm47CisKKwlEUFJJTlRLKCIgIFNob3J0IFZpZGVvIERlc2NyaXB0b3JzXG4iKTsKKworCXdoaWxlIChwb3MgPCBlZGlkWzJdKSB7CisJCXU4IGxlbiA9IGVkaWRbcG9zXSAmIDB4MWYsIHR5cGUgPSAoZWRpZFtwb3NdID4+IDUpICYgNzsKKwkJcHJfZGVidWcoIkRhdGEgYmxvY2sgJXUgb2YgJXUgYnl0ZXNcbiIsIHR5cGUsIGxlbik7CisJCWlmICh0eXBlID09IDIpCisJCQlmb3IgKGkgPSBwb3M7IGkgPCBwb3MgKyBsZW47IGkrKykgeworCQkJCXU4IGlkeCA9IGVkaWRbcG9zICsgaV0gJiAweDdmOworCQkJCXN2ZFtzdmRfbisrXSA9IGlkeDsKKwkJCQlwcl9kZWJ1ZygiTiVzYXRpdmUgbW9kZSAjJWRcbiIsCisJCQkJCSBlZGlkW3BvcyArIGldICYgMHg4MCA/ICIiIDogIm9uLW4iLCBpZHgpOworCQkJfQorCQlwb3MgKz0gbGVuICsgMTsKKwl9CisKKwlibG9jayA9IGVkaWQgKyBlZGlkWzJdOworCisJRFBSSU5USygiICBFeHRlbmRlZCBEZXRhaWxlZCBUaW1pbmdzXG4iKTsKKworCWZvciAoaSA9IDA7IGkgPCAoMTI4IC0gZWRpZFsyXSkgLyBERVRBSUxFRF9USU1JTkdfREVTQ1JJUFRJT05fU0laRTsKKwkgICAgIGkrKywgYmxvY2sgKz0gREVUQUlMRURfVElNSU5HX0RFU0NSSVBUSU9OX1NJWkUpCisJCWlmIChQSVhFTF9DTE9DSykKKwkJCWVkdFtudW0rK10gPSBibG9jayAtIGVkaWQ7CisKKwkvKiBZaWtlcywgRURJRCBkYXRhIGlzIHRvdGFsbHkgdXNlbGVzcyAqLworCWlmICghKG51bSArIHN2ZF9uKSkKKwkJcmV0dXJuOworCisJbSA9IGt6YWxsb2MoKHNwZWNzLT5tb2RlZGJfbGVuICsgbnVtICsgc3ZkX24pICoKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgZmJfdmlkZW9tb2RlKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIW0pCisJCXJldHVybjsKKworCW1lbWNweShtLCBzcGVjcy0+bW9kZWRiLCBzcGVjcy0+bW9kZWRiX2xlbiAqIHNpemVvZihzdHJ1Y3QgZmJfdmlkZW9tb2RlKSk7CisKKwlmb3IgKGkgPSBzcGVjcy0+bW9kZWRiX2xlbjsgaSA8IHNwZWNzLT5tb2RlZGJfbGVuICsgbnVtOyBpKyspIHsKKwkJZ2V0X2RldGFpbGVkX3RpbWluZyhlZGlkICsgZWR0W2kgLSBzcGVjcy0+bW9kZWRiX2xlbl0sICZtW2ldKTsKKwkJaWYgKGkgPT0gc3BlY3MtPm1vZGVkYl9sZW4pCisJCQltW2ldLmZsYWcgfD0gRkJfTU9ERV9JU19GSVJTVDsKKwkJcHJfZGVidWcoIkFkZGluZyAldXgldUAldVxuIiwgbVtpXS54cmVzLCBtW2ldLnlyZXMsIG1baV0ucmVmcmVzaCk7CisJfQorCisJZm9yIChpID0gc3BlY3MtPm1vZGVkYl9sZW4gKyBudW07IGkgPCBzcGVjcy0+bW9kZWRiX2xlbiArIG51bSArIHN2ZF9uOyBpKyspIHsKKwkJaW50IGlkeCA9IHN2ZFtpIC0gc3BlY3MtPm1vZGVkYl9sZW4gLSBudW1dOworCQlpZiAoIWlkeCB8fCBpZHggPiA2MykgeworCQkJcHJfd2FybmluZygiUmVzZXJ2ZWQgU1ZEIGNvZGUgJWRcbiIsIGlkeCk7CisJCX0gZWxzZSBpZiAoaWR4ID4gQVJSQVlfU0laRShjZWFfbW9kZXMpIHx8ICFjZWFfbW9kZXNbaWR4XS54cmVzKSB7CisJCQlwcl93YXJuaW5nKCJVbmltcGxlbWVudGVkIFNWRCBjb2RlICVkXG4iLCBpZHgpOworCQl9IGVsc2UgeworCQkJbWVtY3B5KCZtW2ldLCBjZWFfbW9kZXMgKyBpZHgsIHNpemVvZihtW2ldKSk7CisJCQlwcl9kZWJ1ZygiQWRkaW5nIFNWRCAjJWQ6ICV1eCV1QCV1XG4iLCBpZHgsCisJCQkJIG1baV0ueHJlcywgbVtpXS55cmVzLCBtW2ldLnJlZnJlc2gpOworCQl9CisJfQorCisJa2ZyZWUoc3BlY3MtPm1vZGVkYik7CisJc3BlY3MtPm1vZGVkYiA9IG07CisJc3BlY3MtPm1vZGVkYl9sZW4gPSBzcGVjcy0+bW9kZWRiX2xlbiArIG51bSArIHN2ZF9uOworfQorCiAvKgogICogVkVTQSBHZW5lcmFsaXplZCBUaW1pbmcgRm9ybXVsYSAoR1RGKQogICovCkBAIC0xMjg5LDYgKzEzNzMsOSBAQAogewogCXNwZWNzID0gTlVMTDsKIH0KK3ZvaWQgZmJfZWRpZF9hZGRfbW9uc3BlY3ModW5zaWduZWQgY2hhciAqZWRpZCwgc3RydWN0IGZiX21vbnNwZWNzICpzcGVjcykKK3sKK30KIHZvaWQgZmJfZGVzdHJveV9tb2RlZGIoc3RydWN0IGZiX3ZpZGVvbW9kZSAqbW9kZWRiKQogewogfQpAQCAtMTM5Niw2ICsxNDgzLDcgQEAKIAogRVhQT1JUX1NZTUJPTChmYl9wYXJzZV9lZGlkKTsKIEVYUE9SVF9TWU1CT0woZmJfZWRpZF90b19tb25zcGVjcyk7CitFWFBPUlRfU1lNQk9MKGZiX2VkaWRfYWRkX21vbnNwZWNzKTsKIEVYUE9SVF9TWU1CT0woZmJfZ2V0X21vZGUpOwogRVhQT1JUX1NZTUJPTChmYl92YWxpZGF0ZV9tb2RlKTsKIEVYUE9SVF9TWU1CT0woZmJfZGVzdHJveV9tb2RlZGIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9oZ2FmYi5jIGIvZHJpdmVycy92aWRlby9oZ2FmYi5jCmluZGV4IGFmOGYwZjIuLjQwNTI3MTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vaGdhZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2hnYWZiLmMKQEAgLTQ1NCw3ICs0NTQsNiBAQAogLyoKICAqIEFjY2VsIGZ1bmN0aW9ucwogICovCi0jaWZkZWYgQ09ORklHX0ZCX0hHQV9BQ0NFTAogc3RhdGljIHZvaWQgaGdhZmJfZmlsbHJlY3Qoc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCBmYl9maWxscmVjdCAqcmVjdCkKIHsKIAl1X2ludCByb3dzLCB5OwpAQCAtNDY2LDcgKzQ2NSw3IEBACiAJCWRlc3QgPSByb3dhZGRyKGluZm8sIHkpICsgKHJlY3QtPmR4ID4+IDMpOwogCQlzd2l0Y2ggKHJlY3QtPnJvcCkgewogCQljYXNlIFJPUF9DT1BZOgotCQkJLy9mYl9tZW1zZXQoZGVzdCwgcmVjdC0+Y29sb3IsIChyZWN0LT53aWR0aCA+PiAzKSk7CisJCQltZW1zZXRfaW8oZGVzdCwgcmVjdC0+Y29sb3IsIChyZWN0LT53aWR0aCA+PiAzKSk7CiAJCQlicmVhazsKIAkJY2FzZSBST1BfWE9SOgogCQkJZmJfd3JpdGViKH4oZmJfcmVhZGIoZGVzdCkpLCBkZXN0KTsKQEAgLTQ4OCw3ICs0ODcsNyBAQAogCQlmb3IgKHJvd3MgPSBhcmVhLT5oZWlnaHQ7IHJvd3MtLTsgKSB7CiAJCQlzcmMgPSByb3dhZGRyKGluZm8sIHkxKSArIChhcmVhLT5zeCA+PiAzKTsKIAkJCWRlc3QgPSByb3dhZGRyKGluZm8sIHkyKSArIChhcmVhLT5keCA+PiAzKTsKLQkJCS8vZmJfbWVtbW92ZShkZXN0LCBzcmMsIChhcmVhLT53aWR0aCA+PiAzKSk7CisJCQltZW1tb3ZlKGRlc3QsIHNyYywgKGFyZWEtPndpZHRoID4+IDMpKTsKIAkJCXkxKys7CiAJCQl5MisrOwogCQl9CkBAIC00OTksNyArNDk4LDcgQEAKIAkJZm9yIChyb3dzID0gYXJlYS0+aGVpZ2h0OyByb3dzLS07KSB7CiAJCQlzcmMgPSByb3dhZGRyKGluZm8sIHkxKSArIChhcmVhLT5zeCA+PiAzKTsKIAkJCWRlc3QgPSByb3dhZGRyKGluZm8sIHkyKSArIChhcmVhLT5keCA+PiAzKTsKLQkJCS8vZmJfbWVtbW92ZShkZXN0LCBzcmMsIChhcmVhLT53aWR0aCA+PiAzKSk7CisJCQltZW1tb3ZlKGRlc3QsIHNyYywgKGFyZWEtPndpZHRoID4+IDMpKTsKIAkJCXkxLS07CiAJCQl5Mi0tOwogCQl9CkBAIC01MTEsMjAgKzUxMCwxNyBAQAogCXU4IF9faW9tZW0gKmRlc3Q7CiAJdTggKmNkYXQgPSAodTggKikgaW1hZ2UtPmRhdGE7CiAJdV9pbnQgcm93cywgeSA9IGltYWdlLT5keTsKKwl1X2ludCB4OwogCXU4IGQ7CiAKIAlmb3IgKHJvd3MgPSBpbWFnZS0+aGVpZ2h0OyByb3dzLS07IHkrKykgewotCQlkID0gKmNkYXQrKzsKLQkJZGVzdCA9IHJvd2FkZHIoaW5mbywgeSkgKyAoaW1hZ2UtPmR4ID4+IDMpOwotCQlmYl93cml0ZWIoZCwgZGVzdCk7CisJCWZvciAoeCA9IDA7IHggPCBpbWFnZS0+d2lkdGg7IHgrPSA4KSB7CisJCQlkID0gKmNkYXQrKzsKKwkJCWRlc3QgPSByb3dhZGRyKGluZm8sIHkpICsgKChpbWFnZS0+ZHggKyB4KT4+IDMpOworCQkJZmJfd3JpdGViKGQsIGRlc3QpOworCQl9CiAJfQogfQotI2Vsc2UgLyogIUNPTkZJR19GQl9IR0FfQUNDRUwgKi8KLSNkZWZpbmUgaGdhZmJfZmlsbHJlY3QgY2ZiX2ZpbGxyZWN0Ci0jZGVmaW5lIGhnYWZiX2NvcHlhcmVhIGNmYl9jb3B5YXJlYQotI2RlZmluZSBoZ2FmYl9pbWFnZWJsaXQgY2ZiX2ltYWdlYmxpdAotI2VuZGlmIC8qIENPTkZJR19GQl9IR0FfQUNDRUwgKi8KLQogCiBzdGF0aWMgc3RydWN0IGZiX29wcyBoZ2FmYl9vcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9pODEwL2k4MTAtaTJjLmMgYi9kcml2ZXJzL3ZpZGVvL2k4MTAvaTgxMC1pMmMuYwppbmRleCBjZDJjNzI4Li43ZGIxN2QwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2k4MTAvaTgxMC1pMmMuYworKysgYi9kcml2ZXJzL3ZpZGVvL2k4MTAvaTgxMC1pMmMuYwpAQCAtNDUsOCArNDUsMTAgQEAKICAgICAgICAgc3RydWN0IGk4MTBmYl9wYXIgICAgICAgICAqcGFyID0gY2hhbi0+cGFyOwogCXU4ICAgICAgICAgICAgICAgICAgICAgICAgX19pb21lbSAqbW1pbyA9IHBhci0+bW1pb19zdGFydF92aXJ0dWFsOwogCi0JaTgxMF93cml0ZWwobW1pbywgY2hhbi0+ZGRjX2Jhc2UsIChzdGF0ZSA/IFNDTF9WQUxfT1VUIDogMCkgfCBTQ0xfRElSIHwKLQkJICAgIFNDTF9ESVJfTUFTSyB8IFNDTF9WQUxfTUFTSyk7CisJaWYgKHN0YXRlKQorCQlpODEwX3dyaXRlbChtbWlvLCBjaGFuLT5kZGNfYmFzZSwgU0NMX0RJUl9NQVNLIHwgU0NMX1ZBTF9NQVNLKTsKKwllbHNlCisJCWk4MTBfd3JpdGVsKG1taW8sIGNoYW4tPmRkY19iYXNlLCBTQ0xfRElSIHwgU0NMX0RJUl9NQVNLIHwgU0NMX1ZBTF9NQVNLKTsKIAlpODEwX3JlYWRsKG1taW8sIGNoYW4tPmRkY19iYXNlKTsJLyogZmx1c2ggcG9zdGVkIHdyaXRlICovCiB9CiAKQEAgLTU2LDggKzU4LDEwIEBACiAgICAgICAgIHN0cnVjdCBpODEwZmJfcGFyICAgICAgICAgKnBhciA9IGNoYW4tPnBhcjsKIAl1OCAgICAgICAgICAgICAgICAgICAgICAgIF9faW9tZW0gKm1taW8gPSBwYXItPm1taW9fc3RhcnRfdmlydHVhbDsKIAotIAlpODEwX3dyaXRlbChtbWlvLCBjaGFuLT5kZGNfYmFzZSwgKHN0YXRlID8gU0RBX1ZBTF9PVVQgOiAwKSB8IFNEQV9ESVIgfAotCQkgICAgU0RBX0RJUl9NQVNLIHwgU0RBX1ZBTF9NQVNLKTsKKwlpZiAoc3RhdGUpCisJCWk4MTBfd3JpdGVsKG1taW8sIGNoYW4tPmRkY19iYXNlLCBTREFfRElSX01BU0sgfCBTREFfVkFMX01BU0spOworCWVsc2UKKwkJaTgxMF93cml0ZWwobW1pbywgY2hhbi0+ZGRjX2Jhc2UsIFNEQV9ESVIgfCBTREFfRElSX01BU0sgfCBTREFfVkFMX01BU0spOwogCWk4MTBfcmVhZGwobW1pbywgY2hhbi0+ZGRjX2Jhc2UpOwkvKiBmbHVzaCBwb3N0ZWQgd3JpdGUgKi8KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9tb2RlZGIuYyBiL2RyaXZlcnMvdmlkZW8vbW9kZWRiLmMKaW5kZXggZGU0NTBjMS4uZDJiYjM2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9tb2RlZGIuYworKysgYi9kcml2ZXJzL3ZpZGVvL21vZGVkYi5jCkBAIC0yNzQsMTAgKzI3NCw2MSBAQAogICAgICAgIC8qIDgwMHg1MjBpIEAgNTAgSHosIDE1LjYyNSBrSHogaHN5bmMgKFBBTCBSR0IpICovCiAgICAgICAgTlVMTCwgNTAsIDgwMCwgNTIwLCA1ODgyMywgMTQ0LCA2NCwgNzIsIDI4LCA4MCwgNSwKICAgICAgICAwLCBGQl9WTU9ERV9JTlRFUkxBQ0VECisgICAgfSwgeworCS8qIDg2NHg0ODAgQCA2MCBIeiwgMzUuMTUga0h6IGhzeW5jICovCisJTlVMTCwgNjAsIDg2NCwgNDgwLCAyNzc3NywgMSwgMSwgMSwgMSwgMCwgMCwKKwkwLCBGQl9WTU9ERV9OT05JTlRFUkxBQ0VECiAgICAgfSwKIH07CiAKICNpZmRlZiBDT05GSUdfRkJfTU9ERV9IRUxQRVJTCitjb25zdCBzdHJ1Y3QgZmJfdmlkZW9tb2RlIGNlYV9tb2Rlc1s2NF0gPSB7CisJLyogIzE6IDY0MHg0ODBwQDU5Ljk0LzYwSHogKi8KKwlbMV0gPSB7CisJCU5VTEwsIDYwLCA2NDAsIDQ4MCwgMzk3MjIsIDQ4LCAxNiwgMzMsIDEwLCA5NiwgMiwgMCwgRkJfVk1PREVfTk9OSU5URVJMQUNFRCwgMCwKKwl9LAorCS8qICMzOiA3MjB4NDgwcEA1OS45NC82MEh6ICovCisJWzNdID0geworCQlOVUxMLCA2MCwgNzIwLCA0ODAsIDM3MDM3LCA2MCwgMTYsIDMwLCA5LCA2MiwgNiwgMCwgRkJfVk1PREVfTk9OSU5URVJMQUNFRCwgMCwKKwl9LAorCS8qICM1OiAxOTIweDEwODBpQDU5Ljk0LzYwSHogKi8KKwlbNV0gPSB7CisJCU5VTEwsIDYwLCAxOTIwLCAxMDgwLCAxMzc2MywgMTQ4LCA4OCwgMTUsIDIsIDQ0LCA1LAorCQlGQl9TWU5DX0hPUl9ISUdIX0FDVCB8IEZCX1NZTkNfVkVSVF9ISUdIX0FDVCwgRkJfVk1PREVfSU5URVJMQUNFRCwgMCwKKwl9LAorCS8qICM3OiA3MjAoMTQ0MCl4NDgwaUhANTkuOTQvNjBIeiAqLworCVs3XSA9IHsKKwkJTlVMTCwgNjAsIDE0NDAsIDQ4MCwgMTg1NTQvKjM3MTA4Ki8sIDExNCwgMzgsIDE1LCA0LCAxMjQsIDMsIDAsIEZCX1ZNT0RFX0lOVEVSTEFDRUQsIDAsCisJfSwKKwkvKiAjOTogNzIwKDE0NDApeDI0MHBIQDU5Ljk0LzYwSHogKi8KKwlbOV0gPSB7CisJCU5VTEwsIDYwLCAxNDQwLCAyNDAsIDE4NTU0LCAxMTQsIDM4LCAxNiwgNCwgMTI0LCAzLCAwLCBGQl9WTU9ERV9OT05JTlRFUkxBQ0VELCAwLAorCX0sCisJLyogIzE4OiA3MjB4NTc2cEhANTBIeiAqLworCVsxOF0gPSB7CisJCU5VTEwsIDUwLCA3MjAsIDU3NiwgMzcwMzcsIDY4LCAxMiwgMzksIDUsIDY0LCA1LCAwLCBGQl9WTU9ERV9OT05JTlRFUkxBQ0VELCAwLAorCX0sCisJLyogIzE5OiAxMjgweDcyMHBANTBIeiAqLworCVsxOV0gPSB7CisJCU5VTEwsIDUwLCAxMjgwLCA3MjAsIDEzNDY4LCAyMjAsIDQ0MCwgMjAsIDUsIDQwLCA1LAorCQlGQl9TWU5DX0hPUl9ISUdIX0FDVCB8IEZCX1NZTkNfVkVSVF9ISUdIX0FDVCwgRkJfVk1PREVfTk9OSU5URVJMQUNFRCwgMCwKKwl9LAorCS8qICMyMDogMTkyMHgxMDgwaUA1MEh6ICovCisJWzIwXSA9IHsKKwkJTlVMTCwgNTAsIDE5MjAsIDEwODAsIDEzNDgwLCAxNDgsIDUyOCwgMTUsIDUsIDUyOCwgNSwKKwkJRkJfU1lOQ19IT1JfSElHSF9BQ1QgfCBGQl9TWU5DX1ZFUlRfSElHSF9BQ1QsIEZCX1ZNT0RFX0lOVEVSTEFDRUQsIDAsCisJfSwKKwkvKiAjMzI6IDE5MjB4MTA4MHBAMjMuOTgvMjRIeiAqLworCVszMl0gPSB7CisJCU5VTEwsIDI0LCAxOTIwLCAxMDgwLCAxMzQ2OCwgMTQ4LCA2MzgsIDM2LCA0LCA0NCwgNSwKKwkJRkJfU1lOQ19IT1JfSElHSF9BQ1QgfCBGQl9TWU5DX1ZFUlRfSElHSF9BQ1QsIEZCX1ZNT0RFX05PTklOVEVSTEFDRUQsIDAsCisJfSwKKwkvKiAjMzU6ICgyODgwKXg0ODBwNHhANTkuOTQvNjBIeiAqLworCVszNV0gPSB7CisJCU5VTEwsIDYwLCAyODgwLCA0ODAsIDkyNTAsIDI0MCwgNjQsIDMwLCA5LCAyNDgsIDYsIDAsIEZCX1ZNT0RFX05PTklOVEVSTEFDRUQsIDAsCisJfSwKK307CisKIGNvbnN0IHN0cnVjdCBmYl92aWRlb21vZGUgdmVzYV9tb2Rlc1tdID0gewogCS8qIDAgNjQweDM1MC04NSBWRVNBICovCiAJeyBOVUxMLCA4NSwgNjQwLCAzNTAsIDMxNzQ2LCAgOTYsIDMyLCA2MCwgMzIsIDY0LCAzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9teDNmYi5jIGIvZHJpdmVycy92aWRlby9teDNmYi5jCmluZGV4IGNhMGY2YmUuLmNiMDEzOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbXgzZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL214M2ZiLmMKQEAgLTE0NzQsOCArMTQ3NCw3IEBACiAJCWdvdG8gZXJlbWFwOwogCX0KIAotCXByX2RlYnVnKCJSZW1hcHBlZCAleCB0byAleCBhdCAlcFxuIiwgc2RjX3JlZy0+c3RhcnQsIHNkY19yZWctPmVuZCwKLQkJIG14M2ZiLT5yZWdfYmFzZSk7CisJcHJfZGVidWcoIlJlbWFwcGVkICVwUiBhdCAlcFxuIiwgc2RjX3JlZywgbXgzZmItPnJlZ19iYXNlKTsKIAogCS8qIElETUFDIGludGVyZmFjZSAqLwogCWRtYWVuZ2luZV9nZXQoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcC9sY2RfbWlwaWQuYyBiL2RyaXZlcnMvdmlkZW8vb21hcC9sY2RfbWlwaWQuYwppbmRleCA2NGRjYzc0Li45MGUzYmRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX21pcGlkLmMKKysrIGIvZHJpdmVycy92aWRlby9vbWFwL2xjZF9taXBpZC5jCkBAIC0zOTYsNyArMzk2LDcgQEAKIHN0YXRpYyB2b2lkIG1pcGlkX2VzZF9zdG9wX2NoZWNrKHN0cnVjdCBtaXBpZF9kZXZpY2UgKm1kKQogewogCWlmIChtZC0+ZXNkX2NoZWNrICE9IE5VTEwpCi0JCWNhbmNlbF9yZWFybWluZ19kZWxheWVkX3dvcmtxdWV1ZShtZC0+ZXNkX3dxLCAmbWQtPmVzZF93b3JrKTsKKwkJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZtZC0+ZXNkX3dvcmspOwogfQogCiBzdGF0aWMgdm9pZCBtaXBpZF9lc2Rfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3B4YTN4eC1nY3UuYyBiL2RyaXZlcnMvdmlkZW8vcHhhM3h4LWdjdS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4MTE2OGQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL3B4YTN4eC1nY3UuYwpAQCAtMCwwICsxLDc3MiBAQAorLyoKKyAqICBweGEzeHgtZ2MuYyAtIExpbnV4IGtlcm5lbCBtb2R1bGUgZm9yIFBYQTN4eCBncmFwaGljcyBjb250cm9sbGVycworICoKKyAqICBUaGlzIGRyaXZlciBuZWVkcyBhIERpcmVjdEZCIGNvdW50ZXJwYXJ0IGluIHVzZXIgc3BhY2UsIGNvbW11bmljYXRpb24KKyAqICBpcyBoYW5kbGVkIHZpYSBtbWFwKCllZCBtZW1vcnkgYXJlYXMgYW5kIGFuIGlvY3RsLgorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDkgRGFuaWVsIE1hY2sgPGRhbmllbEBjYWlhcS5kZT4KKyAqICBDb3B5cmlnaHQgKGMpIDIwMDkgSmFuaW5lIEtyb3BwIDxuaW5AZGlyZWN0ZmIub3JnPgorICogIENvcHlyaWdodCAoYykgMjAwOSBEZW5pcyBPbGl2ZXIgS3JvcHAgPGRva0BkaXJlY3RmYi5vcmc+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisvKgorICogV0FSTklORzogVGhpcyBjb250cm9sbGVyIGlzIGF0dGFjaGVkIHRvIFN5c3RlbSBCdXMgMiBvZiB0aGUgUFhBIHdoaWNoCisgKiBuZWVkcyBpdHMgYXJiaXRlciB0byBiZSBlbmFibGVkIGV4cGxpY3RseSAoQ0tFTkIgJiAxPDw5KS4KKyAqIFRoZXJlIGlzIGN1cnJlbnRseSBubyB3YXkgdG8gZG8gdGhpcyBmcm9tIExpbnV4LCBzbyB5b3UgbmVlZCB0byB0ZWFjaAorICogeW91ciBib290bG9hZGVyIGZvciBub3cuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlICJweGEzeHgtZ2N1LmgiCisKKyNkZWZpbmUgRFJWX05BTUUJInB4YTN4eC1nY3UiCisjZGVmaW5lIE1JU0NERVZfTUlOT1IJMTk3CisKKyNkZWZpbmUgUkVHX0dDQ1IJMHgwMAorI2RlZmluZSBHQ0NSX1NZTkNfQ0xSCSgxIDw8IDkpCisjZGVmaW5lIEdDQ1JfQlBfUlNUCSgxIDw8IDgpCisjZGVmaW5lIEdDQ1JfQUJPUlQJKDEgPDwgNikKKyNkZWZpbmUgR0NDUl9TVE9QCSgxIDw8IDQpCisKKyNkZWZpbmUgUkVHX0dDSVNDUgkweDA0CisjZGVmaW5lIFJFR19HQ0lFQ1IJMHgwOAorI2RlZmluZSBSRUdfR0NSQkJSCTB4MjAKKyNkZWZpbmUgUkVHX0dDUkJMUgkweDI0CisjZGVmaW5lIFJFR19HQ1JCSFIJMHgyOAorI2RlZmluZSBSRUdfR0NSQlRSCTB4MkMKKyNkZWZpbmUgUkVHX0dDUkJFWEhSCTB4MzAKKworI2RlZmluZSBJRV9FT0IJCSgxIDw8IDApCisjZGVmaW5lIElFX0VFT0IJCSgxIDw8IDUpCisjZGVmaW5lIElFX0FMTAkJMHhmZgorCisjZGVmaW5lIFNIQVJFRF9TSVpFCVBBR0VfQUxJR04oc2l6ZW9mKHN0cnVjdCBweGEzeHhfZ2N1X3NoYXJlZCkpCisKKy8qICNkZWZpbmUgUFhBM1hYX0dDVV9ERUJVRyAqLworLyogI2RlZmluZSBQWEEzWFhfR0NVX0RFQlVHX1RJTUVSICovCisKKyNpZmRlZiBQWEEzWFhfR0NVX0RFQlVHCisjZGVmaW5lIFFEVU1QKG1zZykJCQkJCVwKKwlkbyB7CQkJCQkJXAorCQlRUFJJTlQocHJpdiwgS0VSTl9ERUJVRywgbXNnKTsJCVwKKwl9IHdoaWxlICgwKQorI2Vsc2UKKyNkZWZpbmUgUURVTVAobXNnKQlkbyB7fSB3aGlsZSAoMCkKKyNlbmRpZgorCisjZGVmaW5lIFFFUlJPUihtc2cpCQkJCQlcCisJZG8gewkJCQkJCVwKKwkJUVBSSU5UKHByaXYsIEtFUk5fRVJSLCBtc2cpOwkJXAorCX0gd2hpbGUgKDApCisKK3N0cnVjdCBweGEzeHhfZ2N1X2JhdGNoIHsKKwlzdHJ1Y3QgcHhhM3h4X2djdV9iYXRjaCAqbmV4dDsKKwl1MzIJCQkqcHRyOworCWRtYV9hZGRyX3QJCSBwaHlzOworCXVuc2lnbmVkIGxvbmcJCSBsZW5ndGg7Cit9OworCitzdHJ1Y3QgcHhhM3h4X2djdV9wcml2IHsKKwl2b2lkIF9faW9tZW0JCSAqbW1pb19iYXNlOworCXN0cnVjdCBjbGsJCSAqY2xrOworCXN0cnVjdCBweGEzeHhfZ2N1X3NoYXJlZCAqc2hhcmVkOworCWRtYV9hZGRyX3QJCSAgc2hhcmVkX3BoeXM7CisJc3RydWN0IHJlc291cmNlCQkgKnJlc291cmNlX21lbTsKKwlzdHJ1Y3QgbWlzY2RldmljZQkgIG1pc2NfZGV2OworCXN0cnVjdCBmaWxlX29wZXJhdGlvbnMJICBtaXNjX2ZvcHM7CisJd2FpdF9xdWV1ZV9oZWFkX3QJICB3YWl0X2lkbGU7CisJd2FpdF9xdWV1ZV9oZWFkX3QJICB3YWl0X2ZyZWU7CisJc3BpbmxvY2tfdAkJICBzcGlubG9jazsKKwlzdHJ1Y3QgdGltZXZhbCAJCSAgYmFzZV90aW1lOworCisJc3RydWN0IHB4YTN4eF9nY3VfYmF0Y2ggKmZyZWU7CisKKwlzdHJ1Y3QgcHhhM3h4X2djdV9iYXRjaCAqcmVhZHk7CisJc3RydWN0IHB4YTN4eF9nY3VfYmF0Y2ggKnJlYWR5X2xhc3Q7CisJc3RydWN0IHB4YTN4eF9nY3VfYmF0Y2ggKnJ1bm5pbmc7Cit9OworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK2djX3JlYWRsKHN0cnVjdCBweGEzeHhfZ2N1X3ByaXYgKnByaXYsIHVuc2lnbmVkIGludCBvZmYpCit7CisJcmV0dXJuIF9fcmF3X3JlYWRsKHByaXYtPm1taW9fYmFzZSArIG9mZik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2Nfd3JpdGVsKHN0cnVjdCBweGEzeHhfZ2N1X3ByaXYgKnByaXYsIHVuc2lnbmVkIGludCBvZmYsIHVuc2lnbmVkIGxvbmcgdmFsKQoreworCV9fcmF3X3dyaXRlbCh2YWwsIHByaXYtPm1taW9fYmFzZSArIG9mZik7Cit9CisKKyNkZWZpbmUgUVBSSU5UKHByaXYsIGxldmVsLCBtc2cpCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlzdHJ1Y3QgdGltZXZhbCB0djsJCQkJCVwKKwkJc3RydWN0IHB4YTN4eF9nY3Vfc2hhcmVkICpzaGFyZWQgPSBwcml2LT5zaGFyZWQ7CVwKKwkJdTMyIGJhc2UgPSBnY19yZWFkbChwcml2LCBSRUdfR0NSQkJSKTsJCQlcCisJCQkJCQkJCQlcCisJCWRvX2dldHRpbWVvZmRheSgmdHYpOwkJCQkJXAorCQkJCQkJCQkJXAorCQlwcmludGsobGV2ZWwgIiVsZC4lMDNsZC4lMDNsZCAtICUtMTdzOiAlLTIxcyAoJXMsICIJXAorCQkJIlNUQVRVUyAiCQkJCQlcCisJCQkiMHglMDJseCwgQiAweCUwOGx4IFslbGRdLCBFICU1bGQsIEggJTVsZCwgIglcCisJCQkiVCAlNWxkKVxuIiwJCQkJCVwKKwkJCXR2LnR2X3NlYyAtIHByaXYtPmJhc2VfdGltZS50dl9zZWMsCQlcCisJCQl0di50dl91c2VjIC8gMTAwMCwgdHYudHZfdXNlYyAlIDEwMDAsCQlcCisJCQlfX2Z1bmNfXywgbXNnLAkJCQkJXAorCQkJc2hhcmVkLT5od19ydW5uaW5nID8gInJ1bm5pbmciIDogIiAgIGlkbGUiLAlcCisJCQlnY19yZWFkbChwcml2LCBSRUdfR0NJU0NSKSwJCQlcCisJCQlnY19yZWFkbChwcml2LCBSRUdfR0NSQkJSKSwJCQlcCisJCQlnY19yZWFkbChwcml2LCBSRUdfR0NSQkxSKSwJCQlcCisJCQkoZ2NfcmVhZGwocHJpdiwgUkVHX0dDUkJFWEhSKSAtIGJhc2UpIC8gNCwJXAorCQkJKGdjX3JlYWRsKHByaXYsIFJFR19HQ1JCSFIpIC0gYmFzZSkgLyA0LAlcCisJCQkoZ2NfcmVhZGwocHJpdiwgUkVHX0dDUkJUUikgLSBiYXNlKSAvIDQpOwlcCisJfSB3aGlsZSAoMCkKKworc3RhdGljIHZvaWQKK3B4YTN4eF9nY3VfcmVzZXQoc3RydWN0IHB4YTN4eF9nY3VfcHJpdiAqcHJpdikKK3sKKwlRRFVNUCgiUkVTRVQiKTsKKworCS8qIGRpc2FibGUgaW50ZXJydXB0cyAqLworCWdjX3dyaXRlbChwcml2LCBSRUdfR0NJRUNSLCAwKTsKKworCS8qIHJlc2V0IGhhcmR3YXJlICovCisJZ2Nfd3JpdGVsKHByaXYsIFJFR19HQ0NSLCBHQ0NSX0FCT1JUKTsKKwlnY193cml0ZWwocHJpdiwgUkVHX0dDQ1IsIDApOworCisJbWVtc2V0KHByaXYtPnNoYXJlZCwgMCwgU0hBUkVEX1NJWkUpOworCXByaXYtPnNoYXJlZC0+YnVmZmVyX3BoeXMgPSBwcml2LT5zaGFyZWRfcGh5czsKKwlwcml2LT5zaGFyZWQtPm1hZ2ljID0gUFhBM1hYX0dDVV9TSEFSRURfTUFHSUM7CisKKwlkb19nZXR0aW1lb2ZkYXkoJnByaXYtPmJhc2VfdGltZSk7CisKKwkvKiBzZXQgdXAgdGhlIHJpbmcgYnVmZmVyIHBvaW50ZXJzICovCisJZ2Nfd3JpdGVsKHByaXYsIFJFR19HQ1JCTFIsIDApOworCWdjX3dyaXRlbChwcml2LCBSRUdfR0NSQkJSLCBwcml2LT5zaGFyZWRfcGh5cyk7CisJZ2Nfd3JpdGVsKHByaXYsIFJFR19HQ1JCVFIsIHByaXYtPnNoYXJlZF9waHlzKTsKKworCS8qIGVuYWJsZSBhbGwgSVJRcyBleGNlcHQgRU9CICovCisJZ2Nfd3JpdGVsKHByaXYsIFJFR19HQ0lFQ1IsIElFX0FMTCAmIH5JRV9FT0IpOworfQorCitzdGF0aWMgdm9pZAorZHVtcF93aG9sZV9zdGF0ZShzdHJ1Y3QgcHhhM3h4X2djdV9wcml2ICpwcml2KQoreworCXN0cnVjdCBweGEzeHhfZ2N1X3NoYXJlZCAqc2ggPSBwcml2LT5zaGFyZWQ7CisJdTMyIGJhc2UgPSBnY19yZWFkbChwcml2LCBSRUdfR0NSQkJSKTsKKworCVFEVU1QKCJEVU1QIik7CisKKwlwcmludGsoS0VSTl9ERUJVRyAiPT0gUFhBM1hYLUdDVSBEVU1QID09XG4iCisJCSIlcywgU1RBVFVTIDB4JTAybHgsIEIgMHglMDhseCBbJWxkXSwgRSAlNWxkLCBIICU1bGQsIFQgJTVsZFxuIiwKKwkJc2gtPmh3X3J1bm5pbmcgPyAicnVubmluZyIgOiAiaWRsZSAgICIsCisJCWdjX3JlYWRsKHByaXYsIFJFR19HQ0lTQ1IpLAorCQlnY19yZWFkbChwcml2LCBSRUdfR0NSQkJSKSwKKwkJZ2NfcmVhZGwocHJpdiwgUkVHX0dDUkJMUiksCisJCShnY19yZWFkbChwcml2LCBSRUdfR0NSQkVYSFIpIC0gYmFzZSkgLyA0LAorCQkoZ2NfcmVhZGwocHJpdiwgUkVHX0dDUkJIUikgLSBiYXNlKSAvIDQsCisJCShnY19yZWFkbChwcml2LCBSRUdfR0NSQlRSKSAtIGJhc2UpIC8gNCk7Cit9CisKK3N0YXRpYyB2b2lkCitmbHVzaF9ydW5uaW5nKHN0cnVjdCBweGEzeHhfZ2N1X3ByaXYgKnByaXYpCit7CisJc3RydWN0IHB4YTN4eF9nY3VfYmF0Y2ggKnJ1bm5pbmcgPSBwcml2LT5ydW5uaW5nOworCXN0cnVjdCBweGEzeHhfZ2N1X2JhdGNoICpuZXh0OworCisJd2hpbGUgKHJ1bm5pbmcpIHsKKwkJbmV4dCA9IHJ1bm5pbmctPm5leHQ7CisJCXJ1bm5pbmctPm5leHQgPSBwcml2LT5mcmVlOworCQlwcml2LT5mcmVlID0gcnVubmluZzsKKwkJcnVubmluZyA9IG5leHQ7CisJfQorCisJcHJpdi0+cnVubmluZyA9IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkCitydW5fcmVhZHkoc3RydWN0IHB4YTN4eF9nY3VfcHJpdiAqcHJpdikKK3sKKwl1bnNpZ25lZCBpbnQgbnVtID0gMDsKKwlzdHJ1Y3QgcHhhM3h4X2djdV9zaGFyZWQgKnNoYXJlZCA9IHByaXYtPnNoYXJlZDsKKwlzdHJ1Y3QgcHhhM3h4X2djdV9iYXRjaAkqcmVhZHkgPSBwcml2LT5yZWFkeTsKKworCVFEVU1QKCJTdGFydCIpOworCisJQlVHX09OKCFyZWFkeSk7CisKKwlzaGFyZWQtPmJ1ZmZlcltudW0rK10gPSAweDA1MDAwMDAwOworCisJd2hpbGUgKHJlYWR5KSB7CisJCXNoYXJlZC0+YnVmZmVyW251bSsrXSA9IDB4MDAwMDAwMDE7CisJCXNoYXJlZC0+YnVmZmVyW251bSsrXSA9IHJlYWR5LT5waHlzOworCQlyZWFkeSA9IHJlYWR5LT5uZXh0OworCX0KKworCXNoYXJlZC0+YnVmZmVyW251bSsrXSA9IDB4MDUwMDAwMDA7CisJcHJpdi0+cnVubmluZyA9IHByaXYtPnJlYWR5OworCXByaXYtPnJlYWR5ID0gcHJpdi0+cmVhZHlfbGFzdCA9IE5VTEw7CisJZ2Nfd3JpdGVsKHByaXYsIFJFR19HQ1JCTFIsIDApOworCXNoYXJlZC0+aHdfcnVubmluZyA9IDE7CisKKwkvKiByaW5nIGJhc2UgYWRkcmVzcyAqLworCWdjX3dyaXRlbChwcml2LCBSRUdfR0NSQkJSLCBzaGFyZWQtPmJ1ZmZlcl9waHlzKTsKKworCS8qIHJpbmcgdGFpbCBhZGRyZXNzICovCisJZ2Nfd3JpdGVsKHByaXYsIFJFR19HQ1JCVFIsIHNoYXJlZC0+YnVmZmVyX3BoeXMgKyBudW0gKiA0KTsKKworCS8qIHJpbmcgbGVuZ3RoICovCisJZ2Nfd3JpdGVsKHByaXYsIFJFR19HQ1JCTFIsICgobnVtICsgNjMpICYgfjYzKSAqIDQpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QKK3B4YTN4eF9nY3VfaGFuZGxlX2lycShpbnQgaXJxLCB2b2lkICpjdHgpCit7CisJc3RydWN0IHB4YTN4eF9nY3VfcHJpdiAqcHJpdiA9IGN0eDsKKwlzdHJ1Y3QgcHhhM3h4X2djdV9zaGFyZWQgKnNoYXJlZCA9IHByaXYtPnNoYXJlZDsKKwl1MzIgc3RhdHVzID0gZ2NfcmVhZGwocHJpdiwgUkVHX0dDSVNDUikgJiBJRV9BTEw7CisKKwlRRFVNUCgiLUludGVycnVwdCIpOworCisJaWYgKCFzdGF0dXMpCisJCXJldHVybiBJUlFfTk9ORTsKKworCXNwaW5fbG9jaygmcHJpdi0+c3BpbmxvY2spOworCXNoYXJlZC0+bnVtX2ludGVycnVwdHMrKzsKKworCWlmIChzdGF0dXMgJiBJRV9FRU9CKSB7CisJCVFEVU1QKCIgW0VFT0JdIik7CisKKwkJZmx1c2hfcnVubmluZyhwcml2KTsKKwkJd2FrZV91cF9hbGwoJnByaXYtPndhaXRfZnJlZSk7CisKKwkJaWYgKHByaXYtPnJlYWR5KSB7CisJCQlydW5fcmVhZHkocHJpdik7CisJCX0gZWxzZSB7CisJCQkvKiBUaGVyZSBpcyBubyBtb3JlIGRhdGEgcHJlcGFyZWQgYnkgdGhlIHVzZXJzcGFjZS4KKwkJCSAqIFNldCBod19ydW5uaW5nID0gMCBhbmQgd2FpdCBmb3IgdGhlIG5leHQgdXNlcnNwYWNlCisJCQkgKiBraWNrLW9mZiAqLworCQkJc2hhcmVkLT5udW1faWRsZSsrOworCQkJc2hhcmVkLT5od19ydW5uaW5nID0gMDsKKworCQkJUURVTVAoIiAnLT4gSWRsZS4iKTsKKworCQkJLyogc2V0IHJpbmcgYnVmZmVyIGxlbmd0aCB0byB6ZXJvICovCisJCQlnY193cml0ZWwocHJpdiwgUkVHX0dDUkJMUiwgMCk7CisKKwkJCXdha2VfdXBfYWxsKCZwcml2LT53YWl0X2lkbGUpOworCQl9CisKKwkJc2hhcmVkLT5udW1fZG9uZSsrOworCX0gZWxzZSB7CisJCVFFUlJPUigiIFs/Pz9dIik7CisJCWR1bXBfd2hvbGVfc3RhdGUocHJpdik7CisJfQorCisJLyogQ2xlYXIgdGhlIGludGVycnVwdCAqLworCWdjX3dyaXRlbChwcml2LCBSRUdfR0NJU0NSLCBzdGF0dXMpOworCXNwaW5fdW5sb2NrKCZwcml2LT5zcGlubG9jayk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQKK3B4YTN4eF9nY3Vfd2FpdF9pZGxlKHN0cnVjdCBweGEzeHhfZ2N1X3ByaXYgKnByaXYpCit7CisJaW50IHJldCA9IDA7CisKKwlRRFVNUCgiV2FpdGluZyBmb3IgaWRsZS4uLiIpOworCisJLyogRG9lcyBub3QgbmVlZCB0byBiZSBhdG9taWMuIFRoZXJlJ3MgYSBsb2NrIGluIHVzZXIgc3BhY2UsCisJICogYnV0IGFueWhvdywgdGhpcyBpcyBqdXN0IGZvciBzdGF0aXN0aWNzLiAqLworCXByaXYtPnNoYXJlZC0+bnVtX3dhaXRfaWRsZSsrOworCisJd2hpbGUgKHByaXYtPnNoYXJlZC0+aHdfcnVubmluZykgeworCQlpbnQgbnVtID0gcHJpdi0+c2hhcmVkLT5udW1faW50ZXJydXB0czsKKwkJdTMyIHJiZXhociA9IGdjX3JlYWRsKHByaXYsIFJFR19HQ1JCRVhIUik7CisKKwkJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQocHJpdi0+d2FpdF9pZGxlLAorCQkJCQkhcHJpdi0+c2hhcmVkLT5od19ydW5uaW5nLCBIWio0KTsKKworCQlpZiAocmV0IDwgMCkKKwkJCWJyZWFrOworCisJCWlmIChyZXQgPiAwKQorCQkJY29udGludWU7CisKKwkJaWYgKGdjX3JlYWRsKHByaXYsIFJFR19HQ1JCRVhIUikgPT0gcmJleGhyICYmCisJCSAgICBwcml2LT5zaGFyZWQtPm51bV9pbnRlcnJ1cHRzID09IG51bSkgeworCQkJUUVSUk9SKCJUSU1FT1VUIik7CisJCQlyZXQgPSAtRVRJTUVET1VUOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlRRFVNUCgiZG9uZSIpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAorcHhhM3h4X2djdV93YWl0X2ZyZWUoc3RydWN0IHB4YTN4eF9nY3VfcHJpdiAqcHJpdikKK3sKKwlpbnQgcmV0ID0gMDsKKworCVFEVU1QKCJXYWl0aW5nIGZvciBmcmVlLi4uIik7CisKKwkvKiBEb2VzIG5vdCBuZWVkIHRvIGJlIGF0b21pYy4gVGhlcmUncyBhIGxvY2sgaW4gdXNlciBzcGFjZSwKKwkgKiBidXQgYW55aG93LCB0aGlzIGlzIGp1c3QgZm9yIHN0YXRpc3RpY3MuICovCisJcHJpdi0+c2hhcmVkLT5udW1fd2FpdF9mcmVlKys7CisKKwl3aGlsZSAoIXByaXYtPmZyZWUpIHsKKwkJdTMyIHJiZXhociA9IGdjX3JlYWRsKHByaXYsIFJFR19HQ1JCRVhIUik7CisKKwkJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQocHJpdi0+d2FpdF9mcmVlLAorCQkJCQkJICAgICAgIHByaXYtPmZyZWUsIEhaKjQpOworCisJCWlmIChyZXQgPCAwKQorCQkJYnJlYWs7CisKKwkJaWYgKHJldCA+IDApCisJCQljb250aW51ZTsKKworCQlpZiAoZ2NfcmVhZGwocHJpdiwgUkVHX0dDUkJFWEhSKSA9PSByYmV4aHIpIHsKKwkJCVFFUlJPUigiVElNRU9VVCIpOworCQkJcmV0ID0gLUVUSU1FRE9VVDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJUURVTVAoImRvbmUiKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIE1pc2MgZGV2aWNlIGxheWVyICovCisKK3N0YXRpYyBzc2l6ZV90CitweGEzeHhfZ2N1X21pc2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IGNoYXIgKmJ1ZmYsCisJCSAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpvZmZwKQoreworCWludCByZXQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgcHhhM3h4X2djdV9iYXRjaAkqYnVmZmVyOworCXN0cnVjdCBweGEzeHhfZ2N1X3ByaXYgKnByaXYgPQorCQljb250YWluZXJfb2YoZmlscC0+Zl9vcCwgc3RydWN0IHB4YTN4eF9nY3VfcHJpdiwgbWlzY19mb3BzKTsKKworCWludCB3b3JkcyA9IGNvdW50IC8gNDsKKworCS8qIERvZXMgbm90IG5lZWQgdG8gYmUgYXRvbWljLiBUaGVyZSdzIGEgbG9jayBpbiB1c2VyIHNwYWNlLAorCSAqIGJ1dCBhbnlob3csIHRoaXMgaXMganVzdCBmb3Igc3RhdGlzdGljcy4gKi8KKwlwcml2LT5zaGFyZWQtPm51bV93cml0ZXMrKzsKKworCXByaXYtPnNoYXJlZC0+bnVtX3dvcmRzICs9IHdvcmRzOworCisJLyogTGFzdCB3b3JkIHJlc2VydmVkIGZvciBiYXRjaCBidWZmZXIgZW5kIGNvbW1hbmQgKi8KKwlpZiAod29yZHMgPj0gUFhBM1hYX0dDVV9CQVRDSF9XT1JEUykKKwkJcmV0dXJuIC1FMkJJRzsKKworCS8qIFdhaXQgZm9yIGEgZnJlZSBidWZmZXIgKi8KKwlpZiAoIXByaXYtPmZyZWUpIHsKKwkJcmV0ID0gcHhhM3h4X2djdV93YWl0X2ZyZWUocHJpdik7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwkvKgorCSAqIEdldCBidWZmZXIgZnJvbSBmcmVlIGxpc3QKKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+c3BpbmxvY2ssIGZsYWdzKTsKKworCWJ1ZmZlciA9IHByaXYtPmZyZWU7CisJcHJpdi0+ZnJlZSA9IGJ1ZmZlci0+bmV4dDsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnNwaW5sb2NrLCBmbGFncyk7CisKKworCS8qIENvcHkgZGF0YSBmcm9tIHVzZXIgaW50byBidWZmZXIgKi8KKwlyZXQgPSBjb3B5X2Zyb21fdXNlcihidWZmZXItPnB0ciwgYnVmZiwgd29yZHMgKiA0KTsKKwlpZiAocmV0KSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5zcGlubG9jaywgZmxhZ3MpOworCQlidWZmZXItPm5leHQgPSBwcml2LT5mcmVlOworCQlwcml2LT5mcmVlID0gYnVmZmVyOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zcGlubG9jaywgZmxhZ3MpOworCQlyZXR1cm4gcmV0OworCX0KKworCWJ1ZmZlci0+bGVuZ3RoID0gd29yZHM7CisKKwkvKiBBcHBlbmQgYmF0Y2ggYnVmZmVyIGVuZCBjb21tYW5kICovCisJYnVmZmVyLT5wdHJbd29yZHNdID0gMHgwMTAwMDAwMDsKKworCS8qCisJICogQWRkIGJ1ZmZlciB0byByZWFkeSBsaXN0CisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnNwaW5sb2NrLCBmbGFncyk7CisKKwlidWZmZXItPm5leHQgPSBOVUxMOworCisJaWYgKHByaXYtPnJlYWR5KSB7CisJCUJVR19PTihwcml2LT5yZWFkeV9sYXN0ID09IE5VTEwpOworCisJCXByaXYtPnJlYWR5X2xhc3QtPm5leHQgPSBidWZmZXI7CisJfSBlbHNlCisJCXByaXYtPnJlYWR5ID0gYnVmZmVyOworCisJcHJpdi0+cmVhZHlfbGFzdCA9IGJ1ZmZlcjsKKworCWlmICghcHJpdi0+c2hhcmVkLT5od19ydW5uaW5nKQorCQlydW5fcmVhZHkocHJpdik7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zcGlubG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHdvcmRzICogNDsKK30KKworCitzdGF0aWMgbG9uZworcHhhM3h4X2djdV9taXNjX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBweGEzeHhfZ2N1X3ByaXYgKnByaXYgPQorCQljb250YWluZXJfb2YoZmlscC0+Zl9vcCwgc3RydWN0IHB4YTN4eF9nY3VfcHJpdiwgbWlzY19mb3BzKTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBQWEEzWFhfR0NVX0lPQ1RMX1JFU0VUOgorCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+c3BpbmxvY2ssIGZsYWdzKTsKKwkJcHhhM3h4X2djdV9yZXNldChwcml2KTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c3BpbmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIDA7CisKKwljYXNlIFBYQTNYWF9HQ1VfSU9DVExfV0FJVF9JRExFOgorCQlyZXR1cm4gcHhhM3h4X2djdV93YWl0X2lkbGUocHJpdik7CisJfQorCisJcmV0dXJuIC1FTk9TWVM7Cit9CisKK3N0YXRpYyBpbnQKK3B4YTN4eF9nY3VfbWlzY19tbWFwKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwl1bnNpZ25lZCBpbnQgc2l6ZSA9IHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydDsKKwlzdHJ1Y3QgcHhhM3h4X2djdV9wcml2ICpwcml2ID0KKwkJY29udGFpbmVyX29mKGZpbHAtPmZfb3AsIHN0cnVjdCBweGEzeHhfZ2N1X3ByaXYsIG1pc2NfZm9wcyk7CisKKwlzd2l0Y2ggKHZtYS0+dm1fcGdvZmYpIHsKKwljYXNlIDA6CisJCS8qIGhhbmQgb3V0IHRoZSBzaGFyZWQgZGF0YSBhcmVhICovCisJCWlmIChzaXplICE9IFNIQVJFRF9TSVpFKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJcmV0dXJuIGRtYV9tbWFwX2NvaGVyZW50KE5VTEwsIHZtYSwKKwkJCXByaXYtPnNoYXJlZCwgcHJpdi0+c2hhcmVkX3BoeXMsIHNpemUpOworCisJY2FzZSBTSEFSRURfU0laRSA+PiBQQUdFX1NISUZUOgorCQkvKiBoYW5kIG91dCB0aGUgTU1JTyBiYXNlIGZvciBkaXJlY3QgcmVnaXN0ZXIgYWNjZXNzCisJCSAqIGZyb20gdXNlcnNwYWNlICovCisJCWlmIChzaXplICE9IHJlc291cmNlX3NpemUocHJpdi0+cmVzb3VyY2VfbWVtKSkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCXZtYS0+dm1fZmxhZ3MgfD0gVk1fSU87CisJCXZtYS0+dm1fcGFnZV9wcm90ID0gcGdwcm90X25vbmNhY2hlZCh2bWEtPnZtX3BhZ2VfcHJvdCk7CisKKwkJcmV0dXJuIGlvX3JlbWFwX3Bmbl9yYW5nZSh2bWEsIHZtYS0+dm1fc3RhcnQsCisJCQkJcHJpdi0+cmVzb3VyY2VfbWVtLT5zdGFydCA+PiBQQUdFX1NISUZULAorCQkJCXNpemUsIHZtYS0+dm1fcGFnZV9wcm90KTsKKwl9CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworCisjaWZkZWYgUFhBM1hYX0dDVV9ERUJVR19USU1FUgorc3RhdGljIHN0cnVjdCB0aW1lcl9saXN0IHB4YTN4eF9nY3VfZGVidWdfdGltZXI7CisKK3N0YXRpYyB2b2lkIHB4YTN4eF9nY3VfZGVidWdfdGltZWRvdXQodW5zaWduZWQgbG9uZyBwdHIpCit7CisJc3RydWN0IHB4YTN4eF9nY3VfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgcHhhM3h4X2djdV9wcml2ICopIHB0cjsKKworCVFFUlJPUigiVGltZXIgRFVNUCIpOworCisJLyogaW5pdCB0aGUgdGltZXIgc3RydWN0dXJlICovCisJaW5pdF90aW1lcigmcHhhM3h4X2djdV9kZWJ1Z190aW1lcik7CisJcHhhM3h4X2djdV9kZWJ1Z190aW1lci5mdW5jdGlvbiA9IHB4YTN4eF9nY3VfZGVidWdfdGltZWRvdXQ7CisJcHhhM3h4X2djdV9kZWJ1Z190aW1lci5kYXRhID0gcHRyOworCXB4YTN4eF9nY3VfZGVidWdfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyA1KkhaOyAvKiBvbmUgc2Vjb25kICovCisKKwlhZGRfdGltZXIoJnB4YTN4eF9nY3VfZGVidWdfdGltZXIpOworfQorCitzdGF0aWMgdm9pZCBweGEzeHhfZ2N1X2luaXRfZGVidWdfdGltZXIodm9pZCkKK3sKKwlweGEzeHhfZ2N1X2RlYnVnX3RpbWVkb3V0KCh1bnNpZ25lZCBsb25nKSAmcHhhM3h4X2djdV9kZWJ1Z190aW1lcik7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHB4YTN4eF9nY3VfaW5pdF9kZWJ1Z190aW1lcih2b2lkKSB7fQorI2VuZGlmCisKK3N0YXRpYyBpbnQKK2FkZF9idWZmZXIoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LAorCSAgIHN0cnVjdCBweGEzeHhfZ2N1X3ByaXYgKnByaXYpCit7CisJc3RydWN0IHB4YTN4eF9nY3VfYmF0Y2ggKmJ1ZmZlcjsKKworCWJ1ZmZlciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBweGEzeHhfZ2N1X2JhdGNoKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWZmZXIpCisJCXJldHVybiAtRU5PTUVNOworCisJYnVmZmVyLT5wdHIgPSBkbWFfYWxsb2NfY29oZXJlbnQoJmRldi0+ZGV2LCBQWEEzWFhfR0NVX0JBVENIX1dPUkRTICogNCwKKwkJCQkJICZidWZmZXItPnBoeXMsIEdGUF9LRVJORUwpOworCWlmICghYnVmZmVyLT5wdHIpIHsKKwkJa2ZyZWUoYnVmZmVyKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJYnVmZmVyLT5uZXh0ID0gcHJpdi0+ZnJlZTsKKworCXByaXYtPmZyZWUgPSBidWZmZXI7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2ZyZWVfYnVmZmVycyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsCisJICAgICBzdHJ1Y3QgcHhhM3h4X2djdV9wcml2ICpwcml2KQoreworCXN0cnVjdCBweGEzeHhfZ2N1X2JhdGNoICpuZXh0LCAqYnVmZmVyID0gcHJpdi0+ZnJlZTsKKworCXdoaWxlIChidWZmZXIpIHsKKwkJbmV4dCA9IGJ1ZmZlci0+bmV4dDsKKworCQlkbWFfZnJlZV9jb2hlcmVudCgmZGV2LT5kZXYsIFBYQTNYWF9HQ1VfQkFUQ0hfV09SRFMgKiA0LAorCQkJCSAgYnVmZmVyLT5wdHIsIGJ1ZmZlci0+cGh5cyk7CisKKwkJa2ZyZWUoYnVmZmVyKTsKKworCQlidWZmZXIgPSBuZXh0OworCX0KKworCXByaXYtPmZyZWUgPSBOVUxMOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdAorcHhhM3h4X2djdV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJaW50IGksIHJldCwgaXJxOworCXN0cnVjdCByZXNvdXJjZSAqcjsKKwlzdHJ1Y3QgcHhhM3h4X2djdV9wcml2ICpwcml2OworCisJcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBweGEzeHhfZ2N1X3ByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXYpCisJCXJldHVybiAtRU5PTUVNOworCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQlyZXQgPSBhZGRfYnVmZmVyKGRldiwgcHJpdik7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIoJmRldi0+ZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIERNQSBtZW1vcnlcbiIpOworCQkJZ290byBlcnJfZnJlZV9wcml2OworCQl9CisJfQorCisJaW5pdF93YWl0cXVldWVfaGVhZCgmcHJpdi0+d2FpdF9pZGxlKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwcml2LT53YWl0X2ZyZWUpOworCXNwaW5fbG9ja19pbml0KCZwcml2LT5zcGlubG9jayk7CisKKwkvKiB3ZSBhbGxvY2F0ZSB0aGUgbWlzYyBkZXZpY2Ugc3RydWN0dXJlIGFzIHBhcnQgb2Ygb3VyIG93biBhbGxvY2F0aW9uLAorCSAqIHNvIHdlIGNhbiBnZXQgYSBwb2ludGVyIHRvIG91ciBwcml2IHN0cnVjdHVyZSBsYXRlciBvbiB3aXRoCisJICogY29udGFpbmVyX29mKCkuIFRoaXMgaXNuJ3QgcmVhbGx5IG5lY2Vzc2FyeSBhcyB3ZSBoYXZlIGEgZml4ZWQgbWlub3IKKwkgKiBudW1iZXIgYW55d2F5LCBidXQgdGhpcyBpcyB0byBhdm9pZCBzdGF0aWNzLiAqLworCisJcHJpdi0+bWlzY19mb3BzLm93bmVyCT0gVEhJU19NT0RVTEU7CisJcHJpdi0+bWlzY19mb3BzLndyaXRlCT0gcHhhM3h4X2djdV9taXNjX3dyaXRlOworCXByaXYtPm1pc2NfZm9wcy51bmxvY2tlZF9pb2N0bCA9IHB4YTN4eF9nY3VfbWlzY19pb2N0bDsKKwlwcml2LT5taXNjX2ZvcHMubW1hcAk9IHB4YTN4eF9nY3VfbWlzY19tbWFwOworCisJcHJpdi0+bWlzY19kZXYubWlub3IJPSBNSVNDREVWX01JTk9SLAorCXByaXYtPm1pc2NfZGV2Lm5hbWUJPSBEUlZfTkFNRSwKKwlwcml2LT5taXNjX2Rldi5mb3BzCT0gJnByaXYtPm1pc2NfZm9wcywKKworCS8qIHJlZ2lzdGVyIG1pc2MgZGV2aWNlICovCisJcmV0ID0gbWlzY19yZWdpc3RlcigmcHJpdi0+bWlzY19kZXYpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAibWlzY19yZWdpc3RlcigpIGZvciBtaW5vciAlZCBmYWlsZWRcbiIsCisJCQlNSVNDREVWX01JTk9SKTsKKwkJZ290byBlcnJfZnJlZV9wcml2OworCX0KKworCS8qIGhhbmRsZSBJTyByZXNvdXJjZXMgKi8KKwlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmIChyID09IE5VTEwpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJubyBJL08gbWVtb3J5IHJlc291cmNlIGRlZmluZWRcbiIpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGVycl9taXNjX2RlcmVnaXN0ZXI7CisJfQorCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oci0+c3RhcnQsIHJlc291cmNlX3NpemUociksIGRldi0+bmFtZSkpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVxdWVzdCBJL08gbWVtb3J5XG4iKTsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIGVycl9taXNjX2RlcmVnaXN0ZXI7CisJfQorCisJcHJpdi0+bW1pb19iYXNlID0gaW9yZW1hcF9ub2NhY2hlKHItPnN0YXJ0LCByZXNvdXJjZV9zaXplKHIpKTsKKwlpZiAoIXByaXYtPm1taW9fYmFzZSkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgImZhaWxlZCB0byBtYXAgSS9PIG1lbW9yeVxuIik7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBlcnJfZnJlZV9tZW1fcmVnaW9uOworCX0KKworCS8qIGFsbG9jYXRlIGRtYSBtZW1vcnkgKi8KKwlwcml2LT5zaGFyZWQgPSBkbWFfYWxsb2NfY29oZXJlbnQoJmRldi0+ZGV2LCBTSEFSRURfU0laRSwKKwkJCQkJICAmcHJpdi0+c2hhcmVkX3BoeXMsIEdGUF9LRVJORUwpOworCisJaWYgKCFwcml2LT5zaGFyZWQpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJmYWlsZWQgdG8gYWxsb2NhdGUgRE1BIG1lbW9yeVxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2ZyZWVfaW87CisJfQorCisJLyogZW5hYmxlIHRoZSBjbG9jayAqLworCXByaXYtPmNsayA9IGNsa19nZXQoJmRldi0+ZGV2LCBOVUxMKTsKKwlpZiAoSVNfRVJSKHByaXYtPmNsaykpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IGNsb2NrXG4iKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBlcnJfZnJlZV9kbWE7CisJfQorCisJcmV0ID0gY2xrX2VuYWJsZShwcml2LT5jbGspOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiZmFpbGVkIHRvIGVuYWJsZSBjbG9ja1xuIik7CisJCWdvdG8gZXJyX3B1dF9jbGs7CisJfQorCisJLyogcmVxdWVzdCB0aGUgSVJRICovCisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShkZXYsIDApOworCWlmIChpcnEgPCAwKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAibm8gSVJRIGRlZmluZWRcbiIpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGVycl9wdXRfY2xrOworCX0KKworCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgcHhhM3h4X2djdV9oYW5kbGVfaXJxLAorCQkJICBJUlFGX0RJU0FCTEVELCBEUlZfTkFNRSwgcHJpdik7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgInJlcXVlc3RfaXJxIGZhaWxlZFxuIik7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBlcnJfcHV0X2NsazsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIHByaXYpOworCXByaXYtPnJlc291cmNlX21lbSA9IHI7CisJcHhhM3h4X2djdV9yZXNldChwcml2KTsKKwlweGEzeHhfZ2N1X2luaXRfZGVidWdfdGltZXIoKTsKKworCWRldl9pbmZvKCZkZXYtPmRldiwgInJlZ2lzdGVyZWQgQDB4JXAsIERNQSAweCVwICglZCBieXRlcyksIElSUSAlZFxuIiwKKwkJCSh2b2lkICopIHItPnN0YXJ0LCAodm9pZCAqKSBwcml2LT5zaGFyZWRfcGh5cywKKwkJCVNIQVJFRF9TSVpFLCBpcnEpOworCXJldHVybiAwOworCitlcnJfcHV0X2NsazoKKwljbGtfZGlzYWJsZShwcml2LT5jbGspOworCWNsa19wdXQocHJpdi0+Y2xrKTsKKworZXJyX2ZyZWVfZG1hOgorCWRtYV9mcmVlX2NvaGVyZW50KCZkZXYtPmRldiwgU0hBUkVEX1NJWkUsCisJCQlwcml2LT5zaGFyZWQsIHByaXYtPnNoYXJlZF9waHlzKTsKKworZXJyX2ZyZWVfaW86CisJaW91bm1hcChwcml2LT5tbWlvX2Jhc2UpOworCitlcnJfZnJlZV9tZW1fcmVnaW9uOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihyLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyKSk7CisKK2Vycl9taXNjX2RlcmVnaXN0ZXI6CisJbWlzY19kZXJlZ2lzdGVyKCZwcml2LT5taXNjX2Rldik7CisKK2Vycl9mcmVlX3ByaXY6CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKwlmcmVlX2J1ZmZlcnMoZGV2LCBwcml2KTsKKwlrZnJlZShwcml2KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdAorcHhhM3h4X2djdV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBweGEzeHhfZ2N1X3ByaXYgKnByaXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCByZXNvdXJjZSAqciA9IHByaXYtPnJlc291cmNlX21lbTsKKworCXB4YTN4eF9nY3Vfd2FpdF9pZGxlKHByaXYpOworCisJbWlzY19kZXJlZ2lzdGVyKCZwcml2LT5taXNjX2Rldik7CisJZG1hX2ZyZWVfY29oZXJlbnQoJmRldi0+ZGV2LCBTSEFSRURfU0laRSwKKwkJCXByaXYtPnNoYXJlZCwgcHJpdi0+c2hhcmVkX3BoeXMpOworCWlvdW5tYXAocHJpdi0+bW1pb19iYXNlKTsKKwlyZWxlYXNlX21lbV9yZWdpb24oci0+c3RhcnQsIHJlc291cmNlX3NpemUocikpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisJY2xrX2Rpc2FibGUocHJpdi0+Y2xrKTsKKwlmcmVlX2J1ZmZlcnMoZGV2LCBwcml2KTsKKwlrZnJlZShwcml2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBweGEzeHhfZ2N1X2RyaXZlciA9IHsKKwkucHJvYmUJICA9IHB4YTN4eF9nY3VfcHJvYmUsCisJLnJlbW92ZQkgPSBfX2RldmV4aXRfcChweGEzeHhfZ2N1X3JlbW92ZSksCisJLmRyaXZlcgkgPSB7CisJCS5vd25lciAgPSBUSElTX01PRFVMRSwKKwkJLm5hbWUgICA9IERSVl9OQU1FLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdAorcHhhM3h4X2djdV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmcHhhM3h4X2djdV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQKK3B4YTN4eF9nY3VfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZweGEzeHhfZ2N1X2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHB4YTN4eF9nY3VfaW5pdCk7Cittb2R1bGVfZXhpdChweGEzeHhfZ2N1X2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIlBYQTN4eCBncmFwaGljcyBjb250cm9sbGVyIHVuaXQgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVNfTUlTQ0RFVihNSVNDREVWX01JTk9SKTsKK01PRFVMRV9BVVRIT1IoIkphbmluZSBLcm9wcCA8bmluQGRpcmVjdGZiLm9yZz4sICIKKwkJIkRlbmlzIE9saXZlciBLcm9wcCA8ZG9rQGRpcmVjdGZiLm9yZz4sICIKKwkJIkRhbmllbCBNYWNrIDxkYW5pZWxAY2FpYXEuZGU+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3B4YTN4eC1nY3UuaCBiL2RyaXZlcnMvdmlkZW8vcHhhM3h4LWdjdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0MjhlZDAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL3B4YTN4eC1nY3UuaApAQCAtMCwwICsxLDM4IEBACisjaWZuZGVmIF9fUFhBM1hYX0dDVV9IX18KKyNkZWZpbmUgX19QWEEzWFhfR0NVX0hfXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyogTnVtYmVyIG9mIDMyYml0IHdvcmRzIGluIGRpc3BsYXkgbGlzdCAocmluZyBidWZmZXIpLiAqLworI2RlZmluZSBQWEEzWFhfR0NVX0JVRkZFUl9XT1JEUyAgKCgyNTYgKiAxMDI0IC0gMjU2KSAvIDQpCisKKy8qIFRvIGJlIGluY3JlYXNlZCB3aGVuIGJyZWFraW5nIHRoZSBBQkkgKi8KKyNkZWZpbmUgUFhBM1hYX0dDVV9TSEFSRURfTUFHSUMgIDB4MzAwMDAwMDEKKworI2RlZmluZSBQWEEzWFhfR0NVX0JBVENIX1dPUkRTICAgODE5MgorCitzdHJ1Y3QgcHhhM3h4X2djdV9zaGFyZWQgeworCXUzMiAgICAgICAgICAgIGJ1ZmZlcltQWEEzWFhfR0NVX0JVRkZFUl9XT1JEU107CisKKwlib29sICAgICAgICAgICBod19ydW5uaW5nOworCisJdW5zaWduZWQgbG9uZyAgYnVmZmVyX3BoeXM7CisKKwl1bnNpZ25lZCBpbnQgICBudW1fd29yZHM7CisJdW5zaWduZWQgaW50ICAgbnVtX3dyaXRlczsKKwl1bnNpZ25lZCBpbnQgICBudW1fZG9uZTsKKwl1bnNpZ25lZCBpbnQgICBudW1faW50ZXJydXB0czsKKwl1bnNpZ25lZCBpbnQgICBudW1fd2FpdF9pZGxlOworCXVuc2lnbmVkIGludCAgIG51bV93YWl0X2ZyZWU7CisJdW5zaWduZWQgaW50ICAgbnVtX2lkbGU7CisKKwl1MzIgICAgICAgICAgICBtYWdpYzsKK307CisKKy8qIEluaXRpYWxpemF0aW9uIGFuZCBzeW5jaHJvbml6YXRpb24uCisgKiBIYXJkd2FyZSBpcyBzdGFydGVkIHVwb24gd3JpdGUoKS4gKi8KKyNkZWZpbmUgUFhBM1hYX0dDVV9JT0NUTF9SRVNFVAkJX0lPKCdHJywgMCkKKyNkZWZpbmUgUFhBM1hYX0dDVV9JT0NUTF9XQUlUX0lETEUJX0lPKCdHJywgMikKKworI2VuZGlmIC8qIF9fUFhBM1hYX0dDVV9IX18gKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zMWQxM3h4eGZiLmMgYi9kcml2ZXJzL3ZpZGVvL3MxZDEzeHh4ZmIuYwppbmRleCBhNjI0N2ZjLi4yOGIxYzZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3MxZDEzeHh4ZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3MxZDEzeHh4ZmIuYwpAQCAtNDEwLDI4ICs0MTAsNiBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoqCi0gKglibHRiaXRfd2FpdF9iaXRzZXQgLSB3YWl0cyBmb3IgY2hhbmdlIGluIHJlZ2lzdGVyIHZhbHVlCi0gKglAaW5mbyA6IGZyYW1lYnVmZmVyIHN0cnVjdHVyZQotICoJQGJpdCAgOiB2YWx1ZSBleHBlY3RlZCBpbiByZWdpc3RlcgotICoJQHRpbWVvdXQgOiAuLi4KLSAqCi0gKgl3YWl0cyB1bnRpbCB2YWx1ZSBjaGFuZ2VzIElOVE8gYml0Ci0gKi8KLXN0YXRpYyB1OAotYmx0Yml0X3dhaXRfYml0c2V0KHN0cnVjdCBmYl9pbmZvICppbmZvLCB1OCBiaXQsIGludCB0aW1lb3V0KQotewotCXdoaWxlICghKHMxZDEzeHh4ZmJfcmVhZHJlZyhpbmZvLT5wYXIsIFMxRFJFR19CQkxUX0NUTDApICYgYml0KSkgewotCQl1ZGVsYXkoMTApOwotCQlpZiAoIS0tdGltZW91dCkgewotCQkJZGJnX2JsaXQoIndhaXRfYml0c2V0IHRpbWVvdXRcbiIpOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gdGltZW91dDsKLX0KLQotLyoqCiAgKglibHRiaXRfd2FpdF9iaXRjbGVhciAtIHdhaXRzIGZvciBjaGFuZ2UgaW4gcmVnaXN0ZXIgdmFsdWUKICAqCUBpbmZvIDogZnJhbWJ1ZmZlciBzdHJ1Y3R1cmUKICAqCUBiaXQgIDogdmFsdWUgY3VycmVudGx5IGluIHJlZ2lzdGVyCkBAIC00NTQsMzQgKzQzMiw2IEBACiAJcmV0dXJuIHRpbWVvdXQ7CiB9CiAKLS8qKgotICoJYmx0Yml0X2ZpZm9fc3RhdHVzIC0gY2hlY2tzIHRoZSBjdXJyZW50IHN0YXR1cyBvZiB0aGUgZmlmbwotICoJQGluZm8gOiBmcmFtZWJ1ZmZlciBzdHJ1Y3R1cmUKLSAqCi0gKglyZXR1cm5zIG51bWJlciBvZiBmcmVlIHdvcmRzIGluIGJ1ZmZlcgotICovCi1zdGF0aWMgdTgKLWJsdGJpdF9maWZvX3N0YXR1cyhzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKLXsKLQl1OCBzdGF0dXM7Ci0KLQlzdGF0dXMgPSBzMWQxM3h4eGZiX3JlYWRyZWcoaW5mby0+cGFyLCBTMURSRUdfQkJMVF9DVEwwKTsKLQotCS8qIGl0cyBlbXB0eSBzbyByb29tIGZvciAxNiB3b3JkcyAqLwotCWlmIChzdGF0dXMgJiBCQkxUX0ZJRk9fRU1QVFkpCi0JCXJldHVybiAxNjsKLQotCS8qIGl0cyBmdWxsIHNvIHdlIGRvbnQgd2FudCB0byBhZGQgKi8KLQlpZiAoc3RhdHVzICYgQkJMVF9GSUZPX0ZVTEwpCi0JCXJldHVybiAwOwotCi0JLyogaXRzIGF0bGVhc3QgaGFsZiBmdWxsIGJ1dCB3ZSBjYW4gYWRkIG9uZSBhdGxlYXN0ICovCi0JaWYgKHN0YXR1cyAmIEJCTFRfRklGT19OT1RfRlVMTCkKLQkJcmV0dXJuIDE7Ci0KLQlyZXR1cm4gMDsKLX0KLQogLyoKICAqCXMxZDEzeHh4ZmJfYml0Ymx0X2NvcHlhcmVhIC0gYWNjZWxlcmF0ZWQgY29weWFyZWEgZnVuY3Rpb24KICAqCUBpbmZvIDogZnJhbWVidWZmZXIgc3RydWN0dXJlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3MzYy1mYi5jIGIvZHJpdmVycy92aWRlby9zM2MtZmIuYwppbmRleCBmOWFjYTlkLi44M2NlOWEwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zM2MtZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3MzYy1mYi5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgogCiAjaW5jbHVkZSA8bWFjaC9tYXAuaD4KICNpbmNsdWRlIDxwbGF0L3JlZ3MtZmItdjQuaD4KQEAgLTEwMTMsOCArMTAxNCwzMCBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgczNjX2ZiX29wZW4oc3RydWN0IGZiX2luZm8gKmluZm8sIGludCB1c2VyKQoreworCXN0cnVjdCBzM2NfZmJfd2luICp3aW4gPSBpbmZvLT5wYXI7CisJc3RydWN0IHMzY19mYiAqc2ZiID0gd2luLT5wYXJlbnQ7CisKKwlwbV9ydW50aW1lX2dldF9zeW5jKHNmYi0+ZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHMzY19mYl9yZWxlYXNlKHN0cnVjdCBmYl9pbmZvICppbmZvLCBpbnQgdXNlcikKK3sKKwlzdHJ1Y3QgczNjX2ZiX3dpbiAqd2luID0gaW5mby0+cGFyOworCXN0cnVjdCBzM2NfZmIgKnNmYiA9IHdpbi0+cGFyZW50OworCisJcG1fcnVudGltZV9wdXRfc3luYyhzZmItPmRldik7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCBmYl9vcHMgczNjX2ZiX29wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLmZiX29wZW4JPSBzM2NfZmJfb3BlbiwKKwkuZmJfcmVsZWFzZQk9IHMzY19mYl9yZWxlYXNlLAogCS5mYl9jaGVja192YXIJPSBzM2NfZmJfY2hlY2tfdmFyLAogCS5mYl9zZXRfcGFyCT0gczNjX2ZiX3NldF9wYXIsCiAJLmZiX2JsYW5rCT0gczNjX2ZiX2JsYW5rLApAQCAtMTMyMiw2ICsxMzQ1LDggQEAKIAogCWNsa19lbmFibGUoc2ZiLT5idXNfY2xrKTsKIAorCXBtX3J1bnRpbWVfZW5hYmxlKHNmYi0+ZGV2KTsKKwogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJaWYgKCFyZXMpIHsKIAkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZmluZCByZWdpc3RlcnNcbiIpOwpAQCAtMTM2MCw2ICsxMzg1LDkgQEAKIAogCWRldl9kYmcoZGV2LCAiZ290IHJlc291cmNlcyAocmVncyAlcCksIHByb2Jpbmcgd2luZG93c1xuIiwgc2ZiLT5yZWdzKTsKIAorCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHNmYik7CisJcG1fcnVudGltZV9nZXRfc3luYyhzZmItPmRldik7CisKIAkvKiBzZXR1cCBncGlvIGFuZCBvdXRwdXQgcG9sYXJpdHkgY29udHJvbHMgKi8KIAogCXBkLT5zZXR1cF9ncGlvKCk7CkBAIC0xNDAwLDYgKzE0MjgsNyBAQAogCX0KIAogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHNmYik7CisJcG1fcnVudGltZV9wdXRfc3luYyhzZmItPmRldik7CiAKIAlyZXR1cm4gMDsKIApAQCAtMTQzNCw2ICsxNDYzLDggQEAKIAlzdHJ1Y3QgczNjX2ZiICpzZmIgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlpbnQgd2luOwogCisJcG1fcnVudGltZV9nZXRfc3luYyhzZmItPmRldik7CisKIAlmb3IgKHdpbiA9IDA7IHdpbiA8IFMzQ19GQl9NQVhfV0lOOyB3aW4rKykKIAkJaWYgKHNmYi0+d2luZG93c1t3aW5dKQogCQkJczNjX2ZiX3JlbGVhc2Vfd2luKHNmYiwgc2ZiLT53aW5kb3dzW3dpbl0pOwpAQCAtMTQ1MCwxMiArMTQ4MSwxNiBAQAogCiAJa2ZyZWUoc2ZiKTsKIAorCXBtX3J1bnRpbWVfcHV0X3N5bmMoc2ZiLT5kZXYpOworCXBtX3J1bnRpbWVfZGlzYWJsZShzZmItPmRldik7CisKIAlyZXR1cm4gMDsKIH0KIAogI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBzM2NfZmJfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHMzY19mYl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJc3RydWN0IHMzY19mYiAqc2ZiID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IHMzY19mYl93aW4gKndpbjsKIAlpbnQgd2luX25vOwpAQCAtMTQ3Myw4ICsxNTA4LDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzM2NfZmJfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IHMzY19mYl9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogeworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgczNjX2ZiICpzZmIgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgczNjX2ZiX3BsYXRkYXRhICpwZCA9IHNmYi0+cGRhdGE7CiAJc3RydWN0IHMzY19mYl93aW4gKndpbjsKQEAgLTE1MDksOSArMTU0NSw3MCBAQAogCiAJcmV0dXJuIDA7CiB9CisKK2ludCBzM2NfZmJfcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IHMzY19mYiAqc2ZiID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHMzY19mYl93aW4gKndpbjsKKwlpbnQgd2luX25vOworCisJZm9yICh3aW5fbm8gPSBTM0NfRkJfTUFYX1dJTiAtIDE7IHdpbl9ubyA+PSAwOyB3aW5fbm8tLSkgeworCQl3aW4gPSBzZmItPndpbmRvd3Nbd2luX25vXTsKKwkJaWYgKCF3aW4pCisJCQljb250aW51ZTsKKworCQkvKiB1c2UgdGhlIGJsYW5rIGZ1bmN0aW9uIHRvIHB1c2ggaW50byBwb3dlci1kb3duICovCisJCXMzY19mYl9ibGFuayhGQl9CTEFOS19QT1dFUkRPV04sIHdpbi0+ZmJpbmZvKTsKKwl9CisKKwljbGtfZGlzYWJsZShzZmItPmJ1c19jbGspOworCXJldHVybiAwOworfQorCitpbnQgczNjX2ZiX3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IHMzY19mYiAqc2ZiID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHMzY19mYl9wbGF0ZGF0YSAqcGQgPSBzZmItPnBkYXRhOworCXN0cnVjdCBzM2NfZmJfd2luICp3aW47CisJaW50IHdpbl9ubzsKKworCWNsa19lbmFibGUoc2ZiLT5idXNfY2xrKTsKKworCS8qIHNldHVwIHJlZ2lzdGVycyAqLworCXdyaXRlbChwZC0+dmlkY29uMSwgc2ZiLT5yZWdzICsgVklEQ09OMSk7CisKKwkvKiB6ZXJvIGFsbCB3aW5kb3dzIGJlZm9yZSB3ZSBkbyBhbnl0aGluZyAqLworCWZvciAod2luX25vID0gMDsgd2luX25vIDwgc2ZiLT52YXJpYW50Lm5yX3dpbmRvd3M7IHdpbl9ubysrKQorCQlzM2NfZmJfY2xlYXJfd2luKHNmYiwgd2luX25vKTsKKworCWZvciAod2luX25vID0gMDsgd2luX25vIDwgc2ZiLT52YXJpYW50Lm5yX3dpbmRvd3MgLSAxOyB3aW5fbm8rKykgeworCQl2b2lkIF9faW9tZW0gKnJlZ3MgPSBzZmItPnJlZ3MgKyBzZmItPnZhcmlhbnQua2V5Y29uOworCisJCXJlZ3MgKz0gKHdpbl9ubyAqIDgpOworCQl3cml0ZWwoMHhmZmZmZmYsIHJlZ3MgKyBXS0VZQ09OMCk7CisJCXdyaXRlbCgweGZmZmZmZiwgcmVncyArIFdLRVlDT04xKTsKKwl9CisKKwkvKiByZXN0b3JlIGZyYW1lYnVmZmVycyAqLworCWZvciAod2luX25vID0gMDsgd2luX25vIDwgUzNDX0ZCX01BWF9XSU47IHdpbl9ubysrKSB7CisJCXdpbiA9IHNmYi0+d2luZG93c1t3aW5fbm9dOworCQlpZiAoIXdpbikKKwkJCWNvbnRpbnVlOworCisJCWRldl9kYmcoJnBkZXYtPmRldiwgInJlc3VtaW5nIHdpbmRvdyAlZFxuIiwgd2luX25vKTsKKwkJczNjX2ZiX3NldF9wYXIod2luLT5mYmluZm8pOworCX0KKworCXJldHVybiAwOworfQorCiAjZWxzZQogI2RlZmluZSBzM2NfZmJfc3VzcGVuZCBOVUxMCiAjZGVmaW5lIHMzY19mYl9yZXN1bWUgIE5VTEwKKyNkZWZpbmUgczNjX2ZiX3J1bnRpbWVfc3VzcGVuZCBOVUxMCisjZGVmaW5lIHMzY19mYl9ydW50aW1lX3Jlc3VtZSBOVUxMCiAjZW5kaWYKIAogCkBAIC0xNzEwLDE1ICsxODA3LDIxIEBACiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwbGF0Zm9ybSwgczNjX2ZiX2RyaXZlcl9pZHMpOwogCitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgczNjZmJfcG1fb3BzID0geworCS5zdXNwZW5kCT0gczNjX2ZiX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBzM2NfZmJfcmVzdW1lLAorCS5ydW50aW1lX3N1c3BlbmQJPSBzM2NfZmJfcnVudGltZV9zdXNwZW5kLAorCS5ydW50aW1lX3Jlc3VtZQkJPSBzM2NfZmJfcnVudGltZV9yZXN1bWUsCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzM2NfZmJfZHJpdmVyID0gewogCS5wcm9iZQkJPSBzM2NfZmJfcHJvYmUsCiAJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChzM2NfZmJfcmVtb3ZlKSwKLQkuc3VzcGVuZAk9IHMzY19mYl9zdXNwZW5kLAotCS5yZXN1bWUJCT0gczNjX2ZiX3Jlc3VtZSwKIAkuaWRfdGFibGUJPSBzM2NfZmJfZHJpdmVyX2lkcywKIAkuZHJpdmVyCQk9IHsKIAkJLm5hbWUJPSAiczNjLWZiIiwKIAkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5wbQk9ICZzM2NmYl9wbV9vcHMsCiAJfSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vc2hfbWlwaV9kc2kuYyBiL2RyaXZlcnMvdmlkZW8vc2hfbWlwaV9kc2kuYwppbmRleCAzZjNkNDMxMDMuLjI0NjQwYzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vc2hfbWlwaV9kc2kuYworKysgYi9kcml2ZXJzL3ZpZGVvL3NoX21pcGlfZHNpLmMKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CkBAIC0yMSwxOCArMjIsNDAgQEAKICNpbmNsdWRlIDx2aWRlby9zaF9taXBpX2RzaS5oPgogI2luY2x1ZGUgPHZpZGVvL3NoX21vYmlsZV9sY2RjLmg+CiAKLSNkZWZpbmUgQ01UU1JUQ1RSCTB4ODBkMAotI2RlZmluZSBDTVRTUlRSRVEJMHg4MDcwCi0KKyNkZWZpbmUgU1lTQ1RSTAkJMHgwMDAwCisjZGVmaW5lIFNZU0NPTkYJCTB4MDAwNAorI2RlZmluZSBUSU1TRVQJCTB4MDAwOAorI2RlZmluZSBSRVNSRVFTRVQwCTB4MDAxOAorI2RlZmluZSBSRVNSRVFTRVQxCTB4MDAxYworI2RlZmluZSBIU1RUT1ZTRVQJMHgwMDIwCisjZGVmaW5lIExQUlRPVlNFVAkweDAwMjQKKyNkZWZpbmUgVEFUT1ZTRVQJMHgwMDI4CisjZGVmaW5lIFBSVE9WU0VUCTB4MDAyYworI2RlZmluZSBEU0lDVFJMCQkweDAwMzAKICNkZWZpbmUgRFNJSU5URQkJMHgwMDYwCisjZGVmaW5lIFBIWUNUUkwJCTB4MDA3MAorCisvKiByZWxhdGl2ZSB0byBsaW5rYmFzZSAqLworI2RlZmluZSBEVENUUgkJMHgwMDAwCisjZGVmaW5lIFZNQ1RSMQkJMHgwMDIwCisjZGVmaW5lIFZNQ1RSMgkJMHgwMDI0CisjZGVmaW5lIFZNTEVOMQkJMHgwMDI4CisjZGVmaW5lIENNVFNSVFJFUQkweDAwNzAKKyNkZWZpbmUgQ01UU1JUQ1RSCTB4MDBkMAogCiAvKiBFLmcuLCBzaDczNzIgaGFzIDIgTUlQSS1EU0lzIC0gb25lIGZvciBlYWNoIExDREMgKi8KICNkZWZpbmUgTUFYX1NIX01JUElfRFNJIDIKIAogc3RydWN0IHNoX21pcGkgewogCXZvaWQgX19pb21lbQkqYmFzZTsKKwl2b2lkIF9faW9tZW0JKmxpbmtiYXNlOwogCXN0cnVjdCBjbGsJKmRzaXRfY2xrOwogCXN0cnVjdCBjbGsJKmRzaXBfY2xrOworCXN0cnVjdCBkZXZpY2UJKmRldjsKKworCXZvaWQJKm5leHRfYm9hcmRfZGF0YTsKKwl2b2lkCSgqbmV4dF9kaXNwbGF5X29uKSh2b2lkICpib2FyZF9kYXRhLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7CisJdm9pZAkoKm5leHRfZGlzcGxheV9vZmYpKHZvaWQgKmJvYXJkX2RhdGEpOwogfTsKIAogc3RhdGljIHN0cnVjdCBzaF9taXBpICptaXBpX2RzaVtNQVhfU0hfTUlQSV9EU0ldOwpAQCAtNTUsMTAgKzc4LDEwIEBACiAJaW50IGNudCA9IDEwMDsKIAogCS8qIHRyYW5zbWl0IGEgc2hvcnQgcGFja2V0IHRvIExDRCBwYW5lbCAqLwotCWlvd3JpdGUzMigxIHwgZGF0YSwgbWlwaS0+YmFzZSArIDB4ODBkMCk7IC8qIENNVFNSVENUUiAqLwotCWlvd3JpdGUzMigxLCBtaXBpLT5iYXNlICsgMHg4MDcwKTsgLyogQ01UU1JUUkVRICovCisJaW93cml0ZTMyKDEgfCBkYXRhLCBtaXBpLT5saW5rYmFzZSArIENNVFNSVENUUik7CisJaW93cml0ZTMyKDEsIG1pcGktPmxpbmtiYXNlICsgQ01UU1JUUkVRKTsKIAotCXdoaWxlICgoaW9yZWFkMzIobWlwaS0+YmFzZSArIDB4ODA3MCkgJiAxKSAmJiAtLWNudCkKKwl3aGlsZSAoKGlvcmVhZDMyKG1pcGktPmxpbmtiYXNlICsgQ01UU1JUUkVRKSAmIDEpICYmIC0tY250KQogCQl1ZGVsYXkoMSk7CiAKIAlyZXR1cm4gY250ID8gMCA6IC1FVElNRURPVVQ7CkBAIC05MCw3ICsxMTMsNyBAQAogCSAqIGVuYWJsZSBMQ0RDIGRhdGEgdHgsIHRyYW5zaXRpb24gdG8gTFBTIGFmdGVyIGNvbXBsZXRpb24gb2YgZWFjaCBIUwogCSAqIHBhY2tldAogCSAqLwotCWlvd3JpdGUzMigweDAwMDAwMDAyIHwgZW5hYmxlLCBtaXBpLT5iYXNlICsgMHg4MDAwKTsgLyogRFRDVFIgKi8KKwlpb3dyaXRlMzIoMHgwMDAwMDAwMiB8IGVuYWJsZSwgbWlwaS0+bGlua2Jhc2UgKyBEVENUUik7CiB9CiAKIHN0YXRpYyB2b2lkIHNoX21pcGlfc2h1dGRvd24oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKQEAgLTEwNCwxNCArMTI3LDIyIEBACiB7CiAJc3RydWN0IHNoX21pcGkgKm1pcGkgPSBhcmc7CiAKKwlwbV9ydW50aW1lX2dldF9zeW5jKG1pcGktPmRldik7CiAJc2hfbWlwaV9kc2lfZW5hYmxlKG1pcGksIHRydWUpOworCisJaWYgKG1pcGktPm5leHRfZGlzcGxheV9vbikKKwkJbWlwaS0+bmV4dF9kaXNwbGF5X29uKG1pcGktPm5leHRfYm9hcmRfZGF0YSwgaW5mbyk7CiB9CiAKIHN0YXRpYyB2b2lkIG1pcGlfZGlzcGxheV9vZmYodm9pZCAqYXJnKQogewogCXN0cnVjdCBzaF9taXBpICptaXBpID0gYXJnOwogCisJaWYgKG1pcGktPm5leHRfZGlzcGxheV9vZmYpCisJCW1pcGktPm5leHRfZGlzcGxheV9vZmYobWlwaS0+bmV4dF9ib2FyZF9kYXRhKTsKKwogCXNoX21pcGlfZHNpX2VuYWJsZShtaXBpLCBmYWxzZSk7CisJcG1fcnVudGltZV9wdXQobWlwaS0+ZGV2KTsKIH0KIAogc3RhdGljIGludCBfX2luaXQgc2hfbWlwaV9zZXR1cChzdHJ1Y3Qgc2hfbWlwaSAqbWlwaSwKQEAgLTExOSw4ICsxNTAsNyBAQAogewogCXZvaWQgX19pb21lbSAqYmFzZSA9IG1pcGktPmJhc2U7CiAJc3RydWN0IHNoX21vYmlsZV9sY2RjX2NoYW5fY2ZnICpjaCA9IHBkYXRhLT5sY2RfY2hhbjsKLQl1MzIgcGN0eXBlLCBkYXRhdHlwZSwgcGl4Zm10OwotCXUzMiBsaW5lbGVuZ3RoOworCXUzMiBwY3R5cGUsIGRhdGF0eXBlLCBwaXhmbXQsIGxpbmVsZW5ndGgsIHZtY3RyMiA9IDB4MDBlMDAwMDA7CiAJYm9vbCB5dXY7CiAKIAkvKgpAQCAtMjIzLDEwICsyNTMsMTAgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiByZXNldCBEU0kgbGluayAqLwotCWlvd3JpdGUzMigweDAwMDAwMDAxLCBiYXNlKTsgLyogU1lTQ1RSTCAqLworCWlvd3JpdGUzMigweDAwMDAwMDAxLCBiYXNlICsgU1lTQ1RSTCk7CiAJLyogSG9sZCByZXNldCBmb3IgMTAwIGN5Y2xlcyBvZiB0aGUgc2xvd2VzdCBvZiBidXMsIEhTIGJ5dGUgYW5kIExQIGNsb2NrICovCiAJdWRlbGF5KDUwKTsKLQlpb3dyaXRlMzIoMHgwMDAwMDAwMCwgYmFzZSk7IC8qIFNZU0NUUkwgKi8KKwlpb3dyaXRlMzIoMHgwMDAwMDAwMCwgYmFzZSArIFNZU0NUUkwpOwogCiAJLyogc2V0dXAgRFNJIGxpbmsgKi8KIApAQCAtMjM4LDcgKzI2OCw3IEBACiAJICoJRUNDIGNoZWNrIGVuYWJsZQogCSAqIGFkZGl0aW9uYWxseSBlbmFibGUgZmlyc3QgdHdvIGxhbmVzCiAJICovCi0JaW93cml0ZTMyKDB4MDAwMDM3MDMsIGJhc2UgKyAweDA0KTsgLyogU1lTQ09ORiAqLworCWlvd3JpdGUzMigweDAwMDAzNzAzLCBiYXNlICsgU1lTQ09ORik7CiAJLyoKIAkgKiBUX3dha2V1cCA9IDB4NzAwMAogCSAqIFRfaHMtdHJhaWwgPSAzCkBAIC0yNDYsMjggKzI3NiwyOCBAQAogCSAqIFRfY2xrLXRyYWlsID0gMwogCSAqIFRfY2xrLXByZXBhcmUgPSAyCiAJICovCi0JaW93cml0ZTMyKDB4NzAwMDMzMzIsIGJhc2UgKyAweDA4KTsgLyogVElNU0VUICovCisJaW93cml0ZTMyKDB4NzAwMDMzMzIsIGJhc2UgKyBUSU1TRVQpOwogCS8qIG5vIHJlc3BvbnNlcyByZXF1ZXN0ZWQgKi8KLQlpb3dyaXRlMzIoMHgwMDAwMDAwMCwgYmFzZSArIDB4MTgpOyAvKiBSRVNSRVFTRVQwICovCisJaW93cml0ZTMyKDB4MDAwMDAwMDAsIGJhc2UgKyBSRVNSRVFTRVQwKTsKIAkvKiByZXF1ZXN0IHJlc3BvbnNlIHRvIHBhY2tldHMgb2YgdHlwZSAweDI4ICovCi0JaW93cml0ZTMyKDB4MDAwMDAxMDAsIGJhc2UgKyAweDFjKTsgLyogUkVTUkVRU0VUMSAqLworCWlvd3JpdGUzMigweDAwMDAwMTAwLCBiYXNlICsgUkVTUkVRU0VUMSk7CiAJLyogSGlnaC1zcGVlZCB0cmFuc21pc3Npb24gdGltZW91dCwgZGVmYXVsdCAweGZmZmZmZmZmICovCi0JaW93cml0ZTMyKDB4MGZmZmZmZmYsIGJhc2UgKyAweDIwKTsgLyogSFNUVE9WU0VUICovCisJaW93cml0ZTMyKDB4MGZmZmZmZmYsIGJhc2UgKyBIU1RUT1ZTRVQpOwogCS8qIExQIHJlY2VwdGlvbiB0aW1lb3V0LCBkZWZhdWx0IDB4ZmZmZmZmZmYgKi8KLQlpb3dyaXRlMzIoMHgwZmZmZmZmZiwgYmFzZSArIDB4MjQpOyAvKiBMUFJUT1ZTRVQgKi8KKwlpb3dyaXRlMzIoMHgwZmZmZmZmZiwgYmFzZSArIExQUlRPVlNFVCk7CiAJLyogVHVybi1hcm91bmQgdGltZW91dCwgZGVmYXVsdCAweGZmZmZmZmZmICovCi0JaW93cml0ZTMyKDB4MGZmZmZmZmYsIGJhc2UgKyAweDI4KTsgLyogVEFUT1ZTRVQgKi8KKwlpb3dyaXRlMzIoMHgwZmZmZmZmZiwgYmFzZSArIFRBVE9WU0VUKTsKIAkvKiBQZXJpcGhlcmFsIHJlc2V0IHRpbWVvdXQsIGRlZmF1bHQgMHhmZmZmZmZmZiAqLwotCWlvd3JpdGUzMigweDBmZmZmZmZmLCBiYXNlICsgMHgyYyk7IC8qIFBSVE9WU0VUICovCisJaW93cml0ZTMyKDB4MGZmZmZmZmYsIGJhc2UgKyBQUlRPVlNFVCk7CiAJLyogRW5hYmxlIHRpbWVvdXQgY291bnRlcnMgKi8KLQlpb3dyaXRlMzIoMHgwMDAwMGYwMCwgYmFzZSArIDB4MzApOyAvKiBEU0lDVFJMICovCisJaW93cml0ZTMyKDB4MDAwMDBmMDAsIGJhc2UgKyBEU0lDVFJMKTsKIAkvKiBJbnRlcnJ1cHRzIG5vdCB1c2VkLCBkaXNhYmxlIGFsbCAqLwogCWlvd3JpdGUzMigwLCBiYXNlICsgRFNJSU5URSk7CiAJLyogRFNJLVR4IGJpYXMgb24gKi8KLQlpb3dyaXRlMzIoMHgwMDAwMDAwMSwgYmFzZSArIDB4NzApOyAvKiBQSFlDVFJMICovCisJaW93cml0ZTMyKDB4MDAwMDAwMDEsIGJhc2UgKyBQSFlDVFJMKTsKIAl1ZGVsYXkoMjAwKTsKIAkvKiBEZWFzc2VydCByZXNldHMsIHBvd2VyIG9uLCBzZXQgbXVsdGlwbGllciAqLwotCWlvd3JpdGUzMigweDAzMDcwYjAxLCBiYXNlICsgMHg3MCk7IC8qIFBIWUNUUkwgKi8KKwlpb3dyaXRlMzIoMHgwMzA3MGIwMSwgYmFzZSArIFBIWUNUUkwpOwogCiAJLyogc2V0dXAgbC1icmlkZ2UgKi8KIApAQCAtMjc1LDIwICszMDUsMjggQEAKIAkgKiBFbmFibGUgdHJhbnNtaXNzaW9uIG9mIGFsbCBwYWNrZXRzLAogCSAqIHRyYW5zbWl0IExQUyBhZnRlciBlYWNoIEhTIHBhY2tldCBjb21wbGV0aW9uCiAJICovCi0JaW93cml0ZTMyKDB4MDAwMDAwMDYsIGJhc2UgKyAweDgwMDApOyAvKiBEVENUUiAqLworCWlvd3JpdGUzMigweDAwMDAwMDA2LCBtaXBpLT5saW5rYmFzZSArIERUQ1RSKTsKIAkvKiBWU1lOQyB3aWR0aCA9IDIgKDw8IDE3KSAqLwotCWlvd3JpdGUzMigweDAwMDQwMDAwIHwgKHBjdHlwZSA8PCAxMikgfCBkYXRhdHlwZSwgYmFzZSArIDB4ODAyMCk7IC8qIFZNQ1RSMSAqLworCWlvd3JpdGUzMigoY2gtPmxjZF9jZmdbMF0udnN5bmNfbGVuIDw8IHBkYXRhLT52c3lud19vZmZzZXQpIHwKKwkJICAocGRhdGEtPmNsa3NyYyA8PCAxNikgfCAocGN0eXBlIDw8IDEyKSB8IGRhdGF0eXBlLAorCQkgIG1pcGktPmxpbmtiYXNlICsgVk1DVFIxKTsKKwogCS8qCiAJICogTm9uLWJ1cnN0IG1vZGUgd2l0aCBzeW5jIHB1bHNlczogVlNFIGFuZCBIU0UgYXJlIG91dHB1dCwKIAkgKiBIU0EgcGVyaW9kIGFsbG93ZWQsIG5vIGNvbW1hbmRzIGluIExQCiAJICovCi0JaW93cml0ZTMyKDB4MDBlMDAwMDAsIGJhc2UgKyAweDgwMjQpOyAvKiBWTUNUUjIgKi8KKwlpZiAocGRhdGEtPmZsYWdzICYgU0hfTUlQSV9EU0lfSFNBQk0pCisJCXZtY3RyMiB8PSAweDIwOworCWlmIChwZGF0YS0+ZmxhZ3MgJiBTSF9NSVBJX0RTSV9IU1BCTSkKKwkJdm1jdHIyIHw9IDB4MTA7CisJaW93cml0ZTMyKHZtY3RyMiwgbWlwaS0+bGlua2Jhc2UgKyBWTUNUUjIpOworCiAJLyoKIAkgKiAweDY2MCA9IDE2MzIgYnl0ZXMgcGVyIGxpbmUgKFJHQjI0LCA1NDQgcGl4ZWxzOiBzZWUKIAkgKiBzaF9tb2JpbGVfbGNkY19pbmZvLmNoWzBdLmxjZF9jZmdbMF0ueHJlcyksIEhTQUxFTiA9IDEgLSBkZWZhdWx0Ci0JICogKHVudXNlZCwgc2luY2UgVk1DVFIyW0hTQUJNXSA9IDApCisJICogKHVudXNlZCBpZiBWTUNUUjJbSFNBQk1dID0gMCkKIAkgKi8KLQlpb3dyaXRlMzIoMSB8IChsaW5lbGVuZ3RoIDw8IDE2KSwgYmFzZSArIDB4ODAyOCk7IC8qIFZNTEVOMSAqLworCWlvd3JpdGUzMigxIHwgKGxpbmVsZW5ndGggPDwgMTYpLCBtaXBpLT5saW5rYmFzZSArIFZNTEVOMSk7CiAKIAltc2xlZXAoNSk7CiAKQEAgLTMyMSwxMSArMzU5LDEyIEBACiAJc3RydWN0IHNoX21pcGkgKm1pcGk7CiAJc3RydWN0IHNoX21pcGlfZHNpX2luZm8gKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IHJlc291cmNlICpyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCXN0cnVjdCByZXNvdXJjZSAqcmVzMiA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMSk7CiAJdW5zaWduZWQgbG9uZyByYXRlLCBmX2N1cnJlbnQ7CiAJaW50IGlkeCA9IHBkZXYtPmlkLCByZXQ7CiAJY2hhciBkc2lwX2Nsa1tdID0gImRzaS5wX2NsayI7CiAKLQlpZiAoIXJlcyB8fCBpZHggPj0gQVJSQVlfU0laRShtaXBpX2RzaSkgfHwgIXBkYXRhKQorCWlmICghcmVzIHx8ICFyZXMyIHx8IGlkeCA+PSBBUlJBWV9TSVpFKG1pcGlfZHNpKSB8fCAhcGRhdGEpCiAJCXJldHVybiAtRU5PREVWOwogCiAJbXV0ZXhfbG9jaygmYXJyYXlfbG9jayk7CkBAIC0zNTYsNiArMzk1LDIwIEBACiAJCWdvdG8gZW1hcDsKIAl9CiAKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyZXMyLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMyKSwgcGRldi0+bmFtZSkpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiTUlQSSByZWdpc3RlciByZWdpb24gMiBhbHJlYWR5IGNsYWltZWRcbiIpOworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZXJlcXJlZzI7CisJfQorCisJbWlwaS0+bGlua2Jhc2UgPSBpb3JlbWFwKHJlczItPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlczIpKTsKKwlpZiAoIW1pcGktPmxpbmtiYXNlKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZW1hcDI7CisJfQorCisJbWlwaS0+ZGV2ID0gJnBkZXYtPmRldjsKKwogCW1pcGktPmRzaXRfY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAiZHNpdF9jbGsiKTsKIAlpZiAoSVNfRVJSKG1pcGktPmRzaXRfY2xrKSkgewogCQlyZXQgPSBQVFJfRVJSKG1pcGktPmRzaXRfY2xrKTsKQEAgLTQwNSw2ICs0NTgsOSBAQAogCiAJbWlwaV9kc2lbaWR4XSA9IG1pcGk7CiAKKwlwbV9ydW50aW1lX2VuYWJsZSgmcGRldi0+ZGV2KTsKKwlwbV9ydW50aW1lX3Jlc3VtZSgmcGRldi0+ZGV2KTsKKwogCXJldCA9IHNoX21pcGlfc2V0dXAobWlwaSwgcGRhdGEpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVtaXBpc2V0dXA7CkBAIC00MTIsMTUgKzQ2OCwyMiBAQAogCW11dGV4X3VubG9jaygmYXJyYXlfbG9jayk7CiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbWlwaSk7CiAKKwkvKiBTYXZlIG9yaWdpbmFsIExDREMgY2FsbGJhY2tzICovCisJbWlwaS0+bmV4dF9ib2FyZF9kYXRhID0gcGRhdGEtPmxjZF9jaGFuLT5ib2FyZF9jZmcuYm9hcmRfZGF0YTsKKwltaXBpLT5uZXh0X2Rpc3BsYXlfb24gPSBwZGF0YS0+bGNkX2NoYW4tPmJvYXJkX2NmZy5kaXNwbGF5X29uOworCW1pcGktPm5leHRfZGlzcGxheV9vZmYgPSBwZGF0YS0+bGNkX2NoYW4tPmJvYXJkX2NmZy5kaXNwbGF5X29mZjsKKwogCS8qIFNldCB1cCBMQ0RDIGNhbGxiYWNrcyAqLwogCXBkYXRhLT5sY2RfY2hhbi0+Ym9hcmRfY2ZnLmJvYXJkX2RhdGEgPSBtaXBpOwogCXBkYXRhLT5sY2RfY2hhbi0+Ym9hcmRfY2ZnLmRpc3BsYXlfb24gPSBtaXBpX2Rpc3BsYXlfb247CiAJcGRhdGEtPmxjZF9jaGFuLT5ib2FyZF9jZmcuZGlzcGxheV9vZmYgPSBtaXBpX2Rpc3BsYXlfb2ZmOworCXBkYXRhLT5sY2RfY2hhbi0+Ym9hcmRfY2ZnLm93bmVyID0gVEhJU19NT0RVTEU7CiAKIAlyZXR1cm4gMDsKIAogZW1pcGlzZXR1cDoKIAltaXBpX2RzaVtpZHhdID0gTlVMTDsKKwlwbV9ydW50aW1lX2Rpc2FibGUoJnBkZXYtPmRldik7CiAJY2xrX2Rpc2FibGUobWlwaS0+ZHNpcF9jbGspOwogZWNsa3BvbjoKIAljbGtfZGlzYWJsZShtaXBpLT5kc2l0X2Nsayk7CkBAIC00MzEsNiArNDk0LDEwIEBACiBlc2V0dHJhdGU6CiAJY2xrX3B1dChtaXBpLT5kc2l0X2Nsayk7CiBlY2xrdGdldDoKKwlpb3VubWFwKG1pcGktPmxpbmtiYXNlKTsKK2VtYXAyOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMyLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMyKSk7CitlcmVxcmVnMjoKIAlpb3VubWFwKG1pcGktPmJhc2UpOwogZW1hcDoKIAlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKQEAgLTQ0Nyw2ICs1MTQsNyBAQAogewogCXN0cnVjdCBzaF9taXBpX2RzaV9pbmZvICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDEpOwogCXN0cnVjdCBzaF9taXBpICptaXBpID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJaW50IGksIHJldDsKIApAQCAtNDY3LDE0ICs1MzUsMTkgQEAKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAorCXBkYXRhLT5sY2RfY2hhbi0+Ym9hcmRfY2ZnLm93bmVyID0gTlVMTDsKIAlwZGF0YS0+bGNkX2NoYW4tPmJvYXJkX2NmZy5kaXNwbGF5X29uID0gTlVMTDsKIAlwZGF0YS0+bGNkX2NoYW4tPmJvYXJkX2NmZy5kaXNwbGF5X29mZiA9IE5VTEw7CiAJcGRhdGEtPmxjZF9jaGFuLT5ib2FyZF9jZmcuYm9hcmRfZGF0YSA9IE5VTEw7CiAKKwlwbV9ydW50aW1lX2Rpc2FibGUoJnBkZXYtPmRldik7CiAJY2xrX2Rpc2FibGUobWlwaS0+ZHNpcF9jbGspOwogCWNsa19kaXNhYmxlKG1pcGktPmRzaXRfY2xrKTsKIAljbGtfcHV0KG1pcGktPmRzaXRfY2xrKTsKIAljbGtfcHV0KG1pcGktPmRzaXBfY2xrKTsKKwlpb3VubWFwKG1pcGktPmxpbmtiYXNlKTsKKwlpZiAocmVzMikKKwkJcmVsZWFzZV9tZW1fcmVnaW9uKHJlczItPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlczIpKTsKIAlpb3VubWFwKG1pcGktPmJhc2UpOwogCWlmIChyZXMpCiAJCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zaF9tb2JpbGVfaGRtaS5jIGIvZHJpdmVycy92aWRlby9zaF9tb2JpbGVfaGRtaS5jCmluZGV4IGZjZGEwZTkuLjhjNTljYzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vc2hfbW9iaWxlX2hkbWkuYworKysgYi9kcml2ZXJzL3ZpZGVvL3NoX21vYmlsZV9oZG1pLmMKQEAgLTIwOSw3ICsyMDksMTEgQEAKIHN0cnVjdCBzaF9oZG1pIHsKIAl2b2lkIF9faW9tZW0gKmJhc2U7CiAJZW51bSBob3RwbHVnX3N0YXRlIGhwX3N0YXRlOwkvKiBob3QtcGx1ZyBzdGF0dXMgKi8KLQlib29sIHByZXByb2dyYW1tZWRfbW9kZTsJLyogdXNlIGEgcHJlLXByb2dyYW1tZWQgVklDIG9yIHRoZSBleHRlcm5hbCBtb2RlICovCisJdTggcHJlcHJvZ3JhbW1lZF92aWM7CQkvKiB1c2UgYSBwcmUtcHJvZ3JhbW1lZCBWSUMgb3IKKwkJCQkJICAgdGhlIGV4dGVybmFsIG1vZGUgKi8KKwl1OCBlZGlkX2Jsb2NrX2FkZHI7CisJdTggZWRpZF9zZWdtZW50X25yOworCXU4IGVkaWRfYmxvY2tzOwogCXN0cnVjdCBjbGsgKmhkbWlfY2xrOwogCXN0cnVjdCBkZXZpY2UgKmRldjsKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKQEAgLTM0Miw3ICszNDYsNyBAQAogCWhkbWlfd3JpdGUoaGRtaSwgdmFyLT52c3luY19sZW4sIEhETUlfRVhURVJOQUxfVl9EVVJBVElPTik7CiAKIAkvKiBTZXQgYml0IDAgb2YgSERNSV9FWFRFUk5BTF9WSURFT19QQVJBTV9TRVRUSU5HUyBoZXJlIGZvciBleHRlcm5hbCBtb2RlICovCi0JaWYgKCFoZG1pLT5wcmVwcm9ncmFtbWVkX21vZGUpCisJaWYgKCFoZG1pLT5wcmVwcm9ncmFtbWVkX3ZpYykKIAkJaGRtaV93cml0ZShoZG1pLCBzeW5jIHwgMSB8ICh2b2Zmc2V0IDw8IDQpLAogCQkJICAgSERNSV9FWFRFUk5BTF9WSURFT19QQVJBTV9TRVRUSU5HUyk7CiB9CkBAIC00NjYsNyArNDcwLDE4IEBACiAgKi8KIHN0YXRpYyB2b2lkIHNoX2hkbWlfcGh5X2NvbmZpZyhzdHJ1Y3Qgc2hfaGRtaSAqaGRtaSkKIHsKLQlpZiAoaGRtaS0+dmFyLnlyZXMgPiA0ODApIHsKKwlpZiAoaGRtaS0+dmFyLnBpeGNsb2NrIDwgMTAwMDApIHsKKwkJLyogZm9yIDEwODBwOGJpdCAxNDhNSHogKi8KKwkJaGRtaV93cml0ZShoZG1pLCAweDFkLCBIRE1JX1NMSVBIRE1JVF9QQVJBTV9TRVRUSU5HU18xKTsKKwkJaGRtaV93cml0ZShoZG1pLCAweDAwLCBIRE1JX1NMSVBIRE1JVF9QQVJBTV9TRVRUSU5HU18yKTsKKwkJaGRtaV93cml0ZShoZG1pLCAweDAwLCBIRE1JX1NMSVBIRE1JVF9QQVJBTV9TRVRUSU5HU18zKTsKKwkJaGRtaV93cml0ZShoZG1pLCAweDRjLCBIRE1JX1NMSVBIRE1JVF9QQVJBTV9TRVRUSU5HU181KTsKKwkJaGRtaV93cml0ZShoZG1pLCAweDFlLCBIRE1JX1NMSVBIRE1JVF9QQVJBTV9TRVRUSU5HU182KTsKKwkJaGRtaV93cml0ZShoZG1pLCAweDQ4LCBIRE1JX1NMSVBIRE1JVF9QQVJBTV9TRVRUSU5HU183KTsKKwkJaGRtaV93cml0ZShoZG1pLCAweDBlLCBIRE1JX1NMSVBIRE1JVF9QQVJBTV9TRVRUSU5HU184KTsKKwkJaGRtaV93cml0ZShoZG1pLCAweDI1LCBIRE1JX1NMSVBIRE1JVF9QQVJBTV9TRVRUSU5HU185KTsKKwkJaGRtaV93cml0ZShoZG1pLCAweDA0LCBIRE1JX1NMSVBIRE1JVF9QQVJBTV9TRVRUSU5HU18xMCk7CisJfSBlbHNlIGlmIChoZG1pLT52YXIucGl4Y2xvY2sgPCAzMDAwMCkgewogCQkvKiA3MjBwLCA4Yml0LCA3NC4yNU1Iei4gTWlnaHQgbmVlZCB0byBiZSBhZGp1c3RlZCBmb3Igb3RoZXIgZm9ybWF0cyAqLwogCQkvKgogCQkgKiBbMTowXQlTcGVlZF9BCkBAIC01NjUsMTMgKzU4MCwxMSBAQAogCWhkbWlfd3JpdGUoaGRtaSwgMHgwMCwgSERNSV9DVFJMX1BLVF9CVUZfQUNDRVNTX1BCMyk7CiAKIAkvKgotCSAqIFZJQyA9IDEyODAgeCA3MjBwOiBpZ25vcmVkIGlmIGV4dGVybmFsIGNvbmZpZyBpcyB1c2VkCi0JICogU2VuZCAyIGZvciA3MjAgeCA0ODBwLCAxNiBmb3IgMTA4MHAsIGlnbm9yZWQgaW4gZXh0ZXJuYWwgbW9kZQorCSAqIFZJQyBzaG91bGQgYmUgaWdub3JlZCBpZiBleHRlcm5hbCBjb25maWcgaXMgdXNlZCwgc28sIHdlIGNvdWxkIGp1c3QgdXNlIDAsCisJICogYnV0IHBsYXkgc2FmZSBhbmQgdXNlIGEgdmFsaWQgdmFsdWUgaW4gYW55IGNhc2UganVzdCBpbiBjYXNlCiAJICovCi0JaWYgKGhkbWktPnZhci55cmVzID09IDEwODAgJiYgaGRtaS0+dmFyLnhyZXMgPT0gMTkyMCkKLQkJdmljID0gMTY7Ci0JZWxzZSBpZiAoaGRtaS0+dmFyLnlyZXMgPT0gNDgwICYmIGhkbWktPnZhci54cmVzID09IDcyMCkKLQkJdmljID0gMjsKKwlpZiAoaGRtaS0+cHJlcHJvZ3JhbW1lZF92aWMpCisJCXZpYyA9IGhkbWktPnByZXByb2dyYW1tZWRfdmljOwogCWVsc2UKIAkJdmljID0gNDsKIAloZG1pX3dyaXRlKGhkbWksIHZpYywgSERNSV9DVFJMX1BLVF9CVUZfQUNDRVNTX1BCNCk7CkBAIC02ODUsMTEgKzY5OCwyMSBAQAogfQogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaF9oZG1pX3JhdGVfZXJyb3Ioc3RydWN0IHNoX2hkbWkgKmhkbWksCi0JCQkJCWNvbnN0IHN0cnVjdCBmYl92aWRlb21vZGUgKm1vZGUpCisJCWNvbnN0IHN0cnVjdCBmYl92aWRlb21vZGUgKm1vZGUsCisJCXVuc2lnbmVkIGxvbmcgKmhkbWlfcmF0ZSwgdW5zaWduZWQgbG9uZyAqcGFyZW50X3JhdGUpCiB7Ci0JbG9uZyB0YXJnZXQgPSBQSUNPUzJLSFoobW9kZS0+cGl4Y2xvY2spICogMTAwMCwKLQkJcmF0ZSA9IGNsa19yb3VuZF9yYXRlKGhkbWktPmhkbWlfY2xrLCB0YXJnZXQpOwotCXVuc2lnbmVkIGxvbmcgcmF0ZV9lcnJvciA9IHJhdGUgPiAwID8gYWJzKHJhdGUgLSB0YXJnZXQpIDogVUxPTkdfTUFYOworCXVuc2lnbmVkIGxvbmcgdGFyZ2V0ID0gUElDT1MyS0haKG1vZGUtPnBpeGNsb2NrKSAqIDEwMDAsIHJhdGVfZXJyb3I7CisJc3RydWN0IHNoX21vYmlsZV9oZG1pX2luZm8gKnBkYXRhID0gaGRtaS0+ZGV2LT5wbGF0Zm9ybV9kYXRhOworCisJKmhkbWlfcmF0ZSA9IGNsa19yb3VuZF9yYXRlKGhkbWktPmhkbWlfY2xrLCB0YXJnZXQpOworCWlmICgobG9uZykqaGRtaV9yYXRlIDwgMCkKKwkJKmhkbWlfcmF0ZSA9IGNsa19nZXRfcmF0ZShoZG1pLT5oZG1pX2Nsayk7CisKKwlyYXRlX2Vycm9yID0gKGxvbmcpKmhkbWlfcmF0ZSA+IDAgPyBhYnMoKmhkbWlfcmF0ZSAtIHRhcmdldCkgOiBVTE9OR19NQVg7CisJaWYgKHJhdGVfZXJyb3IgJiYgcGRhdGEtPmNsa19vcHRpbWl6ZV9wYXJlbnQpCisJCXJhdGVfZXJyb3IgPSBwZGF0YS0+Y2xrX29wdGltaXplX3BhcmVudCh0YXJnZXQsIGhkbWlfcmF0ZSwgcGFyZW50X3JhdGUpOworCWVsc2UgaWYgKGNsa19nZXRfcGFyZW50KGhkbWktPmhkbWlfY2xrKSkKKwkJKnBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsa19nZXRfcGFyZW50KGhkbWktPmhkbWlfY2xrKSk7CiAKIAlkZXZfZGJnKGhkbWktPmRldiwgIiV1LSV1LSV1LSV1IHggJXUtJXUtJXUtJXVcbiIsCiAJCW1vZGUtPmxlZnRfbWFyZ2luLCBtb2RlLT54cmVzLApAQCAtNjk3LDE0ICs3MjAsMTUgQEAKIAkJbW9kZS0+dXBwZXJfbWFyZ2luLCBtb2RlLT55cmVzLAogCQltb2RlLT5sb3dlcl9tYXJnaW4sIG1vZGUtPnZzeW5jX2xlbik7CiAKLQlkZXZfZGJnKGhkbWktPmRldiwgIlx0QCVsdSgrLy0lbHUpSHosIGU9JWx1IC8gMTAwMCwgcj0ldUh6XG4iLCB0YXJnZXQsCi0JCSByYXRlX2Vycm9yLCByYXRlX2Vycm9yID8gMTAwMDAgLyAoMTAgKiB0YXJnZXQgLyByYXRlX2Vycm9yKSA6IDAsCi0JCSBtb2RlLT5yZWZyZXNoKTsKKwlkZXZfZGJnKGhkbWktPmRldiwgIlx0QCVsdSgrLy0lbHUpSHosIGU9JWx1IC8gMTAwMCwgcj0ldUh6LCBwPSVsdUh6XG4iLCB0YXJnZXQsCisJCXJhdGVfZXJyb3IsIHJhdGVfZXJyb3IgPyAxMDAwMCAvICgxMCAqIHRhcmdldCAvIHJhdGVfZXJyb3IpIDogMCwKKwkJbW9kZS0+cmVmcmVzaCwgKnBhcmVudF9yYXRlKTsKIAogCXJldHVybiByYXRlX2Vycm9yOwogfQogCi1zdGF0aWMgaW50IHNoX2hkbWlfcmVhZF9lZGlkKHN0cnVjdCBzaF9oZG1pICpoZG1pKQorc3RhdGljIGludCBzaF9oZG1pX3JlYWRfZWRpZChzdHJ1Y3Qgc2hfaGRtaSAqaGRtaSwgdW5zaWduZWQgbG9uZyAqaGRtaV9yYXRlLAorCQkJICAgICB1bnNpZ25lZCBsb25nICpwYXJlbnRfcmF0ZSkKIHsKIAlzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gdG1wdmFyOwogCXN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyID0gJnRtcHZhcjsKQEAgLTczNSw3ICs3NTksMzggQEAKIAlwcmludGsoS0VSTl9DT05UICJcbiIpOwogI2VuZGlmCiAKLQlmYl9lZGlkX3RvX21vbnNwZWNzKGVkaWQsICZoZG1pLT5tb25zcGVjKTsKKwlpZiAoIWhkbWktPmVkaWRfYmxvY2tzKSB7CisJCWZiX2VkaWRfdG9fbW9uc3BlY3MoZWRpZCwgJmhkbWktPm1vbnNwZWMpOworCQloZG1pLT5lZGlkX2Jsb2NrcyA9IGVkaWRbMTI2XSArIDE7CisKKwkJZGV2X2RiZyhoZG1pLT5kZXYsICIlZCBtYWluIG1vZGVzLCAlZCBleHRlbnNpb24gYmxvY2tzXG4iLAorCQkJaGRtaS0+bW9uc3BlYy5tb2RlZGJfbGVuLCBoZG1pLT5lZGlkX2Jsb2NrcyAtIDEpOworCX0gZWxzZSB7CisJCWRldl9kYmcoaGRtaS0+ZGV2LCAiRXh0ZW5zaW9uICV1IGRldGVjdGVkLCBEVEQgc3RhcnQgJXVcbiIsCisJCQllZGlkWzBdLCBlZGlkWzJdKTsKKwkJZmJfZWRpZF9hZGRfbW9uc3BlY3MoZWRpZCwgJmhkbWktPm1vbnNwZWMpOworCX0KKworCWlmIChoZG1pLT5lZGlkX2Jsb2NrcyA+IGhkbWktPmVkaWRfc2VnbWVudF9uciAqIDIgKworCSAgICAoaGRtaS0+ZWRpZF9ibG9ja19hZGRyID4+IDcpICsgMSkgeworCQkvKiBNb3JlIGJsb2NrcyB0byByZWFkICovCisJCWlmIChoZG1pLT5lZGlkX2Jsb2NrX2FkZHIpIHsKKwkJCWhkbWktPmVkaWRfYmxvY2tfYWRkciA9IDA7CisJCQloZG1pLT5lZGlkX3NlZ21lbnRfbnIrKzsKKwkJfSBlbHNlIHsKKwkJCWhkbWktPmVkaWRfYmxvY2tfYWRkciA9IDB4ODA7CisJCX0KKwkJLyogU2V0IEVESUQgd29yZCBhZGRyZXNzICAqLworCQloZG1pX3dyaXRlKGhkbWksIGhkbWktPmVkaWRfYmxvY2tfYWRkciwgSERNSV9FRElEX1dPUkRfQUREUkVTUyk7CisJCS8qIEVuYWJsZSBFRElEIGludGVycnVwdCAqLworCQloZG1pX3dyaXRlKGhkbWksIDB4QzYsIEhETUlfSU5URVJSVVBUX01BU0tfMSk7CisJCS8qIFNldCBFRElEIHNlZ21lbnQgcG9pbnRlciAtIHN0YXJ0cyByZWFkaW5nIEVESUQgKi8KKwkJaGRtaV93cml0ZShoZG1pLCBoZG1pLT5lZGlkX3NlZ21lbnRfbnIsIEhETUlfRURJRF9TRUdNRU5UX1BPSU5URVIpOworCQlyZXR1cm4gLUVBR0FJTjsKKwl9CisKKwkvKiBBbGwgRS1FRElEIGJsb2NrcyByZWFkeSAqLworCWRldl9kYmcoaGRtaS0+ZGV2LCAiJWQgbWFpbiBhbmQgZXh0ZW5kZWQgbW9kZXNcbiIsIGhkbWktPm1vbnNwZWMubW9kZWRiX2xlbik7CiAKIAlmYl9nZXRfb3B0aW9ucygic2hfbW9iaWxlX2xjZGMiLCAmZm9yY2VkKTsKIAlpZiAoZm9yY2VkICYmICpmb3JjZWQpIHsKQEAgLTc1NCwxMSArODA5LDE0IEBACiAJZm9yIChpID0gMCwgbW9kZSA9IGhkbWktPm1vbnNwZWMubW9kZWRiOwogCSAgICAgZl93aWR0aCAmJiBmX2hlaWdodCAmJiBpIDwgaGRtaS0+bW9uc3BlYy5tb2RlZGJfbGVuICYmICFleGFjdF9tYXRjaDsKIAkgICAgIGkrKywgbW9kZSsrKSB7Ci0JCXVuc2lnbmVkIGxvbmcgcmF0ZV9lcnJvciA9IHNoX2hkbWlfcmF0ZV9lcnJvcihoZG1pLCBtb2RlKTsKKwkJdW5zaWduZWQgbG9uZyByYXRlX2Vycm9yOwogCiAJCS8qIE5vIGludGVyZXN0IGluIHVubWF0Y2hpbmcgbW9kZXMgKi8KIAkJaWYgKGZfd2lkdGggIT0gbW9kZS0+eHJlcyB8fCBmX2hlaWdodCAhPSBtb2RlLT55cmVzKQogCQkJY29udGludWU7CisKKwkJcmF0ZV9lcnJvciA9IHNoX2hkbWlfcmF0ZV9lcnJvcihoZG1pLCBtb2RlLCBoZG1pX3JhdGUsIHBhcmVudF9yYXRlKTsKKwogCQlpZiAoZl9yZWZyZXNoID09IG1vZGUtPnJlZnJlc2ggfHwgKCFmX3JlZnJlc2ggJiYgIXJhdGVfZXJyb3IpKQogCQkJLyoKIAkJCSAqIEV4YWN0IG1hdGNoIGlmIGVpdGhlciB0aGUgcmVmcmVzaCByYXRlIG1hdGNoZXMgb3IgaXQKQEAgLTgwNSw3ICs4NjMsNyBAQAogCiAJCWlmIChtb2RlbGlzdCkgewogCQkJZm91bmQgPSAmbW9kZWxpc3QtPm1vZGU7Ci0JCQlmb3VuZF9yYXRlX2Vycm9yID0gc2hfaGRtaV9yYXRlX2Vycm9yKGhkbWksIGZvdW5kKTsKKwkJCWZvdW5kX3JhdGVfZXJyb3IgPSBzaF9oZG1pX3JhdGVfZXJyb3IoaGRtaSwgZm91bmQsIGhkbWlfcmF0ZSwgcGFyZW50X3JhdGUpOwogCQl9CiAJfQogCkBAIC04MTMsMTYgKzg3MSwyNyBAQAogCWlmICghZm91bmQpCiAJCXJldHVybiAtRU5YSU87CiAKLQlkZXZfaW5mbyhoZG1pLT5kZXYsICJVc2luZyAlcyBtb2RlICV1eCV1QCV1SHogKCVsdUh6KSwgY2xvY2sgZXJyb3IgJWx1SHpcbiIsCi0JCSBtb2RlbGlzdCA/ICJkZWZhdWx0IiA6ICJFRElEIiwgZm91bmQtPnhyZXMsIGZvdW5kLT55cmVzLAotCQkgZm91bmQtPnJlZnJlc2gsIFBJQ09TMktIWihmb3VuZC0+cGl4Y2xvY2spICogMTAwMCwgZm91bmRfcmF0ZV9lcnJvcik7Ci0KLQlpZiAoKGZvdW5kLT54cmVzID09IDcyMCAmJiBmb3VuZC0+eXJlcyA9PSA0ODApIHx8Ci0JICAgIChmb3VuZC0+eHJlcyA9PSAxMjgwICYmIGZvdW5kLT55cmVzID09IDcyMCkgfHwKLQkgICAgKGZvdW5kLT54cmVzID09IDE5MjAgJiYgZm91bmQtPnlyZXMgPT0gMTA4MCkpCi0JCWhkbWktPnByZXByb2dyYW1tZWRfbW9kZSA9IHRydWU7CisJaWYgKGZvdW5kLT54cmVzID09IDY0MCAmJiBmb3VuZC0+eXJlcyA9PSA0ODAgJiYgZm91bmQtPnJlZnJlc2ggPT0gNjApCisJCWhkbWktPnByZXByb2dyYW1tZWRfdmljID0gMTsKKwllbHNlIGlmIChmb3VuZC0+eHJlcyA9PSA3MjAgJiYgZm91bmQtPnlyZXMgPT0gNDgwICYmIGZvdW5kLT5yZWZyZXNoID09IDYwKQorCQloZG1pLT5wcmVwcm9ncmFtbWVkX3ZpYyA9IDI7CisJZWxzZSBpZiAoZm91bmQtPnhyZXMgPT0gNzIwICYmIGZvdW5kLT55cmVzID09IDU3NiAmJiBmb3VuZC0+cmVmcmVzaCA9PSA1MCkKKwkJaGRtaS0+cHJlcHJvZ3JhbW1lZF92aWMgPSAxNzsKKwllbHNlIGlmIChmb3VuZC0+eHJlcyA9PSAxMjgwICYmIGZvdW5kLT55cmVzID09IDcyMCAmJiBmb3VuZC0+cmVmcmVzaCA9PSA2MCkKKwkJaGRtaS0+cHJlcHJvZ3JhbW1lZF92aWMgPSA0OworCWVsc2UgaWYgKGZvdW5kLT54cmVzID09IDE5MjAgJiYgZm91bmQtPnlyZXMgPT0gMTA4MCAmJiBmb3VuZC0+cmVmcmVzaCA9PSAyNCkKKwkJaGRtaS0+cHJlcHJvZ3JhbW1lZF92aWMgPSAzMjsKKwllbHNlIGlmIChmb3VuZC0+eHJlcyA9PSAxOTIwICYmIGZvdW5kLT55cmVzID09IDEwODAgJiYgZm91bmQtPnJlZnJlc2ggPT0gNTApCisJCWhkbWktPnByZXByb2dyYW1tZWRfdmljID0gMzE7CisJZWxzZSBpZiAoZm91bmQtPnhyZXMgPT0gMTkyMCAmJiBmb3VuZC0+eXJlcyA9PSAxMDgwICYmIGZvdW5kLT5yZWZyZXNoID09IDYwKQorCQloZG1pLT5wcmVwcm9ncmFtbWVkX3ZpYyA9IDE2OwogCWVsc2UKLQkJaGRtaS0+cHJlcHJvZ3JhbW1lZF9tb2RlID0gZmFsc2U7CisJCWhkbWktPnByZXByb2dyYW1tZWRfdmljID0gMDsKKworCWRldl9kYmcoaGRtaS0+ZGV2LCAiVXNpbmcgJXMgJXMgbW9kZSAldXgldUAldUh6ICglbHVIeiksIGNsb2NrIGVycm9yICVsdUh6XG4iLAorCQltb2RlbGlzdCA/ICJkZWZhdWx0IiA6ICJFRElEIiwgaGRtaS0+cHJlcHJvZ3JhbW1lZF92aWMgPyAiVklDIiA6ICJleHRlcm5hbCIsCisJCWZvdW5kLT54cmVzLCBmb3VuZC0+eXJlcywgZm91bmQtPnJlZnJlc2gsCisJCVBJQ09TMktIWihmb3VuZC0+cGl4Y2xvY2spICogMTAwMCwgZm91bmRfcmF0ZV9lcnJvcik7CiAKIAlmYl92aWRlb21vZGVfdG9fdmFyKCZoZG1pLT52YXIsIGZvdW5kKTsKIAlzaF9oZG1pX2V4dGVybmFsX3ZpZGVvX3BhcmFtKGhkbWkpOwpAQCAtODcxLDMyICs5NDAsMzQgQEAKIAkJLyogQ2hlY2ssIGlmIGhvdCBwbHVnICYgTVNFTlMgcGluIHN0YXR1cyBhcmUgYm90aCBoaWdoICovCiAJCWlmICgobXNlbnMgJiAweEMwKSA9PSAweEMwKSB7CiAJCQkvKiBEaXNwbGF5IHBsdWcgaW4gKi8KKwkJCWhkbWktPmVkaWRfc2VnbWVudF9uciA9IDA7CisJCQloZG1pLT5lZGlkX2Jsb2NrX2FkZHIgPSAwOworCQkJaGRtaS0+ZWRpZF9ibG9ja3MgPSAwOwogCQkJaGRtaS0+aHBfc3RhdGUgPSBIRE1JX0hPVFBMVUdfQ09OTkVDVEVEOwogCiAJCQkvKiBTZXQgRURJRCB3b3JkIGFkZHJlc3MgICovCiAJCQloZG1pX3dyaXRlKGhkbWksIDB4MDAsIEhETUlfRURJRF9XT1JEX0FERFJFU1MpOwotCQkJLyogU2V0IEVESUQgc2VnbWVudCBwb2ludGVyICovCi0JCQloZG1pX3dyaXRlKGhkbWksIDB4MDAsIEhETUlfRURJRF9TRUdNRU5UX1BPSU5URVIpOwogCQkJLyogRW5hYmxlIEVESUQgaW50ZXJydXB0ICovCiAJCQloZG1pX3dyaXRlKGhkbWksIDB4QzYsIEhETUlfSU5URVJSVVBUX01BU0tfMSk7CisJCQkvKiBTZXQgRURJRCBzZWdtZW50IHBvaW50ZXIgLSBzdGFydHMgcmVhZGluZyBFRElEICovCisJCQloZG1pX3dyaXRlKGhkbWksIDB4MDAsIEhETUlfRURJRF9TRUdNRU5UX1BPSU5URVIpOwogCQl9IGVsc2UgaWYgKCEoc3RhdHVzMSAmIDB4ODApKSB7CiAJCQkvKiBEaXNwbGF5IHVucGx1ZywgYmV3YXJlIG11bHRpcGxlIGludGVycnVwdHMgKi8KLQkJCWlmIChoZG1pLT5ocF9zdGF0ZSAhPSBIRE1JX0hPVFBMVUdfRElTQ09OTkVDVEVEKQorCQkJaWYgKGhkbWktPmhwX3N0YXRlICE9IEhETUlfSE9UUExVR19ESVNDT05ORUNURUQpIHsKKwkJCQloZG1pLT5ocF9zdGF0ZSA9IEhETUlfSE9UUExVR19ESVNDT05ORUNURUQ7CiAJCQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZoZG1pLT5lZGlkX3dvcmssIDApOwotCi0JCQloZG1pLT5ocF9zdGF0ZSA9IEhETUlfSE9UUExVR19ESVNDT05ORUNURUQ7CisJCQl9CiAJCQkvKiBkaXNwbGF5X29mZiB3aWxsIHN3aXRjaCBiYWNrIHRvIG1vZGVfYSAqLwogCQl9CiAJfSBlbHNlIGlmIChzdGF0dXMxICYgMikgewogCQkvKiBFRElEIGVycm9yIGludGVycnVwdDogcmV0cnkgKi8KIAkJLyogU2V0IEVESUQgd29yZCBhZGRyZXNzICAqLwotCQloZG1pX3dyaXRlKGhkbWksIDB4MDAsIEhETUlfRURJRF9XT1JEX0FERFJFU1MpOworCQloZG1pX3dyaXRlKGhkbWksIGhkbWktPmVkaWRfYmxvY2tfYWRkciwgSERNSV9FRElEX1dPUkRfQUREUkVTUyk7CiAJCS8qIFNldCBFRElEIHNlZ21lbnQgcG9pbnRlciAqLwotCQloZG1pX3dyaXRlKGhkbWksIDB4MDAsIEhETUlfRURJRF9TRUdNRU5UX1BPSU5URVIpOworCQloZG1pX3dyaXRlKGhkbWksIGhkbWktPmVkaWRfc2VnbWVudF9uciwgSERNSV9FRElEX1NFR01FTlRfUE9JTlRFUik7CiAJfSBlbHNlIGlmIChzdGF0dXMxICYgNCkgewogCQkvKiBEaXNhYmxlIEVESUQgaW50ZXJydXB0ICovCiAJCWhkbWlfd3JpdGUoaGRtaSwgMHhDMCwgSERNSV9JTlRFUlJVUFRfTUFTS18xKTsKLQkJaGRtaS0+aHBfc3RhdGUgPSBIRE1JX0hPVFBMVUdfRURJRF9ET05FOwogCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmhkbWktPmVkaWRfd29yaywgbXNlY3NfdG9famlmZmllcygxMCkpOwogCX0KIApAQCAtOTc5LDM5ICsxMDUwLDM3IEBACiAKIC8qKgogICogc2hfaGRtaV9jbGtfY29uZmlndXJlKCkgLSBzZXQgSERNSSBjbG9jayBmcmVxdWVuY3kgYW5kIGVuYWJsZSB0aGUgY2xvY2sKLSAqIEBoZG1pOglkcml2ZXIgY29udGV4dAotICogQHBpeGNsb2NrOglwaXhlbCBjbG9jayBwZXJpb2QgaW4gcGljb3NlY29uZHMKLSAqIHJldHVybjoJY29uZmlndXJlZCBwb3NpdGl2ZSByYXRlIGlmIHN1Y2Nlc3NmdWwKLSAqCQkwIGlmIGNvdWxkbid0IHNldCB0aGUgcmF0ZSwgYnV0IG1hbmFnZWQgdG8gZW5hYmxlIHRoZSBjbG9jawotICoJCW5lZ2F0aXZlIGVycm9yLCBpZiBjb3VsZG4ndCBlbmFibGUgdGhlIGNsb2NrCisgKiBAaGRtaToJCWRyaXZlciBjb250ZXh0CisgKiBAaGRtaV9yYXRlOgkJSERNSSBjbG9jayBmcmVxdWVuY3kgaW4gSHoKKyAqIEBwYXJlbnRfcmF0ZToJaWYgIT0gMCAtIHNldCBwYXJlbnQgY2xvY2sgcmF0ZSBmb3Igb3B0aW1hbCBwcmVjaXNpb24KKyAqIHJldHVybjoJCWNvbmZpZ3VyZWQgcG9zaXRpdmUgcmF0ZSBpZiBzdWNjZXNzZnVsCisgKgkJCTAgaWYgY291bGRuJ3Qgc2V0IHRoZSByYXRlLCBidXQgbWFuYWdlZCB0byBlbmFibGUgdGhlCisgKgkJCWNsb2NrLCBuZWdhdGl2ZSBlcnJvciwgaWYgY291bGRuJ3QgZW5hYmxlIHRoZSBjbG9jawogICovCi1zdGF0aWMgbG9uZyBzaF9oZG1pX2Nsa19jb25maWd1cmUoc3RydWN0IHNoX2hkbWkgKmhkbWksIHVuc2lnbmVkIGxvbmcgcGl4Y2xvY2spCitzdGF0aWMgbG9uZyBzaF9oZG1pX2Nsa19jb25maWd1cmUoc3RydWN0IHNoX2hkbWkgKmhkbWksIHVuc2lnbmVkIGxvbmcgaGRtaV9yYXRlLAorCQkJCSAgdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSkKIHsKLQlsb25nIHJhdGU7CiAJaW50IHJldDsKIAotCXJhdGUgPSBQSUNPUzJLSFoocGl4Y2xvY2spICogMTAwMDsKLQlyYXRlID0gY2xrX3JvdW5kX3JhdGUoaGRtaS0+aGRtaV9jbGssIHJhdGUpOwotCWlmIChyYXRlID4gMCkgewotCQlyZXQgPSBjbGtfc2V0X3JhdGUoaGRtaS0+aGRtaV9jbGssIHJhdGUpOworCWlmIChwYXJlbnRfcmF0ZSAmJiBjbGtfZ2V0X3BhcmVudChoZG1pLT5oZG1pX2NsaykpIHsKKwkJcmV0ID0gY2xrX3NldF9yYXRlKGNsa19nZXRfcGFyZW50KGhkbWktPmhkbWlfY2xrKSwgcGFyZW50X3JhdGUpOwogCQlpZiAocmV0IDwgMCkgewotCQkJZGV2X3dhcm4oaGRtaS0+ZGV2LCAiQ2Fubm90IHNldCByYXRlICVsZDogJWRcbiIsIHJhdGUsIHJldCk7Ci0JCQlyYXRlID0gMDsKKwkJCWRldl93YXJuKGhkbWktPmRldiwgIkNhbm5vdCBzZXQgcGFyZW50IHJhdGUgJWxkOiAlZFxuIiwgcGFyZW50X3JhdGUsIHJldCk7CisJCQloZG1pX3JhdGUgPSBjbGtfcm91bmRfcmF0ZShoZG1pLT5oZG1pX2NsaywgaGRtaV9yYXRlKTsKIAkJfSBlbHNlIHsKLQkJCWRldl9kYmcoaGRtaS0+ZGV2LCAiSERNSSBzZXQgZnJlcXVlbmN5ICVsdVxuIiwgcmF0ZSk7CisJCQlkZXZfZGJnKGhkbWktPmRldiwgIkhETUkgc2V0IHBhcmVudCBmcmVxdWVuY3kgJWx1XG4iLCBwYXJlbnRfcmF0ZSk7CiAJCX0KLQl9IGVsc2UgewotCQlyYXRlID0gMDsKLQkJZGV2X3dhcm4oaGRtaS0+ZGV2LCAiQ2Fubm90IGdldCBzdWl0YWJsZSByYXRlOiAlbGRcbiIsIHJhdGUpOwogCX0KIAotCXJldCA9IGNsa19lbmFibGUoaGRtaS0+aGRtaV9jbGspOworCXJldCA9IGNsa19zZXRfcmF0ZShoZG1pLT5oZG1pX2NsaywgaGRtaV9yYXRlKTsKIAlpZiAocmV0IDwgMCkgewotCQlkZXZfZXJyKGhkbWktPmRldiwgIkNhbm5vdCBlbmFibGUgY2xvY2s6ICVkXG4iLCByZXQpOwotCQlyZXR1cm4gcmV0OworCQlkZXZfd2FybihoZG1pLT5kZXYsICJDYW5ub3Qgc2V0IHJhdGUgJWxkOiAlZFxuIiwgaGRtaV9yYXRlLCByZXQpOworCQloZG1pX3JhdGUgPSAwOworCX0gZWxzZSB7CisJCWRldl9kYmcoaGRtaS0+ZGV2LCAiSERNSSBzZXQgZnJlcXVlbmN5ICVsdVxuIiwgaGRtaV9yYXRlKTsKIAl9CiAKLQlyZXR1cm4gcmF0ZTsKKwlyZXR1cm4gaGRtaV9yYXRlOwogfQogCiAvKiBIb3RwbHVnIGludGVycnVwdCBvY2N1cnJlZCwgcmVhZCBFRElEICovCkBAIC0xMDMwLDE3ICsxMDk5LDIwIEBACiAKIAltdXRleF9sb2NrKCZoZG1pLT5tdXRleCk7CiAKLQlpZiAoaGRtaS0+aHBfc3RhdGUgPT0gSERNSV9IT1RQTFVHX0VESURfRE9ORSkgeworCWlmIChoZG1pLT5ocF9zdGF0ZSA9PSBIRE1JX0hPVFBMVUdfQ09OTkVDVEVEKSB7CisJCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUgPSAwLCBoZG1pX3JhdGU7CisKIAkJLyogQSBkZXZpY2UgaGFzIGJlZW4gcGx1Z2dlZCBpbiAqLwogCQlwbV9ydW50aW1lX2dldF9zeW5jKGhkbWktPmRldik7CiAKLQkJcmV0ID0gc2hfaGRtaV9yZWFkX2VkaWQoaGRtaSk7CisJCXJldCA9IHNoX2hkbWlfcmVhZF9lZGlkKGhkbWksICZoZG1pX3JhdGUsICZwYXJlbnRfcmF0ZSk7CiAJCWlmIChyZXQgPCAwKQogCQkJZ290byBvdXQ7CiAKKwkJaGRtaS0+aHBfc3RhdGUgPSBIRE1JX0hPVFBMVUdfRURJRF9ET05FOworCiAJCS8qIFJlY29uZmlndXJlIHRoZSBjbG9jayAqLwotCQljbGtfZGlzYWJsZShoZG1pLT5oZG1pX2Nsayk7Ci0JCXJldCA9IHNoX2hkbWlfY2xrX2NvbmZpZ3VyZShoZG1pLCBoZG1pLT52YXIucGl4Y2xvY2spOworCQlyZXQgPSBzaF9oZG1pX2Nsa19jb25maWd1cmUoaGRtaSwgaGRtaV9yYXRlLCBwYXJlbnRfcmF0ZSk7CiAJCWlmIChyZXQgPCAwKQogCQkJZ290byBvdXQ7CiAKQEAgLTEwOTUsNyArMTE2Nyw3IEBACiAJfQogCiBvdXQ6Ci0JaWYgKHJldCA8IDApCisJaWYgKHJldCA8IDAgJiYgcmV0ICE9IC1FQUdBSU4pCiAJCWhkbWktPmhwX3N0YXRlID0gSERNSV9IT1RQTFVHX0RJU0NPTk5FQ1RFRDsKIAltdXRleF91bmxvY2soJmhkbWktPm11dGV4KTsKIApAQCAtMTE3NiwxMyArMTI0OCwyMiBAQAogCQlnb3RvIGVnZXRjbGs7CiAJfQogCi0JLyogU29tZSBhcmJpdHJhcnkgcmVsYXhlZCBwaXhjbG9jayBqdXN0IHRvIGdldCB0aGluZ3Mgc3RhcnRlZCAqLwotCXJhdGUgPSBzaF9oZG1pX2Nsa19jb25maWd1cmUoaGRtaSwgMzcwMzcpOworCS8qIEFuIGFyYml0cmFyeSByZWxheGVkIHBpeGNsb2NrIGp1c3QgdG8gZ2V0IHRoaW5ncyBzdGFydGVkOiBmcm9tIHN0YW5kYXJkIDQ4MHAgKi8KKwlyYXRlID0gY2xrX3JvdW5kX3JhdGUoaGRtaS0+aGRtaV9jbGssIFBJQ09TMktIWigzNzAzNykpOworCWlmIChyYXRlID4gMCkKKwkJcmF0ZSA9IHNoX2hkbWlfY2xrX2NvbmZpZ3VyZShoZG1pLCByYXRlLCAwKTsKKwogCWlmIChyYXRlIDwgMCkgewogCQlyZXQgPSByYXRlOwogCQlnb3RvIGVyYXRlOwogCX0KIAorCXJldCA9IGNsa19lbmFibGUoaGRtaS0+aGRtaV9jbGspOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoaGRtaS0+ZGV2LCAiQ2Fubm90IGVuYWJsZSBjbG9jazogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJhdGU7CisJfQorCiAJZGV2X2RiZygmcGRldi0+ZGV2LCAiRW5hYmxlZCBIRE1JIGNsb2NrIGF0ICVsdUh6XG4iLCByYXRlKTsKIAogCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSwgZGV2X25hbWUoJnBkZXYtPmRldikpKSB7CkBAIC0xMjAwLDEwICsxMjgxLDYgQEAKIAogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGhkbWkpOwogCi0JLyogUHJvZHVjdCBhbmQgcmV2aXNpb24gSURzIGFyZSAwIGluIHNoLW1vYmlsZSB2ZXJzaW9uICovCi0JZGV2X2luZm8oJnBkZXYtPmRldiwgIkRldGVjdGVkIEhETUkgY29udHJvbGxlciAweCV4OjB4JXhcbiIsCi0JCSBoZG1pX3JlYWQoaGRtaSwgSERNSV9QUk9EVUNUX0lEKSwgaGRtaV9yZWFkKGhkbWksIEhETUlfUkVWSVNJT05fSUQpKTsKLQogCS8qIFNldCB1cCBMQ0RDIGNhbGxiYWNrcyAqLwogCWJvYXJkX2NmZyA9ICZwZGF0YS0+bGNkX2NoYW4tPmJvYXJkX2NmZzsKIAlib2FyZF9jZmctPm93bmVyID0gVEhJU19NT0RVTEU7CkBAIC0xMjE2LDYgKzEyOTMsMTAgQEAKIAlwbV9ydW50aW1lX2VuYWJsZSgmcGRldi0+ZGV2KTsKIAlwbV9ydW50aW1lX3Jlc3VtZSgmcGRldi0+ZGV2KTsKIAorCS8qIFByb2R1Y3QgYW5kIHJldmlzaW9uIElEcyBhcmUgMCBpbiBzaC1tb2JpbGUgdmVyc2lvbiAqLworCWRldl9pbmZvKCZwZGV2LT5kZXYsICJEZXRlY3RlZCBIRE1JIGNvbnRyb2xsZXIgMHgleDoweCV4XG4iLAorCQkgaGRtaV9yZWFkKGhkbWksIEhETUlfUFJPRFVDVF9JRCksIGhkbWlfcmVhZChoZG1pLCBIRE1JX1JFVklTSU9OX0lEKSk7CisKIAlyZXQgPSByZXF1ZXN0X2lycShpcnEsIHNoX2hkbWlfaG90cGx1ZywgMCwKIAkJCSAgZGV2X25hbWUoJnBkZXYtPmRldiksIGhkbWkpOwogCWlmIChyZXQgPCAwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3NoX21vYmlsZV9sY2RjZmIuYyBiL2RyaXZlcnMvdmlkZW8vc2hfbW9iaWxlX2xjZGNmYi5jCmluZGV4IGMwNTMyNmIuLmJkNDg0MGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vc2hfbW9iaWxlX2xjZGNmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vc2hfbW9iaWxlX2xjZGNmYi5jCkBAIC0xMzksNiArMTM5LDcgQEAKIAlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgbm90aWZpZXI7CiAJdW5zaWduZWQgbG9uZyBzYXZlZF9zaGFyZWRfcmVnc1tOUl9TSEFSRURfUkVHU107CiAJaW50IHN0YXJ0ZWQ7CisJaW50IGZvcmNlZF9icHA7IC8qIDIgY2hhbm5lbCBMQ0RDIG11c3Qgc2hhcmUgYnBwIHNldHRpbmcgKi8KIH07CiAKIHN0YXRpYyBib29sIGJhbmtlZChpbnQgcmVnX25yKQpAQCAtNDYxLDEzICs0NjIsMTggQEAKIAlzdHJ1Y3Qgc2hfbW9iaWxlX2xjZGNfY2hhbiAqY2g7CiAJc3RydWN0IHNoX21vYmlsZV9sY2RjX2JvYXJkX2NmZwkqYm9hcmRfY2ZnOwogCXVuc2lnbmVkIGxvbmcgdG1wOworCWludCBicHAgPSAwOwogCWludCBrLCBtOwogCWludCByZXQgPSAwOwogCiAJLyogZW5hYmxlIGNsb2NrcyBiZWZvcmUgYWNjZXNzaW5nIHRoZSBoYXJkd2FyZSAqLwotCWZvciAoayA9IDA7IGsgPCBBUlJBWV9TSVpFKHByaXYtPmNoKTsgaysrKQotCQlpZiAocHJpdi0+Y2hba10uZW5hYmxlZCkKKwlmb3IgKGsgPSAwOyBrIDwgQVJSQVlfU0laRShwcml2LT5jaCk7IGsrKykgeworCQlpZiAocHJpdi0+Y2hba10uZW5hYmxlZCkgewogCQkJc2hfbW9iaWxlX2xjZGNfY2xrX29uKHByaXYpOworCQkJaWYgKCFicHApCisJCQkJYnBwID0gcHJpdi0+Y2hba10uaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsOworCQl9CisJfQogCiAJLyogcmVzZXQgKi8KIAlsY2RjX3dyaXRlKHByaXYsIF9MRENOVDJSLCBsY2RjX3JlYWQocHJpdiwgX0xEQ05UMlIpIHwgTENEQ19SRVNFVCk7CkBAIC01MzUsNyArNTQxLDE3IEBACiAJfQogCiAJLyogd29yZCBhbmQgbG9uZyB3b3JkIHN3YXAgKi8KLQlsY2RjX3dyaXRlKHByaXYsIF9MREREU1IsIGxjZGNfcmVhZChwcml2LCBfTERERFNSKSB8IDYpOworCXN3aXRjaCAoYnBwKSB7CisJY2FzZSAxNjoKKwkJbGNkY193cml0ZShwcml2LCBfTERERFNSLCBsY2RjX3JlYWQocHJpdiwgX0xERERTUikgfCA2KTsKKwkJYnJlYWs7CisJY2FzZSAyNDoKKwkJbGNkY193cml0ZShwcml2LCBfTERERFNSLCBsY2RjX3JlYWQocHJpdiwgX0xERERTUikgfCA3KTsKKwkJYnJlYWs7CisJY2FzZSAzMjoKKwkJbGNkY193cml0ZShwcml2LCBfTERERFNSLCBsY2RjX3JlYWQocHJpdiwgX0xERERTUikgfCA0KTsKKwkJYnJlYWs7CisJfQogCiAJZm9yIChrID0gMDsgayA8IEFSUkFZX1NJWkUocHJpdi0+Y2gpOyBrKyspIHsKIAkJY2ggPSAmcHJpdi0+Y2hba107CkBAIC01NDYsNyArNTYyLDE2IEBACiAJCS8qIHNldCBicHAgZm9ybWF0IGluIFBLRls0OjBdICovCiAJCXRtcCA9IGxjZGNfcmVhZF9jaGFuKGNoLCBMRERGUik7CiAJCXRtcCAmPSB+MHgwMDAxMDAxZjsKLQkJdG1wIHw9IChjaC0+aW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsID09IDE2KSA/IDMgOiAwOworCQlzd2l0Y2ggKGNoLT5pbmZvLT52YXIuYml0c19wZXJfcGl4ZWwpIHsKKwkJY2FzZSAxNjoKKwkJCXRtcCB8PSAweDAzOworCQkJYnJlYWs7CisJCWNhc2UgMjQ6CisJCQl0bXAgfD0gMHgwYjsKKwkJCWJyZWFrOworCQljYXNlIDMyOgorCQkJYnJlYWs7CisJCX0KIAkJbGNkY193cml0ZV9jaGFuKGNoLCBMRERGUiwgdG1wKTsKIAogCQkvKiBwb2ludCBvdXQgb3VyIGZyYW1lIGJ1ZmZlciAqLwpAQCAtOTEzLDE1ICs5MzgsMzAgQEAKIHN0YXRpYyBpbnQgc2hfbW9iaWxlX2NoZWNrX3ZhcihzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwgc3RydWN0IGZiX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IHNoX21vYmlsZV9sY2RjX2NoYW4gKmNoID0gaW5mby0+cGFyOworCXN0cnVjdCBzaF9tb2JpbGVfbGNkY19wcml2ICpwID0gY2gtPmxjZGM7CiAKIAlpZiAodmFyLT54cmVzID4gTUFYX1hSRVMgfHwgdmFyLT55cmVzID4gTUFYX1lSRVMgfHwKIAkgICAgdmFyLT54cmVzICogdmFyLT55cmVzICogKGNoLT5jZmcuYnBwIC8gOCkgKiAyID4gaW5mby0+Zml4LnNtZW1fbGVuKSB7Ci0JCWRldl93YXJuKGluZm8tPmRldiwgIkludmFsaWQgaW5mbzogJXUtJXUtJXUtJXUgeCAldS0ldS0ldS0ldSBAICV1a0h6IVxuIiwKKwkJZGV2X3dhcm4oaW5mby0+ZGV2LCAiSW52YWxpZCBpbmZvOiAldS0ldS0ldS0ldSB4ICV1LSV1LSV1LSV1IEAgJWx1a0h6IVxuIiwKIAkJCSB2YXItPmxlZnRfbWFyZ2luLCB2YXItPnhyZXMsIHZhci0+cmlnaHRfbWFyZ2luLCB2YXItPmhzeW5jX2xlbiwKIAkJCSB2YXItPnVwcGVyX21hcmdpbiwgdmFyLT55cmVzLCB2YXItPmxvd2VyX21hcmdpbiwgdmFyLT52c3luY19sZW4sCiAJCQkgUElDT1MyS0haKHZhci0+cGl4Y2xvY2spKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQorCisJLyogb25seSBhY2NlcHQgdGhlIGZvcmNlZF9icHAgZm9yIGR1YWwgY2hhbm5lbCBjb25maWd1cmF0aW9ucyAqLworCWlmIChwLT5mb3JjZWRfYnBwICYmIHAtPmZvcmNlZF9icHAgIT0gdmFyLT5iaXRzX3Blcl9waXhlbCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzd2l0Y2ggKHZhci0+Yml0c19wZXJfcGl4ZWwpIHsKKwljYXNlIDE2OiAvKiBQS0ZbNDowXSA9IDAwMDExIC0gUkdCIDU2NSAqLworCWNhc2UgMjQ6IC8qIFBLRls0OjBdID0gMDEwMTEgLSBSR0IgODg4ICovCisJY2FzZSAzMjogLyogUEtGWzQ6MF0gPSAwMDAwMCAtIFJHQkEgODg4ICovCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwogCXJldHVybiAwOwogfQogCkBAIC05NTQsMTkgKzk5NCwyNyBAQAogCQl2YXItPnRyYW5zcC5sZW5ndGggPSAwOwogCQlicmVhazsKIAotCWNhc2UgMzI6IC8qIFBLRls0OjBdID0gMDAwMDAgLSBSR0IgODg4Ci0JCSAgKiBzaDc3MjIgcGRmIHNheXMgMDBSUkdHQkIgYnV0IHJlYWxpdHkgaXMgR0dCQjAwUlIKLQkJICAqIHRoaXMgbWF5IGJlIGJlY2F1c2UgTERERFNSIGhhcyB3b3JkIHN3YXAgZW5hYmxlZC4uCi0JCSAgKi8KLQkJdmFyLT5yZWQub2Zmc2V0ID0gMDsKKwljYXNlIDI0OiAvKiBQS0ZbNDowXSA9IDAxMDExIC0gUkdCIDg4OCAqLworCQl2YXItPnJlZC5vZmZzZXQgPSAxNjsKIAkJdmFyLT5yZWQubGVuZ3RoID0gODsKLQkJdmFyLT5ncmVlbi5vZmZzZXQgPSAyNDsKKwkJdmFyLT5ncmVlbi5vZmZzZXQgPSA4OwogCQl2YXItPmdyZWVuLmxlbmd0aCA9IDg7Ci0JCXZhci0+Ymx1ZS5vZmZzZXQgPSAxNjsKKwkJdmFyLT5ibHVlLm9mZnNldCA9IDA7CiAJCXZhci0+Ymx1ZS5sZW5ndGggPSA4OwogCQl2YXItPnRyYW5zcC5vZmZzZXQgPSAwOwogCQl2YXItPnRyYW5zcC5sZW5ndGggPSAwOwogCQlicmVhazsKKworCWNhc2UgMzI6IC8qIFBLRls0OjBdID0gMDAwMDAgLSBSR0JBIDg4OCAqLworCQl2YXItPnJlZC5vZmZzZXQgPSAxNjsKKwkJdmFyLT5yZWQubGVuZ3RoID0gODsKKwkJdmFyLT5ncmVlbi5vZmZzZXQgPSA4OworCQl2YXItPmdyZWVuLmxlbmd0aCA9IDg7CisJCXZhci0+Ymx1ZS5vZmZzZXQgPSAwOworCQl2YXItPmJsdWUubGVuZ3RoID0gODsKKwkJdmFyLT50cmFuc3Aub2Zmc2V0ID0gMjQ7CisJCXZhci0+dHJhbnNwLmxlbmd0aCA9IDg7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTExNzAsNiArMTIxOCwxMCBAQAogCQlnb3RvIGVycjE7CiAJfQogCisJLyogZm9yIGR1YWwgY2hhbm5lbCBMQ0RDIChNQUlOICsgU1VCKSBmb3JjZSBzaGFyZWQgYnBwIHNldHRpbmcgKi8KKwlpZiAoaiA9PSAyKQorCQlwcml2LT5mb3JjZWRfYnBwID0gcGRhdGEtPmNoWzBdLmJwcDsKKwogCXByaXYtPmJhc2UgPSBpb3JlbWFwX25vY2FjaGUocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIAlpZiAoIXByaXYtPmJhc2UpCiAJCWdvdG8gZXJyMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vc2lzL2luaXQuYyBiL2RyaXZlcnMvdmlkZW8vc2lzL2luaXQuYwppbmRleCAzMTEzN2FkLi42NmRlODMyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zaXMvaW5pdC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vc2lzL2luaXQuYwpAQCAtNTYsMTAgKzU2LDYgQEAKICAqIFVzZWQgYnkgcGVybWlzc2lvbi4KICAqLwogCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KICNpbmNsdWRlICJpbml0LmgiCiAKICNpZmRlZiBDT05GSUdfRkJfU0lTXzMwMApAQCAtODgwLDU5ICs4NzYsNTkgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHZvaWQKLVNpU19TZXRSZWcoU0lTSU9BRERSRVNTIHBvcnQsIHVuc2lnbmVkIHNob3J0IGluZGV4LCB1bnNpZ25lZCBzaG9ydCBkYXRhKQorU2lTX1NldFJlZyhTSVNJT0FERFJFU1MgcG9ydCwgdTggaW5kZXgsIHU4IGRhdGEpCiB7Ci0Jb3V0YigodTgpaW5kZXgsIHBvcnQpOwotCW91dGIoKHU4KWRhdGEsIHBvcnQgKyAxKTsKKwlvdXRiKGluZGV4LCBwb3J0KTsKKwlvdXRiKGRhdGEsIHBvcnQgKyAxKTsKIH0KIAogdm9pZAotU2lTX1NldFJlZ0J5dGUoU0lTSU9BRERSRVNTIHBvcnQsIHVuc2lnbmVkIHNob3J0IGRhdGEpCitTaVNfU2V0UmVnQnl0ZShTSVNJT0FERFJFU1MgcG9ydCwgdTggZGF0YSkKIHsKLQlvdXRiKCh1OClkYXRhLCBwb3J0KTsKKwlvdXRiKGRhdGEsIHBvcnQpOwogfQogCiB2b2lkCi1TaVNfU2V0UmVnU2hvcnQoU0lTSU9BRERSRVNTIHBvcnQsIHVuc2lnbmVkIHNob3J0IGRhdGEpCitTaVNfU2V0UmVnU2hvcnQoU0lTSU9BRERSRVNTIHBvcnQsIHUxNiBkYXRhKQogewotCW91dHcoKHUxNilkYXRhLCBwb3J0KTsKKwlvdXR3KGRhdGEsIHBvcnQpOwogfQogCiB2b2lkCi1TaVNfU2V0UmVnTG9uZyhTSVNJT0FERFJFU1MgcG9ydCwgdW5zaWduZWQgaW50IGRhdGEpCitTaVNfU2V0UmVnTG9uZyhTSVNJT0FERFJFU1MgcG9ydCwgdTMyIGRhdGEpCiB7Ci0Jb3V0bCgodTMyKWRhdGEsIHBvcnQpOworCW91dGwoZGF0YSwgcG9ydCk7CiB9CiAKLXVuc2lnbmVkIGNoYXIKLVNpU19HZXRSZWcoU0lTSU9BRERSRVNTIHBvcnQsIHVuc2lnbmVkIHNob3J0IGluZGV4KQordTgKK1NpU19HZXRSZWcoU0lTSU9BRERSRVNTIHBvcnQsIHU4IGluZGV4KQogewotCW91dGIoKHU4KWluZGV4LCBwb3J0KTsKKwlvdXRiKGluZGV4LCBwb3J0KTsKIAlyZXR1cm4gaW5iKHBvcnQgKyAxKTsKIH0KIAotdW5zaWduZWQgY2hhcgordTgKIFNpU19HZXRSZWdCeXRlKFNJU0lPQUREUkVTUyBwb3J0KQogewogCXJldHVybiBpbmIocG9ydCk7CiB9CiAKLXVuc2lnbmVkIHNob3J0Cit1MTYKIFNpU19HZXRSZWdTaG9ydChTSVNJT0FERFJFU1MgcG9ydCkKIHsKIAlyZXR1cm4gaW53KHBvcnQpOwogfQogCi11bnNpZ25lZCBpbnQKK3UzMgogU2lTX0dldFJlZ0xvbmcoU0lTSU9BRERSRVNTIHBvcnQpCiB7CiAJcmV0dXJuIGlubChwb3J0KTsKIH0KIAogdm9pZAotU2lTX1NldFJlZ0FORE9SKFNJU0lPQUREUkVTUyBQb3J0LCB1bnNpZ25lZCBzaG9ydCBJbmRleCwgdW5zaWduZWQgc2hvcnQgRGF0YUFORCwgdW5zaWduZWQgc2hvcnQgRGF0YU9SKQorU2lTX1NldFJlZ0FORE9SKFNJU0lPQUREUkVTUyBQb3J0LCB1OCBJbmRleCwgdTggRGF0YUFORCwgdTggRGF0YU9SKQogewotICAgdW5zaWduZWQgc2hvcnQgdGVtcDsKKyAgIHU4IHRlbXA7CiAKICAgIHRlbXAgPSBTaVNfR2V0UmVnKFBvcnQsIEluZGV4KTsKICAgIHRlbXAgPSAodGVtcCAmIChEYXRhQU5EKSkgfCBEYXRhT1I7CkBAIC05NDAsOSArOTM2LDkgQEAKIH0KIAogdm9pZAotU2lTX1NldFJlZ0FORChTSVNJT0FERFJFU1MgUG9ydCwgdW5zaWduZWQgc2hvcnQgSW5kZXgsIHVuc2lnbmVkIHNob3J0IERhdGFBTkQpCitTaVNfU2V0UmVnQU5EKFNJU0lPQUREUkVTUyBQb3J0LCB1OCBJbmRleCwgdTggRGF0YUFORCkKIHsKLSAgIHVuc2lnbmVkIHNob3J0IHRlbXA7CisgICB1OCB0ZW1wOwogCiAgICB0ZW1wID0gU2lTX0dldFJlZyhQb3J0LCBJbmRleCk7CiAgICB0ZW1wICY9IERhdGFBTkQ7CkBAIC05NTAsOSArOTQ2LDkgQEAKIH0KIAogdm9pZAotU2lTX1NldFJlZ09SKFNJU0lPQUREUkVTUyBQb3J0LCB1bnNpZ25lZCBzaG9ydCBJbmRleCwgdW5zaWduZWQgc2hvcnQgRGF0YU9SKQorU2lTX1NldFJlZ09SKFNJU0lPQUREUkVTUyBQb3J0LCB1OCBJbmRleCwgdTggRGF0YU9SKQogewotICAgdW5zaWduZWQgc2hvcnQgdGVtcDsKKyAgIHU4IHRlbXA7CiAKICAgIHRlbXAgPSBTaVNfR2V0UmVnKFBvcnQsIEluZGV4KTsKICAgIHRlbXAgfD0gRGF0YU9SOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zaXMvaW5pdC5oIGIvZHJpdmVycy92aWRlby9zaXMvaW5pdC5oCmluZGV4IGVlOGVkM2MuLmFmZjczODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vc2lzL2luaXQuaAorKysgYi9kcml2ZXJzL3ZpZGVvL3Npcy9pbml0LmgKQEAgLTE1MTYsMTkgKzE1MTYsNiBAQAogdW5zaWduZWQgc2hvcnQJU2lTX0dldE1vZGVJRF9WR0EyKGludCBWR0FFbmdpbmUsIHVuc2lnbmVkIGludCBWQkZsYWdzLCBpbnQgSERpc3BsYXksCiAJCQkJaW50IFZEaXNwbGF5LCBpbnQgRGVwdGgsIHVuc2lnbmVkIGludCBWQkZsYWdzMik7CiAKLXZvaWQJCVNpU19TZXRSZWcoU0lTSU9BRERSRVNTIHBvcnQsIHVuc2lnbmVkIHNob3J0IGluZGV4LCB1bnNpZ25lZCBzaG9ydCBkYXRhKTsKLXZvaWQJCVNpU19TZXRSZWdCeXRlKFNJU0lPQUREUkVTUyBwb3J0LCB1bnNpZ25lZCBzaG9ydCBkYXRhKTsKLXZvaWQJCVNpU19TZXRSZWdTaG9ydChTSVNJT0FERFJFU1MgcG9ydCwgdW5zaWduZWQgc2hvcnQgZGF0YSk7Ci12b2lkCQlTaVNfU2V0UmVnTG9uZyhTSVNJT0FERFJFU1MgcG9ydCwgdW5zaWduZWQgaW50IGRhdGEpOwotdW5zaWduZWQgY2hhcglTaVNfR2V0UmVnKFNJU0lPQUREUkVTUyBwb3J0LCB1bnNpZ25lZCBzaG9ydCBpbmRleCk7Ci11bnNpZ25lZCBjaGFyCVNpU19HZXRSZWdCeXRlKFNJU0lPQUREUkVTUyBwb3J0KTsKLXVuc2lnbmVkIHNob3J0CVNpU19HZXRSZWdTaG9ydChTSVNJT0FERFJFU1MgcG9ydCk7Ci11bnNpZ25lZCBpbnQJU2lTX0dldFJlZ0xvbmcoU0lTSU9BRERSRVNTIHBvcnQpOwotdm9pZAkJU2lTX1NldFJlZ0FORE9SKFNJU0lPQUREUkVTUyBQb3J0LCB1bnNpZ25lZCBzaG9ydCBJbmRleCwgdW5zaWduZWQgc2hvcnQgRGF0YUFORCwKLQkJCQl1bnNpZ25lZCBzaG9ydCBEYXRhT1IpOwotdm9pZAkJU2lTX1NldFJlZ0FORChTSVNJT0FERFJFU1MgUG9ydCx1bnNpZ25lZCBzaG9ydCBJbmRleCwgdW5zaWduZWQgc2hvcnQgRGF0YUFORCk7Ci12b2lkCQlTaVNfU2V0UmVnT1IoU0lTSU9BRERSRVNTIFBvcnQsdW5zaWduZWQgc2hvcnQgSW5kZXgsIHVuc2lnbmVkIHNob3J0IERhdGFPUik7Ci0KIHZvaWQJCVNpU19EaXNwbGF5T24oc3RydWN0IFNpU19Qcml2YXRlICpTaVNfUHIpOwogdm9pZAkJU2lTX0Rpc3BsYXlPZmYoc3RydWN0IFNpU19Qcml2YXRlICpTaVNfUHIpOwogdm9pZAkJU2lTUmVnSW5pdChzdHJ1Y3QgU2lTX1ByaXZhdGUgKlNpU19QciwgU0lTSU9BRERSRVNTIEJhc2VBZGRyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vc2lzL2luaXQzMDEuYyBiL2RyaXZlcnMvdmlkZW8vc2lzL2luaXQzMDEuYwppbmRleCA5ZmE2NmZkLi5hODllM2NhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3Npcy9pbml0MzAxLmMKKysrIGIvZHJpdmVycy92aWRlby9zaXMvaW5pdDMwMS5jCkBAIC01NywxMCArNTcsNiBAQAogICoKICAqLwogCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KICNpZiAxCiAjZGVmaW5lIFNFVF9FTUkJCS8qIDMwMkxWL0VMVjogU2V0IEVNSSB2YWx1ZXMgKi8KICNlbmRpZgpAQCAtNTg1Niw3ICs1ODUyLDcgQEAKICAgICAgdGVtcCA9IHRlbXBheCAmIDB4MDBGRjsKICAgICAgU2lTX1NldFJlZyhTaVNfUHItPlNpU19QYXJ0MVBvcnQsMHg0Myx0ZW1wKTsKICAgICAgdGVtcCA9ICgodGVtcGF4ICYgMHhGRjAwKSA+PiA4KSA8PCAzOwotICAgICBTaVNfU2V0UmVnQU5ET1IoU2lTX1ByLT5TaVNfUGFydDFQb3J0LDB4NDQsfjB4MEY4LHRlbXApOworICAgICBTaVNfU2V0UmVnQU5ET1IoU2lTX1ByLT5TaVNfUGFydDFQb3J0LCAweDQ0LCAweDA3LCB0ZW1wKTsKIAogICAgICB0ZW1wYXggPSBTaVNfUHItPlNpU19WREU7CQkJCSAJLyogQkR4V2FkcnN0MSA9IEJEeFdhZHJzdDAgKyBCRHhXYWRyb2ZmICogVkRFICovCiAgICAgIGlmKFNpU19Qci0+U2lTX0xDRFJlc0luZm8gPT0gUGFuZWxfMzIweDI0MF8xIHx8CkBAIC01ODcwLDcgKzU4NjYsNyBAQAogICAgICB0ZW1wID0gKCh0ZW1wZWF4ICYgMHhGRjAwMDApID4+IDE2KSB8IDB4MTA7CiAgICAgIFNpU19TZXRSZWcoU2lTX1ByLT5TaVNfUGFydDFQb3J0LDB4NDAsdGVtcCk7CiAgICAgIHRlbXAgPSAoKHRlbXBlYXggJiAweDAxMDAwMDAwKSA+PiAyNCkgPDwgNzsKLSAgICAgU2lTX1NldFJlZ0FORE9SKFNpU19Qci0+U2lTX1BhcnQxUG9ydCwweDNDLH4weDA4MCx0ZW1wKTsKKyAgICAgU2lTX1NldFJlZ0FORE9SKFNpU19Qci0+U2lTX1BhcnQxUG9ydCwgMHgzQywgMHg3RiwgdGVtcCk7CiAKICAgICAgU2lTX1NldFJlZyhTaVNfUHItPlNpU19QYXJ0MVBvcnQsMHgyRiwweDAzKTsKICAgICAgU2lTX1NldFJlZyhTaVNfUHItPlNpU19QYXJ0MVBvcnQsMHgwMywweDUwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vc2lzL2luaXQzMDEuaCBiL2RyaXZlcnMvdmlkZW8vc2lzL2luaXQzMDEuaAppbmRleCBlMWZkMzFkLi4yMTEyZDZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3Npcy9pbml0MzAxLmgKKysrIGIvZHJpdmVycy92aWRlby9zaXMvaW5pdDMwMS5oCkBAIC00MjgsMTcgKzQyOCw2IEBACiBzdGF0aWMgdm9pZAkJU2lTX0ZpbmFsaXplTENEKHN0cnVjdCBTaVNfUHJpdmF0ZSAqLCB1bnNpZ25lZCBzaG9ydCwgdW5zaWduZWQgc2hvcnQpOwogI2VuZGlmCiAKLWV4dGVybiB2b2lkCQlTaVNfU2V0UmVnKFNJU0lPQUREUkVTUywgdW5zaWduZWQgc2hvcnQsIHVuc2lnbmVkIHNob3J0KTsKLWV4dGVybiB2b2lkCQlTaVNfU2V0UmVnQnl0ZShTSVNJT0FERFJFU1MsIHVuc2lnbmVkIHNob3J0KTsKLWV4dGVybiB2b2lkCQlTaVNfU2V0UmVnU2hvcnQoU0lTSU9BRERSRVNTLCB1bnNpZ25lZCBzaG9ydCk7Ci1leHRlcm4gdm9pZAkJU2lTX1NldFJlZ0xvbmcoU0lTSU9BRERSRVNTLCB1bnNpZ25lZCBpbnQpOwotZXh0ZXJuIHVuc2lnbmVkIGNoYXIJU2lTX0dldFJlZyhTSVNJT0FERFJFU1MsIHVuc2lnbmVkIHNob3J0KTsKLWV4dGVybiB1bnNpZ25lZCBjaGFyCVNpU19HZXRSZWdCeXRlKFNJU0lPQUREUkVTUyk7Ci1leHRlcm4gdW5zaWduZWQgc2hvcnQJU2lTX0dldFJlZ1Nob3J0KFNJU0lPQUREUkVTUyk7Ci1leHRlcm4gdW5zaWduZWQgaW50CVNpU19HZXRSZWdMb25nKFNJU0lPQUREUkVTUyk7Ci1leHRlcm4gdm9pZAkJU2lTX1NldFJlZ0FORE9SKFNJU0lPQUREUkVTUywgdW5zaWduZWQgc2hvcnQsIHVuc2lnbmVkIHNob3J0LCB1bnNpZ25lZCBzaG9ydCk7Ci1leHRlcm4gdm9pZAkJU2lTX1NldFJlZ09SKFNJU0lPQUREUkVTUywgdW5zaWduZWQgc2hvcnQsIHVuc2lnbmVkIHNob3J0KTsKLWV4dGVybiB2b2lkCQlTaVNfU2V0UmVnQU5EKFNJU0lPQUREUkVTUywgdW5zaWduZWQgc2hvcnQsIHVuc2lnbmVkIHNob3J0KTsKIGV4dGVybiB2b2lkCQlTaVNfRGlzcGxheU9mZihzdHJ1Y3QgU2lTX1ByaXZhdGUgKlNpU19Qcik7CiBleHRlcm4gdm9pZAkJU2lTX0Rpc3BsYXlPbihzdHJ1Y3QgU2lTX1ByaXZhdGUgKlNpU19Qcik7CiBleHRlcm4gYm9vbAkJU2lTX1NlYXJjaE1vZGVJRChzdHJ1Y3QgU2lTX1ByaXZhdGUgKiwgdW5zaWduZWQgc2hvcnQgKiwgdW5zaWduZWQgc2hvcnQgKik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3Npcy9zaXMuaCBiL2RyaXZlcnMvdmlkZW8vc2lzL3Npcy5oCmluZGV4IDgwZDg5ZDMuLmVhYzdhMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vc2lzL3Npcy5oCisrKyBiL2RyaXZlcnMvdmlkZW8vc2lzL3Npcy5oCkBAIC0zMDcsNTggKzMwNywxOSBAQAogI2RlZmluZSBWQjJfTENET1ZFUjE2MDBCUklER0UJKFZCMl8zMDdUICB8IFZCMl8zMDdMVikKICNkZWZpbmUgVkIyX1JBTURBQzIwMk1IWkJSSURHRQkoVkIyXzMwMUMgIHwgVkIyXzMwN1QpCiAKLS8qIEkvTyBwb3J0IGFjY2VzcyBtYWNyb3MgKi8KLSNkZWZpbmUgaW5TSVNSRUcoYmFzZSkJCWluYihiYXNlKQorLyogSS9PIHBvcnQgYWNjZXNzIGZ1bmN0aW9ucyAqLwogCi0jZGVmaW5lIG91dFNJU1JFRyhiYXNlLHZhbCkJb3V0Yih2YWwsYmFzZSkKLQotI2RlZmluZSBvclNJU1JFRyhiYXNlLHZhbCkgICAgICAJCQlcCi0JCWRvIHsJCQkJCVwKLQkJCXU4IF9fVGVtcCA9IGluU0lTUkVHKGJhc2UpOyAJXAotCQkJb3V0U0lTUkVHKGJhc2UsIF9fVGVtcCB8ICh2YWwpKTtcCi0JCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgYW5kU0lTUkVHKGJhc2UsdmFsKSAgICAgCQkJXAotCQlkbyB7CQkJCQlcCi0JCQl1OCBfX1RlbXAgPSBpblNJU1JFRyhiYXNlKTsgCVwKLQkJCW91dFNJU1JFRyhiYXNlLCBfX1RlbXAgJiAodmFsKSk7XAotCQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIGluU0lTSURYUkVHKGJhc2UsaWR4LHZhcikJCQlcCi0JCWRvIHsJCQkJCVwKLQkJCW91dFNJU1JFRyhiYXNlLCBpZHgpOyAJCVwKLQkJCXZhciA9IGluU0lTUkVHKChiYXNlKSsxKTsJXAotCQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIG91dFNJU0lEWFJFRyhiYXNlLGlkeCx2YWwpCQkJXAotCQlkbyB7CQkJCQlcCi0JCQlvdXRTSVNSRUcoYmFzZSwgaWR4KTsJCVwKLQkJCW91dFNJU1JFRygoYmFzZSkrMSwgdmFsKTsJXAotCQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIG9yU0lTSURYUkVHKGJhc2UsaWR4LHZhbCkJCQkJXAotCQlkbyB7CQkJCQkJXAotCQkJdTggX19UZW1wOyAJCQkJXAotCQkJb3V0U0lTUkVHKGJhc2UsIGlkeCk7ICAgCQlcCi0JCQlfX1RlbXAgPSBpblNJU1JFRygoYmFzZSkrMSkgfCAodmFsKTsgCVwKLQkJCW91dFNJU1JFRygoYmFzZSkrMSwgX19UZW1wKTsJCVwKLQkJfSB3aGlsZSAoMCkKLQotI2RlZmluZSBhbmRTSVNJRFhSRUcoYmFzZSxpZHgsYW5kKQkJCQlcCi0JCWRvIHsJCQkJCQlcCi0JCQl1OCBfX1RlbXA7IAkJCQlcCi0JCQlvdXRTSVNSRUcoYmFzZSwgaWR4KTsgICAJCVwKLQkJCV9fVGVtcCA9IGluU0lTUkVHKChiYXNlKSsxKSAmIChhbmQpOyAJXAotCQkJb3V0U0lTUkVHKChiYXNlKSsxLCBfX1RlbXApOwkJXAotCQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIHNldFNJU0lEWFJFRyhiYXNlLGlkeCxhbmQsb3IpICAgCQkJCVwKLQkJZG8gewkJCQkJCQlcCi0JCQl1OCBfX1RlbXA7IAkJCQkJXAotCQkJb3V0U0lTUkVHKGJhc2UsIGlkeCk7CQkJCVwKLQkJCV9fVGVtcCA9IChpblNJU1JFRygoYmFzZSkrMSkgJiAoYW5kKSkgfCAob3IpOyAJXAotCQkJb3V0U0lTUkVHKChiYXNlKSsxLCBfX1RlbXApOwkJCVwKLQkJfSB3aGlsZSAoMCkKK3ZvaWQgU2lTX1NldFJlZyhTSVNJT0FERFJFU1MsIHU4LCB1OCk7Cit2b2lkIFNpU19TZXRSZWdCeXRlKFNJU0lPQUREUkVTUywgdTgpOwordm9pZCBTaVNfU2V0UmVnU2hvcnQoU0lTSU9BRERSRVNTLCB1MTYpOwordm9pZCBTaVNfU2V0UmVnTG9uZyhTSVNJT0FERFJFU1MsIHUzMik7Cit2b2lkIFNpU19TZXRSZWdBTkRPUihTSVNJT0FERFJFU1MsIHU4LCB1OCwgdTgpOwordm9pZCBTaVNfU2V0UmVnQU5EKFNJU0lPQUREUkVTUywgdTgsIHU4KTsKK3ZvaWQgU2lTX1NldFJlZ09SKFNJU0lPQUREUkVTUywgdTgsIHU4KTsKK3U4IFNpU19HZXRSZWcoU0lTSU9BRERSRVNTLCB1OCk7Cit1OCBTaVNfR2V0UmVnQnl0ZShTSVNJT0FERFJFU1MpOwordTE2IFNpU19HZXRSZWdTaG9ydChTSVNJT0FERFJFU1MpOwordTMyIFNpU19HZXRSZWdMb25nKFNJU0lPQUREUkVTUyk7CiAKIC8qIE1NSU8gYWNjZXNzIG1hY3JvcyAqLwogI2RlZmluZSBNTUlPX0lOOChiYXNlLCBvZmZzZXQpICByZWFkYigoYmFzZStvZmZzZXQpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zaXMvc2lzX21haW4uYyBiL2RyaXZlcnMvdmlkZW8vc2lzL3Npc19tYWluLmMKaW5kZXggN2UzMzcwZi4uMmZiOGM1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zaXMvc2lzX21haW4uYworKysgYi9kcml2ZXJzL3ZpZGVvL3Npcy9zaXNfbWFpbi5jCkBAIC03MzcsNyArNzM3LDcgQEAKIAlpZighKGl2aWRlby0+dmJmbGFnczIgJiBWQjJfVklERU9CUklER0UpKQogCQlyZXR1cm4gZmFsc2U7CiAKLQlpblNJU0lEWFJFRyhTSVNQQVJUMSwweDAwLFAxXzAwKTsKKwlQMV8wMCA9IFNpU19HZXRSZWcoU0lTUEFSVDEsIDB4MDApOwogCWlmKCAoKGl2aWRlby0+c2lzdmdhX2VuZ2luZSA9PSBTSVNfMzAwX1ZHQSkgJiYgKFAxXzAwICYgMHhhMCkgPT0gMHgyMCkgfHwKIAkgICAgKChpdmlkZW8tPnNpc3ZnYV9lbmdpbmUgPT0gU0lTXzMxNV9WR0EpICYmIChQMV8wMCAmIDB4NTApID09IDB4MTApICkgewogCQlyZXR1cm4gdHJ1ZTsKQEAgLTc1MSwxMSArNzUxLDExIEBACiB7CiAJdTggdGVtcDsKIAotCWluU0lTSURYUkVHKFNJU0NSLDB4MTcsdGVtcCk7CisJdGVtcCA9IFNpU19HZXRSZWcoU0lTQ1IsIDB4MTcpOwogCWlmKCEodGVtcCAmIDB4ODApKQogCQlyZXR1cm4gZmFsc2U7CiAKLQlpblNJU0lEWFJFRyhTSVNTUiwweDFmLHRlbXApOworCXRlbXAgPSBTaVNfR2V0UmVnKFNJU1NSLCAweDFmKTsKIAlpZih0ZW1wICYgMHhjMCkKIAkJcmV0dXJuIGZhbHNlOwogCkBAIC03NjgsNyArNzY4LDcgQEAKIAlpZighc2lzZmJhbGxvd3JldHJhY2VjcnQxKGl2aWRlbykpCiAJCXJldHVybiBmYWxzZTsKIAotCWlmKGluU0lTUkVHKFNJU0lOUFNUQVQpICYgMHgwOCkKKwlpZiAoU2lTX0dldFJlZ0J5dGUoU0lTSU5QU1RBVCkgJiAweDA4KQogCQlyZXR1cm4gdHJ1ZTsKIAllbHNlCiAJCXJldHVybiBmYWxzZTsKQEAgLTc4Myw5ICs3ODMsOSBAQAogCQlyZXR1cm47CiAKIAl3YXRjaGRvZyA9IDY1NTM2OwotCXdoaWxlKCghKGluU0lTUkVHKFNJU0lOUFNUQVQpICYgMHgwOCkpICYmIC0td2F0Y2hkb2cpOworCXdoaWxlICgoIShTaVNfR2V0UmVnQnl0ZShTSVNJTlBTVEFUKSAmIDB4MDgpKSAmJiAtLXdhdGNoZG9nKTsKIAl3YXRjaGRvZyA9IDY1NTM2OwotCXdoaWxlKChpblNJU1JFRyhTSVNJTlBTVEFUKSAmIDB4MDgpICYmIC0td2F0Y2hkb2cpOworCXdoaWxlICgoU2lTX0dldFJlZ0J5dGUoU0lTSU5QU1RBVCkgJiAweDA4KSAmJiAtLXdhdGNoZG9nKTsKIH0KIAogc3RhdGljIGJvb2wKQEAgLTc5OSw3ICs3OTksNyBAQAogCWRlZmF1bHQ6CSAgcmV0dXJuIGZhbHNlOwogCX0KIAotCWluU0lTSURYUkVHKFNJU1BBUlQxLCByZWcsIHRlbXApOworCXRlbXAgPSBTaVNfR2V0UmVnKFNJU1BBUlQxLCByZWcpOwogCWlmKHRlbXAgJiAweDAyKQogCQlyZXR1cm4gdHJ1ZTsKIAllbHNlCkBAIC04MzcsMTAgKzgzNywxMCBAQAogCQkJZGVmYXVsdDoKIAkJCWNhc2UgU0lTXzMxNV9WR0E6IGlkeCA9IDB4MzA7IGJyZWFrOwogCQl9Ci0JCWluU0lTSURYUkVHKFNJU1BBUlQxLChpZHgrMCkscmVnMSk7IC8qIDMwICovCi0JCWluU0lTSURYUkVHKFNJU1BBUlQxLChpZHgrMSkscmVnMik7IC8qIDMxICovCi0JCWluU0lTSURYUkVHKFNJU1BBUlQxLChpZHgrMikscmVnMyk7IC8qIDMyICovCi0JCWluU0lTSURYUkVHKFNJU1BBUlQxLChpZHgrMykscmVnNCk7IC8qIDMzICovCisJCXJlZzEgPSBTaVNfR2V0UmVnKFNJU1BBUlQxLCAoaWR4KzApKTsgLyogMzAgKi8KKwkJcmVnMiA9IFNpU19HZXRSZWcoU0lTUEFSVDEsIChpZHgrMSkpOyAvKiAzMSAqLworCQlyZWczID0gU2lTX0dldFJlZyhTSVNQQVJUMSwgKGlkeCsyKSk7IC8qIDMyICovCisJCXJlZzQgPSBTaVNfR2V0UmVnKFNJU1BBUlQxLCAoaWR4KzMpKTsgLyogMzMgKi8KIAkJaWYocmVnMSAmIDB4MDEpIHJldCB8PSBGQl9WQkxBTktfVkJMQU5LSU5HOwogCQlpZihyZWcxICYgMHgwMikgcmV0IHw9IEZCX1ZCTEFOS19WU1lOQ0lORzsKIAkJaWYocmVnNCAmIDB4ODApIHJldCB8PSBGQl9WQkxBTktfSEJMQU5LSU5HOwpAQCAtODUzLDEzICs4NTMsMTMgQEAKIAkJCUZCX1ZCTEFOS19IQVZFX1ZCTEFOSyB8CiAJCQlGQl9WQkxBTktfSEFWRV9WQ09VTlQgfAogCQkJRkJfVkJMQU5LX0hBVkVfSENPVU5UKTsKLQkJcmVnMSA9IGluU0lTUkVHKFNJU0lOUFNUQVQpOworCQlyZWcxID0gU2lTX0dldFJlZ0J5dGUoU0lTSU5QU1RBVCk7CiAJCWlmKHJlZzEgJiAweDA4KSByZXQgfD0gRkJfVkJMQU5LX1ZTWU5DSU5HOwogCQlpZihyZWcxICYgMHgwMSkgcmV0IHw9IEZCX1ZCTEFOS19WQkxBTktJTkc7Ci0JCWluU0lTSURYUkVHKFNJU0NSLDB4MjAscmVnMSk7Ci0JCWluU0lTSURYUkVHKFNJU0NSLDB4MWIscmVnMSk7Ci0JCWluU0lTSURYUkVHKFNJU0NSLDB4MWMscmVnMik7Ci0JCWluU0lTSURYUkVHKFNJU0NSLDB4MWQscmVnMyk7CisJCXJlZzEgPSBTaVNfR2V0UmVnKFNJU0NSLCAweDIwKTsKKwkJcmVnMSA9IFNpU19HZXRSZWcoU0lTQ1IsIDB4MWIpOworCQlyZWcyID0gU2lTX0dldFJlZyhTSVNDUiwgMHgxYyk7CisJCXJlZzMgPSBTaVNfR2V0UmVnKFNJU0NSLCAweDFkKTsKIAkJKCp2Y291bnQpID0gcmVnMiB8ICgocmVnMyAmIDB4MDcpIDw8IDgpOwogCQkoKmhjb3VudCkgPSAocmVnMSB8ICgocmVnMyAmIDB4MTApIDw8IDQpKSA8PCAzOwogCX0KQEAgLTkzMCwxMiArOTMwLDEyIEBACiAJCSAgICAgKGl2aWRlby0+c2lzZmJfdGhpc21vbml0b3IuZmVhdHVyZSAmIDB4ZTApKSkgewogCiAJCQlpZihpdmlkZW8tPnNpc3ZnYV9lbmdpbmUgPT0gU0lTXzMxNV9WR0EpIHsKLQkJCQlzZXRTSVNJRFhSRUcoU0lTQ1IsIGl2aWRlby0+U2lTX1ByLlNpU19NeUNSNjMsIDB4YmYsIGNyNjMpOworCQkJCVNpU19TZXRSZWdBTkRPUihTSVNDUiwgaXZpZGVvLT5TaVNfUHIuU2lTX015Q1I2MywgMHhiZiwgY3I2Myk7CiAJCQl9CiAKIAkJCWlmKCEoc2lzZmJfYnJpZGdlaXNzbGF2ZShpdmlkZW8pKSkgewotCQkJCXNldFNJU0lEWFJFRyhTSVNTUiwgMHgwMSwgfjB4MjAsIHNyMDEpOwotCQkJCXNldFNJU0lEWFJFRyhTSVNTUiwgMHgxZiwgMHgzZiwgc3IxZik7CisJCQkJU2lTX1NldFJlZ0FORE9SKFNJU1NSLCAweDAxLCB+MHgyMCwgc3IwMSk7CisJCQkJU2lTX1NldFJlZ0FORE9SKFNJU1NSLCAweDFmLCAweDNmLCBzcjFmKTsKIAkJCX0KIAkJfQogCkBAIC05NjUsMjUgKzk2NSwyNSBAQAogCQkgICAgKGl2aWRlby0+dmJmbGFnczIgJiAoVkIyXzMwMXxWQjJfMzB4QkRIfFZCMl9MVkRTKSkpIHx8CiAJCSAgICgoaXZpZGVvLT5zaXN2Z2FfZW5naW5lID09IFNJU18zMTVfVkdBKSAmJgogCQkgICAgKChpdmlkZW8tPnZiZmxhZ3MyICYgKFZCMl9MVkRTIHwgVkIyX0NIUk9OVEVMKSkgPT0gVkIyX0xWRFMpKSkgewotCQkJc2V0U0lTSURYUkVHKFNJU1NSLCAweDExLCB+MHgwYywgc3IxMSk7CisJCQlTaVNfU2V0UmVnQU5ET1IoU0lTU1IsIDB4MTEsIH4weDBjLCBzcjExKTsKIAkJfQogCiAJCWlmKGl2aWRlby0+c2lzdmdhX2VuZ2luZSA9PSBTSVNfMzAwX1ZHQSkgewogCQkJaWYoKGl2aWRlby0+dmJmbGFnczIgJiBWQjJfMzB4QikgJiYKIAkJCSAgICghKGl2aWRlby0+dmJmbGFnczIgJiBWQjJfMzB4QkRIKSkpIHsKLQkJCQlzZXRTSVNJRFhSRUcoU0lTUEFSVDEsIDB4MTMsIDB4M2YsIHAxXzEzKTsKKwkJCQlTaVNfU2V0UmVnQU5ET1IoU0lTUEFSVDEsIDB4MTMsIDB4M2YsIHAxXzEzKTsKIAkJCX0KIAkJfSBlbHNlIGlmKGl2aWRlby0+c2lzdmdhX2VuZ2luZSA9PSBTSVNfMzE1X1ZHQSkgewogCQkJaWYoKGl2aWRlby0+dmJmbGFnczIgJiBWQjJfMzB4QikgJiYKIAkJCSAgICghKGl2aWRlby0+dmJmbGFnczIgJiBWQjJfMzB4QkRIKSkpIHsKLQkJCQlzZXRTSVNJRFhSRUcoU0lTUEFSVDIsIDB4MDAsIDB4MWYsIHAyXzApOworCQkJCVNpU19TZXRSZWdBTkRPUihTSVNQQVJUMiwgMHgwMCwgMHgxZiwgcDJfMCk7CiAJCQl9CiAJCX0KIAogCX0gZWxzZSBpZihpdmlkZW8tPmN1cnJlbnR2YmZsYWdzICYgQ1JUMl9WR0EpIHsKIAogCQlpZihpdmlkZW8tPnZiZmxhZ3MyICYgVkIyXzMweEIpIHsKLQkJCXNldFNJU0lEWFJFRyhTSVNQQVJUMiwgMHgwMCwgMHgxZiwgcDJfMCk7CisJCQlTaVNfU2V0UmVnQU5ET1IoU0lTUEFSVDIsIDB4MDAsIDB4MWYsIHAyXzApOwogCQl9CiAKIAl9CkBAIC0xMTE0LDE1ICsxMTE0LDE1IEBACiAKIAkvKiBXZSBuZWVkIHRvIHNldCBwaXRjaCBmb3IgQ1JUMSBpZiBicmlkZ2UgaXMgaW4gc2xhdmUgbW9kZSwgdG9vICovCiAJaWYoKGl2aWRlby0+Y3VycmVudHZiZmxhZ3MgJiBWQl9ESVNQVFlQRV9ESVNQMSkgfHwgKGlzc2xhdmVtb2RlKSkgewotCQlvdXRTSVNJRFhSRUcoU0lTQ1IsMHgxMywoSERpc3BsYXkxICYgMHhGRikpOwotCQlzZXRTSVNJRFhSRUcoU0lTU1IsMHgwRSwweEYwLChIRGlzcGxheTEgPj4gOCkpOworCQlTaVNfU2V0UmVnKFNJU0NSLCAweDEzLCAoSERpc3BsYXkxICYgMHhGRikpOworCQlTaVNfU2V0UmVnQU5ET1IoU0lTU1IsIDB4MEUsIDB4RjAsIChIRGlzcGxheTEgPj4gOCkpOwogCX0KIAogCS8qIFdlIG11c3Qgbm90IHNldCB0aGUgcGl0Y2ggZm9yIENSVDIgaWYgYnJpZGdlIGlzIGluIHNsYXZlIG1vZGUgKi8KIAlpZigoaXZpZGVvLT5jdXJyZW50dmJmbGFncyAmIFZCX0RJU1BUWVBFX0RJU1AyKSAmJiAoIWlzc2xhdmVtb2RlKSkgewotCQlvclNJU0lEWFJFRyhTSVNQQVJUMSxpdmlkZW8tPkNSVDJfd3JpdGVfZW5hYmxlLDB4MDEpOwotCQlvdXRTSVNJRFhSRUcoU0lTUEFSVDEsMHgwNywoSERpc3BsYXkyICYgMHhGRikpOwotCQlzZXRTSVNJRFhSRUcoU0lTUEFSVDEsMHgwOSwweEYwLChIRGlzcGxheTIgPj4gOCkpOworCQlTaVNfU2V0UmVnT1IoU0lTUEFSVDEsIGl2aWRlby0+Q1JUMl93cml0ZV9lbmFibGUsIDB4MDEpOworCQlTaVNfU2V0UmVnKFNJU1BBUlQxLCAweDA3LCAoSERpc3BsYXkyICYgMHhGRikpOworCQlTaVNfU2V0UmVnQU5ET1IoU0lTUEFSVDEsIDB4MDksIDB4RjAsIChIRGlzcGxheTIgPj4gOCkpOwogCX0KIH0KIApAQCAtMTE2Nyw3ICsxMTY3LDcgQEAKIAkvKiA+PTIuNi4xMidzIGZiY29uIGNsZWFycyB0aGUgc2NyZWVuIGFueXdheSAqLwogCW1vZGVubyB8PSAweDgwOwogCi0Jb3V0U0lTSURYUkVHKFNJU1NSLCBJTkRfU0lTX1BBU1NXT1JELCBTSVNfUEFTU1dPUkQpOworCVNpU19TZXRSZWcoU0lTU1IsIElORF9TSVNfUEFTU1dPUkQsIFNJU19QQVNTV09SRCk7CiAKIAlzaXNmYl9wcmVfc2V0bW9kZShpdmlkZW8pOwogCkBAIC0xMTc2LDcgKzExNzYsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlvdXRTSVNJRFhSRUcoU0lTU1IsIElORF9TSVNfUEFTU1dPUkQsIFNJU19QQVNTV09SRCk7CisJU2lTX1NldFJlZyhTSVNTUiwgSU5EX1NJU19QQVNTV09SRCwgU0lTX1BBU1NXT1JEKTsKIAogCXNpc2ZiX3Bvc3Rfc2V0bW9kZShpdmlkZW8pOwogCkBAIC0xMzA4LDEzICsxMzA4LDEzIEBACiBzdGF0aWMgdm9pZAogc2lzZmJfc2V0X2Jhc2VfQ1JUMShzdHJ1Y3Qgc2lzX3ZpZGVvX2luZm8gKml2aWRlbywgdW5zaWduZWQgaW50IGJhc2UpCiB7Ci0Jb3V0U0lTSURYUkVHKFNJU1NSLCBJTkRfU0lTX1BBU1NXT1JELCBTSVNfUEFTU1dPUkQpOworCVNpU19TZXRSZWcoU0lTU1IsIElORF9TSVNfUEFTU1dPUkQsIFNJU19QQVNTV09SRCk7CiAKLQlvdXRTSVNJRFhSRUcoU0lTQ1IsIDB4MEQsIGJhc2UgJiAweEZGKTsKLQlvdXRTSVNJRFhSRUcoU0lTQ1IsIDB4MEMsIChiYXNlID4+IDgpICYgMHhGRik7Ci0Jb3V0U0lTSURYUkVHKFNJU1NSLCAweDBELCAoYmFzZSA+PiAxNikgJiAweEZGKTsKKwlTaVNfU2V0UmVnKFNJU0NSLCAweDBELCBiYXNlICYgMHhGRik7CisJU2lTX1NldFJlZyhTSVNDUiwgMHgwQywgKGJhc2UgPj4gOCkgJiAweEZGKTsKKwlTaVNfU2V0UmVnKFNJU1NSLCAweDBELCAoYmFzZSA+PiAxNikgJiAweEZGKTsKIAlpZihpdmlkZW8tPnNpc3ZnYV9lbmdpbmUgPT0gU0lTXzMxNV9WR0EpIHsKLQkJc2V0U0lTSURYUkVHKFNJU1NSLCAweDM3LCAweEZFLCAoYmFzZSA+PiAyNCkgJiAweDAxKTsKKwkJU2lTX1NldFJlZ0FORE9SKFNJU1NSLCAweDM3LCAweEZFLCAoYmFzZSA+PiAyNCkgJiAweDAxKTsKIAl9CiB9CiAKQEAgLTEzMjIsMTIgKzEzMjIsMTIgQEAKIHNpc2ZiX3NldF9iYXNlX0NSVDIoc3RydWN0IHNpc192aWRlb19pbmZvICppdmlkZW8sIHVuc2lnbmVkIGludCBiYXNlKQogewogCWlmKGl2aWRlby0+Y3VycmVudHZiZmxhZ3MgJiBWQl9ESVNQVFlQRV9ESVNQMikgewotCQlvclNJU0lEWFJFRyhTSVNQQVJUMSwgaXZpZGVvLT5DUlQyX3dyaXRlX2VuYWJsZSwgMHgwMSk7Ci0JCW91dFNJU0lEWFJFRyhTSVNQQVJUMSwgMHgwNiwgKGJhc2UgJiAweEZGKSk7Ci0JCW91dFNJU0lEWFJFRyhTSVNQQVJUMSwgMHgwNSwgKChiYXNlID4+IDgpICYgMHhGRikpOwotCQlvdXRTSVNJRFhSRUcoU0lTUEFSVDEsIDB4MDQsICgoYmFzZSA+PiAxNikgJiAweEZGKSk7CisJCVNpU19TZXRSZWdPUihTSVNQQVJUMSwgaXZpZGVvLT5DUlQyX3dyaXRlX2VuYWJsZSwgMHgwMSk7CisJCVNpU19TZXRSZWcoU0lTUEFSVDEsIDB4MDYsIChiYXNlICYgMHhGRikpOworCQlTaVNfU2V0UmVnKFNJU1BBUlQxLCAweDA1LCAoKGJhc2UgPj4gOCkgJiAweEZGKSk7CisJCVNpU19TZXRSZWcoU0lTUEFSVDEsIDB4MDQsICgoYmFzZSA+PiAxNikgJiAweEZGKSk7CiAJCWlmKGl2aWRlby0+c2lzdmdhX2VuZ2luZSA9PSBTSVNfMzE1X1ZHQSkgewotCQkJc2V0U0lTSURYUkVHKFNJU1BBUlQxLCAweDAyLCAweDdGLCAoKGJhc2UgPj4gMjQpICYgMHgwMSkgPDwgNyk7CisJCQlTaVNfU2V0UmVnQU5ET1IoU0lTUEFSVDEsIDB4MDIsIDB4N0YsICgoYmFzZSA+PiAyNCkgJiAweDAxKSA8PCA3KTsKIAkJfQogCX0KIH0KQEAgLTEzODgsMTUgKzEzODgsMTUgQEAKIAogCXN3aXRjaChpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwpIHsKIAljYXNlIDg6Ci0JCW91dFNJU1JFRyhTSVNEQUNBLCByZWdubyk7Ci0JCW91dFNJU1JFRyhTSVNEQUNELCAocmVkID4+IDEwKSk7Ci0JCW91dFNJU1JFRyhTSVNEQUNELCAoZ3JlZW4gPj4gMTApKTsKLQkJb3V0U0lTUkVHKFNJU0RBQ0QsIChibHVlID4+IDEwKSk7CisJCVNpU19TZXRSZWdCeXRlKFNJU0RBQ0EsIHJlZ25vKTsKKwkJU2lTX1NldFJlZ0J5dGUoU0lTREFDRCwgKHJlZCA+PiAxMCkpOworCQlTaVNfU2V0UmVnQnl0ZShTSVNEQUNELCAoZ3JlZW4gPj4gMTApKTsKKwkJU2lTX1NldFJlZ0J5dGUoU0lTREFDRCwgKGJsdWUgPj4gMTApKTsKIAkJaWYoaXZpZGVvLT5jdXJyZW50dmJmbGFncyAmIFZCX0RJU1BUWVBFX0RJU1AyKSB7Ci0JCQlvdXRTSVNSRUcoU0lTREFDMkEsIHJlZ25vKTsKLQkJCW91dFNJU1JFRyhTSVNEQUMyRCwgKHJlZCA+PiA4KSk7Ci0JCQlvdXRTSVNSRUcoU0lTREFDMkQsIChncmVlbiA+PiA4KSk7Ci0JCQlvdXRTSVNSRUcoU0lTREFDMkQsIChibHVlID4+IDgpKTsKKwkJCVNpU19TZXRSZWdCeXRlKFNJU0RBQzJBLCByZWdubyk7CisJCQlTaVNfU2V0UmVnQnl0ZShTSVNEQUMyRCwgKHJlZCA+PiA4KSk7CisJCQlTaVNfU2V0UmVnQnl0ZShTSVNEQUMyRCwgKGdyZWVuID4+IDgpKTsKKwkJCVNpU19TZXRSZWdCeXRlKFNJU0RBQzJELCAoYmx1ZSA+PiA4KSk7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSAxNjoKQEAgLTE5NjEsNyArMTk2MSw3IEBACiAJc3dpdGNoKGl2aWRlby0+Y2hpcCkgewogI2lmZGVmIENPTkZJR19GQl9TSVNfMzAwCiAJY2FzZSBTSVNfMzAwOgotCQlpblNJU0lEWFJFRyhTSVNTUiwgMHgxNCwgcmVnKTsKKwkJcmVnID0gU2lTX0dldFJlZyhTSVNTUiwgMHgxNCk7CiAJCWl2aWRlby0+dmlkZW9fc2l6ZSA9ICgocmVnICYgMHgzRikgKyAxKSA8PCAyMDsKIAkJYnJlYWs7CiAJY2FzZSBTSVNfNTQwOgpAQCAtMTk3Nyw3ICsxOTc3LDcgQEAKIAljYXNlIFNJU18zMTVIOgogCWNhc2UgU0lTXzMxNVBSTzoKIAljYXNlIFNJU18zMTU6Ci0JCWluU0lTSURYUkVHKFNJU1NSLCAweDE0LCByZWcpOworCQlyZWcgPSBTaVNfR2V0UmVnKFNJU1NSLCAweDE0KTsKIAkJaXZpZGVvLT52aWRlb19zaXplID0gKDEgPDwgKChyZWcgJiAweGYwKSA+PiA0KSkgPDwgMjA7CiAJCXN3aXRjaCgocmVnID4+IDIpICYgMHgwMykgewogCQljYXNlIDB4MDE6CkBAIC0xOTg5LDMxICsxOTg5LDMxIEBACiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBTSVNfMzMwOgotCQlpblNJU0lEWFJFRyhTSVNTUiwgMHgxNCwgcmVnKTsKKwkJcmVnID0gU2lTX0dldFJlZyhTSVNTUiwgMHgxNCk7CiAJCWl2aWRlby0+dmlkZW9fc2l6ZSA9ICgxIDw8ICgocmVnICYgMHhmMCkgPj4gNCkpIDw8IDIwOwogCQlpZihyZWcgJiAweDBjKSBpdmlkZW8tPnZpZGVvX3NpemUgPDw9IDE7CiAJCWJyZWFrOwogCWNhc2UgU0lTXzU1MDoKIAljYXNlIFNJU182NTA6CiAJY2FzZSBTSVNfNzQwOgotCQlpblNJU0lEWFJFRyhTSVNTUiwgMHgxNCwgcmVnKTsKKwkJcmVnID0gU2lTX0dldFJlZyhTSVNTUiwgMHgxNCk7CiAJCWl2aWRlby0+dmlkZW9fc2l6ZSA9ICgoKHJlZyAmIDB4M2YpICsgMSkgPDwgMikgPDwgMjA7CiAJCWJyZWFrOwogCWNhc2UgU0lTXzY2MToKIAljYXNlIFNJU183NDE6Ci0JCWluU0lTSURYUkVHKFNJU0NSLCAweDc5LCByZWcpOworCQlyZWcgPSBTaVNfR2V0UmVnKFNJU0NSLCAweDc5KTsKIAkJaXZpZGVvLT52aWRlb19zaXplID0gKDEgPDwgKChyZWcgJiAweGYwKSA+PiA0KSkgPDwgMjA7CiAJCWJyZWFrOwogCWNhc2UgU0lTXzY2MDoKIAljYXNlIFNJU183NjA6CiAJY2FzZSBTSVNfNzYxOgotCQlpblNJU0lEWFJFRyhTSVNDUiwgMHg3OSwgcmVnKTsKKwkJcmVnID0gU2lTX0dldFJlZyhTSVNDUiwgMHg3OSk7CiAJCXJlZyA9IChyZWcgJiAweGYwKSA+PiA0OwogCQlpZihyZWcpCXsKIAkJCWl2aWRlby0+dmlkZW9fc2l6ZSA9ICgxIDw8IHJlZykgPDwgMjA7CiAJCQlpdmlkZW8tPlVNQXNpemUgPSBpdmlkZW8tPnZpZGVvX3NpemU7CiAJCX0KLQkJaW5TSVNJRFhSRUcoU0lTQ1IsIDB4NzgsIHJlZyk7CisJCXJlZyA9IFNpU19HZXRSZWcoU0lTQ1IsIDB4NzgpOwogCQlyZWcgJj0gMHgzMDsKIAkJaWYocmVnKSB7CiAJCQlpZihyZWcgPT0gMHgxMCkgewpAQCAtMjAyNyw3ICsyMDI3LDcgQEAKIAljYXNlIFNJU18zNDA6CiAJY2FzZSBYR0lfMjA6CiAJY2FzZSBYR0lfNDA6Ci0JCWluU0lTSURYUkVHKFNJU1NSLCAweDE0LCByZWcpOworCQlyZWcgPSBTaVNfR2V0UmVnKFNJU1NSLCAweDE0KTsKIAkJaXZpZGVvLT52aWRlb19zaXplID0gKDEgPDwgKChyZWcgJiAweGYwKSA+PiA0KSkgPDwgMjA7CiAJCWlmKGl2aWRlby0+Y2hpcCAhPSBYR0lfMjApIHsKIAkJCXJlZyA9IChyZWcgJiAweDBjKSA+PiAyOwpAQCAtMjA2MSwxMSArMjA2MSwxMSBAQAogCiAjaWZkZWYgQ09ORklHX0ZCX1NJU18zMDAKIAlpZihpdmlkZW8tPnNpc3ZnYV9lbmdpbmUgPT0gU0lTXzMwMF9WR0EpIHsKLQkJaW5TSVNJRFhSRUcoU0lTU1IsIDB4MTcsIHRlbXApOworCQl0ZW1wID0gU2lTX0dldFJlZyhTSVNTUiwgMHgxNyk7CiAJCWlmKCh0ZW1wICYgMHgwRikgJiYgKGl2aWRlby0+Y2hpcCAhPSBTSVNfMzAwKSkgewogCQkJLyogUEFML05UU0MgaXMgc3RvcmVkIG9uIFNSMTYgb24gc3VjaCBtYWNoaW5lcyAqLwogCQkJaWYoIShpdmlkZW8tPnZiZmxhZ3MgJiAoVFZfUEFMIHwgVFZfTlRTQyB8IFRWX1BBTE0gfCBUVl9QQUxOKSkpIHsKLQkJCQlpblNJU0lEWFJFRyhTSVNTUiwgMHgxNiwgdGVtcCk7CisJCQkJdGVtcCA9IFNpU19HZXRSZWcoU0lTU1IsIDB4MTYpOwogCQkJCWlmKHRlbXAgJiAweDIwKQogCQkJCQlpdmlkZW8tPnZiZmxhZ3MgfD0gVFZfUEFMOwogCQkJCWVsc2UKQEAgLTIwNzUsNyArMjA3NSw3IEBACiAJfQogI2VuZGlmCiAKLQlpblNJU0lEWFJFRyhTSVNDUiwgMHgzMiwgY3IzMik7CisJY3IzMiA9IFNpU19HZXRSZWcoU0lTQ1IsIDB4MzIpOwogCiAJaWYoY3IzMiAmIFNJU19DUlQxKSB7CiAJCWl2aWRlby0+c2lzZmJfY3J0MW9mZiA9IDA7CkBAIC0yMTUxLDE1ICsyMTUxLDE1IEBACiAJICAgIH0KIAkgICAgaWYoIShpdmlkZW8tPnZiZmxhZ3MgJiAoVFZfUEFMIHwgVFZfTlRTQyB8IFRWX1BBTE0gfCBUVl9QQUxOIHwgVFZfTlRTQ0opKSkgewogCQlpZihpdmlkZW8tPnNpc3ZnYV9lbmdpbmUgPT0gU0lTXzMwMF9WR0EpIHsKLQkJCWluU0lTSURYUkVHKFNJU1NSLCAweDM4LCB0ZW1wKTsKKwkJCXRlbXAgPSBTaVNfR2V0UmVnKFNJU1NSLCAweDM4KTsKIAkJCWlmKHRlbXAgJiAweDAxKSBpdmlkZW8tPnZiZmxhZ3MgfD0gVFZfUEFMOwogCQkJZWxzZQkJaXZpZGVvLT52YmZsYWdzIHw9IFRWX05UU0M7CiAJCX0gZWxzZSBpZigoaXZpZGVvLT5jaGlwIDw9IFNJU18zMTVQUk8pIHx8IChpdmlkZW8tPmNoaXAgPj0gU0lTXzMzMCkpIHsKLQkJCWluU0lTSURYUkVHKFNJU1NSLCAweDM4LCB0ZW1wKTsKKwkJCXRlbXAgPSBTaVNfR2V0UmVnKFNJU1NSLCAweDM4KTsKIAkJCWlmKHRlbXAgJiAweDAxKSBpdmlkZW8tPnZiZmxhZ3MgfD0gVFZfUEFMOwogCQkJZWxzZQkJaXZpZGVvLT52YmZsYWdzIHw9IFRWX05UU0M7CiAJCX0gZWxzZSB7Ci0JCQlpblNJU0lEWFJFRyhTSVNDUiwgMHg3OSwgdGVtcCk7CisJCQl0ZW1wID0gU2lTX0dldFJlZyhTSVNDUiwgMHg3OSk7CiAJCQlpZih0ZW1wICYgMHgyMCkJaXZpZGVvLT52YmZsYWdzIHw9IFRWX1BBTDsKIAkJCWVsc2UJCWl2aWRlby0+dmJmbGFncyB8PSBUVl9OVFNDOwogCQl9CkBAIC0yMTk4LDI2ICsyMTk4LDI2IEBACiAgICAgdTE2IHRlbXAgPSAweGZmZmY7CiAgICAgaW50IGk7CiAKLSAgICBpblNJU0lEWFJFRyhTSVNTUiwweDFGLHNyMUYpOwotICAgIG9yU0lTSURYUkVHKFNJU1NSLDB4MUYsMHgwNCk7Ci0gICAgYW5kU0lTSURYUkVHKFNJU1NSLDB4MUYsMHgzRik7CisgICAgc3IxRiA9IFNpU19HZXRSZWcoU0lTU1IsIDB4MUYpOworICAgIFNpU19TZXRSZWdPUihTSVNTUiwgMHgxRiwgMHgwNCk7CisgICAgU2lTX1NldFJlZ0FORChTSVNTUiwgMHgxRiwgMHgzRik7CiAgICAgaWYoc3IxRiAmIDB4YzApIG11c3R3YWl0ID0gdHJ1ZTsKIAogI2lmZGVmIENPTkZJR19GQl9TSVNfMzE1CiAgICAgaWYoaXZpZGVvLT5zaXN2Z2FfZW5naW5lID09IFNJU18zMTVfVkdBKSB7Ci0gICAgICAgaW5TSVNJRFhSRUcoU0lTQ1IsaXZpZGVvLT5TaVNfUHIuU2lTX015Q1I2MyxjcjYzKTsKKyAgICAgICBjcjYzID0gU2lTX0dldFJlZyhTSVNDUiwgaXZpZGVvLT5TaVNfUHIuU2lTX015Q1I2Myk7CiAgICAgICAgY3I2MyAmPSAweDQwOwotICAgICAgIGFuZFNJU0lEWFJFRyhTSVNDUixpdmlkZW8tPlNpU19Qci5TaVNfTXlDUjYzLDB4QkYpOworICAgICAgIFNpU19TZXRSZWdBTkQoU0lTQ1IsIGl2aWRlby0+U2lTX1ByLlNpU19NeUNSNjMsIDB4QkYpOwogICAgIH0KICNlbmRpZgogCi0gICAgaW5TSVNJRFhSRUcoU0lTQ1IsMHgxNyxjcjE3KTsKKyAgICBjcjE3ID0gU2lTX0dldFJlZyhTSVNDUiwgMHgxNyk7CiAgICAgY3IxNyAmPSAweDgwOwogICAgIGlmKCFjcjE3KSB7Ci0gICAgICAgb3JTSVNJRFhSRUcoU0lTQ1IsMHgxNywweDgwKTsKKyAgICAgICBTaVNfU2V0UmVnT1IoU0lTQ1IsIDB4MTcsIDB4ODApOwogICAgICAgIG11c3R3YWl0ID0gdHJ1ZTsKLSAgICAgICBvdXRTSVNJRFhSRUcoU0lTU1IsIDB4MDAsIDB4MDEpOwotICAgICAgIG91dFNJU0lEWFJFRyhTSVNTUiwgMHgwMCwgMHgwMyk7CisgICAgICAgU2lTX1NldFJlZyhTSVNTUiwgMHgwMCwgMHgwMSk7CisgICAgICAgU2lTX1NldFJlZyhTSVNTUiwgMHgwMCwgMHgwMyk7CiAgICAgfQogCiAgICAgaWYobXVzdHdhaXQpIHsKQEAgLTIyMjYsMTggKzIyMjYsMTggQEAKIAogI2lmZGVmIENPTkZJR19GQl9TSVNfMzE1CiAgICAgaWYoaXZpZGVvLT5jaGlwID49IFNJU18zMzApIHsKLSAgICAgICBhbmRTSVNJRFhSRUcoU0lTQ1IsMHgzMix+MHgyMCk7CisgICAgICAgU2lTX1NldFJlZ0FORChTSVNDUiwgMHgzMiwgfjB4MjApOwogICAgICAgIGlmKGl2aWRlby0+Y2hpcCA+PSBTSVNfMzQwKSB7Ci0gICAgICAgICAgb3V0U0lTSURYUkVHKFNJU0NSLCAweDU3LCAweDRhKTsKKwkgICBTaVNfU2V0UmVnKFNJU0NSLCAweDU3LCAweDRhKTsKICAgICAgICB9IGVsc2UgewotICAgICAgICAgIG91dFNJU0lEWFJFRyhTSVNDUiwgMHg1NywgMHg1Zik7CisJICAgU2lTX1NldFJlZyhTSVNDUiwgMHg1NywgMHg1Zik7CiAgICAgICAgfQotICAgICAgIG9yU0lTSURYUkVHKFNJU0NSLCAweDUzLCAweDAyKTsKLSAgICAgICB3aGlsZSgoaW5TSVNSRUcoU0lTSU5QU1RBVCkpICYgMHgwMSkgICAgYnJlYWs7Ci0gICAgICAgd2hpbGUoISgoaW5TSVNSRUcoU0lTSU5QU1RBVCkpICYgMHgwMSkpIGJyZWFrOwotICAgICAgIGlmKChpblNJU1JFRyhTSVNNSVNDVykpICYgMHgxMCkgdGVtcCA9IDE7Ci0gICAgICAgYW5kU0lTSURYUkVHKFNJU0NSLCAweDUzLCAweGZkKTsKLSAgICAgICBhbmRTSVNJRFhSRUcoU0lTQ1IsIDB4NTcsIDB4MDApOworCVNpU19TZXRSZWdPUihTSVNDUiwgMHg1MywgMHgwMik7CisJd2hpbGUgKChTaVNfR2V0UmVnQnl0ZShTSVNJTlBTVEFUKSkgJiAweDAxKSAgICBicmVhazsKKwl3aGlsZSAoISgoU2lTX0dldFJlZ0J5dGUoU0lTSU5QU1RBVCkpICYgMHgwMSkpIGJyZWFrOworCWlmICgoU2lTX0dldFJlZ0J5dGUoU0lTTUlTQ1cpKSAmIDB4MTApIHRlbXAgPSAxOworCVNpU19TZXRSZWdBTkQoU0lTQ1IsIDB4NTMsIDB4ZmQpOworCVNpU19TZXRSZWdBTkQoU0lTQ1IsIDB4NTcsIDB4MDApOwogICAgIH0KICNlbmRpZgogCkBAIC0yMjU0LDE4ICsyMjU0LDE4IEBACiAgICAgfQogCiAgICAgaWYoKHRlbXApICYmICh0ZW1wICE9IDB4ZmZmZikpIHsKLSAgICAgICBvclNJU0lEWFJFRyhTSVNDUiwweDMyLDB4MjApOworICAgICAgIFNpU19TZXRSZWdPUihTSVNDUiwgMHgzMiwgMHgyMCk7CiAgICAgfQogCiAjaWZkZWYgQ09ORklHX0ZCX1NJU18zMTUKICAgICBpZihpdmlkZW8tPnNpc3ZnYV9lbmdpbmUgPT0gU0lTXzMxNV9WR0EpIHsKLSAgICAgICBzZXRTSVNJRFhSRUcoU0lTQ1IsaXZpZGVvLT5TaVNfUHIuU2lTX015Q1I2MywweEJGLGNyNjMpOworCVNpU19TZXRSZWdBTkRPUihTSVNDUiwgaXZpZGVvLT5TaVNfUHIuU2lTX015Q1I2MywgMHhCRiwgY3I2Myk7CiAgICAgfQogI2VuZGlmCiAKLSAgICBzZXRTSVNJRFhSRUcoU0lTQ1IsMHgxNywweDdGLGNyMTcpOworICAgIFNpU19TZXRSZWdBTkRPUihTSVNDUiwgMHgxNywgMHg3RiwgY3IxNyk7CiAKLSAgICBvdXRTSVNJRFhSRUcoU0lTU1IsMHgxRixzcjFGKTsKKyAgICBTaVNfU2V0UmVnKFNJU1NSLCAweDFGLCBzcjFGKTsKIH0KIAogLyogRGV0ZXJtaW5lIGFuZCBkZXRlY3QgYXR0YWNoZWQgZGV2aWNlcyBvbiBTaVMzMHggKi8KQEAgLTIyODYsNyArMjI4Niw3IEBACiAJCXJldHVybjsKIAogCS8qIElmIExDRCBhbHJlYWR5IHNldCB1cCBieSBCSU9TLCBza2lwIGl0ICovCi0JaW5TSVNJRFhSRUcoU0lTQ1IsIDB4MzIsIHJlZyk7CisJcmVnID0gU2lTX0dldFJlZyhTSVNDUiwgMHgzMik7CiAJaWYocmVnICYgMHgwOCkKIAkJcmV0dXJuOwogCkBAIC0yMzQ5LDEwICsyMzQ5LDEwIEBACiAJZWxzZQogCQljcjM3IHw9IDB4YzA7CiAKLQlvdXRTSVNJRFhSRUcoU0lTQ1IsIDB4MzYsIHBhbmVsdHlwZSk7CisJU2lTX1NldFJlZyhTSVNDUiwgMHgzNiwgcGFuZWx0eXBlKTsKIAljcjM3ICY9IDB4ZjE7Ci0Jc2V0U0lTSURYUkVHKFNJU0NSLCAweDM3LCAweDBjLCBjcjM3KTsKLQlvclNJU0lEWFJFRyhTSVNDUiwgMHgzMiwgMHgwOCk7CisJU2lTX1NldFJlZ0FORE9SKFNJU0NSLCAweDM3LCAweDBjLCBjcjM3KTsKKwlTaVNfU2V0UmVnT1IoU0lTQ1IsIDB4MzIsIDB4MDgpOwogCiAJaXZpZGVvLT5TaVNfUHIuUGFuZWxTZWxmRGV0ZWN0ZWQgPSB0cnVlOwogfQpAQCAtMjM2NiwxOSArMjM2NiwxOSBAQAogICAgICAgIHJlc3VsdCA9IDA7CiAgICAgICAgZm9yKGkgPSAwOyBpIDwgMzsgaSsrKSB7CiAgICAgICAgICAgbXl0ZXN0ID0gdGVzdDsKLSAgICAgICAgICBvdXRTSVNJRFhSRUcoU0lTUEFSVDQsMHgxMSwodHlwZSAmIDB4MDBmZikpOworCSAgIFNpU19TZXRSZWcoU0lTUEFSVDQsIDB4MTEsICh0eXBlICYgMHgwMGZmKSk7CiAgICAgICAgICAgdGVtcCA9ICh0eXBlID4+IDgpIHwgKG15dGVzdCAmIDB4MDBmZik7Ci0gICAgICAgICAgc2V0U0lTSURYUkVHKFNJU1BBUlQ0LDB4MTAsMHhlMCx0ZW1wKTsKKwkgIFNpU19TZXRSZWdBTkRPUihTSVNQQVJUNCwgMHgxMCwgMHhlMCwgdGVtcCk7CiAgICAgICAgICAgU2lTX0REQzJEZWxheSgmaXZpZGVvLT5TaVNfUHIsIDB4MTUwMCk7CiAgICAgICAgICAgbXl0ZXN0ID4+PSA4OwogICAgICAgICAgIG15dGVzdCAmPSAweDdmOwotICAgICAgICAgIGluU0lTSURYUkVHKFNJU1BBUlQ0LDB4MDMsdGVtcCk7CisJICAgdGVtcCA9IFNpU19HZXRSZWcoU0lTUEFSVDQsIDB4MDMpOwogICAgICAgICAgIHRlbXAgXj0gMHgwZTsKICAgICAgICAgICB0ZW1wICY9IG15dGVzdDsKICAgICAgICAgICBpZih0ZW1wID09IG15dGVzdCkgcmVzdWx0Kys7CiAjaWYgMQotCSAgb3V0U0lTSURYUkVHKFNJU1BBUlQ0LDB4MTEsMHgwMCk7Ci0JICBhbmRTSVNJRFhSRUcoU0lTUEFSVDQsMHgxMCwweGUwKTsKKwkgIFNpU19TZXRSZWcoU0lTUEFSVDQsIDB4MTEsIDB4MDApOworCSAgU2lTX1NldFJlZ0FORChTSVNQQVJUNCwgMHgxMCwgMHhlMCk7CiAJICBTaVNfRERDMkRlbGF5KCZpdmlkZW8tPlNpU19QciwgMHgxMDAwKTsKICNlbmRpZgogICAgICAgIH0KQEAgLTI0MDAsNyArMjQwMCw3IEBACiAKICAgICBpZihpdmlkZW8tPnZiZmxhZ3MyICYgVkIyXzMwMSkgewogICAgICAgIHN2aHMgPSAweDAwYjk7IGN2YnMgPSAweDAwYjM7IHZnYTIgPSAweDAwZDE7Ci0gICAgICAgaW5TSVNJRFhSRUcoU0lTUEFSVDQsMHgwMSxteWZsYWcpOworICAgICAgIG15ZmxhZyA9IFNpU19HZXRSZWcoU0lTUEFSVDQsIDB4MDEpOwogICAgICAgIGlmKG15ZmxhZyAmIDB4MDQpIHsKIAkgIHN2aHMgPSAweDAwZGQ7IGN2YnMgPSAweDAwZWU7IHZnYTIgPSAweDAwZmQ7CiAgICAgICAgfQpAQCAtMjQzMCw3ICsyNDMwLDcgQEAKICAgICB9CiAKICAgICBpZihpdmlkZW8tPmNoaXAgPT0gU0lTXzMwMCkgewotICAgICAgIGluU0lTSURYUkVHKFNJU1NSLDB4M2IsbXlmbGFnKTsKKyAgICAgICBteWZsYWcgPSBTaVNfR2V0UmVnKFNJU1NSLCAweDNiKTsKICAgICAgICBpZighKG15ZmxhZyAmIDB4MDEpKSB2Z2EyID0gdmdhMl9jID0gMDsKICAgICB9CiAKQEAgLTI0MzgsOTMgKzI0MzgsOTMgQEAKICAgICAgICB2Z2EyID0gdmdhMl9jID0gMDsKICAgICB9CiAKLSAgICBpblNJU0lEWFJFRyhTSVNTUiwweDFlLGJhY2t1cFNSXzFlKTsKLSAgICBvclNJU0lEWFJFRyhTSVNTUiwweDFlLDB4MjApOworICAgIGJhY2t1cFNSXzFlID0gU2lTX0dldFJlZyhTSVNTUiwgMHgxZSk7CisgICAgU2lTX1NldFJlZ09SKFNJU1NSLCAweDFlLCAweDIwKTsKIAotICAgIGluU0lTSURYUkVHKFNJU1BBUlQ0LDB4MGQsYmFja3VwUDRfMGQpOworICAgIGJhY2t1cFA0XzBkID0gU2lTX0dldFJlZyhTSVNQQVJUNCwgMHgwZCk7CiAgICAgaWYoaXZpZGVvLT52YmZsYWdzMiAmIFZCMl8zMHhDKSB7Ci0gICAgICAgc2V0U0lTSURYUkVHKFNJU1BBUlQ0LDB4MGQsfjB4MDcsMHgwMSk7CisJU2lTX1NldFJlZ0FORE9SKFNJU1BBUlQ0LCAweDBkLCB+MHgwNywgMHgwMSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICBvclNJU0lEWFJFRyhTSVNQQVJUNCwweDBkLDB4MDQpOworICAgICAgIFNpU19TZXRSZWdPUihTSVNQQVJUNCwgMHgwZCwgMHgwNCk7CiAgICAgfQogICAgIFNpU19EREMyRGVsYXkoJml2aWRlby0+U2lTX1ByLCAweDIwMDApOwogCi0gICAgaW5TSVNJRFhSRUcoU0lTUEFSVDIsMHgwMCxiYWNrdXBQMl8wMCk7Ci0gICAgb3V0U0lTSURYUkVHKFNJU1BBUlQyLDB4MDAsKChiYWNrdXBQMl8wMCB8IDB4MWMpICYgMHhmYykpOworICAgIGJhY2t1cFAyXzAwID0gU2lTX0dldFJlZyhTSVNQQVJUMiwgMHgwMCk7CisgICAgU2lTX1NldFJlZyhTSVNQQVJUMiwgMHgwMCwgKChiYWNrdXBQMl8wMCB8IDB4MWMpICYgMHhmYykpOwogCi0gICAgaW5TSVNJRFhSRUcoU0lTUEFSVDIsMHg0ZCxiYWNrdXBQMl80ZCk7CisgICAgYmFja3VwUDJfNGQgPSBTaVNfR2V0UmVnKFNJU1BBUlQyLCAweDRkKTsKICAgICBpZihpdmlkZW8tPnZiZmxhZ3MyICYgVkIyX1NJU1lQQlBSQlJJREdFKSB7Ci0gICAgICAgb3V0U0lTSURYUkVHKFNJU1BBUlQyLDB4NGQsKGJhY2t1cFAyXzRkICYgfjB4MTApKTsKKwlTaVNfU2V0UmVnKFNJU1BBUlQyLCAweDRkLCAoYmFja3VwUDJfNGQgJiB+MHgxMCkpOwogICAgIH0KIAogICAgIGlmKCEoaXZpZGVvLT52YmZsYWdzMiAmIFZCMl8zMHhDTFYpKSB7CiAgICAgICAgU0lTRG9TZW5zZShpdmlkZW8sIDAsIDApOwogICAgIH0KIAotICAgIGFuZFNJU0lEWFJFRyhTSVNDUiwgMHgzMiwgfjB4MTQpOworICAgIFNpU19TZXRSZWdBTkQoU0lTQ1IsIDB4MzIsIH4weDE0KTsKIAogICAgIGlmKHZnYTJfYyB8fCB2Z2EyKSB7CiAgICAgICAgaWYoU0lTRG9TZW5zZShpdmlkZW8sIHZnYTIsIHZnYTJfYykpIHsKICAgICAgICAgICBpZihiaW9zZmxhZyAmIDB4MDEpIHsKIAkgICAgIHByaW50ayhLRVJOX0lORk8gIiVzICVzIFNDQVJUIG91dHB1dFxuIiwgc3Rkc3RyLCB0dnN0cik7Ci0JICAgICBvclNJU0lEWFJFRyhTSVNDUiwgMHgzMiwgMHgwNCk7CisJICAgICBTaVNfU2V0UmVnT1IoU0lTQ1IsIDB4MzIsIDB4MDQpOwogCSAgfSBlbHNlIHsKIAkgICAgIHByaW50ayhLRVJOX0lORk8gIiVzIHNlY29uZGFyeSBWR0EgY29ubmVjdGlvblxuIiwgc3Rkc3RyKTsKLQkgICAgIG9yU0lTSURYUkVHKFNJU0NSLCAweDMyLCAweDEwKTsKKwkgICAgIFNpU19TZXRSZWdPUihTSVNDUiwgMHgzMiwgMHgxMCk7CiAJICB9CiAgICAgICAgfQogICAgIH0KIAotICAgIGFuZFNJU0lEWFJFRyhTSVNDUiwgMHgzMiwgMHgzZik7CisgICAgU2lTX1NldFJlZ0FORChTSVNDUiwgMHgzMiwgMHgzZik7CiAKICAgICBpZihpdmlkZW8tPnZiZmxhZ3MyICYgVkIyXzMweENMVikgewotICAgICAgIG9yU0lTSURYUkVHKFNJU1BBUlQ0LDB4MGQsMHgwNCk7CisgICAgICAgU2lTX1NldFJlZ09SKFNJU1BBUlQ0LCAweDBkLCAweDA0KTsKICAgICB9CiAKICAgICBpZigoaXZpZGVvLT5zaXN2Z2FfZW5naW5lID09IFNJU18zMTVfVkdBKSAmJiAoaXZpZGVvLT52YmZsYWdzMiAmIFZCMl9TSVNZUEJQUkJSSURHRSkpIHsKLSAgICAgICBvdXRTSVNJRFhSRUcoU0lTUEFSVDIsMHg0ZCwoYmFja3VwUDJfNGQgfCAweDEwKSk7CisgICAgICAgU2lTX1NldFJlZyhTSVNQQVJUMiwgMHg0ZCwgKGJhY2t1cFAyXzRkIHwgMHgxMCkpOwogICAgICAgIFNpU19EREMyRGVsYXkoJml2aWRlby0+U2lTX1ByLCAweDIwMDApOwogICAgICAgIGlmKChyZXN1bHQgPSBTSVNEb1NlbnNlKGl2aWRlbywgc3ZocywgMHgwNjA0KSkpIHsKICAgICAgICAgICBpZigocmVzdWx0ID0gU0lTRG9TZW5zZShpdmlkZW8sIGN2YnMsIDB4MDgwNCkpKSB7CiAJICAgICBwcmludGsoS0VSTl9JTkZPICIlcyAlcyBZUGJQciBjb21wb25lbnQgb3V0cHV0XG4iLCBzdGRzdHIsIHR2c3RyKTsKLQkgICAgIG9yU0lTSURYUkVHKFNJU0NSLDB4MzIsMHg4MCk7CisJICAgICBTaVNfU2V0UmVnT1IoU0lTQ1IsIDB4MzIsIDB4ODApOwogCSAgfQogICAgICAgIH0KLSAgICAgICBvdXRTSVNJRFhSRUcoU0lTUEFSVDIsMHg0ZCxiYWNrdXBQMl80ZCk7CisgICAgICAgU2lTX1NldFJlZyhTSVNQQVJUMiwgMHg0ZCwgYmFja3VwUDJfNGQpOwogICAgIH0KIAotICAgIGFuZFNJU0lEWFJFRyhTSVNDUiwgMHgzMiwgfjB4MDMpOworICAgIFNpU19TZXRSZWdBTkQoU0lTQ1IsIDB4MzIsIH4weDAzKTsKIAogICAgIGlmKCEoaXZpZGVvLT52YmZsYWdzICYgVFZfWVBCUFIpKSB7CiAgICAgICAgaWYoKHJlc3VsdCA9IFNJU0RvU2Vuc2UoaXZpZGVvLCBzdmhzLCBzdmhzX2MpKSkgewogICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzICVzIFNWSURFTyBvdXRwdXRcbiIsIHN0ZHN0ciwgdHZzdHIpOwotICAgICAgICAgIG9yU0lTSURYUkVHKFNJU0NSLCAweDMyLCAweDAyKTsKKwkgICBTaVNfU2V0UmVnT1IoU0lTQ1IsIDB4MzIsIDB4MDIpOwogICAgICAgIH0KICAgICAgICBpZigoYmlvc2ZsYWcgJiAweDAyKSB8fCAoIXJlc3VsdCkpIHsKICAgICAgICAgICBpZihTSVNEb1NlbnNlKGl2aWRlbywgY3ZicywgY3Zic19jKSkgewogCSAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXMgJXMgQ09NUE9TSVRFIG91dHB1dFxuIiwgc3Rkc3RyLCB0dnN0cik7Ci0JICAgICBvclNJU0lEWFJFRyhTSVNDUiwgMHgzMiwgMHgwMSk7CisJICAgICBTaVNfU2V0UmVnT1IoU0lTQ1IsIDB4MzIsIDB4MDEpOwogICAgICAgICAgIH0KICAgICAgICB9CiAgICAgfQogCiAgICAgU0lTRG9TZW5zZShpdmlkZW8sIDAsIDApOwogCi0gICAgb3V0U0lTSURYUkVHKFNJU1BBUlQyLDB4MDAsYmFja3VwUDJfMDApOwotICAgIG91dFNJU0lEWFJFRyhTSVNQQVJUNCwweDBkLGJhY2t1cFA0XzBkKTsKLSAgICBvdXRTSVNJRFhSRUcoU0lTU1IsMHgxZSxiYWNrdXBTUl8xZSk7CisgICAgU2lTX1NldFJlZyhTSVNQQVJUMiwgMHgwMCwgYmFja3VwUDJfMDApOworICAgIFNpU19TZXRSZWcoU0lTUEFSVDQsIDB4MGQsIGJhY2t1cFA0XzBkKTsKKyAgICBTaVNfU2V0UmVnKFNJU1NSLCAweDFlLCBiYWNrdXBTUl8xZSk7CiAKICAgICBpZihpdmlkZW8tPnZiZmxhZ3MyICYgVkIyXzMweENMVikgewotICAgICAgIGluU0lTSURYUkVHKFNJU1BBUlQyLDB4MDAsYmlvc2ZsYWcpOworCWJpb3NmbGFnID0gU2lTX0dldFJlZyhTSVNQQVJUMiwgMHgwMCk7CiAgICAgICAgaWYoYmlvc2ZsYWcgJiAweDIwKSB7CiAgICAgICAgICAgZm9yKG15ZmxhZyA9IDI7IG15ZmxhZyA+IDA7IG15ZmxhZy0tKSB7CiAJICAgICBiaW9zZmxhZyBePSAweDIwOwotCSAgICAgb3V0U0lTSURYUkVHKFNJU1BBUlQyLDB4MDAsYmlvc2ZsYWcpOworCSAgICAgU2lTX1NldFJlZyhTSVNQQVJUMiwgMHgwMCwgYmlvc2ZsYWcpOwogCSAgfQogICAgICAgIH0KICAgICB9CiAKLSAgICBvdXRTSVNJRFhSRUcoU0lTUEFSVDIsMHgwMCxiYWNrdXBQMl8wMCk7CisgICAgU2lTX1NldFJlZyhTSVNQQVJUMiwgMHgwMCwgYmFja3VwUDJfMDApOwogfQogCiAvKiBEZXRlcm1pbmUgYW5kIGRldGVjdCBhdHRhY2hlZCBUVidzIG9uIENocm9udGVsICovCkBAIC0yNTg4LDIwICsyNTg4LDIwIEBACiAJICAgaWYodGVtcDEgPT0gMHgwMikgewogCQlwcmludGsoS0VSTl9JTkZPICIlcyBTVklERU8gb3V0cHV0XG4iLCBzdGRzdHIpOwogCQlpdmlkZW8tPnZiZmxhZ3MgfD0gVFZfU1ZJREVPOwotCQlvclNJU0lEWFJFRyhTSVNDUiwgMHgzMiwgMHgwMik7Ci0JCWFuZFNJU0lEWFJFRyhTSVNDUiwgMHgzMiwgfjB4MDUpOworCQlTaVNfU2V0UmVnT1IoU0lTQ1IsIDB4MzIsIDB4MDIpOworCQlTaVNfU2V0UmVnQU5EKFNJU0NSLCAweDMyLCB+MHgwNSk7CiAJICAgfSBlbHNlIGlmICh0ZW1wMSA9PSAweDAxKSB7CiAJCXByaW50ayhLRVJOX0lORk8gIiVzIENWQlMgb3V0cHV0XG4iLCBzdGRzdHIpOwogCQlpdmlkZW8tPnZiZmxhZ3MgfD0gVFZfQVZJREVPOwotCQlvclNJU0lEWFJFRyhTSVNDUiwgMHgzMiwgMHgwMSk7Ci0JCWFuZFNJU0lEWFJFRyhTSVNDUiwgMHgzMiwgfjB4MDYpOworCQlTaVNfU2V0UmVnT1IoU0lTQ1IsIDB4MzIsIDB4MDEpOworCQlTaVNfU2V0UmVnQU5EKFNJU0NSLCAweDMyLCB+MHgwNik7CiAJICAgfSBlbHNlIHsKIAkJU2lTX1NldENINzB4eEFORE9SKCZpdmlkZW8tPlNpU19QciwgMHgwZSwgMHgwMSwgMHhGOCk7Ci0JCWFuZFNJU0lEWFJFRyhTSVNDUiwgMHgzMiwgfjB4MDcpOworCQlTaVNfU2V0UmVnQU5EKFNJU0NSLCAweDMyLCB+MHgwNyk7CiAJICAgfQogICAgICAgIH0gZWxzZSBpZih0ZW1wMSA9PSAwKSB7CiAJICBTaVNfU2V0Q0g3MHh4QU5ET1IoJml2aWRlby0+U2lTX1ByLCAweDBlLCAweDAxLCAweEY4KTsKLQkgIGFuZFNJU0lEWFJFRyhTSVNDUiwgMHgzMiwgfjB4MDcpOworCSAgU2lTX1NldFJlZ0FORChTSVNDUiwgMHgzMiwgfjB4MDcpOwogICAgICAgIH0KICAgICAgICAvKiBTZXQgZ2VuZXJhbCBwdXJwb3NlIElPIGZvciBDaHJvbnRlbCBjb21tdW5pY2F0aW9uICovCiAgICAgICAgU2lTX1NldENocm9udGVsR1BJTygmaXZpZGVvLT5TaVNfUHIsIDB4MDApOwpAQCAtMjYzMiwyMiArMjYzMiwyMiBAQAogCWNhc2UgMHgwMToKIAkgICAgIHByaW50ayhLRVJOX0lORk8gIiVzIENWQlMgb3V0cHV0XG4iLCBzdGRzdHIpOwogCSAgICAgaXZpZGVvLT52YmZsYWdzIHw9IFRWX0FWSURFTzsKLQkgICAgIG9yU0lTSURYUkVHKFNJU0NSLCAweDMyLCAweDAxKTsKLQkgICAgIGFuZFNJU0lEWFJFRyhTSVNDUiwgMHgzMiwgfjB4MDYpOworCSAgICAgU2lTX1NldFJlZ09SKFNJU0NSLCAweDMyLCAweDAxKTsKKwkgICAgIFNpU19TZXRSZWdBTkQoU0lTQ1IsIDB4MzIsIH4weDA2KTsKIAkgICAgIGJyZWFrOwogCWNhc2UgMHgwMjoKIAkgICAgIHByaW50ayhLRVJOX0lORk8gIiVzIFNWSURFTyBvdXRwdXRcbiIsIHN0ZHN0cik7CiAJICAgICBpdmlkZW8tPnZiZmxhZ3MgfD0gVFZfU1ZJREVPOwotCSAgICAgb3JTSVNJRFhSRUcoU0lTQ1IsIDB4MzIsIDB4MDIpOwotCSAgICAgYW5kU0lTSURYUkVHKFNJU0NSLCAweDMyLCB+MHgwNSk7CisJICAgICBTaVNfU2V0UmVnT1IoU0lTQ1IsIDB4MzIsIDB4MDIpOworCSAgICAgU2lTX1NldFJlZ0FORChTSVNDUiwgMHgzMiwgfjB4MDUpOwogCSAgICAgYnJlYWs7CiAJY2FzZSAweDA0OgogCSAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXMgU0NBUlQgb3V0cHV0XG4iLCBzdGRzdHIpOwotCSAgICAgb3JTSVNJRFhSRUcoU0lTQ1IsIDB4MzIsIDB4MDQpOwotCSAgICAgYW5kU0lTSURYUkVHKFNJU0NSLCAweDMyLCB+MHgwMyk7CisJICAgICBTaVNfU2V0UmVnT1IoU0lTQ1IsIDB4MzIsIDB4MDQpOworCSAgICAgU2lTX1NldFJlZ0FORChTSVNDUiwgMHgzMiwgfjB4MDMpOwogCSAgICAgYnJlYWs7CiAJZGVmYXVsdDoKLQkgICAgIGFuZFNJU0lEWFJFRyhTSVNDUiwgMHgzMiwgfjB4MDcpOworCSAgICAgU2lTX1NldFJlZ0FORChTSVNDUiwgMHgzMiwgfjB4MDcpOwogCX0KICNlbmRpZgogICAgIH0KQEAgLTI2NjUsMTAgKzI2NjUsMTAgQEAKIAlpZihpdmlkZW8tPmNoaXAgPT0gWEdJXzIwKQogCQlyZXR1cm47CiAKLQlpblNJU0lEWFJFRyhTSVNQQVJUNCwgMHgwMCwgdmJfY2hpcGlkKTsKKwl2Yl9jaGlwaWQgPSBTaVNfR2V0UmVnKFNJU1BBUlQ0LCAweDAwKTsKIAlzd2l0Y2godmJfY2hpcGlkKSB7CiAJY2FzZSAweDAxOgotCQlpblNJU0lEWFJFRyhTSVNQQVJUNCwgMHgwMSwgcmVnKTsKKwkJcmVnID0gU2lTX0dldFJlZyhTSVNQQVJUNCwgMHgwMSk7CiAJCWlmKHJlZyA8IDB4YjApIHsKIAkJCWl2aWRlby0+dmJmbGFncyB8PSBWQl8zMDE7CS8qIERlcHJlY2F0ZWQgKi8KIAkJCWl2aWRlby0+dmJmbGFnczIgfD0gVkIyXzMwMTsKQEAgLTI2NzYsNyArMjY3Niw3IEBACiAJCX0gZWxzZSBpZihyZWcgPCAweGMwKSB7CiAJCQlpdmlkZW8tPnZiZmxhZ3MgfD0gVkJfMzAxQjsJLyogRGVwcmVjYXRlZCAqLwogCQkJaXZpZGVvLT52YmZsYWdzMiB8PSBWQjJfMzAxQjsKLQkJCWluU0lTSURYUkVHKFNJU1BBUlQ0LDB4MjMscmVnKTsKKwkJCXJlZyA9IFNpU19HZXRSZWcoU0lTUEFSVDQsIDB4MjMpOwogCQkJaWYoIShyZWcgJiAweDAyKSkgewogCQkJICAgaXZpZGVvLT52YmZsYWdzIHw9IFZCXzMweEJESDsJLyogRGVwcmVjYXRlZCAqLwogCQkJICAgaXZpZGVvLT52YmZsYWdzMiB8PSBWQjJfMzB4QkRIOwpAQCAtMjY5Myw3ICsyNjkzLDcgQEAKIAkJCWl2aWRlby0+dmJmbGFnczIgfD0gVkIyXzMwMUxWOwogCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXMgU2lTMzAxTFYgJXNcbiIsIHN0ZHN0ciwgYnJpZGdlc3RyKTsKIAkJfSBlbHNlIGlmKHJlZyA8PSAweGUxKSB7Ci0JCQlpblNJU0lEWFJFRyhTSVNQQVJUNCwweDM5LHJlZyk7CisJCQlyZWcgPSBTaVNfR2V0UmVnKFNJU1BBUlQ0LCAweDM5KTsKIAkJCWlmKHJlZyA9PSAweGZmKSB7CiAJCQkgICBpdmlkZW8tPnZiZmxhZ3MgfD0gVkJfMzAyTFY7CS8qIERlcHJlY2F0ZWQgKi8KIAkJCSAgIGl2aWRlby0+dmJmbGFnczIgfD0gVkIyXzMwMkxWOwpAQCAtMjcxOCw3ICsyNzE4LDcgQEAKIAl9CiAKIAlpZigoIShpdmlkZW8tPnZiZmxhZ3MyICYgVkIyX1ZJREVPQlJJREdFKSkgJiYgKGl2aWRlby0+Y2hpcCAhPSBTSVNfMzAwKSkgewotCQlpblNJU0lEWFJFRyhTSVNDUiwgMHgzNywgcmVnKTsKKwkJcmVnID0gU2lTX0dldFJlZyhTSVNDUiwgMHgzNyk7CiAJCXJlZyAmPSBTSVNfRVhURVJOQUxfQ0hJUF9NQVNLOwogCQlyZWcgPj49IDE7CiAJCWlmKGl2aWRlby0+c2lzdmdhX2VuZ2luZSA9PSBTSVNfMzAwX1ZHQSkgewpAQCAtMjc1OSw3ICsyNzU5LDcgQEAKICNlbmRpZgogCQl9IGVsc2UgaWYoaXZpZGVvLT5jaGlwID49IFNJU182NjEpIHsKICNpZmRlZiBDT05GSUdfRkJfU0lTXzMxNQotCQkJaW5TSVNJRFhSRUcoU0lTQ1IsIDB4MzgsIHJlZyk7CisJCQlyZWcgPSBTaVNfR2V0UmVnKFNJU0NSLCAweDM4KTsKIAkJCXJlZyA+Pj0gNTsKIAkJCXN3aXRjaChyZWcpIHsKIAkJCSAgIGNhc2UgMHgwMjoKQEAgLTI4MjIsMTMgKzI4MjIsMTMgQEAKIAogCQl0cXVldWVfcG9zID0gKGl2aWRlby0+dmlkZW9fc2l6ZSAtIGl2aWRlby0+Y21kUXVldWVTaXplKSAvICg2NCAqIDEwMjQpOwogCi0JCWluU0lTSURYUkVHKFNJU1NSLCBJTkRfU0lTX1RVUkJPUVVFVUVfU0VULCB0cV9zdGF0ZSk7CisJCXRxX3N0YXRlID0gU2lTX0dldFJlZyhTSVNTUiwgSU5EX1NJU19UVVJCT1FVRVVFX1NFVCk7CiAJCXRxX3N0YXRlIHw9IDB4ZjA7CiAJCXRxX3N0YXRlICY9IDB4ZmM7CiAJCXRxX3N0YXRlIHw9ICh1OCkodHF1ZXVlX3BvcyA+PiA4KTsKLQkJb3V0U0lTSURYUkVHKFNJU1NSLCBJTkRfU0lTX1RVUkJPUVVFVUVfU0VULCB0cV9zdGF0ZSk7CisJCVNpU19TZXRSZWcoU0lTU1IsIElORF9TSVNfVFVSQk9RVUVVRV9TRVQsIHRxX3N0YXRlKTsKIAotCQlvdXRTSVNJRFhSRUcoU0lTU1IsIElORF9TSVNfVFVSQk9RVUVVRV9BRFIsICh1OCkodHF1ZXVlX3BvcyAmIDB4ZmYpKTsKKwkJU2lTX1NldFJlZyhTSVNTUiwgSU5EX1NJU19UVVJCT1FVRVVFX0FEUiwgKHU4KSh0cXVldWVfcG9zICYgMHhmZikpOwogCiAJCWl2aWRlby0+Y2FwcyB8PSBUVVJCT19RVUVVRV9DQVA7CiAJfQpAQCAtMjg2NSw4ICsyODY1LDggQEAKIAkJCX0KIAkJfQogCi0JCW91dFNJU0lEWFJFRyhTSVNTUiwgSU5EX1NJU19DTURRVUVVRV9USFJFU0hPTEQsIENPTU1BTkRfUVVFVUVfVEhSRVNIT0xEKTsKLQkJb3V0U0lTSURYUkVHKFNJU1NSLCBJTkRfU0lTX0NNRFFVRVVFX1NFVCwgU0lTX0NNRF9RVUVVRV9SRVNFVCk7CisJCVNpU19TZXRSZWcoU0lTU1IsIElORF9TSVNfQ01EUVVFVUVfVEhSRVNIT0xELCBDT01NQU5EX1FVRVVFX1RIUkVTSE9MRCk7CisJCVNpU19TZXRSZWcoU0lTU1IsIElORF9TSVNfQ01EUVVFVUVfU0VULCBTSVNfQ01EX1FVRVVFX1JFU0VUKTsKIAogCQlpZigoaXZpZGVvLT5jaGlwID49IFhHSV80MCkgJiYgaXZpZGVvLT5tb2RlY2hhbmdlZCkgewogCQkJLyogTXVzdCBkaXNhYmxlIGR1YWwgcGlwZSBvbiBYR0lfNDAuIENhbid0IGRvCkBAIC0yODc4LDcgKzI4NzgsNyBAQAogCiAJCQkJTU1JT19PVVQzMihpdmlkZW8tPm1taW9fdmJhc2UsIFFfV1JJVEVfUFRSLCAwKTsKIAotCQkJCW91dFNJU0lEWFJFRyhTSVNTUiwgSU5EX1NJU19DTURRVUVVRV9TRVQsICh0ZW1wIHwgU0lTX1ZSQU1fQ01EUVVFVUVfRU5BQkxFKSk7CisJCQkJU2lTX1NldFJlZyhTSVNTUiwgSU5EX1NJU19DTURRVUVVRV9TRVQsICh0ZW1wIHwgU0lTX1ZSQU1fQ01EUVVFVUVfRU5BQkxFKSk7CiAKIAkJCQl0ZW1wcSA9IE1NSU9fSU4zMihpdmlkZW8tPm1taW9fdmJhc2UsIFFfUkVBRF9QVFIpOwogCQkJCU1NSU9fT1VUMzIoaXZpZGVvLT5tbWlvX3ZiYXNlLCBRX1dSSVRFX1BUUiwgdGVtcHEpOwpAQCAtMjg5NSw3ICsyODk1LDcgQEAKIAogCQkJCXNpc2ZiX3N5bmNhY2NlbChpdmlkZW8pOwogCi0JCQkJb3V0U0lTSURYUkVHKFNJU1NSLCBJTkRfU0lTX0NNRFFVRVVFX1NFVCwgU0lTX0NNRF9RVUVVRV9SRVNFVCk7CisJCQkJU2lTX1NldFJlZyhTSVNTUiwgSU5EX1NJU19DTURRVUVVRV9TRVQsIFNJU19DTURfUVVFVUVfUkVTRVQpOwogCiAJCQl9CiAJCX0KQEAgLTI5MDQsNyArMjkwNCw3IEBACiAJCU1NSU9fT1VUMzIoaXZpZGVvLT5tbWlvX3ZiYXNlLCBNTUlPX1FVRVVFX1dSSVRFUE9SVCwgdGVtcHEpOwogCiAJCXRlbXAgfD0gKFNJU19NTUlPX0NNRF9FTkFCTEUgfCBTSVNfQ01EX0FVVE9fQ09SUik7Ci0JCW91dFNJU0lEWFJFRyhTSVNTUiwgSU5EX1NJU19DTURRVUVVRV9TRVQsIHRlbXApOworCQlTaVNfU2V0UmVnKFNJU1NSLCBJTkRfU0lTX0NNRFFVRVVFX1NFVCwgdGVtcCk7CiAKIAkJdGVtcHEgPSAodTMyKShpdmlkZW8tPnZpZGVvX3NpemUgLSBpdmlkZW8tPmNtZFF1ZXVlU2l6ZSk7CiAJCU1NSU9fT1VUMzIoaXZpZGVvLT5tbWlvX3ZiYXNlLCBNTUlPX1FVRVVFX1BIWUJBU0UsIHRlbXBxKTsKQEAgLTI5MjIsNyArMjkyMiw3IEBACiAJdTggcmVnOwogCWludCBpOwogCi0JaW5TSVNJRFhSRUcoU0lTQ1IsIDB4MzYsIHJlZyk7CisJcmVnID0gU2lTX0dldFJlZyhTSVNDUiwgMHgzNik7CiAJcmVnICY9IDB4MGY7CiAJaWYoaXZpZGVvLT5zaXN2Z2FfZW5naW5lID09IFNJU18zMDBfVkdBKSB7CiAJCWl2aWRlby0+Q1JUMkxDRFR5cGUgPSBzaXMzMDBwYW5lbHR5cGVbcmVnXTsKQEAgLTI5NDEsOCArMjk0MSw4IEBACiAJaWYoaXZpZGVvLT5DUlQyTENEVHlwZSA9PSBMQ0RfVU5LTk9XTikgewogCQkvKiBGb3IgYnJva2VuIEJJT1NlczogQXNzdW1lIDEwMjR4NzY4LCBSR0IxOCAqLwogCQlpdmlkZW8tPkNSVDJMQ0RUeXBlID0gTENEXzEwMjR4NzY4OwotCQlzZXRTSVNJRFhSRUcoU0lTQ1IsMHgzNiwweGYwLDB4MDIpOwotCQlzZXRTSVNJRFhSRUcoU0lTQ1IsMHgzNywweGVlLDB4MDEpOworCQlTaVNfU2V0UmVnQU5ET1IoU0lTQ1IsIDB4MzYsIDB4ZjAsIDB4MDIpOworCQlTaVNfU2V0UmVnQU5ET1IoU0lTQ1IsIDB4MzcsIDB4ZWUsIDB4MDEpOwogCQlwcmludGsoS0VSTl9ERUJVRyAic2lzZmI6IEludmFsaWQgcGFuZWwgSUQgKCUwMngpLCBhc3N1bWluZyAxMDI0eDc2OCwgUkdCMThcbiIsIHJlZyk7CiAJfQogCkBAIC0yOTgwLDEwICsyOTgwLDEwIEBACiAJaWYoaXZpZGVvLT5zaXN2Z2FfZW5naW5lID09IFNJU18zMDBfVkdBKSB7CiAJCWlmKGl2aWRlby0+dmJmbGFnczIgJiAoVkIyX0xWRFMgfCBWQjJfMzB4QkRIKSkgewogCQkJaW50IHRtcDsKLQkJCWluU0lTSURYUkVHKFNJU0NSLDB4MzAsdG1wKTsKKwkJCXRtcCA9IFNpU19HZXRSZWcoU0lTQ1IsIDB4MzApOwogCQkJaWYodG1wICYgMHgyMCkgewogCQkJCS8qIEN1cnJlbnRseSBvbiBMQ0Q/IElmIHllcywgcmVhZCBjdXJyZW50IHBkYyAqLwotCQkJCWluU0lTSURYUkVHKFNJU1BBUlQxLDB4MTMsaXZpZGVvLT5kZXRlY3RlZHBkYyk7CisJCQkJaXZpZGVvLT5kZXRlY3RlZHBkYyA9IFNpU19HZXRSZWcoU0lTUEFSVDEsIDB4MTMpOwogCQkJCWl2aWRlby0+ZGV0ZWN0ZWRwZGMgJj0gMHgzYzsKIAkJCQlpZihpdmlkZW8tPlNpU19Qci5QREMgPT0gLTEpIHsKIAkJCQkJLyogTGV0IG9wdGlvbiBvdmVycmlkZSBkZXRlY3Rpb24gKi8KQEAgLTMwMDcsNyArMzAwNyw3IEBACiAJCS8qIFRyeSB0byBmaW5kIGFib3V0IExDREEgKi8KIAkJaWYoaXZpZGVvLT52YmZsYWdzMiAmIFZCMl9TSVNMQ0RBQlJJREdFKSB7CiAJCQlpbnQgdG1wOwotCQkJaW5TSVNJRFhSRUcoU0lTUEFSVDEsMHgxMyx0bXApOworCQkJdG1wID0gU2lTX0dldFJlZyhTSVNQQVJUMSwgMHgxMyk7CiAJCQlpZih0bXAgJiAweDA0KSB7CiAJCQkJaXZpZGVvLT5TaVNfUHIuU2lTX1VzZUxDREEgPSB0cnVlOwogCQkJCWl2aWRlby0+ZGV0ZWN0ZWRsY2RhID0gMHgwMzsKQEAgLTMwMTcsMTYgKzMwMTcsMTYgQEAKIAkJLyogU2F2ZSBQREMgKi8KIAkJaWYoaXZpZGVvLT52YmZsYWdzMiAmIFZCMl9TSVNMVkRTQlJJREdFKSB7CiAJCQlpbnQgdG1wOwotCQkJaW5TSVNJRFhSRUcoU0lTQ1IsMHgzMCx0bXApOworCQkJdG1wID0gU2lTX0dldFJlZyhTSVNDUiwgMHgzMCk7CiAJCQlpZigodG1wICYgMHgyMCkgfHwgKGl2aWRlby0+ZGV0ZWN0ZWRsY2RhICE9IDB4ZmYpKSB7CiAJCQkJLyogQ3VycmVudGx5IG9uIExDRD8gSWYgeWVzLCByZWFkIGN1cnJlbnQgcGRjICovCiAJCQkJdTggcGRjOwotCQkJCWluU0lTSURYUkVHKFNJU1BBUlQxLDB4MkQscGRjKTsKKwkJCQlwZGMgPSBTaVNfR2V0UmVnKFNJU1BBUlQxLCAweDJEKTsKIAkJCQlpdmlkZW8tPmRldGVjdGVkcGRjICA9IChwZGMgJiAweDBmKSA8PCAxOwogCQkJCWl2aWRlby0+ZGV0ZWN0ZWRwZGNhID0gKHBkYyAmIDB4ZjApID4+IDM7Ci0JCQkJaW5TSVNJRFhSRUcoU0lTUEFSVDEsMHgzNSxwZGMpOworCQkJCXBkYyA9IFNpU19HZXRSZWcoU0lTUEFSVDEsIDB4MzUpOwogCQkJCWl2aWRlby0+ZGV0ZWN0ZWRwZGMgfD0gKChwZGMgPj4gNykgJiAweDAxKTsKLQkJCQlpblNJU0lEWFJFRyhTSVNQQVJUMSwweDIwLHBkYyk7CisJCQkJcGRjID0gU2lTX0dldFJlZyhTSVNQQVJUMSwgMHgyMCk7CiAJCQkJaXZpZGVvLT5kZXRlY3RlZHBkY2EgfD0gKChwZGMgPj4gNikgJiAweDAxKTsKIAkJCQlpZihpdmlkZW8tPm5ld3JvbSkgewogCQkJCQkvKiBOZXcgUk9NIGludmFsaWRhdGVzIG90aGVyIFBEQyByZXNwLiAqLwpAQCAtMzA2MCwxMCArMzA2MCwxMCBAQAogCiAJCQkvKiBTYXZlIEVNSSAqLwogCQkJaWYoaXZpZGVvLT52YmZsYWdzMiAmIFZCMl9TSVNFTUlCUklER0UpIHsKLQkJCQlpblNJU0lEWFJFRyhTSVNQQVJUNCwweDMwLGl2aWRlby0+U2lTX1ByLkVNSV8zMCk7Ci0JCQkJaW5TSVNJRFhSRUcoU0lTUEFSVDQsMHgzMSxpdmlkZW8tPlNpU19Qci5FTUlfMzEpOwotCQkJCWluU0lTSURYUkVHKFNJU1BBUlQ0LDB4MzIsaXZpZGVvLT5TaVNfUHIuRU1JXzMyKTsKLQkJCQlpblNJU0lEWFJFRyhTSVNQQVJUNCwweDMzLGl2aWRlby0+U2lTX1ByLkVNSV8zMyk7CisJCQkJaXZpZGVvLT5TaVNfUHIuRU1JXzMwID0gU2lTX0dldFJlZyhTSVNQQVJUNCwgMHgzMCk7CisJCQkJaXZpZGVvLT5TaVNfUHIuRU1JXzMxID0gU2lTX0dldFJlZyhTSVNQQVJUNCwgMHgzMSk7CisJCQkJaXZpZGVvLT5TaVNfUHIuRU1JXzMyID0gU2lTX0dldFJlZyhTSVNQQVJUNCwgMHgzMik7CisJCQkJaXZpZGVvLT5TaVNfUHIuRU1JXzMzID0gU2lTX0dldFJlZyhTSVNQQVJUNCwgMHgzMyk7CiAJCQkJaXZpZGVvLT5TaVNfUHIuSGF2ZUVNSSA9IHRydWU7CiAJCQkJaWYoKHRtcCAmIDB4MjApIHx8IChpdmlkZW8tPmRldGVjdGVkbGNkYSAhPSAweGZmKSkgewogCQkJCQlpdmlkZW8tPlNpU19Qci5IYXZlRU1JTENEID0gdHJ1ZTsKQEAgLTM0ODgsOCArMzQ4OCw4IEBACiAJICogaXZpZGVvLT5hY2NlbCBoZXJlLCBhcyB0aGlzIG1pZ2h0IGhhdmUKIAkgKiBiZWVuIGNoYW5nZWQgYmVmb3JlIHRoaXMgaXMgY2FsbGVkLgogCSAqLwotCWluU0lTSURYUkVHKFNJU1NSLCBJTkRfU0lTX1BDSV9BRERSRVNTX1NFVCwgY3IzMCk7Ci0JaW5TSVNJRFhSRUcoU0lTU1IsIElORF9TSVNfTU9EVUxFX0VOQUJMRSwgY3IzMSk7CisJY3IzMCA9IFNpU19HZXRSZWcoU0lTU1IsIElORF9TSVNfUENJX0FERFJFU1NfU0VUKTsKKwljcjMxID0gU2lTX0dldFJlZyhTSVNTUiwgSU5EX1NJU19NT0RVTEVfRU5BQkxFKTsKIAkvKiBNTUlPIGFuZCAyRC8zRCBlbmdpbmUgZW5hYmxlZD8gKi8KIAlpZigoY3IzMCAmIFNJU19NRU1fTUFQX0lPX0VOQUJMRSkgJiYgKGNyMzEgJiAweDQyKSkgewogI2lmZGVmIENPTkZJR19GQl9TSVNfMzAwCkBAIC0zNTA3LDcgKzM1MDcsNyBAQAogCQkJICogZW5hYmxlZCwgYW5kIHRoYXQgdGhlIHF1ZXVlCiAJCQkgKiBpcyBub3QgaW4gdGhlIHN0YXRlIG9mICJyZXNldCIKIAkJCSAqLwotCQkJaW5TSVNJRFhSRUcoU0lTU1IsIDB4MjYsIGNyMzApOworCQkJY3IzMCA9IFNpU19HZXRSZWcoU0lTU1IsIDB4MjYpOwogCQkJaWYoKGNyMzAgJiAweGUwKSAmJiAoIShjcjMwICYgMHgwMSkpKSB7CiAJCQkJc2lzZmJfc3luY2FjY2VsKGl2aWRlbyk7CiAJCQl9CkBAIC0zNTI0LDkgKzM1MjQsOSBAQAogCiAJaXZpZGVvLT5jdXJyZW50dmJmbGFncyAmPSAoVkJfVklERU9CUklER0UgfCBWQl9ESVNQVFlQRV9ESVNQMik7CiAKLQlvdXRTSVNJRFhSRUcoU0lTU1IsIDB4MDUsIDB4ODYpOworCVNpU19TZXRSZWcoU0lTU1IsIDB4MDUsIDB4ODYpOwogCi0JaW5TSVNJRFhSRUcoU0lTQ1IsIDB4MzEsIGNyMzEpOworCWNyMzEgPSBTaVNfR2V0UmVnKFNJU0NSLCAweDMxKTsKIAljcjMxICY9IH4weDYwOwogCWNyMzEgfD0gMHgwNDsKIApAQCAtMzUzNSwxMSArMzUzNSwxMSBAQAogI2lmZGVmIENPTkZJR19GQl9TSVNfMzE1CiAJaWYoaXZpZGVvLT5zaXN2Z2FfZW5naW5lID09IFNJU18zMTVfVkdBKSB7CiAJICAgaWYoaXZpZGVvLT5jaGlwID49IFNJU182NjEpIHsKLQkgICAgICBpblNJU0lEWFJFRyhTSVNDUiwgMHgzOCwgY3IzOCk7CisJICAgICAgY3IzOCA9IFNpU19HZXRSZWcoU0lTQ1IsIDB4MzgpOwogCSAgICAgIGNyMzggJj0gfjB4MDc7ICAvKiBDbGVhciBMQ0RBL0R1YWxFZGdlIGFuZCBZUGJQciBiaXRzICovCiAJICAgfSBlbHNlIHsKIAkgICAgICB0dnJlZ251bSA9IDB4Mzg7Ci0JICAgICAgaW5TSVNJRFhSRUcoU0lTQ1IsIHR2cmVnbnVtLCBjcjM4KTsKKwkgICAgICBjcjM4ID0gU2lTX0dldFJlZyhTSVNDUiwgdHZyZWdudW0pOwogCSAgICAgIGNyMzggJj0gfjB4M2I7ICAvKiBDbGVhciBMQ0RBL0R1YWxFZGdlIGFuZCBZUGJQciBiaXRzICovCiAJICAgfQogCX0KQEAgLTM1NDcsNyArMzU0Nyw3IEBACiAjaWZkZWYgQ09ORklHX0ZCX1NJU18zMDAKIAlpZihpdmlkZW8tPnNpc3ZnYV9lbmdpbmUgPT0gU0lTXzMwMF9WR0EpIHsKIAkgICB0dnJlZ251bSA9IDB4MzU7Ci0JICAgaW5TSVNJRFhSRUcoU0lTQ1IsIHR2cmVnbnVtLCBjcjM4KTsKKwkgICBjcjM4ID0gU2lTX0dldFJlZyhTSVNDUiwgdHZyZWdudW0pOwogCX0KICNlbmRpZgogCkBAIC0zNjU0LDIwICszNjU0LDIwIEBACiAJICAgICAgY3IzMSB8PSAoU0lTX0RSSVZFUl9NT0RFIHwgU0lTX1ZCX09VVFBVVF9ESVNBQkxFKTsKIAl9CiAKLQlvdXRTSVNJRFhSRUcoU0lTQ1IsIDB4MzAsIGNyMzApOwotCW91dFNJU0lEWFJFRyhTSVNDUiwgMHgzMywgY3IzMyk7CisJU2lTX1NldFJlZyhTSVNDUiwgMHgzMCwgY3IzMCk7CisJU2lTX1NldFJlZyhTSVNDUiwgMHgzMywgY3IzMyk7CiAKIAlpZihpdmlkZW8tPmNoaXAgPj0gU0lTXzY2MSkgewogI2lmZGVmIENPTkZJR19GQl9TSVNfMzE1CiAJICAgY3IzMSAmPSB+MHgwMTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIFBBTCBmbGFnIChub3cgaW4gQ1IzNSkgKi8KLQkgICBzZXRTSVNJRFhSRUcoU0lTQ1IsIDB4MzUsIH4weDEwLCBjcjM1KTsgLyogTGVhdmUgb3ZlcnNjYW4gYml0IGFsb25lICovCisJICAgU2lTX1NldFJlZ0FORE9SKFNJU0NSLCAweDM1LCB+MHgxMCwgY3IzNSk7IC8qIExlYXZlIG92ZXJzY2FuIGJpdCBhbG9uZSAqLwogCSAgIGNyMzggJj0gMHgwNzsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVc2Ugb25seSBMQ0RBIGFuZCBIaVZpc2lvbi9ZUGJQciBiaXRzICovCi0JICAgc2V0U0lTSURYUkVHKFNJU0NSLCAweDM4LCAweGY4LCBjcjM4KTsKKwkgICBTaVNfU2V0UmVnQU5ET1IoU0lTQ1IsIDB4MzgsIDB4ZjgsIGNyMzgpOwogI2VuZGlmCiAJfSBlbHNlIGlmKGl2aWRlby0+Y2hpcCAhPSBTSVNfMzAwKSB7Ci0JICAgb3V0U0lTSURYUkVHKFNJU0NSLCB0dnJlZ251bSwgY3IzOCk7CisJICAgU2lTX1NldFJlZyhTSVNDUiwgdHZyZWdudW0sIGNyMzgpOwogCX0KLQlvdXRTSVNJRFhSRUcoU0lTQ1IsIDB4MzEsIGNyMzEpOworCVNpU19TZXRSZWcoU0lTQ1IsIDB4MzEsIGNyMzEpOwogCiAJaXZpZGVvLT5TaVNfUHIuU2lTX1VzZU9FTSA9IGl2aWRlby0+c2lzZmJfdXNlb2VtOwogCkBAIC0zNjgyLDE1ICszNjgyLDE1IEBACiAJdTggIHRtcHJlZzsKIAogCWlmKGl2aWRlby0+Y2hpcCA+PSBTSVNfNjYxKSB7Ci0JCWluU0lTSURYUkVHKFNJU1NSLDB4MTEsdG1wcmVnKTsKKwkJdG1wcmVnID0gU2lTX0dldFJlZyhTSVNTUiwgMHgxMSk7CiAJCWlmKHRtcHJlZyAmIDB4MjApIHsKLQkJCWluU0lTSURYUkVHKFNJU1NSLDB4M2UsdG1wcmVnKTsKKwkJCXRtcHJlZyA9IFNpU19HZXRSZWcoU0lTU1IsIDB4M2UpOwogCQkJdG1wcmVnID0gKHRtcHJlZyArIDEpICYgMHhmZjsKLQkJCW91dFNJU0lEWFJFRyhTSVNTUiwweDNlLHRtcHJlZyk7Ci0JCQlpblNJU0lEWFJFRyhTSVNTUiwweDExLHRtcHJlZyk7CisJCQlTaVNfU2V0UmVnKFNJU1NSLCAweDNlLCB0bXByZWcpOworCQkJdG1wcmVnID0gU2lTX0dldFJlZyhTSVNTUiwgMHgxMSk7CiAJCX0KIAkJaWYodG1wcmVnICYgMHhmMCkgewotCQkJYW5kU0lTSURYUkVHKFNJU1NSLDB4MTEsMHgwZik7CisJCQlTaVNfU2V0UmVnQU5EKFNJU1NSLCAweDExLCAweDBmKTsKIAkJfQogCX0KIH0KQEAgLTM3MTYsNyArMzcxNiw3IEBACiAJCQljYXNlIDE6CiAJCQkJeCArPSB2YWw7CiAJCQkJaWYoeCA8IDApIHggPSAwOwotCQkJCW91dFNJU0lEWFJFRyhTSVNTUiwweDA1LDB4ODYpOworCQkJCVNpU19TZXRSZWcoU0lTU1IsIDB4MDUsIDB4ODYpOwogCQkJCVNpU19TZXRDSDcwMHgoJml2aWRlby0+U2lTX1ByLCAweDBhLCAoeCAmIDB4ZmYpKTsKIAkJCQlTaVNfU2V0Q0g3MHh4QU5ET1IoJml2aWRlby0+U2lTX1ByLCAweDA4LCAoKHggJiAweDAxMDApID4+IDcpLCAweEZEKTsKIAkJCQlicmVhazsKQEAgLTM3NDUsMTEgKzM3NDUsMTEgQEAKIAkJCXRlbXAgKz0gKHZhbCAqIDIpOwogCQkJcDJfNDMgPSB0ZW1wICYgMHhmZjsKIAkJCXAyXzQyID0gKHRlbXAgJiAweGYwMCkgPj4gNDsKLQkJCW91dFNJU0lEWFJFRyhTSVNQQVJUMiwweDFmLHAyXzFmKTsKLQkJCXNldFNJU0lEWFJFRyhTSVNQQVJUMiwweDIwLDB4MEYscDJfMjApOwotCQkJc2V0U0lTSURYUkVHKFNJU1BBUlQyLDB4MmIsMHhGMCxwMl8yYik7Ci0JCQlzZXRTSVNJRFhSRUcoU0lTUEFSVDIsMHg0MiwweDBGLHAyXzQyKTsKLQkJCW91dFNJU0lEWFJFRyhTSVNQQVJUMiwweDQzLHAyXzQzKTsKKwkJCVNpU19TZXRSZWcoU0lTUEFSVDIsIDB4MWYsIHAyXzFmKTsKKwkJCVNpU19TZXRSZWdBTkRPUihTSVNQQVJUMiwgMHgyMCwgMHgwRiwgcDJfMjApOworCQkJU2lTX1NldFJlZ0FORE9SKFNJU1BBUlQyLCAweDJiLCAweEYwLCBwMl8yYik7CisJCQlTaVNfU2V0UmVnQU5ET1IoU0lTUEFSVDIsIDB4NDIsIDB4MEYsIHAyXzQyKTsKKwkJCVNpU19TZXRSZWcoU0lTUEFSVDIsIDB4NDMsIHAyXzQzKTsKIAkJfQogCX0KIH0KQEAgLTM3NzQsNyArMzc3NCw3IEBACiAJCQljYXNlIDE6CiAJCQkJeSAtPSB2YWw7CiAJCQkJaWYoeSA8IDApIHkgPSAwOwotCQkJCW91dFNJU0lEWFJFRyhTSVNTUiwweDA1LDB4ODYpOworCQkJCVNpU19TZXRSZWcoU0lTU1IsIDB4MDUsIDB4ODYpOwogCQkJCVNpU19TZXRDSDcwMHgoJml2aWRlby0+U2lTX1ByLCAweDBiLCAoeSAmIDB4ZmYpKTsKIAkJCQlTaVNfU2V0Q0g3MHh4QU5ET1IoJml2aWRlby0+U2lTX1ByLCAweDA4LCAoKHkgJiAweDAxMDApID4+IDgpLCAweEZFKTsKIAkJCQlicmVhazsKQEAgLTM3OTgsOCArMzc5OCw4IEBACiAJCQkJCXAyXzAyICs9IDI7CiAJCQkJfQogCQkJfQotCQkJb3V0U0lTSURYUkVHKFNJU1BBUlQyLDB4MDEscDJfMDEpOwotCQkJb3V0U0lTSURYUkVHKFNJU1BBUlQyLDB4MDIscDJfMDIpOworCQkJU2lTX1NldFJlZyhTSVNQQVJUMiwgMHgwMSwgcDJfMDEpOworCQkJU2lTX1NldFJlZyhTSVNQQVJUMiwgMHgwMiwgcDJfMDIpOwogCQl9CiAJfQogfQpAQCAtMzgxNiw3ICszODE2LDcgQEAKIAl1OCByZWcxOwogI2VuZGlmCiAKLQlvdXRTSVNJRFhSRUcoU0lTU1IsIDB4MDUsIDB4ODYpOworCVNpU19TZXRSZWcoU0lTU1IsIDB4MDUsIDB4ODYpOwogCiAjaWZkZWYgQ09ORklHX0ZCX1NJU18zMTUKIAlzaXNmYl9maXh1cF9TUjExKGl2aWRlbyk7CkBAIC0zODQwLDcgKzM4NDAsNyBAQAogCQkJY3J0MWlzb2ZmID0gZmFsc2U7CiAJCQlyZWcgPSAweDgwOwogCQl9Ci0JCXNldFNJU0lEWFJFRyhTSVNDUiwgMHgxNywgMHg3ZiwgcmVnKTsKKwkJU2lTX1NldFJlZ0FORE9SKFNJU0NSLCAweDE3LCAweDdmLCByZWcpOwogCX0KICNlbmRpZgogI2lmZGVmIENPTkZJR19GQl9TSVNfMzE1CkBAIC0zODU0LDggKzM4NTQsOCBAQAogCQkJcmVnICA9IDB4MDA7CiAJCQlyZWcxID0gMHgwMDsKIAkJfQotCQlzZXRTSVNJRFhSRUcoU0lTQ1IsIGl2aWRlby0+U2lTX1ByLlNpU19NeUNSNjMsIH4weDQwLCByZWcpOwotCQlzZXRTSVNJRFhSRUcoU0lTU1IsIDB4MWYsIH4weGMwLCByZWcxKTsKKwkJU2lTX1NldFJlZ0FORE9SKFNJU0NSLCBpdmlkZW8tPlNpU19Qci5TaVNfTXlDUjYzLCB+MHg0MCwgcmVnKTsKKwkJU2lTX1NldFJlZ0FORE9SKFNJU1NSLCAweDFmLCAweDNmLCByZWcxKTsKIAl9CiAjZW5kaWYKIApAQCAtMzg3MSwxNyArMzg3MSwxNyBAQAogCQl9CiAJfQogCi0JYW5kU0lTSURYUkVHKFNJU1NSLCBJTkRfU0lTX1JBTURBQ19DT05UUk9MLCB+MHgwNCk7CisJU2lTX1NldFJlZ0FORChTSVNTUiwgSU5EX1NJU19SQU1EQUNfQ09OVFJPTCwgfjB4MDQpOwogCiAJaWYoaXZpZGVvLT5jdXJyZW50dmJmbGFncyAmIENSVDJfVFYpIHsKIAkJaWYoaXZpZGVvLT52YmZsYWdzMiAmIFZCMl9TSVNCUklER0UpIHsKLQkJCWluU0lTSURYUkVHKFNJU1BBUlQyLDB4MWYsaXZpZGVvLT5wMl8xZik7Ci0JCQlpblNJU0lEWFJFRyhTSVNQQVJUMiwweDIwLGl2aWRlby0+cDJfMjApOwotCQkJaW5TSVNJRFhSRUcoU0lTUEFSVDIsMHgyYixpdmlkZW8tPnAyXzJiKTsKLQkJCWluU0lTSURYUkVHKFNJU1BBUlQyLDB4NDIsaXZpZGVvLT5wMl80Mik7Ci0JCQlpblNJU0lEWFJFRyhTSVNQQVJUMiwweDQzLGl2aWRlby0+cDJfNDMpOwotCQkJaW5TSVNJRFhSRUcoU0lTUEFSVDIsMHgwMSxpdmlkZW8tPnAyXzAxKTsKLQkJCWluU0lTSURYUkVHKFNJU1BBUlQyLDB4MDIsaXZpZGVvLT5wMl8wMik7CisJCQlpdmlkZW8tPnAyXzFmID0gU2lTX0dldFJlZyhTSVNQQVJUMiwgMHgxZik7CisJCQlpdmlkZW8tPnAyXzIwID0gU2lTX0dldFJlZyhTSVNQQVJUMiwgMHgyMCk7CisJCQlpdmlkZW8tPnAyXzJiID0gU2lTX0dldFJlZyhTSVNQQVJUMiwgMHgyYik7CisJCQlpdmlkZW8tPnAyXzQyID0gU2lTX0dldFJlZyhTSVNQQVJUMiwgMHg0Mik7CisJCQlpdmlkZW8tPnAyXzQzID0gU2lTX0dldFJlZyhTSVNQQVJUMiwgMHg0Myk7CisJCQlpdmlkZW8tPnAyXzAxID0gU2lTX0dldFJlZyhTSVNQQVJUMiwgMHgwMSk7CisJCQlpdmlkZW8tPnAyXzAyID0gU2lTX0dldFJlZyhTSVNQQVJUMiwgMHgwMik7CiAJCX0gZWxzZSBpZihpdmlkZW8tPnZiZmxhZ3MyICYgVkIyX0NIUk9OVEVMKSB7CiAJCQlpZihpdmlkZW8tPmNocm9udGVsdHlwZSA9PSAxKSB7CiAJCQkJaXZpZGVvLT50dnggPSBTaVNfR2V0Q0g3MDB4KCZpdmlkZW8tPlNpU19QciwgMHgwYSk7CkBAIC00MTA1LDcgKzQxMDUsNiBAQAogCXN0cnVjdCBzaXNfdmlkZW9faW5mbyAqaXZpZGVvID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXZvaWQgX19pb21lbSAqcm9tX2Jhc2U7CiAJdW5zaWduZWQgY2hhciAqbXlyb21iYXNlID0gTlVMTDsKLQl1MzIgdGVtcDsKIAlzaXplX3Qgcm9tc2l6ZTsKIAogCS8qIEZpcnN0LCB0cnkgdGhlIG9mZmljaWFsIHBjaSBST00gZnVuY3Rpb25zIChleGNlcHQKQEAgLTQxMzIsMjYgKzQxMzEsMjkgQEAKIAkvKiBPdGhlcndpc2UgZG8gaXQgdGhlIGNvbnZlbnRpb25hbCB3YXkuICovCiAKICNpZiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pCisJeworCQl1MzIgdGVtcDsKIAotCWZvcih0ZW1wID0gMHgwMDBjMDAwMDsgdGVtcCA8IDB4MDAwZjAwMDA7IHRlbXAgKz0gMHgwMDAwMTAwMCkgeworCQlmb3IgKHRlbXAgPSAweDAwMGMwMDAwOyB0ZW1wIDwgMHgwMDBmMDAwMDsgdGVtcCArPSAweDAwMDAxMDAwKSB7CiAKLQkJcm9tX2Jhc2UgPSBpb3JlbWFwKHRlbXAsIDY1NTM2KTsKLQkJaWYoIXJvbV9iYXNlKQotCQkJY29udGludWU7CisJCQlyb21fYmFzZSA9IGlvcmVtYXAodGVtcCwgNjU1MzYpOworCQkJaWYgKCFyb21fYmFzZSkKKwkJCQljb250aW51ZTsKIAotCQlpZighc2lzZmJfY2hlY2tfcm9tKHJvbV9iYXNlLCBpdmlkZW8pKSB7CisJCQlpZiAoIXNpc2ZiX2NoZWNrX3JvbShyb21fYmFzZSwgaXZpZGVvKSkgeworCQkJCWlvdW5tYXAocm9tX2Jhc2UpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlpZiAoKG15cm9tYmFzZSA9IHZtYWxsb2MoNjU1MzYpKSkKKwkJCQltZW1jcHlfZnJvbWlvKG15cm9tYmFzZSwgcm9tX2Jhc2UsIDY1NTM2KTsKKwogCQkJaW91bm1hcChyb21fYmFzZSk7Ci0JCQljb250aW51ZTsKKwkJCWJyZWFrOworCiAJCX0KIAotCQlpZigobXlyb21iYXNlID0gdm1hbGxvYyg2NTUzNikpKQotCQkJbWVtY3B5X2Zyb21pbyhteXJvbWJhc2UsIHJvbV9iYXNlLCA2NTUzNik7Ci0KLQkJaW91bm1hcChyb21fYmFzZSk7Ci0JCWJyZWFrOwotCi0gICAgICAgIH0KLQorCX0KICNlbmRpZgogCiAJcmV0dXJuIG15cm9tYmFzZTsKQEAgLTQxOTIsMTAgKzQxOTQsMTAgQEAKIAl1bnNpZ25lZCBjaGFyIHJlZzsKIAlpbnQgaSwgajsKIAotCWFuZFNJU0lEWFJFRyhTSVNTUiwgMHgxNSwgMHhGQik7Ci0Jb3JTSVNJRFhSRUcoU0lTU1IsIDB4MTUsIDB4MDQpOwotCW91dFNJU0lEWFJFRyhTSVNTUiwgMHgxMywgMHgwMCk7Ci0Jb3V0U0lTSURYUkVHKFNJU1NSLCAweDE0LCAweEJGKTsKKwlTaVNfU2V0UmVnQU5EKFNJU1NSLCAweDE1LCAweEZCKTsKKwlTaVNfU2V0UmVnT1IoU0lTU1IsIDB4MTUsIDB4MDQpOworCVNpU19TZXRSZWcoU0lTU1IsIDB4MTMsIDB4MDApOworCVNpU19TZXRSZWcoU0lTU1IsIDB4MTQsIDB4QkYpOwogCiAJZm9yKGkgPSAwOyBpIDwgMjsgaSsrKSB7CiAJCXRlbXAgPSAweDEyMzQ7CkBAIC00MjAzLDEyICs0MjA1LDEyIEBACiAJCQl3cml0ZXcodGVtcCwgRkJBZGRyZXNzKTsKIAkJCWlmKHJlYWR3KEZCQWRkcmVzcykgPT0gdGVtcCkKIAkJCQlicmVhazsKLQkJCW9yU0lTSURYUkVHKFNJU1NSLCAweDNjLCAweDAxKTsKLQkJCWluU0lTSURYUkVHKFNJU1NSLCAweDA1LCByZWcpOwotCQkJaW5TSVNJRFhSRUcoU0lTU1IsIDB4MDUsIHJlZyk7Ci0JCQlhbmRTSVNJRFhSRUcoU0lTU1IsIDB4M2MsIDB4ZmUpOwotCQkJaW5TSVNJRFhSRUcoU0lTU1IsIDB4MDUsIHJlZyk7Ci0JCQlpblNJU0lEWFJFRyhTSVNTUiwgMHgwNSwgcmVnKTsKKwkJCVNpU19TZXRSZWdPUihTSVNTUiwgMHgzYywgMHgwMSk7CisJCQlyZWcgPSBTaVNfR2V0UmVnKFNJU1NSLCAweDA1KTsKKwkJCXJlZyA9IFNpU19HZXRSZWcoU0lTU1IsIDB4MDUpOworCQkJU2lTX1NldFJlZ0FORChTSVNTUiwgMHgzYywgMHhmZSk7CisJCQlyZWcgPSBTaVNfR2V0UmVnKFNJU1NSLCAweDA1KTsKKwkJCXJlZyA9IFNpU19HZXRSZWcoU0lTU1IsIDB4MDUpOwogCQkJdGVtcCsrOwogCQl9CiAJfQpAQCAtNDIxOCw3ICs0MjIwLDcgQEAKIAl3cml0ZWwoMHg4OUFCQ0RFRkwsIChGQkFkZHJlc3MgKyA4KSk7CiAJd3JpdGVsKDB4Q0RFRjAxMjNMLCAoRkJBZGRyZXNzICsgMTIpKTsKIAotCWluU0lTSURYUkVHKFNJU1NSLCAweDNiLCByZWcpOworCXJlZyA9IFNpU19HZXRSZWcoU0lTU1IsIDB4M2IpOwogCWlmKHJlZyAmIDB4MDEpIHsKIAkJaWYocmVhZGwoKEZCQWRkcmVzcyArIDEyKSkgPT0gMHhDREVGMDEyM0wpCiAJCQlyZXR1cm4gNDsJLyogQ2hhbm5lbCBBIDEyOGJpdCAqLwpAQCAtNDI4MSwxMyArNDI4MywxMyBAQAogCQlQaHlzaWNhbEFkckhhbGZQYWdlID0gKFBhZ2VDYXBhY2l0eSAvIDIgKyBQaHlzaWNhbEFkckhpZ2gpICUgUGFnZUNhcGFjaXR5OwogCQlQaHlzaWNhbEFkck90aGVyUGFnZSA9IFBhZ2VDYXBhY2l0eSAqIFNpU19EUkFNVHlwZVtrXVsyXSArIFBoeXNpY2FsQWRySGlnaDsKIAotCQlhbmRTSVNJRFhSRUcoU0lTU1IsIDB4MTUsIDB4RkIpOyAvKiBUZXN0ICovCi0JCW9yU0lTSURYUkVHKFNJU1NSLCAweDE1LCAweDA0KTsgIC8qIFRlc3QgKi8KKwkJU2lTX1NldFJlZ0FORChTSVNTUiwgMHgxNSwgMHhGQik7IC8qIFRlc3QgKi8KKwkJU2lTX1NldFJlZ09SKFNJU1NSLCAweDE1LCAweDA0KTsgIC8qIFRlc3QgKi8KIAkJc3IxNCA9IChTaVNfRFJBTVR5cGVba11bM10gKiBidXN3aWR0aCkgLSAxOwogCQlpZihidXN3aWR0aCA9PSA0KSAgICAgIHNyMTQgfD0gMHg4MDsKIAkJZWxzZSBpZihidXN3aWR0aCA9PSAyKSBzcjE0IHw9IDB4NDA7Ci0JCW91dFNJU0lEWFJFRyhTSVNTUiwgMHgxMywgU2lTX0RSQU1UeXBlW2tdWzRdKTsKLQkJb3V0U0lTSURYUkVHKFNJU1NSLCAweDE0LCBzcjE0KTsKKwkJU2lTX1NldFJlZyhTSVNTUiwgMHgxMywgU2lTX0RSQU1UeXBlW2tdWzRdKTsKKwkJU2lTX1NldFJlZyhTSVNTUiwgMHgxNCwgc3IxNCk7CiAKIAkJQmFua051bUhpZ2ggPDw9IDE2OwogCQlCYW5rTnVtTWlkIDw8PSAxNjsKQEAgLTQzNTQsMTMgKzQzNTYsMTMgQEAKIAlpZighaXZpZGVvLT5TaVNfUHIuVXNlUk9NKQogCQliaW9zID0gTlVMTDsKIAotCW91dFNJU0lEWFJFRyhTSVNTUiwgMHgwNSwgMHg4Nik7CisJU2lTX1NldFJlZyhTSVNTUiwgMHgwNSwgMHg4Nik7CiAKIAlpZihiaW9zKSB7CiAJCWlmKGJpb3NbMHg1Ml0gJiAweDgwKSB7CiAJCQltZW10eXBlID0gYmlvc1sweDUyXTsKIAkJfSBlbHNlIHsKLQkJCWluU0lTSURYUkVHKFNJU1NSLCAweDNhLCBtZW10eXBlKTsKKwkJCW1lbXR5cGUgPSBTaVNfR2V0UmVnKFNJU1NSLCAweDNhKTsKIAkJfQogCQltZW10eXBlICY9IDB4MDc7CiAJfQpAQCAtNDM4NCwxOSArNDM4NiwxOSBAQAogCQkJdjYgPSBiaW9zW3JpbmRleCsrXTsKIAkJfQogCX0KLQlvdXRTSVNJRFhSRUcoU0lTU1IsIDB4MjgsIHYxKTsKLQlvdXRTSVNJRFhSRUcoU0lTU1IsIDB4MjksIHYyKTsKLQlvdXRTSVNJRFhSRUcoU0lTU1IsIDB4MmEsIHYzKTsKLQlvdXRTSVNJRFhSRUcoU0lTU1IsIDB4MmUsIHY0KTsKLQlvdXRTSVNJRFhSRUcoU0lTU1IsIDB4MmYsIHY1KTsKLQlvdXRTSVNJRFhSRUcoU0lTU1IsIDB4MzAsIHY2KTsKKwlTaVNfU2V0UmVnKFNJU1NSLCAweDI4LCB2MSk7CisJU2lTX1NldFJlZyhTSVNTUiwgMHgyOSwgdjIpOworCVNpU19TZXRSZWcoU0lTU1IsIDB4MmEsIHYzKTsKKwlTaVNfU2V0UmVnKFNJU1NSLCAweDJlLCB2NCk7CisJU2lTX1NldFJlZyhTSVNTUiwgMHgyZiwgdjUpOworCVNpU19TZXRSZWcoU0lTU1IsIDB4MzAsIHY2KTsKIAogCXYxID0gMHgxMDsKIAlpZihiaW9zKQogCQl2MSA9IGJpb3NbMHhhNF07Ci0Jb3V0U0lTSURYUkVHKFNJU1NSLCAweDA3LCB2MSk7ICAgICAgIC8qIERBQyBzcGVlZCAqLworCVNpU19TZXRSZWcoU0lTU1IsIDB4MDcsIHYxKTsgICAgICAgLyogREFDIHNwZWVkICovCiAKLQlvdXRTSVNJRFhSRUcoU0lTU1IsIDB4MTEsIDB4MGYpOyAgICAgLyogRERDLCBwb3dlciBzYXZlICovCisJU2lTX1NldFJlZyhTSVNTUiwgMHgxMSwgMHgwZik7ICAgICAvKiBEREMsIHBvd2VyIHNhdmUgKi8KIAogCXYxID0gMHgwMTsgdjIgPSAweDQzOyB2MyA9IDB4MWU7IHY0ID0gMHgyYTsKIAl2NSA9IDB4MDY7IHY2ID0gMHgwMDsgdjcgPSAweDAwOyB2OCA9IDB4MDA7CkBAIC00NDEzLDg3ICs0NDE1LDg3IEBACiAJfQogCWlmKGl2aWRlby0+cmV2aXNpb25faWQgPj0gMHg4MCkKIAkJdjMgJj0gMHhmZDsKLQlvdXRTSVNJRFhSRUcoU0lTU1IsIDB4MTUsIHYxKTsgICAgICAgLyogUmFtIHR5cGUgKGFzc3VtaW5nIDAsIEJJT1MgMHhhNSBzdGVwIDgpICovCi0Jb3V0U0lTSURYUkVHKFNJU1NSLCAweDE2LCB2Mik7Ci0Jb3V0U0lTSURYUkVHKFNJU1NSLCAweDE3LCB2Myk7Ci0Jb3V0U0lTSURYUkVHKFNJU1NSLCAweDE4LCB2NCk7Ci0Jb3V0U0lTSURYUkVHKFNJU1NSLCAweDE5LCB2NSk7Ci0Jb3V0U0lTSURYUkVHKFNJU1NSLCAweDFhLCB2Nik7Ci0Jb3V0U0lTSURYUkVHKFNJU1NSLCAweDFiLCB2Nyk7Ci0Jb3V0U0lTSURYUkVHKFNJU1NSLCAweDFjLCB2OCk7CSAgIC8qIC0tLS0gKi8KLQlhbmRTSVNJRFhSRUcoU0lTU1IsIDB4MTUgLDB4ZmIpOwotCW9yU0lTSURYUkVHKFNJU1NSLCAweDE1LCAweDA0KTsKKwlTaVNfU2V0UmVnKFNJU1NSLCAweDE1LCB2MSk7ICAgICAgIC8qIFJhbSB0eXBlIChhc3N1bWluZyAwLCBCSU9TIDB4YTUgc3RlcCA4KSAqLworCVNpU19TZXRSZWcoU0lTU1IsIDB4MTYsIHYyKTsKKwlTaVNfU2V0UmVnKFNJU1NSLCAweDE3LCB2Myk7CisJU2lTX1NldFJlZyhTSVNTUiwgMHgxOCwgdjQpOworCVNpU19TZXRSZWcoU0lTU1IsIDB4MTksIHY1KTsKKwlTaVNfU2V0UmVnKFNJU1NSLCAweDFhLCB2Nik7CisJU2lTX1NldFJlZyhTSVNTUiwgMHgxYiwgdjcpOworCVNpU19TZXRSZWcoU0lTU1IsIDB4MWMsIHY4KTsJICAgLyogLS0tLSAqLworCVNpU19TZXRSZWdBTkQoU0lTU1IsIDB4MTUsIDB4ZmIpOworCVNpU19TZXRSZWdPUihTSVNTUiwgMHgxNSwgMHgwNCk7CiAJaWYoYmlvcykgewogCQlpZihiaW9zWzB4NTNdICYgMHgwMikgewotCQkJb3JTSVNJRFhSRUcoU0lTU1IsIDB4MTksIDB4MjApOworCQkJU2lTX1NldFJlZ09SKFNJU1NSLCAweDE5LCAweDIwKTsKIAkJfQogCX0KIAl2MSA9IDB4MDQ7CQkJICAgLyogREFDIHBlZGVzdGFsIChCSU9TIDB4ZTUpICovCiAJaWYoaXZpZGVvLT5yZXZpc2lvbl9pZCA+PSAweDgwKQogCQl2MSB8PSAweDAxOwotCW91dFNJU0lEWFJFRyhTSVNTUiwgMHgxZiwgdjEpOwotCW91dFNJU0lEWFJFRyhTSVNTUiwgMHgyMCwgMHhhNCk7ICAgICAvKiBsaW5lYXIgJiByZWxvY2F0ZWQgaW8gJiBkaXNhYmxlIGEwMDAwICovCisJU2lTX1NldFJlZyhTSVNTUiwgMHgxZiwgdjEpOworCVNpU19TZXRSZWcoU0lTU1IsIDB4MjAsIDB4YTQpOyAgICAgLyogbGluZWFyICYgcmVsb2NhdGVkIGlvICYgZGlzYWJsZSBhMDAwMCAqLwogCXYxID0gMHhmNjsgdjIgPSAweDBkOyB2MyA9IDB4MDA7CiAJaWYoYmlvcykgewogCQl2MSA9IGJpb3NbMHhlOF07CiAJCXYyID0gYmlvc1sweGU5XTsKIAkJdjMgPSBiaW9zWzB4ZWFdOwogCX0KLQlvdXRTSVNJRFhSRUcoU0lTU1IsIDB4MjMsIHYxKTsKLQlvdXRTSVNJRFhSRUcoU0lTU1IsIDB4MjQsIHYyKTsKLQlvdXRTSVNJRFhSRUcoU0lTU1IsIDB4MjUsIHYzKTsKLQlvdXRTSVNJRFhSRUcoU0lTU1IsIDB4MjEsIDB4ODQpOwotCW91dFNJU0lEWFJFRyhTSVNTUiwgMHgyMiwgMHgwMCk7Ci0Jb3V0U0lTSURYUkVHKFNJU0NSLCAweDM3LCAweDAwKTsKLQlvclNJU0lEWFJFRyhTSVNQQVJUMSwgMHgyNCwgMHgwMSk7ICAgLyogdW5sb2NrIGNydDIgKi8KLQlvdXRTSVNJRFhSRUcoU0lTUEFSVDEsIDB4MDAsIDB4MDApOworCVNpU19TZXRSZWcoU0lTU1IsIDB4MjMsIHYxKTsKKwlTaVNfU2V0UmVnKFNJU1NSLCAweDI0LCB2Mik7CisJU2lTX1NldFJlZyhTSVNTUiwgMHgyNSwgdjMpOworCVNpU19TZXRSZWcoU0lTU1IsIDB4MjEsIDB4ODQpOworCVNpU19TZXRSZWcoU0lTU1IsIDB4MjIsIDB4MDApOworCVNpU19TZXRSZWcoU0lTQ1IsIDB4MzcsIDB4MDApOworCVNpU19TZXRSZWdPUihTSVNQQVJUMSwgMHgyNCwgMHgwMSk7ICAgLyogdW5sb2NrIGNydDIgKi8KKwlTaVNfU2V0UmVnKFNJU1BBUlQxLCAweDAwLCAweDAwKTsKIAl2MSA9IDB4NDA7IHYyID0gMHgxMTsKIAlpZihiaW9zKSB7CiAJCXYxID0gYmlvc1sweGVjXTsKIAkJdjIgPSBiaW9zWzB4ZWJdOwogCX0KLQlvdXRTSVNJRFhSRUcoU0lTUEFSVDEsIDB4MDIsIHYxKTsKKwlTaVNfU2V0UmVnKFNJU1BBUlQxLCAweDAyLCB2MSk7CiAKIAlpZihpdmlkZW8tPnJldmlzaW9uX2lkID49IDB4ODApCiAJCXYyICY9IH4weDAxOwogCi0JaW5TSVNJRFhSRUcoU0lTUEFSVDQsIDB4MDAsIHJlZyk7CisJcmVnID0gU2lTX0dldFJlZyhTSVNQQVJUNCwgMHgwMCk7CiAJaWYoKHJlZyA9PSAxKSB8fCAocmVnID09IDIpKSB7Ci0JCW91dFNJU0lEWFJFRyhTSVNDUiwgMHgzNywgMHgwMik7Ci0JCW91dFNJU0lEWFJFRyhTSVNQQVJUMiwgMHgwMCwgMHgxYyk7CisJCVNpU19TZXRSZWcoU0lTQ1IsIDB4MzcsIDB4MDIpOworCQlTaVNfU2V0UmVnKFNJU1BBUlQyLCAweDAwLCAweDFjKTsKIAkJdjQgPSAweDAwOyB2NSA9IDB4MDA7IHY2ID0gMHgxMDsKIAkJaWYoaXZpZGVvLT5TaVNfUHIuVXNlUk9NKSB7CiAJCQl2NCA9IGJpb3NbMHhmNV07CiAJCQl2NSA9IGJpb3NbMHhmNl07CiAJCQl2NiA9IGJpb3NbMHhmN107CiAJCX0KLQkJb3V0U0lTSURYUkVHKFNJU1BBUlQ0LCAweDBkLCB2NCk7Ci0JCW91dFNJU0lEWFJFRyhTSVNQQVJUNCwgMHgwZSwgdjUpOwotCQlvdXRTSVNJRFhSRUcoU0lTUEFSVDQsIDB4MTAsIHY2KTsKLQkJb3V0U0lTSURYUkVHKFNJU1BBUlQ0LCAweDBmLCAweDNmKTsKLQkJaW5TSVNJRFhSRUcoU0lTUEFSVDQsIDB4MDEsIHJlZyk7CisJCVNpU19TZXRSZWcoU0lTUEFSVDQsIDB4MGQsIHY0KTsKKwkJU2lTX1NldFJlZyhTSVNQQVJUNCwgMHgwZSwgdjUpOworCQlTaVNfU2V0UmVnKFNJU1BBUlQ0LCAweDEwLCB2Nik7CisJCVNpU19TZXRSZWcoU0lTUEFSVDQsIDB4MGYsIDB4M2YpOworCQlyZWcgPSBTaVNfR2V0UmVnKFNJU1BBUlQ0LCAweDAxKTsKIAkJaWYocmVnID49IDB4YjApIHsKLQkJCWluU0lTSURYUkVHKFNJU1BBUlQ0LCAweDIzLCByZWcpOworCQkJcmVnID0gU2lTX0dldFJlZyhTSVNQQVJUNCwgMHgyMyk7CiAJCQlyZWcgJj0gMHgyMDsKIAkJCXJlZyA8PD0gMTsKLQkJCW91dFNJU0lEWFJFRyhTSVNQQVJUNCwgMHgyMywgcmVnKTsKKwkJCVNpU19TZXRSZWcoU0lTUEFSVDQsIDB4MjMsIHJlZyk7CiAJCX0KIAl9IGVsc2UgewogCQl2MiAmPSB+MHgxMDsKIAl9Ci0Jb3V0U0lTSURYUkVHKFNJU1NSLCAweDMyLCB2Mik7CisJU2lTX1NldFJlZyhTSVNTUiwgMHgzMiwgdjIpOwogCi0JYW5kU0lTSURYUkVHKFNJU1BBUlQxLCAweDI0LCAweGZlKTsgIC8qIExvY2sgQ1JUMiAqLworCVNpU19TZXRSZWdBTkQoU0lTUEFSVDEsIDB4MjQsIDB4ZmUpOyAgLyogTG9jayBDUlQyICovCiAKLQlpblNJU0lEWFJFRyhTSVNTUiwgMHgxNiwgcmVnKTsKKwlyZWcgPSBTaVNfR2V0UmVnKFNJU1NSLCAweDE2KTsKIAlyZWcgJj0gMHhjMzsKLQlvdXRTSVNJRFhSRUcoU0lTQ1IsIDB4MzUsIHJlZyk7Ci0Jb3V0U0lTSURYUkVHKFNJU0NSLCAweDgzLCAweDAwKTsKKwlTaVNfU2V0UmVnKFNJU0NSLCAweDM1LCByZWcpOworCVNpU19TZXRSZWcoU0lTQ1IsIDB4ODMsIDB4MDApOwogI2lmICFkZWZpbmVkKF9faTM4Nl9fKSAmJiAhZGVmaW5lZChfX3g4Nl82NF9fKQogCWlmKHNpc2ZiX3ZpZGVvcmFtKSB7Ci0JCW91dFNJU0lEWFJFRyhTSVNTUiwgMHgxMywgMHgyOCk7ICAvKiA/ICovCisJCVNpU19TZXRSZWcoU0lTU1IsIDB4MTMsIDB4MjgpOyAgLyogPyAqLwogCQlyZWcgPSAoKHNpc2ZiX3ZpZGVvcmFtID4+IDEwKSAtIDEpIHwgMHg0MDsKLQkJb3V0U0lTSURYUkVHKFNJU1NSLCAweDE0LCByZWcpOworCQlTaVNfU2V0UmVnKFNJU1NSLCAweDE0LCByZWcpOwogCX0gZWxzZSB7CiAjZW5kaWYKIAkJLyogTmVlZCB0byBtYXAgbWF4IEZCIHNpemUgZm9yIGZpbmRpbmcgb3V0IGFib3V0IFJBTSBzaXplICovCkBAIC00NTA2LDggKzQ1MDgsOCBAQAogCQl9IGVsc2UgewogCQkJcHJpbnRrKEtFUk5fREVCVUcKIAkJCQkic2lzZmI6IEZhaWxlZCB0byBtYXAgbWVtb3J5IGZvciBzaXplIGRldGVjdGlvbiwgYXNzdW1pbmcgOE1CXG4iKTsKLQkJCW91dFNJU0lEWFJFRyhTSVNTUiwgMHgxMywgMHgyOCk7ICAvKiA/ICovCi0JCQlvdXRTSVNJRFhSRUcoU0lTU1IsIDB4MTQsIDB4NDcpOyAgLyogOE1CLCA2NGJpdCBkZWZhdWx0ICovCisJCQlTaVNfU2V0UmVnKFNJU1NSLCAweDEzLCAweDI4KTsgIC8qID8gKi8KKwkJCVNpU19TZXRSZWcoU0lTU1IsIDB4MTQsIDB4NDcpOyAgLyogOE1CLCA2NGJpdCBkZWZhdWx0ICovCiAJCX0KICNpZiAhZGVmaW5lZChfX2kzODZfXykgJiYgIWRlZmluZWQoX194ODZfNjRfXykKIAl9CkBAIC00NTE2LDcgKzQ1MTgsNyBAQAogCQl2MSA9IGJpb3NbMHhlNl07CiAJCXYyID0gYmlvc1sweGU3XTsKIAl9IGVsc2UgewotCQlpblNJU0lEWFJFRyhTSVNTUiwgMHgzYSwgcmVnKTsKKwkJcmVnID0gU2lTX0dldFJlZyhTSVNTUiwgMHgzYSk7CiAJCWlmKChyZWcgJiAweDMwKSA9PSAweDMwKSB7CiAJCQl2MSA9IDB4MDQ7IC8qIFBDSSAqLwogCQkJdjIgPSAweDkyOwpAQCAtNDUyNSw4ICs0NTI3LDggQEAKIAkJCXYyID0gMHhiMjsKIAkJfQogCX0KLQlvdXRTSVNJRFhSRUcoU0lTU1IsIDB4MjEsIHYxKTsKLQlvdXRTSVNJRFhSRUcoU0lTU1IsIDB4MjIsIHYyKTsKKwlTaVNfU2V0UmVnKFNJU1NSLCAweDIxLCB2MSk7CisJU2lTX1NldFJlZyhTSVNTUiwgMHgyMiwgdjIpOwogCiAJLyogU2Vuc2UgQ1JUMSAqLwogCXNpc2ZiX3NlbnNlX2NydDEoaXZpZGVvKTsKQEAgLTQ1MzksMTMgKzQ1NDEsMTMgQEAKIAlpdmlkZW8tPlNpU19Qci5WaWRlb01lbW9yeVNpemUgPSA4IDw8IDIwOwogCVNpU1NldE1vZGUoJml2aWRlby0+U2lTX1ByLCAweDJlIHwgMHg4MCk7CiAKLQlvdXRTSVNJRFhSRUcoU0lTU1IsIDB4MDUsIDB4ODYpOworCVNpU19TZXRSZWcoU0lTU1IsIDB4MDUsIDB4ODYpOwogCiAJLyogRGlzcGxheSBvZmYgKi8KLQlvclNJU0lEWFJFRyhTSVNTUiwgMHgwMSwgMHgyMCk7CisJU2lTX1NldFJlZ09SKFNJU1NSLCAweDAxLCAweDIwKTsKIAogCS8qIFNhdmUgbW9kZSBudW1iZXIgaW4gQ1IzNCAqLwotCW91dFNJU0lEWFJFRyhTSVNDUiwgMHgzNCwgMHgyZSk7CisJU2lTX1NldFJlZyhTSVNDUiwgMHgzNCwgMHgyZSk7CiAKIAkvKiBMZXQgZXZlcnlvbmUga25vdyB3aGF0IHRoZSBjdXJyZW50IG1vZGUgaXMgKi8KIAlpdmlkZW8tPm1vZGVwcmVjaGFuZ2UgPSAweDJlOwpAQCAtNDU2OCw3ICs0NTcwLDcgQEAKIAl1OCByZWc7CiAKIAlmb3IoaSA9IDA7IGkgPD0gKGRlbGF5ICogMTAgKiAzNik7IGkrKykgewotCQlpblNJU0lEWFJFRyhTSVNTUiwgMHgwNSwgcmVnKTsKKwkJcmVnID0gU2lTX0dldFJlZyhTSVNTUiwgMHgwNSk7CiAJCXJlZysrOwogCX0KIH0KQEAgLTQ2NjAsNyArNDY2Miw3IEBACiAJICogLSBpZiBydW5uaW5nIG9uIG5vbi14ODYsIHRoZXJlIHVzdWFsbHkgaXMgbm8gVkdBIHdpbmRvdwogCSAqICAgYXQgYTAwMDAuCiAJICovCi0Jb3JTSVNJRFhSRUcoU0lTU1IsIDB4MjAsICgweDgwIHwgMHgwNCkpOworCVNpU19TZXRSZWdPUihTSVNTUiwgMHgyMCwgKDB4ODAgfCAweDA0KSk7CiAKIAkvKiBOZWVkIHRvIG1hcCBtYXggRkIgc2l6ZSBmb3IgZmluZGluZyBvdXQgYWJvdXQgUkFNIHNpemUgKi8KIAltYXBzaXplID0gaXZpZGVvLT52aWRlb19zaXplOwpAQCAtNDY2OCw3NiArNDY3MCw3NiBAQAogCiAJaWYoIWl2aWRlby0+dmlkZW9fdmJhc2UpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJzaXNmYjogVW5hYmxlIHRvIGRldGVjdCBSQU0gc2l6ZS4gU2V0dGluZyBkZWZhdWx0LlxuIik7Ci0JCW91dFNJU0lEWFJFRyhTSVNTUiwgMHgxMywgMHgzNSk7Ci0JCW91dFNJU0lEWFJFRyhTSVNTUiwgMHgxNCwgMHg0MSk7CisJCVNpU19TZXRSZWcoU0lTU1IsIDB4MTMsIDB4MzUpOworCQlTaVNfU2V0UmVnKFNJU1NSLCAweDE0LCAweDQxKTsKIAkJLyogVE9ETyAqLwogCQlyZXR1cm47CiAJfQogCiAJLyogTm9uLWludGVybGVhdmluZyAqLwotCW91dFNJU0lEWFJFRyhTSVNTUiwgMHgxNSwgMHgwMCk7CisJU2lTX1NldFJlZyhTSVNTUiwgMHgxNSwgMHgwMCk7CiAJLyogTm8gdGlsaW5nICovCi0Jb3V0U0lTSURYUkVHKFNJU1NSLCAweDFjLCAweDAwKTsKKwlTaVNfU2V0UmVnKFNJU1NSLCAweDFjLCAweDAwKTsKIAogCWlmKGl2aWRlby0+Y2hpcCA9PSBYR0lfMjApIHsKIAogCQljaGFubmVsYWIgPSAxOwotCQlpblNJU0lEWFJFRyhTSVNDUiwgMHg5NywgcmVnKTsKKwkJcmVnID0gU2lTX0dldFJlZyhTSVNDUiwgMHg5Nyk7CiAJCWlmKCEocmVnICYgMHgwMSkpIHsJLyogU2luZ2xlIDMyLzE2ICovCiAJCQlidXN3aWR0aCA9IDMyOwotCQkJb3V0U0lTSURYUkVHKFNJU1NSLCAweDEzLCAweGIxKTsKLQkJCW91dFNJU0lEWFJFRyhTSVNTUiwgMHgxNCwgMHg1Mik7CisJCQlTaVNfU2V0UmVnKFNJU1NSLCAweDEzLCAweGIxKTsKKwkJCVNpU19TZXRSZWcoU0lTU1IsIDB4MTQsIDB4NTIpOwogCQkJc2lzZmJfcG9zdF94Z2lfZGVsYXkoaXZpZGVvLCAxKTsKIAkJCXNyMTQgPSAweDAyOwogCQkJaWYoc2lzZmJfcG9zdF94Z2lfcnd0ZXN0KGl2aWRlbywgMjMsIDI0LCBtYXBzaXplKSkKIAkJCQlnb3RvIGJhaWxfb3V0OwogCi0JCQlvdXRTSVNJRFhSRUcoU0lTU1IsIDB4MTMsIDB4MzEpOwotCQkJb3V0U0lTSURYUkVHKFNJU1NSLCAweDE0LCAweDQyKTsKKwkJCVNpU19TZXRSZWcoU0lTU1IsIDB4MTMsIDB4MzEpOworCQkJU2lTX1NldFJlZyhTSVNTUiwgMHgxNCwgMHg0Mik7CiAJCQlzaXNmYl9wb3N0X3hnaV9kZWxheShpdmlkZW8sIDEpOwogCQkJaWYoc2lzZmJfcG9zdF94Z2lfcnd0ZXN0KGl2aWRlbywgMjMsIDIzLCBtYXBzaXplKSkKIAkJCQlnb3RvIGJhaWxfb3V0OwogCiAJCQlidXN3aWR0aCA9IDE2OwotCQkJb3V0U0lTSURYUkVHKFNJU1NSLCAweDEzLCAweGIxKTsKLQkJCW91dFNJU0lEWFJFRyhTSVNTUiwgMHgxNCwgMHg0MSk7CisJCQlTaVNfU2V0UmVnKFNJU1NSLCAweDEzLCAweGIxKTsKKwkJCVNpU19TZXRSZWcoU0lTU1IsIDB4MTQsIDB4NDEpOwogCQkJc2lzZmJfcG9zdF94Z2lfZGVsYXkoaXZpZGVvLCAxKTsKIAkJCXNyMTQgPSAweDAxOwogCQkJaWYoc2lzZmJfcG9zdF94Z2lfcnd0ZXN0KGl2aWRlbywgMjIsIDIzLCBtYXBzaXplKSkKIAkJCQlnb3RvIGJhaWxfb3V0OwogCQkJZWxzZQotCQkJCW91dFNJU0lEWFJFRyhTSVNTUiwgMHgxMywgMHgzMSk7CisJCQkJU2lTX1NldFJlZyhTSVNTUiwgMHgxMywgMHgzMSk7CiAJCX0gZWxzZSB7CQkvKiBEdWFsIDE2LzggKi8KIAkJCWJ1c3dpZHRoID0gMTY7Ci0JCQlvdXRTSVNJRFhSRUcoU0lTU1IsIDB4MTMsIDB4YjEpOwotCQkJb3V0U0lTSURYUkVHKFNJU1NSLCAweDE0LCAweDQxKTsKKwkJCVNpU19TZXRSZWcoU0lTU1IsIDB4MTMsIDB4YjEpOworCQkJU2lTX1NldFJlZyhTSVNTUiwgMHgxNCwgMHg0MSk7CiAJCQlzaXNmYl9wb3N0X3hnaV9kZWxheShpdmlkZW8sIDEpOwogCQkJc3IxNCA9IDB4MDE7CiAJCQlpZihzaXNmYl9wb3N0X3hnaV9yd3Rlc3QoaXZpZGVvLCAyMiwgMjMsIG1hcHNpemUpKQogCQkJCWdvdG8gYmFpbF9vdXQ7CiAKLQkJCW91dFNJU0lEWFJFRyhTSVNTUiwgMHgxMywgMHgzMSk7Ci0JCQlvdXRTSVNJRFhSRUcoU0lTU1IsIDB4MTQsIDB4MzEpOworCQkJU2lTX1NldFJlZyhTSVNTUiwgMHgxMywgMHgzMSk7CisJCQlTaVNfU2V0UmVnKFNJU1NSLCAweDE0LCAweDMxKTsKIAkJCXNpc2ZiX3Bvc3RfeGdpX2RlbGF5KGl2aWRlbywgMSk7CiAJCQlpZihzaXNmYl9wb3N0X3hnaV9yd3Rlc3QoaXZpZGVvLCAyMiwgMjIsIG1hcHNpemUpKQogCQkJCWdvdG8gYmFpbF9vdXQ7CiAKIAkJCWJ1c3dpZHRoID0gODsKLQkJCW91dFNJU0lEWFJFRyhTSVNTUiwgMHgxMywgMHhiMSk7Ci0JCQlvdXRTSVNJRFhSRUcoU0lTU1IsIDB4MTQsIDB4MzApOworCQkJU2lTX1NldFJlZyhTSVNTUiwgMHgxMywgMHhiMSk7CisJCQlTaVNfU2V0UmVnKFNJU1NSLCAweDE0LCAweDMwKTsKIAkJCXNpc2ZiX3Bvc3RfeGdpX2RlbGF5KGl2aWRlbywgMSk7CiAJCQlzcjE0ID0gMHgwMDsKIAkJCWlmKHNpc2ZiX3Bvc3RfeGdpX3J3dGVzdChpdmlkZW8sIDIxLCAyMiwgbWFwc2l6ZSkpCiAJCQkJZ290byBiYWlsX291dDsKIAkJCWVsc2UKLQkJCQlvdXRTSVNJRFhSRUcoU0lTU1IsIDB4MTMsIDB4MzEpOworCQkJCVNpU19TZXRSZWcoU0lTU1IsIDB4MTMsIDB4MzEpOwogCQl9CiAKIAl9IGVsc2UgewkvKiBYR0lfNDAgKi8KIAotCQlpblNJU0lEWFJFRyhTSVNDUiwgMHg5NywgcmVnKTsKKwkJcmVnID0gU2lTX0dldFJlZyhTSVNDUiwgMHg5Nyk7CiAJCWlmKCEocmVnICYgMHgxMCkpIHsKLQkJCWluU0lTSURYUkVHKFNJU1NSLCAweDM5LCByZWcpOworCQkJcmVnID0gU2lTX0dldFJlZyhTSVNTUiwgMHgzOSk7CiAJCQlyZWcgPj49IDE7CiAJCX0KIApAQCAtNDc0NSw1MiArNDc0Nyw1MiBAQAogCQkJYnVzd2lkdGggPSAzMjsKIAkJCWlmKGl2aWRlby0+cmV2aXNpb25faWQgPT0gMikgewogCQkJCWNoYW5uZWxhYiA9IDI7Ci0JCQkJb3V0U0lTSURYUkVHKFNJU1NSLCAweDEzLCAweGExKTsKLQkJCQlvdXRTSVNJRFhSRUcoU0lTU1IsIDB4MTQsIDB4NDQpOworCQkJCVNpU19TZXRSZWcoU0lTU1IsIDB4MTMsIDB4YTEpOworCQkJCVNpU19TZXRSZWcoU0lTU1IsIDB4MTQsIDB4NDQpOwogCQkJCXNyMTQgPSAweDA0OwogCQkJCXNpc2ZiX3Bvc3RfeGdpX2RlbGF5KGl2aWRlbywgMSk7CiAJCQkJaWYoc2lzZmJfcG9zdF94Z2lfcnd0ZXN0KGl2aWRlbywgMjMsIDI0LCBtYXBzaXplKSkKIAkJCQkJZ290byBiYWlsX291dDsKIAotCQkJCW91dFNJU0lEWFJFRyhTSVNTUiwgMHgxMywgMHgyMSk7Ci0JCQkJb3V0U0lTSURYUkVHKFNJU1NSLCAweDE0LCAweDM0KTsKKwkJCQlTaVNfU2V0UmVnKFNJU1NSLCAweDEzLCAweDIxKTsKKwkJCQlTaVNfU2V0UmVnKFNJU1NSLCAweDE0LCAweDM0KTsKIAkJCQlpZihzaXNmYl9wb3N0X3hnaV9yd3Rlc3QoaXZpZGVvLCAyMiwgMjMsIG1hcHNpemUpKQogCQkJCQlnb3RvIGJhaWxfb3V0OwogCiAJCQkJY2hhbm5lbGFiID0gMTsKLQkJCQlvdXRTSVNJRFhSRUcoU0lTU1IsIDB4MTMsIDB4YTEpOwotCQkJCW91dFNJU0lEWFJFRyhTSVNTUiwgMHgxNCwgMHg0MCk7CisJCQkJU2lTX1NldFJlZyhTSVNTUiwgMHgxMywgMHhhMSk7CisJCQkJU2lTX1NldFJlZyhTSVNTUiwgMHgxNCwgMHg0MCk7CiAJCQkJc3IxNCA9IDB4MDA7CiAJCQkJaWYoc2lzZmJfcG9zdF94Z2lfcnd0ZXN0KGl2aWRlbywgMjIsIDIzLCBtYXBzaXplKSkKIAkJCQkJZ290byBiYWlsX291dDsKIAotCQkJCW91dFNJU0lEWFJFRyhTSVNTUiwgMHgxMywgMHgyMSk7Ci0JCQkJb3V0U0lTSURYUkVHKFNJU1NSLCAweDE0LCAweDMwKTsKKwkJCQlTaVNfU2V0UmVnKFNJU1NSLCAweDEzLCAweDIxKTsKKwkJCQlTaVNfU2V0UmVnKFNJU1NSLCAweDE0LCAweDMwKTsKIAkJCX0gZWxzZSB7CiAJCQkJY2hhbm5lbGFiID0gMzsKLQkJCQlvdXRTSVNJRFhSRUcoU0lTU1IsIDB4MTMsIDB4YTEpOwotCQkJCW91dFNJU0lEWFJFRyhTSVNTUiwgMHgxNCwgMHg0Yyk7CisJCQkJU2lTX1NldFJlZyhTSVNTUiwgMHgxMywgMHhhMSk7CisJCQkJU2lTX1NldFJlZyhTSVNTUiwgMHgxNCwgMHg0Yyk7CiAJCQkJc3IxNCA9IDB4MGM7CiAJCQkJc2lzZmJfcG9zdF94Z2lfZGVsYXkoaXZpZGVvLCAxKTsKIAkJCQlpZihzaXNmYl9wb3N0X3hnaV9yd3Rlc3QoaXZpZGVvLCAyMywgMjUsIG1hcHNpemUpKQogCQkJCQlnb3RvIGJhaWxfb3V0OwogCiAJCQkJY2hhbm5lbGFiID0gMjsKLQkJCQlvdXRTSVNJRFhSRUcoU0lTU1IsIDB4MTQsIDB4NDgpOworCQkJCVNpU19TZXRSZWcoU0lTU1IsIDB4MTQsIDB4NDgpOwogCQkJCXNpc2ZiX3Bvc3RfeGdpX2RlbGF5KGl2aWRlbywgMSk7CiAJCQkJc3IxNCA9IDB4MDg7CiAJCQkJaWYoc2lzZmJfcG9zdF94Z2lfcnd0ZXN0KGl2aWRlbywgMjMsIDI0LCBtYXBzaXplKSkKIAkJCQkJZ290byBiYWlsX291dDsKIAotCQkJCW91dFNJU0lEWFJFRyhTSVNTUiwgMHgxMywgMHgyMSk7Ci0JCQkJb3V0U0lTSURYUkVHKFNJU1NSLCAweDE0LCAweDNjKTsKKwkJCQlTaVNfU2V0UmVnKFNJU1NSLCAweDEzLCAweDIxKTsKKwkJCQlTaVNfU2V0UmVnKFNJU1NSLCAweDE0LCAweDNjKTsKIAkJCQlzcjE0ID0gMHgwYzsKIAogCQkJCWlmKHNpc2ZiX3Bvc3RfeGdpX3J3dGVzdChpdmlkZW8sIDIzLCAyNCwgbWFwc2l6ZSkpIHsKIAkJCQkJY2hhbm5lbGFiID0gMzsKIAkJCQl9IGVsc2UgewogCQkJCQljaGFubmVsYWIgPSAyOwotCQkJCQlvdXRTSVNJRFhSRUcoU0lTU1IsIDB4MTQsIDB4MzgpOworCQkJCQlTaVNfU2V0UmVnKFNJU1NSLCAweDE0LCAweDM4KTsKIAkJCQkJc3IxNCA9IDB4MDg7CiAJCQkJfQogCQkJfQpAQCAtNDgwMSwyNiArNDgwMywyNiBAQAogCQkJYnVzd2lkdGggPSA2NDsKIAkJCWlmKGl2aWRlby0+cmV2aXNpb25faWQgPT0gMikgewogCQkJCWNoYW5uZWxhYiA9IDE7Ci0JCQkJb3V0U0lTSURYUkVHKFNJU1NSLCAweDEzLCAweGExKTsKLQkJCQlvdXRTSVNJRFhSRUcoU0lTU1IsIDB4MTQsIDB4NTIpOworCQkJCVNpU19TZXRSZWcoU0lTU1IsIDB4MTMsIDB4YTEpOworCQkJCVNpU19TZXRSZWcoU0lTU1IsIDB4MTQsIDB4NTIpOwogCQkJCXNpc2ZiX3Bvc3RfeGdpX2RlbGF5KGl2aWRlbywgMSk7CiAJCQkJc3IxNCA9IDB4MDI7CiAJCQkJaWYoc2lzZmJfcG9zdF94Z2lfcnd0ZXN0KGl2aWRlbywgMjMsIDI0LCBtYXBzaXplKSkKIAkJCQkJZ290byBiYWlsX291dDsKIAotCQkJCW91dFNJU0lEWFJFRyhTSVNTUiwgMHgxMywgMHgyMSk7Ci0JCQkJb3V0U0lTSURYUkVHKFNJU1NSLCAweDE0LCAweDQyKTsKKwkJCQlTaVNfU2V0UmVnKFNJU1NSLCAweDEzLCAweDIxKTsKKwkJCQlTaVNfU2V0UmVnKFNJU1NSLCAweDE0LCAweDQyKTsKIAkJCX0gZWxzZSB7CiAJCQkJY2hhbm5lbGFiID0gMjsKLQkJCQlvdXRTSVNJRFhSRUcoU0lTU1IsIDB4MTMsIDB4YTEpOwotCQkJCW91dFNJU0lEWFJFRyhTSVNTUiwgMHgxNCwgMHg1YSk7CisJCQkJU2lTX1NldFJlZyhTSVNTUiwgMHgxMywgMHhhMSk7CisJCQkJU2lTX1NldFJlZyhTSVNTUiwgMHgxNCwgMHg1YSk7CiAJCQkJc2lzZmJfcG9zdF94Z2lfZGVsYXkoaXZpZGVvLCAxKTsKIAkJCQlzcjE0ID0gMHgwYTsKIAkJCQlpZihzaXNmYl9wb3N0X3hnaV9yd3Rlc3QoaXZpZGVvLCAyNCwgMjUsIG1hcHNpemUpKQogCQkJCQlnb3RvIGJhaWxfb3V0OwogCi0JCQkJb3V0U0lTSURYUkVHKFNJU1NSLCAweDEzLCAweDIxKTsKLQkJCQlvdXRTSVNJRFhSRUcoU0lTU1IsIDB4MTQsIDB4NGEpOworCQkJCVNpU19TZXRSZWcoU0lTU1IsIDB4MTMsIDB4MjEpOworCQkJCVNpU19TZXRSZWcoU0lTU1IsIDB4MTQsIDB4NGEpOwogCQkJfQogCQkJc2lzZmJfcG9zdF94Z2lfZGVsYXkoaXZpZGVvLCAxKTsKIApAQCAtNDgyOCw3ICs0ODMwLDcgQEAKIAl9CiAKIGJhaWxfb3V0OgotCXNldFNJU0lEWFJFRyhTSVNTUiwgMHgxNCwgMHhmMCwgc3IxNCk7CisJU2lTX1NldFJlZ0FORE9SKFNJU1NSLCAweDE0LCAweGYwLCBzcjE0KTsKIAlzaXNmYl9wb3N0X3hnaV9kZWxheShpdmlkZW8sIDEpOwogCiAJaiA9IChpdmlkZW8tPmNoaXAgPT0gWEdJXzIwKSA/IDUgOiA5OwpAQCAtNDgzOCwxMyArNDg0MCwxMyBAQAogCiAJCXJlZyA9IChpdmlkZW8tPmNoaXAgPT0gWEdJXzIwKSA/CiAJCQkJZHJhbXNyMTNbKGkgKiA1KSArIDRdIDogZHJhbXNyMTNfNFsoaSAqIDUpICsgNF07Ci0JCXNldFNJU0lEWFJFRyhTSVNTUiwgMHgxMywgMHg4MCwgcmVnKTsKKwkJU2lTX1NldFJlZ0FORE9SKFNJU1NSLCAweDEzLCAweDgwLCByZWcpOwogCQlzaXNmYl9wb3N0X3hnaV9kZWxheShpdmlkZW8sIDUwKTsKIAogCQlyYW5rc2l6ZSA9IChpdmlkZW8tPmNoaXAgPT0gWEdJXzIwKSA/CiAJCQkJZHJhbXNyMTNbKGkgKiA1KSArIDNdIDogZHJhbXNyMTNfNFsoaSAqIDUpICsgM107CiAKLQkJaW5TSVNJRFhSRUcoU0lTU1IsIDB4MTMsIHJlZyk7CisJCXJlZyA9IFNpU19HZXRSZWcoU0lTU1IsIDB4MTMpOwogCQlpZihyZWcgJiAweDgwKSByYW5rc2l6ZSA8PD0gMTsKIAogCQlpZihpdmlkZW8tPmNoaXAgPT0gWEdJXzIwKSB7CkBAIC00ODYzLDcgKzQ4NjUsNyBAQAogCiAJCWlmKCFyZWcpIGNvbnRpbnVlOwogCi0JCXNldFNJU0lEWFJFRyhTSVNTUiwgMHgxNCwgMHgwZiwgKHJlZyAmIDB4ZjApKTsKKwkJU2lTX1NldFJlZ0FORE9SKFNJU1NSLCAweDE0LCAweDBmLCAocmVnICYgMHhmMCkpOwogCQlzaXNmYl9wb3N0X3hnaV9kZWxheShpdmlkZW8sIDEpOwogCiAJCWlmKHNpc2ZiX3Bvc3RfeGdpX3J3dGVzdChpdmlkZW8sIGosICgocmVnID4+IDQpICsgY2hhbm5lbGFiIC0gMiArIDIwKSwgbWFwc2l6ZSkpCkBAIC00OTA4LDkgKzQ5MTAsOSBAQAogCQl2MiA9IGl2aWRlby0+Ymlvc19hYmFzZVsweDkwICsgaW5kZXggKyAxXTsKIAkJdjMgPSBpdmlkZW8tPmJpb3NfYWJhc2VbMHg5MCArIGluZGV4ICsgMl07CiAJfQotCW91dFNJU0lEWFJFRyhTSVNTUiwgMHgyOCwgdjEpOwotCW91dFNJU0lEWFJFRyhTSVNTUiwgMHgyOSwgdjIpOwotCW91dFNJU0lEWFJFRyhTSVNTUiwgMHgyYSwgdjMpOworCVNpU19TZXRSZWcoU0lTU1IsIDB4MjgsIHYxKTsKKwlTaVNfU2V0UmVnKFNJU1NSLCAweDI5LCB2Mik7CisJU2lTX1NldFJlZyhTSVNTUiwgMHgyYSwgdjMpOwogCXNpc2ZiX3Bvc3RfeGdpX2RlbGF5KGl2aWRlbywgMHg0Myk7CiAJc2lzZmJfcG9zdF94Z2lfZGVsYXkoaXZpZGVvLCAweDQzKTsKIAlzaXNmYl9wb3N0X3hnaV9kZWxheShpdmlkZW8sIDB4NDMpOwpAQCAtNDkyMSw5ICs0OTIzLDkgQEAKIAkJdjIgPSBpdmlkZW8tPmJpb3NfYWJhc2VbMHhiOCArIGluZGV4ICsgMV07CiAJCXYzID0gaXZpZGVvLT5iaW9zX2FiYXNlWzB4YjggKyBpbmRleCArIDJdOwogCX0KLQlvdXRTSVNJRFhSRUcoU0lTU1IsIDB4MmUsIHYxKTsKLQlvdXRTSVNJRFhSRUcoU0lTU1IsIDB4MmYsIHYyKTsKLQlvdXRTSVNJRFhSRUcoU0lTU1IsIDB4MzAsIHYzKTsKKwlTaVNfU2V0UmVnKFNJU1NSLCAweDJlLCB2MSk7CisJU2lTX1NldFJlZyhTSVNTUiwgMHgyZiwgdjIpOworCVNpU19TZXRSZWcoU0lTU1IsIDB4MzAsIHYzKTsKIAlzaXNmYl9wb3N0X3hnaV9kZWxheShpdmlkZW8sIDB4NDMpOwogCXNpc2ZiX3Bvc3RfeGdpX2RlbGF5KGl2aWRlbywgMHg0Myk7CiAJc2lzZmJfcG9zdF94Z2lfZGVsYXkoaXZpZGVvLCAweDQzKTsKQEAgLTQ5OTYsMjkgKzQ5OTgsMjkgQEAKIAl9OwogCiAJLyogVkdBIGVuYWJsZSAqLwotCXJlZyA9IGluU0lTUkVHKFNJU1ZHQUVOQUJMRSkgfCAweDAxOwotCW91dFNJU1JFRyhTSVNWR0FFTkFCTEUsIHJlZyk7CisJcmVnID0gU2lTX0dldFJlZ0J5dGUoU0lTVkdBRU5BQkxFKSB8IDB4MDE7CisJU2lTX1NldFJlZ0J5dGUoU0lTVkdBRU5BQkxFLCByZWcpOwogCiAJLyogTWlzYyAqLwotCXJlZyA9IGluU0lTUkVHKFNJU01JU0NSKSB8IDB4MDE7Ci0Jb3V0U0lTUkVHKFNJU01JU0NXLCByZWcpOworCXJlZyA9IFNpU19HZXRSZWdCeXRlKFNJU01JU0NSKSB8IDB4MDE7CisJU2lTX1NldFJlZ0J5dGUoU0lTTUlTQ1csIHJlZyk7CiAKIAkvKiBVbmxvY2sgU1IgKi8KLQlvdXRTSVNJRFhSRUcoU0lTU1IsIDB4MDUsIDB4ODYpOwotCWluU0lTSURYUkVHKFNJU1NSLCAweDA1LCByZWcpOworCVNpU19TZXRSZWcoU0lTU1IsIDB4MDUsIDB4ODYpOworCXJlZyA9IFNpU19HZXRSZWcoU0lTU1IsIDB4MDUpOwogCWlmKHJlZyAhPSAweGExKQogCQlyZXR1cm4gMDsKIAogCS8qIENsZWFyIHNvbWUgcmVncyAqLwogCWZvcihpID0gMDsgaSA8IDB4MjI7IGkrKykgewogCQlpZigweDA2ICsgaSA9PSAweDIwKSBjb250aW51ZTsKLQkJb3V0U0lTSURYUkVHKFNJU1NSLCAweDA2ICsgaSwgMHgwMCk7CisJCVNpU19TZXRSZWcoU0lTU1IsIDB4MDYgKyBpLCAweDAwKTsKIAl9CiAJZm9yKGkgPSAwOyBpIDwgMHgwYjsgaSsrKSB7Ci0JCW91dFNJU0lEWFJFRyhTSVNTUiwgMHgzMSArIGksIDB4MDApOworCQlTaVNfU2V0UmVnKFNJU1NSLCAweDMxICsgaSwgMHgwMCk7CiAJfQogCWZvcihpID0gMDsgaSA8IDB4MTA7IGkrKykgewotCQlvdXRTSVNJRFhSRUcoU0lTQ1IsIDB4MzAgKyBpLCAweDAwKTsKKwkJU2lTX1NldFJlZyhTSVNDUiwgMHgzMCArIGksIDB4MDApOwogCX0KIAogCXB0ciA9IGNzNzg7CkBAIC01MDI2LDcgKzUwMjgsNyBAQAogCQlwdHIgPSAoY29uc3QgdTggKikmYmlvc1sweDc4XTsKIAl9CiAJZm9yKGkgPSAwOyBpIDwgMzsgaSsrKSB7Ci0JCW91dFNJU0lEWFJFRyhTSVNTUiwgMHgyMyArIGksIHB0cltpXSk7CisJCVNpU19TZXRSZWcoU0lTU1IsIDB4MjMgKyBpLCBwdHJbaV0pOwogCX0KIAogCXB0ciA9IGNzNzY7CkBAIC01MDM0LDcgKzUwMzYsNyBAQAogCQlwdHIgPSAoY29uc3QgdTggKikmYmlvc1sweDc2XTsKIAl9CiAJZm9yKGkgPSAwOyBpIDwgMjsgaSsrKSB7Ci0JCW91dFNJU0lEWFJFRyhTSVNTUiwgMHgyMSArIGksIHB0cltpXSk7CisJCVNpU19TZXRSZWcoU0lTU1IsIDB4MjEgKyBpLCBwdHJbaV0pOwogCX0KIAogCXYxID0gMHgxODsgdjIgPSAweDAwOwpAQCAtNTA0Miw4MyArNTA0NCw4MyBAQAogCQl2MSA9IGJpb3NbMHg3NF07CiAJCXYyID0gYmlvc1sweDc1XTsKIAl9Ci0Jb3V0U0lTSURYUkVHKFNJU1NSLCAweDA3LCB2MSk7Ci0Jb3V0U0lTSURYUkVHKFNJU1NSLCAweDExLCAweDBmKTsKLQlvdXRTSVNJRFhSRUcoU0lTU1IsIDB4MWYsIHYyKTsKKwlTaVNfU2V0UmVnKFNJU1NSLCAweDA3LCB2MSk7CisJU2lTX1NldFJlZyhTSVNTUiwgMHgxMSwgMHgwZik7CisJU2lTX1NldFJlZyhTSVNTUiwgMHgxZiwgdjIpOwogCS8qIFBDSSBsaW5lYXIgbW9kZSwgUmVsSU8gZW5hYmxlZCwgQTAwMDAgZGVjb2RpbmcgZGlzYWJsZWQgKi8KLQlvdXRTSVNJRFhSRUcoU0lTU1IsIDB4MjAsIDB4ODAgfCAweDIwIHwgMHgwNCk7Ci0Jb3V0U0lTSURYUkVHKFNJU1NSLCAweDI3LCAweDc0KTsKKwlTaVNfU2V0UmVnKFNJU1NSLCAweDIwLCAweDgwIHwgMHgyMCB8IDB4MDQpOworCVNpU19TZXRSZWcoU0lTU1IsIDB4MjcsIDB4NzQpOwogCiAJcHRyID0gY3M3YjsKIAlpZihpdmlkZW8tPmhhdmVYR0lST00pIHsKIAkJcHRyID0gKGNvbnN0IHU4ICopJmJpb3NbMHg3Yl07CiAJfQogCWZvcihpID0gMDsgaSA8IDM7IGkrKykgewotCQlvdXRTSVNJRFhSRUcoU0lTU1IsIDB4MzEgKyBpLCBwdHJbaV0pOworCQlTaVNfU2V0UmVnKFNJU1NSLCAweDMxICsgaSwgcHRyW2ldKTsKIAl9CiAKIAlpZihpdmlkZW8tPmNoaXAgPT0gWEdJXzQwKSB7CiAJCWlmKGl2aWRlby0+cmV2aXNpb25faWQgPT0gMikgewotCQkJc2V0U0lTSURYUkVHKFNJU1NSLCAweDNiLCAweDNmLCAweGMwKTsKKwkJCVNpU19TZXRSZWdBTkRPUihTSVNTUiwgMHgzYiwgMHgzZiwgMHhjMCk7CiAJCX0KLQkJb3V0U0lTSURYUkVHKFNJU0NSLCAweDdkLCAweGZlKTsKLQkJb3V0U0lTSURYUkVHKFNJU0NSLCAweDdlLCAweDBmKTsKKwkJU2lTX1NldFJlZyhTSVNDUiwgMHg3ZCwgMHhmZSk7CisJCVNpU19TZXRSZWcoU0lTQ1IsIDB4N2UsIDB4MGYpOwogCX0KIAlpZihpdmlkZW8tPnJldmlzaW9uX2lkID09IDApIHsJLyogNDAgKmFuZCogMjA/ICovCi0JCWFuZFNJU0lEWFJFRyhTSVNDUiwgMHg1OCwgMHhkNyk7Ci0JCWluU0lTSURYUkVHKFNJU0NSLCAweGNiLCByZWcpOworCQlTaVNfU2V0UmVnQU5EKFNJU0NSLCAweDU4LCAweGQ3KTsKKwkJcmVnID0gU2lTX0dldFJlZyhTSVNDUiwgMHhjYik7CiAJCWlmKHJlZyAmIDB4MjApIHsKLQkJCXNldFNJU0lEWFJFRyhTSVNDUiwgMHg1OCwgMHhkNywgKHJlZyAmIDB4MTApID8gMHgwOCA6IDB4MjApOyAvKiA9MHgyOCBaNyA/ICovCisJCQlTaVNfU2V0UmVnQU5ET1IoU0lTQ1IsIDB4NTgsIDB4ZDcsIChyZWcgJiAweDEwKSA/IDB4MDggOiAweDIwKTsgLyogPTB4MjggWjcgPyAqLwogCQl9CiAJfQogCiAJcmVnID0gKGl2aWRlby0+Y2hpcCA9PSBYR0lfNDApID8gMHgyMCA6IDB4MDA7Ci0Jc2V0U0lTSURYUkVHKFNJU0NSLCAweDM4LCAweDFmLCByZWcpOworCVNpU19TZXRSZWdBTkRPUihTSVNDUiwgMHgzOCwgMHgxZiwgcmVnKTsKIAogCWlmKGl2aWRlby0+Y2hpcCA9PSBYR0lfMjApIHsKLQkJb3V0U0lTSURYUkVHKFNJU1NSLCAweDM2LCAweDcwKTsKKwkJU2lTX1NldFJlZyhTSVNTUiwgMHgzNiwgMHg3MCk7CiAJfSBlbHNlIHsKLQkJb3V0U0lTSURYUkVHKFNJU1ZJRCwgMHgwMCwgMHg4Nik7Ci0JCW91dFNJU0lEWFJFRyhTSVNWSUQsIDB4MzIsIDB4MDApOwotCQlvdXRTSVNJRFhSRUcoU0lTVklELCAweDMwLCAweDAwKTsKLQkJb3V0U0lTSURYUkVHKFNJU1ZJRCwgMHgzMiwgMHgwMSk7Ci0JCW91dFNJU0lEWFJFRyhTSVNWSUQsIDB4MzAsIDB4MDApOwotCQlhbmRTSVNJRFhSRUcoU0lTVklELCAweDJmLCAweGRmKTsKLQkJYW5kU0lTSURYUkVHKFNJU0NBUCwgMHgwMCwgMHgzZik7CisJCVNpU19TZXRSZWcoU0lTVklELCAweDAwLCAweDg2KTsKKwkJU2lTX1NldFJlZyhTSVNWSUQsIDB4MzIsIDB4MDApOworCQlTaVNfU2V0UmVnKFNJU1ZJRCwgMHgzMCwgMHgwMCk7CisJCVNpU19TZXRSZWcoU0lTVklELCAweDMyLCAweDAxKTsKKwkJU2lTX1NldFJlZyhTSVNWSUQsIDB4MzAsIDB4MDApOworCQlTaVNfU2V0UmVnQU5EKFNJU1ZJRCwgMHgyZiwgMHhkZik7CisJCVNpU19TZXRSZWdBTkQoU0lTQ0FQLCAweDAwLCAweDNmKTsKIAotCQlvdXRTSVNJRFhSRUcoU0lTUEFSVDEsIDB4MmYsIDB4MDEpOwotCQlvdXRTSVNJRFhSRUcoU0lTUEFSVDEsIDB4MDAsIDB4MDApOwotCQlvdXRTSVNJRFhSRUcoU0lTUEFSVDEsIDB4MDIsIGJpb3NbMHg3ZV0pOwotCQlvdXRTSVNJRFhSRUcoU0lTUEFSVDEsIDB4MmUsIDB4MDgpOwotCQlhbmRTSVNJRFhSRUcoU0lTUEFSVDEsIDB4MzUsIDB4N2YpOwotCQlhbmRTSVNJRFhSRUcoU0lTUEFSVDEsIDB4NTAsIDB4ZmUpOworCQlTaVNfU2V0UmVnKFNJU1BBUlQxLCAweDJmLCAweDAxKTsKKwkJU2lTX1NldFJlZyhTSVNQQVJUMSwgMHgwMCwgMHgwMCk7CisJCVNpU19TZXRSZWcoU0lTUEFSVDEsIDB4MDIsIGJpb3NbMHg3ZV0pOworCQlTaVNfU2V0UmVnKFNJU1BBUlQxLCAweDJlLCAweDA4KTsKKwkJU2lTX1NldFJlZ0FORChTSVNQQVJUMSwgMHgzNSwgMHg3Zik7CisJCVNpU19TZXRSZWdBTkQoU0lTUEFSVDEsIDB4NTAsIDB4ZmUpOwogCi0JCWluU0lTSURYUkVHKFNJU1BBUlQ0LCAweDAwLCByZWcpOworCQlyZWcgPSBTaVNfR2V0UmVnKFNJU1BBUlQ0LCAweDAwKTsKIAkJaWYocmVnID09IDEgfHwgcmVnID09IDIpIHsKLQkJCW91dFNJU0lEWFJFRyhTSVNQQVJUMiwgMHgwMCwgMHgxYyk7Ci0JCQlvdXRTSVNJRFhSRUcoU0lTUEFSVDQsIDB4MGQsIGJpb3NbMHg3Zl0pOwotCQkJb3V0U0lTSURYUkVHKFNJU1BBUlQ0LCAweDBlLCBiaW9zWzB4ODBdKTsKLQkJCW91dFNJU0lEWFJFRyhTSVNQQVJUNCwgMHgxMCwgYmlvc1sweDgxXSk7Ci0JCQlhbmRTSVNJRFhSRUcoU0lTUEFSVDQsIDB4MGYsIDB4M2YpOworCQkJU2lTX1NldFJlZyhTSVNQQVJUMiwgMHgwMCwgMHgxYyk7CisJCQlTaVNfU2V0UmVnKFNJU1BBUlQ0LCAweDBkLCBiaW9zWzB4N2ZdKTsKKwkJCVNpU19TZXRSZWcoU0lTUEFSVDQsIDB4MGUsIGJpb3NbMHg4MF0pOworCQkJU2lTX1NldFJlZyhTSVNQQVJUNCwgMHgxMCwgYmlvc1sweDgxXSk7CisJCQlTaVNfU2V0UmVnQU5EKFNJU1BBUlQ0LCAweDBmLCAweDNmKTsKIAotCQkJaW5TSVNJRFhSRUcoU0lTUEFSVDQsIDB4MDEsIHJlZyk7CisJCQlyZWcgPSBTaVNfR2V0UmVnKFNJU1BBUlQ0LCAweDAxKTsKIAkJCWlmKChyZWcgJiAweGYwKSA+PSAweGIwKSB7Ci0JCQkJaW5TSVNJRFhSRUcoU0lTUEFSVDQsIDB4MjMsIHJlZyk7CisJCQkJcmVnID0gU2lTX0dldFJlZyhTSVNQQVJUNCwgMHgyMyk7CiAJCQkJaWYocmVnICYgMHgyMCkgcmVnIHw9IDB4NDA7Ci0JCQkJb3V0U0lTSURYUkVHKFNJU1BBUlQ0LCAweDIzLCByZWcpOworCQkJCVNpU19TZXRSZWcoU0lTUEFSVDQsIDB4MjMsIHJlZyk7CiAJCQkJcmVnID0gKHJlZyAmIDB4MjApID8gMHgwMiA6IDB4MDA7Ci0JCQkJc2V0U0lTSURYUkVHKFNJU1BBUlQxLCAweDFlLCAweGZkLCByZWcpOworCQkJCVNpU19TZXRSZWdBTkRPUihTSVNQQVJUMSwgMHgxZSwgMHhmZCwgcmVnKTsKIAkJCX0KIAkJfQogCiAJCXYxID0gYmlvc1sweDc3XTsKIAotCQlpblNJU0lEWFJFRyhTSVNTUiwgMHgzYiwgcmVnKTsKKwkJcmVnID0gU2lTX0dldFJlZyhTSVNTUiwgMHgzYik7CiAJCWlmKHJlZyAmIDB4MDIpIHsKLQkJCWluU0lTSURYUkVHKFNJU1NSLCAweDNhLCByZWcpOworCQkJcmVnID0gU2lTX0dldFJlZyhTSVNTUiwgMHgzYSk7CiAJCQl2MiA9IChyZWcgJiAweDMwKSA+PiAzOwogCQkJaWYoISh2MiAmIDB4MDQpKSB2MiBePSAweDAyOwotCQkJaW5TSVNJRFhSRUcoU0lTU1IsIDB4MzksIHJlZyk7CisJCQlyZWcgPSBTaVNfR2V0UmVnKFNJU1NSLCAweDM5KTsKIAkJCWlmKHJlZyAmIDB4ODApIHYyIHw9IDB4ODA7CiAJCQl2MiB8PSAweDAxOwogCkBAIC01MTUxLDM2ICs1MTUzLDM2IEBACiAJCQkJCXYyIHw9IDB4MDg7CiAJCQkJfQogCQkJfQotCQkJc2V0U0lTSURYUkVHKFNJU0NSLCAweDVmLCAweGYwLCB2Mik7CisJCQlTaVNfU2V0UmVnQU5ET1IoU0lTQ1IsIDB4NWYsIDB4ZjAsIHYyKTsKIAkJfQotCQlvdXRTSVNJRFhSRUcoU0lTU1IsIDB4MjIsIHYxKTsKKwkJU2lTX1NldFJlZyhTSVNTUiwgMHgyMiwgdjEpOwogCiAJCWlmKGl2aWRlby0+cmV2aXNpb25faWQgPT0gMikgewotCQkJaW5TSVNJRFhSRUcoU0lTU1IsIDB4M2IsIHYxKTsKLQkJCWluU0lTSURYUkVHKFNJU1NSLCAweDNhLCB2Mik7CisJCQl2MSA9IFNpU19HZXRSZWcoU0lTU1IsIDB4M2IpOworCQkJdjIgPSBTaVNfR2V0UmVnKFNJU1NSLCAweDNhKTsKIAkJCXJlZ2QgPSBiaW9zWzB4OTAgKyAzXSB8IChiaW9zWzB4OTAgKyA0XSA8PCA4KTsKIAkJCWlmKCAoISh2MSAmIDB4MDIpKSAmJiAodjIgJiAweDMwKSAmJiAocmVnZCA8IDB4Y2YpICkKLQkJCQlzZXRTSVNJRFhSRUcoU0lTQ1IsIDB4NWYsIDB4ZjEsIDB4MDEpOworCQkJCVNpU19TZXRSZWdBTkRPUihTSVNDUiwgMHg1ZiwgMHhmMSwgMHgwMSk7CiAKIAkJCWlmKChteXBkZXYgPSBwY2lfZ2V0X2RldmljZSgweDEwZGUsIDB4MDFlMCwgTlVMTCkpKSB7CiAJCQkJLyogVE9ETzogc2V0IENSNWYgJjB4ZjEgfCAweDAxIGZvciB2ZXJzaW9uIDY1NzAKIAkJCQkgKiBvZiBuZm9yY2UgMiBST00KIAkJCQkgKi8KIAkJCQlpZigwKQotCQkJCQlzZXRTSVNJRFhSRUcoU0lTQ1IsIDB4NWYsIDB4ZjEsIDB4MDEpOworCQkJCQlTaVNfU2V0UmVnQU5ET1IoU0lTQ1IsIDB4NWYsIDB4ZjEsIDB4MDEpOwogCQkJCXBjaV9kZXZfcHV0KG15cGRldik7CiAJCQl9CiAJCX0KIAogCQl2MSA9IDB4MzA7Ci0JCWluU0lTSURYUkVHKFNJU1NSLCAweDNiLCByZWcpOwotCQlpblNJU0lEWFJFRyhTSVNDUiwgMHg1ZiwgdjIpOworCQlyZWcgPSBTaVNfR2V0UmVnKFNJU1NSLCAweDNiKTsKKwkJdjIgPSBTaVNfR2V0UmVnKFNJU0NSLCAweDVmKTsKIAkJaWYoKCEocmVnICYgMHgwMikpICYmICh2MiAmIDB4MGUpKQogCQkJdjEgfD0gMHgwODsKLQkJb3V0U0lTSURYUkVHKFNJU1NSLCAweDI3LCB2MSk7CisJCVNpU19TZXRSZWcoU0lTU1IsIDB4MjcsIHYxKTsKIAogCQlpZihiaW9zWzB4NjRdICYgMHgwMSkgewotCQkJc2V0U0lTSURYUkVHKFNJU0NSLCAweDVmLCAweGYwLCBiaW9zWzB4NjRdKTsKKwkJCVNpU19TZXRSZWdBTkRPUihTSVNDUiwgMHg1ZiwgMHhmMCwgYmlvc1sweDY0XSk7CiAJCX0KIAogCQl2MSA9IGJpb3NbMHg0ZjddOwpAQCAtNTE4OCwyNyArNTE5MCwyNyBAQAogCQlyZWdkID0gKHJlZ2QgPj4gMjApICYgMHgwZjsKIAkJaWYocmVnZCA9PSAxKSB7CiAJCQl2MSAmPSAweGZjOwotCQkJb3JTSVNJRFhSRUcoU0lTQ1IsIDB4NWYsIDB4MDgpOworCQkJU2lTX1NldFJlZ09SKFNJU0NSLCAweDVmLCAweDA4KTsKIAkJfQotCQlvdXRTSVNJRFhSRUcoU0lTQ1IsIDB4NDgsIHYxKTsKKwkJU2lTX1NldFJlZyhTSVNDUiwgMHg0OCwgdjEpOwogCi0JCXNldFNJU0lEWFJFRyhTSVNDUiwgMHg0NywgMHgwNCwgYmlvc1sweDRmNl0gJiAweGZiKTsKLQkJc2V0U0lTSURYUkVHKFNJU0NSLCAweDQ5LCAweGYwLCBiaW9zWzB4NGY4XSAmIDB4MGYpOwotCQlzZXRTSVNJRFhSRUcoU0lTQ1IsIDB4NGEsIDB4NjAsIGJpb3NbMHg0ZjldICYgMHg5Zik7Ci0JCXNldFNJU0lEWFJFRyhTSVNDUiwgMHg0YiwgMHgwOCwgYmlvc1sweDRmYV0gJiAweGY3KTsKLQkJc2V0U0lTSURYUkVHKFNJU0NSLCAweDRjLCAweDgwLCBiaW9zWzB4NGZiXSAmIDB4N2YpOwotCQlvdXRTSVNJRFhSRUcoU0lTQ1IsIDB4NzAsIGJpb3NbMHg0ZmNdKTsKLQkJc2V0U0lTSURYUkVHKFNJU0NSLCAweDcxLCAweGYwLCBiaW9zWzB4NGZkXSAmIDB4MGYpOwotCQlvdXRTSVNJRFhSRUcoU0lTQ1IsIDB4NzQsIDB4ZDApOwotCQlzZXRTSVNJRFhSRUcoU0lTQ1IsIDB4NzQsIDB4Y2YsIGJpb3NbMHg0ZmVdICYgMHgzMCk7Ci0JCXNldFNJU0lEWFJFRyhTSVNDUiwgMHg3NSwgMHhlMCwgYmlvc1sweDRmZl0gJiAweDFmKTsKLQkJc2V0U0lTSURYUkVHKFNJU0NSLCAweDc2LCAweGUwLCBiaW9zWzB4NTAwXSAmIDB4MWYpOworCQlTaVNfU2V0UmVnQU5ET1IoU0lTQ1IsIDB4NDcsIDB4MDQsIGJpb3NbMHg0ZjZdICYgMHhmYik7CisJCVNpU19TZXRSZWdBTkRPUihTSVNDUiwgMHg0OSwgMHhmMCwgYmlvc1sweDRmOF0gJiAweDBmKTsKKwkJU2lTX1NldFJlZ0FORE9SKFNJU0NSLCAweDRhLCAweDYwLCBiaW9zWzB4NGY5XSAmIDB4OWYpOworCQlTaVNfU2V0UmVnQU5ET1IoU0lTQ1IsIDB4NGIsIDB4MDgsIGJpb3NbMHg0ZmFdICYgMHhmNyk7CisJCVNpU19TZXRSZWdBTkRPUihTSVNDUiwgMHg0YywgMHg4MCwgYmlvc1sweDRmYl0gJiAweDdmKTsKKwkJU2lTX1NldFJlZyhTSVNDUiwgMHg3MCwgYmlvc1sweDRmY10pOworCQlTaVNfU2V0UmVnQU5ET1IoU0lTQ1IsIDB4NzEsIDB4ZjAsIGJpb3NbMHg0ZmRdICYgMHgwZik7CisJCVNpU19TZXRSZWcoU0lTQ1IsIDB4NzQsIDB4ZDApOworCQlTaVNfU2V0UmVnQU5ET1IoU0lTQ1IsIDB4NzQsIDB4Y2YsIGJpb3NbMHg0ZmVdICYgMHgzMCk7CisJCVNpU19TZXRSZWdBTkRPUihTSVNDUiwgMHg3NSwgMHhlMCwgYmlvc1sweDRmZl0gJiAweDFmKTsKKwkJU2lTX1NldFJlZ0FORE9SKFNJU0NSLCAweDc2LCAweGUwLCBiaW9zWzB4NTAwXSAmIDB4MWYpOwogCQl2MSA9IGJpb3NbMHg1MDFdOwogCQlpZigobXlwZGV2ID0gcGNpX2dldF9kZXZpY2UoMHg4MDg2LCAweDI1MzAsIE5VTEwpKSkgewogCQkJdjEgPSAweGYwOwogCQkJcGNpX2Rldl9wdXQobXlwZGV2KTsKIAkJfQotCQlvdXRTSVNJRFhSRUcoU0lTQ1IsIDB4NzcsIHYxKTsKKwkJU2lTX1NldFJlZyhTSVNDUiwgMHg3NywgdjEpOwogCX0KIAogCS8qIFJBTSB0eXBlICovCkBAIC01MjE5LDE0ICs1MjIxLDE0IEBACiAJaWYoaXZpZGVvLT5oYXZlWEdJUk9NKSB7CiAJCXYxID0gYmlvc1sweDE0MCArIHJlZ2JdOwogCX0KLQlvdXRTSVNJRFhSRUcoU0lTQ1IsIDB4NmQsIHYxKTsKKwlTaVNfU2V0UmVnKFNJU0NSLCAweDZkLCB2MSk7CiAKIAlwdHIgPSBjczEyODsKIAlpZihpdmlkZW8tPmhhdmVYR0lST00pIHsKIAkJcHRyID0gKGNvbnN0IHU4ICopJmJpb3NbMHgxMjhdOwogCX0KIAlmb3IoaSA9IDAsIGogPSAwOyBpIDwgMzsgaSsrLCBqICs9IDgpIHsKLQkJb3V0U0lTSURYUkVHKFNJU0NSLCAweDY4ICsgaSwgcHRyW2ogKyByZWdiXSk7CisJCVNpU19TZXRSZWcoU0lTQ1IsIDB4NjggKyBpLCBwdHJbaiArIHJlZ2JdKTsKIAl9CiAKIAlwdHIgID0gY3MzMWE7CkBAIC01MjUwLDE0ICs1MjUyLDE0IEBACiAJCQlpZihyZWdkICYgMHgwMSkgcmVnIHw9IDB4MDQ7CiAJCQlpZihyZWdkICYgMHgwMikgcmVnIHw9IDB4MDg7CiAJCQlyZWdkID4+PSAyOwotCQkJb3V0U0lTSURYUkVHKFNJU0NSLCByZWdhLCByZWcpOwotCQkJaW5TSVNJRFhSRUcoU0lTQ1IsIHJlZ2EsIHJlZyk7Ci0JCQlpblNJU0lEWFJFRyhTSVNDUiwgcmVnYSwgcmVnKTsKKwkJCVNpU19TZXRSZWcoU0lTQ1IsIHJlZ2EsIHJlZyk7CisJCQlyZWcgPSBTaVNfR2V0UmVnKFNJU0NSLCByZWdhKTsKKwkJCXJlZyA9IFNpU19HZXRSZWcoU0lTQ1IsIHJlZ2EpOwogCQkJcmVnICs9IDB4MTA7CiAJCX0KIAl9CiAKLQlhbmRTSVNJRFhSRUcoU0lTQ1IsIDB4NmUsIDB4ZmMpOworCVNpU19TZXRSZWdBTkQoU0lTQ1IsIDB4NmUsIDB4ZmMpOwogCiAJcHRyICA9IE5VTEw7CiAJaWYoaXZpZGVvLT5oYXZlWEdJUk9NKSB7CkBAIC01MjY1LDcgKzUyNjcsNyBAQAogCQlwdHIgID0gKGNvbnN0IHU4ICopJmJpb3NbaW5kZXhdOwogCX0KIAlmb3IoaSA9IDA7IGkgPCA0OyBpKyspIHsKLQkJc2V0U0lTSURYUkVHKFNJU0NSLCAweDZlLCAweGZjLCBpKTsKKwkJU2lTX1NldFJlZ0FORE9SKFNJU0NSLCAweDZlLCAweGZjLCBpKTsKIAkJcmVnID0gMHgwMDsKIAkJZm9yKGogPSAwOyBqIDwgMjsgaisrKSB7CiAJCQlyZWdkID0gMDsKQEAgLTUyNzksOSArNTI4MSw5IEBACiAJCQkJaWYocmVnZCAmIDB4MDEpIHJlZyB8PSAweDAxOwogCQkJCWlmKHJlZ2QgJiAweDAyKSByZWcgfD0gMHgwMjsKIAkJCQlyZWdkID4+PSAyOwotCQkJCW91dFNJU0lEWFJFRyhTSVNDUiwgMHg2ZiwgcmVnKTsKLQkJCQlpblNJU0lEWFJFRyhTSVNDUiwgMHg2ZiwgcmVnKTsKLQkJCQlpblNJU0lEWFJFRyhTSVNDUiwgMHg2ZiwgcmVnKTsKKwkJCQlTaVNfU2V0UmVnKFNJU0NSLCAweDZmLCByZWcpOworCQkJCXJlZyA9IFNpU19HZXRSZWcoU0lTQ1IsIDB4NmYpOworCQkJCXJlZyA9IFNpU19HZXRSZWcoU0lTQ1IsIDB4NmYpOwogCQkJCXJlZyArPSAweDA4OwogCQkJfQogCQl9CkBAIC01MjkyLDEwICs1Mjk0LDEwIEBACiAJCXB0ciAgPSAoY29uc3QgdTggKikmYmlvc1sweDE0OF07CiAJfQogCWZvcihpID0gMCwgaiA9IDA7IGkgPCAyOyBpKyssIGogKz0gOCkgewotCQlvdXRTSVNJRFhSRUcoU0lTQ1IsIDB4ODAgKyBpLCBwdHJbaiArIHJlZ2JdKTsKKwkJU2lTX1NldFJlZyhTSVNDUiwgMHg4MCArIGksIHB0cltqICsgcmVnYl0pOwogCX0KIAotCWFuZFNJU0lEWFJFRyhTSVNDUiwgMHg4OSwgMHg4Zik7CisJU2lTX1NldFJlZ0FORChTSVNDUiwgMHg4OSwgMHg4Zik7CiAKIAlwdHIgID0gY3M0NWE7CiAJaWYoaXZpZGVvLT5oYXZlWEdJUk9NKSB7CkBAIC01MzA5LDkgKzUzMTEsOSBAQAogCQlpZihyZWdkICYgMHgwMSkgcmVnIHw9IDB4MDE7CiAJCWlmKHJlZ2QgJiAweDAyKSByZWcgfD0gMHgwMjsKIAkJcmVnZCA+Pj0gMjsKLQkJb3V0U0lTSURYUkVHKFNJU0NSLCAweDg5LCByZWcpOwotCQlpblNJU0lEWFJFRyhTSVNDUiwgMHg4OSwgcmVnKTsKLQkJaW5TSVNJRFhSRUcoU0lTQ1IsIDB4ODksIHJlZyk7CisJCVNpU19TZXRSZWcoU0lTQ1IsIDB4ODksIHJlZyk7CisJCXJlZyA9IFNpU19HZXRSZWcoU0lTQ1IsIDB4ODkpOworCQlyZWcgPSBTaVNfR2V0UmVnKFNJU0NSLCAweDg5KTsKIAkJcmVnICs9IDB4MTA7CiAJfQogCkBAIC01MzIyLDI3ICs1MzI0LDI3IEBACiAJCXYzID0gYmlvc1sweDEyMCArIHJlZ2JdOwogCQl2NCA9IGJpb3NbMHgxY2FdOwogCX0KLQlvdXRTSVNJRFhSRUcoU0lTQ1IsIDB4NDUsIHYxICYgMHgwZik7Ci0Jb3V0U0lTSURYUkVHKFNJU0NSLCAweDk5LCAodjEgPj4gNCkgJiAweDA3KTsKLQlvclNJU0lEWFJFRyhTSVNDUiwgMHg0MCwgdjEgJiAweDgwKTsKLQlvdXRTSVNJRFhSRUcoU0lTQ1IsIDB4NDEsIHYyKTsKKwlTaVNfU2V0UmVnKFNJU0NSLCAweDQ1LCB2MSAmIDB4MGYpOworCVNpU19TZXRSZWcoU0lTQ1IsIDB4OTksICh2MSA+PiA0KSAmIDB4MDcpOworCVNpU19TZXRSZWdPUihTSVNDUiwgMHg0MCwgdjEgJiAweDgwKTsKKwlTaVNfU2V0UmVnKFNJU0NSLCAweDQxLCB2Mik7CiAKIAlwdHIgID0gY3MxNzA7CiAJaWYoaXZpZGVvLT5oYXZlWEdJUk9NKSB7CiAJCXB0ciAgPSAoY29uc3QgdTggKikmYmlvc1sweDE3MF07CiAJfQogCWZvcihpID0gMCwgaiA9IDA7IGkgPCA3OyBpKyssIGogKz0gOCkgewotCQlvdXRTSVNJRFhSRUcoU0lTQ1IsIDB4OTAgKyBpLCBwdHJbaiArIHJlZ2JdKTsKKwkJU2lTX1NldFJlZyhTSVNDUiwgMHg5MCArIGksIHB0cltqICsgcmVnYl0pOwogCX0KIAotCW91dFNJU0lEWFJFRyhTSVNDUiwgMHg1OSwgdjMpOworCVNpU19TZXRSZWcoU0lTQ1IsIDB4NTksIHYzKTsKIAogCXB0ciAgPSBjczFhODsKIAlpZihpdmlkZW8tPmhhdmVYR0lST00pIHsKIAkJcHRyICA9IChjb25zdCB1OCAqKSZiaW9zWzB4MWE4XTsKIAl9CiAJZm9yKGkgPSAwLCBqID0gMDsgaSA8IDM7IGkrKywgaiArPSA4KSB7Ci0JCW91dFNJU0lEWFJFRyhTSVNDUiwgMHhjMyArIGksIHB0cltqICsgcmVnYl0pOworCQlTaVNfU2V0UmVnKFNJU0NSLCAweGMzICsgaSwgcHRyW2ogKyByZWdiXSk7CiAJfQogCiAJcHRyICA9IGNzMTAwOwpAQCAtNTM1MCwyNyArNTM1MiwyNyBAQAogCQlwdHIgID0gKGNvbnN0IHU4ICopJmJpb3NbMHgxMDBdOwogCX0KIAlmb3IoaSA9IDAsIGogPSAwOyBpIDwgMjsgaSsrLCBqICs9IDgpIHsKLQkJb3V0U0lTSURYUkVHKFNJU0NSLCAweDhhICsgaSwgcHRyW2ogKyByZWdiXSk7CisJCVNpU19TZXRSZWcoU0lTQ1IsIDB4OGEgKyBpLCBwdHJbaiArIHJlZ2JdKTsKIAl9CiAKLQlvdXRTSVNJRFhSRUcoU0lTQ1IsIDB4Y2YsIHY0KTsKKwlTaVNfU2V0UmVnKFNJU0NSLCAweGNmLCB2NCk7CiAKLQlvdXRTSVNJRFhSRUcoU0lTQ1IsIDB4ODMsIDB4MDkpOwotCW91dFNJU0lEWFJFRyhTSVNDUiwgMHg4NywgMHgwMCk7CisJU2lTX1NldFJlZyhTSVNDUiwgMHg4MywgMHgwOSk7CisJU2lTX1NldFJlZyhTSVNDUiwgMHg4NywgMHgwMCk7CiAKIAlpZihpdmlkZW8tPmNoaXAgPT0gWEdJXzQwKSB7CiAJCWlmKCAoaXZpZGVvLT5yZXZpc2lvbl9pZCA9PSAxKSB8fAogCQkgICAgKGl2aWRlby0+cmV2aXNpb25faWQgPT0gMikgKSB7Ci0JCQlvdXRTSVNJRFhSRUcoU0lTQ1IsIDB4OGMsIDB4ODcpOworCQkJU2lTX1NldFJlZyhTSVNDUiwgMHg4YywgMHg4Nyk7CiAJCX0KIAl9CiAKLQlvdXRTSVNJRFhSRUcoU0lTU1IsIDB4MTcsIDB4MDApOwotCW91dFNJU0lEWFJFRyhTSVNTUiwgMHgxYSwgMHg4Nyk7CisJU2lTX1NldFJlZyhTSVNTUiwgMHgxNywgMHgwMCk7CisJU2lTX1NldFJlZyhTSVNTUiwgMHgxYSwgMHg4Nyk7CiAKIAlpZihpdmlkZW8tPmNoaXAgPT0gWEdJXzIwKSB7Ci0JCW91dFNJU0lEWFJFRyhTSVNTUiwgMHgxNSwgMHgwMCk7Ci0JCW91dFNJU0lEWFJFRyhTSVNTUiwgMHgxYywgMHgwMCk7CisJCVNpU19TZXRSZWcoU0lTU1IsIDB4MTUsIDB4MDApOworCQlTaVNfU2V0UmVnKFNJU1NSLCAweDFjLCAweDAwKTsKIAl9CiAKIAlyYW10eXBlID0gMHgwMDsgdjEgPSAweDEwOwpAQCAtNTM4MCwxNiArNTM4MiwxNiBAQAogCX0KIAlpZighKHJhbXR5cGUgJiAweDgwKSkgewogCQlpZihpdmlkZW8tPmNoaXAgPT0gWEdJXzIwKSB7Ci0JCQlvdXRTSVNJRFhSRUcoU0lTQ1IsIDB4OTcsIHYxKTsKLQkJCWluU0lTSURYUkVHKFNJU0NSLCAweDk3LCByZWcpOworCQkJU2lTX1NldFJlZyhTSVNDUiwgMHg5NywgdjEpOworCQkJcmVnID0gU2lTX0dldFJlZyhTSVNDUiwgMHg5Nyk7CiAJCQlpZihyZWcgJiAweDEwKSB7CiAJCQkJcmFtdHlwZSA9IChyZWcgJiAweDAxKSA8PCAxOwogCQkJfQogCQl9IGVsc2UgewotCQkJaW5TSVNJRFhSRUcoU0lTU1IsIDB4MzksIHJlZyk7CisJCQlyZWcgPSBTaVNfR2V0UmVnKFNJU1NSLCAweDM5KTsKIAkJCXJhbXR5cGUgPSByZWcgJiAweDAyOwogCQkJaWYoIShyYW10eXBlKSkgewotCQkJCWluU0lTSURYUkVHKFNJU1NSLCAweDNhLCByZWcpOworCQkJCXJlZyA9IFNpU19HZXRSZWcoU0lTU1IsIDB4M2EpOwogCQkJCXJhbXR5cGUgPSAocmVnID4+IDEpICYgMHgwMTsKIAkJCX0KIAkJfQpAQCAtNTQxMCw1NSArNTQxMiw1NSBAQAogCQkJCXYyID0gYmlvc1tyZWdiICsgMHgxNjBdOwogCQkJCXYzID0gYmlvc1tyZWdiICsgMHgxNjhdOwogCQkJfQotCQkJb3V0U0lTSURYUkVHKFNJU0NSLCAweDgyLCB2MSk7Ci0JCQlvdXRTSVNJRFhSRUcoU0lTQ1IsIDB4ODUsIHYyKTsKLQkJCW91dFNJU0lEWFJFRyhTSVNDUiwgMHg4NiwgdjMpOworCQkJU2lTX1NldFJlZyhTSVNDUiwgMHg4MiwgdjEpOworCQkJU2lTX1NldFJlZyhTSVNDUiwgMHg4NSwgdjIpOworCQkJU2lTX1NldFJlZyhTSVNDUiwgMHg4NiwgdjMpOwogCQl9IGVsc2UgewotCQkJb3V0U0lTSURYUkVHKFNJU0NSLCAweDgyLCAweDg4KTsKLQkJCW91dFNJU0lEWFJFRyhTSVNDUiwgMHg4NiwgMHgwMCk7Ci0JCQlpblNJU0lEWFJFRyhTSVNDUiwgMHg4NiwgcmVnKTsKLQkJCW91dFNJU0lEWFJFRyhTSVNDUiwgMHg4NiwgMHg4OCk7Ci0JCQlpblNJU0lEWFJFRyhTSVNDUiwgMHg4NiwgcmVnKTsKLQkJCW91dFNJU0lEWFJFRyhTSVNDUiwgMHg4NiwgYmlvc1tyZWdiICsgMHgxNjhdKTsKLQkJCW91dFNJU0lEWFJFRyhTSVNDUiwgMHg4MiwgMHg3Nyk7Ci0JCQlvdXRTSVNJRFhSRUcoU0lTQ1IsIDB4ODUsIDB4MDApOwotCQkJaW5TSVNJRFhSRUcoU0lTQ1IsIDB4ODUsIHJlZyk7Ci0JCQlvdXRTSVNJRFhSRUcoU0lTQ1IsIDB4ODUsIDB4ODgpOwotCQkJaW5TSVNJRFhSRUcoU0lTQ1IsIDB4ODUsIHJlZyk7Ci0JCQlvdXRTSVNJRFhSRUcoU0lTQ1IsIDB4ODUsIGJpb3NbcmVnYiArIDB4MTYwXSk7Ci0JCQlvdXRTSVNJRFhSRUcoU0lTQ1IsIDB4ODIsIGJpb3NbcmVnYiArIDB4MTU4XSk7CisJCQlTaVNfU2V0UmVnKFNJU0NSLCAweDgyLCAweDg4KTsKKwkJCVNpU19TZXRSZWcoU0lTQ1IsIDB4ODYsIDB4MDApOworCQkJcmVnID0gU2lTX0dldFJlZyhTSVNDUiwgMHg4Nik7CisJCQlTaVNfU2V0UmVnKFNJU0NSLCAweDg2LCAweDg4KTsKKwkJCXJlZyA9IFNpU19HZXRSZWcoU0lTQ1IsIDB4ODYpOworCQkJU2lTX1NldFJlZyhTSVNDUiwgMHg4NiwgYmlvc1tyZWdiICsgMHgxNjhdKTsKKwkJCVNpU19TZXRSZWcoU0lTQ1IsIDB4ODIsIDB4NzcpOworCQkJU2lTX1NldFJlZyhTSVNDUiwgMHg4NSwgMHgwMCk7CisJCQlyZWcgPSBTaVNfR2V0UmVnKFNJU0NSLCAweDg1KTsKKwkJCVNpU19TZXRSZWcoU0lTQ1IsIDB4ODUsIDB4ODgpOworCQkJcmVnID0gU2lTX0dldFJlZyhTSVNDUiwgMHg4NSk7CisJCQlTaVNfU2V0UmVnKFNJU0NSLCAweDg1LCBiaW9zW3JlZ2IgKyAweDE2MF0pOworCQkJU2lTX1NldFJlZyhTSVNDUiwgMHg4MiwgYmlvc1tyZWdiICsgMHgxNThdKTsKIAkJfQogCQlpZihpdmlkZW8tPmNoaXAgPT0gWEdJXzQwKSB7Ci0JCQlvdXRTSVNJRFhSRUcoU0lTQ1IsIDB4OTcsIDB4MDApOworCQkJU2lTX1NldFJlZyhTSVNDUiwgMHg5NywgMHgwMCk7CiAJCX0KLQkJb3V0U0lTSURYUkVHKFNJU0NSLCAweDk4LCAweDAxKTsKLQkJb3V0U0lTSURYUkVHKFNJU0NSLCAweDlhLCAweDAyKTsKKwkJU2lTX1NldFJlZyhTSVNDUiwgMHg5OCwgMHgwMSk7CisJCVNpU19TZXRSZWcoU0lTQ1IsIDB4OWEsIDB4MDIpOwogCi0JCW91dFNJU0lEWFJFRyhTSVNTUiwgMHgxOCwgMHgwMSk7CisJCVNpU19TZXRSZWcoU0lTU1IsIDB4MTgsIDB4MDEpOwogCQlpZigoaXZpZGVvLT5jaGlwID09IFhHSV8yMCkgfHwKIAkJICAgKGl2aWRlby0+cmV2aXNpb25faWQgPT0gMikpIHsKLQkJCW91dFNJU0lEWFJFRyhTSVNTUiwgMHgxOSwgMHg0MCk7CisJCQlTaVNfU2V0UmVnKFNJU1NSLCAweDE5LCAweDQwKTsKIAkJfSBlbHNlIHsKLQkJCW91dFNJU0lEWFJFRyhTSVNTUiwgMHgxOSwgMHgyMCk7CisJCQlTaVNfU2V0UmVnKFNJU1NSLCAweDE5LCAweDIwKTsKIAkJfQotCQlvdXRTSVNJRFhSRUcoU0lTU1IsIDB4MTYsIDB4MDApOwotCQlvdXRTSVNJRFhSRUcoU0lTU1IsIDB4MTYsIDB4ODApOworCQlTaVNfU2V0UmVnKFNJU1NSLCAweDE2LCAweDAwKTsKKwkJU2lTX1NldFJlZyhTSVNTUiwgMHgxNiwgMHg4MCk7CiAJCWlmKChpdmlkZW8tPmNoaXAgPT0gWEdJXzIwKSB8fCAoYmlvc1sweDFjYl0gIT0gMHgwYykpIHsKIAkJCXNpc2ZiX3Bvc3RfeGdpX2RlbGF5KGl2aWRlbywgMHg0Myk7CiAJCQlzaXNmYl9wb3N0X3hnaV9kZWxheShpdmlkZW8sIDB4NDMpOwogCQkJc2lzZmJfcG9zdF94Z2lfZGVsYXkoaXZpZGVvLCAweDQzKTsKLQkJCW91dFNJU0lEWFJFRyhTSVNTUiwgMHgxOCwgMHgwMCk7CisJCQlTaVNfU2V0UmVnKFNJU1NSLCAweDE4LCAweDAwKTsKIAkJCWlmKChpdmlkZW8tPmNoaXAgPT0gWEdJXzIwKSB8fAogCQkJICAgKGl2aWRlby0+cmV2aXNpb25faWQgPT0gMikpIHsKLQkJCQlvdXRTSVNJRFhSRUcoU0lTU1IsIDB4MTksIDB4NDApOworCQkJCVNpU19TZXRSZWcoU0lTU1IsIDB4MTksIDB4NDApOwogCQkJfSBlbHNlIHsKLQkJCQlvdXRTSVNJRFhSRUcoU0lTU1IsIDB4MTksIDB4MjApOworCQkJCVNpU19TZXRSZWcoU0lTU1IsIDB4MTksIDB4MjApOwogCQkJfQogCQl9IGVsc2UgaWYoKGl2aWRlby0+Y2hpcCA9PSBYR0lfNDApICYmIChiaW9zWzB4MWNiXSA9PSAweDBjKSkgewotCQkJLyogb3V0U0lTSURYUkVHKFNJU1NSLCAweDE2LCAweDBjKTsgKi8gLyogPyAqLworCQkJLyogU2lTX1NldFJlZyhTSVNTUiwgMHgxNiwgMHgwYyk7ICovIC8qID8gKi8KIAkJfQotCQlvdXRTSVNJRFhSRUcoU0lTU1IsIDB4MTYsIDB4MDApOwotCQlvdXRTSVNJRFhSRUcoU0lTU1IsIDB4MTYsIDB4ODApOworCQlTaVNfU2V0UmVnKFNJU1NSLCAweDE2LCAweDAwKTsKKwkJU2lTX1NldFJlZyhTSVNTUiwgMHgxNiwgMHg4MCk7CiAJCXNpc2ZiX3Bvc3RfeGdpX2RlbGF5KGl2aWRlbywgNCk7CiAJCXYxID0gMHgzMTsgdjIgPSAweDAzOyB2MyA9IDB4ODM7IHY0ID0gMHgwMzsgdjUgPSAweDgzOwogCQlpZihpdmlkZW8tPmhhdmVYR0lST00pIHsKQEAgLTU0NjksNzQgKzU0NzEsNzQgQEAKIAkJCXY0ID0gYmlvc1tpbmRleCArIDJdOwogCQkJdjUgPSBiaW9zW2luZGV4ICsgM107CiAJCX0KLQkJb3V0U0lTSURYUkVHKFNJU1NSLCAweDE4LCB2MSk7Ci0JCW91dFNJU0lEWFJFRyhTSVNTUiwgMHgxOSwgKChpdmlkZW8tPmNoaXAgPT0gWEdJXzIwKSA/IDB4MDIgOiAweDAxKSk7Ci0JCW91dFNJU0lEWFJFRyhTSVNTUiwgMHgxNiwgdjIpOwotCQlvdXRTSVNJRFhSRUcoU0lTU1IsIDB4MTYsIHYzKTsKKwkJU2lTX1NldFJlZyhTSVNTUiwgMHgxOCwgdjEpOworCQlTaVNfU2V0UmVnKFNJU1NSLCAweDE5LCAoKGl2aWRlby0+Y2hpcCA9PSBYR0lfMjApID8gMHgwMiA6IDB4MDEpKTsKKwkJU2lTX1NldFJlZyhTSVNTUiwgMHgxNiwgdjIpOworCQlTaVNfU2V0UmVnKFNJU1NSLCAweDE2LCB2Myk7CiAJCXNpc2ZiX3Bvc3RfeGdpX2RlbGF5KGl2aWRlbywgMHg0Myk7Ci0JCW91dFNJU0lEWFJFRyhTSVNTUiwgMHgxYiwgMHgwMyk7CisJCVNpU19TZXRSZWcoU0lTU1IsIDB4MWIsIDB4MDMpOwogCQlzaXNmYl9wb3N0X3hnaV9kZWxheShpdmlkZW8sIDB4MjIpOwotCQlvdXRTSVNJRFhSRUcoU0lTU1IsIDB4MTgsIHYxKTsKLQkJb3V0U0lTSURYUkVHKFNJU1NSLCAweDE5LCAweDAwKTsKLQkJb3V0U0lTSURYUkVHKFNJU1NSLCAweDE2LCB2NCk7Ci0JCW91dFNJU0lEWFJFRyhTSVNTUiwgMHgxNiwgdjUpOwotCQlvdXRTSVNJRFhSRUcoU0lTU1IsIDB4MWIsIDB4MDApOworCQlTaVNfU2V0UmVnKFNJU1NSLCAweDE4LCB2MSk7CisJCVNpU19TZXRSZWcoU0lTU1IsIDB4MTksIDB4MDApOworCQlTaVNfU2V0UmVnKFNJU1NSLCAweDE2LCB2NCk7CisJCVNpU19TZXRSZWcoU0lTU1IsIDB4MTYsIHY1KTsKKwkJU2lTX1NldFJlZyhTSVNTUiwgMHgxYiwgMHgwMCk7CiAJCWJyZWFrOwogCWNhc2UgMToKLQkJb3V0U0lTSURYUkVHKFNJU0NSLCAweDgyLCAweDc3KTsKLQkJb3V0U0lTSURYUkVHKFNJU0NSLCAweDg2LCAweDAwKTsKLQkJaW5TSVNJRFhSRUcoU0lTQ1IsIDB4ODYsIHJlZyk7Ci0JCW91dFNJU0lEWFJFRyhTSVNDUiwgMHg4NiwgMHg4OCk7Ci0JCWluU0lTSURYUkVHKFNJU0NSLCAweDg2LCByZWcpOworCQlTaVNfU2V0UmVnKFNJU0NSLCAweDgyLCAweDc3KTsKKwkJU2lTX1NldFJlZyhTSVNDUiwgMHg4NiwgMHgwMCk7CisJCXJlZyA9IFNpU19HZXRSZWcoU0lTQ1IsIDB4ODYpOworCQlTaVNfU2V0UmVnKFNJU0NSLCAweDg2LCAweDg4KTsKKwkJcmVnID0gU2lTX0dldFJlZyhTSVNDUiwgMHg4Nik7CiAJCXYxID0gY3MxNjhbcmVnYl07IHYyID0gY3MxNjBbcmVnYl07IHYzID0gY3MxNThbcmVnYl07CiAJCWlmKGl2aWRlby0+aGF2ZVhHSVJPTSkgewogCQkJdjEgPSBiaW9zW3JlZ2IgKyAweDE2OF07CiAJCQl2MiA9IGJpb3NbcmVnYiArIDB4MTYwXTsKIAkJCXYzID0gYmlvc1tyZWdiICsgMHgxNThdOwogCQl9Ci0JCW91dFNJU0lEWFJFRyhTSVNDUiwgMHg4NiwgdjEpOwotCQlvdXRTSVNJRFhSRUcoU0lTQ1IsIDB4ODIsIDB4NzcpOwotCQlvdXRTSVNJRFhSRUcoU0lTQ1IsIDB4ODUsIDB4MDApOwotCQlpblNJU0lEWFJFRyhTSVNDUiwgMHg4NSwgcmVnKTsKLQkJb3V0U0lTSURYUkVHKFNJU0NSLCAweDg1LCAweDg4KTsKLQkJaW5TSVNJRFhSRUcoU0lTQ1IsIDB4ODUsIHJlZyk7Ci0JCW91dFNJU0lEWFJFRyhTSVNDUiwgMHg4NSwgdjIpOwotCQlvdXRTSVNJRFhSRUcoU0lTQ1IsIDB4ODIsIHYzKTsKLQkJb3V0U0lTSURYUkVHKFNJU0NSLCAweDk4LCAweDAxKTsKLQkJb3V0U0lTSURYUkVHKFNJU0NSLCAweDlhLCAweDAyKTsKKwkJU2lTX1NldFJlZyhTSVNDUiwgMHg4NiwgdjEpOworCQlTaVNfU2V0UmVnKFNJU0NSLCAweDgyLCAweDc3KTsKKwkJU2lTX1NldFJlZyhTSVNDUiwgMHg4NSwgMHgwMCk7CisJCXJlZyA9IFNpU19HZXRSZWcoU0lTQ1IsIDB4ODUpOworCQlTaVNfU2V0UmVnKFNJU0NSLCAweDg1LCAweDg4KTsKKwkJcmVnID0gU2lTX0dldFJlZyhTSVNDUiwgMHg4NSk7CisJCVNpU19TZXRSZWcoU0lTQ1IsIDB4ODUsIHYyKTsKKwkJU2lTX1NldFJlZyhTSVNDUiwgMHg4MiwgdjMpOworCQlTaVNfU2V0UmVnKFNJU0NSLCAweDk4LCAweDAxKTsKKwkJU2lTX1NldFJlZyhTSVNDUiwgMHg5YSwgMHgwMik7CiAKLQkJb3V0U0lTSURYUkVHKFNJU1NSLCAweDI4LCAweDY0KTsKLQkJb3V0U0lTSURYUkVHKFNJU1NSLCAweDI5LCAweDYzKTsKKwkJU2lTX1NldFJlZyhTSVNTUiwgMHgyOCwgMHg2NCk7CisJCVNpU19TZXRSZWcoU0lTU1IsIDB4MjksIDB4NjMpOwogCQlzaXNmYl9wb3N0X3hnaV9kZWxheShpdmlkZW8sIDE1KTsKLQkJb3V0U0lTSURYUkVHKFNJU1NSLCAweDE4LCAweDAwKTsKLQkJb3V0U0lTSURYUkVHKFNJU1NSLCAweDE5LCAweDIwKTsKLQkJb3V0U0lTSURYUkVHKFNJU1NSLCAweDE2LCAweDAwKTsKLQkJb3V0U0lTSURYUkVHKFNJU1NSLCAweDE2LCAweDgwKTsKLQkJb3V0U0lTSURYUkVHKFNJU1NSLCAweDE4LCAweGM1KTsKLQkJb3V0U0lTSURYUkVHKFNJU1NSLCAweDE5LCAweDIzKTsKLQkJb3V0U0lTSURYUkVHKFNJU1NSLCAweDE2LCAweDAwKTsKLQkJb3V0U0lTSURYUkVHKFNJU1NSLCAweDE2LCAweDgwKTsKKwkJU2lTX1NldFJlZyhTSVNTUiwgMHgxOCwgMHgwMCk7CisJCVNpU19TZXRSZWcoU0lTU1IsIDB4MTksIDB4MjApOworCQlTaVNfU2V0UmVnKFNJU1NSLCAweDE2LCAweDAwKTsKKwkJU2lTX1NldFJlZyhTSVNTUiwgMHgxNiwgMHg4MCk7CisJCVNpU19TZXRSZWcoU0lTU1IsIDB4MTgsIDB4YzUpOworCQlTaVNfU2V0UmVnKFNJU1NSLCAweDE5LCAweDIzKTsKKwkJU2lTX1NldFJlZyhTSVNTUiwgMHgxNiwgMHgwMCk7CisJCVNpU19TZXRSZWcoU0lTU1IsIDB4MTYsIDB4ODApOwogCQlzaXNmYl9wb3N0X3hnaV9kZWxheShpdmlkZW8sIDEpOwotCQlvdXRTSVNJRFhSRUcoU0lTQ1IsIDB4OTcsMHgxMSk7CisJCVNpU19TZXRSZWcoU0lTQ1IsIDB4OTcsIDB4MTEpOwogCQlzaXNmYl9wb3N0X3hnaV9zZXRjbG9ja3MoaXZpZGVvLCByZWdiKTsKIAkJc2lzZmJfcG9zdF94Z2lfZGVsYXkoaXZpZGVvLCAweDQ2KTsKLQkJb3V0U0lTSURYUkVHKFNJU1NSLCAweDE4LCAweGM1KTsKLQkJb3V0U0lTSURYUkVHKFNJU1NSLCAweDE5LCAweDIzKTsKLQkJb3V0U0lTSURYUkVHKFNJU1NSLCAweDE2LCAweDAwKTsKLQkJb3V0U0lTSURYUkVHKFNJU1NSLCAweDE2LCAweDgwKTsKKwkJU2lTX1NldFJlZyhTSVNTUiwgMHgxOCwgMHhjNSk7CisJCVNpU19TZXRSZWcoU0lTU1IsIDB4MTksIDB4MjMpOworCQlTaVNfU2V0UmVnKFNJU1NSLCAweDE2LCAweDAwKTsKKwkJU2lTX1NldFJlZyhTSVNTUiwgMHgxNiwgMHg4MCk7CiAJCXNpc2ZiX3Bvc3RfeGdpX2RlbGF5KGl2aWRlbywgMSk7Ci0JCW91dFNJU0lEWFJFRyhTSVNTUiwgMHgxYiwgMHgwNCk7CisJCVNpU19TZXRSZWcoU0lTU1IsIDB4MWIsIDB4MDQpOwogCQlzaXNmYl9wb3N0X3hnaV9kZWxheShpdmlkZW8sIDEpOwotCQlvdXRTSVNJRFhSRUcoU0lTU1IsIDB4MWIsIDB4MDApOworCQlTaVNfU2V0UmVnKFNJU1NSLCAweDFiLCAweDAwKTsKIAkJc2lzZmJfcG9zdF94Z2lfZGVsYXkoaXZpZGVvLCAxKTsKIAkJdjEgPSAweDMxOwogCQlpZihpdmlkZW8tPmhhdmVYR0lST00pIHsKIAkJCXYxID0gYmlvc1sweGYwXTsKIAkJfQotCQlvdXRTSVNJRFhSRUcoU0lTU1IsIDB4MTgsIHYxKTsKLQkJb3V0U0lTSURYUkVHKFNJU1NSLCAweDE5LCAweDA2KTsKLQkJb3V0U0lTSURYUkVHKFNJU1NSLCAweDE2LCAweDA0KTsKLQkJb3V0U0lTSURYUkVHKFNJU1NSLCAweDE2LCAweDg0KTsKKwkJU2lTX1NldFJlZyhTSVNTUiwgMHgxOCwgdjEpOworCQlTaVNfU2V0UmVnKFNJU1NSLCAweDE5LCAweDA2KTsKKwkJU2lTX1NldFJlZyhTSVNTUiwgMHgxNiwgMHgwNCk7CisJCVNpU19TZXRSZWcoU0lTU1IsIDB4MTYsIDB4ODQpOwogCQlzaXNmYl9wb3N0X3hnaV9kZWxheShpdmlkZW8sIDEpOwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtNTU0NCw4NSArNTU0Niw4NSBAQAogCQlpZigoaXZpZGVvLT5jaGlwID09IFhHSV80MCkgJiYKIAkJICAgKChpdmlkZW8tPnJldmlzaW9uX2lkID09IDEpIHx8CiAJCSAgICAoaXZpZGVvLT5yZXZpc2lvbl9pZCA9PSAyKSkpIHsKLQkJCW91dFNJU0lEWFJFRyhTSVNDUiwgMHg4MiwgYmlvc1tyZWdiICsgMHgxNThdKTsKLQkJCW91dFNJU0lEWFJFRyhTSVNDUiwgMHg4NSwgYmlvc1tyZWdiICsgMHgxNjBdKTsKLQkJCW91dFNJU0lEWFJFRyhTSVNDUiwgMHg4NiwgYmlvc1tyZWdiICsgMHgxNjhdKTsKKwkJCVNpU19TZXRSZWcoU0lTQ1IsIDB4ODIsIGJpb3NbcmVnYiArIDB4MTU4XSk7CisJCQlTaVNfU2V0UmVnKFNJU0NSLCAweDg1LCBiaW9zW3JlZ2IgKyAweDE2MF0pOworCQkJU2lTX1NldFJlZyhTSVNDUiwgMHg4NiwgYmlvc1tyZWdiICsgMHgxNjhdKTsKIAkJfSBlbHNlIHsKLQkJCW91dFNJU0lEWFJFRyhTSVNDUiwgMHg4MiwgMHg4OCk7Ci0JCQlvdXRTSVNJRFhSRUcoU0lTQ1IsIDB4ODYsIDB4MDApOwotCQkJaW5TSVNJRFhSRUcoU0lTQ1IsIDB4ODYsIHJlZyk7Ci0JCQlvdXRTSVNJRFhSRUcoU0lTQ1IsIDB4ODYsIDB4ODgpOwotCQkJb3V0U0lTSURYUkVHKFNJU0NSLCAweDgyLCAweDc3KTsKLQkJCW91dFNJU0lEWFJFRyhTSVNDUiwgMHg4NSwgMHgwMCk7Ci0JCQlpblNJU0lEWFJFRyhTSVNDUiwgMHg4NSwgcmVnKTsKLQkJCW91dFNJU0lEWFJFRyhTSVNDUiwgMHg4NSwgMHg4OCk7Ci0JCQlpblNJU0lEWFJFRyhTSVNDUiwgMHg4NSwgcmVnKTsKKwkJCVNpU19TZXRSZWcoU0lTQ1IsIDB4ODIsIDB4ODgpOworCQkJU2lTX1NldFJlZyhTSVNDUiwgMHg4NiwgMHgwMCk7CisJCQlyZWcgPSBTaVNfR2V0UmVnKFNJU0NSLCAweDg2KTsKKwkJCVNpU19TZXRSZWcoU0lTQ1IsIDB4ODYsIDB4ODgpOworCQkJU2lTX1NldFJlZyhTSVNDUiwgMHg4MiwgMHg3Nyk7CisJCQlTaVNfU2V0UmVnKFNJU0NSLCAweDg1LCAweDAwKTsKKwkJCXJlZyA9IFNpU19HZXRSZWcoU0lTQ1IsIDB4ODUpOworCQkJU2lTX1NldFJlZyhTSVNDUiwgMHg4NSwgMHg4OCk7CisJCQlyZWcgPSBTaVNfR2V0UmVnKFNJU0NSLCAweDg1KTsKIAkJCXYxID0gY3MxNjBbcmVnYl07IHYyID0gY3MxNThbcmVnYl07CiAJCQlpZihpdmlkZW8tPmhhdmVYR0lST00pIHsKIAkJCQl2MSA9IGJpb3NbcmVnYiArIDB4MTYwXTsKIAkJCQl2MiA9IGJpb3NbcmVnYiArIDB4MTU4XTsKIAkJCX0KLQkJCW91dFNJU0lEWFJFRyhTSVNDUiwgMHg4NSwgdjEpOwotCQkJb3V0U0lTSURYUkVHKFNJU0NSLCAweDgyLCB2Mik7CisJCQlTaVNfU2V0UmVnKFNJU0NSLCAweDg1LCB2MSk7CisJCQlTaVNfU2V0UmVnKFNJU0NSLCAweDgyLCB2Mik7CiAJCX0KIAkJaWYoaXZpZGVvLT5jaGlwID09IFhHSV80MCkgewotCQkJb3V0U0lTSURYUkVHKFNJU0NSLCAweDk3LCAweDExKTsKKwkJCVNpU19TZXRSZWcoU0lTQ1IsIDB4OTcsIDB4MTEpOwogCQl9CiAJCWlmKChpdmlkZW8tPmNoaXAgPT0gWEdJXzQwKSAmJiAoaXZpZGVvLT5yZXZpc2lvbl9pZCA9PSAyKSkgewotCQkJb3V0U0lTSURYUkVHKFNJU0NSLCAweDk4LCAweDAxKTsKKwkJCVNpU19TZXRSZWcoU0lTQ1IsIDB4OTgsIDB4MDEpOwogCQl9IGVsc2UgewotCQkJb3V0U0lTSURYUkVHKFNJU0NSLCAweDk4LCAweDAzKTsKKwkJCVNpU19TZXRSZWcoU0lTQ1IsIDB4OTgsIDB4MDMpOwogCQl9Ci0JCW91dFNJU0lEWFJFRyhTSVNDUiwgMHg5YSwgMHgwMik7CisJCVNpU19TZXRSZWcoU0lTQ1IsIDB4OWEsIDB4MDIpOwogCiAJCWlmKGl2aWRlby0+Y2hpcCA9PSBYR0lfNDApIHsKLQkJCW91dFNJU0lEWFJFRyhTSVNTUiwgMHgxOCwgMHgwMSk7CisJCQlTaVNfU2V0UmVnKFNJU1NSLCAweDE4LCAweDAxKTsKIAkJfSBlbHNlIHsKLQkJCW91dFNJU0lEWFJFRyhTSVNTUiwgMHgxOCwgMHgwMCk7CisJCQlTaVNfU2V0UmVnKFNJU1NSLCAweDE4LCAweDAwKTsKIAkJfQotCQlvdXRTSVNJRFhSRUcoU0lTU1IsIDB4MTksIDB4NDApOwotCQlvdXRTSVNJRFhSRUcoU0lTU1IsIDB4MTYsIDB4MDApOwotCQlvdXRTSVNJRFhSRUcoU0lTU1IsIDB4MTYsIDB4ODApOworCQlTaVNfU2V0UmVnKFNJU1NSLCAweDE5LCAweDQwKTsKKwkJU2lTX1NldFJlZyhTSVNTUiwgMHgxNiwgMHgwMCk7CisJCVNpU19TZXRSZWcoU0lTU1IsIDB4MTYsIDB4ODApOwogCQlpZigoaXZpZGVvLT5jaGlwID09IFhHSV80MCkgJiYgKGJpb3NbMHgxY2JdICE9IDB4MGMpKSB7CiAJCQlzaXNmYl9wb3N0X3hnaV9kZWxheShpdmlkZW8sIDB4NDMpOwogCQkJc2lzZmJfcG9zdF94Z2lfZGVsYXkoaXZpZGVvLCAweDQzKTsKIAkJCXNpc2ZiX3Bvc3RfeGdpX2RlbGF5KGl2aWRlbywgMHg0Myk7Ci0JCQlvdXRTSVNJRFhSRUcoU0lTU1IsIDB4MTgsIDB4MDApOwotCQkJb3V0U0lTSURYUkVHKFNJU1NSLCAweDE5LCAweDQwKTsKLQkJCW91dFNJU0lEWFJFRyhTSVNTUiwgMHgxNiwgMHgwMCk7Ci0JCQlvdXRTSVNJRFhSRUcoU0lTU1IsIDB4MTYsIDB4ODApOworCQkJU2lTX1NldFJlZyhTSVNTUiwgMHgxOCwgMHgwMCk7CisJCQlTaVNfU2V0UmVnKFNJU1NSLCAweDE5LCAweDQwKTsKKwkJCVNpU19TZXRSZWcoU0lTU1IsIDB4MTYsIDB4MDApOworCQkJU2lTX1NldFJlZyhTSVNTUiwgMHgxNiwgMHg4MCk7CiAJCX0KIAkJc2lzZmJfcG9zdF94Z2lfZGVsYXkoaXZpZGVvLCA0KTsKIAkJdjEgPSAweDMxOwogCQlpZihpdmlkZW8tPmhhdmVYR0lST00pIHsKIAkJCXYxID0gYmlvc1sweGYwXTsKIAkJfQotCQlvdXRTSVNJRFhSRUcoU0lTU1IsIDB4MTgsIHYxKTsKLQkJb3V0U0lTSURYUkVHKFNJU1NSLCAweDE5LCAweDAxKTsKKwkJU2lTX1NldFJlZyhTSVNTUiwgMHgxOCwgdjEpOworCQlTaVNfU2V0UmVnKFNJU1NSLCAweDE5LCAweDAxKTsKIAkJaWYoaXZpZGVvLT5jaGlwID09IFhHSV80MCkgewotCQkJb3V0U0lTSURYUkVHKFNJU1NSLCAweDE2LCBiaW9zWzB4NTNlXSk7Ci0JCQlvdXRTSVNJRFhSRUcoU0lTU1IsIDB4MTYsIGJpb3NbMHg1M2ZdKTsKKwkJCVNpU19TZXRSZWcoU0lTU1IsIDB4MTYsIGJpb3NbMHg1M2VdKTsKKwkJCVNpU19TZXRSZWcoU0lTU1IsIDB4MTYsIGJpb3NbMHg1M2ZdKTsKIAkJfSBlbHNlIHsKLQkJCW91dFNJU0lEWFJFRyhTSVNTUiwgMHgxNiwgMHgwNSk7Ci0JCQlvdXRTSVNJRFhSRUcoU0lTU1IsIDB4MTYsIDB4ODUpOworCQkJU2lTX1NldFJlZyhTSVNTUiwgMHgxNiwgMHgwNSk7CisJCQlTaVNfU2V0UmVnKFNJU1NSLCAweDE2LCAweDg1KTsKIAkJfQogCQlzaXNmYl9wb3N0X3hnaV9kZWxheShpdmlkZW8sIDB4NDMpOwogCQlpZihpdmlkZW8tPmNoaXAgPT0gWEdJXzQwKSB7Ci0JCQlvdXRTSVNJRFhSRUcoU0lTU1IsIDB4MWIsIDB4MDEpOworCQkJU2lTX1NldFJlZyhTSVNTUiwgMHgxYiwgMHgwMSk7CiAJCX0gZWxzZSB7Ci0JCQlvdXRTSVNJRFhSRUcoU0lTU1IsIDB4MWIsIDB4MDMpOworCQkJU2lTX1NldFJlZyhTSVNTUiwgMHgxYiwgMHgwMyk7CiAJCX0KIAkJc2lzZmJfcG9zdF94Z2lfZGVsYXkoaXZpZGVvLCAweDIyKTsKLQkJb3V0U0lTSURYUkVHKFNJU1NSLCAweDE4LCB2MSk7Ci0JCW91dFNJU0lEWFJFRyhTSVNTUiwgMHgxOSwgMHgwMCk7CisJCVNpU19TZXRSZWcoU0lTU1IsIDB4MTgsIHYxKTsKKwkJU2lTX1NldFJlZyhTSVNTUiwgMHgxOSwgMHgwMCk7CiAJCWlmKGl2aWRlby0+Y2hpcCA9PSBYR0lfNDApIHsKLQkJCW91dFNJU0lEWFJFRyhTSVNTUiwgMHgxNiwgYmlvc1sweDU0MF0pOwotCQkJb3V0U0lTSURYUkVHKFNJU1NSLCAweDE2LCBiaW9zWzB4NTQxXSk7CisJCQlTaVNfU2V0UmVnKFNJU1NSLCAweDE2LCBiaW9zWzB4NTQwXSk7CisJCQlTaVNfU2V0UmVnKFNJU1NSLCAweDE2LCBiaW9zWzB4NTQxXSk7CiAJCX0gZWxzZSB7Ci0JCQlvdXRTSVNJRFhSRUcoU0lTU1IsIDB4MTYsIDB4MDUpOwotCQkJb3V0U0lTSURYUkVHKFNJU1NSLCAweDE2LCAweDg1KTsKKwkJCVNpU19TZXRSZWcoU0lTU1IsIDB4MTYsIDB4MDUpOworCQkJU2lTX1NldFJlZyhTSVNTUiwgMHgxNiwgMHg4NSk7CiAJCX0KLQkJb3V0U0lTSURYUkVHKFNJU1NSLCAweDFiLCAweDAwKTsKKwkJU2lTX1NldFJlZyhTSVNTUiwgMHgxYiwgMHgwMCk7CiAJfQogCiAJcmVnYiA9IDA7CS8qICEgKi8KQEAgLTU2MzAsNyArNTYzMiw3IEBACiAJaWYoaXZpZGVvLT5oYXZlWEdJUk9NKSB7CiAJCXYxID0gYmlvc1sweDExMCArIHJlZ2JdOwogCX0KLQlvdXRTSVNJRFhSRUcoU0lTU1IsIDB4MWIsIHYxKTsKKwlTaVNfU2V0UmVnKFNJU1NSLCAweDFiLCB2MSk7CiAKIAkvKiBSQU0gc2l6ZSAqLwogCXYxID0gMHgwMDsgdjIgPSAweDAwOwpAQCAtNTY0Miw4ICs1NjQ0LDggQEAKIAlyZWdkID0gMSA8PCByZWdiOwogCWlmKCh2MSAmIDB4NDApICYmICh2MiAmIHJlZ2QpICYmIGl2aWRlby0+aGF2ZVhHSVJPTSkgewogCi0JCW91dFNJU0lEWFJFRyhTSVNTUiwgMHgxMywgYmlvc1tyZWdiICsgMHhlMF0pOwotCQlvdXRTSVNJRFhSRUcoU0lTU1IsIDB4MTQsIGJpb3NbcmVnYiArIDB4ZTAgKyA4XSk7CisJCVNpU19TZXRSZWcoU0lTU1IsIDB4MTMsIGJpb3NbcmVnYiArIDB4ZTBdKTsKKwkJU2lTX1NldFJlZyhTSVNTUiwgMHgxNCwgYmlvc1tyZWdiICsgMHhlMCArIDhdKTsKIAogCX0gZWxzZSB7CiAKQEAgLTU2NTUsMjQgKzU2NTcsMjQgQEAKIAkJaXZpZGVvLT5TaVNfUHIuVmlkZW9NZW1vcnlTaXplID0gOCA8PCAyMDsKIAkJU2lTU2V0TW9kZSgmaXZpZGVvLT5TaVNfUHIsIDB4MmUgfCAweDgwKTsKIAotCQlvdXRTSVNJRFhSRUcoU0lTU1IsIDB4MDUsIDB4ODYpOworCQlTaVNfU2V0UmVnKFNJU1NSLCAweDA1LCAweDg2KTsKIAogCQkvKiBEaXNhYmxlIHJlYWQtY2FjaGUgKi8KLQkJYW5kU0lTSURYUkVHKFNJU1NSLCAweDIxLCAweGRmKTsKKwkJU2lTX1NldFJlZ0FORChTSVNTUiwgMHgyMSwgMHhkZik7CiAJCXNpc2ZiX3Bvc3RfeGdpX3JhbXNpemUoaXZpZGVvKTsKIAkJLyogRW5hYmxlIHJlYWQtY2FjaGUgKi8KLQkJb3JTSVNJRFhSRUcoU0lTU1IsIDB4MjEsIDB4MjApOworCQlTaVNfU2V0UmVnT1IoU0lTU1IsIDB4MjEsIDB4MjApOwogCiAJfQogCiAjaWYgMAogCXByaW50ayhLRVJOX0RFQlVHICItLS0tLS0tLS0tLS0tLS0tLVxuIik7CiAJZm9yKGkgPSAwOyBpIDwgMHhmZjsgaSsrKSB7Ci0JCWluU0lTSURYUkVHKFNJU0NSLCBpLCByZWcpOworCQlyZWcgPSBTaVNfR2V0UmVnKFNJU0NSLCBpKTsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIkNSJTAyeCgleCkgPSAweCUwMnhcbiIsIGksIFNJU0NSLCByZWcpOwogCX0KIAlmb3IoaSA9IDA7IGkgPCAweDQwOyBpKyspIHsKLQkJaW5TSVNJRFhSRUcoU0lTU1IsIGksIHJlZyk7CisJCXJlZyA9IFNpU19HZXRSZWcoU0lTU1IsIGkpOwogCQlwcmludGsoS0VSTl9ERUJVRyAiU1IlMDJ4KCV4KSA9IDB4JTAyeFxuIiwgaSwgU0lTU1IsIHJlZyk7CiAJfQogCXByaW50ayhLRVJOX0RFQlVHICItLS0tLS0tLS0tLS0tLS0tLVxuIik7CkBAIC01NjgwLDEzICs1NjgyLDEzIEBACiAKIAkvKiBTZW5zZSBDUlQxICovCiAJaWYoaXZpZGVvLT5jaGlwID09IFhHSV8yMCkgewotCQlvclNJU0lEWFJFRyhTSVNDUiwgMHgzMiwgMHgyMCk7CisJCVNpU19TZXRSZWdPUihTSVNDUiwgMHgzMiwgMHgyMCk7CiAJfSBlbHNlIHsKLQkJaW5TSVNJRFhSRUcoU0lTUEFSVDQsIDB4MDAsIHJlZyk7CisJCXJlZyA9IFNpU19HZXRSZWcoU0lTUEFSVDQsIDB4MDApOwogCQlpZigocmVnID09IDEpIHx8IChyZWcgPT0gMikpIHsKIAkJCXNpc2ZiX3NlbnNlX2NydDEoaXZpZGVvKTsKIAkJfSBlbHNlIHsKLQkJCW9yU0lTSURYUkVHKFNJU0NSLCAweDMyLCAweDIwKTsKKwkJCVNpU19TZXRSZWdPUihTSVNDUiwgMHgzMiwgMHgyMCk7CiAJCX0KIAl9CiAKQEAgLTU2OTcsMjAgKzU2OTksMjAgQEAKIAlpdmlkZW8tPmN1ckZTVE4gPSBpdmlkZW8tPmN1ckRTVE4gPSAwOwogCVNpU1NldE1vZGUoJml2aWRlby0+U2lTX1ByLCAweDJlIHwgMHg4MCk7CiAKLQlvdXRTSVNJRFhSRUcoU0lTU1IsIDB4MDUsIDB4ODYpOworCVNpU19TZXRSZWcoU0lTU1IsIDB4MDUsIDB4ODYpOwogCiAJLyogRGlzcGxheSBvZmYgKi8KLQlvclNJU0lEWFJFRyhTSVNTUiwgMHgwMSwgMHgyMCk7CisJU2lTX1NldFJlZ09SKFNJU1NSLCAweDAxLCAweDIwKTsKIAogCS8qIFNhdmUgbW9kZSBudW1iZXIgaW4gQ1IzNCAqLwotCW91dFNJU0lEWFJFRyhTSVNDUiwgMHgzNCwgMHgyZSk7CisJU2lTX1NldFJlZyhTSVNDUiwgMHgzNCwgMHgyZSk7CiAKIAkvKiBMZXQgZXZlcnlvbmUga25vdyB3aGF0IHRoZSBjdXJyZW50IG1vZGUgaXMgKi8KIAlpdmlkZW8tPm1vZGVwcmVjaGFuZ2UgPSAweDJlOwogCiAJaWYoaXZpZGVvLT5jaGlwID09IFhHSV80MCkgewotCQlpblNJU0lEWFJFRyhTSVNDUiwgMHhjYSwgcmVnKTsKLQkJaW5TSVNJRFhSRUcoU0lTQ1IsIDB4Y2MsIHYxKTsKKwkJcmVnID0gU2lTX0dldFJlZyhTSVNDUiwgMHhjYSk7CisJCXYxID0gU2lTX0dldFJlZyhTSVNDUiwgMHhjYyk7CiAJCWlmKChyZWcgJiAweDEwKSAmJiAoISh2MSAmIDB4MDQpKSkgewogCQkJcHJpbnRrKEtFUk5fRVJSCiAJCQkJInNpc2ZiOiBQbGVhc2UgY29ubmVjdCBwb3dlciB0byB0aGUgY2FyZC5cbiIpOwpAQCAtNTk1Myw3ICs1OTU1LDcgQEAKIAl9CiAjZW5kaWYKIAotCW91dFNJU0lEWFJFRyhTSVNTUiwgMHgwNSwgMHg4Nik7CisJU2lTX1NldFJlZyhTSVNTUiwgMHgwNSwgMHg4Nik7CiAKIAlpZiggKCFpdmlkZW8tPnNpc3ZnYV9lbmFibGVkKQogI2lmICFkZWZpbmVkKF9faTM4Nl9fKSAmJiAhZGVmaW5lZChfX3g4Nl82NF9fKQpAQCAtNTk2MSwxMyArNTk2MywxMyBAQAogI2VuZGlmCiAJCQkJCQkgICApIHsKIAkJZm9yKGkgPSAweDMwOyBpIDw9IDB4M2Y7IGkrKykgewotCQkJb3V0U0lTSURYUkVHKFNJU0NSLCBpLCAweDAwKTsKKwkJCVNpU19TZXRSZWcoU0lTQ1IsIGksIDB4MDApOwogCQl9CiAJfQogCiAJLyogRmluZCBvdXQgYWJvdXQgY3VycmVudCB2aWRlbyBtb2RlICovCiAJaXZpZGVvLT5tb2RlcHJlY2hhbmdlID0gMHgwMzsKLQlpblNJU0lEWFJFRyhTSVNDUiwgMHgzNCwgcmVnKTsKKwlyZWcgPSBTaVNfR2V0UmVnKFNJU0NSLCAweDM0KTsKIAlpZihyZWcgJiAweDdmKSB7CiAJCWl2aWRlby0+bW9kZXByZWNoYW5nZSA9IHJlZyAmIDB4N2Y7CiAJfSBlbHNlIGlmKGl2aWRlby0+c2lzdmdhX2VuYWJsZWQpIHsKQEAgLTYwNjQsOSArNjA2Niw5IEBACiAJaWYoKGl2aWRlby0+c2lzZmJfbW9kZV9pZHggPCAwKSB8fAogCSAgICgoc2lzYmlvc19tb2RlW2l2aWRlby0+c2lzZmJfbW9kZV9pZHhdLm1vZGVfbm9baXZpZGVvLT5tbmldKSAhPSAweEZGKSkgewogCQkvKiBFbmFibGUgUENJX0xJTkVBUl9BRERSRVNTSU5HIGFuZCBNTUlPX0VOQUJMRSAgKi8KLQkJb3JTSVNJRFhSRUcoU0lTU1IsIElORF9TSVNfUENJX0FERFJFU1NfU0VULCAoU0lTX1BDSV9BRERSX0VOQUJMRSB8IFNJU19NRU1fTUFQX0lPX0VOQUJMRSkpOworCQlTaVNfU2V0UmVnT1IoU0lTU1IsIElORF9TSVNfUENJX0FERFJFU1NfU0VULCAoU0lTX1BDSV9BRERSX0VOQUJMRSB8IFNJU19NRU1fTUFQX0lPX0VOQUJMRSkpOwogCQkvKiBFbmFibGUgMkQgYWNjZWxlcmF0b3IgZW5naW5lICovCi0JCW9yU0lTSURYUkVHKFNJU1NSLCBJTkRfU0lTX01PRFVMRV9FTkFCTEUsIFNJU19FTkFCTEVfMkQpOworCQlTaVNfU2V0UmVnT1IoU0lTU1IsIElORF9TSVNfTU9EVUxFX0VOQUJMRSwgU0lTX0VOQUJMRV8yRCk7CiAJfQogCiAJaWYoc2lzZmJfcGRjICE9IDB4ZmYpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdWRsZmIuYyBiL2RyaXZlcnMvdmlkZW8vdWRsZmIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjA1ODlhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby91ZGxmYi5jCkBAIC0wLDAgKzEsMTg3OSBAQAorLyoKKyAqIHVkbGZiLmMgLS0gRnJhbWVidWZmZXIgZHJpdmVyIGZvciBEaXNwbGF5TGluayBVU0IgY29udHJvbGxlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBSb2JlcnRvIERlIElvcmlzIDxyb2JlcnRvQHVuYml0Lml0PgorICogQ29weXJpZ2h0IChDKSAyMDA5IEpheWEgS3VtYXIgPGpheWFrdW1hci5sa21sQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBCZXJuaWUgVGhvbXBzb24gPGJlcm5pZUBwbHVnYWJsZS5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdjIuIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogTGF5b3V0IGlzIGJhc2VkIG9uIHNrZWxldG9uZmIgYnkgSmFtZXMgU2ltbW9ucyBhbmQgR2VlcnQgVXl0dGVyaG9ldmVuLAorICogdXNiLXNrZWxldG9uIGJ5IEdyZWdLSC4KKyAqCisgKiBEZXZpY2Utc3BlY2lmaWMgcG9ydGlvbnMgYmFzZWQgb24gaW5mb3JtYXRpb24gZnJvbSBEaXNwbGF5bGluaywgd2l0aCB3b3JrCisgKiBmcm9tIEZsb3JpYW4gRWNodGxlciwgSGVucmlrIEJqZXJyZWdhYXJkIFBlZGVyc2VuLCBhbmQgb3RoZXJzLgorICovCisKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDx2aWRlby91ZGxmYi5oPgorI2luY2x1ZGUgImVkaWQuaCIKKworc3RhdGljIHN0cnVjdCBmYl9maXhfc2NyZWVuaW5mbyBkbGZiX2ZpeCA9IHsKKwkuaWQgPSAgICAgICAgICAgInVkbGZiIiwKKwkudHlwZSA9ICAgICAgICAgRkJfVFlQRV9QQUNLRURfUElYRUxTLAorCS52aXN1YWwgPSAgICAgICBGQl9WSVNVQUxfVFJVRUNPTE9SLAorCS54cGFuc3RlcCA9ICAgICAwLAorCS55cGFuc3RlcCA9ICAgICAwLAorCS55d3JhcHN0ZXAgPSAgICAwLAorCS5hY2NlbCA9ICAgICAgICBGQl9BQ0NFTF9OT05FLAorfTsKKworc3RhdGljIGNvbnN0IHUzMiB1ZGxmYl9pbmZvX2ZsYWdzID0gRkJJTkZPX0RFRkFVTFQgfCBGQklORk9fUkVBRFNfRkFTVCB8CisJCUZCSU5GT19WSVJURkIgfAorCQlGQklORk9fSFdBQ0NFTF9JTUFHRUJMSVQgfCBGQklORk9fSFdBQ0NFTF9GSUxMUkVDVCB8CisJCUZCSU5GT19IV0FDQ0VMX0NPUFlBUkVBIHwgRkJJTkZPX01JU0NfQUxXQVlTX1NFVFBBUjsKKworLyoKKyAqIFRoZXJlIGFyZSBtYW55IERpc3BsYXlMaW5rLWJhc2VkIHByb2R1Y3RzLCBhbGwgd2l0aCB1bmlxdWUgUElEcy4gV2UgYXJlIGFibGUKKyAqIHRvIHN1cHBvcnQgYWxsIHZvbHVtZSBvbmVzIChjaXJjYSAyMDA5KSB3aXRoIGEgc2luZ2xlIGRyaXZlciwgc28gd2UgbWF0Y2gKKyAqIGdsb2JhbGx5IG9uIFZJRC4gVE9ETzogUHJvYmUoKSBuZWVkcyB0byBkZXRlY3Qgd2hlbiB3ZSBtaWdodCBiZSBydW5uaW5nCisgKiAiZnV0dXJlIiBjaGlwcywgYW5kIGJhaWwgb24gdGhvc2UsIHNvIGEgY29tcGF0aWJsZSBkcml2ZXIgY2FuIG1hdGNoLgorICovCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKKwl7LmlkVmVuZG9yID0gMHgxN2U5LCAubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX1ZFTkRPUix9LAorCXt9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBpZF90YWJsZSk7CisKKy8qIG1vZHVsZSBvcHRpb25zICovCitzdGF0aWMgaW50IGNvbnNvbGU7ICAgLyogT3B0aW9uYWxseSBhbGxvdyBmYmNvbiB0byBjb25zdW1lIGZpcnN0IGZyYW1lYnVmZmVyICovCitzdGF0aWMgaW50IGZiX2RlZmlvOyAgLyogT3B0aW9uYWxseSBlbmFibGUgZXhwZXJpbWVudGFsIGZiX2RlZmlvIG1tYXAgc3VwcG9ydCAqLworCisvKiBkbGZiIGtlZXBzIGEgbGlzdCBvZiB1cmJzIGZvciBlZmZpY2llbnQgYnVsayB0cmFuc2ZlcnMgKi8KK3N0YXRpYyB2b2lkIGRsZmJfdXJiX2NvbXBsZXRpb24oc3RydWN0IHVyYiAqdXJiKTsKK3N0YXRpYyBzdHJ1Y3QgdXJiICpkbGZiX2dldF91cmIoc3RydWN0IGRsZmJfZGF0YSAqZGV2KTsKK3N0YXRpYyBpbnQgZGxmYl9zdWJtaXRfdXJiKHN0cnVjdCBkbGZiX2RhdGEgKmRldiwgc3RydWN0IHVyYiAqIHVyYiwgc2l6ZV90IGxlbik7CitzdGF0aWMgaW50IGRsZmJfYWxsb2NfdXJiX2xpc3Qoc3RydWN0IGRsZmJfZGF0YSAqZGV2LCBpbnQgY291bnQsIHNpemVfdCBzaXplKTsKK3N0YXRpYyB2b2lkIGRsZmJfZnJlZV91cmJfbGlzdChzdHJ1Y3QgZGxmYl9kYXRhICpkZXYpOworCisvKgorICogQWxsIERpc3BsYXlMaW5rIGJ1bGsgb3BlcmF0aW9ucyBzdGFydCB3aXRoIDB4QUYsIGZvbGxvd2VkIGJ5IHNwZWNpZmljIGNvZGUKKyAqIEFsbCBvcGVyYXRpb25zIGFyZSB3cml0dGVuIHRvIGJ1ZmZlcnMgd2hpY2ggdGhlbiBsYXRlciBnZXQgc2VudCB0byBkZXZpY2UKKyAqLworc3RhdGljIGNoYXIgKmRsZmJfc2V0X3JlZ2lzdGVyKGNoYXIgKmJ1ZiwgdTggcmVnLCB1OCB2YWwpCit7CisJKmJ1ZisrID0gMHhBRjsKKwkqYnVmKysgPSAweDIwOworCSpidWYrKyA9IHJlZzsKKwkqYnVmKysgPSB2YWw7CisJcmV0dXJuIGJ1ZjsKK30KKworc3RhdGljIGNoYXIgKmRsZmJfdmlkcmVnX2xvY2soY2hhciAqYnVmKQoreworCXJldHVybiBkbGZiX3NldF9yZWdpc3RlcihidWYsIDB4RkYsIDB4MDApOworfQorCitzdGF0aWMgY2hhciAqZGxmYl92aWRyZWdfdW5sb2NrKGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gZGxmYl9zZXRfcmVnaXN0ZXIoYnVmLCAweEZGLCAweEZGKTsKK30KKworLyoKKyAqIE9uL09mZiBmb3IgZHJpdmluZyB0aGUgRGlzcGxheUxpbmsgZnJhbWVidWZmZXIgdG8gdGhlIGRpc3BsYXkKKyAqICAweDAwIEggYW5kIFYgc3luYyBvbgorICogIDB4MDEgSCBhbmQgViBzeW5jIG9mZiAoc2NyZWVuIGJsYW5rIGJ1dCBwb3dlcmVkKQorICogIDB4MDcgRFBNUyBwb3dlcmRvd24gKHJlcXVpcmVzIG1vZGVzZXQgdG8gY29tZSBiYWNrKQorICovCitzdGF0aWMgY2hhciAqZGxmYl9lbmFibGVfaHZzeW5jKGNoYXIgKmJ1ZiwgYm9vbCBlbmFibGUpCit7CisJaWYgKGVuYWJsZSkKKwkJcmV0dXJuIGRsZmJfc2V0X3JlZ2lzdGVyKGJ1ZiwgMHgxRiwgMHgwMCk7CisJZWxzZQorCQlyZXR1cm4gZGxmYl9zZXRfcmVnaXN0ZXIoYnVmLCAweDFGLCAweDA3KTsKK30KKworc3RhdGljIGNoYXIgKmRsZmJfc2V0X2NvbG9yX2RlcHRoKGNoYXIgKmJ1ZiwgdTggc2VsZWN0aW9uKQoreworCXJldHVybiBkbGZiX3NldF9yZWdpc3RlcihidWYsIDB4MDAsIHNlbGVjdGlvbik7Cit9CisKK3N0YXRpYyBjaGFyICpkbGZiX3NldF9iYXNlMTZicHAoY2hhciAqd3JwdHIsIHUzMiBiYXNlKQoreworCS8qIHRoZSBiYXNlIHBvaW50ZXIgaXMgMTYgYml0cyB3aWRlLCAweDIwIGlzIGhpIGJ5dGUuICovCisJd3JwdHIgPSBkbGZiX3NldF9yZWdpc3Rlcih3cnB0ciwgMHgyMCwgYmFzZSA+PiAxNik7CisJd3JwdHIgPSBkbGZiX3NldF9yZWdpc3Rlcih3cnB0ciwgMHgyMSwgYmFzZSA+PiA4KTsKKwlyZXR1cm4gZGxmYl9zZXRfcmVnaXN0ZXIod3JwdHIsIDB4MjIsIGJhc2UpOworfQorCisvKgorICogRGlzcGxheUxpbmsgSFcgaGFzIHNlcGFyYXRlIDE2YnBwIGFuZCA4YnBwIGZyYW1lYnVmZmVycy4KKyAqIEluIDI0YnBwIG1vZGVzLCB0aGUgbG93IDMyMyBSR0IgYml0cyBnbyBpbiB0aGUgOGJwcCBmcmFtZWJ1ZmZlcgorICovCitzdGF0aWMgY2hhciAqZGxmYl9zZXRfYmFzZThicHAoY2hhciAqd3JwdHIsIHUzMiBiYXNlKQoreworCXdycHRyID0gZGxmYl9zZXRfcmVnaXN0ZXIod3JwdHIsIDB4MjYsIGJhc2UgPj4gMTYpOworCXdycHRyID0gZGxmYl9zZXRfcmVnaXN0ZXIod3JwdHIsIDB4MjcsIGJhc2UgPj4gOCk7CisJcmV0dXJuIGRsZmJfc2V0X3JlZ2lzdGVyKHdycHRyLCAweDI4LCBiYXNlKTsKK30KKworc3RhdGljIGNoYXIgKmRsZmJfc2V0X3JlZ2lzdGVyXzE2KGNoYXIgKndycHRyLCB1OCByZWcsIHUxNiB2YWx1ZSkKK3sKKwl3cnB0ciA9IGRsZmJfc2V0X3JlZ2lzdGVyKHdycHRyLCByZWcsIHZhbHVlID4+IDgpOworCXJldHVybiBkbGZiX3NldF9yZWdpc3Rlcih3cnB0ciwgcmVnKzEsIHZhbHVlKTsKK30KKworLyoKKyAqIFRoaXMgaXMga2luZCBvZiB3ZWlyZCBiZWNhdXNlIHRoZSBjb250cm9sbGVyIHRha2VzIHNvbWUKKyAqIHJlZ2lzdGVyIHZhbHVlcyBpbiBhIGRpZmZlcmVudCBieXRlIG9yZGVyIHRoYW4gb3RoZXIgcmVnaXN0ZXJzLgorICovCitzdGF0aWMgY2hhciAqZGxmYl9zZXRfcmVnaXN0ZXJfMTZiZShjaGFyICp3cnB0ciwgdTggcmVnLCB1MTYgdmFsdWUpCit7CisJd3JwdHIgPSBkbGZiX3NldF9yZWdpc3Rlcih3cnB0ciwgcmVnLCB2YWx1ZSk7CisJcmV0dXJuIGRsZmJfc2V0X3JlZ2lzdGVyKHdycHRyLCByZWcrMSwgdmFsdWUgPj4gOCk7Cit9CisKKy8qCisgKiBMRlNSIGlzIGxpbmVhciBmZWVkYmFjayBzaGlmdCByZWdpc3Rlci4gVGhlIHJlYXNvbiB3ZSBoYXZlIHRoaXMgaXMKKyAqIGJlY2F1c2UgdGhlIGRpc3BsYXkgY29udHJvbGxlciBuZWVkcyB0byBtaW5pbWl6ZSB0aGUgY2xvY2sgZGVwdGggb2YKKyAqIHZhcmlvdXMgY291bnRlcnMgdXNlZCBpbiB0aGUgZGlzcGxheSBwYXRoLiBTbyB0aGlzIGNvZGUgcmV2ZXJzZXMgdGhlCisgKiBwcm92aWRlZCB2YWx1ZSBpbnRvIHRoZSBsZnNyMTYgdmFsdWUgYnkgY291bnRpbmcgYmFja3dhcmRzIHRvIGdldAorICogdGhlIHZhbHVlIHRoYXQgbmVlZHMgdG8gYmUgc2V0IGluIHRoZSBoYXJkd2FyZSBjb21wYXJhdG9yIHRvIGdldCB0aGUKKyAqIHNhbWUgYWN0dWFsIGNvdW50LiBUaGlzIG1ha2VzIHNlbnNlIG9uY2UgeW91IHJlYWQgYWJvdmUgYSBjb3VwbGUgb2YKKyAqIHRpbWVzIGFuZCB0aGluayBhYm91dCBpdCBmcm9tIGEgaGFyZHdhcmUgcGVyc3BlY3RpdmUuCisgKi8KK3N0YXRpYyB1MTYgZGxmYl9sZnNyMTYodTE2IGFjdHVhbF9jb3VudCkKK3sKKwl1MzIgbHYgPSAweEZGRkY7IC8qIFRoaXMgaXMgdGhlIGxmc3IgdmFsdWUgdGhhdCB0aGUgaHcgc3RhcnRzIHdpdGggKi8KKworCXdoaWxlIChhY3R1YWxfY291bnQtLSkgeworCQlsdiA9CSAoKGx2IDw8IDEpIHwKKwkJCSgoKGx2ID4+IDE1KSBeIChsdiA+PiA0KSBeIChsdiA+PiAyKSBeIChsdiA+PiAxKSkgJiAxKSkKKwkJCSYgMHhGRkZGOworCX0KKworCXJldHVybiAodTE2KSBsdjsKK30KKworLyoKKyAqIFRoaXMgZG9lcyBMRlNSIGNvbnZlcnNpb24gb24gdGhlIHZhbHVlIHRoYXQgaXMgdG8gYmUgd3JpdHRlbi4KKyAqIFNlZSBMRlNSIGV4cGxhbmF0aW9uIGFib3ZlIGZvciBtb3JlIGRldGFpbC4KKyAqLworc3RhdGljIGNoYXIgKmRsZmJfc2V0X3JlZ2lzdGVyX2xmc3IxNihjaGFyICp3cnB0ciwgdTggcmVnLCB1MTYgdmFsdWUpCit7CisJcmV0dXJuIGRsZmJfc2V0X3JlZ2lzdGVyXzE2KHdycHRyLCByZWcsIGRsZmJfbGZzcjE2KHZhbHVlKSk7Cit9CisKKy8qCisgKiBUaGlzIHRha2VzIGEgc3RhbmRhcmQgZmJkZXYgc2NyZWVuaW5mbyBzdHJ1Y3QgYW5kIGFsbCBvZiBpdHMgbW9uaXRvciBtb2RlCisgKiBkZXRhaWxzIGFuZCBjb252ZXJ0cyB0aGVtIGludG8gdGhlIERpc3BsYXlMaW5rIGVxdWl2YWxlbnQgcmVnaXN0ZXIgY29tbWFuZHMuCisgKi8KK3N0YXRpYyBjaGFyICpkbGZiX3NldF92aWRfY21kcyhjaGFyICp3cnB0ciwgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIpCit7CisJdTE2IHhkcywgeWRzOworCXUxNiB4ZGUsIHlkZTsKKwl1MTYgeWVjOworCisJLyogeCBkaXNwbGF5IHN0YXJ0ICovCisJeGRzID0gdmFyLT5sZWZ0X21hcmdpbiArIHZhci0+aHN5bmNfbGVuOworCXdycHRyID0gZGxmYl9zZXRfcmVnaXN0ZXJfbGZzcjE2KHdycHRyLCAweDAxLCB4ZHMpOworCS8qIHggZGlzcGxheSBlbmQgKi8KKwl4ZGUgPSB4ZHMgKyB2YXItPnhyZXM7CisJd3JwdHIgPSBkbGZiX3NldF9yZWdpc3Rlcl9sZnNyMTYod3JwdHIsIDB4MDMsIHhkZSk7CisKKwkvKiB5IGRpc3BsYXkgc3RhcnQgKi8KKwl5ZHMgPSB2YXItPnVwcGVyX21hcmdpbiArIHZhci0+dnN5bmNfbGVuOworCXdycHRyID0gZGxmYl9zZXRfcmVnaXN0ZXJfbGZzcjE2KHdycHRyLCAweDA1LCB5ZHMpOworCS8qIHkgZGlzcGxheSBlbmQgKi8KKwl5ZGUgPSB5ZHMgKyB2YXItPnlyZXM7CisJd3JwdHIgPSBkbGZiX3NldF9yZWdpc3Rlcl9sZnNyMTYod3JwdHIsIDB4MDcsIHlkZSk7CisKKwkvKiB4IGVuZCBjb3VudCBpcyBhY3RpdmUgKyBibGFua2luZyAtIDEgKi8KKwl3cnB0ciA9IGRsZmJfc2V0X3JlZ2lzdGVyX2xmc3IxNih3cnB0ciwgMHgwOSwKKwkJCXhkZSArIHZhci0+cmlnaHRfbWFyZ2luIC0gMSk7CisKKwkvKiBsaWJkbG8gaGFyZGNvZGVzIGhzeW5jIHN0YXJ0IHRvIDEgKi8KKwl3cnB0ciA9IGRsZmJfc2V0X3JlZ2lzdGVyX2xmc3IxNih3cnB0ciwgMHgwQiwgMSk7CisKKwkvKiBoc3luYyBlbmQgaXMgd2lkdGggb2Ygc3luYyBwdWxzZSArIDEgKi8KKwl3cnB0ciA9IGRsZmJfc2V0X3JlZ2lzdGVyX2xmc3IxNih3cnB0ciwgMHgwRCwgdmFyLT5oc3luY19sZW4gKyAxKTsKKworCS8qIGhwaXhlbHMgaXMgYWN0aXZlIHBpeGVscyAqLworCXdycHRyID0gZGxmYl9zZXRfcmVnaXN0ZXJfMTYod3JwdHIsIDB4MEYsIHZhci0+eHJlcyk7CisKKwkvKiB5ZW5kY291bnQgaXMgdmVydGljYWwgYWN0aXZlICsgdmVydGljYWwgYmxhbmtpbmcgKi8KKwl5ZWMgPSB2YXItPnlyZXMgKyB2YXItPnVwcGVyX21hcmdpbiArIHZhci0+bG93ZXJfbWFyZ2luICsKKwkJCXZhci0+dnN5bmNfbGVuOworCXdycHRyID0gZGxmYl9zZXRfcmVnaXN0ZXJfbGZzcjE2KHdycHRyLCAweDExLCB5ZWMpOworCisJLyogbGliZGxvIGhhcmRjb2RlcyB2c3luYyBzdGFydCB0byAwICovCisJd3JwdHIgPSBkbGZiX3NldF9yZWdpc3Rlcl9sZnNyMTYod3JwdHIsIDB4MTMsIDApOworCisJLyogdnN5bmMgZW5kIGlzIHdpZHRoIG9mIHZzeW5jIHB1bHNlICovCisJd3JwdHIgPSBkbGZiX3NldF9yZWdpc3Rlcl9sZnNyMTYod3JwdHIsIDB4MTUsIHZhci0+dnN5bmNfbGVuKTsKKworCS8qIHZwaXhlbHMgaXMgYWN0aXZlIHBpeGVscyAqLworCXdycHRyID0gZGxmYl9zZXRfcmVnaXN0ZXJfMTYod3JwdHIsIDB4MTcsIHZhci0+eXJlcyk7CisKKwkvKiBjb252ZXJ0IHBpY29zZWNvbmRzIHRvIDVrSHogbXVsdGlwbGUgZm9yIHBjbGs1ayA9IHggKiAxRTEyLzVrICovCisJd3JwdHIgPSBkbGZiX3NldF9yZWdpc3Rlcl8xNmJlKHdycHRyLCAweDFCLAorCQkJMjAwKjEwMDAqMTAwMC92YXItPnBpeGNsb2NrKTsKKworCXJldHVybiB3cnB0cjsKK30KKworLyoKKyAqIFRoaXMgdGFrZXMgYSBzdGFuZGFyZCBmYmRldiBzY3JlZW5pbmZvIHN0cnVjdCB0aGF0IHdhcyBmZXRjaGVkIG9yIHByZXBhcmVkCisgKiBhbmQgdGhlbiBnZW5lcmF0ZXMgdGhlIGFwcHJvcHJpYXRlIGNvbW1hbmQgc2VxdWVuY2UgdGhhdCB0aGVuIGRyaXZlcyB0aGUKKyAqIGRpc3BsYXkgY29udHJvbGxlci4KKyAqLworc3RhdGljIGludCBkbGZiX3NldF92aWRlb19tb2RlKHN0cnVjdCBkbGZiX2RhdGEgKmRldiwKKwkJCQlzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhcikKK3sKKwljaGFyICpidWY7CisJY2hhciAqd3JwdHI7CisJaW50IHJldHZhbCA9IDA7CisJaW50IHdyaXRlc2l6ZTsKKwlzdHJ1Y3QgdXJiICp1cmI7CisKKwlpZiAoIWF0b21pY19yZWFkKCZkZXYtPnVzYl9hY3RpdmUpKQorCQlyZXR1cm4gLUVQRVJNOworCisJdXJiID0gZGxmYl9nZXRfdXJiKGRldik7CisJaWYgKCF1cmIpCisJCXJldHVybiAtRU5PTUVNOworCisJYnVmID0gKGNoYXIgKikgdXJiLT50cmFuc2Zlcl9idWZmZXI7CisKKwkvKgorCSogVGhpcyBmaXJzdCBzZWN0aW9uIGhhcyB0byBkbyB3aXRoIHNldHRpbmcgdGhlIGJhc2UgYWRkcmVzcyBvbiB0aGUKKwkqIGNvbnRyb2xsZXIgKiBhc3NvY2lhdGVkIHdpdGggdGhlIGRpc3BsYXkuIFRoZXJlIGFyZSAyIGJhc2UKKwkqIHBvaW50ZXJzLCBjdXJyZW50bHksIHdlIG9ubHkgKiB1c2UgdGhlIDE2IGJwcCBzZWdtZW50LgorCSovCisJd3JwdHIgPSBkbGZiX3ZpZHJlZ19sb2NrKGJ1Zik7CisJd3JwdHIgPSBkbGZiX3NldF9jb2xvcl9kZXB0aCh3cnB0ciwgMHgwMCk7CisJLyogc2V0IGJhc2UgZm9yIDE2YnBwIHNlZ21lbnQgdG8gMCAqLworCXdycHRyID0gZGxmYl9zZXRfYmFzZTE2YnBwKHdycHRyLCAwKTsKKwkvKiBzZXQgYmFzZSBmb3IgOGJwcCBzZWdtZW50IHRvIGVuZCBvZiBmYiAqLworCXdycHRyID0gZGxmYl9zZXRfYmFzZThicHAod3JwdHIsIGRldi0+aW5mby0+Zml4LnNtZW1fbGVuKTsKKworCXdycHRyID0gZGxmYl9zZXRfdmlkX2NtZHMod3JwdHIsIHZhcik7CisJd3JwdHIgPSBkbGZiX2VuYWJsZV9odnN5bmMod3JwdHIsIHRydWUpOworCXdycHRyID0gZGxmYl92aWRyZWdfdW5sb2NrKHdycHRyKTsKKworCXdyaXRlc2l6ZSA9IHdycHRyIC0gYnVmOworCisJcmV0dmFsID0gZGxmYl9zdWJtaXRfdXJiKGRldiwgdXJiLCB3cml0ZXNpemUpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBkbGZiX29wc19tbWFwKHN0cnVjdCBmYl9pbmZvICppbmZvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gdm1hLT52bV9zdGFydDsKKwl1bnNpZ25lZCBsb25nIHNpemUgPSB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQ7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQgPSB2bWEtPnZtX3Bnb2ZmIDw8IFBBR0VfU0hJRlQ7CisJdW5zaWduZWQgbG9uZyBwYWdlLCBwb3M7CisKKwlpZiAob2Zmc2V0ICsgc2l6ZSA+IGluZm8tPmZpeC5zbWVtX2xlbikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwb3MgPSAodW5zaWduZWQgbG9uZylpbmZvLT5maXguc21lbV9zdGFydCArIG9mZnNldDsKKworCXByX25vdGljZSgibW1hcCgpIGZyYW1lYnVmZmVyIGFkZHI6JWx1IHNpemU6JWx1XG4iLAorCQkgIHBvcywgc2l6ZSk7CisKKwl3aGlsZSAoc2l6ZSA+IDApIHsKKwkJcGFnZSA9IHZtYWxsb2NfdG9fcGZuKCh2b2lkICopcG9zKTsKKwkJaWYgKHJlbWFwX3Bmbl9yYW5nZSh2bWEsIHN0YXJ0LCBwYWdlLCBQQUdFX1NJWkUsIFBBR0VfU0hBUkVEKSkKKwkJCXJldHVybiAtRUFHQUlOOworCisJCXN0YXJ0ICs9IFBBR0VfU0laRTsKKwkJcG9zICs9IFBBR0VfU0laRTsKKwkJaWYgKHNpemUgPiBQQUdFX1NJWkUpCisJCQlzaXplIC09IFBBR0VfU0laRTsKKwkJZWxzZQorCQkJc2l6ZSA9IDA7CisJfQorCisJdm1hLT52bV9mbGFncyB8PSBWTV9SRVNFUlZFRDsJLyogYXZvaWQgdG8gc3dhcCBvdXQgdGhpcyBWTUEgKi8KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRyaW1zIGlkZW50aWNhbCBkYXRhIGZyb20gZnJvbnQgYW5kIGJhY2sgb2YgbGluZQorICogU2V0cyBuZXcgZnJvbnQgYnVmZmVyIGFkZHJlc3MgYW5kIHdpZHRoCisgKiBBbmQgcmV0dXJucyBieXRlIGNvdW50IG9mIGlkZW50aWNhbCBwaXhlbHMKKyAqIEFzc3VtZXMgQ1BVIG5hdHVyYWwgYWxpZ25tZW50ICh1bnNpZ25lZCBsb25nKQorICogZm9yIGJhY2sgYW5kIGZyb250IGJ1ZmZlciBwdHJzIGFuZCB3aWR0aAorICovCitzdGF0aWMgaW50IGRsZmJfdHJpbV9obGluZShjb25zdCB1OCAqYmJhY2ssIGNvbnN0IHU4ICoqYmZyb250LCBpbnQgKndpZHRoX2J5dGVzKQoreworCWludCBqLCBrOworCWNvbnN0IHVuc2lnbmVkIGxvbmcgKmJhY2sgPSAoY29uc3QgdW5zaWduZWQgbG9uZyAqKSBiYmFjazsKKwljb25zdCB1bnNpZ25lZCBsb25nICpmcm9udCA9IChjb25zdCB1bnNpZ25lZCBsb25nICopICpiZnJvbnQ7CisJY29uc3QgaW50IHdpZHRoID0gKndpZHRoX2J5dGVzIC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOworCWludCBpZGVudGljYWwgPSB3aWR0aDsKKwlpbnQgc3RhcnQgPSB3aWR0aDsKKwlpbnQgZW5kID0gd2lkdGg7CisKKwlwcmVmZXRjaCgodm9pZCAqKSBmcm9udCk7CisJcHJlZmV0Y2goKHZvaWQgKikgYmFjayk7CisKKwlmb3IgKGogPSAwOyBqIDwgd2lkdGg7IGorKykgeworCQlpZiAoYmFja1tqXSAhPSBmcm9udFtqXSkgeworCQkJc3RhcnQgPSBqOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlmb3IgKGsgPSB3aWR0aCAtIDE7IGsgPiBqOyBrLS0pIHsKKwkJaWYgKGJhY2tba10gIT0gZnJvbnRba10pIHsKKwkJCWVuZCA9IGsrMTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWRlbnRpY2FsID0gc3RhcnQgKyAod2lkdGggLSBlbmQpOworCSpiZnJvbnQgPSAodTggKikgJmZyb250W3N0YXJ0XTsKKwkqd2lkdGhfYnl0ZXMgPSAoZW5kIC0gc3RhcnQpICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOworCisJcmV0dXJuIGlkZW50aWNhbCAqIHNpemVvZih1bnNpZ25lZCBsb25nKTsKK30KKworLyoKKyAqIFJlbmRlciBhIGNvbW1hbmQgc3RyZWFtIGZvciBhbiBlbmNvZGVkIGhvcml6b250YWwgbGluZSBzZWdtZW50IG9mIHBpeGVscy4KKyAqCisgKiBBIGNvbW1hbmQgYnVmZmVyIGhvbGRzIHNldmVyYWwgY29tbWFuZHMuCisgKiBJdCBhbHdheXMgYmVnaW5zIHdpdGggYSBmcmVzaCBjb21tYW5kIGhlYWRlcgorICogKHRoZSBwcm90b2NvbCBkb2Vzbid0IHJlcXVpcmUgdGhpcywgYnV0IHdlIGVuZm9yY2UgaXQgdG8gYWxsb3cKKyAqIG11bHRpcGxlIGJ1ZmZlcnMgdG8gYmUgcG90ZW50aWFsbHkgZW5jb2RlZCBhbmQgc2VudCBpbiBwYXJhbGxlbCkuCisgKiBBIHNpbmdsZSBjb21tYW5kIGVuY29kZXMgb25lIGNvbnRpZ3VvdXMgaG9yaXpvbnRhbCBsaW5lIG9mIHBpeGVscworICoKKyAqIFRoZSBmdW5jdGlvbiByZWxpZXMgb24gdGhlIGNsaWVudCB0byBkbyBhbGwgYWxsb2NhdGlvbiwgc28gdGhhdAorICogcmVuZGVyaW5nIGNhbiBiZSBkb25lIGRpcmVjdGx5IHRvIG91dHB1dCBidWZmZXJzIChlLmcuIFVTQiBVUkJzKS4KKyAqIFRoZSBmdW5jdGlvbiBmaWxscyB0aGUgc3VwcGxpZWQgY29tbWFuZCBidWZmZXIsIHByb3ZpZGluZyBpbmZvcm1hdGlvbgorICogb24gd2hlcmUgaXQgbGVmdCBvZmYsIHNvIHRoZSBjbGllbnQgbWF5IGNhbGwgaW4gYWdhaW4gd2l0aCBhZGRpdGlvbmFsCisgKiBidWZmZXJzIGlmIHRoZSBsaW5lIHdpbGwgdGFrZSBzZXZlcmFsIGJ1ZmZlcnMgdG8gY29tcGxldGUuCisgKgorICogQSBzaW5nbGUgY29tbWFuZCBjYW4gdHJhbnNtaXQgYSBtYXhpbXVtIG9mIDI1NiBwaXhlbHMsCisgKiByZWdhcmRsZXNzIG9mIHRoZSBjb21wcmVzc2lvbiByYXRpbyAocHJvdG9jb2wgZGVzaWduIGxpbWl0KS4KKyAqIFRvIHRoZSBoYXJkd2FyZSwgMCBmb3IgYSBzaXplIGJ5dGUgbWVhbnMgMjU2CisgKgorICogUmF0aGVyIHRoYW4gMjU2IHBpeGVsIGNvbW1hbmRzIHdoaWNoIGFyZSBlaXRoZXIgcmwgb3IgcmF3IGVuY29kZWQsCisgKiB0aGUgcmx4IGNvbW1hbmQgc2ltcGx5IGFzc3VtZXMgYWx0ZXJuYXRpbmcgcmF3IGFuZCBybCBzcGFucyB3aXRoaW4gb25lIGNtZC4KKyAqIFRoaXMgaGFzIGEgc2xpZ2h0bHkgbGFyZ2VyIGhlYWRlciBvdmVyaGVhZCwgYnV0IHByb2R1Y2VzIG1vcmUgZXZlbiByZXN1bHRzLgorICogSXQgYWxzbyBwcm9jZXNzZXMgYWxsIGRhdGEgKHJlYWQgYW5kIHdyaXRlKSBpbiBhIHNpbmdsZSBwYXNzLgorICogUGVyZm9ybWFuY2UgYmVuY2htYXJrcyBvZiBjb21tb24gY2FzZXMgc2hvdyBpdCBoYXZpbmcganVzdCBzbGlnaHRseSBiZXR0ZXIKKyAqIGNvbXByZXNzaW9uIHRoYW4gMjU2IHBpeGVsIHJhdyBvciBybGUgY29tbWFuZHMsIHdpdGggc2ltaWxhciBDUFUgY29uc3VtcGlvbi4KKyAqIEJ1dCBmb3IgdmVyeSBybCBmcmllbmRseSBkYXRhLCB3aWxsIGNvbXByZXNzIG5vdCBxdWl0ZSBhcyB3ZWxsLgorICovCitzdGF0aWMgdm9pZCBkbGZiX2NvbXByZXNzX2hsaW5lKAorCWNvbnN0IHVpbnQxNl90ICoqcGl4ZWxfc3RhcnRfcHRyLAorCWNvbnN0IHVpbnQxNl90ICpjb25zdCBwaXhlbF9lbmQsCisJdWludDMyX3QgKmRldmljZV9hZGRyZXNzX3B0ciwKKwl1aW50OF90ICoqY29tbWFuZF9idWZmZXJfcHRyLAorCWNvbnN0IHVpbnQ4X3QgKmNvbnN0IGNtZF9idWZmZXJfZW5kKQoreworCWNvbnN0IHVpbnQxNl90ICpwaXhlbCA9ICpwaXhlbF9zdGFydF9wdHI7CisJdWludDMyX3QgZGV2X2FkZHIgID0gKmRldmljZV9hZGRyZXNzX3B0cjsKKwl1aW50OF90ICpjbWQgPSAqY29tbWFuZF9idWZmZXJfcHRyOworCWNvbnN0IGludCBicHAgPSAyOworCisJd2hpbGUgKChwaXhlbF9lbmQgPiBwaXhlbCkgJiYKKwkgICAgICAgKGNtZF9idWZmZXJfZW5kIC0gTUlOX1JMWF9DTURfQllURVMgPiBjbWQpKSB7CisJCXVpbnQ4X3QgKnJhd19waXhlbHNfY291bnRfYnl0ZSA9IDA7CisJCXVpbnQ4X3QgKmNtZF9waXhlbHNfY291bnRfYnl0ZSA9IDA7CisJCWNvbnN0IHVpbnQxNl90ICpyYXdfcGl4ZWxfc3RhcnQgPSAwOworCQljb25zdCB1aW50MTZfdCAqY21kX3BpeGVsX3N0YXJ0LCAqY21kX3BpeGVsX2VuZCA9IDA7CisKKwkJcHJlZmV0Y2h3KCh2b2lkICopIGNtZCk7IC8qIHB1bGwgaW4gb25lIGNhY2hlIGxpbmUgYXQgbGVhc3QgKi8KKworCQkqY21kKysgPSAweEFGOworCQkqY21kKysgPSAweDZCOworCQkqY21kKysgPSAodWludDhfdCkgKChkZXZfYWRkciA+PiAxNikgJiAweEZGKTsKKwkJKmNtZCsrID0gKHVpbnQ4X3QpICgoZGV2X2FkZHIgPj4gOCkgJiAweEZGKTsKKwkJKmNtZCsrID0gKHVpbnQ4X3QpICgoZGV2X2FkZHIpICYgMHhGRik7CisKKwkJY21kX3BpeGVsc19jb3VudF9ieXRlID0gY21kKys7IC8qICB3ZSdsbCBrbm93IHRoaXMgbGF0ZXIgKi8KKwkJY21kX3BpeGVsX3N0YXJ0ID0gcGl4ZWw7CisKKwkJcmF3X3BpeGVsc19jb3VudF9ieXRlID0gY21kKys7IC8qICB3ZSdsbCBrbm93IHRoaXMgbGF0ZXIgKi8KKwkJcmF3X3BpeGVsX3N0YXJ0ID0gcGl4ZWw7CisKKwkJY21kX3BpeGVsX2VuZCA9IHBpeGVsICsgbWluKE1BWF9DTURfUElYRUxTICsgMSwKKwkJCW1pbigoaW50KShwaXhlbF9lbmQgLSBwaXhlbCksCisJCQkgICAgKGludCkoY21kX2J1ZmZlcl9lbmQgLSBjbWQpIC8gYnBwKSk7CisKKwkJcHJlZmV0Y2hfcmFuZ2UoKHZvaWQgKikgcGl4ZWwsIChjbWRfcGl4ZWxfZW5kIC0gcGl4ZWwpICogYnBwKTsKKworCQl3aGlsZSAocGl4ZWwgPCBjbWRfcGl4ZWxfZW5kKSB7CisJCQljb25zdCB1aW50MTZfdCAqIGNvbnN0IHJlcGVhdGluZ19waXhlbCA9IHBpeGVsOworCisJCQkqKHVpbnQxNl90ICopY21kID0gY3B1X3RvX2JlMTZwKHBpeGVsKTsKKwkJCWNtZCArPSAyOworCQkJcGl4ZWwrKzsKKworCQkJaWYgKHVubGlrZWx5KChwaXhlbCA8IGNtZF9waXhlbF9lbmQpICYmCisJCQkJICAgICAoKnBpeGVsID09ICpyZXBlYXRpbmdfcGl4ZWwpKSkgeworCQkJCS8qIGdvIGJhY2sgYW5kIGZpbGwgaW4gcmF3IHBpeGVsIGNvdW50ICovCisJCQkJKnJhd19waXhlbHNfY291bnRfYnl0ZSA9ICgocmVwZWF0aW5nX3BpeGVsIC0KKwkJCQkJCXJhd19waXhlbF9zdGFydCkgKyAxKSAmIDB4RkY7CisKKwkJCQl3aGlsZSAoKHBpeGVsIDwgY21kX3BpeGVsX2VuZCkKKwkJCQkgICAgICAgJiYgKCpwaXhlbCA9PSAqcmVwZWF0aW5nX3BpeGVsKSkgeworCQkJCQlwaXhlbCsrOworCQkJCX0KKworCQkJCS8qIGltbWVkaWF0ZWx5IGFmdGVyIHJhdyBkYXRhIGlzIHJlcGVhdCBieXRlICovCisJCQkJKmNtZCsrID0gKChwaXhlbCAtIHJlcGVhdGluZ19waXhlbCkgLSAxKSAmIDB4RkY7CisKKwkJCQkvKiBUaGVuIHN0YXJ0IGFub3RoZXIgcmF3IHBpeGVsIHNwYW4gKi8KKwkJCQlyYXdfcGl4ZWxfc3RhcnQgPSBwaXhlbDsKKwkJCQlyYXdfcGl4ZWxzX2NvdW50X2J5dGUgPSBjbWQrKzsKKwkJCX0KKwkJfQorCisJCWlmIChwaXhlbCA+IHJhd19waXhlbF9zdGFydCkgeworCQkJLyogZmluYWxpemUgbGFzdCBSQVcgc3BhbiAqLworCQkJKnJhd19waXhlbHNfY291bnRfYnl0ZSA9IChwaXhlbC1yYXdfcGl4ZWxfc3RhcnQpICYgMHhGRjsKKwkJfQorCisJCSpjbWRfcGl4ZWxzX2NvdW50X2J5dGUgPSAocGl4ZWwgLSBjbWRfcGl4ZWxfc3RhcnQpICYgMHhGRjsKKwkJZGV2X2FkZHIgKz0gKHBpeGVsIC0gY21kX3BpeGVsX3N0YXJ0KSAqIGJwcDsKKwl9CisKKwlpZiAoY21kX2J1ZmZlcl9lbmQgPD0gTUlOX1JMWF9DTURfQllURVMgKyBjbWQpIHsKKwkJLyogRmlsbCBsZWZ0b3ZlciBieXRlcyB3aXRoIG5vLW9wcyAqLworCQlpZiAoY21kX2J1ZmZlcl9lbmQgPiBjbWQpCisJCQltZW1zZXQoY21kLCAweEFGLCBjbWRfYnVmZmVyX2VuZCAtIGNtZCk7CisJCWNtZCA9ICh1aW50OF90ICopIGNtZF9idWZmZXJfZW5kOworCX0KKworCSpjb21tYW5kX2J1ZmZlcl9wdHIgPSBjbWQ7CisJKnBpeGVsX3N0YXJ0X3B0ciA9IHBpeGVsOworCSpkZXZpY2VfYWRkcmVzc19wdHIgPSBkZXZfYWRkcjsKKworCXJldHVybjsKK30KKworLyoKKyAqIFRoZXJlIGFyZSAzIGNvcGllcyBvZiBldmVyeSBwaXhlbDogVGhlIGZyb250IGJ1ZmZlciB0aGF0IHRoZSBmYmRldgorICogY2xpZW50IHJlbmRlcnMgdG8sIHRoZSBhY3R1YWwgZnJhbWVidWZmZXIgYWNyb3NzIHRoZSBVU0IgYnVzIGluIGhhcmR3YXJlCisgKiAodGhhdCB3ZSBjYW4gb25seSB3cml0ZSB0bywgc2xvd2x5LCBhbmQgY2FuIG5ldmVyIHJlYWQpLCBhbmQgKG9wdGlvbmFsbHkpCisgKiBvdXIgc2hhZG93IGNvcHkgdGhhdCB0cmFja3Mgd2hhdCdzIGJlZW4gc2VudCB0byB0aGF0IGhhcmR3YXJlIGJ1ZmZlci4KKyAqLworc3RhdGljIGludCBkbGZiX3JlbmRlcl9obGluZShzdHJ1Y3QgZGxmYl9kYXRhICpkZXYsIHN0cnVjdCB1cmIgKip1cmJfcHRyLAorCQkJICAgICAgY29uc3QgY2hhciAqZnJvbnQsIGNoYXIgKip1cmJfYnVmX3B0ciwKKwkJCSAgICAgIHUzMiBieXRlX29mZnNldCwgdTMyIGJ5dGVfd2lkdGgsCisJCQkgICAgICBpbnQgKmlkZW50X3B0ciwgaW50ICpzZW50X3B0cikKK3sKKwljb25zdCB1OCAqbGluZV9zdGFydCwgKmxpbmVfZW5kLCAqbmV4dF9waXhlbDsKKwl1MzIgZGV2X2FkZHIgPSBkZXYtPmJhc2UxNiArIGJ5dGVfb2Zmc2V0OworCXN0cnVjdCB1cmIgKnVyYiA9ICp1cmJfcHRyOworCXU4ICpjbWQgPSAqdXJiX2J1Zl9wdHI7CisJdTggKmNtZF9lbmQgPSAodTggKikgdXJiLT50cmFuc2Zlcl9idWZmZXIgKyB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7CisKKwlsaW5lX3N0YXJ0ID0gKHU4ICopIChmcm9udCArIGJ5dGVfb2Zmc2V0KTsKKwluZXh0X3BpeGVsID0gbGluZV9zdGFydDsKKwlsaW5lX2VuZCA9IG5leHRfcGl4ZWwgKyBieXRlX3dpZHRoOworCisJaWYgKGRldi0+YmFja2luZ19idWZmZXIpIHsKKwkJaW50IG9mZnNldDsKKwkJY29uc3QgdTggKmJhY2tfc3RhcnQgPSAodTggKikgKGRldi0+YmFja2luZ19idWZmZXIKKwkJCQkJCSsgYnl0ZV9vZmZzZXQpOworCisJCSppZGVudF9wdHIgKz0gZGxmYl90cmltX2hsaW5lKGJhY2tfc3RhcnQsICZuZXh0X3BpeGVsLAorCQkJJmJ5dGVfd2lkdGgpOworCisJCW9mZnNldCA9IG5leHRfcGl4ZWwgLSBsaW5lX3N0YXJ0OworCQlsaW5lX2VuZCA9IG5leHRfcGl4ZWwgKyBieXRlX3dpZHRoOworCQlkZXZfYWRkciArPSBvZmZzZXQ7CisJCWJhY2tfc3RhcnQgKz0gb2Zmc2V0OworCQlsaW5lX3N0YXJ0ICs9IG9mZnNldDsKKworCQltZW1jcHkoKGNoYXIgKiliYWNrX3N0YXJ0LCAoY2hhciAqKSBsaW5lX3N0YXJ0LAorCQkgICAgICAgYnl0ZV93aWR0aCk7CisJfQorCisJd2hpbGUgKG5leHRfcGl4ZWwgPCBsaW5lX2VuZCkgeworCisJCWRsZmJfY29tcHJlc3NfaGxpbmUoKGNvbnN0IHVpbnQxNl90ICoqKSAmbmV4dF9waXhlbCwKKwkJCSAgICAgKGNvbnN0IHVpbnQxNl90ICopIGxpbmVfZW5kLCAmZGV2X2FkZHIsCisJCQkodTggKiopICZjbWQsICh1OCAqKSBjbWRfZW5kKTsKKworCQlpZiAoY21kID49IGNtZF9lbmQpIHsKKwkJCWludCBsZW4gPSBjbWQgLSAodTggKikgdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJCQlpZiAoZGxmYl9zdWJtaXRfdXJiKGRldiwgdXJiLCBsZW4pKQorCQkJCXJldHVybiAxOyAvKiBsb3N0IHBpeGVscyBpcyBzZXQgKi8KKwkJCSpzZW50X3B0ciArPSBsZW47CisJCQl1cmIgPSBkbGZiX2dldF91cmIoZGV2KTsKKwkJCWlmICghdXJiKQorCQkJCXJldHVybiAxOyAvKiBsb3N0X3BpeGVscyBpcyBzZXQgKi8KKwkJCSp1cmJfcHRyID0gdXJiOworCQkJY21kID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJCQljbWRfZW5kID0gJmNtZFt1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGhdOworCQl9CisJfQorCisJKnVyYl9idWZfcHRyID0gY21kOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBkbGZiX2hhbmRsZV9kYW1hZ2Uoc3RydWN0IGRsZmJfZGF0YSAqZGV2LCBpbnQgeCwgaW50IHksCisJICAgICAgIGludCB3aWR0aCwgaW50IGhlaWdodCwgY2hhciAqZGF0YSkKK3sKKwlpbnQgaSwgcmV0OworCWNoYXIgKmNtZDsKKwljeWNsZXNfdCBzdGFydF9jeWNsZXMsIGVuZF9jeWNsZXM7CisJaW50IGJ5dGVzX3NlbnQgPSAwOworCWludCBieXRlc19pZGVudGljYWwgPSAwOworCXN0cnVjdCB1cmIgKnVyYjsKKwlpbnQgYWxpZ25lZF94OworCisJc3RhcnRfY3ljbGVzID0gZ2V0X2N5Y2xlcygpOworCisJYWxpZ25lZF94ID0gRExfQUxJR05fRE9XTih4LCBzaXplb2YodW5zaWduZWQgbG9uZykpOworCXdpZHRoID0gRExfQUxJR05fVVAod2lkdGggKyAoeC1hbGlnbmVkX3gpLCBzaXplb2YodW5zaWduZWQgbG9uZykpOworCXggPSBhbGlnbmVkX3g7CisKKwlpZiAoKHdpZHRoIDw9IDApIHx8CisJICAgICh4ICsgd2lkdGggPiBkZXYtPmluZm8tPnZhci54cmVzKSB8fAorCSAgICAoeSArIGhlaWdodCA+IGRldi0+aW5mby0+dmFyLnlyZXMpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghYXRvbWljX3JlYWQoJmRldi0+dXNiX2FjdGl2ZSkpCisJCXJldHVybiAwOworCisJdXJiID0gZGxmYl9nZXRfdXJiKGRldik7CisJaWYgKCF1cmIpCisJCXJldHVybiAwOworCWNtZCA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCisJZm9yIChpID0geTsgaSA8IHkgKyBoZWlnaHQgOyBpKyspIHsKKwkJY29uc3QgaW50IGxpbmVfb2Zmc2V0ID0gZGV2LT5pbmZvLT5maXgubGluZV9sZW5ndGggKiBpOworCQljb25zdCBpbnQgYnl0ZV9vZmZzZXQgPSBsaW5lX29mZnNldCArICh4ICogQlBQKTsKKworCQlpZiAoZGxmYl9yZW5kZXJfaGxpbmUoZGV2LCAmdXJiLAorCQkJCSAgICAgIChjaGFyICopIGRldi0+aW5mby0+Zml4LnNtZW1fc3RhcnQsCisJCQkJICAgICAgJmNtZCwgYnl0ZV9vZmZzZXQsIHdpZHRoICogQlBQLAorCQkJCSAgICAgICZieXRlc19pZGVudGljYWwsICZieXRlc19zZW50KSkKKwkJCWdvdG8gZXJyb3I7CisJfQorCisJaWYgKGNtZCA+IChjaGFyICopIHVyYi0+dHJhbnNmZXJfYnVmZmVyKSB7CisJCS8qIFNlbmQgcGFydGlhbCBidWZmZXIgcmVtYWluaW5nIGJlZm9yZSBleGl0aW5nICovCisJCWludCBsZW4gPSBjbWQgLSAoY2hhciAqKSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwkJcmV0ID0gZGxmYl9zdWJtaXRfdXJiKGRldiwgdXJiLCBsZW4pOworCQlieXRlc19zZW50ICs9IGxlbjsKKwl9IGVsc2UKKwkJZGxmYl91cmJfY29tcGxldGlvbih1cmIpOworCitlcnJvcjoKKwlhdG9taWNfYWRkKGJ5dGVzX3NlbnQsICZkZXYtPmJ5dGVzX3NlbnQpOworCWF0b21pY19hZGQoYnl0ZXNfaWRlbnRpY2FsLCAmZGV2LT5ieXRlc19pZGVudGljYWwpOworCWF0b21pY19hZGQod2lkdGgqaGVpZ2h0KjIsICZkZXYtPmJ5dGVzX3JlbmRlcmVkKTsKKwllbmRfY3ljbGVzID0gZ2V0X2N5Y2xlcygpOworCWF0b21pY19hZGQoKCh1bnNpZ25lZCBpbnQpICgoZW5kX2N5Y2xlcyAtIHN0YXJ0X2N5Y2xlcykKKwkJICAgID4+IDEwKSksIC8qIEtjeWNsZXMgKi8KKwkJICAgJmRldi0+Y3B1X2tjeWNsZXNfdXNlZCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFBhdGggdHJpZ2dlcmVkIGJ5IHVzZXJtb2RlIGNsaWVudHMgd2hvIHdyaXRlIHRvIGZpbGVzeXN0ZW0KKyAqIGUuZy4gY2F0IGZpbGVuYW1lID4gL2Rldi9mYjEKKyAqIE5vdCB1c2VkIGJ5IFggV2luZG93cyBvciB0ZXh0LW1vZGUgY29uc29sZS4gQnV0IHVzZWZ1bCBmb3IgdGVzdGluZy4KKyAqIFNsb3cgYmVjYXVzZSBvZiBleHRyYSBjb3B5IGFuZCB3ZSBtdXN0IGFzc3VtZSBhbGwgcGl4ZWxzIGRpcnR5LgorICovCitzdGF0aWMgc3NpemVfdCBkbGZiX29wc193cml0ZShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCSAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3NpemVfdCByZXN1bHQ7CisJc3RydWN0IGRsZmJfZGF0YSAqZGV2ID0gaW5mby0+cGFyOworCXUzMiBvZmZzZXQgPSAodTMyKSAqcHBvczsKKworCXJlc3VsdCA9IGZiX3N5c193cml0ZShpbmZvLCBidWYsIGNvdW50LCBwcG9zKTsKKworCWlmIChyZXN1bHQgPiAwKSB7CisJCWludCBzdGFydCA9IG1heCgoaW50KShvZmZzZXQgLyBpbmZvLT5maXgubGluZV9sZW5ndGgpIC0gMSwgMCk7CisJCWludCBsaW5lcyA9IG1pbigodTMyKSgocmVzdWx0IC8gaW5mby0+Zml4LmxpbmVfbGVuZ3RoKSArIDEpLAorCQkJCSh1MzIpaW5mby0+dmFyLnlyZXMpOworCisJCWRsZmJfaGFuZGxlX2RhbWFnZShkZXYsIDAsIHN0YXJ0LCBpbmZvLT52YXIueHJlcywKKwkJCWxpbmVzLCBpbmZvLT5zY3JlZW5fYmFzZSk7CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyogaGFyZHdhcmUgaGFzIG5hdGl2ZSBDT1BZIGNvbW1hbmQgKHNlZSBsaWJkbG8pLCBidXQgbm90IHdvcnRoIGl0IGZvciBmYmNvbiAqLworc3RhdGljIHZvaWQgZGxmYl9vcHNfY29weWFyZWEoc3RydWN0IGZiX2luZm8gKmluZm8sCisJCQkJY29uc3Qgc3RydWN0IGZiX2NvcHlhcmVhICphcmVhKQoreworCisJc3RydWN0IGRsZmJfZGF0YSAqZGV2ID0gaW5mby0+cGFyOworCisJc3lzX2NvcHlhcmVhKGluZm8sIGFyZWEpOworCisJZGxmYl9oYW5kbGVfZGFtYWdlKGRldiwgYXJlYS0+ZHgsIGFyZWEtPmR5LAorCQkJYXJlYS0+d2lkdGgsIGFyZWEtPmhlaWdodCwgaW5mby0+c2NyZWVuX2Jhc2UpOworfQorCitzdGF0aWMgdm9pZCBkbGZiX29wc19pbWFnZWJsaXQoc3RydWN0IGZiX2luZm8gKmluZm8sCisJCQkJY29uc3Qgc3RydWN0IGZiX2ltYWdlICppbWFnZSkKK3sKKwlzdHJ1Y3QgZGxmYl9kYXRhICpkZXYgPSBpbmZvLT5wYXI7CisKKwlzeXNfaW1hZ2VibGl0KGluZm8sIGltYWdlKTsKKworCWRsZmJfaGFuZGxlX2RhbWFnZShkZXYsIGltYWdlLT5keCwgaW1hZ2UtPmR5LAorCQkJaW1hZ2UtPndpZHRoLCBpbWFnZS0+aGVpZ2h0LCBpbmZvLT5zY3JlZW5fYmFzZSk7Cit9CisKK3N0YXRpYyB2b2lkIGRsZmJfb3BzX2ZpbGxyZWN0KHN0cnVjdCBmYl9pbmZvICppbmZvLAorCQkJICBjb25zdCBzdHJ1Y3QgZmJfZmlsbHJlY3QgKnJlY3QpCit7CisJc3RydWN0IGRsZmJfZGF0YSAqZGV2ID0gaW5mby0+cGFyOworCisJc3lzX2ZpbGxyZWN0KGluZm8sIHJlY3QpOworCisJZGxmYl9oYW5kbGVfZGFtYWdlKGRldiwgcmVjdC0+ZHgsIHJlY3QtPmR5LCByZWN0LT53aWR0aCwKKwkJCSAgICAgIHJlY3QtPmhlaWdodCwgaW5mby0+c2NyZWVuX2Jhc2UpOworfQorCisvKgorICogTk9URTogZmJfZGVmaW8uYyBpcyBob2xkaW5nIGluZm8tPmZiZGVmaW8ubXV0ZXgKKyAqICAgVG91Y2hpbmcgQU5ZIGZyYW1lYnVmZmVyIG1lbW9yeSB0aGF0IHRyaWdnZXJzIGEgcGFnZSBmYXVsdAorICogICBpbiBmYl9kZWZpbyB3aWxsIGNhdXNlIGEgZGVhZGxvY2ssIHdoZW4gaXQgYWxzbyB0cmllcyB0bworICogICBncmFiIHRoZSBzYW1lIG11dGV4LgorICovCitzdGF0aWMgdm9pZCBkbGZiX2RweV9kZWZlcnJlZF9pbyhzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKKwkJCQlzdHJ1Y3QgbGlzdF9oZWFkICpwYWdlbGlzdCkKK3sKKwlzdHJ1Y3QgcGFnZSAqY3VyOworCXN0cnVjdCBmYl9kZWZlcnJlZF9pbyAqZmJkZWZpbyA9IGluZm8tPmZiZGVmaW87CisJc3RydWN0IGRsZmJfZGF0YSAqZGV2ID0gaW5mby0+cGFyOworCXN0cnVjdCB1cmIgKnVyYjsKKwljaGFyICpjbWQ7CisJY3ljbGVzX3Qgc3RhcnRfY3ljbGVzLCBlbmRfY3ljbGVzOworCWludCBieXRlc19zZW50ID0gMDsKKwlpbnQgYnl0ZXNfaWRlbnRpY2FsID0gMDsKKwlpbnQgYnl0ZXNfcmVuZGVyZWQgPSAwOworCisJaWYgKCFmYl9kZWZpbykKKwkJcmV0dXJuOworCisJaWYgKCFhdG9taWNfcmVhZCgmZGV2LT51c2JfYWN0aXZlKSkKKwkJcmV0dXJuOworCisJc3RhcnRfY3ljbGVzID0gZ2V0X2N5Y2xlcygpOworCisJdXJiID0gZGxmYl9nZXRfdXJiKGRldik7CisJaWYgKCF1cmIpCisJCXJldHVybjsKKworCWNtZCA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCisJLyogd2FsayB0aGUgd3JpdHRlbiBwYWdlIGxpc3QgYW5kIHJlbmRlciBlYWNoIHRvIGRldmljZSAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoY3VyLCAmZmJkZWZpby0+cGFnZWxpc3QsIGxydSkgeworCisJCWlmIChkbGZiX3JlbmRlcl9obGluZShkZXYsICZ1cmIsIChjaGFyICopIGluZm8tPmZpeC5zbWVtX3N0YXJ0LAorCQkJCSAgJmNtZCwgY3VyLT5pbmRleCA8PCBQQUdFX1NISUZULAorCQkJCSAgUEFHRV9TSVpFLCAmYnl0ZXNfaWRlbnRpY2FsLCAmYnl0ZXNfc2VudCkpCisJCQlnb3RvIGVycm9yOworCQlieXRlc19yZW5kZXJlZCArPSBQQUdFX1NJWkU7CisJfQorCisJaWYgKGNtZCA+IChjaGFyICopIHVyYi0+dHJhbnNmZXJfYnVmZmVyKSB7CisJCS8qIFNlbmQgcGFydGlhbCBidWZmZXIgcmVtYWluaW5nIGJlZm9yZSBleGl0aW5nICovCisJCWludCBsZW4gPSBjbWQgLSAoY2hhciAqKSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwkJZGxmYl9zdWJtaXRfdXJiKGRldiwgdXJiLCBsZW4pOworCQlieXRlc19zZW50ICs9IGxlbjsKKwl9IGVsc2UKKwkJZGxmYl91cmJfY29tcGxldGlvbih1cmIpOworCitlcnJvcjoKKwlhdG9taWNfYWRkKGJ5dGVzX3NlbnQsICZkZXYtPmJ5dGVzX3NlbnQpOworCWF0b21pY19hZGQoYnl0ZXNfaWRlbnRpY2FsLCAmZGV2LT5ieXRlc19pZGVudGljYWwpOworCWF0b21pY19hZGQoYnl0ZXNfcmVuZGVyZWQsICZkZXYtPmJ5dGVzX3JlbmRlcmVkKTsKKwllbmRfY3ljbGVzID0gZ2V0X2N5Y2xlcygpOworCWF0b21pY19hZGQoKCh1bnNpZ25lZCBpbnQpICgoZW5kX2N5Y2xlcyAtIHN0YXJ0X2N5Y2xlcykKKwkJICAgID4+IDEwKSksIC8qIEtjeWNsZXMgKi8KKwkJICAgJmRldi0+Y3B1X2tjeWNsZXNfdXNlZCk7Cit9CisKK3N0YXRpYyBpbnQgZGxmYl9nZXRfZWRpZChzdHJ1Y3QgZGxmYl9kYXRhICpkZXYsIGNoYXIgKmVkaWQsIGludCBsZW4pCit7CisJaW50IGk7CisJaW50IHJldDsKKwljaGFyICpyYnVmOworCisJcmJ1ZiA9IGttYWxsb2MoMiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyYnVmKQorCQlyZXR1cm4gMDsKKworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworCQlyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LT51ZGV2LAorCQkJCSAgICB1c2JfcmN2Y3RybHBpcGUoZGV2LT51ZGV2LCAwKSwgKDB4MDIpLAorCQkJCSAgICAoMHg4MCB8ICgweDAyIDw8IDUpKSwgaSA8PCA4LCAweEExLCByYnVmLCAyLAorCQkJCSAgICBIWik7CisJCWlmIChyZXQgPCAxKSB7CisJCQlwcl9lcnIoIlJlYWQgRURJRCBieXRlICVkIGZhaWxlZCBlcnIgJXhcbiIsIGksIHJldCk7CisJCQlpLS07CisJCQlicmVhazsKKwkJfQorCQllZGlkW2ldID0gcmJ1ZlsxXTsKKwl9CisKKwlrZnJlZShyYnVmKTsKKworCXJldHVybiBpOworfQorCitzdGF0aWMgaW50IGRsZmJfb3BzX2lvY3RsKHN0cnVjdCBmYl9pbmZvICppbmZvLCB1bnNpZ25lZCBpbnQgY21kLAorCQkJCXVuc2lnbmVkIGxvbmcgYXJnKQoreworCisJc3RydWN0IGRsZmJfZGF0YSAqZGV2ID0gaW5mby0+cGFyOworCXN0cnVjdCBkbG9hcmVhICphcmVhID0gTlVMTDsKKworCWlmICghYXRvbWljX3JlYWQoJmRldi0+dXNiX2FjdGl2ZSkpCisJCXJldHVybiAwOworCisJLyogVE9ETzogVXBkYXRlIFggc2VydmVyIHRvIGdldCB0aGlzIGZyb20gc3lzZnMgaW5zdGVhZCAqLworCWlmIChjbWQgPT0gRExGQl9JT0NUTF9SRVRVUk5fRURJRCkgeworCQljaGFyICplZGlkID0gKGNoYXIgKilhcmc7CisJCWlmIChjb3B5X3RvX3VzZXIoZWRpZCwgZGV2LT5lZGlkLCBkZXYtPmVkaWRfc2l6ZSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogVE9ETzogSGVscCBwcm9wb3NlIGEgc3RhbmRhcmQgZmIuaCBpb2N0bCB0byByZXBvcnQgbW1hcCBkYW1hZ2UgKi8KKwlpZiAoY21kID09IERMRkJfSU9DVExfUkVQT1JUX0RBTUFHRSkgeworCisJCS8qCisJCSAqIElmIHdlIGhhdmUgYSBkYW1hZ2UtYXdhcmUgY2xpZW50LCB0dXJuIGZiX2RlZmlvICJvZmYiCisJCSAqIFRvIGF2b2lkIHBlcmYgaW1hY3Qgb2YgdW5lY2Vzc2FyeSBwYWdlIGZhdWx0IGhhbmRsaW5nLgorCQkgKiBEb25lIGJ5IHJlc2V0dGluZyB0aGUgZGVsYXkgZm9yIHRoaXMgZmJfaW5mbyB0byBhIHZlcnkKKwkJICogbG9uZyBwZXJpb2QuIFBhZ2VzIHdpbGwgYmVjb21lIHdyaXRhYmxlIGFuZCBzdGF5IHRoYXQgd2F5LgorCQkgKiBSZXNldCB0byBub3JtYWwgdmFsdWUgd2hlbiBhbGwgY2xpZW50cyBoYXZlIGNsb3NlZCB0aGlzIGZiLgorCQkgKi8KKwkJaWYgKGluZm8tPmZiZGVmaW8pCisJCQlpbmZvLT5mYmRlZmlvLT5kZWxheSA9IERMX0RFRklPX1dSSVRFX0RJU0FCTEU7CisKKwkJYXJlYSA9IChzdHJ1Y3QgZGxvYXJlYSAqKWFyZzsKKworCQlpZiAoYXJlYS0+eCA8IDApCisJCQlhcmVhLT54ID0gMDsKKworCQlpZiAoYXJlYS0+eCA+IGluZm8tPnZhci54cmVzKQorCQkJYXJlYS0+eCA9IGluZm8tPnZhci54cmVzOworCisJCWlmIChhcmVhLT55IDwgMCkKKwkJCWFyZWEtPnkgPSAwOworCisJCWlmIChhcmVhLT55ID4gaW5mby0+dmFyLnlyZXMpCisJCQlhcmVhLT55ID0gaW5mby0+dmFyLnlyZXM7CisKKwkJZGxmYl9oYW5kbGVfZGFtYWdlKGRldiwgYXJlYS0+eCwgYXJlYS0+eSwgYXJlYS0+dywgYXJlYS0+aCwKKwkJCSAgIGluZm8tPnNjcmVlbl9iYXNlKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogdGFrZW4gZnJvbSB2ZXNhZmIgKi8KK3N0YXRpYyBpbnQKK2RsZmJfb3BzX3NldGNvbHJlZyh1bnNpZ25lZCByZWdubywgdW5zaWduZWQgcmVkLCB1bnNpZ25lZCBncmVlbiwKKwkgICAgICAgdW5zaWduZWQgYmx1ZSwgdW5zaWduZWQgdHJhbnNwLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlpbnQgZXJyID0gMDsKKworCWlmIChyZWdubyA+PSBpbmZvLT5jbWFwLmxlbikKKwkJcmV0dXJuIDE7CisKKwlpZiAocmVnbm8gPCAxNikgeworCQlpZiAoaW5mby0+dmFyLnJlZC5vZmZzZXQgPT0gMTApIHsKKwkJCS8qIDE6NTo1OjUgKi8KKwkJCSgodTMyICopIChpbmZvLT5wc2V1ZG9fcGFsZXR0ZSkpW3JlZ25vXSA9CisJCQkgICAgKChyZWQgJiAweGY4MDApID4+IDEpIHwKKwkJCSAgICAoKGdyZWVuICYgMHhmODAwKSA+PiA2KSB8ICgoYmx1ZSAmIDB4ZjgwMCkgPj4gMTEpOworCQl9IGVsc2UgeworCQkJLyogMDo1OjY6NSAqLworCQkJKCh1MzIgKikgKGluZm8tPnBzZXVkb19wYWxldHRlKSlbcmVnbm9dID0KKwkJCSAgICAoKHJlZCAmIDB4ZjgwMCkpIHwKKwkJCSAgICAoKGdyZWVuICYgMHhmYzAwKSA+PiA1KSB8ICgoYmx1ZSAmIDB4ZjgwMCkgPj4gMTEpOworCQl9CisJfQorCisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIEl0J3MgY29tbW9uIGZvciBzZXZlcmFsIGNsaWVudHMgdG8gaGF2ZSBmcmFtZWJ1ZmZlciBvcGVuIHNpbXVsdGFuZW91c2x5LgorICogZS5nLiBib3RoIGZiY29uIGFuZCBYLiBNYWtlcyB0aGluZ3MgaW50ZXJlc3RpbmcuCisgKiBBc3N1bWVzIGNhbGxlciBpcyBob2xkaW5nIGluZm8tPmxvY2sgKGZvciBvcGVuIGFuZCByZWxlYXNlIGF0IGxlYXN0KQorICovCitzdGF0aWMgaW50IGRsZmJfb3BzX29wZW4oc3RydWN0IGZiX2luZm8gKmluZm8sIGludCB1c2VyKQoreworCXN0cnVjdCBkbGZiX2RhdGEgKmRldiA9IGluZm8tPnBhcjsKKworCS8qCisJICogZmJjb24gYWdncmVzc2l2ZWx5IGNvbm5lY3RzIHRvIGZpcnN0IGZyYW1lYnVmZmVyIGl0IGZpbmRzLAorCSAqIHByZXZlbnRpbmcgb3RoZXIgY2xpZW50cyAoWCkgZnJvbSB3b3JraW5nIHByb3Blcmx5LiBVc3VhbGx5CisJICogbm90IHdoYXQgdGhlIHVzZXIgd2FudHMuIEZhaWwgYnkgZGVmYXVsdCB3aXRoIG9wdGlvbiB0byBlbmFibGUuCisJICovCisJaWYgKCh1c2VyID09IDApICYgKCFjb25zb2xlKSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCS8qIElmIHRoZSBVU0IgZGV2aWNlIGlzIGdvbmUsIHdlIGRvbid0IGFjY2VwdCBuZXcgb3BlbnMgKi8KKwlpZiAoZGV2LT52aXJ0dWFsaXplZCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlkZXYtPmZiX2NvdW50Kys7CisKKwlrcmVmX2dldCgmZGV2LT5rcmVmKTsKKworCWlmIChmYl9kZWZpbyAmJiAoaW5mby0+ZmJkZWZpbyA9PSBOVUxMKSkgeworCQkvKiBlbmFibGUgZGVmaW8gYXQgbGFzdCBtb21lbnQgaWYgbm90IGRpc2FibGVkIGJ5IGNsaWVudCAqLworCisJCXN0cnVjdCBmYl9kZWZlcnJlZF9pbyAqZmJkZWZpbzsKKworCQlmYmRlZmlvID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGZiX2RlZmVycmVkX2lvKSwgR0ZQX0tFUk5FTCk7CisKKwkJaWYgKGZiZGVmaW8pIHsKKwkJCWZiZGVmaW8tPmRlbGF5ID0gRExfREVGSU9fV1JJVEVfREVMQVk7CisJCQlmYmRlZmlvLT5kZWZlcnJlZF9pbyA9IGRsZmJfZHB5X2RlZmVycmVkX2lvOworCQl9CisKKwkJaW5mby0+ZmJkZWZpbyA9IGZiZGVmaW87CisJCWZiX2RlZmVycmVkX2lvX2luaXQoaW5mbyk7CisJfQorCisJcHJfbm90aWNlKCJvcGVuIC9kZXYvZmIlZCB1c2VyPSVkIGZiX2luZm89JXAgY291bnQ9JWRcbiIsCisJICAgIGluZm8tPm5vZGUsIHVzZXIsIGluZm8sIGRldi0+ZmJfY291bnQpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBDYWxsZWQgd2hlbiBhbGwgY2xpZW50IGludGVyZmFjZXMgdG8gc3RhcnQgdHJhbnNhY3Rpb25zIGhhdmUgYmVlbiBkaXNhYmxlZCwKKyAqIGFuZCBhbGwgcmVmZXJlbmNlcyB0byBvdXIgZGV2aWNlIGluc3RhbmNlIChkbGZiX2RhdGEpIGFyZSByZWxlYXNlZC4KKyAqIEV2ZXJ5IHRyYW5zYWN0aW9uIG11c3QgaGF2ZSBhIHJlZmVyZW5jZSwgc28gd2Uga25vdyBhcmUgZnVsbHkgc3B1biBkb3duCisgKi8KK3N0YXRpYyB2b2lkIGRsZmJfZnJlZShzdHJ1Y3Qga3JlZiAqa3JlZikKK3sKKwlzdHJ1Y3QgZGxmYl9kYXRhICpkZXYgPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IGRsZmJfZGF0YSwga3JlZik7CisKKwkvKiB0aGlzIGZ1bmN0aW9uIHdpbGwgd2FpdCBmb3IgYWxsIGluLWZsaWdodCB1cmJzIHRvIGNvbXBsZXRlICovCisJaWYgKGRldi0+dXJicy5jb3VudCA+IDApCisJCWRsZmJfZnJlZV91cmJfbGlzdChkZXYpOworCisJaWYgKGRldi0+YmFja2luZ19idWZmZXIpCisJCXZmcmVlKGRldi0+YmFja2luZ19idWZmZXIpOworCisJa2ZyZWUoZGV2LT5lZGlkKTsKKworCXByX3dhcm4oImZyZWVpbmcgZGxmYl9kYXRhICVwXG4iLCBkZXYpOworCisJa2ZyZWUoZGV2KTsKK30KKworc3RhdGljIHZvaWQgZGxmYl9yZWxlYXNlX3VyYl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgdXJiX25vZGUgKnVub2RlID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB1cmJfbm9kZSwKKwkJCQkJICAgICAgcmVsZWFzZV91cmJfd29yay53b3JrKTsKKworCXVwKCZ1bm9kZS0+ZGV2LT51cmJzLmxpbWl0X3NlbSk7Cit9CisKK3N0YXRpYyB2b2lkIGRsZmJfZnJlZV9mcmFtZWJ1ZmZlcl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgZGxmYl9kYXRhICpkZXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGRsZmJfZGF0YSwKKwkJCQkJICAgICBmcmVlX2ZyYW1lYnVmZmVyX3dvcmsud29yayk7CisJc3RydWN0IGZiX2luZm8gKmluZm8gPSBkZXYtPmluZm87CisJaW50IG5vZGUgPSBpbmZvLT5ub2RlOworCisJdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKTsKKworCWlmIChpbmZvLT5jbWFwLmxlbiAhPSAwKQorCQlmYl9kZWFsbG9jX2NtYXAoJmluZm8tPmNtYXApOworCWlmIChpbmZvLT5tb25zcGVjcy5tb2RlZGIpCisJCWZiX2Rlc3Ryb3lfbW9kZWRiKGluZm8tPm1vbnNwZWNzLm1vZGVkYik7CisJaWYgKGluZm8tPnNjcmVlbl9iYXNlKQorCQl2ZnJlZShpbmZvLT5zY3JlZW5fYmFzZSk7CisKKwlmYl9kZXN0cm95X21vZGVsaXN0KCZpbmZvLT5tb2RlbGlzdCk7CisKKwlkZXYtPmluZm8gPSAwOworCisJLyogQXNzdW1lIGluZm8gc3RydWN0dXJlIGlzIGZyZWVkIGFmdGVyIHRoaXMgcG9pbnQgKi8KKwlmcmFtZWJ1ZmZlcl9yZWxlYXNlKGluZm8pOworCisJcHJfd2FybigiZmJfaW5mbyBmb3IgL2Rldi9mYiVkIGhhcyBiZWVuIGZyZWVkXG4iLCBub2RlKTsKKworCS8qIHJlZiB0YWtlbiBpbiBwcm9iZSgpIGFzIHBhcnQgb2YgcmVnaXN0ZXJpbmcgZnJhbWViZnVmZXIgKi8KKwlrcmVmX3B1dCgmZGV2LT5rcmVmLCBkbGZiX2ZyZWUpOworfQorCisvKgorICogQXNzdW1lcyBjYWxsZXIgaXMgaG9sZGluZyBpbmZvLT5sb2NrIG11dGV4IChmb3Igb3BlbiBhbmQgcmVsZWFzZSBhdCBsZWFzdCkKKyAqLworc3RhdGljIGludCBkbGZiX29wc19yZWxlYXNlKHN0cnVjdCBmYl9pbmZvICppbmZvLCBpbnQgdXNlcikKK3sKKwlzdHJ1Y3QgZGxmYl9kYXRhICpkZXYgPSBpbmZvLT5wYXI7CisKKwlkZXYtPmZiX2NvdW50LS07CisKKwkvKiBXZSBjYW4ndCBmcmVlIGZiX2luZm8gaGVyZSAtIGZibWVtIHdpbGwgdG91Y2ggaXQgd2hlbiB3ZSByZXR1cm4gKi8KKwlpZiAoZGV2LT52aXJ0dWFsaXplZCAmJiAoZGV2LT5mYl9jb3VudCA9PSAwKSkKKwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZkZXYtPmZyZWVfZnJhbWVidWZmZXJfd29yaywgSFopOworCisJaWYgKChkZXYtPmZiX2NvdW50ID09IDApICYmIChpbmZvLT5mYmRlZmlvKSkgeworCQlmYl9kZWZlcnJlZF9pb19jbGVhbnVwKGluZm8pOworCQlrZnJlZShpbmZvLT5mYmRlZmlvKTsKKwkJaW5mby0+ZmJkZWZpbyA9IE5VTEw7CisJCWluZm8tPmZib3BzLT5mYl9tbWFwID0gZGxmYl9vcHNfbW1hcDsKKwl9CisKKwlwcl93YXJuKCJyZWxlYXNlZCAvZGV2L2ZiJWQgdXNlcj0lZCBjb3VudD0lZFxuIiwKKwkJICBpbmZvLT5ub2RlLCB1c2VyLCBkZXYtPmZiX2NvdW50KTsKKworCWtyZWZfcHV0KCZkZXYtPmtyZWYsIGRsZmJfZnJlZSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIENoZWNrIHdoZXRoZXIgYSB2aWRlbyBtb2RlIGlzIHN1cHBvcnRlZCBieSB0aGUgRGlzcGxheUxpbmsgY2hpcAorICogV2Ugc3RhcnQgZnJvbSBtb25pdG9yJ3MgbW9kZXMsIHNvIGRvbid0IG5lZWQgdG8gZmlsdGVyIHRoYXQgaGVyZQorICovCitzdGF0aWMgaW50IGRsZmJfaXNfdmFsaWRfbW9kZShzdHJ1Y3QgZmJfdmlkZW9tb2RlICptb2RlLAorCQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgZGxmYl9kYXRhICpkZXYgPSBpbmZvLT5wYXI7CisKKwlpZiAobW9kZS0+eHJlcyAqIG1vZGUtPnlyZXMgPiBkZXYtPnNrdV9waXhlbF9saW1pdCkgeworCQlwcl93YXJuKCIlZHglZCBiZXlvbmQgY2hpcCBjYXBhYmlsaXRpZXNcbiIsCisJCSAgICAgICBtb2RlLT54cmVzLCBtb2RlLT55cmVzKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcHJfaW5mbygiJWR4JWQgdmFsaWQgbW9kZVxuIiwgbW9kZS0+eHJlcywgbW9kZS0+eXJlcyk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgZGxmYl92YXJfY29sb3JfZm9ybWF0KHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyKQoreworCWNvbnN0IHN0cnVjdCBmYl9iaXRmaWVsZCByZWQgPSB7IDExLCA1LCAwIH07CisJY29uc3Qgc3RydWN0IGZiX2JpdGZpZWxkIGdyZWVuID0geyA1LCA2LCAwIH07CisJY29uc3Qgc3RydWN0IGZiX2JpdGZpZWxkIGJsdWUgPSB7IDAsIDUsIDAgfTsKKworCXZhci0+Yml0c19wZXJfcGl4ZWwgPSAxNjsKKwl2YXItPnJlZCA9IHJlZDsKKwl2YXItPmdyZWVuID0gZ3JlZW47CisJdmFyLT5ibHVlID0gYmx1ZTsKK30KKworc3RhdGljIGludCBkbGZiX29wc19jaGVja192YXIoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsCisJCQkJc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJc3RydWN0IGZiX3ZpZGVvbW9kZSBtb2RlOworCisJLyogVE9ETzogc3VwcG9ydCBkeW5hbWljYWxseSBjaGFuZ2luZyBmcmFtZWJ1ZmZlciBzaXplICovCisJaWYgKCh2YXItPnhyZXMgKiB2YXItPnlyZXMgKiAyKSA+IGluZm8tPmZpeC5zbWVtX2xlbikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBzZXQgZGV2aWNlLXNwZWNpZmljIGVsZW1lbnRzIG9mIHZhciB1bnJlbGF0ZWQgdG8gbW9kZSAqLworCWRsZmJfdmFyX2NvbG9yX2Zvcm1hdCh2YXIpOworCisJZmJfdmFyX3RvX3ZpZGVvbW9kZSgmbW9kZSwgdmFyKTsKKworCWlmICghZGxmYl9pc192YWxpZF9tb2RlKCZtb2RlLCBpbmZvKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkbGZiX29wc19zZXRfcGFyKHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN0cnVjdCBkbGZiX2RhdGEgKmRldiA9IGluZm8tPnBhcjsKKwlpbnQgcmVzdWx0OworCXUxNiAqcGl4X2ZyYW1lYnVmZmVyOworCWludCBpOworCisJcHJfbm90aWNlKCJzZXRfcGFyIG1vZGUgJWR4JWRcbiIsIGluZm8tPnZhci54cmVzLCBpbmZvLT52YXIueXJlcyk7CisKKwlyZXN1bHQgPSBkbGZiX3NldF92aWRlb19tb2RlKGRldiwgJmluZm8tPnZhcik7CisKKwlpZiAoKHJlc3VsdCA9PSAwKSAmJiAoZGV2LT5mYl9jb3VudCA9PSAwKSkgeworCisJCS8qIHBhaW50IGdyZWVuc2NyZWVuICovCisKKwkJcGl4X2ZyYW1lYnVmZmVyID0gKHUxNiAqKSBpbmZvLT5zY3JlZW5fYmFzZTsKKwkJZm9yIChpID0gMDsgaSA8IGluZm8tPmZpeC5zbWVtX2xlbiAvIDI7IGkrKykKKwkJCXBpeF9mcmFtZWJ1ZmZlcltpXSA9IDB4MzdlNjsKKworCQlkbGZiX2hhbmRsZV9kYW1hZ2UoZGV2LCAwLCAwLCBpbmZvLT52YXIueHJlcywgaW5mby0+dmFyLnlyZXMsCisJCQkJICAgaW5mby0+c2NyZWVuX2Jhc2UpOworCX0KKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBJbiBvcmRlciB0byBjb21lIGJhY2sgZnJvbSBmdWxsIERQTVMgb2ZmLCB3ZSBuZWVkIHRvIHNldCB0aGUgbW9kZSBhZ2FpbgorICovCitzdGF0aWMgaW50IGRsZmJfb3BzX2JsYW5rKGludCBibGFua19tb2RlLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgZGxmYl9kYXRhICpkZXYgPSBpbmZvLT5wYXI7CisKKwlpZiAoYmxhbmtfbW9kZSAhPSBGQl9CTEFOS19VTkJMQU5LKSB7CisJCWNoYXIgKmJ1ZnB0cjsKKwkJc3RydWN0IHVyYiAqdXJiOworCisJCXVyYiA9IGRsZmJfZ2V0X3VyYihkZXYpOworCQlpZiAoIXVyYikKKwkJCXJldHVybiAwOworCisJCWJ1ZnB0ciA9IChjaGFyICopIHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCQlidWZwdHIgPSBkbGZiX3ZpZHJlZ19sb2NrKGJ1ZnB0cik7CisJCWJ1ZnB0ciA9IGRsZmJfZW5hYmxlX2h2c3luYyhidWZwdHIsIGZhbHNlKTsKKwkJYnVmcHRyID0gZGxmYl92aWRyZWdfdW5sb2NrKGJ1ZnB0cik7CisKKwkJZGxmYl9zdWJtaXRfdXJiKGRldiwgdXJiLCBidWZwdHIgLQorCQkJCShjaGFyICopIHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKwl9IGVsc2UgeworCQlkbGZiX3NldF92aWRlb19tb2RlKGRldiwgJmluZm8tPnZhcik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmJfb3BzIGRsZmJfb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5mYl9yZWFkID0gZmJfc3lzX3JlYWQsCisJLmZiX3dyaXRlID0gZGxmYl9vcHNfd3JpdGUsCisJLmZiX3NldGNvbHJlZyA9IGRsZmJfb3BzX3NldGNvbHJlZywKKwkuZmJfZmlsbHJlY3QgPSBkbGZiX29wc19maWxscmVjdCwKKwkuZmJfY29weWFyZWEgPSBkbGZiX29wc19jb3B5YXJlYSwKKwkuZmJfaW1hZ2VibGl0ID0gZGxmYl9vcHNfaW1hZ2VibGl0LAorCS5mYl9tbWFwID0gZGxmYl9vcHNfbW1hcCwKKwkuZmJfaW9jdGwgPSBkbGZiX29wc19pb2N0bCwKKwkuZmJfb3BlbiA9IGRsZmJfb3BzX29wZW4sCisJLmZiX3JlbGVhc2UgPSBkbGZiX29wc19yZWxlYXNlLAorCS5mYl9ibGFuayA9IGRsZmJfb3BzX2JsYW5rLAorCS5mYl9jaGVja192YXIgPSBkbGZiX29wc19jaGVja192YXIsCisJLmZiX3NldF9wYXIgPSBkbGZiX29wc19zZXRfcGFyLAorfTsKKworCisvKgorICogQXNzdW1lcyAmaW5mby0+bG9jayBoZWxkIGJ5IGNhbGxlcgorICogQXNzdW1lcyBubyBhY3RpdmUgY2xpZW50cyBoYXZlIGZyYW1lYnVmZmVyIG9wZW4KKyAqLworc3RhdGljIGludCBkbGZiX3JlYWxsb2NfZnJhbWVidWZmZXIoc3RydWN0IGRsZmJfZGF0YSAqZGV2LCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlpbnQgcmV0dmFsID0gLUVOT01FTTsKKwlpbnQgb2xkX2xlbiA9IGluZm8tPmZpeC5zbWVtX2xlbjsKKwlpbnQgbmV3X2xlbjsKKwl1bnNpZ25lZCBjaGFyICpvbGRfZmIgPSBpbmZvLT5zY3JlZW5fYmFzZTsKKwl1bnNpZ25lZCBjaGFyICpuZXdfZmI7CisJdW5zaWduZWQgY2hhciAqbmV3X2JhY2s7CisKKwlwcl93YXJuKCJSZWFsbG9jYXRpbmcgZnJhbWVidWZmZXIuIEFkZHJlc3NlcyB3aWxsIGNoYW5nZSFcbiIpOworCisJbmV3X2xlbiA9IGluZm8tPmZpeC5saW5lX2xlbmd0aCAqIGluZm8tPnZhci55cmVzOworCisJaWYgKFBBR0VfQUxJR04obmV3X2xlbikgPiBvbGRfbGVuKSB7CisJCS8qCisJCSAqIEFsbG9jIHN5c3RlbSBtZW1vcnkgZm9yIHZpcnR1YWwgZnJhbWVidWZmZXIKKwkJICovCisJCW5ld19mYiA9IHZtYWxsb2MobmV3X2xlbik7CisJCWlmICghbmV3X2ZiKSB7CisJCQlwcl9lcnIoIlZpcnR1YWwgZnJhbWVidWZmZXIgYWxsb2MgZmFpbGVkXG4iKTsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKworCQlpZiAoaW5mby0+c2NyZWVuX2Jhc2UpIHsKKwkJCW1lbWNweShuZXdfZmIsIG9sZF9mYiwgb2xkX2xlbik7CisJCQl2ZnJlZShpbmZvLT5zY3JlZW5fYmFzZSk7CisJCX0KKworCQlpbmZvLT5zY3JlZW5fYmFzZSA9IG5ld19mYjsKKwkJaW5mby0+Zml4LnNtZW1fbGVuID0gUEFHRV9BTElHTihuZXdfbGVuKTsKKwkJaW5mby0+Zml4LnNtZW1fc3RhcnQgPSAodW5zaWduZWQgbG9uZykgbmV3X2ZiOworCQlpbmZvLT5mbGFncyA9IHVkbGZiX2luZm9fZmxhZ3M7CisKKwkJLyoKKwkJICogU2Vjb25kIGZyYW1lYnVmZmVyIGNvcHkgdG8gbWlycm9yIHRoZSBmcmFtZWJ1ZmZlciBzdGF0ZQorCQkgKiBvbiB0aGUgcGh5c2ljYWwgVVNCIGRldmljZS4gV2UgY2FuIGZ1bmN0aW9uIHdpdGhvdXQgdGhpcy4KKwkJICogQnV0IHdpdGggaW1wZXJmZWN0IGRhbWFnZSBpbmZvIHdlIG1heSBzZW5kIHBpeGVscyBvdmVyIFVTQgorCQkgKiB0aGF0IHdlcmUsIGluIGZhY3QsIHVuY2hhbmdlZCAtIHdhc3RpbmcgbGltaXRlZCBVU0IgYmFuZHdpZHRoCisJCSAqLworCQluZXdfYmFjayA9IHZtYWxsb2MobmV3X2xlbik7CisJCWlmICghbmV3X2JhY2spCisJCQlwcl9pbmZvKCJObyBzaGFkb3cvYmFja2luZyBidWZmZXIgYWxsY29hdGVkXG4iKTsKKwkJZWxzZSB7CisJCQlpZiAoZGV2LT5iYWNraW5nX2J1ZmZlcikKKwkJCQl2ZnJlZShkZXYtPmJhY2tpbmdfYnVmZmVyKTsKKwkJCWRldi0+YmFja2luZ19idWZmZXIgPSBuZXdfYmFjazsKKwkJCW1lbXNldChkZXYtPmJhY2tpbmdfYnVmZmVyLCAwLCBuZXdfbGVuKTsKKwkJfQorCX0KKworCXJldHZhbCA9IDA7CisKK2Vycm9yOgorCXJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKiAxKSBHZXQgRURJRCBmcm9tIGh3LCBvciB1c2Ugc3cgZGVmYXVsdAorICogMikgUGFyc2UgaW50byB2YXJpb3VzIGZiX2luZm8gc3RydWN0cworICogMykgQWxsb2NhdGUgdmlydHVhbCBmcmFtZWJ1ZmZlciBtZW1vcnkgdG8gYmFjayBoaWdoZXN0IHJlcyBtb2RlCisgKgorICogUGFyc2VzIEVESUQgaW50byB0aHJlZSBwbGFjZXMgdXNlZCBieSB2YXJpb3VzIHBhcnRzIG9mIGZiZGV2OgorICogZmJfdmFyX3NjcmVlbmluZm8gY29udGFpbnMgdGhlIHRpbWluZyBvZiB0aGUgbW9uaXRvcidzIHByZWZlcnJlZCBtb2RlCisgKiBmYl9pbmZvLm1vbnNwZWNzIGlzIGZ1bGwgcGFyc2VkIEVESUQgaW5mbywgaW5jbHVkaW5nIG1vbnNwZWNzLm1vZGVkYgorICogZmJfaW5mby5tb2RlbGlzdCBpcyBhIGxpbmtlZCBsaXN0IG9mIGFsbCBtb25pdG9yICYgVkVTQSBtb2RlcyB3aGljaCB3b3JrCisgKgorICogSWYgRURJRCBpcyBub3QgcmVhZGFibGUvdmFsaWQsIHRoZW4gbW9kZWxpc3QgaXMgYWxsIFZFU0EgbW9kZXMsCisgKiBtb25zcGVjcyBpcyBOVUxMLCBhbmQgZmJfdmFyX3NjcmVlbmluZm8gaXMgc2V0IHRvIHNhZmUgVkVTQSBtb2RlCisgKiBSZXR1cm5zIDAgaWYgc3VjY2Vzc2Z1bAorICovCitzdGF0aWMgaW50IGRsZmJfc2V0dXBfbW9kZXMoc3RydWN0IGRsZmJfZGF0YSAqZGV2LAorCQkJICAgc3RydWN0IGZiX2luZm8gKmluZm8sCisJCQkgICBjaGFyICpkZWZhdWx0X2VkaWQsIHNpemVfdCBkZWZhdWx0X2VkaWRfc2l6ZSkKK3sKKwlpbnQgaTsKKwljb25zdCBzdHJ1Y3QgZmJfdmlkZW9tb2RlICpkZWZhdWx0X3Ztb2RlID0gTlVMTDsKKwlpbnQgcmVzdWx0ID0gMDsKKwljaGFyICplZGlkOworCWludCB0cmllcyA9IDM7CisKKwlpZiAoaW5mby0+ZGV2KSAvKiBvbmx5IHVzZSBtdXRleCBpZiBpbmZvIGhhcyBiZWVuIHJlZ2lzdGVyZWQgKi8KKwkJbXV0ZXhfbG9jaygmaW5mby0+bG9jayk7CisKKwllZGlkID0ga21hbGxvYyhFRElEX0xFTkdUSCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFlZGlkKSB7CisJCXJlc3VsdCA9IC1FTk9NRU07CisJCWdvdG8gZXJyb3I7CisJfQorCisJZmJfZGVzdHJveV9tb2RlbGlzdCgmaW5mby0+bW9kZWxpc3QpOworCW1lbXNldCgmaW5mby0+bW9uc3BlY3MsIDAsIHNpemVvZihpbmZvLT5tb25zcGVjcykpOworCisJLyoKKwkgKiBUcnkgdG8gKHJlKXJlYWQgRURJRCBmcm9tIGhhcmR3YXJlIGZpcnN0CisJICogRURJRCBkYXRhIG1heSByZXR1cm4sIGJ1dCBub3QgcGFyc2UgYXMgdmFsaWQKKwkgKiBUcnkgYWdhaW4gYSBmZXcgdGltZXMsIGluIGNhc2Ugb2YgZS5nLiBhbmFsb2cgY2FibGUgbm9pc2UKKwkgKi8KKwl3aGlsZSAodHJpZXMtLSkgeworCisJCWkgPSBkbGZiX2dldF9lZGlkKGRldiwgZWRpZCwgRURJRF9MRU5HVEgpOworCisJCWlmIChpID49IEVESURfTEVOR1RIKQorCQkJZmJfZWRpZF90b19tb25zcGVjcyhlZGlkLCAmaW5mby0+bW9uc3BlY3MpOworCisJCWlmIChpbmZvLT5tb25zcGVjcy5tb2RlZGJfbGVuID4gMCkgeworCQkJZGV2LT5lZGlkID0gZWRpZDsKKwkJCWRldi0+ZWRpZF9zaXplID0gaTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyogSWYgdGhhdCBmYWlscywgdXNlIGEgcHJldmlvdXNseSByZXR1cm5lZCBFRElEIGlmIGF2YWlsYWJsZSAqLworCWlmIChpbmZvLT5tb25zcGVjcy5tb2RlZGJfbGVuID09IDApIHsKKworCQlwcl9lcnIoIlVuYWJsZSB0byBnZXQgdmFsaWQgRURJRCBmcm9tIGRldmljZS9kaXNwbGF5XG4iKTsKKworCQlpZiAoZGV2LT5lZGlkKSB7CisJCQlmYl9lZGlkX3RvX21vbnNwZWNzKGRldi0+ZWRpZCwgJmluZm8tPm1vbnNwZWNzKTsKKwkJCWlmIChpbmZvLT5tb25zcGVjcy5tb2RlZGJfbGVuID4gMCkKKwkJCQlwcl9lcnIoIlVzaW5nIHByZXZpb3VzbHkgcXVlcmllZCBFRElEXG4iKTsKKwkJfQorCX0KKworCS8qIElmIHRoYXQgZmFpbHMsIHVzZSB0aGUgZGVmYXVsdCBFRElEIHdlIHdlcmUgaGFuZGVkICovCisJaWYgKGluZm8tPm1vbnNwZWNzLm1vZGVkYl9sZW4gPT0gMCkgeworCQlpZiAoZGVmYXVsdF9lZGlkX3NpemUgPj0gRURJRF9MRU5HVEgpIHsKKwkJCWZiX2VkaWRfdG9fbW9uc3BlY3MoZGVmYXVsdF9lZGlkLCAmaW5mby0+bW9uc3BlY3MpOworCQkJaWYgKGluZm8tPm1vbnNwZWNzLm1vZGVkYl9sZW4gPiAwKSB7CisJCQkJbWVtY3B5KGVkaWQsIGRlZmF1bHRfZWRpZCwgZGVmYXVsdF9lZGlkX3NpemUpOworCQkJCWRldi0+ZWRpZCA9IGVkaWQ7CisJCQkJZGV2LT5lZGlkX3NpemUgPSBkZWZhdWx0X2VkaWRfc2l6ZTsKKwkJCQlwcl9lcnIoIlVzaW5nIGRlZmF1bHQvYmFja3VwIEVESURcbiIpOworCQkJfQorCQl9CisJfQorCisJLyogSWYgd2UndmUgZ290IG1vZGVzLCBsZXQncyBwaWNrIGEgYmVzdCBkZWZhdWx0IG1vZGUgKi8KKwlpZiAoaW5mby0+bW9uc3BlY3MubW9kZWRiX2xlbiA+IDApIHsKKworCQlmb3IgKGkgPSAwOyBpIDwgaW5mby0+bW9uc3BlY3MubW9kZWRiX2xlbjsgaSsrKSB7CisJCQlpZiAoZGxmYl9pc192YWxpZF9tb2RlKCZpbmZvLT5tb25zcGVjcy5tb2RlZGJbaV0sIGluZm8pKQorCQkJCWZiX2FkZF92aWRlb21vZGUoJmluZm8tPm1vbnNwZWNzLm1vZGVkYltpXSwKKwkJCQkJJmluZm8tPm1vZGVsaXN0KTsKKwkJCWVsc2UgLyogaWYgd2UndmUgcmVtb3ZlZCB0b3AvYmVzdCBtb2RlICovCisJCQkJaW5mby0+bW9uc3BlY3MubWlzYyAmPSB+RkJfTUlTQ18xU1RfREVUQUlMOworCQl9CisKKwkJZGVmYXVsdF92bW9kZSA9IGZiX2ZpbmRfYmVzdF9kaXNwbGF5KCZpbmZvLT5tb25zcGVjcywKKwkJCQkJCSAgICAgJmluZm8tPm1vZGVsaXN0KTsKKwl9CisKKwkvKiBJZiBldmVyeXRoaW5nIGVsc2UgaGFzIGZhaWxlZCwgZmFsbCBiYWNrIHRvIHNhZmUgZGVmYXVsdCBtb2RlICovCisJaWYgKGRlZmF1bHRfdm1vZGUgPT0gTlVMTCkgeworCisJCXN0cnVjdCBmYl92aWRlb21vZGUgZmJfdm1vZGUgPSB7MH07CisKKwkJLyoKKwkJICogQWRkIHRoZSBzdGFuZGFyZCBWRVNBIG1vZGVzIHRvIG91ciBtb2RlbGlzdAorCQkgKiBTaW5jZSB3ZSBkb24ndCBoYXZlIEVESUQsIHRoZXJlIG1heSBiZSBtb2RlcyB0aGF0CisJCSAqIG92ZXJzcGVjIG1vbml0b3IgYW5kL29yIGFyZSBpbmNvcnJlY3QgYXNwZWN0IHJhdGlvLCBldGMuCisJCSAqIEJ1dCBhdCBsZWFzdCB0aGUgdXNlciBoYXMgYSBjaGFuY2UgdG8gY2hvb3NlCisJCSAqLworCQlmb3IgKGkgPSAwOyBpIDwgVkVTQV9NT0RFREJfU0laRTsgaSsrKSB7CisJCQlpZiAoZGxmYl9pc192YWxpZF9tb2RlKChzdHJ1Y3QgZmJfdmlkZW9tb2RlICopCisJCQkJCQkmdmVzYV9tb2Rlc1tpXSwgaW5mbykpCisJCQkJZmJfYWRkX3ZpZGVvbW9kZSgmdmVzYV9tb2Rlc1tpXSwKKwkJCQkJCSAmaW5mby0+bW9kZWxpc3QpOworCQl9CisKKwkJLyoKKwkJICogZGVmYXVsdCB0byByZXNvbHV0aW9uIHNhZmUgZm9yIHByb2plY3RvcnMKKwkJICogKHNpbmNlIHRoZXkgYXJlIG1vc3QgY29tbW9uIGNhc2Ugd2l0aG91dCBFRElEKQorCQkgKi8KKwkJZmJfdm1vZGUueHJlcyA9IDgwMDsKKwkJZmJfdm1vZGUueXJlcyA9IDYwMDsKKwkJZmJfdm1vZGUucmVmcmVzaCA9IDYwOworCQlkZWZhdWx0X3Ztb2RlID0gZmJfZmluZF9uZWFyZXN0X21vZGUoJmZiX3Ztb2RlLAorCQkJCQkJICAgICAmaW5mby0+bW9kZWxpc3QpOworCX0KKworCS8qIElmIHdlIGhhdmUgZ29vZCBtb2RlIGFuZCBubyBhY3RpdmUgY2xpZW50cyovCisJaWYgKChkZWZhdWx0X3Ztb2RlICE9IE5VTEwpICYmIChkZXYtPmZiX2NvdW50ID09IDApKSB7CisKKwkJZmJfdmlkZW9tb2RlX3RvX3ZhcigmaW5mby0+dmFyLCBkZWZhdWx0X3Ztb2RlKTsKKwkJZGxmYl92YXJfY29sb3JfZm9ybWF0KCZpbmZvLT52YXIpOworCisJCS8qCisJCSAqIHdpdGggbW9kZSBzaXplIGluZm8sIHdlIGNhbiBub3cgYWxsb2Mgb3VyIGZyYW1lYnVmZmVyLgorCQkgKi8KKwkJbWVtY3B5KCZpbmZvLT5maXgsICZkbGZiX2ZpeCwgc2l6ZW9mKGRsZmJfZml4KSk7CisJCWluZm8tPmZpeC5saW5lX2xlbmd0aCA9IGluZm8tPnZhci54cmVzICoKKwkJCShpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwgLyA4KTsKKworCQlyZXN1bHQgPSBkbGZiX3JlYWxsb2NfZnJhbWVidWZmZXIoZGV2LCBpbmZvKTsKKworCX0gZWxzZQorCQlyZXN1bHQgPSAtRUlOVkFMOworCitlcnJvcjoKKwlpZiAoZWRpZCAmJiAoZGV2LT5lZGlkICE9IGVkaWQpKQorCQlrZnJlZShlZGlkKTsKKworCWlmIChpbmZvLT5kZXYpCisJCW11dGV4X3VubG9jaygmaW5mby0+bG9jayk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgc3NpemVfdCBtZXRyaWNzX2J5dGVzX3JlbmRlcmVkX3Nob3coc3RydWN0IGRldmljZSAqZmJkZXYsCisJCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmEsIGNoYXIgKmJ1ZikgeworCXN0cnVjdCBmYl9pbmZvICpmYl9pbmZvID0gZGV2X2dldF9kcnZkYXRhKGZiZGV2KTsKKwlzdHJ1Y3QgZGxmYl9kYXRhICpkZXYgPSBmYl9pbmZvLT5wYXI7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXVcbiIsCisJCQlhdG9taWNfcmVhZCgmZGV2LT5ieXRlc19yZW5kZXJlZCkpOworfQorCitzdGF0aWMgc3NpemVfdCBtZXRyaWNzX2J5dGVzX2lkZW50aWNhbF9zaG93KHN0cnVjdCBkZXZpY2UgKmZiZGV2LAorCQkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphLCBjaGFyICpidWYpIHsKKwlzdHJ1Y3QgZmJfaW5mbyAqZmJfaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShmYmRldik7CisJc3RydWN0IGRsZmJfZGF0YSAqZGV2ID0gZmJfaW5mby0+cGFyOworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiV1XG4iLAorCQkJYXRvbWljX3JlYWQoJmRldi0+Ynl0ZXNfaWRlbnRpY2FsKSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IG1ldHJpY3NfYnl0ZXNfc2VudF9zaG93KHN0cnVjdCBkZXZpY2UgKmZiZGV2LAorCQkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphLCBjaGFyICpidWYpIHsKKwlzdHJ1Y3QgZmJfaW5mbyAqZmJfaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShmYmRldik7CisJc3RydWN0IGRsZmJfZGF0YSAqZGV2ID0gZmJfaW5mby0+cGFyOworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiV1XG4iLAorCQkJYXRvbWljX3JlYWQoJmRldi0+Ynl0ZXNfc2VudCkpOworfQorCitzdGF0aWMgc3NpemVfdCBtZXRyaWNzX2NwdV9rY3ljbGVzX3VzZWRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpmYmRldiwKKwkJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYSwgY2hhciAqYnVmKSB7CisJc3RydWN0IGZiX2luZm8gKmZiX2luZm8gPSBkZXZfZ2V0X2RydmRhdGEoZmJkZXYpOworCXN0cnVjdCBkbGZiX2RhdGEgKmRldiA9IGZiX2luZm8tPnBhcjsKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIldVxuIiwKKwkJCWF0b21pY19yZWFkKCZkZXYtPmNwdV9rY3ljbGVzX3VzZWQpKTsKK30KKworc3RhdGljIHNzaXplX3QgZWRpZF9zaG93KAorCQkJc3RydWN0IGZpbGUgKmZpbHAsCisJCQlzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmEsCisJCQkgY2hhciAqYnVmLCBsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpIHsKKwlzdHJ1Y3QgZGV2aWNlICpmYmRldiA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGV2aWNlLCBrb2JqKTsKKwlzdHJ1Y3QgZmJfaW5mbyAqZmJfaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShmYmRldik7CisJc3RydWN0IGRsZmJfZGF0YSAqZGV2ID0gZmJfaW5mby0+cGFyOworCisJaWYgKGRldi0+ZWRpZCA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCWlmICgob2ZmID49IGRldi0+ZWRpZF9zaXplKSB8fCAoY291bnQgPiBkZXYtPmVkaWRfc2l6ZSkpCisJCXJldHVybiAwOworCisJaWYgKG9mZiArIGNvdW50ID4gZGV2LT5lZGlkX3NpemUpCisJCWNvdW50ID0gZGV2LT5lZGlkX3NpemUgLSBvZmY7CisKKwlwcl9pbmZvKCJzeXNmcyBlZGlkIGNvcHkgJXAgdG8gJXAsICVkIGJ5dGVzXG4iLAorCQlkZXYtPmVkaWQsIGJ1ZiwgKGludCkgY291bnQpOworCisJbWVtY3B5KGJ1ZiwgZGV2LT5lZGlkLCBjb3VudCk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGVkaWRfc3RvcmUoCisJCQlzdHJ1Y3QgZmlsZSAqZmlscCwKKwkJCXN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYSwKKwkJCWNoYXIgKnNyYywgbG9mZl90IHNyY19vZmYsIHNpemVfdCBzcmNfc2l6ZSkgeworCXN0cnVjdCBkZXZpY2UgKmZiZGV2ID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkZXZpY2UsIGtvYmopOworCXN0cnVjdCBmYl9pbmZvICpmYl9pbmZvID0gZGV2X2dldF9kcnZkYXRhKGZiZGV2KTsKKwlzdHJ1Y3QgZGxmYl9kYXRhICpkZXYgPSBmYl9pbmZvLT5wYXI7CisKKwkvKiBXZSBvbmx5IHN1cHBvcnQgd3JpdGUgb2YgZW50aXJlIEVESUQgYXQgb25jZSwgbm8gb2Zmc2V0Ki8KKwlpZiAoKHNyY19zaXplICE9IEVESURfTEVOR1RIKSB8fCAoc3JjX29mZiAhPSAwKSkKKwkJcmV0dXJuIDA7CisKKwlkbGZiX3NldHVwX21vZGVzKGRldiwgZmJfaW5mbywgc3JjLCBzcmNfc2l6ZSk7CisKKwlpZiAoZGV2LT5lZGlkICYmIChtZW1jbXAoc3JjLCBkZXYtPmVkaWQsIHNyY19zaXplKSA9PSAwKSkgeworCQlwcl9pbmZvKCJzeXNmcyB3cml0dGVuIEVESUQgaXMgbmV3IGRlZmF1bHRcbiIpOworCQlkbGZiX29wc19zZXRfcGFyKGZiX2luZm8pOworCQlyZXR1cm4gc3JjX3NpemU7CisJfSBlbHNlCisJCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCBtZXRyaWNzX3Jlc2V0X3N0b3JlKHN0cnVjdCBkZXZpY2UgKmZiZGV2LAorCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgZmJfaW5mbyAqZmJfaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShmYmRldik7CisJc3RydWN0IGRsZmJfZGF0YSAqZGV2ID0gZmJfaW5mby0+cGFyOworCisJYXRvbWljX3NldCgmZGV2LT5ieXRlc19yZW5kZXJlZCwgMCk7CisJYXRvbWljX3NldCgmZGV2LT5ieXRlc19pZGVudGljYWwsIDApOworCWF0b21pY19zZXQoJmRldi0+Ynl0ZXNfc2VudCwgMCk7CisJYXRvbWljX3NldCgmZGV2LT5jcHVfa2N5Y2xlc191c2VkLCAwKTsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHN0cnVjdCBiaW5fYXR0cmlidXRlIGVkaWRfYXR0ciA9IHsKKwkuYXR0ci5uYW1lID0gImVkaWQiLAorCS5hdHRyLm1vZGUgPSAwNjY2LAorCS5zaXplID0gRURJRF9MRU5HVEgsCisJLnJlYWQgPSBlZGlkX3Nob3csCisJLndyaXRlID0gZWRpZF9zdG9yZQorfTsKKworc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGZiX2RldmljZV9hdHRyc1tdID0geworCV9fQVRUUl9STyhtZXRyaWNzX2J5dGVzX3JlbmRlcmVkKSwKKwlfX0FUVFJfUk8obWV0cmljc19ieXRlc19pZGVudGljYWwpLAorCV9fQVRUUl9STyhtZXRyaWNzX2J5dGVzX3NlbnQpLAorCV9fQVRUUl9STyhtZXRyaWNzX2NwdV9rY3ljbGVzX3VzZWQpLAorCV9fQVRUUihtZXRyaWNzX3Jlc2V0LCBTX0lXVVNSLCBOVUxMLCBtZXRyaWNzX3Jlc2V0X3N0b3JlKSwKK307CisKKy8qCisgKiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWZvcmUgd2UgY2FuIGNvbW11bmljYXRlIHdpdGggdGhlIGRpc3BsYXkgY29udHJvbGxlci4KKyAqLworc3RhdGljIGludCBkbGZiX3NlbGVjdF9zdGRfY2hhbm5lbChzdHJ1Y3QgZGxmYl9kYXRhICpkZXYpCit7CisJaW50IHJldDsKKwl1OCBzZXRfZGVmX2NobltdID0gewkgICAweDU3LCAweENELCAweERDLCAweEE3LAorCQkJCTB4MUMsIDB4ODgsIDB4NUUsIDB4MTUsCisJCQkJMHg2MCwgMHhGRSwgMHhDNiwgMHg5NywKKwkJCQkweDE2LCAweDNELCAweDQ3LCAweEYyICB9OworCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldi0+dWRldiwgdXNiX3NuZGN0cmxwaXBlKGRldi0+dWRldiwgMCksCisJCQlOUl9VU0JfUkVRVUVTVF9DSEFOTkVMLAorCQkJKFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SKSwgMCwgMCwKKwkJCXNldF9kZWZfY2huLCBzaXplb2Yoc2V0X2RlZl9jaG4pLCBVU0JfQ1RSTF9TRVRfVElNRU9VVCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBkbGZiX3BhcnNlX3ZlbmRvcl9kZXNjcmlwdG9yKHN0cnVjdCBkbGZiX2RhdGEgKmRldiwKKwkJCQkJc3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldikKK3sKKwljaGFyICpkZXNjOworCWNoYXIgKmJ1ZjsKKwljaGFyICpkZXNjX2VuZDsKKworCXU4IHRvdGFsX2xlbiA9IDA7CisKKwlidWYgPSBremFsbG9jKE1BWF9WRU5ET1JfREVTQ1JJUFRPUl9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIGZhbHNlOworCWRlc2MgPSBidWY7CisKKwl0b3RhbF9sZW4gPSB1c2JfZ2V0X2Rlc2NyaXB0b3IodXNiZGV2LCAweDVmLCAvKiB2ZW5kb3Igc3BlY2lmaWMgKi8KKwkJCQkgICAgMCwgZGVzYywgTUFYX1ZFTkRPUl9ERVNDUklQVE9SX1NJWkUpOworCWlmICh0b3RhbF9sZW4gPiA1KSB7CisJCXByX2luZm8oInZlbmRvciBkZXNjcmlwdG9yIGxlbmd0aDoleCBkYXRhOiUwMnggJTAyeCAlMDJ4ICUwMngiIFwKKwkJCSIlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4XG4iLAorCQkJdG90YWxfbGVuLCBkZXNjWzBdLAorCQkJZGVzY1sxXSwgZGVzY1syXSwgZGVzY1szXSwgZGVzY1s0XSwgZGVzY1s1XSwgZGVzY1s2XSwKKwkJCWRlc2NbN10sIGRlc2NbOF0sIGRlc2NbOV0sIGRlc2NbMTBdKTsKKworCQlpZiAoKGRlc2NbMF0gIT0gdG90YWxfbGVuKSB8fCAvKiBkZXNjcmlwdG9yIGxlbmd0aCAqLworCQkgICAgKGRlc2NbMV0gIT0gMHg1ZikgfHwgICAvKiB2ZW5kb3IgZGVzY3JpcHRvciB0eXBlICovCisJCSAgICAoZGVzY1syXSAhPSAweDAxKSB8fCAgIC8qIHZlcnNpb24gKDIgYnl0ZXMpICovCisJCSAgICAoZGVzY1szXSAhPSAweDAwKSB8fAorCQkgICAgKGRlc2NbNF0gIT0gdG90YWxfbGVuIC0gMikpIC8qIGxlbmd0aCBhZnRlciB0eXBlICovCisJCQlnb3RvIHVucmVjb2duaXplZDsKKworCQlkZXNjX2VuZCA9IGRlc2MgKyB0b3RhbF9sZW47CisJCWRlc2MgKz0gNTsgLyogdGhlIGZpeGVkIGhlYWRlciB3ZSd2ZSBhbHJlYWR5IHBhcnNlZCAqLworCisJCXdoaWxlIChkZXNjIDwgZGVzY19lbmQpIHsKKwkJCXU4IGxlbmd0aDsKKwkJCXUxNiBrZXk7CisKKwkJCWtleSA9ICooKHUxNiAqKSBkZXNjKTsKKwkJCWRlc2MgKz0gc2l6ZW9mKHUxNik7CisJCQlsZW5ndGggPSAqZGVzYzsKKwkJCWRlc2MrKzsKKworCQkJc3dpdGNoIChrZXkpIHsKKwkJCWNhc2UgMHgwMjAwOiB7IC8qIG1heF9hcmVhICovCisJCQkJdTMyIG1heF9hcmVhOworCQkJCW1heF9hcmVhID0gbGUzMl90b19jcHUoKigodTMyICopZGVzYykpOworCQkJCXByX3dhcm4oIkRMIGNoaXAgbGltaXRlZCB0byAlZCBwaXhlbCBtb2Rlc1xuIiwKKwkJCQkJbWF4X2FyZWEpOworCQkJCWRldi0+c2t1X3BpeGVsX2xpbWl0ID0gbWF4X2FyZWE7CisJCQkJYnJlYWs7CisJCQl9CisJCQlkZWZhdWx0OgorCQkJCWJyZWFrOworCQkJfQorCQkJZGVzYyArPSBsZW5ndGg7CisJCX0KKwl9CisKKwlnb3RvIHN1Y2Nlc3M7CisKK3VucmVjb2duaXplZDoKKwkvKiBhbGxvdyB1ZGxmYiB0byBsb2FkIGZvciBub3cgZXZlbiBpZiBmaXJtd2FyZSB1bnJlY29nbml6ZWQgKi8KKwlwcl9lcnIoIlVucmVjb2duaXplZCB2ZW5kb3IgZmlybXdhcmUgZGVzY3JpcHRvclxuIik7CisKK3N1Y2Nlc3M6CisJa2ZyZWUoYnVmKTsKKwlyZXR1cm4gdHJ1ZTsKK30KK3N0YXRpYyBpbnQgZGxmYl91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwKKwkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2OworCXN0cnVjdCBkbGZiX2RhdGEgKmRldiA9IDA7CisJc3RydWN0IGZiX2luZm8gKmluZm8gPSAwOworCWludCByZXR2YWwgPSAtRU5PTUVNOworCWludCBpOworCisJLyogdXNiIGluaXRpYWxpemF0aW9uICovCisKKwl1c2JkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGVyZmFjZSk7CisKKwlkZXYgPSBremFsbG9jKHNpemVvZigqZGV2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGRldiA9PSBOVUxMKSB7CisJCWVycigiZGxmYl91c2JfcHJvYmU6IGZhaWxlZCBhbGxvYyBvZiBkZXYgc3RydWN0XG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwkvKiB3ZSBuZWVkIHRvIHdhaXQgZm9yIGJvdGggdXNiIGFuZCBmYmRldiB0byBzcGluIGRvd24gb24gZGlzY29ubmVjdCAqLworCWtyZWZfaW5pdCgmZGV2LT5rcmVmKTsgLyogbWF0Y2hpbmcga3JlZl9wdXQgaW4gdXNiIC5kaXNjb25uZWN0IGZuICovCisJa3JlZl9nZXQoJmRldi0+a3JlZik7IC8qIG1hdGNoaW5nIGtyZWZfcHV0IGluIGZyZWVfZnJhbWVidWZmZXJfd29yayAqLworCisJZGV2LT51ZGV2ID0gdXNiZGV2OworCWRldi0+Z2RldiA9ICZ1c2JkZXYtPmRldjsgLyogb3VyIGdlbmVyaWMgc3RydWN0IGRldmljZSAqICovCisJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIGRldik7CisKKwlwcl9pbmZvKCIlcyAlcyAtIHNlcmlhbCAjJXNcbiIsCisJCXVzYmRldi0+bWFudWZhY3R1cmVyLCB1c2JkZXYtPnByb2R1Y3QsIHVzYmRldi0+c2VyaWFsKTsKKwlwcl9pbmZvKCJ2aWRfJTA0eCZwaWRfJTA0eCZyZXZfJTA0eCBkcml2ZXIncyBkbGZiX2RhdGEgc3RydWN0IGF0ICVwXG4iLAorCQl1c2JkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IsIHVzYmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QsCisJCXVzYmRldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UsIGRldik7CisJcHJfaW5mbygiY29uc29sZSBlbmFibGU9JWRcbiIsIGNvbnNvbGUpOworCXByX2luZm8oImZiX2RlZmlvIGVuYWJsZT0lZFxuIiwgZmJfZGVmaW8pOworCisJZGV2LT5za3VfcGl4ZWxfbGltaXQgPSAyMDQ4ICogMTE1MjsgLyogZGVmYXVsdCB0byBtYXhpbXVtICovCisKKwlpZiAoIWRsZmJfcGFyc2VfdmVuZG9yX2Rlc2NyaXB0b3IoZGV2LCB1c2JkZXYpKSB7CisJCXByX2VycigiZmlybXdhcmUgbm90IHJlY29nbml6ZWQuIEFzc3VtZSBpbmNvbXBhdGlibGUgZGV2aWNlXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlpZiAoIWRsZmJfYWxsb2NfdXJiX2xpc3QoZGV2LCBXUklURVNfSU5fRkxJR0hULCBNQVhfVFJBTlNGRVIpKSB7CisJCXJldHZhbCA9IC1FTk9NRU07CisJCXByX2VycigiZGxmYl9hbGxvY191cmJfbGlzdCBmYWlsZWRcbiIpOworCQlnb3RvIGVycm9yOworCX0KKworCS8qIFdlIGRvbid0IHJlZ2lzdGVyIGEgbmV3IFVTQiBjbGFzcy4gT3VyIGNsaWVudCBpbnRlcmZhY2UgaXMgZmJkZXYgKi8KKworCS8qIGFsbG9jYXRlcyBmcmFtZWJ1ZmZlciBkcml2ZXIgc3RydWN0dXJlLCBub3QgZnJhbWVidWZmZXIgbWVtb3J5ICovCisJaW5mbyA9IGZyYW1lYnVmZmVyX2FsbG9jKDAsICZ1c2JkZXYtPmRldik7CisJaWYgKCFpbmZvKSB7CisJCXJldHZhbCA9IC1FTk9NRU07CisJCXByX2VycigiZnJhbWVidWZmZXJfYWxsb2MgZmFpbGVkXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlkZXYtPmluZm8gPSBpbmZvOworCWluZm8tPnBhciA9IGRldjsKKwlpbmZvLT5wc2V1ZG9fcGFsZXR0ZSA9IGRldi0+cHNldWRvX3BhbGV0dGU7CisJaW5mby0+ZmJvcHMgPSAmZGxmYl9vcHM7CisKKwlyZXR2YWwgPSBmYl9hbGxvY19jbWFwKCZpbmZvLT5jbWFwLCAyNTYsIDApOworCWlmIChyZXR2YWwgPCAwKSB7CisJCXByX2VycigiZmJfYWxsb2NfY21hcCBmYWlsZWQgJXhcbiIsIHJldHZhbCk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJSU5JVF9ERUxBWUVEX1dPUksoJmRldi0+ZnJlZV9mcmFtZWJ1ZmZlcl93b3JrLAorCQkJICBkbGZiX2ZyZWVfZnJhbWVidWZmZXJfd29yayk7CisKKwlJTklUX0xJU1RfSEVBRCgmaW5mby0+bW9kZWxpc3QpOworCisJcmV0dmFsID0gZGxmYl9zZXR1cF9tb2RlcyhkZXYsIGluZm8sIE5VTEwsIDApOworCWlmIChyZXR2YWwgIT0gMCkgeworCQlwcl9lcnIoInVuYWJsZSB0byBmaW5kIGNvbW1vbiBtb2RlIGZvciBkaXNwbGF5IGFuZCBhZGFwdGVyXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwkvKiByZWFkeSB0byBiZWdpbiB1c2luZyBkZXZpY2UgKi8KKworCWF0b21pY19zZXQoJmRldi0+dXNiX2FjdGl2ZSwgMSk7CisJZGxmYl9zZWxlY3Rfc3RkX2NoYW5uZWwoZGV2KTsKKworCWRsZmJfb3BzX2NoZWNrX3ZhcigmaW5mby0+dmFyLCBpbmZvKTsKKwlkbGZiX29wc19zZXRfcGFyKGluZm8pOworCisJcmV0dmFsID0gcmVnaXN0ZXJfZnJhbWVidWZmZXIoaW5mbyk7CisJaWYgKHJldHZhbCA8IDApIHsKKwkJcHJfZXJyKCJyZWdpc3Rlcl9mcmFtZWJ1ZmZlciBmYWlsZWQgJWRcbiIsIHJldHZhbCk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZmJfZGV2aWNlX2F0dHJzKTsgaSsrKQorCQlkZXZpY2VfY3JlYXRlX2ZpbGUoaW5mby0+ZGV2LCAmZmJfZGV2aWNlX2F0dHJzW2ldKTsKKworCWRldmljZV9jcmVhdGVfYmluX2ZpbGUoaW5mby0+ZGV2LCAmZWRpZF9hdHRyKTsKKworCXByX2luZm8oIkRpc3BsYXlMaW5rIFVTQiBkZXZpY2UgL2Rldi9mYiVkIGF0dGFjaGVkLiAlZHglZCByZXNvbHV0aW9uLiIKKwkJCSIgVXNpbmcgJWRLIGZyYW1lYnVmZmVyIG1lbW9yeVxuIiwgaW5mby0+bm9kZSwKKwkJCWluZm8tPnZhci54cmVzLCBpbmZvLT52YXIueXJlcywKKwkJCSgoZGV2LT5iYWNraW5nX2J1ZmZlcikgPworCQkJaW5mby0+Zml4LnNtZW1fbGVuICogMiA6IGluZm8tPmZpeC5zbWVtX2xlbikgPj4gMTApOworCXJldHVybiAwOworCitlcnJvcjoKKwlpZiAoZGV2KSB7CisKKwkJaWYgKGluZm8pIHsKKwkJCWlmIChpbmZvLT5jbWFwLmxlbiAhPSAwKQorCQkJCWZiX2RlYWxsb2NfY21hcCgmaW5mby0+Y21hcCk7CisJCQlpZiAoaW5mby0+bW9uc3BlY3MubW9kZWRiKQorCQkJCWZiX2Rlc3Ryb3lfbW9kZWRiKGluZm8tPm1vbnNwZWNzLm1vZGVkYik7CisJCQlpZiAoaW5mby0+c2NyZWVuX2Jhc2UpCisJCQkJdmZyZWUoaW5mby0+c2NyZWVuX2Jhc2UpOworCisJCQlmYl9kZXN0cm95X21vZGVsaXN0KCZpbmZvLT5tb2RlbGlzdCk7CisKKwkJCWZyYW1lYnVmZmVyX3JlbGVhc2UoaW5mbyk7CisJCX0KKworCQlpZiAoZGV2LT5iYWNraW5nX2J1ZmZlcikKKwkJCXZmcmVlKGRldi0+YmFja2luZ19idWZmZXIpOworCisJCWtyZWZfcHV0KCZkZXYtPmtyZWYsIGRsZmJfZnJlZSk7IC8qIHJlZiBmb3IgZnJhbWVidWZmZXIgKi8KKwkJa3JlZl9wdXQoJmRldi0+a3JlZiwgZGxmYl9mcmVlKTsgLyogbGFzdCByZWYgZnJvbSBrcmVmX2luaXQgKi8KKworCQkvKiBkZXYgaGFzIGJlZW4gZGVhbGxvY2F0ZWQuIERvIG5vdCBkZXJlZmVyZW5jZSAqLworCX0KKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIGRsZmJfdXNiX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3sKKwlzdHJ1Y3QgZGxmYl9kYXRhICpkZXY7CisJc3RydWN0IGZiX2luZm8gKmluZm87CisJaW50IGk7CisKKwlkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisJaW5mbyA9IGRldi0+aW5mbzsKKworCXByX2luZm8oIlVTQiBkaXNjb25uZWN0IHN0YXJ0aW5nXG4iKTsKKworCS8qIHdlIHZpcnR1YWxpemUgdW50aWwgYWxsIGZiIGNsaWVudHMgcmVsZWFzZS4gVGhlbiB3ZSBmcmVlICovCisJZGV2LT52aXJ0dWFsaXplZCA9IHRydWU7CisKKwkvKiBXaGVuIG5vbi1hY3RpdmUgd2UnbGwgdXBkYXRlIHZpcnR1YWwgZnJhbWVidWZmZXIsIGJ1dCBubyBuZXcgdXJicyAqLworCWF0b21pY19zZXQoJmRldi0+dXNiX2FjdGl2ZSwgMCk7CisKKwkvKiByZW1vdmUgdWRsZmIncyBzeXNmcyBpbnRlcmZhY2VzICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZmJfZGV2aWNlX2F0dHJzKTsgaSsrKQorCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoaW5mby0+ZGV2LCAmZmJfZGV2aWNlX2F0dHJzW2ldKTsKKwlkZXZpY2VfcmVtb3ZlX2Jpbl9maWxlKGluZm8tPmRldiwgJmVkaWRfYXR0cik7CisKKwl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7CisKKwkvKiBpZiBjbGllbnRzIHN0aWxsIGhhdmUgdXMgb3Blbiwgd2lsbCBiZSBmcmVlZCBvbiBsYXN0IGNsb3NlICovCisJaWYgKGRldi0+ZmJfY291bnQgPT0gMCkKKwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZkZXYtPmZyZWVfZnJhbWVidWZmZXJfd29yaywgMCk7CisKKwkvKiByZWxlYXNlIHJlZmVyZW5jZSB0YWtlbiBieSBrcmVmX2luaXQgaW4gcHJvYmUoKSAqLworCWtyZWZfcHV0KCZkZXYtPmtyZWYsIGRsZmJfZnJlZSk7CisKKwkvKiBjb25zaWRlciBkbGZiX2RhdGEgZnJlZWQgKi8KKworCXJldHVybjsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGRsZmJfZHJpdmVyID0geworCS5uYW1lID0gInVkbGZiIiwKKwkucHJvYmUgPSBkbGZiX3VzYl9wcm9iZSwKKwkuZGlzY29ubmVjdCA9IGRsZmJfdXNiX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0gaWRfdGFibGUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBkbGZiX21vZHVsZV9pbml0KHZvaWQpCit7CisJaW50IHJlczsKKworCXJlcyA9IHVzYl9yZWdpc3RlcigmZGxmYl9kcml2ZXIpOworCWlmIChyZXMpCisJCWVycigidXNiX3JlZ2lzdGVyIGZhaWxlZC4gRXJyb3IgbnVtYmVyICVkIiwgcmVzKTsKKworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkbGZiX21vZHVsZV9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJmRsZmJfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoZGxmYl9tb2R1bGVfaW5pdCk7Cittb2R1bGVfZXhpdChkbGZiX21vZHVsZV9leGl0KTsKKworc3RhdGljIHZvaWQgZGxmYl91cmJfY29tcGxldGlvbihzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IHVyYl9ub2RlICp1bm9kZSA9IHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgZGxmYl9kYXRhICpkZXYgPSB1bm9kZS0+ZGV2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKiBzeW5jL2FzeW5jIHVubGluayBmYXVsdHMgYXJlbid0IGVycm9ycyAqLworCWlmICh1cmItPnN0YXR1cykgeworCQlpZiAoISh1cmItPnN0YXR1cyA9PSAtRU5PRU5UIHx8CisJCSAgICB1cmItPnN0YXR1cyA9PSAtRUNPTk5SRVNFVCB8fAorCQkgICAgdXJiLT5zdGF0dXMgPT0gLUVTSFVURE9XTikpIHsKKwkJCXByX2VycigiJXMgLSBub256ZXJvIHdyaXRlIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZFxuIiwKKwkJCQlfX2Z1bmNfXywgdXJiLT5zdGF0dXMpOworCQkJYXRvbWljX3NldCgmZGV2LT5sb3N0X3BpeGVscywgMSk7CisJCX0KKwl9CisKKwl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBkZXYtPnVyYnMuc2l6ZTsgLyogcmVzZXQgdG8gYWN0dWFsICovCisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT51cmJzLmxvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZF90YWlsKCZ1bm9kZS0+ZW50cnksICZkZXYtPnVyYnMubGlzdCk7CisJZGV2LT51cmJzLmF2YWlsYWJsZSsrOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+dXJicy5sb2NrLCBmbGFncyk7CisKKwkvKgorCSAqIFdoZW4gdXNpbmcgZmJfZGVmaW8sIHdlIGRlYWRsb2NrIGlmIHVwKCkgaXMgY2FsbGVkCisJICogd2hpbGUgYW5vdGhlciBpcyB3YWl0aW5nLiBTbyBxdWV1ZSB0byBhbm90aGVyIHByb2Nlc3MuCisJICovCisJaWYgKGZiX2RlZmlvKQorCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnVub2RlLT5yZWxlYXNlX3VyYl93b3JrLCAwKTsKKwllbHNlCisJCXVwKCZkZXYtPnVyYnMubGltaXRfc2VtKTsKK30KKworc3RhdGljIHZvaWQgZGxmYl9mcmVlX3VyYl9saXN0KHN0cnVjdCBkbGZiX2RhdGEgKmRldikKK3sKKwlpbnQgY291bnQgPSBkZXYtPnVyYnMuY291bnQ7CisJc3RydWN0IGxpc3RfaGVhZCAqbm9kZTsKKwlzdHJ1Y3QgdXJiX25vZGUgKnVub2RlOworCXN0cnVjdCB1cmIgKnVyYjsKKwlpbnQgcmV0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlwcl9ub3RpY2UoIldhaXRpbmcgZm9yIGNvbXBsZXRlcyBhbmQgZnJlZWluZyBhbGwgcmVuZGVyIHVyYnNcbiIpOworCisJLyoga2VlcCB3YWl0aW5nIGFuZCBmcmVlaW5nLCB1bnRpbCB3ZSd2ZSBnb3QgJ2VtIGFsbCAqLworCXdoaWxlIChjb3VudC0tKSB7CisKKwkJLyogR2V0dGluZyBpbnRlcnJ1cHRlZCBtZWFucyBhIGxlYWssIGJ1dCBvayBhdCBzaHV0ZG93biovCisJCXJldCA9IGRvd25faW50ZXJydXB0aWJsZSgmZGV2LT51cmJzLmxpbWl0X3NlbSk7CisJCWlmIChyZXQpCisJCQlicmVhazsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT51cmJzLmxvY2ssIGZsYWdzKTsKKworCQlub2RlID0gZGV2LT51cmJzLmxpc3QubmV4dDsgLyogaGF2ZSByZXNlcnZlZCBvbmUgd2l0aCBzZW0gKi8KKwkJbGlzdF9kZWxfaW5pdChub2RlKTsKKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnVyYnMubG9jaywgZmxhZ3MpOworCisJCXVub2RlID0gbGlzdF9lbnRyeShub2RlLCBzdHJ1Y3QgdXJiX25vZGUsIGVudHJ5KTsKKwkJdXJiID0gdW5vZGUtPnVyYjsKKworCQkvKiBGcmVlIGVhY2ggc2VwYXJhdGVseSBhbGxvY2F0ZWQgcGllY2UgKi8KKwkJdXNiX2ZyZWVfY29oZXJlbnQodXJiLT5kZXYsIGRldi0+dXJicy5zaXplLAorCQkJCSAgdXJiLT50cmFuc2Zlcl9idWZmZXIsIHVyYi0+dHJhbnNmZXJfZG1hKTsKKwkJdXNiX2ZyZWVfdXJiKHVyYik7CisJCWtmcmVlKG5vZGUpOworCX0KKworfQorCitzdGF0aWMgaW50IGRsZmJfYWxsb2NfdXJiX2xpc3Qoc3RydWN0IGRsZmJfZGF0YSAqZGV2LCBpbnQgY291bnQsIHNpemVfdCBzaXplKQoreworCWludCBpID0gMDsKKwlzdHJ1Y3QgdXJiICp1cmI7CisJc3RydWN0IHVyYl9ub2RlICp1bm9kZTsKKwljaGFyICpidWY7CisKKwlzcGluX2xvY2tfaW5pdCgmZGV2LT51cmJzLmxvY2spOworCisJZGV2LT51cmJzLnNpemUgPSBzaXplOworCUlOSVRfTElTVF9IRUFEKCZkZXYtPnVyYnMubGlzdCk7CisKKwl3aGlsZSAoaSA8IGNvdW50KSB7CisJCXVub2RlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHVyYl9ub2RlKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghdW5vZGUpCisJCQlicmVhazsKKwkJdW5vZGUtPmRldiA9IGRldjsKKworCQlJTklUX0RFTEFZRURfV09SSygmdW5vZGUtPnJlbGVhc2VfdXJiX3dvcmssCisJCQkgIGRsZmJfcmVsZWFzZV91cmJfd29yayk7CisKKwkJdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCF1cmIpIHsKKwkJCWtmcmVlKHVub2RlKTsKKwkJCWJyZWFrOworCQl9CisJCXVub2RlLT51cmIgPSB1cmI7CisKKwkJYnVmID0gdXNiX2FsbG9jX2NvaGVyZW50KGRldi0+dWRldiwgTUFYX1RSQU5TRkVSLCBHRlBfS0VSTkVMLAorCQkJCQkgJnVyYi0+dHJhbnNmZXJfZG1hKTsKKwkJaWYgKCFidWYpIHsKKwkJCWtmcmVlKHVub2RlKTsKKwkJCXVzYl9mcmVlX3VyYih1cmIpOworCQkJYnJlYWs7CisJCX0KKworCQkvKiB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggc2V0IHRvIGFjdHVhbCBiZWZvcmUgc3VibWl0ICovCisJCXVzYl9maWxsX2J1bGtfdXJiKHVyYiwgZGV2LT51ZGV2LCB1c2Jfc25kYnVsa3BpcGUoZGV2LT51ZGV2LCAxKSwKKwkJCWJ1Ziwgc2l6ZSwgZGxmYl91cmJfY29tcGxldGlvbiwgdW5vZGUpOworCQl1cmItPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOworCisJCWxpc3RfYWRkX3RhaWwoJnVub2RlLT5lbnRyeSwgJmRldi0+dXJicy5saXN0KTsKKworCQlpKys7CisJfQorCisJc2VtYV9pbml0KCZkZXYtPnVyYnMubGltaXRfc2VtLCBpKTsKKwlkZXYtPnVyYnMuY291bnQgPSBpOworCWRldi0+dXJicy5hdmFpbGFibGUgPSBpOworCisJcHJfbm90aWNlKCJhbGxvY2F0ZWQgJWQgJWQgYnl0ZSB1cmJzXG4iLCBpLCAoaW50KSBzaXplKTsKKworCXJldHVybiBpOworfQorCitzdGF0aWMgc3RydWN0IHVyYiAqZGxmYl9nZXRfdXJiKHN0cnVjdCBkbGZiX2RhdGEgKmRldikKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeTsKKwlzdHJ1Y3QgdXJiX25vZGUgKnVub2RlOworCXN0cnVjdCB1cmIgKnVyYiA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIFdhaXQgZm9yIGFuIGluLWZsaWdodCBidWZmZXIgdG8gY29tcGxldGUgYW5kIGdldCByZS1xdWV1ZWQgKi8KKwlyZXQgPSBkb3duX3RpbWVvdXQoJmRldi0+dXJicy5saW1pdF9zZW0sIEdFVF9VUkJfVElNRU9VVCk7CisJaWYgKHJldCkgeworCQlhdG9taWNfc2V0KCZkZXYtPmxvc3RfcGl4ZWxzLCAxKTsKKwkJcHJfd2Fybigid2FpdCBmb3IgdXJiIGludGVycnVwdGVkOiAleCBhdmFpbGFibGU6ICVkXG4iLAorCQkgICAgICAgcmV0LCBkZXYtPnVyYnMuYXZhaWxhYmxlKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT51cmJzLmxvY2ssIGZsYWdzKTsKKworCUJVR19PTihsaXN0X2VtcHR5KCZkZXYtPnVyYnMubGlzdCkpOyAvKiByZXNlcnZlZCBvbmUgd2l0aCBsaW1pdF9zZW0gKi8KKwllbnRyeSA9IGRldi0+dXJicy5saXN0Lm5leHQ7CisJbGlzdF9kZWxfaW5pdChlbnRyeSk7CisJZGV2LT51cmJzLmF2YWlsYWJsZS0tOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT51cmJzLmxvY2ssIGZsYWdzKTsKKworCXVub2RlID0gbGlzdF9lbnRyeShlbnRyeSwgc3RydWN0IHVyYl9ub2RlLCBlbnRyeSk7CisJdXJiID0gdW5vZGUtPnVyYjsKKworZXJyb3I6CisJcmV0dXJuIHVyYjsKK30KKworc3RhdGljIGludCBkbGZiX3N1Ym1pdF91cmIoc3RydWN0IGRsZmJfZGF0YSAqZGV2LCBzdHJ1Y3QgdXJiICp1cmIsIHNpemVfdCBsZW4pCit7CisJaW50IHJldDsKKworCUJVR19PTihsZW4gPiBkZXYtPnVyYnMuc2l6ZSk7CisKKwl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBsZW47IC8qIHNldCB0byBhY3R1YWwgcGF5bG9hZCBsZW4gKi8KKwlyZXQgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9LRVJORUwpOworCWlmIChyZXQpIHsKKwkJZGxmYl91cmJfY29tcGxldGlvbih1cmIpOyAvKiBiZWNhdXNlIG5vIG9uZSBlbHNlIHdpbGwgKi8KKwkJYXRvbWljX3NldCgmZGV2LT5sb3N0X3BpeGVscywgMSk7CisJCXByX2VycigidXNiX3N1Ym1pdF91cmIgZXJyb3IgJXhcbiIsIHJldCk7CisJfQorCXJldHVybiByZXQ7Cit9CisKK21vZHVsZV9wYXJhbShjb25zb2xlLCBib29sLCBTX0lXVVNSIHwgU19JUlVTUiB8IFNfSVdHUlAgfCBTX0lSR1JQKTsKK01PRFVMRV9QQVJNX0RFU0MoY29uc29sZSwgIkFsbG93IGZiY29uIHRvIGNvbnN1bWUgZmlyc3QgZnJhbWVidWZmZXIgZm91bmQiKTsKKworbW9kdWxlX3BhcmFtKGZiX2RlZmlvLCBib29sLCBTX0lXVVNSIHwgU19JUlVTUiB8IFNfSVdHUlAgfCBTX0lSR1JQKTsKK01PRFVMRV9QQVJNX0RFU0MoZmJfZGVmaW8sICJFbmFibGUgZmJfZGVmaW8gbW1hcCBzdXBwb3J0LiAqRXhwZXJpbWVudGFsKiIpOworCitNT0RVTEVfQVVUSE9SKCJSb2JlcnRvIERlIElvcmlzIDxyb2JlcnRvQHVuYml0Lml0PiwgIgorCSAgICAgICJKYXlhIEt1bWFyIDxqYXlha3VtYXIubGttbEBnbWFpbC5jb20+LCAiCisJICAgICAgIkJlcm5pZSBUaG9tcHNvbiA8YmVybmllQHBsdWdhYmxlLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiRGlzcGxheUxpbmsga2VybmVsIGZyYW1lYnVmZmVyIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS92aWEtY29yZS5jIGIvZHJpdmVycy92aWRlby92aWEvdmlhLWNvcmUuYwppbmRleCBhM2FhOTE3Li42NzIzZDY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3ZpYS92aWEtY29yZS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYS1jb3JlLmMKQEAgLTE1LDYgKzE1LDkgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KKyNpbmNsdWRlIDxhc20vb2xwYy5oPgogCiAvKgogICogVGhlIGRlZmF1bHQgcG9ydCBjb25maWcuCkBAIC0yOSw2ICszMiwxOSBAQAogfTsKIAogLyoKKyAqIFRoZSBPTFBDIFhPLTEuNSBwdXRzIHRoZSBjYW1lcmEgcG93ZXIgYW5kIHJlc2V0IGxpbmVzIG9udG8KKyAqIEdQSU8gMkMuCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdmlhX3BvcnRfY2ZnIG9scGNfYWRhcF9jb25maWdzW10gPSB7CisJW1ZJQV9QT1JUXzI2XQk9IHsgVklBX1BPUlRfSTJDLCAgVklBX01PREVfSTJDLCBWSUFTUiwgMHgyNiB9LAorCVtWSUFfUE9SVF8zMV0JPSB7IFZJQV9QT1JUX0kyQywgIFZJQV9NT0RFX0kyQywgVklBU1IsIDB4MzEgfSwKKwlbVklBX1BPUlRfMjVdCT0geyBWSUFfUE9SVF9HUElPLCBWSUFfTU9ERV9HUElPLCBWSUFTUiwgMHgyNSB9LAorCVtWSUFfUE9SVF8yQ10JPSB7IFZJQV9QT1JUX0dQSU8sIFZJQV9NT0RFX0dQSU8sIFZJQVNSLCAweDJjIH0sCisJW1ZJQV9QT1JUXzNEXQk9IHsgVklBX1BPUlRfR1BJTywgVklBX01PREVfR1BJTywgVklBU1IsIDB4M2QgfSwKKwl7IDAsIDAsIDAsIDAgfQorfTsKKworLyoKICAqIFdlIGN1cnJlbnRseSBvbmx5IHN1cHBvcnQgb25lIHZpYWZiIGRldmljZSAod2lsbCB0aGVyZSBldmVyIGJlCiAgKiBtb3JlIHRoYW4gb25lPyksIHNvIGp1c3QgZGVjbGFyZSBpdCBnbG9iYWxseSBoZXJlLgogICovCkBAIC01NzUsNiArNTkxLDc4IEBACiAJCX0KIH0KIAorLyoKKyAqIFBvd2VyIG1hbmFnZW1lbnQgZnVuY3Rpb25zCisgKi8KKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBMSVNUX0hFQUQodmlhZmJfcG1faG9va3MpOworc3RhdGljIERFRklORV9NVVRFWCh2aWFmYl9wbV9ob29rc19sb2NrKTsKKwordm9pZCB2aWFmYl9wbV9yZWdpc3RlcihzdHJ1Y3QgdmlhZmJfcG1faG9va3MgKmhvb2tzKQoreworCUlOSVRfTElTVF9IRUFEKCZob29rcy0+bGlzdCk7CisKKwltdXRleF9sb2NrKCZ2aWFmYl9wbV9ob29rc19sb2NrKTsKKwlsaXN0X2FkZF90YWlsKCZob29rcy0+bGlzdCwgJnZpYWZiX3BtX2hvb2tzKTsKKwltdXRleF91bmxvY2soJnZpYWZiX3BtX2hvb2tzX2xvY2spOworfQorRVhQT1JUX1NZTUJPTF9HUEwodmlhZmJfcG1fcmVnaXN0ZXIpOworCit2b2lkIHZpYWZiX3BtX3VucmVnaXN0ZXIoc3RydWN0IHZpYWZiX3BtX2hvb2tzICpob29rcykKK3sKKwltdXRleF9sb2NrKCZ2aWFmYl9wbV9ob29rc19sb2NrKTsKKwlsaXN0X2RlbCgmaG9va3MtPmxpc3QpOworCW11dGV4X3VubG9jaygmdmlhZmJfcG1faG9va3NfbG9jayk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh2aWFmYl9wbV91bnJlZ2lzdGVyKTsKKworc3RhdGljIGludCB2aWFfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCB2aWFmYl9wbV9ob29rcyAqaG9va3M7CisKKwlpZiAoc3RhdGUuZXZlbnQgIT0gUE1fRVZFTlRfU1VTUEVORCkKKwkJcmV0dXJuIDA7CisJLyoKKwkgKiAiSSd2ZSBvY2Nhc2lvbmFsbHkgaGl0IGEgZmV3IGRyaXZlcnMgdGhhdCBjYXVzZWQgc3VzcGVuZAorCSAqIGZhaWx1cmVzLCBhbmQgZWFjaCBhbmQgZXZlcnkgdGltZSBpdCB3YXMgYSBkcml2ZXIgYnVnLCBhbmQKKwkgKiB0aGUgcmlnaHQgdGhpbmcgdG8gZG8gd2FzIHRvIGp1c3QgaWdub3JlIHRoZSBlcnJvciBhbmQgc3VzcGVuZAorCSAqIGFueXdheSAtIHJldHVybmluZyBhbiBlcnJvciBjb2RlIGFuZCB0cnlpbmcgdG8gdW5kbyB0aGUgc3VzcGVuZAorCSAqIGlzIG5vdCB3aGF0IGFueWJvZHkgZXZlciByZWFsbHkgd2FudHMsIGV2ZW4gaWYgb3VyIG1vZGVsCisJICpfYWxsb3dzXyBmb3IgaXQuIgorCSAqIC0tIExpbnVzIFRvcnZhbGRzLCBEZWMuIDcsIDIwMDkKKwkgKi8KKwltdXRleF9sb2NrKCZ2aWFmYl9wbV9ob29rc19sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2UoaG9va3MsICZ2aWFmYl9wbV9ob29rcywgbGlzdCkKKwkJaG9va3MtPnN1c3BlbmQoaG9va3MtPnByaXZhdGUpOworCW11dGV4X3VubG9jaygmdmlhZmJfcG1faG9va3NfbG9jayk7CisKKwlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBwY2lfY2hvb3NlX3N0YXRlKHBkZXYsIHN0YXRlKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlhX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgdmlhZmJfcG1faG9va3MgKmhvb2tzOworCisJLyogR2V0IHRoZSBidXMgc2lkZSBwb3dlcmVkIHVwICovCisJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDApOworCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOworCWlmIChwY2lfZW5hYmxlX2RldmljZShwZGV2KSkKKwkJcmV0dXJuIDA7CisKKwlwY2lfc2V0X21hc3RlcihwZGV2KTsKKworCS8qIE5vdyBicmluZyBiYWNrIGFueSBzdWJkZXZzICovCisJbXV0ZXhfbG9jaygmdmlhZmJfcG1faG9va3NfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShob29rcywgJnZpYWZiX3BtX2hvb2tzLCBsaXN0KQorCQlob29rcy0+cmVzdW1lKGhvb2tzLT5wcml2YXRlKTsKKwltdXRleF91bmxvY2soJnZpYWZiX3BtX2hvb2tzX2xvY2spOworCisJcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogQ09ORklHX1BNICovCiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHZpYV9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCkBAIC01ODQsNiArNjcyLDcgQEAKIAlyZXQgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OworCiAJLyoKIAkgKiBHbG9iYWwgZGV2aWNlIGluaXRpYWxpemF0aW9uLgogCSAqLwpAQCAtNTkxLDYgKzY4MCw5IEBACiAJZ2xvYmFsX2Rldi5wZGV2ID0gcGRldjsKIAlnbG9iYWxfZGV2LmNoaXBfdHlwZSA9IGVudC0+ZHJpdmVyX2RhdGE7CiAJZ2xvYmFsX2Rldi5wb3J0X2NmZyA9IGFkYXBfY29uZmlnczsKKwlpZiAobWFjaGluZV9pc19vbHBjKCkpCisJCWdsb2JhbF9kZXYucG9ydF9jZmcgPSBvbHBjX2FkYXBfY29uZmlnczsKKwogCXNwaW5fbG9ja19pbml0KCZnbG9iYWxfZGV2LnJlZ19sb2NrKTsKIAlyZXQgPSB2aWFfcGNpX3NldHVwX21taW8oJmdsb2JhbF9kZXYpOwogCWlmIChyZXQpCkBAIC02NjMsOCArNzU1LDggQEAKIAkucHJvYmUJCT0gdmlhX3BjaV9wcm9iZSwKIAkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHZpYV9wY2lfcmVtb3ZlKSwKICNpZmRlZiBDT05GSUdfUE0KLQkuc3VzcGVuZAk9IHZpYWZiX3N1c3BlbmQsCi0JLnJlc3VtZQkJPSB2aWFmYl9yZXN1bWUsCisJLnN1c3BlbmQJPSB2aWFfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHZpYV9yZXN1bWUsCiAjZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYS1ncGlvLmMgYi9kcml2ZXJzL3ZpZGVvL3ZpYS92aWEtZ3Bpby5jCmluZGV4IDM5YWNiMzcuLmMyYTBhMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYS1ncGlvLmMKKysrIGIvZHJpdmVycy92aWRlby92aWEvdmlhLWdwaW8uYwpAQCAtMTcyLDYgKzE3MiwyOCBAQAogCXZpYV93cml0ZV9yZWdfbWFzayhWSUFTUiwgZ3Bpby0+dmdfcG9ydF9pbmRleCwgMCwgMHgwMik7CiB9CiAKKyNpZmRlZiBDT05GSUdfUE0KKworc3RhdGljIGludCB2aWFmYl9ncGlvX3N1c3BlbmQodm9pZCAqcHJpdmF0ZSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWFmYl9ncGlvX3Jlc3VtZSh2b2lkICpwcml2YXRlKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGdwaW9fY29uZmlnLmdwaW9fY2hpcC5uZ3BpbzsgaSArPSAyKQorCQl2aWFmYl9ncGlvX2VuYWJsZShncGlvX2NvbmZpZy5hY3RpdmVfZ3Bpb3NbaV0pOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHZpYWZiX3BtX2hvb2tzIHZpYWZiX2dwaW9fcG1faG9va3MgPSB7CisJLnN1c3BlbmQgPSB2aWFmYl9ncGlvX3N1c3BlbmQsCisJLnJlc3VtZSA9IHZpYWZiX2dwaW9fcmVzdW1lCit9OworI2VuZGlmIC8qIENPTkZJR19QTSAqLworCiAvKgogICogTG9vayB1cCBhIHNwZWNpZmljIGdwaW8gYW5kIHJldHVybiB0aGUgbnVtYmVyIGl0IHdhcyBhc3NpZ25lZC4KICAqLwpAQCAtMjM2LDYgKzI1OCw5IEBACiAJCXByaW50ayhLRVJOX0VSUiAidmlhZmI6IGZhaWxlZCB0byBhZGQgZ3Bpb3MgKCVkKVxuIiwgcmV0KTsKIAkJZ3Bpb19jb25maWcuZ3Bpb19jaGlwLm5ncGlvID0gMDsKIAl9CisjaWZkZWYgQ09ORklHX1BNCisJdmlhZmJfcG1fcmVnaXN0ZXIoJnZpYWZiX2dwaW9fcG1faG9va3MpOworI2VuZGlmCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjQ1LDYgKzI3MCwxMCBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldCA9IDAsIGk7CiAKKyNpZmRlZiBDT05GSUdfUE0KKwl2aWFmYl9wbV91bnJlZ2lzdGVyKCZ2aWFmYl9ncGlvX3BtX2hvb2tzKTsKKyNlbmRpZgorCiAJLyoKIAkgKiBHZXQgdW5yZWdpc3RlcmVkLgogCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvdmlhZmJkZXYuYyBiL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYWZiZGV2LmMKaW5kZXggZDI5OGNmYy4uMjg5ZWRkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby92aWEvdmlhZmJkZXYuYworKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFmYmRldi5jCkBAIC0xNjcyLDMxICsxNjcyLDE5IEBACiAKIAogI2lmZGVmIENPTkZJR19QTQotaW50IHZpYWZiX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgdmlhZmJfc3VzcGVuZCh2b2lkICp1bnVzZWQpCiB7Ci0JaWYgKHN0YXRlLmV2ZW50ID09IFBNX0VWRU5UX1NVU1BFTkQpIHsKLQkJYWNxdWlyZV9jb25zb2xlX3NlbSgpOwotCQlmYl9zZXRfc3VzcGVuZCh2aWFmYmluZm8sIDEpOwotCi0JCXZpYWZiX3N5bmModmlhZmJpbmZvKTsKLQotCQlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKLQkJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwotCQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpKTsKLQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOwotCX0KKwlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJZmJfc2V0X3N1c3BlbmQodmlhZmJpbmZvLCAxKTsKKwl2aWFmYl9zeW5jKHZpYWZiaW5mbyk7CisJcmVsZWFzZV9jb25zb2xlX3NlbSgpOwogCiAJcmV0dXJuIDA7CiB9CiAKLWludCB2aWFmYl9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCitzdGF0aWMgaW50IHZpYWZiX3Jlc3VtZSh2b2lkICp1bnVzZWQpCiB7CiAJYWNxdWlyZV9jb25zb2xlX3NlbSgpOwotCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QwKTsKLQlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKLQlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGRldikpCi0JCWdvdG8gZmFpbDsKLQlwY2lfc2V0X21hc3RlcihwZGV2KTsKIAlpZiAodmlhcGFyaW5mby0+c2hhcmVkLT52ZGV2LT5lbmdpbmVfbW1pbykKIAkJdmlhZmJfcmVzZXRfZW5naW5lKHZpYXBhcmluZm8pOwogCXZpYWZiX3NldF9wYXIodmlhZmJpbmZvKTsKQEAgLTE3MDQsMTEgKzE2OTIsMTUgQEAKIAkJdmlhZmJfc2V0X3Bhcih2aWFmYmluZm8xKTsKIAlmYl9zZXRfc3VzcGVuZCh2aWFmYmluZm8sIDApOwogCi1mYWlsOgogCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHN0cnVjdCB2aWFmYl9wbV9ob29rcyB2aWFmYl9mYl9wbV9ob29rcyA9IHsKKwkuc3VzcGVuZCA9IHZpYWZiX3N1c3BlbmQsCisJLnJlc3VtZSA9IHZpYWZiX3Jlc3VtZQorfTsKKwogI2VuZGlmCiAKIApAQCAtMTg5OSw2ICsxODkxLDEwIEBACiAKIAl2aWFmYl9pbml0X3Byb2ModmlhcGFyaW5mby0+c2hhcmVkKTsKIAl2aWFmYl9pbml0X2RhYyhJR0EyKTsKKworI2lmZGVmIENPTkZJR19QTQorCXZpYWZiX3BtX3JlZ2lzdGVyKCZ2aWFmYl9mYl9wbV9ob29rcyk7CisjZW5kaWYKIAlyZXR1cm4gMDsKIAogb3V0X2ZiX3VucmVnOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvdmlhZmJkZXYuaCBiL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYWZiZGV2LmgKaW5kZXggNDk2MGUzZC4uZDY2Zjk2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby92aWEvdmlhZmJkZXYuaAorKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFmYmRldi5oCkBAIC0xMDgsNiArMTA4LDQgQEAKIC8qIFRlbXBvcmFyeSAqLwogaW50IHZpYWZiX2luaXQodm9pZCk7CiB2b2lkIHZpYWZiX2V4aXQodm9pZCk7Ci1pbnQgdmlhZmJfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKTsKLWludCB2aWFmYl9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpOwogI2VuZGlmIC8qIF9fVklBRkJERVZfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3Z0ODUwMGxjZGZiLmMgYi9kcml2ZXJzL3ZpZGVvL3Z0ODUwMGxjZGZiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzYxN2YxMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vdnQ4NTAwbGNkZmIuYwpAQCAtMCwwICsxLDQ0NyBAQAorLyoKKyAqICBsaW51eC9kcml2ZXJzL3ZpZGVvL3Z0ODUwMGxjZGZiLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIEFsZXhleSBDaGFya292IDxhbGNoYXJrQGdtYWlsLmNvbT4KKyAqCisgKiBCYXNlZCBvbiBza2VsZXRvbmZiLmMgYW5kIHB4YWZiLmMKKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZmIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKworI2luY2x1ZGUgPG1hY2gvdnQ4NTAwZmIuaD4KKworI2luY2x1ZGUgInZ0ODUwMGxjZGZiLmgiCisjaW5jbHVkZSAid210X2dlX3JvcHMuaCIKKworI2RlZmluZSB0b192dDg1MDBsY2RfaW5mbyhfX2luZm8pIGNvbnRhaW5lcl9vZihfX2luZm8sIFwKKwkJCQkJCXN0cnVjdCB2dDg1MDBsY2RfaW5mbywgZmIpCisKK3N0YXRpYyBpbnQgdnQ4NTAwbGNkX3NldF9wYXIoc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJc3RydWN0IHZ0ODUwMGxjZF9pbmZvICpmYmkgPSB0b192dDg1MDBsY2RfaW5mbyhpbmZvKTsKKwlpbnQgcmVnX2JwcCA9IDU7IC8qIDE2YnBwICovCisJaW50IGk7CisJdW5zaWduZWQgbG9uZyBjb250cm9sMDsKKworCWlmICghZmJpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwgPD0gOCkgeworCQkvKiBwYWxldHRpemVkICovCisJCWluZm8tPnZhci5yZWQub2Zmc2V0ICAgID0gMDsKKwkJaW5mby0+dmFyLnJlZC5sZW5ndGggICAgPSBpbmZvLT52YXIuYml0c19wZXJfcGl4ZWw7CisJCWluZm8tPnZhci5yZWQubXNiX3JpZ2h0ID0gMDsKKworCQlpbmZvLT52YXIuZ3JlZW4ub2Zmc2V0ICA9IDA7CisJCWluZm8tPnZhci5ncmVlbi5sZW5ndGggID0gaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsOworCQlpbmZvLT52YXIuZ3JlZW4ubXNiX3JpZ2h0ID0gMDsKKworCQlpbmZvLT52YXIuYmx1ZS5vZmZzZXQgICA9IDA7CisJCWluZm8tPnZhci5ibHVlLmxlbmd0aCAgID0gaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsOworCQlpbmZvLT52YXIuYmx1ZS5tc2JfcmlnaHQgPSAwOworCisJCWluZm8tPnZhci50cmFuc3Aub2Zmc2V0ID0gMDsKKwkJaW5mby0+dmFyLnRyYW5zcC5sZW5ndGggPSAwOworCQlpbmZvLT52YXIudHJhbnNwLm1zYl9yaWdodCA9IDA7CisKKwkJaW5mby0+Zml4LnZpc3VhbCA9IEZCX1ZJU1VBTF9QU0VVRE9DT0xPUjsKKwkJaW5mby0+Zml4LmxpbmVfbGVuZ3RoID0gaW5mby0+dmFyLnhyZXNfdmlydHVhbCAvCisJCQkJCQkoOC9pbmZvLT52YXIuYml0c19wZXJfcGl4ZWwpOworCX0gZWxzZSB7CisJCS8qIG5vbi1wYWxldHRpemVkICovCisJCWluZm8tPnZhci50cmFuc3Aub2Zmc2V0ID0gMDsKKwkJaW5mby0+dmFyLnRyYW5zcC5sZW5ndGggPSAwOworCQlpbmZvLT52YXIudHJhbnNwLm1zYl9yaWdodCA9IDA7CisKKwkJaWYgKGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCA9PSAxNikgeworCQkJLyogUkdCNTY1ICovCisJCQlpbmZvLT52YXIucmVkLm9mZnNldCA9IDExOworCQkJaW5mby0+dmFyLnJlZC5sZW5ndGggPSA1OworCQkJaW5mby0+dmFyLnJlZC5tc2JfcmlnaHQgPSAwOworCQkJaW5mby0+dmFyLmdyZWVuLm9mZnNldCA9IDU7CisJCQlpbmZvLT52YXIuZ3JlZW4ubGVuZ3RoID0gNjsKKwkJCWluZm8tPnZhci5ncmVlbi5tc2JfcmlnaHQgPSAwOworCQkJaW5mby0+dmFyLmJsdWUub2Zmc2V0ID0gMDsKKwkJCWluZm8tPnZhci5ibHVlLmxlbmd0aCA9IDU7CisJCQlpbmZvLT52YXIuYmx1ZS5tc2JfcmlnaHQgPSAwOworCQl9IGVsc2UgeworCQkJLyogRXF1YWwgZGVwdGhzIHBlciBjaGFubmVsICovCisJCQlpbmZvLT52YXIucmVkLm9mZnNldCA9IGluZm8tPnZhci5iaXRzX3Blcl9waXhlbAorCQkJCQkJCSogMiAvIDM7CisJCQlpbmZvLT52YXIucmVkLmxlbmd0aCA9IGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCAvIDM7CisJCQlpbmZvLT52YXIucmVkLm1zYl9yaWdodCA9IDA7CisJCQlpbmZvLT52YXIuZ3JlZW4ub2Zmc2V0ID0gaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsIC8gMzsKKwkJCWluZm8tPnZhci5ncmVlbi5sZW5ndGggPSBpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwgLyAzOworCQkJaW5mby0+dmFyLmdyZWVuLm1zYl9yaWdodCA9IDA7CisJCQlpbmZvLT52YXIuYmx1ZS5vZmZzZXQgPSAwOworCQkJaW5mby0+dmFyLmJsdWUubGVuZ3RoID0gaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsIC8gMzsKKwkJCWluZm8tPnZhci5ibHVlLm1zYl9yaWdodCA9IDA7CisJCX0KKworCQlpbmZvLT5maXgudmlzdWFsID0gRkJfVklTVUFMX1RSVUVDT0xPUjsKKwkJaW5mby0+Zml4LmxpbmVfbGVuZ3RoID0gaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsID4gMTYgPworCQkJCQlpbmZvLT52YXIueHJlc192aXJ0dWFsIDw8IDIgOgorCQkJCQlpbmZvLT52YXIueHJlc192aXJ0dWFsIDw8IDE7CisJfQorCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQlpZiAoYnBwX3ZhbHVlc1tpXSA9PSBpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwpIHsKKwkJCXJlZ19icHAgPSBpOworCQkJY29udGludWU7CisJCX0KKwl9CisKKwljb250cm9sMCA9IHJlYWRsKGZiaS0+cmVnYmFzZSkgJiB+MHhmOworCXdyaXRlbCgwLCBmYmktPnJlZ2Jhc2UpOworCXdoaWxlIChyZWFkbChmYmktPnJlZ2Jhc2UgKyAweDM4KSAmIDB4MTApCisJCS8qIHdhaXQgKi87CisJd3JpdGVsKCgoKGluZm8tPnZhci5oc3luY19sZW4gLSAxKSAmIDB4M2YpIDw8IDI2KQorCQl8ICgoaW5mby0+dmFyLmxlZnRfbWFyZ2luICYgMHhmZikgPDwgMTgpCisJCXwgKCgoaW5mby0+dmFyLnhyZXMgLSAxKSAmIDB4M2ZmKSA8PCA4KQorCQl8IChpbmZvLT52YXIucmlnaHRfbWFyZ2luICYgMHhmZiksIGZiaS0+cmVnYmFzZSArIDB4NCk7CisJd3JpdGVsKCgoKGluZm8tPnZhci52c3luY19sZW4gLSAxKSAmIDB4M2YpIDw8IDI2KQorCQl8ICgoaW5mby0+dmFyLnVwcGVyX21hcmdpbiAmIDB4ZmYpIDw8IDE4KQorCQl8ICgoKGluZm8tPnZhci55cmVzIC0gMSkgJiAweDNmZikgPDwgOCkKKwkJfCAoaW5mby0+dmFyLmxvd2VyX21hcmdpbiAmIDB4ZmYpLCBmYmktPnJlZ2Jhc2UgKyAweDgpOworCXdyaXRlbCgoKChpbmZvLT52YXIueXJlcyAtIDEpICYgMHg0MDApIDw8IDIpCisJCXwgKChpbmZvLT52YXIueHJlcyAtIDEpICYgMHg0MDApLCBmYmktPnJlZ2Jhc2UgKyAweDEwKTsKKwl3cml0ZWwoMHg4MDAwMDAwMCwgZmJpLT5yZWdiYXNlICsgMHgyMCk7CisJd3JpdGVsKGNvbnRyb2wwIHwgKHJlZ19icHAgPDwgMSkgfCAweDEwMCwgZmJpLT5yZWdiYXNlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHVfaW50IGNoYW5fdG9fZmllbGQodV9pbnQgY2hhbiwgc3RydWN0IGZiX2JpdGZpZWxkICpiZikKK3sKKwljaGFuICY9IDB4ZmZmZjsKKwljaGFuID4+PSAxNiAtIGJmLT5sZW5ndGg7CisJcmV0dXJuIGNoYW4gPDwgYmYtPm9mZnNldDsKK30KKworc3RhdGljIGludCB2dDg1MDBsY2Rfc2V0Y29scmVnKHVuc2lnbmVkIHJlZ25vLCB1bnNpZ25lZCByZWQsIHVuc2lnbmVkIGdyZWVuLAorCQkJICAgdW5zaWduZWQgYmx1ZSwgdW5zaWduZWQgdHJhbnNwLAorCQkJICAgc3RydWN0IGZiX2luZm8gKmluZm8pIHsKKwlzdHJ1Y3QgdnQ4NTAwbGNkX2luZm8gKmZiaSA9IHRvX3Z0ODUwMGxjZF9pbmZvKGluZm8pOworCWludCByZXQgPSAxOworCXVuc2lnbmVkIGludCB2YWw7CisJaWYgKHJlZ25vID49IDI1NikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoaW5mby0+dmFyLmdyYXlzY2FsZSkKKwkJcmVkID0gZ3JlZW4gPSBibHVlID0KKwkJCSgxOTU5NSAqIHJlZCArIDM4NDcwICogZ3JlZW4gKyA3NDcxICogYmx1ZSkgPj4gMTY7CisKKwlzd2l0Y2ggKGZiaS0+ZmIuZml4LnZpc3VhbCkgeworCWNhc2UgRkJfVklTVUFMX1RSVUVDT0xPUjoKKwkJaWYgKHJlZ25vIDwgMTYpIHsKKwkJCXUzMiAqcGFsID0gZmJpLT5mYi5wc2V1ZG9fcGFsZXR0ZTsKKworCQkJdmFsICA9IGNoYW5fdG9fZmllbGQocmVkLCAmZmJpLT5mYi52YXIucmVkKTsKKwkJCXZhbCB8PSBjaGFuX3RvX2ZpZWxkKGdyZWVuLCAmZmJpLT5mYi52YXIuZ3JlZW4pOworCQkJdmFsIHw9IGNoYW5fdG9fZmllbGQoYmx1ZSwgJmZiaS0+ZmIudmFyLmJsdWUpOworCisJCQlwYWxbcmVnbm9dID0gdmFsOworCQkJcmV0ID0gMDsKKwkJfQorCQlicmVhazsKKworCWNhc2UgRkJfVklTVUFMX1NUQVRJQ19QU0VVRE9DT0xPUjoKKwljYXNlIEZCX1ZJU1VBTF9QU0VVRE9DT0xPUjoKKwkJd3JpdGV3KChyZWQgJiAweGY4MDApCisJCSAgICAgIHwgKChncmVlbiA+PiA1KSAmIDB4N2UwKQorCQkgICAgICB8ICgoYmx1ZSA+PiAxMSkgJiAweDFmKSwKKwkJICAgICAgIGZiaS0+cGFsZXR0ZV9jcHUgKyBzaXplb2YodTE2KSAqIHJlZ25vKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB2dDg1MDBsY2RfaW9jdGwoc3RydWN0IGZiX2luZm8gKmluZm8sIHVuc2lnbmVkIGludCBjbWQsCisJCQkgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IHZ0ODUwMGxjZF9pbmZvICpmYmkgPSB0b192dDg1MDBsY2RfaW5mbyhpbmZvKTsKKworCWlmIChjbWQgPT0gRkJJT19XQUlURk9SVlNZTkMpIHsKKwkJLyogVW5tYXNrIEVuZCBvZiBGcmFtZSBpbnRlcnJ1cHQgKi8KKwkJd3JpdGVsKDB4ZmZmZmZmZmYgXiAoMSA8PCAzKSwgZmJpLT5yZWdiYXNlICsgMHgzYyk7CisJCXJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KGZiaS0+d2FpdCwKKwkJCXJlYWRsKGZiaS0+cmVnYmFzZSArIDB4MzgpICYgKDEgPDwgMyksIEhaIC8gMTApOworCQkvKiBNYXNrIGJhY2sgdG8gcmVkdWNlIHVud2FudGVkIGludGVycnVwdCB0cmFmZmljICovCisJCXdyaXRlbCgweGZmZmZmZmZmLCBmYmktPnJlZ2Jhc2UgKyAweDNjKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCQlpZiAocmV0ID09IDApCisJCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHZ0ODUwMGxjZF9wYW5fZGlzcGxheShzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwKKwkJCQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwl1bnNpZ25lZCBwaXhsZW4gPSBpbmZvLT5maXgubGluZV9sZW5ndGggLyBpbmZvLT52YXIueHJlc192aXJ0dWFsOworCXVuc2lnbmVkIG9mZiA9IHBpeGxlbiAqIHZhci0+eG9mZnNldAorCQkgICAgICArIGluZm8tPmZpeC5saW5lX2xlbmd0aCAqIHZhci0+eW9mZnNldDsKKwlzdHJ1Y3QgdnQ4NTAwbGNkX2luZm8gKmZiaSA9IHRvX3Z0ODUwMGxjZF9pbmZvKGluZm8pOworCisJd3JpdGVsKCgxIDw8IDMxKQorCQl8ICgoKHZhci0+eHJlc192aXJ0dWFsIC0gdmFyLT54cmVzKSAqIHBpeGxlbiAvIDQpIDw8IDIwKQorCQl8IChvZmYgPj4gMiksIGZiaS0+cmVnYmFzZSArIDB4MjApOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGZiX29wcyB2dDg1MDBsY2Rfb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkuZmJfc2V0X3Bhcgk9IHZ0ODUwMGxjZF9zZXRfcGFyLAorCS5mYl9zZXRjb2xyZWcJPSB2dDg1MDBsY2Rfc2V0Y29scmVnLAorCS5mYl9maWxscmVjdAk9IHdtdF9nZV9maWxscmVjdCwKKwkuZmJfY29weWFyZWEJPSB3bXRfZ2VfY29weWFyZWEsCisJLmZiX2ltYWdlYmxpdAk9IHN5c19pbWFnZWJsaXQsCisJLmZiX3N5bmMJPSB3bXRfZ2Vfc3luYywKKwkuZmJfaW9jdGwJPSB2dDg1MDBsY2RfaW9jdGwsCisJLmZiX3Bhbl9kaXNwbGF5CT0gdnQ4NTAwbGNkX3Bhbl9kaXNwbGF5LAorfTsKKworc3RhdGljIGlycXJldHVybl90IHZ0ODUwMGxjZF9oYW5kbGVfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgdnQ4NTAwbGNkX2luZm8gKmZiaSA9IGRldl9pZDsKKworCWlmIChyZWFkbChmYmktPnJlZ2Jhc2UgKyAweDM4KSAmICgxIDw8IDMpKQorCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmZiaS0+d2FpdCk7CisKKwl3cml0ZWwoMHhmZmZmZmZmZiwgZmJpLT5yZWdiYXNlICsgMHgzOCk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCB2dDg1MDBsY2RfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgdnQ4NTAwbGNkX2luZm8gKmZiaTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlzdHJ1Y3QgdnQ4NTAwZmJfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwl2b2lkICphZGRyOworCWludCBpcnEsIHJldDsKKworCXJldCA9IC1FTk9NRU07CisJZmJpID0gTlVMTDsKKworCWZiaSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB2dDg1MDBsY2RfaW5mbykgKyBzaXplb2YodTMyKSAqIDE2LAorCQkJCQkJCUdGUF9LRVJORUwpOworCWlmICghZmJpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBpbml0aWFsaXplIGZyYW1lYnVmZmVyIGRldmljZVxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZmFpbGVkOworCX0KKworCXN0cmNweShmYmktPmZiLmZpeC5pZCwgIlZUODUwMCBMQ0QiKTsKKworCWZiaS0+ZmIuZml4LnR5cGUJPSBGQl9UWVBFX1BBQ0tFRF9QSVhFTFM7CisJZmJpLT5mYi5maXgueHBhbnN0ZXAJPSAwOworCWZiaS0+ZmIuZml4LnlwYW5zdGVwCT0gMTsKKwlmYmktPmZiLmZpeC55d3JhcHN0ZXAJPSAwOworCWZiaS0+ZmIuZml4LmFjY2VsCT0gRkJfQUNDRUxfTk9ORTsKKworCWZiaS0+ZmIudmFyLm5vbnN0ZAk9IDA7CisJZmJpLT5mYi52YXIuYWN0aXZhdGUJPSBGQl9BQ1RJVkFURV9OT1c7CisJZmJpLT5mYi52YXIuaGVpZ2h0CT0gLTE7CisJZmJpLT5mYi52YXIud2lkdGgJPSAtMTsKKwlmYmktPmZiLnZhci52bW9kZQk9IEZCX1ZNT0RFX05PTklOVEVSTEFDRUQ7CisKKwlmYmktPmZiLmZib3BzCQk9ICZ2dDg1MDBsY2Rfb3BzOworCWZiaS0+ZmIuZmxhZ3MJCT0gRkJJTkZPX0RFRkFVTFQKKwkJCQl8IEZCSU5GT19IV0FDQ0VMX0NPUFlBUkVBCisJCQkJfCBGQklORk9fSFdBQ0NFTF9GSUxMUkVDVAorCQkJCXwgRkJJTkZPX0hXQUNDRUxfWVBBTgorCQkJCXwgRkJJTkZPX1ZJUlRGQgorCQkJCXwgRkJJTkZPX1BBUlRJQUxfUEFOX09LOworCWZiaS0+ZmIubm9kZQkJPSAtMTsKKworCWFkZHIgPSBmYmk7CisJYWRkciA9IGFkZHIgKyBzaXplb2Yoc3RydWN0IHZ0ODUwMGxjZF9pbmZvKTsKKwlmYmktPmZiLnBzZXVkb19wYWxldHRlCT0gYWRkcjsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKHJlcyA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIEkvTyBtZW1vcnkgcmVzb3VyY2UgZGVmaW5lZFxuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZmFpbGVkX2ZiaTsKKwl9CisKKwlyZXMgPSByZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpLCAidnQ4NTAwbGNkIik7CisJaWYgKHJlcyA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZXF1ZXN0IEkvTyBtZW1vcnlcbiIpOworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZmFpbGVkX2ZiaTsKKwl9CisKKwlmYmktPnJlZ2Jhc2UgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisJaWYgKGZiaS0+cmVnYmFzZSA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBtYXAgSS9PIG1lbW9yeVxuIik7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBmYWlsZWRfZnJlZV9yZXM7CisJfQorCisJZmJpLT5mYi5maXguc21lbV9zdGFydAk9IHBkYXRhLT52aWRlb19tZW1fcGh5czsKKwlmYmktPmZiLmZpeC5zbWVtX2xlbgk9IHBkYXRhLT52aWRlb19tZW1fbGVuOworCWZiaS0+ZmIuc2NyZWVuX2Jhc2UJPSBwZGF0YS0+dmlkZW9fbWVtX3ZpcnQ7CisKKwlmYmktPnBhbGV0dGVfc2l6ZQk9IFBBR0VfQUxJR04oNTEyKTsKKwlmYmktPnBhbGV0dGVfY3B1CT0gZG1hX2FsbG9jX2NvaGVyZW50KCZwZGV2LT5kZXYsCisJCQkJCQkgICAgIGZiaS0+cGFsZXR0ZV9zaXplLAorCQkJCQkJICAgICAmZmJpLT5wYWxldHRlX3BoeXMsCisJCQkJCQkgICAgIEdGUF9LRVJORUwpOworCWlmIChmYmktPnBhbGV0dGVfY3B1ID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIHBhbGV0dGUgYnVmZmVyXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBmYWlsZWRfZnJlZV9pbzsKKwl9CisKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChpcnEgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIElSUSBkZWZpbmVkXG4iKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBmYWlsZWRfZnJlZV9wYWxldHRlOworCX0KKworCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgdnQ4NTAwbGNkX2hhbmRsZV9pcnEsIElSUUZfRElTQUJMRUQsICJMQ0QiLCBmYmkpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAicmVxdWVzdF9pcnEgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIGZhaWxlZF9mcmVlX3BhbGV0dGU7CisJfQorCisJaW5pdF93YWl0cXVldWVfaGVhZCgmZmJpLT53YWl0KTsKKworCWlmIChmYl9hbGxvY19jbWFwKCZmYmktPmZiLmNtYXAsIDI1NiwgMCkgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBjb2xvciBtYXBcbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGZhaWxlZF9mcmVlX2lycTsKKwl9CisKKwlmYl92aWRlb21vZGVfdG9fdmFyKCZmYmktPmZiLnZhciwgJnBkYXRhLT5tb2RlKTsKKwlmYmktPmZiLnZhci5iaXRzX3Blcl9waXhlbAk9IHBkYXRhLT5icHA7CisJZmJpLT5mYi52YXIueHJlc192aXJ0dWFsCT0gcGRhdGEtPnhyZXNfdmlydHVhbDsKKwlmYmktPmZiLnZhci55cmVzX3ZpcnR1YWwJPSBwZGF0YS0+eXJlc192aXJ0dWFsOworCisJcmV0ID0gdnQ4NTAwbGNkX3NldF9wYXIoJmZiaS0+ZmIpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIHNldCBwYXJhbWV0ZXJzXG4iKTsKKwkJZ290byBmYWlsZWRfZnJlZV9jbWFwOworCX0KKworCXdyaXRlbChmYmktPmZiLmZpeC5zbWVtX3N0YXJ0ID4+IDIyLCBmYmktPnJlZ2Jhc2UgKyAweDFjKTsKKwl3cml0ZWwoKGZiaS0+cGFsZXR0ZV9waHlzICYgMHhmZmZmZmUwMCkgfCAxLCBmYmktPnJlZ2Jhc2UgKyAweDE4KTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGZiaSk7CisKKwlyZXQgPSByZWdpc3Rlcl9mcmFtZWJ1ZmZlcigmZmJpLT5mYik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJIkZhaWxlZCB0byByZWdpc3RlciBmcmFtZWJ1ZmZlciBkZXZpY2U6ICVkXG4iLCByZXQpOworCQlnb3RvIGZhaWxlZF9mcmVlX2NtYXA7CisJfQorCisJLyoKKwkgKiBPaywgbm93IGVuYWJsZSB0aGUgTENEIGNvbnRyb2xsZXIKKwkgKi8KKwl3cml0ZWwocmVhZGwoZmJpLT5yZWdiYXNlKSB8IDEsIGZiaS0+cmVnYmFzZSk7CisKKwlyZXR1cm4gMDsKKworZmFpbGVkX2ZyZWVfY21hcDoKKwlpZiAoZmJpLT5mYi5jbWFwLmxlbikKKwkJZmJfZGVhbGxvY19jbWFwKCZmYmktPmZiLmNtYXApOworZmFpbGVkX2ZyZWVfaXJxOgorCWZyZWVfaXJxKGlycSwgZmJpKTsKK2ZhaWxlZF9mcmVlX3BhbGV0dGU6CisJZG1hX2ZyZWVfY29oZXJlbnQoJnBkZXYtPmRldiwgZmJpLT5wYWxldHRlX3NpemUsCisJCQkgIGZiaS0+cGFsZXR0ZV9jcHUsIGZiaS0+cGFsZXR0ZV9waHlzKTsKK2ZhaWxlZF9mcmVlX2lvOgorCWlvdW5tYXAoZmJpLT5yZWdiYXNlKTsKK2ZhaWxlZF9mcmVlX3JlczoKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKK2ZhaWxlZF9mYmk6CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJa2ZyZWUoZmJpKTsKK2ZhaWxlZDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCB2dDg1MDBsY2RfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHZ0ODUwMGxjZF9pbmZvICpmYmkgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQgaXJxOworCisJdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcigmZmJpLT5mYik7CisKKwl3cml0ZWwoMCwgZmJpLT5yZWdiYXNlKTsKKworCWlmIChmYmktPmZiLmNtYXAubGVuKQorCQlmYl9kZWFsbG9jX2NtYXAoJmZiaS0+ZmIuY21hcCk7CisKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWZyZWVfaXJxKGlycSwgZmJpKTsKKworCWRtYV9mcmVlX2NvaGVyZW50KCZwZGV2LT5kZXYsIGZiaS0+cGFsZXR0ZV9zaXplLAorCQkJICBmYmktPnBhbGV0dGVfY3B1LCBmYmktPnBhbGV0dGVfcGh5cyk7CisKKwlpb3VubWFwKGZiaS0+cmVnYmFzZSk7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCisJa2ZyZWUoZmJpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB2dDg1MDBsY2RfZHJpdmVyID0geworCS5wcm9iZQkJPSB2dDg1MDBsY2RfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcCh2dDg1MDBsY2RfcmVtb3ZlKSwKKwkuZHJpdmVyCQk9IHsKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5uYW1lCT0gInZ0ODUwMC1sY2QiLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCB2dDg1MDBsY2RfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnZ0ODUwMGxjZF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdnQ4NTAwbGNkX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdnQ4NTAwbGNkX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHZ0ODUwMGxjZF9pbml0KTsKK21vZHVsZV9leGl0KHZ0ODUwMGxjZF9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiQWxleGV5IENoYXJrb3YgPGFsY2hhcmtAZ21haWwuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJMQ0QgY29udHJvbGxlciBkcml2ZXIgZm9yIFZJQSBWVDg1MDAiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdnQ4NTAwbGNkZmIuaCBiL2RyaXZlcnMvdmlkZW8vdnQ4NTAwbGNkZmIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmNhM2NhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby92dDg1MDBsY2RmYi5oCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiAgbGludXgvZHJpdmVycy92aWRlby92dDg1MDBsY2RmYi5oCisgKgorICogIENvcHlyaWdodCAoQykgMjAxMCBBbGV4ZXkgQ2hhcmtvdiA8YWxjaGFya0BnbWFpbC5jb20+CisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCitzdHJ1Y3QgdnQ4NTAwbGNkX2luZm8geworCXN0cnVjdCBmYl9pbmZvCQlmYjsKKwl2b2lkIF9faW9tZW0JCSpyZWdiYXNlOworCXZvaWQgX19pb21lbQkJKnBhbGV0dGVfY3B1OworCWRtYV9hZGRyX3QJCXBhbGV0dGVfcGh5czsKKwlzaXplX3QJCQlwYWxldHRlX3NpemU7CisJd2FpdF9xdWV1ZV9oZWFkX3QJd2FpdDsKK307CisKK3N0YXRpYyBpbnQgYnBwX3ZhbHVlc1tdID0geworCTEsCisJMiwKKwk0LAorCTgsCisJMTIsCisJMTYsCisJMTgsCisJMjQsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby93bTg1MDVmYi5jIGIvZHJpdmVycy92aWRlby93bTg1MDVmYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2ZTM0YTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL3dtODUwNWZiLmMKQEAgLTAsMCArMSw0MjIgQEAKKy8qCisgKiAgV29uZGVyTWVkaWEgV004NTA1IEZyYW1lIEJ1ZmZlciBkZXZpY2UgZHJpdmVyCisgKgorICogIENvcHlyaWdodCAoQykgMjAxMCBFZCBTcGlyaWRvbm92IDxlZG8ucnVzQGdtYWlsLmNvbT4KKyAqICAgIEJhc2VkIG9uIHZ0ODUwMGxjZGZiLmMKKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZmIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKworI2luY2x1ZGUgPG1hY2gvdnQ4NTAwZmIuaD4KKworI2luY2x1ZGUgIndtODUwNWZiX3JlZ3MuaCIKKyNpbmNsdWRlICJ3bXRfZ2Vfcm9wcy5oIgorCisjZGVmaW5lIERSSVZFUl9OQU1FICJ3bTg1MDUtZmIiCisKKyNkZWZpbmUgdG9fd204NTA1ZmJfaW5mbyhfX2luZm8pIGNvbnRhaW5lcl9vZihfX2luZm8sIFwKKwkJCQkJCXN0cnVjdCB3bTg1MDVmYl9pbmZvLCBmYikKK3N0cnVjdCB3bTg1MDVmYl9pbmZvIHsKKwlzdHJ1Y3QgZmJfaW5mbwkJZmI7CisJdm9pZCBfX2lvbWVtCQkqcmVnYmFzZTsKKwl1bnNpZ25lZCBpbnQJCWNvbnRyYXN0OworfTsKKworCitzdGF0aWMgaW50IHdtODUwNWZiX2luaXRfaHcoc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJc3RydWN0IHdtODUwNWZiX2luZm8gKmZiaSA9IHRvX3dtODUwNWZiX2luZm8oaW5mbyk7CisKKwlpbnQgaTsKKworCS8qIEkga25vdyB0aGUgcHVycG9zZSBvbmx5IG9mIGZldyByZWdpc3RlcnMsIHNvIGNsZWFyIHVua25vd24gKi8KKwlmb3IgKGkgPSAwOyBpIDwgMHgyMDA7IGkgKz0gNCkKKwkJd3JpdGVsKDAsIGZiaS0+cmVnYmFzZSArIGkpOworCisJLyogU2V0IGZyYW1lIGJ1ZmZlciBhZGRyZXNzICovCisJd3JpdGVsKGZiaS0+ZmIuZml4LnNtZW1fc3RhcnQsIGZiaS0+cmVnYmFzZSArIFdNVF9HT1ZSX0ZCQUREUik7CisJd3JpdGVsKGZiaS0+ZmIuZml4LnNtZW1fc3RhcnQsIGZiaS0+cmVnYmFzZSArIFdNVF9HT1ZSX0ZCQUREUjEpOworCisJLyogU2V0IGluLW1lbW9yeSBwaWN0dXJlIGZvcm1hdCB0byBSR0IgMzJicHAgKi8KKwl3cml0ZWwoMHgxYywJCSAgICAgICBmYmktPnJlZ2Jhc2UgKyBXTVRfR09WUl9DT0xPUlNQQUNFKTsKKwl3cml0ZWwoMSwJCSAgICAgICBmYmktPnJlZ2Jhc2UgKyBXTVRfR09WUl9DT0xPUlNQQUNFMSk7CisKKwkvKiBWaXJ0dWFsIGJ1ZmZlciBzaXplICovCisJd3JpdGVsKGluZm8tPnZhci54cmVzLAkgICAgICAgZmJpLT5yZWdiYXNlICsgV01UX0dPVlJfWFJFUyk7CisJd3JpdGVsKGluZm8tPnZhci54cmVzX3ZpcnR1YWwsIGZiaS0+cmVnYmFzZSArIFdNVF9HT1ZSX1hSRVNfVklSVFVBTCk7CisKKwkvKiBibGFjayBtYWdpYyA7KSAqLworCXdyaXRlbCgweGYsCQkgICAgICAgZmJpLT5yZWdiYXNlICsgV01UX0dPVlJfRkhJKTsKKwl3cml0ZWwoNCwJCSAgICAgICBmYmktPnJlZ2Jhc2UgKyBXTVRfR09WUl9EVk9fU0VUKTsKKwl3cml0ZWwoMSwJCSAgICAgICBmYmktPnJlZ2Jhc2UgKyBXTVRfR09WUl9NSUZfRU5BQkxFKTsKKwl3cml0ZWwoMSwJCSAgICAgICBmYmktPnJlZ2Jhc2UgKyBXTVRfR09WUl9SRUdfVVBEQVRFKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODUwNWZiX3NldF90aW1pbmcoc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJc3RydWN0IHdtODUwNWZiX2luZm8gKmZiaSA9IHRvX3dtODUwNWZiX2luZm8oaW5mbyk7CisKKwlpbnQgaF9zdGFydCA9IGluZm8tPnZhci5sZWZ0X21hcmdpbjsKKwlpbnQgaF9lbmQgPSBoX3N0YXJ0ICsgaW5mby0+dmFyLnhyZXM7CisJaW50IGhfYWxsID0gaF9lbmQgKyBpbmZvLT52YXIucmlnaHRfbWFyZ2luOworCWludCBoX3N5bmMgPSBpbmZvLT52YXIuaHN5bmNfbGVuOworCisJaW50IHZfc3RhcnQgPSBpbmZvLT52YXIudXBwZXJfbWFyZ2luOworCWludCB2X2VuZCA9IHZfc3RhcnQgKyBpbmZvLT52YXIueXJlczsKKwlpbnQgdl9hbGwgPSB2X2VuZCArIGluZm8tPnZhci5sb3dlcl9tYXJnaW47CisJaW50IHZfc3luYyA9IGluZm8tPnZhci52c3luY19sZW47CisKKwl3cml0ZWwoMCwgZmJpLT5yZWdiYXNlICsgV01UX0dPVlJfVEcpOworCisJd3JpdGVsKGhfc3RhcnQsIGZiaS0+cmVnYmFzZSArIFdNVF9HT1ZSX1RJTUlOR19IX1NUQVJUKTsKKwl3cml0ZWwoaF9lbmQsICAgZmJpLT5yZWdiYXNlICsgV01UX0dPVlJfVElNSU5HX0hfRU5EKTsKKwl3cml0ZWwoaF9hbGwsICAgZmJpLT5yZWdiYXNlICsgV01UX0dPVlJfVElNSU5HX0hfQUxMKTsKKwl3cml0ZWwoaF9zeW5jLCAgZmJpLT5yZWdiYXNlICsgV01UX0dPVlJfVElNSU5HX0hfU1lOQyk7CisKKwl3cml0ZWwodl9zdGFydCwgZmJpLT5yZWdiYXNlICsgV01UX0dPVlJfVElNSU5HX1ZfU1RBUlQpOworCXdyaXRlbCh2X2VuZCwgICBmYmktPnJlZ2Jhc2UgKyBXTVRfR09WUl9USU1JTkdfVl9FTkQpOworCXdyaXRlbCh2X2FsbCwgICBmYmktPnJlZ2Jhc2UgKyBXTVRfR09WUl9USU1JTkdfVl9BTEwpOworCXdyaXRlbCh2X3N5bmMsICBmYmktPnJlZ2Jhc2UgKyBXTVRfR09WUl9USU1JTkdfVl9TWU5DKTsKKworCXdyaXRlbCgxLCBmYmktPnJlZ2Jhc2UgKyBXTVRfR09WUl9URyk7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IHdtODUwNWZiX3NldF9wYXIoc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJc3RydWN0IHdtODUwNWZiX2luZm8gKmZiaSA9IHRvX3dtODUwNWZiX2luZm8oaW5mbyk7CisKKwlpZiAoIWZiaSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsID09IDMyKSB7CisJCWluZm8tPnZhci5yZWQub2Zmc2V0ID0gMTY7CisJCWluZm8tPnZhci5yZWQubGVuZ3RoID0gODsKKwkJaW5mby0+dmFyLnJlZC5tc2JfcmlnaHQgPSAwOworCQlpbmZvLT52YXIuZ3JlZW4ub2Zmc2V0ID0gODsKKwkJaW5mby0+dmFyLmdyZWVuLmxlbmd0aCA9IDg7CisJCWluZm8tPnZhci5ncmVlbi5tc2JfcmlnaHQgPSAwOworCQlpbmZvLT52YXIuYmx1ZS5vZmZzZXQgPSAwOworCQlpbmZvLT52YXIuYmx1ZS5sZW5ndGggPSA4OworCQlpbmZvLT52YXIuYmx1ZS5tc2JfcmlnaHQgPSAwOworCQlpbmZvLT5maXgudmlzdWFsID0gRkJfVklTVUFMX1RSVUVDT0xPUjsKKwkJaW5mby0+Zml4LmxpbmVfbGVuZ3RoID0gaW5mby0+dmFyLnhyZXNfdmlydHVhbCA8PCAyOworCX0KKworCXdtODUwNWZiX3NldF90aW1pbmcoaW5mbyk7CisKKwl3cml0ZWwoZmJpLT5jb250cmFzdDw8MTYgfCBmYmktPmNvbnRyYXN0PDw4IHwgZmJpLT5jb250cmFzdCwKKwkJZmJpLT5yZWdiYXNlICsgV01UX0dPVlJfQ09OVFJBU1QpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGNvbnRyYXN0X3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBmYl9pbmZvICppbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHdtODUwNWZiX2luZm8gKmZiaSA9IHRvX3dtODUwNWZiX2luZm8oaW5mbyk7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgZmJpLT5jb250cmFzdCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGNvbnRyYXN0X3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGZiX2luZm8gKmluZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgd204NTA1ZmJfaW5mbyAqZmJpID0gdG9fd204NTA1ZmJfaW5mbyhpbmZvKTsKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdG1wKSB8fCAodG1wID4gMHhmZikpCisJCXJldHVybiAtRUlOVkFMOworCWZiaS0+Y29udHJhc3QgPSB0bXA7CisKKwl3bTg1MDVmYl9zZXRfcGFyKGluZm8pOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgREVWSUNFX0FUVFIoY29udHJhc3QsIDA2NDQsIGNvbnRyYXN0X3Nob3csIGNvbnRyYXN0X3N0b3JlKTsKKworc3RhdGljIGlubGluZSB1X2ludCBjaGFuX3RvX2ZpZWxkKHVfaW50IGNoYW4sIHN0cnVjdCBmYl9iaXRmaWVsZCAqYmYpCit7CisJY2hhbiAmPSAweGZmZmY7CisJY2hhbiA+Pj0gMTYgLSBiZi0+bGVuZ3RoOworCXJldHVybiBjaGFuIDw8IGJmLT5vZmZzZXQ7Cit9CisKK3N0YXRpYyBpbnQgd204NTA1ZmJfc2V0Y29scmVnKHVuc2lnbmVkIHJlZ25vLCB1bnNpZ25lZCByZWQsIHVuc2lnbmVkIGdyZWVuLAorCQkJICAgdW5zaWduZWQgYmx1ZSwgdW5zaWduZWQgdHJhbnNwLAorCQkJICAgc3RydWN0IGZiX2luZm8gKmluZm8pIHsKKwlzdHJ1Y3Qgd204NTA1ZmJfaW5mbyAqZmJpID0gdG9fd204NTA1ZmJfaW5mbyhpbmZvKTsKKwlpbnQgcmV0ID0gMTsKKwl1bnNpZ25lZCBpbnQgdmFsOworCWlmIChyZWdubyA+PSAyNTYpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGluZm8tPnZhci5ncmF5c2NhbGUpCisJCXJlZCA9IGdyZWVuID0gYmx1ZSA9CisJCQkoMTk1OTUgKiByZWQgKyAzODQ3MCAqIGdyZWVuICsgNzQ3MSAqIGJsdWUpID4+IDE2OworCisJc3dpdGNoIChmYmktPmZiLmZpeC52aXN1YWwpIHsKKwljYXNlIEZCX1ZJU1VBTF9UUlVFQ09MT1I6CisJCWlmIChyZWdubyA8IDE2KSB7CisJCQl1MzIgKnBhbCA9IGluZm8tPnBzZXVkb19wYWxldHRlOworCisJCQl2YWwgID0gY2hhbl90b19maWVsZChyZWQsICZmYmktPmZiLnZhci5yZWQpOworCQkJdmFsIHw9IGNoYW5fdG9fZmllbGQoZ3JlZW4sICZmYmktPmZiLnZhci5ncmVlbik7CisJCQl2YWwgfD0gY2hhbl90b19maWVsZChibHVlLCAmZmJpLT5mYi52YXIuYmx1ZSk7CisKKwkJCXBhbFtyZWdub10gPSB2YWw7CisJCQlyZXQgPSAwOworCQl9CisJCWJyZWFrOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgd204NTA1ZmJfcGFuX2Rpc3BsYXkoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsCisJCQkJc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJc3RydWN0IHdtODUwNWZiX2luZm8gKmZiaSA9IHRvX3dtODUwNWZiX2luZm8oaW5mbyk7CisKKwl3cml0ZWwodmFyLT54b2Zmc2V0LCBmYmktPnJlZ2Jhc2UgKyBXTVRfR09WUl9YUEFOKTsKKwl3cml0ZWwodmFyLT55b2Zmc2V0LCBmYmktPnJlZ2Jhc2UgKyBXTVRfR09WUl9ZUEFOKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg1MDVmYl9ibGFuayhpbnQgYmxhbmssIHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN0cnVjdCB3bTg1MDVmYl9pbmZvICpmYmkgPSB0b193bTg1MDVmYl9pbmZvKGluZm8pOworCisJc3dpdGNoIChibGFuaykgeworCWNhc2UgRkJfQkxBTktfVU5CTEFOSzoKKwkJd204NTA1ZmJfc2V0X3RpbWluZyhpbmZvKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJd3JpdGVsKDAsICBmYmktPnJlZ2Jhc2UgKyBXTVRfR09WUl9USU1JTkdfVl9TWU5DKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmJfb3BzIHdtODUwNWZiX29wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLmZiX3NldF9wYXIJPSB3bTg1MDVmYl9zZXRfcGFyLAorCS5mYl9zZXRjb2xyZWcJPSB3bTg1MDVmYl9zZXRjb2xyZWcsCisJLmZiX2ZpbGxyZWN0CT0gd210X2dlX2ZpbGxyZWN0LAorCS5mYl9jb3B5YXJlYQk9IHdtdF9nZV9jb3B5YXJlYSwKKwkuZmJfaW1hZ2VibGl0CT0gc3lzX2ltYWdlYmxpdCwKKwkuZmJfc3luYwk9IHdtdF9nZV9zeW5jLAorCS5mYl9wYW5fZGlzcGxheQk9IHdtODUwNWZiX3Bhbl9kaXNwbGF5LAorCS5mYl9ibGFuawk9IHdtODUwNWZiX2JsYW5rLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgd204NTA1ZmJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgd204NTA1ZmJfaW5mbwkqZmJpOworCXN0cnVjdCByZXNvdXJjZQkJKnJlczsKKwl2b2lkCQkJKmFkZHI7CisJc3RydWN0IHZ0ODUwMGZiX3BsYXRmb3JtX2RhdGEgKnBkYXRhOworCWludCByZXQ7CisKKwlwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCisJcmV0ID0gLUVOT01FTTsKKwlmYmkgPSBOVUxMOworCisJZmJpID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHdtODUwNWZiX2luZm8pICsgc2l6ZW9mKHUzMikgKiAxNiwKKwkJCQkJCQlHRlBfS0VSTkVMKTsKKwlpZiAoIWZiaSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBmcmFtZWJ1ZmZlciBkZXZpY2VcbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGZhaWxlZDsKKwl9CisKKwlzdHJjcHkoZmJpLT5mYi5maXguaWQsIERSSVZFUl9OQU1FKTsKKworCWZiaS0+ZmIuZml4LnR5cGUJPSBGQl9UWVBFX1BBQ0tFRF9QSVhFTFM7CisJZmJpLT5mYi5maXgueHBhbnN0ZXAJPSAxOworCWZiaS0+ZmIuZml4LnlwYW5zdGVwCT0gMTsKKwlmYmktPmZiLmZpeC55d3JhcHN0ZXAJPSAwOworCWZiaS0+ZmIuZml4LmFjY2VsCT0gRkJfQUNDRUxfTk9ORTsKKworCWZiaS0+ZmIuZmJvcHMJCT0gJndtODUwNWZiX29wczsKKwlmYmktPmZiLmZsYWdzCQk9IEZCSU5GT19ERUZBVUxUCisJCQkJfCBGQklORk9fSFdBQ0NFTF9DT1BZQVJFQQorCQkJCXwgRkJJTkZPX0hXQUNDRUxfRklMTFJFQ1QKKwkJCQl8IEZCSU5GT19IV0FDQ0VMX1hQQU4KKwkJCQl8IEZCSU5GT19IV0FDQ0VMX1lQQU4KKwkJCQl8IEZCSU5GT19WSVJURkIKKwkJCQl8IEZCSU5GT19QQVJUSUFMX1BBTl9PSzsKKwlmYmktPmZiLm5vZGUJCT0gLTE7CisKKwlhZGRyID0gZmJpOworCWFkZHIgPSBhZGRyICsgc2l6ZW9mKHN0cnVjdCB3bTg1MDVmYl9pbmZvKTsKKwlmYmktPmZiLnBzZXVkb19wYWxldHRlCT0gYWRkcjsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKHJlcyA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIEkvTyBtZW1vcnkgcmVzb3VyY2UgZGVmaW5lZFxuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZmFpbGVkX2ZiaTsKKwl9CisKKwlyZXMgPSByZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpLCBEUklWRVJfTkFNRSk7CisJaWYgKHJlcyA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZXF1ZXN0IEkvTyBtZW1vcnlcbiIpOworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZmFpbGVkX2ZiaTsKKwl9CisKKwlmYmktPnJlZ2Jhc2UgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisJaWYgKGZiaS0+cmVnYmFzZSA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBtYXAgSS9PIG1lbW9yeVxuIik7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBmYWlsZWRfZnJlZV9yZXM7CisJfQorCisJZmJfdmlkZW9tb2RlX3RvX3ZhcigmZmJpLT5mYi52YXIsICZwZGF0YS0+bW9kZSk7CisKKwlmYmktPmZiLnZhci5ub25zdGQJCT0gMDsKKwlmYmktPmZiLnZhci5hY3RpdmF0ZQkJPSBGQl9BQ1RJVkFURV9OT1c7CisKKwlmYmktPmZiLnZhci5oZWlnaHQJCT0gLTE7CisJZmJpLT5mYi52YXIud2lkdGgJCT0gLTE7CisJZmJpLT5mYi52YXIueHJlc192aXJ0dWFsCT0gcGRhdGEtPnhyZXNfdmlydHVhbDsKKwlmYmktPmZiLnZhci55cmVzX3ZpcnR1YWwJPSBwZGF0YS0+eXJlc192aXJ0dWFsOworCWZiaS0+ZmIudmFyLmJpdHNfcGVyX3BpeGVsCT0gcGRhdGEtPmJwcDsKKworCWZiaS0+ZmIuZml4LnNtZW1fc3RhcnQJPSBwZGF0YS0+dmlkZW9fbWVtX3BoeXM7CisJZmJpLT5mYi5maXguc21lbV9sZW4JPSBwZGF0YS0+dmlkZW9fbWVtX2xlbjsKKwlmYmktPmZiLnNjcmVlbl9iYXNlCT0gcGRhdGEtPnZpZGVvX21lbV92aXJ0OworCWZiaS0+ZmIuc2NyZWVuX3NpemUJPSBwZGF0YS0+dmlkZW9fbWVtX2xlbjsKKworCWlmIChmYl9hbGxvY19jbWFwKCZmYmktPmZiLmNtYXAsIDI1NiwgMCkgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBjb2xvciBtYXBcbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGZhaWxlZF9mcmVlX2lvOworCX0KKworCXdtODUwNWZiX2luaXRfaHcoJmZiaS0+ZmIpOworCisJZmJpLT5jb250cmFzdCA9IDB4ODA7CisJcmV0ID0gd204NTA1ZmJfc2V0X3BhcigmZmJpLT5mYik7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gc2V0IHBhcmFtZXRlcnNcbiIpOworCQlnb3RvIGZhaWxlZF9mcmVlX2NtYXA7CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZmJpKTsKKworCXJldCA9IHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCZmYmktPmZiKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkiRmFpbGVkIHRvIHJlZ2lzdGVyIGZyYW1lYnVmZmVyIGRldmljZTogJWRcbiIsIHJldCk7CisJCWdvdG8gZmFpbGVkX2ZyZWVfY21hcDsKKwl9CisKKwlyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnBkZXYtPmRldiwgJmRldl9hdHRyX2NvbnRyYXN0KTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJmYiVkOiBmYWlsZWQgdG8gcmVnaXN0ZXIgYXR0cmlidXRlcyAoJWQpXG4iLAorCQkJZmJpLT5mYi5ub2RlLCByZXQpOworCX0KKworCXByaW50ayhLRVJOX0lORk8gImZiJWQ6ICVzIGZyYW1lIGJ1ZmZlciBhdCAweCVseC0weCVseFxuIiwKKwkgICAgICAgZmJpLT5mYi5ub2RlLCBmYmktPmZiLmZpeC5pZCwgZmJpLT5mYi5maXguc21lbV9zdGFydCwKKwkgICAgICAgZmJpLT5mYi5maXguc21lbV9zdGFydCArIGZiaS0+ZmIuZml4LnNtZW1fbGVuIC0gMSk7CisKKwlyZXR1cm4gMDsKKworZmFpbGVkX2ZyZWVfY21hcDoKKwlpZiAoZmJpLT5mYi5jbWFwLmxlbikKKwkJZmJfZGVhbGxvY19jbWFwKCZmYmktPmZiLmNtYXApOworZmFpbGVkX2ZyZWVfaW86CisJaW91bm1hcChmYmktPnJlZ2Jhc2UpOworZmFpbGVkX2ZyZWVfcmVzOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworZmFpbGVkX2ZiaToKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwlrZnJlZShmYmkpOworZmFpbGVkOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHdtODUwNWZiX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB3bTg1MDVmYl9pbmZvICpmYmkgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKworCWRldmljZV9yZW1vdmVfZmlsZSgmcGRldi0+ZGV2LCAmZGV2X2F0dHJfY29udHJhc3QpOworCisJdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcigmZmJpLT5mYik7CisKKwl3cml0ZWwoMCwgZmJpLT5yZWdiYXNlKTsKKworCWlmIChmYmktPmZiLmNtYXAubGVuKQorCQlmYl9kZWFsbG9jX2NtYXAoJmZiaS0+ZmIuY21hcCk7CisKKwlpb3VubWFwKGZiaS0+cmVnYmFzZSk7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCisJa2ZyZWUoZmJpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB3bTg1MDVmYl9kcml2ZXIgPSB7CisJLnByb2JlCQk9IHdtODUwNWZiX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aod204NTA1ZmJfcmVtb3ZlKSwKKwkuZHJpdmVyCQk9IHsKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5uYW1lCT0gRFJJVkVSX05BTUUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHdtODUwNWZiX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ3bTg1MDVmYl9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgd204NTA1ZmJfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ3bTg1MDVmYl9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh3bTg1MDVmYl9pbml0KTsKK21vZHVsZV9leGl0KHdtODUwNWZiX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJFZCBTcGlyaWRvbm92IDxlZG8ucnVzQGdtYWlsLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiRnJhbWVidWZmZXIgZHJpdmVyIGZvciBXTVQgV004NTA1Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3dtODUwNWZiX3JlZ3MuaCBiL2RyaXZlcnMvdmlkZW8vd204NTA1ZmJfcmVncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkZDQxNjYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL3dtODUwNWZiX3JlZ3MuaApAQCAtMCwwICsxLDc2IEBACisvKgorICogIEdPVlIgcmVnaXN0ZXJzIGxpc3QgZm9yIFdNODUwNSBjaGlwcworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgRWQgU3Bpcmlkb25vdiA8ZWRvLnJ1c0BnbWFpbC5jb20+CisgKiAgIEJhc2VkIG9uIFZJQS9Xb25kZXJNZWRpYSB3bTg1MTAtZ292cmgtcmVnLmgKKyAqICAgaHR0cDovL2dpdGh1Yi5jb20vcHJvamVjdGd1cy9rZXJuZWxfd204NTA1L2Jsb2Ivd204NTA1XzIuNi4yOS8KKyAqICAgICAgICAgZHJpdmVycy92aWRlby93bXQvcmVnaXN0ZXIvd204NTEwL3dtODUxMC1nb3ZyaC1yZWcuaAorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfV004NTA1RkJfUkVHU19ICisjZGVmaW5lIF9XTTg1MDVGQl9SRUdTX0gKKworLyoKKyAqIENvbG9yIHNwYWNlIHNlbGVjdCByZWdpc3RlciwgZGVmYXVsdCB2YWx1ZSAweDFjCisgKiAgIEJJVDAgR09WUkhfRFZPX1lVVjJSR0JfRU5BQkxFCisgKiAgIEJJVDEgR09WUkhfVkdBX1lVVjJSR0JfRU5BQkxFCisgKiAgIEJJVDIgR09WUkhfUkdCX01PREUKKyAqICAgQklUMyBHT1ZSSF9EQUNfQ0xLSU5WCisgKiAgIEJJVDQgR09WUkhfQkxBTktfWkVSTworICovCisjZGVmaW5lIFdNVF9HT1ZSX0NPTE9SU1BBQ0UJMHgxZTQKKy8qCisgKiBBbm90aGVyIGNvbG9yc3BhY2Ugc2VsZWN0IHJlZ2lzdGVyLCBkZWZhdWx0IHZhbHVlIDEKKyAqICAgQklUMCBHT1ZSSF9EVk9fUkdCCisgKiAgIEJJVDEgR09WUkhfRFZPX1lVVjQyMgorICovCisjZGVmaW5lIFdNVF9HT1ZSX0NPTE9SU1BBQ0UxCSAweDMwCisKKyNkZWZpbmUgV01UX0dPVlJfQ09OVFJBU1QJMHgxYjgKKyNkZWZpbmUgV01UX0dPVlJfQlJHSFRORVNTCTB4MWJjIC8qIGluY29tcGF0aWJsZSB3aXRoIFJHQj8gKi8KKworLyogRnJhbXViZWZmZXIgYWRkcmVzcyAqLworI2RlZmluZSBXTVRfR09WUl9GQkFERFIJCSAweDkwCisjZGVmaW5lIFdNVF9HT1ZSX0ZCQUREUjEJIDB4OTQgLyogVVYgb2Zmc2V0IGluIFlVViBtb2RlICovCisKKy8qIE9mZnNldCBvZiB2aXNpYmxlIHdpbmRvdyAqLworI2RlZmluZSBXTVRfR09WUl9YUEFOCQkgMHhhNAorI2RlZmluZSBXTVRfR09WUl9ZUEFOCQkgMHhhMAorCisjZGVmaW5lIFdNVF9HT1ZSX1hSRVMJCSAweDk4CisjZGVmaW5lIFdNVF9HT1ZSX1hSRVNfVklSVFVBTAkgMHg5YworCisjZGVmaW5lIFdNVF9HT1ZSX01JRl9FTkFCTEUJIDB4ODAKKyNkZWZpbmUgV01UX0dPVlJfRkhJCQkgMHhhOAorI2RlZmluZSBXTVRfR09WUl9SRUdfVVBEQVRFCSAweGU0CisKKy8qCisgKiAgIEJJVDAgR09WUkhfRFZPX09VVFdJRFRICisgKiAgIEJJVDEgR09WUkhfRFZPX1NZTkNfUE9MQVIKKyAqICAgQklUMiBHT1ZSSF9EVk9fRU5BQkxFCisgKi8KKyNkZWZpbmUgV01UX0dPVlJfRFZPX1NFVAkweDE0OAorCisvKiBUaW1pbmcgZ2VuZXJhdG9yPyAqLworI2RlZmluZSBXTVRfR09WUl9URwkJMHgxMDAKKworLyogVGltaW5ncyAqLworI2RlZmluZSBXTVRfR09WUl9USU1JTkdfSF9BTEwJMHgxMDgKKyNkZWZpbmUgV01UX0dPVlJfVElNSU5HX1ZfQUxMCTB4MTBjCisjZGVmaW5lIFdNVF9HT1ZSX1RJTUlOR19WX1NUQVJUCTB4MTEwCisjZGVmaW5lIFdNVF9HT1ZSX1RJTUlOR19WX0VORAkweDExNAorI2RlZmluZSBXTVRfR09WUl9USU1JTkdfSF9TVEFSVAkweDExOAorI2RlZmluZSBXTVRfR09WUl9USU1JTkdfSF9FTkQJMHgxMWMKKyNkZWZpbmUgV01UX0dPVlJfVElNSU5HX1ZfU1lOQwkweDEyOAorI2RlZmluZSBXTVRfR09WUl9USU1JTkdfSF9TWU5DCTB4MTJjCisKKyNlbmRpZiAvKiBfV004NTA1RkJfUkVHU19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3dtdF9nZV9yb3BzLmMgYi9kcml2ZXJzL3ZpZGVvL3dtdF9nZV9yb3BzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU4MzJiNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vd210X2dlX3JvcHMuYwpAQCAtMCwwICsxLDE4NiBAQAorLyoKKyAqICBsaW51eC9kcml2ZXJzL3ZpZGVvL3dtdF9nZV9yb3BzLmMKKyAqCisgKiAgQWNjZWxlcmF0b3JzIGZvciByYXN0ZXIgb3BlcmF0aW9ucyB1c2luZyBXb25kZXJNZWRpYSBHcmFwaGljcyBFbmdpbmUKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIEFsZXhleSBDaGFya292IDxhbGNoYXJrQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgImZiX2RyYXcuaCIKKworI2RlZmluZSBHRV9DT01NQU5EX09GRgkJMHgwMAorI2RlZmluZSBHRV9ERVBUSF9PRkYJCTB4MDQKKyNkZWZpbmUgR0VfSElHSENPTE9SX09GRgkweDA4CisjZGVmaW5lIEdFX1JPUENPREVfT0ZGCQkweDE0CisjZGVmaW5lIEdFX0ZJUkVfT0ZGCQkweDE4CisjZGVmaW5lIEdFX1NSQ0JBU0VfT0ZGCQkweDIwCisjZGVmaW5lIEdFX1NSQ0RJU1BXX09GRgkJMHgyNAorI2RlZmluZSBHRV9TUkNESVNQSF9PRkYJCTB4MjgKKyNkZWZpbmUgR0VfU1JDQVJFQVhfT0ZGCQkweDJjCisjZGVmaW5lIEdFX1NSQ0FSRUFZX09GRgkJMHgzMAorI2RlZmluZSBHRV9TUkNBUkVBV19PRkYJCTB4MzQKKyNkZWZpbmUgR0VfU1JDQVJFQUhfT0ZGCQkweDM4CisjZGVmaW5lIEdFX0RFU1RCQVNFX09GRgkJMHgzYworI2RlZmluZSBHRV9ERVNURElTUFdfT0ZGCTB4NDAKKyNkZWZpbmUgR0VfREVTVERJU1BIX09GRgkweDQ0CisjZGVmaW5lIEdFX0RFU1RBUkVBWF9PRkYJMHg0OAorI2RlZmluZSBHRV9ERVNUQVJFQVlfT0ZGCTB4NGMKKyNkZWZpbmUgR0VfREVTVEFSRUFXX09GRgkweDUwCisjZGVmaW5lIEdFX0RFU1RBUkVBSF9PRkYJMHg1NAorI2RlZmluZSBHRV9QQVQwQ19PRkYJCTB4ODgJLyogUGF0dGVybiAwIGNvbG9yICovCisjZGVmaW5lIEdFX0VOQUJMRV9PRkYJCTB4ZWMKKyNkZWZpbmUgR0VfSU5URU5fT0ZGCQkweGYwCisjZGVmaW5lIEdFX1NUQVRVU19PRkYJCTB4ZjgKKworc3RhdGljIHZvaWQgX19pb21lbSAqcmVnYmFzZTsKKwordm9pZCB3bXRfZ2VfZmlsbHJlY3Qoc3RydWN0IGZiX2luZm8gKnAsIGNvbnN0IHN0cnVjdCBmYl9maWxscmVjdCAqcmVjdCkKK3sKKwl1bnNpZ25lZCBsb25nIGZnLCBwYXQ7CisKKwlpZiAocC0+c3RhdGUgIT0gRkJJTkZPX1NUQVRFX1JVTk5JTkcpCisJCXJldHVybjsKKworCWlmIChwLT5maXgudmlzdWFsID09IEZCX1ZJU1VBTF9UUlVFQ09MT1IgfHwKKwkgICAgcC0+Zml4LnZpc3VhbCA9PSBGQl9WSVNVQUxfRElSRUNUQ09MT1IpCisJCWZnID0gKCh1MzIgKikgKHAtPnBzZXVkb19wYWxldHRlKSlbcmVjdC0+Y29sb3JdOworCWVsc2UKKwkJZmcgPSByZWN0LT5jb2xvcjsKKworCXBhdCA9IHBpeGVsX3RvX3BhdChwLT52YXIuYml0c19wZXJfcGl4ZWwsIGZnKTsKKworCWlmIChwLT5mYm9wcy0+ZmJfc3luYykKKwkJcC0+ZmJvcHMtPmZiX3N5bmMocCk7CisKKwl3cml0ZWwocC0+dmFyLmJpdHNfcGVyX3BpeGVsID09IDMyID8gMyA6CisJICAgICAgKHAtPnZhci5iaXRzX3Blcl9waXhlbCA9PSA4ID8gMCA6IDEpLCByZWdiYXNlICsgR0VfREVQVEhfT0ZGKTsKKwl3cml0ZWwocC0+dmFyLmJpdHNfcGVyX3BpeGVsID09IDE1ID8gMSA6IDAsIHJlZ2Jhc2UgKyBHRV9ISUdIQ09MT1JfT0ZGKTsKKwl3cml0ZWwocC0+Zml4LnNtZW1fc3RhcnQsIHJlZ2Jhc2UgKyBHRV9ERVNUQkFTRV9PRkYpOworCXdyaXRlbChwLT52YXIueHJlc192aXJ0dWFsIC0gMSwgcmVnYmFzZSArIEdFX0RFU1RESVNQV19PRkYpOworCXdyaXRlbChwLT52YXIueXJlc192aXJ0dWFsIC0gMSwgcmVnYmFzZSArIEdFX0RFU1RESVNQSF9PRkYpOworCXdyaXRlbChyZWN0LT5keCwgcmVnYmFzZSArIEdFX0RFU1RBUkVBWF9PRkYpOworCXdyaXRlbChyZWN0LT5keSwgcmVnYmFzZSArIEdFX0RFU1RBUkVBWV9PRkYpOworCXdyaXRlbChyZWN0LT53aWR0aCAtIDEsIHJlZ2Jhc2UgKyBHRV9ERVNUQVJFQVdfT0ZGKTsKKwl3cml0ZWwocmVjdC0+aGVpZ2h0IC0gMSwgcmVnYmFzZSArIEdFX0RFU1RBUkVBSF9PRkYpOworCisJd3JpdGVsKHBhdCwgcmVnYmFzZSArIEdFX1BBVDBDX09GRik7CisJd3JpdGVsKDEsIHJlZ2Jhc2UgKyBHRV9DT01NQU5EX09GRik7CisJd3JpdGVsKHJlY3QtPnJvcCA9PSBST1BfWE9SID8gMHg1YSA6IDB4ZjAsIHJlZ2Jhc2UgKyBHRV9ST1BDT0RFX09GRik7CisJd3JpdGVsKDEsIHJlZ2Jhc2UgKyBHRV9GSVJFX09GRik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh3bXRfZ2VfZmlsbHJlY3QpOworCit2b2lkIHdtdF9nZV9jb3B5YXJlYShzdHJ1Y3QgZmJfaW5mbyAqcCwgY29uc3Qgc3RydWN0IGZiX2NvcHlhcmVhICphcmVhKQoreworCWlmIChwLT5zdGF0ZSAhPSBGQklORk9fU1RBVEVfUlVOTklORykKKwkJcmV0dXJuOworCisJaWYgKHAtPmZib3BzLT5mYl9zeW5jKQorCQlwLT5mYm9wcy0+ZmJfc3luYyhwKTsKKworCXdyaXRlbChwLT52YXIuYml0c19wZXJfcGl4ZWwgPiAxNiA/IDMgOgorCSAgICAgIChwLT52YXIuYml0c19wZXJfcGl4ZWwgPiA4ID8gMSA6IDApLCByZWdiYXNlICsgR0VfREVQVEhfT0ZGKTsKKworCXdyaXRlbChwLT5maXguc21lbV9zdGFydCwgcmVnYmFzZSArIEdFX1NSQ0JBU0VfT0ZGKTsKKwl3cml0ZWwocC0+dmFyLnhyZXNfdmlydHVhbCAtIDEsIHJlZ2Jhc2UgKyBHRV9TUkNESVNQV19PRkYpOworCXdyaXRlbChwLT52YXIueXJlc192aXJ0dWFsIC0gMSwgcmVnYmFzZSArIEdFX1NSQ0RJU1BIX09GRik7CisJd3JpdGVsKGFyZWEtPnN4LCByZWdiYXNlICsgR0VfU1JDQVJFQVhfT0ZGKTsKKwl3cml0ZWwoYXJlYS0+c3ksIHJlZ2Jhc2UgKyBHRV9TUkNBUkVBWV9PRkYpOworCXdyaXRlbChhcmVhLT53aWR0aCAtIDEsIHJlZ2Jhc2UgKyBHRV9TUkNBUkVBV19PRkYpOworCXdyaXRlbChhcmVhLT5oZWlnaHQgLSAxLCByZWdiYXNlICsgR0VfU1JDQVJFQUhfT0ZGKTsKKworCXdyaXRlbChwLT5maXguc21lbV9zdGFydCwgcmVnYmFzZSArIEdFX0RFU1RCQVNFX09GRik7CisJd3JpdGVsKHAtPnZhci54cmVzX3ZpcnR1YWwgLSAxLCByZWdiYXNlICsgR0VfREVTVERJU1BXX09GRik7CisJd3JpdGVsKHAtPnZhci55cmVzX3ZpcnR1YWwgLSAxLCByZWdiYXNlICsgR0VfREVTVERJU1BIX09GRik7CisJd3JpdGVsKGFyZWEtPmR4LCByZWdiYXNlICsgR0VfREVTVEFSRUFYX09GRik7CisJd3JpdGVsKGFyZWEtPmR5LCByZWdiYXNlICsgR0VfREVTVEFSRUFZX09GRik7CisJd3JpdGVsKGFyZWEtPndpZHRoIC0gMSwgcmVnYmFzZSArIEdFX0RFU1RBUkVBV19PRkYpOworCXdyaXRlbChhcmVhLT5oZWlnaHQgLSAxLCByZWdiYXNlICsgR0VfREVTVEFSRUFIX09GRik7CisKKwl3cml0ZWwoMHhjYywgcmVnYmFzZSArIEdFX1JPUENPREVfT0ZGKTsKKwl3cml0ZWwoMSwgcmVnYmFzZSArIEdFX0NPTU1BTkRfT0ZGKTsKKwl3cml0ZWwoMSwgcmVnYmFzZSArIEdFX0ZJUkVfT0ZGKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHdtdF9nZV9jb3B5YXJlYSk7CisKK2ludCB3bXRfZ2Vfc3luYyhzdHJ1Y3QgZmJfaW5mbyAqcCkKK3sKKwlpbnQgbG9vcHMgPSA1MDAwMDAwOworCXdoaWxlICgocmVhZGwocmVnYmFzZSArIEdFX1NUQVRVU19PRkYpICYgNCkgJiYgLS1sb29wcykKKwkJY3B1X3JlbGF4KCk7CisJcmV0dXJuIGxvb3BzID4gMCA/IDAgOiAtRUJVU1k7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh3bXRfZ2Vfc3luYyk7CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHdtdF9nZV9yb3BzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmIChyZXMgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBJL08gbWVtb3J5IHJlc291cmNlIGRlZmluZWRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKiBPbmx5IG9uZSBST1AgZW5naW5lIGlzIHByZXNlbnRseSBzdXBwb3J0ZWQuICovCisJaWYgKHVubGlrZWx5KHJlZ2Jhc2UpKSB7CisJCVdBUk5fT04oMSk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJcmVnYmFzZSA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwlpZiAocmVnYmFzZSA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBtYXAgSS9PIG1lbW9yeVxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJd3JpdGVsKDEsIHJlZ2Jhc2UgKyBHRV9FTkFCTEVfT0ZGKTsKKwlwcmludGsoS0VSTl9JTkZPICJFbmFibGVkIHN1cHBvcnQgZm9yIFdNVCBHRSByYXN0ZXIgYWNjZWxlcmF0aW9uXG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCB3bXRfZ2Vfcm9wc19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlpb3VubWFwKHJlZ2Jhc2UpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB3bXRfZ2Vfcm9wc19kcml2ZXIgPSB7CisJLnByb2JlCQk9IHdtdF9nZV9yb3BzX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aod210X2dlX3JvcHNfcmVtb3ZlKSwKKwkuZHJpdmVyCQk9IHsKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5uYW1lCT0gIndtdF9nZV9yb3BzIiwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgd210X2dlX3JvcHNfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJndtdF9nZV9yb3BzX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB3bXRfZ2Vfcm9wc19leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJndtdF9nZV9yb3BzX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHdtdF9nZV9yb3BzX2luaXQpOworbW9kdWxlX2V4aXQod210X2dlX3JvcHNfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkFsZXhleSBDaGFya292IDxhbGNoYXJrQGdtYWlsLmNvbSIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBY2NlbGVyYXRvcnMgZm9yIHJhc3RlciBvcGVyYXRpb25zIHVzaW5nICIKKwkJICAgIldvbmRlck1lZGlhIEdyYXBoaWNzIEVuZ2luZSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby93bXRfZ2Vfcm9wcy5oIGIvZHJpdmVycy92aWRlby93bXRfZ2Vfcm9wcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3MzgwNzUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL3dtdF9nZV9yb3BzLmgKQEAgLTAsMCArMSw1IEBACitleHRlcm4gdm9pZCB3bXRfZ2VfZmlsbHJlY3Qoc3RydWN0IGZiX2luZm8gKmluZm8sCisJCQkgICAgY29uc3Qgc3RydWN0IGZiX2ZpbGxyZWN0ICpyZWN0KTsKK2V4dGVybiB2b2lkIHdtdF9nZV9jb3B5YXJlYShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKKwkJCSAgICBjb25zdCBzdHJ1Y3QgZmJfY29weWFyZWEgKmFyZWEpOworZXh0ZXJuIGludCB3bXRfZ2Vfc3luYyhzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3hlbi1mYmZyb250LmMgYi9kcml2ZXJzL3ZpZGVvL3hlbi1mYmZyb250LmMKaW5kZXggNDI4ZDI3My4uNGFiYjBiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby94ZW4tZmJmcm9udC5jCisrKyBiL2RyaXZlcnMvdmlkZW8veGVuLWZiZnJvbnQuYwpAQCAtNDkyLDcgKzQ5Miw3IEBACiAJCXJldHVybjsKIAogCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKLQlmb3IgKGMgPSBjb25zb2xlX2RyaXZlcnM7IGM7IGMgPSBjLT5uZXh0KSB7CisJZm9yX2VhY2hfY29uc29sZShjKSB7CiAJCWlmICghc3RyY21wKGMtPm5hbWUsICJ0dHkiKSAmJiBjLT5pbmRleCA9PSAwKQogCQkJYnJlYWs7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9ocHdkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9ocHdkdC5jCmluZGV4IDNkNzcxMTYuLmRlYTdiNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvaHB3ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL2hwd2R0LmMKQEAgLTY0MiwxOSArNjQyLDE0IEBACiAgKi8KIAogI2lmZGVmIENPTkZJR19IUFdEVF9OTUlfREVDT0RJTkcKLSNpZmRlZiBBUkNIX0hBU19OTUlfV0FUQ0hET0cKKyNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBocHdkdF9jaGVja19ubWlfZGVjb2Rpbmcoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAkvKgogCSAqIElmIG5taV93YXRjaGRvZyBpcyB0dXJuZWQgb2ZmIHRoZW4gd2UgY2FuIHR1cm4gb24KIAkgKiBvdXIgbm1pIGRlY29kaW5nIGNhcGFiaWxpdHkuCiAJICovCi0JaWYgKCFubWlfd2F0Y2hkb2dfYWN0aXZlKCkpCi0JCWhwd2R0X25taV9kZWNvZGluZyA9IDE7Ci0JZWxzZQotCQlkZXZfd2FybigmZGV2LT5kZXYsICJOTUkgZGVjb2RpbmcgaXMgZGlzYWJsZWQuIFRvIGVuYWJsZSB0aGlzICIKLQkJCSJmdW5jdGlvbmFsaXR5IHlvdSBtdXN0IHJlYm9vdCB3aXRoIG5taV93YXRjaGRvZz0wICIKLQkJCSJhbmQgbG9hZCB0aGUgaHB3ZHQgZHJpdmVyIHdpdGggcHJpb3JpdHk9MS5cbiIpOworCWhwd2R0X25taV9kZWNvZGluZyA9IDE7CiB9CiAjZWxzZQogc3RhdGljIHZvaWQgX19kZXZpbml0IGhwd2R0X2NoZWNrX25taV9kZWNvZGluZyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQpAQCAtNjYyLDcgKzY1Nyw3IEBACiAJZGV2X3dhcm4oJmRldi0+ZGV2LCAiTk1JIGRlY29kaW5nIGlzIGRpc2FibGVkLiAiCiAJCSJZb3VyIGtlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IGEgTk1JIFdhdGNoZG9nLlxuIik7CiB9Ci0jZW5kaWYgLyogQVJDSF9IQVNfTk1JX1dBVENIRE9HICovCisjZW5kaWYgLyogQ09ORklHX1g4Nl9MT0NBTF9BUElDICovCiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGhwd2R0X2luaXRfbm1pX2RlY29kaW5nKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL2lteDJfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL2lteDJfd2R0LmMKaW5kZXggMmVlN2RhYy4uODZmN2NhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9pbXgyX3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvaW14Ml93ZHQuYwpAQCAtMjcwLDcgKzI3MCw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCWlteDJfd2R0LmNsayA9IGNsa19nZXRfc3lzKCJpbXgtd2R0LjAiLCBOVUxMKTsKKwlpbXgyX3dkdC5jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsIE5VTEwpOwogCWlmIChJU19FUlIoaW14Ml93ZHQuY2xrKSkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCBnZXQgV2F0Y2hkb2cgY2xvY2tcbiIpOwogCQlyZXR1cm4gUFRSX0VSUihpbXgyX3dkdC5jbGspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy94ZW4vZXZlbnRzLmMgYi9kcml2ZXJzL3hlbi9ldmVudHMuYwppbmRleCAzMWFmMGFjLi42NWY4NjM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3hlbi9ldmVudHMuYworKysgYi9kcml2ZXJzL3hlbi9ldmVudHMuYwpAQCAtMzU1LDcgKzM1NSw3IEBACiAJCXN0cnVjdCBldnRjaG5fdW5tYXNrIHVubWFzayA9IHsgLnBvcnQgPSBwb3J0IH07CiAJCSh2b2lkKUhZUEVSVklTT1JfZXZlbnRfY2hhbm5lbF9vcChFVlRDSE5PUF91bm1hc2ssICZ1bm1hc2spOwogCX0gZWxzZSB7Ci0JCXN0cnVjdCB2Y3B1X2luZm8gKnZjcHVfaW5mbyA9IF9fZ2V0X2NwdV92YXIoeGVuX3ZjcHUpOworCQlzdHJ1Y3QgdmNwdV9pbmZvICp2Y3B1X2luZm8gPSBfX3RoaXNfY3B1X3JlYWQoeGVuX3ZjcHUpOwogCiAJCXN5bmNfY2xlYXJfYml0KHBvcnQsICZzLT5ldnRjaG5fbWFza1swXSk7CiAKQEAgLTExMDEsNyArMTEwMSw3IEBACiB7CiAJaW50IGNwdSA9IGdldF9jcHUoKTsKIAlzdHJ1Y3Qgc2hhcmVkX2luZm8gKnMgPSBIWVBFUlZJU09SX3NoYXJlZF9pbmZvOwotCXN0cnVjdCB2Y3B1X2luZm8gKnZjcHVfaW5mbyA9IF9fZ2V0X2NwdV92YXIoeGVuX3ZjcHUpOworCXN0cnVjdCB2Y3B1X2luZm8gKnZjcHVfaW5mbyA9IF9fdGhpc19jcHVfcmVhZCh4ZW5fdmNwdSk7CiAgCXVuc2lnbmVkIGNvdW50OwogCiAJZG8gewpAQCAtMTEwOSw3ICsxMTA5LDcgQEAKIAogCQl2Y3B1X2luZm8tPmV2dGNobl91cGNhbGxfcGVuZGluZyA9IDA7CiAKLQkJaWYgKF9fZ2V0X2NwdV92YXIoeGVkX25lc3RpbmdfY291bnQpKyspCisJCWlmIChfX3RoaXNfY3B1X2luY19yZXR1cm4oeGVkX25lc3RpbmdfY291bnQpIC0gMSkKIAkJCWdvdG8gb3V0OwogCiAjaWZuZGVmIENPTkZJR19YODYgLyogTm8gbmVlZCBmb3IgYSBiYXJyaWVyIC0tIFhDSEcgaXMgYSBiYXJyaWVyIG9uIHg4Ni4gKi8KQEAgLTExNDEsOCArMTE0MSw4IEBACiAKIAkJQlVHX09OKCFpcnFzX2Rpc2FibGVkKCkpOwogCi0JCWNvdW50ID0gX19nZXRfY3B1X3Zhcih4ZWRfbmVzdGluZ19jb3VudCk7Ci0JCV9fZ2V0X2NwdV92YXIoeGVkX25lc3RpbmdfY291bnQpID0gMDsKKwkJY291bnQgPSBfX3RoaXNfY3B1X3JlYWQoeGVkX25lc3RpbmdfY291bnQpOworCQlfX3RoaXNfY3B1X3dyaXRlKHhlZF9uZXN0aW5nX2NvdW50LCAwKTsKIAl9IHdoaWxlIChjb3VudCAhPSAxIHx8IHZjcHVfaW5mby0+ZXZ0Y2huX3VwY2FsbF9wZW5kaW5nKTsKIAogb3V0OgpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvTWFrZWZpbGUgYi9maXJtd2FyZS9NYWtlZmlsZQppbmRleCA3NGQ0N2NkLi4wYTlkMWUyIDEwMDY0NAotLS0gYS9maXJtd2FyZS9NYWtlZmlsZQorKysgYi9maXJtd2FyZS9NYWtlZmlsZQpAQCAtMzIsMTMgKzMyLDEzIEBACiAJCQkJCSBhZGFwdGVjL3N0YXJmaXJlX3R4LmJpbgogZnctc2hpcHBlZC0kKENPTkZJR19BVEFSSV9EU1A1NkspICs9IGRzcDU2ay9ib290c3RyYXAuYmluCiBmdy1zaGlwcGVkLSQoQ09ORklHX0FUTV9BTUJBU1NBRE9SKSArPSBhdG1zYXIxMS5mdwotZnctc2hpcHBlZC0kKENPTkZJR19CTlgyWCkgKz0gYm54MngvYm54MngtZTEtNi4wLjM0LjAuZncgXAotCQkJICAgICAgYm54MngvYm54MngtZTFoLTYuMC4zNC4wLmZ3IFwKLQkJCSAgICAgIGJueDJ4L2JueDJ4LWUyLTYuMC4zNC4wLmZ3Ci1mdy1zaGlwcGVkLSQoQ09ORklHX0JOWDIpICs9IGJueDIvYm54Mi1taXBzLTA5LTYuMC4xNy5mdyBcCitmdy1zaGlwcGVkLSQoQ09ORklHX0JOWDJYKSArPSBibngyeC9ibngyeC1lMS02LjIuNS4wLmZ3IFwKKwkJCSAgICAgIGJueDJ4L2JueDJ4LWUxaC02LjIuNS4wLmZ3IFwKKwkJCSAgICAgIGJueDJ4L2JueDJ4LWUyLTYuMi41LjAuZncKK2Z3LXNoaXBwZWQtJChDT05GSUdfQk5YMikgKz0gYm54Mi9ibngyLW1pcHMtMDktNi4yLjEuZncgXAogCQkJICAgICBibngyL2JueDItcnYycC0wOS02LjAuMTcuZncgXAogCQkJICAgICBibngyL2JueDItcnYycC0wOWF4LTYuMC4xNy5mdyBcCi0JCQkgICAgIGJueDIvYm54Mi1taXBzLTA2LTYuMC4xNS5mdyBcCisJCQkgICAgIGJueDIvYm54Mi1taXBzLTA2LTYuMi4xLmZ3IFwKIAkJCSAgICAgYm54Mi9ibngyLXJ2MnAtMDYtNi4wLjE1LmZ3CiBmdy1zaGlwcGVkLSQoQ09ORklHX0NBU1NJTkkpICs9IHN1bi9jYXNzaW5pLmJpbgogZnctc2hpcHBlZC0kKENPTkZJR19DT01QVVRPTkUpICs9IGludGVsbGlwb3J0Mi5iaW4KZGlmZiAtLWdpdCBhL2Zpcm13YXJlL1dIRU5DRSBiL2Zpcm13YXJlL1dIRU5DRQppbmRleCBmMjJjNGRmLi4xNGFhZWU4IDEwMDY0NAotLS0gYS9maXJtd2FyZS9XSEVOQ0UKKysrIGIvZmlybXdhcmUvV0hFTkNFCkBAIC02OTksOSArNjk5LDkgQEAKIAogRHJpdmVyOiBCTlgyIC0gQnJvYWRjb20gTmV0WHRyZW1lSUkKIAotRmlsZTogYm54Mi9ibngyLW1pcHMtMDYtNi4wLjE1LmZ3CitGaWxlOiBibngyL2JueDItbWlwcy0wNi02LjIuMS5mdwogRmlsZTogYm54Mi9ibngyLXJ2MnAtMDYtNi4wLjE1LmZ3Ci1GaWxlOiBibngyL2JueDItbWlwcy0wOS02LjAuMTcuZncKK0ZpbGU6IGJueDIvYm54Mi1taXBzLTA5LTYuMi4xLmZ3CiBGaWxlOiBibngyL2JueDItcnYycC0wOS02LjAuMTcuZncKIEZpbGU6IGJueDIvYm54Mi1ydjJwLTA5YXgtNi4wLjE3LmZ3CiAKZGlmZiAtLWdpdCBhL2Zpcm13YXJlL2JueDIvYm54Mi1taXBzLTA2LTYuMC4xNS5mdy5paGV4IGIvZmlybXdhcmUvYm54Mi9ibngyLW1pcHMtMDYtNi4wLjE1LmZ3LmloZXgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5YmJkYzMuLjAwMDAwMDAKLS0tIGEvZmlybXdhcmUvYm54Mi9ibngyLW1pcHMtMDYtNi4wLjE1LmZ3LmloZXgKKysrIC9kZXYvbnVsbApAQCAtMSw1ODE1ICswLDAgQEAKLToxMDAwMDAwMDA4MDAwMTE4MDgwMDAwMDAwMDAwNEE2ODAwMDAwMEM4NEQKLToxMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDA0QTY4MjYKLToxMDAwMjAwMDAwMDAwMDE0MDAwMDRCMzAwODAwMDBBMDA4MDAwMDAwOTEKLToxMDAwMzAwMDAwMDA1Njg4MDAwMDRCNDQwODAwNTgwMDAwMDAwMDg0NkYKLToxMDAwNDAwMDAwMDBBMUNDMDgwMDU2ODgwMDAwMDE1ODAwMDBBMjUwMTIKLToxMDAwNTAwMDA4MDAzMjEwMDgwMDAwMDAwMDAwNzJEMDAwMDBBM0E4QzEKLToxMDAwNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDA3MkQwNDYKLToxMDAwNzAwMDAwMDAwMDI0MDAwMTE2NzgwODAwMDQ5MDA4MDAwNDAwMjUKLToxMDAwODAwMDAwMDAxN0Q0MDAwMTE2OUMwMDAwMDAwMDAwMDAwMDAwRDIKLToxMDAwOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAKLToxMDAwQTAwMDA4MDAwMEE4MDgwMDAwMDAwMDAwM0JGQzAwMDEyRTcwQzIKLToxMDAwQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAKLTowODAwQzAwMDAwMDAwMDAwMDAwMDAwMDAzOAotOjA4MDBDODAwMEEwMDAwNDYwMDAwMDAwMEUwCi06MTAwMEQwMDAwMDAwMDAwMDAwMDAwMDBENjM2RjZEMzYyRTMwMkUzMUUxCi06MTAwMEUwMDAzNTAwMDAwMDA2MDAwRjAyMDAwMDAwMDAwMDAwMDAwM0MxCi06MTAwMEYwMDAwMDAwMDBDODAwMDAwMDMyMDAwMDAwMDMwMDAwMDAwMDAzCi06MTAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVGCi06MTAwMTEwMDAwMDAwMDAxMDAwMDAwMTM2MDAwMEVBNjAwMDAwMDAwNTQ5Ci06MTAwMTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEM3Ci06MTAwMTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJGCi06MTAwMTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFGCi06MTAwMTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlGCi06MTAwMTYwMDAwMDAwMDAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhECi06MTAwMTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdGCi06MTAwMTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDVGCi06MTAwMTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVGCi06MTAwMUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRGCi06MTAwMUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNGCi06MTAwMUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGCi06MTAwMUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFGCi06MTAwMUUwMDAwMDAwMDAwMDEwMDAwMDAzMDAwMDAwMDAwMDAwMDAwREVGCi06MTAwMUYwMDAwMDAwMDAwRDNDMDIwODAwMjQ0MjRBQTAzQzAzMDgwMDE1Ci06MTAwMjAwMDAyNDYzNEI5Q0FDNDAwMDAwMDA0MzIwMkIxNDgwRkZGRDc2Ci06MTAwMjEwMDAyNDQyMDAwNDNDMUQwODAwMzdCRDdGRkMwM0EwRjAyMUYwCi06MTAwMjIwMDAzQzEwMDgwMDI2MTAwMTE4M0MxQzA4MDAyNzlDNEFBMDFFCi06MTAwMjMwMDAwRTAwMDE2ODAwMDAwMDAwMDAwMDAwMEQyNzQ3MDEwMENCCi06MTAwMjQwMDA5MEUzMDAwQjI0MDIwMDFBOTRFNTAwMDgxNDYyMDAyOEQxCi06MTAwMjUwMDAwMDAwMjAyMThDRTIwMDAwM0MwMzA4MDA4QzYzMDA0NDc1Ci06MTAwMjYwMDA5NEU2MDAxNDAwMDIxMUMyMDAwMjEwNDAzMEE0MDAwMjAzCi06MTAwMjcwMDAwMDVBMTAyMTI0NjMwMDAxMzBBNTAwMDRBNDQ2MDA4MDI4Ci06MTAwMjgwMDAzQzAxMDgwMEFDMjMwMDQ0MTBBMDAwMTkwMDA0MjAyQkZFCi06MTAwMjkwMDA4RjQyMDJCODA0NDEwMDA4MjQwNDAwMDEzQzAyMDgwMDE3Ci06MTAwMkEwMDA4QzQyMDA2MDI0NDIwMDAxM0MwMTA4MDBBQzIyMDA2MDQ2Ci06MTAwMkIwMDAwM0UwMDAwODAwODAxMDIxOENFMjAwMjA5NEUzMDAxNjg3Ci06MTAwMkMwMDAwMDAwMjAyMUFGNDIwMjgwOENFMjAwMDRBNzQzMDI4NDk4Ci06MTAwMkQwMDBBRjQyMDI4ODNDMDIxMDAwQUY0MjAyQjgzQzAyMDgwMDY0Ci06MTAwMkUwMDA4QzQyMDA1QzI0NDIwMDAxM0MwMTA4MDBBQzIyMDA1QzBFCi06MTAwMkYwMDAwM0UwMDAwODAwODAxMDIxMjc0NzAxMDA5MEUzMDAwQjc1Ci06MTAwMzAwMDAyNDAyMDAwMzk0RTUwMDA4MTQ2MjAwMjgwMDAwMjAyMTY0Ci06MTAwMzEwMDA4Q0UyMDAwMDNDMDMwODAwOEM2MzAwNDQ5NEU2MDAxNDY3Ci06MTAwMzIwMDAwMDAyMTFDMjAwMDIxMDQwMzBBNDAwMDIwMDVBMTAyMTQ1Ci06MTAwMzMwMDAyNDYzMDAwMTMwQTUwMDA0QTQ0NjAwODAzQzAxMDgwMEFECi06MTAwMzQwMDBBQzIzMDA0NDEwQTAwMDE5MDAwNDIwMkI4RjQyMDJCOEY3Ci06MTAwMzUwMDAwNDQxMDAwODI0MDQwMDAxM0MwMjA4MDA4QzQyMDA2MEIzCi06MTAwMzYwMDAyNDQyMDAwMTNDMDEwODAwQUMyMjAwNjAwM0UwMDAwOEM4Ci06MTAwMzcwMDAwMDgwMTAyMThDRTIwMDIwOTRFMzAwMTYwMDAwMjAyMTcwCi06MTAwMzgwMDBBRjQyMDI4MDhDRTIwMDA0QTc0MzAyODRBRjQyMDI4ODlECi06MTAwMzkwMDAzQzAyMTAwMEFGNDIwMkI4M0MwMjA4MDA4QzQyMDA1Q0Y0Ci06MTAwM0EwMDAyNDQyMDAwMTNDMDEwODAwQUMyMjAwNUMwM0UwMDAwODhDCi06MTAwM0IwMDAwMDgwMTAyMThGNDMwMTAwMjQwMjAxMDA1MDYyMDAwM0RECi06MTAwM0MwMDAwMDAzMTFDMjAwMDAwMDBEMDAwMzExQzIwMDAyMTA0MDIyCi06MTAwM0QwMDAwMDVBMTAyMUE0NDAwMDgwMDNFMDAwMDgwMDAwMTAyMTEyCi06MTAwM0UwMDA5MzYyMDAwMDAzRTAwMDA4QUY4MDAwMDAwM0UwMDAwODEzCi06MTAwM0YwMDAwMDAwMTAyMTAzRTAwMDA4MDAwMDEwMjEyNDAyMDEwMDg5Ci06MTAwNDAwMDAxNDgyMDAwODAwMDAwMDAwM0MwMjA4MDA4QzQyMDBGQzNFCi06MTAwNDEwMDAyNDQyMDAwMTNDMDEwODAwQUMyMjAwRkMwQTAwMDBERDdGCi06MTAwNDIwMDAzMEEyMDAyMDNDMDIwODAwOEM0MjAwODQyNDQyMDAwMURCCi06MTAwNDMwMDAzQzAxMDgwMEFDMjIwMDg0MzBBMjAwMjAxMDQwMDAwOERCCi06MTAwNDQwMDAzMEEzMDAxMDNDMDIwODAwOEM0MjAxMDgyNDQyMDAwMTQ1Ci06MTAwNDUwMDAzQzAxMDgwMEFDMjIwMTA4MDNFMDAwMDgwMDAwMDAwMDk1Ci06MTAwNDYwMDAxMDYwMDAwODAwMDAwMDAwM0MwMjA4MDA4QzQyMDEwNEZCCi06MTAwNDcwMDAyNDQyMDAwMTNDMDEwODAwQUMyMjAxMDQwM0UwMDAwODEyCi06MTAwNDgwMDAwMDAwMDAwMDNDMDIwODAwOEM0MjAxMDAyNDQyMDAwMUYwCi06MTAwNDkwMDAzQzAxMDgwMEFDMjIwMTAwMDNFMDAwMDgwMDAwMDAwMDVECi06MTAwNEEwMDAyN0JERkZFOEFGQkYwMDEwMjc0NDAxMDA5NDgzMDAwODc4Ci06MTAwNEIwMDAzMDYyMDAwNDEwNDAwMDFCMzA2NjAwMDI4RjQyMDJCODE4Ci06MTAwNEMwMDAwNDQxMDAwODI0MDUwMDAxM0MwMjA4MDA4QzQyMDA2MDQxCi06MTAwNEQwMDAyNDQyMDAwMTNDMDEwODAwQUMyMjAwNjAwQTAwMDEyOTBFCi06MTAwNEUwMDA4RkJGMDAxMDhDODIwMDIwOTQ4MzAwMTYwMDAwMjgyMTBBCi06MTAwNEYwMDBBRjQyMDI4MDhDODIwMDA0QTc0MzAyODRBRjQyMDI4ODhDCi06MTAwNTAwMDAzQzAyMTAwMEFGNDIwMkI4M0MwMjA4MDA4QzQyMDA1QzgyCi06MTAwNTEwMDAyNDQyMDAwMTNDMDEwODAwQUMyMjAwNUMwQTAwMDEyOUQxCi06MTAwNTIwMDA4RkJGMDAxMDEwQzAwMDA2MDA2MDI4MjE4RjQ0MDEwMDFBCi06MTAwNTMwMDAwRTAwMDBDRDAwMDAwMDAwMEEwMDAxMjgyNDA1MDAwMTgzCi06MTAwNTQwMDA4RjgyMDAwODhGNDMwMTA0NTA0MzAwMDcwMDAwMjgyMUQ4Ci06MTAwNTUwMDA4RjQ0MDEwMDBFMDAwMENEMDAwMDAwMDA4RjQyMDEwNDE2Ci06MTAwNTYwMDBBRjgyMDAwODAwMDAyODIxOEZCRjAwMTAwMEEwMTAyMURBCi06MTAwNTcwMDAwM0UwMDAwODI3QkQwMDE4MjdCREZGRThBRkJGMDAxNDQ3Ci06MTAwNTgwMDBBRkIwMDAxMDk3NDIwMTA4MzA0MzcwMDAyNDAyMjAwMEYxCi06MTAwNTkwMDAxMDYyMDAwQjI4NjIyMDAxMTQ0MDAwMkYwMDAwMTAyMTdGCi06MTAwNUEwMDAyNDAyNDAwMDEwNjIwMDI1MDAwMDAwMDAyNDAyNjAwMEM4Ci06MTAwNUIwMDAxMDYyMDAyNjAwMDAxMDIxMEEwMDAxNjU4RkJGMDAxNEEwCi06MTAwNUMwMDAyNzUwMDEwMDkyMDIwMDA5MTA0MDAwMUEyNDAzMDAwMTg0Ci06MTAwNUQwMDAzQzAyMDgwMDhDNDIwMDIwMTA0MDAwMTYwMDAwMTgyMTQ4Ci06MTAwNUUwMDAwRTAwMDQ5MzAwMDAwMDAwOTYwMzAwMDgzQzA2MDgwMDdCCi06MTAwNUYwMDA5NEM2NEI1RThFMDQwMDE4OEY4MjAwMjA5NjA1MDAwQzc2Ci06MTAwNjAwMDAwMDAzMUMwMDAwNjYxODI1QUM0NDAwMDBBQzQ1MDAwNDQzCi06MTAwNjEwMDAyNDA0MDAwMUFDNDAwMDA4QUM0MDAwMENBQzQwMDAxMEM5Ci06MTAwNjIwMDBBQzQwMDAxNEFDNDAwMDE4MEUwMDA0QjhBQzQzMDAxQ0YxCi06MTAwNjMwMDAwMDAwMTgyMTBBMDAwMTY0MDA2MDEwMjEwRTAwMDMyNTRCCi06MTAwNjQwMDAwMDAwMDAwMDBBMDAwMTY0MDAwMDEwMjEwRTAwMEVFOTA1Ci06MTAwNjUwMDAwMDAwMDAwMDAwMDAxMDIxOEZCRjAwMTQ4RkIwMDAxMEI4Ci06MTAwNjYwMDAwM0UwMDAwODI3QkQwMDE4MjdCREZGRTBBRkIyMDAxODY3Ci06MTAwNjcwMDAzQzAzNjAxMEFGQkYwMDFDQUZCMTAwMTRBRkIwMDAxMDVFCi06MTAwNjgwMDA4QzY0NTAwMDI0MDJGRjdGM0MxQTgwMDAwMDgyMjAyNEVBCi06MTAwNjkwMDAzNDg0MzgwQzI0MDIwMDM3QUM2NDUwMDAzQzEyMDgwMDRCCi06MTAwNkEwMDAyNjUyNEFEOEFGNDIwMDA4MjQwMjBDODBBRjQyMDAyNEYwCi06MTAwNkIwMDAzQzFCODAwODNDMDYwODAwMjRDNjAzMjQwMjQwMTAyMThECi06MTAwNkMwMDAyNDA0MDAxRDI0ODRGRkZGQUM0NjAwMDAwNDgxRkZGRENDCi06MTAwNkQwMDAyNDQyMDAwNDNDMDIwODAwMjQ0MjA0QjAzQzAxMDgwMDBCCi06MTAwNkUwMDBBQzIyNEFFMDNDMDIwODAwMjQ0MjAyMzAzQzAxMDgwMEVGCi06MTAwNkYwMDBBQzIyNEFFNDNDMDIwODAwMjQ0MjAxNzQzQzAzMDgwMDk2Ci06MTAwNzAwMDAyNDYzMDMyQzNDMDQwODAwMjQ4NDAzRDgzQzA1MDgwMDFGCi06MTAwNzEwMDAyNEE1MzhGMDNDMDEwODAwQUMyMjRCNDAzQzAyMDgwMDA0Ci06MTAwNzIwMDAyNDQyMDJFQzNDMDEwODAwQUMyNjRCMjQzQzAxMDgwMEFBCi06MTAwNzMwMDBBQzI1NEIzNDNDMDEwODAwQUMyMzRCM0MzQzAxMDgwMDg5Ci06MTAwNzQwMDBBQzI0NEI0NDNDMDEwODAwQUMyMjRCNDgzQzAxMDgwMDVGCi06MTAwNzUwMDBBQzIzNEFEQzNDMDEwODAwQUMyMDRBRTgzQzAxMDgwMDFDCi06MTAwNzYwMDBBQzIwNEFFQzNDMDEwODAwQUMyMDRBRjAzQzAxMDgwMEY3Ci06MTAwNzcwMDBBQzIwNEFGNDNDMDEwODAwQUMyMDRBRjgzQzAxMDgwMEQ3Ci06MTAwNzgwMDBBQzIwNEFGQzNDMDEwODAwQUMyMDRCMDAzQzAxMDgwMEI2Ci06MTAwNzkwMDBBQzI0NEIwNDNDMDEwODAwQUMyMDRCMDgzQzAxMDgwMDkxCi06MTAwN0EwMDBBQzIwNEIwQzNDMDEwODAwQUMyMDRCMTAzQzAxMDgwMDc1Ci06MTAwN0IwMDBBQzIwNEIxNDNDMDEwODAwQUMyMDRCMTgzQzAxMDgwMDU1Ci06MTAwN0MwMDBBQzI2NEIxQzNDMDEwODAwQUMyNjRCMjAzQzAxMDgwMDI5Ci06MTAwN0QwMDBBQzI1NEIzMDNDMDEwODAwQUMyMzRCMzgwRTAwMDYyM0ZGCi06MTAwN0UwMDAwMDAwMDAwMDNDMDI4MDAwMzQ0MjAwNzA4QzQyMDAwMDk3Ci06MTAwN0YwMDBBRjgyMDAxNDNDMDMwODAwOEM2MzAwMjA4RjgyMDAwNDQ5Ci06MTAwODAwMDAxMDQzMDAwNDNDMDI4MDAwMEUwMDA0NUJBRjgzMDAwNDMwCi06MTAwODEwMDAzQzAyODAwMDM0NDYwMDcwM0MwMzA4MDA4QzYzMDBBMDVBCi06MTAwODIwMDAzQzAyMDgwMDhDNDIwMEE0MTA0MzAwMDQ4Rjg0MDAxNDkyCi06MTAwODMwMDAzQzAxMDgwMEFDMjMwMEE0QTc0MzAwOUU4Q0NBMDAwMDIyCi06MTAwODQwMDAzQzAzMDgwMDhDNjMwMEJDM0MwMjA4MDA4QzQyMDBCOEVBCi06MTAwODUwMDAwMTQ0MjAyMzAwNjQxODIxMDAwMDQwMjEwMDY0MjAyQjYzCi06MTAwODYwMDAwMDQ4MTAyMTAwNDQxMDIxM0MwMTA4MDBBQzIzMDBCQ0NBCi06MTAwODcwMDAzQzAxMDgwMEFDMjIwMEI4OEY1MTAwMDAzMjIyMDAwNzcyCi06MTAwODgwMDAxMDQwRkZEQ0FGOEEwMDE0OENDNjAwMDAzQzA1MDgwMDU1Ci06MTAwODkwMDA4Q0E1MDBCQzNDMDQwODAwOEM4NDAwQjgwMENBMzAyMzNFCi06MTAwOEEwMDAwMEE2MjgyMTAwMDAxMDIxMDBBNjMwMkIwMDgyMjAyMTY0Ci06MTAwOEIwMDAwMDg2MjAyMTMyMjcwMDAxM0MwMTA4MDBBQzI1MDBCQzQ1Ci06MTAwOEMwMDAzQzAxMDgwMEFDMjQwMEI4MTBFMDAwMUYzMjIyMDAwMkY2Ci06MTAwOEQwMDA4RjQyMDEwMEFGNDIwMDIwOEY0MjAxMDRBRjQyMDBBOEM2Ci06MTAwOEUwMDA5MzQyMDEwQjBFMDAwMEM2MzA1MDAwRkYyRTAyMDAxRTg2Ci06MTAwOEYwMDA1NDQwMDAwNDAwMTAxMDgwMEUwMDAwQzkwQTAwMDIxM0NBCi06MTAwOTAwMDAwMDAwMDAwMDAwNTIxMDIxOEM0MjAwMDAwMDQwRjgwOTU1Ci06MTAwOTEwMDAwMDAwMDAwMDEwNDAwMDA1M0MwMjQwMDA4RjQzMDEwNDJECi06MTAwOTIwMDAzQzAyNjAyMEFDNDMwMDE0M0MwMjQwMDBBRjQyMDEzODVFCi06MTAwOTMwMDAzQzAyMDgwMDhDNDIwMDM0MjQ0MjAwMDEzQzAxMDgwMEMzCi06MTAwOTQwMDBBQzIyMDAzNDMyMjIwMDAyMTA0MDAwMEUzMjIyMDAwNDk5Ci06MTAwOTUwMDA4RjQyMDE0MDBFMDAwMEM2QUY0MjAwMjAwRTAwMDI5NUZCCi06MTAwOTYwMDAwMDAwMDAwMDNDMDI0MDAwQUY0MjAxNzgzQzAyMDgwMDU5Ci06MTAwOTcwMDA4QzQyMDAzODI0NDIwMDAxM0MwMTA4MDBBQzIyMDAzOEJGCi06MTAwOTgwMDAzMjIyMDAwNDEwNDBGRjk4M0MwMjgwMDA4RjQyMDE4MDE4Ci06MTAwOTkwMDAwRTAwMDBDNkFGNDIwMDIwOEY0MzAxODAyNDAyMEYwMEVBCi06MTAwOUEwMDAxNDYyMDAwNTAwMDAwMDAwOEY0MjAxODhBNzQyMDA5Q0VECi06MTAwOUIwMDAwQTAwMDI0ODNDMDI0MDAwOTM2MjAwMDAyNDAzMDA1MEY5Ci06MTAwOUMwMDAzMDQyMDBGRjE0NDMwMDA4M0MwMjQwMDAwRTAwMDI3QjRFCi06MTAwOUQwMDAwMDAwMDAwMDU0NDAwMDA0M0MwMjQwMDAwRTAwMEQ3NTcxCi06MTAwOUUwMDAwMDAwMDAwMDNDMDI0MDAwQUY0MjAxQjgzQzAyMDgwMDk5Ci06MTAwOUYwMDA4QzQyMDAzQzI0NDIwMDAxM0MwMTA4MDBBQzIyMDAzQzM3Ci06MTAwQTAwMDAwQTAwMDFDODNDMDI4MDAwM0MwMjkwMDAzNDQyMDAwMTEwCi06MTAwQTEwMDAwMDgyMjAyNUFGNDQwMDIwOEY0MjAwMjAwNDQwRkZGRUNBCi06MTAwQTIwMDAwMDAwMDAwMDAzRTAwMDA4MDAwMDAwMDAzQzAyODAwMDFECi06MTAwQTMwMDAzNDQyMDAwMTAwODIyMDI1MDNFMDAwMDhBRjQ0MDAyMDdBCi06MTAwQTQwMDAyN0JERkZFMEFGQjEwMDE0QUZCMDAwMTAwMDgwODgyMUQ3Ci06MTAwQTUwMDBBRkJGMDAxODBFMDAwMjUwMzBCMDAwRkY5MzYyMDA3RDVGCi06MTAwQTYwMDAwMjIwMjAyMTAyMDI4MDI1QTM3MDAwN0Q4RjcwMDA3NDc3Ci06MTAwQTcwMDAzQzAyODAwMDBFMDAwMjU5MDIwMjgwMjQxNjAwMDAwOTg4Ci06MTAwQTgwMDA4RkJGMDAxODhGNDIwMUY4MDQ0MEZGRkUyNDAyMDAwMkNECi06MTAwQTkwMDBBRjUxMDFDMEEzNDIwMUM0M0MwMjEwMDBBRjQyMDFGOEIzCi06MTAwQUEwMDA4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwODUyCi06MTAwQUIwMDAyN0JEMDAyMDI3QkRGRkU4QUZCRjAwMTA5NzQyMDE4NDhCCi06MTAwQUMwMDA4RjQ0MDE4ODMwNDIwMjAwMTA0MDAwMDUwMDAwMjgyMUI4Ci06MTAwQUQwMDAwRTAwMEZBQTAwMDAwMDAwMEEwMDAyOEQyNDA1MDAwMThDCi06MTAwQUUwMDAzQzAyRkYwMDA0ODAwMDA1MDA4MjE4MjQzQzAyMDQwMDQwCi06MTAwQUYwMDA1MDYyMDAwMTkzNjIwMDNFMjQwNTAwMDE4RkJGMDAxMDg4Ci06MTAwQjAwMDAwMEEwMTAyMTAzRTAwMDA4MjdCRDAwMThBMzYwMDAyMjA4Ci06MTAwQjEwMDA4RjQ0MDE0MDBBMDAwMjVFMjQwNTAwMDEyN0JERkZFODYyCi06MTAwQjIwMDBBRkJGMDAxNEFGQjAwMDEwOTM2MjAwMDAzMDQ0MDBGRjZDCi06MTAwQjMwMDAzODgzMDAyMDM4ODIwMDMwMDAwMzE4MkIwMDAyMTAyQjZECi06MTAwQjQwMDAwMDYyMTgyNDEwNjAwMDAzMjQwMjAwNTAxNDgyMDA4MDA4Ci06MTAwQjUwMDA4RkJGMDAxNDkzNjIwMDA1MzA0MjAwMDExMDQwMDA3Q0ZBCi06MTAwQjYwMDA4RkJGMDAxNDkzNDIwMTQ4MjQ0M0ZGRkYyQzYyMDAwNTBECi06MTAwQjcwMDAxMDQwMDA3ODhGQjAwMDEwMDAwMzEwODAzQzAzMDgwMDg0Ci06MTAwQjgwMDAyNDYzNEE2ODAwNDMxMDIxOEM0MjAwMDAwMDQwMDAwOEEyCi06MTAwQjkwMDAwMDAwMDAwMDBFMDAwMjUwOEY0NDAxNDA4RjcwMDAwQ0Q2Ci06MTAwQkEwMDA4RjQyMDE0NDE2MDIwMDAyMjQwMjAwMDFBRjYyMDAwQ0QxCi06MTAwQkIwMDAwRTAwMDI1OThGNDQwMTQwOEY0MjAxNDQxNDUwMDAwNDNBCi06MTAwQkMwMDA4RkJGMDAxNDhGQjAwMDEwMEEwMDBGMjAyN0JEMDAxODNGCi06MTAwQkQwMDA4RjYyMDAwQzBBMDAwMzA0MDAwMDAwMDA5NzYyMDAxMEZFCi06MTAwQkUwMDA4RjQzMDE0NDMwNDJGRkZGMTQ2MjAwMUEwMDAwMDAwMEVFCi06MTAwQkYwMDAyNDAyMDAwMUE3NjIwMDEwOEY0MjAyMzgwNDQzMDAxMDUzCi06MTAwQzAwMDA4RjQyMDE0MDNDMDIwMDNGMzQ0NkYwMDAzQzA1NjAwMDRBCi06MTAwQzEwMDAzQzA0RkZDMDhDQTIyQkJDMDA0NDE4MjQwMDQ2MTAyNEM2Ci06MTAwQzIwMDAwMDAyMTMwMjAwMDMxRDgyMTA2MjAwMzkwMDAwMDAwMDYwCi06MTAwQzMwMDA4RjQyMDIzODA0NDBGRkY3MDAwMDAwMDA4RjQyMDE0MDVECi06MTAwQzQwMDBBRjQyMDIwMDNDMDIxMDAwQUY0MjAyMzgwQTAwMDMyMjA5Ci06MTAwQzUwMDA4RkJGMDAxNDk3NjIwMDEwMEEwMDAzMDQwMDAwMDAwMDE4Ci06MTAwQzYwMDAwRTAwMDI1MDhGNDQwMTQwOTc2MjAwMTI4RjQzMDE0NEVFCi06MTAwQzcwMDAzMDUwRkZGRjE2MDMwMDAyMjQwMjAwMDFBNzYyMDAxMjk5Ci06MTAwQzgwMDAwRTAwMDI1OThGNDQwMTQwOEY0MjAxNDQxNjAyMDAwNEI1Ci06MTAwQzkwMDA4RkJGMDAxNDhGQjAwMDEwMEEwMDAyOTEyN0JEMDAxODBBCi06MTAwQ0EwMDA5NzYyMDAxMjBBMDAwMzA0MDAwMDAwMDA5NzYyMDAxNDFCCi06MTAwQ0IwMDA4RjQzMDE0NDMwNDJGRkZGMTQ2MjAwMDYyNDAyMDAwMTBBCi06MTAwQ0MwMDA4RkJGMDAxNDhGQjAwMDEwQTc2MjAwMTQwQTAwMTI0QUYwCi06MTAwQ0QwMDAyN0JEMDAxODk3NjIwMDE0MTQ0MDAwMUQ4RkJGMDAxNDM4Ci06MTAwQ0UwMDAwQTAwMDMxQzAwMDAwMDAwOTc2MjAwMTY4RjQzMDE0NEI1Ci06MTAwQ0YwMDAzMDQyRkZGRjE0NjIwMDBCMjQwMjAwMDE4RkJGMDAxNDdBCi06MTAwRDAwMDA4RkIwMDAxMEE3NjIwMDE2MEEwMDBCMTIyN0JEMDAxODUyCi06MTAwRDEwMDA5NzQyMDA3ODI0NDIwMDA0QTc2MjAwMTAwQTAwMDMyMkQwCi06MTAwRDIwMDA4RkJGMDAxNDk3NjIwMDE2MjQwMzAwMDEzMDQyRkZGRkJBCi06MTAwRDMwMDAxNDQzMDAwNzhGQkYwMDE0M0MwMjA4MDA4QzQyMDA3MDZGCi06MTAwRDQwMDAyNDQyMDAwMTNDMDEwODAwQUMyMjAwNzA4RkJGMDAxNDU3Ci06MTAwRDUwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMTgyN0JERkZFODkyCi06MTAwRDYwMDBBRkJGMDAxNEFGQjAwMDEwOEY1MDAxMDA5MzYyMDAwMEJECi06MTAwRDcwMDA5MzQzMDEwOTMwNDQwMEZGMjQwMjAwMUYxMDYyMDBBNUM0Ci06MTAwRDgwMDAyODYyMDAyMDEwNDAwMDE4MjQwMjAwMzgyODYyMDAwQTVGCi06MTAwRDkwMDAxMDQwMDAwQzI0MDIwMDBCMjg2MjAwMDgxMDQwMDAyQ0I4Ci06MTAwREEwMDAwMDAwMDAwMDA0NjAwMEU1Mjg2MjAwMDIxNDQwMDAyOEYyCi06MTAwREIwMDAyNDAyMDAwNjEwNjIwMDI2OEZCRjAwMTQwQTAwMDQxRkUwCi06MTAwREMwMDA4RkIwMDAxMDEwNjIwMDVFMjg2MjAwMEIxNDQwMDBEQzNGCi06MTAwREQwMDA4RkJGMDAxNDI0MDIwMDBFMTA2MjAwNzM4RkIwMDAxMDQ5Ci06MTAwREUwMDAwQTAwMDQxRjAwMDAwMDAwMTA2MjAwQzAyODYyMDAzOUUxCi06MTAwREYwMDAxMDQwMDAwQTI0MDIwMDgwMjQwMjAwMzYxMDYyMDBDQTVCCi06MTAwRTAwMDAyODYyMDAzNzEwNDAwMEI0MjQwMjAwMzUxMDYyMDBDMThGCi06MTAwRTEwMDA4RkJGMDAxNDBBMDAwNDFGOEZCMDAwMTAxMDYyMDAyQjU3Ci06MTAwRTIwMDAyODYyMDA4MTEwNDAwMDA2MjQwMjAwQzgyNDAyMDAzOTE0Ci06MTAwRTMwMDAxMDYyMDBCNDhGQkYwMDE0MEEwMDA0MUY4RkIwMDAxMEFFCi06MTAwRTQwMDAxMDYyMDA5OThGQkYwMDE0MEEwMDA0MUY4RkIwMDAxMEI5Ci06MTAwRTUwMDAzQzAyMDgwMDhDNDIwMDIwMTA0MDAwQjk4RkJGMDAxNEYzCi06MTAwRTYwMDAwRTAwMDQ5MzAwMDAwMDAwOEY0MjAxMDA4RjgzMDAyMEQ5Ci06MTAwRTcwMDA5NzQ1MDEwQzk3NDYwMTA4QUM2MjAwMDA4RjQyMDEwNEJGCi06MTAwRTgwMDAzQzA0MDgwMDk0ODQ0QjVFMDAwNTJDMDBBQzYyMDAwNDE2Ci06MTAwRTkwMDA4RjQyMDExODAwMDYzNDAwMDBDNDMwMjVBQzYyMDAwOEZGCi06MTAwRUEwMDA4RjQyMDExQzI0MDQwMDAxQUM2MjAwMEM5MzQyMDEwQTMxCi06MTAwRUIwMDAwMEEyMjgyNUFDNjUwMDEwQUM2MDAwMTRBQzYwMDAxOERFCi06MTAwRUMwMDBBQzY2MDAxQzBBMDAwM0Y1OEZCRjAwMTQzQzAyMDgwMDRBCi06MTAwRUQwMDA4QzQyMDAyMDEwNDAwMDlBOEZCRjAwMTQwRTAwMDQ5MzMzCi06MTAwRUUwMDAwMDAwMDAwMDk3NDQwMTA4M0MwMzA4MDA5NDYzNEI1RTM3Ci06MTAwRUYwMDA5NzQ1MDEwQzAwMDQyMjAyOTc0NjAxMEU4RjgyMDAyMEM0Ci06MTAwRjAwMDAwMDA0MjYwMDAwODMyMDI1MDAwNTJDMDAzQzAzMDA4MEZGCi06MTAwRjEwMDAwMEE2MjgyNTAwODMyMDI1QUM0MDAwMDBBQzQwMDAwNDNBCi06MTAwRjIwMDBBQzQwMDAwOEFDNDAwMDBDQUM0NTAwMTBBQzQwMDAxNEQ0Ci06MTAwRjMwMDBBQzQwMDAxOEFDNDQwMDFDMEEwMDAzRjQyNDA0MDAwMTc3Ci06MTAwRjQwMDA5NzQyMDEwQzE0NDAwMDE1MDAwMDAwMDA5MzYyMDAwNTU4Ci06MTAwRjUwMDAzMDQyMDAxMDE0NDAwMDExMDAwMDAwMDAwRTAwMDI1MDRBCi06MTAwRjYwMDAwMjAwMjAyMTkzNjIwMDA1MDIwMDIwMjEzNDQyMDAxMDdCCi06MTAwRjcwMDAwRTAwMDI1OUEzNjIwMDA1OTM2MjAwMDAyNDAzMDAyMEMyCi06MTAwRjgwMDAzMDQyMDBGRjEwNDMwMDZEMDIwMDIwMjE4RkJGMDAxNDhCCi06MTAwRjkwMDA4RkIwMDAxMDBBMDAwRkMwMjdCRDAwMTgwMDAwMDAwRDIwCi06MTAwRkEwMDAwQTAwMDQxRThGQkYwMDE0M0MwMjA4MDA4QzQyMDAyMDdGCi06MTAwRkIwMDAxMDQwMDA2MzhGQkYwMDE0MEUwMDA0OTMwMDAwMDAwMDc3Ci06MTAwRkMwMDA4RjQyMDEwNDhGODMwMDIwOTc0NDAxMEMzQzA1MDgwMEU4Ci06MTAwRkQwMDA5NEE1NEI1RUFDNjIwMDAwOTc2MjAwMkMwMDA0MjQwMEQ0Ci06MTAwRkUwMDAzMDQyRkZGRjAwODIyMDI1M0MwMjQwMEUwMEEyMjgyNTRGCi06MTAwRkYwMDBBQzY0MDAwNEFDNjAwMDA4QUM2MDAwMENBQzYwMDAxMDk1Ci06MTAxMDAwMDBBQzYwMDAxNEFDNjAwMDE4QUM2NTAwMUMwQTAwMDNGNDZFCi06MTAxMDEwMDAyNDA0MDAwMTBFMDAwMjUwMDIwMDIwMjFBNzYwMDAwOEY1Ci06MTAxMDIwMDAwRTAwMDI1OTAyMDAyMDIxMDIwMDIwMjEwRTAwMDI1RTYzCi06MTAxMDMwMDAyNDA1MDAwMTNDMDIwODAwOEM0MjAwMjAxMDQwMDA0MEMyCi06MTAxMDQwMDA4RkJGMDAxNDBFMDAwNDkzMDAwMDAwMDA5NzQyMDEwQ0IzCi06MTAxMDUwMDA4RjgzMDAyMDNDMDUwODAwOTRBNTRCNUUwMDAyMTQwMDFECi06MTAxMDYwMDBBQzcwMDAwMEFDNjIwMDA0QUM2MDAwMDg4RjY0MDA0Q0ZGCi06MTAxMDcwMDAzQzAyNDAxRjAwQTIyODI1QUM2NDAwMEM4RjYyMDA1MDg3Ci06MTAxMDgwMDAyNDA0MDAwMUFDNjIwMDEwOEY2MjAwNTRBQzYyMDAxNEIyCi06MTAxMDkwMDBBQzYwMDAxOEFDNjUwMDFDOEZCRjAwMTQ4RkIwMDAxMDRFCi06MTAxMEEwMDAwQTAwMDRCODI3QkQwMDE4MjQwMjAwMjA1MDgyMDAyNTQxCi06MTAxMEIwMDA4RkIwMDAxMDBFMDAwRjBBMDIwMDIwMjExMDQwMDAyMDA3Ci06MTAxMEMwMDA4RkJGMDAxNDAyMDAyMDIxOEZCMDAwMTAwMDAwMjgyMUUzCi06MTAxMEQwMDAwQTAwMDI1RTI3QkQwMDE4MDIwMDIwMjE4RkJGMDAxNDA1Ci06MTAxMEUwMDA4RkIwMDAxMDBBMDAwNTgwMjdCRDAwMTg5NzQ1MDEwQzNECi06MTAxMEYwMDAwMjAwMjAyMThGQkYwMDE0OEZCMDAwMTAwQTAwMDVBMDRECi06MTAxMTAwMDAyN0JEMDAxODAyMDAyMDIxOEZCMDAwMTAwQTAwMDVDNTdECi06MTAxMTEwMDAyN0JEMDAxODkzNDUwMTBEMDIwMDIwMjE4RkIwMDAxMDVCCi06MTAxMTIwMDAwQTAwMDYwRjI3QkQwMDE4MDIwMDIwMjE4RkJGMDAxNEZGCi06MTAxMTMwMDA4RkIwMDAxMDBBMDAwNUVCMjdCRDAwMTg4RkJGMDAxNDA4Ci06MTAxMTQwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMTg4RjQyMDI3ODFFCi06MTAxMTUwMDAwNDQwRkZGRTI0MDIwMDAyMzQ4NDAwODBBRjQ0MDI0MEI5Ci06MTAxMTYwMDBBMzQyMDI0NDNDMDIxMDAwMDNFMDAwMDhBRjQyMDI3OEIwCi06MTAxMTcwMDAzQzA0MDgwMDk0ODQ0QjZBM0MwMjA4MDA4QzQyNEI3NDg3Ci06MTAxMTgwMDAzMDgzRkZGRjAwMDMxOEMwMDA0MzEwMjFBRjQyMDAzQzMyCi06MTAxMTkwMDAzQzAyMDgwMDhDNDI0QjcwQUY0MjAwMzgzQzAyMDA1MEM5Ci06MTAxMUEwMDAzNDQyMDAwOEFGNDIwMDMwMDAwMDAwMDAwMDAwMDAwMEEwCi06MTAxMUIwMDAwMDAwMDAwMDhGNDIwMDAwMzA0MjAwMjAxMDQwRkZGRDgwCi06MTAxMUMwMDAwMDAwMDAwMDhGNDIwNDAwM0MwMTA4MDBBQzIyNEI2MDhDCi06MTAxMUQwMDA4RjQyMDQwNDNDMDEwODAwQUMyMjRCNjQzQzAyMDAyMDE2Ci06MTAxMUUwMDBBRjQyMDAzMDAwMDAwMDAwM0MwMjA4MDA5NDQyNEI2ODBGCi06MTAxMUYwMDAzQzAzMDgwMDk0NjM0QjZDM0MwNTA4MDA5NEE1NEI2RUJGCi06MTAxMjAwMDAyNDg0MDAwMTAwNDMxMDIxMzA4M0ZGRkYzQzAxMDgwMENCCi06MTAxMjEwMDBBNDIyNEI2ODNDMDEwODAwQTQyNDRCNkExNDY1MDAwMzE3Ci06MTAxMjIwMDAwMDAwMDAwMDNDMDEwODAwQTQyMDRCNkEwM0UwMDAwODE1Ci06MTAxMjMwMDAwMDAwMDAwMDNDMDUwMDBBMjdCREZGRTgwMzQ1MjgyMTA3Ci06MTAxMjQwMDAzQzA0MDgwMDI0ODQ0QjUwQUZCRjAwMTAwRTAwMDUxRDY1Ci06MTAxMjUwMDAyNDA2MDAwQTNDMDIwODAwOTQ0MjRCNTIzQzAzMDgwMDVBCi06MTAxMjYwMDA5NDYzNEI2RTMwNDIwMDBGMjQ0MjAwMDMwMDQzMTgwNDg1Ci06MTAxMjcwMDAyNDAyN0ZGRjAwNDMxMDJCMTA0MDAwMDJBRjgzMDAxQ0FDCi06MTAxMjgwMDAwMDAwMDAwRDBFMDAwNDJBMDAwMDAwMDAzQzAyMDgwMENGCi06MTAxMjkwMDA5NDQyNEI1QThGQkYwMDEwMjdCRDAwMTgwM0UwMDAwODhFCi06MTAxMkEwMDBBNzQyMDBBMjNDMDIwMDBBMDM0MjEwMjE5NDQzMDAwNjE4Ci06MTAxMkIwMDAzQzAyMDgwMDk0NDI0QjVBM0MwMTA4MDBBNDIzNEI1NkMwCi06MTAxMkMwMDAwMDQzMTAyMzhGODMwMDFDMDAwMjE0MDAwMDAyMTQwMzRCCi06MTAxMkQwMDAwMDQzMTAyQjAzRTAwMDA4Mzg0MjAwMDEyN0JERkZFODVGCi06MTAxMkUwMDBBRkJGMDAxMDNDMDIwMDBBMDM0MjEwMjE5NDQyMDAwNkU2Ci06MTAxMkYwMDAzQzAxMDgwMEE0MjI0QjU2MEUwMDA0NzcwMDAwMDAwMEI5Ci06MTAxMzAwMDA1NDQwRkZGOTNDMDIwMDBBOEZCRjAwMTAwM0UwMDAwOEMwCi06MTAxMzEwMDAyN0JEMDAxODI3QkRGRkU4QUZCRjAwMTAwRTAwMDQ3N0ZGCi06MTAxMzIwMDAwMDAwMDAwMDEwNDAwMDAzMDAwMDAwMDAwRTAwMDQ4NUQzCi06MTAxMzMwMDAwMDAwMDAwMDNDMDIwODAwOEM0MjRCNjA4RkJGMDAxMDkwCi06MTAxMzQwMDAyNzQzMDQwMEFGNDIwMDM4M0MwMjA4MDA4QzQyNEI2NDQzCi06MTAxMzUwMDAyN0JEMDAxOEFGODMwMDIwQUY0MjAwM0MzQzAyMDAwNUNGCi06MTAxMzYwMDBBRjQyMDAzMDAzRTAwMDA4QUY4MDAwMTg4RjgyMDAxODAxCi06MTAxMzcwMDAzQzAzMDAwNjAwMDIxMTQwMDA0MzEwMjVBRjQyMDAzMDNDCi06MTAxMzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RjQyMDAwMDhDCi06MTAxMzkwMDAzMDQyMDAxMDEwNDBGRkZEMjc0MjA0MDBBRjgyMDAyMEMxCi06MTAxM0EwMDAwM0UwMDAwOEFGODAwMDE4M0MwNjA4MDA4Q0M2NEI2NEMwCi06MTAxM0IwMDA4Rjg1MDAxODhGODMwMDIwM0MwMjA4MDA5NDQyNEI1QTBFCi06MTAxM0MwMDAyN0JERkZFMDI0QTUwMDAxMjQ2MzAwMjAyNDQyMDAwMTgyCi06MTAxM0QwMDAyNEM3MDAyMEFGQjEwMDE0QUZCMDAwMTBBRkJGMDAxODk5Ci06MTAxM0UwMDBBRjg1MDAxOEFGODMwMDIwM0MwMTA4MDBBNDIyNEI1QUFGCi06MTAxM0YwMDAzMDkwMDBGRjNDMDEwODAwQUMyNzRCNjQwNEMxMDAwODlBCi06MTAxNDAwMDAwMDAwODgyMTA0RTAwMDA2MDAwMDAwMDAzQzAyMDgwMDAzCi06MTAxNDEwMDA4QzQyNEI2MDI0NDIwMDAxM0MwMTA4MDBBQzIyNEI2MDJFCi06MTAxNDIwMDAzQzAyMDgwMDk0NDI0QjVBM0MwMzA4MDA5NDYzNEI2ODBBCi06MTAxNDMwMDAwMDEwMjAyQjAwNDMxMDI2MkM0MjAwMDEwMDQ0MTAyNUYwCi06MTAxNDQwMDAxNDQwMDAwNDhGODMwMDE4MjQwMjAwMTAxNDYyMDAwRjVGCi06MTAxNDUwMDAwMDAwMDAwMDBFMDAwNEE5MjQxMTAwMDEzQzAzMDgwMDU0Ci06MTAxNDYwMDA5NDYzNEI1QTNDMDIwODAwOTQ0MjRCNjgxNDYyMDAwMzk4Ci06MTAxNDcwMDAwMDAwMDAwMDBFMDAwNDJBMDAwMDAwMDAxNjAwMDAwMzE3Ci06MTAxNDgwMDAwMDAwMDAwMDBFMDAwNDkzMDAwMDAwMDAzQzAzMDgwMDcwCi06MTAxNDkwMDA5NDYzNEI1RTNDMDIwODAwOTQ0MjRCNUMyNDYzMDAwMTYxCi06MTAxNEEwMDAzMDY0RkZGRjNDMDEwODAwQTQyMzRCNUUxNDgyMDAwMzVDCi06MTAxNEIwMDAwMDAwMDAwMDNDMDEwODAwQTQyMDRCNUUxMjAwMDAwNjYyCi06MTAxNEMwMDAwMDAwMDAwMDNDMDIwODAwOTQ0MjRCNUFBNzQyMDBBMkQwCi06MTAxNEQwMDAwQTAwMDUwQjAyMjAxMDIxMEUwMDA0NzcwMDAwMDAwMDE2Ci06MTAxNEUwMDAxMDQwMDAwNDAyMjAxMDIxMEUwMDA0ODUwMDAwMDAwMEJFCi06MTAxNEYwMDAwMjIwMTAyMThGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDkwCi06MTAxNTAwMDAwM0UwMDAwODI3QkQwMDIwMzA4NEZGRkYzMEE1RkZGRjY3Ci06MTAxNTEwMDAwMDAwMTgyMTEwODAwMDA3MDAwMDAwMDAzMDgyMDAwMTQ4Ci06MTAxNTIwMDAxMDQwMDAwMjAwMDQyMDQyMDA2NTE4MjEwQTAwMDUxMzQzCi06MTAxNTMwMDAwMDA1Mjg0MDAzRTAwMDA4MDA2MDEwMjExMEMwMDAwNkVDCi06MTAxNTQwMDAyNEM2RkZGRjhDQTIwMDAwMjRBNTAwMDRBQzgyMDAwMDhBCi06MTAxNTUwMDAwQTAwMDUxRDI0ODQwMDA0MDNFMDAwMDgwMDAwMDAwMEM4Ci06MTAxNTYwMDAxMEEwMDAwODI0QTNGRkZGQUM4NjAwMDAwMDAwMDAwMENDCi06MTAxNTcwMDAwMDAwMDAwMDI0MDJGRkZGMjQ2M0ZGRkYxNDYyRkZGQTUzCi06MTAxNTgwMDAyNDg0MDAwNDAzRTAwMDA4MDAwMDAwMDAyNDAyMDAwMTlECi06MTAxNTkwMDBBRjYyMDAwQ0E3NjIwMDEwQTc2MjAwMTJBNzYyMDAxNERECi06MTAxNUEwMDAwM0UwMDAwOEE3NjIwMDE2MzA4MjAwN0YwMzQyMTAyMThBCi06MTAxNUIwMDAzQzA4MDAwRTAwNDgxODIxM0MwMjA4MDA4QzQyMDAyMDI0Ci06MTAxNUMwMDAyN0JERkZEODI0MDdGRjgwQUZCMzAwMUNBRkIyMDAxOEJGCi06MTAxNUQwMDBBRkIxMDAxNEFGQjAwMDEwQUZCRjAwMjAwMDgwODAyMTc5Ci06MTAxNUUwMDAzMEIxMDBGRjAwODcyMDI0MzBEMjAwRkYxMDQwMDAyRkQwCi06MTAxNUYwMDAwMDAwOTgyMUFGNDQwMDJDOTA2MjAwMDAyNDAzMDA1MEFBCi06MTAxNjAwMDAzMDQyMDBGRjE0NDMwMDBFMDAwMDAwMDAzQzAyMDgwMEJFCi06MTAxNjEwMDA4QzQyMDBFMDAyMDIxMDIxMDA0NzEwMjRBRjQyMDAyQzRGCi06MTAxNjIwMDAzQzAyMDgwMDhDNDIwMEUwMDIwMjEwMjEzMDQyMDA3RkEwCi06MTAxNjMwMDAwMzQyMTAyMTAwNDgxMDIxOTQ0MjAwRDQzMDUzRkZGRjkwCi06MTAxNjQwMDAwRTAwMDQ5MzAwMDAwMDAwM0MwMjA4MDA5NDQyNEI1RTMwCi06MTAxNjUwMDA4RjgzMDAyMDAwMTEzNDAwMDBDMjMwMjUwMDEyMkMwMEJFCi06MTAxNjYwMDAzQzAyNDAwMDAwQzIzMDI1MzRBNTAwMDFBQzcwMDAwMEVGCi06MTAxNjcwMDA4RkJGMDAyMEFDNjAwMDA0OEZCMjAwMThBQzczMDAwODZDCi06MTAxNjgwMDA4RkIxMDAxNEFDNjAwMDBDOEZCMzAwMUNBQzY1MDAxMDZGCi06MTAxNjkwMDA4RkIwMDAxMEFDNjAwMDE0MjQwNDAwMDFBQzYwMDAxODhFCi06MTAxNkEwMDAyN0JEMDAyODBBMDAwNEI4QUM2NjAwMUM4RkJGMDAyMENDCi06MTAxNkIwMDA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMEQwCi06MTAxNkMwMDAwM0UwMDAwODI3QkQwMDI4OTM0MzAxMEYyNDAyMDAxMDA3Ci06MTAxNkQwMDAxMDYyMDAwRTI4NjUwMDExMTBBMDAwMDcyNDAyMDAxMkZECi06MTAxNkUwMDAyNDAyMDAwODI0MDUwMDNBMTA2MjAwMDYwMDAwMzAyMUEwCi06MTAxNkYwMDAwM0UwMDAwODAwMDAwMDAwMjQwNTAwMzUxNDYyRkZGQzMwCi06MTAxNzAwMDAwMDAwMzAyMTBBMDAwNTM4MDAwMDAwMDA4RjQyMDA3NEZDCi06MTAxNzEwMDAyNDQyMEZBMDAzRTAwMDA4QUY2MjAwMEMyN0JERkZFOEUxCi06MTAxNzIwMDBBRkJGMDAxMDBFMDAwMjVFMjQwNTAwMDE4RkJGMDAxMDQ1Ci06MTAxNzMwMDAyNDAyMDAwMUE3NjIwMDEyMjdCRDAwMTgyNDAyMDAwMTQ0Ci06MTAxNzQwMDAwM0UwMDAwOEEzNjAwMDIyMjdCREZGRTBBRkIxMDAxNDUyCi06MTAxNzUwMDBBRkIwMDAxMEFGQkYwMDE4MzBCMUZGRkYwRTAwMDI1MDU1Ci06MTAxNzYwMDAwMDgwODAyMTkzNjIwMDNGMjQwMzAwMDQzMDQyMDBGRjg4Ci06MTAxNzcwMDAxNDQzMDAwQzAyMDAyMDIxMTIyMDAwMDgyNDAyMDAwQTU5Ci06MTAxNzgwMDAwRTAwMDUzMTAwMDAwMDAwOTM2MjAwMDUyNDAzRkZGRUY3Ci06MTAxNzkwMDAwMDQzMTAyNEEzNjIwMDA1MjQwMjAwMTJBMzYyMDAzRjRDCi06MTAxN0EwMDAwMjAwMjAyMTBFMDAwMjU5QTM2MDAwODExNjIwMDAwM0QwCi06MTAxN0IwMDAwMjAwMjAyMTBFMDAwNTk1MDAwMDAwMDAwMjAwMjAyMUZCCi06MTAxN0MwMDAzMjI2MDBGRjhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMEI5Ci06MTAxN0QwMDAyNDA1MDAzODBBMDAwNTM4MjdCRDAwMjAyN0JERkZFMDlBCi06MTAxN0UwMDBBRkJGMDAxQ0FGQjIwMDE4QUZCMTAwMTRBRkIwMDAxMDEzCi06MTAxN0YwMDAwRTAwMDI1MDAwODA4MDIxMEUwMDA1MzEwMDAwMDAwMDI0Ci06MTAxODAwMDA5MzYyMDAzRjI0MTIwMDE4MzA1MTAwRkYxMjMyMDAwMzhGCi06MTAxODEwMDAwMjAwMjAyMTI0MDIwMDEyQTM2MjAwM0Y5MzYyMDAwNTBGCi06MTAxODIwMDAyNDAzRkZGRTAwNDMxMDI0MEUwMDAyNTlBMzYyMDAwNUFBCi06MTAxODMwMDAwMjAwMjAyMTI0MDUwMDIwMTYzMjAwMDcwMDAwMzAyMTdDCi06MTAxODQwMDA4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDMyCi06MTAxODUwMDAwQTAwMDI1RTI3QkQwMDIwOEZCRjAwMUM4RkIyMDAxODU3Ci06MTAxODYwMDA4RkIxMDAxNDhGQjAwMDEwMjQwNTAwMzkwQTAwMDUzODJDCi06MTAxODcwMDAyN0JEMDAyMDI3QkRGRkU4QUZCMDAwMTBBRkJGMDAxNEE4Ci06MTAxODgwMDA5NzQyMDEwQzI0MDUwMDM2MDA4MDgwMjExNDQwMDAxMDhFCi06MTAxODkwMDAzMDQ2MDBGRjBFMDAwMjUwMDAwMDAwMDAyNDAyMDAxMjNCCi06MTAxOEEwMDBBMzYyMDAzRjkzNjIwMDA1MzQ0MjAwMTAwRTAwMDUzMTMwCi06MTAxOEIwMDBBMzYyMDAwNTBFMDAwMjU5MDIwMDIwMjEwMjAwMjAyMTJGCi06MTAxOEMwMDAwRTAwMDI1RTI0MDUwMDIwMEEwMDA2MDQwMDAwMDAwMDRECi06MTAxOEQwMDAwRTAwMDUzODAwMDAwMDAwMEUwMDAyNTAwMjAwMjAyMTFBCi06MTAxOEUwMDA5MzYyMDAyMzI0MDNGRjlGMDIwMDIwMjEwMDQzMTAyNDYxCi06MTAxOEYwMDA4RkJGMDAxNDhGQjAwMDEwQTM2MjAwMjMwQTAwMDI1OUFBCi06MTAxOTAwMDAyN0JEMDAxODI3QkRGRkUwQUZCRjAwMThBRkIxMDAxNDFFCi06MTAxOTEwMDBBRkIwMDAxMDMwQjEwMEZGMEUwMDAyNTAwMDgwODAyMUY3Ci06MTAxOTIwMDAyNDAyMDAxMjBFMDAwNTMxQTM2MjAwM0YwRTAwMDI1OThFCi06MTAxOTMwMDAwMjAwMjAyMTAyMDAyMDIxMDIyMDMwMjE4RkJGMDAxODQ4Ci06MTAxOTQwMDA4RkIxMDAxNDhGQjAwMDEwMjQwNTAwMzUwQTAwMDUzODRGCi06MTAxOTUwMDAyN0JEMDAyMEEzODAwMDJDMDNFMDAwMDhBMzgwMDAyREY5Ci06MTAxOTYwMDA4RjQyMDI3ODA0NDBGRkZFOEY4MjAwMzRBRjQyMDI0MDczCi06MTAxOTcwMDAyNDAyMDAwMkEzNDIwMjQ0M0MwMjEwMDAwM0UwMDAwOERCCi06MTAxOTgwMDBBRjQyMDI3ODNDMDM2MDAwOEM2MjU0MDAzMDQyMDAwODkxCi06MTAxOTkwMDAxNDQwRkZGRDAwMDAwMDAwOEM2MjU0MDhBRjgyMDAwQzcwCi06MTAxOUEwMDAyNDAyMDA1MkFDNjA1NDA4QUM2NDU0MzBBQzYyNTQzNDJECi06MTAxOUIwMDAyNDAyMDAwODAzRTAwMDA4QUM2MjU0MDAzQzAyNjAwMDBFCi06MTAxOUMwMDA4QzQyNTQwMDMwNDIwMDA4MTA0MDAwMDUzQzAzNjAwMDg3Ci06MTAxOUQwMDA4QzYyNTQwMDMwNDIwMDA4MTQ0MEZGRkQwMDAwMDAwMEZCCi06MTAxOUUwMDA4RjgzMDAwQzNDMDI2MDAwMDNFMDAwMDhBQzQzNTQwODA1Ci06MTAxOUYwMDA5MEEzMDAwMDI0MDIwMDA1MDA4MDQwMjEzMDYzMDAzRkQ2Ci06MTAxQTAwMDAwMDAwNDgyMTE0NjIwMDA1MDAwMDUwMjE5MEEyMDAxQzMzCi06MTAxQTEwMDA5NEEzMDAxRTMwNDkwMEZGMzA2QUZGRkZBRDAwMDAwQ0E4Ci06MTAxQTIwMDBBRDAwMDAxMEFEMDAwMDI0OTUwMjAwMTQ4RDA1MDAxQ0NGCi06MTAxQTMwMDA4RDA0MDAxODMwNDJGRkZGMDA0OTEwMjMwMDAyMTEwMEZFCi06MTAxQTQwMDAwMDAyMzdDMzAwNDAzODIxMDA4NjIwMjMwMEEyMTAyQjVCCi06MTAxQTUwMDAwMDgyMjAyMzAwQTcyODIzQUQwNTAwMUNBRDA0MDAxODM4Ci06MTAxQTYwMDBBNTA5MDAxNEE1MDkwMDIwQTUwQTAwMTYwM0UwMDAwODM2Ci06MTAxQTcwMDBBNTBBMDAyMjhGNDIwMUY4MDQ0MEZGRkUyNDAyMDAwMjYyCi06MTAxQTgwMDBBRjQ0MDFDMEEzNDIwMUM0M0MwMjEwMDAwM0UwMDAwOEJGCi06MTAxQTkwMDBBRjQyMDFGODNDMDIwODAwOEM0MjAwQjQyN0JERkZFOEM5Ci06MTAxQUEwMDBBRkJGMDAxNDI0NDIwMDAxQUZCMDAwMTAzQzAxMDgwMDk5Ci06MTAxQUIwMDBBQzIyMDBCNDhGNDMwMDI0M0MwMjAwMUYzMEFBMDBGRjc4Ci06MTAxQUMwMDAzNDQyRkY4MDMwRDgwMEZGMDA2MjgwMjQwMDgwRjgyMTdCCi06MTAxQUQwMDAzMEVGMDBGRjExNTgwMDNCMDE0MDU4MjEyNDBDRkY4MERCCi06MTAxQUUwMDAzQzE5MDAwQTMxNjMwMDdGMDAwMzEwQzAwMDAzMTk0MDU1Ci06MTAxQUYwMDAwMDYyMTgyMTNDMDIwODAwOEM0MjAwREMyNTY4MDAwMUNECi06MTAxQjAwMDAzMTBEMDA3RjAzRTIxMDIxMDA0MzEwMjEzMDQzMDA3RjlDCi06MTAxQjEwMDAwMzQzMTgyMTAwNEMxMDI0MDA3OTQ4MjFBRjQyMDAyNENGCi06MTAxQjIwMDA4RDIyMDAyNDAxNkMxODI0MDA2QzcwMjZBRDIyMDAwQzVDCi06MTAxQjMwMDA4RDIyMDAyNDMxMDgwMEZGQUQyMjAwMTA5NTIyMDAxNEYwCi06MTAxQjQwMDA5NTIzMDAyMDhEMjcwMDFDMzA0MkZGRkYzMDYzRkZGRkVDCi06MTAxQjUwMDA4RDI2MDAxODAwNDMxMDIzMDAwMjExMDAwMDAyMjdDMzQ1Ci06MTAxQjYwMDAwMDQwMjgyMTAwQzQzMDIzMDBFMjEwMkIwMEMyMzAyM0EzCi06MTAxQjcwMDAwMEU1MzgyM0FEMjcwMDFDQUQyNjAwMTg5NTIyMDAyMDczCi06MTAxQjgwMDBBNTIyMDAxNDk1MjIwMDIyMTU0QjAwMEFBNTIyMDAxNjVBCi06MTAxQjkwMDA4RDIzMDAyNDhEMjIwMDA4MjU0NjAwMDEzMTQ1MDA4MDU4Ci06MTAxQkEwMDAxNDYyMDAwNDMwQzQwMDdGMTA4RjAwMDIzOEFBMDA4MDQ1Ci06MTAxQkIwMDAwMEMwNTAyMTUxQUYwMDAxMzFDODAwRkYxNTE4RkZDOTA2Ci06MTAxQkMwMDAwMTAwNTgyMThGODQwMDM0MzA4MjAwN0YwMzQyMTgyMUE1Ci06MTAxQkQwMDAzQzAyMDAwQTAwNjIxODIxMjQwMkZGODAwMDgyMjAyNEI3Ci06MTAxQkUwMDBBRjQ0MDAyNEEwNkEwMDc5QTA2QTAwODM4QzYyMDA1MDkwCi06MTAxQkYwMDA4Rjg0MDAzNEFDNjIwMDcwOEM2NTAwNzQzQzAyN0ZGRkZGCi06MTAxQzAwMDAzNDQyRkZGRjAwQTIyODI0MEUwMDA2NkJBQzY1MDA3NDZFCi06MTAxQzEwMDBBRjUwMDAyNDhGQkYwMDE0OEZCMDAwMTAwM0UwMDAwODA1Ci06MTAxQzIwMDAyN0JEMDAxODI3QkRGRkMwQUZCRTAwMzhBRkI3MDAzNEQ2Ci06MTAxQzMwMDBBRkI1MDAyQ0FGQjIwMDIwQUZCMTAwMUNBRkIwMDAxOEEwCi06MTAxQzQwMDBBRkJGMDAzQ0FGQjYwMDMwQUZCNDAwMjhBRkIzMDAyNDQ0Ci06MTAxQzUwMDA4RjQ1MDAyNDhGNDYwMDI4OEY0MzAwMkMzQzAyMDAxRjM0Ci06MTAxQzYwMDAzNDQyRkY4MDAwNjIxODI0MDBDMjMwMjQwMDgwQTgyMTgyCi06MTAxQzcwMDBBRkEzMDAxNDAwQTJGMDI0MEUwMDA2MkZBRkE2MDAxMEEwCi06MTAxQzgwMDAzQzAyMDgwMDhDNDIwMEUwMjQxMEZGODAwMzYwODgyMUExCi06MTAxQzkwMDAwMkEyMTAyMTAwNTAxMDI0QUY0MjAwMjQzQzAyMDgwMDkwCi06MTAxQ0EwMDA4QzQyMDBFMDAyQTIxMDIxMzA0MjAwN0YwMzQyMTgyMTQyCi06MTAxQ0IwMDAzQzAyMDAwQTAwNjI5MDIxOTI0MjAwRDI5MzYzMDA4NEE5Ci06MTAxQ0MwMDAzMDU3MDBGRjMwNjMwMEZGMjQwMjAwMDExMDYyMDAzNDJGCi06MTAxQ0QwMDAwMzYwMjAyMTI0MDIwMDAyMTQ2MjAwMzYwMDAwMDAwMDhDCi06MTAxQ0UwMDAwRTAwMTIxNjAyNDAyODIxOTIyMzAwODM5MjIyMDA4M0M0Ci06MTAxQ0YwMDAzMDYzMDA3RjMwNDIwMDdGMDAwMjEwQzAwMDAzMTk0MEIzCi06MTAxRDAwMDAwMDYyMTgyMTNDMDIwODAwOEM0MjAwREMwMkEyMTAyMTczCi06MTAxRDEwMDAwMDQzMzgyMTAwRjAxMDI0QUY0MjAwMjg5MjI1MDA3OEJCCi06MTAxRDIwMDA5MjI0MDA4MzMwRTIwMDdGMDM0MjE4MjEzQzAyMDAwQzIxCi06MTAxRDMwMDAxNDg1MDAwNzAwNjI4MDIxMjQwMkZGRkZBMjQyMDBGMTA3Ci06MTAxRDQwMDAyNDAyRkZGRkE2NDIwMEYyMEEwMDA3MjcyNDAyRkZGRjM5Ci06MTAxRDUwMDA5NjAyMDAyMEEyNDIwMEYxOTYwMjAwMjJBNjQyMDBGMjYyCi06MTAxRDYwMDA4RTAyMDAyNEFFNDIwMEY0OTIyMjAwODNBMjQyMDBGMEQwCi06MTAxRDcwMDA4RTQyMDBDOEFFNDIwMEZDOEU0MjAwQzRBRTQyMDBGODYzCi06MTAxRDgwMDA4RTIyMDA1MEFFNDIwMTAwOEU0MjAwQ0NBRTQyMDEwNEQxCi06MTAxRDkwMDA5MjIyMDA4NTMwNDIwMDNGMEEwMDA3ODIzNDQyMDA0MDEwCi06MTAxREEwMDAwRTAwMTIzOTAyNDAyODIxOTIyMjAwODUwQTAwMDc4MjgzCi06MTAxREIwMDAzMDQyMDAzRjkzNjIwMDg1MjQwM0ZGREYzMDQyMDAzRjQyCi06MTAxREMwMDBBMzYyMDA4NTkzNjIwMDg1MDA0MzEwMjRBMzYyMDA4NTBFCi06MTAxREQwMDA5MzYzMDA4MzkzNjIwMDc4MzA3NDAwRkYzMDQyMDBGRjA5Ci06MTAxREUwMDAxMDU0MDAzNjI0MEFGRjgwM0MwQzAwMEMzMjgzMDA3RjI0Ci06MTAxREYwMDAwMDAzMTBDMDAwMDMxOTQwMDA2MjE4MjEzQzAyMDgwMEQzCi06MTAxRTAwMDA4QzQyMDBEQzI2ODgwMDAxMzEwOTAwN0YwMkEyMTAyMUVCCi06MTAxRTEwMDAwMDQzMzgyMTMwRTIwMDdGMDM0MjE4MjEwMEVBMTAyNEY5Ci06MTAxRTIwMDBBRjQyMDAyODAwNkM4MDIxOEUwMjAwMjQwMjhBMTgyNDEwCi06MTAxRTMwMDAwMDZBNTgyNkFFMDIwMDBDOEUwMjAwMjQzMTA4MDBGRjEyCi06MTAxRTQwMDBBRTAyMDAxMDk2MDIwMDE0OTYwMzAwMjA4RTA3MDAxQ0JDCi06MTAxRTUwMDAzMDQyRkZGRjMwNjNGRkZGOEUwNjAwMTgwMDQzMTAyMzVGCi06MTAxRTYwMDAwMDAyMTEwMDAwMDIyN0MzMDA0MDI4MjEwMEM0MzAyM0QzCi06MTAxRTcwMDAwMEUyMTAyQjAwQzIzMDIzMDBFNTM4MjNBRTA3MDAxQzFGCi06MTAxRTgwMDBBRTA2MDAxODk2MDIwMDIwQTYwMjAwMTQ5NjAyMDAyMjU4Ci06MTAxRTkwMDBBNjAyMDAxNjkyMjIwMDc5MzA0MjAwRkYxMDU0MDAwNzdCCi06MTAxRUEwMDAwMDAwMDAwMDUxMzcwMDAxMzE2ODAwRkY5MjIyMDA3OEU1Ci06MTAxRUIwMDAzMDQyMDBGRjE0NDhGRkNEMDEwMEEwMjE5MjIyMDA4MzkwCi06MTAxRUMwMDBBMjIyMDA3OThFMjIwMDUwMEEwMDA3RTJBRTIyMDA3MEEyCi06MTAxRUQwMDBBMjIyMDA4NThFMjIwMDRDMjQwNUZGODBBRTQyMDEwQzE4Ci06MTAxRUUwMDA5MjIyMDA4NTM0NDIwMDIwQTIyMjAwODU5MjQyMDBEMTM1Ci06MTAxRUYwMDAzQzAzMDgwMDhDNjMwMERDMzA1NDAwRkYzQzAyMDgwMDA3Ci06MTAxRjAwMDA4QzQyMDBFNDAwMTQzMTQwMDAxNDIwQzAwMkEzMTgyMUM4Ci06MTAxRjEwMDAwMEM0MjAyMTAyQTIxMDIxMDA2NDM4MjEwMDQ2MTAyMUIzCi06MTAxRjIwMDAwMDQ1MTgyNDAwRTUyODI0QUY0NTAwMjhBRjQzMDAyQ0M1Ci06MTAxRjMwMDAzMDQyMDA3RjkyNDQwMEQwMzBFMzAwN0YwMzQyMjgyMUVBCi06MTAxRjQwMDAwMzQzMTgyMTNDMDIwMDBDMDA2MjgwMjEzQzAyMDAwRTc5Ci06MTAxRjUwMDAzMDk2MDBGRjAwQTI5ODIxMTI5NjAwMkEwMDAwMDAwMDhGCi06MTAxRjYwMDA4RTAyMDAwQzAyMDAyMDIxMDI2MDI4MjExMDQwMDAyNTcyCi06MTAxRjcwMDAyNjEwMDAyODBFMDAwNjRBMDAwMDAwMDA5MjYyMDAwREE0Ci06MTAxRjgwMDAyNjgzMDAwMTMwNzQwMEZGMzA0MjAwN0ZBMjYyMDAwRDAyCi06MTAxRjkwMDAyNDA0RkY4MDE2OTdGRkYwMjY3MzAwMjAzQzAyMDgwMEZGCi06MTAxRkEwMDA4QzQyMDBEQzAwMDBBMDIxMDJBMjEwMjEwMDQ0MTAyNDc5Ci06MTAxRkIwMDBBRjQyMDAyODNDMDIwODAwOEM0MjAwRTQzQzAzMDgwMEM5Ci06MTAxRkMwMDA4QzYzMDBEQzAyQTIxMDIxMDA0NDEwMjRBRjQyMDAyQ0RDCi06MTAxRkQwMDAzQzAyMDgwMDhDNDIwMEU0MDJBMzE4MjEzMDYzMDA3RjE5Ci06MTAxRkUwMDAwMkEyMTAyMTMwNDIwMDdGMDM0MjIwMjEwMzQzMTgyMTI2Ci06MTAxRkYwMDAzQzAyMDAwQzAwNjI4MDIxM0MwMjAwMEUwQTAwMDdBNDkzCi06MTAyMDAwMDAwMDgyOTgyMThFNDIwMEQ4QUUyMjAwNTA4RTQyMDBEODI1Ci06MTAyMDEwMDBBRTIyMDA3MDkyMjUwMDgzOTI0NjAwRDE5MjIzMDA4MzY1Ci06MTAyMDIwMDA5MjQ0MDBEMTI0MDJGRjgwMDBBMjI4MjQzMDYzMDA3RjY0Ci06MTAyMDMwMDAzMDg0MDBGRjAwQTYyODI1MDA2NDE4MkExMDYwMDAwMkUyCi06MTAyMDQwMDAzMEE1MDBGRjM4QTUwMDgwQTIyNTAwODNBMjI1MDA3OUQ1Ci06MTAyMDUwMDAwRTAwMDYzRDAwMDAwMDAwOTIyMjAwN0UwMkEwMjAyMTFBCi06MTAyMDYwMDBBMjIyMDA3QThFMjMwMDc0M0MwMjdGRkYzNDQyRkZGRkRECi06MTAyMDcwMDAwMDYyMTgyNDBFMDAwNjZCQUUyMzAwNzQ4RkEyMDAxMEJECi06MTAyMDgwMDBBRjVFMDAyNDhGQkYwMDNDQUY0MjAwMjg4RkJFMDAzOEY3Ci06MTAyMDkwMDA4RkEyMDAxNDhGQjcwMDM0OEZCNjAwMzA4RkI1MDAyQzlDCi06MTAyMEEwMDA4RkI0MDAyODhGQjMwMDI0OEZCMjAwMjA4RkIxMDAxQ0EyCi06MTAyMEIwMDA4RkIwMDAxODI3QkQwMDQwMDNFMDAwMDhBRjQyMDAyQzlECi06MTAyMEMwMDA5MEEyMDAwMDI0NDIwMDAxQTBBMjAwMDAzQzAzMDgwMEVFCi06MTAyMEQwMDA4QzYzMDBGNDMwNDIwMEZGMTQ0MzAwMEYwMDgwMzAyMTc1Ci06MTAyMEUwMDBBMEEwMDAwMDNDMDIwODAwOEM0MjAwRTQ4Rjg0MDAzNDcxCi06MTAyMEYwMDAwMDgyMjAyMTMwODIwMDdGMDM0MjE4MjEzQzAyMDAwQzI0Ci06MTAyMTAwMDAwMDYyMTgyMTI0MDJGRjgwMDA4MjIwMjRBQ0MzMDAwMDVBCi06MTAyMTEwMDAwM0UwMDAwOEFGNDQwMDI4OEM4MjAwMDAyNDQyMDAyMDI1Ci06MTAyMTIwMDAwM0UwMDAwOEFDODIwMDAwOTRDMjAwMDAzQzA4MDgwMEY0Ci06MTAyMTMwMDA5NTA4MDBDQTMwRTdGRkZGMDA4MDQ4MjEwMTAyMTAyMTA2Ci06MTAyMTQwMDBBNEMyMDAwMDk0QzIwMDAwMzA0MkZGRkYwMEUyMTAyQjQ2Ci06MTAyMTUwMDA1NDQwMDAwMUE0QzcwMDAwOTRBMjAwMDAzQzAzMDgwMDAyCi06MTAyMTYwMDA4QzYzMDBDQzI0NDIwMDAxQTRBMjAwMDA5NEEyMDAwMEQxCi06MTAyMTcwMDAzMDQyRkZGRjU0NDMwMDA3OEY4NjAwMjgwMTA3MTAyQkQxCi06MTAyMTgwMDBBNEEwMDAwMDU0NDAwMDAxMDEwMDM4MjFBNEM3MDAwMEIxCi06MTAyMTkwMDA4Rjg2MDAyODhDQzQwMDFDQUY0NDAwM0M5NEEyMDAwMDMxCi06MTAyMUEwMDA4RjQzMDAzQzMwNDJGRkZGMDAwMjEwQzAwMDYyMTgyMTQ0Ci06MTAyMUIwMDBBRjQzMDAzQzhGNDIwMDNDMDA4MjIwMjMxODgwMDAwNDgzCi06MTAyMUMwMDAwMDAwMDAwMDhDQzIwMDE4MEEwMDA4NDMyNDQyMDAwMUVECi06MTAyMUQwMDA4Q0MyMDAxOEFGNDIwMDM4M0MwMjAwNTAzNDQyMDAxMDVDCi06MTAyMUUwMDBBRjQyMDAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENFCi06MTAyMUYwMDA4RjQyMDAwMDMwNDIwMDIwMTA0MEZGRkQwMDAwMDAwMDMwCi06MTAyMjAwMDA4RjQyMDQwNEFEMjIwMDA0OEY0MjA0MDBBRDIyMDAwMDdFCi06MTAyMjEwMDAzQzAyMDAyMEFGNDIwMDMwMDNFMDAwMDgwMDAwMDAwMDU0Ci06MTAyMjIwMDAyN0JERkZFMEFGQjIwMDE4QUZCMTAwMTRBRkIwMDAxMDhGCi06MTAyMjMwMDBBRkJGMDAxQzk0QzIwMDAwMDBDMDgwMjEzQzEyMDgwMDA3Ci06MTAyMjQwMDA5NjUyMDBDNjI0NDIwMDAxQTYwMjAwMDA5NjAzMDAwMDM4Ci06MTAyMjUwMDA5NEUyMDAwMDAwRTAzMDIxMTQ0MzAwMDU4RkIxMDAzMDBCCi06MTAyMjYwMDAwRTAwMDgxODAyNDAzODIxMEEwMDA4NzUwMDAwMDAwMDFFCi06MTAyMjcwMDA4QzgzMDAwNDhDODIwMDA0MjQ0MjAwNDAwNDYxMDAwNzI3Ci06MTAyMjgwMDBBQzgyMDAwNDhDODIwMDA0MDQ0MDAwMDQwMDAwMDAwMEMyCi06MTAyMjkwMDA4QzgyMDAwMDI0NDIwMDAxQUM4MjAwMDA5NjAyMDAwMDAzCi06MTAyMkEwMDAzMDQyRkZGRjUwNTIwMDAxQTYwMDAwMDA5NjIyMDAwMEJECi06MTAyMkIwMDAyNDQyMDAwMUE2MjIwMDAwOEY4MjAwMjg5NjIzMDAwMEZECi06MTAyMkMwMDA5NDQyMDAxNjE0NDMwMDA0OEZCRjAwMUMyNDAyMDAwMTM2Ci06MTAyMkQwMDBBNjIyMDAwMDhGQkYwMDFDOEZCMjAwMTg4RkIxMDAxNDFGCi06MTAyMkUwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjA4Rjg5MDAyODcwCi06MTAyMkYwMDAyN0JERkZFMEFGQkYwMDE4OEQyMjAwMjgyNzQ4MDQwMDRCCi06MTAyMzAwMDAzMEU3MDBGRkFGNDIwMDM4OEQyMjAwMkNBRjg4MDAzMDRDCi06MTAyMzEwMDBBRjQyMDAzQzNDMDIwMDA1QUY0MjAwMzAwMDAwMDAwMDJDCi06MTAyMzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFECi06MTAyMzMwMDAwMDAwMDAwMDhDODIwMDBDOEM4MjAwMENBRDAyMDAwMEJBCi06MTAyMzQwMDA4QzgyMDAxMEFEMDIwMDA0OEM4MjAwMThBRDAyMDAwOERGCi06MTAyMzUwMDA4QzgyMDAxQ0FEMDIwMDBDOENBMjAwMTRBRDAyMDAxMDk3Ci06MTAyMzYwMDA4QzgyMDAyMEFEMDIwMDE0OTA4MjAwMDUzMDQyMDBGRkY0Ci06MTAyMzcwMDAwMDAyMTIwMEFEMDIwMDE4OENBMjAwMThBRDAyMDAxQzcxCi06MTAyMzgwMDA4Q0EyMDAwQ0FEMDIwMDIwOENBMjAwMTBBRDAyMDAyNDMzCi06MTAyMzkwMDA4Q0EyMDAxQ0FEMDIwMDI4OENBMjAwMjBBRDAyMDAyQ0YzCi06MTAyM0EwMDBBRDA2MDAzMEFEMDAwMDM0OTc4MzAwMjYzNDAyRkZGRkY1Ci06MTAyM0IwMDAxNDYyMDAwMjAwNjAyMDIxMzQwNEZGRkYxMEUwMDAxMUNECi06MTAyM0MwMDBBRDA0MDAzODk1MjMwMDM2OTUyNDAwMzYyNDAyMDAwMTIwCi06MTAyM0QwMDAzMDYzRkZGRjAwMDMxOEMyMDA2OTE4MjE5MDY1MDA0MEI4Ci06MTAyM0UwMDAzMDg0MDAwNzAwODIxMDA0MDA0NTEwMjVBMDYyMDA0MEUwCi06MTAyM0YwMDA4RjgyMDAyODk0NDIwMDU2MzA0MkZGRkYwQTAwMDhEQzFBCi06MTAyNDAwMDBBRDAyMDAzQzk1MjMwMDM2OTUyNDAwMzYyNDAyMDAwMURECi06MTAyNDEwMDAzMDYzRkZGRjAwMDMxOEMyMDA2OTE4MjE5MDY1MDA0MDc3Ci06MTAyNDIwMDAzMDg0MDAwNzAwODIxMDA0MDAwMjEwMjcwMDQ1MTAyNEE5Ci06MTAyNDMwMDBBMDYyMDA0MEFEMDAwMDNDMDAwMDAwMDAwMDAwMDAwMDcxCi06MTAyNDQwMDAwMDAwMDAwMDNDMDIwMDA2MzQ0MjAwNDBBRjQyMDAzMDcxCi06MTAyNDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RjQyMDAwMEFCCi06MTAyNDYwMDAzMDQyMDAxMDEwNDBGRkZEOEY4NjAwMjhBRjg4MDAzMEZBCi06MTAyNDcwMDAyNEMyMDA1NjI0QzcwMDNDMjRDNDAwMjgyNEM1MDAzMkNFCi06MTAyNDgwMDAyNEM2MDAzNjBFMDAwODU2QUZBMjAwMTA4RkJGMDAxOEY5Ci06MTAyNDkwMDAwM0UwMDAwODI3QkQwMDIwOEY4MzAwMjQzQzA2MDgwMENECi06MTAyNEEwMDA4Q0M2MDBFODhGODIwMDM0MzA2MzNGRkYwMDAzMTk4MDQwCi06MTAyNEIwMDAwMDQ2MTAyMTAwNDMxMDIxMjQwM0ZGODAzMDQ2MDA3Rjk2Ci06MTAyNEMwMDAwMDQzMTAyNEFGNDIwMDI4MDM0NjE4MjEzQzAyMDAwQ0IwCi06MTAyNEQwMDAwMDYyMzAyMTkwQzIwMDBEMzBBNTAwRkYwMDAwMzgyMUJECi06MTAyNEUwMDAzNDQyMDAxMEEwQzIwMDBEOEY4OTAwMjg4RjhBMDAyNDdBCi06MTAyNEYwMDA5NTIzMDAzNjAwMEExMzgyMzA0ODAwMDMyNDAyMDAwMUFECi06MTAyNTAwMDBBNEMzMDAwRTExMDIwMDBCMjkwMjAwMDIxMDQwMDAwNUI2Ci06MTAyNTEwMDAyNDAyMDAwMjExMDAwMDBDMjQwMzAwMDEwQTAwMDkyMDFCCi06MTAyNTIwMDAwMDAwMTgyMTExMDIwMDA2MDAwMDAwMDAwQTAwMDkyMDI2Ci06MTAyNTMwMDAwMDAwMTgyMThDQzIwMDJDMEEwMDA5MjAyNDQzMDAwMTRECi06MTAyNTQwMDA4Q0MyMDAxNDI0NDMwMDAxOENDMjAwMTgwMDQzMTAyQkRECi06MTAyNTUwMDA1MDQwMDAwOTI0MDcwMDAxMjQwMjAwMjcxNEEyMDAwM0IwCi06MTAyNTYwMDAwMDAwMDAwMDBBMDAwOTJDMjQwNzAwMDE5NTIyMDAzRTBCCi06MTAyNTcwMDAyNDQyMDAwMUE1MjIwMDNFMDAwQTEzODIzMDQzMDAwM0RBCi06MTAyNTgwMDAyQzYyMDAwMjEwNDAwMDA5MDA4MDI4MjExNDYwMDAwNDIxCi06MTAyNTkwMDAwMDAwMDAwMDk0QzIwMDM2MEEwMDA5M0MzMDQ2RkZGRkVDCi06MTAyNUEwMDA4Q0M2MDAzODBBMDAwOTNDMDA4MDI4MjEwMDAwMzAyMTM4Ci06MTAyNUIwMDAzQzA0MDgwMDI0ODQ0Qjc4MEEwMDA4ODkwMDAwMDAwMENECi06MTAyNUMwMDAyNzQ5MDEwMDhEMjIwMDBDOTUyMzAwMDYwMTIwMjAyMUJGCi06MTAyNUQwMDAwMDAyMTYwMjMwNDYwMDNGMzA2M0ZGRkYyNDAyMDAyNzRFCi06MTAyNUUwMDAwMEMwMjgyMTI4QzcwMDI4MTBDMjAwMEVBRjgzMDAyNDk1Ci06MTAyNUYwMDAxMEUwMDAwODI0MDIwMDMxMjQwMjAwMjExMEMyMDAwOTZBCi06MTAyNjAwMDAyNDAyMDAyNTEwQzIwMDA3OTM4MjAwMkQwQTAwMDk1QkY2Ci06MTAyNjEwMDAwMDAwMDAwMDEwQzIwMDA1OTM4MjAwMkQwQTAwMDk1QjMzCi06MTAyNjIwMDAwMDAwMDAwMDBBMDAwOEY0MDAwMDAwMDAwQTAwMDYyNjZFCi06MTAyNjMwMDAwMDAwMDAwMDk1MjMwMDA2OTEyNDAwMDU4RDI1MDAwQzY0Ci06MTAyNjQwMDA4RDI2MDAxMDhEMjcwMDE4OEQyODAwMUM4RDI5MDAyMDU0Ci06MTAyNjUwMDAyNDQyMDAwMTNDMDEwODAwQTQyMzRCN0UzQzAxMDgwMEY5Ci06MTAyNjYwMDBBMDI0NEI3RDNDMDEwODAwQUMyNTRCODQzQzAxMDgwMEI0Ci06MTAyNjcwMDBBQzI2NEI4ODNDMDEwODAwQUMyNzRCOTAzQzAxMDgwMDdECi06MTAyNjgwMDBBQzI4NEI5NDNDMDEwODAwQUMyOTRCOTgwM0UwMDAwOEFGCi06MTAyNjkwMDBBMzgyMDAyRDhGODcwMDI4MjdCREZGQzBBRkIzMDAzNDcxCi06MTAyNkEwMDBBRkIyMDAzMEFGQjEwMDJDQUZCMDAwMjhBRkJGMDAzOEUwCi06MTAyNkIwMDAzQzAyMDgwMDhDNDIwMEQwOTRFMzAwMzAzMEIwRkZGRkIxCi06MTAyNkMwMDAwMDUwMTAwNzMwNDVGRkZGMzA2M0ZGRkYwMEMwOTgyMTI2Ci06MTAyNkQwMDBBN0EyMDAxMDNDMTEwODAwOTYzMTAwQzYxNEEzMDAwNjAyCi06MTAyNkUwMDAzMDkyRkZGRjhDRTIwMDI0MjQ0MjAwMzBBRjQyMDAzQ0Q1Ci06MTAyNkYwMDAwQTAwMDk5NDhDRTIwMDIwOTRFMjAwMzIzMDQyRkZGRjhECi06MTAyNzAwMDA1NEEyMDAwODI3QTQwMDE4OENFMjAwMkMyNDQyMDAzMEI4Ci06MTAyNzEwMDBBRjQyMDAzQzhDRTIwMDI4QUY0MjAwMzgwQTAwMDlBMjE4Ci06MTAyNzIwMDA4Rjg0MDAyODI3QTUwMDEwMjdBNjAwMjAwMjIwMzgyMTJBCi06MTAyNzMwMDAwRTAwMDgxOEE3QTAwMDIwOEZBMjAwMTgyNDQyMDAzMDI1Ci06MTAyNzQwMDBBRjQyMDAzODhGQTIwMDFDQUY0MjAwM0M4Rjg0MDAyOEFCCi06MTAyNzUwMDAzQzAyMDAwNUFGNDIwMDMwOTQ4MjAwMzQyNzQzMDQwMDVECi06MTAyNzYwMDAzMDQyRkZGRjAyMDIxMDJCMTQ0MDAwMDdBRjgzMDAzMEZECi06MTAyNzcwMDA5NDgyMDA1NDk0ODMwMDM0MDIwMjEwMjEwMDQzMTAyM0Y5Ci06MTAyNzgwMDAwQTAwMDlCNjMwNDNGRkZGOTQ4MzAwNTQ5NDgyMDAzNDVBCi06MTAyNzkwMDAwMjIzMTgyMTAwNTAxMDIzMDA2MjE4MjMzMDYzRkZGRjJBCi06MTAyN0EwMDA5NDgyMDAxNjMwNDJGRkZGMTQ0MzAwMDMwMDAwMDAwMDMzCi06MTAyN0IwMDAwQTAwMDlDNDI0MDMwMDAxOTQ4MjAwMTYzMDQyRkZGRjdFCi06MTAyN0MwMDAwMDQzMTAyQjEwNDAwMDA1OEY4MjAwMzA5NDgyMDAxNkM5Ci06MTAyN0QwMDAwMDYyMTAyMzMwNDNGRkZGOEY4MjAwMzBBQzUzMDAwMEIzCi06MTAyN0UwMDBBQzQwMDAwNEFDNTIwMDA4QUM0MzAwMEMzQzAyMDAwNkI0Ci06MTAyN0YwMDAzNDQyMDAxMEFGNDIwMDMwMDAwMDAwMDAwMDAwMDAwMDMyCi06MTAyODAwMDAwMDAwMDAwMDhGNDIwMDAwMzA0MjAwMTAxMDQwRkZGRDI5Ci06MTAyODEwMDAwMDEwMThDMjAwNjQxODIxOTA2NTAwNDAzMjA0MDAwN0JGCi06MTAyODIwMDAyNDAyMDAwMThGQkYwMDM4OEZCMzAwMzQ4RkIyMDAzMDE0Ci06MTAyODMwMDA4RkIxMDAyQzhGQjAwMDI4MDA4MjEwMDQwMDQ1MTAyNUI1Ci06MTAyODQwMDAyN0JEMDA0MDAzRTAwMDA4QTA2MjAwNDAyN0JERkZBOEFDCi06MTAyODUwMDBBRkI2MDA1MEFGQjUwMDRDQUZCNDAwNDhBRkIzMDA0NEMyCi06MTAyODYwMDBBRkIxMDAzQ0FGQkYwMDU0QUZCMjAwNDBBRkIwMDAzOEQyCi06MTAyODcwMDA4QzkwMDAwMDNDMDIwODAwOEM0MjAwRTg4Rjg2MDAzNEY3Ci06MTAyODgwMDA5NjAzMDAwMjI0MTNGRjgwMDBDMjMwMjEzMDYzM0ZGRjEzCi06MTAyODkwMDAwMDAzMTk4MDAwQzMzODIxMDBGMzEwMjQ5MEIyMDAwMDE3Ci06MTAyOEEwMDBBRjQyMDAyQzkyMDMwMDAyMzBFMjAwN0YwMzQyMzAyMTRECi06MTAyOEIwMDAzQzAyMDAwRTAwQzI4ODIxMzA2MzAwQzAyNDAyMDA0MEE4Ci06MTAyOEMwMDAwMDgwQTgyMTAwQTBCMDIxMTQ2MjAwMjYwMDAwQTAyMUYxCi06MTAyOEQwMDA4RTM0MDAzODhFMjIwMDE4MTQ0MDAwMDIyNDAyMDAwMUI5Ci06MTAyOEUwMDBBRTIyMDAxODkyMDIwMDBEMzA0MjAwMjAxNDQwMDAxNTY0Ci06MTAyOEYwMDA4RjgyMDAzNDNDMDMwODAwOEM2MzAwREMwMDEyMzhDMDc3Ci06MTAyOTAwMDAwMDEyMzE0MDAwNDMxMDIxMDBDNzMwMjEwMDQ2MzgyMTE5Ci06MTAyOTEwMDAzMEUzMDAwNzNDMDIwMDgwMzBFNjAwNzgwMEMyMzAyNTNBCi06MTAyOTIwMDAwMzQzMTgyMTAwRjMxMDI0QUY0MjA4MDAyNDYzMDkwMDc4Ci06MTAyOTMwMDBBRjQ2MDgxMDhFMjIwMDE4OEM2MzAwMDgwMDQzMTAyMTU3Ci06MTAyOTQwMDBBRTIyMDAxODhFMjIwMDJDOEUyMzAwMTgyNDQyMDAwMTkzCi06MTAyOTUwMDAwMDYyMTgyQjEwNjAwMDNEMDAwMDAwMDAwQTAwMEE3ODk5Ci06MTAyOTYwMDAwMDAwMDAwMDkyMDMwMDAyMjQwMkZGQzAwMDQzMTAyNDc0Ci06MTAyOTcwMDAzMDQyMDBGRjE0NDAwMDA1MjQwMjAwMDFBRTIyMDAxODdFCi06MTAyOTgwMDA5NjIyMDAzNjBBMDAwQTYxMzA1NEZGRkY4RTIyMDAxNDlFCi06MTAyOTkwMDAyNDQyMDAwMUFFMjIwMDE4OTIwMjAwMDAwMDAyMTYwMDNDCi06MTAyOUEwMDAwMDAyMTYwMzA0NDEwMDI5MDAwMDAwMDA5NjAyMDAwMjA0Ci06MTAyOUIwMDAyN0E0MDAxMDAwODAyODIxQTdBMjAwMTY5NjAyMDAwMjdBCi06MTAyOUMwMDAyNDA3MDAwMTAwMDAzMDIxMzA0MkZGRkZBRjgyMDAyNEM1Ci06MTAyOUQwMDAwRTAwMDg4OUFGQTAwMDFDOTYwMzAwMDIzQzA0MDgwMDBBCi06MTAyOUUwMDA4Qzg0MDBFODhGODIwMDM0MzA2MzNGRkYwMDAzMTk4MDNECi06MTAyOUYwMDAwMDQ0MTAyMTAwNDMxMDIxMzA0MzAwN0YzQzA1MDAwQ0FGCi06MTAyQTAwMDAwMDUzMTAyNDAzNDMxODIxQUY0MjAwMjgwMDY1MTgyMTA5Ci06MTAyQTEwMDA5MDYyMDAwRDAwMTIyMTQwMzA0MjAwN0ZBMDYyMDAwRDQ0Ci06MTAyQTIwMDAzQzAzMDgwMDhDNjMwMEU0OEY4MjAwMzQwMDQzMTAyMUQzCi06MTAyQTMwMDAwMDQ0MzgyMTMwRTIwMDdGMDM0MjEwMjEwMDQ1MTAyMTdDCi06MTAyQTQwMDAwMEYzMTgyNEFGNDMwMDI4QUVBMjAwMDA5MjIyMDAwRDJDCi06MTAyQTUwMDAzMDQyMDAxMDEwNDAwMDEzMDJBMDIwMjE4RjgzMDAyODc0Ci06MTAyQTYwMDA4RUE0MDAwMDAyODAzMDIxOTQ2MjAwM0UyNDQyRkZGRkM5Ci06MTAyQTcwMDBBNDYyMDAzRTk0ODQwMDAyOTYyNTAwMEUzMDg0RkZGRjdECi06MTAyQTgwMDAwRTAwMDk3MzMwQTVGRkZGOEY4MjAwMjg5NDQzMDAzNEE1Ci06MTAyQTkwMDA5NjIyMDAwRTE0NDMwMDAzMDJBMDIwMjEyNDAyMDAwMTBDCi06MTAyQUEwMDBBMzgyMDAyQzAyQzAyODIxMEUwMDA3RkUwMDAwMDAwMEI3Ci06MTAyQUIwMDA4RkJGMDA1NDhGQjYwMDUwOEZCNTAwNEM4RkI0MDA0OEM0Ci06MTAyQUMwMDA4RkIzMDA0NDhGQjIwMDQwOEZCMTAwM0M4RkIwMDAzODBDCi06MTAyQUQwMDAwM0UwMDAwODI3QkQwMDU4OEY4MjAwMjgyN0JERkZEMEUzCi06MTAyQUUwMDBBRkI0MDAyOEFGQjIwMDIwQUZCRjAwMkNBRkIzMDAyNEJBCi06MTAyQUYwMDBBRkIxMDAxQ0FGQjAwMDE4OTA0NDAwRDA5MDQzMDBEMTlCCi06MTAyQjAwMDAwMDAwQTAyMTMwOTIwMEZGQTNBMzAwMTAzMDYzMDBGRjVCCi06MTAyQjEwMDA4QzUxMDBEODhDNTMwMERDMTA3MjAwMkIyNDAyMDAwMTcxCi06MTAyQjIwMDAzQzAzMDgwMDhDNjMwMEU0OTNBNDAwMTA4RjgyMDAzNEZGCi06MTAyQjMwMDAyNDA2RkY4MDAwMDQyMTQwMDA0MzEwMjEwMDQ0MTAyMTlFCi06MTAyQjQwMDAzMDQzMDA3RjAwNDYxMDI0QUY0MjAwMjgwMzQzMTgyMTgxCi06MTAyQjUwMDAzQzAyMDAwQzAwNjIxODIxOEM2MjAwMDQyN0E0MDAxNEJGCi06MTAyQjYwMDAyN0E1MDAxMDAyMjI4MDIxMDI3MDEwMjMwNDQwMDAxNUM2Ci06MTAyQjcwMDBBRkEzMDAxNDkwNjIwMDBEMDBDMjEwMjQzMDQyMDBGRjg5Ci06MTAyQjgwMDAxNDQwMDAwNzAyMDA4ODIxOTA2MjAwMEQzNDQyMDA0MDhBCi06MTAyQjkwMDAwRTAwMDdGRUEwNjIwMDBEMEEwMDBBQkQ5M0EyMDAxMEZECi06MTAyQkEwMDAwRTAwMDlFMTI0MTQwMDAxOEY4MzAwMjhBQzcwMDBEOEM2Ci06MTAyQkIwMDA5M0EyMDAxMEEwNjIwMEQxOTNBMjAwMTAxNDUyRkZEODdCCi06MTAyQkMwMDAwMDAwMDAwMDI0MDIwMDAxMTY4MjAwMDQ4RkJGMDAyQ0M4Ci06MTAyQkQwMDAwRTAwMDYyNjAwMDAwMDAwOEZCRjAwMkM4RkI0MDAyOEQ2Ci06MTAyQkUwMDA4RkIzMDAyNDhGQjIwMDIwOEZCMTAwMUM4RkIwMDAxODZCCi06MTAyQkYwMDAwM0UwMDAwODI3QkQwMDMwMjdCREZGRDhBRkIzMDAxQzlECi06MTAyQzAwMDBBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTBBRkJGMDAyMERBCi06MTAyQzEwMDAwMDgwOTgyMTAwRTA4MDIxMzBCMUZGRkYwRTAwMDQ5Mzc2Ci06MTAyQzIwMDAzMEQyMDBGRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEzCi06MTAyQzMwMDA4RjgyMDAyMEFDNTEwMDAwQUM1MjAwMDRBQzUzMDAwODVECi06MTAyQzQwMDBBQzQwMDAwQ0FDNDAwMDEwQUM0MDAwMTRBQzQwMDAxODhDCi06MTAyQzUwMDAzQzAzMDgwMDk0NjM0QjVFMDIwMzgwMjVBQzUwMDAxQ0NCCi06MTAyQzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNDA0MDAwMTNCCi06MTAyQzcwMDA4RkJGMDAyMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNERCCi06MTAyQzgwMDA4RkIwMDAxMDBBMDAwNEI4MjdCRDAwMjgyN0JERkZFODU4Ci06MTAyQzkwMDBBRkIwMDAxMEFGQkYwMDE0MzBBNUZGRkYzMEM2MDBGRjdCCi06MTAyQ0EwMDAwMDgwODAyMTI0MDIwQzgwQUY0MjAwMjQwMDAwMDAwMDNDCi06MTAyQ0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE0Ci06MTAyQ0MwMDAwRTAwMEFDQzAwMDAwMDAwM0MwNDA4MDAyNDg0MDBFMDUwCi06MTAyQ0QwMDA4QzgyMDAwMDI0MDNGRjgwOEZCRjAwMTQwMjAyMTAyMUE5Ci06MTAyQ0UwMDAwMDQzMTAyNEFGNDIwMDI0OEM4MjAwMDAzQzAzMDAwQTAxCi06MTAyQ0YwMDAwMjAyODAyMTMyMTAwMDdGMDM1MDEwMjE4RkIwMDAxMDlCCi06MTAyRDAwMDAwMDQzMTAyMTI3QkQwMDE4MDNFMDAwMDhBRjgyMDAyODBGCi06MTAyRDEwMDAyN0JERkZFOEFGQkYwMDEwOEY0NDAxNDAzQzAzMDgwMDBGCi06MTAyRDIwMDA4QzYzMDBFMDI0MDJGRjgwQUY4NDAwMzQwMDgzMTgyMTBDCi06MTAyRDMwMDAwMDYyMTAyNEFGNDIwMDI0M0MwMjAwMDgwMzQyNDAyMUZDCi06MTAyRDQwMDA5NTA1MDAwMjMwNjMwMDdGM0MwMjAwMEEwMzQzMTgyMTBFCi06MTAyRDUwMDAwMDYyMTgyMTMwQTVGRkZGMzQwMkZGRkYwMDAwMzAyMTgwCi06MTAyRDYwMDAzQzA3NjAyMDEwQTIwMDA2QUY4MzAwMjgyNDAyRkZGRjZBCi06MTAyRDcwMDBBNTAyMDAwMjk0NjUwMEQ0MEUwMDBBRjEzMEE1RkZGRjAxCi06MTAyRDgwMDA4RkJGMDAxMDI0MDIwQzgwMjdCRDAwMTgwM0UwMDAwODRDCi06MTAyRDkwMDBBRjQyMDAyNDNDMDIwMDA4MDM0MjQwMjE5NTAyMDAwMjk5Ci06MTAyREEwMDAzQzBBMDgwMDk1NEEwMEM2MzA0NkZGRkYxNEMwMDAwN0UxCi06MTAyREIwMDAzNDAyRkZGRjhGODIwMDI4OEY4NDAwMzQzQzA3NjAyMDlDCi06MTAyREMwMDA5NDQ1MDBENDBBMDAwQjVBMzBBNUZGRkYxMEMyMDAyNDFFCi06MTAyREQwMDA4Rjg3MDAyODk0RTIwMDU0OTRFNDAwMTYzMDQ1RkZGRkVBCi06MTAyREUwMDAwMEE2MTAyMzAwQTYxODJCMzA4OUZGRkYxMDYwMDAwNEY2Ci06MTAyREYwMDAzMDQ0RkZGRjAwQzUxMDIzMDEyMjEwMjMzMDQ0RkZGRkExCi06MTAyRTAwMDAwMDhBMTAyQjEwNDAwMDBDMDEyQTEwMjMyNDAyMDAwMTFDCi06MTAyRTEwMDBBNTAyMDAxNjI0MDJGRkZGQTUwMjAwMDI5NEU1MDBENERCCi06MTAyRTIwMDA4Rjg0MDAzNDAwMDAzMDIxMzBBNUZGRkYzQzA3NjAyMDc0Ci06MTAyRTMwMDAwQTAwMEFGMTAwMDAwMDAwMDA0NDEwMkExMDQwMDAwOEI3Ci06MTAyRTQwMDAwMDAwMDAwMDk1MDIwMDE2MzA0MjAwMDExMDQwMDAwNDBFCi06MTAyRTUwMDAwMDAwMDAwMDk3NDIwMDdFMjQ0MjAwMTRBNTAyMDAxNkU0Ci06MTAyRTYwMDAwM0UwMDAwODAwMDAwMDAwOEY4NDAwMjgyN0JERkZFMDc5Ci06MTAyRTcwMDBBRkJGMDAxODk0ODIwMDM0OTQ4MzAwM0UxMDYwMDAxQUEzCi06MTAyRTgwMDAzMDQ4RkZGRjkzODMwMDJDMjQwMjAwMDExNDYyMDAyN0M2Ci06MTAyRTkwMDA4RkJGMDAxODhGODIwMDI4MDAwODE4QzIzMTA4MDAwNzcxCi06MTAyRUEwMDAwMDYyMTgyMTI0NDcwMDNBMjQ0OTAwNTQyNDQ0MDAyMDk5Ci06MTAyRUIwMDAyNDQ1MDAzMDI0NDYwMDM0OTA2MjAwNDAzMDQyMDBGRjM4Ci06MTAyRUMwMDAwMTAyMTAwNzMwNDIwMDAxMTA0MDAwMTY4RkJGMDAxOEE5Ci06MTAyRUQwMDAwRTAwMDg1NkFGQTkwMDEwOEY4MjAwMjg5NDQyMDAzNERCCi06MTAyRUUwMDAwQTAwMEI3MzMwNDhGRkZGOTQ4MzAwMzY5NDgyMDAzNDRECi06MTAyRUYwMDAxMDQzMDAwRThGQkYwMDE4OTQ4MjAwMzZBNDgyMDAzNDY1Ci06MTAyRjAwMDA5NDgyMDA1NkE0ODIwMDU0OEM4MjAwMkNBQzgyMDAyNDRGCi06MTAyRjEwMDA5NDgyMDAzMkE0ODIwMDMwOTQ4MjAwM0NBNDgyMDAzQTYxCi06MTAyRjIwMDA4RkJGMDAxODBBMDAwQjMzMjdCRDAwMjAwM0UwMDAwODA0Ci06MTAyRjMwMDAyN0JEMDAyMDI3QkRGRkU4QUZCRjAwMTA4RjRBMDEwMDZBCi06MTAyRjQwMDAzQzA1MDgwMDhDQTUwMEUwM0MwMjA4MDA5MDQyNEI4NDQwCi06MTAyRjUwMDAzQzBDMDgwMDk1OEM0QjdFMDE0NTI4MjEzMDRCMDAzRkVFCi06MTAyRjYwMDAzMEEyMDA3RjAzNDI0MDIxMzk2OTAwMzIzQzAyMDAwQTRFCi06MTAyRjcwMDAzOTYzMDAzRjJDNjMwMDAxMDEwMjQwMjEyRDI5MDAwMTJCCi06MTAyRjgwMDAyNDAyRkY4MDAwQTIyODI0MDEyMzQ4MjVBRjhBMDAzNEIwCi06MTAyRjkwMDAwMDgwMTgyMUFGNDUwMDI0MDAwMDMwMjEwMDgwMjgyMTQ2Ci06MTAyRkEwMDAyNDA3MDAwMUFGODgwMDI4M0MwNDA4MDAyNDg0NEI3OEUzCi06MTAyRkIwMDBBRjhDMDAyNDE1MjAwMDA3QTM4MDAwMkQyNDAyMDAyMEUwCi06MTAyRkMwMDA1NTYyMDAwRjAwNjAyMDIxMzQwMkZGRkY1NTgyMDAwQzgzCi06MTAyRkQwMDAwMDYwMjAyMTI0MDIwMDIwMTU2MjAwMDUwMDAwMDAwMDhFCi06MTAyRkUwMDA4QzYzMDAxNDI0MDJGRkZGMTA2MjAwMDcwMDAwMDAwMDQxCi06MTAyRkYwMDAwRTAwMDg4OTAwMDAwMDAwMEEwMDBCRDAwMDAwMDAwMDRECi06MTAzMDAwMDAwRTAwMDhGNDAxNjAyODIxMEUwMDBCNjgwMDAwMDAwMDhCCi06MTAzMDEwMDA4RkJGMDAxMDI0MDIwQzgwMjdCRDAwMTgwM0UwMDAwOEI5Ci06MTAzMDIwMDBBRjQyMDAyNDNDMDIwODAwOEM0MjAwRTAyN0JERkZBMDE0Ci06MTAzMDMwMDBBRkIxMDAzQzAwODIxMDIxMjQxMUZGODBBRkJFMDA1OEM4Ci06MTAzMDQwMDBBRkI3MDA1NEFGQjIwMDQwQUZCMDAwMzhBRkJGMDA1Q0M0Ci06MTAzMDUwMDBBRkI2MDA1MEFGQjUwMDRDQUZCNDAwNDhBRkIzMDA0NEJBCi06MTAzMDYwMDAwMDUxMTAyNDhGNDgwMDI0OEY0OTAwMjg4RjQ3MDAyOEUyCi06MTAzMDcwMDBBRjQyMDAyNDNDMDIwODAwOEM0MjAwRTAwMDgwOTAyMTE2Ci06MTAzMDgwMDAyNDA2MDAwNjAwODIxMDIxMzA0MjAwN0YwMzQyMTgyMUVFCi06MTAzMDkwMDAzQzAyMDAwQTAwNjI4MDIxM0MwMjAwMUYzNDQyRkY4MDkzCi06MTAzMEEwMDAwMEUyMzgyNDI3QTQwMDEwMjYwNTAwRjAwMTIyRjAyNEI1Ci06MTAzMEIwMDAwMTAyQjgyNDBFMDAwNTFEQUZBNzAwMzA4RkEyMDAxODMyCi06MTAzMEMwMDBBRTAyMDBDNDhGQTIwMDFDQUUwMjAwQzg4RkEyMDAyNDcyCi06MTAzMEQwMDBBRTAyMDBDQzkzQTQwMDEwOTIwMzAwRDEyNDAyRkY4MDIyCi06MTAzMEUwMDAwMDgyMTAyNDAwNDMxMDI1MzA0OTAwRkYzMDgzMDA3RjA4Ci06MTAzMEYwMDAzMTIyMDA3RjAwNjIxMDJBMTA0MDAwMDQwMDAzMTBDMDNCCi06MTAzMTAwMDAwMTMxMTAyNjMwNDkwMEZGMDAwMzEwQzAwMDAzMTk0MEIwCi06MTAzMTEwMDAwMDYyMTgyMTNDMDIwODAwOEM0MjAwREM5MjA0MDBEMkJDCi06MTAzMTIwMDAwMjQyMTAyMTAwNDMxMDIxMDA1MTEwMjRBRjQyMDAyODE4Ci06MTAzMTMwMDA5M0EzMDAxMDMwNjMwMDdGMDAwMzEwQzAwMDAzMTk0MDA4Ci06MTAzMTQwMDAwMDYyMTgyMTNDMDIwODAwOEM0MjAwREMwMjQyMTAyMTdGCi06MTAzMTUwMDAwMDQzMTAyMTMwNDIwMDdGMDM0MjE4MjEzQzAyMDAwQzQyCi06MTAzMTYwMDAwMDYyNDAyMThGQTMwMDE0MjQwMkZGRkYxMDYyMDAzMDkwCi06MTAzMTcwMDAzMDk1MDBGRjkzQTIwMDExOTUwMzAwMTQzMDQ0MDBGRjI2Ci06MTAzMTgwMDAzMDYzRkZGRjAwNjQxODJCMTA2MDAwMEQwMDAwMDAwMDhBCi06MTAzMTkwMDA5NTA0MDAxNDhEMDcwMDFDOEQwNjAwMTgzMDg0RkZGRjc1Ci06MTAzMUEwMDAwMDQ0MjAyMzAwMDQyMTAwMDAwMDEwMjEwMEU0MzgyMTA1Ci06MTAzMUIwMDAwMEU0MjAyQjAwQzIzMDIxMEEwMDBDNEEwMEM0MzAyMTU4Ci06MTAzMUMwMDA5NTA0MDAxNDhEMDcwMDFDOEQwNjAwMTgzMDg0RkZGRjQ1Ci06MTAzMUQwMDAwMDgyMjAyMzAwMDQyMTAwMDAwMDEwMjEwMDgwMTgyMTFCCi06MTAzMUUwMDAwMEMyMzAyMzAwRTQyMDJCMDBDNDMwMjMwMEUzMzgyMzQ2Ci06MTAzMUYwMDBBRDA3MDAxQ0FEMDYwMDE4OTNBMjAwMTFBNTAyMDAxNDMzCi06MTAzMjAwMDA5N0EyMDAxMkE1MDIwMDE2OEZBMjAwMTRBRDAyMDAxMEIyCi06MTAzMjEwMDA4RkEyMDAxNEFEMDIwMDBDOTNBMjAwMTFBNTAyMDAyMEExCi06MTAzMjIwMDA5N0EyMDAxMkE1MDIwMDIyOEZBMjAwMTRBRDAyMDAyNDcyCi06MTAzMjMwMDAyNDA2RkY4MDAyNDYxMDI0MzI1NjAwN0ZBRjQyMDAyNDRECi06MTAzMjQwMDAwMzU2MTgyMTNDMDIwMDBBMDA2MjgwMjE4RTAyMDA0Q0M1Ci06MTAzMjUwMDA4RkEyMDAyMDMxMjQwMDdGMDAwNDI4QzBBRTAyMDA1MDVECi06MTAzMjYwMDA4RkEyMDAyMDAwMDQyMTQwMDA4NTI4MjFBRTAyMDA3MEJBCi06MTAzMjcwMDA5M0EyMDAxMDAxMjA4ODIxQTIwMjAwODM5M0EyMDAxMEQzCi06MTAzMjgwMDBBMjAyMDA3OTkyMDIwMDg1MzA0MjAwM0ZBMjAyMDA4NTJFCi06MTAzMjkwMDAzQzAyMDgwMDhDNDIwMERDMDI0MjEwMjEwMDQ1MTAyMTUzCi06MTAzMkEwMDAwMDQ2MTAyNEFGNDIwMDJDM0MwMjA4MDA4QzQyMDBFNDhGCi06MTAzMkIwMDAzQzAzMDgwMDhDNjMwMERDMDI0MjEwMjEwMDQ0MTAyMTEyCi06MTAzMkMwMDAwMDQ2MTAyNEFGNDIwMDI4M0MwMjA4MDA4QzQyMDBFNDczCi06MTAzMkQwMDAwMjQzMTgyMTAwNjUxODIxMDI0MjEwMjEwMDQ0MTAyMUU4Ci06MTAzMkUwMDAzMDQyMDA3RjMwNjMwMDdGOTNBNTAwMTAwMzQyMjAyMTBECi06MTAzMkYwMDAwMzQzMTgyMTNDMDIwMDBFMDA2MjQwMjEzQzAyMDAwQ0Y2Ci06MTAzMzAwMDAxMEIxMDA4QzAwODI0ODIxMzIzMzAwN0YxNjYwMDAxOTEyCi06MTAzMzEwMDAyNDA0RkY4MDNDMDIwODAwOEM0MjAwREMwMjQyMTAyMUExCi06MTAzMzIwMDAwMDQ0MTAyNEFGNDIwMDJDM0MwMjA4MDA4QzQyMDBFNDEwCi06MTAzMzMwMDAzQzAzMDgwMDhDNjMwMERDMDI0MjEwMjEwMDQ0MTAyNDhFCi06MTAzMzQwMDBBRjQyMDAyODNDMDIwODAwOEM0MjAwRTQwMjQzMTgyMUVFCi06MTAzMzUwMDAzMDYzMDA3RjAyNDIxMDIxMzA0MjAwN0YwMzQyMjAyMTZGCi06MTAzMzYwMDAwMzQzMTgyMTNDMDIwMDBFMDA2MjQwMjEzQzAyMDAwQzg1Ci06MTAzMzcwMDAwMDgyNDgyMTkxMjQwMDBEMjQxNEZGODAwMDAwMTAyMUI4Ci06MTAzMzgwMDAwMDk0MjAyNUExMjQwMDBEOTUwNDAwMDI5NTA1MDAxNDQ5Ci06MTAzMzkwMDA4RDA3MDAxQzMwODRGRkZGMzBBNUZGRkY4RDA2MDAxODRECi06MTAzM0EwMDAwMDg1MjAyMzAwMDQyMTAwMDBFNDM4MjEwMEMyMzAyMUUwCi06MTAzM0IwMDAwMEU0MjAyQjAwQzQzMDIxQUQwNzAwMUNBRDA2MDAxODJFCi06MTAzM0MwMDA5NTAyMDAwMkE1MDIwMDE0QTUwMDAwMTY4RDAyMDAwODU3Ci06MTAzM0QwMDBBRDAyMDAxMDhEMDIwMDA4QUQwMjAwMEM5NTAyMDAwMjQzCi06MTAzM0UwMDBBNTAyMDAyMEE1MDAwMDIyOEQwMjAwMDhBRDAyMDAyNEU1Ci06MTAzM0YwMDA5MTIyMDAwRDMwNDIwMDQwMTA0MDAwNDIyNjIyMDAwMTgwCi06MTAzNDAwMDAzQzAyMDgwMDhDNDIwMEUwQTNCMzAwMjgzQzEwMDAwQUY0Ci06MTAzNDEwMDAwMjQyMTAyMTAwNTQxMDI0QUY0MjAwMjQzQzAyMDgwMDU0Ci06MTAzNDIwMDA4QzQyMDBFMEEzODAwMDJDMjdBNDAwMkMwMjQyMTAyMTMzCi06MTAzNDMwMDAzMDQyMDA3RjAzNDIxODIxMDA3MDE4MjE4QzYyMDBEOEFFCi06MTAzNDQwMDA4RDI2MDAwNDI3QTUwMDI4QUZBOTAwMkMwMDQ2MTAyMUQ2Ci06MTAzNDUwMDBBQzYyMDBEODBFMDAwOUUxQUY4MzAwMjg5M0EzMDAyOEQ2Ci06MTAzNDYwMDA4RjgyMDAyODBFMDAwNjI2QTA0MzAwRDEwRTAwMEI2OEI0Ci06MTAzNDcwMDAwMDAwMDAwMDAyNTQxMDI0QUY0MjAwMjQzQzAyMDgwMDY3Ci06MTAzNDgwMDA4QzQyMDBEQzAwMTMyOTQwMDAxMzIwQzAwMEE0MjAyMTNFCi06MTAzNDkwMDAwMjQyMTAyMTAwNDQxMDIxMDA1NDEwMjRBRjQyMDAyQzlECi06MTAzNEEwMDAzQzAyMDgwMDhDNDIwMEU0M0MwMzA4MDA4QzYzMDBEQzEyCi06MTAzNEIwMDAwMzU2MzAyMTAyNDIxMDIxMDA0NTEwMjEwMDU0MTAyNEVGCi06MTAzNEMwMDBBRjQyMDAyODNDMDIwODAwOEM0MjAwRTQwMjQzMTgyMTZECi06MTAzNEQwMDAwMDY0MTgyMTAyNDIxMDIxMDA0NTEwMjEzMDQyMDA3RjczCi06MTAzNEUwMDAzMDYzMDA3RjAzNDIyMDIxMDM0MzE4MjEzQzAyMDAwRTc5Ci06MTAzNEYwMDAwMDYyNDAyMTNDMDIwMDBDMDBEMDgwMjEwMDgyNDgyMTYzCi06MTAzNTAwMDAyNjIyMDAwMTMwNDMwMDdGMTQ3NTAwMDUzMDQ0MDBGRjdGCi06MTAzNTEwMDAyNDAzRkY4MDAyMjMxMDI0MDA0MzEwMjYzMDQ0MDBGRkMwCi06MTAzNTIwMDA5M0EyMDAxMDAwODA4ODIxMjUwODAwMjgxNDQ0RkY3NjBCCi06MTAzNTMwMDAyNTI5MDAyMDkzQTQwMDEwOEZBMzAwMTQyNDAyRkZGRjZDCi06MTAzNTQwMDAxMDYyMDAwQTMwODkwMEZGMjQ4MjAwMDEyNDgzMDAwMUY4Ci06MTAzNTUwMDAzMDQyMDA3RjE0NTUwMDA1MzA2OTAwRkYyNDAzRkY4MENFCi06MTAzNTYwMDAwMDgzMTAyNDAwNDMxMDI2MzA0OTAwRkY5MjAyMDA3OEE3Ci06MTAzNTcwMDAzMDUzMDBGRjExMzMwMDMyMDEyMDg4MjEzQzAyMDgwMDQzCi06MTAzNTgwMDA4QzQyMDBEQzMyMjUwMDdGMDAwNTIwQzAwMDA1Mjk0MDY4Ci06MTAzNTkwMDAwMEE0MjAyMTAyNDIxMDIxMjQwNkZGODAwMDQ0MTAyMUIzCi06MTAzNUEwMDAwMDQ2MTAyNEFGNDIwMDJDM0MwMzA4MDA4QzYzMDBEQzcyCi06MTAzNUIwMDAzQzAyMDgwMDhDNDIwMEU0MDI0MzE4MjEwMjQyMTAyMTIwCi06MTAzNUMwMDAwMDQ1MTAyMTAwNjQxODIxMDA0NjEwMjQzMDYzMDA3RjVDCi06MTAzNUQwMDBBRjQyMDAyODAzNDMxODIxM0MwMjAwMEUwMDYyNDAyMTQ0Ci06MTAzNUUwMDAzQzAyMDgwMDhDNDIwMEU0OEQwNjAwMEMwMTAwMjAyMTAyCi06MTAzNUYwMDAwMjQyMTAyMTAwNDUxMDIxMzA0MjAwN0YwMzQyMTgyMTcxCi06MTAzNjAwMDAzQzAyMDAwQzAwNjI0ODIxMTBDMDAwMEQwMTIwMjgyMTVFCi06MTAzNjEwMDAwRTAwMDY0QTAwMDAwMDAwMjQwMkZGODAwMjIyMTgyNDQ3Ci06MTAzNjIwMDAyNjI0MDAwMTAwNjIyODI2MzA4MjAwN0YxNDU1MDAwMjAzCi06MTAzNjMwMDAzMDgzMDBGRjMwQTMwMEZGMTQ3M0ZGRDAwMDYwODgyMUE3Ci06MTAzNjQwMDA4RTAzMDA3NDNDMDI3RkZGMzQ0MkZGRkYwMDYyMTgyNEE3Ci06MTAzNjUwMDBBRTAzMDA3NDBFMDAwNjZCMDI0MDIwMjFBRjU3MDAyNDE5Ci06MTAzNjYwMDA4RkEyMDAzMEFGNUUwMDI4OEZCRjAwNUM4RkJFMDA1ODc1Ci06MTAzNjcwMDA4RkI3MDA1NDhGQjYwMDUwOEZCNTAwNEM4RkI0MDA0ODAwCi06MTAzNjgwMDA4RkIzMDA0NDhGQjIwMDQwOEZCMTAwM0M4RkIwMDAzODQwCi06MTAzNjkwMDAyN0JEMDA2MDAzRTAwMDA4QUY0MjAwMkMyN0JERkZEODIzCi06MTAzNkEwMDBBRkIxMDAxQ0FGQkYwMDIwQUZCMDAwMTgyNzUxMDE4ODk4Ci06MTAzNkIwMDA5MjIyMDAwMzI0MDhGRjgwM0MwMzAwMEEzMDQ3MDA3RjY5Ci06MTAzNkMwMDBBM0E3MDAxMDhGNDYwMTgwM0MwMjA4MDA4QzQyMDBFMDU2Ci06MTAzNkQwMDBBRjg2MDAzNDAwQzIyODIxMDBBODEwMjRBRjQyMDAyNDg1Ci06MTAzNkUwMDA5MjI0MDAwMDMwQTIwMDdGMDM0MjEwMjEwMDQzMTAyMUU5Ci06MTAzNkYwMDBBRjgyMDAyODMwODQwMDdGMjQwMjAwMDIxNDgyMDAyNTVCCi06MTAzNzAwMDAwMDA3MTk0MDNDMDIwODAwOEM0MjAwRTQwMEMyMTAyMTZFCi06MTAzNzEwMDAwMDQzMjgyMTMwQTIwMDdGMDM0MjE4MjEwMEE4MTAyNDcyCi06MTAzNzIwMDBBRjQyMDAyODNDMDIwMDBDMDA2MjE4MjE5MDYyMDAwRDlDCi06MTAzNzMwMDBBRkEzMDAxNDAwNDgxMDI1QTA2MjAwMEQ4RkEzMDAxNDUxCi06MTAzNzQwMDA5MDYyMDAwRDMwNDIwMDQwNTA0MDAwNkE4RkJGMDAyMDYwCi06MTAzNzUwMDA4Rjg2MDAyOEEzODAwMDJDMjdBNDAwMTQ4Q0MyMDBEOEQ4Ci06MTAzNzYwMDA4QzYzMDAwNDI3QTUwMDEwMDA0MzEwMjEwRTAwMDlFMTFFCi06MTAzNzcwMDBBQ0MyMDBEODkzQTMwMDEwOEY4MjAwMjgwRTAwMDYyNjRBCi06MTAzNzgwMDBBMDQzMDBEMTBFMDAwQjY4MDAwMDAwMDAwQTAwMEUwQkUxCi06MTAzNzkwMDA4RkJGMDAyMDBFMDAwNjJGMDBDMDIwMjEwRTAwMDYzRDI2Ci06MTAzN0EwMDAwMDAwMDAwMDNDMDIwMDA4MDM0MjgwMjE5MjIzMDAwMTM3Ci06MTAzN0IwMDA5MjAyMDA3QjE0NDMwMDRGOEZCRjAwMjA5MjIyMDAwMDMyCi06MTAzN0MwMDAzMDQ0MDA3RjI0MDIwMDA0MTA4MjAwMTcyODgyMDAwNTg0Ci06MTAzN0QwMDAxMDQwMDAwNjI0MDIwMDA1MjQwMjAwMDMxMDgyMDAwN0E2Ci06MTAzN0UwMDA4RkIxMDAxQzBBMDAwRTBDMDAwMDAwMDAxMDgyMDAxMkI1Ci06MTAzN0YwMDA4RkJGMDAyMDBBMDAwRTBDOEZCMTAwMUM5MjA1MDA4M0MxCi06MTAzODAwMDA5MjA2MDA3ODhFMDcwMDc0OEY4NDAwMzQzMEE1MDBGRjg0Ci06MTAzODEwMDAwMDA3M0UwMjMwQzYwMEZGMEUwMDA2NzMzMEU3MDA3RjRGCi06MTAzODIwMDAwQTAwMEUwQjhGQkYwMDIwMEUwMDBCRDc4Rjg0MDAzNEQwCi06MTAzODMwMDAwQTAwMEUwQjhGQkYwMDIwMjQwMjBDODBBRjQyMDAyNDMwCi06MTAzODQwMDA5MjAyMDAzRTMwNDIwMDQwMTA0MDAwMjAwMDAwMDAwMDg0Ci06MTAzODUwMDA5MjAyMDAzRTAwMDIxNjAwMDAwMjE2MDMwNDQxMDAwNjE4Ci06MTAzODYwMDAwMDAwMDAwMDhGODQwMDM0MEUwMDA1QTAyNDA1MDA5M0EyCi06MTAzODcwMDAwQTAwMEUwQjhGQkYwMDIwOTIwMjAwM0YyNDAzMDAxOEE1Ci06MTAzODgwMDAzMDQyMDBGRjE0NDMwMDBDOEY4NDAwMzQyNDA1MDAzOUJCCi06MTAzODkwMDAwRTAwMDUzODAwMDAzMDIxMEUwMDAyNTA4Rjg0MDAzNEU1Ci06MTAzOEEwMDAyNDAyMDAxMkEyMDIwMDNGMEUwMDAyNTk4Rjg0MDAzNDRECi06MTAzOEIwMDAwQTAwMEUwQjhGQkYwMDIwMjQwNTAwMzYwRTAwMDUzOENECi06MTAzOEMwMDAwMDAwMzAyMTBBMDAwRTBCOEZCRjAwMjAwRTAwMDI1MEI2Ci06MTAzOEQwMDA4Rjg0MDAzNDkyMDIwMDA1MzQ0MjAwMjBBMjAyMDAwNUM5Ci06MTAzOEUwMDAwRTAwMDI1OThGODQwMDM0MEUwMDBGQzA4Rjg0MDAzNDA0Ci06MTAzOEYwMDA4RkJGMDAyMDhGQjEwMDFDOEZCMDAwMTgyNDAyMEM4MEY1Ci06MTAzOTAwMDAyN0JEMDAyODAzRTAwMDA4QUY0MjAwMjQyN0JERkZFOEUwCi06MTAzOTEwMDBBRkIwMDAxMEFGQkYwMDE0Mjc0MzAxMDA5NDYyMDAwODRECi06MTAzOTIwMDAwMDAyMTQwMDAwMDIxNDAzMDQ0MTAwMDIwMDAwODAyMTgwCi06MTAzOTMwMDAyNDEwMDAwMTk0NjIwMDA4MzA0MjAwODAxMDQwMDAxQUY4Ci06MTAzOTQwMDAwMjAwMTAyMTk0NjIwMDA4MzA0MjIwMDAxMDQwMDAxNjRFCi06MTAzOTUwMDAwMjAwMTAyMThDNjMwMDE4M0MwMjFDMkQzNDQyMTlFRDJBCi06MTAzOTYwMDAyNDA2MDAwNjEwNjIwMDBGM0MwNzYwMjEzQzAyMDgwMDlDCi06MTAzOTcwMDA4QzQyMDBENDEwNDAwMDA3OEY4MjAwMjg4RjgzMDAyOERCCi06MTAzOTgwMDA5MDYyMDA2MjMwNDIwMDBGMzQ0MjAwNDBBMDYyMDA2MjQ4Ci06MTAzOTkwMDA4RjgyMDAyODhGODQwMDM0OTQ0NTAwRDQwRTAwMEFGMUYxCi06MTAzOUEwMDAzMEE1RkZGRjAyMDAxMDIxOEZCRjAwMTQ4RkIwMDAxMDYwCi06MTAzOUIwMDAwM0UwMDAwODI3QkQwMDE4MjdCREZGRTBBRkIxMDAxNEU5Ci06MTAzOUMwMDBBRkIwMDAxMEEzODAwMDJDQUZCRjAwMTg4RjQ1MDEwMERFCi06MTAzOUQwMDAzQzAzMDgwMDhDNjMwMEUwMjQwMkZGODBBRjg1MDAzNEM0Ci06MTAzOUUwMDAwMEEzMTgyMTMwNjQwMDdGMDM0NDIwMjEwMDYyMTgyNEMyCi06MTAzOUYwMDAzQzAyMDAwQTAwODIyMDIxQUY0MzAwMjQyNzUwMDEwMDJFCi06MTAzQTAwMDA4RTAyMDAxNDhDODMwMERDQUY4NDAwMjgwMDQzMTAyMzU2Ci06MTAzQTEwMDAxODQwMDAwNDAwMDA4ODIxOEUwMjAwMTQwRTAwMEE4NDYxCi06MTAzQTIwMDBBQzgyMDBEQzkyMDIwMDBCMjQwMzAwMDIzMDQyMDBGRjUzCi06MTAzQTMwMDAxNDQzMDAyRjAwMDAwMDAwOTYwMjAwMDgzMDQzMDBGRkVFCi06MTAzQTQwMDAyNDAyMDA4MjE0NjIwMDA1MjQwMjAwODQwRTAwMDkzRTU0Ci06MTAzQTUwMDAwMDAwMDAwMDBBMDAwRTk3MDAwMDAwMDAxNDYyMDAwOTM4Ci06MTAzQTYwMDAyNDAyMDA4MThGODIwMDI4OEY4NDAwMzQzQzA3NjAyMTZCCi06MTAzQTcwMDA5NDQ1MDBENDkyMDYwMDA1MzBBNUZGRkYwQTAwMEU4NjhCCi06MTAzQTgwMDAzMEM2MDBGRjE0NjIwMDI3MDAwMDAwMDA5MjAyMDAwQTA2Ci06MTAzQTkwMDAzMDQzMDBGRjMwNjIwMDIwMTA0MDAwMDQzMDYyMDA0MERDCi06MTAzQUEwMDA4Rjg0MDAzNDBBMDAwRTgyMjQwNjAwNDAxMDQwMDAwNDc3Ci06MTAzQUIwMDAwMDAzMTYwMDhGODQwMDM0MEEwMDBFODIyNDA2MDA0MUExCi06MTAzQUMwMDAwMDAyMTYwMzA0NDEwMDE3OEY4NDAwMzQyNDA2MDA0MkNDCi06MTAzQUQwMDA4RjgyMDAyODNDMDc2MDE5OTQ0NTAwRDQzMEE1RkZGRjcxCi06MTAzQUUwMDAwRTAwMEFGMTAwMDAwMDAwMEEwMDBFOTcwMDAwMDAwMDFFCi06MTAzQUYwMDA5MjAyMDAwQjI0MDMwMDE2MzA0MjAwRkYxMDQzMDAwNjIwCi06MTAzQjAwMDAwMDAwMDAwMDkyMDIwMDBCMjQwMzAwMTczMDQyMDBGRjY3Ci06MTAzQjEwMDAxNDQzMDAwNDAwMDAwMDAwMEUwMDBFMTEwMDAwMDAwMDFECi06MTAzQjIwMDAwMDQwODgyMTBFMDAwQjY4MDAwMDAwMDA5MjAyMDAwQThECi06MTAzQjMwMDAzMDQyMDAwODEwNDAwMDA2MjQwMjBDODA4Rjg1MDAyOEM3Ci06MTAzQjQwMDAzQzA0MDAwODBFMDAxMUVFMDM0NDIwMjEyNDAyMEM4MEU2Ci06MTAzQjUwMDBBRjQyMDAyNDhGQkYwMDE4MDIyMDEwMjE4RkIwMDAxMDQ4Ci06MTAzQjYwMDA4RkIxMDAxNDAzRTAwMDA4MjdCRDAwMjAyN0JERkZFODQ3Ci06MTAzQjcwMDBBRkJGMDAxNEFGQjAwMDEwOEY1MDAwMjQzQzAzMDgwMDBBCi06MTAzQjgwMDA4QzYzMDBFMDhGNDUwMTAwMjQwMkZGODAwMEEzMTgyMTEwCi06MTAzQjkwMDAzMDY0MDA3RjAzNDQyMDIxMDA2MjE4MjQzQzAyMDAwQUE0Ci06MTAzQkEwMDAwMDgyMjAyMUFGODUwMDM0QUY0MzAwMjQ5MDgyMDA2MjYwCi06MTAzQkIwMDBBRjg0MDAyODMwNDIwMDBGMzQ0MjAwNTBBMDgyMDA2MkRGCi06MTAzQkMwMDAzQzAyMDAxRjM0NDJGRjgwMEUwMDA2MjYwMjAyODAyNEMxCi06MTAzQkQwMDBBRjUwMDAyNDhGQkYwMDE0OEZCMDAwMTAwM0UwMDAwODI2Ci06MTAzQkUwMDAyN0JEMDAxODNDMDIwODAwOEM0MjAwMjAxMDQwMDAxRDM4Ci06MTAzQkYwMDAyNzQ1MDEwMDkwQTMwMDA5M0MwMjAwMDgwMzQyMjAyMTUwCi06MTAzQzAwMDAyNDAyMDAxODU0NjIwMDAzM0MwMjAwMDgwQTAwMEVEODg3Ci06MTAzQzEwMDAyNDAyMDAwODAzNDIyMDIxMjQwMjAwMTYxNDYyMDAwNTM5Ci06MTAzQzIwMDAyNDAyMDAxNzI0MDIwMDEyQTA4MjAwM0YwQTAwMEVFMkM0Ci06MTAzQzMwMDA5NEE3MDAwODU0NjIwMDA2OTRBNzAwMDg5MzYyMDAwNTQ4Ci06MTAzQzQwMDAyNDAzRkZGRTAwNDMxMDI0QTM2MjAwMDU5NEE3MDAwODhDCi06MTAzQzUwMDA5MEE2MDAxQjhDQTQwMDAwOTRBNTAwMDYwQTAwMEFDQ0M0Ci06MTAzQzYwMDAwMDA3M0MwMDAzRTAwMDA4MDAwMDAwMDAyNzQ0MDEwMEJBCi06MTAzQzcwMDA5NDgyMDAwODMwNDUwMEZGMzhBMzAwODIzOEEyMDA4NEY3Ci06MTAzQzgwMDAyQzYzMDAwMTJDNDIwMDAxMDA2MjE4MjUxMDYwMDAwNjIwCi06MTAzQzkwMDAyNDAyMDA4MzkzODIwMDJEMTA0MDAwMEQwMDAwMDAwMERDCi06MTAzQ0EwMDAwQTAwMEI5QjAwMDAwMDAwMTRBMjAwMDUyNEEyRkY4MDY0Ci06MTAzQ0IwMDA4RjQzMDEwNDNDMDI2MDIwMDNFMDAwMDhBQzQzMDAxNDgxCi06MTAzQ0MwMDAzMDQyMDBGRjJDNDIwMDAyMTA0MDAwMDMyNDAyMDAyMjc4Ci06MTAzQ0QwMDAwQTAwMEUzQzAwMDAwMDAwMTRBMjAwMDMwMDAwMDAwMEQ3Ci06MTAzQ0UwMDAwQTAwMEVBOTAwMDAwMDAwMEEwMDBFQzcwMDAwMDAwMDM0Ci06MTAzQ0YwMDA5MzYzMDA3RTkzNjIwMDdBMTQ0MzAwMDkwMDAwMjAyMTQwCi06MTAzRDAwMDA5MzYyMDAwMDI0MDMwMDUwMzA0MjAwRkYxNDQzMDAwNDdCCi06MTAzRDEwMDAyNDA0MDAwMTkzNjIwMDdFMjQ0MjAwMDFBMzYyMDA3RTFECi06MTAzRDIwMDAwM0UwMDAwODAwODAxMDIxOEY0MjAxRjgwNDQwRkZGRUVDCi06MTAzRDMwMDAyNDAyMDAwMkFGNDQwMUMwQTM0MjAxQzQzQzAyMTAwMEFGCi06MTAzRDQwMDAwM0UwMDAwOEFGNDIwMUY4MjdCREZGRThBRkJGMDAxMDU1Ci06MTAzRDUwMDA5MzYyMDAzRjI0MDMwMDBBMzA0MjAwRkYxNDQzMDA0NkYwCi06MTAzRDYwMDAwMDAwMDAwMDhGNjMwMDU0OEY2MjAwNEMxMDYyMDA3REUxCi06MTAzRDcwMDAwMzYwMzAyMTkzNjIwMDAwMjQwMzAwNTAzMDQyMDBGRkIyCi06MTAzRDgwMDAxNDQzMDAyRjAwMDAwMDAwOEY0NDAxNDAzQzAyMDgwMDUzCi06MTAzRDkwMDA4QzQyMDBFMDI0MDNGRjgwMDA4MjEwMjEwMDQzMTAyNEE1Ci06MTAzREEwMDBBRjQyMDAyNDNDMDIwODAwOEM0MjAwRTA4RjY1MDA1NEMyCi06MTAzREIwMDAzQzAzMDAwQTAwODIyMDIxMzA4NDAwN0YwMzQ0MTAyMTRDCi06MTAzREMwMDAwMDQzMTAyMUFDNDUwMTA4OTc2MjAwM0M4RjYzMDA0QzEyCi06MTAzREQwMDAzMDQyRkZGRjAwMDIxMDQwMDA2MjE4MjFBRjYzMDA1QzE4Ci06MTAzREUwMDA4RjYzMDA1NDhGNjQwMDRDOTc2MjAwM0MwMDY0MTgyMzdBCi06MTAzREYwMDAzMDQyRkZGRjAwMDMxODQzMDAwMjEwNDAwMDQzMTAyQTI2Ci06MTAzRTAwMDAxMDQwMDAwNjAwMDAwMDAwOEY2MjAwNTQ4RjYzMDA0Q0Q5Ci06MTAzRTEwMDAwMDQzMTAyMzBBMDAwRjU4MDAwMjEwNDM5NzYyMDAzQzMxCi06MTAzRTIwMDAzMDQyRkZGRjAwMDIxMDQwQUNDMjAwNjQyNDAyMDAwMUQ3Ci06MTAzRTMwMDBBMEMwMDA3Q0EwQzIwMDg0MjQwMjBDODBBRjQyMDAyNEY5Ci06MTAzRTQwMDAwRTAwMEYwQThGNDQwMTQwMTA0MDAwNDc4RkJGMDAxMDQyCi06MTAzRTUwMDA4RjQzMDE0MDhGNDIwMUY4MDQ0MEZGRkUyNDAyMDAwMjFDCi06MTAzRTYwMDBBRjQzMDFDMEEzNDIwMUM0M0MwMjEwMDBBRjQyMDFGOEJECi06MTAzRTcwMDAwQTAwMEZBODhGQkYwMDEwOTM2MjAwM0YyNDAzMDAxMEI4Ci06MTAzRTgwMDAzMDQyMDBGRjE0NDMwMDA0MDAwMDAwMDA4RjQ0MDE0MDUyCi06MTAzRTkwMDAwQTAwMEY5NDAwMDAyODIxOTM2MjAwM0YyNDAzMDAxNkJCCi06MTAzRUEwMDAzMDQyMDBGRjE0NDMwMDA0MjQwMjAwMTRBMzYyMDAzRkM4Ci06MTAzRUIwMDAwQTAwMEZBMjAwMDAwMDAwOEY2MjAwNEM4RjYzMDA1MEM4Ci06MTAzRUMwMDAwMDQzMTAyMzA0NDEwMDI4OEZCRjAwMTA5MzYyMDA4MTNCCi06MTAzRUQwMDAyNDQyMDAwMUEzNjIwMDgxOTM2MjAwODEyQzQyMDAwNDBECi06MTAzRUUwMDAxNDQwMDAxMDAwMDAwMDAwOTM2MjAwM0YyNDAzMDAwNDBGCi06MTAzRUYwMDAzMDQyMDBGRjE0NDMwMDA2MDAwMDAwMDA4RjQ0MDE0MEUwCi06MTAzRjAwMDA4RkJGMDAxMDI0MDUwMDkzMEEwMDA1QTAyN0JEMDAxOEVDCi06MTAzRjEwMDA4RjQ0MDE0MDI0MDUwMDkzOEZCRjAwMTAwQTAwMDYwRjU0Ci06MTAzRjIwMDAyN0JEMDAxODhGNDQwMTQwMEUwMDAyNTAwMDAwMDAwMDIxCi06MTAzRjMwMDA4RjYyMDA1NDI0NDJGRkZGQUY2MjAwNTQ4RjYyMDA1MDMyCi06MTAzRjQwMDAyNDQyRkZGRkFGNjIwMDUwMEUwMDAyNTk4RjQ0MDE0MDJGCi06MTAzRjUwMDA4RjQ0MDE0MDhGQkYwMDEwMjQwNTAwMDQwQTAwMDI1RTU4Ci06MTAzRjYwMDAyN0JEMDAxODhGQkYwMDEwMDNFMDAwMDgyN0JEMDAxODEwCi06MTAzRjcwMDA4RjQyMDE4ODkzNjMwMDdFMDAwMjE0MDIzMDQ0MDBGRkU4Ci06MTAzRjgwMDAzMDYzMDBGRjE0NjQwMDBEMDAwMDAwMDA5MzYyMDA4MEE1Ci06MTAzRjkwMDAzMDQyMDBGRjEwNDQwMDA5MDAwMDAwMDBBMzY0MDA4MENDCi06MTAzRkEwMDA5MzYyMDAwMDI0MDMwMDUwMzA0MjAwRkYxNDQzMDAwNEQ5Ci06MTAzRkIwMDAwMDAwMDAwMDBBMDAwNkQ3OEY0NDAxODBBMzY0MDA4MDNGCi06MTAzRkMwMDAwM0UwMDAwODAwMDAwMDAwMjdCREZGRThBRkIwMDAxMENDCi06MTAzRkQwMDBBRkJGMDAxNDkzNjIwMDA1MjQwMzAwMzAzMDQyMDAzMDZDCi06MTAzRkUwMDAxNDQzMDA4OTAwODA4MDIxM0MwMjA4MDA4QzQyMDAyMDlDCi06MTAzRkYwMDAxMDQwMDA4MDAyMDAyMDIxMEUwMDA0OTMwMDAwMDAwMDA5Ci06MTA0MDAwMDA4Rjg1MDAyMEFDQjAwMDAwOTM2MjAwM0U5MzYzMDAzRkI4Ci06MTA0MDEwMDAzMDQyMDBGRjAwMDIxMjAwMzA2MzAwRkYwMDQzMTAyNTExCi06MTA0MDIwMDBBQ0EyMDAwNDkzNjIwMDgyMDAwMjE2MDAwMDAyMTYwMzk0Ci06MTA0MDMwMDAwNDQxMDAwNTAwMDAwMDAwM0MwMzA4MDA4QzYzMDA0OEI4Ci06MTA0MDQwMDAwQTAwMEZFNjAwMDAwMDAwOTM2MjAwM0UzMDQyMDA0MDhDCi06MTA0MDUwMDAxNDQwMDAwMzAwMDAxODIxOTM2MjAwODEzMDQzMDBGRkU4Ci06MTA0MDYwMDA5MzYyMDA4MjAwMDMxRTAwMzA0MjAwRkYwMDAyMTQwMDMxCi06MTA0MDcwMDAwMDYyMTgyNUFDQTMwMDA4OEY2MjAwNDBBQ0EyMDAwQ0JGCi06MTA0MDgwMDA4RjYyMDA0OEFDQTIwMDEwOEY2MjAwNENBQ0EyMDAxNEZBCi06MTA0MDkwMDA4RjYyMDA1MDhGNjMwMDRDMDA0MzEwMjMwNDQxMDAwM0UzCi06MTA0MEEwMDAwMDAwMDAwMDBBMDAwRkZBOEY2MjAwNEM4RjYyMDA1MDdGCi06MTA0MEIwMDBBQ0EyMDAxODNDMDIwODAwOTQ0MjRCNUUzQzAzQzAwQkNCCi06MTA0MEMwMDAwMDAwMjAyMTAwNDMxMDI1MEUwMDA0QjhBQ0EyMDAxQzAzCi06MTA0MEQwMDA4RjYyMDA1NDhGODQwMDIwQUM4MjAwMDA4RjYyMDA1OEYxCi06MTA0MEUwMDBBQzgyMDAwNDhGNjIwMDVDQUM4MjAwMDg4RjYyMDA2MENBCi06MTA0MEYwMDA4RjQzMDA3NDAwNDMxMDIxQUM4MjAwMEM4RjYyMDA2NDc3Ci06MTA0MTAwMDBBQzgyMDAxMDk3NjMwMDY4OTc2MjAwNkEwMDAzMUMwMDhECi06MTA0MTEwMDAzMDQyRkZGRjAwNjIxODI1QUM4MzAwMTQ5MzYyMDA4MkQ2Ci06MTA0MTIwMDAyNDAzMDA4MDMwNDIwMEZGMTQ0MzAwMDMwMDAwMDAwMDFECi06MTA0MTMwMDAwQTAwMTAyRUFDODAwMDE4OEY2MzAwMEMyNDAyMDAwMUNFCi06MTA0MTQwMDAxMDYyMDAwRTI0MDJGRkZGOTM2MjAwM0UzMDQyMDA0MEU2Ci06MTA0MTUwMDAxNDQwMDAwQTI0MDJGRkZGOEY2MzAwMEM4RjQyMDA3NDlBCi06MTA0MTYwMDAwMDYyMTgyMzNDMDIwODAwMDA2MjEwMjQxNDQwMDAwMjgwCi06MTA0MTcwMDAwMDAwMjgyMTAwNjAyODIxMDAwNTEwNDNBQzgyMDAxOEFGCi06MTA0MTgwMDAzQzAyMDgwMDk0NDI0QjVFM0MwM0MwMEMwMDAwMjAyMTFFCi06MTA0MTkwMDAwMDQzMTAyNThGODMwMDIwMEUwMDA0QjhBQzYyMDAxQzgxCi06MTA0MUEwMDA4RjYyMDAxODhGODMwMDIwM0MwNTA4MDA5NEE1NEI1RUE5Ci06MTA0MUIwMDAyNDA0MDAwMUFDNjIwMDAwQUM2MDAwMDQ4RjY2MDA2QzU3Ci06MTA0MUMwMDAzQzAyNDAwRDAwQTIyODI1QUM2NjAwMDg4RjYyMDBEQzhFCi06MTA0MUQwMDBBQzYyMDAwQ0FDNjAwMDEwOTM2MjAwMDUwMDAyMTYwMDk3Ci06MTA0MUUwMDBBQzYyMDAxNEFDNjAwMDE4MEUwMDA0QjhBQzY1MDAxQzkyCi06MTA0MUYwMDAwMjAwMjAyMThGQkYwMDE0OEZCMDAwMTBBMzYwMDAwNUMzCi06MTA0MjAwMDAwQTAwMDQyMTI3QkQwMDE4OEZCRjAwMTQ4RkIwMDAxMEQyCi06MTA0MjEwMDAwM0UwMDAwODI3QkQwMDE4OTc0MjAwN0MzMEM2MDBGRjZECi06MTA0MjIwMDBBMDg2MDA4NDMwNDdGRkZGMjQwMjAwMDUxNEMyMDAwQjYzCi06MTA0MjMwMDAyNEUzNDY1MDkwQTIwMTEyMkM0MjAwMDcxMDQwMDAwN0QwCi06MTA0MjQwMDAyNEUzMEEwMDkwQTMwMTEyMjQwMjAwMTQwMDYyMTAwNDY3Ci06MTA0MjUwMDAwMEUyMTAyMTBBMDAxMDY2MzA0N0ZGRkYzMDY3RkZGRkMxCi06MTA0MjYwMDAwM0UwMDAwOEE0ODcwMDE0QUM4NzAwNEM4Q0EyMDEwODZFCi06MTA0MjcwMDAwMDgwNDAyMTAwQTA0ODIxMDBFMjEwMjMzMEM2MDBGRjRBCi06MTA0MjgwMDAxODQwMDAwMzkzQUEwMDEzMjRFMkZGRkNBQ0EyMDEwODJCCi06MTA0MjkwMDAzMEMyMDAwMTEwNDAwMDA4MDAwMDAwMDA4RDAyMDA1MEY0Ci06MTA0MkEwMDAwMEUyMTAyMzA0NDEwMDEzMjQwNjAwMDU4RDAyMDA1NDhGCi06MTA0MkIwMDAxMEUyMDAxMDAwMDAwMDAwOEQwMjAwNTQxNEUyMDAxQTA5Ci06MTA0MkMwMDAwMDAwMDAwMDNDMDIwODAwOEM0MjAwRDgzMDQyMDAyMDcwCi06MTA0MkQwMDAxMDQwMDAwQTI0MDIwMDAxOTEwMzAwNzg5MTAyMDA4MzNCCi06MTA0MkUwMDAxNDQzMDAwNjI0MDIwMDAxMDEwMDIwMjEwMTIwMjgyMTlFCi06MTA0MkYwMDAyNDA2MDAwNDBBMDAxMDU0MDAwMDAwMDBBMTAwMDA4NEZECi06MTA0MzAwMDAxMTQwMDAwOUE1MDIwMDE0OEY0MzAxMDA4RjQyMDFGOEZCCi06MTA0MzEwMDAwNDQwRkZGRTI0MDIwMDAyQUY0MzAxQzBBMzQyMDFDNEQ3Ci06MTA0MzIwMDAzQzAyMTAwMEFGNDIwMUY4MDNFMDAwMDgwMDAwMDAwMDZBCi06MTA0MzMwMDAyN0JERkZFODhGQTkwMDI4QUZCRjAwMTAwMDgwNDAyMUYzCi06MTA0MzQwMDAwMEU5MTgyMzE4NjAwMDczMzBDNjAwRkZBMDgwMDA3Q0NECi06MTA0MzUwMDBBMDgwMDA4MThDQTIwMTA4MDBFMjEwMjMwNDQwMDA0RERGCi06MTA0MzYwMDAwMDAwMDAwMDhDODIwMDUwOTQ4MzAwM0M4Qzg0MDA2NDI4Ci06MTA0MzcwMDAwMDQ3NDgyMzMwNjNGRkZGMDEyMzE4MjEwMDgzMjAyQkNGCi06MTA0MzgwMDAxMDgwMDAwNDAwMDAwMDAwOEQwMjAwNjQwQTAwMTBCN0Q1Ci06MTA0MzkwMDAwMEUyMTAyMTk1MDIwMDNDMzA0MkZGRkYwMTIyMTAyMTczCi06MTA0M0EwMDAwMEUyMTAyMUFEMDIwMDVDOTUwMjAwM0M4RDAzMDA1QzMwCi06MTA0M0IwMDAzMDQyRkZGRjAwMDIxMDQwMDBFMjEwMjEwMDQzMTAyQkFBCi06MTA0M0MwMDAxMDQwMDAwMzAwMDAwMDAwMEEwMDEwQzY4RDAyMDA1Q0NGCi06MTA0M0QwMDA5NTAyMDAzQzMwNDJGRkZGMDAwMjEwNDAwMEUyMTAyMTM1Ci06MTA0M0UwMDBBRDAyMDA1Q0ExMDAwMDg0QUQwNzAwNEM4Q0EyMDEwODY2Ci06MTA0M0YwMDAwMEUyMTAyMzE4NDAwMDAyMjRFMkZGRkNBQ0EyMDEwOEY2Ci06MTA0NDAwMDAzMEMyMDAwMTEwNDAwMDBBMDAwMDAwMDA4RDAyMDA1MDgwCi06MTA0NDEwMDAwMEUyMTAyMzA0NDEwMDA0MDEwMDIwMjE4RDAyMDA1NDE5Ci06MTA0NDIwMDAxNEUyMDAwMzAwMDAwMDAwMEEwMDEwRTgyNDA2MDAwNTYyCi06MTA0NDMwMDA4RDAyMDA1NDE0RTIwMDQ3OEZCRjAwMTAzQzAyMDgwMEI4Ci06MTA0NDQwMDA4QzQyMDBEODMwNDIwMDIwMTA0MDAwMEEyNDAyMDAwMUIzCi06MTA0NDUwMDA5MTAzMDA3ODkxMDIwMDgzMTQ0MzAwMDYyNDAyMDAwMUI2Ci06MTA0NDYwMDAwMTAwMjAyMTI0MDYwMDA0OEZCRjAwMTAwQTAwMTA1NDEwCi06MTA0NDcwMDAyN0JEMDAxOEExMDAwMDg0QTUwMjAwMTQ4RjQzMDEwMDhECi06MTA0NDgwMDA4RjQyMDFGODA0NDBGRkZFMjQwMjAwMDIwQTAwMTEwREQxCi06MTA0NDkwMDAwMDAwMDAwMDhDODIwMDVDMDA0OTEwMjMwMDQzMTAyQkI4Ci06MTA0NEEwMDA1NDQwMDAwMUFDODcwMDVDOTUwMjAwM0MzMDQyRkZGRkE1Ci06MTA0NEIwMDAwMDYyMTAyQjE0NDAwMDA3MjQwMjAwMDI5NTAyMDAzQzA5Ci06MTA0NEMwMDA4RDAzMDA1QzMwNDJGRkZGMDA2MjE4MjFBRDAzMDA1Q0U5Ci06MTA0NEQwMDAyNDAyMDAwMkFEMDcwMDRDQTEwMjAwODQwRTAwMEYwQTY2Ci06MTA0NEUwMDA4RjQ0MDEwMDEwNDAwMDFCOEZCRjAwMTA4RjQzMDEwMDVDCi06MTA0NEYwMDA4RjQyMDFGODA0NDBGRkZFMjQwMjAwMDJBRjQzMDFDMEQ2Ci06MTA0NTAwMDBBMzQyMDFDNDNDMDIxMDAwQUY0MjAxRjgwQTAwMTEyMzhCCi06MTA0NTEwMDA4RkJGMDAxMDMwQzIwMDEwMTA0MDAwMEU4RkJGMDAxMDdGCi06MTA0NTIwMDA4QzgzMDA1Qzk0ODIwMDNDMDA2OTE4MjMzMDQyRkZGRkJBCi06MTA0NTMwMDAwMDYyMTgyMTNDMDIzRkZGMzQ0NEZGRkYwMDgzMTAyQjMwCi06MTA0NTQwMDA1NDQwMDAwMTAwODAxODIxMDEyMzEwMjFBRDAyMDA1Q0JECi06MTA0NTUwMDA4RkJGMDAxMDAzRTAwMDA4MjdCRDAwMTgyN0JERkZFODRCCi06MTA0NTYwMDA4RkFBMDAyOEFGQkYwMDEwMDA4MDQwMjEwMEVBNDgyMzM2Ci06MTA0NTcwMDAxOTIwMDAyMTMwQzYwMEZGOEM4MzAwNUM4QzgyMDA2NDBGCi06MTA0NTgwMDAwMDZBMTgyMzAwNDMxMDJCNTA0MDAwMTAwMDY5MTgyMUM2Ci06MTA0NTkwMDA5NEEyMDExMDAxMjIxMDIxQTRBMjAxMTA5NEEyMDExMEUyCi06MTA0NUEwMDAzMDQyRkZGRjAwNDMxMDJCMTQ0MDAwMEEzQzAyM0ZGRjQzCi06MTA0NUIwMDA5NEEyMDExMDAwNDMxMDIzQTRBMjAxMTA5NDgyMDAzQzk1Ci06MTA0NUMwMDAzMDQyRkZGRjBBMDAxMTQyMDA2MjE4MjFBNEEwMDExMDJFCi06MTA0NUQwMDAzQzAyM0ZGRjM0NDRGRkZGMDA4MzEwMkI1NDQwMDAwMTk2Ci06MTA0NUUwMDAwMDgwMTgyMTAwNjcxMDIxQUQwMjAwNUNBMTAwMDA3QzUyCi06MTA0NUYwMDAwQTAwMTE4QUExMDAwMDgxMzBDMjAwMTAxMDQwMDAzQzY2Ci06MTA0NjAwMDAwMDAwMDAwMDhDODIwMDUwMDA0QTEwMjMxODQwMDAzODNGCi06MTA0NjEwMDAwMDAwMDAwMDkwODIwMDdDMjQ0MjAwMDFBMDgyMDA3QzA3Ci06MTA0NjIwMDA5MDgyMDA3QzNDMDMwODAwOEM2MzAwMjQzMDQyMDBGRjMxCi06MTA0NjMwMDAwMDQzMTAyQjE0NDAwMDVDOEZCRjAwMTA4Q0EyMDEwOEI3Ci06MTA0NjQwMDAwMEUyMTAyMzE4NDAwMDU4MDAwMDAwMDA4QzgzMDA1NDQyCi06MTA0NjUwMDA5NDgyMDAzQzAwNkExODIzMzA0MkZGRkYwMDAzMTg0Mzk1Ci06MTA0NjYwMDAwMDAyMTA0MDAwNDMxMDJBMTA0MDAwMDUwMDAwMDAwMDI2Ci06MTA0NjcwMDA4QzgyMDA1NDAwNEExMDIzMEEwMDExNzEwMDAyMTA0MzdBCi06MTA0NjgwMDA5NDgyMDAzQzMwNDJGRkZGMDAwMjEwNDBBRDAyMDA2NDAzCi06MTA0NjkwMDA5NTAyMDAzQzhEMDQwMDY0OTUwMzAwM0MzMDQyRkZGRjBFCi06MTA0NkEwMDAwMDAyMTA0MDAwODIyMDIxMzA2M0ZGRkYwMDgzMTgyMUE4Ci06MTA0NkIwMDAwMTQzMTAyMUFEMDIwMDVDOEQwMjAwNTRBQ0EyMDEwODQwCi06MTA0NkMwMDAyNDAyMDAwMkExMDIwMDg0MEUwMDBGMEE4RjQ0MDEwMEEwCi06MTA0NkQwMDAxMDQwMDAzNThGQkYwMDEwOEY0MzAxMDA4RjQyMDFGODVBCi06MTA0NkUwMDAwNDQwRkZGRTI0MDIwMDAyMEEwMDExQjMwMDAwMDAwMDkzCi06MTA0NkYwMDBBRDA3MDA0QzhDQTIwMTA4MDBFMjEwMjMxODQwMDAwMjE0Ci06MTA0NzAwMDAyNEUyRkZGQ0FDQTIwMTA4MzBDMjAwMDExMDQwMDAwQTA0Ci06MTA0NzEwMDAwMDAwMDAwMDhEMDIwMDUwMDBFMjEwMjMwNDQxMDAwNDVDCi06MTA0NzIwMDAwMTAwMjAyMThEMDIwMDU0MTRFMjAwMDMwMDAwMDAwMDZCCi06MTA0NzMwMDAwQTAwMTFBQTI0MDYwMDA1OEQwMjAwNTQxNEUyMDAxQTkyCi06MTA0NzQwMDA4RkJGMDAxMDNDMDIwODAwOEM0MjAwRDgzMDQyMDAyMDhECi06MTA0NzUwMDAxMDQwMDAwQTI0MDIwMDAxOTEwMzAwNzg5MTAyMDA4M0I2Ci06MTA0NzYwMDAxNDQzMDAwNjI0MDIwMDAxMDEwMDIwMjEyNDA2MDAwNDU1Ci06MTA0NzcwMDA4RkJGMDAxMDBBMDAxMDU0MjdCRDAwMThBMTAwMDA4NDRDCi06MTA0NzgwMDBBNTAyMDAxNDhGNDMwMTAwOEY0MjAxRjgwNDQwRkZGRTkwCi06MTA0NzkwMDAyNDAyMDAwMkFGNDMwMUMwQTM0MjAxQzQzQzAyMTAwMDQ2Ci06MTA0N0EwMDBBRjQyMDFGODhGQkYwMDEwMDNFMDAwMDgyN0JEMDAxOERBCi06MTA0N0IwMDA4RkFBMDAxMDhDODIwMDUwMDA4MDQwMjEzMEM2MDBGRjdDCi06MTA0N0MwMDAwMDRBMTAyMzAwQTA0ODIxMTg0MDAwMDcwMEUwMTgyMUVCCi06MTA0N0QwMDAyNDAyMDAwMUEwODAwMDg0QTBBMDAxMTJBNDgyMDAxNDgxCi06MTA0N0UwMDAwQTAwMTEyNUFGQUEwMDEwQTA4MDAwODFBRDA3MDA0QzdGCi06MTA0N0YwMDA4Q0EyMDEwODAwRTIxMDIzMTg0MDAwMDIyNEUyRkZGQzEyCi06MTA0ODAwMDBBQ0EyMDEwODMwQzIwMDAxMTA0MDAwMDgwMDAwMDAwMDA2Ci06MTA0ODEwMDA4RDAyMDA1MDAwNjIxMDIzMDQ0MTAwMTMyNDA2MDAwNTlECi06MTA0ODIwMDA4RDAyMDA1NDEwNjIwMDEwMDAwMDAwMDA4RDAyMDA1NDQwCi06MTA0ODMwMDAxNDYyMDAxMTAwMDAwMDAwM0MwMjA4MDA4QzQyMDBEODA1Ci06MTA0ODQwMDAzMDQyMDAyMDEwNDAwMDBBMjQwMjAwMDE5MTAzMDA3ODQ5Ci06MTA0ODUwMDA5MTAyMDA4MzE0NDMwMDA2MjQwMjAwMDEwMTAwMjAyMTdDCi06MTA0ODYwMDAwMTIwMjgyMTI0MDYwMDA0MEEwMDEwNTQwMDAwMDAwMDQyCi06MTA0ODcwMDBBMTAwMDA4NEE1MDIwMDE0MDNFMDAwMDgwMDAwMDAwMDZECi06MTA0ODgwMDAyN0JERkZFMEFGQkYwMDE4Mjc0MjAxMDA5MDQ2MDAwQTk1Ci06MTA0ODkwMDA4QzQ4MDAxNDhDOEIwMDRDOTA4MjAwODQzMEM5MDBGRjNGCi06MTA0OEEwMDAwMTY4MTgyMzMwNEEwMEZGMUM2MDAwMUEyRDQ2MDAwNkRDCi06MTA0OEIwMDAyNDAyMDAwMTAxNDIxMDA0MTBDMDAwMTYzMDQzMDAwMzFFCi06MTA0OEMwMDAwMTIwMzAyMTAxMDAzODIxMTQ2MDAwMDczMDRDMDAwQzE5Ci06MTA0OEQwMDAxNTgwMDAwOTMwNDIwMDMwMTQ0MDAwMEI4RkJGMDAxOEQzCi06MTA0OEUwMDAwQTAwMTIxNDAwMDAwMDAwMEUwMDExMjVBRkFCMDAxMEVBCi06MTA0OEYwMDAwQTAwMTIxNDhGQkYwMDE4MEUwMDEwOUFBRkFCMDAxMDAwCi06MTA0OTAwMDAwQTAwMTIxNDhGQkYwMDE4QUZBQjAwMTAwRTAwMTFCQUNFCi06MTA0OTEwMDBBRkFBMDAxNDhGQkYwMDE4MDNFMDAwMDgyN0JEMDAyMEQ1Ci06MTA0OTIwMDAyNDAyMDAwM0EwODIwMDg0OEM4MjAwNTQwM0UwMDAwODZCCi06MTA0OTMwMDBBQ0EyMDEwODNDMDIwMDA4MDM0MjE4MjE5MDYyMDA4MUU5Ci06MTA0OTQwMDAyNDA2MDA0MzNDMDc2MDE5MjQ0MjAwMDFBMDYyMDA4MTU0Ci06MTA0OTUwMDA5MDYzMDA4MTNDMDIwODAwOEM0MjAwQzAzMDYzMDBGRjdECi06MTA0OTYwMDAxNDYyMDAxMDI0MDNGRjgwM0MwMjA4MDA4QzQyMDBFMDI3Ci06MTA0OTcwMDAwMDgyMTAyMTAwNDMxMDI0QUY0MjAwMjQzQzAyMDgwMEIyCi06MTA0OTgwMDA4QzQyMDBFMDNDMDMwMDBBMDA4MjEwMjEzMDQyMDA3RjhDCi06MTA0OTkwMDAwMzQyMTAyMTAwNDMxMDIxOTQ0NTAwRDQwQTAwMEFGMTdCCi06MTA0OUEwMDAzMEE1RkZGRjAzRTAwMDA4MDAwMDAwMDAyN0JERkZFMDg2Ci06MTA0OUIwMDBBRkJGMDAxOEFGQjEwMDE0QUZCMDAwMTA4RjQyMDE4MDNDCi06MTA0OUMwMDAwMDgwODAyMTAwQTA4ODIxMEUwMDEyMUIwMDQwMjAyMUMxCi06MTA0OUQwMDBBMjAwMDA4NDhFMDIwMDU0OEZCRjAwMTg4RkIwMDAxMDE4Ci06MTA0OUUwMDBBRTIyMDEwODhGQjEwMDE0MDNFMDAwMDgyN0JEMDAyMEFCCi06MTA0OUYwMDAyN0JERkZFMDNDMDIwMDA4QUZCMDAwMTBBRkJGMDAxOEI5Ci06MTA0QTAwMDBBRkIxMDAxNDAzNDI4MDIxOEY1MTAxNDA5MjAzMDA4NDEyCi06MTA0QTEwMDA4RTA0MDA1MDhFMDIwMDRDMTQ4MjAwNDAzMDY2MDBGRjZECi06MTA0QTIwMDAzQzAyMDgwMDhDNDIwMEUwMjQwM0ZGODAwMjIyMTAyMTk3Ci06MTA0QTMwMDAwMDQzMTAyNEFGNDIwMDI0M0MwMjA4MDA4QzQyMDBFMEY2Ci06MTA0QTQwMDA5NzQ0MDA3QzkyMDUwMDgxMDIyMjEwMjEzMDQyMDA3RkIxCi06MTA0QTUwMDAwMzQyMTgyMTNDMDIwMDBBMDA2MjE4MjExNEEwMDAwQjM2Ci06MTA0QTYwMDAzMDg0RkZGRjI0MDIwMDA1NTRDMjAwMTQyNDgyMDVEQ0I4Ci06MTA0QTcwMDA5MDYyMDExMjI0NDIwMDAxQTA2MjAxMTIyNDAyMEM4MDAzCi06MTA0QTgwMDBBRjQyMDAyNDBBMDAxMjczMjQwMjAwMDVBMDYwMDExMjQ0Ci06MTA0QTkwMDAyNDAyMDAwNTE0QzIwMDA5MjQ4MjA1REM5MjAyMDA4MTcwCi06MTA0QUEwMDAyQzQyMDAwNzUwNDAwMDA1MjQ4MjBBMDA5MjAzMDA4MTM2Ci06MTA0QUIwMDAyNDAyMDAxNDAwNjIxMDA0MDA4MjEwMjEzMDQ0RkZGRjIxCi06MTA0QUMwMDBBNjA0MDAxNDBFMDAxMjFCMDIyMDIwMjE5NjAyMDAzQ0I2Ci06MTA0QUQwMDA4RTAzMDA0QzAyMjAyMDIxMzA0MkZGRkYwMDAyMTA0MEQ0Ci06MTA0QUUwMDAwMDYyMTgyMTBFMDAwMjUwQUUwMzAwNUM5MjAyMDA3REFECi06MTA0QUYwMDAwMjIwMjAyMTM0NDIwMDQwMEUwMDAyNTlBMjAyMDA3RDEzCi06MTA0QjAwMDA4RjQyMDFGODA0NDBGRkZFMjQwMjAwMDJBRjUxMDFDMEIxCi06MTA0QjEwMDBBMzQyMDFDNDNDMDIxMDAwQUY0MjAxRjg4RkJGMDAxODRECi06MTA0QjIwMDA4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAyMEYzCi06MTA0QjMwMDAwODAwMEFDQzA4MDAwQjE0MDgwMDBCOTgwODAwMEJFNENFCi06MDQ0QjQwMDAwODAwMEMyMDNECi06MEM0QjQ0MDAwQTAwMDAyODAwMDAwMDAwMDAwMDAwMDAzMwotOjEwNEI1MDAwMDAwMDAwMEQ2MzcwMzYyRTMwMkUzMTM1MDAwMDAwMDA0RAotOjEwNEI2MDAwMDYwMDBGMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQwotOjEwNEI3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNQotOjEwNEI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAwNQotOjEwNEI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNQotOjEwNEJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNQotOjEwNEJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFGNAotOjEwNEJDMDAwMDAwMDAwMkIwMDAwMDAwMDAwMDAwMDA0MDAwMzBENDA2NgotOjEwNEJEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENQotOjEwNEJFMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAzMDAwMDAwMDBCMgotOjEwNEJGMDAwMDAwMDAwMEQwMDAwMDAwRDNDMDIwODAwMjQ0MjU4ODQxMwotOjEwNEMwMDAwM0MwMzA4MDAyNDYzNUY1MEFDNDAwMDAwMDA0MzIwMkJBRAotOjEwNEMxMDAwMTQ4MEZGRkQyNDQyMDAwNDNDMUQwODAwMzdCRDdGRkNDQQotOjEwNEMyMDAwMDNBMEYwMjEzQzEwMDgwMDI2MTAwMEEwM0MxQzA4MDA0NgotOjEwNEMzMDAwMjc5QzU4ODQwRTAwMDFBQzAwMDAwMDAwMDAwMDAwMEQwRAotOjEwNEM0MDAwMjdCREZGRTgzQzA5NjAxOEFGQkYwMDEwOEQyQzUwMDA1NQotOjEwNEM1MDAwMjQwREZGN0YyNDA4MDAzMTAxOEQ1ODI0MzU2QTM4MEM1QgotOjEwNEM2MDAwMjQwNzBDMDAzQzFBODAwMEFEMkE1MDAwM0MwNDgwMEE0NgotOjEwNEM3MDAwQUY0ODAwMDgzQzFCODAwOEFGNDcwMDI0MEUwMDA5MTUxMAotOjEwNEM4MDAwQUY4NDAwMTAwRTAwMDhEODAwMDAwMDAwMEUwMDA4MjVCOAotOjEwNEM5MDAwMDAwMDAwMDAwRTAwMTI1MjAwMDAwMDAwM0MwNDYwMTZFQwotOjEwNENBMDAwOEM4NTAwMDAzQzA2RkZGRjNDMDI1MzUzMDBBNjE4MjRFRAotOjEwNENCMDAwMTA2MjAwNDczNDg2N0MwMDk0QzIwMUYyQTc4MDAwMkM2OQotOjEwNENDMDAwMTA0MDAwMDNBNzgwMDBDQzM4NTgxRTFFQTc5ODAwMkM2NwotOjEwNENEMDAwOTRDMjAxRjgxMDQwMDAwNDk3ODMwMENDMzg1OTFFMUU3RQotOjEwNENFMDAwQTc5OTAwQ0M5NzgzMDBDQzJDN0YwMDY3NTNFMDAwMDE4QwotOjEwNENGMDAwMjQwMzAwNjY5Nzg0MDAyQzJDODIwNDAxMTQ0MDAwMDJENwotOjEwNEQwMDAwMDA2MDI4MjEyNDA0MDQwMDNDMDc2MDAwOENFOTA0Mzg3QQotOjEwNEQxMDAwMjQwMzEwM0MzMTI4RkZGRjExMDMwMDFGMzBCOUZGRkZBRgotOjEwNEQyMDAwNTcyMDAwMTBBMzgwMDBDRTI0MDIwMDUwQTM4MjAwQ0VBMgotOjEwNEQzMDAwOTM5RjAwQ0U1M0UwMDAwRkE3ODUwMENDQTc4MDAwQ0M0NgotOjEwNEQ0MDAwOTc4NTAwQ0M4RkJGMDAxMEE3ODAwMDJDQTc4MDAwMzQ2RgotOjEwNEQ1MDAwQTc4MDAwRTYzQzAxMDgwMEFDMjUwMDgwMDNFMDAwMDhDNQotOjEwNEQ2MDAwMjdCRDAwMTg5MzlGMDBDRTU3RTBGRkY1QTc4MDAwQ0MyOQotOjEwNEQ3MDAwQTc4NTAwQ0M5Nzg1MDBDQzhGQkYwMDEwQTc4NDAwMkM5RQotOjEwNEQ4MDAwQTc4MDAwMzRBNzgwMDBFNjNDMDEwODAwQUMyNTAwODAyNQotOjEwNEQ5MDAwMDNFMDAwMDgyN0JEMDAxOEEzODAwMENFOENDQjAwM0NBOAotOjEwNERBMDAwMzE2QTAwMDExMTQwMDAwRTAwMDAwMDAwMzBBN0ZGRkYzMwotOjEwNERCMDAwMTBFMEZGREUyNDAyMDA1MDhDQ0MwMEM4MzE4NjAwMDFEOAotOjEwNERDMDAwMTRDMEZGREM5MzlGMDBDRTBBMDAwMDdBMjQwMjAwNTEzOQotOjEwNEREMDAwOEM4RjAwMDQzQzBFNjAwMDBBMDAwMDVEMDFFRTMwMjE2MwotOjEwNERFMDAwOENFRjA4MDgyNDBENTcwODAwMEY3NDAyMTFDRDAwMDQ0MQotOjEwNERGMDAwMzBCOEZGRkYyNDA1MDA2NjBBMDAwMDdCMjQwNDA0MDA4RAotOjEwNEUwMDAwMTcwMEZGQ0M5MzlGMDBDRTBBMDAwMDdBMjQwMjAwNTBDNgotOjEwNEUxMDAwOEY4NjAwMTAzMDg5RkZGRjAwMDkzOTQwOENDMzAwMTBENQotOjEwNEUyMDAwM0MwODAwNTAwMEU4MjAyNUFGNDMwMDM4OENDNTAwMTQzMgotOjEwNEUzMDAwMjc0MjA0MDBBRjgyMDAxQ0FGNDUwMDNDQUY0NDAwMzA2NQotOjEwNEU0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MgotOjEwNEU1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MgotOjEwNEU2MDAwOEY0QjAwMDAzMTZBMDAyMDExNDBGRkZEMDAwMDAwMDA2MAotOjEwNEU3MDAwMDNFMDAwMDgwMDAwMDAwMDhGODQwMDEwOTQ4QTAwMUFFQwotOjEwNEU4MDAwOEM4NzAwMjQzMTQ5RkZGRjAwMDk0MEMwMDBFODMwMjEzMQotOjEwNEU5MDAwQUY0NjAwM0M4Qzg1MDAyNDhGNDMwMDNDMDBBMzEwMjNDOAotOjEwNEVBMDAwMTg0MDAwMjkwMDAwMDAwMDhDOEIwMDIwMjU2MjAwMDFDMgotOjEwNEVCMDAwM0MwRDAwNTAzNUFDMDAwOEFGNDIwMDM4QUY0QzAwMzAxQwotOjEwNEVDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMgotOjEwNEVEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMgotOjEwNEVFMDAwOEY0RjAwMDAzMUVFMDAyMDExQzBGRkZEMDAwMDAwMDBEOAotOjEwNEVGMDAwOEY0QTA0MDAzQzA4MDAyMEFDOEEwMDEwOEY0OTA0MDQ0QgotOjEwNEYwMDAwQUM4OTAwMTRBRjQ4MDAzMDAwMDAwMDAwOTQ4NjAwMThGRgotOjEwNEYxMDAwOTQ4NzAwMUMwMEM3MTgyMUE0ODMwMDE4OTQ4NTAwMUFFOAotOjEwNEYyMDAwMjRBMjAwMDFBNDgyMDAxQTk0OTgwMDFBOTQ5OTAwMUVFOQotOjEwNEYzMDAwMTMzODAwMDMwMDAwMDAwMDAzRTAwMDA4MDAwMDAwMDAzOAotOjEwNEY0MDAwMDNFMDAwMDhBNDgwMDAxQThDODIwMDIwMEEwMDAwREMyNAotOjEwNEY1MDAwM0MwRDAwNTAwQTAwMDBDRDAwMDAwMDAwM0MwMzA4MDA5QQotOjEwNEY2MDAwOEM2MzAwMjA4RjgyMDAxODI3QkRGRkU4MTA2MjAwMDhDNAotOjEwNEY3MDAwQUZCRjAwMTAwRTAwMDEwNEFGODMwMDE4M0MwMzA4MDAwRgotOjEwNEY4MDAwOEM2MzAwMjAyNDA0MDAwMTEwNjQwMDA0OEY4OTAwMTA0OQotOjEwNEY5MDAwOEZCRjAwMTAwM0UwMDAwODI3QkQwMDE4OEZCRjAwMTA2RQotOjEwNEZBMDAwM0MwNzYwMTJBNTIwMDAwQTk1MjgwMDBBMzRFNTAwMTA4RAotOjEwNEZCMDAwMjdCRDAwMTgzMTA2RkZGRjAzRTAwMDA4QUNBNjAwOTBGMwotOjEwNEZDMDAwM0MwMjA4MDA4QzQyMDAyMDI3QkRGRkM4QUZCRjAwMzQ2MAotOjEwNEZEMDAwQUZCRTAwMzBBRkI3MDAyQ0FGQjYwMDI4QUZCNTAwMjQ4RAotOjEwNEZFMDAwQUZCNDAwMjBBRkIzMDAxQ0FGQjIwMDE4QUZCMTAwMTREMwotOjEwNEZGMDAwMTA0MDAwNTBBRkIwMDAxMDhGODQwMDEwOTQ4NjAwMDY1RgotOjEwNTAwMDAwOTQ4MzAwMEEwMEMzMjgyMzMwQjZGRkZGMTJDMDAwNEE3MQotOjEwNTAxMDAwOEZCRjAwMzQ5NDg5MDAxODk0OEEwMDBBMDEyQTQwMjMyMwotOjEwNTAyMDAwMzEwMkZGRkYwMkMyMzgyQjE0RTAwMDAyMDJDMDIwMjEyRgotOjEwNTAzMDAwMDA0MDIwMjEyQzhDMDAwNTE1ODAwMDAyMDA4MEEwMjE1QQotOjEwNTA0MDAwMjQxNDAwMDQwRTAwMDBCMzAyODAyMDIxOEY4NzAwMTA3QQotOjEwNTA1MDAwMDI4MDk4MjFBRjgwMDAxNDk0RUQwMDBBMDI4MDg4MjExQwotOjEwNTA2MDAwMTI4MDAwNEUzMUIyRkZGRjNDMTc3MDAwM0MxNTQwMDAyQgotOjEwNTA3MDAwM0MxRTYwMDA4RjhGMDAxQzhERUUwMDAwMDFENzE4MjRBRAotOjEwNTA4MDAwNTA3NTAwNTAwMjIwMjAyMTAyQTM4MDJCMTYwMDAwMzUwRAotOjEwNTA5MDAwM0MxODIwMDA1MDc4MDA0NzAyMjAyMDIxMjQxMDAwMDFGNQotOjEwNTBBMDAwOEY4MzAwMTQxNDYwMDAzOTAyOTE1ODIzMDIzMEY4MjNEMgotOjEwNTBCMDAwMDI1MEM4MjEzM0YxRkZGRjE2MjBGRkVFMzMzMkZGRkYwRAotOjEwNTBDMDAwOEY4NzAwMTAzQzExMDAyMEFGNTEwMDMwMDAwMDAwMDAxRAotOjEwNTBEMDAwOTRFNjAwMEEzQzFFNjAxMjM3RDUwMDEwMDI2NjI4MjFCMwotOjEwNTBFMDAwQTRFNTAwMEE5NEUyMDAwQTk0RjIwMDBBOTRGNDAwMTg3RAotOjEwNTBGMDAwMzA1N0ZGRkYxMjkyMDAzQkFFQjcwMDkwOENFRDAwMTRDQQotOjEwNTEwMDAwOENFNDAwMTAwMDEzNzE0MDAxQUU0MDIxMDAwRTVGQzMxQgotOjEwNTExMDAwMDEwRTUwMkIwMDhCNDgyMTAxMkExODIxQUNFODAwMTQwNQotOjEwNTEyMDAwQUNFMzAwMTAwMkQzMzgyMzMwRjZGRkZGMTZDMEZGQjlGRQotOjEwNTEzMDAwOEY4NDAwMTA4RkJGMDAzNDhGQkUwMDMwOEZCNzAwMkNEQgotOjEwNTE0MDAwOEZCNjAwMjg4RkI1MDAyNDhGQjQwMDIwOEZCMzAwMUNDOQotOjEwNTE1MDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDg2OAotOjEwNTE2MDAwMjdCRDAwMzgxMDdFMDAxQjAwMDAwMDAwMTQ3N0ZGQ0MyNAotOjEwNTE3MDAwMjQxMDAwMDEwRTAwMTU5ODAwMDAwMDAwOEY4MzAwMTQxOQotOjEwNTE4MDAwMTA2MEZGQ0IwMjMwRjgyMzAyOTE1ODIzOEY4NzAwMTA2NAotOjEwNTE5MDAwMDE3MDIwMjEwQTAwMDE5NzMwOTNGRkZGOEY4MzAwMTRENAotOjEwNTFBMDAwMTQ2MEZGQ0IzQzExMDAyMEFGNTEwMDMwMEEwMDAxNjNCNgotOjEwNTFCMDAwMDAwMDAwMDAwRTAwMDc3RDAyNDAyODIxMEEwMDAxNTc3MAotOjEwNTFDMDAwMDA0MDgwMjEwRTAwMDMzQTAyNDAyODIxMEEwMDAxNTdDNgotOjEwNTFEMDAwMDA0MDgwMjEwRTAwMTQ2MDAyMjAyMDIxMEEwMDAxNTdBNwotOjEwNTFFMDAwMDA0MDgwMjEwRTAwMDBDRDAwMDAwMDAwMEEwMDAxNzk3RgotOjEwNTFGMDAwMDJEMzM4MjMyN0JERkZFOEFGQjAwMDEwQUZCRjAwMTRDMwotOjEwNTIwMDAwMEUwMDAwM0YwMDAwMDAwMDNDMDI4MDAwMzQ1MDAwNzA5RgotOjEwNTIxMDAwMEEwMDAxQkE4RTA2MDAwMDhGNEYwMDAwMzlFRTAwMDEyRgotOjEwNTIyMDAwMzFDMjAwMDExMDQwMDAyNDhGODYwMEE4OEUwNzAwMDBDNAotOjEwNTIzMDAwM0MwQzA4MDA4RDhDMDAzQzNDMDkwODAwOEQyOTAwMzg4RQotOjEwNTI0MDAwMDBFNjY4MjMwMThEMjgyMTAwMDA1MDIxMDBBRDMwMkI5RAotOjEwNTI1MDAwMDEyQTQwMjEwMTA2MjAyMTNDMDEwODAwQUMyNTAwM0MyOAotOjEwNTI2MDAwQUY4NzAwQTgzQzAxMDgwMEFDMjQwMDM4MEUwMDAxMDZGRQotOjEwNTI3MDAwMDAwMDAwMDAzQzAzMDgwMDhDNjMwMDcwMTA2MEZGRTYzMwotOjEwNTI4MDAwMDA2MDIwMjEzQzA1MDgwMDhDQTUwMDY4M0MwNjA4MDA1MQotOjEwNTI5MDAwOENDNjAwNkMwRTAwMTUyNzAwMDAwMDAwM0MwMTA4MDBDMQotOjEwNTJBMDAwQUMyMDAwNzA4RjRGMDAwMDM5RUUwMDAxMzFDMjAwMDFDOAotOjEwNTJCMDAwMTQ0MEZGREU4Rjg2MDBBODhFMEEwMDAwOEY4QjAwQThBNgotOjEwNTJDMDAwM0MwNTA4MDA4Q0E1MDAzQzNDMDQwODAwOEM4NDAwMzg5OAotOjEwNTJEMDAwMDE0QjQ4MjMwMEE5MzgyMTAwODIxODIxMDBFOTQwMkIwNgotOjEwNTJFMDAwMDA2ODEwMjEzQzAxMDgwMEFDMjcwMDNDM0MwMTA4MDA4QwotOjEwNTJGMDAwQUMyMjAwMzg4RjVGMDEwMDI0MTlGRjAwMjQxODBDMDAzNQotOjEwNTMwMDAwMDNGOTIwMjQxMDk4MDAxMkFGODQwMDAwQUY0NDAwMjA1RAotOjEwNTMxMDAwOTM2RDAwMDAyNDBDMDAyMDMxQTYwMEZGMTBDQzAwMTI3OQotOjEwNTMyMDAwMjQwRTAwNTAxMENFMDAwNDNDMTk0MDAwQUY1OTAxMzg0MwotOjEwNTMzMDAwMEEwMDAxQjMwMDAwMDAwMDBFMDAxMUM4MDAwMDAwMDBDOAotOjEwNTM0MDAwM0MxOTQwMDBBRjU5MDEzODBBMDAwMUIzMDAwMDAwMDBDOQotOjEwNTM1MDAwMEUwMDAxMUYwMDAwMDAwMDNDMTk0MDAwQUY1OTAxMzg0OQotOjEwNTM2MDAwMEEwMDAxQjMwMDAwMDAwMDhGNTgwMTAwMDA4MDI4MjFDRQotOjEwNTM3MDAwMzMwRjAwRkYwMUUwMjAyMTBFMDAwMkYxQUY4RjAwMDQ4NwotOjEwNTM4MDAwM0MxOTQwMDBBRjU5MDEzODBBMDAwMUIzMDAwMDAwMDA4OQotOjEwNTM5MDAwMDBBNDEwMkIyNDAzMDAwMTEwNDAwMDA5MDAwMDMwMjE1QwotOjEwNTNBMDAwMDAwNTI4NDAwMEE0MTAyQjA0QTAwMDAzMDAwMzE4NDBBRgotOjEwNTNCMDAwNTQ0MEZGRkMwMDA1Mjg0MDUwNjAwMDBBMDAwNDE4MkJGMAotOjEwNTNDMDAwMDA4NTM4MkI1NEUwMDAwNDAwMDMxODQyMDBDMzMwMjU0OAotOjEwNTNEMDAwMDA4NTIwMjMwMDAzMTg0MjE0NjBGRkY5MDAwNTI4NDJDRAotOjEwNTNFMDAwMDAwNDE4MkIwM0UwMDAwODAwQzMxMDIxOEY0MjAxQjgwRAotOjEwNTNGMDAwMDQ0MEZGRkUwMDAwMDAwMEFGNDQwMTgwM0MwMzEwMDBBOQotOjEwNTQwMDAwMjQwNDAwNDBBRjQ1MDE4NEEzNDQwMTg4QTM0NjAxODlEOAotOjEwNTQxMDAwQTc0NzAxOEEwM0UwMDAwOEFGNDMwMUI4MzA4NEZGRkZDQgotOjEwNTQyMDAwMDA4MDM4MjEzMEE1RkZGRjAwMDAyMDIxMEEwMDAyMkE1OQotOjEwNTQzMDAwMjQwNjAwODAzMDg3RkZGRjhDQTQwMDAwMjQwNjAwMzg3QgotOjEwNTQ0MDAwMEEwMDAyMkEwMDAwMjgyMThGODMwMDM4OEY4NjAwMzA0RQotOjEwNTQ1MDAwMTA2NjAwMEIwMDgwNDAyMTNDMDcwODAwMjRFNzU5Rjg0MwotOjEwNTQ2MDAwMDAwMzI4QzAwMEE3MTAyMThDNDQwMDAwMjQ2MzAwMDEyMQotOjEwNTQ3MDAwMTA4ODAwMDUzMDYzMDAwRjU0NjZGRkZBMDAwMzI4QzA0RgotOjEwNTQ4MDAwMDNFMDAwMDgwMDAwMTAyMTNDMDcwODAwMjRFNzU5RkM1NQotOjEwNTQ5MDAwMDBBNzMwMjEwM0UwMDAwODhDQzIwMDAwM0MwMzkwMDAwQwotOjEwNTRBMDAwMzQ2MjAwMDEwMDgyMjAyNUFGNDQwMDIwOEY0NTAwMjA5NwotOjEwNTRCMDAwMDRBMEZGRkUwMDAwMDAwMDAzRTAwMDA4MDAwMDAwMDA2MAotOjEwNTRDMDAwM0MwMzgwMDAzNDYyMDAwMTAwODIyMDI1MDNFMDAwMDhENAotOjEwNTREMDAwQUY0NDAwMjAyN0JERkZFMEFGQjEwMDE0MzA5MUZGRkZDMwotOjEwNTRFMDAwQUZCMDAwMTBBRkJGMDAxODEyMjAwMDEzMDBBMDgwMjE0MQotOjEwNTRGMDAwOENBMjAwMDAyNDA0MDAwMjI0MDYwMTQwMTA0MDAwMEY4QQotOjEwNTUwMDAwMDA0MDI4MjEwRTAwMEM1QzAwMDAwMDAwMDAwMDEwMjE2QgotOjEwNTUxMDAwQUUwMDAwMDAwMjIwMzgyMThGQkYwMDE4OEZCMTAwMTRBOAotOjEwNTUyMDAwOEZCMDAwMTAwMDQwMjAyMTAwMDAyODIxMDAwMDMwMjExMQotOjEwNTUzMDAwMEEwMDAyMkEyN0JEMDAyMDhDQTIwMDAwMDIyMDM4MjE4OAotOjEwNTU0MDAwOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwMDA0MDIwMjFEMQotOjEwNTU1MDAwMDAwMDI4MjEwMDAwMzAyMTBBMDAwMjJBMjdCRDAwMjA3NwotOjEwNTU2MDAwMDBBMDEwMjEzMDg3RkZGRjhDQTUwMDA0OEM0NDAwMDBCMAotOjEwNTU3MDAwMEEwMDAyMkEyNDA2MDAwNjI3QkRGRkUwQUZCMDAwMTA5MwotOjEwNTU4MDAwQUZCRjAwMThBRkIxMDAxNDkzNjMwMDNFMDA4MDgwMjFDQwotOjEwNTU5MDAwMDA4MDI4MjEzMDYyMDA0MDAwMDAyMDIxMTA0MDAwMEZEMAotOjEwNTVBMDAwOEUxMTAwMDAwRTAwMDg1MTAyMjAyMDIxOTM2NzAwMDA5OAotOjEwNTVCMDAwMjQwNDAwNTAzMEU1MDBGRjUwQTQwMDEyOEUwRjAwMDBCQwotOjEwNTVDMDAwMDIyMDIwMjE4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTA2RgotOjEwNTVEMDAwQTc2MjAxM0MwQTAwMDkxMTI3QkQwMDIwMEUwMDAyODdDNgotOjEwNTVFMDAwMDAwMDAwMDAwRTAwMDg1MTAyMjAyMDIxOTM2NzAwMDBGNwotOjEwNTVGMDAwMjQwNDAwNTAzMEU1MDBGRjE0QTRGRkYyMDIyMDIwMjExMwotOjEwNTYwMDAwOEUwRjAwMDAzQzEwMDgwMDhFMTAwMDUwM0MwRDAwMEM2NgotOjEwNTYxMDAwMjQwQkZGODAwMUYwNTAyMTMxNEUwMDdGMDFEQTYwMjEyMAotOjEwNTYyMDAwMDE4RDQwMjEwMTRCNDgyNEFGNDkwMDI4MDIyMDIwMjE1MAotOjEwNTYzMDAwOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwQTUwMjAwRDZFNAotOjEwNTY0MDAwMjdCRDAwMjAwQTAwMDkxMUFGODgwMEQwMjdCREZGRTA2OAotOjEwNTY1MDAwQUZCRjAwMThBRkIxMDAxNEFGQjAwMDEwOTM2NjAwMDFFNwotOjEwNTY2MDAwMDA4MDgwMjEwRTAwMDI1NjMwRDEwMDA0OTM2NDAwMDVCMgotOjEwNTY3MDAwMDAxMDI5QzJBNzY1MDAwMDM0ODMwMDQwQTM2MzAwMDUyMQotOjEwNTY4MDAwMEUwMDAyNUYwMjAwMjAyMTBFMDAwOTEzMDIwMDIwMjFGQgotOjEwNTY5MDAwMjQwMjAwMDFBRjYyMDAwQzAyMDAyODIxQTc2MjAwMTA2MgotOjEwNTZBMDAwMjQwNDAwMDJBNzYyMDAxMjI0MDYwMTQwQTc2MjAwMTQyRAotOjEwNTZCMDAwMEUwMDBDNUNBNzYyMDAxNjE2MjAwMDBGOEZCRjAwMThBQQotOjEwNTZDMDAwOTc4QzAwMzQzQzBCMDgwMDhENkIwMDc4MjU4OEZGRkYxOQotOjEwNTZEMDAwMzEwOUZGRkYyNTZBMDAwMTAxMkEzODJCMTBFMDAwMDY3RQotOjEwNTZFMDAwQTc4ODAwMzQzQzBGNjAwNjI0MEUwMDE2MzVFRDAwMTAyQwotOjEwNTZGMDAwQURBRTAwNTA4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTBGNgotOjEwNTcwMDAwMDNFMDAwMDgyN0JEMDAyMDI3QkRGRkUwQUZCMTAwMTQ3MwotOjEwNTcxMDAwQUZCRjAwMThBRkIwMDAxMDAwQTA4ODIxMTA4MDAwMEFCMQotOjEwNTcyMDAwM0MwMzYwMDAyNDAyMDA4MDEwODIwMDEyMDAwMDAwMDA5MAotOjEwNTczMDAwMDAwMDAwMEQ4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTA1MwotOjEwNTc0MDAwMDNFMDAwMDgyN0JEMDAyMDhDNjgyQkY4MDUwMEZGRkU1MQotOjEwNTc1MDAwMDAwMDAwMDBBQzcxMkJDMDhGQkYwMDE4OEZCMTAwMTQ4NwotOjEwNTc2MDAwOEZCMDAwMTAzQzA5MTAwMDI3QkQwMDIwMDNFMDAwMDhBNgotOjEwNTc3MDAwQUM2OTJCRjgwRTAwMDI1NjAwQTAyMDIxOTM2NTAwMDVBRAotOjEwNTc4MDAwMDIyMDIwMjEwRTAwMDI1RjMwQjAwMEZGMjQwMzAwM0UwMwotOjEwNTc5MDAwMTYwM0ZGRTcwMDAwMDAwMDhGNDQwMTc4MDQ4MEZGRkUzRAotOjEwNTdBMDAwMjQwNzAwMDczQzA2MTAwMEFGNTEwMTQwMDIyMDIwMjFEMQotOjEwNTdCMDAwQTM0NzAxNDQ4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTBCMQotOjEwNTdDMDAwQUY0NjAxNzgwQTAwMDJDMjI3QkQwMDIwMjdCREZGRThDRQotOjEwNTdEMDAwQUZCRjAwMTRBRkIwMDAxMDhGNTAwMDIwMDAwMDAwMDBEOQotOjEwNTdFMDAwMEUwMDA5MTNBRjQ0MDAyMEFGNTAwMDIwOEZCRjAwMTRGQgotOjEwNTdGMDAwOEZCMDAwMTAwM0UwMDAwODI3QkQwMDE4MzA4NEZGRkZDMQotOjEwNTgwMDAwMDA4MDM4MjEyNDA2MDAzNTAwQTAyMDIxMEEwMDAyMkE0OQotOjEwNTgxMDAwMDAwMDI4MjEzMDg0RkZGRjAwODAzODIxMjQwNjAwMzY1NAotOjEwNTgyMDAwMDBBMDIwMjEwQTAwMDIyQTAwMDAyODIxMjdCREZGRDA2NQotOjEwNTgzMDAwQUZCMzAwMUMzMDkzRkZGRkFGQjUwMDI0QUZCMjAwMTgyOAotOjEwNTg0MDAwQUZCRjAwMjhBRkI0MDAyMEFGQjEwMDE0QUZCMDAwMTA1QwotOjEwNTg1MDAwMzBCNUZGRkYxMjYwMDAyNzAwMDA5MDIxOEY5MDAwMUNFMAotOjEwNTg2MDAwOEUwMzAwMDAzQzA2ODAwMDI0MDIwMDQwMDAwMzNFMDIzQwotOjEwNTg3MDAwMDAwMzJDMDIzMEU0MDA3RjAwNjY4ODI0MTQ4MjAwMUQ5RgotOjEwNTg4MDAwMzBBNTAwRkY4RjgzMDAyODJDNjgwMDBBNTEwMDAwMTAwQgotOjEwNTg5MDAwOEY5MTAwMTQwMDAzNTg4MDNDMEMwODAwMjU4QzU2ODgxQQotOjEwNThBMDAwMDE2QzUwMjE4RDQ5MDAwMDAxMjAwMDA4MDAwMDAwMDAxQgotOjEwNThCMDAwMDJCMjEwMjEzMDQ1RkZGRjBFMDAwMjM2MjQwNDAwODQ5RQotOjEwNThDMDAwMTYyMDAwMDI4RjkwMDAxQ0FGODAwMDI4OEY5MTAwMTREQQotOjEwNThEMDAwMjYwQzAwMjAyNjQzMDAwMTAxODA4MDIxMzA3MkZGRkY0QQotOjEwNThFMDAwMTYyMDAwMDRBRjhDMDAxQzAyNTM1MDJCMTU0MEZGREMyNwotOjEwNThGMDAwMDAwMDAwMDAwMjQwMTAyMThGQkYwMDI4OEZCNTAwMjQ1NwotOjEwNTkwMDAwOEZCNDAwMjA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQyOQotOjEwNTkxMDAwOEZCMDAwMTAwM0UwMDAwODI3QkQwMDMwMjQwRTAwMzREMwotOjEwNTkyMDAwMTRBRTAwRjkwMDAwMDAwMDkyMDMwMDBFMjQxRjE2ODA0MAotOjEwNTkzMDAwM0MwNzAwMENBMzYzMDAyMTkyMDIwMDBEMDM0N0M4MjExRAotOjEwNTk0MDAwM0MwNjYwMDBBMzYyMDAyMDk2MTEwMDEyM0MwQTdGRkYxMwotOjEwNTk1MDAwMzU0Q0ZGRkZBNzcxMDAzQzk2MEIwMDEwMjQwMzAwMDU5NwotOjEwNTk2MDAwMzE2OEZGRkZBRjY4MDA4NDhFMDUwMDFDQUY1RjAwMjgyMAotOjEwNTk3MDAwOEYzODAwMDA4Q0M0NDQ0ODAzMDU3ODI2MDA4RjMwMjFGRQotOjEwNTk4MDAwQUY2NjAwNEM4RjY5MDA0QzI0Q0UwMDAxM0MwNTdGMDBCRgotOjEwNTk5MDAwQUY2OTAwNTA4Rjc0MDA1MEFGNzQwMDU0QUY2NjAwNzA1MAotOjEwNTlBMDAwQUY2RTAwNTg4RjZEMDA1ODI0MTQwMDUwQUY2RDAwNUMyRQotOjEwNTlCMDAwQTM2MDAwMjNBRjZDMDA2NEEzNjMwMDM3OEUwMjAwMTQ2MQotOjEwNTlDMDAwQUY2MjAwNDg4RjcxMDA0OEFGNzEwMDI0OEUwQjAwMTg0MQotOjEwNTlEMDAwQUY2QjAwNkM5MjA4MDAwQ0EzNjgwMDM2OTM3RjAwM0UwQQotOjEwNTlFMDAwMzdGOTAwMjBBMzc5MDAzRThGNzgwMDc0MDMwNTgwMjRFNgotOjEwNTlGMDAwMzYwRjQwMDBBRjZGMDA3NDkzNjQwMDAwMzA4OTAwRkZFMQotOjEwNUEwMDAwNTEzNDAyNDUyNDA0RkY4MDNDMDQwODAwMjQ4NDVBNzg2MQotOjEwNUExMDAwMEUwMDAyOEQwMDAwMDAwMDNDMTAwODAwOEUxMDVBNzgyNQotOjEwNUEyMDAwMEUwMDAyNTYwMjAwMjAyMTI0MDYwMDA0MjQwNzAwMDE3MwotOjEwNUEzMDAwQTM2NjAwN0QwMjAwMjAyMTBFMDAwMjVGQTM2NzAwMDUxRgotOjEwNUE0MDAwOEY1RjAxNzgwN0UwRkZGRTI0MEIwMDAyQUY1MDAxNDA5QQotOjEwNUE1MDAwQTM0QjAxNDQ4RjkwMDAxQzNDMDgxMDAwQUY0ODAxNzgxNAotOjEwNUE2MDAwMEEwMDAzNjJBRjgwMDAyODJDQUQwMDM3NTFBMEZGOThEOAotOjEwNUE3MDAwOEY5MTAwMTQwMDA1QTA4MDNDMTgwODAwMjcxODU2QjAyQwotOjEwNUE4MDAwMDI5ODc4MjE4REVFMDAwMDAxQzAwMDA4MDAwMDAwMDA5RgotOjEwNUE5MDAwMjQxODAwMDYxNEI4MDAxMTAwMDAwMDAwM0MwODA4MDA5QgotOjEwNUFBMDAwOEQwODVBNzgyNDA0MDAwNUFGNDgwMDIwOEUxRjAwMTg4NgotOjEwNUFCMDAwQUY3RjAwMTg4Rjc5MDA0Q0FGNzkwMDFDOEY2NTAwNTBDNAotOjEwNUFDMDAwMTIyMDAwQzBBRjY1MDA3MDBBMDAwMzYyQUY4NDAwMjg5NgotOjEwNUFEMDAwMjQwNjAwMDcxMEE2MDA4MzI0MDMwMDA2M0MwNTA4MDBFNgotOjEwNUFFMDAwMjRBNTVBNzgwRTAwMDI2NDI0MDQwMDgxOEY5MDAwMUNDMwotOjEwNUFGMDAwMDAxMTEwMkIwQTAwMDM2MkFGODIwMDI4MjQwNzAwMDQ2MwotOjEwNUIwMDAwMTRBN0ZGRjYyNDA1MDA1MDNDMTgwODAwOEYxODVBNzg5NwotOjEwNUIxMDAwQUY1ODAwMjA4RTBGMDAwOEFGNkYwMDQwOEUwOTAwMDhCQwotOjEwNUIyMDAwQUY2OTAwNDQ4RTE0MDAwQ0FGNzQwMDQ4OEUwRTAwMTA1NAotOjEwNUIzMDAwQUY2RTAwNEM4RTBEMDAxMEFGNkQwMDg0OEUwQTAwMTQwNQotOjEwNUI0MDAwQUY2QTAwNTA4RTBDMDAxOEFGNkMwMDU0OEUwNDAwMUMxRAotOjEwNUI1MDAwQUY2NDAwNTg5MzYzMDAwMDMwNkIwMEZGMTE2NTAxRDhGQgotOjEwNUI2MDAwMDAwMDAwMDA4Rjc0MDA0ODhGNjkwMDQwMDI4OTcwMjM5NAotOjEwNUI3MDAwMDVDMDAwMDQyNDA0MDA4QzE2MjBGRkRFMjQwMjAwMDM2QwotOjEwNUI4MDAwMjQwNDAwODIzQzA1MDgwMDI0QTU1QTc4MEUwMDAyODdGMAotOjEwNUI5MDAwMDAwMDAwMDA4RjkwMDAxQzAwMDAxMDIxMEEwMDAzNjIyQQotOjEwNUJBMDAwQUY4MjAwMjgyNDBGMDAwNTE0QUZGRkNDMjQwNTIwMDA4RAotOjEwNUJCMDAwM0MwNzA4MDA4Q0U3NUE3OEFGNDcwMDIwOEUwNjAwMDRBNwotOjEwNUJDMDAwQUY2NjAwNUM5MjA4MDAwODI0MTAwMDA4QTM2ODAwMjE1QQotOjEwNUJEMDAwOEY5RjAwMUM5M0Y5MDAwOUEzNzkwMDIwOEY4NjAwMUM3OQotOjEwNUJFMDAwOTBEODAwMEEzMzA0MDBGRjEwOTAwMDExMDAwMDAwMDA1QwotOjEwNUJGMDAwMjg4NTAwMDkxNEEwMDA2OTI0MDIwMDAyMjQwQTAwMjA1QwotOjEwNUMwMDAwMTA4QTAwMEIzNDA1ODAwMDI4OEQwMDIxMTVBMDAwMDhBMwotOjEwNUMxMDAwMjQwNTQwMDAyNDBFMDA0MDEwOEUwMDA1M0MwNTAwMDFDNAotOjEwNUMyMDAwMjQxNDAwODAxMDk0MDAwMjNDMDUwMDAyMjQwNTQwMDA2QQotOjEwNUMzMDAwOEY3ODAwNzQzQzE5RkYwMDAzMTk4MDI0MDIwNTc4MjUzMQotOjEwNUM0MDAwQUY2RjAwNzQ5MEM0MDAwQkEzNjQwMDgxOEY4NDAwMUNBQwotOjEwNUM1MDAwOTQ4OTAwMEMxMTIwMDE5MjAwMDAwMDAwOTQ5MDAwMEMyNwotOjEwNUM2MDAwMjQwNkZGQkYyNDA1MDAwNEE3NzAwMDNDOTA4RjAwMEU5RgotOjEwNUM3MDAwQTM2RjAwM0U4Rjg0MDAxQzkwODkwMDBGQTM2OTAwM0YzMgotOjEwNUM4MDAwOEY4QjAwMUM4RDZFMDAxMDhGNTQwMDc0MDFENDY4MjMxQwotOjEwNUM5MDAwQUY2RDAwNjA4RDZBMDAxNEFGNkEwMDY0OTU2QzAwMThFNwotOjEwNUNBMDAwQTc2QzAwNjg5NTYzMDAxQUE3NjMwMDZBOEQ2MjAwMUNFOAotOjEwNUNCMDAwQUY2MjAwNkM5MTY3MDAwRUEzNjcwMDNFOTM2ODAwM0VFMAotOjEwNUNDMDAwMDEwNkY4MjQxMjIwMDE0QkEzN0YwMDNFOEY5MDAwMUM5OAotOjEwNUNEMDAwMEEwMDAzNjJBRjg1MDAyODI0MDcwMDIyMTRBN0ZGN0Y3MwotOjEwNUNFMDAwMjQwMzAwMDczQzBCMDgwMDhENkI1QTc4MTIyMDAwMEMyRgotOjEwNUNGMDAwQUY0QjAwMjAwQTAwMDM2MkFGODMwMDI4MjQwQzAwMzM1RQotOjEwNUQwMDAwMTBBQzAwMTQyNDBBMDAyODNDMDUwODAwMjRBNTVBNzg4OQotOjEwNUQxMDAwMEUwMDAyM0MyNDA0MDA4MTBBMDAwM0VCOEY5MDAwMUM1QgotOjEwNUQyMDAwM0MwNDA4MDAyNDg0NUE3ODBFMDAwMjhEMDAwMDAwMDAxNAotOjEwNUQzMDAwOTM2MzAwMDAyNDExMDA1MDMwNjIwMEZGMTA1MTAxMzVDMAotOjEwNUQ0MDAwMDAwMDAwMDA4RjkwMDAxQzAwMDAxODIxMEEwMDAzNjI3MAotOjEwNUQ1MDAwQUY4MzAwMjgzQzBEMDgwMDhEQUQ1QTc4MjQwNDAwODFFMwotOjEwNUQ2MDAwQUY0RDAwMjAzQzA1MDgwMDI0QTU1QTc4MEUwMDAyM0NFNwotOjEwNUQ3MDAwQTM2QTAwMzQ4RjkwMDAxQzI0MDIwMDA5MEEwMDAzNjIwOQotOjEwNUQ4MDAwQUY4MjAwMjgwMkIyODgyMTMyMjVGRkZGMEUwMDAyMzZDMgotOjEwNUQ5MDAwMjQwNDAwODQwQTAwMDM2MjhGOTAwMDFDMTA4MkZGQTQ3OAotOjEwNURBMDAwMjQwNTA0MDAyODhCMDAwMzExNjAwMTcwMjQwQzAwMDRGQQotOjEwNURCMDAwMjQwMzAwMDE1NDgzRkY5RTI0MDU0MDAwMEEwMDA0M0I5NQotOjEwNURDMDAwMjQwNTAxMDAzQzA0MDgwMDI0ODQ1QTc4OEY2MjAwNENBQQotOjEwNUREMDAwMEUwMDAyOEQ4RjYzMDA1MDhGOTAwMDFDMDAwMDIwMjE2OAotOjEwNURFMDAwMEEwMDAzNjJBRjg0MDAyODhFMTAwMDA0MjQwNDAwOEE5NQotOjEwNURGMDAwQUY1MDAwMjA5Mzc5MDAwNTMzMzgwMDAyMTcwMDAxNUY4RgotOjEwNUUwMDAwMDIwMDI4MjE5MzY4MDAyMzAyMDAyODIxMzExRjAwMjA2RQotOjEwNUUxMDAwMTdFMDAxNUEyNDA0MDA4RDkzNjcwMDNGMjQwNjAwMTIwNgotOjEwNUUyMDAwMzBFMjAwRkYxMDQ2MDE1NTI0MDQwMDgxMEUwMDAyNTZBNgotOjEwNUUzMDAwMDIwMDIwMjE5MzYzMDAyMzI0MDUwMDA0MDIwMDIwMjE5NgotOjEwNUU0MDAwMzQ2QjAwNDJBMzZCMDAyMzBFMDAwMjVGQTM2NTAwN0Q0QwotOjEwNUU1MDAwOEY0NDAxNzgwNDgwRkZGRTI0MEEwMDAyQUY1MDAxNDAwNQotOjEwNUU2MDAwQTM0QTAxNDQ4RjkwMDAxQzNDMEMxMDAwQUY0QzAxNzhGOQotOjEwNUU3MDAwMEEwMDAzRUMwMDExMTAyQjhFMTAwMDA0MjQwNDAwOEE4OQotOjEwNUU4MDAwQUY1MDAwMjA5MzZFMDAwNTMxQ0QwMDAyMTVBMDAwMTYyMgotOjEwNUU5MDAwMDIwMDI4MjE5MzZGMDAzRjI0MTQwMDA0MDIwMDI4MjFFRgotOjEwNUVBMDAwMzFFOTAwRkYxMTM0MDAxMDI0MDQwMDgxMEUwMDAyNTY3NQotOjEwNUVCMDAwMDIwMDIwMjE5MzYyMDAyMzI0MDgwMDEyMjQxRkZGRkUwOQotOjEwNUVDMDAwMzQ0NjAwMjBBMzY2MDAyM0EzNjgwMDNGOTM3OTAwMDVCMQotOjEwNUVEMDAwMDIwMDIwMjEwMzNGQzAyNDBFMDAwMjVGQTM3ODAwMDVDQQotOjEwNUVFMDAwMDIwMDI4MjEwMDAwMjAyMTBFMDAwMzM0MDAwMDAwMDBFMQotOjEwNUVGMDAwMEEwMDAzRUI4RjkwMDAxQzhFMTAwMDA0M0MwMzAwMDg4NgotOjEwNUYwMDAwMDM0M0EwMjFBRjUwMDAyMDkyOEIwMDAwMjQwNTAwNTBENQotOjEwNUYxMDAwMzE2NDAwRkYxMDg1MDE2MTI0MDcwMDg4MDIwMDIwMjEwMAotOjEwNUYyMDAwMDAwMDI4MjEwRTAwMDIyQTI0MDYwMDBFOTI4RDAwMDA5NwotOjEwNUYzMDAwMjQwRUZGODAwMjAwMjgyMTAxQUU4MDI1QTI5MDAwMDBERgotOjEwNUY0MDAwMjQwNDAwMDQwRTAwMEM1QzI0MDYwMDMwMEEwMDAzRUI1RAotOjEwNUY1MDAwOEY5MDAwMUM4RTA4MDAwNDNDMTQwODAwMjY5NDVBNzg4OAotOjEwNUY2MDAwM0MwMTA4MDBBQzI4NUE3OEFGNDgwMDIwOTIxRjAwMDM3QgotOjEwNUY3MDAwMzNGOTAwMDQxMzIwMDAwMjI0MDIwMDEyMjQwMjAwMDY1OAotOjEwNUY4MDAwQTM2MjAwM0Y5MjBCMDAxQjI0MDRGRkMwMzE2NTAwM0Y1OQotOjEwNUY5MDAwMDBBNDM4MjVBMzY3MDAzRTkyMDYwMDAzMzBDMjAwMDEyQQotOjEwNUZBMDAwMTQ0MDAxMzIwMDAwMDAwMDhFMDIwMDA4QUU4MjAwMDg5QQotOjEwNUZCMDAwM0MwMjA4MDA4QzQyNUE4MDEwNDAwMTMxMDAwMjQ5QzI2NAotOjEwNUZDMDAwQTc2OTAwMDg4RTE0MDAwQzI0MEMwMDAxMjQwMzAwMTQ5RgotOjEwNUZEMDAwQUY3NDAwMkM4RTBFMDAxMEFGNkUwMDMwOTYwRDAwMTZDMAotOjEwNUZFMDAwQTc2RDAwMzg5NjBBMDAxNEE3NkEwMDNBQUY2QzAwMEMzRgotOjEwNUZGMDAwQTc2QzAwMTBBNzZDMDAxMkE3NkMwMDE0QTc2QzAwMTYwOQotOjEwNjAwMDAwMTIyMDAxMzZBMzYzMDAzNDkyMEYwMDAzMzFGMDAwMDIyNgotOjEwNjAxMDAwMkUxMTAwMDE4RjkwMDAxQzI2MjIwMDA4MEEwMDAzNjI0NgotOjEwNjAyMDAwQUY4MjAwMjg4RTA0MDAwNDNDMEUwMDA4MDM0RTMwMjE4RAotOjEwNjAzMDAwQUY0NDAwMjA4RTA1MDAwODkwQ0QwMDAwMjQwQzAwNTBENQotOjEwNjA0MDAwMzFBQTAwRkYxMTRDMDA4NjI0MDcwMDg4MjQwNjAwMDlBRAotOjEwNjA1MDAwMEUwMDAyMkEwMDAwMDAwMDBBMDAwM0VCOEY5MDAwMUNEMwotOjEwNjA2MDAwOEUwNDAwMUMwRTAwMDI0MTAwMDAwMDAwMTA0MDAwRjRFRAotOjEwNjA3MDAwMDA0MDUwMjE4Rjg5MDAxQzI0MDcwMDg5MDE0MDIwMjEwNQotOjEwNjA4MDAwOEQyNTAwMUMyNDA2MDAwMTBFMDAwMjJBMDAwMDAwMDBERAotOjEwNjA5MDAwMEEwMDAzRUI4RjkwMDAxQzk2MEQwMDAyM0MxNDA4MDBEMAotOjEwNjBBMDAwMjY5NDVBNzgzMUFBMDAwNDUxNDAwMEI4M0MxMDYwMDA5MAotOjEwNjBCMDAwOEUwRTAwMUMzQzAxMDgwMEFDMkU1QTc4QUY0RTAwMjAxQQotOjEwNjBDMDAwOTIwNzAwMTAyNDA4MDAxNDMwRTIwMEZGMTQ0ODAwRDZBNAotOjEwNjBEMDAwMDAwMDAwMDA5NjBCMDAwMjMxNjMwMDAxMTQ2MDAxNjVBRQotOjEwNjBFMDAwMDAwMDAwMDA4RTAyMDAwNEFFODIwMDA4M0MxNDA4MDA4QwotOjEwNjBGMDAwOEU5NDVBODAxMjgwMDE1QjAwMDAwMDAwOEY3NDAwNzQzRgotOjEwNjEwMDAwM0MwMzgwMDAyNDA0MDAwMTAyODM1ODI1QUY2QjAwNzQxNwotOjEwNjExMDAwQTM2MDAwMDVBRjY0MDAwQzNDMDcwODAwOENFNzVBODBDMAotOjEwNjEyMDAwOEY4NjAwMUNBNzY0MDAxMDAwMDcxMUMyQTc2NDAwMTIyQwotOjEwNjEzMDAwQTc2NDAwMTRBNzY0MDAxNkE3NjIwMDA4OENDODAwMDhCMgotOjEwNjE0MDAwMjQwNDAwMDJBRjY4MDAyQzhDQzUwMDBDQUY2NTAwMzA0MQotOjEwNjE1MDAwOTBERjAwMTBBMzdGMDAzNDhGOTkwMDFDOTMzMDAwMTE1MgotOjEwNjE2MDAwQTM3MDAwMzU4Rjk4MDAxQzkzMEYwMDEyQTM2RjAwMzZBOAotOjEwNjE3MDAwOEY4OTAwMUM5MTJFMDAxM0EzNkUwMDM3OEY5MDAwMUM5NgotOjEwNjE4MDAwOTYwRDAwMTRBNzZEMDAzODk2MEEwMDE2QTc2QTAwM0EwQgotOjEwNjE5MDAwOEUwQzAwMThBRjZDMDAyNDU2MjBGRENDQUY4NDAwMjg3NAotOjEwNjFBMDAwM0MwNTA4MDAyNEE1NUE3ODBFMDAwMjY0MDAwMDIwMjE1NgotOjEwNjFCMDAwOEY5MDAwMUMwQTAwMDRBNzAwMDAyMDIxOEUxMDAwMDQwQwotOjEwNjFDMDAwMjQwNzAwODFBRjUwMDAyMDkzNjkwMDIzMzEzNDAwMTA3MAotOjEwNjFEMDAwMTI4MDAwMTcwMDAwMDAwMDAyMDAyMDIxMDAwMDI4MjE4QQotOjEwNjFFMDAwMjQwNjAwMUYwRTAwMDIyQTAwMDAwMDAwMEEwMDAzRUIzNAotOjEwNjFGMDAwOEY5MDAwMUMzQzA1MDgwMDI0QTU1QTc4MEUwMDAyODdFOQotOjEwNjIwMDAwMjQwNDAwODI4RjkwMDAxQzAwMDAyODIxMEEwMDAzNjJGMQotOjEwNjIxMDAwQUY4NTAwMjgzQzA0MDgwMDhDODQ1QTc4MEUwMDE0RTVGMQotOjEwNjIyMDAwMDAwMDAwMDA4RjkwMDAxQzBBMDAwNDgyMDAwMDE4MjE2QQotOjEwNjIzMDAwMEUwMDAyNTYwMjAwMjAyMTkzNzgwMDIzMDIwMDIwMjE0NAotOjEwNjI0MDAwMzcwRjAwMTAwRTAwMDI1RkEzNkYwMDIzMDAwMDM4MjFGQgotOjEwNjI1MDAwMDIwMDIwMjEwMDAwMjgyMTBBMDAwNUE4MjQwNjAwMUZCMgotOjEwNjI2MDAwOTIwRjAwMEMzMUU5MDAwMTExMjAwMDAzMDAwMDAwMDAzMgotOjEwNjI3MDAwOTYxODAwMEVBNEQ4MDAyQzkyMUYwMDBDMzNGOTAwMDJDRgotOjEwNjI4MDAwMTMyMDAwMDUwMDAwMzgyMThFMDIwMDE0OTYwODAwMTIyOQotOjEwNjI5MDAwQUNDMjAwMUNBNEM4MDAxQTBBMDAwNTQzMjQwNjAwMDk2OQotOjEwNjJBMDAwM0MwNTA4MDAyNEE1NUE3ODBFMDAwMjg3MjQwNDAwOEJDMAotOjEwNjJCMDAwOEY5MDAwMUMwMDExMjgyQjBBMDAwMzYyQUY4NTAwMjg3NAotOjEwNjJDMDAwQUY2MDAwODQzQzBBMDgwMDhENEE1QTc4M0MwRDA4MDBGMwotOjEwNjJEMDAwOERBRDAwNTAyNDBDRkY4MDNDMDIwMDBDMDE0RDE4MjFCNAotOjEwNjJFMDAwMDA2QzIwMjRBRjQ0MDAyODhFMDcwMDE0MzA2QjAwN0YyMAotOjEwNjJGMDAwMDE3QTI4MjEwMEEyQzgyMUFGMjcwMEQ4OEUwNjAwMTRGOQotOjEwNjMwMDAwQUY5OTAwRDBBRjI2MDBEQzhFMDgwMDEwMjUxRkZGRkVERAotOjEwNjMxMDAwMEEwMDA0MDhBRjNGMDEwODNDMDUwODAwOENBNTVBNzgyNAotOjEwNjMyMDAwM0MxOTA4MDA4RjM5MDA1MDI0Q0NGRkZFMDBCOUMwMjE3MQotOjEwNjMzMDAwMDMwNDc4MjRBRjRGMDAyODNDMTQwODAwOEU5NDVBNzg0OAotOjEwNjM0MDAwM0MwOTA4MDA4RDI5MDA1MDAyODk3MDIxMzFDRDAwN0Y2MQotOjEwNjM1MDAwMDFCQTUwMjEwMTQ3ODAyMUFFMDYwMEQ4QUY5MDAwRDA4RAotOjEwNjM2MDAwQUUwMDAwREMwQTAwMDNCMUFFMEMwMTA4NTQ4Q0ZFMzAxNAotOjEwNjM3MDAwMjQwNTQwMDAwQTAwMDQzQjI0MDUxMDAwMEUwMDAzMkVGMwotOjEwNjM4MDAwMDAwMDAwMDAwQTAwMDNFQjhGOTAwMDFDOEUwRjQ0MkNDRAotOjEwNjM5MDAwM0MxODZDNjIzNzA5Nzk3MDNDMDEwODAwQUMyMDVBNzhDRgotOjEwNjNBMDAwMTVFOTAwMDgyNDA1MDE0MDk3OUYwMDM0OTc4NjAwMkNDQQotOjEwNjNCMDAwMDI4MDI4MjEwM0U2QzgyQjEzMjAwMDExMjQwNDAwOTIzOAotOjEwNjNDMDAwMjQwNTAxNDAwRTAwMEM3QTI0MDQwMDAyM0MwMTA4MDA2MAotOjEwNjNEMDAwQUMyMjVBNzhBRjQyMDAyMDNDMDUwODAwOENBNTVBNzhDMAotOjEwNjNFMDAwMTBBMDAwMDUyNDA0MDA4MzBFMDAwODQ1MDAwMDAwMDBGMgotOjEwNjNGMDAwMTA0MDAwMDkyNDA0MDA4MzNDMDUwODAwMjRBNTVBNzhCNQotOjEwNjQwMDAwMEUwMDAyNjQwMDAwMDAwMDhGOTAwMDFDMDAxMTIwMkI4MQotOjEwNjQxMDAwMEEwMDAzNjJBRjg0MDAyODBFMDAwODQ5MDAwMDAwMDA1MwotOjEwNjQyMDAwMEEwMDA1NUY4RjkwMDAxQzBFMDAwODREMDAwMDAwMDA2MAotOjEwNjQzMDAwM0MwNTA4MDAyNEE1NUE3ODBBMDAwNjJGMjQwNDAwOEI4NgotOjEwNjQ0MDAwMjQwNDAwMDQwRTAwMEM3QTI0MDUwMDMwMTQ0MDAwMkFCNQotOjEwNjQ1MDAwMDA0MDUwMjE4Rjg5MDAxQzI0MDcwMDgzMDE0MDIwMjEyNwotOjEwNjQ2MDAwOEQyNTAwMUMwQTAwMDU1MTI0MDYwMDAxOEUwNDAwMDgzOQotOjEwNjQ3MDAwMEUwMDAyNDEwMDAwMDAwMDBBMDAwNTFCQUU4MjAwMDg2OQotOjEwNjQ4MDAwM0MwNTA4MDAyNEE1NUE3ODBFMDAwMjNDMjQwNDAwODcyRAotOjEwNjQ5MDAwOEY5MDAwMUMwQTAwMDUzNjAwMTExMDJCOEY4MzAwMzhFNgotOjEwNjRBMDAwOEY4NjAwMzAxMDY2RkU5RDAwMDAzODIxM0MwNzA4MDBGMgotOjEwNjRCMDAwMjRFNzU5RkMwMDAzMjBDMDAwODcyODIxOENBQzAwMDA5MQotOjEwNjRDMDAwMTE5MDAwNjEyNDZBMDAwMTMxNDMwMDBGNTQ2NkZGRkEwNQotOjEwNjREMDAwMDAwMzIwQzAwQTAwMDRGNjAwMDAzODIxM0MwNTA4MDAzMwotOjEwNjRFMDAwMjRBNTVBNzgwRTAwMDI4NzI0MDQwMDgyOEY5MDAwMUM5NQotOjEwNjRGMDAwMEEwMDA1MzYwMDAwMTAyMTNDMEIwMDA4MDM0QjIwMjE0OAotOjEwNjUwMDAwMjQwMzAwNTAyNDA3MDAwMUFGNDIwMDIwQTA4MzAwMDBCNAotOjEwNjUxMDAwQTA4NzAwMDE4RjgyMDAxQzkwNDgwMDA0QTA4ODAwMTgwQQotOjEwNjUyMDAwOEY4NTAwMUM5MEE2MDAwNUEwODYwMDE5OEY5RjAwMUM3NwotOjEwNjUzMDAwOTNGOTAwMDZBMDk5MDAxQThGOTAwMDFDOTIxODAwMDc4QQotOjEwNjU0MDAwQTA5ODAwMUI4Rjk0MDAxQzkyOEYwMDA4QTA4RjAwMUM0NQotOjEwNjU1MDAwOEY4OTAwMUM5MTJFMDAwOUEwOEUwMDFEOEY4RDAwMUNCQwotOjEwNjU2MDAwOTFBQzAwMEFBMDhDMDAxRThGOEIwMDFDM0MwQzA4MDAxNAotOjEwNjU3MDAwMjU4QzU5RkM5MTYzMDAwQjNDMEIwODAwMjU2QjU5RjhFNgotOjEwNjU4MDAwQTA4MzAwMUY4Rjg3MDAxQzkwRTgwMDBDQTA4ODAwMjBDQgotOjEwNjU5MDAwOEY4MjAwMUM5MDQ1MDAwRDI0MDI0NjQ2QTA4NTAwMjFGNAotOjEwNjVBMDAwOEY4NjAwMUM5MERGMDAwRUEwOUYwMDIyOEY5OTAwMUM5OAotOjEwNjVCMDAwOTMzMDAwMEZBMDkwMDAyMzhGOTgwMDFDOTMxNDAwMTBCQwotOjEwNjVDMDAwQTA5NDAwMjQ4RjhGMDAxQzkxRTkwMDExQTA4OTAwMjU2MAotOjEwNjVEMDAwOEY4OTAwMUM4RjhFMDAzMDhGOTAwMDM4OTUyRDAwMTQwRAotOjEwNjVFMDAwMDAwRTE4QzAyNUM4MDAwMUE0OEQwMDI4OTUyNzAwMTZBQwotOjEwNjVGMDAwMDA2QzMwMjEwMDZCQzgyMUE0ODcwMDJBOTUyNTAwMTg2MwotOjEwNjYwMDAwMzEwODAwMEZBNDg1MDAyQ0E0ODIwMDJFOEQzRjAwMUNCMQotOjEwNjYxMDAwQUNDQTAwMDBBRjg4MDAzMDExMTAwMDA2QUYzRjAwMDA4OAotOjEwNjYyMDAwMDAwMDM4MjE4RDI1MDAxQzAxNDAyMDIxMEEwMDA1NTE2MQotOjEwNjYzMDAwMjQwNjAwMDEyNTBDMDAwMTMxODQwMDBGMDAwMDM4MjFFMAotOjEwNjY0MDAwMEEwMDA2QjhBRjg0MDAzODNDMDcwODAwMjRFNzU5Rjg3MAotOjEwNjY1MDAwMDA4NzMwMjEwMDAwMzgyMUFDQTAwMDAwMEEwMDA0RjZCOQotOjEwNjY2MDAwQUNDMDAwMDAzQzA1MDgwMDI0QTU1QTc4MEEwMDA2MkY5QgotOjEwNjY3MDAwMjQwNDAwODc4RTA0MDAwNDBFMDAwMjQxMDAwMDAwMDA4NAotOjEwNjY4MDAwMEEwMDA1NkFBRTgyMDAwODMwODRGRkZGMzBDNjAwRkZCMgotOjEwNjY5MDAwOEY0MjAxQjgwNDQwRkZGRTAwMDY0NDAwMDEwNDMwMjU4QgotOjEwNjZBMDAwM0MwNzIwMDAwMEM3MjAyNTNDMDMxMDAwQUY0MDAxODBCQwotOjEwNjZCMDAwQUY0NTAxODRBRjQ0MDE4ODAzRTAwMDA4QUY0MzAxQjg0RgotOjEwNjZDMDAwMjdCREZGRThBRkIwMDAxMEFGQkYwMDE0M0MwNzYwMDA2QgotOjEwNjZEMDAwMjQwNjAwMDIxMDgwMDAwNjAwQTA4MDIxMDAxMDEwMkI2QwotOjEwNjZFMDAwOEZCRjAwMTQ4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMTgxMgotOjEwNjZGMDAwM0MwOTYwMEVBRDIwMDAzNDhDRTUyMDFDOEY4MjAwMUMwQwotOjEwNjcwMDAwMjQwOEZGRkMwMEE4MTgyNEFDRTMyMDFDMEUwMDA2RDFDRQotOjEwNjcxMDAwOEM0NTAwMEMwMDEwMTAyQjhGQkYwMDE0OEZCMDAwMTBBMAotOjEwNjcyMDAwMDNFMDAwMDgyN0JEMDAxODNDMDI2MDBFMzQ0NzAxMDA1QQotOjEwNjczMDAwMjQwOTAwMTgyNzRBMDQwMDAwMDAwMDAwMDAwMDAwMDA5RgotOjEwNjc0MDAwMDAwMDAwMDAzQzA2MDA1MDM0QzMwMjAwQUY0NDAwMzg5MwotOjEwNjc1MDAwQUY0NTAwM0NBRjQzMDAzMDAxNDAxODIxOEY0QjAwMDA5MwotOjEwNjc2MDAwMzE2ODAwMjAxMTAwRkZGRDI0MDYwMDdGMjQwOEZGRkY5MAotOjEwNjc3MDAwOEM2QzAwMDAyNEM2RkZGRjI0NjMwMDA0QUNFQzAwMDAxNgotOjEwNjc4MDAwMTRDOEZGRkIyNEU3MDAwNDAwMDAwMDAwMDAwMDAwMDAyNAotOjEwNjc5MDAwMDAwMDAwMDAzQzBGMDAyMEFGNEYwMDMwMDAwMDAwMDA2MAotOjEwNjdBMDAwMjRBRDAyMDAwMUE1NzAyQjI1MjlGRkZGMDA4RTIwMjFCQQotOjEwNjdCMDAwMTUyMEZGRTEwMUEwMjgyMTAzRTAwMDA4MDAwMDAwMDBFRgotOjEwNjdDMDAwMjdCREZGRTBBRkIxMDAxNEFGQkYwMDE4QUZCMDAwMTA5RAotOjEwNjdEMDAwM0MwNTYwMEU4Q0EyMDAzNDAwODA4ODIxMTQ0MDAwMDYyNQotOjEwNjdFMDAwM0MwNDYwMDA4Qzg3MjAxQzI0MDhGRkZDMDBFODMwMjQ1NwotOjEwNjdGMDAwMzRDMzAwMDFBQzgzMjAxQzhGOEIwMDFDMjQwOTAwMDFEMgotOjEwNjgwMDAwQUNBOTAwMzQ5NTY5MDAwMjhENjUwMDE0OEQ3MDAwMENGMAotOjEwNjgxMDAwMkQyNDAwODE4RDY3MDAwNDhENjYwMDA4MTA4MDAwMDcxQwotOjEwNjgyMDAwOEQ2QTAwMTAyRDJDMDAwNDE1ODAwMDBFMzBDRTAwMDc1QwotOjEwNjgzMDAwMzEyRDAwMDMxMUEwMDAwQjAwMDAwMDAwMjQwNDAwOEI4OAotOjEwNjg0MDAwMDIwMDI4MjEwRTAwMDZEMTI0MDYwMDAzMDAxMTEwMkI5RgotOjEwNjg1MDAwOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDg0NAotOjEwNjg2MDAwMjdCRDAwMjAxNUMwRkZGNjI0MDQwMDhCM0MwMzAwMjA0OAotOjEwNjg3MDAwQUY0MzAwMzAwMDAwMDAwMDI0MDIwMDAxQUY4MjAwMTQ4QQotOjEwNjg4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0MxRjAxNTA1QwotOjEwNjg5MDAwMDEzRkM4MjUyNTM4MDAwMzNDMEY2MDBFQUY0NzAwMzg4NAotOjEwNjhBMDAwMDAxODE4ODJBRjQ2MDAzQzM1RTgwMDNDQUY1OTAwMzA3NAotOjEwNjhCMDAwMjc0NzA0MDA4RjQ0MDAwMDMwODYwMDIwMTBDMEZGRkRGMQotOjEwNjhDMDAwMDAwMDAwMDAxMDYwMDAwODI0NjZGRkZGMjQwM0ZGRkZBMwotOjEwNjhEMDAwOENFQjAwMDAyNEM2RkZGRjI0RTcwMDA0QUQwQjAwMDA5MgotOjEwNjhFMDAwMTRDM0ZGRkIyNTA4MDAwNDNDMDg2MDBFQUQwOTAwMzgwNgotOjEwNjhGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0MwNzAwMjAzNQotOjEwNjkwMDAwQUY0NzAwMzAwMDAwMDAwMDBFMDAwNkY5MDE0MDIwMjFEMgotOjEwNjkxMDAwMDIwMDI4MjEwMDAwMjAyMTBFMDAwNkQxMjQwNjAwMDNEOQotOjEwNjkyMDAwMDAxMTEwMkI4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTAxMgotOjEwNjkzMDAwMDNFMDAwMDgyN0JEMDAyMDI3QkRGRkUwQUZCMjAwMTgyQwotOjEwNjk0MDAwMzA5MkZGRkZBRkIxMDAxNEFGQkYwMDFDQUZCMDAwMTAxQQotOjEwNjk1MDAwMTY0MDAwMEQwMDAwODgyMTBBMDAwN0FBMDIyMDEwMjExRAotOjEwNjk2MDAwMjQwNTAwMDE1MDg1MDAyNzhDRTUwMDBDMDAwMDAwMEQ3NwotOjEwNjk3MDAwMjYyMzAwMDEzMDcxRkZGRjI0RTIwMDIwMDIzMjM4MkI3MQotOjEwNjk4MDAwMTBFMDAwMTlBRjgyMDAxQzhGODIwMDE0MTQ0MDAwMTYyMgotOjEwNjk5MDAwOEY4NzAwMUMzQzA2NzAwMDNDMDMyMDAwOENFNTAwMDA0MwotOjEwNjlBMDAwMDBBNjIwMjQxNDgzMDAxMDhGODQwMDNDMDAwNTQ0MDJCQwotOjEwNjlCMDAwM0MwOTgwMDAwMEE5ODAyNDE0ODBGRkU5MzEwNjAwRkYxMwotOjEwNjlDMDAwMkNDQTAwMDk1MTQwRkZFQjI2MjMwMDAxMDAwNjY4ODAxNQotOjEwNjlEMDAwM0MwRTA4MDAyNUNFNTc4QzAxQUU2MDIxOEQ4QjAwMDA0NwotOjEwNjlFMDAwMDE2MDAwMDgwMDAwMDAwMDAyMjAxMDIxOEZCRjAwMUM4MQotOjEwNjlGMDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDhCMAotOjEwNkEwMDAwMjdCRDAwMjAwRTAwMDZEMTI0MDQwMDg0MTYwMEZGRDgwNAotOjEwNkExMDAwOEY4NzAwMUMwQTAwMDc4QkFGODAwMDNDOTBFRjAwMDJCQwotOjEwNkEyMDAwMDAwMDIwMjEyNDA2MDAwOTBFMDAwNkQxMDAwRjJFMDBEMAotOjEwNkEzMDAwOEY4NzAwMUMwMDEwMTAyQjBBMDAwNzhCQUY4MjAwM0NEMAotOjEwNkE0MDAwMDIwMDI4MjEwRTAwMDZERjI0MDQwMDAxOEY4NzAwMUNBRAotOjEwNkE1MDAwMEEwMDA3OEJBRjgyMDAzQzAyMDAyODIxMEUwMDA2REZFRgotOjEwNkE2MDAwMDAwMDIwMjEwQTAwMDdDMzhGODcwMDFDMEUwMDA3MUZBQgotOjEwNkE3MDAwMDIwMDIwMjEwQTAwMDdDMzhGODcwMDFDMzBCMEZGRkZFRgotOjEwNkE4MDAwMDAxMDE5QzA4RjU4MDFCODA3MDBGRkZFM0MxRjIwMDRGQQotOjEwNkE5MDAwM0MxOTEwMDBBRjQzMDE4MEFGNDAwMTg0QUY1RjAxODgxMwotOjEwNkFBMDAwQUY1OTAxQjgwQTAwMDc4QzI2MjMwMDAxMzA4MkZGRkY4RQotOjEwNkFCMDAwMTQ0MDAwMDMwMDAwMTgyMTAwMDQyNDAyMjQwMzAwMTBFNQotOjEwNkFDMDAwMzA4NTAwRkYxNEEwMDAwNTMwODcwMDBGMjQ2NjAwMDgwMQotOjEwNkFEMDAwMDAwNDIyMDIzMEMzMDBGRjMwODcwMDBGMTRFMDAwMDVERAotOjEwNkFFMDAwMzA4OTAwMDMyNDY4MDAwNDAwMDQyMTAyMzEwMzAwRkYwMAotOjEwNkFGMDAwMzA4OTAwMDMxNTIwMDAwNTM4OEIwMDAxMjQ2QTAwMDI0QwotOjEwNkIwMDAwMDAwNDIwODIzMTQzMDBGRjM4OEIwMDAxMzE2NDAwMDExMgotOjEwNkIxMDAwMTA4MDAwMDIyNDZDMDAwMTMxODMwMEZGMDNFMDAwMDhCNAotOjEwNkIyMDAwMDA2MDEwMjEzMDhCRkZGRjAwMEIzOTQyMzBFNjAwRkY4MAotOjEwNkIzMDAwM0MwOTA4MDAyNTI5NTk3ODAwMDY0MDgwMDEwOTYwMjE5OAotOjEwNkI0MDAwOEQ4NzAwMDAzMTY0MDAxRjI0MEEwMDAxMDA4QTE4MDRBOAotOjEwNkI1MDAwMzBBNTAwRkYwMEUzMjAyNTE0QTAwMDAyMDAwMzEwMjc0OQotOjEwNkI2MDAwMDBFMjIwMjQyNDBGMDAwMTAwQ0Y3MDA0MDEwOTY4MjFGNQotOjEwNkI3MDAwMDAwRTI4MjcxNDgwMDAwNUFEQTQwMDAwOEY4NjAwMENBRAotOjEwNkI4MDAwMDBBNjEwMjQwM0UwMDAwOEFGODIwMDBDOEY4ODAwMENFMAotOjEwNkI5MDAwMDFDODEwMjUwM0UwMDAwOEFGODIwMDBDM0MwNjAwMUY2RQotOjEwNkJBMDAwM0MwMzYwMDAzMDg0RkZGRjM0QzVGRjgwMjQwMjAwMjBENgotOjEwNkJCMDAwQUM2MDIwMDhBQzYwMjAwQ0FDNjAyMDEwQUM2NTIwMTRFOAotOjEwNkJDMDAwQUM2NDIwMThBQzYyMjAwMDAwMDAwMDAwMDAwMDAwMDA0RgotOjEwNkJEMDAwMDNFMDAwMDgwMDAwMDAwMDI3QkRGRkU4MjQwMkZGRkZEQgotOjEwNkJFMDAwQUZCRjAwMTBBRjgyMDAwQzAwMDAyMDIxM0MwNjA4MDA1RgotOjEwNkJGMDAwMjRDNjU5NzgyNDA1RkZGRjI0ODkwMDAxMDAwNDQwODA0MQotOjEwNkMwMDAwMzEyNEZGRkYwMTA2MTgyMTJDODcwMDIwMTRFMEZGRkEzMQotOjEwNkMxMDAwQUM2NTAwMDAwRTAwMDgxNjAwMDAyMDIxMjQwMjAwMDFDRgotOjEwNkMyMDAwM0MwNDYwMDAyNDA1MDAyMEFDODIyMDE4QUM4NTIwMDBDNAotOjEwNkMzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjQ0QTAwMDFFNQotOjEwNkM0MDAwMzE0MkZGRkYyQzQ2MDQwMDE0QzBGRkY3OEZCRjAwMTAzNQotOjEwNkM1MDAwMDNFMDAwMDgyN0JEMDAxODhGODMwMDA4MkM2MjA0MDBBMQotOjEwNkM2MDAwMDNFMDAwMDgzODQyMDAwMThGODMwMDA4MjQ2MjAwMDExRAotOjEwNkM3MDAwMDNFMDAwMDhBRjgyMDAwODhGODMwMDA4MjQ2MkZGRkY1MgotOjEwNkM4MDAwMDNFMDAwMDhBRjgyMDAwODI3QkRGRkUwQUZCMTAwMTRBOQotOjEwNkM5MDAwQUZCRjAwMThBRkIwMDAxMDhGNkIwMDMwM0MwNjYwMDAzMwotOjEwNkNBMDAwMDA4MDg4MjFBQ0NCMjAwODhGNkEwMDJDM0MwMjgwMDAzOQotOjEwNkNCMDAwMjQwMzAwMDhBQ0NBMjAwQzk3NjkwMDNBOTc2ODAwMzg5MgotOjEwNkNDMDAwMDAwOTJDMDAzMTA3RkZGRjAwQTcyMDI1QUNDNDIwMTBDRAotOjEwNkNEMDAwQUNDMjIwMTRBQ0MzMjAwMDAwMDAwMDAwMDAwMDAwMDA4MwotOjEwNkNFMDAwMDAwMDAwMDAzQzAzNjAwMDhDNkQyMDAwMzFBQzAwMDgwNwotOjEwNkNGMDAwMTU4MEZGRjkwMDAwMDAwMDhDNkUyMDE0MDVDMDAwMjBGNAotOjEwNkQwMDAwMDAwMDAwMDAwRTAwMDdEQThGODQwMDBDMDAwMjQwODBCMwotOjEwNkQxMDAwM0MwOTA4MDAyNTI5NTk3ODAxMDkzODIxOENFNDAwMDAzNAotOjEwNkQyMDAwMEUwMDA3REEwMDAyODE0MDAyMDIyMDIxMzA5MEZGRkZBRQotOjEwNkQzMDAwMDIwMDIwMjEwRTAwMDdGODAwMDAyODIxM0MwQzgwMDBGMgotOjEwNkQ0MDAwMDIyQzU4MjUzMjEwRkZGRjNDMTE2MDAwMjQwQTAwMjA1RAotOjEwNkQ1MDAwQUUyQjIwMTRBRTMwMjAxOEFFMkEyMDAwMDAwMDAwMDAxOAotOjEwNkQ2MDAwMDAwMDAwMDAwMDAwMDAwMDAyMDAxMDIxOEZCRjAwMTg4QQotOjEwNkQ3MDAwOEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjA4MQotOjEwNkQ4MDAwOEM2NjIwMTQzQzAyMDAxRjM0NDNGRjgwM0MxRkZGRTg0OAotOjEwNkQ5MDAwMDBDM0MwMjQzN0Y5MDgwMDAzMTk4MDIxMDAxMDc5QzIwQwotOjEwNkRBMDAwM0MwQzgwMDAwMjJDNTgyNTMxRjBGRkZGM0MxMTYwMDBBNAotOjEwNkRCMDAwMjQwQTAwMjBBRTJCMjAxNEFFMzAyMDE4QUUyQTIwMDA2QQotOjEwNkRDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMDEwMjE5MAotOjEwNkREMDAwOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDhCRgotOjEwNkRFMDAwMjdCRDAwMjAyN0JERkZFOEFGQjAwMDEwMzQwMkZGRkYzMQotOjEwNkRGMDAwMzA5MEZGRkZBRkJGMDAxNDEyMDIwMDA2MDIwMDIwMjFGNgotOjEwNkUwMDAwMEUwMDA4MTYwMDAwMDAwMDAyMDAyMDIxMEUwMDA3RjgwNgotOjEwNkUxMDAwMjQwNTAwMDE4Rjg0MDAwODhGQkYwMDE0OEZCMDAwMTA3QwotOjEwNkUyMDAwMjQ4M0ZGRkYyN0JEMDAxODAzRTAwMDA4QUY4MzAwMDg5QwotOjEwNkUzMDAwMDAwNDM5QzIzMEU2MDAzRjAwMDQzQjQyMDAwNzE4NDAxRQotOjEwNkU0MDAwMjQwMjEwMDAyQ0M0MDAyMDI0QzhGRkUwQUY0MjAwMkMxNAotOjEwNkU1MDAwMjQ2MzAwMDExNDgwMDAwMzMwQTkwMEZGMDAwNzE4NDBEQwotOjEwNkU2MDAwMzEwNjAwRkYwMDAzNjA4MDI0MDgwMDAxMDE5QTU4MjFDOAotOjEwNkU3MDAwM0MwQTAwMEUwMEM4MjgwNDAxNkEzODIxMTEyMDAwMDVEMAotOjEwNkU4MDAwMDAwNTMwMjc4Q0U5MDAwMDAxMjUzMDI1MDNFMDAwMDhDQgotOjEwNkU5MDAwQUNFNjAwMDA4Q0VFMDAwMDAxQzY2ODI0MDNFMDAwMDhBOAotOjEwNkVBMDAwQUNFRDAwMDAyN0JERkZFOEFGQkYwMDE0QUZCMDAwMTA4RAotOjEwNkVCMDAwM0MwNDYwMDA4Qzg1MDgwODM0MDNGMDAwMzBBMkYwMDAyOAotOjEwNkVDMDAwNTA0MzAwMDYyNDAyMDAwMThDODcwODA4MzQwNEUwMDBDNwotOjEwNkVEMDAwMzBFNkYwMDAxMEM0MDAxRTI0MDIwMDAyQUY4MjAwNDAyMQotOjEwNkVFMDAwM0MxMDYwMDAzQzBBMDIwMEFFMEEwODE0MjQwOTEwMDA5RAotOjEwNkVGMDAwM0MwODAwMEU4RTAzNDQwMDAzNDgyMDIxQUY0OTAwMkNCQgotOjEwNkYwMDAwMjQwNTAxMjAwRTAwMENDMDAwMDAzMDIxOEY4MzAwNDBCQQotOjEwNkYxMDAwMTA2MDAwMDQzQzAyMTY5MTI0MEIwMDAxMTA2QjAwMEU1RgotOjEwNkYyMDAwM0MwMjNEMkMzNDRGMDA5MEFFMEY0NDA4OEZCRjAwMTQzQwotOjEwNkYzMDAwOEZCMDAwMTAzQzBDNjAwMDI0MEUxMDAwM0MwRDAyMDBDRAotOjEwNkY0MDAwMjdCRDAwMThBRDhFNDQyMDAzRTAwMDA4QUQ4RDA4MTA2OQotOjEwNkY1MDAwMEEwMDA4RTdBRjgwMDA0MDNDMDIxOERBMzQ0RjAwOTA4NgotOjEwNkY2MDAwQUUwRjQ0MDg4RkJGMDAxNDhGQjAwMDEwM0MwQzYwMDBCRgotOjEwNkY3MDAwMjQwRTEwMDAzQzBEMDIwMDI3QkQwMDE4QUQ4RTQ0MjBFOQotOjEwNkY4MDAwMDNFMDAwMDhBRDhEMDgxMDBBMDAwOEJCMjQwNTAwMDFDRAotOjEwNkY5MDAwMEEwMDA4QkIwMDAwMjgyMTNDMDgwODAwMjUwODVEODQ4MQotOjEwNkZBMDAwMjQwNEZGRkYwMTAwMTgyMTI0MDIwMDFFMjQ0MkZGRkZEOQotOjEwNkZCMDAwQUM2NDAwMDAwNDQxRkZGRDI0NjMwMDA0M0MwNzA4MDBBQQotOjEwNkZDMDAwMjRFNzVFMDA4Q0U1RkZGQzI0MDQwMDFDMjQwNjAwMDE3RAotOjEwNkZEMDAwMzA4QTAwMUYwMTQ2NDgwNDI0ODQwMDAxMDAwOTEwMjc1QwotOjEwNkZFMDAwMkM4MzAwMjAxNDYwRkZGQTAwQTIyODI0QUNFNUZGRkNFQgotOjEwNkZGMDAwM0MwNTY2NjYzNEE0NjE2RTNDMDYwODAwMjRDNjVFQzA4QgotOjEwNzAwMDAwQUY4NDAwNThBRjg4MDA5QzI0MDRGRkZGMDBDMDE4MjEwMwotOjEwNzAxMDAwMjQwMjAwMUYyNDQyRkZGRkFDNjQwMDAwMDQ0MUZGRkQ3NgotOjEwNzAyMDAwMjQ2MzAwMDQzQzA3NjY2NjNDMDUwODAwMjRBNTVFODBENgotOjEwNzAzMDAwQUY4NjAwNDgzNEU2NjE2RUFGODYwMDk4MjQwNEZGRkZGNwotOjEwNzA0MDAwMDBBMDE4MjEyNDAyMDAwRjI0NDJGRkZGQUM2NDAwMDBCRQotOjEwNzA1MDAwMDQ0MUZGRkQyNDYzMDAwNDNDMEI2NjY2M0MwNjA4MDAwNwotOjEwNzA2MDAwMjRDNjVFMDAzNTY4NjE2RUFGODUwMEE0QUY4ODAwNzBFRAotOjEwNzA3MDAwMjQwNEZGRkYwMEMwMTgyMTI0MDIwMDFGMjQ0MkZGRkY0OAotOjEwNzA4MDAwQUM2NDAwMDAwNDQxRkZGRDI0NjMwMDA0M0MwRDY2NjYwRgotOjEwNzA5MDAwM0MwQTA4MDAyNTRBNUY0MDM1QUM2MTZFQUY4NjAwOTAxRgotOjEwNzBBMDAwQUY4QzAwNUMyNDA0RkZGRjAxNDAxODIxMjQwMjAwMDM4MAotOjEwNzBCMDAwMjQ0MkZGRkZBQzY0MDAwMDA0NDFGRkZEMjQ2MzAwMDQ5MAotOjEwNzBDMDAwM0MwOTA4MDAyNTI5NUY1MDhEMjdGRkZDMjQwNDAwMDY5OQotOjEwNzBEMDAwMjQwNTAwMDEzMDk5MDAxRjAzMjVDMDA0MjQ4NDAwMDEwOQotOjEwNzBFMDAwMDAxODc4MjcyQzhFMDAyMDE1QzBGRkZBMDBFRjM4MjRGNgotOjEwNzBGMDAwQUQyN0ZGRkMzQzA5NjY2NjI0MDMwNDAwMjQwNDAzREM3RQotOjEwNzEwMDAwMjQwNTAyMDAyNDA2MDA2NjM1MjI2MTZFM0MwODA4MDA1MgotOjEwNzExMDAwMjUwODVBODRBRjgyMDA3NEFGODMwMDQ0QUY4MzAwNkNBQgotOjEwNzEyMDAwQUY4MzAwNTBBRjgzMDA4NEFGOEEwMDhDQUY4NDAwNjRDQgotOjEwNzEzMDAwQUY4NTAwNENBRjg2MDA1NEFGODQwMDc4QUY4NTAwNjAwNwotOjEwNzE0MDAwQUY4NjAwODAwMTAwMTgyMTI0MDIwMDAyMjQ0MkZGRkZDNAotOjEwNzE1MDAwQUM2MDAwMDAwNDQxRkZGRDI0NjMwMDA0MjQwNDAwMDMyQwotOjEwNzE2MDAwMjQwMzAwMEMzQzBBMDgwMDI1NEE1QTkwQUY4QTAwNjhBNAotOjEwNzE3MDAwMEEwMDA5OEUyNDA1RkZGRjAwMDQxODgwMjQ4NDAwMDEwMgotOjEwNzE4MDAwMDA2ODU4MjEyQzg3MDBDMDE0RTBGRkZCQUQ2NTAwMDBBQgotOjEwNzE5MDAwM0MwRTY2NjYzNUNENjE2RTI0MEMxN0EwMjQwODE4MDBERAotOjEwNzFBMDAwQUY4RDAwODhBRjhDMDA5NDAzRTAwMDA4QUY4ODAwN0NBRQotOjEwNzFCMDAwMjQ4NDAwN0YwMDA0MjFDMjAwMDA0MDIxMDAwMDMwMjEwRgotOjEwNzFDMDAwMDAwMDM4MjEwMDAwMjgyMTBBMDAwOUE1QUY4NDAwQTA5MgotOjEwNzFEMDAwMTA2MDAwMDYyNEU3MDAwMTAwQzQzMDIxMjRBNTAwMDE0RQotOjEwNzFFMDAwMkNDMjBCRjUxNDQwRkZGQTJDQTMwMDY2M0MwOTA4MDBFMgotOjEwNzFGMDAwMjUyOTVGNDAwMTIwMTgyMTI0MDIwMDAzMjQ0MkZGRkZCQgotOjEwNzIwMDAwQUM2MDAwMDAwNDQxRkZGRDI0NjMwMDA0MTBFMDAwMUE5QwotOjEwNzIxMDAwMjRFM0ZGRkYwMDAzMjk0MjEwQTAwMDBBMDAwMDIwMjEwMAotOjEwNzIyMDAwMjQwNkZGRkYzQzAzMDgwMDI0NjM1RjQwMjQ4NDAwMDEyMAotOjEwNzIzMDAwMDA4NTUwMkJBQzY2MDAwMDI1MDgwMDAxMTU0MEZGRkJCRgotOjEwNzI0MDAwMjQ2MzAwMDQzMEUyMDAxRjEwNDAwMDA4MDAwODY4ODAzQQotOjEwNzI1MDAwMjQwQzAwMDEwMDRDMzgwNDAwMDg1ODgwMDE2OTI4MjFFMgotOjEwNzI2MDAwMjRFNkZGRkYwM0UwMDAwOEFDQTYwMDAwMDFBOTQwMjFDRQotOjEwNzI3MDAwMjQwOUZGRkZBRDA5MDAwMDAzRTAwMDA4MDAwMDAwMDA0MgotOjEwNzI4MDAwQUY0NDAwMjgzQzA0MDAwQzAzNDQyMDIxMDAwNTI4ODI2MAotOjEwNzI5MDAwMEEwMDBDQzAwMDAwMzAyMTAwMDQyMTgwM0MwMzYwMDA4MwotOjEwNzJBMDAwQUM2NDEwMDgwMDAwMDAwMDAwMDUyOTgwQUM2NTEwMENEQgotOjEwNzJCMDAwMDAwMDAwMDAwM0UwMDAwODhDNjIxMDBDMjdCREZGRTgwRQotOjEwNzJDMDAwMDA4MDI4MjEyNDA0MDAzOEFGQkYwMDE0MEUwMDA5RDUyNwotOjEwNzJEMDAwQUZCMDAwMTAyNDA0MEUwMEFGNDQwMDI4M0MxMDAwMEM5NgotOjEwNzJFMDAwMDM1MDIwMjEyNDA1MDAxMDBFMDAwQ0MwMDAwMDMwMjFBNgotOjEwNzJGMDAwMDM1MDEwMjFBQzQwMDAwMEFDNDAwMDA0MjQwNDAwMzhDRQotOjEwNzMwMDAwOEZCRjAwMTQ4RkIwMDAxMDI0MDUzRkZGMjdCRDAwMTg2OQotOjEwNzMxMDAwMEEwMDA5RDU4QzQzMDAwMDAwMDQyMTgwM0MwMzYwMDA3MgotOjEwNzMyMDAwQUM2NDEwMDgwMDAwMDAwMDhDNjIxMDBDMDNFMDAwMDg0MAotOjEwNzMzMDAwMDAwMjExODIyN0JERkZDOEFGQjQwMDIwOEY5NDAwNjhGRgotOjEwNzM0MDAwQUZCRTAwMzBBRkI3MDAyQ0FGQjYwMDI4MDAwMEI4MjFBOAotOjEwNzM1MDAwMDA4MEIwMjEyNDFFMDBDMEFGQkYwMDM0QUZCNTAwMjRCMAotOjEwNzM2MDAwQUZCMzAwMUNBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTA0MwotOjEwNzM3MDAwMEEwMDBBMTJBRkE1MDAzQzUwNDAwMDAxOEY5NDAwNjgzQgotOjEwNzM4MDAwMjdERUZGRkYxM0MwMDAyODI2OTQwMDA0OEU5MjAwMDAyMQotOjEwNzM5MDAwM0MwMzA4MDAyNDYzNUQ4MDEyNDBGRkY3MDI4MzEwMkIzQQotOjEwNzNBMDAwM0MwNDA4MDAyNDg0NUE4NDAyODQxMDIzMDAwMkE4QzBFQwotOjEwNzNCMDAwMDAwMDk4MjEwQTAwMEEyMTI0MTEwMDAxMDAxMTg4NDBEMAotOjEwNzNDMDAwMTIyMDAwMjYwMDAwMDAwMDAyQjM4MDIxMDI1MTI4MjQ3MAotOjEwNzNEMDAwMDIwMDIwMjExMEEwRkZGOTI2NzMwMDAxMEUwMDA5REUzMwotOjEwNzNFMDAwMDAwMDAwMDAwMDE2Njg0MDMyRUMwMDAxMDFBQzIwMjFEMgotOjEwNzNGMDAwMEUwMDA5RDUwMjAwMjgyMThGODkwMDk0MjZGNzAwMDE4QwotOjEwNzQwMDAwOEZBNjAwM0MzQUVCMDAwMTMxNkEwMDAxMjUyOEZGRkZGRQotOjEwNzQxMDAwMDAxMTM4MjcwMkNBQjAyMUFGODgwMDk0MTZFNkZGRTdCMgotOjEwNzQyMDAwMDI0NzkwMjRBRTkyMDAwMDAyRTAxMDIxOEZCRjAwMzQ4QQotOjEwNzQzMDAwOEZCRTAwMzA4RkI3MDAyQzhGQjYwMDI4OEZCNTAwMjQ4OAotOjEwNzQ0MDAwOEZCNDAwMjA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTRDRQotOjEwNzQ1MDAwOEZCMDAwMTAwM0UwMDAwODI3QkQwMDM4M0MwRTA4MDA4NAotOjEwNzQ2MDAwMjVDRTVEODAwMjhFMTAyQjBBMDAwQTBEQUU5MjAwMDAyMAotOjEwNzQ3MDAwMjdCREZGRDhBRkIxMDAxNEFGQjAwMDEwQUZCRjAwMjBFMAotOjEwNzQ4MDAwQUZCMzAwMUNBRkIyMDAxODAwQTA4ODIxMTBBMDAwMUZFRAotOjEwNzQ5MDAwMDAwNDgwNDAzQzEzMDgwMDI2NzM1QTg0MEEwMDBBNUFFQwotOjEwNzRBMDAwMjQxMjAwMDExMjIwMDAxOTI2MTAwMDAxMEUwMDA5RjUxNwotOjEwNzRCMDAwMDIwMDIwMjEwMDAyMzE0MjI0NDRGRkEwMDAwNjE4ODA2RgotOjEwNzRDMDAwMzA0NTAwMUYyQzgyMTdBMTAwNzMxODIxMjYzMUZGRkZDMQotOjEwNzREMDAwMTA0MEZGRjQwMEIyMzAwNDhDNjkwMDAwMDIwMDIwMjE0QgotOjEwNzRFMDAwMjQwNTNGRkYwMTI2NDAyNDE1MDBGRkVFMDEyNjM4MjUyNAotOjEwNzRGMDAwMEUwMDA5RDVBQzY3MDAwMDhGOEEwMDk0MjYxMDAwMDFBOQotOjEwNzUwMDAwMjU0NzAwMDExNjIwRkZFOUFGODcwMDk0OEZCRjAwMjBCOAotOjEwNzUxMDAwOEZCMzAwMUM4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAxMQotOjEwNzUyMDAwMDNFMDAwMDgyN0JEMDAyODhGODUwMDlDMDA4MDU4MjFCQgotOjEwNzUzMDAwMDAwMDQwMjEwMDAwNDgyMTI0MEEwMDFGM0MwQzA4MDBFNAotOjEwNzU0MDAwMjU4QzVERkMzQzBEMDgwMDI1QUQ1RDg0OENBNjAwMDBGQgotOjEwNzU1MDAwNTBDMDAwMTQwMDAwNDAyMTAwQUQxMDIzMDAwMjM4QzBDQwotOjEwNzU2MDAwMjQwMzAwMDEwQTAwMEE5MzAwMDAyMDIxMTUwMDAwMDNGMwotOjEwNzU3MDAwMDBFNDEwMjEyNDQ4MjAyNDAwMDA0ODIxMjUyOTAwMDE4RQotOjEwNzU4MDAwNTEyQjAwMTMyNTA2REZEQzEwNjAwMDA2MjQ4NDAwMDE2NwotOjEwNzU5MDAwMDBDMzcwMjQxNUMwRkZGNTAwMDMxODQwMEEwMDBBOTFDQgotOjEwNzVBMDAwMDAwMDQwMjExMEFDMDAyNjI0QTMwMDA0MDA2MDI4MjEyNAotOjEwNzVCMDAwMjU0QUZGRkYxNTQwRkZFNUFGODUwMDlDNTEyQjAwMDRENQotOjEwNzVDMDAwMjUwNkRGREMwMDAwNDAyMTAzRTAwMDA4MDEwMDEwMjE1NwotOjEwNzVEMDAwMDAwNjYxNDIzMEM1MDAxRjAwMEM1MDgwM0MwNzA4MDBDNwotOjEwNzVFMDAwMjRFNzVEODQyNDA0MDAwMTAxNDczMDIxMTEyMDAwMEZBRAotOjEwNzVGMDAwMDBBNDIwMDQzQzA1MDgwMDI0QTU1RTAwMTQ4MDAwMDVCQQotOjEwNzYwMDAwMjUyOUZGRkYyNEM2MDAwNDEwQzUwMDExMDAwMDAwMDA1QQotOjEwNzYxMDAwMjQwNDAwMDE4Q0NGMDAwMDAwMDRDMDI3MDAwNDIwNDA5NwotOjEwNzYyMDAwMDFGODY4MjQxNTIwRkZGNUFDQ0QwMDAwOEY5OTAwNzg5MwotOjEwNzYzMDAwMDEwMDEwMjEwMzJCNDgyMzAzRTAwMDA4QUY4OTAwNzhFNAotOjEwNzY0MDAwM0MwNTA4MDAyNEE1NUQ4NDBBMDAwQTlCMDAwMDQwMjEzNwotOjEwNzY1MDAwM0MwNjA4MDAyNEM2NUQ4NDBBMDAwQUI0MjQwNDAwMDEyNAotOjEwNzY2MDAwMzA4ODAwRkYyNDAyMDAwMjExMDIwMDBBMjQwMzAwMDNGNAotOjEwNzY3MDAwMTEwMzAwNUM4Rjg5MDBBNDI0MDQwMDA0MTEwNDAwNUYzRQotOjEwNzY4MDAwMjQwNTAwMDUxMTA1MDA2NzAwMDAxODIxMDNFMDAwMDgyQgotOjEwNzY5MDAwMDA2MDEwMjE4Rjg5MDA0ODNDMEMwODAwMjU4QzVFQzBEQQotOjEwNzZBMDAwM0MwNDA4MDAyNDg0NUY0MDI0MDMwMDIwMTA2MDAwMEY4NQotOjEwNzZCMDAwMDAwMDU4MjEyNDBEMDAwMjI0MEUwMDAzM0MwRjA4MDA5NgotOjEwNzZDMDAwMjVFRjVFQzA4RDI3MDAwMDE0RTAwMDBCMzBGOUZGRkZBRQotOjEwNzZEMDAwMjUyOTAwMDQwMTI0QzAyQjUzMDAwMDAxMDE4MDQ4MjEwQQotOjEwNzZFMDAwMjQ2M0ZGRkY1NDYwRkZGODhEMjcwMDAwMDE2MDE4MjExQwotOjEwNzZGMDAwMDNFMDAwMDgwMDYwMTAyMTEzMjAwMDMyM0MwNTAwRkY2OQotOjEwNzcwMDAwMzBFMjAwRkYwMDQwMzAyMTEwNDAwMDQyMDAwMDUwMjFENAotOjEwNzcxMDAwMjQwNTAwMDEwMDAwMjAyMTAwMDVDODQwMDBBNkMwMjQ2NwotOjEwNzcyMDAwMTcwMDAwMDMzMzI1MDBGRjE0QTBGRkZCMjQ4NDAwMDE5MQotOjEwNzczMDAwMDEyQ0MwMjMwMDE4MjhDMDAwQUE2MDIxMDA4QzUwMjExMQotOjEwNzc0MDAwMzE0NDAwMUYyNDBDMDAwMTAwOEMxODA0MDAwMzEwMjc5MgotOjEwNzc1MDAwMDBFMjMwMjQxMTBEMDA0MUFEMjYwMDAwMTEwRTAwNEM1NgotOjEwNzc2MDAwMDAwQTE4NDAxMTBEMDAzNjhGODcwMDZDNTEwRTAwNTYyQwotOjEwNzc3MDAwOEY4QzAwNjAyNDBEMDAwNDExMEQwMDVBOEY4RTAwODQ0MAotOjEwNzc4MDAwMjQwRTAwMDUxNTBFRkZEQTAxNjAxODIxMjQwQjE0MzBCOQotOjEwNzc5MDAwMTE0MDAwMDYwMDAwMTgyMThGODQwMEEwMjQ2MzAwMDExRQotOjEwNzdBMDAwMDA2QTQwMkIxNTAwRkZGRDAxNjQ1ODIxOEY4QTAwODA3QwotOjEwNzdCMDAwQUY4OTAwOEMwMTYwMTgyMTI1NDlGRkZGMEEwMDBBRUIwMAotOjEwNzdDMDAwQUY4OTAwODAwMEU1MjAyNDAwMDczNjAyMTA4MEZGRDAzQQotOjEwNzdEMDAwMjQwQTAwMTgwMDA3NTQwMjMxNDYwMEZGMEEwMDBBRjM4OQotOjEwNzdFMDAwMjQwQTAwMTAzQzBDMDgwMDI1OEM1RTgwM0MwNDA4MDAzNAotOjEwNzdGMDAwMjQ4NDVFQzAwQTAwMEFEQTI0MDMwMDEwM0MwQzA4MDA0RQotOjEwNzgwMDAwMjU4QzVFMDAzQzA0MDgwMDI0ODQ1RTgwMEEwMDBBRDlBRQotOjEwNzgxMDAwOEY4OTAwOTAwMDA3MUEwMjMwNjYwMEZGMEEwMDBBRjMwMQotOjEwNzgyMDAwMjQwQTAwMDg4Rjg5MDA4QzNDMEMwODAwMjU4QzVGNDBERQotOjEwNzgzMDAwM0MwNDA4MDAyNDg0NUY1MDBBMDAwQURBMjQwMzAwMDQ5MAotOjEwNzg0MDAwMDAwQTQwODAyNTBCMDAzMDI0RTZGRkZGMDE2MDE4MjE2QwotOjEwNzg1MDAwQUY4OTAwNDgwQTAwMEFFQkFGODYwMDZDMDAwQUM5ODJCMwotOjEwNzg2MDAwMDAxOTc4ODAzQzA3MDgwMDI0RTc1RTgwMDFFNzIwMjFBQQotOjEwNzg3MDAwMDAwQTE4NDI4QzhGMDAwMDMwNzkwMDFGMDMyQzM4MDQ1NgotOjEwNzg4MDAwMDAwN0MwMjcwMUY4NjAyNDBBMDAwQjA4QUM4QzAwMDAzOAotOjEwNzg5MDAwMDAwMzMxNDIwMDA2Mjg4MDAwQUYyODIxMzA2MjAwMUYxQgotOjEwNzhBMDAwOENCODAwMDAyNDYzMDAwMTAwNENDODA0MDAwMzIxNDI4RQotOjEwNzhCMDAwMDAxOTM4MjcwMDA0MTA4MDAzMDczMDI0MDA0RjIwMjFDRQotOjEwNzhDMDAwMEEwMDBCNENBQ0E2MDAwMDAwMEE2OEMwMjVBQjAwMzJEMQotOjEwNzhEMDAwMjU4QUZGRkYwMTYwMTgyMUFGODkwMEE0MEEwMDBBRUI4NgotOjEwNzhFMDAwQUY4QTAwNjAyNTRCMTAzMEFGODkwMDkwMDE2MDE4MjFFRAotOjEwNzhGMDAwMjVDOUZGRkYwQTAwMEFFQkFGODkwMDg0MzA4NjAwMDcyNAotOjEwNzkwMDAwMkNDMjAwMDYxMDQwMDAxNDAwMDAwMDAwMDAwNjQwODA1OQotOjEwNzkxMDAwM0MwMzA4MDAyNDYzNTdCMDAxMDMzODIxOENFNDAwMDBDNQotOjEwNzkyMDAwMDA4MDAwMDgwMDAwMDAwMDI0MDkwMDAzMTBBOTAwMEVEOAotOjEwNzkzMDAwMDAwMDAwMDAyNDBBMDAwNTEwQUEwMDBCMDAwMDAwMDA0RgotOjEwNzk0MDAwMjQwQjAwMDExMEFCMDAwODAwMDAwMDAwOEY4QzAwQTA4OQotOjEwNzk1MDAwMTBBQzAwMDUwMDAwMDAwMDAzRTAwMDA4MDAwMDEwMjE0QQotOjEwNzk2MDAwMEEwMDBBNzkwMEEwMjAyMTBBMDAwQUM3MDBDMDIwMjFDRAotOjEwNzk3MDAwMjdCREZGRTgzMDg0MDBGRjI0MDMwMDAyMTA4MzAwMEJDMgotOjEwNzk4MDAwQUZCRjAwMTAyNDA2MDAwMzEwODYwMDNBMjQwODAwMDQ0QwotOjEwNzk5MDAwMTA4ODAwNjgyNDBFMDAwNTEwOEUwMDdGMkNBRjE0MzA3NAotOjEwNzlBMDAwOEZCRjAwMTAwM0UwMDAwODI3QkQwMDE4MkNBMjAwMzA5NAotOjEwNzlCMDAwMTQ0MEZGRkM4RkJGMDAxMDI0QTVGRkQwMDAwNTMxQzI4QQotOjEwNzlDMDAwMDAwNjY4ODAzQzA3MDgwMDI0RTc1RUMwMDFBNzMwMjE1QwotOjEwNzlEMDAwOENDOTAwMDAwMDA1Mjg4MjMwQUMwMDFGMjQwQjAwMDE3OAotOjEwNzlFMDAwMDE4QjUwMDQ4Rjg0MDA0ODAxMkE0MDI1QUNDODAwMDA1OAotOjEwNzlGMDAwOEM4MzAwMDA1MDYwMDAwMUFGODYwMDQ4OEY5ODAwNkNCNwotOjEwN0EwMDAwMzBBRTAwMDEyNEE2RkZGRjI3MEYwMDAxMTVDMDAwMDJDMQotOjEwN0ExMDAwQUY4RjAwNkMyNEE2MDAwMTAwMDY0MTQyMDAwODIwODBDMAotOjEwN0EyMDAwMDA4NzE4MjE4Qzc5MDAwMDMwQzIwMDFGMjQwNjAwMDE1NQotOjEwN0EzMDAwMDA0NkY4MDQwMzNGMzgyNDEwRTBGRkRBOEZCRjAwMTAzRgotOjEwN0E0MDAwMDAwNUMxODIwMDE4NzA4MDNDMEYwODAwMjVFRjVFODBBMQotOjEwN0E1MDAwMDFDRjQ4MjE4RDJCMDAwMDAwMDU2ODQyMzFBNTAwMUY5MQotOjEwN0E2MDAwMDBBNjYwMDQwMTZDNTAyNTI3QkQwMDE4MDNFMDAwMDg0MwotOjEwN0E3MDAwQUQyQTAwMDAyQ0E3MDAzMDE0RTBGRkNBOEZCRjAwMTAxMQotOjEwN0E4MDAwMzBCOTAwMDcxNzIzRkZDNzI0QThGRkNFMDAwODZBMDJGOQotOjEwN0E5MDAwMDAwRDYwODAzQzBCMDgwMDI1NkI1RTgwMDE4QjMwMjE1RgotOjEwN0FBMDAwOENDNDAwMDAwMDA4MjhDMjMwQUEwMDFGMjQwODAwMDE2RQotOjEwN0FCMDAwMDE0ODQ4MDQ4RjgyMDBBNDAwODkxODI1QUNDMzAwMDA0NwotOjEwN0FDMDAwOEM1RjAwMDA1M0UwMDAwMUFGODYwMEE0MDAwNTcwNDAwOQotOjEwN0FEMDAwMDAwRTc5NDIwMDBGMjg4MDNDMDQwODAwMjQ4NDVFQzAxOAotOjEwN0FFMDAwMDBBNDE4MjE4QzZCMDAwMDI1REYwMDAxMzFDRDAwMUZBMAotOjEwN0FGMDAwMDAxRjUxNDIwMUE4NjAwNDAxNkM0ODI1MDAwQTEwODA1MwotOjEwN0IwMDAwQUM2OTAwMDAwMDQ0MjgyMThDQTYwMDAwOEY5ODAwNjAxQQotOjEwN0IxMDAwMzNGOTAwMUY4RkJGMDAxMDAzMjgzODA0MDBDNzc4MjVGMQotOjEwN0IyMDAwMjcwRTAwMDEyN0JEMDAxOEFDQUYwMDAwMDNFMDAwMDhERAotOjEwN0IzMDAwQUY4RTAwNjAyNEE1RUZEMDJDQjgwNDAwMTMwMEZGOTk4RAotOjEwN0I0MDAwOEZCRjAwMTAwMDA1MzE0MjAwMDY1ODgwM0MwQTA4MDAzMwotOjEwN0I1MDAwMjU0QTVFMDAwMTZBMzAyMThDQzQwMDAwMzBBMzAwMUY1QQotOjEwN0I2MDAwMjQwOTAwMDEwMDY5MTAwNDhGOTkwMDkwMDA4MkY4MjUxMwotOjEwN0I3MDAwQUNERjAwMDA4RjI3MDAwMDUwRTAwMDAxQUY4NjAwOTBDRQotOjEwN0I4MDAwOEY4RDAwODQ4RkJGMDAxMDI3QkQwMDE4MjVBQzAwMDEyOQotOjEwN0I5MDAwMDNFMDAwMDhBRjhDMDA4NDE1RTBGRjgyOEZCRjAwMTA2NwotOjEwN0JBMDAwOEY4NjAwQTAwMDA2MTA0MDAwNDZGODIxMDAxRjIxMDAyQgotOjEwN0JCMDAwMDNFNEM4MjEwMDE5Mzg0MDI0RjgxNDMwMDBCODQwMkJFMQotOjEwN0JDMDAwMTEwMEZGNzg4RkJGMDAxMDI0QTRFQkQwMEUwMDAyMTMyOQotOjEwN0JEMDAwMDBDMDI4MjEwMDAyNzk0MjAwMEY3MDgwM0MwRDA4MDA4RgotOjEwN0JFMDAwMjVBRDVGNDAwMUNEMjAyMThDOEIwMDAwMzA0QzAwMUY2MwotOjEwN0JGMDAwMjQwNjAwMDEwMTg2MTgwNDhGODkwMDhDMDE2MzUwMjUzQQotOjEwN0MwMDAwQUM4QTAwMDA4RDI1MDAwMDUwQTAwMDAxQUY4NDAwOENEQwotOjEwN0MxMDAwOEY5ODAwODA4RkJGMDAxMDI3QkQwMDE4MjcwODAwMDEzMwotOjEwN0MyMDAwMDNFMDAwMDhBRjg4MDA4MDMwQTUwMDA3MjQwMzAwMDNBQwotOjEwN0MzMDAwMTBBMzAwMTAyOEEyMDAwNDE0NDAwMDA4MjQwNzAwMDIyQQotOjEwN0M0MDAwMjQwMzAwMDQxMEEzMDAxNTI0MDgwMDA1MTBBODAwMEY0OQotOjEwN0M1MDAwOEY4NTAwQTAwM0UwMDAwODAwMDAwMDAwMTRBN0ZGRkRDRQotOjEwN0M2MDAwMDA4MDI4MjExNEMzRkZGQjI0MDQwMDAyMEEwMDBCOEJCMAotOjEwN0M3MDAwMDAwMDAwMDAyNDA5MDAwNTAwODAyODIxMTBDOUZGRkIzNgotOjEwN0M4MDAwMjQwNDAwMDMwM0UwMDAwODAwMDAwMDAwMTRDNUZGRjExNQotOjEwN0M5MDAwMDA4MDI4MjEwQTAwMEI4QjI0MDQwMDA1MjQwQTAwMDExRgotOjEwN0NBMDAwMDA4MDI4MjExMENBRkZGMTI0MDQwMDA0MDNFMDAwMDgyQQotOjEwN0NCMDAwMDAwMDAwMDAyN0JERkZFMEFGQjAwMDEwMDAwNTgxQzI0QQotOjEwN0NDMDAwMjYwM0ZGRDAyNEM1MDAzRjJDNjIyM0QwMjRDNjAwN0ZBQQotOjEwN0NEMDAwQUZCMjAwMThBRkIxMDAxNEFGQkYwMDFDMzA5MTAwRkY2RAotOjEwN0NFMDAwMDAwNjkxQzIwMDA1Mjk4MjAyMDAyMDIxMTA0MDAwMDhGMAotOjEwN0NGMDAwMjQwM0ZGRkYwRTAwMEE0QjAwMDAwMDAwMDIwMDIwMjFCOQotOjEwN0QwMDAwMDIyMDI4MjEwRTAwMEMzOTAyNDAzMDIxMDAwMDE4MjFFOQotOjEwN0QxMDAwOEZCRjAwMUM4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTBGRAotOjEwN0QyMDAwMDA2MDEwMjEwM0UwMDAwODI3QkQwMDIwMjdCREZGRDgxOAotOjEwN0QzMDAwMjRBMjAwN0ZBRkIzMDAxQ0FGQjIwMDE4MDAwMjk5QzJBQQotOjEwN0Q0MDAwMzA5MjAwRkYyNEEzMDAzRjAyNDAyMDIxMDI2MDI4MjEzRQotOjEwN0Q1MDAwQUZCMTAwMTRBRkIwMDAxMEFGQkYwMDIwMEUwMDBCNkUyQgotOjEwN0Q2MDAwMDAwMzg5ODIwMDQwODAyMTAwNDAyMDIxMDIyMDI4MjEzOAotOjEwN0Q3MDAwMTQ0MDAwMDkwMDAwMTgyMThGQkYwMDIwOEZCMzAwMUNBMQotOjEwN0Q4MDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMDA2MDEwMjE2NgotOjEwN0Q5MDAwMDNFMDAwMDgyN0JEMDAyODBFMDAwOUZDMDAwMDAwMDBEOQotOjEwN0RBMDAwMDA0MDI4MjEwMjAwMjAyMTEwNTFGRkYzMDAxMDE5QzBDQgotOjEwN0RCMDAwMEUwMDBBNEIwMDAwMDAwMDAyMDAyMDIxMDI0MDI4MjE5MgotOjEwN0RDMDAwMEUwMDBDMzkwMjYwMzAyMThGQkYwMDIwOEZCMzAwMUNFMQotOjEwN0REMDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMDAwMDE4MjE2RQotOjEwN0RFMDAwMDA2MDEwMjEwM0UwMDAwODI3QkQwMDI4MzA4NEZGRkY1OQotOjEwN0RGMDAwMzBBNUZGRkYxMDgwMDAwNzAwMDAxODIxMzA4MjAwMDEyRAotOjEwN0UwMDAwMTA0MDAwMDIwMDA0MjA0MjAwNjUxODIxMTQ4MEZGRkI4RQotOjEwN0UxMDAwMDAwNTI4NDAwM0UwMDAwODAwNjAxMDIxMTBDMDAwMDdBMgotOjEwN0UyMDAwMDAwMDAwMDA4Q0EyMDAwMDI0QzZGRkZGMjRBNTAwMDQ2RgotOjEwN0UzMDAwQUM4MjAwMDAxNEMwRkZGQjI0ODQwMDA0MDNFMDAwMDhBRgotOjEwN0U0MDAwMDAwMDAwMDAxMEEwMDAwODI0QTNGRkZGQUM4NjAwMDA4MwotOjEwN0U1MDAwMDAwMDAwMDAwMDAwMDAwMDI0MDJGRkZGMjQ2M0ZGRkY3OQotOjEwN0U2MDAwMTQ2MkZGRkEyNDg0MDAwNDAzRTAwMDA4MDAwMDAwMDAwQwotOjEwN0U3MDAwMzBBNUZGRkY4RjQyMDFCODA0NDBGRkZFM0MwNzYwMTVBQwotOjEwN0U4MDAwMDBBNzMwMjUzQzAzMTAwMEFGNDQwMTgwQUY0MDAxODRCRgotOjEwN0U5MDAwQUY0NjAxODgwM0UwMDAwOEFGNDMwMUI4OEY4NTAwRDBFQQotOjEwN0VBMDAwMkM4NjQwMDAwMDgwMTgyMThDQTcwMDg0MDA4NzEwMkJBRQotOjEwN0VCMDAwMTQ0MDAwMTAwMDAwMDAwMDhDQTgwMDg0MkQwNjQwMDAzMwotOjEwN0VDMDAwNTBDMDAwMEYyNDAzNDAwMDhDQUEwMDg0MDA4QTQ4MkI3NQotOjEwN0VEMDAwNTEyMDAwMDE4Q0EzMDA4NDAwMDM1QTQyMDAwQjIwODAzMwotOjEwN0VFMDAwM0MwNTA4MDAyNEE1NTgwMDAwODUxODIxMDNFMDAwMDg3RgotOjEwN0VGMDAwOEM2MjAwMDAxNEMwRkZGNDAwMDAwMDAwMjQwMzQwMDA2NgotOjEwN0YwMDAwMDAwMzVBNDIwMDBCMjA4MDNDMDUwODAwMjRBNTU4MDBCRAotOjEwN0YxMDAwMDA4NTE4MjEwM0UwMDAwODhDNjIwMDAwOEY4MzAwRDBFOAotOjEwN0YyMDAwOTA2NjAwRDAyNEM1MDAwMUEwNjUwMEQwOEY4NTAwRDBFOAotOjEwN0YzMDAwOTA2NDAwRDA5MEEyMDBEMjEwNDQwMDE3MDAwMDAwMDAwRQotOjEwN0Y0MDAwOTM2QzAwNzg4RjhCMDBCQzMxOEEwMEZGQTE2QTAwMEMxMwotOjEwN0Y1MDAwMjU0OTAwMDE5Mzg3MDBDNDMxMjIwMEZGMzA0ODAwN0Y4QgotOjEwN0Y2MDAwMTEwNzAwMEIwMDAyNjgyN0EzNjIwMDc4OEY0RTAxNzg4QQotOjEwN0Y3MDAwMDVDMEZGRkU4Rjk5MDBCMDI0MTgwMDAyM0MwRjEwMDBDRQotOjEwN0Y4MDAwQUY1OTAxNDBBMzU4MDE0NDAzRTAwMDA4QUY0RjAxNzgwNgotOjEwN0Y5MDAwMEEwMDBEMDkzMUEyMDA4MEEwQTAwMEQwMEEwMDBDRkY0OQotOjEwN0ZBMDAwMDAwMDAwMDA4Rjg3MDBEMDI3QkRGRkM4QUZCRjAwMzBBMgotOjEwN0ZCMDAwQUZCNzAwMkNBRkI2MDAyOEFGQjUwMDI0QUZCNDAwMjA5NwotOjEwN0ZDMDAwQUZCMzAwMUNBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTBENwotOjEwN0ZEMDAwOTRFMzAwRTA5NEUyMDBFMjEwNDMwMEQ3MjQwNUZGRkZBMQotOjEwN0ZFMDAwM0MwNDdGRkYzNDk3RkZGRjI0MTVGRjgwMEEwMDBERjA0QgotOjEwN0ZGMDAwM0MxNjAwMEUxMDhBMDBEMThGQkYwMDMwOEY5MTAwQjA2OAotOjEwODAwMDAwM0MxODA4MDA4RjE4MDA1QzAwMTIzMEMwMDAxMjkxNDAyQwotOjEwODAxMDAwMDMxMTcwMjEwMUQ1NzgyNEFGNEYwMDJDOTRFQzAwRTJCRAotOjEwODAyMDAwMzFDRDAwN0YwMUJBNTgyMTMxOEE3RkZGMDE3NjQ4MjE4NgotOjEwODAzMDAwMDAwQTgwNDAwMjA5MTAyMTk0NTMwMDAwM0MwODA4MDAwNwotOjEwODA0MDAwOEQwODAwNTgwMjQ2QzAyMTMyNzMzRkZGMDAxMzE5ODA4QgotOjEwODA1MDAwMDEwMzIwMjEwMjI0MjgyMTMwQkYwMDdGMDNGQUM4MjExOAotOjEwODA2MDAwMDBCNUEwMjRBRjU0MDAyQzAzMzZBMDIxOEU4NzAwMTA0OQotOjEwODA3MDAwOEU4RjAwMzAwMzc4NTgyMTI1NkQwMDg4MDBFRjcwMjMyMwotOjEwODA4MDAwMjQwQzAwMDJBRThFMDAxMEFGOEQwMEFDQTE2QzAwODhGNQotOjEwODA5MDAwOTc2QTAwM0M4RTg0MDAzMDhGOTEwMEFDMEUwMDBDRDZBNQotOjEwODBBMDAwMzE1MEZGRkYwMDAyNEI4MDAyMDk0MDI1M0MwMjQyMDA5NAotOjEwODBCMDAwMDEwMjIwMjVBRTI0MDAwNDhFODMwMDA0OEY4RDAwQUNDNQotOjEwODBDMDAwOEU4NjAwMDAyNDBFMDAwOEFEQTMwMDFDQURBNjAwMTg4QgotOjEwODBEMDAwQURBMDAwMENBREEwMDAxMDkyOUYwMDBBMzNGOTAwRkY4NAotOjEwODBFMDAwQTVCOTAwMTQ5Njg1MDAwODNDMUYwMDBDQTVBNTAwMTYzNAotOjEwODBGMDAwOTI5ODAwMEEzMzExMDBGRkE1QjEwMDIwOTY5MDAwMDg2NQotOjEwODEwMDAwMjQxODAwMDVBNUIwMDAyMkFEQTAwMDI0OTI4RjAwMEIxQQotOjEwODExMDAwMjQxMEMwMDAzMUU3MDBGRkE1QTcwMDAyQTFBRTAwMDFCNgotOjEwODEyMDAwOEU4QzAwMzA4RjhCMDBBQzhGODQwMEIwQUQ2QzAwMDg1QgotOjEwODEzMDAwM0MwQTA4MDA4RDRBMDA1NDAxNDQ0ODIxMDEzNTQwMjQ3RQotOjEwODE0MDAwQUY0ODAwMjgzQzAyMDgwMDhDNDIwMDU0MDA0NDMwMjExMwotOjEwODE1MDAwMzBDMzAwN0YwMDdBQzgyMTAzM0YyODIxMDI0NTg4MjFDRgotOjEwODE2MDAwQUY5MTAwQkNBRjg1MDBDMEEyMzgwMDAwOEY4QTAwQkM3MAotOjEwODE3MDAwMjQwM0ZGQkYyNDE4RkZERjk1NEYwMDAyMDFGMDM4MjRDRAotOjEwODE4MDAwMDBGMzcwMjVBNTRFMDAwMjkxNEQwMDAyMzFBQzAwM0Y3NgotOjEwODE5MDAwMzU4QjAwNDBBMTRCMDAwMjhGODYwMEJDOEY4OTAwRDAzOAotOjEwODFBMDAwQUNDMDAwMDQ4RDI4MDA3QzNDMDk4MDAwQUNDODAwMDhFRAotOjEwODFCMDAwOTBDNDAwMEQzMDgyMDA3RkEwQzIwMDBEOEY4NTAwQkNFRQotOjEwODFDMDAwOTBCRjAwMEQwM0UzQzgyNEEwQjkwMDBEOEY5MTAwQkMzRgotOjEwODFEMDAwOTIzMzAwMEQwMjc4OTAyNEEyMzIwMDBEOEU5MDAwMzQ2QwotOjEwODFFMDAwOEY4QjAwQkNBRDcwMDAxMDhFODcwMDJDOEU4RjAwMzBGRQotOjEwODFGMDAwMDBFRjcwMjNBRDZFMDAxNDkxNkQwMDE4MzFBQzAwN0Y1QwotOjEwODIwMDAwQTE2QzAwMTg4RjlGMDBCQzhFOEEwMDMwOEZFODAwMTg4OAotOjEwODIxMDAwMDE1NzIwMjQwMTA5MzAyNDAwQzQxMDI1QUZFMjAwMThDMgotOjEwODIyMDAwOTI4MzAwMEFBM0UzMDAxQzk2OTkwMDA4OEY4NTAwQkM4NgotOjEwODIzMDAwOEY5ODAwRDBBNEI5MDAxRThFOTAwMDMwOEU4NDAwMzAzQwotOjEwODI0MDAwMEUwMDAyMTM4RjA1MDA4NDhGODUwMEQwMDAwMjkxNDAzQwotOjEwODI1MDAwMDAwMjk5MDA5MEFGMDBCQzAyNTM4ODIxMDA0MDMwMjFGOQotOjEwODI2MDAwMzFFNzAwMDIxMEUwMDAwMzAyMTE4MDIxMDAwMjkwODAzQgotOjEwODI3MDAwMDIxMjgwMjE5MEI5MDBCQzMzMjcwMDA0MTBFMDAwMDJGNAotOjEwODI4MDAwMDAwNkY4ODAwMjFGODAyMThFOTgwMDMwOEY4QjAwQkM4MgotOjEwODI5MDAwMjQwNjgwMDAzMzBGMDAwMzAwMEY3MDIzMzFDRDAwMDM0QwotOjEwODJBMDAwMDIwRDYwMjFBRDZDMDAwNDk0QTQwMEUyOTRBQTAwRTJFNwotOjEwODJCMDAwOTRCMDAwRTIzMTQ5N0ZGRjI1MjIwMDAxMzA1MzdGRkY1NwotOjEwODJDMDAwMDIwNjE4MjQwMDczNDAyNUE0QTgwMEUyOTRBNDAwRTI0QQotOjEwODJEMDAwM0MxNDA4MDA4RTk0MDA2MDMwOTE3RkZGMTIzNDAwMjIxRAotOjEwODJFMDAwMDAwMDAwMDAwRTAwMENGNjAwMDAwMDAwOEY4NzAwRDA5OAotOjEwODJGMDAwMDAwMDI4MjE5NEYzMDBFMDk0RjAwMEUyMTIxMzAwMEYzNAotOjEwODMwMDAwOEZCRjAwMzA5MEU5MDBEMDkwRTgwMEQxMzEzMjAwRkZGQgotOjEwODMxMDAwMzEwNDAwRkYwMjQ0MzAyQjE0QzBGRjM2MjY0QTAwMDEwRQotOjEwODMyMDAwOTBFRTAwRDIyNjRCMDAwMTMxQ0QwMEZGMDA4RDYwMjE4MAotOjEwODMzMDAwMTU4QkZGMzM4RjkxMDBCMDhGQkYwMDMwOEZCNzAwMkNBQgotOjEwODM0MDAwOEZCNjAwMjg4RkI1MDAyNDhGQjQwMDIwOEZCMzAwMUM5NwotOjEwODM1MDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMDBBMDEwMjE1MAotOjEwODM2MDAwMDNFMDAwMDgyN0JEMDAzODk0QTMwMEUyMDA2NjQwMjQyMwotOjEwODM3MDAwQTRBODAwRTI5MEE0MDBFMjkwQjkwMEUyMzA5MTAwRkZDRQotOjEwODM4MDAwMDAxMUExQzIwMDE0RjgyNzAwMUYzOUMwMzMzMjAwN0Y0QQotOjEwODM5MDAwMDI0NzMwMjUwQTAwMERFOEEwQTYwMEUyMzA4NEZGRkY2NgotOjEwODNBMDAwMzBBNUZGRkZBRjQ0MDAxOEFGNDUwMDFDMDNFMDAwMDhGNAotOjEwODNCMDAwOEY0MjAwMTQyN0JERkZCOEFGQjAwMDIwOEY5MDAwRDBDRgotOjEwODNDMDAwMzA4NEZGRkZBRkE0MDAxMEFGQkYwMDQ0QUZCRTAwNDAzOQotOjEwODNEMDAwQUZCNzAwM0NBRkI2MDAzOEFGQjUwMDM0QUZCNDAwMzAzMwotOjEwODNFMDAwQUZCMzAwMkNBRkIyMDAyOEFGQjEwMDI0QTdBMDAwMTg5MwotOjEwODNGMDAwOTIwNjAwRDE5MjA1MDBEMDMwQzQwMEZGMzBBMzAwRkZFOAotOjEwODQwMDAwMDA2NDEwMkIxMDQwMDEyMkFGQTAwMDE0OTIwOTAwRDA4QwotOjEwODQxMDAwOEZCNTAwMTAzMTI4MDBGRjAwODgzODIzMjRGNEZGRkZCNwotOjEwODQyMDAwMDAxNDg4MkIwMDE1OTgyQjAyMzM5MDI0NTI0MDAxMjYwQgotOjEwODQzMDAwOEZCNDAwMTQ5NjFFMDAxMjk2MUYwMDEwOEZCNzAwMTAwNAotOjEwODQ0MDAwMDNERkM4MjMwMDE3MTQwMDAwMTlDNDAwMDAwMjI0MDMyRQotOjEwODQ1MDAwMDAxODE0MDMwMkUyQjAyQTUyQzAwMDAxMDA0MDIwMjE5QgotOjEwODQ2MDAwMDI4NDI4MkIxMEEwMDAwMjAwODAxODIxMDI4MDE4MjEwRAotOjEwODQ3MDAwMDAwMzNDMDAwMDA3MUMwMzMwNjRGRkZGMkM4NjAwMDk0QQotOjEwODQ4MDAwMTRDMDAwMDIwMDYwQjgyMTI0MTcwMDA4OEUwQTAwMDhGQQotOjEwODQ5MDAwMDAxNzY5ODA4RTA5MDAwQzMxQUJGRkZGM0MwQzAwMTAwNwotOjEwODRBMDAwMDE2QzQwMjUyNzUyMDQwMEFGNEEwMDM4QUY5MjAwQjg1MwotOjEwODRCMDAwQUY0OTAwM0NBRjQ4MDAzMDAwMDAwMDAwMDAwMDAwMDA2MQotOjEwODRDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQwotOjEwODREMDAwMDAwMDAwMDAwMDAwMDAwMDhGNEYwMDAwMzFFRTAwMjA3RgotOjEwODRFMDAwMTFDMEZGRkQwMDE3OTgyQTAyNzExMDI0MEEwMDBFODNBNAotOjEwODRGMDAwMDAwMEIwMjE1NUUwMDEwMTkyNTgwMDAxMzExMzAwODBDNQotOjEwODUwMDAwMTI2MDAxQ0YwMTIwMjAyMTk2NTUwMDEyMzJBNUZGRkZGNQotOjEwODUxMDAwMEUwMDBDQ0JBN0I1MDAxODhGOTAwMEQwMDI5MUEwMjNCRAotOjEwODUyMDAwMjZDRDAwMDE4RjkxMDBCODAwMERCNDAwMDAxNkI0MDNGMQotOjEwODUzMDAwMjYzODAwNDAwMkQ3NTgyQTAwMTQ4ODJCMjQwNTAwMDE1MQotOjEwODU0MDAwMDMwMDkwMjEwMTcxMTAyNEFGOTgwMEI4QUZBNTAwMTQ2QQotOjEwODU1MDAwMTA0MDAxQkM4Rjg5MDBCMDNDMEMwODAwOEQ4QzAwNTQ4OQotOjEwODU2MDAwMjQwQkZGODA5MjFFMDBEMDAxODk1MDIxMDE0QjI4MjQ0QQotOjEwODU3MDAwOTIxOTAwRDBBRjQ1MDAyODhFNDcwMDEwM0MwODA4MDAzMwotOjEwODU4MDAwOEQwODAwNTgzQzE4MDgwMDhGMTgwMDU0MzBFMzNGRkY1NgotOjEwODU5MDAwMDAwMzIxODAwMTA0MzAyMTAxMjY1ODIxMjQwMkZGODA5QwotOjEwODVBMDAwMDE2MkY4MjQ5MjBDMDBEMEFGNUYwMDJDOTI0ODAwMDBDQQotOjEwODVCMDAwMzNEMTAwRkYzMzM1MDBGRjAzMDk5ODIxMDAxMTcxNDBDQQotOjEwODVDMDAwMDAxNTc4QzAzMjZEMDA3RjAxQ0YzODIxMDFCQTI4MjExMwotOjEwODVEMDAwMzE4MzAwRkYzMTY0MDA3RjNDMEEwMDBDMDBBQTg4MjEyRgotOjEwODVFMDAwMDM2N0YwMjEwMDAzMzE0MDAwOUExMDIxMzEwODAwM0Y1OQotOjEwODVGMDAwM0MxRjAwMEUwMEQxQzAyMTAwNUY5ODIxMjdEOTAwODhDMAotOjEwODYwMDAwMkQxNTAwMDhBRjkxMDBDMEFGOTkwMEFDQUY5ODAwQkMyOQotOjEwODYxMDAwQUY5MzAwQjQxMkEwMDE4QTAwMDA4ODIxMjQwRTAwMDE0QgotOjEwODYyMDAwMDEwRTQwMDQzMTBEMDA1RDExQTBGRkIyMzEwRjAwMDJCOAotOjEwODYzMDAwOEU0QTAwMjgzQzAzMDA4MDNDMDRGRkVGQUU2QTAwMDAzNQotOjEwODY0MDAwOEU0NTAwMjRBMjYwMDAwQTM0ODhGRkZGQUU2NTAwMDQ1NgotOjEwODY1MDAwOTI0NzAwMkMzQzFGRkY5RjM3RkVGRkZGQTI2NzAwMENENAotOjEwODY2MDAwOEU2MjAwMEMzQzE4MDA0MEEyNjcwMDBCMDA0MzMwMjVDRQotOjEwODY3MDAwMDBDOEM4MjQwMzNFODgyNDAyMzhBODI1QUU3NTAwMEMyMwotOjEwODY4MDAwOEU0OTAwMDRBRTYwMDAxODNDMEYwMEZGQUU2OTAwMTQ3NAotOjEwODY5MDAwOEU0RDAwMkMzNUVFRkZGRjhGOEIwMEIwMDFBRTYwMjRCNQotOjEwODZBMDAwQUU2QzAwMTA4RTQ3MDAwOEE2NjAwMDA4OTY0NTAwMTJDOAotOjEwODZCMDAwQUU2NzAwMjA4RTQyMDAwQzMwQjAzRkZGMDAxMDUxODBBQQotOjEwODZDMDAwQUU2MjAwMjQ4RTVFMDAxNDAxNEIxODIxMzBBNDAwMDExQwotOjEwODZEMDAwQUU3RTAwMjg4RTU5MDAxODAwMDMzMUMyMDAwNDQzODA4QQotOjEwODZFMDAwQUU3OTAwMkM4RTUxMDAxQzAwQzhGODIxQTY3RjAwMUMxQQotOjEwODZGMDAwQUU3MTAwMzA5NjU4MDAwMjhFNTUwMDIwQTY3ODAwMUVGQwotOjEwODcwMDAwQUU3NTAwMzQ5MjQ5MDAzMzMxMzAwMDA0NTYwMDAwMDU0NAotOjEwODcxMDAwOTI1MDAwMDA4RjhDMDBEMDhEOEIwMDdDQUU2QjAwMzBBRgotOjEwODcyMDAwOTI1MDAwMDA4RjhGMDBCQ0ExRjAwMDAwOTI0RTAwMzNFOQotOjEwODczMDAwMzFDRDAwMDI1MUEwMDAwNzkyNUUwMDAxOEY4OTAwQkM3QwotOjEwODc0MDAwMjQxOEZGODA5MTMxMDAwMDAzMTFBODI1QTEzNTAwMDBGNQotOjEwODc1MDAwOTI1RTAwMDE4Rjk5MDBCQzI0MDlGRkJGMjQwQkZGREY0QwotOjEwODc2MDAwQTMzRTAwMDE4Rjk1MDBCQzkyQjgwMDBEMzMxMTAwN0YyRAotOjEwODc3MDAwQTJCMTAwMEQ4RjhFMDBCQzkxRDAwMDBEMDIwOTc4MjRBQgotOjEwODc4MDAwQTFDRjAwMEQ4Rjg4MDBCQzhFNkQwMDE0OTEwQTAwMERFMgotOjEwODc5MDAwMkRBQzAwMDEwMDBDMjk0MDAxNEIzODI0MDBFNTE4MjVDMAotOjEwODdBMDAwQTEwMzAwMEQ5NjQyMDAxMjhGODgwMEJDOEY4NzAwRDA3NQotOjEwODdCMDAwQTUwMjAwMDI4RTQ1MDAwNDkwRkYwMEJDMzBBNDAwMDMxNwotOjEwODdDMDAwMDAwNDMwMjMzMERFMDAwMzAwQkUxMDIxMzNGOTAwMDIyNAotOjEwODdEMDAwMTcyMDAwMDIyNDQ0MDAzNDI0NDQwMDMwOTBFMjAwQkNGRQotOjEwODdFMDAwMDBBMjMwMjQzMERGMDAwNDE3RTAwMDAyMjQ4MzAwMDREQwotOjEwODdGMDAwMDA4MDE4MjE4RjhGMDBBQzI0MDkwMDAyQUQwMzAwMDQxMwotOjEwODgwMDAwQTFFOTAwMDA5MjRFMDAzRjhGOEQwMEFDQTFBRTAwMDFBNwotOjEwODgxMDAwOEY5NTAwQUM5MjRDMDAzRjhFNDQwMDA0QTZBQzAwMDI0MQotOjEwODgyMDAwOTc2QjAwM0MwRTAwMENENjMxNzBGRkZGMDAwMjUzODBBNgotOjEwODgzMDAwMDIwQTM4MjUzQzA1NDIwMDAwRTUxODI1QUVBMzAwMDRENQotOjEwODg0MDAwOEY4NjAwQUM4RTQ4MDAzOEFDQzgwMDE4OEU0NDAwMzRDNwotOjEwODg1MDAwQUNDNDAwMUNBQ0MwMDAwQ0FDQzAwMDEwQTRDMDAwMTQyMAotOjEwODg2MDAwQTRDMDAwMTZBNEMwMDAyMEE0QzAwMDIyQUNDMDAwMjRGNAotOjEwODg3MDAwOEU2NDAwMTQ1MDgwMDAwMTI0MDQwMDAxQUNDNDAwMDg4MAotOjEwODg4MDAwMEUwMDBDRjYyNDExMDAwMTBBMDAwRTc2OEY5MDAwRDAyNQotOjEwODg5MDAwOTIwRjAwRDI5MjBFMDBEMDhGQjUwMDEwMzFFQjAwRkY4NgotOjEwODhBMDAwMzFDRDAwRkYwMDhENjAyMzAxNkM1MDIxMjU1NEZGRkY2NgotOjEwODhCMDAwMDAxNDg4MkIwMDE1OTgyQjAyMzM5MDI0MTY0MEZFRERGRgotOjEwODhDMDAwMDAwMDAwMDA4RkI0MDAxNDhGQkYwMDQ0OEZCRTAwNDAzMgotOjEwODhEMDAwM0E4MjAwMDE4RkI3MDAzQzhGQjYwMDM4OEZCNTAwMzQ2NAotOjEwODhFMDAwOEZCNDAwMzA4RkIzMDAyQzhGQjIwMDI4OEZCMTAwMjREQQotOjEwODhGMDAwOEZCMDAwMjAwM0UwMDAwODI3QkQwMDQ4MzMxMTAwMjA5RQotOjEwODkwMDAwMTIyMDAwRUYyNDE1MDAwMTkyMUUwMEJDMjQxRjAwMDE1QwotOjEwODkxMDAwMDAwMEE4MjEzM0Q5MDAwMTEzMjAwMDBEQUZCRjAwMUNCNwotOjEwODkyMDAwOEU0NDAwMTQ4RTA4MDA4NDAwODgxMDJCMTQ0MDAwMDIyRQotOjEwODkzMDAwMDA4MDMwMjE4RTA2MDA4NDhFMDMwMDY0MDBDM0E4MkJDMwotOjEwODk0MDAwMTZBMDAwMDIwMEMwMjAyMThFMDQwMDY0MDA4MEE4MjEyRgotOjEwODk1MDAwOEU0NzAwMTQ4RTA1MDA2NDAwRTUzMDJCMTRDMDAwMDIyMQotOjEwODk2MDAwMDBFMDIwMjE4RTA0MDA2NDAwOTVGMDIzMTNDMDAwMDQ3MQotOjEwODk3MDAwOEZBQzAwMUMyNDBBMDAwMkFGQUEwMDFDOEZBQzAwMUNBNAotOjEwODk4MDAwMDI4QzU4MkIxNTYwMDBBODAwMDAxODIxOEU0RjAwMzg2QgotOjEwODk5MDAwOEU2RDAwMEMzQzBFMDA4MEFFNkYwMDAwOEU0QTAwMzRERAotOjEwODlBMDAwM0MxMEZGOUYwMUFFNTgyNUFFNkEwMDA0OTI0NjAwM0Y3RQotOjEwODlCMDAwMzYwQ0ZGRkYwMTZDMzgyNDNDMDUwMDIwM0MwM0ZGRUYyMAotOjEwODlDMDAwQTI2NjAwMEIwMEU1MTAyNTM0NjhGRkZGOEY4NzAwQjgxMgotOjEwODlEMDAwMDA0OEY4MjQzQzA0MDAwODAzRTRDODI1QUU3OTAwMENFNAotOjEwODlFMDAwOENGODAwMTRBRTYwMDAxODAyQkU3ODIxQUU3ODAwMTQzNgotOjEwODlGMDAwOENGMTAwMThBRTcxMDAxQzhDRTkwMDA4QUU2OTAwMjRFRgotOjEwOEEwMDAwOENFRTAwMENBRTZGMDAyQ0FFNjAwMDI4QUU2RTAwMjAyNQotOjEwOEExMDAwQTY2MDAwMzhBNjYwMDAzQThDRUQwMDE0MDFCNTgwMjNGMgotOjEwOEEyMDAwMDIxRTkwMjMxMjQwMDAxMUFFNzIwMDEwOTBFQTAwM0QyOQotOjEwOEEzMDAwOEU2NTAwMDQ4RTY0MDAwMDAwMEEzMTAwMDBBNkM4MjE4MwotOjEwOEE0MDAwMDAwMDEwMjEwMzI2NDAyQjAwODJGODIxMDNFOEMwMjFGQQotOjEwOEE1MDAwQUU3OTAwMDRBRTc4MDAwMDkwRjEwMDNEQTI3MTAwMEFFQQotOjEwOEE2MDAwOEY4OTAwQjg5NTMyMDAwNkE2NzIwMDA4OEY5ODAwQUM3NgotOjEwOEE3MDAwMjQxOTAwMDIwMkEwMjAyMUEzMTkwMDAwOTc2OTAwM0NEQwotOjEwOEE4MDAwOEY5MjAwQUMwRTAwMENENjMxMzFGRkZGMDAwMjdCODBDQwotOjEwOEE5MDAwOEY4NTAwQjgwMjJGNjgyNTNDMEU0MjAwMDFBRTgwMjU2QwotOjEwOEFBMDAwQUU1MDAwMDQ4Rjg0MDBBQzhDQUMwMDM4QUM4QzAwMTg0NQotOjEwOEFCMDAwOENBQjAwMzRBQzhCMDAxQ0FDODAwMDBDQUM4MDAwMTA4NAotOjEwOEFDMDAwQTQ4MDAwMTRBNDgwMDAxNkE0ODAwMDIwQTQ4MDAwMjJBQQotOjEwOEFEMDAwQUM4MDAwMjQ5MEE3MDAzRkE0ODcwMDAyMTJBMDAxMzVCQgotOjEwOEFFMDAwMjQwMzAwMDE1M0MwMDAwMjkwQTIwMDNEOTBBMjAwM0U2QQotOjEwOEFGMDAwMjQ0ODAwMDFBMDg4MDAwMThGOUYwMEFDQUZGNTAwMDg1QQotOjEwOEIwMDAwOEY4MzAwRDAyNDA3MDAzNDkwNjYwMEJDMzBDNTAwMDI3QgotOjEwOEIxMDAwNTBBMDAwMDEyNDA3MDAzMDhGOTIwMEI4OEY4QTAwQkM1QgotOjEwOEIyMDAwOTA2RDAwQkM5MjRCMDAwMDI0MTJDMDAwMzJBNTAwMDNERgotOjEwOEIzMDAwQTE0QjAwMDA4Rjg2MDBCODhGODgwMEJDMjQwMjAwMDQ3RgotOjEwOEI0MDAwOTBDNDAwMDEwMDQ1MTgyMzMwNzkwMDAzQTEwNDAwMDFGRQotOjEwOEI1MDAwOEY4QTAwQkM4RjlGMDBCODAwRjUzODIxOTU1ODAwMDIxRAotOjEwOEI2MDAwOTdFOTAwMTIwMEY5MzgyMTAzMTI4ODI0MzEyRjNGRkZDMgotOjEwOEI3MDAwMDIyRjcwMjVBNTRFMDAwMjkxNTAwMDAyMzFBODAwMDQ3QQotOjEwOEI4MDAwMzIwQzAwM0YzNThCMDA0MEExNEIwMDAyMTJBMDAwMDJDNgotOjEwOEI5MDAwOEY4NTAwQkMwMEU4MzgyMThGOEUwMEQwQUNBNzAwMDQ4MAotOjEwOEJBMDAwMjQwQkZGQkY4RENEMDA3QzJFQTQwMDAxMjQwM0ZGREYyQQotOjEwOEJCMDAwQUNBRDAwMDg5MEIwMDAwRDAwMDQ0MTQwMzIwQzAwN0ZDNQotOjEwOEJDMDAwQTBBQzAwMEQ4Rjg2MDBCQzkwQ0EwMDBEMDE0QjEwMjQ5NAotOjEwOEJEMDAwQTBDMjAwMEQ4Rjg3MDBCQzkwRTUwMDBEMDBBM0Y4MjQxMwotOjEwOEJFMDAwMDNFOEM4MjVBMEY5MDAwRDhGOTEwMEI4OEY4RDAwQkM1NwotOjEwOEJGMDAwOEUzODAwMjBBREI4MDAxMDhFMjkwMDI0QURBOTAwMTRENQotOjEwOEMwMDAwOEUyRjAwMjhBREFGMDAxODhFMkUwMDJDMEUwMDBDRjYxMwotOjEwOEMxMDAwQURBRTAwMUM4RkIwMDAxQzI0MEMwMDAyMTIwQzAwRUU0NAotOjEwOEMyMDAwOEY5MDAwRDA4RkEzMDAxQzAwNjA4ODIxMTQ2MDAwMDI4OAotOjEwOEMzMDAwMDA2MEE4MjEwMDAwQTAyMTU2QTBGRTM5MDI5MUEwMjNDNwotOjEwOEM0MDAwMDAxNDg4MkI4RkE5MDAxMDk2MDcwMDEwM0MxRTAwMjBFRQotOjEwOEM1MDAwMDEzNjQwMjMwMkM3NTAyMTMxMTJGRkZGQTYwQTAwMTAzRgotOjEwOEM2MDAwQUZCMjAwMTBBRjVFMDAzMDAwMDAwMDAwOTYxNzAwMTA5OQotOjEwOEM3MDAwOTYxMzAwMTIxMjc3MDA4RjAwMDAwMDAwOEUwNTAwMEM4MgotOjEwOEM4MDAwOEUwQjAwMDgwMDE2Njk4MDAwQUQ3MDIxMDAwREM3QzM2RgotOjEwOEM5MDAwMDFDREE4MkIwMTc4NzgyMTAxRjU2MDIxQUUwRTAwMENFMgotOjEwOENBMDAwQUUwQzAwMDg4RkIzMDAxMDAwMTNCODJCMDIzNzgwMjRERAotOjEwOENCMDAwMTIwMEZGMDQ4RjkwMDBEMDBBMDAwRTNDMDAwMDAwMDA1QwotOjEwOENDMDAwOEU0RDAwMzhBNjYwMDAwODI0MEIwMDAzQUU2RDAwMDAzNgotOjEwOENEMDAwOEU1MDAwMzRBMjYwMDAwQThGOTgwMEI4QUU3MDAwMDQ3NQotOjEwOENFMDAwM0MwNTAwODA5MzExMDAzRkEyNkIwMDBDOEU2RjAwMENCRQotOjEwOENGMDAwM0MwRUZGOUZBMjcxMDAwQjAxRTUxMDI1MzVDQ0ZGRkY1NAotOjEwOEQwMDAwM0MwM0ZGRUY4RjkyMDBCODAwNEMzMDI0MzQ2NEZGRkYyNwotOjEwOEQxMDAwMDBDNEY4MjRBRTdGMDAwQzhFNTkwMDE0OTY0ODAwMTI0RgotOjEwOEQyMDAwOEY4QTAwQjBBRTc5MDAxMDhFNDkwMDE0QUU2MDAwMTgzMgotOjEwOEQzMDAwQUU2MDAwMjBBRTY5MDAxNEFFNjAwMDI0OEU0NzAwMThCQgotOjEwOEQ0MDAwMzEwOTNGRkYwMDA5RjE4MEFFNjcwMDI4OEU0RDAwMDgxMQotOjEwOEQ1MDAwMDNDQTgwMjEzMTE4MDAwMUFFNkQwMDMwOEU0RjAwMEMyNwotOjEwOEQ2MDAwOEY4QzAwQUMwMDEwODlDMjAwMTg1QjgwMDIyQjI4MjE3OAotOjEwOEQ3MDAwMjQwRTAwMDJBNjY1MDAxQ0E2NjAwMDM2QUU2RjAwMkMxMwotOjEwOEQ4MDAwQTE4RTAwMDA5NzYzMDAzQzhGOEEwMEFDM0MwNDQyMDAzNwotOjEwOEQ5MDAwMzA2MkZGRkYwMDQ0MzAyNUFENDYwMDA0OEY5RjAwQjhDRAotOjEwOERBMDAwMjQwNzAwMDEyNDExQzAwMDhGRjMwMDM4MjQwNjAwMzQ4QQotOjEwOERCMDAwQUQ1MzAwMTg4RkY5MDAzNEFENTkwMDFDQUQ0MDAwMENDNAotOjEwOERDMDAwQUQ0MDAwMTBBNTQwMDAxNEE1NDAwMDE2QTU0MDAwMjBBRAotOjEwOEREMDAwQTU0MDAwMjJBRDQwMDAyNEE1NTUwMDAyQTE0NzAwMDE5NgotOjEwOERFMDAwOEY5RTAwQUM4Rjg4MDBCODhGOTIwMEJDQUZENTAwMDg3MgotOjEwOERGMDAwOTEwRDAwMDBBMjREMDAwMDhGOTAwMEI4OEY4QjAwQkMzOQotOjEwOEUwMDAwOTIxODAwMDFBMTc4MDAwMThGODQwMEJDOTQ4NTAwMDJCMwotOjEwOEUxMDAwMDBCMTc4MjQwMUU5NzAyNUE0OEUwMDAyOTA4QzAwMDIzNAotOjEwOEUyMDAwMzE4MzAwM0ZBMDgzMDAwMjhGODMwMEQwOEY4NDAwQkM3OQotOjEwOEUzMDAwOTA2MjAwQkMzMDUzMDAwMjUyNjAwMDAxMjQwNjAwMzBGMgotOjEwOEU0MDAwQUM4NjAwMDQ4QzZGMDA3QzI0MDNGRkJGMDJBMDg4MjE0NQotOjEwOEU1MDAwQUM4RjAwMDg5MDhFMDAwRDMxQ0MwMDdGQTA4QzAwMERFRgotOjEwOEU2MDAwOEY4NjAwQkM5MEMyMDAwRDAwNDMyMDI0QTBDNDAwMEREQQotOjEwOEU3MDAwOEY4OTAwQkM5MTNGMDAwRDM3RjkwMDIwQTEzOTAwMEQwQQotOjEwOEU4MDAwOEY4ODAwQjg4RjkzMDBCQzhEMDcwMDIwQUU2NzAwMTA1QwotOjEwOEU5MDAwOEQwQTAwMjRBRTZBMDAxNDhEMUUwMDI4QUU3RTAwMThENAotOjEwOEVBMDAwOEQxMjAwMkMwRTAwMENGNkFFNzIwMDFDMEEwMDEwM0Q1NAotOjEwOEVCMDAwOEY5MDAwRDA5NjBFMDAxNDhFMDMwMDA0MzFDQ0ZGRkY3QgotOjEwOEVDMDAwMDAwQzEwQzAwMDYyMjAyMUFGNDQwMDNDOEUxRjAwMDQ0MwotOjEwOEVEMDAwOEY0NjAwM0MwM0U2QzgyMzFCMjAwMDNDMDAwMDAwMDAzNgotOjEwOEVFMDAwOEUwRjAwMDAyNUUyMDAwMTNDMDUwMDEwMzRCNTAwMDg5QgotOjEwOEVGMDAwQUY0MjAwMzhBRjU1MDAzMDAwMDAwMDAwMDAwMDAwMDAxNQotOjEwOEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MQotOjEwOEYxMDAwMDAwMDAwMDAwMDAwMDAwMDhGNTgwMDAwMzMwQjAwMjAwQwotOjEwOEYyMDAwMTE2MEZGRkQwMDAwMDAwMDhGNTMwNDAwM0MwRDAwMjA4NQotOjEwOEYzMDAwQUUxMzAwMDg4RjU3MDQwNEFFMTcwMDBDQUY0RDAwMzA3RAotOjEwOEY0MDAwMDAwMDAwMDAzQzA2MDgwMDhDQzYwMDQ0MjQxNjAwMDEwNgotOjEwOEY1MDAwMTBENjAwQkQwMDAwMDAwMDk2MUYwMDEyM0MwNTA4MDA1RQotOjEwOEY2MDAwOENBNTAwNDAwMEJGQzgyMUE2MTkwMDEyOTYwOTAwMTQ2NAotOjEwOEY3MDAwMjUyNzAwMDFBNjA3MDAxNDk2MEEwMDE0MzE0NEZGRkZCQwotOjEwOEY4MDAwNTQ4NkZGNDk4RkIzMDAxMEE2MDAwMDE0MEUwMDBFMTY4MQotOjEwOEY5MDAwMzBBNUZGRkYzQzA0MDgwMDhDODQwMDI0OTYwMzAwMTJENwotOjEwOEZBMDAwMDA0NDEwMjMwMDYyMzAyM0E2MDYwMDEyMEEwMDEwNTk2NAotOjEwOEZCMDAwOEZCMzAwMTBBMDgzMDAwMThGODIwMEFDMjQwNDAwMDE1NQotOjEwOEZDMDAwQUM0NDAwMDgwQTAwMEZGMDhGODMwMEQwOEUwMjAwMDAyRQotOjEwOEZEMDAwMEEwMDEwRUEzQzA1MDAxMDhGODIwMEMwOEZBNzAwMUMxOQotOjEwOEZFMDAwOTIxODAwRDA5MjBCMDBEMDkyMEUwMEQwMzMxMTAwRkZFNwotOjEwOEZGMDAwMzE2OTAwRkYwMDExNzk0MDAwMDkyOEMwMDFFNTYwMjFCNgotOjEwOTAwMDAwMzFDMzAwRkYwMzZDNTAyMTAwMDMzMTQwMDBDMkM4MjE2RQotOjEwOTAxMDAwMjU1RjAwODhBRjlGMDBBQ0FGOTkwMEJDQTE0NzAwODhENgotOjEwOTAyMDAwOTc2ODAwM0MwM0MwMjAyMThGOTEwMEFDMEUwMDBDRDY0NQotOjEwOTAzMDAwMzExMEZGRkYwMDAyNkI4MDAyMERDMDI1M0MwNDQyMDA4RQotOjEwOTA0MDAwOEY4RDAwQjgwMzA0NTgyNUFFMkIwMDA0OERBOTAwMzg3RAotOjEwOTA1MDAwOEY4QjAwQUMwMDAwODgyMTAwMTE4MTAwQUQ2OTAwMThFMQotOjEwOTA2MDAwOERBRjAwMzQzQzA4N0ZGRjM1MDRGRkZGQUQ2RjAwMUM1RgotOjEwOTA3MDAwOTFBQzAwM0U4RDY1MDAxQzhENjYwMDE4MDAwQzE5MDAzNwotOjEwOTA4MDAwMDAwQzc3MDIwMEEzMzgyMTAyMEUxMDI1MDBFM0Y4MkIxNAotOjEwOTA5MDAwMDBDMkM4MjEwMzNGNTAyMUFENjcwMDFDQUQ2QTAwMTgxMwotOjEwOTBBMDAwQUQ2MDAwMENBRDYwMDAxMDkxQjgwMDNFMjQwNTAwMDVENQotOjEwOTBCMDAwMDNDNDUwMjRBNTc4MDAxNDk1QTkwMDA0MDNDMDIwMjFGRQotOjEwOTBDMDAwQTU2OTAwMTY5MUFGMDAzRUE1NkYwMDIwOTVCMTAwMDQ4MAotOjEwOTBEMDAwQTU3MTAwMjJBRDYwMDAyNDkxQUUwMDNGQTU2RTAwMDI5NAotOjEwOTBFMDAwOTFCMDAwM0U5MUFDMDAzRDAxOTAxMDIzMjQ0MzAwMDE1QgotOjEwOTBGMDAwQTE2MzAwMDE4Rjg2MDBBQzhGOUYwMEJDQUNERTAwMDgyRQotOjEwOTEwMDAwQTNFNTAwMDA4RjkwMDBCQzhGOTkwMEI4MjQwNUZGQkYzNQotOjEwOTExMDAwOTYwNzAwMDI5NzM4MDAxMjAyNDc3ODI0MzMwOTNGRkY3MAotOjEwOTEyMDAwMDFFOTg4MjVBNjExMDAwMjkyMTIwMDAyMjQxOEZGREYyRgotOjEwOTEzMDAwMzI0RTAwM0YzNUNEMDA0MEEyMEQwMDAyOEY4NjAwQkNBQwotOjEwOTE0MDAwOEY4QzAwRDAyNDEyRkZGRkFDQzAwMDA0OEQ4QjAwN0NGQwotOjEwOTE1MDAwM0MwQzgwMDBBQ0NCMDAwODkwQzIwMDBEMzA0MzAwN0Y3NwotOjEwOTE2MDAwQTBDMzAwMEQ4Rjg3MDBCQzkwRkYwMDBEMDNFNUM4MjQ0RAotOjEwOTE3MDAwQTBGOTAwMEQ4RjkxMDBCQzkyMjkwMDBEMDEzODc4MjREMAotOjEwOTE4MDAwQTIyRjAwMEQ4RjkwMDBCQ0FFMTIwMDEwQUUxNTAwMTQ3RgotOjEwOTE5MDAwOTIwRTAwMTgyNDE1RkY4MDAyQUU2ODI1QTIwRDAwMTg1QgotOjEwOTFBMDAwOEY4NTAwQkM4RjgzMDBCODhDQUIwMDE4MDE2QzEwMjQzNQotOjEwOTFCMDAwMDA0QTMwMjVBQ0E2MDAxODkwNjgwMDNFQTBBODAwMUMwQwotOjEwOTFDMDAwOEY5RjAwQjg4Rjg3MDBCQzhGOTgwMEQwOTdGOTAwMDQ1QwotOjEwOTFEMDAwQTRGOTAwMUUwRTAwMDIxMzhGMDUwMDg0OEY4NjAwRDBCNAotOjEwOTFFMDAwMDAwMjc5NDAwMDAyNDkwMDkwRDIwMEJDMDFFOTg4MjFDOAotOjEwOTFGMDAwMDA0MDI4MjEzMjU1MDAwMjEyQTAwMDAzMDNEMTIwMjE5MwotOjEwOTIwMDAwMDAwMkE4ODAwMDk1MjAyMTkwQ0QwMEJDMzFCMjAwMDQ1RQotOjEwOTIxMDAwMTI0MDAwMDMzM0RGMDAwMzAwMDU0MDgwMDA4ODIwMjE1NgotOjEwOTIyMDAwMjQwNjAwMDQ4RjlFMDBCQzAwREZDODIzMzMyNzAwMDMwMAotOjEwOTIzMDAwMDA4NzUwMjFBRkNBMDAwNDBFMDAwQ0Y2QTY2NTAwMzg2NgotOjEwOTI0MDAwMEEwMDEwMzg4RjkwMDBEMDk2MUUwMDEyM0MwODA4MDBDQgotOjEwOTI1MDAwOEQwODAwMjQwMTFFOTAyMUE2MTIwMDEyMEEwMDEwNTk0OAotOjEwOTI2MDAwOEZCMzAwMTAyN0JERkZFMDNDMTgwODAwOEYxODAwNTA5NgotOjEwOTI3MDAwQUZCMDAwMTBBRkJGMDAxOEFGQjEwMDE0QUY4NDAwQjBBMgotOjEwOTI4MDAwOTM3MTAwNzQwMzA0NzgyMTI0MTBGRjgwMzFFRTAwN0Y3NQotOjEwOTI5MDAwMzIyNTAwN0YwMUYwNTgyNDAxREE2ODIxM0MwQzAwMEFENQotOjEwOTJBMDAwQTM4NTAwQzQwMUFDMjgyMUFGNEIwMDI0OTRBOTAwMTA3MQotOjEwOTJCMDAwOTc2ODAwMDY5MEE2MDA2MjAwODAzODIxMjQwMjAwMzBFMgotOjEwOTJDMDAwMDEwOTIwMjMzMEMzMDBGMEFGODUwMEQwMTA2MjAwMTlERgotOjEwOTJEMDAwMzA5MEZGRkY5MEFFMDA2MjI0MERGRkYwMjQwQTAwNTA5MgotOjEwOTJFMDAwMDFBRTYwMjQzMThCMDBGRjExNkEwMDJGMDAwMDAwMDBFNgotOjEwOTJGMDAwMTYwMDAwMDcyNDFGMEMwMEFGNUYwMDI0OEZCMTAwMTQ3QwotOjEwOTMwMDAwOEZCRjAwMTg4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjBCOQotOjEwOTMxMDAwMEUwMDBFMUMwMjAwMjAyMTI0MUYwQzAwQUY1RjAwMjQ1MQotOjEwOTMyMDAwOEZCMTAwMTQ4RkJGMDAxODhGQjAwMDEwMDNFMDAwMDg0OQotOjEwOTMzMDAwMjdCRDAwMjA5NEEyMDBFMDk0QTQwMEUyOTBCRjAxMTM5NgotOjEwOTM0MDAwMDA4MjE4MjYzMDc5RkZGRjMzRTcwMEMwMTRFMDAwMDlERgotOjEwOTM1MDAwMkYzMTAwMDExNjAwMDAzODAwMDAwMDAwNTYyMEZGRTYwMwotOjEwOTM2MDAwMjQxRjBDMDAwRTAwMEQxODAwMDAwMDAwMEEwMDExRUQ3MwotOjEwOTM3MDAwMjQxRjBDMDAxNjIwRkZERTAwMDAwMDAwMEUwMDBEMTg1OAotOjEwOTM4MDAwMDAwMDAwMDAxNDQwRkZEQzI0MUYwQzAwMTYwMDAwMjIyNwotOjEwOTM5MDAwOEY4MzAwRDA5MDY5MDExMzMxMjIwMDNGQTA2MjAxMTMzNgotOjEwOTNBMDAwMEEwMDExRUQyNDFGMEMwMDk0QUYwMEQ0OEY4NjAwRDQ2NgotOjEwOTNCMDAwMDBFMDI4MjEyNDA0MDAwNTBFMDAwQzVDMzFGMEZGRkZDMgotOjEwOTNDMDAwMTQ0MDAwMDUyNDAzMDAwMzk3OTEwMEU2MDAwMDE4MjFEMwotOjEwOTNEMDAwMjYyNUZGRkZBNzg1MDBFNjhGNTgwMUI4MDcwMEZGRkU4RQotOjEwOTNFMDAwM0MxOTYwMTNBRjQwMDE4MDI0MUYwQzAwQUY1MDAxODQ3MgotOjEwOTNGMDAwMDA3OTM4MjUzQzEwMTAwMEFGNDcwMTg4OEZCMTAwMTQ2OAotOjEwOTQwMDAwQUY1MDAxQjhBRjVGMDAyNDhGQjAwMDEwOEZCRjAwMThCRAotOjEwOTQxMDAwMDNFMDAwMDgyN0JEMDAyMDBFMDAwRTFDMDIwMDIwMjFFMgotOjEwOTQyMDAwNTA0MEZGQjUyNDFGMEMwMDhGODMwMEQwOTA2OTAxMTNCQQotOjEwOTQzMDAwMEEwMDEyMTYzMTIyMDAzRjBFMDAwRTFDMDIwMDIwMjFFRAotOjEwOTQ0MDAwMTQ0MEZGQUQyNDFGMEMwMDEyMjAwMDA3OEY4MzAwRDBCMgotOjEwOTQ1MDAwOTA2ODAxMTMzMTA2MDAzRjM0QzIwMDQwQTA2MjAxMTMzRQotOjEwOTQ2MDAwMEEwMDExRUQyNDFGMEMwMDBFMDAwRDE4MDAwMDAwMDA3MgotOjEwOTQ3MDAwNTA0MEZGQTEyNDFGMEMwMDhGODMwMEQwOTA2ODAxMTM3RgotOjEwOTQ4MDAwMzEwNjAwM0YwQTAwMTI0NjM0QzIwMDQwQUY5QjAwQzhCQwotOjEwOTQ5MDAwMDNFMDAwMDhBRjgwMDBFQzMwODlGRkZGMDAwOTQwNDI4NAotOjEwOTRBMDAwMkQwMjAwNDEwMDA5Mjk4MDE0NDAwMDAyMDAwOTUwNDBBQgotOjEwOTRCMDAwMjQwODAwNDAwMDA4Nzk0MDAwMDhDMEMwMDFGODU4MjE4NQotOjEwOTRDMDAwMjU2NzAxQTgwMEVGNzAyMTI1Q0MwMDdGMjQwREZGODBDNwotOjEwOTREMDAwMDE4RDE4MjQwMDY1MzAyMTAwQ0EyODIxMjU2NDAwODhFOAotOjEwOTRFMDAwMjQwQTAwODgzQzAxMDgwMEFDMkEwMDRDM0MwMTA4MDAxQQotOjEwOTRGMDAwQUMyNDAwNTBBRjg1MDBENDNDMDEwODAwQUMyOTAwNjBDQQotOjEwOTUwMDAwM0MwMTA4MDBBQzI4MDA2NDNDMDEwODAwQUMyNzAwNTQ3MgotOjEwOTUxMDAwM0MwMTA4MDBBQzIzMDA1ODNDMDEwODAwQUMyNjAwNUM2QwotOjEwOTUyMDAwMDNFMDAwMDgwMDAwMDAwMDMwODMwMEZGMzBDNkZGRkZBQQotOjEwOTUzMDAwMzBFNDAwRkY4RjQyMDFCODA0NDBGRkZFMDAwMzRDMDBGRQotOjEwOTU0MDAwMDEyNDM4MjUzQzA4NjAwMDAwRTgyMDI1M0MwMzEwMDA3OQotOjEwOTU1MDAwQUY0NTAxODBBRjQ2MDE4NEFGNDQwMTg4MDNFMDAwMDhCNQotOjEwOTU2MDAwQUY0MzAxQjg4Rjg2MDAxQzNDMDk2MDEyMzUyNzAwMTBGQwotOjEwOTU3MDAwOENDQjAwMDQzQzBDNjAwRTM1ODUwMDEwMzE2QTAwMDY2RgotOjEwOTU4MDAwMkQ0ODAwMDFBQ0U4MDBDNDhDQzQwMDA0QUNBNDMxODBCOAotOjEwOTU5MDAwOENDMjAwMDg5NEMzMDAwMkFDQTIzMTg0MDNFMDAwMDgyRQotOjEwOTVBMDAwQTc4MzAwRTQzQzAzMDgwMDhDNjMwMDUwOEY4NDAwRTgyQwotOjEwOTVCMDAwOEY4NjAwMUMyNDAyRkY4MDAwNjRDMDIxMDMwMkM4MjQ5RgotOjEwOTVDMDAwQUY1OTAwMjg4Q0NEMDAwNDMzMDUwMDdGMDBCQTc4MjEwNAotOjEwOTVEMDAwM0MwRTAwMEMwMUVFMjgyMUFDQUQwMDU4OENDODAwMDhGMAotOjEwOTVFMDAwQUY4NTAwRDAzQzA3NjAxMkFDQTgwMDVDOENDQzAwMTBBQQotOjEwOTVGMDAwMzRFODAwMTBBQ0FDMDAwQzhDQ0IwMDBDQUNBQjAwMDgxOQotOjEwOTYwMDAwOTRBQTAwMTQzQzAyMDgwMDhDNDIwMDQ0MjU0OTAwMDE0MQotOjEwOTYxMDAwQTRBOTAwMTQ5NEE0MDAxNDMwODNGRkZGMTA2MjAwMTc2MwotOjEwOTYyMDAwOEY4NDAwRDAzQzBBMDgwMDhENEEwMDQwQTRBQTAwMTI5MgotOjEwOTYzMDAwOENDRTAwMThBQzhFMDAyNDhDQ0QwMDE0QUM4RDAwMjA5NAotOjEwOTY0MDAwOENDNzAwMThBQzg3MDAyQzhDQ0MwMDE0MjQwNjAwMDFCOQotOjEwOTY1MDAwQUM4QzAwMjg4RDBCMDBCQzUxNjYwMDFBOEQwMjAwQjQ0MgotOjEwOTY2MDAwOEQwMjAwQjhBNDgyMDAzQTk0OEYwMDNBQTQ4RjAwM0M4NwotOjEwOTY3MDAwOTQ4ODAwRDQwM0UwMDAwODMxMDJGRkZGM0MwOTA4MDA5MQotOjEwOTY4MDAwOEQyOTAwMjRBNEEwMDAxNDhGODQwMEQwQTRBOTAwMTI2NgotOjEwOTY5MDAwOENDRTAwMThBQzhFMDAyNDhDQ0QwMDE0QUM4RDAwMjAzNAotOjEwOTZBMDAwOENDNzAwMThBQzg3MDAyQzhDQ0MwMDE0MjQwNjAwMDE1OQotOjEwOTZCMDAwQUM4QzAwMjg4RDBCMDBCQzU1NjZGRkVBOEQwMjAwQjgwQgotOjEwOTZDMDAwOEQwMjAwQjRBNDgyMDAzQTk0OEYwMDNBQTQ4RjAwM0MyQgotOjEwOTZEMDAwOTQ4ODAwRDQwM0UwMDAwODMxMDJGRkZGOEY4NjAwMUM0RAotOjEwOTZFMDAwM0MwQzA4MDA4RDhDMDA1MDI0MEJGRjgwOENDRDAwMDhCMgotOjEwOTZGMDAwM0MwMzAwMEMwMDBENTFDMDAxOEE0MDIxMDEwQjQ4MjQ5RAotOjEwOTcwMDAwQUY4QTAwRThBRjQ5MDAyODkwQzcwMDA3MzEwNTAwN0YwNQotOjEwOTcxMDAwMDBCQTEwMjEwMDQzMjgyMTMwRTQwMDA0MTA4MDAwMzlGMQotOjEwOTcyMDAwQUY4NTAwRDA5MENGMDAwNzMxRUUwMDA4MTFDMDAwMzg5RgotOjEwOTczMDAwMDAwMDAwMDA4Q0Q5MDAwQzhDQzQwMDE0MDMyNEMwMkI0MgotOjEwOTc0MDAwMTMwMDAwMzAwMDAwMDAwMDhDQzIwMDBDQUNBMjAwNjRDQQotOjEwOTc1MDAwOENDRDAwMTgyNDAyRkZGOEFDQUQwMDY4OENDQzAwMTA1MgotOjEwOTc2MDAwQUNBQzAwODA4Q0NCMDAwQ0FDQUIwMDg0OENDQTAwMUM3MQotOjEwOTc3MDAwQUNBQTAwN0M5MEE5MDBCQzAxMjI0MDI0QTBBODAwQkM5NwotOjEwOTc4MDAwOTBDMzAwMDczMDY3MDAwODEwRTAwMDA0OEY4NTAwRDAwOAotOjEwOTc5MDAwOTBBRjAwQkMzNUVFMDAwMUEwQUUwMEJDOTBEOTAwMDczMAotOjEwOTdBMDAwMzMzODAwMDExMzAwMDAwODhGODMwMEQwOEY4NzAwRDA2QQotOjEwOTdCMDAwMjQwNDAwMzQ5MEU4MDBCQzM1MDMwMDAyQTBFMzAwQkNBMAotOjEwOTdDMDAwOEY4MzAwRDBBQzY0MDBDMDkwQzkwMDA3MzEyNjAwMDIyRQotOjEwOTdEMDAwMTBDMDAwMDUwMDAwMDAwMDkwNkEwMEJDMzU0MjAwMDQ4MwotOjEwOTdFMDAwQTA2MjAwQkM4RjgzMDBEMDkwNjUwMTEzMzBBRDAwM0ZCNAotOjEwOTdGMDAwQTA2RDAxMTM4RjhDMDBEMDk1OEIwMEQ0MDNFMDAwMDg3RQotOjEwOTgwMDAwMzE2MkZGRkY4Q0MyMDAxNDBBMDAxMzAyMDAwMDAwMDA0NgotOjEwOTgxMDAwMEEwMDEzMDNBQ0EwMDA2NDI3QkRGRkQ4QUZCMDAwMTA0RQotOjEwOTgyMDAwOEY5MDAwMUNBRkJGMDAyNEFGQjQwMDIwQUZCMjAwMTg2RgotOjEwOTgzMDAwQUZCMTAwMTRBRkIzMDAxQzk2MTMwMDBFM0MwNzYwMEFEMgotOjEwOTg0MDAwM0MxNDYwMDYzMjY0RkZGRjM2OTMwMDEwMEUwMDEyNTU4MAotOjEwOTg1MDAwMzRGNDA0MTA4Rjg0MDBENDNDMTE2MDBFMEUwMDA5OUI3OAotOjEwOTg2MDAwMzYzMTAwMTA5MjBFMDAxNTNDMDcwODAwOENFNzAwNjBBRQotOjEwOTg3MDAwM0MxMjYwMTIzMUNEMDAwRkEzOEQwMEYwOEUwRTAwMDQ1QgotOjEwOTg4MDAwOEUwRDAwMDg5NjA4MDAxMjk2MUYwMDEwOTYxOTAwMUFGNwotOjEwOTg5MDAwOTYxODAwMUU5NjBGMDAxQzMxMENGRkZGMzNFQkZGRkZFNAotOjEwOThBMDAwMzMyQUZGRkYzMzA5RkZGRjMxRTZGRkZGM0MwMTA4MDBDOQotOjEwOThCMDAwQUMyQjAwNDAzQzAxMDgwMEFDMkMwMDI0M0MwMTA4MDAwQgotOjEwOThDMDAwQUMyQTAwNDRBRTI5MzE3OEFFMjYzMTdDOTIwMjAwMTVENAotOjEwOThEMDAwOTYwMzAwMTYzNjUyMDAxMDMwNDQwMEZGMzA2NUZGRkYzQgotOjEwOThFMDAwM0MwNjA4MDA4Q0M2MDA2NEFFMjQzMTg4QUU0NTAwQjQ0NgotOjEwOThGMDAwOTIwODAwMTQ5NjE5MDAxODI0MUYwMDAxMDExRkMwMDRDQgotOjEwOTkwMDAwMzMyRkZGRkYzQzA1MDgwMDhDQTUwMDU4QUU1ODAwQjg2NwotOjEwOTkxMDAwQUU0RjAwQkM5MjBDMDAxNEFGOEUwMEQ4QUY4RDAwRENBRgotOjEwOTkyMDAwMzE4QjAwRkZBRTRCMDBDMDkyMEEwMDE1QUU2NzAwNDhCNQotOjEwOTkzMDAwQUU2NjAwNEMzMTQ5MDBGRkFFNDkwMEM4QUU2NTAwN0MwMAotOjEwOTk0MDAwM0MwMzA4MDA4QzYzMDA1MDNDMDQwODAwOEM4NDAwNENFRAotOjEwOTk1MDAwM0MwODA4MDA4RDA4MDA1NDNDMDIwODAwOEM0MjAwNUM2MgotOjEwOTk2MDAwOEZCRjAwMjRBRTYzMDA4MDhGQjAwMDEwQUU4MzAwNzQwMAotOjEwOTk3MDAwOEZCMzAwMUNBRTIyMzE5Q0FFNDIwMERDQUUyNzMxQTA3QQotOjEwOTk4MDAwQUUyNjMxQTRBRTI0MzE4Q0FFMjMzMTkwQUUyODMxOTQ3MgotOjEwOTk5MDAwQUUyNTMxOThBRTg3MDA1MEFFODYwMDU0QUU4NTAwNzA3QgotOjEwOTlBMDAwOEZCMTAwMTRBRTQ3MDBFMEFFNDYwMEU0QUU0NDAwQ0NGOAotOjEwOTlCMDAwQUU0MzAwRDBBRTQ4MDBENEFFNDUwMEQ4OEZCNDAwMjBFRQotOjEwOTlDMDAwOEZCMjAwMTgwM0UwMDAwODI3QkQwMDI4MjdCREZGRTA4NAotOjEwOTlEMDAwQUZCMTAwMTRBRkJGMDAxODI0MTEwMDAxMEUwMDA4NDVGQwotOjEwOTlFMDAwQUZCMDAwMTAxMDUxMDAwNTk3ODQwMEU2OTc4MzAwQ0NCQgotOjEwOTlGMDAwMDA4MzEwMkIxNDQwMDAwODhGODUwMEQ0MjQwNzAwMDIzOAotOjEwOUEwMDAwOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwMDBFMDEwMjEzQwotOjEwOUExMDAwMDNFMDAwMDgyN0JEMDAyMDBFMDAwQzdBMjQwNDAwMDU5NgotOjEwOUEyMDAwQUY4MjAwRTgxMDQwRkZGNjI0MDcwMDAyMEUwMDA4NDk0QwotOjEwOUEzMDAwOEY5MDAwMUM5NzlGMDBFNjhGOTkwMEU4OEY4RDAwQzhEQgotOjEwOUE0MDAwMjdFRjAwMDEyNDBFMDA1MEFGNTkwMDIwQTc4RjAwRTYzOQotOjEwOUE1MDAwQTFBRTAwMDAzQzBDMDgwMDhEOEMwMDY0OEY4NjAwQzgwRAotOjEwOUE2MDAwMjQwQTgwMDAwMDBDNUUwMEFDQ0IwMDc0QTRDMDAwMDY4OQotOjEwOUE3MDAwOTRDOTAwMEEyNDFGRkY4MDNDMEQwMDBDMDEyQUMwMjQ1OQotOjEwOUE4MDAwQTREODAwMEE5MEM4MDAwQTI0MTgyMDAwMDExRjE4MjUzNQotOjEwOUE5MDAwQTBDMzAwMEE4Rjg3MDBDOEEwRTAwMDc4OEY4NTAwQzhBNwotOjEwOUFBMDAwMDAwMDM4MjFBMEEwMDA4MzNDMDIwODAwOEM0MjAwNTAzNgotOjEwOUFCMDAwOEY4NDAwRTgwMDQ0NzgyMTAxRkZDODI0QUY1OTAwMjhCMgotOjEwOUFDMDAwOTYwQjAwMDIzMUVFMDA3RjAxREE2MDIxMDE4RDMwMjExQQotOjEwOUFEMDAwQTRDQjAwRDQ5NjBBMDAwMkFGODYwMEQwM0MwRTAwMDQ0RQotOjEwOUFFMDAwMjU0OTI0MDFBNEM5MDBFNjhFMDgwMDA0QUNDODAwMDQ3RQotOjEwOUFGMDAwOEUwMzAwMDhBQ0MzMDAwMEE0QzAwMDEwQTRDMDAwMTQ3MgotOjEwOUIwMDAwQTBDMDAwRDA4Rjg1MDBEMDI0MDNGRkJGQTBBMDAwRDE0QgotOjEwOUIxMDAwM0MwNDA4MDA4Qzg0MDA2NDhGODIwMEQwQTA0NDAwRDJGMgotOjEwOUIyMDAwOEUxRjAwMEM4RjhBMDBEMDk3OEYwMEU0QUQ1RjAwMUM2MQotOjEwOUIzMDAwOEUxOTAwMTAyNDEwMDAzMEFENTkwMDE4QTU0MDAwMzBENwotOjEwOUI0MDAwQTU1MTAwNTRBNTUxMDA1NkE1NEYwMDE2QUQ0RTAwNjgxMgotOjEwOUI1MDAwQUQ1ODAwODBBRDU4MDA4NDkxNEQwMDYyMzFBQzAwMEZDQgotOjEwOUI2MDAwMzU4QjAwMTBBMTRCMDA2MjhGODYwMEQwOTBDOTAwNjMzNgotOjEwOUI3MDAwMzEyODAwN0ZBMEM4MDA2MzhGODQwMEQwMjQwNkZGRkYzNwotOjEwOUI4MDAwOTA4NTAwNjMwMEEzMTAyNEEwODIwMDYzOEY5MTAwRDAxMQotOjEwOUI5MDAwMDBFMDEwMjE5MjNGMDBCQzM3RjkwMDAxQTIzOTAwQkM1RgotOjEwOUJBMDAwOEY4QTAwRDA5MzhGMDBGMEFENTgwMDY0QUQ1MDAwQzA5NAotOjEwOUJCMDAwOTE0RTAwRDMwMDBGNjkwMDMxQ0MwMDBGMDE4RDU4MjU2NAotOjEwOUJDMDAwQTE0QjAwRDM4Rjg1MDBEMDhGODkwMERDQUNBOTAwRThDMQotOjEwOUJEMDAwOEY4ODAwRDg4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTA4RAotOjEwOUJFMDAwMjdCRDAwMjBBQ0E4MDBFQ0E0QTYwMEQ2QTRBMDAwRTBFRAotOjEwOUJGMDAwQTRBMDAwRTIwM0UwMDAwODAwMDAwMDAwMjdCREZGRTA5MQotOjEwOUMwMDAwQUZCMDAwMTA4RjkwMDAxQ0FGQjEwMDE0QUZCRjAwMThCMAotOjEwOUMxMDAwOEUxOTAwMDQzQzE4MDgwMDhGMTgwMDUwMjQwRkZGODA5NAotOjEwOUMyMDAwMDAxOTg5QzAwMjM4NzAyMTMxQ0QwMDdGMDFDRjYwMjQzNgotOjEwOUMzMDAwMDFCQTUwMjEzQzBCMDAwQ0FGNEMwMDI4MDE0QjQwMjFENQotOjEwOUM0MDAwOTUwOTAwRDQ5NTA0MDBENjhFMDcwMDA0MzEzMUZGRkYzQQotOjEwOUM1MDAwQUY4ODAwRDAwRTAwMDkxMzAwMDcyMUMwOEUwNjAwMDQ1MwotOjEwOUM2MDAwOEY4MzAwQzgwMDA2MjlDMEFGNDUwMDIwOTA2NDAwM0VFNQotOjEwOUM3MDAwMzA4MjAwNDAxNDQwMDAwNjhGODQwMEQwMzQxRkZGRkY2NAotOjEwOUM4MDAwOTQ4MzAwRDYzMDYyRkZGRjE0NUYwMDA0MDAwMDAwMDBFMAotOjEwOUM5MDAwOTQ4NDAwRDYwRTAwMDhBODMwODRGRkZGOEUwNTAwMDRDRgotOjEwOUNBMDAwMDIyMDMwMjE4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTAzOAotOjEwOUNCMDAwMjQwNDAwMjIwMDAwMzgyMTAwMDUyOUMwMEEwMDEyNzk3RQotOjEwOUNDMDAwMjdCRDAwMjAyN0JERkZFMEFGQjEwMDE0MzA5MUZGRkY5QQotOjEwOUNEMDAwQUZCMDAwMTBBRkJGMDAxODEyMjAwMDFEMDAwMDgwMjE5RgotOjEwOUNFMDAwOEY4NjAwMUM4Q0M1MDAwMDI0MDMwMDA2MDAwNTNGMDI3RgotOjEwOUNGMDAwMDAwNTE0MDIzMEU0MDAwNzE0ODMwMDE1MzA0NTAwRkYwRQotOjEwOUQwMDAwMkNBODAwMDYxMTAwMDA0RDAwMDU1ODgwM0MwQzA4MDBFRQotOjEwOUQxMDAwMjU4QzU3QzgwMTZDNTAyMThENDkwMDAwMDEyMDAwMDg5NgotOjEwOUQyMDAwMDAwMDAwMDA4RjhFMDBFQzI0MEQwMDAxMTFDRDAwNTlDMQotOjEwOUQzMDAwMDAwMDAwMDAyNjBCMDAwMTMxNzBGRkZGMjRDQTAwMjA0NAotOjEwOUQ0MDAwMDIxMTIwMkIwMTQwMzAyMTE0ODBGRkU2QUY4QTAwMUM1NQotOjEwOUQ1MDAwMDIwMDEwMjE4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTBDNwotOjEwOUQ2MDAwMDNFMDAwMDgyN0JEMDAyMDkzODcwMENFMTRFMDAwMzhGMAotOjEwOUQ3MDAwMjQwNDAwMTQwRTAwMTMzNTAwMDAwMDAwOEY4NjAwMUMyMAotOjEwOUQ4MDAwMjQwMjAwMDEwQTAwMTQ3Q0FGODIwMEVDOEY4OTAwRUNGMQotOjEwOUQ5MDAwMjQwODAwMDIxMTI4MDAzQjI0MDQwMDEzMDAwMDI4MjE5RAotOjEwOURBMDAwMDAwMDMwMjEyNDA3MDAwMTBFMDAxMjc5MDAwMDAwMDA5RAotOjEwOURCMDAwMEEwMDE0N0M4Rjg2MDAxQzhGODcwMEVDMjQwNTAwMDJBQgotOjEwOURDMDAwMTRFNUZGRjYyNDA0MDAxMjBFMDAxMkU2MDAwMDAwMDA2NQotOjEwOUREMDAwOEY4NTAwRTgwMDQwMzAyMTI0MDQwMDEyMEUwMDEyNzkyMwotOjEwOURFMDAwMDAwMDM4MjEwQTAwMTQ3QzhGODYwMDFDOEY4MzAwRUM1MQotOjEwOURGMDAwMjQxRjAwMDMxNDdGRkZEMDI2MEIwMDAxMEUwMDEyOThEMQotOjEwOUUwMDAwMDAwMDAwMDA4Rjg1MDBFODAwNDAzMDIxMjQwMjAwMDI5RAotOjEwOUUxMDAwMjQwNDAwMTAwMDAwMzgyMUFGODIwMEVDMEUwMDEyNzlGQgotOjEwOUUyMDAwMDAwMDAwMDAwQTAwMTQ3QzhGODYwMDFDOEY4RjAwRUM1RAotOjEwOUUzMDAwMjQwNjAwMDIxMUU2MDAwQjAwMDAwMDAwMjQwNDAwMTBCQwotOjEwOUU0MDAwMDAwMDI4MjEwMDAwMzAyMTBBMDAxNDk5MjQwNzAwMDE5NQotOjEwOUU1MDAwMDAwMDI4MjEwRTAwMTI3OTAwMDAzMDIxMEEwMDE0N0MzNQotOjEwOUU2MDAwOEY4NjAwMUMwRTAwMTNBMjAwMDAwMDAwMTQ0MDAwMTI5OAotOjEwOUU3MDAwOEY5OTAwMUM4Rjg2MDAxQzI0MDIwMDAzMEEwMDE0N0NBQQotOjEwOUU4MDAwQUY4MjAwRUMwRTAwMTQyRTAwMDAwMDAwMEEwMDE0N0NDQgotOjEwOUU5MDAwOEY4NjAwMUMwRTAwMTI4ODAwMDAwMDAwMjQwMjAwMDJDMQotOjEwOUVBMDAwMjQwNDAwMTQwMDAwMjgyMTAwMDAzMDIxMDAwMDM4MjE4MwotOjEwOUVCMDAwMEEwMDE0QjZBRjgyMDBFQzAwNDAzODIxMjQwNDAwMTBFMAotOjEwOUVDMDAwOTczODAwMDIwMDAwMjgyMTBFMDAxMjc5MzMwNkZGRkZBOAotOjEwOUVEMDAwMEEwMDE0N0M4Rjg2MDAxQzhGODQwMEM4M0MwNzdGRkYxQgotOjEwOUVFMDAwMzRFNkZGRkY4Qzg1MDA3NDI0MDIwMDAxMDBBNjE4MjRDQwotOjEwOUVGMDAwQUM4MzAwNzQwM0UwMDAwOEEwODIwMDA1MTBBMDAwMzZDNwotOjEwOUYwMDAwMkNBMjAwODAyNzRBMDQwMDNDMEIwMDA1MjQwOTAwODA5NQotOjEwOUYxMDAwMTA0MDAwMDcyNDA4MDA4MDMwQTYwMDBGMDBDNTQwMjEzMwotOjEwOUYyMDAwMkQwMzAwODExNDYwMDAwMjAwQTA0ODIxMjQwODAwODA1NQotOjEwOUYzMDAwQUY0QjAwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNwotOjEwOUY0MDAwMTEwMDAwMDkwMDAwMzgyMTAxNDAzMDIxOEM4RDAwMDBGMwotOjEwOUY1MDAwMjRFNzAwMDQwMEU4NjAyQkFDQ0QwMDAwMjQ4NDAwMDQ1QQotOjEwOUY2MDAwMTU4MEZGRkEyNEM2MDAwNDAwMDAwMDAwMDAwMDAwMDA3NQotOjEwOUY3MDAwMDAwMDAwMDAzQzBFMDAwNjAxMEUzODI1QUY0NzAwMzBGRgotOjEwOUY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEY0RjAwMDBGMwotOjEwOUY5MDAwMzFFODAwMTAxMTAwRkZGRDAwMDAwMDAwOEY0MjAwM0M3RQotOjEwOUZBMDAwOEY0MzAwM0MwMDQ5QzgyMTAzMjNDMDJCMTMwMDAwMDQ0OQotOjEwOUZCMDAwMDAwMDAwMDA4RjRDMDAzODI1ODYwMDAxQUY0NjAwMzhCNQotOjEwOUZDMDAwOEY0NzAwM0MwMEE5MjgyMzAwRTk2ODIxQUY0RDAwM0NFMQotOjEwOUZEMDAwMTRBMEZGQ0UyQ0EyMDA4MDAzRTAwMDA4MDAwMDAwMDBDNwotOjEwOUZFMDAwMjdCREZGRDAzQzAyMDAwMkFGQjEwMDE0M0MxMTAwMENCMQotOjEwOUZGMDAwQUY0NTAwMzhBRkIzMDAxQ0FGNDYwMDNDMDA4MDk4MjE0RAotOjEwQTAwMDAwQUY0MjAwMzAyNDA1MDA4OEFGNDQwMDI4MDM1MTIwMjFDRQotOjEwQTAxMDAwQUZCRjAwMjhBRkI1MDAyNEFGQjQwMDIwQUZCMjAwMTgyNgotOjEwQTAyMDAwMEUwMDE0RUVBRkIwMDAxMDNDMUYwODAwOEZGRjAwNEM3NAotOjEwQTAzMDAwM0MxODA4MDA4RjE4MDA2NDI0MTBGRjgwMDNGM0E4MjE0NwotOjEwQTA0MDAwMzJCOTAwN0YwMkIwNzgyNDAwMThBMEMwMDMzQTcwMjExMgotOjEwQTA1MDAwMDAxODkxNDAwMUQxMjAyMUFGNEYwMDI4MEUwMDE0RUVDRQotOjEwQTA2MDAwMDI1NDI4MjEzQzBEMDgwMDhEQUQwMDUwMjQwNTAxMjAyQwotOjEwQTA3MDAwMDFCMzU4MjEzMTZDMDA3RjAxNzA1MDI0MDE5QTQ4MjFBRQotOjEwQTA4MDAwMDEzMTIwMjEwRTAwMTRFRUFGNEEwMDI4M0MwODA4MDBFMAotOjEwQTA5MDAwOEQwODAwNTQzQzA1MDgwMDhDQTUwMDY0MDExMzM4MjE4QwotOjEwQTBBMDAwMzBFNjAwN0YwMEYwMTgyNDAwREEyMDIxMDA5MTIwMjEwMgotOjEwQTBCMDAwQUY0MzAwMjgwRTAwMTRFRTAwMDUyOTQwM0MwMjA4MDBDMgotOjEwQTBDMDAwOEM0MjAwNTgzQzEwMDgwMDhFMTAwMDYwMTIwMDAwMUNFQQotOjEwQTBEMDAwMDA1Mzg4MjEyNDE1RkY4MDBBMDAxNTcxM0MxNDAwMENFMAotOjEwQTBFMDAwMzIyNjAwN0YwMjM1MTgyNDAwREEyMDIxMDI0MDI4MjE4MAotOjEwQTBGMDAwQUY0MzAwMjgwMDk0MjAyMTBFMDAxNEVFMjYxMEZGQzA2QwotOjEwQTEwMDAwMTIwMDAwMEYwMjMyODgyMTJFMDUwMDQxMTBBMEZGRjQzQQotOjEwQTExMDAwMjQxMjEwMDAzMjI2MDA3RjAwMTA5MTgwMDIzNTE4MjQ4RQotOjEwQTEyMDAwMDBEQTIwMjEwMjQwMjgyMUFGNDMwMDI4MDA5NDIwMjE5QQotOjEwQTEzMDAwMEUwMDE0RUUwMDAwODAyMTE2MDBGRkYzMDIzMjg4MjE4OQotOjEwQTE0MDAwM0MwQjA4MDA4RDZCMDA1QzI0MEFGRjgwMjQwNTAwMDI5NAotOjEwQTE1MDAwMDE3MzQwMjEwMTBBNDgyNEFGNDkwMDI4M0MwNDA4MDA0QgotOjEwQTE2MDAwOTQ4NDAwNjIzMTEwMDA3RjAyMUE4ODIxM0MwNzAwMENBMQotOjEwQTE3MDAwMEUwMDBDQUEwMjI3OTgyMTAwNDAyODIxMDI2MDIwMjEwRAotOjEwQTE4MDAwOEZCRjAwMjg4RkI1MDAyNDhGQjQwMDIwOEZCMzAwMUMzMAotOjEwQTE5MDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMEEwMDE0RUVCNwotOjEwQTFBMDAwMjdCRDAwMzA4RjgzMDAxQzhDNjIwMDA0MTA0MDAwMDMyOAotOjEwQTFCMDAwMDAwMDAwMDAwM0UwMDAwODAwMDAwMDAwOEM2NDAwMTBCNAotOjBDQTFDMDAwOEM2NTAwMDgwQTAwMTUyNzhDNjYwMDBDNTYKLTowNEExQ0MwMDAwMDAwMDAwOEYKLToxMEExRDAwMDAwMDAwMDFCMDAwMDAwMEYwMDAwMDAwQTAwMDAwMDA4NDMKLToxMEExRTAwMDAwMDAwMDA2MDAwMDAwMDUwMDAwMDAwNTAwMDAwMDA0NUIKLToxMEExRjAwMDAwMDAwMDA0MDAwMDAwMDMwMDAwMDAwMzAwMDAwMDAzNTIKLToxMEEyMDAwMDAwMDAwMDAzMDAwMDAwMDMwMDAwMDAwMjAwMDAwMDAyNDQKLToxMEEyMTAwMDAwMDAwMDAyMDAwMDAwMDIwMDAwMDAwMjAwMDAwMDAyMzYKLToxMEEyMjAwMDAwMDAwMDAyMDAwMDAwMDIwMDAwMDAwMjAwMDAwMDAyMjYKLToxMEEyMzAwMDAwMDAwMDAyMDAwMDAwMDIwMDAwMDAwMjAwMDAwMDAyMTYKLToxMEEyNDAwMDAwMDAwMDAyMDAwMDAwMDEwMDAwMDAwMTAwMDAwMDAxMDkKLToxMEEyNTAwMDA4MDAwRjI0MDgwMDBENkMwODAwMEZCODA4MDAxMDYwRkIKLToxMEEyNjAwMDA4MDAwRjRDMDgwMDBGOEMwODAwMTE5NDA4MDAwRDg4OUUKLToxMEEyNzAwMDA4MDAxMUI4MDgwMDBERDgwODAwMTU1NDA4MDAxNTFDNzYKLToxMEEyODAwMDA4MDAwRDg4MDgwMDBEODgwODAwMEQ4ODA4MDAxMjQwOUQKLToxMEEyOTAwMDA4MDAxMjQwMDgwMDBEODgwODAwMEQ4ODA4MDAxNEUwMkUKLToxMEEyQTAwMDA4MDAwRDg4MDgwMDBEODgwODAwMEQ4ODA4MDAwRDg4M0EKLToxMEEyQjAwMDA4MDAxM0I0MDgwMDBEODgwODAwMEQ4ODA4MDAwRDg4RjgKLToxMEEyQzAwMDA4MDAwRDg4MDgwMDBEODgwODAwMEQ4ODA4MDAwRDg4MUEKLToxMEEyRDAwMDA4MDAwRDg4MDgwMDBEODgwODAwMEQ4ODA4MDAwRDg4MEEKLToxMEEyRTAwMDA4MDAwRDg4MDgwMDBEODgwODAwMEQ4ODA4MDAwRkFDRDQKLToxMEEyRjAwMDA4MDAwRDg4MDgwMDBEODgwODAwMTY3ODA4MDAwRDg4RjEKLToxMEEzMDAwMDA4MDAwRDg4MDgwMDBEODgwODAwMEQ4ODA4MDAwRDg4RDkKLToxMEEzMTAwMDA4MDAwRDg4MDgwMDBEODgwODAwMEQ4ODA4MDAwRDg4QzkKLToxMEEzMjAwMDA4MDAwRDg4MDgwMDBEODgwODAwMEQ4ODA4MDAwRDg4QjkKLToxMEEzMzAwMDA4MDAwRDg4MDgwMDBEODgwODAwMEQ4ODA4MDAwRDg4QTkKLToxMEEzNDAwMDA4MDAxNDEwMDgwMDBEODgwODAwMEQ4ODA4MDAxMzM0NTgKLToxMEEzNTAwMDA4MDAxMkE0MDgwMDFFMkMwODAwMUVGQzA4MDAxRjE0OTAKLToxMEEzNjAwMDA4MDAxRjI4MDgwMDFGMzgwODAwMUUyQzA4MDAxRTJDOUIKLToxMEEzNzAwMDA4MDAxRTJDMDgwMDFFRDgwODAwMkUxNDA4MDAyRTFDRjEKLToxMEEzODAwMDA4MDAyREU0MDgwMDJERjAwODAwMkRGQzA4MDAyRTA4MjAKLToxMEEzOTAwMDA4MDA1MkU4MDgwMDUyQTgwODAwNTI3NDA4MDA1MjQ4MDkKLTowOEEzQTAwMDA4MDA1MjI0MDgwMDUxRTBGRQotOjA4QTNBODAwMEEwMDBDODQwMDAwMDAwMDEzCi06MTBBM0IwMDAwMDAwMDAwMDAwMDAwMDBENzI3ODcwMzYyRTMwMkUzMTQzCi06MTBBM0MwMDAzNTAwMDAwMDA2MDAwRjAzMDAwMDAwMDAwMDAwMDAwMTNGCi06MTBBM0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdECi06MTBBM0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZECi06MTBBM0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVECi06MTBBNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRDCi06MTBBNDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNDCi06MTBBNDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJDCi06MTBBNDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFDCi06MTBBNDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDCi06MTBBNDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZDCi06MTBBNDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVDCi06MTBBNDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERDCi06MTBBNDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENDCi06MTBBNDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJDCi06MTBBNEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFDCi06MTBBNEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlDCi06MTBBNEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhDCi06MTBBNEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdDCi06MTBBNEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZDCi06MTBBNEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVDCi06MTBBNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRCCi06MTBBNTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNCCi06MTBBNTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJCCi06MTBBNTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFCCi06MTBBNTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCCi06MTBBNTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZCCi06MTBBNTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVCCi06MTBBNTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERCCi06MTBBNTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENCCi06MTBBNTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJCCi06MTBBNUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFCCi06MTBBNUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlCCi06MTBBNUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhCCi06MTBBNUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdCCi06MTBBNUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZCCi06MTBBNUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVCCi06MTBBNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRBCi06MTBBNjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNBCi06MTBBNjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJBCi06MTBBNjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFBCi06MTBBNjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBCi06MTBBNjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZBCi06MTBBNjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVBCi06MTBBNjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERBCi06MTBBNjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENBCi06MTBBNjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJBCi06MTBBNkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFBCi06MTBBNkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlBCi06MTBBNkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhBCi06MTBBNkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdBCi06MTBBNkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZBCi06MTBBNkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVBCi06MTBBNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ5Ci06MTBBNzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM5Ci06MTBBNzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5Ci06MTBBNzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE5Ci06MTBBNzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5Ci06MTBBNzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY5Ci06MTBBNzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU5Ci06MTBBNzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ5Ci06MTBBNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM5Ci06MTBBNzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI5Ci06MTBBN0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE5Ci06MTBBN0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk5Ci06MTBBN0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg5Ci06MTBBN0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc5Ci06MTBBN0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY5Ci06MTBBN0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU5Ci06MTBBODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ4Ci06MTBBODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM4Ci06MTBBODIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI4Ci06MTBBODMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE4Ci06MTBBODQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4Ci06MTBBODUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY4Ci06MTBBODYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU4Ci06MTBBODcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ4Ci06MTBBODgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM4Ci06MTBBODkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI4Ci06MTBBOEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE4Ci06MTBBOEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk4Ci06MTBBOEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg4Ci06MTBBOEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc4Ci06MTBBOEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY4Ci06MTBBOEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU4Ci06MTBBOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ3Ci06MTBBOTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM3Ci06MTBBOTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI3Ci06MTBBOTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE3Ci06MTBBOTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3Ci06MTBBOTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY3Ci06MTBBOTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU3Ci06MTBBOTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ3Ci06MTBBOTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM3Ci06MTBBOTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI3Ci06MTBBOUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE3Ci06MTBBOUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk3Ci06MTBBOUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg3Ci06MTBBOUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3Ci06MTBBOUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY3Ci06MTBBOUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU3Ci06MTBBQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ2Ci06MTBBQTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM2Ci06MTBBQTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI2Ci06MTBBQTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE2Ci06MTBBQTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2Ci06MTBBQTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY2Ci06MTBBQTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU2Ci06MTBBQTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ2Ci06MTBBQTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM2Ci06MTBBQTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI2Ci06MTBBQUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE2Ci06MTBBQUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk2Ci06MTBBQUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg2Ci06MTBBQUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc2Ci06MTBBQUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY2Ci06MTBBQUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU2Ci06MTBBQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ1Ci06MTBBQjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM1Ci06MTBBQjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI1Ci06MTBBQjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE1Ci06MTBBQjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1Ci06MTBBQjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY1Ci06MTBBQjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU1Ci06MTBBQjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ1Ci06MTBBQjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM1Ci06MTBBQjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI1Ci06MTBBQkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE1Ci06MTBBQkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk1Ci06MTBBQkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg1Ci06MTBBQkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc1Ci06MTBBQkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY1Ci06MTBBQkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU1Ci06MTBBQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ0Ci06MTBBQzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM0Ci06MTBBQzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI0Ci06MTBBQzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE0Ci06MTBBQzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0Ci06MTBBQzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY0Ci06MTBBQzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU0Ci06MTBBQzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ0Ci06MTBBQzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM0Ci06MTBBQzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI0Ci06MTBBQ0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE0Ci06MTBBQ0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk0Ci06MTBBQ0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg0Ci06MTBBQ0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc0Ci06MTBBQ0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY0Ci06MTBBQ0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU0Ci06MTBBRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQzCi06MTBBRDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMzCi06MTBBRDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIzCi06MTBBRDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEzCi06MTBBRDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzCi06MTBBRDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYzCi06MTBBRDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUzCi06MTBBRDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQzCi06MTBBRDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMzCi06MTBBRDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIzCi06MTBBREEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEzCi06MTBBREIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkzCi06MTBBREMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgzCi06MTBBREQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDczCi06MTBBREUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYzCi06MTBBREYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUzCi06MTBBRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQyCi06MTBBRTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMyCi06MTBBRTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIyCi06MTBBRTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyCi06MTBBRTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyCi06MTBBRTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYyCi06MTBBRTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUyCi06MTBBRTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQyCi06MTBBRTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMyCi06MTBBRTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIyCi06MTBBRUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEyCi06MTBBRUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkyCi06MTBBRUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgyCi06MTBBRUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcyCi06MTBBRUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYyCi06MTBBRUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUyCi06MTBBRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQxCi06MTBBRjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMxCi06MTBBRjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIxCi06MTBBRjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExCi06MTBBRjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCi06MTBBRjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYxCi06MTBBRjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUxCi06MTBBRjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQxCi06MTBBRjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMxCi06MTBBRjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIxCi06MTBBRkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEExCi06MTBBRkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkxCi06MTBBRkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgxCi06MTBBRkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcxCi06MTBBRkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYxCi06MTBBRkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUxCi06MTBCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwCi06MTBCMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwCi06MTBCMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwCi06MTBCMDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwCi06MTBCMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi06MTBCMDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYwCi06MTBCMDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUwCi06MTBCMDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQwCi06MTBCMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMwCi06MTBCMDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIwCi06MTBCMEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwCi06MTBCMEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkwCi06MTBCMEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwCi06MTBCMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcwCi06MTBCMEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwCi06MTBCMEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUwCi06MTBCMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNGCi06MTBCMTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGCi06MTBCMTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFGCi06MTBCMTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGCi06MTBCMTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZGCi06MTBCMTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVGCi06MTBCMTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERGCi06MTBCMTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENGCi06MTBCMTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJGCi06MTBCMTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFGCi06MTBCMUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlGCi06MTBCMUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGCi06MTBCMUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdGCi06MTBCMUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZGCi06MTBCMUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVGCi06MTBCMUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRGCi06MTBCMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNFCi06MTBCMjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJFCi06MTBCMjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFCi06MTBCMjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFCi06MTBCMjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZFCi06MTBCMjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVFCi06MTBCMjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERFCi06MTBCMjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENFCi06MTBCMjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJFCi06MTBCMjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFFCi06MTBCMkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlFCi06MTBCMkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhFCi06MTBCMkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdFCi06MTBCMkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZFCi06MTBCMkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVFCi06MTBCMkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRFCi06MTBCMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNECi06MTBCMzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJECi06MTBCMzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFECi06MTBCMzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBECi06MTBCMzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZECi06MTBCMzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVECi06MTBCMzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERECi06MTBCMzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENECi06MTBCMzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJECi06MTBCMzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFECi06MTBCM0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlECi06MTBCM0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhECi06MTBCM0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdECi06MTBCM0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZECi06MTBCM0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVECi06MTBCM0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRECi06MTBCNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNDCi06MTBCNDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJDCi06MTBCNDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFDCi06MTBCNDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDCi06MTBCNDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZDCi06MTBCNDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVDCi06MTBCNDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERDCi06MTBCNDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENDCi06MTBCNDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJDCi06MTBCNDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFDCi06MTBCNEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlDCi06MTBCNEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhDCi06MTBCNEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdDCi06MTBCNEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZDCi06MTBCNEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVDCi06MTBCNEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRDCi06MTBCNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNCCi06MTBCNTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJCCi06MTBCNTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFCCi06MTBCNTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCCi06MTBCNTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZCCi06MTBCNTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVCCi06MTBCNTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERCCi06MTBCNTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENCCi06MTBCNTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJCCi06MTBCNTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFCCi06MTBCNUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlCCi06MTBCNUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhCCi06MTBCNUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdCCi06MTBCNUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZCCi06MTBCNUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVCCi06MTBCNUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRCCi06MTBCNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNBCi06MTBCNjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJBCi06MTBCNjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFBCi06MTBCNjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBCi06MTBCNjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZBCi06MTBCNjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVBCi06MTBCNjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERBCi06MTBCNjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENBCi06MTBCNjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJBCi06MTBCNjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFBCi06MTBCNkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlBCi06MTBCNkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhBCi06MTBCNkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdBCi06MTBCNkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZBCi06MTBCNkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVBCi06MTBCNkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRBCi06MTBCNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM5Ci06MTBCNzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5Ci06MTBCNzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE5Ci06MTBCNzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5Ci06MTBCNzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY5Ci06MTBCNzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU5Ci06MTBCNzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ5Ci06MTBCNzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM5Ci06MTBCNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI5Ci06MTBCNzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE5Ci06MTBCN0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk5Ci06MTBCN0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg5Ci06MTBCN0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc5Ci06MTBCN0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY5Ci06MTBCN0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU5Ci06MTBCN0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ5Ci06MTBCODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM4Ci06MTBCODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI4Ci06MTBCODIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE4Ci06MTBCODMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4Ci06MTBCODQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY4Ci06MTBCODUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU4Ci06MTBCODYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ4Ci06MTBCODcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM4Ci06MTBCODgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI4Ci06MTBCODkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE4Ci06MTBCOEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk4Ci06MTBCOEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg4Ci06MTBCOEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc4Ci06MTBCOEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY4Ci06MTBCOEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU4Ci06MTBCOEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ4Ci06MTBCOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM3Ci06MTBCOTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI3Ci06MTBCOTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE3Ci06MTBCOTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3Ci06MTBCOTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY3Ci06MTBCOTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU3Ci06MTBCOTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ3Ci06MTBCOTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM3Ci06MTBCOTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI3Ci06MTBCOTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE3Ci06MTBCOUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk3Ci06MTBCOUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg3Ci06MTBCOUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3Ci06MTBCOUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY3Ci06MTBCOUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU3Ci06MTBCOUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ3Ci06MTBCQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM2Ci06MTBCQTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI2Ci06MTBCQTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE2Ci06MTBCQTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2Ci06MTBCQTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY2Ci06MTBCQTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU2Ci06MTBCQTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ2Ci06MTBCQTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM2Ci06MTBCQTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI2Ci06MTBCQTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE2Ci06MTBCQUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk2Ci06MTBCQUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg2Ci06MTBCQUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc2Ci06MTBCQUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY2Ci06MTBCQUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU2Ci06MTBCQUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ2Ci06MTBCQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM1Ci06MTBCQjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI1Ci06MTBCQjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE1Ci06MTBCQjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1Ci06MTBCQjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY1Ci06MTBCQjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU1Ci06MTBCQjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ1Ci06MTBCQjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM1Ci06MTBCQjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI1Ci06MTBCQjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE1Ci06MTBCQkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk1Ci06MTBCQkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg1Ci06MTBCQkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc1Ci06MTBCQkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY1Ci06MTBCQkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU1Ci06MTBCQkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ1Ci06MTBCQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM0Ci06MTBCQzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI0Ci06MTBCQzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE0Ci06MTBCQzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0Ci06MTBCQzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY0Ci06MTBCQzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU0Ci06MTBCQzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ0Ci06MTBCQzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM0Ci06MTBCQzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI0Ci06MTBCQzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE0Ci06MTBCQ0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk0Ci06MTBCQ0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg0Ci06MTBCQ0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc0Ci06MTBCQ0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY0Ci06MTBCQ0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU0Ci06MTBCQ0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ0Ci06MTBCRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMzCi06MTBCRDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIzCi06MTBCRDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEzCi06MTBCRDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzCi06MTBCRDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYzCi06MTBCRDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUzCi06MTBCRDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQzCi06MTBCRDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMzCi06MTBCRDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIzCi06MTBCRDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEzCi06MTBCREEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkzCi06MTBCREIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgzCi06MTBCREMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDczCi06MTBCREQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYzCi06MTBCREUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUzCi06MTBCREYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQzCi06MTBCRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMyCi06MTBCRTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIyCi06MTBCRTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyCi06MTBCRTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyCi06MTBCRTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYyCi06MTBCRTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUyCi06MTBCRTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQyCi06MTBCRTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMyCi06MTBCRTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIyCi06MTBCRTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEyCi06MTBCRUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkyCi06MTBCRUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgyCi06MTBCRUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcyCi06MTBCRUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYyCi06MTBCRUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUyCi06MTBCRUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQyCi06MTBCRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMxCi06MTBCRjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIxCi06MTBCRjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExCi06MTBCRjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCi06MTBCRjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYxCi06MTBCRjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUxCi06MTBCRjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQxCi06MTBCRjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMxCi06MTBCRjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIxCi06MTBCRjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEExCi06MTBCRkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkxCi06MTBCRkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgxCi06MTBCRkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcxCi06MTBCRkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYxCi06MTBCRkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUxCi06MTBCRkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQxCi06MTBDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwCi06MTBDMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwCi06MTBDMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwCi06MTBDMDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi06MTBDMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYwCi06MTBDMDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUwCi06MTBDMDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQwCi06MTBDMDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMwCi06MTBDMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIwCi06MTBDMDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwCi06MTBDMEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkwCi06MTBDMEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwCi06MTBDMEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcwCi06MTBDMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwCi06MTBDMEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUwCi06MTBDMEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwCi06MTBDMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGCi06MTBDMTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFGCi06MTBDMTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGCi06MTBDMTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZGCi06MTBDMTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVGCi06MTBDMTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERGCi06MTBDMTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENGCi06MTBDMTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJGCi06MTBDMTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFGCi06MTBDMTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlGCi06MTBDMUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGCi06MTBDMUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdGCi06MTBDMUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZGCi06MTBDMUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVGCi06MTBDMUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRGCi06MTBDMUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNGCi06MTBDMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJFCi06MTBDMjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFCi06MTBDMjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFCi06MTBDMjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZFCi06MTBDMjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVFCi06MTBDMjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERFCi06MTBDMjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENFCi06MTBDMjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJFCi06MTBDMjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFFCi06MTBDMjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlFCi06MTBDMkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhFCi06MTBDMkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdFCi06MTBDMkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZFCi06MTBDMkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVFCi06MTBDMkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRFCi06MTBDMkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNFCi06MTBDMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJECi06MTBDMzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFECi06MTBDMzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBECi06MTBDMzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZECi06MTBDMzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVECi06MTBDMzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERECi06MTBDMzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENECi06MTBDMzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJECi06MTBDMzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFECi06MTBDMzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlECi06MTBDM0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhECi06MTBDM0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdECi06MTBDM0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZECi06MTBDM0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVECi06MTBDM0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRECi06MTBDM0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNECi06MTBDNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJDCi06MTBDNDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFDCi06MTBDNDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDCi06MTBDNDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZDCi06MTBDNDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVDCi06MTBDNDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERDCi06MTBDNDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENDCi06MTBDNDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJDCi06MTBDNDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFDCi06MTBDNDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlDCi06MTBDNEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhDCi06MTBDNEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdDCi06MTBDNEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZDCi06MTBDNEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVDCi06MTBDNEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRDCi06MTBDNEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNDCi06MTBDNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJCCi06MTBDNTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFCCi06MTBDNTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCCi06MTBDNTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZCCi06MTBDNTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVCCi06MTBDNTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERCCi06MTBDNTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENCCi06MTBDNTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJCCi06MTBDNTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFCCi06MTBDNTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlCCi06MTBDNUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhCCi06MTBDNUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdCCi06MTBDNUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZCCi06MTBDNUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVCCi06MTBDNUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRCCi06MTBDNUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNCCi06MTBDNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJBCi06MTBDNjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFBCi06MTBDNjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBCi06MTBDNjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZBCi06MTBDNjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVBCi06MTBDNjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERBCi06MTBDNjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENBCi06MTBDNjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJBCi06MTBDNjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFBCi06MTBDNjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlBCi06MTBDNkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhBCi06MTBDNkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdBCi06MTBDNkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZBCi06MTBDNkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVBCi06MTBDNkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRBCi06MTBDNkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNBCi06MTBDNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5Ci06MTBDNzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE5Ci06MTBDNzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5Ci06MTBDNzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY5Ci06MTBDNzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU5Ci06MTBDNzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ5Ci06MTBDNzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM5Ci06MTBDNzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI5Ci06MTBDNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE5Ci06MTBDNzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk5Ci06MTBDN0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg5Ci06MTBDN0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc5Ci06MTBDN0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY5Ci06MTBDN0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU5Ci06MTBDN0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ5Ci06MTBDN0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM5Ci06MTBDODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI4Ci06MTBDODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE4Ci06MTBDODIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4Ci06MTBDODMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY4Ci06MTBDODQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU4Ci06MTBDODUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ4Ci06MTBDODYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM4Ci06MTBDODcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI4Ci06MTBDODgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE4Ci06MTBDODkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk4Ci06MTBDOEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg4Ci06MTBDOEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc4Ci06MTBDOEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY4Ci06MTBDOEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU4Ci06MTBDOEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ4Ci06MTBDOEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM4Ci06MTBDOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI3Ci06MTBDOTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE3Ci06MTBDOTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3Ci06MTBDOTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY3Ci06MTBDOTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU3Ci06MTBDOTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ3Ci06MTBDOTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM3Ci06MTBDOTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI3Ci06MTBDOTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE3Ci06MTBDOTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk3Ci06MTBDOUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg3Ci06MTBDOUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3Ci06MTBDOUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY3Ci06MTBDOUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU3Ci06MTBDOUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ3Ci06MTBDOUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM3Ci06MTBDQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI2Ci06MTBDQTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE2Ci06MTBDQTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2Ci06MTBDQTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY2Ci06MTBDQTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU2Ci06MTBDQTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ2Ci06MTBDQTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM2Ci06MTBDQTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI2Ci06MTBDQTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE2Ci06MTBDQTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk2Ci06MTBDQUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg2Ci06MTBDQUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc2Ci06MTBDQUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY2Ci06MTBDQUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU2Ci06MTBDQUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ2Ci06MTBDQUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM2Ci06MTBDQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI1Ci06MTBDQjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE1Ci06MTBDQjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1Ci06MTBDQjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY1Ci06MTBDQjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU1Ci06MTBDQjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ1Ci06MTBDQjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM1Ci06MTBDQjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI1Ci06MTBDQjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE1Ci06MTBDQjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk1Ci06MTBDQkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg1Ci06MTBDQkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc1Ci06MTBDQkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY1Ci06MTBDQkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU1Ci06MTBDQkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ1Ci06MTBDQkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM1Ci06MTBDQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI0Ci06MTBDQzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE0Ci06MTBDQzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0Ci06MTBDQzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY0Ci06MTBDQzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU0Ci06MTBDQzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ0Ci06MTBDQzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM0Ci06MTBDQzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI0Ci06MTBDQzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE0Ci06MTBDQzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk0Ci06MTBDQ0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg0Ci06MTBDQ0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc0Ci06MTBDQ0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY0Ci06MTBDQ0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU0Ci06MTBDQ0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ0Ci06MTBDQ0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM0Ci06MTBDRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIzCi06MTBDRDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEzCi06MTBDRDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzCi06MTBDRDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYzCi06MTBDRDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUzCi06MTBDRDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQzCi06MTBDRDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMzCi06MTBDRDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIzCi06MTBDRDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEzCi06MTBDRDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkzCi06MTBDREEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgzCi06MTBDREIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDczCi06MTBDREMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYzCi06MTBDREQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUzCi06MTBDREUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQzCi06MTBDREYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMzCi06MTBDRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIyCi06MTBDRTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyCi06MTBDRTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyCi06MTBDRTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYyCi06MTBDRTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUyCi06MTBDRTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQyCi06MTBDRTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMyCi06MTBDRTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIyCi06MTBDRTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEyCi06MTBDRTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkyCi06MTBDRUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgyCi06MTBDRUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcyCi06MTBDRUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYyCi06MTBDRUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUyCi06MTBDRUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQyCi06MTBDRUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMyCi06MTBDRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIxCi06MTBDRjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExCi06MTBDRjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCi06MTBDRjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYxCi06MTBDRjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUxCi06MTBDRjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQxCi06MTBDRjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMxCi06MTBDRjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIxCi06MTBDRjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEExCi06MTBDRjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkxCi06MTBDRkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgxCi06MTBDRkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcxCi06MTBDRkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYxCi06MTBDRkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUxCi06MTBDRkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQxCi06MTBDRkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMxCi06MTBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwCi06MTBEMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwCi06MTBEMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi06MTBEMDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYwCi06MTBEMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUwCi06MTBEMDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQwCi06MTBEMDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMwCi06MTBEMDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIwCi06MTBEMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwCi06MTBEMDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkwCi06MTBEMEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwCi06MTBEMEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcwCi06MTBEMEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwCi06MTBEMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUwCi06MTBEMEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwCi06MTBEMEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwCi06MTBEMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFGCi06MTBEMTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGCi06MTBEMTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZGCi06MTBEMTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVGCi06MTBEMTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERGCi06MTBEMTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENGCi06MTBEMTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJGCi06MTBEMTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFGCi06MTBEMTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlGCi06MTBEMTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGCi06MTBEMUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdGCi06MTBEMUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZGCi06MTBEMUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVGCi06MTBEMUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRGCi06MTBEMUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNGCi06MTBEMUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGCi06MTBEMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFCi06MTBEMjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFCi06MTBEMjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZFCi06MTBEMjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVFCi06MTBEMjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERFCi06MTBEMjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENFCi06MTBEMjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJFCi06MTBEMjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFFCi06MTBEMjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlFCi06MTBEMjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhFCi06MTBEMkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdFCi06MTBEMkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZFCi06MTBEMkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVFCi06MTBEMkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRFCi06MTBEMkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNFCi06MTBEMkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJFCi06MTBEMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFECi06MTBEMzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBECi06MTBEMzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZECi06MTBEMzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVECi06MTBEMzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERECi06MTBEMzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENECi06MTBEMzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJECi06MTBEMzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFECi06MTBEMzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlECi06MTBEMzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhECi06MTBEM0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdECi06MTBEM0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZECi06MTBEM0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVECi06MTBEM0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRECi06MTBEM0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNECi06MTBEM0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJECi06MTBENDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFDCi06MTBENDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDCi06MTBENDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZDCi06MTBENDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVDCi06MTBENDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERDCi06MTBENDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENDCi06MTBENDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJDCi06MTBENDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFDCi06MTBENDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlDCi06MTBENDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhDCi06MTBENEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdDCi06MTBENEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZDCi06MTBENEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVDCi06MTBENEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRDCi06MTBENEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNDCi06MTBENEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJDCi06MTBENTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFCCi06MTBENTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCCi06MTBENTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZCCi06MTBENTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVCCi06MTBENTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERCCi06MTBENTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENCCi06MTBENTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJCCi06MTBENTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFCCi06MTBENTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDFCCi06MTBENTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhCCi06MTBENUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTcxCi06MTBENUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMzU4Ci06MTBENUMwMDAwMDAwMDAwMDAwMDAwMDBEMDAwMDAwMEQzQzAyMDgwMEZCCi06MTBENUQwMDAyNDQyNzMyMDNDMDMwODAwMjQ2Mzc3QUNBQzQwMDAwMDc1Ci06MTBENUUwMDAwMDQzMjAyQjE0ODBGRkZEMjQ0MjAwMDQzQzFEMDgwMDUyCi06MTBENUYwMDAzN0JEN0ZGQzAzQTBGMDIxM0MxMDA4MDAyNjEwMzIxMDNDCi06MTBENjAwMDAzQzFDMDgwMDI3OUM3MzIwMEUwMDEwRkUwMDAwMDAwMDQ4Ci06MTBENjEwMDAwMDAwMDAwRDMwQTVGRkZGMzBDNjAwRkYyNzQzMDE4MDRBCi06MTBENjIwMDA4RjQyMDFCODA0NDBGRkZFMjQwMjAwMDJBQzY0MDAwMEY3Ci06MTBENjMwMDBBNDY1MDAwOEEwNjYwMDBBQTA2MjAwMEIzQzAyMTAwMDZFCi06MTBENjQwMDBBQzY3MDAxODAzRTAwMDA4QUY0MjAxQjgzQzAzNjAwMDdCCi06MTBENjUwMDA4QzYyNEZGODA0NDBGRkZFM0MwMjAyMDBBQzY0NEZDMEY1Ci06MTBENjYwMDBBQzYyNEZDNDNDMDIxMDAwMDNFMDAwMDhBQzYyNEZGODBCCi06MTBENjcwMDA5NDgyMDAwQzI0ODYwMDE0MDBBMDM4MjEwMDAyMTMwMkJBCi06MTBENjgwMDAwMDAyMTA4MDAwODI0MDIxMDBDODEwMkIxMDQwMDA1NzdCCi06MTBENjkwMDAwMDAwMDAwMDkwQzMwMDAwMkM2MjAwMDk1MDQwMDA1MUJGCi06MTBENkEwMDA5MEMyMDAwMTAwMDMxMDgwM0MwMzA4MDAyNDYzNzJEMDg0Ci06MTBENkIwMDAwMDQzMTAyMThDNDIwMDAwMDA0MDAwMDgwMDAwMDAwMEUwCi06MTBENkMwMDA5MEMzMDAwMTI0MDIwMDBBMTQ2MjAwM0EwMDAwMDAwMDI2Ci06MTBENkQwMDAwMTA2MTAyMzJDNDIwMDBBMTQ0MDAwMzYyNEM2MDAwMjIyCi06MTBENkUwMDA4Q0UyMDAwMDM0NDIwMTAwQUNFMjAwMDA5MEMyMDAwMDc1Ci06MTBENkYwMDA5MEMzMDAwMTkwQzQwMDAyOTBDNTAwMDMwMDAzMUMwMDA5Ci06MTBENzAwMDAwMDAyMTYwMDAwNDMxMDI1MDAwNDIyMDAwMDQ0MTAyNUVBCi06MTBENzEwMDAwMDQ1MTAyNTI0QzYwMDA0QUNFMjAwMDQ5MEMyMDAwMEJECi06MTBENzIwMDA5MEMzMDAwMTkwQzQwMDAyOTBDNTAwMDMwMDAyMTYwMERGCi06MTBENzMwMDAwMDAzMUMwMDAwNDMxMDI1MDAwNDIyMDAwMDQ0MTAyNUIzCi06MTBENzQwMDAwMDQ1MTAyNTI0QzYwMDA0MEEwMDBDQjhBQ0UyMDAwODBECi06MTBENzUwMDA5MEMzMDAwMTI0MDIwMDA0MTQ2MjAwMTYyNEM2MDAwMkQzCi06MTBENzYwMDA5MEMyMDAwMDkwQzQwMDAxOENFMzAwMDAwMDAyMTIwMDhGCi06MTBENzcwMDAwMDQ0MTAyNTM0NjMwMDA0MjRDNjAwMDJBQ0UyMDAwQzBGCi06MTBENzgwMDAwQTAwMENCOEFDRTMwMDAwOTBDMzAwMDEyNDAyMDAwM0JGCi06MTBENzkwMDAxNDYyMDAwODI0QzYwMDAyOENFMjAwMDA5MEMzMDAwMDVFCi06MTBEN0EwMDAyNEM2MDAwMTM0NDIwMDA4QTBFMzAwMTAwQTAwMENCOEFGCi06MTBEN0IwMDBBQ0UyMDAwMDAzRTAwMDA4MjQwMjAwMDE5MEMzMDAwMTc1Ci06MTBEN0MwMDAyNDAyMDAwMjEwNjIwMDAyMjRDNDAwMDIwMTAwMjAyMTkxCi06MTBEN0QwMDAwQTAwMENCODAwODAzMDIxMEEwMDBDQjgyNEM2MDAwMUYxCi06MTBEN0UwMDA5MEMyMDAwMTBBMDAwQ0I4MDBDMjMwMjEwM0UwMDAwODFBCi06MTBEN0YwMDAwMDAwMTAyMTI3QkRGRkU4QUZCRjAwMTRBRkIwMDAxMDNDCi06MTBEODAwMDAwRTAwMTMwMjAwODA4MDIxOTM2MjAwMDUyNDAzRkZGRUI2Ci06MTBEODEwMDAwMjAwMjAyMTAwNDMxMDI0OEZCRjAwMTQ4RkIwMDAxMDlECi06MTBEODIwMDBBMzYyMDAwNTBBMDAxMzBCMjdCRDAwMTgyN0JERkZFOEZGCi06MTBEODMwMDBBRkIwMDAxMEFGQkYwMDE0MEUwMDBGM0MwMDgwODAyMTdECi06MTBEODQwMDA5MzYyMDAwMDI0MDMwMDUwMzA0MjAwRkYxNDQzMDAwNEEwCi06MTBEODUwMDAyNDAyMDEwMEFGNDIwMTgwMEEwMDBEMzAwMjAwMjAyMUE1Ci06MTBEODYwMDBBRjQwMDE4MDAyMDAyMDIxOEZCRjAwMTQ4RkIwMDAxMDU0Ci06MTBEODcwMDAwQTAwMEZFNzI3QkQwMDE4MjdCREZGODBBRkJFMDA3ODY0Ci06MTBEODgwMDBBRkI3MDA3NEFGQjIwMDYwQUZCRjAwN0NBRkI2MDA3MDNFCi06MTBEODkwMDBBRkI1MDA2Q0FGQjQwMDY4QUZCMzAwNjRBRkIxMDA1QzZCCi06MTBEOEEwMDBBRkIwMDA1ODhGNTAwMTI4M0MwMjA4MDA4QzQyMzFBMEQ0Ci06MTBEOEIwMDAyNDAzRkY4MDkzNjUwMDNGMDIwMjEwMjEwMDQzMTAyNERGCi06MTBEOEMwMDBBRjQyMDAyNDNDMDIwODAwOEM0MjMxQTA5MzY0MDAwNTYyCi06MTBEOEQwMDAzMEIyMDBGRjAyMDIxMDIxMzA0MjAwN0YwMzQyMTgyMUMzCi06MTBEOEUwMDAwMDA0MjAyNzNDMDIwMDBBMDA2MjE4MjEzMDg0MDAwMTU1Ci06MTBEOEYwMDBBRjgzMDAxNDAwMDBGMDIxMDAwMEI4MjExNDgwMDA1MzExCi06MTBEOTAwMDBBRkEwMDA1MDkzNDMwMTE2OTM0NDAxMTI4RjQ1MDEwNEM4Ci06MTBEOTEwMDAzMDYzMDBGRjNDMDIwMDAxMzA4NDAwRkYwMEEyMjgyNDk1Ci06MTBEOTIwMDAwMzQzMTAyMTAzNDQxODIxMjQ1NjQwMDAyNDY3NDAwMDdCCi06MTBEOTMwMDAxNEEwMDFDRDI0MDIwMDAxOTM2MjAwMDAzMDQzMDBGRkQ3Ci06MTBEOTQwMDAyNDAyMDAyMDEwNjIwMDA1MjQwMjAwNTAxMDYyMDAwNjJDCi06MTBEOTUwMDAwMDAwMDAwMDBBMDAwRDc0MDAwMDAwMDAwMDAwMDAwRDJGCi06MTBEOTYwMDAwQTAwMEQ3REFGQTAwMDMwM0MxRTA4MDAyN0RFNzM2QzVFCi06MTBEOTcwMDAwQTAwMEQ3REFGQTAwMDMwM0MwMjA4MDA4QzQyMDBEQ0E0Ci06MTBEOTgwMDAyNDQyMDAwMTNDMDEwODAwQUMyMjAwREMwRTAwMTM5RjgxCi06MTBEOTkwMDAwMDAwMDAwMDBBMDAwRjMxOEZCRjAwN0M4RjQyMDEwNDlECi06MTBEOUEwMDAzQzAzMDAyMDkyRDMwMDBEMDA0MzEwMjQwMDAyMjAyQkUyCi06MTBEOUIwMDAwMDA0MjE0MEFGQTQwMDMwOEY0MzAxMDQzQzAyMDA0MDJBCi06MTBEOUMwMDAwMDYyMTgyNDE0NjAwMDAyMzQ4NTAwNDAwMDgwMjgyMTgxCi06MTBEOUQwMDAzMjYyMDAyMEFGQTUwMDMwMTQ0MDAwMDIzNEE2MDA4MDVGCi06MTBEOUUwMDAwMEEwMzAyMTEwQzAwMDBCQUZBNjAwMzA5M0M1MDAwODg2Ci06MTBEOUYwMDA4RjY3MDA0QzAyMDAyMDIxMDAwNTJCMDAzNEE1MDA4MTE4Ci06MTBEQTAwMDAzMEE1RjA4MTBFMDAwQzlCMzBDNjAwRkYwQTAwMEYyRURGCi06MTBEQTEwMDAwMDAwMDAwMDkzNjIwMDNFMzA0MjAwNDAxMDQwMDAwRkMyCi06MTBEQTIwMDAyNDAyMDAwNDU2NDIwMDA3MjQwMjAwMTIwMjAwMjAyMUIyCi06MTBEQTMwMDAwMEUwMjgyMTBFMDAxM0Y3MDJDMDMwMjEwQTAwMEYzMTQ4Ci06MTBEQTQwMDA4RkJGMDA3QzE2NDIwMDA1MDAwMDAwMDAwRTAwMEQyMTczCi06MTBEQTUwMDAwMDAwMjAyMTBBMDAwRjMxOEZCRjAwN0M5NzQzMDExQTdDCi06MTBEQTYwMDA5NkM0MDAwRTkzNjIwMDM1MzI2NTAwMDQzMDc1RkZGRkU2Ci06MTBEQTcwMDAwMDQ0MjAwNEFGQTQwMDU0OEVEMTAwMDQxMEEwMDAxNTZGCi06MTBEQTgwMDA4RUQ0MDAwODkzNjIwMDNFMzA0MjAwNDAxMDQwMDAwN0YwCi06MTBEQTkwMDAwMDAwMDAwMDBFMDAxM0UwMDIyMDIwMjExMDQwMDAwREM1Ci06MTBEQUEwMDAwMDAwMDAwMDBBMDAwRjJFMDAwMDAwMDA4RjYyMDA0NEZBCi06MTBEQUIwMDAwMjIyMTAyMzA0NDAwMTZBMDAwMDAwMDA4RjYyMDA0ODI3Ci06MTBEQUMwMDAwMjIyMTAyMzA0NDEwMTY2MjQwNDAwMTYwQTAwMEUyMURDCi06MTBEQUQwMDA4RkMyMDAwNDhGNjIwMDQ4MDIyMjEwMjMwNDQwMDAwODE1Ci06MTBEQUUwMDAwMDAwMDAwMDNDMDIwODAwOEM0MjMxMDAyNDQyMDAwMThBCi06MTBEQUYwMDAzQzAxMDgwMEFDMjIzMTAwMEEwMDBGMjMwMDAwMDAwMEE2Ci06MTBEQjAwMDA4RjYyMDA0MDAyMjIxMDIzMTg0MDAwMTI4Rjg0MDAxNEZDCi06MTBEQjEwMDAzQzAyMDgwMDhDNDIzMTAwMzI3MzAwRkMwMDAwQTgyMTU2Ci06MTBEQjIwMDAyNDQyMDAwMTNDMDEwODAwQUMyMjMxMDA4RjYzMDA0MDE4Ci06MTBEQjMwMDA5NDgyMDExQzAyMjMxODIzMzA0MkZGRkYwMDQzMTAyQTY1Ci06MTBEQjQwMDA1MDQwMDAxMDI0MDIwMDBDOEY2MjAwNDAwQTAwMERGMkM5Ci06MTBEQjUwMDAwMjIyMTAyMzk0ODMwMTFDOTc2MjAwM0MwMDQzMTAyQjg3Ci06MTBEQjYwMDAxMDQwMDAwNjAwMDAwMDAwOTQ4MjAxMUMwMDU1MTAyM0E0Ci06MTBEQjcwMDBBNDgyMDExQzBBMDAwREY3MjQwMjAwMENBNDgwMDExQ0UxCi06MTBEQjgwMDAyNDAyMDAwQ0FGQTIwMDMwOEY2MjAwNDAwMDUxMjAyMzFECi06MTBEQjkwMDAxODgwMDAwRDAyQTQxMDJBMTQ0MDAxMjYwMDAwMDAwMDg1Ci06MTBEQkEwMDAxNDk1MDAwNjAyQTQxMDIzM0E2MjAwMDEzMDQyMDAwMURECi06MTBEQkIwMDAxNDQwMDEyMDAwMDAwMDAwMDJBNDEwMjMwMjI0ODgyMTQ4Ci06MTBEQkMwMDAwQTAwMEUwOTMwNTVGRkZGMDAwMDIwMjEzMjYyMDAwMkRBCi06MTBEQkQwMDAxMDQwMDAxQTMyNjIwMDEwOTM2MjAwM0UzMDQyMDA0MDUyCi06MTBEQkUwMDA1MDQwMDAxMThGQzIwMDA0MEUwMDEzMDIwMjAwMjAyMUQ5Ci06MTBEQkYwMDAyNDAyMDAxOEEzNjIwMDNGOTM2MjAwMDUyNDAzRkZGRTg1Ci06MTBEQzAwMDAwMjAwMjAyMTAwNDMxMDI0MEUwMDEzMEJBMzYyMDAwNTI0Ci06MTBEQzEwMDAyNDA0MDAzOTAwMDAyODIxMEUwMDEzQzkyNDA2MDAxODJFCi06MTBEQzIwMDAwQTAwMEYzMDI0MDIwMDAxMjQwNDAwMTcwMDQwRjgwOTA0Ci06MTBEQzMwMDAwMDAwMDAwMDBBMDAwRjMwMjQwMjAwMDExMDQwMDEwODFCCi06MTBEQzQwMDAwMDAwMDAwMDhGNjMwMDRDOEY2MjAwNTQwMjgyMTAyMzlBCi06MTBEQzUwMDAxQzQwMDEwMzAyODMxMDIzMDQ0MjAwMDEwMDYwQTAyMTQ0Ci06MTBEQzYwMDBBRkE0MDAxOEFGQjEwMDEwQUZCNTAwMTQ5MzQyMDEyMDZCCi06MTBEQzcwMDA4RjY1MDA0MDk3NjMwMDNDMzA0MjAwRkYwMzQyMTAyMTUzCi06MTBEQzgwMDAwMDQ0MTAyMThGQTQwMDU0MzA2M0ZGRkYyNDQyNDAwMDYxCi06MTBEQzkwMDAwMDgzMTgyQjhGQTQwMDMwQUZBMjAwMjBBRkE1MDAyODZFCi06MTBEQ0EwMDAwMDgzMjAyNUFGQTQwMDMwQUZBNTAwMjRBRkEwMDAyQzM2Ci06MTBEQ0IwMDBBRkI0MDAzNDkzNjIwMDNFMzA0MjAwMDg1MDQwMDAxMTdGCi06MTBEQ0MwMDA4RkMyMDAwMDAyQzAyMDIxMjdBNTAwMzgwRTAwMENCMjMwCi06MTBEQ0QwMDBBRkEwMDAzODU0NDAwMDBCOEZDMjAwMDA4RkEyMDAzODY0Ci06MTBEQ0UwMDAzMDQyMDEwMDUwNDAwMDA3OEZDMjAwMDA4RkEzMDAzQzZCCi06MTBEQ0YwMDA4RjYyMDA2MDAwNjIxMDIzMDQ0MzAwMDFBRjYzMDA2MDg0Ci06MTBERDAwMDA4RkMyMDAwMDAwNDBGODA5MjdBNDAwMTA4RkEyMDAzMDQ1Ci06MTBERDEwMDAzMDQyMDAwMjU0NDAwMDAxMzI3MzAwRkU5MzYyMDAzRTI0Ci06MTBERDIwMDAzMDQyMDA0MDEwNDAwMDM3OEZBMjAwMjQ4RjYyMDA1NDIwCi06MTBERDMwMDAxNjgyMDAxQTMyNjIwMDAxMjQwMjAwMTQxMjQyMDAxMEZFCi06MTBERDQwMDAyQTQyMDAxNTEwNDAwMDA2MjQwMjAwMTYyNDAyMDAwQzhFCi06MTBERDUwMDAxMjQyMDAwNzMyNjIwMDAxMEEwMDBFN0QwMDAwMDAwMDNFCi06MTBERDYwMDAxMjQyMDAwNTMyNjIwMDAxMEEwMDBFN0QwMDAwMDAwMDMwCi06MTBERDcwMDAwQTAwMEU3ODI0MTcwMDBFMEEwMDBFNzgyNDE3MDAxMEVGCi06MTBERDgwMDAwQTAwMEU3QzI0MTcwMDEyOTM2MjAwMjMyNDAzRkZCREI3Ci06MTBERDkwMDAwMDQzMTAyNEEzNjIwMDIzMzI2MjAwMDExMDQwMDAxOUU2Ci06MTBEREEwMDA4RkEyMDAyNDI0MDIwMDBDMTI0MjAwMEUyQTQyMDAwRDExCi06MTBEREIwMDAxMDQwMDAwNjI0MDIwMDBFMjQwMjAwMEExMjQyMDAwNzRFCi06MTBEREMwMDA4RkEyMDAyNDBBMDAwRTk1MjQ0MjAwMDExMjQyMDAwODhFCi06MTBEREQwMDA4RkEyMDAyNDBBMDAwRTk1MjQ0MjAwMDEwQTAwMEU5MzJGCi06MTBEREUwMDAyNDE3MDAwODI0MDIwMDBFMTZFMjAwMDIyNDE3MDAxNjcxCi06MTBEREYwMDAyNDE3MDAxMDhGQTIwMDI0MjQ0MjAwMDFBRkEyMDAyNEE3Ci06MTBERTAwMDA4RkEyMDAyNDhGQTMwMDE0OEY3NjAwNDAwMDQzMTAyMUJFCi06MTBERTEwMDBBRjYyMDA0MDhGODIwMDE0OTQ0MjAxMUMxMDQwMDAwOTQwCi06MTBERTIwMDAwMDAwMDAwMDhGNjIwMDQ4OEY2NDAwNDA5NzYzMDAzQzUwCi06MTBERTMwMDAwMDQ0MTAyMzMwNjNGRkZGMDA0MzEwMkExMDQwMDAwODA1Ci06MTBERTQwMDA4RkEyMDA1NDkzNjQwMDM2OEY2MzAwNDAzNDAyRkZGQ0JECi06MTBERTUwMDAwMDgyMTAwNDAwNjIxODIxQUY2MzAwNDg4RkEyMDA1NEIyCi06MTBERTYwMDA4RkE2MDAzMDAyODI5MDIxMzBDMjAwMDgxMDQwMDAwRUMwCi06MTBERTcwMDAwMDAwMDAwMDhGNjIwMDU4MTY0MjAwMDQzMEM2MDBGRjA4Ci06MTBERTgwMDA5NzQyMDExQTUwNDAwMDAxMzRDNjAwMTA5M0M1MDAwOEEzCi06MTBERTkwMDA4RkE3MDAzNDAyMDAyMDIxMDAwNTJCMDAzNEE1MDA4MDRDCi06MTBERUEwMDAwRTAwMEM5QjMwQTVGMDgwOEY2MjAwNDAwMDU2MTAyM0JFCi06MTBERUIwMDAxODQwMDAxQjhGQTIwMDE4M0MwMjA4MDA4QzQyMzE5OEM5Ci06MTBERUMwMDAzMDQyMDAxMDEwNDAwMDBEMjQwMjAwMDE5NzYyMDA2OEVCCi06MTBERUQwMDAxNDQwMDAwQTI0MDIwMDAxOEY4MjAwMTQ5NDQyMDExQ0E1Ci06MTBERUUwMDAxNDQwMDAwNjI0MDIwMDAxQTc2MjAwNjg5NzQyMDA3QUVECi06MTBERUYwMDAyNDQyMDA2NDBBMDAwRUU5QTc2MjAwMTJBNzYyMDAxMjIxCi06MTBERjAwMDAwRTAwMTMwMjAyMDAyMDIxOTM2MjAwN0QyNDAzMDAwMTExCi06MTBERjEwMDAwMjAwMjAyMTM0NDIwMDAxMEEwMDBFRTdBRkEzMDA1MEE2Ci06MTBERjIwMDAxODQwMDAwQTAwMDAwMDAwMEUwMDEzMDIwMjAwMjAyMTI5Ci06MTBERjMwMDA5MzYyMDA3RDI0MDMwMDAxMDIwMDIwMjFBRkEzMDA1MDYyCi06MTBERjQwMDAzNDQyMDAwNDBFMDAxMzBCQTM2MjAwN0Q5MzYyMDAzRTc2Ci06MTBERjUwMDAzMDQyMDA0MDE0NDAwMDBDMzI2MjAwMDExMDQwMDAwQUMwCi06MTBERjYwMDAwMDAwMDAwMDhGNjMwMDQwOEZDMjAwMDQyNDA0MDAxOEVBCi06MTBERjcwMDAyNDYzMDAwMTAwNDBGODA5QUY2MzAwNDA4RkEyMDAzMDI1Ci06MTBERjgwMDAwQTAwMEYzMDMwNDIwMDA0OEY2MjAwNTgxMDUyMDAxMDE3Ci06MTBERjkwMDAwMDAwMDAwMDhGNjIwMDE4MDIyMjEwMjMxQzQwMDAwOEJECi06MTBERkEwMDAyNDA0MDAwMThGNjIwMDE4MTYyMjAwMDkwMDAwMDAwMEZFCi06MTBERkIwMDA4RjYyMDAxQzAyODIxMDIzMDQ0MDAwMDUwMDAwMDAwMDU0Ci06MTBERkMwMDBBRjcyMDA1OEFGQTQwMDUwQUY3MTAwMThBRjc0MDAxQ0JFCi06MTBERkQwMDAxMkUwMDAwQjhGQTIwMDUwMEUwMDEzMDIwMjAwMjAyMTVECi06MTBERkUwMDBBMzc3MDAzRjBFMDAxMzBCMDIwMDIwMjEwMkUwMzAyMTM2Ci06MTBERkYwMDAyNDA0MDAzNzBFMDAxM0M5MDAwMDI4MjE4RkEyMDA1MDBFCi06MTBFMDAwMDAxMDQwMDAwMzAwMDAwMDAwMEUwMDBDQTkwMjAwMjAyMUI3Ci06MTBFMDEwMDAxMkEwMDAwNTAwMDAxODIxOEZBMjAwMzAzMDQyMDAwNDM5Ci06MTBFMDIwMDA1MDQwMDAxMTAwNjAxMDIxMjQwMzAwMDEwQTAwMEYzMDRECi06MTBFMDMwMDAwMDYwMTAyMTBFMDAxMzAyMDIwMDIwMjE5MzYyMDA3RDc3Ci06MTBFMDQwMDAwMjAwMjAyMTM0NDIwMDA0MEUwMDEzMEJBMzYyMDA3RDY1Ci06MTBFMDUwMDAwRTAwMENBOTAyMDAyMDIxMEEwMDBGMzAyNDAyMDAwMTRBCi06MTBFMDYwMDBBRjQwMDA0NDI0MDIwMDAxOEZCRjAwN0M4RkJFMDA3OEM3Ci06MTBFMDcwMDA4RkI3MDA3NDhGQjYwMDcwOEZCNTAwNkM4RkI0MDA2OEQ2Ci06MTBFMDgwMDA4RkIzMDA2NDhGQjIwMDYwOEZCMTAwNUM4RkIwMDA1ODE2Ci06MTBFMDkwMDAwM0UwMDAwODI3QkQwMDgwOEY0MjAxQjgwNDQwRkZGRTY2Ci06MTBFMEEwMDAyNDAyMDgwMEFGNDIwMUI4MDNFMDAwMDgwMDAwMDAwMEFECi06MTBFMEIwMDAzQzAyMDAwODAzNDIxMDIxOTQ0MjAwNDgzMDg0RkZGRkQ0Ci06MTBFMEMwMDAyNDg0MDAxMjMwNDVGRkZGMTBBMDAwMTcwMEE0MTAyQjdECi06MTBFMEQwMDAxMDQwMDAxNjI0MDIwMDAzOTM0MjAxMjAyNDAzMDAxQTdBCi06MTBFMEUwMDBBMzQzMDE4QjMwNDIwMEZGMjQ0NkZGRkU4RjgyMDAwMEQ1Ci06MTBFMEYwMDAwMEE2MTgyQjM4NjMwMDAxMDAwMjEzODIwMDQzMTAyNDhECi06MTBFMTAwMDAxMDQwMDAwNThGODQwMDA0MzQ4MjAwMDFBNzQ2MDE5NDZBCi06MTBFMTEwMDAwM0UwMDAwOEFGODIwMDA0MjQwMkZGRkUwMDgyMTAyNDA2Ci06MTBFMTIwMDAwM0UwMDAwOEFGODIwMDA0MjQwMjAwMDMwM0UwMDAwOEJCCi06MTBFMTMwMDBBMzQyMDE4QjI3QkRGRkUwQUZCMTAwMTRBRkIwMDAxMEM4Ci06MTBFMTQwMDBBRkJGMDAxODMwQjBGRkZGMzBEMUZGRkY4RjQyMDFCOEUyCi06MTBFMTUwMDAwNDQwRkZGRTAwMDAwMDAwQUY0NDAxODBBRjQ0MDAyMEY3Ci06MTBFMTYwMDAwRTAwMEY0MjAyMDAyMDIxOEY4MzAwMDA4Rjg0MDAwNEU0Ci06MTBFMTcwMDBBNzUwMDE5QUE3NTAwMThFQTc0MzAxOTA4RjgzMDAwOEYyCi06MTBFMTgwMDAzMDgyODAwMEFGNDMwMUE4QTc1MTAxODgxMDQwMDAwRUUzCi06MTBFMTkwMDA4RjgyMDAwNDkzNDIwMTE2MzA0MjAwRkMyNDQyMDAwNEE2Ci06MTBFMUEwMDAwMDVBMTAyMThDNDI0MDAwMzA0MkZGRkYxNDQwMDAwNjBDCi06MTBFMUIwMDA4RjgyMDAwNDNDMDJGRkZGMzQ0MjdGRkYwMDgyMTAyNDY0Ci06MTBFMUMwMDBBRjgyMDAwNDhGODIwMDA0MjQwM0JGRkYwMDQzMTAyNEE5Ci06MTBFMUQwMDBBNzQyMDFBNjk3NDMwMTBDOEY0MjAxMDQwMDAzMUMwMEQzCi06MTBFMUUwMDAzMDQyRkZGRjAwNjIxODI1QUY0MzAxQUMzQzAyMTAwMDMzCi06MTBFMUYwMDBBRjQyMDFCODhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDZDCi06MTBFMjAwMDAwM0UwMDAwODI3QkQwMDIwOEY0NzAwNzA5MzQyMDExMkYxCi06MTBFMjEwMDA4RjgzMDAwMDI3QkRGRkYwMzA0MjAwRkYwMDAyMjg4MkZDCi06MTBFMjIwMDAzMDYyMDEwMDAwMDAzMDIxMTA0MDAwNDMyNEE0MDAwM0FDCi06MTBFMjMwMDAzMDYyNDAwMDEwNDAwMDEwMzA2MjIwMDAwMDA0MTA4MDY2Ci06MTBFMjQwMDAwMDVBMTAyMThDNDM0MDAwMjRBNDAwMDQwMDA0MTA4MEQ0Ci06MTBFMjUwMDBBRkEzMDAwMDAwNUExMDIxOEM0MjQwMDBBRkEyMDAwNDdFCi06MTBFMjYwMDA5MzQyMDExNjMwNDIwMEZDMDA1QTEwMjE4QzQyNDAwMEJCCi06MTBFMjcwMDAwQTAwMEZDMEFGQTIwMDA4MTA0MDAwMkYwMDAwMzAyMTlDCi06MTBFMjgwMDAwMDA0MTA4MDAwNUExMDIxOEM0MzQwMDAyNEE0MDAwNDk0Ci06MTBFMjkwMDAwMDA0MTA4MEFGQTMwMDAwMDA1QTEwMjE4QzQyNDAwMEZGCi06MTBFMkEwMDBBRkEwMDAwOEFGQTIwMDA0OEZBODAwMDgwMDAwMzAyMTMyCi06MTBFMkIwMDAwMDAwMjAyMTI0MEEwMDA4M0MwOTA4MDAyNTI5MDEwMDRCCi06MTBFMkMwMDAwM0E0MTAyMTE0OEEwMDAzMDAwNDJBMDAxMTAwMDAwQThDCi06MTBFMkQwMDAwMDAwMDAwMDkwNDIwMDAwMjQ4NDAwMDEyQzgzMDAwQzA4Ci06MTBFMkUwMDAwMEEyMTAyMTAwMDIxMDgwMDA0OTEwMjE4QzQyMDAwMDgxCi06MTBFMkYwMDAxNDYwRkZGMzAwQzIzMDI2M0MwNDA4MDA4Qzg0MzEwNDEzCi06MTBFMzAwMDA4RjQyMDA3MDJDODMwMDIwMTA2MDAwMDkwMDQ3MzgyM0UyCi06MTBFMzEwMDAzQzAzMDgwMDI0NjMzMTA4MDAwNDEwODAwMDQzMTAyMUVFCi06MTBFMzIwMDAyNDgzMDAwMUFDNDcwMDAwM0MwMTA4MDBBQzIzMzEwNDA5Ci06MTBFMzMwMDBBRjg2MDAwODI0MDYwMDAxMDBDMDEwMjEwM0UwMDAwODk5Ci06MTBFMzQwMDAyN0JEMDAxMDNDMDIwODAwOEM0MjAwMzgyN0JERkZEMERBCi06MTBFMzUwMDBBRkI1MDAyNEFGQjQwMDIwQUZCMTAwMTRBRkJGMDAyOEE4Ci06MTBFMzYwMDBBRkIzMDAxQ0FGQjIwMDE4QUZCMDAwMTAwMDAwODgyMTlFCi06MTBFMzcwMDAzQzE1MDgwMDI2QjUwMDM4MTQ0MDAwMDIyNDU0RkZGRjY1Ci06MTBFMzgwMDAwMDAwQTAyMTk3NDIwMTBFOEY4NDAwMDAzMDQyRkZGRjYxCi06MTBFMzkwMDAzMDgzNDAwMDEwNjAwMDBBMjQ1MjAwMDQzQzAyMDAyMDM4Ci06MTBFM0EwMDAwMDgyMTAyNDUwNDAwMDA3MzA4MjgwMDA4RjgyMDAwNEQ5Ci06MTBFM0IwMDAyNDAzQkZGRjAwODMxODI0MEEwMDEwMTAzNDQyMTAwMDA5Ci06MTBFM0MwMDAzMDgyODAwMDEwNDAwMDBBM0MwMjAwMjAwMDgyMTAyNEFECi06MTBFM0QwMDAxMDQwMDAwNzhGODIwMDA0M0MwM0ZGRkYzNDYzN0ZGRjdGCi06MTBFM0UwMDAwMDgzMTgyNDM0NDI4MDAwQUY4MjAwMDRBRjgzMDAwMDExCi06MTBFM0YwMDAwRTAwMEY5ODAwMDAwMDAwMTQ0MDAwMDcwMDAwMDAwMDBECi06MTBFNDAwMDA5NzQzMDExRTk3NDIwMTFDMzA2M0ZGRkYwMDAyMTQwMDc2Ci06MTBFNDEwMDAwMDYyMTgyNUFGODMwMDA4OTc0MjAxMEM4RjQzNDAwMDJCCi06MTBFNDIwMDAzMDQ1RkZGRjM0MDJGRkZGMTQ2MjAwMDMwMDAwMDAwMENDCi06MTBFNDMwMDAwQTAwMTAyODI0MTEwMDIwOEY0MjQwMDAzMDQyMDEwMEMxCi06MTBFNDQwMDA1NDQwMDAwMTI0MTEwMDEwOEY4NDAwMDAzMDgyMTAwMDFECi06MTBFNDUwMDA1MDQwMDAxNDM2MzEwMDAxMzA4MjAwMjAxNDQwMDAwQjdGCi06MTBFNDYwMDAzQzAyMTAwMDAwODIxMDI0NTA0MDAwMEUzNjMxMDAwMUEyCi06MTBFNDcwMDAzQzAzMEUwMDNDMDIwREZGMDA4MzE4MjQzNDQyRkZGRkQyCi06MTBFNDgwMDAwMDQzMTAyQjUwNDAwMDA3MzYzMTAwMDEzQzAyMDgwMEM5Ci06MTBFNDkwMDA4QzQyMDAyQzI0NDIwMDAxM0MwMTA4MDBBQzIyMDAyQ0RDCi06MTBFNEEwMDAzNjMxMDAwNTNDMDYwODAwOENDNjAwMzQ1NEMwMDAyM0Y5Ci06MTBFNEIwMDA4Rjg1MDAwMDhGODIwMDA0MzA0MjQwMDA1NDQwMDAxRkNFCi06MTBFNEMwMDA4Rjg1MDAwMDNDMDIxRjAxMDA4MjEwMjQzQzAzMTAwMEQ1Ci06MTBFNEQwMDA1NDQzMDAxQThGODUwMDAwMzBBMjAyMDAxNDQwMDAxNzM4Ci06MTBFNEUwMDA4Rjg1MDAwMDMyNTBGRkZGMzYzMTAwMDI4RjQyMDFCOEE1Ci06MTBFNEYwMDAwNDQwRkZGRTAwMDAwMDAwQUY0MDAxODAwMjAwMjAyMTI4Ci06MTBFNTAwMDAwRTAwMEY0MkFGNDAwMDIwOEY4MzAwMDQyNDAyQkZGRkEzCi06MTBFNTEwMDBBNzUwMDE5QTAwNjIxODI0OEY4MjAwMDBBNzUwMDE4RTM0Ci06MTBFNTIwMDBBNzUxMDE4OEE3NDMwMUE2QTc0MjAxOTAzQzAyMTAwMDExCi06MTBFNTMwMDBBRjQyMDFCODBBMDAxMEY1MDAwMDEwMjEzQzAyMTAwMEEzCi06MTBFNTQwMDAwMEEyMTAyNDEwNDAwMDNBMDAwMDAwMDAxMEMwMDAwRjhDCi06MTBFNTUwMDAwMDAwMDAwMDMwQTIwMTAwMTA0MDAwMEMzQzAzMDIwMDRCCi06MTBFNTYwMDAzQzAyMEYwMDAwQTIxMDI0MTA0MzAwMDgwMDAwMDAwMDJECi06MTBFNTcwMDA4RjgyMDAwODAwNTQxMDI0MDA1NTEwMjE5MDQyMDAwNDlFCi06MTBFNTgwMDAyNDQyMDAwNDBBMDAxMDlGMDAwMjIxQzAwMDAwMDAwMDg1Ci06MTBFNTkwMDAwMDA1MTYwMjMwNTAwMDBGM0EwMzAwMDIyRTQyMDNFRjJFCi06MTBFNUEwMDAzODQyMDAwMTJDNjMwMDAxMDA2MjE4MjQxNDYwMDA3M0RCCi06MTBFNUIwMDAyNDAyMDAwMTNDMDMwODAwOEM2MzAwRDAyRTA2MDAwQ0VFCi06MTBFNUMwMDAzODYyMDAwMTJDNDIwMDAxMDA0NjEwMjQxNDQwMDAxNTVFCi06MTBFNUQwMDAwMDEwMjFDMDI2MDJGRkZDMkM0MjAwMDQ1NDQwMDAxMTEwCi06MTBFNUUwMDAwMDAwMjAyMTM4NjIwMDAyMkM0MjAwMDEwMDQ2MTAyNDY1Ci06MTBFNUYwMDAxMDQwMDAwMzAwMDUxMjQyMEEwMDEwOUYwMDAwMjAyMTc1Ci06MTBFNjAwMDAwMDEwMTgyQjAwNDMxMDI0NTA0MDAwMDYwMDEwMjFDMEI5Ci06MTBFNjEwMDAwMDAwMjAyMTMyNDVGRkZGMEUwMDBGNjMzMjI2RkZGQjcyCi06MTBFNjIwMDAwMDEwMjFDMDMyNDVGRkZGMEEwMDEwRjIzNjI2MDAwMjFBCi06MTBFNjMwMDA4RjQyNDAwMDNDMDMwODAwOEM2MzAwMjQzMDQyMDEwMEZDCi06MTBFNjQwMDAxMDQwMDA0NjMwNjIwMDAxMzIyMjAwMDQzMDcwMDAwRDlDCi06MTBFNjUwMDAxNDQwMDAwMjI0MTMwMDA0MjQxMzAwMDIwMDA1MTJDMjE3Ci06MTBFNjYwMDAzODQyMDAwMTJFNDMwM0VGMzA0MjAwMDEzODYzMDAwMUJECi06MTBFNjcwMDAwMDQzMTAyNTEwNDAwMDAzMzIzMUZGRkIyNDAyRkZGQjUyCi06MTBFNjgwMDAwMjAyODAyNDEwQzAwMDE4MzIwMjAwMDEzMEEyMDEwMEYyCi06MTBFNjkwMDAxMDQwMDAxNTMyMDIwMDAxM0MwMjBGMDAwMEEyMTAyNEJECi06MTBFNkEwMDAzQzAzMDIwMDEwNDMwMDBGOEY4MjAwMDgyNDAzRkZGRThBCi06MTBFNkIwMDAwMjAzODAyNDAwNTQxMDI0MDA1NTEwMjE5MDQyMDAwNENECi06MTBFNkMwMDAwMjMzMzAyNTI0NDIwMDA0MTIwMDAwMDIwMDAyMjFDMDVGCi06MTBFNkQwMDAzMjI2RkZGRjBFMDAwRjYzMzI0NUZGRkYxMjAwMDAyN0I2Ci06MTBFNkUwMDAwMDAwMTAyMTMyMDIwMDAxMTA0MDAwMEQzMjAyMDAwNDJGCi06MTBFNkYwMDAyNDAyMDAwMTEyMDIwMDAyMDIzMzMwMjUzMjI2RkZGRkZECi06MTBFNzAwMDAwMDAwMjAyMTBFMDAwRjYzMzI0NUZGRkYyNDAyRkZGRUIwCi06MTBFNzEwMDAwMjAyODAyNDEyMDAwMDE5MDAwMDEwMjEzMjAyMDAwNEJECi06MTBFNzIwMDAxMDQwMDAxNjI0MDIwMDAxMjQwMjAwMDQxMjAyMDAwMjFDCi06MTBFNzMwMDAwMjMzMzAyNTMyMjZGRkZGMzI0NUZGRkYwRTAwMEY2MzA0Ci06MTBFNzQwMDAyNDA0MDEwMDI0MDJGRkZCMDIwMjgwMjQxMjAwMDAwQkJCCi06MTBFNzUwMDAwMDAwMTAyMTBBMDAxMEY1MjQwMjAwMDExMDQwMDAwN0ZCCi06MTBFNzYwMDAwMDAwMTAyMTMyNDVGRkZGMzYyNjAwMDIwMDAwMjAyMTY0Ci06MTBFNzcwMDAwRTAwMEY2MzAwMDAwMDAwMDAwMDEwMjE4RkJGMDAyODcyCi06MTBFNzgwMDA4RkI1MDAyNDhGQjQwMDIwOEZCMzAwMUM4RkIyMDAxODA3Ci06MTBFNzkwMDA4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAzMEQ3Ci06MTBFN0EwMDAyN0JERkZEMEFGQjAwMDEwM0MwNDYwMENBRkJGMDAyQzAxCi06MTBFN0IwMDBBRkI2MDAyOEFGQjUwMDI0QUZCNDAwMjBBRkIzMDAxQzQzCi06MTBFN0MwMDBBRkIyMDAxOEFGQjEwMDE0OEM4MjUwMDAyNDAzRkY3RjU5Ci06MTBFN0QwMDAzQzFBODAwMDAwNDMxMDI0MzQ0MjM4MENBQzgyNTAwMEI0Ci06MTBFN0UwMDAyNDAyMDAwMzNDMTA2MDAwQUY0MjAwMDg4RTAyMDgwOEJCCi06MTBFN0YwMDAzQzFCODAwODNDMDEwODAwQUMyMDAwMjAzMDQyRkZGMEE4Ci06MTBFODAwMDAzODQyMDAxMDJDNDIwMDAxMEUwMDFCODVBRjgyMDAxODE4Ci06MTBFODEwMDAzQzA0RkZGRjNDMDIwNDAwMzQ4MzA4MDYzNDQyMDAwQzMxCi06MTBFODIwMDBBRTAyMTk0OEFFMDMxOTRDM0MwNTYwMTY4RTAyMTk4MEUxCi06MTBFODMwMDA4Q0EzMDAwMDM0NDIwMjAwMDA2NDE4MjRBRTAyMTk4MDQ4Ci06MTBFODQwMDAzQzAyNTM1MzE0NjIwMDAzMzRBNDdDMDA4Q0EyMDAwNEU1Ci06MTBFODUwMDAwMDUwMjAyMThDODIwMDdDOEM4MzAwNzhBRjgyMDAxMEQ1Ci06MTBFODYwMDBBRjgzMDAwQzhGNTUwMDAwMzJBMjAwMDMxMDQwRkZGRDYzCi06MTBFODcwMDAzMkEyMDAwMTEwNDAwMTNEMzJBMjAwMDI4RjQyMDEyODY1Ci06MTBFODgwMDBBRjQyMDAyMDhGNDIwMTA0OEY0MzAxMDBBRjgyMDAwMDlECi06MTBFODkwMDAwRTAwMEYzQ0FGODMwMDA0M0MwMjA4MDA4QzQyMDBDMDE1Ci06MTBFOEEwMDAxMDQwMDAwODhGODQwMDAwM0MwMjA4MDA4QzQyMDBDNDI1Ci06MTBFOEIwMDAyNDQyMDAwMTNDMDEwODAwQUMyMjAwQzQwQTAwMTI2OTk1Ci06MTBFOEMwMDAwMDAwMDAwMDNDMDIwMDEwMDA4MjEwMjQxNDQwMDEwQ0UzCi06MTBFOEQwMDA4RjgzMDAwNDNDMDIwODAwOEM0MjAwMjAzQzAzMDgwMEE3Ci06MTBFOEUwMDA4QzYzMDAzODAwMDA4ODIxMjQ0MjAwMDEzQzAxMDgwMEFDCi06MTBFOEYwMDBBQzIyMDAyMDNDMTYwODAwMjZENjAwMzgxNDYwMDAwMjI2Ci06MTBFOTAwMDAyNDc0RkZGRjAwMDBBMDIxOTc0MjAxMEUzMDgzNDAwMEQ1Ci06MTBFOTEwMDAzMDQyRkZGRjEwNjAwMDBBMjQ1MjAwMDQzQzAyMDAyMDM1Ci06MTBFOTIwMDAwMDgyMTAyNDUwNDAwMDA3MzA4MjgwMDA4RjgyMDAwNDUzCi06MTBFOTMwMDAyNDAzQkZGRjAwODMxODI0MEEwMDExNzAzNDQyMTAwMDIyCi06MTBFOTQwMDAzMDgyODAwMDEwNDAwMDBBM0MwMjAwMjAwMDgyMTAyNDI3Ci06MTBFOTUwMDAxMDQwMDAwNzhGODIwMDA0M0MwM0ZGRkYzNDYzN0ZGRkY5Ci06MTBFOTYwMDAwMDgzMTgyNDM0NDI4MDAwQUY4MjAwMDRBRjgzMDAwMDhCCi06MTBFOTcwMDAwRTAwMEY5ODAwMDAwMDAwMTQ0MDAwMDcwMDAwMDAwMDg3Ci06MTBFOTgwMDA5NzQzMDExRTk3NDIwMTFDMzA2M0ZGRkYwMDAyMTQwMEYxCi06MTBFOTkwMDAwMDYyMTgyNUFGODMwMDA4OTc0MjAxMEM4RjQzNDAwMEE2Ci06MTBFOUEwMDAzMDQ1RkZGRjM0MDJGRkZGMTQ2MjAwMDMwMDAwMDAwMDQ3Ci06MTBFOUIwMDAwQTAwMTE4ODI0MTEwMDIwOEY0MjQwMDAzMDQyMDEwMERCCi06MTBFOUMwMDA1NDQwMDAwMTI0MTEwMDEwOEY4NDAwMDAzMDgyMTAwMDk4Ci06MTBFOUQwMDA1MDQwMDAxNDM2MzEwMDAxMzA4MjAwMjAxNDQwMDAwQkZBCi06MTBFOUUwMDAzQzAyMTAwMDAwODIxMDI0NTA0MDAwMEUzNjMxMDAwMTFECi06MTBFOUYwMDAzQzAzMEUwMDNDMDIwREZGMDA4MzE4MjQzNDQyRkZGRjRECi06MTBFQTAwMDAwMDQzMTAyQjUwNDAwMDA3MzYzMTAwMDEzQzAyMDgwMDQzCi06MTBFQTEwMDA4QzQyMDAyQzI0NDIwMDAxM0MwMTA4MDBBQzIyMDAyQzU2Ci06MTBFQTIwMDAzNjMxMDAwNTNDMDYwODAwOENDNjAwMzQ1NEMwMDAyMzczCi06MTBFQTMwMDA4Rjg1MDAwMDhGODIwMDA0MzA0MjQwMDA1NDQwMDAxRjQ4Ci06MTBFQTQwMDA4Rjg1MDAwMDNDMDIxRjAxMDA4MjEwMjQzQzAzMTAwMDRGCi06MTBFQTUwMDA1NDQzMDAxQThGODUwMDAwMzBBMjAyMDAxNDQwMDAxN0IyCi06MTBFQTYwMDA4Rjg1MDAwMDMyNTBGRkZGMzYzMTAwMDI4RjQyMDFCODFGCi06MTBFQTcwMDAwNDQwRkZGRTAwMDAwMDAwQUY0MDAxODAwMjAwMjAyMUEyCi06MTBFQTgwMDAwRTAwMEY0MkFGNDAwMDIwOEY4MzAwMDQyNDAyQkZGRjFFCi06MTBFQTkwMDBBNzUwMDE5QTAwNjIxODI0OEY4MjAwMDBBNzUwMDE4RUFGCi06MTBFQUEwMDBBNzUxMDE4OEE3NDMwMUE2QTc0MjAxOTAzQzAyMTAwMDhDCi06MTBFQUIwMDBBRjQyMDFCODBBMDAxMjY3MDAwMDEwMjEzQzAyMTAwMEFBCi06MTBFQUMwMDAwMEEyMTAyNDEwNDAwMDNBMDAwMDAwMDAxMEMwMDAwRjA3Ci06MTBFQUQwMDAwMDAwMDAwMDMwQTIwMTAwMTA0MDAwMEMzQzAzMDIwMEM2Ci06MTBFQUUwMDAzQzAyMEYwMDAwQTIxMDI0MTA0MzAwMDgwMDAwMDAwMEE4Ci06MTBFQUYwMDA4RjgyMDAwODAwNTQxMDI0MDA1NjEwMjE5MDQyMDAwNDE4Ci06MTBFQjAwMDAyNDQyMDAwNDBBMDAxMUZGMDAwMjIxQzAwMDAwMDAwMDlFCi06MTBFQjEwMDAwMDA1MTYwMjMwNTAwMDBGM0EwMzAwMDIyRTQyMDNFRkE4Ci06MTBFQjIwMDAzODQyMDAwMTJDNjMwMDAxMDA2MjE4MjQxNDYwMDA4NTQzCi06MTBFQjMwMDAyNDAyMDAwMTNDMDMwODAwOEM2MzAwRDAyRTA2MDAwQzY4Ci06MTBFQjQwMDAzODYyMDAwMTJDNDIwMDAxMDA0NjEwMjQxNDQwMDAxNUQ4Ci06MTBFQjUwMDAwMDEwMjFDMDI2MDJGRkZDMkM0MjAwMDQ1NDQwMDAxMThBCi06MTBFQjYwMDAwMDAwMjAyMTM4NjIwMDAyMkM0MjAwMDEwMDQ2MTAyNERGCi06MTBFQjcwMDA1MDQwMDAwMzAwMDUxMjQyMEEwMDExRkYwMDAwMjAyMTRFCi06MTBFQjgwMDAwMDEwMTgyQjAwNDMxMDI0NTA0MDAwMDYwMDEwMjFDMDM0Ci06MTBFQjkwMDAwMDAwMjAyMTMyNDVGRkZGMEUwMDBGNjMzMjI2RkZGQkVECi06MTBFQkEwMDAwMDEwMjFDMDMyNDVGRkZGMEEwMDEyNTIzNjI2MDAwMjMzCi06MTBFQkIwMDA4RjQyNDAwMDNDMDMwODAwOEM2MzAwMjQzMDQyMDEwMDc3Ci06MTBFQkMwMDAxMDQwMDA0NjMwNjIwMDAxMzIyMjAwMDQzMDcwMDAwRDE3Ci06MTBFQkQwMDAxNDQwMDAwMjI0MTMwMDA0MjQxMzAwMDIwMDA1MTJDMjkyCi06MTBFQkUwMDAzODQyMDAwMTJFNDMwM0VGMzA0MjAwMDEzODYzMDAwMTM4Ci06MTBFQkYwMDAwMDQzMTAyNTEwNDAwMDAzMzIzMUZGRkIyNDAyRkZGQkNECi06MTBFQzAwMDAwMjAyODAyNDEwQzAwMDE4MzIwMjAwMDEzMEEyMDEwMDZDCi06MTBFQzEwMDAxMDQwMDAxNTMyMDIwMDAxM0MwMjBGMDAwMEEyMTAyNDM3Ci06MTBFQzIwMDAzQzAzMDIwMDEwNDMwMDBGOEY4MjAwMDgyNDAzRkZGRTA0Ci06MTBFQzMwMDAwMjAzODAyNDAwNTQxMDI0MDA1NjEwMjE5MDQyMDAwNDQ2Ci06MTBFQzQwMDAwMjMzMzAyNTI0NDIwMDA0MTIwMDAwMDIwMDAyMjFDMEQ5Ci06MTBFQzUwMDAzMjI2RkZGRjBFMDAwRjYzMzI0NUZGRkYxMjAwMDAzOTFFCi06MTBFQzYwMDAwMDAwMTAyMTMyMDIwMDAxMTA0MDAwMEQzMjAyMDAwNEE5Ci06MTBFQzcwMDAyNDAyMDAwMTEyMDIwMDAyMDIzMzMwMjUzMjI2RkZGRjc3Ci06MTBFQzgwMDAwMDAwMjAyMTBFMDAwRjYzMzI0NUZGRkYyNDAyRkZGRTJCCi06MTBFQzkwMDAwMjAyODAyNDEyMDAwMDJCMDAwMDEwMjEzMjAyMDAwNDI2Ci06MTBFQ0EwMDAxMDQwMDAyODI0MDIwMDAxMjQwMjAwMDQxMjAyMDAwMjg1Ci06MTBFQ0IwMDAwMjMzMzAyNTMyMjZGRkZGMzI0NUZGRkYwRTAwMEY2MzdGCi06MTBFQ0MwMDAyNDA0MDEwMDI0MDJGRkZCMDIwMjgwMjQxMjAwMDAxRDI0Ci06MTBFQ0QwMDAwMDAwMTAyMTBBMDAxMjY3MjQwMjAwMDE1MDQwMDAxOUIwCi06MTBFQ0UwMDAwMDAwMTAyMTMyNDVGRkZGMzYyNjAwMDIwMDAwMjAyMURGCi06MTBFQ0YwMDAwRTAwMEY2MzAwMDAwMDAwMEEwMDEyNjcwMDAwMTAyMUUwCi06MTBFRDAwMDAyNDAyQkZGRjAwNjIxMDI0MTA0MDAwMDgwMDAwMDAwMDMxCi06MTBFRDEwMDAyNDAyODdGRjAwNjIxMDI0MTQ0MDAwMDgzQzAyMDA2MEI3Ci06MTBFRDIwMDAwMDgyMTAyNDEwNDAwMDA1MDAwMDAwMDAwRTAwMEQzNDg5Ci06MTBFRDMwMDAwMDAwMDAwMDBBMDAxMjY3MDAwMDAwMDAwRTAwMTJDNzY5Ci06MTBFRDQwMDAwMDAwMDAwMDEwNDAwMDA2M0MwMjQwMDA4RjQzMDEyNEY4Ci06MTBFRDUwMDAzQzAyNjAyMEFDNDMwMDE0MDAwMDAwMDAzQzAyNDAwMDc0Ci06MTBFRDYwMDBBRjQyMDEzODAwMDAwMDAwMzJBMjAwMDIxMDQwRkVCRDk4Ci06MTBFRDcwMDAwMDAwMDAwMDhGNDIwMTQwM0MwNDQwMDBBRjQyMDAyMEYwCi06MTBFRDgwMDA4RjQzMDE0ODNDMDI3MDAwMDA2MjE4MjQxMDY0MDA0MjY2Ci06MTBFRDkwMDAwMDAwMDAwMDAwODMxMDJCMTQ0MDAwMDYzQzAyNjAwMEJECi06MTBFREEwMDAzQzAyMjAwMDEwNjIwMDA3M0MwMjQwMDAwQTAwMTJDMzJGCi06MTBFREIwMDAwMDAwMDAwMDEwNjIwMDNDM0MwMjQwMDAwQTAwMTJDMzQ4Ci06MTBFREMwMDAwMDAwMDAwMDhGNDUwMTQwOEY0NjAxNDQ4RjQyMDE0OEZBCi06MTBFREQwMDAwMDAyMTQwMjMwNDMwMEZGMjQwMjAwMDQxNDYyMDAwQUZGCi06MTBFREUwMDAyNzQ0MDE4MDhGNDIwMUI4MDQ0MEZGRkUyNDAyMDAxQzJBCi06MTBFREYwMDBBQzg1MDAwMEEwODIwMDBCM0MwMjEwMDBBRjQyMDFCOEJECi06MTBFRTAwMDAwQTAwMTJDMzNDMDI0MDAwMjQwMjAwMDkxNDYyMDAxMkVFCi06MTBFRTEwMDAwMDA2MTYwMjAwMDIyOUMwQUY0NTAwMjA4RjQyMDFCODRCCi06MTBFRTIwMDAwNDQwRkZGRTI0MDIwMDAxMjQwMzAwMDNBRjQ1MDE4MERCCi06MTBFRTMwMDBBMzQzMDE4QkE3NDAwMThFQTc0MDAxOUFBNzQwMDE5MEYwCi06MTBFRTQwMDBBRjQwMDFBOEE3NDIwMTg4QTc0MjAxQTZBRjQwMDFBQzhDCi06MTBFRTUwMDAzQzAyMTAwMEFGNDIwMUI4OEY0MjAxQjgwNDQwRkZGRUVGCi06MTBFRTYwMDAwMDAwMDAwMEFDODUwMDAwOEY0MjAxNDgwMDAyMTQwMjNGCi06MTBFRTcwMDBBNDgyMDAwODI0MDIwMDAyQTA4MjAwMEI4RjQyMDE0OEY1Ci06MTBFRTgwMDBBNDgyMDAxMDNDMDIxMDAwQUM4NjAwMjRBRjQyMDFCOEZFCi06MTBFRTkwMDAwQTAwMTJDMzNDMDI0MDAwMEUwMDEzMTAwMDAwMDAwMEU0Ci06MTBFRUEwMDAwQTAwMTJDMzNDMDI0MDAwMEUwMDFCQkEwMDAwMDAwMDIyCi06MTBFRUIwMDAzQzAyNDAwMEFGNDIwMTc4MDAwMDAwMDAwQTAwMTEyRjIwCi06MTBFRUMwMDAwMDAwMDAwMDhGNDIwMTAwMzA0MjAwM0UxNDQwMDAxMTVCCi06MTBFRUQwMDAyNDAyMDAwMUFGNDAwMDQ4OEY0MjAxMDAzMDQyMDdDMEM5Ci06MTBFRUUwMDAxMDQwMDAwNTAwMDAwMDAwQUY0MDAwNENBRjQwMDA1MDUzCi06MTBFRUYwMDAwM0UwMDAwODI0MDIwMDAxQUY0MDAwNTRBRjQwMDA0MDhFCi06MTBFRjAwMDA4RjQyMDEwMDMwNDIzODAwNTQ0MDAwMDFBRjQwMDA0NEJECi06MTBFRjEwMDAyNDAyMDAwMTAzRTAwMDA4MDAwMDAwMDA4RjQyMDFCODU1Ci06MTBFRjIwMDAwNDQwRkZGRTI0MDIwMDAxQUY0NDAxODBBRjQwMDE4NDkxCi06MTBFRjMwMDBBNzQ1MDE4OEEzNDIwMThBMjQwMjAwMDJBMzQyMDE4QjUzCi06MTBFRjQwMDA5NzQyMDE0QTE0QzAwMDA0QTc0MjAxOTBBRjQwMDFBNEI3Ci06MTBFRjUwMDAwQTAwMTJFRjNDMDIxMDAwOEY0MjAxNDRBRjQyMDFBNEFDCi06MTBFRjYwMDAzQzAyMTAwMEFGNDAwMUE4MDNFMDAwMDhBRjQyMDFCODI2Ci06MTBFRjcwMDA4RjQyMDFCODA0NDBGRkZFMjQwMjAwMDJBRjQ0MDE4MDJBCi06MTBFRjgwMDBBRjQ0MDE4NEE3NDUwMTg4QTM0MjAxOEFBMzQyMDE4QkIzCi06MTBFRjkwMDA5NzQyMDE0QUE3NDIwMTkwQUY0MDAxQTQ4RjQyMDE0NDI5Ci06MTBFRkEwMDBBRjQyMDFBODNDMDIxMDAwMDNFMDAwMDhBRjQyMDFCOEU0Ci06MTBFRkIwMDAzQzAyOTAwMDM0NDIwMDAxMDA4MjIwMjVBRjQ0MDAyMDMyCi06MTBFRkMwMDA4RjQyMDAyMDA0NDBGRkZFMDAwMDAwMDAwM0UwMDAwODI0Ci06MTBFRkQwMDAwMDAwMDAwMDNDMDI4MDAwMzQ0MjAwMDEwMDgyMjAyNTM1Ci06MTBFRkUwMDAwM0UwMDAwOEFGNDQwMDIwMjdCREZGRThBRkJGMDAxNEQ2Ci06MTBFRkYwMDBBRkIwMDAxMDhGNTAwMTQwOTM0MzAxNDk5MzQyMDE0ODQ0Ci06MTBGMDAwMDA5MzQ0MDE0ODMwNjMwMEZGMzA0MjAwRkYwMDAyMTIwMEM5Ci06MTBGMDEwMDAwMDYyMjgyNTI0MDIwMDE5MTA2MjAwNzYzMDg0MDA4MEU2Ci06MTBGMDIwMDAyODYyMDAxQTEwNDAwMDFDMjQwMjAwMjAyNDAyMDAwODVDCi06MTBGMDMwMDAxMDYyMDA3NzI4NjIwMDA5MTA0MDAwMEUyNDAyMDAwQkM1Ci06MTBGMDQwMDAyNDAyMDAwMTEwNjIwMDM0Mjg2MjAwMDI1MDQwMDAwNUQyCi06MTBGMDUwMDAyNDAyMDAwNjUwNjAwMDM0MDIwMDIwMjEwQTAwMTM5QUE2Ci06MTBGMDYwMDAwMDAwMDAwMDEwNjIwMDMwMDIwMDIwMjEwQTAwMTM5QTA0Ci06MTBGMDcwMDAwMDAwMDAwMDEwNjIwMDNCMjg2MjAwMEM1MDQwMDAwMkJCCi06MTBGMDgwMDAyNDAyMDAwRTI0MDIwMDA5MTA2MjAwNTYwMjAwMjAyMTEyCi06MTBGMDkwMDAwQTAwMTM5QTAwMDAwMDAwMTA2MjAwNTYyODYyMDAyMTQ2Ci06MTBGMEEwMDAxMDQwMDAwRjI0MDIwMDM4MjQwMjAwMUMxMDYyMDA1ODk3Ci06MTBGMEIwMDAyODYyMDAxRDEwNDAwMDA2MjQwMjAwMUYyNDAyMDAxQkNECi06MTBGMEMwMDAxMDYyMDA0QzAwMDAwMDAwMEEwMDEzOUEwMDAwMDAwMENCCi06MTBGMEQwMDAxMDYyMDA0QTAyMDAyMDIxMEEwMDEzOUEwMDAwMDAwMDdBCi06MTBGMEUwMDAxMDYyMDA0NTI4NjIwMDM5MTA0MDAwMDcyNDAyMDA4MEE5Ci06MTBGMEYwMDAyNDYyRkZDQjJDNDIwMDAyMTA0MDAwNDUwMjAwMjAyMTc4Ci06MTBGMTAwMDAwQTAwMTM5NjAwMDAzMDIxMTA2MjAwMDkwMDAwMDAwMDgwCi06MTBGMTEwMDAwQTAwMTM5QTAwMDAwMDAwMTQ4MDAwM0QwMjAwMjAyMTI0Ci06MTBGMTIwMDAwQTAwMTM5MDhGQkYwMDE0MEEwMDEzOTYyNDA2MDAwMUYyCi06MTBGMTMwMDA4RjQyMDFCODA0NDBGRkZFMjQwMjAwMDJBMzQyMDE4QjZCCi06MTBGMTQwMDBBNzQ1MDE4ODk3NDIwMTRBQTc0MjAxOTA4RjQyMDE0NDk2Ci06MTBGMTUwMDBBNzQyMDE5MjNDMDIxMDAwQUY0MjAxQjgwQTAwMTM5QzgyCi06MTBGMTYwMDA4RkJGMDAxNDk3NDIwMTRBMTQ0MDAwMjkwMDAwMDAwMDlDCi06MTBGMTcwMDA5MzYyMDAwNTMwNDIwMDA0MTQ0MDAwMjUwMDAwMDAwMEE2Ci06MTBGMTgwMDAwRTAwMTMwMjAyMDAyMDIxOTM2MjAwMDUwMjAwMjAyMURDCi06MTBGMTkwMDAzNDQyMDAwNDBFMDAxMzBCQTM2MjAwMDU5MzYyMDAwNUM1Ci06MTBGMUEwMDAzMDQyMDAwNDE0NDAwMDAyMDAwMDAwMDAwMDAwMDAwRDg2Ci06MTBGMUIwMDA5MzYyMDAwMDI0MDMwMDIwMzA0MjAwRkYxNDQzMDAxNDM3Ci06MTBGMUMwMDAwMDAwMDAwMDhGNDIwMUI4MDQ0MEZGRkUyNDAyMDAwNTQ5Ci06MTBGMUQwMDBBRjUwMDE4MEEzNDIwMThCM0MwMjEwMDAwQTAwMTM5QTM5Ci06MTBGMUUwMDBBRjQyMDFCODhGQkYwMDE0OEZCMDAwMTAwQTAwMTJGMkI2Ci06MTBGMUYwMDAyN0JEMDAxODAwMDAwMDBEMDIwMDIwMjEwMDAwMzAyMTcyCi06MTBGMjAwMDA4RkJGMDAxNDhGQjAwMDEwMEEwMDEyREQyN0JEMDAxODU4Ci06MTBGMjEwMDAwMDAwMDAwRDhGQkYwMDE0OEZCMDAwMTAwM0UwMDAwODQ1Ci06MTBGMjIwMDAyN0JEMDAxODI3QkRGRkU4QUZCRjAwMTAwRTAwMEYzQzQwCi06MTBGMjMwMDAwMDAwMDAwMEFGNDAwMTgwOEZCRjAwMTAwMDAwMjAyMUJGCi06MTBGMjQwMDAwQTAwMEZFNzI3QkQwMDE4MzA4NEZGRkYzMEE1RkZGRjNECi06MTBGMjUwMDAwMDAwMTgyMTEwODAwMDA3MDAwMDAwMDAzMDgyMDAwMTJCCi06MTBGMjYwMDAxMDQwMDAwMjAwMDQyMDQyMDA2NTE4MjEwQTAwMTNBQjgwCi06MTBGMjcwMDAwMDA1Mjg0MDAzRTAwMDA4MDA2MDEwMjExMEMwMDAwNkNGCi06MTBGMjgwMDAyNEM2RkZGRjhDQTIwMDAwMjRBNTAwMDRBQzgyMDAwMDZECi06MTBGMjkwMDAwQTAwMTNCNTI0ODQwMDA0MDNFMDAwMDgwMDAwMDAwMDA1Ci06MTBGMkEwMDAxMEEwMDAwODI0QTNGRkZGQUM4NjAwMDAwMDAwMDAwMEFGCi06MTBGMkIwMDAwMDAwMDAwMDI0MDJGRkZGMjQ2M0ZGRkYxNDYyRkZGQTM2Ci06MTBGMkMwMDAyNDg0MDAwNDAzRTAwMDA4MDAwMDAwMDAzMDgzMDBGRkY1Ci06MTBGMkQwMDAzMEE1MDBGRjMwQzYwMEZGMjc0NzAxODA4RjQyMDFCOEVDCi06MTBGMkUwMDAwNDQwRkZGRTAwMDAwMDAwOEY0MjAxMjgzNDYzNDAwMDBDCi06MTBGMkYwMDBBQ0UyMDAwMDI0MDIwMDAxQUNFMDAwMDRBNEUzMDAwODNBCi06MTBGMzAwMDBBMEUyMDAwQTI0MDIwMDAyQTBFMjAwMEIzQzAyMTAwMDZFCi06MTBGMzEwMDBBNEU1MDAxMEFDRTAwMDI0QUNFMDAwMjhBNEU2MDAxMjU0Ci06MTBGMzIwMDAwM0UwMDAwOEFGNDIwMUI4MjdCREZGRThBRkJGMDAxMEZGCi06MTBGMzMwMDA5MzYyMDAzRjI0MDMwMDEyMzA0MjAwRkYxMDQzMDAwRDhGCi06MTBGMzQwMDAwMDgwMzAyMThGNjIwMDQ0MDA4MjEwMjMwNDQwMDAwQUI0Ci06MTBGMzUwMDA4RkJGMDAxMDhGNjIwMDQ4MjQwNDAwMzkwMDAwMjgyMTZDCi06MTBGMzYwMDAwMEMyMTAyMzA0NDEwMDA0MjQwNjAwMTIwRTAwMTNDOTM5Ci06MTBGMzcwMDAwMDAwMDAwMDhGQkYwMDEwMjQwMjAwMDEwM0UwMDAwODFECi06MTBGMzgwMDAyN0JEMDAxODI3QkRGRkM4QUZCMjAwMzBBRkIxMDAyQ0I5Ci06MTBGMzkwMDBBRkJGMDAzNEFGQjAwMDI4OTBDNTAwMEQwMDgwOTAyMUIxCi06MTBGM0EwMDAzMEE0MDAxMDEwODAwMDBCMDBDMDg4MjE4Q0MzMDAwODFFCi06MTBGM0IwMDA4RjYyMDA1NDEwNjIwMDA3MzBBMjAwMDUxNDQwMDBCNUFGCi06MTBGM0MwMDAyNDA0MDAwMTBFMDAwRDIxMDAwMDIwMjEwQTAwMTRCQkJFCi06MTBGM0QwMDAwMDQwMjAyMTMwQTIwMDA1MTA0MDAwMDkzMEEzMDAxMjk3Ci06MTBGM0UwMDAxMDgwMDBBQzI0MDQwMDAxOEUyMzAwMDg4RjYyMDA1NEJBCi06MTBGM0YwMDAxNDYyMDBBOThGQkYwMDM0MEEwMDE0MkMyNDA0MDAzOEMyCi06MTBGNDAwMDAyNDAyMDAxMjE0NjIwMEEzMjQwNDAwMDEwMjIwMjAyMTFGCi06MTBGNDEwMDAyN0E1MDAxMDBFMDAwQ0IyQUZBMDAwMTAxMDQwMDAxMTg0Ci06MTBGNDIwMDAwMjQwMjAyMThFMjIwMDA4QUY2MjAwODRBRjYwMDA0MEJECi06MTBGNDMwMDAwRTAwMTMwMjAwMDAwMDAwOTM2MjAwN0QwMjQwMjAyMUI0Ci06MTBGNDQwMDAzNDQyMDAyMDBFMDAxMzBCQTM2MjAwN0QwRTAwMENBOUI1Ci06MTBGNDUwMDAwMjQwMjAyMTI0MDQwMDM4MjQwNTAwOEQwQTAwMTRCODNECi06MTBGNDYwMDAyNDA2MDAxMjkzNjIwMDNFMzA0MjAwMDgxMDQwMDAwRjU0Ci06MTBGNDcwMDA4RkEyMDAxMDMwNDIwMTAwMTA0MDAwMDc4RkEzMDAxNDNCCi06MTBGNDgwMDA4RjYyMDA2MDAwNjIxMDIzMDQ0MzAwMDhBRjYzMDA2MEQ1Ci06MTBGNDkwMDAwQTAwMTQ0MTAwMDAwMDAwQUY2MDAwNjA5MzYyMDAzRTZCCi06MTBGNEEwMDAyNDAzRkZGNzAwNDMxMDI0QTM2MjAwM0U5MzYyMDAzRTUyCi06MTBGNEIwMDAzMDQyMDAwODE0NDAwMDAyMjQwNjAwMDMwMDAwMzAyMUZFCi06MTBGNEMwMDA5MzYyMDAzNDkzNjMwMDM3OEY2NDAwODQzMDQyMDBGRkZFCi06MTBGNEQwMDAzMDYzMDBGRjAwNjYxODIxMDAwMzE4ODAwMDQzMjgyMUQ0Ci06MTBGNEUwMDAwMEE0MjAyQjEwODAwMDBCMDAwMDAwMDA5NzYzMDAzQzVDCi06MTBGNEYwMDA4RjYyMDA4NDMwNjNGRkZGMDA0NTEwMjMwMDYyMTgyQkU5Ci06MTBGNTAwMDAxNDYwMDAwNDAwMDAwMDAwOEY2MjAwODQwQTAwMTQ1RDkzCi06MTBGNTEwMDAwMDQ1ODAyMzk3NjIwMDNDMzA1MEZGRkY4RkEzMDAxMDBFCi06MTBGNTIwMDAzMDYyMDAwNDEwNDAwMDA0MDAwNjI4ODA4RkEyMDAxQ0Y2Ci06MTBGNTMwMDAwQTAwMTQ2NTAyMDIxMDJCMkUwMjAyMTg1MDQwMDAwMzJDCi06MTBGNTQwMDAyNDAyMDIxODBBMDAxNDZFMDIwNTEwMjMzMDYzMDAwNDFFCi06MTBGNTUwMDAxMDYwMDAwMzAwNDUxMDIzOEZBMjAwMUMwMDQ1MTAyM0ZCCi06MTBGNTYwMDAwMDQwODAyMTJDNDIwMDgwNTQ0MDAwMDEyNDEwMDA4MDgzCi06MTBGNTcwMDAwRTAwMTMwMjAyNDAyMDIxMjQwMjAwMDFBRjYyMDAwQ0ExCi06MTBGNTgwMDA5MzYyMDAzRTAwMTAyMDQwMzA0MjAwN0ZBMzYyMDAzRUE0Ci06MTBGNTkwMDA4RTIyMDAwNDI0NDIwMDAxQUY2MjAwNDBBNzcwMDAzQ0FDCi06MTBGNUEwMDA4RjYyMDA1MDk2MjMwMDBFMDA0MzEwMjFBRjYyMDA1ODc2Ci06MTBGNUIwMDA4RjYyMDA1MDAwNDQxMDIxQUY2MjAwNUM4RTIyMDAwNDc0Ci06MTBGNUMwMDBBRjYyMDAxODhFMjIwMDA4QUY2MjAwMUM4RkEyMDAxMEVDCi06MTBGNUQwMDAzMDQyMDAwODU0NDAwMDBBOTNBMjAwMjBBMzYwMDAzNjg1Ci06MTBGNUUwMDA5MzYyMDAzNjI0MDNGRkRGQTM2MjAwMzU5MzYyMDAzRTdFCi06MTBGNUYwMDAwMDQzMTAyNEEzNjIwMDNFMEEwMDE0OTg4RTIyMDAwOEUzCi06MTBGNjAwMDBBMzYyMDAzNThFMjIwMDA4QUY2MjAwNEM4RjYyMDAyNDk2Ci06MTBGNjEwMDA4RjYzMDA0MDAwNDMxMDIxQUY2MjAwNDg5MzYyMDAwMEY2Ci06MTBGNjIwMDAyNDAzMDA1MDMwNDIwMEZGMTQ0MzAwMTIyNDAzRkY4MEUzCi06MTBGNjMwMDAzQzAyMDgwMDhDNDIzMUEwMDI0MjEwMjEwMDQzMTAyNEY5Ci06MTBGNjQwMDBBRjQyMDAyODNDMDIwODAwOEM0MjMxQTA4RTI0MDAwODAyCi06MTBGNjUwMDAzQzAzMDAwQzAyNDIxMDIxMzA0MjAwN0YwMzQyMTAyMTgzCi06MTBGNjYwMDAwMDQzMTAyMUFDNDQwMEQ4OEUyMzAwMDhBRjgyMDAxNDYwCi06MTBGNjcwMDBBQzQzMDBEQzBFMDAxMzBCMDI0MDIwMjEyNDA0MDAzOEIwCi06MTBGNjgwMDAwMDAwMjgyMTI0MDYwMDBBMEUwMDEzQzkwMDAwMDAwMDEzCi06MTBGNjkwMDAyNDA0MDAwMThGQkYwMDM0OEZCMjAwMzA4RkIxMDAyQ0UyCi06MTBGNkEwMDA4RkIwMDAyODAwODAxMDIxMDNFMDAwMDgyN0JEMDAzODNCCi06MTBGNkIwMDAyN0JERkZGODI3NDIwMTgwQUZBMjAwMDAzMDhBMDBGRjdCCi06MTBGNkMwMDA4RjQyMDFCODA0NDBGRkZFMDAwMDAwMDA4RjQ2MDEyODcxCi06MTBGNkQwMDAzQzAyMDgwMDhDNDIzMUEwMjQwM0ZGODBBRjg2MDA0ODIyCi06MTBGNkUwMDAwMEMyMTAyMTAwNDMxMDI0QUY0MjAwMjQzQzAyMDgwMDU1Ci06MTBGNkYwMDA4QzQyMzFBMDhGQTkwMDAwOEZBODAwMDAwMEMyMTAyMTA5Ci06MTBGNzAwMDAzMDQyMDA3RjAzNDIxODIxM0MwMjAwMEEwMDYyMTgyMUE3Ci06MTBGNzEwMDA5NDY0MDBENDhGQTcwMDAwOEZBNTAwMDAyNDAyMDAwMjhCCi06MTBGNzIwMDBBRjgzMDAxNEEwQTIwMDBCOEZBMzAwMDAzNTQyNjAwMDNECi06MTBGNzMwMDAzMDg0RkZGRkE0RTIwMDA4M0MwMjEwMDBBRDI2MDAwMDY4Ci06MTBGNzQwMDBBRDA0MDAwNEFDNjAwMDI0MjdCRDAwMDhBRjQyMDFCODNFCi06MTBGNzUwMDAwM0UwMDAwODI0MDIwMDAxOEY4ODAwM0M5MzgyMDAyODA3Ci06MTBGNzYwMDA4RjgzMDAxNDNDMDcwODAwMjRFNzc3NzgwMDQ4MTAyM0IzCi06MTBGNzcwMDAzMDQyMDBGRjMwNDkwMEZDMjQ2NTAwODg4Rjg2MDA0MDNECi06MTBGNzgwMDAzMDRBMDAwMzExMjAwMDA5MDAwMDIwMjEyNDgyMDAwNEQ3Ci06MTBGNzkwMDA4Q0EzMDAwMDMwNDQwMEZGMDA4OTEwMkFBQ0UzMDAwMDc1Ci06MTBGN0EwMDAyNEE1MDAwNDE0NDBGRkY5MjRFNzAwMDQxMTQwMDAwOUQ3Ci06MTBGN0IwMDAwMDAwMjAyMTI0ODIwMDAxOTBBMzAwMDAzMDQ0MDBGRkJCCi06MTBGN0MwMDAwMDhBMTAyQkEwRTMwMDAwMjRBNTAwMDExNDQwRkZGOURCCi06MTBGN0QwMDAyNEU3MDAwMTMwQzIwMDAzMTQ0MDAwMDQ4Rjg1MDAzQzgwCi06MTBGN0UwMDAzMTAyMDAwMzEwNDAwMDBEMDAwMDAwMDAxMEEwMDAwOUNECi06MTBGN0YwMDAwMDAwMjAyMTI0ODIwMDAxOTBDMzAwMDAzMDQ0MDBGRjVCCi06MTBGODAwMDAwMDg1MTAyQkEwRTMwMDAwMjRDNjAwMDExNDQwRkZGOTdFCi06MTBGODEwMDAyNEU3MDAwMTAzRTAwMDA4MDAwMDAwMDAxMTAwRkZGREU0Ci06MTBGODIwMDAwMDAwMjAyMTI0ODIwMDA0OENDMzAwMDAzMDQ0MDBGRjJCCi06MTBGODMwMDAwMDg4MTAyQkFDRTMwMDAwMjRDNjAwMDQxNDQwRkZGOTNDCi06MTBGODQwMDAyNEU3MDAwNDAzRTAwMDA4MDAwMDAwMDA4RjgzMDAzQzcwCi06MTBGODUwMDA5MzgyMDAyODMwQzYwMEZGMzBBNTAwRkYwMDQzMTAyMzJDCi06MTBGODYwMDAzMDQzMDBGRjhGODIwMDE0MDA4MDM4MjEwMDQzMTAyMUI0Ci06MTBGODcwMDAxNEMwMDAwMjI0NDgwMDg4MDA4MzM4MjEzMEUyMDAwM0NECi06MTBGODgwMDAxNDQwMDAwNTMwQTIwMDAzMTQ0MDAwMDMzMDYyMDAwMzVFCi06MTBGODkwMDAxMDQwMDAwRDAwMDAwMDAwMTBBMDAwMDkwMDAwMjAyMTExCi06MTBGOEEwMDAyNDgyMDAwMTkwRTMwMDAwMzA0NDAwRkYwMDg1MTAyQjBCCi06MTBGOEIwMDBBMTAzMDAwMDI0RTcwMDAxMTQ0MEZGRjkyNTA4MDAwMTFFCi06MTBGOEMwMDAwM0UwMDAwODAwMDAwMDAwMTBBMEZGRkQwMDAwMjAyMTYwCi06MTBGOEQwMDAyNDgyMDAwNDhDRTMwMDAwMzA0NDAwRkYwMDg1MTAyQkRDCi06MTBGOEUwMDBBRDAzMDAwMDI0RTcwMDA0MTQ0MEZGRjkyNTA4MDAwNERDCi06MTBGOEYwMDAwM0UwMDAwODAwMDAwMDAwMDA4MDQ4MjEzMEFBRkZGRjVDCi06MTBGOTAwMDAzMEM2MDBGRjMwRTdGRkZGMjc0ODAxODA4RjQyMDFCODczCi06MTBGOTEwMDAwNDQwRkZGRThGODIwMDQ4QUQwMjAwMDA4RjQyMDEyNEE4Ci06MTBGOTIwMDBBRDAyMDAwNDhEMjIwMDIwQTUwNzAwMDhBMTAyMDAwQUY0Ci06MTBGOTMwMDAyNDAyMDAxNkExMDIwMDBCOTM0MzAxMjA4RDIyMDAwODJGCi06MTBGOTQwMDA4RDI0MDAwNDMwNjMwMEZGMDA0MzEwMjE5NzgzMDAzQUE4Ci06MTBGOTUwMDAwMDQ0MTAyMThEMjUwMDI0MDA0MzEwMjMzQzAzMDgwMDlGCi06MTBGOTYwMDA4QzYzMzFBMDhGODQwMDE0QTUwMjAwMEMyNDYzMDBFODhFCi06MTBGOTcwMDAyNDAyRkZGRkE1MEEwMDBFQTUwMzAwMTBBNTA2MDAxMjMxCi06MTBGOTgwMDBBRDA1MDAxOEFEMDIwMDI0OTQ4MjAxMTQyNDAzRkZGNzkyCi06MTBGOTkwMDAzMDQyRkZGRkFEMDIwMDI4OEM4MjAxMThBRDAyMDAyQzFFCi06MTBGOUEwMDAzQzAyMTAwMEFEMDAwMDMwQUY0MjAxQjg4RDIyMDAyMEIzCi06MTBGOUIwMDAwMDQzMTAyNDAzRTAwMDA4QUQyMjAwMjA4RjgyMDAxNEQxCi06MTBGOUMwMDAzMEU3RkZGRjAwODA0ODIxOTA0MjAwRDMzMEE1RkZGRkMxCi06MTBGOUQwMDAzMEM2MDBGRjAwMDIxMTAwMzA0MjBGMDAwMEUyMzgyNTVGCi06MTBGOUUwMDAyNzQ4MDE4MDhGNDIwMUI4MDQ0MEZGRkU4RjgyMDA0ODAzCi06MTBGOUYwMDBBRDAyMDAwMDhGNDIwMTI0QUQwMjAwMDQ4RDIyMDAyMEUwCi06MTBGQTAwMDBBNTA3MDAwOEExMDIwMDBBMjQwMjAwMTdBMTAyMDAwQkFBCi06MTBGQTEwMDA5MzQzMDEyMDhEMjIwMDA4OEQyNDAwMDQzMDYzMDBGRkYxCi06MTBGQTIwMDAwMDQzMTAyMTk3ODMwMDNBMDA0NDEwMjE4Rjg0MDAxNDcyCi06MTBGQTMwMDAwMDQzMTAyMzNDMDMwODAwOEM2MzMxQTBBNTAyMDAwQzk2Ci06MTBGQTQwMDBBNTA1MDAwRTI0NjMwMEU4QTUwMzAwMTBBNTA2MDAxMjFBCi06MTBGQTUwMDBBRDAwMDAxNDhEMjIwMDI0QUQwMjAwMTg4QzgyMDA1Q0UxCi06MTBGQTYwMDBBRDAyMDAxQzhDODIwMDU4QUQwMjAwMjAyNDAyRkZGRjcyCi06MTBGQTcwMDBBRDAyMDAyNDk0ODIwMEU2MzA0MkZGRkZBRDAyMDAyODcwCi06MTBGQTgwMDA5NDgyMDA2MDk0ODMwMEJFMzA0MjdGRkYzMDYzRkZGRkFBCi06MTBGQTkwMDAwMDAyMTIwMDAwNDMxMDIxQUQwMjAwMkMzQzAyMTAwMEI1Ci06MTBGQUEwMDBBRDAwMDAzMEFGNDIwMUI4OTQ4MjAwQkUyNDAzRkZGN0RFCi06MTBGQUIwMDAwMEEyMTAyMUE0ODIwMEJFOEQyMjAwMjAwMDQzMTAyNDQ5Ci06MTBGQUMwMDAwM0UwMDAwOEFEMjIwMDIwMjc0MzAxODA4RjQyMDFCOEU3Ci06MTBGQUQwMDAwNDQwRkZGRThGODIwMDI0OTQ0MjAwMUMzMDQyRkZGRjRFCi06MTBGQUUwMDAwMDAyMTFDMEFDNjIwMDAwMjQwMjAwMTlBMDYyMDAwQkU5Ci06MTBGQUYwMDAzQzAyMTAwMEFDNjAwMDMwMDNFMDAwMDhBRjQyMDFCOEU3Ci06MTBGQjAwMDA4Rjg3MDAyQzMwQzMwMEZGOEY0MjAxQjgwNDQwRkZGRUY2Ci06MTBGQjEwMDA4RjgyMDA0ODM0NjM2MDAwQUNBMjAwMDA5MzgyMDA0NEVFCi06MTBGQjIwMDBBMEEyMDAwNThDRTIwMDEwQTRBMjAwMDZBNEEzMDAwODc1Ci06MTBGQjMwMDA4QzgyMDAyMDI0MDNGRkY3QTBBMjAwMEEyNDAyMDAwMjA2Ci06MTBGQjQwMDBBMEEyMDAwQjhDRTIwMDAwQUNBMjAwMTA4Q0UyMDAwNDJBCi06MTBGQjUwMDBBQ0EyMDAxNDhDRTIwMDFDQUNBMjAwMjQ4Q0UyMDAyMEI5Ci06MTBGQjYwMDBBQ0EyMDAyODhDRTIwMDJDQUNBMjAwMkM4QzgyMDAyNEQ5Ci06MTBGQjcwMDBBQ0EyMDAxODNDMDIxMDAwQUY0MjAxQjg4QzgyMDAyMEY5Ci06MTBGQjgwMDAwMDQzMTAyNDAzRTAwMDA4QUM4MjAwMjA4Rjg2MDAxNDlDCi06MTBGQjkwMDAyN0JERkZFOEFGQkYwMDE0QUZCMDAwMTA5MEMyMDA2M0Y0Ci06MTBGQkEwMDAzMDQyMDAyMDEwNDAwMDA4MzBBNTAwRkY4Q0MyMDA3Q0NECi06MTBGQkIwMDAyNDAzRkZERjI0NDIwMDAxQUNDMjAwN0M5MEMyMDA2MzNBCi06MTBGQkMwMDAwMDQzMTAyNEEwQzIwMDYzMTBBMDAwMjM4RjgzMDAxNDAwCi06MTBGQkQwMDAyNzUwMDE4MDAyMDAyODIxMEUwMDE1RDYyNDA2MDA4MjNECi06MTBGQkUwMDA4RjgyMDAxNDkwNDIwMDYzMzA0MjAwNDA1MDQwMDAxOTYwCi06MTBGQkYwMDBBMzgwMDA0NDhGODMwMDJDOEY0MjAxQjgwNDQwRkZGRTk1Ci06MTBGQzAwMDA4RjgyMDA0OEFFMDIwMDAwMjQwMjYwODJBNjAyMDAwODMzCi06MTBGQzEwMDAyNDAyMDAwMkEyMDIwMDBCOEM2MjAwMDhBRTAyMDAxMDU3Ci06MTBGQzIwMDA4QzYyMDAwQ0FFMDIwMDE0OEM2MjAwMTRBRTAyMDAxODRDCi06MTBGQzMwMDA4QzYyMDAxOEFFMDIwMDI0OEM2MjAwMjRBRTAyMDAyODAwCi06MTBGQzQwMDA4QzYyMDAyOEFFMDIwMDJDM0MwMjEwMDBBRjQyMDFCOENBCi06MTBGQzUwMDBBMzgwMDA0NDhGODMwMDE0OEZCRjAwMTQ4RkIwMDAxMDY2Ci06MTBGQzYwMDA5MDYyMDA2MzI3QkQwMDE4MzA0MjAwN0ZBMDYyMDA2M0VECi06MTBGQzcwMDA5NzgyMDAzQThGODYwMDNDOEY4NTAwMTQ5MzgzMDAyODdBCi06MTBGQzgwMDAwMDQ2MTAyM0E3ODIwMDNBQTRBMDAwRTQ5MEE0MDA2M0Q5Ci06MTBGQzkwMDA4RjgyMDA0MEFGODMwMDNDMjQwM0ZGQkYwMDQ2MTAyMTQ5Ci06MTBGQ0EwMDAwMDgzMjAyNEFGODIwMDQwQTBBNDAwNjM4RjgyMDAxNDUwCi06MTBGQ0IwMDBBMDQwMDBCRDhGODIwMDE0MDNFMDAwMDhBNDQwMDBCRUY1Ci06MTBGQ0MwMDA4RjhBMDAxNDI3QkRGRkUwQUZCMTAwMTRBRkIwMDAxMDYxCi06MTBGQ0QwMDA4Rjg4MDAzQ0FGQkYwMDE4OTM4OTAwMUM5NTQyMDBFNDU4Ci06MTBGQ0UwMDAzMEQxMDBGRjAxMDkxODJCMDA4MDgwMjEzMEFDMDBGRkNCCi06MTBGQ0YwMDAzMDQ3RkZGRjAwMDA1ODIxMTQ2MDAwMDMzMTA2MDBGRjY5Ci06MTBGRDAwMDAwMTIwMzAyMTAxMDk1ODIzOTc4MzAwM0EwMDY4MTAyQjA1Ci06MTBGRDEwMDAxNDQwMDAzQzAwMDAwMDAwMTQ2ODAwMDcyNDAyMDAwMUE5Ci06MTBGRDIwMDA4RTAyMDAyMDI0MDNGRkZCMzRFNzgwMDAwMDQzMTAyNEYwCi06MTBGRDMwMDBBRTAyMDAyMDI0MDIwMDAxMzRFNzA4ODAxNTgyMDAwNThECi06MTBGRDQwMDAzMTY1RkZGRjBFMDAxNTU0MDIwMDIwMjEwQTAwMTY5MUI0Ci06MTBGRDUwMDAwMjAwMjAyMTBFMDAxNTg1MDIwMDIwMjE4Rjg0MDA0ODFBCi06MTBGRDYwMDAyNzQzMDE4MDhGNDIwMUI4MDQ0MEZGRkUyNDAyMDAxODlGCi06MTBGRDcwMDBBQzY0MDAwMEEwNjIwMDBCOEY4NDAwMTQ5NDgyMDBFNjQzCi06MTBGRDgwMDBBNDYyMDAxMDNDMDIxMDAwQUM2MDAwMzBBRjQyMDFCODI5Ci06MTBGRDkwMDA5NDgyMDA2MDI0NDIwMDAxQTQ4MjAwNjA5NDgyMDA2MDhBCi06MTBGREEwMDAzQzAzMDgwMDhDNjMzMTg4MzA0MjdGRkY1NDQzMDAwRkNFCi06MTBGREIwMDAwMjAwMjAyMTk0ODIwMDYwMjQwMzgwMDAwMDQzMTAyNDZDCi06MTBGREMwMDBBNDgyMDA2MDkwODIwMDYwOTA4MzAwNjAzMDQyMDBGRjU3Ci06MTBGREQwMDAwMDAyMTFDMjAwMDIxMDI3MDAwMjExQzAzMDYzMDA3RjMwCi06MTBGREUwMDAwMDYyMTgyNUEwODMwMDYwMDIwMDIwMjEwMjIwMjgyMTQzCi06MTBGREYwMDA4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTAwQTAwMTVGOUUyCi06MTBGRTAwMDAyN0JEMDAyMDkxNDIwMDYzMjQwM0ZGODAwMDQzMTAyNTlBCi06MTBGRTEwMDBBMTQyMDA2Mzk3ODIwMDNBMzA0OEZGRkYxMTAwMDAyMEEyCi06MTBGRTIwMDA5MzgzMDAxQzhGODQwMDE0MDA0QjEwMjMzMDQ2MDBGRjg2Ci06MTBGRTMwMDA5NDgzMDBFNDI0MDJFRkZGMDE2ODI4MkIwMDYyMTgyNDU5Ci06MTBGRTQwMDBBNDgzMDBFNDE0QTAwMDAzOEUwMjAwMjAwMTAwNTgyMUM2Ci06MTBGRTUwMDAwMDAwMzAyMTI0MDNGRkZCMzRFNzgwMDAwMDQzMTAyNDFFCi06MTBGRTYwMDBBRTAyMDAyMDI0MDIwMDAxMTU4MjAwMDUzMTY1RkZGRjZCCi06MTBGRTcwMDAwRTAwMTU1NDAyMDAyMDIxMEEwMDE2Qjk5NzgzMDAzQTlCCi06MTBGRTgwMDAwRTAwMTU4NTAyMDAyMDIxOTc4MzAwM0E4RjgyMDAzQ0U2Ci06MTBGRTkwMDBBNzgwMDAzQTAwNDMxMDIzQUY4MjAwM0M5MzgzMDAxQ0VDCi06MTBGRUEwMDA4RjgyMDAxNDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDI0Ci06MTBGRUIwMDAyN0JEMDAyMDAzRTAwMDA4QTA0MzAwQkQ5MzgyMDA0NDVBCi06MTBGRUMwMDAyNDAzMDAwMTI3QkRGRkU4MDA0MzMwMDQyQzQyMDAyMDNBCi06MTBGRUQwMDBBRkIwMDAxMEFGQkYwMDE0MjQxMEZGRkUxMDQwMDAwNUFCCi06MTBGRUUwMDAyNzQ1MDE4MDNDMDIwODAwOEM0MjMxOTAwQTAwMTZENjVBCi06MTBGRUYwMDAwMDQ2MTAyNDNDMDIwODAwOEM0MjMxOTQwMDQ2MTAyNDM1Ci06MTBGRjAwMDAxNDQwMDAwNzI0MDYwMDg0OEY4MzAwMTQyNDEwRkZGRjkwCi06MTBGRjEwMDA5MDYyMDA2MjMwNDIwMDBGMzQ0MjAwNDBBMDYyMDA2MkYyCi06MTBGRjIwMDAwRTAwMTVENjAwMDAwMDAwMDIwMDEwMjE4RkJGMDAxNDQzCi06MTBGRjMwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMTg4RjgzMDAyNDU1Ci06MTBGRjQwMDAyN0JERkZFMEFGQjIwMDE4QUZCMTAwMTRBRkIwMDAxMDkyCi06MTBGRjUwMDBBRkJGMDAxQzkwNjIwMDBEMDBBMDkwMjEzMEQxMDBGRkM3Ci06MTBGRjYwMDAzMDQyMDA3RkEwNjIwMDBEOEY4NTAwMTQ4RTQzMDAxODgwCi06MTBGRjcwMDAwMDgwODAyMThDQTIwMDdDMTQ2MjAwMDUyNDAyMDAwRTA3Ci06MTBGRjgwMDA5MEEyMDA2MzM0NDIwMDIwMEEwMDE2RkZBMEEyMDA2MzgyCi06MTBGRjkwMDAwRTAwMTZDNUEzODIwMDQ0MjQwM0ZGRkYxMDQzMDA0NzUwCi06MTBGRkEwMDAyNDA0RkZGRjUyMjAwMDQ1MDAwMDIwMjE4RTQzMDAwMDYyCi06MTBGRkIwMDAzQzAyMDAxMDAwNjIxMDI0NTA0MDAwMDQzQzAyMDAwODgzCi06MTBGRkMwMDAwMjAwMjAyMTBBMDAxNzBFMjQwMjAwMTUwMDYyMTAyNEVFCi06MTBGRkQwMDA1MDQwMDAwOThFNDUwMDAwMDIwMDIwMjEyNDAyMDAxNDM4Ci06MTBGRkUwMDAwRTAwMTZDNUEzODIwMDQ0MjQwM0ZGRkYxMDQzMDAzMzE0Ci06MTBGRkYwMDAyNDA0RkZGRjhFNDUwMDAwM0MwMjAwMDIwMEEyMTAyNEYyCi06MDIwMDAwMDQwMDAxRjkKLToxMDAwMDAwMDEwNDAwMDE2M0MwMjAwMDQ4Rjg2MDAyNDhDQzIwMDE0QUQKLToxMDAwMTAwMDhDQzMwMDEwOENDNDAwMTQwMDQzMTAyMzAwNDQxMDJCMjgKLToxMDAwMjAwMDUwNDAwMDA1MDIwMDIwMjE4RTQzMDAyQzhDQzIwMDEwOUQKLToxMDAwMzAwMDEwNjIwMDAzMDIwMDIwMjEwQTAwMTczRjI0MDIwMDEyNzAKLToxMDAwNDAwMDNDMDIwMDA0MDBBMjEwMjQ1MDQwMDAxQzAwMDAyMDIxQUIKLToxMDAwNTAwMDAyMDAyMDIxMEEwMDE3M0YyNDAyMDAxMzAwQTIxMDI0RUUKLToxMDAwNjAwMDEwNDAwMDA2OEY4MzAwMjQ4QzYyMDAxMDUwNDAwMDEzNjMKLToxMDAwNzAwMDAwMDAyMDIxMEEwMDE3MzkwMjAwMjAyMThDNjIwMDEwQTQKLToxMDAwODAwMDUwNDAwMDA0OEU0MjAwMkMwMjAwMjAyMTBBMDAxNzNGM0QKLToxMDAwOTAwMDI0MDIwMDExNTA0MDAwMDkwMDAwMjAyMTAyMDAyMDIxMEMKLToxMDAwQTAwMDI0MDIwMDE3MEUwMDE2QzVBMzgyMDA0NDI0MDNGRkZGOUMKLToxMDAwQjAwMDEwNDMwMDAyMjQwNEZGRkYwMDAwMjAyMThGQkYwMDFDMUEKLToxMDAwQzAwMDhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDAwODAxMDIxODMKLToxMDAwRDAwMDAzRTAwMDA4MjdCRDAwMjA4RjgzMDAxNDI3QkRGRkQ4NTAKLToxMDAwRTAwMEFGQjQwMDIwQUZCMzAwMUNBRkIyMDAxOEFGQjEwMDE0MjIKLToxMDAwRjAwMEFGQjAwMDEwQUZCRjAwMjQ5MDYyMDA2MzhGOTEwMDJDNUUKLToxMDAxMDAwMDI0MTJGRkZGMzQ0MjAwNDA5MjI1MDAwMEEwNjIwMDYzRTkKLToxMDAxMTAwMDhFMjIwMDEwMDA4MDk4MjEzMEIwMDAzRjEwNTIwMDA2NUYKLToxMDAxMjAwMDAzNjBBMDIxMjQwMjAwMEQwRTAwMTZDNUEzODIwMDQ0MjYKLToxMDAxMzAwMDEwNTIwMDU0MjQwNEZGRkY4RjgzMDAxNDhFMjIwMDE4RjUKLToxMDAxNDAwMDhDNjMwMDdDMTA0MzAwMDcwMjYwMjAyMTI0MDIwMDBFMTMKLToxMDAxNTAwMDBFMDAxNkM1QTM4MjAwNDQyNDAzRkZGRjEwNDMwMDQ5OEMKLToxMDAxNjAwMDI0MDRGRkZGMjQwNDAwMjAxMjA0MDAwNDhGODMwMDE0RTEKLToxMDAxNzAwMDkwNjIwMDYzMzQ0MjAwMjBBMDYyMDA2MzhGODUwMDM0RTcKLToxMDAxODAwMDEwQTAwMDIwMDAwMDAwMDA1NjA0MDAwNDhGODIwMDE0MUMKLToxMDAxOTAwMDAyNjAyMDIxMEEwMDE3OTAyNDAyMDAwQTk2ODMwMDBBQjgKLToxMDAxQTAwMDk0NDIwMDYwMzA0MkZGRkYxNDQzMDAwNDhGODIwMDIwMUQKLToxMDAxQjAwMDI0MDRGRkZEMEEwMDE3QjdBRjgyMDAzQzNDMDIwODAwOTAKLToxMDAxQzAwMDhDNDIzMThDMDA0NTEwMkIxNDQwMDAwNjAyNjAyMDIxMjcKLToxMDAxRDAwMDAwMDAyODIxMEUwMDE2NDYyNDA2MDAwMTBBMDAxN0I3NjkKLToxMDAxRTAwMDAwMDAyMDIxMjQwMjAwMkQwRTAwMTZDNUEzODIwMDQ0MjkKLToxMDAxRjAwMDI0MDNGRkZGMTA0MzAwMjMyNDA0RkZGRjBBMDAxN0I3NjYKLToxMDAyMDAwMDAwMDAyMDIxMTYwNDAwMDU4Rjg0MDAxNDhFMjMwMDE0QTIKLToxMDAyMTAwMDI0MDJGRkZGNTA2MjAwMTgwMjYwMjAyMTk0ODIwMDYwRDcKLToxMDAyMjAwMDI0NDIwMDAxQTQ4MjAwNjA5NDgyMDA2MDNDMDMwODAwMjQKLToxMDAyMzAwMDhDNjMzMTg4MzA0MjdGRkY1NDQzMDAwRjAyNjAyMDIxREQKLToxMDAyNDAwMDk0ODIwMDYwMjQwMzgwMDAwMDQzMTAyNEE0ODIwMDYwOTQKLToxMDAyNTAwMDkwODIwMDYwOTA4MzAwNjAzMDQyMDBGRjAwMDIxMUMyNzMKLToxMDAyNjAwMDAwMDIxMDI3MDAwMjExQzAzMDYzMDA3RjAwNjIxODI1RDEKLToxMDAyNzAwMEEwODMwMDYwMDI2MDIwMjEwRTAwMTVGOTI0MDUwMDAxMTIKLToxMDAyODAwMDAwMDAyMDIxOEZCRjAwMjQ4RkI0MDAyMDhGQjMwMDFDRkEKLToxMDAyOTAwMDhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDAwODAxMDIxQjEKLToxMDAyQTAwMDAzRTAwMDA4MjdCRDAwMjg4RjgzMDAxNDI3QkRGRkU4NjYKLToxMDAyQjAwMEFGQjAwMDEwQUZCRjAwMTQ5MDYyMDA2MzhGODcwMDJDQjYKLToxMDAyQzAwMDAwODA4MDIxMzQ0MjAwNDA4Q0U2MDAxMEEwNjIwMDYzNzAKLToxMDAyRDAwMDNDMDMwODAwOEM2MzMxQjAzMEMyM0ZGRjAwNDMxMDJCNTkKLToxMDAyRTAwMDEwNDAwMDRFOEY4NTAwMzAyNDAyRkY4MDkwQTMwMDBENDcKLToxMDAyRjAwMDAwNDMxMDI0MzA0MjAwRkY1MDQwMDA0OTAyMDAyMDIxRkEKLToxMDAzMDAwMDAwMDYxMzgyMzA0ODAwMDMyNDAyMDAwMjU1MDIwMDQ0MTQKLToxMDAzMTAwMDAyMDAyMDIxOTRBMjAwMUM4Rjg1MDAxNDI0MDMwMDIzRDYKLToxMDAzMjAwMEE0QTIwMTE0OENFNjAwMDAwMDA2MTYwMjMwNDIwMDNGMzEKLToxMDAzMzAwMDEwNDMwMDEwM0MwMzAwODM4Q0UzMDAxODhDQTIwMDdDNjcKLToxMDAzNDAwMDEwNjIwMDA2MjQwMjAwMEUwRTAwMTZDNUEzODIwMDQ0QUYKLToxMDAzNTAwMDI0MDNGRkZGMTA0MzAwMzgyNDA0RkZGRjhGODMwMDE0QTEKLToxMDAzNjAwMDkwNjIwMDYzMzQ0MjAwMjBBMDYyMDA2MzBBMDAxN0ZDMjAKLToxMDAzNzAwMDhGODMwMDI0MDBDMzEwMjQxNDQzMDAwNzhGODMwMDI0QkMKLToxMDAzODAwMDkwQTIwMDYyMzA0MjAwMEYzNDQyMDAyMEEwQTIwMDYyMUUKLToxMDAzOTAwMEEzODgwMDM4OEY4MzAwMjQ5MDYyMDAwRDMwNDIwMDdGRDQKLToxMDAzQTAwMEEwNjIwMDBEOEY4MzAwMzQxMDYwMDAxODAyMDAyMDIxMkQKLToxMDAzQjAwMDhGODQwMDMwOEM4MjAwMTAwMDQzMTAyQjEwNDAwMDA5MDUKLToxMDAzQzAwMDI0MDIwMDE4MDIwMDIwMjEwRTAwMTZDNUEzODIwMDQ0NUEKLToxMDAzRDAwMDI0MDNGRkZGMTA0MzAwMTgyNDA0RkZGRjBBMDAxODI0MjEKLToxMDAzRTAwMDAwMDAyMDIxOEM4MjAwMTAyNDA1MDAwMTAyMDAyMDIxNDEKLToxMDAzRjAwMDAwNDMxMDIzOEY4MzAwMjQyNDA2MDAwMTBFMDAxNjQ2QkMKLToxMDA0MDAwMEFDNjIwMDEwMEEwMDE4MjQwMDAwMjAyMTBFMDAxNUY5MkIKLToxMDA0MTAwMDI0MDUwMDAxMEEwMDE4MjQwMDAwMjAyMTAyMDAyMDIxRTgKLToxMDA0MjAwMDI0MDIwMDBEOEZCRjAwMTQ4RkIwMDAxMDI3QkQwMDE4RUMKLToxMDA0MzAwMDBBMDAxNkM1QTM4MjAwNDQ4RkJGMDAxNDhGQjAwMDEwQkQKLToxMDA0NDAwMDAwODAxMDIxMDNFMDAwMDgyN0JEMDAxODI3QkRGRkM4NjkKLToxMDA0NTAwMEFGQjIwMDIwQUZCRjAwMzRBRkI2MDAzMEFGQjUwMDJDNTQKLToxMDA0NjAwMEFGQjQwMDI4QUZCMzAwMjRBRkIxMDAxQ0FGQjAwMDE4ODgKLToxMDA0NzAwMDhGNDYwMTI4M0MwMzA4MDA4QzYzMzFBMDI0MDJGRjgwRDIKLToxMDA0ODAwMEFGODYwMDQ4MDBDMzE4MjEzMDY1MDA3RjAzNDUyODIxNEUKLToxMDA0OTAwMDAwNjIxODI0M0MwMjAwMEFBRjQzMDAyNDAwQTIyODIxNzUKLToxMDA0QTAwMDkwQTIwMDYyMDA4MDkwMjFBRjg1MDAxNDMwNDIwMEZGQ0UKLToxMDA0QjAwMDAwMDIxMTAyQTM4MjAwMzg5MEEyMDBCQzMwNDIwMDAyNjgKLToxMDA0QzAwMDE0NDAwMDAyMjQwMzAwMzQyNDAzMDAzMDhGODIwMDE0RkYKLToxMDA0RDAwMEEzODMwMDI4OTM4MzAwMzg4QzQyMDBDMEEzODAwMDQ0OEIKLToxMDA0RTAwMEFGODIwMDNDMjQwMjAwMDQxMDYyMDMxNDhGODQwMDNDOUQKLToxMDA0RjAwMDhFNDQwMDA0NTA4MDAzMTE4Rjg0MDAzQzhFNDIwMDEwMTMKLToxMDA1MDAwMDMwODNGRkZGQTc4NDAwM0ExMDYwMDJGN0FGODIwMDQwRkIKLToxMDA1MTAwMDhGODQwMDE0MjQwM0ZGODA5MDgyMDA2MzAwNjIxMDI0MDMKLToxMDA1MjAwMDMwNDIwMEZGMTQ0MDAyQzc5Nzg1MDAzQTkzODMwMDM4OTkKLToxMDA1MzAwMDI0MDIwMDAyMzBCNkZGRkYxNDYyMDAwNTAwMDA4ODIxOEIKLToxMDA1NDAwMDkzODIwMDI4MjQwM0ZGRkQwQTAwMUIxMUFGODIwMDNDQTgKLToxMDA1NTAwMDhGODIwMDNDMDJDMjEwMkIxNDQwMDI5OThGODQwMDQwMEQKLToxMDA1NjAwMDBFMDAxNEVDMDAwMDAwMDA5MzgzMDAyODNDMDQwODAwRjcKLToxMDA1NzAwMDI0ODQ3Nzc4MjQwMjAwMzQxNDYyMDAyRUFGODQwMDJDODcKLToxMDA1ODAwMDNDMEEwODAwOEQ0QTc3QTgyNDAyRkZGRkFGQTIwMDEwQTIKLToxMDA1OTAwMDAwODAzODIxMjQwNTAwMkYzQzA5MDgwMDI1Mjk3Mzc4QTQKLToxMDA1QTAwMDI0MDgwMEZGMjQwNkZGRkY5MEUyMDAwMDI0QTNGRkZGQzEKLToxMDA1QjAwMDAwMDYyMjAyMDBDMjEwMjYzMDQyMDBGRjAwMDIxMDgwMTYKLToxMDA1QzAwMDAwNDkxMDIxOEM0MjAwMDAzMDY1MDBGRjI0RTcwMDAxNDMKLToxMDA1RDAwMDE0QThGRkY1MDA4MjMwMjYwMDA2MTAyN0FGQTIwMDE0RjEKLToxMDA1RTAwMEFGQTIwMDEwMDAwMDI4MjEyN0E3MDAxMDI3QTYwMDE0QTIKLToxMDA1RjAwMDAwQzUxMDIzOTA0NDAwMDMyNEEyMDAwMTAwQTcxODIxODUKLToxMDA2MDAwMDMwNDUwMEZGMkNBMjAwMDQxNDQwRkZGOUEwNjQwMDAwNTQKLToxMDA2MTAwMDhGQTIwMDEwMTE0MjAwMDcyNDAyMDAwNTAyNDAyMDIxOTEKLToxMDA2MjAwMDBFMDAxNkM1QTM4MjAwNDQyNDAzRkZGRjEwNDMwMDY0OUMKLToxMDA2MzAwMDI0MDRGRkZGM0MwMjA4MDA5MDQyNzc3QzEwNDAwMDA5MzAKLToxMDA2NDAwMDhGODIwMDE0MDI0MDIwMjEyNDAyMDAwQzBFMDAxNkM1RTcKLToxMDA2NTAwMEEzODIwMDQ0MjQwM0ZGRkYxMDQzMDA1OTI0MDRGRkZGM0EKLToxMDA2NjAwMDhGODIwMDE0QTM4MDAwMUMzQzAzMDgwMDhDNjM3NzdDRkQKLToxMDA2NzAwMDhDNDQwMDgwM0MwMjAwRkYzNDQyRkZGRjAwNjIxODI0REIKLToxMDA2ODAwMDAwODMyMDJCMTA4MDAwMDhBRjgzMDAzNDAyNDAyMDIxMUIKLToxMDA2OTAwMDI0MDIwMDE5MEUwMDE2QzVBMzgyMDA0NDI0MDNGRkZGQTQKLToxMDA2QTAwMDEwNDMwMDQ3MjQwNEZGRkY4Rjg3MDAzQzk3ODIwMDNBRTUKLToxMDA2QjAwMDhGODUwMDM0QUY4NzAwMjAwMDQ3MjAyMzEwQTAwMDNCMjcKLToxMDA2QzAwMEE3ODQwMDNBOEY4NjAwMTQzMEEyMDAwMzAwMDIxMDIzOTIKLToxMDA2RDAwMDkwQzMwMEJDMzA1MDAwMDMwMEIwMjgyMTAwMDMxODgyRjIKLToxMDA2RTAwMDMwNzMwMDAxMDAxMzEwODAwMEEyMjgyMTNDMDMwODAwOTEKLToxMDA2RjAwMDhDNjMzMUEwOEY4MjAwNDgzMDg0RkZGRjAwODUyMDJCNUYKLToxMDA3MDAwMDAwNDMxMDIxMTA4MDAwMTEyNDQyMDA4ODhGODQwMDJDQTcKLToxMDA3MTAwMDEwODIwMDBFM0MwMzNGMDEzQzAyMDgwMDhDNDI3Nzc4QjcKLToxMDA3MjAwMDAwNDMxMDI0M0MwMzI1MDAxNDQzMDAwNjMwRTUwMEZGN0QKLToxMDA3MzAwMDhDODIwMDAwQUNDMjAwODg4QzgyMDAxMDBBMDAxOEU5OEMKLToxMDA3NDAwMEFDQzIwMDk4MEUwMDE1MjkwMDAwMzAyMTkzODIwMDFDRDUKLToxMDA3NTAwMDhGODUwMDE0OEY4MzAwNDAwMjAyMzgyMThGODIwMDNDNzUKLToxMDA3NjAwMEEzODcwMDFDOTRBNDAwRTQwMDYyMTgyMThGODIwMDM0NDcKLToxMDA3NzAwMDM0ODQxMDAwQUY4MzAwNDAwMDUwMzAyMUE0QTQwMEU0NzIKLToxMDA3ODAwMDEyNjAwMDBFQUY4NjAwM0MyNEUyMDAwNEEzODIwMDFDMkQKLToxMDA3OTAwMDk0QTIwMEU0MjRDMzAwMDRBRjgzMDAzQzM0NDIyMDAwNTAKLToxMDA3QTAwMEE0QTIwMEU0MEEwMDE5MDYwMDAwMjAyMThGODIwMDQwNjQKLToxMDA3QjAwMEFGODAwMDNDMDA0NzEwMjFBRjgyMDA0MDAwMDAyMDIxQTQKLToxMDA3QzAwMDI0MTRGRkZGMTA5NDAyMDkyNDAzRkZGRjNDMDgwODAwRDMKLToxMDA3RDAwMDhEMDg3Nzg4M0MwMjA4MDA4QzQyMzFCMDNDMDMwODAwNDkKLToxMDA3RTAwMDkwNjM3Nzc4MzEwNDNGRkYwMDgyMTAyQjEwNDAwMDFCOEMKLToxMDA3RjAwMDMwNjcwMDNGM0MwMjA4MDA4QzQyMzFBODhGODMwMDQ4REMKLToxMDA4MDAwMDAwMDQyMTgwMDA2MjE4MjEwMDY0MTgyMTMwNjIwMDdGRkEKLToxMDA4MTAwMDAzNDIyODIxM0MwMjAwMEMwMEEyMjgyMTNDMDIwMDgwNTcKLToxMDA4MjAwMDM0NDIwMDAxMzA2NjAwNzgwMEMyMzAyNTI0MDJGRjgwODcKLToxMDA4MzAwMDAwNjIxMDI0QUY0MjAwMjgzMDY0MDAwN0FGNDIwODA0NzEKLToxMDA4NDAwMDhGODIwMDE0MDM0NDIwMjEyNDg0MDk0MEFGNDYwODE0RjkKLToxMDA4NTAwMEFGODUwMDI0QUY4NDAwMzBBQzQzMDExODkzODMwMDM4ODcKLToxMDA4NjAwMDI0MDIwMDAzMTQ2MjAxQzcyNDAyMDAwMTI0MDIwMDI2QUUKLToxMDA4NzAwMDEwRTIwMUM5MjhFMjAwMjcxMDQwMDAxMzI0MDIwMDMyRDAKLToxMDA4ODAwMDI0MDIwMDIyMTBFMjAxQzQyOEUyMDAyMzEwNDAwMDA4RTQKLToxMDA4OTAwMDI0MDIwMDI0MjQwMjAwMjAxMEUyMDFCMDI0MDIwMDIxREUKLToxMDA4QTAwMDEwRTIwMTNGMDI0MDIwMjEwQTAwMUFGMzI0MDIwMDBCNEIKLToxMDA4QjAwMDEwRTIwMUI5MjQwMjAwMjUxMEUyMDAxMDAyNDAyMDIxQkMKLToxMDA4QzAwMDBBMDAxQUYzMjQwMjAwMEIxMEUyMDFBNjI4RTIwMDMzMEEKLToxMDA4RDAwMDEwNDAwMDA2MjQwMjAwM0YyNDAyMDAzMTEwRTIwMDkyODIKLToxMDA4RTAwMDAyNDAyMDIxMEEwMDFBRjMyNDAyMDAwQjEwRTIwMTlEQUQKLToxMDA4RjAwMDAyNDAyMDIxMEEwMDFBRjMyNDAyMDAwQjhGOTAwMDJDRTIKLToxMDA5MDAwMDNDMDMwODAwOEM2MzMxQjA4Rjg1MDAzMDhFMDQwMDEwRUEKLToxMDA5MTAwMDAwMDBBODIxOENCMzAwMTQzMDgyM0ZGRjAwNDMxMDJCNEQKLToxMDA5MjAwMDhDQjEwMDIwNTA0MDAxODcwMjQwMjAyMTkwQTMwMDBEOEYKLToxMDA5MzAwMDI0MDJGRjgwMDA0MzEwMjQzMDQyMDBGRjUwNDAwMTgxMTgKLToxMDA5NDAwMDAyNDAyMDIxMDAwNDEzODIzMDQyMDAwMzE0NDAwMTdENDQKLToxMDA5NTAwMDAyNDAyMDIxOTRBMzAwMUM4RjgyMDAxNDhFMDQwMDI4RTIKLToxMDA5NjAwMEE0NDMwMTE0OENBMjAwMTAwMjYyMTgyMzEwNjQwMDAzMzcKLToxMDA5NzAwMDAyNDAyMDIxMEEwMDE5N0MyNDAyMDAxRjhGODIwMDM0Q0IKLToxMDA5ODAwMDAwNjIxMDIxMDI2MjEwMkIxMDQwMDAwODhGODMwMDI0QTcKLToxMDA5OTAwMDAyNDAyMDIxMjQwMjAwMTgwRTAwMTZDNUEzODIwMDQ0NDQKLToxMDA5QTAwMDEwNTQwMTZDMjQwNEZGRkY4RjgzMDAyNDhGODQwMDM0RDMKLToxMDA5QjAwMDhDNjIwMDEwMDIyNDg4MjEwMDQ0MTAyM0FDNjIwMDEwRDUKLToxMDA5QzAwMDhGODIwMDE0QUM3MTAwMjA4QzQyMDA2ODAwNTExMDJCMDMKLToxMDA5RDAwMDEwNDAwMDA5OEY4MzAwMzAwMjQwMjAyMTI0MDIwMDFEQjYKLToxMDA5RTAwMDBFMDAxNkM1QTM4MjAwNDQyNDAzRkZGRjEwNDMwMTU5RTMKLToxMDA5RjAwMDI0MDRGRkZGOEY4MzAwMzA4RTAyMDAyNDhDNjMwMDI0QzgKLToxMDBBMDAwMDEwNDMwMDA3MDI0MDIwMjEyNDAyMDAxQzBFMDAxNkM1REUKLToxMDBBMTAwMEEzODIwMDQ0MjQwM0ZGRkYxMDQzMDE0RTI0MDRGRkZGODAKLToxMDBBMjAwMDhGODQwMDI0OEM4MjAwMjQyNDQyMDAwMUFDODIwMDI0QTQKLToxMDBBMzAwMDEyMzMwMDA0OEY4MjAwMTQ4QzQyMDA2ODU2MjIwMDBFOEMKLToxMDBBNDAwMDhFMDIwMDAwOEUwMjAwMDAzQzAzMDA4MDAwNDMxMDI0NTAKLToxMDBBNTAwMDE0NDAwMDBEMjQwMjAwMUEwMjQwMjAyMTBFMDAxNkM1ODkKLToxMDBBNjAwMEEzODIwMDQ0MjQwM0ZGRkYxMDQzMDEzQTI0MDRGRkZGNDQKLToxMDBBNzAwMDBBMDAxOUJBOEUwMjAwMTQzQzAzMDA4MDAwNDMxMDI0QkYKLToxMDBBODAwMDUwNDAwMDAzOEUwMjAwMTRBQzgwMDAyMDhFMDIwMDE0M0YKLToxMDBBOTAwMDI0MTFGRkZGMTA1MTAwMDYyNDAyMDAxQjAyNDAyMDIxRjgKLToxMDBBQTAwMDBFMDAxNkM1QTM4MjAwNDQxMDUxMDEyQTI0MDRGRkZGNDIKLToxMDBBQjAwMDhFMDMwMDAwM0MwMjAwMDEwMDYyMTAyNDEwNDAwMDEyNkUKLToxMDBBQzAwMDNDMDIwMDgwMDA2MjEwMjQxNDQwMDAwODAyNDAyMDIxRjMKLToxMDBBRDAwMDI0MDIwMDFBMEUwMDE2QzVBMzgyMDA0NDI0MDNGRkZGNUYKLToxMDBBRTAwMDEwNDMwMTFDMjQwNEZGRkYwMjQwMjAyMTAyMDAyODIxQTIKLToxMDBBRjAwMDBFMDAxNkU1MjQwNjAwMDEyNDAzRkZGRjEwNDMwMTE1MzQKLToxMDBCMDAwMDI0MDRGRkZGMjQxNTAwMDE4RjgzMDAyNDAyQTAzMDIxNUMKLToxMDBCMTAwMDAyNDAyMDIxOTQ2MjAwMzYyNDA1MDAwMTI0NDIwMDAxOTUKLToxMDBCMjAwMDBBMDAxQUQ3QTQ2MjAwMzY4RjkwMDAyQzNDMDMwODAwRkMKLToxMDBCMzAwMDhDNjMzMUIwOEUxMzAwMTAzMjYyM0ZGRjAwNDMxMDJCRTQKLToxMDBCNDAwMDEwNDAwMDg5OEY4NDAwMzAyNDAyRkY4MDkwODMwMDBEQzQKLToxMDBCNTAwMDAwNDMxMDI0MzA0MjAwRkYxMDQwMDA4NDI0MDIwMDBEQTYKLToxMDBCNjAwMDAwMTMxMzgyMzA0MjAwMDMyNDAzMDAwMTE0NDMwMDdGNkEKLToxMDBCNzAwMDI0MDIwMDBEOTA4MjAwMEQzMDQyMDAwODU0NDAwMDA0MTEKLToxMDBCODAwMDhGODIwMDM0MDI0MDIwMjEwQTAwMUEwODI0MDIwMDI0MjcKLToxMDBCOTAwMDUwNDAwMDA0OEUwMzAwMEMwMjQwMjAyMTBBMDAxQTA4NzUKLToxMDBCQTAwMDI0MDIwMDI3OEM4MjAwMjA1NDYyMDAwNjAyNDAyMDIxOEIKLToxMDBCQjAwMDhFMDMwMDA4OEM4MjAwMjQ1MDYyMDAwOThFMDIwMDE0MEIKLToxMDBCQzAwMDAyNDAyMDIxMjQwMjAwMjAwRTAwMTZDNUEzODIwMDQ0MEEKLToxMDBCRDAwMDEwNTQwMDcxMjQwM0ZGRkYwQTAwMUEzRDhGODQwMDI0ODMKLToxMDBCRTAwMDI0MTFGRkZGMTQ1MTAwMDQ4Rjg2MDAxNDAyNDAyMDIxQkQKLToxMDBCRjAwMDBBMDAxQTM4MjQwMjAwMjU4RTAzMDAxODhDQzIwMDdDREIKLToxMDBDMDAwMDEwNjIwMDAzMjQwMjAwMEUwQTAwMUEzODAyNDAyMDIxNUMKLToxMDBDMTAwMDhFMDMwMDI0OEM4MjAwMjgxMDYyMDAwMzI0MDIwMDIxMkQKLToxMDBDMjAwMDBBMDAxQTM4MDI0MDIwMjE4RTA1MDAyODhDODIwMDJDRjAKLToxMDBDMzAwMDEwQTIwMDAzMjQwMjAwMUYwQTAwMUEzODAyNDAyMDIxREIKLToxMDBDNDAwMDhFMDMwMDJDMTQ2MDAwMDMyNDAyMDAyMzBBMDAxQTM4Q0IKLToxMDBDNTAwMDAyNDAyMDIxOENDMjAwNjgwMDQzMTAyQjEwNDAwMDAzOEEKLToxMDBDNjAwMDI0MDIwMDI2MEEwMDFBMzgwMjQwMjAyMThDODIwMDE0MzcKLToxMDBDNzAwMDAwNjUxODIxMDA0MzEwMkIxMDQwMDAwODhGODQwMDI0QzkKLToxMDBDODAwMDAyNDAyMDIxMjQwMjAwMjIwRTAwMTZDNUEzODIwMDQ0NDcKLToxMDBDOTAwMDEwNTEwMDQxMjQwM0ZGRkY4Rjg0MDAyNDI0MDNGRkY3MzkKLToxMDBDQTAwMDkwODIwMDBEMDA0MzEwMjRBMDgyMDAwRDhGODYwMDE0NTYKLToxMDBDQjAwMDNDMDMwODAwOEM2MzMxQUM4RjgyMDA0ODk0QzQwMEUwOTAKLToxMDBDQzAwMDhGODUwMDI0MDA0MzEwMjEzMDg0N0ZGRjAwMDQyMDQwRTIKLToxMDBDRDAwMDAwNDQxMDIxMzA0MzAwN0YwMzQzMjAyMTNDMDMwMDBFRDkKLToxMDBDRTAwMDAwODMyMDIxMjQwM0ZGODAwMDQzMTAyNEFGNDIwMDJDMDYKLToxMDBDRjAwMEE0OTMwMDAwOENBMjAwMjgyNDQyMDAwMUFDQTIwMDI4OEEKLToxMDBEMDAwMDhDQTIwMDJDOEUwMzAwMkMwMDQzMTAyMUFDQTIwMDJDREUKLToxMDBEMTAwMDhFMDIwMDJDQUNBMjAwMzA4RTAyMDAxNEFDQTIwMDM0NzMKLToxMDBEMjAwMDk0QTIwMDNBMjQ0MjAwMDFBNEEyMDAzQTk0QzYwMEUwMzIKLToxMDBEMzAwMDNDMDIwODAwOEM0MjMxQjAyNEM0MDAwMTMwODM3RkZGQTQKLToxMDBENDAwMDE0NjIwMDBGMDA4MDMwMjEyNDAyODAwMDAwODIzMDI0RDEKLToxMDBENTAwMDMwQzJGRkZGMDAwMjEzQzIzMDQyMDBGRjAwMDIxMDI3MjIKLToxMDBENjAwMDBBMDAxQTc2MDAwMjMzQzAyNDAyMDAwRDAyNDAyMDIxM0UKLToxMDBENzAwMDBFMDAxNkM1QTM4MjAwNDQwQTAwMUE3QzAwNDAxODIxMDgKLToxMDBEODAwMDhGODIwMDE0MDI0MDIwMjEyNDA1MDAwMTBFMDAxNUY5NzUKLToxMDBEOTAwMEE0NDYwMEUwMDAwMDE4MjEwQTAwMUIwRTAwNjA4ODIxMTQKLToxMDBEQTAwMDhGOTAwMDJDM0MwMzA4MDA4QzYzMzFCMDhFMDUwMDEwM0UKLToxMDBEQjAwMDMwQTIzRkZGMDA0MzEwMkIxMDQwMDA2MTI0MDJGRjgwNEYKLToxMDBEQzAwMDhGODQwMDMwOTA4MzAwMEQwMDQzMTAyNDMwNDIwMEZGRDgKLToxMDBERDAwMDUwNDAwMDVDMDI0MDIwMjE4RjgyMDAzNDEwNDAwMDBCMDQKLToxMDBERTAwMDAwMDUxMzgyOEY4MjAwMTQ5NzYzMDAwQTk0NDIwMDYwMEEKLToxMDBERjAwMDMwNDJGRkZGMTQ0MzAwMDUwMDA1MTM4MjhGODIwMDIwNUMKLToxMDBFMDAwMDI0MDRGRkZEMEEwMDFBRUJBRjgyMDAzQzMwNDIwMDAzQ0QKLToxMDBFMTAwMDE0NDAwMDBFMDAwMDAwMDA5MjAyMDAwMjEwNDAwMDA1ODUKLToxMDBFMjAwMDhFMDMwMDI0NTA2MDAwMTU5MjAzMDAwMzBBMDAxQUE3RTUKLToxMDBFMzAwMDAyNDAyMDIxOEM4MjAwMjQ1MDYyMDAxMDkyMDMwMDAzQTMKLToxMDBFNDAwMDAyNDAyMDIxMEEwMDFBQUYyNDAyMDAwRjkwODIwMDBERjgKLToxMDBFNTAwMDMwNDIwMDA4NTQ0MDAwMDk5MjAzMDAwMzAyNDAyMDIxNjAKLToxMDBFNjAwMDI0MDIwMDEwMEUwMDE2QzVBMzgyMDA0NDI0MDNGRkZGRDUKLToxMDBFNzAwMDEwNDMwMDM4MjQwNEZGRkY5MjAzMDAwMzI0MDIwMDAyMDEKLToxMDBFODAwMDU0NjIwMDBDOTIwMjAwMDM4RjgyMDAzNDU0NDAwMDA5MjcKLToxMDBFOTAwMDkyMDIwMDAzMDI0MDIwMjEyNDAyMDAyQzBFMDAxNkM1RkQKLToxMDBFQTAwMEEzODIwMDQ0MjQwM0ZGRkYxMDQzMDAyQTI0MDRGRkZGMTEKLToxMDBFQjAwMDkyMDIwMDAzMDIwMDI4MjEwMjQwMjAyMTM4NDYwMDEwM0YKLToxMDBFQzAwMDJDQzYwMDAxMkM0MjAwMDEwRTAwMTZFNTAwNDYzMDI1MUMKLToxMDBFRDAwMDI0MTBGRkZGMTA1MDAwMUYyNDA0RkZGRjhGODMwMDM0RjUKLToxMDBFRTAwMDEwNjAwMDEzMDI0MDIwMjEzQzAyMDgwMDhDNDIzMThDMkIKLToxMDBFRjAwMDAwNDMxMDJCMTQ0MDAwMDcwMDAwMDAwMDAwMDAyODIxRDAKLToxMDBGMDAwMDI0MDYwMDAxMEUwMDE2NDYwMDAwMDAwMDBBMDAxQUVCM0QKLToxMDBGMTAwMDAwMDAyMDIxMjQwMjAwMkQwRTAwMTZDNUEzODIwMDQ0RUIKLToxMDBGMjAwMDEwNTAwMDBDMjQwNEZGRkYwQTAwMUFFQjAwMDAyMDIxREYKLToxMDBGMzAwMDBFMDAxNUY5MjQwNTAwMDEwQTAwMUFFQjAwMDAyMDIxMUIKLToxMDBGNDAwMDAyNDAyMDIxMjQwMjAwMEQwRTAwMTZDNUEzODIwMDQ0OTkKLToxMDBGNTAwMDAwNDAyMDIxMEEwMDFCMEUwMDgwODgyMTE1MTQwMDBFN0QKLToxMDBGNjAwMDAwMDAwMDAwMEUwMDE3NEMwMjQwMjAyMTBBMDAxQjBFNUEKLToxMDBGNzAwMDAwNDA4ODIxMEUwMDE2QzVBMzgyMDA0NDBBMDAxQjBFMDMKLToxMDBGODAwMDAwNDA4ODIxMTQ2MjAwMTcwMjIwMTgyMTI0MDIwMDIzNDcKLToxMDBGOTAwMDE0RTIwMDA1MjQwMjAwMEIwRTAwMTdDMDAyNDAyMDIxQkQKLToxMDBGQTAwMDBBMDAxQjBFMDA0MDg4MjEwMjQwMjAyMUEzODIwMDQ0MzkKLToxMDBGQjAwMDBFMDAxNkM1MjQxMUZGRkYwQTAwMUIwRjAyMjAxODIxODYKLToxMDBGQzAwMDMwQTUwMEZGMEUwMDE1MjkyNDA2MDAwMTk3ODMwMDNBODIKLToxMDBGRDAwMDhGODIwMDNDQTc4MDAwM0EwMDQzMTAyM0FGODIwMDNDODAKLToxMDBGRTAwMDAyMjAxODIxMTIyMDAwM0U5NzgyMDAzQTI0MDJGRkZEQzEKLToxMDBGRjAwMDU0NjIwMDNFOEU0MzAwMjA4RTQyMDAwNDhGODMwMDE0MTIKLToxMDEwMDAwMDAwNTYxMDIzQUU0MjAwMDQ5MDYyMDA2MzMwNDIwMDdGMUQKLToxMDEwMTAwMEEwNjIwMDYzOEU0MjAwMjA4Rjg0MDAxNEE3ODAwMDNBRjMKLToxMDEwMjAwMDM0NDIwMDAyQUU0MjAwMjBBNDgwMDBFNDkwODIwMDYzQkIKLToxMDEwMzAwMDI0MDNGRkJGMDA0MzEwMjRBMDgyMDA2MzBBMDAxQjUxNTkKLToxMDEwNDAwMDhFNDMwMDIwOTA4MjAwNjMwMDYyMTAyNDMwNDIwMEZGMzMKLToxMDEwNTAwMDEwNDAwMDIzOTc4MjAwM0E5MDgyMDA4ODkwODMwMEJENjAKLToxMDEwNjAwMDI0ODUwMDg4MzA0MjAwM0YyNDQ0RkZFMDJDODIwMDIwODkKLToxMDEwNzAwMEEzODMwMDFDMTA0MDAwMTlBRjg1MDAyQzI0MDIwMDAxM0UKLToxMDEwODAwMDAwODIxODA0MzA2MjAwMTkxNDQwMDAwQzNDMDI4MDAwRjkKLToxMDEwOTAwMDM0NDIwMDAyMDA2MjEwMjQxNDQwMDAwQjMwNjIwMDIwMzEKLToxMDEwQTAwMDEwNDAwMDBGOTc4MjAwM0E5MEE2MDAwMTAyNDAyMDIxRDQKLToxMDEwQjAwMDI0MDUwMDAxMEEwMDFCNEIzMEM2MDAwMTAyNDAyMDIxMUMKLToxMDEwQzAwMDBBMDAxQjRBMjQwNTAwMDEwMjQwMjAyMTAwMDAyODIxQkIKLToxMDEwRDAwMDI0MDYwMDAxMEUwMDE2NDYwMDAwMDAwMDk3ODIwMDNBMjgKLToxMDEwRTAwMDE0NDBGRDBDOEY4NDAwMTQ4RTQzMDAyMDMwNjIwMDA0RjUKLToxMDEwRjAwMDEwNDAwMDEyOEY4NDAwM0MyNDAyRkZGQjAwNjIxMDI0ODkKLToxMDExMDAwMEFFNDIwMDIwMjc0MzAxODA4RjQyMDFCODA0NDBGRkZFMTkKLToxMDExMTAwMDhGODIwMDQ4QUM2MjAwMDA4RjQyMDEyNEFDNjIwMDA0NjAKLToxMDExMjAwMDI0MDI2MDgzQTQ2MjAwMDgyNDAyMDAwMkEwNjIwMDBCNzMKLToxMDExMzAwMDNDMDIxMDAwQUY0MjAxQjg4Rjg0MDAzQzhGODMwMDE0NDIKLToxMDExNDAwMDhGQkYwMDM0OEZCNjAwMzA4RkI1MDAyQzhGQjQwMDI4Q0QKLToxMDExNTAwMDhGQjMwMDI0OEZCMjAwMjA4RkIxMDAxQzhGQjAwMDE4MTUKLToxMDExNjAwMDI0MDIwMDAxMjdCRDAwMzgwM0UwMDAwOEFDNjQwMEMwODEKLToxMDExNzAwMDMwQTUwMEZGMjQwMzAwMDEyNEE5MDAwMTAwNjkxMDJCMDEKLToxMDExODAwMDEwNDAwMDBDMDAwMDQwMjEyNDBBMDAwMTAwQTMxMDIzOUQKLToxMDExOTAwMDAwNEEzODA0MjQ2MzAwMDEzMDgyMDAwMTAwNjkzMDJCQ0EKLToxMDExQTAwMDEwNDAwMDAyMDAwNDIwNDIwMTA3NDAyNTU0QzBGRkY4MEYKLToxMDExQjAwMDAwQTMxMDIzMDNFMDAwMDgwMTAwMTAyMTNDMDIwODAwRjYKLToxMDExQzAwMDI0NDI2MEE0M0MwMTA4MDBBQzIyNzM2QzNDMDIwODAwN0QKLToxMDExRDAwMDI0NDI1MzA4M0MwMTA4MDBBQzIyNzM3MDI0MDIwMDA2MkMKLToxMDExRTAwMDI3QkRGRkUwM0MwMTA4MDBBMDIyNzM3NDNDMDIxRURDMTYKLToxMDExRjAwMEFGQjIwMDE4QUZCMTAwMTRBRkJGMDAxQ0FGQjAwMDEwMDkKLToxMDEyMDAwMDM0NTI2RjQxMDAwMDg4MjEyNDA1MDAwODBFMDAxQjcyMzMKLToxMDEyMTAwMDAyMjAyMDIxMDAxMTgwODAzQzA3MDgwMDI0RTc3Mzc4MTkKLToxMDEyMjAwMDAwMDIxNjAwMDIwNzE4MjFBQzYyMDAwMDAwMDAyODIxMEQKLToxMDEyMzAwMDI0QTIwMDAxMzA0NUZGRkY4QzYyMDAwMDJDQTYwMDA4QUMKLToxMDEyNDAwMDA0NDEwMDAyMDAwMjIwNDAwMDkyMjAyNjE0QzBGRkY4NTIKLToxMDEyNTAwMEFDNjQwMDAwMDIwNzgwMjE4RTA0MDAwMDBFMDAxQjcyQTcKLToxMDEyNjAwMDI0MDUwMDIwMjYyMzAwMDEzMDcxRkZGRjJFMjMwMTAwRkEKLToxMDEyNzAwMDE0NjBGRkU1QUUwMjAwMDA4RkJGMDAxQzhGQjIwMDE4QTMKLToxMDEyODAwMDhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwODI3QkQwMDIwQ0MKLToxMDEyOTAwMDI3QkRGRkQ4QUZCMzAwMUNBRkIyMDAxOEFGQkYwMDIwMEUKLToxMDEyQTAwMEFGQjEwMDE0QUZCMDAwMTA4RjUxMDE0MDhGNDgwMTQ4MUEKLToxMDEyQjAwMDAwMDg5NDAyMzI0MzAwRkYzMTEzMDBGRjhGNDIwMUI4NEYKLToxMDEyQzAwMDA0NDBGRkZFMjc1MDAxODBBRTExMDAwMDhGNDIwMTQ0MTAKLToxMDEyRDAwMEFFMDIwMDA0MjQwMjAwMDJBNjEyMDAwOEEyMDIwMDBCQzMKLToxMDEyRTAwMDI0MDIwMDE0QUUxMzAwMjQxMDYyMDAyNTI4NjIwMDE1QTkKLToxMDEyRjAwMDEwNDAwMDA4MjQwMjAwMTUyNDAyMDAxMDEwNjIwMDMwODMKLToxMDEzMDAwMDI0MDIwMDEyMTA2MjAwMDk4RkJGMDAyMDBBMDAxQ0FERTkKLToxMDEzMTAwMDhGQjMwMDFDMTA2MjAwNzAyNDAyMDAyMjEwNjIwMDM3OUMKLToxMDEzMjAwMDhGQkYwMDIwMEEwMDFDQUQ4RkIzMDAxQzNDMDIwODAwRDgKLToxMDEzMzAwMDhDNDIzMUEwMjQwM0ZGODAwMjIyMTAyMTAwNDMxMDI0OUMKLToxMDEzNDAwMEFGNDIwMDI0M0MwMjA4MDA4QzQyMzFBMDAyMjIxMDIxNEUKLToxMDEzNTAwMDMwNDIwMDdGMDM0MjE4MjEzQzAyMDAwQTAwNjIxODIxM0IKLToxMDEzNjAwMDE2NjAwMEJDQUY4MzAwMTQ5MDYyMDA2MjMwNDIwMDBGMzAKLToxMDEzNzAwMDM0NDIwMDMwQTA2MjAwNjIwQTAwMUNBQzhGQkYwMDIwMjMKLToxMDEzODAwMDNDMDQ2MDAwOEM4MzJDMDgzQzAyRjAwMzM0NDJGRkZGRDUKLToxMDEzOTAwMDAwNjIxODI0QUM4MzJDMDgzQzAyMDgwMDhDNDIzMUEwNjcKLToxMDEzQTAwMDhDODMyQzA4MjQ0MjAwNzQwMDAyMTA4MjAwMDIxNDgwRjYKLToxMDEzQjAwMDAwNjIxODI1QUM4MzJDMDgwQTAwMUNBQzhGQkYwMDIwRUIKLToxMDEzQzAwMDNDMDIwODAwOEM0MjMxQTAyNDAzRkY4MDAyMjIxMDIxM0QKLToxMDEzRDAwMDAwNDMxMDI0QUY0MjAwMjQzQzAyMDgwMDhDNDIzMUEwOUMKLToxMDEzRTAwMDNDMDMwMDBBMDIyMjEwMjEzMDQyMDA3RjAzNDIxMDIxRjgKLToxMDEzRjAwMDAwNDMxMDIxMEEwMDFDQUJBRjgyMDAxNDNDMDIwODAwMUQKLToxMDE0MDAwMDhDNDIzMUEwMjQwNUZGODAwMjIyMTAyMTAwNDUxMDI0QzcKLToxMDE0MTAwMEFGNDIwMDI0M0MwMjA4MDA4QzQyMzFBMDAyMjIxMDIxN0QKLToxMDE0MjAwMDMwNDIwMDdGMDM0MjE4MjEzQzAyMDAwQTAwNjIxODIxNkEKLToxMDE0MzAwMDkwNjIwMDYzMDBBMjEwMjQzMDQyMDBGRjEwNDAwMDg1M0IKLToxMDE0NDAwMEFGODMwMDE0MjQ2MjAwODg5NDQzMDAxMjNDMDIwODAwMTkKLToxMDE0NTAwMDhDNDIzMUE4MzA2MzNGRkYwMDAzMTk4MDAyMjIxMDIxMjMKLToxMDE0NjAwMDAwNDMxMDIxMzA0MzAwN0YwMzQzMjAyMTAwNDUxMDI0MTYKLToxMDE0NzAwMDNDMDMwMDBDMDA4MzIwMjFBRjQyMDAyODkwODIwMDBEMjUKLToxMDE0ODAwMDAwQTIxMDI0MzA0MjAwRkYxMDQwMDA3MkFGODQwMDI0RkMKLToxMDE0OTAwMDkwODIwMDBEMzA0MjAwMTAxNDQwMDA2RjhGQkYwMDIwN0EKLToxMDE0QTAwMDBFMDAxNUM4MDAwMDAwMDA4RjQyMDFCODA0NDBGRkZFODYKLToxMDE0QjAwMDAwMDAwMDAwQUUxMTAwMDA4RjQyMDE0NEFFMDIwMDA0QTMKLToxMDE0QzAwMDI0MDIwMDAyQTYxMjAwMDhBMjAyMDAwQkFFMTMwMDI0QTAKLToxMDE0RDAwMDBBMDAxQ0FDOEZCRjAwMjAyNDA2RkY4MDAyMjYxMDI0QzcKLToxMDE0RTAwMEFGNDIwMDIwM0MwMjA4MDA4QzQyMzFBMDMxMDQzRkZGOTMKLToxMDE0RjAwMDAwMDQyMTgwMDIyMjEwMjEwMDQ2MTAyNEFGNDIwMDI0NjMKLToxMDE1MDAwMDNDMDMwODAwOEM2MzMxQTgzQzAyMDgwMDhDNDIzMUEwRTcKLToxMDE1MTAwMDMyMjcwMDdGMDIyMzE4MjEwMjIyMTAyMTAwNjQxODIxQTMKLToxMDE1MjAwMDMwNDIwMDdGMzA2NDAwN0YwMzQyMjgyMTNDMDIwMDBBRTEKLToxMDE1MzAwMDAwNjYxODI0MDBBMjI4MjEwMzQ0MjAyMTNDMDIwMDBDNEMKLToxMDE1NDAwMDAwODIyMDIxQUY0MzAwMjgzQzAyMDAwODAzNDcxODIxRjUKLToxMDE1NTAwMDAwNjI5MDIxQUY4NTAwMTRBRjg0MDAyNDBFMDAxNUM4RUUKLToxMDE1NjAwMDAxMDA4MDIxOEY0MjAxQjgwNDQwRkZGRThGODIwMDI0RDkKLToxMDE1NzAwMDhGODQwMDE0Mjc0NTAxODA5MDQyMDAwREFDQjEwMDAwMUIKLToxMDE1ODAwMEE0QjAwMDA2MDAwMjE2MDAwMDAyMTYwMzAwMDIxMDI3OTUKLToxMDE1OTAwMDAwMDIzN0MyMTRDMDAwMTYyNDgyMDA4ODk0NDIwMDEyNTAKLToxMDE1QTAwMDMyMDMzRkZGMzA0MjNGRkYxNDQzMDAxMjI0MDI2MDgyQTcKLToxMDE1QjAwMDkwODMwMDYzMjQwMkZGODAwMDQzMTAyNDMwNDIwMEZGMjgKLToxMDE1QzAwMDUwNDAwMDBDMjQwMjYwODI5MDgyMDA2MjMwNDIwMDBGODIKLToxMDE1RDAwMDM0NDIwMDQwQTA4MjAwNjIyNDAyNjA4NEE0QTIwMDA4NzkKLToxMDE1RTAwMDI0MDIwMDBEQTBBMjAwMDUwQTAwMUM5NjNDMDIyNzAwNjAKLToxMDE1RjAwMDI0MDI2MDgyQTRBMjAwMDhBMEEwMDAwNTNDMDIyNzAwRUIKLToxMDE2MDAwMDAwMDYxQzAwMDA2MjE4MjUyNDAyMDAwMkEwQTIwMDBCQTQKLToxMDE2MTAwMEFDQTMwMDEwQUNBMDAwMTRBQ0EwMDAyNEFDQTAwMDI4MjcKLToxMDE2MjAwMEFDQTAwMDJDOEU0MjAwNEM4Rjg0MDAyNEFDQTIwMDE4ODkKLToxMDE2MzAwMDkwODMwMDBEMjQwMkZGODAwMDQzMTAyNDMwNDIwMEZGRkQKLToxMDE2NDAwMDEwNDAwMDA1OEZCRjAwMjA5MDgyMDAwRDMwNDIwMDdGQzcKLToxMDE2NTAwMEEwODIwMDBEOEZCRjAwMjA4RkIzMDAxQzhGQjIwMDE4MzYKLToxMDE2NjAwMDhGQjEwMDE0OEZCMDAwMTAzQzAyMTAwMDI3QkQwMDI4N0QKLTowODE2NzAwMDAzRTAwMDA4QUY0MjAxQjhERAotOjA4MTY3ODAwMDgwMDM0MzAwODAwMzQzMDkyCi06MTAxNjgwMDAwODAwMzNBODA4MDAzM0UwMDgwMDM0MTQwODAwMzQzODk4Ci06MEMxNjkwMDAwODAwMzQzODA4MDAzNDM4MDgwMDMzMTgxMwotOjA0MTY5QzAwMEEwMDAxMjQxQgotOjEwMTZBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENzQ3MDYxMzZCMgotOjEwMTZCMDAwMkUzMDJFMzEzNTAwMDAwMDA2MDAwRjAxMDAwMDAwMDAyMgotOjEwMTZDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQQotOjEwMTZEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQQotOjEwMTZFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQQotOjEwMTZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQQotOjEwMTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEOQotOjEwMTcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDOQotOjEwMTcyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCOQotOjEwMTczMDAwMTAwMDAwMDMwMDAwMDAwMDAwMDAwMDBEMDAwMDAwMEQ3QwotOjEwMTc0MDAwM0MwMjA4MDAyNDQyMUMwMDNDMDMwODAwMjQ2MzIwOTQ0RgotOjEwMTc1MDAwQUM0MDAwMDAwMDQzMjAyQjE0ODBGRkZEMjQ0MjAwMDQxNQotOjEwMTc2MDAwM0MxRDA4MDAzN0JEMkZGQzAzQTBGMDIxM0MxMDA4MDBGMQotOjEwMTc3MDAwMjYxMDA0OTAzQzFDMDgwMDI3OUMxQzAwMEUwMDAxNUNGNQotOjEwMTc4MDAwMDAwMDAwMDAwMDAwMDAwRDMwODRGRkZGMzA4MjAwMDdFMQotOjEwMTc5MDAwOEY4NTAwMTgxMDQwMDAwMjI0ODMwMDA3MzA2NEZGRjg5MgotOjEwMTdBMDAwMDA4NTMwMjEzMEM0MUZGRjAzNDQxODIxMjQ3QjQwMDBGMgotOjEwMTdCMDAwQUY4NTAwMUNBRjg0MDAxODAzRTAwMDA4QUY0NDAwODQyQwotOjEwMTdDMDAwMzA4NEZGRkYzMDgyMDAwNzhGODUwMDIwOEY4NjAwMjgzRAotOjEwMTdEMDAwMTA0MDAwMDIyNDgzMDAwNzMwNjRGRkY4MDA4NTIwMjFCOAotOjEwMTdFMDAwMDA4NjE4MkIxNDYwMDAwMkFGODUwMDI0MDA4NjIwMjM5OQotOjEwMTdGMDAwMDM0NDI4MjEzNDA2ODAwMEFGODQwMDIwQUY0NDAwODBEOQotOjEwMTgwMDAwMDBBNjIwMjEwM0UwMDAwOEFGODQwMDM4MjdCREZGRDhFMAotOjEwMTgxMDAwQUZCMzAwMUNBRkIyMDAxOEFGQjAwMDEwQUZCRjAwMjREMAotOjEwMTgyMDAwQUZCNDAwMjBBRkIxMDAxNDNDMDg2MDA4OEQxNDUwMDAyNAotOjEwMTgzMDAwMjQxOEZGN0YzQzFBODAwMDAyOTg5ODI0MzY3MjM4MENENgotOjEwMTg0MDAwQUQxMjUwMDA4RjUxMDAwODNDMDc2MDFDM0MwODYwMDAzRQotOjEwMTg1MDAwMzYzMDAwMDFBRjUwMDAwOEFGODAwMDE4QUY0MDAwODA2NAotOjEwMTg2MDAwQUY0MDAwODQ4Q0U2MDAwODhEMEYwODA4M0MwNzYwMTYyNgotOjEwMTg3MDAwOENFQzAwMDAzMUVFRkZGMDM5Q0EwMDEwM0MwREZGRkY4OAotOjEwMTg4MDAwMzQwQjgwMDAzQzAzMDA4MDAzNEI0ODIxMkQ0NDAwMDFCMQotOjEwMTg5MDAwMDE4RDI4MjQzQzAyNTM1MzNDMDEwODAwQUMyMzA0MjA1MgotOjEwMThBMDAwQUY4OTAwMzhBRjg2MDAyOEFGODQwMDEwMjc1QjQwMDA2NgotOjEwMThCMDAwMTRBMjAwMDMzNEUzN0MwMDhDRjkwMDA0MDMyODE4MjFFRgotOjEwMThDMDAwOEM3RjAwN0M4QzY1MDA3ODNDMDI4MDAwM0MwQjA4MDAxQgotOjEwMThEMDAwOEQ2QjA0OEMzQzBBMDgwMDhENEEwNDg4MzQ1MjAwNzBEOQotOjEwMThFMDAwQUY4NTAwM0NBRjlGMDA0MDNDMTMwODAwMjY3MzFDNDRBQQotOjEwMThGMDAwMDI0MEEwMjE4RTQ4MDAwMDhGNDYwMDAwMzhDMzAwMDEzRQotOjEwMTkwMDAwMzA2NDAwMDExMDgwMDAxN0FGODgwMDM0MDI4MDQ4MjE0NQotOjEwMTkxMDAwOEQyRjAwMDAzQzA1MDgwMDhDQTUwNDVDM0MxODA4MDBENQotOjEwMTkyMDAwOEYxODA0NTgwMUU4MTAyMzAwQTI4MDIxMDAwMEM4MjE2QwotOjEwMTkzMDAwMDIwMjQwMkIwMzE5ODgyMTAyMjgzODIxM0MwMTA4MDBBQgotOjEwMTk0MDAwQUMzMDA0NUMzQzAxMDgwMEFDMjcwNDU4OEY0RTAwMDAwQQotOjEwMTk1MDAwMzlDRDAwMDEzMUFDMDAwMTE1ODBGRkVEMDFFMDQwMjFERgotOjEwMTk2MDAwQUY4RjAwMzQ4RTUxMDAwMDNDMDcwODAwOENFNzA0NUMwOAotOjEwMTk3MDAwM0MwRDA4MDA4REFEMDQ1ODAyMjg4MDIzMDBGMDYwMjE0MgotOjEwMTk4MDAwMDAwMDcwMjEwMTkwMzAyQjAxQUUxODIxMDA2NjIwMjE0QgotOjEwMTk5MDAwM0MwMTA4MDBBQzJDMDQ1QzNDMDEwODAwQUMyNDA0NTg1OQotOjEwMTlBMDAwOEY0NjAxMDg4RjQ3MDEwMDMwQzkyMDAwQUY4NjAwMDAzNAotOjEwMTlCMDAwQUY4NzAwMEMxMTIwMDAwQTAwQzA0MDIxM0MxODA4MDAyRAotOjEwMTlDMDAwOEYxODA0MkMyNzA4MDAwMTNDMDEwODAwQUMyODA0MkNDNwotOjEwMTlEMDAwM0MxODQwMDBBRjU4MDEzODBBMDAwMTk2MDAwMDAwMDA5MgotOjEwMTlFMDAwOTc0OTAxMDQwMDAwMjgyMTAxNDU1MDIxMzEyMkZGRkZDMQotOjEwMTlGMDAwMDE2MjU4MjEwMTYyRjgyQjAxNUY1MDIxMzBEOTAyMDBBOQotOjEwMUEwMDAwM0MwMTA4MDBBQzJCMDQ4QzNDMDEwODAwQUMyQTA0ODg4MwotOjEwMUExMDAwMTcyMDAwMTUyNDA0MEYwMDEwRTQwMDEzMDAwMDAwMDAzQwotOjEwMUEyMDAwMjQwODBEMDAxMEU4MDIzQjMwQ0QwMDA2MTFBMEZGRTlBQwotOjEwMUEzMDAwM0MxODQwMDA5MzZFMDAwMDI0MDkwMDEwMzFDNDAwRjBFRgotOjEwMUE0MDAwMTA4OTAyNzEyNDAyMDA3MDEwODIwMkU1OEY4ODAwMTQ1MAotOjEwMUE1MDAwMjUwRjAwMDFBRjhGMDAxNDNDMTg0MDAwQUY1ODAxMzgyQgotOjEwMUE2MDAwMEEwMDAxOTYwMDAwMDAwMDk3NEMwMTA0MTE4MEZGRDk4NAotOjEwMUE3MDAwM0MxODQwMDAzMEMzNDAwMDE0NjAwMEExMDAwMDAwMDA4QQotOjEwMUE4MDAwOEY0NjAxNzgwNEMwRkZGRThGODcwMDM4MjQxMDA4MDBCRAotOjEwMUE5MDAwMjQwRjAwMDg4Q0UzMDAwOEFGNTAwMTc4QTc0RjAxNDBFNQotOjEwMUFBMDAwQTc0MDAxNDI5NzRFMDEwNDhGODYwMDAwMzFDOUZGRkYxNQotOjEwMUFCMDAwMzBDRDAwMDExMUEwMDJFMTAxMjA0MDIxMjUzMUZGRkVCRgotOjEwMUFDMDAwMjQxODAwMDJBNzU4MDE0NjMyMjhGRkZGQTc1MTAxNDhGOQotOjEwMUFEMDAwM0MxOTA4MDA4RjM5MDQzQzE3MjAwMkQwOEY4QzAwMEM3MQotOjEwMUFFMDAwMzBERjAwMjAxN0UwMDAwMjI0MDQwMDA5MjQwNDAwMDE3NAotOjEwMUFGMDAwMzBDMjBDMDAyNDA1MDQwMDUwNDUwMDAxMzQ4NDAwMDQ2OQotOjEwMUIwMDAwQTc0NDAxNEEzQzExMDgwMDhFMzEwNDIwM0MxODAwNDhDQgotOjEwMUIxMDAwM0MxMDAwMDEwMjM4MTgyNTMwQ0YwMDAyMDA3MDI4MjU0MwotOjEwMUIyMDAwMTFFMDAwMDQwMDAwMTgyMTNDMTkwMTAwMDBCOTI4MjUyQgotOjEwMUIzMDAwMjQwMzAwMDEzMERGMDAwNDUzRTAwMDA1QUY4MzAwMDhGOAotOjEwMUI0MDAwM0MwNjAwMTAwMEE2MjgyNTI0MDMwMDAxQUY4MzAwMDhFRQotOjEwMUI1MDAwQUY0NTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MQotOjEwMUI2MDAwMDAwMDAwMDA4RjgzMDAwODEwNjAwMDIzMDAwMDAwMDBDOAotOjEwMUI3MDAwOEY0NTEwMDAwNEExRkZGRTAwMDAwMDAwMTA2MDAwMUU1MQotOjEwMUI4MDAwMDAwMDAwMDA4RjQ0MTAwMDNDMEMwMDIwMDA4QzEwMjQ0QQotOjEwMUI5MDAwMTA0MDAwMTk4RjhFMDAwMDMxQ0QwMDAyMTFBMDAwMTZGOAotOjEwMUJBMDAwMDAwMDAwMDA5NzRGMTAxNDE1RTAwMDEzMDAwMDAwMDAyMwotOjEwMUJCMDAwOTc1OTEwMDgzMzM4RkZGRjI3MTEwMDA2MDAxMTE4ODJDQgotOjEwMUJDMDAwMDAwMzMwODAwMEM3MjgyMTMyMzAwMDAxMzIyMzAwMDM5NwotOjEwMUJEMDAwMTIwMDAzMkM4Q0EyMDAwMDAwMDAwMDBEMDBDN0Y4MjFBOQotOjEwMUJFMDAwQUZFMjAwMDAzQzA1MDgwMDhDQTUwNDMwMjRBNjAwMDFFQgotOjEwMUJGMDAwM0MwMTA4MDBBQzI2MDQzMDhGNkQwMDAwMzQwMkZGRkY2QQotOjEwMUMwMDAwQUY4RDAwMDQ4Q0VDMDAwMDExODIwMkE2MDAwMDIwMjFBMAotOjEwMUMxMDAwOENFRDAwMDAzMUFDMDEwMDExODAwMjhBMDAwMDAwMDA1MAotOjEwMUMyMDAwM0MwMjA4MDA4QzQyMDQ3NDNDMDMwODAwOEM2MzA0NENBMgotOjEwMUMzMDAwM0MxRjA4MDA4RkZGMDQ3MDNDMTgwODAwOEYxODA0NDhGMAotOjEwMUM0MDAwMDA0ODM4MjEwMDY4ODAyMTAwRTgyODJCMDNFNDMwMjE3NwotOjEwMUM1MDAwMDIwODQwMkIwMzA0ODgyMTAwQzU3MDIxMDIyODc4MjE0NgotOjEwMUM2MDAwM0MwMTA4MDBBQzMwMDQ0QzNDMDEwODAwQUMyRjA0NDg5NwotOjEwMUM3MDAwM0MwMTA4MDBBQzI3MDQ3NDNDMDEwODAwQUMyRTA0NzA0MQotOjEwMUM4MDAwOEY4NDAwMTgwMTIwMzAyMTMxMjkwMDA3MjQ5RjAwMDg4QgotOjEwMUM5MDAwMzNGOTFGRkYwMzU5NDAyMUFGODQwMDFDQUY5OTAwMTg4RQotOjEwMUNBMDAwMjUxQjQwMDBBRjU5MDA4NDExMjAwMDAzOEY4MzAwMjBDMgotOjEwMUNCMDAwMjRDMjAwMDczMDQ2RkZGODhGODQwMDI4MDBDMzI4MjE4MwotOjEwMUNDMDAwMDBBNDMwMkIxNEMwMDAwMkFGODMwMDI0MDBBNDI4MjNGQQotOjEwMUNEMDAwMDM0NTYwMjEzNDBEODAwMDAxOEQxMDIxM0MwRjEwMDA2MAotOjEwMUNFMDAwQUY4NTAwMjBBRjgyMDAzOEFGNDUwMDgwQUY0RjAxNzg0QwotOjEwMUNGMDAwOEY4ODAwMTQyNTBGMDAwMTBBMDAwMUVGQUY4RjAwMTQzOAotOjEwMUQwMDAwOEY2MjAwMDg4RjY3MDAwMDI0MDUwMDMwMDAwNzc2MDIwQwotOjEwMUQxMDAwMzFDMzAwRjAxMDY1MDBBNzI0MEYwMDQwNTQ2RkZGNEM0MgotOjEwMUQyMDAwOEY4ODAwMTQ4RjRCMDE3ODA1NjBGRkZFMDAwMDAwMDBEMwotOjEwMUQzMDAwMzBDQTAyMDAxNTQwMDAwMzAwMDYxMjgyMDAwMDAwMERBOAotOjEwMUQ0MDAwMDAwNjEyODIzMDREMDAwMzAwMEQ0OTAwMDEyRDE4MjFCQwotOjEwMUQ1MDAwMDAwMzgwODAwMjBENDAyMTAwMDg2MDgwMDE5MzgwMjFGMwotOjEwMUQ2MDAwOEUxRjAwMDAxN0UwMDAwMjAwMDAwMDAwMDAwMDAwMERDMAotOjEwMUQ3MDAwOEY2RTAwMDQwNUMyMDJCRDkyMDcwMDA2OTIwRTAwMDU5OAotOjEwMUQ4MDAwOTIwMjAwMDQzQzA5MDAwMTAwMEUxODgwMDA3MEY4MjE0NgotOjEwMUQ5MDAwOEZFRDAwMTgyNzcxMDAwODI0NDgwMDA1MDFBOTYwMjE3MwotOjEwMURBMDAwMDAwODMwODJBRkVDMDAxODAyMjAyMDIxMEUwMDA1OUVCMgotOjEwMURCMDAwMjYwNTAwMTQ5MjBBMDAwNjhGNzkwMDA0M0MwQjdGRkY3MQotOjEwMURDMDAwMDAwQTIwODAwMDkxNzgyMThERjgwMDA0MzU2NkZGRkYxRAotOjEwMUREMDAwMDMyNjI4MjQwMzA1MzgyMUFERTcwMDA0OTIwRTAwMDVGMAotOjEwMURFMDAwOTIwRDAwMDQ5NjBDMDAwODAwMEUxMDgwMDA1MUM4MjFDRQotOjEwMURGMDAwOEYyMzAwMDA5NzQ5MDEwNDNDMDdGRkZGMDA2NzU4MjQyOAotOjEwMUUwMDAwMzEyOEZGRkYwMTBERjgyMTAzRUM1MDIzMzE0NEZGRkY3RgotOjEwMUUxMDAwMDE2NDMwMjVBRjI2MDAwMDkyMDMwMDA3MjQxODAwMDE1QQotOjEwMUUyMDAwMTA3ODAyNzUyNDBGMDAwMzEwNkYwMjg1MDAwMDAwMDA3NwotOjEwMUUzMDAwOEUwNTAwMTAyNDE5MDAwQUE3NTkwMTQwQTc0NTAxNDI0OAotOjEwMUU0MDAwOTIxODAwMDQ4Rjg2MDAwMDI0MEYwMDAxQTc1ODAxNDQ1NwotOjEwMUU1MDAwQTc0MDAxNDY5NzQ3MDEwNDMwRDEwMDAyM0MwNTAwNDFFQwotOjEwMUU2MDAwQTc0NzAxNDgwMDAwMTgyMUE3NEYwMTRBMTIyMDAwMDM4QwotOjEwMUU3MDAwMzBDQjAwMDQzQzA1MDE0MTI0MDMwMDAxNTE2MDAwMDUwMgotOjEwMUU4MDAwQUY4MzAwMDgzQzA2MDAxMDAwQTYyODI1MjQwMzAwMDFBQgotOjEwMUU5MDAwQUY4MzAwMDhBRjQ1MTAwMDAwMDAwMDAwMDAwMDAwMDAwNAotOjEwMUVBMDAwMDAwMDAwMDAwMDAwMDAwMDhGOEEwMDA4MTE0MDAwMDRCQwotOjEwMUVCMDAwMDAwMDAwMDA4RjQ0MTAwMDA0ODFGRkZFMDAwMDAwMDBCRAotOjEwMUVDMDAwOEY2QjAwMDA5MjA4MDAwNDNDMTEwODAwOEUzMTA0NDQxRQotOjEwMUVEMDAwQUY4QjAwMDQ5NzU5MDEwNDMxMTgwMEZGM0MwRTA4MDAzNQotOjEwMUVFMDAwOERDRTA0NDAzMzI1RkZGRjAzMDUzODIxMDIyNzYwMjFGMgotOjEwMUVGMDAwMDAwMDEwMjEyNTBGMDAwQTMxRThGRkZGMDE4NzQ4MkI2MQotOjEwMUYwMDAwMDFDMjY4MjEwMUE5RjgyMTMxMTAwMDA3M0MwMTA4MDAzNQotOjEwMUYxMDAwQUMyQzA0NDQzQzAxMDgwMEFDM0YwNDQwMTIwMDAwMDMxOAotOjEwMUYyMDAwOEY4QzAwMTgyNTA2MDAwNzMwQzhGRkY4MDEwQzY4MjFDNwotOjEwMUYzMDAwMzFCRjFGRkZBRjhDMDAxQ0FGOUYwMDE4QUY1RjAwODQ0NAotOjEwMUY0MDAwOTc0NDAxMDQwMzVGODAyMTMwODRGRkZGMzA4QTAwMDczQgotOjEwMUY1MDAwMTE0MDAwMDMyNjFCNDAwMDI0ODkwMDA3MzEyNEZGRjhBQwotOjEwMUY2MDAwOEY4MjAwMjA4Rjg1MDAyODAwODIyMDIxMDA4NTcwMkIyMQotOjEwMUY3MDAwMTVDMDAwMDJBRjgyMDAyNDAwODUyMDIzM0MwQjA4MDAxRQotOjEwMUY4MDAwOEQ2QjA0OEMzQzBBMDgwMDhENEEwNDg4MDM0NDg4MjEyOAotOjEwMUY5MDAwMzQwMzgwMDAwMjIzMTAyMTNDMEYxMDAwQUY4NDAwMjA4NgotOjEwMUZBMDAwQUY4MjAwMzhBRjQ0MDA4MEFGNEYwMTc4MEEwMDAyOTYzQwotOjEwMUZCMDAwOEY4ODAwMTQ4RjUwMDE3ODA2MDBGRkZFMzBEMTAyMDA5OAotOjEwMUZDMDAwMTYyMDAwMDMwMDA2MTI4MjAwMDAwMDBEMDAwNjEyODI5NwotOjEwMUZEMDAwMzA1RjAwMDMwMDFGMTkwMDAwN0YzMDIxMDAwNjIwODBDMQotOjEwMUZFMDAwMDA5RkM4MjEwMDE5NDg4MDAxMzM4MDIxOEUxODAwMDAwRAotOjEwMUZGMDAwMTMwMDAwMDIwMDAwMDAwMDAwMDAwMDBEOEY2QzAwMENCOAotOjEwMjAwMDAwMDU4MDAxRkI4Rjg3MDAzODI0MEUwMDAxQUUwRTAwMDAxMgotOjEwMjAxMDAwOENFMzAwMDhBMjAwMDAwNzhGNjUwMDA0MDAwNTU0MDI0RAotOjEwMjAyMDAwMzE0RDAwRkYyNUE4MDAwNTAwMDgzMDgyMkNDQjAwNDE2RgotOjEwMjAzMDAwMTU2MDAwMDJBMjBBMDAwNDAwMDAwMDBEOEY3ODAwMDQ2MQotOjEwMjA0MDAwM0MwM0ZGRkYwMEUwMjgyMTMzMEJGRkZGMjU2QzAwMEI1MgotOjEwMjA1MDAwMDAwQzEwODIwMDAyMjA4MDAwODc0ODIxOEQzRjAwMDA4NAotOjEwMjA2MDAwMjYwNDAwMTRBNjE4MDAwODAzRTNDODI0MEUwMDA1OUVFOQotOjEwMjA3MDAwQUQzOTAwMDA4RjRGMDEwODNDMTExMDAwMDFGMTM4MjRFOAotOjEwMjA4MDAwMTBFMDAxQUIwMDAwMDAwMDk3NEQwMTA0OTIwODAwMDcyQQotOjEwMjA5MDAwMjVBQUZGRUMzNTA2MDAwMjMxNDRGRkZGQTIwNjAwMDcyNwotOjEwMjBBMDAwOTYwNjAwMDgyQ0M3MDAxMzU0RTAwMDA1OTIwMzAwMDdCMQotOjEwMjBCMDAwOTIxMTAwMDczNjJGMDAwMUEyMEYwMDA3OTIwMzAwMDdCQwotOjEwMjBDMDAwMjQxODAwMDExMDc4MDFDMjI0MDkwMDAzMTA2OTAxRDUwOQotOjEwMjBEMDAwOEY4ODAwMzgzMENCRkZGRjI1NzEwMDAyMDAxMTc4ODMxNAotOjEwMjBFMDAwMzFFNDAwRkYwMDA0Mjg4MEEyMEYwMDA1MDBBODQ4MjE2OQotOjEwMjBGMDAwOEQyRDAwMDA5NzRBMDEwNDNDMEVGRkZGMDFBRUY4MjQyRAotOjEwMjEwMDAwMzE0M0ZGRkYwMDZCMTAyMzI0NENGRkZFMDNFQ0M4MjU3NgotOjEwMjExMDAwQUQzOTAwMDA5MjA2MDAwNTNDMDNGRkY2MzQ2MkZGRkY3NAotOjEwMjEyMDAwMzBEODAwRkYwMDE4Mzg4MDAwRjA4ODIxOTIyRjAwMTQ2QQotOjEwMjEzMDAwM0MwNEZGN0YzNDg3RkZGRjMxRUUwMDBGMDFDNjU4MjFCQQotOjEwMjE0MDAwMzE2NTAwRkYwMDA1NTA4MDAxNTA2ODIxOERBQzAwMjBGMgotOjEwMjE1MDAwMDE0OEY4MjFBMjBCMDAwNjAxODJDODI0QUUwQzAwMEMzNQotOjEwMjE2MDAwQUZGOTAwMEM5MjA5MDAwNjhFMTEwMDBDMDMyNzc4MjRBOQotOjEwMjE3MDAwMDAwOUMwODAwMzEwNzAyMTk1QzYwMDI2MDMwODI4MjE5RAotOjEwMjE4MDAwMDIyNzIwMjRBRTA0MDAwQ0FEQ0YwMDIwQURDNjAwMjRGMQotOjEwMjE5MDAwQUNBNjAwMTA4Rjg4MDAwMDNDMEIwODAwOEQ2QjA0OENFRgotOjEwMjFBMDAwM0MwQTA4MDA4RDRBMDQ4ODI0MUYwMDEwMjQxOTAwMDJFQwotOjEwMjFCMDAwQTc1RjAxNDBBNzQwMDE0MkE3NDAwMTQ0QTc1OTAxNDYzQgotOjEwMjFDMDAwOTc0OTAxMDQyNDA3MDAwMTMxMDYwMDAyMjUzOEZGRkU2QgotOjEwMjFEMDAwQTc1ODAxNDgzQzA1MDAwOUE3NDcwMTRBMTBDMDAwMDM2MQotOjEwMjFFMDAwMDAwMDE4MjEzQzA1MDEwOTI0MDMwMDAxMzEwQzAwMDQwMgotOjEwMjFGMDAwNTE4MDAwMDVBRjgzMDAwODNDMDgwMDEwMDBBODI4MjU4NgotOjEwMjIwMDAwMjQwMzAwMDFBRjgzMDAwOEFGNDUxMDAwMDAwMDAwMDA2OAotOjEwMjIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTIwNTAwMDQyMwotOjEwMjIyMDAwMjRBRTAwMDIzMUNEMDAwNzAwMEQxODIzMzA2MjAwMDdGNAotOjEwMjIzMDAwQUUwMjAwMTA4RjkwMDAwODEyMDAwMDA0MDAwMDAwMDBBMQotOjEwMjI0MDAwOEY0RjEwMDAwNUUxRkZGRTAwMDAwMDAwOEY3MTAwMDBCRAotOjEwMjI1MDAwOEY4RTAwMTgzQzAzMDgwMDhDNjMwNDQ0QUY5MTAwMDQ4NwotOjEwMjI2MDAwOTc0NTAxMDQyNUNGMDAxMDMxRTYxRkZGMzBBMkZGRkY4NAotOjEwMjI3MDAwQUY4RTAwMUNBRjg2MDAxOEFGNDYwMDg0MjQ0OUZGRkVENQotOjEwMjI4MDAwM0MwQzA4MDA4RDhDMDQ0MDk3NEQwMTA0MDEyMDgwMjFGNgotOjEwMjI5MDAwMDAwOTQ3QzMwMDcwQzAyMTMxQTlGRkZGMDMxMEY4MkJDQwotOjEwMjJBMDAwMDE4OEM4MjEwMzNGMjAyMTAzNDYzODIxMzEzMTAwMDcyRQotOjEwMjJCMDAwM0MwMTA4MDBBQzM4MDQ0NDNDMDEwODAwQUMyNDA0NDA1NAotOjEwMjJDMDAwMTIyMDAwMDMyNEZCNDAwMDI1MjcwMDA3MzBFOUZGRjgxNwotOjEwMjJEMDAwOEY4NjAwMjA4Rjg0MDAyODAxMjYzODIxMDBFNEMwMkIzRgotOjEwMjJFMDAwMTcwMDAwMDJBRjg2MDAyNDAwRTQzODIzMDM0NzIwMjFCMgotOjEwMjJGMDAwMzQxOTgwMDAwMDk5MTAyMTNDMEYxMDAwQUY4NzAwMjA5NgotOjEwMjMwMDAwQUY4MjAwMzhBRjQ3MDA4MEFGNEYwMTc4MEEwMDAyOTZENQotOjEwMjMxMDAwOEY4ODAwMTQ5NzQ3MDEwNDEwRTBGREFFM0MxODQwMDA4MAotOjEwMjMyMDAwOEY1ODAxNzgwNzAwRkZGRTMwQzU0MDAwMTBBMDAwMDM2MQotOjEwMjMzMDAwM0MxRjAwMDgwMDAwMDAwRDNDMUYwMDA4QUY1RjAxNDA3QgotOjEwMjM0MDAwMjQxMDA4MDA4Rjg2MDAwMEFGNTAwMTc4OTc0NDAxMDRFNAotOjEwMjM1MDAwMzBEOTAwMDExMzIwMDBFRDMwODZGRkZGMjRDQ0ZGRkVCMgotOjEwMjM2MDAwMjQwRDAwMDJBNzREMDE0NkE3NEMwMTQ4OEY5MTAwMTg4QgotOjEwMjM3MDAwMjQwODAwMERBNzQ4MDE0QThGNjMwMDAwMjYyRjAwMDg5QgotOjEwMjM4MDAwMzFFMjFGRkYwMzQyNzAyMTMwQzkwMDA3QUY4MzAwMDQxMAotOjEwMjM5MDAwQUY5MTAwMUNBRjgyMDAxODAwQzAzODIxQUY0MjAwODQwQQotOjEwMjNBMDAwMTEyMDAwMDMyNURCNDAwMDI0RDgwMDA3MzMwN0ZGRjg4NQotOjEwMjNCMDAwOEY4NTAwMjA4Rjg0MDAyODAwRTUzMDIxMDBDNDM4MkI1MQotOjEwMjNDMDAwMTRFMDAwMDJBRjg1MDAyNDAwQzQzMDIzOEY4NDAwMTQ4MQotOjEwMjNEMDAwMDM0NkY4MjEzNDBDODAwMEFGODYwMDIwMDNFQzgwMjFGNgotOjEwMjNFMDAwQUY0NjAwODAyNDk5MDAwMTNDMDYxMDAwM0MxODQwMDBENAotOjEwMjNGMDAwQUY0NjAxNzhBRjkwMDAzOEFGOTkwMDE0QUY1ODAxMzg1QwotOjEwMjQwMDAwMEEwMDAxOTYwMDAwMDAwMDhGNjMwMDAwOTc1MTAxMDQ0QwotOjEwMjQxMDAwMzA2N0ZGRkYzMjI4RkZGRjhGNEYwMTc4MDVFMEZGRkU5NgotOjEwMjQyMDAwMzBFQzAwMDcwMDBDRjgyMzMzRjAwMDA3MjRGOUZGRkUxRQotOjEwMjQzMDAwMjQwNDAwMEFBNzQ0MDE0MEE3NTAwMTQyQTc1OTAxNDRCRgotOjEwMjQ0MDAwQTc0MDAxNDZBNzQ4MDE0ODhGNDUwMTA4MzBCODAwMjA0MQotOjEwMjQ1MDAwMTcwMDAwMDIyNDAzMDAwOTI0MDMwMDAxMzBDRDAwMDIwQwotOjEwMjQ2MDAwQTc0MzAxNEEzQzA0MDA0MTExQTAwMDAzMDAwMDE4MjFDOQotOjEwMjQ3MDAwM0MwNDAxNDEyNDAzMDAwMTMwQzkwMDA0NTEyMDAwMDUzRgotOjEwMjQ4MDAwQUY4MzAwMDgzQzA2MDAxMDAwODYyMDI1MjQwMzAwMDFDRAotOjEwMjQ5MDAwQUY4MzAwMDhBRjQ0MTAwMDAwMDAwMDAwMDAwMDAwMDBGRgotOjEwMjRBMDAwMDAwMDAwMDAwMDAwMDAwMDhGOEUwMDA4MTFDMDAwMDQzMgotOjEwMjRCMDAwMDAwMDAwMDA4RjQyMTAwMDA0NDFGRkZFMDAwMDAwMDBGOQotOjEwMjRDMDAwOEY3RjAwMDAyNzY0MDAwODhGOTEwMDNDQUY5RjAwMDRCRAotOjEwMjREMDAwOTQ4NTAwMDg5NDkwMDAwQTk0OTkwMDBDMzBBRkZGRkY5NwotOjEwMjRFMDAwMDAxMEM0MDAzMzIzRkZGRjExRjEwMEE2MDMwMzIwMjVEMQotOjEwMjRGMDAwM0MwRTA4MDA4RENFMDQ0NDNDMEMwODAwOEQ4QzA0NDAzQQotOjEwMjUwMDAwMDBFODg4MjEyNjI2RkZGRTAxQzYyODIxMDAwMDY4MjE1OAotOjEwMjUxMDAwMDBBNkY4MkIwMThEMjAyMTAwOUY4MDIxM0MwMTA4MDA5RQotOjEwMjUyMDAwQUMyNTA0NDQzQzAxMDgwMEFDMzAwNDQwMjRFMjAwMDgxRgotOjEwMjUzMDAwMzA0MkZGRkYzMDQ3MDAwNzEwRTAwMDAzOEY4MzAwMTg5MAotOjEwMjU0MDAwMjQ0RjAwMDczMUUyRkZGODMxMDZGRkZGMzBDODAwMDdEMwotOjEwMjU1MDAwMDA0MzgwMjEzMjE5MUZGRjAzNTlDMDIxQUY4MzAwMUNBMwotOjEwMjU2MDAwQUY5OTAwMTgyNzFCNDAwMEFGNTkwMDg0MTEwMDAwMDNFOQotOjEwMjU3MDAwOEY4QzAwMjAyNEM1MDAwNzMwQTZGRkY4OEY4NDAwMjgyOAotOjEwMjU4MDAwMDBDQzI4MjEwMEE0RjgyQjE3RTAwMDAyQUY4QzAwMjQxNwotOjEwMjU5MDAwMDBBNDI4MjNBRjg1MDAyMEFGNDUwMDgwM0MwNDA4MDAzQwotOjEwMjVBMDAwOEM4NDA0MzQwMzQ1NDgyMTM0MEU4MDAwMDEyRTY4MjFCOAotOjEwMjVCMDAwMTA4MDAwMDVBRjhEMDAzODkzOTEwMDE3MjQwNjAwMEU5RgotOjEwMjVDMDAwMTIyNjAwMTEyNDA3MDQzRjNDMDIxMDAwQUY0MjAxNzg5QwotOjEwMjVEMDAwOEY4ODAwMTQyNTBGMDAwMTBBMDAwMUVGQUY4RjAwMTQ0RgotOjEwMjVFMDAwMEUwMDA1QzQwMEUwMjAyMThGODgwMDE0M0MwQjA4MDA3OQotOjEwMjVGMDAwOEQ2QjA0OEMzQzBBMDgwMDhENEEwNDg4MjUwRjAwMDE2RAotOjEwMjYwMDAwMEEwMDAxRUZBRjhGMDAxNDNDMDIxMDAwQTc0NzAxNDhGOQotOjEwMjYxMDAwQUY0MjAxNzgwQTAwMDRDRThGODgwMDE0MjQwNDBGMDAxMgotOjEwMjYyMDAwMTE4NDAwM0QzMENFMDAyMDE1QzAwMDAyMjQwMzAwMDlCMwotOjEwMjYzMDAwMjQwMzAwMDEwQTAwMDIxQUE3NDMwMTRBMEEwMDAyMERGRQotOjEwMjY0MDAwQTc0MDAxNDY5NEVGMDAwODk0RjEwMDBBOTRGMDAwMENCMgotOjEwMjY1MDAwOEY4QzAwM0MwMDExNzQwMDMyMDdGRkZGMzFFREZGRkY0QgotOjEwMjY2MDAwMTFBQzAwMzcwMUM3MjAyNTNDMTgwODAwOEYxODA0NDQxRQotOjEwMjY3MDAwM0MwRjA4MDA4REVGMDQ0MDAwMDA4MDIxMDMwODY4MjExMgotOjEwMjY4MDAwMDFBODM4MkIwMUYwNzAyMTAxQzc2MDIxM0MwMTA4MDAyRQotOjEwMjY5MDAwQUMyRDA0NDQzQzAxMDgwMEFDMkMwNDQwMEEwMDAyN0EzMgotOjEwMjZBMDAwOEY4NDAwMTgzQzAyMDgwMDhDNDIwNDdDM0MwMzA4MDAyNAotOjEwMjZCMDAwOEM2MzA0NTQzQzFGMDgwMDhGRkYwNDc4M0MxODA4MDAwQQotOjEwMjZDMDAwOEYxODA0NTAwMDQ4MzgyMTAwNjg4MDIxMDBFODI4MkIyQQotOjEwMjZEMDAwMDNFNDMwMjEwMjA4NDAyQjAzMDQ4ODIxMDBDNTcwMjE0NwotOjEwMjZFMDAwMDIyODc4MjEzQzAxMDgwMEFDMzAwNDU0M0MwMTA4MDA2OQotOjEwMjZGMDAwQUMyRjA0NTAzQzAxMDgwMEFDMjcwNDdDM0MwMTA4MDBDRQotOjEwMjcwMDAwQUMyRTA0NzgwQTAwMDI3QThGODQwMDE4QTc0MDAxNDY5NAotOjEwMjcxMDAwMEEwMDA0MzU4RjkxMDAxODMwQ0QwMDIwMTVBMEZGQzVBOAotOjEwMjcyMDAwMjQwMzAwMEQyNDAzMDAwNTBBMDAwMjFBQTc0MzAxNEFFRQotOjEwMjczMDAwOTc0RTAxMDQyNUM1RkZGMDBBMDAwMzgxMzBBNEZGRkY3NgotOjEwMjc0MDAwOEY5ODAwNDAxNDk4RkZDODAwMDAxMDIxM0MwNTA4MDAzNQotOjEwMjc1MDAwOENBNTA0NkMzQzFGMDgwMDhGRkYwNDY4MDBBOEM4MjFFQQotOjEwMjc2MDAwMDMyODMwMkIwM0UyMjAyMTAwODY0MDIxM0MwMTA4MDA5MQotOjEwMjc3MDAwQUMzOTA0NkMzQzAxMDgwMEFDMjgwNDY4MEEwMDAyN0FGOQotOjEwMjc4MDAwOEY4NDAwMTg4RjhDMDA0MDE0OENGRjU5MDBFOEM4MjFGQQotOjEwMjc5MDAwM0MxODA4MDA4RjE4MDQ2QzNDMTEwODAwOEUzMTA0Njg0NgotOjEwMjdBMDAwMjcyM0ZGRkUwMzAzNDgyMTAwMDAxMDIxMDEyMzMwMkJDMwotOjEwMjdCMDAwMDIyMjcwMjEwMUM2NjgyMTNDMDEwODAwQUMyOTA0NkM4QQotOjEwMjdDMDAwM0MwMTA4MDBBQzJEMDQ2ODBBMDAwNEE1MjRFMjAwMDhCRQotOjEwMjdEMDAwOEY4ODAwMzgzQzAzRkZGRjhEMDIwMDBDMDA0M0Y4MjQ3MwotOjEwMjdFMDAwMDNFNEM4MjVBRDE5MDAwQzBBMDAwMzhGMzBDQkZGRkZBRQotOjEwMjdGMDAwMEEwMDAzQzNBRTAwMDAwMDk3NEEwMTA0OTIwNDAwMDREQgotOjEwMjgwMDAwOEUyNjAwMEMwMTQ0NTgyMTI1NzlGRkYyMDBDN0MwMjQxMAotOjEwMjgxMDAwMzMyNUZGRkYwMzA1MzgyNUFFMjcwMDBDMEEwMDAyRTYyQQotOjEwMjgyMDAwOEUwNTAwMTAzQzBERkZGRjhEMEEwMDEwMDE0RDU4MjQ0RAotOjEwMjgzMDAwMDE2NDYwMjVBRDBDMDAxMDBBMDAwMzhGMzBDQkZGRkY1MAotOjEwMjg0MDAwOTc0MzAxMDQ5MjBFMDAwNDhFMjkwMDEwMDA2RTEwMjE5RgotOjEwMjg1MDAwMjQ0REZGRUUwMTI3NjAyNDMxQThGRkZGMDE4OEY4MjVGMQotOjEwMjg2MDAwQUUzRjAwMTAwQTAwMDJFNjhFMDUwMDEwOEUwRjAwMEMyRAotOjEwMjg3MDAwQUUwMDAwMDAwMDA3ODg4MDAyMzAyODIxMEEwMDAyQjg1QwotOjEwMjg4MDAwQUNBRjAwMjAxNDYwMDAwRDMwNThGRkZGM0MwNEZGRkY4OAotOjEwMjg5MDAwMDA0NDY4MjQwMUE0NzAyNjAwMEU2MDJCMDAwRDEwMkI0QwotOjEwMjhBMDAwMDA0Q0Y4MjQxM0UwMDAwMjAwMDAwMDAwMDAwMDAwMERCRQotOjEwMjhCMDAwOENBRjAwMDAwQTAwMDI1MDAxRTQxMDI1M0IwM0ZGRkYyQgotOjEwMjhDMDAwMDAwMzg4MkIwMDE4ODAyQjAyMTEyMDI0MTA4MDAwMDJBNgotOjEwMjhEMDAwMDAwMDAwMDAwMDAwMDAwRDhDQjkwMDAwMEEwMDAyNTA0QQotOjEwMjhFMDAwMzcyMkZGRkYzMDg0RkZGRjMwQTVGRkZGMTA4MDAwMDc3NQotOjEwMjhGMDAwMDAwMDE4MjEzMDgyMDAwMTEwNDAwMDAyMDAwNDIwNDIzNAotOjEwMjkwMDAwMDA2NTE4MjExNDgwRkZGQjAwMDUyODQwMDNFMDAwMDg0MwotOjEwMjkxMDAwMDA2MDEwMjExMEMwMDAwNzAwMDAwMDAwOENBMjAwMDAyMQotOjEwMjkyMDAwMjRDNkZGRkYyNEE1MDAwNEFDODIwMDAwMTRDMEZGRkJGNgotOjEwMjkzMDAwMjQ4NDAwMDQwM0UwMDAwODAwMDAwMDAwMTBBMDAwMDg0OAotOjEwMjk0MDAwMjRBM0ZGRkZBQzg2MDAwMDAwMDAwMDAwMDAwMDAwMDA5MAotOjEwMjk1MDAwMjQwMkZGRkYyNDYzRkZGRjE0NjJGRkZBMjQ4NDAwMDRCMwotOjEwMjk2MDAwMDNFMDAwMDgwMDAwMDAwMDMwOEVGRkZGMzBEOEZGRkZCQQotOjEwMjk3MDAwMDAwNTdDMDAwMUY4NjAyNTM5Q0RGRkZGMDFBQzUwMjEzNgotOjEwMjk4MDAwMDE0QzU4MkIwMTRCNDgyMTAwMDk0NDAyMzEyN0ZGRkYxRAotOjEwMjk5MDAwMDBFODMwMjEwMDA2MjQwMjMwQzVGRkZGMDBBNDE4MjEwMgotOjEwMjlBMDAwMzg2MkZGRkYwM0UwMDAwODMwNDJGRkZGM0MwQzA4MDBFNAotOjEwMjlCMDAwOEQ4QzA0ODQyNDBCRkY4MDI3QkRGRkQwMDE4NDUwMjExRgotOjEwMjlDMDAwMDE0QjQ4MjRBRjQ5MDAyMDNDMDgwODAwOEQwODA0ODRDRQotOjEwMjlEMDAwQUZCMjAwMjBBRkIwMDAxOEFGQkYwMDI4QUZCMzAwMjRFMwotOjEwMjlFMDAwQUZCMTAwMUM5MzY2MDAwNDAxMDQzODIxMzBFNDAwN0Y3RAotOjEwMjlGMDAwMDA5QTEwMjEzQzAzMDAwODAwNDM5MDIxMzBDNTAwMjBCQwotOjEwMkEwMDAwMDM2MDgwMjEzQzA4MDExMTI3N0IwMDA4MTRBMDAwMDIwQwotOjEwMkExMDAwMjY0NjAwNzAyNjQ2MDA2QzkyMTMwMDA0OTc1MTAxMDQ2QwotOjEwMkEyMDAwOTIwRjAwMDQzMjY3MDAwRjMyMkVGRkZGMzFFRDAwNDA5RAotOjEwMkEzMDAwMDFDNzI4MjMxMUEwMDAwNTAwMDA0ODIxOTI1OTAwQkNCRAotOjEwMkE0MDAwMzMzODAwMDQxNzAwMDA5MDAwMDAwMDAwOTI0MzAwQkNERgotOjEwMkE1MDAwMzA3RjAwMDQxM0UwMDAwRjAwMDAwMDAwMTBBMDAwMEQwNAotOjEwMkE2MDAwMDAwMDAwMDA5NjBFMDAwMjI0MEFGRjgwMDBBNzYwMjFFQgotOjEwMkE3MDAwMjVDREZGRkVBNzREMTAxNjkyMEIwMDA0MDE0QjIwMjQxQwotOjEwMkE4MDAwMzA4MjAwRkYxMDQwMDA4NTAxMEM0MDI1M0MwRjA0MDBGRgotOjEwMkE5MDAwMDEwRjQwMjU4RjUzMDE3ODA2NjBGRkZFMjQwNDAwMEFEMQotOjEwMkFBMDAwQTc0NDAxNDA5NjBEMDAwMjI0MDQwMDA5MzFBQzAwMDc0MAotOjEwMkFCMDAwMDAwQzU4MjMzMTZBMDAwN0E3NEEwMTQyOTYwMjAwMDIxRgotOjEwMkFDMDAwMjQ0M0ZGRkVBNzQzMDE0NEE3NDAwMTQ2OTc1RjAxMDQ0QQotOjEwMkFEMDAwQTc1RjAxNDg4RjU5MDEwODMzMzgwMDIwNTMwMDAwMDFENwotOjEwMkFFMDAwMjQwNDAwMDE5MjBGMDAwNDMxRUUwMDEwMTVDMDAwMDIxMgotOjEwMkFGMDAwMzQ4MzAwMTAwMDgwMTgyMUE3NDMwMTRBMDAwMDAwMDAyMQotOjEwMkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUY0ODEwMDBCRQotOjEwMkIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNQotOjEwMkIyMDAwOEY1MTEwMDAwNjIxRkZGRTMxMTNGRkZGMTI2MDAwMDNEQQotOjEwMkIzMDAwMDAwMDAwMDA4RjQ4MTAxOEFDQzgwMDAwOTYwMzAwMDY4MwotOjEwMkI0MDAwMzA3RkZGRkYyN0Y5MDAwMjAwMTk5ODgyMDAxMzg4ODA2OAotOjEwMkI1MDAwMDIzQjMwMjE4Q0Q4MDAwMDE1MjAwMDU3MDAxODM0MDJBOQotOjEwMkI2MDAwOTIwMzAwMDQyNDA1RkY4MDAwQTNGODI0MzNGMTAwRkY0MgotOjEwMkI3MDAwMTIyMDAwMkMwMDAwMDAwMDkyNDcwMEJDMzBGMjAwMDIzRQotOjEwMkI4MDAwMTI0MDAwMjgwMDAwMDAwMDk3NEIxMDBDMjU2MkZGRkU0OQotOjEwMkI5MDAwQTc0MjEwMTYwMDAwMDAwMDNDMEEwNDAwMzU0OTAwMzAyRQotOjEwMkJBMDAwQUY0OTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRAotOjEwMkJCMDAwMDAwMDAwMDA4RjRDMTAwMDA1ODFGRkZFMDAwMDAwMDBBNwotOjEwMkJDMDAwOTc0OTEwMEM4RjUxMTAxQzAwQzAyMDIxMzEyN0ZGRkZBNgotOjEwMkJEMDAwMjRGMjAwMzAwMDEyMTg4MjAwMDMyODgwMDBCQkY4MjE4NAotOjEwMkJFMDAwMzIyNkZGRkZBRkYxMDAwMDBFMDAwNUIzMDAxMTJDMDJFQQotOjEwMkJGMDAwMDAxM0M4ODAwMzNCOTgyMThFNzgwMDAwMDAwMjc0MDAwNwotOjEwMkMwMDAwQUZCODAwMTA4RkE4MDAxMDMxMEZGRkZGQUZBRjAwMTA1QQotOjEwMkMxMDAwOEZBNDAwMTAwMUM0NjgyNUFGQUQwMDEwOEZBNjAwMTA2RQotOjEwMkMyMDAwQUU2NjAwMDA5NzczMDAwODk3NkQwMDBBOTc2NjAwMEM2NwotOjEwMkMzMDAwOEY4QTAwM0MwMDBENUMwMDMwQ0NGRkZGMzI2MkZGRkY0QQotOjEwMkM0MDAwMTA0QTAwMzYwMTZDMjAyNTk2MDYwMDAyM0MxMDEwMDA0OAotOjEwMkM1MDAwMjREMzAwMDgwRTAwMDEzQjMyNjRGRkZGOTc0QzAxMDRBRgotOjEwMkM2MDAwMEUwMDAxNDkzMTg0RkZGRkFGNTAwMTc4OEZCRjAwMjg2QgotOjEwMkM3MDAwOEZCMzAwMjQ4RkIyMDAyMDhGQjEwMDFDOEZCMDAwMThEQQotOjEwMkM4MDAwMDNFMDAwMDgyN0JEMDAzMDEwQTBGRjcwMDAwMDAwMDAyNgotOjEwMkM5MDAwMjRBNUZGRkMwQTAwMDVFQzI0MDkwMDA0OENEMTAwMDBFNwotOjEwMkNBMDAwQUY1MTEwMTg4RjUzMDE3ODA2NjBGRjdBMjQwNDAwMEE5MAotOjEwMkNCMDAwMEEwMDA2MDEwMDAwMDAwMDAwQTdDODIxOEY4ODAwMzgyNAotOjEwMkNDMDAwOEY0RTEwMUMwMDE5QzA4MjAwMTg3ODgwMDFFODIwMjE2NgotOjEwMkNEMDAwQUM4RTAwMDAwMDBFMkMwMjAwQzAyMDIxMEUwMDA1QjNCNwotOjEwMkNFMDAwMzFDNkZGRkYwMjNCMjgyMThDQUQwMDAwMDAwMjU0MDBEQQotOjEwMkNGMDAwMDA0MDMwMjFBRkFEMDAxMDhGQUMwMDEwMzE4QkZGRkZEMgotOjEwMkQwMDAwQUZBQjAwMTA4RkEyMDAxMDAxNDI0ODI1QUZBOTAwMTAwMAotOjEwMkQxMDAwOEZBNzAwMTAwQTAwMDYzMUFDQTcwMDAwOEY4RjAwNDA3QgotOjEwMkQyMDAwMTQ4RkZGQzkwMDAwMDAwMDk3NDIwMTA0OTYwQjAwMDJCNwotOjEwMkQzMDAwM0MwNTA4MDA4Q0E1MDQ2QzMwNDlGRkZGMzE2QUZGRkY5OQotOjEwMkQ0MDAwM0MxMTA4MDA4RTMxMDQ2ODAxMkEzODIxMjRGMkZGRkU2QwotOjEwMkQ1MDAwMDBCMjQwMjEwMDEyRkZDMzAxMTJDODJCMDIzRkMwMjE2NAotOjEwMkQ2MDAwMDMxOTIwMjEzQzAxMDgwMEFDMjgwNDZDM0MwMTA4MDAzOAotOjEwMkQ3MDAwQUMyNDA0NjgwQTAwMDY2QjAwMDAwMDAwMDBBNDEwMkJCRAotOjEwMkQ4MDAwMTA0MDAwMDkyNDAzMDAwMTAwMDUyODQwMDBBNDEwMkI3NgotOjEwMkQ5MDAwMDRBMDAwMDMwMDAzMTg0MDU0NDBGRkZDMDAwNTI4NDAzNQotOjEwMkRBMDAwMTA2MDAwMDcwMDAwMDAwMDAwODUzMDJCMTRDMDAwMDJGNgotOjEwMkRCMDAwMDAwMzE4NDIwMDg1MjAyMzE0NjBGRkZCMDAwNTI4NDIxMQotOjEwMkRDMDAwMDNFMDAwMDgwMDgwMTAyMThGODUwMDJDMjdCREZGRTg1QwotOjEwMkREMDAwMDAwNTMwMjcyQ0MzMDAwMTJDQTQwMDAyMDA4MzEwMjUxRAotOjEwMkRFMDAwMTA0MDAwMDNBRkJGMDAxMDI0MDUwMDdGQUY4NTAwMkMwQQotOjEwMkRGMDAwMDAwNTI4MjczMEE1RkZGRjBFMDAwNTkyMjQwNDI2RjVDNAotOjEwMkUwMDAwOEY4MzAwMzAyNDA0MDJCRDAwNDAzMDIxMDA4MzM4MkIyMgotOjEwMkUxMDAwMTBFMDAwMDkyNDA1MDAwMTAwMDQyMDQwMDA4MzEwMkI2RAotOjEwMkUyMDAwMDQ4MDAwMDMwMDA1Mjg0MDU0NDBGRkZDMDAwNDIwNDBCQgotOjEwMkUzMDAwMTBBMDAwMDgwMEMzNTAyMTAwNjQ0MDJCMTUwMDAwMDJDMAotOjEwMkU0MDAwMDAwNTI4NDIwMDY0MTgyMzE0QTBGRkZCMDAwNDIwNDI2MAotOjEwMkU1MDAwMDBDMzUwMjE4RkJGMDAxMDAwMEE0QzAyMzEyMjAwRkYzNgotOjEwMkU2MDAwMjdCRDAwMThBRjhBMDAyQzAzRTAwMDA4QUY4OTAwMzBBRQotOjEwMkU3MDAwMEEwMDAwMkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQxMQotOjEwMkU4MDAwNzQ3ODcwMzYyRTMwMkUzMTM1MDAwMDAwMDYwMDBGMDBBOQotOjEwMkU5MDAwMDAwMDAwMDAwMDAwMDEzNjAwMDBFQTYwMDAwMDAwMDBCMQotOjEwMkVBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMgotOjEwMkVCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMgotOjEwMkVDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMgotOjEwMkVEMDAwMDAwMDAwMTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQwotOjEwMkVFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMgotOjEwMkVGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMgotOjEwMkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMzg4MDAwMDAwMDAyNgotOjEwMkYxMDAwMDAwMDA1REMwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDNCRAotOjEwMkYyMDAwMDAwMDAwMDAwMDAwMDAwRDAwMDAwMDBEM0MwMjA4MDA0MQotOjEwMkYzMDAwMjQ0MjNDMjAzQzAzMDgwMDI0NjMzREQ0QUM0MDAwMDAwNAotOjEwMkY0MDAwMDA0MzIwMkIxNDgwRkZGRDI0NDIwMDA0M0MxRDA4MDA5OAotOjEwMkY1MDAwMzdCRDdGRkMwM0EwRjAyMTNDMTAwODAwMjYxMDAwQTgxQwotOjEwMkY2MDAwM0MxQzA4MDAyNzlDM0MyMDBFMDAwMkJBMDAwMDAwMDAxOAotOjEwMkY3MDAwMDAwMDAwMEQ4RjgzMDAzODNDMDg4MDAwMzUwNzAwNzA4QQotOjEwMkY4MDAwOENFNTAwMDAwMDgzMzAyNTNDMDI5MDAwMDBDMjIwMjUyMwotOjEwMkY5MDAwQUY4NTAwMzBBRjQ0MDAyMDhGNDkwMDIwMDUyMEZGRkVBMAotOjEwMkZBMDAwM0MwMzgwMDAzNDYyMDA3MDhDNDUwMDAwOEY4NjAwMzA0NgotOjEwMkZCMDAwM0MxOTA4MDA4RjM5MDA3QzNDMEUwODAwOERDRTAwNzg0QgotOjEwMkZDMDAwMDBBNjIwMjMwMzI0NTgyMTAwMDA3ODIxMDE2NDY4MkJFNwotOjEwMkZEMDAwMDFDRjYwMjEwMThENTAyMTNDMDEwODAwQUMyQjAwN0MwOQotOjEwMkZFMDAwM0MwMTA4MDBBQzJBMDA3ODAzRTAwMDA4MDAwMDAwMDA2MwotOjEwMkZGMDAwMEEwMDAwNDEyNDA0MDAwMThGODQwMDM4M0MwNTgwMDA1MQotOjEwMzAwMDAwMzRBMjAwMDEwMDgyMTgyNTAzRTAwMDA4QUY0MzAwMjAyRAotOjEwMzAxMDAwMDNFMDAwMDgwMDAwMTAyMTMwODRGRkZGMzBBNUZGRkYwRgotOjEwMzAyMDAwMTA4MDAwMDcwMDAwMTgyMTMwODIwMDAxMTA0MDAwMDJDQgotOjEwMzAzMDAwMDAwNDIwNDIwMDY1MTgyMTE0ODBGRkZCMDAwNTI4NDA5MQotOjEwMzA0MDAwMDNFMDAwMDgwMDYwMTAyMTEwQzAwMDA3MDAwMDAwMDAyRAotOjEwMzA1MDAwOENBMjAwMDAyNEM2RkZGRjI0QTUwMDA0QUM4MjAwMDA1RgotOjEwMzA2MDAwMTRDMEZGRkIyNDg0MDAwNDAzRTAwMDA4MDAwMDAwMDBGQgotOjEwMzA3MDAwMTBBMDAwMDgyNEEzRkZGRkFDODYwMDAwMDAwMDAwMDBBMQotOjEwMzA4MDAwMDAwMDAwMDAyNDAyRkZGRjI0NjNGRkZGMTQ2MkZGRkEyOAotOjEwMzA5MDAwMjQ4NDAwMDQwM0UwMDAwODAwMDAwMDAwMzA4QUZGRkZFMQotOjEwMzBBMDAwOTNBODAwMTNBNzRBMDE0NDk3NDkwRTE2MzBDNjAwRkZBMwotOjEwMzBCMDAwM0MwMjEwMDBBNzQ5MDE0NkFGNDUwMTQ4QTM0NjAxNTIxMgotOjEwMzBDMDAwQTc0ODAxNUFBRjQ3MDE2MDhGQTQwMDE4OEZBMzAwMTRDRQotOjEwMzBEMDAwQTc0NDAxNThBRjQzMDE1NDAzRTAwMDA4QUY0MjAxNzgxMAotOjEwMzBFMDAwMDNFMDAwMDgwMDAwMDAwMDNDMDM4MDAwMzQ2MjAwNzAzMAotOjEwMzBGMDAwOEM0OTAwMDA4Rjg4MDAwMDI0ODQwMDA3MjdCREZGRjg1QQotOjEwMzEwMDAwMzA4NEZGRjhBRjg5MDAzMDk3NEQwMDhBMzFBQ0ZGRkY2MwotOjEwMzExMDAwQUZBQzAwMDA4RkFCMDAwMDAxNjg1MDIzMjU0N0ZGRkZENAotOjEwMzEyMDAwMzBFNjFGRkYwMEM0MjgyQjE0QTBGRkY3M0MwQzgwMDBFMgotOjEwMzEzMDAwMzU4QjAwNzA4RDZBMDAwMDNDMDcwODAwOENFNzAwODQyNgotOjEwMzE0MDAwM0MwNjA4MDA4Q0M2MDA4MDAwMDgxMDgyMDE0OTE4MjM0NAotOjEwMzE1MDAwMDAwMjc4ODAwMEUzNzAyMTAwMDAyMDIxMDFDM0M4MkIwOQotOjEwMzE2MDAwMDBDNEMwMjEwMUZBNDAyMTAzMTk0ODIxMjUwMjQwMDA3MgotOjEwMzE3MDAwMjdCRDAwMDgzQzAxMDgwMEFDMkUwMDg0M0MwMTA4MDA3QgotOjEwMzE4MDAwQUMyOTAwODAwM0UwMDAwODAwMDAwMDAwOEY4MjAwMDBFRQotOjEwMzE5MDAwMjQ4NjAwMDczMEM1RkZGODAwQTIxODIxMzA2NDFGRkYwNQotOjEwMzFBMDAwMDNFMDAwMDhBRjg0MDAwMDhGODcwMDM4OEY4QTAwNDA1QQotOjEwMzFCMDAwMjdCREZGQjg4Rjg2MDA0NEFGQjYwMDQwQUZCRjAwNDRDNAotOjEwMzFDMDAwQUZCNTAwM0NBRkI0MDAzOEFGQjMwMDM0QUZCMjAwMzA5RAotOjEwMzFEMDAwQUZCMTAwMkNBRkIwMDAyODhGNDUwMTA0OEQ0OTAwQUM4MQotOjEwMzFFMDAwQUY0NzAwODA4Q0M4MDAyMDAwQTkzODIzMDAwMEIwMjEyMAotOjEwMzFGMDAwQUY0ODBFMTA4RjQ0MEUxMDAwMDA0ODIxQUY0NDBFMTQ0QgotOjEwMzIwMDAwOENDMjAwMjRBRjQyMEUxODhGNDMwRTE4QUY0MzBFMUMyMQotOjEwMzIxMDAwMTBFMDAxMjUyRDIzMDAwMTkzNkIwMDA4MTE2MDAwRDRGQwotOjEwMzIyMDAwMDAwMDAwMDA5NzZFMDAxMDMxQ0RGRkZGMDBFRDYwMkIxNQotOjEwMzIzMDAwMTU4MDAwQ0YwMDAwMDAwMDk3NzAwMDEwMzIwRkZGRkZENAotOjEwMzI0MDAwQUY0RjBFMDA4RjUyMDAwMDMyNTEwMDA4MTIyMEZGRkREOAotOjEwMzI1MDAwMDAwMDAwMDA5NzU0MEUwODhGNDYwRTA0MzI4NUZGRkZEMQotOjEwMzI2MDAwMzBCMzAwMDExMjYwMDEzMjAwMDAwMDAwMDAwMDAwMERDOAotOjEwMzI3MDAwMzBCOEEwNDAyNDE1MDA0MDEzMTUwMEMwMzBBOUEwMDBBQwotOjEwMzI4MDAwMTEyMDAxMkQwMDAwMDAwMDkzN0YwMDA4MTNFMDAwMDhDQQotOjEwMzI5MDAwMDAwMDAwMDA5NzYzMDAxMDMwNkJGRkZGMDBDQjQwMkI1NQotOjEwMzJBMDAwMTEwMDAwMDMzMEFDMDA0MDExODAwMTIzMDAwMDAwMDAzOQotOjEwMzJCMDAwQTc4NTAwM0NBRjg2MDAzNDkzNjYwMDA4MDBFMDI4MjExMwotOjEwMzJDMDAwQUZBNzAwMjAxNEMwMDEyNDI3QjMwMDIwQUY2MDAwMEM3QQotOjEwMzJEMDAwOTc4MjAwM0MzMDQ3NDAwMDE0RTAwMDAyMjQwMzAwMTZBRgotOjEwMzJFMDAwMjQwMzAwMEUyNDE5NDAwN0EzNjMwMDBBQUY3OTAwMTREOQotOjEwMzJGMDAwOTM4QTAwM0U4Rjc0MDAxNDMxNTgwMDA3MDAxOEFBNDBDQQotOjEwMzMwMDAwMDI5NTkwMjVBRjcyMDAxNDk3ODQwMDNDOEY3MDAwMTREMgotOjEwMzMxMDAwMzA5MTAwMTAwMjExNzgyNUFGNkYwMDE0OTc4RTAwM0M5OQotOjEwMzMyMDAwMzFDRDAwMDgxMUEwMDE0NzAwMDAyODIxOEY2NzAwMTQ0QgotOjEwMzMzMDAwM0MwMjEwMDAzQzBDODEwMDAwRTIyODI1QUY2NTAwMTQxRgotOjEwMzM0MDAwOTc0NjBFMEEyNDA4MDAwRTM0MDVGRkZDMzBDM0ZGRkYyOQotOjEwMzM1MDAwMDA2QzU4MjVBRjZCMDAwNEEzNjgwMDAyOTM3RjAwMEEzRAotOjEwMzM2MDAwMjdFOTAwMDRBMzY5MDAwQTk3ODYwMDNDOTM2MzAwMEFEQQotOjEwMzM3MDAwMzBDQzFGMDAwMDBDNTk4MzAxNjM0MDIxMjUxRjAwMjgxOQotOjEwMzM4MDAwQTM3RjAwMDk5NzQ5MEUwQ0E3NjkwMDEwOTM3OTAwMDlFMwotOjEwMzM5MDAwMjcyQTAwMDIzMTU4MDAwNzAwMThBODIzMzJCMTAwMDc3RAotOjEwMzNBMDAwQTM3MTAwMEI5Mzc0MDAwOTk3NjQwMDEwOEY5MTAwMzQ4RgotOjEwMzNCMDAwOTc4RjAwM0MzMjkyMDBGRjAyNDQ4MDIxMDIwNTcwMjE2OQotOjEwMzNDMDAwMzFFRDAwNDAxMUEwMDAwNTMxQzRGRkZGMDA5MTI4MkIxMgotOjEwMzNEMDAwM0MxMjgwMDAxMEEwMDAxNDAwMDBBMDIxMDIyNDM4MkIxMQotOjEwMzNFMDAwMTRFMDAxMUI4RkE1MDAyMDhGNEQwRTE0QUY0RDBFMTA2MQotOjEwMzNGMDAwOEY0MjBFMUNBRjQyMEUxOEFGNDQwRTAwOEY0RjAwMDBEQwotOjEwMzQwMDAwMzFFRTAwMDgxMUMwRkZGRDAwMDAwMDAwOTc1NDBFMDhDNwotOjEwMzQxMDAwMDA4MDg4MjEwMDAwOTAyMUE3OTQwMDNDOEY1MDBFMDQ2QQotOjEwMzQyMDAwMjQxNDAwMDFBRjkwMDAzNDk3NjQwMDEwMzA5NUZGRkYyMgotOjEwMzQzMDAwOEU2ODAwMDAwMTExRjgyMzE3RTAwMDA5QUU3RjAwMDAzQwotOjEwMzQ0MDAwOEY2NTAwMTQ4RjhCMDA0NDM0QTYwMDQwQUY2NjAwMTREMwotOjEwMzQ1MDAwOEY0QzBFMTBBRDZDMDAyMDhGNDMwRTE4QUQ2MzAwMjQwRQotOjEwMzQ2MDAwOTM2NzAwMDgxNEUwMDBEMjAwMDAwMDAwMEUwMDAwOUVFOAotOjEwMzQ3MDAwMjQwNDAwMTA4Rjg5MDA0ODNDMDgzMjAwMDA0MDI4MjFCNQotOjEwMzQ4MDAwMzEyNjAwRkYwMDA2RkMwMDAzRTg1MDI1MjUzOTAwMDEyNQotOjEwMzQ5MDAwQUY5OTAwNDhBQzRBMDAwMDkzNzgwMDA5OTM3MDAwMEE4NQotOjEwMzRBMDAwMzMwNDAwRkYwMDA0NzQwMDMyMEYwMEZGMDFDRjY4MjVEMQotOjEwMzRCMDAwQUM0RDAwMDQ4RjgyMDA0ODA2NDAwMEVBQUNBMjAwMDgzMAotOjEwMzRDMDAwQUNBMDAwMEM5NzgzMDAzQzMwNkIwMDA4MTU2MDAwMDIzNAotOjEwMzREMDAwMjYyODAwMDYyNjI4MDAwMjk3NEUwRTE0OEY0NTBFMUM0MwotOjEwMzRFMDAwOEY2NzAwMDQ5MzZEMDAwMjMxQzRGRkZGMzFBMjAwRkYxQgotOjEwMzRGMDAwQUZBMjAwMTA4RjZDMDAxNEFGQTgwMDE4MEUwMDAwOEI1NAotOjEwMzUwMDAwQUZBQzAwMTQyNDA0MDAxMDBFMDAwMEM3MDAwMDAwMDAzRgotOjEwMzUxMDAwOEU3MjAwMDAxNjQwMDAwNTAwMDAwMDAwOEY2NDAwMTQ0OQotOjEwMzUyMDAwMjQwNUZGQkYwMDg1OTgyNEFGNzMwMDE0OEY3OTAwMEMyOQotOjEwMzUzMDAwMDMzNTM4MjFBRjY3MDAwQzkzNzUwMDA4MTZBMDAwMDgwQQotOjEwMzU0MDAwMDAwMDAwMDAxMjgwMDAwNjAwMDAwMDAwOEY3RjAwMTRDMQotOjEwMzU1MDAwM0MwQkVGRkYzNTY4RkZGRTAzRTg0ODI0QUY2OTAwMTQxOQotOjEwMzU2MDAwQTM3NDAwMDg4RkE1MDAyMDBBMDAwMjQ2MDIyMDIwMjEzMwotOjEwMzU3MDAwQUY0NzBFMDAwQTAwMDBGNTAwMDAwMDAwOEY1OTAxNzhFNwotOjEwMzU4MDAwMDcyMEZGRkUyNDFGMDgwMDhGODQwMDAwQUY1RjAxNzgzMgotOjEwMzU5MDAwOTc0QjAwOEEzMTZBRkZGRjAxNDQ0ODIzMjUyOEZGRkYyQgotOjEwMzVBMDAwMzEwMjFGRkYyQzQzMDAwODE0NjBGRkY5MDAwMDAwMDBFNwotOjEwMzVCMDAwOEY4RTAwNDg4RjhEMDAzODAwQzA0ODIxMDM0NDIwMjFBMQotOjEwMzVDMDAwMjVDNjAwMDEyNDBDMEYwMEFGODYwMDQ4MDBFOTM4MjMwRgotOjEwMzVEMDAwMjQ4NjQwMDAzMUNBMDBGRjExQUMwMDA1MjQwODAwMDExOAotOjEwMzVFMDAwOTM5MTAwM0UzMjMwMDAwNzAwMTA3QTQwMzVFODAwMDEyOAotOjEwMzVGMDAwMDAwQUFDMDAzQzE4MDEwMDAyQjhBMDI1QUM5NDQwMDBDMQotOjEwMzYwMDAwOEY5MzAwNDgzMEIyMDAzNjMwQTQwMDA4QUNEMzAwMDREOQotOjEwMzYxMDAwMTA4MDAwOTcwMTEyMzAyNTk3NEUwRTBBOEY4RDAwMDAwMgotOjEwMzYyMDAwM0MwMjgxMDAzMUNDRkZGRjI1QUIwMDA4MDE4MjQwMjUyMAotOjEwMzYzMDAwM0MwMzEwMDAzMTY1MUZGRjI1MzkwMDA2MjQxRjAwMEVEMgotOjEwMzY0MDAwQUY0ODAxNjAwMEMzMzAyNUE3NUYwMTVBQUY4NTAwMDA3NQotOjEwMzY1MDAwQTc1OTAxNTgxNEUwMDAwQThGOTMwMDM4MjQxMjBGMDA3NAotOjEwMzY2MDAwNTI3MjAwMDIyNDE2MDAwMTM0QzYwMDQwOEY1ODBFMTAxQQotOjEwMzY3MDAwOEY5NDAwNDRBRTk4MDAyMDhGNTUwRTE4QUU5NTAwMjQwQwotOjEwMzY4MDAwOEY0NTBFMTRBRjQ1MDE0NDhGNTkwRTFDQUY1OTAxNDhBOAotOjEwMzY5MDAwQTM0QTAxNTIzQzBBMTAwMEFGNDYwMTU0QUY0QTAxNzhEOAotOjEwMzZBMDAwMTRFMEZFREQyRDIzMDAwMTAwNzZBMDI1MTI4MDAwMTcxNgotOjEwMzZCMDAwOEZCRjAwNDQ4Rjg0MDAzODI0MTYwRjAwMTA5NjAwODRCQQotOjEwMzZDMDAwMDAwMDAwMDA4RjQ1MDE3ODA0QTBGRkZFMjQxNTBGMDBDNAotOjEwMzZEMDAwMTA5NTAwNkUwMDAwMDAwMDhGNDcwRTE0MjQwMjAyNDA3NwotOjEwMzZFMDAwM0MxRjEwMDBBRjQ3MDE0NDhGNDQwRTFDQUY0NDAxNDhGQgotOjEwMzZGMDAwQTM0MDAxNTJBNzQwMDE1QUFGNDAwMTYwQTc0MDAxNThDMgotOjEwMzcwMDAwQUY0MjAxNTRBRjVGMDE3ODhGQkYwMDQ0OEZCNjAwNDBENQotOjEwMzcxMDAwOEZCNTAwM0M4RkI0MDAzODhGQjMwMDM0OEZCMjAwMzBDNwotOjEwMzcyMDAwOEZCMTAwMkM4RkIwMDAyODAzRTAwMDA4MjdCRDAwNDhBRgotOjEwMzczMDAwMTRDMEZFRDAzMEI4QTA0MDhGNDIwRTE0OEY4NDAwNDRENQotOjEwMzc0MDAwMDAwMDQ4MjFBQzgyMDAyMDhGNTEwRTFDQUM5MTAwMjQ1NwotOjEwMzc1MDAwMEEwMDAyMEUyRDIzMDAwMThGOTEwMDM0OTc4QTAwM0M0RAotOjEwMzc2MDAwM0MxMjgwMDAwMjIwQTgyMTMxNTgwMDQwMTcwMEZGMzA5MQotOjEwMzc3MDAwMDAwMEEwMjE5NzY5MDAxMDhGOTIwMDM0MzEzOUZGRkZCQgotOjEwMzc4MDAwMTMzMjAwMzUwMDAwMjAyMTAwODA0ODIxMTQ4MEZFQTA2MwotOjEwMzc5MDAwMDBBMDM4MjE4RjQyMEUxNDhGODQwMDQ0QUM4MjAwMjA5OAotOjEwMzdBMDAwOEY1MTBFMUNBQzkxMDAyNDBBMDAwMjBFMkQyMzAwMDE0MwotOjEwMzdCMDAwOTM2QTAwMDk5Mzc4MDAwQjMxNTAwMEZGMzMwRjAwRkYyQwotOjEwMzdDMDAwMDIwRjcwMjEyNUMyMDAwQTMwNTBGRkZGMEUwMDAwOUUzQwotOjEwMzdEMDAwMDIwMDIwMjE4Rjg2MDA0ODNDMUY0MTAwMjRDRDAwMDFCQgotOjEwMzdFMDAwQUY4RDAwNDg5MzZDMDAwOTMwQzYwMEZGMDAwNjQ0MDAwRQotOjEwMzdGMDAwMzE4MzAwRkYyNDZCMDAwMjAxMEI0ODI1MDEzRkM4MjVERgotOjEwMzgwMDAwQUM1OTAwMDA4RjY3MDAwQzk3NDQwRTE0MDBGMjI4MjU3NQotOjEwMzgxMDAwQUM0NTAwMDQ4RjQ1MEUxQzhGNjcwMDA0OTM2QTAwMDJCQwotOjEwMzgyMDAwMzA4NEZGRkYzMTU4MDBGRkFGQjgwMDEwOEY2RjAwMTRENQotOjEwMzgzMDAwQUZCMTAwMTgwRTAwMDA4QkFGQUYwMDE0MEEwMDAxQTY1NAotOjEwMzg0MDAwMDIwMDIwMjFBRjYwMDAwNDBBMDAwMTNFQTM2MDAwMDJENAotOjEwMzg1MDAwMEEwMDAyNDYwMDAwMjAyMTAwMDA5MDIxMEEwMDAxNzBBOQotOjEwMzg2MDAwMjQxNDAwMDEzQzEyODAwMDBBMDAwMTk1QUNCMjAwMEM0NwotOjEwMzg3MDAwOEY5MTAwMDAyNTI0MDAwMkE3NDQwMTU4MjYzMDAwMDgzQgotOjEwMzg4MDAwMzIwRjFGRkYwQTAwMDFGOUFGOEYwMDAwQUY0MDAxNEM1QgotOjEwMzg5MDAwMTEyMDAwMkMwMDAwMDAwMDhGNTkwRTEwQUY1OTAxNDQ3OAotOjEwMzhBMDAwOEY0MzBFMTgyNDAyMDA0MDNDMUYxMDAwQUY0MzAxNDgxNAotOjEwMzhCMDAwQTM0MDAxNTJBNzQwMDE1QUFGNDAwMTYwQTc0MDAxNTgwMAotOjEwMzhDMDAwQUY0MjAxNTRBRjVGMDE3ODBBMDAwMjI3OEZCRjAwNDQ2NgotOjEwMzhEMDAwMTEyMDAwMDYwMDAwMDAwMDk3NDYwRTA4MzBDQzAwNDA4MgotOjEwMzhFMDAwMTU4MDAwMDIwMDAwMDAwMDAwMDAwMDBEOEY0RDAxNzhERgotOjEwMzhGMDAwMDVBMEZGRkUwMDAwMDAwMDk3NTMwRTEwM0MxMjA1MDBDQgotOjEwMzkwMDAwMjQwRTIwMDAzMjZBRkZGRjAxNTJDMDI1QUY1ODAxNEMzRgotOjEwMzkxMDAwOEY0RjBFMTQzQzAyMTAwMEFGNEYwMTQ0OEY1MDBFMUMwRAotOjEwMzkyMDAwQUY1MDAxNDhBMzQwMDE1MjhGODQwMDM4QTc0MDAxNUE4QwotOjEwMzkzMDAwQUY0MDAxNjBBNzQwMDE1OEFGNEUwMTU0MEEwMDAyMTU4NAotOjEwMzk0MDAwQUY0MjAxNzg4RjQ5MEUxNEFGNDkwMTQ0OEY0MzBFMUNEQQotOjEwMzk1MDAwMEEwMDAyOEUyNDAyMDA0MDNDMEUyMEZGMjdCREZGRTAzQgotOjEwMzk2MDAwM0MxQTgwMDAzQzBGODAwODM1Q0RGRkZEQUZCRjAwMUMyNgotOjEwMzk3MDAwQUZCMjAwMThBRkIxMDAxNEFGQjAwMDEwQUY4RjAwNDA2RAotOjEwMzk4MDAwQUY0RDBFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRAotOjEwMzk5MDAwMDAwMDAwMDAwMDAwMDAwMDNDMEMwMEZGMzU4QkZGRkQyNAotOjEwMzlBMDAwQUY0QjBFMDAzQzA2NjAwNDhDQzk1MDAwMjQwQUZGN0YxOAotOjEwMzlCMDAwM0MxMTYwMDAwMTJBNDAyNDM1MDczODBDQUNDNzUwMDA4OAotOjEwMzlDMDAwOEUyNDA0MzgyNDA1MDAwOUFGNDUwMDA4MzA4M0ZGRkYyQQotOjEwMzlEMDAwMzg2MjJGNzEyNDUwQzBCM0FGODAwMDQ4MEUwMDAwNjhEOQotOjEwMzlFMDAwQUY4MDAwMDA1MjAwMDAwMUFFMjA0NDJDMEUwMDA0MzVEMAotOjEwMzlGMDAwM0MxMTgwMDAwRTAwMEVEOTM2MzAwMDcwOEY4QTAwNDBENgotOjEwM0EwMDAwM0MxMjA4MDAyNjUyM0M4ODAyMDA4ODIxOEUwODAwMDBFMwotOjEwM0ExMDAwOEY1RjAwMDAzQkY5MDAwMTMzMzgwMDAxMTMwMDAwMTdFRAotOjEwM0EyMDAwQUY4ODAwMzAwMjIwNDgyMThEMjcwMDAwM0MwRjA4MDA5RAotOjEwM0EzMDAwOERFRjAwNkMzQzBDMDgwMDhEOEMwMDY4MDBFOEMwMjMwMgotOjEwM0E0MDAwMDFGODI4MjEwMDAwNjgyMTAwQjgzMDJCMDE4RDU4MjE5MQotOjEwM0E1MDAwMDE2NjQwMjEzQzAxMDgwMEFDMjUwMDZDM0MwMTA4MDBENwotOjEwM0E2MDAwQUMyODAwNjg4RjQ0MDAwMDM4ODMwMDAxMzA2MjAwMDFGOAotOjEwM0E3MDAwMTQ0MEZGRUQwMEUwNDAyMUFGODcwMDMwOEUwQzAwMDBDNQotOjEwM0E4MDAwM0MwNTA4MDA4Q0E1MDA2QzNDMDQwODAwOEM4NDAwNjg5MAotOjEwM0E5MDAwMDE4ODMwMjMwMEE2MzgyMTAwMDAxMDIxMDBFNjQwMkJDOQotOjEwM0FBMDAwMDA4MjE4MjEwMDY4RjgyMTNDMDEwODAwQUMyNzAwNkM1NgotOjEwM0FCMDAwM0MwMTA4MDBBQzNGMDA2ODhGNDkwMTAwMjU1OTAwODg4RgotOjEwM0FDMDAwQUY5OTAwNDRBRjg5MDAzOEFGNDkwMDIwOEUwNzAwMDA0RAotOjEwM0FEMDAwQUY4NzAwMzA4RjREMDE3ODA1QTBGRkZFMDAwMDAwMDA4OQotOjEwM0FFMDAwOEUwNjAwMDAzQzBCMDgwMDhENkIwMDc0M0MwNDA4MDAzRgotOjEwM0FGMDAwOEM4NDAwNzAwMEM3MjgyMzAxNjVGODIxMDAwMDEwMjE4NAotOjEwM0IwMDAwMDNFNTQwMkIwMDgyMzgyMTAwRThDODIxMjQwOTA4MDA4MQotOjEwM0IxMDAwM0MwMTA4MDBBQzNGMDA3NDNDMDEwODAwQUMzOTAwNzA2NwotOjEwM0IyMDAwQUY0OTAxNzg5MzU4MDEwOEEzOTgwMDNFOTM4RjAwM0U1NwotOjEwM0IzMDAwMzFFRTAwMDExNUMwMDAxNThGODMwMDM4MjQwRTBEMDBGMgotOjEwM0I0MDAwMTA2RTAwMTkyNDBGMEYwMDEwNkYwMDFEMDAwMDAwMDAwMAotOjEwM0I1MDAwOTE1OTAwMDAyNDE4MDA1MDMzMjkwMEZGMTEzODAwMDQ0NwotOjEwM0I2MDAwM0MxRjQwMDBBRjVGMDEzODBBMDAwMkU3MDAwMDAwMDA4MAotOjEwM0I3MDAwMEUwMDA5MEUwMDAwMDAwMDhGOEEwMDQwM0MxRjQwMDAyQwotOjEwM0I4MDAwQUY1RjAxMzgwQTAwMDJFNzAwMDAwMDAwOTM4RDAwM0U5RAotOjEwM0I5MDAwMzFBQzAwMDYwMDBDNTEwMDBFMDAwMENFMDE1MkQ4MjFCRAotOjEwM0JBMDAwMEEwMDAzNDM4RjhBMDA0MDNDMUIwODAwMjc3QjNEMDgyNgotOjEwM0JCMDAwMEUwMDAwQ0UwMDAwMDAwMDBBMDAwMzQzOEY4QTAwNDA4MAotOjEwM0JDMDAwM0MxQjA4MDAyNzdCM0QyODBFMDAwMENFMDAwMDAwMDBCMwotOjEwM0JEMDAwMEEwMDAzNDM4RjhBMDA0MDkwQUEwMDAxOEZBQjAwMTBCNwotOjEwM0JFMDAwOENBQzAwMTAzQzAzMDBGRjhENjgwMDA0QUQ2QzAwMjAxRAotOjEwM0JGMDAwOENBRDAwMTQwMEUwNjAyMTM0NjJGRkZGQUQ2RDAwMjQ0NQotOjEwM0MwMDAwOENBNzAwMTgzQzA5RkYwMDAxMDlDMDI0QUQ2NzAwMjhGQgotOjEwM0MxMDAwOENBRTAwMUMwMTgyQzgyNDAzMTk3ODI1QUQ2RjAwMDQwNgotOjEwM0MyMDAwQUQ2RTAwMkM4Q0FEMDAwODMxNEEwMEZGQUQ2RDAwMUM1QwotOjEwM0MzMDAwOTRBOTAwMDIzMTI4RkZGRkFENjgwMDEwOTBBNzAwMDA5MgotOjEwM0M0MDAwQTU2MDAwMDJBMTYwMDAwNEExNjcwMDAwOTBBMzAwMDIyQgotOjEwM0M1MDAwMzA2MjAwRkYwMDAyMTk4MjEwNjAwMDA1MjQwNTAwMDE5NwotOjEwM0M2MDAwMTA2NTAwMEUwMDAwMDAwMDAzRTAwMDA4QTE2QTAwMDFEQQotOjEwM0M3MDAwOENEODAwMjgzNTRBMDA4MEFENzgwMDE4OENDRjAwMTQwRAotOjEwM0M4MDAwQUQ2RjAwMTQ4Q0NFMDAzMEFENkUwMDA4OENDNDAwMkNEQgotOjEwM0M5MDAwQTE2QTAwMDEwM0UwMDAwOEFENjQwMDBDOENDRDAwMUM5QgotOjEwM0NBMDAwQUQ2RDAwMTg4Q0M5MDAxNEFENjkwMDE0OENDODAwMjRENwotOjEwM0NCMDAwQUQ2ODAwMDg4Q0M3MDAyMEFENjcwMDBDOENDMjAwMTRGMgotOjEwM0NDMDAwOEM4MzAwNjQwMDQzQzgyQjEzMjAwMDA3MDAwMDAwMDAxMQotOjEwM0NEMDAwOENDMjAwMTQxNDRDRkZFNDAwMDAwMDAwMzU0QTAwODA0MAotOjEwM0NFMDAwMDNFMDAwMDhBMTZBMDAwMThDODIwMDY0MEEwMDAzOTlDNQotOjEwM0NGMDAwMDAwMDAwMDA5MEFBMDAwMDI3QkRGRkY4OEZBOTAwMUM1QgotOjEwM0QwMDAwQTNBQTAwMDA4RkFFMDAwMDNDMEZGRjgwOEZBODAwMTgxMAotOjEwM0QxMDAwMzVFMkZGRkY4Q0NEMDAyQzAxQzI2MDI0QUZBQzAwMDA2NwotOjEwM0QyMDAwQTEyMDAwMDQwMEUwNjAyMUE3QTAwMDAyOEZCODAwMDBERAotOjEwM0QzMDAwOEQyNzAwMDQwMTg4MTgyMTAwQTA1ODIxMDBDMDUwMjFCRgotOjEwM0Q0MDAwMDA2RDI4MjYzQzA2RkY3RjNDMEYwMEZGMkNBRDAwMDFENAotOjEwM0Q1MDAwMzVFRUZGRkYzNEQ5RkZGRjNDMDJGRjAwMDMxOTMwMjQ4QQotOjEwM0Q2MDAwMDAwRDFEQzAwMTBFQzgyNDAwRTJDMDI0MDBDMzcwMjU1MAotOjEwM0Q3MDAwMDMxOTc4MjVBRDJFMDAwMEFEMkYwMDA0OEQ0NTAwMjREOQotOjEwM0Q4MDAwQUZBRTAwMDBBRDI1MDAwODhENEQwMDIwMjQwNUZGRkZEQgotOjEwM0Q5MDAwQUQyRDAwMEM5NTY4MDAwMjMxMDdGRkZGQUQyNzAwMTAyNAotOjEwM0RBMDAwOTE2NjAwMTgzMEMyMDBGRjAwMDIxOUMyNTA2MDAwMDE4NQotOjEwM0RCMDAwOEQ0NTAwMzRBRDI1MDAxNDhENjcwMDA4MjdCRDAwMDgyRgotOjEwM0RDMDAwQUQyNzAwMUM4QzhCMDBDQ0FEMkMwMDI4QUQyMDAwMkMyNgotOjEwM0REMDAwQUQyQjAwMjRBRDIwMDAxODAzRTAwMDA4QUQyMDAwMjAyQQotOjEwM0RFMDAwMjdCREZGRTBBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTBCNAotOjEwM0RGMDAwQUZCRjAwMUM5MDk4MDAwMDAwQzA4ODIxM0MwRDAwRkY2MAotOjEwM0UwMDAwMzMwRjAwN0ZBMENGMDAwMDkwOEUwMDAxMzVBQ0ZGRkY4NAotOjEwM0UxMDAwM0MwQUZGMDBBMENFMDAwMTk0QTYwMDFFQTIyMDAwMDREMAotOjEwM0UyMDAwOENBQjAwMTQ4RTI5MDAwNDAwQTA4MDIxMDE2QzI4MjQ5MgotOjEwM0UzMDAwMDEyQTQwMjQwMDgwOTAyMTAxMDUyMDI1QTYyNjAwMDJBOQotOjEwM0U0MDAwQUUyNDAwMDQyNjA1MDAyMDI2MjQwMDA4MEUwMDAwNzY3QgotOjEwM0U1MDAwMjQwNjAwMDI5MjQ3MDAwMDI2MDUwMDI4MjYyNDAwMTRBQwotOjEwM0U2MDAwMDAwNzFFMDAwMDAzMTYwMzI0MDYwMDA0MDQ0MDAwMDM5QwotOjEwM0U3MDAwMjQwM0ZGRkY5NjU5MDAwMjMzMjNGRkZGMEUwMDAwNzY1NAotOjEwM0U4MDAwQUUyMzAwMTAyNjI0MDAyNDhGQkYwMDFDOEZCMjAwMTgyMAotOjEwM0U5MDAwOEZCMTAwMTQ4RkIwMDAxMDI0MDUwMDAzMDAwMDMwMjEwMgotOjEwM0VBMDAwMEEwMDAwODAyN0JEMDAyMDI3QkRGRkQ4QUZCMTAwMUM0RAotOjEwM0VCMDAwQUZCMDAwMThBRkJGMDAyMDkwQTgwMDAwMjQwMjAwMDE5RQotOjEwM0VDMDAwOEZCMDAwM0MzMTAzMDAzRjAwODA4ODIxMTA2MjAwMTQ1NQotOjEwM0VEMDAwOEZBQTAwMzgyNDBCMDAwNTUwNkIwMDE2QUZBQTAwMTAwMwotOjEwM0VFMDAwMDBBMDIwMjEwMEMwMjgyMTBFMDAwM0RDMDIwMDMwMjFBOAotOjEwM0VGMDAwOTIyNDAwQkMzMDgzMDAwMjEwNjAwMDAzMjYwNjAwMzBDQwotOjEwM0YwMDAwQUNDMDAwMDAyNEM2MDAwNDhGQkYwMDIwOEZCMTAwMUM4RAotOjEwM0YxMDAwOEZCMDAwMTgwMEMwMTAyMTAzRTAwMDA4MjdCRDAwMjg2MgotOjEwM0YyMDAwMDE0MDM4MjEwRTAwMDM1QUFGQjAwMDEwMEEwMDA0MjBFRgotOjEwM0YzMDAwMDAwMDAwMDAwRTAwMDNBMUFGQjAwMDE0MEEwMDA0MjAyRQotOjEwM0Y0MDAwMDAwMDAwMDAzQzAyMDAwQTAzNDIxODIxM0MwNDA4MDA2MwotOjEwM0Y1MDAwMjQ4NDNENkMyNDA1MDAxQTAwMDAzMDIxMEEwMDAwODBGMgotOjEwM0Y2MDAwQUY4MzAwNTQzQzAzODAwMDM0NjIwMDcwOEM0ODAwMDAzMgotOjEwM0Y3MDAwMDBBMDU4MjEwMEMwNDgyMTMwOEEwMEZGQUY4ODAwMzBERgotOjEwM0Y4MDAwOEY0NDAxNzgwNDgwRkZGRTNDMEM4MDAwMzU4NjAwNzA3MQotOjEwM0Y5MDAwOENDNTAwMDAzQzAzMDgwMDhDNjMwMDc0M0MxODA4MDBDQQotOjEwM0ZBMDAwOEYxODAwNzAwMEE4MjAyMzAwNjQ2ODIxMDAwMEM4MjEzOQotOjEwM0ZCMDAwMDFBNDc4MkIwMzE5NzAyMTAxQ0Y2MDIxM0MwMTA4MDA3NgotOjEwM0ZDMDAwQUMyRDAwNzQzQzAxMDgwMEFDMkMwMDcwOEY0ODBFMTQxRQotOjEwM0ZEMDAwQUY0ODAxNDRBRjQ3MDE0Q0EzNEEwMTUyQTc0QjAxNThENwotOjEwM0ZFMDAwOTM0NjAxMDgzMEM1MDAwODU0QTAwMDAxMzUyOTEwMDA4RgotOjEwM0ZGMDAwOTM0QjA5MDAyNDA3MDA1MDMxNkEwMEZGMTE0NzAwMDc2NgotOjEwNDAwMDAwMDAwMDAwMDA4RjQ1MEUxQ0FGNDUwMTQ4QUY0OTAxNTQyOAotOjEwNDAxMDAwM0MwOTEwMDAwM0UwMDAwOEFGNDkwMTc4OTM0RDAxMDgwNgotOjEwNDAyMDAwMzFBODAwMDgxMTAwMDAxMDAwMDAwMDAwOTM0RjAxMDhBMwotOjEwNDAzMDAwMzFFRTAwMTA1MUMwMDAwMTM1MjkwMDA4M0MwNDA4MDA5MQotOjEwNDA0MDAwOTA4NDNERDBBMzQ0MDE1MDhGNDMwOUE0QUY0MzAxNDg1RAotOjEwNDA1MDAwOEY0MjA5QTBBRjQyMDE0NEFGNDkwMTU0M0MwOTEwMDAwRQotOjEwNDA2MDAwMDNFMDAwMDhBRjQ5MDE3ODNDMTkwODAwOEYzOTNEOEMwNgotOjEwNDA3MDAwMzMzODAwMDg1NzAwRkZGMTM1MjkwMDA4MEEwMDA0NzM5RgotOjEwNDA4MDAwMDAwMDAwMDAyNDA3MDA0MEFGNDcwODE0QUY0MDA4MTBBQwotOjEwNDA5MDAwOEY0MjA5NDQ4RjQzMDk1MDhGNDQwOTU0OEY0NTA5NUM2RQotOjEwNDBBMDAwOEY0NjA5NENBRjgyMDA2NEFGODMwMDUwQUY4NDAwNEM1MAotOjEwNDBCMDAwQUY4NTAwNUMwM0UwMDAwOEFGODYwMDYwOTM0NjAxMDkwRAotOjEwNDBDMDAwMzBDNTAwN0YwMDA1MThDMDAwMDUyMTQwMDA4MzEwMjE4NQotOjEwNDBEMDAwMDNFMDAwMDgyNDQyMDA4ODNDMDkwODAwOTEyOTNEOTEzMgotOjEwNDBFMDAwMjRBODAwMDIzQzA1MTEwMDAwMDkzQzAwMDBFODMwMjUyRQotOjEwNDBGMDAwMDBDNTE4MjUyNDgyMDAwOEFDODMwMDAwMDNFMDAwMDhGNgotOjEwNDEwMDAwQUM4MDAwMDQ5MzQ3MDEwQjhGNEEwMDJDOTc0RjA5MDg5RAotOjEwNDExMDAwM0MxODAwMEUwMzU4NDgyMTMxRUVGRkZGMDAwRTQxQzA0RAotOjEwNDEyMDAwQUY0ODAwMkM5NzQzMDkwODk1MkMwMDFBMDA4MDQwMjFDNQotOjEwNDEzMDAwMjQwMzAwMDEzMThCRkZGRkFDOEIwMDAwOEQyRDAwMUM5MAotOjEwNDE0MDAwMDBBMDU4MjEwMEMwNjAyMUFDOEQwMDA0OEQyNDAwMjAwNwotOjEwNDE1MDAwMzBFNzAwNDBBRDA0MDAwODkxMjIwMDE5MzA0NDAwMDMwQwotOjEwNDE2MDAwMTA4MzAwNDgyODg1MDAwMjE0QTAwMDYyMjQwNjAwMDI4MwotOjEwNDE3MDAwMTA4NjAwNTYyNDE5MDAwMzEwOTkwMDY2MDAwMDAwMDAwNAotOjEwNDE4MDAwMTBFMDAwM0EwMDAwMDAwMDNDMDcwODAwOTRFNzNEODY3QwotOjEwNDE5MDAwMjRFMjAwMDE5MzRGMDkzNDkzNDcwOTIxOTUyNTAwMkExMQotOjEwNDFBMDAwMzFFRTAwRkYwMDBFNDg4MjMwRUQwMEZGOTc4NzAwNTg4NwotOjEwNDFCMDAwMDAwOTM2MDAwMDBEMUMwMDMwNDRGRkZGMDBDMzEwMjUyRAotOjEwNDFDMDAwMDA0NEMwMjUwMEE3NzgyMTNDMTk0MDAwMDMxOTcwMjU0MAotOjEwNDFEMDAwMDAwRjRDMDBBRDA5MDAwNEFEMEUwMDAwOTM0RDA5MjAwNgotOjEwNDFFMDAwM0MwMzAwMDYyNTA5MDAxNDAwMEQzNjAwMDBDMzIwMjVGRAotOjEwNDFGMDAwQUQwNDAwMDg4RjU5MDkyQzI0RTUwMDAxMzBBMjdGRkY4RgotOjEwNDIwMDAwQUQxOTAwMEM4RjU4MDkzMEE3ODIwMDU4MjUwMjAwMjhFQwotOjEwNDIxMDAwQUQxODAwMTA4RjRGMDkzOEFEMEYwMDE0QUQyQjAwMDRGRQotOjEwNDIyMDAwOEY0RTA5NDBBRDJFMDAwODkzNEQwOTM3M0MwNTA4MDAxQwotOjEwNDIzMDAwOTBBNTNEOTA4RjQ0MDk0ODhGNDYwOTQwMzFBNzAwRkY2MwotOjEwNDI0MDAwMDBFQzE4MjEwMDg2NzgyMzAwMDNDNzAwMDAwNUNDMDA4RAotOjEwNDI1MDAwMDMxOTYwMjUzMUU4RkZGQzAxODg1ODI1QUQyQjAwMENCRgotOjEwNDI2MDAwQUQyMDAwMTAwM0UwMDAwOEFGNEEwMDJDM0MwRDA4MDAxMAotOjEwNDI3MDAwOTVBRDNEODYzQzBFMDgwMDk1Q0UzRDgwMEEwMDA0QzlGMAotOjEwNDI4MDAwMDFBRTEwMjEzQzA1MDgwMDk0QTUzRDhBM0MwNjA4MDBCQgotOjEwNDI5MDAwOTRDNjNEODAzQzE4MDgwMDk3MTgzRDdDOTUyRTAwMjQ1QwotOjEwNDJBMDAwMDBBNjc4MjEwMUY4NjgyMzAwMEUyNDAwMjVBMkZGRjI2MQotOjEwNDJCMDAwMDA4MjE4MjUyNDE5MDgwMEFEMDMwMDBDQUQxOTAwMTQ2NAotOjEwNDJDMDAwQUQwMDAwMTAwQTAwMDRDNDI1MDgwMDE4OTUyNjAwMjQzQgotOjEwNDJEMDAwOTUyNTAwMjgwMDA2QzQwMDAwMDU3QzAwMzcwRTgxMDBFQgotOjEwNDJFMDAwMzVFRDA4MDBBRDBFMDAwQ0FEMEQwMDEwMEEwMDA0QzQ0MQotOjEwNDJGMDAwMjUwODAwMTQxNDgwRkZBMjAwMDAwMDAwOTUyNDAwMjQ2QgotOjEwNDMwMDAwMDAwNDE0MDAzNDQzMDgwMEFEMDMwMDBDMEEwMDA0QzQ4OAotOjEwNDMxMDAwMjUwODAwMTAzQzAzMDgwMDk0NjMzRDhBM0MwNTA4MDAxMgotOjEwNDMyMDAwOTRBNTNEODAzQzA2MDgwMDk0QzYzRDdDOTUzOTAwMjQ0OAotOjEwNDMzMDAwOTUzODAwMjgwMDY1MjAyMTAwODY3ODIzMDAxOTZDMDAzQwotOjEwNDM0MDAwMDAxODc0MDAyNUUyRkZFRTAxQzIyMDI1MzVBMzgxMDA4QwotOjEwNDM1MDAwMjQxOTA4MDBBRDAzMDAwQ0FEMDQwMDEwQUQxOTAwMThCRAotOjEwNDM2MDAwQUQwMDAwMTQwQTAwMDRDNDI1MDgwMDFDMDNFMDAwMDg4NgotOjEwNDM3MDAwMjQwMjAxRjQyN0JERkZFOEFGQjAwMDEwQUZCRjAwMTQ2NgotOjEwNDM4MDAwMEUwMDAwNjAwMDgwODAyMTI0MDUwMDQwQUY0NTA4MTQyNQotOjEwNDM5MDAwOEY4MzAwNTA4Rjg0MDA0QzhGODUwMDVDMDA3MDE4MjE0MwotOjEwNDNBMDAwMDA2NDEwMjMxODQwMDAwNEFGODMwMDUwQUY2MzAwNTQzMgotOjEwNDNCMDAwOEY2NjAwNTRBRjg2MDA0QzEyMDAwMDBDMDAwMDAwMDAxNQotOjEwNDNDMDAwOEY0NDAwNzQ5MzY4MDA4MTM0MDlGQTAwMkQwNzAwMDdCOAotOjEwNDNEMDAwMTBFMDAwMDUwMDg5MTAyMTkzNkMwMDgxMjQwQjAxRjQ4QQotOjEwNDNFMDAwMDE4QjUwMDQwMTQ0MTAyMUFGNjIwMDBDOEY0RTA5NUMxOAotOjEwNDNGMDAwMDFDNTY4MjMxOUEwMDAwNDhGQkYwMDE0OEY0RjA5NUMwQQotOjEwNDQwMDAwQUY4RjAwNUM4RkJGMDAxNDhGQjAwMDEwMEEwMDAwNjJGNQotOjEwNDQxMDAwMjdCRDAwMTg4Rjg0MDA2NDhGODMwMDUwOEY4MjAwNEM2QQotOjEwNDQyMDAwQUY2NDAwNDRBRjYzMDA1MDAzRTAwMDA4QUY2MjAwNTQ4MwotOjEwNDQzMDAwM0MwMzgwMDAzNDYyMDA3MDhDNDMwMDAwMjdCREZGRjgwRAotOjEwNDQ0MDAwMzA4NzAwRkYzMEE5MDBGRjMwQzgwMEZGQUY4MzAwMzA4NQotOjEwNDQ1MDAwOEY0NDAxNzgwNDgwRkZGRTNDMDI4MDAwMzQ1OTAwNzBENAotOjEwNDQ2MDAwOEYzODAwMDBBM0E3MDAwMzNDMDcwODAwOENFNzAwNzQwNgotOjEwNDQ3MDAwOEZBQzAwMDAzQzA2MDgwMDhDQzYwMDcwMDMwMzc4MjM1NAotOjEwNDQ4MDAwM0MwRTdGRkYwMEVGQzgyMTM1Q0RGRkZGMDAwMDUwMjExQgotOjEwNDQ5MDAwMDE4RDI4MjQwMENBMTgyMTAwMDg0N0MwMDMyRjIwMkJCMwotOjEwNDRBMDAwMDBBODEwMjUwMDY0QzAyMUFGQTIwMDAwM0MwMTA4MDA1NAotOjEwNDRCMDAwQUMzOTAwNzQzQzAxMDgwMEFDMzgwMDcwOTM0RjAxMEExRAotOjEwNDRDMDAwQTNBMDAwMDIzQzBFODBGRkEzQUYwMDAxOEZBQzAwMDA1MAotOjEwNDREMDAwMzEyQjAwN0YzNUNERkZGRjAxOEQ0ODI0MDAwQjU2MDBBNgotOjEwNDRFMDAwMDEyQTQwMjUyNDA3MzAwMDI0MDZGRjgwM0MwNTEwMDBFNwotOjEwNDRGMDAwMjdCRDAwMDhBRjQ4MDE0Q0FGNDcwMTU0QTc0MDAxNTgwMQotOjEwNDUwMDAwQTM0NjAxNTIwM0UwMDAwOEFGNDUwMTc4MjdCREZGRTg0QwotOjEwNDUxMDAwQUZCRjAwMTRBRkIwMDAxMDhGNjUwMDc0M0MwNjgwMDA4MAotOjEwNDUyMDAwMzA5MDAwRkYwMEE2MjAyNTBFMDAwMDYwQUY2NDAwNzRFQwotOjEwNDUzMDAwOTM2MzAwMDUzNDYyMDAwODBFMDAwMDYyQTM2MjAwMDU2OAotOjEwNDU0MDAwMDIwMDIwMjE4RkJGMDAxNDhGQjAwMDEwMjQwNTAwMDU0OQotOjEwNDU1MDAwMjQwNjAwMDEwQTAwMDU3MDI3QkQwMDE4MjdCREZGRTBGMgotOjEwNDU2MDAwM0MwMzgwMDBBRkIwMDAxMEFGQkYwMDE4QUZCMTAwMTQyMwotOjEwNDU3MDAwMzQ2MjAwNzA4QzQ3MDAwMDMwOTAwMEZGMzBBODAwRkZDQwotOjEwNDU4MDAwQUY4NzAwMzA4RjQ0MDE3ODA0ODBGRkZFM0MxODgwMDAyNAotOjEwNDU5MDAwMzcxMTAwNzA4RTJGMDAwMDNDMEQwODAwOERBRDAwNzRBNwotOjEwNDVBMDAwM0MwQTA4MDA4RDRBMDA3MDAxRTc3MDIzMDFBRTI4MjEwMwotOjEwNDVCMDAwMDAwMDU4MjEwMEFFMzAyQjAxNEI0ODIxMDEyNjM4MjE0NAotOjEwNDVDMDAwM0MwMTA4MDBBQzI1MDA3NDAwMDA4ODIxM0MwMTA4MDA3MwotOjEwNDVEMDAwQUMyNzAwNzAxMTAwMDAwRjAwMDAwMDAwOEY2MjAwNzQxMwotOjEwNDVFMDAwMjYxOUZGRkYzMjA4MDA3RjAwMDJGRTAyMzNFNTAwN0YzQwotOjEwNDVGMDAwMTUwMDAwMDYzMzIyMDBGRjI0MDdGRjgwMDIwNzIwMjY1MwotOjEwNDYwMDAwMjRBM0ZGRkYwMDgzODAyNTMyMDIwMEZGMDA0MDgwMjFBOQotOjEwNDYxMDAwMjQxMTEwMDgwRTAwMDA2MDAwMDAwMDAwOEY0OTA4MThFNwotOjEwNDYyMDAwMzEyNTAwMDQxNEEwRkZGRDMyMTgwMDdGMDAxODc4QzA2NwotOjEwNDYzMDAwMDAxODcxNDAwMUNGNjgyMTI1QUMwMDg4QUY0QzA4MThFNAotOjEwNDY0MDAwMjc0QTA5ODA4RDRCMDAyMEFGNEIwMTQ0OEQ0NjAwMjQ0MgotOjEwNDY1MDAwQUY0NjAxNDhBMzUwMDE1MDBFMDAwMDYyQTc0MDAxNTgyOAotOjEwNDY2MDAwMDIyMDEwMjE4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTBFRQotOjEwNDY3MDAwMDNFMDAwMDgyN0JEMDAyMDI3QkRGRkU4MzA4NDAwRkZDRAotOjEwNDY4MDAwQUZCRjAwMTAwRTAwMDVCQjMwQTUwMEZGOEY4MzAwNTBBOAotOjEwNDY5MDAwOEZCRjAwMTAzNDQ1MDA0MDI0MDRGRjkwM0MwMjEwMDBGRQotOjEwNDZBMDAwMjdCRDAwMThBRjQzMDE0Q0EzNDQwMTUyQUY0NTAxNTQ0QwotOjEwNDZCMDAwMDNFMDAwMDhBRjQyMDE3ODkzNDMwOTNFMzA2MjAwMDhFRQotOjEwNDZDMDAwMTA0MDAwMEQzQzA5MDEwMTM1MjgwODBBQUM4ODAwMDBBMwotOjEwNDZEMDAwOEY0NzAwNzRBQzg3MDAwNDNDMDYwODAwOTBDNjNEOTBFQwotOjEwNDZFMDAwMzBDNTAwMTA1MEEwMDAwNkFDODAwMDA4OEY2QTAwNjA0MgotOjEwNDZGMDAwQUM4QTAwMDgyNDg0MDAwQzAzRTAwMDA4MDA4MDEwMjEyQwotOjEwNDcwMDAwMEEwMDA2MjIyNDg0MDAwQzI3QkRGRkU4QUZCRjAwMTQ3NgotOjEwNDcxMDAwQUZCMDAwMTA5MzQ2MDkzRjAwQTA1MDIxMDAwNTI4ODA0QgotOjEwNDcyMDAwMDA4NTM4MjMzMEMyMDBGRjI0MDMwMDA2M0MwOTA4MDAzRQotOjEwNDczMDAwOTUyOTNEODYyNEU4RkZEODI0MDUwMDA0MTA0MzAwMzc1RQotOjEwNDc0MDAwMjQwNjAwMDI5NzUwMDkzQzNDMEYwMjA0MDAwNjM0MDA4NgotOjEwNDc1MDAwMzIwRUZGRkYwMUNGNjgyNUFDOEQwMDAwOTM0QzA5M0U1RgotOjEwNDc2MDAwMzE4QjAwMjAxMTYwMDAwODAwMDAwMDAwOTM0MzA5MzZERgotOjEwNDc3MDAwM0MwMjAxMDMzNDVGMDMwMDMwNzkwMEZGMDMzRkMwMjU5MgotOjEwNDc4MDAwMjQwNTAwMDhBQzk4MDAwNDkzNDMwOTM0OTM1OTA5MjE4NwotOjEwNDc5MDAwMDAwNUY4ODIzMDYyMDBGRjAwMDJDMDgyMzMyRjAwRkY2NAotOjEwNDdBMDAwMDAxODZFMDAwMDBGNzQwMDAxQUU2MDI1MDE4OTIwMjVGRAotOjEwNDdCMDAwM0MwOTQwMDAwMDg5ODAyNUFDRjBGRkQ4OTM0MzA5MzdCRAotOjEwNDdDMDAwOEY0RjA5NDg4RjU4MDk0MDMwNjIwMEZGMDA0QUM4MjFDNgotOjEwNDdEMDAwMDMzRjcwMjEwMUY4NjAyMzAwMEU2RjAwMDFBNjUwMjVGMQotOjEwNDdFMDAwMzE4NUZGRkMwMDFGNTg4MDAxNDU0ODI1MDE2ODM4MjFBQwotOjEwNDdGMDAwQUQwOTAwMjAwRTAwMDA2MDI0RjAwMDI4MjQwNDAwMDQwRAotOjEwNDgwMDAwMEUwMDAwNjJBMzY0MDAzRjAyMDAxMDIxOEZCRjAwMTQ1RAotOjEwNDgxMDAwOEZCMDAwMTAwM0UwMDAwODI3QkQwMDE4MEEwMDA2MzUxRAotOjEwNDgyMDAwMjQwNjAwMTIyN0JERkZEMDI0MDkwMDEwQUZCNjAwMjhDRgotOjEwNDgzMDAwQUZCNTAwMjRBRkI0MDAyMEFGQjEwMDE0QUZCMDAwMTA4QQotOjEwNDg0MDAwM0MwMTA4MDBBMDI5M0Q5MEFGQkYwMDJDQUZCMzAwMUM3NQotOjEwNDg1MDAwQUZCMjAwMTg5NzQ4MDkwODMwOTQwMEZGM0MwMjAwMEVFMAotOjEwNDg2MDAwMzEwN0ZGRkYwMDA3MzFDMEFGNDYwMDJDOTc0NDA5MDgwRAotOjEwNDg3MDAwOTM0NDAxMEIzMEI1MDBGRjAzNDI4MDIxMzA4MzAwMzBBOAotOjEwNDg4MDAwMDAwMEIwMjExMDYwMDEyNTAwMDA4ODIxMjQwQzAwMDRFNAotOjEwNDg5MDAwM0MwMTA4MDBBMDJDM0Q5MDkzNEIwOTNFMDAwQjU2MDBCNAotOjEwNDhBMDAwMDAwQTJFMDMwNEEwMDE2MDAwMDAwMDAwQUY0MDAwNDg5MQotOjEwNDhCMDAwOTM0RjAxMEIzMUVFMDAyMDExQzAwMDA2MDAwMDAwMDBGNAotOjEwNDhDMDAwOTM1ODA5M0UwMDE4OUUwMDAwMTM5NjAzMDY0MDAxODk4NAotOjEwNDhEMDAwMDAwMDAwMDA5MzQ0MDEwQjMwODMwMDQwMTA2MDAwMDM4RgotOjEwNDhFMDAwOEY5MzAwNTA4RjgyMDA1MDI0NTNGRkZGOTM0NzA5M0U1RgotOjEwNDhGMDAwMzBFNjAwMDgxNEMwMDAwMjI0MTIwMDAzMDAwMDkwMjFEQQotOjEwNDkwMDAwOTYxOTAwMkM5MzU4MDkzNDkzNEYwOTM3QTc5OTAwNThFQQotOjEwNDkxMDAwMzMwQzAwRkYzMUVFMDBGRjAyNEU2ODIxMDAwRDU4ODA3RAotOjEwNDkyMDAwMDE2QzUwMjEwMTUxNDAyMTNDMDEwODAwQTQyODNEODYyMgotOjEwNDkzMDAwOTIwNTAwMTgzMEE5MDBGRjAxMDkxODIxM0MwMTA4MDA2OAotOjEwNDk0MDAwQTQyMzNEODg5MjExMDAxODE2MjAwMDAyMDAwMDAwMDBFOAotOjEwNDk1MDAwMDAwMDAwMEQzQzAxMDgwMEE0MjMzRDhBM0MwMTA4MDAzMgotOjEwNDk2MDAwQTQyMDNEODAzQzAxMDgwMEE0MjAzRDdDOTM1RjAxMEIwNgotOjEwNDk3MDAwMzA2M0ZGRkYzM0YwMDA0MDEyMDAwMDAyMjQ2NDAwMEE5RAotOjEwNDk4MDAwMjQ2NDAwMEIzMDkxRkZGRjBFMDAwMDlFMDIyMDIwMjFDNgotOjEwNDk5MDAwOTM1ODAxMEIzQzA4MDgwMDk1MDgzRDhBMDA0MDIwMjFFRgotOjEwNDlBMDAwMDAxODU5ODIzMTY3MDAwMTBFMDAwNDlBMDEwNzI4MjE3RQotOjEwNDlCMDAwOTM0QzAxMEI4RjRCMDAyQzk3NEUwOTA4M0MwRjAwMEVCNwotOjEwNDlDMDAwMDM0RjQwMjEzMUNERkZGRjAwMEQ1MUMwQUY0QTAwMkNGNQotOjEwNDlEMDAwOTc0MzA5MDg5NTA1MDAxQTAwNDAzODIxMjQwNDAwMDE3NgotOjEwNDlFMDAwMzBBOUZGRkZBQzQ5MDAwMDhEMDYwMDFDMDA0MDQ4MjFBMwotOjEwNDlGMDAwMzE4QTAwNDBBQzQ2MDAwNDhEMDIwMDIwQUNFMjAwMDg4MQotOjEwNEEwMDAwOTEwMzAwMTkzMDYzMDAwMzEwNjQwMEVDMjg3OTAwMDI2MAotOjEwNEExMDAwMTcyMDAxMTgyNDEwMDAwMjEwNzAwMTBDMjQxRjAwMDMzRAotOjEwNEEyMDAwMTA3RjAxMUUwMDAwMDAwMDExNDAwMERFMDAwMDAwMDBBOQotOjEwNEEzMDAwM0MwOTA4MDA5NTI5M0Q4NjI1MjIwMDAxOTM1RjA5MzQzMQotOjEwNEE0MDAwOTM0RTA5MjE5NTA0MDAyQTMzRjkwMEZGMDAxOUMwODIxMgotOjEwNEE1MDAwMzFDRjAwRkY5NzhFMDA1ODAwMTg0NjAwMDAwRjZDMDAwMQotOjEwNEE2MDAwMDEwRDgwMjUzMDQ1RkZGRjAyMDUxMDI1MDA4RTUwMjFFNQotOjEwNEE3MDAwM0MwMzQwMDAwMDQzMzAyNTAwMEE2NDAwQUNFQzAwMDQxNQotOjEwNEE4MDAwQUNFNjAwMDA5MzVGMDkyMDNDMTkwMDA2MjRFQzAwMTRGQQotOjEwNEE5MDAwMDAxRkM2MDAwMzE5NzgyNUFDRUYwMDA4OEY0ODA5MkNDOQotOjEwNEFBMDAwMjVDRDAwMDEzMUE1N0ZGRkFDRTgwMDBDOEY1MDA5MzAwNwotOjEwNEFCMDAwQTc4NTAwNTgyNEU4MDAyOEFDRjAwMDEwOEY0NDA5Mzg3RQotOjEwNEFDMDAwMDEwMDgwMjFBQ0U0MDAxNEFEOTMwMDA0OEY1MzA5NDAzMQotOjEwNEFEMDAwQUQ5MzAwMDg5MzRBMDkzNzNDMTkwODAwOTMzOTNEOTA3QgotOjEwNEFFMDAwOEY0MzA5NDg4RjQ2MDk0MDMxNDIwMEZGMDA1MkY4MjFBOAotOjEwNEFGMDAwMDA2NjcwMjMwMDFGN0YwMDAwMTlDNDAwMDFGODI4MjVGQwotOjEwNEIwMDAwMzFDREZGRkMwMEFEMjAyNUFEODQwMDBDQUQ4MDAwMTA0MAotOjEwNEIxMDAwQUY0QjAwMkM5MzRCMDkzRTMxNzMwMDA4MTI2MDAwMEQxRgotOjEwNEIyMDAwM0MwNjAxMDEzNENDMDgwQUFDRUMwMDI4OEY1MzAwNzQxOQotOjEwNEIzMDAwQUQxMzAwMDQzQzBCMDgwMDkxNkIzRDkwMzE2NzAwMTBGMQotOjEwNEI0MDAwNTBFMDAwMDNBRDAwMDAwODhGNkEwMDYwQUQwQTAwMDg2NQotOjEwNEI1MDAwMjUxMDAwMEMxMkMwMDAzRDAwMDAwMDAwOTM0MzA5M0ZFNwotOjEwNEI2MDAwMjQxNjAwMDYyNDA2MDAwNDMwNjIwMEZGMTA1NjAwQzkxNwotOjEwNEI3MDAwMjQwNzAwMDI5NzU4MDkzQzNDMEYwMjA0MzMwREZGRkY0NQotOjEwNEI4MDAwMDFBRjQwMjVBRTA4MDAwMDkzNDUwOTNFMzBBNDAwMjA0NwotOjEwNEI5MDAwMTA4MDAwMDgwMDAwMDAwMDkzNTMwOTM2M0MwQjAxMDMwRAotOjEwNEJBMDAwMzU3RjAzMDAzMjc5MDBGRjAzM0Y3MDI1QUUwRTAwMDQwRAotOjEwNEJCMDAwMjQwNjAwMDg5MzRGMDkzNDkzNDgwOTIxMzEyQUZGRkY0NgotOjEwNEJDMDAwMzFFRDAwRkYwMDBEMTA4MjMxMDMwMEZGMDAwMkI2MDAzRQotOjEwNEJEMDAwMDAwMzJDMDAwMkM1NjAyNTAxOEE5ODI1MDAxMjIwODA2MAotOjEwNEJFMDAwM0MwOTQwMDAwMjA0NTAyMzAyNjk1ODI1QUQ0QkZGRDgxMAotOjEwNEJGMDAwOTM1RjA5Mzc4RjRGMDk0ODhGNTgwOTQwMzNGOTAwRkZGOQotOjEwNEMwMDAwMDMzMjcwMjEwMDA2QjA4MjAxRDY2ODIxMDAwNzQ0MDBGQgotOjEwNEMxMDAwMDFGODI4MjMwMDBEMUYwMDAwNjgzMDI1MzBBMkZGRkM5QQotOjEwNEMyMDAwMjU0N0ZGRDgwMEMyNjAyNTAwMTY4MDgwMDIwNzQ4MjE3MgotOjEwNEMzMDAwQUNFQzAwMjAyNTMwMDAyODBFMDAwMDYwMjQxMjAwMDQ5NwotOjEwNEM0MDAwQTM3MjAwM0YwRTAwMDA2MjAwMDAwMDAwOTM0NzAxMEJCQQotOjEwNEM1MDAwMzBGMjAwNDAxMjQwMDAwNTNDMTkwMEZGOEUxODAwMDBBMQotOjEwNEM2MDAwMzcyRUZGRkYwMzBFMzAyNEFFMDYwMDAwMEUwMDAwQzdGMwotOjEwNEM3MDAwMDIyMDIwMjEzQzEwMDgwMDkyMTAzRDkwMzIxMTAwMDNDOAotOjEwNEM4MDAwMTIyMDAwMEYwMkEwMjgyMThGODkwMDUwMjUzMzAwMDEzNwotOjEwNEM5MDAwQUY5MzAwNTBBRjczMDA1MDhGNkIwMDU0MDE3M0Y4MjMzMwotOjEwNENBMDAwMUJFMDAwMDIwMjYwMjAyMThGNjQwMDU0QUY2NDAwNTRCNgotOjEwNENCMDAwOEY0QzAwNzQyNTg0MDFGNEFGNjQwMDBDMDJBMDI4MjFGRAotOjEwNENDMDAwMDI4MDIwMjFBNzYwMDA2ODBFMDAwNUJCM0MxNDEwMDA4NAotOjEwNENEMDAwOEY4NTAwNTAzNDU1MDAwNkFGNDUwMTRDOEY4QTAwNDgzRgotOjEwNENFMDAwOEZCRjAwMkM4RkIzMDAxQzI1NTYwMDAxQUY5NjAwNDhFMwotOjEwNENGMDAwOEZCMjAwMThBMzRBMDE1MjhGQjYwMDI4QUY1NTAxNTQ1NQotOjEwNEQwMDAwOEZCMTAwMTRBRjU0MDE3ODhGQjUwMDI0OEZCNDAwMjAwOAotOjEwNEQxMDAwOEZCMDAwMTAwM0UwMDAwODI3QkQwMDMwOTM1ODA5M0UxMwotOjEwNEQyMDAwMDAxODlFMDAwMDEzOTYwMzA2NDIwMDM2MjQxMTAwMDI2QwotOjEwNEQzMDAwOTM0NDA5MjMzMDgzMDAwMjEwNjBGRUREOEY4NjAwNjBGQgotOjEwNEQ0MDAwOEY4MjAwNTAxNEMyRkVEQTAwMDAwMDAwMEUwMDAwNjBFNgotOjEwNEQ1MDAwMDAwMDAwMDA5MzY5MDAzRjI0MDcwMDE2MzEyODAwRkY3RgotOjEwNEQ2MDAwMTEwNzAwMEMyNDA1MDAwODNDMEMwODAwOTE4QzNEOTBCNAotOjEwNEQ3MDAwMzU4QjAwMDEzQzAxMDgwMEEwMkIzRDkwOTM2QTAwM0Y1OQotOjEwNEQ4MDAwMzE0MzAwRkYxMDY1MDA2NTI0MEQwMDBBMTA2RDAwNUVDMAotOjEwNEQ5MDAwMjQwMjAwMEMwRTAwMDA2MjAwMDAwMDAwMEEwMDA2OTBEMQotOjEwNERBMDAwMDAwMDAwMDAzQzA5MDgwMDk1MjkzRDg2M0MwQTA4MDBFNwotOjEwNERCMDAwOTU0QTNEODAwQTAwMDZGMzAxMkExMDIxM0MwOTA4MDBBQgotOjEwNERDMDAwOTUyOTNEOEEzQzA0MDgwMDk0ODQzRDgwM0MwNjA4MDBGNwotOjEwNEREMDAwOTRDNjNEN0M5NTAzMDAyNDAxMjQxMDIxMDA0NkY4MjM0RAotOjEwNERFMDAwMDAwM0NDMDAyN0YwRkZGMjAzMzBDMDI1MjQwRjA4MDA5OQotOjEwNERGMDAwQUNGODAwMENBQ0VGMDAxNEFDRTAwMDEwMEEwMDA2RUVCQQotOjEwNEUwMDAwMjRFNzAwMTgzQzAxMDgwMEEwMzEzRDkwOTM1RjA5M0U2MwotOjEwNEUxMDAwMjQxNjAwMDEzM0Y5MDAyMDE3MjBGRUE1MjQxMTAwMDhGNAotOjEwNEUyMDAwMEEwMDA2OTAyNDExMDAwNDhGNkUwMDg0OEY0RDA5NDAwMwotOjEwNEUzMDAwMTFBMEZFOUVBRjhFMDA1MDI0MEYwMDE0M0MwMTA4MDAwQwotOjEwNEU0MDAwQTAyRjNEOTAwQTAwMDY4RjAwMDAwMDAwOTUwRTAwMjQ2MAotOjEwNEU1MDAwOTUwRDAwMjgwMDBFNjQwMDAwMEQyQzAwMzU4OTgxMDA5RQotOjEwNEU2MDAwMzRBNjA4MDBBQ0U5MDAwQ0FDRTYwMDEwMEEwMDA2RUUxRgotOjEwNEU3MDAwMjRFNzAwMTQxNDYwRkVFQzAwMDAwMDAwOTUwMjAwMjRGQQotOjEwNEU4MDAwMDAwMjFDMDAzNDY0MDgwMEFDRTQwMDBDMEEwMDA2RUVDQQotOjEwNEU5MDAwMjRFNzAwMTAwQTAwMDc0MTI0MDcwMDEyM0MwMjA4MDAyMgotOjEwNEVBMDAwOTQ0MjNEOEEzQzA2MDgwMDk0QzYzRDgwM0MwMzA4MDBCRAotOjEwNEVCMDAwOTQ2MzNEN0M5NTEwMDAyNDk1MTkwMDI4MDA0NkY4MjE0NAotOjEwNEVDMDAwMDNFM0MwMjMwMDEwNkMwMDAwMTk3NDAwMjcwRkZGRUVFRAotOjEwNEVEMDAwMDFDRjI4MjUzNUFDODEwMEFDRUMwMDBDQUNFNTAwMTAwRQotOjEwNEVFMDAwMjQwNzA4MDBBRDI3MDAxODI1MjcwMDFDMEEwMDA2RUUzRAotOjEwNEVGMDAwQUQyMDAwMTQ4RjdGMDA0Q0FGN0YwMDU0OEY3OTAwNTQ5OQotOjEwNEYwMDAwMEEwMDA2OTlBRjc5MDA1MEEzNjIwMDNGMEUwMDAwNjJDQwotOjEwNEYxMDAwMDAwMDAwMDAwQTAwMDY5MDAwMDAwMDAwMjQwMjAwMTRCNwotOjEwNEYyMDAwMEEwMDA4MjdBMzYyMDAzRjI3QkRGRkU4MzA4NDAwRkY4NgotOjEwNEYzMDAwQUZCRjAwMTAwRTAwMDVCQjMwQTUwMEZGOTM3ODAwN0VDOAotOjEwNEY0MDAwOTM3OTAwN0Y5MzZFMDA4MDkzNjgwMDdBMzMyRjAwRkY3RgotOjEwNEY1MDAwMDAxODY2MDAwMDBGNkMwMDMxQ0IwMEZGMDE4RDQ4MjU2MgotOjEwNEY2MDAwMDAwQjUyMDA4RkJGMDAxMDAxMkEzODI1MzEwNjAwRkZDOAotOjEwNEY3MDAwMzQ0NDcwMDAwMEU2MjgyNTI0MDJGRjgxM0MwMzEwMDAyMQotOjEwNEY4MDAwMjdCRDAwMThBRjQ1MDE0Q0FGNDQwMTU0QTM0MjAxNTI2NAotOjEwNEY5MDAwMDNFMDAwMDhBRjQzMDE3ODI3QkRGRkQ4QUZCMjAwMTg4NwotOjEwNEZBMDAwQUZCMTAwMTRBRkIwMDAxMEFGQkYwMDIwQUZCMzAwMUMxMgotOjEwNEZCMDAwOTM0MjAxMDkzMDg2MDBGRjMwQjAwMEZGMDAwNjE4QzI5RQotOjEwNEZDMDAwMzIwNDAwMDIzMDcxMDAwMTE0ODAwMDA1MzA1MjAwRkZFRAotOjEwNEZEMDAwOTM2NzAwMDUzMEU1MDAwODEwQTAwMDBEMzBDODAwMTBGMAotOjEwNEZFMDAwMDI0MDIwMjEwRTAwMDVBNzAyMjAyODIxMjQwNDAwMDFGMAotOjEwNEZGMDAwOEZCRjAwMjA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQzOAotOjEwNTAwMDAwOEZCMDAwMTAwMDgwMTAyMTAzRTAwMDA4MjdCRDAwMjhBOQotOjEwNTAxMDAwMTUwMDAwMzIwMDAwMDAwMDkzNDMwMTA5MDAwMDI4MjEyMAotOjEwNTAyMDAwMzA2MjAwN0YwMDAyMjBDMDAwMDJGOTQwMDNFNDk4MjFCMgotOjEwNTAzMDAwMjY3OTAwODgwMzNCOTgyMThFNzgwMDI0OEU2RjAwMDgyMwotOjEwNTA0MDAwMTMwRjAwNDYwMDAwMDAwMDhGNjQwMDg0MjQxODAwMDI0MwotOjEwNTA1MDAwMDAwNEZEODIzM0Y5MDAwMzEzMzgwMDdDMDAwMDAwMDBENwotOjEwNTA2MDAwOTM2NjAwODM5MzRBMDEwOTUxNDYwMDA0MzIwNTAwN0M4RgotOjEwNTA3MDAwMTBBMDAwNjAwMDAwMDAwMDMyMDUwMDdDMTRBMDAwNTM2NgotOjEwNTA4MDAwMDI0MDIwMjExNjIwMDAwNjMyMDQwMDAxOEU3RjAwMjRGOQotOjEwNTA5MDAwOEY1OTAxMDQxN0Y5RkZENjAwMDAyMDIxMzIwNDAwMDFDNgotOjEwNTBBMDAwMTA4MDAwMEEwMjQwMjAyMThGNDIwOTQwOEY5MzAwNjQ0MwotOjEwNTBCMDAwMTA1MzAwMDYwMDAwMDAwMDBFMDAwNjZEMDIyMDI4MjE5QgotOjEwNTBDMDAwOEY0MzA5NDBBRjYzMDA0NDAyNDAyMDIxMEUwMDA2MDJENgotOjEwNTBEMDAwMDIyMDI4MjEwQTAwMDg2MDI0MDQwMDAxM0MwOTA4MDA3RAotOjEwNTBFMDAwOEQyOTAwNjQyNTI2MDAwMTNDMDEwODAwQUMyNjAwNjRERgotOjEwNTBGMDAwMTYwMDAwMTIwMDAwMDAwMDhGNkQwMDg0M0MwRTAwQzBGRQotOjEwNTEwMDAwMDFBRTYwMjQxNTgwMDAwNTAyNDAyMDIxMEUwMDA4MkUwQgotOjEwNTExMDAwMDIyMDI4MjEwQTAwMDg2MDI0MDQwMDAxMjQwNTAwMDQ1QwotOjEwNTEyMDAwMEUwMDA1NzAyNDA2MDAwMTAyNDAyMDIxMEUwMDA4MkUwQQotOjEwNTEzMDAwMDIyMDI4MjEwQTAwMDg2MDI0MDQwMDAxMEUwMDAwNDExQQotOjEwNTE0MDAwMjQwNDAwMDE5MzZCMDA3RDAyMEI1MDI1MEUwMDAwNjJDOQotOjEwNTE1MDAwQTM2QTAwN0QwQTAwMDhBMzhGNkQwMDg0OEY2NjAwNzQyNwotOjEwNTE2MDAwOEY0ODAxMDQ4RTY3MDAyNDAwMDY0RTAyMTUwN0ZGQjYyMwotOjEwNTE3MDAwMzEyNjAwN0Y5MzZCMDA4MzI2NDQwMDAxMzA4QTAwN0YzNAotOjEwNTE4MDAwMTE0NjAwNDMzMTYzMDBGRjU0NjRGRkIwOEY2NDAwODQxNAotOjEwNTE5MDAwMjY0NTAwMDEzMEIxMDA3RjMwQTIwMEZGMTIyNjAwMDQzNgotOjEwNTFBMDAwMjQwNTAwMDEwMDQwOTAyMTBBMDAwODc2MjQxMTAwMDEyNgotOjEwNTFCMDAwMjQwRkZGODAwMjRGNzAyNDAxQ0Y5MDI2MzI0MjAwRkY1RgotOjEwNTFDMDAwMDA0MDkwMjEwQTAwMDg3NjI0MTEwMDAxMEUwMDA2NkRBRgotOjEwNTFEMDAwMDIyMDI4MjEzMjE4MDAzMDEzMDBGRkFBMzIxMDAwODI2QQotOjEwNTFFMDAwMDI0MDIwMjEwRTAwMDVBNzAyMjAyODIxMEEwMDA4NjBBNQotOjEwNTFGMDAwMjQwNDAwMDE4RjZFMDA3NDNDMEY4MDAwMjQwNTAwMDMxRQotOjEwNTIwMDAwMDFDRjkwMjVBRjcyMDA3NDkzNzEwMDgzMjQwNjAwMDFEMgotOjEwNTIxMDAwMEUwMDA1NzAzMjI0MDBGRjBFMDAwMDQxMjQwNDAwMDEzRQotOjEwNTIyMDAwOTM2RDAwN0QwMjBENjAyNTBFMDAwMDYyQTM2QzAwN0Q3MQotOjEwNTIzMDAwM0MwQjA4MDA4RDZCMDA1NDI1NzAwMDAxM0MwMTA4MDBGOAotOjEwNTI0MDAwQUMzMDAwNTQwQTAwMDg2MDI0MDQwMDAxOEY2ODAwNzQyOAotOjEwNTI1MDAwM0MwOTgwMDAyNDA1MDAwNDAxMDkzODI1QUY2NzAwNzQ2QgotOjEwNTI2MDAwOTM2MzAwODMyNDA2MDAwMTBFMDAwNTcwMzA2NDAwRkY4NAotOjEwNTI3MDAwMEUwMDAwNDEyNDA0MDAwMTkzNjIwMDdEMDIwMjk4MjU4MwotOjEwNTI4MDAwMEUwMDAwNjJBMzczMDA3RDBBMDAwODYwMjQwNDAwMDE4MAotOjEwNTI5MDAwMzI0RDAwODAzOUFDMDA4MDU0NkNGRjZDOEY2NDAwODQwOAotOjEwNTJBMDAwMEEwMDA4QzkyNjQ1MDAwMTI3QkRGRkM4M0MwQTAwMDhCRQotOjEwNTJCMDAwQUZCRjAwMzBBRkI1MDAyQ0FGQjQwMDI4QUZCMzAwMjRBRgotOjEwNTJDMDAwQUZCMjAwMjBBRkIxMDAxQ0FGQjAwMDE4MDM0QUQ4MjEyNAotOjEwNTJEMDAwMjQwOTAwNDBBRjQ5MDgxNEFGNDAwODEwOEY0MjA5NDQyOAotOjEwNTJFMDAwOEY0MzA5NTA4RjQ2MDk1NDhGNDcwOTVDOEY0ODA5NENGQQotOjEwNTJGMDAwOTM0NDAxMDg5MzQ1MDEwQkFGODIwMDY0MzA4NDAwRkZBMgotOjEwNTMwMDAwMzBBNTAwRkZBRjgzMDA1MEFGODYwMDRDQUY4NzAwNUMzNAotOjEwNTMxMDAwMEUwMDA4NEFBRjg4MDA2MDE0NDAwMTdEOEZCRjAwMzA0NgotOjEwNTMyMDAwQTc2MDAwNjg5MzREMDkwMDI0MEIwMDUwM0MxNTA4MDA0RAotOjEwNTMzMDAwMjZCNTNENDgzMUFDMDBGRjNDMTIwODAwMjY1MjNENThDRQotOjEwNTM0MDAwMTE4QjAwMDMwMDAwMDAwMDAwMDBBODIxMDAwMDkwMjE0NAotOjEwNTM1MDAwOTM1MTAxMDk4RjlGMDA1MDI0MDQwMDEwMzIyRTAwN0ZDQQotOjEwNTM2MDAwMDAwRTY4QzAwMDBFNjE0MDAxOEQyODIxMjRCNDAwODgyMQotOjEwNTM3MDAwQUY1NDA4MTg4RjQ5MDEwNDhGNEEwOUE0M0MwQjAwMEU1MgotOjEwNTM4MDAwMDM0QkMwMjEwMTJBMTAyMzNDMDEwODAwQUMyMjNENkNENAotOjEwNTM5MDAwOEY0MzA5NTgzQzAxMDgwMEEwMjQzRDkwOTc0NzA5MDgxNQotOjEwNTNBMDAwMDA3RjMwMjMzQzAxMDgwMEFDMjYzRDcwMzBFOEZGRkY1MQotOjEwNTNCMDAwMDAwOEM5QzAzQzAxMDgwMEFDM0YzRDk0QUY1OTAwMkMyNwotOjEwNTNDMDAwOTc0MjA5MDg5NzEwMDAyQzhFQjEwMDAwOTMwRjAwMTgyNwotOjEwNTNEMDAwMDM3NDk4MjFBNzkwMDA1OEFGOTMwMDQ0MDIyMEY4MDk2NQotOjEwNTNFMDAwMzFGMDAwRkYzMDRFMDAwMjE1QzAwMUIyMzA0RjAwMDExNQotOjEwNTNGMDAwMTFFMDAxNEYwMDAwMDAwMDkzNDMwOTNFMzA2NjAwMDhCMQotOjEwNTQwMDAwMTRDMDAwMDIyNDE0MDAwMzAwMDBBMDIxOEY1ODA5QTQzNgotOjEwNTQxMDAwMjQxMzAwMDEzQzAxMDgwMEFDMzgzRDk4OTM0RjA5MzQzNwotOjEwNTQyMDAwOTM1MTA5MzczMUVDMDBGRjMyMkUwMEZGMDI4RTY4MjFDNAotOjEwNTQzMDAwMDAwRDI4ODAwMEFDNTAyMTAxNTA1ODIxM0MwMTA4MDA4QgotOjEwNTQ0MDAwQTQyQjNEODgzQzAxMDgwMEE0MkEzRDg2OTM0OTA5MzREOQotOjEwNTQ1MDAwMzEyMjAwRkYwMjAyMjAyMTI0OTAwMDEwM0MwMTA4MDBBQwotOjEwNTQ2MDAwQTQzMDNEODQyNDA3MDAwNjhGOUYwMDUwM0MwMTA4MDBCMwotOjEwNTQ3MDAwQUMyNzNEOEM4Rjg4MDA1QzhGNTkwOTU4MDAwMDgwMjEzMwotOjEwNTQ4MDAwMDExRjI4MjMwNEEwMDE0OTAzM0YyMDIzMDQ4MDAxNDc3MgotOjEwNTQ5MDAwMDBBNDMwMkIxMEMwMDE0OTAwMDAwMDAwM0MwMTA4MDBBRQotOjEwNTRBMDAwQUMyNTNENzA4RTQyMDAwMDAwNDBGODA5MDAwMDAwMDA2RAotOjEwNTRCMDAwMzA0MzAwMDIxNDYwMDBGODAwNDA4ODIxMzA0NDAwMDFBRAotOjEwNTRDMDAwNTQ4MDAwMTA4RTQyMDAwNDNDMDkwODAwOEQyOTNENzQ3MAotOjEwNTREMDAwM0MwQUMwMDAwMTJBODAyNUFGNTAwRTAwOEY0NTAwMDAxNQotOjEwNTRFMDAwMzBBQjAwMDgxMTYwRkZGRDAwMDAwMDAwOTc0RDBFMDg3MgotOjEwNTRGMDAwMjQxMDAwMDFBNzhEMDAzQzhGNEMwRTA0QUY4QzAwMzRBQgotOjEwNTUwMDAwOEU0MjAwMDQwMDQwRjgwOTAwMDAwMDAwMDIyMjg4MjVCNQotOjEwNTUxMDAwMzIyRTAwMDIxNUMwMDE4MDAwMDAwMDAwM0MwOTA4MDA4NgotOjEwNTUyMDAwOTUyOTNEN0MzQzA2MDgwMDk0QzYzRDg4M0MwQTA4MDA0RAotOjEwNTUzMDAwOTU0QTNEN0UzQzE5MDgwMDhGMzkzRDc0MDEyNjYwMjE1MwotOjEwNTU0MDAwM0MxODA4MDA4RjE4M0Q5ODNDMDMwODAwOTQ2MzNEOTI3NgotOjEwNTU1MDAwMDE4QTIwMjE4RjRFMDk0MDAzMjlGODIxMjQ4RjAwMDI1RgotOjEwNTU2MDAwMDNFMzI4MjEwMzE5NjgyMTNDMDEwODAwQTQyQzNEOEE4QgotOjEwNTU3MDAwQUY4RTAwNjQzQzAxMDgwMEFDMkQzRDk4M0MwMTA4MDA1MgotOjEwNTU4MDAwQTQyNTNEODAwRTAwMDA5RTMxRTRGRkZGOEY4NzAwNDg3OAotOjEwNTU5MDAwMDA0MDIwMjEzQzAxMDgwMEEwMjczRDkxOEU0MjAwMDhEOAotOjEwNTVBMDAwMjRFODAwMDFBRjg4MDA0ODAwNDBGODA5MDAwMDAwMDAyRQotOjEwNTVCMDAwOTM0NDAxMEI4RjRDMDAyQzk3NEEwOTA4M0MwQjAwMEVCQQotOjEwNTVDMDAwMDM0QjQwMjEzMTQ5RkZGRjAwMDkxOUMwOEY4QjAwNTA2OAotOjEwNTVEMDAwQUY0MzAwMkM5NzQzMDkwODk1MDYwMDFBMDA0MDM4MjE3NAotOjEwNTVFMDAwMzA4QTAwNDAzMERGRkZGRkFDNUYwMDAwOEQxOTAwMUNFNwotOjEwNTVGMDAwMDA0MDQ4MjFBQzU5MDAwNDhEMTgwMDIwQUM1ODAwMDgyOAotOjEwNTYwMDAwOTEwRjAwMTkzMUUzMDAwMzEwNzMwMEYwMDAwMDAwMDA1NwotOjEwNTYxMDAwMjg2MjAwMDIxNDQwMDEwOTI0MDUwMDAyMTA2NTAwRkQwMwotOjEwNTYyMDAwMjQwRDAwMDMxMDZEMDEwRDAwMDAwMDAwMTE0MDAwRDk5MQotOjEwNTYzMDAwMDAwMDAwMDAzQzBBMDgwMDk1NEEzRDg2MjU0MjAwMDExMgotOjEwNTY0MDAwOTM0RDA5MzQ5MzU4MDkyMTk1MEUwMDJBMzFBMzAwRkY4OAotOjEwNTY1MDAwMDAwMzIwODIzMzFGMDBGRjk3OTgwMDU4MDAwNDdFMDA0QgotOjEwNTY2MDAwMDAxRkNDMDAwMUY5NDAyNTMwNDlGRkZGMDEwOTEwMjUzQQotOjEwNTY3MDAwMDFEODMwMjEzQzA1NDAwMDAwNDU1MDI1MDAwNjZDMDA1MwotOjEwNTY4MDAwQUNFRDAwMDRBQ0VBMDAwMDkzNDMwOTIwM0MwNDAwMDZBMgotOjEwNTY5MDAwMjRFRDAwMTQwMDAzRkUwMDAzRTRDODI1QUNGOTAwMDg2MwotOjEwNTZBMDAwOEY0OTA5MkMyNzBGMDAwMTMxRUU3RkZGQUNFOTAwMEM3OAotOjEwNTZCMDAwOEY0ODA5MzBBNzhFMDA1ODI0RTkwMDI4QUNFODAwMTA3NAotOjEwNTZDMDAwOEY0NTA5MzgwMTIwNDAyMUFDRTUwMDE0QURBQjAwMDQ0MgotOjEwNTZEMDAwOEY0MjA5NDBBREEyMDAwODkzNEIwOTM3M0MxRjA4MDBEOAotOjEwNTZFMDAwOTNGRjNEOTA4RjQzMDk0ODhGNEEwOTQwMzE2NjAwRkY4MAotOjEwNTZGMDAwMDBENDIwMjEwMDZBNzgyMzAwMDRDNzAwMDAxRkNDMDBEQQotOjEwNTcwMDAwMDMxOTI4MjUzMUVFRkZGQzAwQUUxMDI1QURBMjAwMENEOAotOjEwNTcxMDAwQURBMDAwMTBBRjRDMDAyQzkzNEMwOTNFMzE4QjAwMDgxQgotOjEwNTcyMDAwNTE2MDAwMEY4RTU4MDAwQzNDMDYwMTAxMzRDQTA4MEE3MwotOjEwNTczMDAwQUNFQTAwMjg4RjRCMDA3NEFEMkIwMDA0M0MwQzA4MDAzMQotOjEwNTc0MDAwOTE4QzNEOTAzMTg3MDAxMDUwRTAwMDAzQUQyMDAwMDg5RgotOjEwNTc1MDAwOEY2MjAwNjBBRDIyMDAwODI1MjgwMDBDOEU1ODAwMENENgotOjEwNTc2MDAwMDMwMEY4MDkwMTAwMjAyMTNDMTkwODAwOTczOTNEOEFGRgotOjEwNTc3MDAwM0MxRjA4MDA5N0ZGM0Q3RTAzM0Y3ODIxMjVFOTAwMDI4QQotOjEwNTc4MDAwMEUwMDAwQzczMTI0RkZGRjNDMEUwODAwOERDRTNENkM5QgotOjEwNTc5MDAwM0MwODA4MDA4RDA4M0Q3NDAxQzgyODIzM0MwMTA4MDAxRQotOjEwNTdBMDAwQUMyNTNENkMxNEEwMDAwNjAwMDAwMDAwM0MwMzA4MDA3RQotOjEwNTdCMDAwOEM2MzNEOEMzNDY0MDA0MDNDMDEwODAwQUMyNDNEOEM3QgotOjEwNTdDMDAwMTIwMDAwNzA4RjhDMDA0NDhGNDcwRTEwOEY5MDAwNDRBMQotOjEwNTdEMDAwQUUwNzAwMjA4RjREMEUxOEFFMEQwMDI0M0MxMDA4MDBCRgotOjEwNTdFMDAwOTYxMDNEODAwRTAwMDA2MDAwMDAwMDAwMjQwMjAwNDA4MgotOjEwNTdGMDAwQUY0MjA4MTQ4Rjg2MDA1MDhGOEEwMDRDMDBEMDE4MjFDOQotOjEwNTgwMDAwMDA2QTU4MjMxOTYwMDAwNEFGODMwMDUwQUY2MzAwNTQ0RQotOjEwNTgxMDAwOEY2NTAwNTRBRjg1MDA0QzEyMDAwMDBDMDAwMDAwMDBBMgotOjEwNTgyMDAwOEY0NDAwNzQ5MzY4MDA4MTM0MDlGQTAwMkQwRTAwMDczQwotOjEwNTgzMDAwMTFDMDAwMDUwMDg5MTgyMTkzN0YwMDgxMjQxOTAxRjQwQgotOjEwNTg0MDAwMDNGOTc4MDQwMUU0MTgyMUFGNjMwMDBDOEY0NDA5NUM2QwotOjEwNTg1MDAwOEY4MzAwNUMwMDgzQzAyMzFCMDAwMDAzMDAwMDAwMDA1NgotOjEwNTg2MDAwOEY1MDA5NUNBRjkwMDA1QzBFMDAwMDYyMDAwMDAwMDBFOQotOjEwNTg3MDAwOEY4QzAwNTA4RTQ3MDAxMDNDMDEwODAwQUMyQzNEOTRFQQotOjEwNTg4MDAwMDBFMEY4MDkwMDAwMDAwMDNDMEQwODAwOERBRDNENkMwMwotOjEwNTg5MDAwNTVBMEZFRjUyNDA3MDAwNjhGNDUwMDI0OTc1OTA5MDhGNgotOjEwNThBMDAwOEY4QjAwNjQ4Rjk0MDA1MDNDMEYwMDFGOTc4MjAwNTgyQwotOjEwNThCMDAwOEY4NjAwNTQ4RjkzMDA0QzMzMjhGRkZGMzVFOUZGODAxQgotOjEwNThDMDAwMDBBOTUwMjQwMDA4NzFDMDMyMzIwMTAwQUY0RTAwMjRGQwotOjEwNThEMDAwQTRDMjAwMkNBRjRBMDAyNEFGNkIwMDQ0QUY3NDAwNTA0OAotOjEwNThFMDAwQUY3MzAwNTQxNjQwMDA4MDMyMzgwMDEwNTcwMDAwODYxNQotOjEwNThGMDAwOEVBNDAwMDQzMjIzMDA0MDU0NjAwMDFCOEVCMTAwMDhDNwotOjEwNTkwMDAwOEVCMDAwMEMwMjAwRjgwOTAwMDAwMDAwOEZCRjAwMzBDQwotOjEwNTkxMDAwOEZCNTAwMkM4RkI0MDAyODhGQjMwMDI0OEZCMjAwMjBFNQotOjEwNTkyMDAwOEZCMTAwMUM4RkIwMDAxODAzRTAwMDA4MjdCRDAwMzhCRAotOjEwNTkzMDAwOTM0NzAxMDk4Rjg4MDAzODAwMDdGRTAwMDNFOEM4MjU1NwotOjEwNTk0MDAwQUY1OTAwODA4RjU4MDlBMDhGNTMwOUE0QUZCODAwMTAzOQotOjEwNTk1MDAwQUY1ODBFMTQ4RkI0MDAxMEFGNTQwRTEwQUY1MzBFMUM3RQotOjEwNTk2MDAwMEEwMDA5NjJBRjUzMEUxODAyMjBGODA5MDAwMDAwMDA3NwotOjEwNTk3MDAwOEVCMDAwMEMwMjAwRjgwOTAwMDAwMDAwMEEwMDBBQTgxRQotOjEwNTk4MDAwOEZCRjAwMzBBNTgwMDAyMEE1OTMwMDIyMEEwMDBBNUI4QgotOjEwNTk5MDAwQUQ5MzAwMjQzQzA5MDgwMDk1MjkzRDg2M0MwNjA4MDA4QgotOjEwNTlBMDAwOTRDNjNEODAwQTAwMDlGNDAxMjYxMDIxM0MwMTA4MDAzQwotOjEwNTlCMDAwQUMyMDNENzAwQTAwMDk4RThFNDIwMDAwM0MwMTA4MDBCOAotOjEwNTlDMDAwQUMyNDNENzAwQTAwMDk4RThFNDIwMDAwM0MwMzA4MDBBMgotOjEwNTlEMDAwOTQ2MzNEOEEzQzA0MDgwMDk0ODQzRDgwM0MxRjA4MDA4OQotOjEwNTlFMDAwOTdGRjNEN0M5NTE4MDAyNDAwNjRDODIxMDMzRjc4MjM2RAotOjEwNTlGMDAwMDAxODZDMDAyNUVFRkZGMjAxQUUyODI1QUM0NTAwMEMyNgotOjEwNUEwMDAwMjQwMjA4MDBBQ0UyMDAxNEFDRTAwMDEwMEEwMDA5RUYyOAotOjEwNUExMDAwMjRFNzAwMTg5NTA2MDAyNDk1MDkwMDI4MDAwNjI0MDBCNAotOjEwNUEyMDAwMDAwOTFDMDAzNDlGODEwMDM0NzkwODAwQUNGRjAwMEM5MQotOjEwNUEzMDAwQUNGOTAwMTAwQTAwMDlFRjI0RTcwMDE0MTQ2MEZFRkIyMwotOjEwNUE0MDAwMDAwMDAwMDA5NTE4MDAyNDAwMTg3QzAwMzVFRTA4MDBDNgotOjEwNUE1MDAwQUNFRTAwMEMwQTAwMDlFRjI0RTcwMDEwM0MwNzA4MDAzOAotOjEwNUE2MDAwOTRFNzNEODAzQzA0MDgwMDk0ODQzRDhBM0MwMzA4MDA5MAotOjEwNUE3MDAwOTQ2MzNEN0M5NTE5MDAyNDk1MTgwMDI4MDA4N0Y4MjEyRgotOjEwNUE4MDAwMDNFMzc4MjMyNDA3MDgwMDAwMTkyQzAwMDAxODZDMDA5OQotOjEwNUE5MDAwMjVFRUZGRUUwMUFFMzAyNTM0QTI4MTAwQUQyNzAwMThCRgotOjEwNUFBMDAwMjUyNzAwMUNBRDIyMDAwQ0FEMjYwMDEwMEEwMDA5RUZDRQotOjEwNUFCMDAwQUQyMDAwMTQ5MzUyMDEwOTAwMDAyODIxMEUwMDA2MDJCNwotOjEwNUFDMDAwMzI0NDAwRkY4RkJGMDAzMDhGQjUwMDJDOEZCNDAwMjgwOAotOjEwNUFEMDAwOEZCMzAwMjQ4RkIyMDAyMDhGQjEwMDFDOEZCMDAwMTg0QwotOjEwNUFFMDAwMDNFMDAwMDgyN0JEMDAzODkzNUYwMTA5MzNFNDAwRkY5RAotOjEwNUFGMDAwMEUwMDA2NkQwMDAwMjgyMTMyMzgwMDEwNTMwMEZGN0U5MgotOjEwNUIwMDAwMzIyMzAwNDA4RUE0MDAwNDAwODBGODA5MDAwMDAwMDA0OQotOjEwNUIxMDAwMEEwMDBBQTIzMjIzMDA0MDEyMDBGRjVGMDAwMDAwMDBDQQotOjEwNUIyMDAwOEY1NDBFMTQ4RjkyMDA0NEFFNTQwMDIwOEY1MzBFMUNERAotOjEwNUIzMDAwMEEwMDBBOEFBRTUzMDAyNDhGODIwMDFDMDA4MDQwMjE5NAotOjEwNUI0MDAwM0MwNDAxMDA5MDQ3MDA4NTMwRTMwMDIwMTA2MDAwMDkwQwotOjEwNUI1MDAwMDAwMDAwMDAzQzA3MDgwMDhDRTczRDk0OEY4MzAwMTg4QwotOjEwNUI2MDAwMDBFMzIwMjMwNDgwMDAwODkzODkwMDA0MTRFMzAwMDM2OQotOjEwNUI3MDAwMDEwMDIwMjEwM0UwMDAwODAwODAxMDIxM0MwNDAxMDAwNgotOjEwNUI4MDAwMDNFMDAwMDgwMDgwMTAyMTExMjAwMDBCMDA2NzM4MjM3QgotOjEwNUI5MDAwOEY4QzAwMjAyNDA5MDAzNDkxOEIwMEJDMzE2QTAwMDJGNAotOjEwNUJBMDAwNTE0MDAwMDEyNDA5MDAzMDAwRTk2ODJCMTVBMEZGRjFFNQotOjEwNUJCMDAwMDEwMDIwMjEwMEU5MzgyMzI0MTlGRkZDMDBCOUMwMjQ4QQotOjEwNUJDMDAwMDBGOTc4MjQwMEY4NzAyQjE1QzBGRkVBMDFFODIwMjFDNQotOjEwNUJEMDAwMzBDMjAwMDMwMDAyMTgyMzE0QzAwMDEyMzA2OTAwMDMxMQotOjEwNUJFMDAwMDAwMDMwMjEwMEE5NzAyMTAxQzY2ODIxMDBFRDYwMkI2MgotOjEwNUJGMDAwMTE4MEZGRTAzQzA0MDEwMDJEMkYwMDAxMDAwNjQ4MkIxRQotOjEwNUMwMDAwMDEwNTM4MjEwMUU5MzAyNDE0QzBGRkRBMjRFNEZGRkM0NwotOjEwNUMxMDAwMjQxOUZGRkMwMEI5QzAyNDAzMDgyMDIxMDNFMDAwMDg3OAotOjEwNUMyMDAwMDA4MDEwMjE4RjhCMDAyMDI0MDYwMDA0OTE2QTAwQkNBNAotOjEwNUMzMDAwMzE0NDAwMDQxNDgwRkZFQzAwQTk3MDIxMEEwMDBCNUVCRgotOjEwNUM0MDAwMDAwMDMwMjEyN0JERkZFOEFGQkYwMDEwOEY0NjAxMDBFNAotOjEwNUM1MDAwOTM0QTAxMDkzQzFGMDgwMDhGRkYwMDkwMjQwN0ZGODAzMgotOjEwNUM2MDAwMzE0RjAwRkYzMUU4MDA3RjAwMDg2MTQwMDNFNkM4MjFBMgotOjEwNUM3MDAwMDMyQ0MwMjEyNzA5MDEyMDAxMjc3MDI0M0MwMTA4MDBDMgotOjEwNUM4MDAwQTAyRjNERDBBRjRFMDgwQzNDMEQwODAwOERBRDAwOTAwQwotOjEwNUM5MDAwM0MwNDAwODAzNDgyMDAwMzAxQTY1ODIxMDE2QzE4MjFDNQotOjEwNUNBMDAwMjQ2NTAxMjAzMEFBMDA3ODAxNDI0MDI1QUY0ODA4MUMzNQotOjEwNUNCMDAwM0MxRjA4MDA4RkZGMDA5MDhGODgwMDQwMDNFNkMwMjE0MgotOjEwNUNDMDAwMzMxOTAwMDcwMzA3NDgyNDAzM0E3ODIxQUY0OTAwMjgxNQotOjEwNUNEMDAwMjVFOTA5QzA5NTJFMDAwMjNDMEQwODAwOERBRDAwOEMxMQotOjEwNUNFMDAwM0MwQTA4MDA4RDRBMDA5MDMxQ0MzRkZGMDFBNjE4MjFFNAotOjEwNUNGMDAwMDAwQzU5ODAwMDZCMjgyMTAwQTcyMDI0QUY0NDAwMkMwMQotOjEwNUQwMDAwOTUyMjAwMDIzQzFGMDgwMDhGRkYwMDhDOTEwNzAwODU0MAotOjEwNUQxMDAwMzA1OTNGRkYwM0U2NzgyMTAwMTlDMTgwMDE0NjcwMjEwOAotOjEwNUQyMDAwMDFGODY4MjEzMUNDMDA3RjMxQUIwMDdGMDE5QTI4MjEzNgotOjEwNUQzMDAwMDE3QTUwMjEzQzAzMDAwQzNDMDQwMDBFMDBBMzI4MjFGMgotOjEwNUQ0MDAwMDE0NDEwMjEzMEU2MDAyMDI3NDcwOTgwQUY4MjAwMkM1MwotOjEwNUQ1MDAwQUY4ODAwMUNBRjg5MDAyNEFGODUwMDIwMTBDMDAwMDY2QQotOjEwNUQ2MDAwQUY4NzAwMjg4RDAyMDA1MDhDQTQwMTBDMDA0NDMwMjMyMgotOjEwNUQ3MDAwMThDMDAwNzcwMDAwMDAwMDkxMEMwMDg1MjQwREZGREZBMwotOjEwNUQ4MDAwMDE4RDM4MjRBMTA3MDA4NThGOEIwMDFDOEY4OTAwMjQ4QQotOjEwNUQ5MDAwOEY4NzAwMjg4RDY1MDA0Q0FGODUwMDE4OTEyRjAwMEQ2RQotOjEwNURBMDAwMzFFRTAwMjAxMUMwMDAxNzAwMDAwMDAwMjQwOTAwMDE5RQotOjEwNURCMDAwQTM4OTAwMDRBRjgwMDAwQzhDRTQwMDI0OEY4NTAwMENDNAotOjEwNURDMDAwMjQwQTAwMDhBRjgwMDAwOEFGODAwMDEwM0MwMTA4MDBFMgotOjEwNUREMDAwQTQyQTNEN0UzQzAxMDgwMEE0MjAzRDkyMEUwMDBCMzIxNwotOjEwNURFMDAwMDAwMDMwMjE4Rjg1MDAyNDhGQkYwMDEwQUY4MjAwMTQ4NwotOjEwNURGMDAwOTBBODAwMEQyN0JEMDAxODAwMDgzOTQyMDNFMDAwMDhGNAotOjEwNUUwMDAwMzBFMjAwMDE5MTNGMDAwMjI0MTgwMDAxMzNGOTAwRkY0NQotOjEwNUUxMDAwMDAxOTIxODIxMDk4MDAzOTI0MDgwMDAyMTA4ODAwNUJDNAotOjEwNUUyMDAwOEY4NjAwMkM4Q0U1MDAyNDE0QTAwMDFCOEY5RjAwMjA3RgotOjEwNUUzMDAwOTEyMjAwMDAyNDBBMDAwNTMwNDYwMDNGMTBDQTAwNDdBNgotOjEwNUU0MDAwMjQwNDAwMDE4Rjg2MDAwOEEzODQwMDA0QUY4NjAwMTA5QwotOjEwNUU1MDAwQUY4NjAwMEM4Q0U0MDAyNDhGODUwMDBDMjQwQTAwMDgxNwotOjEwNUU2MDAwM0MwMTA4MDBBNDJBM0Q3RTNDMDEwODAwQTQyMDNEOTI4QwotOjEwNUU3MDAwMEUwMDBCMzIwMDAwMDAwMDhGODUwMDI0OEZCRjAwMTA0MQotOjEwNUU4MDAwQUY4MjAwMTQ5MEE4MDAwRDI3QkQwMDE4MDAwODM5NDIwOQotOjEwNUU5MDAwMDNFMDAwMDgzMEUyMDAwMThDRjgwMDA4OENGOTAwMjRDRgotOjEwNUVBMDAwOEZFRTAwQzRBMzgwMDAwNDhDRTQwMDI0QUY4RTAwMENBRAotOjEwNUVCMDAwOEY4NTAwMEM4Rjg2MDAwODAzMTk3ODIzMjQwQTAwMDhCOAotOjEwNUVDMDAwQUY4RjAwMTAzQzAxMDgwMEE0MkEzRDdFM0MwMTA4MDA3MQotOjEwNUVEMDAwQTQyMDNEOTIwRTAwMEIzMjAwMDAwMDAwOEY4NTAwMjRBQwotOjEwNUVFMDAwOEZCRjAwMTBBRjgyMDAxNDkwQTgwMDBEMjdCRDAwMThDRQotOjEwNUVGMDAwMDAwODM5NDIwM0UwMDAwODMwRTIwMDAxOTEyMzAwMDA2RAotOjEwNUYwMDAwMzA2MjAwM0YxMDQ0MDAyNzhGODUwMDIwOENFNDAwMjQ3RAotOjEwNUYxMDAwMTQ4MDAwMjEwMDAwMDAwMDhEMkUwMDE4M0MxODdGRkYyNwotOjEwNUYyMDAwOEY4NTAwMjAzNzBGRkZGRjAxQ0YxODI0QUY4MzAwMDhCMwotOjEwNUYzMDAwOEY5RjAwMDg4Q0E4MDA4NDAzRThDODJCMTcyMDAwMDI1QwotOjEwNUY0MDAwMDNFMDIwMjE4Q0E0MDA4NDBBMDAwQkVEQUY4NDAwMDgzQwotOjEwNUY1MDAwOENBMzAxMEMwQTAwMEJDQkFGODMwMDE4OEQyQzAwMTgwQQotOjEwNUY2MDAwOEY4NjAwMDgzQzBEN0ZGRjhGODkwMDIwMzVBM0ZGRkYzRgotOjEwNUY3MDAwMDE4MzU4MjQyNDA0MDAwMUFGOEIwMDEwQUQyMDAwQ0MxNQotOjEwNUY4MDAwQTM4NDAwMDQwQTAwMEJGOUFGODYwMDBDOENDQTAwMTQyRAotOjEwNUY5MDAwMEEwMDBCRURBRjhBMDAwODhDQTMwMEM4MEEwMDBDMzA4MQotOjEwNUZBMDAwQUY4MzAwMDg4Rjg0MDAyQzhDQUMwMDY0OEM4RDAwMTRBRgotOjEwNUZCMDAwMDE4RDU4MkIxMTYwMDAwNDAwMDAwMDAwOENBMjAwNjRDOQotOjEwNUZDMDAwMEEwMDBDMzBBRjgyMDAwODhDODIwMDE0MEEwMDBDMzBFQQotOjEwNUZEMDAwQUY4MjAwMDg4Rjg1MDAwQzI3QkRGRkUwQUZCRjAwMTgxRgotOjEwNUZFMDAwQUZCMTAwMTQxNEEwMDAwN0FGQjAwMDEwOEY4NjAwMjREQQotOjEwNUZGMDAwMjQwMjAwMDU5MEM0MDAwMDMwODMwMDNGMTA2MjAwQjYwOAotOjEwNjAwMDAwOEY4NDAwMjA4RjkxMDAwODAwQTA4MDIxOEY4QzAwMjhCMQotOjEwNjAxMDAwM0MwNTA4MDA4Q0E1M0Q3MDhEOEIwMDA0MzE2NjNGRkY2OAotOjEwNjAyMDAwMDBDNTUwMkI1NTQwMDAwMTAwQzAyODIxOTM4RDAwMDQ2RAotOjEwNjAzMDAwMTFBMDAwNzMwMEIwRjgyQjhGOTgwMDIwMjQwNDAwMzRDNgotOjEwNjA0MDAwOTMwRjAwQkMzMUVFMDAwMjUxQzAwMDAxMjQwNDAwMzA2NwotOjEwNjA1MDAwMDBBNEM4MkIxNzIwMDBEMTAwMDAwMDAwMDBBNDI4MjNCMgotOjEwNjA2MDAwMDBCMEY4MkIzQzAxMDgwMEE0MjQzRDdDMTdFMDAwNjgzOAotOjEwNjA3MDAwMDIwMDIwMjEzQzAzMDgwMDhDNjMzRDZDMDA4MzEwMkI0MAotOjEwNjA4MDAwNTQ0MDAwMDEwMDgwMTgyMThGODgwMDI0M0MwMTA4MDA0MgotOjEwNjA5MDAwQUMyMzNENzQwMDAwNDgyMTkxMDQwMDBEMzA4MzAwMjBBMgotOjEwNjBBMDAwNTA2MDAwMDE4RjQ5MEUxODhGODMwMDE0MDEyMzM4MkI5NAotOjEwNjBCMDAwMTBFMDAwNTkwMDAwMDAwMDNDMDQwODAwOEM4NDNENzQ4RQotOjEwNjBDMDAwMDA4OTU4MjEwMDZCNTAyQjExNDAwMDU2MDA5MDYwMkIyNgotOjEwNjBEMDAwMDA2OTMwMjMwMEMwMjAyMTNDMDEwODAwQUMyNjNENzQzQgotOjEwNjBFMDAwMTIwMDAwMDMyNDFGRkZGQzEwOTAwMDhBMzIyNzAwMDNENwotOjEwNjBGMDAwMDA5RkM4MjQzQzAxMDgwMEFDMzkzRDc0M0MwMTA4MDBGNQotOjEwNjEwMDAwQTQyMDNEOTI4Rjg0MDAwQzEyMDQwMDA3OEY4MzAwMjA4RQotOjEwNjExMDAwQUY5MTAwMDgwMjAwMjAyMThDNzEwMENDQUY5MDAwMENFMAotOjEwNjEyMDAwMjYzMDAwMDFBQzcwMDBDQzNDMDIwODAwOEM0MjNENzQ2QgotOjEwNjEzMDAwOEY4QTAwMTAyNDA3MDAxODAwODIyMDIzMDE0MjI4MjNBMAotOjEwNjE0MDAwQUY4NDAwMEMxMDgwMDAwMkFGODUwMDEwMjQwNzAwMTBGRgotOjEwNjE1MDAwOEY4NjAwMUMzQzAxMDgwMEEwMjczRDkwMjQwNzAwNDBDQQotOjEwNjE2MDAwOTBDQzAwODUzMThCMDBDMDExNjcwMDQwOEY4RDAwMTRFQQotOjEwNjE3MDAwMTRBMDAwMTUwMDAwMjAyMTkzNEEwMTA5OEY0MjA5NzRFMAotOjEwNjE4MDAwMzE0NTAwRkYwMDAyMjYwMjI0QTMwMDAxMzA5MDAwN0Y2OQotOjEwNjE5MDAwMzA3MTAwN0YxMjMwMDA3QTI0MDdGRjgwQTBDMzAwODM5MwotOjEwNjFBMDAwM0MwOTA4MDA4RDI5M0Q4QzhGODgwMDI0MjQwRDAwMDJCNQotOjEwNjFCMDAwMzUyQzAwMDgzQzAxMDgwMEEwMkQzREQxM0MwMTA4MDAxMQotOjEwNjFDMDAwQUMyQzNEOEMyNDA0MDAxMDkxMEUwMDBEMzFDNjAwMjAzMwotOjEwNjFEMDAwMTBDMDAwMDUwMDgwMTgyMTI0MDgwMDAxM0MwMTA4MDBCRgotOjEwNjFFMDAwQUMyODNENzQzNDgzMDAwMThGQkYwMDE4OEZCMTAwMTRCOAotOjEwNjFGMDAwOEZCMDAwMTAwMDYwMTAyMTAzRTAwMDA4MjdCRDAwMjBEMAotOjEwNjIwMDAwM0MwMTA4MDBBNDIwM0Q3QzEzRTBGRjlBMDIwMDIwMjFGRAotOjEwNjIxMDAwMEEwMDBDODEwMEEwMjAyMTNDMDQwODAwOEM4NDNENzRGRAotOjEwNjIyMDAwMDA5MDYwMkIxMTgwRkZBRTAwMDAwMDAwM0MwRjA4MDBDMgotOjEwNjIzMDAwOTVFRjNEN0MwMUU0NzAyMTAxQzY2ODJCMTFBMDAwMDc5OQotOjEwNjI0MDAwMkM4MjAwMDQzQzFGNjAwMDhGRjk1NDA0MzMzODAwM0Y1NwotOjEwNjI1MDAwMTcwMEZGRTUyNDAzMDA0MjJDODIwMDA0MTA0MEZGQTAzOQotOjEwNjI2MDAwMjQwMzAwNDIwQTAwMENERjhGQkYwMDE4MTUyREZGQzA2OQotOjEwNjI3MDAwMDAwMDAwMDA4Q0RGMDA3NDNDMDM4MDAwMjQwNUZGODBEOAotOjEwNjI4MDAwMDNFM0M4MjVBQ0Q5MDA3NDkwRDgwMDg1MjQwRTAwMDQxRgotOjEwNjI5MDAwMjQwNDAwMTAzMzBGMDAzRjAxRTU0MDI1QTBDODAwODUwRAotOjEwNjJBMDAwOEY4ODAwMjQzQzAxMDgwMEEwMkUzREQxMjQwMzAwMDE2QQotOjEwNjJCMDAwOTEwNjAwMEQzMEM5MDAyMDE1MjAwMDAzMDAwMDAwMDBFOQotOjEwNjJDMDAwM0MwMzA4MDA4QzYzM0Q3NDNDMDEwODAwQUMyMzNENkMyQQotOjEwNjJEMDAwMEEwMDBDRDYwMDAwMDAwMDhGODcwMDEwOEM4ODAwODQxNAotOjEwNjJFMDAwMDBFODI4MkIxNEEwMDAwMjAwRTA4ODIxOEM5MTAwODQ5MwotOjEwNjJGMDAwMjQwOTAwMDFBMzg5MDAwNDhGNDQwRTE4MDIyMDI4MjFEQwotOjEwNjMwMDAwMEUwMDBCMzIwMjIwMzAyMTAyMjA4MDIxMEEwMDBDNjc4RgotOjEwNjMxMDAwQUY4MjAwMTQwMDA3MTgyMzMwNjYwMDAzM0MwMTA4MDAxOAotOjEwNjMyMDAwQTQyNjNEOTIxMjIwMDAwNThGOEMwMDIwOTE4QjAwQkM4QQotOjEwNjMzMDAwMzE2QTAwMDQxNTQwMDAxNTI0Q0QwMDA0M0MwRjA4MDAwQwotOjEwNjM0MDAwOTVFRjNEOTIwMUU0NzAyMTAwQUUzMDJCNTBDMEZGNkVGRQotOjEwNjM1MDAwOEY4NDAwMEMyQzg1MDAwNTE0QTBGRkEzMjQwMzAwNDJBOQotOjEwNjM2MDAwMzA5ODAwMDMxNzAwMDAwMjAwOTgxODIzMjQ4M0ZGRkNENAotOjEwNjM3MDAwM0MwMTA4MDBBQzIzM0Q3NDBBMDAwQ0EzMDAwMDAwMDA5RgotOjEwNjM4MDAwMDBBNzU4MjQwQTAwMENDQjAxNjcxODI2M0MwMTA4MDAxRQotOjEwNjM5MDAwQTQyRDNEOTIwQTAwMEQzMzAwMDAwMDAwM0MwMTA4MDBDRQotOjEwNjNBMDAwQUMyMDNENzQwQTAwMENERTI0MDMwMDQyOEY4MzAwMTBGMQotOjEwNjNCMDAwMTQ2MDAwMDcwMDAwMTAyMThGODgwMDI0MjQwNTAwMDVDOAotOjEwNjNDMDAwOTEwNjAwMDAzMEM0MDBGRjEwODUwMDAzMDAwMDAwMDBBQgotOjEwNjNEMDAwMDNFMDAwMDgwMDAwMDAwMDkxMEEwMDE4MzE0OTAwRkZBNgotOjEwNjNFMDAwMDAwOTM5QzIxNEUwRkZGQThGODUwMDFDM0MwNDA4MDA0NAotOjEwNjNGMDAwOTQ4NDNEN0MzQzAzMDgwMDhDNjMzRDk0M0MxOTA4MDA2OAotOjEwNjQwMDAwOEYzOTNENzQzQzBGMDgwMDk1RUYzRDkyMDA2NEMwMjEyOAotOjEwNjQxMDAwOENBRDAwNTQwMzE5NzAyMTAxQ0Y2MDIxMDE4RDU4MjNFOAotOjEwNjQyMDAwMTk2MDAwMUQwMDAwMDAwMDkxMEUwMDFDOEY4QzAwMkNENAotOjEwNjQzMDAwOTc0QjBFMTAzMUNEMDBGRjhEODUwMDA0MDE2RDMwMjM4OAotOjEwNjQ0MDAwOEQ4ODAwMDAzMENFRkZGRjAwMEU1MTAwMDBBQUM4MjE0OQotOjEwNjQ1MDAwMDAwMDM4MjEwMTA3MjAyMTAzMkExODJCMDA4M0MwMjFDNgotOjEwNjQ2MDAwQUQ5OTAwMDRBRDk4MDAwMDkxOEYwMDBBMDFDRjY4MjExQQotOjEwNjQ3MDAwQTE4RDAwMEE4Rjg4MDAyQzk3NEIwRTEyQTUwQjAwMDhFNwotOjEwNjQ4MDAwOTUwQTAwMzgyNTQ5MDAwMUE1MDkwMDM4OTEwNzAwMEQzQgotOjEwNjQ5MDAwMzRFNjAwMDhBMTA2MDAwRDAzRTAwMDA4MDAwMDAwMDAzQgotOjEwNjRBMDAwMjdCREZGRTA5Mzg3MDAwNDhGOEYwMDI0OEZBRDAwMTQ3OQotOjEwNjRCMDAwM0MwRTdGRkY4Rjg5MDAwQzM1QzhGRkZGQUZCRjAwMUM2QgotOjEwNjRDMDAwQUZCMDAwMTgwMUE4MTgyNDkxRUEwMDBEMDAwNzE3QzAwQQotOjEwNjREMDAwM0MxRkJGRkYwMDYyNTgyNTJEMkUwMDAxOEY5MDAwMTgzMQotOjEwNjRFMDAwMzdGOUZGRkYzQzE4MDgwMDhGMTgzRDk0M0MwRjA4MDA1NwotOjEwNjRGMDAwOTVFRjNEOEEwMTc5NjgyNDAwMEU0NzgwM0MwN0VGRkY0NQotOjEwNjUwMDAwM0MwNUYwRkYwMUE4MTgyNTMxNDkwMDIwMzRFMkZGRkZDNwotOjEwNjUxMDAwMzRBQ0ZGRkYwMzEwNTgyMzI3QTUwMDEwMjQwNjAwMDIwNwotOjEwNjUyMDAwMjVFQTAwMDIwMDYyMTgyNDAwODA4MDIxMTUyMDAwMDI2NAotOjEwNjUzMDAwMDAwMDQwMjE4RjQ4MEUxQ0E3QUEwMDEyMDU2MDAwMzdGQQotOjEwNjU0MDAwMjQwNzAwMDAzMEZGMDBGRjAwMUZDRjAwOEY4QjAwMUNDRQotOjEwNjU1MDAwMDA3OTM4MjVBRkE3MDAxNDkxNkYwMDg1M0MwODA4MDAyQQotOjEwNjU2MDAwOTEwODNEOTEzQzE4REZGRjMxRUUwMEMwMzcwQUZGRkY3NAotOjEwNjU3MDAwMDAwRTE4MkIzQzFGMDgwMDk3RkYzRDg0MDBFQTY4MjQ5QQotOjEwNjU4MDAwQTNBODAwMTEwMDAzMTc0MDAxQTI0ODI1OEZCOTAwMTBFRAotOjEwNjU5MDAwQUZBOTAwMTQzQzBBMDgwMDkxNEEzRDkzQTdCRjAwMTYxQQotOjEwNjVBMDAwOEZBODAwMTQwMzJDQzAyNDNDMEIwMTAwM0MwRjBGRkZFQwotOjEwNjVCMDAwMDMwQjE4MjUzMTQ3MDAwMzM1RUVGRkZGMDEwQzY4MjQ1QgotOjEwNjVDMDAwMDAwNzE2MDAwMDZFRjgyNDNDMDk3MDAwMDFBMkM4MjVERgotOjEwNjVEMDAwMDNFOTU4MjVBRkI5MDAxNEFGQUIwMDEwMEUwMDAwNzZFOAotOjEwNjVFMDAwQTNBMDAwMTU4RjhDMDAyNDI2MDIwMDA4OTE4NjAwMERDMAotOjEwNjVGMDAwMzBDNDAwMjAxMDgwMDAwNjhGQkYwMDFDM0MwNTA4MDAzRQotOjEwNjYwMDAwOTRBNTNEODAyNEIwRkZGRjNDMDEwODAwQTQzMDNEODBFQwotOjEwNjYxMDAwOEZCMDAwMTgwM0UwMDAwODI3QkQwMDIwOEY5ODAwMTRGOQotOjEwNjYyMDAwMDExODUwMkI1NTQwRkZDNzI0MDcwMDAxMEEwMDBEQjY4MgotOjEwNjYzMDAwMzBGRjAwRkY5MzgyMDAwNDI3QkRGRkUwQUZCRjAwMThDQQotOjEwNjY0MDAwMTA0MDAwMEYwMDgwNTAyMThGODgwMDI0MjQwQjAwMDU4QgotOjEwNjY1MDAwOEY4OTAwMDg5MTA3MDAwMDhGODQwMDIwMDEwMDI4MjEwNQotOjEwNjY2MDAwMzBFMzAwM0Y4Rjg2MDAyQzEwNkIwMDA4MDAwMDM4MjFCQgotOjEwNjY3MDAwQUZBOTAwMTAwRTAwMDQwRUFGQUEwMDE0QTM4MDAwMDRGRQotOjEwNjY4MDAwOEZCRjAwMTgwM0UwMDAwODI3QkQwMDIwOEQxOTAwMThGNwotOjEwNjY5MDAwM0MwRjA4MDA4REVGM0Q3NDhGOTgwMDEwM0MwMjdGRkY4NwotOjEwNjZBMDAwOEQwODAwMTQzNDVGRkZGRjAzM0Y2ODI0MDFGODcwMjE1OAotOjEwNjZCMDAwMDFBRTYwMjMwMTg4MzgyMUFGQTkwMDEwMEUwMDA0MEUzRQotOjEwNjZDMDAwQUZBQTAwMTQwQTAwMEUwNEEzODAwMDA0OEY4NzAwMjRFMAotOjEwNjZEMDAwM0MwNTA4MDA5NEE1M0Q5MjNDMDIwODAwOEM0MjNEOEM4QwotOjEwNjZFMDAwOTBFNjAwMEQwMDA1MjQwMDMwQzMwMDIwMTA2MDAwMkM0RgotOjEwNjZGMDAwMDA0NDQwMjU4Rjg1MDAxQzAwMDA2MDIxMjQwQjAwMDExMAotOjEwNjcwMDAwOTBBMzAwODUwMDAwNDgyMTI0MEEwMDAxM0MwRjgwMDA2RQotOjEwNjcxMDAwMzVFRTAwNzA4REM3MDAwMEFGODcwMDMwOEY1ODAxNzhDQwotOjEwNjcyMDAwMDcwMEZGRkUzQzAzODAwMDM0NzkwMDcwOEYzODAwMDBDMgotOjEwNjczMDAwM0MwNTA4MDA4Q0E1MDA3NDNDMEQwODAwOERBRDAwNzA3MAotOjEwNjc0MDAwMDMwNzc4MjMwMEFGMzgyMTAwMDAxMDIxMDBFRjMwMkIyMQotOjEwNjc1MDAwMDFBMjIwMjEwMDg2MTgyMTNDMDEwODAwQUMyNzAwNzQwQQotOjEwNjc2MDAwM0MwMTA4MDBBQzIzMDA3MEFGNEIwMTQ4M0MxOTA4MDAwNQotOjEwNjc3MDAwOEYzOTNEOTRBNzQ5MDE0NEE3NEEwMTQ2QUY1OTAxNENCRQotOjEwNjc4MDAwM0MwQjA4MDA5MTZCM0Q5MUEzNEIwMTUyQUY0ODAxNTQ2MwotOjEwNjc5MDAwM0MwODEwMDBBNzRDMDE1ODAzRTAwMDA4QUY0ODAxNzhGRQotOjEwNjdBMDAwOEY0QjBFMUMzQzBBMDgwMDhENEEzRDc0OTc0OTBFMTYwQgotOjEwNjdCMDAwOTc0RDBFMTQwMTQ1NjAyMTMxMkFGRkZGMEEwMDBFMjc3NAotOjEwNjdDMDAwMzFBOUZGRkY4RjgzMDAyNDkwNjQwMDBEMzA4MjAwMjBFOAotOjEwNjdEMDAwMTA0MDAwMjkwMDAwMDAwMDAwMDA0ODIxMDAwMDUwMjE2NgotOjEwNjdFMDAwMDAwMDQwMjEzQzA3ODAwMDM0RUIwMDcwOEQ2NzAwMDAwMgotOjEwNjdGMDAwQUY4NzAwMzA4RjRDMDE3ODA1ODBGRkZFM0MwRDgwMDA5NAotOjEwNjgwMDAwMzVBQzAwNzA4RDhCMDAwMDNDMDUwODAwOENBNTAwNzQzMQotOjEwNjgxMDAwM0MwNDA4MDA4Qzg0MDA3MDAxNjczMDIzMDBBNjc4MjFCNgotOjEwNjgyMDAwMDAwMDEwMjEwMUU2QzgyQjAwODJDMDIxMDMxOTcwMjE0RAotOjEwNjgzMDAwM0MwMTA4MDBBQzJGMDA3NDNDMDEwODAwQUMyRTAwNzAzNQotOjEwNjg0MDAwQUY0OTAxNDgzQzBEMDgwMDhEQUQzRDk0QTc0ODAxNDQ3NwotOjEwNjg1MDAwMjQwOTAwNDBBNzRBMDE0NjNDMDgxMDAwMjQwQUZGOTE4MQotOjEwNjg2MDAwQUY0RDAxNENBMzRBMDE1MkFGNDkwMTU0QTc0MDAxNTgxMgotOjEwNjg3MDAwMDNFMDAwMDhBRjQ4MDE3ODhGNDkwRTE4OTc0NjBFMTJDMgotOjEwNjg4MDAwOTc0NTBFMTAzMENBRkZGRjBBMDAwRTVEMzBBOEZGRkZDQgotOjEwNjg5MDAwOEY4MzAwMjQyN0JERkZGODkwNjQwMDBEMzA4MjAwMjAxNAotOjEwNjhBMDAwMTA0MDAwM0EwMDAwMDAwMDI0MEIwMDAxMDAwMDQ4MjFDNQotOjEwNjhCMDAwMjQwQTAwMDEzQzA4ODAwMDM1MDcwMDcwOENFMzAwMDBDQQotOjEwNjhDMDAwQUY4MzAwMzA4RjRDMDE3ODA1ODBGRkZFM0MwRTgwMDBDNgotOjEwNjhEMDAwM0MwNDA4MDA5MDg0M0REMDM1QzcwMDcwOENFQzAwMDA2QgotOjEwNjhFMDAwM0MwNTA4MDA4Q0E1MDA3NEEzQTQwMDAzM0MxOTA4MDAxMwotOjEwNjhGMDAwOEYzOTAwNzA4RkFEMDAwMDAxODMzMDIzMDBBNjM4MjE0RQotOjEwNjkwMDAwMDAwMDEwMjEwMzIyNzgyMTAwRTZDMDJCMDFGODYwMjE0RAotOjEwNjkxMDAwMDFBRTQwMjVBRkE4MDAwMDNDMDEwODAwQUMyNzAwNzQ4MAotOjEwNjkyMDAwM0MwMTA4MDBBQzJDMDA3MDkzNDYwMTBBM0MwNDA4MDBBRQotOjEwNjkzMDAwOTA4NDNERDFBM0EwMDAwMkEzQTYwMDAxOEZBMzAwMDA3NAotOjEwNjk0MDAwM0MwNTgwRkYzMDk5MDA3RjM0QTJGRkZGMDA2Mjc4MjQ2RAotOjEwNjk1MDAwMDAxOUM2MDAwMUY4NzAyNTI0MEQzMDAwQUY0RTAxNEMxRgotOjEwNjk2MDAwMjdCRDAwMDhBRjREMDE1NEE3NDAwMTU4QUY0QjAxNDg2NwotOjEwNjk3MDAwQTc0OTAxNDRBNzRBMDE0NjNDMDkxMDAwMjQwQUZGODBBOAotOjEwNjk4MDAwQTM0QTAxNTIwM0UwMDAwOEFGNDkwMTc4OEY0QjBFMTg2QgotOjEwNjk5MDAwOTc0NjBFMTI5NzQ1MEUxMDMwQ0FGRkZGMEEwMDBFOTE1RgotOjEwNjlBMDAwMzBBOUZGRkY4Rjg1MDAxQzI0MDIwMDgwOTBBNDAwODU4MQotOjEwNjlCMDAwMzA4MzAwQzAxMDYyMDAwNThGODYwMDIwOEY4ODAwMDg5OQotOjEwNjlDMDAwOEY4NzAwMENBQ0M4MDBDOEFDQzcwMEM0MDNFMDAwMDg0NwotOjEwNjlEMDAwMDAwMDAwMDAzQzBBMDgwMDI1NEEzOTU0M0MwOTA4MDAyMAotOjEwNjlFMDAwMjUyOTNBMjAzQzA4MDgwMDI1MDgyREQ0M0MwNzA4MDAzQQotOjEwNjlGMDAwMjRFNzNCMzQzQzA2MDgwMDI0QzYzN0M0M0MwNTA4MDBBNQotOjEwNkEwMDAwMjRBNTM1M0MzQzA0MDgwMDI0ODQzMTY0M0MwMzA4MDA4MAotOjEwNkExMDAwMjQ2MzM4NUMzQzAyMDgwMDI0NDIzNjMwM0MwMTA4MDAwNAotOjEwNkEyMDAwQUMyQTNENTAzQzAxMDgwMEFDMjkzRDRDM0MwMTA4MDAxQgotOjEwNkEzMDAwQUMyODNENDgzQzAxMDgwMEFDMjczRDU0M0MwMTA4MDAwRgotOjEwNkE0MDAwQUMyNjNENjQzQzAxMDgwMEFDMjUzRDVDM0MwMTA4MDBERgotOjEwNkE1MDAwQUMyNDNENTgzQzAxMDgwMEFDMjMzRDY4M0MwMTA4MDBEMwotOjBDNkE2MDAwQUMyMjNENjAwM0UwMDAwODAwMDAwMDAwRDQKLTowMDAwMDAwMUZGCi0vKgotICogVGhpcyBmaWxlIGNvbnRhaW5zIGZpcm13YXJlIGRhdGEgZGVyaXZlZCBmcm9tIHByb3ByaWV0YXJ5IHVucHVibGlzaGVkCi0gKiBzb3VyY2UgY29kZSwgQ29weXJpZ2h0IChjKSAyMDA0IC0gMjAwOSBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIGZvciB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlybXdhcmUgZGF0YQotICogaW4gaGV4YWRlY2ltYWwgb3IgZXF1aXZhbGVudCBmb3JtYXQsIHByb3ZpZGVkIHRoaXMgY29weXJpZ2h0IG5vdGljZSBpcwotICogYWNjb21wYW55aW5nIGl0LgotICovCmRpZmYgLS1naXQgYS9maXJtd2FyZS9ibngyL2JueDItbWlwcy0wNi02LjIuMS5mdy5paGV4IGIvZmlybXdhcmUvYm54Mi9ibngyLW1pcHMtMDYtNi4yLjEuZncuaWhleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzQzYjI2Ci0tLSAvZGV2L251bGwKKysrIGIvZmlybXdhcmUvYm54Mi9ibngyLW1pcHMtMDYtNi4yLjEuZncuaWhleApAQCAtMCwwICsxLDU4MTggQEAKKzoxMDAwMDAwMDA4MDAwMTE4MDgwMDAwMDAwMDAwNEE2ODAwMDAwMEM4NEQKKzoxMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDA0QTY4MjYKKzoxMDAwMjAwMDAwMDAwMDE0MDAwMDRCMzAwODAwMDBBMDA4MDAwMDAwOTEKKzoxMDAwMzAwMDAwMDA1Njk0MDAwMDRCNDQwODAwNTgyMDAwMDAwMDg0NDMKKzoxMDAwNDAwMDAwMDBBMUQ4MDgwMDU2OTQwMDAwMDE1ODAwMDBBMjVDRUUKKzoxMDAwNTAwMDA4MDAzMjEwMDgwMDAwMDAwMDAwNzJEMDAwMDBBM0I0QjUKKzoxMDAwNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDA3MkQwNDYKKzoxMDAwNzAwMDAwMDAwMDI0MDAwMTE2ODQwODAwMDQ5MDA4MDAwNDAwMTkKKzoxMDAwODAwMDAwMDAxN0Q0MDAwMTE2QTgwMDAwMDAwMDAwMDAwMDAwQzYKKzoxMDAwOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAKKzoxMDAwQTAwMDA4MDAwMEE4MDgwMDAwMDAwMDAwM0JGQzAwMDEyRTdDQjYKKzoxMDAwQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAKKzowODAwQzAwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjA4MDBDODAwMEEwMDAwNDYwMDAwMDAwMEUwCis6MTAwMEQwMDAwMDAwMDAwMDAwMDAwMDBENjM2RjZEMzYyRTMyMkUzMURGCis6MTAwMEUwMDAwMDAwMDAwMDA2MDIwMTAyMDAwMDAwMDAwMDAwMDAwMzAyCis6MTAwMEYwMDAwMDAwMDBDODAwMDAwMDMyMDAwMDAwMDMwMDAwMDAwMDAzCis6MTAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVGCis6MTAwMTEwMDAwMDAwMDAxMDAwMDAwMTM2MDAwMEVBNjAwMDAwMDAwNTQ5Cis6MTAwMTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEM3Cis6MTAwMTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJGCis6MTAwMTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTAwMTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlGCis6MTAwMTYwMDAwMDAwMDAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTAwMTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdGCis6MTAwMTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDVGCis6MTAwMTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVGCis6MTAwMUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRGCis6MTAwMUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNGCis6MTAwMUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGCis6MTAwMUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFGCis6MTAwMUUwMDAwMDAwMDAwMDEwMDAwMDAzMDAwMDAwMDAwMDAwMDAwREVGCis6MTAwMUYwMDAwMDAwMDAwRDNDMDIwODAwMjQ0MjRBQTAzQzAzMDgwMDE1Cis6MTAwMjAwMDAyNDYzNEI5Q0FDNDAwMDAwMDA0MzIwMkIxNDgwRkZGRDc2Cis6MTAwMjEwMDAyNDQyMDAwNDNDMUQwODAwMzdCRDdGRkMwM0EwRjAyMUYwCis6MTAwMjIwMDAzQzEwMDgwMDI2MTAwMTE4M0MxQzA4MDAyNzlDNEFBMDFFCis6MTAwMjMwMDAwRTAwMDE2ODAwMDAwMDAwMDAwMDAwMEQyNzQ3MDEwMENCCis6MTAwMjQwMDA5MEUzMDAwQjI0MDIwMDFBOTRFNTAwMDgxNDYyMDAyOEQxCis6MTAwMjUwMDAwMDAwMjAyMThDRTIwMDAwM0MwMzA4MDA4QzYzMDA0NDc1Cis6MTAwMjYwMDA5NEU2MDAxNDAwMDIxMUMyMDAwMjEwNDAzMEE0MDAwMjAzCis6MTAwMjcwMDAwMDVBMTAyMTI0NjMwMDAxMzBBNTAwMDRBNDQ2MDA4MDI4Cis6MTAwMjgwMDAzQzAxMDgwMEFDMjMwMDQ0MTBBMDAwMTkwMDA0MjAyQkZFCis6MTAwMjkwMDA4RjQyMDJCODA0NDEwMDA4MjQwNDAwMDEzQzAyMDgwMDE3Cis6MTAwMkEwMDA4QzQyMDA2MDI0NDIwMDAxM0MwMTA4MDBBQzIyMDA2MDQ2Cis6MTAwMkIwMDAwM0UwMDAwODAwODAxMDIxOENFMjAwMjA5NEUzMDAxNjg3Cis6MTAwMkMwMDAwMDAwMjAyMUFGNDIwMjgwOENFMjAwMDRBNzQzMDI4NDk4Cis6MTAwMkQwMDBBRjQyMDI4ODNDMDIxMDAwQUY0MjAyQjgzQzAyMDgwMDY0Cis6MTAwMkUwMDA4QzQyMDA1QzI0NDIwMDAxM0MwMTA4MDBBQzIyMDA1QzBFCis6MTAwMkYwMDAwM0UwMDAwODAwODAxMDIxMjc0NzAxMDA5MEUzMDAwQjc1Cis6MTAwMzAwMDAyNDAyMDAwMzk0RTUwMDA4MTQ2MjAwMjgwMDAwMjAyMTY0Cis6MTAwMzEwMDA4Q0UyMDAwMDNDMDMwODAwOEM2MzAwNDQ5NEU2MDAxNDY3Cis6MTAwMzIwMDAwMDAyMTFDMjAwMDIxMDQwMzBBNDAwMDIwMDVBMTAyMTQ1Cis6MTAwMzMwMDAyNDYzMDAwMTMwQTUwMDA0QTQ0NjAwODAzQzAxMDgwMEFECis6MTAwMzQwMDBBQzIzMDA0NDEwQTAwMDE5MDAwNDIwMkI4RjQyMDJCOEY3Cis6MTAwMzUwMDAwNDQxMDAwODI0MDQwMDAxM0MwMjA4MDA4QzQyMDA2MEIzCis6MTAwMzYwMDAyNDQyMDAwMTNDMDEwODAwQUMyMjAwNjAwM0UwMDAwOEM4Cis6MTAwMzcwMDAwMDgwMTAyMThDRTIwMDIwOTRFMzAwMTYwMDAwMjAyMTcwCis6MTAwMzgwMDBBRjQyMDI4MDhDRTIwMDA0QTc0MzAyODRBRjQyMDI4ODlECis6MTAwMzkwMDAzQzAyMTAwMEFGNDIwMkI4M0MwMjA4MDA4QzQyMDA1Q0Y0Cis6MTAwM0EwMDAyNDQyMDAwMTNDMDEwODAwQUMyMjAwNUMwM0UwMDAwODhDCis6MTAwM0IwMDAwMDgwMTAyMThGNDMwMTAwMjQwMjAxMDA1MDYyMDAwM0RECis6MTAwM0MwMDAwMDAzMTFDMjAwMDAwMDBEMDAwMzExQzIwMDAyMTA0MDIyCis6MTAwM0QwMDAwMDVBMTAyMUE0NDAwMDgwMDNFMDAwMDgwMDAwMTAyMTEyCis6MTAwM0UwMDA5MzYyMDAwMDAzRTAwMDA4QUY4MDAwMDAwM0UwMDAwODEzCis6MTAwM0YwMDAwMDAwMTAyMTAzRTAwMDA4MDAwMDEwMjEyNDAyMDEwMDg5Cis6MTAwNDAwMDAxNDgyMDAwODAwMDAwMDAwM0MwMjA4MDA4QzQyMDBGQzNFCis6MTAwNDEwMDAyNDQyMDAwMTNDMDEwODAwQUMyMjAwRkMwQTAwMDBERDdGCis6MTAwNDIwMDAzMEEyMDAyMDNDMDIwODAwOEM0MjAwODQyNDQyMDAwMURCCis6MTAwNDMwMDAzQzAxMDgwMEFDMjIwMDg0MzBBMjAwMjAxMDQwMDAwOERCCis6MTAwNDQwMDAzMEEzMDAxMDNDMDIwODAwOEM0MjAxMDgyNDQyMDAwMTQ1Cis6MTAwNDUwMDAzQzAxMDgwMEFDMjIwMTA4MDNFMDAwMDgwMDAwMDAwMDk1Cis6MTAwNDYwMDAxMDYwMDAwODAwMDAwMDAwM0MwMjA4MDA4QzQyMDEwNEZCCis6MTAwNDcwMDAyNDQyMDAwMTNDMDEwODAwQUMyMjAxMDQwM0UwMDAwODEyCis6MTAwNDgwMDAwMDAwMDAwMDNDMDIwODAwOEM0MjAxMDAyNDQyMDAwMUYwCis6MTAwNDkwMDAzQzAxMDgwMEFDMjIwMTAwMDNFMDAwMDgwMDAwMDAwMDVECis6MTAwNEEwMDAyN0JERkZFOEFGQkYwMDEwMjc0NDAxMDA5NDgzMDAwODc4Cis6MTAwNEIwMDAzMDYyMDAwNDEwNDAwMDFCMzA2NjAwMDI4RjQyMDJCODE4Cis6MTAwNEMwMDAwNDQxMDAwODI0MDUwMDAxM0MwMjA4MDA4QzQyMDA2MDQxCis6MTAwNEQwMDAyNDQyMDAwMTNDMDEwODAwQUMyMjAwNjAwQTAwMDEyOTBFCis6MTAwNEUwMDA4RkJGMDAxMDhDODIwMDIwOTQ4MzAwMTYwMDAwMjgyMTBBCis6MTAwNEYwMDBBRjQyMDI4MDhDODIwMDA0QTc0MzAyODRBRjQyMDI4ODhDCis6MTAwNTAwMDAzQzAyMTAwMEFGNDIwMkI4M0MwMjA4MDA4QzQyMDA1QzgyCis6MTAwNTEwMDAyNDQyMDAwMTNDMDEwODAwQUMyMjAwNUMwQTAwMDEyOUQxCis6MTAwNTIwMDA4RkJGMDAxMDEwQzAwMDA2MDA2MDI4MjE4RjQ0MDEwMDFBCis6MTAwNTMwMDAwRTAwMDBDRDAwMDAwMDAwMEEwMDAxMjgyNDA1MDAwMTgzCis6MTAwNTQwMDA4RjgyMDAwODhGNDMwMTA0NTA0MzAwMDcwMDAwMjgyMUQ4Cis6MTAwNTUwMDA4RjQ0MDEwMDBFMDAwMENEMDAwMDAwMDA4RjQyMDEwNDE2Cis6MTAwNTYwMDBBRjgyMDAwODAwMDAyODIxOEZCRjAwMTAwMEEwMTAyMURBCis6MTAwNTcwMDAwM0UwMDAwODI3QkQwMDE4MjdCREZGRThBRkJGMDAxNDQ3Cis6MTAwNTgwMDBBRkIwMDAxMDk3NDIwMTA4MzA0MzcwMDAyNDAyMjAwMEYxCis6MTAwNTkwMDAxMDYyMDAwQjI4NjIyMDAxMTQ0MDAwMkYwMDAwMTAyMTdGCis6MTAwNUEwMDAyNDAyNDAwMDEwNjIwMDI1MDAwMDAwMDAyNDAyNjAwMEM4Cis6MTAwNUIwMDAxMDYyMDAyNjAwMDAxMDIxMEEwMDAxNjU4RkJGMDAxNEEwCis6MTAwNUMwMDAyNzUwMDEwMDkyMDIwMDA5MTA0MDAwMUEyNDAzMDAwMTg0Cis6MTAwNUQwMDAzQzAyMDgwMDhDNDIwMDIwMTA0MDAwMTYwMDAwMTgyMTQ4Cis6MTAwNUUwMDAwRTAwMDQ5MzAwMDAwMDAwOTYwMzAwMDgzQzA2MDgwMDdCCis6MTAwNUYwMDA5NEM2NEI1RThFMDQwMDE4OEY4MjAwMjA5NjA1MDAwQzc2Cis6MTAwNjAwMDAwMDAzMUMwMDAwNjYxODI1QUM0NDAwMDBBQzQ1MDAwNDQzCis6MTAwNjEwMDAyNDA0MDAwMUFDNDAwMDA4QUM0MDAwMENBQzQwMDAxMEM5Cis6MTAwNjIwMDBBQzQwMDAxNEFDNDAwMDE4MEUwMDA0QjhBQzQzMDAxQ0YxCis6MTAwNjMwMDAwMDAwMTgyMTBBMDAwMTY0MDA2MDEwMjEwRTAwMDMyNTRCCis6MTAwNjQwMDAwMDAwMDAwMDBBMDAwMTY0MDAwMDEwMjEwRTAwMEVFOTA1Cis6MTAwNjUwMDAwMDAwMDAwMDAwMDAxMDIxOEZCRjAwMTQ4RkIwMDAxMEI4Cis6MTAwNjYwMDAwM0UwMDAwODI3QkQwMDE4MjdCREZGRTBBRkIyMDAxODY3Cis6MTAwNjcwMDAzQzAzNjAxMEFGQkYwMDFDQUZCMTAwMTRBRkIwMDAxMDVFCis6MTAwNjgwMDA4QzY0NTAwMDI0MDJGRjdGM0MxQTgwMDAwMDgyMjAyNEVBCis6MTAwNjkwMDAzNDg0MzgwQzI0MDIwMDM3QUM2NDUwMDAzQzEyMDgwMDRCCis6MTAwNkEwMDAyNjUyNEFEOEFGNDIwMDA4MjQwMjBDODBBRjQyMDAyNEYwCis6MTAwNkIwMDAzQzFCODAwODNDMDYwODAwMjRDNjAzMjQwMjQwMTAyMThECis6MTAwNkMwMDAyNDA0MDAxRDI0ODRGRkZGQUM0NjAwMDAwNDgxRkZGRENDCis6MTAwNkQwMDAyNDQyMDAwNDNDMDIwODAwMjQ0MjA0QjAzQzAxMDgwMDBCCis6MTAwNkUwMDBBQzIyNEFFMDNDMDIwODAwMjQ0MjAyMzAzQzAxMDgwMEVGCis6MTAwNkYwMDBBQzIyNEFFNDNDMDIwODAwMjQ0MjAxNzQzQzAzMDgwMDk2Cis6MTAwNzAwMDAyNDYzMDMyQzNDMDQwODAwMjQ4NDAzRDgzQzA1MDgwMDFGCis6MTAwNzEwMDAyNEE1MzhGMDNDMDEwODAwQUMyMjRCNDAzQzAyMDgwMDA0Cis6MTAwNzIwMDAyNDQyMDJFQzNDMDEwODAwQUMyNjRCMjQzQzAxMDgwMEFBCis6MTAwNzMwMDBBQzI1NEIzNDNDMDEwODAwQUMyMzRCM0MzQzAxMDgwMDg5Cis6MTAwNzQwMDBBQzI0NEI0NDNDMDEwODAwQUMyMjRCNDgzQzAxMDgwMDVGCis6MTAwNzUwMDBBQzIzNEFEQzNDMDEwODAwQUMyMDRBRTgzQzAxMDgwMDFDCis6MTAwNzYwMDBBQzIwNEFFQzNDMDEwODAwQUMyMDRBRjAzQzAxMDgwMEY3Cis6MTAwNzcwMDBBQzIwNEFGNDNDMDEwODAwQUMyMDRBRjgzQzAxMDgwMEQ3Cis6MTAwNzgwMDBBQzIwNEFGQzNDMDEwODAwQUMyMDRCMDAzQzAxMDgwMEI2Cis6MTAwNzkwMDBBQzI0NEIwNDNDMDEwODAwQUMyMDRCMDgzQzAxMDgwMDkxCis6MTAwN0EwMDBBQzIwNEIwQzNDMDEwODAwQUMyMDRCMTAzQzAxMDgwMDc1Cis6MTAwN0IwMDBBQzIwNEIxNDNDMDEwODAwQUMyMDRCMTgzQzAxMDgwMDU1Cis6MTAwN0MwMDBBQzI2NEIxQzNDMDEwODAwQUMyNjRCMjAzQzAxMDgwMDI5Cis6MTAwN0QwMDBBQzI1NEIzMDNDMDEwODAwQUMyMzRCMzgwRTAwMDYyM0ZGCis6MTAwN0UwMDAwMDAwMDAwMDNDMDI4MDAwMzQ0MjAwNzA4QzQyMDAwMDk3Cis6MTAwN0YwMDBBRjgyMDAxNDNDMDMwODAwOEM2MzAwMjA4RjgyMDAwNDQ5Cis6MTAwODAwMDAxMDQzMDAwNDNDMDI4MDAwMEUwMDA0NUJBRjgzMDAwNDMwCis6MTAwODEwMDAzQzAyODAwMDM0NDYwMDcwM0MwMzA4MDA4QzYzMDBBMDVBCis6MTAwODIwMDAzQzAyMDgwMDhDNDIwMEE0MTA0MzAwMDQ4Rjg0MDAxNDkyCis6MTAwODMwMDAzQzAxMDgwMEFDMjMwMEE0QTc0MzAwOUU4Q0NBMDAwMDIyCis6MTAwODQwMDAzQzAzMDgwMDhDNjMwMEJDM0MwMjA4MDA4QzQyMDBCOEVBCis6MTAwODUwMDAwMTQ0MjAyMzAwNjQxODIxMDAwMDQwMjEwMDY0MjAyQjYzCis6MTAwODYwMDAwMDQ4MTAyMTAwNDQxMDIxM0MwMTA4MDBBQzIzMDBCQ0NBCis6MTAwODcwMDAzQzAxMDgwMEFDMjIwMEI4OEY1MTAwMDAzMjIyMDAwNzcyCis6MTAwODgwMDAxMDQwRkZEQ0FGOEEwMDE0OENDNjAwMDAzQzA1MDgwMDU1Cis6MTAwODkwMDA4Q0E1MDBCQzNDMDQwODAwOEM4NDAwQjgwMENBMzAyMzNFCis6MTAwOEEwMDAwMEE2MjgyMTAwMDAxMDIxMDBBNjMwMkIwMDgyMjAyMTY0Cis6MTAwOEIwMDAwMDg2MjAyMTMyMjcwMDAxM0MwMTA4MDBBQzI1MDBCQzQ1Cis6MTAwOEMwMDAzQzAxMDgwMEFDMjQwMEI4MTBFMDAwMUYzMjIyMDAwMkY2Cis6MTAwOEQwMDA4RjQyMDEwMEFGNDIwMDIwOEY0MjAxMDRBRjQyMDBBOEM2Cis6MTAwOEUwMDA5MzQyMDEwQjBFMDAwMEM2MzA1MDAwRkYyRTAyMDAxRTg2Cis6MTAwOEYwMDA1NDQwMDAwNDAwMTAxMDgwMEUwMDAwQzkwQTAwMDIxM0NBCis6MTAwOTAwMDAwMDAwMDAwMDAwNTIxMDIxOEM0MjAwMDAwMDQwRjgwOTU1Cis6MTAwOTEwMDAwMDAwMDAwMDEwNDAwMDA1M0MwMjQwMDA4RjQzMDEwNDJECis6MTAwOTIwMDAzQzAyNjAyMEFDNDMwMDE0M0MwMjQwMDBBRjQyMDEzODVFCis6MTAwOTMwMDAzQzAyMDgwMDhDNDIwMDM0MjQ0MjAwMDEzQzAxMDgwMEMzCis6MTAwOTQwMDBBQzIyMDAzNDMyMjIwMDAyMTA0MDAwMEUzMjIyMDAwNDk5Cis6MTAwOTUwMDA4RjQyMDE0MDBFMDAwMEM2QUY0MjAwMjAwRTAwMDI5NUZCCis6MTAwOTYwMDAwMDAwMDAwMDNDMDI0MDAwQUY0MjAxNzgzQzAyMDgwMDU5Cis6MTAwOTcwMDA4QzQyMDAzODI0NDIwMDAxM0MwMTA4MDBBQzIyMDAzOEJGCis6MTAwOTgwMDAzMjIyMDAwNDEwNDBGRjk4M0MwMjgwMDA4RjQyMDE4MDE4Cis6MTAwOTkwMDAwRTAwMDBDNkFGNDIwMDIwOEY0MzAxODAyNDAyMEYwMEVBCis6MTAwOUEwMDAxNDYyMDAwNTAwMDAwMDAwOEY0MjAxODhBNzQyMDA5Q0VECis6MTAwOUIwMDAwQTAwMDI0ODNDMDI0MDAwOTM2MjAwMDAyNDAzMDA1MEY5Cis6MTAwOUMwMDAzMDQyMDBGRjE0NDMwMDA4M0MwMjQwMDAwRTAwMDI3QjRFCis6MTAwOUQwMDAwMDAwMDAwMDU0NDAwMDA0M0MwMjQwMDAwRTAwMEQ3NTcxCis6MTAwOUUwMDAwMDAwMDAwMDNDMDI0MDAwQUY0MjAxQjgzQzAyMDgwMDk5Cis6MTAwOUYwMDA4QzQyMDAzQzI0NDIwMDAxM0MwMTA4MDBBQzIyMDAzQzM3Cis6MTAwQTAwMDAwQTAwMDFDODNDMDI4MDAwM0MwMjkwMDAzNDQyMDAwMTEwCis6MTAwQTEwMDAwMDgyMjAyNUFGNDQwMDIwOEY0MjAwMjAwNDQwRkZGRUNBCis6MTAwQTIwMDAwMDAwMDAwMDAzRTAwMDA4MDAwMDAwMDAzQzAyODAwMDFECis6MTAwQTMwMDAzNDQyMDAwMTAwODIyMDI1MDNFMDAwMDhBRjQ0MDAyMDdBCis6MTAwQTQwMDAyN0JERkZFMEFGQjEwMDE0QUZCMDAwMTAwMDgwODgyMUQ3Cis6MTAwQTUwMDBBRkJGMDAxODBFMDAwMjUwMzBCMDAwRkY5MzYyMDA3RDVGCis6MTAwQTYwMDAwMjIwMjAyMTAyMDI4MDI1QTM3MDAwN0Q4RjcwMDA3NDc3Cis6MTAwQTcwMDAzQzAyODAwMDBFMDAwMjU5MDIwMjgwMjQxNjAwMDAwOTg4Cis6MTAwQTgwMDA4RkJGMDAxODhGNDIwMUY4MDQ0MEZGRkUyNDAyMDAwMkNECis6MTAwQTkwMDBBRjUxMDFDMEEzNDIwMUM0M0MwMjEwMDBBRjQyMDFGOEIzCis6MTAwQUEwMDA4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwODUyCis6MTAwQUIwMDAyN0JEMDAyMDI3QkRGRkU4QUZCRjAwMTA5NzQyMDE4NDhCCis6MTAwQUMwMDA4RjQ0MDE4ODMwNDIwMjAwMTA0MDAwMDUwMDAwMjgyMUI4Cis6MTAwQUQwMDAwRTAwMEZBQTAwMDAwMDAwMEEwMDAyOEQyNDA1MDAwMThDCis6MTAwQUUwMDAzQzAyRkYwMDA0ODAwMDA1MDA4MjE4MjQzQzAyMDQwMDQwCis6MTAwQUYwMDA1MDYyMDAwMTkzNjIwMDNFMjQwNTAwMDE4RkJGMDAxMDg4Cis6MTAwQjAwMDAwMEEwMTAyMTAzRTAwMDA4MjdCRDAwMThBMzYwMDAyMjA4Cis6MTAwQjEwMDA4RjQ0MDE0MDBBMDAwMjVFMjQwNTAwMDEyN0JERkZFODYyCis6MTAwQjIwMDBBRkJGMDAxNEFGQjAwMDEwOTM2MjAwMDAzMDQ0MDBGRjZDCis6MTAwQjMwMDAzODgzMDAyMDM4ODIwMDMwMDAwMzE4MkIwMDAyMTAyQjZECis6MTAwQjQwMDAwMDYyMTgyNDEwNjAwMDAzMjQwMjAwNTAxNDgyMDA4MDA4Cis6MTAwQjUwMDA4RkJGMDAxNDkzNjIwMDA1MzA0MjAwMDExMDQwMDA3Q0ZBCis6MTAwQjYwMDA4RkJGMDAxNDkzNDIwMTQ4MjQ0M0ZGRkYyQzYyMDAwNTBECis6MTAwQjcwMDAxMDQwMDA3ODhGQjAwMDEwMDAwMzEwODAzQzAzMDgwMDg0Cis6MTAwQjgwMDAyNDYzNEE2ODAwNDMxMDIxOEM0MjAwMDAwMDQwMDAwOEEyCis6MTAwQjkwMDAwMDAwMDAwMDBFMDAwMjUwOEY0NDAxNDA4RjcwMDAwQ0Q2Cis6MTAwQkEwMDA4RjQyMDE0NDE2MDIwMDAyMjQwMjAwMDFBRjYyMDAwQ0QxCis6MTAwQkIwMDAwRTAwMDI1OThGNDQwMTQwOEY0MjAxNDQxNDUwMDAwNDNBCis6MTAwQkMwMDA4RkJGMDAxNDhGQjAwMDEwMEEwMDBGMjAyN0JEMDAxODNGCis6MTAwQkQwMDA4RjYyMDAwQzBBMDAwMzA0MDAwMDAwMDA5NzYyMDAxMEZFCis6MTAwQkUwMDA4RjQzMDE0NDMwNDJGRkZGMTQ2MjAwMUEwMDAwMDAwMEVFCis6MTAwQkYwMDAyNDAyMDAwMUE3NjIwMDEwOEY0MjAyMzgwNDQzMDAxMDUzCis6MTAwQzAwMDA4RjQyMDE0MDNDMDIwMDNGMzQ0NkYwMDAzQzA1NjAwMDRBCis6MTAwQzEwMDAzQzA0RkZDMDhDQTIyQkJDMDA0NDE4MjQwMDQ2MTAyNEM2Cis6MTAwQzIwMDAwMDAyMTMwMjAwMDMxRDgyMTA2MjAwMzkwMDAwMDAwMDYwCis6MTAwQzMwMDA4RjQyMDIzODA0NDBGRkY3MDAwMDAwMDA4RjQyMDE0MDVECis6MTAwQzQwMDBBRjQyMDIwMDNDMDIxMDAwQUY0MjAyMzgwQTAwMDMyMjA5Cis6MTAwQzUwMDA4RkJGMDAxNDk3NjIwMDEwMEEwMDAzMDQwMDAwMDAwMDE4Cis6MTAwQzYwMDAwRTAwMDI1MDhGNDQwMTQwOTc2MjAwMTI4RjQzMDE0NEVFCis6MTAwQzcwMDAzMDUwRkZGRjE2MDMwMDAyMjQwMjAwMDFBNzYyMDAxMjk5Cis6MTAwQzgwMDAwRTAwMDI1OThGNDQwMTQwOEY0MjAxNDQxNjAyMDAwNEI1Cis6MTAwQzkwMDA4RkJGMDAxNDhGQjAwMDEwMEEwMDAyOTEyN0JEMDAxODBBCis6MTAwQ0EwMDA5NzYyMDAxMjBBMDAwMzA0MDAwMDAwMDA5NzYyMDAxNDFCCis6MTAwQ0IwMDA4RjQzMDE0NDMwNDJGRkZGMTQ2MjAwMDYyNDAyMDAwMTBBCis6MTAwQ0MwMDA4RkJGMDAxNDhGQjAwMDEwQTc2MjAwMTQwQTAwMTI0QUYwCis6MTAwQ0QwMDAyN0JEMDAxODk3NjIwMDE0MTQ0MDAwMUQ4RkJGMDAxNDM4Cis6MTAwQ0UwMDAwQTAwMDMxQzAwMDAwMDAwOTc2MjAwMTY4RjQzMDE0NEI1Cis6MTAwQ0YwMDAzMDQyRkZGRjE0NjIwMDBCMjQwMjAwMDE4RkJGMDAxNDdBCis6MTAwRDAwMDA4RkIwMDAxMEE3NjIwMDE2MEEwMDBCMTIyN0JEMDAxODUyCis6MTAwRDEwMDA5NzQyMDA3ODI0NDIwMDA0QTc2MjAwMTAwQTAwMDMyMkQwCis6MTAwRDIwMDA4RkJGMDAxNDk3NjIwMDE2MjQwMzAwMDEzMDQyRkZGRkJBCis6MTAwRDMwMDAxNDQzMDAwNzhGQkYwMDE0M0MwMjA4MDA4QzQyMDA3MDZGCis6MTAwRDQwMDAyNDQyMDAwMTNDMDEwODAwQUMyMjAwNzA4RkJGMDAxNDU3Cis6MTAwRDUwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMTgyN0JERkZFODkyCis6MTAwRDYwMDBBRkJGMDAxNEFGQjAwMDEwOEY1MDAxMDA5MzYyMDAwMEJECis6MTAwRDcwMDA5MzQzMDEwOTMwNDQwMEZGMjQwMjAwMUYxMDYyMDBBNUM0Cis6MTAwRDgwMDAyODYyMDAyMDEwNDAwMDE4MjQwMjAwMzgyODYyMDAwQTVGCis6MTAwRDkwMDAxMDQwMDAwQzI0MDIwMDBCMjg2MjAwMDgxMDQwMDAyQ0I4Cis6MTAwREEwMDAwMDAwMDAwMDA0NjAwMEU1Mjg2MjAwMDIxNDQwMDAyOEYyCis6MTAwREIwMDAyNDAyMDAwNjEwNjIwMDI2OEZCRjAwMTQwQTAwMDQxRkUwCis6MTAwREMwMDA4RkIwMDAxMDEwNjIwMDVFMjg2MjAwMEIxNDQwMDBEQzNGCis6MTAwREQwMDA4RkJGMDAxNDI0MDIwMDBFMTA2MjAwNzM4RkIwMDAxMDQ5Cis6MTAwREUwMDAwQTAwMDQxRjAwMDAwMDAwMTA2MjAwQzAyODYyMDAzOUUxCis6MTAwREYwMDAxMDQwMDAwQTI0MDIwMDgwMjQwMjAwMzYxMDYyMDBDQTVCCis6MTAwRTAwMDAyODYyMDAzNzEwNDAwMEI0MjQwMjAwMzUxMDYyMDBDMThGCis6MTAwRTEwMDA4RkJGMDAxNDBBMDAwNDFGOEZCMDAwMTAxMDYyMDAyQjU3Cis6MTAwRTIwMDAyODYyMDA4MTEwNDAwMDA2MjQwMjAwQzgyNDAyMDAzOTE0Cis6MTAwRTMwMDAxMDYyMDBCNDhGQkYwMDE0MEEwMDA0MUY4RkIwMDAxMEFFCis6MTAwRTQwMDAxMDYyMDA5OThGQkYwMDE0MEEwMDA0MUY4RkIwMDAxMEI5Cis6MTAwRTUwMDAzQzAyMDgwMDhDNDIwMDIwMTA0MDAwQjk4RkJGMDAxNEYzCis6MTAwRTYwMDAwRTAwMDQ5MzAwMDAwMDAwOEY0MjAxMDA4RjgzMDAyMEQ5Cis6MTAwRTcwMDA5NzQ1MDEwQzk3NDYwMTA4QUM2MjAwMDA4RjQyMDEwNEJGCis6MTAwRTgwMDAzQzA0MDgwMDk0ODQ0QjVFMDAwNTJDMDBBQzYyMDAwNDE2Cis6MTAwRTkwMDA4RjQyMDExODAwMDYzNDAwMDBDNDMwMjVBQzYyMDAwOEZGCis6MTAwRUEwMDA4RjQyMDExQzI0MDQwMDAxQUM2MjAwMEM5MzQyMDEwQTMxCis6MTAwRUIwMDAwMEEyMjgyNUFDNjUwMDEwQUM2MDAwMTRBQzYwMDAxOERFCis6MTAwRUMwMDBBQzY2MDAxQzBBMDAwM0Y1OEZCRjAwMTQzQzAyMDgwMDRBCis6MTAwRUQwMDA4QzQyMDAyMDEwNDAwMDlBOEZCRjAwMTQwRTAwMDQ5MzMzCis6MTAwRUUwMDAwMDAwMDAwMDk3NDQwMTA4M0MwMzA4MDA5NDYzNEI1RTM3Cis6MTAwRUYwMDA5NzQ1MDEwQzAwMDQyMjAyOTc0NjAxMEU4RjgyMDAyMEM0Cis6MTAwRjAwMDAwMDA0MjYwMDAwODMyMDI1MDAwNTJDMDAzQzAzMDA4MEZGCis6MTAwRjEwMDAwMEE2MjgyNTAwODMyMDI1QUM0MDAwMDBBQzQwMDAwNDNBCis6MTAwRjIwMDBBQzQwMDAwOEFDNDAwMDBDQUM0NTAwMTBBQzQwMDAxNEQ0Cis6MTAwRjMwMDBBQzQwMDAxOEFDNDQwMDFDMEEwMDAzRjQyNDA0MDAwMTc3Cis6MTAwRjQwMDA5NzQyMDEwQzE0NDAwMDE1MDAwMDAwMDA5MzYyMDAwNTU4Cis6MTAwRjUwMDAzMDQyMDAxMDE0NDAwMDExMDAwMDAwMDAwRTAwMDI1MDRBCis6MTAwRjYwMDAwMjAwMjAyMTkzNjIwMDA1MDIwMDIwMjEzNDQyMDAxMDdCCis6MTAwRjcwMDAwRTAwMDI1OUEzNjIwMDA1OTM2MjAwMDAyNDAzMDAyMEMyCis6MTAwRjgwMDAzMDQyMDBGRjEwNDMwMDZEMDIwMDIwMjE4RkJGMDAxNDhCCis6MTAwRjkwMDA4RkIwMDAxMDBBMDAwRkMwMjdCRDAwMTgwMDAwMDAwRDIwCis6MTAwRkEwMDAwQTAwMDQxRThGQkYwMDE0M0MwMjA4MDA4QzQyMDAyMDdGCis6MTAwRkIwMDAxMDQwMDA2MzhGQkYwMDE0MEUwMDA0OTMwMDAwMDAwMDc3Cis6MTAwRkMwMDA4RjQyMDEwNDhGODMwMDIwOTc0NDAxMEMzQzA1MDgwMEU4Cis6MTAwRkQwMDA5NEE1NEI1RUFDNjIwMDAwOTc2MjAwMkMwMDA0MjQwMEQ0Cis6MTAwRkUwMDAzMDQyRkZGRjAwODIyMDI1M0MwMjQwMEUwMEEyMjgyNTRGCis6MTAwRkYwMDBBQzY0MDAwNEFDNjAwMDA4QUM2MDAwMENBQzYwMDAxMDk1Cis6MTAxMDAwMDBBQzYwMDAxNEFDNjAwMDE4QUM2NTAwMUMwQTAwMDNGNDZFCis6MTAxMDEwMDAyNDA0MDAwMTBFMDAwMjUwMDIwMDIwMjFBNzYwMDAwOEY1Cis6MTAxMDIwMDAwRTAwMDI1OTAyMDAyMDIxMDIwMDIwMjEwRTAwMDI1RTYzCis6MTAxMDMwMDAyNDA1MDAwMTNDMDIwODAwOEM0MjAwMjAxMDQwMDA0MEMyCis6MTAxMDQwMDA4RkJGMDAxNDBFMDAwNDkzMDAwMDAwMDA5NzQyMDEwQ0IzCis6MTAxMDUwMDA4RjgzMDAyMDNDMDUwODAwOTRBNTRCNUUwMDAyMTQwMDFECis6MTAxMDYwMDBBQzcwMDAwMEFDNjIwMDA0QUM2MDAwMDg4RjY0MDA0Q0ZGCis6MTAxMDcwMDAzQzAyNDAxRjAwQTIyODI1QUM2NDAwMEM4RjYyMDA1MDg3Cis6MTAxMDgwMDAyNDA0MDAwMUFDNjIwMDEwOEY2MjAwNTRBQzYyMDAxNEIyCis6MTAxMDkwMDBBQzYwMDAxOEFDNjUwMDFDOEZCRjAwMTQ4RkIwMDAxMDRFCis6MTAxMEEwMDAwQTAwMDRCODI3QkQwMDE4MjQwMjAwMjA1MDgyMDAyNTQxCis6MTAxMEIwMDA4RkIwMDAxMDBFMDAwRjBBMDIwMDIwMjExMDQwMDAyMDA3Cis6MTAxMEMwMDA4RkJGMDAxNDAyMDAyMDIxOEZCMDAwMTAwMDAwMjgyMUUzCis6MTAxMEQwMDAwQTAwMDI1RTI3QkQwMDE4MDIwMDIwMjE4RkJGMDAxNDA1Cis6MTAxMEUwMDA4RkIwMDAxMDBBMDAwNTgwMjdCRDAwMTg5NzQ1MDEwQzNECis6MTAxMEYwMDAwMjAwMjAyMThGQkYwMDE0OEZCMDAwMTAwQTAwMDVBMDRECis6MTAxMTAwMDAyN0JEMDAxODAyMDAyMDIxOEZCMDAwMTAwQTAwMDVDNTdECis6MTAxMTEwMDAyN0JEMDAxODkzNDUwMTBEMDIwMDIwMjE4RkIwMDAxMDVCCis6MTAxMTIwMDAwQTAwMDYwRjI3QkQwMDE4MDIwMDIwMjE4RkJGMDAxNEZGCis6MTAxMTMwMDA4RkIwMDAxMDBBMDAwNUVCMjdCRDAwMTg4RkJGMDAxNDA4Cis6MTAxMTQwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMTg4RjQyMDI3ODFFCis6MTAxMTUwMDAwNDQwRkZGRTI0MDIwMDAyMzQ4NDAwODBBRjQ0MDI0MEI5Cis6MTAxMTYwMDBBMzQyMDI0NDNDMDIxMDAwMDNFMDAwMDhBRjQyMDI3OEIwCis6MTAxMTcwMDAzQzA0MDgwMDk0ODQ0QjZBM0MwMjA4MDA4QzQyNEI3NDg3Cis6MTAxMTgwMDAzMDgzRkZGRjAwMDMxOEMwMDA0MzEwMjFBRjQyMDAzQzMyCis6MTAxMTkwMDAzQzAyMDgwMDhDNDI0QjcwQUY0MjAwMzgzQzAyMDA1MEM5Cis6MTAxMUEwMDAzNDQyMDAwOEFGNDIwMDMwMDAwMDAwMDAwMDAwMDAwMEEwCis6MTAxMUIwMDAwMDAwMDAwMDhGNDIwMDAwMzA0MjAwMjAxMDQwRkZGRDgwCis6MTAxMUMwMDAwMDAwMDAwMDhGNDIwNDAwM0MwMTA4MDBBQzIyNEI2MDhDCis6MTAxMUQwMDA4RjQyMDQwNDNDMDEwODAwQUMyMjRCNjQzQzAyMDAyMDE2Cis6MTAxMUUwMDBBRjQyMDAzMDAwMDAwMDAwM0MwMjA4MDA5NDQyNEI2ODBGCis6MTAxMUYwMDAzQzAzMDgwMDk0NjM0QjZDM0MwNTA4MDA5NEE1NEI2RUJGCis6MTAxMjAwMDAyNDg0MDAwMTAwNDMxMDIxMzA4M0ZGRkYzQzAxMDgwMENCCis6MTAxMjEwMDBBNDIyNEI2ODNDMDEwODAwQTQyNDRCNkExNDY1MDAwMzE3Cis6MTAxMjIwMDAwMDAwMDAwMDNDMDEwODAwQTQyMDRCNkEwM0UwMDAwODE1Cis6MTAxMjMwMDAwMDAwMDAwMDNDMDUwMDBBMjdCREZGRTgwMzQ1MjgyMTA3Cis6MTAxMjQwMDAzQzA0MDgwMDI0ODQ0QjUwQUZCRjAwMTAwRTAwMDUxRDY1Cis6MTAxMjUwMDAyNDA2MDAwQTNDMDIwODAwOTQ0MjRCNTIzQzAzMDgwMDVBCis6MTAxMjYwMDA5NDYzNEI2RTMwNDIwMDBGMjQ0MjAwMDMwMDQzMTgwNDg1Cis6MTAxMjcwMDAyNDAyN0ZGRjAwNDMxMDJCMTA0MDAwMDJBRjgzMDAxQ0FDCis6MTAxMjgwMDAwMDAwMDAwRDBFMDAwNDJBMDAwMDAwMDAzQzAyMDgwMENGCis6MTAxMjkwMDA5NDQyNEI1QThGQkYwMDEwMjdCRDAwMTgwM0UwMDAwODhFCis6MTAxMkEwMDBBNzQyMDBBMjNDMDIwMDBBMDM0MjEwMjE5NDQzMDAwNjE4Cis6MTAxMkIwMDAzQzAyMDgwMDk0NDI0QjVBM0MwMTA4MDBBNDIzNEI1NkMwCis6MTAxMkMwMDAwMDQzMTAyMzhGODMwMDFDMDAwMjE0MDAwMDAyMTQwMzRCCis6MTAxMkQwMDAwMDQzMTAyQjAzRTAwMDA4Mzg0MjAwMDEyN0JERkZFODVGCis6MTAxMkUwMDBBRkJGMDAxMDNDMDIwMDBBMDM0MjEwMjE5NDQyMDAwNkU2Cis6MTAxMkYwMDAzQzAxMDgwMEE0MjI0QjU2MEUwMDA0NzcwMDAwMDAwMEI5Cis6MTAxMzAwMDA1NDQwRkZGOTNDMDIwMDBBOEZCRjAwMTAwM0UwMDAwOEMwCis6MTAxMzEwMDAyN0JEMDAxODI3QkRGRkU4QUZCRjAwMTAwRTAwMDQ3N0ZGCis6MTAxMzIwMDAwMDAwMDAwMDEwNDAwMDAzMDAwMDAwMDAwRTAwMDQ4NUQzCis6MTAxMzMwMDAwMDAwMDAwMDNDMDIwODAwOEM0MjRCNjA4RkJGMDAxMDkwCis6MTAxMzQwMDAyNzQzMDQwMEFGNDIwMDM4M0MwMjA4MDA4QzQyNEI2NDQzCis6MTAxMzUwMDAyN0JEMDAxOEFGODMwMDIwQUY0MjAwM0MzQzAyMDAwNUNGCis6MTAxMzYwMDBBRjQyMDAzMDAzRTAwMDA4QUY4MDAwMTg4RjgyMDAxODAxCis6MTAxMzcwMDAzQzAzMDAwNjAwMDIxMTQwMDA0MzEwMjVBRjQyMDAzMDNDCis6MTAxMzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RjQyMDAwMDhDCis6MTAxMzkwMDAzMDQyMDAxMDEwNDBGRkZEMjc0MjA0MDBBRjgyMDAyMEMxCis6MTAxM0EwMDAwM0UwMDAwOEFGODAwMDE4M0MwNjA4MDA4Q0M2NEI2NEMwCis6MTAxM0IwMDA4Rjg1MDAxODhGODMwMDIwM0MwMjA4MDA5NDQyNEI1QTBFCis6MTAxM0MwMDAyN0JERkZFMDI0QTUwMDAxMjQ2MzAwMjAyNDQyMDAwMTgyCis6MTAxM0QwMDAyNEM3MDAyMEFGQjEwMDE0QUZCMDAwMTBBRkJGMDAxODk5Cis6MTAxM0UwMDBBRjg1MDAxOEFGODMwMDIwM0MwMTA4MDBBNDIyNEI1QUFGCis6MTAxM0YwMDAzMDkwMDBGRjNDMDEwODAwQUMyNzRCNjQwNEMxMDAwODlBCis6MTAxNDAwMDAwMDAwODgyMTA0RTAwMDA2MDAwMDAwMDAzQzAyMDgwMDAzCis6MTAxNDEwMDA4QzQyNEI2MDI0NDIwMDAxM0MwMTA4MDBBQzIyNEI2MDJFCis6MTAxNDIwMDAzQzAyMDgwMDk0NDI0QjVBM0MwMzA4MDA5NDYzNEI2ODBBCis6MTAxNDMwMDAwMDEwMjAyQjAwNDMxMDI2MkM0MjAwMDEwMDQ0MTAyNUYwCis6MTAxNDQwMDAxNDQwMDAwNDhGODMwMDE4MjQwMjAwMTAxNDYyMDAwRjVGCis6MTAxNDUwMDAwMDAwMDAwMDBFMDAwNEE5MjQxMTAwMDEzQzAzMDgwMDU0Cis6MTAxNDYwMDA5NDYzNEI1QTNDMDIwODAwOTQ0MjRCNjgxNDYyMDAwMzk4Cis6MTAxNDcwMDAwMDAwMDAwMDBFMDAwNDJBMDAwMDAwMDAxNjAwMDAwMzE3Cis6MTAxNDgwMDAwMDAwMDAwMDBFMDAwNDkzMDAwMDAwMDAzQzAzMDgwMDcwCis6MTAxNDkwMDA5NDYzNEI1RTNDMDIwODAwOTQ0MjRCNUMyNDYzMDAwMTYxCis6MTAxNEEwMDAzMDY0RkZGRjNDMDEwODAwQTQyMzRCNUUxNDgyMDAwMzVDCis6MTAxNEIwMDAwMDAwMDAwMDNDMDEwODAwQTQyMDRCNUUxMjAwMDAwNjYyCis6MTAxNEMwMDAwMDAwMDAwMDNDMDIwODAwOTQ0MjRCNUFBNzQyMDBBMkQwCis6MTAxNEQwMDAwQTAwMDUwQjAyMjAxMDIxMEUwMDA0NzcwMDAwMDAwMDE2Cis6MTAxNEUwMDAxMDQwMDAwNDAyMjAxMDIxMEUwMDA0ODUwMDAwMDAwMEJFCis6MTAxNEYwMDAwMjIwMTAyMThGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDkwCis6MTAxNTAwMDAwM0UwMDAwODI3QkQwMDIwMzA4NEZGRkYzMEE1RkZGRjY3Cis6MTAxNTEwMDAwMDAwMTgyMTEwODAwMDA3MDAwMDAwMDAzMDgyMDAwMTQ4Cis6MTAxNTIwMDAxMDQwMDAwMjAwMDQyMDQyMDA2NTE4MjEwQTAwMDUxMzQzCis6MTAxNTMwMDAwMDA1Mjg0MDAzRTAwMDA4MDA2MDEwMjExMEMwMDAwNkVDCis6MTAxNTQwMDAyNEM2RkZGRjhDQTIwMDAwMjRBNTAwMDRBQzgyMDAwMDhBCis6MTAxNTUwMDAwQTAwMDUxRDI0ODQwMDA0MDNFMDAwMDgwMDAwMDAwMEM4Cis6MTAxNTYwMDAxMEEwMDAwODI0QTNGRkZGQUM4NjAwMDAwMDAwMDAwMENDCis6MTAxNTcwMDAwMDAwMDAwMDI0MDJGRkZGMjQ2M0ZGRkYxNDYyRkZGQTUzCis6MTAxNTgwMDAyNDg0MDAwNDAzRTAwMDA4MDAwMDAwMDAyNDAyMDAwMTlECis6MTAxNTkwMDBBRjYyMDAwQ0E3NjIwMDEwQTc2MjAwMTJBNzYyMDAxNERECis6MTAxNUEwMDAwM0UwMDAwOEE3NjIwMDE2MzA4MjAwN0YwMzQyMTAyMThBCis6MTAxNUIwMDAzQzA4MDAwRTAwNDgxODIxM0MwMjA4MDA4QzQyMDAyMDI0Cis6MTAxNUMwMDAyN0JERkZEODI0MDdGRjgwQUZCMzAwMUNBRkIyMDAxOEJGCis6MTAxNUQwMDBBRkIxMDAxNEFGQjAwMDEwQUZCRjAwMjAwMDgwODAyMTc5Cis6MTAxNUUwMDAzMEIxMDBGRjAwODcyMDI0MzBEMjAwRkYxMDQwMDAyRkQwCis6MTAxNUYwMDAwMDAwOTgyMUFGNDQwMDJDOTA2MjAwMDAyNDAzMDA1MEFBCis6MTAxNjAwMDAzMDQyMDBGRjE0NDMwMDBFMDAwMDAwMDAzQzAyMDgwMEJFCis6MTAxNjEwMDA4QzQyMDBFMDAyMDIxMDIxMDA0NzEwMjRBRjQyMDAyQzRGCis6MTAxNjIwMDAzQzAyMDgwMDhDNDIwMEUwMDIwMjEwMjEzMDQyMDA3RkEwCis6MTAxNjMwMDAwMzQyMTAyMTAwNDgxMDIxOTQ0MjAwRDQzMDUzRkZGRjkwCis6MTAxNjQwMDAwRTAwMDQ5MzAwMDAwMDAwM0MwMjA4MDA5NDQyNEI1RTMwCis6MTAxNjUwMDA4RjgzMDAyMDAwMTEzNDAwMDBDMjMwMjUwMDEyMkMwMEJFCis6MTAxNjYwMDAzQzAyNDAwMDAwQzIzMDI1MzRBNTAwMDFBQzcwMDAwMEVGCis6MTAxNjcwMDA4RkJGMDAyMEFDNjAwMDA0OEZCMjAwMThBQzczMDAwODZDCis6MTAxNjgwMDA4RkIxMDAxNEFDNjAwMDBDOEZCMzAwMUNBQzY1MDAxMDZGCis6MTAxNjkwMDA4RkIwMDAxMEFDNjAwMDE0MjQwNDAwMDFBQzYwMDAxODhFCis6MTAxNkEwMDAyN0JEMDAyODBBMDAwNEI4QUM2NjAwMUM4RkJGMDAyMENDCis6MTAxNkIwMDA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMEQwCis6MTAxNkMwMDAwM0UwMDAwODI3QkQwMDI4OTM0MzAxMEYyNDAyMDAxMDA3Cis6MTAxNkQwMDAxMDYyMDAwRTI4NjUwMDExMTBBMDAwMDcyNDAyMDAxMkZECis6MTAxNkUwMDAyNDAyMDAwODI0MDUwMDNBMTA2MjAwMDYwMDAwMzAyMUEwCis6MTAxNkYwMDAwM0UwMDAwODAwMDAwMDAwMjQwNTAwMzUxNDYyRkZGQzMwCis6MTAxNzAwMDAwMDAwMzAyMTBBMDAwNTM4MDAwMDAwMDA4RjQyMDA3NEZDCis6MTAxNzEwMDAyNDQyMEZBMDAzRTAwMDA4QUY2MjAwMEMyN0JERkZFOEUxCis6MTAxNzIwMDBBRkJGMDAxMDBFMDAwMjVFMjQwNTAwMDE4RkJGMDAxMDQ1Cis6MTAxNzMwMDAyNDAyMDAwMUE3NjIwMDEyMjdCRDAwMTgyNDAyMDAwMTQ0Cis6MTAxNzQwMDAwM0UwMDAwOEEzNjAwMDIyMjdCREZGRTBBRkIxMDAxNDUyCis6MTAxNzUwMDBBRkIwMDAxMEFGQkYwMDE4MzBCMUZGRkYwRTAwMDI1MDU1Cis6MTAxNzYwMDAwMDgwODAyMTkzNjIwMDNGMjQwMzAwMDQzMDQyMDBGRjg4Cis6MTAxNzcwMDAxNDQzMDAwQzAyMDAyMDIxMTIyMDAwMDgyNDAyMDAwQTU5Cis6MTAxNzgwMDAwRTAwMDUzMTAwMDAwMDAwOTM2MjAwMDUyNDAzRkZGRUY3Cis6MTAxNzkwMDAwMDQzMTAyNEEzNjIwMDA1MjQwMjAwMTJBMzYyMDAzRjRDCis6MTAxN0EwMDAwMjAwMjAyMTBFMDAwMjU5QTM2MDAwODExNjIwMDAwM0QwCis6MTAxN0IwMDAwMjAwMjAyMTBFMDAwNTk1MDAwMDAwMDAwMjAwMjAyMUZCCis6MTAxN0MwMDAzMjI2MDBGRjhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMEI5Cis6MTAxN0QwMDAyNDA1MDAzODBBMDAwNTM4MjdCRDAwMjAyN0JERkZFMDlBCis6MTAxN0UwMDBBRkJGMDAxQ0FGQjIwMDE4QUZCMTAwMTRBRkIwMDAxMDEzCis6MTAxN0YwMDAwRTAwMDI1MDAwODA4MDIxMEUwMDA1MzEwMDAwMDAwMDI0Cis6MTAxODAwMDA5MzYyMDAzRjI0MTIwMDE4MzA1MTAwRkYxMjMyMDAwMzhGCis6MTAxODEwMDAwMjAwMjAyMTI0MDIwMDEyQTM2MjAwM0Y5MzYyMDAwNTBGCis6MTAxODIwMDAyNDAzRkZGRTAwNDMxMDI0MEUwMDAyNTlBMzYyMDAwNUFBCis6MTAxODMwMDAwMjAwMjAyMTI0MDUwMDIwMTYzMjAwMDcwMDAwMzAyMTdDCis6MTAxODQwMDA4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDMyCis6MTAxODUwMDAwQTAwMDI1RTI3QkQwMDIwOEZCRjAwMUM4RkIyMDAxODU3Cis6MTAxODYwMDA4RkIxMDAxNDhGQjAwMDEwMjQwNTAwMzkwQTAwMDUzODJDCis6MTAxODcwMDAyN0JEMDAyMDI3QkRGRkU4QUZCMDAwMTBBRkJGMDAxNEE4Cis6MTAxODgwMDA5NzQyMDEwQzI0MDUwMDM2MDA4MDgwMjExNDQwMDAxMDhFCis6MTAxODkwMDAzMDQ2MDBGRjBFMDAwMjUwMDAwMDAwMDAyNDAyMDAxMjNCCis6MTAxOEEwMDBBMzYyMDAzRjkzNjIwMDA1MzQ0MjAwMTAwRTAwMDUzMTMwCis6MTAxOEIwMDBBMzYyMDAwNTBFMDAwMjU5MDIwMDIwMjEwMjAwMjAyMTJGCis6MTAxOEMwMDAwRTAwMDI1RTI0MDUwMDIwMEEwMDA2MDQwMDAwMDAwMDRECis6MTAxOEQwMDAwRTAwMDUzODAwMDAwMDAwMEUwMDAyNTAwMjAwMjAyMTFBCis6MTAxOEUwMDA5MzYyMDAyMzI0MDNGRjlGMDIwMDIwMjEwMDQzMTAyNDYxCis6MTAxOEYwMDA4RkJGMDAxNDhGQjAwMDEwQTM2MjAwMjMwQTAwMDI1OUFBCis6MTAxOTAwMDAyN0JEMDAxODI3QkRGRkUwQUZCRjAwMThBRkIxMDAxNDFFCis6MTAxOTEwMDBBRkIwMDAxMDMwQjEwMEZGMEUwMDAyNTAwMDgwODAyMUY3Cis6MTAxOTIwMDAyNDAyMDAxMjBFMDAwNTMxQTM2MjAwM0YwRTAwMDI1OThFCis6MTAxOTMwMDAwMjAwMjAyMTAyMDAyMDIxMDIyMDMwMjE4RkJGMDAxODQ4Cis6MTAxOTQwMDA4RkIxMDAxNDhGQjAwMDEwMjQwNTAwMzUwQTAwMDUzODRGCis6MTAxOTUwMDAyN0JEMDAyMEEzODAwMDJDMDNFMDAwMDhBMzgwMDAyREY5Cis6MTAxOTYwMDA4RjQyMDI3ODA0NDBGRkZFOEY4MjAwMzRBRjQyMDI0MDczCis6MTAxOTcwMDAyNDAyMDAwMkEzNDIwMjQ0M0MwMjEwMDAwM0UwMDAwOERCCis6MTAxOTgwMDBBRjQyMDI3ODNDMDM2MDAwOEM2MjU0MDAzMDQyMDAwODkxCis6MTAxOTkwMDAxNDQwRkZGRDAwMDAwMDAwOEM2MjU0MDhBRjgyMDAwQzcwCis6MTAxOUEwMDAyNDAyMDA1MkFDNjA1NDA4QUM2NDU0MzBBQzYyNTQzNDJECis6MTAxOUIwMDAyNDAyMDAwODAzRTAwMDA4QUM2MjU0MDAzQzAyNjAwMDBFCis6MTAxOUMwMDA4QzQyNTQwMDMwNDIwMDA4MTA0MDAwMDUzQzAzNjAwMDg3Cis6MTAxOUQwMDA4QzYyNTQwMDMwNDIwMDA4MTQ0MEZGRkQwMDAwMDAwMEZCCis6MTAxOUUwMDA4RjgzMDAwQzNDMDI2MDAwMDNFMDAwMDhBQzQzNTQwODA1Cis6MTAxOUYwMDA5MEEzMDAwMDI0MDIwMDA1MDA4MDQwMjEzMDYzMDAzRkQ2Cis6MTAxQTAwMDAwMDAwNDgyMTE0NjIwMDA1MDAwMDUwMjE5MEEyMDAxQzMzCis6MTAxQTEwMDA5NEEzMDAxRTMwNDkwMEZGMzA2QUZGRkZBRDAwMDAwQ0E4Cis6MTAxQTIwMDBBRDAwMDAxMEFEMDAwMDI0OTUwMjAwMTQ4RDA1MDAxQ0NGCis6MTAxQTMwMDA4RDA0MDAxODMwNDJGRkZGMDA0OTEwMjMwMDAyMTEwMEZFCis6MTAxQTQwMDAwMDAyMzdDMzAwNDAzODIxMDA4NjIwMjMwMEEyMTAyQjVCCis6MTAxQTUwMDAwMDgyMjAyMzAwQTcyODIzQUQwNTAwMUNBRDA0MDAxODM4Cis6MTAxQTYwMDBBNTA5MDAxNEE1MDkwMDIwQTUwQTAwMTYwM0UwMDAwODM2Cis6MTAxQTcwMDBBNTBBMDAyMjhGNDIwMUY4MDQ0MEZGRkUyNDAyMDAwMjYyCis6MTAxQTgwMDBBRjQ0MDFDMEEzNDIwMUM0M0MwMjEwMDAwM0UwMDAwOEJGCis6MTAxQTkwMDBBRjQyMDFGODNDMDIwODAwOEM0MjAwQjQyN0JERkZFOEM5Cis6MTAxQUEwMDBBRkJGMDAxNDI0NDIwMDAxQUZCMDAwMTAzQzAxMDgwMDk5Cis6MTAxQUIwMDBBQzIyMDBCNDhGNDMwMDI0M0MwMjAwMUYzMEFBMDBGRjc4Cis6MTAxQUMwMDAzNDQyRkY4MDMwRDgwMEZGMDA2MjgwMjQwMDgwRjgyMTdCCis6MTAxQUQwMDAzMEVGMDBGRjExNTgwMDNCMDE0MDU4MjEyNDBDRkY4MERCCis6MTAxQUUwMDAzQzE5MDAwQTMxNjMwMDdGMDAwMzEwQzAwMDAzMTk0MDU1Cis6MTAxQUYwMDAwMDYyMTgyMTNDMDIwODAwOEM0MjAwREMyNTY4MDAwMUNECis6MTAxQjAwMDAzMTBEMDA3RjAzRTIxMDIxMDA0MzEwMjEzMDQzMDA3RjlDCis6MTAxQjEwMDAwMzQzMTgyMTAwNEMxMDI0MDA3OTQ4MjFBRjQyMDAyNENGCis6MTAxQjIwMDA4RDIyMDAyNDAxNkMxODI0MDA2QzcwMjZBRDIyMDAwQzVDCis6MTAxQjMwMDA4RDIyMDAyNDMxMDgwMEZGQUQyMjAwMTA5NTIyMDAxNEYwCis6MTAxQjQwMDA5NTIzMDAyMDhEMjcwMDFDMzA0MkZGRkYzMDYzRkZGRkVDCis6MTAxQjUwMDA4RDI2MDAxODAwNDMxMDIzMDAwMjExMDAwMDAyMjdDMzQ1Cis6MTAxQjYwMDAwMDQwMjgyMTAwQzQzMDIzMDBFMjEwMkIwMEMyMzAyM0EzCis6MTAxQjcwMDAwMEU1MzgyM0FEMjcwMDFDQUQyNjAwMTg5NTIyMDAyMDczCis6MTAxQjgwMDBBNTIyMDAxNDk1MjIwMDIyMTU0QjAwMEFBNTIyMDAxNjVBCis6MTAxQjkwMDA4RDIzMDAyNDhEMjIwMDA4MjU0NjAwMDEzMTQ1MDA4MDU4Cis6MTAxQkEwMDAxNDYyMDAwNDMwQzQwMDdGMTA4RjAwMDIzOEFBMDA4MDQ1Cis6MTAxQkIwMDAwMEMwNTAyMTUxQUYwMDAxMzFDODAwRkYxNTE4RkZDOTA2Cis6MTAxQkMwMDAwMTAwNTgyMThGODQwMDM0MzA4MjAwN0YwMzQyMTgyMUE1Cis6MTAxQkQwMDAzQzAyMDAwQTAwNjIxODIxMjQwMkZGODAwMDgyMjAyNEI3Cis6MTAxQkUwMDBBRjQ0MDAyNEEwNkEwMDc5QTA2QTAwODM4QzYyMDA1MDkwCis6MTAxQkYwMDA4Rjg0MDAzNEFDNjIwMDcwOEM2NTAwNzQzQzAyN0ZGRkZGCis6MTAxQzAwMDAzNDQyRkZGRjAwQTIyODI0MEUwMDA2NkJBQzY1MDA3NDZFCis6MTAxQzEwMDBBRjUwMDAyNDhGQkYwMDE0OEZCMDAwMTAwM0UwMDAwODA1Cis6MTAxQzIwMDAyN0JEMDAxODI3QkRGRkMwQUZCRTAwMzhBRkI3MDAzNEQ2Cis6MTAxQzMwMDBBRkI1MDAyQ0FGQjIwMDIwQUZCMTAwMUNBRkIwMDAxOEEwCis6MTAxQzQwMDBBRkJGMDAzQ0FGQjYwMDMwQUZCNDAwMjhBRkIzMDAyNDQ0Cis6MTAxQzUwMDA4RjQ1MDAyNDhGNDYwMDI4OEY0MzAwMkMzQzAyMDAxRjM0Cis6MTAxQzYwMDAzNDQyRkY4MDAwNjIxODI0MDBDMjMwMjQwMDgwQTgyMTgyCis6MTAxQzcwMDBBRkEzMDAxNDAwQTJGMDI0MEUwMDA2MkZBRkE2MDAxMEEwCis6MTAxQzgwMDAzQzAyMDgwMDhDNDIwMEUwMjQxMEZGODAwMzYwODgyMUExCis6MTAxQzkwMDAwMkEyMTAyMTAwNTAxMDI0QUY0MjAwMjQzQzAyMDgwMDkwCis6MTAxQ0EwMDA4QzQyMDBFMDAyQTIxMDIxMzA0MjAwN0YwMzQyMTgyMTQyCis6MTAxQ0IwMDAzQzAyMDAwQTAwNjI5MDIxOTI0MjAwRDI5MzYzMDA4NEE5Cis6MTAxQ0MwMDAzMDU3MDBGRjMwNjMwMEZGMjQwMjAwMDExMDYyMDAzNDJGCis6MTAxQ0QwMDAwMzYwMjAyMTI0MDIwMDAyMTQ2MjAwMzYwMDAwMDAwMDhDCis6MTAxQ0UwMDAwRTAwMTIxNjAyNDAyODIxOTIyMzAwODM5MjIyMDA4M0M0Cis6MTAxQ0YwMDAzMDYzMDA3RjMwNDIwMDdGMDAwMjEwQzAwMDAzMTk0MEIzCis6MTAxRDAwMDAwMDYyMTgyMTNDMDIwODAwOEM0MjAwREMwMkEyMTAyMTczCis6MTAxRDEwMDAwMDQzMzgyMTAwRjAxMDI0QUY0MjAwMjg5MjI1MDA3OEJCCis6MTAxRDIwMDA5MjI0MDA4MzMwRTIwMDdGMDM0MjE4MjEzQzAyMDAwQzIxCis6MTAxRDMwMDAxNDg1MDAwNzAwNjI4MDIxMjQwMkZGRkZBMjQyMDBGMTA3Cis6MTAxRDQwMDAyNDAyRkZGRkE2NDIwMEYyMEEwMDA3MjcyNDAyRkZGRjM5Cis6MTAxRDUwMDA5NjAyMDAyMEEyNDIwMEYxOTYwMjAwMjJBNjQyMDBGMjYyCis6MTAxRDYwMDA4RTAyMDAyNEFFNDIwMEY0OTIyMjAwODNBMjQyMDBGMEQwCis6MTAxRDcwMDA4RTQyMDBDOEFFNDIwMEZDOEU0MjAwQzRBRTQyMDBGODYzCis6MTAxRDgwMDA4RTIyMDA1MEFFNDIwMTAwOEU0MjAwQ0NBRTQyMDEwNEQxCis6MTAxRDkwMDA5MjIyMDA4NTMwNDIwMDNGMEEwMDA3ODIzNDQyMDA0MDEwCis6MTAxREEwMDAwRTAwMTIzOTAyNDAyODIxOTIyMjAwODUwQTAwMDc4MjgzCis6MTAxREIwMDAzMDQyMDAzRjkzNjIwMDg1MjQwM0ZGREYzMDQyMDAzRjQyCis6MTAxREMwMDBBMzYyMDA4NTkzNjIwMDg1MDA0MzEwMjRBMzYyMDA4NTBFCis6MTAxREQwMDA5MzYzMDA4MzkzNjIwMDc4MzA3NDAwRkYzMDQyMDBGRjA5Cis6MTAxREUwMDAxMDU0MDAzNjI0MEFGRjgwM0MwQzAwMEMzMjgzMDA3RjI0Cis6MTAxREYwMDAwMDAzMTBDMDAwMDMxOTQwMDA2MjE4MjEzQzAyMDgwMEQzCis6MTAxRTAwMDA4QzQyMDBEQzI2ODgwMDAxMzEwOTAwN0YwMkEyMTAyMUVCCis6MTAxRTEwMDAwMDQzMzgyMTMwRTIwMDdGMDM0MjE4MjEwMEVBMTAyNEY5Cis6MTAxRTIwMDBBRjQyMDAyODAwNkM4MDIxOEUwMjAwMjQwMjhBMTgyNDEwCis6MTAxRTMwMDAwMDZBNTgyNkFFMDIwMDBDOEUwMjAwMjQzMTA4MDBGRjEyCis6MTAxRTQwMDBBRTAyMDAxMDk2MDIwMDE0OTYwMzAwMjA4RTA3MDAxQ0JDCis6MTAxRTUwMDAzMDQyRkZGRjMwNjNGRkZGOEUwNjAwMTgwMDQzMTAyMzVGCis6MTAxRTYwMDAwMDAyMTEwMDAwMDIyN0MzMDA0MDI4MjEwMEM0MzAyM0QzCis6MTAxRTcwMDAwMEUyMTAyQjAwQzIzMDIzMDBFNTM4MjNBRTA3MDAxQzFGCis6MTAxRTgwMDBBRTA2MDAxODk2MDIwMDIwQTYwMjAwMTQ5NjAyMDAyMjU4Cis6MTAxRTkwMDBBNjAyMDAxNjkyMjIwMDc5MzA0MjAwRkYxMDU0MDAwNzdCCis6MTAxRUEwMDAwMDAwMDAwMDUxMzcwMDAxMzE2ODAwRkY5MjIyMDA3OEU1Cis6MTAxRUIwMDAzMDQyMDBGRjE0NDhGRkNEMDEwMEEwMjE5MjIyMDA4MzkwCis6MTAxRUMwMDBBMjIyMDA3OThFMjIwMDUwMEEwMDA3RTJBRTIyMDA3MEEyCis6MTAxRUQwMDBBMjIyMDA4NThFMjIwMDRDMjQwNUZGODBBRTQyMDEwQzE4Cis6MTAxRUUwMDA5MjIyMDA4NTM0NDIwMDIwQTIyMjAwODU5MjQyMDBEMTM1Cis6MTAxRUYwMDAzQzAzMDgwMDhDNjMwMERDMzA1NDAwRkYzQzAyMDgwMDA3Cis6MTAxRjAwMDA4QzQyMDBFNDAwMTQzMTQwMDAxNDIwQzAwMkEzMTgyMUM4Cis6MTAxRjEwMDAwMEM0MjAyMTAyQTIxMDIxMDA2NDM4MjEwMDQ2MTAyMUIzCis6MTAxRjIwMDAwMDQ1MTgyNDAwRTUyODI0QUY0NTAwMjhBRjQzMDAyQ0M1Cis6MTAxRjMwMDAzMDQyMDA3RjkyNDQwMEQwMzBFMzAwN0YwMzQyMjgyMUVBCis6MTAxRjQwMDAwMzQzMTgyMTNDMDIwMDBDMDA2MjgwMjEzQzAyMDAwRTc5Cis6MTAxRjUwMDAzMDk2MDBGRjAwQTI5ODIxMTI5NjAwMkEwMDAwMDAwMDhGCis6MTAxRjYwMDA4RTAyMDAwQzAyMDAyMDIxMDI2MDI4MjExMDQwMDAyNTcyCis6MTAxRjcwMDAyNjEwMDAyODBFMDAwNjRBMDAwMDAwMDA5MjYyMDAwREE0Cis6MTAxRjgwMDAyNjgzMDAwMTMwNzQwMEZGMzA0MjAwN0ZBMjYyMDAwRDAyCis6MTAxRjkwMDAyNDA0RkY4MDE2OTdGRkYwMjY3MzAwMjAzQzAyMDgwMEZGCis6MTAxRkEwMDA4QzQyMDBEQzAwMDBBMDIxMDJBMjEwMjEwMDQ0MTAyNDc5Cis6MTAxRkIwMDBBRjQyMDAyODNDMDIwODAwOEM0MjAwRTQzQzAzMDgwMEM5Cis6MTAxRkMwMDA4QzYzMDBEQzAyQTIxMDIxMDA0NDEwMjRBRjQyMDAyQ0RDCis6MTAxRkQwMDAzQzAyMDgwMDhDNDIwMEU0MDJBMzE4MjEzMDYzMDA3RjE5Cis6MTAxRkUwMDAwMkEyMTAyMTMwNDIwMDdGMDM0MjIwMjEwMzQzMTgyMTI2Cis6MTAxRkYwMDAzQzAyMDAwQzAwNjI4MDIxM0MwMjAwMEUwQTAwMDdBNDkzCis6MTAyMDAwMDAwMDgyOTgyMThFNDIwMEQ4QUUyMjAwNTA4RTQyMDBEODI1Cis6MTAyMDEwMDBBRTIyMDA3MDkyMjUwMDgzOTI0NjAwRDE5MjIzMDA4MzY1Cis6MTAyMDIwMDA5MjQ0MDBEMTI0MDJGRjgwMDBBMjI4MjQzMDYzMDA3RjY0Cis6MTAyMDMwMDAzMDg0MDBGRjAwQTYyODI1MDA2NDE4MkExMDYwMDAwMkUyCis6MTAyMDQwMDAzMEE1MDBGRjM4QTUwMDgwQTIyNTAwODNBMjI1MDA3OUQ1Cis6MTAyMDUwMDAwRTAwMDYzRDAwMDAwMDAwOTIyMjAwN0UwMkEwMjAyMTFBCis6MTAyMDYwMDBBMjIyMDA3QThFMjMwMDc0M0MwMjdGRkYzNDQyRkZGRkRECis6MTAyMDcwMDAwMDYyMTgyNDBFMDAwNjZCQUUyMzAwNzQ4RkEyMDAxMEJECis6MTAyMDgwMDBBRjVFMDAyNDhGQkYwMDNDQUY0MjAwMjg4RkJFMDAzOEY3Cis6MTAyMDkwMDA4RkEyMDAxNDhGQjcwMDM0OEZCNjAwMzA4RkI1MDAyQzlDCis6MTAyMEEwMDA4RkI0MDAyODhGQjMwMDI0OEZCMjAwMjA4RkIxMDAxQ0EyCis6MTAyMEIwMDA4RkIwMDAxODI3QkQwMDQwMDNFMDAwMDhBRjQyMDAyQzlECis6MTAyMEMwMDA5MEEyMDAwMDI0NDIwMDAxQTBBMjAwMDAzQzAzMDgwMEVFCis6MTAyMEQwMDA4QzYzMDBGNDMwNDIwMEZGMTQ0MzAwMEYwMDgwMzAyMTc1Cis6MTAyMEUwMDBBMEEwMDAwMDNDMDIwODAwOEM0MjAwRTQ4Rjg0MDAzNDcxCis6MTAyMEYwMDAwMDgyMjAyMTMwODIwMDdGMDM0MjE4MjEzQzAyMDAwQzI0Cis6MTAyMTAwMDAwMDYyMTgyMTI0MDJGRjgwMDA4MjIwMjRBQ0MzMDAwMDVBCis6MTAyMTEwMDAwM0UwMDAwOEFGNDQwMDI4OEM4MjAwMDAyNDQyMDAyMDI1Cis6MTAyMTIwMDAwM0UwMDAwOEFDODIwMDAwOTRDMjAwMDAzQzA4MDgwMEY0Cis6MTAyMTMwMDA5NTA4MDBDQTMwRTdGRkZGMDA4MDQ4MjEwMTAyMTAyMTA2Cis6MTAyMTQwMDBBNEMyMDAwMDk0QzIwMDAwMzA0MkZGRkYwMEUyMTAyQjQ2Cis6MTAyMTUwMDA1NDQwMDAwMUE0QzcwMDAwOTRBMjAwMDAzQzAzMDgwMDAyCis6MTAyMTYwMDA4QzYzMDBDQzI0NDIwMDAxQTRBMjAwMDA5NEEyMDAwMEQxCis6MTAyMTcwMDAzMDQyRkZGRjU0NDMwMDA3OEY4NjAwMjgwMTA3MTAyQkQxCis6MTAyMTgwMDBBNEEwMDAwMDU0NDAwMDAxMDEwMDM4MjFBNEM3MDAwMEIxCis6MTAyMTkwMDA4Rjg2MDAyODhDQzQwMDFDQUY0NDAwM0M5NEEyMDAwMDMxCis6MTAyMUEwMDA4RjQzMDAzQzMwNDJGRkZGMDAwMjEwQzAwMDYyMTgyMTQ0Cis6MTAyMUIwMDBBRjQzMDAzQzhGNDIwMDNDMDA4MjIwMjMxODgwMDAwNDgzCis6MTAyMUMwMDAwMDAwMDAwMDhDQzIwMDE4MEEwMDA4NDMyNDQyMDAwMUVECis6MTAyMUQwMDA4Q0MyMDAxOEFGNDIwMDM4M0MwMjAwNTAzNDQyMDAxMDVDCis6MTAyMUUwMDBBRjQyMDAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENFCis6MTAyMUYwMDA4RjQyMDAwMDMwNDIwMDIwMTA0MEZGRkQwMDAwMDAwMDMwCis6MTAyMjAwMDA4RjQyMDQwNEFEMjIwMDA0OEY0MjA0MDBBRDIyMDAwMDdFCis6MTAyMjEwMDAzQzAyMDAyMEFGNDIwMDMwMDNFMDAwMDgwMDAwMDAwMDU0Cis6MTAyMjIwMDAyN0JERkZFMEFGQjIwMDE4QUZCMTAwMTRBRkIwMDAxMDhGCis6MTAyMjMwMDBBRkJGMDAxQzk0QzIwMDAwMDBDMDgwMjEzQzEyMDgwMDA3Cis6MTAyMjQwMDA5NjUyMDBDNjI0NDIwMDAxQTYwMjAwMDA5NjAzMDAwMDM4Cis6MTAyMjUwMDA5NEUyMDAwMDAwRTAzMDIxMTQ0MzAwMDU4RkIxMDAzMDBCCis6MTAyMjYwMDAwRTAwMDgxODAyNDAzODIxMEEwMDA4NzUwMDAwMDAwMDFFCis6MTAyMjcwMDA4QzgzMDAwNDhDODIwMDA0MjQ0MjAwNDAwNDYxMDAwNzI3Cis6MTAyMjgwMDBBQzgyMDAwNDhDODIwMDA0MDQ0MDAwMDQwMDAwMDAwMEMyCis6MTAyMjkwMDA4QzgyMDAwMDI0NDIwMDAxQUM4MjAwMDA5NjAyMDAwMDAzCis6MTAyMkEwMDAzMDQyRkZGRjUwNTIwMDAxQTYwMDAwMDA5NjIyMDAwMEJECis6MTAyMkIwMDAyNDQyMDAwMUE2MjIwMDAwOEY4MjAwMjg5NjIzMDAwMEZECis6MTAyMkMwMDA5NDQyMDAxNjE0NDMwMDA0OEZCRjAwMUMyNDAyMDAwMTM2Cis6MTAyMkQwMDBBNjIyMDAwMDhGQkYwMDFDOEZCMjAwMTg4RkIxMDAxNDFGCis6MTAyMkUwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjA4Rjg5MDAyODcwCis6MTAyMkYwMDAyN0JERkZFMEFGQkYwMDE4OEQyMjAwMjgyNzQ4MDQwMDRCCis6MTAyMzAwMDAzMEU3MDBGRkFGNDIwMDM4OEQyMjAwMkNBRjg4MDAzMDRDCis6MTAyMzEwMDBBRjQyMDAzQzNDMDIwMDA1QUY0MjAwMzAwMDAwMDAwMDJDCis6MTAyMzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFECis6MTAyMzMwMDAwMDAwMDAwMDhDODIwMDBDOEM4MjAwMENBRDAyMDAwMEJBCis6MTAyMzQwMDA4QzgyMDAxMEFEMDIwMDA0OEM4MjAwMThBRDAyMDAwOERGCis6MTAyMzUwMDA4QzgyMDAxQ0FEMDIwMDBDOENBMjAwMTRBRDAyMDAxMDk3Cis6MTAyMzYwMDA4QzgyMDAyMEFEMDIwMDE0OTA4MjAwMDUzMDQyMDBGRkY0Cis6MTAyMzcwMDAwMDAyMTIwMEFEMDIwMDE4OENBMjAwMThBRDAyMDAxQzcxCis6MTAyMzgwMDA4Q0EyMDAwQ0FEMDIwMDIwOENBMjAwMTBBRDAyMDAyNDMzCis6MTAyMzkwMDA4Q0EyMDAxQ0FEMDIwMDI4OENBMjAwMjBBRDAyMDAyQ0YzCis6MTAyM0EwMDBBRDA2MDAzMEFEMDAwMDM0OTc4MzAwMjYzNDAyRkZGRkY1Cis6MTAyM0IwMDAxNDYyMDAwMjAwNjAyMDIxMzQwNEZGRkYxMEUwMDAxMUNECis6MTAyM0MwMDBBRDA0MDAzODk1MjMwMDM2OTUyNDAwMzYyNDAyMDAwMTIwCis6MTAyM0QwMDAzMDYzRkZGRjAwMDMxOEMyMDA2OTE4MjE5MDY1MDA0MEI4Cis6MTAyM0UwMDAzMDg0MDAwNzAwODIxMDA0MDA0NTEwMjVBMDYyMDA0MEUwCis6MTAyM0YwMDA4RjgyMDAyODk0NDIwMDU2MzA0MkZGRkYwQTAwMDhEQzFBCis6MTAyNDAwMDBBRDAyMDAzQzk1MjMwMDM2OTUyNDAwMzYyNDAyMDAwMURECis6MTAyNDEwMDAzMDYzRkZGRjAwMDMxOEMyMDA2OTE4MjE5MDY1MDA0MDc3Cis6MTAyNDIwMDAzMDg0MDAwNzAwODIxMDA0MDAwMjEwMjcwMDQ1MTAyNEE5Cis6MTAyNDMwMDBBMDYyMDA0MEFEMDAwMDNDMDAwMDAwMDAwMDAwMDAwMDcxCis6MTAyNDQwMDAwMDAwMDAwMDNDMDIwMDA2MzQ0MjAwNDBBRjQyMDAzMDcxCis6MTAyNDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RjQyMDAwMEFCCis6MTAyNDYwMDAzMDQyMDAxMDEwNDBGRkZEOEY4NjAwMjhBRjg4MDAzMEZBCis6MTAyNDcwMDAyNEMyMDA1NjI0QzcwMDNDMjRDNDAwMjgyNEM1MDAzMkNFCis6MTAyNDgwMDAyNEM2MDAzNjBFMDAwODU2QUZBMjAwMTA4RkJGMDAxOEY5Cis6MTAyNDkwMDAwM0UwMDAwODI3QkQwMDIwOEY4MzAwMjQzQzA2MDgwMENECis6MTAyNEEwMDA4Q0M2MDBFODhGODIwMDM0MzA2MzNGRkYwMDAzMTk4MDQwCis6MTAyNEIwMDAwMDQ2MTAyMTAwNDMxMDIxMjQwM0ZGODAzMDQ2MDA3Rjk2Cis6MTAyNEMwMDAwMDQzMTAyNEFGNDIwMDI4MDM0NjE4MjEzQzAyMDAwQ0IwCis6MTAyNEQwMDAwMDYyMzAyMTkwQzIwMDBEMzBBNTAwRkYwMDAwMzgyMUJECis6MTAyNEUwMDAzNDQyMDAxMEEwQzIwMDBEOEY4OTAwMjg4RjhBMDAyNDdBCis6MTAyNEYwMDA5NTIzMDAzNjAwMEExMzgyMzA0ODAwMDMyNDAyMDAwMUFECis6MTAyNTAwMDBBNEMzMDAwRTExMDIwMDBCMjkwMjAwMDIxMDQwMDAwNUI2Cis6MTAyNTEwMDAyNDAyMDAwMjExMDAwMDBDMjQwMzAwMDEwQTAwMDkyMDFCCis6MTAyNTIwMDAwMDAwMTgyMTExMDIwMDA2MDAwMDAwMDAwQTAwMDkyMDI2Cis6MTAyNTMwMDAwMDAwMTgyMThDQzIwMDJDMEEwMDA5MjAyNDQzMDAwMTRECis6MTAyNTQwMDA4Q0MyMDAxNDI0NDMwMDAxOENDMjAwMTgwMDQzMTAyQkRECis6MTAyNTUwMDA1MDQwMDAwOTI0MDcwMDAxMjQwMjAwMjcxNEEyMDAwM0IwCis6MTAyNTYwMDAwMDAwMDAwMDBBMDAwOTJDMjQwNzAwMDE5NTIyMDAzRTBCCis6MTAyNTcwMDAyNDQyMDAwMUE1MjIwMDNFMDAwQTEzODIzMDQzMDAwM0RBCis6MTAyNTgwMDAyQzYyMDAwMjEwNDAwMDA5MDA4MDI4MjExNDYwMDAwNDIxCis6MTAyNTkwMDAwMDAwMDAwMDk0QzIwMDM2MEEwMDA5M0MzMDQ2RkZGRkVDCis6MTAyNUEwMDA4Q0M2MDAzODBBMDAwOTNDMDA4MDI4MjEwMDAwMzAyMTM4Cis6MTAyNUIwMDAzQzA0MDgwMDI0ODQ0Qjc4MEEwMDA4ODkwMDAwMDAwMENECis6MTAyNUMwMDAyNzQ5MDEwMDhEMjIwMDBDOTUyMzAwMDYwMTIwMjAyMUJGCis6MTAyNUQwMDAwMDAyMTYwMjMwNDYwMDNGMzA2M0ZGRkYyNDAyMDAyNzRFCis6MTAyNUUwMDAwMEMwMjgyMTI4QzcwMDI4MTBDMjAwMEVBRjgzMDAyNDk1Cis6MTAyNUYwMDAxMEUwMDAwODI0MDIwMDMxMjQwMjAwMjExMEMyMDAwOTZBCis6MTAyNjAwMDAyNDAyMDAyNTEwQzIwMDA3OTM4MjAwMkQwQTAwMDk1QkY2Cis6MTAyNjEwMDAwMDAwMDAwMDEwQzIwMDA1OTM4MjAwMkQwQTAwMDk1QjMzCis6MTAyNjIwMDAwMDAwMDAwMDBBMDAwOEY0MDAwMDAwMDAwQTAwMDYyNjZFCis6MTAyNjMwMDAwMDAwMDAwMDk1MjMwMDA2OTEyNDAwMDU4RDI1MDAwQzY0Cis6MTAyNjQwMDA4RDI2MDAxMDhEMjcwMDE4OEQyODAwMUM4RDI5MDAyMDU0Cis6MTAyNjUwMDAyNDQyMDAwMTNDMDEwODAwQTQyMzRCN0UzQzAxMDgwMEY5Cis6MTAyNjYwMDBBMDI0NEI3RDNDMDEwODAwQUMyNTRCODQzQzAxMDgwMEI0Cis6MTAyNjcwMDBBQzI2NEI4ODNDMDEwODAwQUMyNzRCOTAzQzAxMDgwMDdECis6MTAyNjgwMDBBQzI4NEI5NDNDMDEwODAwQUMyOTRCOTgwM0UwMDAwOEFGCis6MTAyNjkwMDBBMzgyMDAyRDhGODcwMDI4MjdCREZGQzBBRkIzMDAzNDcxCis6MTAyNkEwMDBBRkIyMDAzMEFGQjEwMDJDQUZCMDAwMjhBRkJGMDAzOEUwCis6MTAyNkIwMDAzQzAyMDgwMDhDNDIwMEQwOTRFMzAwMzAzMEIwRkZGRkIxCis6MTAyNkMwMDAwMDUwMTAwNzMwNDVGRkZGMzA2M0ZGRkYwMEMwOTgyMTI2Cis6MTAyNkQwMDBBN0EyMDAxMDNDMTEwODAwOTYzMTAwQzYxNEEzMDAwNjAyCis6MTAyNkUwMDAzMDkyRkZGRjhDRTIwMDI0MjQ0MjAwMzBBRjQyMDAzQ0Q1Cis6MTAyNkYwMDAwQTAwMDk5NDhDRTIwMDIwOTRFMjAwMzIzMDQyRkZGRjhECis6MTAyNzAwMDA1NEEyMDAwODI3QTQwMDE4OENFMjAwMkMyNDQyMDAzMEI4Cis6MTAyNzEwMDBBRjQyMDAzQzhDRTIwMDI4QUY0MjAwMzgwQTAwMDlBMjE4Cis6MTAyNzIwMDA4Rjg0MDAyODI3QTUwMDEwMjdBNjAwMjAwMjIwMzgyMTJBCis6MTAyNzMwMDAwRTAwMDgxOEE3QTAwMDIwOEZBMjAwMTgyNDQyMDAzMDI1Cis6MTAyNzQwMDBBRjQyMDAzODhGQTIwMDFDQUY0MjAwM0M4Rjg0MDAyOEFCCis6MTAyNzUwMDAzQzAyMDAwNUFGNDIwMDMwOTQ4MjAwMzQyNzQzMDQwMDVECis6MTAyNzYwMDAzMDQyRkZGRjAyMDIxMDJCMTQ0MDAwMDdBRjgzMDAzMEZECis6MTAyNzcwMDA5NDgyMDA1NDk0ODMwMDM0MDIwMjEwMjEwMDQzMTAyM0Y5Cis6MTAyNzgwMDAwQTAwMDlCNjMwNDNGRkZGOTQ4MzAwNTQ5NDgyMDAzNDVBCis6MTAyNzkwMDAwMjIzMTgyMTAwNTAxMDIzMDA2MjE4MjMzMDYzRkZGRjJBCis6MTAyN0EwMDA5NDgyMDAxNjMwNDJGRkZGMTQ0MzAwMDMwMDAwMDAwMDMzCis6MTAyN0IwMDAwQTAwMDlDNDI0MDMwMDAxOTQ4MjAwMTYzMDQyRkZGRjdFCis6MTAyN0MwMDAwMDQzMTAyQjEwNDAwMDA1OEY4MjAwMzA5NDgyMDAxNkM5Cis6MTAyN0QwMDAwMDYyMTAyMzMwNDNGRkZGOEY4MjAwMzBBQzUzMDAwMEIzCis6MTAyN0UwMDBBQzQwMDAwNEFDNTIwMDA4QUM0MzAwMEMzQzAyMDAwNkI0Cis6MTAyN0YwMDAzNDQyMDAxMEFGNDIwMDMwMDAwMDAwMDAwMDAwMDAwMDMyCis6MTAyODAwMDAwMDAwMDAwMDhGNDIwMDAwMzA0MjAwMTAxMDQwRkZGRDI5Cis6MTAyODEwMDAwMDEwMThDMjAwNjQxODIxOTA2NTAwNDAzMjA0MDAwN0JGCis6MTAyODIwMDAyNDAyMDAwMThGQkYwMDM4OEZCMzAwMzQ4RkIyMDAzMDE0Cis6MTAyODMwMDA4RkIxMDAyQzhGQjAwMDI4MDA4MjEwMDQwMDQ1MTAyNUI1Cis6MTAyODQwMDAyN0JEMDA0MDAzRTAwMDA4QTA2MjAwNDAyN0JERkZBOEFDCis6MTAyODUwMDBBRkI2MDA1MEFGQjUwMDRDQUZCNDAwNDhBRkIzMDA0NEMyCis6MTAyODYwMDBBRkIxMDAzQ0FGQkYwMDU0QUZCMjAwNDBBRkIwMDAzOEQyCis6MTAyODcwMDA4QzkwMDAwMDNDMDIwODAwOEM0MjAwRTg4Rjg2MDAzNEY3Cis6MTAyODgwMDA5NjAzMDAwMjI0MTNGRjgwMDBDMjMwMjEzMDYzM0ZGRjEzCis6MTAyODkwMDAwMDAzMTk4MDAwQzMzODIxMDBGMzEwMjQ5MEIyMDAwMDE3Cis6MTAyOEEwMDBBRjQyMDAyQzkyMDMwMDAyMzBFMjAwN0YwMzQyMzAyMTRECis6MTAyOEIwMDAzQzAyMDAwRTAwQzI4ODIxMzA2MzAwQzAyNDAyMDA0MEE4Cis6MTAyOEMwMDAwMDgwQTgyMTAwQTBCMDIxMTQ2MjAwMjYwMDAwQTAyMUYxCis6MTAyOEQwMDA4RTM0MDAzODhFMjIwMDE4MTQ0MDAwMDIyNDAyMDAwMUI5Cis6MTAyOEUwMDBBRTIyMDAxODkyMDIwMDBEMzA0MjAwMjAxNDQwMDAxNTY0Cis6MTAyOEYwMDA4RjgyMDAzNDNDMDMwODAwOEM2MzAwREMwMDEyMzhDMDc3Cis6MTAyOTAwMDAwMDEyMzE0MDAwNDMxMDIxMDBDNzMwMjEwMDQ2MzgyMTE5Cis6MTAyOTEwMDAzMEUzMDAwNzNDMDIwMDgwMzBFNjAwNzgwMEMyMzAyNTNBCis6MTAyOTIwMDAwMzQzMTgyMTAwRjMxMDI0QUY0MjA4MDAyNDYzMDkwMDc4Cis6MTAyOTMwMDBBRjQ2MDgxMDhFMjIwMDE4OEM2MzAwMDgwMDQzMTAyMTU3Cis6MTAyOTQwMDBBRTIyMDAxODhFMjIwMDJDOEUyMzAwMTgyNDQyMDAwMTkzCis6MTAyOTUwMDAwMDYyMTgyQjEwNjAwMDNEMDAwMDAwMDAwQTAwMEE3ODk5Cis6MTAyOTYwMDAwMDAwMDAwMDkyMDMwMDAyMjQwMkZGQzAwMDQzMTAyNDc0Cis6MTAyOTcwMDAzMDQyMDBGRjE0NDAwMDA1MjQwMjAwMDFBRTIyMDAxODdFCis6MTAyOTgwMDA5NjIyMDAzNjBBMDAwQTYxMzA1NEZGRkY4RTIyMDAxNDlFCis6MTAyOTkwMDAyNDQyMDAwMUFFMjIwMDE4OTIwMjAwMDAwMDAyMTYwMDNDCis6MTAyOUEwMDAwMDAyMTYwMzA0NDEwMDI5MDAwMDAwMDA5NjAyMDAwMjA0Cis6MTAyOUIwMDAyN0E0MDAxMDAwODAyODIxQTdBMjAwMTY5NjAyMDAwMjdBCis6MTAyOUMwMDAyNDA3MDAwMTAwMDAzMDIxMzA0MkZGRkZBRjgyMDAyNEM1Cis6MTAyOUQwMDAwRTAwMDg4OUFGQTAwMDFDOTYwMzAwMDIzQzA0MDgwMDBBCis6MTAyOUUwMDA4Qzg0MDBFODhGODIwMDM0MzA2MzNGRkYwMDAzMTk4MDNECis6MTAyOUYwMDAwMDQ0MTAyMTAwNDMxMDIxMzA0MzAwN0YzQzA1MDAwQ0FGCis6MTAyQTAwMDAwMDUzMTAyNDAzNDMxODIxQUY0MjAwMjgwMDY1MTgyMTA5Cis6MTAyQTEwMDA5MDYyMDAwRDAwMTIyMTQwMzA0MjAwN0ZBMDYyMDAwRDQ0Cis6MTAyQTIwMDAzQzAzMDgwMDhDNjMwMEU0OEY4MjAwMzQwMDQzMTAyMUQzCis6MTAyQTMwMDAwMDQ0MzgyMTMwRTIwMDdGMDM0MjEwMjEwMDQ1MTAyMTdDCis6MTAyQTQwMDAwMEYzMTgyNEFGNDMwMDI4QUVBMjAwMDA5MjIyMDAwRDJDCis6MTAyQTUwMDAzMDQyMDAxMDEwNDAwMDEzMDJBMDIwMjE4RjgzMDAyODc0Cis6MTAyQTYwMDA4RUE0MDAwMDAyODAzMDIxOTQ2MjAwM0UyNDQyRkZGRkM5Cis6MTAyQTcwMDBBNDYyMDAzRTk0ODQwMDAyOTYyNTAwMEUzMDg0RkZGRjdECis6MTAyQTgwMDAwRTAwMDk3MzMwQTVGRkZGOEY4MjAwMjg5NDQzMDAzNEE1Cis6MTAyQTkwMDA5NjIyMDAwRTE0NDMwMDAzMDJBMDIwMjEyNDAyMDAwMTBDCis6MTAyQUEwMDBBMzgyMDAyQzAyQzAyODIxMEUwMDA3RkUwMDAwMDAwMEI3Cis6MTAyQUIwMDA4RkJGMDA1NDhGQjYwMDUwOEZCNTAwNEM4RkI0MDA0OEM0Cis6MTAyQUMwMDA4RkIzMDA0NDhGQjIwMDQwOEZCMTAwM0M4RkIwMDAzODBDCis6MTAyQUQwMDAwM0UwMDAwODI3QkQwMDU4OEY4MjAwMjgyN0JERkZEMEUzCis6MTAyQUUwMDBBRkI0MDAyOEFGQjIwMDIwQUZCRjAwMkNBRkIzMDAyNEJBCis6MTAyQUYwMDBBRkIxMDAxQ0FGQjAwMDE4OTA0NDAwRDA5MDQzMDBEMTlCCis6MTAyQjAwMDAwMDAwQTAyMTMwOTIwMEZGQTNBMzAwMTAzMDYzMDBGRjVCCis6MTAyQjEwMDA4QzUxMDBEODhDNTMwMERDMTA3MjAwMkIyNDAyMDAwMTcxCis6MTAyQjIwMDAzQzAzMDgwMDhDNjMwMEU0OTNBNDAwMTA4RjgyMDAzNEZGCis6MTAyQjMwMDAyNDA2RkY4MDAwMDQyMTQwMDA0MzEwMjEwMDQ0MTAyMTlFCis6MTAyQjQwMDAzMDQzMDA3RjAwNDYxMDI0QUY0MjAwMjgwMzQzMTgyMTgxCis6MTAyQjUwMDAzQzAyMDAwQzAwNjIxODIxOEM2MjAwMDQyN0E0MDAxNEJGCis6MTAyQjYwMDAyN0E1MDAxMDAyMjI4MDIxMDI3MDEwMjMwNDQwMDAxNUM2Cis6MTAyQjcwMDBBRkEzMDAxNDkwNjIwMDBEMDBDMjEwMjQzMDQyMDBGRjg5Cis6MTAyQjgwMDAxNDQwMDAwNzAyMDA4ODIxOTA2MjAwMEQzNDQyMDA0MDhBCis6MTAyQjkwMDAwRTAwMDdGRUEwNjIwMDBEMEEwMDBBQkQ5M0EyMDAxMEZECis6MTAyQkEwMDAwRTAwMDlFMTI0MTQwMDAxOEY4MzAwMjhBQzcwMDBEOEM2Cis6MTAyQkIwMDA5M0EyMDAxMEEwNjIwMEQxOTNBMjAwMTAxNDUyRkZEODdCCis6MTAyQkMwMDAwMDAwMDAwMDI0MDIwMDAxMTY4MjAwMDQ4RkJGMDAyQ0M4Cis6MTAyQkQwMDAwRTAwMDYyNjAwMDAwMDAwOEZCRjAwMkM4RkI0MDAyOEQ2Cis6MTAyQkUwMDA4RkIzMDAyNDhGQjIwMDIwOEZCMTAwMUM4RkIwMDAxODZCCis6MTAyQkYwMDAwM0UwMDAwODI3QkQwMDMwMjdCREZGRDhBRkIzMDAxQzlECis6MTAyQzAwMDBBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTBBRkJGMDAyMERBCis6MTAyQzEwMDAwMDgwOTgyMTAwRTA4MDIxMzBCMUZGRkYwRTAwMDQ5Mzc2Cis6MTAyQzIwMDAzMEQyMDBGRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEzCis6MTAyQzMwMDA4RjgyMDAyMEFDNTEwMDAwQUM1MjAwMDRBQzUzMDAwODVECis6MTAyQzQwMDBBQzQwMDAwQ0FDNDAwMDEwQUM0MDAwMTRBQzQwMDAxODhDCis6MTAyQzUwMDAzQzAzMDgwMDk0NjM0QjVFMDIwMzgwMjVBQzUwMDAxQ0NCCis6MTAyQzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNDA0MDAwMTNCCis6MTAyQzcwMDA4RkJGMDAyMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNERCCis6MTAyQzgwMDA4RkIwMDAxMDBBMDAwNEI4MjdCRDAwMjgyN0JERkZFODU4Cis6MTAyQzkwMDBBRkIwMDAxMEFGQkYwMDE0MzBBNUZGRkYzMEM2MDBGRjdCCis6MTAyQ0EwMDAwMDgwODAyMTI0MDIwQzgwQUY0MjAwMjQwMDAwMDAwMDNDCis6MTAyQ0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE0Cis6MTAyQ0MwMDAwRTAwMEFDQzAwMDAwMDAwM0MwNDA4MDAyNDg0MDBFMDUwCis6MTAyQ0QwMDA4QzgyMDAwMDI0MDNGRjgwOEZCRjAwMTQwMjAyMTAyMUE5Cis6MTAyQ0UwMDAwMDQzMTAyNEFGNDIwMDI0OEM4MjAwMDAzQzAzMDAwQTAxCis6MTAyQ0YwMDAwMjAyODAyMTMyMTAwMDdGMDM1MDEwMjE4RkIwMDAxMDlCCis6MTAyRDAwMDAwMDQzMTAyMTI3QkQwMDE4MDNFMDAwMDhBRjgyMDAyODBGCis6MTAyRDEwMDAyN0JERkZFOEFGQkYwMDEwOEY0NDAxNDAzQzAzMDgwMDBGCis6MTAyRDIwMDA4QzYzMDBFMDI0MDJGRjgwQUY4NDAwMzQwMDgzMTgyMTBDCis6MTAyRDMwMDAwMDYyMTAyNEFGNDIwMDI0M0MwMjAwMDgwMzQyNDAyMUZDCis6MTAyRDQwMDA5NTA1MDAwMjMwNjMwMDdGM0MwMjAwMEEwMzQzMTgyMTBFCis6MTAyRDUwMDAwMDYyMTgyMTMwQTVGRkZGMzQwMkZGRkYwMDAwMzAyMTgwCis6MTAyRDYwMDAzQzA3NjAyMDEwQTIwMDA2QUY4MzAwMjgyNDAyRkZGRjZBCis6MTAyRDcwMDBBNTAyMDAwMjk0NjUwMEQ0MEUwMDBBRjEzMEE1RkZGRjAxCis6MTAyRDgwMDA4RkJGMDAxMDI0MDIwQzgwMjdCRDAwMTgwM0UwMDAwODRDCis6MTAyRDkwMDBBRjQyMDAyNDNDMDIwMDA4MDM0MjQwMjE5NTAyMDAwMjk5Cis6MTAyREEwMDAzQzBBMDgwMDk1NEEwMEM2MzA0NkZGRkYxNEMwMDAwN0UxCis6MTAyREIwMDAzNDAyRkZGRjhGODIwMDI4OEY4NDAwMzQzQzA3NjAyMDlDCis6MTAyREMwMDA5NDQ1MDBENDBBMDAwQjVBMzBBNUZGRkYxMEMyMDAyNDFFCis6MTAyREQwMDA4Rjg3MDAyODk0RTIwMDU0OTRFNDAwMTYzMDQ1RkZGRkVBCis6MTAyREUwMDAwMEE2MTAyMzAwQTYxODJCMzA4OUZGRkYxMDYwMDAwNEY2Cis6MTAyREYwMDAzMDQ0RkZGRjAwQzUxMDIzMDEyMjEwMjMzMDQ0RkZGRkExCis6MTAyRTAwMDAwMDhBMTAyQjEwNDAwMDBDMDEyQTEwMjMyNDAyMDAwMTFDCis6MTAyRTEwMDBBNTAyMDAxNjI0MDJGRkZGQTUwMjAwMDI5NEU1MDBENERCCis6MTAyRTIwMDA4Rjg0MDAzNDAwMDAzMDIxMzBBNUZGRkYzQzA3NjAyMDc0Cis6MTAyRTMwMDAwQTAwMEFGMTAwMDAwMDAwMDA0NDEwMkExMDQwMDAwOEI3Cis6MTAyRTQwMDAwMDAwMDAwMDk1MDIwMDE2MzA0MjAwMDExMDQwMDAwNDBFCis6MTAyRTUwMDAwMDAwMDAwMDk3NDIwMDdFMjQ0MjAwMTRBNTAyMDAxNkU0Cis6MTAyRTYwMDAwM0UwMDAwODAwMDAwMDAwOEY4NDAwMjgyN0JERkZFMDc5Cis6MTAyRTcwMDBBRkJGMDAxODk0ODIwMDM0OTQ4MzAwM0UxMDYwMDAxQUEzCis6MTAyRTgwMDAzMDQ4RkZGRjkzODMwMDJDMjQwMjAwMDExNDYyMDAyN0M2Cis6MTAyRTkwMDA4RkJGMDAxODhGODIwMDI4MDAwODE4QzIzMTA4MDAwNzcxCis6MTAyRUEwMDAwMDYyMTgyMTI0NDcwMDNBMjQ0OTAwNTQyNDQ0MDAyMDk5Cis6MTAyRUIwMDAyNDQ1MDAzMDI0NDYwMDM0OTA2MjAwNDAzMDQyMDBGRjM4Cis6MTAyRUMwMDAwMTAyMTAwNzMwNDIwMDAxMTA0MDAwMTY4RkJGMDAxOEE5Cis6MTAyRUQwMDAwRTAwMDg1NkFGQTkwMDEwOEY4MjAwMjg5NDQyMDAzNERCCis6MTAyRUUwMDAwQTAwMEI3MzMwNDhGRkZGOTQ4MzAwMzY5NDgyMDAzNDRECis6MTAyRUYwMDAxMDQzMDAwRThGQkYwMDE4OTQ4MjAwMzZBNDgyMDAzNDY1Cis6MTAyRjAwMDA5NDgyMDA1NkE0ODIwMDU0OEM4MjAwMkNBQzgyMDAyNDRGCis6MTAyRjEwMDA5NDgyMDAzMkE0ODIwMDMwOTQ4MjAwM0NBNDgyMDAzQTYxCis6MTAyRjIwMDA4RkJGMDAxODBBMDAwQjMzMjdCRDAwMjAwM0UwMDAwODA0Cis6MTAyRjMwMDAyN0JEMDAyMDI3QkRGRkU4QUZCRjAwMTA4RjRBMDEwMDZBCis6MTAyRjQwMDAzQzA1MDgwMDhDQTUwMEUwM0MwMjA4MDA5MDQyNEI4NDQwCis6MTAyRjUwMDAzQzBDMDgwMDk1OEM0QjdFMDE0NTI4MjEzMDRCMDAzRkVFCis6MTAyRjYwMDAzMEEyMDA3RjAzNDI0MDIxMzk2OTAwMzIzQzAyMDAwQTRFCis6MTAyRjcwMDAzOTYzMDAzRjJDNjMwMDAxMDEwMjQwMjEyRDI5MDAwMTJCCis6MTAyRjgwMDAyNDAyRkY4MDAwQTIyODI0MDEyMzQ4MjVBRjhBMDAzNEIwCis6MTAyRjkwMDAwMDgwMTgyMUFGNDUwMDI0MDAwMDMwMjEwMDgwMjgyMTQ2Cis6MTAyRkEwMDAyNDA3MDAwMUFGODgwMDI4M0MwNDA4MDAyNDg0NEI3OEUzCis6MTAyRkIwMDBBRjhDMDAyNDE1MjAwMDA3QTM4MDAwMkQyNDAyMDAyMEUwCis6MTAyRkMwMDA1NTYyMDAwRjAwNjAyMDIxMzQwMkZGRkY1NTgyMDAwQzgzCis6MTAyRkQwMDAwMDYwMjAyMTI0MDIwMDIwMTU2MjAwMDUwMDAwMDAwMDhFCis6MTAyRkUwMDA4QzYzMDAxNDI0MDJGRkZGMTA2MjAwMDcwMDAwMDAwMDQxCis6MTAyRkYwMDAwRTAwMDg4OTAwMDAwMDAwMEEwMDBCRDAwMDAwMDAwMDRECis6MTAzMDAwMDAwRTAwMDhGNDAxNjAyODIxMEUwMDBCNjgwMDAwMDAwMDhCCis6MTAzMDEwMDA4RkJGMDAxMDI0MDIwQzgwMjdCRDAwMTgwM0UwMDAwOEI5Cis6MTAzMDIwMDBBRjQyMDAyNDNDMDIwODAwOEM0MjAwRTAyN0JERkZBMDE0Cis6MTAzMDMwMDBBRkIxMDAzQzAwODIxMDIxMjQxMUZGODBBRkJFMDA1OEM4Cis6MTAzMDQwMDBBRkI3MDA1NEFGQjIwMDQwQUZCMDAwMzhBRkJGMDA1Q0M0Cis6MTAzMDUwMDBBRkI2MDA1MEFGQjUwMDRDQUZCNDAwNDhBRkIzMDA0NEJBCis6MTAzMDYwMDAwMDUxMTAyNDhGNDgwMDI0OEY0OTAwMjg4RjQ3MDAyOEUyCis6MTAzMDcwMDBBRjQyMDAyNDNDMDIwODAwOEM0MjAwRTAwMDgwOTAyMTE2Cis6MTAzMDgwMDAyNDA2MDAwNjAwODIxMDIxMzA0MjAwN0YwMzQyMTgyMUVFCis6MTAzMDkwMDAzQzAyMDAwQTAwNjI4MDIxM0MwMjAwMUYzNDQyRkY4MDkzCis6MTAzMEEwMDAwMEUyMzgyNDI3QTQwMDEwMjYwNTAwRjAwMTIyRjAyNEI1Cis6MTAzMEIwMDAwMTAyQjgyNDBFMDAwNTFEQUZBNzAwMzA4RkEyMDAxODMyCis6MTAzMEMwMDBBRTAyMDBDNDhGQTIwMDFDQUUwMjAwQzg4RkEyMDAyNDcyCis6MTAzMEQwMDBBRTAyMDBDQzkzQTQwMDEwOTIwMzAwRDEyNDAyRkY4MDIyCis6MTAzMEUwMDAwMDgyMTAyNDAwNDMxMDI1MzA0OTAwRkYzMDgzMDA3RjA4Cis6MTAzMEYwMDAzMTIyMDA3RjAwNjIxMDJBMTA0MDAwMDQwMDAzMTBDMDNCCis6MTAzMTAwMDAwMTMxMTAyNjMwNDkwMEZGMDAwMzEwQzAwMDAzMTk0MEIwCis6MTAzMTEwMDAwMDYyMTgyMTNDMDIwODAwOEM0MjAwREM5MjA0MDBEMkJDCis6MTAzMTIwMDAwMjQyMTAyMTAwNDMxMDIxMDA1MTEwMjRBRjQyMDAyODE4Cis6MTAzMTMwMDA5M0EzMDAxMDMwNjMwMDdGMDAwMzEwQzAwMDAzMTk0MDA4Cis6MTAzMTQwMDAwMDYyMTgyMTNDMDIwODAwOEM0MjAwREMwMjQyMTAyMTdGCis6MTAzMTUwMDAwMDQzMTAyMTMwNDIwMDdGMDM0MjE4MjEzQzAyMDAwQzQyCis6MTAzMTYwMDAwMDYyNDAyMThGQTMwMDE0MjQwMkZGRkYxMDYyMDAzMDkwCis6MTAzMTcwMDAzMDk1MDBGRjkzQTIwMDExOTUwMzAwMTQzMDQ0MDBGRjI2Cis6MTAzMTgwMDAzMDYzRkZGRjAwNjQxODJCMTA2MDAwMEQwMDAwMDAwMDhBCis6MTAzMTkwMDA5NTA0MDAxNDhEMDcwMDFDOEQwNjAwMTgzMDg0RkZGRjc1Cis6MTAzMUEwMDAwMDQ0MjAyMzAwMDQyMTAwMDAwMDEwMjEwMEU0MzgyMTA1Cis6MTAzMUIwMDAwMEU0MjAyQjAwQzIzMDIxMEEwMDBDNEEwMEM0MzAyMTU4Cis6MTAzMUMwMDA5NTA0MDAxNDhEMDcwMDFDOEQwNjAwMTgzMDg0RkZGRjQ1Cis6MTAzMUQwMDAwMDgyMjAyMzAwMDQyMTAwMDAwMDEwMjEwMDgwMTgyMTFCCis6MTAzMUUwMDAwMEMyMzAyMzAwRTQyMDJCMDBDNDMwMjMwMEUzMzgyMzQ2Cis6MTAzMUYwMDBBRDA3MDAxQ0FEMDYwMDE4OTNBMjAwMTFBNTAyMDAxNDMzCis6MTAzMjAwMDA5N0EyMDAxMkE1MDIwMDE2OEZBMjAwMTRBRDAyMDAxMEIyCis6MTAzMjEwMDA4RkEyMDAxNEFEMDIwMDBDOTNBMjAwMTFBNTAyMDAyMEExCis6MTAzMjIwMDA5N0EyMDAxMkE1MDIwMDIyOEZBMjAwMTRBRDAyMDAyNDcyCis6MTAzMjMwMDAyNDA2RkY4MDAyNDYxMDI0MzI1NjAwN0ZBRjQyMDAyNDRECis6MTAzMjQwMDAwMzU2MTgyMTNDMDIwMDBBMDA2MjgwMjE4RTAyMDA0Q0M1Cis6MTAzMjUwMDA4RkEyMDAyMDMxMjQwMDdGMDAwNDI4QzBBRTAyMDA1MDVECis6MTAzMjYwMDA4RkEyMDAyMDAwMDQyMTQwMDA4NTI4MjFBRTAyMDA3MEJBCis6MTAzMjcwMDA5M0EyMDAxMDAxMjA4ODIxQTIwMjAwODM5M0EyMDAxMEQzCis6MTAzMjgwMDBBMjAyMDA3OTkyMDIwMDg1MzA0MjAwM0ZBMjAyMDA4NTJFCis6MTAzMjkwMDAzQzAyMDgwMDhDNDIwMERDMDI0MjEwMjEwMDQ1MTAyMTUzCis6MTAzMkEwMDAwMDQ2MTAyNEFGNDIwMDJDM0MwMjA4MDA4QzQyMDBFNDhGCis6MTAzMkIwMDAzQzAzMDgwMDhDNjMwMERDMDI0MjEwMjEwMDQ0MTAyMTEyCis6MTAzMkMwMDAwMDQ2MTAyNEFGNDIwMDI4M0MwMjA4MDA4QzQyMDBFNDczCis6MTAzMkQwMDAwMjQzMTgyMTAwNjUxODIxMDI0MjEwMjEwMDQ0MTAyMUU4Cis6MTAzMkUwMDAzMDQyMDA3RjMwNjMwMDdGOTNBNTAwMTAwMzQyMjAyMTBECis6MTAzMkYwMDAwMzQzMTgyMTNDMDIwMDBFMDA2MjQwMjEzQzAyMDAwQ0Y2Cis6MTAzMzAwMDAxMEIxMDA4QzAwODI0ODIxMzIzMzAwN0YxNjYwMDAxOTEyCis6MTAzMzEwMDAyNDA0RkY4MDNDMDIwODAwOEM0MjAwREMwMjQyMTAyMUExCis6MTAzMzIwMDAwMDQ0MTAyNEFGNDIwMDJDM0MwMjA4MDA4QzQyMDBFNDEwCis6MTAzMzMwMDAzQzAzMDgwMDhDNjMwMERDMDI0MjEwMjEwMDQ0MTAyNDhFCis6MTAzMzQwMDBBRjQyMDAyODNDMDIwODAwOEM0MjAwRTQwMjQzMTgyMUVFCis6MTAzMzUwMDAzMDYzMDA3RjAyNDIxMDIxMzA0MjAwN0YwMzQyMjAyMTZGCis6MTAzMzYwMDAwMzQzMTgyMTNDMDIwMDBFMDA2MjQwMjEzQzAyMDAwQzg1Cis6MTAzMzcwMDAwMDgyNDgyMTkxMjQwMDBEMjQxNEZGODAwMDAwMTAyMUI4Cis6MTAzMzgwMDAwMDk0MjAyNUExMjQwMDBEOTUwNDAwMDI5NTA1MDAxNDQ5Cis6MTAzMzkwMDA4RDA3MDAxQzMwODRGRkZGMzBBNUZGRkY4RDA2MDAxODRECis6MTAzM0EwMDAwMDg1MjAyMzAwMDQyMTAwMDBFNDM4MjEwMEMyMzAyMUUwCis6MTAzM0IwMDAwMEU0MjAyQjAwQzQzMDIxQUQwNzAwMUNBRDA2MDAxODJFCis6MTAzM0MwMDA5NTAyMDAwMkE1MDIwMDE0QTUwMDAwMTY4RDAyMDAwODU3Cis6MTAzM0QwMDBBRDAyMDAxMDhEMDIwMDA4QUQwMjAwMEM5NTAyMDAwMjQzCis6MTAzM0UwMDBBNTAyMDAyMEE1MDAwMDIyOEQwMjAwMDhBRDAyMDAyNEU1Cis6MTAzM0YwMDA5MTIyMDAwRDMwNDIwMDQwMTA0MDAwNDIyNjIyMDAwMTgwCis6MTAzNDAwMDAzQzAyMDgwMDhDNDIwMEUwQTNCMzAwMjgzQzEwMDAwQUY0Cis6MTAzNDEwMDAwMjQyMTAyMTAwNTQxMDI0QUY0MjAwMjQzQzAyMDgwMDU0Cis6MTAzNDIwMDA4QzQyMDBFMEEzODAwMDJDMjdBNDAwMkMwMjQyMTAyMTMzCis6MTAzNDMwMDAzMDQyMDA3RjAzNDIxODIxMDA3MDE4MjE4QzYyMDBEOEFFCis6MTAzNDQwMDA4RDI2MDAwNDI3QTUwMDI4QUZBOTAwMkMwMDQ2MTAyMUQ2Cis6MTAzNDUwMDBBQzYyMDBEODBFMDAwOUUxQUY4MzAwMjg5M0EzMDAyOEQ2Cis6MTAzNDYwMDA4RjgyMDAyODBFMDAwNjI2QTA0MzAwRDEwRTAwMEI2OEI0Cis6MTAzNDcwMDAwMDAwMDAwMDAyNTQxMDI0QUY0MjAwMjQzQzAyMDgwMDY3Cis6MTAzNDgwMDA4QzQyMDBEQzAwMTMyOTQwMDAxMzIwQzAwMEE0MjAyMTNFCis6MTAzNDkwMDAwMjQyMTAyMTAwNDQxMDIxMDA1NDEwMjRBRjQyMDAyQzlECis6MTAzNEEwMDAzQzAyMDgwMDhDNDIwMEU0M0MwMzA4MDA4QzYzMDBEQzEyCis6MTAzNEIwMDAwMzU2MzAyMTAyNDIxMDIxMDA0NTEwMjEwMDU0MTAyNEVGCis6MTAzNEMwMDBBRjQyMDAyODNDMDIwODAwOEM0MjAwRTQwMjQzMTgyMTZECis6MTAzNEQwMDAwMDY0MTgyMTAyNDIxMDIxMDA0NTEwMjEzMDQyMDA3RjczCis6MTAzNEUwMDAzMDYzMDA3RjAzNDIyMDIxMDM0MzE4MjEzQzAyMDAwRTc5Cis6MTAzNEYwMDAwMDYyNDAyMTNDMDIwMDBDMDBEMDgwMjEwMDgyNDgyMTYzCis6MTAzNTAwMDAyNjIyMDAwMTMwNDMwMDdGMTQ3NTAwMDUzMDQ0MDBGRjdGCis6MTAzNTEwMDAyNDAzRkY4MDAyMjMxMDI0MDA0MzEwMjYzMDQ0MDBGRkMwCis6MTAzNTIwMDA5M0EyMDAxMDAwODA4ODIxMjUwODAwMjgxNDQ0RkY3NjBCCis6MTAzNTMwMDAyNTI5MDAyMDkzQTQwMDEwOEZBMzAwMTQyNDAyRkZGRjZDCis6MTAzNTQwMDAxMDYyMDAwQTMwODkwMEZGMjQ4MjAwMDEyNDgzMDAwMUY4Cis6MTAzNTUwMDAzMDQyMDA3RjE0NTUwMDA1MzA2OTAwRkYyNDAzRkY4MENFCis6MTAzNTYwMDAwMDgzMTAyNDAwNDMxMDI2MzA0OTAwRkY5MjAyMDA3OEE3Cis6MTAzNTcwMDAzMDUzMDBGRjExMzMwMDMyMDEyMDg4MjEzQzAyMDgwMDQzCis6MTAzNTgwMDA4QzQyMDBEQzMyMjUwMDdGMDAwNTIwQzAwMDA1Mjk0MDY4Cis6MTAzNTkwMDAwMEE0MjAyMTAyNDIxMDIxMjQwNkZGODAwMDQ0MTAyMUIzCis6MTAzNUEwMDAwMDQ2MTAyNEFGNDIwMDJDM0MwMzA4MDA4QzYzMDBEQzcyCis6MTAzNUIwMDAzQzAyMDgwMDhDNDIwMEU0MDI0MzE4MjEwMjQyMTAyMTIwCis6MTAzNUMwMDAwMDQ1MTAyMTAwNjQxODIxMDA0NjEwMjQzMDYzMDA3RjVDCis6MTAzNUQwMDBBRjQyMDAyODAzNDMxODIxM0MwMjAwMEUwMDYyNDAyMTQ0Cis6MTAzNUUwMDAzQzAyMDgwMDhDNDIwMEU0OEQwNjAwMEMwMTAwMjAyMTAyCis6MTAzNUYwMDAwMjQyMTAyMTAwNDUxMDIxMzA0MjAwN0YwMzQyMTgyMTcxCis6MTAzNjAwMDAzQzAyMDAwQzAwNjI0ODIxMTBDMDAwMEQwMTIwMjgyMTVFCis6MTAzNjEwMDAwRTAwMDY0QTAwMDAwMDAwMjQwMkZGODAwMjIyMTgyNDQ3Cis6MTAzNjIwMDAyNjI0MDAwMTAwNjIyODI2MzA4MjAwN0YxNDU1MDAwMjAzCis6MTAzNjMwMDAzMDgzMDBGRjMwQTMwMEZGMTQ3M0ZGRDAwMDYwODgyMUE3Cis6MTAzNjQwMDA4RTAzMDA3NDNDMDI3RkZGMzQ0MkZGRkYwMDYyMTgyNEE3Cis6MTAzNjUwMDBBRTAzMDA3NDBFMDAwNjZCMDI0MDIwMjFBRjU3MDAyNDE5Cis6MTAzNjYwMDA4RkEyMDAzMEFGNUUwMDI4OEZCRjAwNUM4RkJFMDA1ODc1Cis6MTAzNjcwMDA4RkI3MDA1NDhGQjYwMDUwOEZCNTAwNEM4RkI0MDA0ODAwCis6MTAzNjgwMDA4RkIzMDA0NDhGQjIwMDQwOEZCMTAwM0M4RkIwMDAzODQwCis6MTAzNjkwMDAyN0JEMDA2MDAzRTAwMDA4QUY0MjAwMkMyN0JERkZEODIzCis6MTAzNkEwMDBBRkIxMDAxQ0FGQkYwMDIwQUZCMDAwMTgyNzUxMDE4ODk4Cis6MTAzNkIwMDA5MjIyMDAwMzI0MDhGRjgwM0MwMzAwMEEzMDQ3MDA3RjY5Cis6MTAzNkMwMDBBM0E3MDAxMDhGNDYwMTgwM0MwMjA4MDA4QzQyMDBFMDU2Cis6MTAzNkQwMDBBRjg2MDAzNDAwQzIyODIxMDBBODEwMjRBRjQyMDAyNDg1Cis6MTAzNkUwMDA5MjI0MDAwMDMwQTIwMDdGMDM0MjEwMjEwMDQzMTAyMUU5Cis6MTAzNkYwMDBBRjgyMDAyODMwODQwMDdGMjQwMjAwMDIxNDgyMDAyNTVCCis6MTAzNzAwMDAwMDA3MTk0MDNDMDIwODAwOEM0MjAwRTQwMEMyMTAyMTZFCis6MTAzNzEwMDAwMDQzMjgyMTMwQTIwMDdGMDM0MjE4MjEwMEE4MTAyNDcyCis6MTAzNzIwMDBBRjQyMDAyODNDMDIwMDBDMDA2MjE4MjE5MDYyMDAwRDlDCis6MTAzNzMwMDBBRkEzMDAxNDAwNDgxMDI1QTA2MjAwMEQ4RkEzMDAxNDUxCis6MTAzNzQwMDA5MDYyMDAwRDMwNDIwMDQwNTA0MDAwNkE4RkJGMDAyMDYwCis6MTAzNzUwMDA4Rjg2MDAyOEEzODAwMDJDMjdBNDAwMTQ4Q0MyMDBEOEQ4Cis6MTAzNzYwMDA4QzYzMDAwNDI3QTUwMDEwMDA0MzEwMjEwRTAwMDlFMTFFCis6MTAzNzcwMDBBQ0MyMDBEODkzQTMwMDEwOEY4MjAwMjgwRTAwMDYyNjRBCis6MTAzNzgwMDBBMDQzMDBEMTBFMDAwQjY4MDAwMDAwMDAwQTAwMEUwQkUxCis6MTAzNzkwMDA4RkJGMDAyMDBFMDAwNjJGMDBDMDIwMjEwRTAwMDYzRDI2Cis6MTAzN0EwMDAwMDAwMDAwMDNDMDIwMDA4MDM0MjgwMjE5MjIzMDAwMTM3Cis6MTAzN0IwMDA5MjAyMDA3QjE0NDMwMDRGOEZCRjAwMjA5MjIyMDAwMDMyCis6MTAzN0MwMDAzMDQ0MDA3RjI0MDIwMDA0MTA4MjAwMTcyODgyMDAwNTg0Cis6MTAzN0QwMDAxMDQwMDAwNjI0MDIwMDA1MjQwMjAwMDMxMDgyMDAwN0E2Cis6MTAzN0UwMDA4RkIxMDAxQzBBMDAwRTBDMDAwMDAwMDAxMDgyMDAxMkI1Cis6MTAzN0YwMDA4RkJGMDAyMDBBMDAwRTBDOEZCMTAwMUM5MjA1MDA4M0MxCis6MTAzODAwMDA5MjA2MDA3ODhFMDcwMDc0OEY4NDAwMzQzMEE1MDBGRjg0Cis6MTAzODEwMDAwMDA3M0UwMjMwQzYwMEZGMEUwMDA2NzMzMEU3MDA3RjRGCis6MTAzODIwMDAwQTAwMEUwQjhGQkYwMDIwMEUwMDBCRDc4Rjg0MDAzNEQwCis6MTAzODMwMDAwQTAwMEUwQjhGQkYwMDIwMjQwMjBDODBBRjQyMDAyNDMwCis6MTAzODQwMDA5MjAyMDAzRTMwNDIwMDQwMTA0MDAwMjAwMDAwMDAwMDg0Cis6MTAzODUwMDA5MjAyMDAzRTAwMDIxNjAwMDAwMjE2MDMwNDQxMDAwNjE4Cis6MTAzODYwMDAwMDAwMDAwMDhGODQwMDM0MEUwMDA1QTAyNDA1MDA5M0EyCis6MTAzODcwMDAwQTAwMEUwQjhGQkYwMDIwOTIwMjAwM0YyNDAzMDAxOEE1Cis6MTAzODgwMDAzMDQyMDBGRjE0NDMwMDBDOEY4NDAwMzQyNDA1MDAzOUJCCis6MTAzODkwMDAwRTAwMDUzODAwMDAzMDIxMEUwMDAyNTA4Rjg0MDAzNEU1Cis6MTAzOEEwMDAyNDAyMDAxMkEyMDIwMDNGMEUwMDAyNTk4Rjg0MDAzNDRECis6MTAzOEIwMDAwQTAwMEUwQjhGQkYwMDIwMjQwNTAwMzYwRTAwMDUzOENECis6MTAzOEMwMDAwMDAwMzAyMTBBMDAwRTBCOEZCRjAwMjAwRTAwMDI1MEI2Cis6MTAzOEQwMDA4Rjg0MDAzNDkyMDIwMDA1MzQ0MjAwMjBBMjAyMDAwNUM5Cis6MTAzOEUwMDAwRTAwMDI1OThGODQwMDM0MEUwMDBGQzA4Rjg0MDAzNDA0Cis6MTAzOEYwMDA4RkJGMDAyMDhGQjEwMDFDOEZCMDAwMTgyNDAyMEM4MEY1Cis6MTAzOTAwMDAyN0JEMDAyODAzRTAwMDA4QUY0MjAwMjQyN0JERkZFOEUwCis6MTAzOTEwMDBBRkIwMDAxMEFGQkYwMDE0Mjc0MzAxMDA5NDYyMDAwODRECis6MTAzOTIwMDAwMDAyMTQwMDAwMDIxNDAzMDQ0MTAwMDIwMDAwODAyMTgwCis6MTAzOTMwMDAyNDEwMDAwMTk0NjIwMDA4MzA0MjAwODAxMDQwMDAxQUY4Cis6MTAzOTQwMDAwMjAwMTAyMTk0NjIwMDA4MzA0MjIwMDAxMDQwMDAxNjRFCis6MTAzOTUwMDAwMjAwMTAyMThDNjMwMDE4M0MwMjFDMkQzNDQyMTlFRDJBCis6MTAzOTYwMDAyNDA2MDAwNjEwNjIwMDBGM0MwNzYwMjEzQzAyMDgwMDlDCis6MTAzOTcwMDA4QzQyMDBENDEwNDAwMDA3OEY4MjAwMjg4RjgzMDAyOERCCis6MTAzOTgwMDA5MDYyMDA2MjMwNDIwMDBGMzQ0MjAwNDBBMDYyMDA2MjQ4Cis6MTAzOTkwMDA4RjgyMDAyODhGODQwMDM0OTQ0NTAwRDQwRTAwMEFGMUYxCis6MTAzOUEwMDAzMEE1RkZGRjAyMDAxMDIxOEZCRjAwMTQ4RkIwMDAxMDYwCis6MTAzOUIwMDAwM0UwMDAwODI3QkQwMDE4MjdCREZGRTBBRkIxMDAxNEU5Cis6MTAzOUMwMDBBRkIwMDAxMEEzODAwMDJDQUZCRjAwMTg4RjQ1MDEwMERFCis6MTAzOUQwMDAzQzAzMDgwMDhDNjMwMEUwMjQwMkZGODBBRjg1MDAzNEM0Cis6MTAzOUUwMDAwMEEzMTgyMTMwNjQwMDdGMDM0NDIwMjEwMDYyMTgyNEMyCis6MTAzOUYwMDAzQzAyMDAwQTAwODIyMDIxQUY0MzAwMjQyNzUwMDEwMDJFCis6MTAzQTAwMDA4RTAyMDAxNDhDODMwMERDQUY4NDAwMjgwMDQzMTAyMzU2Cis6MTAzQTEwMDAxODQwMDAwNDAwMDA4ODIxOEUwMjAwMTQwRTAwMEE4NDYxCis6MTAzQTIwMDBBQzgyMDBEQzkyMDIwMDBCMjQwMzAwMDIzMDQyMDBGRjUzCis6MTAzQTMwMDAxNDQzMDAyRjAwMDAwMDAwOTYwMjAwMDgzMDQzMDBGRkVFCis6MTAzQTQwMDAyNDAyMDA4MjE0NjIwMDA1MjQwMjAwODQwRTAwMDkzRTU0Cis6MTAzQTUwMDAwMDAwMDAwMDBBMDAwRTk3MDAwMDAwMDAxNDYyMDAwOTM4Cis6MTAzQTYwMDAyNDAyMDA4MThGODIwMDI4OEY4NDAwMzQzQzA3NjAyMTZCCis6MTAzQTcwMDA5NDQ1MDBENDkyMDYwMDA1MzBBNUZGRkYwQTAwMEU4NjhCCis6MTAzQTgwMDAzMEM2MDBGRjE0NjIwMDI3MDAwMDAwMDA5MjAyMDAwQTA2Cis6MTAzQTkwMDAzMDQzMDBGRjMwNjIwMDIwMTA0MDAwMDQzMDYyMDA0MERDCis6MTAzQUEwMDA4Rjg0MDAzNDBBMDAwRTgyMjQwNjAwNDAxMDQwMDAwNDc3Cis6MTAzQUIwMDAwMDAzMTYwMDhGODQwMDM0MEEwMDBFODIyNDA2MDA0MUExCis6MTAzQUMwMDAwMDAyMTYwMzA0NDEwMDE3OEY4NDAwMzQyNDA2MDA0MkNDCis6MTAzQUQwMDA4RjgyMDAyODNDMDc2MDE5OTQ0NTAwRDQzMEE1RkZGRjcxCis6MTAzQUUwMDAwRTAwMEFGMTAwMDAwMDAwMEEwMDBFOTcwMDAwMDAwMDFFCis6MTAzQUYwMDA5MjAyMDAwQjI0MDMwMDE2MzA0MjAwRkYxMDQzMDAwNjIwCis6MTAzQjAwMDAwMDAwMDAwMDkyMDIwMDBCMjQwMzAwMTczMDQyMDBGRjY3Cis6MTAzQjEwMDAxNDQzMDAwNDAwMDAwMDAwMEUwMDBFMTEwMDAwMDAwMDFECis6MTAzQjIwMDAwMDQwODgyMTBFMDAwQjY4MDAwMDAwMDA5MjAyMDAwQThECis6MTAzQjMwMDAzMDQyMDAwODEwNDAwMDA2MjQwMjBDODA4Rjg1MDAyOEM3Cis6MTAzQjQwMDAzQzA0MDAwODBFMDAxMUVFMDM0NDIwMjEyNDAyMEM4MEU2Cis6MTAzQjUwMDBBRjQyMDAyNDhGQkYwMDE4MDIyMDEwMjE4RkIwMDAxMDQ4Cis6MTAzQjYwMDA4RkIxMDAxNDAzRTAwMDA4MjdCRDAwMjAyN0JERkZFODQ3Cis6MTAzQjcwMDBBRkJGMDAxNEFGQjAwMDEwOEY1MDAwMjQzQzAzMDgwMDBBCis6MTAzQjgwMDA4QzYzMDBFMDhGNDUwMTAwMjQwMkZGODAwMEEzMTgyMTEwCis6MTAzQjkwMDAzMDY0MDA3RjAzNDQyMDIxMDA2MjE4MjQzQzAyMDAwQUE0Cis6MTAzQkEwMDAwMDgyMjAyMUFGODUwMDM0QUY0MzAwMjQ5MDgyMDA2MjYwCis6MTAzQkIwMDBBRjg0MDAyODMwNDIwMDBGMzQ0MjAwNTBBMDgyMDA2MkRGCis6MTAzQkMwMDAzQzAyMDAxRjM0NDJGRjgwMEUwMDA2MjYwMjAyODAyNEMxCis6MTAzQkQwMDBBRjUwMDAyNDhGQkYwMDE0OEZCMDAwMTAwM0UwMDAwODI2Cis6MTAzQkUwMDAyN0JEMDAxODNDMDIwODAwOEM0MjAwMjAxMDQwMDAxRDM4Cis6MTAzQkYwMDAyNzQ1MDEwMDkwQTMwMDA5M0MwMjAwMDgwMzQyMjAyMTUwCis6MTAzQzAwMDAyNDAyMDAxODU0NjIwMDAzM0MwMjAwMDgwQTAwMEVEODg3Cis6MTAzQzEwMDAyNDAyMDAwODAzNDIyMDIxMjQwMjAwMTYxNDYyMDAwNTM5Cis6MTAzQzIwMDAyNDAyMDAxNzI0MDIwMDEyQTA4MjAwM0YwQTAwMEVFMkM0Cis6MTAzQzMwMDA5NEE3MDAwODU0NjIwMDA2OTRBNzAwMDg5MzYyMDAwNTQ4Cis6MTAzQzQwMDAyNDAzRkZGRTAwNDMxMDI0QTM2MjAwMDU5NEE3MDAwODhDCis6MTAzQzUwMDA5MEE2MDAxQjhDQTQwMDAwOTRBNTAwMDYwQTAwMEFDQ0M0Cis6MTAzQzYwMDAwMDA3M0MwMDAzRTAwMDA4MDAwMDAwMDAyNzQ0MDEwMEJBCis6MTAzQzcwMDA5NDgyMDAwODMwNDUwMEZGMzhBMzAwODIzOEEyMDA4NEY3Cis6MTAzQzgwMDAyQzYzMDAwMTJDNDIwMDAxMDA2MjE4MjUxMDYwMDAwNjIwCis6MTAzQzkwMDAyNDAyMDA4MzkzODIwMDJEMTA0MDAwMEQwMDAwMDAwMERDCis6MTAzQ0EwMDAwQTAwMEI5QjAwMDAwMDAwMTRBMjAwMDUyNEEyRkY4MDY0Cis6MTAzQ0IwMDA4RjQzMDEwNDNDMDI2MDIwMDNFMDAwMDhBQzQzMDAxNDgxCis6MTAzQ0MwMDAzMDQyMDBGRjJDNDIwMDAyMTA0MDAwMDMyNDAyMDAyMjc4Cis6MTAzQ0QwMDAwQTAwMEUzQzAwMDAwMDAwMTRBMjAwMDMwMDAwMDAwMEQ3Cis6MTAzQ0UwMDAwQTAwMEVBOTAwMDAwMDAwMEEwMDBFQzcwMDAwMDAwMDM0Cis6MTAzQ0YwMDA5MzYzMDA3RTkzNjIwMDdBMTQ0MzAwMDkwMDAwMjAyMTQwCis6MTAzRDAwMDA5MzYyMDAwMDI0MDMwMDUwMzA0MjAwRkYxNDQzMDAwNDdCCis6MTAzRDEwMDAyNDA0MDAwMTkzNjIwMDdFMjQ0MjAwMDFBMzYyMDA3RTFECis6MTAzRDIwMDAwM0UwMDAwODAwODAxMDIxOEY0MjAxRjgwNDQwRkZGRUVDCis6MTAzRDMwMDAyNDAyMDAwMkFGNDQwMUMwQTM0MjAxQzQzQzAyMTAwMEFGCis6MTAzRDQwMDAwM0UwMDAwOEFGNDIwMUY4MjdCREZGRThBRkJGMDAxMDU1Cis6MTAzRDUwMDA5MzYyMDAzRjI0MDMwMDBBMzA0MjAwRkYxNDQzMDA0NkYwCis6MTAzRDYwMDAwMDAwMDAwMDhGNjMwMDU0OEY2MjAwNEMxMDYyMDA3REUxCis6MTAzRDcwMDAwMzYwMzAyMTkzNjIwMDAwMjQwMzAwNTAzMDQyMDBGRkIyCis6MTAzRDgwMDAxNDQzMDAyRjAwMDAwMDAwOEY0NDAxNDAzQzAyMDgwMDUzCis6MTAzRDkwMDA4QzQyMDBFMDI0MDNGRjgwMDA4MjEwMjEwMDQzMTAyNEE1Cis6MTAzREEwMDBBRjQyMDAyNDNDMDIwODAwOEM0MjAwRTA4RjY1MDA1NEMyCis6MTAzREIwMDAzQzAzMDAwQTAwODIyMDIxMzA4NDAwN0YwMzQ0MTAyMTRDCis6MTAzREMwMDAwMDQzMTAyMUFDNDUwMTA4OTc2MjAwM0M4RjYzMDA0QzEyCis6MTAzREQwMDAzMDQyRkZGRjAwMDIxMDQwMDA2MjE4MjFBRjYzMDA1QzE4Cis6MTAzREUwMDA4RjYzMDA1NDhGNjQwMDRDOTc2MjAwM0MwMDY0MTgyMzdBCis6MTAzREYwMDAzMDQyRkZGRjAwMDMxODQzMDAwMjEwNDAwMDQzMTAyQTI2Cis6MTAzRTAwMDAxMDQwMDAwNjAwMDAwMDAwOEY2MjAwNTQ4RjYzMDA0Q0Q5Cis6MTAzRTEwMDAwMDQzMTAyMzBBMDAwRjU4MDAwMjEwNDM5NzYyMDAzQzMxCis6MTAzRTIwMDAzMDQyRkZGRjAwMDIxMDQwQUNDMjAwNjQyNDAyMDAwMUQ3Cis6MTAzRTMwMDBBMEMwMDA3Q0EwQzIwMDg0MjQwMjBDODBBRjQyMDAyNEY5Cis6MTAzRTQwMDAwRTAwMEYwQThGNDQwMTQwMTA0MDAwNDc4RkJGMDAxMDQyCis6MTAzRTUwMDA4RjQzMDE0MDhGNDIwMUY4MDQ0MEZGRkUyNDAyMDAwMjFDCis6MTAzRTYwMDBBRjQzMDFDMEEzNDIwMUM0M0MwMjEwMDBBRjQyMDFGOEJECis6MTAzRTcwMDAwQTAwMEZBODhGQkYwMDEwOTM2MjAwM0YyNDAzMDAxMEI4Cis6MTAzRTgwMDAzMDQyMDBGRjE0NDMwMDA0MDAwMDAwMDA4RjQ0MDE0MDUyCis6MTAzRTkwMDAwQTAwMEY5NDAwMDAyODIxOTM2MjAwM0YyNDAzMDAxNkJCCis6MTAzRUEwMDAzMDQyMDBGRjE0NDMwMDA0MjQwMjAwMTRBMzYyMDAzRkM4Cis6MTAzRUIwMDAwQTAwMEZBMjAwMDAwMDAwOEY2MjAwNEM4RjYzMDA1MEM4Cis6MTAzRUMwMDAwMDQzMTAyMzA0NDEwMDI4OEZCRjAwMTA5MzYyMDA4MTNCCis6MTAzRUQwMDAyNDQyMDAwMUEzNjIwMDgxOTM2MjAwODEyQzQyMDAwNDBECis6MTAzRUUwMDAxNDQwMDAxMDAwMDAwMDAwOTM2MjAwM0YyNDAzMDAwNDBGCis6MTAzRUYwMDAzMDQyMDBGRjE0NDMwMDA2MDAwMDAwMDA4RjQ0MDE0MEUwCis6MTAzRjAwMDA4RkJGMDAxMDI0MDUwMDkzMEEwMDA1QTAyN0JEMDAxOEVDCis6MTAzRjEwMDA4RjQ0MDE0MDI0MDUwMDkzOEZCRjAwMTAwQTAwMDYwRjU0Cis6MTAzRjIwMDAyN0JEMDAxODhGNDQwMTQwMEUwMDAyNTAwMDAwMDAwMDIxCis6MTAzRjMwMDA4RjYyMDA1NDI0NDJGRkZGQUY2MjAwNTQ4RjYyMDA1MDMyCis6MTAzRjQwMDAyNDQyRkZGRkFGNjIwMDUwMEUwMDAyNTk4RjQ0MDE0MDJGCis6MTAzRjUwMDA4RjQ0MDE0MDhGQkYwMDEwMjQwNTAwMDQwQTAwMDI1RTU4Cis6MTAzRjYwMDAyN0JEMDAxODhGQkYwMDEwMDNFMDAwMDgyN0JEMDAxODEwCis6MTAzRjcwMDA4RjQyMDE4ODkzNjMwMDdFMDAwMjE0MDIzMDQ0MDBGRkU4Cis6MTAzRjgwMDAzMDYzMDBGRjE0NjQwMDBEMDAwMDAwMDA5MzYyMDA4MEE1Cis6MTAzRjkwMDAzMDQyMDBGRjEwNDQwMDA5MDAwMDAwMDBBMzY0MDA4MENDCis6MTAzRkEwMDA5MzYyMDAwMDI0MDMwMDUwMzA0MjAwRkYxNDQzMDAwNEQ5Cis6MTAzRkIwMDAwMDAwMDAwMDBBMDAwNkQ3OEY0NDAxODBBMzY0MDA4MDNGCis6MTAzRkMwMDAwM0UwMDAwODAwMDAwMDAwMjdCREZGRThBRkIwMDAxMENDCis6MTAzRkQwMDBBRkJGMDAxNDkzNjIwMDA1MjQwMzAwMzAzMDQyMDAzMDZDCis6MTAzRkUwMDAxNDQzMDA4OTAwODA4MDIxM0MwMjA4MDA4QzQyMDAyMDlDCis6MTAzRkYwMDAxMDQwMDA4MDAyMDAyMDIxMEUwMDA0OTMwMDAwMDAwMDA5Cis6MTA0MDAwMDA4Rjg1MDAyMEFDQjAwMDAwOTM2MjAwM0U5MzYzMDAzRkI4Cis6MTA0MDEwMDAzMDQyMDBGRjAwMDIxMjAwMzA2MzAwRkYwMDQzMTAyNTExCis6MTA0MDIwMDBBQ0EyMDAwNDkzNjIwMDgyMDAwMjE2MDAwMDAyMTYwMzk0Cis6MTA0MDMwMDAwNDQxMDAwNTAwMDAwMDAwM0MwMzA4MDA4QzYzMDA0OEI4Cis6MTA0MDQwMDAwQTAwMEZFNjAwMDAwMDAwOTM2MjAwM0UzMDQyMDA0MDhDCis6MTA0MDUwMDAxNDQwMDAwMzAwMDAxODIxOTM2MjAwODEzMDQzMDBGRkU4Cis6MTA0MDYwMDA5MzYyMDA4MjAwMDMxRTAwMzA0MjAwRkYwMDAyMTQwMDMxCis6MTA0MDcwMDAwMDYyMTgyNUFDQTMwMDA4OEY2MjAwNDBBQ0EyMDAwQ0JGCis6MTA0MDgwMDA4RjYyMDA0OEFDQTIwMDEwOEY2MjAwNENBQ0EyMDAxNEZBCis6MTA0MDkwMDA4RjYyMDA1MDhGNjMwMDRDMDA0MzEwMjMwNDQxMDAwM0UzCis6MTA0MEEwMDAwMDAwMDAwMDBBMDAwRkZBOEY2MjAwNEM4RjYyMDA1MDdGCis6MTA0MEIwMDBBQ0EyMDAxODNDMDIwODAwOTQ0MjRCNUUzQzAzQzAwQkNCCis6MTA0MEMwMDAwMDAwMjAyMTAwNDMxMDI1MEUwMDA0QjhBQ0EyMDAxQzAzCis6MTA0MEQwMDA4RjYyMDA1NDhGODQwMDIwQUM4MjAwMDA4RjYyMDA1OEYxCis6MTA0MEUwMDBBQzgyMDAwNDhGNjIwMDVDQUM4MjAwMDg4RjYyMDA2MENBCis6MTA0MEYwMDA4RjQzMDA3NDAwNDMxMDIxQUM4MjAwMEM4RjYyMDA2NDc3Cis6MTA0MTAwMDBBQzgyMDAxMDk3NjMwMDY4OTc2MjAwNkEwMDAzMUMwMDhECis6MTA0MTEwMDAzMDQyRkZGRjAwNjIxODI1QUM4MzAwMTQ5MzYyMDA4MkQ2Cis6MTA0MTIwMDAyNDAzMDA4MDMwNDIwMEZGMTQ0MzAwMDMwMDAwMDAwMDFECis6MTA0MTMwMDAwQTAwMTAyRUFDODAwMDE4OEY2MzAwMEMyNDAyMDAwMUNFCis6MTA0MTQwMDAxMDYyMDAwRTI0MDJGRkZGOTM2MjAwM0UzMDQyMDA0MEU2Cis6MTA0MTUwMDAxNDQwMDAwQTI0MDJGRkZGOEY2MzAwMEM4RjQyMDA3NDlBCis6MTA0MTYwMDAwMDYyMTgyMzNDMDIwODAwMDA2MjEwMjQxNDQwMDAwMjgwCis6MTA0MTcwMDAwMDAwMjgyMTAwNjAyODIxMDAwNTEwNDNBQzgyMDAxOEFGCis6MTA0MTgwMDAzQzAyMDgwMDk0NDI0QjVFM0MwM0MwMEMwMDAwMjAyMTFFCis6MTA0MTkwMDAwMDQzMTAyNThGODMwMDIwMEUwMDA0QjhBQzYyMDAxQzgxCis6MTA0MUEwMDA4RjYyMDAxODhGODMwMDIwM0MwNTA4MDA5NEE1NEI1RUE5Cis6MTA0MUIwMDAyNDA0MDAwMUFDNjIwMDAwQUM2MDAwMDQ4RjY2MDA2QzU3Cis6MTA0MUMwMDAzQzAyNDAwRDAwQTIyODI1QUM2NjAwMDg4RjYyMDBEQzhFCis6MTA0MUQwMDBBQzYyMDAwQ0FDNjAwMDEwOTM2MjAwMDUwMDAyMTYwMDk3Cis6MTA0MUUwMDBBQzYyMDAxNEFDNjAwMDE4MEUwMDA0QjhBQzY1MDAxQzkyCis6MTA0MUYwMDAwMjAwMjAyMThGQkYwMDE0OEZCMDAwMTBBMzYwMDAwNUMzCis6MTA0MjAwMDAwQTAwMDQyMTI3QkQwMDE4OEZCRjAwMTQ4RkIwMDAxMEQyCis6MTA0MjEwMDAwM0UwMDAwODI3QkQwMDE4OTc0MjAwN0MzMEM2MDBGRjZECis6MTA0MjIwMDBBMDg2MDA4NDMwNDdGRkZGMjQwMjAwMDUxNEMyMDAwQjYzCis6MTA0MjMwMDAyNEUzNDY1MDkwQTIwMTEyMkM0MjAwMDcxMDQwMDAwN0QwCis6MTA0MjQwMDAyNEUzMEEwMDkwQTMwMTEyMjQwMjAwMTQwMDYyMTAwNDY3Cis6MTA0MjUwMDAwMEUyMTAyMTBBMDAxMDY2MzA0N0ZGRkYzMDY3RkZGRkMxCis6MTA0MjYwMDAwM0UwMDAwOEE0ODcwMDE0QUM4NzAwNEM4Q0EyMDEwODZFCis6MTA0MjcwMDAwMDgwNDAyMTAwQTA0ODIxMDBFMjEwMjMzMEM2MDBGRjRBCis6MTA0MjgwMDAxODQwMDAwMzkzQUEwMDEzMjRFMkZGRkNBQ0EyMDEwODJCCis6MTA0MjkwMDAzMEMyMDAwMTEwNDAwMDA4MDAwMDAwMDA4RDAyMDA1MEY0Cis6MTA0MkEwMDAwMEUyMTAyMzA0NDEwMDEzMjQwNjAwMDU4RDAyMDA1NDhGCis6MTA0MkIwMDAxMEUyMDAxMDAwMDAwMDAwOEQwMjAwNTQxNEUyMDAxQTA5Cis6MTA0MkMwMDAwMDAwMDAwMDNDMDIwODAwOEM0MjAwRDgzMDQyMDAyMDcwCis6MTA0MkQwMDAxMDQwMDAwQTI0MDIwMDAxOTEwMzAwNzg5MTAyMDA4MzNCCis6MTA0MkUwMDAxNDQzMDAwNjI0MDIwMDAxMDEwMDIwMjEwMTIwMjgyMTlFCis6MTA0MkYwMDAyNDA2MDAwNDBBMDAxMDU0MDAwMDAwMDBBMTAwMDA4NEZECis6MTA0MzAwMDAxMTQwMDAwOUE1MDIwMDE0OEY0MzAxMDA4RjQyMDFGOEZCCis6MTA0MzEwMDAwNDQwRkZGRTI0MDIwMDAyQUY0MzAxQzBBMzQyMDFDNEQ3Cis6MTA0MzIwMDAzQzAyMTAwMEFGNDIwMUY4MDNFMDAwMDgwMDAwMDAwMDZBCis6MTA0MzMwMDAyN0JERkZFODhGQTkwMDI4QUZCRjAwMTAwMDgwNDAyMUYzCis6MTA0MzQwMDAwMEU5MTgyMzE4NjAwMDczMzBDNjAwRkZBMDgwMDA3Q0NECis6MTA0MzUwMDBBMDgwMDA4MThDQTIwMTA4MDBFMjEwMjMwNDQwMDA0RERGCis6MTA0MzYwMDAwMDAwMDAwMDhDODIwMDUwOTQ4MzAwM0M4Qzg0MDA2NDI4Cis6MTA0MzcwMDAwMDQ3NDgyMzMwNjNGRkZGMDEyMzE4MjEwMDgzMjAyQkNGCis6MTA0MzgwMDAxMDgwMDAwNDAwMDAwMDAwOEQwMjAwNjQwQTAwMTBCN0Q1Cis6MTA0MzkwMDAwMEUyMTAyMTk1MDIwMDNDMzA0MkZGRkYwMTIyMTAyMTczCis6MTA0M0EwMDAwMEUyMTAyMUFEMDIwMDVDOTUwMjAwM0M4RDAzMDA1QzMwCis6MTA0M0IwMDAzMDQyRkZGRjAwMDIxMDQwMDBFMjEwMjEwMDQzMTAyQkFBCis6MTA0M0MwMDAxMDQwMDAwMzAwMDAwMDAwMEEwMDEwQzY4RDAyMDA1Q0NGCis6MTA0M0QwMDA5NTAyMDAzQzMwNDJGRkZGMDAwMjEwNDAwMEUyMTAyMTM1Cis6MTA0M0UwMDBBRDAyMDA1Q0ExMDAwMDg0QUQwNzAwNEM4Q0EyMDEwODY2Cis6MTA0M0YwMDAwMEUyMTAyMzE4NDAwMDAyMjRFMkZGRkNBQ0EyMDEwOEY2Cis6MTA0NDAwMDAzMEMyMDAwMTEwNDAwMDBBMDAwMDAwMDA4RDAyMDA1MDgwCis6MTA0NDEwMDAwMEUyMTAyMzA0NDEwMDA0MDEwMDIwMjE4RDAyMDA1NDE5Cis6MTA0NDIwMDAxNEUyMDAwMzAwMDAwMDAwMEEwMDEwRTgyNDA2MDAwNTYyCis6MTA0NDMwMDA4RDAyMDA1NDE0RTIwMDQ3OEZCRjAwMTAzQzAyMDgwMEI4Cis6MTA0NDQwMDA4QzQyMDBEODMwNDIwMDIwMTA0MDAwMEEyNDAyMDAwMUIzCis6MTA0NDUwMDA5MTAzMDA3ODkxMDIwMDgzMTQ0MzAwMDYyNDAyMDAwMUI2Cis6MTA0NDYwMDAwMTAwMjAyMTI0MDYwMDA0OEZCRjAwMTAwQTAwMTA1NDEwCis6MTA0NDcwMDAyN0JEMDAxOEExMDAwMDg0QTUwMjAwMTQ4RjQzMDEwMDhECis6MTA0NDgwMDA4RjQyMDFGODA0NDBGRkZFMjQwMjAwMDIwQTAwMTEwREQxCis6MTA0NDkwMDAwMDAwMDAwMDhDODIwMDVDMDA0OTEwMjMwMDQzMTAyQkI4Cis6MTA0NEEwMDA1NDQwMDAwMUFDODcwMDVDOTUwMjAwM0MzMDQyRkZGRkE1Cis6MTA0NEIwMDAwMDYyMTAyQjE0NDAwMDA3MjQwMjAwMDI5NTAyMDAzQzA5Cis6MTA0NEMwMDA4RDAzMDA1QzMwNDJGRkZGMDA2MjE4MjFBRDAzMDA1Q0U5Cis6MTA0NEQwMDAyNDAyMDAwMkFEMDcwMDRDQTEwMjAwODQwRTAwMEYwQTY2Cis6MTA0NEUwMDA4RjQ0MDEwMDEwNDAwMDFCOEZCRjAwMTA4RjQzMDEwMDVDCis6MTA0NEYwMDA4RjQyMDFGODA0NDBGRkZFMjQwMjAwMDJBRjQzMDFDMEQ2Cis6MTA0NTAwMDBBMzQyMDFDNDNDMDIxMDAwQUY0MjAxRjgwQTAwMTEyMzhCCis6MTA0NTEwMDA4RkJGMDAxMDMwQzIwMDEwMTA0MDAwMEU4RkJGMDAxMDdGCis6MTA0NTIwMDA4QzgzMDA1Qzk0ODIwMDNDMDA2OTE4MjMzMDQyRkZGRkJBCis6MTA0NTMwMDAwMDYyMTgyMTNDMDIzRkZGMzQ0NEZGRkYwMDgzMTAyQjMwCis6MTA0NTQwMDA1NDQwMDAwMTAwODAxODIxMDEyMzEwMjFBRDAyMDA1Q0JECis6MTA0NTUwMDA4RkJGMDAxMDAzRTAwMDA4MjdCRDAwMTgyN0JERkZFODRCCis6MTA0NTYwMDA4RkFBMDAyOEFGQkYwMDEwMDA4MDQwMjEwMEVBNDgyMzM2Cis6MTA0NTcwMDAxOTIwMDAyMTMwQzYwMEZGOEM4MzAwNUM4QzgyMDA2NDBGCis6MTA0NTgwMDAwMDZBMTgyMzAwNDMxMDJCNTA0MDAwMTAwMDY5MTgyMUM2Cis6MTA0NTkwMDA5NEEyMDExMDAxMjIxMDIxQTRBMjAxMTA5NEEyMDExMEUyCis6MTA0NUEwMDAzMDQyRkZGRjAwNDMxMDJCMTQ0MDAwMEEzQzAyM0ZGRjQzCis6MTA0NUIwMDA5NEEyMDExMDAwNDMxMDIzQTRBMjAxMTA5NDgyMDAzQzk1Cis6MTA0NUMwMDAzMDQyRkZGRjBBMDAxMTQyMDA2MjE4MjFBNEEwMDExMDJFCis6MTA0NUQwMDAzQzAyM0ZGRjM0NDRGRkZGMDA4MzEwMkI1NDQwMDAwMTk2Cis6MTA0NUUwMDAwMDgwMTgyMTAwNjcxMDIxQUQwMjAwNUNBMTAwMDA3QzUyCis6MTA0NUYwMDAwQTAwMTE4QUExMDAwMDgxMzBDMjAwMTAxMDQwMDAzQzY2Cis6MTA0NjAwMDAwMDAwMDAwMDhDODIwMDUwMDA0QTEwMjMxODQwMDAzODNGCis6MTA0NjEwMDAwMDAwMDAwMDkwODIwMDdDMjQ0MjAwMDFBMDgyMDA3QzA3Cis6MTA0NjIwMDA5MDgyMDA3QzNDMDMwODAwOEM2MzAwMjQzMDQyMDBGRjMxCis6MTA0NjMwMDAwMDQzMTAyQjE0NDAwMDVDOEZCRjAwMTA4Q0EyMDEwOEI3Cis6MTA0NjQwMDAwMEUyMTAyMzE4NDAwMDU4MDAwMDAwMDA4QzgzMDA1NDQyCis6MTA0NjUwMDA5NDgyMDAzQzAwNkExODIzMzA0MkZGRkYwMDAzMTg0Mzk1Cis6MTA0NjYwMDAwMDAyMTA0MDAwNDMxMDJBMTA0MDAwMDUwMDAwMDAwMDI2Cis6MTA0NjcwMDA4QzgyMDA1NDAwNEExMDIzMEEwMDExNzEwMDAyMTA0MzdBCis6MTA0NjgwMDA5NDgyMDAzQzMwNDJGRkZGMDAwMjEwNDBBRDAyMDA2NDAzCis6MTA0NjkwMDA5NTAyMDAzQzhEMDQwMDY0OTUwMzAwM0MzMDQyRkZGRjBFCis6MTA0NkEwMDAwMDAyMTA0MDAwODIyMDIxMzA2M0ZGRkYwMDgzMTgyMUE4Cis6MTA0NkIwMDAwMTQzMTAyMUFEMDIwMDVDOEQwMjAwNTRBQ0EyMDEwODQwCis6MTA0NkMwMDAyNDAyMDAwMkExMDIwMDg0MEUwMDBGMEE4RjQ0MDEwMEEwCis6MTA0NkQwMDAxMDQwMDAzNThGQkYwMDEwOEY0MzAxMDA4RjQyMDFGODVBCis6MTA0NkUwMDAwNDQwRkZGRTI0MDIwMDAyMEEwMDExQjMwMDAwMDAwMDkzCis6MTA0NkYwMDBBRDA3MDA0QzhDQTIwMTA4MDBFMjEwMjMxODQwMDAwMjE0Cis6MTA0NzAwMDAyNEUyRkZGQ0FDQTIwMTA4MzBDMjAwMDExMDQwMDAwQTA0Cis6MTA0NzEwMDAwMDAwMDAwMDhEMDIwMDUwMDBFMjEwMjMwNDQxMDAwNDVDCis6MTA0NzIwMDAwMTAwMjAyMThEMDIwMDU0MTRFMjAwMDMwMDAwMDAwMDZCCis6MTA0NzMwMDAwQTAwMTFBQTI0MDYwMDA1OEQwMjAwNTQxNEUyMDAxQTkyCis6MTA0NzQwMDA4RkJGMDAxMDNDMDIwODAwOEM0MjAwRDgzMDQyMDAyMDhECis6MTA0NzUwMDAxMDQwMDAwQTI0MDIwMDAxOTEwMzAwNzg5MTAyMDA4M0I2Cis6MTA0NzYwMDAxNDQzMDAwNjI0MDIwMDAxMDEwMDIwMjEyNDA2MDAwNDU1Cis6MTA0NzcwMDA4RkJGMDAxMDBBMDAxMDU0MjdCRDAwMThBMTAwMDA4NDRDCis6MTA0NzgwMDBBNTAyMDAxNDhGNDMwMTAwOEY0MjAxRjgwNDQwRkZGRTkwCis6MTA0NzkwMDAyNDAyMDAwMkFGNDMwMUMwQTM0MjAxQzQzQzAyMTAwMDQ2Cis6MTA0N0EwMDBBRjQyMDFGODhGQkYwMDEwMDNFMDAwMDgyN0JEMDAxOERBCis6MTA0N0IwMDA4RkFBMDAxMDhDODIwMDUwMDA4MDQwMjEzMEM2MDBGRjdDCis6MTA0N0MwMDAwMDRBMTAyMzAwQTA0ODIxMTg0MDAwMDcwMEUwMTgyMUVCCis6MTA0N0QwMDAyNDAyMDAwMUEwODAwMDg0QTBBMDAxMTJBNDgyMDAxNDgxCis6MTA0N0UwMDAwQTAwMTEyNUFGQUEwMDEwQTA4MDAwODFBRDA3MDA0QzdGCis6MTA0N0YwMDA4Q0EyMDEwODAwRTIxMDIzMTg0MDAwMDIyNEUyRkZGQzEyCis6MTA0ODAwMDBBQ0EyMDEwODMwQzIwMDAxMTA0MDAwMDgwMDAwMDAwMDA2Cis6MTA0ODEwMDA4RDAyMDA1MDAwNjIxMDIzMDQ0MTAwMTMyNDA2MDAwNTlECis6MTA0ODIwMDA4RDAyMDA1NDEwNjIwMDEwMDAwMDAwMDA4RDAyMDA1NDQwCis6MTA0ODMwMDAxNDYyMDAxMTAwMDAwMDAwM0MwMjA4MDA4QzQyMDBEODA1Cis6MTA0ODQwMDAzMDQyMDAyMDEwNDAwMDBBMjQwMjAwMDE5MTAzMDA3ODQ5Cis6MTA0ODUwMDA5MTAyMDA4MzE0NDMwMDA2MjQwMjAwMDEwMTAwMjAyMTdDCis6MTA0ODYwMDAwMTIwMjgyMTI0MDYwMDA0MEEwMDEwNTQwMDAwMDAwMDQyCis6MTA0ODcwMDBBMTAwMDA4NEE1MDIwMDE0MDNFMDAwMDgwMDAwMDAwMDZECis6MTA0ODgwMDAyN0JERkZFMEFGQkYwMDE4Mjc0MjAxMDA5MDQ2MDAwQTk1Cis6MTA0ODkwMDA4QzQ4MDAxNDhDOEIwMDRDOTA4MjAwODQzMEM5MDBGRjNGCis6MTA0OEEwMDAwMTY4MTgyMzMwNEEwMEZGMUM2MDAwMUEyRDQ2MDAwNkRDCis6MTA0OEIwMDAyNDAyMDAwMTAxNDIxMDA0MTBDMDAwMTYzMDQzMDAwMzFFCis6MTA0OEMwMDAwMTIwMzAyMTAxMDAzODIxMTQ2MDAwMDczMDRDMDAwQzE5Cis6MTA0OEQwMDAxNTgwMDAwOTMwNDIwMDMwMTQ0MDAwMEI4RkJGMDAxOEQzCis6MTA0OEUwMDAwQTAwMTIxNDAwMDAwMDAwMEUwMDExMjVBRkFCMDAxMEVBCis6MTA0OEYwMDAwQTAwMTIxNDhGQkYwMDE4MEUwMDEwOUFBRkFCMDAxMDAwCis6MTA0OTAwMDAwQTAwMTIxNDhGQkYwMDE4QUZBQjAwMTAwRTAwMTFCQUNFCis6MTA0OTEwMDBBRkFBMDAxNDhGQkYwMDE4MDNFMDAwMDgyN0JEMDAyMEQ1Cis6MTA0OTIwMDAyNDAyMDAwM0EwODIwMDg0OEM4MjAwNTQwM0UwMDAwODZCCis6MTA0OTMwMDBBQ0EyMDEwODNDMDIwMDA4MDM0MjE4MjE5MDYyMDA4MUU5Cis6MTA0OTQwMDAyNDA2MDA0MzNDMDc2MDE5MjQ0MjAwMDFBMDYyMDA4MTU0Cis6MTA0OTUwMDA5MDYzMDA4MTNDMDIwODAwOEM0MjAwQzAzMDYzMDBGRjdECis6MTA0OTYwMDAxNDYyMDAxMDI0MDNGRjgwM0MwMjA4MDA4QzQyMDBFMDI3Cis6MTA0OTcwMDAwMDgyMTAyMTAwNDMxMDI0QUY0MjAwMjQzQzAyMDgwMEIyCis6MTA0OTgwMDA4QzQyMDBFMDNDMDMwMDBBMDA4MjEwMjEzMDQyMDA3RjhDCis6MTA0OTkwMDAwMzQyMTAyMTAwNDMxMDIxOTQ0NTAwRDQwQTAwMEFGMTdCCis6MTA0OUEwMDAzMEE1RkZGRjAzRTAwMDA4MDAwMDAwMDAyN0JERkZFMDg2Cis6MTA0OUIwMDBBRkJGMDAxOEFGQjEwMDE0QUZCMDAwMTA4RjQyMDE4MDNDCis6MTA0OUMwMDAwMDgwODAyMTAwQTA4ODIxMEUwMDEyMUIwMDQwMjAyMUMxCis6MTA0OUQwMDBBMjAwMDA4NDhFMDIwMDU0OEZCRjAwMTg4RkIwMDAxMDE4Cis6MTA0OUUwMDBBRTIyMDEwODhGQjEwMDE0MDNFMDAwMDgyN0JEMDAyMEFCCis6MTA0OUYwMDAyN0JERkZFMDNDMDIwMDA4QUZCMDAwMTBBRkJGMDAxOEI5Cis6MTA0QTAwMDBBRkIxMDAxNDAzNDI4MDIxOEY1MTAxNDA5MjAzMDA4NDEyCis6MTA0QTEwMDA4RTA0MDA1MDhFMDIwMDRDMTQ4MjAwNDAzMDY2MDBGRjZECis6MTA0QTIwMDAzQzAyMDgwMDhDNDIwMEUwMjQwM0ZGODAwMjIyMTAyMTk3Cis6MTA0QTMwMDAwMDQzMTAyNEFGNDIwMDI0M0MwMjA4MDA4QzQyMDBFMEY2Cis6MTA0QTQwMDA5NzQ0MDA3QzkyMDUwMDgxMDIyMjEwMjEzMDQyMDA3RkIxCis6MTA0QTUwMDAwMzQyMTgyMTNDMDIwMDBBMDA2MjE4MjExNEEwMDAwQjM2Cis6MTA0QTYwMDAzMDg0RkZGRjI0MDIwMDA1NTRDMjAwMTQyNDgyMDVEQ0I4Cis6MTA0QTcwMDA5MDYyMDExMjI0NDIwMDAxQTA2MjAxMTIyNDAyMEM4MDAzCis6MTA0QTgwMDBBRjQyMDAyNDBBMDAxMjczMjQwMjAwMDVBMDYwMDExMjQ0Cis6MTA0QTkwMDAyNDAyMDAwNTE0QzIwMDA5MjQ4MjA1REM5MjAyMDA4MTcwCis6MTA0QUEwMDAyQzQyMDAwNzUwNDAwMDA1MjQ4MjBBMDA5MjAzMDA4MTM2Cis6MTA0QUIwMDAyNDAyMDAxNDAwNjIxMDA0MDA4MjEwMjEzMDQ0RkZGRjIxCis6MTA0QUMwMDBBNjA0MDAxNDBFMDAxMjFCMDIyMDIwMjE5NjAyMDAzQ0I2Cis6MTA0QUQwMDA4RTAzMDA0QzAyMjAyMDIxMzA0MkZGRkYwMDAyMTA0MEQ0Cis6MTA0QUUwMDAwMDYyMTgyMTBFMDAwMjUwQUUwMzAwNUM5MjAyMDA3REFECis6MTA0QUYwMDAwMjIwMjAyMTM0NDIwMDQwMEUwMDAyNTlBMjAyMDA3RDEzCis6MTA0QjAwMDA4RjQyMDFGODA0NDBGRkZFMjQwMjAwMDJBRjUxMDFDMEIxCis6MTA0QjEwMDBBMzQyMDFDNDNDMDIxMDAwQUY0MjAxRjg4RkJGMDAxODRECis6MTA0QjIwMDA4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAyMEYzCis6MTA0QjMwMDAwODAwMEFDQzA4MDAwQjE0MDgwMDBCOTgwODAwMEJFNENFCis6MDQ0QjQwMDAwODAwMEMyMDNECis6MEM0QjQ0MDAwQTAwMDAyODAwMDAwMDAwMDAwMDAwMDAzMworOjEwNEI1MDAwMDAwMDAwMEQ2MzcwMzYyRTMyMkUzMTAwMDAwMDAwMDA4MAorOjEwNEI2MDAwMDYwMjAxMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNEI3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNQorOjEwNEI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAwNQorOjEwNEI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwNEJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwNEJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFGNAorOjEwNEJDMDAwMDAwMDAwMkIwMDAwMDAwMDAwMDAwMDA0MDAwMzBENDA2NgorOjEwNEJEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENQorOjEwNEJFMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAzMDAwMDAwMDBCMgorOjEwNEJGMDAwMDAwMDAwMEQwMDAwMDAwRDNDMDIwODAwMjQ0MjU4QTRGMworOjEwNEMwMDAwM0MwMzA4MDAyNDYzNUY3MEFDNDAwMDAwMDA0MzIwMkI4RAorOjEwNEMxMDAwMTQ4MEZGRkQyNDQyMDAwNDNDMUQwODAwMzdCRDdGRkNDQQorOjEwNEMyMDAwMDNBMEYwMjEzQzEwMDgwMDI2MTAwMEEwM0MxQzA4MDA0NgorOjEwNEMzMDAwMjc5QzU4QTQwRTAwMDFBQzAwMDAwMDAwMDAwMDAwMERFRAorOjEwNEM0MDAwMjdCREZGRTgzQzA5NjAxOEFGQkYwMDEwOEQyQzUwMDA1NQorOjEwNEM1MDAwMjQwREZGN0YyNDA4MDAzMTAxOEQ1ODI0MzU2QTM4MEM1QgorOjEwNEM2MDAwMjQwNzBDMDAzQzFBODAwMEFEMkE1MDAwM0MwNDgwMEE0NgorOjEwNEM3MDAwQUY0ODAwMDgzQzFCODAwOEFGNDcwMDI0MEUwMDA5MTUxMAorOjEwNEM4MDAwQUY4NDAwMTAwRTAwMDhEODAwMDAwMDAwMEUwMDA4MjVCOAorOjEwNEM5MDAwMDAwMDAwMDAwRTAwMTI1MjAwMDAwMDAwM0MwNDYwMTZFQworOjEwNENBMDAwOEM4NTAwMDAzQzA2RkZGRjNDMDI1MzUzMDBBNjE4MjRFRAorOjEwNENCMDAwMTA2MjAwNDczNDg2N0MwMDk0QzIwMUYyQTc4MDAwMkM2OQorOjEwNENDMDAwMTA0MDAwMDNBNzgwMDBDQzM4NTgxRTFFQTc5ODAwMkM2NworOjEwNENEMDAwOTRDMjAxRjgxMDQwMDAwNDk3ODMwMENDMzg1OTFFMUU3RQorOjEwNENFMDAwQTc5OTAwQ0M5NzgzMDBDQzJDN0YwMDY3NTNFMDAwMDE4QworOjEwNENGMDAwMjQwMzAwNjY5Nzg0MDAyQzJDODIwNDAxMTQ0MDAwMDJENworOjEwNEQwMDAwMDA2MDI4MjEyNDA0MDQwMDNDMDc2MDAwOENFOTA0Mzg3QQorOjEwNEQxMDAwMjQwMzEwM0MzMTI4RkZGRjExMDMwMDFGMzBCOUZGRkZBRgorOjEwNEQyMDAwNTcyMDAwMTBBMzgwMDBDRTI0MDIwMDUwQTM4MjAwQ0VBMgorOjEwNEQzMDAwOTM5RjAwQ0U1M0UwMDAwRkE3ODUwMENDQTc4MDAwQ0M0NgorOjEwNEQ0MDAwOTc4NTAwQ0M4RkJGMDAxMEE3ODAwMDJDQTc4MDAwMzQ2RgorOjEwNEQ1MDAwQTc4MDAwRTYzQzAxMDgwMEFDMjUwMDgwMDNFMDAwMDhDNQorOjEwNEQ2MDAwMjdCRDAwMTg5MzlGMDBDRTU3RTBGRkY1QTc4MDAwQ0MyOQorOjEwNEQ3MDAwQTc4NTAwQ0M5Nzg1MDBDQzhGQkYwMDEwQTc4NDAwMkM5RQorOjEwNEQ4MDAwQTc4MDAwMzRBNzgwMDBFNjNDMDEwODAwQUMyNTAwODAyNQorOjEwNEQ5MDAwMDNFMDAwMDgyN0JEMDAxOEEzODAwMENFOENDQjAwM0NBOAorOjEwNERBMDAwMzE2QTAwMDExMTQwMDAwRTAwMDAwMDAwMzBBN0ZGRkYzMworOjEwNERCMDAwMTBFMEZGREUyNDAyMDA1MDhDQ0MwMEM4MzE4NjAwMDFEOAorOjEwNERDMDAwMTRDMEZGREM5MzlGMDBDRTBBMDAwMDdBMjQwMjAwNTEzOQorOjEwNEREMDAwOEM4RjAwMDQzQzBFNjAwMDBBMDAwMDVEMDFFRTMwMjE2MworOjEwNERFMDAwOENFRjA4MDgyNDBENTcwODAwMEY3NDAyMTFDRDAwMDQ0MQorOjEwNERGMDAwMzBCOEZGRkYyNDA1MDA2NjBBMDAwMDdCMjQwNDA0MDA4RAorOjEwNEUwMDAwMTcwMEZGQ0M5MzlGMDBDRTBBMDAwMDdBMjQwMjAwNTBDNgorOjEwNEUxMDAwOEY4NjAwMTAzMDg5RkZGRjAwMDkzOTQwOENDMzAwMTBENQorOjEwNEUyMDAwM0MwODAwNTAwMEU4MjAyNUFGNDMwMDM4OENDNTAwMTQzMgorOjEwNEUzMDAwMjc0MjA0MDBBRjgyMDAxQ0FGNDUwMDNDQUY0NDAwMzA2NQorOjEwNEU0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MgorOjEwNEU1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MgorOjEwNEU2MDAwOEY0QjAwMDAzMTZBMDAyMDExNDBGRkZEMDAwMDAwMDA2MAorOjEwNEU3MDAwMDNFMDAwMDgwMDAwMDAwMDhGODQwMDEwOTQ4QTAwMUFFQworOjEwNEU4MDAwOEM4NzAwMjQzMTQ5RkZGRjAwMDk0MEMwMDBFODMwMjEzMQorOjEwNEU5MDAwQUY0NjAwM0M4Qzg1MDAyNDhGNDMwMDNDMDBBMzEwMjNDOAorOjEwNEVBMDAwMTg0MDAwMjkwMDAwMDAwMDhDOEIwMDIwMjU2MjAwMDFDMgorOjEwNEVCMDAwM0MwRDAwNTAzNUFDMDAwOEFGNDIwMDM4QUY0QzAwMzAxQworOjEwNEVDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwNEVEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwNEVFMDAwOEY0RjAwMDAzMUVFMDAyMDExQzBGRkZEMDAwMDAwMDBEOAorOjEwNEVGMDAwOEY0QTA0MDAzQzA4MDAyMEFDOEEwMDEwOEY0OTA0MDQ0QgorOjEwNEYwMDAwQUM4OTAwMTRBRjQ4MDAzMDAwMDAwMDAwOTQ4NjAwMThGRgorOjEwNEYxMDAwOTQ4NzAwMUMwMEM3MTgyMUE0ODMwMDE4OTQ4NTAwMUFFOAorOjEwNEYyMDAwMjRBMjAwMDFBNDgyMDAxQTk0OTgwMDFBOTQ5OTAwMUVFOQorOjEwNEYzMDAwMTMzODAwMDMwMDAwMDAwMDAzRTAwMDA4MDAwMDAwMDAzOAorOjEwNEY0MDAwMDNFMDAwMDhBNDgwMDAxQThDODIwMDIwMEEwMDAwREMyNAorOjEwNEY1MDAwM0MwRDAwNTAwQTAwMDBDRDAwMDAwMDAwM0MwMzA4MDA5QQorOjEwNEY2MDAwOEM2MzAwMjA4RjgyMDAxODI3QkRGRkU4MTA2MjAwMDhDNAorOjEwNEY3MDAwQUZCRjAwMTAwRTAwMDEwNEFGODMwMDE4M0MwMzA4MDAwRgorOjEwNEY4MDAwOEM2MzAwMjAyNDA0MDAwMTEwNjQwMDA0OEY4OTAwMTA0OQorOjEwNEY5MDAwOEZCRjAwMTAwM0UwMDAwODI3QkQwMDE4OEZCRjAwMTA2RQorOjEwNEZBMDAwM0MwNzYwMTJBNTIwMDAwQTk1MjgwMDBBMzRFNTAwMTA4RAorOjEwNEZCMDAwMjdCRDAwMTgzMTA2RkZGRjAzRTAwMDA4QUNBNjAwOTBGMworOjEwNEZDMDAwM0MwMjA4MDA4QzQyMDAyMDI3QkRGRkM4QUZCRjAwMzQ2MAorOjEwNEZEMDAwQUZCRTAwMzBBRkI3MDAyQ0FGQjYwMDI4QUZCNTAwMjQ4RAorOjEwNEZFMDAwQUZCNDAwMjBBRkIzMDAxQ0FGQjIwMDE4QUZCMTAwMTREMworOjEwNEZGMDAwMTA0MDAwNTBBRkIwMDAxMDhGODQwMDEwOTQ4NjAwMDY1RgorOjEwNTAwMDAwOTQ4MzAwMEEwMEMzMjgyMzMwQjZGRkZGMTJDMDAwNEE3MQorOjEwNTAxMDAwOEZCRjAwMzQ5NDg5MDAxODk0OEEwMDBBMDEyQTQwMjMyMworOjEwNTAyMDAwMzEwMkZGRkYwMkMyMzgyQjE0RTAwMDAyMDJDMDIwMjEyRgorOjEwNTAzMDAwMDA0MDIwMjEyQzhDMDAwNTE1ODAwMDAyMDA4MEEwMjE1QQorOjEwNTA0MDAwMjQxNDAwMDQwRTAwMDBCMzAyODAyMDIxOEY4NzAwMTA3QQorOjEwNTA1MDAwMDI4MDk4MjFBRjgwMDAxNDk0RUQwMDBBMDI4MDg4MjExQworOjEwNTA2MDAwMTI4MDAwNEUzMUIyRkZGRjNDMTc3MDAwM0MxNTQwMDAyQgorOjEwNTA3MDAwM0MxRTYwMDA4RjhGMDAxQzhERUUwMDAwMDFENzE4MjRBRAorOjEwNTA4MDAwNTA3NTAwNTAwMjIwMjAyMTAyQTM4MDJCMTYwMDAwMzUwRAorOjEwNTA5MDAwM0MxODIwMDA1MDc4MDA0NzAyMjAyMDIxMjQxMDAwMDFGNQorOjEwNTBBMDAwOEY4MzAwMTQxNDYwMDAzOTAyOTE1ODIzMDIzMEY4MjNEMgorOjEwNTBCMDAwMDI1MEM4MjEzM0YxRkZGRjE2MjBGRkVFMzMzMkZGRkYwRAorOjEwNTBDMDAwOEY4NzAwMTAzQzExMDAyMEFGNTEwMDMwMDAwMDAwMDAxRAorOjEwNTBEMDAwOTRFNjAwMEEzQzFFNjAxMjM3RDUwMDEwMDI2NjI4MjFCMworOjEwNTBFMDAwQTRFNTAwMEE5NEUyMDAwQTk0RjIwMDBBOTRGNDAwMTg3RAorOjEwNTBGMDAwMzA1N0ZGRkYxMjkyMDAzQkFFQjcwMDkwOENFRDAwMTRDQQorOjEwNTEwMDAwOENFNDAwMTAwMDEzNzE0MDAxQUU0MDIxMDAwRTVGQzMxQgorOjEwNTExMDAwMDEwRTUwMkIwMDhCNDgyMTAxMkExODIxQUNFODAwMTQwNQorOjEwNTEyMDAwQUNFMzAwMTAwMkQzMzgyMzMwRjZGRkZGMTZDMEZGQjlGRQorOjEwNTEzMDAwOEY4NDAwMTA4RkJGMDAzNDhGQkUwMDMwOEZCNzAwMkNEQgorOjEwNTE0MDAwOEZCNjAwMjg4RkI1MDAyNDhGQjQwMDIwOEZCMzAwMUNDOQorOjEwNTE1MDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDg2OAorOjEwNTE2MDAwMjdCRDAwMzgxMDdFMDAxQjAwMDAwMDAwMTQ3N0ZGQ0MyNAorOjEwNTE3MDAwMjQxMDAwMDEwRTAwMTU5QjAwMDAwMDAwOEY4MzAwMTQxNgorOjEwNTE4MDAwMTA2MEZGQ0IwMjMwRjgyMzAyOTE1ODIzOEY4NzAwMTA2NAorOjEwNTE5MDAwMDE3MDIwMjEwQTAwMDE5NzMwOTNGRkZGOEY4MzAwMTRENAorOjEwNTFBMDAwMTQ2MEZGQ0IzQzExMDAyMEFGNTEwMDMwMEEwMDAxNjNCNgorOjEwNTFCMDAwMDAwMDAwMDAwRTAwMDc3RDAyNDAyODIxMEEwMDAxNTc3MAorOjEwNTFDMDAwMDA0MDgwMjEwRTAwMDMzQTAyNDAyODIxMEEwMDAxNTdDNgorOjEwNTFEMDAwMDA0MDgwMjEwRTAwMTQ2MzAyMjAyMDIxMEEwMDAxNTdBNAorOjEwNTFFMDAwMDA0MDgwMjEwRTAwMDBDRDAwMDAwMDAwMEEwMDAxNzk3RgorOjEwNTFGMDAwMDJEMzM4MjMyN0JERkZFOEFGQjAwMDEwQUZCRjAwMTRDMworOjEwNTIwMDAwMEUwMDAwM0YwMDAwMDAwMDNDMDI4MDAwMzQ1MDAwNzA5RgorOjEwNTIxMDAwMEEwMDAxQkE4RTA2MDAwMDhGNEYwMDAwMzlFRTAwMDEyRgorOjEwNTIyMDAwMzFDMjAwMDExMDQwMDAyNDhGODYwMEE4OEUwNzAwMDBDNAorOjEwNTIzMDAwM0MwQzA4MDA4RDhDMDAzQzNDMDkwODAwOEQyOTAwMzg4RQorOjEwNTI0MDAwMDBFNjY4MjMwMThEMjgyMTAwMDA1MDIxMDBBRDMwMkI5RAorOjEwNTI1MDAwMDEyQTQwMjEwMTA2MjAyMTNDMDEwODAwQUMyNTAwM0MyOAorOjEwNTI2MDAwQUY4NzAwQTgzQzAxMDgwMEFDMjQwMDM4MEUwMDAxMDZGRQorOjEwNTI3MDAwMDAwMDAwMDAzQzAzMDgwMDhDNjMwMDcwMTA2MEZGRTYzMworOjEwNTI4MDAwMDA2MDIwMjEzQzA1MDgwMDhDQTUwMDY4M0MwNjA4MDA1MQorOjEwNTI5MDAwOENDNjAwNkMwRTAwMTUyQTAwMDAwMDAwM0MwMTA4MDBCRQorOjEwNTJBMDAwQUMyMDAwNzA4RjRGMDAwMDM5RUUwMDAxMzFDMjAwMDFDOAorOjEwNTJCMDAwMTQ0MEZGREU4Rjg2MDBBODhFMEEwMDAwOEY4QjAwQThBNgorOjEwNTJDMDAwM0MwNTA4MDA4Q0E1MDAzQzNDMDQwODAwOEM4NDAwMzg5OAorOjEwNTJEMDAwMDE0QjQ4MjMwMEE5MzgyMTAwODIxODIxMDBFOTQwMkIwNgorOjEwNTJFMDAwMDA2ODEwMjEzQzAxMDgwMEFDMjcwMDNDM0MwMTA4MDA4QworOjEwNTJGMDAwQUMyMjAwMzg4RjVGMDEwMDI0MTlGRjAwMjQxODBDMDAzNQorOjEwNTMwMDAwMDNGOTIwMjQxMDk4MDAxMkFGODQwMDAwQUY0NDAwMjA1RAorOjEwNTMxMDAwOTM2RDAwMDAyNDBDMDAyMDMxQTYwMEZGMTBDQzAwMTI3OQorOjEwNTMyMDAwMjQwRTAwNTAxMENFMDAwNDNDMTk0MDAwQUY1OTAxMzg0MworOjEwNTMzMDAwMEEwMDAxQjMwMDAwMDAwMDBFMDAxMUM4MDAwMDAwMDBDOAorOjEwNTM0MDAwM0MxOTQwMDBBRjU5MDEzODBBMDAwMUIzMDAwMDAwMDBDOQorOjEwNTM1MDAwMEUwMDAxMUYwMDAwMDAwMDNDMTk0MDAwQUY1OTAxMzg0OQorOjEwNTM2MDAwMEEwMDAxQjMwMDAwMDAwMDhGNTgwMTAwMDA4MDI4MjFDRQorOjEwNTM3MDAwMzMwRjAwRkYwMUUwMjAyMTBFMDAwMkYxQUY4RjAwMDQ4NworOjEwNTM4MDAwM0MxOTQwMDBBRjU5MDEzODBBMDAwMUIzMDAwMDAwMDA4OQorOjEwNTM5MDAwMDBBNDEwMkIyNDAzMDAwMTEwNDAwMDA5MDAwMDMwMjE1QworOjEwNTNBMDAwMDAwNTI4NDAwMEE0MTAyQjA0QTAwMDAzMDAwMzE4NDBBRgorOjEwNTNCMDAwNTQ0MEZGRkMwMDA1Mjg0MDUwNjAwMDBBMDAwNDE4MkJGMAorOjEwNTNDMDAwMDA4NTM4MkI1NEUwMDAwNDAwMDMxODQyMDBDMzMwMjU0OAorOjEwNTNEMDAwMDA4NTIwMjMwMDAzMTg0MjE0NjBGRkY5MDAwNTI4NDJDRAorOjEwNTNFMDAwMDAwNDE4MkIwM0UwMDAwODAwQzMxMDIxOEY0MjAxQjgwRAorOjEwNTNGMDAwMDQ0MEZGRkUwMDAwMDAwMEFGNDQwMTgwM0MwMzEwMDBBOQorOjEwNTQwMDAwMjQwNDAwNDBBRjQ1MDE4NEEzNDQwMTg4QTM0NjAxODlEOAorOjEwNTQxMDAwQTc0NzAxOEEwM0UwMDAwOEFGNDMwMUI4MzA4NEZGRkZDQgorOjEwNTQyMDAwMDA4MDM4MjEzMEE1RkZGRjAwMDAyMDIxMEEwMDAyMkE1OQorOjEwNTQzMDAwMjQwNjAwODAzMDg3RkZGRjhDQTQwMDAwMjQwNjAwMzg3QgorOjEwNTQ0MDAwMEEwMDAyMkEwMDAwMjgyMThGODMwMDM4OEY4NjAwMzA0RQorOjEwNTQ1MDAwMTA2NjAwMEIwMDgwNDAyMTNDMDcwODAwMjRFNzVBMTgyMgorOjEwNTQ2MDAwMDAwMzI4QzAwMEE3MTAyMThDNDQwMDAwMjQ2MzAwMDEyMQorOjEwNTQ3MDAwMTA4ODAwMDUzMDYzMDAwRjU0NjZGRkZBMDAwMzI4QzA0RgorOjEwNTQ4MDAwMDNFMDAwMDgwMDAwMTAyMTNDMDcwODAwMjRFNzVBMUMzNAorOjEwNTQ5MDAwMDBBNzMwMjEwM0UwMDAwODhDQzIwMDAwM0MwMzkwMDAwQworOjEwNTRBMDAwMzQ2MjAwMDEwMDgyMjAyNUFGNDQwMDIwOEY0NTAwMjA5NworOjEwNTRCMDAwMDRBMEZGRkUwMDAwMDAwMDAzRTAwMDA4MDAwMDAwMDA2MAorOjEwNTRDMDAwM0MwMzgwMDAzNDYyMDAwMTAwODIyMDI1MDNFMDAwMDhENAorOjEwNTREMDAwQUY0NDAwMjAyN0JERkZFMEFGQjEwMDE0MzA5MUZGRkZDMworOjEwNTRFMDAwQUZCMDAwMTBBRkJGMDAxODEyMjAwMDEzMDBBMDgwMjE0MQorOjEwNTRGMDAwOENBMjAwMDAyNDA0MDAwMjI0MDYwMTQwMTA0MDAwMEY4QQorOjEwNTUwMDAwMDA0MDI4MjEwRTAwMEM1QzAwMDAwMDAwMDAwMDEwMjE2QgorOjEwNTUxMDAwQUUwMDAwMDAwMjIwMzgyMThGQkYwMDE4OEZCMTAwMTRBOAorOjEwNTUyMDAwOEZCMDAwMTAwMDQwMjAyMTAwMDAyODIxMDAwMDMwMjExMQorOjEwNTUzMDAwMEEwMDAyMkEyN0JEMDAyMDhDQTIwMDAwMDIyMDM4MjE4OAorOjEwNTU0MDAwOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwMDA0MDIwMjFEMQorOjEwNTU1MDAwMDAwMDI4MjEwMDAwMzAyMTBBMDAwMjJBMjdCRDAwMjA3NworOjEwNTU2MDAwMDBBMDEwMjEzMDg3RkZGRjhDQTUwMDA0OEM0NDAwMDBCMAorOjEwNTU3MDAwMEEwMDAyMkEyNDA2MDAwNjI3QkRGRkUwQUZCMDAwMTA5MworOjEwNTU4MDAwQUZCRjAwMThBRkIxMDAxNDkzNjMwMDNFMDA4MDgwMjFDQworOjEwNTU5MDAwMDA4MDI4MjEzMDYyMDA0MDAwMDAyMDIxMTA0MDAwMEZEMAorOjEwNTVBMDAwOEUxMTAwMDAwRTAwMDg1MTAyMjAyMDIxOTM2NzAwMDA5OAorOjEwNTVCMDAwMjQwNDAwNTAzMEU1MDBGRjUwQTQwMDEyOEUwRjAwMDBCQworOjEwNTVDMDAwMDIyMDIwMjE4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTA2RgorOjEwNTVEMDAwQTc2MjAxM0MwQTAwMDkxMTI3QkQwMDIwMEUwMDAyODdDNgorOjEwNTVFMDAwMDAwMDAwMDAwRTAwMDg1MTAyMjAyMDIxOTM2NzAwMDBGNworOjEwNTVGMDAwMjQwNDAwNTAzMEU1MDBGRjE0QTRGRkYyMDIyMDIwMjExMworOjEwNTYwMDAwOEUwRjAwMDAzQzEwMDgwMDhFMTAwMDUwM0MwRDAwMEM2NgorOjEwNTYxMDAwMjQwQkZGODAwMUYwNTAyMTMxNEUwMDdGMDFEQTYwMjEyMAorOjEwNTYyMDAwMDE4RDQwMjEwMTRCNDgyNEFGNDkwMDI4MDIyMDIwMjE1MAorOjEwNTYzMDAwOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwQTUwMjAwRDZFNAorOjEwNTY0MDAwMjdCRDAwMjAwQTAwMDkxMUFGODgwMEQwMjdCREZGRTA2OAorOjEwNTY1MDAwQUZCRjAwMThBRkIxMDAxNEFGQjAwMDEwOTM2NjAwMDFFNworOjEwNTY2MDAwMDA4MDgwMjEwRTAwMDI1NjMwRDEwMDA0OTM2NDAwMDVCMgorOjEwNTY3MDAwMDAxMDI5QzJBNzY1MDAwMDM0ODMwMDQwQTM2MzAwMDUyMQorOjEwNTY4MDAwMEUwMDAyNUYwMjAwMjAyMTBFMDAwOTEzMDIwMDIwMjFGQgorOjEwNTY5MDAwMjQwMjAwMDFBRjYyMDAwQzAyMDAyODIxQTc2MjAwMTA2MgorOjEwNTZBMDAwMjQwNDAwMDJBNzYyMDAxMjI0MDYwMTQwQTc2MjAwMTQyRAorOjEwNTZCMDAwMEUwMDBDNUNBNzYyMDAxNjE2MjAwMDBGOEZCRjAwMThBQQorOjEwNTZDMDAwOTc4QzAwMzQzQzBCMDgwMDhENkIwMDc4MjU4OEZGRkYxOQorOjEwNTZEMDAwMzEwOUZGRkYyNTZBMDAwMTAxMkEzODJCMTBFMDAwMDY3RQorOjEwNTZFMDAwQTc4ODAwMzQzQzBGNjAwNjI0MEUwMDE2MzVFRDAwMTAyQworOjEwNTZGMDAwQURBRTAwNTA4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTBGNgorOjEwNTcwMDAwMDNFMDAwMDgyN0JEMDAyMDI3QkRGRkUwQUZCMTAwMTQ3MworOjEwNTcxMDAwQUZCRjAwMThBRkIwMDAxMDAwQTA4ODIxMTA4MDAwMEFCMQorOjEwNTcyMDAwM0MwMzYwMDAyNDAyMDA4MDEwODIwMDEyMDAwMDAwMDA5MAorOjEwNTczMDAwMDAwMDAwMEQ4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTA1MworOjEwNTc0MDAwMDNFMDAwMDgyN0JEMDAyMDhDNjgyQkY4MDUwMEZGRkU1MQorOjEwNTc1MDAwMDAwMDAwMDBBQzcxMkJDMDhGQkYwMDE4OEZCMTAwMTQ4NworOjEwNTc2MDAwOEZCMDAwMTAzQzA5MTAwMDI3QkQwMDIwMDNFMDAwMDhBNgorOjEwNTc3MDAwQUM2OTJCRjgwRTAwMDI1NjAwQTAyMDIxOTM2NTAwMDVBRAorOjEwNTc4MDAwMDIyMDIwMjEwRTAwMDI1RjMwQjAwMEZGMjQwMzAwM0UwMworOjEwNTc5MDAwMTYwM0ZGRTcwMDAwMDAwMDhGNDQwMTc4MDQ4MEZGRkUzRAorOjEwNTdBMDAwMjQwNzAwMDczQzA2MTAwMEFGNTEwMTQwMDIyMDIwMjFEMQorOjEwNTdCMDAwQTM0NzAxNDQ4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTBCMQorOjEwNTdDMDAwQUY0NjAxNzgwQTAwMDJDMjI3QkQwMDIwMjdCREZGRThDRQorOjEwNTdEMDAwQUZCRjAwMTRBRkIwMDAxMDhGNTAwMDIwMDAwMDAwMDBEOQorOjEwNTdFMDAwMEUwMDA5MTNBRjQ0MDAyMEFGNTAwMDIwOEZCRjAwMTRGQgorOjEwNTdGMDAwOEZCMDAwMTAwM0UwMDAwODI3QkQwMDE4MzA4NEZGRkZDMQorOjEwNTgwMDAwMDA4MDM4MjEyNDA2MDAzNTAwQTAyMDIxMEEwMDAyMkE0OQorOjEwNTgxMDAwMDAwMDI4MjEzMDg0RkZGRjAwODAzODIxMjQwNjAwMzY1NAorOjEwNTgyMDAwMDBBMDIwMjEwQTAwMDIyQTAwMDAyODIxMjdCREZGRDA2NQorOjEwNTgzMDAwQUZCMzAwMUMzMDkzRkZGRkFGQjUwMDI0QUZCMjAwMTgyOAorOjEwNTg0MDAwQUZCRjAwMjhBRkI0MDAyMEFGQjEwMDE0QUZCMDAwMTA1QworOjEwNTg1MDAwMzBCNUZGRkYxMjYwMDAyNzAwMDA5MDIxOEY5MDAwMUNFMAorOjEwNTg2MDAwOEUwMzAwMDAzQzA2ODAwMDI0MDIwMDQwMDAwMzNFMDIzQworOjEwNTg3MDAwMDAwMzJDMDIzMEU0MDA3RjAwNjY4ODI0MTQ4MjAwMUQ5RgorOjEwNTg4MDAwMzBBNTAwRkY4RjgzMDAyODJDNjgwMDBBNTEwMDAwMTAwQgorOjEwNTg5MDAwOEY5MTAwMTQwMDAzNTg4MDNDMEMwODAwMjU4QzU2OTQwRQorOjEwNThBMDAwMDE2QzUwMjE4RDQ5MDAwMDAxMjAwMDA4MDAwMDAwMDAxQgorOjEwNThCMDAwMDJCMjEwMjEzMDQ1RkZGRjBFMDAwMjM2MjQwNDAwODQ5RQorOjEwNThDMDAwMTYyMDAwMDI4RjkwMDAxQ0FGODAwMDI4OEY5MTAwMTREQQorOjEwNThEMDAwMjYwQzAwMjAyNjQzMDAwMTAxODA4MDIxMzA3MkZGRkY0QQorOjEwNThFMDAwMTYyMDAwMDRBRjhDMDAxQzAyNTM1MDJCMTU0MEZGREMyNworOjEwNThGMDAwMDAwMDAwMDAwMjQwMTAyMThGQkYwMDI4OEZCNTAwMjQ1NworOjEwNTkwMDAwOEZCNDAwMjA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQyOQorOjEwNTkxMDAwOEZCMDAwMTAwM0UwMDAwODI3QkQwMDMwMjQwRTAwMzREMworOjEwNTkyMDAwMTRBRTAwRjkwMDAwMDAwMDkyMDMwMDBFMjQxRjE2ODA0MAorOjEwNTkzMDAwM0MwNzAwMENBMzYzMDAyMTkyMDIwMDBEMDM0N0M4MjExRAorOjEwNTk0MDAwM0MwNjYwMDBBMzYyMDAyMDk2MTEwMDEyM0MwQTdGRkYxMworOjEwNTk1MDAwMzU0Q0ZGRkZBNzcxMDAzQzk2MEIwMDEwMjQwMzAwMDU5NworOjEwNTk2MDAwMzE2OEZGRkZBRjY4MDA4NDhFMDUwMDFDQUY1RjAwMjgyMAorOjEwNTk3MDAwOEYzODAwMDA4Q0M0NDQ0ODAzMDU3ODI2MDA4RjMwMjFGRQorOjEwNTk4MDAwQUY2NjAwNEM4RjY5MDA0QzI0Q0UwMDAxM0MwNTdGMDBCRgorOjEwNTk5MDAwQUY2OTAwNTA4Rjc0MDA1MEFGNzQwMDU0QUY2NjAwNzA1MAorOjEwNTlBMDAwQUY2RTAwNTg4RjZEMDA1ODI0MTQwMDUwQUY2RDAwNUMyRQorOjEwNTlCMDAwQTM2MDAwMjNBRjZDMDA2NEEzNjMwMDM3OEUwMjAwMTQ2MQorOjEwNTlDMDAwQUY2MjAwNDg4RjcxMDA0OEFGNzEwMDI0OEUwQjAwMTg0MQorOjEwNTlEMDAwQUY2QjAwNkM5MjA4MDAwQ0EzNjgwMDM2OTM3RjAwM0UwQQorOjEwNTlFMDAwMzdGOTAwMjBBMzc5MDAzRThGNzgwMDc0MDMwNTgwMjRFNgorOjEwNTlGMDAwMzYwRjQwMDBBRjZGMDA3NDkzNjQwMDAwMzA4OTAwRkZFMQorOjEwNUEwMDAwNTEzNDAyNDUyNDA0RkY4MDNDMDQwODAwMjQ4NDVBOTg0MQorOjEwNUExMDAwMEUwMDAyOEQwMDAwMDAwMDNDMTAwODAwOEUxMDVBOTgwNQorOjEwNUEyMDAwMEUwMDAyNTYwMjAwMjAyMTI0MDYwMDA0MjQwNzAwMDE3MworOjEwNUEzMDAwQTM2NjAwN0QwMjAwMjAyMTBFMDAwMjVGQTM2NzAwMDUxRgorOjEwNUE0MDAwOEY1RjAxNzgwN0UwRkZGRTI0MEIwMDAyQUY1MDAxNDA5QQorOjEwNUE1MDAwQTM0QjAxNDQ4RjkwMDAxQzNDMDgxMDAwQUY0ODAxNzgxNAorOjEwNUE2MDAwMEEwMDAzNjJBRjgwMDAyODJDQUQwMDM3NTFBMEZGOThEOAorOjEwNUE3MDAwOEY5MTAwMTQwMDA1QTA4MDNDMTgwODAwMjcxODU2QkMyMAorOjEwNUE4MDAwMDI5ODc4MjE4REVFMDAwMDAxQzAwMDA4MDAwMDAwMDA5RgorOjEwNUE5MDAwMjQxODAwMDYxNEI4MDAxMTAwMDAwMDAwM0MwODA4MDA5QgorOjEwNUFBMDAwOEQwODVBOTgyNDA0MDAwNUFGNDgwMDIwOEUxRjAwMTg2NgorOjEwNUFCMDAwQUY3RjAwMTg4Rjc5MDA0Q0FGNzkwMDFDOEY2NTAwNTBDNAorOjEwNUFDMDAwMTIyMDAwQzBBRjY1MDA3MDBBMDAwMzYyQUY4NDAwMjg5NgorOjEwNUFEMDAwMjQwNjAwMDcxMEE2MDA4MzI0MDMwMDA2M0MwNTA4MDBFNgorOjEwNUFFMDAwMjRBNTVBOTgwRTAwMDI2NDI0MDQwMDgxOEY5MDAwMUNBMworOjEwNUFGMDAwMDAxMTEwMkIwQTAwMDM2MkFGODIwMDI4MjQwNzAwMDQ2MworOjEwNUIwMDAwMTRBN0ZGRjYyNDA1MDA1MDNDMTgwODAwOEYxODVBOTg3NworOjEwNUIxMDAwQUY1ODAwMjA4RTBGMDAwOEFGNkYwMDQwOEUwOTAwMDhCQworOjEwNUIyMDAwQUY2OTAwNDQ4RTE0MDAwQ0FGNzQwMDQ4OEUwRTAwMTA1NAorOjEwNUIzMDAwQUY2RTAwNEM4RTBEMDAxMEFGNkQwMDg0OEUwQTAwMTQwNQorOjEwNUI0MDAwQUY2QTAwNTA4RTBDMDAxOEFGNkMwMDU0OEUwNDAwMUMxRAorOjEwNUI1MDAwQUY2NDAwNTg5MzYzMDAwMDMwNkIwMEZGMTE2NTAxRDhGQgorOjEwNUI2MDAwMDAwMDAwMDA4Rjc0MDA0ODhGNjkwMDQwMDI4OTcwMjM5NAorOjEwNUI3MDAwMDVDMDAwMDQyNDA0MDA4QzE2MjBGRkRFMjQwMjAwMDM2QworOjEwNUI4MDAwMjQwNDAwODIzQzA1MDgwMDI0QTU1QTk4MEUwMDAyODdEMAorOjEwNUI5MDAwMDAwMDAwMDA4RjkwMDAxQzAwMDAxMDIxMEEwMDAzNjIyQQorOjEwNUJBMDAwQUY4MjAwMjgyNDBGMDAwNTE0QUZGRkNDMjQwNTIwMDA4RAorOjEwNUJCMDAwM0MwNzA4MDA4Q0U3NUE5OEFGNDcwMDIwOEUwNjAwMDQ4NworOjEwNUJDMDAwQUY2NjAwNUM5MjA4MDAwODI0MTAwMDA4QTM2ODAwMjE1QQorOjEwNUJEMDAwOEY5RjAwMUM5M0Y5MDAwOUEzNzkwMDIwOEY4NjAwMUM3OQorOjEwNUJFMDAwOTBEODAwMEEzMzA0MDBGRjEwOTAwMDExMDAwMDAwMDA1QworOjEwNUJGMDAwMjg4NTAwMDkxNEEwMDA2OTI0MDIwMDAyMjQwQTAwMjA1QworOjEwNUMwMDAwMTA4QTAwMEIzNDA1ODAwMDI4OEQwMDIxMTVBMDAwMDhBMworOjEwNUMxMDAwMjQwNTQwMDAyNDBFMDA0MDEwOEUwMDA1M0MwNTAwMDFDNAorOjEwNUMyMDAwMjQxNDAwODAxMDk0MDAwMjNDMDUwMDAyMjQwNTQwMDA2QQorOjEwNUMzMDAwOEY3ODAwNzQzQzE5RkYwMDAzMTk4MDI0MDIwNTc4MjUzMQorOjEwNUM0MDAwQUY2RjAwNzQ5MEM0MDAwQkEzNjQwMDgxOEY4NDAwMUNBQworOjEwNUM1MDAwOTQ4OTAwMEMxMTIwMDE5MjAwMDAwMDAwOTQ5MDAwMEMyNworOjEwNUM2MDAwMjQwNkZGQkYyNDA1MDAwNEE3NzAwMDNDOTA4RjAwMEU5RgorOjEwNUM3MDAwQTM2RjAwM0U4Rjg0MDAxQzkwODkwMDBGQTM2OTAwM0YzMgorOjEwNUM4MDAwOEY4QjAwMUM4RDZFMDAxMDhGNTQwMDc0MDFENDY4MjMxQworOjEwNUM5MDAwQUY2RDAwNjA4RDZBMDAxNEFGNkEwMDY0OTU2QzAwMThFNworOjEwNUNBMDAwQTc2QzAwNjg5NTYzMDAxQUE3NjMwMDZBOEQ2MjAwMUNFOAorOjEwNUNCMDAwQUY2MjAwNkM5MTY3MDAwRUEzNjcwMDNFOTM2ODAwM0VFMAorOjEwNUNDMDAwMDEwNkY4MjQxMjIwMDE0QkEzN0YwMDNFOEY5MDAwMUM5OAorOjEwNUNEMDAwMEEwMDAzNjJBRjg1MDAyODI0MDcwMDIyMTRBN0ZGN0Y3MworOjEwNUNFMDAwMjQwMzAwMDczQzBCMDgwMDhENkI1QTk4MTIyMDAwMEMwRgorOjEwNUNGMDAwQUY0QjAwMjAwQTAwMDM2MkFGODMwMDI4MjQwQzAwMzM1RQorOjEwNUQwMDAwMTBBQzAwMTQyNDBBMDAyODNDMDUwODAwMjRBNTVBOTg2OQorOjEwNUQxMDAwMEUwMDAyM0MyNDA0MDA4MTBBMDAwM0VCOEY5MDAwMUM1QgorOjEwNUQyMDAwM0MwNDA4MDAyNDg0NUE5ODBFMDAwMjhEMDAwMDAwMDBGNAorOjEwNUQzMDAwOTM2MzAwMDAyNDExMDA1MDMwNjIwMEZGMTA1MTAxMzVDMAorOjEwNUQ0MDAwMDAwMDAwMDA4RjkwMDAxQzAwMDAxODIxMEEwMDAzNjI3MAorOjEwNUQ1MDAwQUY4MzAwMjgzQzBEMDgwMDhEQUQ1QTk4MjQwNDAwODFDMworOjEwNUQ2MDAwQUY0RDAwMjAzQzA1MDgwMDI0QTU1QTk4MEUwMDAyM0NDNworOjEwNUQ3MDAwQTM2QTAwMzQ4RjkwMDAxQzI0MDIwMDA5MEEwMDAzNjIwOQorOjEwNUQ4MDAwQUY4MjAwMjgwMkIyODgyMTMyMjVGRkZGMEUwMDAyMzZDMgorOjEwNUQ5MDAwMjQwNDAwODQwQTAwMDM2MjhGOTAwMDFDMTA4MkZGQTQ3OAorOjEwNURBMDAwMjQwNTA0MDAyODhCMDAwMzExNjAwMTcwMjQwQzAwMDRGQQorOjEwNURCMDAwMjQwMzAwMDE1NDgzRkY5RTI0MDU0MDAwMEEwMDA0M0I5NQorOjEwNURDMDAwMjQwNTAxMDAzQzA0MDgwMDI0ODQ1QTk4OEY2MjAwNEM4QQorOjEwNUREMDAwMEUwMDAyOEQ4RjYzMDA1MDhGOTAwMDFDMDAwMDIwMjE2OAorOjEwNURFMDAwMEEwMDAzNjJBRjg0MDAyODhFMTAwMDA0MjQwNDAwOEE5NQorOjEwNURGMDAwQUY1MDAwMjA5Mzc5MDAwNTMzMzgwMDAyMTcwMDAxNUY4RgorOjEwNUUwMDAwMDIwMDI4MjE5MzY4MDAyMzAyMDAyODIxMzExRjAwMjA2RQorOjEwNUUxMDAwMTdFMDAxNUEyNDA0MDA4RDkzNjcwMDNGMjQwNjAwMTIwNgorOjEwNUUyMDAwMzBFMjAwRkYxMDQ2MDE1NTI0MDQwMDgxMEUwMDAyNTZBNgorOjEwNUUzMDAwMDIwMDIwMjE5MzYzMDAyMzI0MDUwMDA0MDIwMDIwMjE5NgorOjEwNUU0MDAwMzQ2QjAwNDJBMzZCMDAyMzBFMDAwMjVGQTM2NTAwN0Q0QworOjEwNUU1MDAwOEY0NDAxNzgwNDgwRkZGRTI0MEEwMDAyQUY1MDAxNDAwNQorOjEwNUU2MDAwQTM0QTAxNDQ4RjkwMDAxQzNDMEMxMDAwQUY0QzAxNzhGOQorOjEwNUU3MDAwMEEwMDAzRUMwMDExMTAyQjhFMTAwMDA0MjQwNDAwOEE4OQorOjEwNUU4MDAwQUY1MDAwMjA5MzZFMDAwNTMxQ0QwMDAyMTVBMDAwMTYyMgorOjEwNUU5MDAwMDIwMDI4MjE5MzZGMDAzRjI0MTQwMDA0MDIwMDI4MjFFRgorOjEwNUVBMDAwMzFFOTAwRkYxMTM0MDAxMDI0MDQwMDgxMEUwMDAyNTY3NQorOjEwNUVCMDAwMDIwMDIwMjE5MzYyMDAyMzI0MDgwMDEyMjQxRkZGRkUwOQorOjEwNUVDMDAwMzQ0NjAwMjBBMzY2MDAyM0EzNjgwMDNGOTM3OTAwMDVCMQorOjEwNUVEMDAwMDIwMDIwMjEwMzNGQzAyNDBFMDAwMjVGQTM3ODAwMDVDQQorOjEwNUVFMDAwMDIwMDI4MjEwMDAwMjAyMTBFMDAwMzM0MDAwMDAwMDBFMQorOjEwNUVGMDAwMEEwMDAzRUI4RjkwMDAxQzhFMTAwMDA0M0MwMzAwMDg4NgorOjEwNUYwMDAwMDM0M0EwMjFBRjUwMDAyMDkyOEIwMDAwMjQwNTAwNTBENQorOjEwNUYxMDAwMzE2NDAwRkYxMDg1MDE2MTI0MDcwMDg4MDIwMDIwMjEwMAorOjEwNUYyMDAwMDAwMDI4MjEwRTAwMDIyQTI0MDYwMDBFOTI4RDAwMDA5NworOjEwNUYzMDAwMjQwRUZGODAwMjAwMjgyMTAxQUU4MDI1QTI5MDAwMDBERgorOjEwNUY0MDAwMjQwNDAwMDQwRTAwMEM1QzI0MDYwMDMwMEEwMDAzRUI1RAorOjEwNUY1MDAwOEY5MDAwMUM4RTA4MDAwNDNDMTQwODAwMjY5NDVBOTg2OAorOjEwNUY2MDAwM0MwMTA4MDBBQzI4NUE5OEFGNDgwMDIwOTIxRjAwMDM1QgorOjEwNUY3MDAwMzNGOTAwMDQxMzIwMDAwMjI0MDIwMDEyMjQwMjAwMDY1OAorOjEwNUY4MDAwQTM2MjAwM0Y5MjBCMDAxQjI0MDRGRkMwMzE2NTAwM0Y1OQorOjEwNUY5MDAwMDBBNDM4MjVBMzY3MDAzRTkyMDYwMDAzMzBDMjAwMDEyQQorOjEwNUZBMDAwMTQ0MDAxMzIwMDAwMDAwMDhFMDIwMDA4QUU4MjAwMDg5QQorOjEwNUZCMDAwM0MwMjA4MDA4QzQyNUFBMDEwNDAwMTMxMDAwMjQ5QzI0NAorOjEwNUZDMDAwQTc2OTAwMDg4RTE0MDAwQzI0MEMwMDAxMjQwMzAwMTQ5RgorOjEwNUZEMDAwQUY3NDAwMkM4RTBFMDAxMEFGNkUwMDMwOTYwRDAwMTZDMAorOjEwNUZFMDAwQTc2RDAwMzg5NjBBMDAxNEE3NkEwMDNBQUY2QzAwMEMzRgorOjEwNUZGMDAwQTc2QzAwMTBBNzZDMDAxMkE3NkMwMDE0QTc2QzAwMTYwOQorOjEwNjAwMDAwMTIyMDAxMzZBMzYzMDAzNDkyMEYwMDAzMzFGMDAwMDIyNgorOjEwNjAxMDAwMkUxMTAwMDE4RjkwMDAxQzI2MjIwMDA4MEEwMDAzNjI0NgorOjEwNjAyMDAwQUY4MjAwMjg4RTA0MDAwNDNDMEUwMDA4MDM0RTMwMjE4RAorOjEwNjAzMDAwQUY0NDAwMjA4RTA1MDAwODkwQ0QwMDAwMjQwQzAwNTBENQorOjEwNjA0MDAwMzFBQTAwRkYxMTRDMDA4NjI0MDcwMDg4MjQwNjAwMDlBRAorOjEwNjA1MDAwMEUwMDAyMkEwMDAwMDAwMDBBMDAwM0VCOEY5MDAwMUNEMworOjEwNjA2MDAwOEUwNDAwMUMwRTAwMDI0MTAwMDAwMDAwMTA0MDAwRjRFRAorOjEwNjA3MDAwMDA0MDUwMjE4Rjg5MDAxQzI0MDcwMDg5MDE0MDIwMjEwNQorOjEwNjA4MDAwOEQyNTAwMUMyNDA2MDAwMTBFMDAwMjJBMDAwMDAwMDBERAorOjEwNjA5MDAwMEEwMDAzRUI4RjkwMDAxQzk2MEQwMDAyM0MxNDA4MDBEMAorOjEwNjBBMDAwMjY5NDVBOTgzMUFBMDAwNDUxNDAwMEI4M0MxMDYwMDA3MAorOjEwNjBCMDAwOEUwRTAwMUMzQzAxMDgwMEFDMkU1QTk4QUY0RTAwMjBGQQorOjEwNjBDMDAwOTIwNzAwMTAyNDA4MDAxNDMwRTIwMEZGMTQ0ODAwRDZBNAorOjEwNjBEMDAwMDAwMDAwMDA5NjBCMDAwMjMxNjMwMDAxMTQ2MDAxNjVBRQorOjEwNjBFMDAwMDAwMDAwMDA4RTAyMDAwNEFFODIwMDA4M0MxNDA4MDA4QworOjEwNjBGMDAwOEU5NDVBQTAxMjgwMDE1QjAwMDAwMDAwOEY3NDAwNzQxRgorOjEwNjEwMDAwM0MwMzgwMDAyNDA0MDAwMTAyODM1ODI1QUY2QjAwNzQxNworOjEwNjExMDAwQTM2MDAwMDVBRjY0MDAwQzNDMDcwODAwOENFNzVBQTBBMAorOjEwNjEyMDAwOEY4NjAwMUNBNzY0MDAxMDAwMDcxMUMyQTc2NDAwMTIyQworOjEwNjEzMDAwQTc2NDAwMTRBNzY0MDAxNkE3NjIwMDA4OENDODAwMDhCMgorOjEwNjE0MDAwMjQwNDAwMDJBRjY4MDAyQzhDQzUwMDBDQUY2NTAwMzA0MQorOjEwNjE1MDAwOTBERjAwMTBBMzdGMDAzNDhGOTkwMDFDOTMzMDAwMTE1MgorOjEwNjE2MDAwQTM3MDAwMzU4Rjk4MDAxQzkzMEYwMDEyQTM2RjAwMzZBOAorOjEwNjE3MDAwOEY4OTAwMUM5MTJFMDAxM0EzNkUwMDM3OEY5MDAwMUM5NgorOjEwNjE4MDAwOTYwRDAwMTRBNzZEMDAzODk2MEEwMDE2QTc2QTAwM0EwQgorOjEwNjE5MDAwOEUwQzAwMThBRjZDMDAyNDU2MjBGRENDQUY4NDAwMjg3NAorOjEwNjFBMDAwM0MwNTA4MDAyNEE1NUE5ODBFMDAwMjY0MDAwMDIwMjEzNgorOjEwNjFCMDAwOEY5MDAwMUMwQTAwMDRBNzAwMDAyMDIxOEUxMDAwMDQwQworOjEwNjFDMDAwMjQwNzAwODFBRjUwMDAyMDkzNjkwMDIzMzEzNDAwMTA3MAorOjEwNjFEMDAwMTI4MDAwMTcwMDAwMDAwMDAyMDAyMDIxMDAwMDI4MjE4QQorOjEwNjFFMDAwMjQwNjAwMUYwRTAwMDIyQTAwMDAwMDAwMEEwMDAzRUIzNAorOjEwNjFGMDAwOEY5MDAwMUMzQzA1MDgwMDI0QTU1QTk4MEUwMDAyODdDOQorOjEwNjIwMDAwMjQwNDAwODI4RjkwMDAxQzAwMDAyODIxMEEwMDAzNjJGMQorOjEwNjIxMDAwQUY4NTAwMjgzQzA0MDgwMDhDODQ1QTk4MEUwMDE0RThDRQorOjEwNjIyMDAwMDAwMDAwMDA4RjkwMDAxQzBBMDAwNDgyMDAwMDE4MjE2QQorOjEwNjIzMDAwMEUwMDAyNTYwMjAwMjAyMTkzNzgwMDIzMDIwMDIwMjE0NAorOjEwNjI0MDAwMzcwRjAwMTAwRTAwMDI1RkEzNkYwMDIzMDAwMDM4MjFGQgorOjEwNjI1MDAwMDIwMDIwMjEwMDAwMjgyMTBBMDAwNUE4MjQwNjAwMUZCMgorOjEwNjI2MDAwOTIwRjAwMEMzMUU5MDAwMTExMjAwMDAzMDAwMDAwMDAzMgorOjEwNjI3MDAwOTYxODAwMEVBNEQ4MDAyQzkyMUYwMDBDMzNGOTAwMDJDRgorOjEwNjI4MDAwMTMyMDAwMDUwMDAwMzgyMThFMDIwMDE0OTYwODAwMTIyOQorOjEwNjI5MDAwQUNDMjAwMUNBNEM4MDAxQTBBMDAwNTQzMjQwNjAwMDk2OQorOjEwNjJBMDAwM0MwNTA4MDAyNEE1NUE5ODBFMDAwMjg3MjQwNDAwOEJBMAorOjEwNjJCMDAwOEY5MDAwMUMwMDExMjgyQjBBMDAwMzYyQUY4NTAwMjg3NAorOjEwNjJDMDAwQUY2MDAwODQzQzBBMDgwMDhENEE1QTk4M0MwRDA4MDBEMworOjEwNjJEMDAwOERBRDAwNTAyNDBDRkY4MDNDMDIwMDBDMDE0RDE4MjFCNAorOjEwNjJFMDAwMDA2QzIwMjRBRjQ0MDAyODhFMDcwMDE0MzA2QjAwN0YyMAorOjEwNjJGMDAwMDE3QTI4MjEwMEEyQzgyMUFGMjcwMEQ4OEUwNjAwMTRGOQorOjEwNjMwMDAwQUY5OTAwRDBBRjI2MDBEQzhFMDgwMDEwMjUxRkZGRkVERAorOjEwNjMxMDAwMEEwMDA0MDhBRjNGMDEwODNDMDUwODAwOENBNTVBOTgwNAorOjEwNjMyMDAwM0MxOTA4MDA4RjM5MDA1MDI0Q0NGRkZFMDBCOUMwMjE3MQorOjEwNjMzMDAwMDMwNDc4MjRBRjRGMDAyODNDMTQwODAwOEU5NDVBOTgyOAorOjEwNjM0MDAwM0MwOTA4MDA4RDI5MDA1MDAyODk3MDIxMzFDRDAwN0Y2MQorOjEwNjM1MDAwMDFCQTUwMjEwMTQ3ODAyMUFFMDYwMEQ4QUY5MDAwRDA4RAorOjEwNjM2MDAwQUUwMDAwREMwQTAwMDNCMUFFMEMwMTA4NTQ4Q0ZFMzAxNAorOjEwNjM3MDAwMjQwNTQwMDAwQTAwMDQzQjI0MDUxMDAwMEUwMDAzMkVGMworOjEwNjM4MDAwMDAwMDAwMDAwQTAwMDNFQjhGOTAwMDFDOEUwRjQ0MkNDRAorOjEwNjM5MDAwM0MxODZDNjIzNzA5Nzk3MDNDMDEwODAwQUMyMDVBOThBRgorOjEwNjNBMDAwMTVFOTAwMDgyNDA1MDE0MDk3OUYwMDM0OTc4NjAwMkNDQQorOjEwNjNCMDAwMDI4MDI4MjEwM0U2QzgyQjEzMjAwMDExMjQwNDAwOTIzOAorOjEwNjNDMDAwMjQwNTAxNDAwRTAwMEM3QTI0MDQwMDAyM0MwMTA4MDA2MAorOjEwNjNEMDAwQUMyMjVBOThBRjQyMDAyMDNDMDUwODAwOENBNTVBOTg4MAorOjEwNjNFMDAwMTBBMDAwMDUyNDA0MDA4MzBFMDAwODQ1MDAwMDAwMDBGMgorOjEwNjNGMDAwMTA0MDAwMDkyNDA0MDA4MzNDMDUwODAwMjRBNTVBOTg5NQorOjEwNjQwMDAwMEUwMDAyNjQwMDAwMDAwMDhGOTAwMDFDMDAxMTIwMkI4MQorOjEwNjQxMDAwMEEwMDAzNjJBRjg0MDAyODBFMDAwODQ5MDAwMDAwMDA1MworOjEwNjQyMDAwMEEwMDA1NUY4RjkwMDAxQzBFMDAwODREMDAwMDAwMDA2MAorOjEwNjQzMDAwM0MwNTA4MDAyNEE1NUE5ODBBMDAwNjJGMjQwNDAwOEI2NgorOjEwNjQ0MDAwMjQwNDAwMDQwRTAwMEM3QTI0MDUwMDMwMTQ0MDAwMkFCNQorOjEwNjQ1MDAwMDA0MDUwMjE4Rjg5MDAxQzI0MDcwMDgzMDE0MDIwMjEyNworOjEwNjQ2MDAwOEQyNTAwMUMwQTAwMDU1MTI0MDYwMDAxOEUwNDAwMDgzOQorOjEwNjQ3MDAwMEUwMDAyNDEwMDAwMDAwMDBBMDAwNTFCQUU4MjAwMDg2OQorOjEwNjQ4MDAwM0MwNTA4MDAyNEE1NUE5ODBFMDAwMjNDMjQwNDAwODcwRAorOjEwNjQ5MDAwOEY5MDAwMUMwQTAwMDUzNjAwMTExMDJCOEY4MzAwMzhFNgorOjEwNjRBMDAwOEY4NjAwMzAxMDY2RkU5RDAwMDAzODIxM0MwNzA4MDBGMgorOjEwNjRCMDAwMjRFNzVBMUMwMDAzMjBDMDAwODcyODIxOENBQzAwMDA3MAorOjEwNjRDMDAwMTE5MDAwNjEyNDZBMDAwMTMxNDMwMDBGNTQ2NkZGRkEwNQorOjEwNjREMDAwMDAwMzIwQzAwQTAwMDRGNjAwMDAzODIxM0MwNTA4MDAzMworOjEwNjRFMDAwMjRBNTVBOTgwRTAwMDI4NzI0MDQwMDgyOEY5MDAwMUM3NQorOjEwNjRGMDAwMEEwMDA1MzYwMDAwMTAyMTNDMEIwMDA4MDM0QjIwMjE0OAorOjEwNjUwMDAwMjQwMzAwNTAyNDA3MDAwMUFGNDIwMDIwQTA4MzAwMDBCNAorOjEwNjUxMDAwQTA4NzAwMDE4RjgyMDAxQzkwNDgwMDA0QTA4ODAwMTgwQQorOjEwNjUyMDAwOEY4NTAwMUM5MEE2MDAwNUEwODYwMDE5OEY5RjAwMUM3NworOjEwNjUzMDAwOTNGOTAwMDZBMDk5MDAxQThGOTAwMDFDOTIxODAwMDc4QQorOjEwNjU0MDAwQTA5ODAwMUI4Rjk0MDAxQzkyOEYwMDA4QTA4RjAwMUM0NQorOjEwNjU1MDAwOEY4OTAwMUM5MTJFMDAwOUEwOEUwMDFEOEY4RDAwMUNCQworOjEwNjU2MDAwOTFBQzAwMEFBMDhDMDAxRThGOEIwMDFDM0MwQzA4MDAxNAorOjEwNjU3MDAwMjU4QzVBMUM5MTYzMDAwQjNDMEIwODAwMjU2QjVBMThBNAorOjEwNjU4MDAwQTA4MzAwMUY4Rjg3MDAxQzkwRTgwMDBDQTA4ODAwMjBDQgorOjEwNjU5MDAwOEY4MjAwMUM5MDQ1MDAwRDI0MDI0NjQ2QTA4NTAwMjFGNAorOjEwNjVBMDAwOEY4NjAwMUM5MERGMDAwRUEwOUYwMDIyOEY5OTAwMUM5OAorOjEwNjVCMDAwOTMzMDAwMEZBMDkwMDAyMzhGOTgwMDFDOTMxNDAwMTBCQworOjEwNjVDMDAwQTA5NDAwMjQ4RjhGMDAxQzkxRTkwMDExQTA4OTAwMjU2MAorOjEwNjVEMDAwOEY4OTAwMUM4RjhFMDAzMDhGOTAwMDM4OTUyRDAwMTQwRAorOjEwNjVFMDAwMDAwRTE4QzAyNUM4MDAwMUE0OEQwMDI4OTUyNzAwMTZBQworOjEwNjVGMDAwMDA2QzMwMjEwMDZCQzgyMUE0ODcwMDJBOTUyNTAwMTg2MworOjEwNjYwMDAwMzEwODAwMEZBNDg1MDAyQ0E0ODIwMDJFOEQzRjAwMUNCMQorOjEwNjYxMDAwQUNDQTAwMDBBRjg4MDAzMDExMTAwMDA2QUYzRjAwMDA4OAorOjEwNjYyMDAwMDAwMDM4MjE4RDI1MDAxQzAxNDAyMDIxMEEwMDA1NTE2MQorOjEwNjYzMDAwMjQwNjAwMDEyNTBDMDAwMTMxODQwMDBGMDAwMDM4MjFFMAorOjEwNjY0MDAwMEEwMDA2QjhBRjg0MDAzODNDMDcwODAwMjRFNzVBMTg0RgorOjEwNjY1MDAwMDA4NzMwMjEwMDAwMzgyMUFDQTAwMDAwMEEwMDA0RjZCOQorOjEwNjY2MDAwQUNDMDAwMDAzQzA1MDgwMDI0QTU1QTk4MEEwMDA2MkY3QgorOjEwNjY3MDAwMjQwNDAwODc4RTA0MDAwNDBFMDAwMjQxMDAwMDAwMDA4NAorOjEwNjY4MDAwMEEwMDA1NkFBRTgyMDAwODMwODRGRkZGMzBDNjAwRkZCMgorOjEwNjY5MDAwOEY0MjAxQjgwNDQwRkZGRTAwMDY0NDAwMDEwNDMwMjU4QgorOjEwNjZBMDAwM0MwNzIwMDAwMEM3MjAyNTNDMDMxMDAwQUY0MDAxODBCQworOjEwNjZCMDAwQUY0NTAxODRBRjQ0MDE4ODAzRTAwMDA4QUY0MzAxQjg0RgorOjEwNjZDMDAwMjdCREZGRThBRkIwMDAxMEFGQkYwMDE0M0MwNzYwMDA2QgorOjEwNjZEMDAwMjQwNjAwMDIxMDgwMDAwNjAwQTA4MDIxMDAxMDEwMkI2QworOjEwNjZFMDAwOEZCRjAwMTQ4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMTgxMgorOjEwNjZGMDAwM0MwOTYwMEVBRDIwMDAzNDhDRTUyMDFDOEY4MjAwMUMwQworOjEwNjcwMDAwMjQwOEZGRkMwMEE4MTgyNEFDRTMyMDFDMEUwMDA2RDFDRQorOjEwNjcxMDAwOEM0NTAwMEMwMDEwMTAyQjhGQkYwMDE0OEZCMDAwMTBBMAorOjEwNjcyMDAwMDNFMDAwMDgyN0JEMDAxODNDMDI2MDBFMzQ0NzAxMDA1QQorOjEwNjczMDAwMjQwOTAwMTgyNzRBMDQwMDAwMDAwMDAwMDAwMDAwMDA5RgorOjEwNjc0MDAwMDAwMDAwMDAzQzA2MDA1MDM0QzMwMjAwQUY0NDAwMzg5MworOjEwNjc1MDAwQUY0NTAwM0NBRjQzMDAzMDAxNDAxODIxOEY0QjAwMDA5MworOjEwNjc2MDAwMzE2ODAwMjAxMTAwRkZGRDI0MDYwMDdGMjQwOEZGRkY5MAorOjEwNjc3MDAwOEM2QzAwMDAyNEM2RkZGRjI0NjMwMDA0QUNFQzAwMDAxNgorOjEwNjc4MDAwMTRDOEZGRkIyNEU3MDAwNDAwMDAwMDAwMDAwMDAwMDAyNAorOjEwNjc5MDAwMDAwMDAwMDAzQzBGMDAyMEFGNEYwMDMwMDAwMDAwMDA2MAorOjEwNjdBMDAwMjRBRDAyMDAwMUE1NzAyQjI1MjlGRkZGMDA4RTIwMjFCQQorOjEwNjdCMDAwMTUyMEZGRTEwMUEwMjgyMTAzRTAwMDA4MDAwMDAwMDBFRgorOjEwNjdDMDAwMjdCREZGRTBBRkIxMDAxNEFGQkYwMDE4QUZCMDAwMTA5RAorOjEwNjdEMDAwM0MwNTYwMEU4Q0EyMDAzNDAwODA4ODIxMTQ0MDAwMDYyNQorOjEwNjdFMDAwM0MwNDYwMDA4Qzg3MjAxQzI0MDhGRkZDMDBFODMwMjQ1NworOjEwNjdGMDAwMzRDMzAwMDFBQzgzMjAxQzhGOEIwMDFDMjQwOTAwMDFEMgorOjEwNjgwMDAwQUNBOTAwMzQ5NTY5MDAwMjhENjUwMDE0OEQ3MDAwMENGMAorOjEwNjgxMDAwMkQyNDAwODE4RDY3MDAwNDhENjYwMDA4MTA4MDAwMDcxQworOjEwNjgyMDAwOEQ2QTAwMTAyRDJDMDAwNDE1ODAwMDBFMzBDRTAwMDc1QworOjEwNjgzMDAwMzEyRDAwMDMxMUEwMDAwQjAwMDAwMDAwMjQwNDAwOEI4OAorOjEwNjg0MDAwMDIwMDI4MjEwRTAwMDZEMTI0MDYwMDAzMDAxMTEwMkI5RgorOjEwNjg1MDAwOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDg0NAorOjEwNjg2MDAwMjdCRDAwMjAxNUMwRkZGNjI0MDQwMDhCM0MwMzAwMjA0OAorOjEwNjg3MDAwQUY0MzAwMzAwMDAwMDAwMDI0MDIwMDAxQUY4MjAwMTQ4QQorOjEwNjg4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0MxRjAxNTA1QworOjEwNjg5MDAwMDEzRkM4MjUyNTM4MDAwMzNDMEY2MDBFQUY0NzAwMzg4NAorOjEwNjhBMDAwMDAxODE4ODJBRjQ2MDAzQzM1RTgwMDNDQUY1OTAwMzA3NAorOjEwNjhCMDAwMjc0NzA0MDA4RjQ0MDAwMDMwODYwMDIwMTBDMEZGRkRGMQorOjEwNjhDMDAwMDAwMDAwMDAxMDYwMDAwODI0NjZGRkZGMjQwM0ZGRkZBMworOjEwNjhEMDAwOENFQjAwMDAyNEM2RkZGRjI0RTcwMDA0QUQwQjAwMDA5MgorOjEwNjhFMDAwMTRDM0ZGRkIyNTA4MDAwNDNDMDg2MDBFQUQwOTAwMzgwNgorOjEwNjhGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0MwNzAwMjAzNQorOjEwNjkwMDAwQUY0NzAwMzAwMDAwMDAwMDBFMDAwNkY5MDE0MDIwMjFEMgorOjEwNjkxMDAwMDIwMDI4MjEwMDAwMjAyMTBFMDAwNkQxMjQwNjAwMDNEOQorOjEwNjkyMDAwMDAxMTEwMkI4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTAxMgorOjEwNjkzMDAwMDNFMDAwMDgyN0JEMDAyMDI3QkRGRkUwQUZCMjAwMTgyQworOjEwNjk0MDAwMzA5MkZGRkZBRkIxMDAxNEFGQkYwMDFDQUZCMDAwMTAxQQorOjEwNjk1MDAwMTY0MDAwMEQwMDAwODgyMTBBMDAwN0FBMDIyMDEwMjExRAorOjEwNjk2MDAwMjQwNTAwMDE1MDg1MDAyNzhDRTUwMDBDMDAwMDAwMEQ3NworOjEwNjk3MDAwMjYyMzAwMDEzMDcxRkZGRjI0RTIwMDIwMDIzMjM4MkI3MQorOjEwNjk4MDAwMTBFMDAwMTlBRjgyMDAxQzhGODIwMDE0MTQ0MDAwMTYyMgorOjEwNjk5MDAwOEY4NzAwMUMzQzA2NzAwMDNDMDMyMDAwOENFNTAwMDA0MworOjEwNjlBMDAwMDBBNjIwMjQxNDgzMDAxMDhGODQwMDNDMDAwNTQ0MDJCQworOjEwNjlCMDAwM0MwOTgwMDAwMEE5ODAyNDE0ODBGRkU5MzEwNjAwRkYxMworOjEwNjlDMDAwMkNDQTAwMDk1MTQwRkZFQjI2MjMwMDAxMDAwNjY4ODAxNQorOjEwNjlEMDAwM0MwRTA4MDAyNUNFNTc5ODAxQUU2MDIxOEQ4QjAwMDAzQgorOjEwNjlFMDAwMDE2MDAwMDgwMDAwMDAwMDAyMjAxMDIxOEZCRjAwMUM4MQorOjEwNjlGMDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDhCMAorOjEwNkEwMDAwMjdCRDAwMjAwRTAwMDZEMTI0MDQwMDg0MTYwMEZGRDgwNAorOjEwNkExMDAwOEY4NzAwMUMwQTAwMDc4QkFGODAwMDNDOTBFRjAwMDJCQworOjEwNkEyMDAwMDAwMDIwMjEyNDA2MDAwOTBFMDAwNkQxMDAwRjJFMDBEMAorOjEwNkEzMDAwOEY4NzAwMUMwMDEwMTAyQjBBMDAwNzhCQUY4MjAwM0NEMAorOjEwNkE0MDAwMDIwMDI4MjEwRTAwMDZERjI0MDQwMDAxOEY4NzAwMUNBRAorOjEwNkE1MDAwMEEwMDA3OEJBRjgyMDAzQzAyMDAyODIxMEUwMDA2REZFRgorOjEwNkE2MDAwMDAwMDIwMjEwQTAwMDdDMzhGODcwMDFDMEUwMDA3MUZBQgorOjEwNkE3MDAwMDIwMDIwMjEwQTAwMDdDMzhGODcwMDFDMzBCMEZGRkZFRgorOjEwNkE4MDAwMDAxMDE5QzA4RjU4MDFCODA3MDBGRkZFM0MxRjIwMDRGQQorOjEwNkE5MDAwM0MxOTEwMDBBRjQzMDE4MEFGNDAwMTg0QUY1RjAxODgxMworOjEwNkFBMDAwQUY1OTAxQjgwQTAwMDc4QzI2MjMwMDAxMzA4MkZGRkY4RQorOjEwNkFCMDAwMTQ0MDAwMDMwMDAwMTgyMTAwMDQyNDAyMjQwMzAwMTBFNQorOjEwNkFDMDAwMzA4NTAwRkYxNEEwMDAwNTMwODcwMDBGMjQ2NjAwMDgwMQorOjEwNkFEMDAwMDAwNDIyMDIzMEMzMDBGRjMwODcwMDBGMTRFMDAwMDVERAorOjEwNkFFMDAwMzA4OTAwMDMyNDY4MDAwNDAwMDQyMTAyMzEwMzAwRkYwMAorOjEwNkFGMDAwMzA4OTAwMDMxNTIwMDAwNTM4OEIwMDAxMjQ2QTAwMDI0QworOjEwNkIwMDAwMDAwNDIwODIzMTQzMDBGRjM4OEIwMDAxMzE2NDAwMDExMgorOjEwNkIxMDAwMTA4MDAwMDIyNDZDMDAwMTMxODMwMEZGMDNFMDAwMDhCNAorOjEwNkIyMDAwMDA2MDEwMjEzMDhCRkZGRjAwMEIzOTQyMzBFNjAwRkY4MAorOjEwNkIzMDAwM0MwOTA4MDAyNTI5NTk5ODAwMDY0MDgwMDEwOTYwMjE3OAorOjEwNkI0MDAwOEQ4NzAwMDAzMTY0MDAxRjI0MEEwMDAxMDA4QTE4MDRBOAorOjEwNkI1MDAwMzBBNTAwRkYwMEUzMjAyNTE0QTAwMDAyMDAwMzEwMjc0OQorOjEwNkI2MDAwMDBFMjIwMjQyNDBGMDAwMTAwQ0Y3MDA0MDEwOTY4MjFGNQorOjEwNkI3MDAwMDAwRTI4MjcxNDgwMDAwNUFEQTQwMDAwOEY4NjAwMENBRAorOjEwNkI4MDAwMDBBNjEwMjQwM0UwMDAwOEFGODIwMDBDOEY4ODAwMENFMAorOjEwNkI5MDAwMDFDODEwMjUwM0UwMDAwOEFGODIwMDBDM0MwNjAwMUY2RQorOjEwNkJBMDAwM0MwMzYwMDAzMDg0RkZGRjM0QzVGRjgwMjQwMjAwMjBENgorOjEwNkJCMDAwQUM2MDIwMDhBQzYwMjAwQ0FDNjAyMDEwQUM2NTIwMTRFOAorOjEwNkJDMDAwQUM2NDIwMThBQzYyMjAwMDAwMDAwMDAwMDAwMDAwMDA0RgorOjEwNkJEMDAwMDNFMDAwMDgwMDAwMDAwMDI3QkRGRkU4MjQwMkZGRkZEQgorOjEwNkJFMDAwQUZCRjAwMTBBRjgyMDAwQzAwMDAyMDIxM0MwNjA4MDA1RgorOjEwNkJGMDAwMjRDNjU5OTgyNDA1RkZGRjI0ODkwMDAxMDAwNDQwODAyMQorOjEwNkMwMDAwMzEyNEZGRkYwMTA2MTgyMTJDODcwMDIwMTRFMEZGRkEzMQorOjEwNkMxMDAwQUM2NTAwMDAwRTAwMDgxNjAwMDAyMDIxMjQwMjAwMDFDRgorOjEwNkMyMDAwM0MwNDYwMDAyNDA1MDAyMEFDODIyMDE4QUM4NTIwMDBDNAorOjEwNkMzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjQ0QTAwMDFFNQorOjEwNkM0MDAwMzE0MkZGRkYyQzQ2MDQwMDE0QzBGRkY3OEZCRjAwMTAzNQorOjEwNkM1MDAwMDNFMDAwMDgyN0JEMDAxODhGODMwMDA4MkM2MjA0MDBBMQorOjEwNkM2MDAwMDNFMDAwMDgzODQyMDAwMThGODMwMDA4MjQ2MjAwMDExRAorOjEwNkM3MDAwMDNFMDAwMDhBRjgyMDAwODhGODMwMDA4MjQ2MkZGRkY1MgorOjEwNkM4MDAwMDNFMDAwMDhBRjgyMDAwODI3QkRGRkUwQUZCMTAwMTRBOQorOjEwNkM5MDAwQUZCRjAwMThBRkIwMDAxMDhGNkIwMDMwM0MwNjYwMDAzMworOjEwNkNBMDAwMDA4MDg4MjFBQ0NCMjAwODhGNkEwMDJDM0MwMjgwMDAzOQorOjEwNkNCMDAwMjQwMzAwMDhBQ0NBMjAwQzk3NjkwMDNBOTc2ODAwMzg5MgorOjEwNkNDMDAwMDAwOTJDMDAzMTA3RkZGRjAwQTcyMDI1QUNDNDIwMTBDRAorOjEwNkNEMDAwQUNDMjIwMTRBQ0MzMjAwMDAwMDAwMDAwMDAwMDAwMDA4MworOjEwNkNFMDAwMDAwMDAwMDAzQzAzNjAwMDhDNkQyMDAwMzFBQzAwMDgwNworOjEwNkNGMDAwMTU4MEZGRjkwMDAwMDAwMDhDNkUyMDE0MDVDMDAwMjBGNAorOjEwNkQwMDAwMDAwMDAwMDAwRTAwMDdEQThGODQwMDBDMDAwMjQwODBCMworOjEwNkQxMDAwM0MwOTA4MDAyNTI5NTk5ODAxMDkzODIxOENFNDAwMDAxNAorOjEwNkQyMDAwMEUwMDA3REEwMDAyODE0MDAyMDIyMDIxMzA5MEZGRkZBRQorOjEwNkQzMDAwMDIwMDIwMjEwRTAwMDdGODAwMDAyODIxM0MwQzgwMDBGMgorOjEwNkQ0MDAwMDIyQzU4MjUzMjEwRkZGRjNDMTE2MDAwMjQwQTAwMjA1RAorOjEwNkQ1MDAwQUUyQjIwMTRBRTMwMjAxOEFFMkEyMDAwMDAwMDAwMDAxOAorOjEwNkQ2MDAwMDAwMDAwMDAwMDAwMDAwMDAyMDAxMDIxOEZCRjAwMTg4QQorOjEwNkQ3MDAwOEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjA4MQorOjEwNkQ4MDAwOEM2NjIwMTQzQzAyMDAxRjM0NDNGRjgwM0MxRkZGRTg0OAorOjEwNkQ5MDAwMDBDM0MwMjQzN0Y5MDgwMDAzMTk4MDIxMDAxMDc5QzIwQworOjEwNkRBMDAwM0MwQzgwMDAwMjJDNTgyNTMxRjBGRkZGM0MxMTYwMDBBNAorOjEwNkRCMDAwMjQwQTAwMjBBRTJCMjAxNEFFMzAyMDE4QUUyQTIwMDA2QQorOjEwNkRDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMDEwMjE5MAorOjEwNkREMDAwOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDhCRgorOjEwNkRFMDAwMjdCRDAwMjAyN0JERkZFOEFGQjAwMDEwMzQwMkZGRkYzMQorOjEwNkRGMDAwMzA5MEZGRkZBRkJGMDAxNDEyMDIwMDA2MDIwMDIwMjFGNgorOjEwNkUwMDAwMEUwMDA4MTYwMDAwMDAwMDAyMDAyMDIxMEUwMDA3RjgwNgorOjEwNkUxMDAwMjQwNTAwMDE4Rjg0MDAwODhGQkYwMDE0OEZCMDAwMTA3QworOjEwNkUyMDAwMjQ4M0ZGRkYyN0JEMDAxODAzRTAwMDA4QUY4MzAwMDg5QworOjEwNkUzMDAwMDAwNDM5QzIzMEU2MDAzRjAwMDQzQjQyMDAwNzE4NDAxRQorOjEwNkU0MDAwMjQwMjEwMDAyQ0M0MDAyMDI0QzhGRkUwQUY0MjAwMkMxNAorOjEwNkU1MDAwMjQ2MzAwMDExNDgwMDAwMzMwQTkwMEZGMDAwNzE4NDBEQworOjEwNkU2MDAwMzEwNjAwRkYwMDAzNjA4MDI0MDgwMDAxMDE5QTU4MjFDOAorOjEwNkU3MDAwM0MwQTAwMEUwMEM4MjgwNDAxNkEzODIxMTEyMDAwMDVEMAorOjEwNkU4MDAwMDAwNTMwMjc4Q0U5MDAwMDAxMjUzMDI1MDNFMDAwMDhDQgorOjEwNkU5MDAwQUNFNjAwMDA4Q0VFMDAwMDAxQzY2ODI0MDNFMDAwMDhBOAorOjEwNkVBMDAwQUNFRDAwMDAyN0JERkZFOEFGQkYwMDE0QUZCMDAwMTA4RAorOjEwNkVCMDAwM0MwNDYwMDA4Qzg1MDgwODM0MDNGMDAwMzBBMkYwMDAyOAorOjEwNkVDMDAwNTA0MzAwMDYyNDAyMDAwMThDODcwODA4MzQwNEUwMDBDNworOjEwNkVEMDAwMzBFNkYwMDAxMEM0MDAxRTI0MDIwMDAyQUY4MjAwNDAyMQorOjEwNkVFMDAwM0MxMDYwMDAzQzBBMDIwMEFFMEEwODE0MjQwOTEwMDA5RAorOjEwNkVGMDAwM0MwODAwMEU4RTAzNDQwMDAzNDgyMDIxQUY0OTAwMkNCQgorOjEwNkYwMDAwMjQwNTAxMjAwRTAwMENDMDAwMDAzMDIxOEY4MzAwNDBCQQorOjEwNkYxMDAwMTA2MDAwMDQzQzAyMTY5MTI0MEIwMDAxMTA2QjAwMEU1RgorOjEwNkYyMDAwM0MwMjNEMkMzNDRGMDA5MEFFMEY0NDA4OEZCRjAwMTQzQworOjEwNkYzMDAwOEZCMDAwMTAzQzBDNjAwMDI0MEUxMDAwM0MwRDAyMDBDRAorOjEwNkY0MDAwMjdCRDAwMThBRDhFNDQyMDAzRTAwMDA4QUQ4RDA4MTA2OQorOjEwNkY1MDAwMEEwMDA4RTdBRjgwMDA0MDNDMDIxOERBMzQ0RjAwOTA4NgorOjEwNkY2MDAwQUUwRjQ0MDg4RkJGMDAxNDhGQjAwMDEwM0MwQzYwMDBCRgorOjEwNkY3MDAwMjQwRTEwMDAzQzBEMDIwMDI3QkQwMDE4QUQ4RTQ0MjBFOQorOjEwNkY4MDAwMDNFMDAwMDhBRDhEMDgxMDBBMDAwOEJCMjQwNTAwMDFDRAorOjEwNkY5MDAwMEEwMDA4QkIwMDAwMjgyMTNDMDgwODAwMjUwODVEQTQ2MQorOjEwNkZBMDAwMjQwNEZGRkYwMTAwMTgyMTI0MDIwMDFFMjQ0MkZGRkZEOQorOjEwNkZCMDAwQUM2NDAwMDAwNDQxRkZGRDI0NjMwMDA0M0MwNzA4MDBBQQorOjEwNkZDMDAwMjRFNzVFMjA4Q0U1RkZGQzI0MDQwMDFDMjQwNjAwMDE1RAorOjEwNkZEMDAwMzA4QTAwMUYwMTQ2NDgwNDI0ODQwMDAxMDAwOTEwMjc1QworOjEwNkZFMDAwMkM4MzAwMjAxNDYwRkZGQTAwQTIyODI0QUNFNUZGRkNFQgorOjEwNkZGMDAwM0MwNTY2NjYzNEE0NjE2RTNDMDYwODAwMjRDNjVFRTA2QgorOjEwNzAwMDAwQUY4NDAwNThBRjg4MDA5QzI0MDRGRkZGMDBDMDE4MjEwMworOjEwNzAxMDAwMjQwMjAwMUYyNDQyRkZGRkFDNjQwMDAwMDQ0MUZGRkQ3NgorOjEwNzAyMDAwMjQ2MzAwMDQzQzA3NjY2NjNDMDUwODAwMjRBNTVFQTBCNgorOjEwNzAzMDAwQUY4NjAwNDgzNEU2NjE2RUFGODYwMDk4MjQwNEZGRkZGNworOjEwNzA0MDAwMDBBMDE4MjEyNDAyMDAwRjI0NDJGRkZGQUM2NDAwMDBCRQorOjEwNzA1MDAwMDQ0MUZGRkQyNDYzMDAwNDNDMEI2NjY2M0MwNjA4MDAwNworOjEwNzA2MDAwMjRDNjVFMjAzNTY4NjE2RUFGODUwMEE0QUY4ODAwNzBDRAorOjEwNzA3MDAwMjQwNEZGRkYwMEMwMTgyMTI0MDIwMDFGMjQ0MkZGRkY0OAorOjEwNzA4MDAwQUM2NDAwMDAwNDQxRkZGRDI0NjMwMDA0M0MwRDY2NjYwRgorOjEwNzA5MDAwM0MwQTA4MDAyNTRBNUY2MDM1QUM2MTZFQUY4NjAwOTBGRgorOjEwNzBBMDAwQUY4QzAwNUMyNDA0RkZGRjAxNDAxODIxMjQwMjAwMDM4MAorOjEwNzBCMDAwMjQ0MkZGRkZBQzY0MDAwMDA0NDFGRkZEMjQ2MzAwMDQ5MAorOjEwNzBDMDAwM0MwOTA4MDAyNTI5NUY3MDhEMjdGRkZDMjQwNDAwMDY3OQorOjEwNzBEMDAwMjQwNTAwMDEzMDk5MDAxRjAzMjVDMDA0MjQ4NDAwMDEwOQorOjEwNzBFMDAwMDAxODc4MjcyQzhFMDAyMDE1QzBGRkZBMDBFRjM4MjRGNgorOjEwNzBGMDAwQUQyN0ZGRkMzQzA5NjY2NjI0MDMwNDAwMjQwNDAzREM3RQorOjEwNzEwMDAwMjQwNTAyMDAyNDA2MDA2NjM1MjI2MTZFM0MwODA4MDA1MgorOjEwNzExMDAwMjUwODVBQTRBRjgyMDA3NEFGODMwMDQ0QUY4MzAwNkM4QgorOjEwNzEyMDAwQUY4MzAwNTBBRjgzMDA4NEFGOEEwMDhDQUY4NDAwNjRDQgorOjEwNzEzMDAwQUY4NTAwNENBRjg2MDA1NEFGODQwMDc4QUY4NTAwNjAwNworOjEwNzE0MDAwQUY4NjAwODAwMTAwMTgyMTI0MDIwMDAyMjQ0MkZGRkZDNAorOjEwNzE1MDAwQUM2MDAwMDAwNDQxRkZGRDI0NjMwMDA0MjQwNDAwMDMyQworOjEwNzE2MDAwMjQwMzAwMEMzQzBBMDgwMDI1NEE1QUIwQUY4QTAwNjg4NAorOjEwNzE3MDAwMEEwMDA5OEUyNDA1RkZGRjAwMDQxODgwMjQ4NDAwMDEwMgorOjEwNzE4MDAwMDA2ODU4MjEyQzg3MDBDMDE0RTBGRkZCQUQ2NTAwMDBBQgorOjEwNzE5MDAwM0MwRTY2NjYzNUNENjE2RTI0MEMxN0EwMjQwODE4MDBERAorOjEwNzFBMDAwQUY4RDAwODhBRjhDMDA5NDAzRTAwMDA4QUY4ODAwN0NBRQorOjEwNzFCMDAwMjQ4NDAwN0YwMDA0MjFDMjAwMDA0MDIxMDAwMDMwMjEwRgorOjEwNzFDMDAwMDAwMDM4MjEwMDAwMjgyMTBBMDAwOUE1QUY4NDAwQTA5MgorOjEwNzFEMDAwMTA2MDAwMDYyNEU3MDAwMTAwQzQzMDIxMjRBNTAwMDE0RQorOjEwNzFFMDAwMkNDMjBCRjUxNDQwRkZGQTJDQTMwMDY2M0MwOTA4MDBFMgorOjEwNzFGMDAwMjUyOTVGNjAwMTIwMTgyMTI0MDIwMDAzMjQ0MkZGRkY5QgorOjEwNzIwMDAwQUM2MDAwMDAwNDQxRkZGRDI0NjMwMDA0MTBFMDAwMUE5QworOjEwNzIxMDAwMjRFM0ZGRkYwMDAzMjk0MjEwQTAwMDBBMDAwMDIwMjEwMAorOjEwNzIyMDAwMjQwNkZGRkYzQzAzMDgwMDI0NjM1RjYwMjQ4NDAwMDEwMAorOjEwNzIzMDAwMDA4NTUwMkJBQzY2MDAwMDI1MDgwMDAxMTU0MEZGRkJCRgorOjEwNzI0MDAwMjQ2MzAwMDQzMEUyMDAxRjEwNDAwMDA4MDAwODY4ODAzQQorOjEwNzI1MDAwMjQwQzAwMDEwMDRDMzgwNDAwMDg1ODgwMDE2OTI4MjFFMgorOjEwNzI2MDAwMjRFNkZGRkYwM0UwMDAwOEFDQTYwMDAwMDFBOTQwMjFDRQorOjEwNzI3MDAwMjQwOUZGRkZBRDA5MDAwMDAzRTAwMDA4MDAwMDAwMDA0MgorOjEwNzI4MDAwQUY0NDAwMjgzQzA0MDAwQzAzNDQyMDIxMDAwNTI4ODI2MAorOjEwNzI5MDAwMEEwMDBDQzAwMDAwMzAyMTAwMDQyMTgwM0MwMzYwMDA4MworOjEwNzJBMDAwQUM2NDEwMDgwMDAwMDAwMDAwMDUyOTgwQUM2NTEwMENEQgorOjEwNzJCMDAwMDAwMDAwMDAwM0UwMDAwODhDNjIxMDBDMjdCREZGRTgwRQorOjEwNzJDMDAwMDA4MDI4MjEyNDA0MDAzOEFGQkYwMDE0MEUwMDA5RDUyNworOjEwNzJEMDAwQUZCMDAwMTAyNDA0MEUwMEFGNDQwMDI4M0MxMDAwMEM5NgorOjEwNzJFMDAwMDM1MDIwMjEyNDA1MDAxMDBFMDAwQ0MwMDAwMDMwMjFBNgorOjEwNzJGMDAwMDM1MDEwMjFBQzQwMDAwMEFDNDAwMDA0MjQwNDAwMzhDRQorOjEwNzMwMDAwOEZCRjAwMTQ4RkIwMDAxMDI0MDUzRkZGMjdCRDAwMTg2OQorOjEwNzMxMDAwMEEwMDA5RDU4QzQzMDAwMDAwMDQyMTgwM0MwMzYwMDA3MgorOjEwNzMyMDAwQUM2NDEwMDgwMDAwMDAwMDhDNjIxMDBDMDNFMDAwMDg0MAorOjEwNzMzMDAwMDAwMjExODIyN0JERkZDOEFGQjQwMDIwOEY5NDAwNjhGRgorOjEwNzM0MDAwQUZCRTAwMzBBRkI3MDAyQ0FGQjYwMDI4MDAwMEI4MjFBOAorOjEwNzM1MDAwMDA4MEIwMjEyNDFFMDBDMEFGQkYwMDM0QUZCNTAwMjRCMAorOjEwNzM2MDAwQUZCMzAwMUNBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTA0MworOjEwNzM3MDAwMEEwMDBBMTJBRkE1MDAzQzUwNDAwMDAxOEY5NDAwNjgzQgorOjEwNzM4MDAwMjdERUZGRkYxM0MwMDAyODI2OTQwMDA0OEU5MjAwMDAyMQorOjEwNzM5MDAwM0MwMzA4MDAyNDYzNURBMDEyNDBGRkY3MDI4MzEwMkIxQQorOjEwNzNBMDAwM0MwNDA4MDAyNDg0NUFBNDAyODQxMDIzMDAwMkE4QzBDQworOjEwNzNCMDAwMDAwMDk4MjEwQTAwMEEyMTI0MTEwMDAxMDAxMTg4NDBEMAorOjEwNzNDMDAwMTIyMDAwMjYwMDAwMDAwMDAyQjM4MDIxMDI1MTI4MjQ3MAorOjEwNzNEMDAwMDIwMDIwMjExMEEwRkZGOTI2NzMwMDAxMEUwMDA5REUzMworOjEwNzNFMDAwMDAwMDAwMDAwMDE2Njg0MDMyRUMwMDAxMDFBQzIwMjFEMgorOjEwNzNGMDAwMEUwMDA5RDUwMjAwMjgyMThGODkwMDk0MjZGNzAwMDE4QworOjEwNzQwMDAwOEZBNjAwM0MzQUVCMDAwMTMxNkEwMDAxMjUyOEZGRkZGRQorOjEwNzQxMDAwMDAxMTM4MjcwMkNBQjAyMUFGODgwMDk0MTZFNkZGRTdCMgorOjEwNzQyMDAwMDI0NzkwMjRBRTkyMDAwMDAyRTAxMDIxOEZCRjAwMzQ4QQorOjEwNzQzMDAwOEZCRTAwMzA4RkI3MDAyQzhGQjYwMDI4OEZCNTAwMjQ4OAorOjEwNzQ0MDAwOEZCNDAwMjA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTRDRQorOjEwNzQ1MDAwOEZCMDAwMTAwM0UwMDAwODI3QkQwMDM4M0MwRTA4MDA4NAorOjEwNzQ2MDAwMjVDRTVEQTAwMjhFMTAyQjBBMDAwQTBEQUU5MjAwMDAwMAorOjEwNzQ3MDAwMjdCREZGRDhBRkIxMDAxNEFGQjAwMDEwQUZCRjAwMjBFMAorOjEwNzQ4MDAwQUZCMzAwMUNBRkIyMDAxODAwQTA4ODIxMTBBMDAwMUZFRAorOjEwNzQ5MDAwMDAwNDgwNDAzQzEzMDgwMDI2NzM1QUE0MEEwMDBBNUFDQworOjEwNzRBMDAwMjQxMjAwMDExMjIwMDAxOTI2MTAwMDAxMEUwMDA5RjUxNworOjEwNzRCMDAwMDIwMDIwMjEwMDAyMzE0MjI0NDRGRkEwMDAwNjE4ODA2RgorOjEwNzRDMDAwMzA0NTAwMUYyQzgyMTdBMTAwNzMxODIxMjYzMUZGRkZDMQorOjEwNzREMDAwMTA0MEZGRjQwMEIyMzAwNDhDNjkwMDAwMDIwMDIwMjE0QgorOjEwNzRFMDAwMjQwNTNGRkYwMTI2NDAyNDE1MDBGRkVFMDEyNjM4MjUyNAorOjEwNzRGMDAwMEUwMDA5RDVBQzY3MDAwMDhGOEEwMDk0MjYxMDAwMDFBOQorOjEwNzUwMDAwMjU0NzAwMDExNjIwRkZFOUFGODcwMDk0OEZCRjAwMjBCOAorOjEwNzUxMDAwOEZCMzAwMUM4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAxMQorOjEwNzUyMDAwMDNFMDAwMDgyN0JEMDAyODhGODUwMDlDMDA4MDU4MjFCQgorOjEwNzUzMDAwMDAwMDQwMjEwMDAwNDgyMTI0MEEwMDFGM0MwQzA4MDBFNAorOjEwNzU0MDAwMjU4QzVFMUMzQzBEMDgwMDI1QUQ1REE0OENBNjAwMDBCQQorOjEwNzU1MDAwNTBDMDAwMTQwMDAwNDAyMTAwQUQxMDIzMDAwMjM4QzBDQworOjEwNzU2MDAwMjQwMzAwMDEwQTAwMEE5MzAwMDAyMDIxMTUwMDAwMDNGMworOjEwNzU3MDAwMDBFNDEwMjEyNDQ4MjAyNDAwMDA0ODIxMjUyOTAwMDE4RQorOjEwNzU4MDAwNTEyQjAwMTMyNTA2REZEQzEwNjAwMDA2MjQ4NDAwMDE2NworOjEwNzU5MDAwMDBDMzcwMjQxNUMwRkZGNTAwMDMxODQwMEEwMDBBOTFDQgorOjEwNzVBMDAwMDAwMDQwMjExMEFDMDAyNjI0QTMwMDA0MDA2MDI4MjEyNAorOjEwNzVCMDAwMjU0QUZGRkYxNTQwRkZFNUFGODUwMDlDNTEyQjAwMDRENQorOjEwNzVDMDAwMjUwNkRGREMwMDAwNDAyMTAzRTAwMDA4MDEwMDEwMjE1NworOjEwNzVEMDAwMDAwNjYxNDIzMEM1MDAxRjAwMEM1MDgwM0MwNzA4MDBDNworOjEwNzVFMDAwMjRFNzVEQTQyNDA0MDAwMTAxNDczMDIxMTEyMDAwMEY4RAorOjEwNzVGMDAwMDBBNDIwMDQzQzA1MDgwMDI0QTU1RTIwMTQ4MDAwMDU5QQorOjEwNzYwMDAwMjUyOUZGRkYyNEM2MDAwNDEwQzUwMDExMDAwMDAwMDA1QQorOjEwNzYxMDAwMjQwNDAwMDE4Q0NGMDAwMDAwMDRDMDI3MDAwNDIwNDA5NworOjEwNzYyMDAwMDFGODY4MjQxNTIwRkZGNUFDQ0QwMDAwOEY5OTAwNzg5MworOjEwNzYzMDAwMDEwMDEwMjEwMzJCNDgyMzAzRTAwMDA4QUY4OTAwNzhFNAorOjEwNzY0MDAwM0MwNTA4MDAyNEE1NURBNDBBMDAwQTlCMDAwMDQwMjExNworOjEwNzY1MDAwM0MwNjA4MDAyNEM2NURBNDBBMDAwQUI0MjQwNDAwMDEwNAorOjEwNzY2MDAwMzA4ODAwRkYyNDAyMDAwMjExMDIwMDBBMjQwMzAwMDNGNAorOjEwNzY3MDAwMTEwMzAwNUM4Rjg5MDBBNDI0MDQwMDA0MTEwNDAwNUYzRQorOjEwNzY4MDAwMjQwNTAwMDUxMTA1MDA2NzAwMDAxODIxMDNFMDAwMDgyQgorOjEwNzY5MDAwMDA2MDEwMjE4Rjg5MDA0ODNDMEMwODAwMjU4QzVFRTBCQQorOjEwNzZBMDAwM0MwNDA4MDAyNDg0NUY2MDI0MDMwMDIwMTA2MDAwMEY2NQorOjEwNzZCMDAwMDAwMDU4MjEyNDBEMDAwMjI0MEUwMDAzM0MwRjA4MDA5NgorOjEwNzZDMDAwMjVFRjVFRTA4RDI3MDAwMDE0RTAwMDBCMzBGOUZGRkY4RQorOjEwNzZEMDAwMjUyOTAwMDQwMTI0QzAyQjUzMDAwMDAxMDE4MDQ4MjEwQQorOjEwNzZFMDAwMjQ2M0ZGRkY1NDYwRkZGODhEMjcwMDAwMDE2MDE4MjExQworOjEwNzZGMDAwMDNFMDAwMDgwMDYwMTAyMTEzMjAwMDMyM0MwNTAwRkY2OQorOjEwNzcwMDAwMzBFMjAwRkYwMDQwMzAyMTEwNDAwMDQyMDAwMDUwMjFENAorOjEwNzcxMDAwMjQwNTAwMDEwMDAwMjAyMTAwMDVDODQwMDBBNkMwMjQ2NworOjEwNzcyMDAwMTcwMDAwMDMzMzI1MDBGRjE0QTBGRkZCMjQ4NDAwMDE5MQorOjEwNzczMDAwMDEyQ0MwMjMwMDE4MjhDMDAwQUE2MDIxMDA4QzUwMjExMQorOjEwNzc0MDAwMzE0NDAwMUYyNDBDMDAwMTAwOEMxODA0MDAwMzEwMjc5MgorOjEwNzc1MDAwMDBFMjMwMjQxMTBEMDA0MUFEMjYwMDAwMTEwRTAwNEM1NgorOjEwNzc2MDAwMDAwQTE4NDAxMTBEMDAzNjhGODcwMDZDNTEwRTAwNTYyQworOjEwNzc3MDAwOEY4QzAwNjAyNDBEMDAwNDExMEQwMDVBOEY4RTAwODQ0MAorOjEwNzc4MDAwMjQwRTAwMDUxNTBFRkZEQTAxNjAxODIxMjQwQjE0MzBCOQorOjEwNzc5MDAwMTE0MDAwMDYwMDAwMTgyMThGODQwMEEwMjQ2MzAwMDExRQorOjEwNzdBMDAwMDA2QTQwMkIxNTAwRkZGRDAxNjQ1ODIxOEY4QTAwODA3QworOjEwNzdCMDAwQUY4OTAwOEMwMTYwMTgyMTI1NDlGRkZGMEEwMDBBRUIwMAorOjEwNzdDMDAwQUY4OTAwODAwMEU1MjAyNDAwMDczNjAyMTA4MEZGRDAzQQorOjEwNzdEMDAwMjQwQTAwMTgwMDA3NTQwMjMxNDYwMEZGMEEwMDBBRjM4OQorOjEwNzdFMDAwMjQwQTAwMTAzQzBDMDgwMDI1OEM1RUEwM0MwNDA4MDAxNAorOjEwNzdGMDAwMjQ4NDVFRTAwQTAwMEFEQTI0MDMwMDEwM0MwQzA4MDAyRQorOjEwNzgwMDAwMjU4QzVFMjAzQzA0MDgwMDI0ODQ1RUEwMEEwMDBBRDk2RQorOjEwNzgxMDAwOEY4OTAwOTAwMDA3MUEwMjMwNjYwMEZGMEEwMDBBRjMwMQorOjEwNzgyMDAwMjQwQTAwMDg4Rjg5MDA4QzNDMEMwODAwMjU4QzVGNjBCRQorOjEwNzgzMDAwM0MwNDA4MDAyNDg0NUY3MDBBMDAwQURBMjQwMzAwMDQ3MAorOjEwNzg0MDAwMDAwQTQwODAyNTBCMDAzMDI0RTZGRkZGMDE2MDE4MjE2QworOjEwNzg1MDAwQUY4OTAwNDgwQTAwMEFFQkFGODYwMDZDMDAwQUM5ODJCMworOjEwNzg2MDAwMDAxOTc4ODAzQzA3MDgwMDI0RTc1RUEwMDFFNzIwMjE4QQorOjEwNzg3MDAwMDAwQTE4NDI4QzhGMDAwMDMwNzkwMDFGMDMyQzM4MDQ1NgorOjEwNzg4MDAwMDAwN0MwMjcwMUY4NjAyNDBBMDAwQjA4QUM4QzAwMDAzOAorOjEwNzg5MDAwMDAwMzMxNDIwMDA2Mjg4MDAwQUYyODIxMzA2MjAwMUYxQgorOjEwNzhBMDAwOENCODAwMDAyNDYzMDAwMTAwNENDODA0MDAwMzIxNDI4RQorOjEwNzhCMDAwMDAxOTM4MjcwMDA0MTA4MDAzMDczMDI0MDA0RjIwMjFDRQorOjEwNzhDMDAwMEEwMDBCNENBQ0E2MDAwMDAwMEE2OEMwMjVBQjAwMzJEMQorOjEwNzhEMDAwMjU4QUZGRkYwMTYwMTgyMUFGODkwMEE0MEEwMDBBRUI4NgorOjEwNzhFMDAwQUY4QTAwNjAyNTRCMTAzMEFGODkwMDkwMDE2MDE4MjFFRAorOjEwNzhGMDAwMjVDOUZGRkYwQTAwMEFFQkFGODkwMDg0MzA4NjAwMDcyNAorOjEwNzkwMDAwMkNDMjAwMDYxMDQwMDAxNDAwMDAwMDAwMDAwNjQwODA1OQorOjEwNzkxMDAwM0MwMzA4MDAyNDYzNTdCQzAxMDMzODIxOENFNDAwMDBCOQorOjEwNzkyMDAwMDA4MDAwMDgwMDAwMDAwMDI0MDkwMDAzMTBBOTAwMEVEOAorOjEwNzkzMDAwMDAwMDAwMDAyNDBBMDAwNTEwQUEwMDBCMDAwMDAwMDA0RgorOjEwNzk0MDAwMjQwQjAwMDExMEFCMDAwODAwMDAwMDAwOEY4QzAwQTA4OQorOjEwNzk1MDAwMTBBQzAwMDUwMDAwMDAwMDAzRTAwMDA4MDAwMDEwMjE0QQorOjEwNzk2MDAwMEEwMDBBNzkwMEEwMjAyMTBBMDAwQUM3MDBDMDIwMjFDRAorOjEwNzk3MDAwMjdCREZGRTgzMDg0MDBGRjI0MDMwMDAyMTA4MzAwMEJDMgorOjEwNzk4MDAwQUZCRjAwMTAyNDA2MDAwMzEwODYwMDNBMjQwODAwMDQ0QworOjEwNzk5MDAwMTA4ODAwNjgyNDBFMDAwNTEwOEUwMDdGMkNBRjE0MzA3NAorOjEwNzlBMDAwOEZCRjAwMTAwM0UwMDAwODI3QkQwMDE4MkNBMjAwMzA5NAorOjEwNzlCMDAwMTQ0MEZGRkM4RkJGMDAxMDI0QTVGRkQwMDAwNTMxQzI4QQorOjEwNzlDMDAwMDAwNjY4ODAzQzA3MDgwMDI0RTc1RUUwMDFBNzMwMjEzQworOjEwNzlEMDAwOENDOTAwMDAwMDA1Mjg4MjMwQUMwMDFGMjQwQjAwMDE3OAorOjEwNzlFMDAwMDE4QjUwMDQ4Rjg0MDA0ODAxMkE0MDI1QUNDODAwMDA1OAorOjEwNzlGMDAwOEM4MzAwMDA1MDYwMDAwMUFGODYwMDQ4OEY5ODAwNkNCNworOjEwN0EwMDAwMzBBRTAwMDEyNEE2RkZGRjI3MEYwMDAxMTVDMDAwMDJDMQorOjEwN0ExMDAwQUY4RjAwNkMyNEE2MDAwMTAwMDY0MTQyMDAwODIwODBDMAorOjEwN0EyMDAwMDA4NzE4MjE4Qzc5MDAwMDMwQzIwMDFGMjQwNjAwMDE1NQorOjEwN0EzMDAwMDA0NkY4MDQwMzNGMzgyNDEwRTBGRkRBOEZCRjAwMTAzRgorOjEwN0E0MDAwMDAwNUMxODIwMDE4NzA4MDNDMEYwODAwMjVFRjVFQTA4MQorOjEwN0E1MDAwMDFDRjQ4MjE4RDJCMDAwMDAwMDU2ODQyMzFBNTAwMUY5MQorOjEwN0E2MDAwMDBBNjYwMDQwMTZDNTAyNTI3QkQwMDE4MDNFMDAwMDg0MworOjEwN0E3MDAwQUQyQTAwMDAyQ0E3MDAzMDE0RTBGRkNBOEZCRjAwMTAxMQorOjEwN0E4MDAwMzBCOTAwMDcxNzIzRkZDNzI0QThGRkNFMDAwODZBMDJGOQorOjEwN0E5MDAwMDAwRDYwODAzQzBCMDgwMDI1NkI1RUEwMDE4QjMwMjEzRgorOjEwN0FBMDAwOENDNDAwMDAwMDA4MjhDMjMwQUEwMDFGMjQwODAwMDE2RQorOjEwN0FCMDAwMDE0ODQ4MDQ4RjgyMDBBNDAwODkxODI1QUNDMzAwMDA0NworOjEwN0FDMDAwOEM1RjAwMDA1M0UwMDAwMUFGODYwMEE0MDAwNTcwNDAwOQorOjEwN0FEMDAwMDAwRTc5NDIwMDBGMjg4MDNDMDQwODAwMjQ4NDVFRTBGOAorOjEwN0FFMDAwMDBBNDE4MjE4QzZCMDAwMDI1REYwMDAxMzFDRDAwMUZBMAorOjEwN0FGMDAwMDAxRjUxNDIwMUE4NjAwNDAxNkM0ODI1MDAwQTEwODA1MworOjEwN0IwMDAwQUM2OTAwMDAwMDQ0MjgyMThDQTYwMDAwOEY5ODAwNjAxQQorOjEwN0IxMDAwMzNGOTAwMUY4RkJGMDAxMDAzMjgzODA0MDBDNzc4MjVGMQorOjEwN0IyMDAwMjcwRTAwMDEyN0JEMDAxOEFDQUYwMDAwMDNFMDAwMDhERAorOjEwN0IzMDAwQUY4RTAwNjAyNEE1RUZEMDJDQjgwNDAwMTMwMEZGOTk4RAorOjEwN0I0MDAwOEZCRjAwMTAwMDA1MzE0MjAwMDY1ODgwM0MwQTA4MDAzMworOjEwN0I1MDAwMjU0QTVFMjAwMTZBMzAyMThDQzQwMDAwMzBBMzAwMUYzQQorOjEwN0I2MDAwMjQwOTAwMDEwMDY5MTAwNDhGOTkwMDkwMDA4MkY4MjUxMworOjEwN0I3MDAwQUNERjAwMDA4RjI3MDAwMDUwRTAwMDAxQUY4NjAwOTBDRQorOjEwN0I4MDAwOEY4RDAwODQ4RkJGMDAxMDI3QkQwMDE4MjVBQzAwMDEyOQorOjEwN0I5MDAwMDNFMDAwMDhBRjhDMDA4NDE1RTBGRjgyOEZCRjAwMTA2NworOjEwN0JBMDAwOEY4NjAwQTAwMDA2MTA0MDAwNDZGODIxMDAxRjIxMDAyQgorOjEwN0JCMDAwMDNFNEM4MjEwMDE5Mzg0MDI0RjgxNDMwMDBCODQwMkJFMQorOjEwN0JDMDAwMTEwMEZGNzg4RkJGMDAxMDI0QTRFQkQwMEUwMDAyMTMyOQorOjEwN0JEMDAwMDBDMDI4MjEwMDAyNzk0MjAwMEY3MDgwM0MwRDA4MDA4RgorOjEwN0JFMDAwMjVBRDVGNjAwMUNEMjAyMThDOEIwMDAwMzA0QzAwMUY0MworOjEwN0JGMDAwMjQwNjAwMDEwMTg2MTgwNDhGODkwMDhDMDE2MzUwMjUzQQorOjEwN0MwMDAwQUM4QTAwMDA4RDI1MDAwMDUwQTAwMDAxQUY4NDAwOENEQworOjEwN0MxMDAwOEY5ODAwODA4RkJGMDAxMDI3QkQwMDE4MjcwODAwMDEzMworOjEwN0MyMDAwMDNFMDAwMDhBRjg4MDA4MDMwQTUwMDA3MjQwMzAwMDNBQworOjEwN0MzMDAwMTBBMzAwMTAyOEEyMDAwNDE0NDAwMDA4MjQwNzAwMDIyQQorOjEwN0M0MDAwMjQwMzAwMDQxMEEzMDAxNTI0MDgwMDA1MTBBODAwMEY0OQorOjEwN0M1MDAwOEY4NTAwQTAwM0UwMDAwODAwMDAwMDAwMTRBN0ZGRkRDRQorOjEwN0M2MDAwMDA4MDI4MjExNEMzRkZGQjI0MDQwMDAyMEEwMDBCOEJCMAorOjEwN0M3MDAwMDAwMDAwMDAyNDA5MDAwNTAwODAyODIxMTBDOUZGRkIzNgorOjEwN0M4MDAwMjQwNDAwMDMwM0UwMDAwODAwMDAwMDAwMTRDNUZGRjExNQorOjEwN0M5MDAwMDA4MDI4MjEwQTAwMEI4QjI0MDQwMDA1MjQwQTAwMDExRgorOjEwN0NBMDAwMDA4MDI4MjExMENBRkZGMTI0MDQwMDA0MDNFMDAwMDgyQQorOjEwN0NCMDAwMDAwMDAwMDAyN0JERkZFMEFGQjAwMDEwMDAwNTgxQzI0QQorOjEwN0NDMDAwMjYwM0ZGRDAyNEM1MDAzRjJDNjIyM0QwMjRDNjAwN0ZBQQorOjEwN0NEMDAwQUZCMjAwMThBRkIxMDAxNEFGQkYwMDFDMzA5MTAwRkY2RAorOjEwN0NFMDAwMDAwNjkxQzIwMDA1Mjk4MjAyMDAyMDIxMTA0MDAwMDhGMAorOjEwN0NGMDAwMjQwM0ZGRkYwRTAwMEE0QjAwMDAwMDAwMDIwMDIwMjFCOQorOjEwN0QwMDAwMDIyMDI4MjEwRTAwMEMzOTAyNDAzMDIxMDAwMDE4MjFFOQorOjEwN0QxMDAwOEZCRjAwMUM4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTBGRAorOjEwN0QyMDAwMDA2MDEwMjEwM0UwMDAwODI3QkQwMDIwMjdCREZGRDgxOAorOjEwN0QzMDAwMjRBMjAwN0ZBRkIzMDAxQ0FGQjIwMDE4MDAwMjk5QzJBQQorOjEwN0Q0MDAwMzA5MjAwRkYyNEEzMDAzRjAyNDAyMDIxMDI2MDI4MjEzRQorOjEwN0Q1MDAwQUZCMTAwMTRBRkIwMDAxMEFGQkYwMDIwMEUwMDBCNkUyQgorOjEwN0Q2MDAwMDAwMzg5ODIwMDQwODAyMTAwNDAyMDIxMDIyMDI4MjEzOAorOjEwN0Q3MDAwMTQ0MDAwMDkwMDAwMTgyMThGQkYwMDIwOEZCMzAwMUNBMQorOjEwN0Q4MDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMDA2MDEwMjE2NgorOjEwN0Q5MDAwMDNFMDAwMDgyN0JEMDAyODBFMDAwOUZDMDAwMDAwMDBEOQorOjEwN0RBMDAwMDA0MDI4MjEwMjAwMjAyMTEwNTFGRkYzMDAxMDE5QzBDQgorOjEwN0RCMDAwMEUwMDBBNEIwMDAwMDAwMDAyMDAyMDIxMDI0MDI4MjE5MgorOjEwN0RDMDAwMEUwMDBDMzkwMjYwMzAyMThGQkYwMDIwOEZCMzAwMUNFMQorOjEwN0REMDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMDAwMDE4MjE2RQorOjEwN0RFMDAwMDA2MDEwMjEwM0UwMDAwODI3QkQwMDI4MzA4NEZGRkY1OQorOjEwN0RGMDAwMzBBNUZGRkYxMDgwMDAwNzAwMDAxODIxMzA4MjAwMDEyRAorOjEwN0UwMDAwMTA0MDAwMDIwMDA0MjA0MjAwNjUxODIxMTQ4MEZGRkI4RQorOjEwN0UxMDAwMDAwNTI4NDAwM0UwMDAwODAwNjAxMDIxMTBDMDAwMDdBMgorOjEwN0UyMDAwMDAwMDAwMDA4Q0EyMDAwMDI0QzZGRkZGMjRBNTAwMDQ2RgorOjEwN0UzMDAwQUM4MjAwMDAxNEMwRkZGQjI0ODQwMDA0MDNFMDAwMDhBRgorOjEwN0U0MDAwMDAwMDAwMDAxMEEwMDAwODI0QTNGRkZGQUM4NjAwMDA4MworOjEwN0U1MDAwMDAwMDAwMDAwMDAwMDAwMDI0MDJGRkZGMjQ2M0ZGRkY3OQorOjEwN0U2MDAwMTQ2MkZGRkEyNDg0MDAwNDAzRTAwMDA4MDAwMDAwMDAwQworOjEwN0U3MDAwMzBBNUZGRkY4RjQyMDFCODA0NDBGRkZFM0MwNzYwMTVBQworOjEwN0U4MDAwMDBBNzMwMjUzQzAzMTAwMEFGNDQwMTgwQUY0MDAxODRCRgorOjEwN0U5MDAwQUY0NjAxODgwM0UwMDAwOEFGNDMwMUI4OEY4NTAwRDBFQQorOjEwN0VBMDAwMkM4NjQwMDAwMDgwMTgyMThDQTcwMDg0MDA4NzEwMkJBRQorOjEwN0VCMDAwMTQ0MDAwMTAwMDAwMDAwMDhDQTgwMDg0MkQwNjQwMDAzMworOjEwN0VDMDAwNTBDMDAwMEYyNDAzNDAwMDhDQUEwMDg0MDA4QTQ4MkI3NQorOjEwN0VEMDAwNTEyMDAwMDE4Q0EzMDA4NDAwMDM1QTQyMDAwQjIwODAzMworOjEwN0VFMDAwM0MwNTA4MDAyNEE1NTgyMDAwODUxODIxMDNFMDAwMDg1RgorOjEwN0VGMDAwOEM2MjAwMDAxNEMwRkZGNDAwMDAwMDAwMjQwMzQwMDA2NgorOjEwN0YwMDAwMDAwMzVBNDIwMDBCMjA4MDNDMDUwODAwMjRBNTU4MjA5RAorOjEwN0YxMDAwMDA4NTE4MjEwM0UwMDAwODhDNjIwMDAwOEY4MzAwRDBFOAorOjEwN0YyMDAwOTA2NjAwRDAyNEM1MDAwMUEwNjUwMEQwOEY4NTAwRDBFOAorOjEwN0YzMDAwOTA2NDAwRDA5MEEyMDBEMjEwNDQwMDE3MDAwMDAwMDAwRQorOjEwN0Y0MDAwOTM2QzAwNzg4RjhCMDBCQzMxOEEwMEZGQTE2QTAwMEMxMworOjEwN0Y1MDAwMjU0OTAwMDE5Mzg3MDBDNDMxMjIwMEZGMzA0ODAwN0Y4QgorOjEwN0Y2MDAwMTEwNzAwMEIwMDAyNjgyN0EzNjIwMDc4OEY0RTAxNzg4QQorOjEwN0Y3MDAwMDVDMEZGRkU4Rjk5MDBCMDI0MTgwMDAyM0MwRjEwMDBDRQorOjEwN0Y4MDAwQUY1OTAxNDBBMzU4MDE0NDAzRTAwMDA4QUY0RjAxNzgwNgorOjEwN0Y5MDAwMEEwMDBEMDkzMUEyMDA4MEEwQTAwMEQwMEEwMDBDRkY0OQorOjEwN0ZBMDAwMDAwMDAwMDA4Rjg3MDBEMDI3QkRGRkM4QUZCRjAwMzBBMgorOjEwN0ZCMDAwQUZCNzAwMkNBRkI2MDAyOEFGQjUwMDI0QUZCNDAwMjA5NworOjEwN0ZDMDAwQUZCMzAwMUNBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTBENworOjEwN0ZEMDAwOTRFMzAwRTA5NEUyMDBFMjEwNDMwMEQ3MjQwNUZGRkZBMQorOjEwN0ZFMDAwM0MwNDdGRkYzNDk3RkZGRjI0MTVGRjgwMEEwMDBERjA0QgorOjEwN0ZGMDAwM0MxNjAwMEUxMDhBMDBEMThGQkYwMDMwOEY5MTAwQjA2OAorOjEwODAwMDAwM0MxODA4MDA4RjE4MDA1QzAwMTIzMEMwMDAxMjkxNDAyQworOjEwODAxMDAwMDMxMTcwMjEwMUQ1NzgyNEFGNEYwMDJDOTRFQzAwRTJCRAorOjEwODAyMDAwMzFDRDAwN0YwMUJBNTgyMTMxOEE3RkZGMDE3NjQ4MjE4NgorOjEwODAzMDAwMDAwQTgwNDAwMjA5MTAyMTk0NTMwMDAwM0MwODA4MDAwNworOjEwODA0MDAwOEQwODAwNTgwMjQ2QzAyMTMyNzMzRkZGMDAxMzE5ODA4QgorOjEwODA1MDAwMDEwMzIwMjEwMjI0MjgyMTMwQkYwMDdGMDNGQUM4MjExOAorOjEwODA2MDAwMDBCNUEwMjRBRjU0MDAyQzAzMzZBMDIxOEU4NzAwMTA0OQorOjEwODA3MDAwOEU4RjAwMzAwMzc4NTgyMTI1NkQwMDg4MDBFRjcwMjMyMworOjEwODA4MDAwMjQwQzAwMDJBRThFMDAxMEFGOEQwMEFDQTE2QzAwODhGNQorOjEwODA5MDAwOTc2QTAwM0M4RTg0MDAzMDhGOTEwMEFDMEUwMDBDRDZBNQorOjEwODBBMDAwMzE1MEZGRkYwMDAyNEI4MDAyMDk0MDI1M0MwMjQyMDA5NAorOjEwODBCMDAwMDEwMjIwMjVBRTI0MDAwNDhFODMwMDA0OEY4RDAwQUNDNQorOjEwODBDMDAwOEU4NjAwMDAyNDBFMDAwOEFEQTMwMDFDQURBNjAwMTg4QgorOjEwODBEMDAwQURBMDAwMENBREEwMDAxMDkyOUYwMDBBMzNGOTAwRkY4NAorOjEwODBFMDAwQTVCOTAwMTQ5Njg1MDAwODNDMUYwMDBDQTVBNTAwMTYzNAorOjEwODBGMDAwOTI5ODAwMEEzMzExMDBGRkE1QjEwMDIwOTY5MDAwMDg2NQorOjEwODEwMDAwMjQxODAwMDVBNUIwMDAyMkFEQTAwMDI0OTI4RjAwMEIxQQorOjEwODExMDAwMjQxMEMwMDAzMUU3MDBGRkE1QTcwMDAyQTFBRTAwMDFCNgorOjEwODEyMDAwOEU4QzAwMzA4RjhCMDBBQzhGODQwMEIwQUQ2QzAwMDg1QgorOjEwODEzMDAwM0MwQTA4MDA4RDRBMDA1NDAxNDQ0ODIxMDEzNTQwMjQ3RQorOjEwODE0MDAwQUY0ODAwMjgzQzAyMDgwMDhDNDIwMDU0MDA0NDMwMjExMworOjEwODE1MDAwMzBDMzAwN0YwMDdBQzgyMTAzM0YyODIxMDI0NTg4MjFDRgorOjEwODE2MDAwQUY5MTAwQkNBRjg1MDBDMEEyMzgwMDAwOEY4QTAwQkM3MAorOjEwODE3MDAwMjQwM0ZGQkYyNDE4RkZERjk1NEYwMDAyMDFGMDM4MjRDRAorOjEwODE4MDAwMDBGMzcwMjVBNTRFMDAwMjkxNEQwMDAyMzFBQzAwM0Y3NgorOjEwODE5MDAwMzU4QjAwNDBBMTRCMDAwMjhGODYwMEJDOEY4OTAwRDAzOAorOjEwODFBMDAwQUNDMDAwMDQ4RDI4MDA3QzNDMDk4MDAwQUNDODAwMDhFRAorOjEwODFCMDAwOTBDNDAwMEQzMDgyMDA3RkEwQzIwMDBEOEY4NTAwQkNFRQorOjEwODFDMDAwOTBCRjAwMEQwM0UzQzgyNEEwQjkwMDBEOEY5MTAwQkMzRgorOjEwODFEMDAwOTIzMzAwMEQwMjc4OTAyNEEyMzIwMDBEOEU5MDAwMzQ2QworOjEwODFFMDAwOEY4QjAwQkNBRDcwMDAxMDhFODcwMDJDOEU4RjAwMzBGRQorOjEwODFGMDAwMDBFRjcwMjNBRDZFMDAxNDkxNkQwMDE4MzFBQzAwN0Y1QworOjEwODIwMDAwQTE2QzAwMTg4RjlGMDBCQzhFOEEwMDMwOEZFODAwMTg4OAorOjEwODIxMDAwMDE1NzIwMjQwMTA5MzAyNDAwQzQxMDI1QUZFMjAwMThDMgorOjEwODIyMDAwOTI4MzAwMEFBM0UzMDAxQzk2OTkwMDA4OEY4NTAwQkM4NgorOjEwODIzMDAwOEY5ODAwRDBBNEI5MDAxRThFOTAwMDMwOEU4NDAwMzAzQworOjEwODI0MDAwMEUwMDAyMTM4RjA1MDA4NDhGODUwMEQwMDAwMjkxNDAzQworOjEwODI1MDAwMDAwMjk5MDA5MEFGMDBCQzAyNTM4ODIxMDA0MDMwMjFGOQorOjEwODI2MDAwMzFFNzAwMDIxMEUwMDAwMzAyMTE4MDIxMDAwMjkwODAzQgorOjEwODI3MDAwMDIxMjgwMjE5MEI5MDBCQzMzMjcwMDA0MTBFMDAwMDJGNAorOjEwODI4MDAwMDAwNkY4ODAwMjFGODAyMThFOTgwMDMwOEY4QjAwQkM4MgorOjEwODI5MDAwMjQwNjgwMDAzMzBGMDAwMzAwMEY3MDIzMzFDRDAwMDM0QworOjEwODJBMDAwMDIwRDYwMjFBRDZDMDAwNDk0QTQwMEUyOTRBQTAwRTJFNworOjEwODJCMDAwOTRCMDAwRTIzMTQ5N0ZGRjI1MjIwMDAxMzA1MzdGRkY1NworOjEwODJDMDAwMDIwNjE4MjQwMDczNDAyNUE0QTgwMEUyOTRBNDAwRTI0QQorOjEwODJEMDAwM0MxNDA4MDA4RTk0MDA2MDMwOTE3RkZGMTIzNDAwMjIxRAorOjEwODJFMDAwMDAwMDAwMDAwRTAwMENGNjAwMDAwMDAwOEY4NzAwRDA5OAorOjEwODJGMDAwMDAwMDI4MjE5NEYzMDBFMDk0RjAwMEUyMTIxMzAwMEYzNAorOjEwODMwMDAwOEZCRjAwMzA5MEU5MDBEMDkwRTgwMEQxMzEzMjAwRkZGQgorOjEwODMxMDAwMzEwNDAwRkYwMjQ0MzAyQjE0QzBGRjM2MjY0QTAwMDEwRQorOjEwODMyMDAwOTBFRTAwRDIyNjRCMDAwMTMxQ0QwMEZGMDA4RDYwMjE4MAorOjEwODMzMDAwMTU4QkZGMzM4RjkxMDBCMDhGQkYwMDMwOEZCNzAwMkNBQgorOjEwODM0MDAwOEZCNjAwMjg4RkI1MDAyNDhGQjQwMDIwOEZCMzAwMUM5NworOjEwODM1MDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMDBBMDEwMjE1MAorOjEwODM2MDAwMDNFMDAwMDgyN0JEMDAzODk0QTMwMEUyMDA2NjQwMjQyMworOjEwODM3MDAwQTRBODAwRTI5MEE0MDBFMjkwQjkwMEUyMzA5MTAwRkZDRQorOjEwODM4MDAwMDAxMUExQzIwMDE0RjgyNzAwMUYzOUMwMzMzMjAwN0Y0QQorOjEwODM5MDAwMDI0NzMwMjUwQTAwMERFOEEwQTYwMEUyMzA4NEZGRkY2NgorOjEwODNBMDAwMzBBNUZGRkZBRjQ0MDAxOEFGNDUwMDFDMDNFMDAwMDhGNAorOjEwODNCMDAwOEY0MjAwMTQyN0JERkZCOEFGQjAwMDIwOEY5MDAwRDBDRgorOjEwODNDMDAwMzA4NEZGRkZBRkE0MDAxMEFGQkYwMDQ0QUZCRTAwNDAzOQorOjEwODNEMDAwQUZCNzAwM0NBRkI2MDAzOEFGQjUwMDM0QUZCNDAwMzAzMworOjEwODNFMDAwQUZCMzAwMkNBRkIyMDAyOEFGQjEwMDI0QTdBMDAwMTg5MworOjEwODNGMDAwOTIwNjAwRDE5MjA1MDBEMDMwQzQwMEZGMzBBMzAwRkZFOAorOjEwODQwMDAwMDA2NDEwMkIxMDQwMDEyMkFGQTAwMDE0OTIwOTAwRDA4QworOjEwODQxMDAwOEZCNTAwMTAzMTI4MDBGRjAwODgzODIzMjRGNEZGRkZCNworOjEwODQyMDAwMDAxNDg4MkIwMDE1OTgyQjAyMzM5MDI0NTI0MDAxMjYwQgorOjEwODQzMDAwOEZCNDAwMTQ5NjFFMDAxMjk2MUYwMDEwOEZCNzAwMTAwNAorOjEwODQ0MDAwMDNERkM4MjMwMDE3MTQwMDAwMTlDNDAwMDAwMjI0MDMyRQorOjEwODQ1MDAwMDAxODE0MDMwMkUyQjAyQTUyQzAwMDAxMDA0MDIwMjE5QgorOjEwODQ2MDAwMDI4NDI4MkIxMEEwMDAwMjAwODAxODIxMDI4MDE4MjEwRAorOjEwODQ3MDAwMDAwMzNDMDAwMDA3MUMwMzMwNjRGRkZGMkM4NjAwMDk0QQorOjEwODQ4MDAwMTRDMDAwMDIwMDYwQjgyMTI0MTcwMDA4OEUwQTAwMDhGQQorOjEwODQ5MDAwMDAxNzY5ODA4RTA5MDAwQzMxQUJGRkZGM0MwQzAwMTAwNworOjEwODRBMDAwMDE2QzQwMjUyNzUyMDQwMEFGNEEwMDM4QUY5MjAwQjg1MworOjEwODRCMDAwQUY0OTAwM0NBRjQ4MDAzMDAwMDAwMDAwMDAwMDAwMDA2MQorOjEwODRDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQworOjEwODREMDAwMDAwMDAwMDAwMDAwMDAwMDhGNEYwMDAwMzFFRTAwMjA3RgorOjEwODRFMDAwMTFDMEZGRkQwMDE3OTgyQTAyNzExMDI0MEEwMDBFODNBNAorOjEwODRGMDAwMDAwMEIwMjE1NUUwMDEwMTkyNTgwMDAxMzExMzAwODBDNQorOjEwODUwMDAwMTI2MDAxQ0YwMTIwMjAyMTk2NTUwMDEyMzJBNUZGRkZGNQorOjEwODUxMDAwMEUwMDBDQ0JBN0I1MDAxODhGOTAwMEQwMDI5MUEwMjNCRAorOjEwODUyMDAwMjZDRDAwMDE4RjkxMDBCODAwMERCNDAwMDAxNkI0MDNGMQorOjEwODUzMDAwMjYzODAwNDAwMkQ3NTgyQTAwMTQ4ODJCMjQwNTAwMDE1MQorOjEwODU0MDAwMDMwMDkwMjEwMTcxMTAyNEFGOTgwMEI4QUZBNTAwMTQ2QQorOjEwODU1MDAwMTA0MDAxQkM4Rjg5MDBCMDNDMEMwODAwOEQ4QzAwNTQ4OQorOjEwODU2MDAwMjQwQkZGODA5MjFFMDBEMDAxODk1MDIxMDE0QjI4MjQ0QQorOjEwODU3MDAwOTIxOTAwRDBBRjQ1MDAyODhFNDcwMDEwM0MwODA4MDAzMworOjEwODU4MDAwOEQwODAwNTgzQzE4MDgwMDhGMTgwMDU0MzBFMzNGRkY1NgorOjEwODU5MDAwMDAwMzIxODAwMTA0MzAyMTAxMjY1ODIxMjQwMkZGODA5QworOjEwODVBMDAwMDE2MkY4MjQ5MjBDMDBEMEFGNUYwMDJDOTI0ODAwMDBDQQorOjEwODVCMDAwMzNEMTAwRkYzMzM1MDBGRjAzMDk5ODIxMDAxMTcxNDBDQQorOjEwODVDMDAwMDAxNTc4QzAzMjZEMDA3RjAxQ0YzODIxMDFCQTI4MjExMworOjEwODVEMDAwMzE4MzAwRkYzMTY0MDA3RjNDMEEwMDBDMDBBQTg4MjEyRgorOjEwODVFMDAwMDM2N0YwMjEwMDAzMzE0MDAwOUExMDIxMzEwODAwM0Y1OQorOjEwODVGMDAwM0MxRjAwMEUwMEQxQzAyMTAwNUY5ODIxMjdEOTAwODhDMAorOjEwODYwMDAwMkQxNTAwMDhBRjkxMDBDMEFGOTkwMEFDQUY5ODAwQkMyOQorOjEwODYxMDAwQUY5MzAwQjQxMkEwMDE4QTAwMDA4ODIxMjQwRTAwMDE0QgorOjEwODYyMDAwMDEwRTQwMDQzMTBEMDA1RDExQTBGRkIyMzEwRjAwMDJCOAorOjEwODYzMDAwOEU0QTAwMjgzQzAzMDA4MDNDMDRGRkVGQUU2QTAwMDAzNQorOjEwODY0MDAwOEU0NTAwMjRBMjYwMDAwQTM0ODhGRkZGQUU2NTAwMDQ1NgorOjEwODY1MDAwOTI0NzAwMkMzQzFGRkY5RjM3RkVGRkZGQTI2NzAwMENENAorOjEwODY2MDAwOEU2MjAwMEMzQzE4MDA0MEEyNjcwMDBCMDA0MzMwMjVDRQorOjEwODY3MDAwMDBDOEM4MjQwMzNFODgyNDAyMzhBODI1QUU3NTAwMEMyMworOjEwODY4MDAwOEU0OTAwMDRBRTYwMDAxODNDMEYwMEZGQUU2OTAwMTQ3NAorOjEwODY5MDAwOEU0RDAwMkMzNUVFRkZGRjhGOEIwMEIwMDFBRTYwMjRCNQorOjEwODZBMDAwQUU2QzAwMTA4RTQ3MDAwOEE2NjAwMDA4OTY0NTAwMTJDOAorOjEwODZCMDAwQUU2NzAwMjA4RTQyMDAwQzMwQjAzRkZGMDAxMDUxODBBQQorOjEwODZDMDAwQUU2MjAwMjQ4RTVFMDAxNDAxNEIxODIxMzBBNDAwMDExQworOjEwODZEMDAwQUU3RTAwMjg4RTU5MDAxODAwMDMzMUMyMDAwNDQzODA4QQorOjEwODZFMDAwQUU3OTAwMkM4RTUxMDAxQzAwQzhGODIxQTY3RjAwMUMxQQorOjEwODZGMDAwQUU3MTAwMzA5NjU4MDAwMjhFNTUwMDIwQTY3ODAwMUVGQworOjEwODcwMDAwQUU3NTAwMzQ5MjQ5MDAzMzMxMzAwMDA0NTYwMDAwMDU0NAorOjEwODcxMDAwOTI1MDAwMDA4RjhDMDBEMDhEOEIwMDdDQUU2QjAwMzBBRgorOjEwODcyMDAwOTI1MDAwMDA4RjhGMDBCQ0ExRjAwMDAwOTI0RTAwMzNFOQorOjEwODczMDAwMzFDRDAwMDI1MUEwMDAwNzkyNUUwMDAxOEY4OTAwQkM3QworOjEwODc0MDAwMjQxOEZGODA5MTMxMDAwMDAzMTFBODI1QTEzNTAwMDBGNQorOjEwODc1MDAwOTI1RTAwMDE4Rjk5MDBCQzI0MDlGRkJGMjQwQkZGREY0QworOjEwODc2MDAwQTMzRTAwMDE4Rjk1MDBCQzkyQjgwMDBEMzMxMTAwN0YyRAorOjEwODc3MDAwQTJCMTAwMEQ4RjhFMDBCQzkxRDAwMDBEMDIwOTc4MjRBQgorOjEwODc4MDAwQTFDRjAwMEQ4Rjg4MDBCQzhFNkQwMDE0OTEwQTAwMERFMgorOjEwODc5MDAwMkRBQzAwMDEwMDBDMjk0MDAxNEIzODI0MDBFNTE4MjVDMAorOjEwODdBMDAwQTEwMzAwMEQ5NjQyMDAxMjhGODgwMEJDOEY4NzAwRDA3NQorOjEwODdCMDAwQTUwMjAwMDI4RTQ1MDAwNDkwRkYwMEJDMzBBNDAwMDMxNworOjEwODdDMDAwMDAwNDMwMjMzMERFMDAwMzAwQkUxMDIxMzNGOTAwMDIyNAorOjEwODdEMDAwMTcyMDAwMDIyNDQ0MDAzNDI0NDQwMDMwOTBFMjAwQkNGRQorOjEwODdFMDAwMDBBMjMwMjQzMERGMDAwNDE3RTAwMDAyMjQ4MzAwMDREQworOjEwODdGMDAwMDA4MDE4MjE4RjhGMDBBQzI0MDkwMDAyQUQwMzAwMDQxMworOjEwODgwMDAwQTFFOTAwMDA5MjRFMDAzRjhGOEQwMEFDQTFBRTAwMDFBNworOjEwODgxMDAwOEY5NTAwQUM5MjRDMDAzRjhFNDQwMDA0QTZBQzAwMDI0MQorOjEwODgyMDAwOTc2QjAwM0MwRTAwMENENjMxNzBGRkZGMDAwMjUzODBBNgorOjEwODgzMDAwMDIwQTM4MjUzQzA1NDIwMDAwRTUxODI1QUVBMzAwMDRENQorOjEwODg0MDAwOEY4NjAwQUM4RTQ4MDAzOEFDQzgwMDE4OEU0NDAwMzRDNworOjEwODg1MDAwQUNDNDAwMUNBQ0MwMDAwQ0FDQzAwMDEwQTRDMDAwMTQyMAorOjEwODg2MDAwQTRDMDAwMTZBNEMwMDAyMEE0QzAwMDIyQUNDMDAwMjRGNAorOjEwODg3MDAwOEU2NDAwMTQ1MDgwMDAwMTI0MDQwMDAxQUNDNDAwMDg4MAorOjEwODg4MDAwMEUwMDBDRjYyNDExMDAwMTBBMDAwRTc2OEY5MDAwRDAyNQorOjEwODg5MDAwOTIwRjAwRDI5MjBFMDBEMDhGQjUwMDEwMzFFQjAwRkY4NgorOjEwODhBMDAwMzFDRDAwRkYwMDhENjAyMzAxNkM1MDIxMjU1NEZGRkY2NgorOjEwODhCMDAwMDAxNDg4MkIwMDE1OTgyQjAyMzM5MDI0MTY0MEZFRERGRgorOjEwODhDMDAwMDAwMDAwMDA4RkI0MDAxNDhGQkYwMDQ0OEZCRTAwNDAzMgorOjEwODhEMDAwM0E4MjAwMDE4RkI3MDAzQzhGQjYwMDM4OEZCNTAwMzQ2NAorOjEwODhFMDAwOEZCNDAwMzA4RkIzMDAyQzhGQjIwMDI4OEZCMTAwMjREQQorOjEwODhGMDAwOEZCMDAwMjAwM0UwMDAwODI3QkQwMDQ4MzMxMTAwMjA5RQorOjEwODkwMDAwMTIyMDAwRUYyNDE1MDAwMTkyMUUwMEJDMjQxRjAwMDE1QworOjEwODkxMDAwMDAwMEE4MjEzM0Q5MDAwMTEzMjAwMDBEQUZCRjAwMUNCNworOjEwODkyMDAwOEU0NDAwMTQ4RTA4MDA4NDAwODgxMDJCMTQ0MDAwMDIyRQorOjEwODkzMDAwMDA4MDMwMjE4RTA2MDA4NDhFMDMwMDY0MDBDM0E4MkJDMworOjEwODk0MDAwMTZBMDAwMDIwMEMwMjAyMThFMDQwMDY0MDA4MEE4MjEyRgorOjEwODk1MDAwOEU0NzAwMTQ4RTA1MDA2NDAwRTUzMDJCMTRDMDAwMDIyMQorOjEwODk2MDAwMDBFMDIwMjE4RTA0MDA2NDAwOTVGMDIzMTNDMDAwMDQ3MQorOjEwODk3MDAwOEZBQzAwMUMyNDBBMDAwMkFGQUEwMDFDOEZBQzAwMUNBNAorOjEwODk4MDAwMDI4QzU4MkIxNTYwMDBBODAwMDAxODIxOEU0RjAwMzg2QgorOjEwODk5MDAwOEU2RDAwMEMzQzBFMDA4MEFFNkYwMDAwOEU0QTAwMzRERAorOjEwODlBMDAwM0MxMEZGOUYwMUFFNTgyNUFFNkEwMDA0OTI0NjAwM0Y3RQorOjEwODlCMDAwMzYwQ0ZGRkYwMTZDMzgyNDNDMDUwMDIwM0MwM0ZGRUYyMAorOjEwODlDMDAwQTI2NjAwMEIwMEU1MTAyNTM0NjhGRkZGOEY4NzAwQjgxMgorOjEwODlEMDAwMDA0OEY4MjQzQzA0MDAwODAzRTRDODI1QUU3OTAwMENFNAorOjEwODlFMDAwOENGODAwMTRBRTYwMDAxODAyQkU3ODIxQUU3ODAwMTQzNgorOjEwODlGMDAwOENGMTAwMThBRTcxMDAxQzhDRTkwMDA4QUU2OTAwMjRFRgorOjEwOEEwMDAwOENFRTAwMENBRTZGMDAyQ0FFNjAwMDI4QUU2RTAwMjAyNQorOjEwOEExMDAwQTY2MDAwMzhBNjYwMDAzQThDRUQwMDE0MDFCNTgwMjNGMgorOjEwOEEyMDAwMDIxRTkwMjMxMjQwMDAxMUFFNzIwMDEwOTBFQTAwM0QyOQorOjEwOEEzMDAwOEU2NTAwMDQ4RTY0MDAwMDAwMEEzMTAwMDBBNkM4MjE4MworOjEwOEE0MDAwMDAwMDEwMjEwMzI2NDAyQjAwODJGODIxMDNFOEMwMjFGQQorOjEwOEE1MDAwQUU3OTAwMDRBRTc4MDAwMDkwRjEwMDNEQTI3MTAwMEFFQQorOjEwOEE2MDAwOEY4OTAwQjg5NTMyMDAwNkE2NzIwMDA4OEY5ODAwQUM3NgorOjEwOEE3MDAwMjQxOTAwMDIwMkEwMjAyMUEzMTkwMDAwOTc2OTAwM0NEQworOjEwOEE4MDAwOEY5MjAwQUMwRTAwMENENjMxMzFGRkZGMDAwMjdCODBDQworOjEwOEE5MDAwOEY4NTAwQjgwMjJGNjgyNTNDMEU0MjAwMDFBRTgwMjU2QworOjEwOEFBMDAwQUU1MDAwMDQ4Rjg0MDBBQzhDQUMwMDM4QUM4QzAwMTg0NQorOjEwOEFCMDAwOENBQjAwMzRBQzhCMDAxQ0FDODAwMDBDQUM4MDAwMTA4NAorOjEwOEFDMDAwQTQ4MDAwMTRBNDgwMDAxNkE0ODAwMDIwQTQ4MDAwMjJBQQorOjEwOEFEMDAwQUM4MDAwMjQ5MEE3MDAzRkE0ODcwMDAyMTJBMDAxMzVCQgorOjEwOEFFMDAwMjQwMzAwMDE1M0MwMDAwMjkwQTIwMDNEOTBBMjAwM0U2QQorOjEwOEFGMDAwMjQ0ODAwMDFBMDg4MDAwMThGOUYwMEFDQUZGNTAwMDg1QQorOjEwOEIwMDAwOEY4MzAwRDAyNDA3MDAzNDkwNjYwMEJDMzBDNTAwMDI3QgorOjEwOEIxMDAwNTBBMDAwMDEyNDA3MDAzMDhGOTIwMEI4OEY4QTAwQkM1QgorOjEwOEIyMDAwOTA2RDAwQkM5MjRCMDAwMDI0MTJDMDAwMzJBNTAwMDNERgorOjEwOEIzMDAwQTE0QjAwMDA4Rjg2MDBCODhGODgwMEJDMjQwMjAwMDQ3RgorOjEwOEI0MDAwOTBDNDAwMDEwMDQ1MTgyMzMwNzkwMDAzQTEwNDAwMDFGRQorOjEwOEI1MDAwOEY4QTAwQkM4RjlGMDBCODAwRjUzODIxOTU1ODAwMDIxRAorOjEwOEI2MDAwOTdFOTAwMTIwMEY5MzgyMTAzMTI4ODI0MzEyRjNGRkZDMgorOjEwOEI3MDAwMDIyRjcwMjVBNTRFMDAwMjkxNTAwMDAyMzFBODAwMDQ3QQorOjEwOEI4MDAwMzIwQzAwM0YzNThCMDA0MEExNEIwMDAyMTJBMDAwMDJDNgorOjEwOEI5MDAwOEY4NTAwQkMwMEU4MzgyMThGOEUwMEQwQUNBNzAwMDQ4MAorOjEwOEJBMDAwMjQwQkZGQkY4RENEMDA3QzJFQTQwMDAxMjQwM0ZGREYyQQorOjEwOEJCMDAwQUNBRDAwMDg5MEIwMDAwRDAwMDQ0MTQwMzIwQzAwN0ZDNQorOjEwOEJDMDAwQTBBQzAwMEQ4Rjg2MDBCQzkwQ0EwMDBEMDE0QjEwMjQ5NAorOjEwOEJEMDAwQTBDMjAwMEQ4Rjg3MDBCQzkwRTUwMDBEMDBBM0Y4MjQxMworOjEwOEJFMDAwMDNFOEM4MjVBMEY5MDAwRDhGOTEwMEI4OEY4RDAwQkM1NworOjEwOEJGMDAwOEUzODAwMjBBREI4MDAxMDhFMjkwMDI0QURBOTAwMTRENQorOjEwOEMwMDAwOEUyRjAwMjhBREFGMDAxODhFMkUwMDJDMEUwMDBDRjYxMworOjEwOEMxMDAwQURBRTAwMUM4RkIwMDAxQzI0MEMwMDAyMTIwQzAwRUU0NAorOjEwOEMyMDAwOEY5MDAwRDA4RkEzMDAxQzAwNjA4ODIxMTQ2MDAwMDI4OAorOjEwOEMzMDAwMDA2MEE4MjEwMDAwQTAyMTU2QTBGRTM5MDI5MUEwMjNDNworOjEwOEM0MDAwMDAxNDg4MkI4RkE5MDAxMDk2MDcwMDEwM0MxRTAwMjBFRQorOjEwOEM1MDAwMDEzNjQwMjMwMkM3NTAyMTMxMTJGRkZGQTYwQTAwMTAzRgorOjEwOEM2MDAwQUZCMjAwMTBBRjVFMDAzMDAwMDAwMDAwOTYxNzAwMTA5OQorOjEwOEM3MDAwOTYxMzAwMTIxMjc3MDA4RjAwMDAwMDAwOEUwNTAwMEM4MgorOjEwOEM4MDAwOEUwQjAwMDgwMDE2Njk4MDAwQUQ3MDIxMDAwREM3QzM2RgorOjEwOEM5MDAwMDFDREE4MkIwMTc4NzgyMTAxRjU2MDIxQUUwRTAwMENFMgorOjEwOENBMDAwQUUwQzAwMDg4RkIzMDAxMDAwMTNCODJCMDIzNzgwMjRERAorOjEwOENCMDAwMTIwMEZGMDQ4RjkwMDBEMDBBMDAwRTNDMDAwMDAwMDA1QworOjEwOENDMDAwOEU0RDAwMzhBNjYwMDAwODI0MEIwMDAzQUU2RDAwMDAzNgorOjEwOENEMDAwOEU1MDAwMzRBMjYwMDAwQThGOTgwMEI4QUU3MDAwMDQ3NQorOjEwOENFMDAwM0MwNTAwODA5MzExMDAzRkEyNkIwMDBDOEU2RjAwMENCRQorOjEwOENGMDAwM0MwRUZGOUZBMjcxMDAwQjAxRTUxMDI1MzVDQ0ZGRkY1NAorOjEwOEQwMDAwM0MwM0ZGRUY4RjkyMDBCODAwNEMzMDI0MzQ2NEZGRkYyNworOjEwOEQxMDAwMDBDNEY4MjRBRTdGMDAwQzhFNTkwMDE0OTY0ODAwMTI0RgorOjEwOEQyMDAwOEY4QTAwQjBBRTc5MDAxMDhFNDkwMDE0QUU2MDAwMTgzMgorOjEwOEQzMDAwQUU2MDAwMjBBRTY5MDAxNEFFNjAwMDI0OEU0NzAwMThCQgorOjEwOEQ0MDAwMzEwOTNGRkYwMDA5RjE4MEFFNjcwMDI4OEU0RDAwMDgxMQorOjEwOEQ1MDAwMDNDQTgwMjEzMTE4MDAwMUFFNkQwMDMwOEU0RjAwMEMyNworOjEwOEQ2MDAwOEY4QzAwQUMwMDEwODlDMjAwMTg1QjgwMDIyQjI4MjE3OAorOjEwOEQ3MDAwMjQwRTAwMDJBNjY1MDAxQ0E2NjAwMDM2QUU2RjAwMkMxMworOjEwOEQ4MDAwQTE4RTAwMDA5NzYzMDAzQzhGOEEwMEFDM0MwNDQyMDAzNworOjEwOEQ5MDAwMzA2MkZGRkYwMDQ0MzAyNUFENDYwMDA0OEY5RjAwQjhDRAorOjEwOERBMDAwMjQwNzAwMDEyNDExQzAwMDhGRjMwMDM4MjQwNjAwMzQ4QQorOjEwOERCMDAwQUQ1MzAwMTg4RkY5MDAzNEFENTkwMDFDQUQ0MDAwMENDNAorOjEwOERDMDAwQUQ0MDAwMTBBNTQwMDAxNEE1NDAwMDE2QTU0MDAwMjBBRAorOjEwOEREMDAwQTU0MDAwMjJBRDQwMDAyNEE1NTUwMDAyQTE0NzAwMDE5NgorOjEwOERFMDAwOEY5RTAwQUM4Rjg4MDBCODhGOTIwMEJDQUZENTAwMDg3MgorOjEwOERGMDAwOTEwRDAwMDBBMjREMDAwMDhGOTAwMEI4OEY4QjAwQkMzOQorOjEwOEUwMDAwOTIxODAwMDFBMTc4MDAwMThGODQwMEJDOTQ4NTAwMDJCMworOjEwOEUxMDAwMDBCMTc4MjQwMUU5NzAyNUE0OEUwMDAyOTA4QzAwMDIzNAorOjEwOEUyMDAwMzE4MzAwM0ZBMDgzMDAwMjhGODMwMEQwOEY4NDAwQkM3OQorOjEwOEUzMDAwOTA2MjAwQkMzMDUzMDAwMjUyNjAwMDAxMjQwNjAwMzBGMgorOjEwOEU0MDAwQUM4NjAwMDQ4QzZGMDA3QzI0MDNGRkJGMDJBMDg4MjE0NQorOjEwOEU1MDAwQUM4RjAwMDg5MDhFMDAwRDMxQ0MwMDdGQTA4QzAwMERFRgorOjEwOEU2MDAwOEY4NjAwQkM5MEMyMDAwRDAwNDMyMDI0QTBDNDAwMEREQQorOjEwOEU3MDAwOEY4OTAwQkM5MTNGMDAwRDM3RjkwMDIwQTEzOTAwMEQwQQorOjEwOEU4MDAwOEY4ODAwQjg4RjkzMDBCQzhEMDcwMDIwQUU2NzAwMTA1QworOjEwOEU5MDAwOEQwQTAwMjRBRTZBMDAxNDhEMUUwMDI4QUU3RTAwMThENAorOjEwOEVBMDAwOEQxMjAwMkMwRTAwMENGNkFFNzIwMDFDMEEwMDEwM0Q1NAorOjEwOEVCMDAwOEY5MDAwRDA5NjBFMDAxNDhFMDMwMDA0MzFDQ0ZGRkY3QgorOjEwOEVDMDAwMDAwQzEwQzAwMDYyMjAyMUFGNDQwMDNDOEUxRjAwMDQ0MworOjEwOEVEMDAwOEY0NjAwM0MwM0U2QzgyMzFCMjAwMDNDMDAwMDAwMDAzNgorOjEwOEVFMDAwOEUwRjAwMDAyNUUyMDAwMTNDMDUwMDEwMzRCNTAwMDg5QgorOjEwOEVGMDAwQUY0MjAwMzhBRjU1MDAzMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwOEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MQorOjEwOEYxMDAwMDAwMDAwMDAwMDAwMDAwMDhGNTgwMDAwMzMwQjAwMjAwQworOjEwOEYyMDAwMTE2MEZGRkQwMDAwMDAwMDhGNTMwNDAwM0MwRDAwMjA4NQorOjEwOEYzMDAwQUUxMzAwMDg4RjU3MDQwNEFFMTcwMDBDQUY0RDAwMzA3RAorOjEwOEY0MDAwMDAwMDAwMDAzQzA2MDgwMDhDQzYwMDQ0MjQxNjAwMDEwNgorOjEwOEY1MDAwMTBENjAwQkQwMDAwMDAwMDk2MUYwMDEyM0MwNTA4MDA1RQorOjEwOEY2MDAwOENBNTAwNDAwMEJGQzgyMUE2MTkwMDEyOTYwOTAwMTQ2NAorOjEwOEY3MDAwMjUyNzAwMDFBNjA3MDAxNDk2MEEwMDE0MzE0NEZGRkZCQworOjEwOEY4MDAwNTQ4NkZGNDk4RkIzMDAxMEE2MDAwMDE0MEUwMDBFMTY4MQorOjEwOEY5MDAwMzBBNUZGRkYzQzA0MDgwMDhDODQwMDI0OTYwMzAwMTJENworOjEwOEZBMDAwMDA0NDEwMjMwMDYyMzAyM0E2MDYwMDEyMEEwMDEwNTk2NAorOjEwOEZCMDAwOEZCMzAwMTBBMDgzMDAwMThGODIwMEFDMjQwNDAwMDE1NQorOjEwOEZDMDAwQUM0NDAwMDgwQTAwMEZGMDhGODMwMEQwOEUwMjAwMDAyRQorOjEwOEZEMDAwMEEwMDEwRUEzQzA1MDAxMDhGODIwMEMwOEZBNzAwMUMxOQorOjEwOEZFMDAwOTIxODAwRDA5MjBCMDBEMDkyMEUwMEQwMzMxMTAwRkZFNworOjEwOEZGMDAwMzE2OTAwRkYwMDExNzk0MDAwMDkyOEMwMDFFNTYwMjFCNgorOjEwOTAwMDAwMzFDMzAwRkYwMzZDNTAyMTAwMDMzMTQwMDBDMkM4MjE2RQorOjEwOTAxMDAwMjU1RjAwODhBRjlGMDBBQ0FGOTkwMEJDQTE0NzAwODhENgorOjEwOTAyMDAwOTc2ODAwM0MwM0MwMjAyMThGOTEwMEFDMEUwMDBDRDY0NQorOjEwOTAzMDAwMzExMEZGRkYwMDAyNkI4MDAyMERDMDI1M0MwNDQyMDA4RQorOjEwOTA0MDAwOEY4RDAwQjgwMzA0NTgyNUFFMkIwMDA0OERBOTAwMzg3RAorOjEwOTA1MDAwOEY4QjAwQUMwMDAwODgyMTAwMTE4MTAwQUQ2OTAwMThFMQorOjEwOTA2MDAwOERBRjAwMzQzQzA4N0ZGRjM1MDRGRkZGQUQ2RjAwMUM1RgorOjEwOTA3MDAwOTFBQzAwM0U4RDY1MDAxQzhENjYwMDE4MDAwQzE5MDAzNworOjEwOTA4MDAwMDAwQzc3MDIwMEEzMzgyMTAyMEUxMDI1MDBFM0Y4MkIxNAorOjEwOTA5MDAwMDBDMkM4MjEwMzNGNTAyMUFENjcwMDFDQUQ2QTAwMTgxMworOjEwOTBBMDAwQUQ2MDAwMENBRDYwMDAxMDkxQjgwMDNFMjQwNTAwMDVENQorOjEwOTBCMDAwMDNDNDUwMjRBNTc4MDAxNDk1QTkwMDA0MDNDMDIwMjFGRQorOjEwOTBDMDAwQTU2OTAwMTY5MUFGMDAzRUE1NkYwMDIwOTVCMTAwMDQ4MAorOjEwOTBEMDAwQTU3MTAwMjJBRDYwMDAyNDkxQUUwMDNGQTU2RTAwMDI5NAorOjEwOTBFMDAwOTFCMDAwM0U5MUFDMDAzRDAxOTAxMDIzMjQ0MzAwMDE1QgorOjEwOTBGMDAwQTE2MzAwMDE4Rjg2MDBBQzhGOUYwMEJDQUNERTAwMDgyRQorOjEwOTEwMDAwQTNFNTAwMDA4RjkwMDBCQzhGOTkwMEI4MjQwNUZGQkYzNQorOjEwOTExMDAwOTYwNzAwMDI5NzM4MDAxMjAyNDc3ODI0MzMwOTNGRkY3MAorOjEwOTEyMDAwMDFFOTg4MjVBNjExMDAwMjkyMTIwMDAyMjQxOEZGREYyRgorOjEwOTEzMDAwMzI0RTAwM0YzNUNEMDA0MEEyMEQwMDAyOEY4NjAwQkNBQworOjEwOTE0MDAwOEY4QzAwRDAyNDEyRkZGRkFDQzAwMDA0OEQ4QjAwN0NGQworOjEwOTE1MDAwM0MwQzgwMDBBQ0NCMDAwODkwQzIwMDBEMzA0MzAwN0Y3NworOjEwOTE2MDAwQTBDMzAwMEQ4Rjg3MDBCQzkwRkYwMDBEMDNFNUM4MjQ0RAorOjEwOTE3MDAwQTBGOTAwMEQ4RjkxMDBCQzkyMjkwMDBEMDEzODc4MjREMAorOjEwOTE4MDAwQTIyRjAwMEQ4RjkwMDBCQ0FFMTIwMDEwQUUxNTAwMTQ3RgorOjEwOTE5MDAwOTIwRTAwMTgyNDE1RkY4MDAyQUU2ODI1QTIwRDAwMTg1QgorOjEwOTFBMDAwOEY4NTAwQkM4RjgzMDBCODhDQUIwMDE4MDE2QzEwMjQzNQorOjEwOTFCMDAwMDA0QTMwMjVBQ0E2MDAxODkwNjgwMDNFQTBBODAwMUMwQworOjEwOTFDMDAwOEY5RjAwQjg4Rjg3MDBCQzhGOTgwMEQwOTdGOTAwMDQ1QworOjEwOTFEMDAwQTRGOTAwMUUwRTAwMDIxMzhGMDUwMDg0OEY4NjAwRDBCNAorOjEwOTFFMDAwMDAwMjc5NDAwMDAyNDkwMDkwRDIwMEJDMDFFOTg4MjFDOAorOjEwOTFGMDAwMDA0MDI4MjEzMjU1MDAwMjEyQTAwMDAzMDNEMTIwMjE5MworOjEwOTIwMDAwMDAwMkE4ODAwMDk1MjAyMTkwQ0QwMEJDMzFCMjAwMDQ1RQorOjEwOTIxMDAwMTI0MDAwMDMzM0RGMDAwMzAwMDU0MDgwMDA4ODIwMjE1NgorOjEwOTIyMDAwMjQwNjAwMDQ4RjlFMDBCQzAwREZDODIzMzMyNzAwMDMwMAorOjEwOTIzMDAwMDA4NzUwMjFBRkNBMDAwNDBFMDAwQ0Y2QTY2NTAwMzg2NgorOjEwOTI0MDAwMEEwMDEwMzg4RjkwMDBEMDk2MUUwMDEyM0MwODA4MDBDQgorOjEwOTI1MDAwOEQwODAwMjQwMTFFOTAyMUE2MTIwMDEyMEEwMDEwNTk0OAorOjEwOTI2MDAwOEZCMzAwMTAyN0JERkZFMDNDMTgwODAwOEYxODAwNTA5NgorOjEwOTI3MDAwQUZCMDAwMTBBRkJGMDAxOEFGQjEwMDE0QUY4NDAwQjBBMgorOjEwOTI4MDAwOTM3MTAwNzQwMzA0NzgyMTI0MTBGRjgwMzFFRTAwN0Y3NQorOjEwOTI5MDAwMzIyNTAwN0YwMUYwNTgyNDAxREE2ODIxM0MwQzAwMEFENQorOjEwOTJBMDAwQTM4NTAwQzQwMUFDMjgyMUFGNEIwMDI0OTRBOTAwMTA3MQorOjEwOTJCMDAwOTc2ODAwMDY5MEE2MDA2MjAwODAzODIxMjQwMjAwMzBFMgorOjEwOTJDMDAwMDEwOTIwMjMzMEMzMDBGMEFGODUwMEQwMTA2MjAwMTlERgorOjEwOTJEMDAwMzA5MEZGRkY5MEFFMDA2MjI0MERGRkYwMjQwQTAwNTA5MgorOjEwOTJFMDAwMDFBRTYwMjQzMThCMDBGRjExNkEwMDJGMDAwMDAwMDBFNgorOjEwOTJGMDAwMTYwMDAwMDcyNDFGMEMwMEFGNUYwMDI0OEZCMTAwMTQ3QworOjEwOTMwMDAwOEZCRjAwMTg4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjBCOQorOjEwOTMxMDAwMEUwMDBFMUMwMjAwMjAyMTI0MUYwQzAwQUY1RjAwMjQ1MQorOjEwOTMyMDAwOEZCMTAwMTQ4RkJGMDAxODhGQjAwMDEwMDNFMDAwMDg0OQorOjEwOTMzMDAwMjdCRDAwMjA5NEEyMDBFMDk0QTQwMEUyOTBCRjAxMTM5NgorOjEwOTM0MDAwMDA4MjE4MjYzMDc5RkZGRjMzRTcwMEMwMTRFMDAwMDlERgorOjEwOTM1MDAwMkYzMTAwMDExNjAwMDAzODAwMDAwMDAwNTYyMEZGRTYwMworOjEwOTM2MDAwMjQxRjBDMDAwRTAwMEQxODAwMDAwMDAwMEEwMDExRUQ3MworOjEwOTM3MDAwMjQxRjBDMDAxNjIwRkZERTAwMDAwMDAwMEUwMDBEMTg1OAorOjEwOTM4MDAwMDAwMDAwMDAxNDQwRkZEQzI0MUYwQzAwMTYwMDAwMjIyNworOjEwOTM5MDAwOEY4MzAwRDA5MDY5MDExMzMxMjIwMDNGQTA2MjAxMTMzNgorOjEwOTNBMDAwMEEwMDExRUQyNDFGMEMwMDk0QUYwMEQ0OEY4NjAwRDQ2NgorOjEwOTNCMDAwMDBFMDI4MjEyNDA0MDAwNTBFMDAwQzVDMzFGMEZGRkZDMgorOjEwOTNDMDAwMTQ0MDAwMDUyNDAzMDAwMzk3OTEwMEU2MDAwMDE4MjFEMworOjEwOTNEMDAwMjYyNUZGRkZBNzg1MDBFNjhGNTgwMUI4MDcwMEZGRkU4RQorOjEwOTNFMDAwM0MxOTYwMTNBRjQwMDE4MDI0MUYwQzAwQUY1MDAxODQ3MgorOjEwOTNGMDAwMDA3OTM4MjUzQzEwMTAwMEFGNDcwMTg4OEZCMTAwMTQ2OAorOjEwOTQwMDAwQUY1MDAxQjhBRjVGMDAyNDhGQjAwMDEwOEZCRjAwMThCRAorOjEwOTQxMDAwMDNFMDAwMDgyN0JEMDAyMDBFMDAwRTFDMDIwMDIwMjFFMgorOjEwOTQyMDAwNTA0MEZGQjUyNDFGMEMwMDhGODMwMEQwOTA2OTAxMTNCQQorOjEwOTQzMDAwMEEwMDEyMTYzMTIyMDAzRjBFMDAwRTFDMDIwMDIwMjFFRAorOjEwOTQ0MDAwMTQ0MEZGQUQyNDFGMEMwMDEyMjAwMDA3OEY4MzAwRDBCMgorOjEwOTQ1MDAwOTA2ODAxMTMzMTA2MDAzRjM0QzIwMDQwQTA2MjAxMTMzRQorOjEwOTQ2MDAwMEEwMDExRUQyNDFGMEMwMDBFMDAwRDE4MDAwMDAwMDA3MgorOjEwOTQ3MDAwNTA0MEZGQTEyNDFGMEMwMDhGODMwMEQwOTA2ODAxMTM3RgorOjEwOTQ4MDAwMzEwNjAwM0YwQTAwMTI0NjM0QzIwMDQwQUY5QjAwQzhCQworOjEwOTQ5MDAwMDNFMDAwMDhBRjgwMDBFQzMwODlGRkZGMDAwOTQwNDI4NAorOjEwOTRBMDAwMkQwMjAwNDEwMDA5MjE4MDE0NDAwMDAyMDAwOTUwNDBCMworOjEwOTRCMDAwMjQwODAwNDAwMDA4MzBDMDAwMDgxMTQwMDA0NjU4MjEzMAorOjEwOTRDMDAwMjU2NzAxQTgwMEUyQzgyMTI3MkYwMDdGMjQxOEZGODAwQworOjEwOTREMDAwMDFGODE4MjQwMDY0MzAyMTAwQ0E3MDIxMjVDQzAwRkY1NworOjEwOTRFMDAwMjQwREZGMDAwMThEMjAyNDI1NjUwMDg4MjQwQTAwODhCMgorOjEwOTRGMDAwM0MwMTA4MDBBQzJBMDA0QzNDMDEwODAwQUMyNTAwNTA5RgorOjEwOTUwMDAwQUY4NDAwRDQzQzAxMDgwMEFDMjkwMDYwM0MwMTA4MDA5NQorOjEwOTUxMDAwQUMyODAwNjQzQzAxMDgwMEFDMjcwMDU0M0MwMTA4MDA2MgorOjEwOTUyMDAwQUMyMzAwNTgzQzAxMDgwMEFDMjYwMDVDMDNFMDAwMDhCNgorOjEwOTUzMDAwMDAwMDAwMDAzMDgzMDBGRjMwQzZGRkZGMzBFNDAwRkY3MgorOjEwOTU0MDAwOEY0MjAxQjgwNDQwRkZGRTAwMDM0QzAwMDEyNDM4MjU3RgorOjEwOTU1MDAwM0MwODYwMDAwMEU4MjAyNTNDMDMxMDAwQUY0NTAxODA3NgorOjEwOTU2MDAwQUY0NjAxODRBRjQ0MDE4ODAzRTAwMDA4QUY0MzAxQjg2RgorOjEwOTU3MDAwOEY4NjAwMUMzQzA5NjAxMjM1MjcwMDEwOENDQjAwMDQzQworOjEwOTU4MDAwM0MwQzYwMEUzNTg1MDAxMDMxNkEwMDA2MkQ0ODAwMDE0NAorOjEwOTU5MDAwQUNFODAwQzQ4Q0M0MDAwNEFDQTQzMTgwOENDMjAwMDhDOAorOjEwOTVBMDAwOTRDMzAwMDJBQ0EyMzE4NDAzRTAwMDA4QTc4MzAwRTQ2NgorOjEwOTVCMDAwM0MwMzA4MDA4QzYzMDA1MDhGODQwMEU4OEY4NjAwMUNGOQorOjEwOTVDMDAwMjQwMkZGODAwMDY0QzAyMTAzMDJDODI0QUY1OTAwMjg5MAorOjEwOTVEMDAwOENDRDAwMDQzMzA1MDA3RjAwQkE3ODIxM0MwRTAwMENDRQorOjEwOTVFMDAwMDFFRTI4MjFBQ0FEMDA1ODhDQzgwMDA4QUY4NTAwRDAzMgorOjEwOTVGMDAwM0MwNzYwMTJBQ0E4MDA1QzhDQ0MwMDEwMzRFODAwMTA3MgorOjEwOTYwMDAwQUNBQzAwMEM4Q0NCMDAwQ0FDQUIwMDA4OTRBQTAwMTRFMgorOjEwOTYxMDAwM0MwMjA4MDA4QzQyMDA0NDI1NDkwMDAxQTRBOTAwMTQyMgorOjEwOTYyMDAwOTRBNDAwMTQzMDgzRkZGRjEwNjIwMDE3OEY4NDAwRDBEMQorOjEwOTYzMDAwM0MwQTA4MDA4RDRBMDA0MEE0QUEwMDEyOENDRTAwMThGMworOjEwOTY0MDAwQUM4RTAwMjQ4Q0NEMDAxNEFDOEQwMDIwOENDNzAwMTg4QgorOjEwOTY1MDAwQUM4NzAwMkM4Q0NDMDAxNDI0MDYwMDAxQUM4QzAwMjhCNAorOjEwOTY2MDAwOEQwQjAwQkM1MTY2MDAxQThEMDIwMEI0OEQwMjAwQjg0QgorOjEwOTY3MDAwQTQ4MjAwM0E5NDhGMDAzQUE0OEYwMDNDOTQ4ODAwRDRDRQorOjEwOTY4MDAwMDNFMDAwMDgzMTAyRkZGRjNDMDkwODAwOEQyOTAwMjQ5NworOjEwOTY5MDAwQTRBMDAwMTQ4Rjg0MDBEMEE0QTkwMDEyOENDRTAwMThCRQorOjEwOTZBMDAwQUM4RTAwMjQ4Q0NEMDAxNEFDOEQwMDIwOENDNzAwMTgyQgorOjEwOTZCMDAwQUM4NzAwMkM4Q0NDMDAxNDI0MDYwMDAxQUM4QzAwMjg1NAorOjEwOTZDMDAwOEQwQjAwQkM1NTY2RkZFQThEMDIwMEI4OEQwMjAwQjQxOAorOjEwOTZEMDAwQTQ4MjAwM0E5NDhGMDAzQUE0OEYwMDNDOTQ4ODAwRDQ2RQorOjEwOTZFMDAwMDNFMDAwMDgzMTAyRkZGRjhGODYwMDFDM0MwQzA4MDBERAorOjEwOTZGMDAwOEQ4QzAwNTAyNDBCRkY4MDhDQ0QwMDA4M0MwMzAwMENBNworOjEwOTcwMDAwMDAwRDUxQzAwMThBNDAyMTAxMEI0ODI0QUY4QTAwRThCNgorOjEwOTcxMDAwQUY0OTAwMjg5MEM3MDAwNzMxMDUwMDdGMDBCQTEwMjEyQgorOjEwOTcyMDAwMDA0MzI4MjEzMEU0MDAwNDEwODAwMDM5QUY4NTAwRDBDOAorOjEwOTczMDAwOTBDRjAwMDczMUVFMDAwODExQzAwMDM4MDAwMDAwMDA5MworOjEwOTc0MDAwOENEOTAwMEM4Q0M0MDAxNDAzMjRDMDJCMTMwMDAwMzBFRgorOjEwOTc1MDAwMDAwMDAwMDA4Q0MyMDAwQ0FDQTIwMDY0OENDRDAwMTg4QworOjEwOTc2MDAwMjQwMkZGRjhBQ0FEMDA2ODhDQ0MwMDEwQUNBQzAwODBEQgorOjEwOTc3MDAwOENDQjAwMENBQ0FCMDA4NDhDQ0EwMDFDQUNBQTAwN0M2NworOjEwOTc4MDAwOTBBOTAwQkMwMTIyNDAyNEEwQTgwMEJDOTBDMzAwMDdGRgorOjEwOTc5MDAwMzA2NzAwMDgxMEUwMDAwNDhGODUwMEQwOTBBRjAwQkM1NworOjEwOTdBMDAwMzVFRTAwMDFBMEFFMDBCQzkwRDkwMDA3MzMzODAwMDFBRgorOjEwOTdCMDAwMTMwMDAwMDg4RjgzMDBEMDhGODcwMEQwMjQwNDAwMzQ2QQorOjEwOTdDMDAwOTBFODAwQkMzNTAzMDAwMkEwRTMwMEJDOEY4MzAwRDAwQQorOjEwOTdEMDAwQUM2NDAwQzA5MEM5MDAwNzMxMjYwMDAyMTBDMDAwMDUyQgorOjEwOTdFMDAwMDAwMDAwMDA5MDZBMDBCQzM1NDIwMDA0QTA2MjAwQkM4QQorOjEwOTdGMDAwOEY4MzAwRDA5MDY1MDExMzMwQUQwMDNGQTA2RDAxMTM0MQorOjEwOTgwMDAwOEY4QzAwRDA5NThCMDBENDAzRTAwMDA4MzE2MkZGRkZGRAorOjEwOTgxMDAwOENDMjAwMTQwQTAwMTMwNTAwMDAwMDAwMEEwMDEzMDZBMQorOjEwOTgyMDAwQUNBMDAwNjQyN0JERkZEOEFGQjAwMDEwOEY5MDAwMUMyMworOjEwOTgzMDAwQUZCRjAwMjRBRkI0MDAyMEFGQjIwMDE4QUZCMTAwMTQyNgorOjEwOTg0MDAwQUZCMzAwMUM5NjEzMDAwRTNDMDc2MDBBM0MxNDYwMDY4MAorOjEwOTg1MDAwMzI2NEZGRkYzNjkzMDAxMDBFMDAxMjU1MzRGNDA0MTBFQQorOjEwOTg2MDAwOEY4NDAwRDQzQzExNjAwRTBFMDAwOTlCMzYzMTAwMTAyRAorOjEwOTg3MDAwOTIwRTAwMTUzQzA3MDgwMDhDRTcwMDYwM0MxMjYwMTI1NQorOjEwOTg4MDAwMzFDRDAwMEZBMzhEMDBGMDhFMEUwMDA0OEUwRDAwMDg2OAorOjEwOTg5MDAwOTYwODAwMTI5NjFGMDAxMDk2MTkwMDFBOTYxODAwMUVCRQorOjEwOThBMDAwOTYwRjAwMUMzMTBDRkZGRjMzRUJGRkZGMzMyQUZGRkY0NQorOjEwOThCMDAwMzMwOUZGRkYzMUU2RkZGRjNDMDEwODAwQUMyQjAwNDBGRAorOjEwOThDMDAwM0MwMTA4MDBBQzJDMDAyNDNDMDEwODAwQUMyQTAwNDRGOAorOjEwOThEMDAwQUUyOTMxNzhBRTI2MzE3QzkyMDIwMDE1OTYwMzAwMTYyRgorOjEwOThFMDAwMzY1MjAwMTAzMDQ0MDBGRjMwNjVGRkZGM0MwNjA4MDA5MAorOjEwOThGMDAwOENDNjAwNjRBRTI0MzE4OEFFNDUwMEI0OTIwODAwMTREMgorOjEwOTkwMDAwOTYxOTAwMTgyNDFGMDAwMTAxMUZDMDA0MzMyRkZGRkYwOAorOjEwOTkxMDAwM0MwNTA4MDA4Q0E1MDA1OEFFNTgwMEI4QUU0RjAwQkNGRQorOjEwOTkyMDAwOTIwQzAwMTRBRjhFMDBEOEFGOEQwMERDMzE4QjAwRkY5RAorOjEwOTkzMDAwQUU0QjAwQzA5MjBBMDAxNUFFNjcwMDQ4QUU2NjAwNEMwMAorOjEwOTk0MDAwMzE0OTAwRkZBRTQ5MDBDOEFFNjUwMDdDM0MwMzA4MDAwOQorOjEwOTk1MDAwOEM2MzAwNTAzQzA0MDgwMDhDODQwMDRDM0MwODA4MDBEOAorOjEwOTk2MDAwOEQwODAwNTQzQzAyMDgwMDhDNDIwMDVDOEZCRjAwMjQyQworOjEwOTk3MDAwQUU2MzAwODA4RkIwMDAxMEFFODMwMDc0OEZCMzAwMUMwNAorOjEwOTk4MDAwQUUyMjMxOUNBRTQyMDBEQ0FFMjczMUEwQUUyNjMxQTQxRgorOjEwOTk5MDAwQUUyNDMxOENBRTIzMzE5MEFFMjgzMTk0QUUyNTMxOTg2RgorOjEwOTlBMDAwQUU4NzAwNTBBRTg2MDA1NEFFODUwMDcwOEZCMTAwMTRCMworOjEwOTlCMDAwQUU0NzAwRTBBRTQ2MDBFNEFFNDQwMENDQUU0MzAwRDA3QgorOjEwOTlDMDAwQUU0ODAwRDRBRTQ1MDBEODhGQjQwMDIwOEZCMjAwMTg0NgorOjEwOTlEMDAwMDNFMDAwMDgyN0JEMDAyODI3QkRGRkUwQUZCMTAwMTQ1OQorOjEwOTlFMDAwQUZCRjAwMTgyNDExMDAwMTBFMDAwODQ1QUZCMDAwMTBGMQorOjEwOTlGMDAwMTA1MTAwMDU5Nzg0MDBFNjk3ODMwMENDMDA4MzEwMkI1QworOjEwOUEwMDAwMTQ0MDAwMDg4Rjg1MDBENDI0MDcwMDAyOEZCRjAwMTg3RgorOjEwOUExMDAwOEZCMTAwMTQ4RkIwMDAxMDAwRTAxMDIxMDNFMDAwMDhBNworOjEwOUEyMDAwMjdCRDAwMjAwRTAwMEM3QTI0MDQwMDA1QUY4MjAwRTg1OAorOjEwOUEzMDAwMTA0MEZGRjYyNDA3MDAwMjBFMDAwODQ5OEY5MDAwMUMxQQorOjEwOUE0MDAwOTc5RjAwRTY4Rjk5MDBFODhGOEQwMEM4MjdFRjAwMDFFRgorOjEwOUE1MDAwMjQwRTAwNTBBRjU5MDAyMEE3OEYwMEU2QTFBRTAwMDBGMQorOjEwOUE2MDAwM0MwQzA4MDA4RDhDMDA2NDhGODYwMEM4MjQwQTgwMDA5RQorOjEwOUE3MDAwMDAwQzVFMDBBQ0NCMDA3NEE0QzAwMDA2OTRDOTAwMEFDMAorOjEwOUE4MDAwMjQxRkZGODAzQzBEMDAwQzAxMkFDMDI0QTREODAwMEEyQQorOjEwOUE5MDAwOTBDODAwMEEyNDE4MjAwMDAxMUYxODI1QTBDMzAwMEEzRQorOjEwOUFBMDAwOEY4NzAwQzhBMEUwMDA3ODhGODUwMEM4MDAwMDM4MjFBQgorOjEwOUFCMDAwQTBBMDAwODMzQzAyMDgwMDhDNDIwMDUwOEY4NDAwRTg4NAorOjEwOUFDMDAwMDA0NDc4MjEwMUZGQzgyNEFGNTkwMDI4OTYwQjAwMDJGQQorOjEwOUFEMDAwMzFFRTAwN0YwMURBNjAyMTAxOEQzMDIxQTRDQjAwRDQ2QQorOjEwOUFFMDAwOTYwQTAwMDJBRjg2MDBEMDNDMEUwMDA0MjU0OTI0MDFFRQorOjEwOUFGMDAwQTRDOTAwRTY4RTA4MDAwNEFDQzgwMDA0OEUwMzAwMDg2OAorOjEwOUIwMDAwQUNDMzAwMDBBNEMwMDAxMEE0QzAwMDE0QTBDMDAwRDBDQQorOjEwOUIxMDAwOEY4NTAwRDAyNDAzRkZCRkEwQTAwMEQxM0MwNDA4MDAyMworOjEwOUIyMDAwOEM4NDAwNjQ4RjgyMDBEMEEwNDQwMEQyOEUxRjAwMEM3MQorOjEwOUIzMDAwOEY4QTAwRDA5NzhGMDBFNEFENUYwMDFDOEUxOTAwMTA1MworOjEwOUI0MDAwMjQxMDAwMzBBRDU5MDAxOEE1NDAwMDMwQTU1MTAwNTQzNAorOjEwOUI1MDAwQTU1MTAwNTZBNTRGMDAxNkFENEUwMDY4QUQ1ODAwODBDNworOjEwOUI2MDAwQUQ1ODAwODQ5MTREMDA2MjMxQUMwMDBGMzU4QjAwMTA3MAorOjEwOUI3MDAwQTE0QjAwNjI4Rjg2MDBEMDkwQzkwMDYzMzEyODAwN0YxRQorOjEwOUI4MDAwQTBDODAwNjM4Rjg0MDBEMDI0MDZGRkZGOTA4NTAwNjM4NworOjEwOUI5MDAwMDBBMzEwMjRBMDgyMDA2MzhGOTEwMEQwMDBFMDEwMjE2OAorOjEwOUJBMDAwOTIzRjAwQkMzN0Y5MDAwMUEyMzkwMEJDOEY4QTAwRDA3NworOjEwOUJCMDAwOTM4RjAwRjBBRDU4MDA2NEFENTAwMEMwOTE0RTAwRDNCQgorOjEwOUJDMDAwMDAwRjY5MDAzMUNDMDAwRjAxOEQ1ODI1QTE0QjAwRDM0NworOjEwOUJEMDAwOEY4NTAwRDA4Rjg5MDBEQ0FDQTkwMEU4OEY4ODAwRDg4MQorOjEwOUJFMDAwOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwMjdCRDAwMjA2OAorOjEwOUJGMDAwQUNBODAwRUNBNEE2MDBENkE0QTAwMEUwQTRBMDAwRTJCQgorOjEwOUMwMDAwMDNFMDAwMDgwMDAwMDAwMDI3QkRGRkUwQUZCMDAwMTAzNworOjEwOUMxMDAwOEY5MDAwMUNBRkIxMDAxNEFGQkYwMDE4OEUxOTAwMDQ2NAorOjEwOUMyMDAwM0MxODA4MDA4RjE4MDA1MDI0MEZGRjgwMDAxOTg5QzBDRAorOjEwOUMzMDAwMDIzODcwMjEzMUNEMDA3RjAxQ0Y2MDI0MDFCQTUwMjE1QworOjEwOUM0MDAwM0MwQjAwMENBRjRDMDAyODAxNEI0MDIxOTUwOTAwRDQ3RgorOjEwOUM1MDAwOTUwNDAwRDY4RTA3MDAwNDMxMzFGRkZGQUY4ODAwRDA5NQorOjEwOUM2MDAwMEUwMDA5MTMwMDA3MjFDMDhFMDYwMDA0OEY4MzAwQzg3MAorOjEwOUM3MDAwMDAwNjI5QzBBRjQ1MDAyMDkwNjQwMDNFMzA4MjAwNDBCRAorOjEwOUM4MDAwMTQ0MDAwMDY4Rjg0MDBEMDM0MUZGRkZGOTQ4MzAwRDY1OQorOjEwOUM5MDAwMzA2MkZGRkYxNDVGMDAwNDAwMDAwMDAwOTQ4NDAwRDZDRgorOjEwOUNBMDAwMEUwMDA4QTgzMDg0RkZGRjhFMDUwMDA0MDIyMDMwMjEzQQorOjEwOUNCMDAwOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwMjQwNDAwMjI1MQorOjEwOUNDMDAwMDAwMDM4MjEwMDA1MjlDMDBBMDAxMjdDMjdCRDAwMjBCMQorOjEwOUNEMDAwMjdCREZGRTBBRkIxMDAxNDMwOTFGRkZGQUZCMDAwMTAxRgorOjEwOUNFMDAwQUZCRjAwMTgxMjIwMDAxRDAwMDA4MDIxOEY4NjAwMUNDRAorOjEwOUNGMDAwOENDNTAwMDAyNDAzMDAwNjAwMDUzRjAyMDAwNTE0MDI4NQorOjEwOUQwMDAwMzBFNDAwMDcxNDgzMDAxNTMwNDUwMEZGMkNBODAwMDYzRQorOjEwOUQxMDAwMTEwMDAwNEQwMDA1NTg4MDNDMEMwODAwMjU4QzU3RDREQworOjEwOUQyMDAwMDE2QzUwMjE4RDQ5MDAwMDAxMjAwMDA4MDAwMDAwMDA1NgorOjEwOUQzMDAwOEY4RTAwRUMyNDBEMDAwMTExQ0QwMDU5MDAwMDAwMDBCMQorOjEwOUQ0MDAwMjYwQjAwMDEzMTcwRkZGRjI0Q0EwMDIwMDIxMTIwMkJENgorOjEwOUQ1MDAwMDE0MDMwMjExNDgwRkZFNkFGOEEwMDFDMDIwMDEwMjE3MAorOjEwOUQ2MDAwOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDhGRgorOjEwOUQ3MDAwMjdCRDAwMjA5Mzg3MDBDRTE0RTAwMDM4MjQwNDAwMTQ4RgorOjEwOUQ4MDAwMEUwMDEzMzgwMDAwMDAwMDhGODYwMDFDMjQwMjAwMDEyMgorOjEwOUQ5MDAwMEEwMDE0N0ZBRjgyMDBFQzhGODkwMEVDMjQwODAwMDJENworOjEwOURBMDAwMTEyODAwM0IyNDA0MDAxMzAwMDAyODIxMDAwMDMwMjE2QQorOjEwOURCMDAwMjQwNzAwMDEwRTAwMTI3QzAwMDAwMDAwMEEwMDE0N0YzRQorOjEwOURDMDAwOEY4NjAwMUM4Rjg3MDBFQzI0MDUwMDAyMTRFNUZGRjY0NworOjEwOUREMDAwMjQwNDAwMTIwRTAwMTJFOTAwMDAwMDAwOEY4NTAwRTg0NAorOjEwOURFMDAwMDA0MDMwMjEyNDA0MDAxMjBFMDAxMjdDMDAwMDM4MjFCMworOjEwOURGMDAwMEEwMDE0N0Y4Rjg2MDAxQzhGODMwMEVDMjQxRjAwMDM1MQorOjEwOUUwMDAwMTQ3RkZGRDAyNjBCMDAwMTBFMDAxMjlCMDAwMDAwMDAwMworOjEwOUUxMDAwOEY4NTAwRTgwMDQwMzAyMTI0MDIwMDAyMjQwNDAwMTA1NQorOjEwOUUyMDAwMDAwMDM4MjFBRjgyMDBFQzBFMDAxMjdDMDAwMDAwMDAyMAorOjEwOUUzMDAwMEEwMDE0N0Y4Rjg2MDAxQzhGOEYwMEVDMjQwNjAwMDIxRQorOjEwOUU0MDAwMTFFNjAwMEIwMDAwMDAwMDI0MDQwMDEwMDAwMDI4MjE4RgorOjEwOUU1MDAwMDAwMDMwMjEwQTAwMTQ5QzI0MDcwMDAxMDAwMDI4MjE4MgorOjEwOUU2MDAwMEUwMDEyN0MwMDAwMzAyMTBBMDAxNDdGOEY4NjAwMUMzNworOjEwOUU3MDAwMEUwMDEzQTUwMDAwMDAwMDE0NDAwMDEyOEY5OTAwMUM3MgorOjEwOUU4MDAwOEY4NjAwMUMyNDAyMDAwMzBBMDAxNDdGQUY4MjAwRUNCRQorOjEwOUU5MDAwMEUwMDE0MzEwMDAwMDAwMDBBMDAxNDdGOEY4NjAwMUNBMQorOjEwOUVBMDAwMEUwMDEyOEIwMDAwMDAwMDI0MDIwMDAyMjQwNDAwMTRBMworOjEwOUVCMDAwMDAwMDI4MjEwMDAwMzAyMTAwMDAzODIxMEEwMDE0QjlEOAorOjEwOUVDMDAwQUY4MjAwRUMwMDQwMzgyMTI0MDQwMDEwOTczODAwMDJEMworOjEwOUVEMDAwMDAwMDI4MjEwRTAwMTI3QzMzMDZGRkZGMEEwMDE0N0ZDOQorOjEwOUVFMDAwOEY4NjAwMUM4Rjg0MDBDODNDMDc3RkZGMzRFNkZGRkY4RAorOjEwOUVGMDAwOEM4NTAwNzQyNDAyMDAwMTAwQTYxODI0QUM4MzAwNzQzMQorOjEwOUYwMDAwMDNFMDAwMDhBMDgyMDAwNTEwQTAwMDM2MkNBMjAwODAwQgorOjEwOUYxMDAwMjc0QTA0MDAzQzBCMDAwNTI0MDkwMDgwMTA0MDAwMDc3QworOjEwOUYyMDAwMjQwODAwODAzMEE2MDAwRjAwQzU0MDIxMkQwMzAwODFDOQorOjEwOUYzMDAwMTQ2MDAwMDIwMEEwNDgyMTI0MDgwMDgwQUY0QjAwMzBDQworOjEwOUY0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEwMDAwMDlGNworOjEwOUY1MDAwMDAwMDM4MjEwMTQwMzAyMThDOEQwMDAwMjRFNzAwMDRFRQorOjEwOUY2MDAwMDBFODYwMkJBQ0NEMDAwMDI0ODQwMDA0MTU4MEZGRkFDQgorOjEwOUY3MDAwMjRDNjAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwOUY4MDAwM0MwRTAwMDYwMTBFMzgyNUFGNDcwMDMwMDAwMDAwMDBFRgorOjEwOUY5MDAwMDAwMDAwMDAwMDAwMDAwMDhGNEYwMDAwMzFFODAwMTBCQQorOjEwOUZBMDAwMTEwMEZGRkQwMDAwMDAwMDhGNDIwMDNDOEY0MzAwM0M4OQorOjEwOUZCMDAwMDA0OUM4MjEwMzIzQzAyQjEzMDAwMDA0MDAwMDAwMDA0NworOjEwOUZDMDAwOEY0QzAwMzgyNTg2MDAwMUFGNDYwMDM4OEY0NzAwM0M5MworOjEwOUZEMDAwMDBBOTI4MjMwMEU5NjgyMUFGNEQwMDNDMTRBMEZGQ0U2MgorOjEwOUZFMDAwMkNBMjAwODAwM0UwMDAwODAwMDAwMDAwMjdCREZGRDA4NQorOjEwOUZGMDAwM0MwMjAwMDJBRkIxMDAxNDNDMTEwMDBDQUY0NTAwMzgyOAorOjEwQTAwMDAwQUZCMzAwMUNBRjQ2MDAzQzAwODA5ODIxQUY0MjAwMzA0NworOjEwQTAxMDAwMjQwNTAwODhBRjQ0MDAyODAzNTEyMDIxQUZCRjAwMjg0OQorOjEwQTAyMDAwQUZCNTAwMjRBRkI0MDAyMEFGQjIwMDE4MEUwMDE0RjE5OQorOjEwQTAzMDAwQUZCMDAwMTAzQzFGMDgwMDhGRkYwMDRDM0MxODA4MDAxOAorOjEwQTA0MDAwOEYxODAwNjQyNDEwRkY4MDAzRjNBODIxMzJCOTAwN0YyOQorOjEwQTA1MDAwMDJCMDc4MjQwMDE4QTBDMDAzM0E3MDIxMDAxODkxNDA4MworOjEwQTA2MDAwMDFEMTIwMjFBRjRGMDAyODBFMDAxNEYxMDI1NDI4MjEwNQorOjEwQTA3MDAwM0MwRDA4MDA4REFEMDA1MDI0MDUwMTIwMDFCMzU4MjE4RQorOjEwQTA4MDAwMzE2QzAwN0YwMTcwNTAyNDAxOUE0ODIxMDEzMTIwMjE1OAorOjEwQTA5MDAwMEUwMDE0RjFBRjRBMDAyODNDMDgwODAwOEQwODAwNTQ1NworOjEwQTBBMDAwM0MwNTA4MDA4Q0E1MDA2NDAxMTMzODIxMzBFNjAwN0ZEMAorOjEwQTBCMDAwMDBGMDE4MjQwMERBMjAyMTAwOTEyMDIxQUY0MzAwMjg2RAorOjEwQTBDMDAwMEUwMDE0RjEwMDA1Mjk0MDNDMDIwODAwOEM0MjAwNThBMworOjEwQTBEMDAwM0MxMDA4MDA4RTEwMDA2MDEyMDAwMDFDMDA1Mzg4MjEwNAorOjEwQTBFMDAwMjQxNUZGODAwQTAwMTU3NDNDMTQwMDBDMzIyNjAwN0ZGMgorOjEwQTBGMDAwMDIzNTE4MjQwMERBMjAyMTAyNDAyODIxQUY0MzAwMjgyRAorOjEwQTEwMDAwMDA5NDIwMjEwRTAwMTRGMTI2MTBGRkMwMTIwMDAwMEY1MQorOjEwQTExMDAwMDIzMjg4MjEyRTA1MDA0MTEwQTBGRkY0MjQxMjEwMDAwNQorOjEwQTEyMDAwMzIyNjAwN0YwMDEwOTE4MDAyMzUxODI0MDBEQTIwMjFBOQorOjEwQTEzMDAwMDI0MDI4MjFBRjQzMDAyODAwOTQyMDIxMEUwMDE0RjE5MgorOjEwQTE0MDAwMDAwMDgwMjExNjAwRkZGMzAyMzI4ODIxM0MwQjA4MDAzQQorOjEwQTE1MDAwOEQ2QjAwNUMyNDBBRkY4MDI0MDUwMDAyMDE3MzQwMjFGRQorOjEwQTE2MDAwMDEwQTQ4MjRBRjQ5MDAyODNDMDQwODAwOTQ4NDAwNjI5NgorOjEwQTE3MDAwMzExMDAwN0YwMjFBODgyMTNDMDcwMDBDMEUwMDBDQUE0NworOjEwQTE4MDAwMDIyNzk4MjEwMDQwMjgyMTAyNjAyMDIxOEZCRjAwMjg0QgorOjEwQTE5MDAwOEZCNTAwMjQ4RkI0MDAyMDhGQjMwMDFDOEZCMjAwMTgzRAorOjEwQTFBMDAwOEZCMTAwMTQ4RkIwMDAxMDBBMDAxNEYxMjdCRDAwMzBFOQorOjEwQTFCMDAwOEY4MzAwMUM4QzYyMDAwNDEwNDAwMDAzMDAwMDAwMDAyQworOjEwQTFDMDAwMDNFMDAwMDgwMDAwMDAwMDhDNjQwMDEwOEM2NTAwMDhBQgorOjA4QTFEMDAwMEEwMDE1MkE4QzY2MDAwQzQwCis6MDhBMUQ4MDAwMDAwMDAwMDAwMDAwMDFCNjQKKzoxMEExRTAwMDAwMDAwMDBGMDAwMDAwMEEwMDAwMDAwODAwMDAwMDA2NDgKKzoxMEExRjAwMDAwMDAwMDA1MDAwMDAwMDUwMDAwMDAwNDAwMDAwMDA0NEQKKzoxMEEyMDAwMDAwMDAwMDAzMDAwMDAwMDMwMDAwMDAwMzAwMDAwMDAzNDIKKzoxMEEyMTAwMDAwMDAwMDAzMDAwMDAwMDIwMDAwMDAwMjAwMDAwMDAyMzUKKzoxMEEyMjAwMDAwMDAwMDAyMDAwMDAwMDIwMDAwMDAwMjAwMDAwMDAyMjYKKzoxMEEyMzAwMDAwMDAwMDAyMDAwMDAwMDIwMDAwMDAwMjAwMDAwMDAyMTYKKzoxMEEyNDAwMDAwMDAwMDAyMDAwMDAwMDIwMDAwMDAwMjAwMDAwMDAyMDYKKzowQ0EyNTAwMDAwMDAwMDAxMDAwMDAwMDEwMDAwMDAwMUZGCis6MDRBMjVDMDAwODAwMEYyNEMzCis6MTBBMjYwMDAwODAwMEQ2QzA4MDAwRkI4MDgwMDEwNjAwODAwMEY0Q0MzCis6MTBBMjcwMDAwODAwMEY4QzA4MDAxMTk0MDgwMDBEODgwODAwMTFCODIwCis6MTBBMjgwMDAwODAwMEREODA4MDAxNTU0MDgwMDE1MUMwODAwMEQ4ODlBCis6MTBBMjkwMDAwODAwMEQ4ODA4MDAwRDg4MDgwMDEyNDAwODAwMTI0MEQwCis6MTBBMkEwMDAwODAwMEQ4ODA4MDAwRDg4MDgwMDE0RTAwODAwMEQ4OERCCis6MTBBMkIwMDAwODAwMEQ4ODA4MDAwRDg4MDgwMDBEODgwODAwMTNCNEY4Cis6MTBBMkMwMDAwODAwMEQ4ODA4MDAwRDg4MDgwMDBEODgwODAwMEQ4ODFBCis6MTBBMkQwMDAwODAwMEQ4ODA4MDAwRDg4MDgwMDBEODgwODAwMEQ4ODBBCis6MTBBMkUwMDAwODAwMEQ4ODA4MDAwRDg4MDgwMDBEODgwODAwMEQ4OEZBCis6MTBBMkYwMDAwODAwMEQ4ODA4MDAwRDg4MDgwMDBGQUMwODAwMEQ4OEM0Cis6MTBBMzAwMDAwODAwMEQ4ODA4MDAxNjc4MDgwMDBEODgwODAwMEQ4OEUwCis6MTBBMzEwMDAwODAwMEQ4ODA4MDAwRDg4MDgwMDBEODgwODAwMEQ4OEM5Cis6MTBBMzIwMDAwODAwMEQ4ODA4MDAwRDg4MDgwMDBEODgwODAwMEQ4OEI5Cis6MTBBMzMwMDAwODAwMEQ4ODA4MDAwRDg4MDgwMDBEODgwODAwMEQ4OEE5Cis6MTBBMzQwMDAwODAwMEQ4ODA4MDAwRDg4MDgwMDBEODgwODAwMTQxMDBBCis6MTBBMzUwMDAwODAwMEQ4ODA4MDAwRDg4MDgwMDEzMzQwODAwMTJBNEI2Cis6MTBBMzYwMDAwODAwMUUyQzA4MDAxRUZDMDgwMDFGMTQwODAwMUYyOEVGCis6MTBBMzcwMDAwODAwMUYzODA4MDAxRTJDMDgwMDFFMkMwODAwMUUyQzg4Cis6MTBBMzgwMDAwODAwMUVEODA4MDAyRTE0MDgwMDJFMUMwODAwMkRFNDFBCis6MTBBMzkwMDAwODAwMkRGMDA4MDAyREZDMDgwMDJFMDgwODAwNTJGNERCCis6MTBBM0EwMDAwODAwNTJCNDA4MDA1MjgwMDgwMDUyNTQwODAwNTIzMDhECis6MDRBM0IwMDAwODAwNTFFQzY0Cis6MENBM0I0MDAwQTAwMEM4NDAwMDAwMDAwMDAwMDAwMDAwMworOjEwQTNDMDAwMDAwMDAwMEQ3Mjc4NzAzNjJFMzIyRTMxMDAwMDAwMDAzMQorOjEwQTNEMDAwMDYwMjAxMDMwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDA3MAorOjEwQTNFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RAorOjEwQTNGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RAorOjEwQTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QworOjEwQTQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQworOjEwQTQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQworOjEwQTQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQworOjEwQTQ0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQworOjEwQTQ1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQworOjEwQTQ2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQworOjEwQTQ3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQworOjEwQTQ4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQworOjEwQTQ5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQworOjEwQTRBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQworOjEwQTRCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QworOjEwQTRDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QworOjEwQTREMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwQTRFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QworOjEwQTRGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QworOjEwQTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QgorOjEwQTUxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQgorOjEwQTUyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQgorOjEwQTUzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQgorOjEwQTU0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQgorOjEwQTU1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQgorOjEwQTU2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQgorOjEwQTU3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQgorOjEwQTU4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQgorOjEwQTU5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQgorOjEwQTVBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQgorOjEwQTVCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QgorOjEwQTVDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QgorOjEwQTVEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QgorOjEwQTVFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwQTVGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QgorOjEwQTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QQorOjEwQTYxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQQorOjEwQTYyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQQorOjEwQTYzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQQorOjEwQTY0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQQorOjEwQTY1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQQorOjEwQTY2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQQorOjEwQTY3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQQorOjEwQTY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQQorOjEwQTY5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQQorOjEwQTZBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQQorOjEwQTZCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QQorOjEwQTZDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QQorOjEwQTZEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QQorOjEwQTZFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QQorOjEwQTZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwQTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwQTcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOQorOjEwQTcyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOQorOjEwQTczMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxOQorOjEwQTc0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOQorOjEwQTc1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGOQorOjEwQTc2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFOQorOjEwQTc3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEOQorOjEwQTc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDOQorOjEwQTc5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCOQorOjEwQTdBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBOQorOjEwQTdCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5OQorOjEwQTdDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OQorOjEwQTdEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3OQorOjEwQTdFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2OQorOjEwQTdGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1OQorOjEwQTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwQTgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwQTgyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOAorOjEwQTgzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxOAorOjEwQTg0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOAorOjEwQTg1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGOAorOjEwQTg2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFOAorOjEwQTg3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEOAorOjEwQTg4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDOAorOjEwQTg5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCOAorOjEwQThBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBOAorOjEwQThCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5OAorOjEwQThDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OAorOjEwQThEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3OAorOjEwQThFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2OAorOjEwQThGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1OAorOjEwQTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NworOjEwQTkxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwQTkyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwQTkzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNworOjEwQTk0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNworOjEwQTk1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNworOjEwQTk2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNworOjEwQTk3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENworOjEwQTk4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNworOjEwQTk5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNworOjEwQTlBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNworOjEwQTlCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NworOjEwQTlDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NworOjEwQTlEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NworOjEwQTlFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NworOjEwQTlGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NworOjEwQUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NgorOjEwQUExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNgorOjEwQUEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwQUEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwQUE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNgorOjEwQUE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNgorOjEwQUE2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNgorOjEwQUE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENgorOjEwQUE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNgorOjEwQUE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNgorOjEwQUFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNgorOjEwQUFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NgorOjEwQUFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NgorOjEwQUFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NgorOjEwQUFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NgorOjEwQUFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NgorOjEwQUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NQorOjEwQUIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNQorOjEwQUIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNQorOjEwQUIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwQUI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwQUI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNQorOjEwQUI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNQorOjEwQUI3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENQorOjEwQUI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNQorOjEwQUI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNQorOjEwQUJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNQorOjEwQUJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NQorOjEwQUJDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NQorOjEwQUJEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NQorOjEwQUJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NQorOjEwQUJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NQorOjEwQUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NAorOjEwQUMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNAorOjEwQUMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNAorOjEwQUMzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNAorOjEwQUM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwQUM1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwQUM2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNAorOjEwQUM3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENAorOjEwQUM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNAorOjEwQUM5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNAorOjEwQUNBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNAorOjEwQUNCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NAorOjEwQUNDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NAorOjEwQUNEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NAorOjEwQUNFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NAorOjEwQUNGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NAorOjEwQUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MworOjEwQUQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMworOjEwQUQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMworOjEwQUQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMworOjEwQUQ0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMworOjEwQUQ1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwQUQ2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwQUQ3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMworOjEwQUQ4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMworOjEwQUQ5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMworOjEwQURBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMworOjEwQURCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MworOjEwQURDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MworOjEwQUREMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MworOjEwQURFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MworOjEwQURGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MworOjEwQUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MgorOjEwQUUxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMgorOjEwQUUyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMgorOjEwQUUzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMgorOjEwQUU0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMgorOjEwQUU1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMgorOjEwQUU2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwQUU3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwQUU4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMgorOjEwQUU5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMgorOjEwQUVBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMgorOjEwQUVCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MgorOjEwQUVDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MgorOjEwQUVEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MgorOjEwQUVFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MgorOjEwQUVGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MgorOjEwQUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MQorOjEwQUYxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMQorOjEwQUYyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMQorOjEwQUYzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMQorOjEwQUY0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorOjEwQUY1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMQorOjEwQUY2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMQorOjEwQUY3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwQUY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwQUY5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMQorOjEwQUZBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMQorOjEwQUZCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MQorOjEwQUZDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MQorOjEwQUZEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MQorOjEwQUZFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MQorOjEwQUZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MQorOjEwQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MAorOjEwQjAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMAorOjEwQjAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMAorOjEwQjAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMAorOjEwQjA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorOjEwQjA1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMAorOjEwQjA2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMAorOjEwQjA3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMAorOjEwQjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwQjA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjEwQjBBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMAorOjEwQjBCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MAorOjEwQjBDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MAorOjEwQjBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MAorOjEwQjBFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MAorOjEwQjBGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MAorOjEwQjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRgorOjEwQjExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRgorOjEwQjEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRgorOjEwQjEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRgorOjEwQjE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRgorOjEwQjE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRgorOjEwQjE2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERgorOjEwQjE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRgorOjEwQjE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRgorOjEwQjE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwQjFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RgorOjEwQjFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RgorOjEwQjFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RgorOjEwQjFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RgorOjEwQjFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RgorOjEwQjFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RgorOjEwQjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRQorOjEwQjIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRQorOjEwQjIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRQorOjEwQjIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRQorOjEwQjI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRQorOjEwQjI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRQorOjEwQjI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERQorOjEwQjI3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRQorOjEwQjI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRQorOjEwQjI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRQorOjEwQjJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwQjJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RQorOjEwQjJDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RQorOjEwQjJEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RQorOjEwQjJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RQorOjEwQjJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RQorOjEwQjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRAorOjEwQjMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRAorOjEwQjMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRAorOjEwQjMzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRAorOjEwQjM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRAorOjEwQjM1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRAorOjEwQjM2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERAorOjEwQjM3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRAorOjEwQjM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRAorOjEwQjM5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRAorOjEwQjNBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RAorOjEwQjNCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwQjNDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RAorOjEwQjNEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RAorOjEwQjNFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RAorOjEwQjNGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RAorOjEwQjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQworOjEwQjQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQworOjEwQjQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQworOjEwQjQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQworOjEwQjQ0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQworOjEwQjQ1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQworOjEwQjQ2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQworOjEwQjQ3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQworOjEwQjQ4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQworOjEwQjQ5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQworOjEwQjRBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QworOjEwQjRCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QworOjEwQjRDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwQjREMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QworOjEwQjRFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QworOjEwQjRGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QworOjEwQjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQgorOjEwQjUxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQgorOjEwQjUyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQgorOjEwQjUzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQgorOjEwQjU0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQgorOjEwQjU1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQgorOjEwQjU2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQgorOjEwQjU3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQgorOjEwQjU4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQgorOjEwQjU5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQgorOjEwQjVBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QgorOjEwQjVCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QgorOjEwQjVDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QgorOjEwQjVEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwQjVFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QgorOjEwQjVGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QgorOjEwQjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQQorOjEwQjYxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQQorOjEwQjYyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQQorOjEwQjYzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQQorOjEwQjY0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQQorOjEwQjY1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQQorOjEwQjY2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQQorOjEwQjY3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQQorOjEwQjY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQQorOjEwQjY5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQQorOjEwQjZBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QQorOjEwQjZCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QQorOjEwQjZDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QQorOjEwQjZEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QQorOjEwQjZFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwQjZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QQorOjEwQjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOQorOjEwQjcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOQorOjEwQjcyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxOQorOjEwQjczMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOQorOjEwQjc0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGOQorOjEwQjc1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFOQorOjEwQjc2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEOQorOjEwQjc3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDOQorOjEwQjc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCOQorOjEwQjc5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBOQorOjEwQjdBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5OQorOjEwQjdCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OQorOjEwQjdDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3OQorOjEwQjdEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2OQorOjEwQjdFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1OQorOjEwQjdGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwQjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwQjgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOAorOjEwQjgyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxOAorOjEwQjgzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOAorOjEwQjg0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGOAorOjEwQjg1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFOAorOjEwQjg2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEOAorOjEwQjg3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDOAorOjEwQjg4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCOAorOjEwQjg5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBOAorOjEwQjhBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5OAorOjEwQjhCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OAorOjEwQjhDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3OAorOjEwQjhEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2OAorOjEwQjhFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1OAorOjEwQjhGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwQjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwQjkxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwQjkyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNworOjEwQjkzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNworOjEwQjk0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNworOjEwQjk1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNworOjEwQjk2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENworOjEwQjk3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNworOjEwQjk4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNworOjEwQjk5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNworOjEwQjlBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NworOjEwQjlCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NworOjEwQjlDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NworOjEwQjlEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NworOjEwQjlFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NworOjEwQjlGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NworOjEwQkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNgorOjEwQkExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwQkEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwQkEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNgorOjEwQkE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNgorOjEwQkE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNgorOjEwQkE2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENgorOjEwQkE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNgorOjEwQkE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNgorOjEwQkE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNgorOjEwQkFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NgorOjEwQkFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NgorOjEwQkFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NgorOjEwQkFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NgorOjEwQkFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NgorOjEwQkFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NgorOjEwQkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNQorOjEwQkIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNQorOjEwQkIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwQkIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwQkI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNQorOjEwQkI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNQorOjEwQkI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENQorOjEwQkI3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNQorOjEwQkI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNQorOjEwQkI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNQorOjEwQkJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NQorOjEwQkJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NQorOjEwQkJDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NQorOjEwQkJEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NQorOjEwQkJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NQorOjEwQkJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NQorOjEwQkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNAorOjEwQkMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNAorOjEwQkMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNAorOjEwQkMzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwQkM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwQkM1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNAorOjEwQkM2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENAorOjEwQkM3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNAorOjEwQkM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNAorOjEwQkM5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNAorOjEwQkNBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NAorOjEwQkNCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NAorOjEwQkNDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NAorOjEwQkNEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NAorOjEwQkNFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NAorOjEwQkNGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NAorOjEwQkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMworOjEwQkQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMworOjEwQkQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMworOjEwQkQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMworOjEwQkQ0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwQkQ1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwQkQ2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMworOjEwQkQ3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMworOjEwQkQ4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMworOjEwQkQ5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMworOjEwQkRBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MworOjEwQkRCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MworOjEwQkRDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MworOjEwQkREMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MworOjEwQkRFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MworOjEwQkRGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MworOjEwQkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMgorOjEwQkUxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMgorOjEwQkUyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMgorOjEwQkUzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMgorOjEwQkU0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMgorOjEwQkU1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwQkU2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwQkU3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMgorOjEwQkU4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMgorOjEwQkU5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMgorOjEwQkVBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MgorOjEwQkVCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MgorOjEwQkVDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MgorOjEwQkVEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MgorOjEwQkVFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MgorOjEwQkVGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MgorOjEwQkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMQorOjEwQkYxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMQorOjEwQkYyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMQorOjEwQkYzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorOjEwQkY0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMQorOjEwQkY1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMQorOjEwQkY2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwQkY3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwQkY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMQorOjEwQkY5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMQorOjEwQkZBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MQorOjEwQkZCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MQorOjEwQkZDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MQorOjEwQkZEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MQorOjEwQkZFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MQorOjEwQkZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MQorOjEwQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMAorOjEwQzAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMAorOjEwQzAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMAorOjEwQzAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorOjEwQzA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMAorOjEwQzA1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMAorOjEwQzA2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMAorOjEwQzA3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwQzA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjEwQzA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMAorOjEwQzBBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MAorOjEwQzBCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MAorOjEwQzBDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MAorOjEwQzBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MAorOjEwQzBFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MAorOjEwQzBGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MAorOjEwQzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRgorOjEwQzExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRgorOjEwQzEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRgorOjEwQzEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRgorOjEwQzE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRgorOjEwQzE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERgorOjEwQzE2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRgorOjEwQzE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRgorOjEwQzE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwQzE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RgorOjEwQzFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RgorOjEwQzFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RgorOjEwQzFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RgorOjEwQzFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RgorOjEwQzFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RgorOjEwQzFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRgorOjEwQzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRQorOjEwQzIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRQorOjEwQzIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRQorOjEwQzIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRQorOjEwQzI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRQorOjEwQzI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERQorOjEwQzI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRQorOjEwQzI3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRQorOjEwQzI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRQorOjEwQzI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwQzJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RQorOjEwQzJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RQorOjEwQzJDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RQorOjEwQzJEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RQorOjEwQzJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RQorOjEwQzJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRQorOjEwQzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRAorOjEwQzMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRAorOjEwQzMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRAorOjEwQzMzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRAorOjEwQzM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRAorOjEwQzM1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERAorOjEwQzM2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRAorOjEwQzM3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRAorOjEwQzM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRAorOjEwQzM5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RAorOjEwQzNBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwQzNCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RAorOjEwQzNDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RAorOjEwQzNEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RAorOjEwQzNFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RAorOjEwQzNGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRAorOjEwQzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQworOjEwQzQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQworOjEwQzQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQworOjEwQzQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQworOjEwQzQ0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQworOjEwQzQ1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQworOjEwQzQ2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQworOjEwQzQ3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQworOjEwQzQ4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQworOjEwQzQ5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QworOjEwQzRBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QworOjEwQzRCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwQzRDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QworOjEwQzREMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QworOjEwQzRFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QworOjEwQzRGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQworOjEwQzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQgorOjEwQzUxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQgorOjEwQzUyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQgorOjEwQzUzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQgorOjEwQzU0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQgorOjEwQzU1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQgorOjEwQzU2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQgorOjEwQzU3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQgorOjEwQzU4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQgorOjEwQzU5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QgorOjEwQzVBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QgorOjEwQzVCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QgorOjEwQzVDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwQzVEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QgorOjEwQzVFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QgorOjEwQzVGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQgorOjEwQzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQQorOjEwQzYxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQQorOjEwQzYyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQQorOjEwQzYzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQQorOjEwQzY0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQQorOjEwQzY1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQQorOjEwQzY2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQQorOjEwQzY3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQQorOjEwQzY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQQorOjEwQzY5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QQorOjEwQzZBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QQorOjEwQzZCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QQorOjEwQzZDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QQorOjEwQzZEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwQzZFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QQorOjEwQzZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQQorOjEwQzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOQorOjEwQzcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxOQorOjEwQzcyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOQorOjEwQzczMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGOQorOjEwQzc0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFOQorOjEwQzc1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEOQorOjEwQzc2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDOQorOjEwQzc3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCOQorOjEwQzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBOQorOjEwQzc5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5OQorOjEwQzdBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OQorOjEwQzdCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3OQorOjEwQzdDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2OQorOjEwQzdEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1OQorOjEwQzdFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwQzdGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOQorOjEwQzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOAorOjEwQzgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxOAorOjEwQzgyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOAorOjEwQzgzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGOAorOjEwQzg0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFOAorOjEwQzg1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEOAorOjEwQzg2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDOAorOjEwQzg3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCOAorOjEwQzg4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBOAorOjEwQzg5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5OAorOjEwQzhBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OAorOjEwQzhCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3OAorOjEwQzhDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2OAorOjEwQzhEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1OAorOjEwQzhFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwQzhGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwQzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwQzkxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNworOjEwQzkyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNworOjEwQzkzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNworOjEwQzk0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNworOjEwQzk1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENworOjEwQzk2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNworOjEwQzk3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNworOjEwQzk4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNworOjEwQzk5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NworOjEwQzlBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NworOjEwQzlCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NworOjEwQzlDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NworOjEwQzlEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NworOjEwQzlFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NworOjEwQzlGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwQ0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwQ0ExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwQ0EyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNgorOjEwQ0EzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNgorOjEwQ0E0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNgorOjEwQ0E1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENgorOjEwQ0E2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNgorOjEwQ0E3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNgorOjEwQ0E4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNgorOjEwQ0E5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NgorOjEwQ0FBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NgorOjEwQ0FCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NgorOjEwQ0FDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NgorOjEwQ0FEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NgorOjEwQ0FFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NgorOjEwQ0FGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNgorOjEwQ0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNQorOjEwQ0IxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwQ0IyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwQ0IzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNQorOjEwQ0I0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNQorOjEwQ0I1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENQorOjEwQ0I2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNQorOjEwQ0I3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNQorOjEwQ0I4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNQorOjEwQ0I5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NQorOjEwQ0JBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NQorOjEwQ0JCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NQorOjEwQ0JDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NQorOjEwQ0JEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NQorOjEwQ0JFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NQorOjEwQ0JGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNQorOjEwQ0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNAorOjEwQ0MxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNAorOjEwQ0MyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwQ0MzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwQ0M0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNAorOjEwQ0M1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENAorOjEwQ0M2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNAorOjEwQ0M3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNAorOjEwQ0M4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNAorOjEwQ0M5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NAorOjEwQ0NBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NAorOjEwQ0NCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NAorOjEwQ0NDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NAorOjEwQ0NEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NAorOjEwQ0NFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NAorOjEwQ0NGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNAorOjEwQ0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMworOjEwQ0QxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMworOjEwQ0QyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMworOjEwQ0QzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwQ0Q0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwQ0Q1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMworOjEwQ0Q2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMworOjEwQ0Q3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMworOjEwQ0Q4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMworOjEwQ0Q5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MworOjEwQ0RBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MworOjEwQ0RCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MworOjEwQ0RDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MworOjEwQ0REMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MworOjEwQ0RFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MworOjEwQ0RGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMworOjEwQ0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMgorOjEwQ0UxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMgorOjEwQ0UyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMgorOjEwQ0UzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMgorOjEwQ0U0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwQ0U1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwQ0U2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMgorOjEwQ0U3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMgorOjEwQ0U4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMgorOjEwQ0U5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MgorOjEwQ0VBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MgorOjEwQ0VCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MgorOjEwQ0VDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MgorOjEwQ0VEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MgorOjEwQ0VFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MgorOjEwQ0VGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMgorOjEwQ0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMQorOjEwQ0YxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMQorOjEwQ0YyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorOjEwQ0YzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMQorOjEwQ0Y0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMQorOjEwQ0Y1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwQ0Y2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwQ0Y3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMQorOjEwQ0Y4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMQorOjEwQ0Y5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MQorOjEwQ0ZBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MQorOjEwQ0ZCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MQorOjEwQ0ZDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MQorOjEwQ0ZEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MQorOjEwQ0ZFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MQorOjEwQ0ZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMQorOjEwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMAorOjEwRDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMAorOjEwRDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorOjEwRDAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMAorOjEwRDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMAorOjEwRDA1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMAorOjEwRDA2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwRDA3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjEwRDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMAorOjEwRDA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MAorOjEwRDBBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MAorOjEwRDBCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MAorOjEwRDBDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MAorOjEwRDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MAorOjEwRDBFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MAorOjEwRDBGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMAorOjEwRDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRgorOjEwRDExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRgorOjEwRDEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRgorOjEwRDEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRgorOjEwRDE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERgorOjEwRDE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRgorOjEwRDE2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRgorOjEwRDE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwRDE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RgorOjEwRDE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RgorOjEwRDFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RgorOjEwRDFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RgorOjEwRDFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RgorOjEwRDFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RgorOjEwRDFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRgorOjEwRDFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRgorOjEwRDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRQorOjEwRDIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRQorOjEwRDIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRQorOjEwRDIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRQorOjEwRDI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERQorOjEwRDI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRQorOjEwRDI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRQorOjEwRDI3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRQorOjEwRDI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwRDI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RQorOjEwRDJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RQorOjEwRDJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RQorOjEwRDJDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RQorOjEwRDJEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RQorOjEwRDJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRQorOjEwRDJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRQorOjEwRDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRAorOjEwRDMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRAorOjEwRDMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRAorOjEwRDMzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRAorOjEwRDM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERAorOjEwRDM1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRAorOjEwRDM2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRAorOjEwRDM3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRAorOjEwRDM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RAorOjEwRDM5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwRDNBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RAorOjEwRDNCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RAorOjEwRDNDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RAorOjEwRDNEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RAorOjEwRDNFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRAorOjEwRDNGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRAorOjEwRDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQworOjEwRDQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQworOjEwRDQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQworOjEwRDQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQworOjEwRDQ0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQworOjEwRDQ1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQworOjEwRDQ2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQworOjEwRDQ3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQworOjEwRDQ4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QworOjEwRDQ5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QworOjEwRDRBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwRDRCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QworOjEwRDRDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QworOjEwRDREMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QworOjEwRDRFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQworOjEwRDRGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQworOjEwRDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQgorOjEwRDUxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQgorOjEwRDUyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQgorOjEwRDUzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQgorOjEwRDU0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQgorOjEwRDU1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQgorOjEwRDU2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQgorOjEwRDU3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQgorOjEwRDU4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QgorOjEwRDU5MDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwQgorOjEwRDVBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QgorOjEwRDVCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMDAwMDAwMDA2MQorOjEwRDVDMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAzMDAwMDAwMDA0OAorOjEwRDVEMDAwMDAwMDAwMEQwMDAwMDAwRDNDMDIwODAwMjQ0MjczMjBGMgorOjEwRDVFMDAwM0MwMzA4MDAyNDYzNzdBQ0FDNDAwMDAwMDA0MzIwMkJEMAorOjEwRDVGMDAwMTQ4MEZGRkQyNDQyMDAwNDNDMUQwODAwMzdCRDdGRkM2MQorOjEwRDYwMDAwMDNBMEYwMjEzQzEwMDgwMDI2MTAzMjEwM0MxQzA4MDAzQQorOjEwRDYxMDAwMjc5QzczMjAwRTAwMTBGRTAwMDAwMDAwMDAwMDAwMEQ4QgorOjEwRDYyMDAwMzBBNUZGRkYzMEM2MDBGRjI3NDMwMTgwOEY0MjAxQjhCRAorOjEwRDYzMDAwMDQ0MEZGRkUyNDAyMDAwMkFDNjQwMDAwQTQ2NTAwMDg2MAorOjEwRDY0MDAwQTA2NjAwMEFBMDYyMDAwQjNDMDIxMDAwQUM2NzAwMTg0NAorOjEwRDY1MDAwMDNFMDAwMDhBRjQyMDFCODNDMDM2MDAwOEM2MjRGRjg2MQorOjEwRDY2MDAwMDQ0MEZGRkUzQzAyMDIwMEFDNjQ0RkMwQUM2MjRGQzRGOQorOjEwRDY3MDAwM0MwMjEwMDAwM0UwMDAwOEFDNjI0RkY4OTQ4MjAwMENGQQorOjEwRDY4MDAwMjQ4NjAwMTQwMEEwMzgyMTAwMDIxMzAyMDAwMjEwODAzQQorOjEwRDY5MDAwMDA4MjQwMjEwMEM4MTAyQjEwNDAwMDU3MDAwMDAwMDBGRAorOjEwRDZBMDAwOTBDMzAwMDAyQzYyMDAwOTUwNDAwMDUxOTBDMjAwMDE1QworOjEwRDZCMDAwMDAwMzEwODAzQzAzMDgwMDI0NjM3MkQwMDA0MzEwMjE1MworOjEwRDZDMDAwOEM0MjAwMDAwMDQwMDAwODAwMDAwMDAwOTBDMzAwMDFGMAorOjEwRDZEMDAwMjQwMjAwMEExNDYyMDAzQTAwMDAwMDAwMDEwNjEwMjMzMAorOjEwRDZFMDAwMkM0MjAwMEExNDQwMDAzNjI0QzYwMDAyOENFMjAwMDBERQorOjEwRDZGMDAwMzQ0MjAxMDBBQ0UyMDAwMDkwQzIwMDAwOTBDMzAwMDE3RgorOjEwRDcwMDAwOTBDNDAwMDI5MEM1MDAwMzAwMDMxQzAwMDAwMjE2MDAzNAorOjEwRDcxMDAwMDA0MzEwMjUwMDA0MjIwMDAwNDQxMDI1MDA0NTEwMjU3OAorOjEwRDcyMDAwMjRDNjAwMDRBQ0UyMDAwNDkwQzIwMDAwOTBDMzAwMDFEMworOjEwRDczMDAwOTBDNDAwMDI5MEM1MDAwMzAwMDIxNjAwMDAwMzFDMDAwNAorOjEwRDc0MDAwMDA0MzEwMjUwMDA0MjIwMDAwNDQxMDI1MDA0NTEwMjU0OAorOjEwRDc1MDAwMjRDNjAwMDQwQTAwMENCOEFDRTIwMDA4OTBDMzAwMDEyMworOjEwRDc2MDAwMjQwMjAwMDQxNDYyMDAxNjI0QzYwMDAyOTBDMjAwMDBDNQorOjEwRDc3MDAwOTBDNDAwMDE4Q0UzMDAwMDAwMDIxMjAwMDA0NDEwMjU1OAorOjEwRDc4MDAwMzQ2MzAwMDQyNEM2MDAwMkFDRTIwMDBDMEEwMDBDQjhBQQorOjEwRDc5MDAwQUNFMzAwMDA5MEMzMDAwMTI0MDIwMDAzMTQ2MjAwMDhGRgorOjEwRDdBMDAwMjRDNjAwMDI4Q0UyMDAwMDkwQzMwMDAwMjRDNjAwMDFFMQorOjEwRDdCMDAwMzQ0MjAwMDhBMEUzMDAxMDBBMDAwQ0I4QUNFMjAwMDBGQworOjEwRDdDMDAwMDNFMDAwMDgyNDAyMDAwMTkwQzMwMDAxMjQwMjAwMDJDQgorOjEwRDdEMDAwMTA2MjAwMDIyNEM0MDAwMjAxMDAyMDIxMEEwMDBDQjhEQgorOjEwRDdFMDAwMDA4MDMwMjEwQTAwMENCODI0QzYwMDAxOTBDMjAwMDE1QworOjEwRDdGMDAwMEEwMDBDQjgwMEMyMzAyMTAzRTAwMDA4MDAwMDEwMjEyQworOjEwRDgwMDAwMjdCREZGRThBRkJGMDAxNEFGQjAwMDEwMEUwMDEzMDIzOQorOjEwRDgxMDAwMDA4MDgwMjE5MzYyMDAwNTI0MDNGRkZFMDIwMDIwMjE4NgorOjEwRDgyMDAwMDA0MzEwMjQ4RkJGMDAxNDhGQjAwMDEwQTM2MjAwMDVDNgorOjEwRDgzMDAwMEEwMDEzMEIyN0JEMDAxODI3QkRGRkU4QUZCMDAwMTA4QQorOjEwRDg0MDAwQUZCRjAwMTQwRTAwMEYzQzAwODA4MDIxOTM2MjAwMDBFNworOjEwRDg1MDAwMjQwMzAwNTAzMDQyMDBGRjE0NDMwMDA0MjQwMjAxMDA1RQorOjEwRDg2MDAwQUY0MjAxODAwQTAwMEQzMDAyMDAyMDIxQUY0MDAxODA0QworOjEwRDg3MDAwMDIwMDIwMjE4RkJGMDAxNDhGQjAwMDEwMEEwMDBGRTdCNAorOjEwRDg4MDAwMjdCRDAwMTgyN0JERkY4MEFGQkUwMDc4QUZCNzAwNzQ3QQorOjEwRDg5MDAwQUZCMjAwNjBBRkJGMDA3Q0FGQjYwMDcwQUZCNTAwNkMzOAorOjEwRDhBMDAwQUZCNDAwNjhBRkIzMDA2NEFGQjEwMDVDQUZCMDAwNTg3NAorOjEwRDhCMDAwOEY1MDAxMjgzQzAyMDgwMDhDNDIzMUEwMjQwM0ZGODBENQorOjEwRDhDMDAwOTM2NTAwM0YwMjAyMTAyMTAwNDMxMDI0QUY0MjAwMjQ2MAorOjEwRDhEMDAwM0MwMjA4MDA4QzQyMzFBMDkzNjQwMDA1MzBCMjAwRkY4NgorOjEwRDhFMDAwMDIwMjEwMjEzMDQyMDA3RjAzNDIxODIxMDAwNDIwMjc0OQorOjEwRDhGMDAwM0MwMjAwMEEwMDYyMTgyMTMwODQwMDAxQUY4MzAwMTQ0QQorOjEwRDkwMDAwMDAwMEYwMjEwMDAwQjgyMTE0ODAwMDUzQUZBMDAwNTBBNworOjEwRDkxMDAwOTM0MzAxMTY5MzQ0MDExMjhGNDUwMTA0MzA2MzAwRkZDNQorOjEwRDkyMDAwM0MwMjAwMDEzMDg0MDBGRjAwQTIyODI0MDM0MzEwMjFBMAorOjEwRDkzMDAwMDM0NDE4MjEyNDU2NDAwMDI0Njc0MDAwMTRBMDAxQ0Q2MAorOjEwRDk0MDAwMjQwMjAwMDE5MzYyMDAwMDMwNDMwMEZGMjQwMjAwMjAwMworOjEwRDk1MDAwMTA2MjAwMDUyNDAyMDA1MDEwNjIwMDA2MDAwMDAwMDA2MgorOjEwRDk2MDAwMEEwMDBENzQwMDAwMDAwMDAwMDAwMDBEMEEwMDBEN0Q4QgorOjEwRDk3MDAwQUZBMDAwMzAzQzFFMDgwMDI3REU3MzZDMEEwMDBEN0Q0RQorOjEwRDk4MDAwQUZBMDAwMzAzQzAyMDgwMDhDNDIwMERDMjQ0MjAwMDFDMQorOjEwRDk5MDAwM0MwMTA4MDBBQzIyMDBEQzBFMDAxMzlGMDAwMDAwMDBEOAorOjEwRDlBMDAwMEEwMDBGMzE4RkJGMDA3QzhGNDIwMTA0M0MwMzAwMjAyRQorOjEwRDlCMDAwOTJEMzAwMEQwMDQzMTAyNDAwMDIyMDJCMDAwNDIxNDBDQworOjEwRDlDMDAwQUZBNDAwMzA4RjQzMDEwNDNDMDIwMDQwMDA2MjE4MjRFMQorOjEwRDlEMDAwMTQ2MDAwMDIzNDg1MDA0MDAwODAyODIxMzI2MjAwMjA1QgorOjEwRDlFMDAwQUZBNTAwMzAxNDQwMDAwMjM0QTYwMDgwMDBBMDMwMjExMgorOjEwRDlGMDAwMTBDMDAwMEJBRkE2MDAzMDkzQzUwMDA4OEY2NzAwNEMyNQorOjEwREEwMDAwMDIwMDIwMjEwMDA1MkIwMDM0QTUwMDgxMzBBNUYwODEwMworOjEwREExMDAwMEUwMDBDOUIzMEM2MDBGRjBBMDAwRjJFMDAwMDAwMDAxNQorOjEwREEyMDAwOTM2MjAwM0UzMDQyMDA0MDEwNDAwMDBGMjQwMjAwMDQ4OAorOjEwREEzMDAwNTY0MjAwMDcyNDAyMDAxMjAyMDAyMDIxMDBFMDI4MjFBMworOjEwREE0MDAwMEUwMDEzRjcwMkMwMzAyMTBBMDAwRjMxOEZCRjAwN0M5NworOjEwREE1MDAwMTY0MjAwMDUwMDAwMDAwMDBFMDAwRDIxMDAwMDIwMjFFQworOjEwREE2MDAwMEEwMDBGMzE4RkJGMDA3Qzk3NDMwMTFBOTZDNDAwMEU0NQorOjEwREE3MDAwOTM2MjAwMzUzMjY1MDAwNDMwNzVGRkZGMDA0NDIwMDRENgorOjEwREE4MDAwQUZBNDAwNTQ4RUQxMDAwNDEwQTAwMDE1OEVENDAwMDg1RAorOjEwREE5MDAwOTM2MjAwM0UzMDQyMDA0MDEwNDAwMDA3MDAwMDAwMDA0QQorOjEwREFBMDAwMEUwMDEzRTAwMjIwMjAyMTEwNDAwMDBEMDAwMDAwMDBCNQorOjEwREFCMDAwMEEwMDBGMkUwMDAwMDAwMDhGNjIwMDQ0MDIyMjEwMjM5MworOjEwREFDMDAwMDQ0MDAxNkEwMDAwMDAwMDhGNjIwMDQ4MDIyMjEwMjMxNworOjEwREFEMDAwMDQ0MTAxNjYyNDA0MDAxNjBBMDAwRTIxOEZDMjAwMDRDRQorOjEwREFFMDAwOEY2MjAwNDgwMjIyMTAyMzA0NDAwMDA4MDAwMDAwMDA1QQorOjEwREFGMDAwM0MwMjA4MDA4QzQyMzEwMDI0NDIwMDAxM0MwMTA4MDAzNQorOjEwREIwMDAwQUMyMjMxMDAwQTAwMEYyMzAwMDAwMDAwOEY2MjAwNDBBOQorOjEwREIxMDAwMDIyMjEwMjMxODQwMDAxMjhGODQwMDE0M0MwMjA4MDBENworOjEwREIyMDAwOEM0MjMxMDAzMjczMDBGQzAwMDBBODIxMjQ0MjAwMDEyNQorOjEwREIzMDAwM0MwMTA4MDBBQzIyMzEwMDhGNjMwMDQwOTQ4MjAxMUMzQworOjEwREI0MDAwMDIyMzE4MjMzMDQyRkZGRjAwNDMxMDJBNTA0MDAwMTBFOAorOjEwREI1MDAwMjQwMjAwMEM4RjYyMDA0MDBBMDAwREYyMDIyMjEwMjMwMgorOjEwREI2MDAwOTQ4MzAxMUM5NzYyMDAzQzAwNDMxMDJCMTA0MDAwMDY3OAorOjEwREI3MDAwMDAwMDAwMDA5NDgyMDExQzAwNTUxMDIzQTQ4MjAxMUNBNworOjEwREI4MDAwMEEwMDBERjcyNDAyMDAwQ0E0ODAwMTFDMjQwMjAwMENFMgorOjEwREI5MDAwQUZBMjAwMzA4RjYyMDA0MDAwNTEyMDIzMTg4MDAwMEQ5QQorOjEwREJBMDAwMDJBNDEwMkExNDQwMDEyNjAwMDAwMDAwMTQ5NTAwMDY2QgorOjEwREJCMDAwMDJBNDEwMjMzQTYyMDAwMTMwNDIwMDAxMTQ0MDAxMjAwNworOjEwREJDMDAwMDAwMDAwMDAwMkE0MTAyMzAyMjQ4ODIxMEEwMDBFMDk4QworOjEwREJEMDAwMzA1NUZGRkYwMDAwMjAyMTMyNjIwMDAyMTA0MDAwMUE4MQorOjEwREJFMDAwMzI2MjAwMTA5MzYyMDAzRTMwNDIwMDQwNTA0MDAwMTEwQgorOjEwREJGMDAwOEZDMjAwMDQwRTAwMTMwMjAyMDAyMDIxMjQwMjAwMTgyQworOjEwREMwMDAwQTM2MjAwM0Y5MzYyMDAwNTI0MDNGRkZFMDIwMDIwMjE2RgorOjEwREMxMDAwMDA0MzEwMjQwRTAwMTMwQkEzNjIwMDA1MjQwNDAwMzlGNgorOjEwREMyMDAwMDAwMDI4MjEwRTAwMTNDOTI0MDYwMDE4MEEwMDBGMzAzNgorOjEwREMzMDAwMjQwMjAwMDEyNDA0MDAxNzAwNDBGODA5MDAwMDAwMDAzRAorOjEwREM0MDAwMEEwMDBGMzAyNDAyMDAwMTEwNDAwMTA4MDAwMDAwMDAwQgorOjEwREM1MDAwOEY2MzAwNEM4RjYyMDA1NDAyODIxMDIzMUM0MDAxMDMyQQorOjEwREM2MDAwMDI4MzEwMjMwNDQyMDAwMTAwNjBBMDIxQUZBNDAwMTgyOQorOjEwREM3MDAwQUZCMTAwMTBBRkI1MDAxNDkzNDIwMTIwOEY2NTAwNDA5MgorOjEwREM4MDAwOTc2MzAwM0MzMDQyMDBGRjAzNDIxMDIxMDA0NDEwMjEwMgorOjEwREM5MDAwOEZBNDAwNTQzMDYzRkZGRjI0NDI0MDAwMDA4MzE4MkIwMAorOjEwRENBMDAwOEZBNDAwMzBBRkEyMDAyMEFGQTUwMDI4MDA4MzIwMjU1QworOjEwRENCMDAwQUZBNDAwMzBBRkE1MDAyNEFGQTAwMDJDQUZCNDAwMzQ1NworOjEwRENDMDAwOTM2MjAwM0UzMDQyMDAwODUwNDAwMDExOEZDMjAwMDBCNQorOjEwRENEMDAwMDJDMDIwMjEyN0E1MDAzODBFMDAwQ0IyQUZBMDAwMzhFQQorOjEwRENFMDAwNTQ0MDAwMEI4RkMyMDAwMDhGQTIwMDM4MzA0MjAxMDA2OAorOjEwRENGMDAwNTA0MDAwMDc4RkMyMDAwMDhGQTMwMDNDOEY2MjAwNjA3RAorOjEwREQwMDAwMDA2MjEwMjMwNDQzMDAwMUFGNjMwMDYwOEZDMjAwMDA3MworOjEwREQxMDAwMDA0MEY4MDkyN0E0MDAxMDhGQTIwMDMwMzA0MjAwMDIxMgorOjEwREQyMDAwNTQ0MDAwMDEzMjczMDBGRTkzNjIwMDNFMzA0MjAwNDBENgorOjEwREQzMDAwMTA0MDAwMzc4RkEyMDAyNDhGNjIwMDU0MTY4MjAwMUExMAorOjEwREQ0MDAwMzI2MjAwMDEyNDAyMDAxNDEyNDIwMDEwMkE0MjAwMTUxRgorOjEwREQ1MDAwMTA0MDAwMDYyNDAyMDAxNjI0MDIwMDBDMTI0MjAwMDdBNAorOjEwREQ2MDAwMzI2MjAwMDEwQTAwMEU3RDAwMDAwMDAwMTI0MjAwMDUzMAorOjEwREQ3MDAwMzI2MjAwMDEwQTAwMEU3RDAwMDAwMDAwMEEwMDBFNzhFOQorOjEwREQ4MDAwMjQxNzAwMEUwQTAwMEU3ODI0MTcwMDEwMEEwMDBFN0NEQgorOjEwREQ5MDAwMjQxNzAwMTI5MzYyMDAyMzI0MDNGRkJEMDA0MzEwMjRDNAorOjEwRERBMDAwQTM2MjAwMjMzMjYyMDAwMTEwNDAwMDE5OEZBMjAwMjRGOAorOjEwRERCMDAwMjQwMjAwMEMxMjQyMDAwRTJBNDIwMDBEMTA0MDAwMDYwMAorOjEwRERDMDAwMjQwMjAwMEUyNDAyMDAwQTEyNDIwMDA3OEZBMjAwMjQzRgorOjEwREREMDAwMEEwMDBFOTUyNDQyMDAwMTEyNDIwMDA4OEZBMjAwMjQ3RQorOjEwRERFMDAwMEEwMDBFOTUyNDQyMDAwMTBBMDAwRTkzMjQxNzAwMDgzMQorOjEwRERGMDAwMjQwMjAwMEUxNkUyMDAwMjI0MTcwMDE2MjQxNzAwMTA1OQorOjEwREUwMDAwOEZBMjAwMjQyNDQyMDAwMUFGQTIwMDI0OEZBMjAwMjQ4QworOjEwREUxMDAwOEZBMzAwMTQ4Rjc2MDA0MDAwNDMxMDIxQUY2MjAwNDBCMgorOjEwREUyMDAwOEY4MjAwMTQ5NDQyMDExQzEwNDAwMDA5MDAwMDAwMDA4MQorOjEwREUzMDAwOEY2MjAwNDg4RjY0MDA0MDk3NjMwMDNDMDA0NDEwMjNDOQorOjEwREU0MDAwMzA2M0ZGRkYwMDQzMTAyQTEwNDAwMDA4OEZBMjAwNTRFNworOjEwREU1MDAwOTM2NDAwMzY4RjYzMDA0MDM0MDJGRkZDMDA4MjEwMDQ5QworOjEwREU2MDAwMDA2MjE4MjFBRjYzMDA0ODhGQTIwMDU0OEZBNjAwMzBEMworOjEwREU3MDAwMDI4MjkwMjEzMEMyMDAwODEwNDAwMDBFMDAwMDAwMDAxNQorOjEwREU4MDAwOEY2MjAwNTgxNjQyMDAwNDMwQzYwMEZGOTc0MjAxMUEwNAorOjEwREU5MDAwNTA0MDAwMDEzNEM2MDAxMDkzQzUwMDA4OEZBNzAwMzQxRAorOjEwREVBMDAwMDIwMDIwMjEwMDA1MkIwMDM0QTUwMDgwMEUwMDBDOUJGMQorOjEwREVCMDAwMzBBNUYwODA4RjYyMDA0MDAwNTYxMDIzMTg0MDAwMUJGMAorOjEwREVDMDAwOEZBMjAwMTgzQzAyMDgwMDhDNDIzMTk4MzA0MjAwMTBBQQorOjEwREVEMDAwMTA0MDAwMEQyNDAyMDAwMTk3NjIwMDY4MTQ0MDAwMEFGRgorOjEwREVFMDAwMjQwMjAwMDE4RjgyMDAxNDk0NDIwMTFDMTQ0MDAwMDY5OQorOjEwREVGMDAwMjQwMjAwMDFBNzYyMDA2ODk3NDIwMDdBMjQ0MjAwNjQ2RAorOjEwREYwMDAwMEEwMDBFRTlBNzYyMDAxMkE3NjIwMDEyMEUwMDEzMDJCNworOjEwREYxMDAwMDIwMDIwMjE5MzYyMDA3RDI0MDMwMDAxMDIwMDIwMjFFMQorOjEwREYyMDAwMzQ0MjAwMDEwQTAwMEVFN0FGQTMwMDUwMTg0MDAwMEE3NworOjEwREYzMDAwMDAwMDAwMDAwRTAwMTMwMjAyMDAyMDIxOTM2MjAwN0QwOQorOjEwREY0MDAwMjQwMzAwMDEwMjAwMjAyMUFGQTMwMDUwMzQ0MjAwMDQ0QQorOjEwREY1MDAwMEUwMDEzMEJBMzYyMDA3RDkzNjIwMDNFMzA0MjAwNDAyRQorOjEwREY2MDAwMTQ0MDAwMEMzMjYyMDAwMTEwNDAwMDBBMDAwMDAwMDA2MgorOjEwREY3MDAwOEY2MzAwNDA4RkMyMDAwNDI0MDQwMDE4MjQ2MzAwMDE1MgorOjEwREY4MDAwMDA0MEY4MDlBRjYzMDA0MDhGQTIwMDMwMEEwMDBGMzA1NAorOjEwREY5MDAwMzA0MjAwMDQ4RjYyMDA1ODEwNTIwMDEwMDAwMDAwMDA1MAorOjEwREZBMDAwOEY2MjAwMTgwMjIyMTAyMzFDNDAwMDA4MjQwNDAwMDE4NAorOjEwREZCMDAwOEY2MjAwMTgxNjIyMDAwOTAwMDAwMDAwOEY2MjAwMUMwQQorOjEwREZDMDAwMDI4MjEwMjMwNDQwMDAwNTAwMDAwMDAwQUY3MjAwNThEOAorOjEwREZEMDAwQUZBNDAwNTBBRjcxMDAxOEFGNzQwMDFDMTJFMDAwMEIyQQorOjEwREZFMDAwOEZBMjAwNTAwRTAwMTMwMjAyMDAyMDIxQTM3NzAwM0ZGMQorOjEwREZGMDAwMEUwMDEzMEIwMjAwMjAyMTAyRTAzMDIxMjQwNDAwMzcyMAorOjEwRTAwMDAwMEUwMDEzQzkwMDAwMjgyMThGQTIwMDUwMTA0MDAwMDMwOQorOjEwRTAxMDAwMDAwMDAwMDAwRTAwMENBOTAyMDAyMDIxMTJBMDAwMDU0MworOjEwRTAyMDAwMDAwMDE4MjE4RkEyMDAzMDMwNDIwMDA0NTA0MDAwMTEzRgorOjEwRTAzMDAwMDA2MDEwMjEyNDAzMDAwMTBBMDAwRjMwMDA2MDEwMjE0RAorOjEwRTA0MDAwMEUwMDEzMDIwMjAwMjAyMTkzNjIwMDdEMDIwMDIwMjFCNQorOjEwRTA1MDAwMzQ0MjAwMDQwRTAwMTMwQkEzNjIwMDdEMEUwMDBDQTlENQorOjEwRTA2MDAwMDIwMDIwMjEwQTAwMEYzMDI0MDIwMDAxQUY0MDAwNDRDQQorOjEwRTA3MDAwMjQwMjAwMDE4RkJGMDA3QzhGQkUwMDc4OEZCNzAwNzQzMAorOjEwRTA4MDAwOEZCNjAwNzA4RkI1MDA2QzhGQjQwMDY4OEZCMzAwNjREQQorOjEwRTA5MDAwOEZCMjAwNjA4RkIxMDA1QzhGQjAwMDU4MDNFMDAwMDhDMQorOjEwRTBBMDAwMjdCRDAwODA4RjQyMDFCODA0NDBGRkZFMjQwMjA4MDAxMworOjEwRTBCMDAwQUY0MjAxQjgwM0UwMDAwODAwMDAwMDAwM0MwMjAwMDg4NQorOjEwRTBDMDAwMDM0MjEwMjE5NDQyMDA0ODMwODRGRkZGMjQ4NDAwMTI1MAorOjEwRTBEMDAwMzA0NUZGRkYxMEEwMDAxNzAwQTQxMDJCMTA0MDAwMTZDMQorOjEwRTBFMDAwMjQwMjAwMDM5MzQyMDEyMDI0MDMwMDFBQTM0MzAxOEI1RQorOjEwRTBGMDAwMzA0MjAwRkYyNDQ2RkZGRThGODIwMDAwMDBBNjE4MkI0RQorOjEwRTEwMDAwMzg2MzAwMDEwMDAyMTM4MjAwNDMxMDI0MTA0MDAwMDUxMAorOjEwRTExMDAwOEY4NDAwMDQzNDgyMDAwMUE3NDYwMTk0MDNFMDAwMDhDNAorOjEwRTEyMDAwQUY4MjAwMDQyNDAyRkZGRTAwODIxMDI0MDNFMDAwMDhGNgorOjEwRTEzMDAwQUY4MjAwMDQyNDAyMDAwMzAzRTAwMDA4QTM0MjAxOEIyNQorOjEwRTE0MDAwMjdCREZGRTBBRkIxMDAxNEFGQjAwMDEwQUZCRjAwMThBMworOjEwRTE1MDAwMzBCMEZGRkYzMEQxRkZGRjhGNDIwMUI4MDQ0MEZGRkUxNworOjEwRTE2MDAwMDAwMDAwMDBBRjQ0MDE4MEFGNDQwMDIwMEUwMDBGNDJDOQorOjEwRTE3MDAwMDIwMDIwMjE4RjgzMDAwMDhGODQwMDA0QTc1MDAxOUFBMQorOjEwRTE4MDAwQTc1MDAxOEVBNzQzMDE5MDhGODMwMDA4MzA4MjgwMDA0MgorOjEwRTE5MDAwQUY0MzAxQThBNzUxMDE4ODEwNDAwMDBFOEY4MjAwMDRGMAorOjEwRTFBMDAwOTM0MjAxMTYzMDQyMDBGQzI0NDIwMDA0MDA1QTEwMjEyMAorOjEwRTFCMDAwOEM0MjQwMDAzMDQyRkZGRjE0NDAwMDA2OEY4MjAwMDQ3MgorOjEwRTFDMDAwM0MwMkZGRkYzNDQyN0ZGRjAwODIxMDI0QUY4MjAwMDQzNAorOjEwRTFEMDAwOEY4MjAwMDQyNDAzQkZGRjAwNDMxMDI0QTc0MjAxQTYzRQorOjEwRTFFMDAwOTc0MzAxMEM4RjQyMDEwNDAwMDMxQzAwMzA0MkZGRkZFMworOjEwRTFGMDAwMDA2MjE4MjVBRjQzMDFBQzNDMDIxMDAwQUY0MjAxQjhFOQorOjEwRTIwMDAwOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDgxQQorOjEwRTIxMDAwMjdCRDAwMjA4RjQ3MDA3MDkzNDIwMTEyOEY4MzAwMDBCQQorOjEwRTIyMDAwMjdCREZGRjAzMDQyMDBGRjAwMDIyODgyMzA2MjAxMDA2QgorOjEwRTIzMDAwMDAwMDMwMjExMDQwMDA0MzI0QTQwMDAzMzA2MjQwMDA1RAorOjEwRTI0MDAwMTA0MDAwMTAzMDYyMjAwMDAwMDQxMDgwMDA1QTEwMjE5RAorOjEwRTI1MDAwOEM0MzQwMDAyNEE0MDAwNDAwMDQxMDgwQUZBMzAwMDBGRAorOjEwRTI2MDAwMDA1QTEwMjE4QzQyNDAwMEFGQTIwMDA0OTM0MjAxMTZENAorOjEwRTI3MDAwMzA0MjAwRkMwMDVBMTAyMThDNDI0MDAwMEEwMDBGQzBCRQorOjEwRTI4MDAwQUZBMjAwMDgxMDQwMDAyRjAwMDAzMDIxMDAwNDEwODBEMQorOjEwRTI5MDAwMDA1QTEwMjE4QzQzNDAwMDI0QTQwMDA0MDAwNDEwODA4NAorOjEwRTJBMDAwQUZBMzAwMDAwMDVBMTAyMThDNDI0MDAwQUZBMDAwMDgyQworOjEwRTJCMDAwQUZBMjAwMDQ4RkE4MDAwODAwMDAzMDIxMDAwMDIwMjEzOAorOjEwRTJDMDAwMjQwQTAwMDgzQzA5MDgwMDI1MjkwMTAwMDNBNDEwMjFBNAorOjEwRTJEMDAwMTQ4QTAwMDMwMDA0MkEwMDExMDAwMDBBMDAwMDAwMDA1NAorOjEwRTJFMDAwOTA0MjAwMDAyNDg0MDAwMTJDODMwMDBDMDBBMjEwMjEyNQorOjEwRTJGMDAwMDAwMjEwODAwMDQ5MTAyMThDNDIwMDAwMTQ2MEZGRjNERQorOjEwRTMwMDAwMDBDMjMwMjYzQzA0MDgwMDhDODQzMTA0OEY0MjAwNzAyNworOjEwRTMxMDAwMkM4MzAwMjAxMDYwMDAwOTAwNDczODIzM0MwMzA4MDBDQworOjEwRTMyMDAwMjQ2MzMxMDgwMDA0MTA4MDAwNDMxMDIxMjQ4MzAwMDE3RAorOjEwRTMzMDAwQUM0NzAwMDAzQzAxMDgwMEFDMjMzMTA0QUY4NjAwMDg2NAorOjEwRTM0MDAwMjQwNjAwMDEwMEMwMTAyMTAzRTAwMDA4MjdCRDAwMTBEMgorOjEwRTM1MDAwM0MwMjA4MDA4QzQyMDAzODI3QkRGRkQwQUZCNTAwMjQzNgorOjEwRTM2MDAwQUZCNDAwMjBBRkIxMDAxNEFGQkYwMDI4QUZCMzAwMUNBMgorOjEwRTM3MDAwQUZCMjAwMThBRkIwMDAxMDAwMDA4ODIxM0MxNTA4MDBCMworOjEwRTM4MDAwMjZCNTAwMzgxNDQwMDAwMjI0NTRGRkZGMDAwMEEwMjFFRAorOjEwRTM5MDAwOTc0MjAxMEU4Rjg0MDAwMDMwNDJGRkZGMzA4MzQwMDAxRgorOjEwRTNBMDAwMTA2MDAwMEEyNDUyMDAwNDNDMDIwMDIwMDA4MjEwMjQ2NQorOjEwRTNCMDAwNTA0MDAwMDczMDgyODAwMDhGODIwMDA0MjQwM0JGRkY5QQorOjEwRTNDMDAwMDA4MzE4MjQwQTAwMTAxMDM0NDIxMDAwMzA4MjgwMDBBQworOjEwRTNEMDAwMTA0MDAwMEEzQzAyMDAyMDAwODIxMDI0MTA0MDAwMDc3OAorOjEwRTNFMDAwOEY4MjAwMDQzQzAzRkZGRjM0NjM3RkZGMDA4MzE4MjQwNworOjEwRTNGMDAwMzQ0MjgwMDBBRjgyMDAwNEFGODMwMDAwMEUwMDBGOTgwQgorOjEwRTQwMDAwMDAwMDAwMDAxNDQwMDAwNzAwMDAwMDAwOTc0MzAxMUVCOAorOjEwRTQxMDAwOTc0MjAxMUMzMDYzRkZGRjAwMDIxNDAwMDA2MjE4MjVDMAorOjEwRTQyMDAwQUY4MzAwMDg5NzQyMDEwQzhGNDM0MDAwMzA0NUZGRkY0NworOjEwRTQzMDAwMzQwMkZGRkYxNDYyMDAwMzAwMDAwMDAwMEEwMDEwMjhFRAorOjEwRTQ0MDAwMjQxMTAwMjA4RjQyNDAwMDMwNDIwMTAwNTQ0MDAwMDE1RQorOjEwRTQ1MDAwMjQxMTAwMTA4Rjg0MDAwMDMwODIxMDAwNTA0MDAwMTRGRQorOjEwRTQ2MDAwMzYzMTAwMDEzMDgyMDAyMDE0NDAwMDBCM0MwMjEwMDBDNQorOjEwRTQ3MDAwMDA4MjEwMjQ1MDQwMDAwRTM2MzEwMDAxM0MwMzBFMDA5MworOjEwRTQ4MDAwM0MwMjBERkYwMDgzMTgyNDM0NDJGRkZGMDA0MzEwMkI5MQorOjEwRTQ5MDAwNTA0MDAwMDczNjMxMDAwMTNDMDIwODAwOEM0MjAwMkMzRAorOjEwRTRBMDAwMjQ0MjAwMDEzQzAxMDgwMEFDMjIwMDJDMzYzMTAwMDU1QQorOjEwRTRCMDAwM0MwNjA4MDA4Q0M2MDAzNDU0QzAwMDIzOEY4NTAwMDA0MQorOjEwRTRDMDAwOEY4MjAwMDQzMDQyNDAwMDU0NDAwMDFGOEY4NTAwMDBCRQorOjEwRTREMDAwM0MwMjFGMDEwMDgyMTAyNDNDMDMxMDAwNTQ0MzAwMUEyOAorOjEwRTRFMDAwOEY4NTAwMDAzMEEyMDIwMDE0NDAwMDE3OEY4NTAwMDBDNQorOjEwRTRGMDAwMzI1MEZGRkYzNjMxMDAwMjhGNDIwMUI4MDQ0MEZGRkU2OAorOjEwRTUwMDAwMDAwMDAwMDBBRjQwMDE4MDAyMDAyMDIxMEUwMDBGNDJGOQorOjEwRTUxMDAwQUY0MDAwMjA4RjgzMDAwNDI0MDJCRkZGQTc1MDAxOUE2MAorOjEwRTUyMDAwMDA2MjE4MjQ4RjgyMDAwMEE3NTAwMThFQTc1MTAxODgzNQorOjEwRTUzMDAwQTc0MzAxQTZBNzQyMDE5MDNDMDIxMDAwQUY0MjAxQjhEOAorOjEwRTU0MDAwMEEwMDEwRjUwMDAwMTAyMTNDMDIxMDAwMDBBMjEwMjQ2NworOjEwRTU1MDAwMTA0MDAwM0EwMDAwMDAwMDEwQzAwMDBGMDAwMDAwMDA1MgorOjEwRTU2MDAwMzBBMjAxMDAxMDQwMDAwQzNDMDMwMjAwM0MwMjBGMDBFRQorOjEwRTU3MDAwMDBBMjEwMjQxMDQzMDAwODAwMDAwMDAwOEY4MjAwMDg1MQorOjEwRTU4MDAwMDA1NDEwMjQwMDU1MTAyMTkwNDIwMDA0MjQ0MjAwMDQzRAorOjEwRTU5MDAwMEEwMDEwOUYwMDAyMjFDMDAwMDAwMDAwMDAwNTE2MDJDMgorOjEwRTVBMDAwMzA1MDAwMEYzQTAzMDAwMjJFNDIwM0VGMzg0MjAwMDFDMAorOjEwRTVCMDAwMkM2MzAwMDEwMDYyMTgyNDE0NjAwMDczMjQwMjAwMDExRgorOjEwRTVDMDAwM0MwMzA4MDA4QzYzMDBEMDJFMDYwMDBDMzg2MjAwMDE2QQorOjEwRTVEMDAwMkM0MjAwMDEwMDQ2MTAyNDE0NDAwMDE1MDAxMDIxQzBGOAorOjEwRTVFMDAwMjYwMkZGRkMyQzQyMDAwNDU0NDAwMDExMDAwMDIwMjFCMAorOjEwRTVGMDAwMzg2MjAwMDIyQzQyMDAwMTAwNDYxMDI0MTA0MDAwMDM0MworOjEwRTYwMDAwMDAwNTEyNDIwQTAwMTA5RjAwMDAyMDIxMDAxMDE4MkI2NAorOjEwRTYxMDAwMDA0MzEwMjQ1MDQwMDAwNjAwMTAyMUMwMDAwMDIwMjFCQgorOjEwRTYyMDAwMzI0NUZGRkYwRTAwMEY2MzMyMjZGRkZCMDAxMDIxQzBCMgorOjEwRTYzMDAwMzI0NUZGRkYwQTAwMTBGMjM2MjYwMDAyOEY0MjQwMDBFQQorOjEwRTY0MDAwM0MwMzA4MDA4QzYzMDAyNDMwNDIwMTAwMTA0MDAwNDY2NworOjEwRTY1MDAwMzA2MjAwMDEzMjIyMDAwNDMwNzAwMDBEMTQ0MDAwMDJDQworOjEwRTY2MDAwMjQxMzAwMDQyNDEzMDAwMjAwMDUxMkMyMzg0MjAwMDFFMgorOjEwRTY3MDAwMkU0MzAzRUYzMDQyMDAwMTM4NjMwMDAxMDA0MzEwMjVCMAorOjEwRTY4MDAwMTA0MDAwMDMzMjMxRkZGQjI0MDJGRkZCMDIwMjgwMjQxMgorOjEwRTY5MDAwMTBDMDAwMTgzMjAyMDAwMTMwQTIwMTAwMTA0MDAwMTUyNQorOjEwRTZBMDAwMzIwMjAwMDEzQzAyMEYwMDAwQTIxMDI0M0MwMzAyMDBEMQorOjEwRTZCMDAwMTA0MzAwMEY4RjgyMDAwODI0MDNGRkZFMDIwMzgwMjQxMgorOjEwRTZDMDAwMDA1NDEwMjQwMDU1MTAyMTkwNDIwMDA0MDIzMzMwMjVEQworOjEwRTZEMDAwMjQ0MjAwMDQxMjAwMDAwMjAwMDIyMUMwMzIyNkZGRkY4MworOjEwRTZFMDAwMEUwMDBGNjMzMjQ1RkZGRjEyMDAwMDI3MDAwMDEwMjFDQgorOjEwRTZGMDAwMzIwMjAwMDExMDQwMDAwRDMyMDIwMDA0MjQwMjAwMDEyOQorOjEwRTcwMDAwMTIwMjAwMDIwMjMzMzAyNTMyMjZGRkZGMDAwMDIwMjFEMgorOjEwRTcxMDAwMEUwMDBGNjMzMjQ1RkZGRjI0MDJGRkZFMDIwMjgwMjQzOQorOjEwRTcyMDAwMTIwMDAwMTkwMDAwMTAyMTMyMDIwMDA0MTA0MDAwMTZFRgorOjEwRTczMDAwMjQwMjAwMDEyNDAyMDAwNDEyMDIwMDAyMDIzMzMwMjVFOAorOjEwRTc0MDAwMzIyNkZGRkYzMjQ1RkZGRjBFMDAwRjYzMjQwNDAxMDA1NQorOjEwRTc1MDAwMjQwMkZGRkIwMjAyODAyNDEyMDAwMDBCMDAwMDEwMjFBMworOjEwRTc2MDAwMEEwMDEwRjUyNDAyMDAwMTEwNDAwMDA3MDAwMDEwMjFFQgorOjEwRTc3MDAwMzI0NUZGRkYzNjI2MDAwMjAwMDAyMDIxMEUwMDBGNjMwNQorOjEwRTc4MDAwMDAwMDAwMDAwMDAwMTAyMThGQkYwMDI4OEZCNTAwMjQ3QQorOjEwRTc5MDAwOEZCNDAwMjA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQwQgorOjEwRTdBMDAwOEZCMDAwMTAwM0UwMDAwODI3QkQwMDMwMjdCREZGRDA2OAorOjEwRTdCMDAwQUZCMDAwMTAzQzA0NjAwQ0FGQkYwMDJDQUZCNjAwMjgxNworOjEwRTdDMDAwQUZCNTAwMjRBRkI0MDAyMEFGQjMwMDFDQUZCMjAwMTg0NworOjEwRTdEMDAwQUZCMTAwMTQ4QzgyNTAwMDI0MDNGRjdGM0MxQTgwMDBFQworOjEwRTdFMDAwMDA0MzEwMjQzNDQyMzgwQ0FDODI1MDAwMjQwMjAwMDM1MQorOjEwRTdGMDAwM0MxMDYwMDBBRjQyMDAwODhFMDIwODA4M0MxQjgwMDhGNQorOjEwRTgwMDAwM0MwMTA4MDBBQzIwMDAyMDMwNDJGRkYwMzg0MjAwMTBFQworOjEwRTgxMDAwMkM0MjAwMDEwRTAwMUI4NUFGODIwMDE4M0MwNEZGRkY1NAorOjEwRTgyMDAwM0MwMjA0MDAzNDgzMDgwNjM0NDIwMDBDQUUwMjE5NDg0RQorOjEwRTgzMDAwQUUwMzE5NEMzQzA1NjAxNjhFMDIxOTgwOENBMzAwMDBCMworOjEwRTg0MDAwMzQ0MjAyMDAwMDY0MTgyNEFFMDIxOTgwM0MwMjUzNTM4MworOjEwRTg1MDAwMTQ2MjAwMDMzNEE0N0MwMDhDQTIwMDA0MDA1MDIwMjEyOAorOjEwRTg2MDAwOEM4MjAwN0M4QzgzMDA3OEFGODIwMDEwQUY4MzAwMEMxOAorOjEwRTg3MDAwOEY1NTAwMDAzMkEyMDAwMzEwNDBGRkZEMzJBMjAwMDFCQworOjEwRTg4MDAwMTA0MDAxM0QzMkEyMDAwMjhGNDIwMTI4QUY0MjAwMjAxOQorOjEwRTg5MDAwOEY0MjAxMDQ4RjQzMDEwMEFGODIwMDAwMEUwMDBGM0M0NQorOjEwRThBMDAwQUY4MzAwMDQzQzAyMDgwMDhDNDIwMEMwMTA0MDAwMDgwNgorOjEwRThCMDAwOEY4NDAwMDAzQzAyMDgwMDhDNDIwMEM0MjQ0MjAwMDEwNgorOjEwRThDMDAwM0MwMTA4MDBBQzIyMDBDNDBBMDAxMjY5MDAwMDAwMDBFQworOjEwRThEMDAwM0MwMjAwMTAwMDgyMTAyNDE0NDAwMTBDOEY4MzAwMDRCRAorOjEwRThFMDAwM0MwMjA4MDA4QzQyMDAyMDNDMDMwODAwOEM2MzAwMzg4NgorOjEwRThGMDAwMDAwMDg4MjEyNDQyMDAwMTNDMDEwODAwQUMyMjAwMjBENQorOjEwRTkwMDAwM0MxNjA4MDAyNkQ2MDAzODE0NjAwMDAyMjQ3NEZGRkY2RAorOjEwRTkxMDAwMDAwMEEwMjE5NzQyMDEwRTMwODM0MDAwMzA0MkZGRkZFQgorOjEwRTkyMDAwMTA2MDAwMEEyNDUyMDAwNDNDMDIwMDIwMDA4MjEwMjRERgorOjEwRTkzMDAwNTA0MDAwMDczMDgyODAwMDhGODIwMDA0MjQwM0JGRkYxNAorOjEwRTk0MDAwMDA4MzE4MjQwQTAwMTE3MDM0NDIxMDAwMzA4MjgwMDBDNQorOjEwRTk1MDAwMTA0MDAwMEEzQzAyMDAyMDAwODIxMDI0MTA0MDAwMDdGMgorOjEwRTk2MDAwOEY4MjAwMDQzQzAzRkZGRjM0NjM3RkZGMDA4MzE4MjQ4MQorOjEwRTk3MDAwMzQ0MjgwMDBBRjgyMDAwNEFGODMwMDAwMEUwMDBGOTg4NQorOjEwRTk4MDAwMDAwMDAwMDAxNDQwMDAwNzAwMDAwMDAwOTc0MzAxMUUzMworOjEwRTk5MDAwOTc0MjAxMUMzMDYzRkZGRjAwMDIxNDAwMDA2MjE4MjUzQgorOjEwRTlBMDAwQUY4MzAwMDg5NzQyMDEwQzhGNDM0MDAwMzA0NUZGRkZDMgorOjEwRTlCMDAwMzQwMkZGRkYxNDYyMDAwMzAwMDAwMDAwMEEwMDExODgwNworOjEwRTlDMDAwMjQxMTAwMjA4RjQyNDAwMDMwNDIwMTAwNTQ0MDAwMDFEOQorOjEwRTlEMDAwMjQxMTAwMTA4Rjg0MDAwMDMwODIxMDAwNTA0MDAwMTQ3OQorOjEwRTlFMDAwMzYzMTAwMDEzMDgyMDAyMDE0NDAwMDBCM0MwMjEwMDA0MAorOjEwRTlGMDAwMDA4MjEwMjQ1MDQwMDAwRTM2MzEwMDAxM0MwMzBFMDAwRQorOjEwRUEwMDAwM0MwMjBERkYwMDgzMTgyNDM0NDJGRkZGMDA0MzEwMkIwQgorOjEwRUExMDAwNTA0MDAwMDczNjMxMDAwMTNDMDIwODAwOEM0MjAwMkNCNworOjEwRUEyMDAwMjQ0MjAwMDEzQzAxMDgwMEFDMjIwMDJDMzYzMTAwMDVENAorOjEwRUEzMDAwM0MwNjA4MDA4Q0M2MDAzNDU0QzAwMDIzOEY4NTAwMDBCQgorOjEwRUE0MDAwOEY4MjAwMDQzMDQyNDAwMDU0NDAwMDFGOEY4NTAwMDAzOAorOjEwRUE1MDAwM0MwMjFGMDEwMDgyMTAyNDNDMDMxMDAwNTQ0MzAwMUFBMgorOjEwRUE2MDAwOEY4NTAwMDAzMEEyMDIwMDE0NDAwMDE3OEY4NTAwMDAzRgorOjEwRUE3MDAwMzI1MEZGRkYzNjMxMDAwMjhGNDIwMUI4MDQ0MEZGRkVFMgorOjEwRUE4MDAwMDAwMDAwMDBBRjQwMDE4MDAyMDAyMDIxMEUwMDBGNDI3NAorOjEwRUE5MDAwQUY0MDAwMjA4RjgzMDAwNDI0MDJCRkZGQTc1MDAxOUFEQgorOjEwRUFBMDAwMDA2MjE4MjQ4RjgyMDAwMEE3NTAwMThFQTc1MTAxODhCMAorOjEwRUFCMDAwQTc0MzAxQTZBNzQyMDE5MDNDMDIxMDAwQUY0MjAxQjg1MworOjEwRUFDMDAwMEEwMDEyNjcwMDAwMTAyMTNDMDIxMDAwMDBBMjEwMjQ2RQorOjEwRUFEMDAwMTA0MDAwM0EwMDAwMDAwMDEwQzAwMDBGMDAwMDAwMDBDRAorOjEwRUFFMDAwMzBBMjAxMDAxMDQwMDAwQzNDMDMwMjAwM0MwMjBGMDA2OQorOjEwRUFGMDAwMDBBMjEwMjQxMDQzMDAwODAwMDAwMDAwOEY4MjAwMDhDQworOjEwRUIwMDAwMDA1NDEwMjQwMDU2MTAyMTkwNDIwMDA0MjQ0MjAwMDRCNgorOjEwRUIxMDAwMEEwMDExRkYwMDAyMjFDMDAwMDAwMDAwMDAwNTE2MDJEQgorOjEwRUIyMDAwMzA1MDAwMEYzQTAzMDAwMjJFNDIwM0VGMzg0MjAwMDEzQQorOjEwRUIzMDAwMkM2MzAwMDEwMDYyMTgyNDE0NjAwMDg1MjQwMjAwMDE4NworOjEwRUI0MDAwM0MwMzA4MDA4QzYzMDBEMDJFMDYwMDBDMzg2MjAwMDFFNAorOjEwRUI1MDAwMkM0MjAwMDEwMDQ2MTAyNDE0NDAwMDE1MDAxMDIxQzA3MgorOjEwRUI2MDAwMjYwMkZGRkMyQzQyMDAwNDU0NDAwMDExMDAwMDIwMjEyQQorOjEwRUI3MDAwMzg2MjAwMDIyQzQyMDAwMTAwNDYxMDI0NTA0MDAwMDM3RAorOjEwRUI4MDAwMDAwNTEyNDIwQTAwMTFGRjAwMDAyMDIxMDAxMDE4MkI3RQorOjEwRUI5MDAwMDA0MzEwMjQ1MDQwMDAwNjAwMTAyMUMwMDAwMDIwMjEzNgorOjEwRUJBMDAwMzI0NUZGRkYwRTAwMEY2MzMyMjZGRkZCMDAxMDIxQzAyRAorOjEwRUJCMDAwMzI0NUZGRkYwQTAwMTI1MjM2MjYwMDAyOEY0MjQwMDAwMworOjEwRUJDMDAwM0MwMzA4MDA4QzYzMDAyNDMwNDIwMTAwMTA0MDAwNDZFMgorOjEwRUJEMDAwMzA2MjAwMDEzMjIyMDAwNDMwNzAwMDBEMTQ0MDAwMDI0NworOjEwRUJFMDAwMjQxMzAwMDQyNDEzMDAwMjAwMDUxMkMyMzg0MjAwMDE1RAorOjEwRUJGMDAwMkU0MzAzRUYzMDQyMDAwMTM4NjMwMDAxMDA0MzEwMjUyQgorOjEwRUMwMDAwMTA0MDAwMDMzMjMxRkZGQjI0MDJGRkZCMDIwMjgwMjQ4QworOjEwRUMxMDAwMTBDMDAwMTgzMjAyMDAwMTMwQTIwMTAwMTA0MDAwMTU5RgorOjEwRUMyMDAwMzIwMjAwMDEzQzAyMEYwMDAwQTIxMDI0M0MwMzAyMDA0QgorOjEwRUMzMDAwMTA0MzAwMEY4RjgyMDAwODI0MDNGRkZFMDIwMzgwMjQ4QworOjEwRUM0MDAwMDA1NDEwMjQwMDU2MTAyMTkwNDIwMDA0MDIzMzMwMjU1NQorOjEwRUM1MDAwMjQ0MjAwMDQxMjAwMDAwMjAwMDIyMUMwMzIyNkZGRkZGRAorOjEwRUM2MDAwMEUwMDBGNjMzMjQ1RkZGRjEyMDAwMDM5MDAwMDEwMjEzMworOjEwRUM3MDAwMzIwMjAwMDExMDQwMDAwRDMyMDIwMDA0MjQwMjAwMDFBMworOjEwRUM4MDAwMTIwMjAwMDIwMjMzMzAyNTMyMjZGRkZGMDAwMDIwMjE0RAorOjEwRUM5MDAwMEUwMDBGNjMzMjQ1RkZGRjI0MDJGRkZFMDIwMjgwMjRCNAorOjEwRUNBMDAwMTIwMDAwMkIwMDAwMTAyMTMyMDIwMDA0MTA0MDAwMjg0NgorOjEwRUNCMDAwMjQwMjAwMDEyNDAyMDAwNDEyMDIwMDAyMDIzMzMwMjU2MworOjEwRUNDMDAwMzIyNkZGRkYzMjQ1RkZGRjBFMDAwRjYzMjQwNDAxMDBEMAorOjEwRUNEMDAwMjQwMkZGRkIwMjAyODAyNDEyMDAwMDFEMDAwMDEwMjEwQworOjEwRUNFMDAwMEEwMDEyNjcyNDAyMDAwMTUwNDAwMDE5MDAwMDEwMjFBMAorOjEwRUNGMDAwMzI0NUZGRkYzNjI2MDAwMjAwMDAyMDIxMEUwMDBGNjM4MAorOjEwRUQwMDAwMDAwMDAwMDAwQTAwMTI2NzAwMDAxMDIxMjQwMkJGRkY2QgorOjEwRUQxMDAwMDA2MjEwMjQxMDQwMDAwODAwMDAwMDAwMjQwMjg3RkY1OQorOjEwRUQyMDAwMDA2MjEwMjQxNDQwMDAwODNDMDIwMDYwMDA4MjEwMjQ5RAorOjEwRUQzMDAwMTA0MDAwMDUwMDAwMDAwMDBFMDAwRDM0MDAwMDAwMDAyRgorOjEwRUQ0MDAwMEEwMDEyNjcwMDAwMDAwMDBFMDAxMkM3MDAwMDAwMDA1OQorOjEwRUQ1MDAwMTA0MDAwMDYzQzAyNDAwMDhGNDMwMTI0M0MwMjYwMjAyQQorOjEwRUQ2MDAwQUM0MzAwMTQwMDAwMDAwMDNDMDI0MDAwQUY0MjAxMzhGOAorOjEwRUQ3MDAwMDAwMDAwMDAzMkEyMDAwMjEwNDBGRUJEMDAwMDAwMDBCMgorOjEwRUQ4MDAwOEY0MjAxNDAzQzA0NDAwMEFGNDIwMDIwOEY0MzAxNDhDNQorOjEwRUQ5MDAwM0MwMjcwMDAwMDYyMTgyNDEwNjQwMDQyMDAwMDAwMDA3MQorOjEwRURBMDAwMDA4MzEwMkIxNDQwMDAwNjNDMDI2MDAwM0MwMjIwMDA0RgorOjEwRURCMDAwMTA2MjAwMDczQzAyNDAwMDBBMDAxMkMzMDAwMDAwMDA3RAorOjEwRURDMDAwMTA2MjAwM0MzQzAyNDAwMDBBMDAxMkMzMDAwMDAwMDAzOAorOjEwRUREMDAwOEY0NTAxNDA4RjQ2MDE0NDhGNDIwMTQ4MDAwMjE0MDJEMgorOjEwRURFMDAwMzA0MzAwRkYyNDAyMDAwNDE0NjIwMDBBMjc0NDAxODAxQgorOjEwRURGMDAwOEY0MjAxQjgwNDQwRkZGRTI0MDIwMDFDQUM4NTAwMDBENQorOjEwRUUwMDAwQTA4MjAwMEIzQzAyMTAwMEFGNDIwMUI4MEEwMDEyQzNGRQorOjEwRUUxMDAwM0MwMjQwMDAyNDAyMDAwOTE0NjIwMDEyMDAwNjE2MDI5RgorOjEwRUUyMDAwMDAwMjI5QzBBRjQ1MDAyMDhGNDIwMUI4MDQ0MEZGRkUxOAorOjEwRUUzMDAwMjQwMjAwMDEyNDAzMDAwM0FGNDUwMTgwQTM0MzAxOEI5QQorOjEwRUU0MDAwQTc0MDAxOEVBNzQwMDE5QUE3NDAwMTkwQUY0MDAxQThCQQorOjEwRUU1MDAwQTc0MjAxODhBNzQyMDFBNkFGNDAwMUFDM0MwMjEwMDBDNgorOjEwRUU2MDAwQUY0MjAxQjg4RjQyMDFCODA0NDBGRkZFMDAwMDAwMDAyRAorOjEwRUU3MDAwQUM4NTAwMDA4RjQyMDE0ODAwMDIxNDAyQTQ4MjAwMDgwMQorOjEwRUU4MDAwMjQwMjAwMDJBMDgyMDAwQjhGNDIwMTQ4QTQ4MjAwMTBERAorOjEwRUU5MDAwM0MwMjEwMDBBQzg2MDAyNEFGNDIwMUI4MEEwMDEyQzM0NQorOjEwRUVBMDAwM0MwMjQwMDAwRTAwMTMxMDAwMDAwMDAwMEEwMDEyQzNENAorOjEwRUVCMDAwM0MwMjQwMDAwRTAwMUJCQTAwMDAwMDAwM0MwMjQwMDA3MworOjEwRUVDMDAwQUY0MjAxNzgwMDAwMDAwMDBBMDAxMTJGMDAwMDAwMDA4RQorOjEwRUVEMDAwOEY0MjAxMDAzMDQyMDAzRTE0NDAwMDExMjQwMjAwMDEyNAorOjEwRUVFMDAwQUY0MDAwNDg4RjQyMDEwMDMwNDIwN0MwMTA0MDAwMDU4QgorOjEwRUVGMDAwMDAwMDAwMDBBRjQwMDA0Q0FGNDAwMDUwMDNFMDAwMDhBRAorOjEwRUYwMDAwMjQwMjAwMDFBRjQwMDA1NEFGNDAwMDQwOEY0MjAxMDA5NgorOjEwRUYxMDAwMzA0MjM4MDA1NDQwMDAwMUFGNDAwMDQ0MjQwMjAwMDE1OAorOjEwRUYyMDAwMDNFMDAwMDgwMDAwMDAwMDhGNDIwMUI4MDQ0MEZGRkUyQgorOjEwRUYzMDAwMjQwMjAwMDFBRjQ0MDE4MEFGNDAwMTg0QTc0NTAxODg0RAorOjEwRUY0MDAwQTM0MjAxOEEyNDAyMDAwMkEzNDIwMThCOTc0MjAxNEE5NAorOjEwRUY1MDAwMTRDMDAwMDRBNzQyMDE5MEFGNDAwMUE0MEEwMDEyRUZDMAorOjEwRUY2MDAwM0MwMjEwMDA4RjQyMDE0NEFGNDIwMUE0M0MwMjEwMDA1OQorOjEwRUY3MDAwQUY0MDAxQTgwM0UwMDAwOEFGNDIwMUI4OEY0MjAxQjhEQQorOjEwRUY4MDAwMDQ0MEZGRkUyNDAyMDAwMkFGNDQwMTgwQUY0NDAxODQyQworOjEwRUY5MDAwQTc0NTAxODhBMzQyMDE4QUEzNDIwMThCOTc0MjAxNEFGNworOjEwRUZBMDAwQTc0MjAxOTBBRjQwMDFBNDhGNDIwMTQ0QUY0MjAxQThBMworOjEwRUZCMDAwM0MwMjEwMDAwM0UwMDAwOEFGNDIwMUI4M0MwMjkwMDBBMAorOjEwRUZDMDAwMzQ0MjAwMDEwMDgyMjAyNUFGNDQwMDIwOEY0MjAwMjBGRgorOjEwRUZEMDAwMDQ0MEZGRkUwMDAwMDAwMDAzRTAwMDA4MDAwMDAwMDAwNQorOjEwRUZFMDAwM0MwMjgwMDAzNDQyMDAwMTAwODIyMDI1MDNFMDAwMDgzQQorOjEwRUZGMDAwQUY0NDAwMjAyN0JERkZFOEFGQkYwMDE0QUZCMDAwMTA0MgorOjEwRjAwMDAwOEY1MDAxNDA5MzQzMDE0OTkzNDIwMTQ4OTM0NDAxNDg4MgorOjEwRjAxMDAwMzA2MzAwRkYzMDQyMDBGRjAwMDIxMjAwMDA2MjI4MjUyQQorOjEwRjAyMDAwMjQwMjAwMTkxMDYyMDA3NjMwODQwMDgwMjg2MjAwMUFFMQorOjEwRjAzMDAwMTA0MDAwMUMyNDAyMDAyMDI0MDIwMDA4MTA2MjAwNzcwNworOjEwRjA0MDAwMjg2MjAwMDkxMDQwMDAwRTI0MDIwMDBCMjQwMjAwMDE3NworOjEwRjA1MDAwMTA2MjAwMzQyODYyMDAwMjUwNDAwMDA1MjQwMjAwMDZCRAorOjEwRjA2MDAwNTA2MDAwMzQwMjAwMjAyMTBBMDAxMzlBMDAwMDAwMDBDMgorOjEwRjA3MDAwMTA2MjAwMzAwMjAwMjAyMTBBMDAxMzlBMDAwMDAwMDBGNAorOjEwRjA4MDAwMTA2MjAwM0IyODYyMDAwQzUwNDAwMDAyMjQwMjAwMEU3NworOjEwRjA5MDAwMjQwMjAwMDkxMDYyMDA1NjAyMDAyMDIxMEEwMDEzOUE3RgorOjEwRjBBMDAwMDAwMDAwMDAxMDYyMDA1NjI4NjIwMDIxMTA0MDAwMEY4RQorOjEwRjBCMDAwMjQwMjAwMzgyNDAyMDAxQzEwNjIwMDU4Mjg2MjAwMUQzRgorOjEwRjBDMDAwMTA0MDAwMDYyNDAyMDAxRjI0MDIwMDFCMTA2MjAwNENBNgorOjEwRjBEMDAwMDAwMDAwMDAwQTAwMTM5QTAwMDAwMDAwMTA2MjAwNEFCRAorOjEwRjBFMDAwMDIwMDIwMjEwQTAwMTM5QTAwMDAwMDAwMTA2MjAwNDU2RgorOjEwRjBGMDAwMjg2MjAwMzkxMDQwMDAwNzI0MDIwMDgwMjQ2MkZGQ0IwMAorOjEwRjEwMDAwMkM0MjAwMDIxMDQwMDA0NTAyMDAyMDIxMEEwMDEzOTYwNAorOjEwRjExMDAwMDAwMDMwMjExMDYyMDAwOTAwMDAwMDAwMEEwMDEzOUE2QworOjEwRjEyMDAwMDAwMDAwMDAxNDgwMDAzRDAyMDAyMDIxMEEwMDEzOTAxRQorOjEwRjEzMDAwOEZCRjAwMTQwQTAwMTM5NjI0MDYwMDAxOEY0MjAxQjgwNQorOjEwRjE0MDAwMDQ0MEZGRkUyNDAyMDAwMkEzNDIwMThCQTc0NTAxODg3MAorOjEwRjE1MDAwOTc0MjAxNEFBNzQyMDE5MDhGNDIwMTQ0QTc0MjAxOTI3RgorOjEwRjE2MDAwM0MwMjEwMDBBRjQyMDFCODBBMDAxMzlDOEZCRjAwMTQ4QworOjEwRjE3MDAwOTc0MjAxNEExNDQwMDAyOTAwMDAwMDAwOTM2MjAwMDVGNAorOjEwRjE4MDAwMzA0MjAwMDQxNDQwMDAyNTAwMDAwMDAwMEUwMDEzMDI2RAorOjEwRjE5MDAwMDIwMDIwMjE5MzYyMDAwNTAyMDAyMDIxMzQ0MjAwMDQ3NQorOjEwRjFBMDAwMEUwMDEzMEJBMzYyMDAwNTkzNjIwMDA1MzA0MjAwMDRCOQorOjEwRjFCMDAwMTQ0MDAwMDIwMDAwMDAwMDAwMDAwMDBEOTM2MjAwMDBGNworOjEwRjFDMDAwMjQwMzAwMjAzMDQyMDBGRjE0NDMwMDE0MDAwMDAwMDAxQworOjEwRjFEMDAwOEY0MjAxQjgwNDQwRkZGRTI0MDIwMDA1QUY1MDAxODBCOQorOjEwRjFFMDAwQTM0MjAxOEIzQzAyMTAwMDBBMDAxMzlBQUY0MjAxQjhGRgorOjEwRjFGMDAwOEZCRjAwMTQ4RkIwMDAxMDBBMDAxMkYyMjdCRDAwMTg1NAorOjEwRjIwMDAwMDAwMDAwMEQwMjAwMjAyMTAwMDAzMDIxOEZCRjAwMTRGQgorOjEwRjIxMDAwOEZCMDAwMTAwQTAwMTJERDI3QkQwMDE4MDAwMDAwMEQ5RAorOjEwRjIyMDAwOEZCRjAwMTQ4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMTg0NgorOjEwRjIzMDAwMjdCREZGRThBRkJGMDAxMDBFMDAwRjNDMDAwMDAwMDAyQworOjEwRjI0MDAwQUY0MDAxODA4RkJGMDAxMDAwMDAyMDIxMEEwMDBGRTdBRgorOjEwRjI1MDAwMjdCRDAwMTgzMDg0RkZGRjMwQTVGRkZGMDAwMDE4MjFGNAorOjEwRjI2MDAwMTA4MDAwMDcwMDAwMDAwMDMwODIwMDAxMTA0MDAwMDIwMgorOjEwRjI3MDAwMDAwNDIwNDIwMDY1MTgyMTBBMDAxM0FCMDAwNTI4NDA1NQorOjEwRjI4MDAwMDNFMDAwMDgwMDYwMTAyMTEwQzAwMDA2MjRDNkZGRkY0NAorOjEwRjI5MDAwOENBMjAwMDAyNEE1MDAwNEFDODIwMDAwMEEwMDEzQjU3MworOjEwRjJBMDAwMjQ4NDAwMDQwM0UwMDAwODAwMDAwMDAwMTBBMDAwMDgwRgorOjEwRjJCMDAwMjRBM0ZGRkZBQzg2MDAwMDAwMDAwMDAwMDAwMDAwMDA1NworOjEwRjJDMDAwMjQwMkZGRkYyNDYzRkZGRjE0NjJGRkZBMjQ4NDAwMDQ3QQorOjEwRjJEMDAwMDNFMDAwMDgwMDAwMDAwMDMwODMwMEZGMzBBNTAwRkZCRAorOjEwRjJFMDAwMzBDNjAwRkYyNzQ3MDE4MDhGNDIwMUI4MDQ0MEZGRkU2RgorOjEwRjJGMDAwMDAwMDAwMDA4RjQyMDEyODM0NjM0MDAwQUNFMjAwMDBBRgorOjEwRjMwMDAwMjQwMjAwMDFBQ0UwMDAwNEE0RTMwMDA4QTBFMjAwMEEyQgorOjEwRjMxMDAwMjQwMjAwMDJBMEUyMDAwQjNDMDIxMDAwQTRFNTAwMTA1MQorOjEwRjMyMDAwQUNFMDAwMjRBQ0UwMDAyOEE0RTYwMDEyMDNFMDAwMDhGMgorOjEwRjMzMDAwQUY0MjAxQjgyN0JERkZFOEFGQkYwMDEwOTM2MjAwM0ZBNgorOjEwRjM0MDAwMjQwMzAwMTIzMDQyMDBGRjEwNDMwMDBEMDA4MDMwMjFFMgorOjEwRjM1MDAwOEY2MjAwNDQwMDgyMTAyMzA0NDAwMDBBOEZCRjAwMTAxNworOjEwRjM2MDAwOEY2MjAwNDgyNDA0MDAzOTAwMDAyODIxMDBDMjEwMjNDNQorOjEwRjM3MDAwMDQ0MTAwMDQyNDA2MDAxMjBFMDAxM0M5MDAwMDAwMDAxRQorOjEwRjM4MDAwOEZCRjAwMTAyNDAyMDAwMTAzRTAwMDA4MjdCRDAwMTgxMQorOjEwRjM5MDAwMjdCREZGQzhBRkIyMDAzMEFGQjEwMDJDQUZCRjAwMzQwMworOjEwRjNBMDAwQUZCMDAwMjg5MEM1MDAwRDAwODA5MDIxMzBBNDAwMTA1RgorOjEwRjNCMDAwMTA4MDAwMEIwMEMwODgyMThDQzMwMDA4OEY2MjAwNTRBRAorOjEwRjNDMDAwMTA2MjAwMDczMEEyMDAwNTE0NDAwMEI1MjQwNDAwMDFCQgorOjEwRjNEMDAwMEUwMDBEMjEwMDAwMjAyMTBBMDAxNEJCMDA0MDIwMjE1NgorOjEwRjNFMDAwMzBBMjAwMDUxMDQwMDAwOTMwQTMwMDEyMTA4MDAwQUNDQworOjEwRjNGMDAwMjQwNDAwMDE4RTIzMDAwODhGNjIwMDU0MTQ2MjAwQTlDNworOjEwRjQwMDAwOEZCRjAwMzQwQTAwMTQyQzI0MDQwMDM4MjQwMjAwMTI5OAorOjEwRjQxMDAwMTQ2MjAwQTMyNDA0MDAwMTAyMjAyMDIxMjdBNTAwMTA2QgorOjEwRjQyMDAwMEUwMDBDQjJBRkEwMDAxMDEwNDAwMDExMDI0MDIwMjFDRAorOjEwRjQzMDAwOEUyMjAwMDhBRjYyMDA4NEFGNjAwMDQwMEUwMDEzMDIwRAorOjEwRjQ0MDAwMDAwMDAwMDA5MzYyMDA3RDAyNDAyMDIxMzQ0MjAwMjAzMQorOjEwRjQ1MDAwMEUwMDEzMEJBMzYyMDA3RDBFMDAwQ0E5MDI0MDIwMjFCOAorOjEwRjQ2MDAwMjQwNDAwMzgyNDA1MDA4RDBBMDAxNEI4MjQwNjAwMTI3NAorOjEwRjQ3MDAwOTM2MjAwM0UzMDQyMDAwODEwNDAwMDBGOEZBMjAwMTAzRgorOjEwRjQ4MDAwMzA0MjAxMDAxMDQwMDAwNzhGQTMwMDE0OEY2MjAwNjAxQgorOjEwRjQ5MDAwMDA2MjEwMjMwNDQzMDAwOEFGNjMwMDYwMEEwMDE0NDFCNworOjEwRjRBMDAwMDAwMDAwMDBBRjYwMDA2MDkzNjIwMDNFMjQwM0ZGRjc5RAorOjEwRjRCMDAwMDA0MzEwMjRBMzYyMDAzRTkzNjIwMDNFMzA0MjAwMDhFNQorOjEwRjRDMDAwMTQ0MDAwMDIyNDA2MDAwMzAwMDAzMDIxOTM2MjAwMzQzRgorOjEwRjREMDAwOTM2MzAwMzc4RjY0MDA4NDMwNDIwMEZGMzA2MzAwRkY4NQorOjEwRjRFMDAwMDA2NjE4MjEwMDAzMTg4MDAwNDMyODIxMDBBNDIwMkI2NworOjEwRjRGMDAwMTA4MDAwMEIwMDAwMDAwMDk3NjMwMDNDOEY2MjAwODRDNgorOjEwRjUwMDAwMzA2M0ZGRkYwMDQ1MTAyMzAwNjIxODJCMTQ2MDAwMDRENQorOjEwRjUxMDAwMDAwMDAwMDA4RjYyMDA4NDBBMDAxNDVEMDA0NTgwMjMxMworOjEwRjUyMDAwOTc2MjAwM0MzMDUwRkZGRjhGQTMwMDEwMzA2MjAwMDQ1MAorOjEwRjUzMDAwMTA0MDAwMDQwMDA2Mjg4MDhGQTIwMDFDMEEwMDE0NjVGOQorOjEwRjU0MDAwMDIwMjEwMkIyRTAyMDIxODUwNDAwMDAzMjQwMjAyMTg1RgorOjEwRjU1MDAwMEEwMDE0NkUwMjA1MTAyMzMwNjMwMDA0MTA2MDAwMDNEQgorOjEwRjU2MDAwMDA0NTEwMjM4RkEyMDAxQzAwNDUxMDIzMDA0MDgwMjE3RAorOjEwRjU3MDAwMkM0MjAwODA1NDQwMDAwMTI0MTAwMDgwMEUwMDEzMDIzMQorOjEwRjU4MDAwMDI0MDIwMjEyNDAyMDAwMUFGNjIwMDBDOTM2MjAwM0U4MQorOjEwRjU5MDAwMDAxMDIwNDAzMDQyMDA3RkEzNjIwMDNFOEUyMjAwMDQxMworOjEwRjVBMDAwMjQ0MjAwMDFBRjYyMDA0MEE3NzAwMDNDOEY2MjAwNTAwRgorOjEwRjVCMDAwOTYyMzAwMEUwMDQzMTAyMUFGNjIwMDU4OEY2MjAwNTA2NgorOjEwRjVDMDAwMDA0NDEwMjFBRjYyMDA1QzhFMjIwMDA0QUY2MjAwMTg3QworOjEwRjVEMDAwOEUyMjAwMDhBRjYyMDAxQzhGQTIwMDEwMzA0MjAwMDg4QgorOjEwRjVFMDAwNTQ0MDAwMEE5M0EyMDAyMEEzNjAwMDM2OTM2MjAwMzZDNAorOjEwRjVGMDAwMjQwM0ZGREZBMzYyMDAzNTkzNjIwMDNFMDA0MzEwMjQyMgorOjEwRjYwMDAwQTM2MjAwM0UwQTAwMTQ5ODhFMjIwMDA4QTM2MjAwMzUwRgorOjEwRjYxMDAwOEUyMjAwMDhBRjYyMDA0QzhGNjIwMDI0OEY2MzAwNDA4RQorOjEwRjYyMDAwMDA0MzEwMjFBRjYyMDA0ODkzNjIwMDAwMjQwMzAwNTBBMQorOjEwRjYzMDAwMzA0MjAwRkYxNDQzMDAxMjI0MDNGRjgwM0MwMjA4MDAwNAorOjEwRjY0MDAwOEM0MjMxQTAwMjQyMTAyMTAwNDMxMDI0QUY0MjAwMjgxNgorOjEwRjY1MDAwM0MwMjA4MDA4QzQyMzFBMDhFMjQwMDA4M0MwMzAwMENDMAorOjEwRjY2MDAwMDI0MjEwMjEzMDQyMDA3RjAzNDIxMDIxMDA0MzEwMjE0QQorOjEwRjY3MDAwQUM0NDAwRDg4RTIzMDAwOEFGODIwMDE0QUM0MzAwRENGOQorOjEwRjY4MDAwMEUwMDEzMEIwMjQwMjAyMTI0MDQwMDM4MDAwMDI4MjEyMgorOjEwRjY5MDAwMjQwNjAwMEEwRTAwMTNDOTAwMDAwMDAwMjQwNDAwMDEyMworOjEwRjZBMDAwOEZCRjAwMzQ4RkIyMDAzMDhGQjEwMDJDOEZCMDAwMjg5NAorOjEwRjZCMDAwMDA4MDEwMjEwM0UwMDAwODI3QkQwMDM4MjdCREZGRjhCNworOjEwRjZDMDAwMjc0MjAxODBBRkEyMDAwMDMwOEEwMEZGOEY0MjAxQjhCQworOjEwRjZEMDAwMDQ0MEZGRkUwMDAwMDAwMDhGNDYwMTI4M0MwMjA4MDBBNQorOjEwRjZFMDAwOEM0MjMxQTAyNDAzRkY4MEFGODYwMDQ4MDBDMjEwMjE2NQorOjEwRjZGMDAwMDA0MzEwMjRBRjQyMDAyNDNDMDIwODAwOEM0MjMxQTA5OQorOjEwRjcwMDAwOEZBOTAwMDA4RkE4MDAwMDAwQzIxMDIxMzA0MjAwN0ZBNgorOjEwRjcxMDAwMDM0MjE4MjEzQzAyMDAwQTAwNjIxODIxOTQ2NDAwRDRCQworOjEwRjcyMDAwOEZBNzAwMDA4RkE1MDAwMDI0MDIwMDAyQUY4MzAwMTQwMQorOjEwRjczMDAwQTBBMjAwMEI4RkEzMDAwMDM1NDI2MDAwMzA4NEZGRkZDMQorOjEwRjc0MDAwQTRFMjAwMDgzQzAyMTAwMEFEMjYwMDAwQUQwNDAwMDQ1NQorOjEwRjc1MDAwQUM2MDAwMjQyN0JEMDAwOEFGNDIwMUI4MDNFMDAwMDhGOAorOjEwRjc2MDAwMjQwMjAwMDE4Rjg4MDAzQzkzODIwMDI4OEY4MzAwMTRCQworOjEwRjc3MDAwM0MwNzA4MDAyNEU3Nzc3ODAwNDgxMDIzMzA0MjAwRkY1OAorOjEwRjc4MDAwMzA0OTAwRkMyNDY1MDA4ODhGODYwMDQwMzA0QTAwMDMyMQorOjEwRjc5MDAwMTEyMDAwMDkwMDAwMjAyMTI0ODIwMDA0OENBMzAwMDAxNQorOjEwRjdBMDAwMzA0NDAwRkYwMDg5MTAyQUFDRTMwMDAwMjRBNTAwMDRDNworOjEwRjdCMDAwMTQ0MEZGRjkyNEU3MDAwNDExNDAwMDA5MDAwMDIwMjE1MworOjEwRjdDMDAwMjQ4MjAwMDE5MEEzMDAwMDMwNDQwMEZGMDA4QTEwMkIyNworOjEwRjdEMDAwQTBFMzAwMDAyNEE1MDAwMTE0NDBGRkY5MjRFNzAwMDE4NAorOjEwRjdFMDAwMzBDMjAwMDMxNDQwMDAwNDhGODUwMDNDMzEwMjAwMDM0NgorOjEwRjdGMDAwMTA0MDAwMEQwMDAwMDAwMDEwQTAwMDA5MDAwMDIwMjFCMgorOjEwRjgwMDAwMjQ4MjAwMDE5MEMzMDAwMDMwNDQwMEZGMDA4NTEwMkJDQgorOjEwRjgxMDAwQTBFMzAwMDAyNEM2MDAwMTE0NDBGRkY5MjRFNzAwMDEyMgorOjEwRjgyMDAwMDNFMDAwMDgwMDAwMDAwMDExMDBGRkZEMDAwMDIwMjE5RgorOjEwRjgzMDAwMjQ4MjAwMDQ4Q0MzMDAwMDMwNDQwMEZGMDA4ODEwMkI5OQorOjEwRjg0MDAwQUNFMzAwMDAyNEM2MDAwNDE0NDBGRkY5MjRFNzAwMDRFMAorOjEwRjg1MDAwMDNFMDAwMDgwMDAwMDAwMDhGODMwMDNDOTM4MjAwMjgzMgorOjEwRjg2MDAwMzBDNjAwRkYzMEE1MDBGRjAwNDMxMDIzMzA0MzAwRkZFNworOjEwRjg3MDAwOEY4MjAwMTQwMDgwMzgyMTAwNDMxMDIxMTRDMDAwMDI0MAorOjEwRjg4MDAwMjQ0ODAwODgwMDgzMzgyMTMwRTIwMDAzMTQ0MDAwMDUzQQorOjEwRjg5MDAwMzBBMjAwMDMxNDQwMDAwMzMwNjIwMDAzMTA0MDAwMEQ0QQorOjEwRjhBMDAwMDAwMDAwMDAxMEEwMDAwOTAwMDAyMDIxMjQ4MjAwMDFCNworOjEwRjhCMDAwOTBFMzAwMDAzMDQ0MDBGRjAwODUxMDJCQTEwMzAwMDBGRQorOjEwRjhDMDAwMjRFNzAwMDExNDQwRkZGOTI1MDgwMDAxMDNFMDAwMDhDNworOjEwRjhEMDAwMDAwMDAwMDAxMEEwRkZGRDAwMDAyMDIxMjQ4MjAwMDQ5MQorOjEwRjhFMDAwOENFMzAwMDAzMDQ0MDBGRjAwODUxMDJCQUQwMzAwMDBDNgorOjEwRjhGMDAwMjRFNzAwMDQxNDQwRkZGOTI1MDgwMDA0MDNFMDAwMDg5MQorOjEwRjkwMDAwMDAwMDAwMDAwMDgwNDgyMTMwQUFGRkZGMzBDNjAwRkY0MQorOjEwRjkxMDAwMzBFN0ZGRkYyNzQ4MDE4MDhGNDIwMUI4MDQ0MEZGRkUxNworOjEwRjkyMDAwOEY4MjAwNDhBRDAyMDAwMDhGNDIwMTI0QUQwMjAwMDQyNgorOjEwRjkzMDAwOEQyMjAwMjBBNTA3MDAwOEExMDIwMDBBMjQwMjAwMTY1QgorOjEwRjk0MDAwQTEwMjAwMEI5MzQzMDEyMDhEMjIwMDA4OEQyNDAwMDRBNgorOjEwRjk1MDAwMzA2MzAwRkYwMDQzMTAyMTk3ODMwMDNBMDA0NDEwMjFEOAorOjEwRjk2MDAwOEQyNTAwMjQwMDQzMTAyMzNDMDMwODAwOEM2MzMxQTA0NAorOjEwRjk3MDAwOEY4NDAwMTRBNTAyMDAwQzI0NjMwMEU4MjQwMkZGRkYxQQorOjEwRjk4MDAwQTUwQTAwMEVBNTAzMDAxMEE1MDYwMDEyQUQwNTAwMTg3QgorOjEwRjk5MDAwQUQwMjAwMjQ5NDgyMDExNDI0MDNGRkY3MzA0MkZGRkZEQworOjEwRjlBMDAwQUQwMjAwMjg4QzgyMDExOEFEMDIwMDJDM0MwMjEwMDAzMAorOjEwRjlCMDAwQUQwMDAwMzBBRjQyMDFCODhEMjIwMDIwMDA0MzEwMjQ3QQorOjEwRjlDMDAwMDNFMDAwMDhBRDIyMDAyMDhGODIwMDE0MzBFN0ZGRkYyMworOjEwRjlEMDAwMDA4MDQ4MjE5MDQyMDBEMzMwQTVGRkZGMzBDNjAwRkZEMQorOjEwRjlFMDAwMDAwMjExMDAzMDQyMEYwMDAwRTIzODI1Mjc0ODAxODA1NAorOjEwRjlGMDAwOEY0MjAxQjgwNDQwRkZGRThGODIwMDQ4QUQwMjAwMDAzNAorOjEwRkEwMDAwOEY0MjAxMjRBRDAyMDAwNDhEMjIwMDIwQTUwNzAwMDhDQQorOjEwRkExMDAwQTEwMjAwMEEyNDAyMDAxN0ExMDIwMDBCOTM0MzAxMjA1NworOjEwRkEyMDAwOEQyMjAwMDg4RDI0MDAwNDMwNjMwMEZGMDA0MzEwMjE2NAorOjEwRkEzMDAwOTc4MzAwM0EwMDQ0MTAyMThGODQwMDE0MDA0MzEwMjM2MAorOjEwRkE0MDAwM0MwMzA4MDA4QzYzMzFBMEE1MDIwMDBDQTUwNTAwMEU0NAorOjEwRkE1MDAwMjQ2MzAwRThBNTAzMDAxMEE1MDYwMDEyQUQwMDAwMTQwMQorOjEwRkE2MDAwOEQyMjAwMjRBRDAyMDAxODhDODIwMDVDQUQwMjAwMUNDNworOjEwRkE3MDAwOEM4MjAwNThBRDAyMDAyMDI0MDJGRkZGQUQwMjAwMjQ1QQorOjEwRkE4MDAwOTQ4MjAwRTYzMDQyRkZGRkFEMDIwMDI4OTQ4MjAwNjBCRAorOjEwRkE5MDAwOTQ4MzAwQkUzMDQyN0ZGRjMwNjNGRkZGMDAwMjEyMDBGQworOjEwRkFBMDAwMDA0MzEwMjFBRDAyMDAyQzNDMDIxMDAwQUQwMDAwMzBEQworOjEwRkFCMDAwQUY0MjAxQjg5NDgyMDBCRTI0MDNGRkY3MDBBMjEwMjFEOAorOjEwRkFDMDAwQTQ4MjAwQkU4RDIyMDAyMDAwNDMxMDI0MDNFMDAwMDgyMQorOjEwRkFEMDAwQUQyMjAwMjAyNzQzMDE4MDhGNDIwMUI4MDQ0MEZGRkU4MQorOjEwRkFFMDAwOEY4MjAwMjQ5NDQyMDAxQzMwNDJGRkZGMDAwMjExQzBBQworOjEwRkFGMDAwQUM2MjAwMDAyNDAyMDAxOUEwNjIwMDBCM0MwMjEwMDA1RQorOjEwRkIwMDAwQUM2MDAwMzAwM0UwMDAwOEFGNDIwMUI4OEY4NzAwMkNFMgorOjEwRkIxMDAwMzBDMzAwRkY4RjQyMDFCODA0NDBGRkZFOEY4MjAwNDhDRgorOjEwRkIyMDAwMzQ2MzYwMDBBQ0EyMDAwMDkzODIwMDQ0QTBBMjAwMDVGMAorOjEwRkIzMDAwOENFMjAwMTBBNEEyMDAwNkE0QTMwMDA4OEM4MjAwMjA3RQorOjEwRkI0MDAwMjQwM0ZGRjdBMEEyMDAwQTI0MDIwMDAyQTBBMjAwMEJENworOjEwRkI1MDAwOENFMjAwMDBBQ0EyMDAxMDhDRTIwMDA0QUNBMjAwMTQwNQorOjEwRkI2MDAwOENFMjAwMUNBQ0EyMDAyNDhDRTIwMDIwQUNBMjAwMjg5NQorOjEwRkI3MDAwOENFMjAwMkNBQ0EyMDAyQzhDODIwMDI0QUNBMjAwMThEOQorOjEwRkI4MDAwM0MwMjEwMDBBRjQyMDFCODhDODIwMDIwMDA0MzEwMjREOAorOjEwRkI5MDAwMDNFMDAwMDhBQzgyMDAyMDhGODYwMDE0MjdCREZGRTgzOAorOjEwRkJBMDAwQUZCRjAwMTRBRkIwMDAxMDkwQzIwMDYzMzA0MjAwMjAxRAorOjEwRkJCMDAwMTA0MDAwMDgzMEE1MDBGRjhDQzIwMDdDMjQwM0ZGREY0QQorOjEwRkJDMDAwMjQ0MjAwMDFBQ0MyMDA3QzkwQzIwMDYzMDA0MzEwMjRCOAorOjEwRkJEMDAwQTBDMjAwNjMxMEEwMDAyMzhGODMwMDE0Mjc1MDAxODA2RgorOjEwRkJFMDAwMDIwMDI4MjEwRTAwMTVENjI0MDYwMDgyOEY4MjAwMTQwMAorOjEwRkJGMDAwOTA0MjAwNjMzMDQyMDA0MDUwNDAwMDE5QTM4MDAwNDQwRQorOjEwRkMwMDAwOEY4MzAwMkM4RjQyMDFCODA0NDBGRkZFOEY4MjAwNDg5MgorOjEwRkMxMDAwQUUwMjAwMDAyNDAyNjA4MkE2MDIwMDA4MjQwMjAwMDI1NAorOjEwRkMyMDAwQTIwMjAwMEI4QzYyMDAwOEFFMDIwMDEwOEM2MjAwMEM3NQorOjEwRkMzMDAwQUUwMjAwMTQ4QzYyMDAxNEFFMDIwMDE4OEM2MjAwMTgzMAorOjEwRkM0MDAwQUUwMjAwMjQ4QzYyMDAyNEFFMDIwMDI4OEM2MjAwMjhFMAorOjEwRkM1MDAwQUUwMjAwMkMzQzAyMTAwMEFGNDIwMUI4QTM4MDAwNDQ2OQorOjEwRkM2MDAwOEY4MzAwMTQ4RkJGMDAxNDhGQjAwMDEwOTA2MjAwNjM2OAorOjEwRkM3MDAwMjdCRDAwMTgzMDQyMDA3RkEwNjIwMDYzOTc4MjAwM0FERgorOjEwRkM4MDAwOEY4NjAwM0M4Rjg1MDAxNDkzODMwMDI4MDA0NjEwMjM0NAorOjEwRkM5MDAwQTc4MjAwM0FBNEEwMDBFNDkwQTQwMDYzOEY4MjAwNDBGMQorOjEwRkNBMDAwQUY4MzAwM0MyNDAzRkZCRjAwNDYxMDIxMDA4MzIwMjRDMworOjEwRkNCMDAwQUY4MjAwNDBBMEE0MDA2MzhGODIwMDE0QTA0MDAwQkQ2QQorOjEwRkNDMDAwOEY4MjAwMTQwM0UwMDAwOEE0NDAwMEJFOEY4QTAwMTQ1NQorOjEwRkNEMDAwMjdCREZGRTBBRkIxMDAxNEFGQjAwMDEwOEY4ODAwM0MyQgorOjEwRkNFMDAwQUZCRjAwMTg5Mzg5MDAxQzk1NDIwMEU0MzBEMTAwRkY5QgorOjEwRkNGMDAwMDEwOTE4MkIwMDgwODAyMTMwQUMwMEZGMzA0N0ZGRkY0NgorOjEwRkQwMDAwMDAwMDU4MjExNDYwMDAwMzMxMDYwMEZGMDEyMDMwMjE1QgorOjEwRkQxMDAwMDEwOTU4MjM5NzgzMDAzQTAwNjgxMDJCMTQ0MDAwM0NENworOjEwRkQyMDAwMDAwMDAwMDAxNDY4MDAwNzI0MDIwMDAxOEUwMjAwMjA3OQorOjEwRkQzMDAwMjQwM0ZGRkIzNEU3ODAwMDAwNDMxMDI0QUUwMjAwMjBDMAorOjEwRkQ0MDAwMjQwMjAwMDEzNEU3MDg4MDE1ODIwMDA1MzE2NUZGRkZCOQorOjEwRkQ1MDAwMEUwMDE1NTQwMjAwMjAyMTBBMDAxNjkxMDIwMDIwMjFGNQorOjEwRkQ2MDAwMEUwMDE1ODUwMjAwMjAyMThGODQwMDQ4Mjc0MzAxODA2MgorOjEwRkQ3MDAwOEY0MjAxQjgwNDQwRkZGRTI0MDIwMDE4QUM2NDAwMDA2QQorOjEwRkQ4MDAwQTA2MjAwMEI4Rjg0MDAxNDk0ODIwMEU2QTQ2MjAwMTAyRAorOjEwRkQ5MDAwM0MwMjEwMDBBQzYwMDAzMEFGNDIwMUI4OTQ4MjAwNjBCOQorOjEwRkRBMDAwMjQ0MjAwMDFBNDgyMDA2MDk0ODIwMDYwM0MwMzA4MDBBOQorOjEwRkRCMDAwOEM2MzMxODgzMDQyN0ZGRjU0NDMwMDBGMDIwMDIwMjFDMgorOjEwRkRDMDAwOTQ4MjAwNjAyNDAzODAwMDAwNDMxMDI0QTQ4MjAwNjAxOQorOjEwRkREMDAwOTA4MjAwNjA5MDgzMDA2MDMwNDIwMEZGMDAwMjExQzJGOAorOjEwRkRFMDAwMDAwMjEwMjcwMDAyMTFDMDMwNjMwMDdGMDA2MjE4MjU1NgorOjEwRkRGMDAwQTA4MzAwNjAwMjAwMjAyMTAyMjAyODIxOEZCRjAwMTg2QworOjEwRkUwMDAwOEZCMTAwMTQ4RkIwMDAxMDBBMDAxNUY5MjdCRDAwMjAzMworOjEwRkUxMDAwOTE0MjAwNjMyNDAzRkY4MDAwNDMxMDI1QTE0MjAwNjM0OAorOjEwRkUyMDAwOTc4MjAwM0EzMDQ4RkZGRjExMDAwMDIwOTM4MzAwMUNBNgorOjEwRkUzMDAwOEY4NDAwMTQwMDRCMTAyMzMwNDYwMEZGOTQ4MzAwRTRBRAorOjEwRkU0MDAwMjQwMkVGRkYwMTY4MjgyQjAwNjIxODI0QTQ4MzAwRTQzOQorOjEwRkU1MDAwMTRBMDAwMDM4RTAyMDAyMDAxMDA1ODIxMDAwMDMwMjE3MAorOjEwRkU2MDAwMjQwM0ZGRkIzNEU3ODAwMDAwNDMxMDI0QUUwMjAwMjA4RgorOjEwRkU3MDAwMjQwMjAwMDExNTgyMDAwNTMxNjVGRkZGMEUwMDE1NTRCNAorOjEwRkU4MDAwMDIwMDIwMjEwQTAwMTZCOTk3ODMwMDNBMEUwMDE1ODU1QQorOjEwRkU5MDAwMDIwMDIwMjE5NzgzMDAzQThGODIwMDNDQTc4MDAwM0ExRAorOjEwRkVBMDAwMDA0MzEwMjNBRjgyMDAzQzkzODMwMDFDOEY4MjAwMTQxOAorOjEwRkVCMDAwOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwMjdCRDAwMjAzNQorOjEwRkVDMDAwMDNFMDAwMDhBMDQzMDBCRDkzODIwMDQ0MjQwMzAwMDEyNgorOjEwRkVEMDAwMjdCREZGRTgwMDQzMzAwNDJDNDIwMDIwQUZCMDAwMTBFMworOjEwRkVFMDAwQUZCRjAwMTQyNDEwRkZGRTEwNDAwMDA1Mjc0NTAxODAxRAorOjEwRkVGMDAwM0MwMjA4MDA4QzQyMzE5MDBBMDAxNkQ2MDA0NjEwMjRCRAorOjEwRkYwMDAwM0MwMjA4MDA4QzQyMzE5NDAwNDYxMDI0MTQ0MDAwMDc0MworOjEwRkYxMDAwMjQwNjAwODQ4RjgzMDAxNDI0MTBGRkZGOTA2MjAwNjI4NworOjEwRkYyMDAwMzA0MjAwMEYzNDQyMDA0MEEwNjIwMDYyMEUwMDE1RDYzRAorOjEwRkYzMDAwMDAwMDAwMDAwMjAwMTAyMThGQkYwMDE0OEZCMDAwMTBERAorOjEwRkY0MDAwMDNFMDAwMDgyN0JEMDAxODhGODMwMDI0MjdCREZGRTBEMQorOjEwRkY1MDAwQUZCMjAwMThBRkIxMDAxNEFGQjAwMDEwQUZCRjAwMUNCQgorOjEwRkY2MDAwOTA2MjAwMEQwMEEwOTAyMTMwRDEwMEZGMzA0MjAwN0Y1MAorOjEwRkY3MDAwQTA2MjAwMEQ4Rjg1MDAxNDhFNDMwMDE4MDA4MDgwMjE0MAorOjEwRkY4MDAwOENBMjAwN0MxNDYyMDAwNTI0MDIwMDBFOTBBMjAwNjM4MworOjEwRkY5MDAwMzQ0MjAwMjAwQTAwMTZGRkEwQTIwMDYzMEUwMDE2QzUxRQorOjEwRkZBMDAwQTM4MjAwNDQyNDAzRkZGRjEwNDMwMDQ3MjQwNEZGRkYwMworOjEwRkZCMDAwNTIyMDAwNDUwMDAwMjAyMThFNDMwMDAwM0MwMjAwMTAyQQorOjEwRkZDMDAwMDA2MjEwMjQ1MDQwMDAwNDNDMDIwMDA4MDIwMDIwMjE3RQorOjEwRkZEMDAwMEEwMDE3MEUyNDAyMDAxNTAwNjIxMDI0NTA0MDAwMDk4OAorOjEwRkZFMDAwOEU0NTAwMDAwMjAwMjAyMTI0MDIwMDE0MEUwMDE2QzVEOAorOjEwRkZGMDAwQTM4MjAwNDQyNDAzRkZGRjEwNDMwMDMzMjQwNEZGRkZDNworOjAyMDAwMDA0MDAwMUY5Cis6MTAwMDAwMDA4RTQ1MDAwMDNDMDIwMDAyMDBBMjEwMjQxMDQwMDAxNkExCis6MTAwMDEwMDAzQzAyMDAwNDhGODYwMDI0OENDMjAwMTQ4Q0MzMDAxMEE0Cis6MTAwMDIwMDA4Q0M0MDAxNDAwNDMxMDIzMDA0NDEwMkI1MDQwMDAwNUUyCis6MTAwMDMwMDAwMjAwMjAyMThFNDMwMDJDOENDMjAwMTAxMDYyMDAwM0FECis6MTAwMDQwMDAwMjAwMjAyMTBBMDAxNzNGMjQwMjAwMTIzQzAyMDAwNDkzCis6MTAwMDUwMDAwMEEyMTAyNDUwNDAwMDFDMDAwMDIwMjEwMjAwMjAyMTlBCis6MTAwMDYwMDAwQTAwMTczRjI0MDIwMDEzMDBBMjEwMjQxMDQwMDAwNkNCCis6MTAwMDcwMDA4RjgzMDAyNDhDNjIwMDEwNTA0MDAwMTMwMDAwMjAyMTY4Cis6MTAwMDgwMDAwQTAwMTczOTAyMDAyMDIxOEM2MjAwMTA1MDQwMDAwNDQxCis6MTAwMDkwMDA4RTQyMDAyQzAyMDAyMDIxMEEwMDE3M0YyNDAyMDAxMThBCis6MTAwMEEwMDA1MDQwMDAwOTAwMDAyMDIxMDIwMDIwMjEyNDAyMDAxN0Y2Cis6MTAwMEIwMDAwRTAwMTZDNUEzODIwMDQ0MjQwM0ZGRkYxMDQzMDAwMjc0Cis6MTAwMEMwMDAyNDA0RkZGRjAwMDAyMDIxOEZCRjAwMUM4RkIyMDAxODA2Cis6MTAwMEQwMDA4RkIxMDAxNDhGQjAwMDEwMDA4MDEwMjEwM0UwMDAwOEUxCis6MTAwMEUwMDAyN0JEMDAyMDhGODMwMDE0MjdCREZGRDhBRkI0MDAyMEE4Cis6MTAwMEYwMDBBRkIzMDAxQ0FGQjIwMDE4QUZCMTAwMTRBRkIwMDAxMDI2Cis6MTAwMTAwMDBBRkJGMDAyNDkwNjIwMDYzOEY5MTAwMkMyNDEyRkZGRjg4Cis6MTAwMTEwMDAzNDQyMDA0MDkyMjUwMDAwQTA2MjAwNjM4RTIyMDAxMDRECis6MTAwMTIwMDAwMDgwOTgyMTMwQjAwMDNGMTA1MjAwMDYwMzYwQTAyMUVCCis6MTAwMTMwMDAyNDAyMDAwRDBFMDAxNkM1QTM4MjAwNDQxMDUyMDA1NDg0Cis6MTAwMTQwMDAyNDA0RkZGRjhGODMwMDE0OEUyMjAwMTg4QzYzMDA3QzMwCis6MTAwMTUwMDAxMDQzMDAwNzAyNjAyMDIxMjQwMjAwMEUwRTAwMTZDNTg1Cis6MTAwMTYwMDBBMzgyMDA0NDI0MDNGRkZGMTA0MzAwNDkyNDA0RkZGRjNGCis6MTAwMTcwMDAyNDA0MDAyMDEyMDQwMDA0OEY4MzAwMTQ5MDYyMDA2M0EyCis6MTAwMTgwMDAzNDQyMDAyMEEwNjIwMDYzOEY4NTAwMzQxMEEwMDAyMDVDCis6MTAwMTkwMDAwMDAwMDAwMDU2MDQwMDA0OEY4MjAwMTQwMjYwMjAyMTM5Cis6MTAwMUEwMDAwQTAwMTc5MDI0MDIwMDBBOTY4MzAwMEE5NDQyMDA2MDE1Cis6MTAwMUIwMDAzMDQyRkZGRjE0NDMwMDA0OEY4MjAwMjAyNDA0RkZGRDFGCis6MTAwMUMwMDAwQTAwMTdCN0FGODIwMDNDM0MwMjA4MDA4QzQyMzE4QzE5Cis6MTAwMUQwMDAwMDQ1MTAyQjE0NDAwMDA2MDI2MDIwMjEwMDAwMjgyMTU5Cis6MTAwMUUwMDAwRTAwMTY0NjI0MDYwMDAxMEEwMDE3QjcwMDAwMjAyMTYxCis6MTAwMUYwMDAyNDAyMDAyRDBFMDAxNkM1QTM4MjAwNDQyNDAzRkZGRjM1Cis6MTAwMjAwMDAxMDQzMDAyMzI0MDRGRkZGMEEwMDE3QjcwMDAwMjAyMTM5Cis6MTAwMjEwMDAxNjA0MDAwNThGODQwMDE0OEUyMzAwMTQyNDAyRkZGRkFGCis6MTAwMjIwMDA1MDYyMDAxODAyNjAyMDIxOTQ4MjAwNjAyNDQyMDAwMTg0Cis6MTAwMjMwMDBBNDgyMDA2MDk0ODIwMDYwM0MwMzA4MDA4QzYzMzE4OEQzCis6MTAwMjQwMDAzMDQyN0ZGRjU0NDMwMDBGMDI2MDIwMjE5NDgyMDA2MEZGCis6MTAwMjUwMDAyNDAzODAwMDAwNDMxMDI0QTQ4MjAwNjA5MDgyMDA2MDg4Cis6MTAwMjYwMDA5MDgzMDA2MDMwNDIwMEZGMDAwMjExQzIwMDAyMTAyNzlDCis6MTAwMjcwMDAwMDAyMTFDMDMwNjMwMDdGMDA2MjE4MjVBMDgzMDA2MDc3Cis6MTAwMjgwMDAwMjYwMjAyMTBFMDAxNUY5MjQwNTAwMDEwMDAwMjAyMTQ0Cis6MTAwMjkwMDA4RkJGMDAyNDhGQjQwMDIwOEZCMzAwMUM4RkIyMDAxOEQyCis6MTAwMkEwMDA4RkIxMDAxNDhGQjAwMDEwMDA4MDEwMjEwM0UwMDAwODBGCis6MTAwMkIwMDAyN0JEMDAyODhGODMwMDE0MjdCREZGRThBRkIwMDAxMEQyCis6MTAwMkMwMDBBRkJGMDAxNDkwNjIwMDYzOEY4NzAwMkMwMDgwODAyMUY0Cis6MTAwMkQwMDAzNDQyMDA0MDhDRTYwMDEwQTA2MjAwNjMzQzAzMDgwMDNBCis6MTAwMkUwMDA4QzYzMzFCMDMwQzIzRkZGMDA0MzEwMkIxMDQwMDA0RUYyCis6MTAwMkYwMDA4Rjg1MDAzMDI0MDJGRjgwOTBBMzAwMEQwMDQzMTAyNDVFCis6MTAwMzAwMDAzMDQyMDBGRjUwNDAwMDQ5MDIwMDIwMjEwMDA2MTM4MkM1Cis6MTAwMzEwMDAzMDQ4MDAwMzI0MDIwMDAyNTUwMjAwNDQwMjAwMjAyMTVDCis6MTAwMzIwMDA5NEEyMDAxQzhGODUwMDE0MjQwMzAwMjNBNEEyMDExNEFFCis6MTAwMzMwMDA4Q0U2MDAwMDAwMDYxNjAyMzA0MjAwM0YxMDQzMDAxMDE5Cis6MTAwMzQwMDAzQzAzMDA4MzhDRTMwMDE4OENBMjAwN0MxMDYyMDAwNjQyCis6MTAwMzUwMDAyNDAyMDAwRTBFMDAxNkM1QTM4MjAwNDQyNDAzRkZGRkYyCis6MTAwMzYwMDAxMDQzMDAzODI0MDRGRkZGOEY4MzAwMTQ5MDYyMDA2MzYxCis6MTAwMzcwMDAzNDQyMDAyMEEwNjIwMDYzMEEwMDE3RkM4RjgzMDAyNDJGCis6MTAwMzgwMDAwMEMzMTAyNDE0NDMwMDA3OEY4MzAwMjQ5MEEyMDA2MjRFCis6MTAwMzkwMDAzMDQyMDAwRjM0NDIwMDIwQTBBMjAwNjJBMzg4MDAzODNGCis6MTAwM0EwMDA4RjgzMDAyNDkwNjIwMDBEMzA0MjAwN0ZBMDYyMDAwRDE4Cis6MTAwM0IwMDA4RjgzMDAzNDEwNjAwMDE4MDIwMDIwMjE4Rjg0MDAzMEU5Cis6MTAwM0MwMDA4QzgyMDAxMDAwNDMxMDJCMTA0MDAwMDkyNDAyMDAxOEZBCis6MTAwM0QwMDAwMjAwMjAyMTBFMDAxNkM1QTM4MjAwNDQyNDAzRkZGRjYzCis6MTAwM0UwMDAxMDQzMDAxODI0MDRGRkZGMEEwMDE4MjQwMDAwMjAyMUY1Cis6MTAwM0YwMDA4QzgyMDAxMDI0MDUwMDAxMDIwMDIwMjEwMDQzMTAyM0ZDCis6MTAwNDAwMDA4RjgzMDAyNDI0MDYwMDAxMEUwMDE2NDZBQzYyMDAxMDAzCis6MTAwNDEwMDAwQTAwMTgyNDAwMDAyMDIxMEUwMDE1RjkyNDA1MDAwMTBGCis6MTAwNDIwMDAwQTAwMTgyNDAwMDAyMDIxMDIwMDIwMjEyNDAyMDAwRENGCis6MTAwNDMwMDA4RkJGMDAxNDhGQjAwMDEwMjdCRDAwMTgwQTAwMTZDNTJBCis6MTAwNDQwMDBBMzgyMDA0NDhGQkYwMDE0OEZCMDAwMTAwMDgwMTAyMUUxCis6MTAwNDUwMDAwM0UwMDAwODI3QkQwMDE4MjdCREZGQzhBRkIyMDAyMDg5Cis6MTAwNDYwMDBBRkJGMDAzNEFGQjYwMDMwQUZCNTAwMkNBRkI0MDAyODNBCis6MTAwNDcwMDBBRkIzMDAyNEFGQjEwMDFDQUZCMDAwMTg4RjQ2MDEyODA1Cis6MTAwNDgwMDAzQzAzMDgwMDhDNjMzMUEwMjQwMkZGODBBRjg2MDA0ODQzCis6MTAwNDkwMDAwMEMzMTgyMTMwNjUwMDdGMDM0NTI4MjEwMDYyMTgyNDFECis6MTAwNEEwMDAzQzAyMDAwQUFGNDMwMDI0MDBBMjI4MjE5MEEyMDA2MjZGCis6MTAwNEIwMDAwMDgwOTAyMUFGODUwMDE0MzA0MjAwRkYwMDAyMTEwMjNECis6MTAwNEMwMDBBMzgyMDAzODkwQTIwMEJDMzA0MjAwMDIxNDQwMDAwMjE3Cis6MTAwNEQwMDAyNDAzMDAzNDI0MDMwMDMwOEY4MjAwMTRBMzgzMDAyOEY3Cis6MTAwNEUwMDA5MzgzMDAzODhDNDIwMEMwQTM4MDAwNDRBRjgyMDAzQzVDCis6MTAwNEYwMDAyNDAyMDAwNDEwNjIwMzE0OEY4NDAwM0M4RTQ0MDAwNDI0Cis6MTAwNTAwMDA1MDgwMDMxMThGODQwMDNDOEU0MjAwMTAzMDgzRkZGRjI3Cis6MTAwNTEwMDBBNzg0MDAzQTEwNjAwMkY3QUY4MjAwNDA4Rjg0MDAxNDc1Cis6MTAwNTIwMDAyNDAzRkY4MDkwODIwMDYzMDA2MjEwMjQzMDQyMDBGRkE5Cis6MTAwNTMwMDAxNDQwMDJDNzk3ODUwMDNBOTM4MzAwMzgyNDAyMDAwMkQyCis6MTAwNTQwMDAzMEI2RkZGRjE0NjIwMDA1MDAwMDg4MjE5MzgyMDAyODY2Cis6MTAwNTUwMDAyNDAzRkZGRDBBMDAxQjExQUY4MjAwM0M4RjgyMDAzQzg4Cis6MTAwNTYwMDAwMkMyMTAyQjE0NDAwMjk5OEY4NDAwNDAwRTAwMTRFQzNDCis6MTAwNTcwMDAwMDAwMDAwMDkzODMwMDI4M0MwNDA4MDAyNDg0Nzc3ODVFCis6MTAwNTgwMDAyNDAyMDAzNDE0NjIwMDJFQUY4NDAwMkMzQzBBMDgwMEMwCis6MTAwNTkwMDA4RDRBNzdBODI0MDJGRkZGQUZBMjAwMTAwMDgwMzgyMTA3Cis6MTAwNUEwMDAyNDA1MDAyRjNDMDkwODAwMjUyOTczNzgyNDA4MDBGRjQyCis6MTAwNUIwMDAyNDA2RkZGRjkwRTIwMDAwMjRBM0ZGRkYwMDA2MjIwMkIyCis6MTAwNUMwMDAwMEMyMTAyNjMwNDIwMEZGMDAwMjEwODAwMDQ5MTAyMUI2Cis6MTAwNUQwMDA4QzQyMDAwMDMwNjUwMEZGMjRFNzAwMDExNEE4RkZGNUZECis6MTAwNUUwMDAwMDgyMzAyNjAwMDYxMDI3QUZBMjAwMTRBRkEyMDAxMDMwCis6MTAwNUYwMDAwMDAwMjgyMTI3QTcwMDEwMjdBNjAwMTQwMEM1MTAyM0ZCCis6MTAwNjAwMDA5MDQ0MDAwMzI0QTIwMDAxMDBBNzE4MjEzMDQ1MDBGRkY4Cis6MTAwNjEwMDAyQ0EyMDAwNDE0NDBGRkY5QTA2NDAwMDA4RkEyMDAxMDc3Cis6MTAwNjIwMDAxMTQyMDAwNzI0MDIwMDA1MDI0MDIwMjEwRTAwMTZDNUQ5Cis6MTAwNjMwMDBBMzgyMDA0NDI0MDNGRkZGMTA0MzAwNjQyNDA0RkZGRjRGCis6MTAwNjQwMDAzQzAyMDgwMDkwNDI3NzdDMTA0MDAwMDk4RjgyMDAxNDIxCis6MTAwNjUwMDAwMjQwMjAyMTI0MDIwMDBDMEUwMDE2QzVBMzgyMDA0NDkzCis6MTAwNjYwMDAyNDAzRkZGRjEwNDMwMDU5MjQwNEZGRkY4RjgyMDAxNDZFCis6MTAwNjcwMDBBMzgwMDAxQzNDMDMwODAwOEM2Mzc3N0M4QzQ0MDA4MEMyCis6MTAwNjgwMDAzQzAyMDBGRjM0NDJGRkZGMDA2MjE4MjQwMDgzMjAyQjRECis6MTAwNjkwMDAxMDgwMDAwOEFGODMwMDM0MDI0MDIwMjEyNDAyMDAxOTlBCis6MTAwNkEwMDAwRTAwMTZDNUEzODIwMDQ0MjQwM0ZGRkYxMDQzMDA0NzM5Cis6MTAwNkIwMDAyNDA0RkZGRjhGODcwMDNDOTc4MjAwM0E4Rjg1MDAzNDI3Cis6MTAwNkMwMDBBRjg3MDAyMDAwNDcyMDIzMTBBMDAwM0JBNzg0MDAzQUZBCis6MTAwNkQwMDA4Rjg2MDAxNDMwQTIwMDAzMDAwMjEwMjM5MEMzMDBCQ0Q4Cis6MTAwNkUwMDAzMDUwMDAwMzAwQjAyODIxMDAwMzE4ODIzMDczMDAwMTRECis6MTAwNkYwMDAwMDEzMTA4MDAwQTIyODIxM0MwMzA4MDA4QzYzMzFBMDY1Cis6MTAwNzAwMDA4RjgyMDA0ODMwODRGRkZGMDA4NTIwMkIwMDQzMTAyMTlBCis6MTAwNzEwMDAxMDgwMDAxMTI0NDIwMDg4OEY4NDAwMkMxMDgyMDAwRTZCCis6MTAwNzIwMDAzQzAzM0YwMTNDMDIwODAwOEM0Mjc3NzgwMDQzMTAyNEQwCis6MTAwNzMwMDAzQzAzMjUwMDE0NDMwMDA2MzBFNTAwRkY4QzgyMDAwMEQ2Cis6MTAwNzQwMDBBQ0MyMDA4ODhDODIwMDEwMEEwMDE4RTlBQ0MyMDA5ODg0Cis6MTAwNzUwMDAwRTAwMTUyOTAwMDAzMDIxOTM4MjAwMUM4Rjg1MDAxNEEzCis6MTAwNzYwMDA4RjgzMDA0MDAyMDIzODIxOEY4MjAwM0NBMzg3MDAxQzQ3Cis6MTAwNzcwMDA5NEE0MDBFNDAwNjIxODIxOEY4MjAwMzQzNDg0MTAwMEI1Cis6MTAwNzgwMDBBRjgzMDA0MDAwNTAzMDIxQTRBNDAwRTQxMjYwMDAwRUFBCis6MTAwNzkwMDBBRjg2MDAzQzI0RTIwMDA0QTM4MjAwMUM5NEEyMDBFNDgzCis6MTAwN0EwMDAyNEMzMDAwNEFGODMwMDNDMzQ0MjIwMDBBNEEyMDBFNDMwCis6MTAwN0IwMDAwQTAwMTkwNjAwMDAyMDIxOEY4MjAwNDBBRjgwMDAzQzEzCis6MTAwN0MwMDAwMDQ3MTAyMUFGODIwMDQwMDAwMDIwMjEyNDE0RkZGRkM5Cis6MTAwN0QwMDAxMDk0MDIwOTI0MDNGRkZGM0MwODA4MDA4RDA4Nzc4ODY1Cis6MTAwN0UwMDAzQzAyMDgwMDhDNDIzMUIwM0MwMzA4MDA5MDYzNzc3OEVCCis6MTAwN0YwMDAzMTA0M0ZGRjAwODIxMDJCMTA0MDAwMUIzMDY3MDAzRjg4Cis6MTAwODAwMDAzQzAyMDgwMDhDNDIzMUE4OEY4MzAwNDgwMDA0MjE4MEZDCis6MTAwODEwMDAwMDYyMTgyMTAwNjQxODIxMzA2MjAwN0YwMzQyMjgyMTAxCis6MTAwODIwMDAzQzAyMDAwQzAwQTIyODIxM0MwMjAwODAzNDQyMDAwMTVFCis6MTAwODMwMDAzMDY2MDA3ODAwQzIzMDI1MjQwMkZGODAwMDYyMTAyNDU4Cis6MTAwODQwMDBBRjQyMDAyODMwNjQwMDA3QUY0MjA4MDQ4RjgyMDAxNEQyCis6MTAwODUwMDAwMzQ0MjAyMTI0ODQwOTQwQUY0NjA4MTRBRjg1MDAyNEI2Cis6MTAwODYwMDBBRjg0MDAzMEFDNDMwMTE4OTM4MzAwMzgyNDAyMDAwM0E2Cis6MTAwODcwMDAxNDYyMDFDNzI0MDIwMDAxMjQwMjAwMjYxMEUyMDFDOTBCCis6MTAwODgwMDAyOEUyMDAyNzEwNDAwMDEzMjQwMjAwMzIyNDAyMDAyMjM0Cis6MTAwODkwMDAxMEUyMDFDNDI4RTIwMDIzMTA0MDAwMDgyNDAyMDAyNEQyCis6MTAwOEEwMDAyNDAyMDAyMDEwRTIwMUIwMjQwMjAwMjExMEUyMDEzRkU2Cis6MTAwOEIwMDAwMjQwMjAyMTBBMDAxQUYzMjQwMjAwMEIxMEUyMDFCOUMxCis6MTAwOEMwMDAyNDAyMDAyNTEwRTIwMDEwMDI0MDIwMjEwQTAwMUFGMzQxCis6MTAwOEQwMDAyNDAyMDAwQjEwRTIwMUE2MjhFMjAwMzMxMDQwMDAwNkJCCis6MTAwOEUwMDAyNDAyMDAzRjI0MDIwMDMxMTBFMjAwOTIwMjQwMjAyMTQ1Cis6MTAwOEYwMDAwQTAwMUFGMzI0MDIwMDBCMTBFMjAxOUQwMjQwMjAyMTlECis6MTAwOTAwMDAwQTAwMUFGMzI0MDIwMDBCOEY5MDAwMkMzQzAzMDgwMDBECis6MTAwOTEwMDA4QzYzMzFCMDhGODUwMDMwOEUwNDAwMTAwMDAwQTgyMTU4Cis6MTAwOTIwMDA4Q0IzMDAxNDMwODIzRkZGMDA0MzEwMkI4Q0IxMDAyMEE5Cis6MTAwOTMwMDA1MDQwMDE4NzAyNDAyMDIxOTBBMzAwMEQyNDAyRkY4MDM3Cis6MTAwOTQwMDAwMDQzMTAyNDMwNDIwMEZGNTA0MDAxODEwMjQwMjAyMTJBCis6MTAwOTUwMDAwMDA0MTM4MjMwNDIwMDAzMTQ0MDAxN0QwMjQwMjAyMTM0Cis6MTAwOTYwMDA5NEEzMDAxQzhGODIwMDE0OEUwNDAwMjhBNDQzMDExNDU5Cis6MTAwOTcwMDA4Q0EyMDAxMDAyNjIxODIzMTA2NDAwMDMwMjQwMjAyMUEwCis6MTAwOTgwMDAwQTAwMTk3QzI0MDIwMDFGOEY4MjAwMzQwMDYyMTAyMUFCCis6MTAwOTkwMDAwMjYyMTAyQjEwNDAwMDA4OEY4MzAwMjQwMjQwMjAyMUE3Cis6MTAwOUEwMDAyNDAyMDAxODBFMDAxNkM1QTM4MjAwNDQxMDU0MDE2Q0U2Cis6MTAwOUIwMDAyNDA0RkZGRjhGODMwMDI0OEY4NDAwMzQ4QzYyMDAxMDk2Cis6MTAwOUMwMDAwMjI0ODgyMTAwNDQxMDIzQUM2MjAwMTA4RjgyMDAxNDlFCis6MTAwOUQwMDBBQzcxMDAyMDhDNDIwMDY4MDA1MTEwMkIxMDQwMDAwOUJGCis6MTAwOUUwMDA4RjgzMDAzMDAyNDAyMDIxMjQwMjAwMUQwRTAwMTZDNTE2Cis6MTAwOUYwMDBBMzgyMDA0NDI0MDNGRkZGMTA0MzAxNTkyNDA0RkZGRjk2Cis6MTAwQTAwMDA4RjgzMDAzMDhFMDIwMDI0OEM2MzAwMjQxMDQzMDAwNzgzCis6MTAwQTEwMDAwMjQwMjAyMTI0MDIwMDFDMEUwMDE2QzVBMzgyMDA0NEJGCis6MTAwQTIwMDAyNDAzRkZGRjEwNDMwMTRFMjQwNEZGRkY4Rjg0MDAyNEEyCis6MTAwQTMwMDA4QzgyMDAyNDI0NDIwMDAxQUM4MjAwMjQxMjMzMDAwNDgyCis6MTAwQTQwMDA4RjgyMDAxNDhDNDIwMDY4NTYyMjAwMEU4RTAyMDAwMDM1Cis6MTAwQTUwMDA4RTAyMDAwMDNDMDMwMDgwMDA0MzEwMjQxNDQwMDAwRDZGCis6MTAwQTYwMDAyNDAyMDAxQTAyNDAyMDIxMEUwMDE2QzVBMzgyMDA0NDcxCis6MTAwQTcwMDAyNDAzRkZGRjEwNDMwMTNBMjQwNEZGRkYwQTAwMTlCQUMwCis6MTAwQTgwMDA4RTAyMDAxNDNDMDMwMDgwMDA0MzEwMjQ1MDQwMDAwM0Y5Cis6MTAwQTkwMDA4RTAyMDAxNEFDODAwMDIwOEUwMjAwMTQyNDExRkZGRjhGCis6MTAwQUEwMDAxMDUxMDAwNjI0MDIwMDFCMDI0MDIwMjEwRTAwMTZDNTMyCis6MTAwQUIwMDBBMzgyMDA0NDEwNTEwMTJBMjQwNEZGRkY4RTAzMDAwMDhBCis6MTAwQUMwMDAzQzAyMDAwMTAwNjIxMDI0MTA0MDAwMTIzQzAyMDA4MDMxCis6MTAwQUQwMDAwMDYyMTAyNDE0NDAwMDA4MDI0MDIwMjEyNDAyMDAxQTYxCis6MTAwQUUwMDAwRTAwMTZDNUEzODIwMDQ0MjQwM0ZGRkYxMDQzMDExQzFGCis6MTAwQUYwMDAyNDA0RkZGRjAyNDAyMDIxMDIwMDI4MjEwRTAwMTZFNUY5Cis6MTAwQjAwMDAyNDA2MDAwMTI0MDNGRkZGMTA0MzAxMTUyNDA0RkZGRjA2Cis6MTAwQjEwMDAyNDE1MDAwMThGODMwMDI0MDJBMDMwMjEwMjQwMjAyMUVGCis6MTAwQjIwMDA5NDYyMDAzNjI0MDUwMDAxMjQ0MjAwMDEwQTAwMUFENzBECis6MTAwQjMwMDBBNDYyMDAzNjhGOTAwMDJDM0MwMzA4MDA4QzYzMzFCMDE3Cis6MTAwQjQwMDA4RTEzMDAxMDMyNjIzRkZGMDA0MzEwMkIxMDQwMDA4OUNCCis6MTAwQjUwMDA4Rjg0MDAzMDI0MDJGRjgwOTA4MzAwMEQwMDQzMTAyNDE2Cis6MTAwQjYwMDAzMDQyMDBGRjEwNDAwMDg0MjQwMjAwMEQwMDEzMTM4MjY1Cis6MTAwQjcwMDAzMDQyMDAwMzI0MDMwMDAxMTQ0MzAwN0YyNDAyMDAwRENGCis6MTAwQjgwMDA5MDgyMDAwRDMwNDIwMDA4NTQ0MDAwMDQ4RjgyMDAzNEVGCis6MTAwQjkwMDAwMjQwMjAyMTBBMDAxQTA4MjQwMjAwMjQ1MDQwMDAwNEM4Cis6MTAwQkEwMDA4RTAzMDAwQzAyNDAyMDIxMEEwMDFBMDgyNDAyMDAyN0FDCis6MTAwQkIwMDA4QzgyMDAyMDU0NjIwMDA2MDI0MDIwMjE4RTAzMDAwODJGCis6MTAwQkMwMDA4QzgyMDAyNDUwNjIwMDA5OEUwMjAwMTQwMjQwMjAyMTExCis6MTAwQkQwMDAyNDAyMDAyMDBFMDAxNkM1QTM4MjAwNDQxMDU0MDA3MUE4Cis6MTAwQkUwMDAyNDAzRkZGRjBBMDAxQTNEOEY4NDAwMjQyNDExRkZGRjE1Cis6MTAwQkYwMDAxNDUxMDAwNDhGODYwMDE0MDI0MDIwMjEwQTAwMUEzODg0Cis6MTAwQzAwMDAyNDAyMDAyNThFMDMwMDE4OENDMjAwN0MxMDYyMDAwM0IxCis6MTAwQzEwMDAyNDAyMDAwRTBBMDAxQTM4MDI0MDIwMjE4RTAzMDAyNDBDCis6MTAwQzIwMDA4QzgyMDAyODEwNjIwMDAzMjQwMjAwMjEwQTAwMUEzODc2Cis6MTAwQzMwMDAwMjQwMjAyMThFMDUwMDI4OEM4MjAwMkMxMEEyMDAwMzg3Cis6MTAwQzQwMDAyNDAyMDAxRjBBMDAxQTM4MDI0MDIwMjE4RTAzMDAyQ0MzCis6MTAwQzUwMDAxNDYwMDAwMzI0MDIwMDIzMEEwMDFBMzgwMjQwMjAyMUY1Cis6MTAwQzYwMDA4Q0MyMDA2ODAwNDMxMDJCMTA0MDAwMDMyNDAyMDAyNkIxCis6MTAwQzcwMDAwQTAwMUEzODAyNDAyMDIxOEM4MjAwMTQwMDY1MTgyMUQ1Cis6MTAwQzgwMDAwMDQzMTAyQjEwNDAwMDA4OEY4NDAwMjQwMjQwMjAyMUQ0Cis6MTAwQzkwMDAyNDAyMDAyMjBFMDAxNkM1QTM4MjAwNDQxMDUxMDA0MTE4Cis6MTAwQ0EwMDAyNDAzRkZGRjhGODQwMDI0MjQwM0ZGRjc5MDgyMDAwREFDCis6MTAwQ0IwMDAwMDQzMTAyNEEwODIwMDBEOEY4NjAwMTQzQzAzMDgwMDFFCis6MTAwQ0MwMDA4QzYzMzFBQzhGODIwMDQ4OTRDNDAwRTA4Rjg1MDAyNDhGCis6MTAwQ0QwMDAwMDQzMTAyMTMwODQ3RkZGMDAwNDIwNDAwMDQ0MTAyMTk1Cis6MTAwQ0UwMDAzMDQzMDA3RjAzNDMyMDIxM0MwMzAwMEUwMDgzMjAyMTdBCis6MTAwQ0YwMDAyNDAzRkY4MDAwNDMxMDI0QUY0MjAwMkNBNDkzMDAwMDgzCis6MTAwRDAwMDA4Q0EyMDAyODI0NDIwMDAxQUNBMjAwMjg4Q0EyMDAyQzU2Cis6MTAwRDEwMDA4RTAzMDAyQzAwNDMxMDIxQUNBMjAwMkM4RTAyMDAyQzZDCis6MTAwRDIwMDBBQ0EyMDAzMDhFMDIwMDE0QUNBMjAwMzQ5NEEyMDAzQUFGCis6MTAwRDMwMDAyNDQyMDAwMUE0QTIwMDNBOTRDNjAwRTAzQzAyMDgwMDRDCis6MTAwRDQwMDA4QzQyMzFCMDI0QzQwMDAxMzA4MzdGRkYxNDYyMDAwRjU1Cis6MTAwRDUwMDAwMDgwMzAyMTI0MDI4MDAwMDA4MjMwMjQzMEMyRkZGRjU2Cis6MTAwRDYwMDAwMDAyMTNDMjMwNDIwMEZGMDAwMjEwMjcwQTAwMUE3NjY4Cis6MTAwRDcwMDAwMDAyMzNDMDI0MDIwMDBEMDI0MDIwMjEwRTAwMTZDNURGCis6MTAwRDgwMDBBMzgyMDA0NDBBMDAxQTdDMDA0MDE4MjE4RjgyMDAxNEJDCis6MTAwRDkwMDAwMjQwMjAyMTI0MDUwMDAxMEUwMDE1RjlBNDQ2MDBFMEMwCis6MTAwREEwMDAwMDAwMTgyMTBBMDAxQjBFMDA2MDg4MjE4RjkwMDAyQzgzCis6MTAwREIwMDAzQzAzMDgwMDhDNjMzMUIwOEUwNTAwMTAzMEEyM0ZGRjY5Cis6MTAwREMwMDAwMDQzMTAyQjEwNDAwMDYxMjQwMkZGODA4Rjg0MDAzMDBDCis6MTAwREQwMDA5MDgzMDAwRDAwNDMxMDI0MzA0MjAwRkY1MDQwMDA1QzFGCis6MTAwREUwMDAwMjQwMjAyMThGODIwMDM0MTA0MDAwMEIwMDA1MTM4MjQ2Cis6MTAwREYwMDA4RjgyMDAxNDk3NjMwMDBBOTQ0MjAwNjAzMDQyRkZGRjI0Cis6MTAwRTAwMDAxNDQzMDAwNTAwMDUxMzgyOEY4MjAwMjAyNDA0RkZGRDk3Cis6MTAwRTEwMDAwQTAwMUFFQkFGODIwMDNDMzA0MjAwMDMxNDQwMDAwRTdGCis6MTAwRTIwMDAwMDAwMDAwMDkyMDIwMDAyMTA0MDAwMDU4RTAzMDAyNDIyCis6MTAwRTMwMDA1MDYwMDAxNTkyMDMwMDAzMEEwMDFBQTcwMjQwMjAyMTA3Cis6MTAwRTQwMDA4QzgyMDAyNDUwNjIwMDEwOTIwMzAwMDMwMjQwMjAyMTkzCis6MTAwRTUwMDAwQTAwMUFBRjI0MDIwMDBGOTA4MjAwMEQzMDQyMDAwOEYxCis6MTAwRTYwMDA1NDQwMDAwOTkyMDMwMDAzMDI0MDIwMjEyNDAyMDAxMDk0Cis6MTAwRTcwMDAwRTAwMTZDNUEzODIwMDQ0MjQwM0ZGRkYxMDQzMDAzODcwCis6MTAwRTgwMDAyNDA0RkZGRjkyMDMwMDAzMjQwMjAwMDI1NDYyMDAwQ0JBCis6MTAwRTkwMDA5MjAyMDAwMzhGODIwMDM0NTQ0MDAwMDk5MjAyMDAwMzQyCis6MTAwRUEwMDAwMjQwMjAyMTI0MDIwMDJDMEUwMDE2QzVBMzgyMDA0NDFCCis6MTAwRUIwMDAyNDAzRkZGRjEwNDMwMDJBMjQwNEZGRkY5MjAyMDAwM0QzCis6MTAwRUMwMDAwMjAwMjgyMTAyNDAyMDIxMzg0NjAwMTAyQ0M2MDAwMUQzCis6MTAwRUQwMDAyQzQyMDAwMTBFMDAxNkU1MDA0NjMwMjUyNDEwRkZGRkNECis6MTAwRUUwMDAxMDUwMDAxRjI0MDRGRkZGOEY4MzAwMzQxMDYwMDAxMzk0Cis6MTAwRUYwMDAwMjQwMjAyMTNDMDIwODAwOEM0MjMxOEMwMDQzMTAyQjIwCis6MTAwRjAwMDAxNDQwMDAwNzAwMDAwMDAwMDAwMDI4MjEyNDA2MDAwMTEyCis6MTAwRjEwMDAwRTAwMTY0NjAwMDAwMDAwMEEwMDFBRUIwMDAwMjAyMTE3Cis6MTAwRjIwMDAyNDAyMDAyRDBFMDAxNkM1QTM4MjAwNDQxMDUwMDAwQ0IwCis6MTAwRjMwMDAyNDA0RkZGRjBBMDAxQUVCMDAwMDIwMjEwRTAwMTVGOTFGCis6MTAwRjQwMDAyNDA1MDAwMTBBMDAxQUVCMDAwMDIwMjEwMjQwMjAyMUE0Cis6MTAwRjUwMDAyNDAyMDAwRDBFMDAxNkM1QTM4MjAwNDQwMDQwMjAyMThCCis6MTAwRjYwMDAwQTAwMUIwRTAwODA4ODIxMTUxNDAwMEUwMDAwMDAwMEVFCis6MTAwRjcwMDAwRTAwMTc0QzAyNDAyMDIxMEEwMDFCMEUwMDQwODgyMTYxCis6MTAwRjgwMDAwRTAwMTZDNUEzODIwMDQ0MEEwMDFCMEUwMDQwODgyMUYzCis6MTAwRjkwMDAxNDYyMDAxNzAyMjAxODIxMjQwMjAwMjMxNEUyMDAwNTI1Cis6MTAwRkEwMDAyNDAyMDAwQjBFMDAxN0MwMDI0MDIwMjEwQTAwMUIwRTc1Cis6MTAwRkIwMDAwMDQwODgyMTAyNDAyMDIxQTM4MjAwNDQwRTAwMTZDNTczCis6MTAwRkMwMDAyNDExRkZGRjBBMDAxQjBGMDIyMDE4MjEzMEE1MDBGRjhCCis6MTAwRkQwMDAwRTAwMTUyOTI0MDYwMDAxOTc4MzAwM0E4RjgyMDAzQ0Y5Cis6MTAwRkUwMDBBNzgwMDAzQTAwNDMxMDIzQUY4MjAwM0MwMjIwMTgyMTYyCis6MTAwRkYwMDAxMjIwMDAzRTk3ODIwMDNBMjQwMkZGRkQ1NDYyMDAzRTE4Cis6MTAxMDAwMDA4RTQzMDAyMDhFNDIwMDA0OEY4MzAwMTQwMDU2MTAyMzZDCis6MTAxMDEwMDBBRTQyMDAwNDkwNjIwMDYzMzA0MjAwN0ZBMDYyMDA2MzMxCis6MTAxMDIwMDA4RTQyMDAyMDhGODQwMDE0QTc4MDAwM0EzNDQyMDAwMkQwCis6MTAxMDMwMDBBRTQyMDAyMEE0ODAwMEU0OTA4MjAwNjMyNDAzRkZCRjNFCis6MTAxMDQwMDAwMDQzMTAyNEEwODIwMDYzMEEwMDFCNTE4RTQzMDAyMDNECis6MTAxMDUwMDA5MDgyMDA2MzAwNjIxMDI0MzA0MjAwRkYxMDQwMDAyM0ExCis6MTAxMDYwMDA5NzgyMDAzQTkwODIwMDg4OTA4MzAwQkQyNDg1MDA4ODkyCis6MTAxMDcwMDAzMDQyMDAzRjI0NDRGRkUwMkM4MjAwMjBBMzgzMDAxQzY4Cis6MTAxMDgwMDAxMDQwMDAxOUFGODUwMDJDMjQwMjAwMDEwMDgyMTgwNEQyCis6MTAxMDkwMDAzMDYyMDAxOTE0NDAwMDBDM0MwMjgwMDAzNDQyMDAwMjBGCis6MTAxMEEwMDAwMDYyMTAyNDE0NDAwMDBCMzA2MjAwMjAxMDQwMDAwRjNBCis6MTAxMEIwMDA5NzgyMDAzQTkwQTYwMDAxMDI0MDIwMjEyNDA1MDAwMUY5Cis6MTAxMEMwMDAwQTAwMUI0QjMwQzYwMDAxMDI0MDIwMjEwQTAwMUI0QUM3Cis6MTAxMEQwMDAyNDA1MDAwMTAyNDAyMDIxMDAwMDI4MjEyNDA2MDAwMUVGCis6MTAxMEUwMDAwRTAwMTY0NjAwMDAwMDAwOTc4MjAwM0ExNDQwRkQwQ0U2Cis6MTAxMEYwMDA4Rjg0MDAxNDhFNDMwMDIwMzA2MjAwMDQxMDQwMDAxMkUwCis6MTAxMTAwMDA4Rjg0MDAzQzI0MDJGRkZCMDA2MjEwMjRBRTQyMDAyMENBCis6MTAxMTEwMDAyNzQzMDE4MDhGNDIwMUI4MDQ0MEZGRkU4RjgyMDA0OEMwCis6MTAxMTIwMDBBQzYyMDAwMDhGNDIwMTI0QUM2MjAwMDQyNDAyNjA4M0EwCis6MTAxMTMwMDBBNDYyMDAwODI0MDIwMDAyQTA2MjAwMEIzQzAyMTAwMDFFCis6MTAxMTQwMDBBRjQyMDFCODhGODQwMDNDOEY4MzAwMTQ4RkJGMDAzNEZFCis6MTAxMTUwMDA4RkI2MDAzMDhGQjUwMDJDOEZCNDAwMjg4RkIzMDAyNEQ5Cis6MTAxMTYwMDA4RkIyMDAyMDhGQjEwMDFDOEZCMDAwMTgyNDAyMDAwMTQ0Cis6MTAxMTcwMDAyN0JEMDAzODAzRTAwMDA4QUM2NDAwQzAzMEE1MDBGRkM0Cis6MTAxMTgwMDAyNDAzMDAwMTI0QTkwMDAxMDA2OTEwMkIxMDQwMDAwQzY5Cis6MTAxMTkwMDAwMDAwNDAyMTI0MEEwMDAxMDBBMzEwMjMwMDRBMzgwNDYzCis6MTAxMUEwMDAyNDYzMDAwMTMwODIwMDAxMDA2OTMwMkIxMDQwMDAwMkVFCis6MTAxMUIwMDAwMDA0MjA0MjAxMDc0MDI1NTRDMEZGRjgwMEEzMTAyMzdCCis6MTAxMUMwMDAwM0UwMDAwODAxMDAxMDIxM0MwMjA4MDAyNDQyNjBBNDUyCis6MTAxMUQwMDAzQzAxMDgwMEFDMjI3MzZDM0MwMjA4MDAyNDQyNTMwODE2Cis6MTAxMUUwMDAzQzAxMDgwMEFDMjI3MzcwMjQwMjAwMDYyN0JERkZFMDFBCis6MTAxMUYwMDAzQzAxMDgwMEEwMjI3Mzc0M0MwMjFFRENBRkIyMDAxODUwCis6MTAxMjAwMDBBRkIxMDAxNEFGQkYwMDFDQUZCMDAwMTAzNDUyNkY0MTNCCis6MTAxMjEwMDAwMDAwODgyMTI0MDUwMDA4MEUwMDFCNzIwMjIwMjAyMUY2Cis6MTAxMjIwMDAwMDExODA4MDNDMDcwODAwMjRFNzczNzgwMDAyMTYwMDU0Cis6MTAxMjMwMDAwMjA3MTgyMUFDNjIwMDAwMDAwMDI4MjEyNEEyMDAwMTRFCis6MTAxMjQwMDAzMDQ1RkZGRjhDNjIwMDAwMkNBNjAwMDgwNDQxMDAwMjFDCis6MTAxMjUwMDAwMDAyMjA0MDAwOTIyMDI2MTRDMEZGRjhBQzY0MDAwMDc5Cis6MTAxMjYwMDAwMjA3ODAyMThFMDQwMDAwMEUwMDFCNzIyNDA1MDAyMDVFCis6MTAxMjcwMDAyNjIzMDAwMTMwNzFGRkZGMkUyMzAxMDAxNDYwRkZFNURCCis6MTAxMjgwMDBBRTAyMDAwMDhGQkYwMDFDOEZCMjAwMTg4RkIxMDAxNDk3Cis6MTAxMjkwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjAyN0JERkZEODU1Cis6MTAxMkEwMDBBRkIzMDAxQ0FGQjIwMDE4QUZCRjAwMjBBRkIxMDAxNDQ1Cis6MTAxMkIwMDBBRkIwMDAxMDhGNTEwMTQwOEY0ODAxNDgwMDA4OTQwMkUwCis6MTAxMkMwMDAzMjQzMDBGRjMxMTMwMEZGOEY0MjAxQjgwNDQwRkZGRTlDCis6MTAxMkQwMDAyNzUwMDE4MEFFMTEwMDAwOEY0MjAxNDRBRTAyMDAwNDhECis6MTAxMkUwMDAyNDAyMDAwMkE2MTIwMDA4QTIwMjAwMEIyNDAyMDAxNDJECis6MTAxMkYwMDBBRTEzMDAyNDEwNjIwMDI1Mjg2MjAwMTUxMDQwMDAwODdCCis6MTAxMzAwMDAyNDAyMDAxNTI0MDIwMDEwMTA2MjAwMzAyNDAyMDAxMjkyCis6MTAxMzEwMDAxMDYyMDAwOThGQkYwMDIwMEEwMDFDQUQ4RkIzMDAxQ0IzCis6MTAxMzIwMDAxMDYyMDA3MDI0MDIwMDIyMTA2MjAwMzc4RkJGMDAyMDdDCis6MTAxMzMwMDAwQTAwMUNBRDhGQjMwMDFDM0MwMjA4MDA4QzQyMzFBMDk3Cis6MTAxMzQwMDAyNDAzRkY4MDAyMjIxMDIxMDA0MzEwMjRBRjQyMDAyNDE2Cis6MTAxMzUwMDAzQzAyMDgwMDhDNDIzMUEwMDIyMjEwMjEzMDQyMDA3RjYyCis6MTAxMzYwMDAwMzQyMTgyMTNDMDIwMDBBMDA2MjE4MjExNjYwMDBCQ0VBCis6MTAxMzcwMDBBRjgzMDAxNDkwNjIwMDYyMzA0MjAwMEYzNDQyMDAzMEFDCis6MTAxMzgwMDBBMDYyMDA2MjBBMDAxQ0FDOEZCRjAwMjAzQzA0NjAwMDE5Cis6MTAxMzkwMDA4QzgzMkMwODNDMDJGMDAzMzQ0MkZGRkYwMDYyMTgyNEM3Cis6MTAxM0EwMDBBQzgzMkMwODNDMDIwODAwOEM0MjMxQTA4QzgzMkMwOEIyCis6MTAxM0IwMDAyNDQyMDA3NDAwMDIxMDgyMDAwMjE0ODAwMDYyMTgyNThBCis6MTAxM0MwMDBBQzgzMkMwODBBMDAxQ0FDOEZCRjAwMjAzQzAyMDgwMDM0Cis6MTAxM0QwMDA4QzQyMzFBMDI0MDNGRjgwMDIyMjEwMjEwMDQzMTAyNEZDCis6MTAxM0UwMDBBRjQyMDAyNDNDMDIwODAwOEM0MjMxQTAzQzAzMDAwQUJBCis6MTAxM0YwMDAwMjIyMTAyMTMwNDIwMDdGMDM0MjEwMjEwMDQzMTAyMUJECis6MTAxNDAwMDAwQTAwMUNBQkFGODIwMDE0M0MwMjA4MDA4QzQyMzFBMEUxCis6MTAxNDEwMDAyNDA1RkY4MDAyMjIxMDIxMDA0NTEwMjRBRjQyMDAyNDQxCis6MTAxNDIwMDAzQzAyMDgwMDhDNDIzMUEwMDIyMjEwMjEzMDQyMDA3RjkxCis6MTAxNDMwMDAwMzQyMTgyMTNDMDIwMDBBMDA2MjE4MjE5MDYyMDA2M0Y2Cis6MTAxNDQwMDAwMEEyMTAyNDMwNDIwMEZGMTA0MDAwODVBRjgzMDAxNDNBCis6MTAxNDUwMDAyNDYyMDA4ODk0NDMwMDEyM0MwMjA4MDA4QzQyMzFBOEE4Cis6MTAxNDYwMDAzMDYzM0ZGRjAwMDMxOTgwMDIyMjEwMjEwMDQzMTAyMTQ2Cis6MTAxNDcwMDAzMDQzMDA3RjAzNDMyMDIxMDA0NTEwMjQzQzAzMDAwQzJGCis6MTAxNDgwMDAwMDgzMjAyMUFGNDIwMDI4OTA4MjAwMEQwMEEyMTAyNDhBCis6MTAxNDkwMDAzMDQyMDBGRjEwNDAwMDcyQUY4NDAwMjQ5MDgyMDAwREEzCis6MTAxNEEwMDAzMDQyMDAxMDE0NDAwMDZGOEZCRjAwMjAwRTAwMTVDODlFCis6MTAxNEIwMDAwMDAwMDAwMDhGNDIwMUI4MDQ0MEZGRkUwMDAwMDAwMDYxCis6MTAxNEMwMDBBRTExMDAwMDhGNDIwMTQ0QUUwMjAwMDQyNDAyMDAwMjZCCis6MTAxNEQwMDBBNjEyMDAwOEEyMDIwMDBCQUUxMzAwMjQwQTAwMUNBQ0U2Cis6MTAxNEUwMDA4RkJGMDAyMDI0MDZGRjgwMDIyNjEwMjRBRjQyMDAyMDc4Cis6MTAxNEYwMDAzQzAyMDgwMDhDNDIzMUEwMzEwNDNGRkYwMDA0MjE4MEVGCis6MTAxNTAwMDAwMjIyMTAyMTAwNDYxMDI0QUY0MjAwMjQzQzAzMDgwMEIwCis6MTAxNTEwMDA4QzYzMzFBODNDMDIwODAwOEM0MjMxQTAzMjI3MDA3RjQ2Cis6MTAxNTIwMDAwMjIzMTgyMTAyMjIxMDIxMDA2NDE4MjEzMDQyMDA3RjdBCis6MTAxNTMwMDAzMDY0MDA3RjAzNDIyODIxM0MwMjAwMEEwMDY2MTgyNDIwCis6MTAxNTQwMDAwMEEyMjgyMTAzNDQyMDIxM0MwMjAwMEMwMDgyMjAyMTFCCis6MTAxNTUwMDBBRjQzMDAyODNDMDIwMDA4MDM0NzE4MjEwMDYyOTAyMTk1Cis6MTAxNTYwMDBBRjg1MDAxNEFGODQwMDI0MEUwMDE1QzgwMTAwODAyMTRGCis6MTAxNTcwMDA4RjQyMDFCODA0NDBGRkZFOEY4MjAwMjQ4Rjg0MDAxNDQ0Cis6MTAxNTgwMDAyNzQ1MDE4MDkwNDIwMDBEQUNCMTAwMDBBNEIwMDAwNkQ4Cis6MTAxNTkwMDAwMDAyMTYwMDAwMDIxNjAzMDAwMjEwMjcwMDAyMzdDMkU0Cis6MTAxNUEwMDAxNEMwMDAxNjI0ODIwMDg4OTQ0MjAwMTIzMjAzM0ZGRkM4Cis6MTAxNUIwMDAzMDQyM0ZGRjE0NDMwMDEyMjQwMjYwODI5MDgzMDA2Mzk0Cis6MTAxNUMwMDAyNDAyRkY4MDAwNDMxMDI0MzA0MjAwRkY1MDQwMDAwQ0YyCis6MTAxNUQwMDAyNDAyNjA4MjkwODIwMDYyMzA0MjAwMEYzNDQyMDA0MDU4Cis6MTAxNUUwMDBBMDgyMDA2MjI0MDI2MDg0QTRBMjAwMDgyNDAyMDAwREVDCis6MTAxNUYwMDBBMEEyMDAwNTBBMDAxQzk2M0MwMjI3MDAyNDAyNjA4MjdCCis6MTAxNjAwMDBBNEEyMDAwOEEwQTAwMDA1M0MwMjI3MDAwMDA2MUMwMEMwCis6MTAxNjEwMDAwMDYyMTgyNTI0MDIwMDAyQTBBMjAwMEJBQ0EzMDAxMDU3Cis6MTAxNjIwMDBBQ0EwMDAxNEFDQTAwMDI0QUNBMDAwMjhBQ0EwMDAyQ0ZFCis6MTAxNjMwMDA4RTQyMDA0QzhGODQwMDI0QUNBMjAwMTg5MDgzMDAwREQxCis6MTAxNjQwMDAyNDAyRkY4MDAwNDMxMDI0MzA0MjAwRkYxMDQwMDAwNUI4Cis6MTAxNjUwMDA4RkJGMDAyMDkwODIwMDBEMzA0MjAwN0ZBMDgyMDAwRERECis6MTAxNjYwMDA4RkJGMDAyMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNDAxCis6MTAxNjcwMDA4RkIwMDAxMDNDMDIxMDAwMjdCRDAwMjgwM0UwMDAwOEQ2Cis6MDQxNjgwMDBBRjQyMDFCOEJDCis6MEMxNjg0MDAwODAwMzQzMDA4MDAzNDMwMDgwMDMzQTg5RgorOjEwMTY5MDAwMDgwMDMzRTAwODAwMzQxNDA4MDAzNDM4MDgwMDM0MzhGNworOjA4MTZBMDAwMDgwMDM0MzgwODAwMzMxODdCCis6MDgxNkE4MDAwQTAwMDEyNDAwMDAwMDAwMEIKKzoxMDE2QjAwMDAwMDAwMDAwMDAwMDAwMEQ3NDcwNjEzNjJFMzIyRTMxRTMKKzoxMDE2QzAwMDAwMDAwMDAwMDYwMjAxMDEwMDAwMDAwMDAwMDAwMDAwMTAKKzoxMDE2RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEKKzoxMDE2RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkEKKzoxMDE2RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUEKKzoxMDE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDkKKzoxMDE3MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzkKKzoxMDE3MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjkKKzoxMDE3MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAzOTYKKzoxMDE3NDAwMDAwMDAwMDAwMDAwMDAwMEQwMDAwMDAwRDNDMDIwODAwMzkKKzoxMDE3NTAwMDI0NDIxQzAwM0MwMzA4MDAyNDYzMjA5NEFDNDAwMDAwOTkKKzoxMDE3NjAwMDAwNDMyMDJCMTQ4MEZGRkQyNDQyMDAwNDNDMUQwODAwOTAKKzoxMDE3NzAwMDM3QkQyRkZDMDNBMEYwMjEzQzEwMDgwMDI2MTAwNDkwNzgKKzoxMDE3ODAwMDNDMUMwODAwMjc5QzFDMDAwRTAwMDE1QzAwMDAwMDAwQUYKKzoxMDE3OTAwMDAwMDAwMDBEMzA4NEZGRkYzMDgyMDAwNzhGODUwMDE4QTUKKzoxMDE3QTAwMDEwNDAwMDAyMjQ4MzAwMDczMDY0RkZGODAwODUzMDIxRDgKKzoxMDE3QjAwMDMwQzQxRkZGMDM0NDE4MjEyNDdCNDAwMEFGODUwMDFDNjgKKzoxMDE3QzAwMEFGODQwMDE4MDNFMDAwMDhBRjQ0MDA4NDMwODRGRkZGQkEKKzoxMDE3RDAwMDMwODIwMDA3OEY4NTAwMjA4Rjg2MDAyODEwNDAwMDAyOEQKKzoxMDE3RTAwMDI0ODMwMDA3MzA2NEZGRjgwMDg1MjAyMTAwODYxODJCMzEKKzoxMDE3RjAwMDE0NjAwMDAyQUY4NTAwMjQwMDg2MjAyMzAzNDQyODIxQzIKKzoxMDE4MDAwMDM0MDY4MDAwQUY4NDAwMjBBRjQ0MDA4MDAwQTYyMDIxNzEKKzoxMDE4MTAwMDAzRTAwMDA4QUY4NDAwMzgyN0JERkZEOEFGQjMwMDFDMzkKKzoxMDE4MjAwMEFGQjIwMDE4QUZCMDAwMTBBRkJGMDAyNEFGQjQwMDIwQkIKKzoxMDE4MzAwMEFGQjEwMDE0M0MwODYwMDg4RDE0NTAwMDI0MThGRjdGREQKKzoxMDE4NDAwMDNDMUE4MDAwMDI5ODk4MjQzNjcyMzgwQ0FEMTI1MDAwNzEKKzoxMDE4NTAwMDhGNTEwMDA4M0MwNzYwMUMzQzA4NjAwMDM2MzAwMDAxRDYKKzoxMDE4NjAwMEFGNTAwMDA4QUY4MDAwMThBRjQwMDA4MEFGNDAwMDg0NDgKKzoxMDE4NzAwMDhDRTYwMDA4OEQwRjA4MDgzQzA3NjAxNjhDRUMwMDAwMTEKKzoxMDE4ODAwMDMxRUVGRkYwMzlDQTAwMTAzQzBERkZGRjM0MEI4MDAwMzEKKzoxMDE4OTAwMDNDMDMwMDgwMDM0QjQ4MjEyRDQ0MDAwMTAxOEQyODI0ODYKKzoxMDE4QTAwMDNDMDI1MzUzM0MwMTA4MDBBQzIzMDQyMEFGODkwMDM4QUMKKzoxMDE4QjAwMEFGODYwMDI4QUY4NDAwMTAyNzVCNDAwMDE0QTIwMDAzMEQKKzoxMDE4QzAwMDM0RTM3QzAwOENGOTAwMDQwMzI4MTgyMThDN0YwMDdDMTEKKzoxMDE4RDAwMDhDNjUwMDc4M0MwMjgwMDAzQzBCMDgwMDhENkIwNDhDMEEKKzoxMDE4RTAwMDNDMEEwODAwOEQ0QTA0ODgzNDUyMDA3MEFGODUwMDNDRTEKKzoxMDE4RjAwMEFGOUYwMDQwM0MxMzA4MDAyNjczMUM0NDAyNDBBMDIxMDcKKzoxMDE5MDAwMDhFNDgwMDAwOEY0NjAwMDAzOEMzMDAwMTMwNjQwMDAxOUIKKzoxMDE5MTAwMDEwODAwMDE3QUY4ODAwMzQwMjgwNDgyMThEMkYwMDAwMEUKKzoxMDE5MjAwMDNDMDUwODAwOENBNTA0NUMzQzE4MDgwMDhGMTgwNDU4N0UKKzoxMDE5MzAwMDAxRTgxMDIzMDBBMjgwMjEwMDAwQzgyMTAyMDI0MDJCRjAKKzoxMDE5NDAwMDAzMTk4ODIxMDIyODM4MjEzQzAxMDgwMEFDMzAwNDVDQ0UKKzoxMDE5NTAwMDNDMDEwODAwQUMyNzA0NTg4RjRFMDAwMDM5Q0QwMDAxMkYKKzoxMDE5NjAwMDMxQUMwMDAxMTU4MEZGRUQwMUUwNDAyMUFGOEYwMDM0NjQKKzoxMDE5NzAwMDhFNTEwMDAwM0MwNzA4MDA4Q0U3MDQ1QzNDMEQwODAwMTkKKzoxMDE5ODAwMDhEQUQwNDU4MDIyODgwMjMwMEYwNjAyMTAwMDA3MDIxRjIKKzoxMDE5OTAwMDAxOTAzMDJCMDFBRTE4MjEwMDY2MjAyMTNDMDEwODAwODcKKzoxMDE5QTAwMEFDMkMwNDVDM0MwMTA4MDBBQzI0MDQ1ODhGNDYwMTA4QjAKKzoxMDE5QjAwMDhGNDcwMTAwMzBDOTIwMDBBRjg2MDAwMEFGODcwMDBDQzAKKzoxMDE5QzAwMDExMjAwMDBBMDBDMDQwMjEzQzE4MDgwMDhGMTgwNDJDODgKKzoxMDE5RDAwMDI3MDgwMDAxM0MwMTA4MDBBQzI4MDQyQzNDMTg0MDAwRkEKKzoxMDE5RTAwMEFGNTgwMTM4MEEwMDAxOTYwMDAwMDAwMDk3NDkwMTA0MzEKKzoxMDE5RjAwMDAwMDAyODIxMDE0NTUwMjEzMTIyRkZGRjAxNjI1ODIxQkEKKzoxMDFBMDAwMDAxNjJGODJCMDE1RjUwMjEzMEQ5MDIwMDNDMDEwODAwMkYKKzoxMDFBMTAwMEFDMkIwNDhDM0MwMTA4MDBBQzJBMDQ4ODE3MjAwMDE1NkMKKzoxMDFBMjAwMDI0MDQwRjAwMTBFNDAwMTMwMDAwMDAwMDI0MDgwRDAwM0YKKzoxMDFBMzAwMDEwRTgwMjNCMzBDRDAwMDYxMUEwRkZFOTNDMTg0MDAwNDEKKzoxMDFBNDAwMDkzNkUwMDAwMjQwOTAwMTAzMUM0MDBGMDEwODkwMjcxNjcKKzoxMDFBNTAwMDI0MDIwMDcwMTA4MjAyRTU4Rjg4MDAxNDI1MEYwMDAxMTcKKzoxMDFBNjAwMEFGOEYwMDE0M0MxODQwMDBBRjU4MDEzODBBMDAwMTk2QUYKKzoxMDFBNzAwMDAwMDAwMDAwOTc0QzAxMDQxMTgwRkZEOTNDMTg0MDAwODEKKzoxMDFBODAwMDMwQzM0MDAwMTQ2MDAwQTEwMDAwMDAwMDhGNDYwMTc4QzAKKzoxMDFBOTAwMDA0QzBGRkZFOEY4NzAwMzgyNDEwMDgwMDI0MEYwMDA4QzAKKzoxMDFBQTAwMDhDRTMwMDA4QUY1MDAxNzhBNzRGMDE0MEE3NDAwMTQyRTYKKzoxMDFBQjAwMDk3NEUwMTA0OEY4NjAwMDAzMUM5RkZGRjMwQ0QwMDAxMzEKKzoxMDFBQzAwMDExQTAwMkUxMDEyMDQwMjEyNTMxRkZGRTI0MTgwMDAyNkYKKzoxMDFBRDAwMEE3NTgwMTQ2MzIyOEZGRkZBNzUxMDE0ODNDMTkwODAwQ0EKKzoxMDFBRTAwMDhGMzkwNDNDMTcyMDAyRDA4RjhDMDAwQzMwREYwMDIwOEYKKzoxMDFBRjAwMDE3RTAwMDAyMjQwNDAwMDkyNDA0MDAwMTMwQzIwQzAwOTUKKzoxMDFCMDAwMDI0MDUwNDAwNTA0NTAwMDEzNDg0MDAwNEE3NDQwMTRBMjAKKzoxMDFCMTAwMDNDMTEwODAwOEUzMTA0MjAzQzE4MDA0ODNDMTAwMDAxQTQKKzoxMDFCMjAwMDAyMzgxODI1MzBDRjAwMDIwMDcwMjgyNTExRTAwMDA0OEIKKzoxMDFCMzAwMDAwMDAxODIxM0MxOTAxMDAwMEI5MjgyNTI0MDMwMDAxRTgKKzoxMDFCNDAwMDMwREYwMDA0NTNFMDAwMDVBRjgzMDAwODNDMDYwMDEwQkUKKzoxMDFCNTAwMDAwQTYyODI1MjQwMzAwMDFBRjgzMDAwOEFGNDUxMDAwMkMKKzoxMDFCNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzUKKzoxMDFCNzAwMDhGODMwMDA4MTA2MDAwMjMwMDAwMDAwMDhGNDUxMDAwRDQKKzoxMDFCODAwMDA0QTFGRkZFMDAwMDAwMDAxMDYwMDAxRTAwMDAwMDAwMjUKKzoxMDFCOTAwMDhGNDQxMDAwM0MwQzAwMjAwMDhDMTAyNDEwNDAwMDE5RDEKKzoxMDFCQTAwMDhGOEUwMDAwMzFDRDAwMDIxMUEwMDAxNjAwMDAwMDAwNTEKKzoxMDFCQjAwMDk3NEYxMDE0MTVFMDAwMTMwMDAwMDAwMDk3NTkxMDA4MEIKKzoxMDFCQzAwMDMzMzhGRkZGMjcxMTAwMDYwMDExMTg4MjAwMDMzMDgwMTAKKzoxMDFCRDAwMDAwQzcyODIxMzIzMDAwMDEzMjIzMDAwMzEyMDAwMzJDRjkKKzoxMDFCRTAwMDhDQTIwMDAwMDAwMDAwMEQwMEM3RjgyMUFGRTIwMDAwNDkKKzoxMDFCRjAwMDNDMDUwODAwOENBNTA0MzAyNEE2MDAwMTNDMDEwODAwMjcKKzoxMDFDMDAwMEFDMjYwNDMwOEY2RDAwMDAzNDAyRkZGRkFGOEQwMDA0NUUKKzoxMDFDMTAwMDhDRUMwMDAwMTE4MjAyQTYwMDAwMjAyMThDRUQwMDAwNTcKKzoxMDFDMjAwMDMxQUMwMTAwMTE4MDAyOEEwMDAwMDAwMDNDMDIwODAwNzMKKzoxMDFDMzAwMDhDNDIwNDc0M0MwMzA4MDA4QzYzMDQ0QzNDMUYwODAwNzUKKzoxMDFDNDAwMDhGRkYwNDcwM0MxODA4MDA4RjE4MDQ0ODAwNDgzODIxQTIKKzoxMDFDNTAwMDAwNjg4MDIxMDBFODI4MkIwM0U0MzAyMTAyMDg0MDJCOTMKKzoxMDFDNjAwMDAzMDQ4ODIxMDBDNTcwMjEwMjI4NzgyMTNDMDEwODAwNjYKKzoxMDFDNzAwMEFDMzAwNDRDM0MwMTA4MDBBQzJGMDQ0ODNDMDEwODAwODcKKzoxMDFDODAwMEFDMjcwNDc0M0MwMTA4MDBBQzJFMDQ3MDhGODQwMDE4NEIKKzoxMDFDOTAwMDAxMjAzMDIxMzEyOTAwMDcyNDlGMDAwODMzRjkxRkZGNUMKKzoxMDFDQTAwMDAzNTk0MDIxQUY4NDAwMUNBRjk5MDAxODI1MUI0MDAwNDgKKzoxMDFDQjAwMEFGNTkwMDg0MTEyMDAwMDM4RjgzMDAyMDI0QzIwMDA3NDUKKzoxMDFDQzAwMDMwNDZGRkY4OEY4NDAwMjgwMEMzMjgyMTAwQTQzMDJCNjEKKzoxMDFDRDAwMDE0QzAwMDAyQUY4MzAwMjQwMEE0MjgyMzAzNDU2MDIxMjAKKzoxMDFDRTAwMDM0MEQ4MDAwMDE4RDEwMjEzQzBGMTAwMEFGODUwMDIwQzUKKzoxMDFDRjAwMEFGODIwMDM4QUY0NTAwODBBRjRGMDE3ODhGODgwMDE0NjUKKzoxMDFEMDAwMDI1MEYwMDAxMEEwMDAxRUZBRjhGMDAxNDhGNjIwMDA4NTkKKzoxMDFEMTAwMDhGNjcwMDAwMjQwNTAwMzAwMDA3NzYwMjMxQzMwMEYwMTEKKzoxMDFEMjAwMDEwNjUwMEE3MjQwRjAwNDA1NDZGRkY0QzhGODgwMDE0RUIKKzoxMDFEMzAwMDhGNEIwMTc4MDU2MEZGRkUwMDAwMDAwMDMwQ0EwMjAwRjIKKzoxMDFENDAwMDE1NDAwMDAzMDAwNjEyODIwMDAwMDAwRDAwMDYxMjgyRkEKKzoxMDFENTAwMDMwNEQwMDAzMDAwRDQ5MDAwMTJEMTgyMTAwMDM4MDgwNDMKKzoxMDFENjAwMDAyMEQ0MDIxMDAwODYwODAwMTkzODAyMThFMUYwMDAwMzkKKzoxMDFENzAwMDE3RTAwMDAyMDAwMDAwMDAwMDAwMDAwRDhGNkUwMDA0NUMKKzoxMDFEODAwMDA1QzIwMkJEOTIwNzAwMDY5MjBFMDAwNTkyMDIwMDA0RjEKKzoxMDFEOTAwMDNDMDkwMDAxMDAwRTE4ODAwMDcwRjgyMThGRUQwMDE4M0EKKzoxMDFEQTAwMDI3NzEwMDA4MjQ0ODAwMDUwMUE5NjAyMTAwMDgzMDgyM0QKKzoxMDFEQjAwMEFGRUMwMDE4MDIyMDIwMjEwRTAwMDU5RTI2MDUwMDE0MUQKKzoxMDFEQzAwMDkyMEEwMDA2OEY3OTAwMDQzQzBCN0ZGRjAwMEEyMDgwRjYKKzoxMDFERDAwMDAwOTE3ODIxOERGODAwMDQzNTY2RkZGRjAzMjYyODI0NDIKKzoxMDFERTAwMDAzMDUzODIxQURFNzAwMDQ5MjBFMDAwNTkyMEQwMDA0QjIKKzoxMDFERjAwMDk2MEMwMDA4MDAwRTEwODAwMDUxQzgyMThGMjMwMDAwQUYKKzoxMDFFMDAwMDk3NDkwMTA0M0MwN0ZGRkYwMDY3NTgyNDMxMjhGRkZGNzIKKzoxMDFFMTAwMDAxMERGODIxMDNFQzUwMjMzMTQ0RkZGRjAxNjQzMDI1MEMKKzoxMDFFMjAwMEFGMjYwMDAwOTIwMzAwMDcyNDE4MDAwMTEwNzgwMjc1MDUKKzoxMDFFMzAwMDI0MEYwMDAzMTA2RjAyODUwMDAwMDAwMDhFMDUwMDEwQzMKKzoxMDFFNDAwMDI0MTkwMDBBQTc1OTAxNDBBNzQ1MDE0MjkyMTgwMDA0MkQKKzoxMDFFNTAwMDhGODYwMDAwMjQwRjAwMDFBNzU4MDE0NEE3NDAwMTQ2QzcKKzoxMDFFNjAwMDk3NDcwMTA0MzBEMTAwMDIzQzA1MDA0MUE3NDcwMTQ4RDMKKzoxMDFFNzAwMDAwMDAxODIxQTc0RjAxNEExMjIwMDAwMzMwQ0IwMDA0QjQKKzoxMDFFODAwMDNDMDUwMTQxMjQwMzAwMDE1MTYwMDAwNUFGODMwMDA4QjcKKzoxMDFFOTAwMDNDMDYwMDEwMDBBNjI4MjUyNDAzMDAwMUFGODMwMDA4OUIKKzoxMDFFQTAwMEFGNDUxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkUKKzoxMDFFQjAwMDAwMDAwMDAwOEY4QTAwMDgxMTQwMDAwNDAwMDAwMDAwQUMKKzoxMDFFQzAwMDhGNDQxMDAwMDQ4MUZGRkUwMDAwMDAwMDhGNkIwMDAwQjMKKzoxMDFFRDAwMDkyMDgwMDA0M0MxMTA4MDA4RTMxMDQ0NEFGOEIwMDA0Q0EKKzoxMDFFRTAwMDk3NTkwMTA0MzExODAwRkYzQzBFMDgwMDhEQ0UwNDQwQzQKKzoxMDFFRjAwMDMzMjVGRkZGMDMwNTM4MjEwMjI3NjAyMTAwMDAxMDIxNTAKKzoxMDFGMDAwMDI1MEYwMDBBMzFFOEZGRkYwMTg3NDgyQjAxQzI2ODIxMzUKKzoxMDFGMTAwMDAxQTlGODIxMzExMDAwMDczQzAxMDgwMEFDMkMwNDQ0NTEKKzoxMDFGMjAwMDNDMDEwODAwQUMzRjA0NDAxMjAwMDAwMzhGOEMwMDE4RjUKKzoxMDFGMzAwMDI1MDYwMDA3MzBDOEZGRjgwMTBDNjgyMTMxQkYxRkZGREMKKzoxMDFGNDAwMEFGOEMwMDFDQUY5RjAwMThBRjVGMDA4NDk3NDQwMTA0NjIKKzoxMDFGNTAwMDAzNUY4MDIxMzA4NEZGRkYzMDhBMDAwNzExNDAwMDAzQjcKKzoxMDFGNjAwMDI2MUI0MDAwMjQ4OTAwMDczMTI0RkZGODhGODIwMDIwQkYKKzoxMDFGNzAwMDhGODUwMDI4MDA4MjIwMjEwMDg1NzAyQjE1QzAwMDAyNkIKKzoxMDFGODAwMEFGODIwMDI0MDA4NTIwMjMzQzBCMDgwMDhENkIwNDhDNUQKKzoxMDFGOTAwMDNDMEEwODAwOEQ0QTA0ODgwMzQ0ODgyMTM0MDM4MDAwRTkKKzoxMDFGQTAwMDAyMjMxMDIxM0MwRjEwMDBBRjg0MDAyMEFGODIwMDM4QzQKKzoxMDFGQjAwMEFGNDQwMDgwQUY0RjAxNzgwQTAwMDI5NjhGODgwMDE0NkEKKzoxMDFGQzAwMDhGNTAwMTc4MDYwMEZGRkUzMEQxMDIwMDE2MjAwMDAzN0EKKzoxMDFGRDAwMDAwMDYxMjgyMDAwMDAwMEQwMDA2MTI4MjMwNUYwMDAzMkUKKzoxMDFGRTAwMDAwMUYxOTAwMDA3RjMwMjEwMDA2MjA4MDAwOUZDODIxQkIKKzoxMDFGRjAwMDAwMTk0ODgwMDEzMzgwMjE4RTE4MDAwMDEzMDAwMDAyNzAKKzoxMDIwMDAwMDAwMDAwMDAwMDAwMDAwMEQ4RjZDMDAwQzA1ODAwMUZCM0IKKzoxMDIwMTAwMDhGODcwMDM4MjQwRTAwMDFBRTBFMDAwMDhDRTMwMDA4MEMKKzoxMDIwMjAwMEEyMDAwMDA3OEY2NTAwMDQwMDA1NTQwMjMxNEQwMEZGMzcKKzoxMDIwMzAwMDI1QTgwMDA1MDAwODMwODIyQ0NCMDA0MTE1NjAwMDAyNjUKKzoxMDIwNDAwMEEyMEEwMDA0MDAwMDAwMEQ4Rjc4MDAwNDNDMDNGRkZGOEIKKzoxMDIwNTAwMDAwRTAyODIxMzMwQkZGRkYyNTZDMDAwQjAwMEMxMDgyRTEKKzoxMDIwNjAwMDAwMDIyMDgwMDA4NzQ4MjE4RDNGMDAwMDI2MDQwMDE0RDQKKzoxMDIwNzAwMEE2MTgwMDA4MDNFM0M4MjQwRTAwMDU5RUFEMzkwMDAwMzEKKzoxMDIwODAwMDhGNEYwMTA4M0MxMTEwMDAwMUYxMzgyNDEwRTAwMUFCMjIKKzoxMDIwOTAwMDAwMDAwMDAwOTc0RDAxMDQ5MjA4MDAwNzI1QUFGRkVDRkMKKzoxMDIwQTAwMDM1MDYwMDAyMzE0NEZGRkZBMjA2MDAwNzk2MDYwMDA4MkQKKzoxMDIwQjAwMDJDQzcwMDEzNTRFMDAwMDU5MjAzMDAwNzkyMTEwMDA3OUIKKzoxMDIwQzAwMDM2MkYwMDAxQTIwRjAwMDc5MjAzMDAwNzI0MTgwMDAxMTkKKzoxMDIwRDAwMDEwNzgwMUMyMjQwOTAwMDMxMDY5MDFENThGODgwMDM4RTcKKzoxMDIwRTAwMDMwQ0JGRkZGMjU3MTAwMDIwMDExNzg4MzMxRTQwMEZGM0YKKzoxMDIwRjAwMDAwMDQyODgwQTIwRjAwMDUwMEE4NDgyMThEMkQwMDAwQjMKKzoxMDIxMDAwMDk3NEEwMTA0M0MwRUZGRkYwMUFFRjgyNDMxNDNGRkZGNjQKKzoxMDIxMTAwMDAwNkIxMDIzMjQ0Q0ZGRkUwM0VDQzgyNUFEMzkwMDAwRjIKKzoxMDIxMjAwMDkyMDYwMDA1M0MwM0ZGRjYzNDYyRkZGRjMwRDgwMEZGNDMKKzoxMDIxMzAwMDAwMTgzODgwMDBGMDg4MjE5MjJGMDAxNDNDMDRGRjdGQTMKKzoxMDIxNDAwMDM0ODdGRkZGMzFFRTAwMEYwMUM2NTgyMTMxNjUwMEZGRDMKKzoxMDIxNTAwMDAwMDU1MDgwMDE1MDY4MjE4REFDMDAyMDAxNDhGODIxMTUKKzoxMDIxNjAwMEEyMEIwMDA2MDE4MkM4MjRBRTBDMDAwQ0FGRjkwMDBDRDMKKzoxMDIxNzAwMDkyMDkwMDA2OEUxMTAwMEMwMzI3NzgyNDAwMDlDMDgwMDQKKzoxMDIxODAwMDAzMTA3MDIxOTVDNjAwMjYwMzA4MjgyMTAyMjcyMDI0NjkKKzoxMDIxOTAwMEFFMDQwMDBDQURDRjAwMjBBREM2MDAyNEFDQTYwMDEwRUMKKzoxMDIxQTAwMDhGODgwMDAwM0MwQjA4MDA4RDZCMDQ4QzNDMEEwODAwRjMKKzoxMDIxQjAwMDhENEEwNDg4MjQxRjAwMTAyNDE5MDAwMkE3NUYwMTQwRTMKKzoxMDIxQzAwMEE3NDAwMTQyQTc0MDAxNDRBNzU5MDE0Njk3NDkwMTA0OEQKKzoxMDIxRDAwMDI0MDcwMDAxMzEwNjAwMDIyNTM4RkZGRUE3NTgwMTQ4RjgKKzoxMDIxRTAwMDNDMDUwMDA5QTc0NzAxNEExMEMwMDAwMzAwMDAxODIxNjAKKzoxMDIxRjAwMDNDMDUwMTA5MjQwMzAwMDEzMTBDMDAwNDUxODAwMDA1NTUKKzoxMDIyMDAwMEFGODMwMDA4M0MwODAwMTAwMEE4MjgyNTI0MDMwMDAxMjMKKzoxMDIyMTAwMEFGODMwMDA4QUY0NTEwMDAwMDAwMDAwMDAwMDAwMDAwODAKKzoxMDIyMjAwMDAwMDAwMDAwMDAwMDAwMDA5MjA1MDAwNDI0QUUwMDAyM0YKKzoxMDIyMzAwMDMxQ0QwMDA3MDAwRDE4MjMzMDYyMDAwN0FFMDIwMDEwRjgKKzoxMDIyNDAwMDhGOTAwMDA4MTIwMDAwMDQwMDAwMDAwMDhGNEYxMDAwNjMKKzoxMDIyNTAwMDA1RTFGRkZFMDAwMDAwMDA4RjcxMDAwMDhGOEUwMDE4NjYKKzoxMDIyNjAwMDNDMDMwODAwOEM2MzA0NDRBRjkxMDAwNDk3NDUwMTA0Q0IKKzoxMDIyNzAwMDI1Q0YwMDEwMzFFNjFGRkYzMEEyRkZGRkFGOEUwMDFDRkMKKzoxMDIyODAwMEFGODYwMDE4QUY0NjAwODQyNDQ5RkZGRTNDMEMwODAwQ0UKKzoxMDIyOTAwMDhEOEMwNDQwOTc0RDAxMDQwMTIwODAyMTAwMDk0N0MzMjMKKzoxMDIyQTAwMDAwNzBDMDIxMzFBOUZGRkYwMzEwRjgyQjAxODhDODIxNUQKKzoxMDIyQjAwMDAzM0YyMDIxMDM0NjM4MjEzMTMxMDAwNzNDMDEwODAwNEIKKzoxMDIyQzAwMEFDMzgwNDQ0M0MwMTA4MDBBQzI0MDQ0MDEyMjAwMDAzNTQKKzoxMDIyRDAwMDI0RkI0MDAwMjUyNzAwMDczMEU5RkZGODhGODYwMDIwMDcKKzoxMDIyRTAwMDhGODQwMDI4MDEyNjM4MjEwMEU0QzAyQjE3MDAwMDAyNEIKKzoxMDIyRjAwMEFGODYwMDI0MDBFNDM4MjMwMzQ3MjAyMTM0MTk4MDAwRUUKKzoxMDIzMDAwMDAwOTkxMDIxM0MwRjEwMDBBRjg3MDAyMEFGODIwMDM4RTkKKzoxMDIzMTAwMEFGNDcwMDgwQUY0RjAxNzgwQTAwMDI5NjhGODgwMDE0MDMKKzoxMDIzMjAwMDk3NDcwMTA0MTBFMEZEQUUzQzE4NDAwMDhGNTgwMTc4M0IKKzoxMDIzMzAwMDA3MDBGRkZFMzBDNTQwMDAxMEEwMDAwMzNDMUYwMDA4NEUKKzoxMDIzNDAwMDAwMDAwMDBEM0MxRjAwMDhBRjVGMDE0MDI0MTAwODAwOTIKKzoxMDIzNTAwMDhGODYwMDAwQUY1MDAxNzg5NzQ0MDEwNDMwRDkwMDAxMDYKKzoxMDIzNjAwMDEzMjAwMEVEMzA4NkZGRkYyNENDRkZGRTI0MEQwMDAyNzkKKzoxMDIzNzAwMEE3NEQwMTQ2QTc0QzAxNDg4RjkxMDAxODI0MDgwMDBENzUKKzoxMDIzODAwMEE3NDgwMTRBOEY2MzAwMDAyNjJGMDAwODMxRTIxRkZGOTMKKzoxMDIzOTAwMDAzNDI3MDIxMzBDOTAwMDdBRjgzMDAwNEFGOTEwMDFDRDUKKzoxMDIzQTAwMEFGODIwMDE4MDBDMDM4MjFBRjQyMDA4NDExMjAwMDAzMjIKKzoxMDIzQjAwMDI1REI0MDAwMjREODAwMDczMzA3RkZGODhGODUwMDIwNzUKKzoxMDIzQzAwMDhGODQwMDI4MDBFNTMwMjEwMEM0MzgyQjE0RTAwMDAyN0YKKzoxMDIzRDAwMEFGODUwMDI0MDBDNDMwMjM4Rjg0MDAxNDAzNDZGODIxMDUKKzoxMDIzRTAwMDM0MEM4MDAwQUY4NjAwMjAwM0VDODAyMUFGNDYwMDgwRDMKKzoxMDIzRjAwMDI0OTkwMDAxM0MwNjEwMDAzQzE4NDAwMEFGNDYwMTc4Q0IKKzoxMDI0MDAwMEFGOTAwMDM4QUY5OTAwMTRBRjU4MDEzODBBMDAwMTk2MTgKKzoxMDI0MTAwMDAwMDAwMDAwOEY2MzAwMDA5NzUxMDEwNDMwNjdGRkZGNDgKKzoxMDI0MjAwMDMyMjhGRkZGOEY0RjAxNzgwNUUwRkZGRTMwRUMwMDA3RjgKKzoxMDI0MzAwMDAwMENGODIzMzNGMDAwMDcyNEY5RkZGRTI0MDQwMDBBRkYKKzoxMDI0NDAwMEE3NDQwMTQwQTc1MDAxNDJBNzU5MDE0NEE3NDAwMTQ2QjMKKzoxMDI0NTAwMEE3NDgwMTQ4OEY0NTAxMDgzMEI4MDAyMDE3MDAwMDAyNDYKKzoxMDI0NjAwMDI0MDMwMDA5MjQwMzAwMDEzMENEMDAwMkE3NDMwMTRBRTAKKzoxMDI0NzAwMDNDMDQwMDQxMTFBMDAwMDMwMDAwMTgyMTNDMDQwMTQxNkMKKzoxMDI0ODAwMDI0MDMwMDAxMzBDOTAwMDQ1MTIwMDAwNUFGODMwMDA4NzcKKzoxMDI0OTAwMDNDMDYwMDEwMDA4NjIwMjUyNDAzMDAwMUFGODMwMDA4QkQKKzoxMDI0QTAwMEFGNDQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjkKKzoxMDI0QjAwMDAwMDAwMDAwOEY4RTAwMDgxMUMwMDAwNDAwMDAwMDAwMjIKKzoxMDI0QzAwMDhGNDIxMDAwMDQ0MUZGRkUwMDAwMDAwMDhGN0YwMDAwREIKKzoxMDI0RDAwMDI3NjQwMDA4OEY5MTAwM0NBRjlGMDAwNDk0ODUwMDA4OUEKKzoxMDI0RTAwMDk0OTAwMDBBOTQ5OTAwMEMzMEFGRkZGRjAwMTBDNDAwRDQKKzoxMDI0RjAwMDMzMjNGRkZGMTFGMTAwQTYwMzAzMjAyNTNDMEUwODAwNDMKKzoxMDI1MDAwMDhEQ0UwNDQ0M0MwQzA4MDA4RDhDMDQ0MDAwRTg4ODIxRUEKKzoxMDI1MTAwMDI2MjZGRkZFMDFDNjI4MjEwMDAwNjgyMTAwQTZGODJCMTAKKzoxMDI1MjAwMDAxOEQyMDIxMDA5RjgwMjEzQzAxMDgwMEFDMjUwNDQ0M0UKKzoxMDI1MzAwMDNDMDEwODAwQUMzMDA0NDAyNEUyMDAwODMwNDJGRkZGQjgKKzoxMDI1NDAwMDMwNDcwMDA3MTBFMDAwMDM4RjgzMDAxODI0NEYwMDA3NzYKKzoxMDI1NTAwMDMxRTJGRkY4MzEwNkZGRkYzMEM4MDAwNzAwNDM4MDIxNTkKKzoxMDI1NjAwMDMyMTkxRkZGMDM1OUMwMjFBRjgzMDAxQ0FGOTkwMDE4MTcKKzoxMDI1NzAwMDI3MUI0MDAwQUY1OTAwODQxMTAwMDAwMzhGOEMwMDIwRkUKKzoxMDI1ODAwMDI0QzUwMDA3MzBBNkZGRjg4Rjg0MDAyODAwQ0MyODIxM0UKKzoxMDI1OTAwMDAwQTRGODJCMTdFMDAwMDJBRjhDMDAyNDAwQTQyODIzMkQKKzoxMDI1QTAwMEFGODUwMDIwQUY0NTAwODAzQzA0MDgwMDhDODQwNDM0RDMKKzoxMDI1QjAwMDAzNDU0ODIxMzQwRTgwMDAwMTJFNjgyMTEwODAwMDA1NUIKKzoxMDI1QzAwMEFGOEQwMDM4OTM5MTAwMTcyNDA2MDAwRTEyMjYwMDExREIKKzoxMDI1RDAwMDI0MDcwNDNGM0MwMjEwMDBBRjQyMDE3ODhGODgwMDE0QUEKKzoxMDI1RTAwMDI1MEYwMDAxMEEwMDAxRUZBRjhGMDAxNDBFMDAwNUM0OTMKKzoxMDI1RjAwMDAwRTAyMDIxOEY4ODAwMTQzQzBCMDgwMDhENkIwNDhDQjgKKzoxMDI2MDAwMDNDMEEwODAwOEQ0QTA0ODgyNTBGMDAwMTBBMDAwMUVGRUEKKzoxMDI2MTAwMEFGOEYwMDE0M0MwMjEwMDBBNzQ3MDE0OEFGNDIwMTc4NzkKKzoxMDI2MjAwMDBBMDAwNENFOEY4ODAwMTQyNDA0MEYwMDExODQwMDNEOUEKKzoxMDI2MzAwMDMwQ0UwMDIwMTVDMDAwMDIyNDAzMDAwOTI0MDMwMDAxNEQKKzoxMDI2NDAwMDBBMDAwMjFBQTc0MzAxNEEwQTAwMDIwREE3NDAwMTQ2RTgKKzoxMDI2NTAwMDk0RUYwMDA4OTRGMTAwMEE5NEYwMDAwQzhGOEMwMDNDNzkKKzoxMDI2NjAwMDAwMTE3NDAwMzIwN0ZGRkYzMUVERkZGRjExQUMwMDM3OUUKKzoxMDI2NzAwMDAxQzcyMDI1M0MxODA4MDA4RjE4MDQ0NDNDMEYwODAwQUYKKzoxMDI2ODAwMDhERUYwNDQwMDAwMDgwMjEwMzA4NjgyMTAxQTgzODJCNDkKKzoxMDI2OTAwMDAxRjA3MDIxMDFDNzYwMjEzQzAxMDgwMEFDMkQwNDQ0MDkKKzoxMDI2QTAwMDNDMDEwODAwQUMyQzA0NDAwQTAwMDI3QThGODQwMDE4MTgKKzoxMDI2QjAwMDNDMDIwODAwOEM0MjA0N0MzQzAzMDgwMDhDNjMwNDU0RjgKKzoxMDI2QzAwMDNDMUYwODAwOEZGRjA0NzgzQzE4MDgwMDhGMTgwNDUwNDYKKzoxMDI2RDAwMDAwNDgzODIxMDA2ODgwMjEwMEU4MjgyQjAzRTQzMDIxREQKKzoxMDI2RTAwMDAyMDg0MDJCMDMwNDg4MjEwMEM1NzAyMTAyMjg3ODIxQUMKKzoxMDI2RjAwMDNDMDEwODAwQUMzMDA0NTQzQzAxMDgwMEFDMkYwNDUwRUQKKzoxMDI3MDAwMDNDMDEwODAwQUMyNzA0N0MzQzAxMDgwMEFDMkUwNDc4OTYKKzoxMDI3MTAwMDBBMDAwMjdBOEY4NDAwMThBNzQwMDE0NjBBMDAwNDM1OTcKKzoxMDI3MjAwMDhGOTEwMDE4MzBDRDAwMjAxNUEwRkZDNTI0MDMwMDBEQTcKKzoxMDI3MzAwMDI0MDMwMDA1MEEwMDAyMUFBNzQzMDE0QTk3NEUwMTA0MjgKKzoxMDI3NDAwMDI1QzVGRkYwMEEwMDAzODEzMEE0RkZGRjhGOTgwMDQwRTkKKzoxMDI3NTAwMDE0OThGRkM4MDAwMDEwMjEzQzA1MDgwMDhDQTUwNDZDRUIKKzoxMDI3NjAwMDNDMUYwODAwOEZGRjA0NjgwMEE4QzgyMTAzMjgzMDJCRjUKKzoxMDI3NzAwMDAzRTIyMDIxMDA4NjQwMjEzQzAxMDgwMEFDMzkwNDZDQjIKKzoxMDI3ODAwMDNDMDEwODAwQUMyODA0NjgwQTAwMDI3QThGODQwMDE4MTMKKzoxMDI3OTAwMDhGOEMwMDQwMTQ4Q0ZGNTkwMEU4QzgyMTNDMTgwODAwQjkKKzoxMDI3QTAwMDhGMTgwNDZDM0MxMTA4MDA4RTMxMDQ2ODI3MjNGRkZFNEIKKzoxMDI3QjAwMDAzMDM0ODIxMDAwMDEwMjEwMTIzMzAyQjAyMjI3MDIxNDUKKzoxMDI3QzAwMDAxQzY2ODIxM0MwMTA4MDBBQzI5MDQ2QzNDMDEwODAwRUEKKzoxMDI3RDAwMEFDMkQwNDY4MEEwMDA0QTUyNEUyMDAwODhGODgwMDM4QTQKKzoxMDI3RTAwMDNDMDNGRkZGOEQwMjAwMEMwMDQzRjgyNDAzRTRDODI1REUKKzoxMDI3RjAwMEFEMTkwMDBDMEEwMDAzOEYzMENCRkZGRjBBMDAwM0MzQTIKKzoxMDI4MDAwMEFFMDAwMDAwOTc0QTAxMDQ5MjA0MDAwNDhFMjYwMDBDREEKKzoxMDI4MTAwMDAxNDQ1ODIxMjU3OUZGRjIwMEM3QzAyNDMzMjVGRkZGNkEKKzoxMDI4MjAwMDAzMDUzODI1QUUyNzAwMEMwQTAwMDJFNjhFMDUwMDEwQ0QKKzoxMDI4MzAwMDNDMERGRkZGOEQwQTAwMTAwMTRENTgyNDAxNjQ2MDI1RjYKKzoxMDI4NDAwMEFEMEMwMDEwMEEwMDAzOEYzMENCRkZGRjk3NDMwMTA0NEIKKzoxMDI4NTAwMDkyMEUwMDA0OEUyOTAwMTAwMDZFMTAyMTI0NERGRkVFMTAKKzoxMDI4NjAwMDAxMjc2MDI0MzFBOEZGRkYwMTg4RjgyNUFFM0YwMDEwNDIKKzoxMDI4NzAwMDBBMDAwMkU2OEUwNTAwMTA4RTBGMDAwQ0FFMDAwMDAwNkMKKzoxMDI4ODAwMDAwMDc4ODgwMDIzMDI4MjEwQTAwMDJCOEFDQUYwMDIwN0YKKzoxMDI4OTAwMDE0NjAwMDBEMzA1OEZGRkYzQzA0RkZGRjAwNDQ2ODI0MjMKKzoxMDI4QTAwMDAxQTQ3MDI2MDAwRTYwMkIwMDBEMTAyQjAwNENGODI0QTQKKzoxMDI4QjAwMDEzRTAwMDAyMDAwMDAwMDAwMDAwMDAwRDhDQUYwMDAwREIKKzoxMDI4QzAwMDBBMDAwMjUwMDFFNDEwMjUzQjAzRkZGRjAwMDM4ODJCQTAKKzoxMDI4RDAwMDAwMTg4MDJCMDIxMTIwMjQxMDgwMDAwMjAwMDAwMDAwNEMKKzoxMDI4RTAwMDAwMDAwMDBEOENCOTAwMDAwQTAwMDI1MDM3MjJGRkZGRTMKKzoxMDI4RjAwMDMwODRGRkZGMzBBNUZGRkYxMDgwMDAwNzAwMDAxODIxODMKKzoxMDI5MDAwMDMwODIwMDAxMTA0MDAwMDIwMDA0MjA0MjAwNjUxODIxQkUKKzoxMDI5MTAwMDE0ODBGRkZCMDAwNTI4NDAwM0UwMDAwODAwNjAxMDIxNDAKKzoxMDI5MjAwMDEwQzAwMDA3MDAwMDAwMDA4Q0EyMDAwMDI0QzZGRkZGQkEKKzoxMDI5MzAwMDI0QTUwMDA0QUM4MjAwMDAxNEMwRkZGQjI0ODQwMDA0MjIKKzoxMDI5NDAwMDAzRTAwMDA4MDAwMDAwMDAxMEEwMDAwODI0QTNGRkZGMUYKKzoxMDI5NTAwMEFDODYwMDAwMDAwMDAwMDAwMDAwMDAwMDI0MDJGRkZGMjEKKzoxMDI5NjAwMDI0NjNGRkZGMTQ2MkZGRkEyNDg0MDAwNDAzRTAwMDA4REMKKzoxMDI5NzAwMDAwMDAwMDAwMzA4RUZGRkYzMEQ4RkZGRjAwMDU3QzAwMTQKKzoxMDI5ODAwMDAxRjg2MDI1MzlDREZGRkYwMUFDNTAyMTAxNEM1ODJCRDcKKzoxMDI5OTAwMDAxNEI0ODIxMDAwOTQ0MDIzMTI3RkZGRjAwRTgzMDIxQTQKKzoxMDI5QTAwMDAwMDYyNDAyMzBDNUZGRkYwMEE0MTgyMTM4NjJGRkZGOTMKKzoxMDI5QjAwMDAzRTAwMDA4MzA0MkZGRkYzQzBDMDgwMDhEOEMwNDg0Q0IKKzoxMDI5QzAwMDI0MEJGRjgwMjdCREZGRDAwMTg0NTAyMTAxNEI0ODI0RjgKKzoxMDI5RDAwMEFGNDkwMDIwM0MwODA4MDA4RDA4MDQ4NEFGQjIwMDIwRjUKKzoxMDI5RTAwMEFGQjAwMDE4QUZCRjAwMjhBRkIzMDAyNEFGQjEwMDFDRDgKKzoxMDI5RjAwMDkzNjYwMDA0MDEwNDM4MjEzMEU0MDA3RjAwOUExMDIxMUUKKzoxMDJBMDAwMDNDMDMwMDA4MDA0MzkwMjEzMEM1MDAyMDAzNjA4MDIxNzIKKzoxMDJBMTAwMDNDMDgwMTExMjc3QjAwMDgxNEEwMDAwMjI2NDYwMDcwMjQKKzoxMDJBMjAwMDI2NDYwMDZDOTIxMzAwMDQ5NzUxMDEwNDkyMEYwMDA0OTMKKzoxMDJBMzAwMDMyNjcwMDBGMzIyRUZGRkYzMUVEMDA0MDAxQzcyODIzMUYKKzoxMDJBNDAwMDExQTAwMDA1MDAwMDQ4MjE5MjU5MDBCQzMzMzgwMDA0NTEKKzoxMDJBNTAwMDE3MDAwMDkwMDAwMDAwMDA5MjQzMDBCQzMwN0YwMDA0OEIKKzoxMDJBNjAwMDEzRTAwMDBGMDAwMDAwMDAxMEEwMDAwRDAwMDAwMDAwQTcKKzoxMDJBNzAwMDk2MEUwMDAyMjQwQUZGODAwMEE3NjAyMTI1Q0RGRkZFRUMKKzoxMDJBODAwMEE3NEQxMDE2OTIwQjAwMDQwMTRCMjAyNDMwODIwMEZGNEEKKzoxMDJBOTAwMDEwNDAwMDg1MDEwQzQwMjUzQzBGMDQwMDAxMEY0MDI1MkIKKzoxMDJBQTAwMDhGNTMwMTc4MDY2MEZGRkUyNDA0MDAwQUE3NDQwMTQwMEEKKzoxMDJBQjAwMDk2MEQwMDAyMjQwNDAwMDkzMUFDMDAwNzAwMEM1ODIzRDUKKzoxMDJBQzAwMDMxNkEwMDA3QTc0QTAxNDI5NjAyMDAwMjI0NDNGRkZFMzIKKzoxMDJBRDAwMEE3NDMwMTQ0QTc0MDAxNDY5NzVGMDEwNEE3NUYwMTQ4NEYKKzoxMDJBRTAwMDhGNTkwMTA4MzMzODAwMjA1MzAwMDAwMTI0MDQwMDAxRUQKKzoxMDJBRjAwMDkyMEYwMDA0MzFFRTAwMTAxNUMwMDAwMjM0ODMwMDEwNjQKKzoxMDJCMDAwMDAwODAxODIxQTc0MzAxNEEwMDAwMDAwMDAwMDAwMDAwRDcKKzoxMDJCMTAwMDAwMDAwMDAwMDAwMDAwMDBBRjQ4MTAwMDAwMDAwMDAwQUUKKzoxMDJCMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGNTExMDAwQjUKKzoxMDJCMzAwMDA2MjFGRkZFMzExM0ZGRkYxMjYwMDAwMzAwMDAwMDAwQkEKKzoxMDJCNDAwMDhGNDgxMDE4QUNDODAwMDA5NjAzMDAwNjMwN0ZGRkZGQzYKKzoxMDJCNTAwMDI3RjkwMDAyMDAxOTk4ODIwMDEzODg4MDAyM0IzMDIxNzcKKzoxMDJCNjAwMDhDRDgwMDAwMTUyMDAwNTcwMDE4MzQwMjkyMDMwMDA0OEUKKzoxMDJCNzAwMDI0MDVGRjgwMDBBM0Y4MjQzM0YxMDBGRjEyMjAwMDJDNkQKKzoxMDJCODAwMDAwMDAwMDAwOTI0NzAwQkMzMEYyMDAwMjEyNDAwMDI4MTIKKzoxMDJCOTAwMDAwMDAwMDAwOTc0QjEwMEMyNTYyRkZGRUE3NDIxMDE2QTQKKzoxMDJCQTAwMDAwMDAwMDAwM0MwQTA0MDAzNTQ5MDAzMEFGNDkxMDAwMjUKKzoxMDJCQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDJCQzAwMDhGNEMxMDAwMDU4MUZGRkUwMDAwMDAwMDk3NDkxMDBDOUIKKzoxMDJCRDAwMDhGNTExMDFDMDBDMDIwMjEzMTI3RkZGRjI0RjIwMDMwNEMKKzoxMDJCRTAwMDAwMTIxODgyMDAwMzI4ODAwMEJCRjgyMTMyMjZGRkZGNjQKKzoxMDJCRjAwMEFGRjEwMDAwMEUwMDA1QjMwMDExMkMwMjAwMTNDODgwRDUKKzoxMDJDMDAwMDAzM0I5ODIxOEU3ODAwMDAwMDAyNzQwMEFGQjgwMDEwREEKKzoxMDJDMTAwMDhGQTgwMDEwMzEwRkZGRkZBRkFGMDAxMDhGQTQwMDEwN0UKKzoxMDJDMjAwMDAxQzQ2ODI1QUZBRDAwMTA4RkE2MDAxMEFFNjYwMDAwOEQKKzoxMDJDMzAwMDk3NzMwMDA4OTc2RDAwMEE5NzY2MDAwQzhGOEEwMDNDMTYKKzoxMDJDNDAwMDAwMEQ1QzAwMzBDQ0ZGRkYzMjYyRkZGRjEwNEEwMDM2RkYKKzoxMDJDNTAwMDAxNkMyMDI1OTYwNjAwMDIzQzEwMTAwMDI0RDMwMDA4QzkKKzoxMDJDNjAwMDBFMDAwMTNCMzI2NEZGRkY5NzRDMDEwNDBFMDAwMTQ5NDYKKzoxMDJDNzAwMDMxODRGRkZGQUY1MDAxNzg4RkJGMDAyODhGQjMwMDI0NEQKKzoxMDJDODAwMDhGQjIwMDIwOEZCMTAwMUM4RkIwMDAxODAzRTAwMDA4NDUKKzoxMDJDOTAwMDI3QkQwMDMwMTBBMEZGNzAwMDAwMDAwMDI0QTVGRkZDM0QKKzoxMDJDQTAwMDBBMDAwNUVDMjQwOTAwMDQ4Q0QxMDAwMEFGNTExMDE4NzMKKzoxMDJDQjAwMDhGNTMwMTc4MDY2MEZGN0EyNDA0MDAwQTBBMDAwNjAxOTcKKzoxMDJDQzAwMDAwMDAwMDAwMDBBN0M4MjE4Rjg4MDAzODhGNEUxMDFDMUMKKzoxMDJDRDAwMDAwMTlDMDgyMDAxODc4ODAwMUU4MjAyMUFDOEUwMDAwMjUKKzoxMDJDRTAwMDAwMEUyQzAyMDBDMDIwMjEwRTAwMDVCMzMxQzZGRkZGRUMKKzoxMDJDRjAwMDAyM0IyODIxOENBRDAwMDAwMDAyNTQwMDAwNDAzMDIxMkUKKzoxMDJEMDAwMEFGQUQwMDEwOEZBQzAwMTAzMThCRkZGRkFGQUIwMDEwRTgKKzoxMDJEMTAwMDhGQTIwMDEwMDE0MjQ4MjVBRkE5MDAxMDhGQTcwMDEwMTQKKzoxMDJEMjAwMDBBMDAwNjMxQUNBNzAwMDA4RjhGMDA0MDE0OEZGRkM5NDYKKzoxMDJEMzAwMDAwMDAwMDAwOTc0MjAxMDQ5NjBCMDAwMjNDMDUwODAwQzkKKzoxMDJENDAwMDhDQTUwNDZDMzA0OUZGRkYzMTZBRkZGRjNDMTEwODAwN0QKKzoxMDJENTAwMDhFMzEwNDY4MDEyQTM4MjEyNEYyRkZGRTAwQjI0MDIxOUUKKzoxMDJENjAwMDAwMTJGRkMzMDExMkM4MkIwMjNGQzAyMTAzMTkyMDIxMEEKKzoxMDJENzAwMDNDMDEwODAwQUMyODA0NkMzQzAxMDgwMEFDMjQwNDY4NDkKKzoxMDJEODAwMDBBMDAwNjZCMDAwMDAwMDAwMEE0MTAyQjEwNDAwMDA5OTAKKzoxMDJEOTAwMDI0MDMwMDAxMDAwNTI4NDAwMEE0MTAyQjA0QTAwMDAzMTgKKzoxMDJEQTAwMDAwMDMxODQwNTQ0MEZGRkMwMDA1Mjg0MDEwNjAwMDA3NTUKKzoxMDJEQjAwMDAwMDAwMDAwMDA4NTMwMkIxNEMwMDAwMjAwMDMxODQyMDAKKzoxMDJEQzAwMDAwODUyMDIzMTQ2MEZGRkIwMDA1Mjg0MjAzRTAwMDA4NzMKKzoxMDJERDAwMDAwODAxMDIxOEY4NTAwMkMyN0JERkZFODAwMDUzMDI3REIKKzoxMDJERTAwMDJDQzMwMDAxMkNBNDAwMDIwMDgzMTAyNTEwNDAwMDAzMTYKKzoxMDJERjAwMEFGQkYwMDEwMjQwNTAwN0ZBRjg1MDAyQzAwMDUyODI3RjkKKzoxMDJFMDAwMDMwQTVGRkZGMEUwMDA1OTIyNDA0MjZGNThGODMwMDMwQzUKKzoxMDJFMTAwMDI0MDQwMkJEMDA0MDMwMjEwMDgzMzgyQjEwRTAwMDA5NUIKKzoxMDJFMjAwMDI0MDUwMDAxMDAwNDIwNDAwMDgzMTAyQjA0ODAwMDAzQ0YKKzoxMDJFMzAwMDAwMDUyODQwNTQ0MEZGRkMwMDA0MjA0MDEwQTAwMDA4N0EKKzoxMDJFNDAwMDAwQzM1MDIxMDA2NDQwMkIxNTAwMDAwMjAwMDUyODQyRjkKKzoxMDJFNTAwMDAwNjQxODIzMTRBMEZGRkIwMDA0MjA0MjAwQzM1MDIxOEIKKzoxMDJFNjAwMDhGQkYwMDEwMDAwQTRDMDIzMTIyMDBGRjI3QkQwMDE4NUUKKzowQzJFNzAwMEFGOEEwMDJDMDNFMDAwMDhBRjg5MDAzMDlFCis6MDQyRTdDMDAwQTAwMDAyQTFFCis6MTAyRTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ3NDc4NzAzNkEzCis6MTAyRTkwMDAyRTMyMkUzMTAwMDAwMDAwMDYwMjAxMDAwMDAwMDAwMDZBCis6MTAyRUEwMDAwMDAwMDEzNjAwMDBFQTYwMDAwMDAwMDAwMDAwMDAwMEExCis6MTAyRUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyCis6MTAyRUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyCis6MTAyRUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNkRDCis6MTAyRUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTAyRUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTAyRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTAyRjEwMDAwMDAwMDAwMDAwMDAxMzg4MDAwMDAwMDAwMDAwMDVEQzM1Cis6MTAyRjIwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDMwMDAwMDAwMDhFCis6MTAyRjMwMDAwMDAwMDAwRDAwMDAwMDBEM0MwMjA4MDAyNDQyM0MyMDZGCis6MTAyRjQwMDAzQzAzMDgwMDI0NjMzREQ0QUM0MDAwMDAwMDQzMjAyQjI4Cis6MTAyRjUwMDAxNDgwRkZGRDI0NDIwMDA0M0MxRDA4MDAzN0JEN0ZGQ0E3Cis6MTAyRjYwMDAwM0EwRjAyMTNDMTAwODAwMjYxMDAwQTgzQzFDMDgwMDFCCis6MTAyRjcwMDAyNzlDM0MyMDBFMDAwMkJBMDAwMDAwMDAwMDAwMDAwRDVCCis6MTAyRjgwMDA4RjgzMDAzODNDMDg4MDAwMzUwNzAwNzA4Q0U1MDAwMDE2Cis6MTAyRjkwMDAwMDgzMzAyNTNDMDI5MDAwMDBDMjIwMjVBRjg1MDAzMDIwCis6MTAyRkEwMDBBRjQ0MDAyMDhGNDkwMDIwMDUyMEZGRkUzQzAzODAwMDM1Cis6MTAyRkIwMDAzNDYyMDA3MDhDNDUwMDAwOEY4NjAwMzAzQzE5MDgwMDk4Cis6MTAyRkMwMDA4RjM5MDA3QzNDMEUwODAwOERDRTAwNzgwMEE2MjAyM0FGCis6MTAyRkQwMDAwMzI0NTgyMTAwMDA3ODIxMDE2NDY4MkIwMUNGNjAyMTZGCis6MTAyRkUwMDAwMThENTAyMTNDMDEwODAwQUMyQjAwN0MzQzAxMDgwMDA1Cis6MTAyRkYwMDBBQzJBMDA3ODAzRTAwMDA4MDAwMDAwMDAwQTAwMDA0MTRECis6MTAzMDAwMDAyNDA0MDAwMThGODQwMDM4M0MwNTgwMDAzNEEyMDAwMUI0Cis6MTAzMDEwMDAwMDgyMTgyNTAzRTAwMDA4QUY0MzAwMjAwM0UwMDAwODA5Cis6MTAzMDIwMDAwMDAwMTAyMTMwODRGRkZGMzBBNUZGRkYxMDgwMDAwNzUzCis6MTAzMDMwMDAwMDAwMTgyMTMwODIwMDAxMTA0MDAwMDIwMDA0MjA0MkVDCis6MTAzMDQwMDAwMDY1MTgyMTE0ODBGRkZCMDAwNTI4NDAwM0UwMDAwOEZDCis6MTAzMDUwMDAwMDYwMTAyMTEwQzAwMDA3MDAwMDAwMDA4Q0EyMDAwMERBCis6MTAzMDYwMDAyNEM2RkZGRjI0QTUwMDA0QUM4MjAwMDAxNEMwRkZGQkFGCis6MTAzMDcwMDAyNDg0MDAwNDAzRTAwMDA4MDAwMDAwMDAxMEEwMDAwODAxCis6MTAzMDgwMDAyNEEzRkZGRkFDODYwMDAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTAzMDkwMDAyNDAyRkZGRjI0NjNGRkZGMTQ2MkZGRkEyNDg0MDAwNDZDCis6MTAzMEEwMDAwM0UwMDAwODAwMDAwMDAwMzA4QUZGRkY5M0E4MDAxMzJGCis6MTAzMEIwMDBBNzRBMDE0NDk3NDkwRTE2MzBDNjAwRkYzQzAyMTAwMDkzCis6MTAzMEMwMDBBNzQ5MDE0NkFGNDUwMTQ4QTM0NjAxNTJBNzQ4MDE1QTA2Cis6MTAzMEQwMDBBRjQ3MDE2MDhGQTQwMDE4OEZBMzAwMTRBNzQ0MDE1OEM0Cis6MTAzMEUwMDBBRjQzMDE1NDAzRTAwMDA4QUY0MjAxNzgwM0UwMDAwODU5Cis6MTAzMEYwMDAwMDAwMDAwMDNDMDM4MDAwMzQ2MjAwNzA4QzQ5MDAwMDM2Cis6MTAzMTAwMDA4Rjg4MDAwMDI0ODQwMDA3MjdCREZGRjgzMDg0RkZGODczCis6MTAzMTEwMDBBRjg5MDAzMDk3NEQwMDhBMzFBQ0ZGRkZBRkFDMDAwMEEzCis6MTAzMTIwMDA4RkFCMDAwMDAxNjg1MDIzMjU0N0ZGRkYzMEU2MUZGRkVCCis6MTAzMTMwMDAwMEM0MjgyQjE0QTBGRkY3M0MwQzgwMDAzNThCMDA3MEQ2Cis6MTAzMTQwMDA4RDZBMDAwMDNDMDcwODAwOENFNzAwODQzQzA2MDgwMEZDCis6MTAzMTUwMDA4Q0M2MDA4MDAwMDgxMDgyMDE0OTE4MjMwMDAyNzg4MDg0Cis6MTAzMTYwMDAwMEUzNzAyMTAwMDAyMDIxMDFDM0M4MkIwMEM0QzAyMTRFCis6MTAzMTcwMDAwMUZBNDAyMTAzMTk0ODIxMjUwMjQwMDAyN0JEMDAwODFCCis6MTAzMTgwMDAzQzAxMDgwMEFDMkUwMDg0M0MwMTA4MDBBQzI5MDA4MDAyCis6MTAzMTkwMDAwM0UwMDAwODAwMDAwMDAwOEY4MjAwMDAyNDg2MDAwNzgyCis6MTAzMUEwMDAzMEM1RkZGODAwQTIxODIxMzA2NDFGRkYwM0UwMDAwOEJCCis6MTAzMUIwMDBBRjg0MDAwMDhGODcwMDM4OEY4QTAwNDAyN0JERkZCODlBCis6MTAzMUMwMDA4Rjg2MDA0NEFGQjYwMDQwQUZCRjAwNDRBRkI1MDAzQ0FGCis6MTAzMUQwMDBBRkI0MDAzOEFGQjMwMDM0QUZCMjAwMzBBRkIxMDAyQ0ExCis6MTAzMUUwMDBBRkIwMDAyODhGNDUwMTA0OEQ0OTAwQUNBRjQ3MDA4MDg3Cis6MTAzMUYwMDA4Q0M4MDAyMDAwQTkzODIzMDAwMEIwMjFBRjQ4MEUxMDcxCis6MTAzMjAwMDA4RjQ0MEUxMDAwMDA0ODIxQUY0NDBFMTQ4Q0MyMDAyNERECis6MTAzMjEwMDBBRjQyMEUxODhGNDMwRTE4QUY0MzBFMUMxMEUwMDEyNTZECis6MTAzMjIwMDAyRDIzMDAwMTkzNkIwMDA4MTE2MDAwRDQwMDAwMDAwMDAyCis6MTAzMjMwMDA5NzZFMDAxMDMxQ0RGRkZGMDBFRDYwMkIxNTgwMDBDRkExCis6MTAzMjQwMDAwMDAwMDAwMDk3NzAwMDEwMzIwRkZGRkZBRjRGMEUwMDFDCis6MTAzMjUwMDA4RjUyMDAwMDMyNTEwMDA4MTIyMEZGRkQwMDAwMDAwMEQ0Cis6MTAzMjYwMDA5NzU0MEUwODhGNDYwRTA0MzI4NUZGRkYzMEIzMDAwMURECis6MTAzMjcwMDAxMjYwMDEzMjAwMDAwMDAwMDAwMDAwMEQzMEI4QTA0MEQ0Cis6MTAzMjgwMDAyNDE1MDA0MDEzMTUwMEMwMzBBOUEwMDAxMTIwMDEyRDA1Cis6MTAzMjkwMDAwMDAwMDAwMDkzN0YwMDA4MTNFMDAwMDgwMDAwMDAwMDE5Cis6MTAzMkEwMDA5NzYzMDAxMDMwNkJGRkZGMDBDQjQwMkIxMTAwMDAwMzMxCis6MTAzMkIwMDAzMEFDMDA0MDExODAwMTIzMDAwMDAwMDBBNzg1MDAzQ0Q1Cis6MTAzMkMwMDBBRjg2MDAzNDkzNjYwMDA4MDBFMDI4MjFBRkE3MDAyMEY1Cis6MTAzMkQwMDAxNEMwMDEyNDI3QjMwMDIwQUY2MDAwMEM5NzgyMDAzQzhCCis6MTAzMkUwMDAzMDQ3NDAwMDE0RTAwMDAyMjQwMzAwMTYyNDAzMDAwRUJGCis6MTAzMkYwMDAyNDE5NDAwN0EzNjMwMDBBQUY3OTAwMTQ5MzhBMDAzRUEzCis6MTAzMzAwMDA4Rjc0MDAxNDMxNTgwMDA3MDAxOEFBNDAwMjk1OTAyNUM4Cis6MTAzMzEwMDBBRjcyMDAxNDk3ODQwMDNDOEY3MDAwMTQzMDkxMDAxMDNECis6MTAzMzIwMDAwMjExNzgyNUFGNkYwMDE0OTc4RTAwM0MzMUNEMDAwODU0Cis6MTAzMzMwMDAxMUEwMDE0NzAwMDAyODIxOEY2NzAwMTQzQzAyMTAwMEYzCis6MTAzMzQwMDAzQzBDODEwMDAwRTIyODI1QUY2NTAwMTQ5NzQ2MEUwQTY4Cis6MTAzMzUwMDAyNDA4MDAwRTM0MDVGRkZDMzBDM0ZGRkYwMDZDNTgyNTI1Cis6MTAzMzYwMDBBRjZCMDAwNEEzNjgwMDAyOTM3RjAwMEEyN0U5MDAwNDAyCis6MTAzMzcwMDBBMzY5MDAwQTk3ODYwMDNDOTM2MzAwMEEzMENDMUYwMEMzCis6MTAzMzgwMDAwMDBDNTk4MzAxNjM0MDIxMjUxRjAwMjhBMzdGMDAwOUY5Cis6MTAzMzkwMDA5NzQ5MEUwQ0E3NjkwMDEwOTM3OTAwMDkyNzJBMDAwMkFCCis6MTAzM0EwMDAzMTU4MDAwNzAwMThBODIzMzJCMTAwMDdBMzcxMDAwQkExCis6MTAzM0IwMDA5Mzc0MDAwOTk3NjQwMDEwOEY5MTAwMzQ5NzhGMDAzQzNDCis6MTAzM0MwMDAzMjkyMDBGRjAyNDQ4MDIxMDIwNTcwMjEzMUVEMDA0MDVECis6MTAzM0QwMDAxMUEwMDAwNTMxQzRGRkZGMDA5MTI4MkIzQzEyODAwMDkyCis6MTAzM0UwMDAxMEEwMDAxNDAwMDBBMDIxMDIyNDM4MkIxNEUwMDExQkJGCis6MTAzM0YwMDA4RkE1MDAyMDhGNEQwRTE0QUY0RDBFMTA4RjQyMEUxQzY2Cis6MTAzNDAwMDBBRjQyMEUxOEFGNDQwRTAwOEY0RjAwMDAzMUVFMDAwODlGCis6MTAzNDEwMDAxMUMwRkZGRDAwMDAwMDAwOTc1NDBFMDgwMDgwODgyMUI1Cis6MTAzNDIwMDAwMDAwOTAyMUE3OTQwMDNDOEY1MDBFMDQyNDE0MDAwMTRBCis6MTAzNDMwMDBBRjkwMDAzNDk3NjQwMDEwMzA5NUZGRkY4RTY4MDAwMDU1Cis6MTAzNDQwMDAwMTExRjgyMzE3RTAwMDA5QUU3RjAwMDA4RjY1MDAxNDFBCis6MTAzNDUwMDA4RjhCMDA0NDM0QTYwMDQwQUY2NjAwMTQ4RjRDMEUxMEQyCis6MTAzNDYwMDBBRDZDMDAyMDhGNDMwRTE4QUQ2MzAwMjQ5MzY3MDAwOEY1Cis6MTAzNDcwMDAxNEUwMDBEMjAwMDAwMDAwMEUwMDAwOUUyNDA0MDAxMEEyCis6MTAzNDgwMDA4Rjg5MDA0ODNDMDgzMjAwMDA0MDI4MjEzMTI2MDBGRjg3Cis6MTAzNDkwMDAwMDA2RkMwMDAzRTg1MDI1MjUzOTAwMDFBRjk5MDA0OERCCis6MTAzNEEwMDBBQzRBMDAwMDkzNzgwMDA5OTM3MDAwMEEzMzA0MDBGRkNGCis6MTAzNEIwMDAwMDA0NzQwMDMyMEYwMEZGMDFDRjY4MjVBQzREMDAwNEZBCis6MTAzNEMwMDA4RjgyMDA0ODA2NDAwMEVBQUNBMjAwMDhBQ0EwMDAwQ0M1Cis6MTAzNEQwMDA5NzgzMDAzQzMwNkIwMDA4MTU2MDAwMDIyNjI4MDAwNjI4Cis6MTAzNEUwMDAyNjI4MDAwMjk3NEUwRTE0OEY0NTBFMUM4RjY3MDAwNDhECis6MTAzNEYwMDA5MzZEMDAwMjMxQzRGRkZGMzFBMjAwRkZBRkEyMDAxMEE0Cis6MTAzNTAwMDA4RjZDMDAxNEFGQTgwMDE4MEUwMDAwOEJBRkFDMDAxNDM1Cis6MTAzNTEwMDAyNDA0MDAxMDBFMDAwMEM3MDAwMDAwMDA4RTcyMDAwMDlFCis6MTAzNTIwMDAxNjQwMDAwNTAwMDAwMDAwOEY2NDAwMTQyNDA1RkZCRjUyCis6MTAzNTMwMDAwMDg1OTgyNEFGNzMwMDE0OEY3OTAwMEMwMzM1MzgyMTZGCis6MTAzNTQwMDBBRjY3MDAwQzkzNzUwMDA4MTZBMDAwMDgwMDAwMDAwMDhCCis6MTAzNTUwMDAxMjgwMDAwNjAwMDAwMDAwOEY3RjAwMTQzQzBCRUZGRjdDCis6MTAzNTYwMDAzNTY4RkZGRTAzRTg0ODI0QUY2OTAwMTRBMzc0MDAwODFGCis6MTAzNTcwMDA4RkE1MDAyMDBBMDAwMjQ2MDIyMDIwMjFBRjQ3MEUwMDNFCis6MTAzNTgwMDAwQTAwMDBGNTAwMDAwMDAwOEY1OTAxNzgwNzIwRkZGRUI3Cis6MTAzNTkwMDAyNDFGMDgwMDhGODQwMDAwQUY1RjAxNzg5NzRCMDA4QURBCis6MTAzNUEwMDAzMTZBRkZGRjAxNDQ0ODIzMjUyOEZGRkYzMTAyMUZGRjM2Cis6MTAzNUIwMDAyQzQzMDAwODE0NjBGRkY5MDAwMDAwMDA4RjhFMDA0OEMzCis6MTAzNUMwMDA4RjhEMDAzODAwQzA0ODIxMDM0NDIwMjEyNUM2MDAwMTBBCis6MTAzNUQwMDAyNDBDMEYwMEFGODYwMDQ4MDBFOTM4MjMyNDg2NDAwMDAxCis6MTAzNUUwMDAzMUNBMDBGRjExQUMwMDA1MjQwODAwMDE5MzkxMDAzRTkwCis6MTAzNUYwMDAzMjMwMDAwNzAwMTA3QTQwMzVFODAwMDEwMDBBQUMwMEM0Cis6MTAzNjAwMDAzQzE4MDEwMDAyQjhBMDI1QUM5NDQwMDA4RjkzMDA0OEZDCis6MTAzNjEwMDAzMEIyMDAzNjMwQTQwMDA4QUNEMzAwMDQxMDgwMDA5NzBDCis6MTAzNjIwMDAwMTEyMzAyNTk3NEUwRTBBOEY4RDAwMDAzQzAyODEwMDVBCis6MTAzNjMwMDAzMUNDRkZGRjI1QUIwMDA4MDE4MjQwMjUzQzAzMTAwMDgwCis6MTAzNjQwMDAzMTY1MUZGRjI1MzkwMDA2MjQxRjAwMEVBRjQ4MDE2MEI5Cis6MTAzNjUwMDAwMEMzMzAyNUE3NUYwMTVBQUY4NTAwMDBBNzU5MDE1ODY0Cis6MTAzNjYwMDAxNEUwMDAwQThGOTMwMDM4MjQxMjBGMDA1MjcyMDAwMkY3Cis6MTAzNjcwMDAyNDE2MDAwMTM0QzYwMDQwOEY1ODBFMTA4Rjk0MDA0NDY5Cis6MTAzNjgwMDBBRTk4MDAyMDhGNTUwRTE4QUU5NTAwMjQ4RjQ1MEUxNDZECis6MTAzNjkwMDBBRjQ1MDE0NDhGNTkwRTFDQUY1OTAxNDhBMzRBMDE1MjRFCis6MTAzNkEwMDAzQzBBMTAwMEFGNDYwMTU0QUY0QTAxNzgxNEUwRkVERDM5Cis6MTAzNkIwMDAyRDIzMDAwMTAwNzZBMDI1MTI4MDAwMTc4RkJGMDA0NDQzCis6MTAzNkMwMDA4Rjg0MDAzODI0MTYwRjAwMTA5NjAwODQwMDAwMDAwMDNDCis6MTAzNkQwMDA4RjQ1MDE3ODA0QTBGRkZFMjQxNTBGMDAxMDk1MDA2RUExCis6MTAzNkUwMDAwMDAwMDAwMDhGNDcwRTE0MjQwMjAyNDAzQzFGMTAwMDBGCis6MTAzNkYwMDBBRjQ3MDE0NDhGNDQwRTFDQUY0NDAxNDhBMzQwMDE1MjIwCis6MTAzNzAwMDBBNzQwMDE1QUFGNDAwMTYwQTc0MDAxNThBRjQyMDE1NEExCis6MTAzNzEwMDBBRjVGMDE3ODhGQkYwMDQ0OEZCNjAwNDA4RkI1MDAzQzhCCis6MTAzNzIwMDA4RkI0MDAzODhGQjMwMDM0OEZCMjAwMzA4RkIxMDAyQ0NCCis6MTAzNzMwMDA4RkIwMDAyODAzRTAwMDA4MjdCRDAwNDgxNEMwRkVEMDY5Cis6MTAzNzQwMDAzMEI4QTA0MDhGNDIwRTE0OEY4NDAwNDQwMDAwNDgyMUZFCis6MTAzNzUwMDBBQzgyMDAyMDhGNTEwRTFDQUM5MTAwMjQwQTAwMDIwRTk2Cis6MTAzNzYwMDAyRDIzMDAwMThGOTEwMDM0OTc4QTAwM0MzQzEyODAwMDg5Cis6MTAzNzcwMDAwMjIwQTgyMTMxNTgwMDQwMTcwMEZGMzAwMDAwQTAyMThFCis6MTAzNzgwMDA5NzY5MDAxMDhGOTIwMDM0MzEzOUZGRkYxMzMyMDAzNUYyCis6MTAzNzkwMDAwMDAwMjAyMTAwODA0ODIxMTQ4MEZFQTAwMEEwMzgyMUQ0Cis6MTAzN0EwMDA4RjQyMEUxNDhGODQwMDQ0QUM4MjAwMjA4RjUxMEUxQzc3Cis6MTAzN0IwMDBBQzkxMDAyNDBBMDAwMjBFMkQyMzAwMDE5MzZBMDAwOTM3Cis6MTAzN0MwMDA5Mzc4MDAwQjMxNTAwMEZGMzMwRjAwRkYwMjBGNzAyMTgwCis6MTAzN0QwMDAyNUMyMDAwQTMwNTBGRkZGMEUwMDAwOUUwMjAwMjAyMThCCis6MTAzN0UwMDA4Rjg2MDA0ODNDMUY0MTAwMjRDRDAwMDFBRjhEMDA0ODZBCis6MTAzN0YwMDA5MzZDMDAwOTMwQzYwMEZGMDAwNjQ0MDAzMTgzMDBGRkNGCis6MTAzODAwMDAyNDZCMDAwMjAxMEI0ODI1MDEzRkM4MjVBQzU5MDAwMDdDCis6MTAzODEwMDA4RjY3MDAwQzk3NDQwRTE0MDBGMjI4MjVBQzQ1MDAwNDc1Cis6MTAzODIwMDA4RjQ1MEUxQzhGNjcwMDA0OTM2QTAwMDIzMDg0RkZGRkVGCis6MTAzODMwMDAzMTU4MDBGRkFGQjgwMDEwOEY2RjAwMTRBRkIxMDAxOEZGCis6MTAzODQwMDAwRTAwMDA4QkFGQUYwMDE0MEEwMDAxQTYwMjAwMjAyMTc5Cis6MTAzODUwMDBBRjYwMDAwNDBBMDAwMTNFQTM2MDAwMDIwQTAwMDI0NkI1Cis6MTAzODYwMDAwMDAwMjAyMTAwMDA5MDIxMEEwMDAxNzAyNDE0MDAwMUIyCis6MTAzODcwMDAzQzEyODAwMDBBMDAwMTk1QUNCMjAwMEM4RjkxMDAwMDUwCis6MTAzODgwMDAyNTI0MDAwMkE3NDQwMTU4MjYzMDAwMDgzMjBGMUZGRkVDCis6MTAzODkwMDAwQTAwMDFGOUFGOEYwMDAwQUY0MDAxNEMxMTIwMDAyQzRECis6MTAzOEEwMDAwMDAwMDAwMDhGNTkwRTEwQUY1OTAxNDQ4RjQzMEUxOENECis6MTAzOEIwMDAyNDAyMDA0MDNDMUYxMDAwQUY0MzAxNDhBMzQwMDE1MkM2Cis6MTAzOEMwMDBBNzQwMDE1QUFGNDAwMTYwQTc0MDAxNThBRjQyMDE1NEUwCis6MTAzOEQwMDBBRjVGMDE3ODBBMDAwMjI3OEZCRjAwNDQxMTIwMDAwNjY1Cis6MTAzOEUwMDAwMDAwMDAwMDk3NDYwRTA4MzBDQzAwNDAxNTgwMDAwMjEyCis6MTAzOEYwMDAwMDAwMDAwMDAwMDAwMDBEOEY0RDAxNzgwNUEwRkZGRUM0Cis6MTAzOTAwMDAwMDAwMDAwMDk3NTMwRTEwM0MxMjA1MDAyNDBFMjAwMDBBCis6MTAzOTEwMDAzMjZBRkZGRjAxNTJDMDI1QUY1ODAxNEM4RjRGMEUxNDgxCis6MTAzOTIwMDAzQzAyMTAwMEFGNEYwMTQ0OEY1MDBFMUNBRjUwMDE0OEI1Cis6MTAzOTMwMDBBMzQwMDE1MjhGODQwMDM4QTc0MDAxNUFBRjQwMDE2MDc0Cis6MTAzOTQwMDBBNzQwMDE1OEFGNEUwMTU0MEEwMDAyMTVBRjQyMDE3ODVBCis6MTAzOTUwMDA4RjQ5MEUxNEFGNDkwMTQ0OEY0MzBFMUMwQTAwMDI4RTlBCis6MTAzOTYwMDAyNDAyMDA0MDNDMEUyMEZGMjdCREZGRTAzQzFBODAwMEVGCis6MTAzOTcwMDAzQzBGODAwODM1Q0RGRkZEQUZCRjAwMUNBRkIyMDAxODczCis6MTAzOTgwMDBBRkIxMDAxNEFGQjAwMDEwQUY4RjAwNDBBRjREMEUwMENDCis6MTAzOTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTAzOUEwMDAwMDAwMDAwMDNDMEMwMEZGMzU4QkZGRkRBRjRCMEUwMDBDCis6MTAzOUIwMDAzQzA2NjAwNDhDQzk1MDAwMjQwQUZGN0YzQzExNjAwMDYzCis6MTAzOUMwMDAwMTJBNDAyNDM1MDczODBDQUNDNzUwMDA4RTI0MDQzODM3Cis6MTAzOUQwMDAyNDA1MDAwOUFGNDUwMDA4MzA4M0ZGRkYzODYyMkY3MUNFCis6MTAzOUUwMDAyNDUwQzBCM0FGODAwMDQ4MEUwMDAwNjhBRjgwMDAwMEQ0Cis6MTAzOUYwMDA1MjAwMDAwMUFFMjA0NDJDMEUwMDA0MzUzQzExODAwMDIyCis6MTAzQTAwMDAwRTAwMEVEOTM2MzAwMDcwOEY4QTAwNDAzQzEyMDgwMDNDCis6MTAzQTEwMDAyNjUyM0M4ODAyMDA4ODIxOEUwODAwMDA4RjVGMDAwMDNCCis6MTAzQTIwMDAzQkY5MDAwMTMzMzgwMDAxMTMwMDAwMTdBRjg4MDAzMDY0Cis6MTAzQTMwMDAwMjIwNDgyMThEMjcwMDAwM0MwRjA4MDA4REVGMDA2QzBDCis6MTAzQTQwMDAzQzBDMDgwMDhEOEMwMDY4MDBFOEMwMjMwMUY4MjgyMTk4Cis6MTAzQTUwMDAwMDAwNjgyMTAwQjgzMDJCMDE4RDU4MjEwMTY2NDAyMUZCCis6MTAzQTYwMDAzQzAxMDgwMEFDMjUwMDZDM0MwMTA4MDBBQzI4MDA2ODUzCis6MTAzQTcwMDA4RjQ0MDAwMDM4ODMwMDAxMzA2MjAwMDExNDQwRkZFREU0Cis6MTAzQTgwMDAwMEUwNDAyMUFGODcwMDMwOEUwQzAwMDAzQzA1MDgwMEFDCis6MTAzQTkwMDA4Q0E1MDA2QzNDMDQwODAwOEM4NDAwNjgwMTg4MzAyM0VECis6MTAzQUEwMDAwMEE2MzgyMTAwMDAxMDIxMDBFNjQwMkIwMDgyMTgyMURBCis6MTAzQUIwMDAwMDY4RjgyMTNDMDEwODAwQUMyNzAwNkMzQzAxMDgwMEJDCis6MTAzQUMwMDBBQzNGMDA2ODhGNDkwMTAwMjU1OTAwODhBRjk5MDA0NDM4Cis6MTAzQUQwMDBBRjg5MDAzOEFGNDkwMDIwOEUwNzAwMDBBRjg3MDAzMDYzCis6MTAzQUUwMDA4RjREMDE3ODA1QTBGRkZFMDAwMDAwMDA4RTA2MDAwMDRCCis6MTAzQUYwMDAzQzBCMDgwMDhENkIwMDc0M0MwNDA4MDA4Qzg0MDA3MDQzCis6MTAzQjAwMDAwMEM3MjgyMzAxNjVGODIxMDAwMDEwMjEwM0U1NDAyQkEwCis6MTAzQjEwMDAwMDgyMzgyMTAwRThDODIxMjQwOTA4MDAzQzAxMDgwMDdGCis6MTAzQjIwMDBBQzNGMDA3NDNDMDEwODAwQUMzOTAwNzBBRjQ5MDE3ODJCCis6MTAzQjMwMDA5MzU4MDEwOEEzOTgwMDNFOTM4RjAwM0UzMUVFMDAwMTk4Cis6MTAzQjQwMDAxNUMwMDAxNThGODMwMDM4MjQwRTBEMDAxMDZFMDAxOTZCCis6MTAzQjUwMDAyNDBGMEYwMDEwNkYwMDFEMDAwMDAwMDA5MTU5MDAwMDlECis6MTAzQjYwMDAyNDE4MDA1MDMzMjkwMEZGMTEzODAwMDQzQzFGNDAwMDg2Cis6MTAzQjcwMDBBRjVGMDEzODBBMDAwMkU3MDAwMDAwMDAwRTAwMDkwRUU2Cis6MTAzQjgwMDAwMDAwMDAwMDhGOEEwMDQwM0MxRjQwMDBBRjVGMDEzOEZBCis6MTAzQjkwMDAwQTAwMDJFNzAwMDAwMDAwOTM4RDAwM0UzMUFDMDAwNkYxCis6MTAzQkEwMDAwMDBDNTEwMDBFMDAwMENFMDE1MkQ4MjEwQTAwMDM0MzQwCis6MTAzQkIwMDA4RjhBMDA0MDNDMUIwODAwMjc3QjNEMDgwRTAwMDBDRThBCis6MTAzQkMwMDAwMDAwMDAwMDBBMDAwMzQzOEY4QTAwNDAzQzFCMDgwMEVECis6MTAzQkQwMDAyNzdCM0QyODBFMDAwMENFMDAwMDAwMDAwQTAwMDM0M0IyCis6MTAzQkUwMDA4RjhBMDA0MDkwQUEwMDAxOEZBQjAwMTA4Q0FDMDAxMEFGCis6MTAzQkYwMDAzQzAzMDBGRjhENjgwMDA0QUQ2QzAwMjA4Q0FEMDAxNDA4Cis6MTAzQzAwMDAwMEUwNjAyMTM0NjJGRkZGQUQ2RDAwMjQ4Q0E3MDAxODM2Cis6MTAzQzEwMDAzQzA5RkYwMDAxMDlDMDI0QUQ2NzAwMjg4Q0FFMDAxQ0UwCis6MTAzQzIwMDAwMTgyQzgyNDAzMTk3ODI1QUQ2RjAwMDRBRDZFMDAyQzA1Cis6MTAzQzMwMDA4Q0FEMDAwODMxNEEwMEZGQUQ2RDAwMUM5NEE5MDAwMjU0Cis6MTAzQzQwMDAzMTI4RkZGRkFENjgwMDEwOTBBNzAwMDBBNTYwMDAwMkJBCis6MTAzQzUwMDBBMTYwMDAwNEExNjcwMDAwOTBBMzAwMDIzMDYyMDBGRjkxCis6MTAzQzYwMDAwMDAyMTk4MjEwNjAwMDA1MjQwNTAwMDExMDY1MDAwRTk1Cis6MTAzQzcwMDAwMDAwMDAwMDAzRTAwMDA4QTE2QTAwMDE4Q0Q4MDAyOEMxCis6MTAzQzgwMDAzNTRBMDA4MEFENzgwMDE4OENDRjAwMTRBRDZGMDAxNDU5Cis6MTAzQzkwMDA4Q0NFMDAzMEFENkUwMDA4OENDNDAwMkNBMTZBMDAwMUVGCis6MTAzQ0EwMDAwM0UwMDAwOEFENjQwMDBDOENDRDAwMUNBRDZEMDAxODY1Cis6MTAzQ0IwMDA4Q0M5MDAxNEFENjkwMDE0OENDODAwMjRBRDY4MDAwOERDCis6MTAzQ0MwMDA4Q0M3MDAyMEFENjcwMDBDOENDMjAwMTQ4QzgzMDA2NDhDCis6MTAzQ0QwMDAwMDQzQzgyQjEzMjAwMDA3MDAwMDAwMDA4Q0MyMDAxNDEyCis6MTAzQ0UwMDAxNDRDRkZFNDAwMDAwMDAwMzU0QTAwODAwM0UwMDAwOEE3Cis6MTAzQ0YwMDBBMTZBMDAwMThDODIwMDY0MEEwMDAzOTkwMDAwMDAwMEEwCis6MTAzRDAwMDA5MEFBMDAwMDI3QkRGRkY4OEZBOTAwMUNBM0FBMDAwMEZECis6MTAzRDEwMDA4RkFFMDAwMDNDMEZGRjgwOEZBODAwMTgzNUUyRkZGRjM4Cis6MTAzRDIwMDA4Q0NEMDAyQzAxQzI2MDI0QUZBQzAwMDBBMTIwMDAwNEE3Cis6MTAzRDMwMDAwMEUwNjAyMUE3QTAwMDAyOEZCODAwMDA4RDI3MDAwNERBCis6MTAzRDQwMDAwMTg4MTgyMTAwQTA1ODIxMDBDMDUwMjEwMDZEMjgyNkFDCis6MTAzRDUwMDAzQzA2RkY3RjNDMEYwMEZGMkNBRDAwMDEzNUVFRkZGRjVFCis6MTAzRDYwMDAzNEQ5RkZGRjNDMDJGRjAwMDMxOTMwMjQwMDBEMURDMEIxCis6MTAzRDcwMDAwMTBFQzgyNDAwRTJDMDI0MDBDMzcwMjUwMzE5NzgyNTcxCis6MTAzRDgwMDBBRDJFMDAwMEFEMkYwMDA0OEQ0NTAwMjRBRkFFMDAwMDI1Cis6MTAzRDkwMDBBRDI1MDAwODhENEQwMDIwMjQwNUZGRkZBRDJEMDAwQzQyCis6MTAzREEwMDA5NTY4MDAwMjMxMDdGRkZGQUQyNzAwMTA5MTY2MDAxOEVCCis6MTAzREIwMDAzMEMyMDBGRjAwMDIxOUMyNTA2MDAwMDE4RDQ1MDAzNDdFCis6MTAzREMwMDBBRDI1MDAxNDhENjcwMDA4MjdCRDAwMDhBRDI3MDAxQzM1Cis6MTAzREQwMDA4QzhCMDBDQ0FEMkMwMDI4QUQyMDAwMkNBRDJCMDAyNDBBCis6MTAzREUwMDBBRDIwMDAxODAzRTAwMDA4QUQyMDAwMjAyN0JERkZFMDUzCis6MTAzREYwMDBBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTBBRkJGMDAxQ0RECis6MTAzRTAwMDA5MDk4MDAwMDAwQzA4ODIxM0MwRDAwRkYzMzBGMDA3RjE4Cis6MTAzRTEwMDBBMENGMDAwMDkwOEUwMDAxMzVBQ0ZGRkYzQzBBRkYwMEYwCis6MTAzRTIwMDBBMENFMDAwMTk0QTYwMDFFQTIyMDAwMDQ4Q0FCMDAxNEJBCis6MTAzRTMwMDA4RTI5MDAwNDAwQTA4MDIxMDE2QzI4MjQwMTJBNDAyNDNFCis6MTAzRTQwMDAwMDgwOTAyMTAxMDUyMDI1QTYyNjAwMDJBRTI0MDAwNDUyCis6MTAzRTUwMDAyNjA1MDAyMDI2MjQwMDA4MEUwMDAwNzYyNDA2MDAwMjE1Cis6MTAzRTYwMDA5MjQ3MDAwMDI2MDUwMDI4MjYyNDAwMTQwMDA3MUUwMEEzCis6MTAzRTcwMDAwMDAzMTYwMzI0MDYwMDA0MDQ0MDAwMDMyNDAzRkZGRjhDCis6MTAzRTgwMDA5NjU5MDAwMjMzMjNGRkZGMEUwMDAwNzZBRTIzMDAxMDg4Cis6MTAzRTkwMDAyNjI0MDAyNDhGQkYwMDFDOEZCMjAwMTg4RkIxMDAxNDlECis6MTAzRUEwMDA4RkIwMDAxMDI0MDUwMDAzMDAwMDMwMjEwQTAwMDA4MEJDCis6MTAzRUIwMDAyN0JEMDAyMDI3QkRGRkQ4QUZCMTAwMUNBRkIwMDAxODUwCis6MTAzRUMwMDBBRkJGMDAyMDkwQTgwMDAwMjQwMjAwMDE4RkIwMDAzQzhBCis6MTAzRUQwMDAzMTAzMDAzRjAwODA4ODIxMTA2MjAwMTQ4RkFBMDAzODRGCis6MTAzRUUwMDAyNDBCMDAwNTUwNkIwMDE2QUZBQTAwMTAwMEEwMjAyMTgzCis6MTAzRUYwMDAwMEMwMjgyMTBFMDAwM0RDMDIwMDMwMjE5MjI0MDBCQzA3Cis6MTAzRjAwMDAzMDgzMDAwMjEwNjAwMDAzMjYwNjAwMzBBQ0MwMDAwMEMxCis6MTAzRjEwMDAyNEM2MDAwNDhGQkYwMDIwOEZCMTAwMUM4RkIwMDAxODkyCis6MTAzRjIwMDAwMEMwMTAyMTAzRTAwMDA4MjdCRDAwMjgwMTQwMzgyMTBGCis6MTAzRjMwMDAwRTAwMDM1QUFGQjAwMDEwMEEwMDA0MjAwMDAwMDAwMDc5Cis6MTAzRjQwMDAwRTAwMDNBMUFGQjAwMDE0MEEwMDA0MjAwMDAwMDAwMDFFCis6MTAzRjUwMDAzQzAyMDAwQTAzNDIxODIxM0MwNDA4MDAyNDg0M0Q2QzAyCis6MTAzRjYwMDAyNDA1MDAxQTAwMDAzMDIxMEEwMDAwODBBRjgzMDA1NEFECis6MTAzRjcwMDAzQzAzODAwMDM0NjIwMDcwOEM0ODAwMDAwMEEwNTgyMThGCis6MTAzRjgwMDAwMEMwNDgyMTMwOEEwMEZGQUY4ODAwMzA4RjQ0MDE3ODlDCis6MTAzRjkwMDAwNDgwRkZGRTNDMEM4MDAwMzU4NjAwNzA4Q0M1MDAwMDVDCis6MTAzRkEwMDAzQzAzMDgwMDhDNjMwMDc0M0MxODA4MDA4RjE4MDA3MEY0Cis6MTAzRkIwMDAwMEE4MjAyMzAwNjQ2ODIxMDAwMEM4MjEwMUE0NzgyQkY4Cis6MTAzRkMwMDAwMzE5NzAyMTAxQ0Y2MDIxM0MwMTA4MDBBQzJEMDA3NDYxCis6MTAzRkQwMDAzQzAxMDgwMEFDMkMwMDcwOEY0ODBFMTRBRjQ4MDE0NDFGCis6MTAzRkUwMDBBRjQ3MDE0Q0EzNEEwMTUyQTc0QjAxNTg5MzQ2MDEwODIxCis6MTAzRkYwMDAzMEM1MDAwODU0QTAwMDAxMzUyOTEwMDA5MzRCMDkwMDdBCis6MTA0MDAwMDAyNDA3MDA1MDMxNkEwMEZGMTE0NzAwMDcwMDAwMDAwMDNDCis6MTA0MDEwMDA4RjQ1MEUxQ0FGNDUwMTQ4QUY0OTAxNTQzQzA5MTAwMEMzCis6MTA0MDIwMDAwM0UwMDAwOEFGNDkwMTc4OTM0RDAxMDgzMUE4MDAwODZBCis6MTA0MDMwMDAxMTAwMDAxMDAwMDAwMDAwOTM0RjAxMDgzMUVFMDAxMDQ1Cis6MTA0MDQwMDA1MUMwMDAwMTM1MjkwMDA4M0MwNDA4MDA5MDg0M0REMDhGCis6MTA0MDUwMDBBMzQ0MDE1MDhGNDMwOUE0QUY0MzAxNDg4RjQyMDlBMEY0Cis6MTA0MDYwMDBBRjQyMDE0NEFGNDkwMTU0M0MwOTEwMDAwM0UwMDAwODhECis6MTA0MDcwMDBBRjQ5MDE3ODNDMTkwODAwOEYzOTNEOEMzMzM4MDAwODZFCis6MTA0MDgwMDA1NzAwRkZGMTM1MjkwMDA4MEEwMDA0NzMwMDAwMDAwMDAyCis6MTA0MDkwMDAyNDA3MDA0MEFGNDcwODE0QUY0MDA4MTA4RjQyMDk0NDdFCis6MTA0MEEwMDA4RjQzMDk1MDhGNDQwOTU0OEY0NTA5NUM4RjQ2MDk0QzUyCis6MTA0MEIwMDBBRjgyMDA2NEFGODMwMDUwQUY4NDAwNENBRjg1MDA1Q0RBCis6MTA0MEMwMDAwM0UwMDAwOEFGODYwMDYwOTM0NjAxMDkzMEM1MDA3RjE5Cis6MTA0MEQwMDAwMDA1MThDMDAwMDUyMTQwMDA4MzEwMjEwM0UwMDAwOEZFCis6MTA0MEUwMDAyNDQyMDA4ODNDMDkwODAwOTEyOTNEOTEyNEE4MDAwMjNGCis6MTA0MEYwMDAzQzA1MTEwMDAwMDkzQzAwMDBFODMwMjUwMEM1MTgyNUVBCis6MTA0MTAwMDAyNDgyMDAwOEFDODMwMDAwMDNFMDAwMDhBQzgwMDAwNEI3Cis6MTA0MTEwMDA5MzQ3MDEwQjhGNEEwMDJDOTc0RjA5MDgzQzE4MDAwRTVCCis6MTA0MTIwMDAwMzU4NDgyMTMxRUVGRkZGMDAwRTQxQzBBRjQ4MDAyQzdDCis6MTA0MTMwMDA5NzQzMDkwODk1MkMwMDFBMDA4MDQwMjEyNDAzMDAwMUIwCis6MTA0MTQwMDAzMThCRkZGRkFDOEIwMDAwOEQyRDAwMUMwMEEwNTgyMThGCis6MTA0MTUwMDAwMEMwNjAyMUFDOEQwMDA0OEQyNDAwMjAzMEU3MDA0MEI5Cis6MTA0MTYwMDBBRDA0MDAwODkxMjIwMDE5MzA0NDAwMDMxMDgzMDA0ODc4Cis6MTA0MTcwMDAyODg1MDAwMjE0QTAwMDYyMjQwNjAwMDIxMDg2MDA1NjYyCis6MTA0MTgwMDAyNDE5MDAwMzEwOTkwMDY2MDAwMDAwMDAxMEUwMDAzQUI2Cis6MTA0MTkwMDAwMDAwMDAwMDNDMDcwODAwOTRFNzNEODYyNEUyMDAwMThGCis6MTA0MUEwMDA5MzRGMDkzNDkzNDcwOTIxOTUyNTAwMkEzMUVFMDBGRkVBCis6MTA0MUIwMDAwMDBFNDg4MjMwRUQwMEZGOTc4NzAwNTgwMDA5MzYwMDU2Cis6MTA0MUMwMDAwMDBEMUMwMDMwNDRGRkZGMDBDMzEwMjUwMDQ0QzAyNTMzCis6MTA0MUQwMDAwMEE3NzgyMTNDMTk0MDAwMDMxOTcwMjUwMDBGNEMwMEZFCis6MTA0MUUwMDBBRDA5MDAwNEFEMEUwMDAwOTM0RDA5MjAzQzAzMDAwNjBDCis6MTA0MUYwMDAyNTA5MDAxNDAwMEQzNjAwMDBDMzIwMjVBRDA0MDAwODc5Cis6MTA0MjAwMDA4RjU5MDkyQzI0RTUwMDAxMzBBMjdGRkZBRDE5MDAwQzY1Cis6MTA0MjEwMDA4RjU4MDkzMEE3ODIwMDU4MjUwMjAwMjhBRDE4MDAxMEQ5Cis6MTA0MjIwMDA4RjRGMDkzOEFEMEYwMDE0QUQyQjAwMDQ4RjRFMDk0MDlECis6MTA0MjMwMDBBRDJFMDAwODkzNEQwOTM3M0MwNTA4MDA5MEE1M0Q5MDMwCis6MTA0MjQwMDA4RjQ0MDk0ODhGNDYwOTQwMzFBNzAwRkYwMEVDMTgyMTMwCis6MTA0MjUwMDAwMDg2NzgyMzAwMDNDNzAwMDAwNUNDMDAwMzE5NjAyNTAxCis6MTA0MjYwMDAzMUU4RkZGQzAxODg1ODI1QUQyQjAwMENBRDIwMDAxMDczCis6MTA0MjcwMDAwM0UwMDAwOEFGNEEwMDJDM0MwRDA4MDA5NUFEM0Q4NkQ4Cis6MTA0MjgwMDAzQzBFMDgwMDk1Q0UzRDgwMEEwMDA0QzkwMUFFMTAyMTA1Cis6MTA0MjkwMDAzQzA1MDgwMDk0QTUzRDhBM0MwNjA4MDA5NEM2M0Q4MDc0Cis6MTA0MkEwMDAzQzE4MDgwMDk3MTgzRDdDOTUyRTAwMjQwMEE2NzgyMTI0Cis6MTA0MkIwMDAwMUY4NjgyMzAwMEUyNDAwMjVBMkZGRjIwMDgyMTgyNUQxCis6MTA0MkMwMDAyNDE5MDgwMEFEMDMwMDBDQUQxOTAwMTRBRDAwMDAxMDU2Cis6MTA0MkQwMDAwQTAwMDRDNDI1MDgwMDE4OTUyNjAwMjQ5NTI1MDAyODA2Cis6MTA0MkUwMDAwMDA2QzQwMDAwMDU3QzAwMzcwRTgxMDAzNUVEMDgwMDkzCis6MTA0MkYwMDBBRDBFMDAwQ0FEMEQwMDEwMEEwMDA0QzQyNTA4MDAxNDFBCis6MTA0MzAwMDAxNDgwRkZBMjAwMDAwMDAwOTUyNDAwMjQwMDA0MTQwMDgzCis6MTA0MzEwMDAzNDQzMDgwMEFEMDMwMDBDMEEwMDA0QzQyNTA4MDAxMDUzCis6MTA0MzIwMDAzQzAzMDgwMDk0NjMzRDhBM0MwNTA4MDA5NEE1M0Q4MDQ5Cis6MTA0MzMwMDAzQzA2MDgwMDk0QzYzRDdDOTUzOTAwMjQ5NTM4MDAyODM5Cis6MTA0MzQwMDAwMDY1MjAyMTAwODY3ODIzMDAxOTZDMDAwMDE4NzQwMDk1Cis6MTA0MzUwMDAyNUUyRkZFRTAxQzIyMDI1MzVBMzgxMDAyNDE5MDgwMEMzCis6MTA0MzYwMDBBRDAzMDAwQ0FEMDQwMDEwQUQxOTAwMThBRDAwMDAxNDMxCis6MTA0MzcwMDAwQTAwMDRDNDI1MDgwMDFDMDNFMDAwMDgyNDAyMDFGNDFDCis6MTA0MzgwMDAyN0JERkZFOEFGQjAwMDEwQUZCRjAwMTQwRTAwMDA2MDAzCis6MTA0MzkwMDAwMDgwODAyMTI0MDUwMDQwQUY0NTA4MTQ4RjgzMDA1MDIxCis6MTA0M0EwMDA4Rjg0MDA0QzhGODUwMDVDMDA3MDE4MjEwMDY0MTAyM0ZFCis6MTA0M0IwMDAxODQwMDAwNEFGODMwMDUwQUY2MzAwNTQ4RjY2MDA1NDcwCis6MTA0M0MwMDBBRjg2MDA0QzEyMDAwMDBDMDAwMDAwMDA4RjQ0MDA3NDA3Cis6MTA0M0QwMDA5MzY4MDA4MTM0MDlGQTAwMkQwNzAwMDcxMEUwMDAwNUZBCis6MTA0M0UwMDAwMDg5MTAyMTkzNkMwMDgxMjQwQjAxRjQwMThCNTAwNDhGCis6MTA0M0YwMDAwMTQ0MTAyMUFGNjIwMDBDOEY0RTA5NUMwMUM1NjgyMzk3Cis6MTA0NDAwMDAxOUEwMDAwNDhGQkYwMDE0OEY0RjA5NUNBRjhGMDA1Q0IwCis6MTA0NDEwMDA4RkJGMDAxNDhGQjAwMDEwMEEwMDAwNjIyN0JEMDAxODgzCis6MTA0NDIwMDA4Rjg0MDA2NDhGODMwMDUwOEY4MjAwNENBRjY0MDA0NEZGCis6MTA0NDMwMDBBRjYzMDA1MDAzRTAwMDA4QUY2MjAwNTQzQzAzODAwMDBCCis6MTA0NDQwMDAzNDYyMDA3MDhDNDMwMDAwMjdCREZGRjgzMDg3MDBGRjA2Cis6MTA0NDUwMDAzMEE5MDBGRjMwQzgwMEZGQUY4MzAwMzA4RjQ0MDE3OERGCis6MTA0NDYwMDAwNDgwRkZGRTNDMDI4MDAwMzQ1OTAwNzA4RjM4MDAwMDQ5Cis6MTA0NDcwMDBBM0E3MDAwMzNDMDcwODAwOENFNzAwNzQ4RkFDMDAwMDgyCis6MTA0NDgwMDAzQzA2MDgwMDhDQzYwMDcwMDMwMzc4MjMzQzBFN0ZGRkI3Cis6MTA0NDkwMDAwMEVGQzgyMTM1Q0RGRkZGMDAwMDUwMjEwMThEMjgyNEY5Cis6MTA0NEEwMDAwMENBMTgyMTAwMDg0N0MwMDMyRjIwMkIwMEE4MTAyNUEwCis6MTA0NEIwMDAwMDY0QzAyMUFGQTIwMDAwM0MwMTA4MDBBQzM5MDA3NEM4Cis6MTA0NEMwMDAzQzAxMDgwMEFDMzgwMDcwOTM0RjAxMEFBM0EwMDAwMjIxCis6MTA0NEQwMDAzQzBFODBGRkEzQUYwMDAxOEZBQzAwMDAzMTJCMDA3RkFBCis6MTA0NEUwMDAzNUNERkZGRjAxOEQ0ODI0MDAwQjU2MDAwMTJBNDAyNUUxCis6MTA0NEYwMDAyNDA3MzAwMDI0MDZGRjgwM0MwNTEwMDAyN0JEMDAwODdCCis6MTA0NTAwMDBBRjQ4MDE0Q0FGNDcwMTU0QTc0MDAxNThBMzQ2MDE1MkEwCis6MTA0NTEwMDAwM0UwMDAwOEFGNDUwMTc4MjdCREZGRThBRkJGMDAxNEY2Cis6MTA0NTIwMDBBRkIwMDAxMDhGNjUwMDc0M0MwNjgwMDAzMDkwMDBGRjMzCis6MTA0NTMwMDAwMEE2MjAyNTBFMDAwMDYwQUY2NDAwNzQ5MzYzMDAwNUEwCis6MTA0NTQwMDAzNDYyMDAwODBFMDAwMDYyQTM2MjAwMDUwMjAwMjAyMTEwCis6MTA0NTUwMDA4RkJGMDAxNDhGQjAwMDEwMjQwNTAwMDUyNDA2MDAwMTUxCis6MTA0NTYwMDAwQTAwMDU3MDI3QkQwMDE4MjdCREZGRTAzQzAzODAwMDRFCis6MTA0NTcwMDBBRkIwMDAxMEFGQkYwMDE4QUZCMTAwMTQzNDYyMDA3MENDCis6MTA0NTgwMDA4QzQ3MDAwMDMwOTAwMEZGMzBBODAwRkZBRjg3MDAzMDVDCis6MTA0NTkwMDA4RjQ0MDE3ODA0ODBGRkZFM0MxODgwMDAzNzExMDA3MEMyCis6MTA0NUEwMDA4RTJGMDAwMDNDMEQwODAwOERBRDAwNzQzQzBBMDgwMDAxCis6MTA0NUIwMDA4RDRBMDA3MDAxRTc3MDIzMDFBRTI4MjEwMDAwNTgyMUM4Cis6MTA0NUMwMDAwMEFFMzAyQjAxNEI0ODIxMDEyNjM4MjEzQzAxMDgwMDY4Cis6MTA0NUQwMDBBQzI1MDA3NDAwMDA4ODIxM0MwMTA4MDBBQzI3MDA3MDY1Cis6MTA0NUUwMDAxMTAwMDAwRjAwMDAwMDAwOEY2MjAwNzQyNjE5RkZGRjA5Cis6MTA0NUYwMDAzMjA4MDA3RjAwMDJGRTAyMzNFNTAwN0YxNTAwMDAwNjRFCis6MTA0NjAwMDAzMzIyMDBGRjI0MDdGRjgwMDIwNzIwMjYyNEEzRkZGRjk4Cis6MTA0NjEwMDAwMDgzODAyNTMyMDIwMEZGMDA0MDgwMjEyNDExMTAwODExCis6MTA0NjIwMDAwRTAwMDA2MDAwMDAwMDAwOEY0OTA4MTgzMTI1MDAwNENBCis6MTA0NjMwMDAxNEEwRkZGRDMyMTgwMDdGMDAxODc4QzAwMDE4NzE0MEU4Cis6MTA0NjQwMDAwMUNGNjgyMTI1QUMwMDg4QUY0QzA4MTgyNzRBMDk4MEEzCis6MTA0NjUwMDA4RDRCMDAyMEFGNEIwMTQ0OEQ0NjAwMjRBRjQ2MDE0OEVFCis6MTA0NjYwMDBBMzUwMDE1MDBFMDAwMDYyQTc0MDAxNTgwMjIwMTAyMTAzCis6MTA0NjcwMDA4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwODQ2Cis6MTA0NjgwMDAyN0JEMDAyMDI3QkRGRkU4MzA4NDAwRkZBRkJGMDAxMDJBCis6MTA0NjkwMDAwRTAwMDVCQjMwQTUwMEZGOEY4MzAwNTA4RkJGMDAxMEI4Cis6MTA0NkEwMDAzNDQ1MDA0MDI0MDRGRjkwM0MwMjEwMDAyN0JEMDAxODUwCis6MTA0NkIwMDBBRjQzMDE0Q0EzNDQwMTUyQUY0NTAxNTQwM0UwMDAwODRECis6MTA0NkMwMDBBRjQyMDE3ODkzNDMwOTNFMzA2MjAwMDgxMDQwMDAwRDZDCis6MTA0NkQwMDAzQzA5MDEwMTM1MjgwODBBQUM4ODAwMDA4RjQ3MDA3NEE2Cis6MTA0NkUwMDBBQzg3MDAwNDNDMDYwODAwOTBDNjNEOTAzMEM1MDAxMDIxCis6MTA0NkYwMDA1MEEwMDAwNkFDODAwMDA4OEY2QTAwNjBBQzhBMDAwOEY5Cis6MTA0NzAwMDAyNDg0MDAwQzAzRTAwMDA4MDA4MDEwMjEwQTAwMDYyMjI3Cis6MTA0NzEwMDAyNDg0MDAwQzI3QkRGRkU4QUZCRjAwMTRBRkIwMDAxMDI5Cis6MTA0NzIwMDA5MzQ2MDkzRjAwQTA1MDIxMDAwNTI4ODAwMDg1MzgyM0NBCis6MTA0NzMwMDAzMEMyMDBGRjI0MDMwMDA2M0MwOTA4MDA5NTI5M0Q4NjhECis6MTA0NzQwMDAyNEU4RkZEODI0MDUwMDA0MTA0MzAwMzcyNDA2MDAwMkEzCis6MTA0NzUwMDA5NzUwMDkzQzNDMEYwMjA0MDAwNjM0MDAzMjBFRkZGRjY0Cis6MTA0NzYwMDAwMUNGNjgyNUFDOEQwMDAwOTM0QzA5M0UzMThCMDAyMEIxCis6MTA0NzcwMDAxMTYwMDAwODAwMDAwMDAwOTM0MzA5MzYzQzAyMDEwMzY5Cis6MTA0NzgwMDAzNDVGMDMwMDMwNzkwMEZGMDMzRkMwMjUyNDA1MDAwODkzCis6MTA0NzkwMDBBQzk4MDAwNDkzNDMwOTM0OTM1OTA5MjEwMDA1Rjg4MjI5Cis6MTA0N0EwMDAzMDYyMDBGRjAwMDJDMDgyMzMyRjAwRkYwMDE4NkUwMDRECis6MTA0N0IwMDAwMDBGNzQwMDAxQUU2MDI1MDE4OTIwMjUzQzA5NDAwMEVFCis6MTA0N0MwMDAwMDg5ODAyNUFDRjBGRkQ4OTM0MzA5Mzc4RjRGMDk0ODAzCis6MTA0N0QwMDA4RjU4MDk0MDMwNjIwMEZGMDA0QUM4MjEwMzNGNzAyMTEyCis6MTA0N0UwMDAwMUY4NjAyMzAwMEU2RjAwMDFBNjUwMjUzMTg1RkZGQzAzCis6MTA0N0YwMDAwMDFGNTg4MDAxNDU0ODI1MDE2ODM4MjFBRDA5MDAyMDc3Cis6MTA0ODAwMDAwRTAwMDA2MDI0RjAwMDI4MjQwNDAwMDQwRTAwMDA2MjYyCis6MTA0ODEwMDBBMzY0MDAzRjAyMDAxMDIxOEZCRjAwMTQ4RkIwMDAxMDZFCis6MTA0ODIwMDAwM0UwMDAwODI3QkQwMDE4MEEwMDA2MzUyNDA2MDAxMjIwCis6MTA0ODMwMDAyN0JERkZEMDI0MDkwMDEwQUZCNjAwMjhBRkI1MDAyNDczCis6MTA0ODQwMDBBRkI0MDAyMEFGQjEwMDE0QUZCMDAwMTAzQzAxMDgwMEJECis6MTA0ODUwMDBBMDI5M0Q5MEFGQkYwMDJDQUZCMzAwMUNBRkIyMDAxODMxCis6MTA0ODYwMDA5NzQ4MDkwODMwOTQwMEZGM0MwMjAwMEUzMTA3RkZGRjEzCis6MTA0ODcwMDAwMDA3MzFDMEFGNDYwMDJDOTc0NDA5MDg5MzQ0MDEwQjUwCis6MTA0ODgwMDAzMEI1MDBGRjAzNDI4MDIxMzA4MzAwMzAwMDAwQjAyMUFBCis6MTA0ODkwMDAxMDYwMDEyNTAwMDA4ODIxMjQwQzAwMDQzQzAxMDgwMDYwCis6MTA0OEEwMDBBMDJDM0Q5MDkzNEIwOTNFMDAwQjU2MDAwMDBBMkUwM0FFCis6MTA0OEIwMDAwNEEwMDE2MDAwMDAwMDAwQUY0MDAwNDg5MzRGMDEwQkNFCis6MTA0OEMwMDAzMUVFMDAyMDExQzAwMDA2MDAwMDAwMDA5MzU4MDkzRUEwCis6MTA0OEQwMDAwMDE4OUUwMDAwMTM5NjAzMDY0MDAxODkwMDAwMDAwMEE2Cis6MTA0OEUwMDA5MzQ0MDEwQjMwODMwMDQwMTA2MDAwMDM4RjkzMDA1MDBECis6MTA0OEYwMDA4RjgyMDA1MDI0NTNGRkZGOTM0NzA5M0UzMEU2MDAwOEEzCis6MTA0OTAwMDAxNEMwMDAwMjI0MTIwMDAzMDAwMDkwMjE5NjE5MDAyQzBDCis6MTA0OTEwMDA5MzU4MDkzNDkzNEYwOTM3QTc5OTAwNTgzMzBDMDBGRjc3Cis6MTA0OTIwMDAzMUVFMDBGRjAyNEU2ODIxMDAwRDU4ODAwMTZDNTAyMUNECis6MTA0OTMwMDAwMTUxNDAyMTNDMDEwODAwQTQyODNEODY5MjA1MDAxODQxCis6MTA0OTQwMDAzMEE5MDBGRjAxMDkxODIxM0MwMTA4MDBBNDIzM0Q4ODdCCis6MTA0OTUwMDA5MjExMDAxODE2MjAwMDAyMDAwMDAwMDAwMDAwMDAwRDU3Cis6MTA0OTYwMDAzQzAxMDgwMEE0MjMzRDhBM0MwMTA4MDBBNDIwM0Q4MEFFCis6MTA0OTcwMDAzQzAxMDgwMEE0MjAzRDdDOTM1RjAxMEIzMDYzRkZGRkU2Cis6MTA0OTgwMDAzM0YwMDA0MDEyMDAwMDAyMjQ2NDAwMEEyNDY0MDAwQjhCCis6MTA0OTkwMDAzMDkxRkZGRjBFMDAwMDlFMDIyMDIwMjE5MzU4MDEwQjUyCis6MTA0OUEwMDAzQzA4MDgwMDk1MDgzRDhBMDA0MDIwMjEwMDE4NTk4MkUzCis6MTA0OUIwMDAzMTY3MDAwMTBFMDAwNDlBMDEwNzI4MjE5MzRDMDEwQjc2Cis6MTA0OUMwMDA4RjRCMDAyQzk3NEUwOTA4M0MwRjAwMEUwMzRGNDAyMURGCis6MTA0OUQwMDAzMUNERkZGRjAwMEQ1MUMwQUY0QTAwMkM5NzQzMDkwOEFECis6MTA0OUUwMDA5NTA1MDAxQTAwNDAzODIxMjQwNDAwMDEzMEE5RkZGRjdBCis6MTA0OUYwMDBBQzQ5MDAwMDhEMDYwMDFDMDA0MDQ4MjEzMThBMDA0MDZGCis6MTA0QTAwMDBBQzQ2MDAwNDhEMDIwMDIwQUNFMjAwMDg5MTAzMDAxOUJFCis6MTA0QTEwMDAzMDYzMDAwMzEwNjQwMEVDMjg3OTAwMDIxNzIwMDExOEFECis6MTA0QTIwMDAyNDEwMDAwMjEwNzAwMTBDMjQxRjAwMDMxMDdGMDExRUNGCis6MTA0QTMwMDAwMDAwMDAwMDExNDAwMERFMDAwMDAwMDAzQzA5MDgwMEZBCis6MTA0QTQwMDA5NTI5M0Q4NjI1MjIwMDAxOTM1RjA5MzQ5MzRFMDkyMTYzCis6MTA0QTUwMDA5NTA0MDAyQTMzRjkwMEZGMDAxOUMwODIzMUNGMDBGRjBFCis6MTA0QTYwMDA5NzhFMDA1ODAwMTg0NjAwMDAwRjZDMDAwMTBEODAyNTNECis6MTA0QTcwMDAzMDQ1RkZGRjAyMDUxMDI1MDA4RTUwMjEzQzAzNDAwMDA5Cis6MTA0QTgwMDAwMDQzMzAyNTAwMEE2NDAwQUNFQzAwMDRBQ0U2MDAwMEYyCis6MTA0QTkwMDA5MzVGMDkyMDNDMTkwMDA2MjRFQzAwMTQwMDFGQzYwMDk3Cis6MTA0QUEwMDAwMzE5NzgyNUFDRUYwMDA4OEY0ODA5MkMyNUNEMDAwMUFCCis6MTA0QUIwMDAzMUE1N0ZGRkFDRTgwMDBDOEY1MDA5MzBBNzg1MDA1ODY2Cis6MTA0QUMwMDAyNEU4MDAyOEFDRjAwMDEwOEY0NDA5MzgwMTAwODAyMTUwCis6MTA0QUQwMDBBQ0U0MDAxNEFEOTMwMDA0OEY1MzA5NDBBRDkzMDAwODdCCis6MTA0QUUwMDA5MzRBMDkzNzNDMTkwODAwOTMzOTNEOTA4RjQzMDk0ODkwCis6MTA0QUYwMDA4RjQ2MDk0MDMxNDIwMEZGMDA1MkY4MjEwMDY2NzAyM0MyCis6MTA0QjAwMDAwMDFGN0YwMDAwMTlDNDAwMDFGODI4MjUzMUNERkZGQ0VCCis6MTA0QjEwMDAwMEFEMjAyNUFEODQwMDBDQUQ4MDAwMTBBRjRCMDAyQzAzCis6MTA0QjIwMDA5MzRCMDkzRTMxNzMwMDA4MTI2MDAwMEQzQzA2MDEwMUYxCis6MTA0QjMwMDAzNENDMDgwQUFDRUMwMDI4OEY1MzAwNzRBRDEzMDAwNDg5Cis6MTA0QjQwMDAzQzBCMDgwMDkxNkIzRDkwMzE2NzAwMTA1MEUwMDAwMzcyCis6MTA0QjUwMDBBRDAwMDAwODhGNkEwMDYwQUQwQTAwMDgyNTEwMDAwQzQ3Cis6MTA0QjYwMDAxMkMwMDAzRDAwMDAwMDAwOTM0MzA5M0YyNDE2MDAwNkQ4Cis6MTA0QjcwMDAyNDA2MDAwNDMwNjIwMEZGMTA1NjAwQzkyNDA3MDAwMjFBCis6MTA0QjgwMDA5NzU4MDkzQzNDMEYwMjA0MzMwREZGRkYwMUFGNDAyNTRECis6MTA0QjkwMDBBRTA4MDAwMDkzNDUwOTNFMzBBNDAwMjAxMDgwMDAwOEI0Cis6MTA0QkEwMDAwMDAwMDAwMDkzNTMwOTM2M0MwQjAxMDMzNTdGMDMwMERFCis6MTA0QkIwMDAzMjc5MDBGRjAzM0Y3MDI1QUUwRTAwMDQyNDA2MDAwODgyCis6MTA0QkMwMDA5MzRGMDkzNDkzNDgwOTIxMzEyQUZGRkYzMUVEMDBGRjRCCis6MTA0QkQwMDAwMDBEMTA4MjMxMDMwMEZGMDAwMkI2MDAwMDAzMkMwMDFDCis6MTA0QkUwMDAwMkM1NjAyNTAxOEE5ODI1MDAxMjIwODAzQzA5NDAwMEZBCis6MTA0QkYwMDAwMjA0NTAyMzAyNjk1ODI1QUQ0QkZGRDg5MzVGMDkzNzUzCis6MTA0QzAwMDA4RjRGMDk0ODhGNTgwOTQwMzNGOTAwRkYwMzMyNzAyMTU0Cis6MTA0QzEwMDAwMDA2QjA4MjAxRDY2ODIxMDAwNzQ0MDAwMUY4MjgyMzZECis6MTA0QzIwMDAwMDBEMUYwMDAwNjgzMDI1MzBBMkZGRkMyNTQ3RkZEODhCCis6MTA0QzMwMDAwMEMyNjAyNTAwMTY4MDgwMDIwNzQ4MjFBQ0VDMDAyMEVECis6MTA0QzQwMDAyNTMwMDAyODBFMDAwMDYwMjQxMjAwMDRBMzcyMDAzRkVCCis6MTA0QzUwMDAwRTAwMDA2MjAwMDAwMDAwOTM0NzAxMEIzMEYyMDA0MDlDCis6MTA0QzYwMDAxMjQwMDAwNTNDMTkwMEZGOEUxODAwMDAzNzJFRkZGRjkwCis6MTA0QzcwMDAwMzBFMzAyNEFFMDYwMDAwMEUwMDAwQzcwMjIwMjAyMUUzCis6MTA0QzgwMDAzQzEwMDgwMDkyMTAzRDkwMzIxMTAwMDMxMjIwMDAwRkRBCis6MTA0QzkwMDAwMkEwMjgyMThGODkwMDUwMjUzMzAwMDFBRjkzMDA1MEQ2Cis6MTA0Q0EwMDBBRjczMDA1MDhGNkIwMDU0MDE3M0Y4MjMxQkUwMDAwMkI4Cis6MTA0Q0IwMDAwMjYwMjAyMThGNjQwMDU0QUY2NDAwNTQ4RjRDMDA3NDU0Cis6MTA0Q0MwMDAyNTg0MDFGNEFGNjQwMDBDMDJBMDI4MjEwMjgwMjAyMTc5Cis6MTA0Q0QwMDBBNzYwMDA2ODBFMDAwNUJCM0MxNDEwMDA4Rjg1MDA1MEQzCis6MTA0Q0UwMDAzNDU1MDAwNkFGNDUwMTRDOEY4QTAwNDg4RkJGMDAyQzE5Cis6MTA0Q0YwMDA4RkIzMDAxQzI1NTYwMDAxQUY5NjAwNDg4RkIyMDAxOEY0Cis6MTA0RDAwMDBBMzRBMDE1MjhGQjYwMDI4QUY1NTAxNTQ4RkIxMDAxNDQ5Cis6MTA0RDEwMDBBRjU0MDE3ODhGQjUwMDI0OEZCNDAwMjA4RkIwMDAxMEZECis6MTA0RDIwMDAwM0UwMDAwODI3QkQwMDMwOTM1ODA5M0UwMDE4OUUwMDlDCis6MTA0RDMwMDAwMDEzOTYwMzA2NDIwMDM2MjQxMTAwMDI5MzQ0MDkyMzBGCis6MTA0RDQwMDAzMDgzMDAwMjEwNjBGRUREOEY4NjAwNjA4RjgyMDA1MDhECis6MTA0RDUwMDAxNEMyRkVEQTAwMDAwMDAwMEUwMDAwNjAwMDAwMDAwMDM3Cis6MTA0RDYwMDA5MzY5MDAzRjI0MDcwMDE2MzEyODAwRkYxMTA3MDAwQzRCCis6MTA0RDcwMDAyNDA1MDAwODNDMEMwODAwOTE4QzNEOTAzNThCMDAwMTA3Cis6MTA0RDgwMDAzQzAxMDgwMEEwMkIzRDkwOTM2QTAwM0YzMTQzMDBGRjk3Cis6MTA0RDkwMDAxMDY1MDA2NTI0MEQwMDBBMTA2RDAwNUUyNDAyMDAwQ0YxCis6MTA0REEwMDAwRTAwMDA2MjAwMDAwMDAwMEEwMDA2OTAwMDAwMDAwMEYzCis6MTA0REIwMDAzQzA5MDgwMDk1MjkzRDg2M0MwQTA4MDA5NTRBM0Q4MDNCCis6MTA0REMwMDAwQTAwMDZGMzAxMkExMDIxM0MwOTA4MDA5NTI5M0Q4QUIyCis6MTA0REQwMDAzQzA0MDgwMDk0ODQzRDgwM0MwNjA4MDA5NEM2M0Q3QzU5Cis6MTA0REUwMDA5NTAzMDAyNDAxMjQxMDIxMDA0NkY4MjMwMDAzQ0MwMDgxCis6MTA0REYwMDAyN0YwRkZGMjAzMzBDMDI1MjQwRjA4MDBBQ0Y4MDAwQ0E4Cis6MTA0RTAwMDBBQ0VGMDAxNEFDRTAwMDEwMEEwMDA2RUUyNEU3MDAxODM2Cis6MTA0RTEwMDAzQzAxMDgwMEEwMzEzRDkwOTM1RjA5M0UyNDE2MDAwMTNCCis6MTA0RTIwMDAzM0Y5MDAyMDE3MjBGRUE1MjQxMTAwMDgwQTAwMDY5MDdGCis6MTA0RTMwMDAyNDExMDAwNDhGNkUwMDg0OEY0RDA5NDAxMUEwRkU5RTQ2Cis6MTA0RTQwMDBBRjhFMDA1MDI0MEYwMDE0M0MwMTA4MDBBMDJGM0Q5MEFECis6MTA0RTUwMDAwQTAwMDY4RjAwMDAwMDAwOTUwRTAwMjQ5NTBEMDAyODIyCis6MTA0RTYwMDAwMDBFNjQwMDAwMEQyQzAwMzU4OTgxMDAzNEE2MDgwMDc2Cis6MTA0RTcwMDBBQ0U5MDAwQ0FDRTYwMDEwMEEwMDA2RUUyNEU3MDAxNEQyCis6MTA0RTgwMDAxNDYwRkVFQzAwMDAwMDAwOTUwMjAwMjQwMDAyMUMwMEVCCis6MTA0RTkwMDAzNDY0MDgwMEFDRTQwMDBDMEEwMDA2RUUyNEU3MDAxMEJECis6MTA0RUEwMDAwQTAwMDc0MTI0MDcwMDEyM0MwMjA4MDA5NDQyM0Q4QTkwCis6MTA0RUIwMDAzQzA2MDgwMDk0QzYzRDgwM0MwMzA4MDA5NDYzM0Q3QzlBCis6MTA0RUMwMDA5NTEwMDAyNDk1MTkwMDI4MDA0NkY4MjEwM0UzQzAyMzFCCis6MTA0RUQwMDAwMDEwNkMwMDAwMTk3NDAwMjcwRkZGRUUwMUNGMjgyNTg5Cis6MTA0RUUwMDAzNUFDODEwMEFDRUMwMDBDQUNFNTAwMTAyNDA3MDgwMEU4Cis6MTA0RUYwMDBBRDI3MDAxODI1MjcwMDFDMEEwMDA2RUVBRDIwMDAxNDdGCis6MTA0RjAwMDA4RjdGMDA0Q0FGN0YwMDU0OEY3OTAwNTQwQTAwMDY5OUMwCis6MTA0RjEwMDBBRjc5MDA1MEEzNjIwMDNGMEUwMDAwNjIwMDAwMDAwMDY1Cis6MTA0RjIwMDAwQTAwMDY5MDAwMDAwMDAwMjQwMjAwMTQwQTAwMDgyNzZFCis6MTA0RjMwMDBBMzYyMDAzRjI3QkRGRkU4MzA4NDAwRkZBRkJGMDAxMDMxCis6MTA0RjQwMDAwRTAwMDVCQjMwQTUwMEZGOTM3ODAwN0U5Mzc5MDA3RkFCCis6MTA0RjUwMDA5MzZFMDA4MDkzNjgwMDdBMzMyRjAwRkYwMDE4NjYwMDdDCis6MTA0RjYwMDAwMDBGNkMwMDMxQ0IwMEZGMDE4RDQ4MjUwMDBCNTIwMDczCis6MTA0RjcwMDA4RkJGMDAxMDAxMkEzODI1MzEwNjAwRkYzNDQ0NzAwMDJECis6MTA0RjgwMDAwMEU2MjgyNTI0MDJGRjgxM0MwMzEwMDAyN0JEMDAxOEZECis6MTA0RjkwMDBBRjQ1MDE0Q0FGNDQwMTU0QTM0MjAxNTIwM0UwMDAwODY1Cis6MTA0RkEwMDBBRjQzMDE3ODI3QkRGRkQ4QUZCMjAwMThBRkIxMDAxNEVFCis6MTA0RkIwMDBBRkIwMDAxMEFGQkYwMDIwQUZCMzAwMUM5MzQyMDEwOTk3Cis6MTA0RkMwMDAzMDg2MDBGRjMwQjAwMEZGMDAwNjE4QzIzMjA0MDAwMjM1Cis6MTA0RkQwMDAzMDcxMDAwMTE0ODAwMDA1MzA1MjAwRkY5MzY3MDAwNTE2Cis6MTA0RkUwMDAzMEU1MDAwODEwQTAwMDBEMzBDODAwMTAwMjQwMjAyMTVDCis6MTA0RkYwMDAwRTAwMDVBNzAyMjAyODIxMjQwNDAwMDE4RkJGMDAyMEY1Cis6MTA1MDAwMDA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDQ2Cis6MTA1MDEwMDAwMDgwMTAyMTAzRTAwMDA4MjdCRDAwMjgxNTAwMDAzMkExCis6MTA1MDIwMDAwMDAwMDAwMDkzNDMwMTA5MDAwMDI4MjEzMDYyMDA3RjQ2Cis6MTA1MDMwMDAwMDAyMjBDMDAwMDJGOTQwMDNFNDk4MjEyNjc5MDA4ODhDCis6MTA1MDQwMDAwMzNCOTgyMThFNzgwMDI0OEU2RjAwMDgxMzBGMDA0NkQyCis6MTA1MDUwMDAwMDAwMDAwMDhGNjQwMDg0MjQxODAwMDIwMDA0RkQ4MjE4Cis6MTA1MDYwMDAzM0Y5MDAwMzEzMzgwMDdDMDAwMDAwMDA5MzY2MDA4M0NFCis6MTA1MDcwMDA5MzRBMDEwOTUxNDYwMDA0MzIwNTAwN0MxMEEwMDA2MEVCCis6MTA1MDgwMDAwMDAwMDAwMDMyMDUwMDdDMTRBMDAwNTMwMjQwMjAyMUUzCis6MTA1MDkwMDAxNjIwMDAwNjMyMDQwMDAxOEU3RjAwMjQ4RjU5MDEwNDdGCis6MTA1MEEwMDAxN0Y5RkZENjAwMDAyMDIxMzIwNDAwMDExMDgwMDAwQTA5Cis6MTA1MEIwMDAwMjQwMjAyMThGNDIwOTQwOEY5MzAwNjQxMDUzMDAwNjY0Cis6MTA1MEMwMDAwMDAwMDAwMDBFMDAwNjZEMDIyMDI4MjE4RjQzMDk0MEQ5Cis6MTA1MEQwMDBBRjYzMDA0NDAyNDAyMDIxMEUwMDA2MDIwMjIwMjgyMTc2Cis6MTA1MEUwMDAwQTAwMDg2MDI0MDQwMDAxM0MwOTA4MDA4RDI5MDA2NEJFCis6MTA1MEYwMDAyNTI2MDAwMTNDMDEwODAwQUMyNjAwNjQxNjAwMDAxMkMxCis6MTA1MTAwMDAwMDAwMDAwMDhGNkQwMDg0M0MwRTAwQzAwMUFFNjAyNEUyCis6MTA1MTEwMDAxNTgwMDAwNTAyNDAyMDIxMEUwMDA4MkUwMjIwMjgyMUMzCis6MTA1MTIwMDAwQTAwMDg2MDI0MDQwMDAxMjQwNTAwMDQwRTAwMDU3MDM0Cis6MTA1MTMwMDAyNDA2MDAwMTAyNDAyMDIxMEUwMDA4MkUwMjIwMjgyMTEyCis6MTA1MTQwMDAwQTAwMDg2MDI0MDQwMDAxMEUwMDAwNDEyNDA0MDAwMTRDCis6MTA1MTUwMDA5MzZCMDA3RDAyMEI1MDI1MEUwMDAwNjJBMzZBMDA3RDU4Cis6MTA1MTYwMDAwQTAwMDhBMzhGNkQwMDg0OEY2NjAwNzQ4RjQ4MDEwNEM1Cis6MTA1MTcwMDA4RTY3MDAyNDAwMDY0RTAyMTUwN0ZGQjYzMTI2MDA3RjE5Cis6MTA1MTgwMDA5MzZCMDA4MzI2NDQwMDAxMzA4QTAwN0YxMTQ2MDA0MzYwCis6MTA1MTkwMDAzMTYzMDBGRjU0NjRGRkIwOEY2NDAwODQyNjQ1MDAwMTMyCis6MTA1MUEwMDAzMEIxMDA3RjMwQTIwMEZGMTIyNjAwMDQyNDA1MDAwMTY4Cis6MTA1MUIwMDAwMDQwOTAyMTBBMDAwODc2MjQxMTAwMDEyNDBGRkY4MDhFCis6MTA1MUMwMDAwMjRGNzAyNDAxQ0Y5MDI2MzI0MjAwRkYwMDQwOTAyMTEwCis6MTA1MUQwMDAwQTAwMDg3NjI0MTEwMDAxMEUwMDA2NkQwMjIwMjgyMTI1Cis6MTA1MUUwMDAzMjE4MDAzMDEzMDBGRkFBMzIxMDAwODIwMjQwMjAyMTQyCis6MTA1MUYwMDAwRTAwMDVBNzAyMjAyODIxMEEwMDA4NjAyNDA0MDAwMUVGCis6MTA1MjAwMDA4RjZFMDA3NDNDMEY4MDAwMjQwNTAwMDMwMUNGOTAyNUIxCis6MTA1MjEwMDBBRjcyMDA3NDkzNzEwMDgzMjQwNjAwMDEwRTAwMDU3MEM0Cis6MTA1MjIwMDAzMjI0MDBGRjBFMDAwMDQxMjQwNDAwMDE5MzZEMDA3RDM0Cis6MTA1MjMwMDAwMjBENjAyNTBFMDAwMDYyQTM2QzAwN0QzQzBCMDgwMDhGCis6MTA1MjQwMDA4RDZCMDA1NDI1NzAwMDAxM0MwMTA4MDBBQzMwMDA1NDA3Cis6MTA1MjUwMDAwQTAwMDg2MDI0MDQwMDAxOEY2ODAwNzQzQzA5ODAwMDgzCis6MTA1MjYwMDAyNDA1MDAwNDAxMDkzODI1QUY2NzAwNzQ5MzYzMDA4M0E3Cis6MTA1MjcwMDAyNDA2MDAwMTBFMDAwNTcwMzA2NDAwRkYwRTAwMDA0MTlFCis6MTA1MjgwMDAyNDA0MDAwMTkzNjIwMDdEMDIwMjk4MjUwRTAwMDA2MjUyCis6MTA1MjkwMDBBMzczMDA3RDBBMDAwODYwMjQwNDAwMDEzMjREMDA4MEUxCis6MTA1MkEwMDAzOUFDMDA4MDU0NkNGRjZDOEY2NDAwODQwQTAwMDhDOTFDCis6MTA1MkIwMDAyNjQ1MDAwMTI3QkRGRkM4M0MwQTAwMDhBRkJGMDAzMEVCCis6MTA1MkMwMDBBRkI1MDAyQ0FGQjQwMDI4QUZCMzAwMjRBRkIyMDAyMEJDCis6MTA1MkQwMDBBRkIxMDAxQ0FGQjAwMDE4MDM0QUQ4MjEyNDA5MDA0MDI4Cis6MTA1MkUwMDBBRjQ5MDgxNEFGNDAwODEwOEY0MjA5NDQ4RjQzMDk1MDVBCis6MTA1MkYwMDA4RjQ2MDk1NDhGNDcwOTVDOEY0ODA5NEM5MzQ0MDEwODM1Cis6MTA1MzAwMDA5MzQ1MDEwQkFGODIwMDY0MzA4NDAwRkYzMEE1MDBGRjlECis6MTA1MzEwMDBBRjgzMDA1MEFGODYwMDRDQUY4NzAwNUMwRTAwMDg0QTk4Cis6MTA1MzIwMDBBRjg4MDA2MDE0NDAwMTdEOEZCRjAwMzBBNzYwMDA2ODI3Cis6MTA1MzMwMDA5MzREMDkwMDI0MEIwMDUwM0MxNTA4MDAyNkI1M0Q0ODRDCis6MTA1MzQwMDAzMUFDMDBGRjNDMTIwODAwMjY1MjNENTgxMThCMDAwMzdGCis6MTA1MzUwMDAwMDAwMDAwMDAwMDBBODIxMDAwMDkwMjE5MzUxMDEwOUU1Cis6MTA1MzYwMDA4RjlGMDA1MDI0MDQwMDEwMzIyRTAwN0YwMDBFNjhDMDcyCis6MTA1MzcwMDAwMDBFNjE0MDAxOEQyODIxMjRCNDAwODhBRjU0MDgxODI0Cis6MTA1MzgwMDA4RjQ5MDEwNDhGNEEwOUE0M0MwQjAwMEUwMzRCQzAyMTM2Cis6MTA1MzkwMDAwMTJBMTAyMzNDMDEwODAwQUMyMjNENkM4RjQzMDk1OEMwCis6MTA1M0EwMDAzQzAxMDgwMEEwMjQzRDkwOTc0NzA5MDgwMDdGMzAyMzY2Cis6MTA1M0IwMDAzQzAxMDgwMEFDMjYzRDcwMzBFOEZGRkYwMDA4QzlDMDgyCis6MTA1M0MwMDAzQzAxMDgwMEFDM0YzRDk0QUY1OTAwMkM5NzQyMDkwOEJFCis6MTA1M0QwMDA5NzEwMDAyQzhFQjEwMDAwOTMwRjAwMTgwMzc0OTgyMUQxCis6MTA1M0UwMDBBNzkwMDA1OEFGOTMwMDQ0MDIyMEY4MDkzMUYwMDBGRjY1Cis6MTA1M0YwMDAzMDRFMDAwMjE1QzAwMUIyMzA0RjAwMDExMUUwMDE0RkU0Cis6MTA1NDAwMDAwMDAwMDAwMDkzNDMwOTNFMzA2NjAwMDgxNEMwMDAwMjBCCis6MTA1NDEwMDAyNDE0MDAwMzAwMDBBMDIxOEY1ODA5QTQyNDEzMDAwMUM0Cis6MTA1NDIwMDAzQzAxMDgwMEFDMzgzRDk4OTM0RjA5MzQ5MzUxMDkzNzNCCis6MTA1NDMwMDAzMUVDMDBGRjMyMkUwMEZGMDI4RTY4MjEwMDBEMjg4MDIzCis6MTA1NDQwMDAwMEFDNTAyMTAxNTA1ODIxM0MwMTA4MDBBNDJCM0Q4ODlDCis6MTA1NDUwMDAzQzAxMDgwMEE0MkEzRDg2OTM0OTA5MzQzMTIyMDBGRjBCCis6MTA1NDYwMDAwMjAyMjAyMTI0OTAwMDEwM0MwMTA4MDBBNDMwM0Q4NDU5Cis6MTA1NDcwMDAyNDA3MDAwNjhGOUYwMDUwM0MwMTA4MDBBQzI3M0Q4QzlDCis6MTA1NDgwMDA4Rjg4MDA1QzhGNTkwOTU4MDAwMDgwMjEwMTFGMjgyMzU0Cis6MTA1NDkwMDAwNEEwMDE0OTAzM0YyMDIzMDQ4MDAxNDcwMEE0MzAyQkNFCis6MTA1NEEwMDAxMEMwMDE0OTAwMDAwMDAwM0MwMTA4MDBBQzI1M0Q3MDFGCis6MTA1NEIwMDA4RTQyMDAwMDAwNDBGODA5MDAwMDAwMDAzMDQzMDAwMjY2Cis6MTA1NEMwMDAxNDYwMDBGODAwNDA4ODIxMzA0NDAwMDE1NDgwMDAxMDJFCis6MTA1NEQwMDA4RTQyMDAwNDNDMDkwODAwOEQyOTNENzQzQzBBQzAwMDNFCis6MTA1NEUwMDAwMTJBODAyNUFGNTAwRTAwOEY0NTAwMDAzMEFCMDAwODI4Cis6MTA1NEYwMDAxMTYwRkZGRDAwMDAwMDAwOTc0RDBFMDgyNDEwMDAwMTEwCis6MTA1NTAwMDBBNzhEMDAzQzhGNEMwRTA0QUY4QzAwMzQ4RTQyMDAwNEZCCis6MTA1NTEwMDAwMDQwRjgwOTAwMDAwMDAwMDIyMjg4MjUzMjJFMDAwMjE3Cis6MTA1NTIwMDAxNUMwMDE4MDAwMDAwMDAwM0MwOTA4MDA5NTI5M0Q3QzYxCis6MTA1NTMwMDAzQzA2MDgwMDk0QzYzRDg4M0MwQTA4MDA5NTRBM0Q3RTFBCis6MTA1NTQwMDAzQzE5MDgwMDhGMzkzRDc0MDEyNjYwMjEzQzE4MDgwMDgxCis6MTA1NTUwMDA4RjE4M0Q5ODNDMDMwODAwOTQ2MzNEOTIwMThBMjAyMUY2Cis6MTA1NTYwMDA4RjRFMDk0MDAzMjlGODIxMjQ4RjAwMDIwM0UzMjgyMUVDCis6MTA1NTcwMDAwMzE5NjgyMTNDMDEwODAwQTQyQzNEOEFBRjhFMDA2NDA5Cis6MTA1NTgwMDAzQzAxMDgwMEFDMkQzRDk4M0MwMTA4MDBBNDI1M0Q4MDVECis6MTA1NTkwMDAwRTAwMDA5RTMxRTRGRkZGOEY4NzAwNDgwMDQwMjAyMTZECis6MTA1NUEwMDAzQzAxMDgwMEEwMjczRDkxOEU0MjAwMDgyNEU4MDAwMTNDCis6MTA1NUIwMDBBRjg4MDA0ODAwNDBGODA5MDAwMDAwMDA5MzQ0MDEwQjQ4Cis6MTA1NUMwMDA4RjRDMDAyQzk3NEEwOTA4M0MwQjAwMEUwMzRCNDAyMURFCis6MTA1NUQwMDAzMTQ5RkZGRjAwMDkxOUMwOEY4QjAwNTBBRjQzMDAyQ0U5Cis6MTA1NUUwMDA5NzQzMDkwODk1MDYwMDFBMDA0MDM4MjEzMDhBMDA0MDg4Cis6MTA1NUYwMDAzMERGRkZGRkFDNUYwMDAwOEQxOTAwMUMwMDQwNDgyMTI4Cis6MTA1NjAwMDBBQzU5MDAwNDhEMTgwMDIwQUM1ODAwMDg5MTBGMDAxOTA3Cis6MTA1NjEwMDAzMUUzMDAwMzEwNzMwMEYwMDAwMDAwMDAyODYyMDAwMjc0Cis6MTA1NjIwMDAxNDQwMDEwOTI0MDUwMDAyMTA2NTAwRkQyNDBEMDAwMzRCCis6MTA1NjMwMDAxMDZEMDEwRDAwMDAwMDAwMTE0MDAwRDkwMDAwMDAwMEI1Cis6MTA1NjQwMDAzQzBBMDgwMDk1NEEzRDg2MjU0MjAwMDE5MzREMDkzNEU1Cis6MTA1NjUwMDA5MzU4MDkyMTk1MEUwMDJBMzFBMzAwRkYwMDAzMjA4MkYwCis6MTA1NjYwMDAzMzFGMDBGRjk3OTgwMDU4MDAwNDdFMDAwMDFGQ0MwMEY1Cis6MTA1NjcwMDAwMUY5NDAyNTMwNDlGRkZGMDEwOTEwMjUwMUQ4MzAyMUVCCis6MTA1NjgwMDAzQzA1NDAwMDAwNDU1MDI1MDAwNjZDMDBBQ0VEMDAwNEQwCis6MTA1NjkwMDBBQ0VBMDAwMDkzNDMwOTIwM0MwNDAwMDYyNEVEMDAxNDBBCis6MTA1NkEwMDAwMDAzRkUwMDAzRTRDODI1QUNGOTAwMDg4RjQ5MDkyQzZCCis6MTA1NkIwMDAyNzBGMDAwMTMxRUU3RkZGQUNFOTAwMEM4RjQ4MDkzMDY1Cis6MTA1NkMwMDBBNzhFMDA1ODI0RTkwMDI4QUNFODAwMTA4RjQ1MDkzODVGCis6MTA1NkQwMDAwMTIwNDAyMUFDRTUwMDE0QURBQjAwMDQ4RjQyMDk0MDJECis6MTA1NkUwMDBBREEyMDAwODkzNEIwOTM3M0MxRjA4MDA5M0ZGM0Q5MDgzCis6MTA1NkYwMDA4RjQzMDk0ODhGNEEwOTQwMzE2NjAwRkYwMEQ0MjAyMUJBCis6MTA1NzAwMDAwMDZBNzgyMzAwMDRDNzAwMDAxRkNDMDAwMzE5MjgyNTc1Cis6MTA1NzEwMDAzMUVFRkZGQzAwQUUxMDI1QURBMjAwMENBREEwMDAxMEQ0Cis6MTA1NzIwMDBBRjRDMDAyQzkzNEMwOTNFMzE4QjAwMDg1MTYwMDAwRkE4Cis6MTA1NzMwMDA4RTU4MDAwQzNDMDYwMTAxMzRDQTA4MEFBQ0VBMDAyODY1Cis6MTA1NzQwMDA4RjRCMDA3NEFEMkIwMDA0M0MwQzA4MDA5MThDM0Q5MEY1Cis6MTA1NzUwMDAzMTg3MDAxMDUwRTAwMDAzQUQyMDAwMDg4RjYyMDA2MDI4Cis6MTA1NzYwMDBBRDIyMDAwODI1MjgwMDBDOEU1ODAwMEMwMzAwRjgwOTEzCis6MTA1NzcwMDAwMTAwMjAyMTNDMTkwODAwOTczOTNEOEEzQzFGMDgwMDkwCis6MTA1NzgwMDA5N0ZGM0Q3RTAzM0Y3ODIxMjVFOTAwMDIwRTAwMDBDNzA4Cis6MTA1NzkwMDAzMTI0RkZGRjNDMEUwODAwOERDRTNENkMzQzA4MDgwMDE0Cis6MTA1N0EwMDA4RDA4M0Q3NDAxQzgyODIzM0MwMTA4MDBBQzI1M0Q2Q0UwCis6MTA1N0IwMDAxNEEwMDAwNjAwMDAwMDAwM0MwMzA4MDA4QzYzM0Q4QzMwCis6MTA1N0MwMDAzNDY0MDA0MDNDMDEwODAwQUMyNDNEOEMxMjAwMDA3MEExCis6MTA1N0QwMDA4RjhDMDA0NDhGNDcwRTEwOEY5MDAwNDRBRTA3MDAyMDNFCis6MTA1N0UwMDA4RjREMEUxOEFFMEQwMDI0M0MxMDA4MDA5NjEwM0Q4MDIxCis6MTA1N0YwMDAwRTAwMDA2MDAwMDAwMDAwMjQwMjAwNDBBRjQyMDgxNEM4Cis6MTA1ODAwMDA4Rjg2MDA1MDhGOEEwMDRDMDBEMDE4MjEwMDZBNTgyM0UwCis6MTA1ODEwMDAxOTYwMDAwNEFGODMwMDUwQUY2MzAwNTQ4RjY1MDA1NERCCis6MTA1ODIwMDBBRjg1MDA0QzEyMDAwMDBDMDAwMDAwMDA4RjQ0MDA3NDkzCis6MTA1ODMwMDA5MzY4MDA4MTM0MDlGQTAwMkQwRTAwMDcxMUMwMDAwNTlECis6MTA1ODQwMDAwMDg5MTgyMTkzN0YwMDgxMjQxOTAxRjQwM0Y5NzgwNDU5Cis6MTA1ODUwMDAwMUU0MTgyMUFGNjMwMDBDOEY0NDA5NUM4RjgzMDA1QzY2Cis6MTA1ODYwMDAwMDgzQzAyMzFCMDAwMDAzMDAwMDAwMDA4RjUwMDk1QzcwCis6MTA1ODcwMDBBRjkwMDA1QzBFMDAwMDYyMDAwMDAwMDA4RjhDMDA1MEIyCis6MTA1ODgwMDA4RTQ3MDAxMDNDMDEwODAwQUMyQzNEOTQwMEUwRjgwOTY0Cis6MTA1ODkwMDAwMDAwMDAwMDNDMEQwODAwOERBRDNENkM1NUEwRkVGNUVDCis6MTA1OEEwMDAyNDA3MDAwNjhGNDUwMDI0OTc1OTA5MDg4RjhCMDA2NDUwCis6MTA1OEIwMDA4Rjk0MDA1MDNDMEYwMDFGOTc4MjAwNTg4Rjg2MDA1NDMxCis6MTA1OEMwMDA4RjkzMDA0QzMzMjhGRkZGMzVFOUZGODAwMEE5NTAyNDU3Cis6MTA1OEQwMDAwMDA4NzFDMDMyMzIwMTAwQUY0RTAwMjRBNEMyMDAyQzc3Cis6MTA1OEUwMDBBRjRBMDAyNEFGNkIwMDQ0QUY3NDAwNTBBRjczMDA1NDU0Cis6MTA1OEYwMDAxNjQwMDA4MDMyMzgwMDEwNTcwMDAwODY4RUE0MDAwNDQ1Cis6MTA1OTAwMDAzMjIzMDA0MDU0NjAwMDFCOEVCMTAwMDg4RUIwMDAwQ0EyCis6MTA1OTEwMDAwMjAwRjgwOTAwMDAwMDAwOEZCRjAwMzA4RkI1MDAyQzk2Cis6MTA1OTIwMDA4RkI0MDAyODhGQjMwMDI0OEZCMjAwMjA4RkIxMDAxQ0U5Cis6MTA1OTMwMDA4RkIwMDAxODAzRTAwMDA4MjdCRDAwMzg5MzQ3MDEwOTI1Cis6MTA1OTQwMDA4Rjg4MDAzODAwMDdGRTAwMDNFOEM4MjVBRjU5MDA4MEEzCis6MTA1OTUwMDA4RjU4MDlBMDhGNTMwOUE0QUZCODAwMTBBRjU4MEUxNDg4Cis6MTA1OTYwMDA4RkI0MDAxMEFGNTQwRTEwQUY1MzBFMUMwQTAwMDk2MjIyCis6MTA1OTcwMDBBRjUzMEUxODAyMjBGODA5MDAwMDAwMDA4RUIwMDAwQzkyCis6MTA1OTgwMDAwMjAwRjgwOTAwMDAwMDAwMEEwMDBBQTg4RkJGMDAzMERBCis6MTA1OTkwMDBBNTgwMDAyMEE1OTMwMDIyMEEwMDBBNUJBRDkzMDAyNDk1Cis6MTA1OUEwMDAzQzA5MDgwMDk1MjkzRDg2M0MwNjA4MDA5NEM2M0Q4MEM4Cis6MTA1OUIwMDAwQTAwMDlGNDAxMjYxMDIxM0MwMTA4MDBBQzIwM0Q3MENBCis6MTA1OUMwMDAwQTAwMDk4RThFNDIwMDAwM0MwMTA4MDBBQzI0M0Q3MEE0Cis6MTA1OUQwMDAwQTAwMDk4RThFNDIwMDAwM0MwMzA4MDA5NDYzM0Q4QTUxCis6MTA1OUUwMDAzQzA0MDgwMDk0ODQzRDgwM0MxRjA4MDA5N0ZGM0Q3Q0U4Cis6MTA1OUYwMDA5NTE4MDAyNDAwNjRDODIxMDMzRjc4MjMwMDE4NkMwMDI4Cis6MTA1QTAwMDAyNUVFRkZGMjAxQUUyODI1QUM0NTAwMEMyNDAyMDgwMDZCCis6MTA1QTEwMDBBQ0UyMDAxNEFDRTAwMDEwMEEwMDA5RUYyNEU3MDAxODIzCis6MTA1QTIwMDA5NTA2MDAyNDk1MDkwMDI4MDAwNjI0MDAwMDA5MUMwMEEyCis6MTA1QTMwMDAzNDlGODEwMDM0NzkwODAwQUNGRjAwMENBQ0Y5MDAxMEYxCis6MTA1QTQwMDAwQTAwMDlFRjI0RTcwMDE0MTQ2MEZFRkIwMDAwMDAwMEM4Cis6MTA1QTUwMDA5NTE4MDAyNDAwMTg3QzAwMzVFRTA4MDBBQ0VFMDAwQzEwCis6MTA1QTYwMDAwQTAwMDlFRjI0RTcwMDEwM0MwNzA4MDA5NEU3M0Q4MDk2Cis6MTA1QTcwMDAzQzA0MDgwMDk0ODQzRDhBM0MwMzA4MDA5NDYzM0Q3QzA4Cis6MTA1QTgwMDA5NTE5MDAyNDk1MTgwMDI4MDA4N0Y4MjEwM0UzNzgyMzRFCis6MTA1QTkwMDAyNDA3MDgwMDAwMTkyQzAwMDAxODZDMDAyNUVFRkZFRTBBCis6MTA1QUEwMDAwMUFFMzAyNTM0QTI4MTAwQUQyNzAwMTgyNTI3MDAxQzQ3Cis6MTA1QUIwMDBBRDIyMDAwQ0FEMjYwMDEwMEEwMDA5RUZBRDIwMDAxNDQ1Cis6MTA1QUMwMDA5MzUyMDEwOTAwMDAyODIxMEUwMDA2MDIzMjQ0MDBGRjEzCis6MTA1QUQwMDA4RkJGMDAzMDhGQjUwMDJDOEZCNDAwMjg4RkIzMDAyNDA3Cis6MTA1QUUwMDA4RkIyMDAyMDhGQjEwMDFDOEZCMDAwMTgwM0UwMDAwOEI3Cis6MTA1QUYwMDAyN0JEMDAzODkzNUYwMTA5MzNFNDAwRkYwRTAwMDY2REY3Cis6MTA1QjAwMDAwMDAwMjgyMTMyMzgwMDEwNTMwMEZGN0UzMjIzMDA0MDZECis6MTA1QjEwMDA4RUE0MDAwNDAwODBGODA5MDAwMDAwMDAwQTAwMEFBMjE4Cis6MTA1QjIwMDAzMjIzMDA0MDEyMDBGRjVGMDAwMDAwMDA4RjU0MEUxNDZCCis6MTA1QjMwMDA4RjkyMDA0NEFFNTQwMDIwOEY1MzBFMUMwQTAwMEE4QTM0Cis6MTA1QjQwMDBBRTUzMDAyNDhGODIwMDFDMDA4MDQwMjEzQzA0MDEwMEUxCis6MTA1QjUwMDA5MDQ3MDA4NTMwRTMwMDIwMTA2MDAwMDkwMDAwMDAwMDNECis6MTA1QjYwMDAzQzA3MDgwMDhDRTczRDk0OEY4MzAwMTgwMEUzMjAyMzU2Cis6MTA1QjcwMDAwNDgwMDAwODkzODkwMDA0MTRFMzAwMDMwMTAwMjAyMTNECis6MTA1QjgwMDAwM0UwMDAwODAwODAxMDIxM0MwNDAxMDAwM0UwMDAwODRECis6MTA1QjkwMDAwMDgwMTAyMTExMjAwMDBCMDA2NzM4MjM4RjhDMDAyMDFCCis6MTA1QkEwMDAyNDA5MDAzNDkxOEIwMEJDMzE2QTAwMDI1MTQwMDAwMThECis6MTA1QkIwMDAyNDA5MDAzMDAwRTk2ODJCMTVBMEZGRjEwMTAwMjAyMTI1Cis6MTA1QkMwMDAwMEU5MzgyMzI0MTlGRkZDMDBCOUMwMjQwMEY5NzgyNDI3Cis6MTA1QkQwMDAwMEY4NzAyQjE1QzBGRkVBMDFFODIwMjEzMEMyMDAwMzU1Cis6MTA1QkUwMDAwMDAyMTgyMzE0QzAwMDEyMzA2OTAwMDMwMDAwMzAyMUE1Cis6MTA1QkYwMDAwMEE5NzAyMTAxQzY2ODIxMDBFRDYwMkIxMTgwRkZFMDMzCis6MTA1QzAwMDAzQzA0MDEwMDJEMkYwMDAxMDAwNjQ4MkIwMTA1MzgyMTFFCis6MTA1QzEwMDAwMUU5MzAyNDE0QzBGRkRBMjRFNEZGRkMyNDE5RkZGQzVFCis6MTA1QzIwMDAwMEI5QzAyNDAzMDgyMDIxMDNFMDAwMDgwMDgwMTAyMUVGCis6MTA1QzMwMDA4RjhCMDAyMDI0MDYwMDA0OTE2QTAwQkMzMTQ0MDAwNENDCis6MTA1QzQwMDAxNDgwRkZFQzAwQTk3MDIxMEEwMDBCNUUwMDAwMzAyMUQ3Cis6MTA1QzUwMDAyN0JERkZFOEFGQkYwMDEwOEY0NjAxMDA5MzRBMDEwOTNFCis6MTA1QzYwMDAzQzFGMDgwMDhGRkYwMDkwMjQwN0ZGODAzMTRGMDBGRjhBCis6MTA1QzcwMDAzMUU4MDA3RjAwMDg2MTQwMDNFNkM4MjEwMzJDQzAyMTAxCis6MTA1QzgwMDAyNzA5MDEyMDAxMjc3MDI0M0MwMTA4MDBBMDJGM0REMEU2Cis6MTA1QzkwMDBBRjRFMDgwQzNDMEQwODAwOERBRDAwOTAzQzA0MDA4MDE4Cis6MTA1Q0EwMDAzNDgyMDAwMzAxQTY1ODIxMDE2QzE4MjEyNDY1MDEyMENCCis6MTA1Q0IwMDAzMEFBMDA3ODAxNDI0MDI1QUY0ODA4MUMzQzFGMDgwMDZDCis6MTA1Q0MwMDA4RkZGMDA5MDhGODgwMDQwMDNFNkMwMjEzMzE5MDAwNzQyCis6MTA1Q0QwMDAwMzA3NDgyNDAzM0E3ODIxQUY0OTAwMjgyNUU5MDlDMDgxCis6MTA1Q0UwMDA5NTJFMDAwMjNDMEQwODAwOERBRDAwOEMzQzBBMDgwMDhBCis6MTA1Q0YwMDA4RDRBMDA5MDMxQ0MzRkZGMDFBNjE4MjEwMDBDNTk4MDNECis6MTA1RDAwMDAwMDZCMjgyMTAwQTcyMDI0QUY0NDAwMkM5NTIyMDAwMjFDCis6MTA1RDEwMDAzQzFGMDgwMDhGRkYwMDhDOTEwNzAwODUzMDU5M0ZGRjIyCis6MTA1RDIwMDAwM0U2NzgyMTAwMTlDMTgwMDE0NjcwMjEwMUY4NjgyMTNECis6MTA1RDMwMDAzMUNDMDA3RjMxQUIwMDdGMDE5QTI4MjEwMTdBNTAyMUJDCis6MTA1RDQwMDAzQzAzMDAwQzNDMDQwMDBFMDBBMzI4MjEwMTQ0MTAyMTU4Cis6MTA1RDUwMDAzMEU2MDAyMDI3NDcwOTgwQUY4MjAwMkNBRjg4MDAxQzY2Cis6MTA1RDYwMDBBRjg5MDAyNEFGODUwMDIwMTBDMDAwMDZBRjg3MDAyODRGCis6MTA1RDcwMDA4RDAyMDA1MDhDQTQwMTBDMDA0NDMwMjMxOEMwMDA3NzIxCis6MTA1RDgwMDAwMDAwMDAwMDkxMEMwMDg1MjQwREZGREYwMThEMzgyNEY4Cis6MTA1RDkwMDBBMTA3MDA4NThGOEIwMDFDOEY4OTAwMjQ4Rjg3MDAyODI2Cis6MTA1REEwMDA4RDY1MDA0Q0FGODUwMDE4OTEyRjAwMEQzMUVFMDAyMDVECis6MTA1REIwMDAxMUMwMDAxNzAwMDAwMDAwMjQwOTAwMDFBMzg5MDAwNDlECis6MTA1REMwMDBBRjgwMDAwQzhDRTQwMDI0OEY4NTAwMEMyNDBBMDAwOEFFCis6MTA1REQwMDBBRjgwMDAwOEFGODAwMDEwM0MwMTA4MDBBNDJBM0Q3RTdGCis6MTA1REUwMDAzQzAxMDgwMEE0MjAzRDkyMEUwMDBCMzIwMDAwMzAyMTNGCis6MTA1REYwMDA4Rjg1MDAyNDhGQkYwMDEwQUY4MjAwMTQ5MEE4MDAwRDgzCis6MTA1RTAwMDAyN0JEMDAxODAwMDgzOTQyMDNFMDAwMDgzMEUyMDAwMTE1Cis6MTA1RTEwMDA5MTNGMDAwMjI0MTgwMDAxMzNGOTAwRkYwMDE5MjE4MjhDCis6MTA1RTIwMDAxMDk4MDAzOTI0MDgwMDAyMTA4ODAwNUI4Rjg2MDAyQzJGCis6MTA1RTMwMDA4Q0U1MDAyNDE0QTAwMDFCOEY5RjAwMjA5MTIyMDAwMEZECis6MTA1RTQwMDAyNDBBMDAwNTMwNDYwMDNGMTBDQTAwNDcyNDA0MDAwMTIwCis6MTA1RTUwMDA4Rjg2MDAwOEEzODQwMDA0QUY4NjAwMTBBRjg2MDAwQzc0Cis6MTA1RTYwMDA4Q0U0MDAyNDhGODUwMDBDMjQwQTAwMDgzQzAxMDgwMDAzCis6MTA1RTcwMDBBNDJBM0Q3RTNDMDEwODAwQTQyMDNEOTIwRTAwMEIzMjc2Cis6MTA1RTgwMDAwMDAwMDAwMDhGODUwMDI0OEZCRjAwMTBBRjgyMDAxNDM3Cis6MTA1RTkwMDA5MEE4MDAwRDI3QkQwMDE4MDAwODM5NDIwM0UwMDAwODUzCis6MTA1RUEwMDAzMEUyMDAwMThDRjgwMDA4OENGOTAwMjQ4RkVFMDBDNDY5Cis6MTA1RUIwMDBBMzgwMDAwNDhDRTQwMDI0QUY4RTAwMEM4Rjg1MDAwQ0JFCis6MTA1RUMwMDA4Rjg2MDAwODAzMTk3ODIzMjQwQTAwMDhBRjhGMDAxMDdBCis6MTA1RUQwMDAzQzAxMDgwMEE0MkEzRDdFM0MwMTA4MDBBNDIwM0Q5MjFDCis6MTA1RUUwMDAwRTAwMEIzMjAwMDAwMDAwOEY4NTAwMjQ4RkJGMDAxMEQxCis6MTA1RUYwMDBBRjgyMDAxNDkwQTgwMDBEMjdCRDAwMTgwMDA4Mzk0Mjk5Cis6MTA1RjAwMDAwM0UwMDAwODMwRTIwMDAxOTEyMzAwMDAzMDYyMDAzRjBFCis6MTA1RjEwMDAxMDQ0MDAyNzhGODUwMDIwOENFNDAwMjQxNDgwMDAyMTg5Cis6MTA1RjIwMDAwMDAwMDAwMDhEMkUwMDE4M0MxODdGRkY4Rjg1MDAyMDk4Cis6MTA1RjMwMDAzNzBGRkZGRjAxQ0YxODI0QUY4MzAwMDg4RjlGMDAwOEExCis6MTA1RjQwMDA4Q0E4MDA4NDAzRThDODJCMTcyMDAwMDIwM0UwMjAyMTVFCis6MTA1RjUwMDA4Q0E0MDA4NDBBMDAwQkVEQUY4NDAwMDg4Q0EzMDEwQzE0Cis6MTA1RjYwMDAwQTAwMEJDQkFGODMwMDE4OEQyQzAwMTg4Rjg2MDAwODE5Cis6MTA1RjcwMDAzQzBEN0ZGRjhGODkwMDIwMzVBM0ZGRkYwMTgzNTgyNDRDCis6MTA1RjgwMDAyNDA0MDAwMUFGOEIwMDEwQUQyMDAwQ0NBMzg0MDAwNERBCis6MTA1RjkwMDAwQTAwMEJGOUFGODYwMDBDOENDQTAwMTQwQTAwMEJFRDQ2Cis6MTA1RkEwMDBBRjhBMDAwODhDQTMwMEM4MEEwMDBDMzBBRjgzMDAwODM5Cis6MTA1RkIwMDA4Rjg0MDAyQzhDQUMwMDY0OEM4RDAwMTQwMThENTgyQkM4Cis6MTA1RkMwMDAxMTYwMDAwNDAwMDAwMDAwOENBMjAwNjQwQTAwMEMzMDg0Cis6MTA1RkQwMDBBRjgyMDAwODhDODIwMDE0MEEwMDBDMzBBRjgyMDAwOEU3Cis6MTA1RkUwMDA4Rjg1MDAwQzI3QkRGRkUwQUZCRjAwMThBRkIxMDAxNEQ0Cis6MTA1RkYwMDAxNEEwMDAwN0FGQjAwMDEwOEY4NjAwMjQyNDAyMDAwNTEzCis6MTA2MDAwMDA5MEM0MDAwMDMwODMwMDNGMTA2MjAwQjY4Rjg0MDAyMEVGCis6MTA2MDEwMDA4RjkxMDAwODAwQTA4MDIxOEY4QzAwMjgzQzA1MDgwMDhCCis6MTA2MDIwMDA4Q0E1M0Q3MDhEOEIwMDA0MzE2NjNGRkYwMEM1NTAyQjYxCis6MTA2MDMwMDA1NTQwMDAwMTAwQzAyODIxOTM4RDAwMDQxMUEwMDA3Mzc5Cis6MTA2MDQwMDAwMEIwRjgyQjhGOTgwMDIwMjQwNDAwMzQ5MzBGMDBCQzdDCis6MTA2MDUwMDAzMUVFMDAwMjUxQzAwMDAxMjQwNDAwMzAwMEE0QzgyQjFFCis6MTA2MDYwMDAxNzIwMDBEMTAwMDAwMDAwMDBBNDI4MjMwMEIwRjgyQjY2Cis6MTA2MDcwMDAzQzAxMDgwMEE0MjQzRDdDMTdFMDAwNjgwMjAwMjAyMUI4Cis6MTA2MDgwMDAzQzAzMDgwMDhDNjMzRDZDMDA4MzEwMkI1NDQwMDAwMURFCis6MTA2MDkwMDAwMDgwMTgyMThGODgwMDI0M0MwMTA4MDBBQzIzM0Q3NDQ3Cis6MTA2MEEwMDAwMDAwNDgyMTkxMDQwMDBEMzA4MzAwMjA1MDYwMDAwMTYxCis6MTA2MEIwMDA4RjQ5MEUxODhGODMwMDE0MDEyMzM4MkIxMEUwMDA1OUVDCis6MTA2MEMwMDAwMDAwMDAwMDNDMDQwODAwOEM4NDNENzQwMDg5NTgyMUM1Cis6MTA2MEQwMDAwMDZCNTAyQjExNDAwMDU2MDA5MDYwMkIwMDY5MzAyMzVDCis6MTA2MEUwMDAwMEMwMjAyMTNDMDEwODAwQUMyNjNENzQxMjAwMDAwM0QyCis6MTA2MEYwMDAyNDFGRkZGQzEwOTAwMDhBMzIyNzAwMDMwMDlGQzgyNDUxCis6MTA2MTAwMDAzQzAxMDgwMEFDMzkzRDc0M0MwMTA4MDBBNDIwM0Q5MkRDCis6MTA2MTEwMDA4Rjg0MDAwQzEyMDQwMDA3OEY4MzAwMjBBRjkxMDAwOEM5Cis6MTA2MTIwMDAwMjAwMjAyMThDNzEwMENDQUY5MDAwMEMyNjMwMDAwMUMxCis6MTA2MTMwMDBBQzcwMDBDQzNDMDIwODAwOEM0MjNENzQ4RjhBMDAxMDg5Cis6MTA2MTQwMDAyNDA3MDAxODAwODIyMDIzMDE0MjI4MjNBRjg0MDAwQzdBCis6MTA2MTUwMDAxMDgwMDAwMkFGODUwMDEwMjQwNzAwMTA4Rjg2MDAxQ0ZECis6MTA2MTYwMDAzQzAxMDgwMEEwMjczRDkwMjQwNzAwNDA5MENDMDA4NTBBCis6MTA2MTcwMDAzMThCMDBDMDExNjcwMDQwOEY4RDAwMTQxNEEwMDAxNUYyCis6MTA2MTgwMDAwMDAwMjAyMTkzNEEwMTA5OEY0MjA5NzQzMTQ1MDBGRjI0Cis6MTA2MTkwMDAwMDAyMjYwMjI0QTMwMDAxMzA5MDAwN0YzMDcxMDA3RkFFCis6MTA2MUEwMDAxMjMwMDA3QTI0MDdGRjgwQTBDMzAwODMzQzA5MDgwMDU2Cis6MTA2MUIwMDA4RDI5M0Q4QzhGODgwMDI0MjQwRDAwMDIzNTJDMDAwODg5Cis6MTA2MUMwMDAzQzAxMDgwMEEwMkQzREQxM0MwMTA4MDBBQzJDM0Q4Q0M5Cis6MTA2MUQwMDAyNDA0MDAxMDkxMEUwMDBEMzFDNjAwMjAxMEMwMDAwNUVGCis6MTA2MUUwMDAwMDgwMTgyMTI0MDgwMDAxM0MwMTA4MDBBQzI4M0Q3NEZGCis6MTA2MUYwMDAzNDgzMDAwMThGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMERFCis6MTA2MjAwMDAwMDYwMTAyMTAzRTAwMDA4MjdCRDAwMjAzQzAxMDgwMEM5Cis6MTA2MjEwMDBBNDIwM0Q3QzEzRTBGRjlBMDIwMDIwMjEwQTAwMEM4MTlCCis6MTA2MjIwMDAwMEEwMjAyMTNDMDQwODAwOEM4NDNENzQwMDkwNjAyQjY5Cis6MTA2MjMwMDAxMTgwRkZBRTAwMDAwMDAwM0MwRjA4MDA5NUVGM0Q3QzkwCis6MTA2MjQwMDAwMUU0NzAyMTAxQzY2ODJCMTFBMDAwMDcyQzgyMDAwNDE0Cis6MTA2MjUwMDAzQzFGNjAwMDhGRjk1NDA0MzMzODAwM0YxNzAwRkZFNUZFCis6MTA2MjYwMDAyNDAzMDA0MjJDODIwMDA0MTA0MEZGQTAyNDAzMDA0MkJCCis6MTA2MjcwMDAwQTAwMENERjhGQkYwMDE4MTUyREZGQzAwMDAwMDAwMEMyCis6MTA2MjgwMDA4Q0RGMDA3NDNDMDM4MDAwMjQwNUZGODAwM0UzQzgyNUY1Cis6MTA2MjkwMDBBQ0Q5MDA3NDkwRDgwMDg1MjQwRTAwMDQyNDA0MDAxMEFBCis6MTA2MkEwMDAzMzBGMDAzRjAxRTU0MDI1QTBDODAwODU4Rjg4MDAyNEZBCis6MTA2MkIwMDAzQzAxMDgwMEEwMkUzREQxMjQwMzAwMDE5MTA2MDAwREYxCis6MTA2MkMwMDAzMEM5MDAyMDE1MjAwMDAzMDAwMDAwMDAzQzAzMDgwMDM2Cis6MTA2MkQwMDA4QzYzM0Q3NDNDMDEwODAwQUMyMzNENkMwQTAwMENENjc1Cis6MTA2MkUwMDAwMDAwMDAwMDhGODcwMDEwOEM4ODAwODQwMEU4MjgyQkI1Cis6MTA2MkYwMDAxNEEwMDAwMjAwRTA4ODIxOEM5MTAwODQyNDA5MDAwMTkwCis6MTA2MzAwMDBBMzg5MDAwNDhGNDQwRTE4MDIyMDI4MjEwRTAwMEIzMkFFCis6MTA2MzEwMDAwMjIwMzAyMTAyMjA4MDIxMEEwMDBDNjdBRjgyMDAxNDg1Cis6MTA2MzIwMDAwMDA3MTgyMzMwNjYwMDAzM0MwMTA4MDBBNDI2M0Q5MkI0Cis6MTA2MzMwMDAxMjIwMDAwNThGOEMwMDIwOTE4QjAwQkMzMTZBMDAwNDc0Cis6MTA2MzQwMDAxNTQwMDAxNTI0Q0QwMDA0M0MwRjA4MDA5NUVGM0Q5MjQ4Cis6MTA2MzUwMDAwMUU0NzAyMTAwQUUzMDJCNTBDMEZGNkU4Rjg0MDAwQzIyCis6MTA2MzYwMDAyQzg1MDAwNTE0QTBGRkEzMjQwMzAwNDIzMDk4MDAwM0VECis6MTA2MzcwMDAxNzAwMDAwMjAwOTgxODIzMjQ4M0ZGRkMzQzAxMDgwMDRBCis6MTA2MzgwMDBBQzIzM0Q3NDBBMDAwQ0EzMDAwMDAwMDAwMEE3NTgyNEIxCis6MTA2MzkwMDAwQTAwMENDQjAxNjcxODI2M0MwMTA4MDBBNDJEM0Q5MjkxCis6MTA2M0EwMDAwQTAwMEQzMzAwMDAwMDAwM0MwMTA4MDBBQzIwM0Q3NEUxCis6MTA2M0IwMDAwQTAwMENERTI0MDMwMDQyOEY4MzAwMTAxNDYwMDAwN0UzCis6MTA2M0MwMDAwMDAwMTAyMThGODgwMDI0MjQwNTAwMDU5MTA2MDAwMDlDCis6MTA2M0QwMDAzMEM0MDBGRjEwODUwMDAzMDAwMDAwMDAwM0UwMDAwODQ3Cis6MTA2M0UwMDAwMDAwMDAwMDkxMEEwMDE4MzE0OTAwRkYwMDA5MzlDMjdECis6MTA2M0YwMDAxNEUwRkZGQThGODUwMDFDM0MwNDA4MDA5NDg0M0Q3QzY3Cis6MTA2NDAwMDAzQzAzMDgwMDhDNjMzRDk0M0MxOTA4MDA4RjM5M0Q3NEFGCis6MTA2NDEwMDAzQzBGMDgwMDk1RUYzRDkyMDA2NEMwMjE4Q0FEMDA1NDA0Cis6MTA2NDIwMDAwMzE5NzAyMTAxQ0Y2MDIxMDE4RDU4MjMxOTYwMDAxRENGCis6MTA2NDMwMDAwMDAwMDAwMDkxMEUwMDFDOEY4QzAwMkM5NzRCMEUxMDVBCis6MTA2NDQwMDAzMUNEMDBGRjhEODUwMDA0MDE2RDMwMjM4RDg4MDAwMDYzCis6MTA2NDUwMDAzMENFRkZGRjAwMEU1MTAwMDBBQUM4MjEwMDAwMzgyMUY1Cis6MTA2NDYwMDAwMTA3MjAyMTAzMkExODJCMDA4M0MwMjFBRDk5MDAwNEM1Cis6MTA2NDcwMDBBRDk4MDAwMDkxOEYwMDBBMDFDRjY4MjFBMThEMDAwQTFDCis6MTA2NDgwMDA4Rjg4MDAyQzk3NEIwRTEyQTUwQjAwMDg5NTBBMDAzODM4Cis6MTA2NDkwMDAyNTQ5MDAwMUE1MDkwMDM4OTEwNzAwMEQzNEU2MDAwOEUwCis6MTA2NEEwMDBBMTA2MDAwRDAzRTAwMDA4MDAwMDAwMDAyN0JERkZFMDhBCis6MTA2NEIwMDA5Mzg3MDAwNDhGOEYwMDI0OEZBRDAwMTQzQzBFN0ZGRjY0Cis6MTA2NEMwMDA4Rjg5MDAwQzM1QzhGRkZGQUZCRjAwMUNBRkIwMDAxOEFDCis6MTA2NEQwMDAwMUE4MTgyNDkxRUEwMDBEMDAwNzE3QzAzQzFGQkZGRjU4Cis6MTA2NEUwMDAwMDYyNTgyNTJEMkUwMDAxOEY5MDAwMTgzN0Y5RkZGRjBDCis6MTA2NEYwMDAzQzE4MDgwMDhGMTgzRDk0M0MwRjA4MDA5NUVGM0Q4QTJBCis6MTA2NTAwMDAwMTc5NjgyNDAwMEU0NzgwM0MwN0VGRkYzQzA1RjBGRjRGCis6MTA2NTEwMDAwMUE4MTgyNTMxNDkwMDIwMzRFMkZGRkYzNEFDRkZGRjA5Cis6MTA2NTIwMDAwMzEwNTgyMzI3QTUwMDEwMjQwNjAwMDIyNUVBMDAwMkM0Cis6MTA2NTMwMDAwMDYyMTgyNDAwODA4MDIxMTUyMDAwMDIwMDAwNDAyMTA0Cis6MTA2NTQwMDA4RjQ4MEUxQ0E3QUEwMDEyMDU2MDAwMzcyNDA3MDAwMDIwCis6MTA2NTUwMDAzMEZGMDBGRjAwMUZDRjAwOEY4QjAwMUMwMDc5MzgyNTEzCis6MTA2NTYwMDBBRkE3MDAxNDkxNkYwMDg1M0MwODA4MDA5MTA4M0Q5MTg5Cis6MTA2NTcwMDAzQzE4REZGRjMxRUUwMEMwMzcwQUZGRkYwMDBFMTgyQjdBCis6MTA2NTgwMDAzQzFGMDgwMDk3RkYzRDg0MDBFQTY4MjRBM0E4MDAxMTdGCis6MTA2NTkwMDAwMDAzMTc0MDAxQTI0ODI1OEZCOTAwMTBBRkE5MDAxNENECis6MTA2NUEwMDAzQzBBMDgwMDkxNEEzRDkzQTdCRjAwMTY4RkE4MDAxNDJCCis6MTA2NUIwMDAwMzJDQzAyNDNDMEIwMTAwM0MwRjBGRkYwMzBCMTgyNURDCis6MTA2NUMwMDAzMTQ3MDAwMzM1RUVGRkZGMDEwQzY4MjQwMDA3MTYwMDc5Cis6MTA2NUQwMDAwMDZFRjgyNDNDMDk3MDAwMDFBMkM4MjUwM0U5NTgyNTgzCis6MTA2NUUwMDBBRkI5MDAxNEFGQUIwMDEwMEUwMDAwNzZBM0EwMDAxNUU5Cis6MTA2NUYwMDA4RjhDMDAyNDI2MDIwMDA4OTE4NjAwMEQzMEM0MDAyMEY0Cis6MTA2NjAwMDAxMDgwMDAwNjhGQkYwMDFDM0MwNTA4MDA5NEE1M0Q4MDRCCis6MTA2NjEwMDAyNEIwRkZGRjNDMDEwODAwQTQzMDNEODA4RkIwMDAxODdCCis6MTA2NjIwMDAwM0UwMDAwODI3QkQwMDIwOEY5ODAwMTQwMTE4NTAyQkFDCis6MTA2NjMwMDA1NTQwRkZDNzI0MDcwMDAxMEEwMDBEQjYzMEZGMDBGRkQ4Cis6MTA2NjQwMDA5MzgyMDAwNDI3QkRGRkUwQUZCRjAwMTgxMDQwMDAwRjg5Cis6MTA2NjUwMDAwMDgwNTAyMThGODgwMDI0MjQwQjAwMDU4Rjg5MDAwOEJBCis6MTA2NjYwMDA5MTA3MDAwMDhGODQwMDIwMDEwMDI4MjEzMEUzMDAzRkMzCis6MTA2NjcwMDA4Rjg2MDAyQzEwNkIwMDA4MDAwMDM4MjFBRkE5MDAxMDk1Cis6MTA2NjgwMDAwRTAwMDQwRUFGQUEwMDE0QTM4MDAwMDQ4RkJGMDAxOEYwCis6MTA2NjkwMDAwM0UwMDAwODI3QkQwMDIwOEQxOTAwMTgzQzBGMDgwMEZBCis6MTA2NkEwMDA4REVGM0Q3NDhGOTgwMDEwM0MwMjdGRkY4RDA4MDAxNDIxCis6MTA2NkIwMDAzNDVGRkZGRjAzM0Y2ODI0MDFGODcwMjEwMUFFNjAyM0JGCis6MTA2NkMwMDAwMTg4MzgyMUFGQTkwMDEwMEUwMDA0MEVBRkFBMDAxNEYzCis6MTA2NkQwMDAwQTAwMEUwNEEzODAwMDA0OEY4NzAwMjQzQzA1MDgwMEY0Cis6MTA2NkUwMDA5NEE1M0Q5MjNDMDIwODAwOEM0MjNEOEM5MEU2MDAwRDQyCis6MTA2NkYwMDAwMDA1MjQwMDMwQzMwMDIwMTA2MDAwMkMwMDQ0NDAyNTE5Cis6MTA2NzAwMDA4Rjg1MDAxQzAwMDA2MDIxMjQwQjAwMDE5MEEzMDA4NUYwCis6MTA2NzEwMDAwMDAwNDgyMTI0MEEwMDAxM0MwRjgwMDAzNUVFMDA3MDgzCis6MTA2NzIwMDA4REM3MDAwMEFGODcwMDMwOEY1ODAxNzgwNzAwRkZGRTRCCis6MTA2NzMwMDAzQzAzODAwMDM0NzkwMDcwOEYzODAwMDAzQzA1MDgwMDZECis6MTA2NzQwMDA4Q0E1MDA3NDNDMEQwODAwOERBRDAwNzAwMzA3NzgyMzA0Cis6MTA2NzUwMDAwMEFGMzgyMTAwMDAxMDIxMDBFRjMwMkIwMUEyMjAyMUQyCis6MTA2NzYwMDAwMDg2MTgyMTNDMDEwODAwQUMyNzAwNzQzQzAxMDgwMDk5Cis6MTA2NzcwMDBBQzIzMDA3MEFGNEIwMTQ4M0MxOTA4MDA4RjM5M0Q5NEExCis6MTA2NzgwMDBBNzQ5MDE0NEE3NEEwMTQ2QUY1OTAxNEMzQzBCMDgwMEY4Cis6MTA2NzkwMDA5MTZCM0Q5MUEzNEIwMTUyQUY0ODAxNTQzQzA4MTAwMDRFCis6MTA2N0EwMDBBNzRDMDE1ODAzRTAwMDA4QUY0ODAxNzg4RjRCMEUxQzNFCis6MTA2N0IwMDAzQzBBMDgwMDhENEEzRDc0OTc0OTBFMTY5NzREMEUxNEY5Cis6MTA2N0MwMDAwMTQ1NjAyMTMxMkFGRkZGMEEwMDBFMjczMUE5RkZGRjkyCis6MTA2N0QwMDA4RjgzMDAyNDkwNjQwMDBEMzA4MjAwMjAxMDQwMDAyOTM3Cis6MTA2N0UwMDAwMDAwMDAwMDAwMDA0ODIxMDAwMDUwMjEwMDAwNDAyMTZFCis6MTA2N0YwMDAzQzA3ODAwMDM0RUIwMDcwOEQ2NzAwMDBBRjg3MDAzMEVECis6MTA2ODAwMDA4RjRDMDE3ODA1ODBGRkZFM0MwRDgwMDAzNUFDMDA3MDk4Cis6MTA2ODEwMDA4RDhCMDAwMDNDMDUwODAwOENBNTAwNzQzQzA0MDgwMDJBCis6MTA2ODIwMDA4Qzg0MDA3MDAxNjczMDIzMDBBNjc4MjEwMDAwMTAyMUJECis6MTA2ODMwMDAwMUU2QzgyQjAwODJDMDIxMDMxOTcwMjEzQzAxMDgwMDI5Cis6MTA2ODQwMDBBQzJGMDA3NDNDMDEwODAwQUMyRTAwNzBBRjQ5MDE0ODI5Cis6MTA2ODUwMDAzQzBEMDgwMDhEQUQzRDk0QTc0ODAxNDQyNDA5MDA0MDNCCis6MTA2ODYwMDBBNzRBMDE0NjNDMDgxMDAwMjQwQUZGOTFBRjREMDE0Qzk1Cis6MTA2ODcwMDBBMzRBMDE1MkFGNDkwMTU0QTc0MDAxNTgwM0UwMDAwODYwCis6MTA2ODgwMDBBRjQ4MDE3ODhGNDkwRTE4OTc0NjBFMTI5NzQ1MEUxMEEzCis6MTA2ODkwMDAzMENBRkZGRjBBMDAwRTVEMzBBOEZGRkY4RjgzMDAyNDdGCis6MTA2OEEwMDAyN0JERkZGODkwNjQwMDBEMzA4MjAwMjAxMDQwMDAzQUIwCis6MTA2OEIwMDAwMDAwMDAwMDI0MEIwMDAxMDAwMDQ4MjEyNDBBMDAwMTEwCis6MTA2OEMwMDAzQzA4ODAwMDM1MDcwMDcwOENFMzAwMDBBRjgzMDAzMDg3Cis6MTA2OEQwMDA4RjRDMDE3ODA1ODBGRkZFM0MwRTgwMDAzQzA0MDgwMEQwCis6MTA2OEUwMDA5MDg0M0REMDM1QzcwMDcwOENFQzAwMDAzQzA1MDgwMDVBCis6MTA2OEYwMDA4Q0E1MDA3NEEzQTQwMDAzM0MxOTA4MDA4RjM5MDA3MDE0Cis6MTA2OTAwMDA4RkFEMDAwMDAxODMzMDIzMDBBNjM4MjEwMDAwMTAyMTQ0Cis6MTA2OTEwMDAwMzIyNzgyMTAwRTZDMDJCMDFGODYwMjEwMUFFNDAyNTVBCis6MTA2OTIwMDBBRkE4MDAwMDNDMDEwODAwQUMyNzAwNzQzQzAxMDgwMDNGCis6MTA2OTMwMDBBQzJDMDA3MDkzNDYwMTBBM0MwNDA4MDA5MDg0M0REMUMxCis6MTA2OTQwMDBBM0EwMDAwMkEzQTYwMDAxOEZBMzAwMDAzQzA1ODBGRkM2Cis6MTA2OTUwMDAzMDk5MDA3RjM0QTJGRkZGMDA2Mjc4MjQwMDE5QzYwMDNFCis6MTA2OTYwMDAwMUY4NzAyNTI0MEQzMDAwQUY0RTAxNEMyN0JEMDAwODAyCis6MTA2OTcwMDBBRjREMDE1NEE3NDAwMTU4QUY0QjAxNDhBNzQ5MDE0NDBFCis6MTA2OTgwMDBBNzRBMDE0NjNDMDkxMDAwMjQwQUZGODBBMzRBMDE1MjhECis6MTA2OTkwMDAwM0UwMDAwOEFGNDkwMTc4OEY0QjBFMTg5NzQ2MEUxMjlFCis6MTA2OUEwMDA5NzQ1MEUxMDMwQ0FGRkZGMEEwMDBFOTEzMEE5RkZGRjc1Cis6MTA2OUIwMDA4Rjg1MDAxQzI0MDIwMDgwOTBBNDAwODUzMDgzMDBDMEQ1Cis6MTA2OUMwMDAxMDYyMDAwNThGODYwMDIwOEY4ODAwMDg4Rjg3MDAwQ0RBCis6MTA2OUQwMDBBQ0M4MDBDOEFDQzcwMEM0MDNFMDAwMDgwMDAwMDAwMDU5Cis6MTA2OUUwMDAzQzBBMDgwMDI1NEEzOTU0M0MwOTA4MDAyNTI5M0EyMDY4Cis6MTA2OUYwMDAzQzA4MDgwMDI1MDgyREQ0M0MwNzA4MDAyNEU3M0IzNDU4Cis6MTA2QTAwMDAzQzA2MDgwMDI0QzYzN0M0M0MwNTA4MDAyNEE1MzUzQ0Q0Cis6MTA2QTEwMDAzQzA0MDgwMDI0ODQzMTY0M0MwMzA4MDAyNDYzMzg1QzhGCis6MTA2QTIwMDAzQzAyMDgwMDI0NDIzNjMwM0MwMTA4MDBBQzJBM0Q1MEFDCis6MTA2QTMwMDAzQzAxMDgwMEFDMjkzRDRDM0MwMTA4MDBBQzI4M0Q0ODE1Cis6MTA2QTQwMDAzQzAxMDgwMEFDMjczRDU0M0MwMTA4MDBBQzI2M0Q2NEU1Cis6MTA2QTUwMDAzQzAxMDgwMEFDMjUzRDVDM0MwMTA4MDBBQzI0M0Q1OERECis6MTA2QTYwMDAzQzAxMDgwMEFDMjMzRDY4M0MwMTA4MDBBQzIyM0Q2MEJECis6MDg2QTcwMDAwM0UwMDAwODAwMDAwMDAwMzMKKzowMDAwMDAwMUZGCisvKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIGZpcm13YXJlIGRhdGEgZGVyaXZlZCBmcm9tIHByb3ByaWV0YXJ5IHVucHVibGlzaGVkCisgKiBzb3VyY2UgY29kZSwgQ29weXJpZ2h0IChjKSAyMDA0IC0gMjAwOSBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIGZvciB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlybXdhcmUgZGF0YQorICogaW4gaGV4YWRlY2ltYWwgb3IgZXF1aXZhbGVudCBmb3JtYXQsIHByb3ZpZGVkIHRoaXMgY29weXJpZ2h0IG5vdGljZSBpcworICogYWNjb21wYW55aW5nIGl0LgorICovCmRpZmYgLS1naXQgYS9maXJtd2FyZS9ibngyL2JueDItbWlwcy0wOS02LjAuMTcuZncuaWhleCBiL2Zpcm13YXJlL2JueDIvYm54Mi1taXBzLTA5LTYuMC4xNy5mdy5paGV4CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZjM5YjRhLi4wMDAwMDAwCi0tLSBhL2Zpcm13YXJlL2JueDIvYm54Mi1taXBzLTA5LTYuMC4xNy5mdy5paGV4CisrKyAvZGV2L251bGwKQEAgLTEsNjQ4OCArMCwwIEBACi06MTAwMDAwMDAwODAwMDExODA4MDAwMDAwMDAwMDU1OTQwMDAwMDBDODE2Ci06MTAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwNTU5NEVGCi06MTAwMDIwMDAwMDAwMDAzODAwMDA1NjVDMDgwMDAwQTAwODAwMDAwMDM2Ci06MTAwMDMwMDAwMDAwNTc0NDAwMDA1Njk0MDgwMDU5MjAwMDAwMDA4NDM2Ci06MTAwMDQwMDAwMDAwQUREODA4MDA1NzQ0MDAwMDAxQzAwMDAwQUU1Q0JECi06MTAwMDUwMDAwODAwMzIxMDA4MDAwMDAwMDAwMDkwOTAwMDAwQjAxQzYyCi06MTAwMDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwOTA5MDY4Ci06MTAwMDcwMDAwMDAwMDMzQzAwMDE0MEFDMDgwMDA0OTAwODAwMDQwMEFDCi06MTAwMDgwMDAwMDAwMTJGQzAwMDE0M0U4MDAwMDAwMDAwMDAwMDAwMDM2Ci06MTAwMDkwMDAwMDAwMDAwMDA4MDAxNkZDMDAwMDAwMDQwMDAxNTZFNDA3Ci06MTAwMEEwMDAwODAwMDBBODA4MDAwMDAwMDAwMDNEMjgwMDAxNTZFOEY0Ci06MTAwMEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwM0QyOEQzCi06MDgwMEMwMDAwMDAwMDAzMDAwMDE5NDEwNjMKLTowODAwQzgwMDBBMDAwMDQ2MDAwMDAwMDBFMAotOjEwMDBEMDAwMDAwMDAwMDAwMDAwMDAwRDYzNkY2RDM2MkUzMDJFMzFFMQotOjEwMDBFMDAwMzcwMDAwMDAwNjAwMTEwMjAwMDAwMDAwMDAwMDAwMDNCRAotOjEwMDBGMDAwMDAwMDAwQzgwMDAwMDAzMjAwMDAwMDAzMDAwMDAwMDAwMwotOjEwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRgotOjEwMDExMDAwMDAwMDAwMTAwMDAwMDEzNjAwMDBFQTYwMDAwMDAwMDU0OQotOjEwMDEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhDNwotOjEwMDEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRgotOjEwMDE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRgotOjEwMDE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RgotOjEwMDE2MDAwMDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RAotOjEwMDE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RgotOjEwMDE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDA1RgotOjEwMDE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RgotOjEwMDFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RgotOjEwMDFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRgotOjEwMDFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRgotOjEwMDFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRgotOjEwMDFFMDAwMDAwMDAwMDAxMDAwMDAwMzAwMDAwMDAwMDAwMDAwMERFRgotOjEwMDFGMDAwMDAwMDAwMEQzQzAyMDgwMDI0NDI1NjA4M0MwMzA4MDBBMQotOjEwMDIwMDAwMjQ2MzU3NTRBQzQwMDAwMDAwNDMyMDJCMTQ4MEZGRkRCMgotOjEwMDIxMDAwMjQ0MjAwMDQzQzFEMDgwMDM3QkQ5RkZDMDNBMEYwMjFEMAotOjEwMDIyMDAwM0MxMDA4MDAyNjEwMDExODNDMUMwODAwMjc5QzU2MDhBQQotOjEwMDIzMDAwMEUwMDAyNTYwMDAwMDAwMDAwMDAwMDBEMjdCREZGQjRCNAotOjEwMDI0MDAwQUZBMTAwMDBBRkEyMDAwNEFGQTMwMDA4QUZBNDAwMEM1MAotOjEwMDI1MDAwQUZBNTAwMTBBRkE2MDAxNEFGQTcwMDE4QUZBODAwMUNGMAotOjEwMDI2MDAwQUZBOTAwMjBBRkFBMDAyNEFGQUIwMDI4QUZBQzAwMkM5MAotOjEwMDI3MDAwQUZBRDAwMzBBRkFFMDAzNEFGQUYwMDM4QUZCODAwM0MyOAotOjEwMDI4MDAwQUZCOTAwNDBBRkJDMDA0NEFGQkYwMDQ4MEUwMDE1NDRGQQotOjEwMDI5MDAwMDAwMDAwMDA4RkJGMDA0ODhGQkMwMDQ0OEZCOTAwNDBCMQotOjEwMDJBMDAwOEZCODAwM0M4RkFGMDAzODhGQUUwMDM0OEZBRDAwMzA3OAotOjEwMDJCMDAwOEZBQzAwMkM4RkFCMDAyODhGQUEwMDI0OEZBOTAwMjBDMAotOjEwMDJDMDAwOEZBODAwMUM4RkE3MDAxODhGQTYwMDE0OEZBNTAwMTAwMAotOjEwMDJEMDAwOEZBNDAwMEM4RkEzMDAwODhGQTIwMDA0OEZBMTAwMDA0MAotOjEwMDJFMDAwMjdCRDAwNEMzQzFCNjAxMDhGN0E1MDMwMzc3QjUwMjg2NAotOjEwMDJGMDAwMDM0MDAwMDhBRjdBMDAwMDhGODIwMDI0MjdCREZGRTA5MgotOjEwMDMwMDAwQUZCMDAwMTBBRkJGMDAxOEFGQjEwMDE0OEM0MjAwMENBQQotOjEwMDMxMDAwM0MxMDgwMDA4RTExMDEwMDEwNDAwMDM0OEZCRjAwMTg4NwotOjEwMDMyMDAwMEUwMDBEODQwMDAwMDAwMDhGODUwMDIwMjQwNDdGRkY1NAotOjEwMDMzMDAwMDA5MTIwMkJBQ0IxMDAwMDhFMDMwMTA0OTYwMjAxMDg0RAotOjEwMDM0MDAwMDAwMzFDMDAzMDQyRkZGRjAwNjIxODI1QUNBMzAwMDQyQwotOjEwMDM1MDAwOTIwMjAxMEE5NjAzMDExNDMwNDIwMEZGMzA2M0ZGRkY0RQotOjEwMDM2MDAwMDAwMjE0MDAwMDQzMTAyNUFDQTIwMDA4OTYwMzAxMEMwMwotOjEwMDM3MDAwOTYwMjAxMEUwMDAzMUMwMDMwNDJGRkZGMDA2MjE4MjVBOAotOjEwMDM4MDAwQUNBMzAwMEM5NjAzMDExMDk2MDIwMTEyMDAwMzFDMDA5RQotOjEwMDM5MDAwMzA0MkZGRkYwMDYyMTgyNUFDQTMwMDEwOEUwMjAxMTg0NgotOjEwMDNBMDAwQUNBMjAwMTQ4RTAyMDExQ0FDQTIwMDE4MTQ4MDAwMDgzQwotOjEwMDNCMDAwOEY4MjAwMjQ5NzgyMDAwMDNDMDQyMDA1MDA0NDE4MjUwOQotOjEwMDNDMDAwMjQ0MjAwMDFBQ0EzMDAxQzBBMDAwMEM2QTc4MjAwMDA2MgotOjEwMDNEMDAwM0MwMzQwMTg5NDQyMDAxRTAwNDMxMDI1QUNBMjAwMUNCMAotOjEwMDNFMDAwMEUwMDBEQjgyNDA0MDAwMThGQkYwMDE4OEZCMTAwMTQ1NwotOjEwMDNGMDAwOEZCMDAwMTAwMDAwMTAyMTAzRTAwMDA4MjdCRDAwMjA4RQotOjEwMDQwMDAwM0MwNzgwMDA4Q0UyMDJCODM0RTUwMTAwMDQ0MTAwMDg5QQotOjEwMDQxMDAwMjQwMzAwMDEzQzAyMDgwMDhDNDIwMDYwMjQ0MjAwMDFEOQotOjEwMDQyMDAwM0MwMTA4MDBBQzIyMDA2MDAzRTAwMDA4MDA2MDEwMjFERAotOjEwMDQzMDAwM0MwMjA4MDA4QzQyMDA1QzhDQTQwMDIwOTRBMzAwMTZBRgotOjEwMDQ0MDAwOENBNjAwMDQ5NEE1MDAwRTI0NDIwMDAxQUNFNDAyODBCNgotOjEwMDQ1MDAwMjQ2M0ZGRkMzQzAxMDgwMEFDMjIwMDVDM0MwMjEwMDA1RAotOjEwMDQ2MDAwQTRFMzAyODRBNEU1MDI4NjAwMDAxODIxQUNFNjAyODgxOQotOjEwMDQ3MDAwQUNFMjAyQjgwM0UwMDAwODAwNjAxMDIxMjdCREZGRTBGNQotOjEwMDQ4MDAwM0MwMjgwMDBBRkIwMDAxMDM0NDIwMTAwQUZCRjAwMUMzRQotOjEwMDQ5MDAwQUZCMjAwMThBRkIxMDAxNDhDNDMwMDAwOTQ0NTAwMDhCRgotOjEwMDRBMDAwMjQ2MkZFMDAyQzQyMDM4MTEwNDAwMDAzMDAwMzgxQzIzRAotOjEwMDRCMDAwMEEwMDAxMDIyNjEwMDAwNDI0MDIwMTAwMTQ2MjAwMDU1MwotOjEwMDRDMDAwM0MxMTgwMDAzQzAyODAwODkwNDIwMDA0MzA1MDAwRkY0NAotOjEwMDREMDAwM0MxMTgwMDAzNjMyMDEwMDk2NDMwMDE0MzIwMjAwMEZCNgotOjEwMDRFMDAwMDAwMjE1MDAwMDQzMTAyNTNDMDMwODAwOEM2MzAwNDQwMwotOjEwMDRGMDAwMzBBNDAwMDRBRTIyMDA4MDI0NjMwMDAxM0MwMTA4MDAwNwotOjEwMDUwMDAwQUMyMzAwNDQxMDgwMDAwNzMwQTIwMDAyOEZCRjAwMUMwMwotOjEwMDUxMDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMEEwMDAwQ0UwNwotOjEwMDUyMDAwMjdCRDAwMjAxMDQwMDAyRDAwMDAxODIxMzBBMjAwODBCRgotOjEwMDUzMDAwMTA0MDAwMDUzNjIyMDA3MDhFNDQwMDFDMEUwMDBDNjcyRgotOjEwMDU0MDAwMjQwNTAwQTAzNjIyMDA3MDhDNDQwMDAwOEY4MjAwMEMyRAotOjEwMDU1MDAwMDA4MjEwMjMyQzQzMDEyQzEwNjAwMDA0QUY4MjAwMTA5NQotOjEwMDU2MDAwMjQwMzAwMDEwQTAwMDE0NUFGODQwMDBDOEU0MjAwMDQwMAotOjEwMDU3MDAwM0MwMzYwMjBBRjg0MDAwQ0FDNjIwMDE0M0MwMjA4MDAxNQotOjEwMDU4MDAwOEM0MjAwNTg1MDQwMDAxNTAwMDAxODIxOEM2MjAwMDQ3NQotOjEwMDU5MDAwMjQwMzAxRkUzMDQyMDNGRjE0NDMwMDEwMDAwMDE4MjEyMQotOjEwMDVBMDAwMkUwMjAwMDQxMDQwMDAwMzJFMDIwMDA4MEEwMDAxNDA0MQotOjEwMDVCMDAwMDAwMDgwMjExNDQwMDAwMzAwMDAwMDAwMEEwMDAxNDBGOAotOjEwMDVDMDAwMjYxMEZGRjkwMDAwMDAwRDI0MDIwMDAyMDIwMjEwMDRCMAotOjEwMDVEMDAwM0MwMzYwMDBBQzYyNjkxNDAwMDAxODIxOEZCRjAwMUM0RQotOjEwMDVFMDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMDA2MDEwMjE3RQotOjEwMDVGMDAwMDNFMDAwMDgyN0JEMDAyMDNDMDQ4MDAwOEM4MzAxMDAzQwotOjEwMDYwMDAwMjQwMjAxMDA1MDYyMDAwMzNDMDI4MDA4MDAwMDAwMEQzQgotOjEwMDYxMDAwM0MwMjgwMDg5MDQzMDAwNDAwMDAxMDIxMzA2MzAwMEY2QQotOjEwMDYyMDAwMDAwMzFEMDAwM0UwMDAwOEFDODMwMDgwMDAwNDE4ODA3NAotOjEwMDYzMDAwMjc4MkZGOUMwMDYyMTgyMTAwMDQxMEMwMDA0NDEwMjM5MAotOjEwMDY0MDAwOEM2NDAwMDAwMDAyMTBDMDNDMDMwODAwMjQ2MzU2RTRFMAotOjEwMDY1MDAwMDA0MzEwMjEzQzAzODAwMEFDNjQwMDkwMDNFMDAwMDhEQwotOjEwMDY2MDAwQUY4MjAwMjQzQzAyMDgwMDhDNDIwMTE0MTA0MDAwMTlBMwotOjEwMDY3MDAwMzA4NDQwMDAzMEEyMDA3RjAwMDIzMUMwM0MwMjAyMDAwMgotOjEwMDY4MDAwMTA4MDAwMTQwMEEyMTgyNTNDMDI2MDIwQUM0MzAwMTQyNgotOjEwMDY5MDAwM0MwNDA4MDA4Qzg0NTZCODNDMDMwODAwOEM2MzAxMTBBRAotOjEwMDZBMDAwM0MwMjgwMDAyNDA1MDkwMEFDNDUwMDIwMDA4NjIwMjE4MgotOjEwMDZCMDAwMjQ2MzAwMDEzQzAyODAwOEFDNDQwMDY0M0MwMTA4MDA1MwotOjEwMDZDMDAwQUMyMzAxMTAzQzAxMDgwMEFDMjQ1NkI4MDNFMDAwMDgzQwotOjEwMDZEMDAwMDAwMDAwMDAzQzAyNjAyMDAzRTAwMDA4QUM0NTAwMTQ2QwotOjEwMDZFMDAwMDNFMDAwMDgwMDAwMTAyMTAzRTAwMDA4MDAwMDEwMjFEMgotOjEwMDZGMDAwMzBBMjAwMDgxMDQwMDAwODI0MDIwMTAwM0MwMjA4MDA1QgotOjEwMDcwMDAwOEM0MjAxMEMyNDQyMDAwMTNDMDEwODAwQUMyMjAxMEM4NwotOjEwMDcxMDAwMDNFMDAwMDgwMDAwMDAwMDE0ODIwMDA4MDAwMDAwMDA1MAotOjEwMDcyMDAwM0MwMjA4MDA4QzQyMDBGQzI0NDIwMDAxM0MwMTA4MDAwRAotOjEwMDczMDAwQUMyMjAwRkMwQTAwMDFBMzMwQTIwMDIwM0MwMjA4MDAwOQotOjEwMDc0MDAwOEM0MjAwODQyNDQyMDAwMTNDMDEwODAwQUMyMjAwODQ1OQotOjEwMDc1MDAwMzBBMjAwMjAxMDQwMDAwODMwQTIwMDEwM0MwMjA4MDAyNwotOjEwMDc2MDAwOEM0MjAxMDgyNDQyMDAwMTNDMDEwODAwQUMyMjAxMDgyRgotOjEwMDc3MDAwMDNFMDAwMDgwMDAwMDAwMDEwNDAwMDA4MDAwMDAwMDAzNgotOjEwMDc4MDAwM0MwMjA4MDA4QzQyMDEwNDI0NDIwMDAxM0MwMTA4MDBBNAotOjEwMDc5MDAwQUMyMjAxMDQwM0UwMDAwODAwMDAwMDAwM0MwMjA4MDA1NQotOjEwMDdBMDAwOEM0MjAxMDAyNDQyMDAwMTNDMDEwODAwQUMyMjAxMDBGRgotOjEwMDdCMDAwMDNFMDAwMDgwMDAwMDAwMDI3QkRGRkUwQUZCMTAwMTQxNwotOjEwMDdDMDAwM0MxMTgwMDBBRkIyMDAxOEFGQkYwMDFDQUZCMDAwMTBFQQotOjEwMDdEMDAwMzYzMjAxMDA5NjUwMDAwODMyMDIwMDA0MTA0MDAwMDczMwotOjEwMDdFMDAwMzIwMzAwMDI4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTRCQgotOjEwMDdGMDAwOEZCMDAwMTAwQTAwMDBDRTI3QkQwMDIwMTA2MDAwMEI1MwotOjEwMDgwMDAwMDIwMDI4MjE4RTI0MDEwMDBFMDAwMThBMDAwMDAwMDA1MQotOjEwMDgxMDAwMzIwMjAwODAxMDQwMDAwMzI0MDUwMEExMEUwMDBDNjc4NgotOjEwMDgyMDAwOEU0NDAwMUMwQTAwMDFFMzI0MDIwMDAxOEUyMzAxMDQwRgotOjEwMDgzMDAwOEY4MjAwMDgxMDQzMDAwNjAyMDAyODIxOEUyNDAxMDA0OAotOjEwMDg0MDAwMEUwMDAxOEEwMDAwMDAwMDhFMjIwMTA0QUY4MjAwMDgyMQotOjEwMDg1MDAwMDAwMDEwMjE4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTQ1MAotOjEwMDg2MDAwOEZCMDAwMTAwM0UwMDAwODI3QkQwMDIwMkM4MjAwMDQ5OAotOjEwMDg3MDAwMTQ0MDAwMDIwMDAwMTgyMTI0ODNGRkZEMjQwMjAwMDIxRQotOjEwMDg4MDAwMDA2MjEwMDQzQzAzNjAwMDAzRTAwMDA4QUM2MjY5MTRERAotOjEwMDg5MDAwMjdCREZGRTBBRkJGMDAxQ0FGQjIwMDE4QUZCMTAwMTQxRQotOjEwMDhBMDAwQUZCMDAwMTAzQzA0ODAwMDk0ODIwMTA4MzA0MzcwMDAxNwotOjEwMDhCMDAwMjQwMjIwMDAxMDYyMDAwQTI4NjIyMDAxNTQ0MDAwNTJFNQotOjEwMDhDMDAwOEZCRjAwMUMyNDAyNDAwMDEwNjIwMDQ4MjQwMjYwMDAxOAotOjEwMDhEMDAwMTA2MjAwNEE4RkJGMDAxQzBBMDAwMjUxOEZCMjAwMTgzQwotOjEwMDhFMDAwMzQ4MjAxMDA5MDQzMDAwOThDNTAwMDE4OTQ1MTAwMEM5MAotOjEwMDhGMDAwMjQwMjAwMDkxMDYyMDAxQzAwMDA5MDIxMjg2MjAwMDlGNwotOjEwMDkwMDAwMTQ0MDAwMjE4RjgyMDAyNDI0MDIwMDBBNTA2MjAwMTI0OQotOjEwMDkxMDAwMzIzMTAwRkYyNDAyMDAwQjEwNjIwMDBGMDAwMDAwMDBDMwotOjEwMDkyMDAwMjQwMjAwMEMxNDYyMDAxODhGODIwMDI0M0MwMjA4MDA4QwotOjEwMDkzMDAwOEM0MjU2QjgyNDAzMDkwMEFDODMwMDIwMDA1MDEwMjFEQgotOjEwMDk0MDAwM0MwMzgwMDhBQzYyMDA2NDNDMDEwODAwQUMyMjU2Qjg0RAotOjEwMDk1MDAwMEEwMDAyNTA4RkJGMDAxQzBFMDAwMUU5MDAxMDI2MDJBMQotOjEwMDk2MDAwMEEwMDAyMzA4RjgyMDAyNDBFMDAwMUU5MDAxMDI2MDJFNgotOjEwMDk3MDAwM0MwMzgwMDg5NDYyMDAxQThDNzIwMDBDMzA0MkZGRkYyNgotOjEwMDk4MDAwMDIwMjgwMjU4RjgyMDAyNDhDNDIwMDBDNTA0MDAwMUUwMQotOjEwMDk5MDAwOEZCRjAwMUMwRTAwMEQ4NDAwMDAwMDAwM0MwMjgwMDA5MAotOjEwMDlBMDAwMzQ0MjAxMDA5NDQzMDAwODhGODIwMDI0MDAwMzFDMDA5RAotOjEwMDlCMDAwOTQ0NDAwMUU4RjgyMDAyMDAwNjQxODI1QUM1MDAwMDA3MwotOjEwMDlDMDAwMjQwNDAwMDFBQzUxMDAwNEFDNTIwMDA4QUM0MDAwMENGRgotOjEwMDlEMDAwQUM0MDAwMTBBQzQwMDAxNEFDNDAwMDE4MEUwMDBEQjg0NAotOjEwMDlFMDAwQUM0MzAwMUMwQTAwMDI1MDhGQkYwMDFDMEUwMDA0NDBFNAotOjEwMDlGMDAwMDAwMDAwMDAwQTAwMDI1MDhGQkYwMDFDMEUwMDBDOUY3OAotOjEwMEEwMDAwMDAwMDAwMDA4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTRDRgotOjEwMEExMDAwOEZCMDAwMTAwMDAwMTAyMTAzRTAwMDA4MjdCRDAwMjA2NwotOjEwMEEyMDAwMjdCREZGRDhBRkI0MDAyMDNDMDM2MDEwQUZCRjAwMjQ0NwotOjEwMEEzMDAwQUZCMzAwMUNBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTBEQwotOjEwMEE0MDAwOEM2NDUwMDAyNDAyRkY3RjNDMTQwODAwMjY5NDU2MzgyMgotOjEwMEE1MDAwMDA4MjIwMjQzNDg0MzgwQ0FDNjQ1MDAwM0MwMjgwMDBCNgotOjEwMEE2MDAwMjQwMzAwMzcwRTAwMTRCMEFDNDMwMDA4M0MwNzA4MDAxNAotOjEwMEE3MDAwMjRFNzA2MTgwMjgwMTAyMTI0MDQwMDFEMjQ4NEZGRkZBRgotOjEwMEE4MDAwQUM0NzAwMDAwNDgxRkZGRDI0NDIwMDA0M0MwMjA4MDA0MgotOjEwMEE5MDAwMjQ0MjA3QzgzQzAxMDgwMEFDMjI1NjQwM0MwMjA4MDAzMgotOjEwMEFBMDAwMjQ0MjAyMzAzQzAzMDgwMDI0NjMwNjIwM0MwNDA4MDA3MgotOjEwMEFCMDAwMjQ4NDAzQjQzQzA1MDgwMDI0QTUwNkYwM0MwNjA4MDA4NQotOjEwMEFDMDAwMjRDNjJDOUMzQzAxMDgwMEFDMjI1NjgwM0MwMjA4MDA0NQotOjEwMEFEMDAwMjQ0MjA1MzAzQzAxMDgwMEFDMjc1Njg0M0MwMTA4MDA0NAotOjEwMEFFMDAwQUMyNjU2OTQzQzAxMDgwMEFDMjM1NjlDM0MwMTA4MDBGRgotOjEwMEFGMDAwQUMyNDU2QTAzQzAxMDgwMEFDMjU1NkE0M0MwMTA4MDBEQgotOjEwMEIwMDAwQUMyMjU2QTgzQzAxMDgwMEFDMjM1NjNDM0MwMTA4MDAyRQotOjEwMEIxMDAwQUMyNDU2NDQzQzAxMDgwMEFDMjA1NjYwM0MwMTA4MDA1RgotOjEwMEIyMDAwQUMyNTU2NjQzQzAxMDgwMEFDMjA1NjcwM0MwMTA4MDAxRQotOjEwMEIzMDAwQUMyNzU2N0MzQzAxMDgwMEFDMjY1NjkwM0MwMTA4MDBDRQotOjEwMEI0MDAwQUMyMzU2OTgwRTAwMDU2RTAwMDAwMDAwQUY4MDAwMEMyQwotOjEwMEI1MDAwM0MwMjgwMDA4QzUzMDAwMDhGODMwMDA0M0MwMjA4MDA5QwotOjEwMEI2MDAwOEM0MjAwMjAxMDYyMDAyMTMyNjIwMDA3MDAwMDg4MjFDMAotOjEwMEI3MDAwMjc5MkZGOUMzQzEwMDgwMDI2MTA1NkU0M0MwMjA4MDAxNwotOjEwMEI4MDAwOEM0MjAwMjAyNDA1MDAwMTAyMjUxODA0MDA0MzIwMjQ4MwotOjEwMEI5MDAwOEY4MjAwMDQwMDQzMTAyNDUwNDQwMDBDMjYzMTAwMDFEMQotOjEwMEJBMDAwMTA4MDAwMDhBRjkwMDAyNDhFNDMwMDAwM0MwMjgwMDBCQgotOjEwMEJCMDAwQUM0MzAwOTAwRTAwMEQ0QkFFMDUwMDBDMEEwMDAyQzFDNAotOjEwMEJDMDAwMjYzMTAwMDFBRTAwMDAwQzI2MzEwMDAxMkUyMjAwMDI2OQotOjEwMEJEMDAwMjYxMDAwMzgxNDQwRkZFOTI2NTIwMDA0M0MwMjA4MDBBOQotOjEwMEJFMDAwOEM0MjAwMjBBRjgyMDAwNDMyNjIwMDA3MTA0MEZGRDkxRgotOjEwMEJGMDAwM0MwMjgwMDAzMjYyMDAwMTEwNDAwMDJEMzI2MjAwMDI4RgotOjEwMEMwMDAwM0MwNTgwMDA4Q0EyMDEwMDAwMDAyMDIxQUNBMjAwMjA0NQotOjEwMEMxMDAwOENBMzAxMDQyQzQyMDc4MTEwNDAwMDA4QUNBMzAwQTg1QgotOjEwMEMyMDAwOTRBMjAxMDgyNDAzMjAwMDMwNDI3MDAwMTQ0MzAwMDMwMgotOjEwMEMzMDAwM0MwMjgwMDg5MDQyMDAwNTMwNDQwMEZGMEUwMDAxNTkzQwotOjEwMEM0MDAwMDAwMDAwMDAzQzAyODAwMDkwNDIwMTBCMzA0MzAwRkY5NgotOjEwMEM1MDAwMkM2MjAwMUU1NDQwMDAwNDAwMDMxMDgwMEUwMDAxODYyOAotOjEwMEM2MDAwMEEwMDAyRUMwMDAwMDAwMDAwNTQxMDIxOEM0MjAwMDAzOQotOjEwMEM3MDAwMDA0MEY4MDkwMDAwMDAwMDEwNDAwMDA0M0MwMjgwMDAyMQotOjEwMEM4MDAwOEM0MzAxMDQzQzAyNjAyMEFDNDMwMDE0M0MwMjA4MDA4OQotOjEwMEM5MDAwOEM0MjAwMzQzQzA0NDAwMDNDMDM4MDAwMjQ0MjAwMDFBQwotOjEwMENBMDAwQUM2NDAxMzgzQzAxMDgwMEFDMjIwMDM0MzI2MjAwMDIxRQotOjEwMENCMDAwMTA0MDAwMTAzMjYyMDAwNDNDMTA4MDAwOEUwMjAxNDA5RgotOjEwMENDMDAwMDAwMDIwMjEwRTAwMDE1OUFFMDIwMDIwMEUwMDAzODMxNwotOjEwMENEMDAwMDAwMDAwMDAzQzAyNDAwMEFFMDIwMTc4M0MwMjA4MDAyNwotOjEwMENFMDAwOEM0MjAwMzgyNDQyMDAwMTNDMDEwODAwQUMyMjAwMzg0QwotOjEwMENGMDAwMzI2MjAwMDQxMDQwRkY5NzNDMDI4MDAwM0MxMDgwMDBFQwotOjEwMEQwMDAwOEUwMjAxODAwMDAwMjAyMTBFMDAwMTU5QUUwMjAwMjA1OQotOjEwMEQxMDAwOEUwMzAxODAyNDAyMEYwMDU0NjIwMDA3M0MwMjgwMDgwOQotOjEwMEQyMDAwOEUwMjAxODgzQzAzMDBFMDMwNDJGRkZGMDA0MzEwMjVBMwotOjEwMEQzMDAwMEEwMDAzMjhBRTAyMDA4MDM0NDIwMDgwOTA0MjAwMDA4NgotOjEwMEQ0MDAwMjQwMzAwNTAzMDQyMDBGRjE0NDMwMDA3MDAwMDAwMDA1RAotOjEwMEQ1MDAwMEUwMDAzNjIwMDAwMDAwMDE0NDAwMDAzMDAwMDAwMDBDOQotOjEwMEQ2MDAwMEUwMDA5NzEwMDAwMDAwMDNDMDIwODAwOEM0MjAwM0NBQgotOjEwMEQ3MDAwM0MwNDQwMDAzQzAzODAwMDI0NDIwMDAxQUM2NDAxQjgwNAotOjEwMEQ4MDAwM0MwMTA4MDBBQzIyMDAzQzBBMDAwMkEzM0MwMjgwMDBBNwotOjEwMEQ5MDAwM0MwMjkwMDAzNDQyMDAwMTAwODIyMDI1M0MwMjgwMDA4OQotOjEwMERBMDAwQUM0NDAwMjAzQzAzODAwMDhDNjIwMDIwMDQ0MEZGRkUyNQotOjEwMERCMDAwMDAwMDAwMDAwM0UwMDAwODAwMDAwMDAwM0MwMjgwMDA4QQotOjEwMERDMDAwMzQ0MzAwMDEwMDgzMjAyNTAzRTAwMDA4QUM0NDAwMjBFOAotOjEwMEREMDAwMjdCREZGRTBBRkIxMDAxNEFGQjAwMDEwMDA4MDg4MjE0NAotOjEwMERFMDAwQUZCRjAwMTgwRTAwMDMzMjMwQjAwMEZGOEY4M0ZGOTRCNgotOjEwMERGMDAwMDIyMDIwMjE5MDYyMDAyNTAyMDI4MDI1QTA3MDAwMjU5QgotOjEwMEUwMDAwOEM3MDAwMTgzQzAyODAwMDBFMDAwMzNEMDIwMjgwMjQxQQotOjEwMEUxMDAwMTYwMDAwMEI4RkJGMDAxODNDMDQ4MDAwOEM4MjAxRjg4NAotOjEwMEUyMDAwMDQ0MEZGRkUzNDgyMDFDMDI0MDMwMDAyQUM1MTAwMDBFNAotOjEwMEUzMDAwQTA0MzAwMDQzQzAyMTAwMEFDODIwMUY4OEZCRjAwMThGMAotOjEwMEU0MDAwOEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjAxMAotOjEwMEU1MDAwMjdCREZGRTgzQzAyODAwMEFGQkYwMDEwMzQ0MjAxODA5NAotOjEwMEU2MDAwOTQ0MzAwMDQ4QzQ0MDAwODMwNjMwMjAwMTA2MDAwMDVDNQotOjEwMEU3MDAwMDAwMDI4MjEwRTAwMTAwQzAwMDAwMDAwMEEwMDAzNzg3QQotOjEwMEU4MDAwMjQwNTAwMDEzQzAyRkYwMDA0ODAwMDA3MDA4MjE4MjRCMgotOjEwMEU5MDAwM0MwMjA0MDAxNDYyMDAwNDI0MDUwMDAxOEY4MkZGOTRDOAotOjEwMEVBMDAwOTA0MjAwMDgyNDA1MDAwMThGQkYwMDEwMDBBMDEwMjEwRgotOjEwMEVCMDAwMDNFMDAwMDgyN0JEMDAxODhGODJGRjk4MjQwNTAwMDE3OQotOjEwMEVDMDAwQTA0MDAwMUEzQzAyODAwMDM0NDIwMTQwMEEwMDAzNDI2NAotOjEwMEVEMDAwOEM0NDAwMDA4Rjg1RkY5NDI3QkRGRkUwQUZCRjAwMUM0RQotOjEwMEVFMDAwQUZCMjAwMThBRkIxMDAxNEFGQjAwMDEwOTBBMjAwMDA3NAotOjEwMEVGMDAwMzA0NDAwRkYzODgzMDAyMDM4ODIwMDMwMDAwMzE4MkI3NAotOjEwMEYwMDAwMDAwMjEwMkIwMDYyMTgyNDEwNjAwMDAzMjQwMjAwNTAxRAotOjEwMEYxMDAwMTQ4MjAwQTg4RkJGMDAxQzkwQTIwMDA1MzA0MjAwMDE3RgotOjEwMEYyMDAwMTA0MDAwQTQ4RkJGMDAxQzNDMDI4MDAwMzQ0MjAxNDBFRQotOjEwMEYzMDAwOTA0MjAwMDgyNDQzRkZGRjJDNjIwMDA1MTA0MDAwOUVGMQotOjEwMEY0MDAwOEZCMjAwMTgwMDAzMTA4MDNDMDMwODAwMjQ2MzU1QUNFNgotOjEwMEY1MDAwMDA0MzEwMjE4QzQyMDAwMDAwNDAwMDA4MDAwMDAwMDAwNwotOjEwMEY2MDAwM0MwMjgwMDAzNDUxMDE0MDBFMDAwMzMyOEUyNDAwMDAwOAotOjEwMEY3MDAwOEY5MkZGOTQ4RTIyMDAwNDhFNTAwMDBDMTYwMjAwMDIwNQotOjEwMEY4MDAwMjQwMjAwMDFBRTQyMDAwQzBFMDAwMzNEOEUyNDAwMDAzRQotOjEwMEY5MDAwOEUyMjAwMDQxNDUwMDAwNjhGQkYwMDFDOEZCMjAwMTg3MAotOjEwMEZBMDAwOEZCMTAwMTQ4RkIwMDAxMDBBMDAwRjc4MjdCRDAwMjAwOQotOjEwMEZCMDAwOEU0MjAwMEMwQTAwMDQxOTAwMDAwMDAwM0MwNDgwMDA2RQotOjEwMEZDMDAwMzQ4MjAxNDA5NEEzMDAxMDhDNDIwMDA0MzA2M0ZGRkY4MAotOjEwMEZEMDAwMTQ0MzAwMUMwMDAwMDAwMDI0MDIwMDAxQTRBMjAwMTAyMQotOjEwMEZFMDAwOEM4MjAyMzgwNDQxMDAwRjNDMDM4MDAwM0MwMjAwM0YyOQotOjEwMEZGMDAwMzQ0OEYwMDAzQzA3NjAwMDNDMDZGRkMwOENFMjJCQkM4QwotOjEwMTAwMDAwMDA0NjE4MjQwMDQ4MTAyNDAwMDIxMzAyMDAwMzFEODIyOQotOjEwMTAxMDAwMTA2MjAwNTgzQzAyODAwMDhDODIwMjM4MDQ0MEZGRjdDNgotOjEwMTAyMDAwM0MwMzgwMDAzNDYyMDE0MDhDNDQwMDAwMzQ2MjAyMDBDMgotOjEwMTAzMDAwQUM0NDAwMDAzQzAyMTAwMEFDNjIwMjM4MEEwMDA0M0JFMQotOjEwMTA0MDAwOEZCRjAwMUM5NEEyMDAxMDBBMDAwNDE5MDAwMDAwMDBDOQotOjEwMTA1MDAwMjQwMjAwMjAxNDgyMDAwRjNDMDI4MDAwM0MwMzgwMDAyOAotOjEwMTA2MDAwOTRBMjAwMTIzNDYzMDE0MDhDNjMwMDA0MzA0MkZGRkZGRAotOjEwMTA3MDAwMTQ2MjAwMDUwMDAwMDAwMDI0MDIwMDAxQTRBMjAwMTI3NgotOjEwMTA4MDAwMEEwMDA0MDI4RkJGMDAxQzk0QTIwMDEyMEEwMDA0MTk3NwotOjEwMTA5MDAwMDAwMDAwMDAzNDUxMDE0MDBFMDAwMzMyOEUyNDAwMDA5NQotOjEwMTBBMDAwOEY5MkZGOTQ4RTIzMDAwNDk2NDIwMDEyMzA1MEZGRkY2RgotOjEwMTBCMDAwMTYwMzAwMDIyNDAyMDAwMUE2NDIwMDEyMEUwMDAzM0RBNgotOjEwMTBDMDAwOEUyNDAwMDA4RTIyMDAwNDE2MDIwMDA2OEZCRjAwMUMzMgotOjEwMTBEMDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMEEwMDAzN0M4QgotOjEwMTBFMDAwMjdCRDAwMjA5NjQyMDAxMjBBMDAwNDE5MDAwMDAwMDBFQgotOjEwMTBGMDAwM0MwMzgwMDA5NEEyMDAxNDM0NjMwMTQwOEM2MzAwMDQxQwotOjEwMTEwMDAwMzA0MkZGRkYxNDYyMDAwODI0MDIwMDAxOEZCRjAwMUM2MAotOjEwMTExMDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwQTRBMjAwMTQ3OQotOjEwMTEyMDAwMEEwMDE0NjMyN0JEMDAyMDk0QTIwMDE0MTQ0MDAwMjE3QgotOjEwMTEzMDAwOEZCRjAwMUMwQTAwMDQzNTAwMDAwMDAwM0MwMzgwMDA0MwotOjEwMTE0MDAwOTRBMjAwMTYzNDYzMDE0MDhDNjMwMDA0MzA0MkZGRkYxOAotOjEwMTE1MDAwMTQ2MjAwMEQyNDAyMDAwMThGQkYwMDFDOEZCMjAwMTgyMgotOjEwMTE2MDAwOEZCMTAwMTQ4RkIwMDAxMEE0QTIwMDE2MEEwMDBCMTQ1NwotOjEwMTE3MDAwMjdCRDAwMjA5NDQyMDA3ODI0NDIwMDA0QTRBMjAwMTA1RAotOjEwMTE4MDAwMEEwMDA0M0I4RkJGMDAxQzk0QTIwMDE2MjQwMzAwMDEzOAotOjEwMTE5MDAwMzA0MkZGRkYxNDQzMDAwNzhGQkYwMDFDM0MwMjA4MDBEMQotOjEwMTFBMDAwOEM0MjAwNzAyNDQyMDAwMTNDMDEwODAwQUMyMjAwNzAxNwotOjEwMTFCMDAwOEZCRjAwMUM4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTBDOQotOjEwMTFDMDAwMDNFMDAwMDgyN0JEMDAyMDI3QkRGRkQ4QUZCMjAwMThGQwotOjEwMTFEMDAwOEY5MkZGOTRBRkIxMDAxNEFGQkYwMDIwQUZCMzAwMUNEQgotOjEwMTFFMDAwQUZCMDAwMTAzQzAyODAwMDM0NTEwMTAwOEM1MDAxMDA2RgotOjEwMTFGMDAwOTI0MjAwMDA5MjIzMDAwOTMwNDQwMEZGMjQwMjAwMUZBNQotOjEwMTIwMDAwMTA2MjAwQUIyODYyMDAyMDEwNDAwMDE5MjQwMjAwMzg1MAotOjEwMTIxMDAwMjg2MjAwMEExMDQwMDAwRDI0MDIwMDBCMjg2MjAwMDgxQQotOjEwMTIyMDAwMTA0MDAwMkU4RjgyMDAyNDA0NjAwMTA0Mjg2MjAwMDIxNgotOjEwMTIzMDAwMTQ0MDAwMkE4RjgyMDAyNDI0MDIwMDA2MTA2MjAwMjYzNwotOjEwMTI0MDAwOEZCRjAwMjAwQTAwMDU1RjhGQjMwMDFDMTA2MjAwNjA5MgotOjEwMTI1MDAwMjg2MjAwMEIxNDQwMDBGQThGQkYwMDIwMjQwMjAwMEUwOQotOjEwMTI2MDAwMTA2MjAwNzg4RjgyMDAyNDBBMDAwNTVGOEZCMzAwMUM5MwotOjEwMTI3MDAwMTA2MjAwRDIyODYyMDAzOTEwNDAwMDBBMjQwMjAwODA2NwotOjEwMTI4MDAwMjQwMjAwMzYxMDYyMDBFNTI4NjIwMDM3MTA0MDAwQzNENwotOjEwMTI5MDAwMjQwMjAwMzUxMDYyMDBEOThGQkYwMDIwMEEwMDA1NUZDQwotOjEwMTJBMDAwOEZCMzAwMUMxMDYyMDAyRDI4NjIwMDgxMTA0MDAwMDZFMAotOjEwMTJCMDAwMjQwMjAwQzgyNDAyMDAzOTEwNjIwMEM5OEZCRjAwMjAzOAotOjEwMTJDMDAwMEEwMDA1NUY4RkIzMDAxQzEwNjIwMEEyOEZCRjAwMjBEMAotOjEwMTJEMDAwMEEwMDA1NUY4RkIzMDAxQzhGODIwMDI0OEM0MjAwMEMzMwotOjEwMTJFMDAwMTA0MDAwRDc4RkJGMDAyMDBFMDAwRDg0MDAwMDAwMDBDQQotOjEwMTJGMDAwM0MwMzgwMDAzNDYzMDEwMDhDNjIwMDAwOEY4NTAwMjA3NQotOjEwMTMwMDAwOTQ2NzAwMDg5NDY2MDAwQ0FDQTIwMDAwOEM2NDAwMDQ5MgotOjEwMTMxMDAwOEY4MjAwMjQwMDA2MzQwMEFDQTQwMDA0OTQ0ODAwMUUxMAotOjEwMTMyMDAwOEM2MjAwMTgwMDA3M0MwMDAwRTgzODI1QUNBMjAwMDhEOQotOjEwMTMzMDAwOEM2MjAwMUMyNDA0MDAwMUFDQTIwMDBDOTA2MjAwMEEyNAotOjEwMTM0MDAwMDBDMjMwMjVBQ0E2MDAxMEFDQTAwMDE0QUNBMDAwMTg2MAotOjEwMTM1MDAwQUNBNzAwMUMwQTAwMDUxRDhGQkYwMDIwOEY4MjAwMjQ0RgotOjEwMTM2MDAwOEM0MjAwMEMxMDQwMDBCNjhGQkYwMDIwMEUwMDBEODQ5MAotOjEwMTM3MDAwMDAwMDAwMDA4RjgyMDAyNDk2MjQwMDA4OTYyNTAwMENBRgotOjEwMTM4MDAwOTQ0MzAwMUUwMDA0MjIwMjk2MjYwMDBFOEY4MjAwMjA0NQotOjEwMTM5MDAwMDAwNDI2MDAwMDgzMjAyNTAwMDUyQzAwM0MwMzAwODA2QgotOjEwMTNBMDAwMDBBNjI4MjUwMDgzMjAyNUFDNDAwMDAwQUM0MDAwMDRBNgotOjEwMTNCMDAwQUM0MDAwMDhBQzQwMDAwQ0FDNDUwMDEwQUM0MDAwMTQ0MAotOjEwMTNDMDAwQUM0MDAwMThBQzQ0MDAxQzBBMDAwNTFDMjQwNDAwMDFCOQotOjEwMTNEMDAwOTYyMjAwMEMxNDQwMDAxODAwMDAwMDAwOTI0MjAwMDUwNAotOjEwMTNFMDAwMzA0MjAwMTAxNDQwMDAxNDAwMDAwMDAwMEUwMDAzMzJEMAotOjEwMTNGMDAwMDIwMDIwMjE5MjQyMDAwNTAyMDAyMDIxMzQ0MjAwMTAwOAotOjEwMTQwMDAwMEUwMDAzM0RBMjQyMDAwNTkyNDIwMDAwMjQwMzAwMjA4QQotOjEwMTQxMDAwMzA0MjAwRkYxMDQzMDA4OTAyMDAyMDIxOEZCRjAwMjBDRQotOjEwMTQyMDAwOEZCMzAwMUM4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTA2MgotOjEwMTQzMDAwMEEwMDEwNzUyN0JEMDAyODAwMDAwMDBEMEEwMDA1NUU5NwotOjEwMTQ0MDAwOEZCRjAwMjA4QzQyMDAwQzEwNDAwMDdEOEZCRjAwMjAxOQotOjEwMTQ1MDAwMEUwMDBEODQwMDAwMDAwMDhFMjIwMDA0OEY4NDAwMjAwNgotOjEwMTQ2MDAwOTYyMzAwMENBQzgyMDAwMDNDMDI4MDA4OTQ0NTAwMkNCRQotOjEwMTQ3MDAwOEY4MjAwMjQwMDAzMUMwMDMwQTVGRkZGOTQ0NjAwMUU0RAotOjEwMTQ4MDAwM0MwMjQwMEUwMDY1MTgyNTAwQzIzMDI1QUM4MzAwMDRFNAotOjEwMTQ5MDAwQUM4MDAwMDhBQzgwMDAwQ0FDODAwMDEwQUM4MDAwMTQ2NAotOjEwMTRBMDAwQUM4MDAwMThBQzg2MDAxQzBBMDAwNTFDMjQwNDAwMDE1NgotOjEwMTRCMDAwMEUwMDAzMzIwMjAwMjAyMThGOTNGRjk4MDIwMDIwMjFBQQotOjEwMTRDMDAwMEUwMDAzM0RBNjYwMDAwQzAyMDAyMDIxMEUwMDAzNDIyNgotOjEwMTREMDAwMjQwNTAwMDE4RjgyMDAyNDhDNDIwMDBDMTA0MDAwNTgyQgotOjEwMTRFMDAwOEZCRjAwMjAwRTAwMEQ4NDAwMDAwMDAwOTYyMjAwMEMyQgotOjEwMTRGMDAwOEY4MzAwMjAwMDAyMTQwMEFDNzAwMDAwQUM2MjAwMDQ3NgotOjEwMTUwMDAwQUM2MDAwMDg4RTQ0MDAzODhGODIwMDI0QUM2NDAwMEM2QwotOjEwMTUxMDAwOEU0NjAwM0M5NDQ1MDAxRTNDMDI0MDFGQUM2NjAwMTAwNQotOjEwMTUyMDAwMDBBMjI4MjU4RTYyMDAwNDI0MDQwMDAxQUM2MjAwMTQ4RAotOjEwMTUzMDAwQUM2MDAwMThBQzY1MDAxQzhGQkYwMDIwOEZCMzAwMUM4RQotOjEwMTU0MDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMEEwMDBEQjhEMAotOjEwMTU1MDAwMjdCRDAwMjgyNDAyMDAyMDEwODIwMDNBOEZCMzAwMUMwRgotOjEwMTU2MDAwMEUwMDBGNUUwMDAwMDAwMDEwNDAwMDM1OEZCRjAwMjAwRAotOjEwMTU3MDAwM0MwNDgwMDA4QzgyMDFGODA0NDBGRkZFMzQ4MjAxQzBFQwotOjEwMTU4MDAwMjQwMzAwMDJBQzUwMDAwMEEwNDMwMDA0M0MwMjEwMDAwMQotOjEwMTU5MDAwQUM4MjAxRjgwQTAwMDU1RThGQkYwMDIwMDIwMDIwMjEwNgotOjEwMTVBMDAwOEZCRjAwMjA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTRDMgotOjEwMTVCMDAwOEZCMDAwMTAwQTAwMEVBNzI3QkQwMDI4OTYyNTAwMEM0QQotOjEwMTVDMDAwMDIwMDIwMjE4RkJGMDAyMDhGQjMwMDFDOEZCMjAwMThCMwotOjEwMTVEMDAwOEZCMTAwMTQ4RkIwMDAxMDBBMDAwRUNDMjdCRDAwMjg3OAotOjEwMTVFMDAwMDIwMDIwMjE4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTRBRAotOjEwMTVGMDAwOEZCMDAwMTAwQTAwMEVGNzI3QkQwMDI4OTIyNTAwMERCRAotOjEwMTYwMDAwMDIwMDIwMjE4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ4QwotOjEwMTYxMDAwOEZCMDAwMTAwQTAwMEY0ODI3QkQwMDI4MDIwMDIwMjFDQgotOjEwMTYyMDAwOEZCRjAwMjA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ0MQotOjEwMTYzMDAwOEZCMDAwMTAwQTAwMEYxRjI3QkQwMDI4OEZCRjAwMjBBOQotOjEwMTY0MDAwOEZCMzAwMUM4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTA0MAotOjEwMTY1MDAwMDNFMDAwMDgyN0JEMDAyODNDMDU4MDAwOENBMjAyNzgyQQotOjEwMTY2MDAwMDQ0MEZGRkUzNEEyMDI0MDI0MDMwMDAyQUM0NDAwMDAwOAotOjEwMTY3MDAwQTA0MzAwMDQzQzAyMTAwMDAzRTAwMDA4QUNBMjAyNzg4MgotOjEwMTY4MDAwQTM4MDAwMTgwM0UwMDAwOEEzODAwMDE5M0MwMzgwMDAzOQotOjEwMTY5MDAwOEM2MjAyNzgwNDQwRkZGRThGODIwMDFDQUM2MjAyNDAyNAotOjEwMTZBMDAwMjQwMjAwMDJBMDYyMDI0NDNDMDIxMDAwMDNFMDAwMDg5MQotOjEwMTZCMDAwQUM2MjAyNzgzQzAyNjAwMDAzRTAwMDA4OEM0MjU0MDRGMwotOjEwMTZDMDAwOTA4MzAwMzAyNDAyMDAwNTAwODA0MDIxMzA2MzAwM0ZGOQotOjEwMTZEMDAwMDAwMDQ4MjExNDYyMDAwNTAwMDA1MDIxOTA4MjAwNEM1NwotOjEwMTZFMDAwOTQ4MzAwNEUzMDQ5MDBGRjMwNkFGRkZGQUQwMDAwMENDQwotOjEwMTZGMDAwQUQwMDAwMTBBRDAwMDAyNDk1MDIwMDE0OEQwNTAwMUMwMwotOjEwMTcwMDAwOEQwNDAwMTgzMDQyRkZGRjAwNDkxMDIzMDAwMjExMDAzMQotOjEwMTcxMDAwMDAwMjM3QzMwMDQwMzgyMTAwODYyMDIzMDBBMjEwMkI4RQotOjEwMTcyMDAwMDA4MjIwMjMwMEE3MjgyM0FEMDUwMDFDQUQwNDAwMTg2QgotOjEwMTczMDAwQTUwOTAwMTRBNTA5MDAyMEE1MEEwMDE2MDNFMDAwMDg2OQotOjEwMTc0MDAwQTUwQTAwMjIwM0UwMDAwODAwMDAwMDAwMjdCREZGRDgyMgotOjEwMTc1MDAwQUZCMjAwMTgzQzEyODAwOEFGQjQwMDIwQUZCMzAwMUMzOQotOjEwMTc2MDAwQUZCMTAwMTRBRkJGMDAyNEFGQjAwMDEwMzY1MTAxMDA3QwotOjEwMTc3MDAwM0MwMjYwMDA4QzQyNTQwNDkyMjIwMDBDM0MxNDA4MDA4RAotOjEwMTc4MDAwOTI5NDAwRjczMDQzMDBGRjI0MDIwMDAxMTA2MjAwMzJGRgotOjEwMTc5MDAwMDA4MDk4MjEyNDAyMDAwMjE0NjIwMDM1MzY1MDAwODAzNwotOjEwMTdBMDAwMEUwMDE0M0QwMDAwMDAwMDkyMDIwMDRDMjQwM0ZGODA1NAotOjEwMTdCMDAwM0MwNDgwMDAzMDQyMDA3RjAwMDIxMUMwMjQ0MjAyNDBGRAotOjEwMTdDMDAwMDI2MjEwMjEwMDQzMTgyNEFDODMwMDk0OTI0NTAwMDg2MwotOjEwMTdEMDAwOTIwNDAwNEMzMDQyMDA3RjNDMDM4MDA2MTQ4NTAwMDdEMQotOjEwMTdFMDAwMDA0MzgwMjEyNDAyRkZGRkEyMjIwMDExMjQwMkZGRkZGOAotOjEwMTdGMDAwQTYyMjAwMTIwQTAwMDVEMjI0MDJGRkZGOTYwMjAwMjA1MgotOjEwMTgwMDAwQTIyMjAwMTE5NjAyMDAyMkE2MjIwMDEyOEUwMjAwMjRCQgotOjEwMTgxMDAwM0MwNDgwMDhBRTIyMDAxNDM0ODUwMDgwOTBBMjAwNEM2NQotOjEwMTgyMDAwMzQ4MzAxMDBBMDYyMDAxMDhDQTIwMDNDQUM2MjAwMTg1RQotOjEwMTgzMDAwOEM4MjAwNjhBQzYyMDBGNDhDODIwMDY0QUM2MjAwRjBDMAotOjEwMTg0MDAwOEM4MjAwNkNBQzYyMDBGODI0MDIwMDAxQTBBMjAwNjg0NwotOjEwMTg1MDAwMEEwMDA1RUUzQzA0ODAwODBFMDAxNDU2MDAwMDAwMDA0QgotOjEwMTg2MDAwMzY0MjAwODBBMDQwMDA2ODBBMDAwNUVFM0MwNDgwMDg3MwotOjEwMTg3MDAwQTIwMDAwNjhBMjAwMDA2OTBBMDAwNjI5M0MwMjgwMDg1NAotOjEwMTg4MDAwMzQ4MzAwODA4QzYyMDAzODM0ODUwMTAwQUM2MjAwNkNDNwotOjEwMTg5MDAwMjQwMjAwMDFBMDYyMDA2OTkwQTIwMEQ1OTA4MzAwMDg5NAotOjEwMThBMDAwMzA1MTAwRkYzMDcyMDA3RjEyMzIwMDE5MDAxMTExQzA1OAotOjEwMThCMDAwMjQ0MjAyNDAwMjYyMTAyMTI0MDNGRjgwMDA0MzE4MjRDNgotOjEwMThDMDAwM0MwNDgwMDBBQzgzMDA5NDMwNDIwMDdGM0MwMzgwMDZERgotOjEwMThEMDAwMDA0MzgwMjE4RTAyMDAwQzEwNDAwMDBEMDIwMDIwMjFFOAotOjEwMThFMDAwMEUwMDA1N0UwMDAwMDAwMDI2MjIwMDAxMzA1MTAwRkY5RQotOjEwMThGMDAwOTIwMzAwM0MwMjM0MTAyNjAwMDIxMDJCMDAwMjEwMjMzOQotOjEwMTkwMDAwMzA2MzAwN0YwMjIyODgyNDBBMDAwNUY4QTIwMzAwM0MwRAotOjEwMTkxMDAwM0MwODgwMDgzNTA0MDEwMDhDODIwMEUwMzUwNzAwODAxNwotOjEwMTkyMDAwQUNFMjAwM0M4QzgyMDBFMEFEMDIwMDAwOTBFNTAwNEM4RgotOjEwMTkzMDAwOTA4NjAwRDU5MEUzMDA0QzkwODQwMEQ1MjQwMkZGODA2RgotOjEwMTk0MDAwMDBBMjI4MjQzMDYzMDA3RjMwODQwMEZGMDBBNjI4MjVGMQotOjEwMTk1MDAwMDA2NDE4MkExMDYwMDAwMjMwQTUwMEZGMzhBNTAwODAzRQotOjEwMTk2MDAwQTBFNTAwNENBMTA1MDAwOTNDMDI4MDA4OTA0MzAwMEU1MAotOjEwMTk3MDAwMzQ0NDAwODAzQzA1ODAwMEEwNDMwMDBBOEM4MzAwMTg5QQotOjEwMTk4MDAwM0MwMjdGRkYzNDQyRkZGRjAwNjIxODI0QUM4MzAwMTg0MgotOjEwMTk5MDAwOENBMjAxRjgwNDQwRkZGRTAwMDAwMDAwQUNCMzAxQzBCRgotOjEwMTlBMDAwOEZCRjAwMjQ4RkI0MDAyMDhGQjMwMDFDOEZCMjAwMThBQgotOjEwMTlCMDAwOEZCMTAwMTQ4RkIwMDAxMDI0MDIwMDAyQTBBMjAxQzQ1NQotOjEwMTlDMDAwMjdCRDAwMjgzQzAyMTAwMDAzRTAwMDA4QUNBMjAxRjg4QgotOjEwMTlEMDAwOTBBMjAwMDAyNDQyMDAwMUEwQTIwMDAwM0MwMzA4MDBFNQotOjEwMTlFMDAwOEM2MzAwRjQzMDQyMDBGRjE0NDMwMDAyMDA4MDMwMjE3OQotOjEwMTlGMDAwQTBBMDAwMDA5MEEyMDAwMDhGODQwMDFDMDAwMjExQzA3MwotOjEwMUEwMDAwMjQ0MjAyNDAyNDgzMDA0MDAwODIyMDIxMjQwMkZGODBERgotOjEwMUExMDAwMDA4MjIwMjQzMDYzMDA3RjNDMDI4MDBBMDA2MjE4MjE4QgotOjEwMUEyMDAwM0MwMjgwMDBBQzQ0MDAyNDAzRTAwMDA4QUNDMzAwMDA4QQotOjEwMUEzMDAwOTQ4MjAwMDY5MDgzMDAwNThDODUwMDBDOEM4NjAwMTAzMwotOjEwMUE0MDAwOEM4NzAwMTg4Qzg4MDAxQzhDODQwMDIwM0MwMTA4MDBDNgotOjEwMUE1MDAwQTQyMjU2QzYzQzAxMDgwMEEwMjM1NkM1M0MwMTA4MDAzQwotOjEwMUE2MDAwQUMyNTU2Q0MzQzAxMDgwMEFDMjY1NkQwM0MwMTA4MDAwMQotOjEwMUE3MDAwQUMyNzU2RDgzQzAxMDgwMEFDMjg1NkRDM0MwMTA4MDBENQotOjEwMUE4MDAwQUMyNDU2RTAwM0UwMDAwODAwMDAwMDAwM0MwMjgwMDg5RgotOjEwMUE5MDAwMzQ0MjAxMDA4QzQ0MDAzNDNDMDM4MDAwMzQ2NTA0MDA2RgotOjEwMUFBMDAwQUM2NDAwMzg4QzQyMDAzOEFGODUwMDI4QUM2MjAwM0M0MgotOjEwMUFCMDAwM0MwMjAwMDVBQzYyMDAzMDAwMDAwMDAwMDAwMDAwMDBBNQotOjEwMUFDMDAwMDNFMDAwMDgwMDAwMDAwMDNDMDIwMDA2MzA4NDAwRkYzNAotOjEwMUFEMDAwMDA4MjIwMjUzQzAyODAwMEFDNDQwMDMwMDAwMDAwMDA2MQotOjEwMUFFMDAwMDAwMDAwMDAwMDAwMDAwMDNDMDM4MDAwOEM2MjAwMDA0OQotOjEwMUFGMDAwMzA0MjAwMTAxMDQwRkZGRDM0NjIwNDAwMDNFMDAwMDg5MwotOjEwMUIwMDAwQUY4MjAwMjg5NEMyMDAwMDNDMDgwODAwOTUwODAwQ0E3MwotOjEwMUIxMDAwMzBFN0ZGRkYwMDgwNDgyMTAxMDIxMDIxQTRDMjAwMDAyRAotOjEwMUIyMDAwOTRDMjAwMDAzMDQyRkZGRjAwRTIxMDJCNTQ0MDAwMDEzRAotOjEwMUIzMDAwQTRDNzAwMDA5NEEyMDAwMDNDMDMwODAwOEM2MzAwQ0MwMgotOjEwMUI0MDAwMjQ0MjAwMDFBNEEyMDAwMDk0QTIwMDAwMzA0MkZGRkY0MgotOjEwMUI1MDAwMTQ0MzAwMDczQzAyODAwODAxMDcxMDJCQTRBMDAwMDBEQQotOjEwMUI2MDAwNTQ0MDAwMDEwMTAwMzgyMUE0QzcwMDAwM0MwMjgwMDg1NQotOjEwMUI3MDAwMzQ0NjAxMDA4Q0MzMDAyODk0QTIwMDAwM0MwNDgwMDA3RAotOjEwMUI4MDAwMzA0MkZGRkUwMDAyMTBDMDAwNjIxMDIxQUM4MjAwM0MxNwotOjEwMUI5MDAwOEM4MjAwM0MwMDYyMTgyMzE4NjAwMDA0MDAwMDAwMDBFMgotOjEwMUJBMDAwOENDMjAwMjQwQTAwMDZCQTI0NDIwMDAxOENDMjAwMjQyMAotOjEwMUJCMDAwQUM4MjAwMzgzQzAyMDA1MDM0NDIwMDEwM0MwMzgwMDBFQwotOjEwMUJDMDAwQUM2MjAwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENwotOjEwMUJEMDAwOEM2MjAwMDAzMDQyMDAyMDEwNDBGRkZEMDAwMDAwMDAzOQotOjEwMUJFMDAwOTRBMjAwMDAzQzA0ODAwMDMwNDIwMDAxMDAwMjEwQzBCQQotOjEwMUJGMDAwMDA0NDEwMjE4QzQzMDQwMEFEMjMwMDAwOEM0MjA0MDRGNwotOjEwMUMwMDAwQUQyMjAwMDQzQzAyMDAyMDAzRTAwMDA4QUM4MjAwMzA1QQotOjEwMUMxMDAwMjdCREZGRTBBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTBBNQotOjEwMUMyMDAwQUZCRjAwMUM5NEMyMDAwMDAwQzA4MDIxM0MxMjA4MDAxRAotOjEwMUMzMDAwOTY1MjAwQzYyNDQyMDAwMUE2MDIwMDAwOTYwMzAwMDA0RQotOjEwMUM0MDAwOTRFMjAwMDAwMEUwMzAyMTE0NDMwMDA1OEZCMTAwMzAyMQotOjEwMUM1MDAwMEUwMDA2OEYwMjQwMzgyMTBBMDAwNkYxMDAwMDAwMDA0NQotOjEwMUM2MDAwOEM4MzAwMDQ4QzgyMDAwNDI0NDIwMDQwMDQ2MTAwMDczRAotOjEwMUM3MDAwQUM4MjAwMDQ4QzgyMDAwNDA0NDAwMDA0MDAwMDAwMDBEOAotOjEwMUM4MDAwOEM4MjAwMDAyNDQyMDAwMUFDODIwMDAwOTYwMjAwMDAxOQotOjEwMUM5MDAwMzA0MkZGRkY1MDUyMDAwMUE2MDAwMDAwOTYyMjAwMDBEMwotOjEwMUNBMDAwMjQ0MjAwMDFBNjIyMDAwMDNDMDI4MDA4MzQ0MjAxMDBDOAotOjEwMUNCMDAwOTYyMzAwMDA5NDQyMDAzQzE0NDMwMDA0OEZCRjAwMUM5NAotOjEwMUNDMDAwMjQwMjAwMDFBNjIyMDAwMDhGQkYwMDFDOEZCMjAwMTg2MgotOjEwMUNEMDAwOEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjA3MgotOjEwMUNFMDAwMjdCREZGRTAzQzAyODAwOEFGQkYwMDE4MzQ0MjAxMDA2RQotOjEwMUNGMDAwOEM0ODAwMzQzQzAzODAwMDM0NjkwNDAwQUM2ODAwMzgzMAotOjEwMUQwMDAwOEM0MjAwMzgzMEU3MDBGRkFGODkwMDI4QUM2MjAwM0MwRAotOjEwMUQxMDAwM0MwMjAwMDVBQzYyMDAzMDAwMDAwMDAwMDAwMDAwMDA0MgotOjEwMUQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMwotOjEwMUQzMDAwOEM4MjAwMEM4QzgyMDAwQzk3ODMwMDE2QUQyMjAwMDA3MAotOjEwMUQ0MDAwOEM4MjAwMTAwMDYwNDAyMUFEMjIwMDA0OEM4MjAwMThCQgotOjEwMUQ1MDAwQUQyMjAwMDg4QzgyMDAxQ0FEMjIwMDBDOENBMjAwMTQ2NQotOjEwMUQ2MDAwQUQyMjAwMTA4QzgyMDAyMEFEMjIwMDE0OTA4MjAwMDU2QwotOjEwMUQ3MDAwMzA0MjAwRkYwMDAyMTIwMEFEMjIwMDE4OENBMjAwMThCMQotOjEwMUQ4MDAwQUQyMjAwMUM4Q0EyMDAwQ0FEMjIwMDIwOENBMjAwMTAwMQotOjEwMUQ5MDAwQUQyMjAwMjQ4Q0EyMDAxQ0FEMjIwMDI4OENBMjAwMjBDMQotOjEwMURBMDAwQUQyMjAwMkMzNDAyRkZGRkFEMjYwMDMwQUQyMDAwMzQwMAotOjEwMURCMDAwNTA2MjAwMDEzNDA4RkZGRkFEMjgwMDM4NTBFMDAwMTFFOAotOjEwMURDMDAwM0MwMjgwMDgzQzA0ODAwODM0ODQwMTAwOTQ4MjAwNTA2NgotOjEwMUREMDAwMzA0MkZGRkZBRDIyMDAzQzk0ODMwMDQ0OTQ4NTAwNDREMAotOjEwMURFMDAwMjQwMjAwMDEzMDYzRkZGRjAwMDMxOEMyMDA2NDE4MjFDMQotOjEwMURGMDAwOTA2NDAwNjQzMEE1MDAwNzAwQTIxMDA0MEEwMDA3NUM4QwotOjEwMUUwMDAwMDA0NDEwMjUzNDQyMDEwMEFEMjAwMDNDOTQ0MzAwNDRCRQotOjEwMUUxMDAwOTQ0NDAwNDQzMDYzRkZGRjAwMDMxOEMyMDA2MjE4MjE5RAotOjEwMUUyMDAwMzA4NDAwMDc5MDY1MDA2NDI0MDIwMDAxMDA4MjEwMDRFMQotOjEwMUUzMDAwMDAwMjEwMjcwMDQ1MTAyNEEwNjIwMDY0MDAwMDAwMDA4QQotOjEwMUU0MDAwMDAwMDAwMDAwMDAwMDAwMDNDMDIwMDA2MzQ0MjAwNDA5OAotOjEwMUU1MDAwM0MwMzgwMDBBQzYyMDAzMDAwMDAwMDAwMDAwMDAwMDA4NQotOjEwMUU2MDAwMDAwMDAwMDA4QzYyMDAwMDMwNDIwMDEwMTA0MEZGRkRCNgotOjEwMUU3MDAwM0MwNjgwMDgzNEMyMDE1MDM0NjMwNDAwMzRDNzAxNEE3MAotOjEwMUU4MDAwMzRDNDAxMzQzNEM1MDE0MDM0QzYwMTQ0QUZBMjAwMTA0QgotOjEwMUU5MDAwMEUwMDA2RDJBRjgzMDAyODhGQkYwMDE4MDNFMDAwMDhCMQotOjEwMUVBMDAwMjdCRDAwMjA4RjgzMDAxNDNDMDYwODAwOENDNjAwRTg4NAotOjEwMUVCMDAwOEY4MjAwMUMzMDYzM0ZGRjAwMDMxOTgwMDA0NjEwMjExMQotOjEwMUVDMDAwMDA0MzEwMjEyNDAzRkY4MDAwNDMxODI0M0MwNjgwMDBCNwotOjEwMUVEMDAwQUNDMzAwMjgzMDQyMDA3RjNDMDM4MDBDMDA0MzMwMjExQgotOjEwMUVFMDAwOTBDMjAwMEQzMEE1MDBGRjAwMDAzODIxMzQ0MjAwMTBFMAotOjEwMUVGMDAwQTBDMjAwMEQ4Rjg5MDAxNDNDMDI4MDA4MzQ0MjAxMDAwQQotOjEwMUYwMDAwOTQ0MzAwNDQwMDA5MTM4MjMwNDgwMDAzMjQwMjAwMDE3NgotOjEwMUYxMDAwQTRDMzAwMEUxMTAyMDAwQjI5MDIwMDAyMTA0MDAwMDVBQwotOjEwMUYyMDAwMjQwMjAwMDIxMTAwMDAwQzI0MDMwMDAxMEEwMDA3QTQ4RgotOjEwMUYzMDAwMDAwMDE4MjExMTAyMDAwNjAwMDAwMDAwMEEwMDA3QTQ5QQotOjEwMUY0MDAwMDAwMDE4MjE4Q0MyMDAyQzBBMDAwN0E0MjQ0MzAwMDFDMQotOjEwMUY1MDAwOENDMjAwMTQyNDQzMDAwMThDQzIwMDE4MDA0MzEwMkJEMwotOjEwMUY2MDAwNTA0MDAwMEEyNDA3MDAwMTI0MDIwMDI3MTRBMjAwMDNBNQotOjEwMUY3MDAwM0MwMzgwMDgwQTAwMDdCMTI0MDcwMDAxMzQ2MzAxMDAxNAotOjEwMUY4MDAwOTQ2MjAwNEMyNDQyMDAwMUE0NjIwMDRDMDAwOTEzODJCOAotOjEwMUY5MDAwMzA0MzAwMDMyQzYyMDAwMjEwNDAwMDA5MDA4MDI4MjExOQotOjEwMUZBMDAwMTQ2MDAwMDQwMDAwMDAwMDk0QzIwMDM0MEEwMDA3QzE1RAotOjEwMUZCMDAwMzA0NkZGRkY4Q0M2MDAzODBBMDAwN0MxMDA4MDI4MjE4OAotOjEwMUZDMDAwMDAwMDMwMjEzQzA0MDgwMDI0ODQ1NkMwMEEwMDA3MDZBMwotOjEwMUZEMDAwMDAwMDAwMDAyN0JERkY5MEFGQjYwMDY4QUZCNTAwNjRGOQotOjEwMUZFMDAwQUZCNDAwNjBBRkIzMDA1Q0FGQjIwMDU4QUZCMTAwNTQwMwotOjEwMUZGMDAwQUZCRjAwNkNBRkIwMDA1MDhDOTAwMDAwMDA4MEIwMjFFQgotOjEwMjAwMDAwM0MwMjA4MDA4QzQyMDBFODk2MDQwMDMyOEY4MzAwMUNEQQotOjEwMjAxMDAwMjQxNEZGODAzMDg0M0ZGRjAwNjIxODIxMDAwNDIxODBENwotOjEwMjAyMDAwMDA2NDE4MjEwMDc0MTAyNDNDMTM4MDAwMDBBMDkwMjE0QgotOjEwMjAzMDAwOTBBNTAwMDBBRTYyMDAyODkyMDQwMDMyM0MwMjgwMENBMQotOjEwMjA0MDAwMzA2MzAwN0YwMDYyODgyMTMwODQwMEMwMjQwMjAwNDA5OQotOjEwMjA1MDAwMTQ4MjAwMzIwMDAwQTgyMThFMzUwMDM4OEUyMjAwMTgyQwotOjEwMjA2MDAwMTQ0MDAwMDIyNDAyMDAwMUFFMjIwMDE4OTIwMjAwM0MzQgotOjEwMjA3MDAwMzA0MjAwMjAxNDQwMDAwRThGODMwMDFDMDAwNTExQzA2OAotOjEwMjA4MDAwMjQ0MjAyNDAwMDYyMTgyMTMwNjQwMDc4M0MwMjAwODA0MwotOjEwMjA5MDAwMDA4MjIwMjUwMDc0MTgyNEFFNjMwODAwQUU2NDA4MTA4NgotOjEwMjBBMDAwOEUyMjAwMTg4RTAzMDAwODAwNDMxMDIxQUUyMjAwMTg3MwotOjEwMjBCMDAwOEUyMjAwMkM4RTIzMDAxODI0NDIwMDAxMDA2MjE4MkI2RgotOjEwMjBDMDAwMTA2MDAwNDMwMDAwMDAwMDkyNDIwMDAwMjQ0MjAwMDEyMgotOjEwMjBEMDAwQTI0MjAwMDAzQzAzMDgwMDhDNjMwMEY0MzA0MjAwRkY4MQotOjEwMjBFMDAwNTA0MzAwMDFBMjQwMDAwMDkyNDIwMDAwOEY4NDAwMUM3NwotOjEwMjBGMDAwMDAwMjExQzAyNDQyMDI0MDI0ODMwMDQwMzA2MzAwN0Y2QwotOjEwMjEwMDAwMDA4MjIwMjEzQzAyODAwQTAwOTQyMDI0MDA2MjE4MjFEMQotOjEwMjExMDAwQUU2NDAwMjQwQTAwMDhEMkFFQzMwMDAwOTIwMzAwMzI2RAotOjEwMjEyMDAwMjQwMkZGQzAwMDQzMTAyNDMwNDIwMEZGMTQ0MDAwMDU4OQotOjEwMjEzMDAwMjQwMjAwMDFBRTIyMDAxODk2MjIwMDM0MEEwMDA4NDI1MAotOjEwMjE0MDAwMzA1NUZGRkY4RTIyMDAxNDI0NDIwMDAxQUUyMjAwMThGOQotOjEwMjE1MDAwOTIwMjAwMzAwMDAyMTYwMDAwMDIxNjAzMDQ0MTAwMUMyNwotOjEwMjE2MDAwMDAwMDAwMDA5NjAyMDAzMjI3QTQwMDEwMDA4MDI4MjEwMQotOjEwMjE3MDAwQTdBMjAwMTY5NjAyMDAzMjAwMDAzMDIxMjQwNzAwMDFCOQotOjEwMjE4MDAwMzA0MkZGRkZBRjgyMDAxNDBFMDAwNzA2QUZBMDAwMUMxNAotOjEwMjE5MDAwOTYwMjAwMzI4RjgzMDAxQzNDMDQwODAwOEM4NDAwRTgwNwotOjEwMjFBMDAwMzA0MjNGRkYwMDAyMTE4MDAwNjQxODIxMDA2MjE4MjFCNAotOjEwMjFCMDAwMDA3NDEwMjRBRTYyMDAyQzMwNjMwMDdGM0MwMjgwMEU1RAotOjEwMjFDMDAwMDA2MjE4MjE5MDYyMDAwRDMwNDIwMDdGQTA2MjAwMEQ3NQotOjEwMjFEMDAwOTIyMjAwMEQzMDQyMDAxMDUwNDAwMDc4OTI0MjAwMDBFMAotOjEwMjFFMDAwM0MwMjgwMDgzNDQ0MDEwMDk0ODIwMDRDOEVDMzAwMDBGRAotOjEwMjFGMDAwM0MxMzA4MDA5NjczMDBDNjI0NDJGRkZGQTQ4MjAwNENFMwotOjEwMjIwMDAwOTQ2MjAwMzI5NjIzMDAwRTMwNTRGRkZGMzA3MEZGRkZCRgotOjEwMjIxMDAwM0MwMzA4MDA4QzYzMDBEMDAwNzAxODA3QTdBMzAwMzhBNwotOjEwMjIyMDAwOTQ4MjAwM0UzMDYzRkZGRjMwNDJGRkZGMTQ2MjAwMDdEQwotOjEwMjIzMDAwMDAwMDAwMDA4QzgyMDAzMDNDMDM4MDAwMjQ0MjAwMzAwQgotOjEwMjI0MDAwQUM2MjAwM0MwQTAwMDg2QThDODIwMDJDOTQ4MjAwNDAzOAotOjEwMjI1MDAwMzA0MkZGRkY1NDYyMDAwOTI3QTQwMDQwOEM4MjAwMzhGRQotOjEwMjI2MDAwM0MwMzgwMDAyNDQyMDAzMEFDNjIwMDNDOEM4MjAwMzQ4RAotOjEwMjI3MDAwQUM2MjAwMzgwQTAwMDg3OTNDMDM4MDAwMjdBNTAwMzhDQQotOjEwMjI4MDAwMjdBNjAwNDgwMjYwMzgyMTBFMDAwNjhGQTdBMDAwNDg0QwotOjEwMjI5MDAwOEZBMzAwNDAzQzAyODAwMDI0NjMwMDMwQUM0MzAwMzgzMAotOjEwMjJBMDAwOEZBMzAwNDRBQzQzMDAzQzNDMDM4MDAwM0MwMjAwMDU4QgotOjEwMjJCMDAwQUM2MjAwMzAzQzAyODAwODM0NDQwMTAwOTQ4MjAwNDI0OQotOjEwMjJDMDAwMzQ2MzA0MDAzMDQyRkZGRjAyMDIxMDJCMTQ0MDAwMDc2OQotOjEwMjJEMDAwQUY4MzAwMjg5NDgyMDA0RTk0ODMwMDQyMDIwMjEwMjFCMgotOjEwMjJFMDAwMDA0MzEwMjMwQTAwMDg4RjMwNDNGRkZGOTQ4MzAwNEUwMQotOjEwMjJGMDAwOTQ4MjAwNDIwMjYzMTgyMTAwNTAxMDIzMDA2MjE4MjNDOAotOjEwMjMwMDAwMzA2M0ZGRkYzQzAyODAwODM0NDQwMTAwOTQ4MjAwM0NBQgotOjEwMjMxMDAwMzA0MkZGRkYxNDQzMDAwMzAwMDAwMDAwMEEwMDA4OUY0MgotOjEwMjMyMDAwMjQwMzAwMDE5NDgyMDAzQzMwNDJGRkZGMDA2MjEwMkIyNgotOjEwMjMzMDAwMTQ0MDAwMDU4RjgyMDAyODk0ODIwMDNDMDA2MjEwMjMyNAotOjEwMjM0MDAwMzA0M0ZGRkY4RjgyMDAyOEFDNTUwMDAwQUM0MDAwMDRGMgotOjEwMjM1MDAwQUM1NDAwMDhBQzQzMDAwQzNDMDIwMDA2MzQ0MjAwMTBCMAotOjEwMjM2MDAwM0MwMzgwMDBBQzYyMDAzMDAwMDAwMDAwMDAwMDAwMDA3MAotOjEwMjM3MDAwMDAwMDAwMDA4QzYyMDAwMDMwNDIwMDEwMTA0MEZGRkRBMQotOjEwMjM4MDAwM0MwNDgwMDgzNDg0MDEwMDAwMTAxOEMyMDA2NDE4MjE0NQotOjEwMjM5MDAwOTA2NTAwNjQzMjAyMDAwNzI0MDYwMDAxMDA0NjEwMDQyNAotOjEwMjNBMDAwMDA0NTEwMjVBMDYyMDA2NDk0ODMwMDQyOTYyMjAwMEUyRQotOjEwMjNCMDAwNTA0MzAwMDFBMzg2MDAxODkyNDIwMDAwMjQ0MjAwMDEwRAotOjEwMjNDMDAwQTI0MjAwMDAzQzAzMDgwMDhDNjMwMEY0MzA0MjAwRkY4RQotOjEwMjNEMDAwNTA0MzAwMDFBMjQwMDAwMDkyNDIwMDAwOEY4NDAwMUM4NAotOjEwMjNFMDAwMDAwMjExQzAyNDQyMDI0MDI0ODMwMDQwMDA4MjIwMjFDOAotOjEwMjNGMDAwMjQwMkZGODAwMDgyMjAyNDMwNjMwMDdGM0MwMjgwMEE5OAotOjEwMjQwMDAwMDA2MjE4MjEzQzAyODAwMEFDNDQwMDI0QUVDMzAwMDBFRQotOjEwMjQxMDAwOEZCRjAwNkM4RkI2MDA2ODhGQjUwMDY0OEZCNDAwNjAwQQotOjEwMjQyMDAwOEZCMzAwNUM4RkIyMDA1ODhGQjEwMDU0OEZCMDAwNTA1MgotOjEwMjQzMDAwMDNFMDAwMDgyN0JEMDA3MDI3QkRGRkQ4QUZCMzAwMUMyNAotOjEwMjQ0MDAwQUZCMjAwMThBRkIxMDAxNEFGQjAwMDEwQUZCRjAwMjBBMgotOjEwMjQ1MDAwMDA4MDk4MjEwMEUwODAyMTMwQjFGRkZGMEUwMDBEODQ0NAotOjEwMjQ2MDAwMzBEMjAwRkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QgotOjEwMjQ3MDAwOEY4MjAwMjA4RjgzMDAyNEFDNTEwMDAwQUM1MjAwMDRGNgotOjEwMjQ4MDAwQUM1MzAwMDhBQzQwMDAwQ0FDNDAwMDEwQUM0MDAwMTQ1MQotOjEwMjQ5MDAwQUM0MDAwMTg5NDYzMDAxRTAyMDM4MDI1QUM1MDAwMUM2MQotOjEwMjRBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjQwNDAwMDEwMwotOjEwMjRCMDAwOEZCRjAwMjA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTRBMwotOjEwMjRDMDAwOEZCMDAwMTAwQTAwMERCODI3QkQwMDI4MzBBNUZGRkYwRgotOjEwMjREMDAwMEEwMDA4REMzMEM2MDBGRjNDMDI4MDA4MzQ0MzAxMDBEQgotOjEwMjRFMDAwOTQ2MjAwMEUzQzA4MDgwMDk1MDgwMEM2MzA0NkZGRkZDNQotOjEwMjRGMDAwMTRDMDAwMDQzNDAyRkZGRjk0NjUwMEVBMEEwMDA5MjlCMQotOjEwMjUwMDAwOEY4NDAwMUMxMEMyMDAyNzAwMDAwMDAwOTQ2MjAwNEU1RgotOjEwMjUxMDAwOTQ2NDAwM0MzMDQ1RkZGRjAwQTYxMDIzMDBBNjE4MkI1MgotOjEwMjUyMDAwMzA4N0ZGRkYxMDYwMDAwNDMwNDRGRkZGMDBDNTEwMjMxOAotOjEwMjUzMDAwMDBFMjEwMjMzMDQ0RkZGRjAwODgxMDJCMTA0MDAwMEVGMwotOjEwMjU0MDAwMDBFODEwMjMzQzAyODAwODM0NDQwMTAwMjQwMzAwMDEwOQotOjEwMjU1MDAwMzQ0MjAwODBBNDQzMDAxNjI0MDJGRkZGQTQ4MjAwMEUzMAotOjEwMjU2MDAwOTQ4NTAwRUE4Rjg0MDAxQzAwMDAzMDIxMzBBNUZGRkYxNQotOjEwMjU3MDAwMEEwMDA5MDEzQzA3NjAyMDAwNDQxMDJBMTA0MDAwMDlBRAotOjEwMjU4MDAwM0MwMjgwMDgzNDQzMDA4MDk0NjIwMDE2MzA0MjAwMDEwRgotOjEwMjU5MDAwMTA0MDAwMDQzQzAyODAwMDk0NDIwMDdFMjQ0MjAwMTQ1QgotOjEwMjVBMDAwQTQ2MjAwMTYwM0UwMDAwODAwMDAwMDAwMjdCREZGRTA2MQotOjEwMjVCMDAwM0MwMjgwMDhBRkJGMDAxQ0FGQjAwMDE4MzQ0MjAxMDBERAotOjEwMjVDMDAwOTQ0MzAwNDI5NDQyMDA0QzEwNDAwMDE5MzA2OEZGRkZEMQotOjEwMjVEMDAwOTM4MzAwMTgyNDAyMDAwMTE0NjIwMDI5OEZCRjAwMUM5RAotOjEwMjVFMDAwM0MwNjgwMDgzNEQwMDEwMDAwMDgxMEMyMDA1MDEwMjFDMQotOjEwMjVGMDAwOTA0MjAwNjQzMTAzMDAwNzM0QzcwMTQ4MzA0MjAwRkZCNQotOjEwMjYwMDAwMDA2MjEwMDczMDQyMDAwMTM0QzkwMTRFMzRDNDAxMkM2RAotOjEwMjYxMDAwMzRDNTAxM0UxMDQwMDAxNjM0QzYwMTQyMEUwMDA2RDJGOQotOjEwMjYyMDAwQUZBOTAwMTA5NjAyMDA0MjBBMDAwOTQ2MzA0OEZGRkY5OQotOjEwMjYzMDAwM0MwMjgwMDgzNDQ0MDEwMDk0ODMwMDQ0OTQ4MjAwNDJBOAotOjEwMjY0MDAwMTA0MzAwMEY4RkJGMDAxQzk0ODIwMDQ0QTQ4MjAwNDJGQwotOjEwMjY1MDAwOTQ4MjAwNTBBNDgyMDA0RThDODIwMDM4QUM4MjAwMzBGQwotOjEwMjY2MDAwOTQ4MjAwNDBBNDgyMDAzRTk0ODIwMDRBQTQ4MjAwNDhFMgotOjEwMjY3MDAwOEZCRjAwMUM4RkIwMDAxODBBMDAwOTA0MjdCRDAwMjA3RQotOjEwMjY4MDAwOEZCMDAwMTgwM0UwMDAwODI3QkQwMDIwMjdCREZGQTA4MQotOjEwMjY5MDAwQUZCMTAwNEMzQzExODAwMEFGQkYwMDU4QUZCMzAwNTQ0NQotOjEwMjZBMDAwQUZCMjAwNTBBRkIwMDA0ODM2MjYwMTg4OTBDMjAwMDM5OAotOjEwMjZCMDAwMzA0NDAwN0ZBM0E0MDAxMDhFMzIwMTgwOTBDMjAwMDAzRAotOjEwMjZDMDAwMzA0MzAwN0YyNDAyMDAwMzEwNjIwMDNCQUY5MjAwMUNFNQotOjEwMjZEMDAwMjg2MjAwMDQxMDQwMDAwNjI0MDIwMDA0MjQwMjAwMDJDNAotOjEwMjZFMDAwMTA2MjAwMDk4RkJGMDA1ODBBMDAwQjBGOEZCMzAwNTQwRgotOjEwMjZGMDAwMTA2MjAwNEQyNDAyMDAwNTEwNjIwMTRFOEZCRjAwNTg4OQotOjEwMjcwMDAwMEEwMDBCMEY4RkIzMDA1NDAwMDQxMUMwMDI0MjEwMjFDNQotOjEwMjcxMDAwMjQwNEZGODAyNDQyMDI0MDAwNDQxMDI0MjY0MzAwNDA0OQotOjEwMjcyMDAwQUUyMjAwMjQzMDYzMDA3RjNDMDI4MDBBMDA2MjE4MjE0MAotOjEwMjczMDAwOTA2MjAwM0NBRkEzMDAzQzAwNDQxMDI1QTA2MjAwM0MyNgotOjEwMjc0MDAwOEZBMzAwM0M5MDYyMDAzQzMwNDIwMDQwMTA0MDAxNkM3RQotOjEwMjc1MDAwOEZCRjAwNTgzQzEwODAwOEEzODAwMDE4MzYxMDAxMDA3RAotOjEwMjc2MDAwOEUwMjAwRTA4QzYzMDAzNDI3QTQwMDNDMjdBNTAwMTBGMwotOjEwMjc3MDAwMDA0MzEwMjEwRTAwMDdDM0FFMDIwMEUwOTNBMjAwMTAzOAotOjEwMjc4MDAwM0MwMzgwMDBBMjAyMDBENThDNjIwMjc4MDQ0MEZGRkU2OAotOjEwMjc5MDAwOEY4MjAwMUNBQzYyMDI0MDI0MDIwMDAyQTA2MjAyNDQ0QwotOjEwMjdBMDAwM0MwMjEwMDBBQzYyMDI3ODBFMDAwOTM5MDAwMDAwMDAwMwotOjEwMjdCMDAwMEEwMDBCMEU4RkJGMDA1ODNDMDU4MDA4OTBDMzAwMDEzMwotOjEwMjdDMDAwOTBBMjAwMEIxNDQzMDE0RThGQkYwMDU4MzRBNDAwODAyOAotOjEwMjdEMDAwOEM4MjAwMTg5MDgyMDA0QzkwQTIwMDA4M0MwMjYwMDA5RAotOjEwMjdFMDAwOEM0MjU0MDQ4QzgzMDAxODNDMDI3RkZGMzQ0MkZGRkY2QwotOjEwMjdGMDAwMDA2MjE4MjQzQzAyMDgwMDhDNDIwMEI0QUM4MzAwMTgyQwotOjEwMjgwMDAwM0MwMzgwMDAyNDQyMDAwMTNDMDEwODAwQUMyMjAwQjREQgotOjEwMjgxMDAwOEM2MjAxRjgwNDQwRkZGRThGODIwMDFDQUM2MjAxQzA5NAotOjEwMjgyMDAwMEEwMDBBRDYyNDAyMDAwMjNDMTA4MDA4OTBDMzAwMDE2RQotOjEwMjgzMDAwOTIwMjAwMEIxNDQzMDEzMjhGQkYwMDU4MjdBNDAwMThFNgotOjEwMjg0MDAwMzYwNTAxMTAyNDA2MDAwMzNDMDI2MDAwOEM0MjU0MDQ0QgotOjEwMjg1MDAwMEUwMDBFNDcwMDAwMDAwMDI3QTQwMDI4MzYwNTAxRjBGNgotOjEwMjg2MDAwMEUwMDBFNDcyNDA2MDAwMzhGQTIwMDI4MzYwMzAxMDA0NQotOjEwMjg3MDAwQUUwMjAwNjQ4RkEyMDAyQ0FFMDIwMDY4OEZBMjAwMzA2RQotOjEwMjg4MDAwQUUwMjAwNkM5M0E0MDAxODkwNjMwMEQ1MjQwMkZGODA3MAotOjEwMjg5MDAwMDA4MjEwMjQwMDQzMTAyNTMwNDkwMEZGMzA4NDAwN0Y1RgotOjEwMjhBMDAwMzEyMjAwN0YwMDgyMTAyQTU0NDAwMDAxMzkyOTAwODAyMwotOjEwMjhCMDAwMDAwNDExQzAyNDQyMDI0MDI0MDNGRjgwMDI0MjEwMjE4MAotOjEwMjhDMDAwMDA0MzEwMjRBRTIyMDA5NDI2NDIwMDQwMzA0MjAwN0Y5NAotOjEwMjhEMDAwM0MwMzgwMDYwMDQzNDAyMThGQTMwMDFDMjQwMkZGRkYxRAotOjEwMjhFMDAwQUZBODAwNDAzQzEzMDgwMDkyNzMwMEY3MTA2MjAwMzM1OQotOjEwMjhGMDAwOTNBMjAwMTk5NTAzMDAxNDMwNDQwMEZGMzA2M0ZGRkZEQQotOjEwMjkwMDAwMDA2NDE4MkIxMDYwMDAxMDAwMDAwMDAwOTUwNDAwMTRGMwotOjEwMjkxMDAwOEQwNzAwMUM4RDA2MDAxODMwODRGRkZGMDA0NDIwMjMyMwotOjEwMjkyMDAwMDAwNDIxMDAwMEU0MzgyMTAwMDAxMDIxMDBFNDIwMkJFNQotOjEwMjkzMDAwMDBDMjMwMjEwMEM0MzAyMUFEMDcwMDFDQUQwNjAwMThENAotOjEwMjk0MDAwMEEwMDBBMkY5M0EyMDAxOTk1MDQwMDE0OEQwNzAwMUM5OQotOjEwMjk1MDAwOEQwNjAwMTgzMDg0RkZGRjAwODIyMDIzMDAwNDIxMDAzMAotOjEwMjk2MDAwMDAwMDEwMjEwMDgwMTgyMTAwQzIzMDIzMDBFNDIwMkIzOQotOjEwMjk3MDAwMDBDNDMwMjMwMEUzMzgyM0FEMDcwMDFDQUQwNjAwMTg2NwotOjEwMjk4MDAwOTNBMjAwMTk4RkEzMDA0MEE0NjIwMDE0OTdBMjAwMUExQQotOjEwMjk5MDAwQTQ2MjAwMTY4RkEyMDAxQ0FDNjIwMDEwOEZBMjAwMUM2MwotOjEwMjlBMDAwQUM2MjAwMEM5M0EyMDAxOUE0NjIwMDIwOTdBMjAwMUE0NgotOjEwMjlCMDAwQTQ2MjAwMjI4RkEyMDAxQ0FDNjIwMDI0M0MwNDgwMDhBOAotOjEwMjlDMDAwMzQ4MzAwODA4QzYyMDAzODhGQTIwMDIwMDEyMDg4MjE4RgotOjEwMjlEMDAwQUM2MjAwM0M4RkEyMDAyMEFDODIwMDAwOTNBMjAwMThFMQotOjEwMjlFMDAwQTA2MjAwNEM5M0EyMDAxOEEwODIwMDA5QTA2MDAwNjhCOQotOjEwMjlGMDAwOTNBMjAwMTgxMDUxMDA1MTI0MDdGRjgwMzIyOTAwN0Y1NAotOjEwMkEwMDAwMDAwOTExQzAyNDQyMDI0MDAyNDIxMDIxMzA0NjAwN0ZEQQotOjEwMkExMDAwM0MwMzgwMDAwMDQ3MTAyNEFDNjIwMDk0M0MwMjgwMDYxNgotOjEwMkEyMDAwMDBDMjMwMjE5MEMyMDAzQ0FGQTYwMDQwMDAwMDIwMjEyRgotOjEwMkEzMDAwMDA0NzEwMjVBMEMyMDAzQzhGQTgwMDQwOTUwMjAwMDI2QwotOjEwMkE0MDAwOTUwMzAwMTQ4RDA3MDAxQzMwNDJGRkZGMzA2M0ZGRkYyOQotOjEwMkE1MDAwOEQwNjAwMTgwMDQzMTAyMzAwMDIxMTAwMDBFMjM4MjEwNwotOjEwMkE2MDAwMDBFMjEwMkIwMEM0MzAyMTAwQzIzMDIxQUQwNzAwMUM1MQotOjEwMkE3MDAwQUQwNjAwMTg5NTAyMDAwMkE1MDIwMDE0QTUwMDAwMTY3QwotOjEwMkE4MDAwOEQwMjAwMDhBRDAyMDAxMDhEMDIwMDA4QUQwMjAwMEM5RQotOjEwMkE5MDAwOTUwMjAwMDJBNTAyMDAyMEE1MDAwMDIyOEQwMjAwMDg3OAotOjEwMkFBMDAwQUQwMjAwMjQ5MTAyMDAzQzMwNDIwMDQwMTA0MDAwMUE2OAotOjEwMkFCMDAwMjYyMjAwMDEzQzEwODAwOEEzQTkwMDM4QTM4MDAwMTgzQQotOjEwMkFDMDAwMzYxMDAxMDA4RTAyMDBFMDhEMDMwMDM0MjdBNDAwNDA4MAotOjEwMkFEMDAwMjdBNTAwMzgwMDQzMTAyMTBFMDAwN0MzQUUwMjAwRTAxNgotOjEwMkFFMDAwOTNBMjAwMzgzQzAzODAwMEEyMDIwMEQ1OEM2MjAyNzhEOQotOjEwMkFGMDAwMDQ0MEZGRkU4RjgyMDAxQ0FDNjIwMjQwMjQwMjAwMDJGMAotOjEwMkIwMDAwQTA2MjAyNDQzQzAyMTAwMEFDNjIwMjc4MEUwMDA5Mzk1NwotOjEwMkIxMDAwMDAwMDAwMDAyNjIyMDAwMTMwNDMwMDdGMTQ3MzAwMDRFRgotOjEwMkIyMDAwMDA0MDIwMjEyNDAzRkY4MDAyMjMxMDI0MDA0MzIwMjY5QwotOjEwMkIzMDAwOTNBMjAwMTgwQTAwMEE0QjMwOTEwMEZGOTNBNDAwMThEQQotOjEwMkI0MDAwOEZBMzAwMUMyNDAyRkZGRjEwNjIwMDBBMzA4OTAwRkZERgotOjEwMkI1MDAwMjQ4MjAwMDEyNDgzMDAwMTMwNDIwMDdGMTQ1MzAwMDVDOQotOjEwMkI2MDAwMzA2OTAwRkYyNDAzRkY4MDAwODMxMDI0MDA0MzEwMjZGNwotOjEwMkI3MDAwMzA0OTAwRkYzQzAyODAwODkwNDIwMDA4MDEyMDg4MjE3MwotOjEwMkI4MDAwMzA1MDAwRkYxMjMwMDAxOTMyMjIwMDdGMDAwMjExQzBDNQotOjEwMkI5MDAwMDI0MjEwMjEyNDQyMDI0MDI0MDNGRjgwMDA0MzE4MjRGMwotOjEwMkJBMDAwM0MwNDgwMDBBQzgzMDA5NDMwNDIwMDdGM0MwMzgwMDZFQwotOjEwMkJCMDAwMDA0MzEwMjE4QzQzMDAwQzAwNDAyMDIxMTA2MDAwMEJDQQotOjEwMkJDMDAwQUZBMjAwNDAwRTAwMDU3RTAwMDAwMDAwMjYyMzAwMDE5OQotOjEwMkJEMDAwMjQwNUZGODAzMDYyMDA3RjE0NTMwMDAyMDIyNTIwMjQ2OAotOjEwMkJFMDAwMDA4NTE4MjYwQTAwMEFBRjMwNzEwMEZGM0MwNDgwMDhGNwotOjEwMkJGMDAwMzQ4NDAwODA4QzgzMDAxODNDMDI3RkZGMzQ0MkZGRkY0NgotOjEwMkMwMDAwMDA2MjE4MjRBQzgzMDAxODNDMDM4MDAwOEM2MjAxRjgzOQotOjEwMkMxMDAwMDQ0MEZGRkUwMDAwMDAwMEFDNzIwMUMwMjQwMjAwMDI2QwotOjEwMkMyMDAwQTA2MjAxQzQzQzAyMTAwMEFDNjIwMUY4MEEwMDBCMEU2NQotOjEwMkMzMDAwOEZCRjAwNTgzQzA0ODAwODkwQzMwMDAxOTA4MjAwMEJCNQotOjEwMkM0MDAwMTQ0MzAwMkY4RkJGMDA1ODM0OTAwMDgwOTIwMjAwMDg3OAotOjEwMkM1MDAwMzA0MjAwNDAxMDQwMDAyMDAwMDAwMDAwOTIwMjAwMDhCNgotOjEwMkM2MDAwMDAwMjE2MDAwMDAyMTYwMzA0NDEwMDA1MDI0MDIwMjE2NAotOjEwMkM3MDAwMEUwMDBFQ0MyNDA1MDA5MzBBMDAwQjBFOEZCRjAwNThFNwotOjEwMkM4MDAwOTIwMjAwMDkyNDAzMDAxODMwNDIwMEZGMTQ0MzAwMEQ5MwotOjEwMkM5MDAwMDI0MDIwMjEyNDA1MDAzOTBFMDAwRTY0MDAwMDMwMjE3RQotOjEwMkNBMDAwMEUwMDAzMzI4Rjg0MDAxQzhGODJGRjk0MjQwMzAwMTJENQotOjEwMkNCMDAwQTA0MzAwMDkwRTAwMDMzRDhGODQwMDFDMEEwMDBCMEU4OAotOjEwMkNDMDAwOEZCRjAwNTgyNDA1MDAzNjBFMDAwRTY0MDAwMDMwMjEyRQotOjEwMkNEMDAwMEEwMDBCMEU4RkJGMDA1ODBFMDAwMzMyMDI0MDIwMjE2NQotOjEwMkNFMDAwOTIwMjAwMDU4Rjg0MDAxQzM0NDIwMDIwMEUwMDAzM0QzOAotOjEwMkNGMDAwQTIwMjAwMDUwRTAwMTA3NThGODQwMDFDOEZCRjAwNThDMwotOjEwMkQwMDAwOEZCMzAwNTQ4RkIyMDA1MDhGQjEwMDRDOEZCMDAwNDg4OQotOjEwMkQxMDAwMDNFMDAwMDgyN0JEMDA2MDNDMDI4MDA4MzQ0NTAxMDA0NAotOjEwMkQyMDAwM0MwMjgwMDA4QzQyMDE0MDk0QTMwMDBFMDAwMDMwMjE0MAotOjEwMkQzMDAwMDA0MDIwMjFBRjgyMDAxQzMwNjNGRkZGMzQwMkZGRkYwMAotOjEwMkQ0MDAwMTA2MjAwMDYzQzA3NjAyMDI0MDJGRkZGQTRBMjAwMEVEMAotOjEwMkQ1MDAwOTRBNTAwRUEwQTAwMDkwMTMwQTVGRkZGMDNFMDAwMDg3RQotOjEwMkQ2MDAwMDAwMDAwMDAyN0JERkZDODNDMDI4MDAwM0MwNjgwMDgzMAotOjEwMkQ3MDAwQUZCNTAwMkNBRkIxMDAxQ0FGQkYwMDMwQUZCNDAwMjgxRQotOjEwMkQ4MDAwQUZCMzAwMjRBRkIyMDAyMEFGQjAwMDE4MzQ1MTAxMDAzRgotOjEwMkQ5MDAwMzRDNTAxMDA4QzQzMDEwMDhFMjIwMDE0OENBNDAwRTQ5MQotOjEwMkRBMDAwMDAwMEE4MjFBRjgzMDAxQzAwNDQxMDIzMTg0MDAwNTJFQgotOjEwMkRCMDAwQTM4MDAwMTg4RTIyMDAxNDAwMDA1MDIxQUNBMjAwRTQ3MQotOjEwMkRDMDAwOTBDMzAwMDg5MEEyMDBENTMwNzMwMDdGQTNBMjAwMTAyQQotOjEwMkREMDAwOENCMjAwRTA4Q0I0MDBFNDMwNDIwMEZGMTA1MzAwM0JBMgotOjEwMkRFMDAwOTNBMjAwMTA4RjgzMDAxQzI0MDdGRjgwMDAwMjExQzBGMwotOjEwMkRGMDAwMDA2MjEwMjEyNDQyMDI0MDI0NjMwMDQwMDA0NzEwMjQ1NgotOjEwMkUwMDAwMzA2MzAwN0YzQzA5ODAwMDNDMDg4MDBBMDA2ODE4MjE3QwotOjEwMkUxMDAwQUQyMjAwMjQ4QzYyMDAzNDI3QTQwMDE0MjdBNTAwMTBFMgotOjEwMkUyMDAwMDI0MjgwMjEwMjkwMTAyMzA0NDAwMDI4QUZBMzAwMTQyNgotOjEwMkUzMDAwOTA2MjAwM0MwMEUyMTAyNDMwNDIwMEZGMTQ0MDAwMTk3MAotOjEwMkU0MDAwMDIwMDkwMjE5MDYyMDAzQzM0NDIwMDQwQTA2MjAwM0NBRAotOjEwMkU1MDAwOEY4NjAwMUM5M0EzMDAxMDI0QzIwMDQwMzA0MjAwN0ZFNAotOjEwMkU2MDAwMDA0ODI4MjEzQzAyMDgwMDhDNDIwMEY0MjQ2MzAwMDE0MQotOjEwMkU3MDAwMzA2NDAwRkYxNDgyMDAwMkEzQTMwMDEwQTNBMDAwMTA3RQotOjEwMkU4MDAwOTNBMjAwMTBBRkE1MDAxNDAwMDIxMUMwMjQ0MjAyNDAxQQotOjEwMkU5MDAwMDBDMjEwMjEwMDQ3MTAyNEFEMjIwMDI0MEEwMDBCNDU3NwotOjEwMkVBMDAwOTNBMjAwMTAwRTAwMDdDMzAwMDAwMDAwM0MwMjgwMDgzRgotOjEwMkVCMDAwMzQ0MjAxMDBBQzUwMDBFMDkzQTMwMDEwMjQwQTAwMDE0QQotOjEwMkVDMDAwQTA0MzAwRDUwQTAwMEI0NTkzQTIwMDEwMjQwMjAwMDE4NAotOjEwMkVEMDAwMTU0MjAwMDkzQzAzODAwMDhDNjIwMjc4MDQ0MEZGRkUyQQotOjEwMkVFMDAwOEY4MjAwMUNBQzYyMDI0MDI0MDIwMDAyQTA2MjAyNDRGNQotOjEwMkVGMDAwM0MwMjEwMDBBQzYyMDI3ODkyMjIwMDBCMjQwMzAwMDIxNAotOjEwMkYwMDAwMzA0MjAwRkYxNDQzMDA3MjAwMDAwMDAwOTYyMjAwMDhDNwotOjEwMkYxMDAwMzA0MzAwRkYyNDAyMDA4MjE0NjIwMDQwMjQwMjAwODQzNwotOjEwMkYyMDAwM0MwMjgwMDAzNDQ5MDEwMDhEMjIwMDBDOTUyMzAwMDZFQwotOjEwMkYzMDAwMDAwMjE2MDIzMDYzRkZGRjMwNDUwMDNGMjQwMjAwMjdFNQotOjEwMkY0MDAwMTBBMjAwMEZBRjgzMDAxNDI4QTIwMDI4MTA0MDAwMDgzMAotOjEwMkY1MDAwMjQwMjAwMzEyNDAyMDAyMTEwQTIwMDA5MjQwMjAwMjVDRAotOjEwMkY2MDAwMTBBMjAwMDc5MzgyMDAxOTBBMDAwQkJEMDAwMDAwMDBBOAotOjEwMkY3MDAwMTBBMjAwMDc5MzgyMDAxOTBBMDAwQkJEMDAwMDAwMDA5OAotOjEwMkY4MDAwMEUwMDA3NzcwMTIwMjAyMTBBMDAwQzNEMDAwMDAwMDAwMAotOjEwMkY5MDAwM0MwMzgwMDA4QzYyMDI3ODA0NDBGRkZFOEY4MjAwMUM5QwotOjEwMkZBMDAwQUM2MjAyNDAyNDAyMDAwMkEwNjIwMjQ0M0MwMjEwMDAxMwotOjEwMkZCMDAwQUM2MjAyNzgwQTAwMEMzRDAwMDAwMDAwOTUyMzAwMDY3OAotOjEwMkZDMDAwOTEyNDAwMDU4RDI1MDAwQzhEMjYwMDEwOEQyNzAwMThGQQotOjEwMkZEMDAwOEQyODAwMUM4RDI5MDAyMDI0NDIwMDAxM0MwMTA4MDA5RQotOjEwMkZFMDAwQTQyMzU2QzYzQzAxMDgwMEEwMjQ1NkM1M0MwMTA4MDA5NQotOjEwMkZGMDAwQUMyNTU2Q0MzQzAxMDgwMEFDMjY1NkQwM0MwMTA4MDA1QwotOjEwMzAwMDAwQUMyNzU2RDgzQzAxMDgwMEFDMjg1NkRDM0MwMTA4MDAyRgotOjEwMzAxMDAwQUMyOTU2RTAwQTAwMEMzREEzODIwMDE5MTQ2MjAwMEE5NAotOjEwMzAyMDAwMjQwMjAwODEzQzAyODAwODM0NDIwMTAwOTQ0NTAwRUFGOQotOjEwMzAzMDAwOTIyNjAwMDU4Rjg0MDAxQzMwQTVGRkZGMzBDNjAwRkZEQwotOjEwMzA0MDAwMEEwMDBCRkUzQzA3NjAyMTE0NjIwMDVDMDAwMDAwMDBENwotOjEwMzA1MDAwOTIyMjAwMEEzMDQzMDBGRjMwNjIwMDIwMTA0MDAwMDczNwotOjEwMzA2MDAwMzA2MjAwNDAzQzAyODAwODM0NDIwMTAwOTQ0NTAwRUE4RQotOjEwMzA3MDAwOEY4NDAwMUMwQTAwMEJGQzI0MDYwMDQwMTA0MDAwMDc0RgotOjEwMzA4MDAwMDAwMzE2MDAzQzAyODAwODM0NDIwMTAwOTQ0NTAwRUEyNwotOjEwMzA5MDAwOEY4NDAwMUMwQTAwMEJGQzI0MDYwMDQxMDAwMjE2MDM2QQotOjEwMzBBMDAwMDQ0MTAwNDYzQzAyODAwODM0NDIwMTAwOTQ0NTAwRUE5NQotOjEwMzBCMDAwOEY4NDAwMUMyNDA2MDA0MjMwQTVGRkZGM0MwNzYwMTlFNgotOjEwMzBDMDAwMEUwMDA5MDEwMDAwMDAwMDBBMDAwQzNEMDAwMDAwMDA5NQotOjEwMzBEMDAwOTIyMjAwMEIyNDA0MDAxNjMwNDIwMEZGMTA0NDAwMDYyOAotOjEwMzBFMDAwM0MwNjgwMDA5MjIyMDAwQjI0MDMwMDE3MzA0MjAwRkZCMAotOjEwMzBGMDAwMTQ0MzAwMzIwMDAwMDAwMDM0QzUwMTAwOTBBMjAwMEIxMAotOjEwMzEwMDAwMzA0MjAwRkYxNDQ0MDAwQjAwMDA4MDIxOENBMjAwMjBGQwotOjEwMzExMDAwOENBNDAwMjAyNDAzRkY4MDAwNDMxMDI0MDAwMjExNDBFRgotOjEwMzEyMDAwMzA4NDAwN0YwMDQ0MTAyNTNDMDMyMDAwMDA0MzEwMjUxQwotOjEwMzEzMDAwQUNDMjA4MzA5NEEyMDAwODAwMDIxNDAwMDAwMjE0MDM3QwotOjEwMzE0MDAwMDQ0MjAwMDEyNDEwMDAwMTk0QTIwMDA4MzA0MjAwODBEMwotOjEwMzE1MDAwNTA0MDAwMUEwMjAwQTgyMTk0QTIwMDA4MzA0MjIwMDAyQQotOjEwMzE2MDAwNTA0MDAwMTYwMjAwQTgyMThDQTMwMDE4M0MwMjFDMkQyMAotOjEwMzE3MDAwMzQ0MjE5RUQxMDYyMDAxMTAyMDBBODIxM0MwMjA4MDAzRgotOjEwMzE4MDAwOEM0MjAwRDQxMDQwMDAwNTNDMDI4MDA4MjQwMzAwMDQ1NwotOjEwMzE5MDAwMzQ0MjAxMDBBMDQzMDBGQzNDMDI4MDA4MzQ0MjAxMDA5QwotOjEwMzFBMDAwOTQ0NTAwRUE4Rjg0MDAxQzI0MDYwMDA2MzBBNUZGRkYyQQotOjEwMzFCMDAwMEUwMDA5MDEzQzA3NjAyMTAyMDBBODIxMEUwMDA5MzkxOAotOjEwMzFDMDAwMDAwMDAwMDA5MjIyMDAwQTMwNDIwMDA4MTA0MDAwMDQ3MwotOjEwMzFEMDAwMDJBMDEwMjEwRTAwMTM3OTAwMDAwMDAwMDJBMDEwMjFBRgotOjEwMzFFMDAwOEZCRjAwMzA4RkI1MDAyQzhGQjQwMDI4OEZCMzAwMjQyMAotOjEwMzFGMDAwOEZCMjAwMjA4RkIxMDAxQzhGQjAwMDE4MDNFMDAwMDhEMAotOjEwMzIwMDAwMjdCRDAwMzgyNDAyRkY4MDAwODIyMDI0M0MwMjkwMDA2OQotOjEwMzIxMDAwMzQ0MjAwMDcwMDgyMjAyNTNDMDI4MDAwQUM0NDAwMjA5QwotOjEwMzIyMDAwM0MwMzgwMDA4QzYyMDAyMDA0NDBGRkZFMDAwMDAwMDA5MAotOjEwMzIzMDAwMDNFMDAwMDgwMDAwMDAwMDNDMDM4MDAwMjQwMkZGODAzRgotOjEwMzI0MDAwMDA4MjIwMjQzNDYyMDAwNzAwODIyMDI1QUM2NDAwMjAyNAotOjEwMzI1MDAwOEM2MjAwMjAwNDQwRkZGRTAwMDAwMDAwMDNFMDAwMDgzNAotOjEwMzI2MDAwMDAwMDAwMDAyN0JERkZEOEFGQjMwMDFDQUZCMTAwMTRCMQotOjEwMzI3MDAwQUZCMDAwMTBBRkJGMDAyMEFGQjIwMDE4M0MxMTgwMDAwQgotOjEwMzI4MDAwM0MwMjgwMDg4RTMyMDAyMDM0NTMwMTAwQUUyNDAwMjAxRQotOjEwMzI5MDAwOTY2MzAwRUEwMDA1MTQwMDNDMDc0MDAwMDA0NzM4MjUwQgotOjEwMzJBMDAwMDBBMDgwMjEwMDAwMzAyMTBFMDAwOTAxMzA2NUZGRkZFMQotOjEwMzJCMDAwMjQwMjAwQTExNjAyMDAwMjI0MDJGRkZGQTI2MjAwMDlGQwotOjEwMzJDMDAwQUUzMjAwMjA4RkJGMDAyMDhGQjMwMDFDOEZCMjAwMThEOQotOjEwMzJEMDAwOEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjg1NAotOjEwMzJFMDAwM0MwMjgwMDgyNDAzMDAwNTI3QkRGRkU4MzQ0MjAxMDBBQQotOjEwMzJGMDAwQTA0MzAwRkNBRkJGMDAxMDNDMDI4MDAwOEM0MjAxMDBFNAotOjEwMzMwMDAwMjQwNTAwQTEwMDQwMjAyMTBFMDAwQzY3QUY4MjAwMUNBNAotOjEwMzMxMDAwM0MwMzgwMDA4QzYyMDI3ODA0NDBGRkZFOEY4MjAwMUMxOAotOjEwMzMyMDAwOEZCRjAwMTAyN0JEMDAxOEFDNjIwMjQwMjQwMjAwMDJDQgotOjEwMzMzMDAwQTA2MjAyNDQzQzAyMTAwMEFDNjIwMjc4MDNFMDAwMDg4NAotOjEwMzM0MDAwMDAwMDAwMDAyN0JERkZFODNDMDY4MDAwQUZCRjAwMTA3MgotOjEwMzM1MDAwMzRDNzAxMDA5NEUyMDAwODMwNDQwMEZGMzg4MzAwODI0MwotOjEwMzM2MDAwMzg4MjAwODQyQzYzMDAwMTJDNDIwMDAxMDA2MjE4MjU4MQotOjEwMzM3MDAwMTA2MDAwMkQyNDAyMDA4MzkzODIwMDE5NTA0MDAwM0IwRQotOjEwMzM4MDAwOEZCRjAwMTAzQzAyMDgwMDkwNDI1NkNDOENDNDAxMDA1NAotOjEwMzM5MDAwM0MwNjA4MDA5NEM2NTZDNjMwNDUwMDNGMzhBMzAwMzJBQwotOjEwMzNBMDAwMzhBMjAwM0YyQzYzMDAwMTJDNDIwMDAxMDA2MjE4MjU2NgotOjEwMzNCMDAwQUY4NDAwMUNBRjg2MDAxNEEzODAwMDE5MTQ2MDAwMDdCRQotOjEwMzNDMDAwMDBFMDIwMjEyNDAyMDAyMDE0QTIwMDEyMDAwMDAwMDBDRQotOjEwMzNEMDAwMzQwMkZGRkYxNEMyMDAwRjAwMDAwMDAwMjQwMjAwMjA4RQotOjEwMzNFMDAwMTRBMjAwMDUwMEUwMjgyMThDRTMwMDE0MjQwMkZGRkY1MgotOjEwMzNGMDAwNTA2MjAwMEI4RkJGMDAxMDNDMDQwODAwMjQ4NDU2QzBBQwotOjEwMzQwMDAwMDAwMDMwMjEwRTAwMDcwNjI0MDcwMDAxMEEwMDBDRDYzOAotOjEwMzQxMDAwOEZCRjAwMTAwRTAwMDc3NzAwMDAwMDAwOEZCRjAwMTA2NAotOjEwMzQyMDAwMEEwMDA5MzkyN0JEMDAxODE0ODIwMDA0MjQwMjAwODUwRgotOjEwMzQzMDAwOENDNTAxMDQwQTAwMENFMTAwMDAyMDIxMTQ4MjAwMDY2MgotOjEwMzQ0MDAwMjQ4MkZGODA4Q0M1MDEwNDI0MDQ0MDAwOEZCRjAwMTAzQgotOjEwMzQ1MDAwMEEwMDAxNjcyN0JEMDAxODMwNDIwMEZGMkM0MjAwMDIxRAotOjEwMzQ2MDAwMTA0MDAwMDQyNDAyMDAyMjhGQkYwMDEwMEEwMDBCMjcyNgotOjEwMzQ3MDAwMjdCRDAwMTgxNDgyMDAwNDhGODIwMDI0OEZCRjAwMTAyMwotOjEwMzQ4MDAwMEEwMDBDODYyN0JEMDAxODhDNDIwMDBDMTA0MDAwMUU1QwotOjEwMzQ5MDAwMDBFMDI4MjE5MEUzMDAwOTI0MDIwMDE4MTQ2MjAwMDNEMAotOjEwMzRBMDAwMjQwMjAwMTYwQTAwMENGQzI0MDMwMDA4MTQ2MjAwMDcyMgotOjEwMzRCMDAwMjQwMjAwMTcyNDAzMDAxMjNDMDI4MDA4MzQ0MjAwODBEQQotOjEwMzRDMDAwQTA0MzAwMDkwQTAwMEQwOTk0QTcwMDA4NTQ2MjAwMDdGMAotOjEwMzREMDAwOTRBNzAwMDg4RjgyRkY5NDI0MDRGRkZFOTA0MzAwMDUwOAotOjEwMzRFMDAwMDA2NDE4MjRBMDQzMDAwNTk0QTcwMDA4OTBBNjAwMUJDMAotOjEwMzRGMDAwOENBNDAwMDA5NEE1MDAwNjhGQkYwMDEwMDAwNzNDMDBCQwotOjEwMzUwMDAwMEEwMDA4REMyN0JEMDAxODhGQkYwMDEwMDNFMDAwMDg4OAotOjEwMzUxMDAwMjdCRDAwMTg4Rjg1MDAyNDNDMDQ4MDAwOTRBMjAwMkE1NwotOjEwMzUyMDAwOENBMzAwMzQwMDAyMzBDMDI0MDJGRkYwMDBDMjEwMjQzQgotOjEwMzUzMDAwMDA2MjE4MjFBQzgzMDAzQzhDQTIwMDMwM0MwMzgwMDA2OAotOjEwMzU0MDAwQUM4MjAwMzgzQzAyMDA1MDM0NDIwMDEwQUM2MjAwMzBDMwotOjEwMzU1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEM2MjAwMDA3RAotOjEwMzU2MDAwMzA0MjAwMjAxMDQwRkZGRDMwQzIwMDA4MTA0MDAwMDYyRAotOjEwMzU3MDAwM0MwMjgwMDA4QzYyMDQwOEFDQTIwMDIwOEM2MjA0MEMyNwotOjEwMzU4MDAwMEEwMDBEMzRBQ0EyMDAyNDhDNDMwNDAwQUNBMzAwMjAzQwotOjEwMzU5MDAwOEM0MjA0MDRBQ0EyMDAyNDNDMDMwMDIwM0MwMjgwMDBDNgotOjEwMzVBMDAwQUM0MzAwMzAzQzA0ODAwMDhDODIwMDMwMDA0MzEwMjQ4NwotOjEwMzVCMDAwMTQ0MEZGRkQ4Rjg2MDAyNDNDMDIwMDQwQUM4MjAwMzBBNgotOjEwMzVDMDAwOTRDMzAwMkE5NEMyMDAyODk0QzQwMDJDOTRDNTAwMkVGMQotOjEwMzVEMDAwMjQ2MzAwMDEwMDQ0MTAyMTMwNjRGRkZGQTRDMjAwMjhDRQotOjEwMzVFMDAwMTQ4NTAwMDJBNEMzMDAyQUE0QzAwMDJBMDNFMDAwMDgzNgotOjEwMzVGMDAwMDAwMDAwMDA4Rjg0MDAyNDI3QkRGRkU4M0MwNTgwMDQwNAotOjEwMzYwMDAwMjQ4NDAwMTBBRkJGMDAxMDBFMDAwRTQ3MjQwNjAwMEFFRAotOjEwMzYxMDAwOEY4NDAwMjQ5NDgyMDAxMjk0ODMwMDJFMzA0MjAwMEY4NQotOjEwMzYyMDAwMjQ0MjAwMDMwMDQzMTgwNDI0MDI3RkZGMDA0MzEwMkJCMAotOjEwMzYzMDAwMTA0MDAwMDJBQzgzMDAwMDAwMDAwMDBEMEUwMDBEMTNDRQotOjEwMzY0MDAwMDAwMDAwMDA4RjgzMDAyNDhGQkYwMDEwMjdCRDAwMThFQQotOjEwMzY1MDAwOTQ2MjAwMTQ5NDYzMDAxQTMwNDIwMDBGMDAwMjE1MDBCNwotOjEwMzY2MDAwMDA2MjE4MjUzQzAyODAwMDAzRTAwMDA4QUM0MzAwQTA4MwotOjEwMzY3MDAwOEY4MzAwMjQzQzAyODAwNDk0NDQwMDA2OTQ2MjAwMUE2NAotOjEwMzY4MDAwOEM2NTAwMDBBNDY0MDAxNjAwNDQxMDIzMzA0MkZGRkY0NAotOjEwMzY5MDAwMDA0NTEwMkIwM0UwMDAwODM4NDIwMDAxOEY4NDAwMjQwRAotOjEwMzZBMDAwM0MwNzgwMDQ5NDg2MDAxQThDODUwMDAwOTRFMjAwMDY5MgotOjEwMzZCMDAwQTQ4MjAwMTY5NEUzMDAwNjAwQzMxMDIzMzA0MkZGRkZFQgotOjEwMzZDMDAwMDA0NTEwMkIzODQyMDAwMTE0NDBGRkY4QTQ4MzAwMTY3NwotOjEwMzZEMDAwMDNFMDAwMDgwMDAwMDAwMDhGODQwMDI0M0MwMjgwMDQwNgotOjEwMzZFMDAwOTQ0MjAwMDY5NDgzMDAxQThDODUwMDAwQTQ4MjAwMTY4MAotOjEwMzZGMDAwMDA2MjEwMjMzMDQyRkZGRjAwNDUxMDJCMzg0MjAwMDFDQQotOjEwMzcwMDAwNTA0MDAwMEQ4Rjg1MDAyNDAwNjAzMDIxM0MwNzgwMDQ2QwotOjEwMzcxMDAwOTRFMjAwMDZBNDgyMDAxNjk0RTMwMDA2MDBDMzEwMjM3RQotOjEwMzcyMDAwMzA0MkZGRkYwMDQ1MTAyQjM4NDIwMDAxMTQ0MEZGRjhFMwotOjEwMzczMDAwQTQ4MzAwMTY4Rjg1MDAyNDNDMDM4MDAwMzQ2MjA0MDBCQgotOjEwMzc0MDAwOENBNDAwMjBBRjgyMDAyMEFDNjQwMDM4OENBMjAwMjQzRQotOjEwMzc1MDAwQUM2MjAwM0MzQzAyMDAwNUFDNjIwMDMwMDNFMDAwMDhCMwotOjEwMzc2MDAwQUNBMDAwMDQ4Rjg0MDAyNDNDMDMwMDA2OEM4MjAwMDQ3QgotOjEwMzc3MDAwMDAwMjExNDAwMDQzMTAyNTNDMDM4MDAwQUM2MjAwMzA4MQotOjEwMzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEM2MjAwMDA0QgotOjEwMzc5MDAwMzA0MjAwMTAxMDQwRkZGRDM0NjIwNDAwQUM4MDAwMDQ5MQotOjEwMzdBMDAwMDNFMDAwMDhBRjgyMDAyMDhGODYwMDI0MjdCREZGRTBFMQotOjEwMzdCMDAwQUZCMTAwMTRBRkIwMDAxMEFGQkYwMDE4OENDMzAwMDQ0RAotOjEwMzdDMDAwOENDNTAwMjQ4RjgyMDAyMDMwOTAwMEZGOTRDNDAwMUEyMgotOjEwMzdEMDAwMjQ2MzAwMDEyNDQyMDAyMDI0ODQwMDAxMjRBNzAwMjA0NwotOjEwMzdFMDAwQUNDMzAwMDRBRjgyMDAyMEE0QzQwMDFBQUNDNzAwMjRGQwotOjEwMzdGMDAwMDRBMTAwMDYwMDAwODgyMTA0RTIwMDA1OTRDMjAwMUExQQotOjEwMzgwMDAwOENDMjAwMjAyNDQyMDAwMUFDQzIwMDIwOTRDMjAwMUFFNQotOjEwMzgxMDAwOTRDMzAwMjgyRTA0MDAwMTAwNDMxMDI2MkM0MjAwMDEwRQotOjEwMzgyMDAwMDA0NDEwMjQ1MDQwMDAwNTk0QzIwMDFBMjQwMjAwMDFGNAotOjEwMzgzMDAwQUNDMjAwMDg5NEMyMDAxQTk0QzMwMDI4MDAxMDIwMkJDOAotOjEwMzg0MDAwMDA0MzEwMjYyQzQyMDAwMTAwNDQxMDI1MTQ0MDAwMDdCQwotOjEwMzg1MDAwMDAwMDAwMDA4Q0MyMDAwODE0NDAwMDA0MjQwMjAwMTA4NAotOjEwMzg2MDAwOENDMzAwMDQxNDYyMDAwRjhGODUwMDI0MEUwMDBEQTc4NgotOjEwMzg3MDAwMjQxMTAwMDE4RjgyMDAyNDk0NDMwMDI4OTQ0MjAwMUFFRQotOjEwMzg4MDAwMTQ0MzAwMDMwMDAwMDAwMDBFMDAwRDEzMDAwMDAwMDBCMAotOjEwMzg5MDAwMTYwMDAwMDQ4Rjg1MDAyNDBFMDAwRDg0MDAwMDAwMDAzNwotOjEwMzhBMDAwOEY4NTAwMjQ5NEEyMDAxRTk0QTQwMDFDMjQ0MjAwMDFEMQotOjEwMzhCMDAwMzA0M0ZGRkYxNDY0MDAwMkE0QTIwMDFFQTRBMDAwMUU1NwotOjEwMzhDMDAwMTIwMDAwMEEzQzAyODAwNDk0QTIwMDE0OTRBMzAwMUE3RgotOjEwMzhEMDAwMzA0MjAwMEYwMDAyMTUwMDAwNjIxODI1M0MwMjgwMDBGMwotOjEwMzhFMDAwQUM0MzAwQTAwQTAwMEUxRUFDQTAwMDA4OTQ0MjAwMDZFMwotOjEwMzhGMDAwOTRBMzAwMUE4Q0E0MDAwMEE0QTIwMDE2MDA2MjEwMjM1NgotOjEwMzkwMDAwMzA0MkZGRkYwMDQ0MTAyQjM4NDIwMDAxMTA0MDAwMERGMAotOjEwMzkxMDAwMDIyMDEwMjEwMDYwMzAyMTNDMDc4MDA0OTRFMjAwMDY2MAotOjEwMzkyMDAwQTRBMjAwMTY5NEUzMDAwNjAwQzMxMDIzMzA0MkZGRkY1OAotOjEwMzkzMDAwMDA0NDEwMkIzODQyMDAwMTE0NDBGRkY4QTRBMzAwMTZFNQotOjEwMzk0MDAwMDIyMDEwMjE4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTAxQgotOjEwMzk1MDAwMDNFMDAwMDgyN0JEMDAyMDAzRTAwMDA4MDAwMDAwMDA4RAotOjEwMzk2MDAwOEY4MjAwMkMzQzAzMDAwNjAwMDIxMTQwMDA0MzEwMjUwQQotOjEwMzk3MDAwM0MwMzgwMDBBQzYyMDAzMDAwMDAwMDAwMDAwMDAwMDA0QQotOjEwMzk4MDAwMDAwMDAwMDA4QzYyMDAwMDMwNDIwMDEwMTA0MEZGRkQ3QgotOjEwMzk5MDAwMzQ2MjA0MDBBRjgyMDAyODAzRTAwMDA4QUY4MDAwMkNFRQotOjEwMzlBMDAwMDNFMDAwMDgwMDAwMTAyMTAzRTAwMDA4MDAwMDAwMDAxMAotOjEwMzlCMDAwMzA4NEZGRkYzMEE1RkZGRjAwMDAxODIxMTA4MDAwMDdCMgotOjEwMzlDMDAwMDAwMDAwMDAzMDgyMDAwMTEwNDAwMDAyMDAwNDIwNDI4QwotOjEwMzlEMDAwMDA2NTE4MjEwQTAwMEUzRDAwMDUyODQwMDNFMDAwMDg5QwotOjEwMzlFMDAwMDA2MDEwMjExMEMwMDAwNjI0QzZGRkZGOENBMjAwMDA1QQotOjEwMzlGMDAwMjRBNTAwMDRBQzgyMDAwMDBBMDAwRTQ3MjQ4NDAwMDRDMQotOjEwM0EwMDAwMDNFMDAwMDgwMDAwMDAwMDEwQTAwMDA4MjRBM0ZGRkY0RQotOjEwM0ExMDAwQUM4NjAwMDAwMDAwMDAwMDAwMDAwMDAwMjQwMkZGRkY1MAotOjEwM0EyMDAwMjQ2M0ZGRkYxNDYyRkZGQTI0ODQwMDA0MDNFMDAwMDgwQgotOjEwM0EzMDAwMDAwMDAwMDAzQzAyODAwODM0NDIwMDgwMjQwMzAwMDFBMgotOjEwM0E0MDAwQUM0MzAwMENBNDQzMDAxMEE0NDMwMDEyQTQ0MzAwMTQ5MAotOjEwM0E1MDAwMDNFMDAwMDhBNDQzMDAxNjhGODIwMDI0MjdCREZGRDg4RQotOjEwM0E2MDAwQUZCMzAwMUNBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTA3QwotOjEwM0E3MDAwQUZCRjAwMjA4QzQ3MDAwQzI0ODIwMDgwMjQwOUZGODAwNwotOjEwM0E4MDAwM0MwODgwMEUzMDQzMDA3RjAwODA4MDIxM0MwQTgwMDA4QgotOjEwM0E5MDAwMDA0OTIwMjQwMDY4MTgyMTMwQjEwMEZGMzBEMjAwRkYxNwotOjEwM0FBMDAwMTBFMDAwMjkwMDAwOTgyMTI2MDIwMTAwQUQ0NDAwMkNGRQotOjEwM0FCMDAwMDA0OTI4MjQzMDQyMDA3RjAwNDgyMDIxOTA2MjAwMDAwNQotOjEwM0FDMDAwMjQwMzAwNTAzMDQyMDBGRjE0NDMwMDA0MDAwMDAwMDBCMwotOjEwM0FEMDAwQUQ0NTAwMkM5NDgyMDBFQTMwNTNGRkZGMEUwMDBEODRBOAotOjEwM0FFMDAwMDAwMDAwMDA4RjgyMDAyNDhGODMwMDIwMDAxMTJDMDAzMgotOjEwM0FGMDAwOTQ0MjAwMUUwMDEyMjQwMDM0ODQwMDAxMDBBMjI4MjVGNAotOjEwM0IwMDAwM0MwMjQwMDAwMEEyMjgyNUFDNzAwMDAwOEZCRjAwMjBCRQotOjEwM0IxMDAwQUM2MDAwMDQ4RkIyMDAxOEFDNzMwMDA4OEZCMTAwMTRDMQotOjEwM0IyMDAwQUM2MDAwMEM4RkIzMDAxQ0FDNjQwMDEwOEZCMDAwMTBCMAotOjEwM0IzMDAwQUM2MDAwMTQyNDA0MDAwMUFDNjAwMDE4MjdCRDAwMjgwQwotOjEwM0I0MDAwMEEwMDBEQjhBQzY1MDAxQzhGQkYwMDIwOEZCMzAwMUNBRAotOjEwM0I1MDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDg3RQotOjEwM0I2MDAwMjdCRDAwMjgzQzA2ODAwMDM0QzIwMTAwOTA0MzAwMEZBRQotOjEwM0I3MDAwMjQwMjAwMTAxMDYyMDAwRTI4NjUwMDExMTBBMDAwMDczQQotOjEwM0I4MDAwMjQwMjAwMTIyNDAyMDAwODI0MDUwMDNBMTA2MjAwMDZGNAotOjEwM0I5MDAwMDAwMDMwMjEwM0UwMDAwODAwMDAwMDAwMjQwNTAwMzU4QgotOjEwM0JBMDAwMTQ2MkZGRkMwMDAwMzAyMTBBMDAwRTY0MDAwMDAwMDBENwotOjEwM0JCMDAwOENDMjAwNzQ4RjgzRkY5NDI0NDIwRkEwMDNFMDAwMDg5RQotOjEwM0JDMDAwQUM2MjAwMEMyN0JERkZFOEFGQkYwMDEwMEUwMDAzNDIzRgotOjEwM0JEMDAwMjQwNTAwMDEzQzA0ODAwODhGQkYwMDEwMjQwMjAwMDE2RQotOjEwM0JFMDAwMzQ4MzAwODBBNDYyMDAxMjI3QkQwMDE4MjQwMjAwMDE2MwotOjEwM0JGMDAwMDNFMDAwMDhBMDgwMDAxQTI3QkRGRkUwQUZCMjAwMTg2NAotOjEwM0MwMDAwQUZCMTAwMTRBRkIwMDAxMEFGQkYwMDFDMzBCMkZGRkY2NwotOjEwM0MxMDAwMEUwMDAzMzIwMDgwODgyMTNDMDI4MDA4MzQ1MDAwODA2RQotOjEwM0MyMDAwOTIwMjAwMDkyNDAzMDAwNDMwNDIwMEZGMTQ0MzAwMENGOAotOjEwM0MzMDAwM0MwMjgwMDgxMjQwMDAwODI0MDIwMDBBMEUwMDBFNUJCRAotOjEwM0M0MDAwMDAwMDAwMDA5MjAyMDAwNTI0MDNGRkZFMDA0MzEwMjQ0MAotOjEwM0M1MDAwQTIwMjAwMDUyNDAyMDAxMkEyMDIwMDA5M0MwMjgwMDgxMAotOjEwM0M2MDAwMzQ0MjAwODAwMjIwMjAyMTBFMDAwMzNEQTA0MDAwMjdBNgotOjEwM0M3MDAwMTY0MDAwMDMwMjIwMjAyMTBFMDAwRUJGMDAwMDAwMDBBRAotOjEwM0M4MDAwMDIyMDIwMjEzMjQ2MDBGRjhGQkYwMDFDOEZCMjAwMTg5NwotOjEwM0M5MDAwOEZCMTAwMTQ4RkIwMDAxMDI0MDUwMDM4MEEwMDBFNjRBNAotOjEwM0NBMDAwMjdCRDAwMjAyN0JERkZFMEFGQkYwMDFDQUZCMjAwMTg0QQotOjEwM0NCMDAwQUZCMTAwMTRBRkIwMDAxMDBFMDAwMzMyMDA4MDgwMjFCRAotOjEwM0NDMDAwMEUwMDBFNUIwMDAwMDAwMDNDMDI4MDA4MzQ0NTAwODBCRQotOjEwM0NEMDAwOTBBMjAwMDkyNDEyMDAxODMwNTEwMEZGMTIzMjAwMDM5NAotOjEwM0NFMDAwMDIwMDIwMjEyNDAyMDAxMkEwQTIwMDA5OTBBMjAwMDVENwotOjEwM0NGMDAwMjQwM0ZGRkUwMDQzMTAyNDBFMDAwMzNEQTBBMjAwMDU5NAotOjEwM0QwMDAwMDIwMDIwMjEyNDA1MDAyMDE2MzIwMDA3MDAwMDMwMjE4NwotOjEwM0QxMDAwOEZCRjAwMUM4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAzRAotOjEwM0QyMDAwMEEwMDAzNDIyN0JEMDAyMDhGQkYwMDFDOEZCMjAwMTg3RAotOjEwM0QzMDAwOEZCMTAwMTQ4RkIwMDAxMDI0MDUwMDM5MEEwMDBFNjQwMgotOjEwM0Q0MDAwMjdCRDAwMjAyN0JERkZFODNDMDI4MDAwQUZCMDAwMTA3NwotOjEwM0Q1MDAwQUZCRjAwMTQzNDQyMDEwMDk0NDIwMDBDMjQwNTAwMzYyOQotOjEwM0Q2MDAwMDA4MDgwMjExNDQwMDAxMjMwNDYwMEZGMEUwMDAzMzIxNAotOjEwM0Q3MDAwMDAwMDAwMDAzQzAyODAwODM0NDIwMDgwMjQwMzAwMTI0RQotOjEwM0Q4MDAwQTA0MzAwMDk5MDQzMDAwNTM0NjMwMDEwMEUwMDBFNUI1MQotOjEwM0Q5MDAwQTA0MzAwMDUwRTAwMDMzRDAyMDAyMDIxMDIwMDIwMjE2NwotOjEwM0RBMDAwMEUwMDAzNDIyNDA1MDAyMDBBMDAwRjNDMDAwMDAwMDAyMgotOjEwM0RCMDAwMEUwMDBFNjQwMDAwMDAwMDBFMDAwMzMyMDIwMDIwMjFGRAotOjEwM0RDMDAwM0MwMjgwMDg5MDQzMDAxQjI0MDVGRjlGMDIwMDIwMjEzNQotOjEwM0REMDAwMDA2NTE4MjQ4RkJGMDAxNDhGQjAwMDEwQTA0MzAwMUI5MwotOjEwM0RFMDAwMEEwMDAzM0QyN0JEMDAxODI3QkRGRkUwQUZCRjAwMTg0NAotOjEwM0RGMDAwQUZCMTAwMTRBRkIwMDAxMDMwQjEwMEZGMEUwMDAzMzJCRAotOjEwM0UwMDAwMDA4MDgwMjEzQzAyODAwODI0MDMwMDEyMzQ0MjAwODA5QwotOjEwM0UxMDAwMEUwMDBFNUJBMDQzMDAwOTBFMDAwMzNEMDIwMDIwMjFBRQotOjEwM0UyMDAwMDIwMDIwMjEwMjIwMzAyMThGQkYwMDE4OEZCMTAwMTQyMgotOjEwM0UzMDAwOEZCMDAwMTAyNDA1MDAzNTBBMDAwRTY0MjdCRDAwMjA1NQotOjEwM0U0MDAwM0MwNDgwMDg5MDgzMDAwRTkwODIwMDBBMTQ0MzAwMEIwQgotOjEwM0U1MDAwMDAwMDI4MjE4RjgyRkY5NDI0MDMwMDUwMjQwNTAwMDFENAotOjEwM0U2MDAwOTA0MjAwMDAzMDQyMDBGRjE0NDMwMDA0MDAwMDAwMDBCNAotOjEwM0U3MDAwOTA4MjAwMEUyNDQyMDAwMUEwODIwMDBFMDNFMDAwMDhBMAotOjEwM0U4MDAwMDBBMDEwMjEzQzAzODAwMDhDNjIwMUY4MDQ0MEZGRkU3QQotOjEwM0U5MDAwMjQwMjAwMDJBQzY0MDFDMEEwNjIwMUM0M0MwMjEwMDAxNAotOjEwM0VBMDAwMDNFMDAwMDhBQzYyMDFGODI3QkRGRkUwQUZCMjAwMThFNAotOjEwM0VCMDAwM0MxMjgwMDhBRkIxMDAxNEFGQkYwMDFDQUZCMDAwMTBCRgotOjEwM0VDMDAwMzY1MTAwODA5MjIyMDAwOTI0MDMwMDBBMzA0MjAwRkY4QwotOjEwM0VEMDAwMTQ0MzAwM0UwMDAwMDAwMDhFNDMwMDA0OEUyMjAwMzg5MAotOjEwM0VFMDAwNTA2MjAwODA4RkJGMDAxQzkyMjIwMDAwMjQwMzAwNTAwQgotOjEwM0VGMDAwMzA0MjAwRkYxNDQzMDAyNTNDMDI4MDAwOEM0MjAxNDAwOAotOjEwM0YwMDAwOEU0MzAwMDQzNjQyMDEwMDAyMjAyODIxQUM0MzAwMUNFRAotOjEwM0YxMDAwOTYyMjAwNUM4RTIzMDAzODMwNDJGRkZGMDAwMjEwNDBFMgotOjEwM0YyMDAwMDA2MjE4MjFBRTIzMDAxQzhFNDMwMDA0OEUyNDAwMzg0QQotOjEwM0YzMDAwOTYyMjAwNUMwMDY0MTgyMzMwNDJGRkZGMDAwMzE4NDMwMAotOjEwM0Y0MDAwMDAwMjEwNDAwMDQzMTAyQTEwNDAwMDA2MDAwMDAwMDA0QwotOjEwM0Y1MDAwOEU0MjAwMDQ4RTIzMDAzODAwNDMxMDIzMEEwMDBGQUE2QgotOjEwM0Y2MDAwMDAwMjIwNDM5NjIyMDA1QzMwNDJGRkZGMDAwMjIwNDAwNgotOjEwM0Y3MDAwM0MwMjgwMDgzNDQzMDEwMDM0NDIwMDgwQUNBNDAwMkM5MQotOjEwM0Y4MDAwQTA0MDAwMjQyNDAyMDAwMUEwNjIwMDBDMEUwMDBGNUU3RAotOjEwM0Y5MDAwMDAwMDAwMDAxMDQwMDA1MzhGQkYwMDFDM0MwMjgwMDA1NgotOjEwM0ZBMDAwOEM0NDAxNDAzQzAzODAwMDhDNjIwMUY4MDQ0MEZGRkUxOQotOjEwM0ZCMDAwMjQwMjAwMDJBQzY0MDFDMEEwNjIwMUM0M0MwMjEwMDBGMwotOjEwM0ZDMDAwQUM2MjAxRjgwQTAwMTAwNzhGQkYwMDFDOTIyMjAwMDlBMgotOjEwM0ZEMDAwMjQwMzAwMTAzMDQyMDBGRjE0NDMwMDA0M0MwMjgwMDAyMAotOjEwM0ZFMDAwOEM0NDAxNDAwQTAwMEZFRTAwMDAyODIxOTIyMjAwMDlCMwotOjEwM0ZGMDAwMjQwMzAwMTYzMDQyMDBGRjE0NDMwMDA2MjQwMjAwMTQ3QwotOjEwNDAwMDAwQTIyMjAwMDkzQzAyODAwMDhDNDQwMTQwMEEwMDEwMDFGOQotOjEwNDAxMDAwOEZCRjAwMUM4RTIyMDAzODhFMjMwMDNDMDA0MzEwMjNFQgotOjEwNDAyMDAwMDQ0MTAwMzA4RkJGMDAxQzkyMjIwMDI3MjQ0MjAwMDE2RgotOjEwNDAzMDAwQTIyMjAwMjc5MjIyMDAyNzJDNDIwMDA0MTQ0MDAwMTZERQotOjEwNDA0MDAwM0MxMDgwMDA5MjIyMDAwOTI0MDMwMDA0MzA0MjAwRkY0QgotOjEwNDA1MDAwMTQ0MzAwMDkzQzAyODAwMDhDNDQwMTQwOEZCRjAwMUNDNwotOjEwNDA2MDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMjQwNTAwOTM5OAotOjEwNDA3MDAwMEEwMDBFQ0MyN0JEMDAyMDhDNDQwMTQwMjQwNTAwOTM4QgotOjEwNDA4MDAwOEZCRjAwMUM4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTBDQQotOjEwNDA5MDAwMEEwMDBGNDgyN0JEMDAyMDhFMDQwMTQwMEUwMDAzMzJBNQotOjEwNDBBMDAwMDAwMDAwMDA4RTQyMDAwNDI0NDJGRkZGQUU0MjAwMDRFNAotOjEwNDBCMDAwOEUyMjAwM0MyNDQyRkZGRkFFMjIwMDNDMEUwMDAzM0Q1NgotOjEwNDBDMDAwOEUwNDAxNDA4RTA0MDE0MDhGQkYwMDFDOEZCMjAwMTg4NwotOjEwNDBEMDAwOEZCMTAwMTQ4RkIwMDAxMDI0MDUwMDA0MEEwMDAzNDJDMQotOjEwNDBFMDAwMjdCRDAwMjA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTBEMAotOjEwNDBGMDAwMDNFMDAwMDgyN0JEMDAyMDNDMDY4MDAwOENDMjAxODgzOAotOjEwNDEwMDAwM0MwMzgwMDgzNDY1MDA4MDkwNjMwMDBFMDAwMjE0MDJCNgotOjEwNDExMDAwMzA0NDAwRkYzMDYzMDBGRjE0NjQwMDBFM0MwMjgwMDg0RQotOjEwNDEyMDAwOTBBMjAwMjYzMDQyMDBGRjEwNDQwMDA5OEY4MkZGOTRDNQotOjEwNDEzMDAwQTBBNDAwMjYyNDAzMDA1MDkwNDIwMDAwMzA0MjAwRkY1QgotOjEwNDE0MDAwMTQ0MzAwMDYwMDAwMDAwMDBBMDAwNUExOENDNDAxODA5MQotOjEwNDE1MDAwM0MwMjgwMDgzNDQyMDA4MEEwNDQwMDI2MDNFMDAwMDhBRQotOjEwNDE2MDAwMDAwMDAwMDAyN0JERkZFMDMwRTcwMEZGQUZCMjAwMThGRAotOjEwNDE3MDAwQUZCRjAwMUNBRkIxMDAxNEFGQjAwMDEwMDA4MDkwMjFBMQotOjEwNDE4MDAwMTRFMDAwMDYzMEM2MDBGRjAwMDAwMDAwMDAwMDAwMEQzMwotOjEwNDE5MDAwMDAwMDAwMDAwQTAwMTA2MDI0MDAwMTE2M0MwMzgwMDhBMwotOjEwNDFBMDAwOTA2MjAwMEUzMDQyMDBGRjE0NDYwMDIzMzQ2MjAwODAwQgotOjEwNDFCMDAwOTA0MjAwMjYzMDQyMDBGRjE0NDYwMDFGMDAwMDAwMDAxRAotOjEwNDFDMDAwOTA2MjAwMEYzMDQyMDBGRjE0NDYwMDFCMDAwMDAwMDAwOAotOjEwNDFEMDAwOTA2MjAwMEEzMDQyMDBGRjE0NDYwMDAzOEY5MEZGOTQ2MwotOjEwNDFFMDAwMDAwMDAwMEQ4RjkwRkY5NDhGODJGRjk4M0MxMTgwMDA5QgotOjEwNDFGMDAwQUUwNTAwM0NBQzQ1MDAwMEEwNjYwMDBBMEUwMDAzMzI4QwotOjEwNDIwMDAwOEUyNDAxMDBBMjAwMDAyNDBFMDAwMzNEOEUyNDAxMDAzNAotOjEwNDIxMDAwM0MwMzgwMDA4QzYyMDFGODA0NDBGRkZFMjQwMjAwMDI4RgotOjEwNDIyMDAwQUM3MjAxQzBBMDYyMDFDNDNDMDIxMDAwQUM2MjAxRjg5MwotOjEwNDIzMDAwMEEwMDEwNjE4RkJGMDAxQzAwMDAwMDAwMDAwMDAwMEQ4QwotOjEwNDI0MDAwMDAwMDAwMDAyNDAwMDEzRjhGQkYwMDFDOEZCMjAwMTg0NwotOjEwNDI1MDAwOEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjBDQwotOjEwNDI2MDAwOEY4M0ZGOTQzQzAyODAwMDhDNDQwMTAwMzQ0MjAxMDBBMwotOjEwNDI3MDAwOEM2NTAwM0M5MDQ2MDAxQjBBMDAxMDI3MjQwNzAwMDFCMwotOjEwNDI4MDAwM0MwMjgwMDg5MDQzMDAwRTkwNDIwMDBBMDA0MzEwMjYzMgotOjEwNDI5MDAwMzA0MjAwRkYwM0UwMDAwODAwMDIxMDJCMjdCREZGRTBDMgotOjEwNDJBMDAwM0MwMjgwMDhBRkIxMDAxNEFGQjAwMDEwQUZCRjAwMThERgotOjEwNDJCMDAwMzQ1MDAwODA5MjAyMDAwNTI0MDMwMDMwMzA0MjAwMzA2OAotOjEwNDJDMDAwMTQ0MzAwODUwMDgwODgyMThGODIwMDI0OEM0MjAwMENEQQotOjEwNDJEMDAwMTA0MDAwODI4RkJGMDAxODBFMDAwRDg0MDAwMDAwMDAwNwotOjEwNDJFMDAwOEY4NjAwMjBBQ0QxMDAwMDkyMDIwMDA4OTIwMzAwMDlFMgotOjEwNDJGMDAwMzA0MjAwRkYwMDAyMTIwMDMwNjMwMEZGMDA0MzEwMjUyRgotOjEwNDMwMDAwQUNDMjAwMDQ5MjAyMDA0RDAwMDIxNjAwMDAwMjE2MDMyNwotOjEwNDMxMDAwMDQ0MTAwMDUwMDAwMDAwMDNDMDMwODAwOEM2MzAwNDhENQotOjEwNDMyMDAwMEEwMDEwOUYzQzEwODAwODkyMDIwMDA4MzA0MjAwNDBCMgotOjEwNDMzMDAwMTQ0MDAwMDMwMDAwMTgyMTkyMDIwMDI3MzA0MzAwRkZDMAotOjEwNDM0MDAwM0MxMDgwMDgzNjExMDA4MDkyMjIwMDREMDAwMzFFMDBCMAotOjEwNDM1MDAwMzA0MjAwRkYwMDAyMTQwMDAwNjIxODI1QUNDMzAwMDhDMAotOjEwNDM2MDAwOEUyNDAwMzA4RjgyMDAyNEFDQzQwMDBDOEUyNTAwMzREMwotOjEwNDM3MDAwOTQ0MzAwMUUzQzAyQzAwQkFDQzUwMDEwMDA2MjE4MjUxRgotOjEwNDM4MDAwOEUyMjAwMzgwMDAwMjAyMUFDQzIwMDE0OEUyMjAwM0M5NgotOjEwNDM5MDAwQUNDMjAwMTgwRTAwMERCOEFDQzMwMDFDOEUwMjAwMDRBNQotOjEwNDNBMDAwOEY4NDAwMjAzQzA1ODAwMEFDODIwMDAwOEUyMjAwMjAxQgotOjEwNDNCMDAwQUM4MjAwMDQ4RTIyMDAxQ0FDODIwMDA4OEUyMjAwNThDMQotOjEwNDNDMDAwOENBMzAwNzQwMDQzMTAyMUFDODIwMDBDOEUyMjAwMkNDMAotOjEwNDNEMDAwQUM4MjAwMTA4RTIyMDA0MDhFMjMwMDQ0MDAwMjE0MDBBNAotOjEwNDNFMDAwMDA0MzEwMjVBQzgyMDAxNDkyMjIwMDREMjQwMzAwODA2QgotOjEwNDNGMDAwMzA0MjAwRkYxNDQzMDAwNDAwMDAwMDAwQUM4MDAwMThBRAotOjEwNDQwMDAwMEEwMDEwRTM4RjgyMDAyNDhFMjMwMDBDMjQwMjAwMDE5NgotOjEwNDQxMDAwMTA2MjAwMEUyNDAyRkZGRjkyMjIwMDA4MzA0MjAwNDA4QQotOjEwNDQyMDAwMTQ0MDAwMEEyNDAyRkZGRjhFMjMwMDBDOENBMjAwNzRBQgotOjEwNDQzMDAwMDA2MjE4MjMzQzAyMDgwMDAwNjIxMDI0MTQ0MDAwMDJBRAotOjEwNDQ0MDAwMDAwMDI4MjEwMDYwMjgyMTAwMDUxMDQzQUM4MjAwMThEQwotOjEwNDQ1MDAwOEY4MjAwMjQwMDAwMjAyMTk0NDMwMDFFM0MwMkMwMENFNwotOjEwNDQ2MDAwMDA2MjE4MjU4RjgyMDAyMDBFMDAwREI4QUM0MzAwMUM5RQotOjEwNDQ3MDAwM0MwMzgwMDgzNDYyMDEwMDhDNDIwMDAwOEY4NTAwMjBEQwotOjEwNDQ4MDAwMzQ2MzAwODA4RkJGMDAxOEFDQTIwMDAwQUNBMDAwMDQxMQotOjEwNDQ5MDAwOEM2NDAwNDg4RjgyMDAyNDhGQjEwMDE0QUNBNDAwMDgwMwotOjEwNDRBMDAwQUNBMDAwMENBQ0EwMDAxMDkwNjMwMDA1OTQ0NjAwMUU2OAotOjEwNDRCMDAwM0MwMjQwMEQwMDAzMUUwMDAwQzIzMDI1QUNBMzAwMTRENgotOjEwNDRDMDAwOEZCMDAwMTBBQ0EwMDAxODI0MDQwMDAxQUNBNjAwMUNBMgotOjEwNDREMDAwMEEwMDBEQjgyN0JEMDAyMDhGQkYwMDE4OEZCMTAwMTQ0RgotOjEwNDRFMDAwOEZCMDAwMTAwM0UwMDAwODI3QkQwMDIwM0MwMjgwMDBEMAotOjEwNDRGMDAwOTQ0MzAwN0MzQzAyODAwODM0NDYwMTAwMzA4NDAwRkY3NQotOjEwNDUwMDAwMzA2NUZGRkYyNDAyMDAwNTI0QTM0NjUwQTBDNDAwMEMyMAotOjEwNDUxMDAwNTQ4MjAwMEMzMDY1RkZGRjkwQzIwMDBEMkM0MjAwMDc1MgotOjEwNDUyMDAwMTA0MDAwMDcyNEEzMEEwMDkwQzMwMDBEMjQwMjAwMTRDOQotOjEwNDUzMDAwMDA2MjEwMDQwMEEyMTAyMTBBMDAxMTFGMzA0NUZGRkY4NQotOjEwNDU0MDAwMzA2NUZGRkYzQzAyODAwODM0NDIwMDgwMDNFMDAwMDgzMQotOjEwNDU1MDAwQTQ0NTAwMTQzQzAzODAwODM0NjgwMDgwQUQwNTAwMzg5MQotOjEwNDU2MDAwMzQ2NzAxMDA4Q0UyMDAxQzMwODQwMEZGMDBBMjEwMjM5RAotOjEwNDU3MDAwMTg0MDAwMDMzMEM2MDBGRjI0QTJGRkZDQUNFMjAwMUM4MAotOjEwNDU4MDAwMzA4MjAwMDE1MDQwMDAwODNDMDM4MDA4OEQwMjAwM0M0RQotOjEwNDU5MDAwMDBBMjEwMjMwNDQxMDAxMjI0MDQwMDA1OEM2MjAwMDREMAotOjEwNDVBMDAwMTBBMjAwMEYzQzAzODAwODhDNjIwMDA0MTRBMjAwMUVCRAotOjEwNDVCMDAwMDAwMDAwMDAzQzAyMDgwMDhDNDIwMEQ4MzA0MjAwMjA3RAotOjEwNDVDMDAwMTA0MDAwMDkzQzAyODAwODM0NjIwMDgwOTA2MzAwMDhCQgotOjEwNDVEMDAwOTA0MjAwNEMxNDQzMDAwNDNDMDI4MDA4MjQwNDAwMDQ3MAotOjEwNDVFMDAwMEEwMDExMDkwMDAwMDAwMDM0NDMwMDgwMzQ0MjAxMDAzOQotOjEwNDVGMDAwQTA0MDAwMEMyNDAyMDAwMUE0NjIwMDE0MTBDMDAwMEFCNAotOjEwNDYwMDAwM0MwMjgwMDA4QzQ0MDEwMDNDMDM4MDAwOEM2MjAxRjg3NQotOjEwNDYxMDAwMDQ0MEZGRkUyNDAyMDAwMkFDNjQwMUMwQTA2MjAxQzQ5OQotOjEwNDYyMDAwM0MwMjEwMDBBQzYyMDFGODAzRTAwMDA4MDAwMDAwMDA0QQotOjEwNDYzMDAwMjdCREZGRTgwMEE2MTgyM0FGQkYwMDEwMTg2MDAwODA1OAotOjEwNDY0MDAwMzA4ODAwRkYzQzAyODAwODM0NDcwMDgwQTBFMDAwMjQ0RQotOjEwNDY1MDAwMzQ0NDAxMDBBMEUwMDAyNzhDODIwMDFDMDBBMjEwMjMzQgotOjEwNDY2MDAwMDQ0MDAwNTYwMDAwMDAwMDhDRTIwMDNDOTRFMzAwNUMzMwotOjEwNDY3MDAwOENFNDAwMkMwMDQ1MzAyMzMwNjNGRkZGMDBDMzE4MjE3OQotOjEwNDY4MDAwMDA4MzIwMkIxMDgwMDAwNDAwRTAxODIxOENFMjAwMkMxNQotOjEwNDY5MDAwMEEwMDExNzgwMEEyMTAyMTk0RTIwMDVDMzA0MkZGRkY3MgotOjEwNDZBMDAwMDBDMjEwMjEwMEEyMTAyMUFDNjIwMDFDM0MwMjgwMDg1NAotOjEwNDZCMDAwMzQ0NDAwODA5NDgyMDA1QzhDODMwMDFDMzA0MkZGRkZGNQotOjEwNDZDMDAwMDAwMjEwNDAwMEEyMTAyMTAwNDMxMDJCMTA0MDAwMDRGMwotOjEwNDZEMDAwMDAwMDAwMDA4QzgyMDAxQzBBMDAxMThCM0MwNjgwMDg0MAotOjEwNDZFMDAwOTQ4MjAwNUMzMDQyRkZGRjAwMDIxMDQwMDBBMjEwMjFDMwotOjEwNDZGMDAwM0MwNjgwMDgzNEMzMDEwMDM0QzcwMDgwQUM4MjAwMUMzMwotOjEwNDcwMDAwQTA2MDAwMENBQ0U1MDAzODhDNjIwMDFDMDBBMjEwMjNGNQotOjEwNDcxMDAwMTg0MDAwMDIyNEEyRkZGQ0FDNjIwMDFDMzEwMjAwMDEyMAotOjEwNDcyMDAwMTA0MDAwMDgzQzAzODAwODhDRTIwMDNDMDBBMjEwMjNFQgotOjEwNDczMDAwMDQ0MTAwMTIyNDA0MDAwNThDQzIwMDA0MTBBMjAwMTBFMQotOjEwNDc0MDAwOEZCRjAwMTA4QzYyMDAwNDE0QTIwMDRGOEZCRjAwMTBCNgotOjEwNDc1MDAwM0MwMjA4MDA4QzQyMDBEODMwNDIwMDIwMTA0MDAwMEE4MQotOjEwNDc2MDAwM0MwMjgwMDgzNDYyMDA4MDkwNjMwMDA4OTA0MjAwNEM1NAotOjEwNDc3MDAwMTQ0MzAwMDUzQzAyODAwODI0MDQwMDA0OEZCRjAwMTA4RAotOjEwNDc4MDAwMEEwMDExMDkyN0JEMDAxODM0NDMwMDgwMzQ0MjAxMDA5QgotOjEwNDc5MDAwQTA0MDAwMEMyNDAyMDAwMUE0NjIwMDE0M0MwMjgwMDAyRQotOjEwNDdBMDAwOEM0NDAxMDAzQzAzODAwMDhDNjIwMUY4MDQ0MEZGRkU1MQotOjEwNDdCMDAwMjQwMjAwMDIwQTAwMTFEODAwMDAwMDAwOENFMjAwMUM1NAotOjEwNDdDMDAwMDA0NjEwMjMwMDQzMTAyQjU0NDAwMDAxQUNFNTAwMUNCMAotOjEwNDdEMDAwOTRFMjAwNUMzMDQyRkZGRjAwNjIxMDJCMTQ0MDAwMDc5RgotOjEwNDdFMDAwMjQwMjAwMDI5NEUyMDA1QzhDRTMwMDFDMzA0MkZGRkZENAotOjEwNDdGMDAwMDA2MjE4MjFBQ0UzMDAxQzI0MDIwMDAyQUNFNTAwMzg4MgotOjEwNDgwMDAwMEUwMDBGNUVBMDgyMDAwQzEwNDAwMDFGOEZCRjAwMTAzMgotOjEwNDgxMDAwM0MwMjgwMDA4QzQ0MDEwMDNDMDM4MDAwOEM2MjAxRjg2MwotOjEwNDgyMDAwMDQ0MEZGRkUyNDAyMDAwMkFDNjQwMUMwQTA2MjAxQzQ4NwotOjEwNDgzMDAwM0MwMjEwMDBBQzYyMDFGODBBMDAxMUYwOEZCRjAwMTBCQQotOjEwNDg0MDAwMzEwMjAwMTAxMDQwMDAxMDhGQkYwMDEwM0MwMjgwMDhBMQotOjEwNDg1MDAwMzQ0NTAwODA4Q0EzMDAxQzk0QTIwMDVDMDA2NjE4MjNFMQotOjEwNDg2MDAwMzA0MkZGRkYwMDYyMTgyMTNDMDIzRkZGMzQ0NEZGRkY0QgotOjEwNDg3MDAwMDA4MzEwMkI1NDQwMDAwMTAwODAxODIxMDBDMzEwMjEzOAotOjEwNDg4MDAwQUNBMjAwMUM4RkJGMDAxMDAzRTAwMDA4MjdCRDAwMTg3OQotOjEwNDg5MDAwMjdCREZGRTgwMEMwNDAyMTAwQTYzMDIzQUZCRjAwMTBCNQotOjEwNDhBMDAwMThDMDAwMjYzMDhBMDBGRjNDMDI4MDA4MzQ0OTAwODA4RQotOjEwNDhCMDAwOEQyNDAwMUM4RDIzMDAyQzAwODgyMDIzMDA2NDE4MkJERAotOjEwNDhDMDAwMTA2MDAwMEYzNDQ3MDEwMDhDRTIwMDIwMDA0NjEwMjFFOAotOjEwNDhEMDAwQUNFMjAwMjA4Q0UyMDAyMDAwNDQxMDJCMTQ0MDAwMEJCRQotOjEwNDhFMDAwM0MwMjNGRkY4Q0UyMDAyMDAwNDQxMDIzQUNFMjAwMjA5OQotOjEwNDhGMDAwOTUyMjAwNUMzMDQyRkZGRjBBMDAxMjEwMDA4MjIwMjE0NgotOjEwNDkwMDAwQUNFMDAwMjAwMDg2MjAyMTNDMDIzRkZGMzQ0M0ZGRkY0MwotOjEwNDkxMDAwMDA2NDEwMkI1NDQwMDAwMTAwNjAyMDIxM0MwMjgwMDhGQwotOjEwNDkyMDAwMzQ0MjAwODAwMDg1MTgyMUFDNDMwMDFDQTA0MDAwMjRDNAotOjEwNDkzMDAwQTA0MDAwMjcwQTAwMTI2MjNDMDM4MDA4MzE0MjAwMTBBOAotOjEwNDk0MDAwMTA0MDAwNDMzQzAzODAwODNDMDY4MDA4MzRDNDAwODBDQgotOjEwNDk1MDAwOEM4MjAwM0MwMDQ4MTAyMzU4NDAwMDNFMzQ2NjAwODBBMgotOjEwNDk2MDAwOTA4MjAwMjQyNDQyMDAwMUEwODIwMDI0OTA4MjAwMjQyRQotOjEwNDk3MDAwM0MwMzA4MDA4QzYzMDAyNDMwNDIwMEZGMDA0MzEwMkJFRQotOjEwNDk4MDAwMTQ0MDAwNjg4RkJGMDAxMDM0QzIwMTAwOEM0MjAwMUMyQwotOjEwNDk5MDAwMDBBMjEwMjMxODQwMDA2MzAwMDAwMDAwOENDMzAwMDQzNAotOjEwNDlBMDAwOTQ4MjAwNUMwMDY4MTgyMzMwNDJGRkZGMDAwMzE4NDMyNAotOjEwNDlCMDAwMDAwMjEwNDAwMDQzMTAyQTEwNDAwMDA1MDAwMDAwMDBEMwotOjEwNDlDMDAwOENDMjAwMDQwMDQ4MTAyMzBBMDAxMjQ1MDAwMjEwNDM2NAotOjEwNDlEMDAwOTQ4MjAwNUMzMDQyRkZGRjAwMDIxMDQwM0MwNjgwMDhEOQotOjEwNDlFMDAwQUM4MjAwMkMzNEM1MDA4MDk0QTIwMDVDOENBNDAwMkMwNgotOjEwNDlGMDAwOTRBMzAwNUMzMDQyRkZGRjAwMDIxMDQwMDA4MjIwMjE5RgotOjEwNEEwMDAwMzA2M0ZGRkYwMDgzMjAyMTAxMDQxMDIxQUNBMjAwMUNCMQotOjEwNEExMDAwOENDMjAwMDQzNEM2MDEwMEFDQzIwMDFDMjQwMjAwMDI5NwotOjEwNEEyMDAwMEUwMDBGNUVBMEMyMDAwQzEwNDAwMDNFOEZCRjAwMTBCMQotOjEwNEEzMDAwM0MwMjgwMDA4QzQ0MDEwMDNDMDM4MDAwOEM2MjAxRjg0MQotOjEwNEE0MDAwMDQ0MEZGRkUyNDAyMDAwMjBBMDAxMjkyMDAwMDAwMDA0RgotOjEwNEE1MDAwMzQ2NjAwODBBQ0M1MDAzODM0NjQwMTAwOEM4MjAwMUNEMAotOjEwNEE2MDAwMDBBMjEwMjMxODQwMDAwMjI0QTJGRkZDQUM4MjAwMUMwQwotOjEwNEE3MDAwMzE0MjAwMDE1MDQwMDAwQTNDMDM4MDA4OENDMjAwM0NENwotOjEwNEE4MDAwMDBBMjEwMjMwNDQzMDAxNDI0MDQwMDA1OEM2MjAwMDRENwotOjEwNEE5MDAwMTRBMjAwMDMzQzAzODAwODBBMDAxMjg0MjQwNDAwMDVDOQotOjEwNEFBMDAwOEM2MjAwMDQxNEEyMDAxRjhGQkYwMDEwM0MwMjA4MDA5QgotOjEwNEFCMDAwOEM0MjAwRDgzMDQyMDAyMDEwNDAwMDBBM0MwMjgwMDg5RQotOjEwNEFDMDAwMzQ2MjAwODA5MDYzMDAwODkwNDIwMDRDMTQ0MzAwMDU1QgotOjEwNEFEMDAwM0MwMjgwMDgyNDA0MDAwNDhGQkYwMDEwMEEwMDExMDk2MgotOjEwNEFFMDAwMjdCRDAwMTgzNDQzMDA4MDM0NDIwMTAwQTA0MDAwMEM3MAotOjEwNEFGMDAwMjQwMjAwMDFBNDYyMDAxNDNDMDI4MDAwOEM0NDAxMDBFNgotOjEwNEIwMDAwM0MwMzgwMDA4QzYyMDFGODA0NDBGRkZFMjQwMjAwMDI5NgotOjEwNEIxMDAwQUM2NDAxQzBBMDYyMDFDNDNDMDIxMDAwQUM2MjAxRjhBOAotOjEwNEIyMDAwOEZCRjAwMTAwM0UwMDAwODI3QkQwMDE4MjdCREZGRTg3NQotOjEwNEIzMDAwM0MwQTgwMDhBRkJGMDAxMDM1NDkwMDgwOEQyMjAwM0M0MAotOjEwNEI0MDAwMDBDMDQwMjEzMDg0MDBGRjAwNDYxMDIzMTg0MDAwOUQyMwotOjEwNEI1MDAwMzBFNzAwRkYzNTQ3MDEwMDI0MDIwMDAxMDBBNjMwMjNBMgotOjEwNEI2MDAwQTBFMDAwMENBMEUwMDAwREE1MjIwMDE0MThDMDAwMjQ1NQotOjEwNEI3MDAwMzA4MjAwMTA4RDIzMDAxQzhEMjIwMDJDMDA2ODE4MjMyOQotOjEwNEI4MDAwMDA0MzEwMkIxMDQwMDAwRjAwMDAwMDAwOENFMjAwMjBCQQotOjEwNEI5MDAwMDA0NjEwMjFBQ0UyMDAyMDhDRTIwMDIwMDA0MzEwMkJFNAotOjEwNEJBMDAwMTQ0MDAwMEIzQzAyM0ZGRjhDRTIwMDIwMDA0MzEwMjMyNgotOjEwNEJCMDAwQUNFMjAwMjA5NTIyMDA1QzMwNDJGRkZGMEEwMDEyQzFFNwotOjEwNEJDMDAwMDA2MjE4MjFBQ0UwMDAyMDAwNjYxODIxM0MwMjNGRkY4MwotOjEwNEJEMDAwMzQ0NkZGRkYwMEMzMTAyQjU0NDAwMDAxMDBDMDE4MjFEMQotOjEwNEJFMDAwM0MwMjgwMDgzNDQyMDA4MDAwNjUxODIxQUM0MzAwMUM2MAotOjEwNEJGMDAwQTA0MDAwMjRBMDQwMDAyNzBBMDAxMzBGM0MwMzgwMDhCNwotOjEwNEMwMDAwMTA0MDAwNDAzQzAzODAwODhEMjIwMDNDMDA0ODEwMjNFNwotOjEwNEMxMDAwNTg0MDAwM0QzNDY3MDA4MDkxMjIwMDI0MjQ0MjAwMDE2NgotOjEwNEMyMDAwQTEyMjAwMjQ5MTIyMDAyNDNDMDMwODAwOEM2MzAwMjQ2QwotOjEwNEMzMDAwMzA0MjAwRkYwMDQzMTAyQjE0NDAwMDlBOEZCRjAwMTAzOQotOjEwNEM0MDAwOENFMjAwMUMwMEEyMTAyMzE4NDAwMDk2MDAwMDAwMDAxNwotOjEwNEM1MDAwOEQ0MzAwMDQ5NTIyMDA1QzAwNjgxODIzMzA0MkZGRkY1QQotOjEwNEM2MDAwMDAwMzE4NDMwMDAyMTA0MDAwNDMxMDJBMTA0MDAwMDVDMgotOjEwNEM3MDAwMDEyMDIwMjE4RDQyMDAwNDAwNDgxMDIzMEEwMDEyRjI3NgotOjEwNEM4MDAwMDAwMjEwNDM5NTIyMDA1QzMwNDJGRkZGMDAwMjEwNDBGQQotOjEwNEM5MDAwM0MwNjgwMDhBQzgyMDAyQzM0QzUwMDgwOTRBMjAwNUNFNQotOjEwNENBMDAwOENBNDAwMkM5NEEzMDA1QzMwNDJGRkZGMDAwMjEwNDA1MwotOjEwNENCMDAwMDA4MjIwMjEzMDYzRkZGRjAwODMxODIxMDEwMzEwMjFBRgotOjEwNENDMDAwQUNBMjAwMUM4Q0MyMDAwNDM0QzYwMTAwQUNDMjAwMUNBMwotOjEwNENEMDAwMjQwMjAwMDIwRTAwMEY1RUEwQzIwMDBDMTA0MDAwNzEwMgotOjEwNENFMDAwOEZCRjAwMTAzQzAyODAwMDhDNDQwMTAwM0MwMzgwMDAxOAotOjEwNENGMDAwOEM2MjAxRjgwNDQwRkZGRTI0MDIwMDAyMEEwMDEzMzkwRQotOjEwNEQwMDAwMDAwMDAwMDAzNDY3MDA4MEFDRTUwMDM4MzQ2NjAxMDAyNAotOjEwNEQxMDAwOENDMjAwMUMwMEEyMTAyMzE4NDAwMDAyMjRBMkZGRkMzOQotOjEwNEQyMDAwQUNDMjAwMUMzMDgyMDAwMTUwNDAwMDA4M0MwMzgwMDhFNwotOjEwNEQzMDAwOENFMjAwM0MwMEEyMTAyMzA0NDMwMDUxMjQwNDAwMDUyRgotOjEwNEQ0MDAwOEM2MjAwMDQxMEEyMDAzRTNDMDM4MDA4OEM2MjAwMDRDOAotOjEwNEQ1MDAwNTRBMjAwNTQ4RkJGMDAxMDNDMDIwODAwOEM0MjAwRDhCRgotOjEwNEQ2MDAwMzA0MjAwMjAxMDQwMDAwNjNDMDI4MDA4MzQ2MjAwODA3RgotOjEwNEQ3MDAwOTA2MzAwMDg5MDQyMDA0QzEwNDMwMDQwM0MwMjgwMDhDMQotOjEwNEQ4MDAwMzQ0MzAwODAzNDQyMDEwMEEwNDAwMDBDMjQwMjAwMDFBMgotOjEwNEQ5MDAwQTQ2MjAwMTQzQzAyODAwMDhDNDQwMTAwM0MwMzgwMDBBQgotOjEwNERBMDAwOEM2MjAxRjgwNDQwRkZGRTI0MDIwMDAyQUM2NDAxQzBFMgotOjEwNERCMDAwQTA2MjAxQzQzQzAyMTAwMEFDNjIwMUY4MEEwMDEzNzc0MwotOjEwNERDMDAwOEZCRjAwMTAyNDAyMDAwNUExMjAwMDI3MTRFMjAwMEE3MgotOjEwNEREMDAwM0MwMzgwMDgzNTQzMDEwMDkwNjIwMDBEMkM0MjAwMDYyMAotOjEwNERFMDAwNTA0MDAwMDUzQzAzODAwODkwNjIwMDBEMjQ0MjAwMDEwMQotOjEwNERGMDAwQTA2MjAwMEQzQzAzODAwODM0NjcwMDgwQUNFNTAwMzhGOQotOjEwNEUwMDAwMzQ2NjAxMDA4Q0MyMDAxQzAwQTIxMDIzMTg0MDAwMDI2RQotOjEwNEUxMDAwMjRBMkZGRkNBQ0MyMDAxQzMwODIwMDAxNTA0MDAwMEFGQQotOjEwNEUyMDAwM0MwMzgwMDg4Q0UyMDAzQzAwQTIxMDIzMDQ0MTAwMTRFMwotOjEwNEUzMDAwMjQwNDAwMDU4QzYyMDAwNDE0QTIwMDAzM0MwMzgwMDhEMwotOjEwNEU0MDAwMEEwMDEzNkUyNDA0MDAwNThDNjIwMDA0MTRBMjAwMTVFRAotOjEwNEU1MDAwOEZCRjAwMTAzQzAyMDgwMDhDNDIwMEQ4MzA0MjAwMjA3NgotOjEwNEU2MDAwMTA0MDAwMEEzQzAyODAwODM0NjIwMDgwOTA2MzAwMDgxMQotOjEwNEU3MDAwOTA0MjAwNEMxNDQzMDAwNTNDMDI4MDA4MjQwNDAwMDRDNgotOjEwNEU4MDAwOEZCRjAwMTAwQTAwMTEwOTI3QkQwMDE4MzQ0MzAwODBBRAotOjEwNEU5MDAwMzQ0MjAxMDBBMDQwMDAwQzI0MDIwMDAxQTQ2MjAwMTQ2RQotOjEwNEVBMDAwOEZCRjAwMTAwM0UwMDAwODI3QkQwMDE4M0MwQjgwMDhFRQotOjEwNEVCMDAwMjdCREZGRTgzQzAyODAwMEFGQkYwMDEwMzQ0MjAxMDA3NAotOjEwNEVDMDAwMzU2QTAwODA5MDQ0MDAwQTM1NjkwMTAwOEM0NTAwMTQ2MQotOjEwNEVEMDAwOEQ0ODAwMzg5MTIzMDAwQzMwODQwMEZGMDEwNTEwMjMxOQotOjEwNEVFMDAwMUM0MDAwQjMzMDY3MDBGRjJDRTIwMDA2NTA0MDAwQjFDOAotOjEwNEVGMDAwOEZCRjAwMTAyNDAyMDAwMTAwRTIzMDA0MzBDMjAwMDMyMgotOjEwNEYwMDAwNTQ0MDAwMDgwMEE4MzAyMzMwQzIwMDBDMTQ0MDAwQTExNwotOjEwNEYxMDAwMzBDMjAwMzAxNDQwMDBBMzhGQkYwMDEwMEEwMDE0M0JDMQotOjEwNEYyMDAwMDAwMDAwMDAxOEMwMDAyNDMwODIwMDEwOEQ0MzAwMUNENwotOjEwNEYzMDAwOEQ0MjAwMkMwMDY4MTgyMzAwNDMxMDJCMTA0MDAwMEZGNgotOjEwNEY0MDAwMDAwMDAwMDA4RDIyMDAyMDAwNDYxMDIxQUQyMjAwMjAyQwotOjEwNEY1MDAwOEQyMjAwMjAwMDQzMTAyQjE0NDAwMDBCM0MwMjNGRkYyOQotOjEwNEY2MDAwOEQyMjAwMjAwMDQzMTAyM0FEMjIwMDIwOTU0MjAwNUNEQQotOjEwNEY3MDAwMzA0MkZGRkYwQTAwMTNBRjAwNjIxODIxQUQyMDAwMjA2RAotOjEwNEY4MDAwMDA2NjE4MjEzQzAyM0ZGRjM0NDZGRkZGMDBDMzEwMkI5MAotOjEwNEY5MDAwNTQ0MDAwMDEwMEMwMTgyMTNDMDI4MDA4MzQ0MjAwODBDNwotOjEwNEZBMDAwMDA2NTE4MjFBQzQzMDAxQ0EwNDAwMDI0QTA0MDAwMjc0RAotOjEwNEZCMDAwMEEwMDEzRkQzQzAzODAwODEwNDAwMDQwM0MwMzgwMDhCOQotOjEwNEZDMDAwOEQ0MjAwM0MwMDQ4MTAyMzE4NDAwMDNEMzQ2NzAwODBBQgotOjEwNEZEMDAwOTE0MjAwMjQyNDQyMDAwMUExNDIwMDI0OTE0MjAwMjQ3NQotOjEwNEZFMDAwM0MwMzA4MDA4QzYzMDAyNDMwNDIwMEZGMDA0MzEwMkI3OAotOjEwNEZGMDAwMTQ0MDAwNzA4RkJGMDAxMDhEMjIwMDFDMDBBMjEwMjNFRgotOjEwNTAwMDAwMTg0MDAwNkMwMDAwMDAwMDhENjMwMDA0OTU0MjAwNUNCNQotOjEwNTAxMDAwMDA2ODE4MjMzMDQyRkZGRjAwMDMxODQzMDAwMjEwNDBDRAotOjEwNTAyMDAwMDA0MzEwMkExMDQwMDAwNTAxNDAyMDIxOEQ2MjAwMDQzOQotOjEwNTAzMDAwMDA0ODEwMjMwQTAwMTNFMDAwMDIxMDQzOTU0MjAwNUM3MAotOjEwNTA0MDAwMzA0MkZGRkYwMDAyMTA0MDNDMDY4MDA4QUM4MjAwMkM3QQotOjEwNTA1MDAwMzRDNTAwODA5NEEyMDA1QzhDQTQwMDJDOTRBMzAwNUM1NgotOjEwNTA2MDAwMzA0MkZGRkYwMDAyMTA0MDAwODIyMDIxMzA2M0ZGRkYyQQotOjEwNTA3MDAwMDA4MzE4MjEwMTAzMTAyMUFDQTIwMDFDOENDMjAwMDQ4MwotOjEwNTA4MDAwMzRDNjAxMDBBQ0MyMDAxQzI0MDIwMDAyMEUwMDBGNUVGOAotOjEwNTA5MDAwQTBDMjAwMEMxMDQwMDA0NzhGQkYwMDEwM0MwMjgwMDBFRgotOjEwNTBBMDAwOEM0NDAxMDAzQzAzODAwMDhDNjIwMUY4MDQ0MEZGRkU0OAotOjEwNTBCMDAwMjQwMjAwMDIwQTAwMTQyRDAwMDAwMDAwMzQ2NzAwODA2MgotOjEwNTBDMDAwQUNFNTAwMzgzNDY2MDEwMDhDQzIwMDFDMDBBMjEwMjMzRAotOjEwNTBEMDAwMTg0MDAwMDIyNEEyRkZGQ0FDQzIwMDFDMzA4MjAwMDE3OAotOjEwNTBFMDAwNTA0MDAwMEEzQzAzODAwODhDRTIwMDNDMDBBMjEwMjNFMAotOjEwNTBGMDAwMDQ0MzAwMTQyNDA0MDAwNThDNjIwMDA0MTRBMjAwMDM3RAotOjEwNTEwMDAwM0MwMzgwMDgwQTAwMTQxRjI0MDQwMDA1OEM2MjAwMDQ3QwotOjEwNTExMDAwMTRBMjAwMjg4RkJGMDAxMDNDMDIwODAwOEM0MjAwRDg2NwotOjEwNTEyMDAwMzA0MjAwMjAxMDQwMDAwQTNDMDI4MDA4MzQ2MjAwODBCNwotOjEwNTEzMDAwOTA2MzAwMDg5MDQyMDA0QzE0NDMwMDA1M0MwMjgwMDgzNAotOjEwNTE0MDAwMjQwNDAwMDQ4RkJGMDAxMDBBMDAxMTA5MjdCRDAwMThCNQotOjEwNTE1MDAwMzQ0MzAwODAzNDQyMDEwMEEwNDAwMDBDMjQwMjAwMDFDRQotOjEwNTE2MDAwQTQ2MjAwMTQzQzAyODAwMDhDNDQwMTAwM0MwMzgwMDBENwotOjEwNTE3MDAwOEM2MjAxRjgwNDQwRkZGRTI0MDIwMDAyQUM2NDAxQzAwRQotOjEwNTE4MDAwQTA2MjAxQzQzQzAyMTAwMEFDNjIwMUY4MEEwMDE0M0JBQQotOjEwNTE5MDAwOEZCRjAwMTA4RkJGMDAxMDAxMDAzMDIxMEEwMDExNUE4QwotOjEwNTFBMDAwMjdCRDAwMTgwMTAwMzAyMTBBMDAxMjk5MjdCRDAwMTgwMAotOjEwNTFCMDAwOEZCRjAwMTAwM0UwMDAwODI3QkQwMDE4M0MwMzgwMDhFMwotOjEwNTFDMDAwMzQ2NDAxMDAyNDAyMDAwM0EwODIwMDBDOEM2MjAwMDRGRAotOjEwNTFEMDAwMDNFMDAwMDhBQzgyMDAxQzNDMDU4MDA4MzRBMzAwODA3QQotOjEwNTFFMDAwOTA2MjAwMjczNEE1MDEwMDI0MDYwMDQzMjQ0MjAwMDFGOAotOjEwNTFGMDAwQTA2MjAwMjc5MDYzMDAyNzNDMDIwODAwOEM0MjAwNDgxMAotOjEwNTIwMDAwMzA2MzAwRkYxNDYyMDAwNDNDMDc2MDIxOTRBNTAwRUFBQgotOjEwNTIxMDAwMEEwMDA5MDEzMEE1RkZGRjAzRTAwMDA4MDAwMDAwMDBCQwotOjEwNTIyMDAwMjdCREZGRThBRkJGMDAxMDNDMDI4MDAwMEUwMDE0NDQxMQotOjEwNTIzMDAwOEM0NDAxODAzQzAyODAwODM0NDMwMTAwQTA2MDAwMENEMwotOjEwNTI0MDAwOEM0MjAwMDQ4RkJGMDAxMDI3QkQwMDE4MDNFMDAwMDg0NwotOjEwNTI1MDAwQUM2MjAwMUMyN0JERkZFMDNDMDI4MDA4QUZCRjAwMTgxNQotOjEwNTI2MDAwQUZCMTAwMTRBRkIwMDAxMDM0NDUwMDgwMzQ0NjAxMDBFNwotOjEwNTI3MDAwM0MwODgwMDA4RDA5MDE0MDkwQzMwMDBDOENBNDAwM0NDOAotOjEwNTI4MDAwOENBMjAwMzgxNDgyMDAzQjMwNjcwMEZGOTUwMjAwN0MzRQotOjEwNTI5MDAwOTBBMzAwMjcxNDYwMDAwOTMwNDVGRkZGMjQwMjAwMDU5OQotOjEwNTJBMDAwNTRFMjAwMDgzQzA0ODAwODkwQzIwMDBEMjQ0MjAwMDEzMgotOjEwNTJCMDAwQTBDMjAwMEQwQTAwMTQ3RjNDMDQ4MDA4QTBDMDAwMERBRAotOjEwNTJDMDAwM0MwNDgwMDgzNDgyMDEwMDkwNDIwMDBDMjQwMzAwMDU1NQotOjEwNTJEMDAwMzA0MjAwRkYxNDQzMDAwQTI0QTIwNURDMzQ4MzAwODAxRQotOjEwNTJFMDAwOTA2MjAwMjcyQzQyMDAwNzUwNDAwMDA1MjRBMjBBMDBDQgotOjEwNTJGMDAwOTA2MzAwMjcyNDAyMDAxNDAwNjIxMDA0MDBBMjEwMjExMQotOjEwNTMwMDAwM0MxMDgwMDgzNjEwMDA4MDMwNDVGRkZGMDEyMDIwMjEyRQotOjEwNTMxMDAwMEUwMDE0NDRBNjA1MDAxNDk2MDIwMDVDOEUwMzAwMzhBQgotOjEwNTMyMDAwM0MxMTgwMDAzMDQyRkZGRjAwMDIxMDQwMDA2MjE4MjE1MwotOjEwNTMzMDAwQUUwMzAwMUMwRTAwMDMzMjhFMjQwMTQwOTIwMjAwMjVCMQotOjEwNTM0MDAwMzQ0MjAwNDBBMjAyMDAyNTBFMDAwMzNEOEUyNDAxNDA5RAotOjEwNTM1MDAwOEUyNDAxNDAzQzAzODAwMDhDNjIwMUY4MDQ0MEZGRkU3MwotOjEwNTM2MDAwMjQwMjAwMDJBQzY0MDFDMEEwNjIwMUM0M0MwMjEwMDAyRgotOjEwNTM3MDAwQUM2MjAxRjg4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTAxRAotOjEwNTM4MDAwMDNFMDAwMDgyN0JEMDAyMDNDMDM2MDEwM0MwMjA4MDAzOQotOjEwNTM5MDAwMjQ0MjAxNzRBQzYyNTAyQzhDNjI1MDAwM0MwNDgwMDBBQQotOjEwNTNBMDAwMzQ0MjAwODBBQzYyNTAwMDNDMDIwODAwMjQ0MjU0N0MyRAotOjEwNTNCMDAwM0MwMTA4MDBBQzIyNTYwMDNDMDIwODAwMjQ0MjU0Mzg0QwotOjEwNTNDMDAwM0MwMTA4MDBBQzIyNTYwNDNDMDIwMDAyQUM4NDAwMDhGOAotOjEwNTNEMDAwQUM4MjAwMEMwM0UwMDAwODI0MDIwMDAxMDBBMDMwMjE5MAotOjEwNTNFMDAwM0MxQzA4MDAyNzlDNTYwODNDMDIwMDAyM0MwNTA0MDBCNwotOjEwNTNGMDAwMDA4NTI4MjYwMDgyMjAyNjAwMDQxMDJCMkNBNTAwMDEwMQotOjEwNTQwMDAwMkM4NDAwMDEwMDAyMTA4MDNDMDMwODAwMjQ2MzU2MDAzNQotOjEwNTQxMDAwMDA4NTIwMjUwMDQzMTgyMTEwODAwMDAzMDAwMDEwMjE4MgotOjEwNTQyMDAwQUM2NjAwMDAyNDAyMDAwMTAzRTAwMDA4MDAwMDAwMDA1OAotOjEwNTQzMDAwM0MxQzA4MDAyNzlDNTYwODNDMDIwMDAyM0MwNTA0MDA2NgotOjEwNTQ0MDAwMDA4NTI4MjYwMDgyMjAyNjAwMDQxMDJCMkNBNTAwMDFCMAotOjEwNTQ1MDAwMkM4NDAwMDEwMDAyMTA4MDNDMDMwODAwMjQ2MzU2MDBFNQotOjEwNTQ2MDAwMDA4NTIwMjUwMDQzMTgyMTEwODAwMDA1MDAwMDEwMjEzMAotOjEwNTQ3MDAwM0MwMjA4MDAyNDQyNTQzOEFDNjIwMDAwMjQwMjAwMDFCRgotOjEwNTQ4MDAwMDNFMDAwMDgwMDAwMDAwMDNDMDIwMDAyM0MwMzA0MDBBRQotOjEwNTQ5MDAwMDA4MjEwMjYwMDgzMTgyNjJDNDIwMDAxMkM2MzAwMDE5NAotOjEwNTRBMDAwMDA0MzEwMjUxMDQwMDAwQjAwMDAyODIxM0MxQzA4MDA4MAotOjEwNTRCMDAwMjc5QzU2MDgzQzAzODAwMDhDNjIwMDA4MjQwNTAwMDFFQwotOjEwNTRDMDAwMDA0MzEwMjVBQzYyMDAwODhDNjIwMDBDMDA0NDEwMjVEQgotOjEwNTREMDAwQUM2MjAwMEMwM0UwMDAwODAwQTAxMDIxM0MxQzA4MDA5NgotOjEwNTRFMDAwMjc5QzU2MDgzQzA1ODAwMDhDQTMwMDBDMDAwNDIwMjc1NAotOjEwNTRGMDAwMjQwMjAwMDEwMDY0MTgyNDAzRTAwMDA4QUNBMzAwMEM5RgotOjEwNTUwMDAwM0MwMjAwMDIxNDgyMDAwNjNDMDU2MDAwOENBMjA4RDAxOAotOjEwNTUxMDAwMjQwM0ZGRkUwMDQzMTAyNDAzRTAwMDA4QUNBMjA4RDBERgotOjEwNTUyMDAwM0MwMjA0MDAxNDgyMDAwNTAwMDAwMDAwOENBMjA4RDA5OAotOjEwNTUzMDAwMjQwM0ZGRkQwMDQzMTAyNEFDQTIwOEQwMDNFMDAwMDhDMAotOjEwNTU0MDAwMDAwMDAwMDAzQzAyNjAxQTM0NDIwMDEwOEM0MzAwODBDRQotOjEwNTU1MDAwMjdCREZGRjg4QzQ0MDA4NEFGQTMwMDAwOTNBMzAwMDA5NAotOjEwNTU2MDAwMjQwMjAwMDQxNDYyMDAxQUFGQTQwMDA0OTNBMjAwMDFGNAotOjEwNTU3MDAwMTA0MDAwMDc5N0EzMDAwMjMwNjJGRkZDM0MwMzgwMDA0QwotOjEwNTU4MDAwMDA0MzEwMjE4QzQyMDAwMDBBMDAxNTM2QUZBMjAwMDQyRgotOjEwNTU5MDAwMzA2MkZGRkMzQzAzODAwMDAwNDMxMDIxQUM0NDAwMDA1QgotOjEwNTVBMDAwQTNBMDAwMDAzQzA1NjAwMDhDQTIwOEQwMjQwM0ZGRkVFRAotOjEwNTVCMDAwM0MwNDYwMUEwMDQzMTAyNEFDQTIwOEQwOEZBMzAwMDQ1RQotOjEwNTVDMDAwOEZBMjAwMDAzNDg0MDAxMEFDODMwMDg0QUM4MjAwODA4MQotOjEwNTVEMDAwMDNFMDAwMDgyN0JEMDAwODI3QkRGRkU4QUZCRjAwMTBBQgotOjEwNTVFMDAwM0MxQzA4MDAyNzlDNTYwODNDMDI4MDAwOEM0MzAwMENBMQotOjEwNTVGMDAwOEM0MjAwMDQwMDQzMTgyNDNDMDIwMDAyMTA2MDAwMTQ5NgotOjEwNTYwMDAwMDA2MjI4MjQzQzAyMDQwMDNDMDQwMDAyMTBBMDAwMDVCMwotOjEwNTYxMDAwMDA2MjEwMjQzQzAyMDgwMDhDNDI1NjAwMEEwMDE1NUIxMAotOjEwNTYyMDAwMDAwMDAwMDAxMDQwMDAwNzNDMDQwNDAwM0MwMjA4MDA5OQotOjEwNTYzMDAwOEM0MjU2MDQwMDQwRjgwOTAwMDAwMDAwMEEwMDE1NjA4MgotOjEwNTY0MDAwMDAwMDAwMDAwMDAwMDAwRDNDMUMwODAwMjc5QzU2MDhDQwotOjBDNTY1MDAwOEZCRjAwMTAwM0UwMDAwODI3QkQwMDE4MDkKLTowNDU2NUMwMDgwMDgwMjQwODAKLToxMDU2NjAwMDgwMDgwMTAwODAwODAwODA4MDA4MDAwMDAwMDAwQzgwOTUKLToxMDU2NzAwMDAwMDAzMjAwMDgwMDBFOTgwODAwMEVGNDA4MDAwRjg4QTEKLToxMDU2ODAwMDA4MDAxMDI4MDgwMDEwNzQ4MDA4MDEwMDgwMDgwMDgwQkQKLTowNDU2OTAwMDgwMDgwMDAwOEUKLTowQzU2OTQwMDBBMDAwMDI4MDAwMDAwMDAwMDAwMDAwMEQ4Ci06MTA1NkEwMDAwMDAwMDAwRDYzNzAzNjJFMzAyRTMxMzcwMDAwMDAwMEYwCi06MTA1NkIwMDAwNjAwMTEwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENGCi06MTA1NkMwMDAwMDAwMDAwMDAwMDAwMDAwMzgwMDNDMDAwMDAwMDAwMDY2Ci06MTA1NkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMEFBCi06MTA1NkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJBCi06MTA1NkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFBCi06MTA1NzAwMDAwMDAwMDAwMDAwMDAwMDAwMjEwMDM4MDAwMDAwMDAwMTNGCi06MTA1NzEwMDAwMDAwMDAyQjAwMDAwMDAwMDAwMDAwMDQwMDAzMEQ0MDBBCi06MTA1NzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc5Ci06MTA1NzMwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDMwMDAwMDAwMDU2Ci06MTA1NzQwMDAwMDAwMDAwRDAwMDAwMDBEM0MwMjA4MDAyNDQyNTlBQzhFCi06MTA1NzUwMDAzQzAzMDgwMDI0NjM1QkY0QUM0MDAwMDAwMDQzMjAyQkIyCi06MTA1NzYwMDAxNDgwRkZGRDI0NDIwMDA0M0MxRDA4MDAzN0JEOUZGQzRGCi06MTA1NzcwMDAwM0EwRjAyMTNDMTAwODAwMjYxMDAwQTAzQzFDMDgwMEVCCi06MTA1NzgwMDAyNzlDNTlBQzBFMDAwMkY2MDAwMDAwMDAwMDAwMDAwRDNFCi06MTA1NzkwMDAyN0JERkZCNEFGQTEwMDAwQUZBMjAwMDRBRkEzMDAwODczCi06MTA1N0EwMDBBRkE0MDAwQ0FGQTUwMDEwQUZBNjAwMTRBRkE3MDAxODVGCi06MTA1N0IwMDBBRkE4MDAxQ0FGQTkwMDIwQUZBQTAwMjRBRkFCMDAyOEZGCi06MTA1N0MwMDBBRkFDMDAyQ0FGQUQwMDMwQUZBRTAwMzRBRkFGMDAzODlGCi06MTA1N0QwMDBBRkI4MDAzQ0FGQjkwMDQwQUZCQzAwNDRBRkJGMDA0ODE5Ci06MTA1N0UwMDAwRTAwMDgyMDAwMDAwMDAwOEZCRjAwNDg4RkJDMDA0NDVFCi06MTA1N0YwMDA4RkI5MDA0MDhGQjgwMDNDOEZBRjAwMzg4RkFFMDAzNEI3Ci06MTA1ODAwMDA4RkFEMDAzMDhGQUMwMDJDOEZBQjAwMjg4RkFBMDAyNDA2Ci06MTA1ODEwMDA4RkE5MDAyMDhGQTgwMDFDOEZBNzAwMTg4RkE2MDAxNDQ2Ci06MTA1ODIwMDA4RkE1MDAxMDhGQTQwMDBDOEZBMzAwMDg4RkEyMDAwNDg2Ci06MTA1ODMwMDA4RkExMDAwMDI3QkQwMDRDM0MxQjYwMTg4RjdBNTAzMEIwCi06MTA1ODQwMDAzNzdCNTAyODAzNDAwMDA4QUY3QTAwMDAwMEEwMTgyMUUxCi06MTA1ODUwMDAwMDgwMTAyMTAwODAyODIxM0MwNDYwMDAzQzA3NjAwMDhCCi06MTA1ODYwMDAyNDA2MDAwODEwNjAwMDA2MzQ4NDIwNzg4QzQyMDAwMDcyCi06MTA1ODcwMDBBQ0UyMjAwODhDNjMwMDAwMDNFMDAwMDhBQ0UzMjAwQ0RECi06MTA1ODgwMDAwQTAwMEY4MTAwMDAwMDAwMjQwMzAwNDAzQzAyNjAwMDc5Ci06MTA1ODkwMDAwM0UwMDAwOEFDNDMyMDAwM0MwNzYwMDA4Rjg2MDAwNDUyCi06MTA1OEEwMDA4Q0U1MjA3NDAwODYxMDIxMDBBMjE4MkIxNDYwMDAwN0RDCi06MTA1OEIwMDAwMDAwMjgyMThGOEFGREEwMjQwNTAwMDFBMTQ0MDAxM0M3Ci06MTA1OEMwMDA4Rjg5MDAwNDAxMjQ0MDIxQUY4ODAwMDQwM0UwMDAwODEwCi06MTA1OEQwMDAwMEEwMTAyMThGODRGREEwOEY4NTAwMDQ5MDg2MDAxMzA2Ci06MTA1OEUwMDAzMEMzMDBGRjAwQTMxMDIzQUY4MjAwMDQwM0UwMDAwOEQwCi06MTA1OEYwMDBBMDgwMDAxMzhGODRGREEwMjdCREZGRThBRkIwMDAxMDhCCi06MTA1OTAwMDBBRkJGMDAxNDkwODkwMDExOTA4NzAwMTEyNDAyMDAyODc1Ci06MTA1OTEwMDAzMTI4MDBGRjM5MDYwMDI4MzBFMzAwRkYyNDg1MDAyQ0UxCi06MTA1OTIwMDAyQ0QwMDAwMTEwNjIwMDE2MjQ4NDAwMUMwRTAwMDA2RUIyCi06MTA1OTMwMDAwMDAwMDAwMDhGOEZGREEwM0MwNTYwMDAyNDAyMDIwNERGCi06MTA1OTQwMDA5NUVFMDAzRTk1RUQwMDNDMDAwRTVDMDAzMUFDRkZGRjkzCi06MTA1OTUwMDAwMTZDNTAyNUFDQUEyMDEwNTIwMDAwMDEyNDAyMDAwNDYyCi06MTA1OTYwMDBBQ0EyMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM5Ci06MTA1OTcwMDA4RkJGMDAxNDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAxODhGCi06MTA1OTgwMDAwQTAwMDBBNjAwMDAyODIxOEY4NUZEQTAyN0JERkZEOEIyCi06MTA1OTkwMDBBRkJGMDAyMEFGQjMwMDFDQUZCMjAwMThBRkIxMDAxNDBFCi06MTA1OUEwMDBBRkIwMDAxMDAwODA5ODIxOTBBNDAwMTEyNEIwMDAxQzFBCi06MTA1OUIwMDAyNEIxMDAyQzMwODMwMEZGMzg2MjAwMjgwRTAwMDA5MEQ0Ci06MTA1OUMwMDAyQzUyMDAwMTBFMDAwMDk4MDAwMDAwMDAwMjAwMjAyMTZGCi06MTA1OUQwMDAxMjQwMDAwMjAyMjAyODIxMDAwMDI4MjEwRTAwMDA2RTQzCi06MTA1OUUwMDAwMDAwMDAwMDhGOERGREEwM0MwODgwMDAzQzA1NjAwMDk5Ci06MTA1OUYwMDA5NUFDMDAzRTk1QUIwMDNDMDI2ODMwMjUwMDBDNEMwMDk1Ci06MTA1QTAwMDAzMTZBRkZGRjAxMkEzODI1QUNBNzIwMTAyNDAyMDIwMkM4Ci06MTA1QTEwMDBBQ0E2MjAxNDUyNDAwMDAxMjQwMjAwMDI4RkJGMDAyMEQ3Ci06MTA1QTIwMDA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDFDCi06MTA1QTMwMDAyN0JEMDAyODAzRTAwMDA4QUNBMjIwMDAyN0JERkZFMDNFCi06MTA1QTQwMDBBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTBBRkJGMDAxQzcwCi06MTA1QTUwMDAzQzExNjAwMDhFMjMyMDc0OEY4MjAwMDQzMEQwRkZGRjQxCi06MTA1QTYwMDAzMEYyRkZGRjEwNjIwMDBDMjQwNjAwOEYwRTAwMDA2RTYzCi06MTA1QTcwMDAwMDAwMDAwMDNDMDY4MDFGMDAxMDQ0MDAzNEM1RkYwMEY5Ci06MTA1QTgwMDAwMTEyMzgyNTI0MDQwMDAyQUUyNzIwMTAwMDAwMzAyMTI2Ci06MTA1QTkwMDBBRTI1MjAxNEFFMjQyMDAwOEZCRjAwMUM4RkIyMDAxODRBCi06MTA1QUEwMDA4RkIxMDAxNDhGQjAwMDEwMDBDMDEwMjEwM0UwMDAwODc3Ci06MTA1QUIwMDAyN0JEMDAyMDI3QkRGRkUwQUZCMDAwMTAzMEQwRkZGRkIyCi06MTA1QUMwMDBBRkJGMDAxOEFGQjEwMDE0MEUwMDAwNkUzMEYxRkZGRjQxCi06MTA1QUQwMDAwMDEwMjQwMDAwOTE4MDI1M0MwMzYwMDBBQzcwMjAxMDcxCi06MTA1QUUwMDA4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTAyNDAyMDAwNDgzCi06MTA1QUYwMDBBQzYyMjAwMDI3QkQwMDIwMDNFMDAwMDgwMDAwMTAyMTU4Ci06MTA1QjAwMDAyN0JERkZFMDNDMDQ2MDE4QUZCRjAwMThBRkIxMDAxNDIwCi06MTA1QjEwMDBBRkIwMDAxMDhDODg1MDAwMjQwM0ZGN0YzNDAyODA3MUU2Ci06MTA1QjIwMDAwMTAzMzgyNDM0RTUzODBDMjQxRjAwMzEzQzE5ODAwMDZGCi06MTA1QjMwMDBBQzg1NTAwMDNDMTE4MDBBQUM4MjUzQkNBRjNGMDAwOERBCi06MTA1QjQwMDAwRTAwMDU0Q0FGOTEwMDQwMEUwMDA1MEEzQzExNjAwMEFDCi06MTA1QjUwMDAwRTAwMDA3RDAwMDAwMDAwOEUzMDA4MDgzQzBGNTcwOTQxCi06MTA1QjYwMDAyNDE4RkZGMDAyMTg2MDI0MzVFRUUwMDAzNUVERjAwMDU3Ci06MTA1QjcwMDAwMThFNTAyNjAxOEQ1ODI2MkQ0NjAwMDEyRDY5MDAwMTA5Ci06MTA1QjgwMDBBRjg2MDA0QzBFMDAwRDA5QUY4OTAwNTAzQzA2NjAxNjMwCi06MTA1QjkwMDA4Q0M3MDAwMDNDMDg2MDE0OEQwNTAwQTAzQzAzRkZGRjhCCi06MTA1QkEwMDAwMEUzMjAyNDNDMDI1MzUzMDAwNTJGQzIxMDgyMDA1NTBECi06MTA1QkIwMDAzNEQwN0MwMDk2MDIwMUYyQTc4MDAwNkMxMDQwMDAwM0Y0Ci06MTA1QkMwMDBBNzgwMDA3QzM4NEIxRTFFQTc4QjAwNkM5NjAyMDFGODQ0Ci06MTA1QkQwMDAxMDQwMDAwNDhGOEQwMDUwMzg0QzFFMUVBNzhDMDA3Qzk2Ci06MTA1QkUwMDA4RjhEMDA1MDExQTAwMDA1OEY4MzAwNEMyNDBFMDAyMEUzCi06MTA1QkYwMDBBNzhFMDA3Q0E3OEUwMDZDOEY4MzAwNEMxMDYwMDAwNTgwCi06MTA1QzAwMDA5Nzg1MDA3QzI0MEYwMDIwQTc4RjAwN0NBNzhGMDA2QzU1Ci06MTA1QzEwMDA5Nzg1MDA3QzJDQjgwMDgxNTMwMDAwMDEyNDA1MDA4MDhBCi06MTA1QzIwMDA5Nzg0MDA2QzJDOTEwNDAxNTIyMDAwMDEyNDA0MDQwMDhDCi06MTA1QzMwMDAxMDYwMDAwQjNDMDI2MDAwOEZCRjAwMTg4RkIxMDAxNDkxCi06MTA1QzQwMDA4RkIwMDAxMDI3QkQwMDIwQTc4NDAwNkNBNzg1MDA3Q0MyCi06MTA1QzUwMDBBMzgwMDA3RUE3ODAwMDc0MDNFMDAwMDhBNzgwMDA5MjY0Ci06MTA1QzYwMDA4QzQ3MDQzODI0MTkxMDNDMzBGRkZGRkYxM0Y5MDAwMzYwCi06MTA1QzcwMDAzMEE4RkZGRjExMDAwMDQ2MjQwMzAwNTBBMzgwMDA3RURGCi06MTA1QzgwMDA5Mzg2MDA3RTUwQzAwMDI0QTc4NTAwN0NBNzgwMDA3Q0ZFCi06MTA1QzkwMDA5Nzk4MDA3Q0E3ODAwMDZDQTc4MDAwNzRBNzgwMDA5MjcyCi06MTA1Q0EwMDAzQzAxMDgwMEFDMzgwMDgwMEUwMDA3ODcwMDAwMDAwMEFGCi06MTA1Q0IwMDAzQzBGNjAwMDhERUQwODA4MjQwRUZGRjAzQzBCNjAwRUQ5Ci06MTA1Q0MwMDAyNjBDMDM4ODM1NkEwMDEwMDAwMDQ4MjEwMDAwMjgyMUI2Ci06MTA1Q0QwMDAwMUFFMjAyNDNDMTA1NzA5QUY4QzAwMTBBRjhBMDA0ODU5Ci06MTA1Q0UwMDBBRjg5MDAxODEwOTAwMDIzQUY4NTAwMTQ4RkJGMDAxOEYzCi06MTA1Q0YwMDA4RkIxMDAxNDhGQjAwMDEwMjdCRDAwMjAwM0UwMDAwODEyCi06MTA1RDAwMDBBRjgwMDA1NDAwMDU1MDgwMDE0NjQ4MjE4RDI2MDAwNEQ0Ci06MTA1RDEwMDAwQTAwMDE0ODAwRDE4MDIxOTc5ODAwN0NBNzg0MDA2QzdDCi06MTA1RDIwMDBBNzgwMDA3NEE3ODAwMDkyM0MwMTA4MDBBQzM4MDA4MDc2Ci06MTA1RDMwMDAwRTAwMDc4NzAwMDAwMDAwM0MwRjYwMDA4REVEMDgwODkyCi06MTA1RDQwMDAyNDBFRkZGMDNDMEI2MDBFMjYwQzAzODgzNTZBMDAxMDExCi06MTA1RDUwMDAwMDAwNDgyMTAwMDAyODIxMDFBRTIwMjQzQzEwNTcwOUYyCi06MTA1RDYwMDBBRjhDMDAxMEFGOEEwMDQ4QUY4OTAwMTgxNDkwRkZERjk1Ci06MTA1RDcwMDBBRjg1MDAxNDI0MTEwMDAxQUY5MTAwNTQ4RkJGMDAxOEFCCi06MTA1RDgwMDA4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAyMDgxCi06MTA1RDkwMDAwQTAwMDE3QkEzODMwMDdFMzA4M0ZGRkY4Rjg4MDA0MEQxCi06MTA1REEwMDA4Rjg3MDAzQzAwMDMyMTQwM0MwNTgwMDAzQzAyMDA1MEVFCi06MTA1REIwMDAwMDgyNDgyNTNDMDY2MDAwM0MwQTAxMDAzNEFDMDQwMDI3Ci06MTA1REMwMDA4Q0NEMDhFMDAxQUE1ODI0MTE2MDAwMDUwMDAwMDAwMEY1Ci06MTA1REQwMDA4Q0NGMDhFMDI0RTcwMDAxMDFFQTcwMjVBQ0NFMDhFMDkyCi06MTA1REUwMDA4RDE5MDAxMDAxODA1ODIxQUNCOTAwMzg4RDE4MDAxNEFECi06MTA1REYwMDBBQ0I4MDAzQ0FDQTkwMDMwMDAwMDAwMDAwMDAwMDAwMDdFCi06MTA1RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkyCi06MTA1RTEwMDAwMDAwMDAwMDAwMDAwMDAwM0MwMzgwMDA4QzY0MDAwMEQzCi06MTA1RTIwMDAzMDgyMDAyMDEwNDBGRkZEM0MwRjYwMDA4REVEMDhFMDQ3Ci06MTA1RTMwMDAzQzBFMDEwMDAxQUUxODI0MTQ2MEZGRTEwMDAwMDAwMEQ4Ci06MTA1RTQwMDBBRjg3MDAzQzAzRTAwMDA4QUY4QjAwNTg4Rjg1MDA0MDBGCi06MTA1RTUwMDAyNDBCRkZGMDNDMDY4MDAwOTRBNzAwMUE4Q0E5MDAyNEI0Ci06MTA1RTYwMDAzMEVDRkZGRjAwMEMzOEMwMDBFQjUwMjQwMTJBNDAyMTI5Ci06MTA1RTcwMDBBQ0M4MDAzQzhDQTQwMDI0OENDMzAwM0MwMDgzMTAyM0RECi06MTA1RTgwMDAxODQwMDAzMzAwMDAwMDAwOENBRDAwMjAyNUEyMDAwMTY2Ci06MTA1RTkwMDAzQzBGMDA1MEFDQzIwMDM4MzVFRTAwMTAzQzA2ODAwMENDCi06MTA1RUEwMDBBQ0NFMDAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ4Ci06MTA1RUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUyCi06MTA1RUMwMDAwMDAwMDAwMDNDMDQ4MDAwOEM5OTAwMDAzMzM4MDAyMDYyCi06MTA1RUQwMDAxMzAwRkZGRDMwRTIwMDA4MTA0MDAwMTczQzA5ODAwMDZECi06MTA1RUUwMDA4Qzg4MDQwOEFDQTgwMDEwOEM4MzA0MENBQ0EzMDAxNEFDCi06MTA1RUYwMDAzQzE5MDAyMDNDMTg4MDAwQUYxOTAwMzA5NEFFMDAxODA3Ci06MTA1RjAwMDA5NEFGMDAxQzAxQ0YzMDIxQTRBNjAwMTg5NEFEMDAxQTU0Ci06MTA1RjEwMDAyNUE3MDAwMUE0QTcwMDFBOTRBQjAwMUE5NEFDMDAxRTk4Ci06MTA1RjIwMDAxMThCMDAwMzAwMDAwMDAwMDNFMDAwMDgwMDAwMDAwMEU3Ci06MTA1RjMwMDAwM0UwMDAwOEE0QTAwMDFBOEQyQTA0MDBBQ0FBMDAxMEY3Ci06MTA1RjQwMDA4RDI0MDQwNEFDQTQwMDE0MEEwMDAyMTgzQzE5MDAyMDlCCi06MTA1RjUwMDA4Q0EyMDAyMDBBMDAwMjAwM0MwRjAwNTAwQTAwMDFFRTUzCi06MTA1RjYwMDAwMDAwMDAwMDI3QkRGRkU4QUZCRjAwMTAwRTAwMDIzMkE2Ci06MTA1RjcwMDAwMDAwMDAwMDhGODkwMDQwOEZCRjAwMTAzQzAzODAwMEFDCi06MTA1RjgwMDBBNTIwMDAwQTk1MjgwMDBBOTUyNzAwMDQyN0JEMDAxOEJGCi06MTA1RjkwMDAzMTA1RkZGRjMwRTYwMDBGMDAwNjE1MDAwMEEyMjAyNUE2Ci06MTA1RkEwMDAwM0UwMDAwOEFDNjQwMDgwM0MwNTA4MDA4Q0E1MDAyMERDCi06MTA1RkIwMDA4RjgzMDAwQzI3QkRGRkU4QUZCMDAwMTBBRkJGMDAxNDA3Ci06MTA1RkMwMDAxMEEzMDAxMDAwMDA4MDIxMjQwNDAwMDEwMjA0MzAwNDBBCi06MTA1RkQwMDAwMEE2MjAyNDAwQzMxMDI0NTA0NDAwMDYyNjEwMDAwMTBGCi06MTA1RkUwMDAwMDEwMTg4MDI3ODdGREE0MTQ4MDAwMEEwMDY3MTgyMTdDCi06MTA1RkYwMDAyNjEwMDAwMTJFMDkwMDAyNTUyMEZGRjM4RjgzMDAwQ0FDCi06MTA2MDAwMDBBRjg1MDAwQzhGQkYwMDE0OEZCMDAwMTAwM0UwMDAwOEI0Ci06MTA2MDEwMDAyN0JEMDAxODhDNjgwMDAwM0MwNTgwMDBBQ0E4MDAyNDU3Ci06MTA2MDIwMDAwRTAwMDIzNDI2MTAwMDAxM0MwNTA4MDA4Q0E1MDAyMDVCCi06MTA2MDMwMDAwQTAwMDI1OTJFMDkwMDAyMjQwNTAwMDEwMDg1MTgwNEY3Ci06MTA2MDQwMDAzQzA0MDgwMDhDODQwMDIwMjdCREZGQzhBRkJGMDAzNDhCCi06MTA2MDUwMDAwMDgzMTAyNEFGQkUwMDMwQUZCNzAwMkNBRkI2MDAyOENECi06MTA2MDYwMDBBRkI1MDAyNEFGQjQwMDIwQUZCMzAwMUNBRkIyMDAxODJFCi06MTA2MDcwMDBBRkIxMDAxNDEwNDAwMDUxQUZCMDAwMTA4Rjg0MDA0MDQ5Ci06MTA2MDgwMDA5NDg3MDAwNjk0ODgwMDBBMDBFODMwMjMzMEQ1RkZGRjhCCi06MTA2MDkwMDAxMkEwMDA0QjhGQkYwMDM0OTQ4QjAwMTg5NDhDMDAwQTIwCi06MTA2MEEwMDAwMTZDNTAyMzMxNDJGRkZGMDJBMjQ4MkIxNTIwMDAwMjUxCi06MTA2MEIwMDAwMkEwMjAyMTAwNDAyMDIxMkM4RjAwMDUxNUUwMDAwMkM1Ci06MTA2MEMwMDAwMDgwOTgyMTI0MTMwMDA0MEUwMDAxQzEwMjYwMjAyMUU5Ci06MTA2MEQwMDA4Rjg3MDA0MDAyNjA5MDIxQUY4MDAwNDQ5NEY0MDAwQTUyCi06MTA2MEUwMDAwMjYwODAyMTEyNjAwMDRFMzI5MUZGRkYzQzE2NzAwMDZBCi06MTA2MEYwMDAzQzE0NDAwMDNDMUUyMDAwM0MxNzYwMDA4Rjk5MDA1ODYzCi06MTA2MTAwMDA4RjM4MDAwMDAzMTYxODI0MTA3NDAwNEYwMjgzRjgyQkY4Ci06MTA2MTEwMDAxN0UwMDAzNjAwMDAwMDAwMTA3RTAwNDc4Rjg2MDA0NDI0Ci06MTA2MTIwMDAxNEMwMDAzQTI0MDMwMDAxMDIwMzEwMjMwMjIzMjAyMTlCCi06MTA2MTMwMDAzMDUwRkZGRjE2MDBGRkYxMzA5MUZGRkY4Rjg3MDA0MEM2Ci06MTA2MTQwMDAzQzExMDAyMDNDMTA4MDAwQUUxMTAwMzA5NEVCMDAwQTlFCi06MTA2MTUwMDAzQzE3ODAwMDAyNEI1MDIxQTRFQTAwMEE5NEU5MDAwQThGCi06MTA2MTYwMDA5NEU4MDAwNDMxMjNGRkZGMzEwNjAwMEYwMDA2MkQwMEU0Ci06MTA2MTcwMDAwMDY1RjAyNUFFRkUwMDgwOTRGMzAwMEE5NEY2MDAxODQ2Ci06MTA2MTgwMDAxMkQzMDAzNjAwMTIyMTQwOENGRjAwMTQ4Q0Y0MDAxMDUyCi06MTA2MTkwMDAwM0U0NjgyMTAwMDBDMDIxMDFBNDc4MkIwMjk4NzAyMTNCCi06MTA2MUEwMDAwMUNGNjAyMUFDRUQwMDE0QUNFQzAwMTAwMkIyMzgyMzNBCi06MTA2MUIwMDAzMEY1RkZGRjE2QTBGRkI4OEY4NDAwNDA4RkJGMDAzNDdBCi06MTA2MUMwMDA4RkJFMDAzMDhGQjcwMDJDOEZCNjAwMjg4RkI1MDAyNDBCCi06MTA2MUQwMDA4RkI0MDAyMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNDUxCi06MTA2MUUwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMzgxNDc3RkZDQzAzCi06MTA2MUYwMDA4Rjg2MDA0NDBFMDAwRUUyMDIwMDIwMjEwMDQwMTgyMThDCi06MTA2MjAwMDA4Rjg2MDA0NDEwQzBGRkM5MDIwMzEwMjMwMjcwNzAyMzYwCi06MTA2MjEwMDA4Rjg3MDA0MDAxQzM2ODIxMEEwMDAyRTQzMUIyRkZGRjBBCi06MTA2MjIwMDA4Rjg2MDA0NDE0QzBGRkM5M0MxMTAwMjAzQzEwODAwMDQwCi06MTA2MjMwMDAwQTAwMDJBRUFFMTEwMDMwMEUwMDA0NjYwMjAwMjAyMUZBCi06MTA2MjQwMDAwQTAwMDJEQjAwNDAxODIxMDIwMDIwMjEwRTAwMDkzOTVCCi06MTA2MjUwMDAwMjIwMjgyMTBBMDAwMkRCMDA0MDE4MjEwRTAwMDFFRTc2Ci06MTA2MjYwMDAwMDAwMDAwMDBBMDAwMkM3MDJCMjM4MjMyN0JERkZDOEExCi06MTA2MjcwMDBBRkI3MDAyQ0FGQjYwMDI4QUZCNTAwMjRBRkI0MDAyMEY0Ci06MTA2MjgwMDBBRkIzMDAxQ0FGQjIwMDE4QUZCMTAwMTRBRkIwMDAxMDM0Ci06MTA2MjkwMDBBRkJGMDAzMDBFMDAwMTFCMjQxMzAwMDEzQzA0N0ZGRjQwCi06MTA2MkEwMDAzQzAzODAwODNDMDIyMDAwM0MwMTA4MDBBQzIwMDA3MDQ4Ci06MTA2MkIwMDAzNDk2RkZGRjM0NzcwMDgwMzQ1MjAwMDMzQzE1MTJDMDNGCi06MTA2MkMwMDAyNDE0MDAwMTNDMTA4MDAwMjQxMUZGODAwRTAwMDI0NUMwCi06MTA2MkQwMDAwMDAwMDAwMDhGODcwMDQ4OEY4QjAwMTg4Rjg5MDAxNDAyCi06MTA2MkUwMDA4Q0VBMDBFQzhDRTgwMEU4MDE0QjMwMkIwMTA5MjgyM0Y0Ci06MTA2MkYwMDAwMEE2MTAyMzE0NDAwMDA2MDE0QjE4MjMxNDQwMDAwRTgyCi06MTA2MzAwMDAzQzA1ODAwMDAyQTM2MDJCMTE4MDAwMEIwMDAwMDAwMDAwCi06MTA2MzEwMDAzQzA1NjAwMDhDRUUwMEVDOENFRDAwRTg4Q0E0MTgwQ0MxCi06MTA2MzIwMDBBRjhFMDAxODA0ODAwMDUzQUY4RDAwMTQ4RjhGMDAxMEMzCi06MTA2MzMwMDBBREY0MDAwMDNDMDU4MDAwOENCRjAwMDAzQkY5MDAwMTdCCi06MTA2MzQwMDAzMzM4MDAwMTE3MDBGRkUxM0MwMzgwMDA4QzYyMDEwMDNDCi06MTA2MzUwMDAyNDA2MEMwMDEwNDYwMDA5MDAwMDAwMDA4QzY4MDEwMEIzCi06MTA2MzYwMDAyRDA0MzA4MDU0ODAwMDEwM0MwNDgwMDA4QzY5MDEwMEIyCi06MTA2MzcwMDAyRDIzMzE4MTEwNjAwMDBDM0MwNDgwMDA4Q0FBMDEwMEE4Ci06MTA2MzgwMDAxMTQ2MDAwNDAwMDAyMDIxOENBNjAxMDAyNEM1RkY4MUQ1Ci06MTA2MzkwMDAzMEE0MDBGRjhFMEIwMTAwMEUwMDAyNjlBRTBCMDAyNDNBCi06MTA2M0EwMDAwQTAwMDM0RjNDMDQ4MDAwOEM4RDAxMDAyREFDMzMwMEFCCi06MTA2M0IwMDAxMTgwMDAyMjAwMDAwMDAwM0MwNzA4MDA4Q0U3MDA5OEQ0Ci06MTA2M0MwMDAyNEVFMDAwMTNDMDEwODAwQUMyRTAwOTgzQzA0ODAwMDQzCi06MTA2M0QwMDA4QzgyMDEwMDE0NDAwMDAzMDAwMDAwMDA1NjYwMDAxNDhECi06MTA2M0UwMDAzQzA0NDAwMDhDOUYwMTAwOEM5ODAxMDAwMDAwOTgyMTIzCi06MTA2M0YwMDAwM0YxQzgyNDAwMTkzOTQwMzMwRjAwN0YwMEVGNzAyNUU2Ci06MTA2NDAwMDAwMUQyNjgyNUFDOEQwODMwOEM4QzAxMDA4Qzg1MDEwMDkwCi06MTA2NDEwMDAyNThCMDEwMDAxNzEzMDI0MDAwNjUxNDAzMEEzMDA3RjFDCi06MTA2NDIwMDAwMTQzNDgyNTAxMzI0MDI1QUM4ODA4MzAzQzA0NDAwMDM3Ci06MTA2NDMwMDBBRTA0MDEzODBBMDAwMzBFMDAwMDAwMDA4Qzk5MDEwMDMwCi06MTA2NDQwMDAyNDBGMDAyMEFDOTkwMDIwOTJGODAwMDAzMzAzMDBGRkQ1Ci06MTA2NDUwMDAxMDZGMDAwQzI0MUYwMDUwNTQ3RkZGREQzQzA0ODAwMEFGCi06MTA2NDYwMDA4Qzg0MDEwMDBFMDAxNTRFMDAwMDAwMDAwQTAwMDM0RjRFCi06MTA2NDcwMDAzQzA0ODAwMDAwOTYzODI0QUNBNzE4MEMwQTAwMDMyN0JGCi06MTA2NDgwMDA4RjhGMDAxMDhDODUwMTAwMEUwMDA4RjcyNDA0MDA4MDE3Ci06MTA2NDkwMDAwQTAwMDM0RjNDMDQ4MDAwMDBBNDEwMkIyNDAzMDAwMUQ5Ci06MTA2NEEwMDAxMDQwMDAwOTAwMDAzMDIxMDAwNTI4NDAwMEE0MTAyQkY2Ci06MTA2NEIwMDAwNEEwMDAwMzAwMDMxODQwNTQ0MEZGRkMwMDA1Mjg0MERFCi06MTA2NEMwMDA1MDYwMDAwQTAwMDQxODJCMDA4NTM4MkI1NEUwMDAwNEFCCi06MTA2NEQwMDAwMDAzMTg0MjAwQzMzMDI1MDA4NTIwMjMwMDAzMTg0MjIyCi06MTA2NEUwMDAxNDYwRkZGOTAwMDUyODQyMDAwNDE4MkIwM0UwMDAwODlGCi06MTA2NEYwMDAwMEMzMTAyMTMwODRGRkZGMzBDNjAwRkYzQzA3ODAwMDNFCi06MTA2NTAwMDA4Q0UyMDFCODA0NDBGRkZFMDAwNjRDMDAwMTI0MzAyNTU3Ci06MTA2NTEwMDAzQzA4MjAwMDAwQzgyMDI1M0MwMzEwMDBBQ0UwMDE4MEFFCi06MTA2NTIwMDBBQ0U1MDE4NEFDRTQwMTg4MDNFMDAwMDhBQ0UzMDFCODA5Ci06MTA2NTMwMDAzQzA2NjAwMDhDQzUyMDFDMjQwMkZGRjAzMDgzMDIwMDYyCi06MTA2NTQwMDAzMDg2MDEwMDEwNjAwMDBFMDBBMjI4MjQzNEE1MDAwMTRFCi06MTA2NTUwMDAzMDg3MzAwMDEwRTAwMDA1MzA4MzBDMDAzNEE1MDAwNEMzCi06MTA2NTYwMDAzQzA0NjAwMDAzRTAwMDA4QUM4NTIwMUMxMDYwRkZGREM3Ci06MTA2NTcwMDAzQzA0NjAwMDM0QTUwMDA4MDNFMDAwMDhBQzg1MjAxQzQyCi06MTA2NTgwMDA1NEMwRkZGMzM0QTUwMDAyMEEwMDAzQjAzMDg3MzAwMDg2Ci06MTA2NTkwMDAyN0JERkZFOEFGQjAwMDEwQUZCRjAwMTQzQzA3NjAwMDlDCi06MTA2NUEwMDAyNDA2MDAwMjEwODAwMDExMDBBMDgwMjE4RjgzMDA1ODczCi06MTA2NUIwMDAwRTAwMDNBNzhDNjQwMDE4OEY4MjAwNTgwMDAwMjAyMTcxCi06MTA2NUMwMDAyNDA2MDAwMThDNDUwMDBDMEUwMDAzOTgwMDAwMDAwMDFBCi06MTA2NUQwMDAxNjAwMDAwMjI0MDIwMDAzMDAwMDEwMjE4RkJGMDAxNEU3Ci06MTA2NUUwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMTg4Q0U4MjAxQ0M1Ci06MTA2NUYwMDAyNDA5RkZGMDAxMDkyODI0QUNFNTIwMUM4Rjg3MDA1OEVFCi06MTA2NjAwMDAwQTAwMDNDRDhDRTUwMDBDM0MwMjYwMEUwMDgwNDAyMUE2Ci06MTA2NjEwMDAzNDQ2MDEwMDI0MDkwMDE4MDAwMDAwMDAwMDAwMDAwMEJBCi06MTA2NjIwMDAwMDAwMDAwMDNDMEEwMDUwM0MwMzgwMDAzNTQ3MDIwMDk3Ci06MTA2NjMwMDBBQzY4MDAzODM0NjQwNDAwQUM2NTAwM0NBQzY3MDAzMEUyCi06MTA2NjQwMDA4QzZDMDAwMDMxOEIwMDIwMTE2MEZGRkQyNDA3RkZGRkUwCi06MTA2NjUwMDAyNDAzMDA3RjhDOEQwMDAwMjQ2M0ZGRkYyNDg0MDAwNDRBCi06MTA2NjYwMDBBQ0NEMDAwMDE0NjdGRkZCMjRDNjAwMDQwMDAwMDAwMDRFCi06MTA2NjcwMDAwMDAwMDAwMDAwMDAwMDAwMjRBNDAyMDAwMDg1MjgyQjc4Ci06MTA2NjgwMDAzQzAzMDAyMDNDMEU4MDAwMjUyOUZGRkYwMTA1NDAyMTJFCi06MTA2NjkwMDBBREMzMDAzMDE1MjBGRkUwMDA4MDI4MjEwM0UwMDAwODkyCi06MTA2NkEwMDAwMDAwMDAwMDhGODIwMDU4MjdCREZGRDhBRkIzMDAxQzQ4Ci06MTA2NkIwMDBBRkJGMDAyMEFGQjIwMDE4QUZCMTAwMTRBRkIwMDAxMEYwCi06MTA2NkMwMDA5NDQ2MDAwMjAwODA5ODIxOEM1MjAwMTgyQ0MzMDA4MTRGCi06MTA2NkQwMDA4QzQ4MDAwNDhDNDcwMDA4OEM1MTAwMEM4QzQ5MDAxMDM5Ci06MTA2NkUwMDAxMDYwMDAwNzhDNEEwMDE0MkNDNDAwMDQxNDgwMDAxM0FFCi06MTA2NkYwMDAzMEVCMDAwNzMwQzUwMDAzMTBBMDAwMTAwMDAwMDAwMEMwCi06MTA2NzAwMDAyNDEwMDA4QjAyMDAyMDIxMDIyMDI4MjEwRTAwMDM5ODczCi06MTA2NzEwMDAyNDA2MDAwMzE2NjAwMDAyMjQwMjAwMDMwMDAwMTAyMTdBCi06MTA2NzIwMDA4RkJGMDAyMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNEYwCi06MTA2NzMwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjgxNTYwRkZGMUFFCi06MTA2NzQwMDAyNDEwMDA4QjNDMEM4MDAwM0MwMzAwMjAyNDFGMDAwMTFGCi06MTA2NzUwMDBBRDgzMDAzMEFGOUYwMDQ0MDAwMDAwMDAwMDAwMDAwMDQ3Ci06MTA2NzYwMDAwMDAwMDAwMDI0MTlGRkYwMjREODAwMEYwMzE5NzgyNDNBCi06MTA2NzcwMDAzQzEwMDBEMEFEODgwMDM4MDFGMDcwMjUyNENEMDAwMzE2Ci06MTA2NzgwMDAzQzA4NjAwRUFEODcwMDNDMzU4NTA0MDBBRDhFMDAzMEJFCi06MTA2NzkwMDAwMDBEMzg4MjM1MDQwMDNDM0MwMzgwMDA4QzZCMDAwMDA3Ci06MTA2N0EwMDAzMTYyMDAyMDEwNDBGRkZEMDAwMDAwMDAxMEUwMDAwOEYyCi06MTA2N0IwMDAyNEUzRkZGRjI0MDdGRkZGOENBODAwMDAyNDYzRkZGRkYyCi06MTA2N0MwMDAyNEE1MDAwNEFDODgwMDAwMTQ2N0ZGRkIyNDg0MDAwNEE3Ci06MTA2N0QwMDAzQzA1NjAwRUFDQTYwMDM4MDAwMDAwMDAwMDAwMDAwMDgwCi06MTA2N0UwMDAwMDAwMDAwMDhGODYwMDU0M0MwNDAwMjAzQzA3ODAwMDFECi06MTA2N0YwMDBBQ0U0MDAzMDU0QzAwMDA2MDEyMDIwMjEwMjQwMjAyMURBCi06MTA2ODAwMDAwRTAwMDNBNzAwMDA4MDIxMEEwMDA0MUQwMjAwMjAyMUMxCi06MTA2ODEwMDAwRTAwMDNERDAxNDAyODIxMDI0MDIwMjEwRTAwMDNBN0M1Ci06MTA2ODIwMDAwMDAwODAyMTBBMDAwNDFEMDIwMDIwMjEyN0JERkZFMDk2Ci06MTA2ODMwMDBBRkIyMDAxODMwOTJGRkZGQUZCMTAwMTRBRkJGMDAxQzIxCi06MTA2ODQwMDBBRkIwMDAxMDE2NDAwMDBEMDAwMDg4MjEwQTAwMDQ5MzJDCi06MTA2ODUwMDAwMjIwMTAyMTI0MDUwMDAzNTA4NTAwMjc4Q0U1MDAwQzQwCi06MTA2ODYwMDAwMDAwMDAwRDI2MjgwMDAxMzExMUZGRkYyNEUyMDAyMDY2Ci06MTA2ODcwMDAwMjMyODAyQjEyMDAwMDE5QUY4MjAwNTg4RjgyMDA0NDMwCi06MTA2ODgwMDAxNDQwMDAxNjhGODcwMDU4M0MwNjcwMDAzQzAzMjAwMDFGCi06MTA2ODkwMDA4Q0U1MDAwMDAwQTYyMDI0MTQ4MzAwMTA4Rjg0MDA2MDgzCi06MTA2OEEwMDAwMDA1NDQwMjNDMDk4MDAwMDBBOTgwMjQxNDgwRkZFOTBGCi06MTA2OEIwMDAzMTA2MDBGRjJDQ0EwMDBCNTE0MEZGRUIyNjI4MDAwMUQ3Ci06MTA2OEMwMDAwMDA2Njg4MDNDMEUwODAwMjVDRTU3NTgwMUFFNjAyMUI2Ci06MTA2OEQwMDA4RDhCMDAwMDAxNjAwMDA4MDAwMDAwMDAwMjIwMTAyMUU0Ci06MTA2OEUwMDA4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDQyCi06MTA2OEYwMDAwM0UwMDAwODI3QkQwMDIwMEUwMDAzOTgyNDA0MDA4NDU0Ci06MTA2OTAwMDAxNjAwRkZEODhGODcwMDU4MEEwMDA0NzRBRjgwMDA2MDFCCi06MTA2OTEwMDAwMjAwMjgyMTBFMDAwM0JGMjQwNDAwMDE4Rjg3MDA1OEM1Ci06MTA2OTIwMDAwQTAwMDQ3NEFGODIwMDYwMDIwMDI4MjEwRTAwMDNCRjM5Ci06MTA2OTMwMDAwMDAwMjAyMTBBMDAwNEEzOEY4NzAwNTgwRTAwMDQwNEUxCi06MTA2OTQwMDAwMjAwMjAyMThGODcwMDU4MEEwMDA0NzRBRjgyMDA2MDgzCi06MTA2OTUwMDAzMEFGRkZGRjAwMEYxOUMwM0MwNDgwMDA4QzkwMDFCOERECi06MTA2OTYwMDAwNjAwRkZGRTNDMTkyMDA0M0MxODEwMDBBQzgzMDE4MDk3Ci06MTA2OTcwMDBBQzgwMDE4NEFDOTkwMTg4QUM5ODAxQjgwQTAwMDQ3NTE4Ci06MTA2OTgwMDAyNjI4MDAwMTkwRTIwMDAzOTBFMzAwMDIwMDAwMjAyMThECi06MTA2OTkwMDAwMDAyRkUwMDAwMDMzQTAwMDBGRjI4MjUyNDA2MDAwODNDCi06MTA2OUEwMDAwRTAwMDM5ODAwMDAwMDAwMTYwMEZGREMyNDAyMDAwMzI0Ci06MTA2OUIwMDA4Rjg3MDA1ODAwMDAxMDIxMEEwMDA0NzRBRjgyMDA2MDI1Ci06MTA2OUMwMDA5MEU4MDAwMjAwMDAyMDIxMjQwNjAwMDkwQTAwMDRDMzA4Ci06MTA2OUQwMDAwMDA4MkUwMDkwRTQwMDBDMjQwOTAwRkYzMDg1MDBGRjIxCi06MTA2OUUwMDAxMEE5MDAxNTAwMDAzMDIxOTBGOTAwMDI5MEY4MDAwMzcyCi06MTA2OUYwMDAzMDhGMDBGRjk0RUIwMDA0MDAxOTZFMDAwMDE4NzQwMDQzCi06MTA2QTAwMDAwMDBGNjIwMDAxODYyMDI1MDFBRTUwMjUwMTRCMjgyNThDCi06MTA2QTEwMDAzMDg0RkY4QjBBMDAwNEMzMjQwNjAwMEE5MEUzMDAwMkJFCi06MTA2QTIwMDA5MEZGMDAwNDAwMDAyMDIxMDAwMzM2MDAwMERGMjgyNTJECi06MTA2QTMwMDAwQTAwMDRDMzI0MDYwMDBCMEEwMDA0RDUyNDA2MDA4QkI4Ci06MTA2QTQwMDAwMDA0NDlDMjMxMjcwMDNGMDAwNDQzNDIzQzAyODAwMDU5Ci06MTA2QTUwMDAwMDA4MjA0MDI0MDMxNjgwMkNFNjAwMjBBQzQzMDAyQ0M0Ci06MTA2QTYwMDAyNEVBRkZFMDI0ODIwMDAxMTRDMDAwMDMzMEE5MDBGRkUzCi06MTA2QTcwMDAwMDgwMTAyMTMxNDcwMEZGMDAwMjYwODAzQzBEODAwMDQzCi06MTA2QTgwMDAyNDBBMDAwMTAxOEQyMDIxM0MwQjAwMEUwMEVBMjgwNDlECi06MTA2QTkwMDAwMDhCMzAyMTExMjAwMDA1MDAwNTM4Mjc4Q0NFMDAwMDI2Ci06MTA2QUEwMDAwMUM1MzgyNTAzRTAwMDA4QUNDNzAwMDA4Q0Q4MDAwMDAxCi06MTA2QUIwMDAwMzA3NzgyNDAzRTAwMDA4QUNDRjAwMDAyN0JERkZFMDA3Ci06MTA2QUMwMDBBRkIxMDAxNEFGQjAwMDEwQUZCRjAwMTgzQzA3NjAwMEJBCi06MTA2QUQwMDA4Q0U0MDgwODM0MDJGMDAwM0MxMTYwMDAzMDgzRjAwMEMwCi06MTA2QUUwMDAyNDA1MDFDMDNDMDQ4MDBFMDAwMDMwMjExMDYyMDAwNjI1Ci06MTA2QUYwMDAyNDEwMDAwMThDRUEwODA4MzE0OUYwMDAzOTI4RTAwMDMwCi06MTA2QjAwMDAwMDA4MzgyQjAwMDc4MDQwM0MwRDAyMDBBRTJEMDgxNDExCi06MTA2QjEwMDAyNDBDMTY4MDNDMEI4MDAwOEUyNzQ0MDAwRTAwMEY4QjQ3Ci06MTA2QjIwMDBBRDZDMDAyQzEyMDAwMDA0M0MwMjE2OTEyNDA1MDAwMUZCCi06MTA2QjMwMDAxMjA1MDAxMDNDMDIzRDJDMzQ1ODAwRTBBRTM4NDQwOEU5Ci06MTA2QjQwMDAzQzExMDgwMDhFMzEwMDdDOEZCRjAwMTgzQzA2NjAwMEFECi06MTA2QjUwMDAwMDExODU0MDM2MEYxNjgwOEZCMTAwMTQ4RkIwMDAxMEUxCi06MTA2QjYwMDAzQzBFMDIwMDI3QkQwMDIwQUNDRjQ0MjAwM0UwMDAwODBCCi06MTA2QjcwMDBBQ0NFMDgxMDNDMDIxOERBMzQ1ODAwRTBBRTM4NDQwOEI1Ci06MTA2QjgwMDAzQzExMDgwMDhFMzEwMDdDOEZCRjAwMTgzQzA2NjAwMDZECi06MTA2QjkwMDAwMDExODU0MDM2MEYxNjgwOEZCMTAwMTQ4RkIwMDAxMEExCi06MTA2QkEwMDAzQzBFMDIwMDI3QkQwMDIwQUNDRjQ0MjAwM0UwMDAwOENCCi06MTA2QkIwMDBBQ0NFMDgxMDBBMDAwNEVCMjQwNTAwMDEwQTAwMDRFQjI3Ci06MTA2QkMwMDAwMDAwMjgyMTI0MDIwNDAwQTc4MjAwMjRBNzgwMDAxQ0MyCi06MTA2QkQwMDAwMDAwMjAyMTNDMDYwODAwMjRDNjVBNTgyNDA1RkZGRjY3Ci06MTA2QkUwMDAyNDg5MDAwMTAwMDQ0MDgwMzEyNEZGRkYwMTA2MTgyMUEwCi06MTA2QkYwMDAyQzg3MDAyMDE0RTBGRkZBQUM2NTAwMDAyNDA0MDQwMDk4Ci06MTA2QzAwMDBBNzg0MDAyNkE3ODAwMDFFMDAwMDIwMjEzQzA2MDgwMDYzCi06MTA2QzEwMDAyNEM2NUFEODI0MDVGRkZGMjQ4RDAwMDEwMDA0NjA4MDlCCi06MTA2QzIwMDAzMUE0RkZGRjAxODY1ODIxMkM4QTAwMjAxNTQwRkZGQTZECi06MTA2QzMwMDBBRDY1MDAwMEE3ODAwMDI4QTc4MDAwMjBBNzgwMDAyMjYzCi06MTA2QzQwMDAwMDAwMjAyMTNDMDYwODAwMjRDNjVCNTgyNDA1RkZGRkY1Ci06MTA2QzUwMDAyNDk5MDAwMTAwMDRDMDgwMzMyNEZGRkYwMzA2NzgyMTNCCi06MTA2QzYwMDAyQzhFMDAwNDE1QzBGRkZBQURFNTAwMDAzQzA1NjAwMDY1Ci06MTA2QzcwMDA4Q0E3M0QwMDI0MDNFMDhGMDBFMzEwMjQzNDQ2MDE0MDNDCi06MTA2QzgwMDAwM0UwMDAwOEFDQTYzRDAwMjQ4NzAwN0YwMDA3MzFDMjY2Ci06MTA2QzkwMDAyNEM1RkZGRjAwMDUxOEMyMjQ2NDAwMDEzMDgyRkZGRkY1Ci06MTA2Q0EwMDAwMDAyMzhDMEE3ODQwMDMwM0MwMTA4MDBBQzI3MDAzMDQ3Ci06MTA2Q0IwMDBBRjgwMDAyQzAwMDAyODIxMDAwMDIwMjEwMDAwMzAyMTlFCi06MTA2Q0MwMDAyNDg5MDAwMTAwQTcyODIxMzEyNEZGRkYyQ0E4MTcwMUU3Ci06MTA2Q0QwMDAxMTAwMDAwMzJDODMwMDgwMTQ2MEZGRjkyNEM2MDAwMTFBCi06MTA2Q0UwMDAwMEMwMjgyMUFGODYwMDJDMTBDMDAwMURBNzg2MDAyQUY2Ci06MTA2Q0YwMDAyNENBRkZGRjAwMEExMTQyM0MwODA4MDAyNTA4NUI1ODFGCi06MTA2RDAwMDAxMDQwMDAwQTAwMDAyMDIxMDA0MDMwMjEyNDA3RkZGRjJFCi06MTA2RDEwMDAyNDhFMDAwMTAwMDQ2ODgwMzFDNEZGRkYwMUE4NjAyMUI3Ci06MTA2RDIwMDAwMDg2NTgyQjE1NjBGRkZBQUQ4NzAwMDAzMEEyMDAxRkM3Ci06MTA2RDMwMDA1MDQwMDAwODAwMDQzMDgwMjQwMzAwMDEwMDQzQzgwNEQwCi06MTA2RDQwMDAwMDA0MTA4MDAwNDg3ODIxMjczOEZGRkYwM0UwMDAwODg2Ci06MTA2RDUwMDBBREY4MDAwMDAwQzgyMDIxMjQwNUZGRkZBQzg1MDAwMDJECi06MTA2RDYwMDAwM0UwMDAwODAwMDAwMDAwMzBBNUZGRkYzMEM2RkZGRjcxCi06MTA2RDcwMDAzMEE4MDAxRjAwODA2MDIxMzBFNzAwRkYwMDA1Mjk0Mjk1Ci06MTA2RDgwMDAwMDAwNTAyMTEwQzAwMDFEMjQwOTAwMDEyNDBCMDAwMTQ3Ci06MTA2RDkwMDAyNTE4MDAwMTAxMEIyMDA0MzMwODAwRkYwMTI2NzgyNjg2Ci06MTA2REEwMDAzOTBFMDAyMDJERUQwMDAxMkRDMjAwMDEwMUEyMTgyNTkxCi06MTA2REIwMDAxMDYwMDAwRDAxNDQ1MDI1MDAwNUM4ODAwMzJDNDAyMUJGCi06MTA2REMwMDAwMTAwMTgyMTEwRTAwMDBGMDAwQTIwMjc4RDA0MDAwMEE4Ci06MTA2REQwMDAwMDhBMTgyNUFEMDMwMDAwMjRBRDAwMDEwMDAwNDAyMTA5Ci06MTA2REUwMDAwMDAwNTAyMTMxQTVGRkZGMjUyRTAwMDEzMUM5RkZGRjEyCi06MTA2REYwMDAwMEM5MTAyQjEwNDBGRkU3MjUxODAwMDEwM0UwMDAwODMwCi06MTA2RTAwMDAwMDAwMDAwMDhEMEEwMDAwMDE0NDQwMjQwQTAwMDVEMTYyCi06MTA2RTEwMDBBQzY4MDAwMDI3QkRGRkU4MzBBNUZGRkYzMEM2RkZGRkNDCi06MTA2RTIwMDBBRkIwMDAxMEFGQkYwMDE0MzBFN0ZGRkYwMDAwNTAyMUVCCi06MTA2RTMwMDAzNDEwRkZGRjAwMDA2MDIxMjRBRjAwMUYwMEMwNDgyMTc0Ci06MTA2RTQwMDAyNDE4MDAwMTI0MTkwMDIwMDVFMDAwMTYwMUUwMTAyMTlCCi06MTA2RTUwMDAwMDAyRjk0MzAxOUY2ODJBMDAwOTcwMkIwMUFFNDAyNDBCCi06MTA2RTYwMDAxMTAwMDAxNzAwMEMxODgwMDA2NDEwMjExMEUwMDAwNUNDCi06MTA2RTcwMDA4QzRCMDAwMDAwRjg0MDA0MDAwODM4MjMwMTY3NTgyNEI4Ci06MTA2RTgwMDAwMDAwMzgyMTE1NDAwMDQxMDAwMDQwMjE1NTYwMDAxNkU3Ci06MTA2RTkwMDAzMTY5RkZGRjI1OEIwMDAxMzE2Q0ZGRkYwNUUxRkZFQzNECi06MTA2RUEwMDAwMUUwMTAyMTI0QTIwMDNFMDAwMkY5NDMwMTlGNjgyQTVDCi06MTA2RUIwMDAwMDA5NzAyQjAxQUU0MDI0MTUwMEZGRUIwMDBDMTg4MDc4Ci06MTA2RUMwMDAxNTQ2MDAwNTM0MDJGRkZGMDIwMDI4MjEwRTAwMDVCNTFCCi06MTA2RUQwMDAwMDAwMzgyMTAyMDAxMDIxOEZCRjAwMTQ4RkIwMDAxMDc1Ci06MTA2RUUwMDAwM0UwMDAwODI3QkQwMDE4MTUyMDAwMDMwMTYwMTgyMUU5Ci06MTA2RUYwMDAwMDBCMUMwMjI0MDgwMDEwMzA2QTAwRkYxNTQwMDAwNTNBCi06MTA2RjAwMDAzMDZFMDAwRjI1MEQwMDA4MDAwMzFBMDIzMUE4MDBGRkEzCi06MTA2RjEwMDAzMDZFMDAwRjE1QzAwMDA1MzA3RjAwMDMyNTEwMDAwNEZGCi06MTA2RjIwMDAwMDAzMTkwMjMyMDgwMEZGMzA3RjAwMDMxN0UwMDAwNTVDCi06MTA2RjMwMDAzODY5MDAwMTI1MDIwMDAyMDAwMzE4ODIzMDQ4MDBGRjcyCi06MTA2RjQwMDAzODY5MDAwMTMxMjMwMDAxMTA2MDAwMDQzMTAzMDBGRkEzCi06MTA2RjUwMDAyNTBBMDAwMTMxNDgwMEZGMzEwMzAwRkYwMDBDNjk0MEExCi06MTA2RjYwMDAwMUEzNDAyMTI0MEEwMDAxMTBDQUZGRDUzMTEwRkZGRjAwCi06MTA2RjcwMDAyNDZFMDAwMTMxQzgwMEZGMTExOUZGQzYzOEM5MDAwMTk1Ci06MTA2RjgwMDAyRDFGMDAyMDUzRTAwMDFDMjU4QjAwMDEyNDBEMDAwMTYzCi06MTA2RjkwMDAwQTAwMDY0ODI0MEUwMDIwNTE0NjAwMTcyNThCMDAwMUU4Ci06MTA2RkEwMDAyNTA5MDAwMTMxMjgwMEZGMkQwOTAwMjA1MTIwMDAxMjgxCi06MTA2RkIwMDAyNThCMDAwMTI1NDMwMDAxMDEwRDUwMDQwMTRCMTAyNEQ1Ci06MTA2RkMwMDAyNTA5MDAwMTE0NDBGRkY0MzA2QUZGRkYzMTI3RkZGRjVECi06MTA2RkQwMDAxMEVFMDAwQzI1ODJGRkZGMzA0Q0ZGRkYwMDAwNTAyMTE3Ci06MTA2RkUwMDAzNDEwRkZGRjMxMjgwMEZGMkQwOTAwMjA1NTIwRkZGMjRCCi06MTA2RkYwMDAyNTQzMDAwMTI1OEIwMDAxMDE0NjQ4MjYwQTAwMDYwMkIwCi06MTA3MDAwMDAzMTZDRkZGRjAwMDAzODIxMDAwMDUwMjEwQTAwMDY1NEI3Ci06MTA3MDEwMDAzNDEwRkZGRjI3QkRGRkQ4QUZCMDAwMTAzMEYwRkZGRkU2Ci06MTA3MDIwMDBBRkIxMDAxNDAwMTAzOTQyMzIxMUZGRTAwMDA3MTA4MEE4Ci06MTA3MDMwMDBBRkIzMDAxQzAwQjEyODIzMzBEM0ZGRkZBRkIyMDAxODVDCi06MTA3MDQwMDAzMEE1RkZGRjAwODA5MDIxMDI2MDMwMjEwMDQ0MjAyMTA0Ci06MTA3MDUwMDBBRkJGMDAyMDBFMDAwNUUwMzIwNzAwMUYwMjIyODgyMThBCi06MTA3MDYwMDAzNDAzRkZGRjAyNDAyMDIxMDIwMDI4MjEwMjYwMzAyMTZBCi06MTA3MDcwMDAwMDAwMzgyMTEwNDMwMDA5MzIzMUZGRkYwMjIwMTAyMUE3Ci06MTA3MDgwMDA4RkJGMDAyMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNDg3Ci06MTA3MDkwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjgwRTAwMDVFMEI3Ci06MTA3MEEwMDAwMDAwMDAwMDAwNDA4ODIxMDIyMDEwMjE4RkJGMDAyMDM2Ci06MTA3MEIwMDA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDc2Ci06MTA3MEMwMDAwM0UwMDAwODI3QkQwMDI4MDAwNDI0MDAzQzAzNjAwMDAyCi06MTA3MEQwMDBBQzYwM0QwODEwQTAwMDAyMzQ4MjEwMDYzNDgyMTAxNjA1Ci06MTA3MEUwMDAwM0UwMDAwOEFDNjIzRDA0MjdCREZGRTBBRkIwMDAxMDM0Ci06MTA3MEYwMDAzMDkwMDBGRjJFMDIwMDA2QUZCRjAwMTgxMDQwMDAwOEJECi06MTA3MTAwMDBBRkIxMDAxNDAwMTAzMDgwM0MwMzA4MDAyNDYzNTc4NEEyCi06MTA3MTEwMDAwMEMzMjgyMThDQTQwMDAwMDA4MDAwMDgwMDAwMDAwMEFCCi06MTA3MTIwMDAwMDAwMjAyMThGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDE1Ci06MTA3MTMwMDAwMDgwMTAyMTAzRTAwMDA4MjdCRDAwMjA5NzkxMDAyQTVECi06MTA3MTQwMDAxNjIwMDA1MTAwMDAyMDIxM0MwMjA4MDA5MDQyMDAzMzJDCi06MTA3MTUwMDAwQTAwMDZCQjAwMDAwMDAwOTc4RDAwMjYxNUEwMDAzMTM0Ci06MTA3MTYwMDAwMDAwMjAyMTBBMDAwNkJCMjQwMjAwMDg5Nzg3MDAyNEEzCi06MTA3MTcwMDAxNEUwMDAxQTAwMDAxODIxMDA2MDIwMjEyNDAyMDAwMTAwCi06MTA3MTgwMDAxMDgwRkZFOThGQkYwMDE4MDAwNDI5QzIwMDQ1MzAyMTlDCi06MTA3MTkwMDAwMEE2NTgyQjExNjBGRkU0M0MwODgwMDAzQzA3MjAwMDRCCi06MTA3MUEwMDAwMDA1NjlDMDAxQTc2MDI1QUQwQzAwMjAzQzAzODAwOEU0Ci06MTA3MUIwMDAyNDAyMDAxRjI0NDJGRkZGQUM2MDAwMDAwNDQxRkZGREQ5Ci06MTA3MUMwMDAyNDYzMDAwNDI0QTUwMDAxMDBBNjcwMkIxNUMwRkZGNTYwCi06MTA3MUQwMDAwMDA1NjlDMDBBMDAwNkE1OEZCRjAwMTg5Nzg3MDAxQzJDCi06MTA3MUUwMDAzQzA0MDgwMDI0ODQ1QTU4MjQwNTA0MDAwRTAwMDY2MDVDCi06MTA3MUYwMDAyNDA2MDAwMTk3OEIwMDI0MjQ0NDAwMDEzMDhBRkZGRkZECi06MTA3MjAwMDAyNTY5RkZGRjJENDgwNDAwMDA0MDI4MjExNTAwMDA0MDlCCi06MTA3MjEwMDBBNzg5MDAyNDI0QUMzODAwMDAwQzE5QzAwQTAwMDZCOTY0Ci06MTA3MjIwMDBBNzgwMDAxQzk3ODcwMDFFM0MwNDA4MDAyNDg0NUFEOEJECi06MTA3MjMwMDAyNDA1MDQwMDBFMDAwNjYwMjQwNjAwMDE5Nzk5MDAyNjJDCi06MTA3MjQwMDAyNDQ0MDAwMTMwOThGRkZGMjcyRkZGRkYyRjBFMDQwMDdBCi06MTA3MjUwMDAwMDQwODgyMTE1QzAwMDJDQTc4RjAwMjZBNzgwMDAxRUEzCi06MTA3MjYwMDAzQTAyMDAwMzI2MjQwMTAwMzA4NEZGRkYwRTAwMDY4RDQxCi06MTA3MjcwMDAyQzQ1MDAwMTAwMTFGOEMwMjdGMDAxMDAwMDEwMjFDMENBCi06MTA3MjgwMDAwQTAwMDZCQjI0MDIwMDA4OTc4NTAwMkU5Nzg3MDAyMjdCCi06MTA3MjkwMDAzQzA0MDgwMDI0ODQ1QjU4MEUwMDA2NjAyNDA2MDAwMUFDCi06MTA3MkEwMDA5Nzg3MDAyQThGODkwMDJDMjQ0NTAwMDEzMEE4RkZGRjEyCi06MTA3MkIwMDAyNEUzRkZGRjAxMDkzMDJCMDA0MDgwMjExNEMwMDAxODk3Ci06MTA3MkMwMDBBNzgzMDAyQUE3ODAwMDIyOTc4NTAwMzAwRTAwMEY3NTQzCi06MTA3MkQwMDAwMjAwMjAyMTI0NEEwNTAwMzE0NEZGRkYwRTAwMDY4REU0Ci06MTA3MkUwMDAyNDA1MDAwMTNDMDUwODAwOTRBNTAwMzIwRTAwMEY3NTJFCi06MTA3MkYwMDAwMjAwMjAyMTI0NDUyMTAwM0MwMjA4MDA5MDQyMDAzMzc2Ci06MTA3MzAwMDAwQTAwMDZCQjAwMDUyMUMwMEEwMDA2RjNBNzg0MDAxRTgwCi06MTA3MzEwMDAyNEFDMzgwMDAwMEMxOUMwMEEwMDA2QjlBNzg0MDAxQzcwCi06MTA3MzIwMDAwQTAwMDcwREE3ODUwMDIyMzA4NDAwRkYyN0JERkZFODczCi06MTA3MzMwMDAyQzgyMDAwNkFGQkYwMDE0QUZCMDAwMTAxMDQwMDAxNTQzCi06MTA3MzQwMDAwMEEwMzgyMTAwMDQ0MDgwM0MwMzA4MDAyNDYzNTc5Q0JGCi06MTA3MzUwMDAwMTAzMjgyMThDQTQwMDAwMDA4MDAwMDgwMDAwMDAwMDI4Ci06MTA3MzYwMDAyNENDMDA3RjAwMDc1MUMyMDAwQzU5QzIzMTcwRkZGRkNFCi06MTA3MzcwMDAyNTQ3QzQwMDMwRTVGRkZGMjc4NDAwMUMwMjAwMzAyMUIwCi06MTA3MzgwMDAwRTAwMDVCNTI0MDcwMDAxOTc4NjAwMjgwMjA2MjAyMTdCCi06MTA3MzkwMDBBNzg0MDAyODhGQkYwMDE0OEZCMDAwMTAwM0UwMDAwOEZFCi06MTA3M0EwMDAyN0JEMDAxODNDMDUwODAwOENBNTAwMzAwMDA3NzlDMkY1Ci06MTA3M0IwMDAwRTAwMDM4MTI1RTRERjAwMzA0NUZGRkYzQzA0MDgwMDk4Ci06MTA3M0MwMDAyNDg0NUI1ODI0MDYwMDAxMEUwMDA1QjUyNDA3MDAwMTQzCi06MTA3M0QwMDA5NzhFMDAyQThGQkYwMDE0OEZCMDAwMTAyNUNEMDAwMUJBCi06MTA3M0UwMDAyN0JEMDAxODAzRTAwMDA4QTc4RDAwMkEwMDA3QzlDMkM2Ci06MTA3M0YwMDAyNzM4RkYwMDAwMTg3OEMyMzFGMEZGRkYzQzA0MDgwMDc2Ci06MTA3NDAwMDAyNDg0NUFEODAyMDAyODIxMjQwNjAwMDEwRTAwMDVCNTY0Ci06MTA3NDEwMDAyNDA3MDAwMTk3OEQwMDI2MjYwRTAxMDAwMDBFODQwMDJGCi06MTA3NDIwMDAyNUFDMDAwMTNDMEI2MDAwQTc4QzAwMjZBRDYwM0QwODM4Ci06MTA3NDMwMDAzNjA0MDAwNjAwMDAzMDIxM0MwNzYwMDA4Q0UyM0QwNDY5Ci06MTA3NDQwMDAzMDVGMDAwNjE3RTBGRkZEMjRDOTAwMDEwMDA2MUIwMEE1Ci06MTA3NDUwMDAzMTI2MDBGRjAwNjQ0MDI1MkNDNTAwMDRBQ0U4M0QwNDQzCi06MTA3NDYwMDAxNEEwRkZGNjhGQkYwMDE0OEZCMDAwMTAwM0UwMDAwOEQ3Ci06MTA3NDcwMDAyN0JEMDAxODAwMDc1MUMyMjU0OUM4MDAyNDA2MDAwMTk1Ci06MTA3NDgwMDAyNDA3MDAwMTNDMDQwODAwMjQ4NDVBNTgwRTAwMDVCNTY2Ci06MTA3NDkwMDAzMTI1RkZGRjk3ODcwMDI0OEZCRjAwMTQ4RkIwMDAxMEE1Ci06MTA3NEEwMDAyNEU2MDAwMTI3QkQwMDE4MDNFMDAwMDhBNzg2MDAyNDk5Ci06MTA3NEIwMDAzQzA2NjAxODNDMDkwODAwMjUyOTAwRkNBQ0M5NTAyQzhBCi06MTA3NEMwMDA4Q0M4NTAwMDNDMDU4MDAwM0MwMjAwMDIzNTA3MDA4MDVCCi06MTA3NEQwMDBBQ0M3NTAwMDNDMDQwODAwMjQ4NDFGRTAzQzAzMDgwMEIzCi06MTA3NEUwMDAyNDYzMUY5OEFDQTUwMDA4QUNBMjAwMEMzQzAxMDgwMDY2Ci06MTA3NEYwMDBBQzI0NTlBNDNDMDEwODAwQUMyMzU5QTgwM0UwMDAwOEJGCi06MTA3NTAwMDAyNDAyMDAwMTAwQTAzMDIxM0MxQzA4MDAyNzlDNTlBQzNCCi06MTA3NTEwMDAzQzBDMDQwMDNDMEIwMDAyMDA4QjM4MjYwMDhDNDAyNkZCCi06MTA3NTIwMDAyQ0UyMDAwMTAwMDc1MDJCMkQwNTAwMDEwMDBBNDg4MEM1Ci06MTA3NTMwMDAzQzAzMDgwMDI0NjM1OUE0MDA0NTIwMjUwMTIzMTgyMTk5Ci06MTA3NTQwMDAxMDgwMDAwMzAwMDAxMDIxQUM2NjAwMDAyNDAyMDAwMTNFCi06MTA3NTUwMDAwM0UwMDAwODAwMDAwMDAwM0MxQzA4MDAyNzlDNTlBQzE4Ci06MTA3NTYwMDAzQzBCMDQwMDNDMEEwMDAyMDA4QTMwMjYwMDhCMzgyNkJGCi06MTA3NTcwMDAyQ0MyMDAwMTAwMDY0ODJCMkNFNTAwMDEwMDA5NDA4MEM4Ci06MTA3NTgwMDAzQzAzMDgwMDI0NjM1OUE0MDA0NTIwMjUwMTAzMTgyMTY5Ci06MTA3NTkwMDAxMDgwMDAwNTAwMDAxMDIxM0MwQzA4MDAyNThDMUY5ODZECi06MTA3NUEwMDBBQzZDMDAwMDI0MDIwMDAxMDNFMDAwMDgwMDAwMDAwMEIxCi06MTA3NUIwMDAzQzA5MDAwMjNDMDgwNDAwMDA4ODMwMjYwMDg5MzgyNjc3Ci06MTA3NUMwMDAyQ0MzMDAwMTAwODAyODIxMkNFNDAwMDEwMDgzMTAyNTM5Ci06MTA3NUQwMDAxMDQwMDAwQjAwMDAzMDIxM0MxQzA4MDAyNzlDNTlBQ0Q3Ci06MTA3NUUwMDAzQzBBODAwMDhENEUwMDA4MjQwNjAwMDEwMUNBNjgyNTZGCi06MTA3NUYwMDBBRDREMDAwODhENEMwMDBDMDE4NTU4MjVBRDRCMDAwQzlECi06MTA3NjAwMDAwM0UwMDAwODAwQzAxMDIxM0MxQzA4MDAyNzlDNTlBQzc2Ci06MTA3NjEwMDAzQzA1ODAwMDhDQTYwMDBDMDAwNDIwMjcyNDAyMDAwMUY5Ci06MTA3NjIwMDAwMEM0MTgyNDAzRTAwMDA4QUNBMzAwMEMzQzAyMDAwMkQ0Ci06MTA3NjMwMDAxMDgyMDAwQjNDMDU2MDAwM0MwNzA0MDAxMDg3MDAwMzJCCi06MTA3NjQwMDAwMDAwMDAwMDAzRTAwMDA4MDAwMDAwMDA4Q0E5MDhEMDQyCi06MTA3NjUwMDAyNDBBRkZGRDAxMkE0MDI0MDNFMDAwMDhBQ0E4MDhEMDVBCi06MTA3NjYwMDA4Q0E0MDhEMDI0MDZGRkZFMDA4NjE4MjQwM0UwMDAwODNFCi06MTA3NjcwMDBBQ0EzMDhEMDNDMDU2MDFBMzRBNjAwMTA4Q0MzMDA4MDZGCi06MTA3NjgwMDAyN0JERkZGODhDQzUwMDg0QUZBMzAwMDA5M0E0MDAwMEMxCi06MTA3NjkwMDAyNDAyMDAxMDEwODIwMDAzQUZBNTAwMDQwM0UwMDAwOERDCi06MTA3NkEwMDAyN0JEMDAwODkzQTcwMDAxMTRFMDAwMTQ5N0FDMDAwMjY2Ci06MTA3NkIwMDA5N0I4MDAwMjNDMEY4MDAwMzMwRUZGRkMwMUNGNjgyMTE5Ci06MTA3NkMwMDBBREE1MDAwMEEzQTAwMDAwM0MwNjYwMDA4Q0M3MDhEMDU4Ci06MTA3NkQwMDAyNDA4RkZGRTNDMDQ2MDFBMDBFODI4MjRBQ0M1MDhEMDRBCi06MTA3NkUwMDA4RkEzMDAwNDhGQTIwMDAwMzQ5OTAwMTAyN0JEMDAwODZBCi06MTA3NkYwMDBBRjIyMDA4MDAzRTAwMDA4QUYyMzAwODQzQzBCODAwMDMxCi06MTA3NzAwMDAzMThBRkZGQzAxNEI0ODIxOEQyODAwMDAwQTAwMDgwQzNCCi06MTA3NzEwMDBBRkE4MDAwNDI3QkRGRkU4QUZCRjAwMTAzQzFDMDgwMDY1Ci06MTA3NzIwMDAyNzlDNTlBQzNDMDU4MDAwOENBNDAwMEM4Q0EyMDAwNDYyCi06MTA3NzMwMDAzQzAzMDAwMjAwNDQyODI0MTBBMDAwMEEwMEEzMTgyNERGCi06MTA3NzQwMDAzQzA2MDQwMDNDMDQwMDAyMTQ2MDAwMDkwMEE2MTAyNDVBCi06MTA3NzUwMDAxNDQwMDAwRjNDMDQwNDAwMDAwMDAwMEQzQzFDMDgwMDE1Ci06MTA3NzYwMDAyNzlDNTlBQzhGQkYwMDEwMDNFMDAwMDgyN0JEMDAxODBDCi06MTA3NzcwMDAzQzAyMDgwMDhDNDI1OUE0MDA0MEY4MDkwMDAwMDAwMEI3Ci06MTA3NzgwMDAzQzFDMDgwMDI3OUM1OUFDMEEwMDA4MzU4RkJGMDAxMDJDCi06MTA3NzkwMDAzQzAyMDgwMDhDNDI1OUE4MDA0MEY4MDkwMDAwMDAwMDkzCi06MTA3N0EwMDAwQTAwMDgzQjAwMDAwMDAwM0MwODgwMDA4RDAyMDFCODgwCi06MTA3N0IwMDAwNDQwRkZGRTM1MDkwMTgwQUQyNDAwMDAzQzAzMTAwMEE5Ci06MTA3N0MwMDAyNDA0MDA0MEFEMjUwMDA0QTEyNDAwMDhBMTI2MDAwOURFCi06MTA3N0QwMDBBNTI3MDAwQTAzRTAwMDA4QUQwMzAxQjgzMDg0RkZGRkNECi06MTA3N0UwMDAwMDgwMzgyMTMwQTVGRkZGMDAwMDIwMjEwQTAwMDg0NTU1Ci06MTA3N0YwMDAyNDA2MDA4MDMwODdGRkZGOENBNDAwMDAyNDA2MDAzODk4Ci06MTA3ODAwMDAwQTAwMDg0NTAwMDAyODIxOEY4MzAwNzg4Rjg2MDA3MEM5Ci06MTA3ODEwMDAxMDY2MDAwQjAwODA0MDIxM0MwNzA4MDAyNEU3NUI2OEVECi06MTA3ODIwMDAwMDAzMjhDMDAwQTcxMDIxOEM0NDAwMDAyNDYzMDAwMTNECi06MTA3ODMwMDAxMDg4MDAwNTMwNjMwMDBGNTQ2NkZGRkEwMDAzMjhDMDZCCi06MTA3ODQwMDAwM0UwMDAwODAwMDAxMDIxM0MwNzA4MDAyNEU3NUI2Q0ZGCi06MTA3ODUwMDAwMEE3MzAyMTAzRTAwMDA4OENDMjAwMDAzQzAzOTAwMDI4Ci06MTA3ODYwMDAzNDYyMDAwMTAwODIyMDI1M0MwMzgwMDBBQzY0MDAyMENCCi06MTA3ODcwMDA4QzY1MDAyMDA0QTBGRkZFMDAwMDAwMDAwM0UwMDAwODZCCi06MTA3ODgwMDAwMDAwMDAwMDNDMDI4MDAwMzQ0MzAwMDEwMDgzMjAyNUZBCi06MTA3ODkwMDAwM0UwMDAwOEFDNDQwMDIwMjdCREZGRTBBRkIxMDAxNEI2Ci06MTA3OEEwMDAzMDkxRkZGRkFGQjAwMDEwQUZCRjAwMTgxMjIwMDAxM0RGCi06MTA3OEIwMDAwMEEwODAyMThDQTIwMDAwMjQwNDAwMDIyNDA2MDIwMDAzCi06MTA3OEMwMDAxMDQwMDAwRjAwNDAyODIxMEUwMDA3MjUwMDAwMDAwMDk2Ci06MTA3OEQwMDAwMDAwMTAyMUFFMDAwMDAwMDIyMDM4MjE4RkJGMDAxOEU4Ci06MTA3OEUwMDA4RkIxMDAxNDhGQjAwMDEwMDA0MDIwMjEwMDAwMjgyMTJCCi06MTA3OEYwMDAwMDAwMzAyMTBBMDAwODQ1MjdCRDAwMjA4Q0EyMDAwMEFFCi06MTA3OTAwMDAwMjIwMzgyMThGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMEYzCi06MTA3OTEwMDAwMDQwMjAyMTAwMDAyODIxMDAwMDMwMjEwQTAwMDg0NUY1Ci06MTA3OTIwMDAyN0JEMDAyMDAwQTAxMDIxMzA4N0ZGRkY4Q0E1MDAwNDk4Ci06MTA3OTMwMDA4QzQ0MDAwMDBBMDAwODQ1MjQwNjAwMDY4RjgzRkQ5QzQ1Ci06MTA3OTQwMDAyN0JERkZFOEFGQkYwMDE0QUZCMDAwMTA5MDY3MDAwODdDCi06MTA3OTUwMDAwMDgwMTAyMTAwODAyODIxMzBFNjAwNDAwMDAwMjAyMTE2Ci06MTA3OTYwMDAxMEMwMDAwODhDNTAwMDAwMEUwMDAwQkQwMjAwMjAyMTU1Ci06MTA3OTcwMDAwMjAwMjAyMThGQkYwMDE0OEZCMDAwMTAwQTAwMDU0OEJDCi06MTA3OTgwMDAyN0JEMDAxODBFMDAwOEE0MDAwMDAwMDAwRTAwMDBCRDc2Ci06MTA3OTkwMDAwMjAwMjAyMTAyMDAyMDIxOEZCRjAwMTQ4RkIwMDAxMEIwCi06MTA3OUEwMDAwQTAwMDU0ODI3QkQwMDE4MjdCREZGRTBBRkIwMDAxMDUyCi06MTA3OUIwMDA4RjkwRkQ5Q0FGQkYwMDFDQUZCMjAwMThBRkIxMDAxNDk4Ci06MTA3OUMwMDA5MjA2MDAwMTAwODA4ODIxMEUwMDA4NzIzMEQyMDAwNDY3Ci06MTA3OUQwMDA5MjA0MDAwNTAwMTEyOUMyQTYwNTAwMDAzNDgzMDA0MDZFCi06MTA3OUUwMDBBMjAzMDAwNTBFMDAwODdDMDIyMDIwMjEwRTAwMDU0QTlCCi06MTA3OUYwMDAwMjIwMjAyMTI0MDIwMDAxQUUwMjAwMEMwMjIwMjgyMUQ2Ci06MTA3QTAwMDBBNjAyMDAxMDI0MDQwMDAyQTYwMjAwMTIyNDA2MDIwMEFFCi06MTA3QTEwMDBBNjAyMDAxNDBFMDAwNzI1QTYwMjAwMTYxNjQwMDAwRjRECi06MTA3QTIwMDA4RkJGMDAxQzk3OEMwMDc0M0MwQjA4MDA4RDZCMDA3ODk2Ci06MTA3QTMwMDAyNTg4RkZGRjMxMDlGRkZGMjU2QTAwMDEwMTJBMzgyQjQ1Ci06MTA3QTQwMDAxMEUwMDAwNkE3ODgwMDc0M0MwRjYwMDYyNDBFMDAxNkE0Ci06MTA3QTUwMDAzNUVEMDAxMEFEQUUwMDUwOEZCRjAwMUM4RkIyMDAxODg2Ci06MTA3QTYwMDA4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAyMDg0Ci06MTA3QTcwMDAyN0JERkZFMEFGQjEwMDE0QUZCRjAwMThBRkIwMDAxMERBCi06MTA3QTgwMDAxMDgwMDAwNDAwQTA4ODIxMjQwMjAwODAxMDgyMDAwN0RBCi06MTA3QTkwMDAwMDAwMDAwMDAwMDAwMDBEOEZCRjAwMTg4RkIxMDAxNDFGCi06MTA3QUEwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjAwRTAwMDg3MjEwCi06MTA3QUIwMDAwMEEwMjAyMThGODZGRDlDMDIyMDIwMjE5MEM1MDAwNTdBCi06MTA3QUMwMDAwRTAwMDg3QzMwQjAwMEZGMjQwMzAwM0UxNjAzRkZGMUQ3Ci06MTA3QUQwMDAzQzA2ODAwMDhDQzQwMTc4MDQ4MEZGRkUzNEM4MDE0MDVECi06MTA3QUUwMDAyNDA5MDAwNzNDMDcxMDAwQUQxMTAwMDAwMjIwMjAyMUVFCi06MTA3QUYwMDBBMTA5MDAwNDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMENGCi06MTA3QjAwMDBBQ0M3MDE3ODBBMDAwOEM1MjdCRDAwMjAyN0JERkZFMEVCCi06MTA3QjEwMDBBRkIwMDAxMEFGQkYwMDE4QUZCMTAwMTQzQzEwODAwMDMwCi06MTA3QjIwMDA4RTExMDAyMDAwMDAwMDAwMEUwMDA1NEFBRTA0MDAyMDY3Ci06MTA3QjMwMDBBRTExMDAyMDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDVECi06MTA3QjQwMDAwM0UwMDAwODI3QkQwMDIwMzA4NEZGRkYwMDgwMzgyMUJCCi06MTA3QjUwMDAyNDA2MDAzNTAwQTAyMDIxMEEwMDA4NDUwMDAwMjgyMTQ1Ci06MTA3QjYwMDAzMDg0RkZGRjAwODAzODIxMjQwNjAwMzYwMEEwMjAyMTQ5Ci06MTA3QjcwMDAwQTAwMDg0NTAwMDAyODIxMjdCREZGRDBBRkI1MDAyNDJBCi06MTA3QjgwMDAzMDk1RkZGRkFGQjYwMDI4QUZCNDAwMjBBRkJGMDAyQzg4Ci06MTA3QjkwMDBBRkIzMDAxQ0FGQjIwMDE4QUZCMTAwMTRBRkIwMDAxMDBCCi06MTA3QkEwMDAzMEI2RkZGRjEyQTAwMDI3MDAwMEEwMjE4RjkyMDA1OERFCi06MTA3QkIwMDA4RTQzMDAwMDNDMDY4MDAwMjQwMjAwNDAwMDAzM0UwMjg5Ci06MTA3QkMwMDAwMDAzMkMwMjMwRTQwMDdGMDA2Njk4MjQxNDgyMDAxRDFDCi06MTA3QkQwMDAzMEE1MDBGRjhGODMwMDY4MkM2ODAwMEExMTAwMDAxMDk4Ci06MTA3QkUwMDA4RjhEMDA0NDAwMDM1ODgwM0MwQzA4MDAyNThDNTdCODRBCi06MTA3QkYwMDAwMTZDNTAyMThENDkwMDAwMDEyMDAwMDgwMDAwMDAwMEE4Ci06MTA3QzAwMDAwMkQ0MzAyMTMwQzVGRkZGMEUwMDA4NTIyNDA0MDA4NDQ2Ci06MTA3QzEwMDAxNjYwMDAwMjhGOTIwMDU4QUY4MDAwNjg4RjhEMDA0NDdDCi06MTA3QzIwMDAyNjU5MDAyMDI2OTgwMDAxMDMyMDkwMjEzMzE0RkZGRkRECi06MTA3QzMwMDAxNUEwMDAwNEFGOTkwMDU4MDI5NTIwMkIxNDgwRkZEQzlBCi06MTA3QzQwMDAwMDAwMDAwMDAyODAxMDIxOEZCRjAwMkM4RkI2MDAyODlBCi06MTA3QzUwMDA4RkI1MDAyNDhGQjQwMDIwOEZCMzAwMUM4RkIyMDAxOEEyCi06MTA3QzYwMDA4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAzMDcyCi06MTA3QzcwMDAyNDA3MDAzNDE0QTcwMTQ5MDAwMDAwMDA5MjQ3MDAwRUI5Ci06MTA3QzgwMDA4RjlGRkRBMDhGOTBGRDlDMjQxODE2MDBBM0U3MDAxOTdDCi06MTA3QzkwMDA5MjQyMDAwRDNDMDg4MDAwM0MwNzgwMENBM0UyMDAxOEQzCi06MTA3Q0EwMDA5NjRBMDAxMjNDMEQ2MDAwM0MxMTdGRkZBNjBBMDA1QzYyCi06MTA3Q0IwMDA5NjQ0MDAxMDM2MjNGRkZGMjQwMjAwMDUzMDk5RkZGRjkxCi06MTA3Q0MwMDBBRTE5MDA1NDhFNDYwMDFDQUQxODAwMjg4Q0VGMDAwMDQxCi06MTA3Q0QwMDA4REFFNDQ0ODAxRTY0ODI2MDFDOTMwMjFBRTA2MDAzODgxCi06MTA3Q0UwMDA4RTA1MDAzODI0Q0IwMDAxM0MwRTdGMDBBRTA1MDAzQzIxCi06MTA3Q0YwMDA4RTBDMDAzQ0FGRUMwMDA0QUUwQjAwMjA4RTEzMDAyMDc1Ci06MTA3RDAwMDBBRTEzMDAxQ0EzRTAwMDFCQUUwMzAwMkNBM0UyMDAxMjg0Ci06MTA3RDEwMDA4RTRBMDAxNDI0MTMwMDUwQUUwQTAwMzQ4RTA0MDAzNDNFCi06MTA3RDIwMDBBRkU0MDAxNDhFNTkwMDE4QUUxOTAwNDg5MjU4MDAwQ0E4Ci06MTA3RDMwMDBBMjE4MDA0RTkyMEQwMDA4MzVBRjAwMjBBMjBGMDAwOEQ3Ci06MTA3RDQwMDA4RTA5MDAxODAxMkUyODI0MzRBQzQwMDBBRTBDMDAxODE3Ci06MTA3RDUwMDA5MjBCMDAwMDMxNzIwMEZGMTI1MzAyN0YyNDAzRkY4MDU4Ci06MTA3RDYwMDAzQzA0MDgwMDI0ODQ1QkU4MEUwMDA4QUEwMDAwMDAwMDIwCi06MTA3RDcwMDAzQzExMDgwMDhFMzE1QkU4MEUwMDA4NzIwMjIwMjAyMUMxCi06MTA3RDgwMDAyNDA1MDAwNDI0MDgwMDAxQTIwNTAwMjUwMjIwMjAyMTZBCi06MTA3RDkwMDAwRTAwMDg3Q0EyMDgwMDA1M0MwNTgwMDA4Q0IwMDE3ODJDCi06MTA3REEwMDAwNjAwRkZGRThGOTIwMDU4MzRBRTAxNDAyNDBGMDAwMkZGCi06MTA3REIwMDAzQzA5MTAwMEFERDEwMDAwQTFDRjAwMDRBQ0E5MDE3OEFFCi06MTA3REMwMDAwQTAwMDk2MkFGODAwMDY4MkNBRDAwMzc1MUEwRkY5NDEzCi06MTA3REQwMDA4RjhEMDA0NDAwMDU4MDgwM0MxMTA4MDAyNjMxNTdFMDVCCi06MTA3REUwMDAwMjExNzgyMThERUUwMDAwMDFDMDAwMDgwMDAwMDAwMEEzCi06MTA3REYwMDAyNDExMDAwNDE0QjEwMDhDM0MwNzgwMDAzQzA4MDgwMEVBCi06MTA3RTAwMDA4RDA4NUJFODhGODZGRDlDQUNFODAwMjA4RTQ1MDAwODVECi06MTA3RTEwMDA4Rjk5RkRBMDI0MEQwMDUwQUNDNTAwMzA4RTRDMDAwODk5Ci06MTA3RTIwMDBBQ0NDMDA1MDhFNEIwMDBDQUNDQjAwMzQ4RTQzMDAxMDE5Ci06MTA3RTMwMDBBQ0MzMDAzODhFNEEwMDEwQUNDQTAwNTQ4RTQyMDAxNDA1Ci06MTA3RTQwMDBBQ0MyMDAzQzhFNUYwMDE4QUYzRjAwMDQ4RTUwMDAxQzk3Ci06MTA3RTUwMDBBQ0QwMDAyMDkwQzQwMDAwMzA5ODAwRkYxMzBEMDI0QUZGCi06MTA3RTYwMDAwMDAwMDAwMDhDQzQwMDM0OENEMDAwMzAwMDkwMzAyMzFGCi06MTA3RTcwMDAwNEMwMDBGMTI0MDQwMDhDMTI2MDAwRUUyNDAyMDAwMzEwCi06MTA3RTgwMDAwQTAwMDk2MkFGODIwMDY4MjQxOTAwMDUxNEI5MDA2NjZGCi06MTA3RTkwMDAzQzA1ODAwMDNDMDgwODAwOEQwODVCRTg4Rjg2RkQ5QzRGCi06MTA3RUEwMDBBQ0E4MDAyMDhFNEMwMDA0OEY4QUZEQTAyNDA3MjAwMDdGCi06MTA3RUIwMDBBQ0NDMDAxQzkyNEIwMDA4MjQxMjAwMDhBMTRCMDAxOTA2Ci06MTA3RUMwMDA4RjgyMDA1ODkwNDMwMDA5QTE0MzAwMTg4Rjg1MDA1ODA1Ci06MTA3RUQwMDA5MEJGMDAwQTMzRTQwMEZGMTA5MjAwMTAyODg5MDAwOUM3Ci06MTA3RUUwMDAxNTIwMDBCQTI0MEUwMDAyMjQwRDAwMjAxMDhEMDAwQjc2Ci06MTA3RUYwMDAzNDA3ODAwMDI4OTgwMDIxMTcwMDAwMDgyNDA3NDAwMDVDCi06MTA3RjAwMDAyNDEwMDA0MDEwOTAwMDA1M0MwNzAwMDEyNDE5MDA4MDU3Ci06MTA3RjEwMDAxMDk5MDAwMjNDMDcwMDAyMjQwNzQwMDA4Q0MyMDAxOEEwCi06MTA3RjIwMDAzQzAzRkYwMDAwNDM1MDI0MDE0N0Y4MjVBQ0RGMDAxODU0Ci06MTA3RjMwMDA5MEIyMDAwQkEwRDIwMDI3OEY4MzAwNTg5NDY0MDAwQ0VECi06MTA3RjQwMDAxMDgwMDFGRTAwMDAwMDAwOTQ2NzAwMEMzQzFGODAwMEMwCi06MTA3RjUwMDAyNDA1RkZCRkE0QzcwMDVDOTA2MzAwMEUyNDA3MDAwNDQzCi06MTA3RjYwMDBBMEMzMDAwODhGODIwMDU4OTA0QTAwMEZBMENBMDAwOUUxCi06MTA3RjcwMDA4Rjg5MDA1ODhEMzIwMDEwOEZFNDAwNzQwMjQ0QzgyM0FBCi06MTA3RjgwMDBBQ0Q5MDA1ODhEMzAwMDE0QUNEMDAwMkM5NTM4MDAxOEI2Ci06MTA3RjkwMDAzMzBERkZGRkFDQ0QwMDQwOTUzMTAwMUEzMjJGRkZGRkFCCi06MTA3RkEwMDBBQ0NGMDA0NDhEMkUwMDFDQUNDRTAwNDg5MTI4MDAwRUIyCi06MTA3RkIwMDBBMEM4MDAwODkwQ0MwMDA4MDE4NTU4MjQxMjYwMDFCNkMyCi06MTA3RkMwMDBBMENCMDAwODhGOTIwMDU4MEEwMDA5NjJBRjg3MDA2OEIyCi06MTA3RkQwMDAyNDA2MDAwNjE0QTYwMDE0M0MwRTgwMDAzQzBGMDgwMDg2Ci06MTA3RkUwMDA4REVGNUJFODhGODVGRDk4QURDRjAwMjA4RTQ5MDAxODlFCi06MTA3RkYwMDA4Rjg2RkQ5QzhGOEJGREEwQUNBOTAwMDA4Q0M4MDAzODNCCi06MTA4MDAwMDAyNDA0MDAwNUFDQTgwMDA0OENDQzAwM0MxMjYwMDA4MTY0Ci06MTA4MDEwMDBBRDZDMDAwMDBBMDAwOTYyQUY4NDAwNjgyNDExMDAwN0ZCCi06MTA4MDIwMDAxMEIxMDA0QjI0MDQwMDA2M0MwNTA4MDAyNEE1NUJFOEMxCi06MTA4MDMwMDAwRTAwMDg4MTI0MDQwMDgxOEY5MjAwNTgwMDEzMTAyQjM5Ci06MTA4MDQwMDAwQTAwMDk2MkFGODIwMDY4MjQxRjAwMjMxNEJGRkZGNkY0Ci06MTA4MDUwMDAzQzBDODAwMDNDMDUwODAwOENBNTVCRTg4RjhCRkRBMEU0Ci06MTA4MDYwMDBBRDg1MDAyMDhGOTFGRDlDOEU0NjAwMDQyNTY0MDAyMDg0Ci06MTA4MDcwMDAyNjQ1MDAxNEFFMjYwMDI4MjQwNjAwMDMwRTAwMEY4MUJBCi06MTA4MDgwMDAyNTcwMDAzMDhGODcwMDU4MDIwMDIwMjEyNDA2MDAwMzRECi06MTA4MDkwMDAwRTAwMEY4MTI0RTUwMDA4M0MwNDA4MDAyNDg0NUJFOEZFCi06MTA4MEEwMDAwRTAwMDhBQTAwMDAwMDAwOTIyMzAwMDAyNDBBMDA1MERECi06MTA4MEIwMDAzMDYyMDBGRjU0NEFGRkUxOEY5MjAwNTgwRTAwMEY2Q0FGCi06MTA4MEMwMDAwMDAwMDAwMDBBMDAwQTZBOEY5MjAwNTgyNDA4MDAzMzVBCi06MTA4MEQwMDAxNEE4MDAzMjNDMDM4MDAwM0MxMTA4MDA4RTMxNUJFODlDCi06MTA4MEUwMDA4RjhGRkRBMEFDNzEwMDIwOEU0MjAwMDgyNDBEMDAyODY3Ci06MTA4MEYwMDA4Rjg5RkQ5Q0FERTIwMDMwOEU0QTAwMEMyNDA2MDAwOUY5Ci06MTA4MTAwMDBBREVBMDAzNDhFNUYwMDEwQURGRjAwMzg4RTQ0MDAxNERECi06MTA4MTEwMDBBREU0MDAyMDhFNTkwMDE4QURGOTAwMjQ4RTU4MDAxQ0UzCi06MTA4MTIwMDBBREY4MDAyOEExRUQwMDExOEU0RTAwMDQxMjYwMDAzMTYwCi06MTA4MTMwMDBBRDJFMDAyODhGOTIwMDU4MEEwMDA5NjJBRjg2MDA2OEIxCi06MTA4MTQwMDAyNDBEMDAyMjE0QURGRkI4MDAwMDAwMDAyNDA0MDAwNzM1Ci06MTA4MTUwMDAzQzEwMDgwMDhFMTA1QkU4M0MxODgwMDBBRjEwMDAyMDM3Ci06MTA4MTYwMDA1NjYwRkVBRUFGODQwMDY4M0MwNDA4MDAyNDg0NUJFOERGCi06MTA4MTcwMDAwRTAwMDhBQTI0MTMwMDUwOEY4NEZEOUM5MDkyMDAwMEVBCi06MTA4MTgwMDAzMjU5MDBGRjEzMzMwMTRCMDAwMDAwMDA4RjkyMDA1ODVBCi06MTA4MTkwMDAwMDAwMjAyMTBBMDAwOTYyQUY4NDAwNjgzQzA1MDgwMDQ1Ci06MTA4MUEwMDAyNEE1NUJFODBFMDAwODU4MjQwNDAwODEwQTAwMEE2QTJFCi06MTA4MUIwMDA4RjkyMDA1ODAyRDQ5ODIxMzI2NUZGRkYwRTAwMDg1MkJBCi06MTA4MUMwMDAyNDA0MDA4NDBBMDAwOTYyOEY5MjAwNTgxMDhFRkY1MzI1Ci06MTA4MUQwMDAyNDA3MDQwMDI4ODcwMDAzMTBFMDAxNzkyNDExMDAwNDFCCi06MTA4MUUwMDAyNDBGMDAwMTU0OEZGRjREMjQwNzQwMDAwQTAwMEEyMjhCCi06MTA4MUYwMDAyNDA3MDEwMDNDMDUwODAwMjRBNTVCRTgwRTAwMDhBNDQ0Ci06MTA4MjAwMDAyNDA0MDA4MjhGOTIwMDU4MDAwMDMwMjEwQTAwMDk2Mjg1Ci06MTA4MjEwMDBBRjg2MDA2ODNDMDQwODAwMjQ4NDVCRTg4Q0MyMDAzODA4Ci06MTA4MjIwMDAwRTAwMDhBQThDQzMwMDNDOEY5MjAwNTgwQTAwMEFDMEI2Ci06MTA4MjMwMDAwMDAwMjAyMTI0MDQwMDgyM0MwNTA4MDAyNEE1NUJFOEZFCi06MTA4MjQwMDAwRTAwMDhBNDAwMDAwMDAwOEY5MjAwNTgwMDAwMTAyMUNBCi06MTA4MjUwMDAwQTAwMDk2MkFGODIwMDY4OEU1MDAwMDQ4RjkxRkQ5Qzc1Ci06MTA4MjYwMDAzQzA3ODAwMEFDRjAwMDIwOTIyQzAwMDUwMjAwMjgyMTgxCi06MTA4MjcwMDAzMThCMDAwMjE1NjAwMTU2MjQwNDAwOEE4RjkyRkRBMDA0Ci06MTA4MjgwMDAyNDA0MDA4RDkyNDUwMDFCMzBBNjAwMjAxNEMwMDE1MDJDCi06MTA4MjkwMDAwMjAwMjgyMTkyMkUwMDA5MjQwODAwMTIzMUM5MDBGRjkzCi06MTA4MkEwMDAxMTI4MDE0QjI0MDQwMDgxMEUwMDA4NzIwMjAwMjAyMUQ1Ci06MTA4MkIwMDA5MjU4MDAxQjI0MEYwMDA0MDIwMDIwMjEzNzBEMDA0MkI5Ci06MTA4MkMwMDBBMjREMDAxQjBFMDAwODdDQTIyRjAwMjUzQzA1ODAwMDVCCi06MTA4MkQwMDA4Q0E0MDE3ODA0ODBGRkZFMzRCOTAxNDAyNDFGMDAwMjAxCi06MTA4MkUwMDBBRjMwMDAwMEEzM0YwMDA0OEY5MjAwNTgzQzEwMTAwMEY0Ci06MTA4MkYwMDBBQ0IwMDE3ODBBMDAwQTZCMDAxMzEwMkI4RTUwMDAwNEZBCi06MTA4MzAwMDA4RjkxRkQ5QzNDMDM4MDAwQUM3MDAwMjA5MjJBMDAwNUY4Ci06MTA4MzEwMDAwMjAwMjgyMTMxNDIwMDAyMTQ0MDAwMTcyNDA0MDA4QTgwCi06MTA4MzIwMDA5MjJDMDAwOTI0MTIwMDA0MDIwMDI4MjEzMThCMDBGRjQ2Ci06MTA4MzMwMDAxMTcyMDAxMTI0MDQwMDgxMEUwMDA4NzIwMjAwMjAyMTM1Ci06MTA4MzQwMDA4Rjg5RkRBMDI0MDgwMDEyMjQwNUZGRkU5MTJGMDAxQjM5Ci06MTA4MzUwMDAwMjAwMjAyMTM1RUUwMDIwQTEyRTAwMUJBMjI4MDAwOURBCi06MTA4MzYwMDA5MjI2MDAwNTAwQzUzODI0MEUwMDA4N0NBMjI3MDAwNUNGCi06MTA4MzcwMDAwMjAwMjgyMTAwMDAyMDIxMEUwMDA5MzMwMDAwMDAwMDI3Ci06MTA4MzgwMDAwQTAwMEE2QThGOTIwMDU4OEU0QzAwMDQzQzA3ODAwMDU1Ci06MTA4MzkwMDAzQzEwMDgwMDI2MTA1QkU4QUNFQzAwMjAzQzAxMDgwMDEzCi06MTA4M0EwMDBBQzJDNUJFODkyNEIwMDAzMzE3MTAwMDQxMjIwMDEzQkJFCi06MTA4M0IwMDA4Rjg0RkQ5QzI0MDIwMDA2QTA4MjAwMDk5MjRGMDAxQkJFCi06MTA4M0MwMDAyNDBFRkZDMDMxRTkwMDNGMDEyRTQwMjVBMDg4MDAwODlGCi06MTA4M0QwMDA5MjQ1MDAwMzMwQTYwMDAxMTRDMDAxMzIwMDAwMDAwMEU1Ci06MTA4M0UwMDA4RTQyMDAwOEFFMDIwMDA4M0MwMjA4MDA4QzQyNUJGMDlFCi06MTA4M0YwMDAxMDQwMDEzMThGOTBGREEwMDAwMjE5QzI4RjhERkQ5Q0FECi06MTA4NDAwMDBBNjAzMDAwQzhFNEEwMDBDMjQxODAwMDEyNDA0MDAxNDVBCi06MTA4NDEwMDBBRTBBMDAyQzhFNDIwMDEwQUUwMjAwMUM5NjVGMDAxNkMxCi06MTA4NDIwMDBBNjFGMDAzQzk2NTkwMDE0QTYxOTAwM0VBREI4MDAwQ0RBCi06MTA4NDMwMDBBNUI4MDAxMEE1QjgwMDEyQTVCODAwMTRBNUI4MDAxNjdDCi06MTA4NDQwMDAxMjYwMDE0NEEyMDQwMDExOTI1MTAwMDMzMjMyMDAwMjcyCi06MTA4NDUwMDAyRTUzMDAwMThGOTIwMDU4MjY2MjAwMDgwQTAwMDk2MjFDCi06MTA4NDYwMDBBRjgyMDA2ODhFNDQwMDA0M0MxOTgwMDAzQzA2ODAwOEZFCi06MTA4NDcwMDBBRjI0MDAyMDhFNDUwMDA4OTBEODAwMDAyNDBEMDA1MDQ1Ci06MTA4NDgwMDAzMzExMDBGRjEyMkQwMDlDMjQwNzAwODgyNDA2MDAwOUU4Ci06MTA4NDkwMDAwRTAwMDg0NTAwMDAwMDAwMEEwMDBBNkE4RjkyMDA1ODhBCi06MTA4NEEwMDA4RTUwMDAwNDNDMDk4MDAwM0MxMTgwMDhBRDMwMDAyMDUzCi06MTA4NEIwMDA5MjI4MDAwMDI0MDUwMDUwMzEwNDAwRkYxMDg1MDExMEFGCi06MTA4NEMwMDAyNDA3MDA4ODAyMDAyMDIxMDAwMDI4MjEwRTAwMDg0NTEyCi06MTA4NEQwMDAyNDA2MDAwRTkyMkQwMDAwMjQxOEZGODAwMjAwMjgyMTlGCi06MTA4NEUwMDAwMUI4ODAyNTI0MDQwMDA0MjQwNjAwMzAwRTAwMDcyNTZFCi06MTA4NEYwMDBBMjMwMDAwMDBBMDAwQTZBOEY5MjAwNTg4RTUwMDAwNEQxCi06MTA4NTAwMDA4RjkxRkRBMDNDMDI4MDAwQUM1MDAwMjA5MjNGMDAxQkU4Ci06MTA4NTEwMDAzM0Y5MDAxMDEzMjAwMDZDMjQwNzAwODEwMjAwMjAyMTkxCi06MTA4NTIwMDAwMDAwMjgyMTI0MDYwMDFGMEUwMDA4NDUwMDAwMDAwMDVFCi06MTA4NTMwMDAwQTAwMEE2QThGOTIwMDU4OEU0NDAwMUMwRTAwMDg1REUzCi06MTA4NTQwMDAwMDAwMDAwMDEwNDAwMEUzMDA0MDQ4MjE4Rjg4MDA1OEUwCi06MTA4NTUwMDAyNDA3MDA4OTAxMjAyMDIxOEQwNTAwMUMyNDA2MDAwMTJDCi06MTA4NTYwMDAwRTAwMDg0NTAwMDAwMDAwMEEwMDBBNkE4RjkyMDA1OEI5Ci06MTA4NTcwMDA5NjQ5MDAwMjNDMTAwODAwMjYxMDVCRTgzMTI4MDAwNEYwCi06MTA4NTgwMDAxMTAwMDA5NzNDMDQ2MDAwOEU0RTAwMUMzQzBGODAwMEUwCi06MTA4NTkwMDBBREVFMDAyMDNDMDEwODAwQUMyRTVCRTg5NjQ3MDAwMkRGCi06MTA4NUEwMDAzMEU0MDAwMTE0ODAwMEU2MDAwMDAwMDA4RTQyMDAwNDY4Ci06MTA4NUIwMDBBRTAyMDAwODNDMTAwODAwOEUxMDVCRjAxMjAwMDBFQ0M4Ci06MTA4NUMwMDAzQzBGODAwMDhGOTJGRDlDMjQxMDAwMDE4RTRFMDAxOEZECi06MTA4NUQwMDA4RjhERkRBMDhGOUZGRDk4MDFDRjQ4MjVBRTQ5MDAxOEQzCi06MTA4NUUwMDBBMjQwMDAwNUFFNTAwMDBDM0MwODA4MDA4RDA4NUJGMDZFCi06MTA4NUYwMDA4Rjg0MDA1OEE2NTAwMDEwMDAwODM5QzJBNjUwMDAxMkZGCi06MTA4NjAwMDBBNjUwMDAxNEE2NTAwMDE2QTVBNzAwMEM4QzhDMDAwOERDCi06MTA4NjEwMDA4RjhCMDA1ODhGOEEwMDU4QURBQzAwMkM4RDYzMDAwQ0Y2Ci06MTA4NjIwMDAyNDA3MDAwMkFEQTMwMDFDOTE0NjAwMTBBMUE2MDAxMTcyCi06MTA4NjMwMDA4RjgyMDA1ODkwNDUwMDExQTNFNTAwMDg4Rjk5MDA1OERCCi06MTA4NjQwMDA5MzM4MDAxMkEyNTgwMDRFOEY5MTAwNTg5MjJGMDAxM0I5Ci06MTA4NjUwMDBBMUFGMDAxMjhGOTIwMDU4OTY0RTAwMTRBNUFFMDAzQ0I4Ci06MTA4NjYwMDA5NjQ5MDAxNkE1QTkwMDNFOEU0ODAwMThBREE4MDAxNDMyCi06MTA4NjcwMDA1NjYwRkQ2QUFGODcwMDY4M0MwNTA4MDAyNEE1NUJFOEVBCi06MTA4NjgwMDAwRTAwMDg4MTAwMDAyMDIxOEY5MjAwNTgwMDAwMzgyMTQwCi06MTA4NjkwMDAwQTAwMDk2MkFGODcwMDY4M0MwNTA4MDAyNEE1NUJFODcyCi06MTA4NkEwMDAwRTAwMDhBNDI0MDQwMDgyOEY5MjAwNTgwQTAwMEE0RDhDCi06MTA4NkIwMDAwMDAwMzgyMTBFMDAwRjZDMDAwMDAwMDA4RjkyMDA1ODVGCi06MTA4NkMwMDAwQTAwMEFDMDAwMDAyMDIxMEUwMDA4NzIwMjAwMjAyMUNBCi06MTA4NkQwMDA5MjIzMDAxQjAyMDAyMDIxMzQ2QTAwMTAwRTAwMDg3QzQ3Ci06MTA4NkUwMDBBMjJBMDAxQjAwMDAzODIxMDIwMDIwMjEwMDAwMjgyMUJFCi06MTA4NkYwMDAwQTAwMEJBNTI0MDYwMDFGOTI0MjAwMEMzMDVGMDAwMTA3Ci06MTA4NzAwMDAxM0UwMDAwMzAwMDAwMDAwOTY0QTAwMEVBNENBMDAyQ0VCCi06MTA4NzEwMDA5MjRCMDAwQzMxNjMwMDAyNTA2MDAwMDYwMDAwMzgyMUNCCi06MTA4NzIwMDA4RTQ3MDAxNDk2NEMwMDEyQUNDNzAwMUNBNENDMDAxQTUzCi06MTA4NzMwMDAwMDAwMzgyMTBBMDAwQjdGMjQwNjAwMDkzQzA1MDgwMEQwCi06MTA4NzQwMDAyNEE1NUJFODBFMDAwOEE0MjQwNDAwOEI4RjkyMDA1ODM3Ci06MTA4NzUwMDAwQTAwMEE0RDAwMTMzODJCM0MwQzA4MDA4RDhDNUJFODk2Ci06MTA4NzYwMDAyNERGRkZGRTI1OTMwMTAwMzI2QjAwN0YwMTY3OTAyMTFCCi06MTA4NzcwMDAwMjYzODgyNEFEMTEwMDI4QUU0NjAwRTBBRTQwMDBFNDVDCi06MTA4NzgwMDAwQTAwMDlCM0FFNUYwMDFDQUNDMDAwNTQzQzBEMDgwMEU5Ci06MTA4NzkwMDA4REFENUJFODNDMTg4MDBDMzcwOTAxMDBBQ0VEMDAyODdBCi06MTA4N0EwMDA4RTUxMDAxNEFEMzEwMEUwOEU0RjAwMTRBRDJGMDBFNDY3Ci06MTA4N0IwMDA4RTRFMDAxMDI1QzdGRkZFMEEwMDA5RjRBRDI3MDAxQ0VECi06MTA4N0MwMDA1NDkxRkRENjI0MDc0MDAwMEEwMDBBMjIyNDA3MTAwMDE1Ci06MTA4N0QwMDAwRTAwMDkyRDAwMDAwMDAwMEEwMDBBNkE4RjkyMDA1ODVFCi06MTA4N0UwMDA4QzgzNDQyQzNDMTJERUFEMzY1MUJFRUYzQzAxMDgwMEI4Ci06MTA4N0YwMDBBQzIwNUJFODEwNzEwMDYyMDAwMDAwMDAzQzE5NkM2MjY0Ci06MTA4ODAwMDAzNzM4Nzk3MDE0NzgwMDA4MjQwNDAwMDI5Nzg1MDA3NEMyCi06MTA4ODEwMDA5NzgyMDA2QzI0MDQwMDkyMDBBMkY4MkIxM0UwMDAxOTQ4Ci06MTA4ODIwMDAwMjAwMjgyMTI0MDQwMDAyMEUwMDA2OTUyNDA1MDIwMEZGCi06MTA4ODMwMDAzQzA2ODAwMEFDQzIwMDIwM0MwMTA4MDBBQzIyNUJFODkyCi06MTA4ODQwMDAxMDQwMDAwRDhGOEMwMDU4MjQwQTAwMjgyNDA0MDAwM0Q3Ci06MTA4ODUwMDA5MThCMDAxMDMxNjMwMEZGNTQ2QTAwMDEyNDA0MDAwMTcxCi06MTA4ODYwMDAwRTAwMDA4MTAwMDAwMDAwMTA0MDAwMDQyNDA0MDA4MzdBCi06MTA4ODcwMDAwQTAwMEJDMjhGOTIwMDU4MjQwNDAwODMzQzA1MDgwMEI0Ci06MTA4ODgwMDAyNEE1NUJFODBFMDAwODgxMDAwMDAwMDA4RjkyMDA1OENDCi06MTA4ODkwMDAwMDEzMzgyQjBBMDAwOTYyQUY4NzAwNjgwQTAwMEI0OUYxCi06MTA4OEEwMDAyNDAyMDAxMjhFNDQwMDA4MEUwMDA4NUQwMDAwMDAwMDQzCi06MTA4OEIwMDAwQTAwMEI1NUFFMDIwMDA4M0MwNTA4MDAyNEE1NUJFODQxCi06MTA4OEMwMDAwRTAwMDg1ODI0MDQwMDg3OEY5MjAwNTgwQTAwMEI3MjhCCi06MTA4OEQwMDAwMDEzMTAyQjI0MDQwMDA0MEUwMDA2OTUyNDA1MDAzMDFDCi06MTA4OEUwMDAxNDQwMDAyQTAwNDA0ODIxOEY4ODAwNTgyNDA3MDA4MzQ0Ci06MTA4OEYwMDAwMTIwMjAyMThEMDUwMDFDMEEwMDBCQjMyNDA2MDAwMTc1Ci06MTA4OTAwMDA4RjgzMDA3ODhGODYwMDcwMTA2NkZFRUUwMDAwMzgyMTlECi06MTA4OTEwMDAzQzA3MDgwMDI0RTc1QjZDMDAwMzIwQzAwMDg3MjgyMTg3Ci06MTA4OTIwMDA4Q0FFMDAwMDExRDAwMDVEMjQ2RjAwMDEzMUUzMDAwRjE4Ci06MTA4OTMwMDA1NDY2RkZGQTAwMDMyMEMwMEEwMDBCOEMwMDAwMzgyMUE3Ci06MTA4OTQwMDA4RTQ0MDAwNDBFMDAwODVEMDAwMDAwMDAwQTAwMEJDODAxCi06MTA4OTUwMDBBRTAyMDAwODNDMDUwODAwMjRBNTVCRTgwRTAwMDhBNDUwCi06MTA4OTYwMDAyNDA0MDA4MjhGOTIwMDU4MEEwMDBCNzIwMDAwMTAyMTJDCi06MTA4OTcwMDAzQzA1MDgwMDI0QTU1QkU4MEEwMDBDN0MyNDA0MDA4NzYxCi06MTA4OTgwMDA4QzgzNDQyQzBBMDAwQzVCM0MxOTZDNjI4Rjg4MDA1ODY1Ci06MTA4OTkwMDAzQzA3ODAwODNDMEM4MDAwMjQwQjAwNTAyNDBBMDAwMTk2Ci06MTA4OUEwMDBBRDgyMDAyMEEwRUIwMDAwQTBFQTAwMDE5MTAzMDAwNENBCi06MTA4OUIwMDBBMEUzMDAxODkxMDQwMDA1QTBFNDAwMTk5MTA2MDAwNjQ4Ci06MTA4OUMwMDAzQzA0MDgwMDI0ODQ1QjZDQTBFNjAwMUE5MTAyMDAwN0I2Ci06MTA4OUQwMDAzQzA2MDgwMDI0QzY1QjY4QTBFMjAwMUI5MTA1MDAwODY1Ci06MTA4OUUwMDBBMEU1MDAxQzkxMUYwMDA5QTBGRjAwMUQ5MTE5MDAwQUJECi06MTA4OUYwMDBBMEY5MDAxRTkxMTgwMDBCQTBGODAwMUY5MTEyMDAwQ0E2Ci06MTA4QTAwMDBBMEYyMDAyMDkxMTEwMDBEQTBGMTAwMjE5MTEwMDAwRUE0Ci06MTA4QTEwMDBBMEYwMDAyMjkxMEYwMDBGQTBFRjAwMjM5MTBFMDAxMDk0Ci06MTA4QTIwMDBBMEVFMDAyNDkxMEQwMDExQTBFRDAwMjU5NTBDMDAxNDdFCi06MTA4QTMwMDBBNEVDMDAyODk1MEIwMDE2OEY4QTAwNzA4RjkyMDA3OEE2Ci06MTA4QTQwMDBBNEVCMDAyQTk1MDMwMDE4MDAwQTEwQzAyNTQ1MDAwMTc4Ci06MTA4QTUwMDBBNEUzMDAyQzhEMUYwMDFDMDA0NEMwMjEwMDQ2QzgyMTQ3Ci06MTA4QTYwMDAzMEE1MDAwRkFGM0YwMDAwQUYwOTAwMDAxMEIyMDAwNkI0Ci06MTA4QTcwMDBBRjg1MDA3MDAwMDAzODIxOEQwNTAwMUMwMTIwMjAyMUU5Ci06MTA4QTgwMDAwQTAwMEJCMzI0MDYwMDAxMjRBRDAwMDEzMUE3MDAwRjNBCi06MTA4QTkwMDBBRjg3MDA3ODBBMDAwQ0Y5MDAwMDM4MjEzQzA2MDgwMDc2Ci06MTA4QUEwMDAyNEM2NUI2ODAwODY5MDIxMDAwMDM4MjFBQ0EwMDAwMDNECi06MTA4QUIwMDAwQTAwMEI4Q0FFNDAwMDAwM0MwNDgyMDEzQzAzNjAwMEM1Ci06MTA4QUMwMDAzNDgyMEUwMkFDNjAzRDY4QUY4MDAwOTgwM0UwMDAwODdECi06MTA4QUQwMDBBQzYyM0Q2QzI3QkRGRkU4QUZCMDAwMTAzMDkwRkZGRkU3Ci06MTA4QUUwMDAwMDEwMTg0MjJDNjIwMDQxQUZCRjAwMTQxNDQwMDAwMjc1Ci06MTA4QUYwMDAyNDA0MDA4MDI0MDMwMDQwM0MwMTA4MDBBQzMwMDA2MEU2Ci06MTA4QjAwMDAzQzAxMDgwMEFDMjMwMDY0MEUwMDBGNzUwMDYwMjgyMUIyCi06MTA4QjEwMDAyNDQ4MDJCRjI0MDlGRjgwMDEwOTI4MjQwMDEwMzk4MDVECi06MTA4QjIwMDAwMDEwMzA0MDhGQkYwMDE0OEZCMDAwMTAwMEE3MjAyMTJDCi06MTA4QjMwMDAwMDg2MTgyMUFGODMwMDgwM0MwMTA4MDBBQzI1MDA1ODU2Ci06MTA4QjQwMDAzQzAxMDgwMEFDMjQwMDVDMDNFMDAwMDgyN0JEMDAxOENECi06MTA4QjUwMDAzMDgzMDBGRjMwQzZGRkZGMzBFNDAwRkYzQzA4ODAwMDk4Ci06MTA4QjYwMDA4RDAyMDFCODA0NDBGRkZFMDAwMzU0MDAwMTQ0MzgyNTgzCi06MTA4QjcwMDAzQzA5NjAwMDAwRTkyMDI1M0MwMzEwMDBBRDA1MDE4MEEwCi06MTA4QjgwMDBBRDA2MDE4NEFEMDQwMTg4MDNFMDAwMDhBRDAzMDFCODFGCi06MTA4QjkwMDA4Rjg1MDA1ODNDMEE2MDEyMzU0ODAwMTA4Q0FDMDAwNEU4Ci06MTA4QkEwMDAzQzBENjAwRTM1QTYwMDEwMzE4QjAwMDYyRDY5MDAwMUNBCi06MTA4QkIwMDBBRDA5MDBDNDhDQTcwMDA0QUNDNzMxODA4Q0EyMDAwOEFBCi06MTA4QkMwMDA5NEE0MDAwMkFDQzIzMTg0OENBMzAwMUMwNDYwMDAwMzk2Ci06MTA4QkQwMDBBNzg0MDA5MDAzRTAwMDA4MDAwMDAwMDA4Q0FGMDAxODlDCi06MTA4QkUwMDBBQ0NGMzFEMDhDQUUwMDFDMDNFMDAwMDhBQ0NFMzFENDQ5Ci06MTA4QkYwMDA4Rjg1MDA1ODhGODdGRjI4OEY4NkZGMzA4Q0FFMDAwNDRBCi06MTA4QzAwMDAzQzBGNjAxMjM1RTgwMDEwQUNFRTAwNzg4Q0FEMDAwODI3Ci06MTA4QzEwMDBBQ0VEMDA3QzhDQUMwMDEwQUNDQzAwNEM4Q0FCMDAwQ0YwCi06MTA4QzIwMDBBQ0NCMDA0ODk0Q0EwMDU0M0MwMjA4MDA4QzQyMDA0NDdCCi06MTA4QzMwMDAyNTQ5MDAwMUE0QzkwMDU0OTRDNDAwNTQzMDgzRkZGRkE3Ci06MTA4QzQwMDAxMDYyMDAxNzAwMDAwMDAwM0MwMjA4MDA4QzQyMDA0MDQ3Ci06MTA4QzUwMDBBNEMyMDA1MjhDQTMwMDE4QUNFMzAwMzA4Q0EyMDAxNDE0Ci06MTA4QzYwMDBBQ0UyMDAyQzhDQjkwMDE4QUNGOTAwMzg4Q0I4MDAxNEI4Ci06MTA4QzcwMDAyNDA1MDAwMUFDRjgwMDM0OEQwNjAwQkM1MEM1MDAxOTc1Ci06MTA4QzgwMDA4RDAyMDBCNDhEMDIwMEI4QTRFMjAwNDg5NEU0MDA0OENDCi06MTA4QzkwMDBBNEU0MDA0QTk0RTgwMEVBMDNFMDAwMDgzMTAyRkZGRjgwCi06MTA4Q0EwMDAzQzAyMDgwMDhDNDIwMDI0QTRDMDAwNTRBNEMyMDA1MjFDCi06MTA4Q0IwMDA4Q0EzMDAxOEFDRTMwMDMwOENBMjAwMTRBQ0UyMDAyQ0IyCi06MTA4Q0MwMDA4Q0I5MDAxOEFDRjkwMDM4OENCODAwMTQyNDA1MDAwMUU4Ci06MTA4Q0QwMDBBQ0Y4MDAzNDhEMDYwMEJDNTRDNUZGRUI4RDAyMDBCODIzCi06MTA4Q0UwMDA4RDAyMDBCNEE0RTIwMDQ4OTRFNDAwNDhBNEU0MDA0QUUxCi06MTA4Q0YwMDA5NEU4MDBFQTAzRTAwMDA4MzEwMkZGRkY4Rjg2MDA1ODg1Ci06MTA4RDAwMDAzQzA0ODAwMDhDQzkwMDA4OENDODAwMDgwMDA5MjlDMEY4Ci06MTA4RDEwMDAwMDA4MzlDMEFDODcwMDIwOTBDMzAwMDczMDYyMDAwNDBGCi06MTA4RDIwMDAxMDQwMDAzRUFGODUwMDk0OTBDQjAwMDczMTZBMDAwOEU4Ci06MTA4RDMwMDAxMTQwMDAzRDhGODdGRjJDOENDRDAwMEM4Q0NFMDAxNDkxCi06MTA4RDQwMDAwMUFFNjAyQjExODAwMDM2MDAwMDAwMDA4Q0MyMDAwQ0M4Ci06MTA4RDUwMDBBQ0UyMDA3MDhDQ0IwMDE4OEY4NUZGMjg4Rjg4RkYzMDI1Ci06MTA4RDYwMDBBQ0VCMDA3NDhDQ0EwMDEwMjQwMkZGRjhBQ0FBMDBEODQ3Ci06MTA4RDcwMDA4Q0M5MDAwQ0FEMDkwMDYwOENDNDAwMUNBQ0E0MDBEMEYwCi06MTA4RDgwMDA5MEUzMDA3QzAwNjJDODI0QTBGOTAwN0M5MEQ4MDAwNzIyCi06MTA4RDkwMDAzMzBGMDAwODExRTAwMDA0MDAwMDAwMDA5MEVEMDA3QzlCCi06MTA4REEwMDAzNUFDMDAwMUEwRUMwMDdDOTBDRjAwMDczMUVFMDAwMTUzCi06MTA4REIwMDAxMUMwMDAwNjAwMDAwMDAwOTBFMzAwN0MyNDE4MDAzNDdECi06MTA4REMwMDAzNDc5MDAwMkEwRjkwMDdDQUNCODAwREM5MEMyMDAwNzQ2Ci06MTA4REQwMDAzMDQ2MDAwMjEwQzAwMDA0MDAwMDAwMDA5MEU4MDA3QzUzCi06MTA4REUwMDAzNTA0MDAwNEEwRTQwMDdDOTBFRDAwN0QzQzBCNjAwRTk3Ci06MTA4REYwMDAzNTZBMDAxMDMxQUMwMDNGQTBFQzAwN0Q4RDQ5MzFENEM0Ci06MTA4RTAwMDAzMTI3MDAwMTEwRTAwMDAyMjQwRTAwMDFBMEFFMDAwOThECi06MTA4RTEwMDA5NEFGMDBFQTAzRTAwMDA4MzFFMkZGRkY4Rjg3RkYyQ0U4Ci06MTA4RTIwMDAwQTAwMERBRjhDQzIwMDE0MEEwMDBEQjBBQ0UwMDA3MDU3Ci06MTA4RTMwMDA4RjhDMDA1ODI3QkRGRkQ4QUZCMzAwMUNBRkIyMDAxODBECi06MTA4RTQwMDBBRkIwMDAxMEFGQkYwMDIwQUZCMTAwMTQ5MThGMDAxNTdDCi06MTA4RTUwMDAzQzEzNjAwRTM2NzMwMDEwMzFFQjAwMEZBMzhCMDA5Q0E3Ci06MTA4RTYwMDA4RDhGMDAwNDhEOEIwMDA4OTU5RjAwMTI5NTk5MDAxMDNFCi06MTA4RTcwMDA5NTg0MDAxQTk1OTgwMDFFOTU4RTAwMUMzM0VERkZGRjE3Ci06MTA4RTgwMDAzMzJBRkZGRjMwODlGRkZGMzMwOEZGRkYzMUM3RkZGRkExCi06MTA4RTkwMDAzQzAxMDgwMEFDMkQwMDI0M0MwMTA4MDBBQzI5MDA0NDMyCi06MTA4RUEwMDAzQzAxMDgwMEFDMkEwMDQwQUU2ODMxNzhBRTY3MzE3Q0U2Ci06MTA4RUIwMDA5MTg1MDAxNTk1OTEwMDE2M0MxMjYwMTIzNjUyMDAxMEYzCi06MTA4RUMwMDAzMEEyMDBGRjMyMzBGRkZGQUU2MjMxODhBRTUwMDBCNEY2Ci06MTA4RUQwMDA5MTgzMDAxNDk1OUYwMDE4MjQwNjAwMDEwMDY2QzgwNEMxCi06MTA4RUUwMDAzM0Y4RkZGRkFFNTkwMEI4QUU1ODAwQkM5MThFMDAxNEE1Ci06MTA4RUYwMDBBRjhGMDA4NDNDMDg2MDA2MzFDRDAwRkZBRTREMDBDMDRFCi06MTA4RjAwMDA5MThBMDAxNTk1ODQwMDBFM0MwNzYwMEEzMTQ5MDBGRkU0Ci06MTA4RjEwMDBBRjhCMDA4ODMwODRGRkZGQUU0OTAwQzgzNTExMDAxMEM4Ci06MTA4RjIwMDAwRTAwMEQxMDM0RjAwNDEwM0MwMjA4MDA4QzQyMDA2MDZBCi06MTA4RjMwMDAzQzAzMDgwMDhDNjMwMDY0M0MwNjA4MDA4Q0M2MDA1OEEzCi06MTA4RjQwMDAzQzA1MDgwMDhDQTUwMDVDOEY4NDAwODA4RkJGMDAyMDRBCi06MTA4RjUwMDBBRTIzMDA0Q0FFNjUzMTlDQUUwMzAwNTRBRTQ1MDBEQzQwCi06MTA4RjYwMDBBRTYyMzFBMEFFNjMzMUE0QUU2NjMxOThBRTIyMDA0ODQ1Ci06MTA4RjcwMDA4RkIzMDAxQ0FFMDIwMDUwOEZCMTAwMTRBRTQyMDBFMDZGCi06MTA4RjgwMDBBRTQzMDBFNEFFNDYwMEQ4OEZCMDAwMTA4RkIyMDAxODk4Ci06MTA4RjkwMDAwQTAwMDU3RDI3QkQwMDI4OTc4NTAwOTI5NzgzMDA3Q0Y1Ci06MTA4RkEwMDAyN0JERkZFOEFGQjAwMDEwMDBBMzEwMkJBRkJGMDAxNDI3Ci06MTA4RkIwMDAyNDA0MDAwNThGOTAwMDU4MTA0MDAwNTUyNDA5MDAwMjM5Ci06MTA4RkMwMDAwRTAwMDY5NThGODUwMDgwQUY4MjAwOTQyNDA0MDAwMzc0Ci06MTA4RkQwMDAxMDQwMDA0RjI0MDkwMDAyM0MwNjgwMDAwRTAwMDA4MTcyCi06MTA4RkUwMDBBQ0MyMDAyMDI0MDcwMDAxMjQwODIwMDAxMDQwMDA0RERFCi06MTA4RkYwMDAyNDA0MDAwNTk3OEUwMDkyOEY4QUZGMkMyNDA5MDA1MENDCi06MTA5MDAwMDAyNUM1MDAwMUE3ODUwMDkyQTE0OTAwMDAzQzBEMDgwMDdDCi06MTA5MDEwMDA4REFEMDA2NDI0MDM4MDAwOEY4NEZGMjgwMDBENjYwMDVFCi06MTA5MDIwMDBBRDRDMDAxOEE1NDAwMDA2OTU0QjAwMEE4Rjg1RkYzMDE3Ci06MTA5MDMwMDAyNDAyRkY4MDAxNjMzMDI0QTU0NjAwMEE5MTVGMDAwQUU0Ci06MTA5MDQwMDAwMDAwNDgyMTAzRTJDODI1QTE1OTAwMEFBMEEwMDAwODk5Ci06MTA5MDUwMDBBMTQwMDA0Q0EwODAwMEQ1OTYxODAwMDI5NzgzMDA5MDk0Ci06MTA5MDYwMDAzQzAyMDAwNEE0OTgwMEVBOTYwRjAwMDIyNDE4RkZCRkY3Ci06MTA5MDcwMDAyNUVFMjQwMUE0OEUwMEJFOEUwRDAwMDRBQ0FEMDA0NDhDCi06MTA5MDgwMDA4RTBDMDAwOEFDQUMwMDQwQTRBMDAwNTBBNEEwMDA1NDdBCi06MTA5MDkwMDA4RTBCMDAwQzI0MEMwMDMwQUM4QjAwMjg4RTA2MDAxMEM4Ci06MTA5MEEwMDBBQzg2MDAyNEE0ODAwMDNFQTQ4NzAwNEVBNDg3MDA1MDE0Ci06MTA5MEIwMDBBNDgzMDAzQ0FENDIwMDc0QUM4ODAwRDhBQ0E4MDA2MDJBCi06MTA5MEMwMDBBMDg3MDBGQzkwOUYwMEQ0MzNGOTAwN0ZBMDk5MDBENEMyCi06MTA5MEQwMDA5MDkwMDBENDAyMTg3ODI0QTA4RjAwRDQ5MTRFMDA3Qzg4Ci06MTA5MEUwMDAzNUNEMDAwMUExNEQwMDdDOTM4QjAwOUNBRDQ4MDA3MEY0Ci06MTA5MEYwMDBBQzhDMDBEQ0EwOEIwMEQ2OEY4ODAwODg4Rjg3MDA4NDIyCi06MTA5MTAwMDBBQzg4MDBDNEFDODcwMEM4QTU0MDAwNzhBNTQwMDA3QUIwCi06MTA5MTEwMDA4RkJGMDAxNDhGQjAwMDEwMDEyMDEwMjEwM0UwMDAwODYxCi06MTA5MTIwMDAyN0JEMDAxODhGODUwMDk0MEUwMDA3MjU4Rjg2MDA4MENDCi06MTA5MTMwMDAwQTAwMEU5RjI0MDkwMDAyMjdCREZGRTBBRkIwMDAxMDE3Ci06MTA5MTQwMDA4RjkwMDA1OEFGQjEwMDE0QUZCRjAwMTg4RTA5MDAwNDEzCi06MTA5MTUwMDAwRTAwMDU0QTAwMDkyMUMwOEUwODAwMDQ4Rjg0RkYyOEY0Ci06MTA5MTYwMDA4RjgyRkYzMDAwMDgzOUMwM0MwNjgwMDBBQ0M3MDAyMDY5Ci06MTA5MTcwMDA5NDg1MDBFQTkwNDMwMDEzMTQ2MDAwMUMzMEIxRkZGRjk3Ci06MTA5MTgwMDA4RjhDRkYyQzkxOEIwMDA4MzE2QTAwNDAxNTQwMDAwQjNBCi06MTA5MTkwMDAwMDAwMDAwMDhFMEQwMDA0MDIyMDMwMjE4RkJGMDAxODU3Ci06MTA5MUEwMDA4RkIxMDAxNDhGQjAwMDEwMjQwNDAwMjIwMDAwMzgyMTc5Ci06MTA5MUIwMDAwMDBEMjlDMDBBMDAwRDJGMjdCRDAwMjAwRTAwMDA5OEM5Ci06MTA5MUMwMDAwMDAwMDAwMDhFMEQwMDA0MDIyMDMwMjE4RkJGMDAxODI3Ci06MTA5MUQwMDA4RkIxMDAxNDhGQjAwMDEwMjQwNDAwMjIwMDAwMzgyMTQ5Ci06MTA5MUUwMDAwMDBEMjlDMDBBMDAwRDJGMjdCRDAwMjAwRTAwMDA5MEExCi06MTA5MUYwMDAwMDAwMDAwMDhFMEQwMDA0MDIyMDMwMjE4RkJGMDAxOEY3Ci06MTA5MjAwMDA4RkIxMDAxNDhGQjAwMDEwMjQwNDAwMjIwMDAwMzgyMTE4Ci06MTA5MjEwMDAwMDBEMjlDMDBBMDAwRDJGMjdCRDAwMjAyN0JERkZFMDRCCi06MTA5MjIwMDBBRkIyMDAxODMwOTJGRkZGQUZCMDAwMTBBRkJGMDAxQzBDCi06MTA5MjMwMDBBRkIxMDAxNDEyNDAwMDFFMDAwMDgwMjE4Rjg2MDA1ODNDCi06MTA5MjQwMDA4Q0M1MDAwMDI0MDMwMDA2MDAwNTNGMDIwMDA1MTQwMjNGCi06MTA5MjUwMDAzMEU0MDAwNzE0ODMwMDE2MzA0NTAwRkYyQ0E4MDAwNkY4Ci06MTA5MjYwMDAxMTAwMDA0MDAwMDU1ODgwM0MwQzA4MDAyNThDNThCQ0JCCi06MTA5MjcwMDAwMTZDNTAyMThENDkwMDAwMDEyMDAwMDgwMDAwMDAwMDExCi06MTA5MjgwMDA4RjhFMDA5ODI0MEQwMDAxMTFDRDAwNTAyNDAyMDAwMkExCi06MTA5MjkwMDBBRjgyMDA5ODI2MDkwMDAxMzEzMEZGRkYyNEM4MDAyMDZBCi06MTA5MkEwMDAwMjEyMjAyQjAxMDAzMDIxMTQ4MEZGRTVBRjg4MDA1ODA2Ci06MTA5MkIwMDAwMjAwMTAyMThGQkYwMDFDOEZCMjAwMTg4RkIxMDAxNDY0Ci06MTA5MkMwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjA5Mzg3MDA3RUM4Ci06MTA5MkQwMDA1NEUwMDAzNDAwMDAzMDIxMEUwMDBERTcwMDAwMDAwMEQzCi06MTA5MkUwMDA4Rjg2MDA1ODBBMDAwRUZGMjQwMjAwMDE4Rjg3MDA5ODI1Ci06MTA5MkYwMDAyNDA1MDAwMjEwRTUwMDMxMjQwNDAwMTMwMDAwMjgyMTk5Ci06MTA5MzAwMDAwMDAwMzAyMTI0MDcwMDAxMEUwMDBEMkYwMDAwMDAwMDk2Ci06MTA5MzEwMDAwQTAwMEYwMDhGODYwMDU4OEY4MzAwOTgyNDAyMDAwMkY1Ci06MTA5MzIwMDAxNDYyRkZGNjI0MDQwMDEyMEUwMDBEOUEwMDAwMDAwMEUzCi06MTA5MzMwMDA4Rjg1MDA5NDAwNDAzMDIxMjQwNDAwMTIwRTAwMEQyRjcwCi06MTA5MzQwMDAwMDAwMzgyMTBBMDAwRjAwOEY4NjAwNTg4RjgzMDA5ODk0Ci06MTA5MzUwMDAyNDExMDAwMzEwNzEwMDI5MjQxRjAwMDIxMDdGRkZDRThBCi06MTA5MzYwMDAyNjA5MDAwMTI0MDQwMDEwMDAwMDI4MjEwMDAwMzAyMUZCCi06MTA5MzcwMDAwQTAwMEYxRDI0MDcwMDAxOEY5MTAwOTgyNDA2MDAwMkE3Ci06MTA5MzgwMDAxNjI2RkZGOTI0MDQwMDEwMEUwMDBFNDEwMDAwMDAwMDE0Ci06MTA5MzkwMDAxNDQwMDAyMzhGOTgwMDU4OEY4NjAwNTgwQTAwMEVGRjUzCi06MTA5M0EwMDAyNDAyMDAwMzI0MDQwMDE0MEUwMDBEMkYwMDAwMjgyMUM1Ci06MTA5M0IwMDA4Rjg2MDA1ODBBMDAwRUZGMjQwMjAwMDIwRTAwMEVBOTNDCi06MTA5M0MwMDAwMDAwMDAwMDBBMDAwRjAwOEY4NjAwNTgwRTAwMEQzRkJECi06MTA5M0QwMDAwMDAwMDAwMDI0MTkwMDAyMjQwNDAwMTQwMDAwMjgyMUM5Ci06MTA5M0UwMDAwMDAwMzAyMTAwMDAzODIxQUY5OTAwOTgwRTAwMEQyRkE5Ci06MTA5M0YwMDAwMDAwMDAwMDBBMDAwRjAwOEY4NjAwNTgwRTAwMEQ1Nzc1Ci06MTA5NDAwMDAwMDAwMDAwMDhGODUwMDk0MjQxOTAwMDIwMDQwMzAyMUU0Ci06MTA5NDEwMDAyNDA0MDAxMDAwMDAzODIxMEEwMDBGNTZBRjk5MDA5ODZDCi06MTA5NDIwMDAwMDQwMzgyMTI0MDQwMDEwOTcwRjAwMDIwMDAwMjgyMTdBCi06MTA5NDMwMDAwRTAwMEQyRjMxRTZGRkZGOEY4NjAwNTgwQTAwMEYwMDQ3Ci06MTA5NDQwMDBBRjkxMDA5ODhGODRGRjJDM0MwNzdGRkYzNEU2RkZGRjJECi06MTA5NDUwMDA4Qzg1MDAxODI0MDIwMDAxMDBBNjE4MjRBQzgzMDAxODkzCi06MTA5NDYwMDAwM0UwMDAwOEEwODIwMDA1MzA4NEZGRkYzMEE1RkZGRjY1Ci06MTA5NDcwMDAxMDgwMDAwNzAwMDAxODIxMzA4MjAwMDExMDQwMDAwMjE3Ci06MTA5NDgwMDAwMDA0MjA0MjAwNjUxODIxMTQ4MEZGRkIwMDA1Mjg0MERECi06MTA5NDkwMDAwM0UwMDAwODAwNjAxMDIxMTBDMDAwMDcwMDAwMDAwMDc5Ci06MTA5NEEwMDA4Q0EyMDAwMDI0QzZGRkZGMjRBNTAwMDRBQzgyMDAwMEFCCi06MTA5NEIwMDAxNEMwRkZGQjI0ODQwMDA0MDNFMDAwMDgwMDAwMDAwMDQ3Ci06MTA5NEMwMDAxMEEwMDAwODI0QTNGRkZGQUM4NjAwMDAwMDAwMDAwMEVECi06MTA5NEQwMDAwMDAwMDAwMDI0MDJGRkZGMjQ2M0ZGRkYxNDYyRkZGQTc0Ci06MTA5NEUwMDAyNDg0MDAwNDAzRTAwMDA4MDAwMDAwMDAwMDA0MTFDMDEwCi06MTA5NEYwMDAwM0UwMDAwODI0NDIwMjQwMjdCREZGRThBRkIwMDAxMDlGCi06MTA5NTAwMDAwMDgwODAyMUFGQkYwMDE0MEUwMDBGOTYwMEEwMjAyMTI0Ci06MTA5NTEwMDAwMDUwNDgyMTI0MEFGRjgwOEZCRjAwMTQ4RkIwMDAxMDM0Ci06MTA5NTIwMDAwMTJBMzAyNDMxMjcwMDdGM0MwODgwMEEzQzA0MjEwMEI2Ci06MTA5NTMwMDAwMEU4MTAyMTAwQzQyODI1M0MwMzgwMDAyN0JEMDAxODQ2Ci06MTA5NTQwMDBBQzY1MDAyNEFGODIwMDM4QUM0MDAwMDBBQzY1MDAyNDVDCi06MTA5NTUwMDAwM0UwMDAwOEFDNDAwMDQwM0MwRDA4MDA4REFEMDA1ODExCi06MTA5NTYwMDAwMDA1NjE4MDI0MEFGRjgwMDFBNDU4MjEwMTZDNDgyMTc0Ci06MTA5NTcwMDAwMTJBMzAyNDMxMjcwMDdGM0MwODgwMEMzQzA0MjEwMDY0Ci06MTA5NTgwMDAwMEU4MTAyMTAwQzQyODI1M0MwMzgwMDBBQzY1MDAyOEI5Ci06MTA5NTkwMDBBRjgyMDAzNDAzRTAwMDA4QUM0MDAwMjQzMEE1RkZGRjk4Ci06MTA5NUEwMDAzQzA2ODAwMDhDQzIwMUI4MDQ0MEZGRkUzQzA4NjAxNUY4Ci06MTA5NUIwMDAwMEE4MzgyNTNDMDMxMDAwQUNDNDAxODBBQ0MwMDE4NDc1Ci06MTA5NUMwMDBBQ0M3MDE4ODAzRTAwMDA4QUNDMzAxQjgzQzBEMDgwMDNCCi06MTA5NUQwMDA4REFEMDA1ODAwMDU2MTgwMjQwQUZGODAwMUE0NTgyMTQ4Ci06MTA5NUUwMDAwMTZDNDAyMTAxMEE0ODI0MDAwOTMxNDAzMTA3MDA3RjA1Ci06MTA5NUYwMDAwMEM3MjgyNTNDMDQyMDAwMDBBNDE4MjUzQzAyODAwMDU4Ci06MTA5NjAwMDBBQzQzMDgzMDAzRTAwMDA4QUY4MDAwMzQyN0JERkZFODFBCi06MTA5NjEwMDBBRkIwMDAxMDAwODA4MDIxQUZCRjAwMTQwRTAwMEY5Njg1Ci06MTA5NjIwMDAwMEEwMjAyMTAwNTA0ODIxMjQwQkZGODAwMTJCNTAyNDUyCi06MTA5NjMwMDAwMDBBMzk0MDMxMjgwMDdGM0MwNjIwMDA4RkJGMDAxNDBCCi06MTA5NjQwMDA4RkIwMDAxMDAwRTgyODI1MzRDMjAwMDEwMEEyMTgyNUMwCi06MTA5NjUwMDAzQzA0ODAwMDI3QkQwMDE4QUM4MzA4MzAwM0UwMDAwOEZDCi06MTA5NjYwMDBBRjgwMDAzODNDMDU4MDA4OENBNzAwNjAzQzA2ODAwODZECi06MTA5NjcwMDAwMDg3MTAyQjE0NDAwMDExMkM4MzQwMDA4Q0E4MDA2MDQwCi06MTA5NjgwMDAyRDAzNDAwMDEwNjAwMDBGMjQwMzQwMDA4Q0M5MDA2MENGCi06MTA5NjkwMDAwMDg5MjgyQjE0QTAwMDAyMDA4MDE4MjE4Q0MzMDA2MEQwCi06MTA5NkEwMDAwMDAzNUE0MjAwMEIzMDgwM0MwQTA4MDAyNTRBNTkyMDJBCi06MTA5NkIwMDAwMENBMjAyMTAzRTAwMDA4OEM4MjAwMDAxNDYwRkZGMzQwCi06MTA5NkMwMDAyNDAzNDAwMDAwMDM1QTQyMDAwQjMwODAzQzBBMDgwMDhCCi06MTA5NkQwMDAyNTRBNTkyMDAwQ0EyMDIxMDNFMDAwMDg4QzgyMDAwMDlFCi06MTA5NkUwMDAzQzA1ODAwODkwQTYwMDA4OTM4NDAwQUIyNEMyMDAwMUNBCi06MTA5NkYwMDAzMDQyMDBGRjMwNDMwMDdGMTA2NDAwMEMwMDAyMzgyNzI2Ci06MTA5NzAwMDBBMEEyMDAwODNDMDQ4MDAwOEM4NTAxNzgwNEEwRkZGRTI0Ci06MTA5NzEwMDA4RjhBMDBBMDI0MDkwMDAyM0MwODEwMDBBQzhBMDE0MDk2Ci06MTA5NzIwMDBBMDg5MDE0NDAzRTAwMDA4QUM4ODAxNzgwQTAwMTAxQkZFCi06MTA5NzMwMDAzMEUyMDA4MDI3QkRGRkQ4QUZCMjAwMTg4RjkyMDBBNDlFCi06MTA5NzQwMDBBRkJGMDAyMEFGQjMwMDFDQUZCMDAwMTBBRkIxMDAxNDJBCi06MTA5NzUwMDA4RjkzMDAzNDhFNTkwMDI4M0MxMDAwODAzQzBFRkZFRkEwCi06MTA5NzYwMDBBRTc5MDAwMDhFNTgwMDI0QTI2MDAwMEEzNUNERkZGRkJDCi06MTA5NzcwMDBBRTc4MDAwNDkyNTEwMDJDM0MwQkZGOUYzNTZBRkZGRjJFCi06MTA5NzgwMDBBMjcxMDAwQzhFNkYwMDBDM0MwODAwNDBBMjcxMDAwQjBGCi06MTA5NzkwMDAwMUYwNjAyNTAxOEQ0ODI0MDEyQTM4MjQwMEU4MzAyNTk1Ci06MTA5N0EwMDBBRTY2MDAwQzhFNDUwMDA0QUU2MDAwMTgzQzA0MDBGRjVECi06MTA5N0IwMDBBRTY1MDAxNDhFNDMwMDJDMzQ4MkZGRkZBNjYwMDAwOEMzCi06MTA5N0MwMDAwMDYyRjgyNEFFN0YwMDEwOEU1OTAwMDg4RjkwMDBBMDMwCi06MTA5N0QwMDA5NjRFMDAxMkFFNzkwMDIwOEU1MTAwMEMzMUQ4M0ZGRjFBCi06MTA5N0UwMDAwMDE4Nzk4MEFFNzEwMDI0OEU0RDAwMTQwMUYwNjAyMUM0Ci06MTA5N0YwMDAzMUNCMDAwMUFFNkQwMDI4OEU0QTAwMTgwMDBDNDFDMjJBCi06MTA5ODAwMDAwMDBCNEI4MEFFNkEwMDJDOEU0NjAwMUMwMTA5MzgyMUVCCi06MTA5ODEwMDBBNjY3MDAxQ0FFNjYwMDMwOTY0NTAwMDI4RTQ0MDAyMDBDCi06MTA5ODIwMDBBNjY1MDAxRUFFNjQwMDM0OTI0MzAwMzMzMDYyMDAwNDJCCi06MTA5ODMwMDA1NDQwMDAwNjkyNDcwMDAwM0MwMjgwMDgzNDQzMDEwMDc3Ci06MTA5ODQwMDA4QzdGMDBEMEFFN0YwMDMwOTI0NzAwMDA4Rjg2MDAzOEJBCi06MTA5ODUwMDBBMEM3MDAzMDkyNDUwMDMzMzBBNDAwMDI1MDgwMDAwN0JBCi06MTA5ODYwMDA5MjUxMDAwMThGODgwMDM4MjQwQkZGODA5MTBBMDAzMDRDCi06MTA5ODcwMDAwMTRCNDgyNUExMDkwMDMwOTI1MTAwMDE4RjkwMDAzODFBCi06MTA5ODgwMDAyNDBDRkZCRjI0MDRGRkRGQTIxMTAwMzE4RjhEMDAzOEFDCi06MTA5ODkwMDAzQzE4ODAwODM3MTEwMDgwOTFBRjAwM0MzMUVFMDA3RjBBCi06MTA5OEEwMDBBMUFFMDAzQzhGODkwMDM4OTEyQjAwM0MwMTZDNTAyNDA0Ci06MTA5OEIwMDBBMTJBMDAzQzhGOUYwMDM4OEU2ODAwMTQ5M0U2MDAzQzdDCi06MTA5OEMwMDAyRDA3MDAwMTAwMDcxMTQwMDBDNDI4MjQwMEEyMTgyNTFDCi06MTA5OEQwMDBBM0UzMDAzQzhGODcwMDM4OTY1OTAwMTJBNEY5MDAzMkE4Ci06MTA5OEUwMDA4RTQ1MDAwNDkyMkUwMDdDMzBCMDAwMDMwMDEwNzgyM0Q3Ci06MTA5OEYwMDAzMUVEMDAwMzAwQUQxMDIxMzFDQzAwMDIxNTgwMDAwMkQzCi06MTA5OTAwMDAyNDQ2MDAzNDI0NDYwMDMwM0MwMjgwMDgzNDQzMDA4MDYyCi06MTA5OTEwMDA5MDdGMDA3QzAwQkZDODI0MzMzODAwMDQxNzAwMDAwMjg5Ci06MTA5OTIwMDAyNEMyMDAwNDAwQzAxMDIxOEY5ODAwMzgyNDE5MDAwMkJFCi06MTA5OTMwMDBBQ0UyMDAzNEEzMTkwMDAwOTI0RjAwM0Y4RjhFMDAzODM0Ci06MTA5OTQwMDAzQzBDODAwODM1OEIwMDgwQTFDRjAwMDE4RjkxMDAzODNFCi06MTA5OTUwMDA5MjREMDAzRjhFNDQwMDA0QTYyRDAwMDI5NTZBMDA1Q0UzCi06MTA5OTYwMDAwRTAwMEZGNDMxNTBGRkZGMDAwMjRCODAwMjA5MzgyNTMyCi06MTA5OTcwMDAzQzA4NDIwMDAwRTgyODI1QUUyNTAwMDQ4RTQ0MDAzODRCCi06MTA5OTgwMDA4Rjg1MDAzOEFDQTQwMDE4OEU0NjAwMzRBQ0E2MDAxQ0FECi06MTA5OTkwMDBBQ0EwMDAwQ0FDQTAwMDEwQTRBMDAwMTRBNEEwMDAxNjYxCi06MTA5OUEwMDBBNEEwMDAyMEE0QTAwMDIyQUNBMDAwMjQ4RTYyMDAxNDc5Ci06MTA5OUIwMDA1MDQwMDAwMTI0MDIwMDAxOEZCRjAwMjA4RkIzMDAxQzIzCi06MTA5OUMwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTBBQ0EyMDAwODQ1Ci06MTA5OUQwMDAwQTAwMTAxMzI3QkQwMDI4MjdCREZGQzgzQzA1ODAwOERBCi06MTA5OUUwMDAzNEE0MDA4MEFGQkYwMDM0QUZCRTAwMzBBRkI3MDAyQzRFCi06MTA5OUYwMDBBRkI2MDAyOEFGQjUwMDI0QUZCNDAwMjBBRkIzMDAxQzUxCi06MTA5QTAwMDBBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTA5NDgzMDA3ODZCCi06MTA5QTEwMDA5NDgyMDA3QTEwNDMwMDUxMjQwNUZGRkYwMDgwRjAyMTVBCi06MTA5QTIwMDAwQTAwMTEyMzAwODBCODIxMTA4QjAwNEQ4RkJGMDAzNDM1Ci06MTA5QTMwMDA4Rjg2MDBBMDNDMTgwODAwOEYxODAwNUMyNDExRkY4MDVFCi06MTA5QTQwMDAzQzE2ODAwMDAzMDY3ODIxMDFGMTgwMjRBRUQwMDAyQzYyCi06MTA5QTUwMDA5NkVFMDA3QTMxRUMwMDdGM0MwRDgwMEUzMUNCN0ZGRjFCCi06MTA5QTYwMDAwMThENTAyMTAwMEI0ODQwMDEyQUE4MjE5NkE0MDAwMDM2Ci06MTA5QTcwMDAzQzA4MDgwMDhEMDgwMDU4MjQwNUZGODAzMDk1M0ZGRjAyCi06MTA5QTgwMDAwMTA2MTgyMTAwMTUzOTgwMDA2N0M4MjEwMzI1RjgyNDM0Ci06MTA5QTkwMDAzQzAyMDEwMDAzRTI5MDI1MzMzODAwN0YzQzExODAwQzJBCi06MTA5QUEwMDBBRUQyMDAyODAzMTE5MDIxOTI1MDAwMEQzMjBGMDAwNDE1Ci06MTA5QUIwMDAxMUUwMDAzNzAyRTA5ODIxOTZFMzAwN0E5NkU4MDA3QUY4Ci06MTA5QUMwMDA5NkU1MDA3QTI0MDQ4MDAwMzEwNzdGRkYyNEUzMDAwMTNCCi06MTA5QUQwMDAzMDYyN0ZGRjAwQTRGODI0MDNFMkM4MjVBNkY5MDA3QUNCCi06MTA5QUUwMDA5NkU2MDA3QTNDMTQwODAwOEU5NDAwNjAzMEQ2N0ZGRjIyCi06MTA5QUYwMDAxMkQ0MDBDMTAwMDAwMDAwOEU1ODAwMTg4Rjg0MDBBMDBFCi06MTA5QjAwMDAwMkEwMjgyMTI3MTNGRkZGMEUwMDBGQ0VBRTUzMDAyQzFBCi06MTA5QjEwMDA5N0Q1MDA3ODk3RDQwMDdBMTI5NTAwMTAwMDAwMjgyMTdDCi06MTA5QjIwMDAzQzA5ODAwODM1MjQwMTAwM0MwQTgwMDg5MTQ4MDAwODVGCi06MTA5QjMwMDA5MDg3MDBENTMxMTQwMDdGMzBFNDAwRkYwMjg0MzAyQjgxCi06MTA5QjQwMDAxNEMwRkZCOTI2OEIwMDAxOTM4RTAwQUIyNjhDMDAwMTU4Ci06MTA5QjUwMDAwMDhFNjgyMTE1QUNGRkI3OEY4NjAwQTA4RkJGMDAzNDQwCi06MTA5QjYwMDA4RkJFMDAzMDhGQjcwMDJDOEZCNjAwMjg4RkI1MDAyNDMxCi06MTA5QjcwMDA4RkI0MDAyMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNDc3Ci06MTA5QjgwMDA4RkIwMDAxMDAwQTAxMDIxMDNFMDAwMDgyN0JEMDAzOEFFCi06MTA5QjkwMDAwMEMwMjAyMTBFMDAwRjk5MDI4MDI4MjE4RTRCMDAxMDVBCi06MTA5QkEwMDA4RTRDMDAzMDhGODQwMDM4MjQwOTAwMDIwMTZDNTAyMzUxCi06MTA5QkIwMDBBRTRBMDAxMEEwODkwMDAwOTZFMzAwNUM4RTQ0MDAzMDlECi06MTA5QkMwMDA4RjkxMDAzODBFMDAwRkY0MzA3MEZGRkYwMDAyNDM4MEM5Ci06MTA5QkQwMDAwMjA4MzgyNTNDMDI0MjAwMDBFMjI4MjVBRTI1MDAwNDk4Ci06MTA5QkUwMDA4RTVGMDAwNDhGOEEwMDM4OEU1OTAwMDAyNDBCMDAwODE1Ci06MTA5QkYwMDBBRDVGMDAxQ0FENTkwMDE4QUQ0MDAwMENBRDQwMDAxMDI5Ci06MTA5QzAwMDA5MjQ2MDAwQTI0MDQwMDA1MjQwOEMwMDAzMEQwMDBGRjVBCi06MTA5QzEwMDBBNTUwMDAxNDk2NTgwMDA4QTU1ODAwMTY5MjUxMDAwQTQ1Ci06MTA5QzIwMDAzQzE4ODAwODMyMkYwMEZGQTU0RjAwMjA5NjRFMDAwOEY4Ci06MTA5QzMwMDAzNzExMDEwMEE1NEUwMDIyQUQ0MDAwMjQ5MjREMDAwQkNCCi06MTA5QzQwMDAzMUFDMDBGRkE1NEMwMDAyQTE0QjAwMDE4RTQ5MDAzMDUxCi06MTA5QzUwMDA4RjgzMDAzODI0MEJGRkJGQUM2OTAwMDhBMDY0MDAzMDdDCi06MTA5QzYwMDA4RjkwMDAzODI0MDNGRkRGOTYwNzAwMzIwMEU4MjgyNDk1Ci06MTA5QzcwMDAwMEI1MTAyNUE2MDIwMDMyOTIxRjAwMzIzM0Y5MDAzRkQyCi06MTA5QzgwMDAzNzI2MDA0MEEyMDYwMDMyOEY4QzAwMzhBRDgwMDAzNEE5Ci06MTA5QzkwMDA4RTJGMDBEMEFEOEYwMDM4OTE4RTAwM0MzQzBGN0ZGRjlGCi06MTA5Q0EwMDAzMUNEMDA3RkExOEQwMDNDOEY4NDAwMzgzNUVFRkZGRjYxCi06MTA5Q0IwMDA5MDhBMDAzQzAxNEI0ODI0QTA4OTAwM0M4Rjg1MDAzOEU1Ci06MTA5Q0MwMDA5MEE4MDAzQzAxMDMzODI0QTBBNzAwM0M4RTQyMDAzNDM5Ci06MTA5Q0QwMDA4RjkxMDAzODNDMDM4MDA4QUUyMjAwNDA4RTU5MDAyQzQyCi06MTA5Q0UwMDA4RTVGMDAzMDAzM0YzMDIzQUUyNjAwNDQ5MjMwMDA0OEEwCi06MTA5Q0YwMDAzMjE4MDA3RkEyMzgwMDQ4OEY4ODAwMzg4RTREMDAzMDFGCi06MTA5RDAwMDA4RDBDMDA0ODAxQUU1ODI0MDE5NjUwMjQwMTRCNDgyNTgzCi06MTA5RDEwMDBBRDA5MDA0ODkyNDQwMDBBQTEwNDAwNEM5NjQ3MDAwODhGCi06MTA5RDIwMDA4Rjg1MDAzOEE0QTcwMDRFOEU1MDAwMzA4RTQ0MDAzMDNFCi06MTA5RDMwMDAwRTAwMDM4MThDNjUwMDYwOTJGOTAwN0MwMDAyRjk0MEZFCi06MTA5RDQwMDAwMDQwMjgyMTAwMDIxMTAwMDNFMjMwMjEzMzM2MDAwMkQ2Ci06MTA5RDUwMDAxMkMwMDAwMzAyMDY4MDIxMDAwNUIwODAwMjE2ODAyMTk3Ci06MTA5RDYwMDA5MjZEMDA3QzMxQjMwMDA0MTI2MDAwMDIwMDA1NzA4MDI3Ci06MTA5RDcwMDAwMjBFODAyMThFNEIwMDMwOEY4ODAwMzgyNDA1ODAwMDMxCi06MTA5RDgwMDAzMTZBMDAwMzAwMEE0ODIzMzEyNDAwMDMwMjA0MTgyMTI5Ci06MTA5RDkwMDBBRDAzMDAzNDk2RTQwMDdBOTZGMDAwN0E5NkYxMDA3QUVBCi06MTA5REEwMDAzMjAyN0ZGRjI0NDcwMDAxMzBGRjdGRkYwMjI1QzgyNEQ1Ci06MTA5REIwMDAwMzNGMzAyNUE2RTYwMDdBOTZGODAwN0EzQzEyMDgwMEE4Ci06MTA5REMwMDA4RTUyMDA2MDMzMEY3RkZGMTFGMjAwMTgwMDAwMDAwMDc4Ci06MTA5REQwMDA4Rjg0MDBBMDBFMDAwRkNFMDJBMDI4MjE4Rjg0MDBBMDQ3Ci06MTA5REUwMDAwRTAwMEZERTAyODAyODIxMEUwMDEwMTMwMDAwMDAwMDdDCi06MTA5REYwMDAwQTAwMTExRjAwMDAwMDAwOTZGMTAwN0EwMjI0ODAyNDVFCi06MTA5RTAwMDBBNkYwMDA3QTkyRUYwMDdBOTJFQjAwN0EzMUVFMDBGRjMyCi06MTA5RTEwMDAwMDBFNjlDMjAwMEQ2MDI3MDAwQzUxQzAzMTY5MDA3RjNGCi06MTA5RTIwMDAwMTJBMjAyNTBBMDAxMTE5QTJFNDAwN0E5NkU2MDA3QTk4Ci06MTA5RTMwMDAwMEM1QzAyNEE2RjgwMDdBOTJFRjAwN0E5MkYzMDA3QTY3Ci06MTA5RTQwMDAzMUYyMDBGRjAwMTI3MUMyMDAwRTY4MjcwMDBEQjFDMDkwCi06MTA5RTUwMDAzMjZDMDA3RjAxOTYyODI1QTJFNTAwN0EwQTAwMTFEMDE1Ci06MTA5RTYwMDA4Rjg0MDBBMDNDMDM4MDAwMzA4NEZGRkYzMEE1RkZGRkZCCi06MTA5RTcwMDBBQzY0MDAxOEFDNjUwMDFDMDNFMDAwMDg4QzYyMDAxNEEwCi06MTA5RTgwMDAyN0JERkZBMDNDMDY4MDA4QUZCRjAwNUNBRkJFMDA1OEY2Ci06MTA5RTkwMDBBRkI3MDA1NEFGQjYwMDUwQUZCNTAwNENBRkI0MDA0OEY4Ci06MTA5RUEwMDBBRkIzMDA0NEFGQjIwMDQwQUZCMTAwM0NBRkIwMDAzODM4Ci06MTA5RUIwMDAzNEM4MDEwMDkxMDUwMEQ1OTBDNzAwMDgzMDg0RkZGRjI5Ci06MTA5RUMwMDAzMEE1MDBGRjMwRTIwMDdGMDA0NTE4MkFBRkE0MDAxMDQzCi06MTA5RUQwMDBBN0EwMDAxOEE3QTAwMDI2MTA2MDAwNTVBRkEwMDAxNDhFCi06MTA5RUUwMDA5MENBMDAwODMxNDkwMDdGMDBBOTMwMjMyNEQzRkZGRjI2Ci06MTA5RUYwMDAwMDEzODAyQjhGQjQwMDEwMDAxNDkwMkIwMjEyODgyNEMyCi06MTA5RjAwMDA1MjIwMDA4ODhGQjMwMDE0M0MwMzgwMDg5NDc5MDA1MkRCCi06MTA5RjEwMDA5NDdFMDA1MDhGQjYwMDEwMDMzRUMwMjMwMDE4QkMwMDkyCi06MTA5RjIwMDAwMDE3MTQwMzAwMTZGQzAwMDJDMkE4MkExNkEwMDAwMkEzCi06MTA5RjMwMDAwMDFGMkMwMzAwNDAyODIxMDAxMzNDMDAwMDA3MjQwM0NECi06MTA5RjQwMDAwMEE0MTAyQTU0NDAwMDAxMDBBMDIwMjEyODg1MDAwOTA3Ci06MTA5RjUwMDAxNEEwMDAwMjAwODBBMDIxMjQxNDAwMDgzQzBDODAwOEZBCi06MTA5RjYwMDA4RDg2MDA0ODAwMTQ1OTgwOEQ4ODAwNEMzQzAzODAwMDg5Ci06MTA5RjcwMDAzMTY5RkZGRjNDMEEwMDEwMDEyQTIwMjUzNDcxMDQwMERBCi06MTA5RjgwMDBBQzY2MDAzOEFGOTEwMEE0QUM2ODAwM0NBQzY0MDAzMDEzCi06MTA5RjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMxCi06MTA5RkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIxCi06MTA5RkIwMDA4QzZFMDAwMDMxQ0QwMDIwMTFBMEZGRkQwMDE0NzgyQTI2Ci06MTA5RkMwMDAwMUYwMTAyNDEwNDAwMDM5MDAwMEE4MjEzQzE2ODAwODQwCi06MTA5RkQwMDA5MkQ3MDAwODNDMTI4MDAwOEU0NDAxMDAzMkY2MDA3RkM4Ci06MTA5RkUwMDAwRTAwMEY5OTAyQzAyODIxOEUzOTAwMTA4RTQ0MDEwMDA2Ci06MTA5RkYwMDAwMDAwOTAyMTMzMzczRkZGMEUwMDBGQjEwMkUwMjgyMTBGCi06MTBBMDAwMDA5MjM4MDAwMDMzMDIwMDNGMkM1MDAwMDg1MjAwMDAxMDJDCi06MTBBMDEwMDAwMDAwODgyMTAwMDIxMDgwM0MwMzA4MDAyNDYzNThFNEZCCi06MTBBMDIwMDAwMDQzRjgyMThGRkUwMDAwMDNDMDAwMDgwMDAwMDAwMDdDCi06MTBBMDMwMDA5MENGMDAwODkzOEMwMEFCMzFFRTAwN0YwMEFFNjgyMzE4Ci06MTBBMDQwMDAwMThENTgyMTBBMDAxMjE3MjU3M0ZGRkYwMDAwODgyMTk3Ci06MTBBMDUwMDAzQzFFODAwMDhGQzQwMTAwMEUwMDBGQ0UwMkUwMjgyMUJDCi06MTBBMDYwMDA4RkM0MDEwMDBFMDAwRkRFMDJDMDI4MjExMjIwMDAwRjU1Ci06MTBBMDcwMDAwMDEzODAyQjhGOEIwMEE0MjZBNDAwMDEwMDA0QUMwMEU5Ci06MTBBMDgwMDAwMjcyOTgyMzAwMTVBQzAzMjU3ODAwNDAwMkI0QjAyQTcwCi06MTBBMDkwMDAwMDEzODAyQjI0MTcwMDAxMDMwMDg4MjEwMkQwMTAyNDE0Ci06MTBBMEEwMDBBRjk4MDBBNDE0NDBGRkM5QUZCNzAwMTQzQzA3ODAwODY0Ci06MTBBMEIwMDA5NEUyMDA1MDhGQUUwMDEwM0MwNTgwMDAwMkEyODgyMTdGCi06MTBBMEMwMDAzQzA2MDAyMEE0RjEwMDUwQUNBNjAwMzA5NEY0MDA1MEVGCi06MTBBMEQwMDA5NEVGMDA1MjAxRDUxODIzMzA2Q0ZGRkYxMUY0MDAxRURECi06MTBBMEUwMDBBRkFDMDAxMDhDRUYwMDRDMDAxNTYxODA4Q0Y1MDA0ODdGCi06MTBBMEYwMDAwMUVDMjgyMTAwMDAyMDIxMDBBQzU4MkIwMkE0QzAyMTMzCi06MTBBMTAwMDAwMzBCQjAyMUFDRTUwMDRDQUNGNjAwNDg4RkI0MDAxMDU2Ci06MTBBMTEwMDAwMDE0OTAyQjAyMTI4ODI0MTYyMEZGN0MzQzAzODAwODM4Ci06MTBBMTIwMDA4RkIzMDAxNDhGQkYwMDVDOEZCRTAwNTgzQTYyMDAwMUVECi06MTBBMTMwMDA4RkI3MDA1NDhGQjYwMDUwOEZCNTAwNEM4RkI0MDA0OEQ1Ci06MTBBMTQwMDA4RkIzMDA0NDhGQjIwMDQwOEZCMTAwM0M4RkIwMDAzODE1Ci06MTBBMTUwMDAwM0UwMDAwODI3QkQwMDYwOTRGRTAwNTQ4Q0YyMDA0NDI4Ci06MTBBMTYwMDAzM0M5RkZGRTAwMDlDOEMwMDI1OUY4MjFBQ0JGMDAzQzRBCi06MTBBMTcwMDA4Q0U4MDA0NDhDQUQwMDNDMDEwRDUwMjMxOTQwMDAzQjlECi06MTBBMTgwMDAwMDAwMDAwMDhDRjcwMDQwMjZFMjAwMDFBQ0EyMDAzODdECi06MTBBMTkwMDAzQzA1MDA1MDM0QTcwMDEwM0MwMzgwMDBBQzY3MDAzMDQxCi06MTBBMUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFGCi06MTBBMUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlGCi06MTBBMUMwMDA4Qzc4MDAwMDMzMTYwMDIwMTJDMEZGRkQzQzExODAwODdGCi06MTBBMUQwMDA5NjIyMDA1NDNDMTU4MDAwM0MwNjgwMDgzMDRFMDAwMTU5Ci06MTBBMUUwMDAwMDBFMThDMDAwNzU3ODIxOERFQzA0MDAzQzA3MDgwMEIzCi06MTBBMUYwMDA4Q0U3MDA0NDNDMDQwMDIwQUNDQzAwNDg4REY0MDQwNEZGCi06MTBBMjAwMDAyNDBCMDAwMUFDRDQwMDRDMTBFQjAyNjBBRUE0MDAzMDczCi06MTBBMjEwMDA5NjM5MDA1MjNDMDUwODAwOENBNTAwNDAwMEI5OTAyMUY5Ci06MTBBMjIwMDBBNjMyMDA1Mjk2M0YwMDU0MjdFRDAwMDFBNjJEMDA1NDlGCi06MTBBMjMwMDA5NjI2MDA1NDMwQzRGRkZGNTQ4N0ZGMkY4RkI0MDAxMEMwCi06MTBBMjQwMDAzMEE1RkZGRjBFMDAxMUY0QTYyMDAwNTQzQzA3MDgwMEMzCi06MTBBMjUwMDA4Q0U3MDAyNDk2M0UwMDUyMDA0N0I4MjMwM0Q3NDgyM0RBCi06MTBBMjYwMDBBNjI5MDA1MjBBMDAxMjE5OEZCNDAwMTA4Q0UyMDA0MDk3Ci06MTBBMjcwMDAwQTAwMTJCRTAwMDAwMDAwOTIyNDAwMDEyNDA3MDAwMTIxCi06MTBBMjgwMDAzMDg1MDA3RjE0QTcwMDFDOTdBRDAwMjY4RTJCMDAxNDhDCi06MTBBMjkwMDAyNDBDQzAwMDMxNkEzRkZGMDFBQzQ4MjQzQzA2MDgwMDkyCi06MTBBMkEwMDA4Q0M2MDA2MDAxMkE0MDI1MzEwNDNGRkYwMDg2ODgyQkMwCi06MTBBMkIwMDAxMjIwMDAxMUE3QTgwMDI2M0MwNTA4MDA4Q0E1MDA1ODE0Ci06MTBBMkMwMDA4RjkxMDBBMDAwMDQzOTgwMjQwMkZGODAwMEIxMTgyMTgyCi06MTBBMkQwMDAwMDY3RjgyMTAzRTJGMDI0MzNGODAwN0YzQzEyODAwMDhECi06MTBBMkUwMDAzQzE5ODAwRUFFNUUwMDJDMDMxOTcwMjE5MUQwMDAwRDM4Ci06MTBBMkYwMDAzNjBGMDAwNEExQ0YwMDBEMEUwMDEwMjgyNDEyMDAwMTFCCi06MTBBMzAwMDAyNDExMDAwMTNDMUU4MDAwOEZDNDAxMDAwRTAwMEZDRUZFCi06MTBBMzEwMDAwMkUwMjgyMThGQzQwMTAwMEUwMDBGREUwMkMwMjgyMUI4Ci06MTBBMzIwMDAxNjIwRkY1NThGOEIwMEE0MEEwMDEyODYwMDEzODAyQjg1Ci06MTBBMzMwMDA4Rjg2MDBBNDkwQzgwMDAxMzEwNDAwMjAxMDgwMDE5MTk0Ci06MTBBMzQwMDAyNDEwMDAwMTNDMDQ4MDA4MzQ4QjAwODA5MTZBMDA3QzVBCi06MTBBMzUwMDA4RjlFMDAzNEFGQTAwMDJDMzE0OTAwMDExMTIwMDAwRjY2Ci06MTBBMzYwMDBBRkIwMDAyODhDQ0QwMDE0OEM4RTAwNjAwMUFFNjAyQjQ1Ci06MTBBMzcwMDAxNTgwMDAwMjAxQTAzODIxOEM4NzAwNjAzQzE4ODAwOEZECi06MTBBMzgwMDAzNzAzMDA4MDhDNzAwMDcwMDBGMDc4MkIxNUUwMDAwMjFECi06MTBBMzkwMDAwMEUwMjAyMThDNjQwMDcwQUZBNDAwMkMzQzAyODAwOEY3Ci06MTBBM0EwMDAzNDQ1MDA4MDhDRDIwMDE0OENCRjAwNzAwMjVGQzgyQjMzCi06MTBBM0IwMDAxNzIwMDAwMjAyNDAyMDIxOENBNDAwNzA4RkE3MDAyQ0RGCi06MTBBM0MwMDAwMDg3MTgyMzEwNjAwMDAzQUZBMzAwMzAyNDA1MDAwMkFCCi06MTBBM0QwMDBBRkE1MDAyODhGQTQwMDI4MDI2NDg4MkIxNjIwMDBCQTlECi06MTBBM0UwMDAwMDAwMTgyMThDRDAwMDM4OEZDRTAwMEMzQzBGMDA4MDZDCi06MTBBM0YwMDBBRkQwMDAwMDhDQ0QwMDM0M0MwQ0ZGOUYwMUNGNTgyNTFFCi06MTBBNDAwMDBBRkNEMDAwNDkwQ0EwMDNGMzU4NkZGRkYwMTY2MjAyNENGCi06MTBBNDEwMDAzQzA5MDAyMDNDMDhGRkVGQTNDQTAwMEIwMDg5MzgyNTQ3Ci06MTBBNDIwMDAzNTExRkZGRjAwRjExODI0M0MwNTAwMDg4Rjg3MDBBNEI4Ci06MTBBNDMwMDAwMDY1QzgyNUFGRDkwMDBDOENFMjAwMTRBRkMwMDAxODJECi06MTBBNDQwMDA4RkE2MDAzMEFGQzIwMDE0OENGODAwMTg4RkIwMDAyQzFCCi06MTBBNDUwMDAzQzFGRkZGQkFGRDgwMDFDOENFRjAwMDgzN0YyRkZGRjVBCi06MTBBNDYwMDAwMzMyNjgyNEFGQ0YwMDI0OENFQzAwMEMwMjA2NzAyMTZDCi06MTBBNDcwMDBBRkNEMDAwQ0E3QzAwMDM4QTdDMDAwM0FBRkNFMDAyQzZCCi06MTBBNDgwMDBBRkNDMDAyMEFGQzAwMDI4OENFQTAwMTQ4RkFCMDAyQ0FBCi06MTBBNDkwMDAwMTRCNDgyMzAxMjY0MDIzMTEwMDAwMTFBRkM4MDAxMEQyCi06MTBBNEEwMDA5MEVCMDAzRDhGQzkwMDA0OEZDODAwMDAwMDBCNTEwMEU1Ci06MTBBNEIwMDAwMTJBMjgyMTAwMDAxMDIxMDBBQTg4MkIwMTAyMTgyMTVFCi06MTBBNEMwMDAwMDcxRjgyMUFGQzUwMDA0QUZERjAwMDA5MEYyMDAzRDNECi06MTBBNEQwMDBBM0QyMDAwQThGOTkwMEE0OTczODAwMDZBN0Q4MDAwOEQ1Ci06MTBBNEUwMDA4RjkxMDAzODI0MDgwMDAyM0MwMzgwMDhBMjI4MDAwMDU1Ci06MTBBNEYwMDAzNDY1MDA4MDk0QkYwMDVDOEZBNDAwMkMzM0YwRkZGRjE0Ci06MTBBNTAwMDAwRTAwMEZGNDhGOTIwMDM4MDAwMkNCODA4Rjg1MDBBNERDCi06MTBBNTEwMDAwMjE5NzgyNTNDMTg0MjAwMDFGODcwMjVBRTRFMDAwNDVGCi06MTBBNTIwMDA4Rjg0MDAzODhDQUQwMDM4QUM4RDAwMTg4Q0FDMDAzNEIyCi06MTBBNTMwMDBBQzhDMDAxQ0FDODAwMDBDQUM4MDAwMTBBNDgwMDAxNDFCCi06MTBBNTQwMDBBNDgwMDAxNkE0ODAwMDIwQTQ4MDAwMjJBQzgwMDAyNEY3Ci06MTBBNTUwMDA5MEE2MDAzRjhGQTcwMDJDQTQ4NjAwMDI1MEUwMDE5MjM1Ci06MTBBNTYwMDAyNDA3MDAwMThGQTIwMDMwNTA0MDAwMDI5MEEyMDAzRDVECi06MTBBNTcwMDA5MEEyMDAzRTI0NEEwMDAxQTA4QTAwMDE4Rjg0MDAzODg2Ci06MTBBNTgwMDA4RkE5MDAyQ0FDODkwMDA4M0MxMjgwMDgzNjREMDA4MDUxCi06MTBBNTkwMDA5MUFDMDA3QzMxODYwMDAyMTRDMDAwMDIyNDA3MDAzNDE0Ci06MTBBNUEwMDAyNDA3MDAzMDhGODUwMEE0M0MxOTgwMDgzNzNGMDA4MEM1Ci06MTBBNUIwMDA5MEIwMDAwMDkzRjkwMDdDMjQwRTAwMDRBMDkwMDAzMEJECi06MTBBNUMwMDA4RjhGMDBBNDhGQjgwMDJDOEY4RDAwMzg5MUYyMDAwMTdFCi06MTBBNUQwMDAzMzA0MDAwMzAxQzQ2MDIzQTFCMjAwMzE4RjhFMDAzODIwCi06MTBBNUUwMDA4Rjg2MDBBNDI0MDJDMDAwOTVDQTAwMzI5NEM5MDAxMkNDCi06MTBBNUYwMDA4RkFCMDAyQzAxNDI0MDI0MzEyMzNGRkYwMTAzODgyNTBCCi06MTBBNjAwMDBBNUQxMDAzMjkxRDAwMDMyMzE4NTAwMDMwMEVCRjgyMTUyCi06MTBBNjEwMDAzMjE4MDAzRjM3MEYwMDQwQTFDRjAwMzI4RkE0MDAyQzJBCi06MTBBNjIwMDAwM0U1MzgyMTMzMjgwMDA0MTA4MDAwMDI4Rjg1MDAzOEFDCi06MTBBNjMwMDAwMEU4MzgyMTNDMEE4MDA4QUNBNzAwMzQzNTQ5MDEwMDA1Ci06MTBBNjQwMDA4RDI4MDBEMDhGQTMwMDJDMjQxOUZGQkZBQ0E4MDAzOEEwCi06MTBBNjUwMDA5MEIxMDAzQzJDNjQwMDAxMjQwRkZGREYzMjI3MDA3RjAzCi06MTBBNjYwMDBBMEE3MDAzQzhGOTgwMDM4MDAwNDkxNDA5MzFGMDAzQzQ1Ci06MTBBNjcwMDAwM0Y5ODAyNEEzMTAwMDNDOEY4QzAwMzg5MThFMDAzQzlECi06MTBBNjgwMDAwMUNGNjgyNDAxQjIzMDI1QTE4NjAwM0M4Rjg5MDBBNDQ3Ci06MTBBNjkwMDA4Rjg4MDAzODhEMkIwMDIwQUQwQjAwNDA4RDIyMDAyNEM4Ci06MTBBNkEwMDBBRDAyMDA0NDhEMkEwMDI4QUQwQTAwNDg4RDIzMDAyQ0ZECi06MTBBNkIwMDAwRTAwMTAxM0FEMDMwMDRDOEZCMTAwMjgyNDA3MDAwMkQ4Ci06MTBBNkMwMDAxMjI3MDAxMThGQTMwMDI4MDAwMzI4MkIwMDA1ODAyM0U4Ci06MTBBNkQwMDAwMjcwOTgyNDAwNjA4MDIxMDA2MDkwMjEwQTAwMTI2RkFGCi06MTBBNkUwMDAwMDEwODgyQjk2MjkwMDEyOEY4NDAwQTAwMDAwOTAyMTcyCi06MTBBNkYwMDAzMTI1RkZGRkE3QTkwMDE4MEUwMDBGQzIyNDExMDAwMTg5Ci06MTBBNzAwMDAwQTAwMTMxRDNDMUU4MDAwM0MwQjgwMDAzQzEyODAwODk4Ci06MTBBNzEwMDA4RDY0MDEwMDkyNDkwMDA4OEY5MkZGMzQwRTAwMEY5OTVBCi06MTBBNzIwMDAzMTI1MDA3RjhGOTkwMDM4OEZBNzAwMjg4RkE0MDAzMDMzCi06MTBBNzMwMDBBMzI3MDAwMDk2NUYwMDVDMzNGMEZGRkYwRTAwMEZGNENDCi06MTBBNzQwMDA4RjkxMDAzODAwMDI2QjgwMDIwRDgwMjUzQzA4NDIwMDhBCi06MTBBNzUwMDA4RjhEMDBBNDAyMDg1MDI1QUUyQTAwMDQ4REE1MDAzODc0Ci06MTBBNzYwMDA4RjhBMDAzODAwMDA3ODIxMDAwRjExMDBBRDQ1MDAxOEQ1Ci06MTBBNzcwMDA4REI4MDAzNDNDMDQ3RkZGMzQ4OEZGRkZBRDU4MDAxQ0M3Ci06MTBBNzgwMDA5MUE2MDAzRThENEMwMDFDOEQ0OTAwMTgwMDA2MTkwMDUyCi06MTBBNzkwMDAwMDA2NzcwMjAxODNDODIxMDA0RTU4MjUwMzIzODgyQjI5Ci06MTBBN0EwMDAwMTJCMzgyMTAwRjFGODIxQUQ1OTAwMUNBRDVGMDAxOEQ0Ci06MTBBN0IwMDBBRDQwMDAwQ0FENDAwMDEwOTFCMDAwM0U4RkE0MDAzMEMxCi06MTBBN0MwMDAyNDA5MDAwNUE1NTAwMDE0OTVBNTAwMDQyNDE5QzAwMDEzCi06MTBBN0QwMDAwMDg4NDAyNEE1NDUwMDE2OTFCODAwM0VBNTU4MDAyMEU5Ci06MTBBN0UwMDA5NUFGMDAwNEE1NEYwMDIyQUQ0MDAwMjQ5MUFFMDAzRjdDCi06MTBBN0YwMDBBNTRFMDAwMjkxQTYwMDNFOTFBQzAwM0QwMTg2MTAyM0JCCi06MTBBODAwMDAyNDRCMDAwMUExNEIwMDAxOEY5MTAwMzg4RkEzMDAzMDMxCi06MTBBODEwMDAzQzAyODAwODM0NEIwMTAwQUUyMzAwMDhBMjI5MDAzMDFFCi06MTBBODIwMDA4RjhDMDAzODhGODcwMEE0OTU5RjAwMzI5NEYwMDAxMjFGCi06MTBBODMwMDAyNDA3RkZCRjAzM0ZDMDI0MzIwNTNGRkYwMzA1NzgyNUVGCi06MTBBODQwMDBBNThGMDAzMjkxOEUwMDMyMjQxOEZGREYzMUNEMDAzRkZBCi06MTBBODUwMDAzNUE2MDA0MEExODYwMDMyOEY5MTAwMzgyNDBERkZGRkZECi06MTBBODYwMDAyNDBDRkY4MEFFMjAwMDM0OEQ2QTAwRDBBRTJBMDAzODYwCi06MTBBODcwMDA5MjIzMDAzQzMwNjkwMDdGQTIyOTAwM0M4RjkwMDAzODcxCi06MTBBODgwMDAzQzAzODAwMDkyMTkwMDNDMDMyN0Y4MjRBMjFGMDAzQ0RGCi06MTBBODkwMDA4RjhFMDAzODkxQzUwMDNDMDBCODc4MjRBMUNGMDAzQ0QxCi06MTBBOEEwMDA4RjhBMDAzODNDMEU4MDA4QUQ0RDAwNDA4RkE2MDAyQ0VBCi06MTBBOEIwMDBBRDQ2MDA0NDkxNDIwMDQ4MDA0QzU4MjVBMTRCMDA0ODQ5Ci06MTBBOEMwMDA4RjkwMDAzODhGOTkwMEE0OEUwOTAwNDgwMTIzODgyNEI2Ci06MTBBOEQwMDAwMjI4MzgyNUFFMDcwMDQ4OTMzRjAwM0VBMjFGMDA0Q0Q3Ci06MTBBOEUwMDA4Rjk4MDBBNDhGOEYwMDM4OTcwNTAwMDRBNUU1MDA0RUNGCi06MTBBOEYwMDAwRTAwMDM4MThEQzUwMDYwOTI0NjAwN0M4RkFDMDAzMDU1Ci06MTBBOTAwMDAwMDAyNjk0MDAwMDI5MTAwMDA0MDI4MjEzMENCMDAwMjgzCi06MTBBOTEwMDAwMUIyMTAyMTE1NjAwMEFBMDE4MjMwMjEzQzBFODAwODhFCi06MTBBOTIwMDAzNUMyMDA4MDkwNEMwMDdDMzE4MzAwMDQxMDYwMDAwMzJECi06MTBBOTMwMDA4RkI5MDAzMDAwMDU3ODgwMDBDRjMwMjEyNDFGMDAwNDNCCi06MTBBOTQwMDA4RjkxMDAzODMzMkQwMDAzMDNFRDgwMjMzMjA4MDAwMzdDCi06MTBBOTUwMDAwMEM4NTAyMUFFMkEwMDM0M0MxODgwMDBBN0M1MDAzODNBCi06MTBBOTYwMDAzQzA2ODAwODhGMDQwMTAwOTBERTAwMDgwRTAwMEZERTE4Ci06MTBBOTcwMDAzM0M1MDA3RjBFMDAxMDEzMDAwMDAwMDAwQTAwMTQwRDA0Ci06MTBBOTgwMDA4RkEzMDAyODhGOTgwMDM0OENDOTAwMzgyNDFGMDAwMzNGCi06MTBBOTkwMDBBNzAwMDAwOEFGMDkwMDAwOENDNTAwMzRBMzAwMDAwQTFFCi06MTBBOUEwMDA4Rjk5MDBBNEFGMDUwMDA0M0MwODAwODA5MzJEMDAzRjYwCi06MTBBOUIwMDBBMzFGMDAwQzhGMEEwMDBDM0MwMkZGOUZBMzBEMDAwQjhECi06MTBBOUMwMDAwMTQ4RjAyNTM0NTFGRkZGM0MxMkZGRUY4Rjk5MDBBNDlFCi06MTBBOUQwMDAwM0QxNzAyNDM2NDZGRkZGMDFDNjE4MjRBRjAzMDAwQ0Q0Ci06MTBBOUUwMDA4RjJDMDAxNDk3MjkwMDEyOEY4NDAwQTBBRjBDMDAxMDQ4Ci06MTBBOUYwMDA4RjJGMDAxNEFGMDAwMDE4QUYwMDAwMjBBRjBGMDAxNDFECi06MTBBQTAwMDBBRjAwMDAyNDhGMjcwMDE4MzEyRjNGRkYwMDBGNTk4MDFGCi06MTBBQTEwMDBBRjA3MDAyODhGMjUwMDA4MDE2NEY4MjEzMTJEMDAwMUJGCi06MTBBQTIwMDBBRjA1MDAzMDhGMzEwMDBDOEY5MjAwMzgwMDFGNTFDMkVCCi06MTBBQTMwMDAwMDBENDM4MDAxNDgxMDIxMjQxRTAwMDIzQzA2ODAwOEJFCi06MTBBQTQwMDBBNzAyMDAxQ0E3MDAwMDM0QUYxMTAwMkNBMjVFMDAwMDdBCi06MTBBQTUwMDAzNEQyMDA4MDk2NEUwMDVDOEY5OTAwMzgzQzAzNDIwMDRGCi06MTBBQTYwMDAzMUNDRkZGRjAxODMzODI1QUYyNzAwMDQ4RjhCMDBBNDcyCi06MTBBQTcwMDAyNDA1MDAwMTI0MDJDMDAwOEQ2NDAwMzgyNDA3MDAzNDNFCi06MTBBQTgwMDBBRjI0MDAxODhENjkwMDM0QUYyOTAwMUNBRjIwMDAwQ0UyCi06MTBBQTkwMDBBRjIwMDAxMEE3MjAwMDE0QTcyMDAwMTZBNzIwMDAyMDM4Ci06MTBBQUEwMDBBNzIwMDAyMkFGMjAwMDI0QTczMDAwMDJBMzI1MDAwMTI4Ci06MTBBQUIwMDA4Rjg4MDAzODhGOUYwMEE0QUQxMDAwMDg5M0VEMDAwMDMwCi06MTBBQUMwMDBBMTBEMDAzMDhGOEEwMEE0OEY5ODAwMzg5MTUxMDAwMUE5Ci06MTBBQUQwMDBBMzExMDAzMThGOEIwMDM4OTU3RTAwMzIwM0MyNzAyNEExCi06MTBBQUUwMDAwMUNGNjAyNUE1NkMwMDMyOTE2MzAwMzIzMDY0MDAzRkQ1Ci06MTBBQUYwMDBBMTY0MDAzMjkyNDkwMDdDMzEyNTAwMDIxNEEwMDAwMkJBCi06MTBBQjAwMDA4Rjg0MDAzODI0MDcwMDMwM0MxOTgwMDhBQzg3MDAzNDVCCi06MTBBQjEwMDAzNzMyMDEwMDhFNUYwMEQwMjQwQUZGQkYwMjAwOTAyMTZGCi06MTBBQjIwMDBBQzlGMDAzODkwOEQwMDNDMzFBODAwN0ZBMDg4MDAzQzhECi06MTBBQjMwMDA4RjlFMDAzODkzQzIwMDNDMDA0QTg4MjRBM0QxMDAzQzc5Ci06MTBBQjQwMDA4RjgzMDAzODAwMTA4ODJCOTA2NjAwM0MzNENFMDAyMEE0Ci06MTBBQjUwMDBBMDZFMDAzQzhGODQwMEE0OEY5ODAwMzg4QzhDMDAyMDVECi06MTBBQjYwMDBBRjBDMDA0MDhDOEYwMDI0QUYwRjAwNDQ4Qzg3MDAyODZFCi06MTBBQjcwMDBBRjA3MDA0ODhDOEIwMDJDQUYwQjAwNEMwRTAwMTAxMzVECi06MTBBQjgwMDAzQzFFODAwMDBBMDAxMjcwMDAwMDAwMDA5NEM4MDA1MkIxCi06MTBBQjkwMDAzQzBBMDgwMDhENEEwMDI0MDE0ODg4MjFBNEQxMDA1MkIzCi06MTBBQkEwMDAwQTAwMTIxOThGQjQwMDEwQTA4NzAwMDE4Rjg0MDAzOEFBCi06MTBBQkIwMDAyNDBCMDAwMUFDOEIwMDA4MEEwMDEzQkUzQzEyODAwODc1Ci06MTBBQkMwMDAwMDA1MjA4MDBBMDAxNEEyMDBDNDMwMjEyN0JERkZFMDQ4Ci06MTBBQkQwMDAzQzBEODAwOEFGQjIwMDE4QUZCMDAwMTBBRkJGMDAxQzMyCi06MTBBQkUwMDBBRkIxMDAxNDM1QjIwMDgwOEU0QzAwMTgzNUE4MDEwMEJBCi06MTBBQkYwMDA5NjRCMDAwNjk1QTcwMDUwOTEwOTAwRkMwMDBDNTYwMkU4Ci06MTBBQzAwMDAwMTY3MjgyMzMxNDMwMDdGMzEyNjAwRkYyNDAyMDAwMzFGCi06MTBBQzEwMDBBRjgzMDBBOEFGODQwMEEwMTBDMjAwMUIzMEIwRkZGRkJDCi06MTBBQzIwMDA5MTA2MDBGQzI0MTIwMDA1MzBDMjAwRkYxMDUyMDAzM0QwCi06MTBBQzMwMDAwMDAwMDAwMDE2MDAwMDA5OEZCRjAwMUM4RkIyMDAxODMyCi06MTBBQzQwMDA4RkIxMDAxNDhGQjAwMDEwMjQwRDBDMDAzQzBDODAwMDVDCi06MTBBQzUwMDAyN0JEMDAyMDAzRTAwMDA4QUQ4RDAwMjQwRTAwMTFGQjhECi06MTBBQzYwMDAwMjAwMjAyMThGQkYwMDFDOEZCMjAwMTg4RkIxMDAxNDhBCi06MTBBQzcwMDA4RkIwMDAxMDI0MEQwQzAwM0MwQzgwMDAyN0JEMDAyMDdDCi06MTBBQzgwMDAwM0UwMDAwOEFEOEQwMDI0OTY1ODAwNzg5NjUxMDA3QUI0Ci06MTBBQzkwMDA5MjRFMDA3RDAyMzg3ODI2MzFFOEZGRkYzMUM0MDBDMEIzCi06MTBBQ0EwMDAxNDgwMDAwOTJEMTEwMDAxMTYwMDAwMzcwMDAwMDAwMDdCCi06MTBBQ0IwMDA1NjIwRkZFMjhGQkYwMDFDMEUwMDEwRDEwMDAwMDAwMEU0Ci06MTBBQ0MwMDAwQTAwMTU2QThGQkYwMDFDMTYyMEZGREEwMDAwMDAwMDgyCi06MTBBQ0QwMDAwRTAwMTBEMTAwMDAwMDAwMTQ0MEZGRDg4RkJGMDAxQ0YwCi06MTBBQ0UwMDAxNjAwMDAyMjAwMDAwMDAwOTI1RjAwN0QzM0UyMDAzRjZBCi06MTBBQ0YwMDBBMjQyMDA3RDBBMDAxNTZBOEZCRjAwMUM5NTA5MDBFQTc4Ci06MTBBRDAwMDA4Rjg2MDA4MDAwODAyODIxMjQwNDAwMDUwRTAwMDcyNTdFCi06MTBBRDEwMDAzMTMwRkZGRjk3ODMwMDkyM0MwNDgwMDAyNDY1RkZGRkUxCi06MTBBRDIwMDBBNzg1MDA5MjhDOEEwMUI4MDU0MEZGRkUwMDAwMDAwMDU0Ci06MTBBRDMwMDBBQzgwMDE4MDhGQkYwMDFDQUM5MDAxODQ4RkIyMDAxOEUyCi06MTBBRDQwMDA4RkIxMDAxNDhGQjAwMDEwM0MwNzYwMTMzQzBCMTAwMDUzCi06MTBBRDUwMDAyNDBEMEMwMDNDMEM4MDAwMjdCRDAwMjBBQzg3MDE4ODJFCi06MTBBRDYwMDBBQzhCMDFCODAzRTAwMDA4QUQ4RDAwMjQwRTAwMTFGQjkwCi06MTBBRDcwMDAwMjAwMjAyMTUwNDBGRkIxOEZCRjAwMUM5MjVGMDA3RDc4Ci06MTBBRDgwMDAwQTAwMTU5NzMzRTIwMDNGMEUwMDExRkIwMjAwMjAyMTVDCi06MTBBRDkwMDAxNDQwRkZBQThGQkYwMDFDMTIyMDAwMDcwMDAwMDAwMDEzCi06MTBBREEwMDA5MjU5MDA3RDMzMzAwMDNGMzYwMjAwNDBBMjQyMDA3REMwCi06MTBBREIwMDAwQTAwMTU2QThGQkYwMDFDMEUwMDEwRDEwMDAwMDAwMEIxCi06MTBBREMwMDA1MDQwRkY5RThGQkYwMDFDOTI1OTAwN0QzMzMwMDAzRkUyCi06MDhBREQwMDAwQTAwMTVDNjM2MDIwMDQwMUUKLTowOEFERDgwMDAwMDAwMDAwMDAwMDAwMUI1OAotOjEwQURFMDAwMDAwMDAwMEYwMDAwMDAwQTAwMDAwMDA4MDAwMDAwMDYzQwotOjEwQURGMDAwMDAwMDAwMDUwMDAwMDAwNTAwMDAwMDA0MDAwMDAwMDQ0MQotOjEwQUUwMDAwMDAwMDAwMDMwMDAwMDAwMzAwMDAwMDAzMDAwMDAwMDMzNgotOjEwQUUxMDAwMDAwMDAwMDMwMDAwMDAwMjAwMDAwMDAyMDAwMDAwMDIyOQotOjEwQUUyMDAwMDAwMDAwMDIwMDAwMDAwMjAwMDAwMDAyMDAwMDAwMDIxQQotOjEwQUUzMDAwMDAwMDAwMDIwMDAwMDAwMjAwMDAwMDAyMDAwMDAwMDIwQQotOjEwQUU0MDAwMDAwMDAwMDIwMDAwMDAwMjAwMDAwMDAyMDAwMDAwMDJGQQotOjBDQUU1MDAwMDAwMDAwMDEwMDAwMDAwMTAwMDAwMDAxRjMKLTowNEFFNUMwMDgwMDgwMTAwNjkKLToxMEFFNjAwMDgwMDgwMDgwODAwODAwMDAwMDAwMEMwMDAwMDAzMDgwOTYKLToxMEFFNzAwMDA4MDAxMUQwMDgwMDEyN0MwODAwMTI5NDA4MDAxMkE4RTMKLToxMEFFODAwMDA4MDAxMkJDMDgwMDExRDAwODAwMTFEMDA4MDAxMkYwMTAKLToxMEFFOTAwMDA4MDAxMzJDMDgwMDEzNDAwODAwMTM4ODA4MDAxQThDQkYKLToxMEFFQTAwMDA4MDAxQThDMDgwMDFBQzQwODAwMUFDNDA4MDAxQUQ4MkUKLToxMEFFQjAwMDA4MDAxQUE4MDgwMDFEMDAwODAwMUNDQzA4MDAxRDU4MzYKLToxMEFFQzAwMDA4MDAxRDU4MDgwMDFERTAwODAwMUQxMDgwMDgwMjQwMDEKLToxMEFFRDAwMDA4MDAyNzM0MDgwMDI1NkMwODAwMjc1QzA4MDAyN0Y0QzgKLToxMEFFRTAwMDA4MDAyOTNDMDgwMDI5ODgwODAwMkFBQzA4MDAyOUI0NzkKLToxMEFFRjAwMDA4MDAyQTM4MDgwMDI1REMwODAwMkVEQzA4MDAyRUE0RjMKLToxMEFGMDAwMDA4MDAyNTg4MDgwMDI1ODgwODAwMjU4ODA4MDAyQjIwQ0YKLToxMEFGMTAwMDA4MDAyQjIwMDgwMDI1ODgwODAwMjU4ODA4MDAyREQwNkYKLToxMEFGMjAwMDA4MDAyNTg4MDgwMDI1ODgwODAwMjU4ODA4MDAyNTg4NEQKLToxMEFGMzAwMDA4MDAyRTBDMDgwMDI1ODgwODAwMjU4ODA4MDAyNTg4QjAKLToxMEFGNDAwMDA4MDAyNTg4MDgwMDI1ODgwODAwMjU4ODA4MDAyNTg4MkQKLToxMEFGNTAwMDA4MDAyNTg4MDgwMDI1ODgwODAwMjU4ODA4MDAyNTg4MUQKLToxMEFGNjAwMDA4MDAyNTg4MDgwMDI1ODgwODAwMjU4ODA4MDAyOUE4RTkKLToxMEFGNzAwMDA4MDAyNTg4MDgwMDI1ODgwODAwMkU2ODA4MDAyNTg4MTQKLToxMEFGODAwMDA4MDAyNTg4MDgwMDI1ODgwODAwMjU4ODA4MDAyNTg4RUQKLToxMEFGOTAwMDA4MDAyNTg4MDgwMDI1ODgwODAwMjU4ODA4MDAyNTg4REQKLToxMEFGQTAwMDA4MDAyNTg4MDgwMDI1ODgwODAwMjU4ODA4MDAyNTg4Q0QKLToxMEFGQjAwMDA4MDAyNTg4MDgwMDI1ODgwODAwMjU4ODA4MDAyNTg4QkQKLToxMEFGQzAwMDA4MDAyQ0Y0MDgwMDI1ODgwODAwMjU4ODA4MDAyQzY4NTMKLToxMEFGRDAwMDA4MDAyQkM0MDgwMDNDRTQwODAwM0NCODA4MDAzQzg0OEUKLToxMEFGRTAwMDA4MDAzQzU4MDgwMDNDMzgwODAwM0JFQzgwMDgwMTAwOTEKLToxMEFGRjAwMDgwMDgwMDgwODAwODAwMDA4MDA4MDA4MDA4MDA0QzY0MDEKLToxMEIwMDAwMDA4MDA0QzlDMDgwMDRCRTQwODAwNEM2NDA4MDA0QzY0QTkKLTowQ0IwMTAwMDA4MDA0OUI4MDgwMDRDNjQwODAwNTA1MENCCi06MDRCMDFDMDAwQTAwMEM4NDk2Ci06MTBCMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ3Mjc4NzAzNjgzCi06MTBCMDMwMDAyRTMwMkUzMTM3MDAwMDAwMDYwMDExMDMwMDAwMDAwMDAyCi06MTBCMDQwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZGCi06MTBCMDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYwCi06MTBCMDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUwCi06MTBCMDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQwCi06MTBCMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMwCi06MTBCMDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIwCi06MTBCMEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwCi06MTBCMEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkwCi06MTBCMEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwCi06MTBCMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcwCi06MTBCMEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwCi06MTBCMEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUwCi06MTBCMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNGCi06MTBCMTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGCi06MTBCMTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFGCi06MTBCMTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGCi06MTBCMTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZGCi06MTBCMTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVGCi06MTBCMTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERGCi06MTBCMTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENGCi06MTBCMTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJGCi06MTBCMTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFGCi06MTBCMUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlGCi06MTBCMUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGCi06MTBCMUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdGCi06MTBCMUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZGCi06MTBCMUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVGCi06MTBCMUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRGCi06MTBCMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNFCi06MTBCMjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJFCi06MTBCMjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFCi06MTBCMjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFCi06MTBCMjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZFCi06MTBCMjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVFCi06MTBCMjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERFCi06MTBCMjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENFCi06MTBCMjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJFCi06MTBCMjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFFCi06MTBCMkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlFCi06MTBCMkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhFCi06MTBCMkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdFCi06MTBCMkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZFCi06MTBCMkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVFCi06MTBCMkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRFCi06MTBCMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNECi06MTBCMzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJECi06MTBCMzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFECi06MTBCMzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBECi06MTBCMzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZECi06MTBCMzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVECi06MTBCMzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERECi06MTBCMzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENECi06MTBCMzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJECi06MTBCMzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFECi06MTBCM0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlECi06MTBCM0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhECi06MTBCM0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdECi06MTBCM0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZECi06MTBCM0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVECi06MTBCM0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRECi06MTBCNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNDCi06MTBCNDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJDCi06MTBCNDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFDCi06MTBCNDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDCi06MTBCNDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZDCi06MTBCNDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVDCi06MTBCNDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERDCi06MTBCNDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENDCi06MTBCNDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJDCi06MTBCNDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFDCi06MTBCNEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlDCi06MTBCNEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhDCi06MTBCNEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdDCi06MTBCNEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZDCi06MTBCNEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVDCi06MTBCNEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRDCi06MTBCNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNCCi06MTBCNTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJCCi06MTBCNTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFCCi06MTBCNTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCCi06MTBCNTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZCCi06MTBCNTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVCCi06MTBCNTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERCCi06MTBCNTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENCCi06MTBCNTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJCCi06MTBCNTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFCCi06MTBCNUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlCCi06MTBCNUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhCCi06MTBCNUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdCCi06MTBCNUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZCCi06MTBCNUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVCCi06MTBCNUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRCCi06MTBCNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNBCi06MTBCNjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJBCi06MTBCNjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFBCi06MTBCNjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBCi06MTBCNjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZBCi06MTBCNjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVBCi06MTBCNjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERBCi06MTBCNjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENBCi06MTBCNjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJBCi06MTBCNjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFBCi06MTBCNkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlBCi06MTBCNkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhBCi06MTBCNkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdBCi06MTBCNkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZBCi06MTBCNkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVBCi06MTBCNkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRBCi06MTBCNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM5Ci06MTBCNzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5Ci06MTBCNzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE5Ci06MTBCNzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5Ci06MTBCNzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY5Ci06MTBCNzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU5Ci06MTBCNzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ5Ci06MTBCNzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM5Ci06MTBCNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI5Ci06MTBCNzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE5Ci06MTBCN0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk5Ci06MTBCN0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg5Ci06MTBCN0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc5Ci06MTBCN0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY5Ci06MTBCN0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU5Ci06MTBCN0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ5Ci06MTBCODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM4Ci06MTBCODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI4Ci06MTBCODIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE4Ci06MTBCODMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4Ci06MTBCODQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY4Ci06MTBCODUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU4Ci06MTBCODYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ4Ci06MTBCODcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM4Ci06MTBCODgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI4Ci06MTBCODkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE4Ci06MTBCOEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk4Ci06MTBCOEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg4Ci06MTBCOEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc4Ci06MTBCOEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY4Ci06MTBCOEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU4Ci06MTBCOEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ4Ci06MTBCOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM3Ci06MTBCOTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI3Ci06MTBCOTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE3Ci06MTBCOTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3Ci06MTBCOTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY3Ci06MTBCOTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU3Ci06MTBCOTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ3Ci06MTBCOTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM3Ci06MTBCOTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI3Ci06MTBCOTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE3Ci06MTBCOUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk3Ci06MTBCOUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg3Ci06MTBCOUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3Ci06MTBCOUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY3Ci06MTBCOUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU3Ci06MTBCOUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ3Ci06MTBCQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM2Ci06MTBCQTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI2Ci06MTBCQTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE2Ci06MTBCQTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2Ci06MTBCQTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY2Ci06MTBCQTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU2Ci06MTBCQTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ2Ci06MTBCQTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM2Ci06MTBCQTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI2Ci06MTBCQTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE2Ci06MTBCQUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk2Ci06MTBCQUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg2Ci06MTBCQUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc2Ci06MTBCQUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY2Ci06MTBCQUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU2Ci06MTBCQUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ2Ci06MTBCQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM1Ci06MTBCQjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI1Ci06MTBCQjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE1Ci06MTBCQjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1Ci06MTBCQjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY1Ci06MTBCQjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU1Ci06MTBCQjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ1Ci06MTBCQjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM1Ci06MTBCQjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI1Ci06MTBCQjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE1Ci06MTBCQkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk1Ci06MTBCQkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg1Ci06MTBCQkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc1Ci06MTBCQkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY1Ci06MTBCQkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU1Ci06MTBCQkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ1Ci06MTBCQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM0Ci06MTBCQzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI0Ci06MTBCQzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE0Ci06MTBCQzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0Ci06MTBCQzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY0Ci06MTBCQzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU0Ci06MTBCQzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ0Ci06MTBCQzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM0Ci06MTBCQzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI0Ci06MTBCQzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE0Ci06MTBCQ0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk0Ci06MTBCQ0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg0Ci06MTBCQ0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc0Ci06MTBCQ0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY0Ci06MTBCQ0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU0Ci06MTBCQ0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ0Ci06MTBCRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMzCi06MTBCRDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIzCi06MTBCRDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEzCi06MTBCRDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzCi06MTBCRDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYzCi06MTBCRDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUzCi06MTBCRDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQzCi06MTBCRDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMzCi06MTBCRDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIzCi06MTBCRDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEzCi06MTBCREEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkzCi06MTBCREIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgzCi06MTBCREMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDczCi06MTBCREQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYzCi06MTBCREUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUzCi06MTBCREYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQzCi06MTBCRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMyCi06MTBCRTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIyCi06MTBCRTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyCi06MTBCRTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyCi06MTBCRTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYyCi06MTBCRTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUyCi06MTBCRTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQyCi06MTBCRTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMyCi06MTBCRTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIyCi06MTBCRTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEyCi06MTBCRUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkyCi06MTBCRUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgyCi06MTBCRUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcyCi06MTBCRUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYyCi06MTBCRUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUyCi06MTBCRUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQyCi06MTBCRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMxCi06MTBCRjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIxCi06MTBCRjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExCi06MTBCRjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCi06MTBCRjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYxCi06MTBCRjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUxCi06MTBCRjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQxCi06MTBCRjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMxCi06MTBCRjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIxCi06MTBCRjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEExCi06MTBCRkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkxCi06MTBCRkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgxCi06MTBCRkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcxCi06MTBCRkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYxCi06MTBCRkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUxCi06MTBCRkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQxCi06MTBDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwCi06MTBDMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwCi06MTBDMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwCi06MTBDMDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi06MTBDMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYwCi06MTBDMDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUwCi06MTBDMDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQwCi06MTBDMDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMwCi06MTBDMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIwCi06MTBDMDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwCi06MTBDMEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkwCi06MTBDMEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwCi06MTBDMEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcwCi06MTBDMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwCi06MTBDMEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUwCi06MTBDMEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwCi06MTBDMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGCi06MTBDMTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFGCi06MTBDMTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGCi06MTBDMTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZGCi06MTBDMTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVGCi06MTBDMTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERGCi06MTBDMTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENGCi06MTBDMTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJGCi06MTBDMTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFGCi06MTBDMTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlGCi06MTBDMUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGCi06MTBDMUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdGCi06MTBDMUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZGCi06MTBDMUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVGCi06MTBDMUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRGCi06MTBDMUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNGCi06MTBDMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJFCi06MTBDMjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFCi06MTBDMjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFCi06MTBDMjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZFCi06MTBDMjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVFCi06MTBDMjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERFCi06MTBDMjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENFCi06MTBDMjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJFCi06MTBDMjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFFCi06MTBDMjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlFCi06MTBDMkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhFCi06MTBDMkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdFCi06MTBDMkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZFCi06MTBDMkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVFCi06MTBDMkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRFCi06MTBDMkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNFCi06MTBDMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJECi06MTBDMzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFECi06MTBDMzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBECi06MTBDMzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZECi06MTBDMzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVECi06MTBDMzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERECi06MTBDMzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENECi06MTBDMzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJECi06MTBDMzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFECi06MTBDMzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlECi06MTBDM0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhECi06MTBDM0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdECi06MTBDM0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZECi06MTBDM0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVECi06MTBDM0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRECi06MTBDM0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNECi06MTBDNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJDCi06MTBDNDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFDCi06MTBDNDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDCi06MTBDNDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZDCi06MTBDNDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVDCi06MTBDNDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERDCi06MTBDNDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENDCi06MTBDNDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJDCi06MTBDNDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFDCi06MTBDNDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlDCi06MTBDNEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhDCi06MTBDNEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdDCi06MTBDNEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZDCi06MTBDNEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVDCi06MTBDNEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRDCi06MTBDNEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNDCi06MTBDNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJCCi06MTBDNTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFCCi06MTBDNTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCCi06MTBDNTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZCCi06MTBDNTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVCCi06MTBDNTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERCCi06MTBDNTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENCCi06MTBDNTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJCCi06MTBDNTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFCCi06MTBDNTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlCCi06MTBDNUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhCCi06MTBDNUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdCCi06MTBDNUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZCCi06MTBDNUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVCCi06MTBDNUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRCCi06MTBDNUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNCCi06MTBDNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJBCi06MTBDNjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFBCi06MTBDNjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBCi06MTBDNjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZBCi06MTBDNjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVBCi06MTBDNjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERBCi06MTBDNjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENBCi06MTBDNjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJBCi06MTBDNjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFBCi06MTBDNjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlBCi06MTBDNkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhBCi06MTBDNkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdBCi06MTBDNkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZBCi06MTBDNkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVBCi06MTBDNkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRBCi06MTBDNkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNBCi06MTBDNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5Ci06MTBDNzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE5Ci06MTBDNzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5Ci06MTBDNzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY5Ci06MTBDNzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU5Ci06MTBDNzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ5Ci06MTBDNzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM5Ci06MTBDNzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI5Ci06MTBDNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE5Ci06MTBDNzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk5Ci06MTBDN0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg5Ci06MTBDN0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc5Ci06MTBDN0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY5Ci06MTBDN0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU5Ci06MTBDN0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ5Ci06MTBDN0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM5Ci06MTBDODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI4Ci06MTBDODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE4Ci06MTBDODIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4Ci06MTBDODMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY4Ci06MTBDODQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU4Ci06MTBDODUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ4Ci06MTBDODYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM4Ci06MTBDODcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI4Ci06MTBDODgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE4Ci06MTBDODkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk4Ci06MTBDOEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg4Ci06MTBDOEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc4Ci06MTBDOEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY4Ci06MTBDOEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU4Ci06MTBDOEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ4Ci06MTBDOEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM4Ci06MTBDOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI3Ci06MTBDOTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE3Ci06MTBDOTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3Ci06MTBDOTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY3Ci06MTBDOTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU3Ci06MTBDOTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ3Ci06MTBDOTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM3Ci06MTBDOTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI3Ci06MTBDOTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE3Ci06MTBDOTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk3Ci06MTBDOUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg3Ci06MTBDOUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3Ci06MTBDOUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY3Ci06MTBDOUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU3Ci06MTBDOUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ3Ci06MTBDOUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM3Ci06MTBDQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI2Ci06MTBDQTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE2Ci06MTBDQTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2Ci06MTBDQTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY2Ci06MTBDQTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU2Ci06MTBDQTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ2Ci06MTBDQTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM2Ci06MTBDQTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI2Ci06MTBDQTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE2Ci06MTBDQTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk2Ci06MTBDQUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg2Ci06MTBDQUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc2Ci06MTBDQUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY2Ci06MTBDQUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU2Ci06MTBDQUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ2Ci06MTBDQUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM2Ci06MTBDQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI1Ci06MTBDQjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE1Ci06MTBDQjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1Ci06MTBDQjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY1Ci06MTBDQjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU1Ci06MTBDQjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ1Ci06MTBDQjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM1Ci06MTBDQjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI1Ci06MTBDQjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE1Ci06MTBDQjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk1Ci06MTBDQkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg1Ci06MTBDQkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc1Ci06MTBDQkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY1Ci06MTBDQkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU1Ci06MTBDQkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ1Ci06MTBDQkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM1Ci06MTBDQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI0Ci06MTBDQzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE0Ci06MTBDQzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0Ci06MTBDQzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY0Ci06MTBDQzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU0Ci06MTBDQzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ0Ci06MTBDQzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM0Ci06MTBDQzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI0Ci06MTBDQzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE0Ci06MTBDQzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk0Ci06MTBDQ0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg0Ci06MTBDQ0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc0Ci06MTBDQ0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY0Ci06MTBDQ0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU0Ci06MTBDQ0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ0Ci06MTBDQ0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM0Ci06MTBDRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIzCi06MTBDRDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEzCi06MTBDRDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzCi06MTBDRDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYzCi06MTBDRDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUzCi06MTBDRDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQzCi06MTBDRDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMzCi06MTBDRDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIzCi06MTBDRDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEzCi06MTBDRDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkzCi06MTBDREEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgzCi06MTBDREIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDczCi06MTBDREMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYzCi06MTBDREQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUzCi06MTBDREUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQzCi06MTBDREYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMzCi06MTBDRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIyCi06MTBDRTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyCi06MTBDRTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyCi06MTBDRTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYyCi06MTBDRTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUyCi06MTBDRTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQyCi06MTBDRTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMyCi06MTBDRTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIyCi06MTBDRTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEyCi06MTBDRTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkyCi06MTBDRUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgyCi06MTBDRUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcyCi06MTBDRUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYyCi06MTBDRUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUyCi06MTBDRUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQyCi06MTBDRUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMyCi06MTBDRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIxCi06MTBDRjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExCi06MTBDRjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCi06MTBDRjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYxCi06MTBDRjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUxCi06MTBDRjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQxCi06MTBDRjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMxCi06MTBDRjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIxCi06MTBDRjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEExCi06MTBDRjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkxCi06MTBDRkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgxCi06MTBDRkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcxCi06MTBDRkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYxCi06MTBDRkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUxCi06MTBDRkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQxCi06MTBDRkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMxCi06MTBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwCi06MTBEMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwCi06MTBEMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi06MTBEMDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYwCi06MTBEMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUwCi06MTBEMDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQwCi06MTBEMDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMwCi06MTBEMDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIwCi06MTBEMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwCi06MTBEMDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkwCi06MTBEMEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwCi06MTBEMEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcwCi06MTBEMEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwCi06MTBEMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUwCi06MTBEMEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwCi06MTBEMEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwCi06MTBEMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFGCi06MTBEMTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGCi06MTBEMTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZGCi06MTBEMTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVGCi06MTBEMTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERGCi06MTBEMTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENGCi06MTBEMTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJGCi06MTBEMTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFGCi06MTBEMTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlGCi06MTBEMTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGCi06MTBEMUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdGCi06MTBEMUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZGCi06MTBEMUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVGCi06MTBEMUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRGCi06MTBEMUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNGCi06MTBEMUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGCi06MTBEMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFCi06MTBEMjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFCi06MTBEMjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZFCi06MTBEMjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVFCi06MTBEMjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERFCi06MTBEMjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENFCi06MTBEMjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJFCi06MTBEMjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFFCi06MTBEMjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlFCi06MTBEMjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhFCi06MTBEMkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdFCi06MTBEMkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZFCi06MTBEMkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVFCi06MTBEMkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRFCi06MTBEMkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNFCi06MTBEMkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJFCi06MTBEMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFECi06MTBEMzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBECi06MTBEMzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZECi06MTBEMzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVECi06MTBEMzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERECi06MTBEMzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENECi06MTBEMzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJECi06MTBEMzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFECi06MTBEMzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlECi06MTBEMzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhECi06MTBEM0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdECi06MTBEM0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZECi06MTBEM0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVECi06MTBEM0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRECi06MTBEM0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNECi06MTBEM0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJECi06MTBENDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFDCi06MTBENDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDCi06MTBENDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZDCi06MTBENDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVDCi06MTBENDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERDCi06MTBENDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENDCi06MTBENDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJDCi06MTBENDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFDCi06MTBENDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlDCi06MTBENDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhDCi06MTBENEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdDCi06MTBENEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZDCi06MTBENEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVDCi06MTBENEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRDCi06MTBENEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNDCi06MTBENEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJDCi06MTBENTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFCCi06MTBENTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCCi06MTBENTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZCCi06MTBENTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVCCi06MTBENTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERCCi06MTBENTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENCCi06MTBENTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJCCi06MTBENTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFCCi06MTBENTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlCCi06MTBENTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhCCi06MTBENUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdCCi06MTBENUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZCCi06MTBENUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVCCi06MTBENUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRCCi06MTBENUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNCCi06MTBENUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJCCi06MTBENjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFBCi06MTBENjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBCi06MTBENjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZBCi06MTBENjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVBCi06MTBENjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERBCi06MTBENjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENBCi06MTBENjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJBCi06MTBENjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFBCi06MTBENjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlBCi06MTBENjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhBCi06MTBENkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdBCi06MTBENkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZBCi06MTBENkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVBCi06MTBENkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRBCi06MTBENkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNBCi06MTBENkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJBCi06MTBENzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE5Ci06MTBENzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5Ci06MTBENzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY5Ci06MTBENzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU5Ci06MTBENzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ5Ci06MTBENzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM5Ci06MTBENzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI5Ci06MTBENzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE5Ci06MTBENzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk5Ci06MTBENzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg5Ci06MTBEN0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc5Ci06MTBEN0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY5Ci06MTBEN0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU5Ci06MTBEN0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ5Ci06MTBEN0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM5Ci06MTBEN0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5Ci06MTBEODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE4Ci06MTBEODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4Ci06MTBEODIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY4Ci06MTBEODMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU4Ci06MTBEODQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ4Ci06MTBEODUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM4Ci06MTBEODYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI4Ci06MTBEODcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE4Ci06MTBEODgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk4Ci06MTBEODkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg4Ci06MTBEOEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc4Ci06MTBEOEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY4Ci06MTBEOEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU4Ci06MTBEOEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ4Ci06MTBEOEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM4Ci06MTBEOEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI4Ci06MTBEOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE3Ci06MTBEOTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3Ci06MTBEOTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY3Ci06MTBEOTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU3Ci06MTBEOTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ3Ci06MTBEOTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM3Ci06MTBEOTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI3Ci06MTBEOTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE3Ci06MTBEOTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk3Ci06MTBEOTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg3Ci06MTBEOUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3Ci06MTBEOUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY3Ci06MTBEOUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU3Ci06MTBEOUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ3Ci06MTBEOUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM3Ci06MTBEOUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI3Ci06MTBEQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE2Ci06MTBEQTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2Ci06MTBEQTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY2Ci06MTBEQTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU2Ci06MTBEQTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ2Ci06MTBEQTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM2Ci06MTBEQTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI2Ci06MTBEQTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE2Ci06MTBEQTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk2Ci06MTBEQTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg2Ci06MTBEQUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc2Ci06MTBEQUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY2Ci06MTBEQUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU2Ci06MTBEQUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ2Ci06MTBEQUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM2Ci06MTBEQUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI2Ci06MTBEQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE1Ci06MTBEQjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1Ci06MTBEQjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY1Ci06MTBEQjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU1Ci06MTBEQjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ1Ci06MTBEQjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM1Ci06MTBEQjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI1Ci06MTBEQjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE1Ci06MTBEQjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk1Ci06MTBEQjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg1Ci06MTBEQkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc1Ci06MTBEQkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY1Ci06MTBEQkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU1Ci06MTBEQkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ1Ci06MTBEQkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM1Ci06MTBEQkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI1Ci06MTBEQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE0Ci06MTBEQzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0Ci06MTBEQzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY0Ci06MTBEQzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU0Ci06MTBEQzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ0Ci06MTBEQzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM0Ci06MTBEQzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI0Ci06MTBEQzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE0Ci06MTBEQzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk0Ci06MTBEQzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg0Ci06MTBEQ0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc0Ci06MTBEQ0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY0Ci06MTBEQ0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU0Ci06MTBEQ0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ0Ci06MTBEQ0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM0Ci06MTBEQ0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI0Ci06MTBERDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEzCi06MTBERDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzCi06MTBERDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYzCi06MTBERDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUzCi06MTBERDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQzCi06MTBERDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMzCi06MTBERDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIzCi06MTBERDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEzCi06MTBERDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkzCi06MTBERDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgzCi06MTBEREEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDczCi06MTBEREIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYzCi06MTBEREMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUzCi06MTBEREQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQzCi06MTBEREUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMzCi06MTBEREYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIzCi06MTBERTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyCi06MTBERTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyCi06MTBERTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYyCi06MTBERTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUyCi06MTBERTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQyCi06MTBERTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMyCi06MTBERTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIyCi06MTBERTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEyCi06MTBERTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkyCi06MTBERTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgyCi06MTBERUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcyCi06MTBERUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYyCi06MTBERUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUyCi06MTBERUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQyCi06MTBERUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMyCi06MTBERUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIyCi06MTBERjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExCi06MTBERjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCi06MTBERjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYxCi06MTBERjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUxCi06MTBERjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQxCi06MTBERjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMxCi06MTBERjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIxCi06MTBERjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEExCi06MTBERjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkxCi06MTBERjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgxCi06MTBERkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcxCi06MTBERkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYxCi06MTBERkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUxCi06MTBERkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQxCi06MTBERkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMxCi06MTBERkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIxCi06MTBFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwCi06MTBFMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi06MTBFMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYwCi06MTBFMDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUwCi06MTBFMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQwCi06MTBFMDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMwCi06MTBFMDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIwCi06MTBFMDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwCi06MTBFMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkwCi06MTBFMDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwCi06MTBFMEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcwCi06MTBFMEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwCi06MTBFMEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUwCi06MTBFMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwCi06MTBFMEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwCi06MTBFMEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwCi06MTBFMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGCi06MTBFMTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZGCi06MTBFMTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVGCi06MTBFMTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERGCi06MTBFMTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENGCi06MTBFMTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJGCi06MTBFMTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFGCi06MTBFMTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlGCi06MTBFMTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGCi06MTBFMTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdGCi06MTBFMUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZGCi06MTBFMUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVGCi06MTBFMUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRGCi06MTBFMUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNGCi06MTBFMUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGCi06MTBFMUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDlGCi06MTBFMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFCi06MTBFMjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZFCi06MTBFMjIwMDAwMDAwMDAwQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU0Ci06MTBFMjMwMDAxMDAwMDAwMzAwMDAwMDAwMDAwMDAwMEQwMDAwMDAwREIxCi06MTBFMjQwMDAzQzAyMDgwMTI0NDI5NDAwM0MwMzA4MDEyNDYzOTYzNEY0Ci06MTBFMjUwMDBBQzQwMDAwMDAwNDMyMDJCMTQ4MEZGRkQyNDQyMDAwNDRBCi06MTBFMjYwMDAzQzFEMDgwMDM3QkQ5RkZDMDNBMEYwMjEzQzEwMDgwMEI2Ci06MTBFMjcwMDAyNjEwMzIxMDNDMUMwODAxMjc5Qzk0MDAwRTAwMTI3NERBCi06MTBFMjgwMDAwMDAwMDAwMDAwMDAwMDBEM0MwMjgwMDAzMEE1RkZGRkYwCi06MTBFMjkwMDAzMEM2MDBGRjM0NDMwMTgwM0MwODgwMDA4RDA5MDFCODdFCi06MTBFMkEwMDAwNTIwRkZGRTAwMDAwMDAwQUM2NDAwMDAyNDA0MDAwMjEyCi06MTBFMkIwMDBBNDY1MDAwOEEwNjYwMDBBQTA2NDAwMEJBQzY3MDAxODAzCi06MTBFMkMwMDAzQzAzMTAwMDAzRTAwMDA4QUQwMzAxQjgzQzA1NjAwMDBBCi06MTBFMkQwMDA4Q0EyNEZGODA0NDBGRkZFMDAwMDAwMDBBQ0E0NEZDMDI5Ci06MTBFMkUwMDAzQzAzMTAwMDNDMDQwMjAwQUNBNDRGQzQwM0UwMDAwODRGCi06MTBFMkYwMDBBQ0EzNEZGODk0ODYwMDBDMDBBMDUwMjEyNDg4MDAxNDkxCi06MTBFMzAwMDAwMDA2MkIwMjAwMDUxMDgwMDA0NDQ4MjEwMTA5MTgyQjRCCi06MTBFMzEwMDAxMDYwMDAxMTAwMDAwMDAwOTEwMzAwMDAyQzY0MDAwOTRGCi06MTBFMzIwMDA1MDgwMDAwOTkxMTkwMDAxMDAwMzYwODAzQzBEMDgwMTM0Ci06MTBFMzMwMDAyNUFEOTA5MDAxOEQ1ODIxOEQ2NzAwMDAwMEUwMDAwODA4Ci06MTBFMzQwMDAwMDAwMDAwMDkxMTkwMDAxMDExOTQwMjEwMTA5MzAyQjQyCi06MTBFMzUwMDA1NEMwRkZGMjkxMDMwMDAwMDNFMDAwMDgwMDAwMTAyMTA4Ci06MTBFMzYwMDAwQTAwMENDQzI1MDgwMDAxOTEwRjAwMDEyNDBFMDAwQUMwCi06MTBFMzcwMDAxNUVFMDA0MDAxMjhDODIzMkYzODAwMEExNzAwMDAzRDgxCi06MTBFMzgwMDAyNTBEMDAwMjhENTgwMDAwMjUwRjAwMDYzNzBFMDEwMEY0Ci06MTBFMzkwMDBBRDRFMDAwMDkxMEMwMDAyOTFBQjAwMDE5MUE0MDAwMjZGCi06MTBFM0EwMDA5MUE2MDAwMzAwMEMyRTAwMDAwQjNDMDAwMEE3MTAyNUQ2Ci06MTBFM0IwMDAwMDA0MUEwMDAwNDNDODI1MDMyNkMwMjVBRDU4MDAwNEY4Ci06MTBFM0MwMDA5MTBFMDAwNjkxRUQwMDAxOTFFNzAwMDI5MUU1MDAwMzM2Ci06MTBFM0QwMDAwMDBFNUUwMDAwMEQ2NDAwMDE2QzMwMjUwMDA3MjIwMDc1Ci06MTBFM0UwMDAwMEM0MTAyNTAwNDUxODI1MjUwODAwMEEwQTAwMENDQzk5Ci06MTBFM0YwMDBBRDQzMDAwODkxMEYwMDAxMjUwNDAwMDIyNDA4MDAwMjJCCi06MTBFNDAwMDA1NUU4MDAwMTAxMjAyMDIxMEEwMDBDQ0MwMDgwNDAyMUE5Ci06MTBFNDEwMDA5MTBDMDAwMTI0MEIwMDAzMTU4QjAwMTYwMDAwMDAwMDc2Ci06MTBFNDIwMDA4RDU4MDAwMDkxMEUwMDAyMjUwODAwMDMzNzBEMDAwOEVBCi06MTBFNDMwMDBBMTRFMDAxMDBBMDAwQ0NDQUQ0RDAwMDA5MTE5MDAwMTU2Ci06MTBFNDQwMDAyNDBGMDAwNDE3MkYwMDBCMDAwMDAwMDA5MTA3MDAwMkFBCi06MTBFNDUwMDA5MTA0MDAwMzhENDMwMDAwMDAwNzJBMDAwMEE0MTAyNTRBCi06MTBFNDYwMDAzNDY2MDAwNDI1MDgwMDA0QUQ0MjAwMEMwQTAwMENDQzAwCi06MTBFNDcwMDBBRDQ2MDAwMDAzRTAwMDA4MjQwMjAwMDEyN0JERkZFOENDCi06MTBFNDgwMDBBRkJGMDAxNEFGQjAwMDEwMEUwMDE1RTUwMDgwODAyMTcyCi06MTBFNDkwMDAzQzA0ODAwODM0ODUwMDgwOTBBNjAwMDUyNDAzRkZGRTFDCi06MTBFNEEwMDAwMjAwMjAyMTAwQzMxMDI0OEZCRjAwMTQ4RkIwMDAxMDgxCi06MTBFNEIwMDBBMEEyMDAwNTBBMDAxNUVGMjdCRDAwMTgyN0JERkZFODQwCi06MTBFNEMwMDBBRkIwMDAxMEFGQkYwMDE0MEUwMDBGRDQwMDgwODAyMTQ5Ci06MTBFNEQwMDAzQzA2ODAwODM0QzUwMDgwOTBBNDAwMDAyNDAyMDA1MDRGCi06MTBFNEUwMDAzMDgzMDBGRjEwNjIwMDA3M0MwOTgwMDAwMjAwMjAyMUY5Ci06MTBFNEYwMDA4RkJGMDAxNDhGQjAwMDEwQUQyMDAxODAwQTAwMTBBNjVECi06MTBFNTAwMDAyN0JEMDAxODI0MDgwMTAwM0MwNzgwMDAwMjAwMjAyMURDCi06MTBFNTEwMDA4RkJGMDAxNDhGQjAwMDEwQUNFODAxODAwQTAwMTBBNjc1Ci06MTBFNTIwMDAyN0JEMDAxODI3QkRGRjc4M0MwNTgwMDhBRkJFMDA4MERFCi06MTBFNTMwMDBBRkI3MDA3Q0FGQjMwMDZDQUZCMTAwNjRBRkJGMDA4NDc1Ci06MTBFNTQwMDBBRkI2MDA3OEFGQjUwMDc0QUZCNDAwNzBBRkIyMDA2ODdBCi06MTBFNTUwMDBBRkIwMDA2MDM0QTYwMDgwM0MwNTgwMDA4Q0IyMDEyODdBCi06MTBFNTYwMDA5MEM0MDAwOThDQTcwMTA0M0MwMjAwMDEzMDkxMDBGRjE3Ci06MTBFNTcwMDAwMEUyMTgyNDAwMDBCODIxMDAwMEYwMjExMDYwMDAwNzFDCi06MTBFNTgwMDAwMDAwOTgyMTNDMDkwODAwOEQyOTMxRjAyNDEzMDAwMTc2Ci06MTBFNTkwMDAyNTI4MDAwMTNDMDEwODAwQUMyODMxRjBBQ0EwMDA4NDIzCi06MTBFNUEwMDA5MENDMDAwNTAwMEM1ODI3MzE2QTAwMDExNTQwMDA3MjFDCi06MTBFNUIwMDBBRkEwMDA1MDkwQ0QwMDAwMjQwNjAwMjAzMUE0MDBGRjQxCi06MTBFNUMwMDAxMDg2MDAxODI0MEUwMDUwMTA4RTAwOTMwMDAwMDAwMEVBCi06MTBFNUQwMDAzQzEwMDgwMDhFMTAwMERDMjYwRjAwMDEzQzAxMDgwMEYyCi06MTBFNUUwMDBBQzJGMDBEQzBFMDAxNjVFMDAwMDAwMDAwMDQwMTgyMTc5Ci06MTBFNUYwMDA4RkJGMDA4NDhGQkUwMDgwOEZCNzAwN0M4RkI2MDA3OEZECi06MTBFNjAwMDA4RkI1MDA3NDhGQjQwMDcwOEZCMzAwNkM4RkIyMDA2ODQ4Ci06MTBFNjEwMDA4RkIxMDA2NDhGQjAwMDYwMDA2MDEwMjEwM0UwMDAwODNCCi06MTBFNjIwMDAyN0JEMDA4ODAwMDAwMDBEM0MxRjgwMDBBRkEwMDAzMDE3Ci06MTBFNjMwMDA5N0U1MDExNjhGRTIwMTA0M0MwNDAwMjAzMEI5RkZGRjhBCi06MTBFNjQwMDAwMDQ0MzgyNDAwMDcxODJCMDAwMzMxNDBBRkE2MDAzMEU3Ci06MTBFNjUwMDA4RkY1MDEwNDM3RjgwQzAwM0MxNjAwNDAwMzM4ODAyMTg4Ci06MTBFNjYwMDAwMkI2QTAyNDM0QzQwMDQwMTI4MDAwNDc5MjE1MDAwRDY5Ci06MTBFNjcwMDAzMkE4MDAyMDE1MDAwMDAyMzQ4NjAwODAwMDgwMzAyMTdFCi06MTBFNjgwMDAxNEMwMDA5RkFGQTYwMDMwM0MwRDgwMDgzNUE2MDA4MDY2Ci06MTBFNjkwMDA5MENDMDAwODMxOEIwMDQwNTE2MDAwMDYzQzA2ODAwODk5Ci06MTBFNkEwMDAyNDBFMDAwNDEyMkUwMEE4MjQwRjAwMTIxMjJGMDAzMjk0Ci06MTBFNkIwMDAzQzA2ODAwODM0QzQwMTAwM0MwMjgwMDA5NDQ3MDExQUUzCi06MTBFNkMwMDA5NjE5MDAwRTkwOUYwMDA4OEUxODAwMDgzMEUzRkZGRjk3Ci06MTBFNkQwMDAwM0Y5QjAwNDMyQjQwMDA0QUZCNjAwNUNBRkEzMDA1ODM1Ci06MTBFNkUwMDA4RTE2MDAwNDEyODAwMDJFQUZCODAwNTQzNEMzMDA4MDkwCi06MTBFNkYwMDA5MDY4MDAwODMxMDUwMDQwMTRBMDAwMjUwMDAwMDAwMENCCi06MTBFNzAwMDA4QzcwMDA1MDAyRDA5MDIzMDY0MDAwMDUwMDAwMDAwMEVECi06MTBFNzEwMDA4QzcxMDAzNDAyRDFBODIzMDZBMjAxNjc4RUUyMDAwOEEyCi06MTBFNzIwMDAxMjYwMDAwNjNDMTI4MDAwM0MxNTA4MDA4RUI1MzFGNEUyCi06MTBFNzMwMDAyNkI2MDAwMTNDMDEwODAwQUMzNjMxRjRBRTQwMDA0NDdFCi06MTBFNzQwMDAyNDAzMDAwMThGQkYwMDg0OEZCRTAwODA4RkI3MDA3QzQwCi06MTBFNzUwMDA4RkI2MDA3ODhGQjUwMDc0OEZCNDAwNzA4RkIzMDA2Q0UzCi06MTBFNzYwMDA4RkIyMDA2ODhGQjEwMDY0OEZCMDAwNjAwMDYwMTAyMTJDCi06MTBFNzcwMDAwM0UwMDAwODI3QkQwMDg4MEUwMDBEMjgwMDAwMjAyMUJFCi06MTBFNzgwMDAwQTAwMEQ3NTAwNDAxODIxMEEwMDBEOTUwMEMwMjAyMUQ3Ci06MTBFNzkwMDAwRTAwMTZBRTAyQzAyMDIxMTQ0MEZGRTEwMDAwMDAwMDcwCi06MTBFN0EwMDAzQzBCODAwODM1NjQwMDgwOEM4QTAwMzQwMkNBNDgyMzAwCi06MTBFN0IwMDAwNTIwMDAxRDAwMDAwMDAwM0MxRTA4MDA4RkRFMzEwMDE3Ci06MTBFN0MwMDAyN0Q3MDAwMTNDMDEwODAwQUMzNzMxMDAxMjYwMDAwNjc5Ci06MTBFN0QwMDAwMjQwMjAyMTNDMTQwODAwOEU5NDMxRjQyNjkwMDAwMTYwCi06MTBFN0UwMDAzQzAxMDgwMEFDMzAzMUY0MEUwMDE1RTUzQzFFODAwOEY5Ci06MTBFN0YwMDAzN0NEMDA4MDkxQjcwMDI1MDI0MDIwMjEzNkVFMDAwNDdECi06MTBFODAwMDAwRTAwMTVFRkExQUUwMDI1MEUwMDBDQUMwMjQwMjAyMTM5Ci06MTBFODEwMDAwQTAwMERDQTI0MDMwMDAxM0MxNzA4MDEyNkY3OTRGOEVBCi06MTBFODIwMDAwQTAwMEQ4NDNDMUY4MDAwOEM4NjAwMzAwMkM2NjAyM0U1Ci06MTBFODMwMDAxOTgwMDAwQzI0MTkwMDBDOTA4RjAwNEYzQzE0MDgwMDI0Ci06MTBFODQwMDA4RTk0MzEwMDMyQjUwMEZDMzVFRDAwMDEyNjhFMDAwMUJBCi06MTBFODUwMDAzQzAxMDgwMEFDMkUzMTAwQTA4RDAwNEZBRkEwMDA1ODQ1Ci06MTBFODYwMDAyNDE5MDAwQ0FGQjkwMDMwOEM5ODAwMzAwMzE2QTAyMzk3Ci06MTBFODcwMDAxQTgwMDEwQjhGQTMwMDU4MDA3NEY4MkExN0UwRkZEMzA5Ci06MTBFODgwMDAwMDAwMDAwMDEwNzQwMDJBOEZBNTAwNTgwMkQ0QjAyMUE3Ci06MTBFODkwMDAwMEI0MTAyMzMwNDRGRkZGQUZBNDAwNTgzMkE4MDAwMjk4Ci06MTBFOEEwMDAxMTAwMDAyRTMyQUIwMDEwM0MxNTgwMDgzNkIwMDA4MEZECi06MTBFOEIwMDA5MjE2MDAwODMyRDMwMDQwNTI2MDAwRkI4RUUyMDAwODNFCi06MTBFOEMwMDAwRTAwMTVFNTAyNDAyMDIxMjQwQTAwMThBMjBBMDAwOUMyCi06MTBFOEQwMDA5MjExMDAwNTI0MDlGRkZFMDI0MDIwMjEwMjI5OTAyNDA0Ci06MTBFOEUwMDAwRTAwMTVFRkEyMTIwMDA1MjQwNDAwMzkwMDAwMjgyMUIzCi06MTBFOEYwMDAwRTAwMTY4OTI0MDYwMDE4MEEwMDBEQ0EyNDAzMDAwMTIwCi06MTBFOTAwMDA5MkZFMDAwQzNDMEE4MDA4MzU0OTAwODAwMDFFQkIwMEM2Ci06MTBFOTEwMDA4RDI3MDAzODM2RjEwMDgxMDI0MDIwMjEzMjI1RjA4MTE4Ci06MTBFOTIwMDAwRTAwMEM5QjMwQzYwMEZGMEEwMDBEQzEwMDAwMDAwMDY1Ci06MTBFOTMwMDAzQUE3MDAwMTMwRTMwMDAxMTQ2MEZGQTQwMkQ0QjAyMTIzCi06MTBFOTQwMDAwQTAwMEUxRDAwMDAwMDAwMDI0MDIwMjEwRTAwMTZDQjIwCi06MTBFOTUwMDAwMjAwMjgyMTBBMDAwRDc1MDA0MDE4MjExMTYwRkY3MDg3Ci06MTBFOTYwMDAzQzBGODAwODNDMEQ4MDA4MzVFRTAwODA4REM0MDAzOEQ3Ci06MTBFOTcwMDA4RkEzMDA1NDhEQTYwMDA0MDA2NjYwMjMxRDgwRkY2OEVECi06MTBFOTgwMDAwMDAwMDAwMDAwNjRDMDIzMDcwMjAwMDFBRkE0MDA1NDhGCi06MTBFOTkwMDAzQzFGMDgwMDhGRkYzMUU0MzNGOTAwMDExMzIwMDAxNUZDCi06MTBFOUEwMDA4RkFDMDA1ODNDMDc4MDAwOTRFMzAxMUExMDYwMDAxMkZECi06MTBFOUIwMDAzQzA2ODAwODBFMDAyMEY4MDI0MDIwMjEzQzAzMDgwMTlDCi06MTBFOUMwMDA5MDYzOTUyOTMwNjQwMDAyMTQ4MDAxNDUwMDAwMDAwMDI2Ci06MTBFOUQwMDAzMDZDMDAwNDExODAwMDA3OEZBQzAwNTgzMDY2MDBGQkRCCi06MTBFOUUwMDAzQzAxMDgwMUEwMjY5NTI5MzJCNTAwRkNBRkEwMDA1OEQzCi06MTBFOUYwMDA4RkFDMDA1ODNDMDY4MDA4MzREMzAwODBBRkI0MDAxOEI4Ci06MTBFQTAwMDBBRkI2MDAxMEFGQUMwMDE0M0MwODgwMDA5NTBCMDEyMDlECi06MTBFQTEwMDA4RTZGMDAzMDk2NkEwMDVDOEZBMzAwNUM4RkJGMDAzMDYxCi06MTBFQTIwMDAzMTY5RkZGRjMxNDRGRkZGOEZBRTAwNTQwMTM0MTAyMUU0Ci06MTBFQTMwMDAzNTA1NDAwMDAwNjQzODJCMDA0NUM4MjEwM0U3QzAyNTk4Ci06MTBFQTQwMDBBRkI5MDAyMEFGQUYwMDI4QUZCODAwMzBBRkFGMDAyNDlGCi06MTBFQTUwMDBBRkEwMDAyQ0FGQUUwMDM0OTI2RDAwMDgzMUI0MDAwOEI2Ci06MTBFQTYwMDAxNjgwMDBCQjAyMDAyMDIxOEVFMjAwMDQwMDQwRjgwOTVECi06MTBFQTcwMDAyN0E0MDAxMDhGQUYwMDMwMzFGMzAwMDI1NjYwMDAwMTcwCi06MTBFQTgwMDAzMkI1MDBGRTNDMDQ4MDA4MzQ5RjAwODA5M0Y5MDAwOEYyCi06MTBFQTkwMDAzMzM4MDA0MDUzMDAwMDEzOEZBNDAwMjQ4Qzg1MDAwNEY5Ci06MTBFQUEwMDA4RkE3MDA1NDEwQTcwMEQ1MjQwNDAwMTQzMkIwMDAwMTMxCi06MTBFQUIwMDAxMjAwMDAwQzhGQTQwMDI0MjQxNDAwMEMxMjM0MDExQTNDCi06MTBFQUMwMDAyQTJEMDAwRDExQTAwMTAyMjQxMzAwMEUyNDBFMDAwQUFECi06MTBFQUQwMDA1MjJFMDAwMTI0MUUwMDA4OEZBRjAwMjQyNUU0MDAwMUZGCi06MTBFQUUwMDBBRkE0MDAyNDhGQUEwMDE0M0MwQjgwMDgzNTY1MDA4MDc5Ci06MTBFQUYwMDAwMDhBNDgyMThDQjEwMDMwQUNBOTAwMzA5MEE0MDA0RUFGCi06MTBFQjAwMDA4Q0E3MDAzMDM0MDhGRkZDMDA4ODE4MDQwMEUzRjgyMUNCCi06MTBFQjEwMDBBQ0JGMDAzNDhGQTYwMDMwOEZCOTAwNTQ4RkI4MDA1Q0IyCi06MTBFQjIwMDAzMEMyMDAwODEwNDAwMDBCMDMzODk4MjE4Q0FDMDAyMDQ0Ci06MTBFQjMwMDAxMTkzMDBEMzMwQzYwMEZGOTJFRTAwMEM4RkE3MDAzNDczCi06MTBFQjQwMDAwMjQwMjAyMTAwMEU2QjAwMzVCNDAwODAwRTAwMEM5QkFCCi06MTBFQjUwMDAzMjg1RjA4MDNDMDI4MDA4MzQ1MDAwODA4RTBGMDAzMEY3Ci06MTBFQjYwMDAwMUYxMzAyMzE4QzAwMDk3MjY0ODAwODAzQzA3MDgwMEI4Ci06MTBFQjcwMDA4Q0U3MzFFNDI0MDRGRjgwMDEwNDE4MjQzMTE4MDA3RjVECi06MTBFQjgwMDAzQzFGODAwMDNDMTk4MDA0MzBGMTAwMDFBRkUzMDA5MDhECi06MTBFQjkwMDAxMjIwMDAwNjAzMTkyODIxM0MwMzA4MDE5MDYzOTUyOURGCi06MTBFQkEwMDAzMDY5MDAwODE1MjAwMEM2MzA2QTAwRjczQzEwODAwODY0Ci06MTBFQkIwMDAzNjA0MDA4MDkwOEMwMDRGMzE4QjAwMDExNTYwMDA0MkJDCi06MTBFQkMwMDAwMDAwMDAwMDNDMDYwODAwOENDNjMxOTgzMENFMDAxMEQyCi06MTBFQkQwMDA1MUMwMDA0MjMwRjkwMDAxOTBBRjAwNkI1NUUwMDAzRjlBCi06MTBFQkUwMDAzMEY5MDAwMTI0MTgwMDAxQTBCODAwNkIzQzExODAwMDJFCi06MTBFQkYwMDA5NjIyMDA3QTI0NDcwMDY0QTQ4NzAwMTIzQzBEODAwODA2Ci06MTBFQzAwMDAzNUE1MDA4MDkwQjQwMDA4MzI5MDAwNDAxNjAwMDAwNDQyCi06MTBFQzEwMDAzQzAzODAwODMyQUUwMDAxMTVDMDAwOEIwMDAwMDAwMEVDCi06MTBFQzIwMDAzNDY0MDA4MDhDODYwMDIwMTBEMzAwMEEzNDYzMDEwMDE1Ci06MTBFQzMwMDA4QzY3MDAwMDAyQzc3ODIzMTlFMDAwOTc4RkJGMDA1NDRCCi06MTBFQzQwMDBBQzkzMDAyMDI0MTMwMDAxQUM3NjAwMDBBRkIzMDA1MDU5Ci06MTBFQzUwMDBBQzdGMDAwNDE3QzAwMDRFMDAwMDAwMDA4RkE5MDA1MEQ4Ci06MTBFQzYwMDAxNTIwMDAwQjAwMDAwMDAwM0MwMzA4MDE5MDYzOTUyOTZCCi06MTBFQzcwMDAzMDZBMDAwMTExNDAwMDJFOEZBQjAwNTgzMDY0MDBGRTU2Ci06MTBFQzgwMDAzQzAxMDgwMUEwMjQ5NTI5MEEwMDBENzUwMDAwMTgyMUY3Ci06MTBFQzkwMDAwRTAwMENBQzAyNDAyMDIxMEEwMDBGMTMwMDAwMDAwMEZGCi06MTBFQ0EwMDAwQTAwMEUyMDAwMDBBMDIxMDA0MEY4MDkyNDA0MDAxN0VCCi06MTBFQ0IwMDAwQTAwMERDQTI0MDMwMDAxMDA0MEY4MDkyNDA0MDAxNkNDCi06MTBFQ0MwMDAwQTAwMERDQTI0MDMwMDAxOTA5NDAwNEYyNDBERkZGRTlBCi06MTBFQ0QwMDAwMjhEMjgyNEEwODUwMDRGMzBGOTAwMDExMzIwMDAwNjgyCi06MTBFQ0UwMDAzQzA0ODAwODNDMDMwODAxOTA2Mzk1MjkzMDdGMDAxMEE0Ci06MTBFQ0YwMDAxN0UwMDA1MTMwNjgwMEVGMzQ5MDAwODAyNDBBMDAwMUQyCi06MTBFRDAwMDAwMjQwMjAyMTBFMDAxNUU1QTYwQTAwMTI5MjAzMDAyNUZDCi06MTBFRDEwMDAyNDA5MDAwMUFGQTkwMDUwMzQ2MjAwMDEwMjQwMjAyMTAzCi06MTBFRDIwMDAwRTAwMTVFRkEyMDIwMDI1MEEwMDBFRjkzQzBEODAwODI2Ci06MTBFRDMwMDAxMTYwRkU4MzAwMDAxODIxOEZBNTAwMzAzMEFDMDAwNDY0Ci06MTBFRDQwMDAxMTgwRkUyQzhGQkYwMDg0MEEwMDBEQ0IyNDAzMDAwMTJDCi06MTBFRDUwMDAyN0E1MDAzODBFMDAwQ0I2QUZBMDAwMzg1NDQwRkY0MzgyCi06MTBFRDYwMDA4RUUyMDAwNDhGQjQwMDM4MzI5MDAxMDA1MjAwRkYzRjYxCi06MTBFRDcwMDA4RUUyMDAwNDhGQTMwMDNDOEU2RTAwNTgwMDZFNjgyMzY0Ci06MTBFRDgwMDAwNUEzRkYzOUFFNjMwMDU4MEEwMDBFOTQ4RUUyMDAwNDFBCi06MTBFRDkwMDAwRTAwMTVFNTAyNDAyMDIxM0MwMzgwMDgzNDY4MDA4MDA1Ci06MTBFREEwMDAwMjQwMjAyMTBFMDAxNUVGQTExRTAwMDkwM0MwMzAyMUYyCi06MTBFREIwMDAyNDA0MDAzNzBFMDAxNjg5MDAwMDI4MjEwQTAwMEYxMUQ0Ci06MTBFREMwMDA4RkE5MDA1MDhGQUIwMDE4NTk2MEZGOEQzQzBEODAwODUzCi06MTBFREQwMDAwRTAwMTVFNTAyNDAyMDIxOTIwQzAwMjUyNDA1MDAwMUJCCi06MTBFREUwMDBBRkE1MDA1MDM1ODIwMDA0MDI0MDIwMjEwRTAwMTVFRjJGCi06MTBFREYwMDBBMjAyMDAyNTBBMDAwRUY5M0MwRDgwMDgxMjI0MDA1OUQ5Ci06MTBFRTAwMDAyQTIzMDAxNTEwNjAwMDREMjQwOTAwMTYyNDA4MDAwQzY4Ci06MTBFRTEwMDA1NjI4RkYyNzMyQjAwMDAxM0MwQTgwMDg5MTRDMDAxQkE1Ci06MTBFRTIwMDAyNDA2RkZCRDI0MUUwMDBFMDE4NjU4MjRBMTRCMDAxQkEyCi06MTBFRTMwMDAwQTAwMEVBNTMyQjAwMDAxM0MwMTA4MDFBMDI4OTUyOTY2Ci06MTBFRTQwMDAwQTAwMEVGOTNDMEQ4MDA4OENCNTAwMzA4RUZFMDAwOERCCi06MTBFRTUwMDAyNDA0MDAxODI2QjYwMDAxMDNDMEY4MDlBQ0I2MDAzMDNGCi06MTBFRTYwMDAzQzAzMDgwMTkwNjM5NTI5MzA3NzAwMDExNkUwRkY4MThCCi06MTBFRTcwMDAzMDZBMDAwMThGQjIwMDMwMEEwMDBENzUzMjQzMDAwNDgxCi06MTBFRTgwMDAzQzEwODAwMDk2MDUwMTFBNTBBMEZGMkIzNEM2MDAxMERDCi06MTBFRTkwMDAwQTAwMEVDODkyRUUwMDBDOEM2MjAwMDAxNDU2RkY2RDQyCi06MTBFRUEwMDAwMDAwMDAwMDhDNzgwMDA0OEZCOTAwNTQwMzM4ODgyM0Q4Ci06MTBFRUIwMDAwNjIxRkY2MzhGQkYwMDU0MEEwMDBGMEUwMDAwMDAwMDAwCi06MTBFRUMwMDAzQzAxMDgwMUEwMkE5NTI5MEEwMDBGMzAzMEY5MDAwMTAxCi06MTBFRUQwMDAxNjMzRkYwMjhGQUYwMDI0MEEwMDBFQjAyNDFFMDAxMDZDCi06MTBFRUUwMDAwRTAwMTVFNTAyNDAyMDIxM0MwQjgwMDgzNTY4MDA4MEFCCi06MTBFRUYwMDA5MTA5MDAyNTI0MEEwMDAxQUZBQTAwNTAzNTMzMDAwNDBGCi06MTBFRjAwMDAwMjQwMjAyMTBFMDAxNUVGQTExMzAwMjUzQzA1MDgwMTQ5Ci06MTBFRjEwMDA5MEE1OTUyOTMwQTIwMEZEM0MwMTA4MDFBMDIyOTUyOTY5Ci06MTBFRjIwMDAwQTAwMEU2RDAwNDAxODIxMjQxMTAwMEU1M0QxRkVFQTk0Ci06MTBFRjMwMDAyNDFFMDAxMDBBMDAwRUFGMjQxRTAwMTY1NjI5RkVEQzA3Ci06MTBFRjQwMDAzMkIwMDAwMTNDMEE4MDA4OTE0QzAwMUIyNDA2RkZCRDMyCi06MTBFRjUwMDAyNDFFMDAxMDAxODY1ODI0QTE0QjAwMUIwQTAwMEVBNTk4Ci06MTBFRjYwMDAzMkIwMDAwMTBBMDAwRUE0MjQxRTAwMTIzQzAzODAwMEVGCi06MTBFRjcwMDA4QzYyMDFCODA0NDBGRkZFMjQwNDA4MDBBQzY0MDFCOEIwCi06MTBFRjgwMDAwM0UwMDAwODAwMDAwMDAwMDA4MDUwMjEzMEE1RkZGRkQyCi06MTBFRjkwMDAzMEM2RkZGRjNDMDQ4MDAwOEM4MjAxQjgwNDQwRkZGRUI1Ci06MTBFRkEwMDAzNDg4MDE4MEFEMEEwMDAwM0MwNzgwMDhBQzhBMDAyMDRDCi06MTBFRkIwMDA5NEUzMDA0ODMwNjdGRkZGMTBFMDAwNDIzQzBEODAwMDAyCi06MTBFRkMwMDAyNEFCMDAxMjAwRUI0ODJCNTEyMDAwM0YyNDA0MDAwMzI3Ci06MTBFRkQwMDAzNDgyMDEwMDk0NTkwMDIwOEY4OTAwMDAyNDA0MDAxQTEzCi06MTBFRkUwMDAzMzM4RkZGRjI3MEJGRkZFMDBFQjc4MkIzOUVFMDAwMUQzCi06MTBFRkYwMDAwMDA5NkI4MjAxQUU2MDI0QTEwNDAwMEI1MTgwMDA0OTFFCi06MTBGMDAwMDA4RjhCMDAwNDhGODMwMDA0QTUwQjAwMTQzNDY4MDAwMTZCCi06MTBGMDEwMDBBRjg4MDAwNDMwQ0UwMDQwMTVDMDAwMzMzQzA0ODAwMEFGCi06MTBGMDIwMDAzQzAyODAwMDM0NDIwMTgwQTQ0NTAwMEUzQzA3ODAwMDcxCi06MTBGMDMwMDAzNEVDMDE4MEE1ODUwMDFBOEY4NTAwMEMzMTBCODAwMDBGCi06MTBGMDQwMDBBNTg5MDAxMEFEODUwMDI4QTU4NjAwMDgxMTYwMDAwRjc1Ci06MTBGMDUwMDA4Rjg1MDAxNDM0RUEwMTAwOTU0RTAwMTYzMUNERkZGQzc3Ci06MTBGMDYwMDAyNUE0MDAwNDAwODcxODIxOEM2NzQwMDAzMEU2RkZGRkNDCi06MTBGMDcwMDAxNEMwMDAwNzNDMDQ4MDAwM0MxOEZGRkYzNzBGN0ZGRkRGCi06MTBGMDgwMDAwMTBGNDAyNEFGODgwMDA0OEY4NTAwMTQzQzA0ODAwMEU5Ci06MTBGMDkwMDAyNDAyQkZGRjM0ODMwMTgwMDEwMkM4MjRBNDc5MDAyNjIyCi06MTBGMEEwMDAxMEEwMDAwNEFDNjkwMDJDMDAwNTQ0MDJBNDY1MDAxMDA3Ci06MTBGMEIwMDBBNDY4MDAyNjNDMDkxMDAwQUM4OTAxQjgwM0UwMDAwOEYwCi06MTBGMEMwMDAwMDAwMDAwMDI0MDQwMDAzMzVBQzAxODAzMENFMDA0MDc1Ci06MTBGMEQwMDA4Rjg5MDAwMDhGODgwMDA0QTE4NDAwMEI1MUMwRkZEMUVDCi06MTBGMEUwMDAzQzAyODAwMDNDMDQ4MDAwQUM4QTAwMjAzQzBGODAwODc5Ci06MTBGMEYwMDA5NUVBMDA0MDMxNDNGRkZGNTA2MDAwMDgzNDgyMDE4MEYwCi06MTBGMTAwMDAwMEEzQzAyQjU3MDAwMDAxMDBBMDE4MjEzNDk5MDE4MEYyCi06MTBGMTEwMDBBNzIzMDAwRTBBMDAxMDA1M0MwNzgwMDAwQTAwMTAwMzE4Ci06MTBGMTIwMDAzMEM2RkZCRjI0MDdGRkZFMDE2NzQwMjQwQTAwMEZGRTIwCi06MTBGMTMwMDBBRjg4MDAwNDI3QkRGRkU4OEZBMjAwMjgzMEE1RkZGRjlECi06MTBGMTQwMDAzMEM2RkZGRkFGQkYwMDEwQUY4NzAwMENBRjgyMDAxNEM2Ci06MTBGMTUwMDBBRjgwMDAwNDBFMDAwRkRCQUY4MDAwMDA4RkJGMDAxMEY3Ci06MTBGMTYwMDAyN0JEMDAxODAzRTAwMDA4QUY4MDAwMTQzQzA2ODAwMEIzCi06MTBGMTcwMDAzNEM0MDA3MDM0QzcwMTAwOEM4QTAwMDA5MEU1MDAxMjhFCi06MTBGMTgwMDA4Rjg0MDAwMDI3QkRGRkYwMzBBMzAwRkYwMDAzMTg4MjJBCi06MTBGMTkwMDAzMDgyNDAwMDEwNDAwMDM3MjQ2NTAwMDMwMDA1Qzg4MDFECi06MTBGMUEwMDAwMzI2QzAyMThGMEU0MDAwMjQ2RjAwMDQwMDBGNjg4MEVBCi06MTBGMUIwMDBBRkFFMDAwMDAxQTY2MDIxOEQ4QjQwMDBBRkFCMDAwNDE0Ci06MTBGMUMwMDA5NEU5MDAxNjMxMjhGRkZDMDEwNjM4MjE4Q0U2NDAwMDQ2Ci06MTBGMUQwMDBBRkE2MDAwODhGQTkwMDA4MDAwMDMwMjEwMDAwMjgyMUY4Ci06MTBGMUUwMDAzQzA3MDgwMDI0RTcwMTAwMEEwMDEwN0UyNDA4MDAwOEZDCi06MTBGMUYwMDA5MDU5MDAwMDI0QTUwMDAxMkNBQzAwMEMwMDc5QzAyMTFFCi06MTBGMjAwMDAwMDE4Nzg4MDAxRTc3MDIxOERDRDAwMDAxMTgwMDAwNjg0Ci06MTBGMjEwMDAwMENEMzAyNjAzQTUxMDIxMTRBOEZGRjUwMDA1MUEwMDIzCi06MTBGMjIwMDA1NTIwRkZGNDkwNTkwMDAwM0MwNDgwMDAzNDg3MDA3MEEyCi06MTBGMjMwMDAzQzA1MDgwMDhDQTUzMTA0OENFMzAwMDAyQ0EyMDAyMEMyCi06MTBGMjQwMDAxMDQwMDAwOTAwNkEzODIzMDAwNTQ4ODAzQzBCMDgwMDg0Ci06MTBGMjUwMDAyNTZCMzEwODAxMkI0MDIxMjRBQTAwMDFBRDA3MDAwMEQ1Ci06MTBGMjYwMDAzQzAxMDgwMEFDMkEzMTA0MDBDMDEwMjEwM0UwMDAwODcyCi06MTBGMjcwMDAyN0JEMDAxMDMwODIyMDAwMTA0MDAwMEIwMDA1NTg4MDkwCi06MTBGMjgwMDAwMTY2NDgyMThEMjQ0MDAwMjQ2ODAwMDQwMDA4Mzg4MDZECi06MTBGMjkwMDBBRkE0MDAwMDAwRTYxODIxOEM2NTQwMDBBRkEwMDAwODc0Ci06MTBGMkEwMDAwQTAwMTA2RUFGQTUwMDA0MDAwMDAwMEQwQTAwMTA2RkU4Ci06MTBGMkIwMDA4RkE5MDAwODI3QkRGRkQ4M0MwNTgwMDBBRkIxMDAxNDFFCi06MTBGMkMwMDBBRkIwMDAxMEFGQkYwMDI0QUZCNDAwMjBBRkIzMDAxQzNDCi06MTBGMkQwMDBBRkIyMDAxODhGODcwMDAwMzRBNDAxMDA5NDgzMDAwRUExCi06MTBGMkUwMDAzMEUyNDAwMDAwMDA4MDIxMTA0MDAwMTAzMDcxRkZGRjJDCi06MTBGMkYwMDAzQzA4MDAyMDAwRTgzMDI0MTBDMDAwMEQzMEVCODAwMEY2Ci06MTBGMzAwMDA4Rjg5MDAwNDI0MEFCRkZGMDBFQTM4MjQzNTIzMTAwMDQ3Ci06MTBGMzEwMDBBRjg3MDAwMDMwRjMyMDAwMTY2MDAwMEIzQzE4MDAwNDlCCi06MTBGMzIwMDAyNDE5RkZCRjBBMDAxMENGMDA3OTEwMjQzMEVCODAwMEIxCi06MTBGMzMwMDAxNTYwMDA0RDNDMEQwMDIwMzBGMzIwMDAxMjYwRkZGOEY2Ci06MTBGMzQwMDA4RjgzMDAwNDNDMTgwMDA0MDBGOEEwMjQxMjgwRkZGNTBECi06MTBGMzUwMDAyNDE5RkZCRjM0NjIwMDQwMzBGRjAxMDAxM0UwMDAxMEE5Ci06MTBGMzYwMDBBRjgyMDAwNDhGODIwMDI4MTA0MDAwMDYzQzBFODAwMDBGCi06MTBGMzcwMDAzQzA0MDAyMDAwRTQxODI0MTQ2MDAwQ0UzQzA2MDAwNDg1Ci06MTBGMzgwMDAzQzBFODAwMDM1Q0QwMTAwOTVBQzAwMUU5NUFCMDAxQ0Y1Ci06MTBGMzkwMDAzMTg5RkZGRjAwMEI1NDAwMDEyQTQwMjVBRjg4MDAwQzgzCi06MTBGM0EwMDAzQzEzODAwMDM2NzQwMTAwOTY5MjAwMEM4RTYzNDAwMDdFCi06MTBGM0IwMDAzNDBGRkZGRjEwNkYwMDg0MzI0NEZGRkYzMDc4MDEwMEVDCi06MTBGM0MwMDA1NzAwMDAwMTI0MTAwMDEwMzBGOTEwMDA1MzIwMDAwOEVECi06MTBGM0QwMDAzNjEyMDAwMTMwRkYwMDIwMTdFMDAwNzMzQzAzMTAwMERDCi06MTBGM0UwMDAwMEUzMTAyNDE0NDAwMDZBM0MwQTBDMDAzNjEyMDAwMUFECi06MTBGM0YwMDAzMEVDMDEwMDE1ODAwMDBCM0MwNjAwMDE4Rjg4MDAwNEYyCi06MTBGNDAwMDAzMTBENDAwMDE1QTAwMDA4MDBFNjI4MjQzQzEzMUYwMTIwCi06MTBGNDEwMDAwMEYzNzgyNDNDMEUxMDAwMTFFRTAwQUUzMDk0MDIwMDkwCi06MTBGNDIwMDAzQzA2MDAwMTAwRTYyODI0MTBBMDAwMTkzQzE5MTAwMDM5Ci06MTBGNDMwMDAzQzA0MDgwMDhDODQwMDI0MzA5NDAwMDIxNjgwMDBEOTFCCi06MTBGNDQwMDAyNDAzMDAwMThGQkYwMDI0OEZCNDAwMjA4RkIzMDAxQzYxCi06MTBGNDUwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAwMDYwMTAyMTFGCi06MTBGNDYwMDAwM0UwMDAwODI3QkQwMDI4MDBFRDYwMjQxMTgwRkZCM0YxCi06MTBGNDcwMDAzMEYzMjAwMDhGOEUwMDA0M0MxMkZGRkYzNjRGN0ZGRkQ5Ci06MTBGNDgwMDAwMEVGMzgyNDM1QzM4MDAwMEEwMDEwQkVBRjg3MDAwMEFCCi06MTBGNDkwMDAwMEY5QzAyNDE3MDAwMDRFMDAwMDIwMjFBRjgwMDAxMEFBCi06MTBGNEEwMDAzQzAzODAwMDM0NjUwMTAwOTRBRTAwMEU4RjkxMDAxMDgzCi06MTBGNEIwMDAzMUNBRkZGRjEwODAwMEM2MjU1MzAwMDQzMEVGMDEwMDYxCi06MTBGNEMwMDAxNUUwMDA3MDNDMTgwRjAwM0EyODAwMDIyRTcwMDNFRjgwCi06MTBGNEQwMDAyRDE5MDAwMTNBMUYwMDAxMDMzRjI4MjQxNEEwMDAyMjI3Ci06MTBGNEUwMDAyNDA0MDAwMTNDMDMwODAwOEM2MzAwRDAyRTI1MDAwQzhFCi06MTBGNEYwMDAwMDExMjFDMDM4NkMwMDAxMkQ4QjAwMDEwMTY1MTAyNDIyCi06MTBGNTAwMDAxNDQwMDAxNDMyNzBGRkZGMjYyREZGRkMyREE0MDAwNEQwCi06MTBGNTEwMDAxNDgwMDEwMzAwMDAyMDIxMzg2QTAwMDIyRDQ2MDAwMUZBCi06MTBGNTIwMDAwMEM1MTgyNDU0NjAwMEZGMDIwMDI4MjEyNjJGRkZGODkwCi06MTBGNTMwMDAyREVFMDAwNDE1QzAwMDA3MDAwMDAwMDAwMDA3QTI0MkU1Ci06MTBGNTQwMDAwMDExQzAyQjAyOTg0ODI0MTUyMDAxMDkwMjAwMjgyMTJGCi06MTBGNTUwMDAwMDExMjFDMDAyMDAyODIxMzY0NjAwMDIwRTAwMEZEQkY4Ci06MTBGNTYwMDAwMDAwMDAwMDAwMDAyMDIxMDA4MDE4MjE4RkJGMDAyNDJGCi06MTBGNTcwMDA4RkI0MDAyMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNDFECi06MTBGNTgwMDA4RkIwMDAxMDAwNjAxMDIxMDNFMDAwMDgyN0JEMDAyOEE0Ci06MTBGNTkwMDAzQzA5MEJGRjAwRUE0MDI0MzUyNkZGRkYwMEM4MjgyQjVBCi06MTBGNUEwMDA1MEEwRkY5MzM2MTIwMDAxM0MwQjA4MDA4RDZCMDAyQzFECi06MTBGNUIwMDAzNjEyMDAwNTI1NzAwMDAxM0MwMTA4MDBBQzMwMDAyQzFCCi06MTBGNUMwMDAwQTAwMTBGNjMwRUMwMTAwMEEwMDEwRUIyNDEwMDAyMEI1Ci06MTBGNUQwMDAwMDA3MTYwMjMwNUYwMDBGMDAxRjgwQzAzQzAzMDgwMUM3Ci06MTBGNUUwMDAyNDYzOTQ3ODAyMDMyMDIxMTA4MEZGQURBRjlGMDAxMEE4Ci06MTBGNUYwMDA5MDg4MDAwMDUxMDBGRkFCM0MwMzgwMDAzQzBEODAwMDcwCi06MTBGNjAwMDAzNUE5MDEwMDk1MkMwMDBFMjQwQjAwMDMwMjQwMzAyMTg3Ci06MTBGNjEwMDAzMThBRkZGRjI1NDUwMDA0MTEwQjAwRDkwMDAwNTAyMTVECi06MTBGNjIwMDA5MDg4MDAwMTI0MTQwMDAyMzExMTAwRkYxMjM0MDBCRjQxCi06MTBGNjMwMDAzMEY4MDA0MDMxMDMwMEZGMjQwODAwMDExMDY4MDBDOEMyCi06MTBGNjQwMDAzMEUyMDA0MDhDOEEwMDA0OEY4QjAwMjQ1NTYwMDAwNjU1Ci06MTBGNjUwMDAzNEM2MDAwMjI1NERGRTAwMkRBQzAzODE1NTgwMDAwMTBCCi06MTBGNjYwMDAzNjQ2MDA0MDM0QzYwMDAyMDE0MDIwMjEzMEE1RkZGRjhECi06MTBGNjcwMDAwRTAwMEZEQjMwQzZGRkZGMDAwMDQwMjEwQTAwMTEwQTE4Ci06MTBGNjgwMDAwMTAwMTgyMTAwRjhBMDI0M0MwOTAyMDAxMjg5RkY4RjE0Ci06MTBGNjkwMDAzQTI4MDAwMjkwQjEwMDEzMzI3MEZGRkYwMjAwMjgyMUM3Ci06MTBGNkEwMDAzMjI3MDBGRjI0RjMwMDA0MDAxMzIxQzAwQTAwMTE1MDg4Ci06MTBGNkIwMDAzNjQ2MDAwMjAwRTYyODI0MTRBMEZGMzIzQzBFODAwMEVCCi06MTBGNkMwMDAwRTAwMTA1NDNDMTM4MDAwOEY4NzAwMDAwQTAwMTBFMkU3Ci06MTBGNkQwMDBBRjgyMDAwQzE2ODBGRjUzM0MwNjAwMDEyNjI0MDAwNDc0Ci06MTBGNkUwMDAzMDg1RkZGRjM2NDYwMDAyM0MwMzgwMDA4QzcxMDFCODc0Ci06MTBGNkYwMDAwNjIwRkZGRThGODkwMDA4MzQ2QTAxODBBRDQwMDAwMEJCCi06MTBGNzAwMDAxMTIwMDBCMjNDMEQ4MDAwMjRCODAwMTIwMTM4OTAyQjZCCi06MTBGNzEwMDAxMjQwMDBBRjI0MEMwMDAzMzQ3MDAxMDA5NjAzMDAyMDU3Ci06MTBGNzIwMDAyNDAyMDAxQTMwRjk0MDAwMzA3RkZGRkZBMTQyMDAwQjk1Ci06MTBGNzMwMDAxMzIwMDBBQjI3RTNGRkZFMDEyMzU4MkIxNTYwMDBBOTFGCi06MTBGNzQwMDAyNDA5RkZGRTM1MDgwMDAxQTU0MzAwMTRBRjg4MDAwNDFBCi06MTBGNzUwMDAzQzBFODAwMDI0MTNCRkZGMDExMzc4MjQzNUM4MDE4MEJDCi06MTBGNzYwMDBBNTA1MDAwRUE1MDUwMDFBQTUwNjAwMDhBNTBGMDAyNjkwCi06MTBGNzcwMDBBNTA3MDAxMDNDMDcxMDAwQURDNzAxQjgwMDAwMTgyMTE0Ci06MTBGNzgwMDA4RkJGMDAyNDhGQjQwMDIwOEZCMzAwMUM4RkIyMDAxOEVECi06MTBGNzkwMDA4RkIxMDAxNDhGQjAwMDEwMDA2MDEwMjEwM0UwMDAwODRBCi06MTBGN0EwMDAyN0JEMDAyODNDMTIwODAwOEU1MjAwRDgwMjIwMjgyMUQ0Ci06MTBGN0IwMDAyNDA0MDA4MDI2NTEwMDAxM0MwMTA4MDBBQzMxMDBEODJGCi06MTBGN0MwMDAwRTAwMEZEQjI0MDYwMDAzMEEwMDExRDkwMDAwMTgyMUU3Ci06MTBGN0QwMDA4QzY1NDAwMDMwQjEwMTAwMTIyMDAwNDYzMjU5MDAwNDBGCi06MTBGN0UwMDAzQzFGMDgwMDhGRkYwMDI0MjQxNDAwMDQxNzIwMDAwMjhGCi06MTBGN0YwMDAzM0YwMDAwRDI0MTQwMDAyMDAwNzZBQzIzOUE0MDAwMThFCi06MTBGODAwMDAyRTZDMDNFRjMwODIwMDAxMzk4QjAwMDEwMDRCNDAyNTQ0Ci06MTBGODEwMDAxMTAwMDAwMzMyNTFGRkZCMjQxMkZGRkIwMjEyODAyNDZGCi06MTBGODIwMDAzMEUzMDEwMDUwNjAwMDE1MzIxRjAwMDEzQzBBMEYwMDU4Ci06MTBGODMwMDAwMEVBMzAyNDNDMDcwMjAwMTBDNzAwMEYzQzE5ODAwMDhBCi06MTBGODQwMDAzNzI1MDEwMDkwQTkwMDEzMjQxOEZGRkUwMjE4ODAyNDE4Ci06MTBGODUwMDAzMTJGMDBGRjI1RUUwMDA0MDAwRTIxQzAxMjAwMDAwMjJGCi06MTBGODYwMDAwMjM0MzAyNTMyMjZGRkZGMEUwMDBGREIzMjY1RkZGRjJBCi06MTBGODcwMDAxMjAwRkYzRDAwMDAyMDIxMzIxRjAwMDExM0UwMDAwREE3Ci06MTBGODgwMDAzMjBCMDAwNDI0MDgwMDAxMTIwODAwMDIwMjM0MzAyNTYzCi06MTBGODkwMDAzMjI2RkZGRjAwMDAyMDIxMEUwMDBGREIzMjY1RkZGRjQ0Ci06MTBGOEEwMDAyNDAyRkZGRTAyMDI4MDI0MTIwMEZGMkYwMDAwMjAyMTBDCi06MTBGOEIwMDAzMjBCMDAwNDUxNjAwMDBEMjQwNDAwMDEwMjM0MzAyNTk1Ci06MTBGOEMwMDAyNDE0MDAwNDU2MTQwMDAxMzIyNkZGRkYyNDExRkZGQjBDCi06MTBGOEQwMDAzMjY1RkZGRjI0MDQwMTAwMEUwMDBGREIwMjExOTgyNEEzCi06MTBGOEUwMDAxMjYwRkYyMTAwMDAyMDIxMjQwNDAwMDEwQTAwMTE1NEFECi06MTBGOEYwMDAwMDgwMTgyMTNDMEMwODAwOEQ4QzAwMjQzMTkwMDAwMTAwCi06MTBGOTAwMDA1MjAwRkYxOTAwMDAyMDIxMzI2NUZGRkYzNjQ2MDAwMjM5Ci06MTBGOTEwMDAwRTAwMEZEQjAwMDAyMDIxMEEwMDExNTMwMDAwMjAyMUZGCi06MTBGOTIwMDAwMjAwMjgyMTBBMDAxMTUwMzY0NjAwMDIxMzAwMDAwNjhBCi06MTBGOTMwMDAwMDAwMDAwMDk1MzAwMDEwOTQ5RjAwMDIzMjE5MEZGRjY0Ci06MTBGOTQwMDAxM0Y5RkYzRDMxMDMwMEZGM0MwNDA4MDE5MDg0OTQ3OUQyCi06MTBGOTUwMDAxMDgwRkYzRDI0MDgwMDAxMEEwMDExMEEwMTAwMTgyMTRGCi06MTBGOTYwMDA1MDQwRkYzOThDOEEwMDA0MEEwMDEyNEIwMDAwMDAwMDRFCi06MTBGOTcwMDAwRTAwMEZEQjMyNDZGRkZCMEEwMDExNEUwMDExMjFDMEMyCi06MTBGOTgwMDA5MDgzMDAwMTI0MEUwMDAxMTA2RUZGM0MyNDA4MDAwMTRBCi06MTBGOTkwMDAyNDBGMDAwMjEwNkYwMDA0MzBGMzAwNDAyNDA4MDAwMTFGCi06MTBGOUEwMDAwQTAwMTEwQTAxMDAxODIxNTI2MEZGRkQyNDA4MDAwMTFECi06MTBGOUIwMDA5NTI1MDAxMDk0ODcwMDAyMzBBOUZGRkY1MEU5RkVBMUIxCi06MTBGOUMwMDAwMTAwMTgyMTBBMDAxMjYxMjQwODAwMDEyNDBDMDAwMzIwCi06MTBGOUQwMDAzNUFBMDE4MEExNEMwMDBCMEEwMDExQ0UzQzBFODAwMDFDCi06MTBGOUUwMDAyNDA5RkZGRTBBMDAxMUNDMDEwOTQwMjQyN0JERkZDMEY1Ci06MTBGOUYwMDBBRkIwMDAxOEFGQkYwMDNDM0MxMDYwMENBRkJFMDAzODg5Ci06MTBGQTAwMDBBRkI3MDAzNEFGQjYwMDMwQUZCNTAwMkNBRkI0MDAyOEFDCi06MTBGQTEwMDBBRkIzMDAyNEFGQjIwMDIwQUZCMTAwMUM4RTBFNTAwMDc3Ci06MTBGQTIwMDAyNDBGRkY3RjNDMDY4MDAwMDFDRjY4MjQzNUFDMzgwQ0UyCi06MTBGQTMwMDAyNDBCMDAwM0FFMEM1MDAwQUNDQjAwMDgzQzAxMDgwMEM2Ci06MTBGQTQwMDBBQzIwMDAyMDBFMDAxN0IwMDAwMDAwMDAzQzBBMDAxMDlGCi06MTBGQTUwMDAzNTQ5ODA1MTNDMDY2MDE2QUUwOTUzN0M4Q0M3MDAwMEM2Ci06MTBGQTYwMDAzQzA4NjAxNDhEMDUwMEEwM0MwM0ZGRkYwMEUzMjAyNDQ4Ci06MTBGQTcwMDAzQzAyNTM1MzAwMDUxRkMyMTA4MjAyOUIzNEM1N0MwMDE4Ci06MTBGQTgwMDA4Q0JGMDA3QzhDQTIwMDc4M0MxRTYwMDAzN0M0MjAyMDE0Ci06MTBGQTkwMDAzQzA1MDgwMTI0QTU5MEMwQUY4MjAwMThBRjlGMDAxQzUwCi06MTBGQUEwMDAwRTAwMTY3NDI0MDYwMDBBM0MxOTAwMDEyNzM5OTQ3OEM4Ci06MTBGQUIwMDAzQzAxMDgwMEFDMzkzMURDMEUwMDIwNkJBRjgwMDAxNDMzCi06MTBGQUMwMDA4RkQ3MDgwODI0MThGRkYwM0MxNTU3MDkwMkY4QjAyNDE2Ci06MTBGQUQwMDAxMkQ1MDI4QjI0MDQwMDAxQUY4MDAwMjgzQzE0ODAwMDYyCi06MTBGQUUwMDAzNjk3MDEwMDAyRTBGMDIxOEU5MDAwMDAzMjA1MDAwM0ZECi06MTBGQUYwMDAxMEEwRkZGRDMyMDcwMDAxMTRFMDAwNUQzMjA2MDAwMjk1Ci06MTBGQjAwMDAxMEMwRkZGOTNDMDc4MDAwMzRFNTAxNDA4Q0I5MDAwMENCCi06MTBGQjEwMDAyNDEwMDA0MEFDRjkwMDIwOTBCODAwMDgzMzAzMDA3MEI2Ci06MTBGQjIwMDAxMDcwMDEwQjI4NjkwMDQxMTEyMDAwMDgyNDA4MDA2MEIyCi06MTBGQjMwMDAyNDFGMDAyMDEwN0YwMDBFM0MwQjQwMDAzQzA2ODAwMDdDCi06MTBGQjQwMDBBQ0NCMDE3ODBBMDAxMkIzMDAwMDAwMDAxNDY4RkZGQjgwCi06MTBGQjUwMDAzQzBCNDAwMDBFMDAxRjg4MDAwMDAwMDAzQzBCNDAwMEUyCi06MTBGQjYwMDAzQzA2ODAwMEFDQ0IwMTc4MEEwMDEyQjMwMDAwMDAwMDE0Ci06MTBGQjcwMDA5MEFCMDAwOTI0MTEwMDA0OENBNzAwMDAzMTY4MDBGRjNECi06MTBGQjgwMDAxMTExMDE1RDI1MTJGRkZBMkU1MzAwMDYxMjYwMDAxNkI2Ci06MTBGQjkwMDAzQzA2ODAwMDhDQUEwMDA0OEY4NjAwMjQ5NEEzMDAwQUVGCi06MTBGQkEwMDAwMDBBM0UwMjMxMDUwMEZGMTBDMDAwMDUzMDY0RkZGRjZGCi06MTBGQkIwMDAyQ0VDMDAwODE1ODAwMDAyMjRFNzAwMDQyNDA3MDAwMzUxCi06MTBGQkMwMDAyNDBFMDAwOTEwQUUwMUExMjhBRjAwMEExMUUwMDE4NDQzCi06MTBGQkQwMDAyNDEwMDAwQTI0MDQwMDA4MTBBNDAwMUEwMDA3NDlDMEQ5Ci06MTBGQkUwMDAwMTIwMzgyMTNDMDY4MDAwOENEMDAxQjgwNjAwRkZGRUMxCi06MTBGQkYwMDAzNEM0MDE4MEFDODcwMDAwMzRDNTAxNDA5MEI2MDAwOEQxCi06MTBGQzAwMDAyNDE5MDAwMjNDMEI0MDAwMzJDMjAwRkYwMDAyOEEwMEFGCi06MTBGQzEwMDAwMjI4RjgyNUE0OUYwMDA4QTA5OTAwMEI5NEE3MDAwQUM5Ci06MTBGQzIwMDAzQzA4MTAwMEE0ODcwMDEwOENCODAwMDRBQzk4MDAyNDk1Ci06MTBGQzMwMDBBQ0M4MDFCODNDMDY4MDAwQUNDQjAxNzgwQTAwMTJCMzE2Ci06MTBGQzQwMDAwMDAwMDAwMDAwMEFDMjAyMzMwMzAwRkYyNDA1MDAwMTg3Ci06MTBGQzUwMDA1NDY1RkZFNDAxMjAzODIxOEY5OTAwMjBBRjgzMDAyNEYwCi06MTBGQzYwMDAyNzI3MDAwMUFGODcwMDIwMEEwMDEyRjIwMTIwMzgyMTY3Ci06MTBGQzcwMDA4RkQxMDAyODNDMEI4MDA4QUU5MTAwMjA4RkM2MDAwNDc1Ci06MTBGQzgwMDA4RkNBMDAwMDk1NjkwMDQ4QUY4NjAwMDBBRjhBMDAwNDYzCi06MTBGQzkwMDAzMTI4RkZGRjBFMDAwRkQ0QUY4ODAwMDgzQzAzMDgwMDk2Ci06MTBGQ0EwMDA4QzYzMDBDMDEwNjAwMDI1OEY4NzAwMDAzQzBFMDgwMEE4Ci06MTBGQ0IwMDA4RENFMDBDNDI1Q0QwMDAxM0MwMTA4MDBBQzJEMDBDNDUwCi06MTBGQ0MwMDAzQzFGODAwMDM3RTkwMTAwOEQzOTAwMjQzQzA3NjAyMDhCCi06MTBGQ0QwMDBBQ0Y5MDAxNDAwMDAwMDAwM0MwNjgwMDAzQzA4NDAwMDI1Ci06MTBGQ0UwMDBBQ0M4MDEzODAwMDAwMDAwNTIyMEZGODUzMjA2MDAwMjM3Ci06MTBGQ0YwMDAyNjJEMDE0MDI2MkUwMDgwMjQwNEZGODAwMUE0MjgyNDA0Ci06MTBGRDAwMDAwMUM0NzgyNDAwMEYxOTQwMzFDQzAwN0YwMDA1OTk0MEQwCi06MTBGRDEwMDAzMUIyMDA3RjNDMTUyMDAwMzZBMjAwMDIwMDZDNTAyNTU1Ci06MTBGRDIwMDAwMjcyQjAyNTAyQzI4ODI1MDE0MjU4MjVBQ0NCMDgzMEFBCi06MTBGRDMwMDBBQ0QxMDgzMDBBMDAxMkI5MzIwNjAwMDIzQzEyMDAxMEExCi06MTBGRDQwMDAwMEYyNzgyNDE1RTAwMDcwOEY4MzAwMDQzQzE4MDgwMDRFCi06MTBGRDUwMDA4RjE4MDAyMDk3RDYwMDBFMzBGNTQwMDAyNzEzMDAwMUMxCi06MTBGRDYwMDAzQzAxMDgwMEFDMzMwMDIwMDAwMDkwMjExMkEwMDA4MTZCCi06MTBGRDcwMDAzMkQzRkZGRjNDMUYwMDIwMDBGRkM4MjQxMzIwMDA3RTY5Ci06MTBGRDgwMDAzMEU1ODAwMDhGODIwMDA0MjQwNEJGRkYwMEU0MzgyNEEzCi06MTBGRDkwMDAzNDQzMTAwMEFGODcwMDAwMzBFQjIwMDAxMTYwMDA3Mzg3Ci06MTBGREEwMDAyNDBFRkZCRjNDMEQwMDA0MDBFRDYwMjQxMTgwMDAwMjEyCi06MTBGREIwMDAwMDZFMTAyNDM0NjIwMDQwMzBFRjAxMDAxMUUwMDAxMEFBCi06MTBGREMwMDBBRjgyMDAwNDhGOTUwMDI4MTJBMDAwMDczQzE4MDAyMDg1Ci06MTBGREQwMDAwMEY4QjAyNDEyQzAwMDA0M0MxRjAwMDQwMEZGQzgyNDM3Ci06MTBGREUwMDAxMzIwMDE2RDAwMDAwMDAwOTZFMzAwMUU5NkU4MDAxQzQxCi06MTBGREYwMDAzMDY1RkZGRjAwMDgxNDAwMDBBMjIwMjVBRjg0MDAwQzJFCi06MTBGRTAwMDA5NkVBMDAwQzhFODQ0MDAwMzQwOUZGRkYxMDg5MDA4NUJCCi06MTBGRTEwMDAzMTQ1RkZGRjMwODYwMTAwNTRDMDAwMDEyNDEyMDAxMDVDCi06MTBGRTIwMDAzMEVCMTAwMDExNjAwMDEzMzY1NjAwMDEzMEVDMDAyMDVBCi06MTBGRTMwMDAxNTgwMDAwQTNDMEUxMDAwMDBFRTY4MjQxMUEwMDAwRDkxCi06MTBGRTQwMDAzQzE5MEMwMDNDMTgwQkZGMDBGOUIwMjQzNzE1RkZGRkRDCi06MTBGRTUwMDAwMkI2NzgyQjExRTAwMDA3MzY1NjAwMDEzQzFGMDgwMDVGCi06MTBGRTYwMDA4RkZGMDAyQzM2NTYwMDA1MjdGMjAwMDEzQzAxMDgwMEU4Ci06MTBGRTcwMDBBQzMyMDAyQzMwRTQwMTAwMTQ4MDAwMEIzQzA2MDAwMTgxCi06MTBGRTgwMDA4Rjg4MDAwNDMxMDI0MDAwNTQ0MDAwMDgwMEU2MjgyNDE2Ci06MTBGRTkwMDAzQzBBMUYwMTAwRUE0ODI0M0MwMzEwMDAxMTIzMDEwOTE5Ci06MTBGRUEwMDAzMEE2MDIwMDNDMDYwMDAxMDBFNjI4MjQxMEEwMDAzRTE3Ci06MTBGRUIwMDAzQzE4MTAwMDNDMEQwODAwOERBRDAwMjQzMUFDMDAwMjUwCi06MTBGRUMwMDAxNTgwMDAwNjI0MDMwMDAxMDA2MDEwMjExMDQwRkY4MzBDCi06MTBGRUQwMDAzQzA2ODAwMDBBMDAxMzJBM0MxRjgwMDAzQzBGMDgwMEVCCi06MTBGRUUwMDA4REVGMDBEODAyNjAyODIxMjQwNDAwODAyNUVFMDAwMTU3Ci06MTBGRUYwMDAzQzAxMDgwMEFDMkUwMEQ4MEUwMDBGREIyNDA2MDAwM0U2Ci06MTBGRjAwMDAwQTAwMTNBQjAwMDAxODIxMjQwNUJGRkYwMDY1NjgyNDE4Ci06MTBGRjEwMDAxMUEwMDAwNzI0MEY4N0ZGMDA2RjcwMjQxNUMwMDAwODkwCi06MTBGRjIwMDAzQzE4MDA2MDAwRjgyMDI0MTA4MDAwMDUwMDAwMDAwMDRDCi06MTBGRjMwMDAwRTAwMEQ0MjAwMDAwMDAwMEEwMDEzQUMwMDAwMDAwMDlCCi06MTBGRjQwMDAwRTAwMTU5QzAwMDAwMDAwMEEwMDEzQUMwMDAwMDAwMDI5Ci06MTBGRjUwMDAwRTAwMTVGNDAwMDAwMDAwM0MwQjQwMDAzQzA2ODAwMDQxCi06MTBGRjYwMDBBQ0NCMDE3ODBBMDAxMkIzMDAwMDAwMDAwQTAwMTM2NzRFCi06MTBGRjcwMDAwMDZFMTAyNDMwRTU4MDAwMTBBMEZGODc4RjgzMDAwNEZFCi06MTBGRjgwMDAzQzA4MDAyMDAwRTgxODI0NTA2MEZGODM4RjgzMDAwNEExCi06MTBGRjkwMDA4Rjg5MDAwNDNDMDZGRkZGMzRDQTdGRkYwMEVBMzgyNDQzCi06MTBGRkEwMDAwQTAwMTM1RTM1MjM4MDAwMDBGOEE4MjQxNkEwMDAxRjY1Ci06MTBGRkIwMDAwMDAwNDAyMUFGODAwMDEwM0MwMzgwMDAzNDY0MDEwMDQ5Ci06MTBGRkMwMDA5NDg2MDAwRThGOTMwMDEwMzBDNUZGRkYxMTAwMDE0RTg0Ci06MTBGRkQwMDAyNEI1MDAwNDMwRUEwMTAwMTE0MDAwNTUzQTdGMDAwMkM4Ci06MTBGRkUwMDAzQzBFMEYwMDAwRUU2ODI0M0MwQzAyMDAxMUFDMDA1MUU2Ci06MTBGRkYwMDAyRUIyMDNFRjkwOEYwMDEzMzJCMkZGRkYzMUU0MDBGRjA3Ci06MDIwMDAwMDQwMDAxRjkKLToxMDAwMDAwMDI0ODcwMDA0MDAwNzIxQzAwMjQwMjgyMTM2QzYwMDAyRDAKLToxMDAwMTAwMDBFMDAwRkRCMDAwMDAwMDAwMDAwMjAyMTBBMDAxM0FCREYKLToxMDAwMjAwMDAwODAxODIxMEEwMDEzODEyNDEyMDAyMDAwMDcyNjAyRjQKLToxMDAwMzAwMDMwOTkwMDBGMDAxOUY4QzAzQzEyMDgwMTI2NTI5NDc4M0MKLToxMDAwNDAwMDAzRjI0MDIxMTEwMEZGRENBRjk5MDAxMDkxMDkwMDAwN0MKLToxMDAwNTAwMDExMjBGRkRBM0MwMzgwMDAzQzEzODAwMDM2NkEwMTAwNjcKLToxMDAwNjAwMDk1NEIwMDBFMjQwMzAwMDMwMkMwMzAyMTMxNjJGRkZGRDQKLToxMDAwNzAwMDI0NDUwMDA0MTEyMzAwRUMwMDAwMjAyMTkxMDkwMDAxMTcKLToxMDAwODAwMDI0MEQwMDAyMzEyRTAwRkYxMUNEMDBGQTMxMzIwMEZGQTUKLToxMDAwOTAwMDI0MDkwMDAxMTI0OTAwMTAzMEZGMDA0MDhEMDQwMDA0QzMKLToxMDAwQTAwMDhGODMwMDI0MTQ2MDAwMDYzNEQzMDAwMjI0OEJGRTAwRUEKLToxMDAwQjAwMDJENjIwMzgxNTQ0MDAwMDEzNkM2MDA0MDM0RDMwMDAyNTMKLToxMDAwQzAwMDMwQTVGRkZGMEUwMDBGREIzMjY2RkZGRjAwMDA0ODIxNjYKLToxMDAwRDAwMDBBMDAxM0FCMDEyMDE4MjE1M0UwRkZGMThEMDQwMDA0NDYKLToxMDAwRTAwMDNDMDgwODAxOTEwODk0NzkxMTAwRkZFRDI0MDkwMDAxRjIKLToxMDAwRjAwMDBBMDAxM0FCMDEyMDE4MjEzQzA0ODAwMDhDOEEwMUI4NEYKLToxMDAxMDAwMDA1NDBGRkZFMzQ5NjAxODAyNDE1MDAxQ0FFQzcwMDAwOTgKLToxMDAxMTAwMEEyRDUwMDBCM0MwMjEwMDBBQzgyMDFCODNDMEI0MDAwQTEKLToxMDAxMjAwMDNDMDY4MDAwQUNDQjAxNzgwQTAwMTJCMzAwMDAwMDAwNEUKLToxMDAxMzAwMDJFQjIwM0VGMkZGOTAwMDEzQTQ5MDAwMTAzMjlDMDI0MzAKLToxMDAxNDAwMDE3MDBGRkI2MjQwNDAwMDEzQzAzMDgwMDhDNjMwMEQwQjQKLToxMDAxNTAwMDJFNjUwMDBDMDAxMzIxQzAzODZCMDAwMTJENjIwMDAxRDgKLToxMDAxNjAwMDAwNDU0MDI0MTUwMEZGQTgzMkIyRkZGRjI2NkFGRkZDQkQKLToxMDAxNzAwMDJENDYwMDA0MTRDMDAwMTMwMDAwMjAyMTM4NkQwMDAyMzkKLToxMDAxODAwMDJEQUMwMDAxMDE4NTE4MjQxNDYwMDAwRjAyNDAyODIxQzUKLToxMDAxOTAwMDI2NkVGRkY4MkRDNTAwMDQxNEEwRkY5QjAwMDAwMDAwOTAKLToxMDAxQTAwMDAwMDc3QTQyMDAxMzM4MkIwMUU3QTgyNDU2QTAwMDA4NjQKLToxMDAxQjAwMDAyNDAyODIxMDAxMzIxQzAwMjQwMjgyMTBBMDAxM0ZEMUIKLToxMDAxQzAwMDM2QzYwMDAyMDI0MDI4MjEwQTAwMTNGRDM2QzYwMDAyOEUKLToxMDAxRDAwMDBFMDAwRkRCMzJDNkZGRkIwQTAwMTQ2NzAwMTMyMUMwQkMKLToxMDAxRTAwMDEwQjAwMDcyMDAwNDVBMDIyNDA2MDAwQjE0QTZGRTdDMTQKLToxMDAxRjAwMDAwMDc0OUMwMzE0NjAwRkYwMDA2NTYwMDAwMEE1RTAzQjIKLToxMDAyMDAwMDA1NjIwMEIwMzBDNjAwN0YwMDA2NzBDMDNDMEYwODAxRDgKLToxMDAyMTAwMDI1RUY5NDc4MDFDRkE4MjFBMkEwMDAwMUEyQTAwMDAwQTAKLToxMDAyMjAwMDNDMTM2MDAwOEU2MzE4MjAyNDBEMDAwMTAwQ0Q0ODA0QUIKLToxMDAyMzAwMDAwMDk2MDI3MDAwNzQ5QzAwMDZDOTAyNDAxMjAzODIxODQKLToxMDAyNDAwMEFFNzIxODIwMEEwMDEyRjJBNkEwMDAwMjE0QzAwMDRCRTEKLToxMDAyNTAwMDhGOEMwMDIwMDAwNzQ5QzAzQzBCODAwMEFENjkwMDIwNTYKLToxMDAyNjAwMDNDMTE4MDA4OTYzRjAwNDAxM0UwMDAwMjI0MDUwMDAxODUKLToxMDAyNzAwMDI0MDUwMDQxM0MwNDgwMDA4QzhBMDFCODA1NDBGRkZFNDMKLToxMDAyODAwMDM0OTYwMTgwMjQxMjAwMDNBRUM5MDAwMEEyRDIwMDBCRjQKLToxMDAyOTAwMEE2QzAwMDBFQTZDMDAwMUFBNkMwMDAxMEFFQzAwMDI4NUUKLToxMDAyQTAwMEE2QzUwMDA4OTZEMzAwMjYzNjc1MDAwMUE2RDUwMDI2RkYKLToxMDAyQjAwMEFFQzAwMDJDM0MwMjEwMDBBQzgyMDFCODBBMDAxMkYyNjEKLToxMDAyQzAwMDAxMjAzODIxMTRDMEZFRjgzQzA2MDAwMTI2NkIwMDA0MTIKLToxMDAyRDAwMDMxNjVGRkZGMzZDNjAwMDIzQzAzODAwMDhDNzMwMUI4MTUKLToxMDAyRTAwMDA2NjBGRkZFOEY4OTAwMDgzQzBEODAwMDM1QUMwMTgwNjAKLToxMDAyRjAwMEFEODAwMDAwNTEyMDAwREQzQzA5ODAwMDI0QUYwMDEyRDkKLToxMDAzMDAwMDAxMkY3MDJCNTFDMDAwRDkzQzA5ODAwMDk2RjIwMDIwQ0IKLToxMDAzMTAwMDNDMTk4MDAwMjQxODAwMUEzMjU2RkZGRjM3MkEwMTgwNEEKLToxMDAzMjAwMDMwRjU0MDAwQTE1ODAwMEIxMkEwMDBENTI2QzNGRkZFRjcKLToxMDAzMzAwMDAxMjNGODJCMTdFMDAwRDMyNDA0RkZGRTM1MDgwMDAxNDkKLToxMDAzNDAwMEE1NDMwMDE0QUY4ODAwMDQyNDEzQkZGRjNDMEI4MDAwQkEKLToxMDAzNTAwMDAxMTM1MDI0MzU2ODAxODBBNTA1MDAwRUE1MDUwMDFBN0IKLToxMDAzNjAwMEE1MDYwMDA4QTUwQTAwMjZBNTA3MDAxMDNDMDcxMDAwRjYKLToxMDAzNzAwMEFFODcwMUI4MEEwMDEzQUIwMDAwMTgyMTAwMDc0OUMwN0UKLToxMDAzODAwMDI1ODNGRkZGMTQ2MEZFMTZBRjgzMDAyMDAxMjAzODIxNzMKLToxMDAzOTAwMDBBMDAxMkYyQUY4MDAwMjQwRTAwMTA1NDAwMDAwMDAwOEEKLToxMDAzQTAwMDhGODcwMDAwMEEwMDEzNzlBRjgyMDAwQzI0MDMwMEZGM0UKLToxMDAzQjAwMDExNjNGRTBCMDAwNzQ5QzAxMEMwMDAzODAwMEI3NjAwMjcKLToxMDAzQzAwMDAwMEIyMEMwM0MwOTA4MDEyNTI5OTQ3ODAwODkxODIxRDgKLToxMDAzRDAwMDI0MDIwMDAxQTA2MjAwMDAzQzE2MDgwMTI2RDY5NDc4OTEKLToxMDAzRTAwMDNDMDIwODAxMjQ0Mjk0N0MwMDk2MjgyMTAwMDc0OUMwNjEKLToxMDAzRjAwMDAwODI4ODIxMDAwQUZDMDJBRTI5MDAwMEEwQkYwMDAxOTMKLToxMDA0MDAwMDNDMDQ2MDAwOEM5ODE4MjAyNDE5MDAwMTAxNzkzODA0RkMKLToxMDA0MTAwMDAzMDczMDI1MDEyMDM4MjFBNEFBMDAwMkFDODYxODIwNDkKLToxMDA0MjAwMDBBMDAxMkYzM0MwNjgwMDA5MTAzMDAwMTI0MTYwMDAxMkIKLToxMDA0MzAwMDEwNzZGRjI3MjQwOTAwMDEyNDA1MDAwMjEwNjUwMDA0M0UKLToxMDA0NDAwMDMwRTYwMDQwMjQwOTAwMDEwQTAwMTNBQjAxMjAxODIxMDYKLToxMDA0NTAwMDUwQzBGRkZEMjQwOTAwMDE5NTRDMDAxMDk1MEEwMDAyRDAKLToxMDA0NjAwMDMxODdGRkZGNTE0N0ZFOTgwMTIwMTgyMTBBMDAxNTBCMjQKLToxMDA0NzAwMDI0MDkwMDAxMzBFRjAwNDAxMUUwRkYxOTAwMDAwMDAwRTYKLToxMDA0ODAwMDk1NTkwMDEwOTUxODAwMDIzMzM1MEZGRjE3MTVGRjE0MEEKLToxMDA0OTAwMDMxMzIwMEZGMEEwMDE0MUUyNDA5MDAwMTAwMEU2RTAzMTEKLToxMDA0QTAwMDA1QTIwMDBGMzE2QjAwN0YxMEUzMDAwODAwMEIyMEMwOTUKLToxMDA0QjAwMDNDMTAwODAxMjYxMDk0NzgwMDkwMTgyMTBBMDAxNEVFRDAKLToxMDA0QzAwMDI0MDIwMDAyMEEwMDE0N0JBRjgwMDAyMDNDMEYwODAxQzgKLToxMDA0RDAwMDI1RUY5NDc4MDA4RjE4MjEwQTAwMTRFRTI0MDIwMDAzRkYKLToxMDA0RTAwMDBBMDAxNTIzQUY4QjAwMjAwMDAzQTA4MDAyODY5ODIxMEMKLToxMDA0RjAwMDhFNzIwMDA0M0MxMTYwMDAwQTAwMTI5OTAyNTEyODIxRkEKLToxMDA1MDAwMDBBMDAxMkIwQUY4NDAwMjg4QzY0NDAwMDMwOTMwMTAwRDAKLToxMDA1MTAwMDEyNjAwMDRCMjQwOTAwMDQzQzE5MDgwMDhGMzkwMDI0QTQKLToxMDA1MjAwMDMyRDgwMDA0QUZBOTAwMTAxNzAwMDAwMzMzMzIwMDBEQzkKLToxMDA1MzAwMDI0MUYwMDAyQUZCRjAwMTAwMDA3MUFDMjM4NkEwMDAxNzIKLToxMDA1NDAwMDJFQTYwM0VGMzE0MjAwMDEzOENCMDAwMTAwNEI0MDI1QkQKLToxMDA1NTAwMDExMDAwMDAzMzJEM0ZGRkIyNDE2RkZGQjAyNTY5MDI0NDgKLToxMDA1NjAwMDMwRUMwMTAwMTE4MDAwMTYzMjQ4MDAwMTNDMEUwRjAwRjMKLToxMDA1NzAwMDAwRUUyODI0M0MwRDAyMDAxMEFEMDAxMTNDMUY4MDAwNEQKLToxMDA1ODAwMDM3RTkwMTAwOTEzODAwMTM4RkFGMDAxMDI0MTlGRkZFRTYKLToxMDA1OTAwMDMzMDQwMEZGMjQ4NzAwMDQwMjU5OTAyNDAwMDcyMUMwN0YKLToxMDA1QTAwMDEyNDAwMDAyMDI2RjMwMjUzMjY2RkZGRjBFMDAwRkRCQTMKLToxMDA1QjAwMDMyQTVGRkZGMTI0MEZFOTkwMDAwMjAyMTMyNDgwMDAxQzEKLToxMDA1QzAwMDExMDAwMDBFMzI0QTAwMDQ4RkFCMDAxMDI0MDIwMDAxMUIKLToxMDA1RDAwMDEyNDIwMDAyMDI2QjMwMjUzMjY2RkZGRjAwMDAyMDIxMkMKLToxMDA1RTAwMDBFMDAwRkRCMzJBNUZGRkYyNDA2RkZGRTAyNDY5MDI0MUIKLToxMDA1RjAwMDEyNDBGRThBMDAwMDIwMjEzMjRBMDAwNDUxNDAwMDBFQzEKLToxMDA2MDAwMDI0MDQwMDAxOEZCNjAwMTAyNDAzMDAwNDEyNDMwMDAyRUEKLToxMDA2MTAwMDAyNzYzMDI1MzI2NkZGRkYyNDEzRkZGQjMyQTVGRkZGNzEKLToxMDA2MjAwMDI0MDQwMTAwMEUwMDBGREIwMjUzQTgyNDEyQTBGRTdCNUQKLToxMDA2MzAwMDAwMDAyMDIxMjQwNDAwMDEwQTAwMTNBQjAwODAxODIxQ0YKLToxMDA2NDAwMDNDMEMwODAwOEQ4QzAwMjQzMTkyMDAwMTUyNDBGRTczNTYKLToxMDA2NTAwMDAwMDAyMDIxMzJBNUZGRkYzNkM2MDAwMjBFMDAwRkRCOEUKLToxMDA2NjAwMDAwMDAyMDIxMEEwMDE0MDAwMDAwMjAyMTI0MDIwMDAzQzEKLToxMDA2NzAwMDM1MjMwMTgwQTA2MjAwMEIwQTAwMTRDQzI0MTNCRkZGQjUKLToxMDA2ODAwMDI0MDRGRkZFMEEwMDE0Q0EwMTA0NDAyNDNDMDM4MDAwMzUKLToxMDA2OTAwMDM0NjQwMTAwOEM4NTAwMDAzMEEyMDAzRTE0NDAwMDA4NDQKLToxMDA2QTAwMDAwMDAwMDAwQUM2MDAwNDg4Qzg3MDAwMDMwRTYwN0MwMDYKLToxMDA2QjAwMDEwQzAwMDA1MDAwMDAwMDBBQzYwMDA0Q0FDNjAwMDUwQjEKLToxMDA2QzAwMDAzRTAwMDA4MjQwMjAwMDFBQzYwMDA1NEFDNjAwMDQwNkMKLToxMDA2RDAwMDhDODgwMDAwMzEwNDM4MDAxMDgwRkZGOTAwMDAwMDAwMTEKLToxMDA2RTAwMDI0MDIwMDAxMDNFMDAwMDhBQzYwMDA0NDNDMDM4MDAwRTkKLToxMDA2RjAwMDhDNjIwMUI4MDQ0MEZGRkUzNDY3MDE4MEFDRTQwMDAwNjYKLToxMDA3MDAwMDI0MDgwMDAxQUNFMDAwMDRBNEU1MDAwODI0MDUwMDAyNzAKLToxMDA3MTAwMEEwRTgwMDBBMzQ2NDAxNDBBMEU1MDAwQjk0ODMwMDBBQkQKLToxMDA3MjAwMDE0QzAwMDA4QTRFMzAwMTBBQ0UwMDAyNDNDMDc4MDAwRTMKLToxMDA3MzAwMDM0RTkwMTgwM0MwNDEwMDBBRDIwMDAyODAzRTAwMDA4RUIKLToxMDA3NDAwMEFDRTQwMUI4OEM4NjAwMDQzQzA0MTAwMEFDRTYwMDI0NDQKLToxMDA3NTAwMDNDMDc4MDAwMzRFOTAxODBBRDIwMDAyODAzRTAwMDA4NTgKLToxMDA3NjAwMEFDRTQwMUI4M0MwNjgwMDA4Q0MyMDFCODA0NDBGRkZFMzYKLToxMDA3NzAwMDM0QzcwMTgwMjQwOTAwMDJBQ0U0MDAwMEFDRTQwMDA0QUEKLToxMDA3ODAwMEE0RTUwMDA4QTBFOTAwMEEzNEM1MDE0MEEwRTkwMDBCNzcKLToxMDA3OTAwMDk0QTgwMDBBM0MwNDEwMDBBNEU4MDAxMEFDRTAwMDI0NzcKLToxMDA3QTAwMDhDQTMwMDA0QUNFMzAwMjgwM0UwMDAwOEFDQzQwMUI4NEIKLToxMDA3QjAwMDNDMDM5MDAwMzQ2MjAwMDEwMDgyMjAyNTNDMDM4MDAwNEQKLToxMDA3QzAwMEFDNjQwMDIwOEM2NTAwMjAwNEEwRkZGRTAwMDAwMDAwNDcKLToxMDA3RDAwMDAzRTAwMDA4MDAwMDAwMDAzQzAyODAwMDM0NDMwMDAxRjgKLToxMDA3RTAwMDAwODMyMDI1MDNFMDAwMDhBQzQ0MDAyMDI3QkRGRkUwODMKLToxMDA3RjAwMDNDMDk4MDAwQUZCRjAwMThBRkIxMDAxNEFGQjAwMDEwQ0IKLToxMDA4MDAwMDM1MjgwMTQwOEQxMDAwMDA5MTA0MDAwOTkxMDcwMDA4NkYKLToxMDA4MTAwMDkxMDUwMDA4MzA4NDAwRkYzMEU2MDBGRjAwMDYxQTAwNTIKLToxMDA4MjAwMDJDODIwMDgxMDA4MzMwMjUxMDQwMDAyQTMwQTUwMDgwRjIKLToxMDA4MzAwMDAwMDQ2MDgwM0MwRDA4MDEyNUFEOTBFODAxOEQ1ODIxMzEKLToxMDA4NDAwMDhENkEwMDAwMDE0MDAwMDgwMDAwMDAwMDNDMDM4MDAwQTkKLToxMDA4NTAwMDM0NjIwMTQwOTQ0NTAwMEExNEEwMDAxRThGOTFGQ0I4MzgKLToxMDA4NjAwMDkyMjcwMDA1MzBFNjAwMDQxNEMwMDAxQTAwMDAwMDAwQzIKLToxMDA4NzAwMDBFMDAxNUU1MDIwMDIwMjE5MjJBMDAwNTAyMDAyMDIxMjkKLToxMDA4ODAwMDM1NDkwMDA0MEUwMDE1RUZBMjI5MDAwNTkyMjgwMDA1NDUKLToxMDA4OTAwMDMxMDQwMDA0MTQ4MDAwMDIwMDAwMDAwMDAwMDAwMDBEN0MKLToxMDA4QTAwMDkyMkQwMDAwMjQwQjAwMjAzMUFDMDBGRjE1OEIwMDA5QjUKLToxMDA4QjAwMDNDMDU4MDAwOENBRTAxQjgwNUMwRkZGRTM0QjEwMTgwNUMKLToxMDA4QzAwMEFFMzAwMDAwM0MwRjEwMDAyNDEwMDAwNUEyMzAwMDBCRDkKLToxMDA4RDAwMEFDQUYwMUI4MDAwMDAwMEQ4RkJGMDAxODhGQjEwMDE0M0QKLToxMDA4RTAwMDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAyMDAyMDAyMDIxODcKLToxMDA4RjAwMDAwQzAyODIxOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwRTYKLToxMDA5MDAwMDI0MDYwMDAxMEEwMDE1QjQyN0JEMDAyMDAwMDAwMDBERDgKLToxMDA5MTAwMDAyMDAyMDIxMDBDMDI4MjE4RkJGMDAxODhGQjEwMDE0RDEKLToxMDA5MjAwMDhGQjAwMDEwMDAwMDMwMjEwQTAwMTVCNDI3QkQwMDIwNTAKLToxMDA5MzAwMDE0QTBGRkU4MDAwMDAwMDAwMjAwMjAyMThGQkYwMDE4NzMKLToxMDA5NDAwMDhGQjEwMDE0OEZCMDAwMTAwMEMwMjgyMTBBMDAxNUQyMEEKLToxMDA5NTAwMDI3QkQwMDIwM0MwNzgwMDA4Q0VFMDFCODA1QzBGRkZFREIKLToxMDA5NjAwMDM0RjAwMTgwMjQxRjAwMDJBMjFGMDAwQjM0RjgwMTQwNjQKLToxMDA5NzAwMEE2MDYwMDA4OTcxOTAwMEEzQzBGMTAwMEE2MTkwMDEwREYKLToxMDA5ODAwMDhGMTEwMDA0QTYxMTAwMTJBQ0VGMDFCODBBMDAxNjMwNTYKLToxMDA5OTAwMDhGQkYwMDE4MjdCREZGRThBRkJGMDAxMDBFMDAwRkQ0QjcKLToxMDA5QTAwMDAwMDAwMDAwM0MwMjgwMDA4RkJGMDAxMDAwMDAyMDIxRUEKLToxMDA5QjAwMEFDNDAwMTgwMEEwMDEwQTYyN0JEMDAxODMwODRGRkZGNUMKLToxMDA5QzAwMDMwQTVGRkZGMTA4MDAwMDcwMDAwMTgyMTMwODIwMDAxRDEKLToxMDA5RDAwMDEwNDAwMDAyMDAwNDIwNDIwMDY1MTgyMTE0ODBGRkZCMzMKLToxMDA5RTAwMDAwMDUyODQwMDNFMDAwMDgwMDYwMTAyMTEwQzAwMDA3NDcKLToxMDA5RjAwMDAwMDAwMDAwOENBMjAwMDAyNEM2RkZGRjI0QTUwMDA0MTQKLToxMDBBMDAwMEFDODIwMDAwMTRDMEZGRkIyNDg0MDAwNDAzRTAwMDA4NTMKLToxMDBBMTAwMDAwMDAwMDAwMTBBMDAwMDgyNEEzRkZGRkFDODYwMDAwMjcKLToxMDBBMjAwMDAwMDAwMDAwMDAwMDAwMDAyNDAyRkZGRjI0NjNGRkZGMUQKLToxMDBBMzAwMDE0NjJGRkZBMjQ4NDAwMDQwM0UwMDAwODAwMDAwMDAwQjAKLToxMDBBNDAwMDNDMDM4MDAwMjdCREZGRjgzNDYyMDE4MEFGQTIwMDAwQTQKLToxMDBBNTAwMDMwOEMwMEZGMzBBRDAwRkYzMENFMDBGRjNDMEI4MDAwM0IKLToxMDBBNjAwMDhENjQwMUI4MDQ4MEZGRkUwMDAwMDAwMDhGQTkwMDAwMjMKLToxMDBBNzAwMDhENjgwMTI4OEZBQTAwMDA4RkE3MDAwMDhGQTQwMDAwQjYKLToxMDBBODAwMDI0MDUwMDAxMjQwMjAwMDJBMDg1MDAwQThGQTMwMDAwQjMKLToxMDBBOTAwMDM1OTk0MDAwM0MwNTEwMDBBMDYyMDAwQjhGQjgwMDAwQTMKLToxMDBBQTAwMDhGQUMwMDAwOEZBNjAwMDA4RkFGMDAwMDI3QkQwMDA4QUMKLToxMDBBQjAwMEFEMjgwMDAwQUQ0MDAwMDRBRDgwMDAyNEFDQzAwMDI4OEIKLToxMDBBQzAwMEE0RjkwMDA4QTcwRDAwMTBBNUVFMDAxMjAzRTAwMDA4MkQKLToxMDBBRDAwMEFENjUwMUI4M0MwNjgwMDgyN0JERkZFODM0QzUwMDgwM0QKLToxMDBBRTAwMEFGQkYwMDEwOTBBNzAwMDkyNDAyMDAxMjMwRTMwMEZGRkUKLToxMDBBRjAwMDEwNjIwMDBCMDA4MDMwMjE4Q0E4MDA1MDAwODgyMDIzNTkKLToxMDBCMDAwMDA0ODAwMDA4OEZCRjAwMTA4Q0FBMDAzNDI0MDQwMDM5MzAKLToxMDBCMTAwMDAwMDAyODIxMDBDQTQ4MjMwNTIwMDAwNTI0MDYwMDEyRjEKLToxMDBCMjAwMDhGQkYwMDEwMjQwMjAwMDEwM0UwMDAwODI3QkQwMDE4NTkKLToxMDBCMzAwMDBFMDAxNjg5MDAwMDAwMDA4RkJGMDAxMDI0MDIwMDAxODMKLToxMDBCNDAwMDAzRTAwMDA4MjdCRDAwMTgyN0JERkZDOEFGQjIwMDMwODIKLToxMDBCNTAwMEFGQjAwMDI4QUZCRjAwMzRBRkIxMDAyQzAwQTA4MDIxOUYKLToxMDBCNjAwMDkwQTUwMDBEMzBBNjAwMTAxMEMwMDAxMDAwODA5MDIxNEMKLToxMDBCNzAwMDNDMDI4MDA4OEM0NDAwMDQ4RTAzMDAwODEwNjQwMDBDQzIKLToxMDBCODAwMDMwQTcwMDA1MzBBNjAwMDUxMEMwMDA5MzI0MDQwMDAxMjIKLToxMDBCOTAwMDhGQkYwMDM0OEZCMjAwMzA4RkIxMDAyQzhGQjAwMDI4OEYKLToxMDBCQTAwMDAwODAxMDIxMDNFMDAwMDgyN0JEMDAzODMwQTcwMDA1QjEKLToxMDBCQjAwMDEwRTAwMDBGMzBBQjAwMTIxMEMwMDAwNjI0MDQwMDAxNEEKLToxMDBCQzAwMDNDMDk4MDA4OEUwODAwMDg4RDI1MDAwNDUxMDUwMDlDMTIKLToxMDBCRDAwMDI0MDQwMDM4OEZCRjAwMzQ4RkIyMDAzMDhGQjEwMDJDNTYKLToxMDBCRTAwMDhGQjAwMDI4MDA4MDEwMjEwM0UwMDAwODI3QkQwMDM4RTYKLToxMDBCRjAwMDI0MEEwMDEyMTU2QUZGRTYyNDA0MDAwMTAyMDAyMDIxRTUKLToxMDBDMDAwMDI3QTUwMDEwMEUwMDBDQjZBRkEwMDAxMDE0NDAwMDdDMDkKLToxMDBDMTAwMDNDMTk4MDA4MzcyNDAwODA5MDk4MDAwODMzMTEwMDA4QTAKLToxMDBDMjAwMDEyMjAwMDBBOEZBNzAwMTAzMEZGMDEwMDEzRTAwMEE0N0IKLToxMDBDMzAwMDhGQTMwMDE0OEM4NjAwNTgwMDY2MTAyMzA0NDAwMDA0MjMKLToxMDBDNDAwMDNDMEE4MDA4QUM4MzAwNTg4RkE3MDAxMDNDMEE4MDA4M0IKLToxMDBDNTAwMDM1NDgwMDgwOTEwOTAwMDgzMTI0MDAwODE0ODAwMDAyMDIKLToxMDBDNjAwMDI0MDgwMDAzMDAwMDQwMjEzQzFGODAwODkzRjEwMDExN0MKLToxMDBDNzAwMDkzRjkwMDEyMzdFNjAwODA4Q0NDMDA1NDMzMzgwMEZGMjMKLToxMDBDODAwMDAzMDg3ODIxMzIyRDAwRkYwMDBGNzA4MDAxQUUyODIxNkIKLToxMDBDOTAwMDAwQUM1ODJCMTE2MDAwNkYwMDAwMDAwMDk0Q0EwMDVDOEIKLToxMDBDQTAwMDhDQzkwMDU0MzE0NEZGRkYwMTI1MTAyMzAwODIxODJCMEEKLToxMDBDQjAwMDE0NjAwMDY4MDAwMDAwMDA4Q0NCMDA1NDAxNjUxODIzMEMKLToxMDBDQzAwMDMwRUMwMDA0MTE4MDAwNkMwMDA4MzA4MDhGQTgwMDFDRkMKLToxMDBDRDAwMDAwNjgxMDJCMTA0MDAwNjIzMEVEMDAwNDAwNjYxMDIzMDUKLToxMDBDRTAwMDJDNDYwMDgwMTBDMDAwMDIwMDQwODgyMTI0MTEwMDgwQTIKLToxMDBDRjAwMDBFMDAxNUU1MDI0MDIwMjEzQzBEODAwODM1QTYwMDgwM0QKLToxMDBEMDAwMDI0MDcwMDAxQUNDNzAwMEM5MEM4MDAwODAwMTE0ODQwM0YKLToxMDBEMTAwMDM1QTcwMTAwMzEwQzAwN0ZBMENDMDAwODhFMDUwMDA0MkYKLToxMDBEMjAwMDI0QUIwMDAxQUNDQjAwMzBBNEQxMDA1QzhDQ0EwMDNDRTkKLToxMDBEMzAwMDk2MDIwMDBFMDE0MjIwMjFBQ0M0MDAyMDhDQzMwMDNDNkUKLToxMDBENDAwMDAwNjlGODIxQUNERjAwMUM4RTE5MDAwNEFDRjkwMDAwMkEKLToxMDBENTAwMDhFMTgwMDA4QUNGODAwMDQ4RkIxMDAxMDMyMkYwMDA4ODQKLToxMDBENjAwMDU1RTAwMDQ3OTNBNjAwMjBBMEMwMDA0RTkwRDgwMDRFNEEKLToxMDBENzAwMDI0MTFGRkRGQTBGODAwMDg5MENGMDAwODAxRjE3MDI0RDMKLToxMDBEODAwMEEwQ0UwMDA4OEUwNTAwMDgzQzBCODAwODM1NjkwMDgwNjUKLToxMDBEOTAwMEFEMjUwMDM4OEQ2QTAwMTQ4RDIyMDAzMDI0MTkwMDUwRDIKLToxMDBEQTAwMDAxNDIyMDIxQUQyNDAwMzQ5MTIzMDAwMDMwN0YwMEZGNTgKLToxMDBEQjAwMDEzRjkwMDM2MjY0RjAxMDAwRTAwMTVFRjAyNDAyMDIxRTYKLToxMDBEQzAwMDI0MDQwMDM4MDAwMDI4MjEwRTAwMTY4OTI0MDYwMDBBOTkKLToxMDBERDAwMDBBMDAxNkVFMjQwNDAwMDEwRTAwMEQyODAwMDAyMDIxNTgKLToxMDBERTAwMDhGQkYwMDM0OEZCMjAwMzA4RkIxMDAyQzhGQjAwMDI4M0QKLToxMDBERjAwMDAwNDAyMDIxMDA4MDEwMjEwM0UwMDAwODI3QkQwMDM4QkEKLToxMDBFMDAwMDhFMEUwMDA4M0MwRjgwMDgzNUYwMDA4MEFFMEUwMDU0QjYKLToxMDBFMTAwMDAyNDAyMDIxQUUwMDAwMzAwRTAwMTVFNTAwMDAwMDAwNjkKLToxMDBFMjAwMDkyMEQwMDI1MDI0MDIwMjEzNUFDMDAyMDBFMDAxNUVGNjgKLToxMDBFMzAwMEEyMEMwMDI1MEUwMDBDQUMwMjQwMjAyMTI0MDQwMDM4MzYKLToxMDBFNDAwMDI0MDUwMDhEMEUwMDE2ODkyNDA2MDAxMjBBMDAxNkVFRjUKLToxMDBFNTAwMDI0MDQwMDAxOTRDNTAwNUMwQTAwMTcyOTMwQTNGRkZGOTkKLToxMDBFNjAwMDI0MDcwMjE4MTFBMEZGOUUwMEU2MTAyMzhGQUUwMDFDN0QKLToxMDBFNzAwMDBBMDAxNzMxMDFDNjEwMjMwQTAwMTcyRTJDNjIwMjE4MkYKLToxMDBFODAwMEEwRTYwMDA4MEEwMDE3NUI4RTA1MDAwODI0MDZGRjgwMTQKLToxMDBFOTAwMDAxRTZDMDI0M0MxMTgwMDBBRTM4MDAyODhFMEQwMDA4MDkKLToxMDBFQTAwMDMxRTcwMDdGM0MwRTgwMEMwMEVFNjAyMUFEOEQwMEUwNEMKLToxMDBFQjAwMDhFMDgwMDA4QUY4QzAwMzQwQTAwMTc2N0FEODgwMEU0ODQKLToxMDBFQzAwMEFDODAwMDU4OTA4NTAwMDgyNDAzRkZGNzAwQTMzODI0NjUKLToxMDBFRDAwMEEwODcwMDA4MEEwMDE3MEM4RkE3MDAxMDNDMDUwODAwMjcKLToxMDBFRTAwMDI0QTU1RjA0M0MwNDA4MDAyNDg0NkU1MDNDMDIwODAwRTIKLToxMDBFRjAwMDI0NDI1RjBDMjQwMzAwMDYzQzAxMDgwMUFDMjU5NEY4NTEKLToxMDBGMDAwMDNDMDEwODAxQUMyNDk0RkMzQzAxMDgwMUFDMjI5NTAwOTIKLToxMDBGMTAwMDNDMDEwODAxQTAyMzk1MDQwM0UwMDAwODAwMDAwMDAwNDQKLToxMDBGMjAwMDAzRTAwMDA4MjQwMjAwMDEzQzAyODAwMDMwODgwMEZGM0EKLToxMDBGMzAwMDM0NDcwMTgwM0MwNjgwMDA4Q0MzMDFCODA0NjBGRkZFOEEKLToxMDBGNDAwMDAwMDAwMDAwOENDNTAxMjgyNDE4RkY4MDNDMEQ4MDBBOTkKLToxMDBGNTAwMDI0QUYwMTAwMDFGODcwMjQzMUVDMDA3RkFDQ0UwMDI0RjYKLToxMDBGNjAwMDAxOEQyMDIxQUNFNTAwMDA5NDhCMDBFQTM1MDk2MDAwN0EKLToxMDBGNzAwMDI0MDgwMDAyMzE2QUZGRkZBQ0VBMDAwNDI0MDIwMDAxRTkKLToxMDBGODAwMEE0RTkwMDA4QTBFODAwMEJBQ0UwMDAyNDNDMDcxMDAwMzYKLToxMDBGOTAwMEFDQzcwMUI4QUY4NDAwMzQwM0UwMDAwOEFGODUwMDY4MzcKLToxMDBGQTAwMDkzODgwMDQ0OEY4OTAwNUM4RjgyMDAzNDMwQzYwMEZGMzQKLToxMDBGQjAwMDAxMDkzODIzMzBFOTAwRkYwMTIyMTgyMTMwQTUwMEZGODQKLToxMDBGQzAwMDI0NjgwMDg4MTBDMDAwMDIwMTI0MzgyMTAwODAzODIxRTQKLToxMDBGRDAwMDMwRTQwMDAzMTQ4MDAwMDMzMEFBMDAwMzExNDAwMDBEMjgKLToxMDBGRTAwMDMxMkIwMDAzMTBBMDAwMDkwMDAwMTAyMTkwRUQwMDAwM0IKLToxMDBGRjAwMDI0NEUwMDAxMzFDMjAwRkYwMDQ1NjAyQkExMEQwMDAwMEUKLToxMDEwMDAwMDI0RTcwMDAxMTU4MEZGRjkyNTA4MDAwMTAzRTAwMDA4MkUKLToxMDEwMTAwMDAwMDAwMDAwMTU2MEZGRjMwMDAwMDAwMDEwQTBGRkZCQkYKLToxMDEwMjAwMDAwMDAxMDIxOENGODAwMDAyNDU5MDAwNDMzMjIwMEZGMzYKLToxMDEwMzAwMDAwNDU3ODJCQUQxODAwMDAyNEU3MDAwNDE1RTBGRkY5MDcKLToxMDEwNDAwMDI1MDgwMDA0MDNFMDAwMDgwMDAwMDAwMDkzODUwMDQ0MjgKLToxMDEwNTAwMDkzODgwMDU0OEY4NzAwNUMwMDA0MzIwMDMxMDMwMDdGQzYKLToxMDEwNjAwMDAwRTUxMDJCMzBDNDdGMDAxMDQwMDAwRjAwNjQyODI1REQKLToxMDEwNzAwMDhGODQwMDM0M0MwOTgwMDA4QzhBMDBFQ0FEMkEwMEE0RTcKLToxMDEwODAwMDNDMDM4MDAwMDBBMzU4MjVBQzZCMDBBMDhDNkMwMEEwMzIKLToxMDEwOTAwMDA1ODBGRkZFMDAwMDAwMDA4QzZEMDBBQ0FDOEQwMEVDMDQKLToxMDEwQTAwMDAzRTAwMDA4OEM2MjAwQTgwQTAwMTgxOThGODQwMDM0M0QKLToxMDEwQjAwMDkzODgwMDU1M0MwMjgwMDAwMDgwNTAyMTMxMDMwMEZFREYKLToxMDEwQzAwMEEzODMwMDU1MzBBQkZGRkYzMENDMDBGRjMwRTdGRkZGQkMKLToxMDEwRDAwMDM0NDgwMTgwM0MwOTgwMDA4RDI0MDFCODA0ODBGRkZFNjMKLToxMDEwRTAwMDhGOEQwMDY4MjQxODAwMTZBRDBEMDAwMDhEMjIwMTI0OUMKLToxMDEwRjAwMDhGOEQwMDM0QUQwMjAwMDQ4RDU5MDAyMEE1MDcwMDA4MzMKLToxMDExMDAwMDI0MDIwMUM0QTExOTAwMEFBMTE4MDAwQjk1MkYwMTIwODcKLToxMDExMTAwMDhENEUwMDA4OEQ0NzAwMDQ5NzgzMDA1ODhENTkwMDI0OTgKLToxMDExMjAwMDAxQ0YzMDIxMDBDNzI4MjEwMEEzMjAyMzI0MThGRkZGNkUKLToxMDExMzAwMEE1MDQwMDBDQTUwQjAwMEVBNTAyMDAxMEE1MEMwMDEyQzIKLToxMDExNDAwMEFEMTkwMDE4QUQxODAwMjQ5NUFGMDBFODNDMEIxMDAwNTUKLToxMDExNTAwMDI0MDdGRkY3MzFFRUZGRkZBRDBFMDAyODhEQUMwMDg0QjEKLToxMDExNjAwMEFEMEMwMDJDQUQyQjAxQjg4RDQ2MDAyMDAwQzcyODI0MDMKLToxMDExNzAwMDAzRTAwMDA4QUQ0NTAwMjA4Rjg4MDAzNDAwODA1ODIxMkUKLToxMDExODAwMDMwRTdGRkZGOTEwOTAwRDYzQzAyODAwMDMwQTVGRkZGNDkKLToxMDExOTAwMDMxMjQwMEZGMDAwNDFBMDAwMDY3NTAyNTMwQzYwMEZGMEMKLToxMDExQTAwMDM0NDcwMTgwM0MwOTgwMDA4RDJDMDFCODA1ODBGRkZFOEEKLToxMDExQjAwMDhGODIwMDY4MjQwRjAwMTdBQ0UyMDAwMDhEMzkwMTI0RjMKLToxMDExQzAwMEFDRjkwMDA0OEQ3ODAwMjBBNEVBMDAwODI0MTkwMUM0QjkKLToxMDExRDAwMEEwRjgwMDBBQTBFRjAwMEI5NTIzMDEyMDhENkUwMDA4RjcKLToxMDExRTAwMDhENkQwMDA0OTc4NDAwNTgwMUMzNTAyMTAxNEQ2MDIxOEEKLToxMDExRjAwMDAxODQxMDIzQTRFMjAwMENBNEU1MDAwRUE0RjkwMDEwNjEKLToxMDEyMDAwMEE0RTYwMDEyQUNFMDAwMTQ4RDc4MDAyNDI0MERGRkZGNEEKLToxMDEyMTAwMEFDRjgwMDE4OEQwRjAwN0NBQ0VGMDAxQzhEMEUwMDc4MzAKLToxMDEyMjAwMDNDMEYxMDAwQUNFRTAwMjBBQ0VEMDAyNDk1MEEwMEJFOEYKLToxMDEyMzAwMDI0MERGRkY3MzE0NkZGRkZBQ0U2MDAyODk1MEMwMDgwMzcKLToxMDEyNDAwMDk1MDQwMDgyMzE4MzdGRkYwMDAzQ0EwMDMwODJGRkZGRDQKLToxMDEyNTAwMDAzMjJDMDIxQUNGODAwMkNBRDJGMDFCODk1MEUwMDgyRkUKLToxMDEyNjAwMDhENkEwMDIwMDBBRTMwMjEwMTREMjgyNEE1MDYwMDgyQTEKLToxMDEyNzAwMDAzRTAwMDA4QUQ2NTAwMjAzQzAyODAwMDM0NDUwMTgwOTkKLToxMDEyODAwMDNDMDQ4MDAwOEM4MzAxQjgwNDYwRkZGRThGOEEwMDQwMUMKLToxMDEyOTAwMDI0MDYwMDE5OTU0OTAwMUMzMTI4RkZGRjAwMDgzOUMwQjkKLToxMDEyQTAwMEFDQTcwMDAwQTBBNjAwMEIzQzA1MTAwMDAzRTAwMDA4NUUKLToxMDEyQjAwMEFDODUwMUI4OEY4NzAwNDgwMDgwNDAyMTMwQzQwMEZGMTIKLToxMDEyQzAwMDNDMDY4MDAwOENDMjAxQjgwNDQwRkZGRThGODkwMDY4OTQKLToxMDEyRDAwMDkzODMwMDY0MzQ5OTYwMDBBQ0E5MDAwMEEwQTMwMDA1Q0EKLToxMDEyRTAwMDhDRTIwMDEwMjQwRjAwMDIyNDAzRkZGN0E0QTIwMDA2RTIKLToxMDEyRjAwMEE0QjkwMDA4OEQxODAwMjBBMEI4MDAwQUEwQUYwMDBCMDgKLToxMDEzMDAwMDhDRUUwMDAwQUNBRTAwMTA4Q0VEMDAwNEFDQUQwMDE0MEYKLToxMDEzMTAwMDhDRUMwMDFDQUNBQzAwMjQ4Q0VCMDAyMEFDQUIwMDI4QTcKLToxMDEzMjAwMDhDRUEwMDJDM0MwNzEwMDBBQ0FBMDAyQzhEMDkwMDI0OEMKLToxMDEzMzAwMEFDQTkwMDE4QUNDNzAxQjg4RDA1MDAyMDAwQTMyMDI0N0IKLToxMDEzNDAwMDAzRTAwMDA4QUQwNDAwMjA4Rjg2MDAzNDI3QkRGRkUwRDUKLToxMDEzNTAwMEFGQjEwMDE0QUZCRjAwMThBRkIwMDAxMDkwQzMwMEQ0RkQKLToxMDEzNjAwMDMwQTUwMEZGMzA2MjAwMjAxMDQwMDAwODAwODA4ODIxNzYKLToxMDEzNzAwMDhDQ0IwMEQwMjQwOUZGREYyNTZBMDAwMUFDQ0EwMEQwNjUKLToxMDEzODAwMDkwQzgwMEQ0MDEwOTM4MjRBMEM3MDBENDE0QTAwMDQwOUMKLToxMDEzOTAwMDNDMEM4MDAwOEY4NDAwMzQ5MDg3MDBENDI0MThGRkJGNTkKLToxMDEzQTAwMDI0MDZGRkVGMzBFMzAwN0ZBMDgzMDBENDk3OUYwMDU4MEUKLToxMDEzQjAwMDhGODIwMDVDOEY4RDAwMzQwM0UyQzgyM0E3OTkwMDU4MDgKLToxMDEzQzAwMEE1QTAwMEJDOTFBRjAwRDQwMUY4NzAyNEExQUUwMEQ0NTgKLToxMDEzRDAwMDhGOEMwMDM0QTE4MDAwRDc4RjhBMDAzNEE1NDAwMDgyMTIKLToxMDEzRTAwMEFENDAwMEVDOTE0NTAwRDQwMEE2NTgyNEExNEIwMEQ0OTgKLToxMDEzRjAwMDhGOTAwMDMwOEY4NDAwNUM5Nzg2MDA1ODAyMDQyODIxNkIKLToxMDE0MDAwMDEwQzAwMDBGQUY4NTAwMzBBMzgwMDA1NDNDMDc4MDAwNUYKLToxMDE0MTAwMDhFMkMwMDA4OTRFRDAxMjA4RTJCMDAwNDAxOEQ1MDIxQUMKLToxMDE0MjAwMDAxNEI4MDIxMDIwNjIwMjMzMDg2RkZGRjMwQzgwMDBGQzkKLToxMDE0MzAwMDM5MDkwMDAxMzEzMTAwMDExNjIwMDAwOUEzODgwMDU0NDgKLToxMDE0NDAwMDkzODYwMDQ0OEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwMzYKLToxMDE0NTAwMDI3QkQwMDIwQUY4NTAwNjAwM0UwMDAwOEFGODYwMDVDNzgKLToxMDE0NjAwMDAwQzg3MDIzOEZCRjAwMTg5Mzg2MDA0NDhGQjEwMDE0MEEKLToxMDE0NzAwMDhGQjAwMDEwMzRFRjBDMDAwMTBGMjgyMTI3QkQwMDIwOTEKLToxMDE0ODAwMEFDRUUwMDg0QUY4NTAwNjAwM0UwMDAwOEFGODYwMDVDMkUKLToxMDE0OTAwMDM1OTAwMTgwMDIwMDI4MjEwRTAwMThBNjI0MDYwMDgyNDMKLToxMDE0QTAwMDhGODQwMDM0OTA4NjAwRDQzMEM1MDA0MDUwQTBGRkJBMkQKLToxMDE0QjAwMEEzODAwMDY0OEY4NTAwNDgzQzA2ODAwMDhDQ0QwMUI4NzUKLToxMDE0QzAwMDA1QTBGRkZFOEY4OTAwNjgyNDA4NjA4MjI0MDcwMDAyQkYKLToxMDE0RDAwMEFFMDkwMDAwQTYwODAwMDhBMjA3MDAwQjhDQTMwMDA4QjQKLToxMDE0RTAwMDNDMEUxMDAwQUUwMzAwMTA4Q0EyMDAwQ0FFMDIwMDE0RTMKLToxMDE0RjAwMDhDQkYwMDE0QUUxRjAwMTg4Q0I5MDAxOEFFMTkwMDI0NjAKLToxMDE1MDAwMDhDQjgwMDI0QUUxODAwMjg4Q0FGMDAyOEFFMEYwMDJDMzkKLToxMDE1MTAwMEFDQ0UwMUI4MEEwMDE4REZBMzgwMDA2NDhGOEEwMDM0QzMKLToxMDE1MjAwMDI3QkRGRkUwQUZCMTAwMTRBRkIwMDAxMDhGODgwMDVDQTIKLToxMDE1MzAwMEFGQkYwMDE4OTM4OTAwMzg5NTQyMDBCQzMwRDEwMEZGM0UKLToxMDE1NDAwMDAxMDkxODJCMDA4MDgwMjEzMEFDMDBGRjMwNDdGRkZGREQKLToxMDE1NTAwMDAwMDA1ODIxMTQ2MDAwMDMzMTA2MDBGRjAxMjAzMDIxRjMKLToxMDE1NjAwMDAxMDk1ODIzOTc4MzAwNTgwMDY4MjAyQjE0ODAwMDI3MTYKLToxMDE1NzAwMDAwMDAwMDAwMTA2ODAwNTYyNDE5MDAwMTExOTkwMDYzNTIKLToxMDE1ODAwMDM0RTcwODgwMzE2NUZGRkYwRTAwMTg1NzAyMDAyMDIxNjQKLToxMDE1OTAwMDhGODMwMDY4M0MwNzgwMDAzNEU2MDE4MDNDMDU4MDAwQjIKLToxMDE1QTAwMDhDQUIwMUI4MDU2MEZGRkUyNDBBMDAxODhGODQwMDM0NUMKLToxMDE1QjAwMEFDQzMwMDAwQTBDQTAwMEI5NDg5MDBCRTNDMDgxMDAwMTgKLToxMDE1QzAwMEE0QzkwMDEwQUNDMDAwMzBBQ0E4MDFCODk0ODIwMDgwNUYKLToxMDE1RDAwMDI0NDMwMDAxQTQ4MzAwODA5NDlGMDA4MDNDMDYwODAwRkYKLToxMDE1RTAwMDhDQzYzMTg4MzNFQzdGRkYxMTg2MDA1RTAwMDAwMDAwNUUKLToxMDE1RjAwMDAyMDAyMDIxMDIyMDI4MjE4RkJGMDAxODhGQjEwMDE0ODMKLToxMDE2MDAwMDhGQjAwMDEwMEEwMDE4Q0IyN0JEMDAyMDkxNDQwMEQ0RjEKLToxMDE2MTAwMDI0MDNGRjgwMDA4Mzg4MjVBMTUxMDBENDk3ODQwMDU4QkIKLToxMDE2MjAwMDMwODhGRkZGNTEwMDAwMjM5MzhDMDAzODhGODUwMDM0RjEKLToxMDE2MzAwMDI0MDJFRkZGMDA4Qjc4MjM5NEFFMDBCQzAxNjg1MDJCOEUKLToxMDE2NDAwMDMxRTkwMEZGMDFDMjY4MjRBNEFEMDBCQzUxNDAwMDM5NUIKLToxMDE2NTAwMDAxMDA1ODIxM0MxRjgwMDAzN0U2MDEwMDhDRDgwMDA0QUYKLToxMDE2NjAwMDNDMTkwMDAxMDMxOTQwMjQ1NTAwMDAwMTM0RTc0MDAwRjMKLToxMDE2NzAwMDhFMEEwMDIwMjQwM0ZGRkIyNDExMDAwMTAxNDMyMDI0RDMKLToxMDE2ODAwMEFFMDQwMDIwMTE5MTAwMkQzNEU3ODAwMDAyMDAyMDIxREIKLToxMDE2OTAwMDAxMjAzMDIxMEUwMDE4NTczMTY1RkZGRjk3ODcwMDU4NTEKLToxMDE2QTAwMDhGODkwMDVDQTc4MDAwNTgwMTI3ODAyM0FGOTAwMDVDRTEKLToxMDE2QjAwMDkzOEMwMDM4OEY4QjAwMzQ4RkJGMDAxODhGQjEwMDE0Q0IKLToxMDE2QzAwMDhGQjAwMDEwMjdCRDAwMjAwM0UwMDAwOEExNkMwMEQ3RjgKLToxMDE2RDAwMDNDMEQ4MDAwMzVBQTAxMDA4RDQ4MDAwNDNDMDkwMDAxNDIKLToxMDE2RTAwMDAxMDkyODI0NTRBMDAwMDEzNEU3NDAwMDhFMEYwMDIwOTcKLToxMDE2RjAwMDI0MThGRkZCMzRFNzgwMDAwMUY4NzAyNDI0MTkwMDAxNEUKLToxMDE3MDAwMEFFMEUwMDIwMTU5OUZGOUYzNEU3MDg4MDAyMDAyMDIxQ0IKLToxMDE3MTAwMDBFMDAxODI1MzE2NUZGRkYwMjAwMjAyMTAyMjAyODIxM0MKLToxMDE3MjAwMDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDBBMDAxOENCQzMKLToxMDE3MzAwMDI3QkQwMDIwMEEwMDE5OEUwMDAwNDgyMTAyMDAyMDIxNDgKLToxMDE3NDAwMDAxMjAzMDIxMEUwMDE4MjUzMTY1RkZGRjk3ODcwMDU4RDIKLToxMDE3NTAwMDhGODkwMDVDQTc4MDAwNTgwMTI3ODAyMzBBMDAxOUE1MDMKLToxMDE3NjAwMEFGOTAwMDVDOTQ4QzAwODAyNDFGODAwMDAxOUYzMDI0ODcKLToxMDE3NzAwMEE0ODYwMDgwOTA4QjAwODA5MDhGMDA4MDMxNjcwMEZGRUUKLToxMDE3ODAwMDAwMDdDOUMyMDAxOUMwMjcwMDE4NzFDMDMxRUQwMDdGRTEKLToxMDE3OTAwMDAxQUUyODI1QTA4NTAwODAwQTAwMTk3NjAyMDAyMDIxQ0MKLToxMDE3QTAwMDkzODUwMDY0MjQwMzAwMDEyN0JERkZFODAwQTMzMDA0RjMKLToxMDE3QjAwMDJDQTIwMDIwQUZCMDAwMTBBRkJGMDAxNDAwQzAxODIxNTEKLToxMDE3QzAwMDEwNDAwMDEzMjQxMEZGRkUzQzA3MDgwMDhDRTczMTkwMDYKLToxMDE3RDAwMDAwRTYxMDI0M0MwODgwMDAzNTA1MDE4MDE0NDAwMDA1MTcKLToxMDE3RTAwMDI0MDYwMDg0OEY4OTAwMzQyNDBBMDAwNDI0MTBGRkZGOUIKLToxMDE3RjAwMEExMkEwMEZDMEUwMDE4QTYwMDAwMDAwMDAyMDAxMDIxMjMKLToxMDE4MDAwMDhGQkYwMDE0OEZCMDAwMTAwM0UwMDAwODI3QkQwMDE4NDAKLToxMDE4MTAwMDNDMDYwODAwOENDNjMxOTQwQTAwMTlFRTAwQzMxMDI0NUYKLToxMDE4MjAwMDhGODcwMDQwMjdCREZGRTBBRkIyMDAxOEFGQjEwMDE0QjIKLToxMDE4MzAwMEFGQjAwMDEwQUZCRjAwMUMzMEQwMDBGRjkwRTYwMDBEMkQKLToxMDE4NDAwMDAwQTA4ODIxMDA4MDkwMjEzMEM1MDA3RkEwRTUwMDBEMTgKLToxMDE4NTAwMDhGODUwMDM0OEUyMzAwMTg4Q0EyMDBEMDEwNjIwMDJFRDkKLToxMDE4NjAwMDI0MEEwMDBFMEUwMDE5RTFBMzhBMDA2NDI0MDlGRkZGNzgKLToxMDE4NzAwMDEwNDkwMDIyMjQwNEZGRkY1MjAwMDAyMDAwMDAyMDIxMTQKLToxMDE4ODAwMDhFMjYwMDAwM0MwQzAwMTAwMENDNTgyNDE1NjAwMDM5NTYKLToxMDE4OTAwMDNDMEUwMDA4MDBDRTY4MjQ1NUEwMDAzRjAyNDAyMDIxRTUKLToxMDE4QTAwMDNDMTgwMDAyMDBEODgwMjQxMjAwMDAxRjNDMEEwMDA0RUIKLToxMDE4QjAwMDhGODcwMDQwOENFMjAwMTQ4Q0UzMDAxMDhDRTUwMDE0NEMKLToxMDE4QzAwMDAwNDNGODIzMDNFNUM4MkIxMzIwMDAwNTAyNDAyMDIxMjQKLToxMDE4RDAwMDhFMjQwMDJDOENGMTAwMTAxMDkxMDAzMTAyNDAyMDIxNDgKLToxMDE4RTAwMDI0MDIwMDEyQTM4MjAwNjQwRTAwMTlFMTI0MTJGRkZGRkIKLToxMDE4RjAwMDEwNTIwMDAyMjQwNEZGRkYwMDAwMjAyMThGQkYwMDFDQjMKLToxMDE5MDAwMDhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDAwODAxMDIxMkEKLToxMDE5MTAwMDAzRTAwMDA4MjdCRDAwMjA5MEE4MDBENDM1MDQwMDIwNzMKLToxMDE5MjAwMDBBMDAxQTE3QTBBNDAwRDQwMENBNDgyNDE1MjAwMDBCRUUKLToxMDE5MzAwMDhGOEIwMDQwOEY4RDAwNDA4REFDMDAxMDE1ODAwMDBCMDgKLToxMDE5NDAwMDAyNDAyMDIxOEUyRTAwMkM1MUMwRkZFQzAwMDAyMDIxRUYKLToxMDE5NTAwMDAyNDAyMDIxMEEwMDFBMzIyNDAyMDAxNzhENjYwMDEwNkUKLToxMDE5NjAwMDUwQzBGRkU2MDAwMDIwMjEwMjQwMjAyMTBBMDAxQTMyNjgKLToxMDE5NzAwMDI0MDIwMDExMDI0MDIwMjEyNDAyMDAxNTBFMDAxOUUxNkEKLToxMDE5ODAwMEEzODIwMDY0MjQwRkZGRkYxMDRGRkZEQzI0MDRGRkZGM0QKLToxMDE5OTAwMDBBMDAxQTIxOEUyNjAwMDAwQTAwMUE1ODI0MDIwMDE0OTgKLToxMDE5QTAwMDNDMDgwMDA0MDBDODM4MjQ1MEUwRkZENDAwMDAyMDIxODcKLToxMDE5QjAwMDAyNDAyMDIxMEEwMDFBMzIyNDAyMDAxMzhGODUwMDM0Q0QKLToxMDE5QzAwMDI3QkRGRkQ4QUZCMzAwMUNBRkIyMDAxOEFGQjEwMDE0RjEKLToxMDE5RDAwMEFGQjAwMDEwQUZCRjAwMjA5MEE3MDBENDhGOTAwMDQ4OTgKLToxMDE5RTAwMDI0MTJGRkZGMzRFMjAwNDA5MjA2MDAwMEEwQTIwMEQ0QkYKLToxMDE5RjAwMDhFMDMwMDEwMDA4MDk4MjExMDcyMDAwNjMwRDEwMDNGNDUKLToxMDFBMDAwMDI0MDgwMDBEMEUwMDE5RTFBMzg4MDA2NDEwNTIwMDI1N0YKLToxMDFBMTAwMDI0MDRGRkZGOEY4QTAwMzQ4RTA5MDAxODhENDQwMEQwMDMKLToxMDFBMjAwMDExMjQwMDA3MDI2MDIwMjEyNDBDMDAwRTBFMDAxOUUxOTEKLToxMDFBMzAwMEEzOEMwMDY0MjQwQkZGRkYxMDRCMDAxQTI0MDRGRkZGNEIKLToxMDFBNDAwMDI0MDQwMDIwMTIyNDAwMDQ4RjhEMDAzNDkxQUYwMEQ0QjAKLToxMDFBNTAwMDM1RUUwMDIwQTFBRTAwRDQ4Rjg1MDA1MDEwQTAwMDE5RjMKLToxMDFBNjAwMDAwMDAwMDAwMTIyNDAwNEE4Rjk4MDAzNDhGOTJGQ0I4QzYKLToxMDFBNzAwMDk3MTAwMDgwOTY1MTAwMEE1MjMwMDA0ODhGOTMwMDNDMjYKLToxMDFBODAwMDNDMUYwODAwOEZGRjMxOEMwM0U1QzgyQjE3MjAwMDFFNzgKLToxMDFBOTAwMDAyNjAyMDIxMDAwMDI4MjEwRTAwMTk0MDI0MDYwMDAxQzgKLToxMDFBQTAwMDAwMDAyMDIxOEZCRjAwMjA4RkIzMDAxQzhGQjIwMDE4RDAKLToxMDFBQjAwMDhGQjEwMDE0OEZCMDAwMTAwMDgwMTAyMTAzRTAwMDA4RTcKLToxMDFBQzAwMDI3QkQwMDI4NTIyNDAwMkE4RTA1MDAxNDhGODQwMDM0N0MKLToxMDFBRDAwMDk0OEEwMDgwMjU0OTAwMDFBNDg5MDA4MDk0ODgwMDgwQjAKLToxMDFBRTAwMDNDMDIwODAwOEM0MjMxODgzMTA3N0ZGRjEwRTIwMDBFNzMKLToxMDFBRjAwMDAwMDAwMDAwMDI2MDIwMjEwRTAwMThDQjI0MDUwMDAxMjgKLToxMDFCMDAwMDBBMDAxQUEyMDAwMDIwMjEyNDAyMDAyRDBFMDAxOUUxNzMKLToxMDFCMTAwMEEzODIwMDY0MjQwM0ZGRkYxNDQzRkZFMTI0MDRGRkZGQkEKLToxMDFCMjAwMDBBMDAxQUEzOEZCRjAwMjA5NDk5MDA4MDI0MUY4MDAwMTAKLToxMDFCMzAwMDI0MDUwMDAxMDMzRkMwMjRBNDk4MDA4MDkwOTIwMDgwRjcKLToxMDFCNDAwMDkwOEUwMDgwMzI1MTAwRkYwMDExODFDMjAwMTA3ODI3NzIKLToxMDFCNTAwMDAwMEY2OUMwMzFDQzAwN0YwMThENTgyNUEwOEIwMDgwMUIKLToxMDFCNjAwMDBFMDAxOENCMDI2MDIwMjEwQTAwMUFBMjAwMDAyMDIxREEKLToxMDFCNzAwMDI0MDZGRkZGNTRBNkZGRDY4Rjg0MDAzNDAyNjAyMDIxODQKLToxMDFCODAwMDBFMDAxOENCMjQwNTAwMDEwQTAwMUFBMjAwMDAyMDIxMzMKLToxMDFCOTAwMDAyNjAyMDIxMEEwMDFBQkMyNDAyMDAwQTI0MDRGRkZENkUKLToxMDFCQTAwMDBBMDAxQUEyQUY5MzAwNUM4Rjg4MDAzNDI3QkRGRkU4QkIKLToxMDFCQjAwMEFGQjAwMDEwQUZCRjAwMTQ5MTBBMDBENDhGODcwMDQ4NjcKLToxMDFCQzAwMDAwODA4MDIxMzU0OTAwNDA4Q0U2MDAxMEExMDkwMEQ0MzYKLToxMDFCRDAwMDNDMDIwODAwOEM0MjMxQjAzMEM1M0ZGRjAwQTIxODJCRjgKLToxMDFCRTAwMDEwNjAwMDA3OEY4NTAwNEMyNDBERkY4MDkwQUUwMDBEMjMKLToxMDFCRjAwMDAxQUU2MDI0MzE4QjAwRkYxNTYwMDAwODAwMDZDMzgyMkYKLToxMDFDMDAwMDAyMDAyMDIxMjQwMzAwMEQ4RkJGMDAxNDhGQjAwMDEwQUMKLToxMDFDMTAwMDI3QkQwMDE4MEEwMDE5RTFBMzgzMDA2NDMzMDYwMDAzRkUKLToxMDFDMjAwMDI0MEYwMDAyNTRDRkZGRjcwMjAwMjAyMTk0QTIwMDFDRDEKLToxMDFDMzAwMDhGODUwMDM0MjQxOTAwMjNBNEEyMDBFODhDRTgwMDAwNUEKLToxMDFDNDAwMDAwMDgxRTAyMzA3RjAwM0YxM0Y5MDAzNTNDMEEwMDgzNzQKLToxMDFDNTAwMDhDRTgwMDE4OENBNjAwRDAxMTA2MDAwODAwMDAwMDAwRDcKLToxMDFDNjAwMDI0MDUwMDBFMEUwMDE5RTFBMzg1MDA2NDI0MDdGRkZGODAKLToxMDFDNzAwMDEwNDcwMDE4MjQwNEZGRkY4Rjg1MDAzNDkwQTkwMEQ0N0EKLToxMDFDODAwMDM1MjQwMDIwQTBBNDAwRDQ4RjhDMDA0MDkxOEUwMDBEM0MKLToxMDFDOTAwMDMxQ0QwMDdGQTE4RDAwMEQ4RjgzMDA1MDEwNjAwMDFDOUUKLToxMDFDQTAwMDAyMDAyMDIxOEY4NDAwNEM4Qzk4MDAxMDAzMDM3ODJCQjUKLToxMDFDQjAwMDExRTAwMDBEMjQxOTAwMTgwMjAwMjAyMUEzOTkwMDY0RUUKLToxMDFDQzAwMDBFMDAxOUUxMjQxMEZGRkYxMDUwMDAwMjI0MDRGRkZGNTIKLToxMDFDRDAwMDAwMDAyMDIxOEZCRjAwMTQ4RkIwMDAxMDAwODAxMDIxNjEKLToxMDFDRTAwMDAzRTAwMDA4MjdCRDAwMTg4Qzg2MDAxMDhGOUYwMDQwN0QKLToxMDFDRjAwMDAyMDAyMDIxMDBDMzEwMjNBRkUyMDAxMDI0MDUwMDAxRTAKLToxMDFEMDAwMDBFMDAxOTQwMjQwNjAwMDEwQTAwMUIyRTAwMDAyMDIxQUQKLToxMDFEMTAwMDBFMDAxOENCMjQwNTAwMDEwQTAwMUIyRTAwMDAyMDIxMTQKLToxMDFEMjAwMDAxMEE1ODI0MTU2QUZGRDk4RjhDMDA0MEEwQTYwMEZDMzgKLToxMDFEMzAwMDBBMDAxQjFCQTM4NjAwNTYzMEE1MDBGRjI0MDYwMDAxRTUKLToxMDFENDAwMDI0QTkwMDAxMDBDOTEwMkIxMDQwMDAwQzAwMDA0MDIxMDQKLToxMDFENTAwMDI0MEEwMDAxMDBBNjE4MjMzMDhCMDAwMTI0QzYwMDAxQ0MKLToxMDFENjAwMDAwNkEzODA0MDAwNDIwNDIxMTYwMDAwMjAwQzkxODJCRTgKLToxMDFENzAwMDAxMDc0MDI1MTQ2MEZGRjgwMEE2MTgyMzAzRTAwMDA4QkYKLToxMDFEODAwMDAxMDAxMDIxMjdCREZGRDhBRkIwMDAxODhGOTAwMDQ4ODgKLToxMDFEOTAwMEFGQjEwMDFDQUZCRjAwMjAyNDAzRkZGRjI0MTEwMDJGQjAKLToxMDFEQTAwMEFGQTMwMDEwOTIwNjAwMDAyNDA1MDAwODI2MTAwMDAxRDEKLToxMDFEQjAwMDAwNjYyMDI2MEUwMDFCNDczMDg0MDBGRjAwMDIxRTAwMzQKLToxMDFEQzAwMDNDMDIxRURDMzQ0NjZGNDEwQTAwMUI2RjAwMDAxMDIxRUMKLToxMDFERDAwMDEwQTAwMDA5MDA4MDE4MjEyNDQ1MDAwMTMwQTJGRkZGNTcKLToxMDFERTAwMDJDNDUwMDA4MDQ2MUZGRkEwMDAzMjA0MDAwODYyMDI2RUQKLToxMDFERjAwMDE0QTBGRkY5MDA4MDE4MjEwRTAwMUI0NzI0MDUwMDIwQzUKLToxMDFFMDAwMDhGQTMwMDEwMjYyOUZGRkYzMTMxMDBGRjAwMDM0MjAyOUIKLToxMDFFMTAwMDI0MDcwMEZGMTYyN0ZGRTIwMTAyMTgyNjAwMDM1MDI3QkYKLToxMDFFMjAwMEFGQUEwMDE0QUZBQTAwMTAwMDAwMzAyMTI3QTgwMDEwQUMKLToxMDFFMzAwMDI3QTcwMDE0MDBFNjc4MjM5MUVEMDAwMzI0Q0UwMDAxQ0IKLToxMDFFNDAwMDAwQzg2MDIxMzFDNjAwRkYyQ0NCMDAwNDE1NjBGRkY5RUIKLToxMDFFNTAwMEExOEQwMDAwOEZBMjAwMTA4RkJGMDAyMDhGQjEwMDFDNDkKLToxMDFFNjAwMDhGQjAwMDE4MDNFMDAwMDgyN0JEMDAyODI3QkRGRkQwNzEKLToxMDFFNzAwMEFGQjMwMDFDQUZCMDAwMTBBRkJGMDAyOEFGQjUwMDI0NTcKLToxMDFFODAwMEFGQjQwMDIwQUZCMjAwMThBRkIxMDAxNDNDMEM4MDAwMUEKLToxMDFFOTAwMDhEODgwMTI4MjQwRkZGODAzQzA2ODAwQTI1MTAwMTAwNTAKLToxMDFFQTAwMDI1MEIwMDgwMDIwRjY4MjQzMjA1MDA3RjAxNkY3MDI0MkIKLToxMDFFQjAwMEFEOEUwMDkwMDBBNjI4MjFBRDhEMDAyNDkwQTYwMEZDRDgKLToxMDFFQzAwMDMxNjkwMDdGM0MwQTgwMDQwMTJBMTgyMUEzODYwMDU2NEMKLToxMDFFRDAwMDkwNjcwMDdDMDA4MDk4MjFBRjgzMDAyQzMwRTIwMDAyRTQKLToxMDFFRTAwMEFGODgwMDY4QUY4NTAwMzQwMEEwMTgyMTE0NDAwMDAyQkMKLToxMDFFRjAwMDI0MDQwMDM0MjQwNDAwMzBBMzg0MDA0NDhDNzIwMERDRTkKLToxMDFGMDAwMDMwRDEwMEZGMjQwNDAwMDRBRjkyMDA1QzEyMjQwMDA0Q0UKLToxMDFGMTAwMEEzODAwMDY0OEU3NDAwMDQxNjgwMDAxRTNDMDg4MDAwQkMKLToxMDFGMjAwMDkzODYwMDU1MzBDNzAwMDE1MEUwMDAwRjhGODYwMDVDOUIKLToxMDFGMzAwMDhDQTQwMDg0OENBODAwODQyNDEzRkY4MDAwOTM2MDI0NjgKLToxMDFGNDAwMDAwMEM0OTQwMzExMDAwN0YwMTMwNzgyNTNDMTkyMDAwRjkKLToxMDFGNTAwMDAxRjk2ODI1MzBERjAwRkUzQzAzODAwMEFDNkQwODMwREQKLToxMDFGNjAwMEEzOUYwMDU1OEY4NjAwNUM4RkJGMDAyODhGQjUwMDI0OEIKLToxMDFGNzAwMDhGQjQwMDIwOEZCMzAwMUM4RkIyMDAxODhGQjEwMDE0RjMKLToxMDFGODAwMDhGQjAwMDEwMjQwMjAwMDEyN0JEMDAzMDAzRTAwMDA4REMKLToxMDFGOTAwMEFDQTYwMERDOEU3RjAwMDg5NTAyMDEyMDhFNjcwMDEwNDEKLToxMDFGQTAwMDAzRTJDODIxMzMyNkZGRkYzMEQ4MDAwRjMzMTUwMDAxQUMKLToxMDFGQjAwMEFGODcwMDMwMTZBMDAwNThBMzk4MDA1NDM1MDkwQzAwRDQKLToxMDFGQzAwMDAzMDkzODIxMDBEODE4MjNBRDAzMDA4NEFGODcwMDYwQ0YKLToxMDFGRDAwMDhFNkEwMDA0MzE0OEZGRkYxMTAwMDA3RUE3OEEwMDU4NzYKLToxMDFGRTAwMDkwQUMwMEQ0MjQwN0ZGODAwMEVDMzAyNDMwQ0IwMEZGRkQKLToxMDFGRjAwMDE1NjAwMDRCOTc4NjAwNTg5MzhFMDA1NjI0MEQwMDAyMDIKLToxMDIwMDAwMDMwRDVGRkZGMTFDRDAyQTIwMDAwQTAyMThGODUwMDVDMUEKLToxMDIwMTAwMDAyQTU4MDJCMTYwMDAwQkM5Mzg4MDA0NDNDMTE4MDAwNzAKLToxMDIwMjAwMDk2MjQwMTIwMzEwNDAwRkYxNDg1MDA4ODhGODQwMDYwMEQKLToxMDIwMzAwMDhGOTgwMDMwMzMxMjAwMDM1NjQwMDA4NTMwQTUwMEZGMTIKLToxMDIwNDAwMDhGOTAwMDYwMzEwQzAwRkYyNDA2MDAzNDExODYwMDk1NEIKLToxMDIwNTAwMEFGOTAwMDQ4OTIwNDAwMDQxNDgwMDExOThGOEUwMDM0NjAKLToxMDIwNjAwMEEzODAwMDM4OEUwRDAwMDQ4REM4MDBEODNDMDYwMEZGMDgKLToxMDIwNzAwMDM0Q0NGRkZGMDFBQzMwMjQwMTA2MTgyQjE0NjAwMTIxODEKLToxMDIwODAwMEFGODYwMDUwOEY4NzAwNUM5Nzk4MDA1OEFGODcwMDNDNjAKLToxMDIwOTAwMDAzMDc0MDIzMTBDMDAwQzdBNzg4MDA1ODhGOTEwMDJDNjkKLToxMDIwQTAwMDMwQzMwMDAzMDAwMzU4MjM5MjJBMDA3QzMxNzEwMDAzREYKLToxMDIwQjAwMDAyMjYxMDIxMDAwQTIwODIzMDkyMDAwMTAwMTI0ODgwN0UKLToxMDIwQzAwMDAwNDkyODIxMzExRkZGRkYwM0U1QzgyQjEzMjAwMTIwMDEKLToxMDIwRDAwMDhGODgwMDM0OEY4NTAwMzA4Rjg4MDA2MDExMDUwMjVBODgKLToxMDIwRTAwMDNDMEUzRjAxOEUwNjAwMDAzQzBDMjUwMDAwQ0U2ODI0MEIKLToxMDIwRjAwMDExQUMwMTYzOEY4NDAwNDgzMEU1MDBGRjBFMDAxN0UxNEEKLToxMDIxMDAwMDAwMDAzMDIxOEY4ODAwMzQ4Rjg3MDA1QzhGODUwMDMwN0QKLToxMDIxMTAwMDBBMDAxRDRFOEY4NjAwNTAwQTAwMUJFREFGODcwMDYwM0QKLToxMDIxMjAwMDkwQUMwMEQ0MDBFQzIwMjQzMDkwMDBGRjEyMDAwMDE2ODgKLToxMDIxMzAwMDkzODYwMDU1OTBCNTAwODg5MEI0MDBENzI0QTgwMDg4RjUKLToxMDIxNDAwMDMyQTIwMDNGMjQ0NkZGRTAyQ0QxMDAyMEEzOTQwMDM4QTcKLToxMDIxNTAwMDEyMjAwMDBDQUY4ODAwNDgyNDBFMDAwMTAwQ0UyMDA0OUQKLToxMDIxNjAwMDMwOEEwMDE5MTU0MDAxMkIzQzA2ODAwMDM0RDgwMDAyNEIKLToxMDIxNzAwMDAwOTg1ODI0MTU2MDAyMkUzMDkyMDAyMDE2NDAwMjM0MzgKLToxMDIxODAwMDAwMDAwMDAwOTM4NjAwNTUzMENFMDAwMTExQzAwMDBGMDIKLToxMDIxOTAwMDk3ODgwMDU4OENBOTAwODQ4Q0FGMDA4NDI0MTBGRjgwOUQKLToxMDIxQTAwMDAxMzBDODI0MDAxOTE5NDAzMUVEMDA3RjAwNkQzODI1MzkKLToxMDIxQjAwMDNDMUYyMDAwMDBGRjkwMjUzMENCMDBGRTNDMTg4MDAwMjMKLToxMDIxQzAwMEFGMTIwODMwQTM4QjAwNTU5Nzg4MDA1ODE1MDBGRjg0ODQKLToxMDIxRDAwMDAwMDAwMDAwOEU2MzAwMjAzMDZDMDAwNDExODBGRjUxNkQKLToxMDIxRTAwMDkzODYwMDU1MjQwNEZGRkIwMDY0MzAyNDNDMDM4MDAwRTgKLToxMDIxRjAwMEFFNjYwMDIwMzQ2NjAxODA4QzczMDFCODA2NjBGRkZFNzUKLToxMDIyMDAwMDhGOEUwMDY4MzQ2QTAxMDAzQzE1MDAwMUFDQ0UwMDAwREUKLToxMDIyMTAwMDhDNjIwMTI0MjQwNzYwODVBQ0MyMDAwNDhENTQwMDA0NDQKLToxMDIyMjAwMDAyOTU4ODI0NTIyMDAwMDEyNDA3NjA4MzI0MTIwMDAyQjIKLToxMDIyMzAwMDNDMTgxMDAwM0MwQjgwMDBBNEM3MDAwOEEwRDIwMDBCODMKLToxMDIyNDAwMEFENzgwMUI4MEEwMDFCQzI5Mzg2MDA1NTMwQTUwMEZGODcKLToxMDIyNTAwMDBFMDAxN0UxMjQwNjAwMDE4Rjg4MDA2ODNDMDU4MDAwMEQKLToxMDIyNjAwMDM0QTkwOTAwMjUwMjAxODg5Mzg4MDA0NDMwNEEwMDA3RjgKLToxMDIyNzAwMDMwNEIwMDc4M0MwMzQwODAyNDA3RkY4MDAxNjNDODI1NzEKLToxMDIyODAwMDAxNDk4MDIxMDA0N0Y4MjQzMTBDMDBGRjI0MDYwMDM0NjYKLToxMDIyOTAwMEFDQkYwODAwQUY5MDAwNDhBQ0I5MDgxMDU1ODZGRjZFN0YKLToxMDIyQTAwMDkyMDQwMDA0OEY4NDAwMzQ4RTExMDAzMDkwOEUwMEQ0OEMKLToxMDIyQjAwMDMxQ0QwMDEwMTVBMDAwMTA4RjgzMDA1QzJDNkYwMDA1M0QKLToxMDIyQzAwMDE1RTAwMEU0MDAwMDAwMDA5MDk4MDBENDI0NjVGRkZDQjUKLToxMDIyRDAwMDMzMTIwMDEwMTY0MDAwMDgzMEE0MDBGRjhGOUYwMDYwRUEKLToxMDIyRTAwMDhGOTkwMDMwMTNGOTAwMDQzODg3MDAwMTMwRTIwMDAxQjMKLToxMDIyRjAwMDE0NDAwMUM4MDAwMDAwMDAwRTAwMUI1QTAwMDAwMDAwM0UKLToxMDIzMDAwMDBBMDAxRDhGMDAwMDAwMDA4Rjg0MDA2MDMwQzUwMEZGQjAKLToxMDIzMTAwMDBFMDAxN0UxMjQwNjAwMDE5MzhFMDA0NDI0MEEwMDM0QzUKLToxMDIzMjAwMDExQ0EwMEEwOEY4NTAwMzQ4Rjg2MDA1Qzk3ODMwMDU4MDcKLToxMDIzMzAwMDMwNjJGRkZGMDBDMjg4MjNBRjkxMDA1Q0E3ODAwMDU4ODUKLToxMDIzNDAwMDEyODBGRjkwMDI4MDE4MjEyNDE0RkZGRDU0NzRGRkEyMTQKLToxMDIzNTAwMDhFNjMwMDIwOEU2OTAwMDQyNDAzRkZCRjI0MEJGRkVGNkYKLToxMDIzNjAwMDAxMzVDODIzQUU3OTAwMDQ5MEFGMDBENDMxRUQwMDdGNzEKLToxMDIzNzAwMEEwQUQwMEQ0OEU2NjAwMjA4Rjk4MDAzNEE3ODAwMDU4NEUKLToxMDIzODAwMDM0REYwMDAyQUU3RjAwMjBBNzAwMDBCQzkzMTIwMEQ0MEYKLToxMDIzOTAwMDAyNDM0MDI0QTMwODAwRDQ4Rjk1MDAzNEFFQTAwMEVDODMKLToxMDIzQTAwMDkyQUUwMEQ0MDFDQjUwMjRBMkFBMDBENDBBMDAxQzZFMjUKLToxMDIzQjAwMDhGODUwMDM0OEY5MTAwMzBBRjgwMDA1QzAyMjc1ODIxNTgKLToxMDIzQzAwMEFGOEIwMDMwMDAwMDIwMjEyNDAzRkZGRjEwODMwMUI0RjUKLToxMDIzRDAwMDhGODUwMDM0OEUwQzAwMTAzQzBEMDgwMDhEQUQzMUIwOUYKLToxMDIzRTAwMDkyMDgwMDAwMzE4NDNGRkYwMDhEODAyQjEyMDAwMDIzRjMKLToxMDIzRjAwMDMxMEQwMDNGM0MxOTA4MDA4RjM5MzFBODhGOUYwMDY4Q0MKLToxMDI0MDAwMDAwMDQ3OTgwMjQwOEZGODAwMzNGMjAyMTAwOEZDODIxMjkKLToxMDI0MTAwMDkzODUwMDU1MDMyOEY4MjQzQzA2MDA4MDNDMEY4MDAwN0IKLToxMDI0MjAwMDM0RDgwMDAxMDAxRjkxNDAzMzMxMDA3RjhGODYwMDM0ODMKLToxMDI0MzAwMDAyNTE1MDI1MzVFRTA5NDAzMzJCMDA3ODMzMzAwMDA3MjgKLToxMDI0NDAwMDNDMDMxMDAwM0MwMjgwMEMwMTc4OTAyNTAyMEU0ODIxQ0MKLToxMDI0NTAwMDAxNDNDMDI1MDIyMjM4MjEzNEFFMDAwMUFERkYwODA0M0IKLToxMDI0NjAwMEFGODkwMDRDQURGMjA4MTRBRjg3MDA0MEFERkYwMDI4RTMKLToxMDI0NzAwMEFDRDkwMDg0QURGODA4MzBBMzhFMDA1NTkzODMwMDU2ODQKLToxMDI0ODAwMDI0MDcwMDAzNTA2NzAwMjgyNUEzRkZFMDI0MEMwMDAxNjcKLToxMDI0OTAwMDE0NkNGRkFCOEY4NTAwMzQyNDExMDAyMzExQjEwMDg0MkMKLToxMDI0QTAwMDAwMDAwMDAwMjQwMjAwMEIwMjYwMjAyMTBFMDAxOUUxNTAKLToxMDI0QjAwMEEzODIwMDY0MDA0MEEwMjEwQTAwMUNDOThGODUwMDM0NUIKLToxMDI0QzAwMDAyNjAyMDIxMjQwQjAwMEMwRTAwMTlFMUEzOEIwMDY0OTQKLToxMDI0RDAwMDI0MEFGRkZGMTA0QUZGQkMyNDA0RkZGRjhGOEUwMDM0NDQKLToxMDI0RTAwMEEzODAwMDM4OEUwRDAwMDQ4REM4MDBEODNDMDYwMEZGODQKLToxMDI0RjAwMDM0Q0NGRkZGMDFBQzMwMjQwMTA2MTgyQjEwNjBGRUUxNDQKLToxMDI1MDAwMEFGODYwMDUwMDI2MDIwMjEyNDEyMDAxOTBFMDAxOUUxNEMKLToxMDI1MTAwMEEzOTIwMDY0MjQwRkZGRkYxMDRGRkZBQjI0MDRGRkZGQzIKLToxMDI1MjAwMDBBMDAxQzFBOEY4NjAwNTAyQzc0MDAyMDEyODBGRkRFRDcKLToxMDI1MzAwMDI0MDIwMDBCMDAwMzI4ODAzQzExMDgwMTI2MzE5MkVDOTQKLToxMDI1NDAwMDAwQjE0ODIxOEQyRDAwMDAwMUEwMDAwODAwMDAwMDAwMEUKLToxMDI1NTAwMDhGODUwMDMwMDBBNzEwMjE5Mzg1MDAzOEFGODIwMDMwQUUKLToxMDI1NjAwMDAyMjUxODIxQTM4MzAwMzg5NTFGMDBCQzAyMjYyODIxQ0MKLToxMDI1NzAwMDM3RjkxMDAwQTUxOTAwQkM1MjQwRkY5MkFGODUwMDVDRUUKLToxMDI1ODAwMDI0NkEwMDA0QTM4QTAwMzg5NTA5MDBCQzI0QTQwMDA0MkUKLToxMDI1OTAwMEFGODQwMDVDMzUzMjIwMDBBNTEyMDBCQzBBMDAxQ0VCQTEKLToxMDI1QTAwMDAwMDAyMDIxOEY4NjAwNUMyQ0NCMDAwNTE1NjBGRjYwQTkKLToxMDI1QjAwMDk3ODMwMDU4MzA3MkZGRkYwMEQyNDAyMzJEMTgwMDA1OEEKLToxMDI1QzAwMDEzMDAwMDAzMzA2NDAwRkYyNERGRkZGQzMzRTQwMEZGNEUKLToxMDI1RDAwMDhGODUwMDYwOEY4NjAwMzAxMEE2MDAwNDM4OEYwMDAxQzAKLToxMDI1RTAwMDMxRUQwMDAxMTVBMDAxMzgwMDAwMDAwMDhGODQwMDM0OTcKLToxMDI1RjAwMDkwOEMwMEQ0MzU4NzAwMTBBMDg3MDBENDhGODUwMDM0REMKLToxMDI2MDAwMDhGODYwMDVDOTc4MzAwNThBQ0EwMDBFQzBBMDAxQ0M2QzMKLToxMDI2MTAwMDMwNjJGRkZGOENBQTAwODQ4Q0I1MDA4NDNDMDQxMDAwNUIKLToxMDI2MjAwMDAxNDcxMDI0MDAwMjg5NDAzMkI0MDA3RjAyMzQzMDI1NzMKLToxMDI2MzAwMDAwQzQ2MDI1M0MwODgwMDAyNDA1MDAwMTAyNjAyMDIxQzAKLToxMDI2NDAwMDI0MDYwMDAxMEUwMDE5NDBBRDBDMDgzMDBBMDAxQzVBODcKLToxMDI2NTAwMDhGODUwMDM0OEM4MjAwRUMxMjIyRkU3RTAyNjAyMDIxRTUKLToxMDI2NjAwMDI0MDkwMDA1QTM4OTAwNjQwRTAwMTlFMTI0MTFGRkZGNkQKLToxMDI2NzAwMDE0NTFGRTc4MjQwNEZGRkYwQTAwMUNFQzI0MDNGRkZGMjIKLToxMDI2ODAwMDhGOEYwMDQ4OEY4ODAwMzQ4REY4MDAwMEFEMTgwMDg4QzcKLToxMDI2OTAwMDhERTcwMDEwQUQwNzAwOTg4Rjg3MDA1QzBBMDAxRDRFODMKLToxMDI2QTAwMDhGODYwMDUwMjQwN0ZGRkYxMTg3MDAwNTAwMDAwMDAwRkYKLToxMDI2QjAwMDBFMDAxQUUzMDI2MDIwMjEwQTAwMUQyNzAwNDBBMDIxMUQKLToxMDI2QzAwMDBFMDAxQTY4MDI2MDIwMjEwQTAwMUQyNzAwNDBBMDIxODgKLToxMDI2RDAwMDhGOTAwMDQ4M0MwOTA4MDA4RDI5MzFCMDhFMTEwMDEwMDAKLToxMDI2RTAwMDMyMzIzRkZGMDI0OTY4MkIxMUEwMDAwQzI0MEFGRjgwMDAKLToxMDI2RjAwMDhGODUwMDRDOTBBRTAwMEQwMTRFMTAyNDMwNEMwMEZGMzEKLToxMDI3MDAwMDExODAwMDA3MDI2MDIwMjEwMDExQzM4MjMzMDMwMDAzRkYKLToxMDI3MTAwMDI0MEIwMDAxMTA2QjAxMDUwMDAwMDAwMDAyNjAyMDIxNjUKLToxMDI3MjAwMDI0MTgwMDBEMEUwMDE5RTFBMzk4MDA2NDAwNDAyMDIxMzgKLToxMDI3MzAwMDhGODUwMDM0MEEwMDFDQzkwMDgwQTAyMThGOTAwMDQ4QkEKLToxMDI3NDAwMDNDMEEwODAwOEQ0QTMxQjA4Rjg1MDA0QzhFMDQwMDEwODEKLToxMDI3NTAwMDAwMDBBMDIxOENCMTAwMTQzMDgyM0ZGRjAwNEE2MDJCQTIKLToxMDI3NjAwMDhDQjIwMDIwNTE4MEZGRUUwMjYwMjAyMTkwQjgwMDBENTUKLToxMDI3NzAwMDI0MEJGRjgwMDE3ODcwMjQzMUMzMDBGRjUwNjBGRkU4MTQKLToxMDI3ODAwMDAyNjAyMDIxMDAwNDQzODIzMTA2MDAwMzE0QzBGRkU0RUMKLToxMDI3OTAwMDAyNjAyMDIxOTRCRjAwMUM4Rjk5MDAzNDhFMDYwMDI4MEYKLToxMDI3QTAwMEE3M0YwMEU4OENBRjAwMTAwMjJGMjAyMzE0QzQwMTM5OEEKLToxMDI3QjAwMDAyNjAyMDIxOEY4MzAwNTAwMEMzNjgyMTAyMkQzODJCMzYKLToxMDI3QzAwMDE0RTAwMTM1MjQwMjAwMTg4RjhBMDA0MDhGODIwMDJDMEIKLToxMDI3RDAwMDAyNDM5MDIxOEQ0QjAwMTAwMTYzNzAyM0FENEUwMDEwMTkKLToxMDI3RTAwMEFENTIwMDIwOEM0QzAwNzQwMTkyMjgyQjE0QTAwMTU2OEQKLToxMDI3RjAwMDAyNjAyMDIxOEY4NDAwNEM4RTA4MDAyNDhDODYwMDI0RTcKLToxMDI4MDAwMDExMDYwMDA3MDI2MDIwMjEyNDE5MDAxQzBFMDAxOUUxQTYKLToxMDI4MTAwMEEzOTkwMDY0MjQwRkZGRkYxMDRGRkZDNTI0MDRGRkZGOUUKLToxMDI4MjAwMDhGODQwMDQwOEM4NzAwMjQyNEZGMDAwMUFDOUYwMDI0OEIKLToxMDI4MzAwMDEyNTEwMTMzOEY4RDAwMkM4REIxMDA3NDEyMzIwMTMwOTIKLToxMDI4NDAwMDNDMEIwMDgwOEUwRTAwMDAwMUNCNTAyNDE1NDAwMDc1MUIKLToxMDI4NTAwMDAwMDAwMDAwOEUwMzAwMTQyNDExRkZGRjEwNzEwMDA2MTkKLToxMDI4NjAwMDAyNjAyMDIxMjQxODAwMUIwRTAwMTlFMUEzOTgwMDY0QzcKLToxMDI4NzAwMDEwNTFGRkFGMjQwNEZGRkY4RTAzMDAwMDNDMDgwMDAxNEQKLToxMDI4ODAwMDAwNjgzMDI0MTBDMDAwMTMzQzA0MDA4MDAwNjRBMDI0QzEKLToxMDI4OTAwMDE2ODAwMDA5MDIwMDI4MjEwMjYwMjAyMTI0MTkwMDFBNTQKLToxMDI4QTAwMDBFMDAxOUUxQTM5OTAwNjQyNDBGRkZGRjEwNEZGRkEwNTEKLToxMDI4QjAwMDI0MDRGRkZGMDIwMDI4MjEwMjYwMjAyMTBFMDAxQTAxREIKLToxMDI4QzAwMDI0MDYwMDAxMjQxMEZGRkYxMDUwRkY5OTI0MDRGRkZGOEQKLToxMDI4RDAwMDI0MTQwMDAxOEY5RjAwNDAwMjYwMjAyMTAyODAzMDIxREIKLToxMDI4RTAwMDk3RjEwMDM0MjQwNTAwMDEyNjI3MDAwMUE3RTcwMDM0RjIKLToxMDI4RjAwMDBFMDAxOTQwMDAwMDAwMDAwMDAwMjAyMThGODUwMDM0RTgKLToxMDI5MDAwMDBBMDAxQ0M5MDA4MEEwMjE4RjkwMDA0ODNDMTQwODAwRDgKLToxMDI5MTAwMDhFOTQzMUIwOEUwNzAwMTAzMEU4M0ZGRjAxMTQzMDJCNDkKLToxMDI5MjAwMDEwQzAwMDYxOEY4NjAwNEMyNDFGRkY4MDkwQzUwMDBERjEKLToxMDI5MzAwMDAzRTUyMDI0MzA5MjAwRkY1MjQwMDA1QzAyNjAyMDIxMTkKLToxMDI5NDAwMDhGOEQwMDUwMTFBMDAwMDcwMDA3OEI4MjhGODUwMDM0MDcKLToxMDI5NTAwMDhGODlGQ0I4OTRBRjAwODA5NTM5MDAwQTEzMkYwMEY2RDgKLToxMDI5NjAwMDhGODcwMDNDMzIyQzAwMDMxNTgwMDA2MzAwMDAwMDAwQkMKLToxMDI5NzAwMDkyMDIwMDAyMTA0MDAwRDcwMDAwMDAwMDhFMEEwMDI0REUKLToxMDI5ODAwMDE1NDAwMEQ4MDI2MDIwMjE5MjA0MDAwMzI0MDYwMDAyQjIKLToxMDI5OTAwMDMwODgwMEZGMTUwNjAwMDUzMDg1MDBGRjhGOTQwMDUwMzkKLToxMDI5QTAwMDUyODAwMEYyMDI2MDIwMjEzMDg1MDBGRjM4QUQwMDEwMTcKLToxMDI5QjAwMDJEQTQwMDAxMkNCRjAwMDEwM0U0MzAyNTAyMDAyODIxRDIKLToxMDI5QzAwMDBFMDAxQTAxMDI2MDIwMjEyNDEwRkZGRjEwNTAwMEJFRUIKLToxMDI5RDAwMDhGODUwMDM0OEY4MzAwNTAxMDYwMDBDNDI0MDUwMDAxRUYKLToxMDI5RTAwMDNDMTkwODAwOEYzOTMxOEMwMzIzNzgyQjE1RTAwMEIxOTYKLToxMDI5RjAwMDI0MDkwMDJEMDI2MDIwMjEwMDAwMjgyMTBFMDAxOTQwMkEKLToxMDJBMDAwMDI0MDYwMDAxOEY4NTAwMzQwMDAwMTgyMTBBMDAxQ0M5MkIKLToxMDJBMTAwMDAwNjBBMDIxMEUwMDE4MEMwMDAwMDAwMDBBMDAxRDhGQUQKLToxMDJBMjAwMDAwMDAwMDAwQUM4MDAwMjAwQTAwMUUwRjhFMDMwMDE0N0UKLToxMDJBMzAwMDAwMDAyODIxMDI2MDIwMjEwRTAwMTk0MDI0MDYwMDAxMTgKLToxMDJBNDAwMDBBMDAxQzVBOEY4NTAwMzQwQTAwMUQ0RThGODgwMDM0RkUKLToxMDJBNTAwMDhDQjAwMDg0OENCOTAwODQzQzAzMTAwMDAyMDc0ODI0MjkKLToxMDJBNjAwMDAwMDk2OTQwMzMyRjAwN0YwMUFGRjgyNTAzRTMyODI1RDMKLToxMDJBNzAwMEFDQzUwODMwOTEwNzAwMDEyNDA1MDAwMTAyNjAyMDIxNDcKLToxMDJBODAwMDBFMDAxOTQwMzBFNjAwMDEwQTAwMUM1QThGODUwMDM0MDAKLToxMDJBOTAwMDkzOEYwMDQ0MjQwM0ZGRkQwQTAwMUNDQkFGOEYwMDVDMjIKLToxMDJBQTAwMDBBMDAxQ0NCMjQwM0ZGRkYwMjYwMjAyMTI0MTAwMDBEMkMKLToxMDJBQjAwMDBFMDAxOUUxQTM5MDAwNjQwMDQwMTgyMThGODUwMDM0QjYKLToxMDJBQzAwMDBBMDAxQ0M5MDA2MEEwMjEwRTAwMTgwQzAwMDAwMDAwQzQKLToxMDJBRDAwMDk3ODMwMDU4OEY4NjAwNUMzMDcwRkZGRjAwRDA0ODIzM0EKLToxMDJBRTAwMDJEMzkwMDA1MTMyMEZFMTI4Rjg1MDAzNEFDQTIwMEVDQjYKLToxMDJBRjAwMDBBMDAxQ0M2MzA2MkZGRkY5MEMzMDAwRDMwNzgwMDA4NEEKLToxMDJCMDAwMDU3MDBGRkEyOTIwNDAwMDMwMjYwMjAyMTI0MDIwMDEwNUIKLToxMDJCMTAwMDBFMDAxOUUxQTM4MjAwNjQyNDAzRkZGRjU0NDNGRjlCQ0UKLToxMDJCMjAwMDkyMDQwMDAzMEEwMDFFQTk4Rjg1MDAzNDkwQTgwMDBEQUUKLToxMDJCMzAwMDMxMDYwMDA4MTBDMDAwOTU4Rjk0MDA1MDE2ODAwMDlFNEEKLToxMDJCNDAwMDAyNjAyMDIxOEUwRjAwMEM4Q0E0MDAyMDU1RTQwMDA1QUIKLToxMDJCNTAwMDAyNjAyMDIxOEUxRjAwMDg4Q0I5MDAyNDEzRjkwMDNBNkUKLToxMDJCNjAwMDAyNjAyMDIxMjQwMjAwMjAwRTAwMTlFMUEzODIwMDY0RUIKLToxMDJCNzAwMDI0MDVGRkZGMTA0NUZFRUUyNDA0RkZGRjhGOEYwMDQwNjkKLToxMDJCODAwMDI0MENGRkY3MjQwM0ZGODA5MUU5MDAwRDNDMTQ4MDBFMTQKLToxMDJCOTAwMDNDMEI4MDAwMDEyQ0M4MjRBMUY5MDAwRDhGOEYwMDJDNjQKLToxMDJCQTAwMDNDMDcwODAwOENFNzMxQUM4RjhEMDA2ODk1RTUwMDc4MTQKLToxMDJCQjAwMDhGOTkwMDQwMDBFRDkwMjEzMEJGN0ZGRjAwMUYyMDQwMjMKLToxMDJCQzAwMDAyNDQzMDIxMzBDODAwN0YwMEMzQzAyNDAxMTQ3MDIxQUEKLToxMDJCRDAwMEFENzgwMDJDQTVEMTAwMDA4RjJBMDAyODI1NDIwMDAxRTUKLToxMDJCRTAwMEFGMjIwMDI4OEYyOTAwMkM4RTBDMDAyQzAxMkM2ODIxOEMKLToxMDJCRjAwMEFGMkQwMDJDOEUwNzAwMkNBRjI3MDAzMDhFMDUwMDE0NUYKLToxMDJDMDAwMEFGMjUwMDM0OTczRjAwM0EyN0U0MDAwMUE3MjQwMDNBOUIKLToxMDJDMTAwMDk1RjIwMDc4M0MxMDA4MDA4RTEwMzFCMDI2NDMwMDAxNzgKLToxMDJDMjAwMDMwNzE3RkZGMTIzMDAwNUMwMDYwMzAyMThGODMwMDJDRjgKLToxMDJDMzAwMDAyNjAyMDIxMjQwNTAwMDEwRTAwMThDQkE0NjYwMDc4NTQKLToxMDJDNDAwMDBBMDAxRTM4MDAwMDIwMjE4RTA3MDAxNDI0MTJGRkZGMDYKLToxMDJDNTAwMDEwRjIwMDYzOEY4QzAwMzQ4RTA5MDAxODhEOEQwMEQwMjcKLToxMDJDNjAwMDE1MkQwMDVEMDI2MDIwMjE4RTBBMDAyNDhDQTIwMDI4MTAKLToxMDJDNzAwMDExNDIwMDUzMjQwMjAwMjEwRTAwMTlFMUEzODIwMDY0RDYKLToxMDJDODAwMDE0NTJGRkJFMjQwNEZGRkY4Rjg1MDAzNDBBMDAxQ0M5QzQKLToxMDJDOTAwMDAwODBBMDIxMjQwMjAwMUYwRTAwMTlFMUEzODIwMDY0MUQKLToxMDJDQTAwMDI0MDlGRkZGMTA0OUZFQTIyNDA0RkZGRjBBMDAxREVCQzgKLToxMDJDQjAwMDhGODMwMDUwMDI2MDIwMjEwRTAwMTlFMUEzODkwMDY0NzcKLToxMDJDQzAwMDE0NTBGRjUxOEY4NTAwMzQyNDAzRkZGRjBBMDAxQ0M5RjQKLToxMDJDRDAwMDAwNjBBMDIxOENDRTAwMjQ4RTBCMDAyNDExNkVGRjJBRjAKLToxMDJDRTAwMDAyNjAyMDIxMEEwMDFFQkQyNDAyMDAwRjBFMDAxOENCMzYKLToxMDJDRjAwMDAyNjAyMDIxOEY4NTAwMzQwQTAwMUU3QzAwMDAxODIxMEMKLToxMDJEMDAwMDhFMDkwMDAwM0MwNTAwODAwMTI1OTAyNDE2NDBGRjQ1RjcKLToxMDJEMTAwMDI0MDIwMDFBMDI2MDIwMjEwRTAwMTlFMUEzODIwMDY0M0YKLToxMDJEMjAwMDI0MENGRkZGMTQ0Q0ZFQ0IyNDA0RkZGRjhGODUwMDM0REUKLToxMDJEMzAwMDBBMDAxQ0M5MDA4MEEwMjEyNDAzRkZGRDAwNjBBMDIxMUYKLToxMDJENDAwMDBBMDAxQ0M5QUY4NzAwNUMyNDE4MDAxRDBFMDAxOUUxQTEKLToxMDJENTAwMEEzOTgwMDY0MjQwM0ZGRkYxNDQzRkVBNjI0MDRGRkZGOEUKLToxMDJENjAwMDhGODUwMDM0MEEwMDFDQzkwMDgwQTAyMTI0MTIwMDJDODkKLToxMDJENzAwMDBFMDAxOUUxQTM5MjAwNjQyNDAzRkZGRjEwNDNGRjUwRUIKLToxMDJEODAwMDhGODUwMDM0MEEwMDFFNjM5MjA0MDAwMzAyNjAyMDIxMzQKLToxMDJEOTAwMDBBMDAxRUQzMjQwMjAwMjQyNDBCODAwMDAwNkI3MDI0NDAKLToxMDJEQTAwMDMxQ0FGRkZGMDAwQTEzQzIzMDUxMDBGRjAwMTE4MDI3MTMKLToxMDJEQjAwMDBBMDAxRjA0MDAxMDMzQzAwQTAwMUVEMzI0MDIwMDI3OUIKLToxMDJEQzAwMDhFMDYwMDI4OENBRTAwMkMxMENFMDAwODAyNjAyMDIxNTgKLToxMDJERDAwMDBBMDAxRjE3MjQwMjAwMUYwQTAwMUYxNzI0MDIwMDBFRkEKLToxMDJERTAwMDAyNjAyMDIxMEEwMDFGMTcyNDAyMDAyNThFMDQwMDJDRjcKLToxMDJERjAwMDEwODAwMDBEOEY4MzAwMkM4Qzc4MDA3NDAzMDQ1ODJCRjYKLToxMDJFMDAwMDU1NjAwMDBDMDI2MDIwMjE4Q0E4MDAxNDAwODZBMDIxQ0YKLToxMDJFMTAwMDAxMTQzMDJCMTBDMEZGNUE4RjhGMDA0MDAyNjAyMDIxMTgKLToxMDJFMjAwMDBBMDAxRjE3MjQwMjAwMjIwMjYwMjAyMTBBMDAxRjE3MzcKLToxMDJFMzAwMDI0MDIwMDIzMEEwMDFGMTcyNDAyMDAyNjI3QkRGRkQ4MDIKLToxMDJFNDAwMEFGQjMwMDFDQUZCMTAwMTRBRkJGMDAyMEFGQjIwMDE4ODkKLToxMDJFNTAwMEFGQjAwMDEwM0MwMjgwMDA4QzUyMDE0MDhDNEIwMTQ4MDYKLToxMDJFNjAwMDNDMDQ4MDAwMDAwQjhDMDIzMjIzMDBGRjMxNzMwMEZGMTIKLToxMDJFNzAwMDhDODUwMUI4MDRBMEZGRkUzNDkwMDE4MEFFMTIwMDAwRTIKLToxMDJFODAwMDhDODcwMTQ0MjQ2NEZGRjAyNDA2MDAwMjJDODMwMDEzODUKLToxMDJFOTAwMEFFMDcwMDA0QTYxMTAwMDhBMjA2MDAwQkFFMTMwMDI0MjIKLToxMDJFQTAwMDEwNjAwMDRGOEZCRjAwMjAwMDA0NDg4MDNDMEEwODAxREEKLToxMDJFQjAwMDI1NEE5MzZDMDEyQTQwMjE4RDA0MDAwMDAwODAwMDA4RkYKLToxMDJFQzAwMDAwMDAwMDAwM0MwMzA4MDA4QzYzMzFBODMxNjkzRkZGMUIKLToxMDJFRDAwMDAwMDk5OTgwMDA3MjgwMjEwMjEzNzAyMTI0MDVGRjgwNkYKLToxMDJFRTAwMDI2NEQwMTAwMjY0QzAwODAzQzAyODAwMDMxQjEwMDdGNUQKLToxMDJFRjAwMDMxOTgwMDdGMzFDQTAwN0YzQzFGODAwQTNDMTk4MDA0NTIKLToxMDJGMDAwMDNDMEY4MDBDMDFDNTIwMjQwMUE1MzAyNDAxODUzODI0MDQKLToxMDJGMTAwMDAxNEYxODIxQUM0NjAwMjQwMjNGNDAyMTAzMTk0ODIxRUIKLToxMDJGMjAwMEFDNDcwMDkwQUM0NDAwMjhBRjgzMDA0MEFGODgwMDM0MjkKLToxMDJGMzAwMEFGODkwMDJDMEUwMDE4OTcwMTYwODAyMTNDMDM4MDAwQUYKLToxMDJGNDAwMDhDNkIwMUI4MDU2MEZGRkU4Rjg3MDA0MDhGODYwMDM0RDAKLToxMDJGNTAwMDM0NjUwMTgwOTBFODAwMERBQ0IyMDAwMEE0QjAwMDA2MUEKLToxMDJGNjAwMDAwMDgyNjAwMDAwNDE2MDMwMDAyOTAyNzAwMTIyN0MyNjIKLToxMDJGNzAwMDEwODAwMDgxMjRDMjAwODgyNDFGNjA4MkE0QkYwMDA4NDIKLToxMDJGODAwMEEwQTAwMDA1MjQwMjAwMDJBMEEyMDAwQjhGOEIwMDJDNDEKLToxMDJGOTAwMDAwMDQyNDAwM0MwODI3MDAwMDg4OTAyNUFDQjIwMDEwRjMKLToxMDJGQTAwMEFDQTAwMDE0QUNBMDAwMjRBQ0EwMDAyOEFDQTAwMDJDNjUKLToxMDJGQjAwMDhENjkwMDM4MjQxM0ZGODBBQ0E5MDAxODkwRTMwMDBENDAKLToxMDJGQzAwMDAyNjM4MDI0MzIwNTAwRkYxMEEwMDAwNThGQkYwMDIwOUYKLToxMDJGRDAwMDkwRUQwMDBEMzFBQzAwN0ZBMEVDMDAwRDhGQkYwMDIwMDQKLToxMDJGRTAwMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwODcKLToxMDJGRjAwMDNDMEExMDAwM0MwRTgwMDAyN0JEMDAyODAzRTAwMDA4QkEKLToxMDMwMDAwMEFEQ0EwMUI4MjY1RjAxMDAyNDA1RkY4MDMzRjgwMDdGQjgKLToxMDMwMTAwMDNDMDY4MDAwMDNFNTc4MjQzQzE5ODAwQTAzMTkyMDIxMkUKLToxMDMwMjAwMEFDQ0YwMDI0OTA4RTAwRDQwMEFFNjgyNDMxQUMwMEZGRjkKLToxMDMwMzAwMDExODAwMDI0QUY4NDAwMzQyNDhFMDA4ODk1Q0QwMDEyQzYKLToxMDMwNDAwMDNDMEMwODAwOEQ4QzMxQTgzMUFCM0ZGRjAxOTI0ODIxMjgKLToxMDMwNTAwMDAwMEI1MTgwMDEyQTQwMjEwMTA1MjAyNEFDQzQwMDI4MjYKLToxMDMwNjAwMDMxMDcwMDdGM0MwNjgwMEMwMEU2MjAyMTkwODMwMDBEOTQKLToxMDMwNzAwMDAwQTMxMDI0MzA0NTAwRkYxMEEwRkZEOEFGODQwMDQwMEIKLToxMDMwODAwMDkwOTgwMDBEMzMwRjAwMTAxNUUwRkZENThGQkYwMDIwODIKLToxMDMwOTAwMDBFMDAxODk3MDAwMDAwMDAzQzAzODAwMDhDNzkwMUI4RjYKLToxMDMwQTAwMDA3MjBGRkZFMDAwMDAwMDBBRTEyMDAwMDhDN0YwMTQ0RUMKLToxMDMwQjAwMEFFMUYwMDA0QTYxMTAwMDgyNDExMDAwMkEyMTEwMDBCOEIKLToxMDMwQzAwMEFFMTMwMDI0M0MxMzA4MDE5MjczOTUyODMyNzAwMDAxNUUKLToxMDMwRDAwMDUyMDBGRkMzOEZCRjAwMjAwRTAwMjBENDAyNDAyMDIxRTkKLToxMDMwRTAwMDBBMDAxRkYxOEZCRjAwMjAzQzEyNjAwMDhFNDUyQzA4QTMKLToxMDMwRjAwMDNDMDNGMDAzMzQ2MkZGRkYwMEEyRjgyNEFFNUYyQzA4MEIKLToxMDMxMDAwMDhFNTgyQzA4M0MxOTAxQzAwMzE5OTgyNUFFNTMyQzA4ODEKLToxMDMxMTAwMDBBMDAxRkYxOEZCRjAwMjAyNjREMDEwMDMxQUYwMDdGNTQKLToxMDMxMjAwMDNDMTA4MDBBMjQwRUZGODAwMUYwMjgyMTAxQUU2MDI0QUIKLToxMDMxMzAwMDNDMEI4MDAwQUQ2QzAwMjQxNjYwRkZBOEFGODUwMDM0MDYKLToxMDMxNDAwMDI0MTEwMDAzQTBCMTAwRkMwQTAwMUZGMThGQkYwMDIwNzIKLToxMDMxNTAwMDI2NDgwMTAwMzEwQTAwN0YzQzBCODAwQTI0MDlGRjgwQzkKLToxMDMxNjAwMDAxNEIzMDIxMDEwOTIwMjQzQzA3ODAwMEFDRTQwMDI0RkQKLToxMDMxNzAwMDBBMDAxRkYwQUY4NjAwMzQ5NDRFMDAxMjMyMEMzRkZGNUQKLToxMDMxODAwMDMxQ0QzRkZGMTVBQ0ZGN0QyNDFGNjA4MjkwRDkwMEQ0NjQKLToxMDMxOTAwMDI0MThGRjgwMDMxOTc4MjQzMUVBMDBGRjExNDBGRjc3REIKLToxMDMxQTAwMDAwMDAwMDAwMjQwNzAwMDRBMEM3MDBGQzhGODcwMDQwMzcKLToxMDMxQjAwMDI0MTE2MDg0MjQwNjAwMERBNEIxMDAwOEEwQTYwMDA1MTcKLToxMDMxQzAwMDBBMDAxRkRCMjQwMjAwMDIzQzA0MDAwMTI0ODQ5NTE0NDEKLToxMDMxRDAwMDI0MDMwMDE0MjQwMjAwRkUzQzAxMDgwMEFDMjQzMUVDNUUKLToxMDMxRTAwMDNDMDEwODAwQUMyMzMxRTgzQzAxMDgwMUE0MjI5NTMwRTEKLToxMDMxRjAwMDNDMDQwODAxMjQ4NDk1MzAwMDAwMTgyMTAwNjQzMDIxMkIKLToxMDMyMDAwMEEwQzMwMDA0MjQ2MzAwMDEyQzY1MDBGRjU0QTBGRkZDNTAKLToxMDMyMTAwMDAwNjQzMDIxM0MwNzA4MDAyNEU3MDEwMDAzRTAwMDA4QjcKLToxMDMyMjAwMEFGODcwMDc0MDBBMDU4MjEwMDgwNDgyMTAwMDAxMDIxQzEKLToxMDMyMzAwMDE0QTAwMDEyMDAwMDUwMjEwQTAwMjBEMDAwMDAwMDAwNUQKLToxMDMyNDAwMDNDMDEwODAxQTQyMDk1MzAzQzA1MDgwMTk0QTU5NTMwNjcKLToxMDMyNTAwMDhGODIwMDc0M0MwQzA4MDEyNThDOTUzMDAwRTIxODIxMDcKLToxMDMyNjAwMDAwQUMyMDIxMDE0QjMwMkJBMDg5MDAwNDAwMDAxMDIxNkMKLToxMDMyNzAwMEE0NjAwMDA4MTBDMDAwMzkwMTAwNDgyMThGODYwMDc0NDYKLToxMDMyODAwMDAwMDkzODQwMDBFOTQwMjEwMDA4Mzg4MDAwRTYyODIxODQKLToxMDMyOTAwMDkwQTgwMDBCOTBCOTAwMEEwMDA4MjA0MDAwODgxMDIxNzcKLToxMDMyQTAwMDAwMDIxODgwMDA2NkMwMjFBMzE5MDAwQThGODUwMDc0RUYKLToxMDMyQjAwMDAwRTU3ODIxOTFFRTAwMEE5MUU2MDAwQjAwMEU2ODQwQ0YKLToxMDMyQzAwMDAxQUU2MDIxMDAwQzIwODAwMDg1MTAyMUEwNDYwMDBCN0IKLToxMDMyRDAwMDNDMDMwODAxOTA2Mzk1MkExMDYwMDAyMjI0NjJGRkZGREUKLToxMDMyRTAwMDhGODMwMDM0M0MwMTA4MDFBMDIyOTUyQTkwNkMwMEZGRDYKLToxMDMyRjAwMDExODAwMDA0MDAwMDAwMDA5MDZFMDBGRjI1Q0RGRkZGNEMKLToxMDMzMDAwMEEwNkQwMEZGM0MxOTA4MDE5NzM5OTUzMDI3MjMwMDAxNzMKLToxMDMzMTAwMDMwNzhGRkZGMkYwRjAwRkYxMUUwRkZDOTI1NEEwMDAxQTEKLToxMDMzMjAwMDNDMDEwODAxQTQyMzk1MzAzQzA1MDgwMTk0QTU5NTMwODMKLToxMDMzMzAwMDhGODIwMDc0M0MwQzA4MDEyNThDOTUzMDAwRTIxODIxMjYKLToxMDMzNDAwMDAwQUMyMDIxMDE0QjMwMkJBMDg5MDAwNDAwMDAxMDIxOEIKLToxMDMzNTAwMEE0NjAwMDA4MTRDMEZGQzkwMTAwNDgyMTAzRTAwMDA4NzAKLToxMDMzNjAwMDAwMDAwMDAwMDNFMDAwMDgyNDAyMDAwMjI3QkRGRkUwODcKLToxMDMzNzAwMDI0ODUwMTAwMjQwN0ZGODBBRkIwMDAxMEFGQkYwMDE4MDQKLToxMDMzODAwMEFGQjEwMDE0MDBBNzE4MjQzQzEwODAwMDMwQTQwMDdGQzcKLToxMDMzOTAwMDNDMDY4MDBBMDA4NjI4MjE4RTExMDAyNEFFMDMwMDI0RkEKLToxMDMzQTAwMDkwQTIwMEZGMTQ0MDAwMDhBRjg1MDAzNEEwQTAwMDA5REYKLToxMDMzQjAwMDhGQkYwMDE4QUUxMTAwMjQ4RkIxMDAxNDhGQjAwMDEwMjEKLToxMDMzQzAwMDAzRTAwMDA4MjdCRDAwMjA5MEE5MDBGRDkwQTgwMEZGQTEKLToxMDMzRDAwMDMxMjQwMEZGMEUwMDIwODIzMTA1MDBGRjhGODUwMDM0NkMKLToxMDMzRTAwMDhGQkYwMDE4QTBBMDAwMDlBRTExMDAyNDhGQjEwMDE0RjcKLToxMDMzRjAwMDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAyMDI3QkRGRkQwREMKLToxMDM0MDAwMEFGQjIwMDIwQUZCMTAwMUNBRkIwMDAxOEFGQkYwMDJDQUUKLToxMDM0MTAwMEFGQjQwMDI4QUZCMzAwMjQzQzA5ODAwMDk1MzMwMTE2RjcKLToxMDM0MjAwMDM1MzIwQzAwOTUyRjAxMUEzMjcxRkZGRjAyMzI4MDIxRDQKLToxMDM0MzAwMDhFMDgwMDA0MzFFRUZGRkYyNDhCMDEwMDAxMEU2ODIxOEQKLToxMDM0NDAwMDI0MENGRjgwMjVBNUZGRkYwMTZDNTAyNDMxNjYwMDdGMEUKLToxMDM0NTAwMDNDMDc4MDBBQUQyQTAwMjQwMEM3MzAyMUFGODUwMDcwRTgKLToxMDM0NjAwMEFGODgwMDZDM0MwMTA4MDFBMDIwOTUyOTkwQzMwMDA5OTkKLToxMDM0NzAwMDAyMDBEMDIxMDA4MDk4MjEzMDYzMDBGRjI4NjIwMDA1RkYKLToxMDM0ODAwMDEwNDAwMDQ4QUY4NjAwMzQyODY0MDAwMjE0ODAwMDhFOEIKLToxMDM0OTAwMDI0MTQwMDAxMjQwRDAwMDUzQzAxMDgwMUEwMkQ5NTBEMDgKLToxMDM0QTAwMDkwQ0MwMEZEM0MwMTA4MDFBMDIwOTUwRTNDMDEwODAxRDQKLToxMDM0QjAwMEEwMjA5NTBGOTBDQjAwMEEyNDBBRkY4MDMxODUwMEZGRTEKLToxMDM0QzAwMDAxNEI0ODI0MzEyNzAwRkYxMEUwMDAwQzAwMDA1ODIxNzgKLToxMDM0RDAwMDNDMTI4MDA4MzY1MTAwODA4RTJGMDAzMDhDRDAwMDVDNkEKLToxMDM0RTAwMDAxRjA3MDIzMDVDMDAxOEU4Rjg3MDA2QzkwRDQwMDBBMTQKLToxMDM0RjAwMDMyODQwMDdGQTBDNDAwMEE4Rjg2MDAzNDNDMTE4MDA4MEIKLToxMDM1MDAwMDM2MzAwMDgwOEUwRjAwMzA4Rjg3MDA2QzAwRUY3MDIzMDQKLToxMDM1MTAwMDE5QzAwMEVFMDAwMDAwMDA5MEQ0MDAwOTI0MTIwMDAyM0YKLToxMDM1MjAwMDMyODQwMEZGMTA5MjAyNDcwMDAwMDAwMDhDQzIwMDU4NTUKLToxMDM1MzAwMDAwRTJGODIzMjdGOUZGRkYxQjIwMDEzMDAwMDAwMDAwMDQKLToxMDM1NDAwMDkwQzUwMDA5MjQwODAwMDQzMEEzMDBGRjEwNjgwMDU3NEMKLToxMDM1NTAwMDI0MEEwMDAxM0MwMTA4MDFBMDJBOTUwRDkwQzkwMEZGMzIKLToxMDM1NjAwMDI1MjcwMDAxM0MwMTA4MDFBMDI3OTUwQzNDMDMwODAxMTgKLToxMDM1NzAwMDkwNjM5NTBEMjQwNjAwMDUxMDY2MDA2QTJDNzgwMDA1RkUKLToxMDM1ODAwMDEzMDAwMEM0MDAwMDkwMjEwMDAzRjg4MDNDMDQwODAxRUYKLToxMDM1OTAwMDI0ODQ5M0I4MDNFNEM4MjE4RjI1MDAwMDAwQTAwMDA4MEMKLToxMDM1QTAwMDAwMDAwMDAwMjQxODAwRkYxMDc4MDA1QzAwMDAwMDAwRkMKLToxMDM1QjAwMDkwQ0MwMDBBOTBDQTAwMDkzQzA4MDgwMTkxMDg5NTI5OUUKLToxMDM1QzAwMDMxODcwMDgwMDBFQTQ4MjUzQzAxMDgwMUEwMjk5NTE0QjQKLToxMDM1RDAwMDkwQzUwMEZEM0MxNDA4MDE5Mjk0OTUyQTMxMTEwMDAxMTgKLToxMDM1RTAwMDNDMDEwODAxQTAyNTk1MTU5MERGMDBGRTNDMDEwODAxNzMKLToxMDM1RjAwMEEwM0Y5NTE2OTBEMjAwRkYzQzAxMDgwMUEwMzI5NTE3MUMKLToxMDM2MDAwMDhDRDkwMDU0M0MwMTA4MDFBQzM5OTUxODhDRDAwMDU4NzUKLToxMDM2MTAwMDNDMDEwODAxQUMzMDk1MUM4Q0MzMDA1QzNDMDEwODAxRTYKLToxMDM2MjAwMEFDMzQ5NTI0M0MwMTA4MDFBQzIzOTUyMDE2MjAwMDA4RjkKLToxMDM2MzAwMDhGQkYwMDJDOEZCNDAwMjg4RkIzMDAyNDhGQjIwMDIwREUKLToxMDM2NDAwMDhGQjEwMDFDOEZCMDAwMTgwM0UwMDAwODI3QkQwMDMwQzgKLToxMDM2NTAwMDNDMTE4MDAwOTYyNDAxMEUwRTAwMEZENDMwOTRGRkZGMjEKLToxMDM2NjAwMDNDMEIwODAxOEQ2Qjk1MkMwMjYwMzgyMTAyODAyODIxQ0IKLToxMDM2NzAwMEFFMkIwMTgwM0MxMzA4MDE4RTczOTUwQzAxNjAyMDIxNTQKLToxMDM2ODAwMDI0MDYwMDgzMEUwMDEwNDZBRkIzMDAxMDhGQkYwMDJDM0QKLToxMDM2OTAwMDhGQjQwMDI4OEZCMzAwMjQ4RkIyMDAyMDhGQjEwMDFDOUMKLToxMDM2QTAwMDhGQjAwMDE4MDNFMDAwMDgyN0JEMDAzMDNDMTgwODAwNjgKLToxMDM2QjAwMDhGMTgzMUZDMjcwRjAwMDEzQzAxMDgwMEFDMkYzMUZDQjIKLToxMDM2QzAwMDBBMDAyMTY1MDAwMDAwMDAxNDc0RkZCOTAwMDAwMDAwMkEKLToxMDM2RDAwMEEwQzAwMEZGM0MwNTA4MDA4Q0E1MzFFNDNDMDMwODAwQjUKLToxMDM2RTAwMDhDNjMzMUUwM0MwMjA4MDA4QzQyMzIwNDhGOTkwMDM0MzQKLToxMDM2RjAwMDM0QTgwMDAxMjQxRjAwMDIzQzAxMDgwMUFDMjM5NTJDRDIKLToxMDM3MDAwMDNDMDEwODAxQTAyODk1MjgzQzAxMDgwMUEwMjI5NTJCMjYKLToxMDM3MTAwMEEzM0YwMDA5MEEwMDIxMUU4Rjg2MDAzNDBFMDAyMEQ0MkEKLToxMDM3MjAwMDAwMDAwMDAwMEEwMDIxNjU4Rjg2MDAzNDNDMUYwODAxNUMKLToxMDM3MzAwMDkzRkY5NTBDMjQxOTAwMDExM0Y5MDIyOThGODcwMDZDNUYKLToxMDM3NDAwMDNDMTAwODAxOTIxMDk1MTAzQzA2MDgwMTkwQzY5NTBFOTkKLToxMDM3NTAwMDEwQzAwMDA1MDIwMEEwMjEzQzA0MDgwMTkwODQ5NTExQ0UKLToxMDM3NjAwMDEwOTAwMUU0OEY4NzAwNzQwMDEwODg0MDhGOUYwMDc0RDAKLToxMDM3NzAwMDAyMzA0ODIxMDAwOUM4ODAwMzNGNzAyMTk1RDgwMDA4MTUKLToxMDM3ODAwMDI3MEYwMDAxQTVDRjAwMDgzQzA0MDgwMTkwODQ5NTExODMKLToxMDM3OTAwMDNDMDUwODAxOTBBNTk1MEUwRTAwMjA4MjAwMDAwMDAwNTcKLToxMDM3QTAwMDhGODcwMDc0MDIzMDIwMjEwMDA0MzA4MDAwQzcyMDIxNjAKLToxMDM3QjAwMDhDODUwMDA0OEY4MjAwNzAwMEEyNDAyMzA1MDIwMDA2NjEKLToxMDM3QzAwMEFDODIwMDA0OEM4QTAwMDA4RjgzMDA2QzAxNDMxMDIzQkMKLToxMDM3RDAwMDVDNDAwMDAxQUM4MzAwMDA4Rjg2MDAzNDkwQ0IwMEZGN0EKLToxMDM3RTAwMDJENkMwMDAyNTU4MDAwMkQyNDE0MDAwMTAyMzBGODIxQjgKLToxMDM3RjAwMDAwMUY0MDgwMDEwNzI4MjE5MEI5MDAwQjhDQUUwMDA0MDcKLToxMDM4MDAwMDAwMTlDMDQwMDMxOTc4MjEwMDBGMTg4MDAwNjcxMDIxQUIKLToxMDM4MTAwMDhDNEQwMDAwMDFBRTg4MjMyNjMwRkZGRjVFMDAwMDFGQTQKLToxMDM4MjAwMDI0MTQwMDAxOEM0NDAwMDQ4Q0FBMDAwMDAwOEE0ODIzNjAKLToxMDM4MzAwMDE5MjAwMDE5MjQwRTAwMDQzQzAxMDgwMUEwMkU5NTBENEEKLToxMDM4NDAwMDkwQUQwMDBCOENBQjAwMDQwMDBEODg0MDAyMkQ4MDIxNTAKLToxMDM4NTAwMDAwMTAxMDgwMDA0NzEwMjE4QzQ0MDAwNDAxNjQ2MDIzOTQKLToxMDM4NjAwMDA1ODIwMjAwOTQ0MzAwMDg5MERGMDBGRTkwQjkwMDBCMkYKLToxMDM4NzAwMDMzRTUwMEZGNTRCOTAwMDQwMTA3QTAyMUEwRDQwMEZFRTUKLToxMDM4ODAwMDhGODcwMDc0MDEwN0EwMjE5Mjg0MDAwQjBFMDAyMDgyMTQKLToxMDM4OTAwMDI0MDUwMDAxOEY4NjAwMzQyNDE0MDAwMTEyNTQwMDk2ODAKLToxMDM4QTAwMDJFNTAwMDAxMTYwMDAwNDIzQzA4RkZGRjI0MTkwMDAyQzAKLToxMDM4QjAwMDE2NTlGRjNGMDAwMDAwMDBBMEMwMDBGRjhGODYwMDM0QjMKLToxMDM4QzAwMEEwRDIwMDA5MEEwMDIxNjU4Rjg2MDAzNDkwQzcwMDA5NDQKLToxMDM4RDAwMDI0MDQwMDAyMzBFMzAwRkYxMDY0MDE2RjI0MDkwMDA0OTcKLToxMDM4RTAwMDEwNjkwMTUyOEY4ODAwNzA4Q0NFMDA1NDAxMEU2ODIzM0QKLToxMDM4RjAwMDI1QjEwMDAxMDYyMDAxNzUyNDE4MDAwNDNDMDEwODAxQ0YKLToxMDM5MDAwMEEwMzg5NTBEM0MwMTA4MDFBMDIwOTUwQzkwRDQwMEZEMzUKLToxMDM5MTAwMDkwRDIwMEZGMkU0RjAwMDIxNUUwRkYxNDMyODQwMEZGMEEKLToxMDM5MjAwMDAwMDQzODQwOEY4OTAwNzQ5MERGMDBGRjAwRTQxMDIxMEMKLToxMDM5MzAwMDAwMDIyMDgwMDA4OUM4MjEyRkU1MDAwMjkzMjQwMDBCOUIKLToxMDM5NDAwMDE0QTBGRjBBMjQwNzAwMDIwMDA0MTg0MDAwNjQ4MDIxMkMKLToxMDM5NTAwMDAwMTA1ODgwMDE2OTI4MjE4Q0FDMDAwNDAxMEM1MDIzMTAKLToxMDM5NjAwMDA1NDBGRjAyMDAwMDAwMDAzQzAzMDgwMTkwNjM5NTBFMzMKLToxMDM5NzAwMDE0NjAwMDA1MjQ2RjAwMDEzQzAxMDgwMUEwMjQ5NTExOEEKLToxMDM5ODAwMDNDMDEwODAxQTAyNzk1MEYzQzAxMDgwMUEwMkY5NTBFQ0UKLToxMDM5OTAwMDkwQ0UwMEZGMjRFNzAwMDEzMUNEMDBGRjAxQTc4ODJCNjYKLToxMDM5QTAwMDEyMjBGRkU5OTBBNDAwMEIwQTAwMjE1NDAwMDAwMDAwM0YKLToxMDM5QjAwMDNDMDUwODAxOENBNTk1MEMzQzEyMDAwNDAwQThGODI0RDUKLToxMDM5QzAwMDEzRjIwMDA2MjQwMjAwMDUzQzA5MDgwMTkxMjk5NTBEMTcKLToxMDM5RDAwMDE1MjAwMDAyMjQwMjAwMDMyNDAyMDAwNTNDMDEwODAxMTYKLToxMDM5RTAwMEEwMjI5NTI5OTBDNzAwRkYxNEUwMDEyMDI0MDIwMDAyQzQKLToxMDM5RjAwMEEwQzIwMDA5MEEwMDIxNjU4Rjg2MDAzNDkwQ0MwMEZGMjgKLToxMDNBMDAwMDExODBGRURBMjQwQTAwMDE4RjhDMDA3MDhGODkwMDc0MDcKLToxMDNBMTAwMDI0MEYwMDAzMDE4MDY4MjExMTYwMDAxRTI0MEUwMDAyQTMKLToxMDNBMjAwMDAwMDU0MDQwMDEwNUEwMjEwMDE0MjA4MDAwODk5MDIxNUMKLToxMDNBMzAwMDhFNTEwMDA0MDE5MTgwMjMwNjAwRkVDQzAwMDAwMDAwOUUKLToxMDNBNDAwMDNDMDIwODAxOTA0Mjk1MEUxNDQwMDAwNTI0NTgwMDAxRTQKLToxMDNBNTAwMDNDMDEwODAxQTAyQTk1MEYzQzAxMDgwMUEwMjU5NTExMDEKLToxMDNBNjAwMDNDMDEwODAxQTAzODk1MEU5MERGMDBGRjAxMDUxMDIxRjAKLToxMDNBNzAwMDAwMDJDODgwMzNFNTAwRkYyNTRBMDAwMTAzMjkyMDIxMDgKLToxMDNBODAwMDAwQUE0MDJCMTUwMEZFQjk5MDg1MDAwQjE1NjBGRkU1REMKLToxMDNBOTAwMDAwMDU0MDQwMDAwNTQwNDAwMTA1MTgyMTAwMDMxMDgwNEEKLToxMDNBQTAwMDNDMDEwODAxQTAyQTk1MEMzQzAxMDgwMUEwMjU5NTEwQjUKLToxMDNBQjAwMDAwNDkxODIxOEM2NDAwMDQwMEU0RjgyMzI3RjlGRkZGNzMKLToxMDNBQzAwMDFGMjBGRkU5MDAwMDAwMDA4QzYzMDAwMDAwRTM1ODIzODIKLToxMDNBRDAwMDA1NjAwMTNBMDFBMzg4MjMxMEUzMDExNzAxODRDMDIzODQKLToxMDNBRTAwMDFCMDBGRUEyMDAwMDAwMDAzQzAxMDgwMUEwMkU5NTBENjUKLToxMDNBRjAwMDBBMDAyMjkzMjQwQjAwMDEyNDBFMDAwNEEwQ0UwMDA5MkEKLToxMDNCMDAwMDNDMEQwODAwOERBRDMxRjg4Rjg2MDAzNDI1QTIwMDAxRjAKLToxMDNCMTAwMDNDMDEwODAwQUMyMjMxRjgwQTAwMjE2NTAwMDAwMDAwRDkKLToxMDNCMjAwMDhDRDkwMDVDMDBGOUMwMjMxRjAwRkU3QjAwMDAwMDAwNjAKLToxMDNCMzAwMDhDREYwMDVDMTBGRkZGNjU4Rjg0MDA3MDhDQzMwMDVDMUQKLToxMDNCNDAwMDAwODM0MDIzMjUwMjAwMDExQzQwRkY2MDAwMDAwMDAwQUMKLToxMDNCNTAwMDhDQzkwMDVDMjQ4NzAwMDEwMEU5MjgyQjEwQTBGRTk0OEEKLToxMDNCNjAwMDNDMEQ4MDAwOERBQjAxMDQzQzBDMDAwMTAxNkM1MDI0MjUKLToxMDNCNzAwMDExNDBGRThGMjQwMjAwMTAzQzAxMDgwMUEwMjI5NTI5NkIKLToxMDNCODAwMDBBMDAyMTY1MDAwMDAwMDA4RjkxMDA3MDhGODYwMDM0Q0MKLToxMDNCOTAwMDI2MjIwMDAxQUNDMjAwNUMwQTAwMjIyMDI0MTQwMDAxOEQKLToxMDNCQTAwMDhGODcwMDM0MjQwNEZGODAwMDAwODgyMTkwRTkwMDBBRjgKLToxMDNCQjAwMDI0MTQwMDAxMDEyNDMwMjVBMEU2MDAwQTNDMDUwODAxNzgKLToxMDNCQzAwMDkwQTU5NTBFM0MwNDA4MDE5MDg0OTUxMTBFMDAyMDgyNkEKLToxMDNCRDAwMDAwMDAwMDAwOEY4NjAwMzQ4Rjg1MDA3NDkwQzgwMEZEQkYKLToxMDNCRTAwMDMxMDcwMEZGMDAwNzQwNDAwMTA3RjgyMTAwMUZDMDgwOTcKLToxMDNCRjAwMDAzMDVDODIxOTMyMzAwMEJBMEMzMDBGRDhGODUwMDc0MkIKLToxMDNDMDAwMDhGODYwMDM0MDMwNTYwMjE5MThGMDAwQjAwMEY3MDQwRjgKLToxMDNDMTAwMDAxQ0Y2ODIxMDAwRDgwODAwMjA1MTAyMThDNEIwMDAwMkYKLToxMDNDMjAwMEFDQ0IwMDU0OEQ4NDAwMDQ4RjgzMDA3MDAwNjQ1MDIzNUIKLToxMDNDMzAwMDE5NDAwMDAyMjQ4MjAwMDEyNDYyMDAwMTAxMDc0ODIxOEEKLToxMDNDNDAwMEFDQzIwMDVDMDAwOTMwODAwMEM1NDAyMTAwRTAyMDIxQUEKLToxMDNDNTAwMDI0MDUwMDAxMEUwMDIwODI5MTEwMDAwQjhGODYwMDM0OTUKLToxMDNDNjAwMDkwQzUwMEZGMTBBMEZGMEMwMDEwNzA0MDhGODUwMDc0RkQKLToxMDNDNzAwMDAxRDA2ODIxMDAwRDEwODAwMDQ1NTgyMThENjQwMDAwOUUKLToxMDNDODAwMDhGOEMwMDcwMDE4NDUwMjMyNTQ3MDAwMTA0RTBGRjAyNUYKLToxMDNDOTAwMDI2MzEwMDAxM0MwMzA4MDE5MDYzOTUwRTJFMkYwMDAyOEYKLToxMDNDQTAwMDI0NzgwMDAxM0MwMTA4MDFBMDM4OTUwRTNDMDEwODAxNzAKLToxMDNDQjAwMEEwMzQ5NTBGMTFFMEZFRjgwMjAwMzgyMTBBMDAyMkYzMkIKLToxMDNDQzAwMDAwMDc0MDQwOEY4NDAwMzQ4RjgzMDA3MDhDODUwMDU4M0IKLToxMDNDRDAwMDAwQTM0MDIzMDUwMkZFOUFBQzgzMDA1ODBBMDAyMUM5QzQKLToxMDNDRTAwMDAwMDAwMDAwM0MwNzA4MDE5MEU3OTUyQTI0MDIwMEZGMkQKLToxMDNDRjAwMDEwRTIwMEJFOEY4NjAwMzQzQzExMDgwMTk2MzE5NTMyRTcKLToxMDNEMDAwMDNDMDMwODAxMjQ2Mzk1MzAyNjI1MDAwMTMyMzBGRkZGNzMKLToxMDNEMTAwMDMwQUJGRkZGMDIwMzYwMjEyRDZBMDBGRjE1NDAwMDhEQ0MKLToxMDNEMjAwMDkxODcwMDA0M0MwMTA4MDFBNDIwOTUzMjhGODgwMDM0NUIKLToxMDNEMzAwMDAwMDc0ODQwMDEyNzI4MjE5MTE4MDBGRjAwMDUzMDgwMjYKLToxMDNENDAwMDI0MDUwMDAxMjcxNDAwMDFBMTE0MDBGRjNDMTIwODAxMDIKLToxMDNENTAwMDkyNTI5NTJBOEY4ODAwNzQ4RjhFMDA2QzI2NEYwMDAxMzYKLToxMDNENjAwMDAwQzgyMDIxM0MwMTA4MDFBMDJGOTUyQUFDOEUwMDAwM0MKLToxMDNENzAwMDhGOEQwMDcwQTQ4NTAwMDhBQzhEMDAwNDNDMDMwODAxMDEKLToxMDNEODAwMDkwNjM5NTBDMTQ2MDAwNzcwMDAwOTAyMTNDMDEwODAxQkQKLToxMDNEOTAwMEEwMjU5NTBDQTA4NzAwMEI4RjhDMDA3NDAwQ0M1MDIxQkYKLToxMDNEQTAwMEExNDcwMDBBOEY4MjAwMzRBMDQ3MDBGRDhGODQwMDM0QjEKLToxMDNEQjAwMEEwODcwMEZFOEY4NjAwMzQ4RjlGMDA2Q0FDREYwMDU0MUMKLToxMDNEQzAwMDhGOTkwMDcwQUNEOTAwNTg4RjhEMDA3NDAxMjdDMDIxRTUKLToxMDNERDAwMDAwMTg1ODgwMDE2REEwMjE5MjhGMDAwQTAwMEY3MDQwREEKLToxMDNERTAwMDAxQ0YxODIxMDAwMzg4ODAwMjJEODAyMUEyMDcwMDBCM0IKLToxMDNERjAwMDhGODYwMDc0MDE2NjYwMjE5MThBMDAwQjAwMEExMDQwRDIKLToxMDNFMDAwMDAwNEEyMDIxMDAwNDI4ODAwMEE2NDAyMUExMDcwMDBBQzIKLToxMDNFMTAwMDNDMDc4MDA4MzRFOTAwODA4RDIyMDAzMDhGODYwMDM0MTIKLToxMDNFMjAwMEFDQzIwMDVDMEEwMDIyMjAyNDE0MDAwMTkwQ0EwMEZGRUEKLToxMDNFMzAwMDE1NDBGRUFEOEY4ODAwNzBBMEM0MDAwOTBBMDAyMTY1RkUKLToxMDNFNDAwMDhGODYwMDM0QTBDMDAwRkQ4Rjk4MDAzNDI0MDYwMDAxNDYKLToxMDNFNTAwMEEzMDAwMEZFM0MwMTA4MDFBMDI2OTUwRDNDMDEwODAxQ0QKLToxMDNFNjAwMEEwMjA5NTBDMEEwMDIxNTQwMDAwMDAwMDkwQ0IwMEZGMTgKLToxMDNFNzAwMDNDMDQwODAxOTA4NDk1MkIzMTZDMDBGRjAxODQ1MDJCODkKLToxMDNFODAwMDE1NDAwMDBGMjQwMjAwMDMyNDAyMDAwNEEwQzIwMDA5MTAKLToxMDNFOTAwMDBBMDAyMTY1OEY4NjAwMzQ5MEMzMDAwQTI0MTBGRjgwMzkKLToxMDNFQTAwMDAyMDM1ODI0MzE2QzAwRkYxMTgwRkRDMTAwMDAwMDAwQTYKLToxMDNFQjAwMDNDMDEwODAxQTAyMDk1MEQwQTAwMjE1NDAwMDAwMDAwREIKLToxMDNFQzAwMEEwQzIwMDA5MEEwMDIxNjU4Rjg2MDAzNDkwRDQwMDBBNDAKLToxMDNFRDAwMDI0MTJGRjgwMDI1NDQ4MjQzMTI4MDBGRjE1MDBGRkY0MEIKLToxMDNFRTAwMDI0MDIwMDA4M0MwMTA4MDFBMDIyOTUyOTBBMDAyMTY1NEUKLToxMDNFRjAwMDAwMDAwMDAwMDAxMDg4NDA4RjhCMDA2QzAyMzAxODIxRjkKLToxMDNGMDAwMDAwMDM2ODgwMDFBNzIwMjFBQzhCMDAwMDhGOEEwMDcwMUQKLToxMDNGMTAwMDI0MEMwMDAxQTQ4QzAwMDhBQzhBMDAwNDNDMDUwODAxQjQKLToxMDNGMjAwMDkwQTU5NTBFMjQwMjAwMDExMEEyRkUxRTI0QTVGRkZGRkQKLToxMDNGMzAwMDBBMDAyMURGOTA4NDAwMEIwMTg0QTAyMzFBODBGRDhCRUUKLToxMDNGNDAwMDAwMDAwMDAwM0MwMTA4MDFBMDJFOTUwRDBBMDAyMjkzRkMKLToxMDNGNTAwMDI0MEIwMDAxM0MwMTA4MDFBNDI1OTUzMjBBMDAyMzQ1RTkKLToxMDNGNjAwMDhGODgwMDM0MjQwQjAwMDExMDZCMDAyMjhGOTgwMDM0REUKLToxMDNGNzAwMDhGODUwMDM0OTBCRjAwRkYzM0Y5MDBGRjEwNzkwMDJCQ0MKLToxMDNGODAwMDAwMDAwMDAwM0MxRjA4MDE5M0ZGOTUxMDAwMUZDODQwNkYKLToxMDNGOTAwMDAzM0ZDMDIxMDAxOEEwODAwMjg4NzgyMTkxRUUwMDBBMUEKLToxMDNGQTAwMEEwOEUwMDBBOEY4RDAwNzQzQzAzMDgwMTkwNjM5NTEwNjkKLToxMDNGQjAwMDAwQ0Q4ODIxMEEwMDIzNkJBMjIzMDAwQjI2MzAwMDAxQ0MKLToxMDNGQzAwMDA2MDAwMDMxMDFBNDkwMjMwNjQwMDAyQjI0MDIwMDAzQzgKLToxMDNGRDAwMDNDMDEwODAxQTAyRjk1MEQwQTAwMjI5MzI0MEIwMDAxM0IKLToxMDNGRTAwMDhGODkwMDM0MEEwMDIxQzlBRDI3MDA1NDBBMDAyMjFGMUUKLToxMDNGRjAwMDI0MTIwMDAxOTMxNDAwRkRBMDk0MDAwQjhGODgwMDM0NUMKLToxMDQwMDAwMDhGOEYwMDc0OTEwRTAwRkUwMENGNjgyMUExQUUwMDBBRDAKLToxMDQwMTAwMDhGOTEwMDM0QTIyNzAwRkQ4RjgzMDA2QzhGOTAwMDM0QjUKLToxMDQwMjAwMEFFMDMwMDU0MEEwMDIzNkM4RjhEMDA3NDkwQjAwMEZFMjQKLToxMDQwMzAwMEEwOTAwMDBBOEY4QjAwMzQ4RjhDMDA3NDkxNkEwMEZENzEKLToxMDQwNDAwMDAwQ0MxMDIxQTA0QTAwMEI4Rjg0MDAzNEEwODcwMEZFMTIKLToxMDQwNTAwMDhGODYwMDcwOEY4NTAwMzRBQ0E2MDA1ODBBMDAyMzZDNTAKLToxMDQwNjAwMDhGOEQwMDc0OTRCODAwMDhBQ0E0MDAwNDAzMDM3ODIxNzkKLToxMDQwNzAwMDBBMDAyMjEzQTRBRjAwMDgzQzAxMDgwMUEwMjI5NTBERkMKLToxMDQwODAwMDBBMDAyMTU0MDAwMDAwMDA5MENGMDAwOTI0MEQwMDA0MTQKLToxMDQwOTAwMDMxRUUwMEZGMTFDREZEODUyNDAyMDAwMTNDMDEwODAxMzUKLTowQzQwQTAwMEEwMjI5NTBEMEEwMDIxNTQwMDAwMDAwMDMxCi06MDQ0MEFDMDAwODAwMzM0NDkxCi06MTA0MEIwMDAwODAwMzM0NDA4MDAzNDIwMDgwMDMzRjQwODAwMzNEOEUzCi06MTA0MEMwMDAwODAwMzMyODA4MDAzMzI4MDgwMDMzMjgwODAwMzM0QzQwCi06MTA0MEQwMDA4MDA4MDEwMDgwMDgwMDgwODAwODAwMDA1Rjg2NTQzNzU3Ci06MTA0MEUwMDBFNEFDNjJDQzUwMTAzQTQ1MzY2MjE5ODVCRjE0QzBFODgyCi06MTA0MEYwMDAxQkMyN0ExRTg0RjRCNTU2MDk0RUE2RkU3RERBMDFFNzhFCi06MTA0MTAwMDBDMDRENzQ4MTA4MDA1OEQwMDgwMDU5MTQwODAwNThCOEYwCi06MTA0MTEwMDAwODAwNThCODA4MDA1OEI4MDgwMDU4QjgwODAwNThEMDI3Ci06MTA0MTIwMDAwODAwNThCODA4MDA1OEI4MDgwMDU5MUMwODAwNThCOENBCi06MTA0MTMwMDAwODAwNTgzMDA4MDA1OEI4MDgwMDU4QjgwODAwNTkxQzQyCi06MTA0MTQwMDAwODAwNThCODA4MDA1OEI4MDgwMDU4QjgwODAwNThCODBGCi06MTA0MTUwMDAwODAwNThCODA4MDA1OEI4MDgwMDU4QjgwODAwNThCOEZGCi06MTA0MTYwMDAwODAwNThCODA4MDA1OEI4MDgwMDU4RjAwODAwNThCOEI3Ci06MTA0MTcwMDAwODAwNThGMDA4MDA1OEI4MDgwMDU4QjgwODAwNThCOEE3Ci06MTA0MTgwMDAwODAwNThGNDA4MDA1OEYwMDgwMDU4QjgwODAwNThCODVCCi06MTA0MTkwMDAwODAwNThCODA4MDA1OEI4MDgwMDU4QjgwODAwNThCOEJGCi06MTA0MUEwMDAwODAwNThCODA4MDA1OEI4MDgwMDU4QjgwODAwNThCOEFGCi06MTA0MUIwMDAwODAwNThCODA4MDA1OEI4MDgwMDU4QjgwODAwNThCODlGCi06MTA0MUMwMDAwODAwNThCODA4MDA1OEI4MDgwMDU4QjgwODAwNThCODhGCi06MTA0MUQwMDAwODAwNThCODA4MDA1OEI4MDgwMDU4RjQwODAwNThGNDA3Ci06MTA0MUUwMDAwODAwNThCODA4MDA1OEY0MDgwMDU4QjgwODAwNThCODMzCi06MTA0MUYwMDAwODAwNThCODA4MDA1OEI4MDgwMDU4QjgwODAwNThCODVGCi06MTA0MjAwMDAwODAwNThCODA4MDA1OEI4MDgwMDU4QjgwODAwNThCODRFCi06MTA0MjEwMDAwODAwNThCODA4MDA1OEI4MDgwMDU4QjgwODAwNThCODNFCi06MTA0MjIwMDAwODAwNThCODA4MDA1OEI4MDgwMDU4QjgwODAwNThCODJFCi06MTA0MjMwMDAwODAwNThCODA4MDA1OEI4MDgwMDU4QjgwODAwNThCODFFCi06MTA0MjQwMDAwODAwNThCODA4MDA1OEI4MDgwMDU4QjgwODAwNThCODBFCi06MTA0MjUwMDAwODAwNThCODA4MDA1OEI4MDgwMDU4QjgwODAwNThCOEZFCi06MTA0MjYwMDAwODAwNThCODA4MDA1OEI4MDgwMDU4QjgwODAwNThCOEVFCi06MTA0MjcwMDAwODAwNThCODA4MDA1OEI4MDgwMDU4QjgwODAwNThCOERFCi06MTA0MjgwMDAwODAwNThCODA4MDA1OEI4MDgwMDU4QjgwODAwNThCOENFCi06MTA0MjkwMDAwODAwNThCODA4MDA1OEI4MDgwMDU4QjgwODAwNThCOEJFCi06MTA0MkEwMDAwODAwNThCODA4MDA1OEI4MDgwMDU4QjgwODAwNThCOEFFCi06MTA0MkIwMDAwODAwNThCODA4MDA1OEI4MDgwMDU4QjgwODAwNThCODlFCi06MTA0MkMwMDAwODAwNThCODA4MDA1OEI4MDgwMDU4QjgwODAwNThCODhFCi06MTA0MkQwMDAwODAwNThCODA4MDA1OEI4MDgwMDU4QjgwODAwNThCODdFCi06MTA0MkUwMDAwODAwNThCODA4MDA1OEI4MDgwMDU4QjgwODAwNThCODZFCi06MTA0MkYwMDAwODAwNThCODA4MDA1OEI4MDgwMDU4QjgwODAwNThCODVFCi06MTA0MzAwMDAwODAwNThCODA4MDA1OTM4MDgwMDc2ODgwODAwNzhFQzhBCi06MTA0MzEwMDAwODAwNzY5NDA4MDA3NDg4MDgwMDc2OTQwODAwNzcyMEQ2Ci06MTA0MzIwMDAwODAwNzY5NDA4MDA3NDg4MDgwMDc0ODgwODAwNzQ4ODZGCi06MTA0MzMwMDAwODAwNzQ4ODA4MDA3NDg4MDgwMDc0ODgwODAwNzQ4ODZECi06MTA0MzQwMDAwODAwNzQ4ODA4MDA3NDg4MDgwMDc0ODgwODAwNzZCNDJGCi06MTA0MzUwMDAwODAwNzZBNDA4MDA3NDg4MDgwMDc0ODgwODAwNzQ4ODJGCi06MTA0MzYwMDAwODAwNzQ4ODA4MDA3NDg4MDgwMDc0ODgwODAwNzQ4ODNECi06MTA0MzcwMDAwODAwNzQ4ODA4MDA3NDg4MDgwMDc0ODgwODAwNzQ4ODJECi06MTA0MzgwMDAwODAwNzQ4ODA4MDA3NkE0MDgwMDgxMzQwODAwN0ZDMDAzCi06MTA0MzkwMDAwODAwODBGQzA4MDA3RkMwMDgwMDgwQ0MwODAwN0VBOEQwCi06MTA0M0EwMDAwODAwN0ZDMDA4MDA3RkMwMDgwMDdGQzAwODAwN0ZDMEYxCi06MTA0M0IwMDAwODAwN0ZDMDA4MDA3RkMwMDgwMDdGQzAwODAwN0ZDMEUxCi06MTA0M0MwMDAwODAwN0ZDMDA4MDA3RkMwMDgwMDdGQzAwODAwN0ZDMEQxCi06MTA0M0QwMDAwODAwN0ZFODA4MDA4QjZDMDgwMDhDQzgwODAwOENBOEQ3Ci06MDg0M0UwMDAwODAwODcxMDA4MDA4Qjg0MUYKLTowODQzRTgwMDBBMDAwMTI0MDAwMDAwMDA5RQotOjEwNDNGMDAwMDAwMDAwMDAwMDAwMDAwRDc0NzA2MTM2MkUzMDJFMzE3OAotOjEwNDQwMDAwMzcwMDAwMDAwNjAwMTEwMTAwMDAwMDAwMDAwMDAwMDA1RAotOjEwNDQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QwotOjEwNDQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QwotOjEwNDQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QwotOjEwNDQ0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QwotOjEwNDQ1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QwotOjEwNDQ2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QwotOjEwNDQ3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDMyOQotOjEwNDQ4MDAwMDAwMDAwMDAwMDAwMDAwRDAwMDAwMDBEM0MwMjA4MDBDQwotOjEwNDQ5MDAwMjQ0MjE3MjAzQzAzMDgwMDI0NjMyQTEwQUM0MDAwMDA4QgotOjEwNDRBMDAwMDA0MzIwMkIxNDgwRkZGRDI0NDIwMDA0M0MxRDA4MDAyMwotOjEwNDRCMDAwMzdCRDJGRkMwM0EwRjAyMTNDMTAwODAwMjYxMDA0OTAwQgotOjEwNDRDMDAwM0MxQzA4MDAyNzlDMTcyMDBFMDAwMjYyMDAwMDAwMDAyMAotOjEwNDREMDAwMDAwMDAwMEQyNDAyRkY4MDI3QkRGRkUwMDA4MjEwMjRCMQotOjEwNDRFMDAwQUZCMDAwMTBBRjQyMDAyMEFGQkYwMDE4QUZCMTAwMTQ1MgotOjEwNDRGMDAwOTM2NTAwMDQzMDg0MDA3RjAzNDQxODIxM0MwMjAwMDhDNwotOjEwNDUwMDAwMDA2MjE4MjEzMEE1MDAyMDAzNjA4MDIxM0MwODAxMTFDMQotOjEwNDUxMDAwMjc3QjAwMDgxNEEwMDAwMjI0NjYwMDVDMjQ2NjAwNTg3MwotOjEwNDUyMDAwOTIwMjAwMDQ5NzQzMDEwNDkyMDQwMDA0MzA0NzAwMEZGNAotOjEwNDUzMDAwMzA2M0ZGRkYzMDg0MDA0MDAwNjcyODIzMTA4MDAwMDlBQgotOjEwNDU0MDAwMDAwMDQ4MjE5MjAyMDAwNTMwNDIwMDA0MTA0MDAwMDU5RQotOjEwNDU1MDAwMDAwMDAwMDAxMEEwMDAwMzAwMDAwMDAwMjRBNUZGRkNFNAotOjEwNDU2MDAwMjQwOTAwMDQ5MjAyMDAwNTMwNDIwMDA0MTA0MDAwMTJBOQotOjEwNDU3MDAwMDAwMDAwMDAxMEEwMDAxMDAwMDAwMDAwOTYwMjAwMDJFMQotOjEwNDU4MDAwMDBBNzIwMjEwMTA0NDAyNTI0NDJGRkZFQTc0MjEwMTY2NwotOjEwNDU5MDAwOTIwMzAwMDQyNDAyRkY4MDAwNDMxMDI0MzA0MjAwRkZGNQotOjEwNDVBMDAwMTA0MDAwMDMzQzAyMDQwMDBBMDAwMTc0MDEwMjQwMjU4RgotOjEwNDVCMDAwOENDMjAwMDBBRjQyMTAxODhGNDIwMTc4MDQ0MEZGRkUwOQotOjEwNDVDMDAwMjQwMjAwMEFBNzQyMDE0MDk2MDIwMDAyMjQwNDAwMDlDNgotOjEwNDVEMDAwMzA0MjAwMDcwMDAyMTAyMzMwNDIwMDA3QTc0MjAxNDI4OAotOjEwNDVFMDAwOTYwMjAwMDIyNDQyRkZGRUE3NDIwMTQ0QTc0MDAxNDY3MgotOjEwNDVGMDAwOTc0MjAxMDRBNzQyMDE0ODhGNDIwMTA4MzA0MjAwMjAzRgotOjEwNDYwMDAwNTA0MDAwMDEyNDA0MDAwMTkyMDIwMDA0MzA0MjAwMTBENgotOjEwNDYxMDAwMTQ0MDAwMDIzNDgzMDAxMDAwODAxODIxQTc0MzAxNEE4RgotOjEwNDYyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QQotOjEwNDYzMDAwQUY0ODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MwotOjEwNDY0MDAwMDAwMDAwMDA4RjQyMTAwMDA0NDFGRkZFMzEwMkZGRkYxNgotOjEwNDY1MDAwMTA0MDAwMDcwMDAwMDAwMDkyMDIwMDA0MzA0MjAwNDBCOQotOjEwNDY2MDAwMTQ0MDAwMDMwMDAwMDAwMDhGNDIxMDE4QUNDMjAwMDA4QwotOjEwNDY3MDAwOTYwMjAwMDYzMDQyRkZGRjI0NDIwMDAyMDAwMjEwNDM2RgotOjEwNDY4MDAwMDAwMjEwNDAwMzYyODgyMTk2MjIwMDAwMTEyMDAwMERENAotOjEwNDY5MDAwMzA0NEZGRkYwMEE3MTAyMThGODMwMDM4OEY0NTEwMUM4NgotOjEwNDZBMDAwMDAwMjEwODIwMDAyMTA4MDAwNDMxMDIxQUM0NTAwMDA3RgotOjEwNDZCMDAwMzBBNkZGRkYwRTAwMDU4RDAwMDUyQzAyMDA0MDIwMjFEMgotOjEwNDZDMDAwQTYyMjAwMDA5MjAzMDAwNDI0MDJGRjgwMDA0MzEwMjQ2RAotOjEwNDZEMDAwMzA0MjAwRkYxMDQwMDAxRjAwMDAwMDAwOTIwMjAwMDU2MQotOjEwNDZFMDAwMzA0MjAwMDIxMDQwMDAxQjAwMDAwMDAwOTc0MjEwMENGNgotOjEwNDZGMDAwMjQ0MkZGRkVBNzQyMTAxNjAwMDAwMDAwM0MwMjA0MDAwNgotOjEwNDcwMDAwMzQ0MjAwMzBBRjQyMTAwMDAwMDAwMDAwMDAwMDAwMDAwMgotOjEwNDcxMDAwMDAwMDAwMDAwMDAwMDAwMDhGNDIxMDAwMDQ0MUZGRkU3NgotOjEwNDcyMDAwMDAwMDAwMDA5NzQyMTAwQzhGNDUxMDFDMzA0MkZGRkYyNAotOjEwNDczMDAwMjQ0MjAwMzAwMDAyMTA4MjAwMDIxMDgwMDA1QjEwMjEzMQotOjEwNDc0MDAwQUM0NTAwMDAzMEE2RkZGRjBFMDAwNThEMDAwNTJDMDJEMQotOjEwNDc1MDAwQTYyMjAwMDA5NjA0MDAwMjI0ODQwMDA4MEUwMDAxRTk0RAotOjEwNDc2MDAwMzA4NEZGRkY5NzQ0MDEwNDBFMDAwMUY3MzA4NEZGRkZGRgotOjEwNDc3MDAwOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwM0MwMjEwMDBFMgotOjEwNDc4MDAwMjdCRDAwMjAwM0UwMDAwOEFGNDIwMTc4MzA4NEZGRkYxRQotOjEwNDc5MDAwMzA4MjAwMDc4Rjg1MDAyNDEwNDAwMDAyMjQ4MzAwMDcyOAotOjEwNDdBMDAwMzA2NEZGRjgwMEE0MTAyMTMwNDIxRkZGMDM0MjE4MjE5QgotOjEwNDdCMDAwMjQ3QjQwMDBBRjg1MDAyOEFGODIwMDI0MDNFMDAwMDg3RQotOjEwNDdDMDAwQUY0MjAwODQzMDg0RkZGRjMwODIwMDBGOEY4NTAwMkNDMQotOjEwNDdEMDAwOEY4NjAwMzQxMDQwMDAwMjI0ODMwMDBGMzA2NEZGRjAwNQotOjEwNDdFMDAwMDBBNDEwMjEwMDQ2MTgyQkFGODUwMDMwMDA0NjIwMjM3RQotOjEwNDdGMDAwMTQ2MDAwMDJBRjgyMDAyQ0FGODQwMDJDOEY4MjAwMkM0QQotOjEwNDgwMDAwMzQwNDgwMDAwMzQyMTgyMTAwNjQxODIxQUY4MzAwMzg2QgotOjEwNDgxMDAwMDNFMDAwMDhBRjQyMDA4MDhGODIwMDE0MTA0MDAwMDhCRgotOjEwNDgyMDAwOEY4MjAwMDQ4RjgyRkZEQzE0NDAwMDA1OEY4MjAwMDQxOQotOjEwNDgzMDAwM0MwMkZGQkYzNDQyRkZGRjAwODIyMDI0OEY4MjAwMDQyRAotOjEwNDg0MDAwMzA0MzAwMDYyNDAyMDAwMjEwNjIwMDBGM0MwMjAxMDEwNgotOjEwNDg1MDAwMkM2MjAwMDM1MDQwMDAwNTI0MDIwMDA0MTA2MDAwMEY4OQotOjEwNDg2MDAwM0MwMjAwMDEwQTAwMDIzMDAwMDAwMDAwMTA2MjAwMDU1NgotOjEwNDg3MDAwMjQwMjAwMDYxNDYyMDAwQzNDMDIwMTExMEEwMDAyMjkwNQotOjEwNDg4MDAwMDA4MjEwMjUzQzAyMDAxMTAwODIxMDI1QUY0MjEwMDA2QQotOjEwNDg5MDAwMjQwMjAwMDEwQTAwMDIzMEFGODIwMDBDMDA4MjEwMjVDMQotOjEwNDhBMDAwQUY0MjEwMDBBRjgwMDAwQzAwMDAwMDAwMDAwMDAwMDBDQwotOjEwNDhCMDAwMDAwMDAwMDAwM0UwMDAwODAwMDAwMDAwOEY4MjAwMENGMAotOjEwNDhDMDAwMTA0MDAwMDQwMDAwMDAwMDhGNDIxMDAwMDQ0MUZGRkU3MQotOjEwNDhEMDAwMDAwMDAwMDAwM0UwMDAwODAwMDAwMDAwOEY4MjAwMTBDQwotOjEwNDhFMDAwMjQ0M0Y4MDAwMDAyMzFDMjI0QzJGRkYwMkM2MzAzMDEwQwotOjEwNDhGMDAwMTA2MDAwMDMwMDAyMTA0MjBBMDAwMjU3QUM4MjAwMDA2MAotOjEwNDkwMDAwOEY4NTAwMTgwMEM1MTAyQjE0NDAwMDBCMDAwMDE4MjFFMwotOjEwNDkxMDAwMDBDNTEwMjMyNDQ3MDAwMThGODIwMDFDMDBBMjEwMjEzMwotOjEwNDkyMDAwMjQ0MkZGRkYwMDQ2MTAyQjU0NDAwMDA0MjQwMkZGRkZFNgotOjEwNDkzMDAwMEEwMDAyNTdBQzg3MDAwMDI0MDJGRkZGMEEwMDAyNjA1MQotOjEwNDk0MDAwQUM4MjAwMDA4QzgyMDAwMDAwMDIxOTQwMDA2MjE4MjEzNQotOjEwNDk1MDAwMDAwMzE4ODAwMDYyMTgyMTAwMDMxODgwM0MwMjA4MDA0MAotOjEwNDk2MDAwMjQ0MjE3NUMwMDYyMTgyMTAzRTAwMDA4MDA2MDEwMjE1NwotOjEwNDk3MDAwMjdCREZGRDhBRkJGMDAyMEFGQjEwMDFDQUZCMDAwMThGQgotOjEwNDk4MDAwM0MwNDYwMDg4QzgyNTAwMDI0MDNGRjdGM0MwNjYwMDBEQQotOjEwNDk5MDAwMDA0MzEwMjQzNDQyMzgwQ0FDODI1MDAwOENDMjRDMUNCMgotOjEwNDlBMDAwM0MxQTgwMDAwMDAyMTYwMjMwNDIwMDBGMTA0MDAwMDczRgotOjEwNDlCMDAwQUY4MjAwMUM4Q0MzNEMxQzNDMDIwMDFGMzQ0MkZDMDAyNAotOjEwNDlDMDAwMDA2MjE4MjQwMDAzMTlDMkFGODMwMDE4OEY0MjAwMDg0OAotOjEwNDlEMDAwMjc1QjQwMDAzNDQyMDAwMUFGNDIwMDA4QUY4MDAwMjQ1MgotOjEwNDlFMDAwM0MwMjYwMUNBRjQwMDA4MEFGNDAwMDg0OEM0NTAwMDg1MgotOjEwNDlGMDAwOENDMzA4MDgzNDAyODAwMDAzNDIyMDIxMjQwMkZGRjAwNwotOjEwNEEwMDAwMDA2MjE4MjQzQzAyMDA4MDNDMDEwODAwQUMyMjA0MjAxMwotOjEwNEExMDAwM0MwMjU3MDlBRjg0MDAzODE0NjIwMDA0QUY4NTAwMzRBQgotOjEwNEEyMDAwMjQwMjAwMDEwQTAwMDI5MkFGODIwMDE0QUY4MDAwMTQzOQotOjEwNEEzMDAwOEY0MjAwMDAzODQyMDAwMTMwNDIwMDAxMTQ0MEZGRkM2OAotOjEwNEE0MDAwOEY4MjAwMTQxMDQwMDAxNjAwMDAwMDAwOTc0MjAxMDRGRAotOjEwNEE1MDAwMTA0MDAwMDU4RjgzMDAwMDE0NjAwMDA3MjQ2MkZGRkZGMAotOjEwNEE2MDAwMEEwMDAyQTcyQzYyMDAwQTJDNjIwMDEwNTA0MDAwMDRDOQotOjEwNEE3MDAwOEY4MzAwMDAyNDYyMDAwMUFGODIwMDAwOEY4MzAwMDA1QQotOjEwNEE4MDAwMkM2MjAwMEExNDQwMDAwMzJDNjIwMDA3MEEwMDAyQUVFOAotOjEwNEE5MDAwQUY4MEZGREMxMDQwMDAwMjI0MDIwMDAxQUY4MkZGREM4NwotOjEwNEFBMDAwOEY0MzAxMDg4RjQ0MDEwMDMwNjIyMDAwQUY4MzAwMDQ2RgotOjEwNEFCMDAwMTA0MDAwMDhBRjg0MDAxMDNDMDIwODAwOEM0MjA0MkMxNwotOjEwNEFDMDAwMjQ0MjAwMDEzQzAxMDgwMEFDMjIwNDJDMEEwMDA1OEFBMwotOjEwNEFEMDAwM0MwMjQwMDAzMDY1MDIwMDE0QTAwMDAzMjQwMjBGMDBENQotOjEwNEFFMDAwMTQ4MjAyNjAyNDAyMEQwMDk3NDIwMTA0MTA0MDAyQzhBMwotOjEwNEFGMDAwM0MwMjQwMDAzMDYyNDAwMDE0NDAwMEFEOEY4MjAwMzgxQwotOjEwNEIwMDAwOEM0NDAwMDg4RjQyMDE3ODA0NDBGRkZFMjQwMjA4MDAxNAotOjEwNEIxMDAwQUY0MjAxNzgyNDAyMDAwOEE3NDIwMTQwQTc0MDAxNDJBOQotOjEwNEIyMDAwOTc0MjAxMDQ4Rjg0MDAwNDMwNTFGRkZGMzA4MjAwMDE1RQotOjEwNEIzMDAwMTA0MDAwMDcwMjIwODAyMTI2MjNGRkZFMjQwMjAwMDJFRAotOjEwNEI0MDAwMzA3MEZGRkZBNzQyMDE0NjBBMDAwMkRCQTc0MzAxNDg3RAotOjEwNEI1MDAwQTc0MDAxNDYzQzAyMDgwMDhDNDIwNDNDMTQ0MDAwMEQ3MgotOjEwNEI2MDAwOEY4MzAwMTAzMDgyMDAyMDE0NDAwMDAyMjQwMzAwMDlDQgotOjEwNEI3MDAwMjQwMzAwMDEwMDYwMjAyMThGODMwMDEwMjQwMjA5MDAxQgotOjEwNEI4MDAwNTA2MjAwMDEzNDg0MDAwNEE3NDQwMTRBMEEwMDAyRjY3RQotOjEwNEI5MDAwMDAwMDAwMDAyNDAyMEYwMDE0NjIwMDA1MzA4MjAwMjA5MwotOjEwNEJBMDAwMTQ0MDAwMDYyNDAzMDAwRDBBMDAwMkY1MjQwMzAwMDU0QQotOjEwNEJCMDAwMTQ0MDAwMDIyNDAzMDAwOTI0MDMwMDAxQTc0MzAxNEExMgotOjEwNEJDMDAwM0MwMjA4MDA4QzQyMDQyMDNDMDQwMDQ4MEUwMDAyMEMwOQotOjEwNEJEMDAwMDA0NDIwMjUwRTAwMDIzNTAwMDAwMDAwOEY4MjAwMENFQQotOjEwNEJFMDAwMTA0MDAwM0UwMDAwMDAwMDhGNDIxMDAwM0MwMzAwMjBGNwotOjEwNEJGMDAwMDA0MzEwMjQxMDQwMDAzOThGODIwMDA0MzA0MjAwMDIyQwotOjEwNEMwMDAwMTA0MDAwMzYwMDAwMDAwMDk3NDIxMDE0MTQ0MDAwMzM5QQotOjEwNEMxMDAwMDAwMDAwMDA5NzQyMTAwODhGODgwMDM4MzA0MkZGRkZFNAotOjEwNEMyMDAwMjQ0MjAwMDYwMDAyMTg4MjAwMDMzODgwMDBFODMwMjE4OAotOjEwNEMzMDAwMzA0MzAwMDE4Q0M0MDAwMDEwNjAwMDA0MzA0MjAwMDNDNwotOjEwNEM0MDAwMDAwMDAwMEQwQTAwMDMzNzAwRTgxMDIxNTQ0MDAwMTA1NgotOjEwNEM1MDAwMzA4NEZGRkYzQzA1RkZGRjAwODUyMDI0MDA4NTE4MjZENwotOjEwNEM2MDAwMDAwMzE4MkIwMDA0MTAyQjAwNDMxMDI0MTA0MDAwMDVGMwotOjEwNEM3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMDAwMDAwMDAyNwotOjEwNEM4MDAwMjQwMDAyMjI4Q0MyMDAwMDBBMDAwMzM2MDA0NTIwMjVDMQotOjEwNEM5MDAwMzg4M0ZGRkYwMDAzMTgyQjAwMDQxMDJCMDA0MzEwMjQ1RgotOjEwNENBMDAwMTA0MDAwMDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERBMgotOjEwNENCMDAwMDAwMDAwMDAyNDAwMDIyQjhDQzIwMDAwMzQ0NEZGRkZERgotOjEwNENDMDAwMDBFODEwMjFBQzQ0MDAwMDNDMDIwODAwOEM0MjA0MzA5MwotOjEwNENEMDAwMjQ0MjAwMDEzQzAxMDgwMEFDMjIwNDMwOEY2MjAwMDAzNQotOjEwNENFMDAwOEY4NDAwMzhBRjgyMDAwODhDODMwMDAwMzQwMkZGRkZGRAotOjEwNENGMDAwMTQ2MjAwMEYwMDAwMTAyMTNDMDUwODAwOENBNTA0NTQyQwotOjEwNEQwMDAwM0MwNDA4MDA4Qzg0MDQ1MDAwQjAyODIxMDBCMDMwMkJGMwotOjEwNEQxMDAwMDA4MjIwMjEwMDg2MjAyMTNDMDEwODAwQUMyNTA0NTQ5QgotOjEwNEQyMDAwM0MwMTA4MDBBQzI0MDQ1MDBBMDAwNTgwMjQwNDAwMDg1QgotOjEwNEQzMDAwOEM4MjAwMDAzMDQyMDEwMDEwNDAwMDBGMDAwMDEwMjE2MgotOjEwNEQ0MDAwM0MwNTA4MDA4Q0E1MDQ0QzNDMDQwODAwOEM4NDA0NDhGNQotOjEwNEQ1MDAwMDBCMDI4MjEwMEIwMzAyQjAwODIyMDIxMDA4NjIwMjFDNQotOjEwNEQ2MDAwM0MwMTA4MDBBQzI1MDQ0QzNDMDEwODAwQUMyNDA0NDg3QwotOjEwNEQ3MDAwMEEwMDA1ODAyNDA0MDAwODNDMDUwODAwOENBNTA0NDRCMgotOjEwNEQ4MDAwM0MwNDA4MDA4Qzg0MDQ0MDAwQjAyODIxMDBCMDMwMkI4MwotOjEwNEQ5MDAwMDA4MjIwMjEwMDg2MjAyMTNDMDEwODAwQUMyNTA0NDQyQgotOjEwNERBMDAwM0MwMTA4MDBBQzI0MDQ0MDBBMDAwNTgwMjQwNDAwMDhFQgotOjEwNERCMDAwOEY2MjAwMDg4RjYyMDAwMDAwMDIxNjAyMzA0MzAwRjA4QwotOjEwNERDMDAwMjQwMjAwMzAxMDYyMDAwNTI0MDIwMDQwMTA2MjAwRTA1RQotOjEwNEREMDAwOEY4MjAwMjAwQTAwMDU4ODI0NDIwMDAxMTRBMDAwMDVFQgotOjEwNERFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMDAwMDAwMDBCNgotOjEwNERGMDAwMjQwMDAyNTY4RjQyMDE3ODA0NDBGRkZFMDAwMDAwMDBBQwotOjEwNEUwMDAwMEUwMDAyM0QyN0E0MDAxMDE0NDAwMDA1MDA0MDgwMjE0MAotOjEwNEUxMDAwMDAwMDAwMDAwMDAwMDAwRDAwMDAwMDAwMjQwMDAyNUQwMgotOjEwNEUyMDAwOEUwMjAwMDAxMDQwMDAwNTAwMDAwMDAwMDAwMDAwMDA5RAotOjEwNEUzMDAwMDAwMDAwMEQwMDAwMDAwMDI0MDAwMjYwOEY2MjAwMENFMgotOjEwNEU0MDAwMDQ0MzAwMDMyNDAyMDAwMTBBMDAwNDJFQUUwMDAwMDAwNwotOjEwNEU1MDAwQUUwMjAwMDA4RjgyMDAzODhDNDgwMDA4QTIwMDAwMDdENAotOjEwNEU2MDAwOEY2NTAwMEM4RjY0MDAwNDMwQTNGRkZGMDAwNDI0MDI1MAotOjEwNEU3MDAwMDA4NTIwMjMzMDgyMDBGRjAwNDMxMDIxMjQ0MjAwMDVEQQotOjEwNEU4MDAwMDAwMjMwODMyQ0MyMDA4MUE2MDUwMDBBMTQ0MDAwMDVGMAotOjEwNEU5MDAwQTIwNDAwMDQwMDAwMDAwMDAwMDAwMDBEMDAwMDAwMDA1QgotOjEwNEVBMDAwMjQwMDAyNzg4Rjg1MDAzODBFMDAwNUFCMjYwNDAwMTQxQwotOjEwNEVCMDAwOEY2MjAwMDQ4RjQzMDEwOEE2MDIwMDA4M0MwMjEwMDAyNAotOjEwNEVDMDAwMDA2MjE4MjQxMDYwMDAwODAwMDAwMDAwOTc0MjAxMDRFRQotOjEwNEVEMDAwOTIwMzAwMDcyNDQyRkZFQzM0NjMwMDAyMzA0NUZGRkZEOQotOjEwNEVFMDAwMEEwMDAzQzNBMjAzMDAwNzk3NDIwMTA0MjQ0MkZGRjAxMwotOjEwNEVGMDAwMzA0NUZGRkY5NjA2MDAwODJDQzIwMDEzNTQ0MDAwMDUwMQotOjEwNEYwMDAwOTIwMzAwMDc5MjAyMDAwNzM0NDIwMDAxQTIwMjAwMDc0OAotOjEwNEYxMDAwOTIwMzAwMDcyNDAyMDAwMTEwNjIwMDA1MjQwMjAwMDMyRQotOjEwNEYyMDAwMTA2MjAwMEI4RjgyMDAzODBBMDAwM0UwMzBDNkZGRkZEQQotOjEwNEYzMDAwOEY4MjAwMzgzQzA0RkZGRjhDNDMwMDBDMDA2NDE4MjQ2RgotOjEwNEY0MDAwMDA2NTE4MjVBQzQzMDAwQzBBMDAwM0UwMzBDNkZGRkZFMwotOjEwNEY1MDAwM0MwNEZGRkY4QzQzMDAxMDAwNjQxODI0MDA2NTE4MjVGMgotOjEwNEY2MDAwQUM0MzAwMTAzMEM2RkZGRjI0QzIwMDAyMDAwMjEwODNEMQotOjEwNEY3MDAwQTIwMjAwMDU4RjgzMDAzODMwNDIwMEZGMDAwMjEwODAzQgotOjEwNEY4MDAwMDA0MzI4MjE4Q0E4MDAwMDhDQTIwMDAwMjQwMzAwMDQwOAotOjEwNEY5MDAwMDAwMjE3MDIxNDQzMDAxMjAwMDAwMDAwOTc0MjAxMDRBRgotOjEwNEZBMDAwM0MwM0ZGRkYwMTAzMTgyNDMwNDJGRkZGMDA0NjEwMjM5QgotOjEwNEZCMDAwMjQ0MkZGRkUwMDYyNDAyNUFDQTgwMDAwOTIwMzAwMDVEOQotOjEwNEZDMDAwMzA2MjAwRkYwMDAyMTA4MDAwNTAxMDIxOTA0MjAwMTQ1NwotOjEwNEZEMDAwMzA0MjAwMEYwMDQzMTAyMTBBMDAwNDE1QTIwMjAwMDYwRgotOjEwNEZFMDAwOENBNDAwMDQ5NzQyMDEwNDk2MDMwMDBBMzA4OEZGRkY1NgotOjEwNEZGMDAwMzA0MkZGRkYwMDQ2MTAyMzI0NDJGRkQ2MDAwMjE0MDA3NwotOjEwNTAwMDAwMDEwMjQwMjVBQ0E4MDAwNDkyMDIwMDA3OTIwNDAwMDVBQQotOjEwNTAxMDAwMjQ2MzAwMjgwMDAzMTg4MzAwNjQxODIxMzQ0MjAwMDQyQwotOjEwNTAyMDAwQTIwMzAwMDZBMjAyMDAwNzhGODIwMDA0MjQwM0ZGRkJGNAotOjEwNTAzMDAwMzQ0MjAwMDIwMDQzMTAyNEFGODIwMDA0OTIwMzAwMDZCMQotOjEwNTA0MDAwOEY4NzAwMzgwMDAzMTg4MDAwNzAxMDIxOEM0NDAwMjBFNgotOjEwNTA1MDAwM0MwMkZGRjYzNDQyRkZGRjAwODI0MDI0MDA2NzE4MjEyMwotOjEwNTA2MDAwQUUwNDAwMENBQzY4MDAwQzkyMDUwMDA2M0MwM0ZGN0YwOAotOjEwNTA3MDAwOEUwMjAwMEMwMDA1Mjg4MDAwQjAyMDIxMzQ2M0ZGRkY2MQotOjEwNTA4MDAwMDEwMzMwMjQ5NDg4MDAyNjAwQTcyODIxMDA0MzEwMjQxRgotOjEwNTA5MDAwQUUwMjAwMENBQzg2MDAyMEFDODgwMDI0QUNBODAwMTA0NgotOjEwNTBBMDAwMjQwMjAwMTBBNzQyMDE0MDI0MDIwMDAyQTc0MDAxNDI0RQotOjEwNTBCMDAwQTc0MDAxNDRBNzQyMDE0Njk3NDIwMTA0M0MwNDAwMDg2RQotOjEwNTBDMDAwMjQ0MkZGRkVBNzQyMDE0ODI0MDIwMDAxMEUwMDAyMEMwOAotOjEwNTBEMDAwQTc0MjAxNEE5NjAzMDAwQTkyMDIwMDA0MDA0MzEwMjFFRAotOjEwNTBFMDAwMjQ0MjAwMDIzMDQyMDAwNzAwMDIxMDIzMzA0MjAwMDczMQotOjEwNTBGMDAwMEUwMDAyMzVBRTAyMDAxMDhGNjIwMDAwM0MwMzA4MDA3MwotOjEwNTEwMDAwOEM2MzA0NDQyNDA0MDAxMEFGODIwMDA4OTc0MjAxMDQxOQotOjEwNTExMDAwMzA0MkZGRkYyNDQyRkZGRTAwNDAzODIxMDAwMjM3QzMyNwotOjEwNTEyMDAwM0MwMjA4MDA4QzQyMDQ0MDAwNjcxODIxMDA2NzI4MkJDRAotOjEwNTEzMDAwMDA0NjEwMjEwMDQ1MTAyMTNDMDEwODAwQUMyMzA0NDQyNgotOjEwNTE0MDAwM0MwMTA4MDBBQzIyMDQ0MDBBMDAwNTE1MDAwMDAwMDBFNAotOjEwNTE1MDAwMTRBMDAwMDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ4OQotOjEwNTE2MDAwMDAwMDAwMDAyNDAwMDMwQThGNDIwMTc4MDQ0MEZGRkU4MwotOjEwNTE3MDAwMDAwMDAwMDAwRTAwMDIzRDI3QTQwMDE0MTQ0MDAwMDVBQQotOjEwNTE4MDAwMDA0MDgwMjEwMDAwMDAwMDAwMDAwMDBEMDAwMDAwMDAzMQotOjEwNTE5MDAwMjQwMDAzMTE4RTAyMDAwMDU0NDAwMDA2OTIwMjAwMDcxMgotOjEwNTFBMDAwMDAwMDAwMDAwMDAwMDAwRDAwMDAwMDAwMjQwMDAzMUNBRgotOjEwNTFCMDAwOTIwMjAwMDczMDQyMDAwNDEwNDAwMDA1OEY4MjAwMDQ3NAotOjEwNTFDMDAwMjQwM0ZGRkIzNDQyMDAwMjAwNDMxMDI0QUY4MjAwMDQ5QQotOjEwNTFEMDAwOEY2MjAwMDQwNDQzMDAwODkyMDIwMDA3OTIwMjAwMDY1NgotOjEwNTFFMDAwOEUwMzAwMENBRTAwMDAwMDAwMDIxMDgwMDA1MDEwMjE2MQotOjEwNTFGMDAwQUM0MzAwMjA5MjAyMDAwNzMwNDIwMDA0NTQ0MDAwMDlGMgotOjEwNTIwMDAwOTYwMjAwMEE5MjAyMDAwNTNDMDMwMDAxMDAwMjEwODA5MQotOjEwNTIxMDAwMDA1MDEwMjE4QzQ2MDAxODAwQzMzMDIxQUM0NjAwMTgwNQotOjEwNTIyMDAwOTYwMjAwMEE5MjA2MDAwNDI3NzEwMDA4MDIyMDIwMjEzRAotOjEwNTIzMDAwMDBDMjMwMjEyNEM2MDAwNTI2MDUwMDE0MEUwMDA1QUI2RgotOjEwNTI0MDAwMDAwNjMwODI5MjA0MDAwNjhGNjUwMDA0M0MwMjdGRkY1NgotOjEwNTI1MDAwMDAwNDIwODAwMDkxMjAyMThDODMwMDA0MzQ0MkZGRkY1MQotOjEwNTI2MDAwMDBBMjI4MjQwMDY1MTgyMUFDODMwMDA0OTIwMjAwMDdFNAotOjEwNTI3MDAwOTIwNDAwMDU5MjAzMDAwNDMwNDIwMDA0MTA0MDAwMTQyMAotOjEwNTI4MDAwOTYwNzAwMDgzMDg0MDBGRjAwMDQyMDgwMDA5MTIwMjE1MAotOjEwNTI5MDAwOEM4NjAwMDQ5NzQyMDEwNDk2MDUwMDBBMzA2MzAwRkZFMwotOjEwNTJBMDAwMzA0MkZGRkYwMDQzMTAyMTAwNDUxMDIxMzBFM0ZGRkY5MwotOjEwNTJCMDAwMDA0MzEwMjMyNDQyRkZEODMwQzZGRkZGMDAwMjE0MDAzMQotOjEwNTJDMDAwMDBDMjMwMjVBQzg2MDAwNDBBMDAwNEM5OTIwMzAwMDcxRQotOjEwNTJEMDAwMzA4NTAwRkYwMDA1Mjg4MDAwQjEyODIxOENBNDAwMDA0MwotOjEwNTJFMDAwOTc0MjAxMDQzMDYzMDBGRjMwNDJGRkZGMDA0MzEwMjE2QQotOjEwNTJGMDAwMDA0NzEwMjMzQzAzRkZGRjAwODMyMDI0MzA0MkZGRkZDMAotOjEwNTMwMDAwMDA4MjIwMjVBQ0E0MDAwMDkyMDMwMDA3MjQwMjAwMDFDMwotOjEwNTMxMDAwMTA2MjAwMDYwMDAwMDAwMDI0MDIwMDAzMTA2MjAwMTE2OQotOjEwNTMyMDAwMDAwMDAwMDAwQTAwMDRFQzhFMDMwMDEwOTc0MjAxMDQwNAotOjEwNTMzMDAwOTIwMzAwMDQ5NjA1MDAwQThFMjQwMDBDMDA0MzEwMjFGRAotOjEwNTM0MDAwMDA0NTEwMjEyNDQyRkZGMjNDMDNGRkZGMDA4MzIwMjQ4QwotOjEwNTM1MDAwMzA0MkZGRkYwMDgyMjAyNUFFMjQwMDBDMEEwMDA0RUMzRQotOjEwNTM2MDAwOEUwMzAwMTA5NzQyMDEwNDkyMDMwMDA0OTYwNTAwMEE4MAotOjEwNTM3MDAwOEUyNDAwMTAwMDQzMTAyMTAwNDUxMDIxMjQ0MkZGRUUyRQotOjEwNTM4MDAwM0MwM0ZGRkYwMDgzMjAyNDMwNDJGRkZGMDA4MjIwMjVFMgotOjEwNTM5MDAwQUUyNDAwMTA4RTAzMDAxMDI0MDIwMDBBQTc0MjAxNDAzMAotOjEwNTNBMDAwQTc0MzAxNDI5NjAzMDAwQTkyMDIwMDA0M0MwNDAwNDAxNQotOjEwNTNCMDAwMDA0MzEwMjFBNzQyMDE0NEE3NDAwMTQ2OTc0MjAxMDQzRgotOjEwNTNDMDAwQTc0MjAxNDgyNDAyMDAwMTBFMDAwMjBDQTc0MjAxNEEzNAotOjEwNTNEMDAwMEUwMDAyMzUwMDAwMDAwMDhGNjIwMDAwOTIwMzAwMDRGRQotOjEwNTNFMDAwMDAwMDIwMjFBRjgyMDAwODk3NDIwMTA0OTYwNjAwMEFCRgotOjEwNTNGMDAwMzA0MkZGRkYwMDYyMTgyMTAwNjAyODIxM0MwMzA4MDBCMgotOjEwNTQwMDAwOEM2MzA0NDQzQzAyMDgwMDhDNDIwNDQwMDA2NTE4MjE2RgotOjEwNTQxMDAwMDA0NDEwMjEwMDY1MzgyQjAwNDcxMDIxM0MwMTA4MDA5MgotOjEwNTQyMDAwQUMyMzA0NDQzQzAxMDgwMEFDMjIwNDQwOTIwNDAwMDQ3NAotOjEwNTQzMDAwMDA4NjIwMjEyNDg0MDAwQTMwODRGRkZGMEUwMDAxRTk0OQotOjEwNTQ0MDAwMDAwMDAwMDA5NzQ0MDEwNDMwODRGRkZGMEUwMDAxRjdDNAotOjEwNTQ1MDAwMDAwMDAwMDAzQzAyMTAwMEFGNDIwMTc4MEEwMDA1ODdGRQotOjEwNTQ2MDAwOEY4MjAwMjAxNDgyMDAyNzMwNjIwMDA2OTc0MjAxMDREOAotOjEwNTQ3MDAwMTA0MDAwNjczQzAyNDAwMDMwNjI0MDAwMTA0MDAwMDVEMAotOjEwNTQ4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMDAwMDAwMDAwRgotOjEwNTQ5MDAwMjQwMDA0MjA4RjQyMDE3ODA0NDBGRkZFMjQwMjA4MDAwQgotOjEwNTRBMDAwQUY0MjAxNzgyNDAyMDAwOEE3NDIwMTQwQTc0MDAxNDIxMAotOjEwNTRCMDAwOEY4MjAwMDQ5NzQzMDEwNDMwNDIwMDAxMTA0MDAwMDcyRQotOjEwNTRDMDAwMzA3MEZGRkYyNjAzRkZGRTI0MDIwMDAyQTc0MjAxNDZDMAotOjEwNTREMDAwQTc0MzAxNDgwQTAwMDUzRjI0MDIwMDBEQTc0MDAxNDZFQQotOjEwNTRFMDAwMjQwMjAwMERBNzQyMDE0QThGNjIwMDAwMjQwNDAwMDgzNAotOjEwNTRGMDAwQUY4MjAwMDgwRTAwMDFFOTAwMDAwMDAwMEEwMDA1MTk1MwotOjEwNTUwMDAwMDIwMDIwMjExMDQwMDA0MjNDMDI0MDAwOTM2MjAwMDA1MwotOjEwNTUxMDAwMzA0MzAwRjAyNDAyMDAxMDEwNjIwMDA1MjQwMjAwNzBFNQotOjEwNTUyMDAwMTA2MjAwMzU4RjgyMDAyMDBBMDAwNTg4MjQ0MjAwMDFBNQotOjEwNTUzMDAwOEY2MjAwMDA5NzQzMDEwNDMwNTBGRkZGMzA3MUZGRkY3RQotOjEwNTU0MDAwOEY0MjAxNzgwNDQwRkZGRTMyMDIwMDA3MDAwMjEwMjM2MAotOjEwNTU1MDAwMzA0MjAwMDcyNDAzMDAwQTI2MDRGRkZFQTc0MzAxNDA0RgotOjEwNTU2MDAwQTc0MjAxNDJBNzQ0MDE0NEE3NDAwMTQ2QTc1MTAxNDg3MAotOjEwNTU3MDAwOEY0MjAxMDgzMDQyMDAyMDE0NDAwMDAyMjQwMzAwMDkzOQotOjEwNTU4MDAwMjQwMzAwMDFBNzQzMDE0QTBFMDAwMjBDM0MwNDAwNDAyMgotOjEwNTU5MDAwMEUwMDAyMzUwMDAwMDAwMDNDMDcwODAwOENFNzA0NDRDMAotOjEwNTVBMDAwMDIxMTEwMjEyNDQyRkZGRTNDMDYwODAwOENDNjA0NDA3NAotOjEwNTVCMDAwMDA0MDE4MjEwMEUzMzgyMTAwMDAxMDIxOEY2NTAwMDAxMQotOjEwNTVDMDAwMDBFMzQwMkIwMEMyMzAyMTI2MDQwMDA4MDBDODMwMjEyRgotOjEwNTVEMDAwMzA4NEZGRkZBRjg1MDAwODNDMDEwODAwQUMyNzA0NDQ3RAotOjEwNTVFMDAwM0MwMTA4MDBBQzI2MDQ0MDBFMDAwMUU5MDAwMDAwMDA2OAotOjEwNTVGMDAwMEEwMDA1MTkwMjIwMjAyMTBFMDAwMTNCMDAwMDAwMDBENgotOjEwNTYwMDAwOEY4MjAwMjAyNDQyMDAwMUFGODIwMDIwM0MwMjQwMDAzMwotOjEwNTYxMDAwQUY0MjAxMzgwQTAwMDI5MjAwMDAwMDAwMzA4NEZGRkYxMAotOjEwNTYyMDAwMzBDNkZGRkYwMDA1MkMwMDAwQTYyODI1Mzg4MkZGRkZBQQotOjEwNTYzMDAwMDA0NTEwMjEwMDQ1MjgyQjAwNDUxMDIxMDAwMjFDMDJDNgotOjEwNTY0MDAwMzA0MkZGRkYwMDQzMTAyMTAwMDIxQzAyMzA0MkZGRkZFNgotOjEwNTY1MDAwMDA0MzEwMjEzODQyRkZGRjAzRTAwMDA4MzA0MkZGRkYwMwotOjEwNTY2MDAwMzA4NEZGRkYzMEE1RkZGRjAwMDAxODIxMTA4MDAwMDdFNQotOjEwNTY3MDAwMDAwMDAwMDAzMDgyMDAwMTEwNDAwMDAyMDAwNDIwNDJCRgotOjEwNTY4MDAwMDA2NTE4MjEwQTAwMDVBMTAwMDUyODQwMDNFMDAwMDg3NAotOjEwNTY5MDAwMDA2MDEwMjExMEMwMDAwNjI0QzZGRkZGOENBMjAwMDA4RAotOjEwNTZBMDAwMjRBNTAwMDRBQzgyMDAwMDBBMDAwNUFCMjQ4NDAwMDQ5OQotOjEwNTZCMDAwMDNFMDAwMDgwMDAwMDAwMDEwQTAwMDA4MjRBM0ZGRkY4MgotOjEwNTZDMDAwQUM4NjAwMDAwMDAwMDAwMDAwMDAwMDAwMjQwMkZGRkY4NAotOjEwNTZEMDAwMjQ2M0ZGRkYxNDYyRkZGQTI0ODQwMDA0MDNFMDAwMDgzRgotOjA0NTZFMDAwMDAwMDAwMDBDNgotOjA0NTZFNDAwMDAwMDAwMDFDMQotOjA4NTZFODAwMEEwMDAwMkEwMDAwMDAwMDg2Ci06MTA1NkYwMDAwMDAwMDAwMDAwMDAwMDBENzQ3ODcwMzYyRTMwMkUzMTRFCi06MTA1NzAwMDAzNzAwMDAwMDA2MDAxMTAwMDAwMDAwMDAwMDAwMDEzNjE0Ci06MTA1NzEwMDAwMDAwRUE2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNGCi06MTA1NzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc5Ci06MTA1NzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY5Ci06MTA1NzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTYwMDAwMDAwMDQzCi06MTA1NzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ5Ci06MTA1NzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM5Ci06MTA1NzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5Ci06MTA1NzgwMDAwMDAwMTM4ODAwMDAwMDAwMDAwMDA1REMwMDAwMDAwMDlECi06MTA1NzkwMDAwMDAwMDAwMDEwMDAwMDAzMDAwMDAwMDAwMDAwMDAwREU5Ci06MTA1N0EwMDAwMDAwMDAwRDNDMDIwODAwMjQ0MjNEODgzQzAzMDgwMDM0Ci06MTA1N0IwMDAyNDYzNDAzQ0FDNDAwMDAwMDA0MzIwMkIxNDgwRkZGRERDCi06MTA1N0MwMDAyNDQyMDAwNDNDMUQwODAwMzdCRDdGRkMwM0EwRjAyMUVCCi06MTA1N0QwMDAzQzEwMDgwMDI2MTAwMEE4M0MxQzA4MDAyNzlDM0Q4OEFGCi06MTA1N0UwMDAwRTAwMDQ0RTAwMDAwMDAwMDAwMDAwMEQyN0JERkZCNEI1Ci06MTA1N0YwMDBBRkExMDAwMEFGQTIwMDA0QUZBMzAwMDhBRkE0MDAwQzRCCi06MTA1ODAwMDBBRkE1MDAxMEFGQTYwMDE0QUZBNzAwMThBRkE4MDAxQ0VBCi06MTA1ODEwMDBBRkE5MDAyMEFGQUEwMDI0QUZBQjAwMjhBRkFDMDAyQzhBCi06MTA1ODIwMDBBRkFEMDAzMEFGQUUwMDM0QUZBRjAwMzhBRkI4MDAzQzIyCi06MTA1ODMwMDBBRkI5MDA0MEFGQkMwMDQ0QUZCRjAwNDgwRTAwMDU5MUI3Ci06MTA1ODQwMDAwMDAwMDAwMDhGQkYwMDQ4OEZCQzAwNDQ4RkI5MDA0MEFCCi06MTA1ODUwMDA4RkI4MDAzQzhGQUYwMDM4OEZBRTAwMzQ4RkFEMDAzMDcyCi06MTA1ODYwMDA4RkFDMDAyQzhGQUIwMDI4OEZBQTAwMjQ4RkE5MDAyMEJBCi06MTA1ODcwMDA4RkE4MDAxQzhGQTcwMDE4OEZBNjAwMTQ4RkE1MDAxMEZBCi06MTA1ODgwMDA4RkE0MDAwQzhGQTMwMDA4OEZBMjAwMDQ4RkExMDAwMDNBCi06MTA1ODkwMDAyN0JEMDA0QzNDMUI2MDA0OEY3QTUwMzAzNzdCNTAyODZBCi06MTA1OEEwMDAwMzQwMDAwOEFGN0EwMDAwOEY4NjAwM0MzQzAzOTAwMDY0Ci06MTA1OEIwMDAzQzAyODAwMDAwODYyODI1MDBBMzIwMjVBQzQ0MDAyMDVGCi06MTA1OEMwMDAzQzAzODAwMDhDNjcwMDIwMDRFMEZGRkUwMDAwMDAwMDI1Ci06MTA1OEQwMDAwM0UwMDAwODAwMDAwMDAwMEEwMDAwNzAyNDA0MDAwMTNBCi06MTA1OEUwMDA4Rjg1MDAzQzNDMDQ4MDAwMzQ4MzAwMDEwMEEzMTAyNTE4Ci06MTA1OEYwMDAwM0UwMDAwOEFDODIwMDIwMDNFMDAwMDgwMDAwMTAyMTUzCi06MTA1OTAwMDAzMDg0RkZGRjMwQTVGRkZGMTA4MDAwMDcwMDAwMTgyMTQyCi06MTA1OTEwMDAzMDgyMDAwMTEwNDAwMDAyMDAwNDIwNDIwMDY1MTgyMTdFCi06MTA1OTIwMDAxNDgwRkZGQjAwMDUyODQwMDNFMDAwMDgwMDYwMTAyMTAwCi06MTA1OTMwMDAxMEMwMDAwNzAwMDAwMDAwOENBMjAwMDAyNEM2RkZGRjdBCi06MTA1OTQwMDAyNEE1MDAwNEFDODIwMDAwMTRDMEZGRkIyNDg0MDAwNEUyCi06MTA1OTUwMDAwM0UwMDAwODAwMDAwMDAwMTBBMDAwMDgyNEEzRkZGRkRGCi06MTA1OTYwMDBBQzg2MDAwMDAwMDAwMDAwMDAwMDAwMDAyNDAyRkZGRkUxCi06MTA1OTcwMDAyNDYzRkZGRjE0NjJGRkZBMjQ4NDAwMDQwM0UwMDAwODlDCi06MTA1OTgwMDAwMDAwMDAwMDkwQUEwMDMxOEZBQjAwMTA4Q0FDMDA0MEVBCi06MTA1OTkwMDAzQzAzMDBGRjhENjgwMDA0QUQ2QzAwMjA4Q0FEMDA0NDFBCi06MTA1OUEwMDAwMEUwNjAyMTM0NjJGRkZGQUQ2RDAwMjQ4Q0E3MDA0ODQ5Ci06MTA1OUIwMDAzQzA5RkYwMDAxMDlDMDI0QUQ2NzAwMjg4Q0FFMDA0Q0YzCi06MTA1OUMwMDAwMTgyQzgyNDAzMTk3ODI1QUQ2RjAwMDRBRDZFMDAyQzQ4Ci06MTA1OUQwMDA4Q0FEMDAzODMxNEEwMEZGQUQ2RDAwMUM5NEE5MDAzMjM3Ci06MTA1OUUwMDAzMTI4RkZGRkFENjgwMDEwOTBBNzAwMzBBNTYwMDAwMkNECi06MTA1OUYwMDBBMTYwMDAwNEExNjcwMDAwOTBBMzAwMzIzMDYyMDBGRkE0Ci06MTA1QTAwMDAwMDAyMTk4MjEwNjAwMDA1MjQwNTAwMDExMDY1MDAwRUQ3Ci06MTA1QTEwMDAwMDAwMDAwMDAzRTAwMDA4QTE2QTAwMDE4Q0Q4MDAyODAzCi06MTA1QTIwMDAzNTRBMDA4MEFENzgwMDE4OENDRjAwMTRBRDZGMDAxNDlCCi06MTA1QTMwMDA4Q0NFMDAzMEFENkUwMDA4OENDNDAwMkNBMTZBMDAwMTMxCi06MTA1QTQwMDAwM0UwMDAwOEFENjQwMDBDOENDRDAwMUNBRDZEMDAxOEE3Ci06MTA1QTUwMDA4Q0M5MDAxNEFENjkwMDE0OENDODAwMjRBRDY4MDAwODFFCi06MTA1QTYwMDA4Q0M3MDAyMEFENjcwMDBDOENDMjAwMTQ4QzgzMDA3MEMyCi06MTA1QTcwMDAwMDQzQzgyQjEzMjAwMDA3MDAwMDAwMDA4Q0MyMDAxNDU0Ci06MTA1QTgwMDAxNDRDRkZFNDAwMDAwMDAwMzU0QTAwODAwM0UwMDAwOEU5Ci06MTA1QTkwMDBBMTZBMDAwMThDODIwMDcwMEEwMDAwRTYwMDAwMDAwMDhDCi06MTA1QUEwMDA5MDg5MDAzMDI3QkRGRkY4OEZBODAwMUNBM0E5MDAwMDMzCi06MTA1QUIwMDA4RkEzMDAwMDNDMERGRjgwMzVBMkZGRkY4Q0FDMDAyQ0IzCi06MTA1QUMwMDAwMDYyNTgyNEFGQUIwMDAwQTEwMDAwMDQwMEMwNTgyMUMwCi06MTA1QUQwMDBBN0EwMDAwMjhEMDYwMDA0MDBBMDQ4MjEwMTY3QzgyMThDCi06MTA1QUUwMDA4RkE1MDAwMDAwODA1MDIxM0MxOEZGN0YwMzJDMjAyNjRBCi06MTA1QUYwMDAzQzBFMDBGRjJDOEMwMDAxMzcwRkZGRkYzNUNERkZGRjYwCi06MTA1QjAwMDAzQzAyRkYwMDAwQUZDODI0MDBFREMwMjQwMEMyNzgyNDhFCi06MTA1QjEwMDAwMDBDMURDMDAzMjM2ODI1MDFGODcwMjVBRDBEMDAwMEExCi06MTA1QjIwMDBBRDBFMDAwNDhEMjQwMDI0QUZBRDAwMDBBRDA0MDAwOENDCi06MTA1QjMwMDA4RDJDMDAyMDI0MDRGRkZGQUQwQzAwMEM5NTQ3MDAzMjkzCi06MTA1QjQwMDAzMEU2RkZGRkFEMDYwMDEwOTE0NTAwNDgzMEEyMDBGRjhGCi06MTA1QjUwMDAwMDAyMTlDMjUwNjAwMDAxOEQyNDAwMzRBRDA0MDAxNDBECi06MTA1QjYwMDA4RDQ3MDAzODhGQUEwMDE4MjdCRDAwMDhBRDBCMDAyODBDCi06MTA1QjcwMDBBRDBBMDAyNEFEMDcwMDFDQUQwMDAwMkNBRDAwMDAxOERDCi06MTA1QjgwMDAwM0UwMDAwOEFEMDAwMDIwMjdCREZGRTBBRkIyMDAxODIxCi06MTA1QjkwMDBBRkIxMDAxNEFGQjAwMDEwQUZCRjAwMUM5MDk4MDAzMDQwCi06MTA1QkEwMDAwMEMwODgyMTNDMEQwMEZGMzMwRjAwN0ZBMENGMDAwMDE0Ci06MTA1QkIwMDA5MDhFMDAzMTM1QUNGRkZGM0MwQUZGMDBBMENFMDAwMTAzCi06MTA1QkMwMDA5NEE2MDAxRUEyMjAwMDA0OENBQjAwMTQ4RTI5MDAwNEIxCi06MTA1QkQwMDAwMEEwODAyMTAxNkMyODI0MDEyQTQwMjQwMDgwOTAyMTBCCi06MTA1QkUwMDAwMTA1MjAyNUE2MjYwMDAyQUUyNDAwMDQyNjA1MDAyMDdCCi06MTA1QkYwMDAyNjI0MDAwODBFMDAwMDkyMjQwNjAwMDI5MjQ3MDAzMDdFCi06MTA1QzAwMDAyNjA1MDAyODI2MjQwMDE0MDAwNzFFMDAwMDAzMTYwM0EyCi06MTA1QzEwMDAyNDA2MDAwNDA0NDAwMDAzMjQwM0ZGRkY5NjU5MDAzMkM5Ci06MTA1QzIwMDAzMzIzRkZGRjBFMDAwMDkyQUUyMzAwMTAyNjI0MDAyNDMxCi06MTA1QzMwMDA4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMEZFCi06MTA1QzQwMDAyNDA1MDAwMzAwMDAzMDIxMEEwMDAwOUMyN0JEMDAyMDJECi06MTA1QzUwMDAyN0JERkZEOEFGQjEwMDFDQUZCMDAwMThBRkJGMDAyMDA4Ci06MTA1QzYwMDA5MEE5MDAzMDI0MDIwMDAxMDBFMDUwMjEzMTIzMDAzRkMwCi06MTA1QzcwMDAwMEEwNDAyMThGQjAwMDQwMDA4MDg4MjEwMEMwNDgyMTUyCi06MTA1QzgwMDAxMDYyMDAxNDhGQTcwMDM4MjQwQjAwMDUwMEEwMjAyMTBCCi06MTA1QzkwMDAwMEMwMjgyMTEwNkIwMDEzMDIwMDMwMjEwRTAwMDEyOEUzCi06MTA1Q0EwMDAwMDAwMDAwMDkyMjUwMDdDMzBBNDAwMDIxMDgwMDAwMzU4Ci06MTA1Q0IwMDAyNjAzMDAzMEFFMDAwMDMwMjYwMzAwMzQ4RkJGMDAyMEUyCi06MTA1Q0MwMDA4RkIxMDAxQzhGQjAwMDE4MDA2MDEwMjEwM0UwMDAwOEE1Ci06MTA1Q0QwMDAyN0JEMDAyODBFMDAwMEE3QUZCMDAwMTAwQTAwMDE2RjFBCi06MTA1Q0UwMDAwMDAwMDAwMDhGQTMwMDNDMDEwMDIwMjEwMTIwMjgyMTlBCi06MTA1Q0YwMDAwMTQwMzAyMUFGQTMwMDEwMEUwMDAwRUVBRkIwMDAxNDQxCi06MTA1RDAwMDAwQTAwMDE2RjAwMDAwMDAwM0MwNjgwMDAzNEMyMEUwMDUzCi06MTA1RDEwMDA4QzQ0MDAxMDhGODUwMDQ0QUNBNDAwMjA4QzQzMDAxOEY0Ci06MTA1RDIwMDAwM0UwMDAwOEFDQTMwMDI0M0MwNjgwMDAzNEMyMEUwMDRGCi06MTA1RDMwMDA4QzQ0MDAxNDhGODUwMDQ0QUNBNDAwMjA4QzQzMDAxQ0NDCi06MTA1RDQwMDAwM0UwMDAwOEFDQTMwMDI0OTM4MjAwMEMxMDQwMDAxQjY5Ci06MTA1RDUwMDAyNDgzMDAwRjI0MDRGRkYwMDA2NDM4MjQxMEUwMDAxOUFECi06MTA1RDYwMDA5NzhCMDAxMDk3ODQwMDBFOTM4OTAwMEQzQzBBNjAxQ0VECi06MTA1RDcwMDAwQTAwMDFBQzAxNjQ0MDIzMDEwMzcwMjEwMDY0MjgyMzYwCi06MTA1RDgwMDAxMTI2MDAwMjMxQzJGRkZGMzBBMkZGRkYwMDQ3MzAyQjc3Ci06MTA1RDkwMDA1MEMwMDAwRTAwRTQ0ODIxOEQ0RDAwMEMzMUEzRkZGRkUwCi06MTA1REEwMDAwMDAzNjQwMDAwMEMyQzAzMDRBMUZGRjMwMDAwMzAyMTY5Ci06MTA1REIwMDAzMDYzN0ZGRjBBMDAwMUE0MjQwNjAwMDEwM0UwMDAwODBECi06MTA1REMwMDAwMDAwMDAwMDk3ODQwMDBFMDBFNDQ4MjEzMTIzRkZGRjBCCi06MTA1REQwMDAzMTY4RkZGRjAwNjgzODJCNTRFMEZGRjhBNzgzMDAwRUZFCi06MTA1REUwMDA5MzhBMDAwRDExNDAwMDA1MjQwRjAwMDEwMDZCQzAyM0IxCi06MTA1REYwMDBBMzgwMDAwRDAzRTAwMDA4QTc5ODAwMEUwMDZCQzAyM0VECi06MTA1RTAwMDBBMzhGMDAwRDAzRTAwMDA4QTc5ODAwMEUwM0UwMDAwODMwCi06MTA1RTEwMDAwMDAwMDAwMDI3QkRGRkU4QUZCMDAwMTAzQzEwODAwMDdDCi06MTA1RTIwMDAzNjAzMDE0MDMwOEJGRkZGOTNBQTAwMkJBRkJGMDAxNDU1Ci06MTA1RTMwMDBBNDZCMDAwNDM2MDQwRTAwOTQ4ODAwMTYzMEM2MDBGRkUwCi06MTA1RTQwMDA4RkE5MDAzMEE0NjgwMDA2QUM2NTAwMDhBMDY2MDAxMkE3Ci06MTA1RTUwMDBBNDZBMDAxQUFDNjcwMDIwOEZBNTAwMkNBNDY5MDAxODYyCi06MTA1RTYwMDAwMTIwMjAyMTBFMDAwMTk4QUM2NTAwMTQzQzAyMTAwMEI2Ci06MTA1RTcwMDBBRTAyMDE3ODhGQkYwMDE0OEZCMDAwMTAwM0UwMDAwODVECi06MTA1RTgwMDAyN0JEMDAxODhGODUwMDAwMjQ4NDAwMDcyN0JERkZGODc4Ci06MTA1RTkwMDAzMDg0RkZGODNDMDY4MDAwOTRDQjAwOEEzMTZBRkZGRjEzCi06MTA1RUEwMDBBRkFBMDAwMDhGQTkwMDAwMDEyNTQwMjMyNTA3RkZGRkFFCi06MTA1RUIwMDAzMEUzMUZGRjAwNjQxMDJCMTQ0MEZGRjcwMDA1Njg4MkQ5Ci06MTA1RUMwMDAwMDBEMjg4MDM0Q0M0MDAwMDBBQzEwMjEwM0UwMDAwODE1Ci06MTA1RUQwMDAyN0JEMDAwODhGODIwMDAwMjQ4NjAwMDczMEM1RkZGODI4Ci06MTA1RUUwMDAwMEEyMTgyMTMwNjQxRkZGMDNFMDAwMDhBRjg0MDAwMDA3Ci06MTA1RUYwMDA4Rjg3MDAzQzhGODQwMDQ0MjdCREZGQjBBRkI3MDA0NEJDCi06MTA1RjAwMDBBRkI0MDAzOEFGQjEwMDJDQUZCRjAwNDhBRkI2MDA0MDBGCi06MTA1RjEwMDBBRkI1MDAzQ0FGQjMwMDM0QUZCMjAwMzBBRkIwMDAyODMzCi06MTA1RjIwMDAzQzBCODAwMDhDODYwMDI0QUQ2NzAwODA4QzhBMDAyMEFBCi06MTA1RjMwMDAzNTY3MEUwMDM1NjkwMTAwQUNFQTAwMTA4Qzg4MDAyNDNBCi06MTA1RjQwMDA4RDI1MDAwNDAwMDBCODIxQUNFODAwMTg4Q0UzMDAxMDk3Ci06MTA1RjUwMDAwMEE2ODgyMzAwMDBBMDIxQUNFMzAwMTQ4Q0UyMDAxODA2Ci06MTA1RjYwMDBBQ0UyMDAxQzEyMjAwMEZFMDBFMEIwMjE5MzZDMDAwODlGCi06MTA1RjcwMDAxMTgwMDBGNDAwMDAwMDAwOTc2RjAwMTAzMUVFRkZGRjY5Ci06MTA1RjgwMDAwMjJFNjgyQjE1QTAwMEVGMDAwMDAwMDA5NzcyMDAxMDkxCi06MTA1RjkwMDAzMjUwRkZGRkFFRDAwMDAwM0MwMzgwMDA4Qzc0MDAwMDQ0Ci06MTA1RkEwMDAzMjkzMDAwODEyNjBGRkZEMDAwMDAwMDA5NkQ4MDAwODQwCi06MTA1RkIwMDA4RUM3MDAwNDMzMDVGRkZGMzBCNTAwMDExMkEwMDBFNEQ2Ci06MTA1RkMwMDAwMDAwMDAwMDAwMDAwMDBEMzBCRkEwNDAyNDE5MDA0MDc4Ci06MTA1RkQwMDAxM0Y5MDExQjMwQjRBMDAwMTI4MDAwREYwMDAwMDAwMEE0Ci06MTA1RkUwMDA5MzczMDAwODEyNjAwMDA4MDAwMDAwMDA5NzZEMDAxMDE1Ci06MTA1RkYwMDAzMUFDRkZGRjAwRUMyMDJCMTA4MDAwMDMzMEFFMDA0MERFCi06MTA2MDAwMDAxMUMwMDBENTAwMDAwMDAwQTc4NTAwNDBBRjg3MDAzODEwCi06MTA2MDEwMDA5MzYzMDAwODAyMjAyODIxQUZCMTAwMjAxNDYwMDBGNTJFCi06MTA2MDIwMDAyN0I0MDAyMEFGNjAwMDBDOTc4RjAwNDAzMUYxNDAwMDkyCi06MTA2MDMwMDAxNjIwMDAwMjI0MDMwMDE2MjQwMzAwMEUyNDA1NDAwNzQ2Ci06MTA2MDQwMDBBMzYzMDAwQUFGNjUwMDE0OTM4QTAwNDI4RjcwMDAxNEE2Ci06MTA2MDUwMDAzMTU1MDAwMTAwMTUxMjQwMDIwMjQ4MjVBRjY5MDAxNEI1Ci06MTA2MDYwMDA5NzlGMDA0MDhGNzgwMDE0MzNGOTAwMTAwMzE5NDAyNUUyCi06MTA2MDcwMDBBRjY4MDAxNDk3OTIwMDQwMzI0NzAwMDgxMEUwMDE2RUFDCi06MTA2MDgwMDAwMDAwMDAwMDhGNjcwMDE0M0MxMjEwMDAzQzExODAwMERCCi06MTA2MDkwMDAwMEYyNzgyNUFGNkYwMDE0MzYyMzBFMDA5NDZFMDAwQUNDCi06MTA2MEEwMDAzQzBEODEwMDI0MDYwMDBFMzFDQ0ZGRkYwMThEMjAyNTIwCi06MTA2MEIwMDBBRjY0MDAwNEEzNjYwMDAyOTM3MzAwMEEzNDA2RkZGQzc5Ci06MTA2MEMwMDAyNjZCMDAwNEEzNkIwMDBBOTc5ODAwNDAzMzA4MjAwMDU5Ci06MTA2MEQwMDAxMTAwMDE1RjAwMDAwMDAwM0MwNTgwMDAzNEE5MEUwMEEzCi06MTA2MEUwMDA5Nzk5MDA0MDk1MzgwMDBDOTc4NzAwNDAwMDE5NDA0MjZFCi06MTA2MEYwMDAzMzEyQzAwMDMxMDMwMDAzMDAxMjdCMDMzMEYxMTAwMEEzCi06MTA2MTAwMDAwMDZGNjgyNTAwMTE3MjAzMDFBRTYwMjUwMDBDMjBDMEVECi06MTA2MTEwMDBBNzY0MDAxMjk3OTMwMDQwOTM2QTAwMEEwMDEzNTk4MjAzCi06MTA2MTIwMDAzMTc1MDAzQzAyQUExMDIxMjQ1MDAwM0NBMzcwMDAwOUU0Ci06MTA2MTMwMDA5NTNGMDAwQzMzRjkzRkZGQTc3OTAwMTA5NzcwMDAxMkNDCi06MTA2MTQwMDA5MzY5MDAwOTAxMzBGODIxMjdFNTAwMDIzMEI5MDAwNzAyCi06MTA2MTUwMDAwMDE5QzAyMzMzMDgwMDA3QTM2ODAwMEI5MzcxMDAwOURFCi06MTA2MTYwMDA5NzcyMDAxMjk3NkYwMDEwMzIyNzAwRkY4RjkxMDAzODRFCi06MTA2MTcwMDA5NzhEMDA0MDAwRjIxODIxMDA2RjcwMjEwMUM2NjAyMTQ4Ci06MTA2MTgwMDAzMUE2MDA0MDEwQzAwMDA1MzE4NUZGRkYwMEIxMTAyQjgzCi06MTA2MTkwMDAzQzEyODAwMDEwNDAwMDE3MDAwMDk4MjEwMjI1QTgyQjE3Ci06MTA2MUEwMDA1NkEwMDEzRThGQTUwMDIwM0MwNDgwMDAzNDhBMEUwMERBCi06MTA2MUIwMDA4RDUzMDAxNDNDMDY4MDAwQUQ1MzAwMTA4RDRCMDAxQzI1Ci06MTA2MUMwMDBBRDRCMDAxOEFENDUwMDAwOENDRDAwMDAzMUFDMDAwODhGCi06MTA2MUQwMDAxMTgwRkZGRDM0Q0UwRTAwOTVDMzAwMDgwMEEwODgyMTc5Ci06MTA2MUUwMDAwMDAwOTAyMUE3ODMwMDQwOERDNjAwMDQyNDEzMDAwMTA1Ci06MTA2MUYwMDBBRjg2MDAzODk3NkYwMDEwMzFGNUZGRkY4RTlGMDAwMENCCi06MTA2MjAwMDAwM0YxMjgyMzEwQTAwMTFGQUU4NTAwMDA5MzYyMDAwODRGCi06MTA2MjEwMDAxNDQwMDBERDAwMDAwMDAwMEUwMDAxRTcyNDA0MDAxMDFGCi06MTA2MjIwMDA4RjkwMDA0ODAwNDAyODIxM0MwMjMyMDAzMjA2MDBGRkQ3Ci06MTA2MjMwMDAwMDA2NTQwMDAxNDJGODI1MjYwOTAwMDFBRjg5MDA0OEY0Ci06MTA2MjQwMDBBQ0JGMDAwMDkzNzkwMDA5OTc3ODAwMTI5MzZGMDAwQUExCi06MTA2MjUwMDAzMzI4MDBGRjMzMDNGRkZGMDEwMzM4MjEwMDA3NkMwMEUwCi06MTA2MjYwMDAzMUVFMDBGRjAxQUU2MDI1QUNBQzAwMDQ4Rjg0MDA0ODI1Ci06MTA2MjcwMDA5NzhCMDA0MDMxNkEyMDAwMTE0MDAxMEFBQ0E0MDAwODRECi06MTA2MjgwMDA5NzY0MDAxMjMwOEJGRkZGMDY0MDAxMDhBQ0FCMDAwQzk2Ci06MTA2MjkwMDA5NzhFMDA0MDMxQzUwMDA4MTRBMDAwMDIyNjI4MDAwNjkxCi06MTA2MkEwMDAyNjI4MDAwMjNDMUY4MDAwMzdFNzBFMDA5NEY5MDAxNEY2Ci06MTA2MkIwMDA4Q0U1MDAxQzhGNjcwMDA0OTM3ODAwMDIzMzI0RkZGRkY1Ci06MTA2MkMwMDAzMzAzMDBGRkFGQTMwMDEwOEY2RjAwMTRBRkE4MDAxOEI2Ci06MTA2MkQwMDAwRTAwMDFDQkFGQUYwMDE0MjQwNDAwMTAwRTAwMDFGQjMwCi06MTA2MkUwMDAwMDAwMDAwMDhFOTIwMDAwMTY0MDAwMDUwMDAwMDAwMDMzCi06MTA2MkYwMDA4Rjc4MDAxNDI0MDNGRkJGMDMwM0EwMjRBRjc0MDAxNDlECi06MTA2MzAwMDA4RjY3MDAwQzAwRjVDODIxQUY3OTAwMEM5Mzc1MDAwODY5Ci06MTA2MzEwMDAxNkEwMDAwODAwMDAwMDAwMTI2MDAwMDYwMDAwMDAwMDQ3Ci06MTA2MzIwMDA4RjY4MDAxNDNDMEFFRkZGMzU0OUZGRkUwMTA5RjgyNDhECi06MTA2MzMwMDBBRjdGMDAxNEEzNzMwMDA4OEZBNTAwMjAwQTAwMDM0RjRECi06MTA2MzQwMDAwMjIwMjAyMUFFRDEwMDAwMEEwMDAyMkQzQzAzODAwMDczCi06MTA2MzUwMDAxNEUwRkYxRTMwQkZBMDQwMEUwMDAxOTAwMDAwQTAyMUZECi06MTA2MzYwMDAyRTkxMDAwMTAyMzdCMDI1MTJDMDAwMTg4RkJGMDA0OERGCi06MTA2MzcwMDA4Rjg3MDAzQzI0MTcwRjAwMTBGNzAwRDQzQzA2ODAwMEU0Ci06MTA2MzgwMDA4Q0Q5MDE3ODA3MjBGRkZFMjQxRjBGMDAxMEZGMDBGNkI0Ci06MTA2MzkwMDAzNENBMEUwMDhENTYwMDE0MzRDNzAxNDAyNDA4MDI0MDUwCi06MTA2M0EwMDBBQ0Y2MDAwNDhENDkwMDFDM0MxNDEwMDBBQ0U5MDAwODU4Ci06MTA2M0IwMDBBMEUwMDAxMkE0RTAwMDFBQUNFMDAwMjBBNEUwMDAxODY1Ci06MTA2M0MwMDBBQ0U4MDAxNEFDRDQwMTc4OEZCRjAwNDg4RkI3MDA0NDBDCi06MTA2M0QwMDA4RkI2MDA0MDhGQjUwMDNDOEZCNDAwMzg4RkIzMDAzNEM3Ci06MTA2M0UwMDA4RkIyMDAzMDhGQjEwMDJDOEZCMDAwMjgwM0UwMDAwODdFCi06MTA2M0YwMDAyN0JEMDA1MDhGOTEwMDM4OTc4ODAwNDAzQzEyODAwMEU0Ci06MTA2NDAwMDAwMjIwQTgyMTMxMDcwMDQwMTRFMEZGN0MwMDAwOTgyMTAxCi06MTA2NDEwMDA5Nzc5MDAxMDhGOTIwMDM4MzMzOEZGRkYxMzEyMDBBOENECi06MTA2NDIwMDAwMDAwMjAyMTAwODBBMDIxMTA4MDAwRjMwMEEwODgyMTFFCi06MTA2NDMwMDAxNjIwRkVDRTAwMDAwMDAwMEEwMDAzMUYyRTkxMDAwMTZFCi06MTA2NDQwMDAzQzAzODAwMDhDNjIwMTc4MDQ0MEZGRkUyNDA4MDgwMEIxCi06MTA2NDUwMDA4Rjg2MDAwMEFDNjgwMTc4M0MwMzgwMDA5NDZEMDA4QTUwCi06MTA2NDYwMDAzMUFDRkZGRjAxODY1ODIzMjU2QUZGRkYzMTQ0MUZGRjJGCi06MTA2NDcwMDAyQzg5MDAwODE1MjBGRkY5MDAwMDAwMDA4RjhGMDA0OENDCi06MTA2NDgwMDAzNDcwNDAwMDhGODMwMDNDMDBFMEEwMjEyNDBFMEYwMEY4Ci06MTA2NDkwMDAyNUU3MDAwMUFGODcwMDQ4MDBEMDMwMjEwMjM0ODgyMzZGCi06MTA2NEEwMDAzQzA4ODAwMDMxRjUwMEZGMTA2RTAwMDUyNDA3MDAwMTU0Ci06MTA2NEIwMDA5Mzk4MDA0MjMzMTMwMDAxMDAxMzkyNDAzNjQ3MDAwMUM1Ci06MTA2NEMwMDAwMDE1MjQwMDNDMEEwMTAwMDA4QTQ4MjVBQ0M5MDAwMEUwCi06MTA2NEQwMDA4RjgyMDA0ODMwQkYwMDM2MzBCOTAwMDhBQ0MyMDAwNERCCi06MTA2NEUwMDAxMzIwMDA5OTAwRkY5ODI1MzUxMjBFMDA5NjUwMDAwQURGCi06MTA2NEYwMDA4Rjg3MDAwMDNDMEY4MTAwMzIwM0ZGRkYyNEVEMDAwODZFCi06MTA2NTAwMDAzNTA2MDE0MDAwNkY2MDI1M0MwRTEwMDAzMUFCMUZGRkM3Ci06MTA2NTEwMDAyNjkyMDAwNjI0MDUwMDBFQUNDQzAwMjAwMjZFOTgyNUMxCi06MTA2NTIwMDBBNEM1MDAxQUFGOEIwMDAwQTREMjAwMTgxNjIwMDAwOEUyCi06MTA2NTMwMDAzQzEwODAwMDhGODkwMDNDMjQwMjBGMDA1MTIyMDAwMjkxCi06MTA2NTQwMDAyNDE3MDAwMTM2NzMwMDQwMEUwMDAxODgzQzEwODAwMEMzCi06MTA2NTUwMDAzNjA2MEUwMDhDQ0IwMDE0MzYwQTAxNDAwMjQwMjAyMTgyCi06MTA2NTYwMDBBRDRCMDAwNDhDQzUwMDFDQUQ0NTAwMDhBMTU1MDAxMkMwCi06MTA2NTcwMDBBRDUzMDAxNDBFMDAwMTk4M0MxNTEwMDBBRTE1MDE3OEMzCi06MTA2NTgwMDAwQTAwMDM1MjAwMDAwMDAwOTM2RjAwMDk5NzZFMDAxMjhBCi06MTA2NTkwMDA5MzZEMDAwQjMxRTUwMEZGMDBBRTIwMjEzMUFDMDBGRjEwCi06MTA2NUEwMDAwMDhDODAyMTI2MDIwMDBBMzA1MEZGRkYwRTAwMDFFNzE4Ci06MTA2NUIwMDAwMjAwMjAyMThGODYwMDQ4M0MwMzQxMDAzQzA1ODAwMEZBCi06MTA2NUMwMDAyNENCMDAwMUFGOEIwMDQ4OTM2QTAwMDk5NzY5MDAxMjQxCi06MTA2NUQwMDAzMEM2MDBGRjMxNUYwMEZGMzEyOEZGRkYwM0U4MzgyMTlDCi06MTA2NUUwMDAyNEY5MDAwMjAwMDZDNDAwMDMxOTc4MjUwMUUzNzAyNTkwCi06MTA2NUYwMDBBQzRFMDAwMDhGNkQwMDBDMzRBNDBFMDA5NDhCMDAxNDgwCi06MTA2NjAwMDAwMUIyNjAyNUFDNEMwMDA0OEM4NTAwMUM4RjY3MDAwNDJGCi06MTA2NjEwMDA5MzZBMDAwMjMxNjRGRkZGMzE0OTAwRkZBRkE5MDAxMDA3Ci06MTA2NjIwMDA4RjY4MDAxNEFGQjEwMDE4MEUwMDAxQ0JBRkE4MDAxNEEyCi06MTA2NjMwMDAwQTAwMDJGRDAyMDAyMDIxQUY2MDAwMDRBMzYwMDAwMkY2Ci06MTA2NjQwMDA5Nzk4MDA0MDMzMDgyMDAwMTUwMEZFQTMwMDAwMzAyMTc5Ci06MTA2NjUwMDBBNzYwMDAxMjk3ODQwMDQwOTM2QjAwMEEzQzEwODAwMEYyCi06MTA2NjYwMDAzMDkzMUYwMDAwMTM1MTgzMDE0QkE4MjEyNkEyMDAyODVDCi06MTA2NjcwMDBBMzYyMDAwOTM2MDkwRTAwOTUzRjAwMEMwQTAwMDI5NTNFCi06MTA2NjgwMDBBNzdGMDAxMDhGNzAwMDE0MzYwOTAwNDAwRTAwMDE4OEFCCi06MTA2NjkwMDBBRjY5MDAxNDBBMDAwMkM5MDAwMDAwMDAwQTAwMDM0RjlECi06MTA2NkEwMDAwMDAwMjAyMTA2NDFGRUZBQUNBMDAwMEM4Q0FDMDAwQ0NFCi06MTA2NkIwMDAzQzBEODAwMDAxOEQ5MDI1MEEwMDAyRUFBQ0IyMDAwQzZFCi06MTA2NkMwMDAwMDAwOTAyMTBBMDAwMkM1MjQxMzAwMDExMjgwMDAwNzc3Ci06MTA2NkQwMDAzQzAyODAwMDM0NEIwRTAwOTU2NjAwMDgzMEQzMDA0MDI5Ci06MTA2NkUwMDAxMjYwMDA0OTAwMDAwMDAwM0MwNjgwMDA4Q0QwMDE3ODU4Ci06MTA2NkYwMDAwNjAwRkZGRTM0QzUwRTAwOTRCNTAwMTAzQzAzMDUwMEYzCi06MTA2NzAwMDAzNENDMDE0MDMyQjhGRkZGMDMwMzkwMjVBRDkyMDAwQzVBCi06MTA2NzEwMDA4Q0FGMDAxNDI0MEQyMDAwM0MwNDEwMDBBRDhGMDAwNDQ5Ci06MTA2NzIwMDA4Q0FFMDAxQ0FEOEUwMDA4QTE4MDAwMTJBNTgwMDAxQTVFCi06MTA2NzMwMDBBRDgwMDAyMEE1ODAwMDE4QUQ4RDAwMTRBQ0M0MDE3ODk4Ci06MTA2NzQwMDAwQTAwMDMyNjNDMDY4MDAwOEY5RjAwMDAzNTE4MDE0MDk4Ci06MTA2NzUwMDAyNjkyMDAwMjI3RjkwMDA4MzMyODFGRkZBNzEyMDAxODBECi06MTA2NzYwMDAwQTAwMDM5MUFGODgwMDAwM0MwMjgwMDAzNDQ1MDE0MERDCi06MTA2NzcwMDBBQ0EwMDAwQzEyODAwMDFCMzQ1MzBFMDAzNDUxMEUwMEVDCi06MTA2NzgwMDA4RTM3MDAxMEFDQjcwMDA0OEUyNDAwMTgzQzBCODAwMDNDCi06MTA2NzkwMDBBQ0E0MDAwODM1NzAwMTQwMjQwNDAwNDBBMjAwMDAxMjlGCi06MTA2N0EwMDA4RkJGMDA0OEE2MDAwMDFBOEZCNzAwNDRBRTAwMDAyMDNCCi06MTA2N0IwMDA4RkI2MDA0MEE2MDAwMDE4OEZCNTAwM0NBRTA0MDAxNDUwCi06MTA2N0MwMDA4RkI0MDAzODhGQjMwMDM0OEZCMjAwMzA4RkIxMDAyQ0ZCCi06MTA2N0QwMDA4RkIwMDAyODNDMDIxMDAwMjdCRDAwNTAwM0UwMDAwOEU1Ci06MTA2N0UwMDBBRDYyMDE3ODhFNjYwMDE0QUNBNjAwMDQ4RTY0MDAxQ0I1Ci06MTA2N0YwMDAwQTAwMDQyQTNDMEI4MDAwMEUwMDAxOTAyRTkxMDAwMTNCCi06MTA2ODAwMDAwQTAwMDMyMDAyMzdCMDI1MDAwMDAwMDAwMDAwMDAwRDQwCi06MTA2ODEwMDAwMDAwMDAwMDI0MDAwMzY5MEEwMDA0MDEzQzA2ODAwMDE3Ci06MTA2ODIwMDAyN0JERkZEOEFGQkYwMDIwM0MwOTgwMDAzQzFGMjBGRkUwCi06MTA2ODMwMDBBRkIyMDAxODNDMDc2MDAwMzUzMjBFMDAyNDAyMDAxMDkxCi06MTA2ODQwMDAzN0Y5RkZGREFDRTIzMDA4QUZCMzAwMUNBRkIxMDAxNDY0Ci06MTA2ODUwMDBBRkIwMDAxMEFFNTkwMDAwMDAwMDAwMDAwMDAwMDAwMEMyCi06MTA2ODYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQzE4MDBGRkQ1Ci06MTA2ODcwMDAzNzEzRkZGREFFNTMwMDAwM0MwQjYwMDQ4RDcwNTAwMEQ5Ci06MTA2ODgwMDAyNDExRkY3RjNDMEUwMDAyMDIxMTc4MjQzNUVDMzgwQ0Y1Ci06MTA2ODkwMDAzNUNEMDEwOUFDRUQ0QzE4MjQwQTAwMDlBRDZDNTAwMDRGCi06MTA2OEEwMDA4Q0U4MDQzOEFEMkEwMDA4QUQyMDAwMTQ4Q0U1NEMxQzlGCi06MTA2OEIwMDAzMTA2RkZGRjM4QzQyRjcxMDAwNTFFMDIzMDYyMDAwRjQxCi06MTA2OEMwMDAyNDg2QzBCMzEwNDAwMDA3QUY4MjAwMDg4Q0U1NEMxQzQyCi06MTA2OEQwMDAzQzA5MDAxRjM1MjhGQzAwMDBBODE4MjQwMDAzMjFDMjMxCi06MTA2OEUwMDBBRjg0MDAwNDhDRjEwODA4M0MwRjU3MDkyNDEyRjAwMDEzCi06MTA2OEYwMDAwMjMyNzAyNDM1RjAwMDEwMDFEMDYwMjYwMUNGNjgyNkU2Ci06MTA2OTAwMDAyREFBMDAwMTJEOEIwMDAxMDE0QjM4MjU1MEUwMDAwOTE0Ci06MTA2OTEwMDBBMzgwMDAwQzNDMUY2MDFDOEZGODAwMDgyNDE5MDAwMUE0Ci06MTA2OTIwMDBBMzk5MDAwQzMzMTM3QzAwQTc5MzAwMTBBNzgwMDAwRURFCi06MTA2OTMwMDBBMzgwMDAwREFGODAwMDQ4MTRDMDAwMDNBRjgwMDAwMEFBCi06MTA2OTQwMDAzQzA2NjAwMEFDQzA0NDJDMEUwMDA1QjkzQzEwODAwMDMxCi06MTA2OTUwMDAwRTAwMEYyNDM2MTEwMTAwM0MxMjA4MDAyNjUyM0RGMEIzCi06MTA2OTYwMDAzQzEzMDgwMDI2NzMzRTcwOEUwMzAwMDAzODY0MDAwMTVCCi06MTA2OTcwMDAzMDgyMDAwMTE0NDBGRkZDM0MwQjgwMEE4RTI2MDAwMDkwCi06MTA2OTgwMDAyNDA3RkY4MDI0QzkwMjQwMzEyQTAwN0YwMTRCNDAyMUE3Ci06MTA2OTkwMDAwMTI3MjgyNEFFMDYwMDIwQUY4ODAwNDRBRTA1MDAyNDVECi06MTA2OUEwMDAzQzA0ODAwMEFGODYwMDNDOEM4QzAxNzgwNTgwRkZGRUEzCi06MTA2OUIwMDAyNDE4MDgwMDkyMkYwMDA4QUM5ODAxNzhBMzhGMDA0Mjk5Ci06MTA2OUMwMDA5MzhFMDA0MjMxQ0QwMDAxMTFBMDAwMEYyNDA1MEQwMDZGCi06MTA2OUQwMDAyNERGRjgwMDJGRjkwMzAxMTMyMDAwMUMwMDA2MjlDMjUwCi06MTA2OUUwMDAyNEE0RkZGMDAwMDQxMDQyMDAwMjMxNDAwRTAwMDIwMjE1Ci06MTA2OUYwMDAwMEQyRDgyMTNDMDI0MDAwM0MwNjgwMDBBQ0MyMDEzOEU1Ci06MTA2QTAwMDAwQTAwMDRBMDAwMDAwMDAwMTBDNTAwMjMyNDBEMEYwMEEwCi06MTA2QTEwMDAxMENEMDAyNzNDMUY4MDA4MzdGOTAwODA5MzM4MDAwMDE0Ci06MTA2QTIwMDAyNDBFMDA1MDMzMEYwMEZGMTVFRUZGRjMzQzAyNDAwMDMwCi06MTA2QTMwMDAwRTAwMEE0MDAwMDAwMDAwM0MwMjQwMDAzQzA2ODAwMEJFCi06MTA2QTQwMDBBQ0MyMDEzODBBMDAwNEEwMDAwMDAwMDA4RjgzMDAwNERCCi06MTA2QTUwMDAwMEEzNDAyQjE1MDAwMDBCOEY4QjAwMDgwMDZCNTAyMTBBCi06MTA2QTYwMDAyNTQ3RkZGRjAwRTU0ODJCMTUyMDAwMDYwMEEzNjAyMzAzCi06MTA2QTcwMDAwMDBDMTk0MDBFMDAwMjAyMDA3M0Q4MjEwQTAwMDRDNDYxCi06MTA2QTgwMDAzQzAyNDAwMDAwMDAwMDBEMEUwMDAyMDIwMDAwMDAwMDY5Ci06MTA2QTkwMDAwQTAwMDRDNDNDMDI0MDAwM0MxQjA4MDAyNzdCM0Y3MEY2Ci06MTA2QUEwMDAwRTAwMDIwMjAwMDAwMDAwMEEwMDA0QzQzQzAyNDAwMDg0Ci06MTA2QUIwMDAzQzFCMDgwMDI3N0IzRjkwMEUwMDAyMDIwMDAwMDAwMEY0Ci06MTA2QUMwMDAwQTAwMDRDNDNDMDI0MDAwM0MwNjYwMDQzQzA5MDgwMDgzCi06MTA2QUQwMDAyNTI5MDEwNEFDQzk1MDJDOENDODUwMDAzQzA1ODAwMDBECi06MTA2QUUwMDAzQzAyMDAwMjM1MDcwMDgwQUNDNzUwMDAzQzA0MDgwMDlGCi06MTA2QUYwMDAyNDg0MTVBNDNDMDMwODAwMjQ2MzE1NUNBQ0E1MDAwODlECi06MTA2QjAwMDBBQ0EyMDAwQzNDMDEwODAwQUMyNDNEODAzQzAxMDgwMDE0Ci06MTA2QjEwMDBBQzIzM0Q4NDAzRTAwMDA4MjQwMjAwMDEwMEEwMzAyMUUyCi06MTA2QjIwMDAzQzFDMDgwMDI3OUMzRDg4M0MwQzA0MDAzQzBCMDAwMkU4Ci06MTA2QjMwMDAwMDhCMzgyNjAwOEM0MDI2MkNFMjAwMDEwMDA3NTAyQkU5Ci06MTA2QjQwMDAyRDA1MDAwMTAwMEE0ODgwM0MwMzA4MDAyNDYzM0Q4MEI1Ci06MTA2QjUwMDAwMDQ1MjAyNTAxMjMxODIxMTA4MDAwMDMwMDAwMTAyMThBCi06MTA2QjYwMDBBQzY2MDAwMDI0MDIwMDAxMDNFMDAwMDgwMDAwMDAwMDAxCi06MTA2QjcwMDAzQzFDMDgwMDI3OUMzRDg4M0MwQjA0MDAzQzBBMDAwMjlBCi06MTA2QjgwMDAwMDhBMzAyNjAwOEIzODI2MkNDMjAwMDEwMDA2NDgyQkQ0Ci06MTA2QjkwMDAyQ0U1MDAwMTAwMDk0MDgwM0MwMzA4MDAyNDYzM0Q4MDhGCi06MTA2QkEwMDAwMDQ1MjAyNTAxMDMxODIxMTA4MDAwMDUwMDAwMTAyMTU4Ci06MTA2QkIwMDAzQzBDMDgwMDI1OEMxNTVDQUM2QzAwMDAyNDAyMDAwMTI0Ci06MTA2QkMwMDAwM0UwMDAwODAwMDAwMDAwM0MwOTAwMDIzQzA4MDQwMDRCCi06MTA2QkQwMDAwMDg4MzAyNjAwODkzODI2MkNDMzAwMDEwMDgwMjgyMTM3Ci06MTA2QkUwMDAyQ0U0MDAwMTAwODMxMDI1MTA0MDAwMEIwMDAwMzAyMTMwCi06MTA2QkYwMDAzQzFDMDgwMDI3OUMzRDg4M0MwQTgwMDA4RDRFMDAwODA0Ci06MTA2QzAwMDAyNDA2MDAwMTAxQ0E2ODI1QUQ0RDAwMDg4RDRDMDAwQzFBCi06MTA2QzEwMDAwMTg1NTgyNUFENEIwMDBDMDNFMDAwMDgwMEMwMTAyMTkxCi06MTA2QzIwMDAzQzFDMDgwMDI3OUMzRDg4M0MwNTgwMDA4Q0E2MDAwQzdECi06MTA2QzMwMDAwMDA0MjAyNzI0MDIwMDAxMDBDNDE4MjQwM0UwMDAwOEY3Ci06MTA2QzQwMDBBQ0EzMDAwQzNDMDIwMDAyMTA4MjAwMEIzQzA1NjAwMDZCCi06MTA2QzUwMDAzQzA3MDQwMDEwODcwMDAzMDAwMDAwMDAwM0UwMDAwODY4Ci06MTA2QzYwMDAwMDAwMDAwMDhDQTkwOEQwMjQwQUZGRkQwMTJBNDAyNDVFCi06MTA2QzcwMDAwM0UwMDAwOEFDQTgwOEQwOENBNDA4RDAyNDA2RkZGRUNFCi06MTA2QzgwMDAwMDg2MTgyNDAzRTAwMDA4QUNBMzA4RDAzQzA1NjAxQTc1Ci06MTA2QzkwMDAzNEE2MDAxMDhDQzMwMDgwMjdCREZGRjg4Q0M1MDA4NDhCCi06MTA2Q0EwMDBBRkEzMDAwMDkzQTQwMDAwMjQwMjAwMDExMDgyMDAwMzlGCi06MTA2Q0IwMDBBRkE1MDAwNDAzRTAwMDA4MjdCRDAwMDg5M0E3MDAwMTZBCi06MTA2Q0MwMDAxNEUwMDAxNDk3QUMwMDAyOTdCODAwMDIzQzBGODAwMDVCCi06MTA2Q0QwMDAzMzBFRkZGQzAxQ0Y2ODIxQURBNTAwMDBBM0EwMDAwMDhBCi06MTA2Q0UwMDAzQzA2NjAwMDhDQzcwOEQwMjQwOEZGRkUzQzA0NjAxQUY0Ci06MTA2Q0YwMDAwMEU4MjgyNEFDQzUwOEQwOEZBMzAwMDQ4RkEyMDAwMEIwCi06MTA2RDAwMDAzNDk5MDAxMDI3QkQwMDA4QUYyMjAwODAwM0UwMDAwODdFCi06MTA2RDEwMDBBRjIzMDA4NDNDMEI4MDAwMzE4QUZGRkMwMTRCNDgyMUVCCi06MTA2RDIwMDA4RDI4MDAwMDBBMDAwNTdEQUZBODAwMDQyN0JERkZFOEZDCi06MTA2RDMwMDBBRkJGMDAxMDNDMUMwODAwMjc5QzNEODgzQzA1ODAwMDJDCi06MTA2RDQwMDA4Q0E0MDAwQzhDQTIwMDA0M0MwMzAwMDIwMDQ0MjgyNDA0Ci06MTA2RDUwMDAxMEEwMDAwQTAwQTMxODI0M0MwNjA0MDAzQzA0MDAwMjEyCi06MTA2RDYwMDAxNDYwMDAwOTAwQTYxMDI0MTQ0MDAwMEYzQzA0MDQwMDI1Ci06MTA2RDcwMDAwMDAwMDAwRDNDMUMwODAwMjc5QzNEODg4RkJGMDAxMEMwCi06MTA2RDgwMDAwM0UwMDAwODI3QkQwMDE4M0MwMjA4MDA4QzQyM0Q4MDRCCi06MTA2RDkwMDAwMDQwRjgwOTAwMDAwMDAwM0MxQzA4MDAyNzlDM0Q4OENBCi06MTA2REEwMDAwQTAwMDVBNjhGQkYwMDEwM0MwMjA4MDA4QzQyM0Q4NEZCCi06MTA2REIwMDAwMDQwRjgwOTAwMDAwMDAwMEEwMDA1QUMwMDAwMDAwMEQ3Ci06MTA2REMwMDAwMDA0MTFDMDAzRTAwMDA4MjQ0MjAyNDAzQzA0MDgwMDEzCi06MTA2REQwMDAyNDg0M0ZENDI0MDUwMDFBMEEwMDAwOUMwMDAwMzAyMUJFCi06MTA2REUwMDAyN0JERkZFMEFGQjAwMDEwM0MxMDgwMDBBRkJGMDAxODFGCi06MTA2REYwMDBBRkIxMDAxNDM2MTEwMTAwOTIyMjAwMDkwRTAwMDVCNjUxCi06MTA2RTAwMDAzMDQ0MDA3RjhFM0YwMDAwOEY4OTAwM0MzQzBGMDA4MEEzCi06MTA2RTEwMDAwM0UyNjAyMTI1ODgwMDQwMDA0OUY4MjEyNDBERkY4MDBECi06MTA2RTIwMDAzMTBFMDA3ODMxOTgwMDc4MzVGOTAwMDEzNUYxMDAwMjEzCi06MTA2RTMwMDAwMzE5MzgyNTAxRDE0ODI1MDEwRDMwMjQwM0VENTgyNENDCi06MTA2RTQwMDAwMThEMjgyNDI0MEEwMDQwMjQwNDAwODAyNDAzMDBDMDZCCi06MTA2RTUwMDBBRTBCMDAyNEFFMDAwODEwQUUwQTA4MTRBRTA0MDgxOEU5Ci06MTA2RTYwMDBBRTAzMDgxQ0FFMDUwODA0QUUwNzA4MjBBRTA2MDgwOEVECi06MTA2RTcwMDBBRTA5MDgyNDM2MDkwOTAwOTUzOTAwMEMzNjA1MDk4MDQ5Ci06MTA2RTgwMDAzM0VEMDA3RjMzMzhGRkZGMDAxODg5QzBBRTExMDgwMEQyCi06MTA2RTkwMDBBRTBGMDgyODk1MkMwMDBDOEZCRjAwMTg4RkIxMDAxNDdFCi06MTA2RUEwMDAzMThCRkZGRjAwMEI1MUMwQUUwQTAwMkM4Q0E0MDA1MEE4Ci06MTA2RUIwMDA4RkIwMDAxMDhDQTMwMDNDOEQyNzAwMDQ4Q0E4MDAxQzEwCi06MTA2RUMwMDA4Q0E2MDAzODNDMEU4MDBBMDFBRTEwMjEyN0JEMDAyMEEwCi06MTA2RUQwMDBBRjgyMDA0NEFGODQwMDUwQUY4MzAwNTRBRjg3MDA0Q0IyCi06MTA2RUUwMDBBRjg4MDA1QzAzRTAwMDA4QUY4NjAwNjAzQzA5MDgwMDQyCi06MTA2RUYwMDA5MTI5M0ZGOTI0QTgwMDAyM0MwNTExMDAwMDA5M0MwMDNCCi06MTA2RjAwMDAwMEU4MzAyNTAwQzUxODI1MjQ4MjAwMDhBQzgzMDAwMDY1Ci06MTA2RjEwMDAwM0UwMDAwOEFDODAwMDA0M0MwOTgwMDAzNTIzMDkwMDMwCi06MTA2RjIwMDA5MTI4MDEwQjkwNkEwMDExMjQwMjAwMjgwMDgwNDgyMTVBCi06MTA2RjMwMDAzMTQ3MDBGRjAwQTA3MDIxMDBDMDY4MjEzMTA4MDA0MEU3Ci06MTA2RjQwMDAxMEUyMDAwMjM0MEM4NkREMjQwQzA4MDAzQzBBODAwMEFDCi06MTA2RjUwMDAzNTQyMEE5QTk0NDcwMDAwMzU0QjBBOUMzNTQ2MEFBMEYwCi06MTA2RjYwMDAzMEY5RkZGRkFEMzkwMDAwOEQ3ODAwMDAzNTRCMEE4MDA1Ci06MTA2RjcwMDAyNDA0MDAwMUFEMzgwMDA0OENDRjAwMDBBRDJGMDAwOEMwCi06MTA2RjgwMDA5MTY1MDAxOTMwQTMwMDAzMTA2NDAwOUEyODY0MDAwMjgwCi06MTA2RjkwMDAxNDgwMDBCOTI0MDUwMDAyMTA2NTAwQTgyNDBGMDAwMzI2Ci06MTA2RkEwMDAxMDZGMDBCRTM1NDUwQUE0MjQwQTA4MDAxMThBMDA0RDVFCi06MTA2RkIwMDAwMDAwMDAwMDUxMDAwMDQyM0MwQjgwMDAzQzA0ODAwMEI3Ci06MTA2RkMwMDAzNDgzMDkwMDkwNjcwMDEyMzBFMjAwRkYwMDRENzgyMTAxCi06MTA2RkQwMDAwMDBGQzg4MDI3MjQwMDAxM0MwQTgwMDAzNTRGMDkwMEJCCi06MTA2RkUwMDA5MUU1MDAxOTM1NEMwOTgwOEQ4NzAwMjgzMEEzMDBGRkZBCi06MTA2RkYwMDAwMDAzMTUwMDAwNDc1ODI1MDAwNEM0MDAzQzE5NjAwMDM4Ci06MTA3MDAwMDAwMTc5MzAyNTM3MDgwNkZGQUQyNjAwMDBBRDI4MDAwNEMxCi06MTA3MDEwMDA4REVBMDAyQzI1MjgwMDI4QUQyQTAwMDg4REVDMDAzMEQwCi06MTA3MDIwMDBBRDJDMDAwQzhERTUwMDM0QUQyNTAwMTA4REU0MDAzODRBCi06MTA3MDMwMDBBRDI0MDAxNDhERTMwMDFDQUQyMzAwMTg4REU3MDAyMDYzCi06MTA3MDQwMDBBRDI3MDAxQzhERTIwMDI0QUQyMjAwMjA4REY5MDAyODIwCi06MTA3MDUwMDBBRDM5MDAyNDNDMDk4MDAwMzUyNjA5M0M4Q0NGMDAwMDY2Ci06MTA3MDYwMDAzNTJBMDEwMEFEMEUwMDA0QUQwRjAwMDA4RDRFMDAwQzVFCi06MTA3MDcwMDAzNTIzMDkwMDM1MjUwOTgwQUQwRTAwMDg5MDZDMDAxMkZCCi06MTA3MDgwMDA4RDQ3MDAwQzhDQjkwMDM0M0MxODA4MDA5MzE4M0ZGODY5Ci06MTA3MDkwMDAzMTgyMDBGRjAwNEQ1ODIxMDMyNzc4MjMwMDBCMzcwMDcxCi06MTA3MEEwMDAwMDE4MjQwMDAwQzQ3MDI1MzFFOUZGRkMwMUM5NjgyNURGCi06MTA3MEIwMDAyNTAyMDAxNEFEMEQwMDBDMDNFMDAwMDhBRDAwMDAxMDI3Ci06MTA3MEMwMDAzNTc4MDkwMDkzMDYwMDEyM0MwNTA4MDA5NEE1M0ZFOEI2Ci06MTA3MEQwMDAzMEM4MDBGRjAxMEQ1MDIxMDAwQTYwODAwQTAwMDYzQzA0Ci06MTA3MEUwMDAwMTg1MjAyMTE1MDAwMDYwMDAwMDAwMDAzQzA4MDgwMDE4Ci06MTA3MEYwMDA5NTA4M0ZFRTNDMDYwODAwOTRDNjNGRTgwMTA2MTAyMUMzCi06MTA3MTAwMDAzQzBCODAwMDM1NzkwOTAwOTMzODAwMTE5MzJBMDAxOTRGCi06MTA3MTEwMDAzNTY2MEE4MDMzMDgwMEZGOTRDRjAwMkEwMDA4NjA4Mjk5Ci06MTA3MTIwMDAzMTQ1MDBGRjk3OEEwMDU4MDAwQzFFMDAwMDA1MjQwMDFFCi06MTA3MTMwMDAzMDQ3RkZGRjAwNjQxMDI1MDA0N0MwMjUwMUVBMzAyMUQ5Ci06MTA3MTQwMDAzQzBCNDAwMDAzMEI0MDI1MDAwNjY0MDBBRDI4MDAwMDA2Ci06MTA3MTUwMDBBRDJDMDAwNDkzMjUwMDE4M0MwMzAwMDYyNTI4MDAxNERDCi06MTA3MTYwMDAwMDA1M0UwMDAwRTMxMDI1QUQyMjAwMDg4RjI0MDAyQzBFCi06MTA3MTcwMDAyNTRGMDAwMTMxRUI3RkZGQUQyNDAwMEM4RjM4MDAxQzQwCi06MTA3MTgwMDBBNzhCMDA1OEFEMzgwMDEwM0MwOTgwMDAzNTI2MDkzQzFCCi06MTA3MTkwMDA4Q0NGMDAwMDM1MkEwMTAwQUQwRTAwMDRBRDBGMDAwMEI5Ci06MTA3MUEwMDA4RDRFMDAwQzM1MjMwOTAwMzUyNTA5ODBBRDBFMDAwOEYxCi06MTA3MUIwMDA5MDZDMDAxMjhENDcwMDBDOENCOTAwMzQzQzE4MDgwMDBDCi06MTA3MUMwMDA5MzE4M0ZGODMxODIwMEZGMDA0RDU4MjEwMzI3NzgyM0EwCi06MTA3MUQwMDAwMDBCMzcwMDAwMTgyNDAwMDBDNDcwMjUzMUU5RkZGQ0MzCi06MTA3MUUwMDAwMUM5NjgyNTI1MDIwMDE0QUQwRDAwMEMwM0UwMDAwODVDCi06MTA3MUYwMDBBRDAwMDAxMDNDMDIwODAwOTQ0MjNGRjIzQzA1MDgwMDNDCi06MTA3MjAwMDA5NEE1M0ZFODM1NDQwQUE0M0MwNzA4MDA5NEU3M0ZFNDBFCi06MTA3MjEwMDA5NDhCMDAwMDAwNDVDODIxMDMyN0MwMjMwMDBCMUMwMEVECi06MTA3MjIwMDAyNzA2RkZGMjAwNjY1MDI1QUQyQTAwMENBRDIwMDAxMEE1Ci06MTA3MjMwMDBBRDJDMDAxNDBBMDAwNjMwMjUyOTAwMTgzNTRGMEFBNDg5Ci06MTA3MjQwMDA5NUU1MDAwMDk1NjQwMDI4MDAwNTE0MDAwMDA0M0MwMDRBCi06MTA3MjUwMDAzNDU5ODEwMDAwRUM1ODI1QUQzOTAwMENBRDJCMDAxMERECi06MTA3MjYwMDAwQTAwMDYzMDI1MjkwMDE0M0MwQzA4MDA5NThDM0ZFRURFCi06MTA3MjcwMDAwQTAwMDY4NjI1ODIwMDAxNTQ2MEZGNEMyNDBBMDgwMDlCCi06MTA3MjgwMDAzNTU4MEFBNDk3MDYwMDAwMDAwNjFDMDAwMDZDNTAyNTIzCi06MTA3MjkwMDBBRDJBMDAwQzBBMDAwNjMwMjUyOTAwMTAzQzAzMDgwMDI2Ci06MTA3MkEwMDA5NDYzM0ZGMjNDMDcwODAwOTRFNzNGRTgzQzBGMDgwMDc2Ci06MTA3MkIwMDA5NUVGM0ZFNDk0QTQwMDAwOTU3OTAwMjgwMDY3MTAyMTIxCi06MTA3MkMwMDAwMDRGNTgyMzAwMDQxQzAwMDAxOTM0MDAyNTc4RkZFRUZECi06MTA3MkQwMDAwMEQ4NzgyNTM0NkE4MTAwQUQyQTAwMENBRDJGMDAxMDRCCi06MTA3MkUwMDBBRDIwMDAxNEFEMkMwMDE4MEEwMDA2MzAyNTI5MDAxQzIyCi06MTA3MkYwMDAwM0UwMDAwODI0MDIwN0QwMjdCREZGRTBBRkIyMDAxODZBCi06MTA3MzAwMDBBRkIxMDAxNEFGQjAwMDEwQUZCRjAwMUMwRTAwMDA3Qzg2Ci06MTA3MzEwMDAwMDgwODgyMThGODgwMDU0OEY4NzAwNEMzQzA1ODAwOEFFCi06MTA3MzIwMDAzNEIyMDA4MDAxMTEyODIxM0MxMDgwMDAyNDAyMDA4MDJBCi06MTA3MzMwMDAyNDAzMDBDMDAwQTcyMDIzQUUwMjA4MTgzQzA2ODAwOEUyCi06MTA3MzQwMDBBRTAzMDgxQzE4ODAwMDA0QUY4NTAwNTRBQ0M1MDAwNENGCi06MTA3MzUwMDA4Q0M5MDAwNEFGODkwMDRDMTIyMDAwMDkzNjA0MDk4MDUyCi06MTA3MzYwMDAwRTAwMDcwMjAwMDAwMDAwOTI0QzAwMjc4RTBCMDA3NEY0Ci06MTA3MzcwMDAwMTgyNTAwNDAxNEIzMDIxQUU0NjAwMEMzNjA0MDk4MEQ2Ci06MTA3MzgwMDA4QzhFMDAxQzhGOEYwMDVDMDFDRjY4MjMxOUEwMDAwNDM1Ci06MTA3MzkwMDA4RkJGMDAxQzhDOTAwMDFDQUY5MDAwNUM4RkJGMDAxQzQ2Ci06MTA3M0EwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAwQTAwMDA3RTU5Ci06MTA3M0IwMDAyN0JEMDAyMDhGODYwMDUwOEY4MzAwNTQ4RjgyMDA0Q0ExCi06MTA3M0MwMDAzQzA1ODAwODM0QTQwMDgwQUM4NjAwNTBBQzgzMDAzQ0FGCi06MTA3M0QwMDAwM0UwMDAwOEFDQTIwMDA0M0MwMzA4MDA4QzYzMDA1NEU2Ci06MTA3M0UwMDAyN0JERkZGODMwODQwMEZGMjQ2MjAwMDEzMEE1MDBGRkI0Ci06MTA3M0YwMDAzQzAxMDgwMEFDMjIwMDU0MzBDNjAwRkYzQzA3ODAwMDZFCi06MTA3NDAwMDA4Q0U4MDE3ODA1MDBGRkZFM0MwQzdGRkZBM0E0MDAwMzdECi06MTA3NDEwMDA4RkFBMDAwMDM1OEJGRkZGMDE0QjQ4MjQwMDA2MjdDMEQwCi06MTA3NDIwMDAwMTI0NDAyNUFGQTgwMDAwMzRFMjAxMDA5MDQzMDAwQTg3Ci06MTA3NDMwMDBBM0EwMDAwMjNDMTk4MEZGQTNBMzAwMDE4RkFGMDAwMEFFCi06MTA3NDQwMDAzMEFFMDA3RjM3MzhGRkZGMDFGODYwMjQwMDBFNkUwMDc5Ci06MTA3NDUwMDAzQzBBMDAyMDM0RTUwMTQwMDE4RDU4MjUzNTQ5MjAwMEMzCi06MTA3NDYwMDAyNDA2RkY4MDNDMDQxMDAwMjdCRDAwMDhBQ0FCMDAwQ0Q0Ci06MTA3NDcwMDBBQ0E5MDAxNEE0QTAwMDE4QTBBNjAwMTIwM0UwMDAwODA0Ci06MTA3NDgwMDBBQ0U0MDE3ODMwODgwMEZGMzBBNzAwRkYzQzAzODAwMEE3Ci06MTA3NDkwMDA4QzYyMDE3ODA0NDBGRkZFM0MwQzgwMDAzNThBMEEwMEIzCi06MTA3NEEwMDA4RDRCMDAyMDM1ODQwMTQwMzU4NTA5ODBBQzhCMDAwNDZDCi06MTA3NEIwMDA4RDQ5MDAyNDAwMDczMDJCMDAwNjE1NDBBQzg5MDAwOEQ4Ci06MTA3NEMwMDBBMDg4MDAxMDkwQTMwMDRDQTA4MzAwMkQwM0UwMDAwOENBCi06MTA3NEQwMDBBNDgwMDAxODI3QkRGRkU4MzA4NDAwRkZBRkJGMDAxMDc0Ci06MTA3NEUwMDAwRTAwMDc2NzMwQTUwMEZGOEY4MzAwNTQ4RkJGMDAxMDg4Ci06MTA3NEYwMDAzQzA2ODAwMDM0QzUwMTQwMzQ0NzAwNDAyNDA0RkY5MDFFCi06MTA3NTAwMDAzQzAyMTAwMDI3QkQwMDE4QUNBMzAwMENBMEE0MDAxMjgwCi06MTA3NTEwMDBBQ0E3MDAxNDAzRTAwMDA4QUNDMjAxNzgyN0JERkZFMDZGCi06MTA3NTIwMDAzQzA4ODAwOEFGQkYwMDFDQUZCMjAwMThBRkIxMDAxNDE4Ci06MTA3NTMwMDBBRkIwMDAxMDM1MTAwMDgwOEUwNjAwMTgzQzA3ODAwMEE4Ci06MTA3NTQwMDAzMDkyMDBGRjAwQzcyMDI1QUUwNDAwMTgwRTAwMDA3QzFBCi06MTA3NTUwMDAzMEIxMDBGRjkyMDMwMDA1MzQ2MjAwMDgwRTAwMDA3RTg3Ci06MTA3NTYwMDBBMjAyMDAwNTAyNDAyMDIxMEUwMDA3N0IwMjIwMjgyMUY0Ci06MTA3NTcwMDAwMjQwMjAyMThGQkYwMDFDOEZCMjAwMTg4RkIxMDAxNDcxCi06MTA3NTgwMDA4RkIwMDAxMDI0MDUwMDA1MjQwNjAwMDEwQTAwMDczQzA2Ci06MTA3NTkwMDAyN0JEMDAyMDNDMDU4MDAwMzRBMzA5ODA5MDY2MDAwOEM4Ci06MTA3NUEwMDAzMEMyMDAwODEwNDAwMDBGM0MwQTAxMDEzNTQ5MDgwQUFBCi06MTA3NUIwMDBBQzg5MDAwMDhDQTgwMDc0QUM4ODAwMDQzQzA3MDgwMDZCCi06MTA3NUMwMDA5MEU3M0ZGODMwRTUwMDEwNTBBMDAwMDhBQzgwMDAwOEJDCi06MTA3NUQwMDAzQzBEODAwODM1QUMwMDgwOEQ4QjAwNThBQzhCMDAwOENBCi06MTA3NUUwMDAyNDg0MDAwQzAzRTAwMDA4MDA4MDEwMjEwQTAwMDdCRjdCCi06MTA3NUYwMDAyNDg0MDAwQzI3QkRGRkU4M0MwOTgwMDBBRkIwMDAxMEQ4Ci06MTA3NjAwMDBBRkJGMDAxNDM1MjYwOTgwOTBDODAwMDkyNDAyMDAwNjg3Ci06MTA3NjEwMDAwMEEwNTgyMTMxMDMwMEZGMzUyNzA5MDAwMDgwODAyMTk4Ci06MTA3NjIwMDAyNDA1MDAwNDEwNjIwMDdCMjQwODAwMDI5NENGMDA1QzUzCi06MTA3NjMwMDAzQzBFMDIwNDMxRURGRkZGMDFBRTYwMjVBRTBDMDAwMEYwCi06MTA3NjQwMDA5MENBMDAwODMxNDQwMDIwMTA4MDAwMDgwMDAwMDAwMEFCCi06MTA3NjUwMDA5MEMyMDA0RTNDMUYwMTAzMzdGOTAzMDAzMDU4MDBGRjcxCi06MTA3NjYwMDAwMzE5MzAyNTI0MDUwMDA4QUUwNjAwMDQ5MEY5MDAxMTI2Ci06MTA3NjcwMDA5MEU2MDAxMjkwRTQwMDExMzMzODAwRkYwMDE4NzA4Mjg5Ci06MTA3NjgwMDAzMENGMDBGRjAxQ0Y1MDIxMDE0QjY4MjEzMDg5MDBGRjJFCi06MTA3NjkwMDAzMUFBRkZGRjM5MjMwMDI4MDAwQTYwODAxNDYwMDAyQzAzCi06MTA3NkEwMDAwMjBDNDgyMzkwRTQwMDEyM0MxOTgwMDAzNzJGMDEwMDlGCi06MTA3NkIwMDAzMDhDMDBGRjAxOEIxODIxMDAwMzEwODAwMDQ1RjgyMTU5Ci06MTA3NkMwMDAwMDFGODQwMDM2MDcwNkZGQUQyNzAwMDQzNzNGMDkwMDdFCi06MTA3NkQwMDA5M0VDMDAxMTkzRUUwMDEyMzcyNjA5ODAwMDA1QzA4MjVBCi06MTA3NkUwMDA4REU0MDAwQzhDQzUwMDM0MzFDRDAwRkYwMUFCMTAyMUJFCi06MTA3NkYwMDAwMDU4MTgyMTAwQTRGODIzMDAwODg0MDAwMDAzM0YwMDZDCi06MTA3NzAwMDAwMEYwMzAyNTMzRjlGRkZGMzE4RjAwRkMwMEQ5NzAyNUUwCi06MTA3NzEwMDAwMTU4MjAyMTAxRTk2ODIxMDAwNDUwODBBREFFMDAwQzIxCi06MTA3NzIwMDAwRTAwMDA3QzAxMkE4MDIxM0MwODgwMDgyNDBCMDAwNDA0Ci06MTA3NzMwMDAzNTA1MDA4MDBFMDAwMDdFQTBBQjAwMDkwMjAwMTAyMTdDCi06MTA3NzQwMDA4RkJGMDAxNDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAxOEExCi06MTA3NzUwMDA5MEVDMDAxMTkwRTMwMDE5M0MxODA4MDA5NzE4M0ZFRUQ4Ci06MTA3NzYwMDAzMTgyMDBGRjAwMDJGODgyMzA3MDAwRkYwMDFGQ0UwMDVGCi06MTA3NzcwMDAwMDEwM0MwMDAzMjczMDI1MDBEODcwMjUzQzBGNDAwMDQ2Ci06MTA3NzgwMDAwMUNGNjgyNTNDMTk4MDAwQUQyRDAwMDAzNzNGMDkwMDZFCi06MTA3NzkwMDA5M0VDMDAxMTkzRUUwMDEyMzcyRjAxMDAzNzI2MDk4MDc5Ci06MTA3N0EwMDAwMDA1QzA4MjhERTQwMDBDOENDNTAwMzQzMUNEMDBGRjkzCi06MTA3N0IwMDAwMUFCMTAyMTAwNTgxODIxMDBBNEY4MjMwMDA4ODQwMDEwCi06MTA3N0MwMDAwMDAzM0YwMDAwRjAzMDI1MzNGOUZGRkYzMThGMDBGQzRDCi06MTA3N0QwMDAwMEQ5NzAyNTAxNTgyMDIxMDFFOTY4MjEwMDA0NTA4MDVBCi06MTA3N0UwMDBBREFFMDAwQzBFMDAwMDdDMDEyQTgwMjEzQzA4ODAwODEwCi06MTA3N0YwMDAyNDBCMDAwNDM1MDUwMDgwMEUwMDAwN0VBMEFCMDAwOUJDCi06MTA3ODAwMDAwMjAwMTAyMThGQkYwMDE0OEZCMDAwMTAwM0UwMDAwOEE5Ci06MTA3ODEwMDAyN0JEMDAxODBBMDAwN0QxMjQwODAwMTIyN0JERkZEMDk5Ci06MTA3ODIwMDAzQzAzODAwMEFGQjYwMDI4QUZCNTAwMjRBRkI0MDAyMDAxCi06MTA3ODMwMDBBRkIxMDAxNEFGQkYwMDJDQUZCMzAwMUNBRkIyMDAxODQzCi06MTA3ODQwMDBBRkIwMDAxMDM0NjcwMTAwOTBFNjAwMEIzMDk0MDBGRkU5Ci06MTA3ODUwMDAzMEI1MDBGRjMwQzIwMDMwMDAwMEIwMjExMDQwMDA5OTY4Ci06MTA3ODYwMDAwMDAwODgyMTM0NjQwOTgwOTA4ODAwMDgwMDA4MkUwMEY4Ci06MTA3ODcwMDAwMDA1MUUwMzA0NjAwMEMwMjQwNDAwMDQ4Rjg2MDA1NDI5Ci06MTA3ODgwMDAzQzAxMDgwMEEwMjQzRkY4M0MwQzgwMDBBRDgwMDA0ODdCCi06MTA3ODkwMDAzQzA0ODAwMDM0OEUwMTAwOTFDRDAwMEIzMUE1MDAyMDA2Ci06MTA3OEEwMDAxMEEwMDAwNzNDMDc4MDAwMzQ5MzA5ODA5MjcyMDAwODAyCi06MTA3OEIwMDAwMDEyODYwMDAwMTA3RTAzMDVFMDAwQzQzQzFGODAwODEzCi06MTA3OEMwMDAzNEVDMDEwMDkxOEEwMDBCMzRFQjA5ODA5MTY5MDAwOEM3Ci06MTA3OEQwMDAzMTQ0MDA0MDAwMDQ0MDJCMzEyMzAwMDgwMEM4OTgyM0E1Ci06MTA3OEUwMDAxNDYwMDAwMjI0MTIwMDAzMDAwMDkwMjEzQzEwODAwMDZDCi06MTA3OEYwMDAzNjE4MEE4MDM2MDQwOTAwOTcwRTAwMkM5MDgzMDAxMTc4Ci06MTA3OTAwMDA5MDg5MDAxMjkzMDUwMDE4MzA3RjAwRkYzMTI4MDBGRjk2Ci06MTA3OTEwMDAwMjQ4MTAyMTAwMDJDODgwOTMwRDAwMTgwMzNGNzgyMTBGCi06MTA3OTIwMDAwMUYxMzAyMTMwQjEwMEZGMDBEMTE4MjFBNzhFMDA1ODlECi06MTA3OTMwMDAzQzAxMDgwMEE0MjYzRkVFM0MwMTA4MDBBNDIzM0ZGMEQwCi06MTA3OTQwMDAxNUEwMDAwMjAwMDAwMDAwMDAwMDAwMEQ5MjBCMDEwQkNBCi06MTA3OTUwMDAzMDY1RkZGRjNDMDEwODAwQTQyMzNGRjIzMTZBMDA0MDdDCi06MTA3OTYwMDAzQzAxMDgwMEE0MjAzRkU4M0MwMTA4MDBBNDIwM0ZFNEJCCi06MTA3OTcwMDAxMTQwMDAwMjI0QTQwMDBBMjRBNDAwMEIzMDkxRkZGRjUwCi06MTA3OTgwMDAwRTAwMDFFNzAyMjAyMDIxOTIwNjAxMEIzQzBDMDgwMEFBCi06MTA3OTkwMDA5NThDM0ZGMjAwNDAyMDIxMDAwNjY5ODIzMUE3MDAwMTRBCi06MTA3OUEwMDAwRTAwMDYwMTAxODcyODIxMDA0MDIwMjEwMjYwMjgyMUM1Ci06MTA3OUIwMDAwRTAwMDYwQzAyNDAzMDIxMEUwMDA3QUIwMDQwMjAyMUQzCi06MTA3OUMwMDAxNkMwMDA2OTAwNDAyMDIxOTIxMjAxMEIzMjU2MDA0MDdGCi06MTA3OUQwMDAxMkMwMDAwNTNDMDUwMEZGOEM5MzAwMDAzNEFFRkZGRjkxCi06MTA3OUUwMDAwMjZFODAyNEFDOTAwMDAwMEUwMDAxRkIwMjIwMjAyMURBCi06MTA3OUYwMDAzQzBGMDgwMDkxRUYzRkY4MzFGMTAwMDMxMjIwMDAxNjEwCi06MTA3QTAwMDAzQzEzODAwODhGODIwMDU0M0MwOTgwMDgzNTI4MDA4MDkwCi06MTA3QTEwMDAyNDVGMDAwMUFEMUYwMDNDM0MwNTgwMDg4Q0I5MDAwNEM4Ci06MTA3QTIwMDAwM0UwMjAyMTAzM0ZDMDIzMUIwMDAwMDJBRjlGMDA1NDRFCi06MTA3QTMwMDA4Q0E0MDAwNDBFMDAwNzAyQUNBNDAwMDQzQzA3ODAwMEU0Ci06MTA3QTQwMDA4Q0VCMDA3NDNDMDQ4MDA4MzQ4MzAwODAwMDRCNTAyMTkwCi06MTA3QTUwMDBBQzZBMDAwQzNDMTM4MDA4MzY3MDAwODAwMjgwMjAyMTQ0Ci06MTA3QTYwMDAwMkEwMjgyMUEyMDAwMDZCMEUwMDA3NjczQzE0ODAwMEQyCi06MTA3QTcwMDA4RjkyMDA1NDM2OEMwMTQwQUQ5MjAwMEM4Rjg2MDA0OEU2Ci06MTA3QTgwMDAzQzE1MTAwMDM0NEQwMDA2MjRENjAwMDFBRjk2MDA0ODg2Ci06MTA3QTkwMDA4RkJGMDAyQ0ExODYwMDEyOEZCNjAwMjhBRDhEMDAxNDc4Ci06MTA3QUEwMDA4RkIzMDAxQ0FFOTUwMTc4OEZCMjAwMTg4RkI1MDAyNEZCCi06MTA3QUIwMDA4RkI0MDAyMDhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwOEQ1Ci06MTA3QUMwMDAyN0JEMDAzMDM0NjQwOTgwOTA4RjAwMDgwMDBGNzYwMEQ1Ci06MTA3QUQwMDAwMDBFNkUwMzA1QTAwMDMzMzQ3RjA5MDA5M0Y4MDAxQkVECi06MTA3QUUwMDAyNDE5MDAxMDNDMDEwODAwQTAzOTNGRjgzMzEzMDAwMkFDCi06MTA3QUYwMDAxMjYwRkY2NzhGODYwMDU0OEY4MjAwNjAxNDQ2RkY2NTE2Ci06MTA3QjAwMDAzQzA0ODAwMDBFMDAwMDdDMDAwMDAwMDAzQzA0ODAwODYzCi06MTA3QjEwMDAzNDg1MDA4MDkwQTgwMDA5MjQwNjAwMTYzMTAzMDBGRjc4Ci06MTA3QjIwMDAxMDY2MDAwRDAwMDAwMDAwOTBBQjAwMDkzQzA3MDgwMDQzCi06MTA3QjMwMDA5MEU3M0ZGODI0MDkwMDA4MzE2NDAwRkYzNEVBMDAwMUFGCi06MTA3QjQwMDAzQzAxMDgwMEEwMkEzRkY4MTA4OTAwMkYyNDBDMDAwQUVECi06MTA3QjUwMDAxMDhDMDAyODI0MDIwMDBDMEUwMDAwN0UwMDAwMDAwMEEzCi06MTA3QjYwMDAwQTAwMDg2QThGODYwMDU0MEUwMDA3QzMwMjQwMjgyMUNECi06MTA3QjcwMDAwQTAwMDhCODAwNDAyMDIxM0MwQjgwMDgzNTZBMDA4MENDCi06MTA3QjgwMDA4RDQ2MDA1NDhDRTkwMDBDMTEyMEZGM0RBRjg2MDA1NDU3Ci06MTA3QjkwMDAyNDA3MDAxNDNDMDEwODAwQTAyNzNGRjgwQTAwMDg2OUU4Ci06MTA3QkEwMDAzQzBDODAwMDkwOTEwMDA4MjQxMjAwMDIzQzAxMDgwMDY3Ci06MTA3QkIwMDBBMDMyM0ZGODMyMzAwMDIwMTIwMDAwMEIyNDE2MDAwMUUyCi06MTA3QkMwMDA4Rjg2MDA1NDBBMDAwODZBMjQxMTAwMDgzN0Y4MDA4MEU0Ci06MTA3QkQwMDA4RjAyMDAzOEFGRTIwMDA0OEZGOTAwMDRBRjE5MDAzQ0I3Ci06MTA3QkUwMDAwQTAwMDg3NjNDMDc4MDAwOEY4NjAwNTQwQTAwMDg2QTY1Ci06MTA3QkYwMDAyNDExMDAwNEEwQTIwMDA5MEUwMDAwN0UwMDAwMDAwMDc1Ci06MTA3QzAwMDAwQTAwMDg2QThGODYwMDU0MjQwMjAwMTQwQTAwMDk0NEZFCi06MTA3QzEwMDBBMEEyMDAwOTI3QkRGRkU4QUZCMDAwMTAzQzEwODAwMDEzCi06MTA3QzIwMDBBRkJGMDAxNDM2MDIwMTAwOTA0NDAwMDkwRTAwMDc2NzQwCi06MTA3QzMwMDAyNDA1MDAwMTNDMDQ4MDA4OTA5OTAwMEUzNDgzMDA4MEU0Ci06MTA3QzQwMDA5MDlGMDAwRjkwNkYwMDI2OTA4OTAwMEEzM0Y4MDBGRjg0Ci06MTA3QzUwMDAwMDE5NkUwMDAwMTg3NDAwMzFFQzAwRkYwMUFFNTAyNUQxCi06MTA3QzYwMDAwMDBDNUEwMDAxNEIzODI1MzEyODAwRkYzNjAzMDE0MDMzCi06MTA3QzcwMDAzNDQ1NjAwMDAwRTgzMDI1MjQwMkZGODEzQzA0MTAwMEY4Ci06MTA3QzgwMDBBQzY2MDAwQzhGQkYwMDE0QUM2NTAwMTRBMDYyMDAxMjNCCi06MTA3QzkwMDBBRTA0MDE3ODhGQjAwMDEwMDNFMDAwMDgyN0JEMDAxODgzCi06MTA3Q0EwMDAyN0JERkZFODMwODQwMEZGQUZCRjAwMTAwRTAwMDc2NzVDCi06MTA3Q0IwMDAzMEE1MDBGRjNDMDU4MDAwMzRBNDAxNDAzNDQ3MDA0MDVCCi06MTA3Q0MwMDAyNDA2RkY5MkFDODcwMDE0QTA4NjAwMTI4RjgzMDA1NDE0Ci06MTA3Q0QwMDA4RkJGMDAxMDNDMDIxMDAwMjdCRDAwMThBQzgzMDAwQ0MxCi06MTA3Q0UwMDAwM0UwMDAwOEFDQTIwMTc4MjdCREZGRDhBRkIwMDAxMEI4Ci06MTA3Q0YwMDAzMDg0MDBGRjMwQjAwMEZGM0MwNTgwMDBBRkIxMDAxNEJECi06MTA3RDAwMDBBRkJGMDAyMEFGQjMwMDFDQUZCMjAwMTgwMDA0MTBDMjE4Ci06MTA3RDEwMDAzNEE2MDEwMDMyMDMwMDAyMzA1MTAwMDExNDYwMDAwNzU0Ci06MTA3RDIwMDA5MEQyMDAwOTNDMDk4MDA4MzUzMzAwODA5MjY4MDAwNTM0Ci06MTA3RDMwMDAzMTA3MDAwODEwRTAwMDBDMzA4QTAwMTAwMjQwMjAyMUJBCi06MTA3RDQwMDAwRTAwMDc4RDAyMjAyODIxMjQwMjAwMDE4RkJGMDAyMDkxCi06MTA3RDUwMDA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMEM5Ci06MTA3RDYwMDAwM0UwMDAwODI3QkQwMDI4MTU0MDAwMzQzNEE1MEEwMEIwCi06MTA3RDcwMDA4Q0I4MDAyNDhDQUYwMDA4MTMwRjAwNEIwMDAwMzgyMTkyCi06MTA3RDgwMDAzQzBEODAwODM1QjMwMDgwOTI2QzAwNjgyNDA2MDAwMjI4Ci06MTA3RDkwMDAzMThCMDBGRjExNjYwMDg0M0MwNjgwMDAzNEMyMDEwMDc0Ci06MTA3REEwMDA5MjYzMDA0QzkwNTkwMDA5MzA3RjAwRkY1M0Y5MDAwNEEyCi06MTA3REIwMDAzMjEzMDA3QzEwRTAwMDY5MDAwMDAwMDAzMjEzMDA3Q0U4Ci06MTA3REMwMDA1NjYwMDA1QzAyNDAyMDIxMTYyMDAwMDkzMjBEMDAwMTlGCi06MTA3REQwMDAzQzBDODAwMDM1ODQwMTAwMzU4QjBBMDA4RDY1MDAyNDQxCi06MTA3REUwMDA4Qzg2MDAwNDE0QTZGRkQ5MDAwMDEwMjEzMjBEMDAwMTdBCi06MTA3REYwMDAxMUEwMDAwRTAyNDAyMDIxM0MxODgwMDAzNzEwMDEwMDI1Ci06MTA3RTAwMDA4RTBGMDAwQzhGOEUwMDUwMTFFRTAwMDgwMDAwMDAwMDU1Ci06MTA3RTEwMDAwRTAwMDg0RDAyMjAyODIxOEUxOTAwMEMzQzFGODAwOEZFCi06MTA3RTIwMDAzN0YwMDA4MEFFMTkwMDUwMDI0MDIwMjEwRTAwMDc3QjgxCi06MTA3RTMwMDAwMjIwMjgyMTBBMDAwOTk5MjQwMjAwMDEzQzA1MDgwMEJCCi06MTA3RTQwMDA4Q0E1MDA2NDI0QTQwMDAxM0MwMTA4MDBBQzI0MDA2NDVCCi06MTA3RTUwMDAxNjAwMDAwRDAwMDAwMDAwMDIyMDI4MjEwRTAwMDc3QjA0Ci06MTA3RTYwMDAwMjQwMjAyMTkyNkUwMDY4MjQwQzAwMDIzMUNEMDBGRkY4Ci06MTA3RTcwMDAxMUFDMDAyMjAyNDAyMDIxMEUwMDA5NEIwMDAwMDAwMDNFCi06MTA3RTgwMDAwQTAwMDk5OTI0MDIwMDAxMEUwMDAwNzAyNDA0MDAwMTc4Ci06MTA3RTkwMDA5MjZCMDAyNTAyMEIzMDI1MEUwMDAwN0VBMjY2MDAyNUE1Ci06MTA3RUEwMDAwQTAwMDlERDAyMjAyODIxOEU2MjAwMTg4Q0RGMDAwNDAwCi06MTA3RUIwMDA4Q0I5MDAyNDAwMDIxRTAyMTdGOUZGQjEzMDY1MDA3RjYzCi06MTA3RUMwMDA5MjY4MDA0QzI2NDQwMDAxMzA5MzAwN0YxMjY1MDA0MDA4Ci06MTA3RUQwMDAzMTAzMDBGRjE0NjRGRkFCM0MwRDgwMDgyNjQ3MDAwMTBFCi06MTA3RUUwMDAzMEYxMDA3RjMwRTIwMEZGMTIyNTAwMEIyNDA3MDAwMTczCi06MTA3RUYwMDAwMDQwOTAyMTBBMDAwOUE2MjQxMTAwMDEyNDA1MDAwNDc1Ci06MTA3RjAwMDAwRTAwMDczQzI0MDYwMDAxMEUwMDA5NEIwMDAwMDAwMDkzCi06MTA3RjEwMDAwQTAwMDk5OTI0MDIwMDAxMjQwNUZGODAwMjQ1MjAyNDVCCi06MTA3RjIwMDAwMDg1OTAyNjMyNDIwMEZGMDA0MDkwMjEwQTAwMDlBNkY5Ci06MTA3RjMwMDAyNDExMDAwMTBFMDAwODREMDIyMDI4MjEzMjA3MDAzMEQ0Ci06MTA3RjQwMDAxMEUwRkZBMTMyMTAwMDgyMDI0MDIwMjEwRTAwMDc4REI4Ci06MTA3RjUwMDAwMjIwMjgyMTBBMDAwOTk5MjQwMjAwMDE4RTY5MDAxOEQ0Ci06MTA3RjYwMDAwMjQwMjAyMTAyMjAyODIxMDEyNjQwMjUwRTAwMDk2RTEyCi06MTA3RjcwMDBBRTY4MDAxODkyNjQwMDRDMjQwNTAwMDMyNDA2MDAwMTNBCi06MTA3RjgwMDAwRTAwMDczQzMwODQwMEZGMEUwMDAwNzAyNDA0MDAwMTQ2Ci06MTA3RjkwMDA5MjcxMDAyNTAyMTE1MDI1MEUwMDAwN0VBMjZBMDAyNTc0Ci06MTA3RkEwMDAwQTAwMDk5OTI0MDIwMDAxOEU2RjAwMTgzQzE4ODAwMDE1Ci06MTA3RkIwMDAwMjQwMjAyMTAxRjg3MDI1MDIyMDI4MjEwRTAwMDc3QkI1Ci06MTA3RkMwMDBBRTZFMDAxODkyNjQwMDRDMEEwMDBBMjUyNDA1MDAwNEQ1Ci06MTA3RkQwMDAzMjRBMDA4MDM5NDkwMDgwMTQ2OUZGNkEzQzBEODAwOEVDCi06MTA3RkUwMDAwQTAwMDlGRTI2NDcwMDAxMjdCREZGQzBBRkIwMDAxOEY4Ci06MTA3RkYwMDAzQzEwODAwMEFGQkYwMDM4QUZCNzAwMzRBRkI2MDAzMEUwCi06MTA4MDAwMDBBRkI1MDAyQ0FGQjQwMDI4QUZCMzAwMjRBRkIyMDAyMDRFCi06MTA4MDEwMDAwRTAwMDVCRUFGQjEwMDFDMzYwMjAxMDA5MDQ1MDAwQkZBCi06MTA4MDIwMDAwRTAwMDk4MDkwNDQwMDA4MTQ0MDAwRTc4RkJGMDAzODFDCi06MTA4MDMwMDAzQzA4ODAwODM1MDcwMDgwQTBFMDAwNkIzNjA2MDk4MDA4Ci06MTA4MDQwMDA5MEM1MDAwMDI0MDMwMDUwM0MxNzA4MDAyNkY3M0ZCMEZECi06MTA4MDUwMDAzMEE0MDBGRjNDMTMwODAwMjY3MzNGQzAxMDgzMDAwM0M4Ci06MTA4MDYwMDAzQzEwODAwMDAwMDBCODIxMDAwMDk4MjEyNDFGMDAxMDVGCi06MTA4MDcwMDAzNjExMDEwMDM2MTIwQTAwMzYxNTA5ODA4RTU4MDAyNDg4Ci06MTA4MDgwMDA4RTM0MDAwNDhFQUYwMDIwOEY4QzAwNTQzQzAxMDgwMDE5Ci06MTA4MDkwMDBBMDNGM0ZGODM2MTkwQTgwOTcyQjAwMkM4RUY2MDAwMDdGCi06MTA4MEEwMDA5MzJBMDAxODAyOTg3MDIzMDFFQzY4MjMzQzAxMDgwMDExCi06MTA4MEIwMDBBQzJFM0ZENDNDMDEwODAwQUMyRDNGRDgzQzAxMDgwMDU5Ci06MTA4MEMwMDBBQzJDM0ZGQ0E3OEIwMDU4MDJDMEY4MDkzMTU0MDBGRkNDCi06MTA4MEQwMDAzMDQ5MDAwMjE1MjAwMEU5MzA0MjAwMDE1MDQwMDBDNDQwCi06MTA4MEUwMDA5MjI3MDAwOTkyQTkwMDA4MzEyODAwMDgxNTAwMDAwMjEzCi06MTA4MEYwMDAyNDE1MDAwMzAwMDBBODIxM0MwQTgwMDAzNTQzMDkwMDM0Ci06MTA4MTAwMDAzNTQ0MEEwMDhDOEQwMDI0OTA3MjAwMTE5MDcwMDAxMjhBCi06MTA4MTEwMDA5MDdGMDAxMTMyNTkwMEZGMzIxMTAwRkYwMkIxMTAyMThGCi06MTA4MTIwMDAwMDAyQzA4MDMzRUYwMEZGMDMxOUIwMjEwMjhGNzAyMURECi06MTA4MTMwMDAwMkQ0NjAyMTI1Q0IwMDEwM0MwMTA4MDBBNDM2M0ZFRTlDCi06MTA4MTQwMDAzQzAxMDgwMEFDMkQ0MDAwM0MwMTA4MDBBNDJDM0ZGMDhECi06MTA4MTUwMDAzQzAxMDgwMEE0MkIzRkVDMzU1NjAxMDAzNTU0MDk4MDQyCi06MTA4MTYwMDAzNTUxMEUwMDhGODcwMDU0OEY4OTAwNUM4RTg1MDAyMDZBCi06MTA4MTcwMDAyNDA4MDAwNjAxMjczMDIzM0MwMTA4MDBBQzI4M0ZGNDA2Ci06MTA4MTgwMDAwMEE3MjgyMzA0QzAwMEI1MDAwMDkwMjEwNEEwMDBCMzdDCi06MTA4MTkwMDAwMEM1NTAyQjExNDAwMEI1MDAwMDAwMDAzQzAxMDgwMDU0Ci06MTA4MUEwMDBBQzI2M0ZEODhFNjIwMDAwMDA0MEY4MDkwMDAwMDAwMEI1Ci06MTA4MUIwMDAzMDQ2MDAwMjE0QzAwMDc0MDA0MDgwMjEzMDRCMDAwMUEyCi06MTA4MUMwMDA1NTYwMDAxMThFNjIwMDA0M0MwRDA4MDA4REFEM0ZEQzRGCi06MTA4MUQwMDAzQzBFQzAwMDNDMDQ4MDAwMDFBRTYwMjVBRTJDMDAwMEM3Ci06MTA4MUUwMDA4Qzk4MDAwMDMzMEYwMDA4MTFFMEZGRkQwMDAwMDAwMDM0Ci06MTA4MUYwMDA5NjNGMDAwODI0MTIwMDAxQTc5RjAwNDA4RTM5MDAwNDFBCi06MTA4MjAwMDBBRjk5MDAzODhFNjIwMDA0MDA0MEY4MDkwMDAwMDAwMEI5Ci06MTA4MjEwMDAwMjAyODAyNTMyMDMwMDAyMTQ2MDAwQjMwMDAwMDAwMDU3Ci06MTA4MjIwMDAzQzA5MDgwMDk1MjkzRkU0M0MwNjA4MDA5NEM2M0ZGMDRECi06MTA4MjMwMDAzQzBBMDgwMDk1NEEzRkU2M0MwNzA4MDA4Q0U3M0ZEQzEzCi06MTA4MjQwMDAwMTI2NzAyMTNDMDMwODAwOEM2MzQwMDAzQzA4MDgwMEI0Ci06MTA4MjUwMDA5NTA4M0ZGQTAxQ0EyMDIxOEVEOTAwMEMwMEU5MjgyMTk3Ci06MTA4MjYwMDAyNDlGMDAwMjAwQTg3ODIxMDA2N0MwMjEzM0U0RkZGRkFCCi06MTA4MjcwMDBBRjk5MDA1MDNDMDEwODAwQUMzODQwMDAzQzAxMDgwMEI4Ci06MTA4MjgwMDBBNDJGM0ZFODNDMDEwODAwQTQyRTNGRjIwRTAwMDFFN0I2Ci06MTA4MjkwMDAwMDAwMDAwMDhGOEQwMDQ4MDA0MDIwMjEzQzAxMDgwMEI0Ci06MTA4MkEwMDBBMDJEM0ZGOThFNjIwMDA4MjVBQzAwMDFBRjhDMDA0ODdDCi06MTA4MkIwMDAwMDQwRjgwOTAwMDAwMDAwOEY4NTAwNTQwMkEwMzAyMTIyCi06MTA4MkMwMDAwRTAwMDYwQzAwNDAyMDIxMEUwMDA3QUIwMDQwMjAyMUNDCi06MTA4MkQwMDA4RTZCMDAwQzAxNjBGODA5MDA0MDIwMjEzQzBBMDgwMDY4Ci06MTA4MkUwMDA5NTRBM0ZGMjNDMDYwODAwOTRDNjNGRTYwMTQ2NDgyMTA1Ci06MTA4MkYwMDAyNTI4MDAwMjBFMDAwMUZCMzEwNEZGRkYzQzA1MDgwMEE5Ci06MTA4MzAwMDA4Q0E1M0ZENDNDMDcwODAwOENFNzNGREMwMEE3MjAyMzY2Ci06MTA4MzEwMDAzQzAxMDgwMEFDMjQzRkQ0MTQ4MDAwMDYwMDAwMDAwMDlCCi06MTA4MzIwMDAzQzAyMDgwMDhDNDIzRkY0MzQ0QjAwNDAzQzAxMDgwMDAyCi06MTA4MzMwMDBBQzJCM0ZGNDEyNDAwMDQzOEY4RTAwNDQ4RTJEMDAxMDcyCi06MTA4MzQwMDA4RjkyMDA0NEFFNEQwMDIwOEUyQzAwMThBRTRDMDAyNEJECi06MTA4MzUwMDAzQzA0MDgwMDk0ODQzRkU4MEUwMDA3MDQwMDAwMDAwMDdECi06MTA4MzYwMDA4RjlGMDA1NDhFNjcwMDEwM0MwMTA4MDBBQzNGM0ZGQzFCCi06MTA4MzcwMDAwMEUwRjgwOTAwMDAwMDAwM0MxOTA4MDA4RjM5M0ZENEU0Ci06MTA4MzgwMDAxNzIwRkY3OThGODcwMDU0OTc5MzAwNTgzQzExODAwRTc3Ci06MTA4MzkwMDAzMjE2MDEwMDBFMDAwNzMzQTYzMzAwMkMxNkMwMDA0NTJDCi06MTA4M0EwMDAzMjAzMDAxMDU0NjAwMDRDOEVFNTAwMDQzMjA4MDA0MDk3Ci06MTA4M0IwMDA1NTAwMDAxRDhFRjAwMDA4OEVFNDAwMEMwMDgwRjgwOUM2Ci06MTA4M0MwMDAwMDAwMDAwMDhGQkYwMDM4OEZCNzAwMzQ4RkI2MDAzMDM4Ci06MTA4M0QwMDA4RkI1MDAyQzhGQjQwMDI4OEZCMzAwMjQ4RkIyMDAyMEZCCi06MTA4M0UwMDA4RkIxMDAxQzhGQjAwMDE4MDNFMDAwMDgyN0JEMDA0MENCCi06MTA4M0YwMDA4Rjg2MDAzQzM2MTEwRTAwMDAwNzJFMDAwMEE2MjAyNUI3Ci06MTA4NDAwMDBBRTA0MDA4MDhFNDMwMDIwOEU1MDAwMjRBRkEzMDAxMEU1Ci06MTA4NDEwMDBBRTIzMDAxNDhGQjIwMDEwQUUzMjAwMTBBRTMwMDAxQzNDCi06MTA4NDIwMDAwQTAwMEE3RkFFMzAwMDE4MDIwMEY4MDkwMDAwMDAwMEMwCi06MTA4NDMwMDA4RUU0MDAwQzAwODBGODA5MDAwMDAwMDAwQTAwMEIzOEYwCi06MTA4NDQwMDA4RkJGMDAzODI0MTgwMDAxMjQwRjAwMDFBNUMwMDAyMEIwCi06MTA4NDUwMDBBNUQ4MDAyMjBBMDAwQjFBQURDRjAwMjQzQzAxMDgwMDY5Ci06MTA4NDYwMDBBQzIwM0ZEODBBMDAwQUIwOEU2MjAwMDAzQzAxMDgwMDMwCi06MTA4NDcwMDBBQzI1M0ZEODBBMDAwQUIwOEU2MjAwMDA5MjI0MDAwOUExCi06MTA4NDgwMDAwRTAwMDc3QjAwMDAyODIxOEZCRjAwMzg4RkI3MDAzNDEzCi06MTA4NDkwMDA4RkI2MDAzMDhGQjUwMDJDOEZCNDAwMjg4RkIzMDAyNDI2Ci06MTA4NEEwMDA4RkIyMDAyMDhGQjEwMDFDOEZCMDAwMTgwM0UwMDAwOENECi06MTA4NEIwMDAyN0JEMDA0MDNDMTQ4MDAwOTI5NTAxMDkwMDAwMjgyMTRFCi06MTA4NEMwMDAwRTAwMDg0RDMyQTQwMEZGMzIwMzAwMTA1MDYwRkZCOEM4Ci06MTA4NEQwMDAzMjA4MDA0MDhFRTUwMDA0MDBBMEY4MDkwMDAwMDAwMDBBCi06MTA4NEUwMDAwQTAwMEIzMjMyMDgwMDQwNTI0MEZGQTg5NzkzMDA1ODEwCi06MTA4NEYwMDA4RTM0MDAxNDhGOTMwMDQ0QUU3NDAwMjA4RTM1MDAxQzFGCi06MTA4NTAwMDBBRTc1MDAyNDBBMDAwQjI5OTc5MzAwNTg4RjgyMDAxNDNGCi06MTA4NTEwMDAwMDA0MjE4MDAzRTAwMDA4MDA4MjEwMjEzQzA3ODAwODRECi06MTA4NTIwMDAzNEUyMDA4MDkwNDMwMDY5MDA4MDQwMjExMDYwMDAwOTFGCi06MTA4NTMwMDAzQzA0MDEwMDNDMDcwODAwOENFNzNGRkM4RjgzMDAzMEJGCi06MTA4NTQwMDAwMEUzMjAyMzA0ODAwMDA4OTM4OTAwMUMxNEUzMDAwMzQ3Ci06MTA4NTUwMDAwMTAwMjAyMTAzRTAwMDA4MDA4MDEwMjEzQzA0MDEwMEZDCi06MTA4NTYwMDAwM0UwMDAwODAwODAxMDIxMTEyMDAwMEIwMDY3MzgyMzcxCi06MTA4NTcwMDAzQzBEODAwMDM1QUMwOTgwOTE4QjAwN0MzMTZBMDAwMjkzCi06MTA4NTgwMDAxMTQwMDAyMDI0MDkwMDM0MDBFOTcwMkIxNUMwRkZGMUQwCi06MTA4NTkwMDAwMTAwMjAyMTAwRTkzODIzMjQwM0ZGRkMwMEEzQzgyNEE0Ci06MTA4NUEwMDAwMEUzQzAyNDAwRjk3ODJCMTVFMEZGRUEwMzA4MjAyMTNFCi06MTA4NUIwMDAzMEM0MDAwMzAwMDQxMDIzMTRDMDAwMTQzMDQ5MDAwMzI5Ci06MTA4NUMwMDAwMDAwMzAyMTAwQTk3ODIxMDFFNjcwMjEwMEVFNjgyQjFGCi06MTA4NUQwMDAxMUEwRkZFMDNDMDQwMTAwMkQzODAwMDEwMDA2QzgyQjZCCi06MTA4NUUwMDAwMTA1NDgyMTAzMTkzODI0MTRFMEZGREEyNTI0RkZGQzkzCi06MTA4NUYwMDAyNDAyRkZGQzAwQTIxODI0MDA2ODIwMjEwM0UwMDAwOEU4Ci06MTA4NjAwMDAwMDgwMTAyMTBBMDAwQkE4MjQwOTAwMzAzQzBDODAwMEQ3Ci06MTA4NjEwMDAzNTg2MDk4MDkwQ0IwMDdDMzE2QTAwMDQxNTQwRkZFOTYzCi06MTA4NjIwMDAyNDA2MDAwNDBBMDAwQkI3MDAwMDMwMjEzQzAzMDgwMEI4Ci06MTA4NjMwMDA4QzYzMDA1QzhGODIwMDE4MjdCREZGRTBBRkJGMDAxODdECi06MTA4NjQwMDBBRkIxMDAxNDEwNjIwMDA1QUZCMDAwMTAwMDAzMjlDMEU0Ci06MTA4NjUwMDAyNEE0MDI4MEFGODQwMDE0QUY4MzAwMTgzQzEwODAwMDczCi06MTA4NjYwMDAzNjAyMEEwMDk0NDUwMDMyMzYxMTAxMDAwRTAwMEI4OUQzCi06MTA4NjcwMDAzMEE0M0ZGRjhFMjQwMDAwMjQxRkZGODAzQzExMDA4MEE3Ci06MTA4NjgwMDAwMDgyQzAyMTAzMUY2MDI0MzMwOTAwN0YwMDBDQzk0MDExCi06MTA4NjkwMDAwMzI5NDAyNTMzMEUwMDc4MzYyRjAwMDMzQzBEMTAwMENGCi06MTA4NkEwMDAwMTBENTAyNTAxQ0Y1ODI1QUUwQzAwMjgzNjA4MDk4MDUxCi06MTA4NkIwMDBBRTBDMDgwQ0FFMEIwODJDQUUwQTA4MzA5MTAzMDA2OTEyCi06MTA4NkMwMDAzQzA2ODAwQzAxMjYzODIxMTA2MDAwMDZBRjg3MDAzNDdDCi06MTA4NkQwMDA4RDA5MDAzQzhEMDMwMDZDMDEyMzM4MjMxOEUwMDA4MkQzCi06MTA4NkUwMDAwMDAwMDAwMDNDMEI4MDA4MzU2QTAwODAzQzEwODAwMEQwCi06MTA4NkYwMDBBMTQwMDA2OTM2MDYwOTgwOENDMjAwMzgzQzA2ODAwMDIzCi06MTA4NzAwMDAzNEM1MEEwMDkwQTgwMDNDMzEwQzAwMjAxMTgwMDAxQUVBCi06MTA4NzEwMDBBRjgyMDAzMDI0MEQwMDAxM0MwRTgwMDAzNUQxMEEwMEVDCi06MTA4NzIwMDBBMzhEMDAxQ0FGODAwMDI0OEUyNDAwMjQ4Rjg1MDAyNDlDCi06MTA4NzMwMDAyNDBEMDAwOEFGODAwMDIwQUY4MDAwMjgzQzAxMDgwMDE1Ci06MTA4NzQwMDBBNDJEM0ZFNjNDMDEwODAwQTQyMDNGRkEwRTAwMEI4RDRCCi06MTA4NzUwMDAwMDAwMzAyMTkyMjgwMDNDOEZCRjAwMTg4RkIxMDAxNDE4Ci06MTA4NzYwMDA4RkIwMDAxMDAwMDg2MTQyQUY4MjAwMkMyN0JEMDAyMEFFCi06MTA4NzcwMDAwM0UwMDAwODMxODIwMDAxOTBCODAwMzIyNDBFMDAwMUFECi06MTA4NzgwMDAzMzBGMDBGRjAwMEYyMTgyMTA4RTAwNDEyNDE5MDAwMkQ4Ci06MTA4NzkwMDAxMDk5MDA2NDM0QzQwQUMwM0MwMzgwMDAzNDY0MEEwMEE5Ci06MTA4N0EwMDA4QzhGMDAyNDE1RTAwMDFFMzQ2NjA5MDA5MDlGMDAzMDc1Ci06MTA4N0IwMDAyNDE4MDAwNTMzRjkwMDNGMTMzODAwNEUyNDAzMDAwMTRDCi06MTA4N0MwMDA4Rjg2MDAyMEEzODMwMDFDQUY4NjAwMjhBRjg2MDAyNDdDCi06MTA4N0QwMDAzQzBFODAwMDM1RDEwQTAwOEUyNDAwMjQ4Rjg1MDAyNEIxCi06MTA4N0UwMDAyNDBEMDAwODNDMDEwODAwQTQyRDNGRTYzQzAxMDgwMEQwCi06MTA4N0YwMDBBNDIwM0ZGQTBFMDAwQjhEMDAwMDAwMDA5MjI4MDAzQ0UwCi06MTA4ODAwMDA4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTAwMDA4NjE0MkI0Ci06MTA4ODEwMDBBRjgyMDAyQzI3QkQwMDIwMDNFMDAwMDgzMTgyMDAwMTU4Ci06MTA4ODIwMDA4QzhBMDAwODhDOEIwMDI0OENEMDAwNjQzQzBFODAwMDY1Ci06MTA4ODMwMDAzNUQxMEEwMDAxNEIyODIzQUY5MDAwMjRBMzgwMDAxQ0VGCi06MTA4ODQwMDBBRjg1MDAyODhFMjQwMDI0OEY4NjAwMjA4Rjg1MDAyNDg5Ci06MTA4ODUwMDAyNDBEMDAwODNDMDEwODAwQTQyRDNGRTYzQzAxMDgwMDVGCi06MTA4ODYwMDBBNDIwM0ZGQTBFMDAwQjhEMDAwMDAwMDA5MjI4MDAzQzZGCi06MTA4ODcwMDA4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTAwMDA4NjE0MjQ0Ci06MTA4ODgwMDBBRjgyMDAyQzI3QkQwMDIwMDNFMDAwMDgzMTgyMDAwMUU4Ci06MTA4ODkwMDA5MEEyMDAzMDMwNTEwMDNGNTIyNDAwMjgzNEM1MEFDMDU1Ci06MTA4OEEwMDA4Q0IwMDAyNDE2MDAwMDIyMzRDQjA5MDA4Q0E2MDA0OEFFCi06MTA4OEIwMDAzQzBBN0ZGRjM1NDVGRkZGMDBDNTEwMjQzQzBFODAwMEI5Ci06MTA4OEMwMDBBRjgyMDAyMDM1QzUwOTAwOEY4ODAwMjA4Q0FEMDA2MDg0Ci06MTA4OEQwMDAwMTBENjAyQjE1ODAwMDAyMDEwMDIwMjE4Q0E0MDA2MDk2Ci06MTA4OEUwMDAwQTAwMEMyQ0FGODQwMDIwOEQwMjAwNkMwQTAwMEMwNkRDCi06MTA4OEYwMDAzQzA2ODAwMDhDODIwMDQ4OEY4NjAwMjAzQzA5N0ZGRjY4Ci06MTA4OTAwMDAzNTI3RkZGRjAwNDc4ODI0M0MwNDgwMDgyNDAzMDAwMTJBCi06MTA4OTEwMDBBRjkxMDAyOEFDODAwMDZDQTM4MzAwMUMwQTAwMEMzQUM1Ci06MTA4OTIwMDBBRjg2MDAyNDhDOUYwMDE0MEEwMDBDMkNBRjlGMDAyMEZGCi06MTA4OTMwMDA4RDYyMDA2ODBBMDAwQzc2M0MwRTgwMDAzNEM0MDk4MDA5Ci06MTA4OTQwMDA4Qzg5MDA3MDhDQTMwMDE0MDEyMzM4MkIxMEUwMDAwNEU0Ci06MTA4OTUwMDAwMDAwMDAwMDhDODIwMDcwMEEwMDBDNzYzQzBFODAwMDQzCi06MTA4OTYwMDA4Q0EyMDAxNDBBMDAwQzc2M0MwRTgwMDA4Rjg1MDAyNDM3Ci06MTA4OTcwMDAyN0JERkZFMEFGQkYwMDE4QUZCMTAwMTQxNEEwMDAwODdFCi06MTA4OTgwMDBBRkIwMDAxMDNDMDQ4MDAwMzQ4NzBBMDA5MEU2MDAzMDRECi06MTA4OTkwMDAyNDAyMDAwNTMwQzMwMDNGMTA2MjAwQjkzNDg0MDkwMDhFCi06MTA4OUEwMDA4RjkxMDAyMDAwQTA4MDIxM0MwNDgwMDAzNDhFMEEwMEJBCi06MTA4OUIwMDA4RENEMDAwNDNDMDYwODAwOENDNjNGRDgzMUE3M0ZGRjkwCi06MTA4OUMwMDAwMEU2NjAyQjU1ODAwMDAxMDBFMDMwMjE5MzhGMDAxQ0YxCi06MTA4OUQwMDAxMUUwMDA3ODAwRDAyODJCMzQ5RjA5ODA5M0Y5MDA3Q0E3Ci06MTA4OUUwMDAzMzM4MDAwMjEzMDAwMDc5MjQwMzAwMzQwMEMzMTAyQjM1Ci06MTA4OUYwMDAxNDQwMDBEOTAwMDAwMDAwMDBDMzMwMjMwMEQwMjgyQjExCi06MTA4QTAwMDAzQzAxMDgwMEE0MjMzRkU0MTRBMDAwNkUwMjAwMTgyMURBCi06MTA4QTEwMDAzQzA0MDgwMDhDODQzRkQ0MDA2NDQwMkI1NTAwMDAwMUM2Ci06MTA4QTIwMDAwMDYwMjAyMTNDMDU4MDAwMzRBOTBBMDA5MTJBMDAzQzA2Ci06MTA4QTMwMDAzQzAxMDgwMEFDMjQzRkRDMzE0MzAwMjAxNDYwMDAwM0ZCCi06MTA4QTQwMDAwMDAwNDgyMTM0QUIwRTAwOEQ2OTAwMTg4Rjg4MDAyQzdGCi06MTA4QTUwMDAwMTI4MjAyQjEwODAwMDVGMDAwMDAwMDAzQzA1MDgwMDZBCi06MTA4QTYwMDA4Q0E1M0ZEQzAwQTk2ODIxMDEwRDYwMkIxMTgwMDA1QzAyCi06MTA4QTcwMDAwMEIwNzAyQjAxMDkzODIzMDBFMDI4MjEzQzAxMDgwMEQ4Ci06MTA4QTgwMDBBQzI3M0ZEQzEyMDAwMDAzMjQwQUZGRkMxMEIwMDA4RDZECi06MTA4QTkwMDAzMjI0MDAwMzAwQUExODI0M0MwMTA4MDBBNDIwM0ZGQTU1Ci06MTA4QUEwMDAzQzAxMDgwMEFDMjMzRkRDMDA2MDI4MjE4Rjg0MDAyNEI3Ci06MTA4QUIwMDAxMjA0MDAwNjNDMEI4MDA4OEQ2QzAwNkMwMjAwMjAyMTIzCi06MTA4QUMwMDBBRjkxMDAyMDI1OTAwMDAxQUQ3MDAwNkM4RjhEMDAyOEMzCi06MTA4QUQwMDAwMDg1ODgyM0FGOTEwMDI0MDFBNTIwMjNBRjg0MDAyOEJFCi06MTA4QUUwMDAxMjIwMDAwMjI0MDcwMDE4MjQwNzAwMTAzQzE4ODAwOEY4Ci06MTA4QUYwMDAzNzA2MDA4MDkwQ0YwMDY4M0MwMTA4MDBBMDI3M0ZGOEFGCi06MTA4QjAwMDAyNDA3MDAwMTMxRUUwMEZGMTFDNzAwNDcwMDAwMDAwMEZDCi06MTA4QjEwMDAxNDgwMDAxODAwMDAyODIxM0MwNjgwMDAzNEQxMDk4MDEwCi06MTA4QjIwMDAzNENEMDEwMDkxQTYwMDA5OEUyQzAwMTgyNEM0MDAwMTQ4Ci06MTA4QjMwMDAwMDBDODYwMjMyMDUwMDdGMzA4QjAwN0YxMTY1MDA3RkJDCi06MTA4QjQwMDAyNDA3RkY4MDNDMTk4MDA4MzcyOTAwODBBMTI0MDA0Q0FECi06MTA4QjUwMDAzQzA4MDgwMDhEMDgzRkY0MjQxODAwMDIzQzAxMDgwMDdFCi06MTA4QjYwMDBBMDM4NDAzOTM1MEYwMDA4M0MwMTA4MDBBQzJGM0ZGNDE1Ci06MTA4QjcwMDAyNDA1MDAxMDNDMDI4MDAwMzQ0NDBBMDA5MDgzMDAzQzJECi06MTA4QjgwMDAzMDdGMDAyMDEzRTAwMDA1MDBBMDIwMjEyNDBBMDAwMTBFCi06MTA4QjkwMDAzQzAxMDgwMEFDMkEzRkRDMzRBNDAwMDE4RkJGMDAxODYwCi06MTA4QkEwMDA4RkIxMDAxNDhGQjAwMDEwMDA4MDEwMjEwM0UwMDAwODg2Ci06MTA4QkIwMDAyN0JEMDAyMDNDMDEwODAwQTQyMDNGRTQxMEEwRkY5NDQyCi06MTA4QkMwMDAwMjAwMTgyMTBBMDAwQ0NBMDBDMDE4MjEwQTAwMENDMUJBCi06MTA4QkQwMDAyNDAzMDAzMDNDMDUwODAwOENBNTNGREMwMEIwNzAyQjVFCi06MTA4QkUwMDAxMUMwRkZBODAwMDAwMDAwM0MxOTA4MDA5NzM5M0ZFNEJECi06MTA4QkYwMDAwMzI1QzAyMTAzMDc3ODJCMTFFMDAwMDcyQ0FBMDAwNEVECi06MTA4QzAwMDAzQzAzNjAwMDhDNjI1NDA0MzA1RjAwM0YxN0UwRkZFM0Q4Ci06MTA4QzEwMDAyNDA0MDA0MjJDQUEwMDA0MTE0MEZGOUEyNDA0MDA0MkJDCi06MTA4QzIwMDAwQTAwMEQyRThGQkYwMDE4MTUyOEZGQjkwMDAwMDAwMEE0Ci06MTA4QzMwMDA4Q0NBMDAxODNDMUY4MDAwMjQwMjAwMDIwMTVGMTgyNTI2Ci06MTA4QzQwMDBBQ0MzMDAxODM3RjkwQTAwQTBDMjAwNjg5MzI5MDAzQ0ExCi06MTA4QzUwMDAyNDA0MDAwNDAwQTAxMDIxMzEyODAwMjAzQzAxMDgwMDU5Ci06MTA4QzYwMDBBMDI0NDAzOTExMDAwMDAyMjQwNTAwMTAyNDAyMDAwMTU0Ci06MTA4QzcwMDAzQzAxMDgwMEFDMjIzRkQ0MEEwMDBEMjQzQzAyODAwMEQ1Ci06MTA4QzgwMDA4Rjg4MDAyODhDODkwMDYwMDEwOTI4MkIxNEEwMDAwMjFECi06MTA4QzkwMDAwMTAwODgyMThDOTEwMDYwM0MwNDgwMDAzNDhCMEUwMDIwCi06MTA4Q0EwMDA4RDY0MDAxODI0MEEwMDAxMDIyMDI4MjEwMjIwMzAyMUFFCi06MTA4Q0IwMDBBMzhBMDAxQzBFMDAwQjhEMDIyMDgwMjEwQTAwMENCMDNDCi06MTA4Q0MwMDBBRjgyMDAyQzAwMDQ1ODIzMTIyMDAwMDczMTY0MDAwM0Y3Ci06MTA4Q0QwMDAzQzBFODAwMDM1QzcwOTgwOTBFRDAwN0MzMUFDMDAwNDZCCi06MTA4Q0UwMDAxNTgwMDAxOTI0OEYwMDA0M0MwMTA4MDBBNDI0M0ZGQUQ5Ci06MTA4Q0YwMDAzQzFGMDgwMDk3RkYzRkZBMDNFNUM4MjEwMEQ5QzAyQkFECi06MTA4RDAwMDAxMzAwRkY2QjhGODQwMDI0MkNBNjAwMDUxNEMwRkZBMzYyCi06MTA4RDEwMDAyNDA0MDA0MjMwQTIwMDAzMTQ0MDAwMDIwMEEyMTgyM0UxCi06MTA4RDIwMDAyNEEzRkZGQzNDMDEwODAwQUMyMzNGREMzQzAxMDgwMDBECi06MTA4RDMwMDBBNDIwM0ZGQTBBMDAwQ0YxMDA2MDI4MjEwMEM3NzAyNDJCCi06MTA4RDQwMDAwQTAwMEQxNzAxQzcyMDI2M0MwMTA4MDBBNDJGM0ZGQTk2Ci06MTA4RDUwMDAwQTAwMEQ4MjAwMDAwMDAwM0MwMTA4MDBBQzIwM0ZEQzRFCi06MTA4RDYwMDAwQTAwMEQyRDI0MDQwMDQyOEY4MzAwMjgzQzA1ODAwMDVBCi06MTA4RDcwMDAzNEFBMEEwMDE0NjAwMDA2MDAwMDEwMjE5MTQ3MDAzMDU4Ci06MTA4RDgwMDAyNDA2MDAwNTMwRTQwMEZGMTA4NjAwMDMwMDAwMDAwMDA4Ci06MTA4RDkwMDAwM0UwMDAwODAwMDAwMDAwOTE0QjAwNDgzMTY5MDBGRjJCCi06MTA4REEwMDAwMDA5NDFDMjE1MDBGRkZBM0MwNjgwMDgzQzA0MDgwMDk3Ci06MTA4REIwMDA5NDg0M0ZFNDNDMDMwODAwOEM2MzNGRkMzQzE5MDgwMEFBCi06MTA4REMwMDA4RjM5M0ZEQzNDMEYwODAwOTVFRjNGRkEwMDY0QzAyMTZCCi06MTA4REQwMDA4Q0NEMDAwNDAzMTk3MDIxMDFDRjYwMjEzNEFCMEUwMDRCCi06MTA4REUwMDAwMThEMjgyMzE4QTAwMDFEMDAwMDAwMDA5MTRGMDA0Q0E5Ci06MTA4REYwMDA4RjhDMDAzNDk1NkQwMDEwMzFFRTAwRkY4RDg5MDAwNERBCi06MTA4RTAwMDAwMUFFMzAyMzhEOEEwMDAwMzBDRUZGRkYwMDBFMjkwMDE2Ci06MTA4RTEwMDAwMTI1QzgyMTAwMDAzODIxMDE0NzIwMjEwMzI1MTgyQkY2Ci06MTA4RTIwMDAwMDgzQzAyMUFEOTkwMDA0QUQ5ODAwMDA5MThGMDAwQTI1Ci06MTA4RTMwMDAwMUNGNjgyMUExOEQwMDBBOTU2NTAwMTI4RjhBMDAzNDQ4Ci06MTA4RTQwMDBBNTQ1MDAwODk1NEIwMDM4MjU2OTAwMDFBNTQ5MDAzODYzCi06MTA4RTUwMDA5MTQ4MDAwRDM1MDcwMDA4QTE0NzAwMEQwM0UwMDAwODA4Ci06MTA4RTYwMDAwMDAwMDAwMDI3QkRGRkQ4QUZCMDAwMTg5Mzg4MDAxQzk5Ci06MTA4RTcwMDA4RkIwMDAxNDNDMEE4MDAwM0MxOTdGRkY4Rjg3MDAyNENDCi06MTA4RTgwMDAzNzM4RkZGRkFGQkYwMDIwQUZCMTAwMUMzNTVGMEEwMENECi06MTA4RTkwMDAwMjE4MTgyNDkzRUIwMDNDMDAwODdGQzAzQzAyQkZGRjdGCi06MTA4RUEwMDAwMDZGNjAyNTJDRjAwMDAxMzQ0OUZGRkYzQzFGMDgwMEQzCi06MTA4RUIwMDA4RkZGM0ZGQzhGOTkwMDMwM0MxODA4MDA5NzE4M0ZGMjU1Ci06MTA4RUMwMDAwMTg5NzgyNDAwMTA0NzgwM0MwN0VGRkYzQzA1RjBGRjQ0Ci06MTA4RUQwMDAwMUU4MTgyNTNDMTE4MDAwMzE2OTAwMjAzNEUyRkZGRkQxCi06MTA4RUUwMDAzNEFERkZGRjM2MkUwOTgwMjdBNTAwMTAyNDA2MDAwMkFFCi06MTA4RUYwMDAwM0Y5NjAyMzI3MEIwMDAyMzU0QTBFMDAwMDYyMTgyNDk0Ci06MTA4RjAwMDAwMDgwODAyMTE1MjAwMDAyMDAwMDQwMjE4RDQ4MDAxQ0I3Ci06MTA4RjEwMDBBN0FCMDAxMjA1ODAwMDM5MjQwNzAwMDAzMEU4MDBGRkVECi06MTA4RjIwMDAwMDA4M0YwMDAwNjc1ODI1M0MwMjgwMDhBRkFCMDAxNEUyCi06MTA4RjMwMDAzNDRGMDA4MDkxRUEwMDY4M0MwODA4MDA5MTA4M0ZGOTJFCi06MTA4RjQwMDAzQzA5REZGRjM1MkNGRkZGMDAwQUY4MkIzQzAyMDgwMDJDCi06MTA4RjUwMDA5NDQyM0ZFQ0EzQTgwMDExMDE2Q0MwMjQwMDFGQ0Y0MDM1Ci06MTA4RjYwMDAwMzE5MTgyNThGQTcwMDEwQUZBMzAwMTQzQzBDMDgwMEFDCi06MTA4RjcwMDA5MThDM0ZGQkE3QTIwMDE2OEZBQjAwMTQwMEVENDgyNDk0Ci06MTA4RjgwMDAzQzBGMDEwMDNDMEEwRkZGMDEyRkM4MjUzMTk4MDAwMzU4Ci06MTA4RjkwMDAzNTVGRkZGRjAxNkQ0MDI0M0MwMjcwMDAwMzNGMzgyNDIxCi06MTA4RkEwMDAwMDE4MUUwMDAwRTI0ODI1MDEwMzc4MjVBRkFGMDAxNDI5Ci06MTA4RkIwMDBBRkE5MDAxMDkxQ0MwMDdDMEUwMDAwOTJBM0FDMDAxNTZDCi06MTA4RkMwMDAzNjJEMEEwMDkxQTYwMDNDMzBDNDAwMjAxMDgwMDAwNjE3Ci06MTA4RkQwMDAyNjAyMDAwODNDMTEwODAwOTYzMTNGRTgyNjJFRkZGRkNDCi06MTA4RkUwMDAzQzAxMDgwMEE0MkUzRkU4OEZCRjAwMjA4RkIxMDAxQzc5Ci06MTA4RkYwMDA4RkIwMDAxODAzRTAwMDA4MjdCRDAwMjg4RjhCMDAyQ0RECi06MTA5MDAwMDAwMTBCNTAyQjU1NDBGRkM1MjQwNzAwMDEwQTAwMEUwRTJFCi06MTA5MDEwMDAzMEU4MDBGRjkzODMwMDFDM0MwMjgwMDAyN0JERkZEODhFCi06MTA5MDIwMDAzNDQ4MEEwMDAwODA1MDIxQUZCRjAwMjAzNDQ2MEFDMEY3Ci06MTA5MDMwMDAwMTAwMjgyMTEwNjAwMDBFMzQ0NDA5ODA5MTA3MDAzMDlGCi06MTA5MDQwMDAyNDBCMDAwNThGODkwMDIwMzBFQzAwM0YxMThCMDAwQkIyCi06MTA5MDUwMDAwMDAwMzgyMUFGQTkwMDEwM0MwQjgwMDg4RDY5MDA2QzFFCi06MTA5MDYwMDBBRkFBMDAxODBFMDAwMTVBQUZBOTAwMTRBMzgwMDAxQzdCCi06MTA5MDcwMDA4RkJGMDAyMDAzRTAwMDA4MjdCRDAwMjg4RDFGMDA0ODk3Ci06MTA5MDgwMDAzQzE4MDgwMDhGMTgzRkRDOEY5OTAwMjgzQzAyN0ZGRkI2Ci06MTA5MDkwMDA4RDA4MDA0NDM0NDNGRkZGQUZBOTAwMTAzQzBCODAwODRCCi06MTA5MEEwMDA4RDY5MDA2QzAzRTM3MDI0MDMxOTc4MjEwMUNGNjgyM0Q0Ci06MTA5MEIwMDAwMUE4MzgyMUFGQUEwMDE4MEUwMDAxNUFBRkE5MDAxNDY4Ci06MTA5MEMwMDAwQTAwMEU2MkEzODAwMDFDM0MwNTgwMDAzNEE2MEEwMDQyCi06MTA5MEQwMDA5MEM3MDAzQzNDMDYwODAwOTRDNjNGRkEzQzAyMDgwMERBCi06MTA5MEUwMDA4QzQyM0ZGNDMwRTMwMDIwMDAwNjI0MDAxMDYwMDAxRTk0Ci06MTA5MEYwMDAwMDQ0MzgyNTNDMDg4MDA4MzUwNTAwODA5MEEzMDA2OEFFCi06MTA5MTAwMDAwMDAwNDgyMTI0MDgwMDAxMDAwMDI4MjEyNDA0MDAwMTU3Ci06MTA5MTEwMDAzQzA2ODAwMDhDQ0QwMTc4MDVBMEZGRkUzNENGMDE0MEQ1Ci06MTA5MTIwMDBBREU4MDAwODNDMDIwODAwOEM0MjNGRkNBNUU1MDAwNEM1Ci06MTA5MTMwMDBBNUU0MDAwNkFERTIwMDBDM0MwNDA4MDA5MDg0M0ZGOTcxCi06MTA5MTQwMDAzQzAzODAwODM0NzkwMDgwQTFFNDAwMTJBREU3MDAxNEVDCi06MTA5MTUwMDBBNUU5MDAxODkzMzgwMDRDM0MwRTEwMDBBMUY4MDAyRDMyCi06MTA5MTYwMDAwM0UwMDAwOEFDQ0UwMTc4MzRBOTBFMDA4RDI4MDAxQzY1Ci06MTA5MTcwMDAzQzBDMDgwMDhEOEMzRkRDOTUyQjAwMTY5NTJBMDAxNEMyCi06MTA5MTgwMDAwMTg2NDgyMTMxNjRGRkZGMEEwMDBFOEEzMTQ1RkZGRjQ2Ci06MTA5MTkwMDAzQzA0ODAwMDM0ODMwQTAwOTA2NTAwM0MzMEEyMDAyMDJCCi06MTA5MUEwMDAxMDQwMDAxOTM0ODcwRTAwMDAwMDQwMjEwMDAwMzgyMUQzCi06MTA5MUIwMDAwMDAwMjAyMTNDMDY4MDAwOENDOTAxNzgwNTIwRkZGRUJDCi06MTA5MUMwMDAzNENBMDE0MDM0Q0YwMTAwOTFFQjAwMDlBRDQ4MDAwOERBCi06MTA5MUQwMDAzQzBFMDgwMDhEQ0UzRkZDMjQwREZGOTEyNDBDMDA0MDc2Ci06MTA5MUUwMDAzQzA4MTAwMEE1NDQwMDA0QTU0NzAwMDZBRDRFMDAwQzQ1Ci06MTA5MUYwMDBBMTREMDAxMkFENEMwMDE0QTU0MDAwMThBMTRCMDAyRDRDCi06MTA5MjAwMDAwM0UwMDAwOEFDQzgwMTc4OENFODAwMTg5NEU2MDAxMjZFCi06MTA5MjEwMDA5NEU0MDAxMDMwQzdGRkZGMEEwMDBFQjMzMDg0RkZGRjU0Ci06MTA5MjIwMDAzQzA0ODAwMDM0ODMwQTAwOTA2NTAwM0MzMEEyMDAyMDlBCi06MTA5MjMwMDAxMDQwMDAyNzI3QkRGRkY4MjQwOTAwMDEwMDAwMzgyMTU1Ci06MTA5MjQwMDAyNDA4MDAwMTNDMDY4MDAwOENDQTAxNzgwNTQwRkZGRTFFCi06MTA5MjUwMDAzQzAyODBGRjM0QzQwMTAwOTA4RDAwMDkzQzBDMDgwMEUyCi06MTA5MjYwMDA5MThDNDAzOUEzQUQwMDAzOEZBQjAwMDAzMTg1MDA3RkE2Ci06MTA5MjcwMDAzNDU5RkZGRjAxNjY1MDI1QUZBQTAwMDA5MDgzMDAwQTExCi06MTA5MjgwMDBBM0EwMDAwMjAwMDU3RTAwQTNBMzAwMDE4RkI4MDAwMDg4Ci06MTA5MjkwMDAzNENCMDE0MDI0MEMzMDAwMDMxOTcwMjQwMUNGNjgyNTIxCi06MTA5MkEwMDBBRDZEMDAwQzI3QkQwMDA4QUQ2QzAwMTRBNTYwMDAxODYyCi06MTA5MkIwMDBBRDY5MDAwOEE1NjcwMDA0MjQwOUZGODBBNTY4MDAwNkMxCi06MTA5MkMwMDAzQzA4MTAwMEExNjkwMDEyMDNFMDAwMDhBQ0M4MDE3ODU2Ci06MTA5MkQwMDAzNDg3MEUwMDhDRTkwMDE4OTRFNjAwMTI5NEU0MDAxMDI0Ci06MTA5MkUwMDAzMEM4RkZGRjBBMDAwRUQ3MzA4N0ZGRkYyN0JERkZFMDIxCi06MTA5MkYwMDBBRkIxMDAxNDNDMTE4MDAwQUZCMDAwMTBBRkJGMDAxODM4Ci06MTA5MzAwMDAzNjM4MEEwMDk3MEYwMDMyMzYzMDAxMDAwRTAwMEI4OTA0Ci06MTA5MzEwMDAzMUU0M0ZGRjhFMEUwMDAwMjQwREZGODAzQzA0MjAwMDRFCi06MTA5MzIwMDAwMUMyNTgyMTAxNkQ2MDI0MDAwQzQ5NDAzMTZBMDA3RjYwCi06MTA5MzMwMDAwMTJBNDAyNTAxMDQzODI1M0MwNDgwMDhBRTI3MDgzMDY2Ci06MTA5MzQwMDAzNDg2MDA4MDkwQzUwMDY4MjQwMzAwMDIzMEEyMDBGRjJDCi06MTA5MzUwMDAxMDQzMDAwNDhGOUYwMDIwOEY5OTAwMjRBQzlGMDA2ODY5Ci06MTA5MzYwMDBBQzk5MDA2NDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDRCCi06MTA5MzcwMDAwM0UwMDAwODI3QkQwMDIwM0MwQTA4MDAyNTRBM0FBODVGCi06MTA5MzgwMDAzQzA5MDgwMDI1MjkzQjM4M0MwODA4MDAyNTA4MkY0NEUzCi06MTA5MzkwMDAzQzA3MDgwMDI0RTczQzA0M0MwNjA4MDAyNEM2MzkyQzlFCi06MTA5M0EwMDAzQzA1MDgwMDI0QTUzNjgwM0MwNDA4MDAyNDg0MzI4NDRGCi06MTA5M0IwMDAzQzAzMDgwMDI0NjMzOUUwM0MwMjA4MDAyNDQyMzc3QzY3Ci06MTA5M0MwMDAzQzAxMDgwMEFDMkEzRkI4M0MwMTA4MDBBQzI5M0ZCNDdFCi06MTA5M0QwMDAzQzAxMDgwMEFDMjgzRkIwM0MwMTA4MDBBQzI3M0ZCQzcyCi06MTA5M0UwMDAzQzAxMDgwMEFDMjYzRkNDM0MwMTA4MDBBQzI1M0ZDNDQyCi06MTA5M0YwMDAzQzAxMDgwMEFDMjQzRkMwM0MwMTA4MDBBQzIzM0ZEMDM2Ci06MTA5NDAwMDAzQzAxMDgwMEFDMjIzRkM4MDNFMDAwMDgwMDAwMDAwMDU3Ci06MTA5NDEwMDA4MDAwMDk0MDgwMDAwOTAwODAwODAxMDA4MDA4MDA4MDY5Ci06MTA5NDIwMDA4MDA4MDAwMDgwMEUwMDAwODAwODAwODA4MDA4MDAwMDk2Ci06MTA5NDMwMDA4MDAwMEE4MDgwMDAwQTAwODAwMDA5ODA4MDAwMDkwMDA2Ci06MDAwMDAwMDFGRgotLyoKLSAqIFRoaXMgZmlsZSBjb250YWlucyBmaXJtd2FyZSBkYXRhIGRlcml2ZWQgZnJvbSBwcm9wcmlldGFyeSB1bnB1Ymxpc2hlZAotICogc291cmNlIGNvZGUsIENvcHlyaWdodCAoYykgMjAwNCAtIDIwMDkgQnJvYWRjb20gQ29ycG9yYXRpb24uCi0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCBmb3IgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpcm13YXJlIGRhdGEKLSAqIGluIGhleGFkZWNpbWFsIG9yIGVxdWl2YWxlbnQgZm9ybWF0LCBwcm92aWRlZCB0aGlzIGNvcHlyaWdodCBub3RpY2UgaXMKLSAqIGFjY29tcGFueWluZyBpdC4KLSAqLwpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvYm54Mi9ibngyLW1pcHMtMDktNi4yLjEuZncuaWhleCBiL2Zpcm13YXJlL2JueDIvYm54Mi1taXBzLTA5LTYuMi4xLmZ3LmloZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjgyNzliNQotLS0gL2Rldi9udWxsCisrKyBiL2Zpcm13YXJlL2JueDIvYm54Mi1taXBzLTA5LTYuMi4xLmZ3LmloZXgKQEAgLTAsMCArMSw2NTI2IEBACis6MTAwMDAwMDAwODAwMDExODA4MDAwMDAwMDAwMDU1OTQwMDAwMDBDODE2Cis6MTAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwNTU5NEVGCis6MTAwMDIwMDAwMDAwMDAzODAwMDA1NjVDMDgwMDAwQTAwODAwMDAwMDM2Cis6MTAwMDMwMDAwMDAwNTc0NDAwMDA1Njk0MDgwMDU5MjAwMDAwMDA4NDM2Cis6MTAwMDQwMDAwMDAwQUREODA4MDA1NzQ0MDAwMDAxQzAwMDAwQUU1Q0JECis6MTAwMDUwMDAwODAwMzIxMDA4MDAwMDAwMDAwMDkyRjgwMDAwQjAxQ0Y4Cis6MTAwMDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwOTJGOEZFCis6MTAwMDcwMDAwMDAwMDMzQzAwMDE0MzE0MDgwMDA0OTAwODAwMDQwMDQxCis6MTAwMDgwMDAwMDAwMTJGQzAwMDE0NjUwMDAwMDAwMDAwMDAwMDAwMENCCis6MTAwMDkwMDAwMDAwMDAwMDA4MDAxNkZDMDAwMDAwMDQwMDAxNTk0QzlDCis6MTAwMEEwMDAwODAwMDBBODA4MDAwMDAwMDAwMDNEMjgwMDAxNTk1MDg5Cis6MTAwMEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwM0QyOEQzCis6MDgwMEMwMDAwMDAwMDAzMDAwMDE5Njc4RjkKKzowODAwQzgwMDBBMDAwMDQ2MDAwMDAwMDBFMAorOjEwMDBEMDAwMDAwMDAwMDAwMDAwMDAwRDYzNkY2RDM2MkUzMjJFMzFERgorOjEwMDBFMDAwMDAwMDAwMDAwNjAyMDEwMjAwMDAwMDAwMDAwMDAwMDMwMgorOjEwMDBGMDAwMDAwMDAwQzgwMDAwMDAzMjAwMDAwMDAzMDAwMDAwMDAwMworOjEwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRgorOjEwMDExMDAwMDAwMDAwMTAwMDAwMDEzNjAwMDBFQTYwMDAwMDAwMDU0OQorOjEwMDEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhDNworOjEwMDEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRgorOjEwMDE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwMDE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RgorOjEwMDE2MDAwMDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwMDE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RgorOjEwMDE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDA1RgorOjEwMDE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RgorOjEwMDFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RgorOjEwMDFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRgorOjEwMDFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRgorOjEwMDFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRgorOjEwMDFFMDAwMDAwMDAwMDAxMDAwMDAwMzAwMDAwMDAwMDAwMDAwMERFRgorOjEwMDFGMDAwMDAwMDAwMEQzQzAyMDgwMDI0NDI1NjA4M0MwMzA4MDBBMQorOjEwMDIwMDAwMjQ2MzU3NTRBQzQwMDAwMDAwNDMyMDJCMTQ4MEZGRkRCMgorOjEwMDIxMDAwMjQ0MjAwMDQzQzFEMDgwMDM3QkQ5RkZDMDNBMEYwMjFEMAorOjEwMDIyMDAwM0MxMDA4MDAyNjEwMDExODNDMUMwODAwMjc5QzU2MDhBQQorOjEwMDIzMDAwMEUwMDAyNTYwMDAwMDAwMDAwMDAwMDBEMjdCREZGQjRCNAorOjEwMDI0MDAwQUZBMTAwMDBBRkEyMDAwNEFGQTMwMDA4QUZBNDAwMEM1MAorOjEwMDI1MDAwQUZBNTAwMTBBRkE2MDAxNEFGQTcwMDE4QUZBODAwMUNGMAorOjEwMDI2MDAwQUZBOTAwMjBBRkFBMDAyNEFGQUIwMDI4QUZBQzAwMkM5MAorOjEwMDI3MDAwQUZBRDAwMzBBRkFFMDAzNEFGQUYwMDM4QUZCODAwM0MyOAorOjEwMDI4MDAwQUZCOTAwNDBBRkJDMDA0NEFGQkYwMDQ4MEUwMDE1NDRGQQorOjEwMDI5MDAwMDAwMDAwMDA4RkJGMDA0ODhGQkMwMDQ0OEZCOTAwNDBCMQorOjEwMDJBMDAwOEZCODAwM0M4RkFGMDAzODhGQUUwMDM0OEZBRDAwMzA3OAorOjEwMDJCMDAwOEZBQzAwMkM4RkFCMDAyODhGQUEwMDI0OEZBOTAwMjBDMAorOjEwMDJDMDAwOEZBODAwMUM4RkE3MDAxODhGQTYwMDE0OEZBNTAwMTAwMAorOjEwMDJEMDAwOEZBNDAwMEM4RkEzMDAwODhGQTIwMDA0OEZBMTAwMDA0MAorOjEwMDJFMDAwMjdCRDAwNEMzQzFCNjAxMDhGN0E1MDMwMzc3QjUwMjg2NAorOjEwMDJGMDAwMDM0MDAwMDhBRjdBMDAwMDhGODIwMDI0MjdCREZGRTA5MgorOjEwMDMwMDAwQUZCMDAwMTBBRkJGMDAxOEFGQjEwMDE0OEM0MjAwMENBQQorOjEwMDMxMDAwM0MxMDgwMDA4RTExMDEwMDEwNDAwMDM0OEZCRjAwMTg4NworOjEwMDMyMDAwMEUwMDBEODQwMDAwMDAwMDhGODUwMDIwMjQwNDdGRkY1NAorOjEwMDMzMDAwMDA5MTIwMkJBQ0IxMDAwMDhFMDMwMTA0OTYwMjAxMDg0RAorOjEwMDM0MDAwMDAwMzFDMDAzMDQyRkZGRjAwNjIxODI1QUNBMzAwMDQyQworOjEwMDM1MDAwOTIwMjAxMEE5NjAzMDExNDMwNDIwMEZGMzA2M0ZGRkY0RQorOjEwMDM2MDAwMDAwMjE0MDAwMDQzMTAyNUFDQTIwMDA4OTYwMzAxMEMwMworOjEwMDM3MDAwOTYwMjAxMEUwMDAzMUMwMDMwNDJGRkZGMDA2MjE4MjVBOAorOjEwMDM4MDAwQUNBMzAwMEM5NjAzMDExMDk2MDIwMTEyMDAwMzFDMDA5RQorOjEwMDM5MDAwMzA0MkZGRkYwMDYyMTgyNUFDQTMwMDEwOEUwMjAxMTg0NgorOjEwMDNBMDAwQUNBMjAwMTQ4RTAyMDExQ0FDQTIwMDE4MTQ4MDAwMDgzQworOjEwMDNCMDAwOEY4MjAwMjQ5NzgyMDAwMDNDMDQyMDA1MDA0NDE4MjUwOQorOjEwMDNDMDAwMjQ0MjAwMDFBQ0EzMDAxQzBBMDAwMEM2QTc4MjAwMDA2MgorOjEwMDNEMDAwM0MwMzQwMTg5NDQyMDAxRTAwNDMxMDI1QUNBMjAwMUNCMAorOjEwMDNFMDAwMEUwMDBEQjgyNDA0MDAwMThGQkYwMDE4OEZCMTAwMTQ1NworOjEwMDNGMDAwOEZCMDAwMTAwMDAwMTAyMTAzRTAwMDA4MjdCRDAwMjA4RQorOjEwMDQwMDAwM0MwNzgwMDA4Q0UyMDJCODM0RTUwMTAwMDQ0MTAwMDg5QQorOjEwMDQxMDAwMjQwMzAwMDEzQzAyMDgwMDhDNDIwMDYwMjQ0MjAwMDFEOQorOjEwMDQyMDAwM0MwMTA4MDBBQzIyMDA2MDAzRTAwMDA4MDA2MDEwMjFERAorOjEwMDQzMDAwM0MwMjA4MDA4QzQyMDA1QzhDQTQwMDIwOTRBMzAwMTZBRgorOjEwMDQ0MDAwOENBNjAwMDQ5NEE1MDAwRTI0NDIwMDAxQUNFNDAyODBCNgorOjEwMDQ1MDAwMjQ2M0ZGRkMzQzAxMDgwMEFDMjIwMDVDM0MwMjEwMDA1RAorOjEwMDQ2MDAwQTRFMzAyODRBNEU1MDI4NjAwMDAxODIxQUNFNjAyODgxOQorOjEwMDQ3MDAwQUNFMjAyQjgwM0UwMDAwODAwNjAxMDIxMjdCREZGRTBGNQorOjEwMDQ4MDAwM0MwMjgwMDBBRkIwMDAxMDM0NDIwMTAwQUZCRjAwMUMzRQorOjEwMDQ5MDAwQUZCMjAwMThBRkIxMDAxNDhDNDMwMDAwOTQ0NTAwMDhCRgorOjEwMDRBMDAwMjQ2MkZFMDAyQzQyMDM4MTEwNDAwMDAzMDAwMzgxQzIzRAorOjEwMDRCMDAwMEEwMDAxMDIyNjEwMDAwNDI0MDIwMTAwMTQ2MjAwMDU1MworOjEwMDRDMDAwM0MxMTgwMDAzQzAyODAwODkwNDIwMDA0MzA1MDAwRkY0NAorOjEwMDREMDAwM0MxMTgwMDAzNjMyMDEwMDk2NDMwMDE0MzIwMjAwMEZCNgorOjEwMDRFMDAwMDAwMjE1MDAwMDQzMTAyNTNDMDMwODAwOEM2MzAwNDQwMworOjEwMDRGMDAwMzBBNDAwMDRBRTIyMDA4MDI0NjMwMDAxM0MwMTA4MDAwNworOjEwMDUwMDAwQUMyMzAwNDQxMDgwMDAwNzMwQTIwMDAyOEZCRjAwMUMwMworOjEwMDUxMDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMEEwMDAwQ0UwNworOjEwMDUyMDAwMjdCRDAwMjAxMDQwMDAyRDAwMDAxODIxMzBBMjAwODBCRgorOjEwMDUzMDAwMTA0MDAwMDUzNjIyMDA3MDhFNDQwMDFDMEUwMDBDNjcyRgorOjEwMDU0MDAwMjQwNTAwQTAzNjIyMDA3MDhDNDQwMDAwOEY4MjAwMEMyRAorOjEwMDU1MDAwMDA4MjEwMjMyQzQzMDEyQzEwNjAwMDA0QUY4MjAwMTA5NQorOjEwMDU2MDAwMjQwMzAwMDEwQTAwMDE0NUFGODQwMDBDOEU0MjAwMDQwMAorOjEwMDU3MDAwM0MwMzYwMjBBRjg0MDAwQ0FDNjIwMDE0M0MwMjA4MDAxNQorOjEwMDU4MDAwOEM0MjAwNTg1MDQwMDAxNTAwMDAxODIxOEM2MjAwMDQ3NQorOjEwMDU5MDAwMjQwMzAxRkUzMDQyMDNGRjE0NDMwMDEwMDAwMDE4MjEyMQorOjEwMDVBMDAwMkUwMjAwMDQxMDQwMDAwMzJFMDIwMDA4MEEwMDAxNDA0MQorOjEwMDVCMDAwMDAwMDgwMjExNDQwMDAwMzAwMDAwMDAwMEEwMDAxNDBGOAorOjEwMDVDMDAwMjYxMEZGRjkwMDAwMDAwRDI0MDIwMDAyMDIwMjEwMDRCMAorOjEwMDVEMDAwM0MwMzYwMDBBQzYyNjkxNDAwMDAxODIxOEZCRjAwMUM0RQorOjEwMDVFMDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMDA2MDEwMjE3RQorOjEwMDVGMDAwMDNFMDAwMDgyN0JEMDAyMDNDMDQ4MDAwOEM4MzAxMDAzQworOjEwMDYwMDAwMjQwMjAxMDA1MDYyMDAwMzNDMDI4MDA4MDAwMDAwMEQzQgorOjEwMDYxMDAwM0MwMjgwMDg5MDQzMDAwNDAwMDAxMDIxMzA2MzAwMEY2QQorOjEwMDYyMDAwMDAwMzFEMDAwM0UwMDAwOEFDODMwMDgwMDAwNDE4ODA3NAorOjEwMDYzMDAwMjc4MkZGOUMwMDYyMTgyMTAwMDQxMEMwMDA0NDEwMjM5MAorOjEwMDY0MDAwOEM2NDAwMDAwMDAyMTBDMDNDMDMwODAwMjQ2MzU2RTRFMAorOjEwMDY1MDAwMDA0MzEwMjEzQzAzODAwMEFDNjQwMDkwMDNFMDAwMDhEQworOjEwMDY2MDAwQUY4MjAwMjQzQzAyMDgwMDhDNDIwMTE0MTA0MDAwMTlBMworOjEwMDY3MDAwMzA4NDQwMDAzMEEyMDA3RjAwMDIzMUMwM0MwMjAyMDAwMgorOjEwMDY4MDAwMTA4MDAwMTQwMEEyMTgyNTNDMDI2MDIwQUM0MzAwMTQyNgorOjEwMDY5MDAwM0MwNDA4MDA4Qzg0NTZCODNDMDMwODAwOEM2MzAxMTBBRAorOjEwMDZBMDAwM0MwMjgwMDAyNDA1MDkwMEFDNDUwMDIwMDA4NjIwMjE4MgorOjEwMDZCMDAwMjQ2MzAwMDEzQzAyODAwOEFDNDQwMDY0M0MwMTA4MDA1MworOjEwMDZDMDAwQUMyMzAxMTAzQzAxMDgwMEFDMjQ1NkI4MDNFMDAwMDgzQworOjEwMDZEMDAwMDAwMDAwMDAzQzAyNjAyMDAzRTAwMDA4QUM0NTAwMTQ2QworOjEwMDZFMDAwMDNFMDAwMDgwMDAwMTAyMTAzRTAwMDA4MDAwMDEwMjFEMgorOjEwMDZGMDAwMzBBMjAwMDgxMDQwMDAwODI0MDIwMTAwM0MwMjA4MDA1QgorOjEwMDcwMDAwOEM0MjAxMEMyNDQyMDAwMTNDMDEwODAwQUMyMjAxMEM4NworOjEwMDcxMDAwMDNFMDAwMDgwMDAwMDAwMDE0ODIwMDA4MDAwMDAwMDA1MAorOjEwMDcyMDAwM0MwMjA4MDA4QzQyMDBGQzI0NDIwMDAxM0MwMTA4MDAwRAorOjEwMDczMDAwQUMyMjAwRkMwQTAwMDFBMzMwQTIwMDIwM0MwMjA4MDAwOQorOjEwMDc0MDAwOEM0MjAwODQyNDQyMDAwMTNDMDEwODAwQUMyMjAwODQ1OQorOjEwMDc1MDAwMzBBMjAwMjAxMDQwMDAwODMwQTIwMDEwM0MwMjA4MDAyNworOjEwMDc2MDAwOEM0MjAxMDgyNDQyMDAwMTNDMDEwODAwQUMyMjAxMDgyRgorOjEwMDc3MDAwMDNFMDAwMDgwMDAwMDAwMDEwNDAwMDA4MDAwMDAwMDAzNgorOjEwMDc4MDAwM0MwMjA4MDA4QzQyMDEwNDI0NDIwMDAxM0MwMTA4MDBBNAorOjEwMDc5MDAwQUMyMjAxMDQwM0UwMDAwODAwMDAwMDAwM0MwMjA4MDA1NQorOjEwMDdBMDAwOEM0MjAxMDAyNDQyMDAwMTNDMDEwODAwQUMyMjAxMDBGRgorOjEwMDdCMDAwMDNFMDAwMDgwMDAwMDAwMDI3QkRGRkUwQUZCMTAwMTQxNworOjEwMDdDMDAwM0MxMTgwMDBBRkIyMDAxOEFGQkYwMDFDQUZCMDAwMTBFQQorOjEwMDdEMDAwMzYzMjAxMDA5NjUwMDAwODMyMDIwMDA0MTA0MDAwMDczMworOjEwMDdFMDAwMzIwMzAwMDI4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTRCQgorOjEwMDdGMDAwOEZCMDAwMTAwQTAwMDBDRTI3QkQwMDIwMTA2MDAwMEI1MworOjEwMDgwMDAwMDIwMDI4MjE4RTI0MDEwMDBFMDAwMThBMDAwMDAwMDA1MQorOjEwMDgxMDAwMzIwMjAwODAxMDQwMDAwMzI0MDUwMEExMEUwMDBDNjc4NgorOjEwMDgyMDAwOEU0NDAwMUMwQTAwMDFFMzI0MDIwMDAxOEUyMzAxMDQwRgorOjEwMDgzMDAwOEY4MjAwMDgxMDQzMDAwNjAyMDAyODIxOEUyNDAxMDA0OAorOjEwMDg0MDAwMEUwMDAxOEEwMDAwMDAwMDhFMjIwMTA0QUY4MjAwMDgyMQorOjEwMDg1MDAwMDAwMDEwMjE4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTQ1MAorOjEwMDg2MDAwOEZCMDAwMTAwM0UwMDAwODI3QkQwMDIwMkM4MjAwMDQ5OAorOjEwMDg3MDAwMTQ0MDAwMDIwMDAwMTgyMTI0ODNGRkZEMjQwMjAwMDIxRQorOjEwMDg4MDAwMDA2MjEwMDQzQzAzNjAwMDAzRTAwMDA4QUM2MjY5MTRERAorOjEwMDg5MDAwMjdCREZGRTBBRkJGMDAxQ0FGQjIwMDE4QUZCMTAwMTQxRQorOjEwMDhBMDAwQUZCMDAwMTAzQzA0ODAwMDk0ODIwMTA4MzA0MzcwMDAxNworOjEwMDhCMDAwMjQwMjIwMDAxMDYyMDAwQTI4NjIyMDAxNTQ0MDAwNTJFNQorOjEwMDhDMDAwOEZCRjAwMUMyNDAyNDAwMDEwNjIwMDQ4MjQwMjYwMDAxOAorOjEwMDhEMDAwMTA2MjAwNEE4RkJGMDAxQzBBMDAwMjUxOEZCMjAwMTgzQworOjEwMDhFMDAwMzQ4MjAxMDA5MDQzMDAwOThDNTAwMDE4OTQ1MTAwMEM5MAorOjEwMDhGMDAwMjQwMjAwMDkxMDYyMDAxQzAwMDA5MDIxMjg2MjAwMDlGNworOjEwMDkwMDAwMTQ0MDAwMjE4RjgyMDAyNDI0MDIwMDBBNTA2MjAwMTI0OQorOjEwMDkxMDAwMzIzMTAwRkYyNDAyMDAwQjEwNjIwMDBGMDAwMDAwMDBDMworOjEwMDkyMDAwMjQwMjAwMEMxNDYyMDAxODhGODIwMDI0M0MwMjA4MDA4QworOjEwMDkzMDAwOEM0MjU2QjgyNDAzMDkwMEFDODMwMDIwMDA1MDEwMjFEQgorOjEwMDk0MDAwM0MwMzgwMDhBQzYyMDA2NDNDMDEwODAwQUMyMjU2Qjg0RAorOjEwMDk1MDAwMEEwMDAyNTA4RkJGMDAxQzBFMDAwMUU5MDAxMDI2MDJBMQorOjEwMDk2MDAwMEEwMDAyMzA4RjgyMDAyNDBFMDAwMUU5MDAxMDI2MDJFNgorOjEwMDk3MDAwM0MwMzgwMDg5NDYyMDAxQThDNzIwMDBDMzA0MkZGRkYyNgorOjEwMDk4MDAwMDIwMjgwMjU4RjgyMDAyNDhDNDIwMDBDNTA0MDAwMUUwMQorOjEwMDk5MDAwOEZCRjAwMUMwRTAwMEQ4NDAwMDAwMDAwM0MwMjgwMDA5MAorOjEwMDlBMDAwMzQ0MjAxMDA5NDQzMDAwODhGODIwMDI0MDAwMzFDMDA5RAorOjEwMDlCMDAwOTQ0NDAwMUU4RjgyMDAyMDAwNjQxODI1QUM1MDAwMDA3MworOjEwMDlDMDAwMjQwNDAwMDFBQzUxMDAwNEFDNTIwMDA4QUM0MDAwMENGRgorOjEwMDlEMDAwQUM0MDAwMTBBQzQwMDAxNEFDNDAwMDE4MEUwMDBEQjg0NAorOjEwMDlFMDAwQUM0MzAwMUMwQTAwMDI1MDhGQkYwMDFDMEUwMDA0NDBFNAorOjEwMDlGMDAwMDAwMDAwMDAwQTAwMDI1MDhGQkYwMDFDMEUwMDBDOUY3OAorOjEwMEEwMDAwMDAwMDAwMDA4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTRDRgorOjEwMEExMDAwOEZCMDAwMTAwMDAwMTAyMTAzRTAwMDA4MjdCRDAwMjA2NworOjEwMEEyMDAwMjdCREZGRDhBRkI0MDAyMDNDMDM2MDEwQUZCRjAwMjQ0NworOjEwMEEzMDAwQUZCMzAwMUNBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTBEQworOjEwMEE0MDAwOEM2NDUwMDAyNDAyRkY3RjNDMTQwODAwMjY5NDU2MzgyMgorOjEwMEE1MDAwMDA4MjIwMjQzNDg0MzgwQ0FDNjQ1MDAwM0MwMjgwMDBCNgorOjEwMEE2MDAwMjQwMzAwMzcwRTAwMTRCMEFDNDMwMDA4M0MwNzA4MDAxNAorOjEwMEE3MDAwMjRFNzA2MTgwMjgwMTAyMTI0MDQwMDFEMjQ4NEZGRkZBRgorOjEwMEE4MDAwQUM0NzAwMDAwNDgxRkZGRDI0NDIwMDA0M0MwMjA4MDA0MgorOjEwMEE5MDAwMjQ0MjA3QzgzQzAxMDgwMEFDMjI1NjQwM0MwMjA4MDAzMgorOjEwMEFBMDAwMjQ0MjAyMzAzQzAzMDgwMDI0NjMwNjIwM0MwNDA4MDA3MgorOjEwMEFCMDAwMjQ4NDAzQjQzQzA1MDgwMDI0QTUwNkYwM0MwNjA4MDA4NQorOjEwMEFDMDAwMjRDNjJDOUMzQzAxMDgwMEFDMjI1NjgwM0MwMjA4MDA0NQorOjEwMEFEMDAwMjQ0MjA1MzAzQzAxMDgwMEFDMjc1Njg0M0MwMTA4MDA0NAorOjEwMEFFMDAwQUMyNjU2OTQzQzAxMDgwMEFDMjM1NjlDM0MwMTA4MDBGRgorOjEwMEFGMDAwQUMyNDU2QTAzQzAxMDgwMEFDMjU1NkE0M0MwMTA4MDBEQgorOjEwMEIwMDAwQUMyMjU2QTgzQzAxMDgwMEFDMjM1NjNDM0MwMTA4MDAyRQorOjEwMEIxMDAwQUMyNDU2NDQzQzAxMDgwMEFDMjA1NjYwM0MwMTA4MDA1RgorOjEwMEIyMDAwQUMyNTU2NjQzQzAxMDgwMEFDMjA1NjcwM0MwMTA4MDAxRQorOjEwMEIzMDAwQUMyNzU2N0MzQzAxMDgwMEFDMjY1NjkwM0MwMTA4MDBDRQorOjEwMEI0MDAwQUMyMzU2OTgwRTAwMDU2RTAwMDAwMDAwQUY4MDAwMEMyQworOjEwMEI1MDAwM0MwMjgwMDA4QzUzMDAwMDhGODMwMDA0M0MwMjA4MDA5QworOjEwMEI2MDAwOEM0MjAwMjAxMDYyMDAyMTMyNjIwMDA3MDAwMDg4MjFDMAorOjEwMEI3MDAwMjc5MkZGOUMzQzEwMDgwMDI2MTA1NkU0M0MwMjA4MDAxNworOjEwMEI4MDAwOEM0MjAwMjAyNDA1MDAwMTAyMjUxODA0MDA0MzIwMjQ4MworOjEwMEI5MDAwOEY4MjAwMDQwMDQzMTAyNDUwNDQwMDBDMjYzMTAwMDFEMQorOjEwMEJBMDAwMTA4MDAwMDhBRjkwMDAyNDhFNDMwMDAwM0MwMjgwMDBCQgorOjEwMEJCMDAwQUM0MzAwOTAwRTAwMEQ0QkFFMDUwMDBDMEEwMDAyQzFDNAorOjEwMEJDMDAwMjYzMTAwMDFBRTAwMDAwQzI2MzEwMDAxMkUyMjAwMDI2OQorOjEwMEJEMDAwMjYxMDAwMzgxNDQwRkZFOTI2NTIwMDA0M0MwMjA4MDBBOQorOjEwMEJFMDAwOEM0MjAwMjBBRjgyMDAwNDMyNjIwMDA3MTA0MEZGRDkxRgorOjEwMEJGMDAwM0MwMjgwMDAzMjYyMDAwMTEwNDAwMDJEMzI2MjAwMDI4RgorOjEwMEMwMDAwM0MwNTgwMDA4Q0EyMDEwMDAwMDAyMDIxQUNBMjAwMjA0NQorOjEwMEMxMDAwOENBMzAxMDQyQzQyMDc4MTEwNDAwMDA4QUNBMzAwQTg1QgorOjEwMEMyMDAwOTRBMjAxMDgyNDAzMjAwMDMwNDI3MDAwMTQ0MzAwMDMwMgorOjEwMEMzMDAwM0MwMjgwMDg5MDQyMDAwNTMwNDQwMEZGMEUwMDAxNTkzQworOjEwMEM0MDAwMDAwMDAwMDAzQzAyODAwMDkwNDIwMTBCMzA0MzAwRkY5NgorOjEwMEM1MDAwMkM2MjAwMUU1NDQwMDAwNDAwMDMxMDgwMEUwMDAxODYyOAorOjEwMEM2MDAwMEEwMDAyRUMwMDAwMDAwMDAwNTQxMDIxOEM0MjAwMDAzOQorOjEwMEM3MDAwMDA0MEY4MDkwMDAwMDAwMDEwNDAwMDA0M0MwMjgwMDAyMQorOjEwMEM4MDAwOEM0MzAxMDQzQzAyNjAyMEFDNDMwMDE0M0MwMjA4MDA4OQorOjEwMEM5MDAwOEM0MjAwMzQzQzA0NDAwMDNDMDM4MDAwMjQ0MjAwMDFBQworOjEwMENBMDAwQUM2NDAxMzgzQzAxMDgwMEFDMjIwMDM0MzI2MjAwMDIxRQorOjEwMENCMDAwMTA0MDAwMTAzMjYyMDAwNDNDMTA4MDAwOEUwMjAxNDA5RgorOjEwMENDMDAwMDAwMDIwMjEwRTAwMDE1OUFFMDIwMDIwMEUwMDAzODMxNworOjEwMENEMDAwMDAwMDAwMDAzQzAyNDAwMEFFMDIwMTc4M0MwMjA4MDAyNworOjEwMENFMDAwOEM0MjAwMzgyNDQyMDAwMTNDMDEwODAwQUMyMjAwMzg0QworOjEwMENGMDAwMzI2MjAwMDQxMDQwRkY5NzNDMDI4MDAwM0MxMDgwMDBFQworOjEwMEQwMDAwOEUwMjAxODAwMDAwMjAyMTBFMDAwMTU5QUUwMjAwMjA1OQorOjEwMEQxMDAwOEUwMzAxODAyNDAyMEYwMDU0NjIwMDA3M0MwMjgwMDgwOQorOjEwMEQyMDAwOEUwMjAxODgzQzAzMDBFMDMwNDJGRkZGMDA0MzEwMjVBMworOjEwMEQzMDAwMEEwMDAzMjhBRTAyMDA4MDM0NDIwMDgwOTA0MjAwMDA4NgorOjEwMEQ0MDAwMjQwMzAwNTAzMDQyMDBGRjE0NDMwMDA3MDAwMDAwMDA1RAorOjEwMEQ1MDAwMEUwMDAzNjIwMDAwMDAwMDE0NDAwMDAzMDAwMDAwMDBDOQorOjEwMEQ2MDAwMEUwMDA5NzEwMDAwMDAwMDNDMDIwODAwOEM0MjAwM0NBQgorOjEwMEQ3MDAwM0MwNDQwMDAzQzAzODAwMDI0NDIwMDAxQUM2NDAxQjgwNAorOjEwMEQ4MDAwM0MwMTA4MDBBQzIyMDAzQzBBMDAwMkEzM0MwMjgwMDBBNworOjEwMEQ5MDAwM0MwMjkwMDAzNDQyMDAwMTAwODIyMDI1M0MwMjgwMDA4OQorOjEwMERBMDAwQUM0NDAwMjAzQzAzODAwMDhDNjIwMDIwMDQ0MEZGRkUyNQorOjEwMERCMDAwMDAwMDAwMDAwM0UwMDAwODAwMDAwMDAwM0MwMjgwMDA4QQorOjEwMERDMDAwMzQ0MzAwMDEwMDgzMjAyNTAzRTAwMDA4QUM0NDAwMjBFOAorOjEwMEREMDAwMjdCREZGRTBBRkIxMDAxNEFGQjAwMDEwMDA4MDg4MjE0NAorOjEwMERFMDAwQUZCRjAwMTgwRTAwMDMzMjMwQjAwMEZGOEY4M0ZGOTRCNgorOjEwMERGMDAwMDIyMDIwMjE5MDYyMDAyNTAyMDI4MDI1QTA3MDAwMjU5QgorOjEwMEUwMDAwOEM3MDAwMTgzQzAyODAwMDBFMDAwMzNEMDIwMjgwMjQxQQorOjEwMEUxMDAwMTYwMDAwMEI4RkJGMDAxODNDMDQ4MDAwOEM4MjAxRjg4NAorOjEwMEUyMDAwMDQ0MEZGRkUzNDgyMDFDMDI0MDMwMDAyQUM1MTAwMDBFNAorOjEwMEUzMDAwQTA0MzAwMDQzQzAyMTAwMEFDODIwMUY4OEZCRjAwMThGMAorOjEwMEU0MDAwOEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjAxMAorOjEwMEU1MDAwMjdCREZGRTgzQzAyODAwMEFGQkYwMDEwMzQ0MjAxODA5NAorOjEwMEU2MDAwOTQ0MzAwMDQ4QzQ0MDAwODMwNjMwMjAwMTA2MDAwMDVDNQorOjEwMEU3MDAwMDAwMDI4MjEwRTAwMTAwQzAwMDAwMDAwMEEwMDAzNzg3QQorOjEwMEU4MDAwMjQwNTAwMDEzQzAyRkYwMDA0ODAwMDA3MDA4MjE4MjRCMgorOjEwMEU5MDAwM0MwMjA0MDAxNDYyMDAwNDI0MDUwMDAxOEY4MkZGOTRDOAorOjEwMEVBMDAwOTA0MjAwMDgyNDA1MDAwMThGQkYwMDEwMDBBMDEwMjEwRgorOjEwMEVCMDAwMDNFMDAwMDgyN0JEMDAxODhGODJGRjk4MjQwNTAwMDE3OQorOjEwMEVDMDAwQTA0MDAwMUEzQzAyODAwMDM0NDIwMTQwMEEwMDAzNDI2NAorOjEwMEVEMDAwOEM0NDAwMDA4Rjg1RkY5NDI3QkRGRkUwQUZCRjAwMUM0RQorOjEwMEVFMDAwQUZCMjAwMThBRkIxMDAxNEFGQjAwMDEwOTBBMjAwMDA3NAorOjEwMEVGMDAwMzA0NDAwRkYzODgzMDAyMDM4ODIwMDMwMDAwMzE4MkI3NAorOjEwMEYwMDAwMDAwMjEwMkIwMDYyMTgyNDEwNjAwMDAzMjQwMjAwNTAxRAorOjEwMEYxMDAwMTQ4MjAwQTg4RkJGMDAxQzkwQTIwMDA1MzA0MjAwMDE3RgorOjEwMEYyMDAwMTA0MDAwQTQ4RkJGMDAxQzNDMDI4MDAwMzQ0MjAxNDBFRQorOjEwMEYzMDAwOTA0MjAwMDgyNDQzRkZGRjJDNjIwMDA1MTA0MDAwOUVGMQorOjEwMEY0MDAwOEZCMjAwMTgwMDAzMTA4MDNDMDMwODAwMjQ2MzU1QUNFNgorOjEwMEY1MDAwMDA0MzEwMjE4QzQyMDAwMDAwNDAwMDA4MDAwMDAwMDAwNworOjEwMEY2MDAwM0MwMjgwMDAzNDUxMDE0MDBFMDAwMzMyOEUyNDAwMDAwOAorOjEwMEY3MDAwOEY5MkZGOTQ4RTIyMDAwNDhFNTAwMDBDMTYwMjAwMDIwNQorOjEwMEY4MDAwMjQwMjAwMDFBRTQyMDAwQzBFMDAwMzNEOEUyNDAwMDAzRQorOjEwMEY5MDAwOEUyMjAwMDQxNDUwMDAwNjhGQkYwMDFDOEZCMjAwMTg3MAorOjEwMEZBMDAwOEZCMTAwMTQ4RkIwMDAxMDBBMDAwRjc4MjdCRDAwMjAwOQorOjEwMEZCMDAwOEU0MjAwMEMwQTAwMDQxOTAwMDAwMDAwM0MwNDgwMDA2RQorOjEwMEZDMDAwMzQ4MjAxNDA5NEEzMDAxMDhDNDIwMDA0MzA2M0ZGRkY4MAorOjEwMEZEMDAwMTQ0MzAwMUMwMDAwMDAwMDI0MDIwMDAxQTRBMjAwMTAyMQorOjEwMEZFMDAwOEM4MjAyMzgwNDQxMDAwRjNDMDM4MDAwM0MwMjAwM0YyOQorOjEwMEZGMDAwMzQ0OEYwMDAzQzA3NjAwMDNDMDZGRkMwOENFMjJCQkM4QworOjEwMTAwMDAwMDA0NjE4MjQwMDQ4MTAyNDAwMDIxMzAyMDAwMzFEODIyOQorOjEwMTAxMDAwMTA2MjAwNTgzQzAyODAwMDhDODIwMjM4MDQ0MEZGRjdDNgorOjEwMTAyMDAwM0MwMzgwMDAzNDYyMDE0MDhDNDQwMDAwMzQ2MjAyMDBDMgorOjEwMTAzMDAwQUM0NDAwMDAzQzAyMTAwMEFDNjIwMjM4MEEwMDA0M0JFMQorOjEwMTA0MDAwOEZCRjAwMUM5NEEyMDAxMDBBMDAwNDE5MDAwMDAwMDBDOQorOjEwMTA1MDAwMjQwMjAwMjAxNDgyMDAwRjNDMDI4MDAwM0MwMzgwMDAyOAorOjEwMTA2MDAwOTRBMjAwMTIzNDYzMDE0MDhDNjMwMDA0MzA0MkZGRkZGRAorOjEwMTA3MDAwMTQ2MjAwMDUwMDAwMDAwMDI0MDIwMDAxQTRBMjAwMTI3NgorOjEwMTA4MDAwMEEwMDA0MDI4RkJGMDAxQzk0QTIwMDEyMEEwMDA0MTk3NworOjEwMTA5MDAwMDAwMDAwMDAzNDUxMDE0MDBFMDAwMzMyOEUyNDAwMDA5NQorOjEwMTBBMDAwOEY5MkZGOTQ4RTIzMDAwNDk2NDIwMDEyMzA1MEZGRkY2RgorOjEwMTBCMDAwMTYwMzAwMDIyNDAyMDAwMUE2NDIwMDEyMEUwMDAzM0RBNgorOjEwMTBDMDAwOEUyNDAwMDA4RTIyMDAwNDE2MDIwMDA2OEZCRjAwMUMzMgorOjEwMTBEMDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMEEwMDAzN0M4QgorOjEwMTBFMDAwMjdCRDAwMjA5NjQyMDAxMjBBMDAwNDE5MDAwMDAwMDBFQgorOjEwMTBGMDAwM0MwMzgwMDA5NEEyMDAxNDM0NjMwMTQwOEM2MzAwMDQxQworOjEwMTEwMDAwMzA0MkZGRkYxNDYyMDAwODI0MDIwMDAxOEZCRjAwMUM2MAorOjEwMTExMDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwQTRBMjAwMTQ3OQorOjEwMTEyMDAwMEEwMDE0NjMyN0JEMDAyMDk0QTIwMDE0MTQ0MDAwMjE3QgorOjEwMTEzMDAwOEZCRjAwMUMwQTAwMDQzNTAwMDAwMDAwM0MwMzgwMDA0MworOjEwMTE0MDAwOTRBMjAwMTYzNDYzMDE0MDhDNjMwMDA0MzA0MkZGRkYxOAorOjEwMTE1MDAwMTQ2MjAwMEQyNDAyMDAwMThGQkYwMDFDOEZCMjAwMTgyMgorOjEwMTE2MDAwOEZCMTAwMTQ4RkIwMDAxMEE0QTIwMDE2MEEwMDBCMTQ1NworOjEwMTE3MDAwMjdCRDAwMjA5NDQyMDA3ODI0NDIwMDA0QTRBMjAwMTA1RAorOjEwMTE4MDAwMEEwMDA0M0I4RkJGMDAxQzk0QTIwMDE2MjQwMzAwMDEzOAorOjEwMTE5MDAwMzA0MkZGRkYxNDQzMDAwNzhGQkYwMDFDM0MwMjA4MDBEMQorOjEwMTFBMDAwOEM0MjAwNzAyNDQyMDAwMTNDMDEwODAwQUMyMjAwNzAxNworOjEwMTFCMDAwOEZCRjAwMUM4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTBDOQorOjEwMTFDMDAwMDNFMDAwMDgyN0JEMDAyMDI3QkRGRkQ4QUZCMjAwMThGQworOjEwMTFEMDAwOEY5MkZGOTRBRkIxMDAxNEFGQkYwMDIwQUZCMzAwMUNEQgorOjEwMTFFMDAwQUZCMDAwMTAzQzAyODAwMDM0NTEwMTAwOEM1MDAxMDA2RgorOjEwMTFGMDAwOTI0MjAwMDA5MjIzMDAwOTMwNDQwMEZGMjQwMjAwMUZBNQorOjEwMTIwMDAwMTA2MjAwQUIyODYyMDAyMDEwNDAwMDE5MjQwMjAwMzg1MAorOjEwMTIxMDAwMjg2MjAwMEExMDQwMDAwRDI0MDIwMDBCMjg2MjAwMDgxQQorOjEwMTIyMDAwMTA0MDAwMkU4RjgyMDAyNDA0NjAwMTA0Mjg2MjAwMDIxNgorOjEwMTIzMDAwMTQ0MDAwMkE4RjgyMDAyNDI0MDIwMDA2MTA2MjAwMjYzNworOjEwMTI0MDAwOEZCRjAwMjAwQTAwMDU1RjhGQjMwMDFDMTA2MjAwNjA5MgorOjEwMTI1MDAwMjg2MjAwMEIxNDQwMDBGQThGQkYwMDIwMjQwMjAwMEUwOQorOjEwMTI2MDAwMTA2MjAwNzg4RjgyMDAyNDBBMDAwNTVGOEZCMzAwMUM5MworOjEwMTI3MDAwMTA2MjAwRDIyODYyMDAzOTEwNDAwMDBBMjQwMjAwODA2NworOjEwMTI4MDAwMjQwMjAwMzYxMDYyMDBFNTI4NjIwMDM3MTA0MDAwQzNENworOjEwMTI5MDAwMjQwMjAwMzUxMDYyMDBEOThGQkYwMDIwMEEwMDA1NUZDQworOjEwMTJBMDAwOEZCMzAwMUMxMDYyMDAyRDI4NjIwMDgxMTA0MDAwMDZFMAorOjEwMTJCMDAwMjQwMjAwQzgyNDAyMDAzOTEwNjIwMEM5OEZCRjAwMjAzOAorOjEwMTJDMDAwMEEwMDA1NUY4RkIzMDAxQzEwNjIwMEEyOEZCRjAwMjBEMAorOjEwMTJEMDAwMEEwMDA1NUY4RkIzMDAxQzhGODIwMDI0OEM0MjAwMEMzMworOjEwMTJFMDAwMTA0MDAwRDc4RkJGMDAyMDBFMDAwRDg0MDAwMDAwMDBDQQorOjEwMTJGMDAwM0MwMzgwMDAzNDYzMDEwMDhDNjIwMDAwOEY4NTAwMjA3NQorOjEwMTMwMDAwOTQ2NzAwMDg5NDY2MDAwQ0FDQTIwMDAwOEM2NDAwMDQ5MgorOjEwMTMxMDAwOEY4MjAwMjQwMDA2MzQwMEFDQTQwMDA0OTQ0ODAwMUUxMAorOjEwMTMyMDAwOEM2MjAwMTgwMDA3M0MwMDAwRTgzODI1QUNBMjAwMDhEOQorOjEwMTMzMDAwOEM2MjAwMUMyNDA0MDAwMUFDQTIwMDBDOTA2MjAwMEEyNAorOjEwMTM0MDAwMDBDMjMwMjVBQ0E2MDAxMEFDQTAwMDE0QUNBMDAwMTg2MAorOjEwMTM1MDAwQUNBNzAwMUMwQTAwMDUxRDhGQkYwMDIwOEY4MjAwMjQ0RgorOjEwMTM2MDAwOEM0MjAwMEMxMDQwMDBCNjhGQkYwMDIwMEUwMDBEODQ5MAorOjEwMTM3MDAwMDAwMDAwMDA4RjgyMDAyNDk2MjQwMDA4OTYyNTAwMENBRgorOjEwMTM4MDAwOTQ0MzAwMUUwMDA0MjIwMjk2MjYwMDBFOEY4MjAwMjA0NQorOjEwMTM5MDAwMDAwNDI2MDAwMDgzMjAyNTAwMDUyQzAwM0MwMzAwODA2QgorOjEwMTNBMDAwMDBBNjI4MjUwMDgzMjAyNUFDNDAwMDAwQUM0MDAwMDRBNgorOjEwMTNCMDAwQUM0MDAwMDhBQzQwMDAwQ0FDNDUwMDEwQUM0MDAwMTQ0MAorOjEwMTNDMDAwQUM0MDAwMThBQzQ0MDAxQzBBMDAwNTFDMjQwNDAwMDFCOQorOjEwMTNEMDAwOTYyMjAwMEMxNDQwMDAxODAwMDAwMDAwOTI0MjAwMDUwNAorOjEwMTNFMDAwMzA0MjAwMTAxNDQwMDAxNDAwMDAwMDAwMEUwMDAzMzJEMAorOjEwMTNGMDAwMDIwMDIwMjE5MjQyMDAwNTAyMDAyMDIxMzQ0MjAwMTAwOAorOjEwMTQwMDAwMEUwMDAzM0RBMjQyMDAwNTkyNDIwMDAwMjQwMzAwMjA4QQorOjEwMTQxMDAwMzA0MjAwRkYxMDQzMDA4OTAyMDAyMDIxOEZCRjAwMjBDRQorOjEwMTQyMDAwOEZCMzAwMUM4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTA2MgorOjEwMTQzMDAwMEEwMDEwNzUyN0JEMDAyODAwMDAwMDBEMEEwMDA1NUU5NworOjEwMTQ0MDAwOEZCRjAwMjA4QzQyMDAwQzEwNDAwMDdEOEZCRjAwMjAxOQorOjEwMTQ1MDAwMEUwMDBEODQwMDAwMDAwMDhFMjIwMDA0OEY4NDAwMjAwNgorOjEwMTQ2MDAwOTYyMzAwMENBQzgyMDAwMDNDMDI4MDA4OTQ0NTAwMkNCRQorOjEwMTQ3MDAwOEY4MjAwMjQwMDAzMUMwMDMwQTVGRkZGOTQ0NjAwMUU0RAorOjEwMTQ4MDAwM0MwMjQwMEUwMDY1MTgyNTAwQzIzMDI1QUM4MzAwMDRFNAorOjEwMTQ5MDAwQUM4MDAwMDhBQzgwMDAwQ0FDODAwMDEwQUM4MDAwMTQ2NAorOjEwMTRBMDAwQUM4MDAwMThBQzg2MDAxQzBBMDAwNTFDMjQwNDAwMDE1NgorOjEwMTRCMDAwMEUwMDAzMzIwMjAwMjAyMThGOTNGRjk4MDIwMDIwMjFBQQorOjEwMTRDMDAwMEUwMDAzM0RBNjYwMDAwQzAyMDAyMDIxMEUwMDAzNDIyNgorOjEwMTREMDAwMjQwNTAwMDE4RjgyMDAyNDhDNDIwMDBDMTA0MDAwNTgyQgorOjEwMTRFMDAwOEZCRjAwMjAwRTAwMEQ4NDAwMDAwMDAwOTYyMjAwMEMyQgorOjEwMTRGMDAwOEY4MzAwMjAwMDAyMTQwMEFDNzAwMDAwQUM2MjAwMDQ3NgorOjEwMTUwMDAwQUM2MDAwMDg4RTQ0MDAzODhGODIwMDI0QUM2NDAwMEM2QworOjEwMTUxMDAwOEU0NjAwM0M5NDQ1MDAxRTNDMDI0MDFGQUM2NjAwMTAwNQorOjEwMTUyMDAwMDBBMjI4MjU4RTYyMDAwNDI0MDQwMDAxQUM2MjAwMTQ4RAorOjEwMTUzMDAwQUM2MDAwMThBQzY1MDAxQzhGQkYwMDIwOEZCMzAwMUM4RQorOjEwMTU0MDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMEEwMDBEQjhEMAorOjEwMTU1MDAwMjdCRDAwMjgyNDAyMDAyMDEwODIwMDNBOEZCMzAwMUMwRgorOjEwMTU2MDAwMEUwMDBGNUUwMDAwMDAwMDEwNDAwMDM1OEZCRjAwMjAwRAorOjEwMTU3MDAwM0MwNDgwMDA4QzgyMDFGODA0NDBGRkZFMzQ4MjAxQzBFQworOjEwMTU4MDAwMjQwMzAwMDJBQzUwMDAwMEEwNDMwMDA0M0MwMjEwMDAwMQorOjEwMTU5MDAwQUM4MjAxRjgwQTAwMDU1RThGQkYwMDIwMDIwMDIwMjEwNgorOjEwMTVBMDAwOEZCRjAwMjA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTRDMgorOjEwMTVCMDAwOEZCMDAwMTAwQTAwMEVBNzI3QkQwMDI4OTYyNTAwMEM0QQorOjEwMTVDMDAwMDIwMDIwMjE4RkJGMDAyMDhGQjMwMDFDOEZCMjAwMThCMworOjEwMTVEMDAwOEZCMTAwMTQ4RkIwMDAxMDBBMDAwRUNDMjdCRDAwMjg3OAorOjEwMTVFMDAwMDIwMDIwMjE4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTRBRAorOjEwMTVGMDAwOEZCMDAwMTAwQTAwMEVGNzI3QkQwMDI4OTIyNTAwMERCRAorOjEwMTYwMDAwMDIwMDIwMjE4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ4QworOjEwMTYxMDAwOEZCMDAwMTAwQTAwMEY0ODI3QkQwMDI4MDIwMDIwMjFDQgorOjEwMTYyMDAwOEZCRjAwMjA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ0MQorOjEwMTYzMDAwOEZCMDAwMTAwQTAwMEYxRjI3QkQwMDI4OEZCRjAwMjBBOQorOjEwMTY0MDAwOEZCMzAwMUM4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTA0MAorOjEwMTY1MDAwMDNFMDAwMDgyN0JEMDAyODNDMDU4MDAwOENBMjAyNzgyQQorOjEwMTY2MDAwMDQ0MEZGRkUzNEEyMDI0MDI0MDMwMDAyQUM0NDAwMDAwOAorOjEwMTY3MDAwQTA0MzAwMDQzQzAyMTAwMDAzRTAwMDA4QUNBMjAyNzg4MgorOjEwMTY4MDAwQTM4MDAwMTgwM0UwMDAwOEEzODAwMDE5M0MwMzgwMDAzOQorOjEwMTY5MDAwOEM2MjAyNzgwNDQwRkZGRThGODIwMDFDQUM2MjAyNDAyNAorOjEwMTZBMDAwMjQwMjAwMDJBMDYyMDI0NDNDMDIxMDAwMDNFMDAwMDg5MQorOjEwMTZCMDAwQUM2MjAyNzgzQzAyNjAwMDAzRTAwMDA4OEM0MjU0MDRGMworOjEwMTZDMDAwOTA4MzAwMzAyNDAyMDAwNTAwODA0MDIxMzA2MzAwM0ZGOQorOjEwMTZEMDAwMDAwMDQ4MjExNDYyMDAwNTAwMDA1MDIxOTA4MjAwNEM1NworOjEwMTZFMDAwOTQ4MzAwNEUzMDQ5MDBGRjMwNkFGRkZGQUQwMDAwMENDQworOjEwMTZGMDAwQUQwMDAwMTBBRDAwMDAyNDk1MDIwMDE0OEQwNTAwMUMwMworOjEwMTcwMDAwOEQwNDAwMTgzMDQyRkZGRjAwNDkxMDIzMDAwMjExMDAzMQorOjEwMTcxMDAwMDAwMjM3QzMwMDQwMzgyMTAwODYyMDIzMDBBMjEwMkI4RQorOjEwMTcyMDAwMDA4MjIwMjMwMEE3MjgyM0FEMDUwMDFDQUQwNDAwMTg2QgorOjEwMTczMDAwQTUwOTAwMTRBNTA5MDAyMEE1MEEwMDE2MDNFMDAwMDg2OQorOjEwMTc0MDAwQTUwQTAwMjIwM0UwMDAwODAwMDAwMDAwMjdCREZGRDgyMgorOjEwMTc1MDAwQUZCMjAwMTgzQzEyODAwOEFGQjQwMDIwQUZCMzAwMUMzOQorOjEwMTc2MDAwQUZCMTAwMTRBRkJGMDAyNEFGQjAwMDEwMzY1MTAxMDA3QworOjEwMTc3MDAwM0MwMjYwMDA4QzQyNTQwNDkyMjIwMDBDM0MxNDA4MDA4RAorOjEwMTc4MDAwOTI5NDAwRjczMDQzMDBGRjI0MDIwMDAxMTA2MjAwMzJGRgorOjEwMTc5MDAwMDA4MDk4MjEyNDAyMDAwMjE0NjIwMDM1MzY1MDAwODAzNworOjEwMTdBMDAwMEUwMDE0M0QwMDAwMDAwMDkyMDIwMDRDMjQwM0ZGODA1NAorOjEwMTdCMDAwM0MwNDgwMDAzMDQyMDA3RjAwMDIxMUMwMjQ0MjAyNDBGRAorOjEwMTdDMDAwMDI2MjEwMjEwMDQzMTgyNEFDODMwMDk0OTI0NTAwMDg2MworOjEwMTdEMDAwOTIwNDAwNEMzMDQyMDA3RjNDMDM4MDA2MTQ4NTAwMDdEMQorOjEwMTdFMDAwMDA0MzgwMjEyNDAyRkZGRkEyMjIwMDExMjQwMkZGRkZGOAorOjEwMTdGMDAwQTYyMjAwMTIwQTAwMDVEMjI0MDJGRkZGOTYwMjAwMjA1MgorOjEwMTgwMDAwQTIyMjAwMTE5NjAyMDAyMkE2MjIwMDEyOEUwMjAwMjRCQgorOjEwMTgxMDAwM0MwNDgwMDhBRTIyMDAxNDM0ODUwMDgwOTBBMjAwNEM2NQorOjEwMTgyMDAwMzQ4MzAxMDBBMDYyMDAxMDhDQTIwMDNDQUM2MjAwMTg1RQorOjEwMTgzMDAwOEM4MjAwNjhBQzYyMDBGNDhDODIwMDY0QUM2MjAwRjBDMAorOjEwMTg0MDAwOEM4MjAwNkNBQzYyMDBGODI0MDIwMDAxQTBBMjAwNjg0NworOjEwMTg1MDAwMEEwMDA1RUUzQzA0ODAwODBFMDAxNDU2MDAwMDAwMDA0QgorOjEwMTg2MDAwMzY0MjAwODBBMDQwMDA2ODBBMDAwNUVFM0MwNDgwMDg3MworOjEwMTg3MDAwQTIwMDAwNjhBMjAwMDA2OTBBMDAwNjI5M0MwMjgwMDg1NAorOjEwMTg4MDAwMzQ4MzAwODA4QzYyMDAzODM0ODUwMTAwQUM2MjAwNkNDNworOjEwMTg5MDAwMjQwMjAwMDFBMDYyMDA2OTkwQTIwMEQ1OTA4MzAwMDg5NAorOjEwMThBMDAwMzA1MTAwRkYzMDcyMDA3RjEyMzIwMDE5MDAxMTExQzA1OAorOjEwMThCMDAwMjQ0MjAyNDAwMjYyMTAyMTI0MDNGRjgwMDA0MzE4MjRDNgorOjEwMThDMDAwM0MwNDgwMDBBQzgzMDA5NDMwNDIwMDdGM0MwMzgwMDZERgorOjEwMThEMDAwMDA0MzgwMjE4RTAyMDAwQzEwNDAwMDBEMDIwMDIwMjFFOAorOjEwMThFMDAwMEUwMDA1N0UwMDAwMDAwMDI2MjIwMDAxMzA1MTAwRkY5RQorOjEwMThGMDAwOTIwMzAwM0MwMjM0MTAyNjAwMDIxMDJCMDAwMjEwMjMzOQorOjEwMTkwMDAwMzA2MzAwN0YwMjIyODgyNDBBMDAwNUY4QTIwMzAwM0MwRAorOjEwMTkxMDAwM0MwODgwMDgzNTA0MDEwMDhDODIwMEUwMzUwNzAwODAxNworOjEwMTkyMDAwQUNFMjAwM0M4QzgyMDBFMEFEMDIwMDAwOTBFNTAwNEM4RgorOjEwMTkzMDAwOTA4NjAwRDU5MEUzMDA0QzkwODQwMEQ1MjQwMkZGODA2RgorOjEwMTk0MDAwMDBBMjI4MjQzMDYzMDA3RjMwODQwMEZGMDBBNjI4MjVGMQorOjEwMTk1MDAwMDA2NDE4MkExMDYwMDAwMjMwQTUwMEZGMzhBNTAwODAzRQorOjEwMTk2MDAwQTBFNTAwNENBMTA1MDAwOTNDMDI4MDA4OTA0MzAwMEU1MAorOjEwMTk3MDAwMzQ0NDAwODAzQzA1ODAwMEEwNDMwMDBBOEM4MzAwMTg5QQorOjEwMTk4MDAwM0MwMjdGRkYzNDQyRkZGRjAwNjIxODI0QUM4MzAwMTg0MgorOjEwMTk5MDAwOENBMjAxRjgwNDQwRkZGRTAwMDAwMDAwQUNCMzAxQzBCRgorOjEwMTlBMDAwOEZCRjAwMjQ4RkI0MDAyMDhGQjMwMDFDOEZCMjAwMThBQgorOjEwMTlCMDAwOEZCMTAwMTQ4RkIwMDAxMDI0MDIwMDAyQTBBMjAxQzQ1NQorOjEwMTlDMDAwMjdCRDAwMjgzQzAyMTAwMDAzRTAwMDA4QUNBMjAxRjg4QgorOjEwMTlEMDAwOTBBMjAwMDAyNDQyMDAwMUEwQTIwMDAwM0MwMzA4MDBFNQorOjEwMTlFMDAwOEM2MzAwRjQzMDQyMDBGRjE0NDMwMDAyMDA4MDMwMjE3OQorOjEwMTlGMDAwQTBBMDAwMDA5MEEyMDAwMDhGODQwMDFDMDAwMjExQzA3MworOjEwMUEwMDAwMjQ0MjAyNDAyNDgzMDA0MDAwODIyMDIxMjQwMkZGODBERgorOjEwMUExMDAwMDA4MjIwMjQzMDYzMDA3RjNDMDI4MDBBMDA2MjE4MjE4QgorOjEwMUEyMDAwM0MwMjgwMDBBQzQ0MDAyNDAzRTAwMDA4QUNDMzAwMDA4QQorOjEwMUEzMDAwOTQ4MjAwMDY5MDgzMDAwNThDODUwMDBDOEM4NjAwMTAzMworOjEwMUE0MDAwOEM4NzAwMTg4Qzg4MDAxQzhDODQwMDIwM0MwMTA4MDBDNgorOjEwMUE1MDAwQTQyMjU2QzYzQzAxMDgwMEEwMjM1NkM1M0MwMTA4MDAzQworOjEwMUE2MDAwQUMyNTU2Q0MzQzAxMDgwMEFDMjY1NkQwM0MwMTA4MDAwMQorOjEwMUE3MDAwQUMyNzU2RDgzQzAxMDgwMEFDMjg1NkRDM0MwMTA4MDBENQorOjEwMUE4MDAwQUMyNDU2RTAwM0UwMDAwODAwMDAwMDAwM0MwMjgwMDg5RgorOjEwMUE5MDAwMzQ0MjAxMDA4QzQ0MDAzNDNDMDM4MDAwMzQ2NTA0MDA2RgorOjEwMUFBMDAwQUM2NDAwMzg4QzQyMDAzOEFGODUwMDI4QUM2MjAwM0M0MgorOjEwMUFCMDAwM0MwMjAwMDVBQzYyMDAzMDAwMDAwMDAwMDAwMDAwMDBBNQorOjEwMUFDMDAwMDNFMDAwMDgwMDAwMDAwMDNDMDIwMDA2MzA4NDAwRkYzNAorOjEwMUFEMDAwMDA4MjIwMjUzQzAyODAwMEFDNDQwMDMwMDAwMDAwMDA2MQorOjEwMUFFMDAwMDAwMDAwMDAwMDAwMDAwMDNDMDM4MDAwOEM2MjAwMDA0OQorOjEwMUFGMDAwMzA0MjAwMTAxMDQwRkZGRDM0NjIwNDAwMDNFMDAwMDg5MworOjEwMUIwMDAwQUY4MjAwMjg5NEMyMDAwMDNDMDgwODAwOTUwODAwQ0E3MworOjEwMUIxMDAwMzBFN0ZGRkYwMDgwNDgyMTAxMDIxMDIxQTRDMjAwMDAyRAorOjEwMUIyMDAwOTRDMjAwMDAzMDQyRkZGRjAwRTIxMDJCNTQ0MDAwMDEzRAorOjEwMUIzMDAwQTRDNzAwMDA5NEEyMDAwMDNDMDMwODAwOEM2MzAwQ0MwMgorOjEwMUI0MDAwMjQ0MjAwMDFBNEEyMDAwMDk0QTIwMDAwMzA0MkZGRkY0MgorOjEwMUI1MDAwMTQ0MzAwMDczQzAyODAwODAxMDcxMDJCQTRBMDAwMDBEQQorOjEwMUI2MDAwNTQ0MDAwMDEwMTAwMzgyMUE0QzcwMDAwM0MwMjgwMDg1NQorOjEwMUI3MDAwMzQ0NjAxMDA4Q0MzMDAyODk0QTIwMDAwM0MwNDgwMDA3RAorOjEwMUI4MDAwMzA0MkZGRkUwMDAyMTBDMDAwNjIxMDIxQUM4MjAwM0MxNworOjEwMUI5MDAwOEM4MjAwM0MwMDYyMTgyMzE4NjAwMDA0MDAwMDAwMDBFMgorOjEwMUJBMDAwOENDMjAwMjQwQTAwMDZCQTI0NDIwMDAxOENDMjAwMjQyMAorOjEwMUJCMDAwQUM4MjAwMzgzQzAyMDA1MDM0NDIwMDEwM0MwMzgwMDBFQworOjEwMUJDMDAwQUM2MjAwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENworOjEwMUJEMDAwOEM2MjAwMDAzMDQyMDAyMDEwNDBGRkZEMDAwMDAwMDAzOQorOjEwMUJFMDAwOTRBMjAwMDAzQzA0ODAwMDMwNDIwMDAxMDAwMjEwQzBCQQorOjEwMUJGMDAwMDA0NDEwMjE4QzQzMDQwMEFEMjMwMDAwOEM0MjA0MDRGNworOjEwMUMwMDAwQUQyMjAwMDQzQzAyMDAyMDAzRTAwMDA4QUM4MjAwMzA1QQorOjEwMUMxMDAwMjdCREZGRTBBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTBBNQorOjEwMUMyMDAwQUZCRjAwMUM5NEMyMDAwMDAwQzA4MDIxM0MxMjA4MDAxRAorOjEwMUMzMDAwOTY1MjAwQzYyNDQyMDAwMUE2MDIwMDAwOTYwMzAwMDA0RQorOjEwMUM0MDAwOTRFMjAwMDAwMEUwMzAyMTE0NDMwMDA1OEZCMTAwMzAyMQorOjEwMUM1MDAwMEUwMDA2OEYwMjQwMzgyMTBBMDAwNkYxMDAwMDAwMDA0NQorOjEwMUM2MDAwOEM4MzAwMDQ4QzgyMDAwNDI0NDIwMDQwMDQ2MTAwMDczRAorOjEwMUM3MDAwQUM4MjAwMDQ4QzgyMDAwNDA0NDAwMDA0MDAwMDAwMDBEOAorOjEwMUM4MDAwOEM4MjAwMDAyNDQyMDAwMUFDODIwMDAwOTYwMjAwMDAxOQorOjEwMUM5MDAwMzA0MkZGRkY1MDUyMDAwMUE2MDAwMDAwOTYyMjAwMDBEMworOjEwMUNBMDAwMjQ0MjAwMDFBNjIyMDAwMDNDMDI4MDA4MzQ0MjAxMDBDOAorOjEwMUNCMDAwOTYyMzAwMDA5NDQyMDAzQzE0NDMwMDA0OEZCRjAwMUM5NAorOjEwMUNDMDAwMjQwMjAwMDFBNjIyMDAwMDhGQkYwMDFDOEZCMjAwMTg2MgorOjEwMUNEMDAwOEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjA3MgorOjEwMUNFMDAwMjdCREZGRTAzQzAyODAwOEFGQkYwMDE4MzQ0MjAxMDA2RQorOjEwMUNGMDAwOEM0ODAwMzQzQzAzODAwMDM0NjkwNDAwQUM2ODAwMzgzMAorOjEwMUQwMDAwOEM0MjAwMzgzMEU3MDBGRkFGODkwMDI4QUM2MjAwM0MwRAorOjEwMUQxMDAwM0MwMjAwMDVBQzYyMDAzMDAwMDAwMDAwMDAwMDAwMDA0MgorOjEwMUQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMworOjEwMUQzMDAwOEM4MjAwMEM4QzgyMDAwQzk3ODMwMDE2QUQyMjAwMDA3MAorOjEwMUQ0MDAwOEM4MjAwMTAwMDYwNDAyMUFEMjIwMDA0OEM4MjAwMThCQgorOjEwMUQ1MDAwQUQyMjAwMDg4QzgyMDAxQ0FEMjIwMDBDOENBMjAwMTQ2NQorOjEwMUQ2MDAwQUQyMjAwMTA4QzgyMDAyMEFEMjIwMDE0OTA4MjAwMDU2QworOjEwMUQ3MDAwMzA0MjAwRkYwMDAyMTIwMEFEMjIwMDE4OENBMjAwMThCMQorOjEwMUQ4MDAwQUQyMjAwMUM4Q0EyMDAwQ0FEMjIwMDIwOENBMjAwMTAwMQorOjEwMUQ5MDAwQUQyMjAwMjQ4Q0EyMDAxQ0FEMjIwMDI4OENBMjAwMjBDMQorOjEwMURBMDAwQUQyMjAwMkMzNDAyRkZGRkFEMjYwMDMwQUQyMDAwMzQwMAorOjEwMURCMDAwNTA2MjAwMDEzNDA4RkZGRkFEMjgwMDM4NTBFMDAwMTFFOAorOjEwMURDMDAwM0MwMjgwMDgzQzA0ODAwODM0ODQwMTAwOTQ4MjAwNTA2NgorOjEwMUREMDAwMzA0MkZGRkZBRDIyMDAzQzk0ODMwMDQ0OTQ4NTAwNDREMAorOjEwMURFMDAwMjQwMjAwMDEzMDYzRkZGRjAwMDMxOEMyMDA2NDE4MjFDMQorOjEwMURGMDAwOTA2NDAwNjQzMEE1MDAwNzAwQTIxMDA0MEEwMDA3NUM4QworOjEwMUUwMDAwMDA0NDEwMjUzNDQyMDEwMEFEMjAwMDNDOTQ0MzAwNDRCRQorOjEwMUUxMDAwOTQ0NDAwNDQzMDYzRkZGRjAwMDMxOEMyMDA2MjE4MjE5RAorOjEwMUUyMDAwMzA4NDAwMDc5MDY1MDA2NDI0MDIwMDAxMDA4MjEwMDRFMQorOjEwMUUzMDAwMDAwMjEwMjcwMDQ1MTAyNEEwNjIwMDY0MDAwMDAwMDA4QQorOjEwMUU0MDAwMDAwMDAwMDAwMDAwMDAwMDNDMDIwMDA2MzQ0MjAwNDA5OAorOjEwMUU1MDAwM0MwMzgwMDBBQzYyMDAzMDAwMDAwMDAwMDAwMDAwMDA4NQorOjEwMUU2MDAwMDAwMDAwMDA4QzYyMDAwMDMwNDIwMDEwMTA0MEZGRkRCNgorOjEwMUU3MDAwM0MwNjgwMDgzNEMyMDE1MDM0NjMwNDAwMzRDNzAxNEE3MAorOjEwMUU4MDAwMzRDNDAxMzQzNEM1MDE0MDM0QzYwMTQ0QUZBMjAwMTA0QgorOjEwMUU5MDAwMEUwMDA2RDJBRjgzMDAyODhGQkYwMDE4MDNFMDAwMDhCMQorOjEwMUVBMDAwMjdCRDAwMjA4RjgzMDAxNDNDMDYwODAwOENDNjAwRTg4NAorOjEwMUVCMDAwOEY4MjAwMUMzMDYzM0ZGRjAwMDMxOTgwMDA0NjEwMjExMQorOjEwMUVDMDAwMDA0MzEwMjEyNDAzRkY4MDAwNDMxODI0M0MwNjgwMDBCNworOjEwMUVEMDAwQUNDMzAwMjgzMDQyMDA3RjNDMDM4MDBDMDA0MzMwMjExQgorOjEwMUVFMDAwOTBDMjAwMEQzMEE1MDBGRjAwMDAzODIxMzQ0MjAwMTBFMAorOjEwMUVGMDAwQTBDMjAwMEQ4Rjg5MDAxNDNDMDI4MDA4MzQ0MjAxMDAwQQorOjEwMUYwMDAwOTQ0MzAwNDQwMDA5MTM4MjMwNDgwMDAzMjQwMjAwMDE3NgorOjEwMUYxMDAwQTRDMzAwMEUxMTAyMDAwQjI5MDIwMDAyMTA0MDAwMDVBQworOjEwMUYyMDAwMjQwMjAwMDIxMTAwMDAwQzI0MDMwMDAxMEEwMDA3QTQ4RgorOjEwMUYzMDAwMDAwMDE4MjExMTAyMDAwNjAwMDAwMDAwMEEwMDA3QTQ5QQorOjEwMUY0MDAwMDAwMDE4MjE4Q0MyMDAyQzBBMDAwN0E0MjQ0MzAwMDFDMQorOjEwMUY1MDAwOENDMjAwMTQyNDQzMDAwMThDQzIwMDE4MDA0MzEwMkJEMworOjEwMUY2MDAwNTA0MDAwMEEyNDA3MDAwMTI0MDIwMDI3MTRBMjAwMDNBNQorOjEwMUY3MDAwM0MwMzgwMDgwQTAwMDdCMTI0MDcwMDAxMzQ2MzAxMDAxNAorOjEwMUY4MDAwOTQ2MjAwNEMyNDQyMDAwMUE0NjIwMDRDMDAwOTEzODJCOAorOjEwMUY5MDAwMzA0MzAwMDMyQzYyMDAwMjEwNDAwMDA5MDA4MDI4MjExOQorOjEwMUZBMDAwMTQ2MDAwMDQwMDAwMDAwMDk0QzIwMDM0MEEwMDA3QzE1RAorOjEwMUZCMDAwMzA0NkZGRkY4Q0M2MDAzODBBMDAwN0MxMDA4MDI4MjE4OAorOjEwMUZDMDAwMDAwMDMwMjEzQzA0MDgwMDI0ODQ1NkMwMEEwMDA3MDZBMworOjEwMUZEMDAwMDAwMDAwMDAyN0JERkY5MEFGQjYwMDY4QUZCNTAwNjRGOQorOjEwMUZFMDAwQUZCNDAwNjBBRkIzMDA1Q0FGQjIwMDU4QUZCMTAwNTQwMworOjEwMUZGMDAwQUZCRjAwNkNBRkIwMDA1MDhDOTAwMDAwMDA4MEIwMjFFQgorOjEwMjAwMDAwM0MwMjA4MDA4QzQyMDBFODk2MDQwMDMyOEY4MzAwMUNEQQorOjEwMjAxMDAwMjQxNEZGODAzMDg0M0ZGRjAwNjIxODIxMDAwNDIxODBENworOjEwMjAyMDAwMDA2NDE4MjEwMDc0MTAyNDNDMTM4MDAwMDBBMDkwMjE0QgorOjEwMjAzMDAwOTBBNTAwMDBBRTYyMDAyODkyMDQwMDMyM0MwMjgwMENBMQorOjEwMjA0MDAwMzA2MzAwN0YwMDYyODgyMTMwODQwMEMwMjQwMjAwNDA5OQorOjEwMjA1MDAwMTQ4MjAwMzIwMDAwQTgyMThFMzUwMDM4OEUyMjAwMTgyQworOjEwMjA2MDAwMTQ0MDAwMDIyNDAyMDAwMUFFMjIwMDE4OTIwMjAwM0MzQgorOjEwMjA3MDAwMzA0MjAwMjAxNDQwMDAwRThGODMwMDFDMDAwNTExQzA2OAorOjEwMjA4MDAwMjQ0MjAyNDAwMDYyMTgyMTMwNjQwMDc4M0MwMjAwODA0MworOjEwMjA5MDAwMDA4MjIwMjUwMDc0MTgyNEFFNjMwODAwQUU2NDA4MTA4NgorOjEwMjBBMDAwOEUyMjAwMTg4RTAzMDAwODAwNDMxMDIxQUUyMjAwMTg3MworOjEwMjBCMDAwOEUyMjAwMkM4RTIzMDAxODI0NDIwMDAxMDA2MjE4MkI2RgorOjEwMjBDMDAwMTA2MDAwNDMwMDAwMDAwMDkyNDIwMDAwMjQ0MjAwMDEyMgorOjEwMjBEMDAwQTI0MjAwMDAzQzAzMDgwMDhDNjMwMEY0MzA0MjAwRkY4MQorOjEwMjBFMDAwNTA0MzAwMDFBMjQwMDAwMDkyNDIwMDAwOEY4NDAwMUM3NworOjEwMjBGMDAwMDAwMjExQzAyNDQyMDI0MDI0ODMwMDQwMzA2MzAwN0Y2QworOjEwMjEwMDAwMDA4MjIwMjEzQzAyODAwQTAwOTQyMDI0MDA2MjE4MjFEMQorOjEwMjExMDAwQUU2NDAwMjQwQTAwMDhEMkFFQzMwMDAwOTIwMzAwMzI2RAorOjEwMjEyMDAwMjQwMkZGQzAwMDQzMTAyNDMwNDIwMEZGMTQ0MDAwMDU4OQorOjEwMjEzMDAwMjQwMjAwMDFBRTIyMDAxODk2MjIwMDM0MEEwMDA4NDI1MAorOjEwMjE0MDAwMzA1NUZGRkY4RTIyMDAxNDI0NDIwMDAxQUUyMjAwMThGOQorOjEwMjE1MDAwOTIwMjAwMzAwMDAyMTYwMDAwMDIxNjAzMDQ0MTAwMUMyNworOjEwMjE2MDAwMDAwMDAwMDA5NjAyMDAzMjI3QTQwMDEwMDA4MDI4MjEwMQorOjEwMjE3MDAwQTdBMjAwMTY5NjAyMDAzMjAwMDAzMDIxMjQwNzAwMDFCOQorOjEwMjE4MDAwMzA0MkZGRkZBRjgyMDAxNDBFMDAwNzA2QUZBMDAwMUMxNAorOjEwMjE5MDAwOTYwMjAwMzI4RjgzMDAxQzNDMDQwODAwOEM4NDAwRTgwNworOjEwMjFBMDAwMzA0MjNGRkYwMDAyMTE4MDAwNjQxODIxMDA2MjE4MjFCNAorOjEwMjFCMDAwMDA3NDEwMjRBRTYyMDAyQzMwNjMwMDdGM0MwMjgwMEU1RAorOjEwMjFDMDAwMDA2MjE4MjE5MDYyMDAwRDMwNDIwMDdGQTA2MjAwMEQ3NQorOjEwMjFEMDAwOTIyMjAwMEQzMDQyMDAxMDUwNDAwMDc4OTI0MjAwMDBFMAorOjEwMjFFMDAwM0MwMjgwMDgzNDQ0MDEwMDk0ODIwMDRDOEVDMzAwMDBGRAorOjEwMjFGMDAwM0MxMzA4MDA5NjczMDBDNjI0NDJGRkZGQTQ4MjAwNENFMworOjEwMjIwMDAwOTQ2MjAwMzI5NjIzMDAwRTMwNTRGRkZGMzA3MEZGRkZCRgorOjEwMjIxMDAwM0MwMzA4MDA4QzYzMDBEMDAwNzAxODA3QTdBMzAwMzhBNworOjEwMjIyMDAwOTQ4MjAwM0UzMDYzRkZGRjMwNDJGRkZGMTQ2MjAwMDdEQworOjEwMjIzMDAwMDAwMDAwMDA4QzgyMDAzMDNDMDM4MDAwMjQ0MjAwMzAwQgorOjEwMjI0MDAwQUM2MjAwM0MwQTAwMDg2QThDODIwMDJDOTQ4MjAwNDAzOAorOjEwMjI1MDAwMzA0MkZGRkY1NDYyMDAwOTI3QTQwMDQwOEM4MjAwMzhGRQorOjEwMjI2MDAwM0MwMzgwMDAyNDQyMDAzMEFDNjIwMDNDOEM4MjAwMzQ4RAorOjEwMjI3MDAwQUM2MjAwMzgwQTAwMDg3OTNDMDM4MDAwMjdBNTAwMzhDQQorOjEwMjI4MDAwMjdBNjAwNDgwMjYwMzgyMTBFMDAwNjhGQTdBMDAwNDg0QworOjEwMjI5MDAwOEZBMzAwNDAzQzAyODAwMDI0NjMwMDMwQUM0MzAwMzgzMAorOjEwMjJBMDAwOEZBMzAwNDRBQzQzMDAzQzNDMDM4MDAwM0MwMjAwMDU4QgorOjEwMjJCMDAwQUM2MjAwMzAzQzAyODAwODM0NDQwMTAwOTQ4MjAwNDI0OQorOjEwMjJDMDAwMzQ2MzA0MDAzMDQyRkZGRjAyMDIxMDJCMTQ0MDAwMDc2OQorOjEwMjJEMDAwQUY4MzAwMjg5NDgyMDA0RTk0ODMwMDQyMDIwMjEwMjFCMgorOjEwMjJFMDAwMDA0MzEwMjMwQTAwMDg4RjMwNDNGRkZGOTQ4MzAwNEUwMQorOjEwMjJGMDAwOTQ4MjAwNDIwMjYzMTgyMTAwNTAxMDIzMDA2MjE4MjNDOAorOjEwMjMwMDAwMzA2M0ZGRkYzQzAyODAwODM0NDQwMTAwOTQ4MjAwM0NBQgorOjEwMjMxMDAwMzA0MkZGRkYxNDQzMDAwMzAwMDAwMDAwMEEwMDA4OUY0MgorOjEwMjMyMDAwMjQwMzAwMDE5NDgyMDAzQzMwNDJGRkZGMDA2MjEwMkIyNgorOjEwMjMzMDAwMTQ0MDAwMDU4RjgyMDAyODk0ODIwMDNDMDA2MjEwMjMyNAorOjEwMjM0MDAwMzA0M0ZGRkY4RjgyMDAyOEFDNTUwMDAwQUM0MDAwMDRGMgorOjEwMjM1MDAwQUM1NDAwMDhBQzQzMDAwQzNDMDIwMDA2MzQ0MjAwMTBCMAorOjEwMjM2MDAwM0MwMzgwMDBBQzYyMDAzMDAwMDAwMDAwMDAwMDAwMDA3MAorOjEwMjM3MDAwMDAwMDAwMDA4QzYyMDAwMDMwNDIwMDEwMTA0MEZGRkRBMQorOjEwMjM4MDAwM0MwNDgwMDgzNDg0MDEwMDAwMTAxOEMyMDA2NDE4MjE0NQorOjEwMjM5MDAwOTA2NTAwNjQzMjAyMDAwNzI0MDYwMDAxMDA0NjEwMDQyNAorOjEwMjNBMDAwMDA0NTEwMjVBMDYyMDA2NDk0ODMwMDQyOTYyMjAwMEUyRQorOjEwMjNCMDAwNTA0MzAwMDFBMzg2MDAxODkyNDIwMDAwMjQ0MjAwMDEwRAorOjEwMjNDMDAwQTI0MjAwMDAzQzAzMDgwMDhDNjMwMEY0MzA0MjAwRkY4RQorOjEwMjNEMDAwNTA0MzAwMDFBMjQwMDAwMDkyNDIwMDAwOEY4NDAwMUM4NAorOjEwMjNFMDAwMDAwMjExQzAyNDQyMDI0MDI0ODMwMDQwMDA4MjIwMjFDOAorOjEwMjNGMDAwMjQwMkZGODAwMDgyMjAyNDMwNjMwMDdGM0MwMjgwMEE5OAorOjEwMjQwMDAwMDA2MjE4MjEzQzAyODAwMEFDNDQwMDI0QUVDMzAwMDBFRQorOjEwMjQxMDAwOEZCRjAwNkM4RkI2MDA2ODhGQjUwMDY0OEZCNDAwNjAwQQorOjEwMjQyMDAwOEZCMzAwNUM4RkIyMDA1ODhGQjEwMDU0OEZCMDAwNTA1MgorOjEwMjQzMDAwMDNFMDAwMDgyN0JEMDA3MDI3QkRGRkQ4QUZCMzAwMUMyNAorOjEwMjQ0MDAwQUZCMjAwMThBRkIxMDAxNEFGQjAwMDEwQUZCRjAwMjBBMgorOjEwMjQ1MDAwMDA4MDk4MjEwMEUwODAyMTMwQjFGRkZGMEUwMDBEODQ0NAorOjEwMjQ2MDAwMzBEMjAwRkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwMjQ3MDAwOEY4MjAwMjA4RjgzMDAyNEFDNTEwMDAwQUM1MjAwMDRGNgorOjEwMjQ4MDAwQUM1MzAwMDhBQzQwMDAwQ0FDNDAwMDEwQUM0MDAwMTQ1MQorOjEwMjQ5MDAwQUM0MDAwMTg5NDYzMDAxRTAyMDM4MDI1QUM1MDAwMUM2MQorOjEwMjRBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjQwNDAwMDEwMworOjEwMjRCMDAwOEZCRjAwMjA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTRBMworOjEwMjRDMDAwOEZCMDAwMTAwQTAwMERCODI3QkQwMDI4MzBBNUZGRkYwRgorOjEwMjREMDAwMEEwMDA4REMzMEM2MDBGRjNDMDI4MDA4MzQ0MzAxMDBEQgorOjEwMjRFMDAwOTQ2MjAwMEUzQzA4MDgwMDk1MDgwMEM2MzA0NkZGRkZDNQorOjEwMjRGMDAwMTRDMDAwMDQzNDAyRkZGRjk0NjUwMEVBMEEwMDA5MjlCMQorOjEwMjUwMDAwOEY4NDAwMUMxMEMyMDAyNzAwMDAwMDAwOTQ2MjAwNEU1RgorOjEwMjUxMDAwOTQ2NDAwM0MzMDQ1RkZGRjAwQTYxMDIzMDBBNjE4MkI1MgorOjEwMjUyMDAwMzA4N0ZGRkYxMDYwMDAwNDMwNDRGRkZGMDBDNTEwMjMxOAorOjEwMjUzMDAwMDBFMjEwMjMzMDQ0RkZGRjAwODgxMDJCMTA0MDAwMEVGMworOjEwMjU0MDAwMDBFODEwMjMzQzAyODAwODM0NDQwMTAwMjQwMzAwMDEwOQorOjEwMjU1MDAwMzQ0MjAwODBBNDQzMDAxNjI0MDJGRkZGQTQ4MjAwMEUzMAorOjEwMjU2MDAwOTQ4NTAwRUE4Rjg0MDAxQzAwMDAzMDIxMzBBNUZGRkYxNQorOjEwMjU3MDAwMEEwMDA5MDEzQzA3NjAyMDAwNDQxMDJBMTA0MDAwMDlBRAorOjEwMjU4MDAwM0MwMjgwMDgzNDQzMDA4MDk0NjIwMDE2MzA0MjAwMDEwRgorOjEwMjU5MDAwMTA0MDAwMDQzQzAyODAwMDk0NDIwMDdFMjQ0MjAwMTQ1QgorOjEwMjVBMDAwQTQ2MjAwMTYwM0UwMDAwODAwMDAwMDAwMjdCREZGRTA2MQorOjEwMjVCMDAwM0MwMjgwMDhBRkJGMDAxQ0FGQjAwMDE4MzQ0MjAxMDBERAorOjEwMjVDMDAwOTQ0MzAwNDI5NDQyMDA0QzEwNDAwMDE5MzA2OEZGRkZEMQorOjEwMjVEMDAwOTM4MzAwMTgyNDAyMDAwMTE0NjIwMDI5OEZCRjAwMUM5RAorOjEwMjVFMDAwM0MwNjgwMDgzNEQwMDEwMDAwMDgxMEMyMDA1MDEwMjFDMQorOjEwMjVGMDAwOTA0MjAwNjQzMTAzMDAwNzM0QzcwMTQ4MzA0MjAwRkZCNQorOjEwMjYwMDAwMDA2MjEwMDczMDQyMDAwMTM0QzkwMTRFMzRDNDAxMkM2RAorOjEwMjYxMDAwMzRDNTAxM0UxMDQwMDAxNjM0QzYwMTQyMEUwMDA2RDJGOQorOjEwMjYyMDAwQUZBOTAwMTA5NjAyMDA0MjBBMDAwOTQ2MzA0OEZGRkY5OQorOjEwMjYzMDAwM0MwMjgwMDgzNDQ0MDEwMDk0ODMwMDQ0OTQ4MjAwNDJBOAorOjEwMjY0MDAwMTA0MzAwMEY4RkJGMDAxQzk0ODIwMDQ0QTQ4MjAwNDJGQworOjEwMjY1MDAwOTQ4MjAwNTBBNDgyMDA0RThDODIwMDM4QUM4MjAwMzBGQworOjEwMjY2MDAwOTQ4MjAwNDBBNDgyMDAzRTk0ODIwMDRBQTQ4MjAwNDhFMgorOjEwMjY3MDAwOEZCRjAwMUM4RkIwMDAxODBBMDAwOTA0MjdCRDAwMjA3RQorOjEwMjY4MDAwOEZCMDAwMTgwM0UwMDAwODI3QkQwMDIwMjdCREZGQTA4MQorOjEwMjY5MDAwQUZCMTAwNEMzQzExODAwMEFGQkYwMDU4QUZCMzAwNTQ0NQorOjEwMjZBMDAwQUZCMjAwNTBBRkIwMDA0ODM2MjYwMTg4OTBDMjAwMDM5OAorOjEwMjZCMDAwMzA0NDAwN0ZBM0E0MDAxMDhFMzIwMTgwOTBDMjAwMDAzRAorOjEwMjZDMDAwMzA0MzAwN0YyNDAyMDAwMzEwNjIwMDNCQUY5MjAwMUNFNQorOjEwMjZEMDAwMjg2MjAwMDQxMDQwMDAwNjI0MDIwMDA0MjQwMjAwMDJDNAorOjEwMjZFMDAwMTA2MjAwMDk4RkJGMDA1ODBBMDAwQjBGOEZCMzAwNTQwRgorOjEwMjZGMDAwMTA2MjAwNEQyNDAyMDAwNTEwNjIwMTRFOEZCRjAwNTg4OQorOjEwMjcwMDAwMEEwMDBCMEY4RkIzMDA1NDAwMDQxMUMwMDI0MjEwMjFDNQorOjEwMjcxMDAwMjQwNEZGODAyNDQyMDI0MDAwNDQxMDI0MjY0MzAwNDA0OQorOjEwMjcyMDAwQUUyMjAwMjQzMDYzMDA3RjNDMDI4MDBBMDA2MjE4MjE0MAorOjEwMjczMDAwOTA2MjAwM0NBRkEzMDAzQzAwNDQxMDI1QTA2MjAwM0MyNgorOjEwMjc0MDAwOEZBMzAwM0M5MDYyMDAzQzMwNDIwMDQwMTA0MDAxNkM3RQorOjEwMjc1MDAwOEZCRjAwNTgzQzEwODAwOEEzODAwMDE4MzYxMDAxMDA3RAorOjEwMjc2MDAwOEUwMjAwRTA4QzYzMDAzNDI3QTQwMDNDMjdBNTAwMTBGMworOjEwMjc3MDAwMDA0MzEwMjEwRTAwMDdDM0FFMDIwMEUwOTNBMjAwMTAzOAorOjEwMjc4MDAwM0MwMzgwMDBBMjAyMDBENThDNjIwMjc4MDQ0MEZGRkU2OAorOjEwMjc5MDAwOEY4MjAwMUNBQzYyMDI0MDI0MDIwMDAyQTA2MjAyNDQ0QworOjEwMjdBMDAwM0MwMjEwMDBBQzYyMDI3ODBFMDAwOTM5MDAwMDAwMDAwMworOjEwMjdCMDAwMEEwMDBCMEU4RkJGMDA1ODNDMDU4MDA4OTBDMzAwMDEzMworOjEwMjdDMDAwOTBBMjAwMEIxNDQzMDE0RThGQkYwMDU4MzRBNDAwODAyOAorOjEwMjdEMDAwOEM4MjAwMTg5MDgyMDA0QzkwQTIwMDA4M0MwMjYwMDA5RAorOjEwMjdFMDAwOEM0MjU0MDQ4QzgzMDAxODNDMDI3RkZGMzQ0MkZGRkY2QworOjEwMjdGMDAwMDA2MjE4MjQzQzAyMDgwMDhDNDIwMEI0QUM4MzAwMTgyQworOjEwMjgwMDAwM0MwMzgwMDAyNDQyMDAwMTNDMDEwODAwQUMyMjAwQjREQgorOjEwMjgxMDAwOEM2MjAxRjgwNDQwRkZGRThGODIwMDFDQUM2MjAxQzA5NAorOjEwMjgyMDAwMEEwMDBBRDYyNDAyMDAwMjNDMTA4MDA4OTBDMzAwMDE2RQorOjEwMjgzMDAwOTIwMjAwMEIxNDQzMDEzMjhGQkYwMDU4MjdBNDAwMThFNgorOjEwMjg0MDAwMzYwNTAxMTAyNDA2MDAwMzNDMDI2MDAwOEM0MjU0MDQ0QgorOjEwMjg1MDAwMEUwMDBFNDcwMDAwMDAwMDI3QTQwMDI4MzYwNTAxRjBGNgorOjEwMjg2MDAwMEUwMDBFNDcyNDA2MDAwMzhGQTIwMDI4MzYwMzAxMDA0NQorOjEwMjg3MDAwQUUwMjAwNjQ4RkEyMDAyQ0FFMDIwMDY4OEZBMjAwMzA2RQorOjEwMjg4MDAwQUUwMjAwNkM5M0E0MDAxODkwNjMwMEQ1MjQwMkZGODA3MAorOjEwMjg5MDAwMDA4MjEwMjQwMDQzMTAyNTMwNDkwMEZGMzA4NDAwN0Y1RgorOjEwMjhBMDAwMzEyMjAwN0YwMDgyMTAyQTU0NDAwMDAxMzkyOTAwODAyMworOjEwMjhCMDAwMDAwNDExQzAyNDQyMDI0MDI0MDNGRjgwMDI0MjEwMjE4MAorOjEwMjhDMDAwMDA0MzEwMjRBRTIyMDA5NDI2NDIwMDQwMzA0MjAwN0Y5NAorOjEwMjhEMDAwM0MwMzgwMDYwMDQzNDAyMThGQTMwMDFDMjQwMkZGRkYxRAorOjEwMjhFMDAwQUZBODAwNDAzQzEzMDgwMDkyNzMwMEY3MTA2MjAwMzM1OQorOjEwMjhGMDAwOTNBMjAwMTk5NTAzMDAxNDMwNDQwMEZGMzA2M0ZGRkZEQQorOjEwMjkwMDAwMDA2NDE4MkIxMDYwMDAxMDAwMDAwMDAwOTUwNDAwMTRGMworOjEwMjkxMDAwOEQwNzAwMUM4RDA2MDAxODMwODRGRkZGMDA0NDIwMjMyMworOjEwMjkyMDAwMDAwNDIxMDAwMEU0MzgyMTAwMDAxMDIxMDBFNDIwMkJFNQorOjEwMjkzMDAwMDBDMjMwMjEwMEM0MzAyMUFEMDcwMDFDQUQwNjAwMThENAorOjEwMjk0MDAwMEEwMDBBMkY5M0EyMDAxOTk1MDQwMDE0OEQwNzAwMUM5OQorOjEwMjk1MDAwOEQwNjAwMTgzMDg0RkZGRjAwODIyMDIzMDAwNDIxMDAzMAorOjEwMjk2MDAwMDAwMDEwMjEwMDgwMTgyMTAwQzIzMDIzMDBFNDIwMkIzOQorOjEwMjk3MDAwMDBDNDMwMjMwMEUzMzgyM0FEMDcwMDFDQUQwNjAwMTg2NworOjEwMjk4MDAwOTNBMjAwMTk4RkEzMDA0MEE0NjIwMDE0OTdBMjAwMUExQQorOjEwMjk5MDAwQTQ2MjAwMTY4RkEyMDAxQ0FDNjIwMDEwOEZBMjAwMUM2MworOjEwMjlBMDAwQUM2MjAwMEM5M0EyMDAxOUE0NjIwMDIwOTdBMjAwMUE0NgorOjEwMjlCMDAwQTQ2MjAwMjI4RkEyMDAxQ0FDNjIwMDI0M0MwNDgwMDhBOAorOjEwMjlDMDAwMzQ4MzAwODA4QzYyMDAzODhGQTIwMDIwMDEyMDg4MjE4RgorOjEwMjlEMDAwQUM2MjAwM0M4RkEyMDAyMEFDODIwMDAwOTNBMjAwMThFMQorOjEwMjlFMDAwQTA2MjAwNEM5M0EyMDAxOEEwODIwMDA5QTA2MDAwNjhCOQorOjEwMjlGMDAwOTNBMjAwMTgxMDUxMDA1MTI0MDdGRjgwMzIyOTAwN0Y1NAorOjEwMkEwMDAwMDAwOTExQzAyNDQyMDI0MDAyNDIxMDIxMzA0NjAwN0ZEQQorOjEwMkExMDAwM0MwMzgwMDAwMDQ3MTAyNEFDNjIwMDk0M0MwMjgwMDYxNgorOjEwMkEyMDAwMDBDMjMwMjE5MEMyMDAzQ0FGQTYwMDQwMDAwMDIwMjEyRgorOjEwMkEzMDAwMDA0NzEwMjVBMEMyMDAzQzhGQTgwMDQwOTUwMjAwMDI2QworOjEwMkE0MDAwOTUwMzAwMTQ4RDA3MDAxQzMwNDJGRkZGMzA2M0ZGRkYyOQorOjEwMkE1MDAwOEQwNjAwMTgwMDQzMTAyMzAwMDIxMTAwMDBFMjM4MjEwNworOjEwMkE2MDAwMDBFMjEwMkIwMEM0MzAyMTAwQzIzMDIxQUQwNzAwMUM1MQorOjEwMkE3MDAwQUQwNjAwMTg5NTAyMDAwMkE1MDIwMDE0QTUwMDAwMTY3QworOjEwMkE4MDAwOEQwMjAwMDhBRDAyMDAxMDhEMDIwMDA4QUQwMjAwMEM5RQorOjEwMkE5MDAwOTUwMjAwMDJBNTAyMDAyMEE1MDAwMDIyOEQwMjAwMDg3OAorOjEwMkFBMDAwQUQwMjAwMjQ5MTAyMDAzQzMwNDIwMDQwMTA0MDAwMUE2OAorOjEwMkFCMDAwMjYyMjAwMDEzQzEwODAwOEEzQTkwMDM4QTM4MDAwMTgzQQorOjEwMkFDMDAwMzYxMDAxMDA4RTAyMDBFMDhEMDMwMDM0MjdBNDAwNDA4MAorOjEwMkFEMDAwMjdBNTAwMzgwMDQzMTAyMTBFMDAwN0MzQUUwMjAwRTAxNgorOjEwMkFFMDAwOTNBMjAwMzgzQzAzODAwMEEyMDIwMEQ1OEM2MjAyNzhEOQorOjEwMkFGMDAwMDQ0MEZGRkU4RjgyMDAxQ0FDNjIwMjQwMjQwMjAwMDJGMAorOjEwMkIwMDAwQTA2MjAyNDQzQzAyMTAwMEFDNjIwMjc4MEUwMDA5Mzk1NworOjEwMkIxMDAwMDAwMDAwMDAyNjIyMDAwMTMwNDMwMDdGMTQ3MzAwMDRFRgorOjEwMkIyMDAwMDA0MDIwMjEyNDAzRkY4MDAyMjMxMDI0MDA0MzIwMjY5QworOjEwMkIzMDAwOTNBMjAwMTgwQTAwMEE0QjMwOTEwMEZGOTNBNDAwMThEQQorOjEwMkI0MDAwOEZBMzAwMUMyNDAyRkZGRjEwNjIwMDBBMzA4OTAwRkZERgorOjEwMkI1MDAwMjQ4MjAwMDEyNDgzMDAwMTMwNDIwMDdGMTQ1MzAwMDVDOQorOjEwMkI2MDAwMzA2OTAwRkYyNDAzRkY4MDAwODMxMDI0MDA0MzEwMjZGNworOjEwMkI3MDAwMzA0OTAwRkYzQzAyODAwODkwNDIwMDA4MDEyMDg4MjE3MworOjEwMkI4MDAwMzA1MDAwRkYxMjMwMDAxOTMyMjIwMDdGMDAwMjExQzBDNQorOjEwMkI5MDAwMDI0MjEwMjEyNDQyMDI0MDI0MDNGRjgwMDA0MzE4MjRGMworOjEwMkJBMDAwM0MwNDgwMDBBQzgzMDA5NDMwNDIwMDdGM0MwMzgwMDZFQworOjEwMkJCMDAwMDA0MzEwMjE4QzQzMDAwQzAwNDAyMDIxMTA2MDAwMEJDQQorOjEwMkJDMDAwQUZBMjAwNDAwRTAwMDU3RTAwMDAwMDAwMjYyMzAwMDE5OQorOjEwMkJEMDAwMjQwNUZGODAzMDYyMDA3RjE0NTMwMDAyMDIyNTIwMjQ2OAorOjEwMkJFMDAwMDA4NTE4MjYwQTAwMEFBRjMwNzEwMEZGM0MwNDgwMDhGNworOjEwMkJGMDAwMzQ4NDAwODA4QzgzMDAxODNDMDI3RkZGMzQ0MkZGRkY0NgorOjEwMkMwMDAwMDA2MjE4MjRBQzgzMDAxODNDMDM4MDAwOEM2MjAxRjgzOQorOjEwMkMxMDAwMDQ0MEZGRkUwMDAwMDAwMEFDNzIwMUMwMjQwMjAwMDI2QworOjEwMkMyMDAwQTA2MjAxQzQzQzAyMTAwMEFDNjIwMUY4MEEwMDBCMEU2NQorOjEwMkMzMDAwOEZCRjAwNTgzQzA0ODAwODkwQzMwMDAxOTA4MjAwMEJCNQorOjEwMkM0MDAwMTQ0MzAwMkY4RkJGMDA1ODM0OTAwMDgwOTIwMjAwMDg3OAorOjEwMkM1MDAwMzA0MjAwNDAxMDQwMDAyMDAwMDAwMDAwOTIwMjAwMDhCNgorOjEwMkM2MDAwMDAwMjE2MDAwMDAyMTYwMzA0NDEwMDA1MDI0MDIwMjE2NAorOjEwMkM3MDAwMEUwMDBFQ0MyNDA1MDA5MzBBMDAwQjBFOEZCRjAwNThFNworOjEwMkM4MDAwOTIwMjAwMDkyNDAzMDAxODMwNDIwMEZGMTQ0MzAwMEQ5MworOjEwMkM5MDAwMDI0MDIwMjEyNDA1MDAzOTBFMDAwRTY0MDAwMDMwMjE3RQorOjEwMkNBMDAwMEUwMDAzMzI4Rjg0MDAxQzhGODJGRjk0MjQwMzAwMTJENQorOjEwMkNCMDAwQTA0MzAwMDkwRTAwMDMzRDhGODQwMDFDMEEwMDBCMEU4OAorOjEwMkNDMDAwOEZCRjAwNTgyNDA1MDAzNjBFMDAwRTY0MDAwMDMwMjEyRQorOjEwMkNEMDAwMEEwMDBCMEU4RkJGMDA1ODBFMDAwMzMyMDI0MDIwMjE2NQorOjEwMkNFMDAwOTIwMjAwMDU4Rjg0MDAxQzM0NDIwMDIwMEUwMDAzM0QzOAorOjEwMkNGMDAwQTIwMjAwMDUwRTAwMTA3NThGODQwMDFDOEZCRjAwNThDMworOjEwMkQwMDAwOEZCMzAwNTQ4RkIyMDA1MDhGQjEwMDRDOEZCMDAwNDg4OQorOjEwMkQxMDAwMDNFMDAwMDgyN0JEMDA2MDNDMDI4MDA4MzQ0NTAxMDA0NAorOjEwMkQyMDAwM0MwMjgwMDA4QzQyMDE0MDk0QTMwMDBFMDAwMDMwMjE0MAorOjEwMkQzMDAwMDA0MDIwMjFBRjgyMDAxQzMwNjNGRkZGMzQwMkZGRkYwMAorOjEwMkQ0MDAwMTA2MjAwMDYzQzA3NjAyMDI0MDJGRkZGQTRBMjAwMEVEMAorOjEwMkQ1MDAwOTRBNTAwRUEwQTAwMDkwMTMwQTVGRkZGMDNFMDAwMDg3RQorOjEwMkQ2MDAwMDAwMDAwMDAyN0JERkZDODNDMDI4MDAwM0MwNjgwMDgzMAorOjEwMkQ3MDAwQUZCNTAwMkNBRkIxMDAxQ0FGQkYwMDMwQUZCNDAwMjgxRQorOjEwMkQ4MDAwQUZCMzAwMjRBRkIyMDAyMEFGQjAwMDE4MzQ1MTAxMDAzRgorOjEwMkQ5MDAwMzRDNTAxMDA4QzQzMDEwMDhFMjIwMDE0OENBNDAwRTQ5MQorOjEwMkRBMDAwMDAwMEE4MjFBRjgzMDAxQzAwNDQxMDIzMTg0MDAwNTJFQgorOjEwMkRCMDAwQTM4MDAwMTg4RTIyMDAxNDAwMDA1MDIxQUNBMjAwRTQ3MQorOjEwMkRDMDAwOTBDMzAwMDg5MEEyMDBENTMwNzMwMDdGQTNBMjAwMTAyQQorOjEwMkREMDAwOENCMjAwRTA4Q0I0MDBFNDMwNDIwMEZGMTA1MzAwM0JBMgorOjEwMkRFMDAwOTNBMjAwMTA4RjgzMDAxQzI0MDdGRjgwMDAwMjExQzBGMworOjEwMkRGMDAwMDA2MjEwMjEyNDQyMDI0MDI0NjMwMDQwMDA0NzEwMjQ1NgorOjEwMkUwMDAwMzA2MzAwN0YzQzA5ODAwMDNDMDg4MDBBMDA2ODE4MjE3QworOjEwMkUxMDAwQUQyMjAwMjQ4QzYyMDAzNDI3QTQwMDE0MjdBNTAwMTBFMgorOjEwMkUyMDAwMDI0MjgwMjEwMjkwMTAyMzA0NDAwMDI4QUZBMzAwMTQyNgorOjEwMkUzMDAwOTA2MjAwM0MwMEUyMTAyNDMwNDIwMEZGMTQ0MDAwMTk3MAorOjEwMkU0MDAwMDIwMDkwMjE5MDYyMDAzQzM0NDIwMDQwQTA2MjAwM0NBRAorOjEwMkU1MDAwOEY4NjAwMUM5M0EzMDAxMDI0QzIwMDQwMzA0MjAwN0ZFNAorOjEwMkU2MDAwMDA0ODI4MjEzQzAyMDgwMDhDNDIwMEY0MjQ2MzAwMDE0MQorOjEwMkU3MDAwMzA2NDAwRkYxNDgyMDAwMkEzQTMwMDEwQTNBMDAwMTA3RQorOjEwMkU4MDAwOTNBMjAwMTBBRkE1MDAxNDAwMDIxMUMwMjQ0MjAyNDAxQQorOjEwMkU5MDAwMDBDMjEwMjEwMDQ3MTAyNEFEMjIwMDI0MEEwMDBCNDU3NworOjEwMkVBMDAwOTNBMjAwMTAwRTAwMDdDMzAwMDAwMDAwM0MwMjgwMDgzRgorOjEwMkVCMDAwMzQ0MjAxMDBBQzUwMDBFMDkzQTMwMDEwMjQwQTAwMDE0QQorOjEwMkVDMDAwQTA0MzAwRDUwQTAwMEI0NTkzQTIwMDEwMjQwMjAwMDE4NAorOjEwMkVEMDAwMTU0MjAwMDkzQzAzODAwMDhDNjIwMjc4MDQ0MEZGRkUyQQorOjEwMkVFMDAwOEY4MjAwMUNBQzYyMDI0MDI0MDIwMDAyQTA2MjAyNDRGNQorOjEwMkVGMDAwM0MwMjEwMDBBQzYyMDI3ODkyMjIwMDBCMjQwMzAwMDIxNAorOjEwMkYwMDAwMzA0MjAwRkYxNDQzMDA3MjAwMDAwMDAwOTYyMjAwMDhDNworOjEwMkYxMDAwMzA0MzAwRkYyNDAyMDA4MjE0NjIwMDQwMjQwMjAwODQzNworOjEwMkYyMDAwM0MwMjgwMDAzNDQ5MDEwMDhEMjIwMDBDOTUyMzAwMDZFQworOjEwMkYzMDAwMDAwMjE2MDIzMDYzRkZGRjMwNDUwMDNGMjQwMjAwMjdFNQorOjEwMkY0MDAwMTBBMjAwMEZBRjgzMDAxNDI4QTIwMDI4MTA0MDAwMDgzMAorOjEwMkY1MDAwMjQwMjAwMzEyNDAyMDAyMTEwQTIwMDA5MjQwMjAwMjVDRAorOjEwMkY2MDAwMTBBMjAwMDc5MzgyMDAxOTBBMDAwQkJEMDAwMDAwMDBBOAorOjEwMkY3MDAwMTBBMjAwMDc5MzgyMDAxOTBBMDAwQkJEMDAwMDAwMDA5OAorOjEwMkY4MDAwMEUwMDA3NzcwMTIwMjAyMTBBMDAwQzNEMDAwMDAwMDAwMAorOjEwMkY5MDAwM0MwMzgwMDA4QzYyMDI3ODA0NDBGRkZFOEY4MjAwMUM5QworOjEwMkZBMDAwQUM2MjAyNDAyNDAyMDAwMkEwNjIwMjQ0M0MwMjEwMDAxMworOjEwMkZCMDAwQUM2MjAyNzgwQTAwMEMzRDAwMDAwMDAwOTUyMzAwMDY3OAorOjEwMkZDMDAwOTEyNDAwMDU4RDI1MDAwQzhEMjYwMDEwOEQyNzAwMThGQQorOjEwMkZEMDAwOEQyODAwMUM4RDI5MDAyMDI0NDIwMDAxM0MwMTA4MDA5RQorOjEwMkZFMDAwQTQyMzU2QzYzQzAxMDgwMEEwMjQ1NkM1M0MwMTA4MDA5NQorOjEwMkZGMDAwQUMyNTU2Q0MzQzAxMDgwMEFDMjY1NkQwM0MwMTA4MDA1QworOjEwMzAwMDAwQUMyNzU2RDgzQzAxMDgwMEFDMjg1NkRDM0MwMTA4MDAyRgorOjEwMzAxMDAwQUMyOTU2RTAwQTAwMEMzREEzODIwMDE5MTQ2MjAwMEE5NAorOjEwMzAyMDAwMjQwMjAwODEzQzAyODAwODM0NDIwMTAwOTQ0NTAwRUFGOQorOjEwMzAzMDAwOTIyNjAwMDU4Rjg0MDAxQzMwQTVGRkZGMzBDNjAwRkZEQworOjEwMzA0MDAwMEEwMDBCRkUzQzA3NjAyMTE0NjIwMDVDMDAwMDAwMDBENworOjEwMzA1MDAwOTIyMjAwMEEzMDQzMDBGRjMwNjIwMDIwMTA0MDAwMDczNworOjEwMzA2MDAwMzA2MjAwNDAzQzAyODAwODM0NDIwMTAwOTQ0NTAwRUE4RQorOjEwMzA3MDAwOEY4NDAwMUMwQTAwMEJGQzI0MDYwMDQwMTA0MDAwMDc0RgorOjEwMzA4MDAwMDAwMzE2MDAzQzAyODAwODM0NDIwMTAwOTQ0NTAwRUEyNworOjEwMzA5MDAwOEY4NDAwMUMwQTAwMEJGQzI0MDYwMDQxMDAwMjE2MDM2QQorOjEwMzBBMDAwMDQ0MTAwNDYzQzAyODAwODM0NDIwMTAwOTQ0NTAwRUE5NQorOjEwMzBCMDAwOEY4NDAwMUMyNDA2MDA0MjMwQTVGRkZGM0MwNzYwMTlFNgorOjEwMzBDMDAwMEUwMDA5MDEwMDAwMDAwMDBBMDAwQzNEMDAwMDAwMDA5NQorOjEwMzBEMDAwOTIyMjAwMEIyNDA0MDAxNjMwNDIwMEZGMTA0NDAwMDYyOAorOjEwMzBFMDAwM0MwNjgwMDA5MjIyMDAwQjI0MDMwMDE3MzA0MjAwRkZCMAorOjEwMzBGMDAwMTQ0MzAwMzIwMDAwMDAwMDM0QzUwMTAwOTBBMjAwMEIxMAorOjEwMzEwMDAwMzA0MjAwRkYxNDQ0MDAwQjAwMDA4MDIxOENBMjAwMjBGQworOjEwMzExMDAwOENBNDAwMjAyNDAzRkY4MDAwNDMxMDI0MDAwMjExNDBFRgorOjEwMzEyMDAwMzA4NDAwN0YwMDQ0MTAyNTNDMDMyMDAwMDA0MzEwMjUxQworOjEwMzEzMDAwQUNDMjA4MzA5NEEyMDAwODAwMDIxNDAwMDAwMjE0MDM3QworOjEwMzE0MDAwMDQ0MjAwMDEyNDEwMDAwMTk0QTIwMDA4MzA0MjAwODBEMworOjEwMzE1MDAwNTA0MDAwMUEwMjAwQTgyMTk0QTIwMDA4MzA0MjIwMDAyQQorOjEwMzE2MDAwNTA0MDAwMTYwMjAwQTgyMThDQTMwMDE4M0MwMjFDMkQyMAorOjEwMzE3MDAwMzQ0MjE5RUQxMDYyMDAxMTAyMDBBODIxM0MwMjA4MDAzRgorOjEwMzE4MDAwOEM0MjAwRDQxMDQwMDAwNTNDMDI4MDA4MjQwMzAwMDQ1NworOjEwMzE5MDAwMzQ0MjAxMDBBMDQzMDBGQzNDMDI4MDA4MzQ0MjAxMDA5QworOjEwMzFBMDAwOTQ0NTAwRUE4Rjg0MDAxQzI0MDYwMDA2MzBBNUZGRkYyQQorOjEwMzFCMDAwMEUwMDA5MDEzQzA3NjAyMTAyMDBBODIxMEUwMDA5MzkxOAorOjEwMzFDMDAwMDAwMDAwMDA5MjIyMDAwQTMwNDIwMDA4MTA0MDAwMDQ3MworOjEwMzFEMDAwMDJBMDEwMjEwRTAwMTM3OTAwMDAwMDAwMDJBMDEwMjFBRgorOjEwMzFFMDAwOEZCRjAwMzA4RkI1MDAyQzhGQjQwMDI4OEZCMzAwMjQyMAorOjEwMzFGMDAwOEZCMjAwMjA4RkIxMDAxQzhGQjAwMDE4MDNFMDAwMDhEMAorOjEwMzIwMDAwMjdCRDAwMzgyNDAyRkY4MDAwODIyMDI0M0MwMjkwMDA2OQorOjEwMzIxMDAwMzQ0MjAwMDcwMDgyMjAyNTNDMDI4MDAwQUM0NDAwMjA5QworOjEwMzIyMDAwM0MwMzgwMDA4QzYyMDAyMDA0NDBGRkZFMDAwMDAwMDA5MAorOjEwMzIzMDAwMDNFMDAwMDgwMDAwMDAwMDNDMDM4MDAwMjQwMkZGODAzRgorOjEwMzI0MDAwMDA4MjIwMjQzNDYyMDAwNzAwODIyMDI1QUM2NDAwMjAyNAorOjEwMzI1MDAwOEM2MjAwMjAwNDQwRkZGRTAwMDAwMDAwMDNFMDAwMDgzNAorOjEwMzI2MDAwMDAwMDAwMDAyN0JERkZEOEFGQjMwMDFDQUZCMTAwMTRCMQorOjEwMzI3MDAwQUZCMDAwMTBBRkJGMDAyMEFGQjIwMDE4M0MxMTgwMDAwQgorOjEwMzI4MDAwM0MwMjgwMDg4RTMyMDAyMDM0NTMwMTAwQUUyNDAwMjAxRQorOjEwMzI5MDAwOTY2MzAwRUEwMDA1MTQwMDNDMDc0MDAwMDA0NzM4MjUwQgorOjEwMzJBMDAwMDBBMDgwMjEwMDAwMzAyMTBFMDAwOTAxMzA2NUZGRkZFMQorOjEwMzJCMDAwMjQwMjAwQTExNjAyMDAwMjI0MDJGRkZGQTI2MjAwMDlGQworOjEwMzJDMDAwQUUzMjAwMjA4RkJGMDAyMDhGQjMwMDFDOEZCMjAwMThEOQorOjEwMzJEMDAwOEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjg1NAorOjEwMzJFMDAwM0MwMjgwMDgyNDAzMDAwNTI3QkRGRkU4MzQ0MjAxMDBBQQorOjEwMzJGMDAwQTA0MzAwRkNBRkJGMDAxMDNDMDI4MDAwOEM0MjAxMDBFNAorOjEwMzMwMDAwMjQwNTAwQTEwMDQwMjAyMTBFMDAwQzY3QUY4MjAwMUNBNAorOjEwMzMxMDAwM0MwMzgwMDA4QzYyMDI3ODA0NDBGRkZFOEY4MjAwMUMxOAorOjEwMzMyMDAwOEZCRjAwMTAyN0JEMDAxOEFDNjIwMjQwMjQwMjAwMDJDQgorOjEwMzMzMDAwQTA2MjAyNDQzQzAyMTAwMEFDNjIwMjc4MDNFMDAwMDg4NAorOjEwMzM0MDAwMDAwMDAwMDAyN0JERkZFODNDMDY4MDAwQUZCRjAwMTA3MgorOjEwMzM1MDAwMzRDNzAxMDA5NEUyMDAwODMwNDQwMEZGMzg4MzAwODI0MworOjEwMzM2MDAwMzg4MjAwODQyQzYzMDAwMTJDNDIwMDAxMDA2MjE4MjU4MQorOjEwMzM3MDAwMTA2MDAwMkQyNDAyMDA4MzkzODIwMDE5NTA0MDAwM0IwRQorOjEwMzM4MDAwOEZCRjAwMTAzQzAyMDgwMDkwNDI1NkNDOENDNDAxMDA1NAorOjEwMzM5MDAwM0MwNjA4MDA5NEM2NTZDNjMwNDUwMDNGMzhBMzAwMzJBQworOjEwMzNBMDAwMzhBMjAwM0YyQzYzMDAwMTJDNDIwMDAxMDA2MjE4MjU2NgorOjEwMzNCMDAwQUY4NDAwMUNBRjg2MDAxNEEzODAwMDE5MTQ2MDAwMDdCRQorOjEwMzNDMDAwMDBFMDIwMjEyNDAyMDAyMDE0QTIwMDEyMDAwMDAwMDBDRQorOjEwMzNEMDAwMzQwMkZGRkYxNEMyMDAwRjAwMDAwMDAwMjQwMjAwMjA4RQorOjEwMzNFMDAwMTRBMjAwMDUwMEUwMjgyMThDRTMwMDE0MjQwMkZGRkY1MgorOjEwMzNGMDAwNTA2MjAwMEI4RkJGMDAxMDNDMDQwODAwMjQ4NDU2QzBBQworOjEwMzQwMDAwMDAwMDMwMjEwRTAwMDcwNjI0MDcwMDAxMEEwMDBDRDYzOAorOjEwMzQxMDAwOEZCRjAwMTAwRTAwMDc3NzAwMDAwMDAwOEZCRjAwMTA2NAorOjEwMzQyMDAwMEEwMDA5MzkyN0JEMDAxODE0ODIwMDA0MjQwMjAwODUwRgorOjEwMzQzMDAwOENDNTAxMDQwQTAwMENFMTAwMDAyMDIxMTQ4MjAwMDY2MgorOjEwMzQ0MDAwMjQ4MkZGODA4Q0M1MDEwNDI0MDQ0MDAwOEZCRjAwMTAzQgorOjEwMzQ1MDAwMEEwMDAxNjcyN0JEMDAxODMwNDIwMEZGMkM0MjAwMDIxRAorOjEwMzQ2MDAwMTA0MDAwMDQyNDAyMDAyMjhGQkYwMDEwMEEwMDBCMjcyNgorOjEwMzQ3MDAwMjdCRDAwMTgxNDgyMDAwNDhGODIwMDI0OEZCRjAwMTAyMworOjEwMzQ4MDAwMEEwMDBDODYyN0JEMDAxODhDNDIwMDBDMTA0MDAwMUU1QworOjEwMzQ5MDAwMDBFMDI4MjE5MEUzMDAwOTI0MDIwMDE4MTQ2MjAwMDNEMAorOjEwMzRBMDAwMjQwMjAwMTYwQTAwMENGQzI0MDMwMDA4MTQ2MjAwMDcyMgorOjEwMzRCMDAwMjQwMjAwMTcyNDAzMDAxMjNDMDI4MDA4MzQ0MjAwODBEQQorOjEwMzRDMDAwQTA0MzAwMDkwQTAwMEQwOTk0QTcwMDA4NTQ2MjAwMDdGMAorOjEwMzREMDAwOTRBNzAwMDg4RjgyRkY5NDI0MDRGRkZFOTA0MzAwMDUwOAorOjEwMzRFMDAwMDA2NDE4MjRBMDQzMDAwNTk0QTcwMDA4OTBBNjAwMUJDMAorOjEwMzRGMDAwOENBNDAwMDA5NEE1MDAwNjhGQkYwMDEwMDAwNzNDMDBCQworOjEwMzUwMDAwMEEwMDA4REMyN0JEMDAxODhGQkYwMDEwMDNFMDAwMDg4OAorOjEwMzUxMDAwMjdCRDAwMTg4Rjg1MDAyNDNDMDQ4MDAwOTRBMjAwMkE1NworOjEwMzUyMDAwOENBMzAwMzQwMDAyMzBDMDI0MDJGRkYwMDBDMjEwMjQzQgorOjEwMzUzMDAwMDA2MjE4MjFBQzgzMDAzQzhDQTIwMDMwM0MwMzgwMDA2OAorOjEwMzU0MDAwQUM4MjAwMzgzQzAyMDA1MDM0NDIwMDEwQUM2MjAwMzBDMworOjEwMzU1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEM2MjAwMDA3RAorOjEwMzU2MDAwMzA0MjAwMjAxMDQwRkZGRDMwQzIwMDA4MTA0MDAwMDYyRAorOjEwMzU3MDAwM0MwMjgwMDA4QzYyMDQwOEFDQTIwMDIwOEM2MjA0MEMyNworOjEwMzU4MDAwMEEwMDBEMzRBQ0EyMDAyNDhDNDMwNDAwQUNBMzAwMjAzQworOjEwMzU5MDAwOEM0MjA0MDRBQ0EyMDAyNDNDMDMwMDIwM0MwMjgwMDBDNgorOjEwMzVBMDAwQUM0MzAwMzAzQzA0ODAwMDhDODIwMDMwMDA0MzEwMjQ4NworOjEwMzVCMDAwMTQ0MEZGRkQ4Rjg2MDAyNDNDMDIwMDQwQUM4MjAwMzBBNgorOjEwMzVDMDAwOTRDMzAwMkE5NEMyMDAyODk0QzQwMDJDOTRDNTAwMkVGMQorOjEwMzVEMDAwMjQ2MzAwMDEwMDQ0MTAyMTMwNjRGRkZGQTRDMjAwMjhDRQorOjEwMzVFMDAwMTQ4NTAwMDJBNEMzMDAyQUE0QzAwMDJBMDNFMDAwMDgzNgorOjEwMzVGMDAwMDAwMDAwMDA4Rjg0MDAyNDI3QkRGRkU4M0MwNTgwMDQwNAorOjEwMzYwMDAwMjQ4NDAwMTBBRkJGMDAxMDBFMDAwRTQ3MjQwNjAwMEFFRAorOjEwMzYxMDAwOEY4NDAwMjQ5NDgyMDAxMjk0ODMwMDJFMzA0MjAwMEY4NQorOjEwMzYyMDAwMjQ0MjAwMDMwMDQzMTgwNDI0MDI3RkZGMDA0MzEwMkJCMAorOjEwMzYzMDAwMTA0MDAwMDJBQzgzMDAwMDAwMDAwMDBEMEUwMDBEMTNDRQorOjEwMzY0MDAwMDAwMDAwMDA4RjgzMDAyNDhGQkYwMDEwMjdCRDAwMThFQQorOjEwMzY1MDAwOTQ2MjAwMTQ5NDYzMDAxQTMwNDIwMDBGMDAwMjE1MDBCNworOjEwMzY2MDAwMDA2MjE4MjUzQzAyODAwMDAzRTAwMDA4QUM0MzAwQTA4MworOjEwMzY3MDAwOEY4MzAwMjQzQzAyODAwNDk0NDQwMDA2OTQ2MjAwMUE2NAorOjEwMzY4MDAwOEM2NTAwMDBBNDY0MDAxNjAwNDQxMDIzMzA0MkZGRkY0NAorOjEwMzY5MDAwMDA0NTEwMkIwM0UwMDAwODM4NDIwMDAxOEY4NDAwMjQwRAorOjEwMzZBMDAwM0MwNzgwMDQ5NDg2MDAxQThDODUwMDAwOTRFMjAwMDY5MgorOjEwMzZCMDAwQTQ4MjAwMTY5NEUzMDAwNjAwQzMxMDIzMzA0MkZGRkZFQgorOjEwMzZDMDAwMDA0NTEwMkIzODQyMDAwMTE0NDBGRkY4QTQ4MzAwMTY3NworOjEwMzZEMDAwMDNFMDAwMDgwMDAwMDAwMDhGODQwMDI0M0MwMjgwMDQwNgorOjEwMzZFMDAwOTQ0MjAwMDY5NDgzMDAxQThDODUwMDAwQTQ4MjAwMTY4MAorOjEwMzZGMDAwMDA2MjEwMjMzMDQyRkZGRjAwNDUxMDJCMzg0MjAwMDFDQQorOjEwMzcwMDAwNTA0MDAwMEQ4Rjg1MDAyNDAwNjAzMDIxM0MwNzgwMDQ2QworOjEwMzcxMDAwOTRFMjAwMDZBNDgyMDAxNjk0RTMwMDA2MDBDMzEwMjM3RQorOjEwMzcyMDAwMzA0MkZGRkYwMDQ1MTAyQjM4NDIwMDAxMTQ0MEZGRjhFMworOjEwMzczMDAwQTQ4MzAwMTY4Rjg1MDAyNDNDMDM4MDAwMzQ2MjA0MDBCQgorOjEwMzc0MDAwOENBNDAwMjBBRjgyMDAyMEFDNjQwMDM4OENBMjAwMjQzRQorOjEwMzc1MDAwQUM2MjAwM0MzQzAyMDAwNUFDNjIwMDMwMDNFMDAwMDhCMworOjEwMzc2MDAwQUNBMDAwMDQ4Rjg0MDAyNDNDMDMwMDA2OEM4MjAwMDQ3QgorOjEwMzc3MDAwMDAwMjExNDAwMDQzMTAyNTNDMDM4MDAwQUM2MjAwMzA4MQorOjEwMzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEM2MjAwMDA0QgorOjEwMzc5MDAwMzA0MjAwMTAxMDQwRkZGRDM0NjIwNDAwQUM4MDAwMDQ5MQorOjEwMzdBMDAwMDNFMDAwMDhBRjgyMDAyMDhGODYwMDI0MjdCREZGRTBFMQorOjEwMzdCMDAwQUZCMTAwMTRBRkIwMDAxMEFGQkYwMDE4OENDMzAwMDQ0RAorOjEwMzdDMDAwOENDNTAwMjQ4RjgyMDAyMDMwOTAwMEZGOTRDNDAwMUEyMgorOjEwMzdEMDAwMjQ2MzAwMDEyNDQyMDAyMDI0ODQwMDAxMjRBNzAwMjA0NworOjEwMzdFMDAwQUNDMzAwMDRBRjgyMDAyMEE0QzQwMDFBQUNDNzAwMjRGQworOjEwMzdGMDAwMDRBMTAwMDYwMDAwODgyMTA0RTIwMDA1OTRDMjAwMUExQQorOjEwMzgwMDAwOENDMjAwMjAyNDQyMDAwMUFDQzIwMDIwOTRDMjAwMUFFNQorOjEwMzgxMDAwOTRDMzAwMjgyRTA0MDAwMTAwNDMxMDI2MkM0MjAwMDEwRQorOjEwMzgyMDAwMDA0NDEwMjQ1MDQwMDAwNTk0QzIwMDFBMjQwMjAwMDFGNAorOjEwMzgzMDAwQUNDMjAwMDg5NEMyMDAxQTk0QzMwMDI4MDAxMDIwMkJDOAorOjEwMzg0MDAwMDA0MzEwMjYyQzQyMDAwMTAwNDQxMDI1MTQ0MDAwMDdCQworOjEwMzg1MDAwMDAwMDAwMDA4Q0MyMDAwODE0NDAwMDA0MjQwMjAwMTA4NAorOjEwMzg2MDAwOENDMzAwMDQxNDYyMDAwRjhGODUwMDI0MEUwMDBEQTc4NgorOjEwMzg3MDAwMjQxMTAwMDE4RjgyMDAyNDk0NDMwMDI4OTQ0MjAwMUFFRQorOjEwMzg4MDAwMTQ0MzAwMDMwMDAwMDAwMDBFMDAwRDEzMDAwMDAwMDBCMAorOjEwMzg5MDAwMTYwMDAwMDQ4Rjg1MDAyNDBFMDAwRDg0MDAwMDAwMDAzNworOjEwMzhBMDAwOEY4NTAwMjQ5NEEyMDAxRTk0QTQwMDFDMjQ0MjAwMDFEMQorOjEwMzhCMDAwMzA0M0ZGRkYxNDY0MDAwMkE0QTIwMDFFQTRBMDAwMUU1NworOjEwMzhDMDAwMTIwMDAwMEEzQzAyODAwNDk0QTIwMDE0OTRBMzAwMUE3RgorOjEwMzhEMDAwMzA0MjAwMEYwMDAyMTUwMDAwNjIxODI1M0MwMjgwMDBGMworOjEwMzhFMDAwQUM0MzAwQTAwQTAwMEUxRUFDQTAwMDA4OTQ0MjAwMDZFMworOjEwMzhGMDAwOTRBMzAwMUE4Q0E0MDAwMEE0QTIwMDE2MDA2MjEwMjM1NgorOjEwMzkwMDAwMzA0MkZGRkYwMDQ0MTAyQjM4NDIwMDAxMTA0MDAwMERGMAorOjEwMzkxMDAwMDIyMDEwMjEwMDYwMzAyMTNDMDc4MDA0OTRFMjAwMDY2MAorOjEwMzkyMDAwQTRBMjAwMTY5NEUzMDAwNjAwQzMxMDIzMzA0MkZGRkY1OAorOjEwMzkzMDAwMDA0NDEwMkIzODQyMDAwMTE0NDBGRkY4QTRBMzAwMTZFNQorOjEwMzk0MDAwMDIyMDEwMjE4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTAxQgorOjEwMzk1MDAwMDNFMDAwMDgyN0JEMDAyMDAzRTAwMDA4MDAwMDAwMDA4RAorOjEwMzk2MDAwOEY4MjAwMkMzQzAzMDAwNjAwMDIxMTQwMDA0MzEwMjUwQQorOjEwMzk3MDAwM0MwMzgwMDBBQzYyMDAzMDAwMDAwMDAwMDAwMDAwMDA0QQorOjEwMzk4MDAwMDAwMDAwMDA4QzYyMDAwMDMwNDIwMDEwMTA0MEZGRkQ3QgorOjEwMzk5MDAwMzQ2MjA0MDBBRjgyMDAyODAzRTAwMDA4QUY4MDAwMkNFRQorOjEwMzlBMDAwMDNFMDAwMDgwMDAwMTAyMTAzRTAwMDA4MDAwMDAwMDAxMAorOjEwMzlCMDAwMzA4NEZGRkYzMEE1RkZGRjAwMDAxODIxMTA4MDAwMDdCMgorOjEwMzlDMDAwMDAwMDAwMDAzMDgyMDAwMTEwNDAwMDAyMDAwNDIwNDI4QworOjEwMzlEMDAwMDA2NTE4MjEwQTAwMEUzRDAwMDUyODQwMDNFMDAwMDg5QworOjEwMzlFMDAwMDA2MDEwMjExMEMwMDAwNjI0QzZGRkZGOENBMjAwMDA1QQorOjEwMzlGMDAwMjRBNTAwMDRBQzgyMDAwMDBBMDAwRTQ3MjQ4NDAwMDRDMQorOjEwM0EwMDAwMDNFMDAwMDgwMDAwMDAwMDEwQTAwMDA4MjRBM0ZGRkY0RQorOjEwM0ExMDAwQUM4NjAwMDAwMDAwMDAwMDAwMDAwMDAwMjQwMkZGRkY1MAorOjEwM0EyMDAwMjQ2M0ZGRkYxNDYyRkZGQTI0ODQwMDA0MDNFMDAwMDgwQgorOjEwM0EzMDAwMDAwMDAwMDAzQzAyODAwODM0NDIwMDgwMjQwMzAwMDFBMgorOjEwM0E0MDAwQUM0MzAwMENBNDQzMDAxMEE0NDMwMDEyQTQ0MzAwMTQ5MAorOjEwM0E1MDAwMDNFMDAwMDhBNDQzMDAxNjhGODIwMDI0MjdCREZGRDg4RQorOjEwM0E2MDAwQUZCMzAwMUNBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTA3QworOjEwM0E3MDAwQUZCRjAwMjA4QzQ3MDAwQzI0ODIwMDgwMjQwOUZGODAwNworOjEwM0E4MDAwM0MwODgwMEUzMDQzMDA3RjAwODA4MDIxM0MwQTgwMDA4QgorOjEwM0E5MDAwMDA0OTIwMjQwMDY4MTgyMTMwQjEwMEZGMzBEMjAwRkYxNworOjEwM0FBMDAwMTBFMDAwMjkwMDAwOTgyMTI2MDIwMTAwQUQ0NDAwMkNGRQorOjEwM0FCMDAwMDA0OTI4MjQzMDQyMDA3RjAwNDgyMDIxOTA2MjAwMDAwNQorOjEwM0FDMDAwMjQwMzAwNTAzMDQyMDBGRjE0NDMwMDA0MDAwMDAwMDBCMworOjEwM0FEMDAwQUQ0NTAwMkM5NDgyMDBFQTMwNTNGRkZGMEUwMDBEODRBOAorOjEwM0FFMDAwMDAwMDAwMDA4RjgyMDAyNDhGODMwMDIwMDAxMTJDMDAzMgorOjEwM0FGMDAwOTQ0MjAwMUUwMDEyMjQwMDM0ODQwMDAxMDBBMjI4MjVGNAorOjEwM0IwMDAwM0MwMjQwMDAwMEEyMjgyNUFDNzAwMDAwOEZCRjAwMjBCRQorOjEwM0IxMDAwQUM2MDAwMDQ4RkIyMDAxOEFDNzMwMDA4OEZCMTAwMTRDMQorOjEwM0IyMDAwQUM2MDAwMEM4RkIzMDAxQ0FDNjQwMDEwOEZCMDAwMTBCMAorOjEwM0IzMDAwQUM2MDAwMTQyNDA0MDAwMUFDNjAwMDE4MjdCRDAwMjgwQworOjEwM0I0MDAwMEEwMDBEQjhBQzY1MDAxQzhGQkYwMDIwOEZCMzAwMUNBRAorOjEwM0I1MDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDg3RQorOjEwM0I2MDAwMjdCRDAwMjgzQzA2ODAwMDM0QzIwMTAwOTA0MzAwMEZBRQorOjEwM0I3MDAwMjQwMjAwMTAxMDYyMDAwRTI4NjUwMDExMTBBMDAwMDczQQorOjEwM0I4MDAwMjQwMjAwMTIyNDAyMDAwODI0MDUwMDNBMTA2MjAwMDZGNAorOjEwM0I5MDAwMDAwMDMwMjEwM0UwMDAwODAwMDAwMDAwMjQwNTAwMzU4QgorOjEwM0JBMDAwMTQ2MkZGRkMwMDAwMzAyMTBBMDAwRTY0MDAwMDAwMDBENworOjEwM0JCMDAwOENDMjAwNzQ4RjgzRkY5NDI0NDIwRkEwMDNFMDAwMDg5RQorOjEwM0JDMDAwQUM2MjAwMEMyN0JERkZFOEFGQkYwMDEwMEUwMDAzNDIzRgorOjEwM0JEMDAwMjQwNTAwMDEzQzA0ODAwODhGQkYwMDEwMjQwMjAwMDE2RQorOjEwM0JFMDAwMzQ4MzAwODBBNDYyMDAxMjI3QkQwMDE4MjQwMjAwMDE2MworOjEwM0JGMDAwMDNFMDAwMDhBMDgwMDAxQTI3QkRGRkUwQUZCMjAwMTg2NAorOjEwM0MwMDAwQUZCMTAwMTRBRkIwMDAxMEFGQkYwMDFDMzBCMkZGRkY2NworOjEwM0MxMDAwMEUwMDAzMzIwMDgwODgyMTNDMDI4MDA4MzQ1MDAwODA2RQorOjEwM0MyMDAwOTIwMjAwMDkyNDAzMDAwNDMwNDIwMEZGMTQ0MzAwMENGOAorOjEwM0MzMDAwM0MwMjgwMDgxMjQwMDAwODI0MDIwMDBBMEUwMDBFNUJCRAorOjEwM0M0MDAwMDAwMDAwMDA5MjAyMDAwNTI0MDNGRkZFMDA0MzEwMjQ0MAorOjEwM0M1MDAwQTIwMjAwMDUyNDAyMDAxMkEyMDIwMDA5M0MwMjgwMDgxMAorOjEwM0M2MDAwMzQ0MjAwODAwMjIwMjAyMTBFMDAwMzNEQTA0MDAwMjdBNgorOjEwM0M3MDAwMTY0MDAwMDMwMjIwMjAyMTBFMDAwRUJGMDAwMDAwMDBBRAorOjEwM0M4MDAwMDIyMDIwMjEzMjQ2MDBGRjhGQkYwMDFDOEZCMjAwMTg5NworOjEwM0M5MDAwOEZCMTAwMTQ4RkIwMDAxMDI0MDUwMDM4MEEwMDBFNjRBNAorOjEwM0NBMDAwMjdCRDAwMjAyN0JERkZFMEFGQkYwMDFDQUZCMjAwMTg0QQorOjEwM0NCMDAwQUZCMTAwMTRBRkIwMDAxMDBFMDAwMzMyMDA4MDgwMjFCRAorOjEwM0NDMDAwMEUwMDBFNUIwMDAwMDAwMDNDMDI4MDA4MzQ0NTAwODBCRQorOjEwM0NEMDAwOTBBMjAwMDkyNDEyMDAxODMwNTEwMEZGMTIzMjAwMDM5NAorOjEwM0NFMDAwMDIwMDIwMjEyNDAyMDAxMkEwQTIwMDA5OTBBMjAwMDVENworOjEwM0NGMDAwMjQwM0ZGRkUwMDQzMTAyNDBFMDAwMzNEQTBBMjAwMDU5NAorOjEwM0QwMDAwMDIwMDIwMjEyNDA1MDAyMDE2MzIwMDA3MDAwMDMwMjE4NworOjEwM0QxMDAwOEZCRjAwMUM4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAzRAorOjEwM0QyMDAwMEEwMDAzNDIyN0JEMDAyMDhGQkYwMDFDOEZCMjAwMTg3RAorOjEwM0QzMDAwOEZCMTAwMTQ4RkIwMDAxMDI0MDUwMDM5MEEwMDBFNjQwMgorOjEwM0Q0MDAwMjdCRDAwMjAyN0JERkZFODNDMDI4MDAwQUZCMDAwMTA3NworOjEwM0Q1MDAwQUZCRjAwMTQzNDQyMDEwMDk0NDIwMDBDMjQwNTAwMzYyOQorOjEwM0Q2MDAwMDA4MDgwMjExNDQwMDAxMjMwNDYwMEZGMEUwMDAzMzIxNAorOjEwM0Q3MDAwMDAwMDAwMDAzQzAyODAwODM0NDIwMDgwMjQwMzAwMTI0RQorOjEwM0Q4MDAwQTA0MzAwMDk5MDQzMDAwNTM0NjMwMDEwMEUwMDBFNUI1MQorOjEwM0Q5MDAwQTA0MzAwMDUwRTAwMDMzRDAyMDAyMDIxMDIwMDIwMjE2NworOjEwM0RBMDAwMEUwMDAzNDIyNDA1MDAyMDBBMDAwRjNDMDAwMDAwMDAyMgorOjEwM0RCMDAwMEUwMDBFNjQwMDAwMDAwMDBFMDAwMzMyMDIwMDIwMjFGRAorOjEwM0RDMDAwM0MwMjgwMDg5MDQzMDAxQjI0MDVGRjlGMDIwMDIwMjEzNQorOjEwM0REMDAwMDA2NTE4MjQ4RkJGMDAxNDhGQjAwMDEwQTA0MzAwMUI5MworOjEwM0RFMDAwMEEwMDAzM0QyN0JEMDAxODI3QkRGRkUwQUZCRjAwMTg0NAorOjEwM0RGMDAwQUZCMTAwMTRBRkIwMDAxMDMwQjEwMEZGMEUwMDAzMzJCRAorOjEwM0UwMDAwMDA4MDgwMjEzQzAyODAwODI0MDMwMDEyMzQ0MjAwODA5QworOjEwM0UxMDAwMEUwMDBFNUJBMDQzMDAwOTBFMDAwMzNEMDIwMDIwMjFBRQorOjEwM0UyMDAwMDIwMDIwMjEwMjIwMzAyMThGQkYwMDE4OEZCMTAwMTQyMgorOjEwM0UzMDAwOEZCMDAwMTAyNDA1MDAzNTBBMDAwRTY0MjdCRDAwMjA1NQorOjEwM0U0MDAwM0MwNDgwMDg5MDgzMDAwRTkwODIwMDBBMTQ0MzAwMEIwQgorOjEwM0U1MDAwMDAwMDI4MjE4RjgyRkY5NDI0MDMwMDUwMjQwNTAwMDFENAorOjEwM0U2MDAwOTA0MjAwMDAzMDQyMDBGRjE0NDMwMDA0MDAwMDAwMDBCNAorOjEwM0U3MDAwOTA4MjAwMEUyNDQyMDAwMUEwODIwMDBFMDNFMDAwMDhBMAorOjEwM0U4MDAwMDBBMDEwMjEzQzAzODAwMDhDNjIwMUY4MDQ0MEZGRkU3QQorOjEwM0U5MDAwMjQwMjAwMDJBQzY0MDFDMEEwNjIwMUM0M0MwMjEwMDAxNAorOjEwM0VBMDAwMDNFMDAwMDhBQzYyMDFGODI3QkRGRkUwQUZCMjAwMThFNAorOjEwM0VCMDAwM0MxMjgwMDhBRkIxMDAxNEFGQkYwMDFDQUZCMDAwMTBCRgorOjEwM0VDMDAwMzY1MTAwODA5MjIyMDAwOTI0MDMwMDBBMzA0MjAwRkY4QworOjEwM0VEMDAwMTQ0MzAwM0UwMDAwMDAwMDhFNDMwMDA0OEUyMjAwMzg5MAorOjEwM0VFMDAwNTA2MjAwODA4RkJGMDAxQzkyMjIwMDAwMjQwMzAwNTAwQgorOjEwM0VGMDAwMzA0MjAwRkYxNDQzMDAyNTNDMDI4MDAwOEM0MjAxNDAwOAorOjEwM0YwMDAwOEU0MzAwMDQzNjQyMDEwMDAyMjAyODIxQUM0MzAwMUNFRAorOjEwM0YxMDAwOTYyMjAwNUM4RTIzMDAzODMwNDJGRkZGMDAwMjEwNDBFMgorOjEwM0YyMDAwMDA2MjE4MjFBRTIzMDAxQzhFNDMwMDA0OEUyNDAwMzg0QQorOjEwM0YzMDAwOTYyMjAwNUMwMDY0MTgyMzMwNDJGRkZGMDAwMzE4NDMwMAorOjEwM0Y0MDAwMDAwMjEwNDAwMDQzMTAyQTEwNDAwMDA2MDAwMDAwMDA0QworOjEwM0Y1MDAwOEU0MjAwMDQ4RTIzMDAzODAwNDMxMDIzMEEwMDBGQUE2QgorOjEwM0Y2MDAwMDAwMjIwNDM5NjIyMDA1QzMwNDJGRkZGMDAwMjIwNDAwNgorOjEwM0Y3MDAwM0MwMjgwMDgzNDQzMDEwMDM0NDIwMDgwQUNBNDAwMkM5MQorOjEwM0Y4MDAwQTA0MDAwMjQyNDAyMDAwMUEwNjIwMDBDMEUwMDBGNUU3RAorOjEwM0Y5MDAwMDAwMDAwMDAxMDQwMDA1MzhGQkYwMDFDM0MwMjgwMDA1NgorOjEwM0ZBMDAwOEM0NDAxNDAzQzAzODAwMDhDNjIwMUY4MDQ0MEZGRkUxOQorOjEwM0ZCMDAwMjQwMjAwMDJBQzY0MDFDMEEwNjIwMUM0M0MwMjEwMDBGMworOjEwM0ZDMDAwQUM2MjAxRjgwQTAwMTAwNzhGQkYwMDFDOTIyMjAwMDlBMgorOjEwM0ZEMDAwMjQwMzAwMTAzMDQyMDBGRjE0NDMwMDA0M0MwMjgwMDAyMAorOjEwM0ZFMDAwOEM0NDAxNDAwQTAwMEZFRTAwMDAyODIxOTIyMjAwMDlCMworOjEwM0ZGMDAwMjQwMzAwMTYzMDQyMDBGRjE0NDMwMDA2MjQwMjAwMTQ3QworOjEwNDAwMDAwQTIyMjAwMDkzQzAyODAwMDhDNDQwMTQwMEEwMDEwMDFGOQorOjEwNDAxMDAwOEZCRjAwMUM4RTIyMDAzODhFMjMwMDNDMDA0MzEwMjNFQgorOjEwNDAyMDAwMDQ0MTAwMzA4RkJGMDAxQzkyMjIwMDI3MjQ0MjAwMDE2RgorOjEwNDAzMDAwQTIyMjAwMjc5MjIyMDAyNzJDNDIwMDA0MTQ0MDAwMTZERQorOjEwNDA0MDAwM0MxMDgwMDA5MjIyMDAwOTI0MDMwMDA0MzA0MjAwRkY0QgorOjEwNDA1MDAwMTQ0MzAwMDkzQzAyODAwMDhDNDQwMTQwOEZCRjAwMUNDNworOjEwNDA2MDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMjQwNTAwOTM5OAorOjEwNDA3MDAwMEEwMDBFQ0MyN0JEMDAyMDhDNDQwMTQwMjQwNTAwOTM4QgorOjEwNDA4MDAwOEZCRjAwMUM4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTBDQQorOjEwNDA5MDAwMEEwMDBGNDgyN0JEMDAyMDhFMDQwMTQwMEUwMDAzMzJBNQorOjEwNDBBMDAwMDAwMDAwMDA4RTQyMDAwNDI0NDJGRkZGQUU0MjAwMDRFNAorOjEwNDBCMDAwOEUyMjAwM0MyNDQyRkZGRkFFMjIwMDNDMEUwMDAzM0Q1NgorOjEwNDBDMDAwOEUwNDAxNDA4RTA0MDE0MDhGQkYwMDFDOEZCMjAwMTg4NworOjEwNDBEMDAwOEZCMTAwMTQ4RkIwMDAxMDI0MDUwMDA0MEEwMDAzNDJDMQorOjEwNDBFMDAwMjdCRDAwMjA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTBEMAorOjEwNDBGMDAwMDNFMDAwMDgyN0JEMDAyMDNDMDY4MDAwOENDMjAxODgzOAorOjEwNDEwMDAwM0MwMzgwMDgzNDY1MDA4MDkwNjMwMDBFMDAwMjE0MDJCNgorOjEwNDExMDAwMzA0NDAwRkYzMDYzMDBGRjE0NjQwMDBFM0MwMjgwMDg0RQorOjEwNDEyMDAwOTBBMjAwMjYzMDQyMDBGRjEwNDQwMDA5OEY4MkZGOTRDNQorOjEwNDEzMDAwQTBBNDAwMjYyNDAzMDA1MDkwNDIwMDAwMzA0MjAwRkY1QgorOjEwNDE0MDAwMTQ0MzAwMDYwMDAwMDAwMDBBMDAwNUExOENDNDAxODA5MQorOjEwNDE1MDAwM0MwMjgwMDgzNDQyMDA4MEEwNDQwMDI2MDNFMDAwMDhBRQorOjEwNDE2MDAwMDAwMDAwMDAyN0JERkZFMDMwRTcwMEZGQUZCMjAwMThGRAorOjEwNDE3MDAwQUZCRjAwMUNBRkIxMDAxNEFGQjAwMDEwMDA4MDkwMjFBMQorOjEwNDE4MDAwMTRFMDAwMDYzMEM2MDBGRjAwMDAwMDAwMDAwMDAwMEQzMworOjEwNDE5MDAwMDAwMDAwMDAwQTAwMTA2MDI0MDAwMTE2M0MwMzgwMDhBMworOjEwNDFBMDAwOTA2MjAwMEUzMDQyMDBGRjE0NDYwMDIzMzQ2MjAwODAwQgorOjEwNDFCMDAwOTA0MjAwMjYzMDQyMDBGRjE0NDYwMDFGMDAwMDAwMDAxRAorOjEwNDFDMDAwOTA2MjAwMEYzMDQyMDBGRjE0NDYwMDFCMDAwMDAwMDAwOAorOjEwNDFEMDAwOTA2MjAwMEEzMDQyMDBGRjE0NDYwMDAzOEY5MEZGOTQ2MworOjEwNDFFMDAwMDAwMDAwMEQ4RjkwRkY5NDhGODJGRjk4M0MxMTgwMDA5QgorOjEwNDFGMDAwQUUwNTAwM0NBQzQ1MDAwMEEwNjYwMDBBMEUwMDAzMzI4QworOjEwNDIwMDAwOEUyNDAxMDBBMjAwMDAyNDBFMDAwMzNEOEUyNDAxMDAzNAorOjEwNDIxMDAwM0MwMzgwMDA4QzYyMDFGODA0NDBGRkZFMjQwMjAwMDI4RgorOjEwNDIyMDAwQUM3MjAxQzBBMDYyMDFDNDNDMDIxMDAwQUM2MjAxRjg5MworOjEwNDIzMDAwMEEwMDEwNjE4RkJGMDAxQzAwMDAwMDAwMDAwMDAwMEQ4QworOjEwNDI0MDAwMDAwMDAwMDAyNDAwMDEzRjhGQkYwMDFDOEZCMjAwMTg0NworOjEwNDI1MDAwOEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjBDQworOjEwNDI2MDAwOEY4M0ZGOTQzQzAyODAwMDhDNDQwMTAwMzQ0MjAxMDBBMworOjEwNDI3MDAwOEM2NTAwM0M5MDQ2MDAxQjBBMDAxMDI3MjQwNzAwMDFCMworOjEwNDI4MDAwM0MwMjgwMDg5MDQzMDAwRTkwNDIwMDBBMDA0MzEwMjYzMgorOjEwNDI5MDAwMzA0MjAwRkYwM0UwMDAwODAwMDIxMDJCMjdCREZGRTBDMgorOjEwNDJBMDAwM0MwMjgwMDhBRkIxMDAxNEFGQjAwMDEwQUZCRjAwMThERgorOjEwNDJCMDAwMzQ1MDAwODA5MjAyMDAwNTI0MDMwMDMwMzA0MjAwMzA2OAorOjEwNDJDMDAwMTQ0MzAwODUwMDgwODgyMThGODIwMDI0OEM0MjAwMENEQQorOjEwNDJEMDAwMTA0MDAwODI4RkJGMDAxODBFMDAwRDg0MDAwMDAwMDAwNworOjEwNDJFMDAwOEY4NjAwMjBBQ0QxMDAwMDkyMDIwMDA4OTIwMzAwMDlFMgorOjEwNDJGMDAwMzA0MjAwRkYwMDAyMTIwMDMwNjMwMEZGMDA0MzEwMjUyRgorOjEwNDMwMDAwQUNDMjAwMDQ5MjAyMDA0RDAwMDIxNjAwMDAwMjE2MDMyNworOjEwNDMxMDAwMDQ0MTAwMDUwMDAwMDAwMDNDMDMwODAwOEM2MzAwNDhENQorOjEwNDMyMDAwMEEwMDEwOUYzQzEwODAwODkyMDIwMDA4MzA0MjAwNDBCMgorOjEwNDMzMDAwMTQ0MDAwMDMwMDAwMTgyMTkyMDIwMDI3MzA0MzAwRkZDMAorOjEwNDM0MDAwM0MxMDgwMDgzNjExMDA4MDkyMjIwMDREMDAwMzFFMDBCMAorOjEwNDM1MDAwMzA0MjAwRkYwMDAyMTQwMDAwNjIxODI1QUNDMzAwMDhDMAorOjEwNDM2MDAwOEUyNDAwMzA4RjgyMDAyNEFDQzQwMDBDOEUyNTAwMzREMworOjEwNDM3MDAwOTQ0MzAwMUUzQzAyQzAwQkFDQzUwMDEwMDA2MjE4MjUxRgorOjEwNDM4MDAwOEUyMjAwMzgwMDAwMjAyMUFDQzIwMDE0OEUyMjAwM0M5NgorOjEwNDM5MDAwQUNDMjAwMTgwRTAwMERCOEFDQzMwMDFDOEUwMjAwMDRBNQorOjEwNDNBMDAwOEY4NDAwMjAzQzA1ODAwMEFDODIwMDAwOEUyMjAwMjAxQgorOjEwNDNCMDAwQUM4MjAwMDQ4RTIyMDAxQ0FDODIwMDA4OEUyMjAwNThDMQorOjEwNDNDMDAwOENBMzAwNzQwMDQzMTAyMUFDODIwMDBDOEUyMjAwMkNDMAorOjEwNDNEMDAwQUM4MjAwMTA4RTIyMDA0MDhFMjMwMDQ0MDAwMjE0MDBBNAorOjEwNDNFMDAwMDA0MzEwMjVBQzgyMDAxNDkyMjIwMDREMjQwMzAwODA2QgorOjEwNDNGMDAwMzA0MjAwRkYxNDQzMDAwNDAwMDAwMDAwQUM4MDAwMThBRAorOjEwNDQwMDAwMEEwMDEwRTM4RjgyMDAyNDhFMjMwMDBDMjQwMjAwMDE5NgorOjEwNDQxMDAwMTA2MjAwMEUyNDAyRkZGRjkyMjIwMDA4MzA0MjAwNDA4QQorOjEwNDQyMDAwMTQ0MDAwMEEyNDAyRkZGRjhFMjMwMDBDOENBMjAwNzRBQgorOjEwNDQzMDAwMDA2MjE4MjMzQzAyMDgwMDAwNjIxMDI0MTQ0MDAwMDJBRAorOjEwNDQ0MDAwMDAwMDI4MjEwMDYwMjgyMTAwMDUxMDQzQUM4MjAwMThEQworOjEwNDQ1MDAwOEY4MjAwMjQwMDAwMjAyMTk0NDMwMDFFM0MwMkMwMENFNworOjEwNDQ2MDAwMDA2MjE4MjU4RjgyMDAyMDBFMDAwREI4QUM0MzAwMUM5RQorOjEwNDQ3MDAwM0MwMzgwMDgzNDYyMDEwMDhDNDIwMDAwOEY4NTAwMjBEQworOjEwNDQ4MDAwMzQ2MzAwODA4RkJGMDAxOEFDQTIwMDAwQUNBMDAwMDQxMQorOjEwNDQ5MDAwOEM2NDAwNDg4RjgyMDAyNDhGQjEwMDE0QUNBNDAwMDgwMworOjEwNDRBMDAwQUNBMDAwMENBQ0EwMDAxMDkwNjMwMDA1OTQ0NjAwMUU2OAorOjEwNDRCMDAwM0MwMjQwMEQwMDAzMUUwMDAwQzIzMDI1QUNBMzAwMTRENgorOjEwNDRDMDAwOEZCMDAwMTBBQ0EwMDAxODI0MDQwMDAxQUNBNjAwMUNBMgorOjEwNDREMDAwMEEwMDBEQjgyN0JEMDAyMDhGQkYwMDE4OEZCMTAwMTQ0RgorOjEwNDRFMDAwOEZCMDAwMTAwM0UwMDAwODI3QkQwMDIwM0MwMjgwMDBEMAorOjEwNDRGMDAwOTQ0MzAwN0MzQzAyODAwODM0NDYwMTAwMzA4NDAwRkY3NQorOjEwNDUwMDAwMzA2NUZGRkYyNDAyMDAwNTI0QTM0NjUwQTBDNDAwMEMyMAorOjEwNDUxMDAwNTQ4MjAwMEMzMDY1RkZGRjkwQzIwMDBEMkM0MjAwMDc1MgorOjEwNDUyMDAwMTA0MDAwMDcyNEEzMEEwMDkwQzMwMDBEMjQwMjAwMTRDOQorOjEwNDUzMDAwMDA2MjEwMDQwMEEyMTAyMTBBMDAxMTFGMzA0NUZGRkY4NQorOjEwNDU0MDAwMzA2NUZGRkYzQzAyODAwODM0NDIwMDgwMDNFMDAwMDgzMQorOjEwNDU1MDAwQTQ0NTAwMTQzQzAzODAwODM0NjgwMDgwQUQwNTAwMzg5MQorOjEwNDU2MDAwMzQ2NzAxMDA4Q0UyMDAxQzMwODQwMEZGMDBBMjEwMjM5RAorOjEwNDU3MDAwMTg0MDAwMDMzMEM2MDBGRjI0QTJGRkZDQUNFMjAwMUM4MAorOjEwNDU4MDAwMzA4MjAwMDE1MDQwMDAwODNDMDM4MDA4OEQwMjAwM0M0RQorOjEwNDU5MDAwMDBBMjEwMjMwNDQxMDAxMjI0MDQwMDA1OEM2MjAwMDREMAorOjEwNDVBMDAwMTBBMjAwMEYzQzAzODAwODhDNjIwMDA0MTRBMjAwMUVCRAorOjEwNDVCMDAwMDAwMDAwMDAzQzAyMDgwMDhDNDIwMEQ4MzA0MjAwMjA3RAorOjEwNDVDMDAwMTA0MDAwMDkzQzAyODAwODM0NjIwMDgwOTA2MzAwMDhCQgorOjEwNDVEMDAwOTA0MjAwNEMxNDQzMDAwNDNDMDI4MDA4MjQwNDAwMDQ3MAorOjEwNDVFMDAwMEEwMDExMDkwMDAwMDAwMDM0NDMwMDgwMzQ0MjAxMDAzOQorOjEwNDVGMDAwQTA0MDAwMEMyNDAyMDAwMUE0NjIwMDE0MTBDMDAwMEFCNAorOjEwNDYwMDAwM0MwMjgwMDA4QzQ0MDEwMDNDMDM4MDAwOEM2MjAxRjg3NQorOjEwNDYxMDAwMDQ0MEZGRkUyNDAyMDAwMkFDNjQwMUMwQTA2MjAxQzQ5OQorOjEwNDYyMDAwM0MwMjEwMDBBQzYyMDFGODAzRTAwMDA4MDAwMDAwMDA0QQorOjEwNDYzMDAwMjdCREZGRTgwMEE2MTgyM0FGQkYwMDEwMTg2MDAwODA1OAorOjEwNDY0MDAwMzA4ODAwRkYzQzAyODAwODM0NDcwMDgwQTBFMDAwMjQ0RQorOjEwNDY1MDAwMzQ0NDAxMDBBMEUwMDAyNzhDODIwMDFDMDBBMjEwMjMzQgorOjEwNDY2MDAwMDQ0MDAwNTYwMDAwMDAwMDhDRTIwMDNDOTRFMzAwNUMzMworOjEwNDY3MDAwOENFNDAwMkMwMDQ1MzAyMzMwNjNGRkZGMDBDMzE4MjE3OQorOjEwNDY4MDAwMDA4MzIwMkIxMDgwMDAwNDAwRTAxODIxOENFMjAwMkMxNQorOjEwNDY5MDAwMEEwMDExNzgwMEEyMTAyMTk0RTIwMDVDMzA0MkZGRkY3MgorOjEwNDZBMDAwMDBDMjEwMjEwMEEyMTAyMUFDNjIwMDFDM0MwMjgwMDg1NAorOjEwNDZCMDAwMzQ0NDAwODA5NDgyMDA1QzhDODMwMDFDMzA0MkZGRkZGNQorOjEwNDZDMDAwMDAwMjEwNDAwMEEyMTAyMTAwNDMxMDJCMTA0MDAwMDRGMworOjEwNDZEMDAwMDAwMDAwMDA4QzgyMDAxQzBBMDAxMThCM0MwNjgwMDg0MAorOjEwNDZFMDAwOTQ4MjAwNUMzMDQyRkZGRjAwMDIxMDQwMDBBMjEwMjFDMworOjEwNDZGMDAwM0MwNjgwMDgzNEMzMDEwMDM0QzcwMDgwQUM4MjAwMUMzMworOjEwNDcwMDAwQTA2MDAwMENBQ0U1MDAzODhDNjIwMDFDMDBBMjEwMjNGNQorOjEwNDcxMDAwMTg0MDAwMDIyNEEyRkZGQ0FDNjIwMDFDMzEwMjAwMDEyMAorOjEwNDcyMDAwMTA0MDAwMDgzQzAzODAwODhDRTIwMDNDMDBBMjEwMjNFQgorOjEwNDczMDAwMDQ0MTAwMTIyNDA0MDAwNThDQzIwMDA0MTBBMjAwMTBFMQorOjEwNDc0MDAwOEZCRjAwMTA4QzYyMDAwNDE0QTIwMDRGOEZCRjAwMTBCNgorOjEwNDc1MDAwM0MwMjA4MDA4QzQyMDBEODMwNDIwMDIwMTA0MDAwMEE4MQorOjEwNDc2MDAwM0MwMjgwMDgzNDYyMDA4MDkwNjMwMDA4OTA0MjAwNEM1NAorOjEwNDc3MDAwMTQ0MzAwMDUzQzAyODAwODI0MDQwMDA0OEZCRjAwMTA4RAorOjEwNDc4MDAwMEEwMDExMDkyN0JEMDAxODM0NDMwMDgwMzQ0MjAxMDA5QgorOjEwNDc5MDAwQTA0MDAwMEMyNDAyMDAwMUE0NjIwMDE0M0MwMjgwMDAyRQorOjEwNDdBMDAwOEM0NDAxMDAzQzAzODAwMDhDNjIwMUY4MDQ0MEZGRkU1MQorOjEwNDdCMDAwMjQwMjAwMDIwQTAwMTFEODAwMDAwMDAwOENFMjAwMUM1NAorOjEwNDdDMDAwMDA0NjEwMjMwMDQzMTAyQjU0NDAwMDAxQUNFNTAwMUNCMAorOjEwNDdEMDAwOTRFMjAwNUMzMDQyRkZGRjAwNjIxMDJCMTQ0MDAwMDc5RgorOjEwNDdFMDAwMjQwMjAwMDI5NEUyMDA1QzhDRTMwMDFDMzA0MkZGRkZENAorOjEwNDdGMDAwMDA2MjE4MjFBQ0UzMDAxQzI0MDIwMDAyQUNFNTAwMzg4MgorOjEwNDgwMDAwMEUwMDBGNUVBMDgyMDAwQzEwNDAwMDFGOEZCRjAwMTAzMgorOjEwNDgxMDAwM0MwMjgwMDA4QzQ0MDEwMDNDMDM4MDAwOEM2MjAxRjg2MworOjEwNDgyMDAwMDQ0MEZGRkUyNDAyMDAwMkFDNjQwMUMwQTA2MjAxQzQ4NworOjEwNDgzMDAwM0MwMjEwMDBBQzYyMDFGODBBMDAxMUYwOEZCRjAwMTBCQQorOjEwNDg0MDAwMzEwMjAwMTAxMDQwMDAxMDhGQkYwMDEwM0MwMjgwMDhBMQorOjEwNDg1MDAwMzQ0NTAwODA4Q0EzMDAxQzk0QTIwMDVDMDA2NjE4MjNFMQorOjEwNDg2MDAwMzA0MkZGRkYwMDYyMTgyMTNDMDIzRkZGMzQ0NEZGRkY0QgorOjEwNDg3MDAwMDA4MzEwMkI1NDQwMDAwMTAwODAxODIxMDBDMzEwMjEzOAorOjEwNDg4MDAwQUNBMjAwMUM4RkJGMDAxMDAzRTAwMDA4MjdCRDAwMTg3OQorOjEwNDg5MDAwMjdCREZGRTgwMEMwNDAyMTAwQTYzMDIzQUZCRjAwMTBCNQorOjEwNDhBMDAwMThDMDAwMjYzMDhBMDBGRjNDMDI4MDA4MzQ0OTAwODA4RQorOjEwNDhCMDAwOEQyNDAwMUM4RDIzMDAyQzAwODgyMDIzMDA2NDE4MkJERAorOjEwNDhDMDAwMTA2MDAwMEYzNDQ3MDEwMDhDRTIwMDIwMDA0NjEwMjFFOAorOjEwNDhEMDAwQUNFMjAwMjA4Q0UyMDAyMDAwNDQxMDJCMTQ0MDAwMEJCRQorOjEwNDhFMDAwM0MwMjNGRkY4Q0UyMDAyMDAwNDQxMDIzQUNFMjAwMjA5OQorOjEwNDhGMDAwOTUyMjAwNUMzMDQyRkZGRjBBMDAxMjEwMDA4MjIwMjE0NgorOjEwNDkwMDAwQUNFMDAwMjAwMDg2MjAyMTNDMDIzRkZGMzQ0M0ZGRkY0MworOjEwNDkxMDAwMDA2NDEwMkI1NDQwMDAwMTAwNjAyMDIxM0MwMjgwMDhGQworOjEwNDkyMDAwMzQ0MjAwODAwMDg1MTgyMUFDNDMwMDFDQTA0MDAwMjRDNAorOjEwNDkzMDAwQTA0MDAwMjcwQTAwMTI2MjNDMDM4MDA4MzE0MjAwMTBBOAorOjEwNDk0MDAwMTA0MDAwNDMzQzAzODAwODNDMDY4MDA4MzRDNDAwODBDQgorOjEwNDk1MDAwOEM4MjAwM0MwMDQ4MTAyMzU4NDAwMDNFMzQ2NjAwODBBMgorOjEwNDk2MDAwOTA4MjAwMjQyNDQyMDAwMUEwODIwMDI0OTA4MjAwMjQyRQorOjEwNDk3MDAwM0MwMzA4MDA4QzYzMDAyNDMwNDIwMEZGMDA0MzEwMkJFRQorOjEwNDk4MDAwMTQ0MDAwNjg4RkJGMDAxMDM0QzIwMTAwOEM0MjAwMUMyQworOjEwNDk5MDAwMDBBMjEwMjMxODQwMDA2MzAwMDAwMDAwOENDMzAwMDQzNAorOjEwNDlBMDAwOTQ4MjAwNUMwMDY4MTgyMzMwNDJGRkZGMDAwMzE4NDMyNAorOjEwNDlCMDAwMDAwMjEwNDAwMDQzMTAyQTEwNDAwMDA1MDAwMDAwMDBEMworOjEwNDlDMDAwOENDMjAwMDQwMDQ4MTAyMzBBMDAxMjQ1MDAwMjEwNDM2NAorOjEwNDlEMDAwOTQ4MjAwNUMzMDQyRkZGRjAwMDIxMDQwM0MwNjgwMDhEOQorOjEwNDlFMDAwQUM4MjAwMkMzNEM1MDA4MDk0QTIwMDVDOENBNDAwMkMwNgorOjEwNDlGMDAwOTRBMzAwNUMzMDQyRkZGRjAwMDIxMDQwMDA4MjIwMjE5RgorOjEwNEEwMDAwMzA2M0ZGRkYwMDgzMjAyMTAxMDQxMDIxQUNBMjAwMUNCMQorOjEwNEExMDAwOENDMjAwMDQzNEM2MDEwMEFDQzIwMDFDMjQwMjAwMDI5NworOjEwNEEyMDAwMEUwMDBGNUVBMEMyMDAwQzEwNDAwMDNFOEZCRjAwMTBCMQorOjEwNEEzMDAwM0MwMjgwMDA4QzQ0MDEwMDNDMDM4MDAwOEM2MjAxRjg0MQorOjEwNEE0MDAwMDQ0MEZGRkUyNDAyMDAwMjBBMDAxMjkyMDAwMDAwMDA0RgorOjEwNEE1MDAwMzQ2NjAwODBBQ0M1MDAzODM0NjQwMTAwOEM4MjAwMUNEMAorOjEwNEE2MDAwMDBBMjEwMjMxODQwMDAwMjI0QTJGRkZDQUM4MjAwMUMwQworOjEwNEE3MDAwMzE0MjAwMDE1MDQwMDAwQTNDMDM4MDA4OENDMjAwM0NENworOjEwNEE4MDAwMDBBMjEwMjMwNDQzMDAxNDI0MDQwMDA1OEM2MjAwMDRENworOjEwNEE5MDAwMTRBMjAwMDMzQzAzODAwODBBMDAxMjg0MjQwNDAwMDVDOQorOjEwNEFBMDAwOEM2MjAwMDQxNEEyMDAxRjhGQkYwMDEwM0MwMjA4MDA5QgorOjEwNEFCMDAwOEM0MjAwRDgzMDQyMDAyMDEwNDAwMDBBM0MwMjgwMDg5RQorOjEwNEFDMDAwMzQ2MjAwODA5MDYzMDAwODkwNDIwMDRDMTQ0MzAwMDU1QgorOjEwNEFEMDAwM0MwMjgwMDgyNDA0MDAwNDhGQkYwMDEwMEEwMDExMDk2MgorOjEwNEFFMDAwMjdCRDAwMTgzNDQzMDA4MDM0NDIwMTAwQTA0MDAwMEM3MAorOjEwNEFGMDAwMjQwMjAwMDFBNDYyMDAxNDNDMDI4MDAwOEM0NDAxMDBFNgorOjEwNEIwMDAwM0MwMzgwMDA4QzYyMDFGODA0NDBGRkZFMjQwMjAwMDI5NgorOjEwNEIxMDAwQUM2NDAxQzBBMDYyMDFDNDNDMDIxMDAwQUM2MjAxRjhBOAorOjEwNEIyMDAwOEZCRjAwMTAwM0UwMDAwODI3QkQwMDE4MjdCREZGRTg3NQorOjEwNEIzMDAwM0MwQTgwMDhBRkJGMDAxMDM1NDkwMDgwOEQyMjAwM0M0MAorOjEwNEI0MDAwMDBDMDQwMjEzMDg0MDBGRjAwNDYxMDIzMTg0MDAwOUQyMworOjEwNEI1MDAwMzBFNzAwRkYzNTQ3MDEwMDI0MDIwMDAxMDBBNjMwMjNBMgorOjEwNEI2MDAwQTBFMDAwMENBMEUwMDAwREE1MjIwMDE0MThDMDAwMjQ1NQorOjEwNEI3MDAwMzA4MjAwMTA4RDIzMDAxQzhEMjIwMDJDMDA2ODE4MjMyOQorOjEwNEI4MDAwMDA0MzEwMkIxMDQwMDAwRjAwMDAwMDAwOENFMjAwMjBCQQorOjEwNEI5MDAwMDA0NjEwMjFBQ0UyMDAyMDhDRTIwMDIwMDA0MzEwMkJFNAorOjEwNEJBMDAwMTQ0MDAwMEIzQzAyM0ZGRjhDRTIwMDIwMDA0MzEwMjMyNgorOjEwNEJCMDAwQUNFMjAwMjA5NTIyMDA1QzMwNDJGRkZGMEEwMDEyQzFFNworOjEwNEJDMDAwMDA2MjE4MjFBQ0UwMDAyMDAwNjYxODIxM0MwMjNGRkY4MworOjEwNEJEMDAwMzQ0NkZGRkYwMEMzMTAyQjU0NDAwMDAxMDBDMDE4MjFEMQorOjEwNEJFMDAwM0MwMjgwMDgzNDQyMDA4MDAwNjUxODIxQUM0MzAwMUM2MAorOjEwNEJGMDAwQTA0MDAwMjRBMDQwMDAyNzBBMDAxMzBGM0MwMzgwMDhCNworOjEwNEMwMDAwMTA0MDAwNDAzQzAzODAwODhEMjIwMDNDMDA0ODEwMjNFNworOjEwNEMxMDAwNTg0MDAwM0QzNDY3MDA4MDkxMjIwMDI0MjQ0MjAwMDE2NgorOjEwNEMyMDAwQTEyMjAwMjQ5MTIyMDAyNDNDMDMwODAwOEM2MzAwMjQ2QworOjEwNEMzMDAwMzA0MjAwRkYwMDQzMTAyQjE0NDAwMDlBOEZCRjAwMTAzOQorOjEwNEM0MDAwOENFMjAwMUMwMEEyMTAyMzE4NDAwMDk2MDAwMDAwMDAxNworOjEwNEM1MDAwOEQ0MzAwMDQ5NTIyMDA1QzAwNjgxODIzMzA0MkZGRkY1QQorOjEwNEM2MDAwMDAwMzE4NDMwMDAyMTA0MDAwNDMxMDJBMTA0MDAwMDVDMgorOjEwNEM3MDAwMDEyMDIwMjE4RDQyMDAwNDAwNDgxMDIzMEEwMDEyRjI3NgorOjEwNEM4MDAwMDAwMjEwNDM5NTIyMDA1QzMwNDJGRkZGMDAwMjEwNDBGQQorOjEwNEM5MDAwM0MwNjgwMDhBQzgyMDAyQzM0QzUwMDgwOTRBMjAwNUNFNQorOjEwNENBMDAwOENBNDAwMkM5NEEzMDA1QzMwNDJGRkZGMDAwMjEwNDA1MworOjEwNENCMDAwMDA4MjIwMjEzMDYzRkZGRjAwODMxODIxMDEwMzEwMjFBRgorOjEwNENDMDAwQUNBMjAwMUM4Q0MyMDAwNDM0QzYwMTAwQUNDMjAwMUNBMworOjEwNENEMDAwMjQwMjAwMDIwRTAwMEY1RUEwQzIwMDBDMTA0MDAwNzEwMgorOjEwNENFMDAwOEZCRjAwMTAzQzAyODAwMDhDNDQwMTAwM0MwMzgwMDAxOAorOjEwNENGMDAwOEM2MjAxRjgwNDQwRkZGRTI0MDIwMDAyMEEwMDEzMzkwRQorOjEwNEQwMDAwMDAwMDAwMDAzNDY3MDA4MEFDRTUwMDM4MzQ2NjAxMDAyNAorOjEwNEQxMDAwOENDMjAwMUMwMEEyMTAyMzE4NDAwMDAyMjRBMkZGRkMzOQorOjEwNEQyMDAwQUNDMjAwMUMzMDgyMDAwMTUwNDAwMDA4M0MwMzgwMDhFNworOjEwNEQzMDAwOENFMjAwM0MwMEEyMTAyMzA0NDMwMDUxMjQwNDAwMDUyRgorOjEwNEQ0MDAwOEM2MjAwMDQxMEEyMDAzRTNDMDM4MDA4OEM2MjAwMDRDOAorOjEwNEQ1MDAwNTRBMjAwNTQ4RkJGMDAxMDNDMDIwODAwOEM0MjAwRDhCRgorOjEwNEQ2MDAwMzA0MjAwMjAxMDQwMDAwNjNDMDI4MDA4MzQ2MjAwODA3RgorOjEwNEQ3MDAwOTA2MzAwMDg5MDQyMDA0QzEwNDMwMDQwM0MwMjgwMDhDMQorOjEwNEQ4MDAwMzQ0MzAwODAzNDQyMDEwMEEwNDAwMDBDMjQwMjAwMDFBMgorOjEwNEQ5MDAwQTQ2MjAwMTQzQzAyODAwMDhDNDQwMTAwM0MwMzgwMDBBQgorOjEwNERBMDAwOEM2MjAxRjgwNDQwRkZGRTI0MDIwMDAyQUM2NDAxQzBFMgorOjEwNERCMDAwQTA2MjAxQzQzQzAyMTAwMEFDNjIwMUY4MEEwMDEzNzc0MworOjEwNERDMDAwOEZCRjAwMTAyNDAyMDAwNUExMjAwMDI3MTRFMjAwMEE3MgorOjEwNEREMDAwM0MwMzgwMDgzNTQzMDEwMDkwNjIwMDBEMkM0MjAwMDYyMAorOjEwNERFMDAwNTA0MDAwMDUzQzAzODAwODkwNjIwMDBEMjQ0MjAwMDEwMQorOjEwNERGMDAwQTA2MjAwMEQzQzAzODAwODM0NjcwMDgwQUNFNTAwMzhGOQorOjEwNEUwMDAwMzQ2NjAxMDA4Q0MyMDAxQzAwQTIxMDIzMTg0MDAwMDI2RQorOjEwNEUxMDAwMjRBMkZGRkNBQ0MyMDAxQzMwODIwMDAxNTA0MDAwMEFGQQorOjEwNEUyMDAwM0MwMzgwMDg4Q0UyMDAzQzAwQTIxMDIzMDQ0MTAwMTRFMworOjEwNEUzMDAwMjQwNDAwMDU4QzYyMDAwNDE0QTIwMDAzM0MwMzgwMDhEMworOjEwNEU0MDAwMEEwMDEzNkUyNDA0MDAwNThDNjIwMDA0MTRBMjAwMTVFRAorOjEwNEU1MDAwOEZCRjAwMTAzQzAyMDgwMDhDNDIwMEQ4MzA0MjAwMjA3NgorOjEwNEU2MDAwMTA0MDAwMEEzQzAyODAwODM0NjIwMDgwOTA2MzAwMDgxMQorOjEwNEU3MDAwOTA0MjAwNEMxNDQzMDAwNTNDMDI4MDA4MjQwNDAwMDRDNgorOjEwNEU4MDAwOEZCRjAwMTAwQTAwMTEwOTI3QkQwMDE4MzQ0MzAwODBBRAorOjEwNEU5MDAwMzQ0MjAxMDBBMDQwMDAwQzI0MDIwMDAxQTQ2MjAwMTQ2RQorOjEwNEVBMDAwOEZCRjAwMTAwM0UwMDAwODI3QkQwMDE4M0MwQjgwMDhFRQorOjEwNEVCMDAwMjdCREZGRTgzQzAyODAwMEFGQkYwMDEwMzQ0MjAxMDA3NAorOjEwNEVDMDAwMzU2QTAwODA5MDQ0MDAwQTM1NjkwMTAwOEM0NTAwMTQ2MQorOjEwNEVEMDAwOEQ0ODAwMzg5MTIzMDAwQzMwODQwMEZGMDEwNTEwMjMxOQorOjEwNEVFMDAwMUM0MDAwQjMzMDY3MDBGRjJDRTIwMDA2NTA0MDAwQjFDOAorOjEwNEVGMDAwOEZCRjAwMTAyNDAyMDAwMTAwRTIzMDA0MzBDMjAwMDMyMgorOjEwNEYwMDAwNTQ0MDAwMDgwMEE4MzAyMzMwQzIwMDBDMTQ0MDAwQTExNworOjEwNEYxMDAwMzBDMjAwMzAxNDQwMDBBMzhGQkYwMDEwMEEwMDE0M0JDMQorOjEwNEYyMDAwMDAwMDAwMDAxOEMwMDAyNDMwODIwMDEwOEQ0MzAwMUNENworOjEwNEYzMDAwOEQ0MjAwMkMwMDY4MTgyMzAwNDMxMDJCMTA0MDAwMEZGNgorOjEwNEY0MDAwMDAwMDAwMDA4RDIyMDAyMDAwNDYxMDIxQUQyMjAwMjAyQworOjEwNEY1MDAwOEQyMjAwMjAwMDQzMTAyQjE0NDAwMDBCM0MwMjNGRkYyOQorOjEwNEY2MDAwOEQyMjAwMjAwMDQzMTAyM0FEMjIwMDIwOTU0MjAwNUNEQQorOjEwNEY3MDAwMzA0MkZGRkYwQTAwMTNBRjAwNjIxODIxQUQyMDAwMjA2RAorOjEwNEY4MDAwMDA2NjE4MjEzQzAyM0ZGRjM0NDZGRkZGMDBDMzEwMkI5MAorOjEwNEY5MDAwNTQ0MDAwMDEwMEMwMTgyMTNDMDI4MDA4MzQ0MjAwODBDNworOjEwNEZBMDAwMDA2NTE4MjFBQzQzMDAxQ0EwNDAwMDI0QTA0MDAwMjc0RAorOjEwNEZCMDAwMEEwMDEzRkQzQzAzODAwODEwNDAwMDQwM0MwMzgwMDhCOQorOjEwNEZDMDAwOEQ0MjAwM0MwMDQ4MTAyMzE4NDAwMDNEMzQ2NzAwODBBQgorOjEwNEZEMDAwOTE0MjAwMjQyNDQyMDAwMUExNDIwMDI0OTE0MjAwMjQ3NQorOjEwNEZFMDAwM0MwMzA4MDA4QzYzMDAyNDMwNDIwMEZGMDA0MzEwMkI3OAorOjEwNEZGMDAwMTQ0MDAwNzA4RkJGMDAxMDhEMjIwMDFDMDBBMjEwMjNFRgorOjEwNTAwMDAwMTg0MDAwNkMwMDAwMDAwMDhENjMwMDA0OTU0MjAwNUNCNQorOjEwNTAxMDAwMDA2ODE4MjMzMDQyRkZGRjAwMDMxODQzMDAwMjEwNDBDRAorOjEwNTAyMDAwMDA0MzEwMkExMDQwMDAwNTAxNDAyMDIxOEQ2MjAwMDQzOQorOjEwNTAzMDAwMDA0ODEwMjMwQTAwMTNFMDAwMDIxMDQzOTU0MjAwNUM3MAorOjEwNTA0MDAwMzA0MkZGRkYwMDAyMTA0MDNDMDY4MDA4QUM4MjAwMkM3QQorOjEwNTA1MDAwMzRDNTAwODA5NEEyMDA1QzhDQTQwMDJDOTRBMzAwNUM1NgorOjEwNTA2MDAwMzA0MkZGRkYwMDAyMTA0MDAwODIyMDIxMzA2M0ZGRkYyQQorOjEwNTA3MDAwMDA4MzE4MjEwMTAzMTAyMUFDQTIwMDFDOENDMjAwMDQ4MworOjEwNTA4MDAwMzRDNjAxMDBBQ0MyMDAxQzI0MDIwMDAyMEUwMDBGNUVGOAorOjEwNTA5MDAwQTBDMjAwMEMxMDQwMDA0NzhGQkYwMDEwM0MwMjgwMDBFRgorOjEwNTBBMDAwOEM0NDAxMDAzQzAzODAwMDhDNjIwMUY4MDQ0MEZGRkU0OAorOjEwNTBCMDAwMjQwMjAwMDIwQTAwMTQyRDAwMDAwMDAwMzQ2NzAwODA2MgorOjEwNTBDMDAwQUNFNTAwMzgzNDY2MDEwMDhDQzIwMDFDMDBBMjEwMjMzRAorOjEwNTBEMDAwMTg0MDAwMDIyNEEyRkZGQ0FDQzIwMDFDMzA4MjAwMDE3OAorOjEwNTBFMDAwNTA0MDAwMEEzQzAzODAwODhDRTIwMDNDMDBBMjEwMjNFMAorOjEwNTBGMDAwMDQ0MzAwMTQyNDA0MDAwNThDNjIwMDA0MTRBMjAwMDM3RAorOjEwNTEwMDAwM0MwMzgwMDgwQTAwMTQxRjI0MDQwMDA1OEM2MjAwMDQ3QworOjEwNTExMDAwMTRBMjAwMjg4RkJGMDAxMDNDMDIwODAwOEM0MjAwRDg2NworOjEwNTEyMDAwMzA0MjAwMjAxMDQwMDAwQTNDMDI4MDA4MzQ2MjAwODBCNworOjEwNTEzMDAwOTA2MzAwMDg5MDQyMDA0QzE0NDMwMDA1M0MwMjgwMDgzNAorOjEwNTE0MDAwMjQwNDAwMDQ4RkJGMDAxMDBBMDAxMTA5MjdCRDAwMThCNQorOjEwNTE1MDAwMzQ0MzAwODAzNDQyMDEwMEEwNDAwMDBDMjQwMjAwMDFDRQorOjEwNTE2MDAwQTQ2MjAwMTQzQzAyODAwMDhDNDQwMTAwM0MwMzgwMDBENworOjEwNTE3MDAwOEM2MjAxRjgwNDQwRkZGRTI0MDIwMDAyQUM2NDAxQzAwRQorOjEwNTE4MDAwQTA2MjAxQzQzQzAyMTAwMEFDNjIwMUY4MEEwMDE0M0JBQQorOjEwNTE5MDAwOEZCRjAwMTA4RkJGMDAxMDAxMDAzMDIxMEEwMDExNUE4QworOjEwNTFBMDAwMjdCRDAwMTgwMTAwMzAyMTBBMDAxMjk5MjdCRDAwMTgwMAorOjEwNTFCMDAwOEZCRjAwMTAwM0UwMDAwODI3QkQwMDE4M0MwMzgwMDhFMworOjEwNTFDMDAwMzQ2NDAxMDAyNDAyMDAwM0EwODIwMDBDOEM2MjAwMDRGRAorOjEwNTFEMDAwMDNFMDAwMDhBQzgyMDAxQzNDMDU4MDA4MzRBMzAwODA3QQorOjEwNTFFMDAwOTA2MjAwMjczNEE1MDEwMDI0MDYwMDQzMjQ0MjAwMDFGOAorOjEwNTFGMDAwQTA2MjAwMjc5MDYzMDAyNzNDMDIwODAwOEM0MjAwNDgxMAorOjEwNTIwMDAwMzA2MzAwRkYxNDYyMDAwNDNDMDc2MDIxOTRBNTAwRUFBQgorOjEwNTIxMDAwMEEwMDA5MDEzMEE1RkZGRjAzRTAwMDA4MDAwMDAwMDBCQworOjEwNTIyMDAwMjdCREZGRThBRkJGMDAxMDNDMDI4MDAwMEUwMDE0NDQxMQorOjEwNTIzMDAwOEM0NDAxODAzQzAyODAwODM0NDMwMTAwQTA2MDAwMENEMworOjEwNTI0MDAwOEM0MjAwMDQ4RkJGMDAxMDI3QkQwMDE4MDNFMDAwMDg0NworOjEwNTI1MDAwQUM2MjAwMUMyN0JERkZFMDNDMDI4MDA4QUZCRjAwMTgxNQorOjEwNTI2MDAwQUZCMTAwMTRBRkIwMDAxMDM0NDUwMDgwMzQ0NjAxMDBFNworOjEwNTI3MDAwM0MwODgwMDA4RDA5MDE0MDkwQzMwMDBDOENBNDAwM0NDOAorOjEwNTI4MDAwOENBMjAwMzgxNDgyMDAzQjMwNjcwMEZGOTUwMjAwN0MzRQorOjEwNTI5MDAwOTBBMzAwMjcxNDYwMDAwOTMwNDVGRkZGMjQwMjAwMDU5OQorOjEwNTJBMDAwNTRFMjAwMDgzQzA0ODAwODkwQzIwMDBEMjQ0MjAwMDEzMgorOjEwNTJCMDAwQTBDMjAwMEQwQTAwMTQ3RjNDMDQ4MDA4QTBDMDAwMERBRAorOjEwNTJDMDAwM0MwNDgwMDgzNDgyMDEwMDkwNDIwMDBDMjQwMzAwMDU1NQorOjEwNTJEMDAwMzA0MjAwRkYxNDQzMDAwQTI0QTIwNURDMzQ4MzAwODAxRQorOjEwNTJFMDAwOTA2MjAwMjcyQzQyMDAwNzUwNDAwMDA1MjRBMjBBMDBDQgorOjEwNTJGMDAwOTA2MzAwMjcyNDAyMDAxNDAwNjIxMDA0MDBBMjEwMjExMQorOjEwNTMwMDAwM0MxMDgwMDgzNjEwMDA4MDMwNDVGRkZGMDEyMDIwMjEyRQorOjEwNTMxMDAwMEUwMDE0NDRBNjA1MDAxNDk2MDIwMDVDOEUwMzAwMzhBQgorOjEwNTMyMDAwM0MxMTgwMDAzMDQyRkZGRjAwMDIxMDQwMDA2MjE4MjE1MworOjEwNTMzMDAwQUUwMzAwMUMwRTAwMDMzMjhFMjQwMTQwOTIwMjAwMjVCMQorOjEwNTM0MDAwMzQ0MjAwNDBBMjAyMDAyNTBFMDAwMzNEOEUyNDAxNDA5RAorOjEwNTM1MDAwOEUyNDAxNDAzQzAzODAwMDhDNjIwMUY4MDQ0MEZGRkU3MworOjEwNTM2MDAwMjQwMjAwMDJBQzY0MDFDMEEwNjIwMUM0M0MwMjEwMDAyRgorOjEwNTM3MDAwQUM2MjAxRjg4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTAxRAorOjEwNTM4MDAwMDNFMDAwMDgyN0JEMDAyMDNDMDM2MDEwM0MwMjA4MDAzOQorOjEwNTM5MDAwMjQ0MjAxNzRBQzYyNTAyQzhDNjI1MDAwM0MwNDgwMDBBQQorOjEwNTNBMDAwMzQ0MjAwODBBQzYyNTAwMDNDMDIwODAwMjQ0MjU0N0MyRAorOjEwNTNCMDAwM0MwMTA4MDBBQzIyNTYwMDNDMDIwODAwMjQ0MjU0Mzg0QworOjEwNTNDMDAwM0MwMTA4MDBBQzIyNTYwNDNDMDIwMDAyQUM4NDAwMDhGOAorOjEwNTNEMDAwQUM4MjAwMEMwM0UwMDAwODI0MDIwMDAxMDBBMDMwMjE5MAorOjEwNTNFMDAwM0MxQzA4MDAyNzlDNTYwODNDMDIwMDAyM0MwNTA0MDBCNworOjEwNTNGMDAwMDA4NTI4MjYwMDgyMjAyNjAwMDQxMDJCMkNBNTAwMDEwMQorOjEwNTQwMDAwMkM4NDAwMDEwMDAyMTA4MDNDMDMwODAwMjQ2MzU2MDAzNQorOjEwNTQxMDAwMDA4NTIwMjUwMDQzMTgyMTEwODAwMDAzMDAwMDEwMjE4MgorOjEwNTQyMDAwQUM2NjAwMDAyNDAyMDAwMTAzRTAwMDA4MDAwMDAwMDA1OAorOjEwNTQzMDAwM0MxQzA4MDAyNzlDNTYwODNDMDIwMDAyM0MwNTA0MDA2NgorOjEwNTQ0MDAwMDA4NTI4MjYwMDgyMjAyNjAwMDQxMDJCMkNBNTAwMDFCMAorOjEwNTQ1MDAwMkM4NDAwMDEwMDAyMTA4MDNDMDMwODAwMjQ2MzU2MDBFNQorOjEwNTQ2MDAwMDA4NTIwMjUwMDQzMTgyMTEwODAwMDA1MDAwMDEwMjEzMAorOjEwNTQ3MDAwM0MwMjA4MDAyNDQyNTQzOEFDNjIwMDAwMjQwMjAwMDFCRgorOjEwNTQ4MDAwMDNFMDAwMDgwMDAwMDAwMDNDMDIwMDAyM0MwMzA0MDBBRQorOjEwNTQ5MDAwMDA4MjEwMjYwMDgzMTgyNjJDNDIwMDAxMkM2MzAwMDE5NAorOjEwNTRBMDAwMDA0MzEwMjUxMDQwMDAwQjAwMDAyODIxM0MxQzA4MDA4MAorOjEwNTRCMDAwMjc5QzU2MDgzQzAzODAwMDhDNjIwMDA4MjQwNTAwMDFFQworOjEwNTRDMDAwMDA0MzEwMjVBQzYyMDAwODhDNjIwMDBDMDA0NDEwMjVEQgorOjEwNTREMDAwQUM2MjAwMEMwM0UwMDAwODAwQTAxMDIxM0MxQzA4MDA5NgorOjEwNTRFMDAwMjc5QzU2MDgzQzA1ODAwMDhDQTMwMDBDMDAwNDIwMjc1NAorOjEwNTRGMDAwMjQwMjAwMDEwMDY0MTgyNDAzRTAwMDA4QUNBMzAwMEM5RgorOjEwNTUwMDAwM0MwMjAwMDIxNDgyMDAwNjNDMDU2MDAwOENBMjA4RDAxOAorOjEwNTUxMDAwMjQwM0ZGRkUwMDQzMTAyNDAzRTAwMDA4QUNBMjA4RDBERgorOjEwNTUyMDAwM0MwMjA0MDAxNDgyMDAwNTAwMDAwMDAwOENBMjA4RDA5OAorOjEwNTUzMDAwMjQwM0ZGRkQwMDQzMTAyNEFDQTIwOEQwMDNFMDAwMDhDMAorOjEwNTU0MDAwMDAwMDAwMDAzQzAyNjAxQTM0NDIwMDEwOEM0MzAwODBDRQorOjEwNTU1MDAwMjdCREZGRjg4QzQ0MDA4NEFGQTMwMDAwOTNBMzAwMDA5NAorOjEwNTU2MDAwMjQwMjAwMDQxNDYyMDAxQUFGQTQwMDA0OTNBMjAwMDFGNAorOjEwNTU3MDAwMTA0MDAwMDc5N0EzMDAwMjMwNjJGRkZDM0MwMzgwMDA0QworOjEwNTU4MDAwMDA0MzEwMjE4QzQyMDAwMDBBMDAxNTM2QUZBMjAwMDQyRgorOjEwNTU5MDAwMzA2MkZGRkMzQzAzODAwMDAwNDMxMDIxQUM0NDAwMDA1QgorOjEwNTVBMDAwQTNBMDAwMDAzQzA1NjAwMDhDQTIwOEQwMjQwM0ZGRkVFRAorOjEwNTVCMDAwM0MwNDYwMUEwMDQzMTAyNEFDQTIwOEQwOEZBMzAwMDQ1RQorOjEwNTVDMDAwOEZBMjAwMDAzNDg0MDAxMEFDODMwMDg0QUM4MjAwODA4MQorOjEwNTVEMDAwMDNFMDAwMDgyN0JEMDAwODI3QkRGRkU4QUZCRjAwMTBBQgorOjEwNTVFMDAwM0MxQzA4MDAyNzlDNTYwODNDMDI4MDAwOEM0MzAwMENBMQorOjEwNTVGMDAwOEM0MjAwMDQwMDQzMTgyNDNDMDIwMDAyMTA2MDAwMTQ5NgorOjEwNTYwMDAwMDA2MjI4MjQzQzAyMDQwMDNDMDQwMDAyMTBBMDAwMDVCMworOjEwNTYxMDAwMDA2MjEwMjQzQzAyMDgwMDhDNDI1NjAwMEEwMDE1NUIxMAorOjEwNTYyMDAwMDAwMDAwMDAxMDQwMDAwNzNDMDQwNDAwM0MwMjA4MDA5OQorOjEwNTYzMDAwOEM0MjU2MDQwMDQwRjgwOTAwMDAwMDAwMEEwMDE1NjA4MgorOjEwNTY0MDAwMDAwMDAwMDAwMDAwMDAwRDNDMUMwODAwMjc5QzU2MDhDQworOjBDNTY1MDAwOEZCRjAwMTAwM0UwMDAwODI3QkQwMDE4MDkKKzowNDU2NUMwMDgwMDgwMjQwODAKKzoxMDU2NjAwMDgwMDgwMTAwODAwODAwODA4MDA4MDAwMDAwMDAwQzgwOTUKKzoxMDU2NzAwMDAwMDAzMjAwMDgwMDBFOTgwODAwMEVGNDA4MDAwRjg4QTEKKzoxMDU2ODAwMDA4MDAxMDI4MDgwMDEwNzQ4MDA4MDEwMDgwMDgwMDgwQkQKKzowNDU2OTAwMDgwMDgwMDAwOEUKKzowQzU2OTQwMDBBMDAwMDI4MDAwMDAwMDAwMDAwMDAwMEQ4Cis6MTA1NkEwMDAwMDAwMDAwRDYzNzAzNjJFMzIyRTMxMDAwMDAwMDAwMDI1Cis6MTA1NkIwMDAwNjAyMDEwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERECis6MTA1NkMwMDAwMDAwMDAwMDAwMDAwMDAwMzgwMDNDMDAwMDAwMDAwMDY2Cis6MTA1NkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMEFBCis6MTA1NkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJBCis6MTA1NkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFBCis6MTA1NzAwMDAwMDAwMDAwMDAwMDAwMDAwMjEwMDM4MDAwMDAwMDAwMTNGCis6MTA1NzEwMDAwMDAwMDAyQjAwMDAwMDAwMDAwMDAwMDQwMDAzMEQ0MDBBCis6MTA1NzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc5Cis6MTA1NzMwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDMwMDAwMDAwMDU2Cis6MTA1NzQwMDAwMDAwMDAwRDAwMDAwMDBEM0MwMjA4MDAyNDQyNTlBQzhFCis6MTA1NzUwMDAzQzAzMDgwMDI0NjM1QkY0QUM0MDAwMDAwMDQzMjAyQkIyCis6MTA1NzYwMDAxNDgwRkZGRDI0NDIwMDA0M0MxRDA4MDAzN0JEOUZGQzRGCis6MTA1NzcwMDAwM0EwRjAyMTNDMTAwODAwMjYxMDAwQTAzQzFDMDgwMEVCCis6MTA1NzgwMDAyNzlDNTlBQzBFMDAwMkY2MDAwMDAwMDAwMDAwMDAwRDNFCis6MTA1NzkwMDAyN0JERkZCNEFGQTEwMDAwQUZBMjAwMDRBRkEzMDAwODczCis6MTA1N0EwMDBBRkE0MDAwQ0FGQTUwMDEwQUZBNjAwMTRBRkE3MDAxODVGCis6MTA1N0IwMDBBRkE4MDAxQ0FGQTkwMDIwQUZBQTAwMjRBRkFCMDAyOEZGCis6MTA1N0MwMDBBRkFDMDAyQ0FGQUQwMDMwQUZBRTAwMzRBRkFGMDAzODlGCis6MTA1N0QwMDBBRkI4MDAzQ0FGQjkwMDQwQUZCQzAwNDRBRkJGMDA0ODE5Cis6MTA1N0UwMDAwRTAwMDgyMDAwMDAwMDAwOEZCRjAwNDg4RkJDMDA0NDVFCis6MTA1N0YwMDA4RkI5MDA0MDhGQjgwMDNDOEZBRjAwMzg4RkFFMDAzNEI3Cis6MTA1ODAwMDA4RkFEMDAzMDhGQUMwMDJDOEZBQjAwMjg4RkFBMDAyNDA2Cis6MTA1ODEwMDA4RkE5MDAyMDhGQTgwMDFDOEZBNzAwMTg4RkE2MDAxNDQ2Cis6MTA1ODIwMDA4RkE1MDAxMDhGQTQwMDBDOEZBMzAwMDg4RkEyMDAwNDg2Cis6MTA1ODMwMDA4RkExMDAwMDI3QkQwMDRDM0MxQjYwMTg4RjdBNTAzMEIwCis6MTA1ODQwMDAzNzdCNTAyODAzNDAwMDA4QUY3QTAwMDAwMEEwMTgyMUUxCis6MTA1ODUwMDAwMDgwMTAyMTAwODAyODIxM0MwNDYwMDAzQzA3NjAwMDhCCis6MTA1ODYwMDAyNDA2MDAwODEwNjAwMDA2MzQ4NDIwNzg4QzQyMDAwMDcyCis6MTA1ODcwMDBBQ0UyMjAwODhDNjMwMDAwMDNFMDAwMDhBQ0UzMjAwQ0RECis6MTA1ODgwMDAwQTAwMEY4MTAwMDAwMDAwMjQwMzAwNDAzQzAyNjAwMDc5Cis6MTA1ODkwMDAwM0UwMDAwOEFDNDMyMDAwM0MwNzYwMDA4Rjg2MDAwNDUyCis6MTA1OEEwMDA4Q0U1MjA3NDAwODYxMDIxMDBBMjE4MkIxNDYwMDAwN0RDCis6MTA1OEIwMDAwMDAwMjgyMThGOEFGREEwMjQwNTAwMDFBMTQ0MDAxM0M3Cis6MTA1OEMwMDA4Rjg5MDAwNDAxMjQ0MDIxQUY4ODAwMDQwM0UwMDAwODEwCis6MTA1OEQwMDAwMEEwMTAyMThGODRGREEwOEY4NTAwMDQ5MDg2MDAxMzA2Cis6MTA1OEUwMDAzMEMzMDBGRjAwQTMxMDIzQUY4MjAwMDQwM0UwMDAwOEQwCis6MTA1OEYwMDBBMDgwMDAxMzhGODRGREEwMjdCREZGRThBRkIwMDAxMDhCCis6MTA1OTAwMDBBRkJGMDAxNDkwODkwMDExOTA4NzAwMTEyNDAyMDAyODc1Cis6MTA1OTEwMDAzMTI4MDBGRjM5MDYwMDI4MzBFMzAwRkYyNDg1MDAyQ0UxCis6MTA1OTIwMDAyQ0QwMDAwMTEwNjIwMDE2MjQ4NDAwMUMwRTAwMDA2RUIyCis6MTA1OTMwMDAwMDAwMDAwMDhGOEZGREEwM0MwNTYwMDAyNDAyMDIwNERGCis6MTA1OTQwMDA5NUVFMDAzRTk1RUQwMDNDMDAwRTVDMDAzMUFDRkZGRjkzCis6MTA1OTUwMDAwMTZDNTAyNUFDQUEyMDEwNTIwMDAwMDEyNDAyMDAwNDYyCis6MTA1OTYwMDBBQ0EyMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM5Cis6MTA1OTcwMDA4RkJGMDAxNDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAxODhGCis6MTA1OTgwMDAwQTAwMDBBNjAwMDAyODIxOEY4NUZEQTAyN0JERkZEOEIyCis6MTA1OTkwMDBBRkJGMDAyMEFGQjMwMDFDQUZCMjAwMThBRkIxMDAxNDBFCis6MTA1OUEwMDBBRkIwMDAxMDAwODA5ODIxOTBBNDAwMTEyNEIwMDAxQzFBCis6MTA1OUIwMDAyNEIxMDAyQzMwODMwMEZGMzg2MjAwMjgwRTAwMDA5MEQ0Cis6MTA1OUMwMDAyQzUyMDAwMTBFMDAwMDk4MDAwMDAwMDAwMjAwMjAyMTZGCis6MTA1OUQwMDAxMjQwMDAwMjAyMjAyODIxMDAwMDI4MjEwRTAwMDA2RTQzCis6MTA1OUUwMDAwMDAwMDAwMDhGOERGREEwM0MwODgwMDAzQzA1NjAwMDk5Cis6MTA1OUYwMDA5NUFDMDAzRTk1QUIwMDNDMDI2ODMwMjUwMDBDNEMwMDk1Cis6MTA1QTAwMDAzMTZBRkZGRjAxMkEzODI1QUNBNzIwMTAyNDAyMDIwMkM4Cis6MTA1QTEwMDBBQ0E2MjAxNDUyNDAwMDAxMjQwMjAwMDI4RkJGMDAyMEQ3Cis6MTA1QTIwMDA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDFDCis6MTA1QTMwMDAyN0JEMDAyODAzRTAwMDA4QUNBMjIwMDAyN0JERkZFMDNFCis6MTA1QTQwMDBBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTBBRkJGMDAxQzcwCis6MTA1QTUwMDAzQzExNjAwMDhFMjMyMDc0OEY4MjAwMDQzMEQwRkZGRjQxCis6MTA1QTYwMDAzMEYyRkZGRjEwNjIwMDBDMjQwNjAwOEYwRTAwMDA2RTYzCis6MTA1QTcwMDAwMDAwMDAwMDNDMDY4MDFGMDAxMDQ0MDAzNEM1RkYwMEY5Cis6MTA1QTgwMDAwMTEyMzgyNTI0MDQwMDAyQUUyNzIwMTAwMDAwMzAyMTI2Cis6MTA1QTkwMDBBRTI1MjAxNEFFMjQyMDAwOEZCRjAwMUM4RkIyMDAxODRBCis6MTA1QUEwMDA4RkIxMDAxNDhGQjAwMDEwMDBDMDEwMjEwM0UwMDAwODc3Cis6MTA1QUIwMDAyN0JEMDAyMDI3QkRGRkUwQUZCMDAwMTAzMEQwRkZGRkIyCis6MTA1QUMwMDBBRkJGMDAxOEFGQjEwMDE0MEUwMDAwNkUzMEYxRkZGRjQxCis6MTA1QUQwMDAwMDEwMjQwMDAwOTE4MDI1M0MwMzYwMDBBQzcwMjAxMDcxCis6MTA1QUUwMDA4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTAyNDAyMDAwNDgzCis6MTA1QUYwMDBBQzYyMjAwMDI3QkQwMDIwMDNFMDAwMDgwMDAwMTAyMTU4Cis6MTA1QjAwMDAyN0JERkZFMDNDMDQ2MDE4QUZCRjAwMThBRkIxMDAxNDIwCis6MTA1QjEwMDBBRkIwMDAxMDhDODg1MDAwMjQwM0ZGN0YzNDAyODA3MUU2Cis6MTA1QjIwMDAwMTAzMzgyNDM0RTUzODBDMjQxRjAwMzEzQzE5ODAwMDZGCis6MTA1QjMwMDBBQzg1NTAwMDNDMTE4MDBBQUM4MjUzQkNBRjNGMDAwOERBCis6MTA1QjQwMDAwRTAwMDU0Q0FGOTEwMDQwMEUwMDA1MEEzQzExNjAwMEFDCis6MTA1QjUwMDAwRTAwMDA3RDAwMDAwMDAwOEUzMDA4MDgzQzBGNTcwOTQxCis6MTA1QjYwMDAyNDE4RkZGMDAyMTg2MDI0MzVFRUUwMDAzNUVERjAwMDU3Cis6MTA1QjcwMDAwMThFNTAyNjAxOEQ1ODI2MkQ0NjAwMDEyRDY5MDAwMTA5Cis6MTA1QjgwMDBBRjg2MDA0QzBFMDAwRDA5QUY4OTAwNTAzQzA2NjAxNjMwCis6MTA1QjkwMDA4Q0M3MDAwMDNDMDg2MDE0OEQwNTAwQTAzQzAzRkZGRjhCCis6MTA1QkEwMDAwMEUzMjAyNDNDMDI1MzUzMDAwNTJGQzIxMDgyMDA1NTBECis6MTA1QkIwMDAzNEQwN0MwMDk2MDIwMUYyQTc4MDAwNkMxMDQwMDAwM0Y0Cis6MTA1QkMwMDBBNzgwMDA3QzM4NEIxRTFFQTc4QjAwNkM5NjAyMDFGODQ0Cis6MTA1QkQwMDAxMDQwMDAwNDhGOEQwMDUwMzg0QzFFMUVBNzhDMDA3Qzk2Cis6MTA1QkUwMDA4RjhEMDA1MDExQTAwMDA1OEY4MzAwNEMyNDBFMDAyMEUzCis6MTA1QkYwMDBBNzhFMDA3Q0E3OEUwMDZDOEY4MzAwNEMxMDYwMDAwNTgwCis6MTA1QzAwMDA5Nzg1MDA3QzI0MEYwMDIwQTc4RjAwN0NBNzhGMDA2QzU1Cis6MTA1QzEwMDA5Nzg1MDA3QzJDQjgwMDgxNTMwMDAwMDEyNDA1MDA4MDhBCis6MTA1QzIwMDA5Nzg0MDA2QzJDOTEwNDAxNTIyMDAwMDEyNDA0MDQwMDhDCis6MTA1QzMwMDAxMDYwMDAwQjNDMDI2MDAwOEZCRjAwMTg4RkIxMDAxNDkxCis6MTA1QzQwMDA4RkIwMDAxMDI3QkQwMDIwQTc4NDAwNkNBNzg1MDA3Q0MyCis6MTA1QzUwMDBBMzgwMDA3RUE3ODAwMDc0MDNFMDAwMDhBNzgwMDA5MjY0Cis6MTA1QzYwMDA4QzQ3MDQzODI0MTkxMDNDMzBGRkZGRkYxM0Y5MDAwMzYwCis6MTA1QzcwMDAzMEE4RkZGRjExMDAwMDQ2MjQwMzAwNTBBMzgwMDA3RURGCis6MTA1QzgwMDA5Mzg2MDA3RTUwQzAwMDI0QTc4NTAwN0NBNzgwMDA3Q0ZFCis6MTA1QzkwMDA5Nzk4MDA3Q0E3ODAwMDZDQTc4MDAwNzRBNzgwMDA5MjcyCis6MTA1Q0EwMDAzQzAxMDgwMEFDMzgwMDgwMEUwMDA3ODcwMDAwMDAwMEFGCis6MTA1Q0IwMDAzQzBGNjAwMDhERUQwODA4MjQwRUZGRjAzQzBCNjAwRUQ5Cis6MTA1Q0MwMDAyNjBDMDM4ODM1NkEwMDEwMDAwMDQ4MjEwMDAwMjgyMUI2Cis6MTA1Q0QwMDAwMUFFMjAyNDNDMTA1NzA5QUY4QzAwMTBBRjhBMDA0ODU5Cis6MTA1Q0UwMDBBRjg5MDAxODEwOTAwMDIzQUY4NTAwMTQ4RkJGMDAxOEYzCis6MTA1Q0YwMDA4RkIxMDAxNDhGQjAwMDEwMjdCRDAwMjAwM0UwMDAwODEyCis6MTA1RDAwMDBBRjgwMDA1NDAwMDU1MDgwMDE0NjQ4MjE4RDI2MDAwNEQ0Cis6MTA1RDEwMDAwQTAwMDE0ODAwRDE4MDIxOTc5ODAwN0NBNzg0MDA2QzdDCis6MTA1RDIwMDBBNzgwMDA3NEE3ODAwMDkyM0MwMTA4MDBBQzM4MDA4MDc2Cis6MTA1RDMwMDAwRTAwMDc4NzAwMDAwMDAwM0MwRjYwMDA4REVEMDgwODkyCis6MTA1RDQwMDAyNDBFRkZGMDNDMEI2MDBFMjYwQzAzODgzNTZBMDAxMDExCis6MTA1RDUwMDAwMDAwNDgyMTAwMDAyODIxMDFBRTIwMjQzQzEwNTcwOUYyCis6MTA1RDYwMDBBRjhDMDAxMEFGOEEwMDQ4QUY4OTAwMTgxNDkwRkZERjk1Cis6MTA1RDcwMDBBRjg1MDAxNDI0MTEwMDAxQUY5MTAwNTQ4RkJGMDAxOEFCCis6MTA1RDgwMDA4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAyMDgxCis6MTA1RDkwMDAwQTAwMDE3QkEzODMwMDdFMzA4M0ZGRkY4Rjg4MDA0MEQxCis6MTA1REEwMDA4Rjg3MDAzQzAwMDMyMTQwM0MwNTgwMDAzQzAyMDA1MEVFCis6MTA1REIwMDAwMDgyNDgyNTNDMDY2MDAwM0MwQTAxMDAzNEFDMDQwMDI3Cis6MTA1REMwMDA4Q0NEMDhFMDAxQUE1ODI0MTE2MDAwMDUwMDAwMDAwMEY1Cis6MTA1REQwMDA4Q0NGMDhFMDI0RTcwMDAxMDFFQTcwMjVBQ0NFMDhFMDkyCis6MTA1REUwMDA4RDE5MDAxMDAxODA1ODIxQUNCOTAwMzg4RDE4MDAxNEFECis6MTA1REYwMDBBQ0I4MDAzQ0FDQTkwMDMwMDAwMDAwMDAwMDAwMDAwMDdFCis6MTA1RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkyCis6MTA1RTEwMDAwMDAwMDAwMDAwMDAwMDAwM0MwMzgwMDA4QzY0MDAwMEQzCis6MTA1RTIwMDAzMDgyMDAyMDEwNDBGRkZEM0MwRjYwMDA4REVEMDhFMDQ3Cis6MTA1RTMwMDAzQzBFMDEwMDAxQUUxODI0MTQ2MEZGRTEwMDAwMDAwMEQ4Cis6MTA1RTQwMDBBRjg3MDAzQzAzRTAwMDA4QUY4QjAwNTg4Rjg1MDA0MDBGCis6MTA1RTUwMDAyNDBCRkZGMDNDMDY4MDAwOTRBNzAwMUE4Q0E5MDAyNEI0Cis6MTA1RTYwMDAzMEVDRkZGRjAwMEMzOEMwMDBFQjUwMjQwMTJBNDAyMTI5Cis6MTA1RTcwMDBBQ0M4MDAzQzhDQTQwMDI0OENDMzAwM0MwMDgzMTAyM0RECis6MTA1RTgwMDAxODQwMDAzMzAwMDAwMDAwOENBRDAwMjAyNUEyMDAwMTY2Cis6MTA1RTkwMDAzQzBGMDA1MEFDQzIwMDM4MzVFRTAwMTAzQzA2ODAwMENDCis6MTA1RUEwMDBBQ0NFMDAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTA1RUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTA1RUMwMDAwMDAwMDAwMDNDMDQ4MDAwOEM5OTAwMDAzMzM4MDAyMDYyCis6MTA1RUQwMDAxMzAwRkZGRDMwRTIwMDA4MTA0MDAwMTczQzA5ODAwMDZECis6MTA1RUUwMDA4Qzg4MDQwOEFDQTgwMDEwOEM4MzA0MENBQ0EzMDAxNEFDCis6MTA1RUYwMDAzQzE5MDAyMDNDMTg4MDAwQUYxOTAwMzA5NEFFMDAxODA3Cis6MTA1RjAwMDA5NEFGMDAxQzAxQ0YzMDIxQTRBNjAwMTg5NEFEMDAxQTU0Cis6MTA1RjEwMDAyNUE3MDAwMUE0QTcwMDFBOTRBQjAwMUE5NEFDMDAxRTk4Cis6MTA1RjIwMDAxMThCMDAwMzAwMDAwMDAwMDNFMDAwMDgwMDAwMDAwMEU3Cis6MTA1RjMwMDAwM0UwMDAwOEE0QTAwMDFBOEQyQTA0MDBBQ0FBMDAxMEY3Cis6MTA1RjQwMDA4RDI0MDQwNEFDQTQwMDE0MEEwMDAyMTgzQzE5MDAyMDlCCis6MTA1RjUwMDA4Q0EyMDAyMDBBMDAwMjAwM0MwRjAwNTAwQTAwMDFFRTUzCis6MTA1RjYwMDAwMDAwMDAwMDI3QkRGRkU4QUZCRjAwMTAwRTAwMDIzMkE2Cis6MTA1RjcwMDAwMDAwMDAwMDhGODkwMDQwOEZCRjAwMTAzQzAzODAwMEFDCis6MTA1RjgwMDBBNTIwMDAwQTk1MjgwMDBBOTUyNzAwMDQyN0JEMDAxOEJGCis6MTA1RjkwMDAzMTA1RkZGRjMwRTYwMDBGMDAwNjE1MDAwMEEyMjAyNUE2Cis6MTA1RkEwMDAwM0UwMDAwOEFDNjQwMDgwM0MwNTA4MDA4Q0E1MDAyMERDCis6MTA1RkIwMDA4RjgzMDAwQzI3QkRGRkU4QUZCMDAwMTBBRkJGMDAxNDA3Cis6MTA1RkMwMDAxMEEzMDAxMDAwMDA4MDIxMjQwNDAwMDEwMjA0MzAwNDBBCis6MTA1RkQwMDAwMEE2MjAyNDAwQzMxMDI0NTA0NDAwMDYyNjEwMDAwMTBGCis6MTA1RkUwMDAwMDEwMTg4MDI3ODdGREE0MTQ4MDAwMEEwMDY3MTgyMTdDCis6MTA1RkYwMDAyNjEwMDAwMTJFMDkwMDAyNTUyMEZGRjM4RjgzMDAwQ0FDCis6MTA2MDAwMDBBRjg1MDAwQzhGQkYwMDE0OEZCMDAwMTAwM0UwMDAwOEI0Cis6MTA2MDEwMDAyN0JEMDAxODhDNjgwMDAwM0MwNTgwMDBBQ0E4MDAyNDU3Cis6MTA2MDIwMDAwRTAwMDIzNDI2MTAwMDAxM0MwNTA4MDA4Q0E1MDAyMDVCCis6MTA2MDMwMDAwQTAwMDI1OTJFMDkwMDAyMjQwNTAwMDEwMDg1MTgwNEY3Cis6MTA2MDQwMDAzQzA0MDgwMDhDODQwMDIwMjdCREZGQzhBRkJGMDAzNDhCCis6MTA2MDUwMDAwMDgzMTAyNEFGQkUwMDMwQUZCNzAwMkNBRkI2MDAyOENECis6MTA2MDYwMDBBRkI1MDAyNEFGQjQwMDIwQUZCMzAwMUNBRkIyMDAxODJFCis6MTA2MDcwMDBBRkIxMDAxNDEwNDAwMDUxQUZCMDAwMTA4Rjg0MDA0MDQ5Cis6MTA2MDgwMDA5NDg3MDAwNjk0ODgwMDBBMDBFODMwMjMzMEQ1RkZGRjhCCis6MTA2MDkwMDAxMkEwMDA0QjhGQkYwMDM0OTQ4QjAwMTg5NDhDMDAwQTIwCis6MTA2MEEwMDAwMTZDNTAyMzMxNDJGRkZGMDJBMjQ4MkIxNTIwMDAwMjUxCis6MTA2MEIwMDAwMkEwMjAyMTAwNDAyMDIxMkM4RjAwMDUxNUUwMDAwMkM1Cis6MTA2MEMwMDAwMDgwOTgyMTI0MTMwMDA0MEUwMDAxQzEwMjYwMjAyMUU5Cis6MTA2MEQwMDA4Rjg3MDA0MDAyNjA5MDIxQUY4MDAwNDQ5NEY0MDAwQTUyCis6MTA2MEUwMDAwMjYwODAyMTEyNjAwMDRFMzI5MUZGRkYzQzE2NzAwMDZBCis6MTA2MEYwMDAzQzE0NDAwMDNDMUUyMDAwM0MxNzYwMDA4Rjk5MDA1ODYzCis6MTA2MTAwMDA4RjM4MDAwMDAzMTYxODI0MTA3NDAwNEYwMjgzRjgyQkY4Cis6MTA2MTEwMDAxN0UwMDAzNjAwMDAwMDAwMTA3RTAwNDc4Rjg2MDA0NDI0Cis6MTA2MTIwMDAxNEMwMDAzQTI0MDMwMDAxMDIwMzEwMjMwMjIzMjAyMTlCCis6MTA2MTMwMDAzMDUwRkZGRjE2MDBGRkYxMzA5MUZGRkY4Rjg3MDA0MEM2Cis6MTA2MTQwMDAzQzExMDAyMDNDMTA4MDAwQUUxMTAwMzA5NEVCMDAwQTlFCis6MTA2MTUwMDAzQzE3ODAwMDAyNEI1MDIxQTRFQTAwMEE5NEU5MDAwQThGCis6MTA2MTYwMDA5NEU4MDAwNDMxMjNGRkZGMzEwNjAwMEYwMDA2MkQwMEU0Cis6MTA2MTcwMDAwMDY1RjAyNUFFRkUwMDgwOTRGMzAwMEE5NEY2MDAxODQ2Cis6MTA2MTgwMDAxMkQzMDAzNjAwMTIyMTQwOENGRjAwMTQ4Q0Y0MDAxMDUyCis6MTA2MTkwMDAwM0U0NjgyMTAwMDBDMDIxMDFBNDc4MkIwMjk4NzAyMTNCCis6MTA2MUEwMDAwMUNGNjAyMUFDRUQwMDE0QUNFQzAwMTAwMkIyMzgyMzNBCis6MTA2MUIwMDAzMEY1RkZGRjE2QTBGRkI4OEY4NDAwNDA4RkJGMDAzNDdBCis6MTA2MUMwMDA4RkJFMDAzMDhGQjcwMDJDOEZCNjAwMjg4RkI1MDAyNDBCCis6MTA2MUQwMDA4RkI0MDAyMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNDUxCis6MTA2MUUwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMzgxNDc3RkZDQzAzCis6MTA2MUYwMDA4Rjg2MDA0NDBFMDAwRUUyMDIwMDIwMjEwMDQwMTgyMThDCis6MTA2MjAwMDA4Rjg2MDA0NDEwQzBGRkM5MDIwMzEwMjMwMjcwNzAyMzYwCis6MTA2MjEwMDA4Rjg3MDA0MDAxQzM2ODIxMEEwMDAyRTQzMUIyRkZGRjBBCis6MTA2MjIwMDA4Rjg2MDA0NDE0QzBGRkM5M0MxMTAwMjAzQzEwODAwMDQwCis6MTA2MjMwMDAwQTAwMDJBRUFFMTEwMDMwMEUwMDA0NjYwMjAwMjAyMUZBCis6MTA2MjQwMDAwQTAwMDJEQjAwNDAxODIxMDIwMDIwMjEwRTAwMDkzOTVCCis6MTA2MjUwMDAwMjIwMjgyMTBBMDAwMkRCMDA0MDE4MjEwRTAwMDFFRTc2Cis6MTA2MjYwMDAwMDAwMDAwMDBBMDAwMkM3MDJCMjM4MjMyN0JERkZDOEExCis6MTA2MjcwMDBBRkI3MDAyQ0FGQjYwMDI4QUZCNTAwMjRBRkI0MDAyMEY0Cis6MTA2MjgwMDBBRkIzMDAxQ0FGQjIwMDE4QUZCMTAwMTRBRkIwMDAxMDM0Cis6MTA2MjkwMDBBRkJGMDAzMDBFMDAwMTFCMjQxMzAwMDEzQzA0N0ZGRjQwCis6MTA2MkEwMDAzQzAzODAwODNDMDIyMDAwM0MwMTA4MDBBQzIwMDA3MDQ4Cis6MTA2MkIwMDAzNDk2RkZGRjM0NzcwMDgwMzQ1MjAwMDMzQzE1MTJDMDNGCis6MTA2MkMwMDAyNDE0MDAwMTNDMTA4MDAwMjQxMUZGODAwRTAwMDI0NUMwCis6MTA2MkQwMDAwMDAwMDAwMDhGODcwMDQ4OEY4QjAwMTg4Rjg5MDAxNDAyCis6MTA2MkUwMDA4Q0VBMDBFQzhDRTgwMEU4MDE0QjMwMkIwMTA5MjgyM0Y0Cis6MTA2MkYwMDAwMEE2MTAyMzE0NDAwMDA2MDE0QjE4MjMxNDQwMDAwRTgyCis6MTA2MzAwMDAzQzA1ODAwMDAyQTM2MDJCMTE4MDAwMEIwMDAwMDAwMDAwCis6MTA2MzEwMDAzQzA1NjAwMDhDRUUwMEVDOENFRDAwRTg4Q0E0MTgwQ0MxCis6MTA2MzIwMDBBRjhFMDAxODA0ODAwMDUzQUY4RDAwMTQ4RjhGMDAxMEMzCis6MTA2MzMwMDBBREY0MDAwMDNDMDU4MDAwOENCRjAwMDAzQkY5MDAwMTdCCis6MTA2MzQwMDAzMzM4MDAwMTE3MDBGRkUxM0MwMzgwMDA4QzYyMDEwMDNDCis6MTA2MzUwMDAyNDA2MEMwMDEwNDYwMDA5MDAwMDAwMDA4QzY4MDEwMEIzCis6MTA2MzYwMDAyRDA0MzA4MDU0ODAwMDEwM0MwNDgwMDA4QzY5MDEwMEIyCis6MTA2MzcwMDAyRDIzMzE4MTEwNjAwMDBDM0MwNDgwMDA4Q0FBMDEwMEE4Cis6MTA2MzgwMDAxMTQ2MDAwNDAwMDAyMDIxOENBNjAxMDAyNEM1RkY4MUQ1Cis6MTA2MzkwMDAzMEE0MDBGRjhFMEIwMTAwMEUwMDAyNjlBRTBCMDAyNDNBCis6MTA2M0EwMDAwQTAwMDM0RjNDMDQ4MDAwOEM4RDAxMDAyREFDMzMwMEFCCis6MTA2M0IwMDAxMTgwMDAyMjAwMDAwMDAwM0MwNzA4MDA4Q0U3MDA5OEQ0Cis6MTA2M0MwMDAyNEVFMDAwMTNDMDEwODAwQUMyRTAwOTgzQzA0ODAwMDQzCis6MTA2M0QwMDA4QzgyMDEwMDE0NDAwMDAzMDAwMDAwMDA1NjYwMDAxNDhECis6MTA2M0UwMDAzQzA0NDAwMDhDOUYwMTAwOEM5ODAxMDAwMDAwOTgyMTIzCis6MTA2M0YwMDAwM0YxQzgyNDAwMTkzOTQwMzMwRjAwN0YwMEVGNzAyNUU2Cis6MTA2NDAwMDAwMUQyNjgyNUFDOEQwODMwOEM4QzAxMDA4Qzg1MDEwMDkwCis6MTA2NDEwMDAyNThCMDEwMDAxNzEzMDI0MDAwNjUxNDAzMEEzMDA3RjFDCis6MTA2NDIwMDAwMTQzNDgyNTAxMzI0MDI1QUM4ODA4MzAzQzA0NDAwMDM3Cis6MTA2NDMwMDBBRTA0MDEzODBBMDAwMzBFMDAwMDAwMDA4Qzk5MDEwMDMwCis6MTA2NDQwMDAyNDBGMDAyMEFDOTkwMDIwOTJGODAwMDAzMzAzMDBGRkQ1Cis6MTA2NDUwMDAxMDZGMDAwQzI0MUYwMDUwNTQ3RkZGREQzQzA0ODAwMEFGCis6MTA2NDYwMDA4Qzg0MDEwMDBFMDAxNTRFMDAwMDAwMDAwQTAwMDM0RjRFCis6MTA2NDcwMDAzQzA0ODAwMDAwOTYzODI0QUNBNzE4MEMwQTAwMDMyN0JGCis6MTA2NDgwMDA4RjhGMDAxMDhDODUwMTAwMEUwMDA4RjcyNDA0MDA4MDE3Cis6MTA2NDkwMDAwQTAwMDM0RjNDMDQ4MDAwMDBBNDEwMkIyNDAzMDAwMUQ5Cis6MTA2NEEwMDAxMDQwMDAwOTAwMDAzMDIxMDAwNTI4NDAwMEE0MTAyQkY2Cis6MTA2NEIwMDAwNEEwMDAwMzAwMDMxODQwNTQ0MEZGRkMwMDA1Mjg0MERFCis6MTA2NEMwMDA1MDYwMDAwQTAwMDQxODJCMDA4NTM4MkI1NEUwMDAwNEFCCis6MTA2NEQwMDAwMDAzMTg0MjAwQzMzMDI1MDA4NTIwMjMwMDAzMTg0MjIyCis6MTA2NEUwMDAxNDYwRkZGOTAwMDUyODQyMDAwNDE4MkIwM0UwMDAwODlGCis6MTA2NEYwMDAwMEMzMTAyMTMwODRGRkZGMzBDNjAwRkYzQzA3ODAwMDNFCis6MTA2NTAwMDA4Q0UyMDFCODA0NDBGRkZFMDAwNjRDMDAwMTI0MzAyNTU3Cis6MTA2NTEwMDAzQzA4MjAwMDAwQzgyMDI1M0MwMzEwMDBBQ0UwMDE4MEFFCis6MTA2NTIwMDBBQ0U1MDE4NEFDRTQwMTg4MDNFMDAwMDhBQ0UzMDFCODA5Cis6MTA2NTMwMDAzQzA2NjAwMDhDQzUyMDFDMjQwMkZGRjAzMDgzMDIwMDYyCis6MTA2NTQwMDAzMDg2MDEwMDEwNjAwMDBFMDBBMjI4MjQzNEE1MDAwMTRFCis6MTA2NTUwMDAzMDg3MzAwMDEwRTAwMDA1MzA4MzBDMDAzNEE1MDAwNEMzCis6MTA2NTYwMDAzQzA0NjAwMDAzRTAwMDA4QUM4NTIwMUMxMDYwRkZGREM3Cis6MTA2NTcwMDAzQzA0NjAwMDM0QTUwMDA4MDNFMDAwMDhBQzg1MjAxQzQyCis6MTA2NTgwMDA1NEMwRkZGMzM0QTUwMDAyMEEwMDAzQjAzMDg3MzAwMDg2Cis6MTA2NTkwMDAyN0JERkZFOEFGQjAwMDEwQUZCRjAwMTQzQzA3NjAwMDlDCis6MTA2NUEwMDAyNDA2MDAwMjEwODAwMDExMDBBMDgwMjE4RjgzMDA1ODczCis6MTA2NUIwMDAwRTAwMDNBNzhDNjQwMDE4OEY4MjAwNTgwMDAwMjAyMTcxCis6MTA2NUMwMDAyNDA2MDAwMThDNDUwMDBDMEUwMDAzOTgwMDAwMDAwMDFBCis6MTA2NUQwMDAxNjAwMDAwMjI0MDIwMDAzMDAwMDEwMjE4RkJGMDAxNEU3Cis6MTA2NUUwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMTg4Q0U4MjAxQ0M1Cis6MTA2NUYwMDAyNDA5RkZGMDAxMDkyODI0QUNFNTIwMUM4Rjg3MDA1OEVFCis6MTA2NjAwMDAwQTAwMDNDRDhDRTUwMDBDM0MwMjYwMEUwMDgwNDAyMUE2Cis6MTA2NjEwMDAzNDQ2MDEwMDI0MDkwMDE4MDAwMDAwMDAwMDAwMDAwMEJBCis6MTA2NjIwMDAwMDAwMDAwMDNDMEEwMDUwM0MwMzgwMDAzNTQ3MDIwMDk3Cis6MTA2NjMwMDBBQzY4MDAzODM0NjQwNDAwQUM2NTAwM0NBQzY3MDAzMEUyCis6MTA2NjQwMDA4QzZDMDAwMDMxOEIwMDIwMTE2MEZGRkQyNDA3RkZGRkUwCis6MTA2NjUwMDAyNDAzMDA3RjhDOEQwMDAwMjQ2M0ZGRkYyNDg0MDAwNDRBCis6MTA2NjYwMDBBQ0NEMDAwMDE0NjdGRkZCMjRDNjAwMDQwMDAwMDAwMDRFCis6MTA2NjcwMDAwMDAwMDAwMDAwMDAwMDAwMjRBNDAyMDAwMDg1MjgyQjc4Cis6MTA2NjgwMDAzQzAzMDAyMDNDMEU4MDAwMjUyOUZGRkYwMTA1NDAyMTJFCis6MTA2NjkwMDBBREMzMDAzMDE1MjBGRkUwMDA4MDI4MjEwM0UwMDAwODkyCis6MTA2NkEwMDAwMDAwMDAwMDhGODIwMDU4MjdCREZGRDhBRkIzMDAxQzQ4Cis6MTA2NkIwMDBBRkJGMDAyMEFGQjIwMDE4QUZCMTAwMTRBRkIwMDAxMEYwCis6MTA2NkMwMDA5NDQ2MDAwMjAwODA5ODIxOEM1MjAwMTgyQ0MzMDA4MTRGCis6MTA2NkQwMDA4QzQ4MDAwNDhDNDcwMDA4OEM1MTAwMEM4QzQ5MDAxMDM5Cis6MTA2NkUwMDAxMDYwMDAwNzhDNEEwMDE0MkNDNDAwMDQxNDgwMDAxM0FFCis6MTA2NkYwMDAzMEVCMDAwNzMwQzUwMDAzMTBBMDAwMTAwMDAwMDAwMEMwCis6MTA2NzAwMDAyNDEwMDA4QjAyMDAyMDIxMDIyMDI4MjEwRTAwMDM5ODczCis6MTA2NzEwMDAyNDA2MDAwMzE2NjAwMDAyMjQwMjAwMDMwMDAwMTAyMTdBCis6MTA2NzIwMDA4RkJGMDAyMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNEYwCis6MTA2NzMwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjgxNTYwRkZGMUFFCis6MTA2NzQwMDAyNDEwMDA4QjNDMEM4MDAwM0MwMzAwMjAyNDFGMDAwMTFGCis6MTA2NzUwMDBBRDgzMDAzMEFGOUYwMDQ0MDAwMDAwMDAwMDAwMDAwMDQ3Cis6MTA2NzYwMDAwMDAwMDAwMDI0MTlGRkYwMjREODAwMEYwMzE5NzgyNDNBCis6MTA2NzcwMDAzQzEwMDBEMEFEODgwMDM4MDFGMDcwMjUyNENEMDAwMzE2Cis6MTA2NzgwMDAzQzA4NjAwRUFEODcwMDNDMzU4NTA0MDBBRDhFMDAzMEJFCis6MTA2NzkwMDAwMDBEMzg4MjM1MDQwMDNDM0MwMzgwMDA4QzZCMDAwMDA3Cis6MTA2N0EwMDAzMTYyMDAyMDEwNDBGRkZEMDAwMDAwMDAxMEUwMDAwOEYyCis6MTA2N0IwMDAyNEUzRkZGRjI0MDdGRkZGOENBODAwMDAyNDYzRkZGRkYyCis6MTA2N0MwMDAyNEE1MDAwNEFDODgwMDAwMTQ2N0ZGRkIyNDg0MDAwNEE3Cis6MTA2N0QwMDAzQzA1NjAwRUFDQTYwMDM4MDAwMDAwMDAwMDAwMDAwMDgwCis6MTA2N0UwMDAwMDAwMDAwMDhGODYwMDU0M0MwNDAwMjAzQzA3ODAwMDFECis6MTA2N0YwMDBBQ0U0MDAzMDU0QzAwMDA2MDEyMDIwMjEwMjQwMjAyMURBCis6MTA2ODAwMDAwRTAwMDNBNzAwMDA4MDIxMEEwMDA0MUQwMjAwMjAyMUMxCis6MTA2ODEwMDAwRTAwMDNERDAxNDAyODIxMDI0MDIwMjEwRTAwMDNBN0M1Cis6MTA2ODIwMDAwMDAwODAyMTBBMDAwNDFEMDIwMDIwMjEyN0JERkZFMDk2Cis6MTA2ODMwMDBBRkIyMDAxODMwOTJGRkZGQUZCMTAwMTRBRkJGMDAxQzIxCis6MTA2ODQwMDBBRkIwMDAxMDE2NDAwMDBEMDAwMDg4MjEwQTAwMDQ5MzJDCis6MTA2ODUwMDAwMjIwMTAyMTI0MDUwMDAzNTA4NTAwMjc4Q0U1MDAwQzQwCis6MTA2ODYwMDAwMDAwMDAwRDI2MjgwMDAxMzExMUZGRkYyNEUyMDAyMDY2Cis6MTA2ODcwMDAwMjMyODAyQjEyMDAwMDE5QUY4MjAwNTg4RjgyMDA0NDMwCis6MTA2ODgwMDAxNDQwMDAxNjhGODcwMDU4M0MwNjcwMDAzQzAzMjAwMDFGCis6MTA2ODkwMDA4Q0U1MDAwMDAwQTYyMDI0MTQ4MzAwMTA4Rjg0MDA2MDgzCis6MTA2OEEwMDAwMDA1NDQwMjNDMDk4MDAwMDBBOTgwMjQxNDgwRkZFOTBGCis6MTA2OEIwMDAzMTA2MDBGRjJDQ0EwMDBCNTE0MEZGRUIyNjI4MDAwMUQ3Cis6MTA2OEMwMDAwMDA2Njg4MDNDMEUwODAwMjVDRTU3NTgwMUFFNjAyMUI2Cis6MTA2OEQwMDA4RDhCMDAwMDAxNjAwMDA4MDAwMDAwMDAwMjIwMTAyMUU0Cis6MTA2OEUwMDA4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDQyCis6MTA2OEYwMDAwM0UwMDAwODI3QkQwMDIwMEUwMDAzOTgyNDA0MDA4NDU0Cis6MTA2OTAwMDAxNjAwRkZEODhGODcwMDU4MEEwMDA0NzRBRjgwMDA2MDFCCis6MTA2OTEwMDAwMjAwMjgyMTBFMDAwM0JGMjQwNDAwMDE4Rjg3MDA1OEM1Cis6MTA2OTIwMDAwQTAwMDQ3NEFGODIwMDYwMDIwMDI4MjEwRTAwMDNCRjM5Cis6MTA2OTMwMDAwMDAwMjAyMTBBMDAwNEEzOEY4NzAwNTgwRTAwMDQwNEUxCis6MTA2OTQwMDAwMjAwMjAyMThGODcwMDU4MEEwMDA0NzRBRjgyMDA2MDgzCis6MTA2OTUwMDAzMEFGRkZGRjAwMEYxOUMwM0MwNDgwMDA4QzkwMDFCOERECis6MTA2OTYwMDAwNjAwRkZGRTNDMTkyMDA0M0MxODEwMDBBQzgzMDE4MDk3Cis6MTA2OTcwMDBBQzgwMDE4NEFDOTkwMTg4QUM5ODAxQjgwQTAwMDQ3NTE4Cis6MTA2OTgwMDAyNjI4MDAwMTkwRTIwMDAzOTBFMzAwMDIwMDAwMjAyMThECis6MTA2OTkwMDAwMDAyRkUwMDAwMDMzQTAwMDBGRjI4MjUyNDA2MDAwODNDCis6MTA2OUEwMDAwRTAwMDM5ODAwMDAwMDAwMTYwMEZGREMyNDAyMDAwMzI0Cis6MTA2OUIwMDA4Rjg3MDA1ODAwMDAxMDIxMEEwMDA0NzRBRjgyMDA2MDI1Cis6MTA2OUMwMDA5MEU4MDAwMjAwMDAyMDIxMjQwNjAwMDkwQTAwMDRDMzA4Cis6MTA2OUQwMDAwMDA4MkUwMDkwRTQwMDBDMjQwOTAwRkYzMDg1MDBGRjIxCis6MTA2OUUwMDAxMEE5MDAxNTAwMDAzMDIxOTBGOTAwMDI5MEY4MDAwMzcyCis6MTA2OUYwMDAzMDhGMDBGRjk0RUIwMDA0MDAxOTZFMDAwMDE4NzQwMDQzCis6MTA2QTAwMDAwMDBGNjIwMDAxODYyMDI1MDFBRTUwMjUwMTRCMjgyNThDCis6MTA2QTEwMDAzMDg0RkY4QjBBMDAwNEMzMjQwNjAwMEE5MEUzMDAwMkJFCis6MTA2QTIwMDA5MEZGMDAwNDAwMDAyMDIxMDAwMzM2MDAwMERGMjgyNTJECis6MTA2QTMwMDAwQTAwMDRDMzI0MDYwMDBCMEEwMDA0RDUyNDA2MDA4QkI4Cis6MTA2QTQwMDAwMDA0NDlDMjMxMjcwMDNGMDAwNDQzNDIzQzAyODAwMDU5Cis6MTA2QTUwMDAwMDA4MjA0MDI0MDMxNjgwMkNFNjAwMjBBQzQzMDAyQ0M0Cis6MTA2QTYwMDAyNEVBRkZFMDI0ODIwMDAxMTRDMDAwMDMzMEE5MDBGRkUzCis6MTA2QTcwMDAwMDgwMTAyMTMxNDcwMEZGMDAwMjYwODAzQzBEODAwMDQzCis6MTA2QTgwMDAyNDBBMDAwMTAxOEQyMDIxM0MwQjAwMEUwMEVBMjgwNDlECis6MTA2QTkwMDAwMDhCMzAyMTExMjAwMDA1MDAwNTM4Mjc4Q0NFMDAwMDI2Cis6MTA2QUEwMDAwMUM1MzgyNTAzRTAwMDA4QUNDNzAwMDA4Q0Q4MDAwMDAxCis6MTA2QUIwMDAwMzA3NzgyNDAzRTAwMDA4QUNDRjAwMDAyN0JERkZFMDA3Cis6MTA2QUMwMDBBRkIxMDAxNEFGQjAwMDEwQUZCRjAwMTgzQzA3NjAwMEJBCis6MTA2QUQwMDA4Q0U0MDgwODM0MDJGMDAwM0MxMTYwMDAzMDgzRjAwMEMwCis6MTA2QUUwMDAyNDA1MDFDMDNDMDQ4MDBFMDAwMDMwMjExMDYyMDAwNjI1Cis6MTA2QUYwMDAyNDEwMDAwMThDRUEwODA4MzE0OUYwMDAzOTI4RTAwMDMwCis6MTA2QjAwMDAwMDA4MzgyQjAwMDc4MDQwM0MwRDAyMDBBRTJEMDgxNDExCis6MTA2QjEwMDAyNDBDMTY4MDNDMEI4MDAwOEUyNzQ0MDAwRTAwMEY4QjQ3Cis6MTA2QjIwMDBBRDZDMDAyQzEyMDAwMDA0M0MwMjE2OTEyNDA1MDAwMUZCCis6MTA2QjMwMDAxMjA1MDAxMDNDMDIzRDJDMzQ1ODAwRTBBRTM4NDQwOEU5Cis6MTA2QjQwMDAzQzExMDgwMDhFMzEwMDdDOEZCRjAwMTgzQzA2NjAwMEFECis6MTA2QjUwMDAwMDExODU0MDM2MEYxNjgwOEZCMTAwMTQ4RkIwMDAxMEUxCis6MTA2QjYwMDAzQzBFMDIwMDI3QkQwMDIwQUNDRjQ0MjAwM0UwMDAwODBCCis6MTA2QjcwMDBBQ0NFMDgxMDNDMDIxOERBMzQ1ODAwRTBBRTM4NDQwOEI1Cis6MTA2QjgwMDAzQzExMDgwMDhFMzEwMDdDOEZCRjAwMTgzQzA2NjAwMDZECis6MTA2QjkwMDAwMDExODU0MDM2MEYxNjgwOEZCMTAwMTQ4RkIwMDAxMEExCis6MTA2QkEwMDAzQzBFMDIwMDI3QkQwMDIwQUNDRjQ0MjAwM0UwMDAwOENCCis6MTA2QkIwMDBBQ0NFMDgxMDBBMDAwNEVCMjQwNTAwMDEwQTAwMDRFQjI3Cis6MTA2QkMwMDAwMDAwMjgyMTI0MDIwNDAwQTc4MjAwMjRBNzgwMDAxQ0MyCis6MTA2QkQwMDAwMDAwMjAyMTNDMDYwODAwMjRDNjVBNTgyNDA1RkZGRjY3Cis6MTA2QkUwMDAyNDg5MDAwMTAwMDQ0MDgwMzEyNEZGRkYwMTA2MTgyMUEwCis6MTA2QkYwMDAyQzg3MDAyMDE0RTBGRkZBQUM2NTAwMDAyNDA0MDQwMDk4Cis6MTA2QzAwMDBBNzg0MDAyNkE3ODAwMDFFMDAwMDIwMjEzQzA2MDgwMDYzCis6MTA2QzEwMDAyNEM2NUFEODI0MDVGRkZGMjQ4RDAwMDEwMDA0NjA4MDlCCis6MTA2QzIwMDAzMUE0RkZGRjAxODY1ODIxMkM4QTAwMjAxNTQwRkZGQTZECis6MTA2QzMwMDBBRDY1MDAwMEE3ODAwMDI4QTc4MDAwMjBBNzgwMDAyMjYzCis6MTA2QzQwMDAwMDAwMjAyMTNDMDYwODAwMjRDNjVCNTgyNDA1RkZGRkY1Cis6MTA2QzUwMDAyNDk5MDAwMTAwMDRDMDgwMzMyNEZGRkYwMzA2NzgyMTNCCis6MTA2QzYwMDAyQzhFMDAwNDE1QzBGRkZBQURFNTAwMDAzQzA1NjAwMDY1Cis6MTA2QzcwMDA4Q0E3M0QwMDI0MDNFMDhGMDBFMzEwMjQzNDQ2MDE0MDNDCis6MTA2QzgwMDAwM0UwMDAwOEFDQTYzRDAwMjQ4NzAwN0YwMDA3MzFDMjY2Cis6MTA2QzkwMDAyNEM1RkZGRjAwMDUxOEMyMjQ2NDAwMDEzMDgyRkZGRkY1Cis6MTA2Q0EwMDAwMDAyMzhDMEE3ODQwMDMwM0MwMTA4MDBBQzI3MDAzMDQ3Cis6MTA2Q0IwMDBBRjgwMDAyQzAwMDAyODIxMDAwMDIwMjEwMDAwMzAyMTlFCis6MTA2Q0MwMDAyNDg5MDAwMTAwQTcyODIxMzEyNEZGRkYyQ0E4MTcwMUU3Cis6MTA2Q0QwMDAxMTAwMDAwMzJDODMwMDgwMTQ2MEZGRjkyNEM2MDAwMTFBCis6MTA2Q0UwMDAwMEMwMjgyMUFGODYwMDJDMTBDMDAwMURBNzg2MDAyQUY2Cis6MTA2Q0YwMDAyNENBRkZGRjAwMEExMTQyM0MwODA4MDAyNTA4NUI1ODFGCis6MTA2RDAwMDAxMDQwMDAwQTAwMDAyMDIxMDA0MDMwMjEyNDA3RkZGRjJFCis6MTA2RDEwMDAyNDhFMDAwMTAwMDQ2ODgwMzFDNEZGRkYwMUE4NjAyMUI3Cis6MTA2RDIwMDAwMDg2NTgyQjE1NjBGRkZBQUQ4NzAwMDAzMEEyMDAxRkM3Cis6MTA2RDMwMDA1MDQwMDAwODAwMDQzMDgwMjQwMzAwMDEwMDQzQzgwNEQwCis6MTA2RDQwMDAwMDA0MTA4MDAwNDg3ODIxMjczOEZGRkYwM0UwMDAwODg2Cis6MTA2RDUwMDBBREY4MDAwMDAwQzgyMDIxMjQwNUZGRkZBQzg1MDAwMDJECis6MTA2RDYwMDAwM0UwMDAwODAwMDAwMDAwMzBBNUZGRkYzMEM2RkZGRjcxCis6MTA2RDcwMDAzMEE4MDAxRjAwODA2MDIxMzBFNzAwRkYwMDA1Mjk0Mjk1Cis6MTA2RDgwMDAwMDAwNTAyMTEwQzAwMDFEMjQwOTAwMDEyNDBCMDAwMTQ3Cis6MTA2RDkwMDAyNTE4MDAwMTAxMEIyMDA0MzMwODAwRkYwMTI2NzgyNjg2Cis6MTA2REEwMDAzOTBFMDAyMDJERUQwMDAxMkRDMjAwMDEwMUEyMTgyNTkxCis6MTA2REIwMDAxMDYwMDAwRDAxNDQ1MDI1MDAwNUM4ODAwMzJDNDAyMUJGCis6MTA2REMwMDAwMTAwMTgyMTEwRTAwMDBGMDAwQTIwMjc4RDA0MDAwMEE4Cis6MTA2REQwMDAwMDhBMTgyNUFEMDMwMDAwMjRBRDAwMDEwMDAwNDAyMTA5Cis6MTA2REUwMDAwMDAwNTAyMTMxQTVGRkZGMjUyRTAwMDEzMUM5RkZGRjEyCis6MTA2REYwMDAwMEM5MTAyQjEwNDBGRkU3MjUxODAwMDEwM0UwMDAwODMwCis6MTA2RTAwMDAwMDAwMDAwMDhEMEEwMDAwMDE0NDQwMjQwQTAwMDVEMTYyCis6MTA2RTEwMDBBQzY4MDAwMDI3QkRGRkU4MzBBNUZGRkYzMEM2RkZGRkNDCis6MTA2RTIwMDBBRkIwMDAxMEFGQkYwMDE0MzBFN0ZGRkYwMDAwNTAyMUVCCis6MTA2RTMwMDAzNDEwRkZGRjAwMDA2MDIxMjRBRjAwMUYwMEMwNDgyMTc0Cis6MTA2RTQwMDAyNDE4MDAwMTI0MTkwMDIwMDVFMDAwMTYwMUUwMTAyMTlCCis6MTA2RTUwMDAwMDAyRjk0MzAxOUY2ODJBMDAwOTcwMkIwMUFFNDAyNDBCCis6MTA2RTYwMDAxMTAwMDAxNzAwMEMxODgwMDA2NDEwMjExMEUwMDAwNUNDCis6MTA2RTcwMDA4QzRCMDAwMDAwRjg0MDA0MDAwODM4MjMwMTY3NTgyNEI4Cis6MTA2RTgwMDAwMDAwMzgyMTE1NDAwMDQxMDAwMDQwMjE1NTYwMDAxNkU3Cis6MTA2RTkwMDAzMTY5RkZGRjI1OEIwMDAxMzE2Q0ZGRkYwNUUxRkZFQzNECis6MTA2RUEwMDAwMUUwMTAyMTI0QTIwMDNFMDAwMkY5NDMwMTlGNjgyQTVDCis6MTA2RUIwMDAwMDA5NzAyQjAxQUU0MDI0MTUwMEZGRUIwMDBDMTg4MDc4Cis6MTA2RUMwMDAxNTQ2MDAwNTM0MDJGRkZGMDIwMDI4MjEwRTAwMDVCNTFCCis6MTA2RUQwMDAwMDAwMzgyMTAyMDAxMDIxOEZCRjAwMTQ4RkIwMDAxMDc1Cis6MTA2RUUwMDAwM0UwMDAwODI3QkQwMDE4MTUyMDAwMDMwMTYwMTgyMUU5Cis6MTA2RUYwMDAwMDBCMUMwMjI0MDgwMDEwMzA2QTAwRkYxNTQwMDAwNTNBCis6MTA2RjAwMDAzMDZFMDAwRjI1MEQwMDA4MDAwMzFBMDIzMUE4MDBGRkEzCis6MTA2RjEwMDAzMDZFMDAwRjE1QzAwMDA1MzA3RjAwMDMyNTEwMDAwNEZGCis6MTA2RjIwMDAwMDAzMTkwMjMyMDgwMEZGMzA3RjAwMDMxN0UwMDAwNTVDCis6MTA2RjMwMDAzODY5MDAwMTI1MDIwMDAyMDAwMzE4ODIzMDQ4MDBGRjcyCis6MTA2RjQwMDAzODY5MDAwMTMxMjMwMDAxMTA2MDAwMDQzMTAzMDBGRkEzCis6MTA2RjUwMDAyNTBBMDAwMTMxNDgwMEZGMzEwMzAwRkYwMDBDNjk0MEExCis6MTA2RjYwMDAwMUEzNDAyMTI0MEEwMDAxMTBDQUZGRDUzMTEwRkZGRjAwCis6MTA2RjcwMDAyNDZFMDAwMTMxQzgwMEZGMTExOUZGQzYzOEM5MDAwMTk1Cis6MTA2RjgwMDAyRDFGMDAyMDUzRTAwMDFDMjU4QjAwMDEyNDBEMDAwMTYzCis6MTA2RjkwMDAwQTAwMDY0ODI0MEUwMDIwNTE0NjAwMTcyNThCMDAwMUU4Cis6MTA2RkEwMDAyNTA5MDAwMTMxMjgwMEZGMkQwOTAwMjA1MTIwMDAxMjgxCis6MTA2RkIwMDAyNThCMDAwMTI1NDMwMDAxMDEwRDUwMDQwMTRCMTAyNEQ1Cis6MTA2RkMwMDAyNTA5MDAwMTE0NDBGRkY0MzA2QUZGRkYzMTI3RkZGRjVECis6MTA2RkQwMDAxMEVFMDAwQzI1ODJGRkZGMzA0Q0ZGRkYwMDAwNTAyMTE3Cis6MTA2RkUwMDAzNDEwRkZGRjMxMjgwMEZGMkQwOTAwMjA1NTIwRkZGMjRCCis6MTA2RkYwMDAyNTQzMDAwMTI1OEIwMDAxMDE0NjQ4MjYwQTAwMDYwMkIwCis6MTA3MDAwMDAzMTZDRkZGRjAwMDAzODIxMDAwMDUwMjEwQTAwMDY1NEI3Cis6MTA3MDEwMDAzNDEwRkZGRjI3QkRGRkQ4QUZCMDAwMTAzMEYwRkZGRkU2Cis6MTA3MDIwMDBBRkIxMDAxNDAwMTAzOTQyMzIxMUZGRTAwMDA3MTA4MEE4Cis6MTA3MDMwMDBBRkIzMDAxQzAwQjEyODIzMzBEM0ZGRkZBRkIyMDAxODVDCis6MTA3MDQwMDAzMEE1RkZGRjAwODA5MDIxMDI2MDMwMjEwMDQ0MjAyMTA0Cis6MTA3MDUwMDBBRkJGMDAyMDBFMDAwNUUwMzIwNzAwMUYwMjIyODgyMThBCis6MTA3MDYwMDAzNDAzRkZGRjAyNDAyMDIxMDIwMDI4MjEwMjYwMzAyMTZBCis6MTA3MDcwMDAwMDAwMzgyMTEwNDMwMDA5MzIzMUZGRkYwMjIwMTAyMUE3Cis6MTA3MDgwMDA4RkJGMDAyMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNDg3Cis6MTA3MDkwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjgwRTAwMDVFMEI3Cis6MTA3MEEwMDAwMDAwMDAwMDAwNDA4ODIxMDIyMDEwMjE4RkJGMDAyMDM2Cis6MTA3MEIwMDA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDc2Cis6MTA3MEMwMDAwM0UwMDAwODI3QkQwMDI4MDAwNDI0MDAzQzAzNjAwMDAyCis6MTA3MEQwMDBBQzYwM0QwODEwQTAwMDAyMzQ4MjEwMDYzNDgyMTAxNjA1Cis6MTA3MEUwMDAwM0UwMDAwOEFDNjIzRDA0MjdCREZGRTBBRkIwMDAxMDM0Cis6MTA3MEYwMDAzMDkwMDBGRjJFMDIwMDA2QUZCRjAwMTgxMDQwMDAwOEJECis6MTA3MTAwMDBBRkIxMDAxNDAwMTAzMDgwM0MwMzA4MDAyNDYzNTc4NEEyCis6MTA3MTEwMDAwMEMzMjgyMThDQTQwMDAwMDA4MDAwMDgwMDAwMDAwMEFCCis6MTA3MTIwMDAwMDAwMjAyMThGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDE1Cis6MTA3MTMwMDAwMDgwMTAyMTAzRTAwMDA4MjdCRDAwMjA5NzkxMDAyQTVECis6MTA3MTQwMDAxNjIwMDA1MTAwMDAyMDIxM0MwMjA4MDA5MDQyMDAzMzJDCis6MTA3MTUwMDAwQTAwMDZCQjAwMDAwMDAwOTc4RDAwMjYxNUEwMDAzMTM0Cis6MTA3MTYwMDAwMDAwMjAyMTBBMDAwNkJCMjQwMjAwMDg5Nzg3MDAyNEEzCis6MTA3MTcwMDAxNEUwMDAxQTAwMDAxODIxMDA2MDIwMjEyNDAyMDAwMTAwCis6MTA3MTgwMDAxMDgwRkZFOThGQkYwMDE4MDAwNDI5QzIwMDQ1MzAyMTlDCis6MTA3MTkwMDAwMEE2NTgyQjExNjBGRkU0M0MwODgwMDAzQzA3MjAwMDRCCis6MTA3MUEwMDAwMDA1NjlDMDAxQTc2MDI1QUQwQzAwMjAzQzAzODAwOEU0Cis6MTA3MUIwMDAyNDAyMDAxRjI0NDJGRkZGQUM2MDAwMDAwNDQxRkZGREQ5Cis6MTA3MUMwMDAyNDYzMDAwNDI0QTUwMDAxMDBBNjcwMkIxNUMwRkZGNTYwCis6MTA3MUQwMDAwMDA1NjlDMDBBMDAwNkE1OEZCRjAwMTg5Nzg3MDAxQzJDCis6MTA3MUUwMDAzQzA0MDgwMDI0ODQ1QTU4MjQwNTA0MDAwRTAwMDY2MDVDCis6MTA3MUYwMDAyNDA2MDAwMTk3OEIwMDI0MjQ0NDAwMDEzMDhBRkZGRkZECis6MTA3MjAwMDAyNTY5RkZGRjJENDgwNDAwMDA0MDI4MjExNTAwMDA0MDlCCis6MTA3MjEwMDBBNzg5MDAyNDI0QUMzODAwMDAwQzE5QzAwQTAwMDZCOTY0Cis6MTA3MjIwMDBBNzgwMDAxQzk3ODcwMDFFM0MwNDA4MDAyNDg0NUFEOEJECis6MTA3MjMwMDAyNDA1MDQwMDBFMDAwNjYwMjQwNjAwMDE5Nzk5MDAyNjJDCis6MTA3MjQwMDAyNDQ0MDAwMTMwOThGRkZGMjcyRkZGRkYyRjBFMDQwMDdBCis6MTA3MjUwMDAwMDQwODgyMTE1QzAwMDJDQTc4RjAwMjZBNzgwMDAxRUEzCis6MTA3MjYwMDAzQTAyMDAwMzI2MjQwMTAwMzA4NEZGRkYwRTAwMDY4RDQxCis6MTA3MjcwMDAyQzQ1MDAwMTAwMTFGOEMwMjdGMDAxMDAwMDEwMjFDMENBCis6MTA3MjgwMDAwQTAwMDZCQjI0MDIwMDA4OTc4NTAwMkU5Nzg3MDAyMjdCCis6MTA3MjkwMDAzQzA0MDgwMDI0ODQ1QjU4MEUwMDA2NjAyNDA2MDAwMUFDCis6MTA3MkEwMDA5Nzg3MDAyQThGODkwMDJDMjQ0NTAwMDEzMEE4RkZGRjEyCis6MTA3MkIwMDAyNEUzRkZGRjAxMDkzMDJCMDA0MDgwMjExNEMwMDAxODk3Cis6MTA3MkMwMDBBNzgzMDAyQUE3ODAwMDIyOTc4NTAwMzAwRTAwMEY3NTQzCis6MTA3MkQwMDAwMjAwMjAyMTI0NEEwNTAwMzE0NEZGRkYwRTAwMDY4REU0Cis6MTA3MkUwMDAyNDA1MDAwMTNDMDUwODAwOTRBNTAwMzIwRTAwMEY3NTJFCis6MTA3MkYwMDAwMjAwMjAyMTI0NDUyMTAwM0MwMjA4MDA5MDQyMDAzMzc2Cis6MTA3MzAwMDAwQTAwMDZCQjAwMDUyMUMwMEEwMDA2RjNBNzg0MDAxRTgwCis6MTA3MzEwMDAyNEFDMzgwMDAwMEMxOUMwMEEwMDA2QjlBNzg0MDAxQzcwCis6MTA3MzIwMDAwQTAwMDcwREE3ODUwMDIyMzA4NDAwRkYyN0JERkZFODczCis6MTA3MzMwMDAyQzgyMDAwNkFGQkYwMDE0QUZCMDAwMTAxMDQwMDAxNTQzCis6MTA3MzQwMDAwMEEwMzgyMTAwMDQ0MDgwM0MwMzA4MDAyNDYzNTc5Q0JGCis6MTA3MzUwMDAwMTAzMjgyMThDQTQwMDAwMDA4MDAwMDgwMDAwMDAwMDI4Cis6MTA3MzYwMDAyNENDMDA3RjAwMDc1MUMyMDAwQzU5QzIzMTcwRkZGRkNFCis6MTA3MzcwMDAyNTQ3QzQwMDMwRTVGRkZGMjc4NDAwMUMwMjAwMzAyMUIwCis6MTA3MzgwMDAwRTAwMDVCNTI0MDcwMDAxOTc4NjAwMjgwMjA2MjAyMTdCCis6MTA3MzkwMDBBNzg0MDAyODhGQkYwMDE0OEZCMDAwMTAwM0UwMDAwOEZFCis6MTA3M0EwMDAyN0JEMDAxODNDMDUwODAwOENBNTAwMzAwMDA3NzlDMkY1Cis6MTA3M0IwMDAwRTAwMDM4MTI1RTRERjAwMzA0NUZGRkYzQzA0MDgwMDk4Cis6MTA3M0MwMDAyNDg0NUI1ODI0MDYwMDAxMEUwMDA1QjUyNDA3MDAwMTQzCis6MTA3M0QwMDA5NzhFMDAyQThGQkYwMDE0OEZCMDAwMTAyNUNEMDAwMUJBCis6MTA3M0UwMDAyN0JEMDAxODAzRTAwMDA4QTc4RDAwMkEwMDA3QzlDMkM2Cis6MTA3M0YwMDAyNzM4RkYwMDAwMTg3OEMyMzFGMEZGRkYzQzA0MDgwMDc2Cis6MTA3NDAwMDAyNDg0NUFEODAyMDAyODIxMjQwNjAwMDEwRTAwMDVCNTY0Cis6MTA3NDEwMDAyNDA3MDAwMTk3OEQwMDI2MjYwRTAxMDAwMDBFODQwMDJGCis6MTA3NDIwMDAyNUFDMDAwMTNDMEI2MDAwQTc4QzAwMjZBRDYwM0QwODM4Cis6MTA3NDMwMDAzNjA0MDAwNjAwMDAzMDIxM0MwNzYwMDA4Q0UyM0QwNDY5Cis6MTA3NDQwMDAzMDVGMDAwNjE3RTBGRkZEMjRDOTAwMDEwMDA2MUIwMEE1Cis6MTA3NDUwMDAzMTI2MDBGRjAwNjQ0MDI1MkNDNTAwMDRBQ0U4M0QwNDQzCis6MTA3NDYwMDAxNEEwRkZGNjhGQkYwMDE0OEZCMDAwMTAwM0UwMDAwOEQ3Cis6MTA3NDcwMDAyN0JEMDAxODAwMDc1MUMyMjU0OUM4MDAyNDA2MDAwMTk1Cis6MTA3NDgwMDAyNDA3MDAwMTNDMDQwODAwMjQ4NDVBNTgwRTAwMDVCNTY2Cis6MTA3NDkwMDAzMTI1RkZGRjk3ODcwMDI0OEZCRjAwMTQ4RkIwMDAxMEE1Cis6MTA3NEEwMDAyNEU2MDAwMTI3QkQwMDE4MDNFMDAwMDhBNzg2MDAyNDk5Cis6MTA3NEIwMDAzQzA2NjAxODNDMDkwODAwMjUyOTAwRkNBQ0M5NTAyQzhBCis6MTA3NEMwMDA4Q0M4NTAwMDNDMDU4MDAwM0MwMjAwMDIzNTA3MDA4MDVCCis6MTA3NEQwMDBBQ0M3NTAwMDNDMDQwODAwMjQ4NDFGRTAzQzAzMDgwMEIzCis6MTA3NEUwMDAyNDYzMUY5OEFDQTUwMDA4QUNBMjAwMEMzQzAxMDgwMDY2Cis6MTA3NEYwMDBBQzI0NTlBNDNDMDEwODAwQUMyMzU5QTgwM0UwMDAwOEJGCis6MTA3NTAwMDAyNDAyMDAwMTAwQTAzMDIxM0MxQzA4MDAyNzlDNTlBQzNCCis6MTA3NTEwMDAzQzBDMDQwMDNDMEIwMDAyMDA4QjM4MjYwMDhDNDAyNkZCCis6MTA3NTIwMDAyQ0UyMDAwMTAwMDc1MDJCMkQwNTAwMDEwMDBBNDg4MEM1Cis6MTA3NTMwMDAzQzAzMDgwMDI0NjM1OUE0MDA0NTIwMjUwMTIzMTgyMTk5Cis6MTA3NTQwMDAxMDgwMDAwMzAwMDAxMDIxQUM2NjAwMDAyNDAyMDAwMTNFCis6MTA3NTUwMDAwM0UwMDAwODAwMDAwMDAwM0MxQzA4MDAyNzlDNTlBQzE4Cis6MTA3NTYwMDAzQzBCMDQwMDNDMEEwMDAyMDA4QTMwMjYwMDhCMzgyNkJGCis6MTA3NTcwMDAyQ0MyMDAwMTAwMDY0ODJCMkNFNTAwMDEwMDA5NDA4MEM4Cis6MTA3NTgwMDAzQzAzMDgwMDI0NjM1OUE0MDA0NTIwMjUwMTAzMTgyMTY5Cis6MTA3NTkwMDAxMDgwMDAwNTAwMDAxMDIxM0MwQzA4MDAyNThDMUY5ODZECis6MTA3NUEwMDBBQzZDMDAwMDI0MDIwMDAxMDNFMDAwMDgwMDAwMDAwMEIxCis6MTA3NUIwMDAzQzA5MDAwMjNDMDgwNDAwMDA4ODMwMjYwMDg5MzgyNjc3Cis6MTA3NUMwMDAyQ0MzMDAwMTAwODAyODIxMkNFNDAwMDEwMDgzMTAyNTM5Cis6MTA3NUQwMDAxMDQwMDAwQjAwMDAzMDIxM0MxQzA4MDAyNzlDNTlBQ0Q3Cis6MTA3NUUwMDAzQzBBODAwMDhENEUwMDA4MjQwNjAwMDEwMUNBNjgyNTZGCis6MTA3NUYwMDBBRDREMDAwODhENEMwMDBDMDE4NTU4MjVBRDRCMDAwQzlECis6MTA3NjAwMDAwM0UwMDAwODAwQzAxMDIxM0MxQzA4MDAyNzlDNTlBQzc2Cis6MTA3NjEwMDAzQzA1ODAwMDhDQTYwMDBDMDAwNDIwMjcyNDAyMDAwMUY5Cis6MTA3NjIwMDAwMEM0MTgyNDAzRTAwMDA4QUNBMzAwMEMzQzAyMDAwMkQ0Cis6MTA3NjMwMDAxMDgyMDAwQjNDMDU2MDAwM0MwNzA0MDAxMDg3MDAwMzJCCis6MTA3NjQwMDAwMDAwMDAwMDAzRTAwMDA4MDAwMDAwMDA4Q0E5MDhEMDQyCis6MTA3NjUwMDAyNDBBRkZGRDAxMkE0MDI0MDNFMDAwMDhBQ0E4MDhEMDVBCis6MTA3NjYwMDA4Q0E0MDhEMDI0MDZGRkZFMDA4NjE4MjQwM0UwMDAwODNFCis6MTA3NjcwMDBBQ0EzMDhEMDNDMDU2MDFBMzRBNjAwMTA4Q0MzMDA4MDZGCis6MTA3NjgwMDAyN0JERkZGODhDQzUwMDg0QUZBMzAwMDA5M0E0MDAwMEMxCis6MTA3NjkwMDAyNDAyMDAxMDEwODIwMDAzQUZBNTAwMDQwM0UwMDAwOERDCis6MTA3NkEwMDAyN0JEMDAwODkzQTcwMDAxMTRFMDAwMTQ5N0FDMDAwMjY2Cis6MTA3NkIwMDA5N0I4MDAwMjNDMEY4MDAwMzMwRUZGRkMwMUNGNjgyMTE5Cis6MTA3NkMwMDBBREE1MDAwMEEzQTAwMDAwM0MwNjYwMDA4Q0M3MDhEMDU4Cis6MTA3NkQwMDAyNDA4RkZGRTNDMDQ2MDFBMDBFODI4MjRBQ0M1MDhEMDRBCis6MTA3NkUwMDA4RkEzMDAwNDhGQTIwMDAwMzQ5OTAwMTAyN0JEMDAwODZBCis6MTA3NkYwMDBBRjIyMDA4MDAzRTAwMDA4QUYyMzAwODQzQzBCODAwMDMxCis6MTA3NzAwMDAzMThBRkZGQzAxNEI0ODIxOEQyODAwMDAwQTAwMDgwQzNCCis6MTA3NzEwMDBBRkE4MDAwNDI3QkRGRkU4QUZCRjAwMTAzQzFDMDgwMDY1Cis6MTA3NzIwMDAyNzlDNTlBQzNDMDU4MDAwOENBNDAwMEM4Q0EyMDAwNDYyCis6MTA3NzMwMDAzQzAzMDAwMjAwNDQyODI0MTBBMDAwMEEwMEEzMTgyNERGCis6MTA3NzQwMDAzQzA2MDQwMDNDMDQwMDAyMTQ2MDAwMDkwMEE2MTAyNDVBCis6MTA3NzUwMDAxNDQwMDAwRjNDMDQwNDAwMDAwMDAwMEQzQzFDMDgwMDE1Cis6MTA3NzYwMDAyNzlDNTlBQzhGQkYwMDEwMDNFMDAwMDgyN0JEMDAxODBDCis6MTA3NzcwMDAzQzAyMDgwMDhDNDI1OUE0MDA0MEY4MDkwMDAwMDAwMEI3Cis6MTA3NzgwMDAzQzFDMDgwMDI3OUM1OUFDMEEwMDA4MzU4RkJGMDAxMDJDCis6MTA3NzkwMDAzQzAyMDgwMDhDNDI1OUE4MDA0MEY4MDkwMDAwMDAwMDkzCis6MTA3N0EwMDAwQTAwMDgzQjAwMDAwMDAwM0MwODgwMDA4RDAyMDFCODgwCis6MTA3N0IwMDAwNDQwRkZGRTM1MDkwMTgwQUQyNDAwMDAzQzAzMTAwMEE5Cis6MTA3N0MwMDAyNDA0MDA0MEFEMjUwMDA0QTEyNDAwMDhBMTI2MDAwOURFCis6MTA3N0QwMDBBNTI3MDAwQTAzRTAwMDA4QUQwMzAxQjgzMDg0RkZGRkNECis6MTA3N0UwMDAwMDgwMzgyMTMwQTVGRkZGMDAwMDIwMjEwQTAwMDg0NTU1Cis6MTA3N0YwMDAyNDA2MDA4MDMwODdGRkZGOENBNDAwMDAyNDA2MDAzODk4Cis6MTA3ODAwMDAwQTAwMDg0NTAwMDAyODIxOEY4MzAwNzg4Rjg2MDA3MEM5Cis6MTA3ODEwMDAxMDY2MDAwQjAwODA0MDIxM0MwNzA4MDAyNEU3NUI2OEVECis6MTA3ODIwMDAwMDAzMjhDMDAwQTcxMDIxOEM0NDAwMDAyNDYzMDAwMTNECis6MTA3ODMwMDAxMDg4MDAwNTMwNjMwMDBGNTQ2NkZGRkEwMDAzMjhDMDZCCis6MTA3ODQwMDAwM0UwMDAwODAwMDAxMDIxM0MwNzA4MDAyNEU3NUI2Q0ZGCis6MTA3ODUwMDAwMEE3MzAyMTAzRTAwMDA4OENDMjAwMDAzQzAzOTAwMDI4Cis6MTA3ODYwMDAzNDYyMDAwMTAwODIyMDI1M0MwMzgwMDBBQzY0MDAyMENCCis6MTA3ODcwMDA4QzY1MDAyMDA0QTBGRkZFMDAwMDAwMDAwM0UwMDAwODZCCis6MTA3ODgwMDAwMDAwMDAwMDNDMDI4MDAwMzQ0MzAwMDEwMDgzMjAyNUZBCis6MTA3ODkwMDAwM0UwMDAwOEFDNDQwMDIwMjdCREZGRTBBRkIxMDAxNEI2Cis6MTA3OEEwMDAzMDkxRkZGRkFGQjAwMDEwQUZCRjAwMTgxMjIwMDAxM0RGCis6MTA3OEIwMDAwMEEwODAyMThDQTIwMDAwMjQwNDAwMDIyNDA2MDIwMDAzCis6MTA3OEMwMDAxMDQwMDAwRjAwNDAyODIxMEUwMDA3MjUwMDAwMDAwMDk2Cis6MTA3OEQwMDAwMDAwMTAyMUFFMDAwMDAwMDIyMDM4MjE4RkJGMDAxOEU4Cis6MTA3OEUwMDA4RkIxMDAxNDhGQjAwMDEwMDA0MDIwMjEwMDAwMjgyMTJCCis6MTA3OEYwMDAwMDAwMzAyMTBBMDAwODQ1MjdCRDAwMjA4Q0EyMDAwMEFFCis6MTA3OTAwMDAwMjIwMzgyMThGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMEYzCis6MTA3OTEwMDAwMDQwMjAyMTAwMDAyODIxMDAwMDMwMjEwQTAwMDg0NUY1Cis6MTA3OTIwMDAyN0JEMDAyMDAwQTAxMDIxMzA4N0ZGRkY4Q0E1MDAwNDk4Cis6MTA3OTMwMDA4QzQ0MDAwMDBBMDAwODQ1MjQwNjAwMDY4RjgzRkQ5QzQ1Cis6MTA3OTQwMDAyN0JERkZFOEFGQkYwMDE0QUZCMDAwMTA5MDY3MDAwODdDCis6MTA3OTUwMDAwMDgwMTAyMTAwODAyODIxMzBFNjAwNDAwMDAwMjAyMTE2Cis6MTA3OTYwMDAxMEMwMDAwODhDNTAwMDAwMEUwMDAwQkQwMjAwMjAyMTU1Cis6MTA3OTcwMDAwMjAwMjAyMThGQkYwMDE0OEZCMDAwMTAwQTAwMDU0OEJDCis6MTA3OTgwMDAyN0JEMDAxODBFMDAwOEE0MDAwMDAwMDAwRTAwMDBCRDc2Cis6MTA3OTkwMDAwMjAwMjAyMTAyMDAyMDIxOEZCRjAwMTQ4RkIwMDAxMEIwCis6MTA3OUEwMDAwQTAwMDU0ODI3QkQwMDE4MjdCREZGRTBBRkIwMDAxMDUyCis6MTA3OUIwMDA4RjkwRkQ5Q0FGQkYwMDFDQUZCMjAwMThBRkIxMDAxNDk4Cis6MTA3OUMwMDA5MjA2MDAwMTAwODA4ODIxMEUwMDA4NzIzMEQyMDAwNDY3Cis6MTA3OUQwMDA5MjA0MDAwNTAwMTEyOUMyQTYwNTAwMDAzNDgzMDA0MDZFCis6MTA3OUUwMDBBMjAzMDAwNTBFMDAwODdDMDIyMDIwMjEwRTAwMDU0QTlCCis6MTA3OUYwMDAwMjIwMjAyMTI0MDIwMDAxQUUwMjAwMEMwMjIwMjgyMUQ2Cis6MTA3QTAwMDBBNjAyMDAxMDI0MDQwMDAyQTYwMjAwMTIyNDA2MDIwMEFFCis6MTA3QTEwMDBBNjAyMDAxNDBFMDAwNzI1QTYwMjAwMTYxNjQwMDAwRjRECis6MTA3QTIwMDA4RkJGMDAxQzk3OEMwMDc0M0MwQjA4MDA4RDZCMDA3ODk2Cis6MTA3QTMwMDAyNTg4RkZGRjMxMDlGRkZGMjU2QTAwMDEwMTJBMzgyQjQ1Cis6MTA3QTQwMDAxMEUwMDAwNkE3ODgwMDc0M0MwRjYwMDYyNDBFMDAxNkE0Cis6MTA3QTUwMDAzNUVEMDAxMEFEQUUwMDUwOEZCRjAwMUM4RkIyMDAxODg2Cis6MTA3QTYwMDA4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAyMDg0Cis6MTA3QTcwMDAyN0JERkZFMEFGQjEwMDE0QUZCRjAwMThBRkIwMDAxMERBCis6MTA3QTgwMDAxMDgwMDAwNDAwQTA4ODIxMjQwMjAwODAxMDgyMDAwN0RBCis6MTA3QTkwMDAwMDAwMDAwMDAwMDAwMDBEOEZCRjAwMTg4RkIxMDAxNDFGCis6MTA3QUEwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjAwRTAwMDg3MjEwCis6MTA3QUIwMDAwMEEwMjAyMThGODZGRDlDMDIyMDIwMjE5MEM1MDAwNTdBCis6MTA3QUMwMDAwRTAwMDg3QzMwQjAwMEZGMjQwMzAwM0UxNjAzRkZGMUQ3Cis6MTA3QUQwMDAzQzA2ODAwMDhDQzQwMTc4MDQ4MEZGRkUzNEM4MDE0MDVECis6MTA3QUUwMDAyNDA5MDAwNzNDMDcxMDAwQUQxMTAwMDAwMjIwMjAyMUVFCis6MTA3QUYwMDBBMTA5MDAwNDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMENGCis6MTA3QjAwMDBBQ0M3MDE3ODBBMDAwOEM1MjdCRDAwMjAyN0JERkZFMEVCCis6MTA3QjEwMDBBRkIwMDAxMEFGQkYwMDE4QUZCMTAwMTQzQzEwODAwMDMwCis6MTA3QjIwMDA4RTExMDAyMDAwMDAwMDAwMEUwMDA1NEFBRTA0MDAyMDY3Cis6MTA3QjMwMDBBRTExMDAyMDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDVECis6MTA3QjQwMDAwM0UwMDAwODI3QkQwMDIwMzA4NEZGRkYwMDgwMzgyMUJCCis6MTA3QjUwMDAyNDA2MDAzNTAwQTAyMDIxMEEwMDA4NDUwMDAwMjgyMTQ1Cis6MTA3QjYwMDAzMDg0RkZGRjAwODAzODIxMjQwNjAwMzYwMEEwMjAyMTQ5Cis6MTA3QjcwMDAwQTAwMDg0NTAwMDAyODIxMjdCREZGRDBBRkI1MDAyNDJBCis6MTA3QjgwMDAzMDk1RkZGRkFGQjYwMDI4QUZCNDAwMjBBRkJGMDAyQzg4Cis6MTA3QjkwMDBBRkIzMDAxQ0FGQjIwMDE4QUZCMTAwMTRBRkIwMDAxMDBCCis6MTA3QkEwMDAzMEI2RkZGRjEyQTAwMDI3MDAwMEEwMjE4RjkyMDA1OERFCis6MTA3QkIwMDA4RTQzMDAwMDNDMDY4MDAwMjQwMjAwNDAwMDAzM0UwMjg5Cis6MTA3QkMwMDAwMDAzMkMwMjMwRTQwMDdGMDA2Njk4MjQxNDgyMDAxRDFDCis6MTA3QkQwMDAzMEE1MDBGRjhGODMwMDY4MkM2ODAwMEExMTAwMDAxMDk4Cis6MTA3QkUwMDA4RjhEMDA0NDAwMDM1ODgwM0MwQzA4MDAyNThDNTdCODRBCis6MTA3QkYwMDAwMTZDNTAyMThENDkwMDAwMDEyMDAwMDgwMDAwMDAwMEE4Cis6MTA3QzAwMDAwMkQ0MzAyMTMwQzVGRkZGMEUwMDA4NTIyNDA0MDA4NDQ2Cis6MTA3QzEwMDAxNjYwMDAwMjhGOTIwMDU4QUY4MDAwNjg4RjhEMDA0NDdDCis6MTA3QzIwMDAyNjU5MDAyMDI2OTgwMDAxMDMyMDkwMjEzMzE0RkZGRkRECis6MTA3QzMwMDAxNUEwMDAwNEFGOTkwMDU4MDI5NTIwMkIxNDgwRkZEQzlBCis6MTA3QzQwMDAwMDAwMDAwMDAyODAxMDIxOEZCRjAwMkM4RkI2MDAyODlBCis6MTA3QzUwMDA4RkI1MDAyNDhGQjQwMDIwOEZCMzAwMUM4RkIyMDAxOEEyCis6MTA3QzYwMDA4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAzMDcyCis6MTA3QzcwMDAyNDA3MDAzNDE0QTcwMTQ5MDAwMDAwMDA5MjQ3MDAwRUI5Cis6MTA3QzgwMDA4RjlGRkRBMDhGOTBGRDlDMjQxODE2MDBBM0U3MDAxOTdDCis6MTA3QzkwMDA5MjQyMDAwRDNDMDg4MDAwM0MwNzgwMENBM0UyMDAxOEQzCis6MTA3Q0EwMDA5NjRBMDAxMjNDMEQ2MDAwM0MxMTdGRkZBNjBBMDA1QzYyCis6MTA3Q0IwMDA5NjQ0MDAxMDM2MjNGRkZGMjQwMjAwMDUzMDk5RkZGRjkxCis6MTA3Q0MwMDBBRTE5MDA1NDhFNDYwMDFDQUQxODAwMjg4Q0VGMDAwMDQxCis6MTA3Q0QwMDA4REFFNDQ0ODAxRTY0ODI2MDFDOTMwMjFBRTA2MDAzODgxCis6MTA3Q0UwMDA4RTA1MDAzODI0Q0IwMDAxM0MwRTdGMDBBRTA1MDAzQzIxCis6MTA3Q0YwMDA4RTBDMDAzQ0FGRUMwMDA0QUUwQjAwMjA4RTEzMDAyMDc1Cis6MTA3RDAwMDBBRTEzMDAxQ0EzRTAwMDFCQUUwMzAwMkNBM0UyMDAxMjg0Cis6MTA3RDEwMDA4RTRBMDAxNDI0MTMwMDUwQUUwQTAwMzQ4RTA0MDAzNDNFCis6MTA3RDIwMDBBRkU0MDAxNDhFNTkwMDE4QUUxOTAwNDg5MjU4MDAwQ0E4Cis6MTA3RDMwMDBBMjE4MDA0RTkyMEQwMDA4MzVBRjAwMjBBMjBGMDAwOEQ3Cis6MTA3RDQwMDA4RTA5MDAxODAxMkUyODI0MzRBQzQwMDBBRTBDMDAxODE3Cis6MTA3RDUwMDA5MjBCMDAwMDMxNzIwMEZGMTI1MzAyN0YyNDAzRkY4MDU4Cis6MTA3RDYwMDAzQzA0MDgwMDI0ODQ1QkU4MEUwMDA4QUEwMDAwMDAwMDIwCis6MTA3RDcwMDAzQzExMDgwMDhFMzE1QkU4MEUwMDA4NzIwMjIwMjAyMUMxCis6MTA3RDgwMDAyNDA1MDAwNDI0MDgwMDAxQTIwNTAwMjUwMjIwMjAyMTZBCis6MTA3RDkwMDAwRTAwMDg3Q0EyMDgwMDA1M0MwNTgwMDA4Q0IwMDE3ODJDCis6MTA3REEwMDAwNjAwRkZGRThGOTIwMDU4MzRBRTAxNDAyNDBGMDAwMkZGCis6MTA3REIwMDAzQzA5MTAwMEFERDEwMDAwQTFDRjAwMDRBQ0E5MDE3OEFFCis6MTA3REMwMDAwQTAwMDk2MkFGODAwMDY4MkNBRDAwMzc1MUEwRkY5NDEzCis6MTA3REQwMDA4RjhEMDA0NDAwMDU4MDgwM0MxMTA4MDAyNjMxNTdFMDVCCis6MTA3REUwMDAwMjExNzgyMThERUUwMDAwMDFDMDAwMDgwMDAwMDAwMEEzCis6MTA3REYwMDAyNDExMDAwNDE0QjEwMDhDM0MwNzgwMDAzQzA4MDgwMEVBCis6MTA3RTAwMDA4RDA4NUJFODhGODZGRDlDQUNFODAwMjA4RTQ1MDAwODVECis6MTA3RTEwMDA4Rjk5RkRBMDI0MEQwMDUwQUNDNTAwMzA4RTRDMDAwODk5Cis6MTA3RTIwMDBBQ0NDMDA1MDhFNEIwMDBDQUNDQjAwMzQ4RTQzMDAxMDE5Cis6MTA3RTMwMDBBQ0MzMDAzODhFNEEwMDEwQUNDQTAwNTQ4RTQyMDAxNDA1Cis6MTA3RTQwMDBBQ0MyMDAzQzhFNUYwMDE4QUYzRjAwMDQ4RTUwMDAxQzk3Cis6MTA3RTUwMDBBQ0QwMDAyMDkwQzQwMDAwMzA5ODAwRkYxMzBEMDI0QUZGCis6MTA3RTYwMDAwMDAwMDAwMDhDQzQwMDM0OENEMDAwMzAwMDkwMzAyMzFGCis6MTA3RTcwMDAwNEMwMDBGMTI0MDQwMDhDMTI2MDAwRUUyNDAyMDAwMzEwCis6MTA3RTgwMDAwQTAwMDk2MkFGODIwMDY4MjQxOTAwMDUxNEI5MDA2NjZGCis6MTA3RTkwMDAzQzA1ODAwMDNDMDgwODAwOEQwODVCRTg4Rjg2RkQ5QzRGCis6MTA3RUEwMDBBQ0E4MDAyMDhFNEMwMDA0OEY4QUZEQTAyNDA3MjAwMDdGCis6MTA3RUIwMDBBQ0NDMDAxQzkyNEIwMDA4MjQxMjAwMDhBMTRCMDAxOTA2Cis6MTA3RUMwMDA4RjgyMDA1ODkwNDMwMDA5QTE0MzAwMTg4Rjg1MDA1ODA1Cis6MTA3RUQwMDA5MEJGMDAwQTMzRTQwMEZGMTA5MjAwMTAyODg5MDAwOUM3Cis6MTA3RUUwMDAxNTIwMDBCQTI0MEUwMDAyMjQwRDAwMjAxMDhEMDAwQjc2Cis6MTA3RUYwMDAzNDA3ODAwMDI4OTgwMDIxMTcwMDAwMDgyNDA3NDAwMDVDCis6MTA3RjAwMDAyNDEwMDA0MDEwOTAwMDA1M0MwNzAwMDEyNDE5MDA4MDU3Cis6MTA3RjEwMDAxMDk5MDAwMjNDMDcwMDAyMjQwNzQwMDA4Q0MyMDAxOEEwCis6MTA3RjIwMDAzQzAzRkYwMDAwNDM1MDI0MDE0N0Y4MjVBQ0RGMDAxODU0Cis6MTA3RjMwMDA5MEIyMDAwQkEwRDIwMDI3OEY4MzAwNTg5NDY0MDAwQ0VECis6MTA3RjQwMDAxMDgwMDFGRTAwMDAwMDAwOTQ2NzAwMEMzQzFGODAwMEMwCis6MTA3RjUwMDAyNDA1RkZCRkE0QzcwMDVDOTA2MzAwMEUyNDA3MDAwNDQzCis6MTA3RjYwMDBBMEMzMDAwODhGODIwMDU4OTA0QTAwMEZBMENBMDAwOUUxCis6MTA3RjcwMDA4Rjg5MDA1ODhEMzIwMDEwOEZFNDAwNzQwMjQ0QzgyM0FBCis6MTA3RjgwMDBBQ0Q5MDA1ODhEMzAwMDE0QUNEMDAwMkM5NTM4MDAxOEI2Cis6MTA3RjkwMDAzMzBERkZGRkFDQ0QwMDQwOTUzMTAwMUEzMjJGRkZGRkFCCis6MTA3RkEwMDBBQ0NGMDA0NDhEMkUwMDFDQUNDRTAwNDg5MTI4MDAwRUIyCis6MTA3RkIwMDBBMEM4MDAwODkwQ0MwMDA4MDE4NTU4MjQxMjYwMDFCNkMyCis6MTA3RkMwMDBBMENCMDAwODhGOTIwMDU4MEEwMDA5NjJBRjg3MDA2OEIyCis6MTA3RkQwMDAyNDA2MDAwNjE0QTYwMDE0M0MwRTgwMDAzQzBGMDgwMDg2Cis6MTA3RkUwMDA4REVGNUJFODhGODVGRDk4QURDRjAwMjA4RTQ5MDAxODlFCis6MTA3RkYwMDA4Rjg2RkQ5QzhGOEJGREEwQUNBOTAwMDA4Q0M4MDAzODNCCis6MTA4MDAwMDAyNDA0MDAwNUFDQTgwMDA0OENDQzAwM0MxMjYwMDA4MTY0Cis6MTA4MDEwMDBBRDZDMDAwMDBBMDAwOTYyQUY4NDAwNjgyNDExMDAwN0ZCCis6MTA4MDIwMDAxMEIxMDA0QjI0MDQwMDA2M0MwNTA4MDAyNEE1NUJFOEMxCis6MTA4MDMwMDAwRTAwMDg4MTI0MDQwMDgxOEY5MjAwNTgwMDEzMTAyQjM5Cis6MTA4MDQwMDAwQTAwMDk2MkFGODIwMDY4MjQxRjAwMjMxNEJGRkZGNkY0Cis6MTA4MDUwMDAzQzBDODAwMDNDMDUwODAwOENBNTVCRTg4RjhCRkRBMEU0Cis6MTA4MDYwMDBBRDg1MDAyMDhGOTFGRDlDOEU0NjAwMDQyNTY0MDAyMDg0Cis6MTA4MDcwMDAyNjQ1MDAxNEFFMjYwMDI4MjQwNjAwMDMwRTAwMEY4MUJBCis6MTA4MDgwMDAyNTcwMDAzMDhGODcwMDU4MDIwMDIwMjEyNDA2MDAwMzRECis6MTA4MDkwMDAwRTAwMEY4MTI0RTUwMDA4M0MwNDA4MDAyNDg0NUJFOEZFCis6MTA4MEEwMDAwRTAwMDhBQTAwMDAwMDAwOTIyMzAwMDAyNDBBMDA1MERECis6MTA4MEIwMDAzMDYyMDBGRjU0NEFGRkUxOEY5MjAwNTgwRTAwMEY2Q0FGCis6MTA4MEMwMDAwMDAwMDAwMDBBMDAwQTZBOEY5MjAwNTgyNDA4MDAzMzVBCis6MTA4MEQwMDAxNEE4MDAzMjNDMDM4MDAwM0MxMTA4MDA4RTMxNUJFODlDCis6MTA4MEUwMDA4RjhGRkRBMEFDNzEwMDIwOEU0MjAwMDgyNDBEMDAyODY3Cis6MTA4MEYwMDA4Rjg5RkQ5Q0FERTIwMDMwOEU0QTAwMEMyNDA2MDAwOUY5Cis6MTA4MTAwMDBBREVBMDAzNDhFNUYwMDEwQURGRjAwMzg4RTQ0MDAxNERECis6MTA4MTEwMDBBREU0MDAyMDhFNTkwMDE4QURGOTAwMjQ4RTU4MDAxQ0UzCis6MTA4MTIwMDBBREY4MDAyOEExRUQwMDExOEU0RTAwMDQxMjYwMDAzMTYwCis6MTA4MTMwMDBBRDJFMDAyODhGOTIwMDU4MEEwMDA5NjJBRjg2MDA2OEIxCis6MTA4MTQwMDAyNDBEMDAyMjE0QURGRkI4MDAwMDAwMDAyNDA0MDAwNzM1Cis6MTA4MTUwMDAzQzEwMDgwMDhFMTA1QkU4M0MxODgwMDBBRjEwMDAyMDM3Cis6MTA4MTYwMDA1NjYwRkVBRUFGODQwMDY4M0MwNDA4MDAyNDg0NUJFOERGCis6MTA4MTcwMDAwRTAwMDhBQTI0MTMwMDUwOEY4NEZEOUM5MDkyMDAwMEVBCis6MTA4MTgwMDAzMjU5MDBGRjEzMzMwMTRCMDAwMDAwMDA4RjkyMDA1ODVBCis6MTA4MTkwMDAwMDAwMjAyMTBBMDAwOTYyQUY4NDAwNjgzQzA1MDgwMDQ1Cis6MTA4MUEwMDAyNEE1NUJFODBFMDAwODU4MjQwNDAwODEwQTAwMEE2QTJFCis6MTA4MUIwMDA4RjkyMDA1ODAyRDQ5ODIxMzI2NUZGRkYwRTAwMDg1MkJBCis6MTA4MUMwMDAyNDA0MDA4NDBBMDAwOTYyOEY5MjAwNTgxMDhFRkY1MzI1Cis6MTA4MUQwMDAyNDA3MDQwMDI4ODcwMDAzMTBFMDAxNzkyNDExMDAwNDFCCis6MTA4MUUwMDAyNDBGMDAwMTU0OEZGRjREMjQwNzQwMDAwQTAwMEEyMjhCCis6MTA4MUYwMDAyNDA3MDEwMDNDMDUwODAwMjRBNTVCRTgwRTAwMDhBNDQ0Cis6MTA4MjAwMDAyNDA0MDA4MjhGOTIwMDU4MDAwMDMwMjEwQTAwMDk2Mjg1Cis6MTA4MjEwMDBBRjg2MDA2ODNDMDQwODAwMjQ4NDVCRTg4Q0MyMDAzODA4Cis6MTA4MjIwMDAwRTAwMDhBQThDQzMwMDNDOEY5MjAwNTgwQTAwMEFDMEI2Cis6MTA4MjMwMDAwMDAwMjAyMTI0MDQwMDgyM0MwNTA4MDAyNEE1NUJFOEZFCis6MTA4MjQwMDAwRTAwMDhBNDAwMDAwMDAwOEY5MjAwNTgwMDAwMTAyMUNBCis6MTA4MjUwMDAwQTAwMDk2MkFGODIwMDY4OEU1MDAwMDQ4RjkxRkQ5Qzc1Cis6MTA4MjYwMDAzQzA3ODAwMEFDRjAwMDIwOTIyQzAwMDUwMjAwMjgyMTgxCis6MTA4MjcwMDAzMThCMDAwMjE1NjAwMTU2MjQwNDAwOEE4RjkyRkRBMDA0Cis6MTA4MjgwMDAyNDA0MDA4RDkyNDUwMDFCMzBBNjAwMjAxNEMwMDE1MDJDCis6MTA4MjkwMDAwMjAwMjgyMTkyMkUwMDA5MjQwODAwMTIzMUM5MDBGRjkzCis6MTA4MkEwMDAxMTI4MDE0QjI0MDQwMDgxMEUwMDA4NzIwMjAwMjAyMUQ1Cis6MTA4MkIwMDA5MjU4MDAxQjI0MEYwMDA0MDIwMDIwMjEzNzBEMDA0MkI5Cis6MTA4MkMwMDBBMjREMDAxQjBFMDAwODdDQTIyRjAwMjUzQzA1ODAwMDVCCis6MTA4MkQwMDA4Q0E0MDE3ODA0ODBGRkZFMzRCOTAxNDAyNDFGMDAwMjAxCis6MTA4MkUwMDBBRjMwMDAwMEEzM0YwMDA0OEY5MjAwNTgzQzEwMTAwMEY0Cis6MTA4MkYwMDBBQ0IwMDE3ODBBMDAwQTZCMDAxMzEwMkI4RTUwMDAwNEZBCis6MTA4MzAwMDA4RjkxRkQ5QzNDMDM4MDAwQUM3MDAwMjA5MjJBMDAwNUY4Cis6MTA4MzEwMDAwMjAwMjgyMTMxNDIwMDAyMTQ0MDAwMTcyNDA0MDA4QTgwCis6MTA4MzIwMDA5MjJDMDAwOTI0MTIwMDA0MDIwMDI4MjEzMThCMDBGRjQ2Cis6MTA4MzMwMDAxMTcyMDAxMTI0MDQwMDgxMEUwMDA4NzIwMjAwMjAyMTM1Cis6MTA4MzQwMDA4Rjg5RkRBMDI0MDgwMDEyMjQwNUZGRkU5MTJGMDAxQjM5Cis6MTA4MzUwMDAwMjAwMjAyMTM1RUUwMDIwQTEyRTAwMUJBMjI4MDAwOURBCis6MTA4MzYwMDA5MjI2MDAwNTAwQzUzODI0MEUwMDA4N0NBMjI3MDAwNUNGCis6MTA4MzcwMDAwMjAwMjgyMTAwMDAyMDIxMEUwMDA5MzMwMDAwMDAwMDI3Cis6MTA4MzgwMDAwQTAwMEE2QThGOTIwMDU4OEU0QzAwMDQzQzA3ODAwMDU1Cis6MTA4MzkwMDAzQzEwMDgwMDI2MTA1QkU4QUNFQzAwMjAzQzAxMDgwMDEzCis6MTA4M0EwMDBBQzJDNUJFODkyNEIwMDAzMzE3MTAwMDQxMjIwMDEzQkJFCis6MTA4M0IwMDA4Rjg0RkQ5QzI0MDIwMDA2QTA4MjAwMDk5MjRGMDAxQkJFCis6MTA4M0MwMDAyNDBFRkZDMDMxRTkwMDNGMDEyRTQwMjVBMDg4MDAwODlGCis6MTA4M0QwMDA5MjQ1MDAwMzMwQTYwMDAxMTRDMDAxMzIwMDAwMDAwMEU1Cis6MTA4M0UwMDA4RTQyMDAwOEFFMDIwMDA4M0MwMjA4MDA4QzQyNUJGMDlFCis6MTA4M0YwMDAxMDQwMDEzMThGOTBGREEwMDAwMjE5QzI4RjhERkQ5Q0FECis6MTA4NDAwMDBBNjAzMDAwQzhFNEEwMDBDMjQxODAwMDEyNDA0MDAxNDVBCis6MTA4NDEwMDBBRTBBMDAyQzhFNDIwMDEwQUUwMjAwMUM5NjVGMDAxNkMxCis6MTA4NDIwMDBBNjFGMDAzQzk2NTkwMDE0QTYxOTAwM0VBREI4MDAwQ0RBCis6MTA4NDMwMDBBNUI4MDAxMEE1QjgwMDEyQTVCODAwMTRBNUI4MDAxNjdDCis6MTA4NDQwMDAxMjYwMDE0NEEyMDQwMDExOTI1MTAwMDMzMjMyMDAwMjcyCis6MTA4NDUwMDAyRTUzMDAwMThGOTIwMDU4MjY2MjAwMDgwQTAwMDk2MjFDCis6MTA4NDYwMDBBRjgyMDA2ODhFNDQwMDA0M0MxOTgwMDAzQzA2ODAwOEZFCis6MTA4NDcwMDBBRjI0MDAyMDhFNDUwMDA4OTBEODAwMDAyNDBEMDA1MDQ1Cis6MTA4NDgwMDAzMzExMDBGRjEyMkQwMDlDMjQwNzAwODgyNDA2MDAwOUU4Cis6MTA4NDkwMDAwRTAwMDg0NTAwMDAwMDAwMEEwMDBBNkE4RjkyMDA1ODhBCis6MTA4NEEwMDA4RTUwMDAwNDNDMDk4MDAwM0MxMTgwMDhBRDMwMDAyMDUzCis6MTA4NEIwMDA5MjI4MDAwMDI0MDUwMDUwMzEwNDAwRkYxMDg1MDExMEFGCis6MTA4NEMwMDAyNDA3MDA4ODAyMDAyMDIxMDAwMDI4MjEwRTAwMDg0NTEyCis6MTA4NEQwMDAyNDA2MDAwRTkyMkQwMDAwMjQxOEZGODAwMjAwMjgyMTlGCis6MTA4NEUwMDAwMUI4ODAyNTI0MDQwMDA0MjQwNjAwMzAwRTAwMDcyNTZFCis6MTA4NEYwMDBBMjMwMDAwMDBBMDAwQTZBOEY5MjAwNTg4RTUwMDAwNEQxCis6MTA4NTAwMDA4RjkxRkRBMDNDMDI4MDAwQUM1MDAwMjA5MjNGMDAxQkU4Cis6MTA4NTEwMDAzM0Y5MDAxMDEzMjAwMDZDMjQwNzAwODEwMjAwMjAyMTkxCis6MTA4NTIwMDAwMDAwMjgyMTI0MDYwMDFGMEUwMDA4NDUwMDAwMDAwMDVFCis6MTA4NTMwMDAwQTAwMEE2QThGOTIwMDU4OEU0NDAwMUMwRTAwMDg1REUzCis6MTA4NTQwMDAwMDAwMDAwMDEwNDAwMEUzMDA0MDQ4MjE4Rjg4MDA1OEUwCis6MTA4NTUwMDAyNDA3MDA4OTAxMjAyMDIxOEQwNTAwMUMyNDA2MDAwMTJDCis6MTA4NTYwMDAwRTAwMDg0NTAwMDAwMDAwMEEwMDBBNkE4RjkyMDA1OEI5Cis6MTA4NTcwMDA5NjQ5MDAwMjNDMTAwODAwMjYxMDVCRTgzMTI4MDAwNEYwCis6MTA4NTgwMDAxMTAwMDA5NzNDMDQ2MDAwOEU0RTAwMUMzQzBGODAwMEUwCis6MTA4NTkwMDBBREVFMDAyMDNDMDEwODAwQUMyRTVCRTg5NjQ3MDAwMkRGCis6MTA4NUEwMDAzMEU0MDAwMTE0ODAwMEU2MDAwMDAwMDA4RTQyMDAwNDY4Cis6MTA4NUIwMDBBRTAyMDAwODNDMTAwODAwOEUxMDVCRjAxMjAwMDBFQ0M4Cis6MTA4NUMwMDAzQzBGODAwMDhGOTJGRDlDMjQxMDAwMDE4RTRFMDAxOEZECis6MTA4NUQwMDA4RjhERkRBMDhGOUZGRDk4MDFDRjQ4MjVBRTQ5MDAxOEQzCis6MTA4NUUwMDBBMjQwMDAwNUFFNTAwMDBDM0MwODA4MDA4RDA4NUJGMDZFCis6MTA4NUYwMDA4Rjg0MDA1OEE2NTAwMDEwMDAwODM5QzJBNjUwMDAxMkZGCis6MTA4NjAwMDBBNjUwMDAxNEE2NTAwMDE2QTVBNzAwMEM4QzhDMDAwOERDCis6MTA4NjEwMDA4RjhCMDA1ODhGOEEwMDU4QURBQzAwMkM4RDYzMDAwQ0Y2Cis6MTA4NjIwMDAyNDA3MDAwMkFEQTMwMDFDOTE0NjAwMTBBMUE2MDAxMTcyCis6MTA4NjMwMDA4RjgyMDA1ODkwNDUwMDExQTNFNTAwMDg4Rjk5MDA1OERCCis6MTA4NjQwMDA5MzM4MDAxMkEyNTgwMDRFOEY5MTAwNTg5MjJGMDAxM0I5Cis6MTA4NjUwMDBBMUFGMDAxMjhGOTIwMDU4OTY0RTAwMTRBNUFFMDAzQ0I4Cis6MTA4NjYwMDA5NjQ5MDAxNkE1QTkwMDNFOEU0ODAwMThBREE4MDAxNDMyCis6MTA4NjcwMDA1NjYwRkQ2QUFGODcwMDY4M0MwNTA4MDAyNEE1NUJFOEVBCis6MTA4NjgwMDAwRTAwMDg4MTAwMDAyMDIxOEY5MjAwNTgwMDAwMzgyMTQwCis6MTA4NjkwMDAwQTAwMDk2MkFGODcwMDY4M0MwNTA4MDAyNEE1NUJFODcyCis6MTA4NkEwMDAwRTAwMDhBNDI0MDQwMDgyOEY5MjAwNTgwQTAwMEE0RDhDCis6MTA4NkIwMDAwMDAwMzgyMTBFMDAwRjZDMDAwMDAwMDA4RjkyMDA1ODVGCis6MTA4NkMwMDAwQTAwMEFDMDAwMDAyMDIxMEUwMDA4NzIwMjAwMjAyMUNBCis6MTA4NkQwMDA5MjIzMDAxQjAyMDAyMDIxMzQ2QTAwMTAwRTAwMDg3QzQ3Cis6MTA4NkUwMDBBMjJBMDAxQjAwMDAzODIxMDIwMDIwMjEwMDAwMjgyMUJFCis6MTA4NkYwMDAwQTAwMEJBNTI0MDYwMDFGOTI0MjAwMEMzMDVGMDAwMTA3Cis6MTA4NzAwMDAxM0UwMDAwMzAwMDAwMDAwOTY0QTAwMEVBNENBMDAyQ0VCCis6MTA4NzEwMDA5MjRCMDAwQzMxNjMwMDAyNTA2MDAwMDYwMDAwMzgyMUNCCis6MTA4NzIwMDA4RTQ3MDAxNDk2NEMwMDEyQUNDNzAwMUNBNENDMDAxQTUzCis6MTA4NzMwMDAwMDAwMzgyMTBBMDAwQjdGMjQwNjAwMDkzQzA1MDgwMEQwCis6MTA4NzQwMDAyNEE1NUJFODBFMDAwOEE0MjQwNDAwOEI4RjkyMDA1ODM3Cis6MTA4NzUwMDAwQTAwMEE0RDAwMTMzODJCM0MwQzA4MDA4RDhDNUJFODk2Cis6MTA4NzYwMDAyNERGRkZGRTI1OTMwMTAwMzI2QjAwN0YwMTY3OTAyMTFCCis6MTA4NzcwMDAwMjYzODgyNEFEMTEwMDI4QUU0NjAwRTBBRTQwMDBFNDVDCis6MTA4NzgwMDAwQTAwMDlCM0FFNUYwMDFDQUNDMDAwNTQzQzBEMDgwMEU5Cis6MTA4NzkwMDA4REFENUJFODNDMTg4MDBDMzcwOTAxMDBBQ0VEMDAyODdBCis6MTA4N0EwMDA4RTUxMDAxNEFEMzEwMEUwOEU0RjAwMTRBRDJGMDBFNDY3Cis6MTA4N0IwMDA4RTRFMDAxMDI1QzdGRkZFMEEwMDA5RjRBRDI3MDAxQ0VECis6MTA4N0MwMDA1NDkxRkRENjI0MDc0MDAwMEEwMDBBMjIyNDA3MTAwMDE1Cis6MTA4N0QwMDAwRTAwMDkyRDAwMDAwMDAwMEEwMDBBNkE4RjkyMDA1ODVFCis6MTA4N0UwMDA4QzgzNDQyQzNDMTJERUFEMzY1MUJFRUYzQzAxMDgwMEI4Cis6MTA4N0YwMDBBQzIwNUJFODEwNzEwMDYyMDAwMDAwMDAzQzE5NkM2MjY0Cis6MTA4ODAwMDAzNzM4Nzk3MDE0NzgwMDA4MjQwNDAwMDI5Nzg1MDA3NEMyCis6MTA4ODEwMDA5NzgyMDA2QzI0MDQwMDkyMDBBMkY4MkIxM0UwMDAxOTQ4Cis6MTA4ODIwMDAwMjAwMjgyMTI0MDQwMDAyMEUwMDA2OTUyNDA1MDIwMEZGCis6MTA4ODMwMDAzQzA2ODAwMEFDQzIwMDIwM0MwMTA4MDBBQzIyNUJFODkyCis6MTA4ODQwMDAxMDQwMDAwRDhGOEMwMDU4MjQwQTAwMjgyNDA0MDAwM0Q3Cis6MTA4ODUwMDA5MThCMDAxMDMxNjMwMEZGNTQ2QTAwMDEyNDA0MDAwMTcxCis6MTA4ODYwMDAwRTAwMDA4MTAwMDAwMDAwMTA0MDAwMDQyNDA0MDA4MzdBCis6MTA4ODcwMDAwQTAwMEJDMjhGOTIwMDU4MjQwNDAwODMzQzA1MDgwMEI0Cis6MTA4ODgwMDAyNEE1NUJFODBFMDAwODgxMDAwMDAwMDA4RjkyMDA1OENDCis6MTA4ODkwMDAwMDEzMzgyQjBBMDAwOTYyQUY4NzAwNjgwQTAwMEI0OUYxCis6MTA4OEEwMDAyNDAyMDAxMjhFNDQwMDA4MEUwMDA4NUQwMDAwMDAwMDQzCis6MTA4OEIwMDAwQTAwMEI1NUFFMDIwMDA4M0MwNTA4MDAyNEE1NUJFODQxCis6MTA4OEMwMDAwRTAwMDg1ODI0MDQwMDg3OEY5MjAwNTgwQTAwMEI3MjhCCis6MTA4OEQwMDAwMDEzMTAyQjI0MDQwMDA0MEUwMDA2OTUyNDA1MDAzMDFDCis6MTA4OEUwMDAxNDQwMDAyQTAwNDA0ODIxOEY4ODAwNTgyNDA3MDA4MzQ0Cis6MTA4OEYwMDAwMTIwMjAyMThEMDUwMDFDMEEwMDBCQjMyNDA2MDAwMTc1Cis6MTA4OTAwMDA4RjgzMDA3ODhGODYwMDcwMTA2NkZFRUUwMDAwMzgyMTlECis6MTA4OTEwMDAzQzA3MDgwMDI0RTc1QjZDMDAwMzIwQzAwMDg3MjgyMTg3Cis6MTA4OTIwMDA4Q0FFMDAwMDExRDAwMDVEMjQ2RjAwMDEzMUUzMDAwRjE4Cis6MTA4OTMwMDA1NDY2RkZGQTAwMDMyMEMwMEEwMDBCOEMwMDAwMzgyMUE3Cis6MTA4OTQwMDA4RTQ0MDAwNDBFMDAwODVEMDAwMDAwMDAwQTAwMEJDODAxCis6MTA4OTUwMDBBRTAyMDAwODNDMDUwODAwMjRBNTVCRTgwRTAwMDhBNDUwCis6MTA4OTYwMDAyNDA0MDA4MjhGOTIwMDU4MEEwMDBCNzIwMDAwMTAyMTJDCis6MTA4OTcwMDAzQzA1MDgwMDI0QTU1QkU4MEEwMDBDN0MyNDA0MDA4NzYxCis6MTA4OTgwMDA4QzgzNDQyQzBBMDAwQzVCM0MxOTZDNjI4Rjg4MDA1ODY1Cis6MTA4OTkwMDAzQzA3ODAwODNDMEM4MDAwMjQwQjAwNTAyNDBBMDAwMTk2Cis6MTA4OUEwMDBBRDgyMDAyMEEwRUIwMDAwQTBFQTAwMDE5MTAzMDAwNENBCis6MTA4OUIwMDBBMEUzMDAxODkxMDQwMDA1QTBFNDAwMTk5MTA2MDAwNjQ4Cis6MTA4OUMwMDAzQzA0MDgwMDI0ODQ1QjZDQTBFNjAwMUE5MTAyMDAwN0I2Cis6MTA4OUQwMDAzQzA2MDgwMDI0QzY1QjY4QTBFMjAwMUI5MTA1MDAwODY1Cis6MTA4OUUwMDBBMEU1MDAxQzkxMUYwMDA5QTBGRjAwMUQ5MTE5MDAwQUJECis6MTA4OUYwMDBBMEY5MDAxRTkxMTgwMDBCQTBGODAwMUY5MTEyMDAwQ0E2Cis6MTA4QTAwMDBBMEYyMDAyMDkxMTEwMDBEQTBGMTAwMjE5MTEwMDAwRUE0Cis6MTA4QTEwMDBBMEYwMDAyMjkxMEYwMDBGQTBFRjAwMjM5MTBFMDAxMDk0Cis6MTA4QTIwMDBBMEVFMDAyNDkxMEQwMDExQTBFRDAwMjU5NTBDMDAxNDdFCis6MTA4QTMwMDBBNEVDMDAyODk1MEIwMDE2OEY4QTAwNzA4RjkyMDA3OEE2Cis6MTA4QTQwMDBBNEVCMDAyQTk1MDMwMDE4MDAwQTEwQzAyNTQ1MDAwMTc4Cis6MTA4QTUwMDBBNEUzMDAyQzhEMUYwMDFDMDA0NEMwMjEwMDQ2QzgyMTQ3Cis6MTA4QTYwMDAzMEE1MDAwRkFGM0YwMDAwQUYwOTAwMDAxMEIyMDAwNkI0Cis6MTA4QTcwMDBBRjg1MDA3MDAwMDAzODIxOEQwNTAwMUMwMTIwMjAyMUU5Cis6MTA4QTgwMDAwQTAwMEJCMzI0MDYwMDAxMjRBRDAwMDEzMUE3MDAwRjNBCis6MTA4QTkwMDBBRjg3MDA3ODBBMDAwQ0Y5MDAwMDM4MjEzQzA2MDgwMDc2Cis6MTA4QUEwMDAyNEM2NUI2ODAwODY5MDIxMDAwMDM4MjFBQ0EwMDAwMDNECis6MTA4QUIwMDAwQTAwMEI4Q0FFNDAwMDAwM0MwNDgyMDEzQzAzNjAwMEM1Cis6MTA4QUMwMDAzNDgyMEUwMkFDNjAzRDY4QUY4MDAwOTgwM0UwMDAwODdECis6MTA4QUQwMDBBQzYyM0Q2QzI3QkRGRkU4QUZCMDAwMTAzMDkwRkZGRkU3Cis6MTA4QUUwMDAwMDEwMTg0MjJDNjIwMDQxQUZCRjAwMTQxNDQwMDAwMjc1Cis6MTA4QUYwMDAyNDA0MDA4MDI0MDMwMDQwM0MwMTA4MDBBQzMwMDA2MEU2Cis6MTA4QjAwMDAzQzAxMDgwMEFDMjMwMDY0MEUwMDBGNzUwMDYwMjgyMUIyCis6MTA4QjEwMDAyNDQ4MDJCRjI0MDlGRjgwMDEwOTI4MjQwMDEwMzk4MDVECis6MTA4QjIwMDAwMDEwMzA0MDhGQkYwMDE0OEZCMDAwMTAwMEE3MjAyMTJDCis6MTA4QjMwMDAwMDg2MTgyMUFGODMwMDgwM0MwMTA4MDBBQzI1MDA1ODU2Cis6MTA4QjQwMDAzQzAxMDgwMEFDMjQwMDVDMDNFMDAwMDgyN0JEMDAxOENECis6MTA4QjUwMDAzMDgzMDBGRjMwQzZGRkZGMzBFNDAwRkYzQzA4ODAwMDk4Cis6MTA4QjYwMDA4RDAyMDFCODA0NDBGRkZFMDAwMzU0MDAwMTQ0MzgyNTgzCis6MTA4QjcwMDAzQzA5NjAwMDAwRTkyMDI1M0MwMzEwMDBBRDA1MDE4MEEwCis6MTA4QjgwMDBBRDA2MDE4NEFEMDQwMTg4MDNFMDAwMDhBRDAzMDFCODFGCis6MTA4QjkwMDA4Rjg1MDA1ODNDMEE2MDEyMzU0ODAwMTA4Q0FDMDAwNEU4Cis6MTA4QkEwMDAzQzBENjAwRTM1QTYwMDEwMzE4QjAwMDYyRDY5MDAwMUNBCis6MTA4QkIwMDBBRDA5MDBDNDhDQTcwMDA0QUNDNzMxODA4Q0EyMDAwOEFBCis6MTA4QkMwMDA5NEE0MDAwMkFDQzIzMTg0OENBMzAwMUMwNDYwMDAwMzk2Cis6MTA4QkQwMDBBNzg0MDA5MDAzRTAwMDA4MDAwMDAwMDA4Q0FGMDAxODlDCis6MTA4QkUwMDBBQ0NGMzFEMDhDQUUwMDFDMDNFMDAwMDhBQ0NFMzFENDQ5Cis6MTA4QkYwMDA4Rjg1MDA1ODhGODdGRjI4OEY4NkZGMzA4Q0FFMDAwNDRBCis6MTA4QzAwMDAzQzBGNjAxMjM1RTgwMDEwQUNFRTAwNzg4Q0FEMDAwODI3Cis6MTA4QzEwMDBBQ0VEMDA3QzhDQUMwMDEwQUNDQzAwNEM4Q0FCMDAwQ0YwCis6MTA4QzIwMDBBQ0NCMDA0ODk0Q0EwMDU0M0MwMjA4MDA4QzQyMDA0NDdCCis6MTA4QzMwMDAyNTQ5MDAwMUE0QzkwMDU0OTRDNDAwNTQzMDgzRkZGRkE3Cis6MTA4QzQwMDAxMDYyMDAxNzAwMDAwMDAwM0MwMjA4MDA4QzQyMDA0MDQ3Cis6MTA4QzUwMDBBNEMyMDA1MjhDQTMwMDE4QUNFMzAwMzA4Q0EyMDAxNDE0Cis6MTA4QzYwMDBBQ0UyMDAyQzhDQjkwMDE4QUNGOTAwMzg4Q0I4MDAxNEI4Cis6MTA4QzcwMDAyNDA1MDAwMUFDRjgwMDM0OEQwNjAwQkM1MEM1MDAxOTc1Cis6MTA4QzgwMDA4RDAyMDBCNDhEMDIwMEI4QTRFMjAwNDg5NEU0MDA0OENDCis6MTA4QzkwMDBBNEU0MDA0QTk0RTgwMEVBMDNFMDAwMDgzMTAyRkZGRjgwCis6MTA4Q0EwMDAzQzAyMDgwMDhDNDIwMDI0QTRDMDAwNTRBNEMyMDA1MjFDCis6MTA4Q0IwMDA4Q0EzMDAxOEFDRTMwMDMwOENBMjAwMTRBQ0UyMDAyQ0IyCis6MTA4Q0MwMDA4Q0I5MDAxOEFDRjkwMDM4OENCODAwMTQyNDA1MDAwMUU4Cis6MTA4Q0QwMDBBQ0Y4MDAzNDhEMDYwMEJDNTRDNUZGRUI4RDAyMDBCODIzCis6MTA4Q0UwMDA4RDAyMDBCNEE0RTIwMDQ4OTRFNDAwNDhBNEU0MDA0QUUxCis6MTA4Q0YwMDA5NEU4MDBFQTAzRTAwMDA4MzEwMkZGRkY4Rjg2MDA1ODg1Cis6MTA4RDAwMDAzQzA0ODAwMDhDQzkwMDA4OENDODAwMDgwMDA5MjlDMEY4Cis6MTA4RDEwMDAwMDA4MzlDMEFDODcwMDIwOTBDMzAwMDczMDYyMDAwNDBGCis6MTA4RDIwMDAxMDQwMDAzRUFGODUwMDk0OTBDQjAwMDczMTZBMDAwOEU4Cis6MTA4RDMwMDAxMTQwMDAzRDhGODdGRjJDOENDRDAwMEM4Q0NFMDAxNDkxCis6MTA4RDQwMDAwMUFFNjAyQjExODAwMDM2MDAwMDAwMDA4Q0MyMDAwQ0M4Cis6MTA4RDUwMDBBQ0UyMDA3MDhDQ0IwMDE4OEY4NUZGMjg4Rjg4RkYzMDI1Cis6MTA4RDYwMDBBQ0VCMDA3NDhDQ0EwMDEwMjQwMkZGRjhBQ0FBMDBEODQ3Cis6MTA4RDcwMDA4Q0M5MDAwQ0FEMDkwMDYwOENDNDAwMUNBQ0E0MDBEMEYwCis6MTA4RDgwMDA5MEUzMDA3QzAwNjJDODI0QTBGOTAwN0M5MEQ4MDAwNzIyCis6MTA4RDkwMDAzMzBGMDAwODExRTAwMDA0MDAwMDAwMDA5MEVEMDA3QzlCCis6MTA4REEwMDAzNUFDMDAwMUEwRUMwMDdDOTBDRjAwMDczMUVFMDAwMTUzCis6MTA4REIwMDAxMUMwMDAwNjAwMDAwMDAwOTBFMzAwN0MyNDE4MDAzNDdECis6MTA4REMwMDAzNDc5MDAwMkEwRjkwMDdDQUNCODAwREM5MEMyMDAwNzQ2Cis6MTA4REQwMDAzMDQ2MDAwMjEwQzAwMDA0MDAwMDAwMDA5MEU4MDA3QzUzCis6MTA4REUwMDAzNTA0MDAwNEEwRTQwMDdDOTBFRDAwN0QzQzBCNjAwRTk3Cis6MTA4REYwMDAzNTZBMDAxMDMxQUMwMDNGQTBFQzAwN0Q4RDQ5MzFENEM0Cis6MTA4RTAwMDAzMTI3MDAwMTEwRTAwMDAyMjQwRTAwMDFBMEFFMDAwOThECis6MTA4RTEwMDA5NEFGMDBFQTAzRTAwMDA4MzFFMkZGRkY4Rjg3RkYyQ0U4Cis6MTA4RTIwMDAwQTAwMERBRjhDQzIwMDE0MEEwMDBEQjBBQ0UwMDA3MDU3Cis6MTA4RTMwMDA4RjhDMDA1ODI3QkRGRkQ4QUZCMzAwMUNBRkIyMDAxODBECis6MTA4RTQwMDBBRkIwMDAxMEFGQkYwMDIwQUZCMTAwMTQ5MThGMDAxNTdDCis6MTA4RTUwMDAzQzEzNjAwRTM2NzMwMDEwMzFFQjAwMEZBMzhCMDA5Q0E3Cis6MTA4RTYwMDA4RDhGMDAwNDhEOEIwMDA4OTU5RjAwMTI5NTk5MDAxMDNFCis6MTA4RTcwMDA5NTg0MDAxQTk1OTgwMDFFOTU4RTAwMUMzM0VERkZGRjE3Cis6MTA4RTgwMDAzMzJBRkZGRjMwODlGRkZGMzMwOEZGRkYzMUM3RkZGRkExCis6MTA4RTkwMDAzQzAxMDgwMEFDMkQwMDI0M0MwMTA4MDBBQzI5MDA0NDMyCis6MTA4RUEwMDAzQzAxMDgwMEFDMkEwMDQwQUU2ODMxNzhBRTY3MzE3Q0U2Cis6MTA4RUIwMDA5MTg1MDAxNTk1OTEwMDE2M0MxMjYwMTIzNjUyMDAxMEYzCis6MTA4RUMwMDAzMEEyMDBGRjMyMzBGRkZGQUU2MjMxODhBRTUwMDBCNEY2Cis6MTA4RUQwMDA5MTgzMDAxNDk1OUYwMDE4MjQwNjAwMDEwMDY2QzgwNEMxCis6MTA4RUUwMDAzM0Y4RkZGRkFFNTkwMEI4QUU1ODAwQkM5MThFMDAxNEE1Cis6MTA4RUYwMDBBRjhGMDA4NDNDMDg2MDA2MzFDRDAwRkZBRTREMDBDMDRFCis6MTA4RjAwMDA5MThBMDAxNTk1ODQwMDBFM0MwNzYwMEEzMTQ5MDBGRkU0Cis6MTA4RjEwMDBBRjhCMDA4ODMwODRGRkZGQUU0OTAwQzgzNTExMDAxMEM4Cis6MTA4RjIwMDAwRTAwMEQxMDM0RjAwNDEwM0MwMjA4MDA4QzQyMDA2MDZBCis6MTA4RjMwMDAzQzAzMDgwMDhDNjMwMDY0M0MwNjA4MDA4Q0M2MDA1OEEzCis6MTA4RjQwMDAzQzA1MDgwMDhDQTUwMDVDOEY4NDAwODA4RkJGMDAyMDRBCis6MTA4RjUwMDBBRTIzMDA0Q0FFNjUzMTlDQUUwMzAwNTRBRTQ1MDBEQzQwCis6MTA4RjYwMDBBRTYyMzFBMEFFNjMzMUE0QUU2NjMxOThBRTIyMDA0ODQ1Cis6MTA4RjcwMDA4RkIzMDAxQ0FFMDIwMDUwOEZCMTAwMTRBRTQyMDBFMDZGCis6MTA4RjgwMDBBRTQzMDBFNEFFNDYwMEQ4OEZCMDAwMTA4RkIyMDAxODk4Cis6MTA4RjkwMDAwQTAwMDU3RDI3QkQwMDI4OTc4NTAwOTI5NzgzMDA3Q0Y1Cis6MTA4RkEwMDAyN0JERkZFOEFGQjAwMDEwMDBBMzEwMkJBRkJGMDAxNDI3Cis6MTA4RkIwMDAyNDA0MDAwNThGOTAwMDU4MTA0MDAwNTUyNDA5MDAwMjM5Cis6MTA4RkMwMDAwRTAwMDY5NThGODUwMDgwQUY4MjAwOTQyNDA0MDAwMzc0Cis6MTA4RkQwMDAxMDQwMDA0RjI0MDkwMDAyM0MwNjgwMDAwRTAwMDA4MTcyCis6MTA4RkUwMDBBQ0MyMDAyMDI0MDcwMDAxMjQwODIwMDAxMDQwMDA0RERFCis6MTA4RkYwMDAyNDA0MDAwNTk3OEUwMDkyOEY4QUZGMkMyNDA5MDA1MENDCis6MTA5MDAwMDAyNUM1MDAwMUE3ODUwMDkyQTE0OTAwMDAzQzBEMDgwMDdDCis6MTA5MDEwMDA4REFEMDA2NDI0MDM4MDAwOEY4NEZGMjgwMDBENjYwMDVFCis6MTA5MDIwMDBBRDRDMDAxOEE1NDAwMDA2OTU0QjAwMEE4Rjg1RkYzMDE3Cis6MTA5MDMwMDAyNDAyRkY4MDAxNjMzMDI0QTU0NjAwMEE5MTVGMDAwQUU0Cis6MTA5MDQwMDAwMDAwNDgyMTAzRTJDODI1QTE1OTAwMEFBMEEwMDAwODk5Cis6MTA5MDUwMDBBMTQwMDA0Q0EwODAwMEQ1OTYxODAwMDI5NzgzMDA5MDk0Cis6MTA5MDYwMDAzQzAyMDAwNEE0OTgwMEVBOTYwRjAwMDIyNDE4RkZCRkY3Cis6MTA5MDcwMDAyNUVFMjQwMUE0OEUwMEJFOEUwRDAwMDRBQ0FEMDA0NDhDCis6MTA5MDgwMDA4RTBDMDAwOEFDQUMwMDQwQTRBMDAwNTBBNEEwMDA1NDdBCis6MTA5MDkwMDA4RTBCMDAwQzI0MEMwMDMwQUM4QjAwMjg4RTA2MDAxMEM4Cis6MTA5MEEwMDBBQzg2MDAyNEE0ODAwMDNFQTQ4NzAwNEVBNDg3MDA1MDE0Cis6MTA5MEIwMDBBNDgzMDAzQ0FENDIwMDc0QUM4ODAwRDhBQ0E4MDA2MDJBCis6MTA5MEMwMDBBMDg3MDBGQzkwOUYwMEQ0MzNGOTAwN0ZBMDk5MDBENEMyCis6MTA5MEQwMDA5MDkwMDBENDAyMTg3ODI0QTA4RjAwRDQ5MTRFMDA3Qzg4Cis6MTA5MEUwMDAzNUNEMDAwMUExNEQwMDdDOTM4QjAwOUNBRDQ4MDA3MEY0Cis6MTA5MEYwMDBBQzhDMDBEQ0EwOEIwMEQ2OEY4ODAwODg4Rjg3MDA4NDIyCis6MTA5MTAwMDBBQzg4MDBDNEFDODcwMEM4QTU0MDAwNzhBNTQwMDA3QUIwCis6MTA5MTEwMDA4RkJGMDAxNDhGQjAwMDEwMDEyMDEwMjEwM0UwMDAwODYxCis6MTA5MTIwMDAyN0JEMDAxODhGODUwMDk0MEUwMDA3MjU4Rjg2MDA4MENDCis6MTA5MTMwMDAwQTAwMEU5RjI0MDkwMDAyMjdCREZGRTBBRkIwMDAxMDE3Cis6MTA5MTQwMDA4RjkwMDA1OEFGQjEwMDE0QUZCRjAwMTg4RTA5MDAwNDEzCis6MTA5MTUwMDAwRTAwMDU0QTAwMDkyMUMwOEUwODAwMDQ4Rjg0RkYyOEY0Cis6MTA5MTYwMDA4RjgyRkYzMDAwMDgzOUMwM0MwNjgwMDBBQ0M3MDAyMDY5Cis6MTA5MTcwMDA5NDg1MDBFQTkwNDMwMDEzMTQ2MDAwMUMzMEIxRkZGRjk3Cis6MTA5MTgwMDA4RjhDRkYyQzkxOEIwMDA4MzE2QTAwNDAxNTQwMDAwQjNBCis6MTA5MTkwMDAwMDAwMDAwMDhFMEQwMDA0MDIyMDMwMjE4RkJGMDAxODU3Cis6MTA5MUEwMDA4RkIxMDAxNDhGQjAwMDEwMjQwNDAwMjIwMDAwMzgyMTc5Cis6MTA5MUIwMDAwMDBEMjlDMDBBMDAwRDJGMjdCRDAwMjAwRTAwMDA5OEM5Cis6MTA5MUMwMDAwMDAwMDAwMDhFMEQwMDA0MDIyMDMwMjE4RkJGMDAxODI3Cis6MTA5MUQwMDA4RkIxMDAxNDhGQjAwMDEwMjQwNDAwMjIwMDAwMzgyMTQ5Cis6MTA5MUUwMDAwMDBEMjlDMDBBMDAwRDJGMjdCRDAwMjAwRTAwMDA5MEExCis6MTA5MUYwMDAwMDAwMDAwMDhFMEQwMDA0MDIyMDMwMjE4RkJGMDAxOEY3Cis6MTA5MjAwMDA4RkIxMDAxNDhGQjAwMDEwMjQwNDAwMjIwMDAwMzgyMTE4Cis6MTA5MjEwMDAwMDBEMjlDMDBBMDAwRDJGMjdCRDAwMjAyN0JERkZFMDRCCis6MTA5MjIwMDBBRkIyMDAxODMwOTJGRkZGQUZCMDAwMTBBRkJGMDAxQzBDCis6MTA5MjMwMDBBRkIxMDAxNDEyNDAwMDFFMDAwMDgwMjE4Rjg2MDA1ODNDCis6MTA5MjQwMDA4Q0M1MDAwMDI0MDMwMDA2MDAwNTNGMDIwMDA1MTQwMjNGCis6MTA5MjUwMDAzMEU0MDAwNzE0ODMwMDE2MzA0NTAwRkYyQ0E4MDAwNkY4Cis6MTA5MjYwMDAxMTAwMDA0MDAwMDU1ODgwM0MwQzA4MDAyNThDNThCQ0JCCis6MTA5MjcwMDAwMTZDNTAyMThENDkwMDAwMDEyMDAwMDgwMDAwMDAwMDExCis6MTA5MjgwMDA4RjhFMDA5ODI0MEQwMDAxMTFDRDAwNTAyNDAyMDAwMkExCis6MTA5MjkwMDBBRjgyMDA5ODI2MDkwMDAxMzEzMEZGRkYyNEM4MDAyMDZBCis6MTA5MkEwMDAwMjEyMjAyQjAxMDAzMDIxMTQ4MEZGRTVBRjg4MDA1ODA2Cis6MTA5MkIwMDAwMjAwMTAyMThGQkYwMDFDOEZCMjAwMTg4RkIxMDAxNDY0Cis6MTA5MkMwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjA5Mzg3MDA3RUM4Cis6MTA5MkQwMDA1NEUwMDAzNDAwMDAzMDIxMEUwMDBERTcwMDAwMDAwMEQzCis6MTA5MkUwMDA4Rjg2MDA1ODBBMDAwRUZGMjQwMjAwMDE4Rjg3MDA5ODI1Cis6MTA5MkYwMDAyNDA1MDAwMjEwRTUwMDMxMjQwNDAwMTMwMDAwMjgyMTk5Cis6MTA5MzAwMDAwMDAwMzAyMTI0MDcwMDAxMEUwMDBEMkYwMDAwMDAwMDk2Cis6MTA5MzEwMDAwQTAwMEYwMDhGODYwMDU4OEY4MzAwOTgyNDAyMDAwMkY1Cis6MTA5MzIwMDAxNDYyRkZGNjI0MDQwMDEyMEUwMDBEOUEwMDAwMDAwMEUzCis6MTA5MzMwMDA4Rjg1MDA5NDAwNDAzMDIxMjQwNDAwMTIwRTAwMEQyRjcwCis6MTA5MzQwMDAwMDAwMzgyMTBBMDAwRjAwOEY4NjAwNTg4RjgzMDA5ODk0Cis6MTA5MzUwMDAyNDExMDAwMzEwNzEwMDI5MjQxRjAwMDIxMDdGRkZDRThBCis6MTA5MzYwMDAyNjA5MDAwMTI0MDQwMDEwMDAwMDI4MjEwMDAwMzAyMUZCCis6MTA5MzcwMDAwQTAwMEYxRDI0MDcwMDAxOEY5MTAwOTgyNDA2MDAwMkE3Cis6MTA5MzgwMDAxNjI2RkZGOTI0MDQwMDEwMEUwMDBFNDEwMDAwMDAwMDE0Cis6MTA5MzkwMDAxNDQwMDAyMzhGOTgwMDU4OEY4NjAwNTgwQTAwMEVGRjUzCis6MTA5M0EwMDAyNDAyMDAwMzI0MDQwMDE0MEUwMDBEMkYwMDAwMjgyMUM1Cis6MTA5M0IwMDA4Rjg2MDA1ODBBMDAwRUZGMjQwMjAwMDIwRTAwMEVBOTNDCis6MTA5M0MwMDAwMDAwMDAwMDBBMDAwRjAwOEY4NjAwNTgwRTAwMEQzRkJECis6MTA5M0QwMDAwMDAwMDAwMDI0MTkwMDAyMjQwNDAwMTQwMDAwMjgyMUM5Cis6MTA5M0UwMDAwMDAwMzAyMTAwMDAzODIxQUY5OTAwOTgwRTAwMEQyRkE5Cis6MTA5M0YwMDAwMDAwMDAwMDBBMDAwRjAwOEY4NjAwNTgwRTAwMEQ1Nzc1Cis6MTA5NDAwMDAwMDAwMDAwMDhGODUwMDk0MjQxOTAwMDIwMDQwMzAyMUU0Cis6MTA5NDEwMDAyNDA0MDAxMDAwMDAzODIxMEEwMDBGNTZBRjk5MDA5ODZDCis6MTA5NDIwMDAwMDQwMzgyMTI0MDQwMDEwOTcwRjAwMDIwMDAwMjgyMTdBCis6MTA5NDMwMDAwRTAwMEQyRjMxRTZGRkZGOEY4NjAwNTgwQTAwMEYwMDQ3Cis6MTA5NDQwMDBBRjkxMDA5ODhGODRGRjJDM0MwNzdGRkYzNEU2RkZGRjJECis6MTA5NDUwMDA4Qzg1MDAxODI0MDIwMDAxMDBBNjE4MjRBQzgzMDAxODkzCis6MTA5NDYwMDAwM0UwMDAwOEEwODIwMDA1MzA4NEZGRkYzMEE1RkZGRjY1Cis6MTA5NDcwMDAxMDgwMDAwNzAwMDAxODIxMzA4MjAwMDExMDQwMDAwMjE3Cis6MTA5NDgwMDAwMDA0MjA0MjAwNjUxODIxMTQ4MEZGRkIwMDA1Mjg0MERECis6MTA5NDkwMDAwM0UwMDAwODAwNjAxMDIxMTBDMDAwMDcwMDAwMDAwMDc5Cis6MTA5NEEwMDA4Q0EyMDAwMDI0QzZGRkZGMjRBNTAwMDRBQzgyMDAwMEFCCis6MTA5NEIwMDAxNEMwRkZGQjI0ODQwMDA0MDNFMDAwMDgwMDAwMDAwMDQ3Cis6MTA5NEMwMDAxMEEwMDAwODI0QTNGRkZGQUM4NjAwMDAwMDAwMDAwMEVECis6MTA5NEQwMDAwMDAwMDAwMDI0MDJGRkZGMjQ2M0ZGRkYxNDYyRkZGQTc0Cis6MTA5NEUwMDAyNDg0MDAwNDAzRTAwMDA4MDAwMDAwMDAwMDA0MTFDMDEwCis6MTA5NEYwMDAwM0UwMDAwODI0NDIwMjQwMjdCREZGRThBRkIwMDAxMDlGCis6MTA5NTAwMDAwMDgwODAyMUFGQkYwMDE0MEUwMDBGOTYwMEEwMjAyMTI0Cis6MTA5NTEwMDAwMDUwNDgyMTI0MEFGRjgwOEZCRjAwMTQ4RkIwMDAxMDM0Cis6MTA5NTIwMDAwMTJBMzAyNDMxMjcwMDdGM0MwODgwMEEzQzA0MjEwMEI2Cis6MTA5NTMwMDAwMEU4MTAyMTAwQzQyODI1M0MwMzgwMDAyN0JEMDAxODQ2Cis6MTA5NTQwMDBBQzY1MDAyNEFGODIwMDM4QUM0MDAwMDBBQzY1MDAyNDVDCis6MTA5NTUwMDAwM0UwMDAwOEFDNDAwMDQwM0MwRDA4MDA4REFEMDA1ODExCis6MTA5NTYwMDAwMDA1NjE4MDI0MEFGRjgwMDFBNDU4MjEwMTZDNDgyMTc0Cis6MTA5NTcwMDAwMTJBMzAyNDMxMjcwMDdGM0MwODgwMEMzQzA0MjEwMDY0Cis6MTA5NTgwMDAwMEU4MTAyMTAwQzQyODI1M0MwMzgwMDBBQzY1MDAyOEI5Cis6MTA5NTkwMDBBRjgyMDAzNDAzRTAwMDA4QUM0MDAwMjQzMEE1RkZGRjk4Cis6MTA5NUEwMDAzQzA2ODAwMDhDQzIwMUI4MDQ0MEZGRkUzQzA4NjAxNUY4Cis6MTA5NUIwMDAwMEE4MzgyNTNDMDMxMDAwQUNDNDAxODBBQ0MwMDE4NDc1Cis6MTA5NUMwMDBBQ0M3MDE4ODAzRTAwMDA4QUNDMzAxQjgzQzBEMDgwMDNCCis6MTA5NUQwMDA4REFEMDA1ODAwMDU2MTgwMjQwQUZGODAwMUE0NTgyMTQ4Cis6MTA5NUUwMDAwMTZDNDAyMTAxMEE0ODI0MDAwOTMxNDAzMTA3MDA3RjA1Cis6MTA5NUYwMDAwMEM3MjgyNTNDMDQyMDAwMDBBNDE4MjUzQzAyODAwMDU4Cis6MTA5NjAwMDBBQzQzMDgzMDAzRTAwMDA4QUY4MDAwMzQyN0JERkZFODFBCis6MTA5NjEwMDBBRkIwMDAxMDAwODA4MDIxQUZCRjAwMTQwRTAwMEY5Njg1Cis6MTA5NjIwMDAwMEEwMjAyMTAwNTA0ODIxMjQwQkZGODAwMTJCNTAyNDUyCis6MTA5NjMwMDAwMDBBMzk0MDMxMjgwMDdGM0MwNjIwMDA4RkJGMDAxNDBCCis6MTA5NjQwMDA4RkIwMDAxMDAwRTgyODI1MzRDMjAwMDEwMEEyMTgyNUMwCis6MTA5NjUwMDAzQzA0ODAwMDI3QkQwMDE4QUM4MzA4MzAwM0UwMDAwOEZDCis6MTA5NjYwMDBBRjgwMDAzODNDMDU4MDA4OENBNzAwNjAzQzA2ODAwODZECis6MTA5NjcwMDAwMDg3MTAyQjE0NDAwMDExMkM4MzQwMDA4Q0E4MDA2MDQwCis6MTA5NjgwMDAyRDAzNDAwMDEwNjAwMDBGMjQwMzQwMDA4Q0M5MDA2MENGCis6MTA5NjkwMDAwMDg5MjgyQjE0QTAwMDAyMDA4MDE4MjE4Q0MzMDA2MEQwCis6MTA5NkEwMDAwMDAzNUE0MjAwMEIzMDgwM0MwQTA4MDAyNTRBNTkyMDJBCis6MTA5NkIwMDAwMENBMjAyMTAzRTAwMDA4OEM4MjAwMDAxNDYwRkZGMzQwCis6MTA5NkMwMDAyNDAzNDAwMDAwMDM1QTQyMDAwQjMwODAzQzBBMDgwMDhCCis6MTA5NkQwMDAyNTRBNTkyMDAwQ0EyMDIxMDNFMDAwMDg4QzgyMDAwMDlFCis6MTA5NkUwMDAzQzA1ODAwODkwQTYwMDA4OTM4NDAwQUIyNEMyMDAwMUNBCis6MTA5NkYwMDAzMDQyMDBGRjMwNDMwMDdGMTA2NDAwMEMwMDAyMzgyNzI2Cis6MTA5NzAwMDBBMEEyMDAwODNDMDQ4MDAwOEM4NTAxNzgwNEEwRkZGRTI0Cis6MTA5NzEwMDA4RjhBMDBBMDI0MDkwMDAyM0MwODEwMDBBQzhBMDE0MDk2Cis6MTA5NzIwMDBBMDg5MDE0NDAzRTAwMDA4QUM4ODAxNzgwQTAwMTAxQkZFCis6MTA5NzMwMDAzMEUyMDA4MDI3QkRGRkQ4QUZCMjAwMTg4RjkyMDBBNDlFCis6MTA5NzQwMDBBRkJGMDAyMEFGQjMwMDFDQUZCMDAwMTBBRkIxMDAxNDJBCis6MTA5NzUwMDA4RjkzMDAzNDhFNTkwMDI4M0MxMDAwODAzQzBFRkZFRkEwCis6MTA5NzYwMDBBRTc5MDAwMDhFNTgwMDI0QTI2MDAwMEEzNUNERkZGRkJDCis6MTA5NzcwMDBBRTc4MDAwNDkyNTEwMDJDM0MwQkZGOUYzNTZBRkZGRjJFCis6MTA5NzgwMDBBMjcxMDAwQzhFNkYwMDBDM0MwODAwNDBBMjcxMDAwQjBGCis6MTA5NzkwMDAwMUYwNjAyNTAxOEQ0ODI0MDEyQTM4MjQwMEU4MzAyNTk1Cis6MTA5N0EwMDBBRTY2MDAwQzhFNDUwMDA0QUU2MDAwMTgzQzA0MDBGRjVECis6MTA5N0IwMDBBRTY1MDAxNDhFNDMwMDJDMzQ4MkZGRkZBNjYwMDAwOEMzCis6MTA5N0MwMDAwMDYyRjgyNEFFN0YwMDEwOEU1OTAwMDg4RjkwMDBBMDMwCis6MTA5N0QwMDA5NjRFMDAxMkFFNzkwMDIwOEU1MTAwMEMzMUQ4M0ZGRjFBCis6MTA5N0UwMDAwMDE4Nzk4MEFFNzEwMDI0OEU0RDAwMTQwMUYwNjAyMUM0Cis6MTA5N0YwMDAzMUNCMDAwMUFFNkQwMDI4OEU0QTAwMTgwMDBDNDFDMjJBCis6MTA5ODAwMDAwMDBCNEI4MEFFNkEwMDJDOEU0NjAwMUMwMTA5MzgyMUVCCis6MTA5ODEwMDBBNjY3MDAxQ0FFNjYwMDMwOTY0NTAwMDI4RTQ0MDAyMDBDCis6MTA5ODIwMDBBNjY1MDAxRUFFNjQwMDM0OTI0MzAwMzMzMDYyMDAwNDJCCis6MTA5ODMwMDA1NDQwMDAwNjkyNDcwMDAwM0MwMjgwMDgzNDQzMDEwMDc3Cis6MTA5ODQwMDA4QzdGMDBEMEFFN0YwMDMwOTI0NzAwMDA4Rjg2MDAzOEJBCis6MTA5ODUwMDBBMEM3MDAzMDkyNDUwMDMzMzBBNDAwMDI1MDgwMDAwN0JBCis6MTA5ODYwMDA5MjUxMDAwMThGODgwMDM4MjQwQkZGODA5MTBBMDAzMDRDCis6MTA5ODcwMDAwMTRCNDgyNUExMDkwMDMwOTI1MTAwMDE4RjkwMDAzODFBCis6MTA5ODgwMDAyNDBDRkZCRjI0MDRGRkRGQTIxMTAwMzE4RjhEMDAzOEFDCis6MTA5ODkwMDAzQzE4ODAwODM3MTEwMDgwOTFBRjAwM0MzMUVFMDA3RjBBCis6MTA5OEEwMDBBMUFFMDAzQzhGODkwMDM4OTEyQjAwM0MwMTZDNTAyNDA0Cis6MTA5OEIwMDBBMTJBMDAzQzhGOUYwMDM4OEU2ODAwMTQ5M0U2MDAzQzdDCis6MTA5OEMwMDAyRDA3MDAwMTAwMDcxMTQwMDBDNDI4MjQwMEEyMTgyNTFDCis6MTA5OEQwMDBBM0UzMDAzQzhGODcwMDM4OTY1OTAwMTJBNEY5MDAzMkE4Cis6MTA5OEUwMDA4RTQ1MDAwNDkyMkUwMDdDMzBCMDAwMDMwMDEwNzgyM0Q3Cis6MTA5OEYwMDAzMUVEMDAwMzAwQUQxMDIxMzFDQzAwMDIxNTgwMDAwMkQzCis6MTA5OTAwMDAyNDQ2MDAzNDI0NDYwMDMwM0MwMjgwMDgzNDQzMDA4MDYyCis6MTA5OTEwMDA5MDdGMDA3QzAwQkZDODI0MzMzODAwMDQxNzAwMDAwMjg5Cis6MTA5OTIwMDAyNEMyMDAwNDAwQzAxMDIxOEY5ODAwMzgyNDE5MDAwMkJFCis6MTA5OTMwMDBBQ0UyMDAzNEEzMTkwMDAwOTI0RjAwM0Y4RjhFMDAzODM0Cis6MTA5OTQwMDAzQzBDODAwODM1OEIwMDgwQTFDRjAwMDE4RjkxMDAzODNFCis6MTA5OTUwMDA5MjREMDAzRjhFNDQwMDA0QTYyRDAwMDI5NTZBMDA1Q0UzCis6MTA5OTYwMDAwRTAwMEZGNDMxNTBGRkZGMDAwMjRCODAwMjA5MzgyNTMyCis6MTA5OTcwMDAzQzA4NDIwMDAwRTgyODI1QUUyNTAwMDQ4RTQ0MDAzODRCCis6MTA5OTgwMDA4Rjg1MDAzOEFDQTQwMDE4OEU0NjAwMzRBQ0E2MDAxQ0FECis6MTA5OTkwMDBBQ0EwMDAwQ0FDQTAwMDEwQTRBMDAwMTRBNEEwMDAxNjYxCis6MTA5OUEwMDBBNEEwMDAyMEE0QTAwMDIyQUNBMDAwMjQ4RTYyMDAxNDc5Cis6MTA5OUIwMDA1MDQwMDAwMTI0MDIwMDAxOEZCRjAwMjA4RkIzMDAxQzIzCis6MTA5OUMwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTBBQ0EyMDAwODQ1Cis6MTA5OUQwMDAwQTAwMTAxMzI3QkQwMDI4MjdCREZGQzgzQzA1ODAwOERBCis6MTA5OUUwMDAzNEE0MDA4MEFGQkYwMDM0QUZCRTAwMzBBRkI3MDAyQzRFCis6MTA5OUYwMDBBRkI2MDAyOEFGQjUwMDI0QUZCNDAwMjBBRkIzMDAxQzUxCis6MTA5QTAwMDBBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTA5NDgzMDA3ODZCCis6MTA5QTEwMDA5NDgyMDA3QTEwNDMwMDUxMjQwNUZGRkYwMDgwRjAyMTVBCis6MTA5QTIwMDAwQTAwMTEyMzAwODBCODIxMTA4QjAwNEQ4RkJGMDAzNDM1Cis6MTA5QTMwMDA4Rjg2MDBBMDNDMTgwODAwOEYxODAwNUMyNDExRkY4MDVFCis6MTA5QTQwMDAzQzE2ODAwMDAzMDY3ODIxMDFGMTgwMjRBRUQwMDAyQzYyCis6MTA5QTUwMDA5NkVFMDA3QTMxRUMwMDdGM0MwRDgwMEUzMUNCN0ZGRjFCCis6MTA5QTYwMDAwMThENTAyMTAwMEI0ODQwMDEyQUE4MjE5NkE0MDAwMDM2Cis6MTA5QTcwMDAzQzA4MDgwMDhEMDgwMDU4MjQwNUZGODAzMDk1M0ZGRjAyCis6MTA5QTgwMDAwMTA2MTgyMTAwMTUzOTgwMDA2N0M4MjEwMzI1RjgyNDM0Cis6MTA5QTkwMDAzQzAyMDEwMDAzRTI5MDI1MzMzODAwN0YzQzExODAwQzJBCis6MTA5QUEwMDBBRUQyMDAyODAzMTE5MDIxOTI1MDAwMEQzMjBGMDAwNDE1Cis6MTA5QUIwMDAxMUUwMDAzNzAyRTA5ODIxOTZFMzAwN0E5NkU4MDA3QUY4Cis6MTA5QUMwMDA5NkU1MDA3QTI0MDQ4MDAwMzEwNzdGRkYyNEUzMDAwMTNCCis6MTA5QUQwMDAzMDYyN0ZGRjAwQTRGODI0MDNFMkM4MjVBNkY5MDA3QUNCCis6MTA5QUUwMDA5NkU2MDA3QTNDMTQwODAwOEU5NDAwNjAzMEQ2N0ZGRjIyCis6MTA5QUYwMDAxMkQ0MDBDMTAwMDAwMDAwOEU1ODAwMTg4Rjg0MDBBMDBFCis6MTA5QjAwMDAwMkEwMjgyMTI3MTNGRkZGMEUwMDBGQ0VBRTUzMDAyQzFBCis6MTA5QjEwMDA5N0Q1MDA3ODk3RDQwMDdBMTI5NTAwMTAwMDAwMjgyMTdDCis6MTA5QjIwMDAzQzA5ODAwODM1MjQwMTAwM0MwQTgwMDg5MTQ4MDAwODVGCis6MTA5QjMwMDA5MDg3MDBENTMxMTQwMDdGMzBFNDAwRkYwMjg0MzAyQjgxCis6MTA5QjQwMDAxNEMwRkZCOTI2OEIwMDAxOTM4RTAwQUIyNjhDMDAwMTU4Cis6MTA5QjUwMDAwMDhFNjgyMTE1QUNGRkI3OEY4NjAwQTA4RkJGMDAzNDQwCis6MTA5QjYwMDA4RkJFMDAzMDhGQjcwMDJDOEZCNjAwMjg4RkI1MDAyNDMxCis6MTA5QjcwMDA4RkI0MDAyMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNDc3Cis6MTA5QjgwMDA4RkIwMDAxMDAwQTAxMDIxMDNFMDAwMDgyN0JEMDAzOEFFCis6MTA5QjkwMDAwMEMwMjAyMTBFMDAwRjk5MDI4MDI4MjE4RTRCMDAxMDVBCis6MTA5QkEwMDA4RTRDMDAzMDhGODQwMDM4MjQwOTAwMDIwMTZDNTAyMzUxCis6MTA5QkIwMDBBRTRBMDAxMEEwODkwMDAwOTZFMzAwNUM4RTQ0MDAzMDlECis6MTA5QkMwMDA4RjkxMDAzODBFMDAwRkY0MzA3MEZGRkYwMDAyNDM4MEM5Cis6MTA5QkQwMDAwMjA4MzgyNTNDMDI0MjAwMDBFMjI4MjVBRTI1MDAwNDk4Cis6MTA5QkUwMDA4RTVGMDAwNDhGOEEwMDM4OEU1OTAwMDAyNDBCMDAwODE1Cis6MTA5QkYwMDBBRDVGMDAxQ0FENTkwMDE4QUQ0MDAwMENBRDQwMDAxMDI5Cis6MTA5QzAwMDA5MjQ2MDAwQTI0MDQwMDA1MjQwOEMwMDAzMEQwMDBGRjVBCis6MTA5QzEwMDBBNTUwMDAxNDk2NTgwMDA4QTU1ODAwMTY5MjUxMDAwQTQ1Cis6MTA5QzIwMDAzQzE4ODAwODMyMkYwMEZGQTU0RjAwMjA5NjRFMDAwOEY4Cis6MTA5QzMwMDAzNzExMDEwMEE1NEUwMDIyQUQ0MDAwMjQ5MjREMDAwQkNCCis6MTA5QzQwMDAzMUFDMDBGRkE1NEMwMDAyQTE0QjAwMDE4RTQ5MDAzMDUxCis6MTA5QzUwMDA4RjgzMDAzODI0MEJGRkJGQUM2OTAwMDhBMDY0MDAzMDdDCis6MTA5QzYwMDA4RjkwMDAzODI0MDNGRkRGOTYwNzAwMzIwMEU4MjgyNDk1Cis6MTA5QzcwMDAwMEI1MTAyNUE2MDIwMDMyOTIxRjAwMzIzM0Y5MDAzRkQyCis6MTA5QzgwMDAzNzI2MDA0MEEyMDYwMDMyOEY4QzAwMzhBRDgwMDAzNEE5Cis6MTA5QzkwMDA4RTJGMDBEMEFEOEYwMDM4OTE4RTAwM0MzQzBGN0ZGRjlGCis6MTA5Q0EwMDAzMUNEMDA3RkExOEQwMDNDOEY4NDAwMzgzNUVFRkZGRjYxCis6MTA5Q0IwMDA5MDhBMDAzQzAxNEI0ODI0QTA4OTAwM0M4Rjg1MDAzOEU1Cis6MTA5Q0MwMDA5MEE4MDAzQzAxMDMzODI0QTBBNzAwM0M4RTQyMDAzNDM5Cis6MTA5Q0QwMDA4RjkxMDAzODNDMDM4MDA4QUUyMjAwNDA4RTU5MDAyQzQyCis6MTA5Q0UwMDA4RTVGMDAzMDAzM0YzMDIzQUUyNjAwNDQ5MjMwMDA0OEEwCis6MTA5Q0YwMDAzMjE4MDA3RkEyMzgwMDQ4OEY4ODAwMzg4RTREMDAzMDFGCis6MTA5RDAwMDA4RDBDMDA0ODAxQUU1ODI0MDE5NjUwMjQwMTRCNDgyNTgzCis6MTA5RDEwMDBBRDA5MDA0ODkyNDQwMDBBQTEwNDAwNEM5NjQ3MDAwODhGCis6MTA5RDIwMDA4Rjg1MDAzOEE0QTcwMDRFOEU1MDAwMzA4RTQ0MDAzMDNFCis6MTA5RDMwMDAwRTAwMDM4MThDNjUwMDYwOTJGOTAwN0MwMDAyRjk0MEZFCis6MTA5RDQwMDAwMDQwMjgyMTAwMDIxMTAwMDNFMjMwMjEzMzM2MDAwMkQ2Cis6MTA5RDUwMDAxMkMwMDAwMzAyMDY4MDIxMDAwNUIwODAwMjE2ODAyMTk3Cis6MTA5RDYwMDA5MjZEMDA3QzMxQjMwMDA0MTI2MDAwMDIwMDA1NzA4MDI3Cis6MTA5RDcwMDAwMjBFODAyMThFNEIwMDMwOEY4ODAwMzgyNDA1ODAwMDMxCis6MTA5RDgwMDAzMTZBMDAwMzAwMEE0ODIzMzEyNDAwMDMwMjA0MTgyMTI5Cis6MTA5RDkwMDBBRDAzMDAzNDk2RTQwMDdBOTZGMDAwN0E5NkYxMDA3QUVBCis6MTA5REEwMDAzMjAyN0ZGRjI0NDcwMDAxMzBGRjdGRkYwMjI1QzgyNEQ1Cis6MTA5REIwMDAwMzNGMzAyNUE2RTYwMDdBOTZGODAwN0EzQzEyMDgwMEE4Cis6MTA5REMwMDA4RTUyMDA2MDMzMEY3RkZGMTFGMjAwMTgwMDAwMDAwMDc4Cis6MTA5REQwMDA4Rjg0MDBBMDBFMDAwRkNFMDJBMDI4MjE4Rjg0MDBBMDQ3Cis6MTA5REUwMDAwRTAwMEZERTAyODAyODIxMEUwMDEwMTMwMDAwMDAwMDdDCis6MTA5REYwMDAwQTAwMTExRjAwMDAwMDAwOTZGMTAwN0EwMjI0ODAyNDVFCis6MTA5RTAwMDBBNkYwMDA3QTkyRUYwMDdBOTJFQjAwN0EzMUVFMDBGRjMyCis6MTA5RTEwMDAwMDBFNjlDMjAwMEQ2MDI3MDAwQzUxQzAzMTY5MDA3RjNGCis6MTA5RTIwMDAwMTJBMjAyNTBBMDAxMTE5QTJFNDAwN0E5NkU2MDA3QTk4Cis6MTA5RTMwMDAwMEM1QzAyNEE2RjgwMDdBOTJFRjAwN0E5MkYzMDA3QTY3Cis6MTA5RTQwMDAzMUYyMDBGRjAwMTI3MUMyMDAwRTY4MjcwMDBEQjFDMDkwCis6MTA5RTUwMDAzMjZDMDA3RjAxOTYyODI1QTJFNTAwN0EwQTAwMTFEMDE1Cis6MTA5RTYwMDA4Rjg0MDBBMDNDMDM4MDAwMzA4NEZGRkYzMEE1RkZGRkZCCis6MTA5RTcwMDBBQzY0MDAxOEFDNjUwMDFDMDNFMDAwMDg4QzYyMDAxNEEwCis6MTA5RTgwMDAyN0JERkZBMDNDMDY4MDA4QUZCRjAwNUNBRkJFMDA1OEY2Cis6MTA5RTkwMDBBRkI3MDA1NEFGQjYwMDUwQUZCNTAwNENBRkI0MDA0OEY4Cis6MTA5RUEwMDBBRkIzMDA0NEFGQjIwMDQwQUZCMTAwM0NBRkIwMDAzODM4Cis6MTA5RUIwMDAzNEM4MDEwMDkxMDUwMEQ1OTBDNzAwMDgzMDg0RkZGRjI5Cis6MTA5RUMwMDAzMEE1MDBGRjMwRTIwMDdGMDA0NTE4MkFBRkE0MDAxMDQzCis6MTA5RUQwMDBBN0EwMDAxOEE3QTAwMDI2MTA2MDAwNTVBRkEwMDAxNDhFCis6MTA5RUUwMDA5MENBMDAwODMxNDkwMDdGMDBBOTMwMjMyNEQzRkZGRjI2Cis6MTA5RUYwMDAwMDEzODAyQjhGQjQwMDEwMDAxNDkwMkIwMjEyODgyNEMyCis6MTA5RjAwMDA1MjIwMDA4ODhGQjMwMDE0M0MwMzgwMDg5NDc5MDA1MkRCCis6MTA5RjEwMDA5NDdFMDA1MDhGQjYwMDEwMDMzRUMwMjMwMDE4QkMwMDkyCis6MTA5RjIwMDAwMDE3MTQwMzAwMTZGQzAwMDJDMkE4MkExNkEwMDAwMkEzCis6MTA5RjMwMDAwMDFGMkMwMzAwNDAyODIxMDAxMzNDMDAwMDA3MjQwM0NECis6MTA5RjQwMDAwMEE0MTAyQTU0NDAwMDAxMDBBMDIwMjEyODg1MDAwOTA3Cis6MTA5RjUwMDAxNEEwMDAwMjAwODBBMDIxMjQxNDAwMDgzQzBDODAwOEZBCis6MTA5RjYwMDA4RDg2MDA0ODAwMTQ1OTgwOEQ4ODAwNEMzQzAzODAwMDg5Cis6MTA5RjcwMDAzMTY5RkZGRjNDMEEwMDEwMDEyQTIwMjUzNDcxMDQwMERBCis6MTA5RjgwMDBBQzY2MDAzOEFGOTEwMEE0QUM2ODAwM0NBQzY0MDAzMDEzCis6MTA5RjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTA5RkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIxCis6MTA5RkIwMDA4QzZFMDAwMDMxQ0QwMDIwMTFBMEZGRkQwMDE0NzgyQTI2Cis6MTA5RkMwMDAwMUYwMTAyNDEwNDAwMDM5MDAwMEE4MjEzQzE2ODAwODQwCis6MTA5RkQwMDA5MkQ3MDAwODNDMTI4MDAwOEU0NDAxMDAzMkY2MDA3RkM4Cis6MTA5RkUwMDAwRTAwMEY5OTAyQzAyODIxOEUzOTAwMTA4RTQ0MDEwMDA2Cis6MTA5RkYwMDAwMDAwOTAyMTMzMzczRkZGMEUwMDBGQjEwMkUwMjgyMTBGCis6MTBBMDAwMDA5MjM4MDAwMDMzMDIwMDNGMkM1MDAwMDg1MjAwMDAxMDJDCis6MTBBMDEwMDAwMDAwODgyMTAwMDIxMDgwM0MwMzA4MDAyNDYzNThFNEZCCis6MTBBMDIwMDAwMDQzRjgyMThGRkUwMDAwMDNDMDAwMDgwMDAwMDAwMDdDCis6MTBBMDMwMDA5MENGMDAwODkzOEMwMEFCMzFFRTAwN0YwMEFFNjgyMzE4Cis6MTBBMDQwMDAwMThENTgyMTBBMDAxMjE3MjU3M0ZGRkYwMDAwODgyMTk3Cis6MTBBMDUwMDAzQzFFODAwMDhGQzQwMTAwMEUwMDBGQ0UwMkUwMjgyMUJDCis6MTBBMDYwMDA4RkM0MDEwMDBFMDAwRkRFMDJDMDI4MjExMjIwMDAwRjU1Cis6MTBBMDcwMDAwMDEzODAyQjhGOEIwMEE0MjZBNDAwMDEwMDA0QUMwMEU5Cis6MTBBMDgwMDAwMjcyOTgyMzAwMTVBQzAzMjU3ODAwNDAwMkI0QjAyQTcwCis6MTBBMDkwMDAwMDEzODAyQjI0MTcwMDAxMDMwMDg4MjEwMkQwMTAyNDE0Cis6MTBBMEEwMDBBRjk4MDBBNDE0NDBGRkM5QUZCNzAwMTQzQzA3ODAwODY0Cis6MTBBMEIwMDA5NEUyMDA1MDhGQUUwMDEwM0MwNTgwMDAwMkEyODgyMTdGCis6MTBBMEMwMDAzQzA2MDAyMEE0RjEwMDUwQUNBNjAwMzA5NEY0MDA1MEVGCis6MTBBMEQwMDA5NEVGMDA1MjAxRDUxODIzMzA2Q0ZGRkYxMUY0MDAxRURECis6MTBBMEUwMDBBRkFDMDAxMDhDRUYwMDRDMDAxNTYxODA4Q0Y1MDA0ODdGCis6MTBBMEYwMDAwMUVDMjgyMTAwMDAyMDIxMDBBQzU4MkIwMkE0QzAyMTMzCis6MTBBMTAwMDAwMzBCQjAyMUFDRTUwMDRDQUNGNjAwNDg4RkI0MDAxMDU2Cis6MTBBMTEwMDAwMDE0OTAyQjAyMTI4ODI0MTYyMEZGN0MzQzAzODAwODM4Cis6MTBBMTIwMDA4RkIzMDAxNDhGQkYwMDVDOEZCRTAwNTgzQTYyMDAwMUVECis6MTBBMTMwMDA4RkI3MDA1NDhGQjYwMDUwOEZCNTAwNEM4RkI0MDA0OEQ1Cis6MTBBMTQwMDA4RkIzMDA0NDhGQjIwMDQwOEZCMTAwM0M4RkIwMDAzODE1Cis6MTBBMTUwMDAwM0UwMDAwODI3QkQwMDYwOTRGRTAwNTQ4Q0YyMDA0NDI4Cis6MTBBMTYwMDAzM0M5RkZGRTAwMDlDOEMwMDI1OUY4MjFBQ0JGMDAzQzRBCis6MTBBMTcwMDA4Q0U4MDA0NDhDQUQwMDNDMDEwRDUwMjMxOTQwMDAzQjlECis6MTBBMTgwMDAwMDAwMDAwMDhDRjcwMDQwMjZFMjAwMDFBQ0EyMDAzODdECis6MTBBMTkwMDAzQzA1MDA1MDM0QTcwMDEwM0MwMzgwMDBBQzY3MDAzMDQxCis6MTBBMUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTBBMUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlGCis6MTBBMUMwMDA4Qzc4MDAwMDMzMTYwMDIwMTJDMEZGRkQzQzExODAwODdGCis6MTBBMUQwMDA5NjIyMDA1NDNDMTU4MDAwM0MwNjgwMDgzMDRFMDAwMTU5Cis6MTBBMUUwMDAwMDBFMThDMDAwNzU3ODIxOERFQzA0MDAzQzA3MDgwMEIzCis6MTBBMUYwMDA4Q0U3MDA0NDNDMDQwMDIwQUNDQzAwNDg4REY0MDQwNEZGCis6MTBBMjAwMDAyNDBCMDAwMUFDRDQwMDRDMTBFQjAyNjBBRUE0MDAzMDczCis6MTBBMjEwMDA5NjM5MDA1MjNDMDUwODAwOENBNTAwNDAwMEI5OTAyMUY5Cis6MTBBMjIwMDBBNjMyMDA1Mjk2M0YwMDU0MjdFRDAwMDFBNjJEMDA1NDlGCis6MTBBMjMwMDA5NjI2MDA1NDMwQzRGRkZGNTQ4N0ZGMkY4RkI0MDAxMEMwCis6MTBBMjQwMDAzMEE1RkZGRjBFMDAxMUY0QTYyMDAwNTQzQzA3MDgwMEMzCis6MTBBMjUwMDA4Q0U3MDAyNDk2M0UwMDUyMDA0N0I4MjMwM0Q3NDgyM0RBCis6MTBBMjYwMDBBNjI5MDA1MjBBMDAxMjE5OEZCNDAwMTA4Q0UyMDA0MDk3Cis6MTBBMjcwMDAwQTAwMTJCRTAwMDAwMDAwOTIyNDAwMDEyNDA3MDAwMTIxCis6MTBBMjgwMDAzMDg1MDA3RjE0QTcwMDFDOTdBRDAwMjY4RTJCMDAxNDhDCis6MTBBMjkwMDAyNDBDQzAwMDMxNkEzRkZGMDFBQzQ4MjQzQzA2MDgwMDkyCis6MTBBMkEwMDA4Q0M2MDA2MDAxMkE0MDI1MzEwNDNGRkYwMDg2ODgyQkMwCis6MTBBMkIwMDAxMjIwMDAxMUE3QTgwMDI2M0MwNTA4MDA4Q0E1MDA1ODE0Cis6MTBBMkMwMDA4RjkxMDBBMDAwMDQzOTgwMjQwMkZGODAwMEIxMTgyMTgyCis6MTBBMkQwMDAwMDY3RjgyMTAzRTJGMDI0MzNGODAwN0YzQzEyODAwMDhECis6MTBBMkUwMDAzQzE5ODAwRUFFNUUwMDJDMDMxOTcwMjE5MUQwMDAwRDM4Cis6MTBBMkYwMDAzNjBGMDAwNEExQ0YwMDBEMEUwMDEwMjgyNDEyMDAwMTFCCis6MTBBMzAwMDAyNDExMDAwMTNDMUU4MDAwOEZDNDAxMDAwRTAwMEZDRUZFCis6MTBBMzEwMDAwMkUwMjgyMThGQzQwMTAwMEUwMDBGREUwMkMwMjgyMUI4Cis6MTBBMzIwMDAxNjIwRkY1NThGOEIwMEE0MEEwMDEyODYwMDEzODAyQjg1Cis6MTBBMzMwMDA4Rjg2MDBBNDkwQzgwMDAxMzEwNDAwMjAxMDgwMDE5MTk0Cis6MTBBMzQwMDAyNDEwMDAwMTNDMDQ4MDA4MzQ4QjAwODA5MTZBMDA3QzVBCis6MTBBMzUwMDA4RjlFMDAzNEFGQTAwMDJDMzE0OTAwMDExMTIwMDAwRjY2Cis6MTBBMzYwMDBBRkIwMDAyODhDQ0QwMDE0OEM4RTAwNjAwMUFFNjAyQjQ1Cis6MTBBMzcwMDAxNTgwMDAwMjAxQTAzODIxOEM4NzAwNjAzQzE4ODAwOEZECis6MTBBMzgwMDAzNzAzMDA4MDhDNzAwMDcwMDBGMDc4MkIxNUUwMDAwMjFECis6MTBBMzkwMDAwMEUwMjAyMThDNjQwMDcwQUZBNDAwMkMzQzAyODAwOEY3Cis6MTBBM0EwMDAzNDQ1MDA4MDhDRDIwMDE0OENCRjAwNzAwMjVGQzgyQjMzCis6MTBBM0IwMDAxNzIwMDAwMjAyNDAyMDIxOENBNDAwNzA4RkE3MDAyQ0RGCis6MTBBM0MwMDAwMDg3MTgyMzEwNjAwMDAzQUZBMzAwMzAyNDA1MDAwMkFCCis6MTBBM0QwMDBBRkE1MDAyODhGQTQwMDI4MDI2NDg4MkIxNjIwMDBCQTlECis6MTBBM0UwMDAwMDAwMTgyMThDRDAwMDM4OEZDRTAwMEMzQzBGMDA4MDZDCis6MTBBM0YwMDBBRkQwMDAwMDhDQ0QwMDM0M0MwQ0ZGOUYwMUNGNTgyNTFFCis6MTBBNDAwMDBBRkNEMDAwNDkwQ0EwMDNGMzU4NkZGRkYwMTY2MjAyNENGCis6MTBBNDEwMDAzQzA5MDAyMDNDMDhGRkVGQTNDQTAwMEIwMDg5MzgyNTQ3Cis6MTBBNDIwMDAzNTExRkZGRjAwRjExODI0M0MwNTAwMDg4Rjg3MDBBNEI4Cis6MTBBNDMwMDAwMDY1QzgyNUFGRDkwMDBDOENFMjAwMTRBRkMwMDAxODJECis6MTBBNDQwMDA4RkE2MDAzMEFGQzIwMDE0OENGODAwMTg4RkIwMDAyQzFCCis6MTBBNDUwMDAzQzFGRkZGQkFGRDgwMDFDOENFRjAwMDgzN0YyRkZGRjVBCis6MTBBNDYwMDAwMzMyNjgyNEFGQ0YwMDI0OENFQzAwMEMwMjA2NzAyMTZDCis6MTBBNDcwMDBBRkNEMDAwQ0E3QzAwMDM4QTdDMDAwM0FBRkNFMDAyQzZCCis6MTBBNDgwMDBBRkNDMDAyMEFGQzAwMDI4OENFQTAwMTQ4RkFCMDAyQ0FBCis6MTBBNDkwMDAwMTRCNDgyMzAxMjY0MDIzMTEwMDAwMTFBRkM4MDAxMEQyCis6MTBBNEEwMDA5MEVCMDAzRDhGQzkwMDA0OEZDODAwMDAwMDBCNTEwMEU1Cis6MTBBNEIwMDAwMTJBMjgyMTAwMDAxMDIxMDBBQTg4MkIwMTAyMTgyMTVFCis6MTBBNEMwMDAwMDcxRjgyMUFGQzUwMDA0QUZERjAwMDA5MEYyMDAzRDNECis6MTBBNEQwMDBBM0QyMDAwQThGOTkwMEE0OTczODAwMDZBN0Q4MDAwOEQ1Cis6MTBBNEUwMDA4RjkxMDAzODI0MDgwMDAyM0MwMzgwMDhBMjI4MDAwMDU1Cis6MTBBNEYwMDAzNDY1MDA4MDk0QkYwMDVDOEZBNDAwMkMzM0YwRkZGRjE0Cis6MTBBNTAwMDAwRTAwMEZGNDhGOTIwMDM4MDAwMkNCODA4Rjg1MDBBNERDCis6MTBBNTEwMDAwMjE5NzgyNTNDMTg0MjAwMDFGODcwMjVBRTRFMDAwNDVGCis6MTBBNTIwMDA4Rjg0MDAzODhDQUQwMDM4QUM4RDAwMTg4Q0FDMDAzNEIyCis6MTBBNTMwMDBBQzhDMDAxQ0FDODAwMDBDQUM4MDAwMTBBNDgwMDAxNDFCCis6MTBBNTQwMDBBNDgwMDAxNkE0ODAwMDIwQTQ4MDAwMjJBQzgwMDAyNEY3Cis6MTBBNTUwMDA5MEE2MDAzRjhGQTcwMDJDQTQ4NjAwMDI1MEUwMDE5MjM1Cis6MTBBNTYwMDAyNDA3MDAwMThGQTIwMDMwNTA0MDAwMDI5MEEyMDAzRDVECis6MTBBNTcwMDA5MEEyMDAzRTI0NEEwMDAxQTA4QTAwMDE4Rjg0MDAzODg2Cis6MTBBNTgwMDA4RkE5MDAyQ0FDODkwMDA4M0MxMjgwMDgzNjREMDA4MDUxCis6MTBBNTkwMDA5MUFDMDA3QzMxODYwMDAyMTRDMDAwMDIyNDA3MDAzNDE0Cis6MTBBNUEwMDAyNDA3MDAzMDhGODUwMEE0M0MxOTgwMDgzNzNGMDA4MEM1Cis6MTBBNUIwMDA5MEIwMDAwMDkzRjkwMDdDMjQwRTAwMDRBMDkwMDAzMEJECis6MTBBNUMwMDA4RjhGMDBBNDhGQjgwMDJDOEY4RDAwMzg5MUYyMDAwMTdFCis6MTBBNUQwMDAzMzA0MDAwMzAxQzQ2MDIzQTFCMjAwMzE4RjhFMDAzODIwCis6MTBBNUUwMDA4Rjg2MDBBNDI0MDJDMDAwOTVDQTAwMzI5NEM5MDAxMkNDCis6MTBBNUYwMDA4RkFCMDAyQzAxNDI0MDI0MzEyMzNGRkYwMTAzODgyNTBCCis6MTBBNjAwMDBBNUQxMDAzMjkxRDAwMDMyMzE4NTAwMDMwMEVCRjgyMTUyCis6MTBBNjEwMDAzMjE4MDAzRjM3MEYwMDQwQTFDRjAwMzI4RkE0MDAyQzJBCis6MTBBNjIwMDAwM0U1MzgyMTMzMjgwMDA0MTA4MDAwMDI4Rjg1MDAzOEFDCis6MTBBNjMwMDAwMEU4MzgyMTNDMEE4MDA4QUNBNzAwMzQzNTQ5MDEwMDA1Cis6MTBBNjQwMDA4RDI4MDBEMDhGQTMwMDJDMjQxOUZGQkZBQ0E4MDAzOEEwCis6MTBBNjUwMDA5MEIxMDAzQzJDNjQwMDAxMjQwRkZGREYzMjI3MDA3RjAzCis6MTBBNjYwMDBBMEE3MDAzQzhGOTgwMDM4MDAwNDkxNDA5MzFGMDAzQzQ1Cis6MTBBNjcwMDAwM0Y5ODAyNEEzMTAwMDNDOEY4QzAwMzg5MThFMDAzQzlECis6MTBBNjgwMDAwMUNGNjgyNDAxQjIzMDI1QTE4NjAwM0M4Rjg5MDBBNDQ3Cis6MTBBNjkwMDA4Rjg4MDAzODhEMkIwMDIwQUQwQjAwNDA4RDIyMDAyNEM4Cis6MTBBNkEwMDBBRDAyMDA0NDhEMkEwMDI4QUQwQTAwNDg4RDIzMDAyQ0ZECis6MTBBNkIwMDAwRTAwMTAxM0FEMDMwMDRDOEZCMTAwMjgyNDA3MDAwMkQ4Cis6MTBBNkMwMDAxMjI3MDAxMThGQTMwMDI4MDAwMzI4MkIwMDA1ODAyM0U4Cis6MTBBNkQwMDAwMjcwOTgyNDAwNjA4MDIxMDA2MDkwMjEwQTAwMTI2RkFGCis6MTBBNkUwMDAwMDEwODgyQjk2MjkwMDEyOEY4NDAwQTAwMDAwOTAyMTcyCis6MTBBNkYwMDAzMTI1RkZGRkE3QTkwMDE4MEUwMDBGQzIyNDExMDAwMTg5Cis6MTBBNzAwMDAwQTAwMTMxRDNDMUU4MDAwM0MwQjgwMDAzQzEyODAwODk4Cis6MTBBNzEwMDA4RDY0MDEwMDkyNDkwMDA4OEY5MkZGMzQwRTAwMEY5OTVBCis6MTBBNzIwMDAzMTI1MDA3RjhGOTkwMDM4OEZBNzAwMjg4RkE0MDAzMDMzCis6MTBBNzMwMDBBMzI3MDAwMDk2NUYwMDVDMzNGMEZGRkYwRTAwMEZGNENDCis6MTBBNzQwMDA4RjkxMDAzODAwMDI2QjgwMDIwRDgwMjUzQzA4NDIwMDhBCis6MTBBNzUwMDA4RjhEMDBBNDAyMDg1MDI1QUUyQTAwMDQ4REE1MDAzODc0Cis6MTBBNzYwMDA4RjhBMDAzODAwMDA3ODIxMDAwRjExMDBBRDQ1MDAxOEQ1Cis6MTBBNzcwMDA4REI4MDAzNDNDMDQ3RkZGMzQ4OEZGRkZBRDU4MDAxQ0M3Cis6MTBBNzgwMDA5MUE2MDAzRThENEMwMDFDOEQ0OTAwMTgwMDA2MTkwMDUyCis6MTBBNzkwMDAwMDA2NzcwMjAxODNDODIxMDA0RTU4MjUwMzIzODgyQjI5Cis6MTBBN0EwMDAwMTJCMzgyMTAwRjFGODIxQUQ1OTAwMUNBRDVGMDAxOEQ0Cis6MTBBN0IwMDBBRDQwMDAwQ0FENDAwMDEwOTFCMDAwM0U4RkE0MDAzMEMxCis6MTBBN0MwMDAyNDA5MDAwNUE1NTAwMDE0OTVBNTAwMDQyNDE5QzAwMDEzCis6MTBBN0QwMDAwMDg4NDAyNEE1NDUwMDE2OTFCODAwM0VBNTU4MDAyMEU5Cis6MTBBN0UwMDA5NUFGMDAwNEE1NEYwMDIyQUQ0MDAwMjQ5MUFFMDAzRjdDCis6MTBBN0YwMDBBNTRFMDAwMjkxQTYwMDNFOTFBQzAwM0QwMTg2MTAyM0JCCis6MTBBODAwMDAyNDRCMDAwMUExNEIwMDAxOEY5MTAwMzg4RkEzMDAzMDMxCis6MTBBODEwMDAzQzAyODAwODM0NEIwMTAwQUUyMzAwMDhBMjI5MDAzMDFFCis6MTBBODIwMDA4RjhDMDAzODhGODcwMEE0OTU5RjAwMzI5NEYwMDAxMjFGCis6MTBBODMwMDAyNDA3RkZCRjAzM0ZDMDI0MzIwNTNGRkYwMzA1NzgyNUVGCis6MTBBODQwMDBBNThGMDAzMjkxOEUwMDMyMjQxOEZGREYzMUNEMDAzRkZBCis6MTBBODUwMDAzNUE2MDA0MEExODYwMDMyOEY5MTAwMzgyNDBERkZGRkZECis6MTBBODYwMDAyNDBDRkY4MEFFMjAwMDM0OEQ2QTAwRDBBRTJBMDAzODYwCis6MTBBODcwMDA5MjIzMDAzQzMwNjkwMDdGQTIyOTAwM0M4RjkwMDAzODcxCis6MTBBODgwMDAzQzAzODAwMDkyMTkwMDNDMDMyN0Y4MjRBMjFGMDAzQ0RGCis6MTBBODkwMDA4RjhFMDAzODkxQzUwMDNDMDBCODc4MjRBMUNGMDAzQ0QxCis6MTBBOEEwMDA4RjhBMDAzODNDMEU4MDA4QUQ0RDAwNDA4RkE2MDAyQ0VBCis6MTBBOEIwMDBBRDQ2MDA0NDkxNDIwMDQ4MDA0QzU4MjVBMTRCMDA0ODQ5Cis6MTBBOEMwMDA4RjkwMDAzODhGOTkwMEE0OEUwOTAwNDgwMTIzODgyNEI2Cis6MTBBOEQwMDAwMjI4MzgyNUFFMDcwMDQ4OTMzRjAwM0VBMjFGMDA0Q0Q3Cis6MTBBOEUwMDA4Rjk4MDBBNDhGOEYwMDM4OTcwNTAwMDRBNUU1MDA0RUNGCis6MTBBOEYwMDAwRTAwMDM4MThEQzUwMDYwOTI0NjAwN0M4RkFDMDAzMDU1Cis6MTBBOTAwMDAwMDAyNjk0MDAwMDI5MTAwMDA0MDI4MjEzMENCMDAwMjgzCis6MTBBOTEwMDAwMUIyMTAyMTE1NjAwMEFBMDE4MjMwMjEzQzBFODAwODhFCis6MTBBOTIwMDAzNUMyMDA4MDkwNEMwMDdDMzE4MzAwMDQxMDYwMDAwMzJECis6MTBBOTMwMDA4RkI5MDAzMDAwMDU3ODgwMDBDRjMwMjEyNDFGMDAwNDNCCis6MTBBOTQwMDA4RjkxMDAzODMzMkQwMDAzMDNFRDgwMjMzMjA4MDAwMzdDCis6MTBBOTUwMDAwMEM4NTAyMUFFMkEwMDM0M0MxODgwMDBBN0M1MDAzODNBCis6MTBBOTYwMDAzQzA2ODAwODhGMDQwMTAwOTBERTAwMDgwRTAwMEZERTE4Cis6MTBBOTcwMDAzM0M1MDA3RjBFMDAxMDEzMDAwMDAwMDAwQTAwMTQwRDA0Cis6MTBBOTgwMDA4RkEzMDAyODhGOTgwMDM0OENDOTAwMzgyNDFGMDAwMzNGCis6MTBBOTkwMDBBNzAwMDAwOEFGMDkwMDAwOENDNTAwMzRBMzAwMDAwQTFFCis6MTBBOUEwMDA4Rjk5MDBBNEFGMDUwMDA0M0MwODAwODA5MzJEMDAzRjYwCis6MTBBOUIwMDBBMzFGMDAwQzhGMEEwMDBDM0MwMkZGOUZBMzBEMDAwQjhECis6MTBBOUMwMDAwMTQ4RjAyNTM0NTFGRkZGM0MxMkZGRUY4Rjk5MDBBNDlFCis6MTBBOUQwMDAwM0QxNzAyNDM2NDZGRkZGMDFDNjE4MjRBRjAzMDAwQ0Q0Cis6MTBBOUUwMDA4RjJDMDAxNDk3MjkwMDEyOEY4NDAwQTBBRjBDMDAxMDQ4Cis6MTBBOUYwMDA4RjJGMDAxNEFGMDAwMDE4QUYwMDAwMjBBRjBGMDAxNDFECis6MTBBQTAwMDBBRjAwMDAyNDhGMjcwMDE4MzEyRjNGRkYwMDBGNTk4MDFGCis6MTBBQTEwMDBBRjA3MDAyODhGMjUwMDA4MDE2NEY4MjEzMTJEMDAwMUJGCis6MTBBQTIwMDBBRjA1MDAzMDhGMzEwMDBDOEY5MjAwMzgwMDFGNTFDMkVCCis6MTBBQTMwMDAwMDBENDM4MDAxNDgxMDIxMjQxRTAwMDIzQzA2ODAwOEJFCis6MTBBQTQwMDBBNzAyMDAxQ0E3MDAwMDM0QUYxMTAwMkNBMjVFMDAwMDdBCis6MTBBQTUwMDAzNEQyMDA4MDk2NEUwMDVDOEY5OTAwMzgzQzAzNDIwMDRGCis6MTBBQTYwMDAzMUNDRkZGRjAxODMzODI1QUYyNzAwMDQ4RjhCMDBBNDcyCis6MTBBQTcwMDAyNDA1MDAwMTI0MDJDMDAwOEQ2NDAwMzgyNDA3MDAzNDNFCis6MTBBQTgwMDBBRjI0MDAxODhENjkwMDM0QUYyOTAwMUNBRjIwMDAwQ0UyCis6MTBBQTkwMDBBRjIwMDAxMEE3MjAwMDE0QTcyMDAwMTZBNzIwMDAyMDM4Cis6MTBBQUEwMDBBNzIwMDAyMkFGMjAwMDI0QTczMDAwMDJBMzI1MDAwMTI4Cis6MTBBQUIwMDA4Rjg4MDAzODhGOUYwMEE0QUQxMDAwMDg5M0VEMDAwMDMwCis6MTBBQUMwMDBBMTBEMDAzMDhGOEEwMEE0OEY5ODAwMzg5MTUxMDAwMUE5Cis6MTBBQUQwMDBBMzExMDAzMThGOEIwMDM4OTU3RTAwMzIwM0MyNzAyNEExCis6MTBBQUUwMDAwMUNGNjAyNUE1NkMwMDMyOTE2MzAwMzIzMDY0MDAzRkQ1Cis6MTBBQUYwMDBBMTY0MDAzMjkyNDkwMDdDMzEyNTAwMDIxNEEwMDAwMkJBCis6MTBBQjAwMDA4Rjg0MDAzODI0MDcwMDMwM0MxOTgwMDhBQzg3MDAzNDVCCis6MTBBQjEwMDAzNzMyMDEwMDhFNUYwMEQwMjQwQUZGQkYwMjAwOTAyMTZGCis6MTBBQjIwMDBBQzlGMDAzODkwOEQwMDNDMzFBODAwN0ZBMDg4MDAzQzhECis6MTBBQjMwMDA4RjlFMDAzODkzQzIwMDNDMDA0QTg4MjRBM0QxMDAzQzc5Cis6MTBBQjQwMDA4RjgzMDAzODAwMTA4ODJCOTA2NjAwM0MzNENFMDAyMEE0Cis6MTBBQjUwMDBBMDZFMDAzQzhGODQwMEE0OEY5ODAwMzg4QzhDMDAyMDVECis6MTBBQjYwMDBBRjBDMDA0MDhDOEYwMDI0QUYwRjAwNDQ4Qzg3MDAyODZFCis6MTBBQjcwMDBBRjA3MDA0ODhDOEIwMDJDQUYwQjAwNEMwRTAwMTAxMzVECis6MTBBQjgwMDAzQzFFODAwMDBBMDAxMjcwMDAwMDAwMDA5NEM4MDA1MkIxCis6MTBBQjkwMDAzQzBBMDgwMDhENEEwMDI0MDE0ODg4MjFBNEQxMDA1MkIzCis6MTBBQkEwMDAwQTAwMTIxOThGQjQwMDEwQTA4NzAwMDE4Rjg0MDAzOEFBCis6MTBBQkIwMDAyNDBCMDAwMUFDOEIwMDA4MEEwMDEzQkUzQzEyODAwODc1Cis6MTBBQkMwMDAwMDA1MjA4MDBBMDAxNEEyMDBDNDMwMjEyN0JERkZFMDQ4Cis6MTBBQkQwMDAzQzBEODAwOEFGQjIwMDE4QUZCMDAwMTBBRkJGMDAxQzMyCis6MTBBQkUwMDBBRkIxMDAxNDM1QjIwMDgwOEU0QzAwMTgzNUE4MDEwMEJBCis6MTBBQkYwMDA5NjRCMDAwNjk1QTcwMDUwOTEwOTAwRkMwMDBDNTYwMkU4Cis6MTBBQzAwMDAwMTY3MjgyMzMxNDMwMDdGMzEyNjAwRkYyNDAyMDAwMzFGCis6MTBBQzEwMDBBRjgzMDBBOEFGODQwMEEwMTBDMjAwMUIzMEIwRkZGRkJDCis6MTBBQzIwMDA5MTA2MDBGQzI0MTIwMDA1MzBDMjAwRkYxMDUyMDAzM0QwCis6MTBBQzMwMDAwMDAwMDAwMDE2MDAwMDA5OEZCRjAwMUM4RkIyMDAxODMyCis6MTBBQzQwMDA4RkIxMDAxNDhGQjAwMDEwMjQwRDBDMDAzQzBDODAwMDVDCis6MTBBQzUwMDAyN0JEMDAyMDAzRTAwMDA4QUQ4RDAwMjQwRTAwMTFGQjhECis6MTBBQzYwMDAwMjAwMjAyMThGQkYwMDFDOEZCMjAwMTg4RkIxMDAxNDhBCis6MTBBQzcwMDA4RkIwMDAxMDI0MEQwQzAwM0MwQzgwMDAyN0JEMDAyMDdDCis6MTBBQzgwMDAwM0UwMDAwOEFEOEQwMDI0OTY1ODAwNzg5NjUxMDA3QUI0Cis6MTBBQzkwMDA5MjRFMDA3RDAyMzg3ODI2MzFFOEZGRkYzMUM0MDBDMEIzCis6MTBBQ0EwMDAxNDgwMDAwOTJEMTEwMDAxMTYwMDAwMzcwMDAwMDAwMDdCCis6MTBBQ0IwMDA1NjIwRkZFMjhGQkYwMDFDMEUwMDEwRDEwMDAwMDAwMEU0Cis6MTBBQ0MwMDAwQTAwMTU2QThGQkYwMDFDMTYyMEZGREEwMDAwMDAwMDgyCis6MTBBQ0QwMDAwRTAwMTBEMTAwMDAwMDAwMTQ0MEZGRDg4RkJGMDAxQ0YwCis6MTBBQ0UwMDAxNjAwMDAyMjAwMDAwMDAwOTI1RjAwN0QzM0UyMDAzRjZBCis6MTBBQ0YwMDBBMjQyMDA3RDBBMDAxNTZBOEZCRjAwMUM5NTA5MDBFQTc4Cis6MTBBRDAwMDA4Rjg2MDA4MDAwODAyODIxMjQwNDAwMDUwRTAwMDcyNTdFCis6MTBBRDEwMDAzMTMwRkZGRjk3ODMwMDkyM0MwNDgwMDAyNDY1RkZGRkUxCis6MTBBRDIwMDBBNzg1MDA5MjhDOEEwMUI4MDU0MEZGRkUwMDAwMDAwMDU0Cis6MTBBRDMwMDBBQzgwMDE4MDhGQkYwMDFDQUM5MDAxODQ4RkIyMDAxOEUyCis6MTBBRDQwMDA4RkIxMDAxNDhGQjAwMDEwM0MwNzYwMTMzQzBCMTAwMDUzCis6MTBBRDUwMDAyNDBEMEMwMDNDMEM4MDAwMjdCRDAwMjBBQzg3MDE4ODJFCis6MTBBRDYwMDBBQzhCMDFCODAzRTAwMDA4QUQ4RDAwMjQwRTAwMTFGQjkwCis6MTBBRDcwMDAwMjAwMjAyMTUwNDBGRkIxOEZCRjAwMUM5MjVGMDA3RDc4Cis6MTBBRDgwMDAwQTAwMTU5NzMzRTIwMDNGMEUwMDExRkIwMjAwMjAyMTVDCis6MTBBRDkwMDAxNDQwRkZBQThGQkYwMDFDMTIyMDAwMDcwMDAwMDAwMDEzCis6MTBBREEwMDA5MjU5MDA3RDMzMzAwMDNGMzYwMjAwNDBBMjQyMDA3REMwCis6MTBBREIwMDAwQTAwMTU2QThGQkYwMDFDMEUwMDEwRDEwMDAwMDAwMEIxCis6MTBBREMwMDA1MDQwRkY5RThGQkYwMDFDOTI1OTAwN0QzMzMwMDAzRkUyCis6MDhBREQwMDAwQTAwMTVDNjM2MDIwMDQwMUUKKzowOEFERDgwMDAwMDAwMDAwMDAwMDAwMUI1OAorOjEwQURFMDAwMDAwMDAwMEYwMDAwMDAwQTAwMDAwMDA4MDAwMDAwMDYzQworOjEwQURGMDAwMDAwMDAwMDUwMDAwMDAwNTAwMDAwMDA0MDAwMDAwMDQ0MQorOjEwQUUwMDAwMDAwMDAwMDMwMDAwMDAwMzAwMDAwMDAzMDAwMDAwMDMzNgorOjEwQUUxMDAwMDAwMDAwMDMwMDAwMDAwMjAwMDAwMDAyMDAwMDAwMDIyOQorOjEwQUUyMDAwMDAwMDAwMDIwMDAwMDAwMjAwMDAwMDAyMDAwMDAwMDIxQQorOjEwQUUzMDAwMDAwMDAwMDIwMDAwMDAwMjAwMDAwMDAyMDAwMDAwMDIwQQorOjEwQUU0MDAwMDAwMDAwMDIwMDAwMDAwMjAwMDAwMDAyMDAwMDAwMDJGQQorOjBDQUU1MDAwMDAwMDAwMDEwMDAwMDAwMTAwMDAwMDAxRjMKKzowNEFFNUMwMDgwMDgwMTAwNjkKKzoxMEFFNjAwMDgwMDgwMDgwODAwODAwMDAwMDAwMEMwMDAwMDAzMDgwOTYKKzoxMEFFNzAwMDA4MDAxMUQwMDgwMDEyN0MwODAwMTI5NDA4MDAxMkE4RTMKKzoxMEFFODAwMDA4MDAxMkJDMDgwMDExRDAwODAwMTFEMDA4MDAxMkYwMTAKKzoxMEFFOTAwMDA4MDAxMzJDMDgwMDEzNDAwODAwMTM4ODA4MDAxQThDQkYKKzoxMEFFQTAwMDA4MDAxQThDMDgwMDFBQzQwODAwMUFDNDA4MDAxQUQ4MkUKKzoxMEFFQjAwMDA4MDAxQUE4MDgwMDFEMDAwODAwMUNDQzA4MDAxRDU4MzYKKzoxMEFFQzAwMDA4MDAxRDU4MDgwMDFERTAwODAwMUQxMDgwMDgwMjQwMDEKKzoxMEFFRDAwMDA4MDAyNzM0MDgwMDI1NkMwODAwMjc1QzA4MDAyN0Y0QzgKKzoxMEFFRTAwMDA4MDAyOTNDMDgwMDI5ODgwODAwMkFBQzA4MDAyOUI0NzkKKzoxMEFFRjAwMDA4MDAyQTM4MDgwMDI1REMwODAwMkVEQzA4MDAyRUE0RjMKKzoxMEFGMDAwMDA4MDAyNTg4MDgwMDI1ODgwODAwMjU4ODA4MDAyQjIwQ0YKKzoxMEFGMTAwMDA4MDAyQjIwMDgwMDI1ODgwODAwMjU4ODA4MDAyREQwNkYKKzoxMEFGMjAwMDA4MDAyNTg4MDgwMDI1ODgwODAwMjU4ODA4MDAyNTg4NEQKKzoxMEFGMzAwMDA4MDAyRTBDMDgwMDI1ODgwODAwMjU4ODA4MDAyNTg4QjAKKzoxMEFGNDAwMDA4MDAyNTg4MDgwMDI1ODgwODAwMjU4ODA4MDAyNTg4MkQKKzoxMEFGNTAwMDA4MDAyNTg4MDgwMDI1ODgwODAwMjU4ODA4MDAyNTg4MUQKKzoxMEFGNjAwMDA4MDAyNTg4MDgwMDI1ODgwODAwMjU4ODA4MDAyOUE4RTkKKzoxMEFGNzAwMDA4MDAyNTg4MDgwMDI1ODgwODAwMkU2ODA4MDAyNTg4MTQKKzoxMEFGODAwMDA4MDAyNTg4MDgwMDI1ODgwODAwMjU4ODA4MDAyNTg4RUQKKzoxMEFGOTAwMDA4MDAyNTg4MDgwMDI1ODgwODAwMjU4ODA4MDAyNTg4REQKKzoxMEFGQTAwMDA4MDAyNTg4MDgwMDI1ODgwODAwMjU4ODA4MDAyNTg4Q0QKKzoxMEFGQjAwMDA4MDAyNTg4MDgwMDI1ODgwODAwMjU4ODA4MDAyNTg4QkQKKzoxMEFGQzAwMDA4MDAyQ0Y0MDgwMDI1ODgwODAwMjU4ODA4MDAyQzY4NTMKKzoxMEFGRDAwMDA4MDAyQkM0MDgwMDNDRTQwODAwM0NCODA4MDAzQzg0OEUKKzoxMEFGRTAwMDA4MDAzQzU4MDgwMDNDMzgwODAwM0JFQzgwMDgwMTAwOTEKKzoxMEFGRjAwMDgwMDgwMDgwODAwODAwMDA4MDA4MDA4MDA4MDA0QzY0MDEKKzoxMEIwMDAwMDA4MDA0QzlDMDgwMDRCRTQwODAwNEM2NDA4MDA0QzY0QTkKKzowQ0IwMTAwMDA4MDA0OUI4MDgwMDRDNjQwODAwNTA1MENCCis6MDRCMDFDMDAwQTAwMEM4NDk2Cis6MTBCMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ3Mjc4NzAzNjgzCis6MTBCMDMwMDAyRTMyMkUzMTAwMDAwMDAwMDYwMjAxMDMwMDAwMDAwMDQ1Cis6MTBCMDQwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZGCis6MTBCMDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYwCis6MTBCMDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUwCis6MTBCMDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQwCis6MTBCMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTBCMDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MTBCMEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwCis6MTBCMEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkwCis6MTBCMEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwCis6MTBCMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcwCis6MTBCMEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwCis6MTBCMEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUwCis6MTBCMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNGCis6MTBCMTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGCis6MTBCMTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFGCis6MTBCMTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGCis6MTBCMTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZGCis6MTBCMTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVGCis6MTBCMTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERGCis6MTBCMTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENGCis6MTBCMTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJGCis6MTBCMTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTBCMUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlGCis6MTBCMUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGCis6MTBCMUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdGCis6MTBCMUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZGCis6MTBCMUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVGCis6MTBCMUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRGCis6MTBCMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNFCis6MTBCMjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJFCis6MTBCMjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFCis6MTBCMjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFCis6MTBCMjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZFCis6MTBCMjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVFCis6MTBCMjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERFCis6MTBCMjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENFCis6MTBCMjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJFCis6MTBCMjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFFCis6MTBCMkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTBCMkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhFCis6MTBCMkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdFCis6MTBCMkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZFCis6MTBCMkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVFCis6MTBCMkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRFCis6MTBCMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNECis6MTBCMzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJECis6MTBCMzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFECis6MTBCMzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBECis6MTBCMzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZECis6MTBCMzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVECis6MTBCMzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERECis6MTBCMzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENECis6MTBCMzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJECis6MTBCMzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFECis6MTBCM0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlECis6MTBCM0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTBCM0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdECis6MTBCM0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZECis6MTBCM0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVECis6MTBCM0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRECis6MTBCNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNDCis6MTBCNDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJDCis6MTBCNDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFDCis6MTBCNDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDCis6MTBCNDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZDCis6MTBCNDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVDCis6MTBCNDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERDCis6MTBCNDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENDCis6MTBCNDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJDCis6MTBCNDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFDCis6MTBCNEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlDCis6MTBCNEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhDCis6MTBCNEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTBCNEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZDCis6MTBCNEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVDCis6MTBCNEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRDCis6MTBCNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNCCis6MTBCNTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJCCis6MTBCNTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFCCis6MTBCNTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCCis6MTBCNTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZCCis6MTBCNTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVCCis6MTBCNTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERCCis6MTBCNTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENCCis6MTBCNTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJCCis6MTBCNTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFCCis6MTBCNUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlCCis6MTBCNUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhCCis6MTBCNUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdCCis6MTBCNUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTBCNUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVCCis6MTBCNUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRCCis6MTBCNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNBCis6MTBCNjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJBCis6MTBCNjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFBCis6MTBCNjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBCis6MTBCNjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZBCis6MTBCNjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVBCis6MTBCNjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERBCis6MTBCNjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENBCis6MTBCNjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJBCis6MTBCNjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFBCis6MTBCNkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlBCis6MTBCNkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhBCis6MTBCNkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdBCis6MTBCNkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZBCis6MTBCNkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTBCNkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRBCis6MTBCNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM5Cis6MTBCNzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5Cis6MTBCNzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE5Cis6MTBCNzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5Cis6MTBCNzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY5Cis6MTBCNzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU5Cis6MTBCNzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ5Cis6MTBCNzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM5Cis6MTBCNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI5Cis6MTBCNzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE5Cis6MTBCN0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk5Cis6MTBCN0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg5Cis6MTBCN0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc5Cis6MTBCN0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY5Cis6MTBCN0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTBCN0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTBCODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTBCODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI4Cis6MTBCODIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE4Cis6MTBCODMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4Cis6MTBCODQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY4Cis6MTBCODUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU4Cis6MTBCODYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ4Cis6MTBCODcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM4Cis6MTBCODgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI4Cis6MTBCODkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE4Cis6MTBCOEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk4Cis6MTBCOEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg4Cis6MTBCOEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc4Cis6MTBCOEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY4Cis6MTBCOEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU4Cis6MTBCOEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTBCOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTBCOTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTBCOTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE3Cis6MTBCOTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3Cis6MTBCOTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY3Cis6MTBCOTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU3Cis6MTBCOTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ3Cis6MTBCOTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM3Cis6MTBCOTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI3Cis6MTBCOTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE3Cis6MTBCOUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk3Cis6MTBCOUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg3Cis6MTBCOUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3Cis6MTBCOUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY3Cis6MTBCOUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU3Cis6MTBCOUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ3Cis6MTBCQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM2Cis6MTBCQTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTBCQTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTBCQTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2Cis6MTBCQTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY2Cis6MTBCQTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU2Cis6MTBCQTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ2Cis6MTBCQTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM2Cis6MTBCQTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI2Cis6MTBCQTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE2Cis6MTBCQUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk2Cis6MTBCQUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg2Cis6MTBCQUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc2Cis6MTBCQUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY2Cis6MTBCQUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU2Cis6MTBCQUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ2Cis6MTBCQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM1Cis6MTBCQjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI1Cis6MTBCQjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTBCQjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTBCQjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY1Cis6MTBCQjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU1Cis6MTBCQjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ1Cis6MTBCQjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM1Cis6MTBCQjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI1Cis6MTBCQjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE1Cis6MTBCQkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk1Cis6MTBCQkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg1Cis6MTBCQkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc1Cis6MTBCQkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY1Cis6MTBCQkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU1Cis6MTBCQkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ1Cis6MTBCQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM0Cis6MTBCQzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI0Cis6MTBCQzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE0Cis6MTBCQzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTBCQzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTBCQzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU0Cis6MTBCQzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ0Cis6MTBCQzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM0Cis6MTBCQzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI0Cis6MTBCQzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE0Cis6MTBCQ0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk0Cis6MTBCQ0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg0Cis6MTBCQ0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc0Cis6MTBCQ0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY0Cis6MTBCQ0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU0Cis6MTBCQ0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ0Cis6MTBCRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMzCis6MTBCRDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIzCis6MTBCRDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEzCis6MTBCRDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzCis6MTBCRDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTBCRDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTBCRDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQzCis6MTBCRDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMzCis6MTBCRDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIzCis6MTBCRDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEzCis6MTBCREEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkzCis6MTBCREIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgzCis6MTBCREMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDczCis6MTBCREQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYzCis6MTBCREUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUzCis6MTBCREYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQzCis6MTBCRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMyCis6MTBCRTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIyCis6MTBCRTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyCis6MTBCRTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyCis6MTBCRTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYyCis6MTBCRTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTBCRTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTBCRTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMyCis6MTBCRTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIyCis6MTBCRTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEyCis6MTBCRUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkyCis6MTBCRUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgyCis6MTBCRUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcyCis6MTBCRUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYyCis6MTBCRUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUyCis6MTBCRUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQyCis6MTBCRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMxCis6MTBCRjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIxCis6MTBCRjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExCis6MTBCRjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCis6MTBCRjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYxCis6MTBCRjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUxCis6MTBCRjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTBCRjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTBCRjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIxCis6MTBCRjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEExCis6MTBCRkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkxCis6MTBCRkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgxCis6MTBCRkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcxCis6MTBCRkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYxCis6MTBCRkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUxCis6MTBCRkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQxCis6MTBDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwCis6MTBDMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwCis6MTBDMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwCis6MTBDMDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCis6MTBDMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYwCis6MTBDMDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUwCis6MTBDMDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQwCis6MTBDMDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTBDMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MTBDMDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwCis6MTBDMEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkwCis6MTBDMEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwCis6MTBDMEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcwCis6MTBDMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwCis6MTBDMEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUwCis6MTBDMEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwCis6MTBDMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGCis6MTBDMTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFGCis6MTBDMTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGCis6MTBDMTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZGCis6MTBDMTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVGCis6MTBDMTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERGCis6MTBDMTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENGCis6MTBDMTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJGCis6MTBDMTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTBDMTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlGCis6MTBDMUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGCis6MTBDMUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdGCis6MTBDMUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZGCis6MTBDMUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVGCis6MTBDMUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRGCis6MTBDMUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNGCis6MTBDMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJFCis6MTBDMjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFCis6MTBDMjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFCis6MTBDMjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZFCis6MTBDMjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVFCis6MTBDMjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERFCis6MTBDMjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENFCis6MTBDMjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJFCis6MTBDMjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFFCis6MTBDMjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTBDMkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhFCis6MTBDMkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdFCis6MTBDMkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZFCis6MTBDMkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVFCis6MTBDMkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRFCis6MTBDMkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNFCis6MTBDMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJECis6MTBDMzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFECis6MTBDMzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBECis6MTBDMzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZECis6MTBDMzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVECis6MTBDMzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERECis6MTBDMzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENECis6MTBDMzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJECis6MTBDMzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFECis6MTBDMzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlECis6MTBDM0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTBDM0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdECis6MTBDM0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZECis6MTBDM0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVECis6MTBDM0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRECis6MTBDM0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNECis6MTBDNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJDCis6MTBDNDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFDCis6MTBDNDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDCis6MTBDNDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZDCis6MTBDNDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVDCis6MTBDNDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERDCis6MTBDNDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENDCis6MTBDNDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJDCis6MTBDNDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFDCis6MTBDNDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlDCis6MTBDNEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhDCis6MTBDNEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTBDNEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZDCis6MTBDNEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVDCis6MTBDNEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRDCis6MTBDNEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNDCis6MTBDNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJCCis6MTBDNTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFCCis6MTBDNTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCCis6MTBDNTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZCCis6MTBDNTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVCCis6MTBDNTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERCCis6MTBDNTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENCCis6MTBDNTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJCCis6MTBDNTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFCCis6MTBDNTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlCCis6MTBDNUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhCCis6MTBDNUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdCCis6MTBDNUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTBDNUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVCCis6MTBDNUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRCCis6MTBDNUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNCCis6MTBDNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJBCis6MTBDNjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFBCis6MTBDNjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBCis6MTBDNjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZBCis6MTBDNjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVBCis6MTBDNjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERBCis6MTBDNjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENBCis6MTBDNjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJBCis6MTBDNjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFBCis6MTBDNjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlBCis6MTBDNkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhBCis6MTBDNkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdBCis6MTBDNkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZBCis6MTBDNkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTBDNkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRBCis6MTBDNkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNBCis6MTBDNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5Cis6MTBDNzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE5Cis6MTBDNzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5Cis6MTBDNzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY5Cis6MTBDNzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU5Cis6MTBDNzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ5Cis6MTBDNzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM5Cis6MTBDNzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI5Cis6MTBDNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE5Cis6MTBDNzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk5Cis6MTBDN0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg5Cis6MTBDN0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc5Cis6MTBDN0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY5Cis6MTBDN0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTBDN0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTBDN0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM5Cis6MTBDODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI4Cis6MTBDODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE4Cis6MTBDODIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4Cis6MTBDODMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY4Cis6MTBDODQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU4Cis6MTBDODUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ4Cis6MTBDODYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM4Cis6MTBDODcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI4Cis6MTBDODgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE4Cis6MTBDODkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk4Cis6MTBDOEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg4Cis6MTBDOEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc4Cis6MTBDOEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY4Cis6MTBDOEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU4Cis6MTBDOEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTBDOEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTBDOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTBDOTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE3Cis6MTBDOTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3Cis6MTBDOTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY3Cis6MTBDOTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU3Cis6MTBDOTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ3Cis6MTBDOTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM3Cis6MTBDOTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI3Cis6MTBDOTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE3Cis6MTBDOTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk3Cis6MTBDOUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg3Cis6MTBDOUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3Cis6MTBDOUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY3Cis6MTBDOUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU3Cis6MTBDOUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ3Cis6MTBDOUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTBDQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTBDQTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTBDQTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2Cis6MTBDQTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY2Cis6MTBDQTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU2Cis6MTBDQTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ2Cis6MTBDQTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM2Cis6MTBDQTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI2Cis6MTBDQTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE2Cis6MTBDQTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk2Cis6MTBDQUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg2Cis6MTBDQUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc2Cis6MTBDQUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY2Cis6MTBDQUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU2Cis6MTBDQUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ2Cis6MTBDQUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM2Cis6MTBDQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI1Cis6MTBDQjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTBDQjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTBDQjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY1Cis6MTBDQjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU1Cis6MTBDQjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ1Cis6MTBDQjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM1Cis6MTBDQjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI1Cis6MTBDQjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE1Cis6MTBDQjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk1Cis6MTBDQkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg1Cis6MTBDQkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc1Cis6MTBDQkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY1Cis6MTBDQkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU1Cis6MTBDQkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ1Cis6MTBDQkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM1Cis6MTBDQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI0Cis6MTBDQzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE0Cis6MTBDQzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTBDQzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTBDQzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU0Cis6MTBDQzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ0Cis6MTBDQzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM0Cis6MTBDQzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI0Cis6MTBDQzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE0Cis6MTBDQzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk0Cis6MTBDQ0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg0Cis6MTBDQ0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc0Cis6MTBDQ0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY0Cis6MTBDQ0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU0Cis6MTBDQ0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ0Cis6MTBDQ0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM0Cis6MTBDRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIzCis6MTBDRDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEzCis6MTBDRDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzCis6MTBDRDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTBDRDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTBDRDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQzCis6MTBDRDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMzCis6MTBDRDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIzCis6MTBDRDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEzCis6MTBDRDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkzCis6MTBDREEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgzCis6MTBDREIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDczCis6MTBDREMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYzCis6MTBDREQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUzCis6MTBDREUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQzCis6MTBDREYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMzCis6MTBDRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIyCis6MTBDRTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyCis6MTBDRTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyCis6MTBDRTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYyCis6MTBDRTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTBDRTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTBDRTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMyCis6MTBDRTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIyCis6MTBDRTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEyCis6MTBDRTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkyCis6MTBDRUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgyCis6MTBDRUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcyCis6MTBDRUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYyCis6MTBDRUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUyCis6MTBDRUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQyCis6MTBDRUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMyCis6MTBDRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIxCis6MTBDRjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExCis6MTBDRjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCis6MTBDRjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYxCis6MTBDRjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUxCis6MTBDRjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTBDRjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTBDRjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIxCis6MTBDRjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEExCis6MTBDRjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkxCis6MTBDRkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgxCis6MTBDRkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcxCis6MTBDRkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYxCis6MTBDRkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUxCis6MTBDRkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQxCis6MTBDRkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMxCis6MTBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwCis6MTBEMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwCis6MTBEMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCis6MTBEMDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYwCis6MTBEMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUwCis6MTBEMDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQwCis6MTBEMDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTBEMDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MTBEMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwCis6MTBEMDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkwCis6MTBEMEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwCis6MTBEMEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcwCis6MTBEMEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwCis6MTBEMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUwCis6MTBEMEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwCis6MTBEMEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwCis6MTBEMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFGCis6MTBEMTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGCis6MTBEMTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZGCis6MTBEMTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVGCis6MTBEMTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERGCis6MTBEMTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENGCis6MTBEMTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJGCis6MTBEMTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTBEMTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlGCis6MTBEMTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGCis6MTBEMUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdGCis6MTBEMUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZGCis6MTBEMUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVGCis6MTBEMUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRGCis6MTBEMUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNGCis6MTBEMUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGCis6MTBEMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFCis6MTBEMjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFCis6MTBEMjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZFCis6MTBEMjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVFCis6MTBEMjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERFCis6MTBEMjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENFCis6MTBEMjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJFCis6MTBEMjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFFCis6MTBEMjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTBEMjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhFCis6MTBEMkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdFCis6MTBEMkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZFCis6MTBEMkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVFCis6MTBEMkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRFCis6MTBEMkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNFCis6MTBEMkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJFCis6MTBEMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFECis6MTBEMzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBECis6MTBEMzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZECis6MTBEMzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVECis6MTBEMzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERECis6MTBEMzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENECis6MTBEMzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJECis6MTBEMzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFECis6MTBEMzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlECis6MTBEMzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTBEM0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdECis6MTBEM0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZECis6MTBEM0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVECis6MTBEM0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRECis6MTBEM0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNECis6MTBEM0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJECis6MTBENDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFDCis6MTBENDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDCis6MTBENDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZDCis6MTBENDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVDCis6MTBENDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERDCis6MTBENDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENDCis6MTBENDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJDCis6MTBENDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFDCis6MTBENDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlDCis6MTBENDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhDCis6MTBENEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTBENEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZDCis6MTBENEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVDCis6MTBENEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRDCis6MTBENEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNDCis6MTBENEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJDCis6MTBENTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFCCis6MTBENTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCCis6MTBENTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZCCis6MTBENTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVCCis6MTBENTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERCCis6MTBENTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENCCis6MTBENTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJCCis6MTBENTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFCCis6MTBENTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlCCis6MTBENTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhCCis6MTBENUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdCCis6MTBENUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTBENUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVCCis6MTBENUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRCCis6MTBENUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNCCis6MTBENUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJCCis6MTBENjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFBCis6MTBENjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBCis6MTBENjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZBCis6MTBENjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVBCis6MTBENjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERBCis6MTBENjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENBCis6MTBENjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJBCis6MTBENjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFBCis6MTBENjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlBCis6MTBENjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhBCis6MTBENkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdBCis6MTBENkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZBCis6MTBENkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTBENkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRBCis6MTBENkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNBCis6MTBENkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJBCis6MTBENzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE5Cis6MTBENzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5Cis6MTBENzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY5Cis6MTBENzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU5Cis6MTBENzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ5Cis6MTBENzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM5Cis6MTBENzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI5Cis6MTBENzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE5Cis6MTBENzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk5Cis6MTBENzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg5Cis6MTBEN0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc5Cis6MTBEN0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY5Cis6MTBEN0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTBEN0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTBEN0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM5Cis6MTBEN0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5Cis6MTBEODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE4Cis6MTBEODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4Cis6MTBEODIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY4Cis6MTBEODMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU4Cis6MTBEODQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ4Cis6MTBEODUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM4Cis6MTBEODYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI4Cis6MTBEODcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE4Cis6MTBEODgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk4Cis6MTBEODkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg4Cis6MTBEOEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc4Cis6MTBEOEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY4Cis6MTBEOEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU4Cis6MTBEOEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTBEOEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTBEOEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI4Cis6MTBEOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE3Cis6MTBEOTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3Cis6MTBEOTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY3Cis6MTBEOTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU3Cis6MTBEOTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ3Cis6MTBEOTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM3Cis6MTBEOTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI3Cis6MTBEOTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE3Cis6MTBEOTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk3Cis6MTBEOTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg3Cis6MTBEOUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3Cis6MTBEOUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY3Cis6MTBEOUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU3Cis6MTBEOUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ3Cis6MTBEOUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTBEOUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTBEQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTBEQTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2Cis6MTBEQTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY2Cis6MTBEQTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU2Cis6MTBEQTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ2Cis6MTBEQTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM2Cis6MTBEQTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI2Cis6MTBEQTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE2Cis6MTBEQTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk2Cis6MTBEQTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg2Cis6MTBEQUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc2Cis6MTBEQUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY2Cis6MTBEQUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU2Cis6MTBEQUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ2Cis6MTBEQUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM2Cis6MTBEQUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTBEQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTBEQjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTBEQjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY1Cis6MTBEQjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU1Cis6MTBEQjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ1Cis6MTBEQjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM1Cis6MTBEQjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI1Cis6MTBEQjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE1Cis6MTBEQjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk1Cis6MTBEQjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg1Cis6MTBEQkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc1Cis6MTBEQkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY1Cis6MTBEQkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU1Cis6MTBEQkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ1Cis6MTBEQkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM1Cis6MTBEQkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI1Cis6MTBEQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE0Cis6MTBEQzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTBEQzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTBEQzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU0Cis6MTBEQzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ0Cis6MTBEQzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM0Cis6MTBEQzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI0Cis6MTBEQzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE0Cis6MTBEQzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk0Cis6MTBEQzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg0Cis6MTBEQ0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc0Cis6MTBEQ0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY0Cis6MTBEQ0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU0Cis6MTBEQ0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ0Cis6MTBEQ0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM0Cis6MTBEQ0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI0Cis6MTBERDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEzCis6MTBERDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzCis6MTBERDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTBERDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTBERDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQzCis6MTBERDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMzCis6MTBERDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIzCis6MTBERDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEzCis6MTBERDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkzCis6MTBERDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgzCis6MTBEREEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDczCis6MTBEREIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYzCis6MTBEREMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUzCis6MTBEREQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQzCis6MTBEREUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMzCis6MTBEREYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIzCis6MTBERTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyCis6MTBERTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyCis6MTBERTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYyCis6MTBERTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTBERTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTBERTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMyCis6MTBERTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIyCis6MTBERTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEyCis6MTBERTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkyCis6MTBERTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgyCis6MTBERUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcyCis6MTBERUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYyCis6MTBERUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUyCis6MTBERUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQyCis6MTBERUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMyCis6MTBERUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIyCis6MTBERjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExCis6MTBERjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCis6MTBERjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYxCis6MTBERjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUxCis6MTBERjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTBERjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTBERjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIxCis6MTBERjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEExCis6MTBERjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkxCis6MTBERjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgxCis6MTBERkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcxCis6MTBERkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYxCis6MTBERkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUxCis6MTBERkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQxCis6MTBERkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMxCis6MTBERkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIxCis6MTBFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwCis6MTBFMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCis6MTBFMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYwCis6MTBFMDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUwCis6MTBFMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQwCis6MTBFMDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTBFMDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MTBFMDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwCis6MTBFMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkwCis6MTBFMDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwCis6MTBFMEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcwCis6MTBFMEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwCis6MTBFMEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUwCis6MTBFMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwCis6MTBFMEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwCis6MTBFMEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwCis6MTBFMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGCis6MTBFMTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZGCis6MTBFMTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVGCis6MTBFMTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERGCis6MTBFMTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENGCis6MTBFMTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJGCis6MTBFMTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTBFMTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlGCis6MTBFMTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGCis6MTBFMTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdGCis6MTBFMUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZGCis6MTBFMUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVGCis6MTBFMUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRGCis6MTBFMUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNGCis6MTBFMUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGCis6MTBFMUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDlGCis6MTBFMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFCis6MTBFMjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZFCis6MTBFMjIwMDAwMDAwMDAwQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU0Cis6MTBFMjMwMDAxMDAwMDAwMzAwMDAwMDAwMDAwMDAwMEQwMDAwMDAwREIxCis6MTBFMjQwMDAzQzAyMDgwMTI0NDI5NjYwM0MwMzA4MDEyNDYzOTg5QzI4Cis6MTBFMjUwMDBBQzQwMDAwMDAwNDMyMDJCMTQ4MEZGRkQyNDQyMDAwNDRBCis6MTBFMjYwMDAzQzFEMDgwMDM3QkQ5RkZDMDNBMEYwMjEzQzEwMDgwMEI2Cis6MTBFMjcwMDAyNjEwMzIxMDNDMUMwODAxMjc5Qzk2NjAwRTAwMTJCRTJFCis6MTBFMjgwMDAwMDAwMDAwMDAwMDAwMDBEM0MwMjgwMDAzMEE1RkZGRkYwCis6MTBFMjkwMDAzMEM2MDBGRjM0NDMwMTgwM0MwODgwMDA4RDA5MDFCODdFCis6MTBFMkEwMDAwNTIwRkZGRTAwMDAwMDAwQUM2NDAwMDAyNDA0MDAwMjEyCis6MTBFMkIwMDBBNDY1MDAwOEEwNjYwMDBBQTA2NDAwMEJBQzY3MDAxODAzCis6MTBFMkMwMDAzQzAzMTAwMDAzRTAwMDA4QUQwMzAxQjgzQzA1NjAwMDBBCis6MTBFMkQwMDA4Q0EyNEZGODA0NDBGRkZFMDAwMDAwMDBBQ0E0NEZDMDI5Cis6MTBFMkUwMDAzQzAzMTAwMDNDMDQwMjAwQUNBNDRGQzQwM0UwMDAwODRGCis6MTBFMkYwMDBBQ0EzNEZGODk0ODYwMDBDMDBBMDUwMjEyNDg4MDAxNDkxCis6MTBFMzAwMDAwMDA2MkIwMjAwMDUxMDgwMDA0NDQ4MjEwMTA5MTgyQjRCCis6MTBFMzEwMDAxMDYwMDAxMTAwMDAwMDAwOTEwMzAwMDAyQzY0MDAwOTRGCis6MTBFMzIwMDA1MDgwMDAwOTkxMTkwMDAxMDAwMzYwODAzQzBEMDgwMTM0Cis6MTBFMzMwMDAyNUFEOTJGODAxOEQ1ODIxOEQ2NzAwMDAwMEUwMDAwODlFCis6MTBFMzQwMDAwMDAwMDAwMDkxMTkwMDAxMDExOTQwMjEwMTA5MzAyQjQyCis6MTBFMzUwMDA1NEMwRkZGMjkxMDMwMDAwMDNFMDAwMDgwMDAwMTAyMTA4Cis6MTBFMzYwMDAwQTAwMENDQzI1MDgwMDAxOTEwRjAwMDEyNDBFMDAwQUMwCis6MTBFMzcwMDAxNUVFMDA0MDAxMjhDODIzMkYzODAwMEExNzAwMDAzRDgxCis6MTBFMzgwMDAyNTBEMDAwMjhENTgwMDAwMjUwRjAwMDYzNzBFMDEwMEY0Cis6MTBFMzkwMDBBRDRFMDAwMDkxMEMwMDAyOTFBQjAwMDE5MUE0MDAwMjZGCis6MTBFM0EwMDA5MUE2MDAwMzAwMEMyRTAwMDAwQjNDMDAwMEE3MTAyNUQ2Cis6MTBFM0IwMDAwMDA0MUEwMDAwNDNDODI1MDMyNkMwMjVBRDU4MDAwNEY4Cis6MTBFM0MwMDA5MTBFMDAwNjkxRUQwMDAxOTFFNzAwMDI5MUU1MDAwMzM2Cis6MTBFM0QwMDAwMDBFNUUwMDAwMEQ2NDAwMDE2QzMwMjUwMDA3MjIwMDc1Cis6MTBFM0UwMDAwMEM0MTAyNTAwNDUxODI1MjUwODAwMEEwQTAwMENDQzk5Cis6MTBFM0YwMDBBRDQzMDAwODkxMEYwMDAxMjUwNDAwMDIyNDA4MDAwMjJCCis6MTBFNDAwMDA1NUU4MDAwMTAxMjAyMDIxMEEwMDBDQ0MwMDgwNDAyMUE5Cis6MTBFNDEwMDA5MTBDMDAwMTI0MEIwMDAzMTU4QjAwMTYwMDAwMDAwMDc2Cis6MTBFNDIwMDA4RDU4MDAwMDkxMEUwMDAyMjUwODAwMDMzNzBEMDAwOEVBCis6MTBFNDMwMDBBMTRFMDAxMDBBMDAwQ0NDQUQ0RDAwMDA5MTE5MDAwMTU2Cis6MTBFNDQwMDAyNDBGMDAwNDE3MkYwMDBCMDAwMDAwMDA5MTA3MDAwMkFBCis6MTBFNDUwMDA5MTA0MDAwMzhENDMwMDAwMDAwNzJBMDAwMEE0MTAyNTRBCis6MTBFNDYwMDAzNDY2MDAwNDI1MDgwMDA0QUQ0MjAwMEMwQTAwMENDQzAwCis6MTBFNDcwMDBBRDQ2MDAwMDAzRTAwMDA4MjQwMjAwMDEyN0JERkZFOENDCis6MTBFNDgwMDBBRkJGMDAxNEFGQjAwMDEwMEUwMDE2N0YwMDgwODAyMUQ3Cis6MTBFNDkwMDAzQzA0ODAwODM0ODUwMDgwOTBBNjAwMDUyNDAzRkZGRTFDCis6MTBFNEEwMDAwMjAwMjAyMTAwQzMxMDI0OEZCRjAwMTQ4RkIwMDAxMDgxCis6MTBFNEIwMDBBMEEyMDAwNTBBMDAxNjg5MjdCRDAwMTgyN0JERkZFOEE1Cis6MTBFNEMwMDBBRkIwMDAxMEFGQkYwMDE0MEUwMDBGRDQwMDgwODAyMTQ5Cis6MTBFNEQwMDAzQzA2ODAwODM0QzUwMDgwOTBBNDAwMDAyNDAyMDA1MDRGCis6MTBFNEUwMDAzMDgzMDBGRjEwNjIwMDA3M0MwOTgwMDAwMjAwMjAyMUY5Cis6MTBFNEYwMDA4RkJGMDAxNDhGQjAwMDEwQUQyMDAxODAwQTAwMTA4Rjc0Cis6MTBFNTAwMDAyN0JEMDAxODI0MDgwMTAwM0MwNzgwMDAwMjAwMjAyMURDCis6MTBFNTEwMDA4RkJGMDAxNDhGQjAwMDEwQUNFODAxODAwQTAwMTA4RjhDCis6MTBFNTIwMDAyN0JEMDAxODI3QkRGRjc4M0MwNTgwMDhBRkJFMDA4MERFCis6MTBFNTMwMDBBRkI3MDA3Q0FGQjMwMDZDQUZCMTAwNjRBRkJGMDA4NDc1Cis6MTBFNTQwMDBBRkI2MDA3OEFGQjUwMDc0QUZCNDAwNzBBRkIyMDA2ODdBCis6MTBFNTUwMDBBRkIwMDA2MDM0QTYwMDgwM0MwNTgwMDA4Q0IyMDEyODdBCis6MTBFNTYwMDA5MEM0MDAwOThDQTcwMTA0M0MwMjAwMDEzMDkxMDBGRjE3Cis6MTBFNTcwMDAwMEUyMTgyNDAwMDBCODIxMDAwMEYwMjExMDYwMDAwNzFDCis6MTBFNTgwMDAwMDAwOTgyMTNDMDkwODAwOEQyOTMxRjAyNDEzMDAwMTc2Cis6MTBFNTkwMDAyNTI4MDAwMTNDMDEwODAwQUMyODMxRjBBQ0EwMDA4NDIzCis6MTBFNUEwMDA5MENDMDAwNTAwMEM1ODI3MzE2QTAwMDExNTQwMDA3MjFDCis6MTBFNUIwMDBBRkEwMDA1MDkwQ0QwMDAwMjQwNjAwMjAzMUE0MDBGRjQxCis6MTBFNUMwMDAxMDg2MDAxODI0MEUwMDUwMTA4RTAwOTMwMDAwMDAwMEVBCis6MTBFNUQwMDAzQzEwMDgwMDhFMTAwMERDMjYwRjAwMDEzQzAxMDgwMEYyCis6MTBFNUUwMDBBQzJGMDBEQzBFMDAxNkY4MDAwMDAwMDAwMDQwMTgyMURGCis6MTBFNUYwMDA4RkJGMDA4NDhGQkUwMDgwOEZCNzAwN0M4RkI2MDA3OEZECis6MTBFNjAwMDA4RkI1MDA3NDhGQjQwMDcwOEZCMzAwNkM4RkIyMDA2ODQ4Cis6MTBFNjEwMDA4RkIxMDA2NDhGQjAwMDYwMDA2MDEwMjEwM0UwMDAwODNCCis6MTBFNjIwMDAyN0JEMDA4ODAwMDAwMDBEM0MxRjgwMDBBRkEwMDAzMDE3Cis6MTBFNjMwMDA5N0U1MDExNjhGRTIwMTA0M0MwNDAwMjAzMEI5RkZGRjhBCis6MTBFNjQwMDAwMDQ0MzgyNDAwMDcxODJCMDAwMzMxNDBBRkE2MDAzMEU3Cis6MTBFNjUwMDA4RkY1MDEwNDM3RjgwQzAwM0MxNjAwNDAwMzM4ODAyMTg4Cis6MTBFNjYwMDAwMkI2QTAyNDM0QzQwMDQwMTI4MDAwNDc5MjE1MDAwRDY5Cis6MTBFNjcwMDAzMkE4MDAyMDE1MDAwMDAyMzQ4NjAwODAwMDgwMzAyMTdFCis6MTBFNjgwMDAxNEMwMDA5RkFGQTYwMDMwM0MwRDgwMDgzNUE2MDA4MDY2Cis6MTBFNjkwMDA5MENDMDAwODMxOEIwMDQwNTE2MDAwMDYzQzA2ODAwODk5Cis6MTBFNkEwMDAyNDBFMDAwNDEyMkUwMEE4MjQwRjAwMTIxMjJGMDAzMjk0Cis6MTBFNkIwMDAzQzA2ODAwODM0QzQwMTAwM0MwMjgwMDA5NDQ3MDExQUUzCis6MTBFNkMwMDA5NjE5MDAwRTkwOUYwMDA4OEUxODAwMDgzMEUzRkZGRjk3Cis6MTBFNkQwMDAwM0Y5QjAwNDMyQjQwMDA0QUZCNjAwNUNBRkEzMDA1ODM1Cis6MTBFNkUwMDA4RTE2MDAwNDEyODAwMDJFQUZCODAwNTQzNEMzMDA4MDkwCis6MTBFNkYwMDA5MDY4MDAwODMxMDUwMDQwMTRBMDAwMjUwMDAwMDAwMENCCis6MTBFNzAwMDA4QzcwMDA1MDAyRDA5MDIzMDY0MDAwMDUwMDAwMDAwMEVECis6MTBFNzEwMDA4QzcxMDAzNDAyRDFBODIzMDZBMjAxNjc4RUUyMDAwOEEyCis6MTBFNzIwMDAxMjYwMDAwNjNDMTI4MDAwM0MxNTA4MDA4RUI1MzFGNEUyCis6MTBFNzMwMDAyNkI2MDAwMTNDMDEwODAwQUMzNjMxRjRBRTQwMDA0NDdFCis6MTBFNzQwMDAyNDAzMDAwMThGQkYwMDg0OEZCRTAwODA4RkI3MDA3QzQwCis6MTBFNzUwMDA4RkI2MDA3ODhGQjUwMDc0OEZCNDAwNzA4RkIzMDA2Q0UzCis6MTBFNzYwMDA4RkIyMDA2ODhGQjEwMDY0OEZCMDAwNjAwMDYwMTAyMTJDCis6MTBFNzcwMDAwM0UwMDAwODI3QkQwMDg4MEUwMDBEMjgwMDAwMjAyMUJFCis6MTBFNzgwMDAwQTAwMEQ3NTAwNDAxODIxMEEwMDBEOTUwMEMwMjAyMUQ3Cis6MTBFNzkwMDAwRTAwMTc0ODAyQzAyMDIxMTQ0MEZGRTEwMDAwMDAwMEQ1Cis6MTBFN0EwMDAzQzBCODAwODM1NjQwMDgwOEM4QTAwMzQwMkNBNDgyMzAwCis6MTBFN0IwMDAwNTIwMDAxRDAwMDAwMDAwM0MxRTA4MDA4RkRFMzEwMDE3Cis6MTBFN0MwMDAyN0Q3MDAwMTNDMDEwODAwQUMzNzMxMDAxMjYwMDAwNjc5Cis6MTBFN0QwMDAwMjQwMjAyMTNDMTQwODAwOEU5NDMxRjQyNjkwMDAwMTYwCis6MTBFN0UwMDAzQzAxMDgwMEFDMzAzMUY0MEUwMDE2N0YzQzFFODAwODVFCis6MTBFN0YwMDAzN0NEMDA4MDkxQjcwMDI1MDI0MDIwMjEzNkVFMDAwNDdECis6MTBFODAwMDAwRTAwMTY4OUExQUUwMDI1MEUwMDBDQUMwMjQwMjAyMTlFCis6MTBFODEwMDAwQTAwMERDQTI0MDMwMDAxM0MxNzA4MDEyNkY3OTc2MDdGCis6MTBFODIwMDAwQTAwMEQ4NDNDMUY4MDAwOEM4NjAwMzAwMkM2NjAyM0U1Cis6MTBFODMwMDAxOTgwMDAwQzI0MTkwMDBDOTA4RjAwNEYzQzE0MDgwMDI0Cis6MTBFODQwMDA4RTk0MzEwMDMyQjUwMEZDMzVFRDAwMDEyNjhFMDAwMUJBCis6MTBFODUwMDAzQzAxMDgwMEFDMkUzMTAwQTA4RDAwNEZBRkEwMDA1ODQ1Cis6MTBFODYwMDAyNDE5MDAwQ0FGQjkwMDMwOEM5ODAwMzAwMzE2QTAyMzk3Cis6MTBFODcwMDAxQTgwMDEwQjhGQTMwMDU4MDA3NEY4MkExN0UwRkZEMzA5Cis6MTBFODgwMDAwMDAwMDAwMDEwNzQwMDJBOEZBNTAwNTgwMkQ0QjAyMUE3Cis6MTBFODkwMDAwMEI0MTAyMzMwNDRGRkZGQUZBNDAwNTgzMkE4MDAwMjk4Cis6MTBFOEEwMDAxMTAwMDAyRTMyQUIwMDEwM0MxNTgwMDgzNkIwMDA4MEZECis6MTBFOEIwMDA5MjE2MDAwODMyRDMwMDQwNTI2MDAwRkI4RUUyMDAwODNFCis6MTBFOEMwMDAwRTAwMTY3RjAyNDAyMDIxMjQwQTAwMThBMjBBMDAwOTI3Cis6MTBFOEQwMDA5MjExMDAwNTI0MDlGRkZFMDI0MDIwMjEwMjI5OTAyNDA0Cis6MTBFOEUwMDAwRTAwMTY4OUEyMTIwMDA1MjQwNDAwMzkwMDAwMjgyMTE4Cis6MTBFOEYwMDAwRTAwMTcyMzI0MDYwMDE4MEEwMDBEQ0EyNDAzMDAwMTg1Cis6MTBFOTAwMDA5MkZFMDAwQzNDMEE4MDA4MzU0OTAwODAwMDFFQkIwMEM2Cis6MTBFOTEwMDA4RDI3MDAzODM2RjEwMDgxMDI0MDIwMjEzMjI1RjA4MTE4Cis6MTBFOTIwMDAwRTAwMEM5QjMwQzYwMEZGMEEwMDBEQzEwMDAwMDAwMDY1Cis6MTBFOTMwMDAzQUE3MDAwMTMwRTMwMDAxMTQ2MEZGQTQwMkQ0QjAyMTIzCis6MTBFOTQwMDAwQTAwMEUxRDAwMDAwMDAwMDI0MDIwMjEwRTAwMTc2NTg1Cis6MTBFOTUwMDAwMjAwMjgyMTBBMDAwRDc1MDA0MDE4MjExMTYwRkY3MDg3Cis6MTBFOTYwMDAzQzBGODAwODNDMEQ4MDA4MzVFRTAwODA4REM0MDAzOEQ3Cis6MTBFOTcwMDA4RkEzMDA1NDhEQTYwMDA0MDA2NjYwMjMxRDgwRkY2OEVECis6MTBFOTgwMDAwMDAwMDAwMDAwNjRDMDIzMDcwMjAwMDFBRkE0MDA1NDhGCis6MTBFOTkwMDAzQzFGMDgwMDhGRkYzMUU0MzNGOTAwMDExMzIwMDAxNUZDCis6MTBFOUEwMDA4RkFDMDA1ODNDMDc4MDAwOTRFMzAxMUExMDYwMDAxMkZECis6MTBFOUIwMDAzQzA2ODAwODBFMDAyMTkyMDI0MDIwMjEzQzAzMDgwMTAxCis6MTBFOUMwMDA5MDYzOTc5MTMwNjQwMDAyMTQ4MDAxNDUwMDAwMDAwMEJDCis6MTBFOUQwMDAzMDZDMDAwNDExODAwMDA3OEZBQzAwNTgzMDY2MDBGQkRCCis6MTBFOUUwMDAzQzAxMDgwMUEwMjY5NzkxMzJCNTAwRkNBRkEwMDA1ODY5Cis6MTBFOUYwMDA4RkFDMDA1ODNDMDY4MDA4MzREMzAwODBBRkI0MDAxOEI4Cis6MTBFQTAwMDBBRkI2MDAxMEFGQUMwMDE0M0MwODgwMDA5NTBCMDEyMDlECis6MTBFQTEwMDA4RTZGMDAzMDk2NkEwMDVDOEZBMzAwNUM4RkJGMDAzMDYxCis6MTBFQTIwMDAzMTY5RkZGRjMxNDRGRkZGOEZBRTAwNTQwMTM0MTAyMUU0Cis6MTBFQTMwMDAzNTA1NDAwMDAwNjQzODJCMDA0NUM4MjEwM0U3QzAyNTk4Cis6MTBFQTQwMDBBRkI5MDAyMEFGQUYwMDI4QUZCODAwMzBBRkFGMDAyNDlGCis6MTBFQTUwMDBBRkEwMDAyQ0FGQUUwMDM0OTI2RDAwMDgzMUI0MDAwOEI2Cis6MTBFQTYwMDAxNjgwMDBCQjAyMDAyMDIxOEVFMjAwMDQwMDQwRjgwOTVECis6MTBFQTcwMDAyN0E0MDAxMDhGQUYwMDMwMzFGMzAwMDI1NjYwMDAwMTcwCis6MTBFQTgwMDAzMkI1MDBGRTNDMDQ4MDA4MzQ5RjAwODA5M0Y5MDAwOEYyCis6MTBFQTkwMDAzMzM4MDA0MDUzMDAwMDEzOEZBNDAwMjQ4Qzg1MDAwNEY5Cis6MTBFQUEwMDA4RkE3MDA1NDEwQTcwMEQ1MjQwNDAwMTQzMkIwMDAwMTMxCis6MTBFQUIwMDAxMjAwMDAwQzhGQTQwMDI0MjQxNDAwMEMxMjM0MDExQTNDCis6MTBFQUMwMDAyQTJEMDAwRDExQTAwMTAyMjQxMzAwMEUyNDBFMDAwQUFECis6MTBFQUQwMDA1MjJFMDAwMTI0MUUwMDA4OEZBRjAwMjQyNUU0MDAwMUZGCis6MTBFQUUwMDBBRkE0MDAyNDhGQUEwMDE0M0MwQjgwMDgzNTY1MDA4MDc5Cis6MTBFQUYwMDAwMDhBNDgyMThDQjEwMDMwQUNBOTAwMzA5MEE0MDA0RUFGCis6MTBFQjAwMDA4Q0E3MDAzMDM0MDhGRkZDMDA4ODE4MDQwMEUzRjgyMUNCCis6MTBFQjEwMDBBQ0JGMDAzNDhGQTYwMDMwOEZCOTAwNTQ4RkI4MDA1Q0IyCis6MTBFQjIwMDAzMEMyMDAwODEwNDAwMDBCMDMzODk4MjE4Q0FDMDAyMDQ0Cis6MTBFQjMwMDAxMTkzMDBEMzMwQzYwMEZGOTJFRTAwMEM4RkE3MDAzNDczCis6MTBFQjQwMDAwMjQwMjAyMTAwMEU2QjAwMzVCNDAwODAwRTAwMEM5QkFCCis6MTBFQjUwMDAzMjg1RjA4MDNDMDI4MDA4MzQ1MDAwODA4RTBGMDAzMEY3Cis6MTBFQjYwMDAwMUYxMzAyMzE4QzAwMDk3MjY0ODAwODAzQzA3MDgwMEI4Cis6MTBFQjcwMDA4Q0U3MzFFNDI0MDRGRjgwMDEwNDE4MjQzMTE4MDA3RjVECis6MTBFQjgwMDAzQzFGODAwMDNDMTk4MDA0MzBGMTAwMDFBRkUzMDA5MDhECis6MTBFQjkwMDAxMjIwMDAwNjAzMTkyODIxM0MwMzA4MDE5MDYzOTc5MTc1Cis6MTBFQkEwMDAzMDY5MDAwODE1MjAwMEM2MzA2QTAwRjczQzEwODAwODY0Cis6MTBFQkIwMDAzNjA0MDA4MDkwOEMwMDRGMzE4QjAwMDExNTYwMDA0MkJDCis6MTBFQkMwMDAwMDAwMDAwMDNDMDYwODAwOENDNjMxOTgzMENFMDAxMEQyCis6MTBFQkQwMDA1MUMwMDA0MjMwRjkwMDAxOTBBRjAwNkI1NUUwMDAzRjlBCis6MTBFQkUwMDAzMEY5MDAwMTI0MTgwMDAxQTBCODAwNkIzQzExODAwMDJFCis6MTBFQkYwMDA5NjIyMDA3QTI0NDcwMDY0QTQ4NzAwMTIzQzBEODAwODA2Cis6MTBFQzAwMDAzNUE1MDA4MDkwQjQwMDA4MzI5MDAwNDAxNjAwMDAwNDQyCis6MTBFQzEwMDAzQzAzODAwODMyQUUwMDAxMTVDMDAwOEIwMDAwMDAwMEVDCis6MTBFQzIwMDAzNDY0MDA4MDhDODYwMDIwMTBEMzAwMEEzNDYzMDEwMDE1Cis6MTBFQzMwMDA4QzY3MDAwMDAyQzc3ODIzMTlFMDAwOTc4RkJGMDA1NDRCCis6MTBFQzQwMDBBQzkzMDAyMDI0MTMwMDAxQUM3NjAwMDBBRkIzMDA1MDU5Cis6MTBFQzUwMDBBQzdGMDAwNDE3QzAwMDRFMDAwMDAwMDA4RkE5MDA1MEQ4Cis6MTBFQzYwMDAxNTIwMDAwQjAwMDAwMDAwM0MwMzA4MDE5MDYzOTc5MTAxCis6MTBFQzcwMDAzMDZBMDAwMTExNDAwMDJFOEZBQjAwNTgzMDY0MDBGRTU2Cis6MTBFQzgwMDAzQzAxMDgwMUEwMjQ5NzkxMEEwMDBENzUwMDAwMTgyMThECis6MTBFQzkwMDAwRTAwMENBQzAyNDAyMDIxMEEwMDBGMTMwMDAwMDAwMEZGCis6MTBFQ0EwMDAwQTAwMEUyMDAwMDBBMDIxMDA0MEY4MDkyNDA0MDAxN0VCCis6MTBFQ0IwMDAwQTAwMERDQTI0MDMwMDAxMDA0MEY4MDkyNDA0MDAxNkNDCis6MTBFQ0MwMDAwQTAwMERDQTI0MDMwMDAxOTA5NDAwNEYyNDBERkZGRTlBCis6MTBFQ0QwMDAwMjhEMjgyNEEwODUwMDRGMzBGOTAwMDExMzIwMDAwNjgyCis6MTBFQ0UwMDAzQzA0ODAwODNDMDMwODAxOTA2Mzk3OTEzMDdGMDAxMDNBCis6MTBFQ0YwMDAxN0UwMDA1MTMwNjgwMEVGMzQ5MDAwODAyNDBBMDAwMUQyCis6MTBFRDAwMDAwMjQwMjAyMTBFMDAxNjdGQTYwQTAwMTI5MjAzMDAyNTYxCis6MTBFRDEwMDAyNDA5MDAwMUFGQTkwMDUwMzQ2MjAwMDEwMjQwMjAyMTAzCis6MTBFRDIwMDAwRTAwMTY4OUEyMDIwMDI1MEEwMDBFRjkzQzBEODAwODhCCis6MTBFRDMwMDAxMTYwRkU4MzAwMDAxODIxOEZBNTAwMzAzMEFDMDAwNDY0Cis6MTBFRDQwMDAxMTgwRkUyQzhGQkYwMDg0MEEwMDBEQ0IyNDAzMDAwMTJDCis6MTBFRDUwMDAyN0E1MDAzODBFMDAwQ0I2QUZBMDAwMzg1NDQwRkY0MzgyCis6MTBFRDYwMDA4RUUyMDAwNDhGQjQwMDM4MzI5MDAxMDA1MjAwRkYzRjYxCis6MTBFRDcwMDA4RUUyMDAwNDhGQTMwMDNDOEU2RTAwNTgwMDZFNjgyMzY0Cis6MTBFRDgwMDAwNUEzRkYzOUFFNjMwMDU4MEEwMDBFOTQ4RUUyMDAwNDFBCis6MTBFRDkwMDAwRTAwMTY3RjAyNDAyMDIxM0MwMzgwMDgzNDY4MDA4MDZBCis6MTBFREEwMDAwMjQwMjAyMTBFMDAxNjg5QTExRTAwMDkwM0MwMzAyMTU3Cis6MTBFREIwMDAyNDA0MDAzNzBFMDAxNzIzMDAwMDI4MjEwQTAwMEYxMTM5Cis6MTBFREMwMDA4RkE5MDA1MDhGQUIwMDE4NTk2MEZGOEQzQzBEODAwODUzCis6MTBFREQwMDAwRTAwMTY3RjAyNDAyMDIxOTIwQzAwMjUyNDA1MDAwMTIwCis6MTBFREUwMDBBRkE1MDA1MDM1ODIwMDA0MDI0MDIwMjEwRTAwMTY4OTk0Cis6MTBFREYwMDBBMjAyMDAyNTBBMDAwRUY5M0MwRDgwMDgxMjI0MDA1OUQ5Cis6MTBFRTAwMDAyQTIzMDAxNTEwNjAwMDREMjQwOTAwMTYyNDA4MDAwQzY4Cis6MTBFRTEwMDA1NjI4RkYyNzMyQjAwMDAxM0MwQTgwMDg5MTRDMDAxQkE1Cis6MTBFRTIwMDAyNDA2RkZCRDI0MUUwMDBFMDE4NjU4MjRBMTRCMDAxQkEyCis6MTBFRTMwMDAwQTAwMEVBNTMyQjAwMDAxM0MwMTA4MDFBMDI4OTc5MUZDCis6MTBFRTQwMDAwQTAwMEVGOTNDMEQ4MDA4OENCNTAwMzA4RUZFMDAwOERCCis6MTBFRTUwMDAyNDA0MDAxODI2QjYwMDAxMDNDMEY4MDlBQ0I2MDAzMDNGCis6MTBFRTYwMDAzQzAzMDgwMTkwNjM5NzkxMzA3NzAwMDExNkUwRkY4MTIxCis6MTBFRTcwMDAzMDZBMDAwMThGQjIwMDMwMEEwMDBENzUzMjQzMDAwNDgxCis6MTBFRTgwMDAzQzEwODAwMDk2MDUwMTFBNTBBMEZGMkIzNEM2MDAxMERDCis6MTBFRTkwMDAwQTAwMEVDODkyRUUwMDBDOEM2MjAwMDAxNDU2RkY2RDQyCis6MTBFRUEwMDAwMDAwMDAwMDhDNzgwMDA0OEZCOTAwNTQwMzM4ODgyM0Q4Cis6MTBFRUIwMDAwNjIxRkY2MzhGQkYwMDU0MEEwMDBGMEUwMDAwMDAwMDAwCis6MTBFRUMwMDAzQzAxMDgwMUEwMkE5NzkxMEEwMDBGMzAzMEY5MDAwMTk3Cis6MTBFRUQwMDAxNjMzRkYwMjhGQUYwMDI0MEEwMDBFQjAyNDFFMDAxMDZDCis6MTBFRUUwMDAwRTAwMTY3RjAyNDAyMDIxM0MwQjgwMDgzNTY4MDA4MDEwCis6MTBFRUYwMDA5MTA5MDAyNTI0MEEwMDAxQUZBQTAwNTAzNTMzMDAwNDBGCis6MTBFRjAwMDAwMjQwMjAyMTBFMDAxNjg5QTExMzAwMjUzQzA1MDgwMUFFCis6MTBFRjEwMDA5MEE1OTc5MTMwQTIwMEZEM0MwMTA4MDFBMDIyOTc5MTk1Cis6MTBFRjIwMDAwQTAwMEU2RDAwNDAxODIxMjQxMTAwMEU1M0QxRkVFQTk0Cis6MTBFRjMwMDAyNDFFMDAxMDBBMDAwRUFGMjQxRTAwMTY1NjI5RkVEQzA3Cis6MTBFRjQwMDAzMkIwMDAwMTNDMEE4MDA4OTE0QzAwMUIyNDA2RkZCRDMyCis6MTBFRjUwMDAyNDFFMDAxMDAxODY1ODI0QTE0QjAwMUIwQTAwMEVBNTk4Cis6MTBFRjYwMDAzMkIwMDAwMTBBMDAwRUE0MjQxRTAwMTIzQzAzODAwMEVGCis6MTBFRjcwMDA4QzYyMDFCODA0NDBGRkZFMjQwNDA4MDBBQzY0MDFCOEIwCis6MTBFRjgwMDAwM0UwMDAwODAwMDAwMDAwMzBBNUZGRkYzMEM2RkZGRkNGCis6MTBFRjkwMDAzQzA3ODAwMDhDRTIwMUI4MDQ0MEZGRkUzNEVBMDE4MEE3Cis6MTBFRkEwMDBBRDQ0MDAwMEFDRTQwMDIwM0MwNDgwMDg5NDgzMDA0ODk5Cis6MTBFRkIwMDAzMDY4RkZGRjExMDAwMDE2QUY4ODAwMDgyNEFCMDAxMjc0Cis6MTBFRkMwMDAwMTBCNDgyQjUxMjAwMDEzM0MwNDgwMDAzNEVGMDEwMDVBCis6MTBFRkQwMDA5NUVFMDAyMDhGODkwMDAwMjQwRDAwMUEzMUNDRkZGRjMwCis6MTBFRkUwMDAzMTI3NDAwMEExNEQwMDBCMTBFMDAwMzYyNTgzRkZGRUM1Cis6MTBFRkYwMDAwMTAzQzAyQjE3MDAwMDM0OEY5OTAwMDQ4Rjg4MDAwNDkwCis6MTBGMDAwMDBBNTQzMDAxNDM1MDcwMDAxMEEwMDEwMDNBRjg3MDAwNDcwCis6MTBGMDEwMDAzQzA0ODAwMDI0MDMwMDAzMzQ4MjAxODA4Rjg5MDAwMEI3Cis6MTBGMDIwMDA4Rjg3MDAwNEEwNDMwMDBCM0MwODgwMDAzNTBDMDE4MDUyCis6MTBGMDMwMDBBNTg1MDAwRUE1ODUwMDFBOEY4NTAwMEMzMEVCODAwMDk5Cis6MTBGMDQwMDBBNTg5MDAxMEFEODUwMDI4QTU4NjAwMDgxMTYwMDAwRjc1Cis6MTBGMDUwMDA4Rjg1MDAxNDM1MTkwMTAwOTcyQTAwMTYzMTU4RkZGQ0RFCis6MTBGMDYwMDAyNzBGMDAwNDAxRTg3MDIxOERDRDQwMDAzMUE2RkZGRjdECis6MTBGMDcwMDAxNEMwMDAwNzI0MDNCRkZGM0MwMkZGRkYzNDQ4N0ZGRjlBCis6MTBGMDgwMDAwMEU4MzgyNEFGODcwMDA0OEY4NTAwMTQyNDAzQkZGRkY1Cis6MTBGMDkwMDAzQzA0ODAwMDAwRTM1ODI0MzQ4MzAxODBBNDZCMDAyNkU0Cis6MTBGMEEwMDBBQzY5MDAyQzEwQTAwMDAzMDAwNTRDMDJBNDY1MDAxMDAwCis6MTBGMEIwMDBBNDY5MDAyNjNDMDcxMDAwQUM4NzAxQjgwM0UwMDAwOEYzCis6MTBGMEMwMDAwMDAwMDAwMDhGOTkwMDA0MjQwQUZGRkUwMzJBMzgyNDYwCis6MTBGMEQwMDAwQTAwMTAwM0FGODcwMDA0MjdCREZGRTg4RkEyMDAyOEI1Cis6MTBGMEUwMDAzMEE1RkZGRjMwQzZGRkZGQUZCRjAwMTBBRjg3MDAwQzk5Cis6MTBGMEYwMDBBRjgyMDAxNEFGODAwMDA0MEUwMDBGREJBRjgwMDAwMDcxCis6MTBGMTAwMDA4RkJGMDAxMDI3QkQwMDE4MDNFMDAwMDhBRjgwMDAxNDc3Cis6MTBGMTEwMDAzQzA2ODAwMDM0QzQwMDcwMzRDNzAxMDA4QzhBMDAwMEIzCis6MTBGMTIwMDA5MEU1MDAxMjhGODQwMDAwMjdCREZGRjAzMEEzMDBGRkEwCis6MTBGMTMwMDAwMDAzMTg4MjMwODI0MDAwMTA0MDAwMzcyNDY1MDAwMzJECis6MTBGMTQwMDAwMDA1Qzg4MDAzMjZDMDIxOEYwRTQwMDAyNDZGMDAwNEY0Cis6MTBGMTUwMDAwMDBGNjg4MEFGQUUwMDAwMDFBNjYwMjE4RDhCNDAwMERCCis6MTBGMTYwMDBBRkFCMDAwNDk0RTkwMDE2MzEyOEZGRkMwMTA2MzgyMUZBCis6MTBGMTcwMDA4Q0U2NDAwMEFGQTYwMDA4OEZBOTAwMDgwMDAwMzAyMUVGCis6MTBGMTgwMDAwMDAwMjgyMTNDMDcwODAwMjRFNzAxMDAwQTAwMTA2NzVFCis6MTBGMTkwMDAyNDA4MDAwODkwNTkwMDAwMjRBNTAwMDEyQ0FDMDAwQ0E0Cis6MTBGMUEwMDAwMDc5QzAyMTAwMTg3ODgwMDFFNzcwMjE4RENEMDAwMDIyCis6MTBGMUIwMDAxMTgwMDAwNjAwQ0QzMDI2MDNBNTEwMjExNEE4RkZGNTBDCis6MTBGMUMwMDAwMDA1MUEwMDU1MjBGRkY0OTA1OTAwMDAzQzA0ODAwMDBGCis6MTBGMUQwMDAzNDg3MDA3MDNDMDUwODAwOENBNTMxMDQ4Q0UzMDAwMEU2Cis6MTBGMUUwMDAyQ0EyMDAyMDEwNDAwMDA5MDA2QTM4MjMwMDA1NDg4MDQ2Cis6MTBGMUYwMDAzQzBCMDgwMDI1NkIzMTA4MDEyQjQwMjEyNEFBMDAwMTlCCis6MTBGMjAwMDBBRDA3MDAwMDNDMDEwODAwQUMyQTMxMDQwMEMwMTAyMTA5Cis6MTBGMjEwMDAwM0UwMDAwODI3QkQwMDEwMzA4MjIwMDAxMDQwMDAwQkUyCis6MTBGMjIwMDAwMDA1NTg4MDAxNjY0ODIxOEQyNDQwMDAyNDY4MDAwNEIwCis6MTBGMjMwMDAwMDA4Mzg4MEFGQTQwMDAwMDBFNjE4MjE4QzY1NDAwMDZCCis6MTBGMjQwMDBBRkEwMDAwODBBMDAxMDU3QUZBNTAwMDQwMDAwMDAwRDkxCis6MTBGMjUwMDAwQTAwMTA1ODhGQTkwMDA4MjdCREZGRTAzQzA3ODAwMDc2Cis6MTBGMjYwMDAzNEU2MDEwMEFGQkYwMDFDQUZCMjAwMThBRkIxMDAxNDBDCis6MTBGMjcwMDBBRkIwMDAxMDk0QzUwMDBFOEY4NzAwMDAzMEE0RkZGRkQwCis6MTBGMjgwMDAyNDgzMDAwNDMwRTI0MDAwMTA0MDAwMTBBRjgzMDAyQ0MzCis6MTBGMjkwMDAzQzA5MDAyMDAwRTk0MDI0MTEwMDAwMEQzMEVDODAwMDAyCis6MTBGMkEwMDA4RjhBMDAwNDI0MEJCRkZGMDBFQjM4MjQzNTQzMTAwMDg1Cis6MTBGMkIwMDBBRjg3MDAwMDMwRjIyMDAwMTY0MDAwMEIzQzE5MDAwNDFDCis6MTBGMkMwMDAyNDFGRkZCRjBBMDAxMEI3MDA3RjEwMjQzMEVDODAwMDFECis6MTBGMkQwMDAxNTgwMDA0MjNDMEUwMDIwMzBGMjIwMDAxMjQwRkZGODYyCis6MTBGMkUwMDA4RjgzMDAwNDNDMTkwMDA0MDBGOUMwMjQxMzAwRkZGNUNCCis6MTBGMkYwMDAyNDFGRkZCRjM0NjIwMDQwQUY4MjAwMDQzMEUyMDEwMEVGCis6MTBGMzAwMDAxMDQwMDAxMTMwRjAxMDAwOEY4MzAwMzAxMDYwMDAwNkI0Cis6MTBGMzEwMDAzQzBGODAwMDNDMDUwMDIwMDBFNTIwMjQxNDgwMDBDMDQ0Cis6MTBGMzIwMDAzQzA4MDAwNDNDMEY4MDAwMzVFRTAxMDA5NUNEMDAxRTI2Cis6MTBGMzMwMDA5NUNDMDAxQzMxQUFGRkZGMDAwQzVDMDAwMTRCNDgyNTU2Cis6MTBGMzQwMDBBRjg5MDAwQzMwRjAxMDAwMTIwMDAwMDgyNDExMDAwMUY5Cis6MTBGMzUwMDAzMEYxMDAyMDE2MjAwMDhCM0MxODEwMDAwMEY4OTAyNDlCCis6MTBGMzYwMDAxNjQwMDA4MjNDMDQwQzAwMjQxMTAwMDEzMEU4MDEwMDJBCis6MTBGMzcwMDAxNTAwMDAwQjNDMDkwMDAxOEY4NTAwMDQzMEE5NDAwMEY2Cis6MTBGMzgwMDAxNTIwMDAwNzNDMDkwMDAxM0MwQzFGMDEwMEVDNTgyNDJCCis6MTBGMzkwMDAzQzBBMTAwMDExNkEwMTE4M0MxMDgwMDAzQzA5MDAwMTcxCis6MTBGM0EwMDAwMEU5MzAyNDEwQzAwMDE3M0MwQjEwMDAzQzE4MDgwMDg2Cis6MTBGM0IwMDA4RjE4MDAyNDMzMDcwMDAyMTRFMDAxNDAyNDAzMDAwMUU5Cis6MTBGM0MwMDA4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMEQ3Cis6MTBGM0QwMDAwMDYwMTAyMTAzRTAwMDA4MjdCRDAwMjAwMEVFNjgyNDMzCis6MTBGM0UwMDAxMUEwRkZCRTMwRjIyMDAwOEY4RjAwMDQzQzExRkZGRjAwCis6MTBGM0YwMDAzNjMwN0ZGRjAwRjAzODI0MzVFMzgwMDAwQTAwMTBBNjg1Cis6MTBGNDAwMDBBRjg3MDAwMDAwRUIxMDI0NTA0MDAwNjVBRjgwMDAyODVCCis6MTBGNDEwMDA4RjhDMDAzMDNDMEQwRjAwMDBFRDE4MjQxNTgwMDA4ODAzCis6MTBGNDIwMDBBRjgzMDAxMDMwRTgwMTAwMTEwMDAwODY5MzhGMDAxMEI4Cis6MTBGNDMwMDAzQzBBMDIwMDEwNkEwMDgzM0MxMjgwMDAzNjUwMDEwMDMyCis6MTBGNDQwMDA5MjA1MDAxMzk3ODkwMDJFMzYyNjAwMDIzMEFGMDBGRjg4Cis6MTBGNDUwMDAyNUVFMDAwNDAwMEUxOUMwM0MwNDgwMDA4Qzk4MDFCODExCis6MTBGNDYwMDAwNzAwRkZGRTM0ODgwMTgwQUQwMzAwMDAzQzE5ODAwOENFCis6MTBGNDcwMDBBQzgzMDAyMDk3MzEwMDQ4MzIyNUZGRkYxMEEwMDE1Q0NCCis6MTBGNDgwMDBBRjg1MDAwODI1MjMwMDEyMDBBM0Y4MkI1M0UwMDE1OTkzCis6MTBGNDkwMDA4Rjg1MDAwNDM0OEQwMTAwOTVBQzAwMjAyNDAyMDAxQUYxCis6MTBGNEEwMDAzMEU0NDAwMDMxOEJGRkZGQTEwMjAwMEIxMDgwMDE5MjdECis6MTBGNEIwMDAyNTYzRkZGRTAwQTM1MDJCMTU0MDAxOTA4RjhGMDAwNEExCis6MTBGNEMwMDBBNTAzMDAxNDhGODgwMDA0MzUwNTAwMDFBRjg1MDAwNEYyCis6MTBGNEQwMDAzQzA4ODAwMDM1MTkwMTgwQTcyOTAwMEVBNzI5MDAxQUQxCis6MTBGNEUwMDA4Rjg5MDAwQzMwQjE4MDAwQTcyNzAwMTBBRjI5MDAyOEI5Cis6MTBGNEYwMDBBNzI2MDAwODEyMjAwMDBFM0MwNDgwMDAzNTAyMDEwMEZGCis6MTBGNTAwMDA5NDRDMDAxNjMxOEJGRkZDMjU2NDAwMDQwMDg4MTgyMTAwCis6MTBGNTEwMDA4QzdGNDAwMDMzRTZGRkZGMTRDMDAwMDUzQzA0ODAwMEYwCis6MTBGNTIwMDAzQzBBRkZGRjM1NEQ3RkZGMDBBRDI4MjRBRjg1MDAwNDY2Cis6MTBGNTMwMDAyNDBFQkZGRjAwQUU0MDI0MzQ4NTAxODBBNEE4MDAyNjFECis6MTBGNTQwMDBBQ0E3MDAyQzNDMDcxMDAwQUM4NzAxQjgwMDAwMTgyMUM0Cis6MTBGNTUwMDA4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDQ1Cis6MTBGNTYwMDAwMDYwMTAyMTAzRTAwMDA4MjdCRDAwMjAzQzAyMEJGRkQzCis6MTBGNTcwMDAwMEU0MTgyNDM0NUZGRkZGMDNFM0M4MkI1MzIwRkY3QjE0Cis6MTBGNTgwMDAyNDExMDAwMTNDMDYwODAwOENDNjAwMkMyNEM1MDAwMTkzCis6MTBGNTkwMDAzQzAxMDgwMEFDMjUwMDJDMEEwMDEwRDQyNDExMDAwNTAxCis6MTBGNUEwMDA4Rjg1MDAyODEwQTAwMDJGQUY4MDAwMTA5MEEzMDAwMENFCis6MTBGNUIwMDAxNDYwMDA3OTI0MTkwMDAzMTBBMDAwMkEzMEU2MDEwMDJECis6MTBGNUMwMDAxMEMwMDBDQzhGODYwMDEwMjQxRjAwMDIxMERGMDBDOTdECis6MTBGNUQwMDA4RjhCMDAwQzNDMDcwODAwOENFNzAwMzgyNEU0RkZGRjA5Cis6MTBGNUUwMDAxNEUwMDAwMjAxNjQxODI0MDAwMDE4MjEzQzBEMDgwMEZBCis6MTBGNUYwMDAyNUFEMDAzODAwNkQxMDIxOTA0QzAwMDQ4Rjg1MDAyQzQzCis6MTBGNjAwMDAyNTgzMDAwNDAwMDMyMUMwMzBBNUZGRkYzNjI2MDAwMjM5Cis6MTBGNjEwMDAwRTAwMEZEQjAwMDAwMDAwMEEwMDExNEQwMDAwMTgyMTUxCis6MTBGNjIwMDAwMEU4MzAyNDE0QzBGRjQwM0MwRjgwMDAwRTAwMTAzRDY1Cis6MTBGNjMwMDAwMDAwMDAwMDhGODcwMDAwMEEwMDEwQ0FBRjgyMDAwQzkzCis6MTBGNjQwMDA5MzhGMDAxMDNDMTgwODAxMjcxODk2RTAwMDBGOTBDMDE3Cis6MTBGNjUwMDAwMjU4ODAyMUFGOTAwMDI4OEY4NTAwMjgxNEEwRkZEMzg2Cis6MTBGNjYwMDBBRjhGMDAxMDNDMDQ4MDAwOEM4NjQwMDAzMEM1MDEwMDQ0Cis6MTBGNjcwMDAxMEEwMDBCQzMyMjMwMDA0M0MwQzA4MDA4RDhDMDAyNDM4Cis6MTBGNjgwMDAyNDEyMDAwNDEwNjAwMEMyMzE5MDAwMEQzQzA0ODAwMDgwCis6MTBGNjkwMDA4QzhENDAwMDM0MDJGRkZGMTFBMjAxMDAzMjMxRkZGQkNDCis6MTBGNkEwMDA4Qzg4NDAwMDMxMEEwMTAwNTU0MDAwMDEyNDExMDAxMEVGCis6MTBGNkIwMDAzMEVFMDgwMDExQzAwMEJFMjQxOUZGRkI4Rjk4MDAyQzBCCis6MTBGNkMwMDAyRjBGMDNFRjUxRTAwMDAxMDIxOTgwMjQzMEU5MDEwMEZGCis6MTBGNkQwMDAxMTIwMDAxNDMyMDgwMDAxOEY4NzAwMzAxNEUwMDBGQjc1Cis6MTBGNkUwMDA4RjhDMDAwQzNDMDU4MDAwMzRBQjAxMDA5MTdGMDAxMzJGCis6MTBGNkYwMDAzM0UzMDBGRjI0NkEwMDA0MjQwM0ZGRkUwMjAzODAyNDk2Cis6MTBGNzAwMDAwMDBBMjFDMDEyMDAwMDAyMDIzMjMwMjUzMjI2RkZGRjFCCis6MTBGNzEwMDAwRTAwMEZEQjk3ODUwMDJFMTIwMEZGMjkwMDAwMTgyMTM0Cis6MTBGNzIwMDAzMjA4MDAwMTExMDAwMDBEMzIxODAwMDQyNDBFMDAwMUZGCis6MTBGNzMwMDAxMjBFMDAwMjAyMzIzMDI1MzIyNkZGRkY5Nzg1MDAyRTdFCis6MTBGNzQwMDAwRTAwMEZEQjAwMDAyMDIxMjQwRkZGRkUwMjBGODAyNDlCCis6MTBGNzUwMDAxMjAwRkYxQjAwMDAxODIxMzIxODAwMDQ1MzAwRkYxODhDCis6MTBGNzYwMDAyNDAzMDAwMTAyMzIzMDI1MjQxMjAwMDQ1NjEyMDAwMTQ1Cis6MTBGNzcwMDAzMjI2RkZGRjk3ODUwMDJFMEUwMDBGREIyNDA0MDEwMEM4Cis6MTBGNzgwMDAyNDE5RkZGQjAyMTk4ODI0MTIyMEZGMEQwMDAwMTgyMTA0Cis6MTBGNzkwMDAwQTAwMTBFOTI0MDMwMDAxMTA3OTAwOUMwMDAwMzAyMUM4Cis6MTBGN0EwMDA5MEFEMDAwMTI0MDIwMDAyMTFBMjAwQkUzMEVBMDA0MDI4Cis6MTBGN0IwMDA5MEI5MDAwMTI0MTgwMDAxMTMzODAwN0YzMEU5MDA0MDlGCis6MTBGN0MwMDA4Q0E2MDAwNDk3ODUwMDJFMDBDMDIwMjEwRTAwMEZEQkMwCis6MTBGN0QwMDAzNjI2MDAwMjAwMDA0MDIxMDEwMDE4MjE4RkJGMDAxQ0M2Cis6MTBGN0UwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAwMDYwMTAyMThDCis6MTBGN0YwMDAwM0UwMDAwODI3QkQwMDIwMzYwRjAxMDA5NUVFMDAwQzQ1Cis6MTBGODAwMDAzMUNEMDIwMDE1QTBGRUU2M0MwOTAwMDEzQzE4ODAwODNECis6MTBGODEwMDA5NzEyMDA0ODk3ODkwMDJFMzYyNjAwMDIzMjQ4RkZGRkQzCis6MTBGODIwMDBBRjg4MDAwODNDMDM4MDAwOEM3MTAxQjgwNjIwRkZGRTAxCis6MTBGODMwMDAzNDZBMDE4MEFENDAwMDAwMTEwMDAwOEUzQzBGODAwMDUyCis6MTBGODQwMDAyNTNGMDAxMjAxMUZDODJCMTMyMDAwOEIyNDBFMDAwMzNDCis6MTBGODUwMDAzNDZDMDEwMDk1OEIwMDIwMjQwMjAwMUEzMEU0NDAwMDMzCis6MTBGODYwMDAzMTYzRkZGRkExNDIwMDBCMTA4MDAwQTcyNDYzRkZGRTVECis6MTBGODcwMDAwMTAzNjgyQjE1QTAwMEE1MjQwOEZGRkUzNEE1MDAwMTk0Cis6MTBGODgwMDBBNTQzMDAxNEFGODUwMDA0M0MwNDgwMDAyNDEyQkZGRjkwCis6MTBGODkwMDAwMEIyODAyNDM0ODUwMTgwQTRBOTAwMEVBNEE5MDAxQTE2Cis6MTBGOEEwMDBBNEE2MDAwOEE0QjAwMDI2QTRBNzAwMTAzQzA3MTAwMERFCis6MTBGOEIwMDBBQzg3MDFCODBBMDAxMTREMDAwMDE4MjEzQzAzODAwMEZDCis6MTBGOEMwMDAzNDY0MDEwMDk0OUYwMDBFM0MxOTA4MDA4RjM5MDBEODYxCis6MTBGOEQwMDAyNDA0MDA4MDMzRTVGRkZGMjczMTAwMDEzQzAxMDgwMENDCis6MTBGOEUwMDBBQzMxMDBEODBFMDAwRkRCMjQwNjAwMDMwQTAwMTE0REQ2Cis6MTBGOEYwMDAwMDAwMTgyMTI0MEEwMDAyMTBDQTAwNTk4Rjg1MDAyQzJDCis6MTBGOTAwMDAzQzAzMDgwMDhDNjMwMEQwMjQwRTAwMDExMDZFMDA1RUUyCis6MTBGOTEwMDAyQ0NGMDAwQzI0RDJGRkZDMkU1MDAwMDQxNjAwMDAyMTM2Cis6MTBGOTIwMDAwMDAwMjAyMTI0MTgwMDAyMTA3ODAwMUIyQ0Q5MDAwQ0E0Cis6MTBGOTMwMDAyNERGRkZGODJGRTkwMDA0MTUyMEZGMzMwMDAwMjAyMTA5Cis6MTBGOTQwMDAzMEVCMDIwMDUxNjAwMDA0MDAwNjIxQzA1NEMwMDAyMkM4Cis6MTBGOTUwMDAzMEE1RkZGRjAwMDYyMUMwMzBBNUZGRkYwQTAwMTE3RDgyCis6MTBGOTYwMDAzNjI2MDAwMjNDMDkwODAwOEQyOTAwMjQzMTMwMDAwMUIwCis6MTBGOTcwMDA1MjAwRkVGNzAwMDAxODIxOTc4NTAwMkUzNjI2MDAwMjVGCis6MTBGOTgwMDAwRTAwMEZEQjAwMDAyMDIxMEEwMDExNEQwMDAwMTgyMTlECis6MTBGOTkwMDAwQTAwMTE5QzI0MTIwMDAyMTMyMEZGRTYyNERGRkZGODY2Cis6MTBGOUEwMDAwMDAwMjAyMTMwQTVGRkZGMEEwMDExN0QzNjI2MDAwMjRECis6MTBGOUIwMDAwQTAwMTFBQzAyMTk4MDI0NTEyMEZGODI4Q0E2MDAwNDk5Cis6MTBGOUMwMDAzQzA1MDgwMTkwQTU5NkUxMTBBMEZGN0UyNDA4MDAwMUU3Cis6MTBGOUQwMDAwQTAwMTFGMDAxMDAxODIxMEUwMDBGREIzMjI2MDAwMTkxCis6MTBGOUUwMDA4Rjg2MDAxMDhGODUwMDJDMEEwMDEyNEYwMDA2MjFDMDYwCis6MTBGOUYwMDA4Rjg1MDAwNDNDMTg4MDAwMjQxMjAwMDMzNzEwMDE4MDFBCis6MTBGQTAwMDBBMjEyMDAwQjBBMDAxMTJFM0MwODgwMDA5MEEzMDAwMUY2Cis6MTBGQTEwMDAyNDExMDAwMTEwNzFGRjcwMjQwODAwMDEyNDA5MDAwMjY0Cis6MTBGQTIwMDA1MDY5MDAwNDMwRTYwMDQwMjQwODAwMDEwQTAwMTFGMDhCCis6MTBGQTMwMDAwMTAwMTgyMTUwQzBGRkZEMjQwODAwMDEzQzBDODAwMDhCCis6MTBGQTQwMDAzNThCMDEwMDk1NjMwMDEwOTRBNDAwMDIzMDdGRkZGRjA2Cis6MTBGQTUwMDA1MDlGRkY2MjAxMDAxODIxMEEwMDEyODQyNDA4MDAwMTRGCis6MTBGQTYwMDAyQ0E4MDNFRjExMDBGRTU2MjQwMzAwMDEwQTAwMTIzOUVFCis6MTBGQTcwMDAwMDAwMDAwMDI0MEUwMDAzMzVFQTAxODBBMTRFMDAwQkI3Cis6MTBGQTgwMDAwQTAwMTIxQzNDMDQ4MDAwMTFFMEZGQTIwMDA2MjFDMDA1Cis6MTBGQTkwMDAzMEE1RkZGRjBBMDAxMTdEMzYyNjAwMDIwQTAwMTFBNURECis6MTBGQUEwMDAyNDExMDAyMDExNDBGRkM2M0MxMjgwMDAzNjUwMDEwMDk2Cis6MTBGQUIwMDA5NjBGMDAxMDk0QUUwMDAyMzFFODBGRkYxNUM4RkZDMDhBCis6MTBGQUMwMDAwMDAwMDAwMDBBMDAxMUU2OTBCOTAwMDEzQzA2MDgwMEExCis6MTBGQUQwMDA4Q0M2MDAzODI0QzRGRkZGMTRDMDAwMDIwMTg0MTgyNDFGCis6MTBGQUUwMDAwMDAwMTgyMTNDMEQwODAwMjVBRDAwMzgwMDZEMTAyMUU0Cis6MTBGQUYwMDAwQTAwMTFCNjkwNDMwMDA0OEY4RjAwMDQyNDBFRkZGRTBECis6MTBGQjAwMDAwQTAwMTEyQzAxRUUyODI0MjQwOEZGRkUwQTAwMTIxQTE0Cis6MTBGQjEwMDAwMEE4MjgyNDI3QkRGRkM4QUZCMDAwMTBBRkJGMDAzNDM1Cis6MTBGQjIwMDAzQzEwNjAwQ0FGQkUwMDMwQUZCNzAwMkNBRkI2MDAyODYxCis6MTBGQjMwMDBBRkI1MDAyNEFGQjQwMDIwQUZCMzAwMUNBRkIyMDAxOEMzCis6MTBGQjQwMDBBRkIxMDAxNDhFMEU1MDAwMjQwRkZGN0YzQzA2ODAwMEUyCis6MTBGQjUwMDAwMUNGNjgyNDM1QUMzODBDMjQwQjAwMDNBRTBDNTAwMEU4Cis6MTBGQjYwMDBBQ0NCMDAwODNDMDEwODAwQUMyMDAwMjAwRTAwMTg0QTc1Cis6MTBGQjcwMDAwMDAwMDAwMDNDMEEwMDEwMzU0OTgwNTEzQzA2NjAxNjI4Cis6MTBGQjgwMDBBRTA5NTM3QzhDQzcwMDAwM0MwODYwMTQ4RDA1MDBBMEIyCis6MTBGQjkwMDAzQzAzRkZGRjAwRTMyMDI0M0MwMjUzNTMwMDA1MUZDMjM3Cis6MTBGQkEwMDAxNDgyMDAwNjM0QzU3QzAwMDAwM0EwODAwMjg2OTgyMUUwCis6MTBGQkIwMDA4RTcyMDAwNDNDMTE2MDAwMDI1MTI4MjE4Q0JGMDA3QzMxCis6MTBGQkMwMDA4Q0EyMDA3ODNDMUU2MDAwMzdDNDIwMjAzQzA1MDgwMTUwCis6MTBGQkQwMDAyNEE1OTMyOEFGODIwMDE4QUY5RjAwMUMwRTAwMTcwRUJCCis6MTBGQkUwMDAyNDA2MDAwQTNDMTkwMDAxMjczOTk2RTAzQzAxMDgwMDcwCis6MTBGQkYwMDBBQzM5MzFEQzBFMDAyMTA1QUY4MDAwMTQ4RkQ3MDgwODI2Cis6MTBGQzAwMDAyNDE4RkZGMDNDMTU1NzA5MDJGOEIwMjQxMkQ1MDMyNDNDCis6MTBGQzEwMDAyNDA0MDAwMUFGODAwMDMwM0MxNDgwMDAzNjk3MDE4MDNFCis6MTBGQzIwMDAzQzFFMDgwMTI3REU5NkUwMzY5MzAxMDA4RTkwMDAwMDBFCis6MTBGQzMwMDAzMjA1MDAwMzEwQTBGRkZEMzIwNzAwMDExMEUwMDA4ODJDCis6MTBGQzQwMDAzMjA2MDAwMjhFNzEwMDI4M0MwNDgwMDBBRTkxMDAyMDM0Cis6MTBGQzUwMDA4RTY1MDAwNDhFNjYwMDAwMDBBMDM4MjEwMEMwNDAyMTlGCis6MTBGQzYwMDA4QzgzMDFCODA0NjBGRkZFM0MwQjAwMTAyNDBBMDgwMERFCis6MTBGQzcwMDAwMEFCNDgyNEFDOEEwMUI4NTUyMDAwRTIyNDBBQkZGRjNCCis6MTBGQzgwMDA5Njc1MDAwRTNDMTIwODAwOEU1MjAwMjAzMEFDNDAwMEU5Cis6MTBGQzkwMDAzMkFGRkZGRjI2NEUwMDAxMjVFRDAwMDQzQzAxMDgwMEI1Cis6MTBGQ0EwMDBBQzJFMDAyMDExODAwMEVBQUY4RDAwMkMzQzE4MDAyMDAzCis6MTBGQ0IwMDAwMEI4QjAyNDEyQzAwMEU3MzBCOTgwMDAyNDA4QkZGRkFDCis6MTBGQ0MwMDAwMEE4MzgyNDM0QzgxMDAwQUY4NzAwMDAzMEU2MjAwMEI4Cis6MTBGQ0QwMDAxMEMwMDBFQjI0MDlGRkJGM0MwMzAwMDQwMEUzMjgyNDBDCis6MTBGQ0UwMDAxMEEwMDAwMjAxMDkxMDI0MzUwMjAwNDAzMEVBMDEwMDkyCis6MTBGQ0YwMDAxMTQwMDAxMEFGODIwMDA0OEY4QjAwMzAxMTYwMDAwN0FDCis6MTBGRDAwMDAzQzBEMDAyMDAwRUQ2MDI0MTE4MDAwMDQzQzBGMDAwNDM1Cis6MTBGRDEwMDAwMEVGNzAyNDExQzAwMjM5MDAwMDAwMDA5NjY4MDAxRTM4Cis6MTBGRDIwMDA5Njc4MDAxQzMxMTVGRkZGMDAxOEI0MDAwMkI2OTAyNTJDCis6MTBGRDMwMDBBRjkyMDAwQzMwRjkxMDAwMTMyMDAwMTMyNDE1MDAwMUJECis6MTBGRDQwMDAzMEZGMDAyMDE3RTAwMDBBM0MwNDEwMDAwMEU0MTAyNEZCCis6MTBGRDUwMDAxMDQwMDAwRDNDMEEwQzAwM0MwOTBCRkYwMEVBMTgyNDdGCis6MTBGRDYwMDAzNTI1RkZGRjAwQTMzMDJCMTBDMDAwMDgzMEVEMDEwMDQ3Cis6MTBGRDcwMDAzQzBDMDgwMDhEOEMwMDJDMjQxNTAwMDUyNThCMDAwMUZGCis6MTBGRDgwMDAzQzAxMDgwMEFDMkIwMDJDMzBFRDAxMDAxNUEwMDAwQjRECis6MTBGRDkwMDAzQzA1MDAwMThGODUwMDA0MzBBRTQwMDA1NUMwMDAwN0NGCis6MTBGREEwMDAzQzA1MDAwMTNDMTYxRjAxMDBGNjkwMjQzQzBGMTAwMDlBCis6MTBGREIwMDAxMjRGMDFDRTAwMDAwMDAwM0MwNTAwMDEwMEU1MzAyNDk4Cis6MTBGREMwMDAxMEMwMDBCMTNDMEMxMDAwM0MxRjA4MDA4RkZGMDAyNDQ1Cis6MTBGREQwMDAzM0U5MDAwMjE1MjAwMDczMjQwMzAwMDEwMDYwMTAyMUE0Cis6MTBGREUwMDAxMDQwMDAwODNDMDY4MDAwM0MxODgwMDAzNzBGMDEwMERFCis6MTBGREYwMDA4REVFMDAyNDNDMDU2MDIwQUNBRTAwMTQwMDAwMDAwMDM1Cis6MTBGRTAwMDAzQzA2ODAwMDNDMDg0MDAwQUNDODAxMzgwMDAwMDAwMEZGCis6MTBGRTEwMDA1MjIwMDAxMzMyMDYwMDAyMjYyQTAxNDAyNjJCMDA4MEMxCis6MTBGRTIwMDAyNDBERkY4MDAxNEQyMDI0MDE2RDYwMjQwMDBDMTk0MDM5Cis6MTBGRTMwMDAzMTYyMDA3RjAwMDRBOTQwMzE1MjAwN0YzQzE2MjAwMDRGCis6MTBGRTQwMDAzNkM5MDAwMjAwNjJGODI1MDJCMjM4MjUwMEU5ODgyNThCCis6MTBGRTUwMDAwM0U5QzgyNUFDRDkwODMwQUNEMTA4MzAzMjA2MDAwMjFECis6MTBGRTYwMDAxMEMwRkY3MjNDMEY4MDAwMzVFNTAxNDA4Q0I4MDAwMEU3Cis6MTBGRTcwMDAyNDEwMDA0MEFERjgwMDIwOTBBRTAwMDgzMUMzMDA3MDlGCis6MTBGRTgwMDAxMDcwMDBENjI4NjgwMDQxNTEwMDAwMDgyNDA1MDA2MDY5Cis6MTBGRTkwMDAyNDExMDAyMDEwNzEwMDBFM0MwQjQwMDAzQzA2ODAwMDM1Cis6MTBGRUEwMDBBQ0NCMDE3ODBBMDAxMzA0MDAwMDAwMDAxNDY1RkZGQkNFCis6MTBGRUIwMDAzQzBCNDAwMDBFMDAyMDIyMDAwMDAwMDAzQzBCNDAwMEU0Cis6MTBGRUMwMDAzQzA2ODAwMEFDQ0IwMTc4MEEwMDEzMDQwMDAwMDAwMDVGCis6MTBGRUQwMDA5MEJGMDAwOTI0MTkwMDA0OENBNzAwMDAzM0U5MDBGRjNCCis6MTBGRUUwMDAxMTM5MDFCMjI1MjNGRkZBMkM3MjAwMDYxMjQwMDAxNkM4Cis6MTBGRUYwMDAzQzA2ODAwMDhDQUIwMDA0OEY4NjAwMjQ5NEEyMDAwQThDCis6MTBGRjAwMDAwMDBCNTYwMjMxMjUwMEZGMTBDMDAwMDUzMDQ0RkZGRkYyCis6MTBGRjEwMDAyRDRDMDAwODE1ODAwMDAyMjU0QTAwMDQyNDBBMDAwMzI1Cis6MTBGRjIwMDAyNDEwMDAwOTEwQjAwMUY4MjhBRTAwMEExMUMwMDFEQzRECis6MTBGRjMwMDAyNDBGMDAwQTI0MDQwMDA4MTBBNDAwMjgwMDBBNDFDMDZECis6MTBGRjQwMDAwMTAwMzgyMTNDMDY4MDAwOENDODAxQjgwNTAwRkZGRTg2Cis6MTBGRjUwMDAzNEQwMDE4MEFFMDcwMDAwMzRDNDAxNDA5MDg1MDAwODExCis6MTBGRjYwMDAyNDBBMDAwMjNDMEI0MDAwMzBCOTAwRkYwMDE5OEEwMDRGCis6MTBGRjcwMDAwMjI5QzAyNUE2MTgwMDA4QTIwQTAwMEI5NDhGMDAwQUM3Cis6MTBGRjgwMDAzQzA5MTAwMEE2MEYwMDEwOEM4RTAwMDRBRTBFMDAyNDU5Cis6MTBGRjkwMDBBQ0M5MDFCODNDMDY4MDAwQUNDQjAxNzgwQTAwMTMwNDYwCis6MTBGRkEwMDAwMDAwMDAwMDNDMEE4MDAwMzU0NDAxMDA5NDgzMDAwRUVDCis6MTBGRkIwMDAzQzAyMDgwMDhDNDIwMEQ4MjQwNDAwODAzMDY1RkZGRjFBCis6MTBGRkMwMDAyNDU1MDAwMTNDMDEwODAwQUMzNTAwRDgwRTAwMEZEQkMxCis6MTBGRkQwMDAyNDA2MDAwMzBBMDAxMzcwMDAwMDE4MjEwMDBCQzIwMjVGCis6MTBGRkUwMDAzMzAzMDBGRjI0MEEwMDAxMTQ2QUZGRDYwMTAwMzgyMTAwCis6MTBGRkYwMDA4RjkxMDAyMEFGODMwMDI0MjYyQjAwMDEwQTAwMTNDQTMyCis6MDIwMDAwMDQwMDAxRjkKKzoxMDAwMDAwMEFGOEIwMDIwMDBDQTIwMjRBRjg1MDAwMDEwODAwMDA4QkMKKzoxMDAwMTAwMEFGODYwMDA0MjQwQzg3RkYwMENDNTgyNDE1NjAwMDA4MkMKKzoxMDAwMjAwMDNDMEQwMDYwMDBBRDMwMjQxMEMwMDAwNTAwMDAwMDAwNTEKKzoxMDAwMzAwMDBFMDAwRDQyMDAwMDAwMDAwQTAwMTM3MTAwMDAwMDAwRDUKKzoxMDAwNDAwMDBFMDAxNjM2MDAwMDAwMDAwQTAwMTM3MTAwMDAwMDAwQzgKKzoxMDAwNTAwMDMwQjk4MDAwNTMyMEZGMURBRjg1MDAwMDNDMDIwMDIwMTYKKzoxMDAwNjAwMDAwQTJGODI0NTNFMEZGMTlBRjg1MDAwMDNDMDdGRkZGMTIKKzoxMDAwNzAwMDM0RTQ3RkZGMDBBNDM4MjQwQTAwMTMyQjM0Qzg4MDAwMjYKKzoxMDAwODAwMDBBMDAxMzM0MDEwOTEwMjQwMEVDNTgyNDUxNjAwMDVBNkUKKzoxMDAwOTAwMEFGODAwMDI4OEY4RDAwMzAzQzBFMEYwMDAwRUUxODI0M0EKKzoxMDAwQTAwMDE1QTAwMDc1QUY4MzAwMTAzMEVGMDEwMDExRTAwMDczNjAKKzoxMDAwQjAwMDkzOTgwMDEwM0MxMjAyMDAxMDcyMDA3MDNDMDY4MDAwMDEKKzoxMDAwQzAwMDM0RDkwMTAwOTMyODAwMTM5Nzg5MDAyRTM2QTYwMDAyMjgKKzoxMDAwRDAwMDMxMTgwMEZGMjcxNjAwMDQwMDE2MTlDMDNDMDQ4MDAwRTgKKzoxMDAwRTAwMDhDODUwMUI4MDRBMEZGRkUzNDg4MDE4MEFEMDMwMDAwQjgKKzoxMDAwRjAwMDNDMTU4MDA4QUM4MzAwMjA5NkJGMDA0ODMzRTVGRkZGMjUKKzoxMDAxMDAwMDEwQTAwMUVCQUY4NTAwMDgyNTIzMDAxMjAwQTMxMDJCREYKKzoxMDAxMTAwMDUwNDAwMUU4OEY4NTAwMDQzNDhEMDEwMDk1QUMwMDIwMkIKKzoxMDAxMjAwMDI0MEIwMDFBMzBFNDQwMDAzMThBRkZGRkExMEIwMDBCQzIKKzoxMDAxMzAwMDEwODAwMUU5MjU0M0ZGRkUwMEEzNzAyQjE1QzAwMUU3RTUKKzoxMDAxNDAwMDhGOTYwMDA0OEY4RjAwMDRBNTAzMDAxNDM1RTUwMDAxOEQKKzoxMDAxNTAwMEFGODUwMDA0M0MwODgwMDAzNTE1MDE4MEE2QTkwMDBFN0IKKzoxMDAxNjAwMEE2QTkwMDFBOEY4OTAwMEMzMEJGODAwMEE2QTcwMDEwMzYKKzoxMDAxNzAwMEFFQTkwMDI4QTZBNjAwMDgxM0UwMDAwRjNDMEY4MDAwREYKKzoxMDAxODAwMDM1MEMwMTAwOTU4QjAwMTYzMTZBRkZGQzI1NDQwMDA0RjQKKzoxMDAxOTAwMDAwODgxODIxOEM2MjQwMDAzMDQ2RkZGRjE0QzAwMDA3MjEKKzoxMDAxQTAwMDI0MTZCRkZGM0MwRUZGRkYzNUNEN0ZGRjAwQUQyODI0OTYKKzoxMDAxQjAwMEFGODUwMDA0M0MwRjgwMDAyNDE2QkZGRjAwQjY5MDI0REEKKzoxMDAxQzAwMDM1RTUwMTgwQTRCMjAwMjZBQ0E3MDAyQzNDMDcxMDAwNDYKKzoxMDAxRDAwMEFERTcwMUI4MEEwMDEzNzAwMDAwMTgyMTBFMDAxNjhFNUEKKzoxMDAxRTAwMDAwMDAwMDAwM0MwQjQwMDAzQzA2ODAwMEFDQ0IwMTc4RDYKKzoxMDAxRjAwMDBBMDAxMzA0MDAwMDAwMDA4Rjg1MDAyODEwQTAwMDI1Q0QKKzoxMDAyMDAwMEFGODAwMDEwOTBBMzAwMDAxMDYwMDA3MjI0MUYwMDAzNTQKKzoxMDAyMTAwMDEwN0YwMEZGMDAwMDMwMjE5MEFEMDAwMTI0MEMwMDAyOEYKKzoxMDAyMjAwMDExQUMwMTU5MzBFRTAwNDA5MEJGMDAwMTI0MTkwMDAxQ0IKKzoxMDAyMzAwMDEzRjkwMDA5MzBFOTAwNDA4Q0E2MDAwNDk3ODUwMDJFRDAKKzoxMDAyNDAwMDAwQzAyMDIxMEUwMDBGREIzNkE2MDAwMjAwMDA0MDIxNzYKKzoxMDAyNTAwMDBBMDAxMzcwMDEwMDE4MjE1MTIwRkZGODhDQTYwMDA0MzkKKzoxMDAyNjAwMDNDMDcwODAxOTBFNzk2RTExMEUwRkZGNDI0MDgwMDAxNDQKKzoxMDAyNzAwMDBBMDAxMzcwMDEwMDE4MjE5Mzk4MDAxMDAwMThDOEMwREMKKzoxMDAyODAwMDAzM0U0MDIxQUY4ODAwMjg4Rjg1MDAyODE0QTBGRkREQTEKKzoxMDAyOTAwMEFGOTgwMDEwM0MwNDgwMDA4Qzg2NDAwMDMwQzUwMTAwRkYKKzoxMDAyQTAwMDEwQTAwMDg3MzJBQTAwMDQzQzBCMDgwMDhENkIwMDI0Q0MKKzoxMDAyQjAwMDI0MTYwMDA0MTU0MDAwMDMzMTcyMDAwRDI0MTYwMDAyQkMKKzoxMDAyQzAwMDNDMDQ4MDAwOEM4RDQwMDAzNDBDRkZGRjExQUMwMTJDRUQKKzoxMDAyRDAwMDMyQjVGRkZCOEM4RjQwMDAzMUVFMDEwMDU1QzAwMDAxQUMKKzoxMDAyRTAwMDI0MTUwMDEwMzBGODA4MDAxMzAwMDAzODI0MUZGRkZCMEQKKzoxMDAyRjAwMDhGOTkwMDJDMkYyODAzRUY1MTAwMDAwMTAyNUY5MDI0RkEKKzoxMDAzMDAwMDMwRTkwMTAwMTEyMDAwMTQzMjU5MDAwMThGODcwMDMwQkMKKzoxMDAzMTAwMDE0RTAwMTI3OEY4QjAwMEMzQzA0ODAwMDM0ODYwMTAwMjAKKzoxMDAzMjAwMDkwQzUwMDEzMzBBMzAwRkYyNDYyMDAwNDAwMDIyMUMwMjYKKzoxMDAzMzAwMDI0MDhGRkZFMDI0ODkwMjQxMjQwMDAwMjAyQjYzMDI1MzUKKzoxMDAzNDAwMDMyQTZGRkZGMEUwMDBGREI5Nzg1MDAyRTEyNDBGRUEzQTIKKzoxMDAzNTAwMDAwMDAxODIxMzI1OTAwMDExMzIwMDAwRDMyNDcwMDA0MUIKKzoxMDAzNjAwMDI0MUYwMDAxMTI1RjAwMDIwMkI2MzAyNTMyQTZGRkZGRjMKKzoxMDAzNzAwMDk3ODUwMDJFMEUwMDBGREIwMDAwMjAyMTI0MDlGRkZFRDAKKzoxMDAzODAwMDAyNDk5MDI0MTI0MEZFOTUwMDAwMTgyMTMyNDcwMDA0RDMKKzoxMDAzOTAwMDUwRTBGRTkyMjQwMzAwMDEwMkI2MzAyNTI0MTYwMDA0MkEKKzoxMDAzQTAwMDU2NTYwMDAxMzJBNkZGRkY5Nzg1MDAyRTBFMDAwRkRCODgKKzoxMDAzQjAwMDI0MDQwMTAwMjQwMkZGRkIwMjQyQTgyNDEyQTBGRTg3QUQKKzoxMDAzQzAwMDAwMDAxODIxMEEwMDEzNzAyNDAzMDAwMTBBMDAxNEI5NjgKKzoxMDAzRDAwMDAyNUY5MDI0MTBBMEZGQUYzMEU1MDEwMDEwQTAwMDE3Q0QKKzoxMDAzRTAwMDhGODYwMDEwMjQwMjAwMDIxMEMyMDAxNDhGODQwMDBDQkIKKzoxMDAzRjAwMDNDMDYwODAwOENDNjAwMzgyNEMzRkZGRjE0QzAwMDAyNkUKKzoxMDA0MDAwMDAwODMxMDI0MDAwMDEwMjEzQzBEMDgwMDI1QUQwMDM4QTkKKzoxMDA0MTAwMDAwNEQ2MDIxOTE4QjAwMDQ4Rjg1MDAyQzI1NkEwMDA0MUIKKzoxMDA0MjAwMDAwMEEyMUMwMzBBNUZGRkYzNkE2MDAwMjBFMDAwRkRCMzgKKzoxMDA0MzAwMDAwMDAwMDAwMEEwMDEzNzAwMDAwMTgyMTI0MEUwMDAyQzIKKzoxMDA0NDAwMDEwQ0UwMDg4MjQxMjAwMDEzQzAzMDgwMDhDNjMwMEQwMDkKKzoxMDA0NTAwMDEwNzIwMDhEOEY4NTAwMkMyNEM4RkZGQzJEMTgwMDA0MUQKKzoxMDA0NjAwMDE3MDAwMDYzMDAwMDIwMjEyNDE5MDAwMjEwNzkwMDVEQUMKKzoxMDA0NzAwMDJDREYwMDBDMjRDMkZGRjgyQzQ5MDAwNDE1MjBGRkU5RjIKKzoxMDA0ODAwMDAwMDAyMDIxMzBFMzAyMDA1MDYwMDAwNDAwMDYyMUMwN0IKKzoxMDA0OTAwMDU0QzAwMDA1MzBBNUZGRkYwMDA2MjFDMDMwQTVGRkZGQjYKKzoxMDA0QTAwMDBBMDAxNTA0MzZBNjAwMDIwRTAwMEZEQjMyQTYwMDAxN0EKKzoxMDA0QjAwMDhGODYwMDEwOEY4NTAwMkMwQTAwMTUyMDAwMDYyMUMwQjEKKzoxMDA0QzAwMDNDMDMwODAwOEM2MzAwMjQzMDcyMDAwMTUyNDBGRTQzNUMKKzoxMDA0RDAwMDAwMDAxODIxOTc4NTAwMkUzNkE2MDAwMjBFMDAwRkRCQzMKKzoxMDA0RTAwMDAwMDAyMDIxMEEwMDEzNzAwMDAwMTgyMTk2NjgwMDBDRkIKKzoxMDA0RjAwMDMxMTgwMjAwNTcwMEZFMzEzQzA1MDAwMTNDMUY4MDA4MDYKKzoxMDA1MDAwMDk3RjkwMDQ4OTc4OTAwMkUzNkE2MDAwMjMzMjhGRkZGOEUKKzoxMDA1MTAwMEFGODgwMDA4M0MwMzgwMDA4Qzc1MDFCODA2QTBGRkZFODAKKzoxMDA1MjAwMDNDMDQ4MDAwMzQ4MjAxODBBQzQwMDAwMDExMDAwMEU3RjAKKzoxMDA1MzAwMDI0MTgwMDAzMjUyQTAwMTIwMTBBMTgyQjEwNjAwMEUzN0EKKzoxMDA1NDAwMDAwMDAwMDAwOTY2RjAwMjAzQzBFODAwMDI0MEQwMDFBNzEKKzoxMDA1NTAwMDMxRUNGRkZGMzVDQTAxODAzMEVCNDAwMEExNEQwMDBCQUMKKzoxMDA1NjAwMDExNjAwMEUxMjU4M0ZGRkUwMTAzOTAyQjE2NDAwMERGQTAKKzoxMDA1NzAwMDI0MTZGRkZFMzRBNTAwMDFBNTQzMDAxNEFGODUwMDA0MzYKKzoxMDA1ODAwMDI0MTlCRkZGMDBCOTQwMjRBNkU5MDAwRUE2RTkwMDFBMEQKKzoxMDA1OTAwMEE2RTYwMDA4QTZFODAwMjZBNkU3MDAxMDNDMDcxMDAwMjMKKzoxMDA1QTAwMEFFODcwMUI4MEEwMDEzNzAwMDAwMTgyMTNDMDQ4MDAwRDcKKzoxMDA1QjAwMDhDODkwMUI4MDUyMEZGRkUzNDk2MDE4MDI0MTUwMDFDQUIKKzoxMDA1QzAwMEFFQzcwMDAwQTJENTAwMEIzQzA3MTAwMEFDODcwMUI4RjUKKzoxMDA1RDAwMDNDMEI0MDAwM0MwNjgwMDBBQ0NCMDE3ODBBMDAxMzA0QzEKKzoxMDA1RTAwMDAwMDAwMDAwMTNFMEZGQTQyNEMyRkZGODAwMDAyMDIxNTcKKzoxMDA1RjAwMDMwQTVGRkZGMEEwMDE1MDQzNkE2MDAwMjBFMDAxMDNEQ0MKKzoxMDA2MDAwMDAwMDAwMDAwOEY4NzAwMDAwQTAwMTM0NkFGODIwMDBDMzQKKzoxMDA2MTAwMDkwQTMwMDAxMjQxNTAwMDExMDc1RkYwRDI0MDgwMDAxQUUKKzoxMDA2MjAwMDI0MDkwMDAyMTA2OTAwMDQzMEU2MDA0MDI0MDgwMDAxOUIKKzoxMDA2MzAwMDBBMDAxMzcwMDEwMDE4MjE1MEMwRkZGRDI0MDgwMDAxQkEKKzoxMDA2NDAwMDNDMEI4MDAwMzU2QTAxMDA5NTQzMDAxMDk0QTQwMDAyMjEKKzoxMDA2NTAwMDMwNjJGRkZGNTA4MkZERTEwMTAwMTgyMTBBMDAxNTg1N0MKKzoxMDA2NjAwMDI0MDgwMDAxOEY4NTAwMkMyQ0FGMDNFRjExRTBGRERCODcKKzoxMDA2NzAwMDI0MDMwMDAxM0MwMzA4MDA4QzYzMDBEMDI0MTIwMDAxMTUKKzoxMDA2ODAwMDE0NzJGRjc2MjRDOEZGRkMyQ0Q2MDAwQzEyQzBGRjcyMzcKKzoxMDA2OTAwMDAwMDYyMUMwMzBBNUZGRkYwQTAwMTUwNDM2QTYwMDAyOUYKKzoxMDA2QTAwMDEwQUYwMDU3MDAwNDNBMDIyNDA2MDAwQjE0QTZGRTI0RTMKKzoxMDA2QjAwMDAwMEE0MUMwMzE2NjAwRkYwMDA2RkUwMDAwMUY1RTAzMTUKKzoxMDA2QzAwMDA1NjIwMDcyMzBDNjAwN0YwMDA2NjhDMDAxQkUzODIxOTYKKzoxMDA2RDAwMEEwRTAwMDAxQTBFMDAwMDAzQzE2NjAwMDhFRDIxODIwQ0YKKzoxMDA2RTAwMDI0MEMwMDAxMDBDQzEwMDQwMDAyMTgyNzAwMEE0MUMwQUQKKzoxMDA2RjAwMDAyNDNBODI0QTRFMDAwMDIwMTAwMzgyMUFFRDUxODIwNEUKKzoxMDA3MDAwMDBBMDAxM0NCM0MwNjgwMDAxNEMwMDAzNjhGOEQwMDIwRjkKKzoxMDA3MTAwMDAwMEE0MUMwM0MxRjgwMDAzQzA1ODAwOEFGRTgwMDIwNzMKKzoxMDA3MjAwMDk0QjkwMDQwMTMyMDAwMDIyNDA1MDAwMTI0MDUwMDQxNzMKKzoxMDA3MzAwMDNDMDQ4MDAwOEM4NzAxQjgwNEUwRkZGRTM0OTUwMTgwMDIKKzoxMDA3NDAwMDI0MDIwMDAzQUVBODAwMDBBMkEyMDAwQkE2QTAwMDBFODcKKzoxMDA3NTAwMEE2QTAwMDFBQTZBMDAwMTBBRUEwMDAyOEE2QTUwMDA4MUEKKzoxMDA3NjAwMDk2QTMwMDI2MzQ3MjAwMDFBNkIyMDAyNkFFQTAwMDJDOEIKKzoxMDA3NzAwMDNDMTYxMDAwQUM5NjAxQjgwQTAwMTNDQTAxMDAzODIxREIKKzoxMDA3ODAwMDBBMDAxNEIyMjQxNTAwMjAxMUMwRkVCNTNDMDg4MDAwRjgKKzoxMDA3OTAwMDM1MTgwMTAwOTcxNjAwMTA5NEIyMDAwMjMyQ0YwRkZGRjcKKzoxMDA3QTAwMDE2NEZGRUFGMDAwMDAwMDAwQTAwMTQ4NDkwQkYwMDAxNDUKKzoxMDA3QjAwMDNDMEEwODAwOEQ0QTAwMzgyNTRDRkZGRjE1NDAwMDAyMTYKKzoxMDA3QzAwMDAxNkMxMDI0MDAwMDEwMjEzQzE4MDgwMDI3MTgwMDM4ODQKKzoxMDA3RDAwMDAwNTg3ODIxOTFFRTAwMDQyNUNEMDAwNDBBMDAxNEM1Q0MKKzoxMDA3RTAwMDAwMEQyMUMwMDAwQTQxQzAyNUFDRkZGRjE1ODBGREQ0REIKKzoxMDA3RjAwMEFGOEMwMDIwMDEwMDM4MjEwQTAwMTNDQUFGODAwMDI0MEEKKzoxMDA4MDAwMDI0MDMwMEZGMTBFM0ZEQ0UwMDBBNDFDMDEwQzAwMDE3MTIKKzoxMDA4MTAwMDAwMDc4NjAwMDAwNzIwQzAwMDlFMTgyMTI0MDIwMDAxNjYKKzoxMDA4MjAwMDNDMDUwODAxMjRBNTk2RTQwMDlFNzgyMTAwMEE0MUMwRjkKKzoxMDA4MzAwMDAwODVDODIxMDAwQjhDMDJBMDYyMDAwMEFGMjgwMDAwRDgKKzoxMDA4NDAwMEExRjEwMDAxM0MwRTYwMDA4REM2MTgyMDI0MTgwMDAxQTMKKzoxMDA4NTAwMDAwRjg1MDA0MDBDQTIwMjUwMTAwMzgyMUE1RUIwMDAyNTEKKzoxMDA4NjAwMEFEQzQxODIwMEEwMDEzQ0IzQzA2ODAwMDAwMTA0NjAzREMKKzoxMDA4NzAwMDA1MDIwMDBEMzBFNzAwN0YxMTQzMDAwNjAwMDcyMEMwOEQKKzoxMDA4ODAwMDAwOUUxODIxMEEwMDE2MDEyNDAyMDAwMjBBMDAxNUFCN0UKKzoxMDA4OTAwMEFGODAwMDIwMDA5RTE4MjEwQTAwMTYwMTI0MDIwMDAzRTgKKzoxMDA4QTAwMDBBMDAxMkZGQUY4NDAwMzAwQTAwMTYxN0FGODcwMDIwM0QKKzoxMDA4QjAwMDhGODUwMDA0M0MxOTgwMDAyNDA4MDAwMzM3MzgwMTgwMkMKKzoxMDA4QzAwMEEzMDgwMDBCMEEwMDE0NEYzQzA4ODAwMEEyRjgwMDBCOUMKKzoxMDA4RDAwMDBBMDAxNTVBMjQxOUJGRkY4Rjk2MDAwNDI0MTJGRkZFNDgKKzoxMDA4RTAwMDBBMDAxNDREMDJEMjI4MjQyNDE2RkZGRTBBMDAxNTU4Q0YKKzoxMDA4RjAwMDAwQjYyODI0M0MwMzgwMDAzNDY0MDEwMDhDODUwMDAwOEQKKzoxMDA5MDAwMDMwQTIwMDNFMTQ0MDAwMDgwMDAwMDAwMEFDNjAwMDQ4MjcKKzoxMDA5MTAwMDhDODcwMDAwMzBFNjA3QzAxMEMwMDAwNTAwMDAwMDAwMTIKKzoxMDA5MjAwMEFDNjAwMDRDQUM2MDAwNTAwM0UwMDAwODI0MDIwMDAxMDEKKzoxMDA5MzAwMEFDNjAwMDU0QUM2MDAwNDA4Qzg4MDAwMDMxMDQzODAwOEEKKzoxMDA5NDAwMDEwODBGRkY5MDAwMDAwMDAyNDAyMDAwMTAzRTAwMDA4MEQKKzoxMDA5NTAwMEFDNjAwMDQ0M0MwMzgwMDA4QzYyMDFCODA0NDBGRkZFQTAKKzoxMDA5NjAwMDM0NjcwMTgwQUNFNDAwMDAyNDA4MDAwMUFDRTAwMDA0MUUKKzoxMDA5NzAwMEE0RTUwMDA4MjQwNTAwMDJBMEU4MDAwQTM0NjQwMTQwNTAKKzoxMDA5ODAwMEEwRTUwMDBCOTQ4MzAwMEExNEMwMDAwOEE0RTMwMDEwNDMKKzoxMDA5OTAwMEFDRTAwMDI0M0MwNzgwMDAzNEU5MDE4MDNDMDQxMDAwRjYKKzoxMDA5QTAwMEFEMjAwMDI4MDNFMDAwMDhBQ0U0MDFCODhDODYwMDA0MDgKKzoxMDA5QjAwMDNDMDQxMDAwQUNFNjAwMjQzQzA3ODAwMDM0RTkwMTgwRDAKKzoxMDA5QzAwMEFEMjAwMDI4MDNFMDAwMDhBQ0U0MDFCODNDMDY4MDAwM0MKKzoxMDA5RDAwMDhDQzIwMUI4MDQ0MEZGRkUzNEM3MDE4MDI0MDkwMDAyMjQKKzoxMDA5RTAwMEFDRTQwMDAwQUNFNDAwMDRBNEU1MDAwOEEwRTkwMDBBQkYKKzoxMDA5RjAwMDM0QzUwMTQwQTBFOTAwMEI5NEE4MDAwQTNDMDQxMDAwOTMKKzoxMDBBMDAwMEE0RTgwMDEwQUNFMDAwMjQ4Q0EzMDAwNEFDRTMwMDI4QjAKKzoxMDBBMTAwMDAzRTAwMDA4QUNDNDAxQjgzQzAzOTAwMDM0NjIwMDAxNUMKKzoxMDBBMjAwMDAwODIyMDI1M0MwMzgwMDBBQzY0MDAyMDhDNjUwMDIwRkYKKzoxMDBBMzAwMDA0QTBGRkZFMDAwMDAwMDAwM0UwMDAwODAwMDAwMDAwMkEKKzoxMDBBNDAwMDNDMDI4MDAwMzQ0MzAwMDEwMDgzMjAyNTAzRTAwMDA4QkQKKzoxMDBBNTAwMEFDNDQwMDIwMjdCREZGRTAzQzA5ODAwMEFGQkYwMDE4NzgKKzoxMDBBNjAwMEFGQjEwMDE0QUZCMDAwMTAzNTI4MDE0MDhEMTAwMDAwNjgKKzoxMDBBNzAwMDkxMDQwMDA5OTEwNzAwMDg5MTA1MDAwODMwODQwMEZGRTcKKzoxMDBBODAwMDMwRTYwMEZGMDAwNjFBMDAyQzgyMDA4MTAwODMzMDI1MkEKKzoxMDBBOTAwMDEwNDAwMDJBMzBBNTAwODAwMDA0NjA4MDNDMEQwODAxNTEKKzoxMDBBQTAwMDI1QUQ5MzUwMDE4RDU4MjE4RDZBMDAwMDAxNDAwMDA4NEEKKzoxMDBBQjAwMDAwMDAwMDAwM0MwMzgwMDAzNDYyMDE0MDk0NDUwMDBBQkQKKzoxMDBBQzAwMDE0QTAwMDFFOEY5MUZDQzA5MjI3MDAwNTMwRTYwMDA0QTAKKzoxMDBBRDAwMDE0QzAwMDFBMDAwMDAwMDAwRTAwMTY3RjAyMDAyMDIxNDIKKzoxMDBBRTAwMDkyMkEwMDA1MDIwMDIwMjEzNTQ5MDAwNDBFMDAxNjg5RDMKKzoxMDBBRjAwMEEyMjkwMDA1OTIyODAwMDUzMTA0MDAwNDE0ODAwMDAyOTgKKzoxMDBCMDAwMDAwMDAwMDAwMDAwMDAwMEQ5MjJEMDAwMDI0MEIwMDIwQ0EKKzoxMDBCMTAwMDMxQUMwMEZGMTU4QjAwMDkzQzA1ODAwMDhDQUUwMUI4OUMKKzoxMDBCMjAwMDA1QzBGRkZFMzRCMTAxODBBRTMwMDAwMDNDMEYxMDAwNjQKKzoxMDBCMzAwMDI0MTAwMDA1QTIzMDAwMEJBQ0FGMDFCODAwMDAwMDBEN0UKKzoxMDBCNDAwMDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4QjEKKzoxMDBCNTAwMDI3QkQwMDIwMDIwMDIwMjEwMEMwMjgyMThGQkYwMDE4REYKKzoxMDBCNjAwMDhGQjEwMDE0OEZCMDAwMTAyNDA2MDAwMTBBMDAxNjRFNDkKKzoxMDBCNzAwMDI3QkQwMDIwMDAwMDAwMEQwMjAwMjAyMTAwQzAyODIxMTgKKzoxMDBCODAwMDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDAwMDAzMDIxMEIKKzoxMDBCOTAwMDBBMDAxNjRFMjdCRDAwMjAxNEEwRkZFODAwMDAwMDAwNDgKKzoxMDBCQTAwMDAyMDAyMDIxOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwRjkKKzoxMDBCQjAwMDAwQzAyODIxMEEwMDE2NkMyN0JEMDAyMDNDMDc4MDAwRDkKKzoxMDBCQzAwMDhDRUUwMUI4MDVDMEZGRkUzNEYwMDE4MDI0MUYwMDAyNDYKKzoxMDBCRDAwMEEyMUYwMDBCMzRGODAxNDBBNjA2MDAwODk3MTkwMDBBNkUKKzoxMDBCRTAwMDNDMEYxMDAwQTYxOTAwMTA4RjExMDAwNEE2MTEwMDEyNkUKKzoxMDBCRjAwMEFDRUYwMUI4MEEwMDE2Q0E4RkJGMDAxODI3QkRGRkU4ODYKKzoxMDBDMDAwMEFGQkYwMDEwMEUwMDBGRDQwMDAwMDAwMDNDMDI4MDAwQjcKKzoxMDBDMTAwMDhGQkYwMDEwMDAwMDIwMjFBQzQwMDE4MDBBMDAxMDhGMUYKKzoxMDBDMjAwMDI3QkQwMDE4MzA4NEZGRkYzMEE1RkZGRjEwODAwMDA3QUMKKzoxMDBDMzAwMDAwMDAxODIxMzA4MjAwMDExMDQwMDAwMjAwMDQyMDQyMTAKKzoxMDBDNDAwMDAwNjUxODIxMTQ4MEZGRkIwMDA1Mjg0MDAzRTAwMDA4MjAKKzoxMDBDNTAwMDAwNjAxMDIxMTBDMDAwMDcwMDAwMDAwMDhDQTIwMDAwRkUKKzoxMDBDNjAwMDI0QzZGRkZGMjRBNTAwMDRBQzgyMDAwMDE0QzBGRkZCRDMKKzoxMDBDNzAwMDI0ODQwMDA0MDNFMDAwMDgwMDAwMDAwMDEwQTAwMDA4MjUKKzoxMDBDODAwMDI0QTNGRkZGQUM4NjAwMDAwMDAwMDAwMDAwMDAwMDAwNkQKKzoxMDBDOTAwMDI0MDJGRkZGMjQ2M0ZGRkYxNDYyRkZGQTI0ODQwMDA0OTAKKzoxMDBDQTAwMDAzRTAwMDA4MDAwMDAwMDAzQzAzODAwMDI3QkRGRkY4QkYKKzoxMDBDQjAwMDM0NjIwMTgwQUZBMjAwMDAzMDhDMDBGRjMwQUQwMEZGMzUKKzoxMDBDQzAwMDMwQ0UwMEZGM0MwQjgwMDA4RDY0MDFCODA0ODBGRkZFMzUKKzoxMDBDRDAwMDAwMDAwMDAwOEZBOTAwMDA4RDY4MDEyODhGQUEwMDAwODUKKzoxMDBDRTAwMDhGQTcwMDAwOEZBNDAwMDAyNDA1MDAwMTI0MDIwMDAyNDkKKzoxMDBDRjAwMEEwODUwMDBBOEZBMzAwMDAzNTk5NDAwMDNDMDUxMDAwMzQKKzoxMDBEMDAwMEEwNjIwMDBCOEZCODAwMDA4RkFDMDAwMDhGQTYwMDAwMUYKKzoxMDBEMTAwMDhGQUYwMDAwMjdCRDAwMDhBRDI4MDAwMEFENDAwMDA0RTMKKzoxMDBEMjAwMEFEODAwMDI0QUNDMDAwMjhBNEY5MDAwOEE3MEQwMDEwNzUKKzoxMDBEMzAwMEE1RUUwMDEyMDNFMDAwMDhBRDY1MDFCODNDMDY4MDA4OEUKKzoxMDBENDAwMDI3QkRGRkU4MzRDNTAwODBBRkJGMDAxMDkwQTcwMDA5QTEKKzoxMDBENTAwMDI0MDIwMDEyMzBFMzAwRkYxMDYyMDAwQjAwODAzMDIxRkIKKzoxMDBENjAwMDhDQTgwMDUwMDA4ODIwMjMwNDgwMDAwODhGQkYwMDEwNEEKKzoxMDBENzAwMDhDQUEwMDM0MjQwNDAwMzkwMDAwMjgyMTAwQ0E0ODIzMkEKKzoxMDBEODAwMDA1MjAwMDA1MjQwNjAwMTI4RkJGMDAxMDI0MDIwMDAxNzgKKzoxMDBEOTAwMDAzRTAwMDA4MjdCRDAwMTgwRTAwMTcyMzAwMDAwMDAwMjQKKzoxMDBEQTAwMDhGQkYwMDEwMjQwMjAwMDEwM0UwMDAwODI3QkQwMDE4RDcKKzoxMDBEQjAwMDI3QkRGRkM4QUZCMjAwMzBBRkIwMDAyOEFGQkYwMDM0Q0UKKzoxMDBEQzAwMEFGQjEwMDJDMDBBMDgwMjE5MEE1MDAwRDMwQTYwMDEwMkUKKzoxMDBERDAwMDEwQzAwMDEwMDA4MDkwMjEzQzAyODAwODhDNDQwMDA0NjgKKzoxMDBERTAwMDhFMDMwMDA4MTA2NDAwMEMzMEE3MDAwNTMwQTYwMDA1MzMKKzoxMDBERjAwMDEwQzAwMDkzMjQwNDAwMDE4RkJGMDAzNDhGQjIwMDMwNzQKKzoxMDBFMDAwMDhGQjEwMDJDOEZCMDAwMjgwMDgwMTAyMTAzRTAwMDA4NzMKKzoxMDBFMTAwMDI3QkQwMDM4MzBBNzAwMDUxMEUwMDAwRjMwQUIwMDEyRUUKKzoxMDBFMjAwMDEwQzAwMDA2MjQwNDAwMDEzQzA5ODAwODhFMDgwMDA4NTgKKzoxMDBFMzAwMDhEMjUwMDA0NTEwNTAwOUMyNDA0MDAzODhGQkYwMDM0MjgKKzoxMDBFNDAwMDhGQjIwMDMwOEZCMTAwMkM4RkIwMDAyODAwODAxMDIxQUQKKzoxMDBFNTAwMDAzRTAwMDA4MjdCRDAwMzgyNDBBMDAxMjE1NkFGRkU2RTcKKzoxMDBFNjAwMDI0MDQwMDAxMDIwMDIwMjEyN0E1MDAxMDBFMDAwQ0I2NkEKKzoxMDBFNzAwMEFGQTAwMDEwMTQ0MDAwN0MzQzE5ODAwODM3MjQwMDgwOEIKKzoxMDBFODAwMDkwOTgwMDA4MzMxMTAwMDgxMjIwMDAwQThGQTcwMDEwNjQKKzoxMDBFOTAwMDMwRkYwMTAwMTNFMDAwQTQ4RkEzMDAxNDhDODYwMDU4REIKKzoxMDBFQTAwMDAwNjYxMDIzMDQ0MDAwMDQzQzBBODAwOEFDODMwMDU4MEMKKzoxMDBFQjAwMDhGQTcwMDEwM0MwQTgwMDgzNTQ4MDA4MDkxMDkwMDA4N0YKKzoxMDBFQzAwMDMxMjQwMDA4MTQ4MDAwMDIyNDA4MDAwMzAwMDA0MDIxOUYKKzoxMDBFRDAwMDNDMUY4MDA4OTNGMTAwMTE5M0Y5MDAxMjM3RTYwMDgwNUYKKzoxMDBFRTAwMDhDQ0MwMDU0MzMzODAwRkYwMzA4NzgyMTMyMkQwMEZGRUEKKzoxMDBFRjAwMDAwMEY3MDgwMDFBRTI4MjEwMEFDNTgyQjExNjAwMDZGRUMKKzoxMDBGMDAwMDAwMDAwMDAwOTRDQTAwNUM4Q0M5MDA1NDMxNDRGRkZGMEIKKzoxMDBGMTAwMDAxMjUxMDIzMDA4MjE4MkIxNDYwMDA2ODAwMDAwMDAwRDcKKzoxMDBGMjAwMDhDQ0IwMDU0MDE2NTE4MjMzMEVDMDAwNDExODAwMDZDNTgKKzoxMDBGMzAwMDAwMDgzMDgwOEZBODAwMUMwMDY4MTAyQjEwNDAwMDYyNTEKKzoxMDBGNDAwMDMwRUQwMDA0MDA2NjEwMjMyQzQ2MDA4MDEwQzAwMDAyMjMKKzoxMDBGNTAwMDAwNDA4ODIxMjQxMTAwODAwRTAwMTY3RjAyNDAyMDIxQ0QKKzoxMDBGNjAwMDNDMEQ4MDA4MzVBNjAwODAyNDA3MDAwMUFDQzcwMDBDQUEKKzoxMDBGNzAwMDkwQzgwMDA4MDAxMTQ4NDAzNUE3MDEwMDMxMEMwMDdGREYKKzoxMDBGODAwMEEwQ0MwMDA4OEUwNTAwMDQyNEFCMDAwMUFDQ0IwMDMwREYKKzoxMDBGOTAwMEE0RDEwMDVDOENDQTAwM0M5NjAyMDAwRTAxNDIyMDIxQzQKKzoxMDBGQTAwMEFDQzQwMDIwOENDMzAwM0MwMDY5RjgyMUFDREYwMDFDRkQKKzoxMDBGQjAwMDhFMTkwMDA0QUNGOTAwMDA4RTE4MDAwOEFDRjgwMDA0OEIKKzoxMDBGQzAwMDhGQjEwMDEwMzIyRjAwMDg1NUUwMDA0NzkzQTYwMDIwOTMKKzoxMDBGRDAwMEEwQzAwMDRFOTBEODAwNEUyNDExRkZERkEwRjgwMDA4RkEKKzoxMDBGRTAwMDkwQ0YwMDA4MDFGMTcwMjRBMENFMDAwODhFMDUwMDA4MDMKKzoxMDBGRjAwMDNDMEI4MDA4MzU2OTAwODBBRDI1MDAzODhENkEwMDE0RUYKKzoxMDEwMDAwMDhEMjIwMDMwMjQxOTAwNTAwMTQyMjAyMUFEMjQwMDM0RUIKKzoxMDEwMTAwMDkxMjMwMDAwMzA3RjAwRkYxM0Y5MDAzNjI2NEYwMTAwQjYKKzoxMDEwMjAwMDBFMDAxNjg5MDI0MDIwMjEyNDA0MDAzODAwMDAyODIxRTcKKzoxMDEwMzAwMDBFMDAxNzIzMjQwNjAwMEEwQTAwMTc4ODI0MDQwMDAxNjIKKzoxMDEwNDAwMDBFMDAwRDI4MDAwMDIwMjE4RkJGMDAzNDhGQjIwMDMwMjkKKzoxMDEwNTAwMDhGQjEwMDJDOEZCMDAwMjgwMDQwMjAyMTAwODAxMDIxOEIKKzoxMDEwNjAwMDAzRTAwMDA4MjdCRDAwMzg4RTBFMDAwODNDMEY4MDA4MDIKKzoxMDEwNzAwMDM1RjAwMDgwQUUwRTAwNTQwMjQwMjAyMUFFMDAwMDMwNUEKKzoxMDEwODAwMDBFMDAxNjdGMDAwMDAwMDA5MjBEMDAyNTAyNDAyMDIxNzYKKzoxMDEwOTAwMDM1QUMwMDIwMEUwMDE2ODlBMjBDMDAyNTBFMDAwQ0FDMDkKKzoxMDEwQTAwMDAyNDAyMDIxMjQwNDAwMzgyNDA1MDA4RDBFMDAxNzIzNUYKKzoxMDEwQjAwMDI0MDYwMDEyMEEwMDE3ODgyNDA0MDAwMTk0QzUwMDVDNkQKKzoxMDEwQzAwMDBBMDAxN0MzMzBBM0ZGRkYyNDA3MDIxODExQTBGRjlFRDgKKzoxMDEwRDAwMDAwRTYxMDIzOEZBRTAwMUMwQTAwMTdDQjAxQzYxMDIzQjgKKzoxMDEwRTAwMDBBMDAxN0M4MkM2MjAyMThBMEU2MDAwODBBMDAxN0Y1Q0IKKzoxMDEwRjAwMDhFMDUwMDA4MjQwNkZGODAwMUU2QzAyNDNDMTE4MDAwMTQKKzoxMDExMDAwMEFFMzgwMDI4OEUwRDAwMDgzMUU3MDA3RjNDMEU4MDBDQzEKKzoxMDExMTAwMDAwRUU2MDIxQUQ4RDAwRTA4RTA4MDAwOEFGOEMwMDNDMzEKKzoxMDExMjAwMDBBMDAxODAxQUQ4ODAwRTRBQzgwMDA1ODkwODUwMDA4RTIKKzoxMDExMzAwMDI0MDNGRkY3MDBBMzM4MjRBMDg3MDAwODBBMDAxN0E2OUQKKzoxMDExNDAwMDhGQTcwMDEwM0MwNTA4MDAyNEE1NjE2QzNDMDQwODAwMzIKKzoxMDExNTAwMDI0ODQ3MEI4M0MwMjA4MDAyNDQyNjE3NDI0MDMwMDA2MTEKKzoxMDExNjAwMDNDMDEwODAxQUMyNTk3NjAzQzAxMDgwMUFDMjQ5NzY0NjAKKzoxMDExNzAwMDNDMDEwODAxQUMyMjk3NjgzQzAxMDgwMUEwMjM5NzZDNTAKKzoxMDExODAwMDAzRTAwMDA4MDAwMDAwMDAwM0UwMDAwODI0MDIwMDAxNjIKKzoxMDExOTAwMDNDMDI4MDAwMzA4ODAwRkYzNDQ3MDE4MDNDMDY4MDAwMUMKKzoxMDExQTAwMDhDQzMwMUI4MDQ2MEZGRkUwMDAwMDAwMDhDQzUwMTI4NUMKKzoxMDExQjAwMDI0MThGRjgwM0MwRDgwMEEyNEFGMDEwMDAxRjg3MDI0NDAKKzoxMDExQzAwMDMxRUMwMDdGQUNDRTAwMjQwMThEMjAyMUFDRTUwMDAwODUKKzoxMDExRDAwMDk0OEIwMEVBMzUwOTYwMDAyNDA4MDAwMjMxNkFGRkZGQTEKKzoxMDExRTAwMEFDRUEwMDA0MjQwMjAwMDFBNEU5MDAwOEEwRTgwMDBCMTYKKzoxMDExRjAwMEFDRTAwMDI0M0MwNzEwMDBBQ0M3MDFCOEFGODQwMDNDNTEKKzoxMDEyMDAwMDAzRTAwMDA4QUY4NTAwNzA5Mzg4MDA0QzhGODkwMDY0NkMKKzoxMDEyMTAwMDhGODIwMDNDMzBDNjAwRkYwMTA5MzgyMzMwRTkwMEZGMEYKKzoxMDEyMjAwMDAxMjIxODIxMzBBNTAwRkYyNDY4MDA4ODEwQzAwMDAyQTgKKzoxMDEyMzAwMDAxMjQzODIxMDA4MDM4MjEzMEU0MDAwMzE0ODAwMDAzQTkKKzoxMDEyNDAwMDMwQUEwMDAzMTE0MDAwMEQzMTJCMDAwMzEwQTAwMDA5NEIKKzoxMDEyNTAwMDAwMDAxMDIxOTBFRDAwMDAyNDRFMDAwMTMxQzIwMEZGN0IKKzoxMDEyNjAwMDAwNDU2MDJCQTEwRDAwMDAyNEU3MDAwMTE1ODBGRkY5NjcKKzoxMDEyNzAwMDI1MDgwMDAxMDNFMDAwMDgwMDAwMDAwMDE1NjBGRkYzRUUKKzoxMDEyODAwMDAwMDAwMDAwMTBBMEZGRkIwMDAwMTAyMThDRjgwMDAwRkYKKzoxMDEyOTAwMDI0NTkwMDA0MzMyMjAwRkYwMDQ1NzgyQkFEMTgwMDAwQ0MKKzoxMDEyQTAwMDI0RTcwMDA0MTVFMEZGRjkyNTA4MDAwNDAzRTAwMDA4MjYKKzoxMDEyQjAwMDAwMDAwMDAwOTM4NTAwNEM5Mzg4MDA1QzhGODcwMDY0RDkKKzoxMDEyQzAwMDAwMDQzMjAwMzEwMzAwN0YwMEU1MTAyQjMwQzQ3RjAwQTIKKzoxMDEyRDAwMDEwNDAwMDBGMDA2NDI4MjU4Rjg0MDAzQzNDMDk4MDAwRUEKKzoxMDEyRTAwMDhDOEEwMEVDQUQyQTAwQTQzQzAzODAwMDAwQTM1ODI1QTIKKzoxMDEyRjAwMEFDNkIwMEEwOEM2QzAwQTAwNTgwRkZGRTAwMDAwMDAwMUQKKzoxMDEzMDAwMDhDNkQwMEFDQUM4RDAwRUMwM0UwMDAwODhDNjIwMEE4OTIKKzoxMDEzMTAwMDBBMDAxOEIzOEY4NDAwM0M5Mzg4MDA1RDNDMDI4MDAwNzMKKzoxMDEzMjAwMDAwODA1MDIxMzEwMzAwRkVBMzgzMDA1RDMwQUJGRkZGM0UKKzoxMDEzMzAwMDMwQ0MwMEZGMzBFN0ZGRkYzNDQ4MDE4MDNDMDk4MDAwREIKKzoxMDEzNDAwMDhEMjQwMUI4MDQ4MEZGRkU4RjhEMDA3MDI0MTgwMDE2RDQKKzoxMDEzNTAwMEFEMEQwMDAwOEQyMjAxMjQ4RjhEMDAzQ0FEMDIwMDA0RjQKKzoxMDEzNjAwMDhENTkwMDIwQTUwNzAwMDgyNDAyMDFDNEExMTkwMDBBMTQKKzoxMDEzNzAwMEExMTgwMDBCOTUyRjAxMjA4RDRFMDAwODhENDcwMDA0MDkKKzoxMDEzODAwMDk3ODMwMDYwOEQ1OTAwMjQwMUNGMzAyMTAwQzcyODIxQTgKKzoxMDEzOTAwMDAwQTMyMDIzMjQxOEZGRkZBNTA0MDAwQ0E1MEIwMDBFQkEKKzoxMDEzQTAwMEE1MDIwMDEwQTUwQzAwMTJBRDE5MDAxOEFEMTgwMDI0RkMKKzoxMDEzQjAwMDk1QUYwMEU4M0MwQjEwMDAyNDA3RkZGNzMxRUVGRkZGNkMKKzoxMDEzQzAwMEFEMEUwMDI4OERBQzAwODRBRDBDMDAyQ0FEMkIwMUI4MDcKKzoxMDEzRDAwMDhENDYwMDIwMDBDNzI4MjQwM0UwMDAwOEFENDUwMDIwMEEKKzoxMDEzRTAwMDhGODgwMDNDMDA4MDU4MjEzMEU3RkZGRjkxMDkwMEQ2MkMKKzoxMDEzRjAwMDNDMDI4MDAwMzBBNUZGRkYzMTI0MDBGRjAwMDQxQTAwRUEKKzoxMDE0MDAwMDAwNjc1MDI1MzBDNjAwRkYzNDQ3MDE4MDNDMDk4MDAwNEEKKzoxMDE0MTAwMDhEMkMwMUI4MDU4MEZGRkU4RjgyMDA3MDI0MEYwMDE3MEQKKzoxMDE0MjAwMEFDRTIwMDAwOEQzOTAxMjRBQ0Y5MDAwNDhENzgwMDIwNzUKKzoxMDE0MzAwMEE0RUEwMDA4MjQxOTAxQzRBMEY4MDAwQUEwRUYwMDBCRDgKKzoxMDE0NDAwMDk1MjMwMTIwOEQ2RTAwMDg4RDZEMDAwNDk3ODQwMDYwNDcKKzoxMDE0NTAwMDAxQzM1MDIxMDE0RDYwMjEwMTg0MTAyM0E0RTIwMDBDM0UKKzoxMDE0NjAwMEE0RTUwMDBFQTRGOTAwMTBBNEU2MDAxMkFDRTAwMDE0RkMKKzoxMDE0NzAwMDhENzgwMDI0MjQwREZGRkZBQ0Y4MDAxODhEMEYwMDdDNDAKKzoxMDE0ODAwMEFDRUYwMDFDOEQwRTAwNzgzQzBGMTAwMEFDRUUwMDIwN0QKKzoxMDE0OTAwMEFDRUQwMDI0OTUwQTAwQkUyNDBERkZGNzMxNDZGRkZGOTYKKzoxMDE0QTAwMEFDRTYwMDI4OTUwQzAwODA5NTA0MDA4MjMxODM3RkZGMTQKKzoxMDE0QjAwMDAwMDNDQTAwMzA4MkZGRkYwMzIyQzAyMUFDRjgwMDJDRDkKKzoxMDE0QzAwMEFEMkYwMUI4OTUwRTAwODI4RDZBMDAyMDAwQUUzMDIxNEMKKzoxMDE0RDAwMDAxNEQyODI0QTUwNjAwODIwM0UwMDAwOEFENjUwMDIwMjgKKzoxMDE0RTAwMDNDMDI4MDAwMzQ0NTAxODAzQzA0ODAwMDhDODMwMUI4QkMKKzoxMDE0RjAwMDA0NjBGRkZFOEY4QTAwNDgyNDA2MDAxOTk1NDkwMDFDRUQKKzoxMDE1MDAwMDMxMjhGRkZGMDAwODM5QzBBQ0E3MDAwMEEwQTYwMDBCREYKKzoxMDE1MTAwMDNDMDUxMDAwMDNFMDAwMDhBQzg1MDFCODhGODcwMDUwM0YKKzoxMDE1MjAwMDAwODA0MDIxMzBDNDAwRkYzQzA2ODAwMDhDQzIwMUI4MUUKKzoxMDE1MzAwMDA0NDBGRkZFOEY4OTAwNzA5MzgzMDA2QzM0OTk2MDAwMzMKKzoxMDE1NDAwMEFDQTkwMDAwQTBBMzAwMDU4Q0UyMDAxMDI0MEYwMDAyNEIKKzoxMDE1NTAwMDI0MDNGRkY3QTRBMjAwMDZBNEI5MDAwODhEMTgwMDIwRjgKKzoxMDE1NjAwMEEwQjgwMDBBQTBBRjAwMEI4Q0VFMDAwMEFDQUUwMDEwREIKKzoxMDE1NzAwMDhDRUQwMDA0QUNBRDAwMTQ4Q0VDMDAxQ0FDQUMwMDI0NzEKKzoxMDE1ODAwMDhDRUIwMDIwQUNBQjAwMjg4Q0VBMDAyQzNDMDcxMDAwNTAKKzoxMDE1OTAwMEFDQUEwMDJDOEQwOTAwMjRBQ0E5MDAxOEFDQzcwMUI4NzYKKzoxMDE1QTAwMDhEMDUwMDIwMDBBMzIwMjQwM0UwMDAwOEFEMDQwMDIwRTYKKzoxMDE1QjAwMDhGODYwMDNDMjdCREZGRTBBRkIxMDAxNEFGQkYwMDE4MUQKKzoxMDE1QzAwMEFGQjAwMDEwOTBDMzAwRDQzMEE1MDBGRjMwNjIwMDIwRkYKKzoxMDE1RDAwMDEwNDAwMDA4MDA4MDg4MjE4Q0NCMDBEMDI0MDlGRkRGNTgKKzoxMDE1RTAwMDI1NkEwMDAxQUNDQTAwRDA5MEM4MDBENDAxMDkzODI0OTMKKzoxMDE1RjAwMEEwQzcwMEQ0MTRBMDAwNDAzQzBDODAwMDhGODQwMDNDQTUKKzoxMDE2MDAwMDkwODcwMEQ0MjQxOEZGQkYyNDA2RkZFRjMwRTMwMDdGNEIKKzoxMDE2MTAwMEEwODMwMEQ0OTc5RjAwNjA4RjgyMDA2NDhGOEQwMDNDNzAKKzoxMDE2MjAwMDAzRTJDODIzQTc5OTAwNjBBNUEwMDBCQzkxQUYwMEQ0MzUKKzoxMDE2MzAwMDAxRjg3MDI0QTFBRTAwRDQ4RjhDMDAzQ0ExODAwMEQ3QUIKKzoxMDE2NDAwMDhGOEEwMDNDQTU0MDAwODJBRDQwMDBFQzkxNDUwMEQ0NUIKKzoxMDE2NTAwMDAwQTY1ODI0QTE0QjAwRDQ4RjkwMDAzODhGODQwMDY0REEKKzoxMDE2NjAwMDk3ODYwMDYwMDIwNDI4MjExMEMwMDAwRkFGODUwMDM4NjMKKzoxMDE2NzAwMEEzODAwMDVDM0MwNzgwMDA4RTJDMDAwODk0RUQwMTIwQzQKKzoxMDE2ODAwMDhFMkIwMDA0MDE4RDUwMjEwMTRCODAyMTAyMDYyMDIzNjYKKzoxMDE2OTAwMDMwODZGRkZGMzBDODAwMEYzOTA5MDAwMTMxMzEwMDAxRTkKKzoxMDE2QTAwMDE2MjAwMDA5QTM4ODAwNUM5Mzg2MDA0QzhGQkYwMDE4QTkKKzoxMDE2QjAwMDhGQjEwMDE0OEZCMDAwMTAyN0JEMDAyMEFGODUwMDY4RTcKKzoxMDE2QzAwMDAzRTAwMDA4QUY4NjAwNjQwMEM4NzAyMzhGQkYwMDE4RDUKKzoxMDE2RDAwMDkzODYwMDRDOEZCMTAwMTQ4RkIwMDAxMDM0RUYwQzAwRDMKKzoxMDE2RTAwMDAxMEYyODIxMjdCRDAwMjBBQ0VFMDA4NEFGODUwMDY4RTMKKzoxMDE2RjAwMDAzRTAwMDA4QUY4NjAwNjQzNTkwMDE4MDAyMDAyODIxRDUKKzoxMDE3MDAwMDBFMDAxOTQwMjQwNjAwODI4Rjg0MDAzQzkwODYwMEQ0OEQKKzoxMDE3MTAwMDMwQzUwMDQwNTBBMEZGQkFBMzgwMDA2QzhGODUwMDUwRjgKKzoxMDE3MjAwMDNDMDY4MDAwOENDRDAxQjgwNUEwRkZGRThGODkwMDcwQkIKKzoxMDE3MzAwMDI0MDg2MDgyMjQwNzAwMDJBRTA5MDAwMEE2MDgwMDA4MDEKKzoxMDE3NDAwMEEyMDcwMDBCOENBMzAwMDgzQzBFMTAwMEFFMDMwMDEwOTMKKzoxMDE3NTAwMDhDQTIwMDBDQUUwMjAwMTQ4Q0JGMDAxNEFFMUYwMDE4NDcKKzoxMDE3NjAwMDhDQjkwMDE4QUUxOTAwMjQ4Q0I4MDAyNEFFMTgwMDI4REIKKzoxMDE3NzAwMDhDQUYwMDI4QUUwRjAwMkNBQ0NFMDFCODBBMDAxOTc5NEUKKzoxMDE3ODAwMEEzODAwMDZDOEY4QTAwM0MyN0JERkZFMEFGQjEwMDE0M0UKKzoxMDE3OTAwMEFGQjAwMDEwOEY4ODAwNjRBRkJGMDAxODkzODkwMDQwN0QKKzoxMDE3QTAwMDk1NDIwMEJDMzBEMTAwRkYwMTA5MTgyQjAwODA4MDIxMzgKKzoxMDE3QjAwMDMwQUMwMEZGMzA0N0ZGRkYwMDAwNTgyMTE0NjAwMDAzRTkKKzoxMDE3QzAwMDMxMDYwMEZGMDEyMDMwMjEwMTA5NTgyMzk3ODMwMDYwNzIKKzoxMDE3RDAwMDAwNjgyMDJCMTQ4MDAwMjcwMDAwMDAwMDEwNjgwMDU2Q0QKKzoxMDE3RTAwMDI0MTkwMDAxMTE5OTAwNjMzNEU3MDg4MDMxNjVGRkZGNzcKKzoxMDE3RjAwMDBFMDAxOEYxMDIwMDIwMjE4RjgzMDA3MDNDMDc4MDAwNEEKKzoxMDE4MDAwMDM0RTYwMTgwM0MwNTgwMDA4Q0FCMDFCODA1NjBGRkZFMkEKKzoxMDE4MTAwMDI0MEEwMDE4OEY4NDAwM0NBQ0MzMDAwMEEwQ0EwMDBCNEYKKzoxMDE4MjAwMDk0ODkwMEJFM0MwODEwMDBBNEM5MDAxMEFDQzAwMDMwNzAKKzoxMDE4MzAwMEFDQTgwMUI4OTQ4MjAwODAyNDQzMDAwMUE0ODMwMDgwRjYKKzoxMDE4NDAwMDk0OUYwMDgwM0MwNjA4MDA4Q0M2MzE4ODMzRUM3RkZGRjMKKzoxMDE4NTAwMDExODYwMDVFMDAwMDAwMDAwMjAwMjAyMTAyMjAyODIxRTUKKzoxMDE4NjAwMDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDBBMDAxOTY1RTcKKzoxMDE4NzAwMDI3QkQwMDIwOTE0NDAwRDQyNDAzRkY4MDAwODM4ODI1RTUKKzoxMDE4ODAwMEExNTEwMEQ0OTc4NDAwNjAzMDg4RkZGRjUxMDAwMDIzRUQKKzoxMDE4OTAwMDkzOEMwMDQwOEY4NTAwM0MyNDAyRUZGRjAwOEI3ODIzNUYKKzoxMDE4QTAwMDk0QUUwMEJDMDE2ODUwMkIzMUU5MDBGRjAxQzI2ODI0RUUKKzoxMDE4QjAwMEE0QUQwMEJDNTE0MDAwMzkwMTAwNTgyMTNDMUY4MDAwRkMKKzoxMDE4QzAwMDM3RTYwMTAwOENEODAwMDQzQzE5MDAwMTAzMTk0MDI0QkMKKzoxMDE4RDAwMDU1MDAwMDAxMzRFNzQwMDA4RTBBMDAyMDI0MDNGRkZCN0UKKzoxMDE4RTAwMDI0MTEwMDAxMDE0MzIwMjRBRTA0MDAyMDExOTEwMDJEOTkKKzoxMDE4RjAwMDM0RTc4MDAwMDIwMDIwMjEwMTIwMzAyMTBFMDAxOEYxODEKKzoxMDE5MDAwMDMxNjVGRkZGOTc4NzAwNjA4Rjg5MDA2NEE3ODAwMDYwQzIKKzoxMDE5MTAwMDAxMjc4MDIzQUY5MDAwNjQ5MzhDMDA0MDhGOEIwMDNDQTQKKzoxMDE5MjAwMDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDI3QkQwMDIwQUEKKzoxMDE5MzAwMDAzRTAwMDA4QTE2QzAwRDczQzBEODAwMDM1QUEwMTAwMkYKKzoxMDE5NDAwMDhENDgwMDA0M0MwOTAwMDEwMTA5MjgyNDU0QTAwMDAxMkQKKzoxMDE5NTAwMDM0RTc0MDAwOEUwRjAwMjAyNDE4RkZGQjM0RTc4MDAwOUUKKzoxMDE5NjAwMDAxRjg3MDI0MjQxOTAwMDFBRTBFMDAyMDE1OTlGRjlGODQKKzoxMDE5NzAwMDM0RTcwODgwMDIwMDIwMjEwRTAwMThCRjMxNjVGRkZGMDgKKzoxMDE5ODAwMDAyMDAyMDIxMDIyMDI4MjE4RkJGMDAxODhGQjEwMDE0RUYKKzoxMDE5OTAwMDhGQjAwMDEwMEEwMDE5NjUyN0JEMDAyMDBBMDAxQTI4MjAKKzoxMDE5QTAwMDAwMDA0ODIxMDIwMDIwMjEwMTIwMzAyMTBFMDAxOEJGMzQKKzoxMDE5QjAwMDMxNjVGRkZGOTc4NzAwNjA4Rjg5MDA2NEE3ODAwMDYwMTIKKzoxMDE5QzAwMDAxMjc4MDIzMEEwMDFBM0ZBRjkwMDA2NDk0OEMwMDgwQTYKKzoxMDE5RDAwMDI0MUY4MDAwMDE5RjMwMjRBNDg2MDA4MDkwOEIwMDgwMEIKKzoxMDE5RTAwMDkwOEYwMDgwMzE2NzAwRkYwMDA3QzlDMjAwMTlDMDI3MkYKKzoxMDE5RjAwMDAwMTg3MUMwMzFFRDAwN0YwMUFFMjgyNUEwODUwMDgwNjAKKzoxMDFBMDAwMDBBMDAxQTEwMDIwMDIwMjE5Mzg1MDA2QzI0MDMwMDAxQjMKKzoxMDFBMTAwMDI3QkRGRkU4MDBBMzMwMDQyQ0EyMDAyMEFGQjAwMDEwQzcKKzoxMDFBMjAwMEFGQkYwMDE0MDBDMDE4MjExMDQwMDAxMzI0MTBGRkZFQTcKKzoxMDFBMzAwMDNDMDcwODAwOENFNzMxOTAwMEU2MTAyNDNDMDg4MDAwNDkKKzoxMDFBNDAwMDM1MDUwMTgwMTQ0MDAwMDUyNDA2MDA4NDhGODkwMDNDODAKKzoxMDFBNTAwMDI0MEEwMDA0MjQxMEZGRkZBMTJBMDBGQzBFMDAxOTQwRjQKKzoxMDFBNjAwMDAwMDAwMDAwMDIwMDEwMjE4RkJGMDAxNDhGQjAwMDEwOTIKKzoxMDFBNzAwMDAzRTAwMDA4MjdCRDAwMTgzQzA2MDgwMDhDQzYzMTk0MUUKKzoxMDFBODAwMDBBMDAxQTg4MDBDMzEwMjQ4Rjg3MDA0ODI3QkRGRkUwOTIKKzoxMDFBOTAwMEFGQjIwMDE4QUZCMTAwMTRBRkIwMDAxMEFGQkYwMDFDNjAKKzoxMDFBQTAwMDMwRDAwMEZGOTBFNjAwMEQwMEEwODgyMTAwODA5MDIxM0EKKzoxMDFBQjAwMDMwQzUwMDdGQTBFNTAwMEQ4Rjg1MDAzQzhFMjMwMDE4MDcKKzoxMDFBQzAwMDhDQTIwMEQwMTA2MjAwMkUyNDBBMDAwRTBFMDAxQTdCOTkKKzoxMDFBRDAwMEEzOEEwMDZDMjQwOUZGRkYxMDQ5MDAyMjI0MDRGRkZGQTEKKzoxMDFBRTAwMDUyMDAwMDIwMDAwMDIwMjE4RTI2MDAwMDNDMEMwMDEwMzcKKzoxMDFBRjAwMDAwQ0M1ODI0MTU2MDAwMzkzQzBFMDAwODAwQ0U2ODI0NDQKKzoxMDFCMDAwMDU1QTAwMDNGMDI0MDIwMjEzQzE4MDAwMjAwRDg4MDI0NEMKKzoxMDFCMTAwMDEyMDAwMDFGM0MwQTAwMDQ4Rjg3MDA0ODhDRTIwMDE0NkEKKzoxMDFCMjAwMDhDRTMwMDEwOENFNTAwMTQwMDQzRjgyMzAzRTVDODJCNzgKKzoxMDFCMzAwMDEzMjAwMDA1MDI0MDIwMjE4RTI0MDAyQzhDRjEwMDEwN0YKKzoxMDFCNDAwMDEwOTEwMDMxMDI0MDIwMjEyNDAyMDAxMkEzODIwMDZDNzcKKzoxMDFCNTAwMDBFMDAxQTdCMjQxMkZGRkYxMDUyMDAwMjI0MDRGRkZGMjQKKzoxMDFCNjAwMDAwMDAyMDIxOEZCRjAwMUM4RkIyMDAxODhGQjEwMDE0MUQKKzoxMDFCNzAwMDhGQjAwMDEwMDA4MDEwMjEwM0UwMDAwODI3QkQwMDIwNzYKKzoxMDFCODAwMDkwQTgwMEQ0MzUwNDAwMjAwQTAwMUFCMUEwQTQwMEQ0MDMKKzoxMDFCOTAwMDAwQ0E0ODI0MTUyMDAwMEI4RjhCMDA0ODhGOEQwMDQ4MDkKKzoxMDFCQTAwMDhEQUMwMDEwMTU4MDAwMEIwMjQwMjAyMThFMkUwMDJDRTEKKzoxMDFCQjAwMDUxQzBGRkVDMDAwMDIwMjEwMjQwMjAyMTBBMDAxQUNDNzUKKzoxMDFCQzAwMDI0MDIwMDE3OEQ2NjAwMTA1MEMwRkZFNjAwMDAyMDIxOUYKKzoxMDFCRDAwMDAyNDAyMDIxMEEwMDFBQ0MyNDAyMDAxMTAyNDAyMDIxRDgKKzoxMDFCRTAwMDI0MDIwMDE1MEUwMDFBN0JBMzgyMDA2QzI0MEZGRkZGNTUKKzoxMDFCRjAwMDEwNEZGRkRDMjQwNEZGRkYwQTAwMUFCQjhFMjYwMDAwRjIKKzoxMDFDMDAwMDBBMDAxQUYyMjQwMjAwMTQzQzA4MDAwNDAwQzgzODI0MTgKKzoxMDFDMTAwMDUwRTBGRkQ0MDAwMDIwMjEwMjQwMjAyMTBBMDAxQUNDMEQKKzoxMDFDMjAwMDI0MDIwMDEzOEY4NTAwM0MyN0JERkZEOEFGQjMwMDFDRjIKKzoxMDFDMzAwMEFGQjIwMDE4QUZCMTAwMTRBRkIwMDAxMEFGQkYwMDIwQkEKKzoxMDFDNDAwMDkwQTcwMEQ0OEY5MDAwNTAyNDEyRkZGRjM0RTIwMDQwOTAKKzoxMDFDNTAwMDkyMDYwMDAwQTBBMjAwRDQ4RTAzMDAxMDAwODA5ODIxRkMKKzoxMDFDNjAwMDEwNzIwMDA2MzBEMTAwM0YyNDA4MDAwRDBFMDAxQTdCRDAKKzoxMDFDNzAwMEEzODgwMDZDMTA1MjAwMjUyNDA0RkZGRjhGOEEwMDNDQ0IKKzoxMDFDODAwMDhFMDkwMDE4OEQ0NDAwRDAxMTI0MDAwNzAyNjAyMDIxMjUKKzoxMDFDOTAwMDI0MEMwMDBFMEUwMDFBN0JBMzhDMDA2QzI0MEJGRkZGOUIKKzoxMDFDQTAwMDEwNEIwMDFBMjQwNEZGRkYyNDA0MDAyMDEyMjQwMDA0MTcKKzoxMDFDQjAwMDhGOEQwMDNDOTFBRjAwRDQzNUVFMDAyMEExQUUwMEQ0NTIKKzoxMDFDQzAwMDhGODUwMDU4MTBBMDAwMTkwMDAwMDAwMDEyMjQwMDRBNUYKKzoxMDFDRDAwMDhGOTgwMDNDOEY5MkZDQzA5NzEwMDA4MDk2NTEwMDBBQUMKKzoxMDFDRTAwMDUyMzAwMDQ4OEY5MzAwNDQzQzFGMDgwMDhGRkYzMThDMTYKKzoxMDFDRjAwMDAzRTVDODJCMTcyMDAwMUUwMjYwMjAyMTAwMDAyODIxQzgKKzoxMDFEMDAwMDBFMDAxOURBMjQwNjAwMDEwMDAwMjAyMThGQkYwMDIwRjgKKzoxMDFEMTAwMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwNjkKKzoxMDFEMjAwMDAwODAxMDIxMDNFMDAwMDgyN0JEMDAyODUyMjQwMDJBNkIKKzoxMDFEMzAwMDhFMDUwMDE0OEY4NDAwM0M5NDhBMDA4MDI1NDkwMDAxQTAKKzoxMDFENDAwMEE0ODkwMDgwOTQ4ODAwODAzQzAyMDgwMDhDNDIzMTg4N0QKKzoxMDFENTAwMDMxMDc3RkZGMTBFMjAwMEUwMDAwMDAwMDAyNjAyMDIxMkEKKzoxMDFENjAwMDBFMDAxOTY1MjQwNTAwMDEwQTAwMUIzQzAwMDAyMDIxMUIKKzoxMDFENzAwMDI0MDIwMDJEMEUwMDFBN0JBMzgyMDA2QzI0MDNGRkZGQjcKKzoxMDFEODAwMDE0NDNGRkUxMjQwNEZGRkYwQTAwMUIzRDhGQkYwMDIwMjYKKzoxMDFEOTAwMDk0OTkwMDgwMjQxRjgwMDAyNDA1MDAwMTAzM0ZDMDI0ODMKKzoxMDFEQTAwMEE0OTgwMDgwOTA5MjAwODA5MDhFMDA4MDMyNTEwMEZGQjUKKzoxMDFEQjAwMDAwMTE4MUMyMDAxMDc4MjcwMDBGNjlDMDMxQ0MwMDdGNkMKKzoxMDFEQzAwMDAxOEQ1ODI1QTA4QjAwODAwRTAwMTk2NTAyNjAyMDIxMkUKKzoxMDFERDAwMDBBMDAxQjNDMDAwMDIwMjEyNDA2RkZGRjU0QTZGRkQ2NkEKKzoxMDFERTAwMDhGODQwMDNDMDI2MDIwMjEwRTAwMTk2NTI0MDUwMDAxNEIKKzoxMDFERjAwMDBBMDAxQjNDMDAwMDIwMjEwMjYwMjAyMTBBMDAxQjU2MjMKKzoxMDFFMDAwMDI0MDIwMDBBMjQwNEZGRkQwQTAwMUIzQ0FGOTMwMDY0NzcKKzoxMDFFMTAwMDhGODgwMDNDMjdCREZGRThBRkIwMDAxMEFGQkYwMDE0QjMKKzoxMDFFMjAwMDkxMEEwMEQ0OEY4NzAwNTAwMDgwODAyMTM1NDkwMDQwRkUKKzoxMDFFMzAwMDhDRTYwMDEwQTEwOTAwRDQzQzAyMDgwMDhDNDIzMUIwQUQKKzoxMDFFNDAwMDMwQzUzRkZGMDBBMjE4MkIxMDYwMDAwNzhGODUwMDU0OUIKKzoxMDFFNTAwMDI0MERGRjgwOTBBRTAwMEQwMUFFNjAyNDMxOEIwMEZGOTkKKzoxMDFFNjAwMDE1NjAwMDA4MDAwNkMzODIwMjAwMjAyMTI0MDMwMDBEMzMKKzoxMDFFNzAwMDhGQkYwMDE0OEZCMDAwMTAyN0JEMDAxODBBMDAxQTdCMTYKKzoxMDFFODAwMEEzODMwMDZDMzMwNjAwMDMyNDBGMDAwMjU0Q0ZGRkY3MzYKKzoxMDFFOTAwMDAyMDAyMDIxOTRBMjAwMUM4Rjg1MDAzQzI0MTkwMDIzRkQKKzoxMDFFQTAwMEE0QTIwMEU4OENFODAwMDAwMDA4MUUwMjMwN0YwMDNGN0EKKzoxMDFFQjAwMDEzRjkwMDM1M0MwQTAwODM4Q0U4MDAxODhDQTYwMEQwOEEKKzoxMDFFQzAwMDExMDYwMDA4MDAwMDAwMDAyNDA1MDAwRTBFMDAxQTdCMTkKKzoxMDFFRDAwMEEzODUwMDZDMjQwN0ZGRkYxMDQ3MDAxODI0MDRGRkZGQjAKKzoxMDFFRTAwMDhGODUwMDNDOTBBOTAwRDQzNTI0MDAyMEEwQTQwMEQ0MDQKKzoxMDFFRjAwMDhGOEMwMDQ4OTE4RTAwMEQzMUNEMDA3RkExOEQwMDBEOUIKKzoxMDFGMDAwMDhGODMwMDU4MTA2MDAwMUMwMjAwMjAyMThGODQwMDU0MzEKKzoxMDFGMTAwMDhDOTgwMDEwMDMwMzc4MkIxMUUwMDAwRDI0MTkwMDE4OTEKKzoxMDFGMjAwMDAyMDAyMDIxQTM5OTAwNkMwRTAwMUE3QjI0MTBGRkZGRjEKKzoxMDFGMzAwMDEwNTAwMDAyMjQwNEZGRkYwMDAwMjAyMThGQkYwMDE0NzYKKzoxMDFGNDAwMDhGQjAwMDEwMDA4MDEwMjEwM0UwMDAwODI3QkQwMDE4QUEKKzoxMDFGNTAwMDhDODYwMDEwOEY5RjAwNDgwMjAwMjAyMTAwQzMxMDIzQjAKKzoxMDFGNjAwMEFGRTIwMDEwMjQwNTAwMDEwRTAwMTlEQTI0MDYwMDAxN0EKKzoxMDFGNzAwMDBBMDAxQkM4MDAwMDIwMjEwRTAwMTk2NTI0MDUwMDAxN0QKKzoxMDFGODAwMDBBMDAxQkM4MDAwMDIwMjEwMTBBNTgyNDE1NkFGRkQ5NDUKKzoxMDFGOTAwMDhGOEMwMDQ4QTBBNjAwRkMwQTAwMUJCNUEzODYwMDVFM0IKKzoxMDFGQTAwMDMwQTUwMEZGMjQwNjAwMDEyNEE5MDAwMTAwQzkxMDJCNjAKKzoxMDFGQjAwMDEwNDAwMDBDMDAwMDQwMjEyNDBBMDAwMTAwQTYxODIzNTQKKzoxMDFGQzAwMDMwOEIwMDAxMjRDNjAwMDEwMDZBMzgwNDAwMDQyMDQyNUUKKzoxMDFGRDAwMDExNjAwMDAyMDBDOTE4MkIwMTA3NDAyNTE0NjBGRkY4QUEKKzoxMDFGRTAwMDAwQTYxODIzMDNFMDAwMDgwMTAwMTAyMTI3QkRGRkQ4MzgKKzoxMDFGRjAwMEFGQjAwMDE4OEY5MDAwNTBBRkIxMDAxQ0FGQkYwMDIwRjEKKzoxMDIwMDAwMDI0MDNGRkZGMjQxMTAwMkZBRkEzMDAxMDkyMDYwMDAwNEQKKzoxMDIwMTAwMDI0MDUwMDA4MjYxMDAwMDEwMDY2MjAyNjBFMDAxQkUxQTIKKzoxMDIwMjAwMDMwODQwMEZGMDAwMjFFMDAzQzAyMUVEQzM0NDY2RjQxN0IKKzoxMDIwMzAwMDBBMDAxQzA5MDAwMDEwMjExMEEwMDAwOTAwODAxODIxQ0UKKzoxMDIwNDAwMDI0NDUwMDAxMzBBMkZGRkYyQzQ1MDAwODA0NjFGRkZBN0YKKzoxMDIwNTAwMDAwMDMyMDQwMDA4NjIwMjYxNEEwRkZGOTAwODAxODIxRUMKKzoxMDIwNjAwMDBFMDAxQkUxMjQwNTAwMjA4RkEzMDAxMDI2MjlGRkZGOEUKKzoxMDIwNzAwMDMxMzEwMEZGMDAwMzQyMDIyNDA3MDBGRjE2MjdGRkUyNzAKKzoxMDIwODAwMDAxMDIxODI2MDAwMzUwMjdBRkFBMDAxNEFGQUEwMDEwQkYKKzoxMDIwOTAwMDAwMDAzMDIxMjdBODAwMTAyN0E3MDAxNDAwRTY3ODIzQUQKKzoxMDIwQTAwMDkxRUQwMDAzMjRDRTAwMDEwMEM4NjAyMTMxQzYwMEZGN0QKKzoxMDIwQjAwMDJDQ0IwMDA0MTU2MEZGRjlBMThEMDAwMDhGQTIwMDEwNDkKKzoxMDIwQzAwMDhGQkYwMDIwOEZCMTAwMUM4RkIwMDAxODAzRTAwMDA4MDQKKzoxMDIwRDAwMDI3QkQwMDI4MjdCREZGRDBBRkIzMDAxQ0FGQjAwMDEwNTQKKzoxMDIwRTAwMEFGQkYwMDI4QUZCNTAwMjRBRkI0MDAyMEFGQjIwMDE4RDYKKzoxMDIwRjAwMEFGQjEwMDE0M0MwQzgwMDA4RDg4MDEyODI0MEZGRjgwQjQKKzoxMDIxMDAwMDNDMDY4MDBBMjUxMDAxMDAyNTBCMDA4MDAyMEY2ODI0ODAKKzoxMDIxMTAwMDMyMDUwMDdGMDE2RjcwMjRBRDhFMDA5MDAwQTYyODIxNEIKKzoxMDIxMjAwMEFEOEQwMDI0OTBBNjAwRkMzMTY5MDA3RjNDMEE4MDA0M0MKKzoxMDIxMzAwMDAxMkExODIxQTM4NjAwNUU5MDY3MDA3QzAwODA5ODIxMDgKKzoxMDIxNDAwMEFGODMwMDM0MzBFMjAwMDJBRjg4MDA3MEFGODUwMDNDRkUKKzoxMDIxNTAwMDAwQTAxODIxMTQ0MDAwMDIyNDA0MDAzNDI0MDQwMDMwOUMKKzoxMDIxNjAwMEEzODQwMDRDOEM3MjAwREMzMEQxMDBGRjI0MDQwMDA0RjYKKzoxMDIxNzAwMEFGOTIwMDY0MTIyNDAwMDRBMzgwMDA2QzhFNzQwMDA0RUIKKzoxMDIxODAwMDE2ODAwMDFFM0MwODgwMDA5Mzg2MDA1RDMwQzcwMDAxNjkKKzoxMDIxOTAwMDUwRTAwMDBGOEY4NjAwNjQ4Q0E0MDA4NDhDQTgwMDg0MUIKKzoxMDIxQTAwMDI0MTNGRjgwMDA5MzYwMjQwMDBDNDk0MDMxMTAwMDdGMEQKKzoxMDIxQjAwMDAxMzA3ODI1M0MxOTIwMDAwMUY5NjgyNTMwREYwMEZFNDgKKzoxMDIxQzAwMDNDMDM4MDAwQUM2RDA4MzBBMzlGMDA1RDhGODYwMDY0RTcKKzoxMDIxRDAwMDhGQkYwMDI4OEZCNTAwMjQ4RkI0MDAyMDhGQjMwMDFDNjAKKzoxMDIxRTAwMDhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDI0MDIwMDAxQ0MKKzoxMDIxRjAwMDI3QkQwMDMwMDNFMDAwMDhBQ0E2MDBEQzhFN0YwMDA4OUQKKzoxMDIyMDAwMDk1MDIwMTIwOEU2NzAwMTAwM0UyQzgyMTMzMjZGRkZGRUMKKzoxMDIyMTAwMDMwRDgwMDBGMzMxNTAwMDFBRjg3MDAzODE2QTAwMDU4RTIKKzoxMDIyMjAwMEEzOTgwMDVDMzUwOTBDMDAwMzA5MzgyMTAwRDgxODIzNTUKKzoxMDIyMzAwMEFEMDMwMDg0QUY4NzAwNjg4RTZBMDAwNDMxNDhGRkZGNTkKKzoxMDIyNDAwMDExMDAwMDdFQTc4QTAwNjA5MEFDMDBENDI0MDdGRjgwQjQKKzoxMDIyNTAwMDAwRUMzMDI0MzBDQjAwRkYxNTYwMDA0Qjk3ODYwMDYwMDcKKzoxMDIyNjAwMDkzOEUwMDVFMjQwRDAwMDIzMEQ1RkZGRjExQ0QwMkEyMzcKKzoxMDIyNzAwMDAwMDBBMDIxOEY4NTAwNjQwMkE1ODAyQjE2MDAwMEJDMDEKKzoxMDIyODAwMDkzODgwMDRDM0MxMTgwMDA5NjI0MDEyMDMxMDQwMEZGMEIKKzoxMDIyOTAwMDE0ODUwMDg4OEY4NDAwNjg4Rjk4MDAzODMzMTIwMDAzRkIKKzoxMDIyQTAwMDU2NDAwMDg1MzBBNTAwRkY4RjkwMDA2ODMxMEMwMEZGN0MKKzoxMDIyQjAwMDI0MDYwMDM0MTE4NjAwOTVBRjkwMDA1MDkyMDQwMDA0NkIKKzoxMDIyQzAwMDE0ODAwMTE5OEY4RTAwM0NBMzgwMDA0MDhFMEQwMDA0MDUKKzoxMDIyRDAwMDhEQzgwMEQ4M0MwNjAwRkYzNENDRkZGRjAxQUMzMDI0OTEKKzoxMDIyRTAwMDAxMDYxODJCMTQ2MDAxMjFBRjg2MDA1ODhGODcwMDY0MDcKKzoxMDIyRjAwMDk3OTgwMDYwQUY4NzAwNDQwMzA3NDAyMzEwQzAwMEM3RDEKKzoxMDIzMDAwMEE3ODgwMDYwOEY5MTAwMzQzMEMzMDAwMzAwMDM1ODIzNzYKKzoxMDIzMTAwMDkyMkEwMDdDMzE3MTAwMDMwMjI2MTAyMTAwMEEyMDgyREIKKzoxMDIzMjAwMDMwOTIwMDAxMDAxMjQ4ODAwMDQ5MjgyMTMxMUZGRkZGMzAKKzoxMDIzMzAwMDAzRTVDODJCMTMyMDAxMjA4Rjg4MDAzQzhGODUwMDM4Q0YKKzoxMDIzNDAwMDhGODgwMDY4MTEwNTAyNUEzQzBFM0YwMThFMDYwMDAwN0UKKzoxMDIzNTAwMDNDMEMyNTAwMDBDRTY4MjQxMUFDMDE2MzhGODQwMDUwMzIKKzoxMDIzNjAwMDMwRTUwMEZGMEUwMDE4N0IwMDAwMzAyMThGODgwMDNDMTQKKzoxMDIzNzAwMDhGODcwMDY0OEY4NTAwMzgwQTAwMURFODhGODYwMDU4MUIKKzoxMDIzODAwMDBBMDAxQzg3QUY4NzAwNjg5MEFDMDBENDAwRUMyMDI0QzIKKzoxMDIzOTAwMDMwOTAwMEZGMTIwMDAwMTY5Mzg2MDA1RDkwQjUwMDg4MTMKKzoxMDIzQTAwMDkwQjQwMEQ3MjRBODAwODgzMkEyMDAzRjI0NDZGRkUwNjIKKzoxMDIzQjAwMDJDRDEwMDIwQTM5NDAwNDAxMjIwMDAwQ0FGODgwMDUwQzQKKzoxMDIzQzAwMDI0MEUwMDAxMDBDRTIwMDQzMDhBMDAxOTE1NDAwMTJCOTQKKzoxMDIzRDAwMDNDMDY4MDAwMzREODAwMDIwMDk4NTgyNDE1NjAwMjJFNzQKKzoxMDIzRTAwMDMwOTIwMDIwMTY0MDAyMzQwMDAwMDAwMDkzODYwMDVEMDkKKzoxMDIzRjAwMDMwQ0UwMDAxMTFDMDAwMEY5Nzg4MDA2MDhDQTkwMDg0QzYKKzoxMDI0MDAwMDhDQUYwMDg0MjQxMEZGODAwMTMwQzgyNDAwMTkxOTQwQ0IKKzoxMDI0MTAwMDMxRUQwMDdGMDA2RDM4MjUzQzFGMjAwMDAwRkY5MDI1MjYKKzoxMDI0MjAwMDMwQ0IwMEZFM0MxODgwMDBBRjEyMDgzMEEzOEIwMDVENUIKKzoxMDI0MzAwMDk3ODgwMDYwMTUwMEZGODQwMDAwMDAwMDhFNjMwMDIwNzQKKzoxMDI0NDAwMDMwNkMwMDA0MTE4MEZGNTE5Mzg2MDA1RDI0MDRGRkZCNzMKKzoxMDI0NTAwMDAwNjQzMDI0M0MwMzgwMDBBRTY2MDAyMDM0NjYwMTgwQjYKKzoxMDI0NjAwMDhDNzMwMUI4MDY2MEZGRkU4RjhFMDA3MDM0NkEwMTAwMjUKKzoxMDI0NzAwMDNDMTUwMDAxQUNDRTAwMDA4QzYyMDEyNDI0MDc2MDg1NkQKKzoxMDI0ODAwMEFDQzIwMDA0OEQ1NDAwMDQwMjk1ODgyNDUyMjAwMDAxM0YKKzoxMDI0OTAwMDI0MDc2MDgzMjQxMjAwMDIzQzE4MTAwMDNDMEI4MDAwQ0IKKzoxMDI0QTAwMEE0QzcwMDA4QTBEMjAwMEJBRDc4MDFCODBBMDAxQzVDREMKKzoxMDI0QjAwMDkzODYwMDVEMzBBNTAwRkYwRTAwMTg3QjI0MDYwMDAxMDYKKzoxMDI0QzAwMDhGODgwMDcwM0MwNTgwMDAzNEE5MDkwMDI1MDIwMTg4MkUKKzoxMDI0RDAwMDkzODgwMDRDMzA0QTAwMDczMDRCMDA3ODNDMDM0MDgwMjIKKzoxMDI0RTAwMDI0MDdGRjgwMDE2M0M4MjUwMTQ5ODAyMTAwNDdGODI0QTMKKzoxMDI0RjAwMDMxMEMwMEZGMjQwNjAwMzRBQ0JGMDgwMEFGOTAwMDUwNDAKKzoxMDI1MDAwMEFDQjkwODEwNTU4NkZGNkU5MjA0MDAwNDhGODQwMDNDMUQKKzoxMDI1MTAwMDhFMTEwMDMwOTA4RTAwRDQzMUNEMDAxMDE1QTAwMDEwMjcKKzoxMDI1MjAwMDhGODMwMDY0MkM2RjAwMDUxNUUwMDBFNDAwMDAwMDAwQkMKKzoxMDI1MzAwMDkwOTgwMEQ0MjQ2NUZGRkMzMzEyMDAxMDE2NDAwMDA4NjgKKzoxMDI1NDAwMDMwQTQwMEZGOEY5RjAwNjg4Rjk5MDAzODEzRjkwMDA0QjIKKzoxMDI1NTAwMDM4ODcwMDAxMzBFMjAwMDExNDQwMDFDODAwMDAwMDAwOEIKKzoxMDI1NjAwMDBFMDAxQkY0MDAwMDAwMDAwQTAwMUUyOTAwMDAwMDAwRkQKKzoxMDI1NzAwMDhGODQwMDY4MzBDNTAwRkYwRTAwMTg3QjI0MDYwMDAxMjAKKzoxMDI1ODAwMDkzOEUwMDRDMjQwQTAwMzQxMUNBMDBBMDhGODUwMDNDQjEKKzoxMDI1OTAwMDhGODYwMDY0OTc4MzAwNjAzMDYyRkZGRjAwQzI4ODIzNEIKKzoxMDI1QTAwMEFGOTEwMDY0QTc4MDAwNjAxMjgwRkY5MDAyODAxODIxMjQKKzoxMDI1QjAwMDI0MTRGRkZENTQ3NEZGQTI4RTYzMDAyMDhFNjkwMDA0NzIKKzoxMDI1QzAwMDI0MDNGRkJGMjQwQkZGRUYwMTM1QzgyM0FFNzkwMDA0QkQKKzoxMDI1RDAwMDkwQUYwMEQ0MzFFRDAwN0ZBMEFEMDBENDhFNjYwMDIwMTYKKzoxMDI1RTAwMDhGOTgwMDNDQTc4MDAwNjAzNERGMDAwMkFFN0YwMDIwOUYKKzoxMDI1RjAwMEE3MDAwMEJDOTMxMjAwRDQwMjQzNDAyNEEzMDgwMEQ0RDcKKzoxMDI2MDAwMDhGOTUwMDNDQUVBMDAwRUM5MkFFMDBENDAxQ0I1MDI0REMKKzoxMDI2MTAwMEEyQUEwMEQ0MEEwMDFEMDg4Rjg1MDAzQzhGOTEwMDM4QzMKKzoxMDI2MjAwMEFGODAwMDY0MDIyNzU4MjFBRjhCMDAzODAwMDAyMDIxQzIKKzoxMDI2MzAwMDI0MDNGRkZGMTA4MzAxQjQ4Rjg1MDAzQzhFMEMwMDEwMzMKKzoxMDI2NDAwMDNDMEQwODAwOERBRDMxQjA5MjA4MDAwMDMxODQzRkZGOTEKKzoxMDI2NTAwMDAwOEQ4MDJCMTIwMDAwMjMzMTBEMDAzRjNDMTkwODAwMzMKKzoxMDI2NjAwMDhGMzkzMUE4OEY5RjAwNzAwMDA0Nzk4MDI0MDhGRjgwODMKKzoxMDI2NzAwMDAzM0YyMDIxMDA4RkM4MjE5Mzg1MDA1RDAzMjhGODI0QTMKKzoxMDI2ODAwMDNDMDYwMDgwM0MwRjgwMDAzNEQ4MDAwMTAwMUY5MTQwQzAKKzoxMDI2OTAwMDMzMzEwMDdGOEY4NjAwM0MwMjUxNTAyNTM1RUUwOTQwRDIKKzoxMDI2QTAwMDMzMkIwMDc4MzMzMDAwMDczQzAzMTAwMDNDMDI4MDBDRDEKKzoxMDI2QjAwMDAxNzg5MDI1MDIwRTQ4MjEwMTQzQzAyNTAyMjIzODIxQ0QKKzoxMDI2QzAwMDM0QUUwMDAxQURGRjA4MDRBRjg5MDA1NEFERjIwODE0MjgKKzoxMDI2RDAwMEFGODcwMDQ4QURGRjAwMjhBQ0Q5MDA4NEFERjgwODMwQzIKKzoxMDI2RTAwMEEzOEUwMDVEOTM4MzAwNUUyNDA3MDAwMzUwNjcwMDI4REIKKzoxMDI2RjAwMDI1QTNGRkUwMjQwQzAwMDExNDZDRkZBQjhGODUwMDNDODgKKzoxMDI3MDAwMDI0MTEwMDIzMTFCMTAwODQwMDAwMDAwMDI0MDIwMDBCRkEKKzoxMDI3MTAwMDAyNjAyMDIxMEUwMDFBN0JBMzgyMDA2QzAwNDBBMDIxRTEKKzoxMDI3MjAwMDBBMDAxRDYzOEY4NTAwM0MwMjYwMjAyMTI0MEIwMDBDRjEKKzoxMDI3MzAwMDBFMDAxQTdCQTM4QjAwNkMyNDBBRkZGRjEwNEFGRkJDMUIKKzoxMDI3NDAwMDI0MDRGRkZGOEY4RTAwM0NBMzgwMDA0MDhFMEQwMDA0MDgKKzoxMDI3NTAwMDhEQzgwMEQ4M0MwNjAwRkYzNENDRkZGRjAxQUMzMDI0MEMKKzoxMDI3NjAwMDAxMDYxODJCMTA2MEZFRTFBRjg2MDA1ODAyNjAyMDIxQTAKKzoxMDI3NzAwMDI0MTIwMDE5MEUwMDFBN0JBMzkyMDA2QzI0MEZGRkZGOTUKKzoxMDI3ODAwMDEwNEZGRkFCMjQwNEZGRkYwQTAwMUNCNDhGODYwMDU4RDMKKzoxMDI3OTAwMDJDNzQwMDIwMTI4MEZGREUyNDAyMDAwQjAwMDMyODgwMkUKKzoxMDI3QTAwMDNDMTEwODAxMjYzMTk1NTQwMEIxNDgyMThEMkQwMDAwQkYKKzoxMDI3QjAwMDAxQTAwMDA4MDAwMDAwMDA4Rjg1MDAzODAwQTcxMDIxNEMKKzoxMDI3QzAwMDkzODUwMDQwQUY4MjAwMzgwMjI1MTgyMUEzODMwMDQwODIKKzoxMDI3RDAwMDk1MUYwMEJDMDIyNjI4MjEzN0Y5MTAwMEE1MTkwMEJDNUUKKzoxMDI3RTAwMDUyNDBGRjkyQUY4NTAwNjQyNDZBMDAwNEEzOEEwMDQwMkYKKzoxMDI3RjAwMDk1MDkwMEJDMjRBNDAwMDRBRjg0MDA2NDM1MzIyMDAwOTUKKzoxMDI4MDAwMEE1MTIwMEJDMEEwMDFEODUwMDAwMjAyMThGODYwMDY0RUYKKzoxMDI4MTAwMDJDQ0IwMDA1MTU2MEZGNjA5NzgzMDA2MDMwNzJGRkZGQ0UKKzoxMDI4MjAwMDAwRDI0MDIzMkQxODAwMDUxMzAwMDAwMzMwNjQwMEZGODAKKzoxMDI4MzAwMDI0REZGRkZDMzNFNDAwRkY4Rjg1MDA2ODhGODYwMDM4QkIKKzoxMDI4NDAwMDEwQTYwMDA0Mzg4RjAwMDEzMUVEMDAwMTE1QTAwMTM4RjkKKzoxMDI4NTAwMDAwMDAwMDAwOEY4NDAwM0M5MDhDMDBENDM1ODcwMDEwNkQKKzoxMDI4NjAwMEEwODcwMEQ0OEY4NTAwM0M4Rjg2MDA2NDk3ODMwMDYwMkEKKzoxMDI4NzAwMEFDQTAwMEVDMEEwMDFENjAzMDYyRkZGRjhDQUEwMDg0NEYKKzoxMDI4ODAwMDhDQjUwMDg0M0MwNDEwMDAwMTQ3MTAyNDAwMDI4OTQwRUMKKzoxMDI4OTAwMDMyQjQwMDdGMDIzNDMwMjUwMEM0NjAyNTNDMDg4MDAwM0IKKzoxMDI4QTAwMDI0MDUwMDAxMDI2MDIwMjEyNDA2MDAwMTBFMDAxOURBMkYKKzoxMDI4QjAwMEFEMEMwODMwMEEwMDFDRjQ4Rjg1MDAzQzhDODIwMEVDQzMKKzoxMDI4QzAwMDEyMjJGRTdFMDI2MDIwMjEyNDA5MDAwNUEzODkwMDZDRUIKKzoxMDI4RDAwMDBFMDAxQTdCMjQxMUZGRkYxNDUxRkU3ODI0MDRGRkZGMjEKKzoxMDI4RTAwMDBBMDAxRDg2MjQwM0ZGRkY4RjhGMDA1MDhGODgwMDNDNTUKKzoxMDI4RjAwMDhERjgwMDAwQUQxODAwODg4REU3MDAxMEFEMDcwMDk4MzYKKzoxMDI5MDAwMDhGODcwMDY0MEEwMDFERTg4Rjg2MDA1ODI0MDdGRkZGQTgKKzoxMDI5MTAwMDExODcwMDA1MDAwMDAwMDAwRTAwMUI3RDAyNjAyMDIxRDEKKzoxMDI5MjAwMDBBMDAxREMxMDA0MEEwMjEwRTAwMUIwMjAyNjAyMDIxRjAKKzoxMDI5MzAwMDBBMDAxREMxMDA0MEEwMjE4RjkwMDA1MDNDMDkwODAwRjIKKzoxMDI5NDAwMDhEMjkzMUIwOEUxMTAwMTAzMjMyM0ZGRjAyNDk2ODJCQzEKKzoxMDI5NTAwMDExQTAwMDBDMjQwQUZGODA4Rjg1MDA1NDkwQUUwMDBENUEKKzoxMDI5NjAwMDAxNEUxMDI0MzA0QzAwRkYxMTgwMDAwNzAyNjAyMDIxMkUKKzoxMDI5NzAwMDAwMTFDMzgyMzMwMzAwMDMyNDBCMDAwMTEwNkIwMTA1MTcKKzoxMDI5ODAwMDAwMDAwMDAwMDI2MDIwMjEyNDE4MDAwRDBFMDAxQTdCQjgKKzoxMDI5OTAwMEEzOTgwMDZDMDA0MDIwMjE4Rjg1MDAzQzBBMDAxRDYzMzUKKzoxMDI5QTAwMDAwODBBMDIxOEY5MDAwNTAzQzBBMDgwMDhENEEzMUIwNzEKKzoxMDI5QjAwMDhGODUwMDU0OEUwNDAwMTAwMDAwQTAyMThDQjEwMDE0RkIKKzoxMDI5QzAwMDMwODIzRkZGMDA0QTYwMkI4Q0IyMDAyMDUxODBGRkVFMjYKKzoxMDI5RDAwMDAyNjAyMDIxOTBCODAwMEQyNDBCRkY4MDAxNzg3MDI0NDQKKzoxMDI5RTAwMDMxQzMwMEZGNTA2MEZGRTgwMjYwMjAyMTAwMDQ0MzgyRjEKKzoxMDI5RjAwMDMxMDYwMDAzMTRDMEZGRTQwMjYwMjAyMTk0QkYwMDFDRDQKKzoxMDJBMDAwMDhGOTkwMDNDOEUwNjAwMjhBNzNGMDBFODhDQUYwMDEwOEQKKzoxMDJBMTAwMDAyMkYyMDIzMTRDNDAxMzkwMjYwMjAyMThGODMwMDU4MjMKKzoxMDJBMjAwMDAwQzM2ODIxMDIyRDM4MkIxNEUwMDEzNTI0MDIwMDE4NjAKKzoxMDJBMzAwMDhGOEEwMDQ4OEY4MjAwMzQwMjQzOTAyMThENEIwMDEwMTIKKzoxMDJBNDAwMDAxNjM3MDIzQUQ0RTAwMTBBRDUyMDAyMDhDNEMwMDc0MTkKKzoxMDJBNTAwMDAxOTIyODJCMTRBMDAxNTYwMjYwMjAyMThGODQwMDU0N0IKKzoxMDJBNjAwMDhFMDgwMDI0OEM4NjAwMjQxMTA2MDAwNzAyNjAyMDIxQjUKKzoxMDJBNzAwMDI0MTkwMDFDMEUwMDFBN0JBMzk5MDA2QzI0MEZGRkZGODEKKzoxMDJBODAwMDEwNEZGRkM1MjQwNEZGRkY4Rjg0MDA0ODhDODcwMDI0NkIKKzoxMDJBOTAwMDI0RkYwMDAxQUM5RjAwMjQxMjUxMDEzMzhGOEQwMDM0QkMKKzoxMDJBQTAwMDhEQjEwMDc0MTIzMjAxMzAzQzBCMDA4MDhFMEUwMDAwOUMKKzoxMDJBQjAwMDAxQ0I1MDI0MTU0MDAwNzUwMDAwMDAwMDhFMDMwMDE0NjcKKzoxMDJBQzAwMDI0MTFGRkZGMTA3MTAwMDYwMjYwMjAyMTI0MTgwMDFCNTIKKzoxMDJBRDAwMDBFMDAxQTdCQTM5ODAwNkMxMDUxRkZBRjI0MDRGRkZGNzcKKzoxMDJBRTAwMDhFMDMwMDAwM0MwODAwMDEwMDY4MzAyNDEwQzAwMDEzNzEKKzoxMDJBRjAwMDNDMDQwMDgwMDA2NEEwMjQxNjgwMDAwOTAyMDAyODIxMDQKKzoxMDJCMDAwMDAyNjAyMDIxMjQxOTAwMUEwRTAwMUE3QkEzOTkwMDZDODAKKzoxMDJCMTAwMDI0MEZGRkZGMTA0RkZGQTAyNDA0RkZGRjAyMDAyODIxMTUKKzoxMDJCMjAwMDAyNjAyMDIxMEUwMDFBOUIyNDA2MDAwMTI0MTBGRkZGRTIKKzoxMDJCMzAwMDEwNTBGRjk5MjQwNEZGRkYyNDE0MDAwMThGOUYwMDQ4QzgKKzoxMDJCNDAwMDAyNjAyMDIxMDI4MDMwMjE5N0YxMDAzNDI0MDUwMDAxMjkKKzoxMDJCNTAwMDI2MjcwMDAxQTdFNzAwMzQwRTAwMTlEQTAwMDAwMDAwNjQKKzoxMDJCNjAwMDAwMDAyMDIxOEY4NTAwM0MwQTAwMUQ2MzAwODBBMDIxMDkKKzoxMDJCNzAwMDhGOTAwMDUwM0MxNDA4MDA4RTk0MzFCMDhFMDcwMDEwRTYKKzoxMDJCODAwMDMwRTgzRkZGMDExNDMwMkIxMEMwMDA2MThGODYwMDU0RTUKKzoxMDJCOTAwMDI0MUZGRjgwOTBDNTAwMEQwM0U1MjAyNDMwOTIwMEZGMjQKKzoxMDJCQTAwMDUyNDAwMDVDMDI2MDIwMjE4RjhEMDA1ODExQTAwMDA3NjgKKzoxMDJCQjAwMDAwMDc4QjgyOEY4NTAwM0M4Rjg5RkNDMDk0QUYwMDgwMUEKKzoxMDJCQzAwMDk1MzkwMDBBMTMyRjAwRjY4Rjg3MDA0NDMyMkMwMDAzM0EKKzoxMDJCRDAwMDE1ODAwMDYzMDAwMDAwMDA5MjAyMDAwMjEwNDAwMEQ3NDAKKzoxMDJCRTAwMDAwMDAwMDAwOEUwQTAwMjQxNTQwMDBEODAyNjAyMDIxNTkKKzoxMDJCRjAwMDkyMDQwMDAzMjQwNjAwMDIzMDg4MDBGRjE1MDYwMDA1MzkKKzoxMDJDMDAwMDMwODUwMEZGOEY5NDAwNTg1MjgwMDBGMjAyNjAyMDIxMkUKKzoxMDJDMTAwMDMwODUwMEZGMzhBRDAwMTAyREE0MDAwMTJDQkYwMDAxNEQKKzoxMDJDMjAwMDAzRTQzMDI1MDIwMDI4MjEwRTAwMUE5QjAyNjAyMDIxQjcKKzoxMDJDMzAwMDI0MTBGRkZGMTA1MDAwQkU4Rjg1MDAzQzhGODMwMDU4OEEKKzoxMDJDNDAwMDEwNjAwMEM0MjQwNTAwMDEzQzE5MDgwMDhGMzkzMThDNDQKKzoxMDJDNTAwMDAzMjM3ODJCMTVFMDAwQjEyNDA5MDAyRDAyNjAyMDIxMDgKKzoxMDJDNjAwMDAwMDAyODIxMEUwMDE5REEyNDA2MDAwMThGODUwMDNDOUYKKzoxMDJDNzAwMDAwMDAxODIxMEEwMDFENjMwMDYwQTAyMTBFMDAxOEE2QTQKKzoxMDJDODAwMDAwMDAwMDAwMEEwMDFFMjkwMDAwMDAwMEFDODAwMDIwQTcKKzoxMDJDOTAwMDBBMDAxRUE5OEUwMzAwMTQwMDAwMjgyMTAyNjAyMDIxRDIKKzoxMDJDQTAwMDBFMDAxOURBMjQwNjAwMDEwQTAwMUNGNDhGODUwMDNDOEUKKzoxMDJDQjAwMDBBMDAxREU4OEY4ODAwM0M4Q0IwMDA4NDhDQjkwMDg0MjkKKzoxMDJDQzAwMDNDMDMxMDAwMDIwNzQ4MjQwMDA5Njk0MDMzMkYwMDdGQUQKKzoxMDJDRDAwMDAxQUZGODI1MDNFMzI4MjVBQ0M1MDgzMDkxMDcwMDAxQjIKKzoxMDJDRTAwMDI0MDUwMDAxMDI2MDIwMjEwRTAwMTlEQTMwRTYwMDAxRkYKKzoxMDJDRjAwMDBBMDAxQ0Y0OEY4NTAwM0M5MzhGMDA0QzI0MDNGRkZERDkKKzoxMDJEMDAwMDBBMDAxRDY1QUY4RjAwNjQwQTAwMUQ2NTI0MDNGRkZGRTQKKzoxMDJEMTAwMDAyNjAyMDIxMjQxMDAwMEQwRTAwMUE3QkEzOTAwMDZDOEQKKzoxMDJEMjAwMDAwNDAxODIxOEY4NTAwM0MwQTAwMUQ2MzAwNjBBMDIxMkYKKzoxMDJEMzAwMDBFMDAxOEE2MDAwMDAwMDA5NzgzMDA2MDhGODYwMDY0RDQKKzoxMDJENDAwMDMwNzBGRkZGMDBEMDQ4MjMyRDM5MDAwNTEzMjBGRTEyRkMKKzoxMDJENTAwMDhGODUwMDNDQUNBMjAwRUMwQTAwMUQ2MDMwNjJGRkZGRDIKKzoxMDJENjAwMDkwQzMwMDBEMzA3ODAwMDg1NzAwRkZBMjkyMDQwMDAzQzIKKzoxMDJENzAwMDAyNjAyMDIxMjQwMjAwMTAwRTAwMUE3QkEzODIwMDZDNDYKKzoxMDJEODAwMDI0MDNGRkZGNTQ0M0ZGOUI5MjA0MDAwMzBBMDAxRjQzRTgKKzoxMDJEOTAwMDhGODUwMDNDOTBBODAwMEQzMTA2MDAwODEwQzAwMDk1RkEKKzoxMDJEQTAwMDhGOTQwMDU4MTY4MDAwOUUwMjYwMjAyMThFMEYwMDBDMjgKKzoxMDJEQjAwMDhDQTQwMDIwNTVFNDAwMDUwMjYwMjAyMThFMUYwMDA4MkQKKzoxMDJEQzAwMDhDQjkwMDI0MTNGOTAwM0EwMjYwMjAyMTI0MDIwMDIwNkIKKzoxMDJERDAwMDBFMDAxQTdCQTM4MjAwNkMyNDA1RkZGRjEwNDVGRUVFNTcKKzoxMDJERTAwMDI0MDRGRkZGOEY4RjAwNDgyNDBDRkZGNzI0MDNGRjgwOEIKKzoxMDJERjAwMDkxRTkwMDBEM0MxNDgwMEUzQzBCODAwMDAxMkNDODI0OEUKKzoxMDJFMDAwMEExRjkwMDBEOEY4RjAwMzQzQzA3MDgwMDhDRTczMUFDMkUKKzoxMDJFMTAwMDhGOEQwMDcwOTVFNTAwNzg4Rjk5MDA0ODAwRUQ5MDIxMjYKKzoxMDJFMjAwMDMwQkY3RkZGMDAxRjIwNDAwMjQ0MzAyMTMwQzgwMDdGQTgKKzoxMDJFMzAwMDAwQzNDMDI0MDExNDcwMjFBRDc4MDAyQ0E1RDEwMDAwN0UKKzoxMDJFNDAwMDhGMkEwMDI4MjU0MjAwMDFBRjIyMDAyODhGMjkwMDJDNUMKKzoxMDJFNTAwMDhFMEMwMDJDMDEyQzY4MjFBRjJEMDAyQzhFMDcwMDJDMkQKKzoxMDJFNjAwMEFGMjcwMDMwOEUwNTAwMTRBRjI1MDAzNDk3M0YwMDNBOUQKKzoxMDJFNzAwMDI3RTQwMDAxQTcyNDAwM0E5NUYyMDA3ODNDMTAwODAwRUUKKzoxMDJFODAwMDhFMTAzMUIwMjY0MzAwMDEzMDcxN0ZGRjEyMzAwMDVDOUMKKzoxMDJFOTAwMDAwNjAzMDIxOEY4MzAwMzQwMjYwMjAyMTI0MDUwMDAxNkUKKzoxMDJFQTAwMDBFMDAxOTY1QTQ2NjAwNzgwQTAwMUVEMjAwMDAyMDIxRDkKKzoxMDJFQjAwMDhFMDcwMDE0MjQxMkZGRkYxMEYyMDA2MzhGOEMwMDNDNzkKKzoxMDJFQzAwMDhFMDkwMDE4OEQ4RDAwRDAxNTJEMDA1RDAyNjAyMDIxMjcKKzoxMDJFRDAwMDhFMEEwMDI0OENBMjAwMjgxMTQyMDA1MzI0MDIwMDIxRjMKKzoxMDJFRTAwMDBFMDAxQTdCQTM4MjAwNkMxNDUyRkZCRTI0MDRGRkZGNjUKKzoxMDJFRjAwMDhGODUwMDNDMEEwMDFENjMwMDgwQTAyMTI0MDIwMDFGNzIKKzoxMDJGMDAwMDBFMDAxQTdCQTM4MjAwNkMyNDA5RkZGRjEwNDlGRUEyNjkKKzoxMDJGMTAwMDI0MDRGRkZGMEEwMDFFODU4RjgzMDA1ODAyNjAyMDIxRDEKKzoxMDJGMjAwMDBFMDAxQTdCQTM4OTAwNkMxNDUwRkY1MThGODUwMDNDNjIKKzoxMDJGMzAwMDI0MDNGRkZGMEEwMDFENjMwMDYwQTAyMThDQ0UwMDI0NDMKKzoxMDJGNDAwMDhFMEIwMDI0MTE2RUZGMkEwMjYwMjAyMTBBMDAxRjU3RjkKKzoxMDJGNTAwMDI0MDIwMDBGMEUwMDE5NjUwMjYwMjAyMThGODUwMDNDQkQKKzoxMDJGNjAwMDBBMDAxRjE2MDAwMDE4MjE4RTA5MDAwMDNDMDUwMDgwOTEKKzoxMDJGNzAwMDAxMjU5MDI0MTY0MEZGNDUyNDAyMDAxQTAyNjAyMDIxRkEKKzoxMDJGODAwMDBFMDAxQTdCQTM4MjAwNkMyNDBDRkZGRjE0NENGRUNCQjYKKzoxMDJGOTAwMDI0MDRGRkZGOEY4NTAwM0MwQTAwMUQ2MzAwODBBMDIxRjAKKzoxMDJGQTAwMDI0MDNGRkZEMDA2MEEwMjEwQTAwMUQ2M0FGODcwMDY0QjkKKzoxMDJGQjAwMDI0MTgwMDFEMEUwMDFBN0JBMzk4MDA2QzI0MDNGRkZGNDkKKzoxMDJGQzAwMDE0NDNGRUE2MjQwNEZGRkY4Rjg1MDAzQzBBMDAxRDYzMDYKKzoxMDJGRDAwMDAwODBBMDIxMjQxMjAwMkMwRTAwMUE3QkEzOTIwMDZDMEEKKzoxMDJGRTAwMDI0MDNGRkZGMTA0M0ZGNTA4Rjg1MDAzQzBBMDAxRUZEQTUKKzoxMDJGRjAwMDkyMDQwMDAzMDI2MDIwMjEwQTAwMUY2RDI0MDIwMDI0QjUKKzoxMDMwMDAwMDI0MEI4MDAwMDA2QjcwMjQzMUNBRkZGRjAwMEExM0MyM0EKKzoxMDMwMTAwMDMwNTEwMEZGMDAxMTgwMjcwQTAwMUY5RTAwMTAzM0MwQUUKKzoxMDMwMjAwMDBBMDAxRjZEMjQwMjAwMjc4RTA2MDAyODhDQUUwMDJDOUIKKzoxMDMwMzAwMDEwQ0UwMDA4MDI2MDIwMjEwQTAwMUZCMTI0MDIwMDFGRTgKKzoxMDMwNDAwMDBBMDAxRkIxMjQwMjAwMEUwMjYwMjAyMTBBMDAxRkIxRjUKKzoxMDMwNTAwMDI0MDIwMDI1OEUwNDAwMkMxMDgwMDAwRDhGODMwMDM0ODQKKzoxMDMwNjAwMDhDNzgwMDc0MDMwNDU4MkI1NTYwMDAwQzAyNjAyMDIxRkEKKzoxMDMwNzAwMDhDQTgwMDE0MDA4NkEwMjEwMTE0MzAyQjEwQzBGRjVBMjgKKzoxMDMwODAwMDhGOEYwMDQ4MDI2MDIwMjEwQTAwMUZCMTI0MDIwMDIyMTUKKzoxMDMwOTAwMDAyNjAyMDIxMEEwMDFGQjEyNDAyMDAyMzBBMDAxRkIxOTAKKzoxMDMwQTAwMDI0MDIwMDI2MjdCREZGRDhBRkIzMDAxQ0FGQjEwMDE0MjcKKzoxMDMwQjAwMEFGQkYwMDIwQUZCMjAwMThBRkIwMDAxMDNDMDI4MDAwREMKKzoxMDMwQzAwMDhDNTIwMTQwOEM0QjAxNDgzQzA0ODAwMDAwMEI4QzAyNjgKKzoxMDMwRDAwMDMyMjMwMEZGMzE3MzAwRkY4Qzg1MDFCODA0QTBGRkZFOEUKKzoxMDMwRTAwMDM0OTAwMTgwQUUxMjAwMDA4Qzg3MDE0NDI0NjRGRkYwMEMKKzoxMDMwRjAwMDI0MDYwMDAyMkM4MzAwMTNBRTA3MDAwNEE2MTEwMDA4NkEKKzoxMDMxMDAwMEEyMDYwMDBCQUUxMzAwMjQxMDYwMDA0RjhGQkYwMDIwRkEKKzoxMDMxMTAwMDAwMDQ0ODgwM0MwQTA4MDEyNTRBOTVENDAxMkE0MDIxMzAKKzoxMDMxMjAwMDhEMDQwMDAwMDA4MDAwMDgwMDAwMDAwMDNDMDMwODAwM0YKKzoxMDMxMzAwMDhDNjMzMUE4MzE2OTNGRkYwMDA5OTk4MDAwNzI4MDIxQkEKKzoxMDMxNDAwMDAyMTM3MDIxMjQwNUZGODAyNjREMDEwMDI2NEMwMDgwQ0IKKzoxMDMxNTAwMDNDMDI4MDAwMzFCMTAwN0YzMTk4MDA3RjMxQ0EwMDdGOEUKKzoxMDMxNjAwMDNDMUY4MDBBM0MxOTgwMDQzQzBGODAwQzAxQzUyMDI0QzAKKzoxMDMxNzAwMDAxQTUzMDI0MDE4NTM4MjQwMTRGMTgyMUFDNDYwMDI0RDQKKzoxMDMxODAwMDAyM0Y0MDIxMDMxOTQ4MjFBQzQ3MDA5MEFDNDQwMDI4N0QKKzoxMDMxOTAwMEFGODMwMDQ4QUY4ODAwM0NBRjg5MDAzNDBFMDAxOTMxN0UKKzoxMDMxQTAwMDAxNjA4MDIxM0MwMzgwMDA4QzZCMDFCODA1NjBGRkZFNEMKKzoxMDMxQjAwMDhGODcwMDQ4OEY4NjAwM0MzNDY1MDE4MDkwRTgwMDBEQzEKKzoxMDMxQzAwMEFDQjIwMDAwQTRCMDAwMDYwMDA4MjYwMDAwMDQxNjAzRkMKKzoxMDMxRDAwMDAwMDI5MDI3MDAxMjI3QzIxMDgwMDA4MTI0QzIwMDg4QkMKKzoxMDMxRTAwMDI0MUY2MDgyQTRCRjAwMDhBMEEwMDAwNTI0MDIwMDAyRTIKKzoxMDMxRjAwMEEwQTIwMDBCOEY4QjAwMzQwMDA0MjQwMDNDMDgyNzAwQTEKKzoxMDMyMDAwMDAwODg5MDI1QUNCMjAwMTBBQ0EwMDAxNEFDQTAwMDI0NDMKKzoxMDMyMTAwMEFDQTAwMDI4QUNBMDAwMkM4RDY5MDAzODI0MTNGRjgwREUKKzoxMDMyMjAwMEFDQTkwMDE4OTBFMzAwMEQwMjYzODAyNDMyMDUwMEZGNzIKKzoxMDMyMzAwMDEwQTAwMDA1OEZCRjAwMjA5MEVEMDAwRDMxQUMwMDdGODUKKzoxMDMyNDAwMEEwRUMwMDBEOEZCRjAwMjA4RkIzMDAxQzhGQjIwMDE4QzAKKzoxMDMyNTAwMDhGQjEwMDE0OEZCMDAwMTAzQzBBMTAwMDNDMEU4MDAwQUIKKzoxMDMyNjAwMDI3QkQwMDI4MDNFMDAwMDhBRENBMDFCODI2NUYwMTAwQjEKKzoxMDMyNzAwMDI0MDVGRjgwMzNGODAwN0YzQzA2ODAwMDAzRTU3ODI0QjYKKzoxMDMyODAwMDNDMTk4MDBBMDMxOTIwMjFBQ0NGMDAyNDkwOEUwMEQ0NzEKKzoxMDMyOTAwMDAwQUU2ODI0MzFBQzAwRkYxMTgwMDAyNEFGODQwMDNDRjQKKzoxMDMyQTAwMDI0OEUwMDg4OTVDRDAwMTIzQzBDMDgwMDhEOEMzMUE4MkUKKzoxMDMyQjAwMDMxQUIzRkZGMDE5MjQ4MjEwMDBCNTE4MDAxMkE0MDIxOTAKKzoxMDMyQzAwMDAxMDUyMDI0QUNDNDAwMjgzMTA3MDA3RjNDMDY4MDBDOTcKKzoxMDMyRDAwMDAwRTYyMDIxOTA4MzAwMEQwMEEzMTAyNDMwNDUwMEZGNUMKKzoxMDMyRTAwMDEwQTBGRkQ4QUY4NDAwNDg5MDk4MDAwRDMzMEYwMDEwNTUKKzoxMDMyRjAwMDE1RTBGRkQ1OEZCRjAwMjAwRTAwMTkzMTAwMDAwMDAwM0YKKzoxMDMzMDAwMDNDMDM4MDAwOEM3OTAxQjgwNzIwRkZGRTAwMDAwMDAwMUMKKzoxMDMzMTAwMEFFMTIwMDAwOEM3RjAxNDRBRTFGMDAwNEE2MTEwMDA4MEQKKzoxMDMzMjAwMDI0MTEwMDAyQTIxMTAwMEJBRTEzMDAyNDNDMTMwODAxNkIKKzoxMDMzMzAwMDkyNzM5NzkwMzI3MDAwMDE1MjAwRkZDMzhGQkYwMDIwM0MKKzoxMDMzNDAwMDBFMDAyMTZFMDI0MDIwMjEwQTAwMjA4QjhGQkYwMDIwM0EKKzoxMDMzNTAwMDNDMTI2MDAwOEU0NTJDMDgzQzAzRjAwMzM0NjJGRkZGRjIKKzoxMDMzNjAwMDAwQTJGODI0QUU1RjJDMDg4RTU4MkMwODNDMTkwMUMwMkUKKzoxMDMzNzAwMDAzMTk5ODI1QUU1MzJDMDgwQTAwMjA4QjhGQkYwMDIwMUMKKzoxMDMzODAwMDI2NEQwMTAwMzFBRjAwN0YzQzEwODAwQTI0MEVGRjgwRTMKKzoxMDMzOTAwMDAxRjAyODIxMDFBRTYwMjQzQzBCODAwMEFENkMwMDI0QkMKKzoxMDMzQTAwMDE2NjBGRkE4QUY4NTAwM0MyNDExMDAwM0EwQjEwMEZDMEIKKzoxMDMzQjAwMDBBMDAyMDhCOEZCRjAwMjAyNjQ4MDEwMDMxMEEwMDdGQzEKKzoxMDMzQzAwMDNDMEI4MDBBMjQwOUZGODAwMTRCMzAyMTAxMDkyMDI0OTUKKzoxMDMzRDAwMDNDMDc4MDAwQUNFNDAwMjQwQTAwMjA4QUFGODYwMDNDNTEKKzoxMDMzRTAwMDk0NEUwMDEyMzIwQzNGRkYzMUNEM0ZGRjE1QUNGRjdERjQKKzoxMDMzRjAwMDI0MUY2MDgyOTBEOTAwRDQyNDE4RkY4MDAzMTk3ODI0RjgKKzoxMDM0MDAwMDMxRUEwMEZGMTE0MEZGNzcwMDAwMDAwMDI0MDcwMDA0QUMKKzoxMDM0MTAwMEEwQzcwMEZDOEY4NzAwNDgyNDExNjA4NDI0MDYwMDBEOUIKKzoxMDM0MjAwMEE0QjEwMDA4QTBBNjAwMDUwQTAwMjA3NTI0MDIwMDAyMkQKKzoxMDM0MzAwMDNDMDQwMDAxMjQ4NDk3N0MyNDAzMDAxNDI0MDIwMEZFMzEKKzoxMDM0NDAwMDNDMDEwODAwQUMyNDMxRUMzQzAxMDgwMEFDMjMzMUU4MUQKKzoxMDM0NTAwMDNDMDEwODAxQTQyMjk3OTgzQzA0MDgwMTI0ODQ5Nzk4MTEKKzoxMDM0NjAwMDAwMDAxODIxMDA2NDMwMjFBMEMzMDAwNDI0NjMwMDAxN0YKKzoxMDM0NzAwMDJDNjUwMEZGNTRBMEZGRkMwMDY0MzAyMTNDMDcwODAwQ0QKKzoxMDM0ODAwMDI0RTcwMTAwMDNFMDAwMDhBRjg3MDA3QzAwQTA1ODIxN0EKKzoxMDM0OTAwMDAwODA0ODIxMDAwMDEwMjExNEEwMDAxMjAwMDA1MDIxREIKKzoxMDM0QTAwMDBBMDAyMTZBMDAwMDAwMDAzQzAxMDgwMUE0MjA5Nzk4NEUKKzoxMDM0QjAwMDNDMDUwODAxOTRBNTk3OTg4RjgyMDA3QzNDMEMwODAxN0MKKzoxMDM0QzAwMDI1OEM5Nzk4MDBFMjE4MjEwMEFDMjAyMTAxNEIzMDJCNkQKKzoxMDM0RDAwMEEwODkwMDA0MDAwMDEwMjFBNDYwMDAwODEwQzAwMDM5NzkKKzoxMDM0RTAwMDAxMDA0ODIxOEY4NjAwN0MwMDA5Mzg0MDAwRTk0MDIxMTYKKzoxMDM0RjAwMDAwMDgzODgwMDBFNjI4MjE5MEE4MDAwQjkwQjkwMDBBNDcKKzoxMDM1MDAwMDAwMDgyMDQwMDA4ODEwMjEwMDAyMTg4MDAwNjZDMDIxQjkKKzoxMDM1MTAwMEEzMTkwMDBBOEY4NTAwN0MwMEU1NzgyMTkxRUUwMDBBNEUKKzoxMDM1MjAwMDkxRTYwMDBCMDAwRTY4NDAwMUFFNjAyMTAwMEMyMDgwODcKKzoxMDM1MzAwMDAwODUxMDIxQTA0NjAwMEIzQzAzMDgwMTkwNjM5NzkyODAKKzoxMDM1NDAwMDEwNjAwMDIyMjQ2MkZGRkY4RjgzMDAzQzNDMDEwODAxRDEKKzoxMDM1NTAwMEEwMjI5NzkyOTA2QzAwRkYxMTgwMDAwNDAwMDAwMDAwRjAKKzoxMDM1NjAwMDkwNkUwMEZGMjVDREZGRkZBMDZEMDBGRjNDMTkwODAxMDQKKzoxMDM1NzAwMDk3Mzk5Nzk4MjcyMzAwMDEzMDc4RkZGRjJGMEYwMEZGMUUKKzoxMDM1ODAwMDExRTBGRkM5MjU0QTAwMDEzQzAxMDgwMUE0MjM5Nzk4RDYKKzoxMDM1OTAwMDNDMDUwODAxOTRBNTk3OTg4RjgyMDA3QzNDMEMwODAxOUIKKzoxMDM1QTAwMDI1OEM5Nzk4MDBFMjE4MjEwMEFDMjAyMTAxNEIzMDJCOEMKKzoxMDM1QjAwMEEwODkwMDA0MDAwMDEwMjFBNDYwMDAwODE0QzBGRkM5MDUKKzoxMDM1QzAwMDAxMDA0ODIxMDNFMDAwMDgwMDAwMDAwMDAzRTAwMDA4QkIKKzoxMDM1RDAwMDI0MDIwMDAyMjdCREZGRTAyNDg1MDEwMDI0MDdGRjgwQUMKKzoxMDM1RTAwMEFGQjAwMDEwQUZCRjAwMThBRkIxMDAxNDAwQTcxODI0OEYKKzoxMDM1RjAwMDNDMTA4MDAwMzBBNDAwN0YzQzA2ODAwQTAwODYyODIxMTEKKzoxMDM2MDAwMDhFMTEwMDI0QUUwMzAwMjQ5MEEyMDBGRjE0NDAwMDA4OTUKKzoxMDM2MTAwMEFGODUwMDNDQTBBMDAwMDk4RkJGMDAxOEFFMTEwMDI0QTgKKzoxMDM2MjAwMDhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwODI3QkQwMDIwMDgKKzoxMDM2MzAwMDkwQTkwMEZEOTBBODAwRkYzMTI0MDBGRjBFMDAyMTFDN0UKKzoxMDM2NDAwMDMxMDUwMEZGOEY4NTAwM0M4RkJGMDAxOEEwQTAwMDA5NDYKKzoxMDM2NTAwMEFFMTEwMDI0OEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4RjkKKzoxMDM2NjAwMDI3QkQwMDIwMjdCREZGRDBBRkIyMDAyMEFGQjEwMDFDQTYKKzoxMDM2NzAwMEFGQjAwMDE4QUZCRjAwMkNBRkI0MDAyOEFGQjMwMDI0MjgKKzoxMDM2ODAwMDNDMDk4MDAwOTUzMzAxMTYzNTMyMEMwMDk1MkYwMTFBNDQKKzoxMDM2OTAwMDMyNzFGRkZGMDIzMjgwMjE4RTA4MDAwNDMxRUVGRkZGRkQKKzoxMDM2QTAwMDI0OEIwMTAwMDEwRTY4MjEyNDBDRkY4MDI1QTVGRkZGNUIKKzoxMDM2QjAwMDAxNkM1MDI0MzE2NjAwN0YzQzA3ODAwQUFEMkEwMDI0NEIKKzoxMDM2QzAwMDAwQzczMDIxQUY4NTAwNzhBRjg4MDA3NDNDMDEwODAxNDUKKzoxMDM2RDAwMEEwMjA5NzkxOTBDMzAwMDkwMjAwRDAyMTAwODA5ODIxN0EKKzoxMDM2RTAwMDMwNjMwMEZGMjg2MjAwMDUxMDQwMDA0OEFGODYwMDNDQjAKKzoxMDM2RjAwMDI4NjQwMDAyMTQ4MDAwOEUyNDE0MDAwMTI0MEQwMDA1QUIKKzoxMDM3MDAwMDNDMDEwODAxQTAyRDk3NzU5MENDMDBGRDNDMDEwODAxRkIKKzoxMDM3MTAwMEEwMjA5Nzc2M0MwMTA4MDFBMDIwOTc3NzkwQ0IwMDBBNjMKKzoxMDM3MjAwMDI0MEFGRjgwMzE4NTAwRkYwMTRCNDgyNDMxMjcwMEZGMjgKKzoxMDM3MzAwMDEwRTAwMDBDMDAwMDU4MjEzQzEyODAwODM2NTEwMDgwMzcKKzoxMDM3NDAwMDhFMkYwMDMwOENEMDAwNUMwMUYwNzAyMzA1QzAwMThFRkMKKzoxMDM3NTAwMDhGODcwMDc0OTBENDAwMEEzMjg0MDA3RkEwQzQwMDBBQ0UKKzoxMDM3NjAwMDhGODYwMDNDM0MxMTgwMDgzNjMwMDA4MDhFMEYwMDMwODAKKzoxMDM3NzAwMDhGODcwMDc0MDBFRjcwMjMxOUMwMDBFRTAwMDAwMDAwNzYKKzoxMDM3ODAwMDkwRDQwMDA5MjQxMjAwMDIzMjg0MDBGRjEwOTIwMjQ3RjQKKzoxMDM3OTAwMDAwMDAwMDAwOENDMjAwNTgwMEUyRjgyMzI3RjlGRkZGNjgKKzoxMDM3QTAwMDFCMjAwMTMwMDAwMDAwMDA5MEM1MDAwOTI0MDgwMDA0MUYKKzoxMDM3QjAwMDMwQTMwMEZGMTA2ODAwNTcyNDBBMDAwMTNDMDEwODAxRjMKKzoxMDM3QzAwMEEwMkE5Nzc1OTBDOTAwRkYyNTI3MDAwMTNDMDEwODAxMzgKKzoxMDM3RDAwMEEwMjc5Nzc0M0MwMzA4MDE5MDYzOTc3NTI0MDYwMDA1QTEKKzoxMDM3RTAwMDEwNjYwMDZBMkM3ODAwMDUxMzAwMDBDNDAwMDA5MDIxQzgKKzoxMDM3RjAwMDAwMDNGODgwM0MwNDA4MDEyNDg0OTYyMDAzRTRDODIxRDcKKzoxMDM4MDAwMDhGMjUwMDAwMDBBMDAwMDgwMDAwMDAwMDI0MTgwMEZGMjEKKzoxMDM4MTAwMDEwNzgwMDVDMDAwMDAwMDA5MENDMDAwQTkwQ0EwMDA5RkIKKzoxMDM4MjAwMDNDMDgwODAxOTEwODk3OTEzMTg3MDA4MDAwRUE0ODI1RkIKKzoxMDM4MzAwMDNDMDEwODAxQTAyOTk3N0M5MEM1MDBGRDNDMTQwODAxQkIKKzoxMDM4NDAwMDkyOTQ5NzkyMzExMTAwMDEzQzAxMDgwMUEwMjU5NzdEQzcKKzoxMDM4NTAwMDkwREYwMEZFM0MwMTA4MDFBMDNGOTc3RTkwRDIwMEZGNjAKKzoxMDM4NjAwMDNDMDEwODAxQTAzMjk3N0Y4Q0Q5MDA1NDNDMDEwODAxMkIKKzoxMDM4NzAwMEFDMzk5NzgwOENEMDAwNTgzQzAxMDgwMUFDMzA5Nzg0NUIKKzoxMDM4ODAwMDhDQzMwMDVDM0MwMTA4MDFBQzM0OTc4QzNDMDEwODAxRkUKKzoxMDM4OTAwMEFDMjM5Nzg4MTYyMDAwMDg4RkJGMDAyQzhGQjQwMDI4MTcKKzoxMDM4QTAwMDhGQjMwMDI0OEZCMjAwMjA4RkIxMDAxQzhGQjAwMDE4OUUKKzoxMDM4QjAwMDAzRTAwMDA4MjdCRDAwMzAzQzExODAwMDk2MjQwMTBFNzMKKzoxMDM4QzAwMDBFMDAwRkQ0MzA5NEZGRkYzQzBCMDgwMThENkI5Nzk0RDIKKzoxMDM4RDAwMDAyNjAzODIxMDI4MDI4MjFBRTJCMDE4MDNDMTMwODAxQjAKKzoxMDM4RTAwMDhFNzM5Nzc0MDE2MDIwMjEyNDA2MDA4MzBFMDAxMDJGMzAKKzoxMDM4RjAwMEFGQjMwMDEwOEZCRjAwMkM4RkI0MDAyODhGQjMwMDI0MEIKKzoxMDM5MDAwMDhGQjIwMDIwOEZCMTAwMUM4RkIwMDAxODAzRTAwMDA4QjgKKzoxMDM5MTAwMDI3QkQwMDMwM0MxODA4MDA4RjE4MzFGQzI3MEYwMDAxMkMKKzoxMDM5MjAwMDNDMDEwODAwQUMyRjMxRkMwQTAwMjFGRjAwMDAwMDAwMjAKKzoxMDM5MzAwMDE0NzRGRkI5MDAwMDAwMDBBMEMwMDBGRjNDMDUwODAwOUYKKzoxMDM5NDAwMDhDQTUzMUU0M0MwMzA4MDA4QzYzMzFFMDNDMDIwODAwQTQKKzoxMDM5NTAwMDhDNDIzMjA0OEY5OTAwM0MzNEE4MDAwMTI0MUYwMDAyREQKKzoxMDM5NjAwMDNDMDEwODAxQUMyMzk3OTQzQzAxMDgwMUEwMjg5NzkwRTIKKzoxMDM5NzAwMDNDMDEwODAxQTAyMjk3OTNBMzNGMDAwOTBBMDAyMUI4NDcKKzoxMDM5ODAwMDhGODYwMDNDMEUwMDIxNkUwMDAwMDAwMDBBMDAyMUZGMUYKKzoxMDM5OTAwMDhGODYwMDNDM0MxRjA4MDE5M0ZGOTc3NDI0MTkwMDAxOTcKKzoxMDM5QTAwMDEzRjkwMjI5OEY4NzAwNzQzQzEwMDgwMTkyMTA5Nzc4NTAKKzoxMDM5QjAwMDNDMDYwODAxOTBDNjk3NzYxMEMwMDAwNTAyMDBBMDIxQzEKKzoxMDM5QzAwMDNDMDQwODAxOTA4NDk3NzkxMDkwMDFFNDhGODcwMDdDNzMKKzoxMDM5RDAwMDAwMTA4ODQwOEY5RjAwN0MwMjMwNDgyMTAwMDlDODgwNzkKKzoxMDM5RTAwMDAzM0Y3MDIxOTVEODAwMDgyNzBGMDAwMUE1Q0YwMDA4REMKKzoxMDM5RjAwMDNDMDQwODAxOTA4NDk3NzkzQzA1MDgwMTkwQTU5Nzc2Q0UKKzoxMDNBMDAwMDBFMDAyMTFDMDAwMDAwMDA4Rjg3MDA3QzAyMzAyMDIxNjYKKzoxMDNBMTAwMDAwMDQzMDgwMDBDNzIwMjE4Qzg1MDAwNDhGODIwMDc4NEMKKzoxMDNBMjAwMDAwQTI0MDIzMDUwMjAwMDZBQzgyMDAwNDhDOEEwMDAwM0MKKzoxMDNBMzAwMDhGODMwMDc0MDE0MzEwMjM1QzQwMDAwMUFDODMwMDAwQkQKKzoxMDNBNDAwMDhGODYwMDNDOTBDQjAwRkYyRDZDMDAwMjU1ODAwMDJEMkUKKzoxMDNBNTAwMDI0MTQwMDAxMDIzMEY4MjEwMDFGNDA4MDAxMDcyODIxQjIKKzoxMDNBNjAwMDkwQjkwMDBCOENBRTAwMDQwMDE5QzA0MDAzMTk3ODIxRjYKKzoxMDNBNzAwMDAwMEYxODgwMDA2NzEwMjE4QzREMDAwMDAxQUU4ODIzRDQKKzoxMDNBODAwMDI2MzBGRkZGNUUwMDAwMUYyNDE0MDAwMThDNDQwMDA0NTgKKzoxMDNBOTAwMDhDQUEwMDAwMDA4QTQ4MjMxOTIwMDAxOTI0MEUwMDA0NzMKKzoxMDNBQTAwMDNDMDEwODAxQTAyRTk3NzU5MEFEMDAwQjhDQUIwMDA0NzMKKzoxMDNBQjAwMDAwMEQ4ODQwMDIyRDgwMjEwMDEwMTA4MDAwNDcxMDIxNDkKKzoxMDNBQzAwMDhDNDQwMDA0MDE2NDYwMjMwNTgyMDIwMDk0NDMwMDA4RDIKKzoxMDNBRDAwMDkwREYwMEZFOTBCOTAwMEIzM0U1MDBGRjU0QjkwMDA0RkQKKzoxMDNBRTAwMDAxMDdBMDIxQTBENDAwRkU4Rjg3MDA3QzAxMDdBMDIxNDAKKzoxMDNBRjAwMDkyODQwMDBCMEUwMDIxMUMyNDA1MDAwMThGODYwMDNDREYKKzoxMDNCMDAwMDI0MTQwMDAxMTI1NDAwOTYyRTUwMDAwMTE2MDAwMDQyQTkKKzoxMDNCMTAwMDNDMDhGRkZGMjQxOTAwMDIxNjU5RkYzRjAwMDAwMDAwNzcKKzoxMDNCMjAwMEEwQzAwMEZGOEY4NjAwM0NBMEQyMDAwOTBBMDAyMUZGNDAKKzoxMDNCMzAwMDhGODYwMDNDOTBDNzAwMDkyNDA0MDAwMjMwRTMwMEZGOTgKKzoxMDNCNDAwMDEwNjQwMTZGMjQwOTAwMDQxMDY5MDE1MjhGODgwMDc4MDUKKzoxMDNCNTAwMDhDQ0UwMDU0MDEwRTY4MjMyNUIxMDAwMTA2MjAwMTc1QUEKKzoxMDNCNjAwMDI0MTgwMDA0M0MwMTA4MDFBMDM4OTc3NTNDMDEwODAxQTUKKzoxMDNCNzAwMEEwMjA5Nzc0OTBENDAwRkQ5MEQyMDBGRjJFNEYwMDAyMzkKKzoxMDNCODAwMDE1RTBGRjE0MzI4NDAwRkYwMDA0Mzg0MDhGODkwMDdDNjgKKzoxMDNCOTAwMDkwREYwMEZGMDBFNDEwMjEwMDAyMjA4MDAwODlDODIxOEUKKzoxMDNCQTAwMDJGRTUwMDAyOTMyNDAwMEIxNEEwRkYwQTI0MDcwMDAyNTMKKzoxMDNCQjAwMDAwMDQxODQwMDA2NDgwMjEwMDEwNTg4MDAxNjkyODIxMDkKKzoxMDNCQzAwMDhDQUMwMDA0MDEwQzUwMjMwNTQwRkYwMjAwMDAwMDAwRjMKKzoxMDNCRDAwMDNDMDMwODAxOTA2Mzk3NzYxNDYwMDAwNTI0NkYwMDAxOTAKKzoxMDNCRTAwMDNDMDEwODAxQTAyNDk3NzkzQzAxMDgwMUEwMjc5Nzc3QTAKKzoxMDNCRjAwMDNDMDEwODAxQTAyRjk3NzY5MENFMDBGRjI0RTcwMDAxM0EKKzoxMDNDMDAwMDMxQ0QwMEZGMDFBNzg4MkIxMjIwRkZFOTkwQTQwMDBCMDMKKzoxMDNDMTAwMDBBMDAyMUVFMDAwMDAwMDAzQzA1MDgwMThDQTU5Nzc0MDUKKzoxMDNDMjAwMDNDMTIwMDA0MDBBOEY4MjQxM0YyMDAwNjI0MDIwMDA1NDgKKzoxMDNDMzAwMDNDMDkwODAxOTEyOTk3NzUxNTIwMDAwMjI0MDIwMDAzMTAKKzoxMDNDNDAwMDI0MDIwMDA1M0MwMTA4MDFBMDIyOTc5MTkwQzcwMEZGQzMKKzoxMDNDNTAwMDE0RTAwMTIwMjQwMjAwMDJBMEMyMDAwOTBBMDAyMUZGOTIKKzoxMDNDNjAwMDhGODYwMDNDOTBDQzAwRkYxMTgwRkVEQTI0MEEwMDAxMTAKKzoxMDNDNzAwMDhGOEMwMDc4OEY4OTAwN0MyNDBGMDAwMzAxODA2ODIxREQKKzoxMDNDODAwMDExNjAwMDFFMjQwRTAwMDIwMDA1NDA0MDAxMDVBMDIxMjUKKzoxMDNDOTAwMDAwMTQyMDgwMDA4OTkwMjE4RTUxMDAwNDAxOTE4MDIzMUUKKzoxMDNDQTAwMDA2MDBGRUNDMDAwMDAwMDAzQzAyMDgwMTkwNDI5Nzc2MUUKKzoxMDNDQjAwMDE0NDAwMDA1MjQ1ODAwMDEzQzAxMDgwMUEwMkE5Nzc3MTAKKzoxMDNDQzAwMDNDMDEwODAxQTAyNTk3NzkzQzAxMDgwMUEwMzg5Nzc2QUUKKzoxMDNDRDAwMDkwREYwMEZGMDEwNTEwMjEwMDAyQzg4MDMzRTUwMEZGREUKKzoxMDNDRTAwMDI1NEEwMDAxMDMyOTIwMjEwMEFBNDAyQjE1MDBGRUI5MTYKKzoxMDNDRjAwMDkwODUwMDBCMTU2MEZGRTUwMDA1NDA0MDAwMDU0MDQwNDEKKzoxMDNEMDAwMDAxMDUxODIxMDAwMzEwODAzQzAxMDgwMUEwMkE5Nzc0QzYKKzoxMDNEMTAwMDNDMDEwODAxQTAyNTk3NzgwMDQ5MTgyMThDNjQwMDA0MTMKKzoxMDNEMjAwMDAwRTRGODIzMjdGOUZGRkYxRjIwRkZFOTAwMDAwMDAwNEYKKzoxMDNEMzAwMDhDNjMwMDAwMDBFMzU4MjMwNTYwMDEzQTAxQTM4ODIzNDcKKzoxMDNENDAwMDEwRTMwMTE3MDE4NEMwMjMxQjAwRkVBMjAwMDAwMDAwNDUKKzoxMDNENTAwMDNDMDEwODAxQTAyRTk3NzUwQTAwMjMyRDI0MEIwMDAxQjkKKzoxMDNENjAwMDI0MEUwMDA0QTBDRTAwMDkzQzBEMDgwMDhEQUQzMUY4RjIKKzoxMDNENzAwMDhGODYwMDNDMjVBMjAwMDEzQzAxMDgwMEFDMjIzMUY4RUUKKzoxMDNEODAwMDBBMDAyMUZGMDAwMDAwMDA4Q0Q5MDA1QzAwRjlDMDIzNkMKKzoxMDNEOTAwMDFGMDBGRTdCMDAwMDAwMDA4Q0RGMDA1QzEwRkZGRjY1NTEKKzoxMDNEQTAwMDhGODQwMDc4OENDMzAwNUMwMDgzNDAyMzI1MDIwMDAxQ0YKKzoxMDNEQjAwMDFDNDBGRjYwMDAwMDAwMDA4Q0M5MDA1QzI0ODcwMDAxRUIKKzoxMDNEQzAwMDAwRTkyODJCMTBBMEZFOTQzQzBEODAwMDhEQUIwMTA0NkYKKzoxMDNERDAwMDNDMEMwMDAxMDE2QzUwMjQxMTQwRkU4RjI0MDIwMDEwQTUKKzoxMDNERTAwMDNDMDEwODAxQTAyMjk3OTEwQTAwMjFGRjAwMDAwMDAwNzkKKzoxMDNERjAwMDhGOTEwMDc4OEY4NjAwM0MyNjIyMDAwMUFDQzIwMDVDQzcKKzoxMDNFMDAwMDBBMDAyMkJBMjQxNDAwMDE4Rjg3MDAzQzI0MDRGRjgwOUEKKzoxMDNFMTAwMDAwMDA4ODIxOTBFOTAwMEEyNDE0MDAwMTAxMjQzMDI1QzMKKzoxMDNFMjAwMEEwRTYwMDBBM0MwNTA4MDE5MEE1OTc3NjNDMDQwODAxMkQKKzoxMDNFMzAwMDkwODQ5Nzc5MEUwMDIxMUMwMDAwMDAwMDhGODYwMDNDQzIKKzoxMDNFNDAwMDhGODUwMDdDOTBDODAwRkQzMTA3MDBGRjAwMDc0MDQwQ0YKKzoxMDNFNTAwMDAxMDdGODIxMDAxRkMwODAwMzA1QzgyMTkzMjMwMDBCMzAKKzoxMDNFNjAwMEEwQzMwMEZEOEY4NTAwN0M4Rjg2MDAzQzAzMDU2MDIxODgKKzoxMDNFNzAwMDkxOEYwMDBCMDAwRjcwNDAwMUNGNjgyMTAwMEQ4MDgwRjIKKzoxMDNFODAwMDAyMDUxMDIxOEM0QjAwMDBBQ0NCMDA1NDhEODQwMDA0NDMKKzoxMDNFOTAwMDhGODMwMDc4MDA2NDUwMjMxOTQwMDAwMjI0ODIwMDAxQkYKKzoxMDNFQTAwMDI0NjIwMDAxMDEwNzQ4MjFBQ0MyMDA1QzAwMDkzMDgwOTcKKzoxMDNFQjAwMDAwQzU0MDIxMDBFMDIwMjEyNDA1MDAwMTBFMDAyMTFDNDYKKzoxMDNFQzAwMDkxMTAwMDBCOEY4NjAwM0M5MEM1MDBGRjEwQTBGRjBDRTYKKzoxMDNFRDAwMDAwMTA3MDQwOEY4NTAwN0MwMUQwNjgyMTAwMEQxMDgwOUIKKzoxMDNFRTAwMDAwNDU1ODIxOEQ2NDAwMDA4RjhDMDA3ODAxODQ1MDIzOTgKKzoxMDNFRjAwMDI1NDcwMDAxMDRFMEZGMDIyNjMxMDAwMTNDMDMwODAxRDAKKzoxMDNGMDAwMDkwNjM5Nzc2MkUyRjAwMDIyNDc4MDAwMTNDMDEwODAxNkYKKzoxMDNGMTAwMEEwMzg5Nzc2M0MwMTA4MDFBMDM0OTc3NzExRTBGRUY4QUQKKzoxMDNGMjAwMDAyMDAzODIxMEEwMDIzOEQwMDA3NDA0MDhGODQwMDNDQTYKKzoxMDNGMzAwMDhGODMwMDc4OEM4NTAwNTgwMEEzNDAyMzA1MDJGRTlBRTkKKzoxMDNGNDAwMEFDODMwMDU4MEEwMDIyNjMwMDAwMDAwMDNDMDcwODAxMEYKKzoxMDNGNTAwMDkwRTc5NzkyMjQwMjAwRkYxMEUyMDBCRThGODYwMDNDOUIKKzoxMDNGNjAwMDNDMTEwODAxOTYzMTk3OUEzQzAzMDgwMTI0NjM5Nzk4MDUKKzoxMDNGNzAwMDI2MjUwMDAxMzIzMEZGRkYzMEFCRkZGRjAyMDM2MDIxMzYKKzoxMDNGODAwMDJENkEwMEZGMTU0MDAwOEQ5MTg3MDAwNDNDMDEwODAxNTcKKzoxMDNGOTAwMEE0MjA5NzlBOEY4ODAwM0MwMDA3NDg0MDAxMjcyODIxRDkKKzoxMDNGQTAwMDkxMTgwMEZGMDAwNTMwODAyNDA1MDAwMTI3MTQwMDAxNEUKKzoxMDNGQjAwMEExMTQwMEZGM0MxMjA4MDE5MjUyOTc5MjhGODgwMDdDNTYKKzoxMDNGQzAwMDhGOEUwMDc0MjY0RjAwMDEwMEM4MjAyMTNDMDEwODAxOUIKKzoxMDNGRDAwMEEwMkY5NzkyQUM4RTAwMDA4RjhEMDA3OEE0ODUwMDA4RUEKKzoxMDNGRTAwMEFDOEQwMDA0M0MwMzA4MDE5MDYzOTc3NDE0NjAwMDc3NjMKKzoxMDNGRjAwMDAwMDA5MDIxM0MwMTA4MDFBMDI1OTc3NEEwODcwMDBCQzgKKzoxMDQwMDAwMDhGOEMwMDdDMDBDQzUwMjFBMTQ3MDAwQThGODIwMDNDOUQKKzoxMDQwMTAwMEEwNDcwMEZEOEY4NDAwM0NBMDg3MDBGRThGODYwMDNDRjcKKzoxMDQwMjAwMDhGOUYwMDc0QUNERjAwNTQ4Rjk5MDA3OEFDRDkwMDU4OTIKKzoxMDQwMzAwMDhGOEQwMDdDMDEyN0MwMjEwMDE4NTg4MDAxNkRBMDIxQzAKKzoxMDQwNDAwMDkyOEYwMDBBMDAwRjcwNDAwMUNGMTgyMTAwMDM4ODgwNzIKKzoxMDQwNTAwMDAyMkQ4MDIxQTIwNzAwMEI4Rjg2MDA3QzAxNjY2MDIxNjMKKzoxMDQwNjAwMDkxOEEwMDBCMDAwQTEwNDAwMDRBMjAyMTAwMDQyODgwOTkKKzoxMDQwNzAwMDAwQTY0MDIxQTEwNzAwMEEzQzA3ODAwODM0RTkwMDgwMUYKKzoxMDQwODAwMDhEMjIwMDMwOEY4NjAwM0NBQ0MyMDA1QzBBMDAyMkJBNTAKKzoxMDQwOTAwMDI0MTQwMDAxOTBDQTAwRkYxNTQwRkVBRDhGODgwMDc4RkYKKzoxMDQwQTAwMEEwQzQwMDA5MEEwMDIxRkY4Rjg2MDAzQ0EwQzAwMEZEQ0IKKzoxMDQwQjAwMDhGOTgwMDNDMjQwNjAwMDFBMzAwMDBGRTNDMDEwODAxOEIKKzoxMDQwQzAwMEEwMjY5Nzc1M0MwMTA4MDFBMDIwOTc3NDBBMDAyMUVFRjQKKzoxMDQwRDAwMDAwMDAwMDAwOTBDQjAwRkYzQzA0MDgwMTkwODQ5NzkzRkYKKzoxMDQwRTAwMDMxNkMwMEZGMDE4NDUwMkIxNTQwMDAwRjI0MDIwMDAzQTcKKzoxMDQwRjAwMDI0MDIwMDA0QTBDMjAwMDkwQTAwMjFGRjhGODYwMDNDQjAKKzoxMDQxMDAwMDkwQzMwMDBBMjQxMEZGODAwMjAzNTgyNDMxNkMwMEZGODIKKzoxMDQxMTAwMDExODBGREMxMDAwMDAwMDAzQzAxMDgwMUEwMjA5Nzc1M0UKKzoxMDQxMjAwMDBBMDAyMUVFMDAwMDAwMDBBMEMyMDAwOTBBMDAyMUZGRTEKKzoxMDQxMzAwMDhGODYwMDNDOTBENDAwMEEyNDEyRkY4MDAyNTQ0ODI0NDkKKzoxMDQxNDAwMDMxMjgwMEZGMTUwMEZGRjQyNDAyMDAwODNDMDEwODAxOUIKKzoxMDQxNTAwMEEwMjI5NzkxMEEwMDIxRkYwMDAwMDAwMDAwMTA4ODQwNzMKKzoxMDQxNjAwMDhGOEIwMDc0MDIzMDE4MjEwMDAzNjg4MDAxQTcyMDIxODIKKzoxMDQxNzAwMEFDOEIwMDAwOEY4QTAwNzgyNDBDMDAwMUE0OEMwMDA4MEUKKzoxMDQxODAwMEFDOEEwMDA0M0MwNTA4MDE5MEE1OTc3NjI0MDIwMDAxNDIKKzoxMDQxOTAwMDEwQTJGRTFFMjRBNUZGRkYwQTAwMjI3OTkwODQwMDBCQzYKKzoxMDQxQTAwMDAxODRBMDIzMUE4MEZEOEIwMDAwMDAwMDNDMDEwODAxNUYKKzoxMDQxQjAwMEEwMkU5Nzc1MEEwMDIzMkQyNDBCMDAwMTNDMDEwODAxNTUKKzoxMDQxQzAwMEE0MjU5NzlBMEEwMDIzREY4Rjg4MDAzQzI0MEIwMDAxNjYKKzoxMDQxRDAwMDEwNkIwMDIyOEY5ODAwM0M4Rjg1MDAzQzkwQkYwMEZGNDEKKzoxMDQxRTAwMDMzRjkwMEZGMTA3OTAwMkIwMDAwMDAwMDNDMUYwODAxOEMKKzoxMDQxRjAwMDkzRkY5Nzc4MDAxRkM4NDAwMzNGQzAyMTAwMThBMDgwOUMKKzoxMDQyMDAwMDAyODg3ODIxOTFFRTAwMEFBMDhFMDAwQThGOEQwMDdDMzIKKzoxMDQyMTAwMDNDMDMwODAxOTA2Mzk3NzgwMENEODgyMTBBMDAyNDA1QUIKKzoxMDQyMjAwMEEyMjMwMDBCMjYzMDAwMDEwNjAwMDAzMTAxQTQ5MDIzRDgKKzoxMDQyMzAwMDA2NDAwMDJCMjQwMjAwMDMzQzAxMDgwMUEwMkY5Nzc1QzMKKzoxMDQyNDAwMDBBMDAyMzJEMjQwQjAwMDE4Rjg5MDAzQzBBMDAyMjYzMDEKKzoxMDQyNTAwMEFEMjcwMDU0MEEwMDIyQjkyNDEyMDAwMTkzMTQwMEZENzYKKzoxMDQyNjAwMEEwOTQwMDBCOEY4ODAwM0M4RjhGMDA3QzkxMEUwMEZFODUKKzoxMDQyNzAwMDAwQ0Y2ODIxQTFBRTAwMEE4RjkxMDAzQ0EyMjcwMEZENkIKKzoxMDQyODAwMDhGODMwMDc0OEY5MDAwM0NBRTAzMDA1NDBBMDAyNDA2MTQKKzoxMDQyOTAwMDhGOEQwMDdDOTBCMDAwRkVBMDkwMDAwQThGOEIwMDNDQjgKKzoxMDQyQTAwMDhGOEMwMDdDOTE2QTAwRkQwMENDMTAyMUEwNEEwMDBCOEQKKzoxMDQyQjAwMDhGODQwMDNDQTA4NzAwRkU4Rjg2MDA3ODhGODUwMDNDQUQKKzoxMDQyQzAwMEFDQTYwMDU4MEEwMDI0MDY4RjhEMDA3Qzk0QjgwMDA4MjQKKzoxMDQyRDAwMEFDQTQwMDA0MDMwMzc4MjEwQTAwMjJBREE0QUYwMDA4QjcKKzoxMDQyRTAwMDNDMDEwODAxQTAyMjk3NzUwQTAwMjFFRTAwMDAwMDAwQTEKKzoxMDQyRjAwMDkwQ0YwMDA5MjQwRDAwMDQzMUVFMDBGRjExQ0RGRDg1QTMKKzoxMDQzMDAwMDI0MDIwMDAxM0MwMTA4MDFBMDIyOTc3NTBBMDAyMUVFNTkKKzowNDQzMTAwMDAwMDAwMDAwQTkKKzowQzQzMTQwMDA4MDAzMzQ0MDgwMDMzNDQwODAwMzQyMDQzCis6MTA0MzIwMDAwODAwMzNGNDA4MDAzM0Q4MDgwMDMzMjgwODAwMzMyODg1Cis6MTA0MzMwMDAwODAwMzMyODA4MDAzMzRDODAwODAxMDA4MDA4MDA4MDAyCis6MTA0MzQwMDA4MDA4MDAwMDVGODY1NDM3RTRBQzYyQ0M1MDEwM0E0NUQ4Cis6MTA0MzUwMDAzNjYyMTk4NUJGMTRDMEU4MUJDMjdBMUU4NEY0QjU1NkI0Cis6MTA0MzYwMDAwOTRFQTZGRTdEREEwMUU3QzA0RDc0ODEwODAwNUIzODc2Cis6MTA0MzcwMDAwODAwNUI3QzA4MDA1QjIwMDgwMDVCMjAwODAwNUIyMEQ1Cis6MTA0MzgwMDAwODAwNUIyMDA4MDA1QjM4MDgwMDVCMjAwODAwNUIyMDA5Cis6MTA0MzkwMDAwODAwNUI4NDA4MDA1QjIwMDgwMDVBOTgwODAwNUIyMDM2Cis6MTA0M0EwMDAwODAwNUIyMDA4MDA1Qjg0MDgwMDVCMjAwODAwNUIyMDlECis6MTA0M0IwMDAwODAwNUIyMDA4MDA1QjIwMDgwMDVCMjAwODAwNUIyMEYxCis6MTA0M0MwMDAwODAwNUIyMDA4MDA1QjIwMDgwMDVCMjAwODAwNUIyMEUxCis6MTA0M0QwMDAwODAwNUI1ODA4MDA1QjIwMDgwMDVCNTgwODAwNUIyMDYxCis6MTA0M0UwMDAwODAwNUIyMDA4MDA1QjIwMDgwMDVCNUMwODAwNUI1ODRECis6MTA0M0YwMDAwODAwNUIyMDA4MDA1QjIwMDgwMDVCMjAwODAwNUIyMEIxCis6MTA0NDAwMDAwODAwNUIyMDA4MDA1QjIwMDgwMDVCMjAwODAwNUIyMEEwCis6MTA0NDEwMDAwODAwNUIyMDA4MDA1QjIwMDgwMDVCMjAwODAwNUIyMDkwCis6MTA0NDIwMDAwODAwNUIyMDA4MDA1QjIwMDgwMDVCMjAwODAwNUIyMDgwCis6MTA0NDMwMDAwODAwNUIyMDA4MDA1QjIwMDgwMDVCMjAwODAwNUIyMDcwCis6MTA0NDQwMDAwODAwNUI1QzA4MDA1QjVDMDgwMDVCMjAwODAwNUI1Q0FDCis6MTA0NDUwMDAwODAwNUIyMDA4MDA1QjIwMDgwMDVCMjAwODAwNUIyMDUwCis6MTA0NDYwMDAwODAwNUIyMDA4MDA1QjIwMDgwMDVCMjAwODAwNUIyMDQwCis6MTA0NDcwMDAwODAwNUIyMDA4MDA1QjIwMDgwMDVCMjAwODAwNUIyMDMwCis6MTA0NDgwMDAwODAwNUIyMDA4MDA1QjIwMDgwMDVCMjAwODAwNUIyMDIwCis6MTA0NDkwMDAwODAwNUIyMDA4MDA1QjIwMDgwMDVCMjAwODAwNUIyMDEwCis6MTA0NEEwMDAwODAwNUIyMDA4MDA1QjIwMDgwMDVCMjAwODAwNUIyMDAwCis6MTA0NEIwMDAwODAwNUIyMDA4MDA1QjIwMDgwMDVCMjAwODAwNUIyMEYwCis6MTA0NEMwMDAwODAwNUIyMDA4MDA1QjIwMDgwMDVCMjAwODAwNUIyMEUwCis6MTA0NEQwMDAwODAwNUIyMDA4MDA1QjIwMDgwMDVCMjAwODAwNUIyMEQwCis6MTA0NEUwMDAwODAwNUIyMDA4MDA1QjIwMDgwMDVCMjAwODAwNUIyMEMwCis6MTA0NEYwMDAwODAwNUIyMDA4MDA1QjIwMDgwMDVCMjAwODAwNUIyMEIwCis6MTA0NTAwMDAwODAwNUIyMDA4MDA1QjIwMDgwMDVCMjAwODAwNUIyMDlGCis6MTA0NTEwMDAwODAwNUIyMDA4MDA1QjIwMDgwMDVCMjAwODAwNUIyMDhGCis6MTA0NTIwMDAwODAwNUIyMDA4MDA1QjIwMDgwMDVCMjAwODAwNUIyMDdGCis6MTA0NTMwMDAwODAwNUIyMDA4MDA1QjIwMDgwMDVCMjAwODAwNUIyMDZGCis6MTA0NTQwMDAwODAwNUIyMDA4MDA1QjIwMDgwMDVCMjAwODAwNUIyMDVGCis6MTA0NTUwMDAwODAwNUIyMDA4MDA1QjIwMDgwMDVCMjAwODAwNUIyMDRGCis6MTA0NTYwMDAwODAwNUIyMDA4MDA1QjIwMDgwMDVCMjAwODAwNUJBMEJGCis6MTA0NTcwMDAwODAwNzhGMDA4MDA3QjU0MDgwMDc4RkMwODAwNzZGMDBBCis6MTA0NTgwMDAwODAwNzhGQzA4MDA3OTg4MDgwMDc4RkMwODAwNzZGMEJDCis6MTA0NTkwMDAwODAwNzZGMDA4MDA3NkYwMDgwMDc2RjAwODAwNzZGMDYzCis6MTA0NUEwMDAwODAwNzZGMDA4MDA3NkYwMDgwMDc2RjAwODAwNzZGMDUzCis6MTA0NUIwMDAwODAwNzZGMDA4MDA3OTFDMDgwMDc5MEMwODAwNzZGMEY1Cis6MTA0NUMwMDAwODAwNzZGMDA4MDA3NkYwMDgwMDc2RjAwODAwNzZGMDMzCis6MTA0NUQwMDAwODAwNzZGMDA4MDA3NkYwMDgwMDc2RjAwODAwNzZGMDIzCis6MTA0NUUwMDAwODAwNzZGMDA4MDA3NkYwMDgwMDc2RjAwODAwNzkwQ0Y0Cis6MTA0NUYwMDAwODAwODM5QzA4MDA4MjI4MDgwMDgzNjQwODAwODIyODQxCis6MTA0NjAwMDAwODAwODMzNDA4MDA4MTEwMDgwMDgyMjgwODAwODIyOEVFCis6MTA0NjEwMDAwODAwODIyODA4MDA4MjI4MDgwMDgyMjgwODAwODIyOEQyCis6MTA0NjIwMDAwODAwODIyODA4MDA4MjI4MDgwMDgyMjgwODAwODIyOEMyCis6MTA0NjMwMDAwODAwODIyODA4MDA4MjI4MDgwMDgyNTAwODAwOERENEQzCis6MTA0NjQwMDAwODAwOEYzMDA4MDA4RjEwMDgwMDg5NzgwODAwOERFQzcyCis6MTA0NjUwMDAwQTAwMDEyNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDFFCis6MTA0NjYwMDA3NDcwNjEzNjJFMzIyRTMxMDAwMDAwMDAwNjAyMDEwMTA2Cis6MTA0NjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNBCis6MTA0NjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJBCis6MTA0NjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFBCis6MTA0NkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBCis6MTA0NkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZBCis6MTA0NkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVBCis6MTA0NkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERBCis6MTA0NkUwMDAwMDAwMDAwMDEwMDAwMDAzMDAwMDAwMDAwMDAwMDAwREFBCis6MTA0NkYwMDAwMDAwMDAwRDNDMDIwODAwMjQ0MjE3MjAzQzAzMDgwMDgzCis6MTA0NzAwMDAyNDYzMkExMEFDNDAwMDAwMDA0MzIwMkIxNDgwRkZGRERFCis6MTA0NzEwMDAyNDQyMDAwNDNDMUQwODAwMzdCRDJGRkMwM0EwRjAyMUZCCis6MTA0NzIwMDAzQzEwMDgwMDI2MTAwNDkwM0MxQzA4MDAyNzlDMTcyMDExCis6MTA0NzMwMDAwRTAwMDI2MjAwMDAwMDAwMDAwMDAwMEQyNDAyRkY4MDU1Cis6MTA0NzQwMDAyN0JERkZFMDAwODIxMDI0QUZCMDAwMTBBRjQyMDAyMDcwCis6MTA0NzUwMDBBRkJGMDAxOEFGQjEwMDE0OTM2NTAwMDQzMDg0MDA3RjMwCis6MTA0NzYwMDAwMzQ0MTgyMTNDMDIwMDA4MDA2MjE4MjEzMEE1MDAyMEYzCis6MTA0NzcwMDAwMzYwODAyMTNDMDgwMTExMjc3QjAwMDgxNEEwMDAwMjdGCis6MTA0NzgwMDAyNDY2MDA1QzI0NjYwMDU4OTIwMjAwMDQ5NzQzMDEwNEVBCis6MTA0NzkwMDA5MjA0MDAwNDMwNDcwMDBGMzA2M0ZGRkYzMDg0MDA0MDc0Cis6MTA0N0EwMDAwMDY3MjgyMzEwODAwMDA5MDAwMDQ4MjE5MjAyMDAwNUJDCis6MTA0N0IwMDAzMDQyMDAwNDEwNDAwMDA1MDAwMDAwMDAxMEEwMDAwMzdCCis6MTA0N0MwMDAwMDAwMDAwMDI0QTVGRkZDMjQwOTAwMDQ5MjAyMDAwNTVCCis6MTA0N0QwMDAzMDQyMDAwNDEwNDAwMDEyMDAwMDAwMDAxMEEwMDAxMDQxCis6MTA0N0UwMDAwMDAwMDAwMDk2MDIwMDAyMDBBNzIwMjEwMTA0NDAyNURECis6MTA0N0YwMDAyNDQyRkZGRUE3NDIxMDE2OTIwMzAwMDQyNDAyRkY4MDA5Cis6MTA0ODAwMDAwMDQzMTAyNDMwNDIwMEZGMTA0MDAwMDMzQzAyMDQwMDJCCis6MTA0ODEwMDAwQTAwMDE3NDAxMDI0MDI1OENDMjAwMDBBRjQyMTAxODRBCis6MTA0ODIwMDA4RjQyMDE3ODA0NDBGRkZFMjQwMjAwMEFBNzQyMDE0MEEzCis6MTA0ODMwMDA5NjAyMDAwMjI0MDQwMDA5MzA0MjAwMDcwMDAyMTAyM0ZGCis6MTA0ODQwMDAzMDQyMDAwN0E3NDIwMTQyOTYwMjAwMDIyNDQyRkZGRUM2Cis6MTA0ODUwMDBBNzQyMDE0NEE3NDAwMTQ2OTc0MjAxMDRBNzQyMDE0OEVDCis6MTA0ODYwMDA4RjQyMDEwODMwNDIwMDIwNTA0MDAwMDEyNDA0MDAwMTIyCis6MTA0ODcwMDA5MjAyMDAwNDMwNDIwMDEwMTQ0MDAwMDIzNDgzMDAxMDAxCis6MTA0ODgwMDAwMDgwMTgyMUE3NDMwMTRBMDAwMDAwMDAwMDAwMDAwMDNBCis6MTA0ODkwMDAwMDAwMDAwMDAwMDAwMDAwQUY0ODEwMDAwMDAwMDAwMDExCis6MTA0OEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RjQyMTAwMDI3Cis6MTA0OEIwMDAwNDQxRkZGRTMxMDJGRkZGMTA0MDAwMDcwMDAwMDAwMDJFCis6MTA0OEMwMDA5MjAyMDAwNDMwNDIwMDQwMTQ0MDAwMDMwMDAwMDAwMDQ3Cis6MTA0OEQwMDA4RjQyMTAxOEFDQzIwMDAwOTYwMjAwMDYzMDQyRkZGRjYzCis6MTA0OEUwMDAyNDQyMDAwMjAwMDIxMDQzMDAwMjEwNDAwMzYyODgyMUFCCis6MTA0OEYwMDA5NjIyMDAwMDExMjAwMDBEMzA0NEZGRkYwMEE3MTAyMTc4Cis6MTA0OTAwMDA4RjgzMDAzODhGNDUxMDFDMDAwMjEwODIwMDAyMTA4MDM3Cis6MTA0OTEwMDAwMDQzMTAyMUFDNDUwMDAwMzBBNkZGRkYwRTAwMDU4REJFCis6MTA0OTIwMDAwMDA1MkMwMjAwNDAyMDIxQTYyMjAwMDA5MjAzMDAwNDcyCis6MTA0OTMwMDAyNDAyRkY4MDAwNDMxMDI0MzA0MjAwRkYxMDQwMDAxRjdCCis6MTA0OTQwMDAwMDAwMDAwMDkyMDIwMDA1MzA0MjAwMDIxMDQwMDAxQkVGCis6MTA0OTUwMDAwMDAwMDAwMDk3NDIxMDBDMjQ0MkZGRkVBNzQyMTAxNkYwCis6MTA0OTYwMDAwMDAwMDAwMDNDMDIwNDAwMzQ0MjAwMzBBRjQyMTAwMDVFCis6MTA0OTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTA0OTgwMDA4RjQyMTAwMDA0NDFGRkZFMDAwMDAwMDA5NzQyMTAwQzBGCis6MTA0OTkwMDA4RjQ1MTAxQzMwNDJGRkZGMjQ0MjAwMzAwMDAyMTA4MjdECis6MTA0OUEwMDAwMDAyMTA4MDAwNUIxMDIxQUM0NTAwMDAzMEE2RkZGRjI0Cis6MTA0OUIwMDAwRTAwMDU4RDAwMDUyQzAyQTYyMjAwMDA5NjA0MDAwMkMwCis6MTA0OUMwMDAyNDg0MDAwODBFMDAwMUU5MzA4NEZGRkY5NzQ0MDEwNEFECis6MTA0OUQwMDAwRTAwMDFGNzMwODRGRkZGOEZCRjAwMTg4RkIxMDAxNDY1Cis6MTA0OUUwMDA4RkIwMDAxMDNDMDIxMDAwMjdCRDAwMjAwM0UwMDAwODNCCis6MTA0OUYwMDBBRjQyMDE3ODMwODRGRkZGMzA4MjAwMDc4Rjg1MDAyNEFBCis6MTA0QTAwMDAxMDQwMDAwMjI0ODMwMDA3MzA2NEZGRjgwMEE0MTAyMTQ2Cis6MTA0QTEwMDAzMDQyMUZGRjAzNDIxODIxMjQ3QjQwMDBBRjg1MDAyODRECis6MTA0QTIwMDBBRjgyMDAyNDAzRTAwMDA4QUY0MjAwODQzMDg0RkZGRjFGCis6MTA0QTMwMDAzMDgyMDAwRjhGODUwMDJDOEY4NjAwMzQxMDQwMDAwMkRBCis6MTA0QTQwMDAyNDgzMDAwRjMwNjRGRkYwMDBBNDEwMjEwMDQ2MTgyQkNGCis6MTA0QTUwMDBBRjg1MDAzMDAwNDYyMDIzMTQ2MDAwMDJBRjgyMDAyQzk2Cis6MTA0QTYwMDBBRjg0MDAyQzhGODIwMDJDMzQwNDgwMDAwMzQyMTgyMTc0Cis6MTA0QTcwMDAwMDY0MTgyMUFGODMwMDM4MDNFMDAwMDhBRjQyMDA4MEQzCis6MTA0QTgwMDA4RjgyMDAxNDEwNDAwMDA4OEY4MjAwMDQ4RjgyRkZEQ0E4Cis6MTA0QTkwMDAxNDQwMDAwNThGODIwMDA0M0MwMkZGQkYzNDQyRkZGRjM4Cis6MTA0QUEwMDAwMDgyMjAyNDhGODIwMDA0MzA0MzAwMDYyNDAyMDAwMjhBCis6MTA0QUIwMDAxMDYyMDAwRjNDMDIwMTAxMkM2MjAwMDM1MDQwMDAwNTBGCis6MTA0QUMwMDAyNDAyMDAwNDEwNjAwMDBGM0MwMjAwMDEwQTAwMDIzMEMyCis6MTA0QUQwMDAwMDAwMDAwMDEwNjIwMDA1MjQwMjAwMDYxNDYyMDAwQ0IxCis6MTA0QUUwMDAzQzAyMDExMTBBMDAwMjI5MDA4MjEwMjUzQzAyMDAxMTNCCis6MTA0QUYwMDAwMDgyMTAyNUFGNDIxMDAwMjQwMjAwMDEwQTAwMDIzMDlCCis6MTA0QjAwMDBBRjgyMDAwQzAwODIxMDI1QUY0MjEwMDBBRjgwMDAwQzc1Cis6MTA0QjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0UwMDAwOEFBCis6MTA0QjIwMDAwMDAwMDAwMDhGODIwMDBDMTA0MDAwMDQwMDAwMDAwMDE0Cis6MTA0QjMwMDA4RjQyMTAwMDA0NDFGRkZFMDAwMDAwMDAwM0UwMDAwODY3Cis6MTA0QjQwMDAwMDAwMDAwMDhGODIwMDEwMjQ0M0Y4MDAwMDAyMzFDMkYwCis6MTA0QjUwMDAyNEMyRkZGMDJDNjMwMzAxMTA2MDAwMDMwMDAyMTA0MjI2Cis6MTA0QjYwMDAwQTAwMDI1N0FDODIwMDAwOEY4NTAwMTgwMEM1MTAyQjg4Cis6MTA0QjcwMDAxNDQwMDAwQjAwMDAxODIxMDBDNTEwMjMyNDQ3MDAwMTM5Cis6MTA0QjgwMDA4RjgyMDAxQzAwQTIxMDIxMjQ0MkZGRkYwMDQ2MTAyQjQwCis6MTA0QjkwMDA1NDQwMDAwNDI0MDJGRkZGMEEwMDAyNTdBQzg3MDAwMEMzCis6MTA0QkEwMDAyNDAyRkZGRjBBMDAwMjYwQUM4MjAwMDA4QzgyMDAwMDM5Cis6MTA0QkIwMDAwMDAyMTk0MDAwNjIxODIxMDAwMzE4ODAwMDYyMTgyMUM5Cis6MTA0QkMwMDAwMDAzMTg4MDNDMDIwODAwMjQ0MjE3NUMwMDYyMTgyMTkwCis6MTA0QkQwMDAwM0UwMDAwODAwNjAxMDIxMjdCREZGRDhBRkJGMDAyMDEwCis6MTA0QkUwMDBBRkIxMDAxQ0FGQjAwMDE4M0MwNDYwMDg4QzgyNTAwMENDCis6MTA0QkYwMDAyNDAzRkY3RjNDMDY2MDAwMDA0MzEwMjQzNDQyMzgwQzNECis6MTA0QzAwMDBBQzgyNTAwMDhDQzI0QzFDM0MxQTgwMDAwMDAyMTYwMjgwCis6MTA0QzEwMDAzMDQyMDAwRjEwNDAwMDA3QUY4MjAwMUM4Q0MzNEMxQ0I4Cis6MTA0QzIwMDAzQzAyMDAxRjM0NDJGQzAwMDA2MjE4MjQwMDAzMTlDMjM5Cis6MTA0QzMwMDBBRjgzMDAxODhGNDIwMDA4Mjc1QjQwMDAzNDQyMDAwMTE4Cis6MTA0QzQwMDBBRjQyMDAwOEFGODAwMDI0M0MwMjYwMUNBRjQwMDA4MEVGCis6MTA0QzUwMDBBRjQwMDA4NDhDNDUwMDA4OENDMzA4MDgzNDAyODAwMEYzCis6MTA0QzYwMDAwMzQyMjAyMTI0MDJGRkYwMDA2MjE4MjQzQzAyMDA4MDRECis6MTA0QzcwMDAzQzAxMDgwMEFDMjIwNDIwM0MwMjU3MDlBRjg0MDAzOEY0Cis6MTA0QzgwMDAxNDYyMDAwNEFGODUwMDM0MjQwMjAwMDEwQTAwMDI5MjdECis6MTA0QzkwMDBBRjgyMDAxNEFGODAwMDE0OEY0MjAwMDAzODQyMDAwMTQwCis6MTA0Q0EwMDAzMDQyMDAwMTE0NDBGRkZDOEY4MjAwMTQxMDQwMDAxNkI3Cis6MTA0Q0IwMDAwMDAwMDAwMDk3NDIwMTA0MTA0MDAwMDU4RjgzMDAwMEFGCis6MTA0Q0MwMDAxNDYwMDAwNzI0NjJGRkZGMEEwMDAyQTcyQzYyMDAwQTlBCis6MTA0Q0QwMDAyQzYyMDAxMDUwNDAwMDA0OEY4MzAwMDAyNDYyMDAwMTA5Cis6MTA0Q0UwMDBBRjgyMDAwMDhGODMwMDAwMkM2MjAwMEExNDQwMDAwMzkyCis6MTA0Q0YwMDAyQzYyMDAwNzBBMDAwMkFFQUY4MEZGREMxMDQwMDAwMjA5Cis6MTA0RDAwMDAyNDAyMDAwMUFGODJGRkRDOEY0MzAxMDg4RjQ0MDEwMEMxCis6MTA0RDEwMDAzMDYyMjAwMEFGODMwMDA0MTA0MDAwMDhBRjg0MDAxMDEwCis6MTA0RDIwMDAzQzAyMDgwMDhDNDIwNDJDMjQ0MjAwMDEzQzAxMDgwMDkzCis6MTA0RDMwMDBBQzIyMDQyQzBBMDAwNThBM0MwMjQwMDAzMDY1MDIwMEM3Cis6MTA0RDQwMDAxNEEwMDAwMzI0MDIwRjAwMTQ4MjAyNjAyNDAyMEQwMDRDCis6MTA0RDUwMDA5NzQyMDEwNDEwNDAwMkM4M0MwMjQwMDAzMDYyNDAwMDBCCis6MTA0RDYwMDAxNDQwMDBBRDhGODIwMDM4OEM0NDAwMDg4RjQyMDE3OEQ3Cis6MTA0RDcwMDAwNDQwRkZGRTI0MDIwODAwQUY0MjAxNzgyNDAyMDAwODJDCis6MTA0RDgwMDBBNzQyMDE0MEE3NDAwMTQyOTc0MjAxMDQ4Rjg0MDAwNERBCis6MTA0RDkwMDAzMDUxRkZGRjMwODIwMDAxMTA0MDAwMDcwMjIwODAyMUM3Cis6MTA0REEwMDAyNjIzRkZGRTI0MDIwMDAyMzA3MEZGRkZBNzQyMDE0NkM3Cis6MTA0REIwMDAwQTAwMDJEQkE3NDMwMTQ4QTc0MDAxNDYzQzAyMDgwMDY1Cis6MTA0REMwMDA4QzQyMDQzQzE0NDAwMDBEOEY4MzAwMTAzMDgyMDAyMDgwCis6MTA0REQwMDAxNDQwMDAwMjI0MDMwMDA5MjQwMzAwMDEwMDYwMjAyMTg0Cis6MTA0REUwMDA4RjgzMDAxMDI0MDIwOTAwNTA2MjAwMDEzNDg0MDAwNDAzCis6MTA0REYwMDBBNzQ0MDE0QTBBMDAwMkY2MDAwMDAwMDAyNDAyMEYwMDQ2Cis6MTA0RTAwMDAxNDYyMDAwNTMwODIwMDIwMTQ0MDAwMDYyNDAzMDAwREM3Cis6MTA0RTEwMDAwQTAwMDJGNTI0MDMwMDA1MTQ0MDAwMDIyNDAzMDAwOURGCis6MTA0RTIwMDAyNDAzMDAwMUE3NDMwMTRBM0MwMjA4MDA4QzQyMDQyMEVECis6MTA0RTMwMDAzQzA0MDA0ODBFMDAwMjBDMDA0NDIwMjUwRTAwMDIzNTAwCis6MTA0RTQwMDAwMDAwMDAwMDhGODIwMDBDMTA0MDAwM0UwMDAwMDAwMEI3Cis6MTA0RTUwMDA4RjQyMTAwMDNDMDMwMDIwMDA0MzEwMjQxMDQwMDAzOTEyCis6MTA0RTYwMDA4RjgyMDAwNDMwNDIwMDAyMTA0MDAwMzYwMDAwMDAwMDMzCis6MTA0RTcwMDA5NzQyMTAxNDE0NDAwMDMzMDAwMDAwMDA5NzQyMTAwOEJECis6MTA0RTgwMDA4Rjg4MDAzODMwNDJGRkZGMjQ0MjAwMDYwMDAyMTg4MjVCCis6MTA0RTkwMDAwMDAzMzg4MDAwRTgzMDIxMzA0MzAwMDE4Q0M0MDAwMDVBCis6MTA0RUEwMDAxMDYwMDAwNDMwNDIwMDAzMDAwMDAwMEQwQTAwMDMzN0M4Cis6MTA0RUIwMDAwMEU4MTAyMTU0NDAwMDEwMzA4NEZGRkYzQzA1RkZGRjQ0Cis6MTA0RUMwMDAwMDg1MjAyNDAwODUxODI2MDAwMzE4MkIwMDA0MTAyQkQxCis6MTA0RUQwMDAwMDQzMTAyNDEwNDAwMDA1MDAwMDAwMDAwMDAwMDAwMDA2Cis6MTA0RUUwMDAwMDAwMDAwRDAwMDAwMDAwMjQwMDAyMjI4Q0MyMDAwMDFGCis6MTA0RUYwMDAwQTAwMDMzNjAwNDUyMDI1Mzg4M0ZGRkYwMDAzMTgyQkU2Cis6MTA0RjAwMDAwMDA0MTAyQjAwNDMxMDI0MTA0MDAwMDUwMDAwMDAwMDk2Cis6MTA0RjEwMDAwMDAwMDAwMDAwMDAwMDBEMDAwMDAwMDAyNDAwMDIyQjMzCis6MTA0RjIwMDA4Q0MyMDAwMDM0NDRGRkZGMDBFODEwMjFBQzQ0MDAwMEI0Cis6MTA0RjMwMDAzQzAyMDgwMDhDNDIwNDMwMjQ0MjAwMDEzQzAxMDgwMDdECis6MTA0RjQwMDBBQzIyMDQzMDhGNjIwMDAwOEY4NDAwMzhBRjgyMDAwOEVBCis6MTA0RjUwMDA4QzgzMDAwMDM0MDJGRkZGMTQ2MjAwMEYwMDAwMTAyMTU4Cis6MTA0RjYwMDAzQzA1MDgwMDhDQTUwNDU0M0MwNDA4MDA4Qzg0MDQ1MEMzCis6MTA0RjcwMDAwMEIwMjgyMTAwQjAzMDJCMDA4MjIwMjEwMDg2MjAyMUEzCis6MTA0RjgwMDAzQzAxMDgwMEFDMjUwNDU0M0MwMTA4MDBBQzI0MDQ1MDRBCis6MTA0RjkwMDAwQTAwMDU4MDI0MDQwMDA4OEM4MjAwMDAzMDQyMDEwMEQxCis6MTA0RkEwMDAxMDQwMDAwRjAwMDAxMDIxM0MwNTA4MDA4Q0E1MDQ0Q0E3Cis6MTA0RkIwMDAzQzA0MDgwMDhDODQwNDQ4MDBCMDI4MjEwMEIwMzAyQjQ5Cis6MTA0RkMwMDAwMDgyMjAyMTAwODYyMDIxM0MwMTA4MDBBQzI1MDQ0Q0YxCis6MTA0RkQwMDAzQzAxMDgwMEFDMjQwNDQ4MEEwMDA1ODAyNDA0MDAwOEIxCis6MTA0RkUwMDAzQzA1MDgwMDhDQTUwNDQ0M0MwNDA4MDA4Qzg0MDQ0MDYzCis6MTA0RkYwMDAwMEIwMjgyMTAwQjAzMDJCMDA4MjIwMjEwMDg2MjAyMTIzCis6MTA1MDAwMDAzQzAxMDgwMEFDMjUwNDQ0M0MwMTA4MDBBQzI0MDQ0MEU5Cis6MTA1MDEwMDAwQTAwMDU4MDI0MDQwMDA4OEY2MjAwMDg4RjYyMDAwMEU3Cis6MTA1MDIwMDAwMDAyMTYwMjMwNDMwMEYwMjQwMjAwMzAxMDYyMDAwNTM2Cis6MTA1MDMwMDAyNDAyMDA0MDEwNjIwMEUwOEY4MjAwMjAwQTAwMDU4OEYwCis6MTA1MDQwMDAyNDQyMDAwMTE0QTAwMDA1MDAwMDAwMDAwMDAwMDAwMDQwCis6MTA1MDUwMDAwMDAwMDAwRDAwMDAwMDAwMjQwMDAyNTY4RjQyMDE3ODdECis6MTA1MDYwMDAwNDQwRkZGRTAwMDAwMDAwMEUwMDAyM0QyN0E0MDAxMEQ3Cis6MTA1MDcwMDAxNDQwMDAwNTAwNDA4MDIxMDAwMDAwMDAwMDAwMDAwREU5Cis6MTA1MDgwMDAwMDAwMDAwMDI0MDAwMjVEOEUwMjAwMDAxMDQwMDAwNUI4Cis6MTA1MDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQwMDAwMDAwMDAzCis6MTA1MEEwMDAyNDAwMDI2MDhGNjIwMDBDMDQ0MzAwMDMyNDAyMDAwMTBDCis6MTA1MEIwMDAwQTAwMDQyRUFFMDAwMDAwQUUwMjAwMDA4RjgyMDAzODBECis6MTA1MEMwMDA4QzQ4MDAwOEEyMDAwMDA3OEY2NTAwMEM4RjY0MDAwNDY0Cis6MTA1MEQwMDAzMEEzRkZGRjAwMDQyNDAyMDA4NTIwMjMzMDgyMDBGRjVDCis6MTA1MEUwMDAwMDQzMTAyMTI0NDIwMDA1MDAwMjMwODMyQ0MyMDA4MUJECis6MTA1MEYwMDBBNjA1MDAwQTE0NDAwMDA1QTIwNDAwMDQwMDAwMDAwMEY4Cis6MTA1MTAwMDAwMDAwMDAwRDAwMDAwMDAwMjQwMDAyNzg4Rjg1MDAzOEE4Cis6MTA1MTEwMDAwRTAwMDVBQjI2MDQwMDE0OEY2MjAwMDQ4RjQzMDEwOEMzCis6MTA1MTIwMDBBNjAyMDAwODNDMDIxMDAwMDA2MjE4MjQxMDYwMDAwODZCCis6MTA1MTMwMDAwMDAwMDAwMDk3NDIwMTA0OTIwMzAwMDcyNDQyRkZFQ0E0Cis6MTA1MTQwMDAzNDYzMDAwMjMwNDVGRkZGMEEwMDAzQzNBMjAzMDAwN0Q3Cis6MTA1MTUwMDA5NzQyMDEwNDI0NDJGRkYwMzA0NUZGRkY5NjA2MDAwODA1Cis6MTA1MTYwMDAyQ0MyMDAxMzU0NDAwMDA1OTIwMzAwMDc5MjAyMDAwNzZFCis6MTA1MTcwMDAzNDQyMDAwMUEyMDIwMDA3OTIwMzAwMDcyNDAyMDAwMTRBCis6MTA1MTgwMDAxMDYyMDAwNTI0MDIwMDAzMTA2MjAwMEI4RjgyMDAzOEI5Cis6MTA1MTkwMDAwQTAwMDNFMDMwQzZGRkZGOEY4MjAwMzgzQzA0RkZGRkE3Cis6MTA1MUEwMDA4QzQzMDAwQzAwNjQxODI0MDA2NTE4MjVBQzQzMDAwQ0U3Cis6MTA1MUIwMDAwQTAwMDNFMDMwQzZGRkZGM0MwNEZGRkY4QzQzMDAxMEYxCis6MTA1MUMwMDAwMDY0MTgyNDAwNjUxODI1QUM0MzAwMTAzMEM2RkZGRkFBCis6MTA1MUQwMDAyNEMyMDAwMjAwMDIxMDgzQTIwMjAwMDU4RjgzMDAzODVGCis6MTA1MUUwMDAzMDQyMDBGRjAwMDIxMDgwMDA0MzI4MjE4Q0E4MDAwMEZDCis6MTA1MUYwMDA4Q0EyMDAwMDI0MDMwMDA0MDAwMjE3MDIxNDQzMDAxMkQyCis6MTA1MjAwMDAwMDAwMDAwMDk3NDIwMTA0M0MwM0ZGRkYwMTAzMTgyNDQzCis6MTA1MjEwMDAzMDQyRkZGRjAwNDYxMDIzMjQ0MkZGRkUwMDYyNDAyNTdCCis6MTA1MjIwMDBBQ0E4MDAwMDkyMDMwMDA1MzA2MjAwRkYwMDAyMTA4MDZECis6MTA1MjMwMDAwMDUwMTAyMTkwNDIwMDE0MzA0MjAwMEYwMDQzMTAyMTEyCis6MTA1MjQwMDAwQTAwMDQxNUEyMDIwMDA2OENBNDAwMDQ5NzQyMDEwNDdGCis6MTA1MjUwMDA5NjAzMDAwQTMwODhGRkZGMzA0MkZGRkYwMDQ2MTAyMzBDCis6MTA1MjYwMDAyNDQyRkZENjAwMDIxNDAwMDEwMjQwMjVBQ0E4MDAwNDJECis6MTA1MjcwMDA5MjAyMDAwNzkyMDQwMDA1MjQ2MzAwMjgwMDAzMTg4M0FCCis6MTA1MjgwMDAwMDY0MTgyMTM0NDIwMDA0QTIwMzAwMDZBMjAyMDAwN0IxCis6MTA1MjkwMDA4RjgyMDAwNDI0MDNGRkZCMzQ0MjAwMDIwMDQzMTAyNEU5Cis6MTA1MkEwMDBBRjgyMDAwNDkyMDMwMDA2OEY4NzAwMzgwMDAzMTg4MDQ1Cis6MTA1MkIwMDAwMDcwMTAyMThDNDQwMDIwM0MwMkZGRjYzNDQyRkZGRkI2Cis6MTA1MkMwMDAwMDgyNDAyNDAwNjcxODIxQUUwNDAwMENBQzY4MDAwQzdBCis6MTA1MkQwMDA5MjA1MDAwNjNDMDNGRjdGOEUwMjAwMEMwMDA1Mjg4MDJCCis6MTA1MkUwMDAwMEIwMjAyMTM0NjNGRkZGMDEwMzMwMjQ5NDg4MDAyNjlFCis6MTA1MkYwMDAwMEE3MjgyMTAwNDMxMDI0QUUwMjAwMENBQzg2MDAyMDM5Cis6MTA1MzAwMDBBQzg4MDAyNEFDQTgwMDEwMjQwMjAwMTBBNzQyMDE0MDgxCis6MTA1MzEwMDAyNDAyMDAwMkE3NDAwMTQyQTc0MDAxNDRBNzQyMDE0NkRGCis6MTA1MzIwMDA5NzQyMDEwNDNDMDQwMDA4MjQ0MkZGRkVBNzQyMDE0OEMyCis6MTA1MzMwMDAyNDAyMDAwMTBFMDAwMjBDQTc0MjAxNEE5NjAzMDAwQTUzCis6MTA1MzQwMDA5MjAyMDAwNDAwNDMxMDIxMjQ0MjAwMDIzMDQyMDAwNzcwCis6MTA1MzUwMDAwMDAyMTAyMzMwNDIwMDA3MEUwMDAyMzVBRTAyMDAxMDlBCis6MTA1MzYwMDA4RjYyMDAwMDNDMDMwODAwOEM2MzA0NDQyNDA0MDAxMDk2Cis6MTA1MzcwMDBBRjgyMDAwODk3NDIwMTA0MzA0MkZGRkYyNDQyRkZGRTQzCis6MTA1MzgwMDAwMDQwMzgyMTAwMDIzN0MzM0MwMjA4MDA4QzQyMDQ0MDMwCis6MTA1MzkwMDAwMDY3MTgyMTAwNjcyODJCMDA0NjEwMjEwMDQ1MTAyMUM2Cis6MTA1M0EwMDAzQzAxMDgwMEFDMjMwNDQ0M0MwMTA4MDBBQzIyMDQ0MDRBCis6MTA1M0IwMDAwQTAwMDUxNTAwMDAwMDAwMTRBMDAwMDUwMDAwMDAwMDEwCis6MTA1M0MwMDAwMDAwMDAwMDAwMDAwMDBEMDAwMDAwMDAyNDAwMDMwQTlGCis6MTA1M0QwMDA4RjQyMDE3ODA0NDBGRkZFMDAwMDAwMDAwRTAwMDIzREY1Cis6MTA1M0UwMDAyN0E0MDAxNDE0NDAwMDA1MDA0MDgwMjEwMDAwMDAwMEE0Cis6MTA1M0YwMDAwMDAwMDAwRDAwMDAwMDAwMjQwMDAzMTE4RTAyMDAwMEQ4Cis6MTA1NDAwMDA1NDQwMDAwNjkyMDIwMDA3MDAwMDAwMDAwMDAwMDAwRDVBCis6MTA1NDEwMDAwMDAwMDAwMDI0MDAwMzFDOTIwMjAwMDczMDQyMDAwNDM4Cis6MTA1NDIwMDAxMDQwMDAwNThGODIwMDA0MjQwM0ZGRkIzNDQyMDAwMjc5Cis6MTA1NDMwMDAwMDQzMTAyNEFGODIwMDA0OEY2MjAwMDQwNDQzMDAwODdDCis6MTA1NDQwMDA5MjAyMDAwNzkyMDIwMDA2OEUwMzAwMENBRTAwMDAwMERDCis6MTA1NDUwMDAwMDAyMTA4MDAwNTAxMDIxQUM0MzAwMjA5MjAyMDAwNzhGCis6MTA1NDYwMDAzMDQyMDAwNDU0NDAwMDA5OTYwMjAwMEE5MjAyMDAwNUVFCis6MTA1NDcwMDAzQzAzMDAwMTAwMDIxMDgwMDA1MDEwMjE4QzQ2MDAxOEVGCis6MTA1NDgwMDAwMEMzMzAyMUFDNDYwMDE4OTYwMjAwMEE5MjA2MDAwNEMwCis6MTA1NDkwMDAyNzcxMDAwODAyMjAyMDIxMDBDMjMwMjEyNEM2MDAwNTA3Cis6MTA1NEEwMDAyNjA1MDAxNDBFMDAwNUFCMDAwNjMwODI5MjA0MDAwNkFCCis6MTA1NEIwMDA4RjY1MDAwNDNDMDI3RkZGMDAwNDIwODAwMDkxMjAyMUMyCis6MTA1NEMwMDA4QzgzMDAwNDM0NDJGRkZGMDBBMjI4MjQwMDY1MTgyMUM5Cis6MTA1NEQwMDBBQzgzMDAwNDkyMDIwMDA3OTIwNDAwMDU5MjAzMDAwNENBCis6MTA1NEUwMDAzMDQyMDAwNDEwNDAwMDE0OTYwNzAwMDgzMDg0MDBGRjhBCis6MTA1NEYwMDAwMDA0MjA4MDAwOTEyMDIxOEM4NjAwMDQ5NzQyMDEwNDQyCis6MTA1NTAwMDA5NjA1MDAwQTMwNjMwMEZGMzA0MkZGRkYwMDQzMTAyMTgwCis6MTA1NTEwMDAwMDQ1MTAyMTMwRTNGRkZGMDA0MzEwMjMyNDQyRkZEODUxCis6MTA1NTIwMDAzMEM2RkZGRjAwMDIxNDAwMDBDMjMwMjVBQzg2MDAwNDI0Cis6MTA1NTMwMDAwQTAwMDRDOTkyMDMwMDA3MzA4NTAwRkYwMDA1Mjg4MDk3Cis6MTA1NTQwMDAwMEIxMjgyMThDQTQwMDAwOTc0MjAxMDQzMDYzMDBGRkMxCis6MTA1NTUwMDAzMDQyRkZGRjAwNDMxMDIxMDA0NzEwMjMzQzAzRkZGRkIwCis6MTA1NTYwMDAwMDgzMjAyNDMwNDJGRkZGMDA4MjIwMjVBQ0E0MDAwMEVECis6MTA1NTcwMDA5MjAzMDAwNzI0MDIwMDAxMTA2MjAwMDYwMDAwMDAwMEYwCis6MTA1NTgwMDAyNDAyMDAwMzEwNjIwMDExMDAwMDAwMDAwQTAwMDRFQzc1Cis6MTA1NTkwMDA4RTAzMDAxMDk3NDIwMTA0OTIwMzAwMDQ5NjA1MDAwQTRFCis6MTA1NUEwMDA4RTI0MDAwQzAwNDMxMDIxMDA0NTEwMjEyNDQyRkZGMkZDCis6MTA1NUIwMDAzQzAzRkZGRjAwODMyMDI0MzA0MkZGRkYwMDgyMjAyNUIwCis6MTA1NUMwMDBBRTI0MDAwQzBBMDAwNEVDOEUwMzAwMTA5NzQyMDEwNDg0Cis6MTA1NUQwMDA5MjAzMDAwNDk2MDUwMDBBOEUyNDAwMTAwMDQzMTAyMTU3Cis6MTA1NUUwMDAwMDQ1MTAyMTI0NDJGRkVFM0MwM0ZGRkYwMDgzMjAyNEVFCis6MTA1NUYwMDAzMDQyRkZGRjAwODIyMDI1QUUyNDAwMTA4RTAzMDAxMEYxCis6MTA1NjAwMDAyNDAyMDAwQUE3NDIwMTQwQTc0MzAxNDI5NjAzMDAwQTcwCis6MTA1NjEwMDA5MjAyMDAwNDNDMDQwMDQwMDA0MzEwMjFBNzQyMDE0NEQwCis6MTA1NjIwMDBBNzQwMDE0Njk3NDIwMTA0QTc0MjAxNDgyNDAyMDAwMTE1Cis6MTA1NjMwMDAwRTAwMDIwQ0E3NDIwMTRBMEUwMDAyMzUwMDAwMDAwMEQ1Cis6MTA1NjQwMDA4RjYyMDAwMDkyMDMwMDA0MDAwMDIwMjFBRjgyMDAwODU2Cis6MTA1NjUwMDA5NzQyMDEwNDk2MDYwMDBBMzA0MkZGRkYwMDYyMTgyMUJCCis6MTA1NjYwMDAwMDYwMjgyMTNDMDMwODAwOEM2MzA0NDQzQzAyMDgwMENECis6MTA1NjcwMDA4QzQyMDQ0MDAwNjUxODIxMDA0NDEwMjEwMDY1MzgyQjNECis6MTA1NjgwMDAwMDQ3MTAyMTNDMDEwODAwQUMyMzA0NDQzQzAxMDgwMDAxCis6MTA1NjkwMDBBQzIyMDQ0MDkyMDQwMDA0MDA4NjIwMjEyNDg0MDAwQUU1Cis6MTA1NkEwMDAzMDg0RkZGRjBFMDAwMUU5MDAwMDAwMDA5NzQ0MDEwNDcwCis6MTA1NkIwMDAzMDg0RkZGRjBFMDAwMUY3MDAwMDAwMDAzQzAyMTAwMEU0Cis6MTA1NkMwMDBBRjQyMDE3ODBBMDAwNTg3OEY4MjAwMjAxNDgyMDAyN0VDCis6MTA1NkQwMDAzMDYyMDAwNjk3NDIwMTA0MTA0MDAwNjczQzAyNDAwMDFGCis6MTA1NkUwMDAzMDYyNDAwMDEwNDAwMDA1MDAwMDAwMDAwMDAwMDAwMDkzCis6MTA1NkYwMDAwMDAwMDAwRDAwMDAwMDAwMjQwMDA0MjA4RjQyMDE3ODBCCis6MTA1NzAwMDAwNDQwRkZGRTI0MDIwODAwQUY0MjAxNzgyNDAyMDAwODkyCis6MTA1NzEwMDBBNzQyMDE0MEE3NDAwMTQyOEY4MjAwMDQ5NzQzMDEwNDQxCis6MTA1NzIwMDAzMDQyMDAwMTEwNDAwMDA3MzA3MEZGRkYyNjAzRkZGRUVCCis6MTA1NzMwMDAyNDAyMDAwMkE3NDIwMTQ2QTc0MzAxNDgwQTAwMDUzRjkwCis6MTA1NzQwMDAyNDAyMDAwREE3NDAwMTQ2MjQwMjAwMERBNzQyMDE0QTkxCis6MTA1NzUwMDA4RjYyMDAwMDI0MDQwMDA4QUY4MjAwMDgwRTAwMDFFOUY3Cis6MTA1NzYwMDAwMDAwMDAwMDBBMDAwNTE5MDIwMDIwMjExMDQwMDA0MjNDCis6MTA1NzcwMDAzQzAyNDAwMDkzNjIwMDAwMzA0MzAwRjAyNDAyMDAxMDFECis6MTA1NzgwMDAxMDYyMDAwNTI0MDIwMDcwMTA2MjAwMzU4RjgyMDAyMDM0Cis6MTA1NzkwMDAwQTAwMDU4ODI0NDIwMDAxOEY2MjAwMDA5NzQzMDEwNDNCCis6MTA1N0EwMDAzMDUwRkZGRjMwNzFGRkZGOEY0MjAxNzgwNDQwRkZGRTUxCis6MTA1N0IwMDAzMjAyMDAwNzAwMDIxMDIzMzA0MjAwMDcyNDAzMDAwQUNGCis6MTA1N0MwMDAyNjA0RkZGRUE3NDMwMTQwQTc0MjAxNDJBNzQ0MDE0NDJCCis6MTA1N0QwMDBBNzQwMDE0NkE3NTEwMTQ4OEY0MjAxMDgzMDQyMDAyMEVFCis6MTA1N0UwMDAxNDQwMDAwMjI0MDMwMDA5MjQwMzAwMDFBNzQzMDE0QUQ2Cis6MTA1N0YwMDAwRTAwMDIwQzNDMDQwMDQwMEUwMDAyMzUwMDAwMDAwMEM4Cis6MTA1ODAwMDAzQzA3MDgwMDhDRTcwNDQ0MDIxMTEwMjEyNDQyRkZGRUVCCis6MTA1ODEwMDAzQzA2MDgwMDhDQzYwNDQwMDA0MDE4MjEwMEUzMzgyMUYzCis6MTA1ODIwMDAwMDAwMTAyMThGNjUwMDAwMDBFMzQwMkIwMEMyMzAyMUYyCis6MTA1ODMwMDAyNjA0MDAwODAwQzgzMDIxMzA4NEZGRkZBRjg1MDAwODJGCis6MTA1ODQwMDAzQzAxMDgwMEFDMjcwNDQ0M0MwMTA4MDBBQzI2MDQ0MDlECis6MTA1ODUwMDAwRTAwMDFFOTAwMDAwMDAwMEEwMDA1MTkwMjIwMjAyMUM1Cis6MTA1ODYwMDAwRTAwMDEzQjAwMDAwMDAwOEY4MjAwMjAyNDQyMDAwMTU2Cis6MTA1ODcwMDBBRjgyMDAyMDNDMDI0MDAwQUY0MjAxMzgwQTAwMDI5MjkxCis6MTA1ODgwMDAwMDAwMDAwMDMwODRGRkZGMzBDNkZGRkYwMDA1MkMwMDQxCis6MTA1ODkwMDAwMEE2MjgyNTM4ODJGRkZGMDA0NTEwMjEwMDQ1MjgyQjRGCis6MTA1OEEwMDAwMDQ1MTAyMTAwMDIxQzAyMzA0MkZGRkYwMDQzMTAyMTdFCis6MTA1OEIwMDAwMDAyMUMwMjMwNDJGRkZGMDA0MzEwMjEzODQyRkZGRjZDCis6MTA1OEMwMDAwM0UwMDAwODMwNDJGRkZGMzA4NEZGRkYzMEE1RkZGRkY4Cis6MTA1OEQwMDAwMDAwMTgyMTEwODAwMDA3MDAwMDAwMDAzMDgyMDAwMTQ1Cis6MTA1OEUwMDAxMDQwMDAwMjAwMDQyMDQyMDA2NTE4MjEwQTAwMDVBMUIyCis6MTA1OEYwMDAwMDA1Mjg0MDAzRTAwMDA4MDA2MDEwMjExMEMwMDAwNkU5Cis6MTA1OTAwMDAyNEM2RkZGRjhDQTIwMDAwMjRBNTAwMDRBQzgyMDAwMDg2Cis6MTA1OTEwMDAwQTAwMDVBQjI0ODQwMDA0MDNFMDAwMDgwMDAwMDAwMDM2Cis6MTA1OTIwMDAxMEEwMDAwODI0QTNGRkZGQUM4NjAwMDAwMDAwMDAwMEM4Cis6MTA1OTMwMDAwMDAwMDAwMDI0MDJGRkZGMjQ2M0ZGRkYxNDYyRkZGQTRGCis6MEM1OTQwMDAyNDg0MDAwNDAzRTAwMDA4MDAwMDAwMDBDNAorOjA0NTk0QzAwMDAwMDAwMDE1NgorOjEwNTk1MDAwMEEwMDAwMkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQwNgorOjEwNTk2MDAwNzQ3ODcwMzYyRTMyMkUzMTAwMDAwMDAwMDYwMjAxMDBERAorOjEwNTk3MDAwMDAwMDAwMDAwMDAwMDEzNjAwMDBFQTYwMDAwMDAwMDBBNgorOjEwNTk4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNworOjEwNTk5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNworOjEwNTlBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNworOjEwNTlCMDAwMDAwMDAwMTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNTlDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENworOjEwNTlEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNworOjEwNTlFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMzg4MDAwMDAwMDAxQworOjEwNTlGMDAwMDAwMDA1REMwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDNCMworOjEwNUEwMDAwMDAwMDAwMDAwMDAwMDAwRDAwMDAwMDBEM0MwMjA4MDAzNgorOjEwNUExMDAwMjQ0MjNEODgzQzAzMDgwMDI0NjM0MDNDQUM0MDAwMDAyNQorOjEwNUEyMDAwMDA0MzIwMkIxNDgwRkZGRDI0NDIwMDA0M0MxRDA4MDA4RAorOjEwNUEzMDAwMzdCRDdGRkMwM0EwRjAyMTNDMTAwODAwMjYxMDAwQTgxMQorOjEwNUE0MDAwM0MxQzA4MDAyNzlDM0Q4ODBFMDAwNDRFMDAwMDAwMDAwRQorOjEwNUE1MDAwMDAwMDAwMEQyN0JERkZCNEFGQTEwMDAwQUZBMjAwMDRGRAorOjEwNUE2MDAwQUZBMzAwMDhBRkE0MDAwQ0FGQTUwMDEwQUZBNjAwMTRCMAorOjEwNUE3MDAwQUZBNzAwMThBRkE4MDAxQ0FGQTkwMDIwQUZBQTAwMjQ1MAorOjEwNUE4MDAwQUZBQjAwMjhBRkFDMDAyQ0FGQUQwMDMwQUZBRTAwMzRGMAorOjEwNUE5MDAwQUZBRjAwMzhBRkI4MDAzQ0FGQjkwMDQwQUZCQzAwNDQ3NgorOjEwNUFBMDAwQUZCRjAwNDgwRTAwMDU5MTAwMDAwMDAwOEZCRjAwNDgwNgorOjEwNUFCMDAwOEZCQzAwNDQ4RkI5MDA0MDhGQjgwMDNDOEZBRjAwMzhENgorOjEwNUFDMDAwOEZBRTAwMzQ4RkFEMDAzMDhGQUMwMDJDOEZBQjAwMjgzMAorOjEwNUFEMDAwOEZBQTAwMjQ4RkE5MDAyMDhGQTgwMDFDOEZBNzAwMTg3MAorOjEwNUFFMDAwOEZBNjAwMTQ4RkE1MDAxMDhGQTQwMDBDOEZBMzAwMDhCMAorOjEwNUFGMDAwOEZBMjAwMDQ4RkExMDAwMDI3QkQwMDRDM0MxQjYwMDQ1NgorOjEwNUIwMDAwOEY3QTUwMzAzNzdCNTAyODAzNDAwMDA4QUY3QTAwMDA2RQorOjEwNUIxMDAwOEY4NjAwM0MzQzAzOTAwMDNDMDI4MDAwMDA4NjI4MjVENAorOjEwNUIyMDAwMDBBMzIwMjVBQzQ0MDAyMDNDMDM4MDAwOEM2NzAwMjBBQgorOjEwNUIzMDAwMDRFMEZGRkUwMDAwMDAwMDAzRTAwMDA4MDAwMDAwMDA5OQorOjEwNUI0MDAwMEEwMDAwNzAyNDA0MDAwMThGODUwMDNDM0MwNDgwMDBBMgorOjEwNUI1MDAwMzQ4MzAwMDEwMEEzMTAyNTAzRTAwMDA4QUM4MjAwMjA3QworOjEwNUI2MDAwMDNFMDAwMDgwMDAwMTAyMTMwODRGRkZGMzBBNUZGRkY5NAorOjEwNUI3MDAwMTA4MDAwMDcwMDAwMTgyMTMwODIwMDAxMTA0MDAwMDI1MAorOjEwNUI4MDAwMDAwNDIwNDIwMDY1MTgyMTE0ODBGRkZCMDAwNTI4NDAxNgorOjEwNUI5MDAwMDNFMDAwMDgwMDYwMTAyMTEwQzAwMDA3MDAwMDAwMDBCMgorOjEwNUJBMDAwOENBMjAwMDAyNEM2RkZGRjI0QTUwMDA0QUM4MjAwMDBFNAorOjEwNUJCMDAwMTRDMEZGRkIyNDg0MDAwNDAzRTAwMDA4MDAwMDAwMDA4MAorOjEwNUJDMDAwMTBBMDAwMDgyNEEzRkZGRkFDODYwMDAwMDAwMDAwMDAyNgorOjEwNUJEMDAwMDAwMDAwMDAyNDAyRkZGRjI0NjNGRkZGMTQ2MkZGRkFBRAorOjEwNUJFMDAwMjQ4NDAwMDQwM0UwMDAwODAwMDAwMDAwOTBBQTAwMzFCMworOjEwNUJGMDAwOEZBQjAwMTA4Q0FDMDA0MDNDMDMwMEZGOEQ2ODAwMDRBQworOjEwNUMwMDAwQUQ2QzAwMjA4Q0FEMDA0NDAwRTA2MDIxMzQ2MkZGRkZFOQorOjEwNUMxMDAwQUQ2RDAwMjQ4Q0E3MDA0ODNDMDlGRjAwMDEwOUMwMjQ5OQorOjEwNUMyMDAwQUQ2NzAwMjg4Q0FFMDA0QzAxODJDODI0MDMxOTc4MjU4QQorOjEwNUMzMDAwQUQ2RjAwMDRBRDZFMDAyQzhDQUQwMDM4MzE0QTAwRkYxMgorOjEwNUM0MDAwQUQ2RDAwMUM5NEE5MDAzMjMxMjhGRkZGQUQ2ODAwMTAzMworOjEwNUM1MDAwOTBBNzAwMzBBNTYwMDAwMkExNjAwMDA0QTE2NzAwMDBDOQorOjEwNUM2MDAwOTBBMzAwMzIzMDYyMDBGRjAwMDIxOTgyMTA2MDAwMDUyQworOjEwNUM3MDAwMjQwNTAwMDExMDY1MDAwRTAwMDAwMDAwMDNFMDAwMDg4QworOjEwNUM4MDAwQTE2QTAwMDE4Q0Q4MDAyODM1NEEwMDgwQUQ3ODAwMTg0MAorOjEwNUM5MDAwOENDRjAwMTRBRDZGMDAxNDhDQ0UwMDMwQUQ2RTAwMDhCOAorOjEwNUNBMDAwOENDNDAwMkNBMTZBMDAwMTAzRTAwMDA4QUQ2NDAwMEM2NAorOjEwNUNCMDAwOENDRDAwMUNBRDZEMDAxODhDQzkwMDE0QUQ2OTAwMTRBQQorOjEwNUNDMDAwOENDODAwMjRBRDY4MDAwODhDQzcwMDIwQUQ2NzAwMENBQworOjEwNUNEMDAwOENDMjAwMTQ4QzgzMDA3MDAwNDNDODJCMTMyMDAwMDc3MworOjEwNUNFMDAwMDAwMDAwMDA4Q0MyMDAxNDE0NENGRkU0MDAwMDAwMDAwRgorOjEwNUNGMDAwMzU0QTAwODAwM0UwMDAwOEExNkEwMDAxOEM4MjAwNzAzMAorOjEwNUQwMDAwMEEwMDAwRTYwMDAwMDAwMDkwODkwMDMwMjdCREZGRjg3RgorOjEwNUQxMDAwOEZBODAwMUNBM0E5MDAwMDhGQTMwMDAwM0MwREZGODBFQQorOjEwNUQyMDAwMzVBMkZGRkY4Q0FDMDAyQzAwNjI1ODI0QUZBQjAwMDAwMgorOjEwNUQzMDAwQTEwMDAwMDQwMEMwNTgyMUE3QTAwMDAyOEQwNjAwMDRBNQorOjEwNUQ0MDAwMDBBMDQ4MjEwMTY3QzgyMThGQTUwMDAwMDA4MDUwMjFENAorOjEwNUQ1MDAwM0MxOEZGN0YwMzJDMjAyNjNDMEUwMEZGMkM4QzAwMDFGQQorOjEwNUQ2MDAwMzcwRkZGRkYzNUNERkZGRjNDMDJGRjAwMDBBRkM4MjQxNworOjEwNUQ3MDAwMDBFREMwMjQwMEMyNzgyNDAwMEMxREMwMDMyMzY4MjU1OAorOjEwNUQ4MDAwMDFGODcwMjVBRDBEMDAwMEFEMEUwMDA0OEQyNDAwMjQzNworOjEwNUQ5MDAwQUZBRDAwMDBBRDA0MDAwODhEMkMwMDIwMjQwNEZGRkZFRgorOjEwNURBMDAwQUQwQzAwMEM5NTQ3MDAzMjMwRTZGRkZGQUQwNjAwMTA0OQorOjEwNURCMDAwOTE0NTAwNDgzMEEyMDBGRjAwMDIxOUMyNTA2MDAwMDE2NgorOjEwNURDMDAwOEQyNDAwMzRBRDA0MDAxNDhENDcwMDM4OEZBQTAwMThDQworOjEwNUREMDAwMjdCRDAwMDhBRDBCMDAyOEFEMEEwMDI0QUQwNzAwMUM0QworOjEwNURFMDAwQUQwMDAwMkNBRDAwMDAxODAzRTAwMDA4QUQwMDAwMjA1RAorOjEwNURGMDAwMjdCREZGRTBBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTA4NAorOjEwNUUwMDAwQUZCRjAwMUM5MDk4MDAzMDAwQzA4ODIxM0MwRDAwRkZGRgorOjEwNUUxMDAwMzMwRjAwN0ZBMENGMDAwMDkwOEUwMDMxMzVBQ0ZGRkYyNAorOjEwNUUyMDAwM0MwQUZGMDBBMENFMDAwMTk0QTYwMDFFQTIyMDAwMDRBMAorOjEwNUUzMDAwOENBQjAwMTQ4RTI5MDAwNDAwQTA4MDIxMDE2QzI4MjQ2MgorOjEwNUU0MDAwMDEyQTQwMjQwMDgwOTAyMTAxMDUyMDI1QTYyNjAwMDI3OQorOjEwNUU1MDAwQUUyNDAwMDQyNjA1MDAyMDI2MjQwMDA4MEUwMDAwOTIyRgorOjEwNUU2MDAwMjQwNjAwMDI5MjQ3MDAzMDI2MDUwMDI4MjYyNDAwMTQ0QworOjEwNUU3MDAwMDAwNzFFMDAwMDAzMTYwMzI0MDYwMDA0MDQ0MDAwMDM2QworOjEwNUU4MDAwMjQwM0ZGRkY5NjU5MDAzMjMzMjNGRkZGMEUwMDAwOTJEOAorOjEwNUU5MDAwQUUyMzAwMTAyNjI0MDAyNDhGQkYwMDFDOEZCMjAwMThGMAorOjEwNUVBMDAwOEZCMTAwMTQ4RkIwMDAxMDI0MDUwMDAzMDAwMDMwMjFEMgorOjEwNUVCMDAwMEEwMDAwOUMyN0JEMDAyMDI3QkRGRkQ4QUZCMTAwMUMwMQorOjEwNUVDMDAwQUZCMDAwMThBRkJGMDAyMDkwQTkwMDMwMjQwMjAwMDEzRAorOjEwNUVEMDAwMDBFMDUwMjEzMTIzMDAzRjAwQTA0MDIxOEZCMDAwNDA1RQorOjEwNUVFMDAwMDA4MDg4MjEwMEMwNDgyMTEwNjIwMDE0OEZBNzAwMzg2QworOjEwNUVGMDAwMjQwQjAwMDUwMEEwMjAyMTAwQzAyODIxMTA2QjAwMTNGNgorOjEwNUYwMDAwMDIwMDMwMjEwRTAwMDEyODAwMDAwMDAwOTIyNTAwN0NENAorOjEwNUYxMDAwMzBBNDAwMDIxMDgwMDAwMzI2MDMwMDMwQUUwMDAwMzBFMQorOjEwNUYyMDAwMjYwMzAwMzQ4RkJGMDAyMDhGQjEwMDFDOEZCMDAwMThGMworOjEwNUYzMDAwMDA2MDEwMjEwM0UwMDAwODI3QkQwMDI4MEUwMDAwQTcyNAorOjEwNUY0MDAwQUZCMDAwMTAwQTAwMDE2RjAwMDAwMDAwOEZBMzAwM0NGQQorOjEwNUY1MDAwMDEwMDIwMjEwMTIwMjgyMTAxNDAzMDIxQUZBMzAwMTBBMQorOjEwNUY2MDAwMEUwMDAwRUVBRkIwMDAxNDBBMDAwMTZGMDAwMDAwMDA0OAorOjEwNUY3MDAwM0MwNjgwMDAzNEMyMEUwMDhDNDQwMDEwOEY4NTAwNDQyMworOjEwNUY4MDAwQUNBNDAwMjA4QzQzMDAxODAzRTAwMDA4QUNBMzAwMjQ1QworOjEwNUY5MDAwM0MwNjgwMDAzNEMyMEUwMDhDNDQwMDE0OEY4NTAwNDRGRgorOjEwNUZBMDAwQUNBNDAwMjA4QzQzMDAxQzAzRTAwMDA4QUNBMzAwMjQzOAorOjEwNUZCMDAwOTM4MjAwMEMxMDQwMDAxQjI0ODMwMDBGMjQwNEZGRjA4OAorOjEwNUZDMDAwMDA2NDM4MjQxMEUwMDAxOTk3OEIwMDEwOTc4NDAwMEVBRAorOjEwNUZEMDAwOTM4OTAwMEQzQzBBNjAxQzBBMDAwMUFDMDE2NDQwMjM1NworOjEwNUZFMDAwMDEwMzcwMjEwMDY0MjgyMzExMjYwMDAyMzFDMkZGRkY0MworOjEwNUZGMDAwMzBBMkZGRkYwMDQ3MzAyQjUwQzAwMDBFMDBFNDQ4MjFDNAorOjEwNjAwMDAwOEQ0RDAwMEMzMUEzRkZGRjAwMDM2NDAwMDAwQzJDMDMzNgorOjEwNjAxMDAwMDRBMUZGRjMwMDAwMzAyMTMwNjM3RkZGMEEwMDAxQTREOAorOjEwNjAyMDAwMjQwNjAwMDEwM0UwMDAwODAwMDAwMDAwOTc4NDAwMEUzMQorOjEwNjAzMDAwMDBFNDQ4MjEzMTIzRkZGRjMxNjhGRkZGMDA2ODM4MkI1RgorOjEwNjA0MDAwNTRFMEZGRjhBNzgzMDAwRTkzOEEwMDBEMTE0MDAwMDU2RAorOjEwNjA1MDAwMjQwRjAwMDEwMDZCQzAyM0EzODAwMDBEMDNFMDAwMDhBMworOjEwNjA2MDAwQTc5ODAwMEUwMDZCQzAyM0EzOEYwMDBEMDNFMDAwMDg2QgorOjEwNjA3MDAwQTc5ODAwMEUwM0UwMDAwODAwMDAwMDAwMjdCREZGRTgxRAorOjEwNjA4MDAwQUZCMDAwMTAzQzEwODAwMDM2MDMwMTQwMzA4QkZGRkZBMgorOjEwNjA5MDAwOTNBQTAwMkJBRkJGMDAxNEE0NkIwMDA0MzYwNDBFMDBCQgorOjEwNjBBMDAwOTQ4ODAwMTYzMEM2MDBGRjhGQTkwMDMwQTQ2ODAwMDY0RgorOjEwNjBCMDAwQUM2NTAwMDhBMDY2MDAxMkE0NkEwMDFBQUM2NzAwMjA1NAorOjEwNjBDMDAwOEZBNTAwMkNBNDY5MDAxODAxMjAyMDIxMEUwMDAxOTg0MgorOjEwNjBEMDAwQUM2NTAwMTQzQzAyMTAwMEFFMDIwMTc4OEZCRjAwMTRDMgorOjEwNjBFMDAwOEZCMDAwMTAwM0UwMDAwODI3QkQwMDE4OEY4NTAwMDA2NgorOjEwNjBGMDAwMjQ4NDAwMDcyN0JERkZGODMwODRGRkY4M0MwNjgwMDBBOQorOjEwNjEwMDAwOTRDQjAwOEEzMTZBRkZGRkFGQUEwMDAwOEZBOTAwMDA3QworOjEwNjExMDAwMDEyNTQwMjMyNTA3RkZGRjMwRTMxRkZGMDA2NDEwMkJGQworOjEwNjEyMDAwMTQ0MEZGRjcwMDA1Njg4MjAwMEQyODgwMzRDQzQwMDA0MQorOjEwNjEzMDAwMDBBQzEwMjEwM0UwMDAwODI3QkQwMDA4OEY4MjAwMDA5QQorOjEwNjE0MDAwMjQ4NjAwMDczMEM1RkZGODAwQTIxODIxMzA2NDFGRkYyNQorOjEwNjE1MDAwMDNFMDAwMDhBRjg0MDAwMDhGODcwMDNDOEY4NDAwNDQ3OAorOjEwNjE2MDAwMjdCREZGQjBBRkI3MDA0NEFGQjQwMDM4QUZCMTAwMkNDQgorOjEwNjE3MDAwQUZCRjAwNDhBRkI2MDA0MEFGQjUwMDNDQUZCMzAwMzQ4RQorOjEwNjE4MDAwQUZCMjAwMzBBRkIwMDAyODNDMEI4MDAwOEM4NjAwMjRGQQorOjEwNjE5MDAwQUQ2NzAwODA4QzhBMDAyMDM1NjcwRTAwMzU2OTAxMDBFQworOjEwNjFBMDAwQUNFQTAwMTA4Qzg4MDAyNDhEMjUwMDA0MDAwMEI4MjE4MgorOjEwNjFCMDAwQUNFODAwMTg4Q0UzMDAxMDAwQTY4ODIzMDAwMEEwMjFBMgorOjEwNjFDMDAwQUNFMzAwMTQ4Q0UyMDAxOEFDRTIwMDFDMTIyMDAwRkVDQworOjEwNjFEMDAwMDBFMEIwMjE5MzZDMDAwODExODAwMEY0MDAwMDAwMDA4MgorOjEwNjFFMDAwOTc2RjAwMTAzMUVFRkZGRjAyMkU2ODJCMTVBMDAwRUYxNQorOjEwNjFGMDAwMDAwMDAwMDA5NzcyMDAxMDMyNTBGRkZGQUVEMDAwMDA4OAorOjEwNjIwMDAwM0MwMzgwMDA4Qzc0MDAwMDMyOTMwMDA4MTI2MEZGRkQ5NAorOjEwNjIxMDAwMDAwMDAwMDA5NkQ4MDAwODhFQzcwMDA0MzMwNUZGRkY3OQorOjEwNjIyMDAwMzBCNTAwMDExMkEwMDBFNDAwMDAwMDAwMDAwMDAwMERFNQorOjEwNjIzMDAwMzBCRkEwNDAyNDE5MDA0MDEzRjkwMTFCMzBCNEEwMDA2NgorOjEwNjI0MDAwMTI4MDAwREYwMDAwMDAwMDkzNzMwMDA4MTI2MDAwMDg1NQorOjEwNjI1MDAwMDAwMDAwMDA5NzZEMDAxMDMxQUNGRkZGMDBFQzIwMkIxOAorOjEwNjI2MDAwMTA4MDAwMDMzMEFFMDA0MDExQzAwMEQ1MDAwMDAwMDBENworOjEwNjI3MDAwQTc4NTAwNDBBRjg3MDAzODkzNjMwMDA4MDIyMDI4MjFEQgorOjEwNjI4MDAwQUZCMTAwMjAxNDYwMDBGNTI3QjQwMDIwQUY2MDAwMEMwRgorOjEwNjI5MDAwOTc4RjAwNDAzMUYxNDAwMDE2MjAwMDAyMjQwMzAwMTZDMQorOjEwNjJBMDAwMjQwMzAwMEUyNDA1NDAwN0EzNjMwMDBBQUY2NTAwMTQxMQorOjEwNjJCMDAwOTM4QTAwNDI4RjcwMDAxNDMxNTUwMDAxMDAxNTEyNDA3RQorOjEwNjJDMDAwMDIwMjQ4MjVBRjY5MDAxNDk3OUYwMDQwOEY3ODAwMTRBMAorOjEwNjJEMDAwMzNGOTAwMTAwMzE5NDAyNUFGNjgwMDE0OTc5MjAwNDA2RAorOjEwNjJFMDAwMzI0NzAwMDgxMEUwMDE2RTAwMDAwMDAwOEY2NzAwMTRDNAorOjEwNjJGMDAwM0MxMjEwMDAzQzExODAwMDAwRjI3ODI1QUY2RjAwMTRCMgorOjEwNjMwMDAwMzYyMzBFMDA5NDZFMDAwQTNDMEQ4MTAwMjQwNjAwMEUxOAorOjEwNjMxMDAwMzFDQ0ZGRkYwMThEMjAyNUFGNjQwMDA0QTM2NjAwMDI4RAorOjEwNjMyMDAwOTM3MzAwMEEzNDA2RkZGQzI2NkIwMDA0QTM2QjAwMEE3QgorOjEwNjMzMDAwOTc5ODAwNDAzMzA4MjAwMDExMDAwMTVGMDAwMDAwMDAyMgorOjEwNjM0MDAwM0MwNTgwMDAzNEE5MEUwMDk3OTkwMDQwOTUzODAwMEM1OAorOjEwNjM1MDAwOTc4NzAwNDAwMDE5NDA0MjMzMTJDMDAwMzEwMzAwMDMwOAorOjEwNjM2MDAwMDAxMjdCMDMzMEYxMTAwMDAwNkY2ODI1MDAxMTcyMDNFQQorOjEwNjM3MDAwMDFBRTYwMjUwMDBDMjBDMEE3NjQwMDEyOTc5MzAwNDA3NgorOjEwNjM4MDAwOTM2QTAwMEEwMDEzNTk4MjMxNzUwMDNDMDJBQTEwMjE1OQorOjEwNjM5MDAwMjQ1MDAwM0NBMzcwMDAwOTk1M0YwMDBDMzNGOTNGRkZFNworOjEwNjNBMDAwQTc3OTAwMTA5NzcwMDAxMjkzNjkwMDA5MDEzMEY4MjE1NQorOjEwNjNCMDAwMjdFNTAwMDIzMEI5MDAwNzAwMTlDMDIzMzMwODAwMDdBMQorOjEwNjNDMDAwQTM2ODAwMEI5MzcxMDAwOTk3NzIwMDEyOTc2RjAwMTA3OQorOjEwNjNEMDAwMzIyNzAwRkY4RjkxMDAzODk3OEQwMDQwMDBGMjE4MjE3RQorOjEwNjNFMDAwMDA2RjcwMjEwMUM2NjAyMTMxQTYwMDQwMTBDMDAwMDU3OQorOjEwNjNGMDAwMzE4NUZGRkYwMEIxMTAyQjNDMTI4MDAwMTA0MDAwMTdDOAorOjEwNjQwMDAwMDAwMDk4MjEwMjI1QTgyQjU2QTAwMTNFOEZBNTAwMjA1MAorOjEwNjQxMDAwM0MwNDgwMDAzNDhBMEUwMDhENTMwMDE0M0MwNjgwMDAzQQorOjEwNjQyMDAwQUQ1MzAwMTA4RDRCMDAxQ0FENEIwMDE4QUQ0NTAwMDA2NgorOjEwNjQzMDAwOENDRDAwMDAzMUFDMDAwODExODBGRkZEMzRDRTBFMDA4MQorOjEwNjQ0MDAwOTVDMzAwMDgwMEEwODgyMTAwMDA5MDIxQTc4MzAwNDA4OAorOjEwNjQ1MDAwOERDNjAwMDQyNDEzMDAwMUFGODYwMDM4OTc2RjAwMTAyQQorOjEwNjQ2MDAwMzFGNUZGRkY4RTlGMDAwMDAzRjEyODIzMTBBMDAxMUZDQworOjEwNjQ3MDAwQUU4NTAwMDA5MzYyMDAwODE0NDAwMEREMDAwMDAwMDBCQgorOjEwNjQ4MDAwMEUwMDAxRTcyNDA0MDAxMDhGOTAwMDQ4MDA0MDI4MjFFRQorOjEwNjQ5MDAwM0MwMjMyMDAzMjA2MDBGRjAwMDY1NDAwMDE0MkY4MjU5QgorOjEwNjRBMDAwMjYwOTAwMDFBRjg5MDA0OEFDQkYwMDAwOTM3OTAwMDlCQworOjEwNjRCMDAwOTc3ODAwMTI5MzZGMDAwQTMzMjgwMEZGMzMwM0ZGRkYyMQorOjEwNjRDMDAwMDEwMzM4MjEwMDA3NkMwMDMxRUUwMEZGMDFBRTYwMjVBQQorOjEwNjREMDAwQUNBQzAwMDQ4Rjg0MDA0ODk3OEIwMDQwMzE2QTIwMDBFOAorOjEwNjRFMDAwMTE0MDAxMEFBQ0E0MDAwODk3NjQwMDEyMzA4QkZGRkYzMgorOjEwNjRGMDAwMDY0MDAxMDhBQ0FCMDAwQzk3OEUwMDQwMzFDNTAwMDg4NworOjEwNjUwMDAwMTRBMDAwMDIyNjI4MDAwNjI2MjgwMDAyM0MxRjgwMDA1NgorOjEwNjUxMDAwMzdFNzBFMDA5NEY5MDAxNDhDRTUwMDFDOEY2NzAwMDQyNworOjEwNjUyMDAwOTM3ODAwMDIzMzI0RkZGRjMzMDMwMEZGQUZBMzAwMTA3MgorOjEwNjUzMDAwOEY2RjAwMTRBRkE4MDAxODBFMDAwMUNCQUZBRjAwMTQ4RQorOjEwNjU0MDAwMjQwNDAwMTAwRTAwMDFGQjAwMDAwMDAwOEU5MjAwMDBFOQorOjEwNjU1MDAwMTY0MDAwMDUwMDAwMDAwMDhGNzgwMDE0MjQwM0ZGQkZFMAorOjEwNjU2MDAwMDMwM0EwMjRBRjc0MDAxNDhGNjcwMDBDMDBGNUM4MjE0QQorOjEwNjU3MDAwQUY3OTAwMEM5Mzc1MDAwODE2QTAwMDA4MDAwMDAwMDAxOQorOjEwNjU4MDAwMTI2MDAwMDYwMDAwMDAwMDhGNjgwMDE0M0MwQUVGRkY1NAorOjEwNjU5MDAwMzU0OUZGRkUwMTA5RjgyNEFGN0YwMDE0QTM3MzAwMDhGQQorOjEwNjVBMDAwOEZBNTAwMjAwQTAwMDM0RjAyMjAyMDIxQUVEMTAwMDA1OQorOjEwNjVCMDAwMEEwMDAyMkQzQzAzODAwMDE0RTBGRjFFMzBCRkEwNDAwMworOjEwNjVDMDAwMEUwMDAxOTAwMDAwQTAyMTJFOTEwMDAxMDIzN0IwMjU5RAorOjEwNjVEMDAwMTJDMDAwMTg4RkJGMDA0ODhGODcwMDNDMjQxNzBGMDA5RgorOjEwNjVFMDAwMTBGNzAwRDQzQzA2ODAwMDhDRDkwMTc4MDcyMEZGRkUwQworOjEwNjVGMDAwMjQxRjBGMDAxMEZGMDBGNjM0Q0EwRTAwOEQ1NjAwMTQ0MQorOjEwNjYwMDAwMzRDNzAxNDAyNDA4MDI0MEFDRjYwMDA0OEQ0OTAwMUM0OAorOjEwNjYxMDAwM0MxNDEwMDBBQ0U5MDAwOEEwRTAwMDEyQTRFMDAwMUE0RAorOjEwNjYyMDAwQUNFMDAwMjBBNEUwMDAxOEFDRTgwMDE0QUNENDAxNzg4MQorOjEwNjYzMDAwOEZCRjAwNDg4RkI3MDA0NDhGQjYwMDQwOEZCNTAwM0MzNQorOjEwNjY0MDAwOEZCNDAwMzg4RkIzMDAzNDhGQjIwMDMwOEZCMTAwMkM3QworOjEwNjY1MDAwOEZCMDAwMjgwM0UwMDAwODI3QkQwMDUwOEY5MTAwMzg1QworOjEwNjY2MDAwOTc4ODAwNDAzQzEyODAwMDAyMjBBODIxMzEwNzAwNDA5QQorOjEwNjY3MDAwMTRFMEZGN0MwMDAwOTgyMTk3NzkwMDEwOEY5MjAwMzg3OQorOjEwNjY4MDAwMzMzOEZGRkYxMzEyMDBBODAwMDAyMDIxMDA4MEEwMjE1MgorOjEwNjY5MDAwMTA4MDAwRjMwMEEwODgyMTE2MjBGRUNFMDAwMDAwMDAyQworOjEwNjZBMDAwMEEwMDAzMUYyRTkxMDAwMTNDMDM4MDAwOEM2MjAxNzhEOAorOjEwNjZCMDAwMDQ0MEZGRkUyNDA4MDgwMDhGODYwMDAwQUM2ODAxNzhDMworOjEwNjZDMDAwM0MwMzgwMDA5NDZEMDA4QTMxQUNGRkZGMDE4NjU4MjNBMworOjEwNjZEMDAwMjU2QUZGRkYzMTQ0MUZGRjJDODkwMDA4MTUyMEZGRjlCMAorOjEwNjZFMDAwMDAwMDAwMDA4RjhGMDA0ODM0NzA0MDAwOEY4MzAwM0MxMgorOjEwNjZGMDAwMDBFMEEwMjEyNDBFMEYwMDI1RTcwMDAxQUY4NzAwNDgyRAorOjEwNjcwMDAwMDBEMDMwMjEwMjM0ODgyMzNDMDg4MDAwMzFGNTAwRkY5RQorOjEwNjcxMDAwMTA2RTAwMDUyNDA3MDAwMTkzOTgwMDQyMzMxMzAwMDExNgorOjEwNjcyMDAwMDAxMzkyNDAzNjQ3MDAwMTAwMTUyNDAwM0MwQTAxMDA4NgorOjEwNjczMDAwMDA4QTQ4MjVBQ0M5MDAwMDhGODIwMDQ4MzBCRjAwMzY2RgorOjEwNjc0MDAwMzBCOTAwMDhBQ0MyMDAwNDEzMjAwMDk5MDBGRjk4MjU1RQorOjEwNjc1MDAwMzUxMjBFMDA5NjUwMDAwQThGODcwMDAwM0MwRjgxMDAxMgorOjEwNjc2MDAwMzIwM0ZGRkYyNEVEMDAwODM1MDYwMTQwMDA2RjYwMjU2RAorOjEwNjc3MDAwM0MwRTEwMDAzMUFCMUZGRjI2OTIwMDA2MjQwNTAwMEVEMAorOjEwNjc4MDAwQUNDQzAwMjAwMjZFOTgyNUE0QzUwMDFBQUY4QjAwMDA4NworOjEwNjc5MDAwQTREMjAwMTgxNjIwMDAwODNDMTA4MDAwOEY4OTAwM0MwRAorOjEwNjdBMDAwMjQwMjBGMDA1MTIyMDAwMjI0MTcwMDAxMzY3MzAwNDAxQQorOjEwNjdCMDAwMEUwMDAxODgzQzEwODAwMDM2MDYwRTAwOENDQjAwMTRDMQorOjEwNjdDMDAwMzYwQTAxNDAwMjQwMjAyMUFENEIwMDA0OENDNTAwMUM1QworOjEwNjdEMDAwQUQ0NTAwMDhBMTU1MDAxMkFENTMwMDE0MEUwMDAxOThGQworOjEwNjdFMDAwM0MxNTEwMDBBRTE1MDE3ODBBMDAwMzUyMDAwMDAwMDBBRAorOjEwNjdGMDAwOTM2RjAwMDk5NzZFMDAxMjkzNkQwMDBCMzFFNTAwRkY1NworOjEwNjgwMDAwMDBBRTIwMjEzMUFDMDBGRjAwOEM4MDIxMjYwMjAwMEE1RQorOjEwNjgxMDAwMzA1MEZGRkYwRTAwMDFFNzAyMDAyMDIxOEY4NjAwNDg2NAorOjEwNjgyMDAwM0MwMzQxMDAzQzA1ODAwMDI0Q0IwMDAxQUY4QjAwNDhCNQorOjEwNjgzMDAwOTM2QTAwMDk5NzY5MDAxMjMwQzYwMEZGMzE1RjAwRkZCQworOjEwNjg0MDAwMzEyOEZGRkYwM0U4MzgyMTI0RjkwMDAyMDAwNkM0MDBDNAorOjEwNjg1MDAwMDMxOTc4MjUwMUUzNzAyNUFDNEUwMDAwOEY2RDAwMEMwNAorOjEwNjg2MDAwMzRBNDBFMDA5NDhCMDAxNDAxQjI2MDI1QUM0QzAwMDREQgorOjEwNjg3MDAwOEM4NTAwMUM4RjY3MDAwNDkzNkEwMDAyMzE2NEZGRkY1RgorOjEwNjg4MDAwMzE0OTAwRkZBRkE5MDAxMDhGNjgwMDE0QUZCMTAwMThBNAorOjEwNjg5MDAwMEUwMDAxQ0JBRkE4MDAxNDBBMDAwMkZEMDIwMDIwMjE2NworOjEwNjhBMDAwQUY2MDAwMDRBMzYwMDAwMjk3OTgwMDQwMzMwODIwMDAwNgorOjEwNjhCMDAwMTUwMEZFQTMwMDAwMzAyMUE3NjAwMDEyOTc4NDAwNDA1RAorOjEwNjhDMDAwOTM2QjAwMEEzQzEwODAwMDMwOTMxRjAwMDAxMzUxODMyQgorOjEwNjhEMDAwMDE0QkE4MjEyNkEyMDAyOEEzNjIwMDA5MzYwOTBFMDA1OAorOjEwNjhFMDAwOTUzRjAwMEMwQTAwMDI5NUE3N0YwMDEwOEY3MDAwMTRERQorOjEwNjhGMDAwMzYwOTAwNDAwRTAwMDE4OEFGNjkwMDE0MEEwMDAyQzk4MQorOjEwNjkwMDAwMDAwMDAwMDAwQTAwMDM0RjAwMDAyMDIxMDY0MUZFRkFBQgorOjEwNjkxMDAwQUNBMDAwMEM4Q0FDMDAwQzNDMEQ4MDAwMDE4RDkwMjVDRgorOjEwNjkyMDAwMEEwMDAyRUFBQ0IyMDAwQzAwMDA5MDIxMEEwMDAyQzU4NQorOjEwNjkzMDAwMjQxMzAwMDExMjgwMDAwNzNDMDI4MDAwMzQ0QjBFMDAzQgorOjEwNjk0MDAwOTU2NjAwMDgzMEQzMDA0MDEyNjAwMDQ5MDAwMDAwMDA0NgorOjEwNjk1MDAwM0MwNjgwMDA4Q0QwMDE3ODA2MDBGRkZFMzRDNTBFMDA5NgorOjEwNjk2MDAwOTRCNTAwMTAzQzAzMDUwMDM0Q0MwMTQwMzJCOEZGRkY2MQorOjEwNjk3MDAwMDMwMzkwMjVBRDkyMDAwQzhDQUYwMDE0MjQwRDIwMDA3MQorOjEwNjk4MDAwM0MwNDEwMDBBRDhGMDAwNDhDQUUwMDFDQUQ4RTAwMDhERQorOjEwNjk5MDAwQTE4MDAwMTJBNTgwMDAxQUFEODAwMDIwQTU4MDAwMThGQgorOjEwNjlBMDAwQUQ4RDAwMTRBQ0M0MDE3ODBBMDAwMzI2M0MwNjgwMDBCQgorOjEwNjlCMDAwOEY5RjAwMDAzNTE4MDE0MDI2OTIwMDAyMjdGOTAwMDgzOQorOjEwNjlDMDAwMzMyODFGRkZBNzEyMDAxODBBMDAwMzkxQUY4ODAwMDBBOAorOjEwNjlEMDAwM0MwMjgwMDAzNDQ1MDE0MEFDQTAwMDBDMTI4MDAwMUIzQQorOjEwNjlFMDAwMzQ1MzBFMDAzNDUxMEUwMDhFMzcwMDEwQUNCNzAwMDQ0MworOjEwNjlGMDAwOEUyNDAwMTgzQzBCODAwMEFDQTQwMDA4MzU3MDAxNDBDOAorOjEwNkEwMDAwMjQwNDAwNDBBMjAwMDAxMjhGQkYwMDQ4QTYwMDAwMUExNAorOjEwNkExMDAwOEZCNzAwNDRBRTAwMDAyMDhGQjYwMDQwQTYwMDAwMThEQgorOjEwNkEyMDAwOEZCNTAwM0NBRTA0MDAxNDhGQjQwMDM4OEZCMzAwMzQyRgorOjEwNkEzMDAwOEZCMjAwMzA4RkIxMDAyQzhGQjAwMDI4M0MwMjEwMDBDNAorOjEwNkE0MDAwMjdCRDAwNTAwM0UwMDAwOEFENjIwMTc4OEU2NjAwMTQ5NworOjEwNkE1MDAwQUNBNjAwMDQ4RTY0MDAxQzBBMDAwNDJBM0MwQjgwMDBEMworOjEwNkE2MDAwMEUwMDAxOTAyRTkxMDAwMTBBMDAwMzIwMDIzN0IwMjU4QworOjEwNkE3MDAwMDAwMDAwMDAwMDAwMDAwRDAwMDAwMDAwMjQwMDAzNjk3OQorOjEwNkE4MDAwMEEwMDA0MDEzQzA2ODAwMDI3QkRGRkQ4QUZCRjAwMjBFQworOjEwNkE5MDAwM0MwOTgwMDAzQzFGMjBGRkFGQjIwMDE4M0MwNzYwMDA5QgorOjEwNkFBMDAwMzUzMjBFMDAyNDAyMDAxMDM3RjlGRkZEQUNFMjMwMDg0OQorOjEwNkFCMDAwQUZCMzAwMUNBRkIxMDAxNEFGQjAwMDEwQUU1OTAwMDA2RQorOjEwNkFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNgorOjEwNkFEMDAwMDAwMDAwMDAzQzE4MDBGRjM3MTNGRkZEQUU1MzAwMDAxQworOjEwNkFFMDAwM0MwQjYwMDQ4RDcwNTAwMDI0MTFGRjdGM0MwRTAwMDJBRgorOjEwNkFGMDAwMDIxMTc4MjQzNUVDMzgwQzM1Q0QwMTA5QUNFRDRDMTg3OQorOjEwNkIwMDAwMjQwQTAwMDlBRDZDNTAwMDhDRTgwNDM4QUQyQTAwMDg1NgorOjEwNkIxMDAwQUQyMDAwMTQ4Q0U1NEMxQzMxMDZGRkZGMzhDNDJGNzFFQQorOjEwNkIyMDAwMDAwNTFFMDIzMDYyMDAwRjI0ODZDMEIzMTA0MDAwMDcyQgorOjEwNkIzMDAwQUY4MjAwMDg4Q0U1NEMxQzNDMDkwMDFGMzUyOEZDMDA4NgorOjEwNkI0MDAwMDBBODE4MjQwMDAzMjFDMkFGODQwMDA0OENGMTA4MDhCNworOjEwNkI1MDAwM0MwRjU3MDkyNDEyRjAwMDAyMzI3MDI0MzVGMDAwMTA2NworOjEwNkI2MDAwMDFEMDYwMjYwMUNGNjgyNjJEQUEwMDAxMkQ4QjAwMDFERgorOjEwNkI3MDAwMDE0QjM4MjU1MEUwMDAwOUEzODAwMDBDM0MxRjYwMUMyRAorOjEwNkI4MDAwOEZGODAwMDgyNDE5MDAwMUEzOTkwMDBDMzMxMzdDMDAyRQorOjEwNkI5MDAwQTc5MzAwMTBBNzgwMDAwRUEzODAwMDBEQUY4MDAwNDhDRgorOjEwNkJBMDAwMTRDMDAwMDNBRjgwMDAwMDNDMDY2MDAwQUNDMDQ0MkM2MQorOjEwNkJCMDAwMEUwMDA1QjkzQzEwODAwMDBFMDAwRjI0MzYxMTAxMDBCNAorOjEwNkJDMDAwM0MxMjA4MDAyNjUyM0RGMDNDMTMwODAwMjY3MzNFNzAyQworOjEwNkJEMDAwOEUwMzAwMDAzODY0MDAwMTMwODIwMDAxMTQ0MEZGRkM4NQorOjEwNkJFMDAwM0MwQjgwMEE4RTI2MDAwMDI0MDdGRjgwMjRDOTAyNDA0NworOjEwNkJGMDAwMzEyQTAwN0YwMTRCNDAyMTAxMjcyODI0QUUwNjAwMjBDNgorOjEwNkMwMDAwQUY4ODAwNDRBRTA1MDAyNDNDMDQ4MDAwQUY4NjAwM0MwMQorOjEwNkMxMDAwOEM4QzAxNzgwNTgwRkZGRTI0MTgwODAwOTIyRjAwMDg1NAorOjEwNkMyMDAwQUM5ODAxNzhBMzhGMDA0MjkzOEUwMDQyMzFDRDAwMDFEMQorOjEwNkMzMDAwMTFBMDAwMEYyNDA1MEQwMDI0REZGODAwMkZGOTAzMDEzNworOjEwNkM0MDAwMTMyMDAwMUMwMDA2MjlDMjI0QTRGRkYwMDAwNDEwNDJGNworOjEwNkM1MDAwMDAwMjMxNDAwRTAwMDIwMjAwRDJEODIxM0MwMjQwMDA2NgorOjEwNkM2MDAwM0MwNjgwMDBBQ0MyMDEzODBBMDAwNEEwMDAwMDAwMDAwRAorOjEwNkM3MDAwMTBDNTAwMjMyNDBEMEYwMDEwQ0QwMDI3M0MxRjgwMDhGNQorOjEwNkM4MDAwMzdGOTAwODA5MzM4MDAwMDI0MEUwMDUwMzMwRjAwRkZDNgorOjEwNkM5MDAwMTVFRUZGRjMzQzAyNDAwMDBFMDAwQTQwMDAwMDAwMDAyOQorOjEwNkNBMDAwM0MwMjQwMDAzQzA2ODAwMEFDQzIwMTM4MEEwMDA0QTA0RgorOjEwNkNCMDAwMDAwMDAwMDA4RjgzMDAwNDAwQTM0MDJCMTUwMDAwMEI5MAorOjEwNkNDMDAwOEY4QjAwMDgwMDZCNTAyMTI1NDdGRkZGMDBFNTQ4MkIwNAorOjEwNkNEMDAwMTUyMDAwMDYwMEEzNjAyMzAwMEMxOTQwMEUwMDAyMDJEQworOjEwNkNFMDAwMDA3M0Q4MjEwQTAwMDRDNDNDMDI0MDAwMDAwMDAwMEREQgorOjEwNkNGMDAwMEUwMDAyMDIwMDAwMDAwMDBBMDAwNEM0M0MwMjQwMDAzMgorOjEwNkQwMDAwM0MxQjA4MDAyNzdCM0Y3MDBFMDAwMjAyMDAwMDAwMDBDMQorOjEwNkQxMDAwMEEwMDA0QzQzQzAyNDAwMDNDMUIwODAwMjc3QjNGOTA1MworOjEwNkQyMDAwMEUwMDAyMDIwMDAwMDAwMDBBMDAwNEM0M0MwMjQwMDAwMQorOjEwNkQzMDAwM0MwNjYwMDQzQzA5MDgwMDI1MjkwMTA0QUNDOTUwMkMxQworOjEwNkQ0MDAwOENDODUwMDAzQzA1ODAwMDNDMDIwMDAyMzUwNzAwODBFMgorOjEwNkQ1MDAwQUNDNzUwMDAzQzA0MDgwMDI0ODQxNUE0M0MwMzA4MDA4MAorOjEwNkQ2MDAwMjQ2MzE1NUNBQ0E1MDAwOEFDQTIwMDBDM0MwMTA4MDAzMworOjEwNkQ3MDAwQUMyNDNEODAzQzAxMDgwMEFDMjMzRDg0MDNFMDAwMDhDNgorOjEwNkQ4MDAwMjQwMjAwMDEwMEEwMzAyMTNDMUMwODAwMjc5QzNEODgwMworOjEwNkQ5MDAwM0MwQzA0MDAzQzBCMDAwMjAwOEIzODI2MDA4QzQwMjY4MworOjEwNkRBMDAwMkNFMjAwMDEwMDA3NTAyQjJEMDUwMDAxMDAwQTQ4ODA0RAorOjEwNkRCMDAwM0MwMzA4MDAyNDYzM0Q4MDAwNDUyMDI1MDEyMzE4MjE2MQorOjEwNkRDMDAwMTA4MDAwMDMwMDAwMTAyMUFDNjYwMDAwMjQwMjAwMDFDNgorOjEwNkREMDAwMDNFMDAwMDgwMDAwMDAwMDNDMUMwODAwMjc5QzNEODhFMAorOjEwNkRFMDAwM0MwQjA0MDAzQzBBMDAwMjAwOEEzMDI2MDA4QjM4MjY0NworOjEwNkRGMDAwMkNDMjAwMDEwMDA2NDgyQjJDRTUwMDAxMDAwOTQwODA1MAorOjEwNkUwMDAwM0MwMzA4MDAyNDYzM0Q4MDAwNDUyMDI1MDEwMzE4MjEzMAorOjEwNkUxMDAwMTA4MDAwMDUwMDAwMTAyMTNDMEMwODAwMjU4QzE1NUMzQQorOjEwNkUyMDAwQUM2QzAwMDAyNDAyMDAwMTAzRTAwMDA4MDAwMDAwMDAzOAorOjEwNkUzMDAwM0MwOTAwMDIzQzA4MDQwMDAwODgzMDI2MDA4OTM4MjZGRQorOjEwNkU0MDAwMkNDMzAwMDEwMDgwMjgyMTJDRTQwMDAxMDA4MzEwMjVDMAorOjEwNkU1MDAwMTA0MDAwMEIwMDAwMzAyMTNDMUMwODAwMjc5QzNEODg5RQorOjEwNkU2MDAwM0MwQTgwMDA4RDRFMDAwODI0MDYwMDAxMDFDQTY4MjVGNgorOjEwNkU3MDAwQUQ0RDAwMDg4RDRDMDAwQzAxODU1ODI1QUQ0QjAwMEMyNAorOjEwNkU4MDAwMDNFMDAwMDgwMEMwMTAyMTNDMUMwODAwMjc5QzNEODgzRQorOjEwNkU5MDAwM0MwNTgwMDA4Q0E2MDAwQzAwMDQyMDI3MjQwMjAwMDE4MQorOjEwNkVBMDAwMDBDNDE4MjQwM0UwMDAwOEFDQTMwMDBDM0MwMjAwMDI1QworOjEwNkVCMDAwMTA4MjAwMEIzQzA1NjAwMDNDMDcwNDAwMTA4NzAwMDNCMworOjEwNkVDMDAwMDAwMDAwMDAwM0UwMDAwODAwMDAwMDAwOENBOTA4RDBDQQorOjEwNkVEMDAwMjQwQUZGRkQwMTJBNDAyNDAzRTAwMDA4QUNBODA4RDBFMgorOjEwNkVFMDAwOENBNDA4RDAyNDA2RkZGRTAwODYxODI0MDNFMDAwMDhDNgorOjEwNkVGMDAwQUNBMzA4RDAzQzA1NjAxQTM0QTYwMDEwOENDMzAwODBGNworOjEwNkYwMDAwMjdCREZGRjg4Q0M1MDA4NEFGQTMwMDAwOTNBNDAwMDA0OAorOjEwNkYxMDAwMjQwMjAwMDExMDgyMDAwM0FGQTUwMDA0MDNFMDAwMDg3MgorOjEwNkYyMDAwMjdCRDAwMDg5M0E3MDAwMTE0RTAwMDE0OTdBQzAwMDJFRAorOjEwNkYzMDAwOTdCODAwMDIzQzBGODAwMDMzMEVGRkZDMDFDRjY4MjFBMAorOjEwNkY0MDAwQURBNTAwMDBBM0EwMDAwMDNDMDY2MDAwOENDNzA4RDBERgorOjEwNkY1MDAwMjQwOEZGRkUzQzA0NjAxQTAwRTgyODI0QUNDNTA4RDBEMQorOjEwNkY2MDAwOEZBMzAwMDQ4RkEyMDAwMDM0OTkwMDEwMjdCRDAwMDhGMQorOjEwNkY3MDAwQUYyMjAwODAwM0UwMDAwOEFGMjMwMDg0M0MwQjgwMDBCOAorOjEwNkY4MDAwMzE4QUZGRkMwMTRCNDgyMThEMjgwMDAwMEEwMDA1N0Q1NQorOjEwNkY5MDAwQUZBODAwMDQyN0JERkZFOEFGQkYwMDEwM0MxQzA4MDBFRAorOjEwNkZBMDAwMjc5QzNEODgzQzA1ODAwMDhDQTQwMDBDOENBMjAwMDQyQQorOjEwNkZCMDAwM0MwMzAwMDIwMDQ0MjgyNDEwQTAwMDBBMDBBMzE4MjQ2NworOjEwNkZDMDAwM0MwNjA0MDAzQzA0MDAwMjE0NjAwMDA5MDBBNjEwMjRFMgorOjEwNkZEMDAwMTQ0MDAwMEYzQzA0MDQwMDAwMDAwMDBEM0MxQzA4MDA5RAorOjEwNkZFMDAwMjc5QzNEODg4RkJGMDAxMDAzRTAwMDA4MjdCRDAwMThENAorOjEwNkZGMDAwM0MwMjA4MDA4QzQyM0Q4MDAwNDBGODA5MDAwMDAwMDA3RgorOjEwNzAwMDAwM0MxQzA4MDAyNzlDM0Q4ODBBMDAwNUE2OEZCRjAwMTA4NQorOjEwNzAxMDAwM0MwMjA4MDA4QzQyM0Q4NDAwNDBGODA5MDAwMDAwMDA1QQorOjEwNzAyMDAwMEEwMDA1QUMwMDAwMDAwMDAwMDQxMUMwMDNFMDAwMDhFNQorOjEwNzAzMDAwMjQ0MjAyNDAzQzA0MDgwMDI0ODQzRkQ0MjQwNTAwMUE2MgorOjEwNzA0MDAwMEEwMDAwOUMwMDAwMzAyMTI3QkRGRkUwQUZCMDAwMTAxNworOjEwNzA1MDAwM0MxMDgwMDBBRkJGMDAxOEFGQjEwMDE0MzYxMTAxMDAyMgorOjEwNzA2MDAwOTIyMjAwMDkwRTAwMDVCNjMwNDQwMDdGOEUzRjAwMDBEQQorOjEwNzA3MDAwOEY4OTAwM0MzQzBGMDA4MDAzRTI2MDIxMjU4ODAwNDA5RQorOjEwNzA4MDAwMDA0OUY4MjEyNDBERkY4MDMxMEUwMDc4MzE5ODAwNzhGNgorOjEwNzA5MDAwMzVGOTAwMDEzNUYxMDAwMjAzMTkzODI1MDFEMTQ4MjVFMQorOjEwNzBBMDAwMDEwRDMwMjQwM0VENTgyNDAxOEQyODI0MjQwQTAwNDBDQQorOjEwNzBCMDAwMjQwNDAwODAyNDAzMDBDMEFFMEIwMDI0QUUwMDA4MTA5RQorOjEwNzBDMDAwQUUwQTA4MTRBRTA0MDgxOEFFMDMwODFDQUUwNTA4MDQ4NgorOjEwNzBEMDAwQUUwNzA4MjBBRTA2MDgwOEFFMDkwODI0MzYwOTA5MDBFNAorOjEwNzBFMDAwOTUzOTAwMEMzNjA1MDk4MDMzRUQwMDdGMzMzOEZGRkZGQQorOjEwNzBGMDAwMDAxODg5QzBBRTExMDgwMEFFMEYwODI4OTUyQzAwMENBRQorOjEwNzEwMDAwOEZCRjAwMTg4RkIxMDAxNDMxOEJGRkZGMDAwQjUxQzBFRgorOjEwNzExMDAwQUUwQTAwMkM4Q0E0MDA1MDhGQjAwMDEwOENBMzAwM0M1MQorOjEwNzEyMDAwOEQyNzAwMDQ4Q0E4MDAxQzhDQTYwMDM4M0MwRTgwMEExOQorOjEwNzEzMDAwMDFBRTEwMjEyN0JEMDAyMEFGODIwMDQ0QUY4NDAwNTA3MworOjEwNzE0MDAwQUY4MzAwNTRBRjg3MDA0Q0FGODgwMDVDMDNFMDAwMDhCOQorOjEwNzE1MDAwQUY4NjAwNjAzQzA5MDgwMDkxMjkzRkY5MjRBODAwMDI4RAorOjEwNzE2MDAwM0MwNTExMDAwMDA5M0MwMDAwRTgzMDI1MDBDNTE4MjU0OQorOjEwNzE3MDAwMjQ4MjAwMDhBQzgzMDAwMDAzRTAwMDA4QUM4MDAwMDQxNworOjEwNzE4MDAwM0MwOTgwMDAzNTIzMDkwMDkxMjgwMTBCOTA2QTAwMTEwOQorOjEwNzE5MDAwMjQwMjAwMjgwMDgwNDgyMTMxNDcwMEZGMDBBMDcwMjExMAorOjEwNzFBMDAwMDBDMDY4MjEzMTA4MDA0MDEwRTIwMDAyMzQwQzg2REQ4NgorOjEwNzFCMDAwMjQwQzA4MDAzQzBBODAwMDM1NDIwQTlBOTQ0NzAwMDBEQgorOjEwNzFDMDAwMzU0QjBBOUMzNTQ2MEFBMDMwRjlGRkZGQUQzOTAwMDA2NworOjEwNzFEMDAwOEQ3ODAwMDAzNTRCMEE4MDI0MDQwMDAxQUQzODAwMDQ4RQorOjEwNzFFMDAwOENDRjAwMDBBRDJGMDAwODkxNjUwMDE5MzBBMzAwMDM3QgorOjEwNzFGMDAwMTA2NDAwOUEyODY0MDAwMjE0ODAwMEI5MjQwNTAwMDI3QgorOjEwNzIwMDAwMTA2NTAwQTgyNDBGMDAwMzEwNkYwMEJFMzU0NTBBQTRDNgorOjEwNzIxMDAwMjQwQTA4MDAxMThBMDA0RDAwMDAwMDAwNTEwMDAwNDJCRAorOjEwNzIyMDAwM0MwQjgwMDAzQzA0ODAwMDM0ODMwOTAwOTA2NzAwMTIwRQorOjEwNzIzMDAwMzBFMjAwRkYwMDRENzgyMTAwMEZDODgwMjcyNDAwMDFCNAorOjEwNzI0MDAwM0MwQTgwMDAzNTRGMDkwMDkxRTUwMDE5MzU0QzA5ODA1MgorOjEwNzI1MDAwOEQ4NzAwMjgzMEEzMDBGRjAwMDMxNTAwMDA0NzU4MjU0NAorOjEwNzI2MDAwMDAwNEM0MDAzQzE5NjAwMDAxNzkzMDI1MzcwODA2RkY4RQorOjEwNzI3MDAwQUQyNjAwMDBBRDI4MDAwNDhERUEwMDJDMjUyODAwMjg0QQorOjEwNzI4MDAwQUQyQTAwMDg4REVDMDAzMEFEMkMwMDBDOERFNTAwMzRFQgorOjEwNzI5MDAwQUQyNTAwMTA4REU0MDAzOEFEMjQwMDE0OERFMzAwMUNGMgorOjEwNzJBMDAwQUQyMzAwMTg4REU3MDAyMEFEMjcwMDFDOERFMjAwMjRERgorOjEwNzJCMDAwQUQyMjAwMjA4REY5MDAyOEFEMzkwMDI0M0MwOTgwMDA2MgorOjEwNzJDMDAwMzUyNjA5M0M4Q0NGMDAwMDM1MkEwMTAwQUQwRTAwMDRBNAorOjEwNzJEMDAwQUQwRjAwMDA4RDRFMDAwQzM1MjMwOTAwMzUyNTA5ODBDNworOjEwNzJFMDAwQUQwRTAwMDg5MDZDMDAxMjhENDcwMDBDOENCOTAwMzQ3NAorOjEwNzJGMDAwM0MxODA4MDA5MzE4M0ZGODMxODIwMEZGMDA0RDU4MjFEOAorOjEwNzMwMDAwMDMyNzc4MjMwMDBCMzcwMDAwMTgyNDAwMDBDNDcwMjVFMQorOjEwNzMxMDAwMzFFOUZGRkMwMUM5NjgyNTI1MDIwMDE0QUQwRDAwMEMwMAorOjEwNzMyMDAwMDNFMDAwMDhBRDAwMDAxMDM1NzgwOTAwOTMwNjAwMTI1NAorOjEwNzMzMDAwM0MwNTA4MDA5NEE1M0ZFODMwQzgwMEZGMDEwRDUwMjEyRQorOjEwNzM0MDAwMDAwQTYwODAwQTAwMDYzQzAxODUyMDIxMTUwMDAwNjBDQgorOjEwNzM1MDAwMDAwMDAwMDAzQzA4MDgwMDk1MDgzRkVFM0MwNjA4MDBDRAorOjEwNzM2MDAwOTRDNjNGRTgwMTA2MTAyMTNDMEI4MDAwMzU3OTA5MDBFNgorOjEwNzM3MDAwOTMzODAwMTE5MzJBMDAxOTM1NjYwQTgwMzMwODAwRkZGQworOjEwNzM4MDAwOTRDRjAwMkEwMDA4NjA4MjMxNDUwMEZGOTc4QTAwNTg5OAorOjEwNzM5MDAwMDAwQzFFMDAwMDA1MjQwMDMwNDdGRkZGMDA2NDEwMjU4QworOjEwNzNBMDAwMDA0N0MwMjUwMUVBMzAyMTNDMEI0MDAwMDMwQjQwMjU3QgorOjEwNzNCMDAwMDAwNjY0MDBBRDI4MDAwMEFEMkMwMDA0OTMyNTAwMThFMQorOjEwNzNDMDAwM0MwMzAwMDYyNTI4MDAxNDAwMDUzRTAwMDBFMzEwMjVCQworOjEwNzNEMDAwQUQyMjAwMDg4RjI0MDAyQzI1NEYwMDAxMzFFQjdGRkZFOAorOjEwNzNFMDAwQUQyNDAwMEM4RjM4MDAxQ0E3OEIwMDU4QUQzODAwMTA1RQorOjEwNzNGMDAwM0MwOTgwMDAzNTI2MDkzQzhDQ0YwMDAwMzUyQTAxMDA2RAorOjEwNzQwMDAwQUQwRTAwMDRBRDBGMDAwMDhENEUwMDBDMzUyMzA5MDBCOQorOjEwNzQxMDAwMzUyNTA5ODBBRDBFMDAwODkwNkMwMDEyOEQ0NzAwMENEOAorOjEwNzQyMDAwOENCOTAwMzQzQzE4MDgwMDkzMTgzRkY4MzE4MjAwRkZGMworOjEwNzQzMDAwMDA0RDU4MjEwMzI3NzgyMzAwMEIzNzAwMDAxODI0MDA0MworOjEwNzQ0MDAwMDBDNDcwMjUzMUU5RkZGQzAxQzk2ODI1MjUwMjAwMTQzQworOjEwNzQ1MDAwQUQwRDAwMEMwM0UwMDAwOEFEMDAwMDEwM0MwMjA4MDA3OAorOjEwNzQ2MDAwOTQ0MjNGRjIzQzA1MDgwMDk0QTUzRkU4MzU0NDBBQTQ0NQorOjEwNzQ3MDAwM0MwNzA4MDA5NEU3M0ZFNDk0OEIwMDAwMDA0NUM4MjFENgorOjEwNzQ4MDAwMDMyN0MwMjMwMDBCMUMwMDI3MDZGRkYyMDA2NjUwMjVDRgorOjEwNzQ5MDAwQUQyQTAwMENBRDIwMDAxMEFEMkMwMDE0MEEwMDA2MzBGRgorOjEwNzRBMDAwMjUyOTAwMTgzNTRGMEFBNDk1RTUwMDAwOTU2NDAwMjhBOQorOjEwNzRCMDAwMDAwNTE0MDAwMDA0M0MwMDM0NTk4MTAwMDBFQzU4MjVGQworOjEwNzRDMDAwQUQzOTAwMENBRDJCMDAxMDBBMDAwNjMwMjUyOTAwMTQ0MAorOjEwNzREMDAwM0MwQzA4MDA5NThDM0ZFRTBBMDAwNjg2MjU4MjAwMDFEMAorOjEwNzRFMDAwNTQ2MEZGNEMyNDBBMDgwMDM1NTgwQUE0OTcwNjAwMDA4RgorOjEwNzRGMDAwMDAwNjFDMDAwMDZDNTAyNUFEMkEwMDBDMEEwMDA2MzA2NgorOjEwNzUwMDAwMjUyOTAwMTAzQzAzMDgwMDk0NjMzRkYyM0MwNzA4MDA2MworOjEwNzUxMDAwOTRFNzNGRTgzQzBGMDgwMDk1RUYzRkU0OTRBNDAwMDA5NworOjEwNzUyMDAwOTU3OTAwMjgwMDY3MTAyMTAwNEY1ODIzMDAwNDFDMDBBMworOjEwNzUzMDAwMDAxOTM0MDAyNTc4RkZFRTAwRDg3ODI1MzQ2QTgxMDBFMAorOjEwNzU0MDAwQUQyQTAwMENBRDJGMDAxMEFEMjAwMDE0QUQyQzAwMTg5QQorOjEwNzU1MDAwMEEwMDA2MzAyNTI5MDAxQzAzRTAwMDA4MjQwMjA3RDA5OQorOjEwNzU2MDAwMjdCREZGRTBBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTBGQworOjEwNzU3MDAwQUZCRjAwMUMwRTAwMDA3QzAwODA4ODIxOEY4ODAwNTQ2MworOjEwNzU4MDAwOEY4NzAwNEMzQzA1ODAwODM0QjIwMDgwMDExMTI4MjEwRgorOjEwNzU5MDAwM0MxMDgwMDAyNDAyMDA4MDI0MDMwMEMwMDBBNzIwMjNBOAorOjEwNzVBMDAwQUUwMjA4MTgzQzA2ODAwOEFFMDMwODFDMTg4MDAwMDREMAorOjEwNzVCMDAwQUY4NTAwNTRBQ0M1MDAwNDhDQzkwMDA0QUY4OTAwNENGMQorOjEwNzVDMDAwMTIyMDAwMDkzNjA0MDk4MDBFMDAwNzAyMDAwMDAwMDBBNgorOjEwNzVEMDAwOTI0QzAwMjc4RTBCMDA3NDAxODI1MDA0MDE0QjMwMjEyNQorOjEwNzVFMDAwQUU0NjAwMEMzNjA0MDk4MDhDOEUwMDFDOEY4RjAwNUMyOAorOjEwNzVGMDAwMDFDRjY4MjMxOUEwMDAwNDhGQkYwMDFDOEM5MDAwMUNEMQorOjEwNzYwMDAwQUY5MDAwNUM4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTRDOAorOjEwNzYxMDAwOEZCMDAwMTAwQTAwMDA3RTI3QkQwMDIwOEY4NjAwNTAyQQorOjEwNzYyMDAwOEY4MzAwNTQ4RjgyMDA0QzNDMDU4MDA4MzRBNDAwODA3NgorOjEwNzYzMDAwQUM4NjAwNTBBQzgzMDAzQzAzRTAwMDA4QUNBMjAwMDQyMAorOjEwNzY0MDAwM0MwMzA4MDA4QzYzMDA1NDI3QkRGRkY4MzA4NDAwRkYyMgorOjEwNzY1MDAwMjQ2MjAwMDEzMEE1MDBGRjNDMDEwODAwQUMyMjAwNTQ2OAorOjEwNzY2MDAwMzBDNjAwRkYzQzA3ODAwMDhDRTgwMTc4MDUwMEZGRkU3MworOjEwNzY3MDAwM0MwQzdGRkZBM0E0MDAwMzhGQUEwMDAwMzU4QkZGRkYwMworOjEwNzY4MDAwMDE0QjQ4MjQwMDA2MjdDMDAxMjQ0MDI1QUZBODAwMDA3NAorOjEwNzY5MDAwMzRFMjAxMDA5MDQzMDAwQUEzQTAwMDAyM0MxOTgwRkZERAorOjEwNzZBMDAwQTNBMzAwMDE4RkFGMDAwMDMwQUUwMDdGMzczOEZGRkY4QgorOjEwNzZCMDAwMDFGODYwMjQwMDBFNkUwMDNDMEEwMDIwMzRFNTAxNDAxMQorOjEwNzZDMDAwMDE4RDU4MjUzNTQ5MjAwMDI0MDZGRjgwM0MwNDEwMDAxOAorOjEwNzZEMDAwMjdCRDAwMDhBQ0FCMDAwQ0FDQTkwMDE0QTRBMDAwMTg5NgorOjEwNzZFMDAwQTBBNjAwMTIwM0UwMDAwOEFDRTQwMTc4MzA4ODAwRkY5NworOjEwNzZGMDAwMzBBNzAwRkYzQzAzODAwMDhDNjIwMTc4MDQ0MEZGRkU0RAorOjEwNzcwMDAwM0MwQzgwMDAzNThBMEEwMDhENEIwMDIwMzU4NDAxNDBGNgorOjEwNzcxMDAwMzU4NTA5ODBBQzhCMDAwNDhENDkwMDI0MDAwNzMwMkI4RgorOjEwNzcyMDAwMDAwNjE1NDBBQzg5MDAwOEEwODgwMDEwOTBBMzAwNEMwQQorOjEwNzczMDAwQTA4MzAwMkQwM0UwMDAwOEE0ODAwMDE4MjdCREZGRTgwNworOjEwNzc0MDAwMzA4NDAwRkZBRkJGMDAxMDBFMDAwNzY3MzBBNTAwRkZCOAorOjEwNzc1MDAwOEY4MzAwNTQ4RkJGMDAxMDNDMDY4MDAwMzRDNTAxNDA2OQorOjEwNzc2MDAwMzQ0NzAwNDAyNDA0RkY5MDNDMDIxMDAwMjdCRDAwMTg1RAorOjEwNzc3MDAwQUNBMzAwMENBMEE0MDAxMkFDQTcwMDE0MDNFMDAwMDgwNgorOjEwNzc4MDAwQUNDMjAxNzgyN0JERkZFMDNDMDg4MDA4QUZCRjAwMUNGOQorOjEwNzc5MDAwQUZCMjAwMThBRkIxMDAxNEFGQjAwMDEwMzUxMDAwODBDOAorOjEwNzdBMDAwOEUwNjAwMTgzQzA3ODAwMDMwOTIwMEZGMDBDNzIwMjU5RAorOjEwNzdCMDAwQUUwNDAwMTgwRTAwMDA3QzMwQjEwMEZGOTIwMzAwMDVGQgorOjEwNzdDMDAwMzQ2MjAwMDgwRTAwMDA3RUEyMDIwMDA1MDI0MDIwMjE2MworOjEwNzdEMDAwMEUwMDA3N0IwMjIwMjgyMTAyNDAyMDIxOEZCRjAwMUNDMQorOjEwNzdFMDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMjQwNTAwMDU2RgorOjEwNzdGMDAwMjQwNjAwMDEwQTAwMDczQzI3QkQwMDIwM0MwNTgwMDA0QworOjEwNzgwMDAwMzRBMzA5ODA5MDY2MDAwODMwQzIwMDA4MTA0MDAwMEZDMQorOjEwNzgxMDAwM0MwQTAxMDEzNTQ5MDgwQUFDODkwMDAwOENBODAwNzRCMworOjEwNzgyMDAwQUM4ODAwMDQzQzA3MDgwMDkwRTczRkY4MzBFNTAwMTAwMgorOjEwNzgzMDAwNTBBMDAwMDhBQzgwMDAwODNDMEQ4MDA4MzVBQzAwODBFQQorOjEwNzg0MDAwOEQ4QjAwNThBQzhCMDAwODI0ODQwMDBDMDNFMDAwMDhFQQorOjEwNzg1MDAwMDA4MDEwMjEwQTAwMDdCRjI0ODQwMDBDMjdCREZGRTgyOAorOjEwNzg2MDAwM0MwOTgwMDBBRkIwMDAxMEFGQkYwMDE0MzUyNjA5ODA3RQorOjEwNzg3MDAwOTBDODAwMDkyNDAyMDAwNjAwQTA1ODIxMzEwMzAwRkYyRgorOjEwNzg4MDAwMzUyNzA5MDAwMDgwODAyMTI0MDUwMDA0MTA2MjAwN0I1OAorOjEwNzg5MDAwMjQwODAwMDI5NENGMDA1QzNDMEUwMjA0MzFFREZGRkY4RgorOjEwNzhBMDAwMDFBRTYwMjVBRTBDMDAwMDkwQ0EwMDA4MzE0NDAwMjBGMworOjEwNzhCMDAwMTA4MDAwMDgwMDAwMDAwMDkwQzIwMDRFM0MxRjAxMDMzMQorOjEwNzhDMDAwMzdGOTAzMDAzMDU4MDBGRjAzMTkzMDI1MjQwNTAwMDg1QworOjEwNzhEMDAwQUUwNjAwMDQ5MEY5MDAxMTkwRTYwMDEyOTBFNDAwMTE0OQorOjEwNzhFMDAwMzMzODAwRkYwMDE4NzA4MjMwQ0YwMEZGMDFDRjUwMjFFNQorOjEwNzhGMDAwMDE0QjY4MjEzMDg5MDBGRjMxQUFGRkZGMzkyMzAwMjg5RQorOjEwNzkwMDAwMDAwQTYwODAxNDYwMDAyQzAyMEM0ODIzOTBFNDAwMTJFRQorOjEwNzkxMDAwM0MxOTgwMDAzNzJGMDEwMDMwOEMwMEZGMDE4QjE4MjFBQgorOjEwNzkyMDAwMDAwMzEwODAwMDQ1RjgyMTAwMUY4NDAwMzYwNzA2RkY4MQorOjEwNzkzMDAwQUQyNzAwMDQzNzNGMDkwMDkzRUMwMDExOTNFRTAwMTJDRAorOjEwNzk0MDAwMzcyNjA5ODAwMDA1QzA4MjhERTQwMDBDOENDNTAwMzQwOAorOjEwNzk1MDAwMzFDRDAwRkYwMUFCMTAyMTAwNTgxODIxMDBBNEY4MjNGRAorOjEwNzk2MDAwMDAwODg0MDAwMDAzM0YwMDAwRjAzMDI1MzNGOUZGRkZEQQorOjEwNzk3MDAwMzE4RjAwRkMwMEQ5NzAyNTAxNTgyMDIxMDFFOTY4MjFEMAorOjEwNzk4MDAwMDAwNDUwODBBREFFMDAwQzBFMDAwMDdDMDEyQTgwMjE2NgorOjEwNzk5MDAwM0MwODgwMDgyNDBCMDAwNDM1MDUwMDgwMEUwMDAwN0VBMgorOjEwNzlBMDAwQTBBQjAwMDkwMjAwMTAyMThGQkYwMDE0OEZCMDAwMTA5RgorOjEwNzlCMDAwMDNFMDAwMDgyN0JEMDAxODkwRUMwMDExOTBFMzAwMTlDNworOjEwNzlDMDAwM0MxODA4MDA5NzE4M0ZFRTMxODIwMEZGMDAwMkY4ODI1MQorOjEwNzlEMDAwMzA3MDAwRkYwMDFGQ0UwMDAwMTAzQzAwMDMyNzMwMjU1MAorOjEwNzlFMDAwMDBEODcwMjUzQzBGNDAwMDAxQ0Y2ODI1M0MxOTgwMDA2RAorOjEwNzlGMDAwQUQyRDAwMDAzNzNGMDkwMDkzRUMwMDExOTNFRTAwMTIwQgorOjEwN0EwMDAwMzcyRjAxMDAzNzI2MDk4MDAwMDVDMDgyOERFNDAwMEM2NQorOjEwN0ExMDAwOENDNTAwMzQzMUNEMDBGRjAxQUIxMDIxMDA1ODE4MjE3NgorOjEwN0EyMDAwMDBBNEY4MjMwMDA4ODQwMDAwMDMzRjAwMDBGMDMwMjU4NAorOjEwN0EzMDAwMzNGOUZGRkYzMThGMDBGQzAwRDk3MDI1MDE1ODIwMjE1OAorOjEwN0E0MDAwMDFFOTY4MjEwMDA0NTA4MEFEQUUwMDBDMEUwMDAwN0NGRQorOjEwN0E1MDAwMDEyQTgwMjEzQzA4ODAwODI0MEIwMDA0MzUwNTAwODBBMQorOjEwN0E2MDAwMEUwMDAwN0VBMEFCMDAwOTAyMDAxMDIxOEZCRjAwMTRBMQorOjEwN0E3MDAwOEZCMDAwMTAwM0UwMDAwODI3QkQwMDE4MEEwMDA3RDFFRQorOjEwN0E4MDAwMjQwODAwMTIyN0JERkZEMDNDMDM4MDAwQUZCNjAwMjhCOQorOjEwN0E5MDAwQUZCNTAwMjRBRkI0MDAyMEFGQjEwMDE0QUZCRjAwMkNDRAorOjEwN0FBMDAwQUZCMzAwMUNBRkIyMDAxOEFGQjAwMDEwMzQ2NzAxMDBENAorOjEwN0FCMDAwOTBFNjAwMEIzMDk0MDBGRjMwQjUwMEZGMzBDMjAwMzA3QworOjEwN0FDMDAwMDAwMEIwMjExMDQwMDA5OTAwMDA4ODIxMzQ2NDA5ODAzMgorOjEwN0FEMDAwOTA4ODAwMDgwMDA4MkUwMDAwMDUxRTAzMDQ2MDAwQzAwNgorOjEwN0FFMDAwMjQwNDAwMDQ4Rjg2MDA1NDNDMDEwODAwQTAyNDNGRjhDMQorOjEwN0FGMDAwM0MwQzgwMDBBRDgwMDA0ODNDMDQ4MDAwMzQ4RTAxMDBDNgorOjEwN0IwMDAwOTFDRDAwMEIzMUE1MDAyMDEwQTAwMDA3M0MwNzgwMDA5QworOjEwN0IxMDAwMzQ5MzA5ODA5MjcyMDAwODAwMTI4NjAwMDAxMDdFMDNFMAorOjEwN0IyMDAwMDVFMDAwQzQzQzFGODAwODM0RUMwMTAwOTE4QTAwMEI4MgorOjEwN0IzMDAwMzRFQjA5ODA5MTY5MDAwODMxNDQwMDQwMDAwNDQwMkI3NworOjEwN0I0MDAwMzEyMzAwMDgwMEM4OTgyMzE0NjAwMDAyMjQxMjAwMDNBNworOjEwN0I1MDAwMDAwMDkwMjEzQzEwODAwMDM2MTgwQTgwMzYwNDA5MDA4RAorOjEwN0I2MDAwOTcwRTAwMkM5MDgzMDAxMTkwODkwMDEyOTMwNTAwMTg0NQorOjEwN0I3MDAwMzA3RjAwRkYzMTI4MDBGRjAyNDgxMDIxMDAwMkM4ODAzQQorOjEwN0I4MDAwOTMwRDAwMTgwMzNGNzgyMTAxRjEzMDIxMzBCMTAwRkYzRgorOjEwN0I5MDAwMDBEMTE4MjFBNzhFMDA1ODNDMDEwODAwQTQyNjNGRUUxMgorOjEwN0JBMDAwM0MwMTA4MDBBNDIzM0ZGMDE1QTAwMDAyMDAwMDAwMDBFMworOjEwN0JCMDAwMDAwMDAwMEQ5MjBCMDEwQjMwNjVGRkZGM0MwMTA4MDAzNworOjEwN0JDMDAwQTQyMzNGRjIzMTZBMDA0MDNDMDEwODAwQTQyMDNGRThCMgorOjEwN0JEMDAwM0MwMTA4MDBBNDIwM0ZFNDExNDAwMDAyMjRBNDAwMEE1NAorOjEwN0JFMDAwMjRBNDAwMEIzMDkxRkZGRjBFMDAwMUU3MDIyMDIwMjFBQQorOjEwN0JGMDAwOTIwNjAxMEIzQzBDMDgwMDk1OEMzRkYyMDA0MDIwMjFCRQorOjEwN0MwMDAwMDAwNjY5ODIzMUE3MDAwMTBFMDAwNjAxMDE4NzI4MjFDNAorOjEwN0MxMDAwMDA0MDIwMjEwMjYwMjgyMTBFMDAwNjBDMDI0MDMwMjE4NQorOjEwN0MyMDAwMEUwMDA3QUIwMDQwMjAyMTE2QzAwMDY5MDA0MDIwMjE1MworOjEwN0MzMDAwOTIxMjAxMEIzMjU2MDA0MDEyQzAwMDA1M0MwNTAwRkZCNQorOjEwN0M0MDAwOEM5MzAwMDAzNEFFRkZGRjAyNkU4MDI0QUM5MDAwMDBFNQorOjEwN0M1MDAwMEUwMDAxRkIwMjIwMjAyMTNDMEYwODAwOTFFRjNGRjhBRAorOjEwN0M2MDAwMzFGMTAwMDMxMjIwMDAxNjNDMTM4MDA4OEY4MjAwNTQ2QgorOjEwN0M3MDAwM0MwOTgwMDgzNTI4MDA4MDI0NUYwMDAxQUQxRjAwM0NDRQorOjEwN0M4MDAwM0MwNTgwMDg4Q0I5MDAwNDAzRTAyMDIxMDMzRkMwMjM5OQorOjEwN0M5MDAwMUIwMDAwMDJBRjlGMDA1NDhDQTQwMDA0MEUwMDA3MDJEQQorOjEwN0NBMDAwQUNBNDAwMDQzQzA3ODAwMDhDRUIwMDc0M0MwNDgwMDgwQQorOjEwN0NCMDAwMzQ4MzAwODAwMDRCNTAyMUFDNkEwMDBDM0MxMzgwMDhEOAorOjEwN0NDMDAwMzY3MDAwODAwMjgwMjAyMTAyQTAyODIxQTIwMDAwNkJEMworOjEwN0NEMDAwMEUwMDA3NjczQzE0ODAwMDhGOTIwMDU0MzY4QzAxNDBFMAorOjEwN0NFMDAwQUQ5MjAwMEM4Rjg2MDA0ODNDMTUxMDAwMzQ0RDAwMDYwNAorOjEwN0NGMDAwMjRENjAwMDFBRjk2MDA0ODhGQkYwMDJDQTE4NjAwMTI0OQorOjEwN0QwMDAwOEZCNjAwMjhBRDhEMDAxNDhGQjMwMDFDQUU5NTAxNzg5RQorOjEwN0QxMDAwOEZCMjAwMTg4RkI1MDAyNDhGQjQwMDIwOEZCMTAwMTRFQgorOjEwN0QyMDAwOEZCMDAwMTAwM0UwMDAwODI3QkQwMDMwMzQ2NDA5ODBFNAorOjEwN0QzMDAwOTA4RjAwMDgwMDBGNzYwMDAwMEU2RTAzMDVBMDAwMzM0MAorOjEwN0Q0MDAwMzQ3RjA5MDA5M0Y4MDAxQjI0MTkwMDEwM0MwMTA4MDAzRgorOjEwN0Q1MDAwQTAzOTNGRjgzMzEzMDAwMjEyNjBGRjY3OEY4NjAwNTQ4QQorOjEwN0Q2MDAwOEY4MjAwNjAxNDQ2RkY2NTNDMDQ4MDAwMEUwMDAwN0M5QQorOjEwN0Q3MDAwMDAwMDAwMDAzQzA0ODAwODM0ODUwMDgwOTBBODAwMDlDMQorOjEwN0Q4MDAwMjQwNjAwMTYzMTAzMDBGRjEwNjYwMDBEMDAwMDAwMDBGRAorOjEwN0Q5MDAwOTBBQjAwMDkzQzA3MDgwMDkwRTczRkY4MjQwOTAwMDg3MQorOjEwN0RBMDAwMzE2NDAwRkYzNEVBMDAwMTNDMDEwODAwQTAyQTNGRjhEQQorOjEwN0RCMDAwMTA4OTAwMkYyNDBDMDAwQTEwOEMwMDI4MjQwMjAwMENDQgorOjEwN0RDMDAwMEUwMDAwN0UwMDAwMDAwMDBBMDAwODZBOEY4NjAwNTQ0MgorOjEwN0REMDAwMEUwMDA3QzMwMjQwMjgyMTBBMDAwOEI4MDA0MDIwMjFGNQorOjEwN0RFMDAwM0MwQjgwMDgzNTZBMDA4MDhENDYwMDU0OENFOTAwMENGRAorOjEwN0RGMDAwMTEyMEZGM0RBRjg2MDA1NDI0MDcwMDE0M0MwMTA4MDAwOQorOjEwN0UwMDAwQTAyNzNGRjgwQTAwMDg2OTNDMEM4MDAwOTA5MTAwMDgwOAorOjEwN0UxMDAwMjQxMjAwMDIzQzAxMDgwMEEwMzIzRkY4MzIzMDAwMjA1QQorOjEwN0UyMDAwMTIwMDAwMEIyNDE2MDAwMThGODYwMDU0MEEwMDA4NkExNQorOjEwN0UzMDAwMjQxMTAwMDgzN0Y4MDA4MDhGMDIwMDM4QUZFMjAwMDRGOAorOjEwN0U0MDAwOEZGOTAwMDRBRjE5MDAzQzBBMDAwODc2M0MwNzgwMDA1NworOjEwN0U1MDAwOEY4NjAwNTQwQTAwMDg2QTI0MTEwMDA0QTBBMjAwMDlCOQorOjEwN0U2MDAwMEUwMDAwN0UwMDAwMDAwMDBBMDAwODZBOEY4NjAwNTRBMQorOjEwN0U3MDAwMjQwMjAwMTQwQTAwMDk0NEEwQTIwMDA5MjdCREZGRTg1QgorOjEwN0U4MDAwQUZCMDAwMTAzQzEwODAwMEFGQkYwMDE0MzYwMjAxMDBGQworOjEwN0U5MDAwOTA0NDAwMDkwRTAwMDc2NzI0MDUwMDAxM0MwNDgwMDg5NworOjEwN0VBMDAwOTA5OTAwMEUzNDgzMDA4MDkwOUYwMDBGOTA2RjAwMjYwMQorOjEwN0VCMDAwOTA4OTAwMEEzM0Y4MDBGRjAwMTk2RTAwMDAxODc0MDA2MgorOjEwN0VDMDAwMzFFQzAwRkYwMUFFNTAyNTAwMEM1QTAwMDE0QjM4MjU2MworOjEwN0VEMDAwMzEyODAwRkYzNjAzMDE0MDM0NDU2MDAwMDBFODMwMjVCQQorOjEwN0VFMDAwMjQwMkZGODEzQzA0MTAwMEFDNjYwMDBDOEZCRjAwMTQxQworOjEwN0VGMDAwQUM2NTAwMTRBMDYyMDAxMkFFMDQwMTc4OEZCMDAwMTBDRgorOjEwN0YwMDAwMDNFMDAwMDgyN0JEMDAxODI3QkRGRkU4MzA4NDAwRkYwQworOjEwN0YxMDAwQUZCRjAwMTAwRTAwMDc2NzMwQTUwMEZGM0MwNTgwMDBEMgorOjEwN0YyMDAwMzRBNDAxNDAzNDQ3MDA0MDI0MDZGRjkyQUM4NzAwMTQ3QgorOjEwN0YzMDAwQTA4NjAwMTI4RjgzMDA1NDhGQkYwMDEwM0MwMjEwMDBGNworOjEwN0Y0MDAwMjdCRDAwMThBQzgzMDAwQzAzRTAwMDA4QUNBMjAxNzg0OAorOjEwN0Y1MDAwMjdCREZGRDhBRkIwMDAxMDMwODQwMEZGMzBCMDAwRkY2NQorOjEwN0Y2MDAwM0MwNTgwMDBBRkIxMDAxNEFGQkYwMDIwQUZCMzAwMUNEMAorOjEwN0Y3MDAwQUZCMjAwMTgwMDA0MTBDMjM0QTYwMTAwMzIwMzAwMDJBMAorOjEwN0Y4MDAwMzA1MTAwMDExNDYwMDAwNzkwRDIwMDA5M0MwOTgwMDhCQworOjEwN0Y5MDAwMzUzMzAwODA5MjY4MDAwNTMxMDcwMDA4MTBFMDAwMENCRQorOjEwN0ZBMDAwMzA4QTAwMTAwMjQwMjAyMTBFMDAwNzhEMDIyMDI4MjE3NworOjEwN0ZCMDAwMjQwMjAwMDE4RkJGMDAyMDhGQjMwMDFDOEZCMjAwMTg3NQorOjEwN0ZDMDAwOEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjgxNworOjEwN0ZEMDAwMTU0MDAwMzQzNEE1MEEwMDhDQjgwMDI0OENBRjAwMDg4QQorOjEwN0ZFMDAwMTMwRjAwNEIwMDAwMzgyMTNDMEQ4MDA4MzVCMzAwODA5MgorOjEwN0ZGMDAwOTI2QzAwNjgyNDA2MDAwMjMxOEIwMEZGMTE2NjAwODQzOQorOjEwODAwMDAwM0MwNjgwMDAzNEMyMDEwMDkyNjMwMDRDOTA1OTAwMDk4NAorOjEwODAxMDAwMzA3RjAwRkY1M0Y5MDAwNDMyMTMwMDdDMTBFMDAwNjk0OAorOjEwODAyMDAwMDAwMDAwMDAzMjEzMDA3QzU2NjAwMDVDMDI0MDIwMjFGQQorOjEwODAzMDAwMTYyMDAwMDkzMjBEMDAwMTNDMEM4MDAwMzU4NDAxMDAzRgorOjEwODA0MDAwMzU4QjBBMDA4RDY1MDAyNDhDODYwMDA0MTRBNkZGRDlBOAorOjEwODA1MDAwMDAwMDEwMjEzMjBEMDAwMTExQTAwMDBFMDI0MDIwMjE2RAorOjEwODA2MDAwM0MxODgwMDAzNzEwMDEwMDhFMEYwMDBDOEY4RTAwNTBERQorOjEwODA3MDAwMTFFRTAwMDgwMDAwMDAwMDBFMDAwODREMDIyMDI4MjEyQgorOjEwODA4MDAwOEUxOTAwMEMzQzFGODAwODM3RjAwMDgwQUUxOTAwNTA5QworOjEwODA5MDAwMDI0MDIwMjEwRTAwMDc3QjAyMjAyODIxMEEwMDA5OTlCNgorOjEwODBBMDAwMjQwMjAwMDEzQzA1MDgwMDhDQTUwMDY0MjRBNDAwMDEwMgorOjEwODBCMDAwM0MwMTA4MDBBQzI0MDA2NDE2MDAwMDBEMDAwMDAwMDAyNAorOjEwODBDMDAwMDIyMDI4MjEwRTAwMDc3QjAyNDAyMDIxOTI2RTAwNjhDQQorOjEwODBEMDAwMjQwQzAwMDIzMUNEMDBGRjExQUMwMDIyMDI0MDIwMjEwRgorOjEwODBFMDAwMEUwMDA5NEIwMDAwMDAwMDBBMDAwOTk5MjQwMjAwMDE1QgorOjEwODBGMDAwMEUwMDAwNzAyNDA0MDAwMTkyNkIwMDI1MDIwQjMwMjU1NQorOjEwODEwMDAwMEUwMDAwN0VBMjY2MDAyNTBBMDAwOUREMDIyMDI4MjE1QgorOjEwODExMDAwOEU2MjAwMTg4Q0RGMDAwNDhDQjkwMDI0MDAwMjFFMDI1RAorOjEwODEyMDAwMTdGOUZGQjEzMDY1MDA3RjkyNjgwMDRDMjY0NDAwMDFDQQorOjEwODEzMDAwMzA5MzAwN0YxMjY1MDA0MDMxMDMwMEZGMTQ2NEZGQUJGMQorOjEwODE0MDAwM0MwRDgwMDgyNjQ3MDAwMTMwRjEwMDdGMzBFMjAwRkYzRgorOjEwODE1MDAwMTIyNTAwMEIyNDA3MDAwMTAwNDA5MDIxMEEwMDA5QTYwNworOjEwODE2MDAwMjQxMTAwMDEyNDA1MDAwNDBFMDAwNzNDMjQwNjAwMDEzMAorOjEwODE3MDAwMEUwMDA5NEIwMDAwMDAwMDBBMDAwOTk5MjQwMjAwMDFDQQorOjEwODE4MDAwMjQwNUZGODAwMjQ1MjAyNDAwODU5MDI2MzI0MjAwRkYwRQorOjEwODE5MDAwMDA0MDkwMjEwQTAwMDlBNjI0MTEwMDAxMEUwMDA4NEQ5QworOjEwODFBMDAwMDIyMDI4MjEzMjA3MDAzMDEwRTBGRkExMzIxMDAwODJBNworOjEwODFCMDAwMDI0MDIwMjEwRTAwMDc4RDAyMjAyODIxMEEwMDA5OTk4MworOjEwODFDMDAwMjQwMjAwMDE4RTY5MDAxODAyNDAyMDIxMDIyMDI4MjE4QgorOjEwODFEMDAwMDEyNjQwMjUwRTAwMDk2RUFFNjgwMDE4OTI2NDAwNEMxRQorOjEwODFFMDAwMjQwNTAwMDMyNDA2MDAwMTBFMDAwNzNDMzA4NDAwRkYzNAorOjEwODFGMDAwMEUwMDAwNzAyNDA0MDAwMTkyNzEwMDI1MDIxMTUwMjUyOAorOjEwODIwMDAwMEUwMDAwN0VBMjZBMDAyNTBBMDAwOTk5MjQwMjAwMDFERQorOjEwODIxMDAwOEU2RjAwMTgzQzE4ODAwMDAyNDAyMDIxMDFGODcwMjU2NAorOjEwODIyMDAwMDIyMDI4MjEwRTAwMDc3QkFFNkUwMDE4OTI2NDAwNENERAorOjEwODIzMDAwMEEwMDBBMjUyNDA1MDAwNDMyNEEwMDgwMzk0OTAwODBEQQorOjEwODI0MDAwMTQ2OUZGNkEzQzBEODAwODBBMDAwOUZFMjY0NzAwMDFGOAorOjEwODI1MDAwMjdCREZGQzBBRkIwMDAxODNDMTA4MDAwQUZCRjAwMzg5MgorOjEwODI2MDAwQUZCNzAwMzRBRkI2MDAzMEFGQjUwMDJDQUZCNDAwMjhDNAorOjEwODI3MDAwQUZCMzAwMjRBRkIyMDAyMDBFMDAwNUJFQUZCMTAwMUNBQQorOjEwODI4MDAwMzYwMjAxMDA5MDQ1MDAwQjBFMDAwOTgwOTA0NDAwMDg2MgorOjEwODI5MDAwMTQ0MDAwRTc4RkJGMDAzODNDMDg4MDA4MzUwNzAwODA5NQorOjEwODJBMDAwQTBFMDAwNkIzNjA2MDk4MDkwQzUwMDAwMjQwMzAwNTA1MgorOjEwODJCMDAwM0MxNzA4MDAyNkY3M0ZCMDMwQTQwMEZGM0MxMzA4MDAyRAorOjEwODJDMDAwMjY3MzNGQzAxMDgzMDAwMzNDMTA4MDAwMDAwMEI4MjFEQgorOjEwODJEMDAwMDAwMDk4MjEyNDFGMDAxMDM2MTEwMTAwMzYxMjBBMDBGOAorOjEwODJFMDAwMzYxNTA5ODA4RTU4MDAyNDhFMzQwMDA0OEVBRjAwMjA4RAorOjEwODJGMDAwOEY4QzAwNTQzQzAxMDgwMEEwM0YzRkY4MzYxOTBBODBEQgorOjEwODMwMDAwOTcyQjAwMkM4RUY2MDAwMDkzMkEwMDE4MDI5ODcwMjNGOQorOjEwODMxMDAwMDFFQzY4MjMzQzAxMDgwMEFDMkUzRkQ0M0MwMTA4MDA2RQorOjEwODMyMDAwQUMyRDNGRDgzQzAxMDgwMEFDMkMzRkZDQTc4QjAwNTg3QgorOjEwODMzMDAwMDJDMEY4MDkzMTU0MDBGRjMwNDkwMDAyMTUyMDAwRTk1RAorOjEwODM0MDAwMzA0MjAwMDE1MDQwMDBDNDkyMjcwMDA5OTJBOTAwMDg2MQorOjEwODM1MDAwMzEyODAwMDgxNTAwMDAwMjI0MTUwMDAzMDAwMEE4MjFBMAorOjEwODM2MDAwM0MwQTgwMDAzNTQzMDkwMDM1NDQwQTAwOEM4RDAwMjQwNgorOjEwODM3MDAwOTA3MjAwMTE5MDcwMDAxMjkwN0YwMDExMzI1OTAwRkYyRQorOjEwODM4MDAwMzIxMTAwRkYwMkIxMTAyMTAwMDJDMDgwMzNFRjAwRkY2NAorOjEwODM5MDAwMDMxOUIwMjEwMjhGNzAyMTAyRDQ2MDIxMjVDQjAwMTA3NworOjEwODNBMDAwM0MwMTA4MDBBNDM2M0ZFRTNDMDEwODAwQUMyRDQwMDAyMworOjEwODNCMDAwM0MwMTA4MDBBNDJDM0ZGMDNDMDEwODAwQTQyQjNGRUMzQQorOjEwODNDMDAwMzU1NjAxMDAzNTU0MDk4MDM1NTEwRTAwOEY4NzAwNTQxMQorOjEwODNEMDAwOEY4OTAwNUM4RTg1MDAyMDI0MDgwMDA2MDEyNzMwMjM0OQorOjEwODNFMDAwM0MwMTA4MDBBQzI4M0ZGNDAwQTcyODIzMDRDMDAwQjVENgorOjEwODNGMDAwMDAwMDkwMjEwNEEwMDBCMzAwQzU1MDJCMTE0MDAwQjUyRgorOjEwODQwMDAwMDAwMDAwMDAzQzAxMDgwMEFDMjYzRkQ4OEU2MjAwMDA0RQorOjEwODQxMDAwMDA0MEY4MDkwMDAwMDAwMDMwNDYwMDAyMTRDMDAwNzQ1QgorOjEwODQyMDAwMDA0MDgwMjEzMDRCMDAwMTU1NjAwMDExOEU2MjAwMDQzNQorOjEwODQzMDAwM0MwRDA4MDA4REFEM0ZEQzNDMEVDMDAwM0MwNDgwMDBDQworOjEwODQ0MDAwMDFBRTYwMjVBRTJDMDAwMDhDOTgwMDAwMzMwRjAwMDhCMAorOjEwODQ1MDAwMTFFMEZGRkQwMDAwMDAwMDk2M0YwMDA4MjQxMjAwMDExQgorOjEwODQ2MDAwQTc5RjAwNDA4RTM5MDAwNEFGOTkwMDM4OEU2MjAwMDQ0NworOjEwODQ3MDAwMDA0MEY4MDkwMDAwMDAwMDAyMDI4MDI1MzIwMzAwMDJEQgorOjEwODQ4MDAwMTQ2MDAwQjMwMDAwMDAwMDNDMDkwODAwOTUyOTNGRTQ5NworOjEwODQ5MDAwM0MwNjA4MDA5NEM2M0ZGMDNDMEEwODAwOTU0QTNGRTZCNworOjEwODRBMDAwM0MwNzA4MDA4Q0U3M0ZEQzAxMjY3MDIxM0MwMzA4MDBGNAorOjEwODRCMDAwOEM2MzQwMDAzQzA4MDgwMDk1MDgzRkZBMDFDQTIwMjE1RgorOjEwODRDMDAwOEVEOTAwMEMwMEU5MjgyMTI0OUYwMDAyMDBBODc4MjEwMQorOjEwODREMDAwMDA2N0MwMjEzM0U0RkZGRkFGOTkwMDUwM0MwMTA4MDA2MgorOjEwODRFMDAwQUMzODQwMDAzQzAxMDgwMEE0MkYzRkU4M0MwMTA4MDBFNAorOjEwODRGMDAwQTQyRTNGRjIwRTAwMDFFNzAwMDAwMDAwOEY4RDAwNDgxRgorOjEwODUwMDAwMDA0MDIwMjEzQzAxMDgwMEEwMkQzRkY5OEU2MjAwMDhBOAorOjEwODUxMDAwMjVBQzAwMDFBRjhDMDA0ODAwNDBGODA5MDAwMDAwMDBDNQorOjEwODUyMDAwOEY4NTAwNTQwMkEwMzAyMTBFMDAwNjBDMDA0MDIwMjE0RgorOjEwODUzMDAwMEUwMDA3QUIwMDQwMjAyMThFNkIwMDBDMDE2MEY4MDk5MworOjEwODU0MDAwMDA0MDIwMjEzQzBBMDgwMDk1NEEzRkYyM0MwNjA4MDAwMgorOjEwODU1MDAwOTRDNjNGRTYwMTQ2NDgyMTI1MjgwMDAyMEUwMDAxRkI5MworOjEwODU2MDAwMzEwNEZGRkYzQzA1MDgwMDhDQTUzRkQ0M0MwNzA4MDAwMAorOjEwODU3MDAwOENFNzNGREMwMEE3MjAyMzNDMDEwODAwQUMyNDNGRDQ1QgorOjEwODU4MDAwMTQ4MDAwMDYwMDAwMDAwMDNDMDIwODAwOEM0MjNGRjQwQQorOjEwODU5MDAwMzQ0QjAwNDAzQzAxMDgwMEFDMkIzRkY0MTI0MDAwNDMzOAorOjEwODVBMDAwOEY4RTAwNDQ4RTJEMDAxMDhGOTIwMDQ0QUU0RDAwMjAxRgorOjEwODVCMDAwOEUyQzAwMThBRTRDMDAyNDNDMDQwODAwOTQ4NDNGRTg0NAorOjEwODVDMDAwMEUwMDA3MDQwMDAwMDAwMDhGOUYwMDU0OEU2NzAwMTAwQgorOjEwODVEMDAwM0MwMTA4MDBBQzNGM0ZGQzAwRTBGODA5MDAwMDAwMDA0RgorOjEwODVFMDAwM0MxOTA4MDA4RjM5M0ZENDE3MjBGRjc5OEY4NzAwNTQzQQorOjEwODVGMDAwOTc5MzAwNTgzQzExODAwRTMyMTYwMTAwMEUwMDA3MzM4RAorOjEwODYwMDAwQTYzMzAwMkMxNkMwMDA0NTMyMDMwMDEwNTQ2MDAwNEMwNQorOjEwODYxMDAwOEVFNTAwMDQzMjA4MDA0MDU1MDAwMDFEOEVGMDAwMDg3MQorOjEwODYyMDAwOEVFNDAwMEMwMDgwRjgwOTAwMDAwMDAwOEZCRjAwMzhDNQorOjEwODYzMDAwOEZCNzAwMzQ4RkI2MDAzMDhGQjUwMDJDOEZCNDAwMjg3MAorOjEwODY0MDAwOEZCMzAwMjQ4RkIyMDAyMDhGQjEwMDFDOEZCMDAwMThCMAorOjEwODY1MDAwMDNFMDAwMDgyN0JEMDA0MDhGODYwMDNDMzYxMTBFMDA2NQorOjEwODY2MDAwMDAwNzJFMDAwMEE2MjAyNUFFMDQwMDgwOEU0MzAwMjBDNworOjEwODY3MDAwOEU1MDAwMjRBRkEzMDAxMEFFMjMwMDE0OEZCMjAwMTA2MAorOjEwODY4MDAwQUUzMjAwMTBBRTMwMDAxQzBBMDAwQTdGQUUzMDAwMTg3NworOjEwODY5MDAwMDIwMEY4MDkwMDAwMDAwMDhFRTQwMDBDMDA4MEY4MDlEOAorOjEwODZBMDAwMDAwMDAwMDAwQTAwMEIzODhGQkYwMDM4MjQxODAwMDFCQQorOjEwODZCMDAwMjQwRjAwMDFBNUMwMDAyMEE1RDgwMDIyMEEwMDBCMUEzMworOjEwODZDMDAwQURDRjAwMjQzQzAxMDgwMEFDMjAzRkQ4MEEwMDBBQjAxRQorOjEwODZEMDAwOEU2MjAwMDAzQzAxMDgwMEFDMjUzRkQ4MEEwMDBBQjBCOQorOjEwODZFMDAwOEU2MjAwMDA5MjI0MDAwOTBFMDAwNzdCMDAwMDI4MjEwMgorOjEwODZGMDAwOEZCRjAwMzg4RkI3MDAzNDhGQjYwMDMwOEZCNTAwMkM5NQorOjEwODcwMDAwOEZCNDAwMjg4RkIzMDAyNDhGQjIwMDIwOEZCMTAwMUNEQgorOjEwODcxMDAwOEZCMDAwMTgwM0UwMDAwODI3QkQwMDQwM0MxNDgwMDAyMworOjEwODcyMDAwOTI5NTAxMDkwMDAwMjgyMTBFMDAwODREMzJBNDAwRkY5NworOjEwODczMDAwMzIwMzAwMTA1MDYwRkZCODMyMDgwMDQwOEVFNTAwMDQ5QworOjEwODc0MDAwMDBBMEY4MDkwMDAwMDAwMDBBMDAwQjMyMzIwODAwNDBDNworOjEwODc1MDAwNTI0MEZGQTg5NzkzMDA1ODhFMzQwMDE0OEY5MzAwNDQyMgorOjEwODc2MDAwQUU3NDAwMjA4RTM1MDAxQ0FFNzUwMDI0MEEwMDBCMjk2MworOjEwODc3MDAwOTc5MzAwNTg4RjgyMDAxNDAwMDQyMTgwMDNFMDAwMDhDMgorOjEwODc4MDAwMDA4MjEwMjEzQzA3ODAwODM0RTIwMDgwOTA0MzAwNjk5OQorOjEwODc5MDAwMDA4MDQwMjExMDYwMDAwOTNDMDQwMTAwM0MwNzA4MDBGMworOjEwODdBMDAwOENFNzNGRkM4RjgzMDAzMDAwRTMyMDIzMDQ4MDAwMDgyNworOjEwODdCMDAwOTM4OTAwMUMxNEUzMDAwMzAxMDAyMDIxMDNFMDAwMDg1QQorOjEwODdDMDAwMDA4MDEwMjEzQzA0MDEwMDAzRTAwMDA4MDA4MDEwMjExQgorOjEwODdEMDAwMTEyMDAwMEIwMDY3MzgyMzNDMEQ4MDAwMzVBQzA5ODA2OAorOjEwODdFMDAwOTE4QjAwN0MzMTZBMDAwMjExNDAwMDIwMjQwOTAwMzQ4MgorOjEwODdGMDAwMDBFOTcwMkIxNUMwRkZGMTAxMDAyMDIxMDBFOTM4MjNBQQorOjEwODgwMDAwMjQwM0ZGRkMwMEEzQzgyNDAwRTNDMDI0MDBGOTc4MkI1NAorOjEwODgxMDAwMTVFMEZGRUEwMzA4MjAyMTMwQzQwMDAzMDAwNDEwMjMwMAorOjEwODgyMDAwMTRDMDAwMTQzMDQ5MDAwMzAwMDAzMDIxMDBBOTc4MjE1MQorOjEwODgzMDAwMDFFNjcwMjEwMEVFNjgyQjExQTBGRkUwM0MwNDAxMDA2RQorOjEwODg0MDAwMkQzODAwMDEwMDA2QzgyQjAxMDU0ODIxMDMxOTM4MjRFMgorOjEwODg1MDAwMTRFMEZGREEyNTI0RkZGQzI0MDJGRkZDMDBBMjE4MjQwOAorOjEwODg2MDAwMDA2ODIwMjEwM0UwMDAwODAwODAxMDIxMEEwMDBCQTgwNgorOjEwODg3MDAwMjQwOTAwMzAzQzBDODAwMDM1ODYwOTgwOTBDQjAwN0NCOAorOjEwODg4MDAwMzE2QTAwMDQxNTQwRkZFOTI0MDYwMDA0MEEwMDBCQjcxMgorOjEwODg5MDAwMDAwMDMwMjEzQzAzMDgwMDhDNjMwMDVDOEY4MjAwMThDQworOjEwODhBMDAwMjdCREZGRTBBRkJGMDAxOEFGQjEwMDE0MTA2MjAwMDU5NAorOjEwODhCMDAwQUZCMDAwMTAwMDAzMjlDMDI0QTQwMjgwQUY4NDAwMTRDQworOjEwODhDMDAwQUY4MzAwMTgzQzEwODAwMDM2MDIwQTAwOTQ0NTAwMzI0NQorOjEwODhEMDAwMzYxMTAxMDAwRTAwMEI4OTMwQTQzRkZGOEUyNDAwMDBFQQorOjEwODhFMDAwMjQxRkZGODAzQzExMDA4MDAwODJDMDIxMDMxRjYwMjRGMAorOjEwODhGMDAwMzMwOTAwN0YwMDBDQzk0MDAzMjk0MDI1MzMwRTAwNzg1RQorOjEwODkwMDAwMzYyRjAwMDMzQzBEMTAwMDAxMEQ1MDI1MDFDRjU4MjVENgorOjEwODkxMDAwQUUwQzAwMjgzNjA4MDk4MEFFMEMwODBDQUUwQjA4MkNGMworOjEwODkyMDAwQUUwQTA4MzA5MTAzMDA2OTNDMDY4MDBDMDEyNjM4MjEwQworOjEwODkzMDAwMTA2MDAwMDZBRjg3MDAzNDhEMDkwMDNDOEQwMzAwNkM4OQorOjEwODk0MDAwMDEyMzM4MjMxOEUwMDA4MjAwMDAwMDAwM0MwQjgwMDg1RgorOjEwODk1MDAwMzU2QTAwODAzQzEwODAwMEExNDAwMDY5MzYwNjA5ODAxRAorOjEwODk2MDAwOENDMjAwMzgzQzA2ODAwMDM0QzUwQTAwOTBBODAwM0M0OAorOjEwODk3MDAwMzEwQzAwMjAxMTgwMDAxQUFGODIwMDMwMjQwRDAwMDE1QworOjEwODk4MDAwM0MwRTgwMDAzNUQxMEEwMEEzOEQwMDFDQUY4MDAwMjQ2RQorOjEwODk5MDAwOEUyNDAwMjQ4Rjg1MDAyNDI0MEQwMDA4QUY4MDAwMjA0MQorOjEwODlBMDAwQUY4MDAwMjgzQzAxMDgwMEE0MkQzRkU2M0MwMTA4MDBGMAorOjEwODlCMDAwQTQyMDNGRkEwRTAwMEI4RDAwMDAzMDIxOTIyODAwM0NDRAorOjEwODlDMDAwOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwMDAwODYxNDJGMworOjEwODlEMDAwQUY4MjAwMkMyN0JEMDAyMDAzRTAwMDA4MzE4MjAwMDE5NworOjEwODlFMDAwOTBCODAwMzIyNDBFMDAwMTMzMEYwMEZGMDAwRjIxODJFNworOjEwODlGMDAwMTA4RTAwNDEyNDE5MDAwMjEwOTkwMDY0MzRDNDBBQzA4QQorOjEwOEEwMDAwM0MwMzgwMDAzNDY0MEEwMDhDOEYwMDI0MTVFMDAwMUVCMworOjEwOEExMDAwMzQ2NjA5MDA5MDlGMDAzMDI0MTgwMDA1MzNGOTAwM0ZBOAorOjEwOEEyMDAwMTMzODAwNEUyNDAzMDAwMThGODYwMDIwQTM4MzAwMUMwRQorOjEwOEEzMDAwQUY4NjAwMjhBRjg2MDAyNDNDMEU4MDAwMzVEMTBBMDBBNgorOjEwOEE0MDAwOEUyNDAwMjQ4Rjg1MDAyNDI0MEQwMDA4M0MwMTA4MDA5QQorOjEwOEE1MDAwQTQyRDNGRTYzQzAxMDgwMEE0MjAzRkZBMEUwMDBCOEQzOAorOjEwOEE2MDAwMDAwMDAwMDA5MjI4MDAzQzhGQkYwMDE4OEZCMTAwMTQ1NgorOjEwOEE3MDAwOEZCMDAwMTAwMDA4NjE0MkFGODIwMDJDMjdCRDAwMjA5QgorOjEwOEE4MDAwMDNFMDAwMDgzMTgyMDAwMThDOEEwMDA4OEM4QjAwMjRFRQorOjEwOEE5MDAwOENEMDAwNjQzQzBFODAwMDM1RDEwQTAwMDE0QjI4MjNBNQorOjEwOEFBMDAwQUY5MDAwMjRBMzgwMDAxQ0FGODUwMDI4OEUyNDAwMjRGMgorOjEwOEFCMDAwOEY4NjAwMjA4Rjg1MDAyNDI0MEQwMDA4M0MwMTA4MDBDQgorOjEwOEFDMDAwQTQyRDNGRTYzQzAxMDgwMEE0MjAzRkZBMEUwMDBCOERDOAorOjEwOEFEMDAwMDAwMDAwMDA5MjI4MDAzQzhGQkYwMDE4OEZCMTAwMTRFNgorOjEwOEFFMDAwOEZCMDAwMTAwMDA4NjE0MkFGODIwMDJDMjdCRDAwMjAyQgorOjEwOEFGMDAwMDNFMDAwMDgzMTgyMDAwMTkwQTIwMDMwMzA1MTAwM0ZCNQorOjEwOEIwMDAwNTIyNDAwMjgzNEM1MEFDMDhDQjAwMDI0MTYwMDAwMjI2QworOjEwOEIxMDAwMzRDQjA5MDA4Q0E2MDA0ODNDMEE3RkZGMzU0NUZGRkY5NworOjEwOEIyMDAwMDBDNTEwMjQzQzBFODAwMEFGODIwMDIwMzVDNTA5MDAyRQorOjEwOEIzMDAwOEY4ODAwMjA4Q0FEMDA2MDAxMEQ2MDJCMTU4MDAwMDIzNQorOjEwOEI0MDAwMDEwMDIwMjE4Q0E0MDA2MDBBMDAwQzJDQUY4NDAwMjBCRQorOjEwOEI1MDAwOEQwMjAwNkMwQTAwMEMwNjNDMDY4MDAwOEM4MjAwNDhFNgorOjEwOEI2MDAwOEY4NjAwMjAzQzA5N0ZGRjM1MjdGRkZGMDA0Nzg4MjRDMAorOjEwOEI3MDAwM0MwNDgwMDgyNDAzMDAwMUFGOTEwMDI4QUM4MDAwNkMwNQorOjEwOEI4MDAwQTM4MzAwMUMwQTAwMEMzQUFGODYwMDI0OEM5RjAwMTRCQgorOjEwOEI5MDAwMEEwMDBDMkNBRjlGMDAyMDhENjIwMDY4MEEwMDBDNzY0MgorOjEwOEJBMDAwM0MwRTgwMDAzNEM0MDk4MDhDODkwMDcwOENBMzAwMTRCMgorOjEwOEJCMDAwMDEyMzM4MkIxMEUwMDAwNDAwMDAwMDAwOEM4MjAwNzBCQworOjEwOEJDMDAwMEEwMDBDNzYzQzBFODAwMDhDQTIwMDE0MEEwMDBDNzY4MQorOjEwOEJEMDAwM0MwRTgwMDA4Rjg1MDAyNDI3QkRGRkUwQUZCRjAwMTg0QQorOjEwOEJFMDAwQUZCMTAwMTQxNEEwMDAwOEFGQjAwMDEwM0MwNDgwMDAyNgorOjEwOEJGMDAwMzQ4NzBBMDA5MEU2MDAzMDI0MDIwMDA1MzBDMzAwM0ZBRAorOjEwOEMwMDAwMTA2MjAwQjkzNDg0MDkwMDhGOTEwMDIwMDBBMDgwMjFGNworOjEwOEMxMDAwM0MwNDgwMDAzNDhFMEEwMDhEQ0QwMDA0M0MwNjA4MDAyMAorOjEwOEMyMDAwOENDNjNGRDgzMUE3M0ZGRjAwRTY2MDJCNTU4MDAwMDE3RQorOjEwOEMzMDAwMDBFMDMwMjE5MzhGMDAxQzExRTAwMDc4MDBEMDI4MkIzOQorOjEwOEM0MDAwMzQ5RjA5ODA5M0Y5MDA3QzMzMzgwMDAyMTMwMDAwNzlDNworOjEwOEM1MDAwMjQwMzAwMzQwMEMzMTAyQjE0NDAwMEQ5MDAwMDAwMDA4RQorOjEwOEM2MDAwMDBDMzMwMjMwMEQwMjgyQjNDMDEwODAwQTQyMzNGRTQ5QworOjEwOEM3MDAwMTRBMDAwNkUwMjAwMTgyMTNDMDQwODAwOEM4NDNGRDQyQworOjEwOEM4MDAwMDA2NDQwMkI1NTAwMDAwMTAwNjAyMDIxM0MwNTgwMDA1RAorOjEwOEM5MDAwMzRBOTBBMDA5MTJBMDAzQzNDMDEwODAwQUMyNDNGRENDNgorOjEwOENBMDAwMzE0MzAwMjAxNDYwMDAwMzAwMDA0ODIxMzRBQjBFMDA2MworOjEwOENCMDAwOEQ2OTAwMTg4Rjg4MDAyQzAxMjgyMDJCMTA4MDAwNUYwMAorOjEwOENDMDAwMDAwMDAwMDAzQzA1MDgwMDhDQTUzRkRDMDBBOTY4MjFERAorOjEwOENEMDAwMDEwRDYwMkIxMTgwMDA1QzAwQjA3MDJCMDEwOTM4MjM1RQorOjEwOENFMDAwMDBFMDI4MjEzQzAxMDgwMEFDMjczRkRDMTIwMDAwMDMxMworOjEwOENGMDAwMjQwQUZGRkMxMEIwMDA4RDMyMjQwMDAzMDBBQTE4MjRCRgorOjEwOEQwMDAwM0MwMTA4MDBBNDIwM0ZGQTNDMDEwODAwQUMyMzNGRENGMgorOjEwOEQxMDAwMDA2MDI4MjE4Rjg0MDAyNDEyMDQwMDA2M0MwQjgwMDg4OAorOjEwOEQyMDAwOEQ2QzAwNkMwMjAwMjAyMUFGOTEwMDIwMjU5MDAwMDE4NQorOjEwOEQzMDAwQUQ3MDAwNkM4RjhEMDAyODAwODU4ODIzQUY5MTAwMjREMgorOjEwOEQ0MDAwMDFBNTIwMjNBRjg0MDAyODEyMjAwMDAyMjQwNzAwMTg2OAorOjEwOEQ1MDAwMjQwNzAwMTAzQzE4ODAwODM3MDYwMDgwOTBDRjAwNjg3OAorOjEwOEQ2MDAwM0MwMTA4MDBBMDI3M0ZGODI0MDcwMDAxMzFFRTAwRkY3NgorOjEwOEQ3MDAwMTFDNzAwNDcwMDAwMDAwMDE0ODAwMDE4MDAwMDI4MjFERgorOjEwOEQ4MDAwM0MwNjgwMDAzNEQxMDk4MDM0Q0QwMTAwOTFBNjAwMDk1MQorOjEwOEQ5MDAwOEUyQzAwMTgyNEM0MDAwMTAwMEM4NjAyMzIwNTAwN0ZDRQorOjEwOERBMDAwMzA4QjAwN0YxMTY1MDA3RjI0MDdGRjgwM0MxOTgwMDgwRAorOjEwOERCMDAwMzcyOTAwODBBMTI0MDA0QzNDMDgwODAwOEQwODNGRjRBRQorOjEwOERDMDAwMjQxODAwMDIzQzAxMDgwMEEwMzg0MDM5MzUwRjAwMDg4MworOjEwOEREMDAwM0MwMTA4MDBBQzJGM0ZGNDI0MDUwMDEwM0MwMjgwMDA0OQorOjEwOERFMDAwMzQ0NDBBMDA5MDgzMDAzQzMwN0YwMDIwMTNFMDAwMDVFQgorOjEwOERGMDAwMDBBMDIwMjEyNDBBMDAwMTNDMDEwODAwQUMyQTNGREMyRAorOjEwOEUwMDAwMzRBNDAwMDE4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTA4MAorOjEwOEUxMDAwMDA4MDEwMjEwM0UwMDAwODI3QkQwMDIwM0MwMTA4MDA2RAorOjEwOEUyMDAwQTQyMDNGRTQxMEEwRkY5NDAyMDAxODIxMEEwMDBDQ0FGRAorOjEwOEUzMDAwMDBDMDE4MjEwQTAwMENDMTI0MDMwMDMwM0MwNTA4MDBDMgorOjEwOEU0MDAwOENBNTNGREMwMEIwNzAyQjExQzBGRkE4MDAwMDAwMDAxMworOjEwOEU1MDAwM0MxOTA4MDA5NzM5M0ZFNDAzMjVDMDIxMDMwNzc4MkIwQworOjEwOEU2MDAwMTFFMDAwMDcyQ0FBMDAwNDNDMDM2MDAwOEM2MjU0MDQ0QgorOjEwOEU3MDAwMzA1RjAwM0YxN0UwRkZFMzI0MDQwMDQyMkNBQTAwMDQwNworOjEwOEU4MDAwMTE0MEZGOUEyNDA0MDA0MjBBMDAwRDJFOEZCRjAwMThFMworOjEwOEU5MDAwMTUyOEZGQjkwMDAwMDAwMDhDQ0EwMDE4M0MxRjgwMDA5NAorOjEwOEVBMDAwMjQwMjAwMDIwMTVGMTgyNUFDQzMwMDE4MzdGOTBBMDAzQworOjEwOEVCMDAwQTBDMjAwNjg5MzI5MDAzQzI0MDQwMDA0MDBBMDEwMjFGMworOjEwOEVDMDAwMzEyODAwMjAzQzAxMDgwMEEwMjQ0MDM5MTEwMDAwMDI5NAorOjEwOEVEMDAwMjQwNTAwMTAyNDAyMDAwMTNDMDEwODAwQUMyMjNGRDQwQworOjEwOEVFMDAwMEEwMDBEMjQzQzAyODAwMDhGODgwMDI4OEM4OTAwNjBENQorOjEwOEVGMDAwMDEwOTI4MkIxNEEwMDAwMjAxMDA4ODIxOEM5MTAwNjAzOAorOjEwOEYwMDAwM0MwNDgwMDAzNDhCMEUwMDhENjQwMDE4MjQwQTAwMDE5QworOjEwOEYxMDAwMDIyMDI4MjEwMjIwMzAyMUEzOEEwMDFDMEUwMDBCOEQ4NAorOjEwOEYyMDAwMDIyMDgwMjEwQTAwMENCMEFGODIwMDJDMDAwNDU4MjNEQworOjEwOEYzMDAwMTIyMDAwMDczMTY0MDAwMzNDMEU4MDAwMzVDNzA5ODAxMQorOjEwOEY0MDAwOTBFRDAwN0MzMUFDMDAwNDE1ODAwMDE5MjQ4RjAwMDRFMgorOjEwOEY1MDAwM0MwMTA4MDBBNDI0M0ZGQTNDMUYwODAwOTdGRjNGRkE5OQorOjEwOEY2MDAwMDNFNUM4MjEwMEQ5QzAyQjEzMDBGRjZCOEY4NDAwMjRCOAorOjEwOEY3MDAwMkNBNjAwMDUxNEMwRkZBMzI0MDQwMDQyMzBBMjAwMDM2NQorOjEwOEY4MDAwMTQ0MDAwMDIwMEEyMTgyMzI0QTNGRkZDM0MwMTA4MDBBNworOjEwOEY5MDAwQUMyMzNGREMzQzAxMDgwMEE0MjAzRkZBMEEwMDBDRjE5RQorOjEwOEZBMDAwMDA2MDI4MjEwMEM3NzAyNDBBMDAwRDE3MDFDNzIwMjY4MQorOjEwOEZCMDAwM0MwMTA4MDBBNDJGM0ZGQTBBMDAwRDgyMDAwMDAwMDBDNworOjEwOEZDMDAwM0MwMTA4MDBBQzIwM0ZEQzBBMDAwRDJEMjQwNDAwNDJDNworOjEwOEZEMDAwOEY4MzAwMjgzQzA1ODAwMDM0QUEwQTAwMTQ2MDAwMDYzNAorOjEwOEZFMDAwMDAwMDEwMjE5MTQ3MDAzMDI0MDYwMDA1MzBFNDAwRkYwNgorOjEwOEZGMDAwMTA4NjAwMDMwMDAwMDAwMDAzRTAwMDA4MDAwMDAwMDBFRAorOjEwOTAwMDAwOTE0QjAwNDgzMTY5MDBGRjAwMDk0MUMyMTUwMEZGRkE4OQorOjEwOTAxMDAwM0MwNjgwMDgzQzA0MDgwMDk0ODQzRkU0M0MwMzA4MDBCQworOjEwOTAyMDAwOEM2MzNGRkMzQzE5MDgwMDhGMzkzRkRDM0MwRjA4MDA4MworOjEwOTAzMDAwOTVFRjNGRkEwMDY0QzAyMThDQ0QwMDA0MDMxOTcwMjEyNAorOjEwOTA0MDAwMDFDRjYwMjEzNEFCMEUwMDAxOEQyODIzMThBMDAwMUQzNAorOjEwOTA1MDAwMDAwMDAwMDA5MTRGMDA0QzhGOEMwMDM0OTU2RDAwMTA4MworOjEwOTA2MDAwMzFFRTAwRkY4RDg5MDAwNDAxQUUzMDIzOEQ4QTAwMDBBRgorOjEwOTA3MDAwMzBDRUZGRkYwMDBFMjkwMDAxMjVDODIxMDAwMDM4MjE1NQorOjEwOTA4MDAwMDE0NzIwMjEwMzI1MTgyQjAwODNDMDIxQUQ5OTAwMDQzRQorOjEwOTA5MDAwQUQ5ODAwMDA5MThGMDAwQTAxQ0Y2ODIxQTE4RDAwMEFEMAorOjEwOTBBMDAwOTU2NTAwMTI4RjhBMDAzNEE1NDUwMDA4OTU0QjAwMzg1RAorOjEwOTBCMDAwMjU2OTAwMDFBNTQ5MDAzODkxNDgwMDBEMzUwNzAwMDhEMQorOjEwOTBDMDAwQTE0NzAwMEQwM0UwMDAwODAwMDAwMDAwMjdCREZGRDgwNQorOjEwOTBEMDAwQUZCMDAwMTg5Mzg4MDAxQzhGQjAwMDE0M0MwQTgwMDBDOQorOjEwOTBFMDAwM0MxOTdGRkY4Rjg3MDAyNDM3MzhGRkZGQUZCRjAwMjA3OAorOjEwOTBGMDAwQUZCMTAwMUMzNTVGMEEwMDAyMTgxODI0OTNFQjAwM0M0NgorOjEwOTEwMDAwMDAwODdGQzAzQzAyQkZGRjAwNkY2MDI1MkNGMDAwMDEwQgorOjEwOTExMDAwMzQ0OUZGRkYzQzFGMDgwMDhGRkYzRkZDOEY5OTAwMzA1MAorOjEwOTEyMDAwM0MxODA4MDA5NzE4M0ZGMjAxODk3ODI0MDAxMDQ3ODAwNgorOjEwOTEzMDAwM0MwN0VGRkYzQzA1RjBGRjAxRTgxODI1M0MxMTgwMDBEQgorOjEwOTE0MDAwMzE2OTAwMjAzNEUyRkZGRjM0QURGRkZGMzYyRTA5ODA4NQorOjEwOTE1MDAwMjdBNTAwMTAyNDA2MDAwMjAzRjk2MDIzMjcwQjAwMDI1NAorOjEwOTE2MDAwMzU0QTBFMDAwMDYyMTgyNDAwODA4MDIxMTUyMDAwMDI3QworOjEwOTE3MDAwMDAwMDQwMjE4RDQ4MDAxQ0E3QUIwMDEyMDU4MDAwMzk3QgorOjEwOTE4MDAwMjQwNzAwMDAzMEU4MDBGRjAwMDgzRjAwMDA2NzU4MjU3MgorOjEwOTE5MDAwM0MwMjgwMDhBRkFCMDAxNDM0NEYwMDgwOTFFQTAwNjhCNQorOjEwOTFBMDAwM0MwODA4MDA5MTA4M0ZGOTNDMDlERkZGMzUyQ0ZGRkYyMAorOjEwOTFCMDAwMDAwQUY4MkIzQzAyMDgwMDk0NDIzRkVDQTNBODAwMTFERgorOjEwOTFDMDAwMDE2Q0MwMjQwMDFGQ0Y0MDAzMTkxODI1OEZBNzAwMTA4MQorOjEwOTFEMDAwQUZBMzAwMTQzQzBDMDgwMDkxOEMzRkZCQTdBMjAwMTYyMworOjEwOTFFMDAwOEZBQjAwMTQwMEVENDgyNDNDMEYwMTAwM0MwQTBGRkYzOAorOjEwOTFGMDAwMDEyRkM4MjUzMTk4MDAwMzM1NUZGRkZGMDE2RDQwMjQyMgorOjEwOTIwMDAwM0MwMjcwMDAwMzNGMzgyNDAwMTgxRTAwMDBFMjQ4MjU4RAorOjEwOTIxMDAwMDEwMzc4MjVBRkFGMDAxNEFGQTkwMDEwOTFDQzAwN0NGQQorOjEwOTIyMDAwMEUwMDAwOTJBM0FDMDAxNTM2MkQwQTAwOTFBNjAwM0M1QQorOjEwOTIzMDAwMzBDNDAwMjAxMDgwMDAwNjI2MDIwMDA4M0MxMTA4MDBGRgorOjEwOTI0MDAwOTYzMTNGRTgyNjJFRkZGRjNDMDEwODAwQTQyRTNGRThBMAorOjEwOTI1MDAwOEZCRjAwMjA4RkIxMDAxQzhGQjAwMDE4MDNFMDAwMDgwMgorOjEwOTI2MDAwMjdCRDAwMjg4RjhCMDAyQzAxMEI1MDJCNTU0MEZGQzVDQworOjEwOTI3MDAwMjQwNzAwMDEwQTAwMEUwRTMwRTgwMEZGOTM4MzAwMUM1MworOjEwOTI4MDAwM0MwMjgwMDAyN0JERkZEODM0NDgwQTAwMDA4MDUwMjFFRQorOjEwOTI5MDAwQUZCRjAwMjAzNDQ2MEFDMDAxMDAyODIxMTA2MDAwMEUzNAorOjEwOTJBMDAwMzQ0NDA5ODA5MTA3MDAzMDI0MEIwMDA1OEY4OTAwMjA4OQorOjEwOTJCMDAwMzBFQzAwM0YxMThCMDAwQjAwMDAzODIxQUZBOTAwMTBFQgorOjEwOTJDMDAwM0MwQjgwMDg4RDY5MDA2Q0FGQUEwMDE4MEUwMDAxNUE5MworOjEwOTJEMDAwQUZBOTAwMTRBMzgwMDAxQzhGQkYwMDIwMDNFMDAwMDg4QQorOjEwOTJFMDAwMjdCRDAwMjg4RDFGMDA0ODNDMTgwODAwOEYxODNGREM2MAorOjEwOTJGMDAwOEY5OTAwMjgzQzAyN0ZGRjhEMDgwMDQ0MzQ0M0ZGRkYxNAorOjEwOTMwMDAwQUZBOTAwMTAzQzBCODAwODhENjkwMDZDMDNFMzcwMjQ0QQorOjEwOTMxMDAwMDMxOTc4MjEwMUNGNjgyMzAxQTgzODIxQUZBQTAwMThDQQorOjEwOTMyMDAwMEUwMDAxNUFBRkE5MDAxNDBBMDAwRTYyQTM4MDAwMUNBRgorOjEwOTMzMDAwM0MwNTgwMDAzNEE2MEEwMDkwQzcwMDNDM0MwNjA4MDBBQgorOjEwOTM0MDAwOTRDNjNGRkEzQzAyMDgwMDhDNDIzRkY0MzBFMzAwMjAxMAorOjEwOTM1MDAwMDAwNjI0MDAxMDYwMDAxRTAwNDQzODI1M0MwODgwMDhFOAorOjEwOTM2MDAwMzUwNTAwODA5MEEzMDA2ODAwMDA0ODIxMjQwODAwMDExMgorOjEwOTM3MDAwMDAwMDI4MjEyNDA0MDAwMTNDMDY4MDAwOENDRDAxNzhFNworOjEwOTM4MDAwMDVBMEZGRkUzNENGMDE0MEFERTgwMDA4M0MwMjA4MDAxNAorOjEwOTM5MDAwOEM0MjNGRkNBNUU1MDAwNEE1RTQwMDA2QURFMjAwMEMwQworOjEwOTNBMDAwM0MwNDA4MDA5MDg0M0ZGOTNDMDM4MDA4MzQ3OTAwODAzNQorOjEwOTNCMDAwQTFFNDAwMTJBREU3MDAxNEE1RTkwMDE4OTMzODAwNENCMQorOjEwOTNDMDAwM0MwRTEwMDBBMUY4MDAyRDAzRTAwMDA4QUNDRTAxNzg5RgorOjEwOTNEMDAwMzRBOTBFMDA4RDI4MDAxQzNDMEMwODAwOEQ4QzNGREM0RAorOjEwOTNFMDAwOTUyQjAwMTY5NTJBMDAxNDAxODY0ODIxMzE2NEZGRkY1MQorOjEwOTNGMDAwMEEwMDBFOEEzMTQ1RkZGRjNDMDQ4MDAwMzQ4MzBBMDBENgorOjEwOTQwMDAwOTA2NTAwM0MzMEEyMDAyMDEwNDAwMDE5MzQ4NzBFMDAwNworOjEwOTQxMDAwMDAwMDQwMjEwMDAwMzgyMTAwMDAyMDIxM0MwNjgwMDA4RgorOjEwOTQyMDAwOENDOTAxNzgwNTIwRkZGRTM0Q0EwMTQwMzRDRjAxMDAwOQorOjEwOTQzMDAwOTFFQjAwMDlBRDQ4MDAwODNDMEUwODAwOERDRTNGRkNDMgorOjEwOTQ0MDAwMjQwREZGOTEyNDBDMDA0MDNDMDgxMDAwQTU0NDAwMDRBQQorOjEwOTQ1MDAwQTU0NzAwMDZBRDRFMDAwQ0ExNEQwMDEyQUQ0QzAwMTQwNgorOjEwOTQ2MDAwQTU0MDAwMThBMTRCMDAyRDAzRTAwMDA4QUNDODAxNzgwRQorOjEwOTQ3MDAwOENFODAwMTg5NEU2MDAxMjk0RTQwMDEwMzBDN0ZGRkY1NworOjEwOTQ4MDAwMEEwMDBFQjMzMDg0RkZGRjNDMDQ4MDAwMzQ4MzBBMDBERQorOjEwOTQ5MDAwOTA2NTAwM0MzMEEyMDAyMDEwNDAwMDI3MjdCREZGRjg1NworOjEwOTRBMDAwMjQwOTAwMDEwMDAwMzgyMTI0MDgwMDAxM0MwNjgwMDA0NgorOjEwOTRCMDAwOENDQTAxNzgwNTQwRkZGRTNDMDI4MEZGMzRDNDAxMDBFNQorOjEwOTRDMDAwOTA4RDAwMDkzQzBDMDgwMDkxOEM0MDM5QTNBRDAwMDMzRAorOjEwOTREMDAwOEZBQjAwMDAzMTg1MDA3RjM0NTlGRkZGMDE2NjUwMjVCNgorOjEwOTRFMDAwQUZBQTAwMDA5MDgzMDAwQUEzQTAwMDAyMDAwNTdFMDAzRQorOjEwOTRGMDAwQTNBMzAwMDE4RkI4MDAwMDM0Q0IwMTQwMjQwQzMwMDAzRQorOjEwOTUwMDAwMDMxOTcwMjQwMUNGNjgyNUFENkQwMDBDMjdCRDAwMDgzQworOjEwOTUxMDAwQUQ2QzAwMTRBNTYwMDAxOEFENjkwMDA4QTU2NzAwMDREMworOjEwOTUyMDAwMjQwOUZGODBBNTY4MDAwNjNDMDgxMDAwQTE2OTAwMTIwQworOjEwOTUzMDAwMDNFMDAwMDhBQ0M4MDE3ODM0ODcwRTAwOENFOTAwMThGRAorOjEwOTU0MDAwOTRFNjAwMTI5NEU0MDAxMDMwQzhGRkZGMEEwMDBFRDcyMgorOjEwOTU1MDAwMzA4N0ZGRkYyN0JERkZFMEFGQjEwMDE0M0MxMTgwMDA1MgorOjEwOTU2MDAwQUZCMDAwMTBBRkJGMDAxODM2MzgwQTAwOTcwRjAwMzJCNgorOjEwOTU3MDAwMzYzMDAxMDAwRTAwMEI4OTMxRTQzRkZGOEUwRTAwMDBGMworOjEwOTU4MDAwMjQwREZGODAzQzA0MjAwMDAxQzI1ODIxMDE2RDYwMjQ5RAorOjEwOTU5MDAwMDAwQzQ5NDAzMTZBMDA3RjAxMkE0MDI1MDEwNDM4MjUyQQorOjEwOTVBMDAwM0MwNDgwMDhBRTI3MDgzMDM0ODYwMDgwOTBDNTAwNjhFRgorOjEwOTVCMDAwMjQwMzAwMDIzMEEyMDBGRjEwNDMwMDA0OEY5RjAwMjAwQworOjEwOTVDMDAwOEY5OTAwMjRBQzlGMDA2OEFDOTkwMDY0OEZCRjAwMTg4RAorOjEwOTVEMDAwOEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjBGOQorOjEwOTVFMDAwM0MwQTA4MDAyNTRBM0FBODNDMDkwODAwMjUyOTNCMzhDRQorOjEwOTVGMDAwM0MwODA4MDAyNTA4MkY0NDNDMDcwODAwMjRFNzNDMDRFOQorOjEwOTYwMDAwM0MwNjA4MDAyNEM2MzkyQzNDMDUwODAwMjRBNTM2ODBGOQorOjEwOTYxMDAwM0MwNDA4MDAyNDg0MzI4NDNDMDMwODAwMjQ2MzM5RTBCRAorOjEwOTYyMDAwM0MwMjA4MDAyNDQyMzc3QzNDMDEwODAwQUMyQTNGQjhDOQorOjEwOTYzMDAwM0MwMTA4MDBBQzI5M0ZCNDNDMDEwODAwQUMyODNGQjAxNQorOjEwOTY0MDAwM0MwMTA4MDBBQzI3M0ZCQzNDMDEwODAwQUMyNjNGQ0NFNQorOjEwOTY1MDAwM0MwMTA4MDBBQzI1M0ZDNDNDMDEwODAwQUMyNDNGQzBERAorOjEwOTY2MDAwM0MwMTA4MDBBQzIzM0ZEMDNDMDEwODAwQUMyMjNGQzhCRAorOjA4OTY3MDAwMDNFMDAwMDgwMDAwMDAwMDA3Cis6MDg5Njc4MDA4MDAwMDk0MDgwMDAwOTAwOTgKKzoxMDk2ODAwMDgwMDgwMTAwODAwODAwODA4MDA4MDAwMDgwMEUwMDAwMzMKKzoxMDk2OTAwMDgwMDgwMDgwODAwODAwMDA4MDAwMEE4MDgwMDAwQTAwQTYKKzowODk2QTAwMDgwMDAwOTgwODAwMDA5MDAzMAorOjAwMDAwMDAxRkYKKy8qCisgKiBUaGlzIGZpbGUgY29udGFpbnMgZmlybXdhcmUgZGF0YSBkZXJpdmVkIGZyb20gcHJvcHJpZXRhcnkgdW5wdWJsaXNoZWQKKyAqIHNvdXJjZSBjb2RlLCBDb3B5cmlnaHQgKGMpIDIwMDQgLSAyMDA5IEJyb2FkY29tIENvcnBvcmF0aW9uLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgZm9yIHRoZSBkaXN0cmlidXRpb24gb2YgdGhpcyBmaXJtd2FyZSBkYXRhCisgKiBpbiBoZXhhZGVjaW1hbCBvciBlcXVpdmFsZW50IGZvcm1hdCwgcHJvdmlkZWQgdGhpcyBjb3B5cmlnaHQgbm90aWNlIGlzCisgKiBhY2NvbXBhbnlpbmcgaXQuCisgKi8KZGlmZiAtLWdpdCBhL2Zpcm13YXJlL2JueDJ4L2JueDJ4LWUxLTYuMC4zNC4wLmZ3LmloZXggYi9maXJtd2FyZS9ibngyeC9ibngyeC1lMS02LjAuMzQuMC5mdy5paGV4CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzM2I1ODRjLi4wMDAwMDAwCi0tLSBhL2Zpcm13YXJlL2JueDJ4L2JueDJ4LWUxLTYuMC4zNC4wLmZ3LmloZXgKKysrIC9kZXYvbnVsbApAQCAtMSw5NDc2ICswLDAgQEAKLToxMDAwMDAwMDAwMDAzQkIwMDAwMDAwNjgwMDAwMDcwQzAwMDAzQzIwMkUKLToxMDAwMTAwMDAwMDAxQUY4MDAwMDQzMzAwMDAwMDA3QzAwMDA1RTMwNTEKLToxMDAwMjAwMDAwMDA3OUU4MDAwMDVFQjAwMDAwMDBCNDAwMDBEOEEwMzUKLToxMDAwMzAwMDAwMDA4MDBDMDAwMEQ5NTgwMDAwMDA4ODAwMDE1OTY4QjkKLToxMDAwNDAwMDAwMDAzOUM0MDAwMTU5RjgwMDAwMDA5MDAwMDE5M0MwN0QKLToxMDAwNTAwMDAwMDBBQkE4MDAwMTk0NTgwMDAwMEZGQzAwMDI0MDA4MEIKLToxMDAwNjAwMDAwMDAwMDA0MDAwMjUwMDgwMjA0MDA0ODAwMDAwMDBGRDUKLToxMDAwNzAwMDAyMDQwMDU0MDAwMDAwNDUwMjA0MDA1ODAwMDAwMDAwODMKLToxMDAwODAwMDAyMDQwMDVDMDAwMDAwMDYwMjA0MDA3MDAwMDAwMDA0OEUKLToxMDAwOTAwMDAyMDQwMDc4MDAwMDAwMDAwMjA0MDA3QzEyMTcwMDAwMzcKLToxMDAwQTAwMDAyMDQwMDgwMjIxNzAwMDAwMjA0MDA4NDMyMTcwMDAwQkUKLToxMDAwQjAwMDA2MDQwMDg4MDAwMDAwMDUwMjA0MDA5QzEyMTUwMDAwRTAKLToxMDAwQzAwMDAyMDQwMEEwMjIxNTAwMDAwMjA0MDBBNDMyMTUwMDAwNjIKLToxMDAwRDAwMDA2MDQwMEE4MDAwMDAwMDQwMjA0MDBCODAyMTAwMDAwOUEKLToxMDAwRTAwMDAyMDQwMEJDMDAxMDAwMDAwMjA0MDBDMDEwMTAwMDAwNTgKLToxMDAwRjAwMDAyMDQwMEM0MjAxMDAwMDAwMjA0MDBDODMwMTAwMDAwRjgKLToxMDAxMDAwMDA2MDQwMENDMDAwMDAwMDQwMjA0MDBEQzAwMTAwMDAwMjMKLToxMDAxMTAwMDAyMDQwMEUwMTIxNDAwMDAwMjA0MDBFNDIyMTQwMDAwQjMKLToxMDAxMjAwMDAyMDQwMEU4MzIxNDAwMDAwNjA0MDBFQzAwMDAwMDA0QTEKLToxMDAxMzAwMDAxMDQwMTI0MDAwMDAwMDAwMTA0MDEyODAwMDAwMDAwNjcKLToxMDAxNDAwMDAxMDQwMTJDMDAwMDAwMDAwMTA0MDEzMDAwMDAwMDAwNDcKLToxMDAxNTAwMDAyMDQwMDA0MDAwMDAwRkYwMjA0MDAwODAwMDAwMEZGODkKLToxMDAxNjAwMDAyMDQwMDBDMDAwMDAwRkYwMjA0MDAxMDAwMDAwMEZGNjkKLToxMDAxNzAwMDAyMDQwMDE0MDAwMDAwRkYwMjA0MDAxODAwMDAwMEZGNDkKLToxMDAxODAwMDAyMDQwMDFDMDAwMDAwRkYwMjA0MDAyMDAwMDAwMEZGMjkKLToxMDAxOTAwMDAyMDQwMDI0MDAwMDAwM0UwMjA0MDAyODAwMDAwMDAwQzkKLToxMDAxQTAwMDAyMDQwMDJDMDAwMDAwM0YwMjA0MDAzMDAwMDAwMDNGNjkKLToxMDAxQjAwMDAyMDQwMDM0MDAwMDAwM0YwMjA0MDAzODAwMDAwMDAwODgKLToxMDAxQzAwMDAyMDQwMDNDMDAwMDAwM0YwMjA0MDA0MDAwMDAwMDNGMjkKLToxMDAxRDAwMDAyMDQwMDQ0MDAwMDAwM0YwMjA0MjAwODAwMDAwMjExNTUKLToxMDAxRTAwMDAyMDQyMDBDMDAwMDAyMDAwMjA0MjAxMDAwMDAwMjA0OUYKLToxMDAxRjAwMDAyMDQyMDE0MDAwMDAyMTkwMjA0MjAxQzAwMDBGRkZGNkEKLToxMDAyMDAwMDAyMDQyMDIwMDAwMEZGRkYwMjA0MjAyNDAwMDBGRkZGNjIKLToxMDAyMTAwMDAyMDQyMDI4MDAwMEZGRkYwNjA0MjAzODAwMDAwMDgwQjAKLToxMDAyMjAwMDAyMDQyMjM4MDdGRkZGRkYwMjA0MjIzQzAwMDAwMDNGQzcKLToxMDAyMzAwMDAyMDQyMjQwMDdGRkZGRkYwMjA0MjI0NDAwMDAwMDBGRDcKLToxMDAyNDAwMDAxMDQyMjQ4MDAwMDAwMDAwMTA0MjI0QzAwMDAwMDAwQ0MKLToxMDAyNTAwMDAxMDQyMjUwMDAwMDAwMDAwMTA0MjI1NDAwMDAwMDAwQUMKLToxMDAyNjAwMDAxMDQyMjU4MDAwMDAwMDAwMTA0MjI1QzAwMDAwMDAwOEMKLToxMDAyNzAwMDAxMDQyMjYwMDAwMDAwMDAwMTA0MjI2NDAwMDAwMDAwNkMKLToxMDAyODAwMDAxMDQyMjY4MDAwMDAwMDAwMTA0MjI2QzAwMDAwMDAwNEMKLToxMDAyOTAwMDAxMDQyMjcwMDAwMDAwMDAwMTA0MjI3NDAwMDAwMDAwMkMKLToxMDAyQTAwMDAxMDQyMjc4MDAwMDAwMDAwMTA0MjI3QzAwMDAwMDAwMEMKLToxMDAyQjAwMDAyMDQyNEJDMDAwMDAwMDEwQzA0MjAwMDAwMDAwM0U4M0MKLToxMDAyQzAwMDBBMDQyMDAwMDAwMDAwMDEwQjA0MjAwMDAwMDAwMDBBQzYKLToxMDAyRDAwMDA2MDU0MDAwMDAwMDBEMDAwMjA1MDA0NDAwMDAwMDIwNUIKLToxMDAyRTAwMDAyMDUwMDQ4MDAwMDAwMzIwMjA1MDA5MDAyMTUwMDIwQkYKLToxMDAyRjAwMDAyMDUwMDk0MDIxNTAwMjAwMjA1MDA5ODAwMDAwMDMwNUQKLToxMDAzMDAwMDAyMDUwMDlDMDgxMDAwMDAwMjA1MDBBMDAwMDAwMDMzNTgKLToxMDAzMTAwMDAyMDUwMEE0MDAwMDAwMzAwMjA1MDBBODAwMDAwMDMxMjIKLToxMDAzMjAwMDAyMDUwMEFDMDAwMDAwMDIwMjA1MDBCMDAwMDAwMDA1NUMKLToxMDAzMzAwMDAyMDUwMEI0MDAwMDAwMDYwMjA1MDBCODAwMDAwMDAyM0IKLToxMDAzNDAwMDAyMDUwMEJDMDAwMDAwMDIwMjA1MDBDMDAwMDAwMDAwMjEKLToxMDAzNTAwMDAyMDUwMEM0MDAwMDAwMDUwMjA1MDBDODAwMDAwMDAyRkMKLToxMDAzNjAwMDAyMDUwMENDMDAwMDAwMDIwMjA1MDBEMDAwMDAwMDAyREYKLToxMDAzNzAwMDAyMDUwMEQ0MDAwMDAwMDEwMjA1MDExNDAwMDAwMDAxODQKLToxMDAzODAwMDAyMDUwMTFDMDAwMDAwMDEwMjA1MDEyMDAwMDAwMDAyMUUKLToxMDAzOTAwMDAyMDUwMjA0MDAwMDAwMDEwMjA1MDIwQzAwMDAwMDQwRkEKLToxMDAzQTAwMDAyMDUwMjEwMDAwMDAwNDAwMjA1MDIxQzAwMDAwMDIwQUYKLToxMDAzQjAwMDAyMDUwMjIwMDAwMDAwMTMwMjA1MDIyNDAwMDAwMDIwQjQKLToxMDAzQzAwMDA2MDUwMjQwMDAwMDAwMEEwNDA1MDI4MDAwMjAwMDAwMkIKLToxMDAzRDAwMDAyMDUwMDUwMDAwMDAwMDcwMjA1MDA1NDAwMDAwMDA3NUQKLToxMDAzRTAwMDAyMDUwMDU4MDAwMDAwMDAwMjA1MDA1QzAwMDAwMDA4NDMKLToxMDAzRjAwMDA2MDUwMDYwMDAwMDAwMDQwMjA1MDBEODAwMDAwMDA2QTkKLToxMDA0MDAwMDAyMDUwMEUwMDAwMDAwMEQwMjA1MDBFNDAwMDAwMDJERTAKLToxMDA0MTAwMDAyMDUwMEU4MDAwMDAwMDAwMjA1MDBFQzAwMDAwMDIwREEKLToxMDA0MjAwMDAyMDUwMEYwMDAwMDAwMDAwMjA1MDBGNDAwMDAwMDIwQkEKLToxMDA0MzAwMDAyMDUwMEY4MDAwMDAwMDAwMjA1MDBGQzAwMDAwMDIwOUEKLToxMDA0NDAwMDAyMDUwMDA0MDAwMDAwMDEwMjA1MDAwODAwMDAwMDAxOTAKLToxMDA0NTAwMDAyMDUwMDBDMDAwMDAwMDEwMjA1MDAxMDAwMDAwMDAxNzAKLToxMDA0NjAwMDAyMDUwMDE0MDAwMDAwMDEwMjA1MDAxODAwMDAwMDAxNTAKLToxMDA0NzAwMDAyMDUwMDFDMDAwMDAwMDEwMjA1MDAyMDAwMDAwMDAxMzAKLToxMDA0ODAwMDAyMDUwMDI0MDAwMDAwMDEwMjA1MDAyODAwMDAwMDAxMTAKLToxMDA0OTAwMDAyMDUwMDJDMDAwMDAwMDEwMjA1MDAzMDAwMDAwMDAxRjAKLToxMDA0QTAwMDAyMDUwMDM0MDAwMDAwMDEwMjA1MDAzODAwMDAwMDAxRDAKLToxMDA0QjAwMDAyMDUwMDNDMDAwMDAwMDEwMjA1MDA0MDAwMDAwMDAxQjAKLToxMDA0QzAwMDA0MDYxMDAwMDIwMDAwMjAwMjA2MDBEQzAwMDAwMDAxMEIKLToxMDA0RDAwMDAxMDYwMEQ4MDAwMDAwMDAwNDA2MDIwMDAwMDMwMjIwMEMKLToxMDA0RTAwMDAyMDYwMERDMDAwMDAwMDAwMjA2MDA2ODAwMDAwMEI4MDAKLToxMDA0RjAwMDAyMDYwMDc4MDAwMDAxMTQwMTA2MDBCODAwMDAwMDAwQTgKLToxMDA1MDAwMDAxMDYwMEM4MDAwMDAwMDAwMjA2MDA2QzAwMDAwMEI4RjAKLToxMDA1MTAwMDAyMDYwMDdDMDAwMDAxMTQwMTA2MDBCQzAwMDAwMDAwN0YKLToxMDA1MjAwMDAxMDYwMENDMDAwMDAwMDAwNzE4MDQwMDAwN0IwMDAwNUEKLToxMDA1MzAwMDA4MTgwNzYwMDAxNDAyMjMwNzFDMDAwMDJBMUUwMDAwOTAKLToxMDA1NDAwMDA3MUM4MDAwMzFFNjBBODgwNzFEMDAwMDFEREQxNzAyMjgKLToxMDA1NTAwMDA4MUQ0NDcwNTc3MjAyMjUwMTE4MDAwMDAwMDAwMDAwQjkKLToxMDA1NjAwMDAxMTgwMDA0MDAwMDAwMDAwMTE4MDAwODAwMDAwMDAwNEQKLToxMDA1NzAwMDAxMTgwMDBDMDAwMDAwMDAwMTE4MDAxMDAwMDAwMDAwMkQKLToxMDA1ODAwMDAxMTgwMDE0MDAwMDAwMDAwMjE4MDAyMDAwMDAwMDAxMDMKLToxMDA1OTAwMDAyMTgwMDI0MDAwMDAwMDIwMjE4MDAyODAwMDAwMDAzRDYKLToxMDA1QTAwMDAyMTgwMDJDMDAwMDAwMDAwMjE4MDAzMDAwMDAwMDA0QjcKLToxMDA1QjAwMDAyMTgwMDM0MDAwMDAwMDEwMjE4MDAzODAwMDAwMDAwOUEKLToxMDA1QzAwMDAyMTgwMDNDMDAwMDAwMDEwMjE4MDA0MDAwMDAwMDA0NzYKLToxMDA1RDAwMDAyMTgwMDQ0MDAwMDAwMDAwMjE4MDA0ODAwMDAwMDAxNUEKLToxMDA1RTAwMDAyMTgwMDRDMDAwMDAwMDMwMjE4MDA1MDAwMDAwMDAwMzgKLToxMDA1RjAwMDAyMTgwMDU0MDAwMDAwMDEwMjE4MDA1ODAwMDAwMDA0MTYKLToxMDA2MDAwMDAyMTgwMDVDMDAwMDAwMDAwMjE4MDA2MDAwMDAwMDAxRjkKLToxMDA2MTAwMDAyMTgwMDY0MDAwMDAwMDMwMjE4MDA2ODAwMDAwMDAwRDcKLToxMDA2MjAwMDAyMTgwMDZDMDAwMDAwMDEwMjE4MDA3MDAwMDAwMDA0QjUKLToxMDA2MzAwMDAyMTgwMDc0MDAwMDAwMDAwMjE4MDA3ODAwMDAwMDA0OTYKLToxMDA2NDAwMDAyMTgwMDdDMDAwMDAwMDMwNjE4MDA4MDAwMDAwMDAyNzEKLToxMDA2NTAwMDAyMTgwMEE0MDAwMDNGRkYwMjE4MDBBODAwMDAwM0ZGREEKLToxMDA2NjAwMDAyMTgwMjI0MDAwMDAwMDAwMjE4MDIzNDAwMDAwMDAwRkEKLToxMDA2NzAwMDAyMTgwMjRDMDAwMDAwMDAwMjE4MDJFNDAwMDAwMEZGMTMKLToxMDA2ODAwMDA2MTgxMDAwMDAwMDA0MDAwMjFCOEJDMDAwMDAwMDAxQ0YKLToxMDA2OTAwMDAyMUI4MDAwMDAwMDAwMzQwMjFCODA0MDAwMDAwMDE4OTQKLToxMDA2QTAwMDAyMUI4MDgwMDAwMDAwMEMwMjFCODBDMDAwMDAwMDIwQTQKLToxMDA2QjAwMDBDMUI4MzAwMDAwN0ExMjAwQTFCODMwMDAwMDAwMTM4RTcKLToxMDA2QzAwMDBCMUI4MzAwMDAwMDEzODgwQTFCODM0MDAwMDAwMDAwRkUKLToxMDA2RDAwMDBDMUI4MzQwMDAwMDAxRjQwQjFCODM0MDAwMDAwMDA1NEQKLToxMDA2RTAwMDAyMUI4MzgwMDAwN0ExMjAwMjFCODNDMDAwMDAwMUY0Q0QKLToxMDA2RjAwMDA2MUExMDAwMDAwMDAyNzMwNDFBMTlDQzAwMDEwMjI3MjgKLToxMDA3MDAwMDA2MUEyMDA4MDAwMDAwQzgwNjFBMjAwMDAwMDAwMDAyOTcKLToxMDA3MTAwMDA0MUE0OTk4MDAwNDAyMjgwNjFBMkUyODAwMDAwMDAyMzQKLToxMDA3MjAwMDA2MUEyRTIwMDAwMDAwMDIwNjFBMDgwMDAwMDAwMDAyMkYKLToxMDA3MzAwMDA2MUEwODA4MDAwMDAwMDQwNjFBMDgxODAwMDAwMDAyNDMKLToxMDA3NDAwMDA0MUEwOEIwMDAwMjAyMkMwNjFBMkZEMDAwMDAwMDA2N0UKLToxMDA3NTAwMDA0MUEyRkU4MDAwMjAyMkUwNDFBMkZDMDAwMDQwMjMwRUYKLToxMDA3NjAwMDA0MUEzMDAwMDAwMTAyMzQwNjFBMzAwNDAwMDAwMDAzQUQKLToxMDA3NzAwMDA0MUEzMDEwMDAwMTAyMzUwNjFBMzAxNDAwMDAwMDAzN0MKLToxMDA3ODAwMDA0MUEzMDIwMDAwMTAyMzYwNjFBMzAyNDAwMDAwMDAzNEIKLToxMDA3OTAwMDA0MUEzMDMwMDAwMTAyMzcwNjFBMzAzNDAwMDAwMDAzMUEKLToxMDA3QTAwMDA0MUEzMDQwMDAwMTAyMzgwNjFBMzA0NDAwMDAwMDAzRTkKLToxMDA3QjAwMDA0MUEzMDUwMDAwMTAyMzkwNjFBMzA1NDAwMDAwMDAzQjgKLToxMDA3QzAwMDA0MUEzMDYwMDAwMTAyM0EwNjFBMzA2NDAwMDAwMDAzODcKLToxMDA3RDAwMDA0MUEzMDcwMDAwMTAyM0IwNjFBMzA3NDAwMDAwMDAzNTYKLToxMDA3RTAwMDA0MUEzMDgwMDAwMTAyM0MwNjFBMzA4NDAwMDAwMDAzMjUKLToxMDA3RjAwMDA0MUEzMDkwMDAwMTAyM0QwNjFBMzA5NDAwMDAwMDAzRjQKLToxMDA4MDAwMDA0MUEzMEEwMDAwMTAyM0UwNjFBMzBBNDAwMDAwMDAzQzIKLToxMDA4MTAwMDA0MUEzMEIwMDAwMTAyM0YwNjFBMzBCNDAwMDAwMDAzOTEKLToxMDA4MjAwMDA0MUEzMEMwMDAwMTAyNDAwNjFBMzBDNDAwMDAwMDAzNjAKLToxMDA4MzAwMDA0MUEzMEQwMDAwMTAyNDEwNjFBMzBENDAwMDAwMDAzMkYKLToxMDA4NDAwMDA0MUEzMEUwMDAwMTAyNDIwNjFBMzBFNDAwMDAwMDAzRkUKLToxMDA4NTAwMDA0MUEzMEYwMDAwMTAyNDMwNjFBMzBGNDAwMDAwMDAzQ0QKLToxMDA4NjAwMDA0MUEzMTAwMDAwMTAyNDQwNjFBMzEwNDAwMDAwMDAzOUEKLToxMDA4NzAwMDA0MUEzMTEwMDAwMTAyNDUwNjFBMzExNDAwMDAwMDAzNjkKLToxMDA4ODAwMDA0MUEzMTIwMDAwMTAyNDYwNjFBMzEyNDAwMDAwMDAzMzgKLToxMDA4OTAwMDA0MUEzMTMwMDAwMTAyNDcwNjFBMzEzNDAwMDAwMDAzMDcKLToxMDA4QTAwMDA0MUEzMTQwMDAwMTAyNDgwNjFBMzE0NDAwMDAwMDAzRDYKLToxMDA4QjAwMDA0MUEzMTUwMDAwMTAyNDkwNjFBMzE1NDAwMDAwMDAzQTUKLToxMDA4QzAwMDA0MUEzMTYwMDAwMTAyNEEwNjFBMzE2NDAwMDAwMDAzNzQKLToxMDA4RDAwMDA0MUEzMTcwMDAwMTAyNEIwNjFBMzE3NDAwMDAwMDAzNDMKLToxMDA4RTAwMDA0MUEzMTgwMDAwMTAyNEMwNjFBMzE4NDAwMDAwMDAzMTIKLToxMDA4RjAwMDA0MUEzMTkwMDAwMTAyNEQwNjFBMzE5NDAwMDAwMDAzRTEKLToxMDA5MDAwMDA0MUEzMUEwMDAwMTAyNEUwNjFBMzFBNDAwMDAwMDAzQUYKLToxMDA5MTAwMDA0MUEzMUIwMDAwMTAyNEYwNjFBMzFCNDAwMDAwMDAzN0UKLToxMDA5MjAwMDA0MUEzMUMwMDAwMTAyNTAwNjFBMzFDNDAwMDAwMDAzNEQKLToxMDA5MzAwMDA0MUEzMUQwMDAwMTAyNTEwNjFBMzFENDAwMDAwMDAzMUMKLToxMDA5NDAwMDA0MUEzMUUwMDAwMTAyNTIwNjFBMzFFNDAwMDAwMDAzRUIKLToxMDA5NTAwMDA0MUEzMUYwMDAwMTAyNTMwNjFBMzFGNDAwMDAwMDAzQkEKLToxMDA5NjAwMDA0MUEzMjAwMDAwMTAyNTQwNjFBMzIwNDAwMDAwMDAzODcKLToxMDA5NzAwMDA0MUEzMjEwMDAwMTAyNTUwNjFBMzIxNDAwMDAwMDAzNTYKLToxMDA5ODAwMDA0MUEzMjIwMDAwMTAyNTYwNjFBMzIyNDAwMDAwMDAzMjUKLToxMDA5OTAwMDA0MUEzMjMwMDAwMTAyNTcwNjFBMzIzNDAwMDAwMDAzRjQKLToxMDA5QTAwMDA0MUEzMjQwMDAwMTAyNTgwNjFBMzI0NDAwMDAwMDAzQzMKLToxMDA5QjAwMDA0MUEzMjUwMDAwMTAyNTkwNjFBMzI1NDAwMDAwMDAzOTIKLToxMDA5QzAwMDA0MUEzMjYwMDAwMTAyNUEwNjFBMzI2NDAwMDAwMDAzNjEKLToxMDA5RDAwMDA0MUEzMjcwMDAwMTAyNUIwNjFBMzI3NDAwMDAwMDAzMzAKLToxMDA5RTAwMDA0MUEzMjgwMDAwMTAyNUMwNjFBMzI4NDAwMDAwMDAzRkYKLToxMDA5RjAwMDA0MUEzMjkwMDAwMTAyNUQwNjFBMzI5NDAwMDAwMDAzQ0UKLToxMDBBMDAwMDA0MUEzMkEwMDAwMTAyNUUwNjFBMzJBNDAwMDAwMDAzOUMKLToxMDBBMTAwMDA0MUEzMkIwMDAwMTAyNUYwNjFBMzJCNDAwMDAwMDAzNkIKLToxMDBBMjAwMDA0MUEzMkMwMDAwMTAyNjAwNjFBMzJDNDAwMDAwMDAzM0EKLToxMDBBMzAwMDA0MUEzMkQwMDAwMTAyNjEwNjFBMzJENDAwMDAwMDAzMDkKLToxMDBBNDAwMDA0MUEzMkUwMDAwMTAyNjIwNjFBMzJFNDAwMDAwMDAzRDgKLToxMDBBNTAwMDA0MUEzMkYwMDAwMTAyNjMwNjFBMzJGNDAwMDAwMDAzQTcKLToxMDBBNjAwMDA0MUEzMzAwMDAwMTAyNjQwNjFBMzMwNDAwMDAwMDAzNzQKLToxMDBBNzAwMDA0MUEzMzEwMDAwMTAyNjUwNjFBMzMxNDAwMDAwMDAzNDMKLToxMDBBODAwMDA0MUEzMzIwMDAwMTAyNjYwNjFBMzMyNDAwMDAwMDAzMTIKLToxMDBBOTAwMDA0MUEzMzMwMDAwMTAyNjcwNjFBMzMzNDAwMDAwMDAzRTEKLToxMDBBQTAwMDA0MUEzMzQwMDAwMTAyNjgwNjFBMzM0NDAwMDAwMDAzQjAKLToxMDBBQjAwMDA0MUEzMzUwMDAwMTAyNjkwNjFBMzM1NDAwMDAwMDAzN0YKLToxMDBBQzAwMDA0MUEzMzYwMDAwMTAyNkEwNjFBMzM2NDAwMDAwMDAzNEUKLToxMDBBRDAwMDA0MUEzMzcwMDAwMTAyNkIwNjFBMzM3NDAwMDAwMDAzMUQKLToxMDBBRTAwMDA0MUEzMzgwMDAwMTAyNkMwNjFBMzM4NDAwMDAwMDAzRUMKLToxMDBBRjAwMDA0MUEzMzkwMDAwMTAyNkQwNjFBMzM5NDAwMDAwMDAzQkIKLToxMDBCMDAwMDA0MUEzM0EwMDAwMTAyNkUwNjFBMzNBNDAwMDAwMDAzODkKLToxMDBCMTAwMDA0MUEzM0IwMDAwMTAyNkYwNjFBMzNCNDAwMDAwMDAzNTgKLToxMDBCMjAwMDA0MUEzM0MwMDAwMTAyNzAwNjFBMzNDNDAwMDAwMDAzMjcKLToxMDBCMzAwMDA0MUEzM0QwMDAwMTAyNzEwNjFBMzNENDAwMDAwMDAzRjYKLToxMDBCNDAwMDA0MUEzM0UwMDAwMTAyNzIwNjFBMzNFNDAwMDAwMDAzQzUKLToxMDBCNTAwMDA0MUEzM0YwMDAwMTAyNzMwNjFBMzNGNDAwMDAwMDAzOTQKLToxMDBCNjAwMDA0MUEzNDAwMDAwMTAyNzQwNjFBMzQwNDAwMDAwMDAzNjEKLToxMDBCNzAwMDA0MUEzNDEwMDAwMTAyNzUwNjFBMzQxNDAwMDAwMDAzMzAKLToxMDBCODAwMDA0MUEzNDIwMDAwMTAyNzYwNjFBMzQyNDAwMDAwMDAzRkYKLToxMDBCOTAwMDA0MUEzNDMwMDAwMTAyNzcwNjFBMzQzNDAwMDAwMDAzQ0UKLToxMDBCQTAwMDA0MUEzNDQwMDAwMTAyNzgwNjFBMzQ0NDAwMDAwMDAzOUQKLToxMDBCQjAwMDA0MUEzNDUwMDAwMTAyNzkwNjFBMzQ1NDAwMDAwMDAzNkMKLToxMDBCQzAwMDA0MUEzNDYwMDAwMTAyN0EwNjFBMzQ2NDAwMDAwMDAzM0IKLToxMDBCRDAwMDA0MUEzNDcwMDAwMTAyN0IwNjFBMzQ3NDAwMDAwMDAzMEEKLToxMDBCRTAwMDA0MUEzNDgwMDAwMTAyN0MwNjFBMzQ4NDAwMDAwMDAzRDkKLToxMDBCRjAwMDA0MUEzNDkwMDAwMTAyN0QwNjFBMzQ5NDAwMDAwMDAzQTgKLToxMDBDMDAwMDA0MUEzNEEwMDAwMTAyN0UwNjFBMzRBNDAwMDAwMDAzNzYKLToxMDBDMTAwMDA0MUEzNEIwMDAwMTAyN0YwNjFBMzRCNDAwMDAwMDAzNDUKLToxMDBDMjAwMDA0MUEzNEMwMDAwMTAyODAwNjFBMzRDNDAwMDAwMDAzMTQKLToxMDBDMzAwMDA0MUEzNEQwMDAwMTAyODEwNjFBMzRENDAwMDAwMDAzRTMKLToxMDBDNDAwMDA0MUEzNEUwMDAwMTAyODIwNjFBMzRFNDAwMDAwMDAzQjIKLToxMDBDNTAwMDA0MUEzNEYwMDAwMTAyODMwNjFBMzRGNDAwMDAwMDAzODEKLToxMDBDNjAwMDA0MUEzNTAwMDAwMTAyODQwNjFBMzUwNDAwMDAwMDAzNEUKLToxMDBDNzAwMDA0MUEzNTEwMDAwMTAyODUwNjFBMzUxNDAwMDAwMDAzMUQKLToxMDBDODAwMDA0MUEzNTIwMDAwMTAyODYwNjFBMzUyNDAwMDAwMDAzRUMKLToxMDBDOTAwMDA0MUEzNTMwMDAwMTAyODcwNjFBMzUzNDAwMDAwMDAzQkIKLToxMDBDQTAwMDA0MUEzNTQwMDAwMTAyODgwNjFBMzU0NDAwMDAwMDAzOEEKLToxMDBDQjAwMDA0MUEzNTUwMDAwMTAyODkwNjFBMzU1NDAwMDAwMDAzNTkKLToxMDBDQzAwMDA0MUEzNTYwMDAwMTAyOEEwNjFBMzU2NDAwMDAwMDAzMjgKLToxMDBDRDAwMDA0MUEzNTcwMDAwMTAyOEIwNjFBMzU3NDAwMDAwMDAzRjcKLToxMDBDRTAwMDA0MUEzNTgwMDAwMTAyOEMwNjFBMzU4NDAwMDAwMDAzQzYKLToxMDBDRjAwMDA0MUEzNTkwMDAwMTAyOEQwNjFBMzU5NDAwMDAwMDAzOTUKLToxMDBEMDAwMDA0MUEzNUEwMDAwMTAyOEUwNjFBMzVBNDAwMDAwMDAzNjMKLToxMDBEMTAwMDA0MUEzNUIwMDAwMTAyOEYwNjFBMzVCNDAwMDAwMDAzMzIKLToxMDBEMjAwMDA0MUEzNUMwMDAwMTAyOTAwNjFBMzVDNDAwMDAwMDAzMDEKLToxMDBEMzAwMDA0MUEzNUQwMDAwMTAyOTEwNjFBMzVENDAwMDAwMDAzRDAKLToxMDBENDAwMDA0MUEzNUUwMDAwMTAyOTIwNjFBMzVFNDAwMDAwMDAzOUYKLToxMDBENTAwMDA0MUEzNUYwMDAwMTAyOTMwNjFBMzVGNDAwMDAwMDAzNkUKLToxMDBENjAwMDA0MUEzNjAwMDAwMTAyOTQwNjFBMzYwNDAwMDAwMDAzM0IKLToxMDBENzAwMDA0MUEzNjEwMDAwMTAyOTUwNjFBMzYxNDAwMDAwMDAzMEEKLToxMDBEODAwMDA0MUEzNjIwMDAwMTAyOTYwNjFBMzYyNDAwMDAwMDAzRDkKLToxMDBEOTAwMDA0MUEzNjMwMDAwMTAyOTcwNjFBMzYzNDAwMDAwMDAzQTgKLToxMDBEQTAwMDA0MUEzNjQwMDAwMTAyOTgwNjFBMzY0NDAwMDAwMDAzNzcKLToxMDBEQjAwMDA0MUEzNjUwMDAwMTAyOTkwNjFBMzY1NDAwMDAwMDAzNDYKLToxMDBEQzAwMDA0MUEzNjYwMDAwMTAyOUEwNjFBMzY2NDAwMDAwMDAzMTUKLToxMDBERDAwMDA0MUEzNjcwMDAwMTAyOUIwNjFBMzY3NDAwMDAwMDAzRTQKLToxMDBERTAwMDA0MUEzNjgwMDAwMTAyOUMwNjFBMzY4NDAwMDAwMDAzQjMKLToxMDBERjAwMDA0MUEzNjkwMDAwMTAyOUQwNjFBMzY5NDAwMDAwMDAzODIKLToxMDBFMDAwMDA0MUEzNkEwMDAwMTAyOUUwNjFBMzZBNDAwMDAwMDAzNTAKLToxMDBFMTAwMDA0MUEzNkIwMDAwMTAyOUYwNjFBMzZCNDAwMDAwMDAzMUYKLToxMDBFMjAwMDA0MUEzNkMwMDAwMTAyQTAwNjFBMzZDNDAwMDAwMDAzRUUKLToxMDBFMzAwMDA0MUEzNkQwMDAwMTAyQTEwNjFBMzZENDAwMDAwMDAzQkQKLToxMDBFNDAwMDA0MUEzNkUwMDAwMTAyQTIwNjFBMzZFNDAwMDAwMDAzOEMKLToxMDBFNTAwMDA0MUEzNkYwMDAwMTAyQTMwNjFBMzZGNDAwMDAwMDAzNUIKLToxMDBFNjAwMDA0MUEzNzAwMDAwMTAyQTQwNjFBMzcwNDAwMDAwMDAzMjgKLToxMDBFNzAwMDA0MUEzNzEwMDAwMTAyQTUwNjFBMzcxNDAwMDAwMDAzRjcKLToxMDBFODAwMDA0MUEzNzIwMDAwMTAyQTYwNjFBMzcyNDAwMDAwMDAzQzYKLToxMDBFOTAwMDA0MUEzNzMwMDAwMTAyQTcwNjFBMzczNDAwMDAwMDAzOTUKLToxMDBFQTAwMDA0MUEzNzQwMDAwMTAyQTgwNjFBMzc0NDAwMDAwMDAzNjQKLToxMDBFQjAwMDA0MUEzNzUwMDAwMTAyQTkwNjFBMzc1NDAwMDAwMDAzMzMKLToxMDBFQzAwMDA0MUEzNzYwMDAwMTAyQUEwNjFBMzc2NDAwMDAwMDAzMDIKLToxMDBFRDAwMDA0MUEzNzcwMDAwMTAyQUIwNjFBMzc3NDAwMDAwMDAzRDEKLToxMDBFRTAwMDA0MUEzNzgwMDAwMTAyQUMwNjFBMzc4NDAwMDAwMDAzQTAKLToxMDBFRjAwMDA0MUEzNzkwMDAwMTAyQUQwNjFBMzc5NDAwMDAwMDAzNkYKLToxMDBGMDAwMDA0MUEzN0EwMDAwMTAyQUUwNjFBMzdBNDAwMDAwMDAzM0QKLToxMDBGMTAwMDA0MUEzN0IwMDAwMTAyQUYwNjFBMzdCNDAwMDAwMDAzMEMKLToxMDBGMjAwMDA0MUEzN0MwMDAwMTAyQjAwNjFBMzdDNDAwMDAwMDAzREIKLToxMDBGMzAwMDA0MUEzN0QwMDAwMTAyQjEwNjFBMzdENDAwMDAwMDAzQUEKLToxMDBGNDAwMDA0MUEzN0UwMDAwMTAyQjIwNjFBMzdFNDAwMDAwMDAzNzkKLToxMDBGNTAwMDA0MUEzN0YwMDAwMTAyQjMwNjFBMzdGNDAwMDAwMDAzNDgKLToxMDBGNjAwMDA0MUEzODAwMDAwMTAyQjQwNjFBMzgwNDAwMDAwMDAzMTUKLToxMDBGNzAwMDA0MUEzODEwMDAwMTAyQjUwNjFBMzgxNDAwMDAwMDAzRTQKLToxMDBGODAwMDA0MUEzODIwMDAwMTAyQjYwNjFBMzgyNDAwMDAwMDAzQjMKLToxMDBGOTAwMDA0MUEzODMwMDAwMTAyQjcwNjFBMzgzNDAwMDAwMDAzODIKLToxMDBGQTAwMDA0MUEzODQwMDAwMTAyQjgwNjFBMzg0NDAwMDAwMDAzNTEKLToxMDBGQjAwMDA0MUEzODUwMDAwMTAyQjkwNjFBMzg1NDAwMDAwMDAzMjAKLToxMDBGQzAwMDA0MUEzODYwMDAwMTAyQkEwNjFBMzg2NDAwMDAwMDAzRUYKLToxMDBGRDAwMDA0MUEzODcwMDAwMTAyQkIwNjFBMzg3NDAwMDAwMDAzQkUKLToxMDBGRTAwMDA0MUEzODgwMDAwMTAyQkMwNjFBMzg4NDAwMDAwMDAzOEQKLToxMDBGRjAwMDA0MUEzODkwMDAwMTAyQkQwNjFBMzg5NDAwMDAwMDAzNUMKLToxMDEwMDAwMDA0MUEzOEEwMDAwMTAyQkUwNjFBMzhBNDAwMDAwMDAzMkEKLToxMDEwMTAwMDA0MUEzOEIwMDAwMTAyQkYwNjFBMzhCNDAwMDAwMDAzRjkKLToxMDEwMjAwMDA0MUEzOEMwMDAwMTAyQzAwNjFBMzhDNDAwMDAwMDAzQzgKLToxMDEwMzAwMDA0MUEzOEQwMDAwMTAyQzEwNjFBMzhENDAwMDAwMDAzOTcKLToxMDEwNDAwMDA0MUEzOEUwMDAwMTAyQzIwNjFBMzhFNDAwMDAwMDAzNjYKLToxMDEwNTAwMDA0MUEzOEYwMDAwMTAyQzMwNjFBMzhGNDAwMDAwMDAzMzUKLToxMDEwNjAwMDA0MUEzOTAwMDAwMTAyQzQwNjFBMzkwNDAwMDAwMDAzMDIKLToxMDEwNzAwMDA0MUEzOTEwMDAwMTAyQzUwNjFBMzkxNDAwMDAwMDAzRDEKLToxMDEwODAwMDA0MUEzOTIwMDAwMTAyQzYwNjFBMzkyNDAwMDAwMDAzQTAKLToxMDEwOTAwMDA0MUEzOTMwMDAwMTAyQzcwNjFBMzkzNDAwMDAwMDAzNkYKLToxMDEwQTAwMDA0MUEzOTQwMDAwMTAyQzgwNjFBMzk0NDAwMDAwMDAzM0UKLToxMDEwQjAwMDA0MUEzOTUwMDAwMTAyQzkwNjFBMzk1NDAwMDAwMDAzMEQKLToxMDEwQzAwMDA0MUEzOTYwMDAwMTAyQ0EwNjFBMzk2NDAwMDAwMDAzREMKLToxMDEwRDAwMDA0MUEzOTcwMDAwMTAyQ0IwNjFBMzk3NDAwMDAwMDAzQUIKLToxMDEwRTAwMDA0MUEzOTgwMDAwMTAyQ0MwNjFBMzk4NDAwMDAwMDAzN0EKLToxMDEwRjAwMDA0MUEzOTkwMDAwMTAyQ0QwNjFBMzk5NDAwMDAwMDAzNDkKLToxMDExMDAwMDA0MUEzOUEwMDAwMTAyQ0UwNjFBMzlBNDAwMDAwMDAzMTcKLToxMDExMTAwMDA0MUEzOUIwMDAwMTAyQ0YwNjFBMzlCNDAwMDAwMDAzRTYKLToxMDExMjAwMDA0MUEzOUMwMDAwMTAyRDAwNjFBMzlDNDAwMDAwMDAzQjUKLToxMDExMzAwMDA0MUEzOUQwMDAwMTAyRDEwNjFBMzlENDAwMDAwMDAzODQKLToxMDExNDAwMDA0MUEzOUUwMDAwMTAyRDIwNjFBMzlFNDAwMDAwMDAzNTMKLToxMDExNTAwMDA0MUEzOUYwMDAwMTAyRDMwNjFBMzlGNDAwMDAwMDAzMjIKLToxMDExNjAwMDA0MUEzQTAwMDAwMTAyRDQwNjFBM0EwNDAwMDAwMDAzRUYKLToxMDExNzAwMDA0MUEzQTEwMDAwMTAyRDUwNjFBM0ExNDAwMDAwMDAzQkUKLToxMDExODAwMDA0MUEzQTIwMDAwMTAyRDYwNjFBM0EyNDAwMDAwMDAzOEQKLToxMDExOTAwMDA0MUEzQTMwMDAwMTAyRDcwNjFBM0EzNDAwMDAwMDAzNUMKLToxMDExQTAwMDA0MUEzQTQwMDAwMTAyRDgwNjFBM0E0NDAwMDAwMDAzMkIKLToxMDExQjAwMDA0MUEzQTUwMDAwMTAyRDkwNjFBM0E1NDAwMDAwMDAzRkEKLToxMDExQzAwMDA0MUEzQTYwMDAwMTAyREEwNjFBM0E2NDAwMDAwMDAzQzkKLToxMDExRDAwMDA0MUEzQTcwMDAwMTAyREIwNjFBM0E3NDAwMDAwMDAzOTgKLToxMDExRTAwMDA0MUEzQTgwMDAwMTAyREMwNjFBM0E4NDAwMDAwMDAzNjcKLToxMDExRjAwMDA0MUEzQTkwMDAwMTAyREQwNjFBM0E5NDAwMDAwMDAzMzYKLToxMDEyMDAwMDA0MUEzQUEwMDAwMTAyREUwNjFBM0FBNDAwMDAwMDAzMDQKLToxMDEyMTAwMDA0MUEzQUIwMDAwMTAyREYwNjFBM0FCNDAwMDAwMDAzRDMKLToxMDEyMjAwMDA0MUEzQUMwMDAwMTAyRTAwNjFBM0FDNDAwMDAwMDAzQTIKLToxMDEyMzAwMDA0MUEzQUQwMDAwMTAyRTEwNjFBM0FENDAwMDAwMDAzNzEKLToxMDEyNDAwMDA0MUEzQUUwMDAwMTAyRTIwNjFBM0FFNDAwMDAwMDAzNDAKLToxMDEyNTAwMDA0MUEzQUYwMDAwMTAyRTMwNjFBM0FGNDAwMDAwMDAzMEYKLToxMDEyNjAwMDA0MUEzQjAwMDAwMTAyRTQwNjFBM0IwNDAwMDAwMDAzREMKLToxMDEyNzAwMDA0MUEzQjEwMDAwMTAyRTUwNjFBM0IxNDAwMDAwMDAzQUIKLToxMDEyODAwMDA0MUEzQjIwMDAwMTAyRTYwNjFBM0IyNDAwMDAwMDAzN0EKLToxMDEyOTAwMDA0MUEzQjMwMDAwMTAyRTcwNjFBM0IzNDAwMDAwMDAzNDkKLToxMDEyQTAwMDA0MUEzQjQwMDAwMTAyRTgwNjFBM0I0NDAwMDAwMDAzMTgKLToxMDEyQjAwMDA0MUEzQjUwMDAwMTAyRTkwNjFBM0I1NDAwMDAwMDAzRTcKLToxMDEyQzAwMDA0MUEzQjYwMDAwMTAyRUEwNjFBM0I2NDAwMDAwMDAzQjYKLToxMDEyRDAwMDA0MUEzQjcwMDAwMTAyRUIwNjFBM0I3NDAwMDAwMDAzODUKLToxMDEyRTAwMDA0MUEzQjgwMDAwMTAyRUMwNjFBM0I4NDAwMDAwMDAzNTQKLToxMDEyRjAwMDA0MUEzQjkwMDAwMTAyRUQwNjFBM0I5NDAwMDAwMDAzMjMKLToxMDEzMDAwMDA0MUEzQkEwMDAwMTAyRUUwNjFBM0JBNDAwMDAwMDAzRjEKLToxMDEzMTAwMDA0MUEzQkIwMDAwMTAyRUYwNjFBM0JCNDAwMDAwMDAzQzAKLToxMDEzMjAwMDA0MUEzQkMwMDAwMTAyRjAwNjFBM0JDNDAwMDAwMDAzOEYKLToxMDEzMzAwMDA0MUEzQkQwMDAwMTAyRjEwNjFBM0JENDAwMDAwMDAzNUUKLToxMDEzNDAwMDA0MUEzQkUwMDAwMTAyRjIwNjFBM0JFNDAwMDAwMDAzMkQKLToxMDEzNTAwMDA0MUEzQkYwMDAwMTAyRjMwNjFBM0JGNDAwMDAwMDAzRkMKLToxMDEzNjAwMDA0MUEzQzAwMDAwMTAyRjQwNjFBM0MwNDAwMDAwMDAzQzkKLToxMDEzNzAwMDA0MUEzQzEwMDAwMTAyRjUwNjFBM0MxNDAwMDAwMDAzOTgKLToxMDEzODAwMDA0MUEzQzIwMDAwMTAyRjYwNjFBM0MyNDAwMDAwMDAzNjcKLToxMDEzOTAwMDA0MUEzQzMwMDAwMTAyRjcwNjFBM0MzNDAwMDAwMDAzMzYKLToxMDEzQTAwMDA0MUEzQzQwMDAwMTAyRjgwNjFBM0M0NDAwMDAwMDAzMDUKLToxMDEzQjAwMDA0MUEzQzUwMDAwMTAyRjkwNjFBM0M1NDAwMDAwMDAzRDQKLToxMDEzQzAwMDA0MUEzQzYwMDAwMTAyRkEwNjFBM0M2NDAwMDAwMDAzQTMKLToxMDEzRDAwMDA0MUEzQzcwMDAwMTAyRkIwNjFBM0M3NDAwMDAwMDAzNzIKLToxMDEzRTAwMDA0MUEzQzgwMDAwMTAyRkMwNjFBM0M4NDAwMDAwMDAzNDEKLToxMDEzRjAwMDA0MUEzQzkwMDAwMTAyRkQwNjFBM0M5NDAwMDAwMDAzMTAKLToxMDE0MDAwMDA0MUEzQ0EwMDAwMTAyRkUwNjFBM0NBNDAwMDAwMDAzREUKLToxMDE0MTAwMDA0MUEzQ0IwMDAwMTAyRkYwNjFBM0NCNDAwMDAwMDAzQUQKLToxMDE0MjAwMDA0MUEzQ0MwMDAwMTAzMDAwNjFBM0NDNDAwMDAwMDAzN0IKLToxMDE0MzAwMDA0MUEzQ0QwMDAwMTAzMDEwNjFBM0NENDAwMDAwMDAzNEEKLToxMDE0NDAwMDA0MUEzQ0UwMDAwMTAzMDIwNjFBM0NFNDAwMDAwMDAzMTkKLToxMDE0NTAwMDA0MUEzQ0YwMDAwMTAzMDMwNjFBM0NGNDAwMDAwMDAzRTgKLToxMDE0NjAwMDA0MUEzRDAwMDAwMTAzMDQwNjFBM0QwNDAwMDAwMDAzQjUKLToxMDE0NzAwMDA0MUEzRDEwMDAwMTAzMDUwNjFBM0QxNDAwMDAwMDAzODQKLToxMDE0ODAwMDA0MUEzRDIwMDAwMTAzMDYwNjFBM0QyNDAwMDAwMDAzNTMKLToxMDE0OTAwMDA0MUEzRDMwMDAwMTAzMDcwNjFBM0QzNDAwMDAwMDAzMjIKLToxMDE0QTAwMDA0MUEzRDQwMDAwMTAzMDgwNjFBM0Q0NDAwMDAwMDAzRjEKLToxMDE0QjAwMDA0MUEzRDUwMDAwMTAzMDkwNjFBM0Q1NDAwMDAwMDAzQzAKLToxMDE0QzAwMDA0MUEzRDYwMDAwMTAzMEEwNjFBM0Q2NDAwMDAwMDAzOEYKLToxMDE0RDAwMDA0MUEzRDcwMDAwMTAzMEIwNjFBM0Q3NDAwMDAwMDAzNUUKLToxMDE0RTAwMDA0MUEzRDgwMDAwMTAzMEMwNjFBM0Q4NDAwMDAwMDAzMkQKLToxMDE0RjAwMDA0MUEzRDkwMDAwMTAzMEQwNjFBM0Q5NDAwMDAwMDAzRkMKLToxMDE1MDAwMDA0MUEzREEwMDAwMTAzMEUwNjFBM0RBNDAwMDAwMDAzQ0EKLToxMDE1MTAwMDA0MUEzREIwMDAwMTAzMEYwNjFBM0RCNDAwMDAwMDAzOTkKLToxMDE1MjAwMDA0MUEzREMwMDAwMTAzMTAwNjFBM0RDNDAwMDAwMDAzNjgKLToxMDE1MzAwMDA0MUEzREQwMDAwMTAzMTEwNjFBM0RENDAwMDAwMDAzMzcKLToxMDE1NDAwMDA0MUEzREUwMDAwMTAzMTIwNjFBM0RFNDAwMDAwMDAzMDYKLToxMDE1NTAwMDA0MUEzREYwMDAwMTAzMTMwNjFBM0RGNDAwMDAwMDAzRDUKLToxMDE1NjAwMDA0MUEzRTAwMDAwMTAzMTQwNjFBM0UwNDAwMDAwMDAzQTIKLToxMDE1NzAwMDA0MUEzRTEwMDAwMTAzMTUwNjFBM0UxNDAwMDAwMDAzNzEKLToxMDE1ODAwMDA0MUEzRTIwMDAwMTAzMTYwNjFBM0UyNDAwMDAwMDAzNDAKLToxMDE1OTAwMDA0MUEzRTMwMDAwMTAzMTcwNjFBM0UzNDAwMDAwMDAzMEYKLToxMDE1QTAwMDA0MUEzRTQwMDAwMTAzMTgwNjFBM0U0NDAwMDAwMDAzREUKLToxMDE1QjAwMDA0MUEzRTUwMDAwMTAzMTkwNjFBM0U1NDAwMDAwMDAzQUQKLToxMDE1QzAwMDA0MUEzRTYwMDAwMTAzMUEwNjFBM0U2NDAwMDAwMDAzN0MKLToxMDE1RDAwMDA0MUEzRTcwMDAwMTAzMUIwNjFBM0U3NDAwMDAwMDAzNEIKLToxMDE1RTAwMDA0MUEzRTgwMDAwMTAzMUMwNjFBM0U4NDAwMDAwMDAzMUEKLToxMDE1RjAwMDA0MUEzRTkwMDAwMTAzMUQwNjFBM0U5NDAwMDAwMDAzRTkKLToxMDE2MDAwMDA0MUEzRUEwMDAwMTAzMUUwNjFBM0VBNDAwMDAwMDAzQjcKLToxMDE2MTAwMDA0MUEzRUIwMDAwMTAzMUYwNjFBM0VCNDAwMDAwMDAzODYKLToxMDE2MjAwMDA0MUEzRUMwMDAwMTAzMjAwNjFBM0VDNDAwMDAwMDAzNTUKLToxMDE2MzAwMDA0MUEzRUQwMDAwMTAzMjEwNjFBM0VENDAwMDAwMDAzMjQKLToxMDE2NDAwMDA0MUEzRUUwMDAwMTAzMjIwNjFBM0VFNDAwMDAwMDAzRjMKLToxMDE2NTAwMDA0MUEzRUYwMDAwMTAzMjMwNjFBM0VGNDAwMDAwMDAzQzIKLToxMDE2NjAwMDA0MUEzRjAwMDAwMTAzMjQwNjFBM0YwNDAwMDAwMDAzOEYKLToxMDE2NzAwMDA0MUEzRjEwMDAwMTAzMjUwNjFBM0YxNDAwMDAwMDAzNUUKLToxMDE2ODAwMDA0MUEzRjIwMDAwMTAzMjYwNjFBM0YyNDAwMDAwMDAzMkQKLToxMDE2OTAwMDA0MUEzRjMwMDAwMTAzMjcwNjFBM0YzNDAwMDAwMDAzRkMKLToxMDE2QTAwMDA0MUEzRjQwMDAwMTAzMjgwNjFBM0Y0NDAwMDAwMDAzQ0IKLToxMDE2QjAwMDA0MUEzRjUwMDAwMTAzMjkwNjFBM0Y1NDAwMDAwMDAzOUEKLToxMDE2QzAwMDA0MUEzRjYwMDAwMTAzMkEwNjFBM0Y2NDAwMDAwMDAzNjkKLToxMDE2RDAwMDA0MUEzRjcwMDAwMTAzMkIwNjFBM0Y3NDAwMDAwMDAzMzgKLToxMDE2RTAwMDA0MUEzRjgwMDAwMTAzMkMwNjFBM0Y4NDAwMDAwMDAzMDcKLToxMDE2RjAwMDA0MUEzRjkwMDAwMTAzMkQwNjFBM0Y5NDAwMDAwMDAzRDYKLToxMDE3MDAwMDA0MUEzRkEwMDAwMTAzMkUwNjFBM0ZBNDAwMDAwMDAzQTQKLToxMDE3MTAwMDA0MUEzRkIwMDAwMTAzMkYwNjFBM0ZCNDAwMDAwMDAzNzMKLToxMDE3MjAwMDA0MUEzRkMwMDAwMTAzMzAwNjFBM0ZDNDAwMDAwMDAzNDIKLToxMDE3MzAwMDA0MUEzRkQwMDAwMTAzMzEwNjFBM0ZENDAwMDAwMDAzMTEKLToxMDE3NDAwMDA0MUEzRkUwMDAwMTAzMzIwNjFBM0ZFNDAwMDAwMDA3REMKLToxMDE3NTAwMDA0MUE0Q0IwMDAwODAzMzMwNjFBNDAwMDAwMDAwMTI0QUMKLToxMDE3NjAwMDAyMUE0OTIwMDAwMDAwMDAwNjFBMjUwMDAwMDAwMDEwOUYKLToxMDE3NzAwMDA2MUEyNTgwMDAwMDAwMTIwNjFBMDlDMDAwMDAwMDQ4NjEKLToxMDE3ODAwMDA2MUEwODAwMDAwMDAwMDIwNjFBMDgyMDAwMDAwMDEyRDUKLToxMDE3OTAwMDA0MUEyRkIwMDAwMjAzM0IwNDFBNENGMDAwMDIwMzNENzAKLToxMDE3QTAwMDA2MUE1MDAwMDAwMDAwMDQwNjFBNDQ5MDAwMDAwMTI0QUMKLToxMDE3QjAwMDAyMUE0OTI0MDAwMDAwMDAwNjFBMjU0MDAwMDAwMDEwMEIKLToxMDE3QzAwMDA2MUEyNUM4MDAwMDAwMTIwNjFBMEFFMDAwMDAwMDQ4QTgKLToxMDE3RDAwMDA2MUEwODEwMDAwMDAwMDIwNjFBMDg2ODAwMDAwMDEyMkQKLToxMDE3RTAwMDA0MUEyRkI4MDAwMjAzM0YwNDFBNENGODAwMDIwMzQxMDgKLToxMDE3RjAwMDA2MUE1MDEwMDAwMDAwMDQwMjAwQTQ2ODAwMEFGRkRDNzIKLToxMDE4MDAwMDAyMDBBMjgwMDAwMDAwMDEwMjAwQTI5NDA3MUQyOTExMUQKLToxMDE4MTAwMDAyMDBBMjk4MDAwMDAwMDAwMjAwQTI5QzAwOUMwNDI0ODgKLToxMDE4MjAwMDAyMDBBMkEwMDAwMDAwMDAwMjAwQTJBNDAwMDAwMjA5MjEKLToxMDE4MzAwMDAyMDBBNEZDRkYwMDAwMDAwMjAxMDBCNDAwMDAwMDAxNEYKLToxMDE4NDAwMDAyMDEwMEI4MDAwMDAwMDEwMjAxMDBEQzAwMDAwMDAxRkMKLToxMDE4NTAwMDAyMDEwMTAwMDAwMDAwMDEwMjAxMDEwNDAwMDAwMDAxN0EKLToxMDE4NjAwMDAyMDEwMDdDMDAzMDAwMDAwMjAxMDA4NDAwMDAwMDI4MUEKLToxMDE4NzAwMDAyMDEwMDhDMDAwMDAwMDAwMjAxMDEzMDAwMDAwMDA0QTEKLToxMDE4ODAwMDAyMDEwMjVDMDAwMDAwMDEwMjAxMDMyODAwMDAwMDAwQzgKLToxMDE4OTAwMDAyMDEwNTU0MDAwMDAwMzAwMjAxMDBDNDAwMDAwMDAxRjQKLToxMDE4QTAwMDAyMDEwMENDMDAwMDAwMDEwMjAxMDBGODAwMDAwMDAxNkMKLToxMDE4QjAwMDAyMDEwMEYwMDAwMDAwMDEwMjAxMDA4MDAwMzAwMDAwODEKLToxMDE4QzAwMDAyMDEwMDg4MDAwMDAwMjgwMjAxMDA5MDAwMDAwMDAwRDIKLToxMDE4RDAwMDAyMDEwMTM0MDAwMDAwMDQwMjAxMDJEQzAwMDAwMDAxRUEKLToxMDE4RTAwMDAyMDEwMzJDMDAwMDAwMDAwMjAxMDU2NDAwMDAwMDMwMkEKLToxMDE4RjAwMDAyMDEwMEM4MDAwMDAwMDEwMjAxMDBEMDAwMDAwMDAxNDgKLToxMDE5MDAwMDAyMDEwMEZDMDAwMDAwMDEwMjAxMDBGNDAwMDAwMDAxREYKLToxMDE5MTAwMDAyMEMxMDAwMDAwMDAwMjgwMjBDMjAwODAwMDAwQTExMzAKLToxMDE5MjAwMDAyMEMyMDBDMDAwMDBBMDAwMjBDMjAxMDAwMDAwQTA0MjcKLToxMDE5MzAwMDAyMEMyMDFDMDAwMEZGRkYwMjBDMjAyMDAwMDBGRkZGMTMKLToxMDE5NDAwMDAyMEMyMDI0MDAwMEZGRkYwMjBDMjAyODAwMDBGRkZGRjMKLToxMDE5NTAwMDAyMEMyMDM4MDAwMDAwMjAwMjBDMjAzQzAwMDAwMDIxNzYKLToxMDE5NjAwMDAyMEMyMDQwMDAwMDAwMjIwMjBDMjA0NDAwMDAwMDIzNTIKLToxMDE5NzAwMDAyMEMyMDQ4MDAwMDAwMjQwMjBDMjA0QzAwMDAwMDI1MkUKLToxMDE5ODAwMDAyMEMyMDUwMDAwMDAwMjYwMjBDMjA1NDAwMDAwMDI3MEEKLToxMDE5OTAwMDAyMEMyMDU4MDAwMDAwMjgwMjBDMjA1QzAwMDAwMDI5RTYKLToxMDE5QTAwMDAyMEMyMDYwMDAwMDAwMkEwMjBDMjA2NDAwMDAwMDJCQzIKLToxMDE5QjAwMDAyMEMyMDY4MDAwMDAwMkMwMjBDMjA2QzAwMDAwMDJEOUUKLToxMDE5QzAwMDAyMEMyMDcwMDAwMDAwMkUwMjBDMjA3NDAwMDAwMDJGN0EKLToxMDE5RDAwMDAyMEMyMDc4MDAwMDAwMTAwNjBDMjA3QzAwMDAwMDRGNTQKLToxMDE5RTAwMDAyMEMyMUI4MDAwMDAwMDEwMjBDMjFCQzAwMDAwMDAxMjMKLToxMDE5RjAwMDAyMEMyMUMwMDAwMDAwMDEwMjBDMjFDNDAwMDAwMDAxMDMKLToxMDFBMDAwMDAyMEMyMUM4MDAwMDAwMDEwMjBDMjFDQzAwMDAwMDAxRTIKLToxMDFBMTAwMDAyMEMyMUQwMDAwMDAwMDEwMjBDMjFENDAwMDAwMDAxQzIKLToxMDFBMjAwMDAyMEMyMUQ4MDAwMDAwMDEwMjBDMjFEQzAwMDAwMDAxQTIKLToxMDFBMzAwMDAyMEMyMUUwMDAwMDAwMDEwMjBDMjFFNDAwMDAwMDAxODIKLToxMDFBNDAwMDAyMEMyMUU4MDAwMDAwMDEwMjBDMjFFQzAwMDAwMDAxNjIKLToxMDFBNTAwMDAyMEMyMUYwMDAwMDAwMDEwMjBDMjFGNDAwMDAwMDAxNDIKLToxMDFBNjAwMDAyMEMyMUY4MDAwMDAwMDEwNjBDMjFGQzAwMDAwMDBGMTAKLToxMDFBNzAwMDAyMEMyMjM4MDdGRkZGRkYwMjBDMjIzQzAwMDAwMDNGNEYKLToxMDFBODAwMDAyMEMyMjQwMDdGRkZGRkYwMjBDMjI0NDAwMDAwMDBGNUYKLToxMDFBOTAwMDAxMEMyMjQ4MDAwMDAwMDAwMTBDMjI0QzAwMDAwMDAwNTQKLToxMDFBQTAwMDAxMEMyMjUwMDAwMDAwMDAwMTBDMjI1NDAwMDAwMDAwMzQKLToxMDFBQjAwMDAxMEMyMjU4MDAwMDAwMDAwMTBDMjI1QzAwMDAwMDAwMTQKLToxMDFBQzAwMDAxMEMyMjYwMDAwMDAwMDAwMTBDMjI2NDAwMDAwMDAwRjQKLToxMDFBRDAwMDAxMEMyMjY4MDAwMDAwMDAwMTBDMjI2QzAwMDAwMDAwRDQKLToxMDFBRTAwMDAxMEMyMjcwMDAwMDAwMDAwMTBDMjI3NDAwMDAwMDAwQjQKLToxMDFBRjAwMDAxMEMyMjc4MDAwMDAwMDAwMTBDMjI3QzAwMDAwMDAwOTQKLToxMDFCMDAwMDAyMEMyNEJDMDAwMDAwMDEwQzBDMjAwMDAwMDAwM0U4QzMKLToxMDFCMTAwMDBBMEMyMDAwMDAwMDAwMDEwQjBDMjAwMDAwMDAwMDBBNEQKLToxMDFCMjAwMDAyMEM0MDA4MDAwMDA1NjIwMjBDNDAwQzAwMDAwNTUxNDgKLToxMDFCMzAwMDAyMEM0MDEwMDAwMDA1NTUwMjBDNDAxNDAwMDAwNTcyMTQKLToxMDFCNDAwMDAyMEM0MDFDMDAwMEZGRkYwMjBDNDAyMDAwMDBGRkZGQzEKLToxMDFCNTAwMDAyMEM0MDI0MDAwMEZGRkYwMjBDNDAyODAwMDBGRkZGQTEKLToxMDFCNjAwMDAyMEM0MDM4MDAwMDAwNDYwMjBDNDAzQzAwMDAwMDBDMTMKLToxMDFCNzAwMDA2MEM0MDQwMDAwMDAwNUUwMjBDNDFCODAwMDAwMDAxNkQKLToxMDFCODAwMDA2MEM0MUJDMDAwMDAwMUYwMjBDNDIzODA3RkZGRkZGOUIKLToxMDFCOTAwMDAyMEM0MjNDMDAwMDAwM0YwMjBDNDI0MDA3RkZGRkZGRTYKLToxMDFCQTAwMDAyMEM0MjQ0MDAwMDAwMEYwMTBDNDI0ODAwMDAwMDAwRkIKLToxMDFCQjAwMDAxMEM0MjRDMDAwMDAwMDAwMTBDNDI1MDAwMDAwMDAwRUIKLToxMDFCQzAwMDAxMEM0MjU0MDAwMDAwMDAwMTBDNDI1ODAwMDAwMDAwQ0IKLToxMDFCRDAwMDAxMEM0MjVDMDAwMDAwMDAwMTBDNDI2MDAwMDAwMDAwQUIKLToxMDFCRTAwMDAxMEM0MjY0MDAwMDAwMDAwMTBDNDI2ODAwMDAwMDAwOEIKLToxMDFCRjAwMDAxMEM0MjZDMDAwMDAwMDAwMTBDNDI3MDAwMDAwMDAwNkIKLToxMDFDMDAwMDAxMEM0Mjc0MDAwMDAwMDAwMTBDNDI3ODAwMDAwMDAwNEEKLToxMDFDMTAwMDAxMEM0MjdDMDAwMDAwMDAwMTBDNDI4MDAwMDAwMDAwMkEKLToxMDFDMjAwMDAyMEM0NEMwMDAwMDAwMDEwQzBDNDAwMDAwMDAwM0U4NUUKLToxMDFDMzAwMDBBMEM0MDAwMDAwMDAwMDEwQjBDNDAwMDAwMDAwMDBBRUMKLToxMDFDNDAwMDA2MEQ0MDAwMDAwMDBBMDAwMjBEMDA0NDAwMDAwMDMyQjIKLToxMDFDNTAwMDAyMEQwMDhDMDIxNTAwMjAwMjBEMDA5MDAyMTUwMDIwREMKLToxMDFDNjAwMDAyMEQwMDk0MDgxMDAwMDAwMjBEMDA5ODAwMDAwMDMzREYKLToxMDFDNzAwMDAyMEQwMDlDMDAwMDAwMDIwMjBEMDBBMDAwMDAwMDAwMDgKLToxMDFDODAwMDAyMEQwMEE0MDAwMDAwMDUwMjBEMDBBODAwMDAwMDA1RTAKLToxMDFDOTAwMDA2MEQwMEFDMDAwMDAwMDIwMjBEMDBCNDAwMDAwMDAyQkUKLToxMDFDQTAwMDAyMEQwMEI4MDAwMDAwMDMwMjBEMDBCQzAwMDAwMDAyOUQKLToxMDFDQjAwMDAyMEQwMEMwMDAwMDAwMDEwMjBEMDBDODAwMDAwMDAyN0IKLToxMDFDQzAwMDAyMEQwMENDMDAwMDAwMDIwMjBEMDE1QzAwMDAwMDAxQ0EKLToxMDFDRDAwMDAyMEQwMTY0MDAwMDAwMDEwMjBEMDE2ODAwMDAwMDAyMTUKLToxMDFDRTAwMDAyMEQwMjA0MDAwMDAwMDEwMjBEMDIwQzAwMDAwMDIwQTEKLToxMDFDRjAwMDAyMEQwMjEwMDAwMDAwNDAwMjBEMDIxNDAwMDAwMDQwMUUKLToxMDFEMDAwMDAyMEQwMjIwMDAwMDAwMDMwMjBEMDIyNDAwMDAwMDE4NTIKLToxMDFEMTAwMDA2MEQwMjgwMDAwMDAwMTIwNDBEMDMwMDAwMTgwMzQzQUEKLToxMDFEMjAwMDA2MEQwMzYwMDAwMDAwMEMwMjBEMDA0QzAwMDAwMDAxRDUKLToxMDFEMzAwMDAyMEQwMDUwMDAwMDAwMDIwMjBEMDA1NDAwMDAwMDAwREYKLToxMDFENDAwMDAyMEQwMDU4MDAwMDAwMDgwNjBEMDA1QzAwMDAwMDA0QjEKLToxMDFENTAwMDAyMEQwMEM0MDAwMDAwMDQwMjBEMDExNDAwMDAwMDA5N0YKLToxMDFENjAwMDAyMEQwMTE4MDAwMDAwMjkwMjBEMDExQzAwMDAwMDBBRUMKLToxMDFENzAwMDAyMEQwMTIwMDAwMDAwMkEwMjBEMDEyNDAwMDAwMDAwRDUKLToxMDFEODAwMDAyMEQwMTI4MDAwMDAwMjAwMjBEMDEyQzAwMDAwMDAwQkYKLToxMDFEOTAwMDAyMEQwMTMwMDAwMDAwMjAwMjBEMDEzNDAwMDAwMDAwOUYKLToxMDFEQTAwMDAyMEQwMTM4MDAwMDAwMjAwMjBEMDEzQzAwMDAwMDAwN0YKLToxMDFEQjAwMDAyMEQwMTQwMDAwMDAwMjAwMjBEMDE0NDAwMDAwMDAwNUYKLToxMDFEQzAwMDAyMEQwMTQ4MDAwMDAwMjAwMjBEMDAwNDAwMDAwMDAxODcKLToxMDFERDAwMDAyMEQwMDA4MDAwMDAwMDEwMjBEMDAwQzAwMDAwMDAxQ0YKLToxMDFERTAwMDAyMEQwMDEwMDAwMDAwMDEwMjBEMDAxNDAwMDAwMDAxQUYKLToxMDFERjAwMDAyMEQwMDE4MDAwMDAwMDEwMjBEMDAxQzAwMDAwMDAxOEYKLToxMDFFMDAwMDAyMEQwMDIwMDAwMDAwMDEwMjBEMDAyNDAwMDAwMDAxNkUKLToxMDFFMTAwMDAyMEQwMDI4MDAwMDAwMDEwMjBEMDAyQzAwMDAwMDAxNEUKLToxMDFFMjAwMDAyMEQwMDMwMDAwMDAwMDEwMjBEMDAzNDAwMDAwMDAxMkUKLToxMDFFMzAwMDAyMEQwMDM4MDAwMDAwMDEwMjBEMDAzQzAwMDAwMDAxMEUKLToxMDFFNDAwMDA2MEUyMDAwMDAwMDA4MDAwMjBFMDA0QzAwMDAwMDMyQzgKLToxMDFFNTAwMDAyMEUwMDk0MDIxNTAwMjAwMjBFMDA5ODAyMTUwMDIwQzgKLToxMDFFNjAwMDAyMEUwMDlDMDAwMDAwMzAwMjBFMDBBMDA4MTAwMDAwQ0UKLToxMDFFNzAwMDAyMEUwMEE0MDAwMDAwMzMwMjBFMDBBODAwMDAwMDMwOTMKLToxMDFFODAwMDAyMEUwMEFDMDAwMDAwMzEwMjBFMDBCMDAwMDAwMDAyQTMKLToxMDFFOTAwMDAyMEUwMEI0MDAwMDAwMDQwMjBFMDBCODAwMDAwMDAwQjIKLToxMDFFQTAwMDAyMEUwMEJDMDAwMDAwMDIwMjBFMDBDMDAwMDAwMDAyOTIKLToxMDFFQjAwMDAyMEUwMEM0MDAwMDAwMDAwMjBFMDBDODAwMDAwMDAyNzQKLToxMDFFQzAwMDAyMEUwMENDMDAwMDAwMDcwMjBFMDBEMDAwMDAwMDAyNEQKLToxMDFFRDAwMDAyMEUwMEQ0MDAwMDAwMDIwMjBFMDBEODAwMDAwMDAxMzMKLToxMDFFRTAwMDAyMEUwMTQ0MDAwMDAwMDEwMjBFMDE0QzAwMDAwMDAxM0UKLToxMDFFRjAwMDAyMEUwMTUwMDAwMDAwMDIwMjBFMDIwNDAwMDAwMDAxNjgKLToxMDFGMDAwMDAyMEUwMjBDMDAwMDAwNDAwMjBFMDIxMDAwMDAwMDQwMTEKLToxMDFGMTAwMDAyMEUwMjFDMDAwMDAwMDQwMjBFMDIyMDAwMDAwMDIwM0QKLToxMDFGMjAwMDAyMEUwMjI0MDAwMDAwMEUwMjBFMDIyODAwMDAwMDFCMTgKLToxMDFGMzAwMDA2MEUwMzAwMDAwMDAwMTIwNDBFMDI4MDAwMUIwMzVCNkIKLToxMDFGNDAwMDA2MEUwMkVDMDAwMDAwMDUwMjBFMDA1NDAwMDAwMDBDMUEKLToxMDFGNTAwMDAyMEUwMDU4MDAwMDAwMEMwMjBFMDA1QzAwMDAwMDAwQTEKLToxMDFGNjAwMDAyMEUwMDYwMDAwMDAwMTAwNjBFMDA2NDAwMDAwMDA0NzUKLToxMDFGNzAwMDAyMEUwMERDMDAwMDAwMDMwMjBFMDExMDAwMDAwMDBGNDIKLToxMDFGODAwMDAyMEUwMTE0MDAwMDAwMkYwMjBFMDExODAwMDAwMDAwRDQKLToxMDFGOTAwMDAyMEUwMTFDMDAwMDAwMjAwMjBFMDAwNDAwMDAwMDAxREYKLToxMDFGQTAwMDAyMEUwMDA4MDAwMDAwMDEwMjBFMDAwQzAwMDAwMDAxRkIKLToxMDFGQjAwMDAyMEUwMDEwMDAwMDAwMDEwMjBFMDAxNDAwMDAwMDAxREIKLToxMDFGQzAwMDAyMEUwMDE4MDAwMDAwMDEwMjBFMDAxQzAwMDAwMDAxQkIKLToxMDFGRDAwMDAyMEUwMDIwMDAwMDAwMDEwMjBFMDAyNDAwMDAwMDAxOUIKLToxMDFGRTAwMDAyMEUwMDI4MDAwMDAwMDEwMjBFMDAyQzAwMDAwMDAxN0IKLToxMDFGRjAwMDAyMEUwMDMwMDAwMDAwMDEwMjBFMDAzNDAwMDAwMDAxNUIKLToxMDIwMDAwMDAyMEUwMDM4MDAwMDAwMDEwMjBFMDAzQzAwMDAwMDAxM0EKLToxMDIwMTAwMDAyMEUwMDQwMDAwMDAwMDEwMjBFMDA0NDAwMDAwMDAxMUEKLToxMDIwMjAwMDA3MzAwNDAwMDBCMDAwMDAwODMwMDc2ODAwMTMwMzc2OTIKLToxMDIwMzAwMDA3MzQwMDAwMzMyNzAwMDAwNzM0ODAwMDMyNTIwQ0NBRjYKLToxMDIwNDAwMDA3MzUwMDAwMUE4QzE5NUYwODM1MzlBMDU4Q0MwMzc4ODEKLToxMDIwNTAwMDAxMzAwMDAwMDAwMDAwMDAwMTMwMDAwNDAwMDAwMDAwMUEKLToxMDIwNjAwMDAxMzAwMDA4MDAwMDAwMDAwMTMwMDAwQzAwMDAwMDAwRkEKLToxMDIwNzAwMDAxMzAwMDEwMDAwMDAwMDAwMTMwMDAxNDAwMDAwMDAwREEKLToxMDIwODAwMDAyMzAwMDIwMDAwMDAwMDEwMjMwMDAyNDAwMDAwMDAyQTUKLToxMDIwOTAwMDAyMzAwMDI4MDAwMDAwMDMwMjMwMDAyQzAwMDAwMDAwODUKLToxMDIwQTAwMDAyMzAwMDMwMDAwMDAwMDQwMjMwMDAzNDAwMDAwMDAxNjMKLToxMDIwQjAwMDAyMzAwMDM4MDAwMDAwMDAwMjMwMDAzQzAwMDAwMDAxNDcKLToxMDIwQzAwMDAyMzAwMDQwMDAwMDAwMDQwMjMwMDA0NDAwMDAwMDAwMjQKLToxMDIwRDAwMDAyMzAwMDQ4MDAwMDAwMDEwMjMwMDA0QzAwMDAwMDAzMDQKLToxMDIwRTAwMDAyMzAwMDUwMDAwMDAwMDAwMjMwMDA1NDAwMDAwMDAxRTcKLToxMDIwRjAwMDAyMzAwMDU4MDAwMDAwMDQwMjMwMDA1QzAwMDAwMDAwQzQKLToxMDIxMDAwMDAyMzAwMDYwMDAwMDAwMDEwMjMwMDA2NDAwMDAwMDAzQTMKLToxMDIxMTAwMDAyMzAwMDY4MDAwMDAwMDAwMjMwMDA2QzAwMDAwMDAxODYKLToxMDIxMjAwMDAyMzAwMDcwMDAwMDAwMDQwMjMwMDA3NDAwMDAwMDAwNjMKLToxMDIxMzAwMDAyMzAwMDc4MDAwMDAwMDQwMjMwMDA3QzAwMDAwMDAzNDAKLToxMDIxNDAwMDA2MzAwMDgwMDAwMDAwMDIwMjMwMDBBNDAwMDAzRkZGQzMKLToxMDIxNTAwMDAyMzAwMEE4MDAwMDAzRkYwMjMwMDIyNDAwMDAwMDAwNEIKLToxMDIxNjAwMDAyMzAwMjM0MDAwMDAwMDAwMjMwMDI0QzAwMDAwMDAwODcKLToxMDIxNzAwMDAyMzAwMkU0MDAwMEZGRkYwNjMwMjAwMDAwMDAwODAwRUIKLToxMDIxODAwMDAyMzM4QkMwMDAwMDAwMDEwMjMzODAwMDAwMDAwMDFBRkYKLToxMDIxOTAwMDAyMzM4MDQwMDAwMDAwNEUwMjMzODA4MDAwMDAwMDEwQjcKLToxMDIxQTAwMDAyMzM4MEMwMDAwMDAwMjAwQzMzODMwMDAwMDdBMTIwMTAKLToxMDIxQjAwMDBBMzM4MzAwMDAwMDAxMzgwQjMzODMwMDAwMDAxMzg4Q0EKLToxMDIxQzAwMDBBMzM4MzQwMDAwMDAwMDAwQzMzODM0MDAwMDAwMUY0MTgKLToxMDIxRDAwMDBCMzM4MzQwMDAwMDAwMDUwMjMzODM4MDAwMDdBMTIwRjkKLToxMDIxRTAwMDAyMzM4M0MwMDAwMDAxRjQwNjMyMkE4ODAwMDAwMEMyRDYKLToxMDIxRjAwMDA2MzIyMDA4MDAwMDAwQzgwNjMyMjAwMDAwMDAwMDAyNUQKLToxMDIyMDAwMDA2MzIyM0U4MDAwMDAwNDAwNDMyMkU1ODAwMDQwMzdBMEUKLToxMDIyMTAwMDA2MzI1MEEwMDAwMDAwMDQwNjMyNTBCODAwMDAwMDAyNTAKLToxMDIyMjAwMDA2MzI1MDgwMDAwMDAwMDYwNDMyNTA5ODAwMDIwMzdFRkYKLToxMDIyMzAwMDA2MzI1MDAwMDAwMDAwMjAwNjMyMzAwMDAwMDAwNDAwOEEKLToxMDIyNDAwMDA2MzIxQzAwMDAwMDAwMDQwNDMyMTgzMDAwMDIwMzgwMzMKLToxMDIyNTAwMDA2MzIyNEU4MDAwMDAwQjQwMjMyMkRCMDAwMDAwMDAwNzUKLToxMDIyNjAwMDA2MzI0MDAwMDAwMDAwQjQwNjMyMzAwMDAwMDAwMDIwQkEKLToxMDIyNzAwMDA2MzIzMTAwMDAwMDAwMjAwNjMyMzIwMDAwMDAwMDIwNEIKLToxMDIyODAwMDA2MzIzMzAwMDAwMDAwMjAwNjMyMzQwMDAwMDAwMDIwMzcKLToxMDIyOTAwMDA2MzIzNTAwMDAwMDAwMjAwNjMyMzYwMDAwMDAwMDIwMjMKLToxMDIyQTAwMDA2MzIzNzAwMDAwMDAwMjAwNjMyMzgwMDAwMDAwMDIwMEYKLToxMDIyQjAwMDA2MzIzOTAwMDAwMDAwMjAwNjMyM0EwMDAwMDAwMDIwRkIKLToxMDIyQzAwMDA2MzIzQjAwMDAwMDAwMjAwNjMyM0MwMDAwMDAwMDIwRTcKLToxMDIyRDAwMDA2MzIzRDAwMDAwMDAwMjAwNjMyM0UwMDAwMDAwMDIwRDMKLToxMDIyRTAwMDA2MzIzRjAwMDAwMDAwMjAwNjMyMUMxMDAwMDAwMDAyRjEKLToxMDIyRjAwMDA2MzI0NUEwMDAwMDAwMjQwNjMyMjdCODAwMDAwMEI0RDIKLToxMDIzMDAwMDAyMzIyREI0MDAwMDAwMDAwNjMyNDJEMDAwMDAwMEI0QkEKLToxMDIzMTAwMDA2MzIzMDgwMDAwMDAwMjAwNjMyMzE4MDAwMDAwMDIwQUMKLToxMDIzMjAwMDA2MzIzMjgwMDAwMDAwMjAwNjMyMzM4MDAwMDAwMDIwOTgKLToxMDIzMzAwMDA2MzIzNDgwMDAwMDAwMjAwNjMyMzU4MDAwMDAwMDIwODQKLToxMDIzNDAwMDA2MzIzNjgwMDAwMDAwMjAwNjMyMzc4MDAwMDAwMDIwNzAKLToxMDIzNTAwMDA2MzIzODgwMDAwMDAwMjAwNjMyMzk4MDAwMDAwMDIwNUMKLToxMDIzNjAwMDA2MzIzQTgwMDAwMDAwMjAwNjMyM0I4MDAwMDAwMDIwNDgKLToxMDIzNzAwMDA2MzIzQzgwMDAwMDAwMjAwNjMyM0Q4MDAwMDAwMDIwMzQKLToxMDIzODAwMDA2MzIzRTgwMDAwMDAwMjAwNjMyM0Y4MDAwMDAwMDIwMjAKLToxMDIzOTAwMDA2MzIxQzIwMDAwMDAwMDIwNjMyNDYzMDAwMDAwMDI0RjUKLToxMDIzQTAwMDA3MjAwNDAwMDA4NzAwMDAwODIwMDc4MDAwMTAwMzgyMzcKLToxMDIzQjAwMDA3MjQwMDAwMzFBNTAwMDAwNzI0ODAwMDA4MTkwQzZBREEKLToxMDIzQzAwMDA4MjQ4RUIwNkM5MDAzODQwMTIwMDAwMDAwMDAwMDAwRkYKLToxMDIzRDAwMDAxMjAwMDA0MDAwMDAwMDAwMTIwMDAwODAwMDAwMDAwQUYKLToxMDIzRTAwMDAxMjAwMDBDMDAwMDAwMDAwMTIwMDAxMDAwMDAwMDAwOEYKLToxMDIzRjAwMDAxMjAwMDE0MDAwMDAwMDAwMjIwMDAyMDAwMDAwMDAxNjUKLToxMDI0MDAwMDAyMjAwMDI0MDAwMDAwMDIwMjIwMDAyODAwMDAwMDAzMzcKLToxMDI0MTAwMDAyMjAwMDJDMDAwMDAwMDAwMjIwMDAzMDAwMDAwMDA0MTgKLToxMDI0MjAwMDAyMjAwMDM0MDAwMDAwMDEwMjIwMDAzODAwMDAwMDAwRkIKLToxMDI0MzAwMDAyMjAwMDNDMDAwMDAwMDEwMjIwMDA0MDAwMDAwMDA0RDcKLToxMDI0NDAwMDAyMjAwMDQ0MDAwMDAwMDAwMjIwMDA0ODAwMDAwMDAxQkIKLToxMDI0NTAwMDAyMjAwMDRDMDAwMDAwMDMwMjIwMDA1MDAwMDAwMDAwOTkKLToxMDI0NjAwMDAyMjAwMDU0MDAwMDAwMDEwMjIwMDA1ODAwMDAwMDA0NzcKLToxMDI0NzAwMDAyMjAwMDVDMDAwMDAwMDAwMjIwMDA2MDAwMDAwMDAxNUIKLToxMDI0ODAwMDAyMjAwMDY0MDAwMDAwMDMwMjIwMDA2ODAwMDAwMDAwMzkKLToxMDI0OTAwMDAyMjAwMDZDMDAwMDAwMDEwMjIwMDA3MDAwMDAwMDA0MTcKLToxMDI0QTAwMDAyMjAwMDc0MDAwMDAwMDAwMjIwMDA3ODAwMDAwMDA0RjgKLToxMDI0QjAwMDAyMjAwMDdDMDAwMDAwMDMwNjIwMDA4MDAwMDAwMDAyRDMKLToxMDI0QzAwMDAyMjAwMEE0MDAwMDNGRkYwMjIwMDBBODAwMDAwM0ZGM0MKLToxMDI0RDAwMDAyMjAwMjI0MDAwMDAwMDAwMjIwMDIzNDAwMDAwMDAwNUMKLToxMDI0RTAwMDAyMjAwMjRDMDAwMDAwMDAwMjIwMDJFNDAwMDBGRkZGNzYKLToxMDI0RjAwMDA2MjAyMDAwMDAwMDA4MDAwMjIzOEJDMDAwMDAwMDAxMUQKLToxMDI1MDAwMDAyMjM4MDAwMDAwMDAwMTAwMjIzODA0MDAwMDAwMDEyMUYKLToxMDI1MTAwMDAyMjM4MDgwMDAwMDAwMzAwMjIzODBDMDAwMDAwMDBFRjMKLToxMDI1MjAwMDBDMjM4MzAwMDAwN0ExMjAwQTIzODMwMDAwMDAwMTM4NDgKLToxMDI1MzAwMDBCMjM4MzAwMDAwMDEzODgwQTIzODM0MDAwMDAwMDAwNUYKLToxMDI1NDAwMDBDMjM4MzQwMDAwMDAxRjQwQjIzODM0MDAwMDAwMDA1QUUKLToxMDI1NTAwMDAyMjM4MzgwMDAwN0ExMjAwMjIzODNDMDAwMDAwMUY0MkUKLToxMDI1NjAwMDA2MjI1MDAwMDAwMDAwNDIwNjIyMjAwODAwMDAwMEM4OTkKLToxMDI1NzAwMDA2MjIyMDAwMDAwMDAwMDIwNjIyNDAwMDAwMDAwMEM2RTMKLToxMDI1ODAwMDA0MjI0MzE4MDAwNTAzODYwNjIyNDMyQzAwMDAwMDBCOUEKLToxMDI1OTAwMDA0MjI0MzU4MDAwNTAzOEIwNjIyNDM2QzAwMDAwMDBCMDUKLToxMDI1QTAwMDA0MjI0Mzk4MDAwNTAzOTAwNjIyNDNBQzAwMDAwMDBCNzAKLToxMDI1QjAwMDA0MjI0M0Q4MDAwNTAzOTUwNjIyNDNFQzAwMDAwMDBCREIKLToxMDI1QzAwMDA0MjI0NDE4MDAwNTAzOUEwNjIyNDQyQzAwMDAwMDBCNDQKLToxMDI1RDAwMDA0MjI0NDU4MDAwNTAzOUYwNjIyNDQ2QzAwMDAwMDBCQUYKLToxMDI1RTAwMDA0MjI0NDk4MDAwNTAzQTQwNjIyNDRBQzAwMDAwMDBCMUEKLToxMDI1RjAwMDA0MjI0NEQ4MDAwNTAzQTkwNjIyNDRFQzAwMDAwMDBCODUKLToxMDI2MDAwMDA0MjI0NTE4MDAwNTAzQUUwNjIyNDUyQzAwMDAwMDBCRUQKLToxMDI2MTAwMDA0MjI0NTU4MDAwNTAzQjMwNjIyNDU2QzAwMDAwMDBCNTgKLToxMDI2MjAwMDA0MjI0NTk4MDAwNTAzQjgwNjIyNDVBQzAwMDAwMDBCQzMKLToxMDI2MzAwMDA0MjI0NUQ4MDAwNTAzQkQwNjIyNDVFQzAwMDAwMDBCMkUKLToxMDI2NDAwMDA0MjI0NjE4MDAwNTAzQzIwNjIyNDYyQzAwMDAwMDBCOTcKLToxMDI2NTAwMDA0MjI0NjU4MDAwNTAzQzcwNjIyNDY2QzAwMDAwMDBCMDIKLToxMDI2NjAwMDA0MjI0Njk4MDAwNTAzQ0MwNjIyNDZBQzAwMDAwMDBCNkQKLToxMDI2NzAwMDA0MjI0NkQ4MDAwNTAzRDEwNjIyNDZFQzAwMDAwMDBCRDgKLToxMDI2ODAwMDA0MjI0NzE4MDAwNTAzRDYwNjIyNDcyQzAwMDAwMDBCNDEKLToxMDI2OTAwMDA0MjI0NzU4MDAwNTAzREIwNjIyNDc2QzAwMDAwMDBCQUMKLToxMDI2QTAwMDA0MjI0Nzk4MDAwNTAzRTAwNjIyNDdBQzAwMDAwMDBCMTcKLToxMDI2QjAwMDA0MjI0N0Q4MDAwNTAzRTUwNjIyNDdFQzAwMDAwMDBCODIKLToxMDI2QzAwMDA0MjI0ODE4MDAwNTAzRUEwNjIyNDgyQzAwMDAwMDBCRUIKLToxMDI2RDAwMDA0MjI0ODU4MDAwNTAzRUYwNjIyNDg2QzAwMDAwMDBCNTYKLToxMDI2RTAwMDA0MjI0ODk4MDAwNTAzRjQwNjIyNDhBQzAwMDAwMDBCQzEKLToxMDI2RjAwMDA0MjI0OEQ4MDAwNTAzRjkwNjIyNDhFQzAwMDAwMDBCMkMKLToxMDI3MDAwMDA0MjI0OTE4MDAwNTAzRkUwNjIyNDkyQzAwMDAwMDBCOTQKLToxMDI3MTAwMDA0MjI0OTU4MDAwNTA0MDMwNjIyNDk2QzAwMDAwMDBCRkUKLToxMDI3MjAwMDA0MjI0OTk4MDAwNTA0MDgwNjIyNDlBQzAwMDAwMDBCNjkKLToxMDI3MzAwMDA0MjI0OUQ4MDAwNTA0MEQwNjIyNDlFQzAwMDAwMDBCRDQKLToxMDI3NDAwMDA0MjI0QTE4MDAwNTA0MTIwNjIyNEEyQzAwMDAwMDBCM0QKLToxMDI3NTAwMDA0MjI0QTU4MDAwNTA0MTcwNjIyNEE2QzAwMDAwMDBCQTgKLToxMDI3NjAwMDA0MjI0QTk4MDAwNTA0MUMwNjIyNEFBQzAwMDAwMDBCMTMKLToxMDI3NzAwMDA0MjI0QUQ4MDAwNTA0MjEwNjIyNEFFQzAwMDAwMDA1ODQKLToxMDI3ODAwMDA2MjI0QjAwMDAwMDAwMTcwNDIyNEI1QzAwMDEwNDI2QzcKLToxMDI3OTAwMDA2MjI0QjYwMDAwMDAwMDMwNDIyNEI2QzAwMDEwNDI3NUEKLToxMDI3QTAwMDA2MjIzODAwMDAwMDAwNDAwNjIyMzAwMDAwMDAwMjAwMkYKLToxMDI3QjAwMDA0MjI1MUMwMDAwNDA0MjgwNjIyMTAwMDAwMDAwMEMwQkEKLToxMDI3QzAwMDA2MjIxNUMwMDAwMDAyNDAwNDIyMUVDODAwMDgwNDJDODYKLToxMDI3RDAwMDA2MjIzOTAwMDAwMDAwMDgwMjIyNTExODAwMDAwMDAwMDMKLToxMDI3RTAwMDA2MjI1MUQwMDAwMDAwMDYwNjIyMTMwMDAwMDAwMDAyNUQKLToxMDI3RjAwMDA2MjIxNDEwMDAwMDAwMzAwNjIyMzkyMDAwMDAwMDA4RDQKLToxMDI4MDAwMDAyMjI1MTFDMDAwMDAwMDAwNjIyNTFFODAwMDAwMDA2RDAKLToxMDI4MTAwMDA2MjIxMzA4MDAwMDAwMDIwNjIyMTREMDAwMDAwMDMwMzcKLToxMDI4MjAwMDAyMTYxMDAwMDAwMDAwMjgwMjE3MDAwODAwMDAwMDAyMzUKLToxMDI4MzAwMDAyMTcwMDJDMDAwMDAwMDMwMjE3MDAzQzAwMDAwMDA0RjcKLToxMDI4NDAwMDAyMTcwMDQ0MDAwMDAwMDAwMjE3MDA0ODAwMDAwMDAyQzgKLToxMDI4NTAwMDAyMTcwMDRDMDAwMDAwOTAwMjE3MDA1MDAwMDAwMDkwOEEKLToxMDI4NjAwMDAyMTcwMDU0MDA4MDAwOTAwMjE3MDA1ODA4MTAwMDAwNjIKLToxMDI4NzAwMDAyMTcwMDYwMDAwMDAwOEEwMjE3MDA2NDAwMDAwMDgwNTgKLToxMDI4ODAwMDAyMTcwMDY4MDAwMDAwODEwMjE3MDA2QzAwMDAwMDgwNDEKLToxMDI4OTAwMDAyMTcwMDcwMDAwMDAwMDYwMjE3MDA3ODAwMDAwN0QwNDEKLToxMDI4QTAwMDAyMTcwMDdDMDAwMDA3NkMwMjE3MDAzODAwN0MxMDA0M0YKLToxMDI4QjAwMDAyMTcwMDA0MDAwMDAwMEYwNjE2NDAyNDAwMDAwMDAyNkEKLToxMDI4QzAwMDAyMTY0MDcwMDAwMDAwMUMwMjE2NDIwODAwMDAwMDAxQzEKLToxMDI4RDAwMDAyMTY0MjEwMDAwMDAwMDEwMjE2NDIyMDAwMDAwMDAxMTIKLToxMDI4RTAwMDAyMTY0MjI4MDAwMDAwMDEwMjE2NDIzMDAwMDAwMDAxREEKLToxMDI4RjAwMDAyMTY0MjM4MDAwMDAwMDEwMjE2NDI2MDAwMDAwMDAxOEEKLToxMDI5MDAwMDBDMTY0MDFDMDAwM0QwOTAwQTE2NDAxQzAwMDAwMDlDQ0UKLToxMDI5MTAwMDBCMTY0MDFDMDAwMDA5QzQwMjE2NDAzMDAwMDAwMDA4REQKLToxMDI5MjAwMDAyMTY0MDM0MDAwMDAwMEMwMjE2NDAzODAwMDAwMDEwNkYKLToxMDI5MzAwMDAyMTY0MDQ0MDAwMDAwMjAwMjE2NDAwMDAwMDAwMDAxODIKLToxMDI5NDAwMDAyMTY0MEQ4MDAwMDAwMDEwMjE2NDAwODAwMDAwMDAxRjUKLToxMDI5NTAwMDAyMTY0MDBDMDAwMDAwMDEwMjE2NDAxMDAwMDAwMDAxQTkKLToxMDI5NjAwMDAyMTY0MjQwMDAwMDAwMDAwMjE2NDI0ODAwMDAwMDAwMkIKLToxMDI5NzAwMDA2MTY0MjcwMDAwMDAwMDIwMjE2NDI1MDAwMDAwMDAwREQKLToxMDI5ODAwMDAyMTY0MjU4MDAwMDAwMDAwNjE2NDI4MDAwMDAwMDAyQjUKLToxMDI5OTAwMDAyMTY2MDA4MDAwMDA2MTQwMjE2NjAwQzAwMDAwNjAwMTMKLToxMDI5QTAwMDAyMTY2MDEwMDAwMDA2MDQwMjE2NjAxQzAwMDBGRkZGMDMKLToxMDI5QjAwMDAyMTY2MDIwMDAwMEZGRkYwMjE2NjAyNDAwMDBGRkZGRTcKLToxMDI5QzAwMDAyMTY2MDI4MDAwMEZGRkYwMjE2NjAzODAwMDAwMDIwOTkKLToxMDI5RDAwMDAyMTY2MDNDMDAwMDAwMjAwNjE2NjA0MDAwMDAwMDAyNjUKLToxMDI5RTAwMDAyMTY2MDQ4MDAwMDAwMjMwMjE2NjA0QzAwMDAwMDI0MUMKLToxMDI5RjAwMDAyMTY2MDUwMDAwMDAwMjUwMjE2NjA1NDAwMDAwMDI2RjgKLToxMDJBMDAwMDAyMTY2MDU4MDAwMDAwMjcwMjE2NjA1QzAwMDAwMDI5RDIKLToxMDJBMTAwMDAyMTY2MDYwMDAwMDAwMkEwMjE2NjA2NDAwMDAwMDJCQUQKLToxMDJBMjAwMDAyMTY2MDY4MDAwMDAwMkMwMjE2NjA2QzAwMDAwMDJEODkKLToxMDJBMzAwMDA2MTY2MDcwMDAwMDAwMTIwMjE2NjBCODAwMDAwMDAxNjcKLToxMDJBNDAwMDAyMTY2MEJDMDAwMDAwMDEwNjE2NjBDMDAwMDAwMDNFRDcKLToxMDJBNTAwMDAyMTY2MUI4MDAwMDAwMDEwNjE2NjFCQzAwMDAwMDFGRUMKLToxMDJBNjAwMDAyMTY2MjM4MDdGRkZGRkYwMjE2NjIzQzAwMDAwMDNGQkIKLToxMDJBNzAwMDAyMTY2MjQwMDdGRkZGRkYwMjE2NjI0NDAwMDAwMDBGQ0IKLToxMDJBODAwMDAxMTY2MjQ4MDAwMDAwMDAwMTE2NjI0QzAwMDAwMDAwQzAKLToxMDJBOTAwMDAxMTY2MjUwMDAwMDAwMDAwMTE2NjI1NDAwMDAwMDAwQTAKLToxMDJBQTAwMDAxMTY2MjU4MDAwMDAwMDAwMTE2NjI1QzAwMDAwMDAwODAKLToxMDJBQjAwMDAxMTY2MjYwMDAwMDAwMDAwMTE2NjI2NDAwMDAwMDAwNjAKLToxMDJBQzAwMDAxMTY2MjY4MDAwMDAwMDAwMTE2NjI2QzAwMDAwMDAwNDAKLToxMDJBRDAwMDAxMTY2MjcwMDAwMDAwMDAwMTE2NjI3NDAwMDAwMDAwMjAKLToxMDJBRTAwMDAxMTY2Mjc4MDAwMDAwMDAwMTE2NjI3QzAwMDAwMDAwMDAKLToxMDJBRjAwMDAyMTY2NEJDMDAwMDAwMDEwQzE2NjAwMDAwMDAwM0U4MzAKLToxMDJCMDAwMDBBMTY2MDAwMDAwMDAwMDEwQjE2NjAwMDAwMDAwMDBBQjkKLToxMDJCMTAwMDAyMTY4MDQwMDAwMDAwMDYwMjE2ODA0NDAwMDAwMDA1RjYKLToxMDJCMjAwMDAyMTY4MDQ4MDAwMDAwMEEwMjE2ODA0QzAwMDAwMDA1RDIKLToxMDJCMzAwMDAyMTY4MDU0MDAwMDAwMDIwMjE2ODBDQzAwMDAwMDA0M0YKLToxMDJCNDAwMDAyMTY4MEQwMDAwMDAwMDQwMjE2ODBENDAwMDAwMDA0QTkKLToxMDJCNTAwMDAyMTY4MEQ4MDAwMDAwMDQwMjE2ODBEQzAwMDAwMDA0ODkKLToxMDJCNjAwMDAyMTY4MEUwMDAwMDAwMDQwMjE2ODBFNDAwMDAwMDA0NjkKLToxMDJCNzAwMDAyMTY4MEU4MDAwMDAwMDQwMjE2ODgwNDAwMDAwMDA0MjkKLToxMDJCODAwMDAyMTY4MDMwMDAwMDAwN0MwMjE2ODAzNDAwMDAwMDNERjgKLToxMDJCOTAwMDAyMTY4MDM4MDAwMDAwM0YwMjE2ODAzQzAwMDAwMDlDQjYKLToxMDJCQTAwMDAyMTY4MEYwMDAwMDAwMDcwNjE2ODBGNDAwMDAwMDA1MDEKLToxMDJCQjAwMDAyMTY4ODBDMDEwMTAxMDEwMjE2ODEwODAwMDAwMDAwQzQKLToxMDJCQzAwMDAyMTY4MTBDMDAwMDAwMDQwMjE2ODExMDAwMDAwMDA0QUYKLToxMDJCRDAwMDAyMTY4MTE0MDAwMDAwMDIwMjE2ODgxMDA4MDEyMDA0NjkKLToxMDJCRTAwMDAyMTY4MTE4MDAwMDAwMDUwMjE2ODExQzAwMDAwMDA1NzUKLToxMDJCRjAwMDAyMTY4MTIwMDAwMDAwMDUwMjE2ODEyNDAwMDAwMDA1NTUKLToxMDJDMDAwMDAyMTY4ODJDMjAwODEwMDEwMjE2ODEyODAwMDAwMDA4RjYKLToxMDJDMTAwMDAyMTY4MTJDMDAwMDAwMDYwMjE2ODEzMDAwMDAwMDA3MTkKLToxMDJDMjAwMDAyMTY4MTM0MDAwMDAwMDAwMjE2ODgzMDAxMDEwMTIwRTQKLToxMDJDMzAwMDA2MTY4MTM4MDAwMDAwMDQwMjE2ODgzNDAxMDEwMTAxRTMKLToxMDJDNDAwMDA2MTY4MTQ4MDAwMDAwMDQwMjE2ODgzODAxMDEwMTAxQkYKLToxMDJDNTAwMDA2MTY4MTU4MDAwMDAwMDQwMjE2ODgzQzAxMDEwMTAxOUIKLToxMDJDNjAwMDA2MTY4MTY4MDAwMDAwMDMwMjE2ODE3NDAwMDAwMDAxNEUKLToxMDJDNzAwMDAyMTY4ODQwMDEwMTAxMDEwMjE2ODE3ODAwMDAwMDAxNUUKLToxMDJDODAwMDAyMTY4MTdDMDAwMDAwMDEwMjE2ODE4MDAwMDAwMDAxMTQKLToxMDJDOTAwMDAyMTY4MTg0MDAwMDAwMDEwMjE2ODg0NDAxMDEwMTAxMkUKLToxMDJDQTAwMDAyMTY4MTg4MDAwMDAwMDEwMjE2ODE4QzAwMDAwMDA0RDkKLToxMDJDQjAwMDAyMTY4MTkwMDAwMDAwMDQwMjE2ODE5NDAwMDAwMDAyQjgKLToxMDJDQzAwMDAyMTY4ODQ4MDgwMTIwMDQwMjE2ODE5ODAwMDAwMDA1QjkKLToxMDJDRDAwMDAyMTY4MTlDMDAwMDAwMDUwMjE2ODFBMDAwMDAwMDA1N0MKLToxMDJDRTAwMDAyMTY4MUE0MDAwMDAwMDUwMjE2ODgxNDIwMDgxMDAxQjUKLToxMDJDRjAwMDAyMTY4MUE4MDAwMDAwMDgwMjE2ODFBQzAwMDAwMDA2NDAKLToxMDJEMDAwMDAyMTY4MUIwMDAwMDAwMDcwMjE2ODFCNDAwMDAwMDAxMjUKLToxMDJEMTAwMDAyMTY4ODE4MDEwMTAxMjAwMjE2ODFCODAwMDAwMDAxODYKLToxMDJEMjAwMDAyMTY4MUJDMDAwMDAwMDEwMjE2ODFDMDAwMDAwMDAxRjMKLToxMDJEMzAwMDAyMTY4MUM0MDAwMDAwMDEwMjE2ODgxQzAxMDEwMTAxNzUKLToxMDJENDAwMDAyMTY4MUM4MDAwMDAwMDEwMjE2ODFDQzAwMDAwMDAxQkIKLToxMDJENTAwMDAyMTY4MUQwMDAwMDAwMDEwMjE2ODFENDAwMDAwMDAxOUIKLToxMDJENjAwMDAyMTY4ODIwMDEwMTAxMDEwMjE2ODFEODAwMDAwMDAxMkQKLToxMDJENzAwMDAyMTY4MURDMDAwMDAwMDEwMjE2ODFFMDAwMDAwMDAxNjMKLToxMDJEODAwMDAyMTY4MUU0MDAwMDAwMDEwMjE2ODgyNDAxMDEwMTAxRkQKLToxMDJEOTAwMDAyMTY4MUU4MDAwMDAwMDEwMjE2ODFFQzAwMDAwMDAxMkIKLToxMDJEQTAwMDAyMTY4MUYwMDAwMDAwMDEwMjE2ODgyODAxMDEwMTAxQ0QKLToxMDJEQjAwMDAyMTY4MjQwRkZGRjAwM0YwNjE2ODI0NDAwMDAwMDAyMTgKLToxMDJEQzAwMDAyMTY4MjRDRkZGRjAwM0YwMjE2ODI1MDAwMDAwMTAwRjUKLToxMDJERDAwMDAyMTY4MjU0MDAwMDAxMDAwNjE2ODI1ODAwMDAwMDAyMEMKLToxMDJERTAwMDAyMTY4MjYwMDAwMDAwQzAwMjE2ODI2NDAwMDAwMEMwNkIKLToxMDJERjAwMDAyMTY4MjY4MDAwMDFFMDAwMjE2ODI2QzAwMDAxRTAwOEYKLToxMDJFMDAwMDAyMTY4MjcwMDAwMDQwMDAwMjE2ODI3NDAwMDA0MDAwMkEKLToxMDJFMTAwMDAyMTY4Mjc4MDAwMDgwMDAwMjE2ODI3QzAwMDA4MDAwOEEKLToxMDJFMjAwMDAyMTY4MjgwMDAwMDIwMDAwMjE2ODI4NDAwMDAyMDAwMkEKLToxMDJFMzAwMDA2MTY4Mjg4MDAwMDAwMDcwMjE2ODJBNDAwMDAwMDAxMjYKLToxMDJFNDAwMDA2MTY4MkE4MDAwMDAwMEEwMjE2ODFGNDAwMDAwQzA4OTEKLToxMDJFNTAwMDAyMTY4MUY4MDAwMDAwNDAwMjE2ODFGQzAwMDAwMTAwMEIKLToxMDJFNjAwMDAyMTY4MjAwMDAwMDAwMjAwMjE2ODIwNDAwMDAwMDE3RjMKLToxMDJFNzAwMDAyMTY4MjA4MDAwMDAwODAwMjE2ODIwQzAwMDAwMjAwODgKLToxMDJFODAwMDAyMTY4MjEwMDAwMDAwMDAwMjE2ODIxOEZGRkYwMUZGRTgKLToxMDJFOTAwMDAyMTY4MjE0RkZGRjAxRkYwMjE2ODIzQzAwMDAwMDEzOUQKLToxMDJFQTAwMDAyMTY4MDkwMDAwMDAxM0YwMjE2ODA2MDAwMDAwMTQwODEKLToxMDJFQjAwMDAyMTY4MDY0MDAwMDAxNDAwNjE2ODA2ODAwMDAwMDAyQ0YKLToxMDJFQzAwMDAyMTY4MDcwMDAwMDAwQzAwNjE2ODA3NDAwMDAwMDA3MjMKLToxMDJFRDAwMDAyMTY4MDlDMDAwMDAwNDgwMjE2ODBBMDAwMDAwMDQ4RjYKLToxMDJFRTAwMDA2MTY4MEE0MDAwMDAwMDIwMjE2ODBBQzAwMDAwMDQ4MTQKLToxMDJFRjAwMDA2MTY4MEIwMDAwMDAwMDcwMjE2ODIzODAwMDA4MDAwMkQKLToxMDJGMDAwMDAyMTY4MjM0MDAwMDI1RTQwMjE2ODA5NDAwMDA3RkZGNDAKLToxMDJGMTAwMDAyMTY4MjIwMDAwMDAwMDcwMjE2ODIxQzAwMDAwMDA3MzMKLToxMDJGMjAwMDAyMTY4MjI4MDAwMDAwMDAwMjE2ODIyNEZGRkZGRkZGMjUKLToxMDJGMzAwMDAyMTY4MjMwMDAwMDAwMDAwMjE2ODIyQ0ZGRkZGRkZGMDUKLToxMDJGNDAwMDAyMTY4MEVDMDAwMDAwRkYwMjE0MDAwMDAwMDAwMDAxRTcKLToxMDJGNTAwMDAyMTQwMDBDMDAwMDAwMDEwMjE0MDA0MDAwMDAwMDAxRjcKLToxMDJGNjAwMDAyMTQwMDQ0MDAwMDdGRkYwMjE0MDAwQzAwMDAwMDAwNjcKLToxMDJGNzAwMDAyMTQwMDAwMDAwMDAwMDAwMjE0MDA2QzAwMDAwMDAwQjkKLToxMDJGODAwMDAyMTQwMDA0MDAwMDAwMDEwMjE0MDAzMDAwMDAwMDAxREYKLToxMDJGOTAwMDAyMTQwMDA0MDAwMDAwMDAwMjE0MDA1QzAwMDAwMDAwQTUKLToxMDJGQTAwMDAyMTQwMDA4MDAwMDAwMDEwMjE0MDAzNDAwMDAwMDAxQjcKLToxMDJGQjAwMDAyMTQwMDA4MDAwMDAwMDAwMjE0MDA2MDAwMDAwMDAwN0QKLToxMDJGQzAwMDA2MDI4MDAwMDAwMDIwMDAwMjAyMDA1ODAwMDAwMDMyQ0IKLToxMDJGRDAwMDAyMDIwMEEwMDMxNTAwMjAwMjAyMDBBNDAzMTUwMDIwMzUKLToxMDJGRTAwMDAyMDIwMEE4MDEwMDAwMzAwMjAyMDBBQzA4MTAwMDAwM0MKLToxMDJGRjAwMDAyMDIwMEIwMDAwMDAwMzMwMjAyMDBCNDAwMDAwMDMwMDIKLToxMDMwMDAwMDAyMDIwMEI4MDAwMDAwMzEwMjAyMDBCQzAwMDAwMDAzMTAKLToxMDMwMTAwMDAyMDIwMEMwMDAwMDAwMDYwMjAyMDBDNDAwMDAwMDAzMUIKLToxMDMwMjAwMDAyMDIwMEM4MDAwMDAwMDMwMjAyMDBDQzAwMDAwMDAyRkYKLToxMDMwMzAwMDAyMDIwMEQwMDAwMDAwMDAwMjAyMDBENDAwMDAwMDAyRTIKLToxMDMwNDAwMDAyMDIwMERDMDAwMDAwMDAwMjAyMDBFMDAwMDAwMDA2QjYKLToxMDMwNTAwMDAyMDIwMEU0MDAwMDAwMDQwMjAyMDBFODAwMDAwMDAyOTYKLToxMDMwNjAwMDAyMDIwMEVDMDAwMDAwMDIwMjAyMDBGMDAwMDAwMDAxNzkKLToxMDMwNzAwMDAyMDIwMEZDMDAwMDAwMDYwMjAyMDEyMDAwMDAwMDAwMjUKLToxMDMwODAwMDAyMDIwMTM0MDAwMDAwMDIwMjAyMDFCMDAwMDAwMDAxNEYKLToxMDMwOTAwMDAyMDIwMjBDMDAwMDAwMDEwMjAyMDIxNDAwMDAwMDAxMDIKLToxMDMwQTAwMDAyMDIwMjE4MDAwMDAwMDIwMjAyMDQwNDAwMDAwMDAxRjMKLToxMDMwQjAwMDAyMDIwNDBDMDAwMDAwNDAwMjAyMDQxMDAwMDAwMDQwNjQKLToxMDMwQzAwMDAyMDIwNDFDMDAwMDAwMDQwMjAyMDQyMDAwMDAwMDIwOTAKLToxMDMwRDAwMDAyMDIwNDI0MDAwMDAwMDIwMjAyMDQyODAwMDAwMDFGNzMKLToxMDMwRTAwMDA2MDIwNTAwMDAwMDAwMTIwNDAyMDQ4MDAwMjAwNDM0REYKLToxMDMwRjAwMDAyMDIwMDYwMDAwMDAwMEYwMjAyMDA2NDAwMDAwMDA3RUUKLToxMDMxMDAwMDAyMDIwMDY4MDAwMDAwMDAwMjAyMDA2QzAwMDAwMDBFRDUKLToxMDMxMTAwMDA2MDIwMDcwMDAwMDAwMDQwMjAyMDBGNDAwMDAwMDA0MzcKLToxMDMxMjAwMDAyMDIwMDA0MDAwMDAwMDEwMjAyMDAwODAwMDAwMDAxODkKLToxMDMxMzAwMDAyMDIwMDBDMDAwMDAwMDEwMjAyMDAxMDAwMDAwMDAxNjkKLToxMDMxNDAwMDAyMDIwMDE0MDAwMDAwMDEwMjAyMDAxODAwMDAwMDAxNDkKLToxMDMxNTAwMDAyMDIwMDFDMDAwMDAwMDEwMjAyMDAyMDAwMDAwMDAxMjkKLToxMDMxNjAwMDAyMDIwMDI0MDAwMDAwMDEwMjAyMDAyODAwMDAwMDAxMDkKLToxMDMxNzAwMDAyMDIwMDJDMDAwMDAwMDEwMjAyMDAzMDAwMDAwMDAxRTkKLToxMDMxODAwMDAyMDIwMDM0MDAwMDAwMDEwMjAyMDAzODAwMDAwMDAxQzkKLToxMDMxOTAwMDAyMDIwMDNDMDAwMDAwMDEwMjAyMDA0MDAwMDAwMDAxQTkKLToxMDMxQTAwMDAyMDIwMDQ0MDAwMDAwMDEwMjAyMDA0ODAwMDAwMDAxODkKLToxMDMxQjAwMDAyMDIwMDRDMDAwMDAwMDEwMjAyMDA1MDAwMDAwMDAxNjkKLToxMDMxQzAwMDAyMDIwMTA4MDAwMDAwQzgwMjAyMDExODAwMDAwMDAyMEIKLToxMDMxRDAwMDAyMDIwMUM0MDAwMDAwMDAwMjAyMDFDQzAwMDAwMDAwNTUKLToxMDMxRTAwMDAyMDIwMUQ0MDAwMDAwMDIwMjAyMDFEQzAwMDAwMDAyMjEKLToxMDMxRjAwMDAyMDIwMUU0MDAwMDAwRkYwMjAyMDFFQzAwMDAwMEZGRjcKLToxMDMyMDAwMDAyMDIwMTBDMDAwMDAwQzgwMjAyMDExQzAwMDAwMDAyQzIKLToxMDMyMTAwMDAyMDIwMUM4MDAwMDAwMDAwMjAyMDFEMDAwMDAwMDAwMEMKLToxMDMyMjAwMDAyMDIwMUQ4MDAwMDAwMDIwMjAyMDFFMDAwMDAwMDAyRDgKLToxMDMyMzAwMDAyMDIwMUU4MDAwMDAwRkYwMjAyMDFGMDAwMDAwMEZGQUUKLToxMDMyNDAwMDA3MjgwNDAwMDA4RDAwMDAwODI4MDc2ODAwMTMwNDU0QjQKLToxMDMyNTAwMDA3MkMwMDAwMzNGQzAwMDAwNzJDODAwMDM4QjIwRDAwNjIKLToxMDMyNjAwMDA3MkQwMDAwMzkxNzFCMkQwNzJEODAwMDA1RDkyOTczNjQKLToxMDMyNzAwMDA4MkQ4QTIwNEVCQzA0NTYwMTI4MDAwMDAwMDAwMDAwRTIKLToxMDMyODAwMDAxMjgwMDA0MDAwMDAwMDAwMTI4MDAwODAwMDAwMDAwRTAKLToxMDMyOTAwMDAxMjgwMDBDMDAwMDAwMDAwMTI4MDAxMDAwMDAwMDAwQzAKLToxMDMyQTAwMDAxMjgwMDE0MDAwMDAwMDAwMjI4MDAyMDAwMDAwMDAxOTYKLToxMDMyQjAwMDAyMjgwMDI0MDAwMDAwMDIwMjI4MDAyODAwMDAwMDAzNjkKLToxMDMyQzAwMDAyMjgwMDJDMDAwMDAwMDAwMjI4MDAzMDAwMDAwMDA0NEEKLToxMDMyRDAwMDAyMjgwMDM0MDAwMDAwMDEwMjI4MDAzODAwMDAwMDAwMkQKLToxMDMyRTAwMDAyMjgwMDNDMDAwMDAwMDEwMjI4MDA0MDAwMDAwMDA0MDkKLToxMDMyRjAwMDAyMjgwMDQ0MDAwMDAwMDAwMjI4MDA0ODAwMDAwMDAxRUQKLToxMDMzMDAwMDAyMjgwMDRDMDAwMDAwMDMwMjI4MDA1MDAwMDAwMDAwQ0EKLToxMDMzMTAwMDAyMjgwMDU0MDAwMDAwMDEwMjI4MDA1ODAwMDAwMDA0QTgKLToxMDMzMjAwMDAyMjgwMDVDMDAwMDAwMDAwMjI4MDA2MDAwMDAwMDAxOEMKLToxMDMzMzAwMDAyMjgwMDY0MDAwMDAwMDMwMjI4MDA2ODAwMDAwMDAwNkEKLToxMDMzNDAwMDAyMjgwMDZDMDAwMDAwMDEwMjI4MDA3MDAwMDAwMDA0NDgKLToxMDMzNTAwMDAyMjgwMDc0MDAwMDAwMDAwMjI4MDA3ODAwMDAwMDA0MjkKLToxMDMzNjAwMDAyMjgwMDdDMDAwMDAwMDMwNjI4MDA4MDAwMDAwMDAyMDQKLToxMDMzNzAwMDAyMjgwMEE0MDAwMDNGRkYwMjI4MDBBODAwMDAwM0ZGNkQKLToxMDMzODAwMDAyMjgwMjI0MDAwMDAwMDAwMjI4MDIzNDAwMDAwMDAwOEQKLToxMDMzOTAwMDAyMjgwMjRDMDAwMDAwMDAwMjI4MDJFNDAwMDBGRkZGQTcKLToxMDMzQTAwMDA2MjgyMDAwMDAwMDA4MDAwMjJCOEJDMDAwMDAwMDAxNEUKLToxMDMzQjAwMDAyMkI4MDAwMDAwMDAwMDAwMjJCODA0MDAwMDAwMDE4NUIKLToxMDMzQzAwMDAyMkI4MDgwMDAwMDAwMEMwMjJCODBDMDAwMDAwMDY2RjEKLToxMDMzRDAwMDBDMkI4MzAwMDAwN0ExMjAwQTJCODMwMDAwMDAwMTM4N0EKLToxMDMzRTAwMDBCMkI4MzAwMDAwMDEzODgwQTJCODM0MDAwMDAwMDAwOTEKLToxMDMzRjAwMDBDMkI4MzQwMDAwMDAxRjQwQjJCODM0MDAwMDAwMDA1RTAKLToxMDM0MDAwMDAyMkI4MzgwMDAwN0ExMjAwMjJCODNDMDAwMDAwMUY0NUYKLToxMDM0MTAwMDA2MkEzRDQ4MDAwMDAwMDQwNDJBM0Q1ODAwMDIwNDU4RDIKLToxMDM0MjAwMDA2MkEzRDYwMDAwMDAwMDYwNjJBMzAwMDAwMDAwMDQ4MjEKLToxMDM0MzAwMDA2MkEyMDA4MDAwMDAwQzgwNjJBMjAwMDAwMDAwMDAyMUEKLToxMDM0NDAwMDA2MkEzMTI4MDAwMDAwOEUwNjJBMzM2ODAwMDAwMDAzOTcKLToxMDM0NTAwMDA0MkEzMzc0MDAwMTA0NUEwNjJBM0E3ODAwMDAwMDAyNTQKLToxMDM0NjAwMDA0MkEzQTgwMDAwMjA0NUIwNDJBM0E3MDAwMDIwNDVERDgKLToxMDM0NzAwMDA0MkEzRTI4MDAwMjA0NUYwNDJBM0VCMDAwMDQwNDYxQ0UKLToxMDM0ODAwMDA0MkEyNTAwMDAwMjA0NjUwNjJBMjUwODAwMDAwMTAwMjAKLToxMDM0OTAwMDA2MkEyOTcwMDAwMDAwMDQwNDJBMjk2MDAwMDQwNDY3MzkKLToxMDM0QTAwMDA0MkEyRjQ4MDAwMjA0NkIwNjJBMzM3ODAwMDAwMEQ4NTMKLToxMDM0QjAwMDAyMkEzQTM4MDAwMDAwMDAwNjJBM0E4ODAwMDAwMDMyNEEKLToxMDM0QzAwMDA0MkEzRDg4MDAxMDA0NkQwNjJBNTAyMDAwMDAwMDAyRTYKLToxMDM0RDAwMDA2MkE1MDMwMDAwMDAwMDIwNjJBNTAwMDAwMDAwMDAyQjgKLToxMDM0RTAwMDA2MkE1MDEwMDAwMDAwMDIwMjJBNTBCODAwMDAwMDAxMTUKLToxMDM0RjAwMDA2MkE1MDQ4MDAwMDAwMEUwNDJBM0Q3ODAwMDIwNDdEOTAKLToxMDM1MDAwMDA2MkEzQzE4MDAwMDAwMjYwMjJBNTA0MDAwMDAwMDAwNTUKLToxMDM1MTAwMDA2MkEzNkQ4MDAwMDAwRDgwMjJBM0EzQzAwMDAwMDAwRjMKLToxMDM1MjAwMDA2MkEzQjUwMDAwMDAwMzIwNDJBM0RDODAwMTAwNDdGRTgKLToxMDM1MzAwMDA2MkE1MDI4MDAwMDAwMDIwNjJBNTAzODAwMDAwMDAyMjcKLToxMDM1NDAwMDA2MkE1MDA4MDAwMDAwMDIwNjJBNTAxODAwMDAwMDAyNTcKLToxMDM1NTAwMDAyMkE1MEJDMDAwMDAwMDEwNjJBNTA4MDAwMDAwMDBFMjQKLToxMDM1NjAwMDA0MkEzRDgwMDAwMjA0OEYwNjJBM0NCMDAwMDAwMDI2OTkKLToxMDM1NzAwMDAyMkE1MDQ0MDAwMDAwMDAwMjEwMTAwODAwMDAwMDAxNjAKLToxMDM1ODAwMDAyMTAxMDEwMDAwMDAyNjQwMjEwMTAwMDAwMDNEMDAwQUUKLToxMDM1OTAwMDAyMTAxMDA0MDAwMDAwM0QwOTEwMTgwMDAyMDAwNDkxMDAKLToxMDM1QTAwMDA5MTAxMTAwMDAxMDA2OTEwNjEwMTE0MDAwMDAwMDA4REIKLToxMDM1QjAwMDA5MTAxMTYwMDAwODA2QTEwNjEwMTE4MDAwMDAwMDAyMjkKLToxMDM1QzAwMDA5MTAxMTg4MDAwNjA2QTkwNjEwMTFBMDAwMDAwMDE4QjUKLToxMDM1RDAwMDAyMTAxMDEwMDAwMDAwMDAwNjEwMjQwMDAwMDAwMEUwOUYKLToxMDM1RTAwMDAyMTAyMDFDMDAwMDAwMDAwMjEwMjAyMDAwMDAwMDAxM0EKLToxMDM1RjAwMDAyMTAyMEMwMDAwMDAwMDEwMjEwMjAwNDAwMDAwMDAxQTEKLToxMDM2MDAwMDAyMTAyMDA4MDAwMDAwMDEwOTEwM0MwMDAwMDUwNkFGNzAKLToxMDM2MTAwMDA5MTAzQzIwMDAwNTA2QjQwOTEwMzgwMDAwMDUwNkI5NjEKLToxMDM2MjAwMDAyMTA0MDI4MDAwMDAwMTAwMjEwNDA0NDAwMDAzRkZGM0MKLToxMDM2MzAwMDAyMTA0MDU4MDAyODAwMDAwMjEwNDA4NDAwODQ5MjRBODIKLToxMDM2NDAwMDA2MTA0QzAwMDAwMDAxMDAwMjEwNDA1ODAwMDAwMDAwNkQKLToxMDM2NTAwMDA2MTA4MDY4MDAwMDAwMDQwMjEwODAwMDAwMDAxMDgwNDYKLToxMDM2NjAwMDA2MTA4MDI4MDAwMDAwMDIwMjEwODAzODAwMDAwMDEwQzAKLToxMDM2NzAwMDAyMTA4MDQwMDAwMEZGRkYwMjEwODA0NDAwMDBGRkZGQTYKLToxMDM2ODAwMDAyMTA4MDUwMDAwMDAwMDAwMjEwODEwMDAwMDAwMDAwQzUKLToxMDM2OTAwMDA2MTA4MTIwMDAwMDAwMDIwMjEwODAwODAwMDAwMkI1MjAKLToxMDM2QTAwMDAyMTA4MDEwMDAwMDAwMDAwNjEwODIwMDAwMDAwMDRBOTYKLToxMDM2QjAwMDAyMTA4MTA4MDAwMUZGRkYwNjEwODE0MDAwMDAwMDAyOTcKLToxMDM2QzAwMDAyMTA4MDAwMDAwMDFBODAwNjEwOTAwMDAwMDAwMDI0MDQKLToxMDM2RDAwMDA2MTA5MTIwMDAwMDAwNEEwNjEwOTM3MDAwMDAwMDRBNzYKLToxMDM2RTAwMDA2MTA5NUMwMDAwMDAwNEEwMjEwODAwNDAwMDAxMDgwRkYKLToxMDM2RjAwMDA2MTA4MDMwMDAwMDAwMDIwMjEwODAzQzAwMDAwMDEwMjQKLToxMDM3MDAwMDAyMTA4MDQ4MDAwMEZGRkYwMjEwODA0QzAwMDBGRkZGMDUKLToxMDM3MTAwMDAyMTA4MDU0MDAwMDAwMDAwMjEwODEwNDAwMDAwMDAwMkMKLToxMDM3MjAwMDA2MTA4MTI4MDAwMDAwMDIwMjEwODAwQzAwMDAwMkI1ODMKLToxMDM3MzAwMDAyMTA4MDE0MDAwMDAwMDAwNjEwODQwMDAwMDAwMDRBRkYKLToxMDM3NDAwMDAyMTA4MTBDMDAwMUZGRkYwNjEwODE0ODAwMDAwMDAyRkEKLToxMDM3NTAwMDAyMTA4MDA0MDAwMDFBODAwNjEwOTA5MDAwMDAwMDI0REYKLToxMDM3NjAwMDA2MTA5MjQ4MDAwMDAwNEEwNjEwOTQ5ODAwMDAwMDRBOTMKLToxMDM3NzAwMDA2MTA5NkU4MDAwMDAwNEEwMjEyMDQ5MDAwRTM4MzQwMUQKLToxMDM3ODAwMDAyMTIwNTE0MDAwMDNDMTAwMjEyMDUyMDAwMDAwMDAyODUKLToxMDM3OTAwMDAyMTIwNDk0RkZGRkZGRkYwMjEyMDQ5OEZGRkZGRkZGRDUKLToxMDM3QTAwMDAyMTIwNDlDRkZGRkZGRkYwMjEyMDRBMEZGRkZGRkZGQjUKLToxMDM3QjAwMDAyMTIwNEE0RkZGRkZGRkYwMjEyMDRBOEZGRkZGRkZGOTUKLToxMDM3QzAwMDAyMTIwNEFDRkZGRkZGRkYwMjEyMDRCMEZGRkZGRkZGNzUKLToxMDM3RDAwMDAyMTIwNEI4RkZGRkZGRkYwMjEyMDRCQ0ZGRkZGRkZGNEQKLToxMDM3RTAwMDAyMTIwNEMwRkZGRkZGRkYwMjEyMDRDNEZGRkZGRkZGMkQKLToxMDM3RjAwMDAyMTIwNEM4RkZGRkZGRkYwMjEyMDRDQ0ZGRkZGRkZGMEQKLToxMDM4MDAwMDAyMTIwNEQwRkZGRkZGRkYwMjEyMDREQ0ZGRkZGRkZGRTQKLToxMDM4MTAwMDAyMTIwNEUwRkZGRkZGRkYwMjEyMDRFNEZGRkZGRkZGQkMKLToxMDM4MjAwMDAyMTIwNEU4RkZGRkZGRkYwMjEyMDRFQ0ZGRkZGRkZGOUMKLToxMDM4MzAwMDAyMTIwNEYwRkZGRkZGRkYwMjEyMDRGNEZGRkZGRkZGN0MKLToxMDM4NDAwMDAyMTIwNEY4RkZGRkZGRkYwMjEyMDRGQ0ZGRkZGRkZGNUMKLToxMDM4NTAwMDAyMTIwNTAwRkZGRkZGRkYwMjEyMDUwNEZGRkZGRkZGM0EKLToxMDM4NjAwMDAyMTIwNTA4RkZGRkZGRkYwMjEyMDUwQ0ZGRkZGRkZGMUEKLToxMDM4NzAwMDAyMTIwNTEwRkZGRkZGRkYwMjEyMDRENEZGRkYzMzMwRDYKLToxMDM4ODAwMDAyMTIwNEQ4RkZGRjMzNDAwMjEyMDRCNEYwMDAzMDAwRUIKLToxMDM4OTAwMDAyMTIwMzkwMDAwMDAwMDgwMjEyMDM5QzAwMDAwMDA4QkUKLToxMDM4QTAwMDA2MTIwM0EwMDAwMDAwMDIwMjEyMDNCQzAwMDAwMDA0ODQKLToxMDM4QjAwMDAyMTIwM0M0MDAwMDAwMDQwMjEyMDNEMDAwMDAwMDAwNDIKLToxMDM4QzAwMDAyMTIwM0RDMDAwMDAwMDAwMjEyMDM2QzAwMDAwMDAxODEKLToxMDM4RDAwMDAyMTIwMzY4MDAwMDAwM0YwMjEyMDFCQzAwMDAwMDQwMTkKLToxMDM4RTAwMDAyMTIwMUMwMDAwMDE4MDgwMjEyMDFDNDAwMDAwODAzRkYKLToxMDM4RjAwMDAyMTIwMUM4MDAwMDA4MDMwMjEyMDFDQzAwMDAwMDQwQkYKLToxMDM5MDAwMDAyMTIwMUQwMDAwMDAwMDMwMjEyMDFENDAwMDAwODAzREIKLToxMDM5MTAwMDAyMTIwMUQ4MDAwMDA4MDMwMjEyMDFEQzAwMDAwODAzQjMKLToxMDM5MjAwMDAyMTIwMUUwMDAwMTAwMDMwMjEyMDFFNDAwMDAwODAzOUEKLToxMDM5MzAwMDAyMTIwMUU4MDAwMDA4MDMwMjEyMDFFQzAwMDAwMDAzN0IKLToxMDM5NDAwMDAyMTIwMUYwMDAwMDAwMDMwMjEyMDFGNDAwMDAwMDAzNjMKLToxMDM5NTAwMDAyMTIwMUY4MDAwMDAwMDMwMjEyMDFGQzAwMDAwMDAzNDMKLToxMDM5NjAwMDAyMTIwMjAwMDAwMDAwMDMwMjEyMDIwNDAwMDAwMDAzMjEKLToxMDM5NzAwMDAyMTIwMjA4MDAwMDAwMDMwMjEyMDIwQzAwMDAwMDAzMDEKLToxMDM5ODAwMDAyMTIwMjEwMDAwMDAwMDMwMjEyMDIxNDAwMDAwMDAzRTEKLToxMDM5OTAwMDAyMTIwMjE4MDAwMDAwMDMwMjEyMDIxQzAwMDAwMDAzQzEKLToxMDM5QTAwMDAyMTIwMjIwMDAwMDAwMDMwMjEyMDIyNDAwMDAwMDAzQTEKLToxMDM5QjAwMDAyMTIwMjI4MDAwMDI0MDMwMjEyMDIyQzAwMDAwMDJGMzEKLToxMDM5QzAwMDAyMTIwMjMwMDAwMDAwMDkwMjEyMDIzNDAwMDAwMDE5NDUKLToxMDM5RDAwMDAyMTIwMjM4MDAwMDAxODQwMjEyMDIzQzAwMDAwMTgzM0UKLToxMDM5RTAwMDAyMTIwMjQwMDAwMDAzMDYwMjEyMDI0NDAwMDAwMDE5MDUKLToxMDM5RjAwMDAyMTIwMjQ4MDAwMDAwMDYwMjEyMDI0QzAwMDAwMzA2RjgKLToxMDNBMDAwMDAyMTIwMjUwMDAwMDAzMDYwMjEyMDI1NDAwMDAwMzA2RDQKLToxMDNBMTAwMDAyMTIwMjU4MDAwMDBDODYwMjEyMDI1QzAwMDAwMzA2MkIKLToxMDNBMjAwMDAyMTIwMjYwMDAwMDAzMDYwMjEyMDI2NDAwMDAwMDA2OTcKLToxMDNBMzAwMDAyMTIwMjY4MDAwMDAwMDYwMjEyMDI2QzAwMDAwMDA2N0EKLToxMDNBNDAwMDAyMTIwMjcwMDAwMDAwMDYwMjEyMDI3NDAwMDAwMDA2NUEKLToxMDNBNTAwMDAyMTIwMjc4MDAwMDAwMDYwMjEyMDI3QzAwMDAwMDA2M0EKLToxMDNBNjAwMDAyMTIwMjgwMDAwMDAwMDYwMjEyMDI4NDAwMDAwMDA2MUEKLToxMDNBNzAwMDAyMTIwMjg4MDAwMDAwMDYwMjEyMDI4QzAwMDAwMDA2RkEKLToxMDNBODAwMDAyMTIwMjkwMDAwMDAwMDYwMjEyMDI5NDAwMDAwMDA2REEKLToxMDNBOTAwMDAyMTIwMjk4MDAwMDAwMDYwMjEyMDI5QzAwMDAwMDA2QkEKLToxMDNBQTAwMDAyMTIwMkEwMDAwMDAzMDYwMjEyMDJBNDAwMDAwMDEzOEEKLToxMDNBQjAwMDAyMTIwMkE4MDAwMDAwMDYwMjEyMDJCMDAwMDAxMDA0NjgKLToxMDNBQzAwMDAyMTIwMkI0MDAwMDEwMDQwMjEyMDMyNDAwMTA2NDQwMjkKLToxMDNBRDAwMDAyMTIwMzI4MDAxMDY0NDAwMjEyMDFCMDAwMDAwMDAxMkQKLToxMDNBRTAwMDA2MDBBMDAwMDAwMDAwMTYwMjAwQTA2Q0JGNUMwMDAwRjEKLToxMDNBRjAwMDAyMDBBMDcwRkZGNTFGRUYwMjAwQTA3NDAwMDBGRkZGOUUKLToxMDNCMDAwMDAyMDBBMDc4RjAwMDAzRTAwMjAwQTA3QzAwMDAwMDAwQUEKLToxMDNCMTAwMDAyMDBBMDgwMDAwMEEwMDAwNjAwQTA4NDAwMDAwMDA1QjQKLToxMDNCMjAwMDAyMDBBMDk4MEZFMDAwMDAwNjAwQTA5QzAwMDAwMDE0MTYKLToxMDNCMzAwMDAyMDBBMEVDNTU1NDAwMDAwMjAwQTBGMDU1NTU1NTU1NjgKLToxMDNCNDAwMDAyMDBBMEY0MDAwMDU1NTUwMjAwQTBGOEYwMDAwMDAwQUIKLToxMDNCNTAwMDAyMDBBMEZDNTU1NDAwMDAwMjAwQTEwMDU1NTU1NTU1MjcKLToxMDNCNjAwMDAyMDBBMTA0MDAwMDU1NTUwMjAwQTEwOEYwMDAwMDAwNjkKLToxMDNCNzAwMDA2MDBBMjJDMDAwMDAwMDQwMjAwQTA2MDAwMDAwMzA3NjEKLToxMDNCODAwMDAyMDBBMTBDQkY1QzAwMDAwMjAwQTExMEZGRjUxRkVGQjYKLToxMDNCOTAwMDAyMDBBMTE0MDAwMEZGRkYwMjAwQTExOEYwMDAwM0UwRTIKLToxMDNCQTAwMDAyMDBBMTFDMDAwMDAwMDAwMjAwQTEyMDAwMDBBMDAwRjMKLToxMDNCQjAwMDA2MDBBMTI0MDAwMDAwMDUwMjAwQTEzODBGRTAwMDAwNkIKLToxMDNCQzAwMDA2MDBBMTNDMDAwMDAwMTQwMjAwQTE4QzU1NTQwMDAwMjYKLToxMDNCRDAwMDAyMDBBMTkwNTU1NTU1NTUwMjAwQTE5NDAwMDA1NTU1N0QKLToxMDNCRTAwMDAyMDBBMTk4RjAwMDAwMDAwMjAwQTE5QzU1NTQwMDAwQzIKLToxMDNCRjAwMDAyMDBBMUEwNTU1NTU1NTUwMjAwQTFBNDAwMDA1NTU1M0QKLToxMDNDMDAwMDAyMDBBMUE4RjAwMDAwMDAwNjAwQTIzQzAwMDAwMDA0OTEKLToxMDNDMTAwMDAyMDBBMDY0MDAwMDAzMDcwMDAwMDAwMDAwMDAwMDAwOTQKLToxMDNDMjAwMDAwMDAwMDJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjYKLToxMDNDMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODQKLToxMDNDNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzQKLToxMDNDNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjQKLToxMDNDNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTQKLToxMDNDNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDJFMDA0RDAwMDAwMDAwQzkKLToxMDNDODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzQKLToxMDNDOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjQKLToxMDNDQTAwMDAwMDAwMDAwMDA0RDAwOEIwMDAwMDAwMDAwMDAwMDAwM0MKLToxMDNDQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQKLToxMDNDQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjQKLToxMDNDRDAwMDAwOEIwMDkwMDA5MDAwOTQwMDk0MDA5ODAwMDAwMDAwNzkKLToxMDNDRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDQKLToxMDNDRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTgwMkRFNEMKLToxMDNEMDAwMDAyREUwMkU4MDJFODAyRjIwMDAwMDAwMDAwMDAwMDAwMEIKLToxMDNEMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTMKLToxMDNEMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTMKLToxMDNEMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODMKLToxMDNENDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzMKLToxMDNENTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjMKLToxMDNENjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTMKLToxMDNENzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDMKLToxMDNEODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzMKLToxMDNEOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjMKLToxMDNEQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTMKLToxMDNEQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMKLToxMDNEQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjMKLToxMDNERDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYyMDJGQTAwMDAwMDAwRjMKLToxMDNERTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDMKLToxMDNERjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzMKLToxMDNFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjIKLToxMDNFMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTIKLToxMDNFMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTIKLToxMDNFMzAwMDAyRkEwMkZGMDJGRjAzMEEwMzBBMDMxNTAwMDAwMDAwNTIKLToxMDNFNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzIKLToxMDNFNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjIKLToxMDNFNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTIKLToxMDNFNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDIKLToxMDNFODAwMDAwMDAwMDAwMDAwMDAwMDAwMzE1MDMxNjAwMDAwMDAwMDEKLToxMDNFOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjIKLToxMDNFQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIKLToxMDNFQjAwMDAwMDAwMDAwMDMxNjAzNTcwMDAwMDAwMDAwMDAwMDAwOEYKLToxMDNFQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjIKLToxMDNFRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTIKLToxMDNFRTAwMDAzNTcwMzdCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkEKLToxMDNFRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzIKLToxMDNGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzN0IwM0JCNzUKLToxMDNGMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTEKLToxMDNGMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTEKLToxMDNGMzAwMDAwMDAwMDAwMDAwMDAwMDAwM0JCMDNGNzAwMDAwMDAwQzkKLToxMDNGNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzEKLToxMDNGNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjEKLToxMDNGNjAwMDAwMDAwMDAwMDNGNzA0M0QwNDNEMDQ1MjA0NTIwNDY3QkUKLToxMDNGNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDEKLToxMDNGODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzEKLToxMDNGOTAwMDA0NjcwNEVEMDRFRDA0RjIwNEYyMDRGNzAwMDAwMDAwRUQKLToxMDNGQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEKLToxMDNGQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RjcwNEY4MEEKLToxMDNGQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjEKLToxMDNGRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTEKLToxMDNGRTAwMDAwMDAwMDAwMDAwMDAwMDAwNEY4MDUwQTAwMDAwMDAwQzYKLToxMDNGRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzEKLToxMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjAKLToxMDQwMTAwMDAwMDAwMDAwMDUwQTA1MUYwNTFGMDUyMjA1MjIwNTI1RDEKLToxMDQwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTAKLToxMDQwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAKLToxMDQwNDAwMDA1MjUwNTU1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUMKLToxMDQwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAKLToxMDQwNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NTUwNURDMTUKLToxMDQwNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAKLToxMDQwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzAKLToxMDQwOTAwMDAwMDAwMDAwMDAwMDAwMDAwNURDMDVFMzA1RTMwNUU3ODMKLToxMDQwQTAwMDA1RTcwNUVCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzQKLToxMDQwQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLToxMDQwQzAwMDAwMDAwMDAwMDVFQjA2MkIwNjJCMDYzMzA2MzMwNjNCRUIKLToxMDQwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTAKLToxMDQwRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDAKLToxMDQwRjAwMDA2M0IwNjg4MDY4ODA2OTUwNjk1MDZBMjAwMDAwMDAwODUKLToxMDQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUYKLToxMDQxMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QTIwNkFFNDMKLToxMDQxMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEYKLToxMDQxMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0YKLToxMDQxNDAwMDAwMDAwMDAwMDAwMDAwMDAwNkFFMDZCNDAwMDAwMDAwMDEKLToxMDQxNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUYKLToxMDQxNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEYKLToxMDQxNzAwMDAwMDAwMDAwMDZCNDA2QjcwMDAwMDAwMDAwMDAwMDAwQzgKLToxMDQxODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYKLToxMDQxOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUYKLToxMDQxQTAwMDA2QjcwNkJEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEYKLToxMDQxQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkYKLToxMDQxQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QkQwNkJFNjgKLToxMDQxRDAwMDA2QkUwNkQwMDZEMDA2RTIwMDAwMDAwMDAwMDAwMDAwODcKLToxMDQxRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0YKLToxMDQxRjAwMDAwMDAwMDAwMDAwMDAwMDAwNkUyMDc0RjAwMDAwMDAwODEKLToxMDQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUUKLToxMDQyMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUUKLToxMDQyMjAwMDAwMDAwMDAwMDc0RjA3NTAwNzUwMDc2MzA3NjMwNzc2MzkKLToxMDQyMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0UKLToxMDQyNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkUKLToxMDQyNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUUKLToxMDQyNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEUKLToxMDQyNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0UKLToxMDQyODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkUKLToxMDQyOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUKLToxMDQyQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUKLToxMDQyQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkUKLToxMDQyQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUUKLToxMDQyRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREUKLToxMDQyRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UKLToxMDQyRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkUKLToxMDQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUQKLToxMDQzMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUQKLToxMDQzMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEQKLToxMDQzMzAwMDAwMDEwMDAwMDAwMjA0QzAwMDAzMDk4MDAwMDQwRTQwRDgKLToxMDQzNDAwMDAwMDUxMzAwMDAwNjE3QzAwMDA3MUM4MDAwMDgyMTQwNkMKLToxMDQzNTAwMDAwMDkyNjAwMDAwQTJBQzAwMDBCMkY4MDAwMEMzNDQwMDAKLToxMDQzNjAwMDAwMEQzOTAwMDAwRTNEQzAwMDBGNDI4MDAwMTA0NzQwOTQKLToxMDQzNzAwMDAwMTE0QzAwMDAxMjUwQzAwMDEzNTU4MDAwMTQ1QTQwMjgKLToxMDQzODAwMDAwMTU1RjAwMDAxNjYzQzAwMDE3Njg4MDAwMTg2RDQwQkMKLToxMDQzOTAwMDAwMTk3MjAwMDAxQTc2QzAwMDFCN0I4MDAwMUM4MDQwNTAKLToxMDQzQTAwMDAwMUQ4NTAwMDAxRTg5QzAwMDFGOEU4MDAwMDA5MzQwMDQKLToxMDQzQjAwMDAwMDAyMDAwMDAwMDQwMDAwMDAwNjAwMDAwMDA4MDAwQkQKLToxMDQzQzAwMDAwMDBBMDAwMDAwMEMwMDAwMDAwRTAwMDAwMDEwMDAwQUMKLToxMDQzRDAwMDAwMDEyMDAwMDAwMTQwMDAwMDAxNjAwMDAwMDE4MDAwOTkKLToxMDQzRTAwMDAwMDFBMDAwMDAwMUMwMDAwMDAxRTAwMDAwMDIwMDAwODgKLToxMDQzRjAwMDAwMDIyMDAwMDAwMjQwMDAwMDAyNjAwMDAwMDI4MDAwNzUKLToxMDQ0MDAwMDAwMDJBMDAwMDAwMkMwMDAwMDAyRTAwMDAwMDMwMDAwNjMKLToxMDQ0MTAwMDAwMDMyMDAwMDAwMzQwMDAwMDAzNjAwMDAwMDM4MDAwNTAKLToxMDQ0MjAwMDAwMDNBMDAwMDAwM0MwMDAwMDAzRTAwMDAwMDQwMDAwM0YKLToxMDQ0MzAwMDAwMDQyMDAwMDAwNDQwMDAwMDA0NjAwMDAwMDQ4MDAwMkMKLToxMDQ0NDAwMDAwMDRBMDAwMDAwNEMwMDAwMDA0RTAwMDAwMDUwMDAwMUIKLToxMDQ0NTAwMDAwMDUyMDAwMDAwNTQwMDAwMDA1NjAwMDAwMDU4MDAwMDgKLToxMDQ0NjAwMDAwMDVBMDAwMDAwNUMwMDAwMDA1RTAwMDAwMDYwMDAwRjcKLToxMDQ0NzAwMDAwMDYyMDAwMDAwNjQwMDAwMDA2NjAwMDAwMDY4MDAwRTQKLToxMDQ0ODAwMDAwMDZBMDAwMDAwNkMwMDAwMDA2RTAwMDAwMDcwMDAwRDMKLToxMDQ0OTAwMDAwMDcyMDAwMDAwNzQwMDAwMDA3NjAwMDAwMDc4MDAwQzAKLToxMDQ0QTAwMDAwMDdBMDAwMDAwN0MwMDAwMDA3RTAwMDAwMDgwMDAwQUYKLToxMDQ0QjAwMDAwMDgyMDAwMDAwODQwMDAwMDA4NjAwMDAwMDg4MDAwOUMKLToxMDQ0QzAwMDAwMDhBMDAwMDAwOEMwMDAwMDA4RTAwMDAwMDkwMDAwOEIKLToxMDQ0RDAwMDAwMDkyMDAwMDAwOTQwMDAwMDA5NjAwMDAwMDk4MDAwNzgKLToxMDQ0RTAwMDAwMDlBMDAwMDAwOUMwMDAwMDA5RTAwMDAwMEEwMDAwNjcKLToxMDQ0RjAwMDAwMEEyMDAwMDAwQTQwMDAwMDBBNjAwMDAwMEE4MDAwNTQKLToxMDQ1MDAwMDAwMEFBMDAwMDAwQUMwMDAwMDBBRTAwMDAwMEIwMDAwNDIKLToxMDQ1MTAwMDAwMEIyMDAwMDAwQjQwMDAwMDBCNjAwMDAwMEI4MDAwMkYKLToxMDQ1MjAwMDAwMEJBMDAwMDAwQkMwMDAwMDBCRTAwMDAwMEMwMDAwMUUKLToxMDQ1MzAwMDAwMEMyMDAwMDAwQzQwMDAwMDBDNjAwMDAwMEM4MDAwMEIKLToxMDQ1NDAwMDAwMENBMDAwMDAwQ0MwMDAwMDBDRTAwMDAwMEQwMDAwRkEKLToxMDQ1NTAwMDAwMEQyMDAwMDAwRDQwMDAwMDBENjAwMDAwMEQ4MDAwRTcKLToxMDQ1NjAwMDAwMERBMDAwMDAwREMwMDAwMDBERTAwMDAwMEUwMDAwRDYKLToxMDQ1NzAwMDAwMEUyMDAwMDAwRTQwMDAwMDBFNjAwMDAwMEU4MDAwQzMKLToxMDQ1ODAwMDAwMEVBMDAwMDAwRUMwMDAwMDBFRTAwMDAwMEYwMDAwQjIKLToxMDQ1OTAwMDAwMEYyMDAwMDAwRjQwMDAwMDBGNjAwMDAwMEY4MDAwOUYKLToxMDQ1QTAwMDAwMEZBMDAwMDAwRkMwMDAwMDBGRTAwMDAwMTAwMDAwOEUKLToxMDQ1QjAwMDAwMTAyMDAwMDAxMDQwMDAwMDEwNjAwMDAwMTA4MDAwN0IKLToxMDQ1QzAwMDAwMTBBMDAwMDAxMEMwMDAwMDEwRTAwMDAwMTEwMDAwNkEKLToxMDQ1RDAwMDAwMTEyMDAwMDAxMTQwMDAwMDExNjAwMDAwMTE4MDAwNTcKLToxMDQ1RTAwMDAwMTFBMDAwMDAxMUMwMDAwMDExRTAwMDAwMTIwMDAwNDYKLToxMDQ1RjAwMDAwMTIyMDAwMDAxMjQwMDAwMDEyNjAwMDAwMTI4MDAwMzMKLToxMDQ2MDAwMDAwMTJBMDAwMDAxMkMwMDAwMDEyRTAwMDAwMTMwMDAwMjEKLToxMDQ2MTAwMDAwMTMyMDAwMDAxMzQwMDAwMDEzNjAwMDAwMTM4MDAwMEUKLToxMDQ2MjAwMDAwMTNBMDAwMDAxM0MwMDAwMDEzRTAwMDAwMTQwMDAwRkQKLToxMDQ2MzAwMDAwMTQyMDAwMDAxNDQwMDAwMDE0NjAwMDAwMTQ4MDAwRUEKLToxMDQ2NDAwMDAwMTRBMDAwMDAxNEMwMDAwMDE0RTAwMDAwMTUwMDAwRDkKLToxMDQ2NTAwMDAwMTUyMDAwMDAxNTQwMDAwMDE1NjAwMDAwMTU4MDAwQzYKLToxMDQ2NjAwMDAwMTVBMDAwMDAxNUMwMDAwMDE1RTAwMDAwMTYwMDAwQjUKLToxMDQ2NzAwMDAwMTYyMDAwMDAxNjQwMDAwMDE2NjAwMDAwMTY4MDAwQTIKLToxMDQ2ODAwMDAwMTZBMDAwMDAxNkMwMDAwMDE2RTAwMDAwMTcwMDAwOTEKLToxMDQ2OTAwMDAwMTcyMDAwMDAxNzQwMDAwMDE3NjAwMDAwMTc4MDAwN0UKLToxMDQ2QTAwMDAwMTdBMDAwMDAxN0MwMDAwMDE3RTAwMDAwMTgwMDAwNkQKLToxMDQ2QjAwMDAwMTgyMDAwMDAxODQwMDAwMDE4NjAwMDAwMTg4MDAwNUEKLToxMDQ2QzAwMDAwMThBMDAwMDAxOEMwMDAwMDE4RTAwMDAwMTkwMDAwNDkKLToxMDQ2RDAwMDAwMTkyMDAwMDAxOTQwMDAwMDE5NjAwMDAwMTk4MDAwMzYKLToxMDQ2RTAwMDAwMTlBMDAwMDAxOUMwMDAwMDE5RTAwMDAwMUEwMDAwMjUKLToxMDQ2RjAwMDAwMUEyMDAwMDAxQTQwMDAwMDFBNjAwMDAwMUE4MDAwMTIKLToxMDQ3MDAwMDAwMUFBMDAwMDAxQUMwMDAwMDFBRTAwMDAwMUIwMDAwMDAKLToxMDQ3MTAwMDAwMUIyMDAwMDAxQjQwMDAwMDFCNjAwMDAwMUI4MDAwRUQKLToxMDQ3MjAwMDAwMUJBMDAwMDAxQkMwMDAwMDFCRTAwMDAwMUMwMDAwREMKLToxMDQ3MzAwMDAwMUMyMDAwMDAxQzQwMDAwMDFDNjAwMDAwMUM4MDAwQzkKLToxMDQ3NDAwMDAwMUNBMDAwMDAxQ0MwMDAwMDFDRTAwMDAwMUQwMDAwQjgKLToxMDQ3NTAwMDAwMUQyMDAwMDAxRDQwMDAwMDFENjAwMDAwMUQ4MDAwQTUKLToxMDQ3NjAwMDAwMURBMDAwMDAxREMwMDAwMDFERTAwMDAwMUUwMDAwOTQKLToxMDQ3NzAwMDAwMUUyMDAwMDAxRTQwMDAwMDFFNjAwMDAwMUU4MDAwODEKLToxMDQ3ODAwMDAwMUVBMDAwMDAxRUMwMDAwMDFFRTAwMDAwMUYwMDAwNzAKLToxMDQ3OTAwMDAwMUYyMDAwMDAxRjQwMDAwMDFGNjAwMDAwMUY4MDAwNUQKLToxMDQ3QTAwMDAwMUZBMDAwMDAxRkMwMDAwMDFGRTAwMDAwMjAwMDAwNEMKLToxMDQ3QjAwMDAwMjAyMDAwMDAyMDQwMDAwMDIwNjAwMDAwMjA4MDAwMzkKLToxMDQ3QzAwMDAwMjBBMDAwMDAyMEMwMDAwMDIwRTAwMDAwMjEwMDAwMjgKLToxMDQ3RDAwMDAwMjEyMDAwMDAyMTQwMDAwMDIxNjAwMDAwMjE4MDAwMTUKLToxMDQ3RTAwMDAwMjFBMDAwMDAyMUMwMDAwMDIxRTAwMDAwMjIwMDAwMDQKLToxMDQ3RjAwMDAwMjIyMDAwMDAyMjQwMDAwMDIyNjAwMDAwMjI4MDAwRjEKLToxMDQ4MDAwMDAwMjJBMDAwMDAyMkMwMDAwMDIyRTAwMDAwMjMwMDAwREYKLToxMDQ4MTAwMDAwMjMyMDAwMDAyMzQwMDAwMDIzNjAwMDAwMjM4MDAwQ0MKLToxMDQ4MjAwMDAwMjNBMDAwMDAyM0MwMDAwMDIzRTAwMDAwMjQwMDAwQkIKLToxMDQ4MzAwMDAwMjQyMDAwMDAyNDQwMDAwMDI0NjAwMDAwMjQ4MDAwQTgKLToxMDQ4NDAwMDAwMjRBMDAwMDAyNEMwMDAwMDI0RTAwMDAwMjUwMDAwOTcKLToxMDQ4NTAwMDAwMjUyMDAwMDAyNTQwMDAwMDI1NjAwMDAwMjU4MDAwODQKLToxMDQ4NjAwMDAwMjVBMDAwMDAyNUMwMDAwMDI1RTAwMDAwMjYwMDAwNzMKLToxMDQ4NzAwMDAwMjYyMDAwMDAyNjQwMDAwMDI2NjAwMDAwMjY4MDAwNjAKLToxMDQ4ODAwMDAwMjZBMDAwMDAyNkMwMDAwMDI2RTAwMDAwMjcwMDAwNEYKLToxMDQ4OTAwMDAwMjcyMDAwMDAyNzQwMDAwMDI3NjAwMDAwMjc4MDAwM0MKLToxMDQ4QTAwMDAwMjdBMDAwMDAyN0MwMDAwMDI3RTAwMDAwMjgwMDAwMkIKLToxMDQ4QjAwMDAwMjgyMDAwMDAyODQwMDAwMDI4NjAwMDAwMjg4MDAwMTgKLToxMDQ4QzAwMDAwMjhBMDAwMDAyOEMwMDAwMDI4RTAwMDAwMjkwMDAwMDcKLToxMDQ4RDAwMDAwMjkyMDAwMDAyOTQwMDAwMDI5NjAwMDAwMjk4MDAwRjQKLToxMDQ4RTAwMDAwMjlBMDAwMDAyOUMwMDAwMDI5RTAwMDAwMkEwMDAwRTMKLToxMDQ4RjAwMDAwMkEyMDAwMDAyQTQwMDAwMDJBNjAwMDAwMkE4MDAwRDAKLToxMDQ5MDAwMDAwMkFBMDAwMDAyQUMwMDAwMDJBRTAwMDAwMkIwMDAwQkUKLToxMDQ5MTAwMDAwMkIyMDAwMDAyQjQwMDAwMDJCNjAwMDAwMkI4MDAwQUIKLToxMDQ5MjAwMDAwMkJBMDAwMDAyQkMwMDAwMDJCRTAwMDAwMkMwMDAwOUEKLToxMDQ5MzAwMDAwMkMyMDAwMDAyQzQwMDAwMDJDNjAwMDAwMkM4MDAwODcKLToxMDQ5NDAwMDAwMkNBMDAwMDAyQ0MwMDAwMDJDRTAwMDAwMkQwMDAwNzYKLToxMDQ5NTAwMDAwMkQyMDAwMDAyRDQwMDAwMDJENjAwMDAwMkQ4MDAwNjMKLToxMDQ5NjAwMDAwMkRBMDAwMDAyREMwMDAwMDJERTAwMDAwMkUwMDAwNTIKLToxMDQ5NzAwMDAwMkUyMDAwMDAyRTQwMDAwMDJFNjAwMDAwMkU4MDAwM0YKLToxMDQ5ODAwMDAwMkVBMDAwMDAyRUMwMDAwMDJFRTAwMDAwMkYwMDAwMkUKLToxMDQ5OTAwMDAwMkYyMDAwMDAyRjQwMDAwMDJGNjAwMDAwMkY4MDAwMUIKLToxMDQ5QTAwMDAwMkZBMDAwMDAyRkMwMDAwMDJGRTAwMDAwMzAwMDAwMEEKLToxMDQ5QjAwMDAwMzAyMDAwMDAzMDQwMDAwMDMwNjAwMDAwMzA4MDAwRjcKLToxMDQ5QzAwMDAwMzBBMDAwMDAzMEMwMDAwMDMwRTAwMDAwMzEwMDAwRTYKLToxMDQ5RDAwMDAwMzEyMDAwMDAzMTQwMDAwMDMxNjAwMDAwMzE4MDAwRDMKLToxMDQ5RTAwMDAwMzFBMDAwMDAzMUMwMDAwMDMxRTAwMDAwMzIwMDAwQzIKLToxMDQ5RjAwMDAwMzIyMDAwMDAzMjQwMDAwMDMyNjAwMDAwMzI4MDAwQUYKLToxMDRBMDAwMDAwMzJBMDAwMDAzMkMwMDAwMDMyRTAwMDAwMzMwMDAwOUQKLToxMDRBMTAwMDAwMzMyMDAwMDAzMzQwMDAwMDMzNjAwMDAwMzM4MDAwOEEKLToxMDRBMjAwMDAwMzNBMDAwMDAzM0MwMDAwMDMzRTAwMDAwMzQwMDAwNzkKLToxMDRBMzAwMDAwMzQyMDAwMDAzNDQwMDAwMDM0NjAwMDAwMzQ4MDAwNjYKLToxMDRBNDAwMDAwMzRBMDAwMDAzNEMwMDAwMDM0RTAwMDAwMzUwMDAwNTUKLToxMDRBNTAwMDAwMzUyMDAwMDAzNTQwMDAwMDM1NjAwMDAwMzU4MDAwNDIKLToxMDRBNjAwMDAwMzVBMDAwMDAzNUMwMDAwMDM1RTAwMDAwMzYwMDAwMzEKLToxMDRBNzAwMDAwMzYyMDAwMDAzNjQwMDAwMDM2NjAwMDAwMzY4MDAwMUUKLToxMDRBODAwMDAwMzZBMDAwMDAzNkMwMDAwMDM2RTAwMDAwMzcwMDAwMEQKLToxMDRBOTAwMDAwMzcyMDAwMDAzNzQwMDAwMDM3NjAwMDAwMzc4MDAwRkEKLToxMDRBQTAwMDAwMzdBMDAwMDAzN0MwMDAwMDM3RTAwMDAwMzgwMDAwRTkKLToxMDRBQjAwMDAwMzgyMDAwMDAzODQwMDAwMDM4NjAwMDAwMzg4MDAwRDYKLToxMDRBQzAwMDAwMzhBMDAwMDAzOEMwMDAwMDM4RTAwMDAwMzkwMDAwQzUKLToxMDRBRDAwMDAwMzkyMDAwMDAzOTQwMDAwMDM5NjAwMDAwMzk4MDAwQjIKLToxMDRBRTAwMDAwMzlBMDAwMDAzOUMwMDAwMDM5RTAwMDAwM0EwMDAwQTEKLToxMDRBRjAwMDAwM0EyMDAwMDAzQTQwMDAwMDNBNjAwMDAwM0E4MDAwOEUKLToxMDRCMDAwMDAwM0FBMDAwMDAzQUMwMDAwMDNBRTAwMDAwM0IwMDAwN0MKLToxMDRCMTAwMDAwM0IyMDAwMDAzQjQwMDAwMDNCNjAwMDAwM0I4MDAwNjkKLToxMDRCMjAwMDAwM0JBMDAwMDAzQkMwMDAwMDNCRTAwMDAwM0MwMDAwNTgKLToxMDRCMzAwMDAwM0MyMDAwMDAzQzQwMDAwMDNDNjAwMDAwM0M4MDAwNDUKLToxMDRCNDAwMDAwM0NBMDAwMDAzQ0MwMDAwMDNDRTAwMDAwM0QwMDAwMzQKLToxMDRCNTAwMDAwM0QyMDAwMDAzRDQwMDAwMDNENjAwMDAwM0Q4MDAwMjEKLToxMDRCNjAwMDAwM0RBMDAwMDAzREMwMDAwMDNERTAwMDAwM0UwMDAwMTAKLToxMDRCNzAwMDAwM0UyMDAwMDAzRTQwMDAwMDNFNjAwMDAwM0U4MDAwRkQKLToxMDRCODAwMDAwM0VBMDAwMDAzRUMwMDAwMDNFRTAwMDAwM0YwMDAwRUMKLToxMDRCOTAwMDAwM0YyMDAwMDAzRjQwMDAwMDNGNjAwMDAwM0Y4MDAwRDkKLToxMDRCQTAwMDAwM0ZBMDAwMDAzRkMwMDAwMDNGRTAwMDAwM0ZFMDAxRTgKLToxMDRCQjAwMDAwMDAwMDAwMDAwMDAxRkYwMDAwMDIwMDAwMDA3RkY4N0MKLToxMDRCQzAwMDAwMDA3RkY4MDAwMDAxNkEwMDAwMTUwMDAwMDAwMDAxRUQKLToxMDRCRDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwRDcKLToxMDRCRTAwMDAwMDAwMDAwMTQwQUZGMDAwMDAwMDAwMTAwMDAwMDAwQTcKLToxMDRCRjAwMDAwMjAxMDAxMDAwMDAwMDAwMTAwODYwMDAwMDAwMTAwRkMKLToxMDRDMDAwMDAwMDA4NjAyMDAwMDg2MDQwMDAwODYwNjAwMDA4NjA4NzgKLToxMDRDMTAwMDAwMDA4NjBBMDAwMDg2MEMwMDAwODYwRTAwMDA4NjEwNDgKLToxMDRDMjAwMDAwMDA4NjEyMDAwMDg2MTQwMDAwODYxNjAwMDA4NjE4MTgKLToxMDRDMzAwMDAwMDA4NjFBMDAwMDg2MUMwMDAwODYxRTAwMDA4NjIwRTgKLToxMDRDNDAwMDAwMDA4NjIyMDAwMDg2MjQwMDAwODYyNjAwMDA4NjI4QjgKLToxMDRDNTAwMDAwMDA4NjJBMDAwMDg2MkMwMDAwODYyRTAwMDA4NjMwODgKLToxMDRDNjAwMDAwMDA4NjMyMDAwMDg2MzQwMDAwODYzNjAwMDA4NjM4NTgKLToxMDRDNzAwMDAwMDA4NjNBMDAwMDg2M0MwMDAwODYzRTAwMDA4NjQwMjgKLToxMDRDODAwMDAwMDA4NjQyMDAwMDg2NDQwMDAwODY0NjAwMDA4NjQ4RjgKLToxMDRDOTAwMDAwMDA4NjRBMDAwMDg2NEMwMDAwODY0RTAwMDA4NjUwQzgKLToxMDRDQTAwMDAwMDA4NjUyMDAwMDg2NTQwMDAwODY1NjAwMDA4NjU4OTgKLToxMDRDQjAwMDAwMDA4NjVBMDAwMDg2NUMwMDAwODY1RTAwMDA4NjYwNjgKLToxMDRDQzAwMDAwMDA4NjYyMDAwMDg2NjQwMDAwODY2NjAwMDA4NjY4MzgKLToxMDRDRDAwMDAwMDA4NjZBMDAwMDg2NkMwMDAwODY2RTAwMDA4NjcwMDgKLToxMDRDRTAwMDAwMDA4NjcyMDAwMDg2NzQwMDAwODY3NjAwMDA4Njc4RDgKLToxMDRDRjAwMDAwMDA4NjdBMDAwMDg2N0MwMDAwODY3RTAwMDA4NjgwQTgKLToxMDREMDAwMDAwMDA4NjgyMDAwMDg2ODQwMDAwODY4NjAwMDA4Njg4NzcKLToxMDREMTAwMDAwMDA4NjhBMDAwMDg2OEMwMDAwODY4RTAwMDA4NjkwNDcKLToxMDREMjAwMDAwMDA4NjkyMDAwMDg2OTQwMDAwODY5NjAwMDA4Njk4MTcKLToxMDREMzAwMDAwMDA4NjlBMDAwMDg2OUMwMDAwODY5RTAwMDA4NkEwRTcKLToxMDRENDAwMDAwMDA4NkEyMDAwMDg2QTQwMDAwODZBNjAwMDA4NkE4QjcKLToxMDRENTAwMDAwMDA4NkFBMDAwMDg2QUMwMDAwODZBRTAwMDA4NkIwODcKLToxMDRENjAwMDAwMDA4NkIyMDAwMDg2QjQwMDAwODZCNjAwMDA4NkI4NTcKLToxMDRENzAwMDAwMDA4NkJBMDAwMDg2QkMwMDAwODZCRTAwMDA4NkMwMjcKLToxMDREODAwMDAwMDA4NkMyMDAwMDg2QzQwMDAwODZDNjAwMDA4NkM4RjcKLToxMDREOTAwMDAwMDA4NkNBMDAwMDg2Q0MwMDAwODZDRTAwMDA4NkQwQzcKLToxMDREQTAwMDAwMDA4NkQyMDAwMDg2RDQwMDAwODZENjAwMDA4NkQ4OTcKLToxMDREQjAwMDAwMDA4NkRBMDAwMDg2REMwMDAwODZERTAwMDA4NkUwNjcKLToxMDREQzAwMDAwMDA4NkUyMDAwMDg2RTQwMDAwODZFNjAwMDA4NkU4MzcKLToxMDRERDAwMDAwMDA4NkVBMDAwMDg2RUMwMDAwODZFRTAwMDA4NkYwMDcKLToxMDRERTAwMDAwMDA4NkYyMDAwMDg2RjQwMDAwODZGNjAwMDA4NkY4RDcKLToxMDRERjAwMDAwMDA4NkZBMDAwMDg2RkMwMDAwODZGRTAwMDA4NzAwQTYKLToxMDRFMDAwMDAwMDA4NzAyMDAwMDg3MDQwMDAwODcwNjAwMDA4NzA4NzIKLToxMDRFMTAwMDAwMDA4NzBBMDAwMDg3MEMwMDAwODcwRTAwMDA4NzEwNDIKLToxMDRFMjAwMDAwMDA4NzEyMDAwMDg3MTQwMDAwODcxNjAwMDA4NzE4MTIKLToxMDRFMzAwMDAwMDA4NzFBMDAwMDg3MUMwMDAwODcxRTAwMDA4NzIwRTIKLToxMDRFNDAwMDAwMDA4NzIyMDAwMDg3MjQwMDAwODcyNjAwMDA4NzI4QjIKLToxMDRFNTAwMDAwMDA4NzJBMDAwMDg3MkMwMDAwODcyRTAwMDA4NzMwODIKLToxMDRFNjAwMDAwMDA4NzMyMDAwMDg3MzQwMDAwODczNjAwMDA4NzM4NTIKLToxMDRFNzAwMDAwMDA4NzNBMDAwMDg3M0MwMDAwODczRTAwMDA4NzQwMjIKLToxMDRFODAwMDAwMDA4NzQyMDAwMDg3NDQwMDAwODc0NjAwMDA4NzQ4RjIKLToxMDRFOTAwMDAwMDA4NzRBMDAwMDg3NEMwMDAwODc0RTAwMDA4NzUwQzIKLToxMDRFQTAwMDAwMDA4NzUyMDAwMDg3NTQwMDAwODc1NjAwMDA4NzU4OTIKLToxMDRFQjAwMDAwMDA4NzVBMDAwMDg3NUMwMDAwODc1RTAwMDA4NzYwNjIKLToxMDRFQzAwMDAwMDA4NzYyMDAwMDg3NjQwMDAwODc2NjAwMDA4NzY4MzIKLToxMDRFRDAwMDAwMDA4NzZBMDAwMDg3NkMwMDAwODc2RTAwMDA4NzcwMDIKLToxMDRFRTAwMDAwMDA4NzcyMDAwMDg3NzQwMDAwODc3NjAwMDA4Nzc4RDIKLToxMDRFRjAwMDAwMDA4NzdBMDAwMDg3N0MwMDAwODc3RTAwMDA4NzgwQTIKLToxMDRGMDAwMDAwMDA4NzgyMDAwMDg3ODQwMDAwODc4NjAwMDA4Nzg4NzEKLToxMDRGMTAwMDAwMDA4NzhBMDAwMDg3OEMwMDAwODc4RTAwMDA4NzkwNDEKLToxMDRGMjAwMDAwMDA4NzkyMDAwMDg3OTQwMDAwODc5NjAwMDA4Nzk4MTEKLToxMDRGMzAwMDAwMDA4NzlBMDAwMDg3OUMwMDAwODc5RTAwMDA4N0EwRTEKLToxMDRGNDAwMDAwMDA4N0EyMDAwMDg3QTQwMDAwODdBNjAwMDA4N0E4QjEKLToxMDRGNTAwMDAwMDA4N0FBMDAwMDg3QUMwMDAwODdBRTAwMDA4N0IwODEKLToxMDRGNjAwMDAwMDA4N0IyMDAwMDg3QjQwMDAwODdCNjAwMDA4N0I4NTEKLToxMDRGNzAwMDAwMDA4N0JBMDAwMDg3QkMwMDAwODdCRTAwMDA4N0MwMjEKLToxMDRGODAwMDAwMDA4N0MyMDAwMDg3QzQwMDAwODdDNjAwMDA4N0M4RjEKLToxMDRGOTAwMDAwMDA4N0NBMDAwMDg3Q0MwMDAwODdDRTAwMDA4N0QwQzEKLToxMDRGQTAwMDAwMDA4N0QyMDAwMDg3RDQwMDAwODdENjAwMDA4N0Q4OTEKLToxMDRGQjAwMDAwMDA4N0RBMDAwMDg3REMwMDAwODdERTAwMDA4N0UwNjEKLToxMDRGQzAwMDAwMDA4N0UyMDAwMDg3RTQwMDAwODdFNjAwMDA4N0U4MzEKLToxMDRGRDAwMDAwMDA4N0VBMDAwMDg3RUMwMDAwODdFRTAwMDA4N0YwMDEKLToxMDRGRTAwMDAwMDA4N0YyMDAwMDg3RjQwMDAwODdGNjAwMDA4N0Y4RDEKLToxMDRGRjAwMDAwMDA4N0ZBMDAwMDg3RkMwMDAwODdGRUZGRkZGRkZGMkMKLToxMDUwMDAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQjAKLToxMDUwMTAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjAwMDAwMDAzOTkKLToxMDUwMjAwMDAwQkVCQzIwMDAwMDAwMDAwMDAwMDAwNTAwMDAwMDAzREUKLToxMDUwMzAwMDAwQkVCQzIwMDAwMDAwMDAwMDAwMDAwNTAwMDAyMDAwQjEKLToxMDUwNDAwMDAwMDA0MEMwMDAwMDYxODAwMDAwODI0MDAwMDBBMzAwMUEKLToxMDUwNTAwMDAwMDBDM0MwMDAwMEU0ODAwMDAxMDU0MDAwMDEyNjAwRkMKLToxMDUwNjAwMDAwMDE0NkMwMDAwMTY3ODAwMDAxODg0MDAwMDFBOTAwREUKLToxMDUwNzAwMDAwMDFDOUMwMDAwMUVBODAwMDAyMEI0MDAwMDIyQzAwQzAKLToxMDUwODAwMDAwMDI0Q0MwMDAwMjZEODAwMDAyOEU0MDAwMDJBRjAwQTIKLToxMDUwOTAwMDAwMDJDRkMwMDAwMkYwODAwMDAwMTE0MDAwMDA4MDAwM0MKLToxMDUwQTAwMDAwMDEwMzgwMDAwMTg3MDAwMDAyMEE4MDAwMDI4RTAwRDgKLToxMDUwQjAwMDAwMDMxMTgwMDAwMzk1MDAwMDA0MTg4MDAwMDQ5QzAwODgKLToxMDUwQzAwMDAwMDUxRjgwMDAwNUEzMDAwMDA2MjY4MDAwMDZBQTAwMzgKLToxMDUwRDAwMDAwMDcyRDgwMDAwN0IxMDAwMDA4MzQ4MDAwMDhCODAwRTgKLToxMDUwRTAwMDAwMDkzQjgwMDAwOUJGMDAwMDBBNDI4MDAwMEFDNjAwOTgKLToxMDUwRjAwMDAwMEI0OTgwMDAwQkNEMDAwMDBDNTA4MDAwMENENDAwNDgKLToxMDUxMDAwMDAwMEQ1NzgwMDAwMDVCMDAwMDAwN0ZGODAwMDA3RkY4NzIKLToxMDUxMTAwMDAwMDAwMTY2MDAwMDE1MDAwMDAwRkYwMDAwMDAwMDAwMTQKLToxMDUxMjAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwMTkwMDAwMDAwMDAwNjcKLToxMDUxMzAwMDAwMDAwMDAwRkZGRkZGRkYwMDAwN0ZGODAwMDA3RkY4ODUKLToxMDUxNDAwMDAwMDAwMzVGMDAwMDM1MDAwMDAwRkYwMDBGRkZGRkZGQkQKLToxMDUxNTAwMDAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwNDYKLToxMDUxNjAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMjkKLToxMDUxNzAwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMTkKLToxMDUxODAwMDAwMDAwMEZGMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMTYKLToxMDUxOTAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDBGRkZGRkZGRjkKLToxMDUxQTAwMDAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwRjYKLToxMDUxQjAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGRDkKLToxMDUxQzAwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGQzkKLToxMDUxRDAwMDAwMDAwMEZGMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwQzYKLToxMDUxRTAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDBGRkZGRkZGQTkKLToxMDUxRjAwMDAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwQTYKLToxMDUyMDAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGODgKLToxMDUyMTAwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGNzgKLToxMDUyMjAwMDAwMDAwMEZGMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwNzUKLToxMDUyMzAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDBGRkZGRkZGNTgKLToxMDUyNDAwMDAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwNTUKLToxMDUyNTAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMzgKLToxMDUyNjAwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMjgKLToxMDUyNzAwMDAwMDAwMEZGMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMjUKLToxMDUyODAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDBGRkZGRkZGMDgKLToxMDUyOTAwMDAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDUKLToxMDUyQTAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGRTgKLToxMDUyQjAwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGRDgKLToxMDUyQzAwMDAwMDAwMEZGMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwRDUKLToxMDUyRDAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDBGRkZGRkZGQjgKLToxMDUyRTAwMDAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwQjUKLToxMDUyRjAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGOTgKLToxMDUzMDAwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGODcKLToxMDUzMTAwMDAwMDAwMEZGMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwODQKLToxMDUzMjAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDBGRkZGRkZGNjcKLToxMDUzMzAwMDAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwNjQKLToxMDUzNDAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGNDcKLToxMDUzNTAwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMzcKLToxMDUzNjAwMDAwMDAwMEZGMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMzQKLToxMDUzNzAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDBGRkZGRkZGMTcKLToxMDUzODAwMDAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMTQKLToxMDUzOTAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGRjcKLToxMDUzQTAwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGRTcKLToxMDUzQjAwMDAwMDAwMEZGMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwRTQKLToxMDUzQzAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwMDBGRjAwMDAwMEZGRDQKLToxMDUzRDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwQ0YKLToxMDUzRTAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQ0QKLToxMDUzRjAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQkQKLToxMDU0MDAwMDAwMDAxMDAwMDAwMDIwODAwMDAwMzEwMDAwMDA0MTgwRkEKLToxMDU0MTAwMDAwMDA1MjAwMDAwMDYyODAwMDAwNzMwMDAwMDA4MzgwRTIKLToxMDU0MjAwMDAwMDA5NDAwMDAwMEE0ODAwMDAwQjUwMDAwMDBDNTgwQ0EKLToxMDU0MzAwMDAwMDBENjAwMDAwMEU2ODAwMDAwRjcwMDAwMDEwNzgwQjEKLToxMDU0NDAwMDAwMDExODAwMDAwMTI4ODAwMDAxMzkwMDAwMDE0OTgwOTYKLToxMDU0NTAwMDAwMDE1QTAwMDAwMTZBODAwMDAxN0IwMDAwMDE4QjgwN0UKLToxMDU0NjAwMDAwMDE5QzAwMDAwMUFDODAwMDAxQkQwMDAwMDFDRDgwNjYKLToxMDU0NzAwMDAwMDFERTAwMDAwMUVFODAwMDAwMEYwMDAwMDAwMDAwQ0YKLToxMDU0ODAwMDAwMDA3RkY4MDAwMDdGRjgwMDAwMDIxQTAwMDAzNTAwREQKLToxMDU0OTAwMDEwMDAwMDAwMDAwMDI4QUQwMDAxMDAwMUZGRkZGRkZGMjkKLToxMDU0QTAwMEZGRkZGRkZGMDAyMjAwMDZDQ0NDQ0NDMTcwNTgxMDNDOUYKLToxMDU0QjAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwRUUKLToxMDU0QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUNDQ0MwMjAxNDAKLToxMDU0RDAwMENDQ0NDQ0NDQ0NDQzAyMDFDQ0NDQ0NDQzAwMDAwMDAwRDEKLToxMDU0RTAwMEZGRkZGRkZGMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGQzQKLToxMDU0RjAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGQjAKLToxMDU1MDAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGOUYKLToxMDU1MTAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGOEYKLToxMDU1MjAwMDAwMDAwMDAwMDAwRTAwMDAwMTE2MDBENjAwMDBGRkZGODIKLToxMDU1MzAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGNkYKLToxMDU1NDAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGNUYKLToxMDU1NTAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGNEYKLToxMDU1NjAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwNzIwMDAwQ0IKLToxMDU1NzAwMDAxMjMwMEYzRkZGRkZGRjMzMThGRkZGRjBDMzBDMzBDNUIKLToxMDU1ODAwMEMzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGMzAwMDBDRjNDNUYKLToxMDU1OTAwMENEQ0RDRENERkZGRkZGRjEzMEVGRkZGRjBDMzBDMzBDQzEKLToxMDU1QTAwMEMzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGMzAwMDFDRjNDM0UKLToxMDU1QjAwMENEQ0RDRENERkZGRkZGRjYzMDVGRkZGRjBDMzBDMzBDMkMKLToxMDU1QzAwMEMzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGMzAwMDJDRjNDMUQKLToxMDU1RDAwMENEQ0RDRENERkZGRkY0MDYxQ0JGRkZGRjBDMzBDMzA1QzIKLToxMDU1RTAwMEMzMEMzMEMzQ0YzMDAwMTRGM0NGM0NGMzAwMDRDRjNDRTYKLToxMDU1RjAwMENEQ0RDRENERkZGRkZGRjIzMDRGRkZGRjBDMzBDMzBDMDAKLToxMDU2MDAwMEMzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGMzAwMDhDRjNDRDYKLToxMDU2MTAwMENEQ0RDRENERkZGRkZGRkEzMDJGRkZGRjBDMzBDMzBDRjcKLToxMDU2MjAwMEMzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGMzAwMTBDRjNDQUUKLToxMDU2MzAwMENEQ0RDRENERkZGRkZGRjczMUVGRkZGRjBDMzBDMzBDMTkKLToxMDU2NDAwMEMzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGMzAwMjBDRjNDN0UKLToxMDU2NTAwMENEQ0RDRENERkZGRkZGRjUzMDJGRkZGRjBDMzBDMzBDQkMKLToxMDU2NjAwMEMzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGMzAwNDBDRjNDM0UKLToxMDU2NzAwMENEQ0RDRENERkZGRkZGRjMzMThGRkZGRjBDMzBDMzBDM0QKLToxMDU2ODAwMEMzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGMzAwMDBDRjNDNUUKLToxMDU2OTAwMENEQ0RDRENERkZGRkZGRjEzMTBGRkZGRjBDMzBDMzBDOUYKLToxMDU2QTAwMEMzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGMzAwMDFDRjNDM0QKLToxMDU2QjAwMENEQ0RDRENERkZGRkZGRjYzMDVGRkZGRjBDMzBDMzBDMkIKLToxMDU2QzAwMEMzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGMzAwMDJDRjNDMUMKLToxMDU2RDAwMENEQ0RDRENERkZGRkY0MDYxQ0JGRkZGRjBDMzBDMzA1QzEKLToxMDU2RTAwMEMzMEMzMEMzQ0YzMDAwMTRGM0NGM0NGMzAwMDRDRjNDRTUKLToxMDU2RjAwMENEQ0RDRENERkZGRkZGRjIzMDRGRkZGRjBDMzBDMzBDRkYKLToxMDU3MDAwMEMzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGMzAwMDhDRjNDRDUKLToxMDU3MTAwMENEQ0RDRENERkZGRkZGRkEzMDJGRkZGRjBDMzBDMzBDRjYKLToxMDU3MjAwMEMzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGMzAwMTBDRjNDQUQKLToxMDU3MzAwMENEQ0RDRENERkZGRkZGRjczMEVGRkZGRjBDMzBDMzBDMTkKLToxMDU3NDAwMEMzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGMzAwMjBDRjNDN0QKLToxMDU3NTAwMENEQ0RDRENERkZGRkZGRjUzMDRGRkZGRjBDMzBDMzBDOUIKLToxMDU3NjAwMEMzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGMzAwNDBDRjNDM0QKLToxMDU3NzAwMENEQ0RDRENERkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDRjEKLToxMDU3ODAwMEMzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzAwMDBDRjNDOTEKLToxMDU3OTAwMENEQ0RDRENERkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDRDEKLToxMDU3QTAwMEMzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzAwMDFDRjNDNzAKLToxMDU3QjAwMENEQ0RDRENERkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQjEKLToxMDU3QzAwMEMzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzAwMDJDRjNDNEYKLToxMDU3RDAwMENEQ0RDRENERkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDOTEKLToxMDU3RTAwMEMzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzAwMDRDRjNDMkQKLToxMDU3RjAwMENEQ0RDRENERkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDNzEKLToxMDU4MDAwMEMzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzAwMDhDRjNDMDgKLToxMDU4MTAwMENEQ0RDRENERkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDNTAKLToxMDU4MjAwMEMzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzAwMTBDRjNDRTAKLToxMDU4MzAwMENEQ0RDRENERkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDMzAKLToxMDU4NDAwMEMzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzAwMjBDRjNDQjAKLToxMDU4NTAwMENEQ0RDRENERkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDMTAKLToxMDU4NjAwMEMzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzAwNDBDRjNDNzAKLToxMDU4NzAwMENEQ0RDRENERkZGRkZGRjMzMjBGRkZGRjBDMzBDMzBDQkEKLToxMDU4ODAwMEMzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGMzAwMDBDRjNDNUMKLToxMDU4OTAwMENEQ0RDRENERkZGRkZGRjEzMTBGRkZGRjBDMzBDMzBDOUQKLToxMDU4QTAwMEMzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGMzAwMDFDRjNDM0IKLToxMDU4QjAwMENEQ0RDRENERkZGRkZGRjYzMDVGRkZGRjBDMzBDMzBDMjkKLToxMDU4QzAwMEMzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGMzAwMDJDRjNDMUEKLToxMDU4RDAwMENEQ0RDRENERkZGRkY0MDYxQ0JGRkZGRjBDMzBDMzA1QkYKLToxMDU4RTAwMEMzMEMzMEMzQ0YzMDAwMTRGM0NGM0NGMzAwMDRDRjNDRTMKLToxMDU4RjAwMENEQ0RDRENERkZGRkZGRjIzMDRGRkZGRjBDMzBDMzBDRkQKLToxMDU5MDAwMEMzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGMzAwMDhDRjNDRDMKLToxMDU5MTAwMENEQ0RDRENERkZGRkZGOEEwNDJGRkZGRjBDMzBDMzBDOTAKLToxMDU5MjAwMEMzMEMzMEMzQ0YzQ0MwMDBGM0NGM0NGMzAwMTBDRjNDREUKLToxMDU5MzAwMENEQ0RDRENERkZGRkZGOTcwNUNGRkZGRjBDMzBDMzBDQzIKLToxMDU5NDAwMEMzMEMzMEMzQ0YzQ0MwMDBGM0NGM0NGMzAwMjBDRjNDQUUKLToxMDU5NTAwMENEQ0RDRENERkZGRkZGRjUzMTBGRkZGRjBDMzBDMzBDRDgKLToxMDU5NjAwMEMzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGMzAwNDBDRjNDM0IKLToxMDU5NzAwMENEQ0RDRENERkZGRkZGRjMzMDBGRkZGRjBDMzBDMzBDQkIKLToxMDU5ODAwMEMzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGMzAwMDBDRjNDNUIKLToxMDU5OTAwMENEQ0RDRENERkZGRkZGRjEzMDBGRkZGRjBDMzBDMzBDOUQKLToxMDU5QTAwMEMzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGMzAwMDFDRjNDM0EKLToxMDU5QjAwMENEQ0RDRENERkZGRkZGRjYzMDVGRkZGRjBDMzBDMzBDMjgKLToxMDU5QzAwMEMzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGMzAwMDJDRjNDMTkKLToxMDU5RDAwMENEQ0RDRENERkZGRkY0MDYxQ0JGRkZGRjBDMzBDMzA1QkUKLToxMDU5RTAwMEMzMEMzMEMzQ0YzMDAwMTRGM0NGM0NGMzAwMDRDRjNDRTIKLToxMDU5RjAwMENEQ0RDRENERkZGRkZGRjIzMDRGRkZGRjBDMzBDMzBDRkMKLToxMDVBMDAwMEMzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGMzAwMDhDRjNDRDIKLToxMDVBMTAwMENEQ0RDRENERkZGRkZGRkEzMDJGRkZGRjBDMzBDMzBDRjMKLToxMDVBMjAwMEMzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGMzAwMTBDRjNDQUEKLToxMDVBMzAwMENEQ0RDRENERkZGRkZGOTcwNDBGRkZGRjBDMzBDMzBDODIKLToxMDVBNDAwMEMzMEMzMEMzQ0YzQ0MwMDBGM0NGM0NGMzAwMjBDRjNDQUQKLToxMDVBNTAwMENEQ0RDRENERkZGRkZGRjUzMDBGRkZGRjBDMzBDMzBDRDgKLToxMDVBNjAwMEMzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGMzAwNDBDRjNDM0EKLToxMDVBNzAwMENEQ0RDRENERkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDRUUKLToxMDVBODAwMEMzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzAwMDBDRjNDOEUKLToxMDVBOTAwMENEQ0RDRENERkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQ0UKLToxMDVBQTAwMEMzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzAwMDFDRjNDNkQKLToxMDVBQjAwMENEQ0RDRENERkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQUUKLToxMDVBQzAwMEMzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzAwMDJDRjNDNEMKLToxMDVBRDAwMENEQ0RDRENERkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDOEUKLToxMDVBRTAwMEMzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzAwMDRDRjNDMkEKLToxMDVBRjAwMENEQ0RDRENERkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDNkUKLToxMDVCMDAwMEMzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzAwMDhDRjNDMDUKLToxMDVCMTAwMENEQ0RDRENERkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDNEQKLToxMDVCMjAwMEMzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzAwMTBDRjNDREQKLToxMDVCMzAwMENEQ0RDRENERkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDMkQKLToxMDVCNDAwMEMzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzAwMjBDRjNDQUQKLToxMDVCNTAwMENEQ0RDRENERkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDMEQKLToxMDVCNjAwMEMzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzAwNDBDRjNDNkQKLToxMDVCNzAwMENEQ0RDRENERkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDRUQKLToxMDVCODAwMEMzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzAwMDBDRjNDOEQKLToxMDVCOTAwMENEQ0RDRENERkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQ0QKLToxMDVCQTAwMEMzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzAwMDFDRjNDNkMKLToxMDVCQjAwMENEQ0RDRENERkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQUQKLToxMDVCQzAwMEMzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzAwMDJDRjNDNEIKLToxMDVCRDAwMENEQ0RDRENERkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDOEQKLToxMDVCRTAwMEMzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzAwMDRDRjNDMjkKLToxMDVCRjAwMENEQ0RDRENERkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDNkQKLToxMDVDMDAwMEMzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzAwMDhDRjNDMDQKLToxMDVDMTAwMENEQ0RDRENERkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDNEMKLToxMDVDMjAwMEMzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzAwMTBDRjNDREMKLToxMDVDMzAwMENEQ0RDRENERkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDMkMKLToxMDVDNDAwMEMzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzAwMjBDRjNDQUMKLToxMDVDNTAwMENEQ0RDRENERkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDMEMKLToxMDVDNjAwMEMzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzAwNDBDRjNDNkMKLToxMDVDNzAwMENEQ0RDRENERkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDRUMKLToxMDVDODAwMEMzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzAwMDBDRjNDOEMKLToxMDVDOTAwMENEQ0RDRENERkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQ0MKLToxMDVDQTAwMEMzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzAwMDFDRjNDNkIKLToxMDVDQjAwMENEQ0RDRENERkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQUMKLToxMDVDQzAwMEMzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzAwMDJDRjNDNEEKLToxMDVDRDAwMENEQ0RDRENERkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDOEMKLToxMDVDRTAwMEMzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzAwMDRDRjNDMjgKLToxMDVDRjAwMENEQ0RDRENERkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDNkMKLToxMDVEMDAwMEMzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzAwMDhDRjNDMDMKLToxMDVEMTAwMENEQ0RDRENERkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDNEIKLToxMDVEMjAwMEMzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzAwMTBDRjNDREIKLToxMDVEMzAwMENEQ0RDRENERkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDMkIKLToxMDVENDAwMEMzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzAwMjBDRjNDQUIKLToxMDVENTAwMENEQ0RDRENERkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDMEIKLToxMDVENjAwMEMzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzAwNDBDRjNDNkIKLToxMDVENzAwMENEQ0RDRENEMDAwQzAwMDAwMDA3MDBDMDAwMDI4MTMwNjkKLToxMDVEODAwMDAwMEI4MTU4MDAwMjAyMTAwMDAxMDIzMDAwMEYwMjQwOTcKLToxMDVEOTAwMDAwMDEwMzMwMDAwQzAwMDAwMDA4MDBDMDAwMDI4MTQwMzgKLToxMDVEQTAwMDAwMEI4MTY4MDAwMjAyMjAwMDAxMDI0MDAwMDcwMjUwM0YKLToxMDVEQjAwMDAwMDIwMkMwMDAxMDAwMDAwMDA4MDEwMDAwMDI4MTgwMDMKLToxMDVEQzAwMDAwMEI4MUE4MDAwMjAyNjAwMDAxODI4MDAwMEU4Mjk4MTAKLToxMDVERDAwMDAwMDgwMzgwMDAwMjgwMDAwMDBCODAyODAwMDIwMEUwMjEKLToxMDVERTAwMDAwMDEwMTAwMDAwMDgxMTAwMDAwMDExOENDQ0NDQ0NDRDcKLToxMDVERjAwMENDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQzAwMDAyMDAwRjMKLToxMDVFMDAwMENDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDRDIKLToxMDVFMTAwMDAwMDAyMDAwQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDRDIKLToxMDVFMjAwMENDQ0NDQ0NDMDAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMjIKLToxMDVFMzAwMDFGOEIwODAwMDAwMDAwMDAwMDBCRkI1MUNGQzBGMDAzRDcKLToxMDVFNDAwMDhBNUI1OTE5MThFQzM5MTA3QzdBRTBBNThDOTRFOTVGQ0IKLToxMDVFNTAwMEMzQ0NDMEIwMTk4ODJGMDBGMTJFNjZEMkY1N0Y5NjQyRDAKLToxMDVFNjAwMEIwQ0Y0ODMwMzBCQzAzRTI5RDYyMEMwQzJCMjQxMUUyMTEKLToxMDVFNzAwMEQxRDIwQzBDRkY4MUZDRDM1MDMxM0JBMDlFREQ1Mjk0NUIKLToxMDVFODAwMEI5N0IxNDBGMEU3QzQ3MUQ5NTdGNUMxNTQyODc0MEM1N0EKLToxMDVFOTAwMEVGQTJDOTlGODBDQUNGNTc4MEQwRjdENEIxOUJCQjAwNzcKLToxMDVFQTAwMDJBMEYwMDAxRkUzNzUzNjAwMzAwMDAwMDAwMDAwMDAwQ0QKLToxMDVFQjAwMDFGOEIwODAwMDAwMDAwMDAwMDBCRUQ3RDBCNzQ1NEQ1MTMKLToxMDVFQzAwMEI5RjAzN0U3MzU2NzI2MzM5MzkzOTBDNzA0MTIzQzgzQzQKLToxMDVFRDAwMDAxODIwNjE4MzAzQzU0QUE5M0YwNjhFOEE1M0EzQzA0QzUKLToxMDVFRTAwMEU0NDcxOTUwMzQ4MjI0MTFEMzlBQjZGQzdGNEVDOEU0OUIKLToxMDVFRjAwMDAxMDJDNjE3QTUyRERBODFFMkJERDE4NUJERDE0NjZCNjEKLToxMDVGMDAwMEZCNkI1NzEwQTVCOUI1NzcyREE0QThCNDQ1MUJEMDZCNzIKLToxMDVGMTAwMEMxMDIzN0RBNzJBMUZGQjI5NzdGN0Y3QkVGOTM5QzczNDgKLToxMDVGMjAwMDMyOTM4NzYyNTdFRjZBQzNEMjkzN0RDRTdFN0NGQjdCMzAKLToxMDVGMzAwMEVERUY3NTRFMTQxODAzQ0E4RDAwOTdGMDg3NUNEN0I5NDIKLToxMDVGNDAwMDAwMjBCQkVGNkFERTA3MzU1NjA5NTkwMDE1NDE0NURGRDEKLToxMDVGNTAwMDRBOUVBRDE3MjM3QTdEMDlCOTdGODUxMDdFMEFGMEZFMkYKLToxMDVGNjAwMEI4MzkzMDA5NDBDNjcxNzkwMDUzRjE3RkQzMDBBNENDMTEKLToxMDVGNzAwMDk2OUM5ODhGREMxMzU3QTZFM0Q1OUNDRkJDNTY0ODAwNUYKLToxMDVGODAwMERBNTQ3Q0JFNkQ1Q0IyRTdCREVCMjdFNDlFNkUxNUU4OEIKLToxMDVGOTAwMENGQTUzMTAwQjVDNzZGOURGRjlBRDkyNkZGOEQwMjdGMkYKLToxMDVGQTAwMEQ2ODc1NzkzNUY2NkMwOEM0QjIyQzAyN0Y5OEJEMjNCQjQKLToxMDVGQjAwMEY1RDRGMzdENTREN0E1NDk2MzAxMkVENDJEOUZGRkRBODQKLToxMDVGQzAwMEQ4RkVDRkQ3OEI1MERENUVEQ0ZGRkU3NUEwNTJCQzgwQzMKLToxMDVGRDAwMDZBMjhEMTg5N0RGQjVFMEZEMEU5Q0UwNDY4Q0VERkNDODQKLToxMDVGRTAwMEY2OUI0NTkwNzUyREI5REZGNjZGOUE1NEQ0MDdFNzdBODIKLToxMDVGRjAwMDg5RjQ5QkRBN0YzRjAwMDY5REQ3OUNBNzc3N0NBMkNCRDQKLToxMDYwMDAwMDM2REUzOUFFNzczRTNFMUUyNEYyNkYzQTAwRUQ0MkY2QTAKLToxMDYwMTAwMDNGQ0QxNUJCMTFFRkJCRjMxNzE5MjM0OTdCRkRGRTUyOTIKLToxMDYwMjAwMDg4MTVBNzg2QkY5NzVFOUYxMTdFNzM1QzRBM0FGMjdFMDEKLToxMDYwMzAwMDlGRUM2QjY4MjJBQzA3MUYyQUFEMzc1RDQ3RjhFOEY3ODUKLToxMDYwNDAwMENGODlFMUNEQzg0N0JCQzdDRjgxMDBCOTBGOEM4RjRDM0EKLToxMDYwNTAwMDNBOURERUQ3OTA5MzhDM0Y1MkQxRTk3RjgzODdGMjlGQTAKLToxMDYwNjAwMEM5NUYxNUMyQ0FGNDRFRjhFQ0ZDNzUzN0YyNTc5QTg1MzEKLToxMDYwNzAwMEJGREExNzBGMzhERjY3RTVBRkI4OTNCRjM4M0VDRUI0NEQKLToxMDYwODAwMEIzRkRDM0FFMTE4QzJFOUM1RTRFRkFBNEE0Q0I2NzFENEIKLToxMDYwOTAwMEQ3OUY5RkI2MjA1RURERUQ4QjhEOTE5MDg0OUYzOEJDOUQKLToxMDYwQTAwMDI2QkQzRTJGQkM4M0YxMTE0MDJCQTUzMzQwNTRDNEY1Q0YKLToxMDYwQjAwMEZCRUVCM0FCQjc0NDczODE0MDlCODc3MTFGMjNGODNFNUYKLToxMDYwQzAwMDQ2QzQ5QUVFMTMwODlDN0U2ODJEMUYxNzIyRURFRUQ1NkMKLToxMDYwRDAwMDBCNTAwRUZDQzdFNzlGQzY2QjYzNzE1OTU3MTlFOTk3QzAKLToxMDYwRTAwMDFFRDYxNkNFMjM1NzZGMTFCODcwOUY1QjcwQjJFQjcwM0YKLToxMDYwRjAwMEJFNEFBM0I0MThFOTA1QjRGRDhDNzE0N0M0NDAzQzQwQzYKLToxMDYxMDAwMDA0MjAwN0UwNkI3QzRGMDA4MjJFOTFCNjgyQkY4RTQ5M0YKLToxMDYxMTAwMEI2MEYwNTNBMTkzRTVDOTdEQ0ZEQzdBN0RBQkZEMjM3NDgKLToxMDYxMjAwMDBFMkU4NUYwRkYxQjAxRjczN0Q4Mzg1ODQwQzZBOTg4RDYKLToxMDYxMzAwMDBFODNFMjNCQzMzMTRGN0E4NDNEMzdFOUUzMDc0QjlCNDMKLToxMDYxNDAwMDNDM0Y4QUJGNTA3Q0RGRjc1NzU5NEY4MzQ3NTQ5REE4ODcKLToxMDYxNTAwMDE0QTU1MEQwMTJEODFGQjQwQzg5QjRCRDczODgyMjIyNjQKLToxMDYxNjAwMDY3OEQxNkVDMzEwNDdENzBCQTM0MDI5NEI3RkIyOEMzRjYKLToxMDYxNzAwMEMxNDI3RjFGN0NBN0MxNDVGNzEzNUMxMzBGMzU5MTc5OEUKLToxMDYxODAwMENGOTdGOEMyOTQzRjM0RjJERkQ0RkVGQjc5QjAwRTE5RkEKLToxMDYxOTAwMEQ5RDIyRURFMEJDOEU3NzFDMjQ3NjNDODc4QTM5ODlDOUEKLToxMDYxQTAwMDg3MDg0RkUxRjM5QTU1NUZBNUI5NUM5QzJGOURGQzAxRDAKLToxMDYxQjAwMEJBMzQxREM1MEM1OTg1NUMwQjg1ODgyN0YwRjlGOTQzNjUKLToxMDYxQzAwMDcyRTA3MUE4RkM5MUI2QzA0MjFGMTgzRUJEODJEQzZFMjEKLToxMDYxRDAwMDE4MkE3RjdDREVGNTRDQkFGNjk3QUI3QTRFRDcxQTE1QTMKLToxMDYxRTAwMDdDNzgyRTJGNEE2QTdGQTRBNkVCMjM5NEFFREU0Mjg4RTkKLToxMDYxRjAwMDI0OTJFOEU5MDI5NzhCQ0I4MTYxRDMzN0Y0NEFFODIzRjQKLToxMDYyMDAwMEY2OTJGNzdFMUJCREM0RENFOUNCRjcwQzgwMEYzMUNCRDcKLToxMDYyMTAwMDhFMEY3MzVFNEZBREE4N0Y4MENBNEJEMjA0OUM0RkMxRDYKLToxMDYyMjAwMEY5OTBDRjgyOEYxODQwQ0VDRkYzQzhEQjA0MUY2MkVCMEEKLToxMDYyMzAwMDk0NEU2QzQzMjE1MEJCOENGQzc0QkE0OERCMTM4QzI0MDUKLToxMDYyNDAwMEI2ODYxOEZGMjM1RDRDRjhEQ0JBNjBDM0FGOTRFNUI1QTEKLToxMDYyNTAwMEI1NjFCOUUxQjJDMkVGQTk1NTI4MUMwQUI1MTFDODNDMTUKLToxMDYyNjAwMDFBOTk5MEEwNDJGMjQxMjdGMkFEQzlBRkM4MDY5N0FFODUKLToxMDYyNzAwMEM0RjZCNzZDN0NEMEEyNEY4NTY0NzQzMEY5MTVEMUNBQ0UKLToxMDYyODAwMEY4RjU1QjQzRDMyRkNFRjU5NkQ4RTExREYyMzg5RkE0RTUKLToxMDYyOTAwMDdGNjgzOTg3NTI4RjkzRTA0MzkzM0UwNDg5MTUzODgxOTQKLToxMDYyQTAwMDg1MEY5QTY1NzhDOTM1MTlBMDIxN0YyOUM0QzhERDY2OTQKLToxMDYyQjAwMDdDNDRDRUIxMjZCQ0U2MjExRjRFRDVFODc5RDlFNjkyQzIKLToxMDYyQzAwMDEwNEVGMzVDODU2MDI2RUQzN0NEQTVEM0Y5MDRCNTlBNjEKLToxMDYyRDAwMDlFQUJBMjJGQzJDRTU3RkUzQzM1NUM2Q0ZEMUNCRDM1N0IKLToxMDYyRTAwMEEyMTFGQ0U2NDI2QjQ0MjBGNDkxNEEyMERDMDlBODQ3NDUKLToxMDYyRjAwMDIzODA3QzAwNjFDNjE3MjJCN0QzQ0RGMTcxQ0VDRjFFQUIKLToxMDYzMDAwMDM4NEFDNzEzRUQ2QTY4RjQzQ0IzQ0JGMTVDOTEzQzI0ODYKLToxMDYzMTAwMEYzNkMyOTgyODQ5QkQyQTk1NUM1QjY1NDI0MDFGQTA1OTEKLToxMDYzMjAwMDQ0M0ZGOUYyQTZBMzlFRTYzRkUyODIzMEMyOUY4RUU3ODkKLToxMDYzMzAwMDJCRjJDNzJDQ0VERjJFQTJDRjA4OUU3RDI1NzZGOUY2NTQKLToxMDYzNDAwMDNBRTQ1RkUyRTc3MTNGN0Q5NkMyOUYzMEFGNEVGQkVEQ0UKLToxMDYzNTAwMEZCMkU2RUJGQTU4MThGRDI5QjhGMDc1RjcyN0JENUI0NUEKLToxMDYzNjAwMERCNENCQzY2MEI0MEYxMDlCRjkwMTM0Rjg1RjhERTQ4NEIKLToxMDYzNzAwMDdCRTNCQjE5MDlEQ0I3NTExNjVEREQ0OEYwNjA5Qzc0MDYKLToxMDYzODAwMDg1MUI5MDlFNTJBNDI3OUQzQ0ZGRjA5RjQ1RUEyRjY1RjgKLToxMDYzOTAwMDJGQURCRDAyRDdEQjVFNjc4QzJEQjREODgzREIyNUNENTYKLToxMDYzQTAwMDhCNzhERTEzOUZBQUM2MkM3QUU2NjY4OEJERThCMkY4MjEKLToxMDYzQjAwMDVGQTE2MEQzRDhDMjZCMjhGRjlERUMyRUMyQTNDMjQ1NUIKLToxMDYzQzAwMEY5Q0ZFMzhCMDc1RjQ3QjlFNEY3N0JGMTYzNkQ4QkZEOTIKLToxMDYzRDAwMERCNTlCOUMwQ0U0QkI4QTkzNDQyRDY2RDQxREQzNTkyRjgKLToxMDYzRTAwMDNFMzY1QzA0Q0U5NjNDRDZGRTc5N0Q0RTI5OUU5RjJEOEUKLToxMDYzRjAwMDdFRDZGRUE0RkVGRDQ4M0RFNThCOTgxQTI1Rjc2QTgxRkUKLToxMDY0MDAwMEUzQTU4QkUwODVEMjVGQ0Y1RDM4MzEzNTVEOUNGQkRGNDYKLToxMDY0MTAwMDIxMURGNkUwRkU5RkYwMUQ5OTNGMUVDRkNGOTk0MjE4MzcKLToxMDY0MjAwMEQxRkU0NENEMTE2REI1MDUxRjJERUVCMkI3MTExRkEzREUKLToxMDY0MzAwMDIwRTEwMkE0NUYzQzhCQ0E0RjEwN0E3RjIyRDhDRUUzQzIKLToxMDY0NDAwMEYyOTQwRjg3NjlCRkQxRDE5RTUyMTk2RjJERDc1RUM1QzcKLToxMDY0NTAwMDZCNTNGMEY5MEMyQTRGMzA0N0ZCOTBDQUJGRThCQTc0NkYKLToxMDY0NjAwMEY1RDBFNTNERDU3RTAzMkU4ODI2QjNFNzM3OEE5OTU0Q0IKLToxMDY0NzAwMEFFMDIyNTY0REYzNkJEOUVBRjUxN0VFNEYzN0UwRDY5MkEKLToxMDY0ODAwMDQ0RjZCNzI3ODNDMDQ0ODQ2NzhGRENCQTNDOUE4NEJGNDQKLToxMDY0OTAwMDdGRUUxMjY4QkY3ODdDNUU3NDJERTUzMzc2MUU4Q0U2NDUKLToxMDY0QTAwMEU3NDFFM0UyREJDM0M4MEY1MEE4RTcyMjdEMjQyRDQ2NzUKLToxMDY0QjAwMEY1QUQ4NEU3MDdFMTFGMzk4QkU5MTU0OThEQjQ4QzI3QzkKLToxMDY0QzAwMEZDMUEzQTJBODI0MUM2ODU1QTMzQ0E1NEQ0MEYxQTUwNEMKLToxMDY0RDAwMEZCMDVEMUI5NjQyMkRCMkY5RUFGNkVDMjcxMjg5Nzk5NUMKLToxMDY0RTAwMEU0N0FDOUIyNkYwODdBRkJFNDc1MENBRUEzRDA3NTJFQkUKLToxMDY0RjAwMDAzQkRCMzg0Njk4M0QzNzkyNEI0OTdFMjYxOTY4QURFQkQKLToxMDY1MDAwMDk3OUJDRUE5QzYzQkU5MUI3MDMxRjlEQUQ4NzAyMTYyOUUKLToxMDY1MTAwMDEwRkMzNTFENzcwOTIyMkFDNUQ2NDI0QTJGOTVFQkE2RDUKLToxMDY1MjAwMDBCNzI0QzQ1QkI3MUNCRDcwNEQ4NEJGMTMwQjA5RDEyRTgKLToxMDY1MzAwMDc3RDgyOTkyMTY4REI4QzhGODkxMTVEQTU0NjRBMTU0MDkKLToxMDY1NDAwMEUzNzY1NjA4RTU4OTI0RjM5NjBCNENFRjZGQTk3OEE0RkYKLToxMDY1NTAwMDk1QUFCQkQ3RUNGRTlFQkMzMjQyRUQ1MkUyRjc5NTIzRTIKLToxMDY1NjAwMDNEQ0M3MTlFNDJDNjQ3QjA4RkVDODdGNDk3MzlGRjVERjIKLToxMDY1NzAwMEM4NUU5NDBFNDlFNEMwQkM3RTBGRTExRkRGRDcxRUM1ODQKLToxMDY1ODAwMEY5Q0JEOUFGNUFFNEY2RDU2MzZDN0VEM0RFQjk5MDM3MzgKLToxMDY1OTAwMEYwRkMyNjdFMkU5NjBCNzAxOEUxOTM3QTNDNDBFNTNEODgKLToxMDY1QTAwMDlCREE2MUEzMzkxMzQ5QjU4NDZGQzhCQTMyNzREN0UzNTMKLToxMDY1QjAwMDc5Qjc1MzgwOEFGNjYyQkU2OUQyQ0ZDREU5RjNGREZDOEMKLToxMDY1QzAwMDRGM0NEOEVGMzY1MUEwRjA4QzhBRjQ2QzQxQkQzRjZBNDUKLToxMDY1RDAwMDkzMDBFODhGNTQ4QTNBQkQ5RkJCQjJGQTgwNENFRUI3NjUKLToxMDY1RTAwMDM0NDJEOEE3RTMzQTZDREU5NjAzMUU3QTVFMkE1OTkwQUQKLToxMDY1RjAwMEYwOTBGRTg3NDIzOTlCOTE1RUVFMzg0NERDQTQ5RkZCMEQKLToxMDY2MDAwMDVFMjI3MkQ4MkU4NDg0NEU5RUNCQjUzMTAzRTE5NTgyRjIKLToxMDY2MTAwMDUxNzQ2RkUwNjBFODJFQjU5QkZBMkQ2MEUzOUJBNjREQTgKLToxMDY2MjAwMDFCNTVFQ0Q3QUM2RkVDMEFBMURGNTIyODUxQkY0NUQxMDYKLToxMDY2MzAwMEFBMjM5NDVEM0YyNUY4MzBGRDBBMjIxN0ExMzg3NDBBNzkKLToxMDY2NDAwMDI1NTRDRjI3N0NCNDgzQ0FFOEE2NzEzOURBMzUwQjNBRDIKLToxMDY2NTAwMDg5RENCNjY0N0NCRDEzRTEzM0E2MDE5NTRCQjQwM0QwNEQKLToxMDY2NjAwMDM0MDA4OUQ4MTM2NDdDRkM0RTJEQkMxNUY5MjJDQjcwMDQKLToxMDY2NzAwMDU5Rjk3NDM3QzRCNjU5Rjk0M0QyREEyOTdGQjRGQzQ1QzUKLToxMDY2ODAwMDVDOUU0QzJGREUyQjMwN0M1NjczQkQ3NzQxNEVDQzQ3NDEKLToxMDY2OTAwMEJDNkVBOTI3NzJFMEVBREZGRjdBOEVGRkVGMUE4QjZFREQKLToxMDY2QTAwMDFFNEZGNTEzM0I3RkNDRTc1RDJFREQxNkFGMUM3OTUxRjUKLToxMDY2QjAwMEExRkI3MURBMkZGM0I4RkREMjk0NEZFQzE3OEEwNzU4N0IKLToxMDY2QzAwMDgwRjY0QTFBMjc3RDUzMThFODczNzcwNjI0MEM0MjhGMDgKLToxMDY2RDAwMDM0MUUxNzgwNjI2NjdGQThFNDFGRUFCOURDRTU3NkJCNEEKLToxMDY2RTAwMEM1RURCMDRGNTJEOTJEREY3NDQ1REJBOTVFMjMyQTA5RDEKLToxMDY2RjAwMEUxREZFNTZBOUQzRjBFRjE5REM3RkM0NkU3QkVCQkI4RjIKLToxMDY3MDAwMERGMzg1N0RDMTY2QTIyNzAzRDk5MjU4NEREN0ExRjNGRjkKLToxMDY3MTAwMDE0NzBCOTc4MTI4QzEzOTdDODNDN0JGMjA1OUQ1OEMwNTEKLToxMDY3MjAwMEIwQTc0NkEwRjZDOTc5OUREOUU3RjA4MTg3RjZCRjgyNjgKLToxMDY3MzAwMEMzRDJCODY5MTFGNThCN0FGNTMyOTc5QjZENzVBQTRENjYKLToxMDY3NDAwMEJGMzhBRjNFQTUzNTk2RUM1Q0YyNzNGQUE0Q0Q4QUQwODMKLToxMDY3NTAwMDM4ODcyRjlDQTBFNzBFRUUzMzk5M0RGRTYwNzE5OTNBODEKLToxMDY3NjAwMDkwOUU5MzhBOTRENTE0N0ZGOTY1QTcyNUJDQ0U3NEZBQzAKLToxMDY3NzAwMDQ1QzlFNzc1NUVDMTZBNEY4QUE5RkIwREY1QkE4NUUwODgKLToxMDY3ODAwMEU5QTQ2QzlEM0ZBQUUyMzlFMTIxRTcyOENBODUyNzRDOUMKLToxMDY3OTAwMDhFQTQwMDVFQjUxQzg0REYxMzBFRkJFOEI1QkJCNDlDNzEKLToxMDY3QTAwMEREOEY2RUM1QUIzQUFCRTdGMDZDRUFBNzQ5OTRFRTdCQTAKLToxMDY3QjAwMDU0NjIwNzVBRjAzMTQ5MEM1MTdDRjZFMkI3NTBCMEVEMDMKLToxMDY3QzAwMDVGOTVBQUNCOTE0RkQ1N0MwMTkwNEZENUQ4RDdCQjJFRTIKLToxMDY3RDAwMEUxN0M4NEZFNjM0M0M5Rjg0OEUyRkVBOTlENkZGNjkwMTAKLToxMDY3RTAwMEYzMDYwNkEwQzNFN0U1OEI1RjA4QTY5RjZDQTcxN0ZEMUQKLToxMDY3RjAwMEIxQzYzRDM4OUQ3QkU5REYyRjdFRjFCNzQxNkY3NTE2M0QKLToxMDY4MDAwMEExMzdFMjk5RDA5QkY5RDdEQTU2OTQzMzI5MkU1MEZGNUQKLToxMDY4MTAwMEM3RUM3NzQxMTg2M0EzOUY3NDkxNjg1MkUyMzdFRjJBNUYKLToxMDY4MjAwMDg1QTRGQUYwODJBMEQwRkU0NDNGOTQ4ODJDRUVFQUMyMDAKLToxMDY4MzAwMDc4RTY1QzcxNTMzOTMwQjkwNkY0Qjc1NEUyMkY1MEJBOTgKLToxMDY4NDAwMDkzRjU1MENFOUIzRkFENTMxMUVGNkE0Q0ExRjY3OTk3NkIKLToxMDY4NTAwMEFCQUVCNDVFMUE4RTlFNjQ3MEMxNkU2Njk3OEMzMkNGRkEKLToxMDY4NjAwMEQ5MEQ0MzNCNjcyRjkwNDM4MjlEQjNENUY0M0M5MkJBMzgKLToxMDY4NzAwMEFCRDU1MjAyRUYxNUY3QjJGMzExNkRCMDRDRDIxRTRERUQKLToxMDY4ODAwMENFQjdDRTUwMUZGRjg1RjgzQTcyNzFFQkUxNzE0OUNFNTkKLToxMDY4OTAwMEEzRUZDNTNGMzlFMDQ2RkQ5NTBGRUM1Q0FCNkQ4RkEwRDMKLToxMDY4QTAwMDVFRjFFNzc3RTJCNkYxQkM1OTIxMTI3Q0U1MTUxQUE1MzUKLToxMDY4QjAwMEI4QTU5MUJCRTZEMTdEN0M1NzAyMkE0NzE3NzA2MTgyNEIKLToxMDY4QzAwMDhGOUQ5QjlGQTgzNzY2MTFCOThCNDQzQjA1MTFGRDYyRDQKLToxMDY4RDAwMEEwN0E5MUQ4QjlEQ0FFQjNBRkZCRkQ0RDQyMDRGMUVCMjkKLToxMDY4RTAwMEM5MTBGNkEwMDhGQUVGRUQzNERDMTZCRDRDRDZCRDA3OTIKLToxMDY4RjAwMEQ3MzVDRkJGQkNDMjc2QzBGNTlENzY0MTRBN0JFMDJGMkQKLToxMDY5MDAwMDIyRjdCM0E2RDdBM0RGOTUwRjBDQ0U4NzM3MjdFQUQxOUUKLToxMDY5MTAwMDRFMkM3NTQ3RUVBN0Y0NzdGODA3QkRGMTI1MUVDNzVFMkMKLToxMDY5MjAwMDMzRDMxNDIyN0REOTZGQzkzQUY3NzRDOUIwMTU5QjlGMzAKLToxMDY5MzAwMDkyREU5NkY4Q0UzRDc4MEUxMTdEQjM4NjlGNjM3NzQyNDYKLToxMDY5NDAwMDM0ODAwRkNGODI0MEUzNjY2N0UxNDhFMDFBMEI5RDFGNTkKLToxMDY5NTAwMDEyMTVCNjRFOEI3Q0IyREIxMkI3NUREQkNBREFBNkZFMkYKLToxMDY5NjAwMEI5N0I5N0JEN0QxNzJDQ0E5MTA4REVFRTdBNEM0NjBGOTUKLToxMDY5NzAwMDBERUU3MUY4QTM3NUEyNDZGOUZCNkVBODZFNDIzQzM0ODkKLToxMDY5ODAwMENBNEMwRUQ2NjgyMDhEMjAyRUQyODYxRjNGMzExREVEQjkKLToxMDY5OTAwMEZGOUQyMkYzNkYzRTIyRkNBNTVCRjRDRDNBNUY0MjQxOUUKLToxMDY5QTAwMDdDQkRERjcxQ0REMkVCMDFDNzI3OUE0NkEyQkY5RDAxMDYKLToxMDY5QjAwMDQ5Q0ZDRDNCNUFFQ0YwMEQwNkJGMTM1RTgwQ0QxNERFRkYKLToxMDY5QzAwMDU0NzA0ODZEQUU0ODMyN0I3QTlGNjlCNzcyN0FENUFBMDcKLToxMDY5RDAwMDgxNDkxODBDQjlFMDYxNTdBMzBDQTg3RDYxQkNFNzQ5NTcKLToxMDY5RTAwMDM0OTA3NTBFNzBGQjkxNTg0MjkzNTlGRUEyN0EwNjVFNjAKLToxMDY5RjAwMDA3MUI3NzQ4RDRCOTNFMUZERUI4Mzc1MkFDQjc0MUVEMUMKLToxMDZBMDAwMDU2OTBGRkFCMjRBM0RDMjVGNEM1QTE1NEI5M0EzMjhBRDEKLToxMDZBMTAwMDZDNDk3RUE5QjQ5M0Q4RUFENjdFMkQ0M0VDNTcyRTBDNTAKLToxMDZBMjAwMEQwQ0YwOUVGNjk0RDM1ODRDOUZERTFCRTE5NjJDNzUwNjkKLToxMDZBMzAwMDJFMkUwOEIxNEFFQUZGNzNCOEREODg2NzExQUYxMkE1QTAKLToxMDZBNDAwMDI3OEQ4Qjg0NzA1RDVGMEJGQUQxMUU1RjA3QjU0NzNDQzUKLToxMDZBNTAwMEJBNjRBMzc3OTVBOTA3OEE4MEM2NzNEMjhBRUNDRjlEQzIKLToxMDZBNjAwMEYxOTIzRjg4NjZGQ0JFOTNDQTE3MEQ3NTkyMkQwNTU0QUUKLToxMDZBNzAwMDVGQTc4OEY2RTE0Q0U5NEM2RjdGQjI1RTI1RUU2QjMyODIKLToxMDZBODAwMEVENDRGNTRCMERENzJGOTVBMDNGMzRBQjg0Q0ExNzhEM0QKLToxMDZBOTAwMEMzRDVDQzFGNjMyMDFDMzVEOTdBMThGRDcwMDlDMjExRUIKLToxMDZBQTAwMDNBODc4M0FGQUEyRUJBMjA2MUYxQUJBQkE0MUUwNUU1RUQKLToxMDZBQjAwMEE4OEFFODZGRUJGRDhENDExNjI3NEVBNUI3NjU1MDc1ODYKLToxMDZBQzAwMDVGMTFEQUIxMDJDNTkzQTg5MUI2NjVERjlGQjRCQUNBNjcKLToxMDZBRDAwMEI5MUY5NEJFNjQwMDdGNzc2MzkwQzU4MUQ3NkMxOTlCMDIKLToxMDZBRTAwMENFRTIyOTc2N0Q3NThFOUYwRjNGREZGRjAzMDVGRDk3NzAKLToxMDZBRjAwMEIzQ0Y5Q0I4MDlGN0I5RkVGRjhBQTA5Mjc1Q0ZFREY3MjYKLToxMDZCMDAwMDQzMjczRDM3MTIwQTlFMUJFQjNBQzRBNDcxNzY4MDA2RDgKLToxMDZCMTAwMDk2MTdGRjU3M0ZBNUQ3QkFFN0REODkwNTY0RkNCQTE3N0EKLToxMDZCMjAwMERGOUYwNDA0QkU3MzlCN0IwRThENDJGQkY5MTkxNzhCMEMKLToxMDZCMzAwMDc3MUJERDkzMTY5M0ZCRUIyNDU4MTU0RDMyNUZBMUM0RjAKLToxMDZCNDAwMEVDRDQzMzNGNDk1QjhFRjJFQjZBM0I3MDNCOURCNzdERTMKLToxMDZCNTAwMDk5RUNCNjlDREZBMzI0OTlBRTRCRkE0NUYwQjlGMUI0OTkKLToxMDZCNjAwMDJCMzEzNjg5NUY2MkU2MTlDRTNDRUQ2MkYwQkQyNDUzQ0QKLToxMDZCNzAwMDNGNkY1RERCMUUyNTQ2RTBBODZBRkI5OEVBOEJEOUZGRDQKLToxMDZCODAwMEZBNkMwMEYxNTBGNTkyNjhCM0UzQUFEQUM0NEVGNzI0MjgKLToxMDZCOTAwMDdBM0Q4MTU3OEM5RkJBQTYyMzlGNzA3RUU5RDg0MEUzNDcKLToxMDZCQTAwMEE2OTVFRDBGN0UyQzA2NzBCQzVENkYxMUJDODQzQjExNjkKLToxMDZCQjAwMEFGRUY4OEUxMDVEOEZFRDFCRjA0NzQ4MkFBOEYwRTNGRTMKLToxMDZCQzAwMDE1NDBCQzkyNzk1NzJCRTkxODlGQjdGMzM3Q0U3RjMxMjgKLToxMDZCRDAwMEIzRkY3QzAwM0QzNDhGNUJENUJFODVBREU3RDA4QjFGMDYKLToxMDZCRTAwMEUxMkY3OUZERTNBQkZGMjREOUYzRTNEMDM2QjRGQ0VEMUMKLToxMDZCRjAwMEZBNjdDRjNGNjk5MEY1Q0UzQ0ZGODcyNzBEMDJGN0JEQkUKLToxMDZDMDAwMEZGRkRDNzI3QkY4NTcyRjkzMzhGODY3QUJERUE5OUI3MzIKLToxMDZDMTAwMDAyNjBFMUMzQjUxMkQzQUZFNzBBODhDQjQ0RkE5REZCMEIKLToxMDZDMjAwMEI1M0I4MTA2QzFCOTU3N0UzRjVBMjdGQjNERjdEQzlGMzQKLToxMDZDMzAwMDczNzREMkJGRTY5NUI5QjlCOEZGOUExNzY2RTcwRTY0QzgKLToxMDZDNDAwMERGMjI5RjI2REM1NkI4MTI3NDdFRkQyNTE3MzMxNjVFQjAKLToxMDZDNTAwMEU2NTcwNzVEMEU3NjFDMUM4RDcwOUUzREU2MEU2MzVBNEUKLToxMDZDNjAwMEFFOEFEQ0FCOUQ4QTc0REE0MENGNTk2QzZGMjJGOEFERTYKLToxMDZDNzAwMERDREZGQzMxRUE4N0ZFNzgzNjQ2MDkzNEE4NDVENDYwNkIKLToxMDZDODAwMDEwRTlGQ0ZFM0M0QTJGRThBMUU3QTNCMzdGRDU1MTQyQUYKLToxMDZDOTAwMEM3QzlBOUU5NzYxRTNFNTU1MENGNTVFRERGQzJENjczNjAKLToxMDZDQTAwMEQwRUQyQ0ZFNzI2RDdGQkE2RDc2RDBFRDNDRENGQkZEMzUKLToxMDZDQjAwMDNDQ0M5Nzc3OENCMEU1MDc3QUVERDRERUI4NzgzNDNEREMKLToxMDZDQzAwMDNBODA3RTMwRTU3RjMwQkNEMkZDMDk4MTJCMkE0NTFFRkMKLToxMDZDRDAwMDkxNTA4RTlFNEZFQkE1RUIwMkE0RUJCM0U3NDcwM0UxODcKLToxMDZDRTAwMDhCNTM3MkNGRUQ3ODFFRjRCQ0UyRDYzMDNFQjBFRTk1RjkKLToxMDZDRjAwMDc3QTg1QzlEN0JFMTRENDVBN0U3MThGODVDQzRBRTNDRTYKLToxMDZEMDAwMDA3QkQzRjg3RDFDRUFDNjQzRTNFNTRFREYzNzdCQTAzNjYKLToxMDZEMTAwMDdERjRBOTRDMkMyQ0Q3MDNGNEZFMDk3QTNGQzFGOEJEQjEKLToxMDZEMjAwMDMyNzE2MDg5MkIwOUJEN0UyOThENjFGQTNGOTE0REYxNDkKLToxMDZEMzAwMEIyNjFERjZGMTVGMEQ5RTlFODlBODk3NDNDMzEwRkVGNDEKLToxMDZENDAwMEE3QTJBM0I5N0YwREY3M0ZDMzQyQ0Y3RDRDNEU5REZENTcKLToxMDZENTAwMDJCODkzQ0UyNzlENzRCRDc4NEVCMUQ0ODIyOTdFN0Y2ODUKLToxMDZENjAwMEI4MjUzQ0VGQ0VBMTVEOTUzNDFGQ0FFQzk5RTFFNjREMDQKLToxMDZENzAwMDBFMzlFNURBQ0M5QjcwM0NBNEU2MEYyNkRGODNFRDZGN0QKLToxMDZEODAwMEI4RjhFQjkwNzQxQjFGOTk3ODNDRjM2OTcyN0Q3RjkyODEKLToxMDZEOTAwMEVCOEI0QTMwQ0E0NzVFRDlERjBFOTEyMDZBOEMwQUY1MjgKLToxMDZEQTAwMEMxN0IwNjFENTJDMjdGNjc5RTExNjlGQ0E3QTlGRDIwMDkKLToxMDZEQjAwMEQ1REI0RTNENTE4OTcxQ0IyNEVCRkREMTVDRUZBNTAzQjIKLToxMDZEQzAwMDkzNTA5RjlENzlGNTI3OTQzRjJCRjc5RjUwRDBCRTNGNUUKLToxMDZERDAwMEQ0RjYyM0E1QkJCODRGMUVGMDNDNDg1OENFODMzMzNGQjIKLToxMDZERTAwMDNDMzA4OUU5ODFFNDcxNTE1QTYwNDdFMEFDN0FEOTNFODAKLToxMDZERjAwMDdGRDVGRThGNkRGM0FGMzdEQUE5N0QzMEQ4M0ExRjQ5QzIKLToxMDZFMDAwMDkxNjVCOERGOEYwRUNCRDQ5RkZDQTg1RDRDMUEyN0ZFOEUKLToxMDZFMTAwMDBGM0MwRjJENzY2REQzOUJGMzdFOEJGOUFEOTIyMzVFRTUKLToxMDZFMjAwMDFEQ0ZDRDhFQ0Q5MURDRUQ2OEFGMUQ5MTgxRTYwRkE0MTUKLToxMDZFMzAwMEM4MUZEQ0E0RERGMUE2NTdDN0JDNzNDNzkxQTVBMjZFMUQKLToxMDZFNDAwMEYxNDM3RkVDQzBFNzhDQTNDNjZDM0Y5OTZGNDYzN0YxRTYKLToxMDZFNTAwMDdGRjVGRTdBNjNFNjcxRTI1NzU5RjhBMEU2Q0RGMjVDNjEKLToxMDZFNjAwMEQ0RjdFODg3RUFFMzcxQkQ3MDEwRkQ1QzMxMzBBRjlDNjgKLToxMDZFNzAwMEU1QTUwNUNEOTNGNEJDNjZGM0M5QkUyODhENEZDOTlBMkMKLToxMDZFODAwMDAwQkE2NURFNTE5MEE4QzczQzNBRjg3Q0NFQkM0MzU0QUEKLToxMDZFOTAwMEI1RTY5Nzk2MUYzRTgwMkU2NkQ2RTI5N0YzNzA5RTAwNjkKLToxMDZFQTAwMEM0QjUwRkE5RkQwOUUxNEIwM0Q4NUZDRTNDODM4OUNGNjAKLToxMDZFQjAwMDVFRjk0QjkxNzc0OEQzNkUwRjFFODBGRUYzRjVDRkFGOEUKLToxMDZFQzAwMEM0NTRDQ0FGMzRGOUQ2QjQ4NDJDRjk5NUE2NjBCRkZDNzkKLToxMDZFRDAwMDRBNDQyNjc4Njg3MTI1OEY0NzhDOTFDQkU2RTA3M0UyQUYKLToxMDZFRTAwMDFEQzc5MjNENUYyRTMzM0VCRjExQkFFRjVGOEQ3MDQ2RDYKLToxMDZFRjAwMDU5OUU2Njk2MDM1RjVGRTJGOEZBRDk2NEIyNzFBMjQyQzYKLToxMDZGMDAwMDRCNDE5NzY0ODJERkQ5NEIyMjcxOTlEQzlGQkJCMkU3N0EKLToxMDZGMTAwMEVBNTc2OTc3OUVBNzMxQzYwQjk3RDI4NjhFQkZFMUU2MDYKLToxMDZGMjAwMEUzNEFERDhCNTZDQkQ5ODNFN0UzNTJFNTg1RkJFMDMwQkUKLToxMDZGMzAwMEI4M0Y5RTY5Q0I0RjFDN0NGNzAxMUFBRjk3QTFCQTI1QzkKLToxMDZGNDAwMDY0ODkxM0U1NzQ3QTIwODI3MUZFMkM5RERBODczOTlENUQKLToxMDZGNTAwMEY3N0M2NzJEQzY5OUIzRjJDMzFFRTgzRjhGNzRGMTdBQjAKLToxMDZGNjAwMDFBQ0YzMEYzRjQ1MjdFODRDNkU1MjU0RDJGMTVFOTNBNDkKLToxMDZGNzAwMENCMjI5OENGNkZENjgxREExRkNEQzE4MUUzMzU1M0U0QTAKLToxMDZGODAwMDk4ODFGNDk0MkVERTQwRTcxNTU0NUU1NzMwQzQ3RDdFMjAKLToxMDZGOTAwMDdCNzE4MEUyMzk0MEYwOENGMjRFRkQxRkRDREY3MTE3MEYKLToxMDZGQTAwMENGODc3NzFCMjJFNkMzNEY2NEQwRkM0MDQwODIyMjhDRkYKLToxMDZGQjAwMDA3NUM3MDc5QzM5QjQzRDAyRjFGOUU4QTdGQjc0Qjg2OTcKLToxMDZGQzAwMDRBRTMyNDdBQkY3Q0Y4MkVEOTEyNEY1MzMxMUY0RThCREYKLToxMDZGRDAwMEY5RUNGOTcwRDU1NzEzN0M1RDQ3RkZDNjYyRUY4NkZBNkUKLToxMDZGRTAwMEZBRjVDOTlEMjMxRjhFNzM2MTVDQzY2ODlFOEQ3NjQ1MzgKLToxMDZGRjAwMDczMDZGMEZDMzhDQjg3MzdGMzdDRjhCMzhERDM2NkEzRTgKLToxMDcwMDAwMDlFNkRGNjk4Q0Y2N0IwRkU2NkRCRjhGNUFCMTExRkFENEQKLToxMDcwMTAwMDAzQTFFREQzNzJDRjY2RUM5RjM1MEFBQTY5RkQ5OTE0REUKLToxMDcwMjAwMDg1NUIyQzdBRjBCODJDQjEzQTU1MzlGMkJDNkNBRDI3OUYKLToxMDcwMzAwMEUyRkM2MEU2N0IwRUJFRkI3QkNBNTc3ODFEODM3NDI3OUIKLToxMDcwNDAwMDdDODU3MUE5OUNDRUQzNjBENUFCRTZENUU0OUY2NjdERTcKLToxMDcwNTAwMEUwRjhBRTdDNzEwQUNEOTM5OEVENDA1NjJDMTI0OUMyRUYKLToxMDcwNjAwMDQ3NTdCQUQ5Qjk2M0YyNzEyMDA4MDlENEFGODE5OUIxRjEKLToxMDcwNzAwMEVGQUM0NUJFMEVGQUMyNjkxNENFMDc2ODlEQzkwRTBENkQKLToxMDcwODAwMDc0OUFBNzcwRUM2Mzg3QkU5MUYyRURGOTJDQzJFNTE2RjUKLToxMDcwOTAwMDc5RTkwRkZGMEQxQzdFRTYxRjlGRDc3ODFDMzA2ODQwRjIKLToxMDcwQTAwMDJDMDk3Q0YyQzUxMkJBOEYyOTcyRTRCNzU2M0M2NjVEOTIKLToxMDcwQjAwMDkxQkNDRUY2MEU4NUVEQTczMUJBOTJFNUQxMkJFQzc5RDUKLToxMDcwQzAwMDRGNEMzMzVCRTNBNkQzNUNCMTUzQTgzN0NDRkNCOUEwREIKLToxMDcwRDAwMDQ2Nzk3RUMzMzBFM0VBQzFERTc4QjY4RUY1ODBGNzFBRDIKLToxMDcwRTAwMEE4REZFNDk1RUQ4NjBCQUY1OTJDMUYyMkFBQjE4RkFEMTYKLToxMDcwRjAwMDdDMkM2OURENEMwRTFERjlCREI5RTIxOThBOTcxRDgzMDAKLToxMDcxMDAwMEQwNkY1QjFEQ0JBNzZFQUREM0E4QkRCREE1MkU0OERCNTAKLToxMDcxMTAwMENENzUzQUJEMzZENTQ1RThGREZFRkNGNEYzRTAxREM4NUIKLToxMDcxMjAwMDQ3M0UyRkNEMjcwREM2MjcwRkQ1ODVFOTdDRjFCQTk5QUIKLToxMDcxMzAwMDZDNUU5N0M5RUZFRTA2RTQ3NzQ1MzBFNUM3NEZEQjNFNUUKLToxMDcxNDAwMEQxOTQ4RjJDREFERUVFNjJDRkFGNTE0NjUzRjkzMUY5OEMKLToxMDcxNTAwMDc5QjBGRDg5ODlFOTk0QUVDMzlEM0ZFNTdFNjdGOTg2RTQKLToxMDcxNjAwMEI0REZGNDRFQjZFRTUwRDc3MTNCRDZEOTMxNEJBNTdBODkKLToxMDcxNzAwMDc5NDdGRTIwRUJCNEIyNzUwNjg3OUZFMTZCREI4MUQzQzQKLToxMDcxODAwMEI0NUVDMDRERTRERjQzRjZFMUQ2MjI0OUU1QzE5NDlGRTkKLToxMDcxOTAwMEZFRjNCOEE5REU2RUNFNjJGOTRGQjlEMDE3NDE2NURFQjUKLToxMDcxQTAwMEFDRjM3QzIxOTE2QkI0N0ZFNEEyOUMzMkJDMkY4N0FGRkYKLToxMDcxQjAwMEEyRjVEQzcyQjE4RkU2RTNFNEMyOUMzQkIwQkRFREMwNEEKLToxMDcxQzAwMDE2QUQ4Q0VBMDE4MTlFNUZCNUQwMEQ1ODk3NEJDNDg2RjEKLToxMDcxRDAwMEM2NjNFNUMyQTJCNUQ4NUY0M0I5MjQ3MDY0QkE5OUZGMEIKLToxMDcxRTAwMDI0MTc1RTc3Mzc4RTNGMzBFNTkwREU5MDg1RTcxNkUzMTMKLToxMDcxRjAwMDNGRTg5NjZDRkNFRjk0RkI5NEZBMkI2OEFGNUYwNEU5RDAKLToxMDcyMDAwMDRFNDBCRjc0REI5NEJCOEFBODdDQUE5NjdBQzYyNDc1Q0MKLToxMDcyMTAwMDdEQTYzRTIxN0E2MzhENjJBOUUzNTQ2MDhFODE3OUQzODUKLToxMDcyMjAwMDlEQjdERTE1NEVFNjJGOTFGMzc0OUQ5MkREN0YxRTczQTAKLToxMDcyMzAwMDdDODUxQ0REQTBCMEJBNzRCMEQ3QTUyN0NGNDczNzA3MkYKLToxMDcyNDAwMENEN0M3NEI1OEFFN0E4MTRFQ0FEQTc1QjkwNDdGMEMyN0IKLToxMDcyNTAwMDUyQTlEMDVCNEZFNzMzRUJFOUMyMkNERkQ1NEFGRTI1QkMKLToxMDcyNjAwMENCNEIzQkVCQzQyRjU3M0RERDE2QTVCNzlFQUUwMEVCRDUKLToxMDcyNzAwMEU5N0UyQTQzQjgxM0YzRUE2Rjg5RTFCRDdBN0ZCRTczRDIKLToxMDcyODAwMENFRTc3QzJGQzIzQzA3NTJDOTY1QTc2MkNGODdFNkM1MEYKLToxMDcyOTAwMEVDRjk1MEI4RDM2MzVCRUYzNTk0OTdFMkMxRjVDQkE4MTYKLToxMDcyQTAwMDBBRkIzQzA1RDVGNkZBRDcyQjZBMzM2REVEOTAzMUQyNDcKLToxMDcyQjAwMEQ2RkZDQTk2MzFCNkU3NjM1QkFGQjIzRDFGQkY2QkFBN0MKLToxMDcyQzAwMEFEM0QyMTcxOURBREZGRDU2RDY1QjZGNkM0RjZBRkQ4NjUKLToxMDcyRDAwMEZBNEY3RTY5OTFBRDNEQTU3Mzg1QURGRjM1NUQ2QjZDNTEKLToxMDcyRTAwMENGQTcxRDVFNjc3QjNFRTNEODQ2NUJGQkRBRUU2RkRBMjUKLToxMDcyRjAwMEZBRDcxMkYzNDY0MUI5Q0RFMkY1QzI1OUI5ODIzNUNGN0EKLToxMDczMDAwMERBOTI0RENFMjVFMkI3RUZDODI2MEM0M0UzRDlBQ0ZFQTYKLToxMDczMTAwMDRBNjE4RjdCRjM4MENFNzE5MkFFNDQzNDlBQjcxRjM3QTcKLToxMDczMjAwMDA3QUYyMEQ1RDBGMzU0RDI3M0NBNzQ3QTdGRkEzQ0JDMkQKLToxMDczMzAwMDQyODlCRDBFNTZEMTU5MUQzMUZBNjVGNjdDQkZCRDFFN0UKLToxMDczNDAwMDU4MTFCN0QxQjIwNkY3RjEyRjc3QjkyNkY1QTdBQjkyNEUKLToxMDczNTAwMDZGOTc4M0ExRDYxM0NCQkE2M0RDMzBFNUUyOEMyOTE3OTMKLToxMDczNjAwMDA1NDQyRTY4M0NFRDUzMTFGRDFFOThFM0E3RjY4NUM1MzQKLToxMDczNzAwMDNGQTI3ODM0RkRBMzFCNTQ4OEEzQzk2OENBNDVFOUNBNTMKLToxMDczODAwMDlFNTFCNDhFQUZENzJGNzIwQkMzQTk1RjMzRTUyRjYwMjgKLToxMDczOTAwMEQxRkI5MUFDM0UzREQzM0M3MzY4RkE1NTRDNUM2M0IzNzIKLToxMDczQTAwMDBGOURENzg2QzBCQTU0RkEzMUUwMUU0MDNGNEU5MUEzREMKLToxMDczQjAwMDE5NkVGNDJGQTU4ODAxOTZGODBCNTRDQjM2Qjg4NzBBQkUKLToxMDczQzAwMEU3NjczRDA3NTYxMzg2QjNFQTE1MTM0RTg1RTg2RENDODMKLToxMDczRDAwMDJCMzUyREJFODkzQUY1NTAwMzM2M0VDRDU5MUVBNUZFRkMKLToxMDczRTAwMDA5QjEwQkFGNzZEQkM2MzNGQkYwNkZDRDRFRkU4RDZDNzMKLToxMDczRjAwMERGQTc2OTJGOUI3ODBGODRDMkI0OUUwNEYyMDQ0MDdGRkMKLToxMDc0MDAwMEFFNjk1NjJDODhGMUI0MTZFQzYyRjEwRjFGNzA1RjQ5MUIKLToxMDc0MTAwMEU3NjkwQzJBMDJENkI5Mzc3NkIxMzg3QjgzNUFDREUyQjgKLToxMDc0MjAwMDBFNzIzNThEQkYzNDY0MEI1QUIyM0FBRTNCREQyQ0JGQzEKLToxMDc0MzAwMDJCRDYzRTM4NzZERjAwN0MyNTJBQzlFMzBFMEQ3QzdDRjYKLToxMDc0NDAwMEMzODE2Rjc0QjE3MzUyRDFEMTlGMDZFMjM0QkU2RkM5NEMKLToxMDc0NTAwMEJGODk3MDM4MUE3MkUxM0EzQkU4M0EwMTBFNTdBMDQwRjIKLToxMDc0NjAwMDgwRkFEMEUwNzBERUNDRkQxREE5NzZDQjgwNzA0QTA4OTIKLToxMDc0NzAwMDY3MTJCQTk4NzBDNjExQ0U5MkQ0NzBGQUIzQ0I2ODdFRjgKLToxMDc0ODAwMDUyQUFERDQ2RDczMUYxQkFDQUNERThFNTg0REJDNEI3RUMKLToxMDc0OTAwMDBDOTFGMkQ5RDgzRUYxRTUyODREODcxMkIyMjNCRkVGMDcKLToxMDc0QTAwMDk4QzlGQzY2QTJEODZERkM2QUZBMkQ4NDVGRUI5MTVGRTcKLToxMDc0QjAwMDI1OERGOTJGRTZGQjA1NUY3MTZCMENBRjlDOEVBMDY3RTUKLToxMDc0QzAwMEQyQjg0MzIwMTZBNzc1RTdGRTE4RjNCN0ZCRjQwREUzMTcKLToxMDc0RDAwMDFCQkYxQzAxRUMyRkY5MDQ5QUJGNTM3OEJDQzJFQ0Y3MTgKLToxMDc0RTAwMDlFOUJDNTg5MUE2Njc1NDc3MTFGQ0RENzRBQjAxOUY1OUQKLToxMDc0RjAwMDBGRDYzNzYzRkMyRTlGRUQzNzhFRkIyMkYwRkNDQzlEMjAKLToxMDc1MDAwMEMxRjg5MUFGRUI4NTI1RTlCNDEwNTJEQzFGMUM0ODBGODAKLToxMDc1MTAwMDdCMTE3RjIzRkFFQkUzMjdEREZDQkRFMDNDQzg2M0ZBNzcKLToxMDc1MjAwMEI4NzgxOUU2QTM1M0NERTNCNDRCQ0NGQUU3RTFEN0I1NkQKLToxMDc1MzAwMDU3RDMzODQ2QjM2RjYzMTdDNjgxQ0MzODFDMDQ0QjkyQkYKLToxMDc1NDAwMEM2Q0RGQkYwQ0FGMjg5N0RGNDVEQTY3NzEyRkE0OUQzNjUKLToxMDc1NTAwMEE2NTIzRTY5Q0VFN0Y0QUQ3NkQ0RTk5QTc1REQ5Q0FFQ0QKLToxMDc1NjAwMDY2OUMxQjgyMkNCRTYzRDJEOUQzOEJDRkREMDNFMkQzQzIKLToxMDc1NzAwMEMzRTVDNjg5Q0ZBRUZGQTFGOEZDMTFEQTI4RTRFQUY3MkIKLToxMDc1ODAwMEIzRjdDMkUxRTAzNzgwRTY4REYyRURGMjY4OEUzM0Y5QjEKLToxMDc1OTAwMEREQjlGRjUzNkU3RUJFRkYwRkREQkZDOTBGQTlGQjFCMTgKLToxMDc1QTAwMDQ5RkQxNDMzRkZFOUU3RkNBNkUyREI0RDQ0RjFCQzNFQTQKLToxMDc1QjAwMEYzNjRDQjk1NTk3OEZFMzJCRkRBM0YzMzRFREZBQjk1OUIKLToxMDc1QzAwMEMxRDA1MDJGRjhDREZBRDkxMkZCN0JBMERFNjJCQjlENTMKLToxMDc1RDAwMEE1M0FGQzExODVENzJERjU3QkNGOTVEQjYzQ0VGNzk3QzgKLToxMDc1RTAwMDdBRjFFQkEwRDc2ODM1NDVGRTZBODhFRkZERUNFNEY5NDcKLToxMDc1RjAwMEI0QkM5QUQ2N0FGNDZGRjNFRTY0NzVGNkJCNjU1ODg1MjEKLToxMDc2MDAwMDc1NzcyMzJCMENDMTlCODVGOTk1RDA3MzY5NjRGRjc5M0QKLToxMDc2MTAwMDJGM0Y1QzNGMEE0OTcyQTcxRTQyQjNFMTdCQUE2RThCRTMKLToxMDc2MjAwMEVGRTdERERCNUFFQTY1Q0ZBN0UwM0NCQjU0QTY3N0YzNzIKLToxMDc2MzAwMENBNUI2OTNENTlDMzBCRTNEM0QxNkY3OUVEREQ2NTFBQTAKLToxMDc2NDAwMDlFRjc5RjY0MTVEMkI4RUVEOTE3REQxMUNDRUY5RENEMTIKLToxMDc2NTAwMDg0MEE1QUI3RjVFMjhDNDM2ODk3RkZBMUFFMkI1M0IyNjgKLToxMDc2NjAwMEYwQzlEOTFGQkUzOTVEMjY0NDNBRkJGQzlCRDMyNTRBOUQKLToxMDc2NzAwMEFDODRFRERDREY3MEU5NTdEMzExNkVBMzBDOEFBQTMxMUMKLToxMDc2ODAwMEJGQTYyOUY0N0Q5MzJBOTVFNUIzQ0M3QTlDOUQzOTRBMEYKLToxMDc2OTAwMDEzNUU3RkUyNjFGQTM4Mjc1N0Q4ODFFRDVBMEM3MEExNEEKLToxMDc2QTAwMDlEQzBFM0VERDc5RkQxOTc2MTNENjQ0Njk3RUNDMjdBQzgKLToxMDc2QjAwMEI5ODc1RDg2RTEyM0Q3MEIyNzFFQTZFRjVEMkI5REQ1RUQKLToxMDc2QzAwMDE4MzYyMUY3QzMwNzExRTVDNjU4RTY2NzVDMDg0MTUxMzMKLToxMDc2RDAwMDg4RTg3REVGRTFFQUYxRDQzRTc2RDQyMzk5RkMyRkNEMDIKLToxMDc2RTAwMDA2MUE5N0U4Qjk1NTRERUMwRDYxN0M1OEZGRjY0QUIyODEKLToxMDc2RjAwMDVFQzM0QTg5RDZDQjZDOTcwRUFCNUExMjNERjY4NjY3QUQKLToxMDc3MDAwMDhDMERFRjdFMUUyRjNFRjhFRUREQURBNTY0RkNDNjI5ODQKLToxMDc3MTAwMEFDOEVEQTc3NjI0QTNBMjQ5MURGRUQ3NTMzRTlGQTgxNkIKLToxMDc3MjAwMEJDOTNFNUE1MDhENkE3RTRFRUY0M0VCRkM3Mjc4MTkxMzgKLToxMDc3MzAwMDRFOEU0ODM5MjQxODMyQzE4QjZGMjZDMDQ5MEJERjM1NzUKLToxMDc3NDAwMDA5MTBEMUM4RjMxN0VCODBDRUQzNTFBN0QyNkI1QjlENDQKLToxMDc3NTAwMDM2QjY5MDE4RkFERkFEMEJEMkVCNjM3NTNBQkQzRTUyRTgKLToxMDc3NjAwMDU3NDQ5RjNGNTQxN0I2QzkzREFFNzdCMjg4Qjc0M0E5NzcKLToxMDc3NzAwMEU1RjY3MjVGRjE3REQ4OTMxNjM4NzY0RTI0NTI0RkU4QzUKLToxMDc3ODAwMEI1OTNFNzhCMUUyQzlFOUFCRTY2ODA3Q0MzRUVCQUFFODQKLToxMDc3OTAwMDExNzNDNjcyNjQxMUZBRTVENzY4N0JCNjBFMDBGRkVFNkUKLToxMDc3QTAwMDdBRDdBQTQ1OTgzN0I5NEY4QUVFQTVGQTMxOTZCN0M4NjUKLToxMDc3QjAwMEEyMUYxQkU1NTgxRTEwNTZCQzVGQzk5QzMzMjc4RkNBRjkKLToxMDc3QzAwMDIzOTU5NzkyQzMzMUMwM0E5QkJDNjBBQjBCRTNENjc5NEIKLToxMDc3RDAwMDQ3RDk3REYzRkQwNzRBMkYyMjY4M0ZDRTlBRTM5MjUxQTUKLToxMDc3RTAwMDZGMTY0MzNCODJBNTE0QzdBMDhDRjQ5RjkxQkRBNDE0Q0YKLToxMDc3RjAwMEVGQzM0NEZCRkRFOTBBOTM2RjlDQjc4QzVDQTdBQUQxNDkKLToxMDc4MDAwMDM2MTVFREE2Q0M1REM2QjM2NDNGN0ZFQTcwRUI5ODg3NzIKLToxMDc4MTAwMDc5RThENTNGMkIxODdGOEZGRjVBNTFEMThFQzk3QkY5NUMKLToxMDc4MjAwMDA0QUQ0Qjg4QkJCQTE1NjI5MkMxMUIyRDZCRTc0ODQ0NkYKLToxMDc4MzAwMENGQzQ3OTNFODAyQTE2QzIyNzcxRDRCMTM0OUVGOUZCOTkKLToxMDc4NDAwMEY4OUM2MjdDRkYyNDc2REFEQTdGQTczNzc2MUZCNjUxODAKLToxMDc4NTAwMEYxQUE0MUMyNDcxRUIzRkY5QTc4MjQ5RkI0Nzk3REVCMDkKLToxMDc4NjAwMDFCMkRBQkUzMDY2RDkzRkU1MzU4M0I0RUM2QkY5ODExREMKLToxMDc4NzAwMDFCMjUxMDdDRjlFQTU3QzVCQkJFODQ2REIzRkZBQTM4M0YKLToxMDc4ODAwMEQ2QzMxRTUyNTkzRDI2Rjg2MjIxOTRCN0RFQjY0NkRBQjkKLToxMDc4OTAwMDdFNEI1QjYyNkQ1MEQ5RDVEQ0VGODY4MzdGM0U4NDdBNjgKLToxMDc4QTAwMEFFRjI2NTU3M0I4MjQ2RjQxRUMzRkY0QjBGRDNFRjI0NjUKLToxMDc4QjAwMEI0RDU3NTY5NzE5OUQzREZBNDAzMTFDOTA5NDFBMDdFQkMKLToxMDc4QzAwMDhBOTI3MDI1QzYxMEZEMzE4MTdGMTcyMkFGMjRBMkQ3N0UKLToxMDc4RDAwMEEzN0U0REM4NjFENDlCNTc3ODk5REQzODIxNDFFNkIxMkMKLToxMDc4RTAwMEM4RDU4NDE0REYxRkExNzk1OUE0RTMzNjU2RDdEQjhGOUUKLToxMDc4RjAwMEJGM0NDQzlFQUYwNTYzMkJGQTBEQjA1RkQ2NjhCRTkwM0YKLToxMDc5MDAwMEM3MURDRjk4RTcxQ0Y3M0ZFRkY1QjBBNkJDRDlGMDVFRDYKLToxMDc5MTAwMDg1RkE2N0I1NDRFMzVBRUI0M0FEQTUwQTU5NjdGRDRGQjUKLToxMDc5MjAwMDQyNjE3MkIyNDJBMzg3RDUxREFDQ0Y2OENGOTk0QUY4QTUKLToxMDc5MzAwMEE0MzFDM0RFN0U5OEQ3QjkwNjMzOEM4Q0NDNjJBQzBCRjUKLToxMDc5NDAwMDc4NzgzNEU2RUQyQkExRjVGNjZGMjJCQ0JGNjRGOUMxNUYKLToxMDc5NTAwMEQzMDdBRTREQkY5RUI0MzdGQzkyQzU3NTM3NzRCQ0E5MzIKLToxMDc5NjAwMEM0NDgzRkMxQzNFQjA5M0FBNjdDMDVGNzU3Qjk0RDAwOUYKLToxMDc5NzAwMDIxQzRFNDMzMzI5RUUwMzlEMjdBOTU0NEY4NjRBMjc3ODgKLToxMDc5ODAwMEM0NUM0RjAxQzBEMzYzMjI5QTQwRjg2MEZFRDY4MjQ2QTEKLToxMDc5OTAwMDE1REI4QTM2MDFFNTY2RkVENkMyNDZFNEFCRjUxM0NEQUIKLToxMDc5QTAwMEVGMjQxNEJFMUUyOUU0RjU0QzIzNzE5RDA3RTIxODc3REQKLToxMDc5QjAwMERFQjdBMkZDMkI3OENDRTYwODRDNkUwOTIzRDJGQzlFRTUKLToxMDc5QzAwMDk4MTFBNzc5QTdGRjZDMTQ2ODVDMUI1M0VFOUJBNjYyMDUKLToxMDc5RDAwMDNEMUQ3NDQ5RTRCQTUzNjFGNDMzOUFEOEZCMENFNDdFM0MKLToxMDc5RTAwMDhCM0MxNUU5QzJERTFCMjI4RTI0RDVGQjYzNUY3NkQzNjgKLToxMDc5RjAwMDM4NzI2MTc1RTQxRTZBMTc2OEM1OTJGNUJEMkNFMDc5OEUKLToxMDdBMDAwMEUzMkJGMDM3MzJDRjc4MEQ0QUYxQkQ4MEE3M0QyQ0ZFMzUKLToxMDdBMTAwMDU3Qjg3Q0U5N0ExQzI3RkE5Nzc4NTFDRTczQzQ4NDQxMTEKLToxMDdBMjAwMEU3RkYxRThCM0JFRjE0MTJFREY4MUVBMzExMjhBNEY0MDAKLToxMDdBMzAwMEREMTk2MDdDNjEzQzUyNENGOTYyOUY1MDc2RDU3RDg0QTMKLToxMDdBNDAwMDBFOERBRUQ1NUJGRjBERTk5QTUxMDg0ODU3QkNCRjkxMkEKLToxMDdBNTAwMERDREZDN0U5Mjk2Njg0MzVBNERGM0U0RUNGNzg0MjMwQUIKLToxMDdBNjAwMEIwN0VDNUJDRkZBMjZCQ0QzRDI4NkZCNzZFRDkzRjQ3MzYKLToxMDdBNzAwMDI1NzhDRDcxNDc1QTQ3MTAzQTJDREZCMjNGMUVCQzk2OEQKLToxMDdBODAwMEQyNjE4QzRBRjBCRURDQjMzRjhFNzREODU3MUYxOUE5NUYKLToxMDdBOTAwMDU5REFFM0ZGNDJBQzExNUEwN0JFOUZDQUIzOTRGMUM4NEEKLToxMDdBQTAwMDNBOTQ3N0YyRkMzNTk1RjBFOUQzOTlBNkJFNjBDRjBCRjYKLToxMDdBQjAwMEM3RjRFQThGMDg5MEIzNDZBQ0VGRDMyNzJBMzkxRjBBRTAKLToxMDdBQzAwMDJERkRFNzEwRjlGRUU3Mjc1OTlERjk5N0M4N0EyOEVGQjEKLToxMDdBRDAwMDY0MUYzNDNGREIzMzQxNEFBMEJGRUIyNUIwQTBEREUyOTkKLToxMDdBRTAwMDlEMzg4NkQ2Q0Y5MTdEMDNEQTI1M0QxMzI1N0FDRTlBMkYKLToxMDdBRjAwMDcxNjlGNzA0ODFCRUU3OERGRDkxMUZCQzA1QUMzRjExOTQKLToxMDdCMDAwMDk0MjhFQTREMjk1RjAyRDRFQjkyQjgzQjMyNDFDNzcwMEEKLToxMDdCMTAwMDMwQ0JCQkJBQjQ4NUY0M0Q1MTRGOTEyNUNGMEE3RDc1NkEKLToxMDdCMjAwMEJBQjQxREEyOUY5N0IxQjVDN0JBQkJGMzA0NjI1NzY2M0EKLToxMDdCMzAwMDFENUZFODFBNERFNjVCRUFFMUZFNDYxNkIxQjdDOUZERTYKLToxMDdCNDAwMDE1MUU2NjJGM0QxMDM1QkU4QzIxMEREMEJCRjNBODdFQ0YKLToxMDdCNTAwMDgyRTg1NEJDRTZERTU2OTg5QjJDMUZEMjc3QUUzQkVERjQKLToxMDdCNjAwMEVBNkU2QTNGRUNGMDA5RTVDOUVBNEYwQkJEM0NERUUwODYKLToxMDdCNzAwMDNCNDJCRkU3NTEwQjQ0RkU1MTJFQ0NGNzY0QjlGRTMwQjcKLToxMDdCODAwMERGMUY3MEQ2RkI5QUZBNDRDRTYwN0JBQzk5NUY5NjhCNzAKLToxMDdCOTAwMDdBNDBFMkY1NDM5MjE2RDZCMEZFQjFENDVGNDJFREJFMTQKLToxMDdCQTAwMEM3Qjk5RTEyMEY1QzdCMzNCRTQ3QTFBMDNFMDBENDVGRDUKLToxMDdCQjAwMDMxMDNGM0ZGM0Q3OUQwOEVGQzJBMDUyMzYwQ0REMzlBQTMKLToxMDdCQzAwMEZBQTBBOTRFQTVEN0E3QTY4RTJCNDMzOTc5NkE2QTRFOEIKLToxMDdCRDAwMDk5NDY2NEUwRTBBNDlGNzY2MURFRThGQzZFMjZCRkU3OEMKLToxMDdCRTAwMDBGQUYzNTY4N0NDOTYwRjEyMjY0MkIxQTY3RUM3Qzk0NzYKLToxMDdCRjAwMEJFMjdGQjAzMjlGQTEwQUQ3QkM1RkEwNTAyRDJCNjBDRUQKLToxMDdDMDAwMDdCN0RENTA4MkZBQkEzQURFMkYwMzZDQUVDNzk3MzFEQUUKLToxMDdDMTAwMDhCMDcyQjE3QUZBNjcxQTlGM0ZDQjkzQjc2Mjc3REFGNzUKLToxMDdDMjAwMEMyNERDRTMyN0NDRjUxMDVDMzYwREYxOTYwNzhDMEY3RkEKLToxMDdDMzAwMDk4NkM3OThCOEI5M0U4RjgyQTBGQzNCRjU5Q0ZFMUFDQ0UKLToxMDdDNDAwMERCMzBFMTE5Q0JFMUU5RkZERTg0OUQxRUE2RkY2NUQyQTIKLToxMDdDNTAwMEMxMUM1RkUzOEFFNDZBMDNGMDRERDU0NTExMTI5NkY4MjIKLToxMDdDNjAwMDQ3NUZGREI1NDJFRjlGQzNCQUY1NzRBQ0IzODlCNTVFMEIKLToxMDdDNzAwMDFGNDIzOTQ4NTBGRkM4RTNBQjAxRTBERjM1QTI3QzFBNTAKLToxMDdDODAwMDk0N0FBQzc1RTI2OThFQkFGNTdFRjJBMkRCREJDRUJBRUQKLToxMDdDOTAwMDg1MTVDODFDRDM5ODFFQTdGNUE2MTI3Q0M3NDVFODdEOUMKLToxMDdDQTAwMDM2RURCREU5NjhENzU2MTFGNUEwNjI4MDQ4MzIzNDVDRTQKLToxMDdDQjAwMEZGMUNCN0Y3QTU5N0VGOEI4Q0QyRkJGNjYzQzYwQkNDRjYKLToxMDdDQzAwMDc2RTU0QjBCNjkxQ0ExNkE5RjhGRDZFMzU3QTJGRTlCRkEKLToxMDdDRDAwMDhDNzVGRDQ2OTdEQjU2Q0YxRkU5QzRGQTM5RjkyNTM2NzYKLToxMDdDRTAwMERGRTMxQzlFM0Y2OTE1NzlCOEVGMzdCOEZGOTMyM0M0RDMKLToxMDdDRjAwMDQ0RjY1MkNBNjE4QTg3QjgyNzcyMEMzNEE2Q0YyNEMyRDAKLToxMDdEMDAwMDEzNzFCM0RFQzI1ODFCNDc4NzYxQTcwMjM2N0I2OUE3OTAKLToxMDdEMTAwMDk3QjVGRjczQ0JEQTc4OUM5REIzREM5RUY5ODREQTNGOEMKLToxMDdEMjAwMDhEMUVCMzdEOTZFQUJCOUQ0QTZCMjdFQTNCRTM0NUI3QzAKLToxMDdEMzAwMDhFRTcxNzE5NEZERjkzMzY1NjE0RDE3MzIwMUU4MjkxQTgKLToxMDdENDAwMDg4ODdENzMyMTRBQUU3RTIyRkI4RjdBMjlFOUJBQUM2NkIKLToxMDdENTAwMDBFQTkxNkJGRTE2Q0M2REJBM0QxRkY0QTMyOUY2MTlCMUYKLToxMDdENjAwMEFGNjA3OEYzOTFGNTNCMTBBRkU2RjNENzMyNzY3NjhBQzEKLToxMDdENzAwMDZDOUM0RUJGQUI5MTdGNzhGNDZBRDJDRTc5RDE0RERGNDcKLToxMDdEODAwMEVCMzFGRDREMjc1RjJBNUUyNjVGNEQ4RUY3RjMxNDk0OEQKLToxMDdEOTAwMDM3MUZFQURCNkEyQTY3RUVBMDNEQUY2NUNBOUQ3MjcxQTQKLToxMDdEQTAwMDgyMkRCRUZGMzgzRjY3MTUyOTg2QTE0QUYyQkM5ODNFNTYKLToxMDdEQjAwMEFGRTI3NDZERTI3NTA2QTlEN0M5NENCMUNFMzU1NDlFQjkKLToxMDdEQzAwMDUzQUYzMzlEQ0IzQjcwMzk5NkI0REVFRkIxMENGMDFFNTAKLToxMDdERDAwMDlGMzNFRkUxRDQ1M0JERjJDQUY1RDAxNjlDMUZFM0JBMkUKLToxMDdERTAwMDEwMUJFMzI1RDc3NTg5RjY3OTVFM0EzQTM2MDlFREUwM0UKLToxMDdERjAwMDVGNzM3RkJDQThFREUxNTdGMTc4NkU3MTQ3RUVGMjRDRUUKLToxMDdFMDAwMEEzRUY2NTdEMTdBRkMzOTU4N0Y5NUVFMEYxOTQ3RTdBQTUKLToxMDdFMTAwMDg4RDk1Nzc3MzI3QkI1NjZGRTU0NkFERkQ1NkMxRkEzQ0QKLToxMDdFMjAwMDE5MDNGODQ5MTUxN0QzNkM3QTQ4RjBFOEZDM0I3NzA2M0MKLToxMDdFMzAwMEQ1NDcxNTE3MDNGNEY5RTU1QkNGNjM3QkJGQTRGRjdBNDEKLToxMDdFNDAwMDNFRkFEQzVDRUY1RTg3OUUzRDM4RTkxNzNCMEJDOUJBMTIKLToxMDdFNTAwMDM1Q0ZDOTgyREJCMjRFQ0Q3M0JDM0VERjQzRjRBRTVEOUQKLToxMDdFNjAwMERFMjMyOEVGNTIwODdBQkY0NzgyRkE2MTlCQzJEQkM2NDUKLToxMDdFNzAwMDhDQzYzOUY5NjhENzVBRjRDMzRDQjRCRkZBQzZFM0Y3RDUKLToxMDdFODAwMEU1QjY3OUNERjE5MTQ2QjQ4N0ZBRjU0RjczRjQxRjYzRTcKLToxMDdFOTAwMENFNUY0RUZCM0JFMTMxRjUwRkI2RDFERTkyRkVFMjM2MEUKLToxMDdFQTAwMEUxQTNGQUVCNjFDMTMxNUZBNkI5RkU0MjNBOUY2OTc3NUYKLToxMDdFQjAwMDlGNkJCOUY1NzU0MzQyM0U2RDJENDVGRkE5NjcyREU4Q0YKLToxMDdFQzAwMEY4REQ4NzFGNDg2MTZGRDhDMkI3RTc1NDY2Rjc1NzVDODMKLToxMDdFRDAwMEJDRDI0NkVGM0VCQzhGQjNEREZGN0Q1REQwNTY0RjdCRkQKLToxMDdFRTAwMDc3QUM4NkQ2NTE5RjUzMzlCRDg4NjU0RUM3RUQxRTY1NjgKLToxMDdFRjAwMEFCQTNGRDA3MUM5RjE1OEVFQjUzQzA3MUMzNUYxOThFOUEKLToxMDdGMDAwMDkwNEQzRUZCRTAyOEI0RERGRkFDNzA0NDU0QTY4RkU3RjMKLToxMDdGMTAwMEYxRUI1QzhEQkRENzNBNTc3Nzg1MUJDOEFEQjlFNEJFOTAKLToxMDdGMjAwMDg3RjBGQTk3Qzk1NTI1RDdCOTEyMTgzRUZBM0REMjA0MDEKLToxMDdGMzAwMEVCNEZEQUU4REZERkZDOTdGQjNGQjg5MTI2QUE4MkI2NjkKLToxMDdGNDAwMDNBMDE5MUQ3NjEzQkY1MEVCRTc3Q0RFQUQ4NTREQkY3MDUKLToxMDdGNTAwMDQyQ0NBQjU3NjRGNTk0Q0VGQkREM0M2RUYwRURBQjJCMjEKLToxMDdGNjAwMDAxRUQ2OTYyQUIyNzdEQUZBQ0QxQzdGQTgxMUExNDZDMDEKLToxMDdGNzAwMDcxNkVERTM2RUI3MDJGMTc1QzdGRTRFN0Y0QjdBRkJFQUYKLToxMDdGODAwMDA5MzBBRTJCMjE1QzQ5RkFCNTczQjg5QUQ0MDhDREMzMzkKLToxMDdGOTAwMEM1QjU4MUJGMDdGMzU5RTE5MUQzNEMzQ0RENDBGMTI0RDUKLToxMDdGQTAwMEE2QzBEMzJBMUZCNzJGQjQxOEY1OTM5QTgyNUYwQzNDNTIKLToxMDdGQjAwMEI5QkRGMDBDOEM5RjZGQTQzMTc4RTBFMjE1OTQ4RjQ0MkEKLToxMDdGQzAwMDRFQTcyNjVGRjJFRkRCOThGOThGMjZGNThCODU3RjcyM0YKLToxMDdGRDAwMERBRDBFOEJCODdGN0ZCQTJFOTVCM0E0NEZBOEUzMEY5QzYKLToxMDdGRTAwMDRERkI2MkUxNTkzQzQ0NzhBRTM1RjkyRDE4QTFGNEZBMDUKLToxMDdGRjAwMEEyRTA1OTNCNDQ3ODdFNkVEMjRCRkY2MkYxRjNDMDEwOTEKLToxMDgwMDAwMEUxMzlDQkZCMjk2OTJDM0VEQjU0QzRERUY3RjA4QUQxODEKLToxMDgwMTAwMDg3QjBERTYxMzBCOUYwMTZEQUZENkMzNURGNkJBRkIzRDcKLToxMDgwMjAwMEZBQzA1RUM3OTU2QTlGQkZFMUZCNEMyNTRGMkJFNDQ0MjUKLToxMDgwMzAwMDM2RDJFRjU4MUQ4QjA3QkNDREZEOTNERjU0MzRGODY5NjEKLToxMDgwNDAwMDdDREVCMTRFNTM3MEFGN0ZBMEI4Q0RGRkFBQjBCRjM3NzIKLToxMDgwNTAwMDNCOTgxQzE3QTRCMUZDQ0ZBRDMxRkJCODY1Q0JEMzFDNEEKLToxMDgwNjAwMDc1NjEwNkZCNEUzMEM3NUZBQUY5RkU1RUYwMzYxOTkzQzQKLToxMDgwNzAwMDk4NDNDMDFCQzE1NzdBNjgwMEJGRTE3MkUzMkI5NURDQkYKLToxMDgwODAwMDBEMTc1RjcxNkQ3OEY4MUE0Q0RFRDcyMkJFQTYwRDFENTQKLToxMDgwOTAwMDVGQTZCQ0ZFQkRFMjRCMTkyNkJFRkVERUY5QUJGNDFGQTcKLToxMDgwQTAwMEY4MUExNkJFMTYwRjU3MUVCOTVERkJGNzhBQUZBMUNBQTQKLToxMDgwQjAwMEEzRDM2RjIzRkU1RDc4QTBGN0ZGMkYzN0ZFOUNFQjdGRTUKLToxMDgwQzAwMDVFM0M5QUYzQUQ0OEUxRTdBNUMyRTc2MDcwOThENzZFRDEKLToxMDgwRDAwMEVGMTBGMUVBRjQzRkZGREE3ODc1QUNGRkI5RjFDQUU3QzcKLToxMDgwRTAwMDFCMzY1RTA3ODFDM0JDRkUxMUYxM0EwQ0JCQUU0RDYxN0QKLToxMDgwRjAwMERGRjU3NENFOTNFRDY3REY1QjFCRUZBQTNFMzIxRkYzMTMKLToxMDgxMDAwMEM3NUYxNTY5N0VGQUM4RUUzOTFCQUNGNTQwRDk3RTY2QUIKLToxMDgxMTAwMEZGMUYyOTlGQkQ4MUQ2NTc0N0QzNjhFREQ5NTEyMUZDNTgKLToxMDgxMjAwMEVGMjU5ODU3NUVDNEM2MzlFNzNGQzJGMUY1NUZCRTBDMzQKLToxMDgxMzAwMDFFQ0ZENkIzOTFBRTQ3QTM4QjA3OTQ0NzI4QjdFQzhCREQKLToxMDgxNDAwMEU2OEQyQ0Y0MTVGQkUzRkIwOEU4REI0QjMwMEZCMTIwODgKLToxMDgxNTAwMDM5MUMyNjlENTNBRDNCNUNGQTFFOERGRTYwNThGQTY3QjQKLToxMDgxNjAwMEIwRkRGRTg3NkZBODc2N0E4MkUyMzEwQjdBRkZERUNEMTIKLToxMDgxNzAwMDU1ODhDRjM2ODFENUMzMURDNzVCNzlGOEREMzVBMDlEMDUKLToxMDgxODAwMDk2MkRDRkREODM3NDhBRjk1OTVFQjA0M0QxMzc2MEZFRjYKLToxMDgxOTAwMEM0QkQ3OEMxODM3RTQyQjdBM0I3NjRCOERDMTY3QzVERUEKLToxMDgxQTAwMEUzNjc3RUQ1RjQ5NUM5RkRBRTA4RTc4M0JFRjEyRTE4Q0UKLToxMDgxQjAwMDlGODRCRjI3RjM3RUI3QUM2NERGMDcwMzI5NTJCMEM4QTIKLToxMDgxQzAwMEYyMUVFOTBBQkU4RUY5REMzOTdFQkUzRjQwQzcxRjRENjQKLToxMDgxRDAwMEYxNUVGRUY1N0NGRTY1NEIwNjFFMEZENUVDRkIzQjg0ODUKLToxMDgxRTAwMEVGMEFBQ0VGQjFGNkYyMTk5NzhGRTNCRUQ4MUMzRjgxQ0UKLToxMDgxRjAwMEU3NkQ1N0VDODlBRjIxMUY0REYwQjFGNzgwMjQwODYxN0UKLToxMDgyMDAwMEZEOTUzOTRGOTYwNDlEMEFDMUZCMDdCMjVFODA3OUNEN0EKLToxMDgyMTAwMDI0RjM3Qzc1QTA3OTUyRTFENURDOEZCOTBFOEEyMjdFRDkKLToxMDgyMjAwMDQ3NjdBRUNBRTI4ODI1MTE4MDU5MTgzRjc0ODdFRjYzMEIKLToxMDgyMzAwMEY5NDNDNjA3OTlCQzBFNzE0Njc1NUFBMjFFRkQ1RTg5QTgKLToxMDgyNDAwMEVDRDMwMjZGQzdGRjlCRkQ0RkY4QkNFMzg4QTBEMUY3Q0EKLToxMDgyNTAwMENGMUQ3ODE4NEMzRjZDRTQ3QzkzMjVDNjM2N0IzMDZGN0QKLToxMDgyNjAwMEIyQ0E5NUY0M0I3M0VCRkRFQ0VGMEMxNUY4N0JFQkE1NzQKLToxMDgyNzAwMEU4M0FFMzFFOEJDOUY4N0Q4QUE1MTJDQjdGMTE0RTJDRkMKLToxMDgyODAwMEIwRkVERDkxMDJDRTA3Q0U3MTU5MjJBQjM3ODI3Nzk4Q0UKLToxMDgyOTAwMDNDQjdFRDVENTc5MDRDN0U3RUM1RTVCNEMwNUY2NEFCRTYKLToxMDgyQTAwMDczNUMxMkJENEY0NkY5NUNCMjYwQTFBQ0ZCRjBCOUNFNzUKLToxMDgyQjAwMEY4OERDM0QxQTZDNDBBQTZGOEZBRjA5NDUyMEY3MUZDNDcKLToxMDgyQzAwMDc0MUM4QjM1RTA3NzM5NTZENUJBNjg5RDQwRjEyNkM2QzcKLToxMDgyRDAwMDc3QUIzNjFEMTAzNjkwRUIxRTJFN0YwQjkxMDY5NkY5NkMKLToxMDgyRTAwMDlFRTA3NDZEREJFQjFEOERGMEI3OTlGOTFCOUM5OEMwNzcKLToxMDgyRjAwMDcxRkIyRUEwRjk5MEM3RkQxRjM0NjEzRUE0REIwNTNDNDUKLToxMDgzMDAwMEZGMUIyREM3RkM2RjM3QUY2RjdCOEUzQ0FGNDc3OEU3MDUKLToxMDgzMTAwMDY0NTNGOTFFQjdFOUUzMUFENENGMUQwQUQwQkY3QkYxMkQKLToxMDgzMjAwMEJCMkRFRTA0QkU0RjYwRjI0QkFGOUVEODc0QTEwRUVCOTYKLToxMDgzMzAwMDg3MUY1NTNBMjcyMkRGNjQzNzU0N0YyRDU5RkU3NDNGM0IKLToxMDgzNDAwMEE3QzM5RjdDRDFGNDY0NzZBMDc5MzVGNUI5RDk2RjkxMzQKLToxMDgzNTAwMEE0Q0JDOUZBMkYyRTc3OUM2QjFDRUUxMUVFQ0VCMzkwRjYKLToxMDgzNjAwMDI0OEZEOUNCODc4OTgxRURCNEI3QjgxRUZGOTUyM0NGNzEKLToxMDgzNzAwMEJCRTQ1OEYyMzg2Mzk3NUZFMEYzOTZBREE3RTc5NkUxNjgKLToxMDgzODAwMEQ2NjlDRDM0ODdDN0M0NTc5NkMxRjBCNDc0ODk2OEQzMTEKLToxMDgzOTAwMEI3QUIxNkE0MzlFQzFFODZENzlCRERGQTkzQjg4RjQ3OEUKLToxMDgzQTAwMEY3RkU2MjIyN0QyRkNBNzEzRTc4QzU5ODgyQ0ZFRjg2OTQKLToxMDgzQjAwMDRFMTlGNUM0Mjk1MUE3RDdCN0VCRUNERkZEN0UxQjYyNDAKLToxMDgzQzAwMERCQTdFMUY5NTkyQjI2OTVBQkY3MzlGRkJDQkRGQzhFMzUKLToxMDgzRDAwMDVCMjhGQzcxNTE0M0Y4NEZBQzFDNzFEMzRDRDQyRkNCQUMKLToxMDgzRTAwMEU1RjA1ODMyRUU0NEZDN0VGRjVBQ0JGRTdCRUQxQTA3RDcKLToxMDgzRjAwMDVDQkZBOUI4NjNDMDczNkJEOTcyM0JERERBMTQ2NjE3MzIKLToxMDg0MDAwMDE4NUY2MTcyNzgwRkUxRDE1OTk0QkZCQUI3Q0YyMEVCRjIKLToxMDg0MTAwMDFGNDk2NDRFRDlDQUJBMDNGRTdEQTdDNUZDRjc1MzQyNzMKLToxMDg0MjAwMDZDQzcwQ0EyNkY0RTBCMkM0RjYyN0M5REU5OEQyNThGODMKLToxMDg0MzAwMDQ1MUIzMTc1N0FCQUY2OUE1N0JBNDlCRjhCN0M3RkVGRTQKLToxMDg0NDAwMEQ1MEU3QzNFM0FGOTY5REM2Mzc2N0I2RkZBMzE1MDcwNjkKLToxMDg0NTAwMDdDQUMyNkY5NzlCMDU1NEJFMzdGQzcyQjNDMUFGNUNCQTIKLToxMDg0NjAwMDZEOUI5MkY3RkIyMTMyMzNBMUVGRTlGRjE2MkI5MkM1RUEKLToxMDg0NzAwMDI3Mjc2ODBDREU1NUQxRTRFMzI3Njg3RUY2MUNDRkE1REMKLToxMDg0ODAwMDI0NzhGRTIwOTBDNkY1OUMzNjFBRjVGNEFBMTRGMDc2RUUKLToxMDg0OTAwMDA3RDhGOUY1N0VFMzAzQjdBMTFFMzgyNUQ4RjVGMzkxODcKLToxMDg0QTAwMDAwOTNEN0Y2MDBFM0VGRDM3QjU3QzhEOTQ4QTcyNjk3QTgKLToxMDg0QjAwMDg2RkM3MDMyMjMzQzAxRjk2RDc1RkMwNDdEREZFNTVGQkQKLToxMDg0QzAwMDAyMENFRTQzREVBODFFOTg4NkYyQjI2ODZFMzZBMTRCMEYKLToxMDg0RDAwMEM3NEEwOEJCRjRENEZBQkYyODYwRUE3RjE2QUYyNUU3ODUKLToxMDg0RTAwMERGMDc3OEZFOTFBMTFGNTBGQjQzOEE4Q0JFNzUyMjlENDkKLToxMDg0RjAwMDlBRDY4MTlGMTY4Qzc1QjRDRTcwQUY5N0Q1OTU0Mjc4NzkKLToxMDg1MDAwMDlBRDU4RTlGQ0VFMTNFQkQ2Rjc4RjRCRTI1RUFCMDgzNEEKLToxMDg1MTAwMEZBRDk3RkFEOTU3NEREN0Q2OTFBRDZBNTFDMjkxNzNCNjQKLToxMDg1MjAwMDZGMjQ0MDdFQjgyRjhEN0VCRkQ2MjkxN0E5RDYxRkFFRTcKLToxMDg1MzAwMDFENzg3QURGRjBFQ0MwQzFGNkJEMzIxMDFBOTIxRDc4QkEKLToxMDg1NDAwMEJFRkNEMTFEMjUyODQ3NEFFQkE0NjRGQUQ3RDREMzQ3RjMKLToxMDg1NTAwMDc5RkNEREM5M0ZFNkI1ODJGM0M1QTlDNEMwNzBEREJEQjUKLToxMDg1NjAwMENCMEVDRjZERDU3Njc4NEM3OTM5OTU2OEYwQUU0NjNDMTgKLToxMDg1NzAwMDQxRTc0NEFCNUQwQTczQTYwRDcyQ0VCMkZDNTQyQTM4QjMKLToxMDg1ODAwMDM3MDVFQzdBMDIzOTBGRTk3MDBGRDczN0VGRDUzRTFBNkQKLToxMDg1OTAwMEIwRDJDMUI5RkZEMzAyRjcwRjlFNjQ3NUI5NjNBM0FCMjQKLToxMDg1QTAwMENCQjJGNTNFRkVEQ0MyRTdCRkRDN0M2OTlFMzNDRTc5MDAKLToxMDg1QjAwMEZFRDZGOUQwM0NFNzA2RTNDM0FDMTQ3OTlDMDI3QzcxOEIKLToxMDg1QzAwMDk5OEM1RjJENjkwQUU2RUIwQjAyM0E2QjgzMzYwRjVGREQKLToxMDg1RDAwMEQ1ODI5OUU2REY1N0QxNDdFM0ZCNUZBN0Y3N0FFOTdCQkUKLToxMDg1RTAwMEMwQzY1Njc3MDJCRkRCN0U2QUVGRjUxM0FDRkJFOUUyNEIKLToxMDg1RjAwMEY0NTlCNTI0ODM3RTlFRTI5NDEwOUU5RjRCRUJDRTQ0QUIKLToxMDg2MDAwMEZBOURCNUI3OEY2NUNFQzNGNkEzODcwNUQ0RDA3MDVCNEUKLToxMDg2MTAwMENENkExMUY3Rjc3QTgwQkRCN0IzNkFEMzlCRDQxRTFDMUQKLToxMDg2MjAwMDJFOUZBRkFBQjY5RkZGMTM3MDFGRDkxNjNCNEJFQTI5QTYKLToxMDg2MzAwMDQxRkU0OTg1ODcxNzEwMEZFODA3NDUxN0NFNDVGRDdDOTkKLToxMDg2NDAwMEM3MjYxN0Q1QjcyRkYyNzlFRTkwMjI1NDZGNDM5QzlEMjEKLToxMDg2NTAwMDhGQTAxMjdDOTAyM0U0MDQ2RTAyRjFGMTM4RkZBRTk0RjcKLToxMDg2NjAwMDE0NTVBQ0VGQzlBRERERjZDMDVDQUM3Qjc1Q0FDQjk3RDkKLToxMDg2NzAwMEQzMTk5RUE2QTQzM0JEN0RDODFCN0IyRjkwRERBNzlGNzkKLToxMDg2ODAwMDRGQkFBQTBGRTQ5MjJFRUIwMzlBRjkxRDVGMkFBN0U2RDAKLToxMDg2OTAwMDdFRDY3M0I4ODg5REY2MkNGREJFMzBERjFGRjQzOEY4MDcKLToxMDg2QTAwMDRENjhBREZDMjlFMkJGNENBNTc2ODFENzRERjQzRUQ2OEUKLToxMDg2QjAwMDQ1RkZDMDRCRUJBODRDQjkzMkVEMURFN0Y4QTU1MkNDRjUKLToxMDg2QzAwMDY2Mzc3RUNBRjU5RUQ5NzZEQTIxRkYzODJGOTJGNzFGREEKLToxMDg2RDAwMDkzMUUxQTkyOUM1RUFFRjM2MjUyRkFFNTM5MkYwNENFRDUKLToxMDg2RTAwMDY3Q0U3M0EzNTdBRTlCRDhGQjIwMjc4RTdEMzIzNzk5NzgKLToxMDg2RjAwMDVDREZGODE5RTE3MENBRjNBOUJENUVGNjVERTMxQkZDMEYKLToxMDg3MDAwMDU0RUZGNEY5NTNCOTA5RjQ5NzlENzI4MUZFMTQ3RUM3QjIKLToxMDg3MTAwMEUzRDFCRDZGNENDNEJBREUxM0RCMUZCODJEMTkzREFGREEKLToxMDg3MjAwMEQ2NzgxRDc2NzdBRTJEOUVCNzI2MDBCNEZFMUJDODdBOEMKLToxMDg3MzAwMDRGNTlFNjM3QzdGNUNBQ0IyMEYxQ0JBNTJCQUVBNUZFMjYKLToxMDg3NDAwMEU0REIyQkFFMUZCREJBQjhCRjVGRDFBRkJGMkJGNkY4Q0QKLToxMDg3NTAwMDJEQjg2RTNERjdBNzc3QjgyQkY2MjZGMzAzMzk1RUZCRUQKLToxMDg3NjAwMEM3ODlFREY2RkQyRDlCNEExQkQxQTVERTlDNzZDMzk3RUMKLToxMDg3NzAwMDYyNDlENkVGRjU2QjM2MjU4RkM3RkQ5Rjc0ODc1RjYzMUYKLToxMDg3ODAwMDEwQkY4NkUwQTM3QkE1MTg5ODU5RDJFN0Q3NzQxQjVGNkEKLToxMDg3OTAwMDhDNUZGMzNCRThGOUY3MTk1NEZFOTNDM0Y3NjQzQUIzREYKLToxMDg3QTAwMDUzNEYyOUIxMURENzEyRjg0RTEzRkZDNzQwRjkxMUM4MTYKLToxMDg3QjAwMDM4RTQ5N0VGMjZGN0Q3MUVFMUUzN0VCNzY5OThGQUVBMjcKLToxMDg3QzAwMDk4REQ5RjQ5MjU3RkJENzA3RDRFRjk2QjUzN0EwQTUwMjUKLToxMDg3RDAwMDBGRkM2RUNGQTdFRjNFODBGQkQ5RTNBNUY4NzZDRTczRjIKLToxMDg3RTAwMEEzMjY3MkZGQzI0QkY5RDYzQzlGM0IxNEE2RkY3RkY3MkUKLToxMDg3RjAwMEQ1OTFGNEVGNTUzQkU1MDNBMEY1QTZFQkM4RjNFMzdCNzkKLToxMDg4MDAwMDg1MjlGODFEQzRCNkJENjkxNUM5RkM5QzE1OUE4QkZCNUEKLToxMDg4MTAwMDE3RjY3ODBGNzBGQkVFMTZDRTZGREFERTY3QUFBREYxQjEKLToxMDg4MjAwMEU4NzdCOEJFMzJFMzAwQUZBNEIzNzM3NkM5ODI4NTBBOTUKLToxMDg4MzAwMEM2N0JENkY2QzY5QjgwM0EyQkRBNTVGOTdCRjAzQjUyQzUKLToxMDg4NDAwMDZGRjFGN0I5OEMzNUZFQTRFRkM3RkQ4MkYzRTU2MDcxRDcKLToxMDg4NTAwMDg4RTUyQkVENzE4MjI1MEIwNjNFNkYzRTRDMjRBRkNCOTUKLToxMDg4NjAwMDMyRjkzOUQ1N0FDMzNENUZEQTEyQzNDQjhCMERCNjRGREYKLToxMDg4NzAwMDhGMzYzNDdGRTQxNkE4RkUxMkM2M0I5NjQyNThDNkVCRUMKLToxMDg4ODAwMDEyQTg5RUY4NTM4MkNBMEY3NzJEQTZGMEJDNjVGRUREQjQKLToxMDg4OTAwMEUxNEZFRjlGNjhCNTYzRkU4QkUzRkJGQzkyRkJCRjhBNjEKLToxMDg4QTAwMEVBRjIxREE1N0E2MkIyRjNDOTE5Rjc3OTJCMDUzRUNGMUEKLToxMDg4QjAwMDcwQkJFNzFEQTQzM0YyRUI1MjMxMjk5REREREM4RjdGQzUKLToxMDg4QzAwMDY3MjU5M0EzRkYwRjQyNTIxMjk1MDA4MDAwMDAwMDAwMUQKLToxMDg4RDAwMDFGOEIwODAwMDAwMDAwMDAwMDBCREQ3RDBEN0M1NEQ1Q0YKLToxMDg4RTAwMDk1Rjg3REYzRTYyQkM5MjQ5OTI0MzM5MzRGQzI4NDAwNzUKLToxMDg4RjAwMDIyMDY5ODQwMDhBODA4MTM0MjI0Mjg5NTA5MDQwODBBNkIKLToxMDg5MDAwMDNBN0M4ODgxN0NBQUQ4QjI1QkI3NEMwODYwQTQ2RTFCMDUKLToxMDg5MTAwMDU2NkE1REFCNzRBMEMxNTJDNTM2RDFENDIyQTYzOEEwMjgKLToxMDg5MjAwMDI4RkVBQkZGMDZFQkJBQjg0NTc3NTAxN0Y5OTI0NDU2Q0MKLToxMDg5MzAwMDE3QkJFQjk2M0RFN0RDN0IzMzZGNUU2NjIwQjY3NTc3NDEKLToxMDg5NDAwMDdGMUI3RkVERTNCRTc3M0ZDRkY3MzlGN0RDM0I5NzJFRjgKLToxMDg5NTAwMEMxREYwQ0M2MkVFOTlFOEJBQTU1MTZCMjMyRkFCQjA0QjMKLToxMDg5NjAwMEZGQUI5RTlCMTQ1NTc2RDlFRDhDMzkxOUZCQzdBNUFEOEQKLToxMDg5NzAwMDg5RkUyMkM2NEUxOUUwNjUwOTYzODFDN0Q0RTA2RTA1MDEKLToxMDg5ODAwMENBNDFGRTVFRjZFN0IyMkI1NEZGNTQ3MDQxQUFERjM2QUYKLToxMDg5OTAwMDc4M0NGOUJDRUI1MTE4Nzc0QzY0OUM2NUNERDFFMzg2RUIKLToxMDg5QTAwMDU5NjAyRDczQzAzOEMxNDRGQkVFMDI4NkZGMEM1OTI2NzYKLToxMDg5QjAwMDQ2REE3N0RBMEQzNDBFM0I5NTY5NjAyRUM2RUU5MzZEN0MKLToxMDg5QzAwMEUzOENGN0JCMEREMEMxNTU4M0VCNTcxQkJEMjZCQjY2QUYKLToxMDg5RDAwMDlFMkI1MkREOEM0RDhFOTRBQkU3NDZDRjMzMzVDNTRFODIKLToxMDg5RTAwMERGMTlCM0U3RkI5MjE5M0JCRDJCRDE0QkYwOTg5RTFDQ0UKLToxMDg5RjAwMDFDMDVGM0FDQjBCMjgwMERFNkY5RjA5M0Q3QkNDRjQ2QkUKLToxMDhBMDAwMDMwNTYyNUUwNTFFREZCRDQ4NEYwMzg2REU4REY5QzhDQzYKLToxMDhBMTAwMEVCN0FDQjYwREYwRDQzOTUxRUYzOUFCNEYwNUI5QkEyMUIKLToxMDhBMjAwMDUwRkZBNzNCMkUwRkJGQjUyOTdDOUUwQjJBQTNFN0I3QUIKLToxMDhBMzAwMEYwNTg2MjU0NTlCRkRFN0ZGRTlCMDcyNjYyQkZGRkZDRTEKLToxMDhBNDAwMDM3MTc0RERBRkUxNzdEOTFDQjQyMTk5MUYyMUQzNThBMDkKLToxMDhBNTAwMDM3NTgzNDc4REM4RTU0RjM5MEUwREVBMTgzRTMxRDVGNTkKLToxMDhBNjAwMEU0NTNGRjBFOTUzNTc3QzY1ODk3Qzc2RUE1RkEwQjdENzAKLToxMDhBNzAwMDY1MjYyN0MwNzNFNUZEOEE0NzgxMkU4QUVENkUxQTZGNDEKLToxMDhBODAwMEE1OTE3OTNCNjEzRUNDRThDRUFGMDJCODNCNUI5QkVGNTIKLToxMDhBOTAwMEYzQzVFODY3OEQ5REMzRUYzMzlCMkZENTdFMTlGOEJERDUKLToxMDhBQTAwMDIzRTg0MUQ2NUI2NEY0OUI2MkQ1NUY1QzEzMERERjMwMzUKLToxMDhBQjAwMDYzOTVCMUU2N0ZGRjU3QTQ0NzM5QkVCRUZFNTBFNzUxMkMKLToxMDhBQzAwMDk3QzJGOTMyQzMxMkZBODRBOUYwRTIxQ0Y0NTNGQTE1RTIKLToxMDhBRDAwMEM2RDVENUQ3OEZGQkQ3MDJFRUYxQzYzRkZENDdCNTM2RDkKLToxMDhBRTAwMDE2MUNGNjBBRjhGQjdENDAzRjMxQkYyN0QzRjdCNzU4NzUKLToxMDhBRjAwMDdCRTM3RUUyRUYyNENGNkUwNDQzQzdDQUVGMDFEQUQ5RUQKLToxMDhCMDAwMEVBMzlGN0JEMEFBRkQ5MUY5MjBCNjhGQ0E1QkVBMzE1QzEKLToxMDhCMTAwMDA4NTZGNkU1QzNFMzExRUY5RjU3M0VGQ0JEMTI5OERBMDUKLToxMDhCMjAwMDY5QjNCRjM1MTkxQTlDREVBODc4MDJFRUMxRTNCQzg1OTMKLToxMDhCMzAwMEVCQjQzMEY2RjYwNjJCQURGNzBGRDA5NkYwMzMwQkZFMDQKLToxMDhCNDAwMDJGOUJCMTMxQUFCNzBFODUwQUZCQjZDNUJENUJDM0I3NzMKLToxMDhCNTAwMDhFRjUxNzM3QjBGMThDRUQzMUZCMzZFMjE0NDZERkZGQUUKLToxMDhCNjAwMEU5M0E4NjMyOEYwNTY5REUxRjk4M0M2QjA4REU4QzExNkUKLToxMDhCNzAwMERGMUZERjY1REJCOTE1RUFGRDMxOTlFMzAzMjgzOURGMzMKLToxMDhCODAwMDM3NEUyMzI3OEM3NjJBMEYxNTNGQkY4QjgzOUZBRjJBNDIKLToxMDhCOTAwMEE3RTQzQUUzOEQwMzkwQTdGOUNFOUY2OTZCNTM1MjE5NkUKLToxMDhCQTAwMEVCMzZCQkVGQzRGNUY0Q0Y0OUIwRUYwMjE0Q0UzNzdCMDAKLToxMDhCQjAwMDZGNDZGOEJDNzVENDYwNjgyOUEwNkU4RDQ4QTcwQkY4ODUKLToxMDhCQzAwMDEwQUNFMDk2ODJFRjhFMkQ0MUY5NjNGMjI2QzA1NEFBRDQKLToxMDhCRDAwMEEwMERCQjE2RTg2OEE2MkQ4MEZEOTVGQzZFRUVEMzg4MkYKLToxMDhCRTAwMDlGODc2QjJDNkUxNUZCOUJFRTdFNEY4NUYyRkM5QjJDQkEKLToxMDhCRjAwMEVFOEREMDVGNjlFRjg4ODMwRUU4N0ZFMTVDQzVDRUEwODMKLToxMDhDMDAwMEZEQUMzOUEzOUM2MTU4NUZEMjdBRTgyNzA3QTdGNzlEOEUKLToxMDhDMTAwMENBRjI5MThDM0Q4NTgzNURDN0Y4ODQwMTE2RjMxNTUxMjYKLToxMDhDMjAwMDBFM0NENTM2MEJFNEMxNTg2N0I3QzEwNkEwNUVCOEVENUYKLToxMDhDMzAwMEE5MzYyQkY0QkJCOUM1OTc2NTRGODNDOUE2QjVCNDU5RkUKLToxMDhDNDAwMDg3ODEzRTcyNzk3QjY3NzgxODlCOUFENjVBNjlCRDAxRjUKLToxMDhDNTAwMEQ2Rjk5OEVDNkY1MzlCMzc4RkIxMTcwREZFMDIwNUJFMDYKLToxMDhDNjAwMERGOTFGNjQ0QTUxMUU2RUYyODk0RTM3N0QyRjc0NTM3NzQKLToxMDhDNzAwMEFERDlCRDBFRkFERkJDRUQ1MEE1MTFFN0JENTQ4RUZGOTYKLToxMDhDODAwMDVBNjVCOTExQzY5RDI2Q0I2RjU4QjFFQzQ4MTJFRDcxRUIKLToxMDhDOTAwMEJFNTMxOTMzOEQ4OENDREY5ODA1RTNBN0NCRkFCRDk1NzkKLToxMDhDQTAwMEIzQTBFRDNCNjVDREU1NDYxOEZGREQ2REVGQjQxNTI1QUUKLToxMDhDQjAwMDMwMzY2NTZFOTlERDBCRTVGN0QzQ0U1NzI2MDE3RUJBQzcKLToxMDhDQzAwMDE5RDAyOTk0M0Y0OEVCQTdGOTNCNTQ4M0U4RkZEMzM2RUEKLToxMDhDRDAwMEVGMzQ5QzRGNjAyQzdFNTcwMjlGQjU1NTE2MzNENjYwRkIKLToxMDhDRTAwMDBEQkY4QUU0REFCNDNFNjA3NUMxM0YyNjJCOUM0RUFDQzIKLToxMDhDRjAwMEE2NjY2RjJFQzBDRUI0QUYyQzk0NEJEMzY5RTdGNDk5MUYKLToxMDhEMDAwMDE3MUE4NzdBNkNBMDNDMDZDQUUzMzRFNTJDNUVFRURFQzcKLToxMDhEMTAwMEM4RUU4ODI1NkY4M0U5NUNFRTc1MjdDNkZFM0UzMThENkYKLToxMDhEMjAwMENCMDM4MDFCRTk5M0Q0NjNDQ0JCMzc4NjVFQzk0RUIzQkIKLToxMDhEMzAwMDUxM0Y4NzEzNTlDMDlBMUVFMUI3NzlDMEMzNTM4MTJGQTEKLToxMDhENDAwMDk5OTVDRjUzRjYzMzQ4N0ZBNDcxM0RDQjAyRjNEMjkxNkUKLToxMDhENTAwMDZGRTY2MjE3QjBGNDQyOEYxMjQwQkE2NkNENDlDMTUxMzYKLToxMDhENjAwMDQ4M0IyQzY0NUM4MEZBNDMzNUQwN0M5REFBNzI0NzE1NDEKLToxMDhENzAwMEY0RTc0QTY0RkUyRTc4M0EzMzE4OTVBMUJEQjdDQjE2QjYKLToxMDhEODAwMEU5RUYwRDQxRjcxNTg1QkUwRUVDQUYyMjMzQkJCOEI1NDgKLToxMDhEOTAwMDIwRDIwRkNDN0I5Mzc1NjJENEJDOEQ1M0QzRjFGQkZDRjYKLToxMDhEQTAwMEUyQkI4QjM0RjAyQ0UyRUIwMDNBQTA3NjMwQ0NEMzMzMkMKLToxMDhEQjAwMDgwMEZCQTdCQzc4RUQ4MEFGM0ZCNTAyNzc3NEI3QkU3MkYKLToxMDhEQzAwMDlCMThENERCOUMyRUU0ODk5QkI3Nzc5NjczRjlEMzdGRUQKLToxMDhERDAwMDc3NTI3MDE3RjJBN0Q1NTM4Qzc4OTJFREU2MEFCODk3QzAKLToxMDhERTAwMDNGMzBGNzg3NThBRkJFRDdDNDJDNTA2RjVENTc1OTI2MTgKLToxMDhERjAwMEJCOEM1RUFDRkZFMjdBMTY5Q0E0MjkxQjQzNjY5NDNCQjUKLToxMDhFMDAwMEY1NUY0Q0E3RjdFNTBGQkM2MTQ2M0VDNTdFRENCMEFFMTIKLToxMDhFMTAwMDc1MDlERTRDMEZDMkFEMzUzNkZFMTk2QkExNzlENDdGRDIKLToxMDhFMjAwMDkxQzYwMjkzQjRFRjM5OUMyMkZEM0JFOEZCOTVENjE1MjEKLToxMDhFMzAwMEU5NEY2NUMxOENDQkY1NjdBNkVGMDM3MDM3MEFCODlCODUKLToxMDhFNDAwMDYzQ0ZGMzVFNDlBNzAwNkY4Mzg2QkUxNjBBN0EwM0U5RjMKLToxMDhFNTAwMEU3NDU3OTc4RkM5NkEyNUQyOEVGMjNFMzZFQTQ3NkRERTIKLToxMDhFNjAwMDQ2QzAyM0RBODFCRDg5NkVCNDhCNEI4RDVDN0U5NkY2NEQKLToxMDhFNzAwMEE2REIwMzRBODQzRTI0NUQ0OEJDNzZBNzM3OTdEMTdBQTcKLToxMDhFODAwMEFCMTRGQkFFODJDMUYzRkE2QjM5MkZBMTRGMzM5N0ZBQzMKLToxMDhFOTAwMEQ1RTU5QUY5NDk3RTgwRkVCQjQ1RkYyNTUzODk3RjlFMjMKLToxMDhFQTAwMEUwRkMwMDdDQjMwQ0Y5MTdFRDE2NUM4NzI3MzQ2RTdFNkUKLToxMDhFQjAwMEYyRTBGOTdGMENFNDg1RjUwMThGMUNGRURGQjAwNTUxNkYKLToxMDhFQzAwMDBGNDhCODBEODY3RkVFMTVGMDk5NEZERjRCN0IwRjk5NTkKLToxMDhFRDAwMDcxOURGNTcxRjhGNkRCRTkyOTM0NkVFNkIxNTA4QTFCMTUKLToxMDhFRTAwMEVBOURCNTczNzlENUREMzkyOUUxN0FFNDhCQjkwNjg2MzcKLToxMDhFRjAwMDIyMENENzhERjY2QUU5ODBCQ0JERTFGNTk5QTAxRjMyM0UKLToxMDhGMDAwMDY1MTlFNUFEMUJGMTMwMjA3RjQzNTY2QkE0N0VDM0RGQUUKLToxMDhGMTAwMEREMzA2NzEzRDQ3NzU4MDBGRjQ1NjQ4NzVBOTlDNjlGQTAKLToxMDhGMjAwMEY4NTkxQTk3NjM1M0ZEMkNBNkRERDI5MjlFNENERjI1OEIKLToxMDhGMzAwMEJDRkY3RTdEMzlGQjEwRDZGN0FGNzZDRTk3NTNDMzAxQzkKLToxMDhGNDAwMDA1RjEyMkY5NUEyRkE3OEUwODNDMUVGRTFGOTM1M0NBMjMKLToxMDhGNTAwMDE1RTQ1NDk1OTA1M0ZDRkQ2MTMwRjNCMTlFQ0IxNTFBODYKLToxMDhGNjAwMEE3ODA0RTVDRjFGQUE0NTFFOENGREM5M0E1QkEzRjAyOEEKLToxMDhGNzAwMEJFNUFBMDc4ODYzRDAzRkQ1NjVCREQ5QjkzREQxMTNBMUEKLToxMDhGODAwMEE5NjY1NkI3MERFMTBFNDZEMzI1RDRGQjczMTNBODhDMDIKLToxMDhGOTAwMDdGNjg5NzVDNjg1NzM4MUQzMjc3NkFGNUI4Rjg3MjQ4NzEKLToxMDhGQTAwMENFRTM5RTJDMzM4REI3RTJDMTUxQTk3RUVERkM4NDlFQTkKLToxMDhGQjAwMDk4NjcwOTNEQzMwQTA3RjNCOTJDQzNGQzFCMENBQUU2NEEKLToxMDhGQzAwMEJCOERFQkIzQUM2NEVGODc2OTgwODdCNzE0NTY0M0YzNkUKLToxMDhGRDAwMEQxRDk0QkZGMjFGQzM2QkRCREI0NDlEODkxNEUzNDJGQjkKLToxMDhGRTAwMDg5OEYwREU0OUM2NkI2NTk4MjhDMzcwOUEwOUY5QUQ5NjcKLToxMDhGRjAwMEM5MDRCRjg2MENGNTFBM0FCODk4OTY0N0YzNThCQTE4QzAKLToxMDkwMDAwMDNFNEUwMEE2QjRCRTNDRTEyMzBEMUYxREMxRjk5MDVFOEIKLToxMDkwMTAwMDA4NEQ0NjNFMDVCMTE5MzU4RkE1QUEyRjRGNDFCQjM1RTYKLToxMDkwMjAwMEQzRTI0MTM5MDM3ODIyMzgxQzRFNjBDNjA0MThGNzM1NjQKLToxMDkwMzAwMDc4MjJERTJBRDRCQjBGOUExQzQ4MDc4QUE3OTVBMEJGQzYKLToxMDkwNDAwMDUzRDhBNzJDODRGQTY2REU4QzI0QjI1QkQ5OTdGNzhFQUUKLToxMDkwNTAwMEFDMDI3ODM4OTMzOERENDIzRjU2RDE4Rjk1RTg0NEM4NEEKLToxMDkwNjAwMEJEREZFNjVGQkQwQkY1OTM5NDlGMTIwRkVDNEI5NUZBQjUKLToxMDkwNzAwMDkzREYwRjJCNTU3OTc2MjgxRjc2NUU1NURDQUE0NERCRUIKLToxMDkwODAwMDNGNjgwRjQ1RUNBN0M0MDc2NzAzM0Y0RUE5RUMwQzE5RDYKLToxMDkwOTAwMEVDMjg1NTkyRTc3QzBCRUQ3MEIwOUYxMjYwM0QxOUU5MEEKLToxMDkwQTAwMDVDMEUxQzJFMDhBODI5RDhERjI4NTgwN0JDN0EzNUQxQjkKLToxMDkwQjAwMDVGRDQ2QzhCRTAwMzZDMUMzRkUyQ0Y2NTg2QTc4REYzMTkKLToxMDkwQzAwMDA3M0VCQkQyMzkzMkFFQ0ZFMENGQ0RFMkU5NEFFMUY1N0YKLToxMDkwRDAwMEY1RjRGNjgzMENDRTlGNkIxNTBFRUZBRDY1NUM0RUU4OTQKLToxMDkwRTAwMEVCOEQxN0ZEMzY1ODAzOTVBRTExNUFGQkNBQzc5MDBFOEIKLToxMDkwRjAwMDhEOENEQjU5MTNEMjA1OUQ5NDczNzg5NTNGQjAzNDE1NTAKLToxMDkxMDAwMEY1RTZFN0JEMEI1MzU5NTE0NDhFNkU1NkZDNzYwRkQ0RUQKLToxMDkxMTAwMERGNkNGMjdEOUZFMjFERkZBMDMyRjQ0N0NDNjk3RTdCQkQKLToxMDkxMjAwMDNBRDRDQjQ4OEFFRDJGNTdBN0YzRjk2NkEwM0YwREY1NDcKLToxMDkxMzAwMEJFMjdGQzFERDMxN0Q3OTA5RjdEMjNEQTY1RjAzRDI1MTAKLToxMDkxNDAwMEFCOUFFNDM5QzJEMDBERkRBNkIyRkU4MDVEODNCRkQ0RDgKLToxMDkxNTAwMEE5ODYyOEJGQzFGNEM1Nzg2QUZGRDVFRDg2RTIzODc2QzYKLToxMDkxNjAwMDQzNDk5NEREMjBDN0Q1REIwRkVGNkRDOEEyRjlDQkY2REMKLToxMDkxNzAwMENCQjJERUFFNjA5QUZBQjdCM0YwNjZFQ0VGRjY3NUI5MzMKLToxMDkxODAwMDUxNzFBMjc4NzZDNzVBODEyN0I0MTMwMjMxRTc2NThFRjAKLToxMDkxOTAwMDdBRkYxRUY4ODkwMUVERjhBN0Y4Rjg5MTcxOTM4MEQxNTQKLToxMDkxQTAwMDIyRTM0RTQ4RjdENkE1MTMzRjREQjM5RkJDMDYxRTYwODEKLToxMDkxQjAwMEJCNUY1MjQ5REY5MERDMDdCREU0REQ2OTIzN0Q1NDg5NDQKLToxMDkxQzAwMEYyNUFGQTQ3QzhGN0Y2NTRFNEVCQjI3QkQzMjc2QkY0QjQKLToxMDkxRDAwMEEzNjhBNzk3NDM5RjA4N0ZGQTEzQTE2NzUyOEY0OTdCMjMKLToxMDkxRTAwMDMxRDFBRDI4MTE3RDMzNTg1RjA5M0RBMzkzOEI1N0IyMjAKLToxMDkxRjAwMEFGODE1RTAzNUFGREFGRUZGNzg3RTk3RkFBNUQ1OTE4OEIKLToxMDkyMDAwMDg3M0U0NkZGQjdEODk1QTVEM0ZDRUEzODk0OUI5NTBBQ0MKLToxMDkyMTAwMDFCMDU4RjI5QjNBMkY1RkNEM0U5RENGRjc4M0EzRDI5ODEKLToxMDkyMjAwMENBNUY5OUJGMzRCQURFMkZCMERFNjQ3QzI2MERDOTVGRjkKLToxMDkyMzAwMEQxRUEyMTQ1NDU3OUM3RkI2QjE0RjQ1MDcwRTYyREIzOTQKLToxMDkyNDAwMDFCRTRFRjE5QjQ4M0EwREVEMTBDRUZGMzQ4NTc5QjEyNTcKLToxMDkyNTAwMDUzQzZBMzdFRDhGOTlGRTU2Mzc2QzJCQ0ZCREYzNDc5QTEKLToxMDkyNjAwMDc2NjE3N0ZCMzg3RDk0MkQ1OUQ3NkE4NEY3QTY0RUM1NzEKLToxMDkyNzAwMDZFNjE5MUY5RDlENjc3NEQ1ODA1RUIzRDI4RjA1NEVGNDIKLToxMDkyODAwMEUwRUJBODc3ODRDQzIzNjFEQzlDN0EzRTdFNUVFNzQxRUMKLToxMDkyOTAwMEM1QTg5MTZGNzlCNUJDREU2RkQyNEQ1MUZBRTZCNzU4Q0IKLToxMDkyQTAwMDg2N0VERTk0RkUwNzBCQjY1NDk0NjA3REFGNzEyQjg4RUEKLToxMDkyQjAwMEJFOUM0RTg1RTJDMTM5Q0QwMDAwQTA4MzFDMEZFRkRGQkMKLToxMDkyQzAwMEU2MDkyQTJCOEIyMkVCNkMzMzU0MTVBMTVFNjg3MzI1QkIKLToxMDkyRDAwMDc5NTAyRjY0MzlGQ0ZGODBFQkFDM0YxRTBBMjE5OEE2MjEKLToxMDkyRTAwMDFDRUYzNUEyN0QzN0QxRTE3RDg3Rjg0QUFDRDNBRERBRUEKLToxMDkyRjAwMDczNTBBRTI2MURFN0YzNkJEN0QxM0I2M0RGMTVGM0RBNkUKLToxMDkzMDAwMEM1RTVBRENBOEUzMEM0MDdDQTBFMThDRkI1NzEwQ0U5RDkKLToxMDkzMTAwMDI1NTlERjk1MkVGNDg0OEJGOTlGMjVCQjhBQjUzMUMyODAKLToxMDkzMjAwMDE3QTM3NUI4MzY4RTI2RkI1RUUyMzM2MjQ3NUQzRDExQUEKLToxMDkzMzAwMEVEQThDMjg3NDJDNjE1RDA2RUZGRTM4NkNBNTg3NkUyMTIKLToxMDkzNDAwMDY3MDJFRUIwOEUzRUVEM0FFMkYxODVENDYzQjI5RTI5MUIKLToxMDkzNTAwMDhFMUYyREU5M0RBOTMyQjY3RDBBMUE4MEJFOTcyRDcxNjgKLToxMDkzNjAwMERDOEFFQkFFREY2NDY2MTYyNTAyRkY4OTBFOUYyMUMzRkYKLToxMDkzNzAwMDg5RjhEQUE5MjA2QzI0N0Q2RDRBN0Y0QUM5ODVGNUREMUMKLToxMDkzODAwMEJCODZEOTU1MTY3RkJFRjVFQjlGOUJCMDRBRTM2RjQxNzQKLToxMDkzOTAwMEZGODQ4RjlENjY1NkFCRDVBN0QyOUZDOEM5RTBGNkY0NkYKLToxMDkzQTAwMDZBODcyRjBEQzc2RERDQjdDRDhDRjg1REQzNzFDMkFDNjkKLToxMDkzQjAwMDhENzcwRjVBQzcxMEUxQTVENDcyM0ZBNUJFQzYxQUM0NTcKLToxMDkzQzAwMDc1OTYyRDMxMTJGRUVBMzY5OTgzMjg4RkVBRjc3Njg1NTUKLToxMDkzRDAwMDBDNjg0RkRGQ0YzQ0M4RUZGNTlENURBRkU2MDA1QzcyRDcKLToxMDkzRTAwMEVCQkQ5MzU1NzdBNEJGRENGQUEwODJGMzcxMDExMUY2QUYKLToxMDkzRjAwMDkyOUYxNzMyQTM3RUQ2RDMzNURBQzM2ODk3QkM5QUMwNDIKLToxMDk0MDAwMEY5RkQ1Qzk5MkRBMDAwRkNDRTk5RkNGNTU4RUY1Qzc2MzcKLToxMDk0MTAwMDkyMjc1MDEwODFGNzZCNURCMzhGMjhDMEQyQzlDRjVBMDUKLToxMDk0MjAwMDQyRjg2QzMzRUNDQUIyNDJCREI2QjE2NjBGRDJEMTQ0MzkKLToxMDk0MzAwMDg3QkYzNDAzRTA5NDZFRjQ3NTYzRkIzNDQ3QjJBNzA1MkQKLToxMDk0NDAwMERBQkEyRDZDMjJFOUU3MjFDMjYxOEE4RTFFQTZEQ0NGMzIKLToxMDk0NTAwMEY5QTQzNjIzNDVEQTdCMTM1MTBFRjkzMjc4REMxNTYzMTMKLToxMDk0NjAwMDQyMjg5RjVFMzVGMTc1NkM2MjdDQkU1REU5REUwQUM0MDAKLToxMDk0NzAwMDEzQjNBN0QzQjgzOUY1MjEwNUVEN0RGREI4MTE3QUYyMDQKLToxMDk0ODAwMERFOUNGMTE1RTgxQkVDM0MzM0NBRjUzQTIxNjdDQTk2MUQKLToxMDk0OTAwMDc0MjgxRjZBRThFMDU2MzA2NEIwNUVDRURFOUQwQUZBOUEKLToxMDk0QTAwMDgxRjBCREE1QzI0MUY1OTkwNUU1Q0M1RUJFMUY1MTA3MEYKLToxMDk0QjAwMERGRUZENEM4MTVCOThFMThGMjY1MzlDMkQ3NzZCQ0Y3N0MKLToxMDk0QzAwMDE1MkU1RjQyNDQ3RjcyQkU3QTdDMzY2NEI4NjlGQzFCRkQKLToxMDk0RDAwMEMxMkNBMEY3RTZDMDE4MzdGNEY3RUE4ODQ0RUE0RkYyNDcKLToxMDk0RTAwMEJCOUUzRjFCMDQ5REU3RDQ3NDI4MTgzNzcwMjQ3MUJCQzIKLToxMDk0RjAwMDUxQ0U0RkQ2M0I5QTMxRjM2RTlDQ0Y5NENBNUU4MjQzRDUKLToxMDk1MDAwMDQzOEQ5MUYwMjZFNzUzNjFGNjhENDRGRjZCODNFOEVGQkUKLToxMDk1MTAwMEQwRTJGN0NENjEyODZGRkZENTUxQTJDNzg2NzZDNTRCNDMKLToxMDk1MjAwMDdFNDFGQjUxRjM0MjhDQ0YwNTdFQTY2MjNDRjY2NjZFMEYKLToxMDk1MzAwMDkyQjA0NzdFNzk5NEY0QzhDREREM0M0RUQwRDBERDY1NDUKLToxMDk1NDAwMDVDNjk4QkQwNjlDMTk5NDNCNzIzOUQzNTc0NUE1ODgyQTEKLToxMDk1NTAwMDgyRjhFMzc2QUI5RTRFNDFCRTEwRERCMzgwOTlGNkIzNDAKLToxMDk1NjAwMDQwM0UwNjQ4OUUzMjdGMDFGQTIzNTJGRTc2ODlCODFGOUMKLToxMDk1NzAwMEIzRjFGNzdGMjdFNjJERkI4REM4Q0QwNEEyRjc4MjMzMjgKLToxMDk1ODAwMDEzMEY1OTAxOUUwRDFFQzUwM0E2MTJEOERCQkMxRUY0OTUKLToxMDk1OTAwMDFGMjJGOUNCRDgwOEY0Q0I2NEZGN0FGODFEMTBGNjc5QjYKLToxMDk1QTAwMDBDM0NFRjQwQjhFQUY1ODhENEFCMDUzQjY2MzI3QzRBMDgKLToxMDk1QjAwMEZDMTkwNURDNjVCRkNGNjQ5OEE5REY2NzMyOENEQ0JGN0UKLToxMDk1QzAwMDJCRTNGMUVCNEQyNkFFM0YzNkI1NTg4M0M4RDdBRkE1OTgKLToxMDk1RDAwMERENzg0NDE5MEY3MDRBMzc4N0YwNzlEOEIwQTIxRUJGRTIKLToxMDk1RTAwMDFGQ0VFMUYzNjgzMzZDMUNEM0NDRjVEN0NGNzEzRTg3MjcKLToxMDk1RjAwMDE2QTczMDJFOUZCODNDREFGRTFDOTcyN0Y1MDExQkY5MDEKLToxMDk2MDAwMDg5RjVGRUVBNTVCNEZGRTA0OEYwQTBCRENGRkNBRjk4NjUKLToxMDk2MTAwMDE3MjY0N0U4NDE4RjVGRjdCMzA3Q0Q2RUY4N0U3MzI3QjMKLToxMDk2MjAwMEU3ODMwOERDQjg5RTkyNzQwQjcyOEVGMERFOTUyRUY3RkQKLToxMDk2MzAwMDIzRkMwNTA4NTdGMERGNUIzMENFMjBGREY3OTRBNUJFNzQKLToxMDk2NDAwMDQwQjI3QjMwQkY2NjA4RkY3REIyRjBERjRENTNBRDdGODcKLToxMDk2NTAwMDUxRkZCRDZFRkQ2RkIyQjFCQzM2RUI3NTdBNEE3RTAxMkIKLToxMDk2NjAwMDNGMzE4QUFGN0UyRkYwMUQxMkNGMEYwNEJERDQ5NTc0MDkKLToxMDk2NzAwMDEyM0ZENDdERDQ0QzdDNjRBQkU0RjJDNDc2M0M1QTBFRTkKLToxMDk2ODAwMDMyRjZCN0MyMkU3ODg4RTA1MDkxRDQ3OUEzOEFGRUYwRTIKLToxMDk2OTAwMDhGMTU3QjJCOEIzRkVGQkI5NEU2RkY3RjJERTJBNTRCMTUKLToxMDk2QTAwMEE1N0QyOUY2MjU1OEY1QTUwMEQ3MDQwMTAzNTFFRjMzMTAKLToxMDk2QjAwMDQxRUZFN0Y2MDAyMjkwMkY4RENERTZDQkQ5QkY1N0VBRDgKLToxMDk2QzAwMDk3ODVERTU2MTBERjc1MDJENkU3RjY5NjVGRkIyRjE4RkEKLToxMDk2RDAwMDRGREM5M0VBMTkwNTRCM0ZCQjc3QzE1RkZEMEJCNDNGRUQKLToxMDk2RTAwMEQ3MzFDMzgzN0FEQUQxRUEyM0ZBRTk3NzI2NzgzMDZFNjQKLToxMDk2RjAwMEU4NTBDMUIyMDU3QTY4RTk3QzM5RTU3QURDMTc3QjdBRjMKLToxMDk3MDAwMEMyNDQ5NDlCNDkwRUVFMDc5RTc5NEU1RDhGRjBEOUY4QzYKLToxMDk3MTAwMEQzNUY0Q0M3RUY3NTQxMjUwM0VEQzY3MzdCN0VGQzQ3RDUKLToxMDk3MjAwMEQ0OEJCNTFENERFODY5QjBENkE3NUYyMjNCREMxMERDQjkKLToxMDk3MzAwMEM5REZFRjQ5MjVGQkYyRjQ0RkI2NEQ0N0I4Qjc3NkI2MEYKLToxMDk3NDAwMEQyRjczMzNGRDk0OUU1NDMzRkZEQzU4MTdGNDc3QkMzMEUKLToxMDk3NTAwMDk3RTJDMTdBNjc5RURCRjY5RDdGNDczQUFGNEVGMUUwMTQKLToxMDk3NjAwMDNBRUFGRDQ2QkU2RjJCRTk1QjJGQjdCQTBFMTI5RjRBNEQKLToxMDk3NzAwMDdBQjkxOUY1MkVDMkE5ODZDQjFGNDlDRjFGODg3REE1QkUKLToxMDk3ODAwMDE1RTVCNjM2OTQ2NzFGNkM0REFFOEQxNTRGOUMyMEQ2RUYKLToxMDk3OTAwMDhCMzExNzkyNjMzNTBBQzVEM0RBODA2QTMwQUVEMTk2MjEKLToxMDk3QTAwMEM4QTZFMjMzQTkyODY0Q0U4NTcxMTYyRkVEOUE0RTc2QUQKLToxMDk3QjAwMDRGRTBDNDZBQUNCRjYwNUYwMkRCNEFGMTM3MENERTgyNjcKLToxMDk3QzAwMEZENEZBNENFRDgzODEwODMyN0MxNEY4NkRFM0IyRTgxQjMKLToxMDk3RDAwMDdERkQwRUM4MDdEMjNCM0FGQjdGNDFEQkVCN0Y0MDM5NzIKLToxMDk3RTAwMDVBNkQwRDFGNzRCQTIzRUZEQjQ0OUMwNkVBOTNERTI5MDEKLToxMDk3RjAwMDVEMTczQjFFM0FDNTYxMTM3Q0NCRjU2NjRFNzc1NTlFQ0YKLToxMDk4MDAwMDlCRTQ4NEM1MzM0QTYzOTcwRTNCRDZCQzE1QzQxMENCOEEKLToxMDk4MTAwMEE5RURCRDExRDc3MUQzOThFNTkzODgyRTMwQ0U4N0ZBODQKLToxMDk4MjAwMDI3NjBBM0ZFMUIzMDRFMDk3QzU2RTkxMEYxMEYzQjczRjUKLToxMDk4MzAwMDVDMDdFMzU3MTg5OUMzODY0RkM2REUzNjkxMUNEOTREOTUKLToxMDk4NDAwMEZEODJGRDQxNzY5NUZCQTVDNUJCRDExRTc5QzRFNENGNTEKLToxMDk4NTAwMDlFOENGREI0MDlCREQ1QzFFNzBERURFREI4NUYwQUZERTUKLToxMDk4NjAwMEQ5QUY5QjQ4RkRGNDlBRDJBOTdEODBCNzlGREREMUEyRTQKLToxMDk4NzAwMDQ0RTYwQjk0OUE4RjdBMEJGQjJCQjFBMTlFMDlENDEwNkUKLToxMDk4ODAwMDdFREM2NjVBRDcxOUFDOTI0REVCMUVCRjZDNUM4NDdGQjAKLToxMDk4OTAwMEY1RjExRDk0NjdCODBGQkNEQTUxQjZEQ0UxOEMzQzY1N0MKLToxMDk4QTAwMERDNDcwRkNGRERFMkZCNDcwRUVGNzIwN0NFNjM0RjQ2N0EKLToxMDk4QjAwMDk0NUU4OTY3QUYxQzVBN0M5RUVCREYxNzRGOTBCQzY5QTIKLToxMDk4QzAwMDQ0M0FDNkYxRkQxRjQ1RTlERjk1OTI4RTVGMzg0MTc0MzkKLToxMDk4RDAwMEJDNzIxRkQ3QkY4REZCOEFDRDQ4Qjc2NzM3NzhEOTg3NTEKLToxMDk4RTAwMDYwODAzNjhBN0RENjQ3OTRGMDZBOEFGM0JDOTA2MEM3NjAKLToxMDk4RjAwMEY4REQ3OUExNkZFQTFFM0E3MTEyRjc0NzQ3RUNDQjI2RTMKLToxMDk5MDAwMEJGRkVGQzBCMDkzNUQ4Q0Y2MTgzODFFMDc5NzhENzM1NkMKLToxMDk5MTAwMDNCNUIxNUVEM0NCOTNGMDA3NjMwOTE2QTIzRDhBOURDNUEKLToxMDk5MjAwMDBFNUVCNTBERkRCMzg2NUFFNjQxRkU2RkQ0RDE0RkUzMEUKLToxMDk5MzAwMEJFQTM0NDJGRDIwRTJFRDgzMTdGMTVCNzNGMTMzQzA5NUEKLToxMDk5NDAwMEU4QkZDREUyRjYyODAzN0IxNEVCQTdDRDBBQjY5ODg5RDEKLToxMDk5NTAwMEJFOEE0QjkxQkUwRTJEM0VCMDA1RjU3OEUzMkM2NkM3NEUKLToxMDk5NjAwMEZFMUYxOUU2N0QyMTk3RDZBMzMwQ0M2Nzc5QzRENDNFN0IKLToxMDk5NzAwMEQzMDhFRDFGQTk3MERCMDE5MjAwQjcwRUIyN0JEOTE4OTYKLToxMDk5ODAwMEIzRDA3M0FCQzg1RTZFQ0NCQUNENDM3Q0E2OTcwNzJGMUQKLToxMDk5OTAwMEI0OTBEREQ1RTg0RUE0RjlEQ0JDNEZCOTg3REIyMzM2QTMKLToxMDk5QTAwMEM2RTdBRjEwN0RERTFDQkMzRTg4RkJDQTlGMDhGODQ5QTUKLToxMDk5QjAwMDM4OUUzN0Y1REU4RUYwMzhGRjRCMjA0NEY4N0VGMzJDQ0UKLToxMDk5QzAwMDRFQUY2OUIzM0E0OThFQkNGNkMyNkNEMkUzOTIyRTkzODUKLToxMDk5RDAwMDlGQjc5MDNFNEYzN0RBMTUwRkU5QjUwNTE2MkQ1RURCQzAKLToxMDk5RTAwMDRENUMyRkE1MDkzRDUzRjgxMEM3RUYyRjA0M0ZGREMyNzIKLToxMDk5RjAwMDYxMTA0RkIzQTA3MzExNkZCMTA3QzZBM0RFRkQ0NEUwNDEKLToxMDlBMDAwMDlGQzQwOENBNzcyMTRGMUE1Njg1ODg5RkVBRjdGMkZFNEQKLToxMDlBMTAwMDFDMTY2RkYxQkQxQUZBNzU5NDczQkQyOEUzRkVCODBGREEKLToxMDlBMjAwMDUwMTU0MzVFQkMyREU2NTFCMDYzQzUzNkI0OTc2RjAyNDYKLToxMDlBMzAwMEJDQTM0QUM5MTkyM0U0MjhEMDA1QzIyREE3RDY0Nzc0NzAKLToxMDlBNDAwMDcwOTNFMzJFOEY1QTQwRkIwN0U0MjdGNkI3OTg1OUFDODIKLToxMDlBNTAwMDM4Q0YzMUIxMkU2Nzg2QUYwNEUzQ0RDRUNDNjRCMjczN0MKLToxMDlBNjAwMDlDNkE5OTIxMDFEQjE1MkI5RTVENkVEQURGMjQzQkFGRUEKLToxMDlBNzAwMERGOTlFREQ5MTVDNUVGQkUxMjAzRDQzQkU1NEFFNjc4NzAKLToxMDlBODAwMDBFRkVENjM4N0YxQ0YyQTE1QkZBRTk1MTc2REY2MDdGQ0IKLToxMDlBOTAwMDlCREI4RDczREIwM0UzRDEwRjkxRkIxNzEyMEVDMTk2OTUKLToxMDlBQTAwMEM0MUFBREZDN0M1RkMwMjE3ODM1OEZFNzgzN0Q2RkEzM0UKLToxMDlBQjAwMEY4QjUxREM2NDFCRjdFRDdGNTNGRTE3RTdEMkJENTdCMzYKLToxMDlBQzAwMENEQzFFMzE5MTVCMDNFQjREQjlDODVCRTc1NUM5RjI2MDUKLToxMDlBRDAwMDdCNjJDMTYzQjU0M0RBRTVCNzE3QTM1RkQ5NTg2REYzNkQKLToxMDlBRTAwMDIwQkY2RDdGNTE1OTQxRjQ4Q0MxNDFGNEI3RkRBQjA4RTMKLToxMDlBRjAwMDBGMENGMDgwRkNDMEZDREMyRjZENkNGNjA1NjNEMzdCOTMKLToxMDlCMDAwMDE1RjE1RjIzRjI5RjQyRjQ0RUYxNzZBMEY3MjBBNzc3N0MKLToxMDlCMTAwMEFFRkZBNERGOEZGMkIxMkFDNjdFQTg5NDJGOERFNkYwQTcKLToxMDlCMjAwMDY4QTQ2M0M5MEY4REQzQzNBMzExNkU0Mzk1MjdFNzRENzYKLToxMDlCMzAwMEMwRkZDODNGMDAwN0U0MUZDOTJGQzlGQjM5OUY2QzZERTgKLToxMDlCNDAwMDcxOTdFMUY3QUQxNUNDREVBQUQxNDc3QTdGMDlFNzg5OTUKLToxMDlCNTAwMDdFQTc5NEVCNTkwRTVGQkExM0UzMDA4NkQwMTZDQ0EzMTAKLToxMDlCNjAwMDkwNzJCODcxRkY4M0EzNjNFNUI5NDkzOTZDMzU3MkY5MTYKLToxMDlCNzAwMDY2MEQyNjA1NUIzNUY0ODU3QjdCQzkxM0U5NDk3OTNCODYKLToxMDlCODAwMDQ5RUI2M0M3NDU0NjM5NzlCQzZFQTg3OTExMkVENEU1RjcKLToxMDlCOTAwMDI4NkY3NjI1MDU1MTVFQzkzODkxQkVERjRDQTcxMjE1OTYKLToxMDlCQTAwMDhGOTE3RTBCRUUyRjYwRkQzMjI3Qjc0MzRBOUM5QzJFOEYKLToxMDlCQjAwMDZGNzJDQTc4NkMzMENBRUY3MTFCRkMyNzMwOUYyODlFRTkKLToxMDlCQzAwMEZFOTJFREZFNTI3MTJCMzk4RUQ0QTM3QUZDQ0JGRDExOUYKLToxMDlCRDAwMDVDNEY1NTUxRkM3QUVEMDdCOTdDRDJEM0UzN0M2MTdGQjEKLToxMDlCRTAwMEE1RTI1QUUxN0YzRjE3RkI1OTgzRjFDQkZCNjEzNUM2RjQKLToxMDlCRjAwMEE4RkNCNzM2NDM1NzZEQUNGOEQ3QzEwRDIyMkY2QUJCMEUKLToxMDlDMDAwMDcxNDhGOTc1M0YxN0Y1QkYyN0YyQkZEODUyNjM1NDNFMkMKLToxMDlDMTAwMDk1Q0RFMzZFQzFGOEU5ODQxRTc3QjE0QUUzRjIzODU2NzgKLToxMDlDMjAwMEYyNzRGNjI5RUFFMTk0QTlFRDYzMzA0RkM5RTk4QkRFQkQKLToxMDlDMzAwMDFGQzlBQzQ5OENEQTdGQzhGNkE3NDc5NTczNkI3M0EyMkUKLToxMDlDNDAwMEVBMEY2QjFFMTFGNTdERjhGQUIxNTFERjBCMDIxM0EzNzkKLToxMDlDNTAwMENBODU2REQ3NDVENTFGRDUzRTMzQUE3Q0Q1QTMzNzQ1RDgKLToxMDlDNjAwMEQ1QkYzQTM4M0ZBQUJDQjVBNUIzMDZGMTcyQ0Q5RTVCMEQKLToxMDlDNzAwMEEzREE0RDMwODYwREM1RjA3RTVDRTc4QUU4M0MzMTFERTUKLToxMDlDODAwMDNDNjdGRTUxOEQ0OTg3M0Y3MDE2MTAzRTI3RUM4Qjg2NEUKLToxMDlDOTAwMDQ3RUFENDY4Nzg2MDVBMUNGNjk3Q0E0NDdGODk3RkYwRjcKLToxMDlDQTAwMDVDMkU4RjM1OTUxOTNGMEJDQkY2MDU4M0U5ODE1OUVENzUKLToxMDlDQjAwMDI1REFGQzgzMDhGRDA0QTNGMkRGNjYxQTU1REQzQzAyQjkKLToxMDlDQzAwMDdGMTJGREM1OUJBN0RDNUY4QkJCOEUzODcwREIyN0U0NjIKLToxMDlDRDAwMDg0ODQ4QjQ5MkMyQjc1N0FDRDY1RTE2MkJBMTI1QzU4NkQKLToxMDlDRTAwMEQ4MzMxNEI4RThGN0Y3MDZFMkNEQkFGRTM2MjYzNTUyNzcKLToxMDlDRjAwMDNFRjBEQjU4RDBEOEM3NjFDMTQ3QjJCQzI4OTBDQUY1NDYKLToxMDlEMDAwMDkwNkZDMTE1RUM2ODFFMDdGNjVCRjhGRUE0RkVGQjQ1REMKLToxMDlEMTAwMDIxRDc5QzMwMDc4MkNGMTBGOUZBN0Q4MTg3RTNDOEQ3MUQKLToxMDlEMjAwMEU4NzBFQUY5N0FGREE3ODczMzUxN0U1NzMyRjI5QkVENEUKLToxMDlEMzAwMENEMkQ5RkEyREVCQUMzMTg2MkM1MzBFRkVENjIzRDhGMTQKLToxMDlENDAwMDA4QjlGMEU4MDYzQkY1RjM5OEQ4N0Y3QzdDODM5QkRFNkUKLToxMDlENTAwMEVGRDgzMDg2OUVDMTBEMUU3QUJGNkJDMzU0N0E3NjgwRDEKLToxMDlENjAwMDNEODdDRjI3Mzc1NEQyNzNDRjA2MUZENTdCNkE0MzBENkIKLToxMDlENzAwMDNERjc2RUYwRjM3OTBEQzIxNzJCMjUzQkM3OTcxMTMzRDIKLToxMDlEODAwMDVFQkEzQ0EwMEUwOTRGNENDRDhCQTkyRkUzRjZBMzJFNTMKLToxMDlEOTAwMEJENkMxRUY5RkFFMzRCRTZCQ0EyRTExQjhCMkJEOTQxNEIKLToxMDlEQTAwMEZCOTk1M0Q4MTREQ0NGQkM1MkZCOEIxQjZBRTZCQzMyNDgKLToxMDlEQjAwMDZBRTg3QzI0RTk4OTdEOTkzMURBMTcyMzdFRTQxN0Y5NzIKLToxMDlEQzAwMDkzNkYzQjJGNkUwREQ4RTJDMzJCNDI2N0IxRTE1NDZEMDgKLToxMDlERDAwMDNEOUY4M0NFRkE3OEI0MTkzNEVEOEZFOUY4QjhEQTlGNTUKLToxMDlERTAwMDFBRDM2RTI4Nzc3MUZBQUNCMUYwRkRGNzI1M0FGRUVFODIKLToxMDlERjAwMDEwREYzQjVDREMyRTdDMzc4RTlDQjlDRTY1MTBGQzFGREYKLToxMDlFMDAwMDMwRDE3RUUwMjBCRUZCREUwREIxRTBEQkVENzI0N0YxMkMKLToxMDlFMTAwMEYxMTJCRjBFQUZCQTdFREUzNUI1MEZGM0M0RTBCMzJCM0YKLToxMDlFMjAwMEY1MjNEN0E3NkZCN0M5QzVFNUQ2QUVGRkEzRkNGOUVFRkEKLToxMDlFMzAwMDlEQzlFNDNGMjBEQzlDOUFGNUJGN0I2NzUyNERBQ0I4Q0UKLToxMDlFNDAwMENDNUUxN0RGMTcwNUVCOUMxNUE0OTNBOTFGMzBBM0FEQkIKLToxMDlFNTAwMDM4ODZCOUY5M0VFRjQ4M0JDNjg3NjQxRTQwN0M3QTM1QTgKLToxMDlFNjAwMDUyMUM4OTYwQTgwRTg2MkJFMEMzNkQyRTg0RkU4RDAzRTQKLToxMDlFNzAwMEUzODQ4QzM4OEVDNzEwRDE2Rjk4NTNDMzM0RTczQ0Q0MzkKLToxMDlFODAwMEMxRjQwMEVEMDM2NkNBREYwOUU3NTBERUUzNTdBNDI3RkIKLToxMDlFOTAwMEE2M0UzRUVBNzJGQjc0ODNEQTdGNDUzOUIzRkQ2Qjk2Q0EKLToxMDlFQTAwMDMzOTJDRkQ5OTcwRjhGOEFBNTI3NkI1MENFNUMwNzY0NkEKLToxMDlFQjAwMEU4MkFGRTZFQTBFOENBRkQ3RTU1RjhENUE4NjFEQUI3OUIKLToxMDlFQzAwMDFFMzJGQ0Y2Mzk4NjE0OTc1QTZGNEQxOThGQzZENUM1QzgKLToxMDlFRDAwMDA0RkUwQ0NDNjRGQzNDRDZGQjA5NDFCNEYzNDM2MjlFMDcKLToxMDlFRTAwMEUwRjg0RkUwN0U3NUYzMTQ3Q0Y2NjRGOTBFQjlBMEZEM0UKLToxMDlFRjAwMDBBMzNGNzEzRjM1Q0RFOTc1RDUwMkY1MUVDMDM5QjMzNkQKLToxMDlGMDAwMENENUJGMEM5RUM3QzFERTMzMTFGMTRCQURBNjI3MEU3NTcKLToxMDlGMTAwMEUzM0EzRTUyM0M1N0EzOUY2MjM3MDQzREY4NEM2MUExOUYKLToxMDlGMjAwMDcxM0NFRjJFRTg0N0ZGMkNFMzlBNDQzN0ZBQjc4OUEzMzgKLToxMDlGMzAwMDE5RUJBNTc4QjgyNzAxRTM2NkU2QTRGMDVCMjNEMTlGNkYKLToxMDlGNDAwMDdERDE0OEYxQTFGMTk4Q0YwNkU1RjE3RjlGMUIwQzkwRTAKLToxMDlGNTAwMDNGRTcyNkY5OTAyMUUwQjYxNUVENzA2ODNGOEZGOURGRjUKLToxMDlGNjAwMEM1Rjk5RUI2NUIwMzA2OThEN0MzOTUxMzEzMzAxRjJBMTUKLToxMDlGNzAwMEI0NDcwRDk4RjFCQzQyRUZCOUJGQkIxOUQ2M0RBMTU3MEMKLToxMDlGODAwMEE1MzhGMzA0MzZFOUY1OTEyODU3N0E0REI0REY1QjY3QkQKLToxMDlGOTAwMDY0MEYyMURGQzQ4M0U3RDk2RkM2Q0VFRjJBQ0FFNDcyMEIKLToxMDlGQTAwMDRGRTY2REU5QkYyNzg5RUY2N0UzRTQxMUZGODdEMDBCMjgKLToxMDlGQjAwMDMyM0ZDNjI0RjM2MzlDREVDQkU2Qzc5ODc0RjkzMTI2QTIKLToxMDlGQzAwMEEzOEZFMTNFQjA2OTIwM0Y2NjI5QTNGQzE4RTg0NzlCQjgKLToxMDlGRDAwMDFGNzM3NjY2RUM3OUE4OTk3QzFFQTYyRjkyRTJGNDlCRkIKLToxMDlGRTAwMDQyRUZDRjhFQjhGQzNBNEQ1RjI0NDRFNTU5NDdEQURCQTcKLToxMDlGRjAwMEU4N0RCQ0ZDOUMzQzA5QTczOEY5NDk1OTAzRjNDQjY2QzIKLToxMEEwMDAwMDgxMEM2RDNCNEVCRjkxNzFGMkU4QkI0OTk3RTcxM0Y5QTQKLToxMEEwMTAwMENFRjM3QjM2QTU3MTNBMzk5ODY1NzcyQzg3QUU5N0IzMjYKLToxMEEwMjAwMEIwMDlFOUY0MEU5QkMzODRGMTIzMUZGMzc0RDFCOTFENjkKLToxMEEwMzAwMEEzQTkzRjJDRjk2RTA0RDYzMzdFODA3NkI2MDEyNDJENzkKLToxMEEwNDAwMERBRDk3N0FDMzc3RDEwRDZDOEE5MkE2Rjc0OTk2MTdEQUIKLToxMEEwNTAwMDhEREM1RDlGQzU2OEJFODk2M0M3NTA1RURGMDVFNjRFMzcKLToxMEEwNjAwMEI1NUY0NjZFMkVCNUFBNTZBMzY2QkRDN0UzRDgwRDdFNzIKLToxMEEwNzAwMDAxOUZFM0Q5QjFFMTM3MjdEMzEwOTVBNzM0Qjg3RDRBQzIKLToxMEEwODAwMEQ0NzlCNDdCRUQ5Nzk3OTcwODVGN0Y4NkI2N0YzRDFFQTYKLToxMEEwOTAwMDFDRjRGRDRBNzA3NkI2NzJGRUVFMkY1Mzc4RkVGRTVGMUEKLToxMEEwQTAwMDFDREU2OTIyOUY4RDlGMEIzMEU5RjJEMEQ3NjdCOTM5NEEKLToxMEEwQjAwMDVEMERDQzlCRTdBMUJGNkNGN0FEQzhBNDc2RUVEMURBRkQKLToxMEEwQzAwMDczMDBERDQ2NkZEMjQ0NzgxRTE3NzI0NzBGOTczRDAyMkEKLToxMEEwRDAwMENFRkE3NTc3OEI3Q0ZBNDQ5NTM1Nzc2OUUwQUY1RkVGMDAKLToxMEEwRTAwMEUzMDI4RkIyRkUyNjEzREZCRjgyM0Y5RjE1RjBCMjhDRDIKLToxMEEwRjAwMDcxMzlEQjlBMzk0MkU0ODVBNzE5NTExRTJFRTU1REIwMEUKLToxMEExMDAwMDY1RjY1NzY5M0Y0OUMyNzkxMEZDMDREQ0Y1NzBGNDMxRkIKLToxMEExMTAwMEY3RUQ5OEI3N0QyNTc4MkUzRjlBNjg0NkI5N0ZCQkI1OTUKLToxMEExMjAwMEZGMzBGQUE2RTE1RUMzM0IyM0UxNzlDMjM2RjI2NDA3NTEKLToxMEExMzAwMEMzN0RCNzMxQ0YxRjYyMTgwRkYxRjBGQzA5MzY4QkVDRUQKLToxMEExNDAwMDFDMjU5MEFCNUVCQTY2RTg3NkNFOTYxNEZGMThFNDhCQjkKLToxMEExNTAwMDhGNDRCRUI1RDQ0MzVCNzJDRThDQzZCQ0Y5RDRGNEIyODYKLToxMEExNjAwMDlBMkMyN0M1REJCRDE5NDgzRkJGQjY3MEZBNzkxNDdBMUYKLToxMEExNzAwMDgyNzJEMzgxQUI3N0EyN0U2OUM5RjIyRkNBOUExQ0M5QjkKLToxMEExODAwMERGNjNERUZFRDE5ODdGRjA1NUUxMDM3RjI2QTQ5RjJCOEQKLToxMEExOTAwMEMxNjc1QjI2RTM3Qzk4MTI5QjNFOEVDNEExMEYzRDVGOTYKLToxMEExQTAwMEQwQjlCMjkyQUY4RjJGMjQzQ0U1N0U4NTlDREZBMjJDRTQKLToxMEExQjAwMDRFN0ZGMjI5RTFBNkNGMUI1QTk0NjUxMEY1QjhEQzY4RjIKLToxMEExQzAwMEM5RjIxMTlDRkI4NjdEN0EzMjAxRTY3RTVDOTdFNzM1MDkKLToxMEExRDAwMDIwQkY4NkI4N0UwOUVGQUY0QkZFMUU0RjhDM0RCRkZFMDEKLToxMEExRTAwMDRDQkVBRUZGQTlGOTJEOTFGMzFCMUY3QjdFQTZBQ0ExM0YKLToxMEExRjAwMENEQ0ZDN0ZBREY0RkZCMUFGNDE3RTA3OTA5RTI5OTZENkEKLToxMEEyMDAwMEVBMjdCOTc4M0MzREY2M0M0NzBFNzk5RTdFRDNEN0ExMkMKLToxMEEyMTAwMDY3MjU3REIzQzBGMjVBREFBN0NGNEE4Q0I5NEZCRjA4ODEKLToxMEEyMjAwMEZDMjZGNDdCRjRGQkY1NzI1RjFFRTQwN0FEQjdEQURBQzcKLToxMEEyMzAwMDdGN0IwNkUyN0Q5NjU4Qjc4Qjg1RDI3MDFGRjM4MDg1QjEKLToxMEEyNDAwMEUyRkVGQUY1NUYyM0Q2MEZGMDJBNDYzOUM1RTZGNjUzNEIKLToxMEEyNTAwMEZDRTJGOEU4RDg3MkExMzg4QkYzQzU0MEZEMzYzRTRFREIKLToxMEEyNjAwMEJDNzMwNUQ3MEFGRUJDRDJCOTAyNTZFMkE3Qjg1Rjk5MDMKLToxMEEyNzAwMEQ1MTY1MjAxMEZGNzA4N0M5ODczRDc3QUQwMkUyQ0NCQzUKLToxMEEyODAwMDdBRTMxOEFFMTNFMDdGNkUwMDlFOUEzQ0JFMzMxQjhFQkQKLToxMEEyOTAwMEQ4NDc5QUUyQ0JFRDNBRjVEOUQyRTYxOEVCOTlFN0Y0MzQKLToxMEEyQTAwMENGQzU3NTBDRDREQkYzQkE3REE0MDY1RkUzNThEOEMwRTQKLToxMEEyQjAwMENGNDVGNzFCQTJGQ0UxNENGNjk1RkM2MUFGOTVGMzRCNDMKLToxMEEyQzAwMDZBQkE4RkY0MDFFQTA3RDQzQjVCRjY1RjVCOENDODQ0NDMKLToxMEEyRDAwMEZCMDJGMzc4RkE5MzEzNDk4RUI2RTY1QzM3QzZBRDgxN0MKLToxMEEyRTAwMDY3NjM5NkI0NUJENTM4RjZFMjlGOTdGNzFGQjE5Nzk0RjIKLToxMEEyRjAwMDI4QkIzNUQyQkY5MURFNEJGQzk0RDlGRTVGNEM3Q0NDQTEKLToxMEEzMDAwMDczN0FFRjQ1M0ExQzlERUU1RDg3NEYzREZDMDIwRjRDODIKLToxMEEzMTAwMDRCMjNGRjE4RTEzNzIzRDJERjAwRkVFM0UwRjlDNzRFRkQKLToxMEEzMjAwMEVGNzdCMEJGREJDNEY5MTk0NUU2RUYwREM0Mjk4Q0Y2MTEKLToxMEEzMzAwMDkzRDYwOEJDODc4QTk3RUZFMTNGQzAzRkREOTFFNUREMEEKLToxMEEzNDAwMDhBNzgzMTVCMDQzRjMyMUI5RDBCOTdGNjBBRDNEOTM1Q0YKLToxMEEzNTAwMDZDMkFDRjI3NUQ5NkY1QzYxRjMwQ0VCMzI1ODVCM0VDQUEKLToxMEEzNjAwMDk2RUYyNDUwNUVERDFEOEFERDhDRUIwNkZCRTNCRDFGRkUKLToxMEEzNzAwMDQxN0QzRjBCQkRGNzZEREFDNzkyNzY0NjkyN0EyOTY5MjcKLToxMEEzODAwMEU4RjM5NDdFRjI5NUYyQTgwRkExMUQwNkYzOTk2OUIwNDcKLToxMEEzOTAwMEQxQkVFNjIxMjA5QjZDOTAxQjMzQ0RGQzU5MzYxQkE4MDcKLToxMEEzQTAwMDBBRkE5QkE5RTZGNTg0NjE1RTlGQjM3M0U5Mzc0MEVCMzcKLToxMEEzQjAwMDQ0MTE0RjVDNzc3NDcyMDJEMkU1NENBM0U5OEM1NjZFNUYKLToxMEEzQzAwMEU5RTMxQzVENTlEMTcxOEVDRkQ5RENFRkQzREVFRjE4RjQKLToxMEEzRDAwMEVFRUYzRjNDNzc2NkE2MzZDRTMyMTBFNzEwRUI1ODEwMTIKLToxMEEzRTAwMDU4Q0VFNUE5NEVDRTQ5Nzk2NkIwRjJGQjQzOTg5N0I5QUQKLToxMEEzRjAwMEVEMkU4QTE3NzFCODgzNzM2RDg0RjIwREIyOENDRTA5N0QKLToxMEE0MDAwMDk0QTcwOTI0MjlEODFFRDY3RDgzNzhCMjE1RkUyQzk0RjIKLToxMEE0MTAwMDMzOThCRTgzRTM4MUQ3OTc4NUNGRDY2QjNENkU3Q0NFRDQKLToxMEE0MjAwMDUwN0M0NjNFOEYyMENGMzc2NENENzk1OERGNjAwREFCMkUKLToxMEE0MzAwMEZDNUMxRUNDQzA4NUVERTU3OEJDOUMyQ0NBOUJBQTJGODkKLToxMEE0NDAwMERDN0VBNzdCNzBGQzgyRDk5MkM5REUzNThCNzk5REI2MDQKLToxMEE0NTAwMERCMDIwNjc4NkZCMTg1NEU1MzVFQUE3OEVBRTMxQzE3REIKLToxMEE0NjAwMDBEODEwMEU2NjU3RjRCMEREMjdDOTM1ODI4RDQ4QjcxMEIKLToxMEE0NzAwMDA5MkI4MEMwNDBGMTgzMTM0OEE3RTBENTM0RTIzQzEzOTgKLToxMEE0ODAwMEVDMTc0MkRGNjY5OERGRTg1NUIwOUNBMUQzNDc0RURCNUUKLToxMEE0OTAwMDNBQ0E3Nzc2RkE4QzNBM0RFNDU3OTA2RjMyNkJGNEVGMTQKLToxMEE0QTAwMEEzRjU5Mzk1MURBNzczNDA0QUM4OTc3NTI5RTNDQTcxMTAKLToxMEE0QjAwMDFBN0Q3Q0M2MzQ5M0EzQjg3RjBEQjc3QkRGNDlFNEVERUEKLToxMEE0QzAwMDI0NUQyOEQ5NUNGRjM0QTY5QjE5RTVCOUI4QUM1NkI0MTUKLToxMEE0RDAwMERCQ0YyNzlGQzJBMzk2QTgzN0RBNTA2RjU4NEQ1RTgyMTQKLToxMEE0RTAwMDg3RDQxRjBEREQ3NzMzQzQ0RkUzQkUyQTg2RjRGQTRGQkQKLToxMEE0RjAwMDBBREZGNzBDMkM1MzI4M0Y0MURFRDc1MDUzQzRERTg0Q0IKLToxMEE1MDAwMDk2NkM1OUY2MDg2QUI3RjA4ODdGNTkzRDk0QUJERjYwQzYKLToxMEE1MTAwMEUzNDI1MEFGNzg4NkFGMDJFRjY1NjkxREM3M0MxQkExQ0YKLToxMEE1MjAwMERDOUFFMDdGRTY5N0I4OUVBMzJBRjVEMzI0Q0VDMzMyMDcKLToxMEE1MzAwMDY2QUZEQjBCRkRFRkJDNzU5ODY3MkIyRUE5QkM3RjBCQkMKLToxMEE1NDAwMEU2RkZGNDNGQzhFQzk4MkYzMjg4NEVCRjg0RjUwMUZFMzkKLToxMEE1NTAwMDdGODI2NTk4NzdEMzJBRkYxM0Y3NDFGREVDMzc5ODg3MDAKLToxMEE1NjAwMEVBODhFRkU4OEIyMERFMTQ0MTBGRjg3RTA2QkM2RjEyRkMKLToxMEE1NzAwMDc0NTNEOEEzRjA3RDdCODc4NUYyMjZEOEIxNENFMjk3M0YKLToxMEE1ODAwMDg1NTYzRTRFNTM0RkQ5QkNDOTMwQUZDMkRFNDk0NEM2OTIKLToxMEE1OTAwMDIzQTEzRUU2MzU2MTY2MDFDRkFCNjNFNDI3RUJFQjhGODkKLToxMEE1QTAwMEM0RkE2RThBNTJGMTdDOUExQzMzREQ3QkM0ODQ5QzlCNzYKLToxMEE1QjAwMEEyRTNCN0VCMjNGNDRGREY4QjQ1Qjk0OUU4QTMyODNFNkMKLToxMEE1QzAwMEMxN0VDMDJGRjc5NkYyNkQ3QzZBRTdFMEZDRTA2MUYyOTUKLToxMEE1RDAwMDhGRjNFRDc1MkNGMjg3RkQ5NjQ3QzYyMUY5M0I0QjdDMzYKLToxMEE1RTAwMDNCQkM2NDBFRTU3MzRGMzE4NjBFMjI1RjVGMkY5RUM1MjQKLToxMEE1RjAwMEUyODk3QzZEMDUzODJFMzYzNjFGNzZDMjdBRDJENjMzODQKLToxMEE2MDAwMDRGMEI4RUIyRDRERDhBRkQ5NTMwOUY4QTcwMkVCNTNGRjgKLToxMEE2MTAwMEQ4OEFGM0JCNzZFOUQxMENBNEFGRUREOTg1NDQ3RkQzQkEKLToxMEE2MjAwMEFDOUVDMjA0MjA5MUQ2QTkxRThGMUQ1RUQ1MkM1NTA4NjQKLToxMEE2MzAwMDJFMEI2QkFDNDFDQzVCNUIzODcwNEY4RkJGNjAxMUYwNjEKLToxMEE2NDAwMENENjJCRjIyQ0VDRkZCMEI5NjZBRTJCMDMyOUY2RjkxRjQKLToxMEE2NTAwMDA1RkNFNzE4NzI3QTdCMzZCNzg3NjRGQjI2NzFERTQ0MDcKLToxMEE2NjAwMDdFNkZDRkI2RDFGNzZGNjZERkI4MkM5QkYyMkE3ODlFNEIKLToxMEE2NzAwMDMzRjBCRDNGN0I3MjQ0OEVDMEI4OTQ4N0IyODA3OTRENzEKLToxMEE2ODAwMEI4QUUwNTgyNkYyNURGMkZGNERFNEI3NkVCNDI1RkI0NjgKLToxMEE2OTAwMEZERjk0RjBBQzc3NzYwODk0MkY2RTBFMjlBQ0JEQkE3NjMKLToxMEE2QTAwMDRERDk3MjlGMzdDRjdFMzIyOUYyNUVEMjk1OTREQkYzN0IKLToxMEE2QjAwMDUxOEZBM0JDQUQwNEJEQURCMThGOTc3RUVCQ0IzNDZBOTcKLToxMEE2QzAwMDk3Rjk2NEMzQTVFMTkxRjMyRDREQkFGMzJEOERFMjdDOEEKLToxMEE2RDAwMDRCRDNCRTE2OTMwQkU5NUQ5QzZGNjlFQTM5QjE0NTlCN0MKLToxMEE2RTAwMEQ3MjdFMTM0Rjg3QzRCM0ZFNTMzMkUzMjA3MEZFMkI5MzAKLToxMEE2RjAwMDlGNDU2QjYxOEQ1MEZGNjU3MTFFRTIxNTNDMEYzMTMxMzYKLToxMEE3MDAwMDQyNDdDOUI3MjY4NDc4QkU5Qzk3RjJGNkYyRUM0OTFFMDAKLToxMEE3MTAwMENDMzM2OTMzNENBNDNDQTFCNjk0NjQ4RjM2MkY2NzZCNUQKLToxMEE3MjAwMDRCNzMwNUQ2OTNGOTQxRjIzQ0NCQTIzOEZCQzA4RjY3M0YKLToxMEE3MzAwMDczM0JGOTExODVFNzY5MDU5NjU4MDlERTRFOTUxREQzREYKLToxMEE3NDAwMDlFQ0Y3NzE2RkEyODNGNkU1OUI2OUJGMEZFODg4ODIzNzUKLToxMEE3NTAwMDYwM0VFOTI0NzgwNkMxMUNFM0Y4RTJFREY1RjIwMUZBNjcKLToxMEE3NjAwMERCODRGRDk1MTc3QTI4MkZBNjNDOTVFNzk3MzkzMzdDMzMKLToxMEE3NzAwMEM1RjcxNDQ1RkFBREVFRTFGOTc4RDVCRTRGNUZFNTc5M0UKLToxMEE3ODAwMEI1NTUyNTA4NEZCRDNDOTdGNEE1OTdFQjQwN0Y5RDQ4RjQKLToxMEE3OTAwMDhGMTcwRDVDRUY0NEU0QkI2RkM5OUREMDVGREY5QjY2RjQKLToxMEE3QTAwMENBOUI2M0Y3N0IxNTEzQjQ3QkVFNzVCQjA3Q0ZEMTZERTYKLToxMEE3QjAwMDJBRjM1NTU1RDA3NzIzOURGMzczRDVCMDkwMDVCRTk3RjYKLToxMEE3QzAwMEJDNjFERTg1Rjk3QUI1QUNERDhDRkRENUVBRjRENjVBRUMKLToxMEE3RDAwMERCMkI2NkU0Q0ZCNTFEQTYwODNEMzJDQzMzRjQxNEEyQzIKLToxMEE3RTAwMEEwQUJERjNCMjhFRTQxRjI0N0NBMjUzRDFEQjM5MUQxMTYKLToxMEE3RjAwMEYyQTc1OENBNUI5MDBCNUM1RjJERTU3QThFM0RBOTYwOEQKLToxMEE4MDAwMEZDQTcyRkY5OTQyQUZDNjc5Mjc3OTNBNTkwRDJDOUY5RjcKLToxMEE4MTAwMEM5M0RBRjkxQkQzMjFERTQwM0ZBNjcwQTk2Qzc1MzdENjcKLToxMEE4MjAwMDJBODNGQzFDODM3OUEzRDdCMzQ0QTJBRjQxNzY4Mjk4RDQKLToxMEE4MzAwMDU3QzlDMEJDQjkzRDI0RTU2MkQ5NTQ2RTZBNEFCQ0MwNTAKLToxMEE4NDAwMDM4NDRDRjcyOUY2RTMyREVCRjAzQ0ZFQkM1QjhERjMyMjQKLToxMEE4NTAwMDc4OEI0MjBBRTI4OTA1MEQ4NTY4NDdGOEM5REVEMURCQUQKLToxMEE4NjAwMDNGQTVENkU2MjQyQkFDNkYyQTZCMjdCOTM4RTVGMDJCMzEKLToxMEE4NzAwMDI0MjcwMUNGOUZBMDlDRjkzNTkzNzhGNjU4NTFDRTU0RTgKLToxMEE4ODAwMDYwQzI5RjhBQ0Y2ODNDQ0RCNjZEMzcyMjlDNjY2N0U5NkYKLToxMEE4OTAwMEYxMTEzMDIyNUNFN0I4MDdFMTg5Q0UwNzc4RTNFMEM5MUYKLToxMEE4QTAwMDJCRTUwODhCOTYyMzA1RUM0QjdFMUVGOUMxNTdFRjQzMzEKLToxMEE4QjAwMEJGRjc0QTc2QzgyMUE3REY5QzQzRjIzM0RBMUU4OTk3OTcKLToxMEE4QzAwMDRGOTc5QTYzMTM3RUVBRDBGMkU5RkE0Q0RDNEZCODhFQzgKLToxMEE4RDAwMDg1NTdFRjU1MDZEM0M1RjlDM0VCRDUyQzBERkQ0OEJBMDYKLToxMEE4RTAwMERDMkZGMkVCOTU5NzQ0QkU2RTQ5MzJFOUI5ODg1RUU0RkQKLToxMEE4RjAwMEY4MkYxNUE1RUI5MEFFMzRGOEJGNjE1RjQyNDgwNTdBOUEKLToxMEE5MDAwMDJCMTZFREFGNDM3QTk4MThEMThCMjE4M0NENkQ4NjcxQ0MKLToxMEE5MTAwMEI3Mjg5RTM2MzUwNkRFNURFOTZFRDI3RjkzMEM1RTk1RDQKLToxMEE5MjAwMEVDMjlFNkM5NDAzQzAzREU4QjEwNUU1M0FEOURBRDQ2N0QKLToxMEE5MzAwMDk4RTc0OUIzRTc0N0U4QUY5NDMxMzdFMUJENENBNzVGRUIKLToxMEE5NDAwMENBNkRENTQ2RTRDRjcyQUIxRUJGNUVDMjdCODU3REQwOUIKLToxMEE5NTAwMDdCQzM5RjgyRjdFMTg4NzdBOTNGODY2MDdGMDJERTJCNjkKLToxMEE5NjAwMDcyNjJFQzEzQzZDM0ZCMkQ3RjIyREVGNUY4OTY3Q0RGMDYKLToxMEE5NzAwMDk1NjAyRkI3NjE1Q0I3OTZFNzExNEY3QTczNjQyQjk2OTkKLToxMEE5ODAwMDVEMEQwNTc0QkVBNTJCQ0RGMzMyN0Q2RkU2REY0QjdBRUUKLToxMEE5OTAwMEJEMkFERTlCNThCODBFQkU0M0I5QUJDMDU3OEVFNUE2QTQKLToxMEE5QTAwMEY1MEFDOUNCQzk2RkZCNUJCMTNDRjI3RUZFQkQ3ODYzOTMKLToxMEE5QjAwMEYzQ0I3OEZGNTg1MzgwQjdERjdGN0EwQkREMjMxMURDQjAKLToxMEE5QzAwMDIyREE5N0I1OTc2M0I5QTk4REI3RkYzOEQ5MUE0MEZGMzYKLToxMEE5RDAwMEJBRjQ1OEIwMTVERjVGRkQxMDlGODdCNEVCNjYwODNBRjQKLToxMEE5RTAwMEVCNTI5RTdEOTlEQUI1RjM3Njc3QkQ2QTRERTRDOTZFNzgKLToxMEE5RjAwMERDNEU5QjJFRDYzOUUzNzFCRTRFQzc4NzM3NTVCQTgxRTAKLToxMEFBMDAwMDBFRUZFQzBGOTg5MDBFNEUxQUVBNEI0OTVFQzZGMUI3NjYKLToxMEFBMTAwMENBOTRGNjNDN0NDRTA2QjlDMDA4REY0MDlGMjM3ODlFREUKLToxMEFBMjAwMEU5MkUxODYyNkIwRUI3OEI2NDdFMjZFNjg5NTc2OUYwQjMKLToxMEFBMzAwMEI1MzU4N0ZCMDlCMjlFMkI5REYxN0NFMkM3OTJDOTZFQUEKLToxMEFBNDAwMDk1RjlBM0ExMUYzMjA1RTMwMEI4NDZEMkFGNzFGMjQ5RDAKLToxMEFBNTAwMDY3MTczNjkzQkU5QzNENUNFNjkxODY4RDJCNjBEQ0UyRTkKLToxMEFBNjAwMDRCRkY3QTYzMkNGRjdBOUIxOEY3OTRDODdCOTdFRjZCQTgKLToxMEFBNzAwMDgzMDUwNkY0M0ZCQTkwNzhFODdFQjU3OTZGQTI1REQyN0YKLToxMEFBODAwMDg1RkJDMTlBRkI0MUJBMEE3OEY5Qzc4RkRERkNCNzZEMjcKLToxMEFBOTAwMEUwQUNERTY1NjgzNjA2NTBFOEU3MkI3NERGQzkyREJERjMKLToxMEFBQTAwMDJDOTQ5QTMyNzhGRUIzOEQyQ0M0RjMxREY4RkM1N0I3NjIKLToxMEFBQjAwMDlBNzc2REQ1RDhFOTBCQTVEODk4MzY4QUY0NDhCNUMwRjEKLToxMEFBQzAwMDkzOTQxNzBCMDVCRTgwQkZGNzIwN0YyRkIyMzY5MzVEOUUKLToxMEFBRDAwMEI4NDRDOEY3MzUyQzQ4NzE4QTM1M0FGRUFFQjM3REY2RDYKLToxMEFBRTAwMEJFQzE4MEYxQjA2ODNFNkU4MEU5NzBCREQwQkZFMzVENEQKLToxMEFBRjAwMDgwN0ZFREEzQzk3NkQ0RjMwRDlERDFGNTZBMUY3REYzNTgKLToxMEFCMDAwMDE4QjdBRkEyRjlCQzU2RjI3OTMwOUFDRkYxQTY0OUUyNTQKLToxMEFCMTAwMEYzMUY4RUE1RkQxNzc5OUUyRkMxREFGRjdFODA0NUQ2RTMKLToxMEFCMjAwMDNCQTBERjc1RkM5NzgwRTdGQkM2QTBERjYyRTA3OTg1N0MKLToxMEFCMzAwMEEyMkNDN0JERDBDRUY1NzAwMEY0QjBGMDczNDhENDVFM0YKLToxMEFCNDAwMDM4M0UyNzg4RjQ1MDJDRjg1N0YyNzFCMUQwRTc4M0Y0REYKLToxMEFCNTAwMDc1QTVERThGRDk0RUZDMzE0OTk0MjREQ0E1N0U4NjdFMTYKLToxMEFCNjAwMDQ4M0ZDQkYzODJBMDk3REZGNDkyN0YwRkZFMjdDRTczOEUKLToxMEFCNzAwMDZDMzRCRjZDNTU0MDNFMTc0NEZDMTVDMERCM0YyM0RFRjAKLToxMEFCODAwMDQwMUU1Qjc5OUNBMjlEQTEzQzhCNkJGN0RCRDZDNUI0QzQKLToxMEFCOTAwMEZCQzE4RkEwN0Q4MEMxRjY3RTI4Q0E4RUQ3RTMyQjlFOTUKLToxMEFCQTAwMDVEM0Y4MEFGMDRCMDk3OTJEMDhGNjcyNDJGRjdFMTczOTkKLToxMEFCQjAwMDA4RjkxQzIwQTdGRjNEOTY3RTM2MUZFMkY1RkE3NzI2OUUKLToxMEFCQzAwMDUwQkM0MEM2QzcyNUJGRjVFNTcyQkJGQTU3NTk1RTk2MjMKLToxMEFCRDAwMDhCRkI1N0EyRkZFMzc3Q0ZBNjdERUFDRjk4OTdGNkE5MjQKLToxMEFCRTAwMDMxQ0YyODM3NDY5RTA0RUU1MzZGRDJDNDQ5OEZBN0M1OTQKLToxMEFCRjAwMDhFNUIyN0U3NzJCRkU3MUJCOTdDNUQ3OTRFNkY0QTJFRUIKLToxMEFDMDAwMDNDNEY5OTc5NUNGQzU0QTI3OEE2RjA3RDg1RUM4MUZBRTIKLToxMEFDMTAwMDVDNEU0QzEwRTU1MzIyRkZGQTU0N0E3NDNDNURENjJCRkYKLToxMEFDMjAwMDE2RjUzRURBNjBCNTZFRDJDODE1RjcwRjJEQ0RBOEFGNzgKLToxMEFDMzAwMDlDODUyMjVGN0QxREE3RDdCRTE3RDI3NjZBRUY2OTlCRTAKLToxMEFDNDAwMDk2NUJGNjBEOUM5N0IzRDA2QkNFQzYzOENCMEI1QzJGQzIKLToxMEFDNTAwMDM0MUFDMzY2Q0MyQkI5QzFFMUJGMEFFMUQ0RTg2NkRFODEKLToxMEFDNjAwMDY3QjExRjc3RDhCQzAwRTBEQzI3RjZFN0ZCNENEQ0RGRTAKLToxMEFDNzAwMEU4NEJFMDRGMzlBRjY5Qjk1NURGQzA3NjdENzc4NzQ5M0EKLToxMEFDODAwMDNFMEM5NEFCQzJDNEZGRDM3MjdEMzQ2RURGNDJGOTVEREIKLToxMEFDOTAwMDk0RkY5Njk3OTlGMDBGQ0IwNDVGNTA5QzM3NDY1Qzc3RjIKLToxMEFDQTAwMDcwMUMzN0ZBREU5OTI2NzNFQzdENjU5Njk3MUMxNTlGMEMKLToxMEFDQjAwMDVERDZDM0UzODZCNzVCRDk5NjVDRjg3RTQ3NEYyNkY5MkQKLToxMEFDQzAwMDBGQjUyOTgxRDE3NjhBRTNGRDc5NzFEN0JFNjFCREI0MTQKLToxMEFDRDAwMEFFQUQ2NUZERjk4Rjk1RDAzRTJFQzU3RDFBN0E1RTIzMDcKLToxMEFDRTAwMDM5RDcyMEY5QTQzQjlBNEY5NkU0MEU2REZGNDMxRjE3MDYKLToxMEFDRjAwMDFGMDJGRkFDQzg4REMxM0ZDRkEzN0UzMjQ1RTA3RjhGREUKLToxMEFEMDAwMEM4NzdBQTUwRUJDQjMxMkU3NDYxMTVBMzczQUZGN0JDOTMKLToxMEFEMTAwMEFFMTIzRERERjM4QzQyRjc0MDQ4RkJBQzQxQzAzN0RFNUMKLToxMEFEMjAwMDdBRjBEQzgwNUIyMzNGRjBEQzgwNUJFMzlGRTFCOTAxREMKLToxMEFEMzAwMDZEMTlDRjBENjhFQkUzQjkwMUVENzczQzM3QTBGRDhFQkYKLToxMEFENDAwMEU3MDZCNEU1NjJCNkIyMTVFMzZDNEQ2RENDMUU3NEYzNDQKLToxMEFENTAwMDczMDREQUY2Nzg4RTQwNUJDNjczMDREQUY2Nzg4RTQwQjgKLToxMEFENjAwMDVCQkVDMDM4MUMyRjNDQUU1MjlDMUVDRjEzNjhEQkRGOEQKLToxMEFENzAwMEY1RkFBNDJDQTQ5QkVFMDQ5RTNGQzYwMkRFREUyMjgwRTAKLToxMEFEODAwMENCMkEwMTE3M0M2N0EwRURFRjZDQ0E4RDQ3MThEMEREQzgKLToxMEFEOTAwMEFBREVENTczRjEzOTYxREZEQUE4RkVFQUQ0N0FBMjQzREMKLToxMEFEQTAwMEQ2Q0VFNTZFMzNGQzQ3RjI1MzJENTI3MTFFOUZFRjUzMDIKLToxMEFEQjAwMDU4NDYwMURFMUJBRUQzOUYzRERCQjZBMEU4NTkxMzhDOEQKLToxMEFEQzAwMDdFNUZDNzM0RjFEQTgyQzE3MUY5OEVEQzY0Qzc0OTlFQjcKLToxMEFERDAwMDZCOUNBMzhERDM0NEU4QzBFNjA5RTFGQURGNTYzREIxOTAKLToxMEFERTAwMEU4QTA5ODVEOTU0QUYxOTkyMzJBQzYxRUQ4QzdBQ0Y5MDgKLToxMEFERjAwMDkxNjk4QTI2N0VBRjgzODcyNTJCOUExRTEyRENEMUY0QjcKLToxMEFFMDAwMDkwMzQyNjlBMUU5MjNERDFGNDkwM0EzNTlBMUVEMkJDQzcKLToxMEFFMTAwMDYzMkYwQkRGOENDQTY4RkFEMEMzNzcyQUZDODdGMDlEQkEKLToxMEFFMjAwMDg4Mzc0MjYyNUMwOUQ2ODk3MURFQkYxNDdDN0I3NUYwN0QKLToxMEFFMzAwMEZEOUM0RDJCQjdCOUU5NzNCNUI1MzQ2MjlGOTQxQzY5N0QKLToxMEFFNDAwMEE2NEQ1QTdEREM1M0MyNTFEQTA5MzI3RTM5OTk3MTNGRTEKLToxMEFFNTAwMEREOEFFNzJDMEJEMTBFRTBGRTFCRUE3Rjk0QUIyN0NERjkKLToxMEFFNjAwMERDNkY0MzBBNDIzOTc5MjdGMzkzM0NCQTUzQTdGRkVGQ0IKLToxMEFFNzAwMEIyNkQzN0EzRkUxRkI0NUVCMEI4RjBCRTQwRkQ3QUQxMEMKLToxMEFFODAwMDhFNjI5QTc4OTI1RUZGMkIzRDRBMjg3OTNDMkVCNzQ3MTYKLToxMEFFOTAwMENBNjVGRjI1MzI3NkJDQ0E1MEU0QzU3MTlCRjc3MzlDMjYKLToxMEFFQTAwMDNGM0E3RUQ2RDJBODc4NkY0QzdCNEVDRTQzQzI0NThFQjkKLToxMEFFQjAwMDZGNjFDRDZBMTZEMkYzMThCREZEMTVFRDJGNEJGRjlBQzkKLToxMEFFQzAwMDNBRDVDNEEzQTU3RjJDRkQxMzNEOUNENUUxMDU2NDc3M0QKLToxMEFFRDAwMDREQjI0QkJGQjhGNzM2N0MyRkZENjFCRDFGN0FBNTdEMDMKLToxMEFFRTAwMEE5MDUwMTI1RkNBMzgyODgzRDc5ODM3ODJFMTBGMTIyRTMKLToxMEFFRjAwMDU4RDY4N0JGODdDNkQzMTRGNzMwMUM2RkZFRkVBQjlDQjUKLToxMEFGMDAwMDQ4MkY1Qjk0NjZBNjlCREZCMTE3QTExRkQ1RDA5RkMxQzgKLToxMEFGMTAwMEUzMkZGRUE4RkRBQUQ3OTQzMENEN0IxMUYzNkVDNjY3NTAKLToxMEFGMjAwMEEzODhBNzM1NzZCRjQ2RkJBODhEREQzQzVFQzBGNjQ1RkQKLToxMEFGMzAwMEUzNDU2RkVGQUY2NTlERTYwMjY1QjBCRDVGQ0Y3QUE5Q0YKLToxMEFGNDAwMDNGQkQ3RDNGODg0RUFFQTBDNzc3RTRDOTdCM0I3OEJFNEUKLToxMEFGNTAwMDAwMTM3MkE5NTZDMDJCOUU1RjYwNDQwMDVGMUJCOUI3RjcKLToxMEFGNjAwMDEzRjhBMTJDNkY3MjI0N0ZENjk1MEU3RThDOEE3OTE4RTcKLToxMEFGNzAwMDZFNzNBQzNDMjk4Njk3QUE4MDREQkFEMjU2NEQ3MjYyNDgKLToxMEFGODAwMDY1REJBMEI4ODQ5OUY4QTlGREYyRUI5Mzc2QzA1RkU1ODQKLToxMEFGOTAwMDMxODJGQjg4M0MzN0RGODc0QTlDN0JDNDhCOUY0QjdBOEUKLToxMEFGQTAwMEYzQjVFNzNFOUFDQ0ZDQkMyMTZCOEUzRTk3QkYzQUNGRkYKLToxMEFGQjAwMDIwQ0Y0REE5NDM1OUZGNjBCOEZFNjlGOUY4MzJGRjAwNzAKLToxMEFGQzAwMEUwQjc0NjBCM0ZCOThGMjBEN0YzQzlFNERFMjczMTdFQzcKLToxMEFGRDAwMEE4MjZDRkIyQTI1RjlCOUFFRTZGQ0E3M0UyQkQwQ0UxQzYKLToxMEFGRTAwMDkzMEFDQTMzOUI5QkYyNDNDRUVGM0JGRDBFRkFFRjcyRkUKLToxMEFGRjAwMDdEOEM4NTFGQzE3QjZENkJGN0E5RTQwRkQ2RUU3Qjk5MjUKLToxMEIwMDAwMEVDQTJGOEZFNUVGQkMwRkQwOTYyN0ZFMzdFMUM0NzNGQjkKLToxMEIwMTAwMDJGOTlDRjVDQTExNkE1ODYzNTc2RkFCQzNDMUUwRjE4NzkKLToxMEIwMjAwMDM1RENCNzExREI5NUZDMkUyRjA1RTc2QjFBRDE0OUY3RkMKLToxMEIwMzAwMDYxRjVERkM3RUQ2MDg3Q0E2NjIxRkM0MEVGNzFCRDZGMjcKLToxMEIwNDAwMDMzRDJCRTgzMjMyOUEwQTZBMDFEQjc5Q0YxRkJFNzNDMDkKLToxMEIwNTAwMENEMUUyNDE1NzU1ODExQzU2OTVERjdBOTNFQjRCRkRGMzMKLToxMEIwNjAwMDVCQjczMjBEQ0YyOUJCOTI1N0E1MTVDMjczODY4NURGMUEKLToxMEIwNzAwMDQ3RTM1MjBDM0U3RURFNzQ0NTFBREVGRkIxQ0NDMkY3QzgKLToxMEIwODAwMEU1MEJCRTk5MTQyQTA0N0U3QkM5Q0NFRjE5NzUyNEY5MEYKLToxMEIwOTAwMEU5REU4MkZFMzQ5NUU2NzM2NjAzMkM2RDE0RUU3QjdDNEMKLToxMEIwQTAwMDM2MDlFRjFCQzhGOUQyMzYxMUU3OTMyREVFQjNBOENGQkUKLToxMEIwQjAwMEUzRTdCN0NGM0U3MzcxMTJGQUFCRUEyNTFCOUQ2Qjk3OUUKLToxMEIwQzAwMEY0RTcyODhDRURBRkNDMTdGMDY4NzRGMjdDRjdGM0MyOEMKLToxMEIwRDAwMDdFM0MyRUY2NUI2NUZFRkIzQUIxMEY3ODdDRjRDMEJEN0EKLToxMEIwRTAwMDYwNEVDQzBCNjk0Q0YwQTYyRUM2NzhDNDUxMTU2RkNDQkYKLToxMEIwRjAwMDYwOUZEOUJEQTk2OTY0MzdGMzNDRjY3NUMyN0UzODJGQ0QKLToxMEIxMDAwMEYyM0REN0NEOTk5OTg5RkU0NUJDM0NFOTk3RjJCOERENkYKLToxMEIxMTAwMEZCNzVERDUzMjlGMzRFRTNDMjIxQ0RDODhDMTNFOEJFODUKLToxMEIxMjAwMDI1REZFNUVBQkRGODQ3MzUyNjNDNEY4QUVGRjFGMkU1MjkKLToxMEIxMzAwMERGQ0JFMzdFOUJDQzg3NkZDNDdDNzg3OEI1RUU4NUIyOUQKLToxMEIxNDAwMDRDNzY5OTNDRTk0NkJDODc1QzkzNUY4MzdFMUFBRUFGMzAKLToxMEIxNTAwMDExRUYyMUE3RkI0OUNGRDFGRDFDRDgwRkRFMTc3NkE1MzMKLToxMEIxNjAwMEZCMjJFNzBCMzgzNzYyMUU3OTg2RjZCRDlCQkYxRkU4Q0UKLToxMEIxNzAwMERGNDFERjlGMTI3MDdCRUE4OEExNzI1NzhDNzkyNjBFMUYKLToxMEIxODAwMEUzRUIxRUVCMzRGQTcwNUZGMjlBMTBCRkVGMzM1RTNERDMKLToxMEIxOTAwMDc5N0UzQkRFQkNCQTY3ODY2RkM3Nzk2MzdFNjZBQ0YxQTkKLToxMEIxQTAwMEJFMTQ3MDk0RjNFRDRFMEZBRkY2RjFGREJDRDE1NUM5NEUKLToxMEIxQjAwMDlBQjJCRDNGN0ZCRTQ2QkU0RTExRjhFOUJFMjk5QzRGRjQKLToxMEIxQzAwMEY3MDBDQ0UxRkU2QjNDM0M5NzFBOUIxNTg0QzMxNzY5RDIKLToxMEIxRDAwMEZFNUI1MEZFQzk3QjhBRjExRTYzOUVFNzExQjgyQ0JFNTAKLToxMEIxRTAwMDIzNzA1NkEzQ0UxRDBDODZCMzk5QkVDQkZFQTREQzM5Q0EKLToxMEIxRjAwMEZEQTg0QTcyRTdGNDVCODIxRjk5RDdBNjk0QTJCRUUyMkIKLToxMEIyMDAwMDdDNzU5QUYxQjhFRUU5NzZGRUJCMUYyQkZDNjA3QjgyNjEKLToxMEIyMTAwMEZDNThERTUxMzcxNzdGQjc2M0Y1RUU0OTVCNTBGQ0UzMEUKLToxMEIyMjAwMEZCRkI0MUZFMkNDRjYyNkMzQTNDNTc2QzhBREUxRkZCNjUKLToxMEIyMzAwMDlDM0Q0NDdBNkVENTQzN0E3REU2MzNBMzlDNURCRDNENEIKLToxMEIyNDAwMEJBN0UyRDdCRTg1M0I0MEY2QTc1NzZBRjRCRTg1REJEQ0YKLToxMEIyNTAwMEZERUIxOTI2RjI3RTRBNTlFOTU3MzlERkY0MjhGMzRFRkYKLToxMEIyNjAwMDE5NDZGQTlGRUZCNzREMTZGQkU5RkFGQTRGQjgzOTlDMjkKLToxMEIyNzAwMEVGRDlGREFGNjZGQzI5QTA3OEZEOUUwMTc5MzExMkZBNjUKLToxMEIyODAwMDNEQjdDMTRFQ0Y2RjBDRjNDRUM0RkU5NzBERjM1NzBDRjQKLToxMEIyOTAwMEMzMzhDNDUxMEVFNzBCRjUxNzU2NTM1Q0JBODZEQjAxNzEKLToxMEIyQTAwMDE2QkM1QzA1RkU2OUI5Q0Q0QTdFRjQwMzc4QkYxOEMwQjAKLToxMEIyQjAwMEQ5NjJFMUY2ODVCNEFCNTRGNTVFMzUwNUJFNUZGQjJGNzAKLToxMEIyQzAwMEFCRDI3MDdEOEVBNzY3NTdBMkZGRTE3QzNBQzk4QkY4OUQKLToxMEIyRDAwMEQ4NUFFNjJENDZGOUJEQjVDQTQ2RkJDNDNCMERGQ0ZFNjcKLToxMEIyRTAwMDQxQUI4NUVGQ0YwNTlGQkFGNjEwODY4MzQ3NzY2RTlCRkMKLToxMEIyRjAwMDg5N0U4NkJERTc2MDA4RTMxMjZEMDZCRUZGREEzNjlERTMKLToxMEIzMDAwMDg5RkJBQkY5Nzg0RDNENTU1RDM4QUZGQzZBOTBGN0QwQkQKLToxMEIzMTAwMERGRDYwMjZGQjE1REQzM0YxM0Y2NTJBM0MwNDVERkFGNTYKLToxMEIzMjAwMEFGRkEzRURFNzdGNUEzMjM2NEFFQzIzQTQ3NTBGQzZCMUEKLToxMEIzMzAwMDJDRTM3NDIzRjM0QkU4MzczMTM0RjFBMjczQTA3Rjk4RTgKLToxMEIzNDAwMEU2RENGM0Q4NEUyNTY0NEFBMTdCRjUyODhFNURCRjMxM0IKLToxMEIzNTAwMEU0QkEwREY1RTdDRkY4N0VBRDlDOUZFM0E1RUM5OTE4MTQKLToxMEIzNjAwMEVGOTdGQUY0MzZDQzZGQzMzOEIwQjA3Qjk3MzBGOUM3OUIKLToxMEIzNzAwMEY3MEI2QTA0NUQyRjExRjZFRTZENDkxQ0NFMkI5ODg3RjIKLToxMEIzODAwMENFNURERDZBNjUyOTE4NUZCRUFEQkM3MzMyREQ3QjVEQzUKLToxMEIzOTAwMDY3NEE0MzdCNDVDNkJERTNFMTNENUU3Q0E2RjFDOTY0RDcKLToxMEIzQTAwMDdFNEY4RUQyM0YxQTNCMzk4MzMxOTA5MjQ4QkVCREJFNEMKLToxMEIzQjAwMDlGODc4NzA5N0UxRTJERUNCNDkxQ0M4QkZCMkM4RDA3Q0IKLToxMEIzQzAwMEFFQTI3QzdDNEIyMkRGNTcwM0Y5NjY0NUJDMUU0NjdENEUKLToxMEIzRDAwMDBFRUI1RUYzNjI0Mjg4RUYxQjA3QzU3RDM4MkM0MEZCMDUKLToxMEIzRTAwMDMxMDczMjY5NUZDMTUxRThBNTdERjdGM0E2NzAzRUM5MDgKLToxMEIzRjAwMDAzOTA1RjBBRThDRUJEQzM3QTZGQzFERjYxNjlDQzAxRkIKLToxMEI0MDAwMDNCMEFDQUVGM0VGMURFMkQ0NkEwQzdDNjExRTFENTc4NTIKLToxMEI0MTAwMDRGQjhCMkUzREY3ODc5NkNGODI0OTY5Mzc2MjhGM0E4RDYKLToxMEI0MjAwMDNDMzFCQzVBODVGMkU4MURBOUYzQTgzRDNBNTA0MDU4N0EKLToxMEI0MzAwMDkzNzZCOEU2RTEzOUUyMzMyMjdFQzkzQzYxQkExRkE4QUYKLToxMEI0NDAwMDcxRkY1NTA2NkQ3QzcwNzgzRUI3MzdDRjI0RjA3QTY3NzAKLToxMEI0NTAwMDBBRDgxREYzMTFERTYzQzJBM0I1QkY5N0EwRTYxQjk4RkYKLToxMEI0NjAwMEY2NUU2NUI5NEVEOThFNjVDNUVFRkY0NUExMDdENjg4NTMKLToxMEI0NzAwMDdCN0Q2NjI0QjFCNjA0QkU1RjExNDBGQkVBOTU5RUFCQUUKLToxMEI0ODAwMDA4MkVDMTYxRTkwMjVFNjFCQUFGNTFGNkEzM0ZENzJGMjIKLToxMEI0OTAwMEM3NUQ4QjdBMUJFNUJBMjlGQTFDRDE5MTYxNUM1RkMwNEMKLToxMEI0QTAwMDM4OUI2ODlDMjI2RjMxREVDN0QzMzgzRkFGMThGMTA2NTYKLToxMEI0QjAwMEY4MzIwQTdDMTlCOTFGQjg5M0NGMEZGQTREMUI0RjdBOTcKLToxMEI0QzAwMDY0MTJFNjg5QkRGMjI1RDQyRjg4Q0M1QjRGMUY2RjBCMjkKLToxMEI0RDAwMEZBNThEM0NBRjc5OUZBRDMwQTg5OEU2NjI0NzFGQjhGN0EKLToxMEI0RTAwMDk1MDBGQzQwOEU4RDE2RjAxRDlFOUZDNkUxMzc4MDg3MkIKLToxMEI0RjAwMDRDODVGQTZGMTVGMENCRTNGNUJGRUE3QTRGN0U0REVCNDIKLToxMEI1MDAwMEQ1RTBDOThCNzlDN0FGRUNCQjlBRjAyNEQ3QzNEOEI2QzYKLToxMEI1MTAwMEE4N0VDRUI0RThEQTRERTU3OTI5OERFOTg1RDRFRTAxMkYKLToxMEI1MjAwMDcxQkZCRUJDQUYxOERCMTU0MEJCMTlFNUZEOTM5MDFGODIKLToxMEI1MzAwMEU0N0Q2RDJDMzA5RDlDRjU3QTIxMkQwNkVFNUZFQkU0QzkKLToxMEI1NDAwMEY5Mjk2Q0E0OTdERjQzMzQ3RjZFODk1ODlGNURBQ0NGOTcKLToxMEI1NTAwMEFFQkQ4RjZFODAwRkRGRUVDRkFGRDZEQzQ3MkRERjBGOTUKLToxMEI1NjAwMEMwN0RBMEJGQTI4OUEyQkYyODdFOEVENTFGRjI0NTNDMTgKLToxMEI1NzAwMDdDNjRFNTczQkFGODhCRTE0M0NFNTMwN0NGMDEzOEVCMTcKLToxMEI1ODAwMEU2MjdFMTg5N0M0Q0VEOEFBMkY5NDlDRTMzNjkwMDhGMjgKLToxMEI1OTAwMDNBN0UyRUY4MTNDNzEzRjlGRDBEN0YyNUYyMjFEREQxNzgKLToxMEI1QTAwMEY0RENEMDVENjBDMEZENTNEOUFFQURCM0M1ODc3MjVFMkIKLToxMEI1QjAwMEM2QkIyRERENTUwMUQ0N0Y0RDNENjU5NEI3RDlGMEFCQTkKLToxMEI1QzAwMDY3OUUwRjQwRkJCNUJGRjg0MTBBMjZEMzlFMzZCNkJCMzcKLToxMEI1RDAwMEQwQ0VBRERGQkQzOUM1OEJGQjI1QzY0MDBBQ0FDRkQzNUYKLToxMEI1RTAwMDQxQjUzMkQ2MzlDMEM2N0M0NUZBRDE2NDQ3MzUwQTdEQUIKLToxMEI1RjAwMDczRTZBOUVGREU4MkYwRjhCN0REMjYzQkVBRDFBNjNEN0YKLToxMEI2MDAwMDk2OTA4NUUyMjA2QkM4OEU4MkYyMDk1RTdFRTA1M0Y0NEMKLToxMEI2MTAwMDRCOUJGNjQ1REI0OTZCN0ZGQTAzOTc5QkU4Mjk5MDZCQzAKLToxMEI2MjAwMEMwMzMyRTJDOTRDQkUwRDlEODYxRjI4NDFDM0M5RTA4MDgKLToxMEI2MzAwMEMzQjAyNkQ2QkYwNUU3QTc2RjhGRjNGODAyRjBERUQ0QkMKLToxMEI2NDAwMEE5MkVDN0YzQkNGQUVGMjA0OUM4MEU2QkVBRkUyRUQ5MkIKLToxMEI2NTAwMDVENEREQTM4MDNFMEExMzY4RURENzU0NzdFNzRCRUI1RTgKLToxMEI2NjAwMDg0MEIwQjNBQzlBRTY5RkREOTBGQzc5RkIwRTEzRDlBNzMKLToxMEI2NzAwMEJGNDk1MThBQjRGQTcyMjNDMUU5NDJFN0NBMUZFRjc3ODIKLToxMEI2ODAwMEM3RDdBQkU3RDEyRUIwNjhEQjcxQkNCQUY3MjlCNDI3QjYKLToxMEI2OTAwMEMxN0FGOEIzREUxNDRBNDEzRkJGN0VBN0M5MDM5QTk3MjcKLToxMEI2QTAwMEQ1M0ZGMzkzMjc3MTNGODRCRDZCQTE3QjBGRUE5RTM5OTEKLToxMEI2QjAwMEZDQ0U3NTUwQUVFQjMyMzlFNkYyRTlEQjE0NTcwNDNGQUQKLToxMEI2QzAwMDRENkU2RTlGNDg3Q0FDN0RFRTMwREQyRjg4RUZEMUFFQTUKLToxMEI2RDAwMDk1NzhBOUVCM0E2ODY2RTMwNkMzQUZCQ0YzQTBGOEJENjIKLToxMEI2RTAwMDA1MUQ3RTNBNEZEQzQ4Rjc3OEZFRUNBMjE5RTlGQUY0MjIKLToxMEI2RjAwMDAxODU2NTE2MEM2RTVGQkJGMzcwMEFEMjFGQzIwOUZEOEYKLToxMEI3MDAwMDRCODlBNzAxQkMwREMyNTdFODk2RkQyNTU0OEZFMjFBNUMKLToxMEI3MTAwMEYxRjBFNkNENjc3QzlGRTc1N0NGRkMxQzdGRkZBRkY2Q0IKLToxMEI3MjAwMDlGMkMxRTVDN0ZFRENGRUY0REMxNzU3QzZDNkNFNkY0RjkKLToxMEI3MzAwMEZEQzQ2Njk3MTdDNkFEMzUwNTVDNzY3QUYyRjdCNTNCNjIKLToxMEI3NDAwMEVFMjNCQUJCRUJFODdEMkVGRTNCMUFERTZDQzM1NDVBRTcKLToxMEI3NTAwMDY3MzZBRUVGQ0VDNzE3RDJGQTU2MzMzRkQxNURFRDEzNDEKLToxMEI3NjAwMDNDM0VGMUI5RjgxRDA2M0QzRTRGMEFGRUY4Nzg5Nzg1M0MKLToxMEI3NzAwMDJFMkRGQTE4MTNEMTMxOEZGMDJENTVFNEY5REVDREI0MEEKLToxMEI3ODAwMEY3NTc4MEM1NERFNUNGNDU3Q0UwQzUwMTdCODA1OTk5RDEKLToxMEI3OTAwMDI2MkVEQkQ0RjE0MDJGRTJFN0NDMzA2RjI2RUVBQjAxNTIKLToxMEI3QTAwMDFDMDIwMjVFMEFERUFCQUIxRUFEQzhFNEY4NjE2RUEzRkMKLToxMEI3QjAwMDhDMkI4M0ZENUQ4RUVGQjE3RUFGQzk5QjMwM0VBQTlEODEKLToxMEI3QzAwMEQ4QUZFN0UzQ0JGODA0Q0MzQjExRjdGRDNFNzZDNTNFOUUKLToxMEI3RDAwMEI3RTUxODJFRjk5RkY1MzIyRDdEQzVFM0Y3OEUwNzg5NjEKLToxMEI3RTAwMEFFM0U3QjlCRjM0RDYzQjBBQTkyQkVGNzlBNDI3OEE0MUIKLToxMEI3RjAwMEI4MzE3OEIwNUEyMTc5NjA4OUJBNkY2OTgwMkUzQTRDOTUKLToxMEI4MDAwMDgyOUZBM0JGQzMzQzhEOEExNkJFMDc3ODVFRURFQUVEMkEKLToxMEI4MTAwMDk2QTg3QjEwMjI3NDYzOEVCQzJGODhGMEE3RjRBM0VFNDkKLToxMEI4MjAwMDEyRkNBRjVGQUY1RTFFOUNEMEM5MDNGNkI4NzM0OEY3MzkKLToxMEI4MzAwMEM5RDQ5QjgyNEYzRTg2RkMwQkZDOEE3RTY2RkQzMzI2NzQKLToxMEI4NDAwMEYyRjNDRkVFN0RGOTlENUI4MUNFQ0Y3NjRBQkU4RDk2MjkKLToxMEI4NTAwMEFCN0FCRUFEN0Q3NjMyOEJDNUI3Njc2RDFFMTY5MzZGMjIKLToxMEI4NjAwMEUxN0Q0Q0JFQjU0NUY2NjlEQ0VDRUI5M0FCNzdDNTkxNTkKLToxMEI4NzAwMEFCODlDM0M1N0VDRUMwMzk5NkEyNTRDQzc1M0ZGMzU0NzQKLToxMEI4ODAwMERENzA4QTBCRThFMDJBRkQ1OUJEQkNFQ0M4NzdDNzk0OEYKLToxMEI4OTAwMDk3MENBRjlFRDJDMDUxQzI0RkQyRTNEQUE3MUI2ODlDNkYKLToxMEI4QTAwMDAxQkE5NTc0MjlFOTc2ODAyRTA3RTU1NzQ2QzE1MUZGMDQKLToxMEI4QjAwMEJENTdDOEEzODE3MzQzMUJDMTRGNDEzQkY2RDcyQUZEMzcKLToxMEI4QzAwMEZFNDkxRkNDNjUwQkMwQkQ2RjZGMDFFRDgzNkUxNjc2MTAKLToxMEI4RDAwMDdFOUZCRDNGMDVFMzdBOUI4NTVGRDE4RkYxQzRENEM4QkQKLToxMEI4RTAwMEZCRkUwNDkxMzdFMEVCNEY0OUQzRDg0NTI3N0FENDE0QjcKLToxMEI4RjAwMEI0RTNDMkMxRDhCRjIzMkJFRkE3MENDN0Y5OUQ1OTc5NzgKLToxMEI5MDAwMDdFQTk0MkI1RTVBRkM3Mzg2RDNCREY5RjVDRDVCMjM4NDUKLToxMEI5MTAwMDA1RTMxOTdEM0Q4NUY0M0I0Mjc3QkUwRUZFMkVDQ0I3ODQKLToxMEI5MjAwMDRGQzYzNTAzNUU2Mzc2NjlFNDVFRDM1MzJDNDBGQjk1QzYKLToxMEI5MzAwMDJCN0JFQTY4QkY1MDFGMDc1OTZEQUI0RUM1RkQ0MDdEOUMKLToxMEI5NDAwMDFDRTQyRUNDODNDMjNDRTRDN0EzREZBRkM1RjgwOEUyRjkKLToxMEI5NTAwMDQ5NDc0RjdFQTRBN0VDQzFGNDU0M0Q1Q0YwNjUzMTJCMDAKLToxMEI5NjAwMDhFREE3RjE1NzJBRDQyMkRGQTNFREEyNzdERTBCNzYzOUQKLToxMEI5NzAwMDNDODhBOTQ1QkY0NTdERkEzOUZBRjFDODAwMDEyN0QxQjUKLToxMEI5ODAwMDY5OURGRjk0Q0NCMzIyQkE5Njc0QTdGN0RGRjVDRjczMDUKLToxMEI5OTAwMEJGN0NBRjE0Q0YwM0Q1M0ZGRkZCRjEzRjgyRTdCOUU3OTAKLToxMEI5QTAwMERGMURGRDIyOTY3RkY1OEZGOUJGNjc4M0VCOTcxRkY4QTgKLToxMEI5QjAwMDAzRjkyQjdEMDcyQzM0OUZCRTAzQUZFNTdGMUJDQkZCMjgKLToxMEI5QzAwMDJEMUU5QzZGREY0NjBCRkYxREU4MDNDOTc0REY3NERGN0IKLToxMEI5RDAwMDMwMUU2NzZCRkRGNUM1RjE2MUQyNTM5Qjc4MTJGMjcwOTIKLToxMEI5RTAwMDdFNEZFQzg1OUVGRjc4MUZFRjU1QkREMDYzNzE2M0RDMDEKLToxMEI5RjAwMEExRTk0MDEyRjlFMTRERkIxM0U4N0VGOEJFNUY1RjJDMzAKLToxMEJBMDAwMEQ1QzY4QkZFRENGNTM0OEFGMzE2N0RDOUFDMDZGMzVCMzQKLToxMEJBMTAwMEZBRDJCOEJGRDZGNEUyQjUzRjY5Mjk0MEJCRjQyMEREQzUKLToxMEJBMjAwMDU3NUNGRUQyN0Y4RTQ3RjlEM0Y3MkNCNzJCQzAzRkRGOTAKLToxMEJBMzAwMDgxOUI4OERGMURGRURDRjc0REQ5NzhERTg4OTE1RjdEMjQKLToxMEJBNDAwMDk1RkIzM0YyQUIwN0MzODVDM0ExMEZFMDgwRUIwMkI4Q0YKLToxMEJBNTAwMEQwM0REREYxRTBCMUVCN0YyRDNDM0UyNTdGQTFCRTY3RkYKLToxMEJBNjAwMDBBRjE1MTA0MkUwQUZGREQ5MTlFRTRBMDU1QTFGNUYzRTEKLToxMEJBNzAwMEY3MDcyRThFNDczQkU5NkM2NzBCRTlGRDJCQURGQkUwMkEKLToxMEJBODAwMEZGQjk3NTJCQTFBMUFDM0JGQ0JGNzZERDlDRkU1NzBGMjcKLToxMEJBOTAwMEU3RkE0OUNGMDc4M0U5RkM1N0RGQTRGMkNGOTMzRDM0OUYKLToxMEJBQTAwMERGMjFGMjNGNkVCRkEyN0NGRkVGNUVGRjdGMDFGNjUyMDcKLToxMEJBQjAwMDlEMTUwMDgwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwQTIKLToxMEJBQzAwMDAwMEJENTNDMEI3NDU0RDVCNUZCQ0VCREYzNDkzMjQ5QzAKLToxMEJBRDAwMDI2MUYyMDA4QzE5QjJGNTFGMjE5NDgwMkUxQTc5Mzg0MjkKLToxMEJBRTAwMDUwNTBDNDA5NDg4QjE1NzAwMDk1NUY0ODIyRDg5QTU2NkIKLToxMEJBRjAwMERGQ0JDNDQ0MENENEQ1NDdENTU2NUJEMTM1QTA1MDlFN0UKLToxMEJCMDAwMENGM0U1MzBDOTY1NjQyMDc1NDBBQURENUQxNDIwNTRENEYKLToxMEJCMTAwMEU5NDhBRDQ4MEQ2NDA0MTU3Q0E1RTVFREJEQ0ZCRDk5QTAKLToxMEJCMjAwMEI5Mzc4OTg4QUJBRUY1NUVCMkM4RjFEQ0YzREI2N0ZGRUQKLToxMEJCMzAwMEY3M0VFNzU4NkYwMzVGODcxM0EwMzcxMUU2RUYyOEM0N0QKLToxMEJCNDAwMDMyMDUzQzkwMEVEMEYwRTJDNEE3NUFCMjAwNTY3NzdFODAKLToxMEJCNTAwMEI0MDhDQTAwRUE3NjRGMDAxOUVCRDVCRkZFNDc3MTk4Q0EKLToxMEJCNjAwMEZBRUY5MDNDRTI3QjYyQzAyMUUxRjczRDlGODlFRjdCRDkKLToxMEJCNzAwMENFMTUwMzk2MUZFRTkwODI3MjEyRDZFRkIzMkYwRkQwMjAKLToxMEJCODAwMEJDOTkzMEJGMDNDQkQ2QUU3M0M1NjEyQzAxREEwMENBQjUKLToxMEJCOTAwMDAxQUU1NDZENUM5RUQ5RkRGNzYzNTIzQTk1NzYxNTcwRUYKLToxMEJCQTAwMDlEODYzRDA5NDBGMzM3RkMyQTJFMDAzODdGNkZEN0I5QjgKLToxMEJCQjAwMEYxM0U5Q0Y3MjJGRDVDMEJEMEQzOEM1MzhDOEVENkNERkUKLToxMEJCQzAwMDY1Q0ZDRTNGOERCRjA3QkJENEJERjA0RUYxRTM1OEY2MzUKLToxMEJCRDAwMEJDNzAzNEZGNDVBQUZGRTJBRDUxRUY2MDU5N0ZDOTdEQ0IKLToxMEJCRTAwMEVGQjUyREM1RjYzQkFFNTQxOUJFRThCRUY3REFBMDg4MTYKLToxMEJCRjAwMEY2N0I3MDExRjVFRkREOTNFOEIyNjcxMTdDRkYxODA1NTUKLToxMEJDMDAwMDMxRkJCRkQ0QkVBRkY5N0ZCQTZGMDAzRkMwMTAwMEFCQUQKLToxMEJDMTAwMEVDNzU2NDIzN0MwRjQyMzBBNDYyNzkzRkMwOEMwRTY3QzAKLToxMEJDMjAwMDdGNzg1NjUxRTMxMDFBMDcyMTE4MEEyMDgzRjg5MUQzMjAKLToxMEJDMzAwMDU3Q0U4MjI0MkEzNzdDMjQxN0QzRjgzOTMzQjIxMDBFMUEKLToxMEJDNDAwMEJGNkE3MTZGNTVBOTg3ODVGMUQwM0VEMjFERDg4MDcwMkIKLToxMEJDNTAwMDgxRTI1REJFMTlFQkQ2MkJFQkRDMUI3ODg2M0IwMUM2N0YKLToxMEJDNjAwMDAzN0NDQkExQ0QzNzc0RDYwQzA5RTc2QjZENDFCODcwNUUKLToxMEJDNzAwMDlFRDYyMTE2NTcyQkNFQTNBODk2QTBCRDk4Q0I3N0E5MDgKLToxMEJDODAwMDdDNjBFODc1MDc2ODVEQzU2OTgzQTAzNkY2MjJGRTczOUYKLToxMEJDOTAwMDAyRDYwQkI0M0FBRTE3OUYxQjUzQzc3RjcxQjBDRkE1MjYKLToxMEJDQTAwMEUwRkE3MTZFMDUwMkI4MjUzQkM0OENDN0ZFMzM1NTE3MDgKLToxMEJDQjAwMEVGMzMxRTAyN0U5N0YzRjJGMUY0RjgyNUYwNjRDNjhGOUQKLToxMEJDQzAwMDhFQjc3RTc4MDI3MEQwNzg4NUZFOEJGNjlGQkUyMTQ0QjkKLToxMEJDRDAwMDcyQTg4MEUyMEY4QkZENDgxNzI1QzJBNzNCQzM4MUYzRjIKLToxMEJDRTAwMDU5OTNFRjcwNkY5MEY4QkJBQThDRDdDNjU5RThDRjFBNUEKLToxMEJDRjAwMDAzN0UxMTdGOUVCOEUyMjg5RTYzRTZFM0ZEOUJGMTdDMDQKLToxMEJEMDAwMEI5RjhENUU5MTIwNzczOThDRTcxMjM5REVFMDBDMjdGNzIKLToxMEJEMTAwMEJGMkFGMDdFM0ZFMjVEOTJBMkY4RDVGMTY2QTY0MzNERDAKLToxMEJEMjAwMEYxNEU3OTE0RkZEMTcyOEFFQkZEMzE0QzQ4Qjg4OEM4QzYKLToxMEJEMzAwMEY1NTc0MTQxMjNDRTUzMjM0RjA5RkI3MUZFMzMxNTA5QkIKLToxMEJENDAwMDZFM0JDOThCMDQ0MTY5MUM5Njk1NDNBQjAwRjdEMTkzQjgKLToxMEJENTAwMDY5NTNBODlDMUFDMTNEQzVDMDdCRUQ3OTA3MjgzMUZCMEEKLToxMEJENjAwMEFCODQxNDQzQkQyNzMzOUZDNzU3M0I4NjFCQzZGNTBDRDYKLToxMEJENzAwMEFGNzBEMEY3MUE1Nzk2QTFGRkVCNzE0OUM1NTA0MkUzNTcKLToxMEJEODAwMEE2Q0ZBMEY2QUY2NTVDNjUxODM3RkI3OENGQTZDNTU4N0YKLToxMEJEOTAwMERFMjg4NUNCODgzOTdBMEUyRUE4MjI3Q0NENTRDNzFBOEUKLToxMEJEQTAwMEZBRUQ0MkI1NDJGMjFDQTk5MTAzNUIxMDFGQjU1MjcwMjcKLToxMEJEQjAwMDY4MzFFMkVERkE4Mjg5NDZGODI0OTg0NkZCQUNCMzIwNUMKLToxMEJEQzAwMDZCNjFCRjFCREM5NTg2RjYxQjJCNjYxQUU2QURGNUQ0QkUKLToxMEJERDAwMDFBRUE3NTREOUY4MjkyMDYzMEI5RTkwMjI4QTUwMDYzRTAKLToxMEJERTAwMDgzMUQ4NkYxQTUwNzc2MTlGQTI3QkQwQTcyMjI5NjYzOEMKLToxMEJERjAwMDBGQTlBRDU0OTY3Njg3NTI4OTdENkQ2OTBFQkYyNTE5QkUKLToxMEJFMDAwMDU5MzhFQ0FEQzZFREMwRjgwRjFBNUZBMkIyQzk4MUY4N0YKLToxMEJFMTAwMEMwRUZFN0UyNDQ4OUY0NjIzRUY3MUY4QjBCQjQyMkJDMEIKLToxMEJFMjAwMEU3MkMwMTFGRTFFMTZFMzk1MDQwNjVGQzg4M0I4QTIxMTcKLToxMEJFMzAwMDFCRTA2NEM2ODM3MjMyQzEwRkJFNjMyQUYyQzFDNDhGOTUKLToxMEJFNDAwMDAzQUQ1NEJGRjY0Mjg3RUMyMzNEQkM1REY2REI0QTg4NjgKLToxMEJFNTAwMEVFQjMxMjdFNEY3QUI3NDMwMkEyN0I5REQzRTIwOTkwRTQKLToxMEJFNjAwMERENEFFRDI4NUUxQkMzNUYxRjdFMUI2RUY1MTZGNjk3M0QKLToxMEJFNzAwMEQ3NEQ3OTk1MTE5QUJGMkRDM0IzNzEyRkU5Q0RBQTNGNDQKLToxMEJFODAwMDJEOTJCM0ZCRjcwMzk3MTIwOUVCNzhDOUE2NzFERUVDOEMKLToxMEJFOTAwMDkxMzg0RTRFOUNFNjIwQkQxRTVGMkRGM0JFRTA2QkQ2NjIKLToxMEJFQTAwMEMwNTY5QzY3OURDNTFEQTcwOTNGREI1N0Q3NzRFQjY2M0QKLToxMEJFQjAwMDkyRUJGNjJDQTExRkUyN0YwN0FBODRGMEM3QTdGOUU0NTIKLToxMEJFQzAwMDIyMUFGNzFGMTI2Qzg1RTg3QTRCMkI4MEY3OTE5MjY1NDYKLToxMEJFRDAwMDExN0NBRkI4ODYyQzJDQTJGMTg5NUMxRjVGMjFGMDA4ODEKLToxMEJFRTAwMEIzMkM4MTNDOUM3MkVGRDQxM0ZFNDRDNDQzRkM4RDk2NkEKLToxMEJFRjAwMDRDQjQ0MDkwNTRFMUY5NUQyRUQ2Qzc4N0RFQ0M5NDQ5MEUKLToxMEJGMDAwMDk2QTBDMDQyRkE2NDBEQUEzN0QyMjdDMzFFQ0M3QTc0MTkKLToxMEJGMTAwMDFGOEQzRjYwODUzQzJDOTYyRUYwOUNDREM1RkFGNzY3QUYKLToxMEJGMjAwMDU5NDBDMkY2Q0U4QUFBODRBMjE4RkMyNTlEOTc0MDJEQkUKLToxMEJGMzAwMDhERDZEQkIzNTQ4NjIzNDkwOTAzQzk3MUQyNzk4NURCRDkKLToxMEJGNDAwMEExMjlERjQyRkE0NjVGMjc2OTgxRkFENkRBOTg3NTQwNUYKLToxMEJGNTAwMEYxQUMyMkI4Mzc1Q0REQUQ5MkJFNEEzQTIyRjYwOTEwNDgKLToxMEJGNjAwMENFRjBFMkQ2RkU4Njc2NTEyNTQyMkFFMThDODU4OUZEMDcKLToxMEJGNzAwMEU5RjBCN0VERTUyOTJBRDIzMUFERDI5REUyQTZGMjY3MEMKLToxMEJGODAwMDg4RTQ0OThDNjczRkE5QkZFRkQzOUYyQkE4RjY2ODY4NjgKLToxMEJGOTAwMDFBQjY2RjI3MUQyOERBODM4MDdDQkNDMUE2QjU5MzBBMjgKLToxMEJGQTAwMEMxN0E5QUE0QjVGQjFGRjU0RTIzM0FDQUM2RkUyNUQ5MUQKLToxMEJGQjAwMDdERkQzRDhFOENFOEZDNTMzNjNGMUE2QTJCRUM4RkQ3MDMKLToxMEJGQzAwMEJENTNFRDZDODdFMzkxMEZFQ0Q4NzdDRDU1ODVDMzYwRjkKLToxMEJGRDAwMDAwM0IxMUM1NkJDMjI1RjA5QTI0RjA3QTAxQjUzREFFNDUKLToxMEJGRTAwMDczOTc0M0FDRjM5RUE0OEUyMkZFN0FEODgyNTI5RjAzQUQKLToxMEJGRjAwMEYwOTJDQjU3OUQ1NTRFRjAwNzhCRThGQjkyMjRDRkIwQzMKLToxMEMwMDAwMEE5Qzg2RjlEMzZDRkE4RUY5MDFFRTk4QTczNkZDMTcxRTIKLToxMEMwMTAwMEI1Nzc3RUY4NTgxM0M5RjFFQ0JGMTVBMDA3MDM5RDhBQzgKLToxMEMwMjAwMDI3NjExQ0FFRDNFMEZBOTRFNUJGNDYyRTRDMjZGRkE2NEUKLToxMEMwMzAwMDBGOEZDNEJGQjhFNkY3MkREMTNBRTk4M0E0Mjg1RTNEM0YKLToxMEMwNDAwMEI5RDhCRTIxMDZDRjBFMDdFOTJCNTFGRkY3QUM2N0JDNkMKLToxMEMwNTAwMDZENDRERkRCMUM4Q0E3QjU5QTBDQjVBNUMwNDYwQkYyNkUKLToxMEMwNjAwMEZGNTlEN0I2QUYxMzNGOUNERDZFMDVGMjkzM0FBOTkxMDUKLToxMEMwNzAwMEVDNjM4MTgzRTUwOEQyQzMxOUI1QzhGNzQ1NkY1OEJDOTYKLToxMEMwODAwMEU0ODc3NTIzN0Y3ODg4M0YxQUYzMERGMzlEOURGMjU2NjAKLToxMEMwOTAwMDZBMTE4RTNCOUJBRUE0MTI3RTU2ODY2RDhDQjc4NTBBQzQKLToxMEMwQTAwMDA0RURBODFGM0JEMzZGQUJBRUM0RjZDRTIzMkFCNzc3RkYKLToxMEMwQjAwMDY4RjMzQzlCRTc1OTlFQzU3NjY1OUFFQjdEREM5N0U0NzcKLToxMEMwQzAwMDk5MjQ1RjFDMzMzOEJEQzg2MkJFQUZFQjQzQzQ3MzAzMTEKLToxMEMwRDAwMDZEMzM3NTcwM0U2OEFCNzQwNEM4QUY2Q0E4NjgyOTI0RDIKLToxMEMwRTAwMDdCQjAyNjI1N0YxOEUwM0UxQUE2NDk2QzVGMUI5QTNFNUUKLToxMEMwRjAwMDY2QkNFQkYzMkJFNzY1NTBEM0EyNzU3NzhFQ0E3NjUwRkEKLToxMEMxMDAwMDUxM0NDQzBGQ0E3OTFCQjdENzM1OUQ2NUJEOERFMDY0MTYKLToxMEMxMTAwMDkxRENGNEI0MDhGREI2RDEwQUI3RDY2MjU5Rjc0RkY5RUQKLToxMEMxMjAwMEQ2NUFFQzVGODcyQ0M1RjYwMUY2RDlENkM0RTgzRkU4QUQKLToxMEMxMzAwMEY4QTg0RkNGOTcyMEVEMUU5RUY1NjYzQ0U5RDU1QUM5NjkKLToxMEMxNDAwMDM1MEY3MDBGODdCMzZEQjVDQTcwQUNDN0I5RTY0OTU4RTMKLToxMEMxNTAwMDBGNkNFOUY1NzIzREQzMzVDRjgyRjU4RUFDREE1QTY1QjYKLToxMEMxNjAwMDIyRDY4N0JCN0U2ODcxMDNGQzY5Q0I0QUQxM0ZDQjc1NzEKLToxMEMxNzAwMDk4RUEwN0IzMUUxMEVEODk4MjBGN0U5ODc1NUJBREJGRkMKLToxMEMxODAwMDkwRjhDQkM5NzgzOUQzOUVDMEYyMzExODlFOTczNUJENEYKLToxMEMxOTAwMDY4QzA0QkJGNzY1OUJBRDU0QjdDMzU1RkU4QzE1M0VCQ0QKLToxMEMxQTAwMDQ3NkM2NkZGMjczNzk0NEY2QjZFMjczRDhCNzgxQjhBNTEKLToxMEMxQjAwMEI0QTlDMDdGQUZBMERDM0IxMDBGRTkzOUUwQjE2MEZGNEMKLToxMEMxQzAwMEY0NUZBMEZEQTFGRUVGODU0NjExRkU5NkZEMjIyRTI4MEMKLToxMEMxRDAwMDIxM0Q1NjNGRjE5MjhERUNDRjEyNTlDRDI3QjlGQUY1OUEKLToxMEMxRTAwMDY4REY3RjkzNUM5RDRFMEM3MTdENTlEMzFFODZFQjFGREIKLToxMEMxRjAwMEI5MkVFMTlGQjgyMjg1NUVFNENGRTVCMEQxNDZFRENCMDQKLToxMEMyMDAwMDQxMzk0RTc2MDJCNTI4RkIzMTJCOUQyRkRCQzgwRjVCRTEKLToxMEMyMTAwMEY5QjRGNTc4MzhDNjhFQUU4MkYwMzE5MkQzQkE2N0FERjQKLToxMEMyMjAwMEM3QzMzMUY2MTY2ODdDMEM3RjFEQjcwODM4MTQwRDFGODQKLToxMEMyMzAwMDRCRTREMDIyOUI4MDZCMkZDMUI1M0ExNUZENzk5OUNDODgKLToxMEMyNDAwMDQzNjhBODhGRkRBMEJBMDI4RTQzMzJFMjgxRjg2RUREMEEKLToxMEMyNTAwMDE1NkYxN0ZCMDZCMDdCMURDRDY4RTc1MUU0NzYzNEVGMTAKLToxMEMyNjAwMEUyQjIxREU3MjRCRDMzNEMwOURCREMzODRGQkRBNjk3OTUKLToxMEMyNzAwMEM3ODc4RURCMjA2NkZDMzFDRDdFMjVFRjkyQjg1REQ3NzcKLToxMEMyODAwMDE3RDE3NjYxOUZBMEQwMzNENjgyNzBBQzlFRjNFQTE0QUEKLToxMEMyOTAwMEEyOEI0RUNGNkIxM0EwMjMyRTk1RTlFMkQ2RThFMjI2QkYKLToxMEMyQTAwMEJBRThGODQ3N0M5NjJBMzhFRUU1MEIzODJFNkIyMEJFQUMKLToxMEMyQjAwMEQwRjEyRkUwRUQ4QzE3RkEyMkIyMzM4RUZEMjQzM0ZDM0YKLToxMEMyQzAwMEU3MzQzRUQwRjc5MTkwMkRFQTgzQzE5RjkwOUQyOEU4RjYKLToxMEMyRDAwMEZBMkY4NjNGMjE1QkM4QjE3OTFGQkExQ0Y3QzU3RDJEQTcKLToxMEMyRTAwMDAzRkIyOTNBREM5N0NGNjcyMURCMTdFMTMzNURDRkQ0MUQKLToxMEMyRjAwMDgzQUY4MEU2RDdGNThBOEU2NzFENEUxRDVGOUQxNEZGQzQKLToxMEMzMDAwMDBDMDBBN0QyRjQ0QkMzN0U5NDUwMTUwNTBENTA5MDlEQTAKLToxMEMzMTAwMDJERjQ1OEM3NEMyMDNBMjg0REJCQjlERkU1RUU0N0Q3N0UKLToxMEMzMjAwMEI3ODNFRDRCRDdCM0U2RkRFOUZBNTZERkE3QUU3N0Y1NTUKLToxMEMzMzAwMEZENEU0NTQ1QzJGQTEwQzM3NjhBQUJBRTNERUYzM0Y4RTkKLToxMEMzNDAwMEJEOTVCMEMyRTAxNzU3M0JFRTM0RDQ2QjVDREYzMUY0REYKLToxMEMzNTAwMEZGNUE0NjhCQTE3REE2QkFERUQwN0U3REMxMEYwQ0Y1QkIKLToxMEMzNjAwMDFCREMzRjM2RjlFRDlCNEQ3RUZCN0YxQURBQTc4NDQzMzkKLToxMEMzNzAwMEVDNjdCRkQ2M0MwMzE0NzRBQ0FFRjkyMEMyRkU3NkIwQjUKLToxMEMzODAwMEQ5QzVGNTdEQ0QxOTVDQkVEQ0FDQjI3Q0VGNkYyRUUwN0IKLToxMEMzOTAwMEYyNDBCMzlCQkZGRkI2Qjk4MkNCNTc5QjNENUM4NjlBRjgKLToxMEMzQTAwMEJENUM5QUY1QzJFQ0U3QkZBMTUwN0M1MjExREE1ODRENDIKLToxMEMzQjAwMEFBN0M1QjhFRUZFRTZDRTQ4N0Q3MkQ4MUQ2NDRDNEQzODQKLToxMEMzQzAwMDg0NkVFMThGQzM3MkIzM0QzRTc3RUMxRUIyRUIyRTlCQzEKLToxMEMzRDAwMDlCRUM2MURCREU4OTkyM0E4MDNGOTc4NEY2Q0UxM0MzRjMKLToxMEMzRTAwMDJGNDlCM0MyRTAyMUJGMDdDREYzNDBGQzc1NkZCNjg1N0UKLToxMEMzRjAwMEU5NDc2QTFGNTBFRUU2M0JDMDlBOEVGMjM2N0ZCRUU0RjQKLToxMEM0MDAwMDZFMTVFNkMwMEZBOTVDMDY3REQ4M0U1QjAxM0ZEOUZGRTMKLToxMEM0MTAwMDVBQTcxMkI0MjczMTY4NUUwN0MyMzk0RjgwMDk3NjZBN0QKLToxMEM0MjAwMDI3RkI5RDlFQTY5MERGN0ExMzdENDQ3ODY1OEYwQ0Q3RkQKLToxMEM0MzAwMEUwRjc3OTE1QkZGQjhDRTJFNDZGM0EzQkFDQzQyNzM3RDkKLToxMEM0NDAwMDFGQjhFRkQ0M0REODBFNkRGRTcyOTI4RjNFQkZDMUZGNzQKLToxMEM0NTAwMEI2RTU3MkZDODY3QkIzODU1Q0Y1NEFFRTkwODdGQzlENjEKLToxMEM0NjAwMDE0QzUxREVCRkZFQkE1Mzc1QkY4RkZCMzVCRkQ3MjEyNDQKLToxMEM0NzAwMEUyMzNGMjA2QjAxRkE3Q0IyM0VFQUY5REUwRDdFNUEyRDMKLToxMEM0ODAwMEQ2QTUwNDQ3Mjc5MUJERkY0MTM1RjVBRjNCQTQzMjVFRTkKLToxMEM0OTAwMDc0QjlEMEU1NDA4RkZCNzQzOUE4OTE5RjZEQTVGRTY3RjQKLToxMEM0QTAwMDhFMDBDN0NGMTM3QTdDMUYzQzRGRkIzNEY5OUQxNTkxNEEKLToxMEM0QjAwMDhERDUxNDg3NUQyQTRFOUM3NEJFRTMyNUVBQjdBN0Q5QjMKLToxMEM0QzAwMEM3N0NCNEJCNzkzRTk3QzFFNkU1MUE3RjM2NzJGREU1QkQKLToxMEM0RDAwMEU2MjZBRUVGNkZGNjczNzlBMEI5NURFM0NGOEREQ0ZFOTMKLToxMEM0RTAwMDZBRjM2MzVDN0ZBRDM5QTBGMUU5NzZGRUVFQ0UxMUY2MUEKLToxMEM0RjAwMEY3RTM1MEY1MzBFMkJGQTdCMjQ1REUwNjFDOTUxQzQ3QjYKLToxMEM1MDAwMDgwMjJDQTJGQ0EyNzc1MTkyRjBBN0ZDQUM0MUY2NkJFODgKLToxMEM1MTAwMEQwRjkwMTUwNkY0ODg4QUY2RkEyOUQyNUZCNzAwQkY4RDIKLToxMEM1MjAwMDhCMTY2MzM5N0ZEOTQ2RUI2NEU5Q0JGM0M1NEE2NzFCQTkKLToxMEM1MzAwMEZCMUY2NjdEQjgwMjgyQUNFRkZBRUI3N0UxRkY1RjRBNDIKLToxMEM1NDAwMEJGQ0IxODlGOTJCREQyRjVERjZBMDhGMzdDNzZGOTRFMTcKLToxMEM1NTAwMDM3RTU0RkJFM0FCQkUyRDJFQzBBMkNBNkZFN0Q3MTc2REYKLToxMEM1NjAwMDdDRjcyMkQ5NzJFOTM4M0I3QkE0MThBRkM3RDlFODNGRTIKLToxMEM1NzAwMDAyRDlFNURFODBDQzdFRjVGMkFDOEQ0OTFDNjc1NzQ0Q0MKLToxMEM1ODAwMDkyQzgwRjU4RDEyNTMzM0QzMENFNTQ4NjIzREQ5NjY5QUQKLToxMEM1OTAwMDc0RUI4MUUwMUY4OTJFQ0JBNjJDRTMzQ0RDRjI0REM2NjgKLToxMEM1QTAwMEZEQUM3NERFOTQxQzU0MDdGNEQzMDZEQzY3M0QzQ0Y4MDQKLToxMEM1QjAwMDExRTVFM0VBMzU3Q0YxNzc4NEE3QTlGQkU2OTkyRkM3NUIKLToxMEM1QzAwMEY0RkIyNDNCMzE5REYzNTUxMzYwMDJFMTAzRTE3NzA3NEYKLToxMEM1RDAwMDQ5Q0UwRUM5MkM2NzgzRjFDNTY5OEM0Rjg4Q0ZDRjM1MDIKLToxMEM1RTAwMENGOUZGOTMyRjJGREU5MEJDRDFDN0ZGRDMzRkI4MTFGOUMKLToxMEM1RjAwMEY4NDc3RTc1RjQ1QTk3RTc0REM4RTFCQzVCRDg0NkYyMjAKLToxMEM2MDAwMEEzRDM2RjFERTk0ODg0N0I1RDk1MjM0MDgxNzY2RkI5ODQKLToxMEM2MTAwMDRCQTFGNTdCMjU4RjRDNzk4N0RFNzdDMUREODJGOEFCQTYKLToxMEM2MjAwMERDRkQ5QjIzMjQxRjk1MEUyNzlGMUJFMDI2N0E2MkU5RTEKLToxMEM2MzAwMDM5RjE5MEFGRDU4OUZEMjZCQ0VBOTFDOTdEMkY3RjM5QUMKLToxMEM2NDAwMERDNEFERDc0N0JBM0RCOUZDOTNEMTFEOUM3Nzk4MTVDQ0UKLToxMEM2NTAwMDk2MjNDMEQ4RTI2MkNFMTc5NzIzNzNCQ0Q5NEFGMTI2M0QKLToxMEM2NjAwMDJBQTRCM0NFRTkwQ0VGRDkyMEI4RTk3QjM0OEYyNUYyQTgKLToxMEM2NzAwMDRCOTMyRjc4RTQyNDg0NkY5RDE2MUY0RTdDQ0ZDQjcwOTQKLToxMEM2ODAwMDc4MUMyQUVCMTdCQjE2NEZEQTMzMkNGODJEOEE0Nzk3MDQKLToxMEM2OTAwMENEQjc5REYyOURGMEFCMzhDRUVCOUFFMTlCOTAyM0Y0QTEKLToxMEM2QTAwMDc4NzJBQTc3MDJFM0Q3QTlFNjUzREM1MDIzRjc2QzdCQjQKLToxMEM2QjAwMDlDRjhBMTMzQzE0RDc5MUJCM0JFRDVGNURCNjA3RTdCMDEKLToxMEM2QzAwMDgzRUJFQzgwN0VBNDVFMzY1OEM0MzlDMUI4NkFCNTk0NTkKLToxMEM2RDAwMEUyM0ZGMjJGMjkyRUQ0RTM0NDczRkY5QUJDQUFFQjA4NjEKLToxMEM2RTAwMEJFMUE3OTRBQzg0MzcwQjkyQzlGQ0JBNzBENEQxRjdENDgKLToxMEM2RjAwMDZFOUNBNkFGREZEMDU1RUU1QTEyOTMwNzY5Q0Y5MUI0NjYKLToxMEM3MDAwMEZDQUVFMjdBREYxMUE1REIxN0E1RUZENEM4N0M4M0ZENzAKLToxMEM3MTAwMEY5QkZFRUFGQ0Q0NjM3NDc0MjE5MkE5MjAyQzI4RjAwQzkKLToxMEM3MjAwMEUxNEYyQzgwMTA5NzhCMjBDMkE1MEYzOTg5Q0EyNUUwRDQKLToxMEM3MzAwMEU2RjIzNkYwNzIxOUNFRjUzNUU3OTBCRjYwOEQwQzI1MjQKLToxMEM3NDAwMDM5M0VGNUMyREYwQjg5MkY0RTVEMzNEOTk1QTU0NkVERjUKLToxMEM3NTAwMEFCNkU2RjJGRDdBRUM2RDM3OUQyMDBGQ0YwOTBDNkI3QzAKLToxMEM3NjAwMEJBREUxRTk0M0UyNkJEREQzQjE2RjU4MzRDNzlBMUM4OEEKLToxMEM3NzAwMEEyMTcyOURGQkJDN0VFREExQUEzMUZDMDZGRjQxNzA3OTEKLToxMEM3ODAwMEQzMTczNThBODhEQkI3NUJEQ0FGNTMxRUQxRkY1QTFBNEIKLToxMEM3OTAwMDBDMjQ1RjdBMzk5QkZDNDlFNEM3RTQwNTYxMjUxQkY5NDkKLToxMEM3QTAwMDJEM0ZENUYzMzRGMUIzRkY4MTI5MjlBQzg3NDk4RjVDNDQKLToxMEM3QjAwMDg5NzQ3ODU3OUNCN0MwMEEyOTkwODdGQkRBRDUyOUVBOTMKLToxMEM3QzAwMDQ1QjdBNzA0MjRCNkU3NDFBNkM3NDIwODVCNjkxRkI3NkYKLToxMEM3RDAwMDAyQjBGRTVDMEMyQTk3NEJDMUMzNzRDMTk5MTM4QTUxRjUKLToxMEM3RTAwMDlGRENERUE5OENEQjgwNzA5NUE0NDZCMjQ5Q0U4QTI2RjgKLToxMEM3RjAwMDFFNEQ5NTcwRkQ2MkYyNjM5RDlDNjM2OTI3N0Y0Mzg3QTAKLToxMEM4MDAwMEYzNDQ4RUYwNjMyRkU2Nzg3NjExNUQ0QjUyNDMxQjFFODYKLToxMEM4MTAwMDI2RkY2RUE3MDVDOEJGM0IzMUYxM0I3NzQwOEM3RDFDREUKLToxMEM4MjAwMDkxNTdENTQ1RkI3ODRFMTJFNzdDRkUyRUJCQzg4RjQxNTEKLToxMEM4MzAwMDY0QTgzN0M2QUYwRUU3NTZCRjQ0RjNGRDU2OEJFN0ExOTkKLToxMEM4NDAwMDdCM0Q5RkZGRDRCQTA0NEU2MURBMTBDNjAxOEUxQjQ1QjIKLToxMEM4NTAwMEZBQTdCRjlDRjk3OTVDMDlFOTdCOTFFRkYzNDMwNUFGMzcKLToxMEM4NjAwMENCRjU3NzcyNEVENEI2ODlGREY4QzlBRjFBOTFFNzNCODQKLToxMEM4NzAwMDQ0NzA5NUQ4NTBBNTExRkM0RkQ4MDM1QkQ4RkY2OTFDQjQKLToxMEM4ODAwMDQ1Nzk4ODY1NEZEQTJENjQ4RjhGQTIzRUE1RjNDRTc3NjgKLToxMEM4OTAwMDlBMUQ1Q0ZFMDlFMzE0MkFGRjhDNzEwQTk1RUY2MjlDRDUKLToxMEM4QTAwMDQyRTU1RjMwNEVBMUYyRjZGMzYzNTEyOTIzMUQ3MjNEM0MKLToxMEM4QjAwMDdGNjE3RDM5QzgzRTA2RDcxNzdFQ0RCRjg2RjkwMzlEQkYKLToxMEM4QzAwMEQzNzU2QjdDNUREQ0Y5REU3RDA5QzQwN0JCNjQ3NzFFMjQKLToxMEM4RDAwMDgyNTBCNDUzRTE3Q0MyRTlERDEzMDI3MjU2MkM1RTdEQjYKLToxMEM4RTAwMDExODJBMzc4RDcxRjFFOUE1QzQ2RTMxNDk3ODRGRDRGRUMKLToxMEM4RjAwMEVGM0EzQjk0RTMxRjEzN0M3REY4RThCMjA5N0M2OEYwQzMKLToxMEM5MDAwMDNFOTcxMkRBNDBFMzlGREI5OTREMTBBMjNFMDBDMTg3QUIKLToxMEM5MTAwMDQ0Q0YwMUYyNjEwMDJEQ0MyN0NGRTcwOEZGRjY0NjdCMUMKLToxMEM5MjAwMEE0MkNGNjVDMTJDOEY0NTNERTUxQjMxNzM1RjI4NUE0N0IKLToxMEM5MzAwMDcwQTE5NjdGOUQ0ODdDOURGQjNBQURFNzNGMjA0MzFFNEEKLToxMEM5NDAwMEYzQTczMUJGNTA5MDJCRjBBMDk3NDU1RDM2MkZFNTQ1RkEKLToxMEM5NTAwMDlFRUJGQUUzOUNFQjExMEZCMzI3Q0QyQzk3NjNFNDJERUMKLToxMEM5NjAwMDIzNzc4OEU4MzdGMUIzOUYzQzlDQ0VGRDVEQjRENENERUUKLToxMEM5NzAwMEIwQjlDNjg1RkQ2RTcxRUM3RDg1NTBCMEQwRjU2RTREQjkKLToxMEM5ODAwMDBBRDY2RkNEOTBGNjUzQjk1OENEOUE5RUFBMTJCODAxMjcKLToxMEM5OTAwMERFQ0ZEMjgyQ0FGREM0NjJCM0RDQjUzNkIyQUY5NTI0MTUKLToxMEM5QTAwMDU0MzFGQUIzREE5MTQwMjdBMDdERjUxQTU3OUFBMUZFQzcKLToxMEM5QjAwMEI1OEMxMTg2RkUzM0Q1MUM0M0ZCRjUwNTYzMENFREZBRUYKLToxMEM5QzAwMEJBQjNEQ0E1ODY3RTI0QUZFNEZGRTIzRTk4RUVCMDU1MTQKLToxMEM5RDAwMEU2RjM5NEEyOUQxRkJGQkQ4QUY3N0Y3MzE5RURCRjE3QzEKLToxMEM5RTAwMEYxNjc0MzA3RTE4MzhBRjUzRjdBOThENEM2Q0U3RDQ5NDMKLToxMEM5RjAwMDdDQkU2QUYyMzNFQkJBOUVEQUVGNTEwN0Y3MzMzRjgxMjAKLToxMENBMDAwMEREMDNGQTY3RjU4M0Y4Njc1RkQ0Q0Y0NEZERjExMEU5RTEKLToxMENBMTAwMDhGOTIxNzZFRTJGM0YyRTcyNjdFNzY4NTRBRkU3MjJFM0IKLToxMENBMjAwMEZBOUY4ODRBQjNGRkQ5QUJGOTlGNjZGRUU5RTM1MzQ5MDEKLToxMENBMzAwMDE1N0M3MzUwNjY3REFCRkJBMTY2RkUwMUI4NEZCM0UzNzYKLToxMENBNDAwMEEyQkM1QzM5OUZGREE2QjAzQjdGMjU3OTRGOEJFNTZCN0YKLToxMENBNTAwMEFEMzRFNTE1NEE2QzY4MDcyOERGRjc3QjE5QjZEMDg3MzcKLToxMENBNjAwMDBCMDg4NzhFRkY5QzI4REZDMzZEOUI1RjE5NUVDNkRGQjYKLToxMENBNzAwMEZEODlCODY0QkQ5NjY3NjhDRUQ1RkM4RUJBQkRBRjBDOTMKLToxMENBODAwMDRGOEZCNkMzNURFRjFBRkFDM0JERDI3RTQzQkQyRENCMjcKLToxMENBOTAwMDU4N0ZCMDcyN0ZFQ0Y4QzFGNEQwQjI0RDc3REE3Qzk0NTUKLToxMENBQTAwMDVGN0U0NEU0MUJDREVEM0EzQzM1RkJFMjNDQTQyRjk1ODAKLToxMENBQjAwMERENzY4RTZCRUE1RDFFQ0U4MzI4ODNFNDQxNzRCRDcwMDMKLToxMENBQzAwMEIzMEM4RDAzRTlCNzBEREFCQ0IzRjZDNTgxRkMyNUU2REUKLToxMENBRDAwMDNEOEFCQzQyRjBGODdGMjFFQ0NDRDE2NDBGNzg2M0Q2NUMKLToxMENBRTAwMEY5NjFBRUM4MDM5RjRBRDlGODZGOUY2MkJGNTNCRjA0NzQKLToxMENBRjAwMDM3QTFGRTU0OEFEMEI3QzU5RDI3MkMxNkIyMTNGMTgyRjgKLToxMENCMDAwMDVGOEE1RDYxNEIyQURENTM1OTlFRTBBNzczRTA4NjE1NkQKLToxMENCMTAwMDg5N0UzQUZGMjlDOThFRkNEMTgxQTQ3RjIyNzdFRTQzMUEKLToxMENCMjAwMDBFRTRCQkI3MkQxNjgzRERFOTI1NUQ4N0Y1NkQ0RkNGOEMKLToxMENCMzAwMDk5NDNFNzZERDdFRjhCMEI1QUJFQzQ3RUI2NTExRTkzNTcKLToxMENCNDAwMEVDNTQ5NTkwRjc0NUM0MzdGQUY5MTZDQTQ3QzNGRDYwMEYKLToxMENCNTAwMDM4RUZBMkZENTNGRDU4RUVEN0RGN0M4NENFNkIwRTBBNzIKLToxMENCNjAwMEY5Qzc2NkE3MzlBRUJDMjUyNkFFODQ0RDQyN0UxREY4QjYKLToxMENCNzAwMDRCRkVDQkNBOTczN0RBMjhERUY5QUFFNDdFNkZBRTMzRDQKLToxMENCODAwMDFBNUY4RUVFMkZDRkJBQkMzNzFDMTZGMjdFNjZGNzI3REYKLToxMENCOTAwMDZGOTI1RTNGODNGNjJFNTZERTc1N0NFOTcyREVGMDk4NkEKLToxMENCQTAwMENDRjJBODdGM0ZCRDVCOUUxMTE4MDBCRkNGNkE3QzAwMEUKLToxMENCQjAwMEFFN0NDM0Y5RDc5QUE5RTdFNjkwNUQ1QkQzQTVGMEI5M0YKLToxMENCQzAwMERFNjBGNkJBQTFERDc4REVGNURDMUVGQjcyNzExRTJDOEMKLToxMENCRDAwMEY2RDFBQkRCRDNBRTRGNTIyQjBCNDVEOUMyRTdBRTFCMjAKLToxMENCRTAwMDM1QkQyM0ZDMThCNEEzRDY3NEIyQTNCNTEyRTdEMTBFOTkKLToxMENCRjAwMDc3MERFMzdCMTU4NzI1MDhBQUUzNzg4QTlCMUM0OEI3NDUKLToxMENDMDAwMEI5NjIzQUZBRUUyNDdGMEMzMjBBMTQ1QTY3OEU0NkNGODQKLToxMENDMTAwMEI5NUE3RTY3NUVEN0JDM0NBMkQ3MUYzQjk3MUNGNjYwMTMKLToxMENDMjAwMEQzMjdCOTM5QkNDRjZGODA5RkZEQzFDMzI5REU0Q0JBNzEKLToxMENDMzAwMDVGMzBCQjU1RjBGN0UxOTQ0ODBGRTU4MzBFNEY0RDkwMDAKLToxMENDNDAwMEU4NUMwOUU3NkY4QkY1RjcwRTVCQkQ5OThEQkMyRkZEOTYKLToxMENDNTAwMDlDRjE2QUY5NjJDMjY1QzRCMzlBM0U0NDdBRkEyNTExMUUKLToxMENDNjAwMDk3MzFGRjJCQzMxRjY0QkU1QTAxODFGRDFFNUNCN0RFRTYKLToxMENDNzAwMDFENjRCRjc0MTU4OEY4RENFQzk3RDc0RkY5RDA0Njc2NjEKLToxMENDODAwMEMxMUM0NzU2RUVEQTdCODRDRTJGRkFFNTEzNENGQzdBQjIKLToxMENDOTAwMEE5RkM4MTM5N0UxRENDQUZDRjRGRjU2NkU0QzVFNEVGMkEKLToxMENDQTAwMENDRkU3OTlGMUZBQUZCNTE1QjEzRjg3Q0U3QTVBOThGRTcKLToxMENDQjAwMDlFNUU4NUY1QkJCNjI2QjgyODVFM0VGOUE0REQ0RjdBQTgKLToxMENDQzAwMEY5RTQxNjdCNDBDMkY2OTNBOTkxNkU4QTEzNEVFRTI4QzIKLToxMENDRDAwMDcyRTMwQ0IwQ0NBMkZFRDdCMzY0RDc5RkIxMzI1RkUwNTEKLToxMENDRTAwMENBODZGQjA5NkJBNkRFQ0RGN0Y2RDY2QzREOTRFOEZFM0UKLToxMENDRjAwMDBDNjQ4ODc2M0Q3NjkzN0Y5QUM4N0VDMThBRTc4N0YzNzUKLToxMENEMDAwMDc5QTU2RTVGNDgzRUU4N0NGOTgzMjdFMjNDRTRFNDlGMjYKLToxMENEMTAwMDNDMzAzNzk5RjI3NjNEOTY5RkYzQjkzQ0M4RjcxRUEzOTUKLToxMENEMjAwMDczRjc1NURCMTJDN0YxRkQ4QjQyNjBCQTJEREY3MjE1MjgKLToxMENEMzAwMDlGNTM2RTU0N0M5MzY4RkZENTNGQkQ2MTE4REQwNzVCNDAKLToxMENENDAwMEYxODcyMTQwRkJFOURERkQzQzlGRTM0NUZERjQ4MUZEREEKLToxMENENTAwMEJCMzNCQjczOTJBMTMwOEEyNzNEOUZEN0ZFNzQ4Qjk3NUMKLToxMENENjAwMEU4NUUyRUE5RTJCQzA1MUEzRDIzODgyRjc2RDUwMkNEQjgKLToxMENENzAwMDNCNEUxNkY3M0QyM0VCMTNEODJGMzVGMzVENkQ5RUYwMzgKLToxMENEODAwMDAzRUJGNEJDNDExQTM4MzI0ODdFN0NDMDc4RTg1RDNGNDIKLToxMENEOTAwMDY2MEI5RDZCQURDODRCRDVFQzc0MjQ3RjRFQ0M3REMyMjkKLToxMENEQTAwMDFBQjlCQjlFRTJCRDMzOUJFQzlDQ0ZFODg5MUJGODNDRDMKLToxMENEQjAwMDZCNjE1RTBBQzNCN0NDNjEzQ0ZGQUU2RkZBQ0M1ODJGRjMKLToxMENEQzAwMDA0MEZFOTlENzFBRDZBRTk5RDU4QUVENUYwREY5MkU5OTcKLToxMENERDAwMEY1RTVFMTdBMkIzQjdFRjBDMkFCOEM5NzREREY3RTlCNzUKLToxMENERTAwMEQ2M0RFMDE0Nzk5NDU3MDVGRUNDRkVGRjMyODdDODU3MzQKLToxMENERjAwMDAwNkM2Njc4RjVFRjI3OUU3ODhCQ0Y0OTRGRUMxQzkzM0IKLToxMENFMDAwMDJGQ0U3RjQzRUYzRjlFQzVFN0JFQzdFRUMxNzJDNzgxRkQKLToxMENFMTAwMDM3OTkyRTY2NzhGQjlEREY0OTEyRUZCNzhFRjY5MTQ2NjMKLToxMENFMjAwMEU3QjRERTZGRTdGMUZEMUQxMUI3MkREOTUwQzRGOEQzN0IKLToxMENFMzAwMENGRDE3QTRGMEUxQzlGRTg3MEVBRjNFQkYwRTlGM0VCRTkKLToxMENFNDAwMEZENUEzNTdBNURBN0M1MDdBNzZDQTFEMzdDMUVGRUMyMkIKLToxMENFNTAwMDE4ODlGMjc0N0RERjUzNDNDNTI5MzFGQ0YyNTVFNUM1Q0QKLToxMENFNjAwMEJGQTlFNTM1OEU1ODVBQkU2NUEzRkI2RDFEMEY1QjdEQ0UKLToxMENFNzAwMEIxN0FFRjMyRjNFMTdEN0VBMDA3NTRENzUwNjE0QUQ4RjIKLToxMENFODAwMDZFRTFFNjk0QTE3NDZFQTdENTQ5MThCMDNFNDUwMzRGRjQKLToxMENFOTAwMDIyNzhFOEJFOUY1NkMyNEE1RjA2RTdCQjY5M0U5OUFFNUMKLToxMENFQTAwMDBGMDZCOERFNUFFOTU2QTlCQzU2RjIyQUUyQkU1NjgwRjEKLToxMENFQjAwMEY5NzIzQTM0OEVBNDdENTgxQzYxM0VERkQyRUZBQkNDQzAKLToxMENFQzAwMDRCNTk3NzQzMTZBRUQ3MzYwNEQ2OTExRkQzNjYxNTcyRTkKLToxMENFRDAwMEUxNUY5Q0MwRjE5QjhFMjdERENFODBBQkQwNjA1RkRBMzYKLToxMENFRTAwMDVDQTAyQTM4Q0Y3QzA1REFBREE5QTJERjk1ODhFN0MzMUMKLToxMENFRjAwMDA3OTZCQzQyN0VDMjVCNEFFMzEwNUFGN0E4RjM5MTIyMjAKLToxMENGMDAwMEM5NDJGRTVEMjA5MTYyQzRCN0RGN0NBNkZDRjdEOEY3NkEKLToxMENGMTAwMDFERjA0Qzc1MjJGRkRDRjQxQjA3RUI3RDczM0VFMjc2QkYKLToxMENGMjAwMEYwNzE3RDE5ODRBRDFGRTNCODNGNEZGQzlGQURGQjIwMkUKLToxMENGMzAwMEJBQUYzRjRGRkE3NDI3QzUwN0I3QTREQzU3NEVFM0Y1RTUKLToxMENGNDAwMEZCOTNFNjdCN0EyNzVENEVCRUNGNjdCRUFGNzcyM0Y4QjMKLToxMENGNTAwMDQyQzRDRkU3MkNCRTdBOTFGRjY4OUM0MEY2QjczN0M1MzQKLToxMENGNjAwMDA2MTJGNkVGMURBMkUxRTMxNDMwM0U3QUFEREFGODhGMzcKLToxMENGNzAwMDU0QUU5NzU1OEZFM0JDMjI5QzUzNTkxRjRGMzZEOTlCMTMKLToxMENGODAwMEIyMzExNjExODc1RDE0RkRBNzQ2MTQ4M0JEMjkyQkQxM0MKLToxMENGOTAwMEYyMzY3RjU3RDkyRkJERjZCQ0YyQjlGNkE4MkU1RkU0NjIKLToxMENGQTAwMDU5Q0FEMjJDOEQwM0Y5ODc1NkFEQkQxNTgyQjJEODhGRTAKLToxMENGQjAwMEYwMTMyNkY3RjE5NTQ3MjZGQUQ1NkJGNTdBQjI2N0M4RDQKLToxMENGQzAwMDRGQkQ0OTBFM0Y1RDUwOUNCQzVCRjBENzY0MjVCODk3QzAKLToxMENGRDAwMDRBRDRBRUQwNDQ3RUM1MkVCNDc3M0ExQzc0RDY5NzMxNkQKLToxMENGRTAwMDg2Rjk2MDkyQ0U5RjM4RDcwMkVDQjc0RTZBRTRCOEM1OTYKLToxMENGRjAwMDQxRkUwQzk2MUJBNDEwQzM3MTBENDRCOEY0Njg3NkJDQjYKLToxMEQwMDAwMDBBREM1QzRFMDMyRjk3Qzg5RjVDQ0U0MDRCNDJFNTc1MEYKLToxMEQwMTAwMEQwQzFFNTJDMDgwOUJCN0Y3NUIwOTVFRDE5RENFQkUyQkEKLToxMEQwMjAwMEY4NkZFNjMyMEJGOTFCNjVERjE4Mzg1RTE4N0Q0OTNDNTYKLToxMEQwMzAwMEEwQzA4REJGN0MzQzRDMDc5NEJCOUMwMUYwMzFCMjgwRkEKLToxMEQwNDAwMEY1ODcxOTFGNjZGOTlDMEE2MTk5RTU5MzE0NDMwRUU1NkIKLToxMEQwNTAwMDA5NTQ5NkQzNkFGMDcwQkRFNjBCRTJBMTIyRUM1MzM4NzYKLToxMEQwNjAwMDRGNjNDNjQ3RjVDMDdDRTFENkYwRjFFNzdDMTBFNzFGQkYKLToxMEQwNzAwMDFBOUQ5NkU2QUI1Q0Q3RTk4NTcyOTU0MUZDNkZBNkEzMzUKLToxMEQwODAwMEZFQkQyQ0ExRUEyQzVEMjlCRjdFNUJFNjVDQkExRjU1NzQKLToxMEQwOTAwMDU2NUFCNTk2NTRGMjgyRkNBMkI5NzQzRkFBNkM3MkQ1NjYKLToxMEQwQTAwMEYzNzQ3NEI5Njg1QkIxQTg5NzU0OTU1QURENjhERjVBNzgKLToxMEQwQjAwMDRBRTY0RUMzRkUzRUVEM0UzMUNDMTdGRUY1NUQ5QURGRUIKLToxMEQwQzAwMEUyNkJGOTk2REI4NTcyRTJDQjc0QkE2OTdGMEU3NEVFN0YKLToxMEQwRDAwMEU5NUU4QTlDMjNDRUY5NDZDRDA4RUVCMzYyQkZBMzhBRUYKLToxMEQwRTAwMDZGN0EzRTlERjczOTgyNDkyQUUyRkRBRTk2MUFCRTdGREQKLToxMEQwRjAwMEY2ODA0REY0QjdEQjQ1N0U1NURGMTc3RUY3Qzc2MTdEQkYKLToxMEQxMDAwMEM3OEUzMTZCQTVFQ0MxRDdDNzc5RTdFNjBGMjEzOEYyOUUKLToxMEQxMTAwMEZDMjRBRkJFOUQ5MjVCNTBCMjZBRDg3Qzk0Q0Y5RTkwQTcKLToxMEQxMjAwMDE1MjgxRkFBQUY5MzlFRTk5QjRGNzA4MDIzOUZGMzY0M0QKLToxMEQxMzAwMDIzMzQ3RkE2NjdDNzk4MzE0NDk3QTVGOURBN0RBQUY0MEUKLToxMEQxNDAwMEFDNTJDMjVCNDNBNjc3MjlDRERGOUIyOEY4NkIyOUQxNkYKLToxMEQxNTAwMDYxQzhFMEU1RjdGMjNEOEI2OTdFRjNGN0RFQkYyMjAwQTAKLToxMEQxNjAwMDM4RkVBRTdDREYzMjlBQUYyMUUxMDJEQkY3RDM2M0ZGRkEKLToxMEQxNzAwMEIwMkU5QzE1RTU1MzA5ODlCNDAwRjdEREVBODE4MDhENTYKLToxMEQxODAwMEVEODA3NkNGNUMzQjc3RUFCRDFERTc0MTNDOTQ3OTdEMkQKLToxMEQxOTAwMEFEQTREMjI2MkM4ODhDMjdGRDg5RjNBRUExNzUxQjZDMUIKLToxMEQxQTAwMEUxNTE2MzcxREMyMzczOEZEOTA0OUY4RDE0N0NBNkU5NTAKLToxMEQxQjAwMEExQUUzRDA3RUYxOTIxQUE1RTg4OTFBQjg2M0Q5RjdEMDgKLToxMEQxQzAwMEZBMEVFMkFGRTE4Q0QzNEREREEzRjJGNEUzQjUxQzRGRDAKLToxMEQxRDAwMDgyRDNBMDM3NzQzOTlCQjRDQkNFN0VGNUU0REQ1N0REMjYKLToxMEQxRTAwMDRFRkRBNkZFQTEzQjg3RjY3NTZENzc5OENGQjM3QUJCNEYKLToxMEQxRjAwMERFMUEyMUUwRDBFMzhENzNEMjk3QjFCQjc0REVDQTcxMjEKLToxMEQyMDAwMERDNEU3MURFQkE0NjZBN0MyOTkxRUEzRjkzREM3RTg0NkIKLToxMEQyMTAwMEZGODQ2NjM3RjRCODc4QjlCNkFGRDUwN0I3QUVBM0JDMEMKLToxMEQyMjAwMEM4RjI0RDRCNjdGMTdEOUM4MDg4MUI1NEZDMjVGOUZGQUIKLToxMEQyMzAwMDA0NUVFNTczRUU1NURCQ0RGMTQ0QzQ0NkY0NUZERDYxNzkKLToxMEQyNDAwMEJBRDc0M0YxMzBERDVGODhENUVGMDNDNEMzNEZFNTZCMzgKLToxMEQyNTAwMEY5QUU0Q0M4RTQ3REM4MEI5MjdEMDNFODNCNzNCQ0ZCODAKLToxMEQyNjAwMDE4Nzg5RUM5Njc3RkQ2MkJEM0ZBRTVDQUMwRjk4NDI3MDAKLToxMEQyNzAwMEEyRUYzQjU4MUU5NjY5NkIxMzlFOUMxQ0VGREFDNEJENEYKLToxMEQyODAwMERGMjdENkJBNUQ1NEQ3RTQ3MzMzRjI0QTA1RjlEMTZEN0UKLToxMEQyOTAwMDNGNjZGRUQ3QzdFOUYyQkFBMjVERENBRjg2NEQ2OUNDMjYKLToxMEQyQTAwMDczMjVEQkVDMUVBMjZCQzlCNjYxMUM1RjYwMUNDNDdFREIKLToxMEQyQjAwMERGRTY2REY2NzZBQUI3REUxRkVGOTc0QjI4OUYxQ0I5MDUKLToxMEQyQzAwMDgyRjIyQUFENzFFMjdEMTI5OTQ3QkFFRjU5OTIyREYyOUUKLToxMEQyRDAwMDFDQzc3NEJEQUVEOTc1RkRERTZDNUZGQzkzOThDRkY3QUIKLToxMEQyRTAwMDkzRkJEQUMzOEEyMURFNjhENUZDRTczMjgyOEZGQ0MwNkIKLToxMEQyRjAwMDQ2QUI4ODlGRTIwNEZDN0JERkY4N0EwMkY5QjEzQjE1NkMKLToxMEQzMDAwMDZGMDJFNUE1Q0YxQ0NBNEU4NjAxRjBBNjk3RTU2ODVFQzAKLToxMEQzMTAwMEUwNzNDRTBCQ0JERjlBOTVGMzc5RjQyQTdCNENCQjY3OTUKLToxMEQzMjAwMEFFRjFFN0FGOUEzREYwMTc2Qjk0MUVGQUJFNkFFNDY3NjAKLToxMEQzMzAwMEFCNkQ5NEU3QjgwRDVDOTRGNzU4NzNGMEE5NTY3QTI3NTMKLToxMEQzNDAwMEIzNjYzRDcwNDZFMTBDRkRBMTc4RTEwMzBCOUY2NzRGOEEKLToxMEQzNTAwMDNBNTg5QTQxRkNEOEE5RTkzQjNBREY1NTYzRjg2QTNDNTAKLToxMEQzNjAwMDI1ODVCMDdGRjk0ODA4RDBCQkExMzgzNTFFRDQ5OEI4QzAKLToxMEQzNzAwMDM4QTEyMEQ1NTA0Rjc0NUY2MTE4OUY1QzkxNkQ2ODA3OEMKLToxMEQzODAwMEJGMjc1NDM4M0VFQUJGQTY3OEFFMzZGNDdGMjA2OTNBMEMKLToxMEQzOTAwMEJGQTM5OTFBQkE4M0YzNEE2OTMzQzYxOURBRURDOEQ3MUQKLToxMEQzQTAwMDc0NUYwMTNFMTZGRTRGMDVGRUIyNUQ4NTQ2OTlFMDlDMTYKLToxMEQzQjAwMDFDMDZGODA5RjJEREE0MUVBMzdGNTQxMURFQzg3MTYwQkIKLToxMEQzQzAwMERDMjFDNTEwRDdEQjJGOTE2NzRBMUFBREM5RDU0ODE4QTMKLToxMEQzRDAwMDI5RjQ4MzE5REZDNjdCMEQ2QjBFQ0FFQ0M3QURDOTQ0QjcKLToxMEQzRTAwMEM3MzM2QjcwN0NFQkYyQTdFMzdEODhENzg4Rjc2MUYzRDYKLToxMEQzRjAwMDhENzgxRUVFMzNFMjc5QzQ3MjIzOUUzMzFCOEQ3OEJFODYKLToxMEQ0MDAwMEIyQzk4OEQ3MkNCRjExOEYzOUVEOTMwQ0ZERjMzNjU2NzYKLToxMEQ0MTAwMDE5RUFBMzFGQkJDRUQwRkZBQUMwMUM0MzdEQ0NGNjZGNzgKLToxMEQ0MjAwMDFBRkExNzc1MkMzMUI0OTdFQzVBRjlCOTc0MUYxQjVDQjIKLToxMEQ0MzAwMDYzNjgzN0QzQkRGNEMwNzc0RDdDQTgzMDlFQ0JCNTc3RjkKLToxMEQ0NDAwMDU1M0FGREZERjg0QkY0OUYwQ0RFRTRBMDQ0RTk0MDdGMjMKLToxMEQ0NTAwMDJCQzlFM0JGOEFGRUIzNDc2QkY3NTg3NEZBN0Y0MUJEMEYKLToxMEQ0NjAwMDVBQThGOTRGRTZGNzU5QjMxMzg0QkU3OUVEQzA5OTQzMzIKLToxMEQ0NzAwMDFFQUNCRkFFOTY1QTMzQzg2RkQyRkMwM0FGN0UxRTYxOUUKLToxMEQ0ODAwMDhBRkJGNDM4RTVDNjBBQzk3NERFMUU2NzM4NkZCRkQ0NUMKLToxMEQ0OTAwMEZEQjRGMjUwRDA1MDFGN0I0OEJDNkIxQTc3QzRGRDEyMEMKLToxMEQ0QTAwMDk1RTVFRjc5RTREODc3NEMxMzNGNjZCM0RDMkZFRUQ0RTMKLToxMEQ0QjAwMEVGQjlFOTcxMTM2NDNDQzk3MUU4MDIxRDdFMTI4MkYxNzMKLToxMEQ0QzAwMEZERjM4QjdBN0M2QThFNUJGNTc4QjVGRjNCMjlFMTk3OUIKLToxMEQ0RDAwMERDMkQwRjE2Qzc4QUY4NTU4RjVCQkYwRTFFN0UwRjU2QzgKLToxMEQ0RTAwMDNFRDJCNzZFMzRERDlGQjI0NEQyQTg1RDhGNjcwOUIxREEKLToxMEQ0RjAwMDc0NkVEQzRCODg2NUU3RTJFMDVDNEYyMUJGMjNFNUJDM0UKLToxMEQ1MDAwMEY3Q0E5NjU3RTZEMjdEN0QwNERGMTUxRTJGRDIzRkY0NzEKLToxMEQ1MTAwMEYzRTQ2OERGQzZEMUE4Nzc4RjRCQUU3NUE1MzhGNkI1QjIKLToxMEQ1MjAwMDQ5MUY4RUEyRjkxRTFFMkRGMjBDNzYxOTMxODRGNjY3NjIKLToxMEQ1MzAwMEQ4MDIwRkQwRjdGQzU0Q0YyM0EzODdGNEJGNjc2RDJFMUEKLToxMEQ1NDAwMENERjc3RjNBOUI4MzVDMkEyRTM3REZCRjMxRTcwN0MzRDUKLToxMEQ1NTAwMDE2OTVGRDRFRkY3NzI1QkU2RkYzMjEwMTM3MzFFQUFGRjcKLToxMEQ1NjAwMDlDNjlCN0IyQkYwMjVBM0NCRTUwQzNCRjlFQjc1OEEwMTkKLToxMEQ1NzAwMEVERTczODRFQjExQ0VERUZDMjVEQkY2MUJBQUNDQUU4NTEKLToxMEQ1ODAwMEQxRjIxRDhERUM1RjJGMURFOTFDQzdGN0M5M0NBNTZFQkMKLToxMEQ1OTAwMDkxRTdEMkYzMTgyMzJFRUI5REM4QTVGNkJGMkFFM0E0OEEKLToxMEQ1QTAwMDIxOEYwNENGQTY3REExRjNFREU4QkVDNUZDQzdENzhCQzQKLToxMEQ1QjAwMDdDRTRGMUY1OTk5Q0ZGOEVDRTdGOUFGMzQ5MEIxQkRGM0IKLToxMEQ1QzAwMDMwQzhDNUFENEQ0NzBENzJCMEQ4RkZBRUExM0Q5QzFFMTEKLToxMEQ1RDAwMEIxNTJGRTMwRkNDMkYwRTlCNzIwRkU0RUVEQjRGMzNCOTEKLToxMEQ1RTAwMDY2RTQ4MzM3NDZDN0U0Q0ZDMkVCQzc0Q0UzRjc5MDk3QjYKLToxMEQ1RjAwMERDRTc4NzBDNDc3NzczODhFOUFCRUZGMzU4RjMxMUFFOUMKLToxMEQ2MDAwMDg3OUJDMzVDOUFGN0E5RTcyOUY0RDJCNjBGMEFFODlFNzQKLToxMEQ2MTAwMDdENDQ4QTc3NTM1RUQ4OUNCRkI4REJBMkJFQ0ZGNzIyODkKLToxMEQ2MjAwMDBCQjJCNTczODJDNjEyMkZEMzRGRTQyQkJBQjU3N0ExRDQKLToxMEQ2MzAwMEREREFCQkQwNkVFRDlENjdCN0Y2QUVCMzVCN0JCRkQ5Q0QKLToxMEQ2NDAwMDZCNzVCNjUzNUVBMzVCMTJGNzc3MTY0ODlFMjcxN0UzRjgKLToxMEQ2NTAwMDdBQzkyMzdEMUY5MTVDMzVBQzhDMTQyQkI4NEU0MzQ5OUQKLToxMEQ2NjAwMDc4OTE4NDc0MUUzOUM0RjczMUUxNDVDMjcwNjEzOEJGQzYKLToxMEQ2NzAwMDBCRjJGMzNEQUYwRjJDRkU2MjdBNDdFMzJFQzhCODg5NTgKLToxMEQ2ODAwMEUyQkMwRkUyRkRBN0M5MTMyOUQ4OUUyNkVBMzYyMTg3RkUKLToxMEQ2OTAwMDE1MDVGRjYwQjk3QjBGMjdBM0ZERjk3RjI5ODlCQzkyOEYKLToxMEQ2QTAwMDMzNkNBMzc3NTA1M0QzN0Q1MDMwNDREQ0RGRTJGNzJGNDcKLToxMEQ2QjAwMEY4OURGODUyQ0Y3M0Y2NUE4NTFGRDhBQkY5ODNGNjAyNUUKLToxMEQ2QzAwMDcxMEVFODMwOTVEOTQ0RjM3MjVBMEYzNDNGRkZDMTdDOTQKLToxMEQ2RDAwMDdFMzdCMkM5MEVFNEJGRTJGQUZDNEU0NkJGNjc2MjdFRjcKLToxMEQ2RTAwMDQ3MzNFRUQ3NzY3RUVGQTBFNzQzNDcxNDY0RjE3Q0Y0MkUKLToxMEQ2RjAwMEJFODZFNDMyRkQ3QjA5QUNCNzIwMUMxQTQ1RUY3MUZBRjcKLToxMEQ3MDAwMEUwM0QyNERFNDM5RUEyM0M3MjRDRkU3OTQ0ODFGNkNFN0QKLToxMEQ3MTAwMEYxMzYzMEJDRTc1OTdERjBGODMxOEFCMzdFM0REQTc3RDcKLToxMEQ3MjAwMDY1MDFDRUJGQzRBMjhFMjdCQUFFNEVEQUNCRjlBRUIxMzgKLToxMEQ3MzAwMDA1MkFBRjhCRjA4QUZEQ0FEMDQ2NzQ1QUVEMDg3MzdFNzUKLToxMEQ3NDAwMEVDNTJGOUYwQzFGNjdGRUFGNkQwOEYwQTM5RkZBQjE2M0EKLToxMEQ3NTAwMEYzN0IzQTZENUQ4NDYzNkM0MTRDREU1QTg3MjMzQUNGOEMKLToxMEQ3NjAwMEU3RjNCRjlFRDdENUVCMjc5RTc4MjA1RkNCQ0JERkVBRDAKLToxMEQ3NzAwMDFEQzA5RUNFRDBGMEQyNkQxRDM4OEZCRUI0NDBDNDIzRTQKLToxMEQ3ODAwMEZERTgzMzFBNEQxMURENTM4QzQ3MUI4MUU1M0NDMjEzNzQKLToxMEQ3OTAwMEU1ODE2RkM2RkQ3MDdFQzIzMzk2RThCQjdBOEU5M0RGNUIKLToxMEQ3QTAwMDhERUJGM0UzM0NCRTlGN0ZDRTNBMkQ5OURFMUI4OUZGQzQKLToxMEQ3QjAwMDU2MzY4QUJDQkJERURFMkIwOUJBRkFENzhCM0NFOEVBQzgKLToxMEQ3QzAwMDNENDc4RkQxRkZCRjYwQzU0RjhCNEEzOUJFRDdDNjlCM0YKLToxMEQ3RDAwMEYxOENGOEU1Rjc0RDRCNjQ3MTZFODVGODVENDBGMzlCNzUKLToxMEQ3RTAwMEYzRUQ1RjE2QUZCRDk5RTI3Q0I1NzdGMzY3QTNFOEREOTMKLToxMEQ3RjAwMEU4NkFCQTdGNDZFRkJDQjRGQzE1NzQxQUYzNTI4ODJGNUUKLToxMEQ4MDAwMDNGRTUyQkZBOUY0NzAxOUY2QkQ5MzUzQjYyRDdDNzhGMDYKLToxMEQ4MTAwMDU0MENFM0JCOURERUI1QzQxRjJGNjg3QTAzRkIwNzJDQjUKLToxMEQ4MjAwMEI4N0VBNzFFMjc5QkYyMjg5RDIxOTFFRkVDQ0NCMEIxQ0EKLToxMEQ4MzAwMDlGNENGRTBFRDkyN0REREZCOUVCMEQ5MUVGQkMyQjRCRDIKLToxMEQ4NDAwMEY4RDEwNDFGRDE1NzNBQjI5RkZEODQzRUZCMkZCOTU1NDIKLToxMEQ4NTAwMEMyOUZEREVBQkI5RkQ2MDdERjVBQjY1RkYyOTU0ODVGRUQKLToxMEQ4NjAwMDNBQkZGOEVENzU1QTNFNDBEOEMzNzJDREZFOTVEMzNDMTEKLToxMEQ4NzAwMEU0RTAxNDI2QjM1RDJDRDNENjQ1RkY5MUYzNkUxM0MxQkIKLToxMEQ4ODAwMEQ3MkE4MEQxRjI2NkVCRjc3MzFFRTE3RjAxQkM0M0FFNkQKLToxMEQ4OTAwMEUwNzA0NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjQKLToxMEQ4QTAwMDFGOEIwODAwMDAwMDAwMDAwMDBCRkI1MUNGQzBGMDAzRUQKLToxMEQ4QjAwMDA5MTdCMEExRjJBRkExRjE5MzM5NTFGOTNGNTk1MUY5Q0MKLToxMEQ4QzAwMDE3RDBGODg0QjAyRTEzMDNDMzBBNDZEMkY0MjBFMzlEODgKLToxMEQ4RDAwMDQwRkQwNzgwRjgzODEwOUY2MzIyREYxQzEwM0UyOENDRTMKLToxMEQ4RTAwMEMwRjA0NThDODE2MTE2OTA2RTAxRDI2NzgxRjgyQjEwRDMKLToxMEQ4RjAwMERGMDZGMjQ1NDQxODE4OTQ4MTc4QkUyODAzNDMxNDkwM0IKLToxMEQ5MDAwMDVFMEFDNDA1MjIxMDdEODc4MDc0OEQyODc5NzZBQUYzN0IKLToxMEQ5MTAwMDUwRTZFNjUxNEMxOTVFMjk4RENBMkY1NTYxNjA1OEE2MTQKLToxMEQ5MjAwMENBQzBGMDVBMERDMjVGODgyNENGQTBDRUMwNTBBNjAyNTQKLToxMEQ5MzAwMDYxRUJDOTMxMzA3NDAwRDVDQzk0QzY2RUFFM0U1MEJFOUEKLToxMEQ5NDAwMDEzMjgyRkEwMEVFMTAzMDBEMTkxRkIzQjY4MDMwMDAwRDgKLToxMEQ5NTAwMDAwMDAwMDAwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwMTUKLToxMEQ5NjAwMDAwMEJDRDdEMEI3ODU1RDU5NUYwM0E4RkZCN0VFNDI0RTYKLToxMEQ5NzAwMEI5ODE5QjkwQzA0OTA4MTgzNEUwNDkwQzBGMTFGMTI2NzkKLToxMEQ5ODAwMDQ0MUE2Q0M0MUI4QzFBNjc2OEJENjA2QjIzMTU4OEM4NjkKLToxMEQ5OTAwMDY4N0M0QzczODEyNDg0OTcwNjZEMkQ4M0ZFRjQ2MkFEMDAKLToxMEQ5QTAwMDQzMjlBREQxNjI4N0E5OEZCOTIwMkQ2ODlEMUEyRDU2QzQKLToxMEQ5QjAwMEVENEZGRjQ2QzZCMUQ0MkE3RjQ0RjE1NTJDQjNEN0RBRDgKLToxMEQ5QzAwMEZCMjRFNzlDREMwNEQwQ0U3QzgzOEZDMzNFNjczRkQ2MkMKLToxMEQ5RDAwMDVFN0JCREY3REFGQkJBQTEwNEUwMTI4MDUzRjg4NzNEMDUKLToxMEQ5RTAwMDZGOTAwMDIwNkZGMDA5NUVBMzA5MjIwMENEOUE1QjVGNjMKLToxMEQ5RjAwMDVGMENGMDREQzUzOEE4NTdCMUY3QTM2NUUzMDczQUJFRjEKLToxMERBMDAwMDlGNTgwQjYxMDAwNUVCRTcwMzE4RjgzRkQ2NkU0RDcwODkKLToxMERBMTAwMEY1QTg0NDkwQkQ1MzE2NjZFMUQzRUNERjdDMzZBQjAwMkQKLToxMERBMjAwMDVBMjU3RURGMzgzMUQzNzdGMzA5Mjk1NzdGOUYxN0U4Q0UKLToxMERBMzAwMENGMjkwNjZBRUJFMUQ3MjdFRjM3Q0JFQ0JGMDIwODQ1QzkKLToxMERBNDAwMERFMEFCMEJGNEM4N0U5QTcxNDgwRTNDMTA1NTk2OTE4MDUKLToxMERBNTAwMEJFQkZCN0RCQkFDRjUzMjcwMDdDRDRGNkRBRTRGRDEzQTAKLToxMERBNjAwMDg2N0VGRkE2MDIyRDNERTU0M0RGNEYwNzM2RTg1NEM0MEUKLToxMERBNzAwMDQ3RDIxRDlGM0MzOEVGODE3OTA2MTk5MjJFNjRFRDAxNDMKLToxMERBODAwMEQyOUUxQ0Y2RENCMUY5M0NCNTZDMTA0RUU3M0MwMDkyMUUKLToxMERBOTAwMDFDQkY5RkIzOUQyNzUyOTMyRTYwQTUwQTI5MzE4QkUwQUUKLToxMERBQTAwMDUyRDkzRkQzMDBBODJBNUI5NzI1M0IxQTgwRTA3MkMwNjkKLToxMERBQjAwMERCMTFGOURCQzAzQkVDN0E4OTdBQzc4M0FCM0I5MUI0Q0QKLToxMERBQzAwMEQ2QjgzOEJEQjRFN0M5QzY2QTE4NEEyRkU2N0E5ODc4M0UKLToxMERBRDAwMDNDRDNGNUI4MUQ3QzM0OEU0OTQ3Q0RGMkMyMTFEN0ZEMzkKLToxMERBRTAwMDc0NzQ3NDNERDJEMTc5RkZGRDc0OTRGQ0RGNEI0NzFERjMKLToxMERBRjAwMEQ0Q0ZGRjMyM0EwMkU4RTZGODgyM0UxNUM3MUY3Q0NGNEEKLToxMERCMDAwMDlGOTE4NTNEMTJEMjE5MkJGNjIyREM0NTdDMjgyODZBOEMKLToxMERCMTAwMEVEQkM1OTlFQzJDNDE0MThDRjlEQzNFNDU2NTFERkEyNzgKLToxMERCMjAwMDdBODQ3QkY0RTE3OTdGQzI2NzY3NjM0REREQTU2QzdFMDMKLToxMERCMzAwMEY5NEQzRDJGN0Q4OTNEMjNGMTk0OTQ2MEVCNzUxRkM4MEQKLToxMERCNDAwMDI4NTQ1ODdGMzcyNUFCRDlGQ0RBQjFCMzk5MDA4RjI0MUMKLToxMERCNTAwMDE3QzU5MjM4NUY4ODAxOEMwMkY4MDczMTI3MDA1OTU3QTIKLToxMERCNjAwMDU5Mzk0NDdGQ0QzNDBGMzdBNDM5M0VBNDUzOUVBMUVEREIKLToxMERCNzAwMDg3OUI3RjA4REI5OTc1OEFGMUZGMkIwMEU3NzdCQTc2RTAKLToxMERCODAwMEIwOTI4Rjk3NjRGRjIwQkVDNzBDOEU0RkZERTQzNzVCQzkKLToxMERCOTAwMENBODBGOEIxN0ZFRkM1QkYxMDdFNkZGRTFGMTlBRjAwQkUKLToxMERCQTAwMDJBN0QyODFGNDJGNUIyOTZDMkZBRDA5M0FEQjI3MkU0MzQKLToxMERCQjAwMDI2MTVEMjRDNDYxNDU0NzU0QjJFRkRGNEVCRDIwOTUwNjkKLToxMERCQzAwMEQ3QzNENzQ3NkEwODBEQzJGNzlGMjAxMUZEOENCREUzNkMKLToxMERCRDAwMENERUQ2QjE5Qzk5RDU4MTgzNDg4M0UzNDgwREM5Q0ExNkEKLToxMERCRTAwMEYzRjk0RTFCMTJCMkE1REM1ODIzMjU2ODNDRTNCOTUyNjkKLToxMERCRjAwMEQ2M0VEOUM4RjVERTdERjUwQkIyQURGMkNBMjM0OTAyOTcKLToxMERDMDAwMDZGNEVGQTAwNUQ5RDg2NkNDNUU5NDNBRDk3NjNCRTI5RjIKLToxMERDMTAwMDVGOUMzRUQ0Q0Y0OTFGNzkyQjJERURFMEVDRDcyQjYyRDIKLToxMERDMjAwMERBMDU2NzQ4MUY1Rjc0M0M3MzVEODdGMkQ1MkFCMUFFOTEKLToxMERDMzAwMEE1M0U2MDdDN0I2RkREODI4Qzc2QzZGMEVCNUE0OUZDOUEKLToxMERDNDAwMDFFQTk4NzU4MkE0M0JCRkM4MUY1NEMwRTdEQjJGNTUxQzUKLToxMERDNTAwMDA2OTZGNzE2REI3QTI5QTNBNzM1NkQxRjAxMUY0QUM0NjQKLToxMERDNjAwMDNFNUZCMzVGNUZBQkEyQkY5OUNCOEFBQTI2NjM3RjZFOEMKLToxMERDNzAwMEVDOEZEMUQ5QkFFOEJENDk2MEZDNzAwMjY5OUJFMTQzRTEKLToxMERDODAwMEU5QUU0ODYzMTk0QUMxRjg4MTgwNDA2NjY1NUYzNDk2MDEKLToxMERDOTAwMDVBNEY3NDkwQTI3NTMxRTFGM0U4QjIwREZGNkFDNDZGNzgKLToxMERDQTAwMDJCNDM1MzUyQjJDMkVGNkI3NTEzMUM2RTFDOEZEMUJCNEEKLToxMERDQjAwMEEyQjEwRTE5MkFENDIwQTQ3RDYxQUNDMUUxNDczMjM4NEIKLToxMERDQzAwMDM1MUVDQjc3REFFOEEwNEJBRjg0NENFQjYwRDIyQkEyQTkKLToxMERDRDAwMDk1RDNFQjlENjcyNjVGOUNFMzM1REFFMTNERTM3NjQxMjIKLToxMERDRTAwMDU1N0ZDQkEyODc4NjZGQTdDMjVCRTZGQTMwMjQ3RTBERjQKLToxMERDRjAwMDNCOTgzQUI4NEU2QjVEQjA0NzNBOUZFOUVCQzJBQjIxMTcKLToxMEREMDAwMEMxREVBRUM1NEYxNzEyOUQ5MjNEQjNCNkIwNTI0M0JBQjUKLToxMEREMTAwMDgyMUQ5MjhBNzA5QTdBMTRBMjM5NTRBRjQyRDJBOTFGRjYKLToxMEREMjAwMEQ5REIwMjU4NEYwOUM2RTg2OTdFMUYxRTJFNDE3RkM5MDQKLToxMEREMzAwMEQ4REU1MkQ2RUZFNTYyN0QyRjE3N0EwREFBNUM2RkY2MUEKLToxMERENDAwMDk5NzA5MzlFNTUwN0NCNkMxRUVGREVDRUZFQzdFODI0N0MKLToxMERENTAwMDU5MjFBNTdFMjAwREZENUU4RjdBOTFDOUE1N0E3QzZGMzEKLToxMERENjAwMDkxMkI1QjA2RjgyMDRBRUI1NTJGQkUzREZCQzRBQjEzNEQKLToxMERENzAwMDJGNjBGNEQxNkIyODgwNjI2QkY1MTM5RTU4MkRFQkZGNUEKLToxMEREODAwMEE1OEJBNTk0NDcxMkYwMzIzOEU3MEIzODVGODhFNTE2NkIKLToxMEREOTAwMDIxOURGNkQ2N0E4ODhFRTc3RkU5QTMwODkyRjFCMTNERkUKLToxMEREQTAwMEJGNTEzM0QxQ0JGQzU5QUU0MTM4RDg3RkNCQURGMzYzRjMKLToxMEREQjAwMEZGRkRGM0MwQkExNEQyMzgyNjVDNEIyQjE1ODJBMzc3MzMKLToxMEREQzAwMDk2OTRDMjcxRjZGRkZFOEY3NzVGQzRFMDdDQTE0QTMyNjEKLToxMERERDAwMDNDM0FDMTFCMDIzNjVFNkZFQ0ZEQzg4ODdFODczOUJFQjcKLToxMERERTAwMDBFMUFFMkQzMzlCRUI5MUVFMTMxNDA3ODg1M0YzMEJDMEUKLToxMERERjAwMEIyRjE5MjM1RkQ3RDZCMTBDRjQ3MjQ2MzBEMUIyRjZCNjUKLToxMERFMDAwMDc2RUIzODFDQTc1ODk2MDlERTc1QjNCQ0IyQzJFODA3OUEKLToxMERFMTAwMDVFMUIyNTIzM0U4MzgyQ0ZCM0RDRERERUYxMENDRUNFNEMKLToxMERFMjAwMDA5MzIzQ0M0NUVBRDJCMUQ1OTlFQjUzQkU0OTlBQUM1OTEKLToxMERFMzAwMDYzMTI2QkFGMjdCNTRBNjUwNEJFNDhDNUU0QkE0Q0YyMUQKLToxMERFNDAwMEVFNzk4OUVCQzk4RUU0MDJBRDE0QTdCN0RGNkUwN0EyQTUKLToxMERFNTAwMDVFOEE1QkY0MkFCMzE3OUY5N0Q4RkM1RDExNEVDN0Q5MzEKLToxMERFNjAwMEI1NzE2RTI3RjY4RTIyRjkxNTEwRUI5MTM1NjU0MTE2QzYKLToxMERFNzAwMDY0QjA4Mzg3OUQwNzFCMjg5M0REOUMyRDczRjhFMDMwRTkKLToxMERFODAwMEVGNUYzNUZCQ0YxOUI5RkZCNUEyRkY4RjlCMjVFODQ1QTIKLToxMERFOTAwMEY4RDRCODE3RDcxRjYyMTU0NENGN0U0MTlGQjAzMjg3QTAKLToxMERFQTAwMENBQTZEQ0Y1OTRDNUJCOEFEOTNBN0FBMjMyRTgzQUNFNDIKLToxMERFQjAwMDJGNDlFQkJDODFBRDcxMjEwM0M1NUZDQkJFQjNBQTFCNUIKLToxMERFQzAwMDNFNTNDODJFQzk5NjRGMjQ5MzBDOEUwRDdCNkYwNDlEMzQKLToxMERFRDAwMEQ5QTlGRTY4MEFBODNDRjkwNjJGRTI2NzAzNTMwQTdDMTkKLToxMERFRTAwMEZDMUVDMEYxMDM4QzZDNTFCRTA2OTg3Q0Q1NTFCRUVBNzUKLToxMERFRjAwMDNENjk5OTk1RDUzQTMwNjJFQzUzNDgzMzI0M0YyMzk5RDQKLToxMERGMDAwMDdERDE5MjU1MkE3QkRGQkUxMDg4N0UwMUFEMDgwQjdFNDUKLToxMERGMTAwMERCQTMyRkM3MTQwNjU3NjcxMzkwNUREMzE5QTlBMUY5ODYKLToxMERGMjAwMEI1OTdENzc4OEJEMURFQTk1N0U5M0Q5QzY0RjgzMEVERTEKLToxMERGMzAwMDEwMjYwRkZENjUxMEMzRjEzNkU0NDMyQTg4QkM1NDlCQkMKLToxMERGNDAwMDQ3RjRFOEQ2RjhGQ0Y1MkRBNTkwQkU4MDdEQ0Y5RUI2QUYKLToxMERGNTAwMDE3Qzc0RkZFMjMxODEzRjg5MDI0RDc1NDkzMkVENDQ0OTgKLToxMERGNjAwMDUyNDJGRkFFNTUzM0Q2NjdBMEJCMkQ5MEM4OTJBN0RBQjgKLToxMERGNzAwMEU4OTRGNEFFMTM2RjU5NkVCODBDRjFEQjU5QzFFOEJGRTkKLToxMERGODAwMDc4NjgzRjg1QzgzRjhDREU1MkM2ODIyQjRBMzI4QzUzNUMKLToxMERGOTAwMDJDRUI0NDFGNjY1OUZGRDg0REYwMEY1NzdGQjAxRUIzQ0UKLToxMERGQTAwMDMzNzNCMUVCOTg4NDc4ODFEQTA4Q0QyRjA3MDZGRUM0NkQKLToxMERGQjAwMEIwOUMyQkU2M0IwQTVBQTg1RTc0NDZGNzVFRTRCMzgyMzcKLToxMERGQzAwMDU4NEYzNUUyRTIzQkExQUI1RkEyNzU4MzA3MzU4QzQ3MjIKLToxMERGRDAwMDMwNjg0QjRGRTUwRUNBODk1ODkwQ0I4OUUzODY0Q0YyRTYKLToxMERGRTAwMDMxMjRBN0I1MThFQjIwRTRFQjhEOTJCMkQ2ODFGQzg4RTIKLToxMERGRjAwMDJDNkNDMjAwNUVERkQ2M0QxOUZEQ0IzMDE4MTI3RTBGQUYKLToxMEUwMDAwMDE5NkFEMjJBN0ZCMjgwOTU2REY2MUYxQzJBOUQ0NkE0RkMKLToxMEUwMTAwMEM1RjkwMkI0QkRDODMyNUE1OUNCMzlEOERGN0QwQzIwQkUKLToxMEUwMjAwMDFGRjM5MzM3ODYxMkE0MkYzRUYyODVBN0UwNjAxRkM5MjUKLToxMEUwMzAwMEYxQUMzNDZGNUY4Njc2Rjc2RDhBREY1ODhGRjQ2MDcwQ0QKLToxMEUwNDAwMEZERTA2NUZGQTBGQ0NCOUFBMURBRTQ3MTc2Q0M1RUNFNTAKLToxMEUwNTAwMDc1RTg4REI5NEE5MEU2OUI3RDM5MDg3RDEwQUI5RjMwRkQKLToxMEUwNjAwMDZBMTAzRTA2NTkwM0QyQ0RFNjVBMTU3MEJDNjA5MEMzQzMKLToxMEUwNzAwMDY1QzI5OUFCOUM0Q0NCNDA3MDFDNDEzODE4N0EwODhFMTUKLToxMEUwODAwMDcwMTk5MEJGQzdFMDM5RTI4MEU3ODgwMzlFMjM1Njc4NzUKLToxMEUwOTAwMDVBQkQ3Q0JFNEVCRjdGQjEyQ0ZDN0VFNkY3QTIxRTNDNzMKLToxMEUwQTAwMDAxRUZDNEVBOTA2MDYyNDVBNDU3QzIxQUFGMUJGNEY2QjAKLToxMEUwQjAwMDkyNTFBNTgxNDZFQkVGRjRGQkQ5RkExQ0I3RTk4NzE5MTkKLToxMEUwQzAwMEEyQUMzM0JCQkU4NEUwQjM3Rjg3NDJBMjEzMkEyQjMwQkQKLToxMEUwRDAwMEUwQkYyRTlFNjFFMjQ3QkZFNkZGMzJCRUJCRjFBMDBCNjAKLToxMEUwRTAwMDkwQUYxOEZGMkFGOEREMjVCRURFMjhGQ0Q4QzVBOEZGQjIKLToxMEUwRjAwMDk5REVGRTFBQzRDMzA4REZCQjIwOTNCREZDMkVCQzFDRjYKLToxMEUxMDAwMEJFQzAyMjE3RUY5M0RENDI4RkIzMDVCNUYyMkYxODUxMzEKLToxMEUxMTAwMEY0QUJENTYwNjdBRjEyMjYzNDk4NzQyNjlEQTI3NTMzOTAKLToxMEUxMjAwMDgwRkNFRTIwQTdCNzI0Nzg1NzkxN0REMUM1RjVBM0U5RUYKLToxMEUxMzAwMEY3N0RCRERCQUVBRkJGQjFDNTVFQkUwMTE2OEM0MkZBNDYKLToxMEUxNDAwMEJBRTFEQjJFNDhCMTdFNkZCNERBMUY2QzdERUU5MDM1RkMKLToxMEUxNTAwMDgyRUYxQkQwRDJBOTA1QzlDRTZBQzI3OTJDRDY0MDQ1MjAKLToxMEUxNjAwMDNGNkRFOUJGRkM5RjY5OEJEODdDQjYwQTNERkEzNjkzQjgKLToxMEUxNzAwMEVCQkE0NTZGMkM4OUE0RENCMUYyQTFGMzVCMjMxOUYzNTAKLToxMEUxODAwMDJGOTI4NjlGREY1QTU3RUY3Q0I0MEY5MjlCNUNFNEQ3QTcKLToxMEUxOTAwMDgxRDM1RkRCQUQ5MEJGNjY2OTQ3RjA1RURGNjU5RkRGQ0YKLToxMEUxQTAwMEU5RTZFRjlDMkZGMzU4NjhCRTRCNzYyQzIyQkQzOURDOTQKLToxMEUxQjAwMDdDREMzQkE0NTgyQTgzN0U3QkNDRDQ4NzQyQkU5OEY0NzcKLToxMEUxQzAwMDZERjI3NUIyMDZCOEJERjdGRjdDQTkzNTZDQkM1NzUwMkYKLToxMEUxRDAwMDNFRDJGQUI3OUNDRkUzMjgyREQzRjE3OUJBNzZCRkZCQjQKLToxMEUxRTAwMDlDRURGRUYwMzlEQkJEMjlFNEI4QjNERDUyNkY5RjFCMTcKLToxMEUxRjAwMEQ3NzNCOTlBQUM5M0U0NDEzQkRBRUI2QTg5OEQ2MUE4OTUKLToxMEUyMDAwMDcwRURBOTRFQTMyOTY2QTlENzc1ODZGNTBFNEEyNTY3MzQKLToxMEUyMTAwMDU0QUY0RTFFQTFCRjYzQzJDRTM4QjBFQkZCRUUzRUU0NUUKLToxMEUyMjAwMEJGOUQ2RkNDNDdGREZFQ0QyNzE1RjBCMjc5MUREQjE1RTQKLToxMEUyMzAwMDgyMzREMkE3OUE3MkEzQkRCMjg0RDE1NThBQ0FFOTY5NDEKLToxMEUyNDAwMDU3NUFFQzJBNDZCMUQ0RkYzNzFGMEQ5MTdEQjBFNDcxQzcKLToxMEUyNTAwMDRGQUE5RUI1NUZGMkIzRkY5ODAyMEMwRkM3NTZGN0ZGQTcKLToxMEUyNjAwMDcyMENEMkVCNEU4OUZCN0ZDOUJFMjk1N0IyRjc0QjU0RDMKLToxMEUyNzAwMEI4MkU5RTgxNEU2NDg1RjNDQjNCRkYxQTY4NDJCQjRGOUMKLToxMEUyODAwMERBQjFGN0FCRDQ2RkNGMzUyRTk0Q0I2NkJENEY2NDE3QTAKLToxMEUyOTAwMDhEQ0JFQUM1RjA3QkYyODc1MjZBODJDNEUxNkI5ODNDNzEKLToxMEUyQTAwMEQ0RUY3RUU3ODcxMjg3NkY4RjJCRTU0M0Y4NzY2Qzc3ODQKLToxMEUyQjAwMDI3NThCREU1M0JERTIzQkE5REYzRTg4RkMzODg4N0U1ODkKLToxMEUyQzAwMDdCMTQ5QkJGQkI3Qzg3OTJGNjRDQTFFNzFCRjg0NENEMjcKLToxMEUyRDAwMDI4MzE3RTVCMjZGODc1RDlFRUE1QTQwNzk2RjU2Qzc4RjMKLToxMEUyRTAwMDBGRjk3NUY5MUU5NzREQUUzM0JDMTg2OUM0RUJBQjhBQjQKLToxMEUyRjAwMDUxOEZFNTlGRkU3MzU4NjdBODdBM0JCQTMzQUM5NTUzQUMKLToxMEUzMDAwMEJGOEJEQzhDQUVBRTk4NjE2Rjg3RkQ3RjlDMzNCNDNGRDIKLToxMEUzMTAwMDgwN0U4QTZCMkVFRjU5QzdDNzAzQUU2RjRDM0U3RDFCQzQKLToxMEUzMjAwMEZGOTIzRjU0NkY0QzUyRUNGQjBFMjdFMDg1NjkxNDg3MzcKLToxMEUzMzAwMERDOTE5QkQxOEYzM0Y1ODVDOUFGREZGQ0YxODk2RDQ5NDUKLToxMEUzNDAwMDM2RUUzQjhGRkY3OTVCOTJDMTdGRDM1RkRGREY3NjI3QUQKLToxMEUzNTAwMDlCMTczQ0UzRDM1MDBFMkRERkY5NEExODJDNzhBRjU1QUMKLToxMEUzNjAwMEI4MUY3NkVDODdGRkZDQzg1NkM2MkZDNzVFRjc5MDVERDYKLToxMEUzNzAwMDc3RUNFOTNGOEVENUQ5QkM4RjNERjZDOTI4QjQzQjU3MjEKLToxMEUzODAwMDNFN0RFOTY4QTRBRjk1NEZDQzE5MEQyM0Y4MEY0OEFGMzcKLToxMEUzOTAwMDI5OEY3NTVENTNCNEFFRkExRTA5ODMzMDAwNEY4OUE3RUIKLToxMEUzQTAwMDYzN0Q5RUREQURBNDMxNzRGQkVFNkI5RTk0ODdFMTY3QzcKLToxMEUzQjAwMDM5N0JENzVBODlFQkI1OTRGNDEwOTZFRjYyNzg1RUI2NDQKLToxMEUzQzAwMDZCRUQ3QkNBOTQ0Q0Y4NEU4RTkxQTNGODY0NkMxM0M1MjgKLToxMEUzRDAwMEY1QkVGMjhBOEJBQkYwRTkzMjc0QTQwRkU4MjdGOUVGQUYKLToxMEUzRTAwMDZDQjdGQzEwNUJEN0YzODc1RkM3MTM3MEQyOERGODVGRjMKLToxMEUzRjAwMEJFNkIxRDFGRDdCMThFRUZFMjVGMkVDQ0EwRkY4N0FDQTYKLToxMEU0MDAwMEUzNERERkRCOEExRjc3RTdEMkJBMEZCNzhFNEI5RkI4OTkKLToxMEU0MTAwMDZBNDRGRkNDOTQwN0E3QzM2RkIzQzRFMTNBNUY4OUFERTgKLToxMEU0MjAwMDUwOTBBRjFFRkZEMTIzNUIyMzdDN0RFQjE5NDI4RUZEMDQKLToxMEU0MzAwMEY4QzQ1ODBDMkUxRjc1RjU3RjE1RTU2NEZGRDMxRUVENEIKLToxMEU0NDAwMDIxRDY2NkM5RDNBRjEyOUYxRDdCRTIyNUI3NEU3MjEyNEIKLToxMEU0NTAwMDgyMTJEMzdCQzc2MEUwNEYyRkVBQzE2NTEyMkYyQzdGNTkKLToxMEU0NjAwMDM4OTRGNjg0MDdENzY5NTlBQUExNEUwRkQzRkIzN0U4MzEKLToxMEU0NzAwMDdEOEFEM0ZGQjJENERFNDYyOUMzQkFFRDU0NEFCODVDRDQKLToxMEU0ODAwMDRFRTUxMTVFOTZFQUJENkUyRDY4NUY0RjY5MDZBRUUzRkMKLToxMEU0OTAwMDFCNzM5MUVFODY1QjQ3NzNGRTFBQ0U3RkJBNjUzRDFGRjQKLToxMEU0QTAwMEU2N0MzQjFDN0YxRURCRUU1MUE1QUNDMUY1M0QyNkVDQTYKLToxMEU0QjAwMDgzRTUyOUU5NTVDOEMwQjcwMEFCMzlCQ0MzRUMzRjlBMjYKLToxMEU0QzAwMDRGMjczRDNDRUNBMDA3QjNCRDM5RUZEM0YxRjVFOUU3QTkKLToxMEU0RDAwMDczNzZGOEZBQjZBMkRCRThDNkM0REIzQjI3MzNDQkZCODYKLToxMEU0RTAwMEI0OTAxM0NCMjA1OTU3MzA3RUE4QkU1MjIxOUUxQzUzQTYKLToxMEU0RjAwMDNDMDg2RjY3OEY0MjcyRkM5RDFEMEFEOUU5NEVCOUIwODYKLToxMEU1MDAwMDZDMTg3RkZDRDcwQUI3M0Y5NkVERDkzQjA1RTVENzNCQTIKLToxMEU1MTAwMEZCRkU1NUQwMjFBN0YzNjVCQkRFNzAyNzg1RkM0RjU5NjQKLToxMEU1MjAwMEU1M0ZGNjk3NjEzRDVFMTM3MDJGN0YyQTczN0ZDQjc3QUYKLToxMEU1MzAwMEJEOTdCMUJGQjdENUQ4MzUwOEZGREJCRDJFNDhCMjJFODkKLToxMEU1NDAwMERFRUU1MTMyQzYzN0Y2MjkyRTVCMUNCNzMzMzRFREI1RkIKLToxMEU1NTAwMDJDOEM2Rjg2RkQzQUNFN0JDREVBRDhBQjQ5QjQ0MzVFQjYKLToxMEU1NjAwMDc2MDFEOTgxQUE3MUQ0QzNCRUFGMDlGOTY5REY3QjREQTkKLToxMEU1NzAwMEY4MDZEMDJEN0FCQUREODEyNzM1MUEyNzNGNTg4REM0ODkKLToxMEU1ODAwMEFCNzhFQzM1NjVGMzQ3NUQ5QTZDODMxQkQ0NjQyMUM2ODgKLToxMEU1OTAwMDUzN0U1REZDNDcxNUZCN0QxMUVEQkY3MzA2RUJCRkE4RjUKLToxMEU1QTAwMDQyNDcyRUVCRUZDNTk4NjRBQzgyMENGMTI5NDdGRkYxOEUKLToxMEU1QjAwMDU5MEFFODU2M0E4Qjk1QzlENkY4NkE3OERGRUQxNDk3NzAKLToxMEU1QzAwMDY4ODU5NjM0QzY4OUEwMTA3QTdFNjBFOUY3QzEzNjBENTkKLToxMEU1RDAwMEQyNkM3Q0E4MkI5M0FERjE1NTRGNEI0QkNDQzNFMDI4QUMKLToxMEU1RTAwMDVDQTk5NUEwNjkzNkRDRjg0NTJEQjIzREFFMkRDNjVGMUQKLToxMEU1RjAwMDIxRTIwOUIwNjNFN0NFOURBQ0RGM0FGQzU2ODI3RTBDODcKLToxMEU2MDAwMDhGNTczMTc3OEFFQzk4Mzk0MjBFRkU5QkIwODNGNzQ5RDkKLToxMEU2MTAwMEYxRkRFODY3QzVGNENEMkFDQTM5QTk3NEIzOEFGNkM0RjYKLToxMEU2MjAwMEJDOTNEREVBNjIwQjNEQ0UyQjVENTU4OEY0NzJGMDMzNkUKLToxMEU2MzAwMEE1MjkxMzVEMzVBQTlDQUU1NjE1QUYyREM0RjYwNzdERUUKLToxMEU2NDAwMEI3MTU3MjI3MzQ0QUYzMkMxMEYzREM1RkY0OEQ2MDFGOEEKLToxMEU2NTAwMEVCNzc2RkYxMzczNjRFNjQ3MEQ1NDUxNUMwNzg0QjVENUEKLToxMEU2NjAwMDY0RDFDNjBBMzZGRjgyNDM4QUUxNjNFNTgyRTZBNDlBNTIKLToxMEU2NzAwMDk4M0M3NDlDNkQyOEVGMTlGRTFFNDIzQzMyRjgxRjZFQzgKLToxMEU2ODAwMDhCNTJGOTkxMzY5RDlFM0JEQUNBRThCOUIzQ0RBMEVGMjMKLToxMEU2OTAwMEJCREE2NjUwQjlBN0FEOEU5RThGQjdDNUU5N0RGODBFN0YKLToxMEU2QTAwMDdGMDJFOTc3Nzc1QjEzQkRGRjU5NUI4MjlFMzUyQUU3Q0UKLToxMEU2QjAwMEI3NzkwMjFGOTY3OUQzM0U1ODYzN0I3ODM1QzY1MTRDQTMKLToxMEU2QzAwMEZDMzlGMTVEQ0IyODJFODdGNjBEMjQxREYxM0Q1QUU1NkUKLToxMEU2RDAwMDcyQzU4OUQ3RDZENjIwRDlBNURCMjRCMEUxNzM5QUNBRjIKLToxMEU2RTAwMEVEQzhCODgwRTM2OTZGRTIzMjE1RjdGOUVCNEFDQkM5QTAKLToxMEU2RjAwMEVFODFCODgxNzI3QTlCMTRCRkE3ODJGMUNCODFBMkU5MjcKLToxMEU3MDAwMDUxQUJEQzBEMDUxMzcxRDU0MjJGNjNCQjc4N0M2NkJBMjMKLToxMEU3MTAwMENBRTU1MzFEQUNEQTlGQzVFMDhCOUQwNDFERTlDQzlDNzYKLToxMEU3MjAwMEU3QkU2QUJEMTBFNUUyQkU1NTBDOUU3MkZDMkU0Mzk5MTEKLToxMEU3MzAwMDg1Q0VDQ0ZFNjYwQUY4MjA5ODU5NEUwRkQyMkRFN0ZGMDEKLToxMEU3NDAwMEU4Q0NCMkNEMTgyNzY2OEVBNzMxNDEyN0FCREJENjZFNTkKLToxMEU3NTAwMEIzNkFDNkJENzVBMjYzOTM0RTE4RkYxQzI4OEE1MDM3NTIKLToxMEU3NjAwMERDNUY2QzJFRTZERjdEOUNDRTVCRkJERUEzRjg1Njc0OEYKLToxMEU3NzAwMDE0RDhFMjhEMURDRDMyRjkzOTVCMEZGM0I4RjQ4OUU2NzgKLToxMEU3ODAwMDkyQ0QxMzU5RkQ2QTg2MzdGNERCNzNFNjk1NjYyNTJDMjYKLToxMEU3OTAwMDc0QkQ1MUQwRDM1NjZGM0M0QjFCNDE3Rjc1OEE3QTY2NEUKLToxMEU3QTAwMEY5OTAyRkYxMkQ1Qzk3RUY4RUZCNDkzRUQyRjM1NjU3MkYKLToxMEU3QjAwMEVBNUE5NDhGQUQ4NzNERkE2QTM2QTU5MzgxNzgxMkJGRTUKLToxMEU3QzAwMEM3MEJEOTdCMDZEMjg5QkE5NTFFOUE1QTkwRUYzRkI0RUYKLToxMEU3RDAwMERFQTU2RjNFQzdDMkU3MjFDM0NFRDdEQjVBNDc4RTRCQkIKLToxMEU3RTAwMDlCNzA2RjQzQjg0Nzg4Q0I5QTcwOUJFQjcxQTJBRUIxMTgKLToxMEU3RjAwMEZGMUIzMDE0MEZDRTdFNzNFNjM1OEUzOEZFODNDODc3NEMKLToxMEU4MDAwMDFFQzJDMzM2MkJCRDE1QjY2OEI0Q0Y2MEI2MzdFN0VCNzIKLToxMEU4MTAwMDZDRUY5Q0VGNjBCRUMyOTlFRENGRjRCODIwMTdEN0YzMzAKLToxMEU4MjAwMEIxQkY4Q0ZERTk4QjgwNEIxRTU3NTA4RTVEQTcyNjdBQjkKLToxMEU4MzAwMDEwRUZEM0EwODVDQUEwRjZFNzIzQkZGQ0Q2Q0ZGOTcwQUUKLToxMEU4NDAwMDZCRTcyM0Y5QzQ0NzZBQUExOEY1QzI5OThFRDcwMUYxN0MKLToxMEU4NTAwMDc4MzVFQTJENDMzNkFDRjJEQzdDRkU0MjM1RTMwNDY5QzAKLToxMEU4NjAwMDhBMUZEMTE2MzMxQjUyMEVEQzE1Q0Q4NEU3ODFGRTBCQjcKLToxMEU4NzAwMEQ1NzdBQ0ZCNDkxQjAxQjg5RjlFRjZEMjNFMDcwNjQ0RjQKLToxMEU4ODAwMDM0NTYyRTNFMDg5NUVCNTk3RjNCODUzQ0E5NTZCOTVGMUYKLToxMEU4OTAwMDc4QzE0MTdEQkJDMkUzNDc0QTQzQzg4MjQ3MTE0RjM1MjcKLToxMEU4QTAwMEUzNTgxRDcwMTc2OEFDQTk1QkFERDg4QkQ1NEQzRUJDNDUKLToxMEU4QjAwMEMyOURGODJERTJDQjFERDU2OUZGREQxNTQ5MTA1RjgxQTIKLToxMEU4QzAwMDg4N0ZDRjEyNzFGQTRCOTVDMzAxOTQ1RkFERDAxQjM4OEUKLToxMEU4RDAwMDFGRjlGOTkwMDJFNDE3MjdDNjEzNUY1RTM0Q0MzRUUxQkUKLToxMEU4RTAwMDJFNjE5RkVGMTBGMkZBMTE0MTM3MEZBM0JDNjZDRkVBRjkKLToxMEU4RjAwMDlFREUzNEIyRjRBQzg3NTM3M0YwRjk5MDkwREYyOTIxOTcKLToxMEU5MDAwMEJGQzM1NUZFQjRDNEVDQ0VCQkE3MUQ0REI0MzAzOEJBNUUKLToxMEU5MTAwMDhGMUU1NzcwMjk0RDc5MzE1M0MwNjdDQTg3OTkzRTBFQjMKLToxMEU5MjAwMDQ3QjhCRkYzNjZCNEJGQjdBMUZDNDczREU3M0EzMEZFMzYKLToxMEU5MzAwMDFFODZBRjhFODREQkYwOTA3Qzg5RDdCNUUwM0MwQTY1RkIKLToxMEU5NDAwMDlBQzdDRjBCNkI2NDFGMkIzRjY1ODA4MUZEM0REODE2QTYKLToxMEU5NTAwMDIzMzg5RUYyRjZCRkZGMjJDNkY3NjdCOThEMjQ3QjFGQ0UKLToxMEU5NjAwMDNFNzlGRjJERDg2RjU4RkREMTNGRTAxMzUyMTNGOEZDQ0MKLToxMEU5NzAwMDg1NUMzMkY5RUQ1OUQ3MDEwOUY1RjlEMzg1NDBFMzg1NzYKLToxMEU5ODAwMDRGRUVCOTBERURFN0YwQzlFNzZGQzc3Njk3QTRBMDM2NTMKLToxMEU5OTAwMEMwRUEwNzJCNzY3RkY5N0NENjdGRDZFNTMyQTAwOTFBMkMKLToxMEU5QTAwMEVDRUU0Rjc0QjNGQUE1QUQyREQ1MzhCNTdGOTNEMjAxRjcKLToxMEU5QjAwMEZDOUU5Q0E3OTIxQzFDMEJCMTU1MThFN0M4REI5ODkwRDUKLToxMEU5QzAwMEYwN0JFODQxOEVCNzhCQjZGNEZFQUExQTEwOUZEQTNFQjAKLToxMEU5RDAwMDFDNkZCQ0FCOThDQjVGRjlCOTM5QjhGN0UyMjk3QUQzOTEKLToxMEU5RTAwMDg3RUJGQUVDRDExNTgwRjJDQUYzODE0Q0ZCRjE0RjdGMzMKLToxMEU5RjAwMEIwMDJCRTYxQ0RBRjM4QUE2NjhDODM4RDc3NzlGOEJFNDAKLToxMEVBMDAwMEQ1MDcwQkJBQTdFODlDQkM5MDdGNjZGRUE5RDY0QjdDQzUKLToxMEVBMTAwMEZFMDJEOEY2NjFDREZEMkFCMzdEODU5NDE4RUZDQUEzMTYKLToxMEVBMjAwMDdEMDlCRTdGMjVEQTVGQTRBMDJEQzc4QTdGOTZGOTdFNzcKLToxMEVBMzAwMDY5M0MxNUIwQzY0MTgyN0Y5MkUzOTlFQ0NDMkE5NzRBOTMKLToxMEVBNDAwMEYwQjQxQkI1NDc3RkNEQzY1M0E3NUY0REZBMTdCQUVEOUIKLToxMEVBNTAwMDcwMzhEQjMxMzhBQTM4MUMxQzNFMTM4RTIyNDZFRjNFM0MKLToxMEVBNjAwMDM2RkU1M0M3N0Y5NzhGRjA3RDVDNjdFQTk1REUwMEZBMkMKLToxMEVBNzAwMEY5N0I0RkM4QzQ2RjlCRkE4MUY0Q0FCRUFBN0Q1RUM0RkQKLToxMEVBODAwMEUzQzZBQTFBM0ZCNzczMzgzREU2MDg3QTdDQjg4RUQ3M0EKLToxMEVBOTAwMDNGNTFDNUY3RjVFMUU0MjlEQUY3NzI4OUVGMzk3OUZCREYKLToxMEVBQTAwMEJDQjQ1NzkxOEMwNUFCQTdBMTdFMzJGRjU4RjIwODE4NzEKLToxMEVBQjAwMDZFOEE5M0Y2M0MwMkI5MzVDNzU2MkU4MjAyNDc3RTRBQ0IKLToxMEVBQzAwMEM5QTA1QzQ1M0ZCQjJFRjJGQzM4MDY0QTQ4RUMzQjU3RDgKLToxMEVBRDAwMDlCRkJEOENBNjEwM0U3RkY4MEE5RkZEQUJDRjREQ0RFNDgKLToxMEVBRTAwMEYyNTAwMEUzMUNCRjMwRTlBNEI5NjcwRUNFNkZENjREREIKLToxMEVBRjAwMDNEQ0Y4NkQ5N0MyRTNFQ0FGN0NEOUM3OTI5MjhGNzUwODgKLToxMEVCMDAwMENFNkVENEQyQjk1NjNEMEFBQTg3RTAzMUY3MzcyRTNFRjEKLToxMEVCMTAwMDZBQ0Y1Mzk5RTVDODQzMTk5MjhGNzU5NjdFRTU3Mjk3MkYKLToxMEVCMjAwMDNEQkZGMDA0NkM5QzQ0NzREMTVCNjI1QjlGRUQxNzMyNzcKLToxMEVCMzAwMDM3RTZGQ0ExRkVFNTQwQkZDMjdGODIyODk3NkYzOTQyQ0QKLToxMEVCNDAwMEFFREM3RDg3RDI4Q0Y2NTFGOEIyQ0E2Q0VCN0U2OEJCMjYKLToxMEVCNTAwMDhCRUY5QkVERkZCRDA3MzBGRUJFQjZENjRCNzExQjczMkUKLToxMEVCNjAwMERGREM1Q0Y3MEQ5ODY0ODVGOTBERUQzRjBCMjA1RTlGQUYKLToxMEVCNzAwMDhDOTRGOEYwRjlFQ0NDOUQyNDVGQ0RGRDdGOEY5OEQzNzkKLToxMEVCODAwMEVBOTkzQkJGREM4QzcyMjk0RjI2OUREMjUxQjg2RjBDOUQKLToxMEVCOTAwMEVFMjdERTVCRUJBNUZERkQ3MEEwQUZFNzU5NTYwRTdFQkMKLToxMEVCQTAwMEU0MzY3MDNGRkJFOUVBNzQ5M0Q1NUZGREIxOEJFQkE1Q0EKLToxMEVCQjAwMEZCNURDMkNFREE2OERGNkY2NkZDNzBCRjhCN0RGNzA0NDkKLToxMEVCQzAwMEUzQjQ1RjI5N0I0NTlFODRDM0FGMzFGMTExREU5NzJGRkIKLToxMEVCRDAwMDE3NEZFNkNGOTJDOTgzRjZGODgzODI3RUI2MEFGRjY2QTYKLToxMEVCRTAwMEEzQjBDQjlERkQxNDM3NkJGQkRDNjhFN0RGQTQ1NTJBOEYKLToxMEVCRjAwMDE5Rjg3MzVDQUJERDJFMjg2QUIxRDNGRjk4NjYzQkZEMzQKLToxMEVDMDAwMDg3OEMwMjg3MUQ5MTI2QkQ2NUVBREZCNUJFRTA3OEI0MkEKLToxMEVDMTAwMEJGMkE5OTdFRTRGNjgwMjY1QkY3RDc5REZBNzdBNzFBN0MKLToxMEVDMjAwMEZCOTlFQjJDRUM5MDcwMjBERTgyRjg3NkRBQjVGQjA0RDEKLToxMEVDMzAwMERFRkZBMkM0RDI4OERGODAxQURGNDdGREFBNzE5MjM3QjcKLToxMEVDNDAwMDRFM0I2MTA4OUNDMEUwOUMzQzIyOUNCRjNBMUIzODRGNjUKLToxMEVDNTAwMEI3MUZGMDkxMUNERkYyMjIwMzc5NzYxNjg4M0M4QjEwRTcKLToxMEVDNjAwMEQ5MUYxRDIxRUU5Rjc0QjhCODVGRDAyRkU4RTgwRDk3MkIKLToxMEVDNzAwMDQyRjMzQjI2Q0FCMzAzRDA5MjM5N0Y4Q0M3ODc4RUEzNTkKLToxMEVDODAwMDIxODJGNTQ2NjdDRUQ3NDUwQjg1QkU4RkM5RkNGREI4RkUKLToxMEVDOTAwMDhCRUZBQkNEMUUzN0YyMzgxRjg4NzE3RUFEQzZGRUJGM0QKLToxMEVDQTAwMENCQjI2RkYzQTQyQkY2OUVCNUZDQTE4QkVGODMwREFDMUEKLToxMEVDQjAwMDg3QzhDNzM1RURBNTNENkFFQzIzNTc4NkJDQjQ5Qzc5NUYKLToxMEVDQzAwMDJBRURERjlFMDBCRkExMzBGQzNDOTMwRkJCODFDOTkxQjAKLToxMEVDRDAwMDY3MjQ4MUNGREZGQjQ4OEY5OUY4MUVCMEE3NTE3RUEwMzMKLToxMEVDRTAwMDNFMzgxQzQ4NjFGQ0M0NUMwNzczREZDNTlDODc2OTNGRTQKLToxMEVDRjAwMDk0QjlCOTNDNjE3NEUzNzMxM0RDNzFCRTNGMDg2OTkyNDcKLToxMEVEMDAwMDBGMDU4MjZFQjZGQTE2REU1M0NCOUU3N0NGN0NGQjM1QUQKLToxMEVEMTAwMENDNEY3OEY3MDk5RjhFNzA2REFBM0ExMkI2Q0E0RDY4MkIKLToxMEVEMjAwMEI2RDM4RkY5REVGNUYxMThEQTk3QkY1NTRBOEM3NjVCQ0EKLToxMEVEMzAwMEUzMjg5MTdFMzdCNjdGNDZEMkM5N0Y0QkJFQTI5MERERDUKLToxMEVENDAwMEZCOEM5NDlBNDRGQkU4MkFEMEZFQzUzMzM3NDY1M0VCM0MKLToxMEVENTAwMDJERkIxQjRFQkIzRUM3RDdGN0MwNzI5Qzc3MzNCMzlGQ0EKLToxMEVENjAwMDYwRThCQTk5NzZCOTU5QzYzQzEwNkJGQkY5NkNEOUI5MTEKLToxMEVENzAwMDVEQ0RBNkNCRjhCQTQyQ0NEQjUwNjMwQTEwMDkyNkU4NzkKLToxMEVEODAwMDM5MUQ3NDdBMzJGQkRGNzAzM0JDNUQwMEZERjlDODQ3NzIKLToxMEVEOTAwMEFCMDM2MzJGRTJGNkM2N0YxQkRFNjZFMzc4RkZEQkYwOTIKLToxMEVEQTAwMDM2NDhCNzRFM0RDREY3MTlGMjA0MUU0MkQwNDJGQkVENzYKLToxMEVEQjAwMEJGNjg1QUJDNkUwMjFCQ0Y1RDE4MjQ3QjM1QUZBOUZEMUUKLToxMEVEQzAwMDY2Mzk4Q0Q5N0RCRDFBRkE5Nzc5NjJGRjFCMUFCOTdFMTQKLToxMEVERDAwMDM2RjdBMzczRUFFREZBRENBOUJGM0RDMkVFRjAwQ0EzNEYKLToxMEVERTAwMEQ3OUQ3MjczMzhCREJFQzQ2REQ3RUIwM0YxRTI2MUU0MDkKLToxMEVERjAwMDlGMzM1RTdDN0FGOUE3REY1MzVCOEM3OTE5QjE1NzZCMkYKLToxMEVFMDAwMEQ5QkFFQzlCQTU1MjdDMzMzQzFFQUU4QjVCRThFMUIwREIKLToxMEVFMTAwMDVCQTFGRTBFQkI3OTFDNjQzREUzRDdENDM5OUNDRkUxRTYKLToxMEVFMjAwMDFDRDQwNzRDMDFFMUZFNDE5MTlDQzJGQzlBQjVDOTU0MjcKLToxMEVFMzAwMDFERTY5QkFENTUyNzY4RDY3NUFDMkU2Mjc2MkRDM0VCQ0IKLToxMEVFNDAwMEE2MUE3RkIzRDVERTdFRDNFRkUyNzFEODQwRjU0MUU0NTgKLToxMEVFNTAwMEM3RjI2MEFBODZEQ0JCMTg3M0ZDNDZGMTNDNEI1Q0I3N0EKLToxMEVFNjAwMEYzMzRFOEMzN0Q1NzBGNzBCRENEMzhDMkNCRjU0QUFENDIKLToxMEVFNzAwMEY2MTZFNTYzMjZFMDU0NjAyNEJENjBDRkJGRENBOUE2OEEKLToxMEVFODAwMDU2RkIxMTFGMTExRTZGMDk2RDkxMjgxOTQ3RTk4OUE1QkQKLToxMEVFOTAwMEQxN0Y5ODFDNThCMDk1RTQ5MDFBMkZDMzcxRjY0RTYzMzkKLToxMEVFQTAwMDY2MkZBQkZGRTE1RTM3RDkzOTNEQTEzMTJBREE5NUNGMjQKLToxMEVFQjAwMEM4OEJCRkU3NjZGM0VEN0ZERDAzQjg3RkQyRjNEOUI5MjYKLToxMEVFQzAwMDc0OEVBMTI3NzREMTVDQTQ4MzFFMDk5ODI3Q0JFNkNGNEEKLToxMEVFRDAwMEY4ODcyN0ZCNDAwMEUzRjRFMTM5MzFDMDM4NjVGRjJGQTQKLToxMEVFRTAwMEMwNzg4ODhERUY4QUZFMzQ0RTc5QkExMDBCQzgzMzU4M0IKLToxMEVFRjAwMDNCMUY3NDYxQkU4QUYxQTlGRkZENEIxOEREM0QxRUFDQkUKLToxMEVGMDAwMEJDRUY3QzE4RjRGQjREN0ZGRjYyN0ZFMjMxRTRDNzhFREIKLToxMEVGMTAwMDUxQkY2QjQ2M0VFQjYyNzAyQTY0ODdDNUEyMDg3NzY1RDUKLToxMEVGMjAwMDlFNENGQzA3NzlDMUQ0MDRGNkJFRkE2MEE0MTZGM0NGNTgKLToxMEVGMzAwMEFBRDUwQTk0MzQwQzBFQkVERTg3N0M4OTI3NzFCRUI1MzMKLToxMEVGNDAwMDVBNDM2RDM2QUI1Rjc1NDgyNzdCNjU2RUY0RTZGRDU4MTYKLToxMEVGNTAwMDlFNzY5ODk3M0JEQzQwRjYyMEYyMkY1OEY4QUZGQUUzMDQKLToxMEVGNjAwMEIxMzRCRjVGMEEzOURFMUU4REY1QzZBNDExRDY0MzUzRjYKLToxMEVGNzAwMDFERTczN0VDNzkyQjU2M0FEMEE2RDlFODIwRTFCMkQyN0EKLToxMEVGODAwMEMxMEM0NjA3OTNBRDc0MTA5M0NFODYwRUJFOEQ1ODM4RDMKLToxMEVGOTAwMDIzN0VFMTdDNzI5QkMyRjk2NjI4RERCNzc4NzNDQTg3NEQKLToxMEVGQTAwMEYyODczOUVFRkFBQTlDMDhGQTE5MjYxRjY4RDNFRkQyMjUKLToxMEVGQjAwMEIwRUM1OUU0MjY3RkNGRTQwQjkzMUY0RTdBRjlCRTAyRTIKLToxMEVGQzAwMEUzOEIzQTFGN0IzNjA2RjU0QjMzRjEwNUZBNzM1NkZBOUQKLToxMEVGRDAwMEJGNzIxODNFOTkwRkZERkIzMUM3N0VCRTBBQzkyQzI2QjEKLToxMEVGRTAwMDQyN0U3REUxRDFEMkIxMTZCQTc3RTI2OUZFMkMwOThFNUMKLToxMEVGRjAwMDU4RTREMUE5NTNCQzZDQzFBMzM2OTBGN0FDOUMzOUJFODAKLToxMEYwMDAwMDVGNTZGNThFODg4NUVGM0E5OUZEOEM0NjYxOTc2QzQwODYKLToxMEYwMTAwMDVFMzFGMkRENjJCRjA3RkRENUZBQzdBMjE0Q0ZGN0M0OTcKLToxMEYwMjAwMDlCMjk0RjZERkEzQjgxMUIxODFEN0UzODRBRDY3MUYyMjEKLToxMEYwMzAwMDFERkFFMjQ3ODk3RjVGMEIwMERBNkQ5QkE2MkQxOTg3QzkKLToxMEYwNDAwMEZFQzk4NzM3MjZDNkExM0ZCNjhFRTFGRjA4MTkzN0E5NEEKLToxMEYwNTAwMEQxMzJFNTNFRjU4REU2RkI2MzdBOTQzRjEzNTFGRTFFRjcKLToxMEYwNjAwMEM0Rjc5NDI4Qzc0NEJEM0VBQUM3RDZEOTI2MEYzNzdCMUMKLToxMEYwNzAwMDM5N0Q2RkY2NzIzQjcwOURCQkRCOEJGQ0Q1NUZFQ0E1RDkKLToxMEYwODAwMEZENTNCM0RFMjUwQUI3REI2Njc4Nzg3RDM4Qjk0NkM3MEQKLToxMEYwOTAwMDc4RDUwQzBGNkY3NzVGNUIyQUZFRTYwNDg0NzMwNzNEMUIKLToxMEYwQTAwMDczRUI1MzgwRjE3RjdGNTk1MkM3RjhCQjc3MzUyNDMyMTkKLToxMEYwQjAwMEQ5N0RGNzc5NzkxQ0MwQkJFRjlGNjhERjI4QjdENEEwNTIKLToxMEYwQzAwMDM4NTZBNDlFRjU2NzU5QUZGOTBDMzU1OTRDN0UzMDcwMEYKLToxMEYwRDAwMDYzNDhDNzFEQkE5RkVDQjBGOTkxOUEzRkE5NTM4NkFFMTkKLToxMEYwRTAwMDJGRkUzOTYyNTkyN0VGNUY5NTQ0MEZDNTBCRjg3RUM2OTYKLToxMEYwRjAwMDRBRTFDRkQ1OTY3ODg5MkYzQTVBREREQjcxMkEwQjNDNEQKLToxMEYxMDAwMEQ5REMwRThERDQ4Qzk4MkY4QjdFNTNEMjgzNzEyRTJGMDkKLToxMEYxMTAwMDNENzEzRjIzNzkwRURGQ0Y0ODdBRjg3RTQ2RDJDM0Y3QTAKLToxMEYxMjAwMDMzRjA4OUZCMTlGODFERjczM0IwRkM5M0I2MTg5NTcxQ0QKLToxMEYxMzAwMDVGMDNDQkI4QUY4MTY1RENDRkMwMzJFRTY3RTA3MzRGQzEKLToxMEYxNDAwMDVCMzMzRDdGREVENjQyREY5RjZBNkJBNUYyMjUxRTZFRTQKLToxMEYxNTAwMDY3NDM1OTMyQkE4MEUxQjlFQjc2NzcwQ0Y3QTlENzg5QzIKLToxMEYxNjAwMEY1NzkzNjU2OTI2QkIwNzVGNDQ1QjhERkU5N0JFMTVFMTAKLToxMEYxNzAwMEMwRjlGOEEyM0M2RUQ0MTlCRDE3QUU2N0NGQUVBOUExRjUKLToxMEYxODAwMDJFREMyRkY2M0UxQUE0QTc0RkJEMEZGNDIwRUU0RjI0MUQKLToxMEYxOTAwMDlCMzE1M0I2QzVGM0M0MUM5NUU5RjdEMkU4Q0QzNTM5OTgKLToxMEYxQTAwMEFDN0NBQkU3QzkzNTE4QkY5QUE4QUYzMjE2NkI4MzY1NDQKLToxMEYxQjAwMDNENTRCOUU0MzE0Qjc5NUNGOTc2RDVDRkVBREZCOUY2NDUKLToxMEYxQzAwMEU5MzVDOEE3MDgwNzFBNkYxRDlFRjQ5QzU1NkNDOUQzNzIKLToxMEYxRDAwMDI1NDBFNzM1RkE4QkREMjlBNEIzQUZFMTdBMjFGRDc4MkMKLToxMEYxRTAwMEI4NURGRjY1NTgxMzQ1M0Y3OTlDRUVBRTQ0RkU2MEY1NkYKLToxMEYxRjAwMEQzOUMyRUNGQUNGRTNBREM5NENBMUJEQTZFQTQ3QTcyOTIKLToxMEYyMDAwMEQ1MTlENTAzNjU4NEZFRjBCQjM0NDIzRjFEQjA0NkMzMUIKLToxMEYyMTAwMEIzNjMxQjkwOTczMTJFRTgwQjkwOUZENkU1RTI3Q0Q5MjMKLToxMEYyMjAwMEU1RTNDRkEzNUU3M0ZGQTg2NjlFOTc4RDNCNEZGMDY5MjEKLToxMEYyMzAwMDk3MkY1RTg3RjlDQUZEOTM2NThBMTdGNEI4NTgxNzk4MTcKLToxMEYyNDAwMDg0REI1QUZDOUIxMjM2RUVBRENGQUI4MDcxRTY5NDg3MUYKLToxMEYyNTAwMERCMzcxM0M2ODVCOEJFQkNEMzRCRkFGMjRCRTM3RURDN0EKLToxMEYyNjAwMDlFQzNDQTEzQkU2RjE4QThGRjM2ODBFMTQ3M0E0OTZFQTUKLToxMEYyNzAwMDk0NjkzRkY3NDc1NUUzNzMxQTU4RjVGM0E2M0U5MTgzMTcKLToxMEYyODAwMDcxODRDRjA0N0ZBN0YwN0MxMTJCQUZFQUI4NjExQ0M2NTQKLToxMEYyOTAwMDk1M0U3Qzg5Q0JBNTQ3QzUzOERCNURCRDJEQjQ5RTUzMUIKLToxMEYyQTAwMDgzNjQzNzAwNzQ5MzVEQjAyQUFBRDIzRUJDOUNDRjlGODIKLToxMEYyQjAwMDZFOTdGNjc3NThDRkNEMTQ2RjkyQzFFM0ZFNkNCQTk3NzQKLToxMEYyQzAwMEZDRUY4RjNERTI1QzVBMkZEOTBCNkU1RjQyQ0I2NkVGQUQKLToxMEYyRDAwMEJCOTMzMkYxRkIxQUNEOUZDMkQ0RkIwREMxNEEzQTI3MzIKLToxMEYyRTAwMDlCMkM1NzI5Q0Y3QTQzMzk4RkQzMDU0MjU3QTdEMDRFNEQKLToxMEYyRjAwMEI4NjdBRjhGQ0I4N0EwOTdGMkFENTJFNUJCMEZENjQ0NkUKLToxMEYzMDAwMEYwMjk2QkM4RUZBOUQ4ODIzQUMyQkIyNjZCOTRCN0M1NjcKLToxMEYzMTAwMEZFNDZERjlCMjM5NDk3QkQwMUM0QkEzNEYzNzg2NkM3RDkKLToxMEYzMjAwMEE4NEY3Rjg1RjFEQjM1NUZENzBDNzE1Njg4RjIxRUM5NzcKLToxMEYzMzAwMEI0OTFGMURDNkVGRkJFMDBDMkYzMTVGMzlDNTFERkVBMUQKLToxMEYzNDAwMDAwQUJERkJFNTgzMzcwMURBNjY4MzU3NTE4MjdFQ0QwQUEKLToxMEYzNTAwMDZBQkNDODU3ODFDOUI1REU0NTI0ODcwNkYyOTJFOTNDRUMKLToxMEYzNjAwMDVCN0IzOUI3NTdGMTNCRjIyNUI0QzM3RTNDQkYzMjQ2RDUKLToxMEYzNzAwMEM4QjI0MDc2QTU4NDc2NEU0NzNEODU4RDMwNkZENzk2Q0UKLToxMEYzODAwMDY3RDk5RTczMTlFNUIxMkJGMzczMDhDRTBFODg3OUIxNTYKLToxMEYzOTAwMDdFQjI5RUM3OURDNzA0QkQ2OUI0RTNDNjk4RjE0MzRDRDUKLToxMEYzQTAwMDMxQjZGODExQjkzN0Q5RjM5NEYzOUI1NURCMzk4RUQxQzcKLToxMEYzQjAwMDA5N0IzOTRGRjgwNTc5OEU3Q0U2NEYzREU2M0U4QTFEODQKLToxMEYzQzAwMDRGQ0VGOUU2NDYxRUNBNDY3ODczRjE2MEIyM0U3NDNFRUYKLToxMEYzRDAwMEY3NDUyQTFCNzA5RTYzMzQzRkMxMURENTU2NTdBM0ZDQzkKLToxMEYzRTAwMDFBMEQyREFCOTBFRUNFMUE1RTA3OUM1M0NBREI3QjcxRDMKLToxMEYzRjAwMEREQTdFODJBOUQ1QjM4MUZGQTU3NjNCRjFCMDQ5RDc3ODIKLToxMEY0MDAwMDE1REJGNTY0Q0FDM0ZEMDZDNjhGOTVDODhGMThFNzRBOTkKLToxMEY0MTAwMDVBQzZDNzM4NkZEMjMyREVGOEFFMUM1Qjc5NDI3NzgxQUMKLToxMEY0MjAwMEFERkUzOTVCNEE2Q0RGMjdBNUNFQjU3RDNGNkY0N0E1QTIKLToxMEY0MzAwMEFEM0NCOTY3QTZBREZFRjk3QjZBNkNFNThBRjQ2NUI2QUEKLToxMEY0NDAwMEZBMTcxQzVDNjAyQjRGRURGRDNCNUJGREU5QUYyREI2NjEKLToxMEY0NTAwMDdEQkZCMDZGODlFREZCNDU0NzU3RDhDQTE3RjdERjYxMEQKLToxMEY0NjAwMEFCNkZEQUNENEVCRDU4RUVGRDdDRjZCMjA3Q0Y3NUQ5NDUKLToxMEY0NzAwMEUyODI3NjdCREM2OTRGN0JGRkJBNDY1RjhENzIyREVDQjIKLToxMEY0ODAwMDI2RkE1NjUxOEZCM0YyOEFEQkI5M0ZFMzlENkRFODI4MjcKLToxMEY0OTAwMDU3NEE4NDFDMEQwNTYzMTdFMkJBNTU4N0JEQTQwRkQ0RTMKLToxMEY0QTAwMDIwQUZBNzA2RTc5MkREMzE3NjBCOTM0NzE3QTAxNTA4MkEKLToxMEY0QjAwMDAzREYwMzI4OTdEQjkyRjE1MkQ3MjBEQzNFQUQ5QkNFRDEKLToxMEY0QzAwMDI4NTQ4N0VCMDBFM0JENjY3QjU1OEI0MTIyODRFM0U5M0EKLToxMEY0RDAwMERDOUU2MURFMjJENkYzRTlBQ0JENjUxRUNGQzgzMjFEQ0QKLToxMEY0RTAwMEU5RUU2NzdFRDc0MzE2QkY2QjM4M0ZDQkU5NTc5REE5M0UKLToxMEY0RjAwMDFGMzU1NjA2M0YzRUI3NEJGMTE2N0M5NkI3QkM1NDgzN0EKLToxMEY1MDAwMEU5NzRDQ0JGRkEwQUUyNjE5MzNCREVCQzFERjc0MzRBQzMKLToxMEY1MTAwMEZDQjQyRjY2RkE1NzVEQzUzREM0MTdGREM1MkFFOTE3MkYKLToxMEY1MjAwMDUwRjVGMjA1OTZGODU2OTc5N0NCRkI4MEY3MDFGMkVGNkUKLToxMEY1MzAwMEQ0OTIxOTA3NzVDNEZCMkE5NUUyMEUxQjI0MUUxRjQ5OUQKLToxMEY1NDAwMEIyNzU0MEJEQjY2REU2RDFGN0ZFOTFCREY3OTY3OEM3QUUKLToxMEY1NTAwMDc4OTkzQzMyOUU3NUM3NzBCRkYzM0U4MUQ3MTJBREEyMzkKLToxMEY1NjAwMDg2NTk1Q0NDQkU2OEQ4ODdDRjg5M0FCMzMzRDhCM0FDNjAKLToxMEY1NzAwMDZDRjMzRTdDREVFMUU1Rjk3NEU3MUE4RkQ1QTAyQ0YxM0YKLToxMEY1ODAwMENFRTZGNjlGMzJDNTlENUE4REVCQTc3MTM4ODZBMzMzMjAKLToxMEY1OTAwMDM1NjcwQkRGQUYyQTU1REY0MjdBNDM2QkZCOTQzQzQ4NUIKLToxMEY1QTAwMDA3M0VBNDAzODk5RTQ0M0ZCRTQ4OTBGNDg2MEYwRjc3MjAKLToxMEY1QjAwMDYxNTk5NTUyMDFGNjNENTIxQTkzMzBDRkEyM0FCQzg1NUIKLToxMEY1QzAwMEY2NTU3QzY5QkJCRENBRkNDRDJFQzQ2QkE0REVCRURFODUKLToxMEY1RDAwMDAxRUYzNjgyQUY1REUyRjFEN0FFNkNGRDg1MUEwNjdGOTIKLToxMEY1RTAwMDU3NUU0OTBFQzY0RTMwM0VEMTYwOTEzNzlCODVGREQ2QTEKLToxMEY1RjAwMEU0OTM0REZENEZGMjQ2NDZERTk4M0E2OEVGMzBGQURGNkQKLToxMEY2MDAwMDIyOEY0N0Y4QkEwMUU1OTZFRkFFNkU0MDdBRjc2OTZDNDMKLToxMEY2MTAwMDM1RDFERUZFNTY5MkU4REZCNDc3NkYxMUJDNTU1QkQyNzAKLToxMEY2MjAwMDQ0RkI1RUVGNDcyQUM5QkVGNUI1RkUyNDIzRkU3QzdENzAKLToxMEY2MzAwMDBBQzQyRTE4MUVBRkUxODk1QjQ5REY0Mzg5NUI0N0JCRDMKLToxMEY2NDAwMEEyNTU3N0M3QjY2NzkwMDc4NkQwMDdFQjMwQ0YwM0UxQTYKLToxMEY2NTAwMDExNzkxRTVEMDIxRkU2QkVEQkZCNjZGRTkzRDgwN0JFNzYKLToxMEY2NjAwMDI1MUI2Q0ZCN0ZCN0U0NTU4RTFFQzkxRUY3MzFCRjJGREIKLToxMEY2NzAwMDYxODE3NzFEMUIwN0YxRDI3MUIyQTEyRTRFRkI4MEMwQjQKLToxMEY2ODAwMENGQTU3RDU2QkU5RENFRkYwQUZGQzUxMEY2Q0IwQzBGNTEKLToxMEY2OTAwMEM3RUY1ODM3OTA5RjMwMDdFMzE3MTdBMEI3RjlFNTNBM0YKLToxMEY2QTAwMEU0NEIzM0RFNzFDNDlCNDNGODM3OTJBMEI0OTBCREUyQzMKLToxMEY2QjAwMDMyRjU5NjdDRUE3QzgyNTk3NzlCNzE0QTMyNzlCOTVFNDEKLToxMEY2QzAwMDYzRkZFRUM1NzMxNEUzQkJFQ0U3OTMyNjc0REJDQkU3NzMKLToxMEY2RDAwMDZDQjE5NzI3QTVFQzY1NjYzNTFGNDJCQkEwMDEzODdFNEIKLToxMEY2RTAwMENFREI2MUZGREU2MEM2Rjk2QUY5QjkwQTJGMUJGOTE0OTcKLToxMEY2RjAwMEQ3QkZCNjczQUMyMEY0QkYxOTRGMkRFQTQ5NTdBMzc4OTIKLToxMEY3MDAwMDJENUM2OUQ3QUIwNTQyQ0YxNzM4RjQ2NzY1NDgyMTNGQjgKLToxMEY3MTAwMEJGRkE2MDY0M0ZEQThGNjZGQ0U1MTAyNjdGNTlFMkE5RTQKLToxMEY3MjAwMDY2MUNDNTI5Q0ZGRDg3MzcwM0ZCNDJGRTcyQzJDM0UzQzcKLToxMEY3MzAwMDBCMDlFNkRGQjQxNjhBQjg0NTExN0ZCQTE0RkRDNTg1RkEKLToxMEY3NDAwMDY0QTdCNTlDODNGMkU5Njk2RkUyMDMyRjE5MkRGNjczNjQKLToxMEY3NTAwMDBGQzdFQkQ0NUY0ODNBMUYyNzYxMTlFN0I2QjJFNDk3QTkKLToxMEY3NjAwMEY4RjQ1Mzk0NDc2MkM2MzE0QzNGRkQ2NDIwMzZDRkNCNEEKLToxMEY3NzAwMEQ2N0Q4M0YxNzJDQkIzMTg0NzdBREQwM0Q4Q0ZBNUNBMDMKLToxMEY3ODAwMDBCMDdEQjU4Nzk0NTkxNEE3OThGREFGNDlCQkVFN0M3QkUKLToxMEY3OTAwMDM4MjA3RTY3RTVFQTYyN0QzNEQxRkY3MzJFRjJEN0Q3MzkKLToxMEY3QTAwMDBBN0EzNkNGRTM5ODcxOEY2QzFGQjc5RjQzM0VEMzJFRjIKLToxMEY3QjAwMDRBRkE0NTVFQUIxRkVERENGMzc2MzBEOTZDRDM3MzNDNkYKLToxMEY3QzAwMDlFNjZDNkNEMjZGN0Q4QkZGNzgwOTRBQkIxRjUzQkJGOTgKLToxMEY3RDAwMDI5MjU3M0JCMkExNkFDQjZDNEQ1Q0YxNUVCMzU2NTYxQTgKLToxMEY3RTAwMEZBREU4NUFDQkMwQjUyOTU3ODNGNDQ4NUEwMEI2M0JGMTUKLToxMEY3RjAwMEZERkNENzI4OTBFODlDQzBBODQzOEE5MTYyRjVBNzNDRkQKLToxMEY4MDAwMDY1RkY1RUVFMzgxRjc2QUVGM0JDOTgyM0NFMUI1MkUwNDgKLToxMEY4MTAwMEJENDU2Q0JDOEQ3QThCODRGMjczRTM0MjY2QzNCM0YyNTAKLToxMEY4MjAwMEI5M0U5MTJGM0MxMTI2MjJGRDVEQUEwNDhEMzRFMkY3RUEKLToxMEY4MzAwMDE1ODVGNDg2RTc4RDczNUU1RDg0RkFGQzI1OUU5N0EyOUMKLToxMEY4NDAwMDhERDczN0Q3QjJCMkY2MkI4NUY0OTMxNjgwOEE4QUUwMkIKLToxMEY4NTAwMDYwNUNGOEZFNTMwNkI0QkIwNkUzNEMzQkQ5QkE5NjRFNDcKLToxMEY4NjAwMDQwRkZEQTBCQTg1NzdFQzJENjE3Q0IzRENDMUZDN0YyOUMKLToxMEY4NzAwMEUzQ0MxRkM3RTc2RUU2OEZFM0ZCOUYzMTdGMUNDQjdCOUEKLToxMEY4ODAwMDk4M0Y4RUNGOUYzMzdGMUNERjNGQzVGQzcxMkMyRjBGMUQKLToxMEY4OTAwMDU0NUZFMjhDNTM1OUUzNzY4MzcxQUEzRUM5OEM1M0ExMUQKLToxMEY4QTAwMDI4MzlFRUQ2Njk5RDA3RTI1NTA5MUVBRjNBN0QzRjMxRjIKLToxMEY4QjAwMEIzMUY4QTA3MEVFOTQ3QzQwNURGQkRGRDc3OEZFMDc5RTYKLToxMEY4QzAwMEU5QTU1MzU3NzdFMUI5NTdBRkNCOEM4QkYxM0MwODMzOUYKLToxMEY4RDAwMDhGRDlFNEJGQTVCQjZGQTZGRDYwNzdGRUExMTY1QzhGMzQKLToxMEY4RTAwMERENTU0MUJBNTNDOEVENEE2ODI4MUY5REZFOTdFOTc3NTgKLToxMEY4RjAwMDM5RUQ1RkYzRTlENDQ3N0VCNDAzMkU0MDNCQTk5QkUyODgKLToxMEY5MDAwMDNFRUI1RDUwNDZFNzYwMjVCRjgxN0NFMThDNDM5QTdDRUQKLToxMEY5MTAwMEZDQTJBRjI0RTNGOUE1ODE3QzU4MTE5RkYxNDBDQThCNkEKLToxMEY5MjAwMEYxMzJCNzI0RTYyOUYyMzU0OTg0QjEyRTM2MjAzRjVCMDcKLToxMEY5MzAwMEYyOEI4M0U1Njk4QTczMDQ4MzMxQjJCRjI0NjY5NzkxQTEKLToxMEY5NDAwMDlEQTYyNUEyMTg4N0VBMUMyNkZGRjU0MUMxQTdBQkYyQTgKLToxMEY5NTAwMERENzQ2RjQ0NjczRURGRkZBRjJEMzRBMkQ4N0U0REZFQ0QKLToxMEY5NjAwMEI0QTgzNTFGRDZDQ0Q3REQxRjlBRTZFREIzRjRCNzIyODUKLToxMEY5NzAwMDU0MzJBMjlFNTI5ODVFRDU0N0QwQUI4QTg3RTdBQkFGOTAKLToxMEY5ODAwMEQ5NzdBMTE3RjM5MEQ3MDcxN0Y3QTI3REI1M0UxQUExMzMKLToxMEY5OTAwMEYzRUE3QkYzQTc5MUZEMzE1MDNGM0E4M0YyOTU5NTIwMkUKLToxMEY5QTAwMEI3NUI5NUE4OTdFQzU2MTVFNzVGM0U1OERGQUNENzJBQjIKLToxMEY5QjAwMEU0MzM2MzNGOEFDRjA1ODIzRDU0Q0ZBM0M2MjlGRUUxREQKLToxMEY5QzAwMDg5MDBFRDU3NzlCQzNDNUYyMEM4RkM2QkFGMkQ2RUNBMzcKLToxMEY5RDAwMEM3QkREOUM3RTVEQjdBM0QxMUM3NzZFQkEzQUE4RUUyOTYKLToxMEY5RTAwMDY4N0Q1OTI1RTE3OThEQzBGMzlBM0M1M0VGMUI2NDZGMTQKLToxMEY5RjAwMEY0MDgzOTY4RjZCMzQ2RjhFQjZCOUFERDY0NzdDNTVCQkIKLToxMEZBMDAwMEIzNjNCNUI5OTQ3RkY5MDNFNEJGRjVDMTg3QkM5OENGNjAKLToxMEZBMTAwMEVFQ0VBRjFBQjFERjI3QzVGQTBEREZFRjFCMzVCNTE3RjQKLToxMEZBMjAwMDUwQkYzRDNFMzZCRTNCQjQ1OEMzN0U1REMzRTREOTFGRDQKLToxMEZBMzAwMDE0NzA3RTVFRkI5MjYxNEVBM0ZEMkUzMEY1NkQyQTZBMzYKLToxMEZBNDAwMEREMjc3NjNFRkQ2ODI3NUUzMEI0REQ1MkJENkYyRUU2QzEKLToxMEZBNTAwMEY5QUE5MEFDRjMyQjQzQ0YyOTJDREJDM0VGOUREQUE0OUEKLToxMEZBNjAwMEY2OTJCREIzRTlBNDk0RjFCQzQzOTY1RjEyQ0VGRTgwM0EKLToxMEZBNzAwMDFGNkVCMzU3QzYwODdFMUEyM0JFRUI2OEFGMTRBMzVGOTAKLToxMEZBODAwMDY5QjcyRjJFMzg2ODJGNEZFREI1OTdBN0JGRTZCNDU3NEIKLToxMEZBOTAwMDYyQUZBMEJERDIyOEU0NUQyRjkzQ0YzQzY5QTI1RjQ1NDEKLToxMEZBQTAwMDM5MTA0RkE2QUExMUVFMDZFODU5ODVGQjk0MkUxMTY3NkUKLToxMEZBQjAwMDZFMTRGQUVBMEFBMUNGNUM3RTFFOTcxREQzRUNCN0Y5NEIKLToxMEZBQzAwMDg5RTZGRDE5ODVBMkZGQTJEQUZEMzdCN0EzNzA4RDlCRTkKLToxMEZBRDAwMEY2OEY0RUZFNjVEMUJDQzdBQjQ5NEMzQUVDQTA4Njk4NzgKLToxMEZBRTAwMEZERkNFOTE1MEUzQkM3NjkwRjU1QUJEQjI5QkZCMkMwNjIKLToxMEZBRjAwMDExN0YzMEY3Mjk3MTlFNzgwRUQ3MzlGRUQ5OEU2QkY2QkIKLToxMEZCMDAwMEI3OTVFOTJEQjQ1N0NDN0IwOUU4REUyRUQ2QkU0ODREMUIKLToxMEZCMTAwMDRCMDZDMzUzNDEwQjUwQkVERjk4OTUxMERCOUU4MThFODAKLToxMEZCMjAwMEE3ODk3NTFGODJCN0U0MjU4NEI3MzlFMjVENDE5MERGNkMKLToxMEZCMzAwMDdCNTI1MEFCQTRGNDYyQ0NERkVGMjFGREJERTAyNjM2NTIKLToxMEZCNDAwMDFGQjI5NzRGRDEzRUI0NTkzRjI3QkI2NzJGRUUxMzZFQkMKLToxMEZCNTAwMEFEOTdCOEZGOTgwNEIyNDNDQzc1REUxQUU0RTc2NTFBOTYKLToxMEZCNjAwMDJFOTY1MjMyQjY2RjI5QTFGMTA5QUU5MkMxRjU2NTc4OTEKLToxMEZCNzAwMDNBQzJGMUM0RjNDQkFFQUNCMzlGRUI2OTcwRDgxQjI2OEQKLToxMEZCODAwMDNENUNFMTc4RkZCQTRGMjNGQTMwRjlFMEREMEI1RjlCNzMKLToxMEZCOTAwMDM4OTZDMUIxNTQ0QUQ2MDU5NDMzRDc5MzE2RkU3MDlENUEKLToxMEZCQTAwMDQyM0VDNEJGOEZBMkE5MTA3RkVDRjNGRTU0QTNGQzgwOTkKLToxMEZCQjAwMEVDQkUwNzgwOTFFNDY1N0U0OEQ2Q0UwMkY4Mzc3RkZGMjEKLToxMEZCQzAwMDc5MTIyQjM3RjhDQjNCQkEyRUM2RTM4OUZEM0Y0MkEzMEYKLToxMEZCRDAwMENDRTNBOUI4QjRBRTY4QjBFQ0Y3NUY0Q0U1ODgxODg3MDEKLToxMEZCRTAwMEI5MTY0OUJFREU5NjdCMEExOEJDREYxNUY5MDExQjYyMDcKLToxMEZCRjAwMEIwNTlDMTFDNEI1OURCNkMxNDBGQjZDQkMxNzZEMjA4N0YKLToxMEZDMDAwMEVERTJCMDU5Q0REMDJFNjhCNjYzRThFQTM0RUZGNTI4QkUKLToxMEZDMTAwMEMxMjdGRjJFMEI3OEFDRTNBQjg4Mzc0RDBGRDJCOTlEQ0YKLToxMEZDMjAwMEI5QUE4Njc5MEY1RjE0OEU1MUE3OUI3NzAyMzZCQkM2OUYKLToxMEZDMzAwMDBGNkRDN0MwNUU2NUMyMkY2Nzg2M0Y4NURGQURFM0JCMzIKLToxMEZDNDAwMDQ2ODBGRjZGOEQ4RkQzRjVFNzE2REZDRjFBM0U1NjdEQzYKLToxMEZDNTAwMEY1QThFMUU3OEI3MEI5RTg3RTBDM0QyODVCRkFCOTY3M0YKLToxMEZDNjAwMEVGMjcxNEJGNTZBRjA1M0E5N0EzQkE2MjlBQzFFOEJDMTIKLToxMEZDNzAwMDVDRkIzNkY5RTE2QTc2QUQ4Njc2QzAzQTU2NDYzQjYwNjMKLToxMEZDODAwMDVENEYzN0M1QTlDQjRCRUZFRDQyQTIyRjRGRkIwMUU1RUUKLToxMEZDOTAwMEMxNjREMEIyNzdCMTdFMjc2QjJBNjZFMjgwN0FGMTdFQUEKLToxMEZDQTAwMDE5RTNERTcwMzlEMEI5OTBBQ0JEN0U3RThGNDVGMUNDQzIKLToxMEZDQjAwMEVGQTM3Rjk0OURFREE1Mzg1MDIwN0JEQUY3QjlCMUNCNDcKLToxMEZDQzAwMEUzQzEyNkZDODFFQTQzMzUxODI3NTcxQkMwNDA1NjU0MzAKLToxMEZDRDAwMEE1MTQ1NDIzOTM0RDAyREE4N0YwQzc3NkRGODZFNzJCMEQKLToxMEZDRTAwMDk5RTIyM0ZENDQ3NzNCQTA1RTE1NzFGMUQxOUM2NEEwOUQKLToxMEZDRjAwMENCQUQzNUEwOUY5MDdDNUVBNUY4RkI2OEJDRjI4NjExNjkKLToxMEZEMDAwMDY1Nzk3OUNFNjY4NEE3M0NDMTNBOTAxMDdFMUVENzlBNTkKLToxMEZEMTAwMDlDOTA4RDM0RUJCRkYyM0RERTBFRkU5RDlGMDc2MEJFRDIKLToxMEZEMjAwMDQ0RDMxM0MxNDFCQzlBNzI2NUI0ODg5NzQ3MTdEQUUzOEMKLToxMEZEMzAwMEM5RDBDRkU2Q0NEQTU3RkVGQjgyMUY2MDNDNjFENDEwRkQKLToxMEZENDAwMEY5Q0RGRDZCRjNERTlDQUNGNzIwRkUwNEVENkJEQUY1MkMKLToxMEZENTAwMDg2NUZEQzRGRTE3N0RDN0IzMDJFNjgzRjg3MzdDNDZGRUUKLToxMEZENjAwMEY4NTY5Q0Y0ODAwNzBDQUY5QkVDOEI4NTY0Mzc5OEZFQUIKLToxMEZENzAwMEM4NTZBQzg4RjFGRjIyRTA3OUQ5Q0VGNkQzNzg3Qjg4REIKLToxMEZEODAwMDcyRkZDNEUzNjc2NjVFMjVGQkJFQzQxRkEzN0MxRjBGMjIKLToxMEZEOTAwMDJCMzMzQzRBNkVGMEU2QjNGNzA1MzI4RjhCQUM5MjQwQzIKLToxMEZEQTAwMEM1RjJFMDc4NjlEQUE3NUYyQjE5NUQ4NjM0RThGRkFFMEIKLToxMEZEQjAwMEQxMENDQTFGODA5NTM5MzY3QkQ5Q0M0MzVENzE2M0YxNzQKLToxMEZEQzAwMEU4MUNGNkNDMUEzQ0ZGQTMyMTNEQUVDODJCMjVGQjM5MUQKLToxMEZERDAwMDlDREJGN0Y3Mjg1RjhGQUY1RjdGQTkxN0U1MjlFNjJGMzgKLToxMEZERTAwMENDMDRGOEFCQkZBMzIzQzlFNEFERTdFMzMxQTA1QkVDREYKLToxMEZERjAwMDMyOEZEQTQyNzEzMENGQzc2MzZERUZEMzZERjZGMzgyODUKLToxMEZFMDAwMEIxQTA1QzhCRTNFNDYxRjIzRUM2ODM0MTZCQzc3NkQ1NUIKLToxMEZFMTAwMDYwM0YxN0U4RjkzOERGNjZBNzBGRjY1RjY4N0I5RjY2REIKLToxMEZFMjAwMEY2OENGNTNFOEFFMUZCMEY4MDVFNjZFRDdGRkMzMEZEQ0YKLToxMEZFMzAwMDRGNzRGNEFGNjVFQzdGQjBERjVDNUJCRjFEMkE4RjhGMjIKLToxMEZFNDAwMDI2MjM3RTVBNzdBNzNEMzAzOTUwNTMxMEM4MUIyMTdFOTgKLToxMEZFNTAwMDFGRTBGMUM3QjVEMTE2OEFERkQ3MDA2Mzc4NDYyNzk3MzAKLToxMEZFNjAwMDlDM0NBMkYwRjM2QjQwNzYxQjE0REFFM0Y3MzU4MjdFRkMKLToxMEZFNzAwMDY1NDYxMTQ4QkY5N0E4RjY3QkMwNjY4M0YzNUUzMEJCMkEKLToxMEZFODAwMDNERDQ4QjhDODI3RTY1QThBQTk3RTJGODlGMDQ3NUY0MTYKLToxMEZFOTAwMEJGODZCMzk3N0JEQjgwRTJDN0IzMDM3REI3RTAzRUY1NTcKLToxMEZFQTAwMEE1MUIxRTcwNzVDQzEwRjlBRjA1Q0M4RUQ4RDA3MzI5NjgKLToxMEZFQjAwMDlFRjNFQjE1RTdGMzNBMjIzMkUxMjU1RTMzOUFDRURCNkYKLToxMEZFQzAwMDk4RkRDNEREMzAwMUU1NjE1Q0U2RjkwOUY0ODc4RERGNUEKLToxMEZFRDAwMDlCNTdGMEQwRkEwQ0Y4NzM5RUU3NkM4ODQ5RjE1MjBCRUYKLToxMEZFRTAwMERERjRDQTBDQUZENkYxRTY4Q0Q5QUU1OEU2MTFGN0MwRjYKLToxMEZFRjAwMDU0MUE0RkQ4QjkwM0UzOERGQTdDRTNCRDI0RTI0RUU2RjEKLToxMEZGMDAwMDc4MEQ3M0VERjM2QjcwNkIzNEJGMDZDMUJGRTY3ODJGQ0QKLToxMEZGMTAwMEUxRkMzMkUwRjdCNEUzQzk5QzZFMDZDNkZCOTI3RDdFM0QKLToxMEZGMjAwMDBEMUU4REU2RDcyMEVFRjUxRDE4NkZENEU3MUI2RkFEQzMKLToxMEZGMzAwMEFCMjU4MTc2REI2Njg5RjNGRkREODE3RkVENDBCRkVEODgKLToxMEZGNDAwMEZERkExNTUxRDIwN0MyMkVCRTAyMUJCMDdBNTdBODdDMEIKLToxMEZGNTAwMEJDRjk4NURFRDQyQUNCNzg1Qjk5MUM4ODg5M0NGNzk4NUMKLToxMEZGNjAwMDA3RjMzNzM0MkFBN0RBQTJGNDdDODhEOUQ5MzFDQURGNUIKLToxMEZGNzAwMDI4QTNFRjhGQjQxOTU0REVEMTM2ODM5RTY2M0Y2NTMzRDQKLToxMEZGODAwMEY4M0QzMzkzNjY0OTE5RURFRDVGMDZCOERGQjgzOTVGODgKLToxMEZGOTAwMEJCRjY2QkE4OTdBQUZERkNGQ0UzOEM4QjIwNjZCMTdGQjcKLToxMEZGQTAwMDk5NDFCQ0NGODdGQjJGNTc0MzA1RUFCNjg5NUIzOERDMDQKLToxMEZGQjAwMDkxREE1MTI5NUMzRjdGQzVGRURFMzY1NkY2Qjg1QzNBRDEKLToxMEZGQzAwMEVBNTNDNjBCRjE0QzdFRUFERTAwRjdDMzNENkUyRUVGMUUKLToxMEZGRDAwMDYxMjZCRkI3NzBCRUQwMkJBMEQ0NEIyRUM0QzcxNUQ5OTUKLToxMEZGRTAwMEI0REZCRkEwMzExNkQyMThERTFBMjVFOTk1NTJBMUE3QjkKLToxMEZGRjAwMEYwRkNDQTU1NjJBOTlDNzY3RTA0MzUwNkVCMzcxMjUzOTUKLTowMjAwMDAwMjEwMDBFQwotOjEwMDAwMDAwNTI3ODFGRDE1NTg1MDc5QjUwMkZDNzQzNTc5MjdGMTBCOQotOjEwMDAxMDAwNjcwRDczNTgzRjU3MDkzRDU5RkQ4NjA3MzBERjAxMkVBNAotOjEwMDAyMDAwNzUxMzFDOEQ4RDc2N0I3RUIzMkZBREExN0RCMkI5MjI2OQotOjEwMDAzMDAwMDJCODNFMEJFQUVEREYzRDZFQ0U4NzcxQzczRDA1RjM5QQotOjEwMDA0MDAwNEY3MzZGMDFERDlEOTUyMThGRDQxOTlGN0MzMjYwOEY5NgotOjEwMDA1MDAwNDM5RTgwRjI3QjZBRjE2MzYxNjRDNDdCMEI1NjA0QzBFQgotOjEwMDA2MDAwQkNENzMyNjNGQ0M4ODRFNzREOTQ2MzUzOTFERUY2NTBFRAotOjEwMDA3MDAwM0NDQzg0QUY0MDRENDkyOEFGQzczNEVGQjFFNTM1MzFCMgotOjEwMDA4MDAwQzQ5MjMxNkNDNkUxNDFEOTU1ODE3RTg4NzMzRTVCQTUyRgotOjEwMDA5MDAwNURGOTIzREQ1MzUyMDBFQTVCN0Q2NUUyMUU0RjY5RTg5RQotOjEwMDBBMDAwQkM3RjE3MTBGOUI3MDNGMzlFRjU2MjI5NjRFMjFGMUVBNwotOjEwMDBCMDAwNzc5RDdGNTAzMTU2RTk4Mzc4MzFGMUYwM0ZDRDQ3OURGMAotOjEwMDBDMDAwMDE4RUNGMTdFNzdDNTBDNUZEQjc0MkRCN0Q5OUU2M0QzOQotOjEwMDBEMDAwQzA1NzBFOTQ1NTUwMkRGNDdDQzUxMjM3RDkzMzEwRUIxMAotOjEwMDBFMDAwMkY0N0JBM0I3NDcxODBERkRCNjZEQTJGRTlENzY1QjQzRQotOjEwMDBGMDAwNUZCRTc4RkZCMTIyNUJERUE2RTg3N0I4RjU3MkU2MTE0NQotOjEwMDEwMDAwNUFDRTdEMEVFNkI5NjM3RTg5QzRGN0IxMEEzMENGMkQ5MQotOjEwMDExMDAwQ0NERjFGQjFEQjk5QjYzQ0I3MzU3QjdGMjg2MTlDRUYwNAotOjEwMDEyMDAwMDFDQ0M3QjNFQzVCOEY2MUZFM0NDQUNEQzI5QkVDNzlCRQotOjEwMDEzMDAwNzU0RUI4Q0NCQ0FBODE3M0IzQjMxQUI1NUQzQUREOTNFMgotOjEwMDE0MDAwRDg4RDE3Q0Y3NDZENDlDNkMxOTIxRjY5OUUxMzM0RkRCNwotOjEwMDE1MDAwNjlFN0Y5NDAyNUM4RUZDQjhCOEFGMzE2Q0U3OEYwNkRBRQotOjEwMDE2MDAwNzI1MjJCOTYzMDFGMzVFNUFENjZDRkYyOUM4NDgxNDdFNQotOjEwMDE3MDAwRDM2RjUzOTI3NUY4NUUxOTNEQjMxOUYxQjBCMEY1NEVENwotOjEwMDE4MDAwMDNFMzc3NUE2RUU2QjhGNDQyQTFCRjJGMEE3MkJBMzk3OAotOjEwMDE5MDAwRUM0QTE3NjExQzNCOTE1MzczNTEzMDJGNDNGREQ2NkZDRQotOjEwMDFBMDAwNTE3RkIzODdCOTdGQkU1MUY0RjM4MEQwRTdDRUVGOTc4QwotOjEwMDFCMDAwMDc3OTVDRTU5QUE1MzJERDY3RTE4MzUwNEEyQUM2N0Q1RQotOjEwMDFDMDAwRTNFRTE5NzQyRTZGRDk1NjIzRDNCOUI3ODNFMTQ0QkQzQQotOjEwMDFEMDAwMTUxRTVGMjkzRjZGMEREMDczMjFFMjZCREQ1RjFFRUNCMgotOjEwMDFFMDAwNzk5NEExMzJFNzJGNDE5MkEzMzkwQUVGRDdEMkJFMzFEOQotOjEwMDFGMDAwNTNGQjY3M0VGOTJEOUQ1MzdFMDZDRkE5Q0NDNEZFQjZCNgotOjEwMDIwMDAwQ0VDNUY4RjdBNjgxMzIyNDI1MkM2NzhCNzJGMkI2QjlEOQotOjEwMDIxMDAwRThFRjBEOTYyQkU2NTY2MzE5Njk5MDExRDlBQkMxREE1OAotOjEwMDIyMDAwNEVBNDk3NEQxMjA4NjJCQzk0RDc3N0YxRkFCQkM1Rjc3QwotOjEwMDIzMDAwRDk5N0JERjM3RDNDOTcwQkQzRENFNDA3NkUxMkY2ODhBQgotOjEwMDI0MDAwMDlERkVCNDE5RTM3RjNGQTY5RjA3OUFCRjgxRTQ0N0M4NQotOjEwMDI1MDAwNDZDRTBBOUZCNzY2QzJDN0VCMzlCMURCODI1M0IxOUY2NgotOjEwMDI2MDAwMUVCQTE3RDJGNzE3RUY0QUNDMjNGRUE3MzYzMEJFQzYwOAotOjEwMDI3MDAwRTZGMDgwQjFGQjg3RjcwMEI1RkY1NjcwRUFEMEY2RjNFMQotOjEwMDI4MDAwNzI2MjZERDg2RjcwRTkxMTlBNUZBODM0ODhFRTBEQUM3OAotOjEwMDI5MDAwOUIwRUQ0NEYwNjM4RDY2NkVBQzc1Q0Q3NzQxNjk3NjNCMAotOjEwMDJBMDAwMjdEMDc2Q0VDMzc1RTVGNjlGRTJFOThERTJGRUJGNTYxNAotOjEwMDJCMDAwNzVGRjJEMUE5MzIzOURDNURENEQ5OUU4RkIzQjIxQkVBQgotOjEwMDJDMDAwNEY5RDNENENCQzdBOTdBMEM3NTdCNUY4NzcxMThFNzZGNQotOjEwMDJEMDAwRUQ1RUJBNEZENTJENzFCQjYxREQ4QzNFOTAyQ0VEN0U2RAotOjEwMDJFMDAwMTVFMkY1MTlEQ0RGQzNGQUVFMEJGOTNEQTcyMTg2Nzc5RAotOjEwMDJGMDAwNEMzMDBCNTU3MUY4RDdFOTg3MDBGM0JBNDNEMTQzOTREQQotOjEwMDMwMDAwMTcxQUFBRUEyMzdFQTdBMzBBMDU5Q0FFRDA1RkYzMEFCOAotOjEwMDMxMDAwRkI2QzU3RjBEQUI5NDgxNzM5OEE0OTc3N0ZFRTQ0M0FDRgotOjEwMDMyMDAwNTQwNkNCNDQ5N0RCNzM3OEZCOTc0MjdGRUU0QzMyOTFCNwotOjEwMDMzMDAwQkI4REQ5MkY3OEVGNDZCMjgwRTc4RDM4RTdGNzJGMjFCNAotOjEwMDM0MDAwNEUxRkY3ODc2MzhGMjNCQzQzRjBFOUU5RkJGRTNEQUMwQQotOjEwMDM1MDAwRkRBNjA5RkNCQ0NENkNCOUI3RTk3QUE0Q0JDQjgyNjQwRAotOjEwMDM2MDAwN0ZCMUY3NERENjczQzg2RjBBN0NCRDE5RTRGNkQzQTZFQQotOjEwMDM3MDAwNEZCQ0Y0RERCOTFFQzNEMUVCMEJBMkZERTdBMEQ3MTcyQwotOjEwMDM4MDAwMzJEMTA5QTNENzdGNDc3QUIzRDBFQjA3OTA5OTVFMEY5QwotOjEwMDM5MDAwMEQ0M0FGQUY2MDdCMjc1RTlDNjUwNTYyNUI3MDdGNTY0NwotOjEwMDNBMDAwRkQ3NEVFMEVFQzRGRkRGMkFDMkQ4RkIyQTdGMkU5NURCRAotOjEwMDNCMDAwNDk1QTRENDNCMjlEMkYzNUM3QTk5MDEyRkYxMUI0QzhCOQotOjEwMDNDMDAwNzdGMzNFRUUxQjgzQkNGRjIxRkQ0RTlGQjYwNUU1RDhCQgotOjEwMDNEMDAwMTlGNDdCMkMzODc1NjhCRjRGMDUzOUJDQjMyRjBCMjYzOQotOjEwMDNFMDAwMzI5RDFGREYxMjUyRTlGQjQzMjEzRUZFNzA3QzczMzBDOQotOjEwMDNGMDAwQzRGREQ5RTFGOEU2NTE0MTU3OEM2RkZFN0EyNjdDRjNCMwotOjEwMDQwMDAwODc0MUJFNzE4N0YyQ0U4NDZGQkU0RDRGNUYyOUU3MUJENwotOjEwMDQxMDAwM0E4NjNDNzMyOERGNDBGMkQ1NEU5NEFGOURDNTlDMkZBMQotOjEwMDQyMDAwNDY2RjdBQjMxM0UzMUMwMzdDOTQzQzQxREY5NUMxMzJFMQotOjEwMDQzMDAwQzk2MzkzOEZGRTczRDMwOUUyMjM2N0ZCRjAzMEY3NTI1MQotOjEwMDQ0MDAwOEQxNUYzM0UxODhFMTdFMTNDNjJFNzY5RURGQzlDNEQ3QgotOjEwMDQ1MDAwMUZFOUVERUREMEJGRDc0Mzc5QjYzQ0FGRDU5RjRDQzY3MQotOjEwMDQ2MDAwQjhEOUQwMEI3OEJFN0ZBMkMwQzMzNkY0QzFEMENGOTkyMwotOjEwMDQ3MDAwMjZFMjRDNkEyRjJDMDgwREU1RTc1MDU1QkFDQTdBOUY0MAotOjEwMDQ4MDAwQzBEMzYyRkMwRjQzRjFDOUExQTkzODVFREYyNEI0QkYxOQotOjEwMDQ5MDAwODY1QkE3NEEzMURFM0REOUIxQ0E1MDA2RkUzRjlEMUU5QwotOjEwMDRBMDAwQkEyNkM0Q0ZCQjVFMjNGQUM5Rjk4QkI3MDVFRDRGMjczNwotOjEwMDRCMDAwQkZDRjVFRjZGMzNGM0QzMjQyM0Y4REEyN0Q3REU4NzNCNAotOjEwMDRDMDAwRjM3RjdEMjgzM0ZGNUYxRUIyRjM3RjE1REVCNzk5ODE3RQotOjEwMDREMDAwRkYxQjMzQjU2N0ZDN0Y1NUU4NkZDQkVGOEI0MjE5RjhGNAotOjEwMDRFMDAwNzJFNjE5RTJGQjYxODFFRjg3QkYyMEJFNTcwQjNBQjk3NAotOjEwMDRGMDAwRTNGM0UzRkI4RTYxRjA3REU3MTlFMjdCNzUyODgzN0RGMgotOjEwMDUwMDAwQzFGMEJEMjY0NEY2Q0FFMzA0N0Y0ODBGNTIxQ0JCNkIwMgotOjEwMDUxMDAwM0FFQzk2NEEzMkMyQjFDMURBOEY1N0U3RkQzMEJDN0Y2MAotOjEwMDUyMDAwMjAzMUJBOUZGRDY5OTc5MUU5OUUxOUQ2RUU1RTJCRkNBQQotOjEwMDUzMDAwNjZCQkNBOTA2NjI2NkZERjhDRkVGOTAzNUYwRTUyQkM2NQotOjEwMDU0MDAwOUZFOUM3RkJGRkM2NzRGMDUwMjYzQTk4MkQ3MzM5RjQyMwotOjEwMDU1MDAwNDFGMEIxNEU4Q0IzN0Q4MUZFN0Y5MkE5RkY2NjIxRDcxOQotOjEwMDU2MDAwNEY2NzE3RUMxNTc0QzFFNkZENDQ2OEVBNTBGOUI3NURCMgotOjEwMDU3MDAwRkMyRUNBRkRFMUM0NTMyMUMyNTdERjNDOTQ1N0RCRUU4OQotOjEwMDU4MDAwQzg5MTMwMUU1NTE4NEI0QkU4MjczQzJFRjREODc5MjFFMgotOjEwMDU5MDAwOUQ5RjY3MTBFREI2QTk2OTA5RjM1OUI2QjU2ODEyOUUxQgotOjEwMDVBMDAwMzdCMkY0Rjc0QjFDNkZCOEZFOUM3MDMwRjg5RUMzRjE2NQotOjEwMDVCMDAwM0YwQ0M1OUVDNzY3QTU5OERGRDlEQTQ5MEREOUIxOTcxOQotOjEwMDVDMDAwNDNBNDdGRTI4NzQ4NkU5RjYzOTdEQkU2M0NFNDc4Mzc3RAotOjEwMDVEMDAwRTVCREY4NjY2NEZFREQ5NkM3ODNBQUQwNjNGMURGNUJGNAotOjEwMDVFMDAwRTVGRjJCMDM3NEM1RkIzQjVCRkRDM0UwN0IyQkM0RjUzMAotOjEwMDVGMDAwQ0FEMTRDRjAzOUYxNzIzQTM4RjM0MjAzNzAxRUM3N0UwQgotOjEwMDYwMDAwOUQ3QUNBRDk5RkU5Qjc5QUVCRTQ0NjlENjQ4REVCMENCRAotOjEwMDYxMDAwRThCREM0NUY4OTdGM0I2NDNBODczNDVGQzg5M0Y5MzM5MAotOjEwMDYyMDAwQjI4NUREQUVGOUIxRkYwNzQ0OUNGQzgxOUJFRUFEQzZGRgotOjEwMDYzMDAwRkRFRUVENzc2OTE1ODg4MjgyNjZBRUY3RjQ5QkM2NTJBRgotOjEwMDY0MDAwRkNEMzE3OTY2QzcxNENGMzM5RDBERUREMzMwOUVGMTkwQQotOjEwMDY1MDAwNjdFMzg2QzJBQ0RFMjVCMzIwOEQ3RTYzMTZEQTBEMTQwNwotOjEwMDY2MDAwOEZEMEU4NzdCQjcyM0NERDUxOEM5RkFFOTNCQTlCMTY1RQotOjEwMDY3MDAwQTM1RTlEMTdFNEU3NEFBMjhEQTdCOUFGNkRCNThENkU1NQotOjEwMDY4MDAwMjE1QTc1OUFGQUFCQThCRTE2RThBNkZCMkZDRUI4QkVDMwotOjEwMDY5MDAwQTdCQjI5NTM3RUM5OTRCMDZDRTI3NTUyNzgyNEJDNDYzRQotOjEwMDZBMDAwMjMxNEQ3MzJGMTNCNzQxQ0JFN0VENUYxMTYwOUYxMUQxRgotOjEwMDZCMDAwQUE5MjM0M0M3QTE1NjI3NDgyRjY5MjVDREE0QkY5NEM1OQotOjEwMDZDMDAwOTc1NzcxN0EwMUU2OTc4QzdDN0Y0NkE3NjlBRkNEMEE3MAotOjEwMDZEMDAwRTc3RDcxQjhDQzdBQzM4RjI3RUEzOUNFMkJFMEJFMTdGRAotOjEwMDZFMDAwQzU2NzgzNUM4RTUxNDU1NjNFN0UzMDM3NjNEQ0RGN0NDOAotOjEwMDZGMDAwQUU2REQzMEE1NTk3QjVGRjE0RTE3OUVENDBGRUI0MTEwNAotOjEwMDcwMDAwNDU3QkFCMTUzODNENDJENDRCNzYxOEREQ0I2RTU5Q0ZDNwotOjEwMDcxMDAwODQ1ODlGRUY2NkM1RkYzRTRDRjAxOTc0MEYyMTY4REFDQwotOjEwMDcyMDAwMTlDRDg3QjU1QjRDRUQ1NEQ2MkU3NEU2RUQ4NjdGOUFENQotOjEwMDczMDAwQkY1NzY3RTg3MUNCQkQ2NzI2QkY4RTRFMjQwMUVGOTk4NgotOjEwMDc0MDAwRjE5NzgzMjZCMUY1OEY4NENDN0Q0MjRFMDdERjBFOUE1OAotOjEwMDc1MDAwRTUyNDZEOTJDNzRCQkI3OTVFQkU2RUQyMDk5NzJCNUFDQQotOjEwMDc2MDAwQTAyNzI2NTcwMDZDQkVCQkVFNEJEMTQ5QUNCRkQyNDQ4QwotOjEwMDc3MDAwMTRBRkQwNjdFNTAzMkFGOUUxQkMwQ0M5QkEwM0ZCMEIzRgotOjEwMDc4MDAwOTE3RkI0NzMyNTgzRTlBOUY2REEwMzA3MkYwNjdFNTQxNwotOjEwMDc5MDAwOEE3RTRGQURGNjAwQzkzQkIzOEMxNzUyOTRCMUIyN0YzRAotOjEwMDdBMDAwQTAxQ0YzNDY1OUI5NjRBMDlDQzRGMjM2QTEyNzM3REZEOAotOjEwMDdCMDAwNUQ3QkEwM0Q0ODcyNkNBMzk1M0ZBQTA1MURGRUFERTk4NwotOjEwMDdDMDAwNkZCQkRFQUVFMTM5ODM2NDU0MjVCQjZBOUQ4MzFFRjZBMAotOjEwMDdEMDAwODRGOTdEMkM5M0I1QzQzNjVDRDdGOTc3RjVBQjc4NzQ4MgotOjEwMDdFMDAwQzU1QjFDMDkyMTNGOEM4QjdFOTBDNEZCRjJDNkNEMTJFOQotOjEwMDdGMDAwNjlBQUE1RkM5RTg2RUREMTk1QzQ5N0RCNzE1RDgwQTdBMwotOjEwMDgwMDAwMjU2MDdDNzI3MDdENTI5OUQ3QTcyQzQ1RUJFM0Q3RjkxMAotOjEwMDgxMDAwNzcxOUNCRTQ2RkYzRjg1QkEwOENGM0IzRTZFMUYxQkQ5RAotOjEwMDgyMDAwQzcwNEJEQTZDMzNDN0U5NDE2RjIzNTJCREE0RUZFOTQ2NwotOjEwMDgzMDAwQjc0RUE2Rjg3MTU2OUQ2Q0QzMUJGNDhCNzdENDRFQjU4QQotOjEwMDg0MDAwRERGQkZGN0E0RUUyQTlCMDQ1MkZCMDFBRjEzMjM2MEYyOAotOjEwMDg1MDAwRkZBNDQ4MEVFRUJGNTQ5N0E5MkJEMURGRkU5RUIwRkYzOAotOjEwMDg2MDAwRDgzQTNENDBFQjU0MTFGMTI3NDg2RUM3OUZCNUNBOEY2NwotOjEwMDg3MDAwODE3NTEzNzgzOUREQkFGREI2MkQ2MUQ0QkE4NjVGQjdCQwotOjEwMDg4MDAwQUJBRjU1MzJERTkzRjZEQjMwRjc1RjhGMzVGREU3RkQxQQotOjEwMDg5MDAwMzg5REE1REU3RUJBQkZCQkFCNzQxNUM1NjFDREI4QUJDNAotOjEwMDhBMDAwNjc3Nzc1N0E4QzNFOTgwRkI4M0ExMDlFODU0RkU3QjhGNwotOjEwMDhCMDAwQkYzREY5NUQ4RENFODk3Q0UyQzlCODlGNzQ1MkUwRjlFNQotOjEwMDhDMDAwNTA1QjEzQjU2MzBCNENCRkI3NzIxRDRFODVFN0IxRDlCMgotOjEwMDhEMDAwQ0VGMTk5RTcxMUJFMEE5QzE4MUFFMzhCMkU0NzM5QjQ2MgotOjEwMDhFMDAwQjg0OUExN0IxQkFFMDM3QjNFQzU1N0NEQkNBRjU2MzM4OQotOjEwMDhGMDAwM0Y4RUU3N0QyNTIwN0IyRUIyRTFBMkE0RTNGNzIyQzA0NAotOjEwMDkwMDAwOTg4QkU3RTg4N0ZDOEU4NEQ4REZGQUJBMjM2RkUyOUFFNwotOjEwMDkxMDAwQTY0NTQ2QURBOEY3M0VGRDNGNDVGMzY5RDRCOUZDNkQ0OQotOjEwMDkyMDAwMzRGOEZEM0Q1N0M1QUYzNTZBMkRGQkQxQUY3RUE2NjRDNwotOjEwMDkzMDAwQ0M5QjlDOTc2NUUyMjM2RUQ0NEUxODhBOEZDNTcxQzlGMwotOjEwMDk0MDAwQURFOUE3QzdDQjk5RTI2MTkxNUEzMTM3NEYxRjhBMDdBQQotOjEwMDk1MDAwRTdGQzE5QzYzNjIxOUVCRkNFRjA4Qzc2RTc3MEY4NjBCMgotOjEwMDk2MDAwRjU2ODNENUVCRDU2QTFERjhGOTlBQkQ0QkI3MDFGRTQyNwotOjEwMDk3MDAwRkEwNjg5RjY5ODE4N0VDMzIyMkZBRUZFNTIwQkJDNEVBMwotOjEwMDk4MDAwM0MzQUYxNzVGREQzNDBFNzA2QUVGRjRFODhFMjZEMkY4RAotOjEwMDk5MDAwOUJGODQ5NUY0MkZCMTdFNkZFODk2NTlFNDc3OEZFOTYwNQotOjEwMDlBMDAwNDZGMzVDMzBBM0UyMTc3ODZGNDJBMjVEQTJGQjFBRDkyRQotOjEwMDlCMDAwN0M2REZCODA4QjIxOUU4NUU3MTZEOEJDOEYwQ0IzRUUzNwotOjEwMDlDMDAwQjZGRDQwMjc3QzRFRjg3RDQyQUYzOEY3QzU0MDREOTdDNQotOjEwMDlEMDAwQTMxRTlDOUQyNUY2MDVBNzgwMjFGNkM3QjIyODFEQjc0QQotOjEwMDlFMDAwMzRCM0JDNzVERTM3NjdEMkQ5NzVBRDBEMDNFMzYyRkY1MgotOjEwMDlGMDAwMTIyNDA2Q0ExQTlFRDc3QTRFRDk3NDE1RkJGQjhBMjg5MAotOjEwMEEwMDAwRkYxREMzRjhCNUI5MURGODZEM0U5OEJGMkYxNEEzRkRBNwotOjEwMEExMDAwQTZFQjA0RkUxQTk4Qzc4N0JGN0Q3NjA5MTM0RUI4QUZDMAotOjEwMEEyMDAwMzczRkU2RDM4Mzk2NzkxRUVGOTZFQUM0MzlBQUFDQzY1RgotOjEwMEEzMDAwQzlEODJFQjk1Nzk5MzIxNERFMTU1MUZFN0I4NThDMEUxQwotOjEwMEE0MDAwM0ZCMEQyQTE2RjAyQkY0N0Q2ODkxNzEzNUY4QjA2RjE2MwotOjEwMEE1MDAwMzJFNTZDRjBGMjJBMkFDRTNDREFBRjIxM0JCNzVGRjJFNgotOjEwMEE2MDAwRDI3OTc4NzMxRjg3RkQzNUU5NjZBMkYzRDZBQzYyNjE0RgotOjEwMEE3MDAwMEZGMDc5OUJGNzc3MDFCNDkwN0RCRjUwOUNDNzNBRUM5QgotOjEwMEE4MDAwODJBNkM3ODI3QzVGQTdEMjIyQjc2RUNCQTlCRTM1Q0IyOAotOjEwMEE5MDAwRTI1NzlCRkIzQUU2N0Q1MTI2M0Q3RkQ1MUI0QzJCOUNCNAotOjEwMEFBMDAwMEU2REY3NDEwREU2MzEyNTI4OEY0OUM5QkE0OTQ3N0NCQgotOjEwMEFCMDAwNzRFMUE3MEJDOUVFNTk4NUZEMkIwMUJFNUZFNTdCRUUwNgotOjEwMEFDMDAwQTc1RDU3RTk4M0VCQjdGRTZCNEY3NDRGNjU2NUZGRDdBMgotOjEwMEFEMDAwN0Y5M0E0NEVGNTFDQzI1QjQ4QUM1QkI1NTgzNzEzM0UwMAotOjEwMEFFMDAwN0YzOTdGNkY1OTNGMUUzRjJCMTNGMTMzQjE4RUMzRTkxRQotOjEwMEFGMDAwMDk3MzFEQ0Q3NTQzM0IwQUU5RDc1N0E2N0U5QUU5Nzc1RQotOjEwMEIwMDAwRjc2MDdGNTUzRkYyNjkyMkFBNTIwRTVENDI3QUIzODNBNQotOjEwMEIxMDAwRUVEOTAyN0QxQkVFQkY1RkQ3RUFCMkZEREU1MjAyQ0ZGNwotOjEwMEIyMDAwRTk2M0ZENzUzRUUxOTcxOEQ0N0U3MTNFNkYwRjY1REM3OQotOjEwMEIzMDAwNkUxQ0EwRkIyNDZCNkZDOTAzMDI2Rjc4MTRBRTVCMUZBMQotOjEwMEI0MDAwNkI4Qjc5NjJBQ0JGNTFBOEVGQTFDQjMyNEVDOUQwNzE4QgotOjEwMEI1MDAwODdFRENGRDE0RTE5RDgzNzMxMENDMzIyQUYxRkNCRTI2RQotOjEwMEI2MDAwN0FGMjc4QjRBQTQ3Q0UxMDdGMzE5RjhCQkRCOTg1QUE5RgotOjEwMEI3MDAwMjUzRkVDNDhCRUI3MjlFM0VGMDY4OUZFMDZFRThEMUI0NAotOjEwMEI4MDAwQjAxM0RGMzlCMDdGRDZBMDlEQjhDMUY1QzcwMzA3OEI3RQotOjEwMEI5MDAwMkM3NjIyRkNGMTAwRjlFRDAzRTVCM0IzMTM1RkNGRkEzNQotOjEwMEJBMDAwMjNEOTg5MUZGRERFNDNGQUVBNzg5RDlGRDYyMUI3NzVDOAotOjEwMEJCMDAwMEVGQzA3OUVCNzU1RjFCN0ZDQzhCRUE3N0I2RkJDQUQ1NgotOjEwMEJDMDAwNjM2ODNFOTJDQTMwODdCRjA3QTYxQjEyRTJGQjQ4OTZCNQotOjEwMEJEMDAwQ0VGNzYzNzU0ODg3MTg3MEI5QUEyMTIxQkVFRTE1RkVCRAotOjEwMEJFMDAwMjhBM0IzNDlENkRGRkYzRDIyRTY2QjhFRTNGMTQyMTIyNAotOjEwMEJGMDAwQ0YxOTlCRkQzMjNBNTg0NTc5QTVGNTQwN0FDNERDODc3OAotOjEwMEMwMDAwMzVGOUQ5RUNFNzU4OTY2NENCQUIzRTAzRkUzRDk2MzVGQgotOjEwMEMxMDAwNzUyOEZGQkUyMEI3RkNFMTFGRDE3RTdENUVBMTdDRDA5MAotOjEwMEMyMDAwQUY0NDZGQTdGNzU3Qjc1RTRGQ0Y2QjVCNkZBNEU3QzdCMwotOjEwMEMzMDAwNDIzRkRGMkEyNTNFNDYzRUVENkRGQUNENTc2RTYzRjQwNgotOjEwMEM0MDAwQkE3Q0I3ODdDRTk1MkRCREY1NEY3NzIzN0Y3QTVCRDlEOAotOjEwMEM1MDAwQkE2M0JCQUY1RkZGOURBOUVDQkI3QjgyNENGNjZCNTdDMQotOjEwMEM2MDAwMTFDRkU3NzBBRjkyNzhCQzVGNzdEN0VENjZDRkU2NzBCMwotOjEwMEM3MDAwRjU0NENEMDJENzdGMDFDMzlCNTgzMTAwODAwMDAwMDBBRQotOjEwMEM4MDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJFNTdEMEI3ODE0RDVEOQotOjEwMEM5MDAwRjVGODlEOUREOTQ3OTJERENERUVFNkI1OTAwNzEzQzJEQwotOjEwMENBMDAwMjMwQUM0NEQyMDIxMjhENjBEMDExQTJCODFBMEE4NTE1QQotOjEwMENCMDAwODI2QzA4ODQwMDgxMDRCNEIyNTUyQzFCMDIxODMwRDYxMwotOjEwMENDMDAwNjhCNTYyQjU3QzhCODVENkI2REEwNkE1MkQ2RDIzRERCOQotOjEwMENEMDAwMDg1QUE4MTQ2M0I1MEE1NjIwMjBCNTI4NkEyMjhGQjI5NAotOjEwMENFMDAwQjZCNkZFRUYzOUY3NEU3NjY2QjIxQjgyRURFRkZCRjczNAotOjEwMENGMDAwRjdGREUyRDcxRUVFREMzQkY3NzFERUY3REM3MzY3RUI0NgotOjEwMEQwMDAwRUM1MzQ3MzkwQTA5MjE2RUJCODExNDExQjJDQTQyRkY2NAotOjEwMEQxMDAwMkQxMzcyRjFFOEZERUUwNUM5ODRDNDVCQUQxRUZBODRBMwotOjEwMEQyMDAwOTg5QUIyMUYzMkQwMzIzOTIwOTIxRDE0ODgwOTY0N0VGRAotOjEwMEQzMDAwQzU1ODBBQ0QwQ0JBMUQxMjIxODUwMDBEMDgxRDAwNTM5RgotOjEwMEQ0MDAwMDhCMTg0MDU0MjkyQTA5REM3RDM2OEE1NjUyOTQwMUNCRgotOjEwMEQ1MDAwMDBDMzEyM0UzNzA5NDI0NTNCN0RGRjBCRjhCQjJFMDIxNAotOjEwMEQ2MDAwOTVGRTJDNjE5MTkwRjEzMDlFRkU3RDEzM0VERjI0OUIxOQotOjEwMEQ3MDAwQ0FFMDdEMzE4OUNENDM3OTNGOUJCRjlGQ0RFNzYzMDlCMQotOjEwMEQ4MDAwMjdCMDc5MjRFOUZCQjFCM0U3MjI2OTZDQjdGNjlGQzdCNgotOjEwMEQ5MDAwN0Q4OUE1MjMxRDc0MUQ3NTc2RUYyODgwODQ3NDFCMkIxNwotOjEwMERBMDAwNkM4NERDNjFGREZENjEyMThGNDI4QjM1MjQ1MjQ4RkM0RgotOjEwMERCMDAwQzY4RkJBNzMwOUZFN0QzMTFDRkVCRkNBRjFGRTE4NDIxMAotOjEwMERDMDAwMDREMjJEN0M0MTg3OUVGOUI5MTAxQTQ2RjExNzU3MjI5QgotOjEwMEREMDAwMDZENzY1NTMyODM4Q0EyNzRDQTBDRDRBOEMxRUMwNjc1OQotOjEwMERFMDAwRDc4ODY0REI3MEQ1RjhDNTBFMDFGMUY3QkFFNEIwQzE1RAotOjEwMERGMDAwM0MyQkE2ODkxNUMxQjFEODdEQ0ExQ0U4Njc1QTRERDFENAotOjEwMEUwMDAwNjYzNjlDODVBNDEyMzI5RkZEOUJCQzJFNkY2RjE5NEVENwotOjEwMEUxMDAwRUIwMzAxQTM2NzI0QTVFMzdDNEIyMDA4RjM5QjRGQTRCRAotOjEwMEUyMDAwNDBCNzA1OUIwODVGMDgwODY1QTk4OEJGNDdFNzNCN0Y3NwotOjEwMEUzMDAwQUFFODhEQjM2QkRBOTEyRkU4M0NDOTdBQjI2RjA0RUQ2MgotOjEwMEU0MDAwRkYwRTgxMEYxMEEwNjVGQURFMzE1RTNDM0VGNURDQ0Q3MQotOjEwMEU1MDAwQjA4QzZFRTIzMDBEQTdFREVGRThBRTlFNDFGMkIwQ0E2NQotOjEwMEU2MDAwMEFGQ0I0ODhCNzlCRUYzNzlFRUFFQjk3RkVBRjNBQTAzNwotOjEwMEU3MDAwMkQyRjI4Q0U3Rjg1OTI4MUUyMjU1ODM2MDFGOEVDMEE4NQotOjEwMEU4MDAwMDNGMjU5NEQ4QkI2RERBMjc3QUZGRjgwRDhBMTVGRTlBMQotOjEwMEU5MDAwNTQxRkJFNjE5RUU0NjFDNjZGRDM5QTFEMzJDNUQzMzgxQwotOjEwMEVBMDAwODc4Qzc0OUYzOUY1QkRBOTg0OTY2NzExNzIzM0Y0M0IyMgotOjEwMEVCMDAwNkJBQUU4MDhEMUQ2QUQ3RTAzRjFEMjg5MUZGMjhBNDEzMAotOjEwMEVDMDAwODFBRUVENTA2RUY3ODFFQjAwNkZDNTQ2NzkwN0FDMzUwQQotOjEwMEVEMDAwOTczQzc4NTMzMkQ0OEY3NzAwOUUyQkUwRDkxMDZDNEYxQgotOjEwMEVFMDAwMDhCNDczNUI4MjIzRTlCMzJFRUY3QkQ2MUExNURGMUQ5RQotOjEwMEVGMDAwMkE3RUVGMEExRkE1RDc1NjAzQTk4QkM2NEY4NDM0RTE3QgotOjEwMEYwMDAwQkNGNkREMTM4RkZEMUM3RjU0MDg5QUU5RkNBNzg5OUY2RQotOjEwMEYxMDAwRkY2MTIyOUQ0RkNEN0Q0NjhGNTlDNjY1MTk4MEFFMzM0NgotOjEwMEYyMDAwM0M0QzFFMDlGMTVBQTc1MTdDREU0MTU4RjkzRDUyNTEwMwotOjEwMEYzMDAwMTRBMkUzRDdFNDFGMkQzMUQzN0U2QTM2MDgyOEE3MEEwRQotOjEwMEY0MDAwRkUyOUJFNEZBQUYxRTY2QkFDNDgwQ0M5ODg3N0NENzM3OQotOjEwMEY1MDAwREE5OTA5Rjg5OUUyRjk2NDBDM0M5RjU0RTNEOUZGRUU2MQotOjEwMEY2MDAwOTE3MUZCNTRFRDM2M0I2Q0M5QzBFN0E0ODAxNDdDNDEwMQotOjEwMEY3MDAwNTE3MzgxNEM0RTFDNEZGQUFGNUI4MTE3RDcxRTFFQjdDMQotOjEwMEY4MDAwNkYyNDIxOEYxMkVGQzNBODc3NDhCNzU0MzE4RUQyNDkwRQotOjEwMEY5MDAwMjJERTY4N0E2MEJBOURDOUMxMzRGMTIzQTRDRkQ5NjIzOAotOjEwMEZBMDAwNTEwNjdDMURGMjdGNjhBNTFDNDYwRTdEMkU5NjAxOUU4MwotOjEwMEZCMDAwODk5NzM2OUExNDc5RUY4NzBFMTNFMjc5QUI4OTc4MDExNQotOjEwMEZDMDAwQ0Y1Qjg3NUE4MjREQjRBQkNFN0JBRTRDRUI0NkZBQzhCMgotOjEwMEZEMDAwOEY0RjA2M0FGRURFNDg3NkM4QjFFNzZCRjM4QjY0MDRBOAotOjEwMEZFMDAwNjVDQzcyQkY4MDUwQTFERjMwN0YxQzkxQzY0N0RBMERGRgotOjEwMEZGMDAwMjNEMUU3QkYxQkU0OThCNjRGNTk0MzBDMzIxREQ3MTlENAotOjEwMTAwMDAwMjBERTYwMTRCRTUwREEyREI3RjQ0RTk3MDhCNjBGMzlDMwotOjEwMTAxMDAwRTlGQzU2Qzg4NkEwNDBENzlCMkZDODhDQkY4RDhEREVCQgotOjEwMTAyMDAwNzREQTU0RUE5ODFENDgyNzMwMEYxMUU3MjFEM0Y5NDlBMwotOjEwMTAzMDAwNzQ3RUQ5RkUwNDJDMEZGNzI3MjFDQ0YxM0IxMThFRjBFMgotOjEwMTA0MDAwQTc2M0ZENDg3RjBFQzI1MUZFNkM3QzNFREEzRjA2Q0JBMwotOjEwMTA1MDAwQjlGRUYxMDhBRkYwRTcyM0JDRDI3RjBEQzIzMUZFNTJEQQotOjEwMTA2MDAwNkMzN0Q2NUY4MjcwOUNGRjA2N0M5RUU3QkYwOUUxNTUxNgotOjEwMTA3MDAwRkVEOTA4M0RGRUI5NTg5RkVGQUY0MTU4RTBBRkM2RTczMwotOjEwMTA4MDAwRTNGRENCQjAzQ0MxN0YyNzk2MEJGRDJCMTExNkY5RUY4QQotOjEwMTA5MDAwNDUzOEQxREY4Q0IwRDhERjg0RUQyNkY5MUZDMEYyRDVGQQotOjEwMTBBMDAwRkU2RjIzQkNDNkZGMzBDMkM5RkUyN0IxMUUxNDEwRTA3QwotOjEwMTBCMDAwMjE5RUNCRTMwM0YyNDIwNzk1MTRFMDcwMTlGODM4OTZBRAotOjEwMTBDMDAwREM1REU0RjY2OEJFQzM3QjFDRjg0RTY5NjczMjEwOUY5NgotOjEwMTBEMDAwQkFCREQyRUUxQ0I3MUI0RUEwNkI5NEZFM0VFMUY0RkFGMwotOjEwMTBFMDAwQzQ3M0YyM0JBMzQ5ODQ2RTJERUVBNjBBMjI0NkU4NjUzRQotOjEwMTBGMDAwREU1NTEyNEFBN0ZGNUNCMTdCMzYwMUJENDA3MjkzMzVDNQotOjEwMTEwMDAwN0NEQTVGM0ZCMEY1MURFM0ZBNkJBQkQ0RTUxNTgxN0Y2OAotOjEwMTExMDAwMUI4OTI3NDAxRjk1NEY3ODVEODA3RUI2Qzk1MjU5MzA5NAotOjEwMTEyMDAwMEFCRjhENzYxQUYxQkQ3MTBFREZCRkMwNUUyNTY0OUZDOAotOjEwMTEzMDAwREEwN0ZBNjQ1NkMwRjE4NzI5QzAyRjYzOTM3RjNGODU5MQotOjEwMTE0MDAwRjYzNzZDQkQwMTQ2QTBBQUM0RDEzOTg1RUExRDc5MkFCQgotOjEwMTE1MDAwNDFCREI4OEQxMDk0QTc2REYxNUE3QjNBQ0NDOUYwNDFDRQotOjEwMTE2MDAwNDhGQkZFRTEyODRGMjMwQTk4RkRFOUJFMUVFNENCNzQzQwotOjEwMTE3MDAwQ0Y3MEIyMzkxQkU0MkQyNDQ4QjRCRkMwMkE0Mjc2Mjg3MAotOjEwMTE4MDAwMzYwM0RBNkY1Q0YwMDNBODhGRjQ2N0MyNzUwRTZCMjEyQgotOjEwMTE5MDAwMkY1OUU4NDRCMkRCRTQyOTcxMTRFNjZDRjFCRTE0NDcyMAotOjEwMTFBMDAwNUYxOTE5RjQ0RDg5QTdFNUQxQ0YwNDVFMDI3ODQ1N0IxQwotOjEwMTFCMDAwNzA0QTAyODU2Mzc2ODc1RUEyRTY5NDhDMEI3NTRGQjEwOAotOjEwMTFDMDAwRDJGMjU1RkJDOTVFNDA2QjdFOTc1QzZBQTNFNUYxODc1RQotOjEwMTFEMDAwQkQ3QjI5MUI5MEMyNkU1RkE5NUQ4NkY5MDQ5QkVENzRFRgotOjEwMTFFMDAwM0U1QjhGMTE0RjEzMkQxNzdGRDQyNjI2MTIxNUZENEQxMAotOjEwMTFGMDAwQzRCNzUzNDUxN0RCODRBRUE5NDlGNDlGMTk3NzM5RjI3OAotOjEwMTIwMDAwNDU3ODVGRUE4RTczOEVFRDRGOUY2REIwNkU1ODI3QjVBRgotOjEwMTIxMDAwMjMzQkU4QkEzMkJDMjFDMUExRTI5MzFCOUM0QzZGNTEyNQotOjEwMTIyMDAwM0E1Q0U1MDQzQkI0QTY1NzgyNzU2RTVCRUZCMjIxRkRENAotOjEwMTIzMDAwRTIxRDI1MzA2NEVGMzRFMjc4NUEwNjNFOTYxMDRGQTY0MAotOjEwMTI0MDAwMERDMzUxREUxNUJFQTNGOEJENjJCNjREOEQzNzQxRDEzOQotOjEwMTI1MDAwNkI3NUVENjM2M0UzRjcwNjI3RDM3RkZGMkRGODdEQzczQQotOjEwMTI2MDAwQzFFNDIxMTY3RTJEQzAyQjkzMkUyREM3NTVDRTNFMzlCRAotOjEwMTI3MDAwQUU3NEE2QzQ2RUQ3QzRGMUFGQzdGMzM2MDNEOTRGNkRCMQotOjEwMTI4MDAwMTUxRDk3RjIyOTkzMkIxMkEwNERENzcwRkVCRTE0NUU0OAotOjEwMTI5MDAwRUZGRTJGRTNEQjlCOUMwM0UzOTVDOEM5QTgyNzI5QkY3QQotOjEwMTJBMDAwNUU0MTcyNjJFQjFCRTgyRjlBRkQ3QTgwRTM1MUE1RTc1RAotOjEwMTJCMDAwNENFMDJGQjYzOEE4OUVDQjg5QURFNzZFNzU1RTQyN0ZCNQotOjEwMTJDMDAwNzEzRDYzRTI3QTVDMTk2RjBCRTdFRkZERjY4QUVGODAwMAotOjEwMTJEMDAwREM1ODM3MTgwMjIwNjcyNUM0ODY3MjQxRENDOTlDNEY1MAotOjEwMTJFMDAwMUNGMUMwMjczMzQ0NDcwOUU4MUIzMjlBQTAxRjlEMzBFOAotOjEwMTJGMDAwMzYxODgwN0RDQUIwODA1QzIwNDIzMzUwQ0E4MEM3QTFCNgotOjEwMTMwMDAwQjlDMUNEQjRFQjZDRUE2NzQ4OTRGRUI0QUIxMDQwOEIyNgotOjEwMTMxMDAwRUMzMDJDQTBFQjRFNTRFNENENTFFRDU2Q0I5QjYyRUY1QwotOjEwMTMyMDAwMjNGMkE4RjA4NTZCREJFNjZDQzZBRkIzQTlGRkYyMzZGQgotOjEwMTMzMDAwQzc1M0E0MUYwMURCNkRGQ0M2RDA2RDlCNTU3QTcwOUIxMwotOjEwMTM0MDAwREI4RDY1QTU3RDJDRkVCREEwRjBFRkZBNzVDNDA3RjIxQwotOjEwMTM1MDAwMzEzOUJBREZGMEJBNTNFNDdDREJFQjA1M0UwRjdDODUxNAotOjEwMTM2MDAwMzhDMDlGNzFBRTNGODlGQUM5NDlGNTkzODBGQTg5OEREQgotOjEwMTM3MDAwOUZFMThGRkY0MTgwOTZCQjlDQTk1QzlGM0JFMjZGQjFEMAotOjEwMTM4MDAwRkRGRkUzRTcxRDRFQzJGNEQ0NjQ0N0E3NDhFQjg3NTE0NQotOjEwMTM5MDAwM0IyNDgzOUM0RUE2NzM5RjAwRjgzMjIxREQ2NUMyRTg5MgotOjEwMTNBMDAwMjg0RjI2NDFGMDdCMjlERTQyMDZEMEJGMDY1QjEwRUNCOQotOjEwMTNCMDAwOENDOUQ0RTYwNTc5MjYyNjI3QUU3RkJGREQ3N0RDMzlEOAotOjEwMTNDMDAwODA1QzM4MTJFNDdDMjA2QUFGMzM1QzY2QTVGQ0I3MzFFMAotOjEwMTNEMDAwREIxMTBGRTU4RjY5QjlENTREQzc3NTc1MTM1RTZFQjExOQotOjEwMTNFMDAwQTJGQ0QwQkZBMTQ4QzUxMEREMUI4MDdENTRDQTVFMEI5NgotOjEwMTNGMDAwQjQxRkRFNTcwRTQwNzkyQkY4MjQ1N0QzRkUxRkZFREJCNwotOjEwMTQwMDAwRkVGNTE0MzFCMzlEREU0RjlDOENBRjdCMDE3QTQ3RDM0MAotOjEwMTQxMDAwMEQ2QTRFODQ5RjJGRTUwRjI4RjIxOTkxMjc0N0JFMjJBRgotOjEwMTQyMDAwNEZENTYzNTExRkZFREQ1OTE4RTkyRjk2N0ZCMzhCRUIyMwotOjEwMTQzMDAwQ0YwNEQ3QzBGRThEQzJGNzk3RURERkYwRjk3RUM2RjU3OQotOjEwMTQ0MDAwNTIyQ0Y5OEYzQkYwQzY5NkVEQjRCQ0NBMkRDQUE3QThBMgotOjEwMTQ1MDAwN0Y2NzFCRkE1Njk3NDRDQjE2RUE2RkJFNDdDQjA2NEIwNQotOjEwMTQ2MDAwOTcwNEVEQ0FBOTg0NUEyOUJFQkRENEM5ODNGRDg3NjVGNgotOjEwMTQ3MDAwMDIyQkMzMUZFQzNGQ0VCNjA5NjU0QzVGQ0I4OTczQzYwOAotOjEwMTQ4MDAwMEQ4NEM3MjBBRTY3OTVEQjg0RTNDNThEMUM5MTA4NzI3RgotOjEwMTQ5MDAwNjVFNzdDNDUyNDIxMDg3NkRDNUVFQzkwMTY2MDdGRERGNAotOjEwMTRBMDAwRTQ0NkRBNUZBRUNCQTA5MTZCRDA1QkNGOEYwNUJERTQ5NQotOjEwMTRCMDAwOTI2MEJGNkVCNjkwODBDRDE1RTkxRkNBODkwNTExRkRGNwotOjEwMTRDMDAwNDRGODNFRUU0RUJFNjc2QTVCRTc0OTFDMDE3MjdBODhCQgotOjEwMTREMDAwQzU1MURBQkVDOUU0QjIzQzgzMDRENzgxOUVGMDEyRDk2QgotOjEwMTRFMDAwNDFEQkM3MTFFNThGMEEyRTJEMUI3OTY5QzZERjA1RTJBNgotOjEwMTRGMDAwQTVGMzNGRjg3NzExQTEzMDgyODQ2Qzc0QkY1N0VFMTFDOQotOjEwMTUwMDAwNDJCMDBGMzQxOTJDNDFCMEE1MjU0MzJEQzQwNDY1QkI0RQotOjEwMTUxMDAwMjE2ODA2RjkzODI5RTAzQTREMDUwOTQxNTA3RTUzODc4NAotOjEwMTUyMDAwMTYyNzc2RDM3NTlDM0JCOEQ3RUE4QjQyRkY1QjdERDVGNwotOjEwMTUzMDAwOUVBOUUzNjNFM0IxQUZEREJDOTcxRDgwQzcyN0U1RjU0NgotOjEwMTU0MDAwMEVGMDIzMDM2RTA5RTMwRTlCQTBBOTRBQUZERkVBMzIzNwotOjEwMTU1MDAwMjlGRUQwNkMxN0Y4NDMwQjdCRDc5QjgwREVEOUM5RThGNgotOjEwMTU2MDAwMEY5MTExMkVFNERCMjFFRTVEOUI0QUMwNjRENTMzRkY2MQotOjEwMTU3MDAwNzQyODA5MzZBOUZEMkE4NUJGOEVCODdDNzNBMTlGMjdFMAotOjEwMTU4MDAwQjkxREExNjJEOTM1MEFFMjU1NTcyNEJCQzAyRjJENjk3OAotOjEwMTU5MDAwMThEQTAxRkVFRTEzNkI4OTY3QTExMUY1QzE0QzY4RUZGMwotOjEwMTVBMDAwNEQ2QUNGMDdGRTdERDJCM0VCNDcwRjAxM0VDRDc0NUY4RQotOjEwMTVCMDAwMEM3QTdDRkM1MUFCNENFOTU1NTVCODM3MDVENkYzMDc4RQotOjEwMTVDMDAwRERGQ0ZCRkMwRkZGMzcxMTJGRkE3REYwMzIxN0REMDczMgotOjEwMTVEMDAwODM0MkNDMjM3OUIwMEYzRUU3QjkyOTMxODRCQzk1MTRGRQotOjEwMTVFMDAwNTVCRUFCRkNGNzYyM0ZDQTdFRjg1RDYzMjhEMzExNTU0OAotOjEwMTVGMDAwMEVCNUY4NTZDNkFGMTJEOEJFOTYxODA1QTZGRkI4MUQ5MAotOjEwMTYwMDAwQTVGQUU1M0U1ODI3N0QwREVEQTZENzJDM0MwREY2RTY1NAotOjEwMTYxMDAwOUM2N0JDMDdFQzc2MkM3REEzQ0M4N0UyNzE2NDg1MkQ5QQotOjEwMTYyMDAwNEFCRDQwMkFBMkU5ODlDNzVEQ0M1RTU3MTlFOTdFODE4RgotOjEwMTYzMDAwRDYwQjJCMEIxQjYxNUU1NTM2QUIwMDdDQTdCNDZCRTY1QgotOjEwMTY0MDAwRUQxNDdFNTZFMjU1NjJFMkU3ODU0MDdGODgwRjQ2NUJFNwotOjEwMTY1MDAwRkY3QzIyOUQ1N0M3QTM5QTQxRDY1MjE4QkUzQzUxRkMyRAotOjEwMTY2MDAwOTU1OEY4M0E2QzZDMkI4Nzc5MUQ1RTI0OTIyNkRBQ0Y1OAotOjEwMTY3MDAwMzlERkM0MzQxMkU1N0QwNUJFMDM3QzQzRTlCMjFDRjZCNAotOjEwMTY4MDAwRkM4NTJBN0E4RTg4OEVCRkMzNkJFQjNDNTM4RDExN0ExMgotOjEwMTY5MDAwRjZBQkFGOEVBQjA0RkI1RDA5Nzg1NDhEQkI5RkUzRTVFMQotOjEwMTZBMDAwODQ4QkQ5N0I2MkY2QzkwRTVBNkY1QUYwOTg4MzhDMDNFQgotOjEwMTZCMDAwM0Q3NUJFMzA2MDgzQjg1OEVGQ0Y5QjgwREVGN0Q5MzBFMAotOjEwMTZDMDAwNUU1MTU5N0RBMUIwNjk5QzBBOUZDNTA0OERFNEZDQkRBMwotOjEwMTZEMDAwNEYzODY0RkFCQzcyRTRGQTk0ODAzNTM2MUU0RkI4RDg5RAotOjEwMTZFMDAwQkExRTgwMDc5MzMwMUVCM0Q3NzUxOUYxMTgzMkQ2ODUwQwotOjEwMTZGMDAwRkM0NkY2QzY3OTQyMTA4RkZDOTNFODAxQkYwMUM2RjU5RgotOjEwMTcwMDAwQTFGRTY0RjFFNEJCMUM2QzVFNzEzQTNGQUZEMkJGNDJGNAotOjEwMTcxMDAwQTM1RjEyQzIwMjA5MjZBOUNBNTIzQkM2NjcxM0MyMTJBRQotOjEwMTcyMDAwM0VEN0NCREIwRTE3OEYzQjcxNzk1M0YwMUY4QjlFMEE5MAotOjEwMTczMDAwRkVGNUNGNDMxQ0VGODdBQjk3QzgxMDM3MzRDNTQ3Rjc4QQotOjEwMTc0MDAwODNEMzkyMDQwRDVGQkRCNUQ2QTcxOUVGRUQ3RjhBOUFCQQotOjEwMTc1MDAwRkRCMjAyQ0Y3M0ZBOUVGMzRENEE4Mzc4NTVBNTI5MzAyNgotOjEwMTc2MDAwNzIzMDcyQUVFMEU3QURDRjFGNzc0MEJGNzE5Rjk5QTM5MwotOjEwMTc3MDAwQ0FERkM3REMzRTUxN0JEQTcyQjNBQ0IyQTdCNzg5RUJFNAotOjEwMTc4MDAwMDFFRjA5MTJENzZGM0FCOUYzODI1REE1RjhCQzBFRUNGMAotOjEwMTc5MDAwMkE5RDYyQzIyNUVDRUE3QzEyRTg4NDM4QjI3RTdDQzVDMAotOjEwMTdBMDAwOUVFQUY5NEJCMUFGN0FCQTI5N0NFMDRDRDJFQTRCMjVEQwotOjEwMTdCMDAwNkUxODRCQkUxNEI5M0FDMkU1NUY4RjdGM0RCQ0Q1QTQwRAotOjEwMTdDMDAwRjU3QjE0Rjg3RTFGM0RFMjQ4ODBFQUM3M0I0QkM0MjBGRQotOjEwMTdEMDAwMTE5MDNGRDAzRTFFN0U0QzQwN0YzMzU0NkQ0NkJCNUMyMwotOjEwMTdFMDAwNTMxRDg3RjFEOTlBN0MxMUVCNkIxRTE0RDE3RTg2QTgwQwotOjEwMTdGMDAwN0VBOEE3RjNGOTAzRDcxM0ZBRjg2QzA5MTEzQzUzNTVFNwotOjEwMTgwMDAwRUI5RTM5MjE0RTUzQkU2REQxQjdGRkIwMTZFMkNCQzU2QQotOjEwMTgxMDAwNDYxOUM2M0IyNEIzNzg3M0MwMkJBMkZGNEFGQkYwODQ2MQotOjEwMTgyMDAwMjAzRUZERThCNTFFQjA2NzBBM0YxQ0YyOEEyODZGODE5MgotOjEwMTgzMDAwMzc0NTBGMENEQkM1RTNEMTg3NUFGMjgzMjJEMDU5RjAyQwotOjEwMTg0MDAwRjU4RDIzRTc0MEZGMzUzMkQwRTE4ODdCOEIwM0Y0NUREMwotOjEwMTg1MDAwREMzRjFGQUZBOEMwRkRBMzRGQ0U0N0JCNDk5RDU1M0EwMwotOjEwMTg2MDAwRUYzODJFQTdBNTQzOEI2RjAxM0I3RUJDRDU0ODIwNkU3OQotOjEwMTg3MDAwNzQ3Q0NEMzk5NEU3RUVCNThEOUVBOTIzMjNGMTY1MjVCRgotOjEwMTg4MDAwM0VBQzhGMzNFQkUzQ0JGREUyQ0FCQTc4QjJDMjBGN0EzQgotOjEwMTg5MDAwM0VCOTM5MDY3RjI4RkEyQTE2N0Y1MDNENTY5NTk0NzIzNAotOjEwMThBMDAwRjk3QTRDRDExRkVGRjA3NTk2MEVEREYyNjAxM0M1NDM0NwotOjEwMThCMDAwQzI0MjExRjFBMEYwRTU5MUNGRUZGRjFFRThFMTM4Q0E3NgotOjEwMThDMDAwMUZFQjgwOUZGRkY5QzM5NzYxMUY0Mjk2MDg1MUUzQzg0MQotOjEwMThEMDAwREZFQkIzN0I5NDJFQjkxMUJBRENFNjVCRDI1NzA2RjE4RAotOjEwMThFMDAwOUY1QkI3QjJBRjBDRUJEN0RCOTVEODdBNkQ2MEJEMzU5NwotOjEwMThGMDAwMkM4OUM1ODFGNDc2NDcyRjBGRkY2OUJCNTM1OUZENThEQQotOjEwMTkwMDAwMkVCQzVGNTlCRDI4MDg3MEQzNTA0QjFERTg1RkJEOUVBQgotOjEwMTkxMDAwRDBEQjA5NjUzRUZBNzkyNjg0NDUxMjFDQUY5RUI3OEM1MAotOjEwMTkyMDAwRUQyMjc2QzI4NEY1N0U4QjNEMEY5Q0Y1OEI3MTBDMDYwMwotOjEwMTkzMDAwQzAwOTA0QkZGNDU4NUNCMDE5Qzc2QkJDQUEwMkU3REY0QQotOjEwMTk0MDAwMzgxMUEwOUY3OEJBMDNCMDNFNzczQ0M2MEZEQTMyNTgwMAotOjEwMTk1MDAwN0JGMUZBNzhFNjhGNEY3MEUxM0E0NUM1MjEzRkVGQzQzRAotOjEwMTk2MDAwNzIzMzVGQzM1ODk3RUZEOTI0M0E4RjY2QUYyMTBFQ0VGQQotOjEwMTk3MDAwMTU0QTZERDIwMTA4QjlCNDREMzExMDMzODlFMDQ5RjFFRgotOjEwMTk4MDAwREYwOTQ0MDZFODdBQjE0RTgwN0Q2N0JFQzU5NDgzRkVDOAotOjEwMTk5MDAwRTkyRUU0REI2RkQyN0QyMUU1Rjc4MzA3QzU1RERCRTg0NwotOjEwMTlBMDAwMTIwRjdBQzYyNzQ2RjNDRjE1MzhDRkZEMERENDBCQjdFQgotOjEwMTlCMDAwRjg2QjEwMUVGREZBREI1OTIwQUY3NzBCQkVERkMyQkNGRgotOjEwMTlDMDAwQkEyQTZCMUUyQ0E0RjM2OUQ4MkRFMkI5RDJCQ0JCOEYwNgotOjEwMTlEMDAwOEM2MkZCMzRFREY5QTQ2OEI3RTQ0MjFDQTU1OTg4Rjc4MgotOjEwMTlFMDAwODAxRTUxRjBEODY5MzNBMTdFNjkzRUNBRjQ2MEYzMDlDNAotOjEwMTlGMDAwODE5N0Q5M0U2MjFGQUYzRkY3QUUwREY3MTkwQURFRTlCNgotOjEwMUEwMDAwN0EwRUMxRjhERTZGM0I3MTNEQ0EzRUUzREY1OENGOTFERAotOjEwMUExMDAwODFENzkzRTE0MDdEMDE3QzI1NDZFNjJGREEyNDVDNTc4RgotOjEwMUEyMDAwMEY4OUY3QzBGQ0ZEM0MxRTQ0REU4RDQzQkY1OUExNkZGQQotOjEwMUEzMDAwMDNFNzNGODVCRTJCMzg3RDdCM0EyRTdDRUIxQURBQkU1RQotOjEwMUE0MDAwQ0RFQkMyNTMwNjMxOTNFMDdBN0JERTRENDBGRTUwRDY5QgotOjEwMUE1MDAwNEJGOUUwNjM5OERGREUwRTY2MjdEQThFRDkxOEJFNkM4QwotOjEwMUE2MDAwNDVCOTMwM0ZDNUJGNzYyNDMxM0Y1OUJGRUUyQUJFNEYzRQotOjEwMUE3MDAwMEYyNzA5N0RGRTJEQzQyOTdDQUUyOUUxQTQyOEYyQTAwMAotOjEwMUE4MDAwRjhCNTE0Q0ZGRjgwRkExMjA3MzkxRjI0MTEzQzJCRTM1RAotOjEwMUE5MDAwMjhFMzJBRUY5OTkzQjVGMjU1QzVFMzBBRUYxQTQ5MjVEMQotOjEwMUFBMDAwQzQxMzYxREMwMkQ1RkM1NkJCNEFDQ0M5MjlGREM3RkQ3NQotOjEwMUFCMDAwMzdFOEU4NEFCRTBDM0EzNjQ4RDYxNjIxOTFGNEVEOEI0OQotOjEwMUFDMDAwMzE5NDI2Rjc5NzczQkQ5QzA5MUQ5RDlGQzFGOUJDNUU5QgotOjEwMUFEMDAwRkUyRjFBMUE4OTQwRkI1RDJERkEwRUJCMjg2Q0Y2OTE3OQotOjEwMUFFMDAwNkU3MzRFN0Y3OUI4OTQxRUExRjRCRTMyQjlCMEJGM0U3QQotOjEwMUFGMDAwMTkyQzlEMEI5M0ZCRDFCOTMwNzkwMDNBQ0JBRThBODk3MgotOjEwMUIwMDAwNTAwRkVCNEYyRkMwN0RERTI0Mjg4MzlFMzAwREM3RjE5MAotOjEwMUIxMDAwOTAyRjdCOUQyNEY4MzQ2RDk0QzRFMzI4Q0E3QzIwMkUzQQotOjEwMUIyMDAwMTE0N0RGMkI0QkNFNDZGQTBCMTIwOTE4NjkzOTI5RDcxQQotOjEwMUIzMDAwMjM4MERFMUYwNDFGOTRBOUU3RjcxRkUwODM5QjA2RTZCRQotOjEwMUI0MDAwODMxMEZBMjVDQjM5QkQ5NzJCNzkxNkJCMDZDRUIzMTg3NwotOjEwMUI1MDAwMDREREFBNjFEQzhCMDY0RkFGMkZGQkYyRTk1NkRGOUY1NQotOjEwMUI2MDAwNkVGNTAzRDNDREQ3MDBGMkQzNkMyMkU3RDEwRjJGQUVBMQotOjEwMUI3MDAwNzZDMzc4RkJFRERFOTM4OUY0Rjk5RTI2QUU0RkIyMjk0OQotOjEwMUI4MDAwREQ2OEZEQ0JDOTIyRUFBQjQ3Qzg5NUE4ODdCRjYyMzBBNAotOjEwMUI5MDAwRTBGQzdCQThGRTdEM0EzQjFBREYwNzI0MTc3REZGRTJCRAotOjEwMUJBMDAwOEQwNENGRTNFOEZBQkU5OThDRkU0RjQwODBFN0FCRTdBNwotOjEwMUJCMDAwMTMwMzNDNzdDQjREQzQ3MDE5N0E2ODEzRDcxM0FBNzVGOQotOjEwMUJDMDAwNkU1MkVCODEyODdBQTgxNUVBMjkzRkRFMDVGQzY4OTE2MAotOjEwMUJEMDAwMUREMjQwN0E2OENCRTVFQkExMkRGRjYxM0RGNEZEODE3QwotOjEwMUJFMDAwRjlFRkIyRjlFQTU5ODY3N0FEM0U1MEY4NThEOTE3QzRFMwotOjEwMUJGMDAwQ0ExN0EyRjI0OEQyNURGREM3MjVDNDgzRTc2MTI1NzZFNgotOjEwMUMwMDAwMEJCM0JCM0IwNUI0QjNDRDI3RjI3RDU4QjY1OTUwMjk3MQotOjEwMUMxMDAwMjg3NkY4RUMyRTU2MkY0RTg5RUUwRkZFM0NEOTg1RkMyNwotOjEwMUMyMDAwQkJCQzdEQTU0N0QyRTQ4MTA0RjBGOTQzREVCMzhFMTEzRAotOjEwMUMzMDAwNTQyRjRFMTdBREI4QkVBNDcyMTYzRjU0RDY0RkY1RUNENAotOjEwMUM0MDAwOEM2OUE5M0M2RTRBRDc5Mzk0QzlGMDkwNDRGRDAxMzg0MQotOjEwMUM1MDAwNDdCM0YzRkQ0MTYyQjFBNEYxRkIxNUJDQUQxNjJCMDRGMwotOjEwMUM2MDAwODg3QjNCOTMwOUE0REQ1MEJGN0VDRDY4MzhCRjc3N0E2RgotOjEwMUM3MDAwQjVFRDUzNDhFQkE3MjIwRTQyNTAxRTVDRDQ3RTQzMUNBOAotOjEwMUM4MDAwMkJBOTRDRDcwRUY2MjE3OUQwNUVGNTNDQkJGRjdFRTI0NgotOjEwMUM5MDAwNzgzMkRGNEY5ODg4MUJFQzBBMTFBQjA2RTQxQkQ1N0UyNwotOjEwMUNBMDAwRTJGREU0NDFFQzI3M0U0QTU2Q0VDN0I1RjZBQjNEOEU4OQotOjEwMUNCMDAwNDQ4RDBCREM5M0MyRjcxRkU3OURFOEZGOEFEQzZFNEQ3NQotOjEwMUNDMDAwRURDRUM2RkM5NDU1MzYxOUUzMDVBMkU4QjFDQ0M4RUVCQQotOjEwMUNEMDAwRkZCRUQzNkIyMEIyNkE3RDQ5NjVGMTQ0NTZFRDFGNTJCOQotOjEwMUNFMDAwMkE1QzlBNzI1QUU1NTA0REZCMjFCRUUxOUFGQUY0QkE4OQotOjEwMUNGMDAwMkIzNUY1OTk4RDA1OUFGMjMwRkZENTlBRjZEOTU0MDAxNwotOjEwMUQwMDAwRDRFNTlDOTZBRjY5REE4RjZDQkI1MTUzMUVCREU1NzY2NgotOjEwMUQxMDAwNERGQjJCODIwQjM0RjU2MzlFNTlBQUE5MUZEN0JFNEFFRgotOjEwMUQyMDAwNTNCRTZBRjczRDlBRjZDRDNDRUVBQkM3Q0JCNTFDQUZDMAotOjEwMUQzMDAwQ0QxMkQzM0I0REQ2MDI4QzQ3MzY1QkI1RjFDOEI0MTRGNwotOjEwMUQ0MDAwQTY3RjRBMTIyN0U3NDIxQ0JDRjk2NDdFMkVFMDdCOUZFNwotOjEwMUQ1MDAwRkQ2QThDOEJDN0UyMEJCRDFFOEJBNTNGRjVDRjhCRjhDMAotOjEwMUQ2MDAwNzg5RkJDNjQzMjgwMUNBQ0Q4NEJFNUY1MkE1QUI2QkVDRAotOjEwMUQ3MDAwQjMxMUQ2RDQzMjk2OURBNzRBODRFNUY3MjhFNzJCQ0EzQgotOjEwMUQ4MDAwRkI3REU3MkI5Mjg3QzU1N0VENTZCMjM5MEE1RkE0QTVCNAotOjEwMUQ5MDAwQzg1MUUzOUYwQTFGQzVDMkRCM0Q4M0M0REI1Nzc4QkIzNAotOjEwMURBMDAwN0YxNzZGRUYwQUE0NTIzRDhGMkE3RTlFQUQ3RjZGNzUxRAotOjEwMURCMDAwOEE4MTlGMDdGQjJBNTM5OEJGMzMyMTFFM0Q3MTA3Q0FCMgotOjEwMURDMDAwRTNFNUVBN0Y2NTFFNTRGRkQ3QTRBNDgwRkU3RjYzREVBRgotOjEwMUREMDAwNkFEMEZGQkJDQzFFRDg5MzdENTJGOTQ2RURFMzMyQjRGNgotOjEwMURFMDAwQUY2NUVEMEQ5RTVDQTA0QkFDRjhGN0VBOTQ3RUYxRUY4OQotOjEwMURGMDAwM0ExNkZGOEVEN0UwNkQ1MTRBRjRGODc3QjNGREVGMTgyRAotOjEwMUUwMDAwRkY2RTM2Nzk3MjA3MTNGRjVFMDQzQTIzMDVFOEMwRjhDNwotOjEwMUUxMDAwQTM4RkJFM0M3RTFFNkIxRkU0MjdFNDgwMDBGQjFFQUIzRAotOjEwMUUyMDAwMjRDMzM5RDdBNUY2QjU3NDNGOUIwQkU3QTk2REIwNkZGNgotOjEwMUUzMDAwNTJFRDczRThGRTk2RUY2RkUyRDAyRTUwQkJENzlBODIzOAotOjEwMUU0MDAwRkE5MTFDOTBFOUYzOEI3NERGQkI1OTg2QTI2MkZGQkM0OAotOjEwMUU1MDAwMUFCRkRDNEMzQzE2OTM4OEY0N0MwNEU4NDlCRTQ5RUU3QQotOjEwMUU2MDAwOEExMzIxNUUxNjNBMzgzOUZCREZCMkU3REY0QkI5MEMzMwotOjEwMUU3MDAwN0I0RTJFN0QyRTg3NzZBNzlDQUU3RjVEMTRCRjRCN0Y1OQotOjEwMUU4MDAwMEVEN0U3N0Y4MzlGMjZFMDc5MUNFMjY5MDNCNThCNzA0QwotOjEwMUU5MDAwMUVENzk5QzJFQ0YzODZBMzZDOUZCQ0UxQzQ2QzM3Q0ExMQotOjEwMUVBMDAwNEQ0QUQxODBFNzcwODNENTM3QkY0REU5RTc5N0ZFMzZCRAotOjEwMUVCMDAwNjUwMEJGNTQ1OUZGMkFCRUVGOUQyNjhFNkQ4Nzc4RTNEQgotOjEwMUVDMDAwRDlCMDA5RjEyNjEyOTYxRkQ5QjBERjQ4ODI0ODRGOTY0MwotOjEwMUVEMDAwNjdBQ0QwRDExOERFRDgwNUY2RDk0OEY0NzlDNTcyMjI5RQotOjEwMUVFMDAwQUNEQkI4NUY0NEZENDQ5MjU5N0Q4MDU4OUFDMENGNDkxRAotOjEwMUVGMDAwMkNENkRBMkRBNzU3NkJCNzkyQ0E1QzNBM0JBNkI1NUJENgotOjEwMUYwMDAwNjk5NTVBQkIzNUM0QTdCNTVCRTk3NTA1M0EzQkE2QjVEQgotOjEwMUYxMDAwNUJDM0ZDNTM3NDc2NEM2QkI3NzI1QTZFRDREOTMxQUQzNwotOjEwMUYyMDAwREQxQUJENDU2QkI3QUUwODZBRURENjk4Njc1NkU5RUM4OQotOjEwMUYzMDAwOThENjZFNURCNTdCOURBNjNFM0ZCNDU5NTMzRjdFRkY1QwotOjEwMUY0MDAwMjM5QTcyNjFENzc3MzVFRDE3MUY3ODAxRjM2RjI2MUUzQwotOjEwMUY1MDAwN0U1QUQzNkU1MkY3OEYzNUVEMjhDMkJCMjA0RjdCMjFCRQotOjEwMUY2MDAwOTI4NDkwNkI0RTNGQUZBOTVGQzhGREI0NkI3QjdGQUQ5MQotOjEwMUY3MDAwRTk4N0I0QjE3Q0VCMDBGRDBGRThGNTU3RTIzMzgxNzNEQwotOjEwMUY4MDAwMjI5MURFNTdEMjI5NUQ1NzA0MDU0Rjg4MzY1QkIyN0IxQwotOjEwMUY5MDAwNjcxMUNDRTNDQ0IxRUJGNzQzM0Y4QkI3NjhGM0I0OTc1MQotOjEwMUZBMDAwMDRCNUU1MDYzMjNDMTFGNDQzMDNFNThCMjBFNTkzNjU2NwotOjEwMUZCMDAwOTBCRkFERDI2QkNCNDhBMzFERjMyMTA2Qzk2NzhCMEYzMQotOjEwMUZDMDAwREM0NDMwRUYzM0UwRUQ4MkZDNzQ2NTlEMEFCRjc5Mzk2MwotOjEwMUZEMDAwQkYyOUYzNTNENkJCOENGQTdEMjEzOUIyNEUyRkZEOEYyQQotOjEwMUZFMDAwRUQyM0JCNERDMEI3QjVCQjA1RjI1REExRkY3QUVBM0E2MAotOjEwMUZGMDAwMUVERTk4MUU2NTVERkE3NUU4RkRDRUJDNTQ2RDFDN0IzNwotOjEwMjAwMDAwOUE2OEM1QjhGRUQ5Mzc0NTBGOEIwRjZBRTU3MEQ1MDFDMAotOjEwMjAxMDAwMTZDRjVGRjU5QzgwRjEzNTNEM0UxNEJGMzQxNjVFQzQ4QgotOjEwMjAyMDAwMDBEQjI3MzQyNDkzNjA1MDI1N0YzMkM3ODdEOUFEOTVENAotOjEwMjAzMDAwQkZCM0YwMEY5OENGNTM2MjEwRjI4MkUyRTQ3ODNEQkY1NQotOjEwMjA0MDAwMTU4NTQ4N0YzQzI3RTQ2QUU1NTQ4RjY3OUI2NzY4NTQ5MQotOjEwMjA1MDAwQkU5MkU5N0YzMDhGNUFDMkNFQTVGNDdDQTVDN0ZCOEExOQotOjEwMjA2MDAwREQwRjlCNDAyRjVFMkVERUU3QTU2QUNGMDc5NUYzODMzOQotOjEwMjA3MDAwMTJCQTVBNTM5NDNDMzgwNUFGNzQ1RjVFOTM1QTE4N0I3QQotOjEwMjA4MDAwREZEQTkwN0FEOUZCRDY4NkQ0RkZFQ0JFRjU5RUQ0MDE3OAotOjEwMjA5MDAwRUM1QzBGQzRDQkE4NUZBOThGOTdGNThGOEZFREZENEMzQgotOjEwMjBBMDAwQjA2MzFDOUFDNUJGN0MxRTBCQ0I1N0QxRDlDOTVDQjc5NgotOjEwMjBCMDAwQzY0RUY2RUQ3QjRGMEFDMTY2REFGOTEyQkI3NzEzQ0MzOAotOjEwMjBDMDAwNjdBOUREQkIxOTYwOTlEREZCODA3QUJEQ0QxNDJGNzgzRgotOjEwMjBEMDAwM0Y4N0RBQTk5RDUxRkNDMzk3NTMxNUJGQTgwMkUzMjI5RAotOjEwMjBFMDAwMUI0QTU4N0I3REJCOUZBNUIyRkIzQzlEMjk0NTZFRjRFNgotOjEwMjBGMDAwM0I0RkU0MzNGQjY5MkIxQUQwRUY3Qzg4OUZFNzNDMDAxMQotOjEwMjEwMDAwRTc4NTIzMjM3OTNDMEZGMjczMTUyQTc2NUVBMERCMDY2MAotOjEwMjExMDAwNjM4NTVCOURFN0ZCNDhBQTEzQzdCMzRGN0FCRTBCRjJGQQotOjEwMjEyMDAwOUQ5QjFEMDY4NzIwODNGRjZDQzA3M0QxRjU1RTZCRDkyNAotOjEwMjEzMDAwQUVCMUVDQkQ2NENEN0IxMkRBNjExMUYwMERGRUJDNTU4MQotOjEwMjE0MDAwRkFCQjlBNkY1RkE2Qjg4NEZBNThFQjdDMzk5NUY5QkI1NQotOjEwMjE1MDAwNDZFMkI1ODBERTU1Q0U3MzhEMjdGMzJEQTA2RjI1QzFFNQotOjEwMjE2MDAwRTM4ODk2Qzc2OUU0Nzk1MjUzRjg3OUFFRTg2MEU3QkIzMwotOjEwMjE3MDAwN0Q3MjdFODkzQ0E5N0FCQjZGOUY5QTZFQ0FCOUVFMUNBQwotOjEwMjE4MDAwQkJGNzY1QTBBQjVGMEE5OEMxQkZGNDVCQTJFRjdGNUZBRQotOjEwMjE5MDAwNEQ2NUZFNDcwQjVGMUY3NTM0OTE4RjcwN0M3MTUwRjE1OAotOjEwMjFBMDAwOTMzNzUzMzEyRTE3QzA3Q0M1RDVBMkU3MzRDNEU3MDY1OAotOjEwMjFCMDAwMUJBRjNBOUVEQUNGRkYzOTlFM0E3MERDRkM2NDIyOUM1QQotOjEwMjFDMDAwNEYyNDBFOTU3MDNCMjE3OTcyODFGRjVCRTBERjkzMzBFNQotOjEwMjFEMDAwQkVGQTNFQkNERjJGRkY1NDc2RjE3QzVBNzlDMDdDNUFBMAotOjEwMjFFMDAwQTU5RkQ5NEVFRkM3ODA1N0RBNUY0RjJBQ0JGQjVCMkZGNQotOjEwMjFGMDAwQUFGQUIxNUZBMjFGOEFBN0RDNDZFQkEwRjBGNzM5QzNBOQotOjEwMjIwMDAwOUZFNzM0MEIyNjVDNUU1Q0QzOUNENjJGREU2NzRFMUJBQgotOjEwMjIxMDAwMjBERTc3RjFFOEU4NDQzODRGNTZFMjU2RkE3NjE2N0YyQQotOjEwMjIyMDAwNTI4NkZBN0U0QzhCNTMzQkZFQzYwMjU2NzZBNTMxQkFENwotOjEwMjIzMDAwMkQ0RTY0N0MzRjhBQ0Y0M0M5MDM1NEUyRDY5NjE5QzQxRAotOjEwMjI0MDAwMEJGNzFEMUVFMUY5RDk0QTNGQTNEMjZDRDgzRUQxMzUxOAotOjEwMjI1MDAwNjUxNENDNzc2M0I2ODBGQkNBOEQ0RTQxQjNCRjNDOTkwMQotOjEwMjI2MDAwNUEzMjJBOERCNjkzNzlGRkEzRDIxODlGNkUxQkNFRTIwNQotOjEwMjI3MDAwMzNGQTNDQzgzM0JDRkQ5OUQ0MjkwOEU5OUI1NzAwM0U4QQotOjEwMjI4MDAwNERBMjE4MTU4RjYzRDI1ODFFQzY0OTg4OTExNTQ2RTI5MwotOjEwMjI5MDAwNjczNThGQjFGQjVENEFEQzRDODkwMzEyRTI3OTJCODFGMwotOjEwMjJBMDAwRUE5NUY3NUE4RDA0RTI1QThCNDRFQjQ2RTBDM0JFRkIzNQotOjEwMjJCMDAwNzNGQzVDREQ0MUZGMDM3QjU5M0RCNjAyRjM4RkZFREQwRAotOjEwMjJDMDAwRkI1QjgwQ0YwNDU3N0Y3QjU5OUFENkU3QTc3ODJFRjMyNAotOjEwMjJEMDAwMUVEN0Q3RDIyRUUzQkNCRDNCOUVGMTZEQUZDRDhBRjFBOAotOjEwMjJFMDAwNkM3REJCODU5QzNFQUQzQzRFMDFGQTFBRUM4NjRCMjRCRQotOjEwMjJGMDAwOEREMUVDQzdDMjM0QzYzNzE3OEY5QUJERThDNzk0QzVENQotOjEwMjMwMDAwNjMzRTg3NzJGRTIxNDlDMDFCOTgwNjFFMDA2OEYxQTczNAotOjEwMjMxMDAwNjdDMDdEQTJCRUYzMEY5OUUwN0I0OTU2MkJCRTI3Qzk0QgotOjEwMjMyMDAwMjQ2NDgzMkJBMTkyNDc4MEZDQjI2RTUzRjc4NjM0OThDNQotOjEwMjMzMDAwRUZCNTgyMDdFRTBGQTQ1NTM5M0FEMzkyRTExRUExOEM3NgotOjEwMjM0MDAwNjJCNjMxOUJEODhCQTEzRURGODBGNUNFMzk4RThENDZBQgotOjEwMjM1MDAwQzhCQjk2MDk5QzY0MTMyMzFEQzc0NkM3Njk0RENCQzZFRAotOjEwMjM2MDAwRjVCNzA2NkVFQTRDQTNFRDEyRTU1RTMyN0MyQ0U4MTE1RgotOjEwMjM3MDAwQzc3NDM3Qzg3MTI1Q0I1RkQ3QUZFRjNFMkUxRkQ2MEQ4MAotOjEwMjM4MDAwNzRERjAwRjg5MEEzRTc4MURGQzdGOThGRUE5OTM1NDA0MQotOjEwMjM5MDAwOEYxMjk5RUM2MkY3QTI1ODFFMkFBNDU5NjNCRUEwODczNwotOjEwMjNBMDAwRTU0QjI3NDBCRTUxMEVEMzMzNTBGRjkwQjM3NDFERjA2MAotOjEwMjNCMDAwQjkyMjVGMjJDNzM3RjBCRDNBMUZCRTk1RTMzQjQ5MjdEQwotOjEwMjNDMDAwOUYwQTNFRTkwMDREOTAwRjIxQ0QyMEM4RDdCM0FBQTJBNQotOjEwMjNEMDAwQ0ZGNzg3OUNDRUNCRUQxNThGQzA3QzY3NEQ2RUMyM0M4RQotOjEwMjNFMDAwNzdGMkY5MTc1Rjg4NDVFMEY0MzIzOUExRUYxMzg4NDM5QgotOjEwMjNGMDAwQzQyNTMzRkQxQjI3Q0JBODhGODk0M0MwM0M1MzhCRUNFRQotOjEwMjQwMDAwQTk4MzcyOUNGNTZBODcwODc2Q0ZDQ0NGMEIxNzFBODgwMAotOjEwMjQxMDAwNDRFNUFEOTRGN0UzQUQyNEMyRkJCOTJDQ0VDQUY0QUJDRQotOjEwMjQyMDAwNDRERTU3RTQ0MkU0QzgyOTAyRkJDOUZFQTg1RkQ0OUFGRgotOjEwMjQzMDAwNDBENzUzNkEzRDg4RTc4ODcxMjMxQTRCRTA1RUMxQ0JEMQotOjEwMjQ0MDAwRjM1OTFGOEZDNEM4REIzRjk5QzhFOEUwMTI3RDZFMDNDMwotOjEwMjQ1MDAwRjhGNEU0RTRBQkZCMjYyMzlEQUY4NDFCOUEwRjZDNzg2MQotOjEwMjQ2MDAwRjdENUZEOTkzQzdFMEVGOUUyODE3NzVGRjU1QUJGN0M4NgotOjEwMjQ3MDAwN0VGOUJFQzdERjdEMTVGMkNCQkYzQ0ZGN0IwNEQwRTMwNgotOjEwMjQ4MDAwMjcyOTYzQzFCQ0Y1RkNBRkU4QjNDM0EyRUZGMEJEMTRDQwotOjEwMjQ5MDAwRkYzNzUzQTZGMjE3MDA5NDQ4MTVEMjlCRTUwRkNERTEwNAotOjEwMjRBMDAwNzgwRUZDOURFMkQ5MTJDMUYzQ0QxRDA3MTA3Rjg3OERGOAotOjEwMjRCMDAwNzRERTc0N0NFMzE0ODY2QUUzM0Q4OTNDMUYyMzg4RkQ0NwotOjEwMjRDMDAwREY2MjY5OUIwNkZFNEQ4RkE5MzcwRkM2RUQ3OUYxRURFRQotOjEwMjREMDAwQ0MwMEQ1Mjc0N0VGM0I2NzIzOTRGRjhFNEJCRDM2Nzg2MgotOjEwMjRFMDAwN0U3QUNEMUIzNkMwRDdEMTM1MjJERTdGQzM3QkM5QUEwOQotOjEwMjRGMDAwN0NBMEY3Mzk1Rjk1QkEyQjhFMDI1RkNENUZGQkNGMjJCMAotOjEwMjUwMDAwQjU5RjRERkMyOTY4Nzc5NzA0NDVCOEUzREJBN0ZGOTY5NAotOjEwMjUxMDAwM0Q5M0MwOTk4RTk1OTdCNzI3NjlDQThBM0Q1RTZFOEVBNgotOjEwMjUyMDAwN0U0RjNDRERDREU4QkVFNEQ5NkQyNkM4ODcyRjc1RkIxNAotOjEwMjUzMDAwN0E0MDlFNEVGMzdDODNEM0JCNkNCOEJGNTJFNkIzRTBDNwotOjEwMjU0MDAwRDk3QzEzRUMyNzhGNzc5ODQ5MDhGODVFRUEzMjEyOEMxMQotOjEwMjU1MDAwNTM3OTY3MDg5NDZGN0Q5QzBGRjVGMzdDNjU0RjAyRjYwNQotOjEwMjU2MDAwQjdFODMxMTFFMzQ4RDU3NDJDM0ZDNUFCQUY2MzA5REI0NQotOjEwMjU3MDAwREZFQUQ2QjFFOEE4M0MxREY0RDVBMjREMDIwOUM4QUNFQgotOjEwMjU4MDAwRkQxQTRBMzc5RkZGN0UzQzVGRDFBRjUzNkY1RjJFOTA5RAotOjEwMjU5MDAwMzUyNkQwMjM3QUZCQjI5MDc4NUEyNjgzREQ2QUQzM0U2MwotOjEwMjVBMDAwNUZEQ0YxMDBGNkJCRjgxMkU3MzE0RTM3REY5RjE1OTE4MwotOjEwMjVCMDAwODk1RkU0NDA5Qzc5MzhFNjBCQzZCMjM3QTdENzMyQTFEMQotOjEwMjVDMDAwRkM3MEFEMDVFMTQ3NkIxRDA4OEZBNjMxQkU1REI2QkI0MwotOjEwMjVEMDAwRjM5NTc0MTRFQkFFMjJCMDQzNzEwNzRBMkRCNzkzODg3QwotOjEwMjVFMDAwRkYyQzZEQkIyOUY0QTQwQzdDQTlDRDg3QUNFMjc4NTZGNgotOjEwMjVGMDAwRkNFN0M1RkM5RUMxQTVGQ0U3MkE1OEU3MDBGOTkwNTUwOQotOjEwMjYwMDAwODNDQzg3M0NCQjdGQkMwNTlFOEY1N0YwMzE5MUUyMDNBMgotOjEwMjYxMDAwRURFRkQ4RDc2NDcyNjlGQjFCMEIyRkIxREU1QjBFREZDOQotOjEwMjYyMDAwMzk4ODgyNjc0NTZFOEU3MjNCQjI3MEZCRUM4RDQzRTk1MAotOjEwMjYzMDAwMDQ5QTVGRkM2QjU2MzdGMjI1OEI0MzI4RTc1NEEyN0I0NAotOjEwMjY0MDAwNjMxN0FDNUYyNEJBRjg1RjgwQkM0OTU0RkNBQkU3Q0Y5QQotOjEwMjY1MDAwQzVDNEMzRUM4RTk1QkQ2N0UxNzE4OTNFQkVFQzc4MTBCMAotOjEwMjY2MDAwRjFBQUYwMTFEQzI4MzBCODAxODZEQzg2RTJGRURGMEQyRAotOjEwMjY3MDAwRThGNzdEODAzNjZERjkxMzYzNzcxNkU4OERDNUJBNzg3MwotOjEwMjY4MDAwQzEyNzQyRjRGREQ3MzRGNzcwQjY3RUQ5M0IxREYyMjI0NAotOjEwMjY5MDAwMTY5MThBOEQyQ0FFREU4NkY4MzkyREI1QkQ3MjJGQzgwNQotOjEwMjZBMDAwRjM3NjI2NEZDQjdGRjlEQzJGNDA0RjJERkREOTYzNzY5MwotOjEwMjZCMDAwRDA1MzFGNDg2REE5MzA1RUZEOEUwRDc2MkZFODJCMjk3MwotOjEwMjZDMDAwNjA4N0Y3M0YwODhBNTFFRkVCMDZEREZDMUM5MDc4QUQ4MAotOjEwMjZEMDAwOTAxN0I2MDI1OTBDMDQyQzMwMTNGNEU0REY3NjE4MUQ2MQotOjEwMjZFMDAwMTA0NzZENzhDNjFDMzI1MzdDQUNEOEM1RjA0OENCMjc1OAotOjEwMjZGMDAwNThGOTdFQzQ1N0MzNkVBRDFDMkVGREUxNjNBOTMyRUVCRQotOjEwMjcwMDAwRTcwM0U5MUM3RkU5QTBBQTU3NkMzNzYyRkVFODhBMzcyNQotOjEwMjcxMDAwNDUwRjBDRDM0MDdBNzE3REZBRjc2MTFFNjE0QUI3ODY4NgotOjEwMjcyMDAwNzZCMURBOTREOEJGOUU3QTNDMjY5MEIzODY1RDhDNEUwMwotOjEwMjczMDAwMEQzQTNGQjM4RUVCNjUzREJGQjdFOUY4OUNFMjA1RTM4OAotOjEwMjc0MDAwNjE0QTNFMkIwOTMyRkREQ0ZDQTNDN0YzNEVEMDc5N0RGNAotOjEwMjc1MDAwQjRGRDU1QkIzMDM2QzJFRjA0QjIyRTI5MURDRUI2RDcxQwotOjEwMjc2MDAwQ0M4NzNDODM1ODdDRkUwOTk3OEIzRUJEQ0ZFRDhDQkM1QgotOjEwMjc3MDAwOUI0RTBDN0NGRjBFMDZFQjhEMjFGQjM1MTQxRkY1REIwOQotOjEwMjc4MDAwOEM5RTAwN0Q1Q0ZGOUNFOEI1ODI5Rjc0QzQ4Q0RGNzdEMwotOjEwMjc5MDAwNThGNkRDQ0I2RjVENERFN0I3NkNBNzMxNzkwNjVCODZFOQotOjEwMjdBMDAwMTVGNEIzNDJBNzA2RTBFRjgyMDg1RDk2QkVGMEIyMDlDOQotOjEwMjdCMDAwRjIyMEUxRjkxQTU3ODQzRUNCNzY3NjlBMjBBRjUyOEZGOQotOjEwMjdDMDAwQzdEMkY2NEUxMzkzMkYxRDlEREE0RjRDMDdCQkRDRkM4RQotOjEwMjdEMDAwQTM4QjI2RTA4MzBGRjYwODA0NUM0OEZERkI3NURCNUVFNwotOjEwMjdFMDAwQjY4M0ZFMDAzQzgxRkQ1MEU4RDU0N0JGN0U3NDBCQ0QxQgotOjEwMjdGMDAwRkNGNTA0NkNFNzgwNzM5QTU4RjQ1QjA5NzMyOTQ0RkU3NgotOjEwMjgwMDAwRkVFOUFGRTlGODc1RUY5ODNEQjBGRUJBOUZERTY5ODc0MwotOjEwMjgxMDAwNzVGQzU1NkE2NDdDRkVCRDBEQTk2MDhGRUI4QzgxNTRGQwotOjEwMjgyMDAwMDc0MkY2QkM2RUVCRDc5MUZGMTZCRkZFRjU1NDgyN0FENQotOjEwMjgzMDAwRDMzQjA0RTQ5N0FFNzMwOEFDNkZEMTUzMzdFM0ZBNkEyNQotOjEwMjg0MDAwODkwRkY5QUZFRTdCNjIwNUY4ODkxNzI0NTIxNkNEQ0ZCOAotOjEwMjg1MDAwMUYzMjg0QzlDOTVGOUYzNkUzQTZFMEFGMjZDMkJFQzM1QwotOjEwMjg2MDAwRjE0NzkxRTVGMTkxOTVFODg3N0M5REFGOTU2QTYyMkNERgotOjEwMjg3MDAwNUZCMDMwM0E3RENDRUQzM0UxN0FBQzgxQjc2QUQ4N0U3NwotOjEwMjg4MDAwM0ZFQUIxMEYzM0JENjkyMEVGMTQwRkRBNzhFQUVCRDNEQQotOjEwMjg5MDAwRDJCOEZFQzNFRkE1RTA3Qjk0RUY0QUUxMzlCNEVGMzI0MgotOjEwMjhBMDAwN0FFM0YyMzRFRkYxQkM1NjM2RkU1RDdDN0MzQUVGNzg4OQotOjEwMjhCMDAwODhDQkZEMzU1NUJCN0Y1NUUwNTc4NzI4NzEzMEQyNDUxMQotOjEwMjhDMDAwRDRGQzE1NEJFRUI3NkY0MkJFM0FGRjI2RDMyQjJCODJCQQotOjEwMjhEMDAwQjNDQkIwQkVDQjE4NEE4M0ZBNjBFNzFDMDFGNTAyRjUxMgotOjEwMjhFMDAwMkZBMkM5RjU3NjIzOTc2QjZEM0Q5REE3MjRBOEYxQkI1OAotOjEwMjhGMDAwODdERDhCQUI3RDk0QjY1M0Y5MjExMUJFMzE0NTlFNjdDMAotOjEwMjkwMDAwNDdFNDUzQzlBRjU4QUNGM0NGMTRBOEQ3MEI0OTQzQjQyRAotOjEwMjkxMDAwN0E0MTc5OUYzQzk1MTJGNTFFNTY0NDFGMDQ5MEFFRjVGRQotOjEwMjkyMDAwQzZFMDBGQkUwQjcyN0NDNDhDRjcwQ0VCOUYzM0UyRjc1MgotOjEwMjkzMDAwNzJDRTNDQkJGN0FEREIyOUJGOUY2OTU3RTQ1N0FCNjc0RAotOjEwMjk0MDAwRjVGMjVCRjdGQ0NEMjQ5QUZDOUU0OUFFMjA1MUU1OTc0OQotOjEwMjk1MDAwM0U4RjJBQkZDOTJDN0ZGRjdGNUFDRjJFOEVBMTY3QUYzMwotOjEwMjk2MDAwMUREMkNGOUY0OEJDODYxNjNGRkNGMUIyNjFCOENGRDJEMgotOjEwMjk3MDAwRTE1NUMxQTc1RTZGQkVFNTk2QTNFQTRERkFGNzI2NTE3MQotOjEwMjk4MDAwRTE1MUMxOUZDMjk3NEI3RkIyMUNDN0U5RTM1Rjg1M0YwRQotOjEwMjk5MDAwMTVGRUVERTM0RkZEN0FCNTc4RDRENzFCRTBDRTUxNjEzQgotOjEwMjlBMDAwODRFRUM2NzU3NDdGMERFN0FFMkY4QTc4RUVEQTIzRjdEMgotOjEwMjlCMDAwREE1RDEwOTdFNTc5MzczRDBFNUU3NkIyNzI2RjhBNjlGRgotOjEwMjlDMDAwMjNFODBGRTU3OTZGMUNDQjQzRThBOUU4QjUzQjU1N0VCQQotOjEwMjlEMDAwRkQ4OTBFRDEwRTc5RjVEREMxRThGOTEyOTg0OTAxRjFCMgotOjEwMjlFMDAwOEMxOEY5MTRDQUZERDk2OUEyMzVDQjBGRkJCMjM2NzYyMwotOjEwMjlGMDAwREVCM0IwRTk1NjNCRjhEMzNEMUQzOUIzMkFDMThGM0Y1MgotOjEwMkEwMDAwMjBBMjRGRDUxM0NGRjNBQjAyNUU2OTA4QzU2QjBENUJGNwotOjEwMkExMDAwMzIzOTREMDJERjAxM0ZCQkE2NjNEOTBDRDgzNDJFNkM4RQotOjEwMkEyMDAwRDVFMkEzRDYzQTA3Q0ZCMzZBMUYzNTQ2Rjg4MjgwQkZGNgotOjEwMkEzMDAwMTMzNDgxOUY1NUY3OTRGNkY5NTJDOEFCMDJGQUU4RjhCRgotOjEwMkE0MDAwQzgwNzdDMTRFNTFFQzY0Njg1OEZGMjQ5M0VEQjI3RjM5NgotOjEwMkE1MDAwRjMyQUFFRDdBNjg5NjM2NzU1NDJGRUUyN0U3NjRGRTIzRgotOjEwMkE2MDAwNkM4NzQ4MzZDMjdBOUZFNUU3NTc4MTE0RTRDRjE1OTQwNgotOjEwMkE3MDAwOEZENTcxQ0U4RjgwQ0Y0NkM3QjZERjFGRkRGQzY4RDFFMgotOjEwMkE4MDAwQkRCNDQ5RkQyRkZFOUNGNzI0ODUxRkZERTJDOEE4REZEOQotOjEwMkE5MDAwNDBGOTk3NkY2N0ZEOTlGNDZGNUZCQUU3QjMzQjMwOEZFQQotOjEwMkFBMDAwNzI4Rjk5QzBCRUE4NjdDRkVGQjJFRTg1RjJBRkNEMUU5MAotOjEwMkFCMDAwOTg2N0NGM0FCNjNGMEVFQ0IxQTE1REVGQzk2NEZFNUZGNwotOjEwMkFDMDAwRjM4QjE3RjNCQUQxM0VBRDQ3N0FFRDFDQzJFRUE5OUU0NwotOjEwMkFEMDAwRURGOEM3MzEwMUYyRTkzQUU4QUFDMEVFRjI3RDU3QzMzQQotOjEwMkFFMDAwQUZFMzcwN0ZEREYzRTI0NUNEQkVGMkRGNURDRjBBN0U1RQotOjEwMkFGMDAwNUZBOUM3NDYyQUUxN0U3MThGOTNEREVGNkNGOENEQTQwNAotOjEwMkIwMDAwRUZDMzdEQzVFNUJCM0E0RDM1QjRCRUY0QjdGRkNDMDM4QQotOjEwMkIxMDAwN0REM0YzM0NGMzI3QTg3RkJCMTU1Q0VBOEUyNzVFNkQ1RgotOjEwMkIyMDAwMzU1MkZBN0QwMjNFREY1MEJBRUZGRTZFNDIzOURDQzMwOQotOjEwMkIzMDAwRTg4RjE3ODY4NzFFOEEwNzU4MTdDNTRCMURFOEM5NThBNgotOjEwMkI0MDAwRjg3ODYzMDhCQjNGRjJERjg3OEY0RkVGODBGMUVCM0JGNAotOjEwMkI1MDAwMjYxMjg4QTc0N0YwMjI3OEQ5NzMxQkU2NUREMEY1QjMxQgotOjEwMkI2MDAwRTc3QjJFRTY4MTdGNzRBOUY1N0VGQTdGNkNCRDg5NDNGMQotOjEwMkI3MDAwRkZCQkY5RkRGMTIxMzJDRTRGQ0ZGN0ZERjlGQTk3Nzc4MAotOjEwMkI4MDAwNjNGOUE3MzYwRkNFNzc5MEYyN0VENUQwRkY1QkY0MkU5NwotOjEwMkI5MDAwRkY1RjRCRUYwMzlDREUzNjA3OUNBN0Y0QkNGOENGMkNGRAotOjEwMkJBMDAwNzIxOUVCQUVGRjVGQkFFRTNFM0ZDN0UwQjE0Q0EwRjM0NwotOjEwMkJCMDAwN0I4NzA0NkYyRTExNjJFNzcxM0UzMTU0QkI4Rjk4QzkzOQotOjEwMkJDMDAwRkQ4ODk5QzlCNUU4M0ZDQ0Y0QjJGODRBMzMyOUQ4MEY0QgotOjEwMkJEMDAwRjdENDAyNUUxMUNGMUQzMDk5ODZFMkExNkI0RTdFMTBCNAotOjEwMkJFMDAwRjNCNkE0QzBDOEVGNDAxRUQ3MkRDQjNERUMzQjVGREE1NwotOjEwMkJGMDAwRkRENUNDRDRCMjMyRjBERjBFMzVEMTc5RDE3Njg3NkNFOQotOjEwMkMwMDAwMDY0NzMzNURDMjJDQUY4OEZFMUU4NUU4RTdGRDY5Q0EyMgotOjEwMkMxMDAwMEQ5ODE3MzJBQjU4QkJDRkI4NURCNzZGQjhCNTUyNUJFNAotOjEwMkMyMDAwN0YwQjc5M0EwNUYyRUY2RUE5MzM2MkJFRDBDREJBRjZDQQotOjEwMkMzMDAwQUI4NzNBNzA5REI3OTJDNjBEMkMzRTczNzk3ODNBQzAzNwotOjEwMkM0MDAwRjFENDFGMEYwM0UzQUQxRjlFRjg3RTEyNzM3OUU0RkVFQgotOjEwMkM1MDAwNzgzM0ZCRDhGRUQyNEMyQkI4QkZDNUYzRTQ1NjBEMEEyRgotOjEwMkM2MDAwOUY4NEVGM0JDRDdDNjgwNUJGNjYyRkZCNUVBN0FBNUYwNAotOjEwMkM3MDAwQzQ4QjgyRjdDQkM1Qjc0MjI3M0RERTE1RkMyQTc4RDMzQgotOjEwMkM4MDAwRDNFMTI5Mzg5MzQ4ODlFMDNGMDI5NTNDMTIxRjUxRTc3MAotOjEwMkM5MDAwNUJDRUVDRjMxQkFEODhDN0Q3QjZCM0ZCMEFBRjE1RDczNQotOjEwMkNBMDAwQjRFNjQzRjk1OTAxRkRCNTBCOTNDNzEzMEI1REVGMjE1MgotOjEwMkNCMDAwMjNEOUNERUU3Rjc5NjU0NzUxMjQ5RjQ1MjhGRTFEOUU3RgotOjEwMkNDMDAwMkI0MDNFQTE3QTVGMEFGOTg0RUE3NTQxM0VBMUJBMEMxNQotOjEwMkNEMDAwRjk4NEVBRjY5MDRGQThBRTg3N0M0Mjc1M0RFNDEzQUFDQQotOjEwMkNFMDAwQ0I5MDRGQTg2RTBGRjk4NEVBMzJFNDEzQUFEQjQzM0U3RgotOjEwMkNGMDAwQTFCQTBDRjk4NEVBRjY5MDRGQThBRTg3N0M0Mjc1M0RFNAotOjEwMkQwMDAwRTQxM0FBQ0I5MDRGQTg2RTBGRjk4NEVBN0FDODI3NTQyRgotOjEwMkQxMDAwRDc0MzNFQTFCQTBDRjk4NEVBRjY5MDQ3QThBRTg3M0NBNwotOjEwMkQyMDAwNDI3NTNERTQwREFBQ0I5MDJGQTg2RTdGNURGODI1NEQyRQotOjEwMkQzMDAwQjk4NEJDQUE2OTVGNkE3OTQzNTM5RUU2RjhCM0E2RkRERAotOjEwMkQ0MDAwNTdEREVGNjlFQUFGOTdDRjY4RUExNUZBREY5MDdCNEU1RgotOjEwMkQ1MDAwRjMxQ0NFMkMwMjQ1QjA4RjYxN0ZFNTlFN0Y2OEZBOTEwRgotOjEwMkQ2MDAwNDgwNUM2OTk0REE0MTFBMTA1RTJCNzE0QzY5Mzc2ODQwRgotOjEwMkQ3MDAwNTYyQUU2MDA0QjQ3Rjk3MkQyODE1RkI3MDYzNjAyNzNENgotOjEwMkQ4MDAwMUQ5QTc0MzEwQkY0RkY2QjkzNkY2MkYxMDc3RTRFMzAyNgotOjEwMkQ5MDAwMEJGRTI5NTMyNjRFRjgzQzAzRjZCNUNBQjlBNzNEMkNDNQotOjEwMkRBMDAwOTJEMDc4Q0E4NzYxMDFBMTIzOUM0MDQyNDk5NDBGQzMwNQotOjEwMkRCMDAwNzEwODVERTEyNDdDOUUxNDc2MjI0QzBFQTdFM0YzOTQwNwotOjEwMkRDMDAwRjAxMDg0QTlFMTFDODQ2OUUxNkM4NEVFRjAxODg0NDM1RQotOjEwMkREMDAwQzI1NzIwMUMxQTFFOEZFRkE1ODdGMzExNjY4NEFGQzE1RQotOjEwMkRFMDAwRTc5OUUxNDkwOEIzQzJBNUY4N0M1OEI4MDRBMTFDQkUxNAotOjEwMkRGMDAwMDE2MTc2Rjg3QTg0QzNDMzM3NjFCQjlDRjA2Qzg0MjM4RAotOjEwMkUwMDAwQzI3M0YxRjlDOEYwNkQwODQ3ODU2QjEwOEUwRTU3MjMxOQotOjEwMkUxMDAwQ0MwRDJGNDM3ODQ1NzgwOUMyMkJDMzc3RTI3QjYzQzI4MAotOjEwMkUyMDAwMkIxMThFMERERjhCQ0ZDNzg1QkY4MTMwMkZEQzhDRjA0RgotOjEwMkUzMDAwQUE3MDEzNDI0RkY4MDE2Qzk3MUZERTg0QjAyMEZDNkQxRQotOjEwMkU0MDAwN0MzRTNFRkMzMEMyMDlFMTI3RjE3OTYxRjgwOTg0NDVGNgotOjEwMkU1MDAwRTFFRjIzOUMxOERFODZCMDM4RkMxMzg0OTNDMjNGNDIxNgotOjEwMkU2MDAwNzg3NUY4MDU3Q0VGOUFGMDRFODQ5M0MzQkZDMUU3RDcxRAotOjEwMkU3MDAwODY3Rjg1RjAyQkUxQkRGOEZDQkE3MDI3NDI2RkY4NTVDQwotOjEwMkU4MDAwN0M1RTEyM0U4MDcwNEFGODBEN0M1RTFBN0UxREUxRDQ5NQotOjEwMkU5MDAwRjA5RkYxRjlCNEYwMTE4NEQzQzNFRjIxRkM2QUY4MDQ3OAotOjEwMkVBMDAwQzJCMkYwMTk4NEQ3ODczRjQwRjhCNUYwMzk3Q0VGODY3RAotOjEwMkVCMDAwRjBBNzA4Njc4NEZGODFDRkNCQzM5RjIxRUNEQkVGNEZFNgotOjEwMkVDMDAwOEU3NTJGRDE2N0Y4MDJGNkNGNTZEN0EwQkVGMzQ1Qzg0RQotOjEwMkVEMDAwMTZDREI5RDRFMzA5NzZENDkzQjNENkIwM0M5MjhEMjUwMAotOjEwMkVFMDAwRTdBNkEyNUZCQkQyMkNGM0VGNkJFQUY0RUFFNzU2RjA1OQotOjEwMkVGMDAwMUYzNjQwQ0QxMEQ2MDdFNDAxQ0VFM0ZDRkI1QUYxREVDRAotOjEwMkYwMDAwMTRGMDk3MzYxNjc0RDc0MzNDRTRDMUVDRUUyQTg0RTlGQQotOjEwMkYxMDAwMkNCRUJBOUVDMzA3RDI1OUJDRjRGNjUxQ0NDRTU2QURFNgotOjEwMkYyMDAwMUM4OUU3NTcyNDc5NzBFQkY4MDNEOEU3OTQ0OEZCRkEzQgotOjEwMkYzMDAwNEM1RUI2RjY2NkUxQkQ4MDQxRjYzM0Q4NzY5N0NBOEYwRgotOjEwMkY0MDAwNUE5NUVFMEJBNkEzNUZBNEJGOUYzN0U4Rjc5RjQxM0RCQwotOjEwMkY1MDAwRjFFNURGNkYxRkU4RkRFMzlDNUVGNjhDOEE1RDM4NEY3QwotOjEwMkY2MDAwQzk5QjA3RjU1M0Q2MEQxMTkzNjkzRkQ1QUQ4MjAzRUM4QwotOjEwMkY3MDAwNjRDREZBRkNFOTQwQkYwMkUyQzU3OEUyQkMxODc5NUQ5NQotOjEwMkY4MDAwNDdEMjU5OUVDNjgyNDYyMzgxQjhFMjAyOTk2MDNDNzdCNwotOjEwMkY5MDAwQzEyRTk2RTcwQjcxRDA3MkNBMTc3NTlDMkY5NjZGREEwNwotOjEwMkZBMDAwNjkwMjE3QjRBRTcxMzFDQjNGMEFCMjM4OTM4NUZFMDc4MAotOjEwMkZCMDAwRkNCQ0I0NzUzNkU2MUYyRDdCNDYxQjdGQUE4N0I4OEVGNgotOjEwMkZDMDAwMDhFN0M4REFFNzBEM0NDRUE0OEY1N0VBRTM0QjdGNEMwNQotOjEwMkZEMDAwRTdGMTI1MEZDQjNCMjI2MjA2QUVGNzAyNUQyRkU0NzNDQgotOjEwMkZFMDAwRjhFRUI2NTk0MEZGNTMzQ0UwMzk4OUIyN0UyNTVFQTkyMAotOjEwMkZGMDAwRTA4MUY0QkZDRjgwNzlBMTY3Rjc4RkM0M0NCNUIzQjI0RAotOjEwMzAwMDAwOUMwNkVEN0M1NDlDQkFBQzkwRkZFMDlCMDhDRjI5RkU1NwotOjEwMzAxMDAwMzA5RkE0QjcyOTAxRjM5MTRFNTA3RDJFNDNFMjkzQzMxNAotOjEwMzAyMDAwMzcxMUJFOUZENkZENEUyNkUxREY2RkQ0OUUxQjU4NUE0NgotOjEwMzAzMDAwMzFGRkJBREE0ODA3QTZFREFBNzcyNEUxRkQ0N0RBNUY0NwotOjEwMzA0MDAwREU2RTg4NDdFRTMwNjIzRTUwODBBQzcyOTNFMkZFRTc1RgotOjEwMzA1MDAwMEExNTFCOENDODFGMEI3NjNCNTk3RTU4QzBGQjI2RTQxMwotOjEwMzA2MDAwRUIyQkY0MzhCMTNFNjczQUU0MTUyRDY4QzlDRUM3QjBGMgotOjEwMzA3MDAwREI2RTIzRkE3OUNBNzlBOTQyQTdGRTc5RDExNTg5RjBDNgotOjEwMzA4MDAwN0RDNEE1MkRBRjIzM0QyOUJEMzRGNUY1QUQ5RkUyRkRFRgotOjEwMzA5MDAwMDE0QUFGNTMzMUU4NzU2QTIwN0E1OTMyQjRGNDgyQjhFNAotOjEwMzBBMDAwRjJBRDUwQjkyNjA5RTVCNDZBNUQ2ODY0QTM4QTFGRjVEQwotOjEwMzBCMDAwNzE3QTkyNjFDNUZCOEU0QTNFNzFEOTUwNDYwRjIyNzlEMgotOjEwMzBDMDAwNTI4MUFFRTc1QTBCOTE1RTdBM0E5NUZEQUIwNkU5NDEyMwotOjEwMzBEMDAwREVCMUUxRjc3NkU3RTU5MEY5MzdEMkU3RjM3OURDNzIxNAotOjEwMzBFMDAwNUVGM0Y1RTgzRjY3NjczMEJGRkVCNUI1OTA2QjQ5Qzg0MgotOjEwMzBGMDAwRUI2QjJEQzQ0QjlERTczN0Q2M0FCMEZDQTdCNTZFMkNEMQotOjEwMzEwMDAwQkZCRDU2NDY3ODY0NkQyRUMyNTMyNjk2Q0ZBM0M4MTMxMgotOjEwMzExMDAwNjUwMENDQUIxQjlEQzFFNDY4NzQ4NkIyQUZCQUNCMEQyMQotOjEwMzEyMDAwNzFFOUIyN0ZCRDUxMDhGOTNEMjk4MUU0OTlEM0FFNDVEQgotOjEwMzEzMDAwQkY1QjkzQTc1MTM5NDc5Qjg3RDE2REU0Nzk1RTlCMDRCMAotOjEwMzE0MDAwMEY3QzQ3NjU0MUM1MzU5QUY2MjQ3NzdDQTQwQ0Y2ODMzRAotOjEwMzE1MDAwRTc4RDJDNjg3MUUyRjdEQjZFOUI5MUE0Njk3RjRCNEI4NgotOjEwMzE2MDAwQkFBNjdDNUQ4NjhDRjM5QjVEOTZBMzc5N0U3QkQ1MTg5MQotOjEwMzE3MDAwNERCOTlBRkY2RTAyQjFDNDFCRDRFNzUzRDQzMzYyNzlDMAotOjEwMzE4MDAwREUwRUQ2RjY3Q0UzQzRCNEQ1NzRGQ0YzMDc4RDU4QUZERAotOjEwMzE5MDAwQTdDNzI5NTMwMEY3RTM4MUE3Q0QxRUIwNDNBN0UxMUVCRgotOjEwMzFBMDAwMTkyRDlGRkU5Mzg4RkFFRUI0OTEwNDFDNTQ3NTlGMTY1NgotOjEwMzFCMDAwQzg3QTgwNDQ2MkYyNzRFMTMwOTNBN0IyN0Y4OTA0RjY0MgotOjEwMzFDMDAwRTFFNEM3NjYzQ0JGQUJEOTIyOTAwMERDQTFFQUE1OTgzOAotOjEwMzFEMDAwQTdFM0RFRjUyMzMzQUU3QkUxMTY5MUY4RjBCRTkyREM3NwotOjEwMzFFMDAwMEVFN0Q2NzdFRDE4RUQ4MTczQ0I3OTM5QTE0Q0I4QjdERQotOjEwMzFGMDAwRDdGQkYzMzhDRkQzQjRCNkE2OUJCRDdGOUFFRUFGOUQ3NQotOjEwMzIwMDAwOTA5NzI0MTRFMEY5QzFDN0U1NkRCNTA2QzgzNzEwMEZEMwotOjEwMzIxMDAwQTY4MDlDN0VGQ0JDODhGMTk0MjUyQkZGNTRFNDAwQkQ2NQotOjEwMzIyMDAwRjY0QUZCNUJDNTc0OUM1MzZEMjI4RTdCRTYxOUYzMzYyMAotOjEwMzIzMDAwMTFFNUREOUIwNkRGNzU4REFDM0I4ODcxODY3REVFOEFERQotOjEwMzI0MDAwQkEwQ0NBQzcxRkQ2MDZGMzUwRUZBQzYxRjFFREZFRjgxOQotOjEwMzI1MDAwQTFFQjA1N0EwM0JGQUFGNDU4QzQ2RUIxNzMzMkFBN0NGRAotOjEwMzI2MDAwODY4MDdFQTgzMTdBRjBEQ0Y0NTRBQjExQ0ZGM0E4RkU0RgotOjEwMzI3MDAwQzdGM0ZGNTM2RDQ5MDZBNjdGOUU0N0JFNUIyMEM5MjY1NAotOjEwMzI4MDAwRjVCODBCNUE0NTJGRkI1RDA4RDkwNEYzMjUwRjhCM0U4QgotOjEwMzI5MDAwMzIxMUNBMkM1RjIxRDAyMkY4RDg3OThEOTZCRTc3QUUzNAotOjEwMzJBMDAwOUM4OEY3OEJGNUY5NTMwQUZDODRDQTk0NEY3NTBFQjRDOQotOjEwMzJCMDAwRjQ0NTc2M0U0QjI2NzQ0QkVBRkM3MTI1QkU0MkRDQUNFRAotOjEwMzJDMDAwN0ZFNTNCM0VGNUMzMUZGRkQ2NjQwQUNGN0FEOTI3MDdCNwotOjEwMzJEMDAwMkY2Q0I3QTE3RUZDQzhGMDUyRDE2QTBBQ0Y5NDA3REVFQQotOjEwMzJFMDAwOTcyODVEMUE0NURGQTM4MENGNjU4NkQ2QUQwMjlFOEJGOQotOjEwMzJGMDAwQkNGNzJEMzg4RkZGRjAzOUEzMDdDNTkwRTc2QjJERkQ4NAotOjEwMzMwMDAwRjE5MjYxMDNFNTA3QzEwQ0Q4Rjk3MjI4NTU3MEMzNTdEMwotOjEwMzMxMDAwNzkwOUU2NkZDQzI1RUQzQzNFMTA2NEU3NTgzMDA5OEEwOAotOjEwMzMyMDAwMUY0NzNEM0JDNzdBQUZEMEI2MTlFRUUxRDZFOEVFRURDOAotOjEwMzMzMDAwQkVDN0VGMkRGQzMwNDNEMEQ4RTdCRkYwNzI4RDgxQzlGNgotOjEwMzM0MDAwMjdEOUMzQkVCRjA4NzkyRjIzNTRGNjU0RDFBN0JGQzhDRAotOjEwMzM1MDAwMTg4RUUzRjZEOTU1RDI4RTdBQTU5NjdGMUZCOEZFMTkzRQotOjEwMzM2MDAwMzNCQkE3MjMxMzA3QzhFMzEyNDYxRTcyMTZFNDk5OEVENwotOjEwMzM3MDAwQjNENEY0REM3NzgwOUQxNzkzMkVCNDczMUYxQTgzQjVGMgotOjEwMzM4MDAwNUREOUYwRkVCNkY1MkU3Q0RGRTgwOTgyRkM3MjNCNjA2OQotOjEwMzM5MDAwQTE4QTAzRjRDNzYyQzJFNkI3QkM0RDA4ODY1NDcxMEExRAotOjEwMzNBMDAwRTVGNzM4MDhEODA1OTVCRUU5NkYwRkI0NzY2MDExQjcxOAotOjEwMzNCMDAwNzc4Qjg4MkVERkE3NEQ2Qjk3MkExMjZDQjhBRUE1NkQ2MAotOjEwMzNDMDAwM0NFRkI5NkY1RTIyRjk4MkUyQUNENjE3N0M2NTI2Q0U1RgotOjEwMzNEMDAwNUJGMDA0QTNDQzYzMzFFOTBEQzE3NzgwOTczRkNCRUU1RQotOjEwMzNFMDAwMDNFOUU3QTU1RkM3NjBFNzU5RUI5OTNEMTVCRTI3REMwOAotOjEwMzNGMDAwMzdBRTZFREUwQUJFMDk1QzUwNTJEMTQxQzE3QjZEODA5MgotOjEwMzQwMDAwRTFCM0I2NDM0MDdBRkQ4NUZCNTVDQTNEM0I4NUVFOEI2MwotOjEwMzQxMDAwNDlDNTRDRDA2QjhCMUZBNUZCQzJFQzA4MUZGNEQ5RUI0MAotOjEwMzQyMDAwOUQ0MUY0OTdDRTkwMzZCQjk1RjI3RkZEOTY5REI3NENBQgotOjEwMzQzMDAwODJGNzlFN0FERDA0RkM1REU1MEE4RDM0MzhFMTI3Njk2OAotOjEwMzQ0MDAwRUVGOTU2NTk2NjE0RkJBRUIzRTdGRjI5RkMxMDFFNjc3MAotOjEwMzQ1MDAwQzJGNzI4M0UxNjZEMTczMUFGNDFENThFOUZFRjA3MTA4QQotOjEwMzQ2MDAwNEY3NTAxODI3OTQ0NzU2RjhBOUU2NkZBQjQwRTdFQ0VERQotOjEwMzQ3MDAwQTdFMEYyRTdBQkUwRTc3RjdBREU3QTNGMjYzQjczNjBCNgotOjEwMzQ4MDAwM0Y0NkFGNUZGQUY5MzEzQUZCMDlGNzI2QzA1RUY2QTY3MAotOjEwMzQ5MDAwQjAzQ0YwRjM5MjM3RDE4NTdBNTlBNzc3NTMwQUYwQkI0NQotOjEwMzRBMDAwQTM4QURFQURFNTc2NEYxOTY3MTFEODNCNUE3RTdGQ0JGNAotOjEwMzRCMDAwMEI3Njg4M0ZGQ0U1RDExNzUyMzE4RjAyRUNDQkQ4ODhEMAotOjEwMzRDMDAwN0RCOUJCODY4RDc3RjcyRkUzMzA2RkU5RTNGMkFFM0MzMQotOjEwMzREMDAwRjBGQkFBQkVGNzNCQkJGQUJCQTY3NTZFREY3NTk5MzA1MQotOjEwMzRFMDAwNUY2RTBGOTc4QkRCQjIxQzYwMEZGREQxRjMyQUZBRURGNAotOjEwMzRGMDAwQkY2MkFERDM3Njg5NzVEQUI0RUI1QzAwRUI1NEREMDdCRgotOjEwMzUwMDAwQTlFMUVCM0NEOUMyRDZGNzVFMkI1QkVGQzI3RUVCMEM5OAotOjEwMzUxMDAwRTAzOUM4RERERjM3N0IwMkU4Njc4NEQwOEU5RkRFMjk4MwotOjEwMzUyMDAwMTJCODdGRDZFNzY3RThFQ0ZFMDVEMkI2MTVGMEIxN0M5RAotOjEwMzUzMDAwRDVEQkM3MjRDQTE3NEI0NjUxRkM1MDNFQTg3QUQ4OEMxRAotOjEwMzU0MDAwNzY3RUM5Q0ZEOUY5RTc4NzQyNDkxQTFFQzBFRjBCRDk1OQotOjEwMzU1MDAwQkY0MTlGMkZBNUZFMDFGODE3OTE3OUY0RDlGREM1OTlCOAotOjEwMzU2MDAwODUyQUJCM0Y0OEZDQURFMDcxQTgxNTFEQkZDM0RGOEJBQQotOjEwMzU3MDAwMTJCQzJDMUY3Mjg1RjIxRDk4RERCQUVGQzBDOEEwMDNFMwotOjEwMzU4MDAwRDgzRDc5MEJEMDI5ODNDODZDOUZBODhEQTdGRTZERTQyOAotOjEwMzU5MDAwQTc3N0FDNDJGRUVGMURBNUZFNUU2RjQzN0NDODA4RjkxRAotOjEwMzVBMDAwQkVCRDNCMDVGNDhCOTZERjU1NjIyRjIxOTBERkNBRTI0QQotOjEwMzVCMDAwNjBFQjMzOTlGRDEyQkM1RUNDN0IzMTUzQkFDNkQzRjFCQwotOjEwMzVDMDAwRUVDRjk0RDk3M0Q5QzFGMkJBOUYyMkY4REQxOTY1QkU0NgotOjEwMzVEMDAwRkFFNzEwMUZCNzgwRkRCMzFBRDBGRUU5RDdGRjhCNEM3NgotOjEwMzVFMDAwRTYyRjJGMTcwREU4NEZENzlCOTg1RkREQzNCRkZCRjA4OQotOjEwMzVGMDAwMjhBRjdGMzQ5M0Y5RDdERkU1RjE4MTFFRjAyM0UxN0MxQQotOjEwMzYwMDAwRkE1QTMzRkU1RTBGMjE1MzMxNEUyRTExQzY3RjkyODIzRAotOjEwMzYxMDAwMzc4N0Y0NDk5RjdDQTNCRkRDOUIwMTc4QkE4Mzc0MTk3OAotOjEwMzYyMDAwODE5RTMzOEI2N0NCNzA2RkUwNThBQTA1QkZBMzQ0RkYyMAotOjEwMzYzMDAwMkFBMDlGQjlCQzlGNDM0Njc2NEZFMDE4OEM0MUQ3MzVFRQotOjEwMzY0MDAwOTdDNzkzOEZDMTY3NDBFOUY4Qzc4Njk4RDA4RjBEQkNBNAotOjEwMzY1MDAwNjg0NjNGRTFGRTc4MTZFRjIzQzk4OTEyRjBGOUVENUM2OAotOjEwMzY2MDAwNEZDRDlCNkNGNkMyRjlDMERDQzlGNzU3MDBBNEZEMDUyRAotOjEwMzY3MDAwMDhDNTU3OTVBNTc3NDMzRTFEQTdDOUMwRUM3QzkzOEIyMQotOjEwMzY4MDAwRTA3RDQ5QjJCRUJCMTBGMDc3MTU3NThCMjE0RjlFQUUyMQotOjEwMzY5MDAwN0VENzE3NDkwM0YxOTFGNjlFNDIzREM0MTVBRTI2OENBNAotOjEwMzZBMDAwQzE4QTExQkY5QTcyQkQ4OUQ1MUZDQzNDMzZGM0QxMENBQgotOjEwMzZCMDAwQkFCRjg2NkMyNkIwMzM4MDIzRTA4QkVBNDREQ0U3Q0VDOQotOjEwMzZDMDAwODIzQzdFMTc0MDA5RjlFRDQ2ODkwNDBDMENCNjU4RjE4RQotOjEwMzZEMDAwM0I0NDJDQUY1RjM5MDdCOUI5OTg4NDEyRTlGQTQyMDcyNQotOjEwMzZFMDAwQjRGNzI4NkUwRDE5NDJBM0UxN0M0NzBBNzUwMkZFMEM1RgotOjEwMzZGMDAwMTZEOUU4QTBFMzU0OTQwOTA1ODBGN0ZBNzU4MzlCRUY4NwotOjEwMzcwMDAwRjFDQzBGNzBCRUY1RjBCRDJCOThFNzM3MDRDQ0U3OTlFQwotOjEwMzcxMDAwNEI4NTFFRjhGNDBFODlFQzEzMEIxOEZEODAwRjFCNUMxMwotOjEwMzcyMDAwNzIwMERCQUQ2NDdDQUVEQ0RGNTBFODkyNEZCQjU3RTM0OAotOjEwMzczMDAwNzcyRTlGMUZFREE3QzUwRUVGOUJBMkM3NERDRTcwRjk0OAotOjEwMzc0MDAwNTBGQ0I0NjU1QzZFOTcyOTdDRjdBQzU2NUU2RDU5MzJCRgotOjEwMzc1MDAwRkI5RTFBRjg4MzE0NkY3MzM5OENDNUY3RjE1OUFDRkZDRgotOjEwMzc2MDAwRjgyQzE2NUZGQkRCNjU4RUI3REM0QzQyQjhFRTE3Q0Q0QwotOjEwMzc3MDAwNDg0NzY1REM1OTFDNUFCMjU4RkVCMjMyMEY4NTdGNkI0MAotOjEwMzc4MDAwNDkyM0U2REZENEYyNzg4QzgxNkExMkNDRDM2REZCM0VGQwotOjEwMzc5MDAwRTZGN0VCRjM4NEE4ODM4NDc5Njc0QkI3RUI5RkFCRTI0MgotOjEwMzdBMDAwMzlBMjQ2MkY2MTlDNTMzMEY1MkU4NEY5MDk1Rjg5RjNDNQotOjEwMzdCMDAwMDBCRkNGMzVCNTYzM0M0MERGQ0VEODI2QTA5QzFCNUI1NQotOjEwMzdDMDAwQTgzRjI1RjBGMzJENUEzNkI3MEFGOEZCMEU3MzMzN0E2QgotOjEwMzdEMDAwQzdFMUY3Q0FCOTVGNURDQkU5NEFCNUY3NzRCODA3NTREQQotOjEwMzdFMDAwMEJGRTE0OUU3RkYxRUY0NDZENjE3RUE0QzRGRERGMDVFNgotOjEwMzdGMDAwQUQ1QTNGNjNFRTdBOTU5RkM5ODBFNjVFQkQ1OTk3MUYyQgotOjEwMzgwMDAwNkVFNEZFQzY3MTUzRUYzOEQwRjdGQTdCRjZDNzBENkM0NQotOjEwMzgxMDAwRkU4MTU0ODJGOTkxQ0EzRDdCODlGQjkzMEEzRjBEQzkxMQotOjEwMzgyMDAwMzI2QUNFQzU5NEZCOUM1NUEwQTdEOEY3MEU3NEY5NTQwNAotOjEwMzgzMDAwNTZGQ0VFNEE5NUMwQkY1N0M5RTM4QTY3QTlCRjg5REYyNgotOjEwMzg0MDAwOTUzOTFBODc3NjRCODkzM0Y2OTREODAyODY0NEY4OUNDQQotOjEwMzg1MDAwMjUyQkNGNEJCQzdCMjZGODk5NTU3NjkzMDRGMEEyQTE3QgotOjEwMzg2MDAwMUJDNzU5MkQ3NkQ5QjJCMzIzNzFEQzhEMjVFM0I3NDA0MAotOjEwMzg3MDAwREVEMEFDQURBMzY3NTkzMkYxOTQ4M0RGNDcxQUZCMUE0RgotOjEwMzg4MDAwRTRBRENGRjk5Q0NFMUZDQkUzNjY3OUU5RkVBOEU3RTU2RQotOjEwMzg5MDAwREUzQjJDNTQ0NTJGQ0FDQTlCMjU1MTdCREVGMzU4RUZFMwotOjEwMzhBMDAwNTYyOEFGQ0U5QTM4NEJBMjc2QjBFN0MxREUyQ0Y4ODYwOAotOjEwMzhCMDAwRjBFQUFERDdCMEZBMjZBNUJGNkI2NjQxN0U3MENGMTM5NAotOjEwMzhDMDAwQUMzQzg3RDYwN0MwQ0ZFNUY3ODBBQUFFMTY1MENGQUU4NgotOjEwMzhEMDAwRTZGNjQ3ODkxRjU1MTk1RTYyNzAwQUZCOUQ4RjRCQjU0RQotOjEwMzhFMDAwMEI2NDU1QUMwNjNGNDdCNDlEQzJERjEzRDgyQzdCQjFBNwotOjEwMzhGMDAwN0M1Rjg2NkY3RTE2RUNBMzY2MEIwMTEzREM4QjdGMzMzNwotOjEwMzkwMDAwMzg4QURCQUZBOEJGN0JCMTNBOTNDOUU1QkE2MUFDM0Y1NwotOjEwMzkxMDAwMDU1RkI0OUZCQUFDQzJDQkVGQzcwMUZEMTQ2QUZBNTk3OAotOjEwMzkyMDAwRjk2NUU2NzNCNEZGN0NFRUY5MzJGM0YxQ0FEQUY5MjhFRgotOjEwMzkzMDAwRkU5OUYyOURCOTU3QjJCRERGODFGOTJERkIyNkRCMEY1MQotOjEwMzk0MDAwOTM1MzU2Q0RGREZGNzM4REJGMUMwNTc2RkZEQ0IzRTZBOAotOjEwMzk1MDAwMjRFMEMzNjUzRkZENTU1NjJERjg3RkRDMUYzQUQzNzkyRgotOjEwMzk2MDAwQzQwNDc5REYyQkMyRUNCQjM4MEQ2MUY2OUQ5QzE1QkJGRQotOjEwMzk3MDAwM0E0REQzQzc0MjFFNkJBN0E5NTQzNUJGRkFDOEVGNUNCNgotOjEwMzk4MDAwNDkzN0FBRkM5ODI3QjMwQzNDREVDNjdFRDc3MUQ5NEZDNQotOjEwMzk5MDAwM0ZDMEVGMDkyRTMzQjRCRjBGNzlCRUU0NkExNjQ3RDM5OAotOjEwMzlBMDAwQUZCMzk5QkY3NzBDQ0VGREEzQzQwQkI2NjUzMUJGRTNBRgotOjEwMzlCMDAwNjI4RTM3MDhFQjVDOTc0NUIwMkNDNkY4NkVENzg3QkM5MwotOjEwMzlDMDAwQkZBQTc4QTZDNzZCOEE2QzE2OTlFMkJCRjA0RDVGMzMyRAotOjEwMzlEMDAwRTQ5REQ2M0U5NTVEMjBEMjc5MDQzM0E2RkMzODZCQzBCOQotOjEwMzlFMDAwRjg2NjJGOEI2Rjc2QjBGODY2OTVBQkVCMkU2QUE0Qzg5RAotOjEwMzlGMDAwNUZCNkNFN0RDODcyMkQyMTM3M0M0RUZBRUVGQjQxREMxRQotOjEwM0EwMDAwQjBDQ0FDQzhDRkFBNTk1MzI3QjM3ODE5OTRGNzY3RDU2RgotOjEwM0ExMDAwM0YwNEYyQjM5RkZGM0VEQkJDODlFM0UyNDFDRUJCQjM4MAotOjEwM0EyMDAwMTMwQzBFMkFGRjNCRDNBQkZGMDI3QzMxNkZFMkI1RDMwMAotOjEwM0EzMDAwRTE3OTg5RDkzNkFBOUFDNUM3OTEzRjc2QTY1Nzg0QTA1RAotOjEwM0E0MDAwMUVEQTQzRENDMzY3MEFBNURDNEFEN0UxRkJCRDg4NzlFRgotOjEwM0E1MDAwRDNCRUJDMDQ1RkI0N0IyQTdCQjhCREZBNEIxNjNCMEZDOAotOjEwM0E2MDAwREE2RkEwRjMyQzg4Q0M0MzE5OUY3MkZDNUQ1RDEwQjcxMAotOjEwM0E3MDAwNUEzNzI0MUZGQzY4N0I0NkM5QTlBQ0MyQzhGOEY2MENBQgotOjEwM0E4MDAwREZFQkVBRjFFOTcyRjNFMEY5NjBFNzcxODhEM0UzMTQ2MAotOjEwM0E5MDAwQTc1QkM1NjQxMUJFOTREMEE3RDc2RjlDOUFBMDI5Q0YwRAotOjEwM0FBMDAwOTk5MTQ0QkNFQUI4RTk5Qzc0NERCOUIyMkE0N0QzRkU1NwotOjEwM0FCMDAwRjY4NTYzMzRGNUU1RTZBRTA5OEQ5N0UxRUYzN0Q4OUVEQwotOjEwM0FDMDAwQzFGQ0RFQTMxRDE3REU5QTBCN0VFQzc2RDEyM0QwRjU2OAotOjEwM0FEMDAwMkM3OTcxQzc1QjkwN0Y3RDE2N0U4MkE0ODBDNUM1RDg4NgotOjEwM0FFMDAwRjcxQUY5Nzk4Q0U0OTUzNEU3MzEwNzVFMzA4MURGQUU1RgotOjEwM0FGMDAwOEFGM0VCRUVFNTFEQzQzOEJFRkUzQzQ2QzkxN0ZGQjJBMwotOjEwM0IwMDAwRTczMUQyMzBGREVGNzk3RUY0MEE1RDE5MjlEREREODlEOAotOjEwM0IxMDAwRjQ2OTNFQzBGMjk4OUJBOURGMDJERjEzRkJFQTJFNzMyMwotOjEwM0IyMDAwMTBCRUUxRkVGMUFGNEU5ODY0RDVCOTRDNDNCODA5N0ZBMQotOjEwM0IzMDAwNTdCNzc0RjcwOTNDQjdEOTkxQzVGNEY2OEE4RTRGNEQ0MwotOjEwM0I0MDAwNzA0RkVBQUIxRDJCNTE5RUE3NTNGRDk1NDhGOUE2QUJDQwotOjEwM0I1MDAwOTM4Q0RCMDVGMUU0NkMxQkU2RTEyQzZCQjkxRUUzRDQxRQotOjEwM0I2MDAwODlFMUI5MDhFQkRCQUVDN0ZFOTY4NzZGQzJGMjBBRkVBOQotOjEwM0I3MDAwN0JCRUZCRTNCQkE2ODMxRERFRkYwQjI3RUUwNzVGMTNCNwotOjEwM0I4MDAwNDNBMzlFODQ3RUNDMzZENDBGRTVFOUYzRDY4MTlGQjA2MwotOjEwM0I5MDAwM0YzRTMwRjY0RTNBNUVGOUNGQkU4QTc5RTgyQjc2MDk4MQotOjEwM0JBMDAwMTgzNzJEMTdDOTdFMDFGMkVGQzM3MUQ4NUZCOUY4Qzc3NgotOjEwM0JCMDAwMDkyQkU5RjMxQjRBOTk1RDJEMDcxRjg3RDY4QjQ1QjY2NAotOjEwM0JDMDAwQ0RGODNERTkxOEJGOTNFNjE5QzZGNDhBQjE5QkNEN0JDOQotOjEwM0JEMDAwNUE3ODM2RjZBN0Q0MTcwRDFCQUVGOTlFOUYzMTY1QkJGOAotOjEwM0JFMDAwQjRDMDFBNTk4RkIxNUI0MEY4QjVGMDE4ODQwREJCNjZBQwotOjEwM0JGMDAwNEI5MDdGRkVGQkRDRUYyNzAzOUU2ODdCRkMzRTU4N0ZFQgotOjEwM0MwMDAwN0QzQzMxOTE0NEQxNUIwQTM0NzMzRDNDMTdGNDMwOUNDOAotOjEwM0MxMDAwREI2NzdCNjcwQzRCODFERjIzRUM5NjJDQTA0N0FEMTY0RQotOjEwM0MyMDAwMDdGODJGMzM4QkYzRTU1QUQ1QkFDNDk3NkVDMzdCMTBEMAotOjEwM0MzMDAwRTZFNDVFMjNEOEVGQjkxNEFBRjVGNkZDMTg3NkU2QzZEQQotOjEwM0M0MDAwNjFDQTNEOUIyNkY2RkJCQjhBN0U3RkY3RUJFQzNCQTg2NwotOjEwM0M1MDAwM0MzRUEwQzhEMzc1QzMwQzlBRUZFOTc0MDk0QzJFMDIwMAotOjEwM0M2MDAwM0Y2N0U3MDJEM0IzN0QwQjYxQkU1RDI1QTRGMjc5RDQzMwotOjEwM0M3MDAwQTM1RDU5NzAxRkZEM0YzNTdGNEE1RjBCRDBERjJFNzU2NgotOjEwM0M4MDAwMTM4ODYzMkMxOUE2RDgxRDI2Q0Y5NzlBRkZBRDdDQkQ0QgotOjEwM0M5MDAwQUY4OUM0MEY3Q0YxREE3NUQ3NzU3OUU5QkMzQUVGMURBRAotOjEwM0NBMDAwM0YxRUVDODIzMkRFM0RDMzU4OUUyOTcxRjQ3RThFRjlCMAotOjEwM0NCMDAwODY3QjEyNjQ4OEVCOTdDMzk5Qzc4NDg4M0YwRkY5ODg4NQotOjEwM0NDMDAwMTAzRjZDRDg2MzdFMUEzRTkwREE2MEE3RkI3QjJCRTQzMgotOjEwM0NEMDAwMDVDNjg1ODA2RjNCN0YxQjI3ODFGRDE4MzNDMjc3Q0ZEOAotOjEwM0NFMDAwQjA0Mjc4M0U3QTJBN0NDN0M3REI2MTk2MDhGQTQxREU4QgotOjEwM0NGMDAwN0IwMTVGQjFFNjdCMjlGREE1QzhBMzlFQ0Y3QzJENEMzRgotOjEwM0QwMDAwRkU3QzVDMEVBQjM5REYyRUUwNzI1ODJENzkxMkUxM0M1RgotOjEwM0QxMDAwNjZGRTQxMTFFRjQ1MkU1ODIzOENEQjA1RjEwMUQ5ODY1MwotOjEwM0QyMDAwRjdGNDE1Mzk1NEU0Q0QwODdDMzkxRUY4OTNGMTY1N0QxQwotOjEwM0QzMDAwRDhDOUU1M0I5QkY3Q0JFNEEwNUM2NEY5NzZFNTYzOUNDRQotOjEwM0Q0MDAwQjg3RjVFMTE0RUMyNzY4QUJDMkE3MkJBM0VEQkY3NjMzOAotOjEwM0Q1MDAwNTg3Nzc5MzM5NTZGM0E4RTZGREQ5MDA5MjAyRjExM0U5OQotOjEwM0Q2MDAwMzEzOTgwOUYyODlGQjg2QjU1N0NEMERDRjk5OTA0N0M1MQotOjEwM0Q3MDAwNjI5QzJDMjA5Rjk4MjkyQzU1RjE1MTQ1OUY3RkUyOThGOQotOjEwM0Q4MDAwOUU0QUU3MzE3MzdEMzY3RTRGNTlBOUZGNTkxRkJGMENGQwotOjEwM0Q5MDAwOEVERjlGRTJFRDE3NTg0MzIzQzFBRjM1MzZDNjc5RTA3OQotOjEwM0RBMDAwM0JGMjY3OTM2NUQ0NjNBQjM2MDlGOEUzODRBQjhDMTVCQgotOjEwM0RCMDAwQTVFMDVGQUM3QTQyQzBGODFFRjgxREEwN0Y4QTBFMzdERQotOjEwM0RDMDAwOUFENEU3MjBCNzg1RjNGMEJDRkFBNkYwMDg4NEMxMENCQQotOjEwM0REMDAwREY4QkMwMTdENUUxNUIzODFFRjNBMjlFRjc5RDZGQkM0OQotOjEwM0RFMDAwMUZFMzZBRTc4MzY2MEZGQkNFOTgzNjdFNTdFOEY1RTA1RgotOjEwM0RGMDAwRjk5RkYxQTA5MTZDOTMyMUVFRTYxM0YxN0MyRjkzMzg5QgotOjEwM0UwMDAwQkUyREIwRjgxREM0RjM5NEY4OUI3MjRFQTdDNEUxQ0M0QwotOjEwM0UxMDAwRjAzRDVDOTUxREJEMjBCNTY1QzEzRUE0NUYzQ0FFODQwMAotOjEwM0UyMDAwRDlGRDhGQjYxQkQ5QkRBRENFM0YxNjE5NjhGRDg3RDkxOAotOjEwM0UzMDAwNUU4Q0NCRUQ3M0ZCREU4NkY1MkNCRDMxRjg1MzIzMkQ2NAotOjEwM0U0MDAwMkY3QkYwMDUzQkM0Q0IxNTdDQjY0QkExOTFCMDVGNkFDQwotOjEwM0U1MDAwQTc3ODg0Rjg2MDdCQUI1ODE2NjRGRTRFQzI2QzU1N0UyMgotOjEwM0U2MDAwNDUyQ0JFNUUxQUNFNDFGQzI4RjY0NkQxREZCRjVDRUI4NgotOjEwM0U3MDAwQzY0REE5QTJDNzJGNjU4NzE0RkU1RUNFRTU2MDM5Qzg3RQotOjEwM0U4MDAwMDE1MURCOUJEOTE1RjBCQjY2MjQ1N0MwN0JBRTExN0I3QgotOjEwM0U5MDAwQzNFNDQxRDFEMzk0REY1MTZFQ0E3MzMyMzFBRUFFRTg4MAotOjEwM0VBMDAwNkRCRDNEREEyQkI2N0ZGQjZBMzg0NzkzN0Q3MTMyQzUxNQotOjEwM0VCMDAwQ0Y5NDlGRkNFMzg1Nzc2ODU1RkRGMzNGOUEwQTc0MkFGNwotOjEwM0VDMDAwMTkyMzEwMzhDN0JDOTQ5RUZDN0ZEOTVCRjNGOTAwODA5RQotOjEwM0VEMDAwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkI1NUIxNQotOjEwM0VFMDAwMEI3ODU0RDVCNURFNjdDRTlDOTk0OTMyMkZGMjgwMjBFRAotOjEwM0VGMDAwMjQ5Qzk5M0MwODI1RTBGMDg4ODQ4NzlGMDcwMjAxODQ3MAotOjEwM0YwMDAwRTAwNDZGMTEzNUNBMjQyMkNGODQwNDk0Q0YyOEY0Q0U2NAotOjEwM0YxMDAwMDkwOTA4OTREQUEwRDY1MjhCNzY0MkMxNTI4QjZENzg4QgotOjEwM0YyMDAwNThEMzhBMzAzQ0E0NDFBRDFEQUY3REQwMkE3NDUwQ0EwRAotOjEwM0YzMDAwNEI5MDg4RjU4MkI3NTRFRTVBNkI5RjkzOTkzMzQ5NTA1MgotOjEwM0Y0MDAwREJBRkUzRTdCN0IzQ0U1RTdCRUZCNUQ3RkFEN0RBNkI3QgotOjEwM0Y1MDAwRUQ3MzEwMEY3RTJFQzk0MzE4QjNBRTJDNjc4QTlEQjE0NgotOjEwM0Y2MDAwN0JBMTJEODFGNjNBRkU2RTYzNEM2MjRDNjkwNTlBQjFENQotOjEwM0Y3MDAwQTg3OUE2MjNGNkRDMjk5QjE4Q0JDMEU3MEQ4QzE1MzE1OAotOjEwM0Y4MDAwMzY0M0U3N0I3RjM5NjNCNzMwNzZCRjlCRjE1RjNEMzBDNwotOjEwM0Y5MDAwRjU2NUVDREEwMDEzRjE0REIxQjIzOUZFNDI3ODZFOEU2MAotOjEwM0ZBMDAwNjRDN0NGNTdFQTk5MjBDQkMwOUEyNzBCMzRFRjhDOTU4MgotOjEwM0ZCMDAwNTFCMzJEMURGOEVDMzZGNzM2MEZEMEM1QzNFNDc5ODUyMwotOjEwM0ZDMDAwMzE3RUYxMkJDQTVEMjYzMjlCOTAwQUYyOUFBMzJDQjU2MgotOjEwM0ZEMDAwMTBFN0Q3RTU1NkY5M0E1RjIyNzc5QUM2RkYzQjkxRDVBRAotOjEwM0ZFMDAwQjdDMkY4REZERDc2NUI0NDAxQjkwRUFDMTgzMTQyOTRGQwotOjEwM0ZGMDAwNjNFQjE1Q0IxNkRBNUY1OTFBOEMxREM5NThDNzZCRDZGRgotOjEwNDAwMDAwRDAxNjkwOUJDMTdDMDJGMDVGN0E2RDUwNjgzRDZDRUREQwotOjEwNDAxMDAwMDRFQkI4QzY4MDU2RjdBNkM4QjhBRkRBN0QyOUM0NUZFRQotOjEwNDAyMDAwOUJFQzBBMDlEMDVGRUJFQ0M4Rjc4MzNDMjVGQjkzQzJGRAotOjEwNDAzMDAwNkMyOEFDQjMzRkM5Q0M2MEREMkIzOTBGMTRDQjQ1RjhFRAotOjEwNDA0MDAwN0NFMDQ0QzEwOTQyRUZCNTlBMTlGMEE5RDlDQTY4RDRGNQotOjEwNDA1MDAwNUI0RkYyRUJGMjI1QjZGQUZFNEJDQjA1RDVFNTYyNkM3MQotOjEwNDA2MDAwNUE4OTQzMzU0MUJCRTg2QTBFNjMyMzE4NUJCQzc2MkE0NAotOjEwNDA3MDAwQjVBRjA0MzM0MUM5OEM0REJBNUEwRUNBNjBBQ0U2RUFGQQotOjEwNDA4MDAwOURGNDdDQzlENTE0QTJBNzdEM0I1MjhBRkI2MUFGMDg4MQotOjEwNDA5MDAwNkMxQkM4NUZENkVGQkU1NTBDRTQ2QjRGNjY0M0Y2QzA5MQotOjEwNDBBMDAwQkVEQUJENTlCRTQ2RThBRTZFOUU0QUZDNjVCRjk4M0M3RQotOjEwNDBCMDAwMDVGN0I1NjQwRjMwRTNCODAyMjE5NDg3N0EzQTY1Mzc4MwotOjEwNDBDMDAwQjFERThDM0Q2NEUzRTI3RjVBRjdBNzkxMzI4Q0ZGNzQzNgotOjEwNDBEMDAwQTQ2MzE4MDNENjQzNjJFQjUzNjMwNEIyNjczQkRBNzNGRAotOjEwNDBFMDAwQzJDRkZFQjFGQjJGQzAyNzVEMTU5OTAyRjI1OEFGMEE2RgotOjEwNDBGMDAwRDQ0NkU0QzAyMkQ0MDdGMDMxMDY3Q0Q1QkJGQThFMEMzRQotOjEwNDEwMDAwRDhCRjBBOUU3RTI1Qzk4MDQ3QTlGQTEzMDlGMTY0ODVBNAotOjEwNDExMDAwQjYyNEFFN0Y4RTg2OTM0NDNERDZDQTFDRDc1RkQ1MEY5QQotOjEwNDEyMDAwRUVGQjhBNzg1QTg1NzhDQUY4OEZFMjY5MTVFQUE5MUJFRQotOjEwNDEzMDAwM0MzNTIyQ0VGRTU1M0NEREMwOEUzRUU2ODlFMTZDREE5MAotOjEwNDE0MDAwOUIxQzFGMkNDN0UxREJDNjA4MkYyNDc3QkIyNTJCRDQ3MwotOjEwNDE1MDAwMDg3Q0Y3QTI1RDExNUZENzU5MURFQTczMEVEQTM3MkQ3RgotOjEwNDE2MDAwODZENzk3M0M4MTlGQzREQkI5M0Q1OTJENUM1QUY4NTVFMQotOjEwNDE3MDAwRUM3QzM3QzNCODcxNkY3QTFENTNFMEY5MUM2OEUzRTMzOAotOjEwNDE4MDAwODYxNUVENTdEODc1N0YzQkJFQTY5RDlGRDVGOEJGQ0M1MQotOjEwNDE5MDAwQ0VBRjY5NzY2NjZFQjBFMzQ4QjI5RjhDNzY0REI0M0I4NQotOjEwNDFBMDAwREExNUVENUVCQkNGQkFFNTQ2NzYxRDlDMUI2OEVGMkU5NwotOjEwNDFCMDAwNEUzMDc3QjIwOUU1OENEOUM1N0EyN0UyRTZEM0IwOTlCQgotOjEwNDFDMDAwQTE3RkY1NjQ1NzY5MTNEN0JCNEVBRjBFOUJBNzg0RTg1OAotOjEwNDFEMDAwM0M2MDY5RTU0MzA4MkY0N0ZGOURGODUzNTZEMkZBNzdCNAotOjEwNDFFMDAwNUIyRkM2Q0VDODc1N0UzM0YwQ0YyQTg2QUU5QkIwN0ZEQwotOjEwNDFGMDAwNjlCMzYyQzZGODAyN0Y4RUExMTkxNTY2MjM3RDZBRjQ0MQotOjEwNDIwMDAwQjJDODQ0RDhFRkI0QTczQUZCNTVFQzlGMzRDRUE1OEQ4NQotOjEwNDIxMDAwNjcwQTZDQUI5M0ZGQjQ1QzFCRDk0MDcyMzc3MzNCMDZFMwotOjEwNDIyMDAwQTI2NkZGOTAzODdBMjREMDhFMzhCQTM4ODFERUNDRjk3NQotOjEwNDIzMDAwRjExQzcxRDMzQzIxMUVFRjYxN0U2MTM4RDJGQTdDOUE2OQotOjEwNDI0MDAwMUZCMDhFRDI1RTYwQkYxOTdCMDRGNzdBQjBGNzNERTNGMgotOjEwNDI1MDAwMkU1OUQwM0U2NTI1RDEyM0ZENjBCRkZGMjczRkVBQjcyOQotOjEwNDI2MDAwMjdDMTczOEM4MzIwNkZCMkE3QTE1OTM1NkJFM0MxN0YzRgotOjEwNDI3MDAwQUEzNTM1NUE1QjA1NDUwNDNCNTUxNzBCMjFBRkE3QUI1MwotOjEwNDI4MDAwMUU5MzNEQzZGMzBDN0Y2NkUzNzg2NjE5RjlGNUM2QTM2NQotOjEwNDI5MDAwMUQ2OUJDOTdDNjg3QUQ1RjYzRkRCQkM2MzEyNUQ0NEQ5NAotOjEwNDJBMDAwOUNDQ0Q0RjlBRTAxQURDRjBGQkFCQjEzRjYxN0VBQzY1QQotOjEwNDJCMDAwREY2NDBGRjc5Rjg4Qzk1NEMzNDA1RjA1OUVFRjM1REI2RAotOjEwNDJDMDAwNkUwNUZCMzI4RThGNkY3ODlFRjZBQjg1NUM1QzI1NjE0OAotOjEwNDJEMDAwQkYzNzkyRDdFOUQxRkQzOEI2NUZEOTM4M0U3QzIzN0QxMAotOjEwNDJFMDAwQTU3N0QxOTc4NjhGMDU0NkJDQjhDQ0ZFQzM5RjgyMUNBQwotOjEwNDJGMDAwQUU3NEMxQUQ4MkZEOTdGODkzMzYzMDE3REE1RkM3RjcxOQotOjEwNDMwMDAwOEZGQzRBN0ZEODVGMTJFQkM0QUIxMURGMjFGRjQ0RDA5MgotOjEwNDMxMDAwRTMxMkE2Rjc2RjY5QzY3M0M5NkZFQUU0RTc3OERGMkI4QgotOjEwNDMyMDAwNzQ4RTJGMDBGQ0I4MTgxRjNGRDFEM0QyQUNEQUM5MUU0RgotOjEwNDMzMDAwRDQ0Rjc0RUUwREYwREU5QTQwOEY0QkYwMEYwRERGRTQ5QQotOjEwNDM0MDAwOUYxOEI3NDEzRjc5RERDNDhENEE0REJGMTcwNTM2MUIxNQotOjEwNDM1MDAwRTM1RTY0MDJDRkY3MjI1RURFMzY3ODc4N0VCNzUwRDMxNAotOjEwNDM2MDAwRTM1MkFEOEQyNEM3RTlBMTdGQ0NDRUYwMEJCMzAyQzNERAotOjEwNDM3MDAwQkU0OTRGNzdBNzZCRkI1NkMzRkVFOUIwQUY0ODJBMUI3NwotOjEwNDM4MDAwMjIwMDRFNTZCNEVDNkQ2RUNBOEE4REZGNTY0QkQ4OEYwNAotOjEwNDM5MDAwN0FFODlDNEZERDE3QzFCODdGQjdBNkE3ODY5NkZEMTFCNgotOjEwNDNBMDAwOTVDNzMzMDFGREFFODYwMDAxMzhEODIzQTgyMkVDQjNBRgotOjEwNDNCMDAwMDY3MUQwQ0QzRUE3NzVGNTFCMzU2MUJDMjJERDYwN0M1MgotOjEwNDNDMDAwNzk1NzFDMkEwOUUzOTk5NEZFNzVDNjZCNzY5QTlFNjAwQwotOjEwNDNEMDAwQzcyOTA5NzY5Qzk4NDA1N0U4NzRDODEwQ0ZGNDM4NTcxRAotOjEwNDNFMDAwRDVCNjcxNzU2RjkwNjNGMTc2MDE4RjA5OENENzE2NjEyMAotOjEwNDNGMDAwMTg2M0NGNzhERUYwREI0NzIzNUU2NUE5MUZDNEZDNjczNgotOjEwNDQwMDAwM0Q2RjQ1NkM4MEU1NzI4QzY3ODRERkRGMzYyQjYwOTdFQgotOjEwNDQxMDAwM0JEMURGODk3RURCQUZCODEwM0Y3NUFCMzM4MTNGRTQyMgotOjEwNDQyMDAwRjk1REIzMEQ1OEVGNjlEQTI4NjE0RUIzRDVGMzRFQjM5OQotOjEwNDQzMDAwMTlFQzc3RjdDODVGMUNDMUY5Q0NDMkJCOTFFOUMyMEQ3QQotOjEwNDQ0MDAwRjBEQTlDQjA4RkNEMDlCNDlBQzBGRkY0OTdDNEY3QTZGOAotOjEwNDQ1MDAwODRGMTJCMTNGQTM3MjREMDlCMTJFOEI1QzZGMTk1NzM3QgotOjEwNDQ2MDAwMDVGMjkzNEFCMDFGMkFFRUNCRkNFNkQ3OUVDRTdDQTE4NAotOjEwNDQ3MDAwRjMzQzEzRUM5NDI3MTk3MDNGQUQ5MUQzODczRDI3RkQ5MgotOjEwNDQ4MDAwNkIwQkUzRTg5NjBGRjQ3ODQ4Mzg5NjE4RkZERDlCQ0U2NwotOjEwNDQ5MDAwNTQzQzNGQTQxRUUyRDlBRTlFRTI1OTQxRTI3OUM3RkJFQgotOjEwNDRBMDAwRkY4QTdGRjZDNUJDOTMxOUNFRTU0M0EyOTEzRTIwRUE3MAotOjEwNDRCMDAwRkVENjExNzlEODhFMEY3NUZBOTIxRkYzRjE2OURGMzdBNgotOjEwNDRDMDAwRUUwQkVBNDJBREZGQTI3RjIyRjhGRkI0RUZFQUZEMTc0MAotOjEwNDREMDAwRkQ0QURDM0U3NUZFRDI3RjVFMTc3MUJEQkZCNDVDRjA1NQotOjEwNDRFMDAwNkY4NUY5MkEyNjg0RjNFQUIwNERFNTJEOUMzMzIyOUU5MAotOjEwNDRGMDAwNjNCNTM2RUU0RkE1QUY4OTdFM0M2NzJBOTJDMzc5Q0I3MAotOjEwNDUwMDAwMEFFM0Y2Qzk1QUYzNzE5RjA3NTY4ODY0MUZCNTkxRDcxRAotOjEwNDUxMDAwMjM1NUNDNjc2MTUwMEExRDcwQjlFQTVGMDBGRTQzMkIzQQotOjEwNDUyMDAwQzQ3QTNDRDc0RUQ0QTdGNTQ2RjkwNzdCNzlCRDc3Qzg0NgotOjEwNDUzMDAwMzVBMEY3ODM0MDFGNDg5OTYzOTE4MUVGQzBFMzkzQThBQQotOjEwNDU0MDAwM0QyODJBNkIzQTAwQzc1NzNERDdGQ0Y2NDFEOEVGMjJFOQotOjEwNDU1MDAwRkRGQ0JERTU4QUJGMDFFMkY0MTU4RjRDRTMwM0E5RUUzMwotOjEwNDU2MDAwREU2RDk4QUZBRTk3RDgzNjE5RTVGMTNENEZCOEY5OEVBQwotOjEwNDU3MDAwNzVEODdBOTBBM0IyNjE3MDZGQ0NERkFBQkU1NzVFREFBRAotOjEwNDU4MDAwMTdGOEFBNTY0QjNFODFGOEQ4NTA5NDNCQjA3RTkyMDU1RQotOjEwNDU5MDAwRkJFNzM2NjlBRDNBOTlEQUZENUZFQzdFNzMyOEYwNzc3OAotOjEwNDVBMDAwQUMxMzdENUI4MDc5REY1NUFGQjMwQUU0RkEzMDg5Qzc3RAotOjEwNDVCMDAwRTEwRjJFRTQzQTUxQ0VFRjdBMDNBMjE3RUM1QUU5NzREOAotOjEwNDVDMDAwMjQwQjc4NzhCODY1RTc0Qzk4Nzc0MzhFNjJGNjE2QzU2OQotOjEwNDVEMDAwRjhGNzdGMjFDRUMxN0NGM0Q1MEI1NUJEMDM0MDNCQkQyMQotOjEwNDVFMDAwMUNBRkZCQUU1NkY1QUU4QTNCRUZFNzVEMzQ5MzlFRjcwQQotOjEwNDVGMDAwNUJFNDg3MzFCRkRDOUY5QzI1QThFNEM3QUQ2OUU1RTA5QgotOjEwNDYwMDAwMkY3M0I1RkMxQUYwNTJCRkJCOUI3M0ZGMUYxRTkxNzAzNgotOjEwNDYxMDAwNzZDQTVBQ0YzRTA0MTAxRkY4NzZDNjM4OTQ1MzFGNTdGNwotOjEwNDYyMDAwRjRGQjQwQTMwM0YxREM1RjFFMUU5RjQ3QkJCMjI3RENGNwotOjEwNDYzMDAwODRGQjg4RTEyQ0Y1MUQzQzJGMjk4RjA2M0FDRkVCREE1RAotOjEwNDY0MDAwQTgwMkFFRDgyMUM4RkY1MThFNzRBNTE0RkJEOTRBNjBDOAotOjEwNDY1MDAwODAzOEM2MzI1QkYzRTNFRjIzNjI3OUVBMkEyRDFFNzBCRAotOjEwNDY2MDAwQkVFM0FBODNFQUQ2RTMzQjkyNDI1OENGMUM1N0RGNzNERQotOjEwNDY3MDAwMzA3QjNDM0ZGNzkzRjk0RTg3OEE4N0YxMTk4N0MzOENDQgotOjEwNDY4MDAwN0EzRDYxMEU5RTdFMTRDNkNEN0I0RUEyMzgzQUVGQjlCQwotOjEwNDY5MDAwOEM5NTFEMTgwRkMwOUU3OUFDRUJCQUZGRUQ5NTY4RERDNwotOjEwNDZBMDAwMUVGRDg0QzlFNTEzQzdDNUY5ODkzQUEwMUNGN0QzOTM0OQotOjEwNDZCMDAwOUZEQ0U2MUQ1MEJFQjVCMDY3M0Y5OUFGRTVFREE1Q0ZENQotOjEwNDZDMDAwNDk3RUM0RjlGQzIyODc5OUREMEM3NUY2NzNBRjZGNDMwMAotOjEwNDZEMDAwM0NDRTVGOUEzNERDMEE4MkNGN0ZDRTRBRjY4RDNBMUNGQwotOjEwNDZFMDAwQUExQkZBMDM0RTg3QjkxN0I0RkZBNUUxMjFEQTkwNDQ1QgotOjEwNDZGMDAwNzU4QUQ4REI0MjcxNEY1QzUzMjRBMzdFNEE0NDY2QjY2OAotOjEwNDcwMDAwQzFCOTIyM0E3REIyOUZEMzRENkVBOERCNTYzQjhBNjU3NAotOjEwNDcxMDAwQjRFRjBBQUY0QzdBRUJFQzc3Q0RCRTVEODBCQUU2MzJFRgotOjEwNDcyMDAwRUMyMzBEQzY5REFCN0ZFQTk5NTEyMERGNzkxNjlBMzVBRgotOjEwNDczMDAwMEFGNDdFMTkwRDBERUI1Q0RFMjM4NjU0QUM4QkNEOEExQQotOjEwNDc0MDAwQjkwQ0UyREUwMkM2RkRCREU2RTg2RUNCNzhGODczNDEzNwotOjEwNDc1MDAwRERGQ0U5NTgxRjJEMEM0OTFGNDRCNURBRTczQUZDRkY5MAotOjEwNDc2MDAwMTk3QkNCODJGOUVERTJFREM2RTdFMDMxMTZGNEFCOUFBNgotOjEwNDc3MDAwNTZFM0YzNUFCNkUxMTM3MTI4QjZFNjBGQTIwNURBNzNEMQotOjEwNDc4MDAwNThCN0ZFRkQzRjBGMzkxQ0M3NTdFRDc1QTQ5RjFFMEM4RgotOjEwNDc5MDAwN0YwQzY3QzM0MUIzQjA0RUExRUIyRTg0NURCRDQ4RjJFMAotOjEwNDdBMDAwOEFBQjkyNDJBODQ3MzE5QjlGMEY5Mzk5MTA0QTQyNDA4RgotOjEwNDdCMDAwQjg2MURGQjBFRTk1RTBCMTIxODcwMTEwRTI2MzIzNDhENAotOjEwNDdDMDAwMkZBNzgyODBBNzgxQTAwRkE3OERGOEM1QzdDNDkwMTUxOQotOjEwNDdEMDAwRDYyRDQ5NjM0QTJGRDRFNzMzRTU4QzM5NDg5RkFBMUI2RAotOjEwNDdFMDAwRThDOUU5NzU2NjhDNEZFN0I0Rjg1MjI5MzA3RjJCRjk5OAotOjEwNDdGMDAwQkQyRjFCRUJFMzc5Q0YyNTkxRkRFNjNGQkZGMDhGM0Y0NwotOjEwNDgwMDAwMTg4OUY2MkE0QjhGRjdBM0M3MzVEQ0MxN0NDQzk2MUFFMgotOjEwNDgxMDAwOUJFNzRDQzNCN0IyNTE5RTkyMUY0MTVEODlGNUE2MTgyNAotOjEwNDgyMDAwNzhFNjZFOEE5NzI5M0U4QTVCRUVFODc3NDYyMTRFMUEzMwotOjEwNDgzMDAwNTI4NkFENjc4ODkzQkVEOURFQzJEOEY4RjlBQjU2RTQ4QwotOjEwNDg0MDAwRjNGMTUwQUYzQTMxNUUyNUQxN0VBQUY3NTgwOTI3OTU4QQotOjEwNDg1MDAwRUI0NDg1Q0VDNzJDMEI5RDhGMUYzNDI1MTE1REREQkYyQQotOjEwNDg2MDAwOThGQ0FDRDJDNDAyQjgwRkM4MDUzMzI5QUU3Mzk1QjMxNwotOjEwNDg3MDAwNkEzQjUzNzZEQjMxQ0U2Rjg4ODg0RUIyOEZBQUQ5Q0Q5MgotOjEwNDg4MDAwODJGNkQ5RTI0REEzRjVFN0EwOEVFMURDM0FFOEQ1RjQ1MwotOjEwNDg5MDAwNjJFMkY4NjFGQjg0RDAzNjhBNEY3NTMyRkE3Rjg1NDkyRgotOjEwNDhBMDAwQTAzODk3RTg4RkJCMzEwOUMzNzFEOUJFRkI3MTVDQ0RDRAotOjEwNDhCMDAwMTM1NkRGMkEwRjk3NDFENEU1MDEzQ0Q1OTgyMkYzN0VBOQotOjEwNDhDMDAwODhGM0ZFRDI0QUY3MUFCNUIwOEYyNDI3RDUxN0NBMkUxRgotOjEwNDhEMDAwOTBCRkQ2Q0NDQzE2QkM5NzkyNzkzQ0QzRTVBOTk1Q0JBQQotOjEwNDhFMDAwMjcyMzRFQTFGRjk4MTlGQTZCMUMzQzFFRDdGNEUyRjc2MAotOjEwNDhGMDAwM0RDQzYxMEI2RDhCNUYwRjY1Q0VFMUUzNjQyN0ZBRDk4OAotOjEwNDkwMDAwNjhDMjBCRkFCRDA5RkEyRjMxREU1RkUyMkM5NkEzRjBFNAotOjEwNDkxMDAwQkNEREM0RDZFMjNEMDlDQTMzNjg2OERDQkE0MEY3MUQ4NQotOjEwNDkyMDAwOEE3ODVDNkFGNjNBRDAwRTY5QjM2NkUzN0EyRjg5MTQwNgotOjEwNDkzMDAwOTdDMDk5OUUyOEM2RkNFRjI1NzEwNEQ2QjE5NUVCMEU2MQotOjEwNDk0MDAwOTU2RTQyN0FFNzMwMzc4QTUwRjlGMzc3RTk3QzVBQUNCMgotOjEwNDk1MDAwRTEyQzhBNzkzRjlFNTc0MEVGODRGNjNEMkZDRjJGMDJGRQotOjEwNDk2MDAwMjJCRkM3NzlDRkNCRjM3RjVEQUY3QTdGQ0QzQTg5RUM5OQotOjEwNDk3MDAwNTFCMzlBRTNBMUE2RTE0RjM0NkY4RDIzRDIxQkVENTFDMQotOjEwNDk4MDAwRjNCMjc0MEJFMkZBOTQxNjI3QUExQUIyQzYxRDAzN0M3RQotOjEwNDk5MDAwNTQ0OTJFQjcwMDhGQUFENTMyMEJEMkQ1Q0QwMkQxRkEwOQotOjEwNDlBMDAwN0EzNUVCRkVEMERCNTRDOEU3QzNENkFBRTEyODM2NkZEMAotOjEwNDlCMDAwNDYzNjlFNjcxRkVENDhDQkFFOENCM0ZCNDc0REFGMzhGNAotOjEwNDlDMDAwNjUzQkZBNEQzOENGOERGNzMwNEI5MzdDNUJDODRGQjlDMAotOjEwNDlEMDAwM0QzRTZBQ0FEQjgyRjczNDczREQxMTg3MDBGRDczMUYyOQotOjEwNDlFMDAwQ0U0OUM1NzNFRTg0M0I2Q0MxRkUxM0FEMUUxM0QyOEE1MwotOjEwNDlGMDAwREIzRDBFNjlDNTdDMzNEMTFGNDEwODZGRDVFQTU2QzQzMwotOjEwNEEwMDAwRjExMjgxRTNBNjdBQzcyMThCMTdENjRCQ0FFMTM4QkJENgotOjEwNEExMDAwRjhEMkJCRjk3ODVGNTA5MzFEQzlDN0YzMTc3MDk1REZDMwotOjEwNEEyMDAwMEZFREYyQTI0MDc5QzI5MjFEQTI5MjM0MzQ4NkFCMjVEQQotOjEwNEEzMDAwODgyQkYwRkY0NTFBQUU5NkVDNzlFNTExRjREMzI1ODg2MgotOjEwNEE0MDAwQTdFMTVENzEwOTc1RTU2MTdBQkVBQkE1OTRGMUYxODdDNwotOjEwNEE1MDAwMTE3N0ZBNzkwRjc0OTM4NEY3NkExNjhEODY3NTkwNEVFNAotOjEwNEE2MDAwQ0VFMUI4ODFGRTg5QkM1RjJEQTQ3Mzg0NDUyRDk4MEZEQgotOjEwNEE3MDAwRDc4QTNDNEYwMDdGQ0FDNDNDQTJCNjRENTIzQkUzMjVDNwotOjEwNEE4MDAwQUU4QkZEODVCMUZFOUU3MDMzMzg4NzlGMjc1NTBENTYzRQotOjEwNEE5MDAwM0E4RjA2NkI3QTg5QUU3QkQ5ODlCOEI4RjhEMkExMjM1MAotOjEwNEFBMDAwNjNCMEJFREEyNUI4MzFERTc3RjE0MzRENkZCNUE4Mjc4NAotOjEwNEFCMDAwMjdFRDkzRjJBMjVBRDQ4QjMzQTZBNzRFN0ZEMzcwNTEyMQotOjEwNEFDMDAwQ0JCODFFNzRCREQ0OUEzNTNERTlGRERBRjhDMjFDOEUxMAotOjEwNEFEMDAwQzM2QUE2RTk3NUNGNDBFRUVGOUE3RkVCRTc4OEJFQkZDOQotOjEwNEFFMDAwNDAyQTFGQUZFM0VCQkUxQzhFRkIzMURBM0VBQjAxMzczMQotOjEwNEFGMDAwQkU0MkMyOTc2MkI5NDVBQkZCQTFFQkUyQ0UxNkJBMzcxNAotOjEwNEIwMDAwRDJFREE5Q0JCRDVDNUIxRkUyQjREMjJCMzU2NkU3QTgyMgotOjEwNEIxMDAwODkyREU4RUU5RURBQUZFOTRGQjJGM0I4NzJCMkExREZBOQotOjEwNEIyMDAwRkRGNUEwQkY0NTNCNDQxRjI5MEY2QkFFQjg3NUFEQTY4MAotOjEwNEIzMDAwQTg4M0YyRDJDNzQ0MzdFRUFCRTQ2N0U1QjdFM0JFNzVBRQotOjEwNEI0MDAwREM0OURCMDU3M0RCNDhBQzMzN0E5MUZFNzVGOTRBRkEzMAotOjEwNEI1MDAwRjg2RkVGQzU3MTE3NDY3OTc0Mzk0RjBBNjFCMjk3QkE4OQotOjEwNEI2MDAwNTM3MEYzM0MzNzZBQzFGQjQzREQ0RjEzRTVCRDJGNDc1QwotOjEwNEI3MDAwRDBGMjAxNjE4QzcwMzNDQUUzOTNEMUJGMTk5QzgzMjRCNgotOjEwNEI4MDAwOEZGREQ4MEE1QTRGM0RCRUMyMzMzNEI2Q0UwOUQ1NjEyNwotOjEwNEI5MDAwNDZCRTEzOENDNzAxMUQ5NzI3QjVGQjg4OTNBQjVGQTE1OQotOjEwNEJBMDAwM0M1ODVGRTdBMUFFRUIwNEVBRDNCQkFFQTNGMzJGRDYyQwotOjEwNEJCMDAwRjg3NUJGNjg0RkU1RjgyRjY5RkExM0YxRTk3MTE2N0ZCMAotOjEwNEJDMDAwNzgwRkE3RUI1M0Q3NUI5QzVGMUFGNEEzRkI5N0VFNEZDQwotOjEwNEJEMDAwQkE1REZGNTVCRjYyMkIzMzI4NUY3RDVDREIzN0Y5NDgzOAotOjEwNEJFMDAwRUZEOEI5ODBGOEM0RjNDRTZBMDE1Q0RBMERFNzI2RTVBOAotOjEwNEJGMDAwMzU5M0ZCN0Y2MjA5NzRGMzVDRDc1M0UyRjM1ODNERTVDQwotOjEwNEMwMDAwQ0U0NkZENEZCNjY3OUEzMDBGNjA0RDk5ODc3M0UzRjIzOQotOjEwNEMxMDAwQjIwRkYxQkUwQkUzNjkwNkUzRUYzMzE4Nzg2NURDNzk3OAotOjEwNEMyMDAwQUVFNzZCRkE3OTBEQkYwRDlEQjg4NEYxQjVFOUNBMzlDRAotOjEwNEMzMDAwRUM1RjMwNzI2OTNFRTYxMTk3NzJCQ0I0RUU3OUQ2NkFDOQotOjEwNEM0MDAwMTkwRkYzNTU5RjhEOTQzQUU1NThCRDcyRUJERkMzQTI1RgotOjEwNEM1MDAwMEJFRjAzRjc3ODBDRjU0MkY1ODVDM0U0REYzNTJDQjI5MgotOjEwNEM2MDAwMDZFQkRCQ0E3NUVGOTY4RDQyQkJGRjE0RjI3MUUwOUIzOQotOjEwNEM3MDAwREJFQ0ExNzNFRkRDRDYwNzQ2NjAyOTVCQjkzQThGRTgxRAotOjEwNEM4MDAwODVEQjFFRTRGNDNBOUVDRjU1QUUyRTdBMDFFRkUzM0Y2QQotOjEwNEM5MDAwNEM1MjRBMTFERjFEMUIwNTM3RDY1QjYzQjcxNUFEQkNGRgotOjEwNENBMDAwMDdGQUM3M0EwNkY0NDJCOThGNkZGREIwNkMwQ0Q2MEQwNwotOjEwNENCMDAwRjUyMkY5OEJCMkY1QTk1OUQ4QUZCNDg5M0VEQ0VBNUM4QwotOjEwNENDMDAwRTY1RTc5MEZFMkRCRUMyMjdGM0JBMTlEMTM4RDEyQzdEQwotOjEwNENEMDAwRDkxQjVBOUMzOEE4QzU4RDgzMUEwRTRCMUExQkYzNEQ0RAotOjEwNENFMDAwQjg2RTBCOUM0RkIwRkYwQThCREMxQUM2QkFFRkI1M0UwQwotOjEwNENGMDAwQkUyREE4MkYyODUzMzMwMTQ3NjcwNTlFN0YyRkIwMzA2NAotOjEwNEQwMDAwMUJFMkVBQTgxNDU5OEVGMjFGNURFRTE4RDY4MDAyODhDNQotOjEwNEQxMDAwRDc2RTQxQkY1MEI0M0EwQkVBMjY1QTU3RDc5N0JFRkUxQQotOjEwNEQyMDAwNTEyRDhFRThGM0U4RTNEQTMxOUZDMkYzNDM5M0Y3NUM0OQotOjEwNEQzMDAwRDM0RjY3NjE5RTcwNkU3QjVFMkE4QkQzRkIzOURDMTc4NQotOjEwNEQ0MDAwRTg3QjIxQzRDNTVERERENDdGN0ZDQ0QxRUYyMzQyN0NERAotOjEwNEQ1MDAwMURFRERFRjBBOEQ0REMxRkRGREY0MjFFN0YyQTNFMkZEMAotOjEwNEQ2MDAwM0ZEMzkyNjQ0MzNDNDIxRTZGN0MyRUYxRjMwNEYyNzhGMQotOjEwNEQ3MDAwQzM3M0YwOUI1M0M2N0M1RkFCRUZDNDBBNTdBMDlCMzg0QwotOjEwNEQ4MDAwQTRCNzg5NzlGRUI5MUM3QkZBRTkxNEQ2MjVDRkQ3RkRFMwotOjEwNEQ5MDAwMkU3MUJDOUVENzc3REVCM0JDNkY0Rjc4MUYzM0NBQzU2OAotOjEwNERBMDAwNkVCMEZFODUyMDE4MDY2QUJGMTZGNDVEOTA3NzYyQ0E2MQotOjEwNERCMDAwM0Y3NzQ3QjA5RTZDQjZCQUFEQTBERjUzRTg1N0Y4MUVGOAotOjEwNERDMDAwRjA2NTkxRTc4OTM2RTYwQjAzMkU0RUZENjE4NDBGRkRGOQotOjEwNEREMDAwNzBERUZCRENFRkU2QjUwQTIxN0NDNTdFNzhFM0UzMjJEQQotOjEwNERFMDAwRjIzRkI4NTk2MDdEODRCODNBRUJFOThEQjNEMEVEMkUyRgotOjEwNERGMDAwRkIwMjZCRkEwMkZGRTVFRDgyNEYyNTA5MTU3QjQyN0QzMAotOjEwNEUwMDAwNzVBNEFGREM3MzdERjVFRkQ2NTVGQTNENTNBMkRFMzNDMgotOjEwNEUxMDAwNzNCNUZBQ0FDNzdDNDZCREYzRkE3QzNGQzBBNzc4Nzg2MQotOjEwNEUyMDAwNTdCRDVGMDgwNkE4OEVGQTM4Qjg4MERBRDFBRDJEMjVCNwotOjEwNEUzMDAwRkQ0MEZFNEJDMkM5MjdDNkEyRkYzODVDNzQ0RjcyMjFFOQotOjEwNEU0MDAwNTg0NzJGMDEzRjZFMUI3MTZEMDZFOEU3NTVCQkNCOERCMAotOjEwNEU1MDAwNzFFM0UzNjAzRDNERUZDNDhCODZDRjVCRjcxQzEwRkIzNQotOjEwNEU2MDAwMzFFMkRGM0IxNkY4RjdEOTVERjg1QUEzOUJGNzZEREMwQQotOjEwNEU3MDAwQkU5MDQxRjFGN0EzNUFCREZERDBEMjUxN0RGMEI5QkUyRAotOjEwNEU4MDAwREZGMzhGNzIzQkVCRjI5RkRGRkU4MDEzRjNEMzAzM0YyMAotOjEwNEU5MDAwNENEQjNCMUFFRDlCRTI3MjIzOENFNjZGMTI1OTYwMDRFNwotOjEwNEVBMDAwNjNBNzM3RjEzODc0RDZFNjdBNjEzQUU4RURFQ0U2M0I3MQotOjEwNEVCMDAwN0I2MzNERjhBMEQ0NjFGMUMxQkNCRUQ3Q0E5RDc4N0ZBOQotOjEwNEVDMDAwRjYzNzczRDRFOUM2MTZGOEMzMjg4NzM5MjQ2MkZDMUI2OQotOjEwNEVEMDAwMzM4NUQxN0JDMDMxNjEzMzkzM0RGNDhBOUU3MDMyRkFDMQotOjEwNEVFMDAwODIzOTE0MDZGQTIzN0MzRjg4RTdGNkI1NjRGRTlFNUU5RAotOjEwNEVGMDAwN0JFRkY3RTBBRkY4N0Q1QUU3RkQ4OTc2OEYzMDU2REIyMAotOjEwNEYwMDAwRUZDM0I5QTk1QzRGREFGMzkyNjJGRUZDQ0NFNkREMzM2NQotOjEwNEYxMDAwNzBCRTczNUIyNTM3Q0FGQkYxNTY4OUU2NUYwNDc1QkMyQQotOjEwNEYyMDAwMDk3MDc4MTZGMDg2RjE2QkQxRUY0NTFGNDJGQURDNzZGNgotOjEwNEYzMDAwNUUyNzJGMDJEQ0UyN0Q3MUNENTI0OUIxQjhCQUUyQjFGMQotOjEwNEY0MDAwNDRFN0RCMkI1MDdEQURFMzcyOTExMjJBMjVCRDZCRjg0RgotOjEwNEY1MDAwQjRDMTdGRDdFMUM4RThDNTVBRDdBMDNFMTI3MUZBQUZGNQotOjEwNEY2MDAwRDZGRDhCMTE5N0REQzU4MzA0MUNFOEZBRDJGMTEwQzM3RQotOjEwNEY3MDAwMjcyMzVDRUE3NjRGNkQxRDM2QkUxRjBENTAyOTVFQThCMwotOjEwNEY4MDAwMTM1ODAxRTYwNThEMTY1NjYwNDYxQzk4OTI3REU4RTc5OQotOjEwNEY5MDAwRjUzNkU3NTBCQzY3QkE5MkM0REI0NzRDRUVEN0IxNUUzQQotOjEwNEZBMDAwQkU2MjkyMjUwMURBMTNCOTFFQjJDMzIzQTI2RjEyRDJEOAotOjEwNEZCMDAwNTI3QTk0RUUwN0M0MTI5MzYyQzJGM0FFRDE0QUYxMjI0MAotOjEwNEZDMDAwMzFERTNDOUVDQkUzNzAzRjA0MUJCNDNGQ0U3NTUzMkJDOAotOjEwNEZEMDAwQjEzQUNBMUZGNDE2MzY5ODg1Rjk0OTc5NEFFQTY3MzIxOAotOjEwNEZFMDAwQjAzQ0JENzVDQTRDMzNFQ0FGN0M2Q0VBRjIxQ0M4MkNFQgotOjEwNEZGMDAwMzc2RjlEMzExM0RGRUI5NjhGNDg3REQ5MEJGNEYzQjlGMgotOjEwNTAwMDAwNjU5Q0JFMzlCNTQ4MDJCQUExRTE4RTk5MTM4MUZGRDVERQotOjEwNTAxMDAwNUNFNUM5RENBMkQ4M0FGQUJDRjBGQzdCQjk0MEJGREU0MwotOjEwNTAyMDAwMjdCMDA5REI1QThCN0QyREM2RkI0QjQyQzcxMjkzMTg2NAotOjEwNTAzMDAwRTM3RjQ3NjAyNzVFMTU2Mjc0NTQ2MkQ5OTg0RkZGMTg2QQotOjEwNTA0MDAwREY3OTE1RjVEQzlFQzk1NTVBNzJCQjc5NUVDNUQ4NkEwMQotOjEwNTA1MDAwRDQ2Mzk1RkE5QjYzOThBRkMxQ0Y2RjAzQkNEREExRTEyOAotOjEwNTA2MDAwQURDQTY2MEYyMzJFRDg1QUU5NDIyNzJFQkMxODk3NUM4QQotOjEwNTA3MDAwNjZGNEVGMTk5QUI5RUYzMDg3MEZFMEY4NDFBQ0M5N0RCQgotOjEwNTA4MDAwREE0NkE5RTBFNkVCNjkzREM3Nzk3MDRDNzY1QTlGMEY4NgotOjEwNTA5MDAwRjY3NzQ5ODJGRDgyNUQwNTA1NkMwRDJFMjU4MDkyMkJFOQotOjEwNTBBMDAwMjBCRTA5N0I3RkYzMzlDRURCQThCMjY4MTJEOUExQzIzQQotOjEwNTBCMDAwOEQ3MTUxNjAwMUQzNzU2ODZCNTIwMDBGQTBBNzY1MkZFOQotOjEwNTBDMDAwNUYzQzhDRjA1RkE4RTc1Mzk5RkNGQjhDRTUxQTFFRUY2MAotOjEwNTBEMDAwODgyOERGNkYwMUExQ0UwNDU5N0EyRUQ4RkEyMjNCRjgzNgotOjEwNTBFMDAwQjExOUQ2M0Q2NzBBRkMwNkY1NUQ2RDdBMkI3Qjk5OEM2QwotOjEwNTBGMDAwN0VEQkU4QzRGQ0U1RTJDRjQ1REY3NDE4NTdBREU1RUQ5MwotOjEwNTEwMDAwRUM5QTE4QkUwRDlFQjc3QjA2NkQ1OTFGODdBMzQ4MkVEQgotOjEwNTExMDAwQ0YxNzJFNzhDMkQ5MkIzMDdFNzg3OEREQzlBRTFEQ0E2NAotOjEwNTEyMDAwNUUwMUZDNTNCQzUzOEJGMDVDN0E5QTI5RkY5MzFCRjcwQQotOjEwNTEzMDAwN0U3MTg2QjlGQkVGMkZERUJDODlFNzNCNkMyQjNGNUZBRQotOjEwNTE0MDAwQUQ2NkE2M0E1MkE5NjU0RUQwQzc1NDkwQTUxODY4MDkxNQotOjEwNTE1MDAwNjg5MURFQzc4NzY4N0RFNDczNjI5RTIyM0Y5MEM5REY1NQotOjEwNTE2MDAwRDczMDNGRkFBMzZFNDdERDNFNURFQzA2MjI2MzdFNkVDQwotOjEwNTE3MDAwQjIzMTA5RkQ2NTEwREJFQzQ2RkZENkVEMzc0OUI0NTM3QgotOjEwNTE4MDAwQkM1OUY2MzJCRjhGNUIyNjQ0OUJEMjkwN0UwOUNFNEIzMgotOjEwNTE5MDAwRDQ5N0U2OTc1RENGQ0Q2RDE2MzRDNTgyQ0QwRjUwN0M4OAotOjEwNTFBMDAwRDJFMzkyMENGRjIxN0VGRTUzRjc5MkQ3RjU3MzczMTg2QQotOjEwNTFCMDAwMUI4NkI4RkFCMjdDNDc4RjRCNjAxRjRCNUVDNkQ3QjBEOAotOjEwNTFDMDAwMEZBQTA4RjYzQjVGNUI3QjkyNTgyMTlCNTEyRjE5MzY0MwotOjEwNTFEMDAwMUZDNkU1NjVDRkU1RDA3OUM3OUE5RTY0RjE3QzZDNzNGNAotOjEwNTFFMDAwMUFFMTczOEQ0NzI0M0I5NkI1RjU2MzMyM0M1QUQ4MjZCNQotOjEwNTFGMDAwMzAxOUNFQjlFOTZENjk0NDNCQUZGNjI1QkFFQzI3N0Q4RAotOjEwNTIwMDAwMjY2MEZFREZGOURFRjIyNzAzODkzRUY3QzI5QjIzMDMwNwotOjEwNTIxMDAwRkM3RUM1ODZGM0ZCOTkyRTQ3NjEyQkU2NDM5N0VEMjA3NAotOjEwNTIyMDAwMDdEOEMxNkY1RjRCRjc4NTdFRDY1OUM3MDhENzA1QTQ0RAotOjEwNTIzMDAwMDEyNUU4NEY4QUE0NzJCQkQ4MUFDOEFGQjU3RDJENzM3QgotOjEwNTI0MDAwNzMzQjJFM0JDQUNGREQ2NUUzRjlGQjNEQjMzQUM4ODUxRQotOjEwNTI1MDAwNzg5MERBNDUxNjAyRkE5QjQ3QzVBMjMwQjAzNjZBNzFEQgotOjEwNTI2MDAwRDk5QTY5NjI3MjlDM0Q5MkU0NjQyNkM3RDU2RjRDNTUwOQotOjEwNTI3MDAwMjI1ODI3Q0RENjcwOTI1MjkwNkFFODdGNUMwODQ4Mjg2MQotOjEwNTI4MDAwRDc2Q0ZCM0NDMjhEQzM3NzkzNjFCRTQ4NzY2OTNCRTkxRQotOjEwNTI5MDAwMjNDMEYzNUIxRDRGNENCQzYwNDYzOTNGMUIyN0IwMzQyNQotOjEwNTJBMDAwQzBDNTM3Njc0MzdGRENCQ0QyQjg0RjI2MEFENDFBRjM5NwotOjEwNTJCMDAwNjJEMENCQTkxQkUxNjk2QTlFODZBNzQxNkMxMEUxMjlFNwotOjEwNTJDMDAwNDEzRkUwMUY5NDdGNUU4NjczMUNEMzI2QzgyRUJFM0ZFRAotOjEwNTJEMDAwMEVFODU5RUQxMjBCQzk5NDZGOTJGRjVDNTY1MkU4RkUyRQotOjEwNTJFMDAwN0VCNUE2MjcxRDc3RkU4MUNDQTFDMEJDQUU2MkEzREUzMQotOjEwNTJGMDAwN0EyOTQ2QkRBNTREMzFFQTI5QzM2RkQ0NEI5RkQ5NUVBQgotOjEwNTMwMDAwNDM3RkRGQzAzNzBDRkRGRDE2MEMzN0QwNTk3NTYzMEM5OQotOjEwNTMxMDAwRkMwM0VBMjcxODY4OEY3QUJCODEzRjY3RUQ0QzAzOUQzOQotOjEwNTMyMDAwRDc3QzhGODE3RkUwQTYyQTQzRkZBMEQwMjI0M0ZGRTBGNQotOjEwNTMzMDAwRURDQjBDRjQ5MEQ2QzcwQ0ZDMzdCN0FEMzJGNDBGMEJBNQotOjEwNTM0MDAwQUYzN0Y0OEY2ODdGRDI0MDE3NDU5RTM1RjA4RjNBQjY1RAotOjEwNTM1MDAwQzVEMDNGM0FGQUEyQTE3RkVDRDk1RDA2RkFENjhFNUY5RQotOjEwNTM2MDAwMUJGODZGQkI3QUQwNDA4RjY3NkYxQUY4NEI2Q0VGMUEzRgotOjEwNTM3MDAwRTg0OUVFRjcwQ0ZDOTMzMzNGMzRGNDRGOTUzRjMyRjQ5OQotOjEwNTM4MDAwNEYyQkY4RDQ0MDk3RjlGRTYxRTA3RkY2QTZDMDI2OEMzQgotOjEwNTM5MDAwM0ZCMzREMUI4RUFCMENFM0IzRkNERDcxODBFN0JCRDI5QQotOjEwNTNBMDAwQ0RCRTMwMzI3RENEQkEyRDk0QTdFNTY5MUE2RTNGNjMyQwotOjEwNTNCMDAwRjZGQjREREUyRjhGODNBQjMxMkZDODQwNUM0RjY3NzhGMwotOjEwNTNDMDAwREY3QkI5NTUyMDVDRjc3NDNFQkIyMERGMzVDN0VEQTMwQQotOjEwNTNEMDAwOTc2MjgzMDIzQzQ2QTc0RDcxMUJFODBDN0ZBNjgxQkZGNAotOjEwNTNFMDAwQ0Y2Q0Q5RDBERjM3NTA2MEU4RUZCN0MwNjdBMEIzRUEyMQotOjEwNTNGMDAwOEEwREZDMDNFQTE1MDNFRDUxQTcxOEY4NzNENkZBMEREMAotOjEwNTQwMDAwNzQ1RUYzNkMwM0ZGQzA0RDAxNDNGRkEwRDAwMjQzRkY2NQotOjEwNTQxMDAwRTBFRDc1MDY3QTQ4NkJCRDgxRkZFNjM2RDVEMDNGMkNBRQotOjEwNTQyMDAwQkNENkQwM0ZBMkJERDk0MDE3NDUzNjE5Rjg0NzFEMEI1MQotOjEwNTQzMDAwMTlGQTQ3NDdCNzFCRkFDNzlFNkQzNUQwQjc3NkI0MTkyRQotOjEwNTQ0MDAwRjg2RkJCMUEzNkQwRTNEOTUxMDM3Rjg5RUQxRDAzM0RCOAotOjEwNTQ1MDAwQzlGRDY3MDNGRkU0Q0M5Mzg2RkVBOUYyMzk0MzdGRjVDQgotOjEwNTQ2MDAwNDcwMDNGQ0M5RjVGMTVFOEZERDdCNDgyNEYwQ0ZENTIzQgotOjEwNTQ3MDAwM0FFNEU5NzgzRkNEOTI3REEyRDAzNTRGRDdGM0I3MzJFOQotOjEwNTQ4MDAwREZFNzg2NzUxRTMxRDVEMTc3NzE1NzRDM0NBRkIzRTQ1OQotOjEwNTQ5MDAwN0IwOTc3OTBCRkRCNkMxNDY3RTE4NDFBNDI1NzJEMERBRQotOjEwNTRBMDAwOTg5RkJBNTQ4MTcwODdBOTQ2MDVERDE3QTZEMzdCMDU1RQotOjEwNTRCMDAwM0ExQTY1RkMwRTBERjIxQjIwNTI0RDFFMEZENjBGMjkxNQotOjEwNTRDMDAwQjEzQ0I0RkZGNTExNUYzRDBGNERDRjY3RkNCRTI5M0ZFNgotOjEwNTREMDAwOTA5NDlGODFGNUQ4Q0U1MkFDNEYxNjMyNzUwRENBMDEwQgotOjEwNTRFMDAwRTdBQjBCREYzM0JEOUQ2NEJDMzdEMkRCQTkzNkQwNUZBMQotOjEwNTRGMDAwREM3QTQ3OTM5QUZCMEZCRjgxREY0RUI1NUQyMEZFQ0U2RAotOjEwNTUwMDAwNzlCNTdCMjUwMUY2QjcyQzZFRkUyN0EwNkUzMjQzMDlENAotOjEwNTUxMDAwRDkxQzA0RkYwMjNGN0QzMkU4MjZGQUU5NjAyNkQxQ0Y4QwotOjEwNTUyMDAwMDQ2NTZBMzcwNTBCQTg3RDM2RThBM0ZFQ0RDMTYyQTJFQgotOjEwNTUzMDAwOUYwRjJBNDQ4NzgyNTNBOEREMTJGNEQzRjNBREMxRDk1QgotOjEwNTU0MDAwNDRCRjEwMEM1MEJCM0RCODgwREExNzgzNzVENEJGMjMxRAotOjEwNTU1MDAwNTg0RkY0Q0Y4MzJBQjVBREMxQjVGNDdDNTdCMDk5RTg2NAotOjEwNTU2MDAwM0RDMTRENDRGRjMyMThBMkI2MkRCODlEREE1RjA3NUJFRQotOjEwNTU3MDAwQTk3RjZGQjA4REU4N0RDMTMwRDFFMTYwM0JEMTA3ODM1OQotOjEwNTU4MDAwMTFBMjBGMDc4RjExN0QyNDE4QTVCNjNENzg5NkRBMzc0MgotOjEwNTU5MDAwODIxREQ0RkY1NkYwMkFEMTE3QjRGQkZFRjFGOUZDNUU1MAotOjEwNTVBMDAwNEVENzhCNEUzMzM2OTFGMEEwRTdCNTMzQjA2RTQxNzBENQotOjEwNTVCMDAwMTQ0QjFGMUJFQTk2ODRGQTIxRDExRUU3QjU3NUE0MDk4NgotOjEwNTVDMDAwNzA2QzYzOUU3MzUzRkU5NkM2Qjg3Q0JGNEM1QkVGRjE2NAotOjEwNTVEMDAwNjRBNjI2NDFGQzZCQzA2MjFFQTBEODkwQ0E0MjhERjQxRQotOjEwNTVFMDAwN0U5NUU3RERGMzM1NUNCMjc0OUU2RkNGRDNFNDlBQUY1RQotOjEwNTVGMDAwRjk0MzExRTJCMzgwRjBGOUQ2RDdBOTkzRjQzQUY5NUJGNQotOjEwNTYwMDAwRkQwM0Y3MTEzRUIzNEMyQUREMTNEODQzRjk5OEY3ODcxMQotOjEwNTYxMDAwRkEwNzAyRjkyMERGRTVCQTA3OEZEMDdBNkU1RjNFMkVENwotOjEwNTYyMDAwNTI2NjBENjdEQzg1RjczRjQ3NDVCQTJGRUQ2OUJENUFENQotOjEwNTYzMDAwRURERjJGRjREOEJGRUY1QzdGM0M4N0E2N0MyMUQyN0RDNQotOjEwNTY0MDAwRkFEQjkyNjMzNkRFOEYyQ0QzRjRCMjJDREY2NDY4MDc2QQotOjEwNTY1MDAwNjZGOTk3QTI5QzY3RjJFQTVFNzgwODU4MkE5NkU2QjkzRQotOjEwNTY2MDAwMzA2RkJEMDM0QjZCRjBGQjcyMjY0QkY0N0QyQzUzNUUwOQotOjEwNTY3MDAwQzc0RjI2QkYwOTg5MUREMjc3MzE5NURBOURGRDAyOEY2QwotOjEwNTY4MDAwRTE3RUVFODYwMjAyRTlDMDE4NkI3Njc3RkI0OTk0QTdBQgotOjEwNTY5MDAwNDk5M0E3NDk5MzQzNkYyNzY2RjkxQjcxQkU1Mzc5OEFEMwotOjEwNTZBMDAwNDE5RTQ3QjM2NEVEN0JGNzhFRTc1MUFFRkY3REVEOTNFRQotOjEwNTZCMDAwRDM0MjRFNENERkZBQkRDNDlBRjFEQUY3NTM0QjA1RkRFNQotOjEwNTZDMDAwM0QzNUNGMDc2RDRDQ0YwN0E5QkY2MjM5QkY5RkI5MEZEQQotOjEwNTZEMDAwRUEzMjdDNUZGOUJFMTYwRjJGRDc0OTE0MkYyQjg0NjQ1MgotOjEwNTZFMDAwMUZFNkQzOTdFQjk2MEZDNEZEMjRDNkNEMEExODY3ODIzOAotOjEwNTZGMDAwNzExNThDN0YwRjUxRjE3RTBBRTEwQkU2NjNGOERFQUQ4OAotOjEwNTcwMDAwMDIzMjc3QUNGRkFBQjNGNDdCOEZBODNEODNDQkEzRTAzMgotOjEwNTcxMDAwN0JEODM5N0JBRDJENThBNzAyNEVCNjEwNEU0NjhCQUFDQQotOjEwNTcyMDAwMDVFQUU0Qjc0REExN0M0MTI0N0M1ODA0OTA3NzdFM0E4OQotOjEwNTczMDAwRTBBMzlCQkM0MEM3QzExMkVEREZDN0U4Q0YwMTVGM0JEMAotOjEwNTc0MDAwNTA3RjFGRkY2QTU0MDFCRDM3RDkzNzVBNDZGRDM1OUEzRAotOjEwNTc1MDAwQzAxRTc4NUZGMzg2QzhCRjkzQzAyQjc2RkM4RUMzNTVGRQotOjEwNTc2MDAwRDg0MkRGRjk2MzEyODFGNjFBRURBMEY3MjEwNzQ0NTZGQgotOjEwNTc3MDAwQkZCMzlCRjhGOURCN0M1RTVGQkQ5RDI5NEQwOUQxQkNCMQotOjEwNTc4MDAwQzZGNzdDNDczNDNCMUVEMUVDNUI3NkYwNjhENjIzMzBGRAotOjEwNTc5MDAwRUY5Mjc2ODlFQTFEMzYzMjVBRThFRkU2RkJBNkRBRkE4RQotOjEwNTdBMDAwMzdGQkU2QzZFREEzQjZFRDI0RkYyRThBNDUwQkUzQkYxQgotOjEwNTdCMDAwODdGQTlCQjZCRThFMjdEMUUyMDhCNEQ4RTNFNUUzRjdCQgotOjEwNTdDMDAwNDU4MEVCQjczNDVDOUZDNkJDN0U4NjU1NzZERDA1NDNDRAotOjEwNTdEMDAwQTNBMDlBMzBCNDgxMUZCOUU5QkIzQUZERkJCQUI5Q0M5QQotOjEwNTdFMDAwNEZFRDdDODAwM0UyRDhBRjZFQTRGQTc3MTE2QkE1RTc4QQotOjEwNTdGMDAwNEI4QTFGQzg0NkJBOTY3NTRDQ0NDNEZBNjU2REMzRUI4QwotOjEwNTgwMDAwOTkyMEREOURDRDFCMjdFMUZERjNDQzUwRTVFQkQ4OTYyQgotOjEwNTgxMDAwNkYxNTRFNjNERDBEN0U3MTFDRDc4RjBBNzVBQkIxMjRGOQotOjEwNTgyMDAwQkQ2N0M3RjhENTc4Q0YzQjQzRTQ3NjYwNkY3MjNCMDAyNQotOjEwNTgzMDAwOEUxNDMxQjVFQkZFQzAwRjRFRTE3OEYwMDM5MjVGRjdBNgotOjEwNTg0MDAwODM4QTU1MUMzRkZBQkZDN0U4RjQ4QkUyQzU3RkVEODcxQQotOjEwNTg1MDAwRUYzRUNDMURGNDVENDhFRDNFNkIyQUUyNkIxMTU2OUU4NwotOjEwNTg2MDAwNjI3QzVFQTg5RkNGM0MyRjU4MEM3OTAxRjI5RDk3QjhCRgotOjEwNTg3MDAwRkRDRjFGNEZBMjdGRjc3MjVFMDA3QzBDRUY4QTdCM0Q0RAotOjEwNTg4MDAwQ0ZCQzYyRTJGNzZFOEY4OEIwNDUxMUVCRTVBNzQ4NEZCOQotOjEwNTg5MDAwMEI2Q0ExQTFBODI3Mzg5RkJGNDAxQzJFRkFCMDc1Q0Q3NAotOjEwNThBMDAwMzBCQ0VGOUIxMENBQzY3QzU1N0FEMUVBNkJGNDE4RTI4MwotOjEwNThCMDAwM0NCQjlFMTJCQkM3N0I0MkUyRjc2QTg5RjI3NkM5NUJBQQotOjEwNThDMDAwOEE4RjdDOEVGOTg0RDVDMjU0N0M5RjA0RkVDRkZERkU2NgotOjEwNThEMDAwMDQ5N0ZGOEEyOTkwNzk4QkM4RjMxNUFBQTNGQkZCQTkyQgotOjEwNThFMDAwRkU2N0JENkRCRUY1NDJEN0Y1OUJCNDc1REJGRkM5RUIxNgotOjEwNThGMDAwNjkzNThCRDFGNzM4ODk3MjA4NkVCRTZFQTIzQ0Q2NjRDQQotOjEwNTkwMDAwMkU4NzdFRUU3NDk1ODdEQjQxOTcyNzdGQTA4N0RGNTMzNAotOjEwNTkxMDAwNjQyQkI0RUYwNjUzMkY4QTVGOTdDNDQwREU0MDNDMkZDMAotOjEwNTkyMDAwQjVGQjMxQkQ4RTZERjc5Q0ExQjhDRUFFMzVGNkU3REY4NQotOjEwNTkzMDAwRjc4NjdCM0E0RjJGNzRENkNGREVEODc5QTdERjMzQjEwNQotOjEwNTk0MDAwNzFERERGMEJGQTZENkUwOUVEMzY5M0Y5MjhFRTBGNjIwQgotOjEwNTk1MDAwRUZFQkZBQTE3QkE2RkYwNzMyRUZBQUM2QTAzOTAwMDA0MQotOjEwNTk2MDAwMDAwMDAwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDA4NQotOjEwNTk3MDAwMDAwQjdCQzhDRUMwRjBBMzFFODJDNTM5MTA2QzYyNzFDQgotOjEwNTk4MDAwMkQwQjAzQzM3QjU2RDJGNUMxNzAwNTUwN0YzMTEwRTc1NAotOjEwNTk5MDAwMDE3MTI2MTBBNzAwNzEzQzEwNDcwMTcxMjgxMEJGMDI0OQotOjEwNTlBMDAwOUFGRDE0ODgxRjAwRjE2RDIwQkUwNkM0MTc4MUY4MEMwMwotOjEwNTlCMDAwMTAxRjQ3QjI3NzI5MUIwM0MzMUEzNkQyRURGRjhERTRCRgotOjEwNTlDMDAwRTcwOTQwNzYxOTEwQ0YyMDIzMUM0NkYxRjBDMDcyM0M0NQotOjEwNTlEMDAwMEMwQzVBQkMwOEZFNUU1RTU0Nzk3OTFFMDQ3Qjk5MjAzQgotOjEwNTlFMDAwNjU3NjZEMDVFQTA3MDA1MERFNThBMTgwMDMwMDAwMDBDRgotOjEwNTlGMDAwMDAwMDAwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDBGNQotOjEwNUEwMDAwMDAwQkQ1N0QwRDdDNTRDNUI1RjhEQ0JENzczRkIzQkIyRAotOjEwNUExMDAwRDk3QzEwMTIwODcwRjMwMTQ2MDhCODI0MDE0MUIwNUUyOQotOjEwNUEyMDAwM0U4Q0QxQTIwNkI0NDgyREQ1MDVGOTA4NDk0ODIyREFBMgotOjEwNUEzMDAwQ0FBQkJDNjY0OTAyMDk4ODM2MjgyMjVBRDQwNTQxNDFCRQotOjEwNUE0MDAwODk4RDdDRDhENDA2RkVDQjQ3MzFGNkE5OEQxNjE1QURDRAotOjEwNUE1MDAwQjY0MUZCMTQxNTQ4NDQxMTlGQjU3RkRGMzk2N0U2NjZGMAotOjEwNUE2MDAwRjdERTZDMDhENkRBRjc1RUY4RjE5QkNDQkQ3MzY3Q0UzMwotOjEwNUE3MDAwOUMzOUU3Q0NGOTlBODk4RDY1MzJDQjEwQzZCRUM2OUY5QQotOjEwNUE4MDAwQ0IxOEJCNTk2NjhDOEQ4OTk0QTNFRkJDQUVBQ0E5MDAzMgotOjEwNUE5MDAwN0VGRjlCQ0RCRjU1OERCNEQzQ0IyMTRDQTI3NjhDQTU3OAotOjEwNUFBMDAwMzIzNjk2QjFDQjFDRjAyQkI0OUJGMkZDODkzRjVEOTQ0RgotOjEwNUFCMDAwQ0NEODdFMjYzMzNCM0MwQTJCNTM5MkFFODY3RUY2N0ZCMwotOjEwNUFDMDAwQzVGQ0Y4REVGMkJDM0JCREMzOERERjA1MTk0QjYxRUNCNAotOjEwNUFEMDAwN0I4QzdGMTdDRTUwRDM3REI5NTg2MTE2N0NBRTM5RThFOAotOjEwNUFFMDAwNzdFODI3NkI2MzE1N0M3RkU2MEIzNzdENkY4NjQzMkY0NgotOjEwNUFGMDAwRDk1NzE2MTYxNkRGN0M5RDg5RkQyQTlGNzVFNDg4N0E5MgotOjEwNUIwMDAwMDY4M0MxOTk4MDM3OURDNkQ1RTEzREY0Q0UwNzA0RUZFOQotOjEwNUIxMDAwMDEwNUUwNTU2MzhDRUYwMEY4OTMyM0YwRUY2N0Q3QzVEQwotOjEwNUIyMDAwQjM1QzBFQkYzNjM2MDJGRjM3ODU4N0U2REY4RkIxRkFFQQotOjEwNUIzMDAwNkFGNUZCRDk1NkM2RUVBRTY2REZDRjFFQ0FEODVERDU3NAotOjEwNUI0MDAwMEVBQUFGQThGNjUxQkRCNjNBOTVFQUY1MEE3QzAyNzhERQotOjEwNUI1MDAwQThERkM2NDI0MUY4REU1QjAwRURGNUZFRTBCRjNCRDdCMwotOjEwNUI2MDAwNjFBOERCOTJFMTdCNDdBNEFFQjg1MzBENzU0N0JBNkFEMgotOjEwNUI3MDAwQTgwMzM4NDc1MjYxREUyM0Y4MjMxODFGNzA2MEM3RjE2RAotOjEwNUI4MDAwMUQ0Q0JCMDBERjBGMjVCQzM4MDVERTZBM0RDMzZFQzg2NwotOjEwNUI5MDAwMDRCQzM0QkMyMjMzMjQxOUFCQUFDRDQyRjg4NkJBNkRCQQotOjEwNUJBMDAwNkEwOEUwMUJFMTVFMzA4RDc5NjE1QzZGODAzMTY4NTc3NwotOjEwNUJCMDAwRkIyMDYzRjdDMkYzRTFFRUMyMEZGMUY5MTNEMDdGMDNDQwotOjEwNUJDMDAwRjQyQjdCMUI4RURBRTFGREFBMEM5QjJBMjM1RTc2Mjg0MAotOjEwNUJEMDAwRUYyMjlFMUNGMDBGRjE5NkIzOTFENzIzRjMzMkQ2ODdCNAotOjEwNUJFMDAwMzNBOEVCRjM4MEVGN0Y5RkIwRkVBODA0NzBENDY2REI5MAotOjEwNUJGMDAwNTRCQjE0MTlBNzdCNURGQUU4N0ZEOEJBNzNGNzNGNTRGQQotOjEwNUMwMDAwMkQ5RThDNzRBQUY3M0I4QzA1NkE3Q0VFRkZCREZEOEU0MQotOjEwNUMxMDAwMDBEQzI2RTU0NUZBRDVDN0U5QjM1RjU4RkU2MkY4NzZBMQotOjEwNUMyMDAwRDg0NjE2MEE0QjNEQzcxOUFBRkE4QjgyQjhERTFCMTU1NwotOjEwNUMzMDAwMTZDQUUwQ0Y5MzgxMUY4NjBBN0VBODRGOUZFMTBBQjg1QgotOjEwNUM0MDAwN0JDMkMzQTJDN0M5OENBQ0NCNTBENTM2QzczMjBBQ0FGNwotOjEwNUM1MDAwRUM5OTY1MTJEMDA3NUIxN0Y1NUQyNjI3NTBFNDk3NUYzNgotOjEwNUM2MDAwNTRGQjg4MUVFRkFFQ0VBMTcyNkJCNTRGNDMzRUI5RkIxRAotOjEwNUM3MDAwRUZGMkFDRTZEQzlFN0NGODU3OTQ1M0YwREQzRDU2NDZERgotOjEwNUM4MDAwNzQxOERDQ0U0MjVCMjVFQ0FGRUFFODFDQThBRjE5OUQ4NgotOjEwNUM5MDAwOTJCNzVBMjVBMDJEMjhDNzc0RkE1RTIzQTk0NERGNDE4NAotOjEwNUNBMDAwQTA2Rjk0N0Y2NkZFQjhEQjVBN0MxNUQyRkJBQUQxMTY5MgotOjEwNUNCMDAwQTkwNkYxOUNDREU5N0RBODM1RUNDODgyRTc2QkQ2NjVENQotOjEwNUNDMDAwOEUwNjg4RDkxQUZGQUIxRDM4RUVEMEExQzM4OEJFODdENwotOjEwNUNEMDAwNjc3M0ZBRkZGRDk4RjUwRTk0ODNEREYzNUY5QUEyNjU3MgotOjEwNUNFMDAwMjczMTE2OEZFQkUzOEVBQzk3RUYzQ0U5QzAzNzMxMEFEMgotOjEwNUNGMDAwNUYzMUU4NDAxRkU3OUZDRDBGREYxRDdEMzU5RTkzQkVDRQotOjEwNUQwMDAwRDZGODMzM0ZCNEMzRkJBREMwRTdCMkQ0MTNBRUM0MjE2MQotOjEwNUQxMDAwRTFENEUyREM5RUY0MzYzNDFCRTgwQ0Q3Qzk3RjZFM0EzRQotOjEwNUQyMDAwMzM5NzZCQUI0M0VDM0QxODdDN0Q3NTJBRDFEREJBNkFBNQotOjEwNUQzMDAwOTVDQUQ1NDg4NzIwMjc1MUQ2QjBGMTUwNDczQUM0RjVDNwotOjEwNUQ0MDAwNEEyRkEwN0FBRkZCMTU1QjRFRkI1MUMyRDQxMDQzM0VFNQotOjEwNUQ1MDAwNTk4RkY0NzkwOTNFNUZBMTY5QjA0NUY1Q0ZEMUVCMkM5RAotOjEwNUQ2MDAwNkMwMUQ5QkYwRURGMEZBMEJBODY1QkQ4NUQ5MjVFN0Y1MwotOjEwNUQ3MDAwMjZBOEMxRjdGRDcyNzhCRDUwN0EyNjU4OUIwREZEMzlEMwotOjEwNUQ4MDAwRjlGNzQ1RDIyOTJEOTgxRUZERkQ1RDlBMzYzMUQyMUVCOAotOjEwNUQ5MDAwRUFFMUM5RDlEMUZENDFGRkI5RDFGMDFDQTRGNjdBN0Y1RgotOjEwNURBMDAwRjNBNDYzNUExMEVBRUI5Q0JDN0Q4Mzc0RjQ1RkQyRkZDQQotOjEwNURCMDAwNkFBOTMxMTUzNzlBNTU1MjM3NUVBODlGRDU3QTNERDhEMgotOjEwNURDMDAwQTg2OUI5OTE3MTMyOTYzRkFEMDVBM0RGQjNBNzBERUY3NgotOjEwNUREMDAwQzcyRTZGMEMwNjAxNkYwRkIwRTIyQzA5RDYzNzcxNTYzMwotOjEwNURFMDAwNTUyQUE4NDRDQzM5M0JBNDU5RDU2OEY4MzhCRTIzRjNDQQotOjEwNURGMDAwNUI0RkYwQkFCMkY5RkI1Q0U5OEY1QTZERDRGQTRDOTI2MgotOjEwNUUwMDAwNUUwRTIyRkNCQTdFNjNFNUE0MDU3QTRGRkE2RDJGMDI3RQotOjEwNUUxMDAwQkQ1QkZCREJGQ0E0NjdBNDQzMjUwREM2OUIxQTY0MkE2QgotOjEwNUUyMDAwQzA2MTUxODMwQ0U1ODE1NTU1REU4RkU2MDM5REZFMDA3MAotOjEwNUUzMDAwQ0U3MTA0Njc3MUQ1QUM1RUUwMEM0NkMzQTlDM0QxMTcxRgotOjEwNUU0MDAwREMzQTFDQkREMzI5MUZERjRDNEY5MzZGMUNGNzg3ODlBOQotOjEwNUU1MDAwNDBFMkNFNzZBQjFGRjUzQzU0OTk1ODIyRkNGMkQ1N0QzQQotOjEwNUU2MDAwOUEwMjVEQTZEQzA0Qjg1NzY5REQ2NkIxQUM5RUZERjYwQQotOjEwNUU3MDAwOUYzNTgwODVBMkU2RjlDRjVFRDcyQ0FDOEYyMUJDRERBMwotOjEwNUU4MDAwMkM4RDg5QUMyRkQ0RTc0NEUzNzE5QzY4NjdBNjNGN0RENQotOjEwNUU5MDAwN0UwRTlDOUYxQTNEQkY1QTREMjk4OENDOEYyOThEQTkxMwotOjEwNUVBMDAwQzU5RUJFRTdCN0NFNTkzQ0FCRDhEREIzRERFRjI1QUUxRQotOjEwNUVCMDAwNDc0RjlFMzFFRTVBQzZDNzIzNTk5MjhDRTNFNTQ1QzYzQgotOjEwNUVDMDAwNEI5RUE5OEYxNzhBMzk1RUJGRTJFRjE2OUY2NjdFRDQ3QwotOjEwNUVEMDAwRTE3NTIyQkMxOUQxRjBGMkY1RDdFMTVENkQwNUJFOERGQgotOjEwNUVFMDAwQjFGRURGMzVCQ0U3Q0I3RjJFOTBCRjJBN0M2RkM5MDFBNgotOjEwNUVGMDAwRkVDQkVEOURGRkZFRDlGRDI1RTNBRjQwNEY5RjJBMkM0MQotOjEwNUYwMDAwN0MxOUUwRjFGNkU5OEU1MDUwOEFDOEI5N0YzNUJFNTI0RgotOjEwNUYxMDAwRjAxNUFDREZFRDJGREQ3MkVDMzIwQjU2ODBBRTQ3NDY0QwotOjEwNUYyMDAwQzZBRjkwNTQ4MkJCMzdGQUVFNkQzRThDODUwQ0ZERkNGQgotOjEwNUYzMDAwNEZDREE3MzdCQzdFRDc3MkU4N0NFNTZCQ0RFQjJFNkVEQwotOjEwNUY0MDAwREY2NUIzMTBGMjdGN0REQkU1RjEwQ0JFQUY3RjcxNEFGOAotOjEwNUY1MDAwN0Y4NEMzREUzMDgyNjlGOThDREQ4RjlGODA1RTUxMkY5NAotOjEwNUY2MDAwRjQ1RDc2N0RERTc5RTkxOUFCQUI5OTU2MDdGQUNCMUU2NQotOjEwNUY3MDAwNkYxNUU5NDVGNTEyQTNFRkQ3ODBERTE2MDIzREE2RTBDNgotOjEwNUY4MDAwOTUyRDhFMzk2RUQ0QUJFRUE1QjJERUNBNDg4RjI5NzgzNgotOjEwNUY5MDAwRTU5MDZGMEE0Q0MxMzUzNDcxMzREQTc5RjU0RUZERjk2QwotOjEwNUZBMDAwOTFBMjJDNzg3RTU3MzYzQzA3RDJBOEY3RjBGRUUwNzkxNAotOjEwNUZCMDAwMzFCNjhGMUJDQTlGRjcwNjU3MUNBODRENzU1MTc4NzdDRAotOjEwNUZDMDAwREE0MjgxNThGMkYxN0IxNjBCRTFFNzVFRDRCQkVDQTgxNAotOjEwNUZEMDAwRjdBQjU0M0E1RDhEMDEyNDNBRDc2MDlCQkEzOUEzRTdGOQotOjEwNUZFMDAwNzdCMzJDNUNFRjVGM0JGNEQ5MzA2RTczQUI4NEZFNzZGNQotOjEwNUZGMDAwRTBGMkM3ODkyRjVERDk4RDlBMDVCRkY3NzNEN0MwQkQ3MQotOjEwNjAwMDAwMjZGRENBOURBQkQ3NTNBNTI5QjA2N0JBNENGNUJCRjVBMQotOjEwNjAxMDAwN0QzN0E4NEU0MjdEQ0QyQkY0OUQ0OTM1OTc0RUFBOERGNAotOjEwNjAyMDAwN0VDRjJFOUE4NEZCQUVGRUZFQTY5QTMxRjQzRUQxNTE2RAotOjEwNjAzMDAwNzU3NDIyOEM5RjA4RjJCMzE2NTk0NzUxQTUyQUE0OTc2QwotOjEwNjA0MDAwRUIxMzYzRDJDQkRBMkIxREIzNDJGMDdFRURFNUMzMzIwNgotOjEwNjA1MDAwRTZDN0IwNzM2MDE1Njk5REY1N0E1MjkxOTFBRUVGMTU2MAotOjEwNjA2MDAwRkFFQURENDI3RjRENDUxRThGOTI2QjRFREVCNDVCQUU4OQotOjEwNjA3MDAwMzkyRkUwNzJDRDk1QTMyRTQ3QkE0QzJBNjI3RUQ0QjM1NQotOjEwNjA4MDAwRDcwMkZFMDI1MUVCRTRDQzAxRjkxNjY1NzcyNDJBQzY0QgotOjEwNjA5MDAwNzk3RDU3RjM3OTgwNjkzRkI0RjRFQkJEN0YzMzdGM0Q2MQotOjEwNjBBMDAwQzAwMjczQjA3REEyRDhBNzVDMzk3RTI5OTBEQkY3RkNEMwotOjEwNjBCMDAwQ0RGM0VENkRERURGMTdGODg0NzEyQTYyOERGM0FGQzI4OAotOjEwNjBDMDAwNEJBMjFCQzYyOUY4RTc4RkUzQzI3MUEyRkQ0NUU3ODkwMQotOjEwNjBEMDAwNzdEODQ3ODRERjhEQzlCODBGOThFRDJBNTc4MTRGNjI3MgotOjEwNjBFMDAwMTZBQUI2QTNGRDlEODRBRjAwRUYxRUQ2NTgzNDBDRjg1NwotOjEwNjBGMDAwM0FBOTc4RTVBRDY4QUY3OURFQkVGMjQzMzYwQUVBMUQwQgotOjEwNjEwMDAwNzNBNjYxNTk5NzlCRDczNjE5REFDNUZCN0REMzBCODlFNgotOjEwNjExMDAwNEUxOUUxNzkxNTc2NDY3Q0I3NjhGOTI0OTgxRkUxMDA5RAotOjEwNjEyMDAwRjhFRTUxQ0I0RDkzODJCOTlDQkQ3MUJEN0YyMkU2ODJDMgotOjEwNjEzMDAwOUFCN0EyRUZFQjk5QjFFNjYxNjM2MThFNUZFOTZCN0I4MQotOjEwNjE0MDAwQ0ZFRjdCOUJCRjM1RjI5REYwRjcyRDIxM0Y2OTVGREZERAotOjEwNjE1MDAwQjE2OTM2RjIxQjA2RTExRkRBQTMwOUE2N0VFMjM1NUJDMAotOjEwNjE2MDAwQzRBRkM4MTA0RjUxNzU3OEZGNDIzNzVGREZGQTJGMTk1RgotOjEwNjE3MDAwQ0ZDN0VFNzVBOEE4MDc2NTVCN0M2OEE3QzczMzVGMDIyOQotOjEwNjE4MDAwRUE3RkFFQTlBMDA4ODBCQ0YwMjU3NzA1MkQ2QURGRUI3OQotOjEwNjE5MDAwNTIwN0E2MDVFRDY3NDA3N0QzQTNGNERCM0Y1QkI4N0VEQgotOjEwNjFBMDAwOUMzQzYzNkFDNjBBRThGNzRDMDFGNzAzMjdGOUI4REY5RAotOjEwNjFCMDAwQzEzQzlGQkI2MDNGMEJEQkEzRUFCOTlCODk3RjZCODEyRQotOjEwNjFDMDAwOUUzMjgxMkY4MkI5MTZGMjY3QUZDQURFRTk4QkU2NkI4OQotOjEwNjFEMDAwMjY0QjAyNkY2NkZBNjBBQTAyNzg5NDA1N0RDOEQ5MTYyQwotOjEwNjFFMDAwQ0QzOUVBREJEMzg3RkMwRkQyNDdEQ0I0QThFRkQ4MzczMAotOjEwNjFGMDAwNUYyRjhGRkNDREU4RTNEQjhFQTdBRjZCNEZCRTVBMkUyRgotOjEwNjIwMDAwRDY3NTlFMDNGNTlCOTVBOTMzRTI2M0M5RDlERUQ3RjUxMAotOjEwNjIxMDAwNUU1QTU3QjA2N0I1NTA4Q0ZFMTNCQkQ3MzNEOEIzNEMxQQotOjEwNjIyMDAwMTFFQjQ5M0ZCNzE5RDY0QkVFM0Y3NkQ2QTY3M0FENUI1RgotOjEwNjIzMDAwQjIxMTFGN0FCRkNFQTVCMkZBNTcxNDVFOEE4RkZDRTQ2MgotOjEwNjI0MDAwMEVEMURGMkFGNURFMjBFQTI5Njc3MDZGMDc3Q0M4OEQ0MgotOjEwNjI1MDAwQTNDM0I4OUZCMjZDRTZERkNBOUI5MDFFRTI1NEI1RDBEMAotOjEwNjI2MDAwNkFBRTJGRDNCQUU4RjBEOUQyMkQ4NkYxOTQ2NDk3MDFBMwotOjEwNjI3MDAwREY2QzE2NjhEOTUxRjAzQjk3REEwODBFMDc4RTA3RTNGQQotOjEwNjI4MDAwQzgzRUU4NTA0MkZGM0YwQjNCQkRENDIzRjU4NzQzN0QxQQotOjEwNjI5MDAwOUQ4NUY1M0IwRDc0NTA5RjlFMTc3M0JGNTNDNEJBQTJFMgotOjEwNjJBMDAwQjlDQUU5RjVDRUYzOTMyRkU2RjFBRTM3QzI3QkRFREY1NAotOjEwNjJCMDAwQjkxNUY1RkQyODNGNURFRkRGMjlFQzdEMUQ1RjgwQzQzQQotOjEwNjJDMDAwMUY3N0QzM0I1RkE3OTU1NkQ2MjJDNTgzM0M0ODlEQzkwRgotOjEwNjJEMDAwMDIyQUQ0RjExNUVDNjMwRDU4OEU0NzNBQ0NGMzkxNUU0NwotOjEwNjJFMDAwQjA0RDUyMTA0RTYyNjkxNUZGRjNGRDZFMzgyQUI1NDA2RAotOjEwNjJGMDAwQjcxNjQ3ODBGMDI0QkIzNTQ2RURENUYzREIwRkNGNUFGOAotOjEwNjMwMDAwQjk5RTlDMkMzMTQzRkI2NUIyOERERTJCQUM5OEExQkRCMAotOjEwNjMxMDAwN0NGNjlEMkI1MkE5NUYwRDFFOEQ4REMwNjFFRTc3Qjg2NgotOjEwNjMyMDAwMUM1ODI2OEY0MUIyRTNGMEUwMDdFODFGNjAxRDM5RTRGNgotOjEwNjMzMDAwQ0Y0RTEzMzgzQjNCN0YwNkQ5MTNCREMxRjdBMDg5QkZCMQotOjEwNjM0MDAwMUUxNEY2MDEyQjJFRTg2MzVFOUM4RkNGQzI5OEVERDgwOQotOjEwNjM1MDAwNUU1MTVEMzgwRTNCOUU0MzdDQTA4QUYxMzcwNzMzRTlERQotOjEwNjM2MDAwRjlFNjg2NzNGM0Y5MkYxMTBFRDA0RjFGQUQ3NjUwRjk3MQotOjEwNjM3MDAwNThCNThGNEFGREZENjNDMkVFRDkyMjcxM0I0NDdGRkVDMgotOjEwNjM4MDAwQjlDQ0VEODQ1Njk5RUYxNzlCMUQ4RDRFRjI0MzFGN0NCRgotOjEwNjM5MDAwRjBDQTYxQzA1RjAzOEVDODdFMjdFMDJGNkI5MTNGMzE0QQotOjEwNjNBMDAwMTA0MzVFRTg2NUY2MUEyM0JGMzE3OUY2MzlFMTVERkFFQwotOjEwNjNCMDAwRjZBNEU5ODdBMkY4QjE0OUY2MjRCRjFGMDdCRjVDQ0M1OQotOjEwNjNDMDAwMkU0NkZBRUJFQkZCQjNENURBRjQ0MzQzQkYzRDVFQjZBMgotOjEwNjNEMDAwMDgzQkY0RjNEQTk3OTc5MzlFMTNCRThDRjg3MzgwQTA3MgotOjEwNjNFMDAwOUIwMUU1NUMxRUE4NzUyQ0E0MjJGRjdFRjUzNThCQTZDQgotOjEwNjNGMDAwMEZEOEE5MkRFODRGMUY1OEMyRDg0M0QwN0VGMzNDOEI0RAotOjEwNjQwMDAwODY3MjZCRTA1QTVCQzg0MkZDQUVBRUM2N0FEQTExOTk2RQotOjEwNjQxMDAwQURBNkJBRTY5RTEzRTU4RjRGOTNERjVFMEUxNENDODZEMQotOjEwNjQyMDAwMEFGRDRDRjdBQkVCRkVGRjQxNDE2MzdDNjIyMDhCRjIyRgotOjEwNjQzMDAwQ0I0MzdGNjk0MkJGNEIzM0Y5RjFCRkVEN0FGQ0U1N0Y3NwotOjEwNjQ0MDAwNjgzRDFFNTNGQzJFNUZENEY3NTkxMjJCOEVCNTBGOUU1QwotOjEwNjQ1MDAwMTFGQjU0RDZERDVCQjgzRDUyRTI2NkVGNDVDNTJCQjY2NQotOjEwNjQ2MDAwNDhGRTQ0REMwQzFFNURCMzczQkYwREUzNTEyNUNDM0ZFOQotOjEwNjQ3MDAwMTRGMDlENUVFNUIzNDRDM0E3Mjg3MUQ0OEY5NTY5RTFGQwotOjEwNjQ4MDAwMEJBMENCMTU3MzY2NzZFQzQ1QjkzNTkxMTlFNDU4MEMyMQotOjEwNjQ5MDAwRjlBMTI4Rjg1RDMyOTcxRjhGQUQ5OUMxQ0JBRjY0NzIxNwotOjEwNjRBMDAwRUFBNDA1NTkwOEUzNUI1M0U3NTVFREI3QTIyODI4NjcyRQotOjEwNjRCMDAwRTRFRjREMkIwOTRBMDhDRjgwMkFFNjU3NTVBMjJCQTJCQwotOjEwNjRDMDAwQUZCNEQ5MkNBNEYxNzhDRDkxNTRBMDhGQzE4MkJBMDY3MwotOjEwNjREMDAwMjM1REUwRkVCM0Q0MTgxNzFBNTg2NUE0OEJCNDEyNjM3OQotOjEwNjRFMDAwMUNBODNGRDIwNTdDRDdERjQ0MkZFNjdFMDZBODdFOEExMwotOjEwNjRGMDAwQzc2NTA0MkQzQzVFMzRDQjE4RDc0OTYzNUQxRjNFODFEMAotOjEwNjUwMDAwRjAxRDcyRkJDMzM4NEU5RDcxNUM3M0ZGMEEwQjVDQTBEQgotOjEwNjUxMDAwODAxQ0Q5RjNGMzg5NjAwMkMzQUUxQzlDOUM4NDc4RDk5QgotOjEwNjUyMDAwRUMyODhFMjdCOTgyQzFBQjE4N0U5NzFFRjRBQUVCMUQwQQotOjEwNjUzMDAwQkRCNDhGQzhEMUEwQzFCRjY2MkUxQjg2QTZEQzM2MTc5RQotOjEwNjU0MDAwNUFBREYyMDQxODhEMUZDQzIwRjk2RTE1RjFDQTgzMTlDQgotOjEwNjU1MDAwM0Y3NUEwNUZBMzNFMzk4RkYyMTNGNjYzMURGRDM4RUE0NQotOjEwNjU2MDAwQjBGRUQxNzJERjhBN0VBNEE0NDg3RDg1ODg1Nzk5Qzc4MgotOjEwNjU3MDAwMkI1NDM4NURCRUNGQjQ0MkM0QzM2ODdCMzAxNUU5RDkxMwotOjEwNjU4MDAwQUVBNkU0MjMxQ0Y2NTREMEJCNjI3QzM3NEU3MTcxN0JGRgotOjEwNjU5MDAwQ0ZBNzdDNjk4Q0FCQjk3REVGOEJFMDI5RjE2MTcyRTIwQQotOjEwNjVBMDAwNzlFMTIzNUYwOUZDMTBDNzBGNEUwNjczMDJFOTNGOTFBMgotOjEwNjVCMDAwODU2QTcxN0RBQjFBRjkzRTE3Njk3NzEzRDIzMUI0MEIzNgotOjEwNjVDMDAwNjJGQ0JGQkI1RDAwREE4RDM0QjRCQjQ1RjRBNzE5REFCOQotOjEwNjVEMDAwMTVGNzY4NTcyMkZBNjM4NjcxQjUxRUUzMkUxNkVENDg0QgotOjEwNjVFMDAwQUZFQjZFRTdFRkQxREYxMjMxMkVFOTgzRERFREQ0MUU4NAotOjEwNjVGMDAwRkREREExQzM2NzY4RTdFQkQxNkU5OTBFOUY2MTVDNjYxNAotOjEwNjYwMDAwMUNCN0ZCRkQ3MDVCQTg5NkY0Q0I2MkYyQzcxRUU4NTc3RgotOjEwNjYxMDAwNDhGNDcyQTg1RjYxMTFDNkMxNkY3QkMxQ0E2NUM0MzZGOAotOjEwNjYyMDAwOUVFNzIxMEJCQURBMkZEQUQ1QjkzOTVERDU1NkIzNzFBOQotOjEwNjYzMDAwRTUyMDFGMUI0NEJFNEFBRDdCQUUyMzEwRjU1QzVGM0ZENwotOjEwNjY0MDAwNzhFRThCRkQ3Qzg5ODNFQzMxRjE1QzY5NzA5MjVGMTM4RAotOjEwNjY1MDAwOUU5MzNENTZGNzc3NTk2QzVBM0Y5QjhDNzFDRDA2NzRDQgotOjEwNjY2MDAwNTQ2MTNENzg3NThEOTYwREZDOUVBNjE4RUFBQkQyRjk2MwotOjEwNjY3MDAwRkJBRkVCQUVBRTA5QTJBMzRGMjlBNkY4MDhEMEU3RjcwRgotOjEwNjY4MDAwNzNBM0Y4QjA3QkZDN0YxOUZDREM3RjFDODFGRjQ3MzVDRQotOjEwNjY5MDAwOUExMjBEM0ZBRkVCRjBFQjc1RTcyMEZFNUVCNkNFOUU5MwotOjEwNjZBMDAwOENGMzU5MjFGNkY1Q0Y5NDY1MzVFNDRGRkU1RjNCQkY3RgotOjEwNjZCMDAwNDVBNkY1NTk2NDU4MUZCREFFQ0ZDRjZBMkRGRDNGMzZCNAotOjEwNjZDMDAwQkYzQjRDRjNCQkMzMzRCRjNCMENGM0IzNUI5NzRFMEVFNQotOjEwNjZEMDAwNjY5RkZGRkNDQ0VENTY1QjhCNDlERUFFRThGNzc4MkE2RgotOjEwNjZFMDAwQzJCNTQyRjhBNzlENTZBRDY2MzlDNjFERkE3NUVCREJGQgotOjEwNjZGMDAwMjRERjQ3MzNFRDZGMjgzN0ZBRkE2RUEzQTI5MjdDNzYzNwotOjEwNjcwMDAwN0EyQzNDNjhEM0NGMTYxQTlBQzFFMTlBMDE3MkExNDUzRQotOjEwNjcxMDAwRjE3MUY5MkRFMDNDNjJBQTc3OTlFQUYwQ0I5N0I4NkY1NgotOjEwNjcyMDAwRkE5ODZFNEY5QUU0N0MxRkZCNUE3RDA2REY0RjFBM0NBNQotOjEwNjczMDAwOUE0NDc5MkU2MjVGQjNFOUZCREFBMDk5QjQ4RkFENDgzMQotOjEwNjc0MDAwQ0QyM0ZCNjVGRkEwMDUyNDhGNTZBNjBGRUJDRkYzRjBGQQotOjEwNjc1MDAwNTI0OTVFRDlDNTVFRjM0MDM1Q0Y1QkJCNUZFNDA3QUQwMAotOjEwNjc2MDAwNDhDRkEzNzZGN0VCRjE5MjUwQkE2MURGM0NGMDgzMDU5NgotOjEwNjc3MDAwNDUxOTIwMUY0RjFGRTFGOThBQUJBRERDN0VBOEFGNjYzQgotOjEwNjc4MDAwMUFDRkMzNzM1MEI5MEZGQTBENDA4MzU2RDBGN0IwN0NCRgotOjEwNjc5MDAwMEVGNDNEMkM1QkFBNTNBOTdDQjY1QUE1NzIyNzhDOEJBQwotOjEwNjdBMDAwRTVBRkFBRkQ1NDM2NTU4RkEzNTJENzE3MUYxNEZBRTI0RQotOjEwNjdCMDAwRjdEMjJEQjQ3RjNFNTZDREM2MkJEMEZGQTY2QTA3OTVFMwotOjEwNjdDMDAwOEY1NkZCQzYyQjQwOTcwRjU3QTc1Mjc5NUE5QTMxQ0U1NgotOjEwNjdEMDAwNEFGRUQzOEVEQTc4NThBRjNEQUY2NjUzQkVEMkM0NzQ0QQotOjEwNjdFMDAwODVGQzFFNEMwOUNCRjEwNTkxRTczQTVFNEY0QjkzMkY4OAotOjEwNjdGMDAwQjUwMkRFMkY1MTJEQkM5RDIzNTRFQjhEREQ2RTMyRjY5QwotOjEwNjgwMDAwM0Y0RTU1MDgxRUU2MEVDQURFRTQ5OEVEQUVDMDc2NjMzNAotOjEwNjgxMDAwOTMzOURDQ0MxN0E4RjVDNEVFNkYxQThFOUI5NzJDRTA0OQotOjEwNjgyMDAwNEI1NjZCRERCMUZCOUI4RUVEMkU0QTE1RjBBNTc2MUQwOAotOjEwNjgzMDAwODg4QkRENkUyNjhFM0IzMjU1QzA5N0RFM0UzOTJFRjZCNAotOjEwNjg0MDAwQjgzRkMyRkVGQTI3MzY1MjFDRTkzMkI0NzdBMDNGN0IyQwotOjEwNjg1MDAwQkFCQTg5N0MxNkEyRERFNjQxNTVDQzAyNzREQjNGQTlBOQotOjEwNjg2MDAwQjEwQURCNUQ1QTU1Q0MzMkExQ0M0QzI5NjYxNkEwN0YwQgotOjEwNjg3MDAwN0IzMkJDMDc3ODUyNDUzRjEzRTZGMUY3OUJGMUJEMjcwOQotOjEwNjg4MDAwRUFCREY4N0U3QzA5QkM4NzdBNjY3RkUzN0I3RDNDN0IzMgotOjEwNjg5MDAwMjNEM0U1NDk5ODgxM0NCMEFGNjFERDc5M0Q1ODRGQjFENAotOjEwNjhBMDAwRjBGQTlERDYwMzkzMjk2RTY5RTNFRDFGQzEzQUY0NjNCNAotOjEwNjhCMDAwQUYzMzdFOUZFMkUyRjU3QkY0RjY1RUZFRkREM0EyN0Q3MAotOjEwNjhDMDAwRkY0NDNFNkZFNzhEOEUxMEM2QzUxRUZERjc5RkE2Q0QxNwotOjEwNjhEMDAwQ0Q4RENDNzdDOENGOTc1RTM4Mzc2QTdFOEZGRTdDMzVGQQotOjEwNjhFMDAwQkREN0U3MzNBNDdBMERCREVGOEQ1RjUzNjc1Qjk4MTY3NAotOjEwNjhGMDAwMjVCNzUyMUE3MzQ5OUYxQzZEQUYyMkI5MzM3QUM4Q0NBMQotOjEwNjkwMDAwRjAxQzU4MTc2QjMxODc2QkRGOEE1NTM1MzVEOTA0NTcyMgotOjEwNjkxMDAwOTBGMjA1MDQ1QzBGRkZDNDA4RDdBMDlGMUFFMTdBRjgzMwotOjEwNjkyMDAwQTc0NkI4MDZERDcxNkVCODU2NUJCOTVDRUIwRDNFMTgzNAotOjEwNjkzMDAwNUY4QjFFM0ZCNERDMzhCRTVBNjMxQzNGNTQ2MzFDNUY0MAotOjEwNjk0MDAwQURGREQ2RTM4N0EzRDdFNTkxN0YzMzhFM0ZGODY3QzZDOQotOjEwNjk1MDAwRjExRkY5OTk3MUZDQzE3NzdFQkJGMUZGNTlGQUI4RDdFNQotOjEwNjk2MDAwMUFGODBGQUJEMEM3RTU2OEJEQjMyQTY4RDAzQkExNUQ2QwotOjEwNjk3MDAwQkI2ODE3OTRBM0Y1RDg0MEQwQTBDNzQyQkJENzQ0M0IwRgotOjEwNjk4MDAwQ0REMEFFQjg0N0JCQjc0NDNCNjYxODU3RUIzMUVFNUY4RQotOjEwNjk5MDAwNzRGODJDRDFGREY5N0JGNEY3NTdBQkIwMTcyQ0QxRkQ2RgotOjEwNjlBMDAwQTkzREZBRkI1MDg3Q0ZEMENFRDdBM0REMjlEMTFGMzMyNQotOjEwNjlCMDAwOENDQjhDRTNDMjRGMEVFNkYzRENDMTVDN0VGNEY3MkU4OQotOjEwNjlDMDAwOUREQTQwRjFBRkZFMkMyMEExREZDRjk3QzQ0NjFGQzI1NQotOjEwNjlEMDAwN0QzOThCRTdERDI3MTQyRTFEODJGQjc4NDM4MkQxREZDMgotOjEwNjlFMDAwRDVDRkM2RjcyOUM1MjY1M0JGQkUzODU2NDU3OTg3OEUwMQotOjEwNjlGMDAwNjBEQUY0QTg3QzhCMzJEMUFFRkJCRDNCOTg3NjVERDRENwotOjEwNkEwMDAwRkIxNEYxN0Q4Mzg4NTcyN0FEMUM1MzhCNzJDNTM3MTA1QgotOjEwNkExMDAwREFDN0EwQjc1NDFCQjcwQkY1RjcyQ0Q5REZBRTAxQkMxMgotOjEwNkEyMDAwMUI3RTNDNjNDQzZBMTYzREFFOTVCNzFCMjJDNjREOEZDQwotOjEwNkEzMDAwMEQ1NzQzMDYxRkI3MTRDN0NEQzVFN0JBN0UxMTRDMjNDNwotOjEwNkE0MDAwQkNGOTc4QTkzRjVGRUZGOUE5RjQ1N0MwNEJGRDU0ODcxMwotOjEwNkE1MDAwNDU4RTg3Rjc2QkI4OUY1M0Y3QjcyN0Q4QUExQzk4QjcwRQotOjEwNkE2MDAwNUIzQkM4QzIzNkFCOTQ4NzdDNEUzRjRFNURCNUQxRUZFMQotOjEwNkE3MDAwQTlGODhBMzVCNEY3MDY5NEY4RjI2NEQ2RkI3NzBGMTVCNwotOjEwNkE4MDAwNTk4QTYyQzUxRDBBQzRCQ0VBNEEyNjM3NjZDM0Y4RUNCNwotOjEwNkE5MDAwOTBEMTdGMEI4NENEQTJGMzYxODZDQjgxMDI1QjJDRkY2QQotOjEwNkFBMDAwNkQxREY3OUZFQTdBNTBDMjgwNzNGQjZGNkI4NTdFRDFCNAotOjEwNkFCMDAwM0QwRkU4MjhENkZBQ0QxMkYwQjEwRDFDNkY4QThFQjdDMwotOjEwNkFDMDAwQzQxOTY0REYyNUQ0NUNFOUYwQzVGODZFOTVBOTdGMjc2OQotOjEwNkFEMDAwOUJBMTYxQkJCOEU0NDY2NjIxNzlDMkNGNERFODdBNTVFNwotOjEwNkFFMDAwOUQ2RjMzREY4N0QyODBBNjMwMEU5NEJDMzM4Q0ZDNzM0RAotOjEwNkFGMDAwQTY4MDlGQTM1MDUyNDM0MTg5RUM1MTNFNEY1NDJCRjE0NQotOjEwNkIwMDAwMjc0RTA5MDdEMURGMzg2MDgzQzJDMjIwQjdENjVBMDJBOAotOjEwNkIxMDAwQjM2QzE4NUZDOTZFMjRGRjk4RTJEMzI0QzREMzU5NkJCOQotOjEwNkIyMDAwRTg0QTNBNTcwMEVBRTI2NkE5MjdCQ0I3RDhCODNGRjg2NgotOjEwNkIzMDAwMjE3NUM2MUYzMjYyQUM2Mzg5NEQzNUM0QjcwNzdDNjFDRAotOjEwNkI0MDAwNjNFMUZDREVEQjQ3REE3MUI4QkFFOTM0MTVFODczMjQ5NwotOjEwNkI1MDAwQzkwREEyRDM0QTU5MkJCNzExOUZBN0ZCQzhFRkE4Q0JFOQotOjEwNkI2MDAwNTc5REZGNDU5QzdCRUUzODI2N0VENDFCRkUwNEYzNThEMAotOjEwNkI3MDAwRDQ2NjY1QzgzRkVDMkI2ODFEMTVGRjU5MjRGQzVGNzM3NAotOjEwNkI4MDAwODU1Rjc1MUUyQkY2RTJDQjkzQ0M1Mjg0N0M3NTkyQkQ0QgotOjEwNkI5MDAwRUFDRDhGNUFBRjA2OUI4REMzRDU2MDI1RkY5NjFFRDdEMQotOjEwNkJBMDAwOURERjY4MzVGOEJCMTY2RTMwRDYxN0IwMTkyOTI4OTdDNwotOjEwNkJCMDAwMTZBQ0IzQjIxMEUwNzM5MUM5MUZCNjE0RTcwQkYwMkZGNwotOjEwNkJDMDAwNjQ1NTJCN0REQ0FFMjA3RDdBQUU4RjI5NDlCMDc1MkNDMwotOjEwNkJEMDAwRkVGNUMzNjNFNzQwRkQxNzg4NzcxOEZGMjNBMDE3MzUzQwotOjEwNkJFMDAwOEFBRjRBREQyMTFCRTY0N0JEQjczQjdGRTYwNDg2REY1RgotOjEwNkJGMDAwODc1NjBFNDA3OTlBQzA2MjlFMkZCQUE1QzEwODVGNUY4MgotOjEwNkMwMDAwRjA5QkUxNjVBQ0U2OUM3MDI4REJBNDk4RkVBQjg3NzUzMQotOjEwNkMxMDAwRkUxMEVCQjVENEUxMURDNTQwQ0U5Qzc1RjJCMkRCOUZGMgotOjEwNkMyMDAwRjI2NzI3QzlGN0JENDg0N0I0REU1NTE3RjFGREEwRUE2MgotOjEwNkMzMDAwNjIyQ0ZCRkFFRTgwQTAzRkYzNzc4QjFEMUQzNkU0OEZBQwotOjEwNkM0MDAwNEFBNUFBNDhCMjQ0RTI0RDc2NkI0MDFCMDhERjU5NUI2NwotOjEwNkM1MDAwMjY4NTA3MzI0M0JCODZGMzZDRDcyNjY1OUU1N0JCMjIzOQotOjEwNkM2MDAwQ0IzOUZBM0IyNUU0RTVGMzNCMUVCM0ExNUQ3NkYyQzlDRgotOjEwNkM3MDAwNjNENzIwMUY5NkZENTY2NjBFNjg3NzZBODc4Nzg1Qzk5OQotOjEwNkM4MDAwMkUwOUQ5NTA5RTk0RUU5NjYzQzY2NzI5MDMwMEYwNTZFQwotOjEwNkM5MDAwRjYyQjBGQzk4OUQyOURGNkQwMzRGOEJFRjREOUY3NDY0OQotOjEwNkNBMDAwMzFDMEMzQTk5QUFFQzMwMzcxMUY3RDUyRTI3MUQyNjA5NQotOjEwNkNCMDAwQzcyOERDQjc0QTE1NzY3MzcxOENGRTNBMDRERDlERjg1RgotOjEwNkNDMDAwNEQxQ0U1QjU0OERCRjZERjQ0RkQzNkRGNjBCNTQ3Qzk0RQotOjEwNkNEMDAwODczNzcwNUZFMkVEQjg3RjZEQkIxNDFBMUE0MzdFRTgwOAotOjEwNkNFMDAwNzFBRDEzREIyNTBFNUY4QjM1RTQ0NEY4QjY2REIyMDU0QwotOjEwNkNGMDAwMDA4RUNBNkQ5RjEwMUQ0REY5NTU5MzE3RjE1MEQ5MjI4MgotOjEwNkQwMDAwMUJGQ0JFOTVEQkU0QjA3RDE0OTVDN0IwQzQ3ODg5MDQ0NAotOjEwNkQxMDAwN0M1REMxQjg3Q0FDRDhCRDk4RkNFMTE1Q0Q3NzdEMjJGNwotOjEwNkQyMDAwN0JGMTdCMjMzRDAzNUVGQzYxQzRFQjFCQjI3RjFBRDY3MwotOjEwNkQzMDAwNzczREUxNTUwMTU1MUZCNTZGRjUyMjVFQTFERjM5QjZFQwotOjEwNkQ0MDAwNzg4Q0VCMUFGREQ4RDhGRjE3ODkzREZCMDNDQkREODY4NQotOjEwNkQ1MDAwRjQ1NUQ5QkM4QThGNjdFMjk3OEZGMDk3QjQ5RUYxMTNGMAotOjEwNkQ2MDAwQkJERDkzNEM3QUEyMUUzRkQ5OTY3NDVFN0E2MjU5RDNFQQotOjEwNkQ3MDAwOTk0NzgyMzBERTg5OUQxRjNGMTIwNEI4Q0JGRkZGQTdFMQotOjEwNkQ4MDAwOEZEQzg5N0FDRDNFQTcwRkY5QkRGMkM5RDdCQzJDNkEzQQotOjEwNkQ5MDAwMUZDQ0IwNzNCRTNCQjVGRDg5QzcxRjAyM0UzOUY1QTZCNwotOjEwNkRBMDAwOURGMkYyNEVFREZENjAzMEU2RDM5RTdBRTZCRjUyNTQ3RQotOjEwNkRCMDAwNjg3RkZCREVDQkM5OUVCRjdEQ0Y5NEZFRTdEQTBGOTFFMwotOjEwNkRDMDAwNEU0M0Y2NjhCODQyRDRCRkRBMjJBMUIyMDU4NkJDMjg4OQotOjEwNkREMDAwNERFQjcyNzBCN0NDOUMwMEU3QzlBM0Y2MTBFNjM1NTdBRgotOjEwNkRFMDAwQzJCM0E1NzlCODRFOEI0OUZFNjI3RDE5RTBCNzYyNDcwMAotOjEwNkRGMDAwRkQyN0YyQTg1ODc4MEUwRUI0QTQ2MjA5RUM5MjhBRUIzMwotOjEwNkUwMDAwN0NEREI1OTcxNjYwNjlGNUFCNDgxN0FDOEJFNEE3Rjk0NAotOjEwNkUxMDAwQkJDQTIzQjA5RTE3RjVCRTdFNjdEODU3MzZDQzNGQTlCNAotOjEwNkUyMDAwRENCMThBOEY2QjVBQkY5M0Y4Q0JGODlFRUI3Nzk5REQ3NAotOjEwNkUzMDAwMThGRjNBQzNDQTFGN0QwODVGRUU0RThBMTlEN0Q1RTMwMwotOjEwNkU0MDAwNUY4QkY3RkNFMDlDN0E5MzJFMDdGQUMyNkY4OUM0RTE0RQotOjEwNkU1MDAwNzJEQkI1NkJFREM4NEYzQjlGN0FGQ0ExNjRCRUJFRDMxRAotOjEwNkU2MDAwMDAyMUE3OUFDRTBDNjY0MDFGQzdBRDVEMzdBMTdDRUMxMAotOjEwNkU3MDAwREE2QkY3RTE3RTVFQkFGNzBERTJBRjUzN0I1RUIxQTk0NAotOjEwNkU4MDAwMjQxRjk5NUIwMjNERTExNEVCRkU2OTQ3QkRBMTQyRTI3QwotOjEwNkU5MDAwOTVDQTJEOUVCMEREMUI1OUE3OEFEMEY0MjJENTRCQ0ZDMQotOjEwNkVBMDAwOEZEMUYzMTBBN0ZCOEFEMEZFRUJBNTE4RUJCNkQyOUVDQwotOjEwNkVCMDAwQzlFNTcxQTgxRkUxNjVGMTk2M0ZEOTI4OEUxREI1OUVFMQotOjEwNkVDMDAwRDIzODVDQzc2Mzg1RjhCQ0I3NzVENEU3RUZDM0Y5NUYwOAotOjEwNkVEMDAwMUNCNTlFNUIzOEJGRjZDNjk3QTczNkQ5MTVDQzRCRDBFQwotOjEwNkVFMDAwRDdGNzk0QzhCRkFEMEM0OTZGQjAxOEZDQUFFRjZGREY5RAotOjEwNkVGMDAwMzQxRUJBREM0NDBGRkE3Q0ZCRTJFN0JFRTdGMUNERjBDQQotOjEwNkYwMDAwNzQyQjI2NTc4RUU5ODlBRjEzNUZDNTk2RUYxQjg1N0NERQotOjEwNkYxMDAwQTg2MDU1NDUwM0IyN0FFRTRGMEExODhDMDMzMzIyRjA2RAotOjEwNkYyMDAwOUVDMDU4MDBEMEQ5ODkyNzY1M0EyRkJCQjJGOTIwQzkzNQotOjEwNkYzMDAwNjlCMzVDQThFODQ1NEY2RUIyNzMzQkE3QTI2NUZGMjgxMgotOjEwNkY0MDAwOTQ1RjI3MEVGQzg2RThCMDYyQzczMTFCREE0Nzg3QjcyQgotOjEwNkY1MDAwRURCMjc1RTQ0NkU4MUVFNTdGNzQxRUU2ODlBN0Y3OEY1QgotOjEwNkY2MDAwMjIzOThERkRDNzU4OUZFNzQ0RkY5NUFEQzZGRTJCNzdBQwotOjEwNkY3MDAwN0M2MkU4QkYyQ0Q4NkMyM0JGNjgxRkUzN0NBNDY4MzcxMQotOjEwNkY4MDAwRTA3QzNGNkFCNzMyQ0NCQkZGQTg1OTJFOEFBNURGM0MxNAotOjEwNkY5MDAwNkFCNzFBRjM2MTNDNjM4RkEyNUY1MTRFQjRBOTI4RUYyMAotOjEwNkZBMDAwRUE5NjZCNkYwNDcxNUY3Q0M1Q0FDRjNEMkFEQTUxQ0M3QgotOjEwNkZCMDAwMEJBODREQjBBOTY4QUZENjc5NjYzMjM1NEE2RTM3OUFCQwotOjEwNkZDMDAwRjBFOTRCRjY0REMyQjg5QTZGNkE3MTQxQjRGREE0QzNBMwotOjEwNkZEMDAwOUZBMDU5MENGMERGRUUyOUVBOEZFNzlGRDAwRTUzRjEwNgotOjEwNkZFMDAwOUNCMUUyMjdCRkIyRUMyRDJDQzJGOUM4M0U4QkNGMTk2MQotOjEwNkZGMDAwNzM3RkU2RkQ1OUREQzU2NDM3NTk3RDk2RUU1QzEzRUM3MQotOjEwNzAwMDAwNzdGNDk0OTkyM0QwNzVBNjMwRDVBMEU3QUY5RENBRTM1NQotOjEwNzAxMDAwQjhGQUZDRDcwRTYyMUIxOUM4RERCNTUyNTcxQkU2QjM5MAotOjEwNzAyMDAwMDdBRkU0Rjk4MTRDRDhFOTVFQjREMzMzN0FFQTczNEMwNAotOjEwNzAzMDAwRDM1NDk0M0YyNDdFNzg3QkE2NDU5RDBGQjkwM0MwQjFGRAotOjEwNzA0MDAwNjAxRThGQzU0RkNBRkMxREIyNDY3OTNEMzYxQzM3MEJGQQotOjEwNzA1MDAwRURBNzEwM0Q4RjYzNjFBQTVCMUM1Q0ZFNzg1ODE1M0Q1RgotOjEwNzA2MDAwOEY2NzFEOEREOUQwRjlEQkY2RTJCMzI4MzdFRjJENEFCMwotOjEwNzA3MDAwOTQzOERDNjFDQURCNDgxMEUzNThFMkQyRDNDRUM1RkZCNgotOjEwNzA4MDAwNkNBQTcyMjJEQUVGNjM2NzFCQzkyRTQxQjdFM0Q3NDlCNgotOjEwNzA5MDAwMTEzQ0U4Nzk3MTdBQkY2QjlEMTMyNURDNkY3MDdFMDMxQwotOjEwNzBBMDAwRjE1QzhGMzgzN0VGRUI5RUFGNDZGNTdFN0FERDM0MEUxQwotOjEwNzBCMDAwQjZGNDhEMTU1QjJDQjE2MjQwNTI2NEJDMkRBMDkxRkNERQotOjEwNzBDMDAwMUMwMzU4MzM5NUU5QUM5RENBNDQ4NzRGNTIwOEJFQjc5QwotOjEwNzBEMDAwQzkyRjY1NjFFRkIyQUZFMzRDRjA5RDg3M0U3RUQ2QTIyQgotOjEwNzBFMDAwQkQxOTgwQjJENjJBOUVCRkUzMDk2RDg1RkFCQTA0NjYzRgotOjEwNzBGMDAwMzgxRjlDRTlFMEYyNjRBQ0MzQTJFNzI3MDdBMkVEQUUxQgotOjEwNzEwMDAwNUE1NjRFNzM3NzI2RjM2MzJDRkE3NzNGNzAwNDg2M0IwQQotOjEwNzExMDAwQTJFMjE5QjJCQjlERTc3RjA5RkI1N0I3RDcyRjk3OTcxQwotOjEwNzEyMDAwRjFGODdCMkFCN0FCN0I1QjlGMTVENUM1MDZCQkRBNUM1NAotOjEwNzEzMDAwMzZGNjczQ0NEOUM0MDg3RUVFQTc5MjFDRkNGQ0IyQzYwRQotOjEwNzE0MDAwNTQ1RjM0RkQ2MUFFQ0REOEU4QkM0NjREMjNGQjVFQkMzOAotOjEwNzE1MDAwQjdDMkY0RjBBNTFERjEyOEY3QTRCRjYyQTRCRjdFNDgxMgotOjEwNzE2MDAwN0YxREEyOTMyRUYyNTM1NENBODEyMjlDNkY2QTc2OTU5QQotOjEwNzE3MDAwQzQ5RjA3MjRFRUNGRDI2NDlDNkY4QUU4REYxMjU3OUUyQgotOjEwNzE4MDAwNzZBRUJDMkEzNjBCRTgyMzJBQUY2NTlEQjAxRjE1ODU2NQotOjEwNzE5MDAwMjlBRTNDODQ2N0EzNTg3NzMzNUQxQUYzNTQ3NTdEQ0RDRgotOjEwNzFBMDAwMkQ2QTc2OTEyRkY3QkI4MjU3RTkzQzhBOTJFQ0E2RkNCOAotOjEwNzFCMDAwMTQ3NzQxRERBRDc4OUU1QzYxNTUzRTk0OUY2RTNERkYzNgotOjEwNzFDMDAwQzRDRkYzMEE3NUJCRDg5OTYzQ0NFN0I0OUJGMjU3QUQzMwotOjEwNzFEMDAwQzJGRUVFOTFDRjJERjZERDdCRjA0MTBDN0REOEJDRUZFOQotOjEwNzFFMDAwNTYzOTRDN0FCNEY4OUU4RDhCOUQzN0E4RUI2MUU3NEJFRQotOjEwNzFGMDAwRjc2NjNCQjJEQ0QxN0U5ODA2Rjc2OTk0NkZBOTA4N0ZFOQotOjEwNzIwMDAwQzNBNEVCN0RFNDA3RUZEQzIxRjE3MzZCMjYzQUVBRENFMwotOjEwNzIxMDAwMTkzRjBBRTUyMUYyMkZERTZGMTEyNzlFNEIzQkY2RUY1NwotOjEwNzIyMDAwNDdCREE5Q0VDQkI0ODQ0NDkyNzNBQTBDNzg1RjI5OEQ1NAotOjEwNzIzMDAwNzY0ODUwMkVERUZEQzlDQkJGNDVGRjdBQUJDQzcwNkJENAotOjEwNzI0MDAwRUU4NEI5QjVFM0ZDMTQyRDAxMTcyQjhFQUQzMUFDRUZGNAotOjEwNzI1MDAwMzc5RDRGQ0ZCODIyRTdCNzI1M0U5RERGRENGNEZERTkyRgotOjEwNzI2MDAwMUQxMjlEOUY5MkQ5ODgwN0YwMUM0NDY1OUI5NTg1RTA2RgotOjEwNzI3MDAwRkQ2OUM2RkIzRkJEOTFFQjAzMEI1RjgwNTE2MEZEMzc5RAotOjEwNzI4MDAwODhGMTcxNUY4QURFM0Y5MjhBNUM0QzhEQ0VFMzA5NkE5OQotOjEwNzI5MDAwRUQ3OEZFN0Y5RUMwNDdCRkUyNDRDM0ZCOEZFNzE2QjU4MwotOjEwNzJBMDAwOTE3RjI2QjA4MEY0NEYzQzU3MTZERDVGOTlCQ0VDMDIwRAotOjEwNzJCMDAwMUM4RjA5M0Y4NjBBRkY5MEZFRjRGOTlGQjUwNDZDN0M5MQotOjEwNzJDMDAwOUYyODhFMEY5MzNFMDNGNjJGREEwRDIxODlGMjk1Q0M3RAotOjEwNzJEMDAwRkU4RThBMTY4OUY2QTc0NUIwM0ZFMUJEMDI4QjQyMjY5NQotOjEwNzJFMDAwRkJEMTk0NDdBN0UzREI0Qzk3MDcxRDQyMUY3NDMzNzcwQwotOjEwNzJGMDAwMkY3OEY1ODc3OTdDOTRGODZBQzkwQjNDMkY2QzQ5OTNGOQotOjEwNzMwMDAwMTRBMjdDRTY4RTBCRTIxOUUxNTkyNkJGRDEwN0FDNkFDNAotOjEwNzMxMDAwM0RFQzFDMTFGQTM1RTFDRDlFNkFDNEIzNTMzNUUyMzkxOAotOjEwNzMyMDAwMkVDNzg4NTc4RkRGODg0NzMzOUVFM0M3NjUxQURBOTdFMQotOjEwNzMzMDAwQzlFNTM2MjIzMjgxRTcxQ0Y4ODc3ODA2Mzk0OEYzQTg3OAotOjEwNzM0MDAwODA3OTg0RDU5RUY4MkM2OTVEQkIxMkZEMUI3REUyRDE0RQotOjEwNzM1MDAwODRCRjhGNERGODNCQzM1QUY3RjNCNzIwNTI1Mzg4QjUxQgotOjEwNzM2MDAwNzk3RUE0MTIyNkZFMzFGMzlCOEVBNzc0NUZGQjI0N0FFQwotOjEwNzM3MDAwRTZGNzkwQkYzODU1NzQyMkNERTNERjBENzAzNDczRTYyNQotOjEwNzM4MDAwQzlGMzEzQkZFOTc5QzI3MURERkJFNTdCRUM2QjI4NkZCNAotOjEwNzM5MDAwOUI3RUU4MThDNkQzQ0RGQ0I1MTE0QkUwRUJFNjZBODdCRgotOjEwNzNBMDAwNkYxRThDRjc3NDM1RjNDREIzNjJCQ0RBNDc2NThDN0QwNAotOjEwNzNCMDAwOTRGQTA3N0FBNEZERTAxRThDNEIyNjIzNUYyQkExQ0QwNwotOjEwNzNDMDAwRENFNjhBOUI4NkU3RkM1QUFEM0VGNDVCREU5M0Q3NzUxQwotOjEwNzNEMDAwMERFQUVEOTVGMzc5OUVFMzhGNUQ3QzVGQkRENUM1RkQyQwotOjEwNzNFMDAwQjA4QThCRTczN0FGMkVCNjMwMERFREZCNTYzOTI0QTFBRQotOjEwNzNGMDAwQkZDOEE3QkQ3MDE5RUE1REFENTY5NUY2MzU1RkQ3Q0IwRQotOjEwNzQwMDAwM0ZBMkY3RjkzRThDRUZBNjU5MUE0NzIzMUNEMDlFRkNFOQotOjEwNzQxMDAwRUQ5REFERUY3OTZGODlEMjc3NEVCNURDNzcyMUVFM0JFQwotOjEwNzQyMDAwMEY1QTU4NDkyQzNEM0VEQkM5QzczRjk1RjM2RTBBOTI2RgotOjEwNzQzMDAwRTM2MjQ3MTdEOUQxRjUxRDU1QzUzODJGREQ4RUIwRUQ2NAotOjEwNzQ0MDAwRTZGRUFEOEE5NkU5QTQ0RjFFNUFDMENGNjNFRTM5QzE1RAotOjEwNzQ1MDAwQ0Y2MzE2Q0FCM0JGM0YxMkVBRTM1RjUzQjhEQzY0REEwNgotOjEwNzQ2MDAwQjQzOTI5RDQ4NEQ2NzExREU2NEIyMjFGRkNENTEyQUE0QgotOjEwNzQ3MDAwMjFGQzM0RkUxMUUzNTRCNUZGQTk1MEJFNkM0MTE1QkY4OQotOjEwNzQ4MDAwMUZFNEI3REVDMjM2MkNDNzZBQ0RGOUM4RDc1MzVCMTNFOQotOjEwNzQ5MDAwMjZFMTc5OTlDQUI3Nzk1RUU1OTg3NkEzM0Y4N0M5RTU3MQotOjEwNzRBMDAwMDdEMTBGNzZFNjI4REY5NjJGM0VBQTk4RUQyRTE5RjcyMgotOjEwNzRCMDAwRTNGMTFEQzZFNzEzRkFBMERCQzk0RUIxMUY3OTU5Q0EyMwotOjEwNzRDMDAwMzdDOThCQkREQkEyNURFOUU0NzEyQzNBQ0ZFNTU3NjI4OQotOjEwNzREMDAwREI0RjBGQkJCODdFMDU3ODkxNTA0RTc1NzYzMTdGMEQyRQotOjEwNzRFMDAwRTBBOTczREUwMDlBNkZFNzY3RkNEQzY1RTc1NzcyNTEyRAotOjEwNzRGMDAwMkNGQkU4MjYyN0E3OTcwNzZEM0M2RUZCRTAwMjc3NjgxOAotOjEwNzUwMDAwMzlGQTREMTc5NDBFNDFCQkU4RjM3RjBCMEM4OTE1QTc5MAotOjEwNzUxMDAwODhEODA3MkNERTQyN0I5RTE2Q0ZDNjIxNUZENEYxNzMzQwotOjEwNzUyMDAwNjZBQzMxMkRENkY5Nzk5RDFGNzRGRUQwRjkyMjZEODE5QwotOjEwNzUzMDAwMkIxMENCN0ZGOUFFOTNEQjZGOTMxN0U0NDgzNkE0RDdCQgotOjEwNzU0MDAwN0QxMkM1Nzg0RUQ1MDA1Q0U3QzA2MzkwRDUwQzQ0NzhCOQotOjEwNzU1MDAwMkE1QjNFMjVGRjgyQTMzNUI2MUZGQUU3Nzg1ODAzRTk3OAotOjEwNzU2MDAwQjYyNkI4N0MwMkUwRUJBN0MwRDQ0MUU0MDc1QjYzNDZEMwotOjEwNzU3MDAwQUNGRTgzNkMxREY5OUJFNjYzOTIzQjdFRTdFMDc2MzRCQwotOjEwNzU4MDAwNTMxQUQzNjY3ODkwNEZBNjVDQjkxMkUwN0MwOEY4MEZDNgotOjEwNzU5MDAwNDlGRTQxQUI5RkUwMEUyRTY2OENGQ0FCMEFFN0ZGRjQ4MAotOjEwNzVBMDAwNkJEOEE2RDU1MUY2NTY4MzczRDIzQTVDRUY3NTRFMUU1MgotOjEwNzVCMDAwRUY0ODBBRjgyNTg0REJGRkY3QjM1RUVDQkZGMzBCM0IyMwotOjEwNzVDMDAwQURERjAwRTFFN0QxQkZGQjk1OEUxRjk3NzYwRkQxNEI2MgotOjEwNzVEMDAwNDkzMjA5NDM3RkMwRUI5QjA3RkJGRjQ1MkQ4MEVGMjgxNQotOjEwNzVFMDAwN0E4Q0FDNUI5MEJFNEIwQzgwRUMyQkMwRjM4QzE2M0FDMwotOjEwNzVGMDAwQkY4MkY2MTZEQTEzOTU0Q0ZGMDk5MkYyQTlGMzFGMUUwQgotOjEwNzYwMDAwMzZDMzczNUFCQUJDOTU1QUE1QjAwN0U0NjY4MUMzMUQ0OAotOjEwNzYxMDAwNDY3RjRBNjIwOUNDMUJFMzUxQ0NDMUZCNkIzN0VBQTMxRQotOjEwNzYyMDAwMjg3OTUxRUVBMjBDQTA3RDVBRDgzQkJBMUNENkU1NzczQQotOjEwNzYzMDAwNUQwMjk3ODM3NTZCMTVDQUE3RENBODc0MzhEMTdGOUM0RgotOjEwNzY0MDAwQTFBOTkzMzFCNTJBNTE1MTI5Q0Y2MTUwMDk0NjlDNDFENgotOjEwNzY1MDAwM0U2NjNEOUNEMEFERjc0QzYwRUM5OUJGQ0IzMUZEMUIzNQotOjEwNzY2MDAwMUY3NEUzMkJGMDJDRTI2QjU0NUJENzAxNTQ5RkZDNEU0QwotOjEwNzY3MDAwOTY4NEVCNUQyOEY0OUJGMTI3QjkzQ0QyRjNGQjJCODU3NAotOjEwNzY4MDAwQkQ2MTk2NDdCRjAxM0E0NzgxMzFGRTUyQkVFRjhEM0Y0MwotOjEwNzY5MDAwRTlGNjIzRkQ3NENCQTEwNTg1QjQ4RkU2QjVFNjFGQzREQQotOjEwNzZBMDAwRkM5Q0JDQjczOTNGMzIyMTdGQzA3QTIzQkM4QzZEMEI2OAotOjEwNzZCMDAwQ0E4ODBGQjNEQ0U5NEJERUU4RjJDNEJDQ0VBMDVDNzcyRAotOjEwNzZDMDAwRDczMTc1MkVCRjBERjgyQzZBRkYzNkNCQTkzNzRDNzIxNwotOjEwNzZEMDAwRUEwQzlCRDhGRjcyMzU0MjRGNzk0QkZEMDdFRDUxRjQxMAotOjEwNzZFMDAwQTNDQkE5MDgzRDg1ODg2RUNERTM0OENDRDE1REY3NjU3NQotOjEwNzZGMDAwQTE3Qzc5NTE0NjNGNDhFNzI0MUU5RjBDMjIxRkExQkY2MQotOjEwNzcwMDAwRTJCM0QwOTUzOEZGNzVBRDU3Mzg5MUVFNzdCNjRENzEyRAotOjEwNzcxMDAwMjA1QjJENDlFNUU3QkQ5NEZERDcwNzk5MjA5RkU4Qjg4OAotOjEwNzcyMDAwQUU5NTM5NTQ3NzBFRTJDNTQyRjg5MDdENTA4RjlBRDdDNgotOjEwNzczMDAwRTk0NjQ5OUM3NzU0RTNBRjhGNzEzRjgyNUUyRTQ5RTU1RAotOjEwNzc0MDAwRTdCOTc2QjY2NUM2NzMzQjMzNENFQkRFNERGN0MyMEYzNwotOjEwNzc1MDAwQTFGMzg1NEVFRjY2RkFENkY5QTE5NjcxQkY4NEFFM0ZDQwotOjEwNzc2MDAwQzg1MkIzQjAwQjhEN0U4MTVBRERDRjExNzQ1MjlDRjg5NAotOjEwNzc3MDAwNzZBMTBGRDZCQTg3REQ4NUQ3REJENDg1MjdGQjMwMkVERgotOjEwNzc4MDAwNzFCQjI3OTNGMjk5NkZFRkM3RjE2NkM2ODM1RTU2N0U5MQotOjEwNzc5MDAwMDFGQTYxNTRERTc5QTVEMjQ1N0VBRENBMkY2Qzg2RTcyOQotOjEwNzdBMDAwM0E1RTdCQzM4NzhFRDc0QjEwQUZEMjNGOEVEN0IzNjI4MgotOjEwNzdCMDAwN0RDREY4RkQ0N0U3OURCRTY0NUNDQzczNzNGRjU3RTY1MwotOjEwNzdDMDAwM0Q4MTA1N0VEQjQxNzYxNzNGQjdBMUQzOTcyRTJGQzZBQgotOjEwNzdEMDAwREVCNjIxOEQ4OEEzREQ3OEFFNDc5NzIzRTM1QUFBMEU0MwotOjEwNzdFMDAwQTI4QTY4OTYxMzE3QjVCMkVCMTA0RkUzQzMwQTFEQjExNgotOjEwNzdGMDAwRUQ0QjZFN0M4NkJGQTREMUY5OEI1OTJFODA3M0Y0RjNDOAotOjEwNzgwMDAwQjNDQTc2QzBBMzUxMkE0QjlBMDY0MDhENkE1NzQ4OEU1OAotOjEwNzgxMDAwQjFGNkYzOEI0MzM1ODczRjRCNDFGRkEyQUU5NzlBREIxRQotOjEwNzgyMDAwRTk3QUE5QkVCRkU4NzFBMEQ1QUVDMDQyMUM1RjZBMDE2QgotOjEwNzgzMDAwQkU4MUY5RDdGQUI4QkREQkUwMEM5NEUyRjMzODgwRDkwOQotOjEwNzg0MDAwODVCOTc2MzlFMTBDNkU5RjFBRjlCMjM3M0U4QzMzRjE2NwotOjEwNzg1MDAwNTkzM0UwODVDRTIxQzAzRTM3NTRFQTA5ODczRTdFOTZGMwotOjEwNzg2MDAwMkI4MUMzMDlENDg2RkE0QkZBNThDNjA3QUJFMEY3RDk4NwotOjEwNzg3MDAwQTU4RjYyMDFEQzg3RjFGODI2Q0VCM0MxQzVGNzkzNTUxOQotOjEwNzg4MDAwNDIwRkQzQ0IwNjY3RjE3Mjg0REZBQUIwQTAzREVGMUY5MQotOjEwNzg5MDAwODc1QkY3MEJBRTc2NjlENTJFMThDNzUxQTREMTNDMDY4RAotOjEwNzhBMDAwRkE5ODFGRjVGQTgxNEFCM0U0MDczODEyQ0I1NUE5REJFMQotOjEwNzhCMDAwNTlBM0VGREY3OEVFNjc5QTNBODlDRTk3NjUzMzNBMTc4NgotOjEwNzhDMDAwM0IxMEY1QTAxOEVCRjM0QjE3Rjc1NzJGNzY3NDFDQzYzNwotOjEwNzhEMDAwOTA3OUU1QjRBQTIyRUYzOUUyRDM5MUZCMDZGQ0MyNEZCRQotOjEwNzhFMDAwNjVDQ0MzRThEQ0ZCQzYyMDhDNEJCRUYzRUY5RjdBMzAzRgotOjEwNzhGMDAwRUVGNDE3QTVDQjgzNzAxRTVGRjY0NzBGOUUzNzc4NjdBRgotOjEwNzkwMDAwMTlCNzMzNkUzMkU5MzMzQjA1M0U3RDcxQzVEQjExN0YxQwotOjEwNzkxMDAwMzc1N0ZGN0RBQ0UxRkNGODUyMUU0NzU5MTQ5MkQxRTg2RAotOjEwNzkyMDAwRUNBNkVGQjI2RDcxRTQ5QkQzRUI4QjlCOTMwQzc1OUQzMgotOjEwNzkzMDAwNEUxN0RCNzk5RTk0NzlGRUM3ODVGREI0NjhDNzI2REJCOAotOjEwNzk0MDAwNDAxNUM3MEZGQzE2QzczRjJFRjRCNUUzQkIzREU0Q0Y4RgotOjEwNzk1MDAwRDBFMTk5QkI2M0I0MERGMUYwOTc1NkJCODhDM0I3NUIxOAotOjEwNzk2MDAwMzlGRUI1NjkxODNGMEI4OEE1MzBDMzc5Nzg1RjFDRjVERgotOjEwNzk3MDAwMzdGRjdFOTlGNDhCMzkzMEQ2NTJBMEVGNDBFQjIyQjIxQwotOjEwNzk4MDAwQjNDREYzOThGRjhFNUFEODFGRDY2RkZFMkE4OUY0NTJEMgotOjEwNzk5MDAwNkNCRjBDRTgyMUIwQjQ5RUUyNkNFNjc5Q0UwOTlBRTNBNAotOjEwNzlBMDAwOTlDQkM4NEUzN0U3NzlDQzYzRUE1RDEzMzM2MkU0N0I0OQotOjEwNzlCMDAwQjRGMjM4RjlDMjNFRUM5QTc3NUM0MjVGMThDQjJFQzYxRgotOjEwNzlDMDAwN0NGNDMzMkNGNzE3Qjk2QURGNzZDREYxNkE0NjQ5NUE1MQotOjEwNzlEMDAwMUY1NTNCQTgzQzUxRURBMzcyQkI0QkU1RjFFQzk2RkQ2NgotOjEwNzlFMDAwODc4OUJFOTRGNkIxQzhFRjNCREJERThCQkI1MThEQzhGNwotOjEwNzlGMDAwRURFRjZERkFGNEUwMkZBMTlFQ0ZCOEZGNDZGNzhGQ0ZFMQotOjEwN0EwMDAwMTZGOEJFNENDOEVGODU0MjFGQzhGRkUyRENGMjdCMzY5OQotOjEwN0ExMDAwQ0U3NzU0NEY3ODc1QjkzRDFCRUY5MzhEQzI4MzJFQzczNwotOjEwN0EyMDAwQ0RGODM4REQ5NjE1NDc3RUM2Mzg3MzFDRjhEQkUxQTUyNgotOjEwN0EzMDAwQjdFRjE2Q0JCMUYzMDY3NUZFRDkyRUU4NzlERTk2RTlERAotOjEwN0E0MDAwMkIwN0MwRjhCNTdCM0YxOENDRUYwMzY2NDc1MDNFRThFNAotOjEwN0E1MDAwRjQ2OUE2M0ZDNkFBNkNDOENGREQ3NEQ2N0EzN0UxNDc3MQotOjEwN0E2MDAwQTcwQkUwQTM1NDExN0Y0QzQ1QkJDRjRDNkY3REU1MTNCMgotOjEwN0E3MDAwOURCMjc2MEM0NjM5NjBBNkFGNTMxMjhCNzlBRjY4NjIxRgotOjEwN0E4MDAwMUNGNzk3Q0Y1M0I1NDJCNDQzNjE3QjU5QzlFMzc0NUM4QgotOjEwN0E5MDAwRkUxQzU3MUEwRkRGODlGQ0I5ODVGM0M3RTI1RjM3M0QzQgotOjEwN0FBMDAwOEI3MkE3RjQ1N0Y3N0I1MUVFN0NBODM0QTZFMDc4RTVGQgotOjEwN0FCMDAwNUI1Nzc4MzFDRTdENUMwOTdBRjFGQjBGNDM3MkNDQkMwOQotOjEwN0FDMDAwQzIwNTcxOTI5MDZCQzY3QzA1RDYxMEJDMDZGOUY2RjMyMAotOjEwN0FEMDAwQUQ1NjFGRkExOTJBQjdEOTc5MUM3QzM3QzcxQkQ0Nzk0MAotOjEwN0FFMDAwRkM3Qjc3RUM3Qzg1RDIyN0VFNEY1MTc5N0VBQTMxNkZGMwotOjEwN0FGMDAwNjE4Qjk1RjI0RkQwNUY4NkMzRjQxNkM3RUQ4RTBCMzdCRQotOjEwN0IwMDAwOUYzQkJFNURCOUZCQUU5ODc5Mjc3QTdFODA5OTZFNjcwMAotOjEwN0IxMDAwOUFFODE1RjA0Mjc2NEMxMEUwMjFCN0I4ODg1QkQ3NkUzMgotOjEwN0IyMDAwN0Y2MEQ0MzE4MEVCQzQ5NkZGRjA0QUI5RDE3RTczMUVEQQotOjEwN0IzMDAwMUYzRkREN0NDQkEzMThFMkU5OEQ1RTRGMDlGQThFRTg4QQotOjEwN0I0MDAwMERBMTk4NzkwQ0U1RDZCMDE3RURGMEYyNEQ1NkIyRUJEOQotOjEwN0I1MDAwQ0E5QjY0RTZDMDdDOTYzN0VEQjQ2Rjk3MzVGREVFRjVCMQotOjEwN0I2MDAwNEIwMEJFQjI2N0FDQzlEM0Y4MzQyODVGNDE1RkE3RUVDMwotOjEwN0I3MDAwM0MxMkIxMkVBNUJCN0VDN0UzQkRBQUM4MjcxMUVCNTNBQgotOjEwN0I4MDAwRjZDQzdFMUJFNkM1OThGMTM4QTU3OUJGQURDMzk0OEZCRQotOjEwN0I5MDAwNDBFQkQ0N0NBQzkwQ0VFNTZEM0Y2QkMzRkRGNEMzN0Q3MAotOjEwN0JBMDAwMTJFQjlGRDFGM0ZCOTI0REJGRjNBMjdDNDAzQzUxNUNBMgotOjEwN0JCMDAwNUVBQzU3RUZGOTQyRTE2QjlFMkJBMDc2RTQ4N0VCNkQ0QwotOjEwN0JDMDAwRkQyRUM2MzUxQTQzRjRGREY0NzMzMDdFQzk1Qjc2Q0FDOAotOjEwN0JEMDAwNTcyQTc5RkEzNkNBRUZGOTQwQTlFMjc0RkVGMDhBMTRGRQotOjEwN0JFMDAwREM1RjRCQUNDMTE0MUY5NUZDNzlDOTIzM0YyMUZBNUJDNAotOjEwN0JGMDAwRjhDQTRGNTJGODc5MUUyRDhERkI2RDgyNjlFNENGRDhGQgotOjEwN0MwMDAwRjgwMzlBREYwMjE2MjBGQTJCNzk1ODJFNDY3RkM5MTlGRAotOjEwN0MxMDAwODUxNTNEMTM4MzRGRkUyQ0Y4RTQ4M0NENzYwQ0EyQjI3QwotOjEwN0MyMDAwMEY4NERGMzJGOEFBMkNFRUZEMzVDNzkzRjhCRDJCNjcyMQotOjEwN0MzMDAwODQxREJEMkJDRUEyRTc2OTNCQTJFREFBQ0EyREY1RURBRQotOjEwN0M0MDAwQjgzRTFGMEREMkZBRkIyOEFFQUYwNDA1QkUyNEQyQzc0MgotOjEwN0M1MDAwNUZCOUJDQkY5MDYzNzQ1RjhDQUVFNzRDQzFFN0Q4QkUyMAotOjEwN0M2MDAwREQ0QUY3QzY0NDdENjdCOEY3RTU3NjMxM0VDMEVEOTI1MAotOjEwN0M3MDAwMkU4MjMyMjVCNjNGRDNFRDk2NzRGODc4RkU4QjRFNUY5OAotOjEwN0M4MDAwQkRGMUZEMTY5RTRGRjJEOTExMkU1NzMwMkY4NkRFQjc2QgotOjEwN0M5MDAwNUJDM0ZEMERGOTMwNzZDM0JEMjI5MTdDMEZBQkUwNkI2OQotOjEwN0NBMDAwRTM3QjgwOTNGMjU1QkFGMUJCNEZBMjM4RUI4Mjc1NzYzNQotOjEwN0NCMDAwNjMxRTVDMzdERDk4RUZCQjMxRTZBRjJDMzRFOTVCN0FBRAotOjEwN0NDMDAwNjk5NjBCNkZDNjk5RTI2ODFCQ0YyRjdGQTVEQzFBQTJCRAotOjEwN0NEMDAwQkNBM0YyMzdFRDY0M0Y5NDM3NTk4QjExMUYxRkVGMzg2NwotOjEwN0NFMDAwRjhGQThENDBFNzFGMzdFQjdDNkI5NEFGNjZCRTJERDk1OQotOjEwN0NGMDAwMzk4NkM1RTJEQjhGREQ3RTE2OTM2RkUxNzk0Q0JFNzU2OAotOjEwN0QwMDAwNDdFMjExMkFGQkVFRTRFQkMyNUVFNEFCQzVERDQzMUZBNAotOjEwN0QxMDAwODhDN0JDREM4RjlFMkMxQjQyN0UwNjEzNUU3NUI5NkEzOQotOjEwN0QyMDAwOTY5NzFCRTNENDVFRjJFQUY4N0UxRUM5NzdFNEY4RDM5NwotOjEwN0QzMDAwRTlCMUY0QTlDNTM0NEUzN0RERUE3NEE5RDM2RDJGNzlDMgotOjEwN0Q0MDAwNUE2NjNDOUFERkI3MDk3OTY0RjY2NzA0MjdCMzFDQkMwRQotOjEwN0Q1MDAwNUZBRkQ2QzY3MkQwRkYxQ0I0QjhGQzVCMzM2MkU0NzU2QgotOjEwN0Q2MDAwQjBBQTBCNTBDRkE4NzE2N0M0Q0NDRkY1QkI3RDY4QzY1NQotOjEwN0Q3MDAwMzI2QkIyMkFDNzhBNzdGQkE3NTg2MkVBRjFGOTZFNzFCMwotOjEwN0Q4MDAwM0YwOUQyMDJFQTkzNkU4RUI3M0ExMTVGMDE0QjkwRjIyRgotOjEwN0Q5MDAwRkVFOThDMzZDMjk3RTAyNTdFQjJDMjczNDZFNzJBRkQyMwotOjEwN0RBMDAwNzQ2RURCMUY2N0Y5NTQwNTE1RUNEQTM1NDMwQTE1RjREOAotOjEwN0RCMDAwQTdFNjVCNkVDQjgyRkE4MjM1Nzk4NTBBQUNCMzdGODIwNwotOjEwN0RDMDAwNjU1NzI2RDQ0QkQ2RTRGM0ZBNDU5NjdDMkI5MEU2RTMzMAotOjEwN0REMDAwQzE4MkMyQTlEMEJFNDI5RkU3QkM3ODgzN0Y0M0IxMUM1OQotOjEwN0RFMDAwNUI4RjcxMTdFNTM5MkJBQjg1RkE1REMwRDc4RUJDNDgyOAotOjEwN0RGMDAwQkMzN0NFQ0U4MjRFQThDN0Q5QTA4NEZBQ0E4QzNGQUU3QgotOjEwN0UwMDAwNDQyM0YwM0U3QkUwNkEzN0M5QTNDOTJBRTJGNTg0Q0Y1OAotOjEwN0UxMDAwNDFGOTMyQjdGRkU2NzJDQUNGMkM3MzczQkZGMTg4NURBOAotOjEwN0UyMDAwMTNFOEZFRERFRjYwRkMxRkJCQzdGNDNFN0U5RDk1RjdCNwotOjEwN0UzMDAwNzM2MkU3ODgyOTg4RDcxMTQzRjg1NTVGM0FGRUYzMTQzNwotOjEwN0U0MDAwOTU5RTNCOUJGMUU4MjlGMTdGMkE5RUZGQTg0REIwNTFGQQotOjEwN0U1MDAwM0Y2NURERUI3NTdFNjVBREM4NkI5MEUzMzgxREM4RjFGRAotOjEwN0U2MDAwOTZBQTY3QTA1QzIyRDZGRjM2ODEwRkZDNDE3QkI5NzNDRQotOjEwN0U3MDAwNkZGRkNERkNERUE3QUVDMUI4QkVCMjdDRkFDRkE4Mzc4QgotOjEwN0U4MDAwNzZGRDM4Q0U4RkU3NTdERTcyNzE3Q0REMTBCRkM2M0FDMwotOjEwN0U5MDAwMUNFQTc5OEVDMUI3MjE1MUJGMjVFREY4MDk5NkQ3NzgzNAotOjEwN0VBMDAwMDJGRkNFRjFDRkMyRDhERjhEMzdDOUJDM0Y3Nzk1MDcyRgotOjEwN0VCMDAwRUY1MTkzMzRBRTQ3NEI0MDM0QjMwMTBGQjUxQTUzNkRCNQotOjEwN0VDMDAwNTlDOEEyQzY3QzBCNTlDRUVCMEFEM0I4MUVDM0I4MkMzNgotOjEwN0VEMDAwMURGNjQxNThBNzFCQzZGMzc1MDI5Q0QyQkVGOEM2MzhFMgotOjEwN0VFMDAwNUU5RjE1Q0FBQ0VENTAwOThFQkIxMThFRDFGNkQwMjAyNQotOjEwN0VGMDAwQjQ3RjZFMDRCNTg4RDNCNUQxRkVENkUzRjQ5NUZGNjk5RgotOjEwN0YwMDAwMjEzQkIzNTI1MjZCREQ1MERGRjUzNjIzQjk3Q0NBRTUxNQotOjEwN0YxMDAwMTVGOTA3RkM3RTE5REQyRjMxRkVBNUI5NTM3MEM5MEE4QQotOjEwN0YyMDAwNUFDQTc4MUU4N0YwNDNFOTcxRjQzM0FDNTVDNkM5RjREOAotOjEwN0YzMDAwRjA1MzlCRTRFMTA0QjY4NkU0NjQ1RkYxQjFDN0RENjIwRgotOjEwN0Y0MDAwOUYxOUMwMDY3Q0MzRjg1ODkzRkIzQ0UyNjNFOTZFNUQ2MQotOjEwN0Y1MDAwOUYxN0YxNzZCMUZGOUY3RTMxOTNGMjg1MTQwNTczRjI3RQotOjEwN0Y2MDAwMThCM0E5MzJBNTg4RThERkVEMzZDOTVGOUQ4RTQ3MUU5QwotOjEwN0Y3MDAwRjFERDgyNzgxOTc5ODRERENDRURBNTVFRjIyMzhFMzNCNAotOjEwN0Y4MDAwQ0E2QjFFREQ5MTQzRjkxMTU2NzM3RUM0NTEwQjI1M0MxQgotOjEwN0Y5MDAwOEQ3RDIxNUY0NTdDRDY4OUI4RjEzNzhEREJFQjcxRkY5NAotOjEwN0ZBMDAwN0NGRUE4NDcxQ0ZGMzk2RjExQzU0MUYzN0RCMUUzRjg5MgotOjEwN0ZCMDAwOTdDOEIzMjlFRUMwNUVFNEVCQTdDN0YxOTk5QzJCMjNDOQotOjEwN0ZDMDAwOUM2N0MyOEMyNTIxOUM0NzhDRjdDNTVDOUMxQzk0MjkxRQotOjEwN0ZEMDAwQURFNjZERTNGMzRCQ0NFNzU5NENFQkZENTdGMzdBOUZERAotOjEwN0ZFMDAwNkYxRUM0ODdGQzdFQjVEMTZDMTRFNTQxNTg0NTFFQzQ5NAotOjEwN0ZGMDAwQjMyQzcwNUY3NDFFODQ4RUM3QkVGMjRDQ0M3OTI1RTYxQwotOjEwODAwMDAwM0M5MkI0ODAxMTRGMDM0Qjg2MUJERTBGQUFDQTMzRDRCNwotOjEwODAxMDAwODcyQ0JEQzREMDNFMDMzNkMyRTg3QTU2QzM1NTg2RjZENwotOjEwODAyMDAwNDMxQjY3MThFQTE3NkNCOEQxRDBGRUMyRDA1Q0MzRkIwMwotOjEwODAzMDAwMTFEQjRBQ0ZCOUVFMjM5Qjk3MThERUNCOTY1MDNFREU3QwotOjEwODA0MDAwMEJBOUFGRkI0NTJEM0Y4QjQ5MTdGQUJBRUI3OTVBOTgyQwotOjEwODA1MDAwNkU4NEY4MUQwM0VCRkU1MDA2Rjk4RkE2NDg2QUNGRjUzMwotOjEwODA2MDAwRjc4NzgzQjQyRjdGRDNGNUNGRjYwODdERTgxQkYyQkJFQgotOjEwODA3MDAwMUY4OThERjI1QUI5OUVEODY5NzUzN0EwNUU5QzAwQjBGMQotOjEwODA4MDAwQTFCQzM1RUIxNzA5QURDRkZGMTdGRUREODk5RUY5MTZCMAotOjEwODA5MDAwRUE3MkE0QTMzQjY0NkQzQ0VFRjdGRDQ0N0U2NDlENDUwQgotOjEwODBBMDAwOUMyNzlERUMyMDdERTAxRThCRTVFNkU4N0I5MjJGRjU3QQotOjEwODBCMDAwNzA3QkUwNTIwRkRGNUY3RTA5RkIyNkVFOTMwM0UzNThFRgotOjEwODBDMDAwOTBGNjRGMEI4QkRDNjcwMUYzRjUyNjMxNzE2RkYxQTY0QgotOjEwODBEMDAwOTU1M0QzMzE5RUQ5OTFBMzI2MDA3RjYzN0Q1MDQ0RUUwMgotOjEwODBFMDAwREY2ODU3NkIzMTFFMzA1QUU2NzIxQ0U0RkI5NTlFN0VBQQotOjEwODBGMDAwQjhFRjJDQjM3MkZEMjc2ODQ1M0MwRjc0QjBBMDM3OEZFMgotOjEwODEwMDAwRjYzRDhBNkIyNkIwNjQ2OTQ5MkU5QTVFRERGQjhCRkFEOAotOjEwODExMDAwMzUxMEMzQzFEMjExRjE2ODA3QkQ4QzkwNjA5MEQ2RTFEMwotOjEwODEyMDAwQTJGREZGODdCQURDMkJCOTkwRTRERTY5Qjc5RTM3QTZDMwotOjEwODEzMDAwRDI3OUM3RDNGM0IyRThGOTlCMzcwMUQ3MDFGRkJDNjkwNQotOjEwODE0MDAwMzNEQTQ1N0RGOUE3NEEzNkRERTc0MUZGRkY5QjM5Q0M5RAotOjEwODE1MDAwOTA2NzUwMjZGMDU2ODYxNzYyRTJCOTkzRDA3RkE2MjAyQQotOjEwODE2MDAwNUEzQUU3RkY2RDE4MDI1RDI5QjVBRjQ0MTE1REJGRTFEMgotOjEwODE3MDAwRDY2MkNBREJERDNEM0Q4OEZFM0ZEREVGQUNGNzUzRDk2QgotOjEwODE4MDAwM0E4OTc1REYyMzBDRkREREYwMDZGNzdGRERGMDM3QTNCQwotOjEwODE5MDAwM0ZGNzY3MUU3RUVFRTg2NzYyQkM5OTUwRjgwMDZGMzNDOAotOjEwODFBMDAwNjEzRDEyQjA3QzdFNjIyMUYyMDMzQzBGNEI1MEJGQjZBMgotOjEwODFCMDAwMEQ1NDNGQTBGQkU5ODEwQzJCQzJGMzQ3RTY3RjZEMEYwNgotOjEwODFDMDAwQzBCM0MyQTNEMjM4RDdCMzYyMkJDMkY1RkE0RDhCM0RGMAotOjEwODFEMDAwRDhBRUJCM0ZCRDlGODE3OEE2MTNGNkU5ODRBMDM1MDVENAotOjEwODFFMDAwRThBN0VCNTI4OUY2NzUxOENGODFDRjhCNjcwRjVDODFCQQotOjEwODFGMDAwNUI4NzNFREVFQjJDNzBGMjM1NThFRjE5Q0M0RkZERUE3MQotOjEwODIwMDAwRkQzM0U2MzJDOEMxOUQyNTY1N0Y0OUNBNDRGOTY3MjExRgotOjEwODIxMDAwRkZDNzkyQkQ3NjkyN0Y5REE1Njc5QkQ2QzNGQjlCMDc0OAotOjEwODIyMDAwNzYwQzQyRkRFMkFERDJCRjBENDNCQ0ZDNzA4M0NDNTQ1MgotOjEwODIzMDAwNThGRjQ3NUQ4MUI1OUUyOEJDQkQzOUVGNTMwRkJFMDc3RgotOjEwODI0MDAwM0Q2MUVCN0FEQ0U0OUZCMkQzMzlBRkI3NEE5RjFBMTY4RgotOjEwODI1MDAwQUQ1N0ZGRDIzMzY5M0REMjFEMUI3NzdFRjE5RTI5NEY2QQotOjEwODI2MDAwNUU0OEY2QjY0RTVGOEIwNDdEMkREOTdFMDFFOTgzNEJDNwotOjEwODI3MDAwM0NEREY0QzVFQjVCQjNFODNDRDE1ODg5QzVCNDIzRjFEMAotOjEwODI4MDAwREUwRkNDNEJERjA5NzQ4NUU3MDhGNzdEQzFGM0M3NzdCNAotOjEwODI5MDAwQkQ5ODk4NEZFNzUxNTk2MDQ3RjRCQzc2QkQ3Q0UzMDgyMAotOjEwODJBMDAwRjJCNzFFNEQzRTJGNzg5MTI3ODNBODVGMzEwRUU3NEIyMgotOjEwODJCMDAwODIzRjY2QjUyNkU1MEJGREFFMDVGQkJGRjFCN0RCNEY5MAotOjEwODJDMDAwRkUwOUYxQjNGN0E5QUQ3NzYyOUI4MkYzQzMwNzEzRkJGNQotOjEwODJEMDAwOTg1RkUwMDFGNjMxQjI3RjNBOTlDQjZGOEY2MUZGM0MzNgotOjEwODJFMDAwMjNGNEFGM0IyQzFBRDkyNTY3MkRDNTIyN0Y5RERCMjFCNgotOjEwODJGMDAwQjJDNTlGOEE3OURDQ0RBRDcyMUNFMkNEOEIwNjhCMkU4OAotOjEwODMwMDAwNUY0MDI3RjRFMjNEOENFMkZFN0MwN0Q4NjcyMzg0RkNDMwotOjEwODMxMDAwRjlDM0REOUYxNkQ2NzFGRjhFNDFBRjJCMzg1NDZBRDA1QQotOjEwODMyMDAwRTc4QUUxMUZDQUZCOEIzNzA2NkFGMTRFRUU1RUY1QkFBQgotOjEwODMzMDAwQjA4NUVDRTE3RjU0QkY3QkY3MUY5NEY3MjczRDlDRkY4RQotOjEwODM0MDAwOUI3M0I4RkM2RTBFQkI0MkRDNkU2MEY5QThFRjM1NzkwQQotOjEwODM1MDAwRjk3RTcwMjVFNjg5MDBGRTZERDJBOTFDMDdGQ0ZFQzlENgotOjEwODM2MDAwREQ2NzU2MzY0Qzg0RTVDRUU2RjhDMDNBRkRGRDk1MzYxRAotOjEwODM3MDAwNEVBN0RERkFERkExRTFGQ0VGQ0I4OTczQzAwNUUyNUMxQgotOjEwODM4MDAwQjQxOTlFMDJFMDJCQkVDOUJBMENGQTYzRjhGMDk3NzREOAotOjEwODM5MDAwQ0VBNTI5NTFGREMzMDRENEU3NDE0RjQxQkU3NzJBMUQyNAotOjEwODNBMDAwQjY4NDE4RjM3QjE2RTUyN0QwRjczODJGREYzRjFDMkQ1NgotOjEwODNCMDAwM0MwRUU3NTAzNUJBRjdDQ0U5RjM4RDQ2N0I0OTZGRkZBOQotOjEwODNDMDAwQjE4N0VCQUQ4QjBGQkYzNUQ4MDZFQjc0RDJGMkEyMTc5NQotOjEwODNEMDAwRTMwOEU1N0I3NjdBRDE0QzFFMTUxN0YwN0E1MUFFQkVENAotOjEwODNFMDAwRjlFQTU4MUZFNTVCNkQxQThDNzY2RDczOThDNzI3NDZCRQotOjEwODNGMDAwMkEyQ0E4QzRCOEI3Qjk3MjQzM0U1REZFNURCMTIxODk4RAotOjEwODQwMDAwQ0EwQkQxOUYwMDhGMkFDMzdDOUVBNzVBNkE2M0RFREIwQQotOjEwODQxMDAwNTlGOUZGRjYwRUMwNzU3QkFBMUYzRjJGMzVCMjM1N0Y4NQotOjEwODQyMDAwMjFDQTNGODRDNTBBNzJFRUM5MkY0NjUwN0Y0M0JEREM4NgotOjEwODQzMDAwOUU4N0YxMTU3Q0NFNThDODgyRjcxRDNEMjVFQ0I1NTNCQgotOjEwODQ0MDAwNUZDOEQ0NEVFRjc3NjRDQjI0RDkwNzZCOTkxQjZFM0M4MQotOjEwODQ1MDAwNDBGNjYxQUI1REM1NzU3NjZFRTFGN0MxMzk1QjlEMjQ3MQotOjEwODQ2MDAwRjcyQUY3NURDMUVEQjgwNDFFRjc2QzcyNzVGRDU5OUNEMwotOjEwODQ3MDAwNjM1MzMxNEZEMkU5NkI2NDg5RDA3RjkzOERFRjhGMTdBRgotOjEwODQ4MDAwMDIwM0VDNzQ0NzlFRUJFMzM5NUIxRkEwQTQ3NjQ3MzZFQQotOjEwODQ5MDAwQkY1N0NGQTkzNEIyNEJEREQxNzhGNzEwRkM4NTgyQkUyRgotOjEwODRBMDAwOUE1QzYxMEJFNkVENzRFMTVEOTUwNDU3MDQ0RTQ2RTM3QQotOjEwODRCMDAwRUE3MDVFNDhGQTdDOTNBREVCN0QzQzdGNDlFN0VCNTQ3NAotOjEwODRDMDAwODQ4M0MzQzk1QTJGNTA1MUFGNzBGQTc4RkNENkU5NTM1MAotOjEwODREMDAwRkQ0MUE5Mjc1Qzk1QTM0MENGMDU3RUJCQTc4NjQ1RkUzRAotOjEwODRFMDAwM0UwNkU2QjFCOTIyNzUwN0YwNDQ1MzI2MTNGNzYxRTU1RAotOjEwODRGMDAwRDRBMzdFRDE1RDQ3ODEzNDJFRjJGRDhGQkMyM0VBRUJGRAotOjEwODUwMDAwMjY5MjlEMTM5NEQxQUU4N0QyOTM4OEYzRTRGQzg1RjcyRAotOjEwODUxMDAwMTdGNENCRTM3ODQwM0Y3MTlDODNCRkVGNkUwRkY0RUUwRQotOjEwODUyMDAwNEVBNDdCOERBOTlEM0ZERTE3Nzc5NUM0QkFFRjM1RDU1NAotOjEwODUzMDAwRkQ0RUI3NEJFMUY3MkY0M0ZGNTZGOEMwMjgxNTYwMjlEMQotOjEwODU0MDAwN0ZGRTM5QTJEQjMyNEJFQkZBOTEyQTlFNEIwQ0NDRjcyMwotOjEwODU1MDAwQzI3OEJGN0VEQjgyN0Y1MzkxN0RCNERENDlFNzkwNzNBMwotOjEwODU2MDAwN0VCMzg5RkNENUU2RkVFQThGRDZEQzhCNzlEOTlEQkYzOAotOjEwODU3MDAwOTE1NENDMDNFREI0NzY1MURDQThBMkY1MDMzQUFGNzg2MAotOjEwODU4MDAwNDVDQjMxM0FCNzY1ODkwRjU0NjJCRkUzNUE5NjRGNDFFNAotOjEwODU5MDAwRkM4RDY3OERCNUU4REYwMzc5NDg3MUZBRTY1NDJFM0YwQwotOjEwODVBMDAwNEUxRjE5QjY3OTc5MTRCRUVGRjcwQUJCQjAyQjMwMDQxMQotOjEwODVCMDAwRjlBNjU1RjBFNzNFRDQ2RkEwREMyM0Y0QUMzREZCN0Y3OQotOjEwODVDMDAwOTgxNTdEMEUyQkM4MEU5MDNGQUM4NjFEQTJGQzQyRkQ3NwotOjEwODVEMDAwNzk2NzQ4QTE3MzYwMjM1RTc3RENBQzQ1RDFEQjJGMDQ1QgotOjEwODVFMDAwQkZGRkMyQ0JGNUEwRUNGOEMwMEE4NEI3NkNGRkJCMzY2NgotOjEwODVGMDAwQUY4QTc5QUNDRDgzNTFFRTM2ODMxRTc2QUU3Q0M2NEEwNwotOjEwODYwMDAwMTNERjc0RTdCNzFDRTdGNzcyQzNCQUQ2QzVDMzNBM0RBOAotOjEwODYxMDAwRjU3QUNCNzBGQ0JCMjIwMDNGQTNGQkFBREVCNDkzREM0RgotOjEwODYyMDAwREM5M0MxRjk2RkY5NkI5RjhGNDJCOUY1RjlERUIyMjE4NgotOjEwODYzMDAwODhBRjNCQkMzQ0VFMEY3NDNFRDk4NUZDRjQwQzIzMzk2QgotOjEwODY0MDAwQTZGMzYzMkVGMjIzODA5RUVCRTM3RTk0NUNBNDczRTQ5NgotOjEwODY1MDAwM0Y1QjNCREQwM0RBQjU4N0RGMEIwMTc0NEU3NDBGNzRBQgotOjEwODY2MDAwRUU0M0ZEMjJENzA3NzQ0RkRGNUY0MEZDRENENDZFRTFBMAotOjEwODY3MDAwRTdDMDQxOEUwRkE1RkE2NENBNTc2OTZBOUZFQTIzN0U1NAotOjEwODY4MDAwQjYwMDZBRjM5MDJGQzMwN0E4OUY2NjdFRTc2RDgxRTk2NQotOjEwODY5MDAwM0VENzhGMzE0OTYzNEM0NDNFRkU5Nzg3Q0JGRkU2MUNBMwotOjEwODZBMDAwMzUxRTZEODQzODU5MzZGMDQxRDQzRUM5RUI2MjFGOTVCMgotOjEwODZCMDAwRTI2RkFDNUY4Nzg5NDZFRDYyNUYxMDdBRDczRUExRTczMwotOjEwODZDMDAwQjJBMzVDREVERjI2RjZCMjI1QkZCQkU0REExRDMwREZFNQotOjEwODZEMDAwMjUyRkM5NUNGRTBCM0EzOTIwRjRFMDQzRDVBOTU0QzdENQotOjEwODZFMDAwRkQ0Mjg1NzUxQTAzMjVERTc3Mzc1NkFCOUE4MkRCQ0ZCQwotOjEwODZGMDAwQjhBMkM2ODM1ODVFNTJEQzNDMDU4RjRDNEQ5Q0Q1N0U5QgotOjEwODcwMDAwOTA5RjYxRDM0NjIwRkRFRDNFNzBFNTA4Q0FERjdERDMyMgotOjEwODcxMDAwQ0UzMDQ1NzFGNzk3NUQ3RjdFMTJGMzUxRjcwMUZFNjMwRQotOjEwODcyMDAwRUM0QkU4OUY2NTE0QkYyOTI2N0FFQzhENkUzQUE1OEUzNgotOjEwODczMDAwNkIyNkY4NjEzQURFRjIyQjE0RDhFODJCOTAzMDAwMUYzQwotOjEwODc0MDAwQUY3OTRCRUI4MzAwRDAwRkUzQjVBMzQ4OEY3N0ZBMDJFNAotOjEwODc1MDAwNTQ3NkJFRjI2NTBBQ0FGNDNENDdERUY1QTJCQ0RGNkQ3MQotOjEwODc2MDAwRDM0NjIwOURFRENFMDQ3QjIwMDY3REZFNEVEMDRGNDFBQQotOjEwODc3MDAwMkY3OTE1NUY3QTc5N0VGQUIwMjBCQjBCRTlBNzYyQjczMwotOjEwODc4MDAwNEM3RkJGRTBFNDZFNTlDMzczRDhFRjZCODExNEQ0NzM5MAotOjEwODc5MDAwOEVCM0UwQ0MwOUI4QkYwQkJCNzYzRTQ3M0I5QjhGN0FDQwotOjEwODdBMDAwQ0IyOEJBMkZDMzYwNjczMjc5OTk4NUVFN0I2Rjk1Qzg2NQotOjEwODdCMDAwM0Y1MTYyRDI0M0NBNTlFM0NBODFCODZGQjQ2RUIyRTE4NQotOjEwODdDMDAwM0M0QUI3MThCRjJGNDdGRDY1MTQ5NkU3QjY1N0JGRjQ2QwotOjEwODdEMDAwMEFGRDI1OEI2NUExRkUwMkY0NDNGRTg5QUVENzY0RkYzNgotOjEwODdFMDAwNjY0NkY5M0Q2RDk4REZGMzk0ODVFMzA3RTQyNUYxQTEzMgotOjEwODdGMDAwQUVDNzNDRTFEMzRFQTA1RTdEQzIyM0Y2MTM2MThGNzZGNwotOjEwODgwMDAwMzU0OTk0REY3RkUxMzY5RTc3N0RDOTcxNzUxM0UzRjNCNwotOjEwODgxMDAwQTdCQ0IwMTIyMTA3MkY1MTc4RkNFMjkyMjM1OTE0MEYwNAotOjEwODgyMDAwMURBNzMxRjI4NzJDNjg5NTQyODhDNzEyNURBRjEzRTcwOAotOjEwODgzMDAwMjk2MERCMjVCRDZFM0MwQkQ1RTJGRDcyMEJCNzQ5NzQ5OAotOjEwODg0MDAwMEVBMzZDOUJEMTdGNUZCRUUxOTVDMzY4MUUyRTZFMzY3MgotOjEwODg1MDAwOUQ4RjE3NzgzMUM3Mzc3NkUyMkYzMUUyMUI4M0UzODU4RQotOjEwODg2MDAwM0Y2NzMwMUI2QzM4NkZENTc2N0VFN0FEM0UxNkU3QUZCRAotOjEwODg3MDAwNUYxNUZERUJFRDI2QzQ3M0JBQTkxMEYzMkQwRkM5MjFDNgotOjEwODg4MDAwRjFGNzI5REQ5ODdGN0I4QkEwOEY1QjA0N0Q1NEIyQjAxQwotOjEwODg5MDAwMERGM0Y3MTdBRkUzRjM2NTZCQUM4NjdCOEIxN0VDQkU3QwotOjEwODhBMDAwOTVDRTIzOThFOUE4NjQwNzhGQkIwMTAyMjlCRTUzQjI3NQotOjEwODhCMDAwRDFGOEJFNTRFMEEzRDQ4NDhGOEE4MDY0ODI4QkVCREIzMgotOjEwODhDMDAwM0RFMTZBOUU4OUVCQkI3ODg3OTVGRTRFODcxOUFFMzNGMgotOjEwODhEMDAwNkMzNkU1MTFGREIzRTEzM0FGRDM3NUZBM0EwRDY3QzNEQQotOjEwODhFMDAwMERFQjU0NzRFRUZCMDkyMkY2OEQ1MUZGN0RFNkYwNzAxRQotOjEwODhGMDAwQ0E3NzM5REQ5NjQ5RkUwMzlEM0VDQ0ZEMTQwQUZERjk4OQotOjEwODkwMDAwOEEwRDVDQ0YzQ0Q5MzIyNTZFMjREQTQ1MkYyQTdFMDlBOAotOjEwODkxMDAwRkFDOTdGRTkzMzJGOUVGN0M4REIyQjMzOEMwQjc2QjY3MQotOjEwODkyMDAwRTZERjg1RTdCNDc3QjU2NTVGODdGNzUxRTRCREE0RDA4RQotOjEwODkzMDAwQkU5MUZGNTIxRUREMEI5MkY3NTI1RTVDMTZFNTUxQTgwOAotOjEwODk0MDAwNDk4ODBGRTg4N0Y2RERDRTE3QjNGRjk4OEJGMkIzNkQzOQotOjEwODk1MDAwNkEwMUEyNzlGOThCNzk3MUE4MUZFQzYyREMxRjIxQkQzNQotOjEwODk2MDAwNTQ5MEQ0MTFCNThGOTRDNzczRkZDMENBRDRGN0VFNDFBOQotOjEwODk3MDAwRkRGRDhBNjdGOERGMUZCQ0MyREFGNTMyRTYxRkVDNkEzQwotOjEwODk4MDAwNTNGQ0NCQTE1RUZFRDJEQzFBQkNBN0EyN0NCQkU0NDdBMQotOjEwODk5MDAwMzVGQjcwRkI5MkU0MUYyMTlEQjU1QTdENzY4MkY3Mjc0NwotOjEwODlBMDAwMDdGMDdENzA4NzQ0Rjc4NTU3RUVCRDdDNDQxM0U2Nzk2OAotOjEwODlCMDAwNkZDQUY3NDc5RkNCQ0U0QjUwRUZDM0JDNEE5NjE2NDdDMgotOjEwODlDMDAwRjZGNzE1ODNBQ0I0OUY5RTE4MTBGNzE4RERDN0EyNkQ5QgotOjEwODlEMDAwMkE0NDM5N0JFMkI5NUQzNjNBMzdEODI0QjE1NDk4Qzg3NQotOjEwODlFMDAwRTFENDgzNEZEM0ZEMUVDRkJFNDJGOTBBNTM3NkJGNDI3NgotOjEwODlGMDAwRjkwOUJEQzlGQjkzMjE5OTg1QzlFRTZFQTQ3QjYxMTY2NwotOjEwOEEwMDAwNkZEMkVCMUQ3NDBFQTI1OEU4NEQxNTVCOEU1MUJEMTQ0QwotOjEwOEExMDAwRjU3RjE4QUY3NEEzMUM1MkUxRDc4MzdCN0Y0REY5MEQwRQotOjEwOEEyMDAwMTUzQjc4N0UwM0JDMjdGOTUzOEFGMTUzMzU0MkU3NzMyRgotOjEwOEEzMDAwMTlBNzgzQjk0MkZFOTQzMTdFQ0Y1MDU5MjMzRjQ3QTdFRgotOjEwOEE0MDAwREY4QkE0RDNGOUZDMUQ3MzI4MEZBRDQ3QkUxOURBOTc0RAotOjEwOEE1MDAwMTQ4NzY4MjRGQUVFNzlERjEwQTdFRjFFRjcyNDk5RTg0RgotOjEwOEE2MDAwRkI1NzNBN0Q1RkM4MkU0NEZBRkU3QzEyQ0YwRkZCRkMwOQotOjEwOEE3MDAwMTU1NzVDMkVDQ0U3RjMxNzY0Q0FCQjNGMDc5REQzN0UyNgotOjEwOEE4MDAwRkFBMkQ4RkY0Rjg3MkRCNDNGRTlFRDRFQjU3QzRBRkJFMwotOjEwOEE5MDAwNDhFNThCQTc2REE4QUYxNkI2N0U0MkVCMzBBRDc1RkZFQgotOjEwOEFBMDAwNTRDNEYzRDUyQzUwOEU3OEJCQkEzNUNFODc3QzNFQURGRQotOjEwOEFCMDAwODNDQkFEQUI1QUVEMjFGNDUzNUZDRDlBRUI3MDdEM0I4OAotOjEwOEFDMDAwRjczRDUxOTc4OEY0RjIzOEE3MTc1RDlFMkQxNEY4NUM5NgotOjEwOEFEMDAwMjhGMEI5NTBFMUY3M0Q5NUU2RUU1RjhGNkFDQTU1OENGNAotOjEwOEFFMDAwQ0I5QkFCOUE4NUJDRDk2OEM0NkZBN0I1NTkyMUJBMTk3RAotOjEwOEFGMDAwMjlCMUM2OEM5RUZCNUQxOUVCQTA3MzhGOUQ2OTIzRTg5RAotOjEwOEIwMDAwRUY0OTA2QzE1RTQ1M0RBQzdDODczOTBFQ0VFREZBMEFEMQotOjEwOEIxMDAwRDM3RTdBMjA1RURDNjdGMDBERUZDMTc4RDdCNDJFRDMxOAotOjEwOEIyMDAwQkFGODdFNzYxNUQwMTNDNjQzREFDMjM1QjkyOEY3NzQ4MQotOjEwOEIzMDAwRkM5OEQ3QTU0RENEOEEzRkQ3NzlFNzk3ODVERUFFRDc4QwotOjEwOEI0MDAwQUYxNUY3NEMzNEZCMUFEREQxNzZGODE1M0VCRTlGOTQ3NQotOjEwOEI1MDAwOEU5NzgzQjhBRURERjY0QUY2QzE1MUFBMjU2MkFGODA4MgotOjEwOEI2MDAwOURGMjY1N0MzRjZFQjc4Qzg2QUU5RjRGOTc1OTcyNzJBRgotOjEwOEI3MDAwQzQ1RUE5NEZCRDZGNUE1RTMyREUxRkMxRTVDNUE5NzE0MwotOjEwOEI4MDAwRDAxRkU2MEIyODhDRTQ1NEU1MEU3QjA4RUQwQzNDNzdGNwotOjEwOEI5MDAwODQ3NkMwN0YwM0VFRjNEODI5MDA4MDAwMDAwMDAwMDAzNwotOjEwOEJBMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEI4RDU3N0Y2QzE0RDc0RQotOjEwOEJCMDAwMTE5RTc3QkJGN0MzM0VGQkJDODdDRDExNkFFMkFFQ0ZGNwotOjEwOEJDMDAwQkYzMDE4QjMzMTI2MzZBNDQ5RDYyRTY5MjhCOENFMTkzRAotOjEwOEJEMDAwMUE0MjlCQjQ1QzQ4MTREMjg0QjM1MTg0NUMyNDJBQjFGOQotOjEwOEJFMDAwQjY4OThBNDJBQTQ2NkFGRjg4QUEyOERBNDQ4QTk0QThFMwotOjEwOEJGMDAwMzQzQTg0NTE0QzY1NUJFN0M0MjRCNjUzMjQwOEQwMTgzQQotOjEwOEMwMDAwRDRCNDI3RkVBMDY5NjU2MzgzMTQ5QzU2OTFFODM3NkYzRQotOjEwOEMxMDAwRjdCODMzMzY2QUNFOTJFN0RFN0JGM0U2Q0Q3Q0YzQ0Q1MAotOjEwOEMyMDAwQkM3NzhGMEU1RUY3QTVFQjg4NjI4M0UyMTE4MkFDMkNENQotOjEwOEMzMDAwOEFGQkI0QTU0NDFENDRERTkyNDZDODAxNjFBNDA4NzJCMwotOjEwOEM0MDAwRDM3NTVGQkM4MDY4QkNCMkEyMjgwRUJEMUJBQUJFNEMwNwotOjEwOEM1MDAwQzNGODE2N0YxRUNFQ0FBRUFGMTVBMjYyQTI0RTQ4QkRBMwotOjEwOEM2MDAwMzgzQkRGQTlBNjdEQUNERjM5Mjg0QzFCQjJGRkMzRkYyMAotOjEwOEM3MDAwOTQ5NTE3MTJDRDBDQ0Q5NTNEMEREOUE4Nzk4ODk2RjIxMwotOjEwOEM4MDAwRkMwRjU3QUIzODc3RjY5MjlGQTJFNTM4RDgzMjJGRDAzOQotOjEwOEM5MDAwRkQ0NENGOTFGM0Q5QTMxMTFENTg4MkYxRTgwQjZENTQxNwotOjEwOENBMDAwOEYwOTcxQjg5NDlBNjFENzRCNDYwQUZCM0EyRjJBODZFRQotOjEwOENCMDAwQTU2M0ZFOTQ5N0E4ODlBOEU3QjMzRjhGMkUyOTIxQkExMAotOjEwOENDMDAwRjZCRTMwRkNCQUIzRkY1NzBEMThFRkI2MEYyRjgxRkU3QQotOjEwOENEMDAwQ0RGNzg0NjE0MUZEQjk3Qjg4MUVDMkZDOUVEN0JENTc4QwotOjEwOENFMDAwRDIwMUU3QUM1QkYyN0ZGMkNBNDFFODI1OEUwNUY0NTc2QQotOjEwOENGMDAwMzBFQUExREU1MjgyNkUyRjFEOTYzMjQxQUY1RTU3NDI5RQotOjEwOEQwMDAwQjAzN0QwRTc2MzVDQzhDRUQ5MUYyNTdBRjFEREY5RjYxQwotOjEwOEQxMDAwMTJBNDY2Qzc4OEVGQzBERjVBM0E0NjczRDYxRkQ1MEEzOQotOjEwOEQyMDAwNEJBRTA2RjFBNTk2NkE2RjI5RUM3RkZFNTE4MUYzNjc4MQotOjEwOEQzMDAwQzYxNUNEMkYyNDZFNkY3RTI3MTc5RjMxODBCMTlDRTcxQgotOjEwOEQ0MDAwRjM0QzQyOUMzM0U3MEFFQzNDRThGREZCMTBENjZBODgwMgotOjEwOEQ1MDAwQTYwRUMxQjgxRjc2OUExNTg5ODc2NzgzMjM1NzBGN0ZBMAotOjEwOEQ2MDAwMTBFNTdDMzJGRUYxMzU0NDdGMUNGRTYwOTVDOUZFOTMxMAotOjEwOEQ3MDAwNERCNDlFRkQ4NkRFQ0ExQ0JGOTM3MDJBQzc0RkY4NjVBRQotOjEwOEQ4MDAwQTQ3MDVFRDc1RjE1MDNFNkQ5QUY2QTVGNDlENkFGOTM4QgotOjEwOEQ5MDAwNkEzQTY0RTRGMDYzRUU5MEQ5MzE1QTg1NzQ4OTBGNjVCQwotOjEwOERBMDAwQkUzQzYyNTRDQURCQkMzOUE1QzRFQ0JBRUMxOEYxRUM4OQotOjEwOERCMDAwMzJCMUZGMjdDQzBCRjg0M0VBNkMyNDA2M0Y3RkE2RTlDQgotOjEwOERDMDAwOTIyNzNEODM0RTdFM0Q0MzhFQzRGOTNCODg3MUMxOTgwNgotOjEwOEREMDAwQ0Y1RkIwREU2QUVERTVGNTlCRTU0MUIyMThCN0FGQUQwOAotOjEwOERFMDAwMzYxRTc3NDcxNTdBMDVFM0VFQ0Y1RUE4QTE5Q0YzODk3RQotOjEwOERGMDAwRkQ0NDdFQkJCQ0IzMTFFNjZERDczOThGRjRBRkVCREMxRAotOjEwOEUwMDAwOEQ0ODI1QzY1QkU4QUQ0RDFBQzY1QjI5Nzk5OEQ3M0ZEQQotOjEwOEUxMDAwOEUwNjlGNjc1RTVCN0NFRUIyQUM5RDJGOEIxNEM3N0Y4NgotOjEwOEUyMDAwOEUxN0Y2MkNGQUJENjNENzhEQjc5N0I2NDkxQzdBNURCRAotOjEwOEUzMDAwNUVFRDJFNzJFMjNEQThDNUJCQjkwRTY3Q0VGRDM3ODI0RQotOjEwOEU0MDAwQjBFOUU0ODUyQjIxQ0U1NzI2REY3N0Q2REQ2REJGNzFFMwotOjEwOEU1MDAwMDJFMzczQjM0NTNGRkYyNDc4RDAzMEFFNUE0NTg4RjMyMAotOjEwOEU2MDAwQzQ2NDlFRERDNkI4MENFREY5Qzc0MUNFREI2NTNGNzEyOQotOjEwOEU3MDAwM0Q3NDBGRUZBOTIxQjYxQjhGQUY4REExMEU2RjBFRkZCMgotOjEwOEU4MDAwNjIyREUzNDBBMjU3RkE2NUIxN0ZGMDZCN0FFMDYyNDQ0RAotOjEwOEU5MDAwQzc3QzYyRTg2Mjg0RDcxMzI3RDdGRkNFODJGRUJBMzMzRAotOjEwOEVBMDAwMEQ1Qjc5RkVDNDk4MkFGOUQ3NzBBNjUxRjJFRkM0NUYyMgotOjEwOEVCMDAwMUE4QjJCRDg3MTMyODI2QzM3MzFBRUM2MTg5RkM0NzhBQQotOjEwOEVDMDAwRTNBNzZERDA0QjlDNjk2RDE0N0NDQzk5QzY2MkVFM0ZENAotOjEwOEVEMDAwRUIwNEM1OTI1ODE3RTM5NTcyOUM4OUU3Mzc5QTIyRTMxMQotOjEwOEVFMDAwOTkxOTAxMUYzMDJGMjhFQUYwODcyQUU3RjE2NzZGRkZGMQotOjEwOEVGMDAwNjkxRkM3QjE3NzQwMzE3Mzc5OTREOUY3OTZBNjRBM0I3OQotOjEwOEYwMDAwRUYzMDdGODA2RjRGNTI5ODkyMUZDNzFEQjk3N0UwODQ3MgotOjEwOEYxMDAwOENFRjQ1NkY1MkU2QkJFNzk4RDc1OUZGOTMyMzg5NUVFNAotOjEwOEYyMDAwOTNGQjJDNUE2MjMxMUU5RkYyMTRGMkIwQzU2N0FGMjAzQQotOjEwOEYzMDAwQjgzODUxNEUzQjkzOEJGNEMzQUFCMDkwRkIyNjJFQzU5NAotOjEwOEY0MDAwQkZDQjdDOTk2ODg5RDc2ODc1MEJGNTJDNkE5NUYxOTAzMQotOjEwOEY1MDAwNzBGMUVFRjc2RUI2MTdCMTU3RTFEQTBCMTVEM0FFRDg1NAotOjEwOEY2MDAwMjJFQjVBRDhFMUNGMTYxRkM1MTdGM0U3OEI0QzNEMTEwMgotOjEwOEY3MDAwMURGNTgwMTdFN0RCQkMxQUYzOUZDODJDNTg4RTNFREIyQgotOjEwOEY4MDAwRUVGNkQ5RUQzRkYyOUFCRUI1NTgyN0VENzQxRUQ2REI0QQotOjEwOEY5MDAwMzNGREI2MTlGRDBDN0QyMTg2M0ZFRTZGQjFENzYzNDVEOQotOjEwOEZBMDAwMjk0MERBNjFDRUVGNzNEQjI4RTZBNTBBRDhEOTNDN0ZFOQotOjEwOEZCMDAwRkU3MUVFOTdGNTJDNTU2OUU3NkU3REYwMjJGN0MxRDU2RAotOjEwOEZDMDAwRjg1MjRERDVEQzA3NDkyOTA4MEFGMEU2QUIzMUFGQTZDNwotOjEwOEZEMDAwNDg3RkVENEFFRTA3NzdDNjk3RTkzMzFGQTNGRkU5RTgxQwotOjEwOEZFMDAwN0Y2M0U4N0YyQzdCNkEzRkFGNEYwMzhGODk5MTRCRUYwNAotOjEwOEZGMDAwODc2NUZGQ0NBMzI4MTNGMDFCNTg0N0RDMDlDRDNERkI0OAotOjEwOTAwMDAwMEU3QjNEQjdFQkYzQzdGM0Y4OTZDOUNGMzREMUU2NjRENgotOjEwOTAxMDAwRERDMkZDNUM3N0VGQjM0NDYwQ0EwN0IyNTIxN0VEM0I4OAotOjEwOTAyMDAwRTI0MTFDQUIxNDg3N0Y3RTZGREMyQzQ1MUNERTgxOTZGMQotOjEwOTAzMDAwNTQyOUY3RDM1QTc0NTFDNDM3RkQ4OEIwQjlDRkMzQ0Y4MAotOjEwOTA0MDAwMzI3RjRFOUY5RjVFMkVFNDdBRjcwRTYxNUJGODNBNTJCNAotOjEwOTA1MDAwRkJCOUJDQjcxM0E5QjMzRUU2NTM3NUZGRDMyRkNCQkEwOAotOjEwOTA2MDAwQjVFODAyNDVCMjc5N0MyQ0UwREM5N0I3RjM5Nzg5OTc5NQotOjEwOTA3MDAwMTc3NThFMEY3Qzk2RkRCODQ0NEFENkU3RkJCMUREQkQ2RgotOjEwOTA4MDAwMEYxRjZCOUU5RkJGMUEzQUZCODM1MkY4RjE4NDI5MEM4NQotOjEwOTA5MDAwN0JCMUJDRUZCQ0VGRjQ1MkZBRjY3OTVGMTU4RTE3ODdGRgotOjEwOTBBMDAwODFDN0NDRDkxQjNCRDZDMERFNDRFRDNGQ0JGODFFRURDQgotOjEwOTBCMDAwQkMwQjdGRUYwRDNCQjg3NjA1NDNGNTU0ODRFRTUyQTMwRAotOjEwOTBDMDAwRjdBNTgxQzdGMUMyRjgwQTY5QzdGMzRENjgxNUYxRkUyQgotOjEwOTBEMDAwRjQ5QjJGMDlDRTA3NDlGREJCRDU0Qjg1NUIyRjE1NjE0RQotOjEwOTBFMDAwQ0RBOThCMTI1QUM3QkM3QTRGNzNDNjEzNUU3QjA1RjdBNgotOjEwOTBGMDAwMDNBQUMzNjM2NkMzRkZFRkJCM0RBNzNFQTlFN0JDNUMwMQotOjEwOTEwMDAwMUIxOUFGRjdFNUU0NkZFQTI1RDQzRERGMjM0MzFGNDU4NAotOjEwOTExMDAwRjQ4MjVDN0U3OTVDN0VBOTUyMEFCMUNEQkQxRkU3RjM3MwotOjEwOTEyMDAwNkQ4QUY5QzZGOTNFRkU1MUZCOTNDQzkzRkVFRDI1NDJDNAotOjEwOTEzMDAwQ0ZCOTNGNEY5RTBGNTVFNUQ4OUQxRTU0QTQzRUE5RTlENwotOjEwOTE0MDAwRUFDNzBCNzNGRDdDNTlGQTM5OUQ3NEVDMTFBNUFCQjdENgotOjEwOTE1MDAwQUZDOTVERUY3Mzc5OUI5NkJDRkRGNUNBN0QzMUFFRTM3NwotOjEwOTE2MDAwMEM2RjU1NzI3OERCMzlEMDQxRjIzRTcyRTM0RUZBRjA2MwotOjEwOTE3MDAwMDU3RTU5QzM3RUZCMURBQ0NGNzg2N0NCQzIzOTc1RjEzNAotOjEwOTE4MDAwQUM4QjczNTM0QTQ4M0U2RTIwNEI2MUJCNERCMEY4MTQxNAotOjEwOTE5MDAwOEY1NTRBQTk5MDBGNTA0QUNFMTNBRDIwRTZGMUZEMkUwRgotOjEwOTFBMDAwOEY5QkQ0RDQ4OEE4OTc3QTk2MEE1RTZFQTRCMzUyRUZBOAotOjEwOTFCMDAwMjE5QTk1RDIyNDM0NzhDODU2MzJBNDZDMEVBNEI2NzI4MwotOjEwOTFDMDAwRkJBODRCMjYxNUU2NTMyQUEyODZBRjgyOEZEQzRBMTZFRgotOjEwOTFEMDAwQ0I1RjM2N0U5NUFFNjZGODA5NjUzQzZFNzZDNTE2RTlCRQotOjEwOTFFMDAwRDdCRjc1RUJEQ0UwQjcxQUU3Nzk5QUVDQjczMUY1MjAxOQotOjEwOTFGMDAwQTUxNTNFRTQwMTk1MzYyQjg4RTc0MTk1MDJGOUYwRjc3NQotOjEwOTIwMDAwRjhBODQ3RDZFRjcwNUFCN0I5N0YxOUM1RUVCRTdGNjE4RgotOjEwOTIxMDAwMUZDNjREQTY1M0E3N0NENTNDRDU5MDhERjc0RTFDMzY2NgotOjEwOTIyMDAwQzI1RTExRUJBOTc0QzQyQjcxNENDOUYzMUU2NkM3MTE0MQotOjEwOTIzMDAwNzcwQkU5MkE4RjdCQzNFNTZFOUY5RkZEMzk5RkYzRkQ3NgotOjEwOTI0MDAwNDFCRjdDRTc3ODAyOTZDNEUzNDg1ODk3NzkwQjAyQ0Y3OAotOjEwOTI1MDAwMTBFQzZDN0M0REQwMjRDRTM1MkE5Qzc4MzNGNjM3RTI2NgotOjEwOTI2MDAwRDU1N0Q0QzBGQTQyRUE2MzRDOTM5ODBGMDY5QzdENDRDQwotOjEwOTI3MDAwOUIzNEM2NEJBNDIyOUU1QkMxNkY4RkVCNEM4NEE0REY1MgotOjEwOTI4MDAwQTE2NzY2QUYxRDk0RUYzNkJGRjYzNjVDMzIwNjNGOTk5NAotOjEwOTI5MDAwMTQ3ODRGMEJEM0E0MDNFQzRGQTAyMEM1RUY2QkIwNjM0MQotOjEwOTJBMDAwMkFGNzVERkQ0Njc4RjcxRkMyRjA0N0U4OUFDNDhCRTJDMwotOjEwOTJCMDAwQTRGMzNCNjMxOUJEQTFGMUJERTE2MUJENjIwN0JFMkZGRgotOjEwOTJDMDAwODFERjEzNkVCRkJCOUNFRkY0OEQ3N0VENkRCQTA3RjlBQwotOjEwOTJEMDAwRDg1OTEyMzAzODFGMEQ4MUIyNzUwNEJCRUQ4NTcxNjkwNAotOjEwOTJFMDAwRjdCMjM4NTYyNThEQThGNjdBQjY5QkUxNzk5MENDNjYxMAotOjEwOTJGMDAwQzY1OUI4RjkzQTEwNzBFQ0NERTUzOTkyNkI5MkY5MUM2OQotOjEwOTMwMDAwNDQzQjBGQzBBRkEzQTg4QjAwQzY1NkFCOTM2RkVCRUZFNwotOjEwOTMxMDAwNzk3NjFGQ0U5QkYzQzQyNDE5N0ZBOTE4MDFDOUY3Njg3OQotOjEwOTMyMDAwN0NCMjA5NTI2RDM1RjU3RDA1RkM2NDQ3MUNDMTZDMUM4RgotOjEwOTMzMDAwN0Q3QzBFRUU2MzdBMTYwRjQ0OTA2MUJGRTZDNEQzNTc2RQotOjEwOTM0MDAwRTA1OUM5QkY5N0ZBMjhERkMwRTM4OEY2MTczQTNDREIzQgotOjEwOTM1MDAwRkY0NTlFNERFNTBCRkQxQkYxQzc0NzM4QkUzOThGMzFFOAotOjEwOTM2MDAwMzkyMUVGRDE3RDRERENFRjE4QTdFRjY1NzBGMjY0NzEwNAotOjEwOTM3MDAwREE2OTQ3RkJEMkJBQzQ2NThDRkJFQjdEN0VGQkRFMTQ1OQotOjEwOTM4MDAwRjZGREQ0NkY1N0IxRkYxOTNDOTAyMDQ5NTJDREM1MzkzNQotOjEwOTM5MDAwODM4RkM2Rjk2MzFFOUJDODVGMjZGRkQxMkM0RTQ3RjMwRgotOjEwOTNBMDAwMUQ3Q0YwRjNDREMxNDE0NzFFRDcyQzhDM0ZDM0EzRkZEQQotOjEwOTNCMDAwMDEwQTk1Q0UzRUIwMEUwMDAwMDAwMDAwMDAwMDAwMDA0MwotOjEwOTNDMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEI3QkM5QzdDMEYwQTM4MgotOjEwOTNEMDAwMUU4MUJERDBGOEU4Qjg5OTE3QkYzQ0E5NTg4NjAxQzFENQotOjEwOTNFMDAwQ0VFNjYyNjAwOEUwNjA2MDA4MDRFMkRENDBCQzA3ODgwOQotOjEwOTNGMDAwQTUzOTE5MTg0MjgwMzgxNDg4MjcwM0Y5NTM4MDM4MDc5MwotOjEwOTQwMDAwODg5MzgxNkExQjk4MTkxOEI2QjEzMTMwRUMwNUUyMjNCNAotOjEwOTQxMDAwNDA3QzlBOEQ3NEZCOUY4QTMzMzBBNEM5MjBGODVCODAwRQotOjEwOTQyMDAwRUM0RDcyRDRGNUUzMjgxRUJDMzhDNjAwOTUzRjQ3MTNCNwotOjEwOTQzMDAwOTVCRjQ0OUI4MUUxMkU5MjlBQjk5QUE0OTkyRjY4Qzg0RQotOjEwOTQ0MDAwQzAyMDA0QzQwMDhCN0E4OTY1NjgwMzAwMDAwMDAwMDAxNgotOjEwOTQ1MDAwMDAwMDAwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDA1QQotOjEwOTQ2MDAwMDAwQkVEN0QwQjc4NTRENUI5RThEQTdCRjZFQzk5NDkyMQotOjEwOTQ3MDAwNjYyNjNCMEZDMjI0ODY2NEU3MDUwMTAzMUQ2Mjg4NDAwRgotOjEwOTQ4MDAwRDE0RTUyNDRCNEQ0OEU2ODVCRjQ3ODc0MDg0ODc4MTM5MwotOjEwOTQ5MDAwRjA5NTU2QkNEOTkwMDcwOTA5MzA1OEFDODEyMjRFMTA3RQotOjEwOTRBMDAwMTExNTZBQTRGOEFBQjQwRTg4MTYzREI2NEQ1QjVCRDFCRgotOjEwOTRCMDAwNUExQjExNDEwMTM5Mjk2QTlENUFBRDY3RkRGRjVBM0I3QwotOjEwOTRDMDAwQjNGN0NFNENDMEY2REM3M0JGRkJERDFCQkY4RkU1REExNAotOjEwOTREMDAwRUJGREFGRkZCREZFQjU0NjI2NDU0NDJBMjBFNDBCRjg2MAotOjEwOTRFMDAwRkIxQTIxQjkyMjIxNjQ0MjNDMjU0NDUyRkI5QzkwMTI3NAotOjEwOTRGMDAwRUQ4QjYyNTM5RTdDNjEzQjlGRkM2N0EzQ0M3OThEOTA4MgotOjEwOTUwMDAwNjE5MDdFOUY5MDZDNDI2RUUzNjVGNDJGMDBGOUE5M0M1OAotOjEwOTUxMDAwQTNDRjQ3NEY4OTVGMjZEMUIyNzgzRjUzMDlDQkFCQTI4NwotOjEwOTUyMDAwNDBCRTEwRTBBQkI5NUMxRkE3QzFFOTFENDdEMjA4RjlFNgotOjEwOTUzMDAwQzRDNTUyQUQ4NjE2NTVEMkY0MkQ1N0E0QTk5MDEwOTdFNAotOjEwOTU0MDAwMTAyQTY2RUJBQ0ZGNEE3MDJDQTYxNzQzREEyNDkwNTkxOAotOjEwOTU1MDAwM0RFRTA0RjMyMEFCMTk1Qzc2RTc4OEE0MkEzRTdGNkJDRQotOjEwOTU2MDAwM0QzRDZENkEyNDI0M0EyQTlFQjc0OUZFMjg4QzRGQTZCOQotOjEwOTU3MDAwMTBGRjgzMDlEQTREQTRFQjQwRjhCODg5MDRGMDkwMzk2NAotOjEwOTU4MDAwM0NERTE1NDIxM0UxQkI5RDA0QTIzNjVDQUY5RkMwM0M5QwotOjEwOTU5MDAwMEY3OEFBOEU4NEIyMDhFOTlDMjJGQjFERjA3OTUzMEU0NQotOjEwOTVBMDAwODE3OTc5NzVCOENFMkFDMEJDMEM3OTk1OTBBRkMzM0Y0QwotOjEwOTVCMDAwQjhERTY4NUIzMTlENDdBQTVGMjQ2QkU5QTdBNjlDMEFDOQotOjEwOTVDMDAwMjcxRDkzQUM5RkY0NTc1Rjg4QTZBOTUyMEY1MTIwNzVCMQotOjEwOTVEMDAwOTM0MDRGRjlFMDc5MDY4OUM4RjdGMTJFNzIzRTcwQjBEQQotOjEwOTVFMDAwRUU4RjFERDY4MEVENjk0N0Q5RjFGOTZFQjBEMzc5RDFGMAotOjEwOTVGMDAwRjU2ODEzNDQwMkYwNTk1NzM5MzMyRDk0NjAxRkY0NzQwMQotOjEwOTYwMDAwMERDMDk3MkVCQ0E1RDE4OTY5RDNDNDk5NjlBNDFDN0FEMQotOjEwOTYxMDAwRUE5RjA1NzA1RTNGMjk1QjVDMkJDNEUxQTJDM0UxQzBGOQotOjEwOTYyMDAwQTQxNzlEN0RCNDVFM0JERjlGNEVERjQxMjdCNDZCRTdGRgotOjEwOTYzMDAwRkI2RTg1REI3QTgwMEYyREFGMjEwMkNFQkI2NTU4Q0E0OQotOjEwOTY0MDAwQUM0ODAyQjhENDEwMkY5NkFGNzdEMTc2QjA4RTFDMTJFQQotOjEwOTY1MDAwNzlCMDEwRTZEM0Q3MzU4N0U2QkQxMzk1MEE4MEI3MTVFNAotOjEwOTY2MDAwN0ZBNjBFOTNCMEJFREI0RDIyMEVEQ0RGODAzQjg3OTZEQgotOjEwOTY3MDAwQTcxMjM2QkUzQjhGRjhBMzc0M0QyRUI3REJBRkQyQkMyQQotOjEwOTY4MDAwMzQ1MTI0NTExREU2RjhFRjcyRDMzRTc4NDlCRDgzNTAyMgotOjEwOTY5MDAwN0E0RDlEMzI2RjA2MTk0N0YzNkFGRjExMThERkY5QTY1QwotOjEwOTZBMDAwQzMxRjgwMEFFNTMyQjY1N0U4N0Y1RjE0RDFGREY4REJBRgotOjEwOTZCMDAwODc1ODRFREUxNkZDMEZDMkZDNzY3MDc4Mjk2QzdDNjdFQQotOjEwOTZDMDAwODk2QzFBQ0ZGRUY5MzU0MTgwNkY0N0Y5OEE5NDU1NDI2QgotOjEwOTZEMDAwN0NGREIyNzE5RkU5QkE2RDk2QkM3REVDQ0M2RjE1QUI4OQotOjEwOTZFMDAwQzlGN0QzREVFNzI1RDE4QjY4NjVEQjBENDNFRTdCQzM3RAotOjEwOTZGMDAwOUJFMzJGM0Q1NDE2OUZDRjhGODgyN0VCMzgwMEVCNjJGQQotOjEwOTcwMDAwNzIzMUQyRkYzOURBN0ZEMkU4QkZGNDkwMURENzI5MUExRgotOjEwOTcxMDAwRjk1MEIyRkE2RDFDQ0ZGNDdDN0IyMUM1MTNDNEIzM0U2MwotOjEwOTcyMDAwREZENTYzRTNERjVGRTVGODQxQjQ2QUU0NkYxMkRGQkZDMgotOjEwOTczMDAwRjY0QjQ4QkY4REMyQjc2OUFDQUNBRUE2NzA5MERDNzI3OAotOjEwOTc0MDAwNTQxOEM3QzZFQ0FGMDJCQUE2N0ZGMEJEQkNCNTU3RjAzRgotOjEwOTc1MDAwNDJFNjM2MTM3RjZDMjlCRThBMzI4RUU0RjM5M0IyQ0M5NAotOjEwOTc2MDAwRkJGMzY1RTFGNzNDQzBFRkMyMzhGQ0VDMjQ5ODE2MDUyQQotOjEwOTc3MDAwQkMwREZBMTAzRTFFN0QxRTk3N0M0NzhEQUEwOUUwNzgyRAotOjEwOTc4MDAwMzFBNTNCM0E5RTNEMkI0MjEyOERBQkYzNDFCRjEwRjgwMQotOjEwOTc5MDAwMzVGMDFGOUJFQzQ3QkU0NTI2Q0IwOUY5QTA1RDEwOTEyMwotOjEwOTdBMDAwNEZDNUUxRUM5NDEwMUYwOUZGREIxRjQyQjhDMzBDOURBRAotOjEwOTdCMDAwRDkxQzdFODA5NzI1MkZGRTBERTAyN0E5MjQ5QUVBQzVBMwotOjEwOTdDMDAwRUZDRDUyMDVBNTAzOTU2OEE5OTRGRkNCMTI5MTIwRkYxOAotOjEwOTdEMDAwMjkwMDdCMDI5NjRGOTUzMzgwNEY0Q0YzODc4MEZFRUQzNgotOjEwOTdFMDAwN0MzQzY1QjZFRjZBNEY3QzNFOUZGMjdEOEQ5Nzg3N0MwRgotOjEwOTdGMDAwREYzNjk1REJEOTdDM0Q5QzdGMjg3MzRDNzgzMUQwM0U5OQotOjEwOTgwMDAwOURCNUI3QUVGNzIzQzJENkZCMjlBNTQ3ODYzRjczN0MyQgotOjEwOTgxMDAwNDEwRkY0NDM0Q0VCNkU1MTZGMDhENkFBMjgwRjNFODVEQQotOjEwOTgyMDAwRkFDRDVGMDlGNENDMDE3QUU1RjJDMDJBNTc5M0YyNjNDRQotOjEwOTgzMDAwOEIzQ0I1RkIwQzc5Rjg0NzMxRTA1MzExRkM5QkE3MjAxQQotOjEwOTg0MDAwN0QxMUFCMUNFNzY5NjBDNDNGMjcwRjY5Q0I0NDcyNzY3QQotOjEwOTg1MDAwOUMyMDMwMzlBNTY1RTFGQTc1M0EyMjVDNEZEMEY3OUIyMAotOjEwOTg2MDAwRjI3NTkzRkM5MDYxM0U5NEVGQjk0ODA0M0I0RjI1NTE0QgotOjEwOTg3MDAwQ0M3QjQ4M0RFNjNGOUU1ODExMTU2ODNGMEVBOUFGMERDMQotOjEwOTg4MDAwRjg5NzgzRjI1MUFENzBGMEY4MUJCODNDNDlCNjhFMERENQotOjEwOTg5MDAwOTcyNEU2RkZGOTgwN0M4MERGRUU3QTEyNDJCQ0JENDE1RQotOjEwOThBMDAwMDFCQTEyQjQxMEY5MDJFODhCODRCOUZDRjVGQjYwQkY3MQotOjEwOThCMDAwNUExQjFCQzgzQkE1ODRBNDFDQkM4RUE4NjM2MTFGRUE2RAotOjEwOThDMDAwMDM4MTcyRDA0QjY4MTVDQTgyNDk0OTI1NEIyNUJGNkE2RQotOjEwOThEMDAwQzRDNzgxN0QyNEFCRjg3ODQxQTQzQjhBMTc5NzBBRDA4RQotOjEwOThFMDAwQkZEMzhDMzcwM0Y4NTE0Mjg5NkUxMkU2RDU2MEMyRkVCMQotOjEwOThGMDAwRjg3RUYyN0E0OUYxNjc2MEZGRjVGNUE4MzJFMkFCMDUzMAotOjEwOTkwMDAwMkY1Qzk1OEEwMEE4NERCM0JEMzA5RkUxN0MzNkMzNDNFMAotOjEwOTkxMDAwQURDQkM1NzFCMDJGREFGNDkxNzRBREMzRkI2NkNGMDA0NwotOjEwOTkyMDAwRDFFOTc5RjM4QUY3NDE1RTM1OTc1NzFDQUVBMUZCOTRENAotOjEwOTkzMDAwRTY1N0FFOUU0NjUzNTcwOTExMDA5RTZERDA1OTJFRjQzRQotOjEwOTk0MDAwRjdBMjU2NEREN0RCMDQ5REQxRkNGNUFCOUUwRDY4NkU5QQotOjEwOTk1MDAwODYxRTY2QkQ1MjU0MjUxRDVGOEE4NkQ0NEI4NDJGMUNGQgotOjEwOTk2MDAwODNEQjI3NUJCRkREMjJENzA4NTk3MTdFN0FEMDBEQUMyRgotOjEwOTk3MDAwOUQ0NkZGMDNCQTRBQjdGNDkzMTYzMEYzNzEwRjMxRTRGMgotOjEwOTk4MDAwNjk3OUYzODBERUI0RkM3RjY0M0M4NUFDNzZBQTE0MDU2QgotOjEwOTk5MDAwRURBQUE4NDRFOEQ4Njk0NDQ5OTcyODZBQjhBNjRBMjQ5OQotOjEwOTlBMDAwNEFGMzRBNTY3RjQwNTRDRkJEMkZDRDg0NEM2NzdDM0M1MAotOjEwOTlCMDAwNEM4Qzc4QkM5OUQzQjlBRkI2QjlCMDk1RjZGQjcxQTUwQwotOjEwOTlDMDAwREIwRjc0M0U5Q0IyQzFDQzhDQzFFQkU5QjBDOEUxOEUxOAotOjEwOTlEMDAwRjJCQjExRUY5Qjg4RTYyQzAyQkRCRTVDNDRGREE1NEQ5OQotOjEwOTlFMDAwRERBQjE4RTVEMEIzM0EzRjE5ODQxRjQ0OTVBQTkwMzVGMgotOjEwOTlGMDAwMjA3RUQ4NTQzMUUwRjJGRUVCRjg2MUQ1N0JDRTE3M0ZFNAotOjEwOUEwMDAwNTI2RjMwRUZDNzk3RERBRkMzODAxRjEzQ0UxRjNGRkVFRAotOjEwOUExMDAwRDVGMUY0N0Q0REM2OTc3Q0I1QjdBMjVEQjEyNjZGNjhEMAotOjEwOUEyMDAwM0Q3RUYwQkVBRTQ2RkVFOTUyNDkyMDkyQTBERDJGMDVGNAotOjEwOUEzMDAwQzEyQzdGOEM2OUI2NTE1RURDNjJEQTJGQTk2MERBOTFBNQotOjEwOUE0MDAwRUUyMUUwMjFBOTE2MzlBOEYzQjEwNjlCN0EyQzEzM0EyRQotOjEwOUE1MDAwNTA1MERFMzg3OTdGRURFQUREMUFFOEVEMUZFNzAxODYyOAotOjEwOUE2MDAwNTA3OTEyNUUxRTE1NDBBRjI5NjFGNjFENzQyMDAyQkRBQgotOjEwOUE3MDAwQTg4MTA4REEyMTIwOTdFOEJFMzhGOEZDRUMzRUIzMUUzNgotOjEwOUE4MDAwNkY1MzUyQ0M3QURDMkM0RDMwQ0VERkQ1MjBFMzNDOUM5QQotOjEwOUE5MDAwMzAxRUVERDc0MUVEMDUxOEQ3OTY0N0EyMkU2RjFDNUZGQgotOjEwOUFBMDAwNjEyODY2QUZERjc5NUU3OEEwRTMyQjgwOTVFMUFCQjlFMgotOjEwOUFCMDAwNURBQkFGMjJBMTVFMzc2OEJDNkJDREYzNERDQTk3QUNFRQotOjEwOUFDMDAwRUREQzkyN0FEQ0EwNkYyNDZGMjc5MUUzMDZCREM1MDcxOQotOjEwOUFEMDAwQjJDNUIwRkZBRDc2RjJCNDQwRjVCQzI2REY3NzM0OUM1QQotOjEwOUFFMDAwMzdGQzkzMDNGQzg5QTAzQ0IzRTVENDkwOTAwQTcyNTJGMgotOjEwOUFGMDAwNjVFREQ0MEMyNjVGNzcwOTI2N0I1QkZGOUU3QzFFNkM5MAotOjEwOUIwMDAwQkNEOENEODRGNDgyREM5MTU0RDQ3RjkzRDU2RjZBRjRCMQotOjEwOUIxMDAwN0Q1NUEyNDJDOERFRjBDMDY0ODlFRTVGRjNBQUMwQUNGNgotOjEwOUIyMDAwMjBBREJGQjY3MUQ3NjRGOEFFRDdBQjExNDU0RUJGNTQ2OAotOjEwOUIzMDAwNkM1NjgxMUVDM0YxOTZEMDdBNEVGQzRBQkUwMEZCODg1QgotOjEwOUI0MDAwNzI2NkQ1ODA0NzJFRDIzMzU5MkFDM0FGN0NGRjg4MzA0NgotOjEwOUI1MDAwNDAwN0I0Q0IyNTIyNUJBRjgzM0M4REY1QTAyM0E4NDdGQgotOjEwOUI2MDAwQjkzOENCRDM4NjkwNkZCMTA3MDI0MTRBNzc2QkE1ODg4RAotOjEwOUI3MDAwNzMwNTRENUI1QzNDQUZGMjdDM0FDRjJCM0M1RkM4RjM4NgotOjEwOUI4MDAwNjQzQkU2RUQzMkNERDM3NUE1RDgyMzBBRTY1Mzc4QkUwMwotOjEwOUI5MDAwOTBFNzMzNzgzRTlERTc4Qjc4NUVEODhFRjkxNjk5RjU3RAotOjEwOUJBMDAwRDcyMUY1QjBGRTUzNzg1RUU1RjkwQzlFNTc3OEJFODg1NAotOjEwOUJCMDAwRTdDOTVFMzZCRTgzRTU1M0VEM0RBQ0ZGNTQ5RTJGRTQwRQotOjEwOUJDMDAwRjk0QzlFNEZFN0Y5NjI5RTE3RjY2MjNFMjk5RjJDNjM3RgotOjEwOUJEMDAwRjA4RkYzMDUwNjZGMUQwRjA5QzBENUU0RTc4QTVBRjIyRQotOjEwOUJFMDAwMEM1RjMyMDU4Njg3QjE2RkVBNzhFMzQ3RkU0OERDRjlGRgotOjEwOUJGMDAwNDg2RkMzQjlCRkExRTkwNkU2NkYyMERDM0Y2MkY4N0U3QgotOjEwOUMwMDAwNTgwNTdFMzM0QkY0MEY0NTVGOEY3MDdFQkE4QkVCQjFGNgotOjEwOUMxMDAwM0IxQjE1RDRCQjc3MzRGQTMwRERERUE4RTJGNzQ4NjM4RQotOjEwOUMyMDAwMTlBNkRCMUFGREY4N0Q2QkUzNDQ0Q0I3MzQwNjMwRUQyMgotOjEwOUMzMDAwNkE5QzhFRTlBNkM2MjBBNjFCMUI2NzYxRkQwRDhEMjFCRgotOjEwOUM0MDAwQ0NBRjZCOUM4RjY5NDc2MzNEQTZFRDU0OUY4NTc0NERFNwotOjEwOUM1MDAwQTM4NjY5NEI2MzFCQTY0RDhENjE0QzdGNzg0M0M1NEIzMgotOjEwOUM2MDAwQTBEMjdFRUMxNjUxQ0UyNzlCRkY4NUJCNDQxMzFGMUU0RQotOjEwOUM3MDAwMUQzMUYzQzU1MTVEMTlBNjdDNjkzOEQ3NTRCRkI4QUQwNQotOjEwOUM4MDAwQzg1NDVFQTg4RDMxOTUxNzM0NTQ5OEYyMjNFQTI3OUI2NwotOjEwOUM5MDAwRUE1RjMwQkZDNjk0Q0YwOTVENjlBQTNGMkMzOEQzOTRFMAotOjEwOUNBMDAwQ0Y5ODdBQkQyOUFGNENBOTM1RTVCRDk1MEI0RDc5Nzc5NQotOjEwOUNCMDAwRjkwQTUzRkYyOTI1REYzN0U1OUQ3OUFCNERGNTNCNUM2QwotOjEwOUNDMDAwQTE5RjhBOTQyRkM4NTk2QjRERjUyNEY3REQ2Njc5MzUyRAotOjEwOUNEMDAwMjNFQkJDRjgxNkY5NDhDQjA2QkNEMkY5ODc5NURGREIzRAotOjEwOUNFMDAwRjI0OTIwODA3MjhCQzk5NzI2QzA1QkYwNjc4RDIwOTE2NgotOjEwOUNGMDAwMDcwNUYwMjM1RDdFMThGQzE3OEUxMjI2NzcxQzgzRTQ3RgotOjEwOUQwMDAwQTZCOTNGRDlCREYzODg0NkM3QTlGNjFFRjZGNTE5RThFRQotOjEwOUQxMDAwOEMxOEVENEVDQUY3RkYyQzMyQkZFMkRBQkI5ODlERENGRgotOjEwOUQyMDAwNzk1NzYyN0IxOTM5M0JBREQ3Rjk3OTYyM0ZFRDlGNDQ5MgotOjEwOUQzMDAwOUI0NTJGNjA3NjRBRTc1RDAyRDZGRjU3RkJEN0NCQUQzOAotOjEwOUQ0MDAwRkRDNkM3QTM3QjVDNjVCMDUzNDFFRTRGNjBGRkE3MTkwQQotOjEwOUQ1MDAwRjQxMzdCNUZGQTFDQjA3Qjc0M0JENkM2RTlCQ0JBQ0M2QgotOjEwOUQ2MDAwRkY3NjMzODU3NzhCNDJGQzBFOUE2RjcxRDcxMEQwMkIxQwotOjEwOUQ3MDAwM0U1NjE4REQ5MzFERjk2ODZGRUJGNTA3Q0ZDRkEwNTc1RQotOjEwOUQ4MDAwMjBGRjQ5MzFEOUZCOTI3QjI2RjI5Nzk2QUNBMUY1MzJBMAotOjEwOUQ5MDAwMzk2NjIzNTEyQUFGNkMzMTAxRkQ3MkIyMTQ5QzVFNDhDMgotOjEwOURBMDAwRTk1NzdFRDVFNjVGNDU1MDVFMjZCNERGMDlCOTFCRTE3MQotOjEwOURCMDAwNjBCM0U4MzdDRDczMkQ3QzZGRUEwODVDQjc1REU3NkY2MQotOjEwOURDMDAwNTkzNUY4QkQ1OTE5N0E1RTBFOTgxN0NDODdDRkNCMUUzRQotOjEwOUREMDAwNEJDNUQ0MTY3M0UxN0MyN0M1MzIzMTNGMzE5NjhFRTlFRAotOjEwOURFMDAwQzVCMTBCMzBBRDhBRTU2MDNBMjE1NjhDNjk2NUFDMTA3RgotOjEwOURGMDAwRDM4QjYyMTc2MkJCOEFEODY4NENDN0M3MkVDMkVGRkVFRQotOjEwOUUwMDAwRDg3ODRDQkYxMkZCMkE3RTFGMTc5Qjg0RTlEOEQ4RDc3RAotOjEwOUUxMDAwRjE3Qjc5QUMxQUQzMEI2M0RGQzBFRjYzNjI1NzYwM0ExMgotOjEwOUUyMDAwM0E3NjBEN0UyRjhCNUQ4REU5QThEOEJGNjEzQTMyNzZFOAotOjEwOUUzMDAwMURBNkE1QjEzOTk4OTZDNDY2NjM1QTFDNUI4NEVEOEE0OQotOjEwOUU0MDAwNjIwQjMwMkQ4Q0REODJERkQ1RDg3MjRDMEI2Mjc3NjJDRAotOjEwOUU1MDAwOUExRkZCMUVBNjIzNjI0RDk4RTZDNTU2NjE3QTQxQUM1NwotOjEwOUU2MDAwMDNEQkU1QzZEQTMxQ0Q4OUZEMDBCRkZCNjIxQjMxQ0RENgotOjEwOUU3MDAwOEU2REM2MzQzREY2MDA5NjJCQjE2RTRDRDM2MjhGRTJFOAotOjEwOUU4MDAwNzc2RkVDNjE0QzNEQjE5RkUwNzc3N0VDNzE0QzUzNjM5OQotOjEwOUU5MDAwQ0ZFMkY3OTREODMzOThCQTYyQ0ZFMzc3NjdFQzAwQTZBNQotOjEwOUVBMDAwRTdEQTI3MzlDRkNDQzc2RDU5MjlBNkZDQzQ2MzY2M0VEMwotOjEwOUVCMDAwNUVGNUE2OTk4RjU3QkU2QUU2RTMxNUFGOThGOUI4RkYyRAotOjEwOUVDMDAwOTA5OThGOEZEQjZGRTZFM0U1RkJDQzdDN0NDQzZFMzMyNwotOjEwOUVEMDAwMUYyRkRCNjFFNkUzMjNCNzVFNkZBQTVGQjJDOUNDQzc3MQotOjEwOUVFMDAwOEIzQTE3OUFDQUQ1NjYzMzFGQ0Y1RkY5N0Q1M0ZEQkNGNQotOjEwOUVGMDAwNUI1NzlCQ0E3MzE3QUYzNTk1RkJFNjlBRjk3NzM2RDk0RQotOjEwOUYwMDAwNjJCNkJGQTc2RTM3Q0I5MTI5OEY5OEZBNzM1N0VFQjUxQgotOjEwOUYxMDAwOUMwMzQ0OTBDRkE0OTRGRkQ0RDRDRTU5NzIzMEExNUQ1OQotOjEwOUYyMDAwNjNGNTdGMDM0ODI0NEFERjc3OTAxNEZGNUE2MUYwN0U3RgotOjEwOUYzMDAwNjY3MDdFOTAwOTc0NDdEMzJDNEU3N0MzODBFRTY4OUE4MgotOjEwOUY0MDAwRjE4REM1Nzg3RUY0QzkzN0RCN0U0MTZENDM5MjcxMDE5NgotOjEwOUY1MDAwRkQ2NzMyNzRCQkExMjY0MEJGQjdFNkU4NzlBMjA5OTAzRAotOjEwOUY2MDAwMUY0MTk4REY4MEJDNUY4REU1ODUyQ0RGRDU3NEFDNUEyRQotOjEwOUY3MDAwMkI0NzdEOUVGQjE1NEU1NzgzNUZBQ0Q1QzVGMjBGRDk5RAotOjEwOUY4MDAwNUU1OTA1N0U4NThDQjQ0MEFFOUZBNjNCRUM4OUY5RjhGRQotOjEwOUY5MDAwNjMzNjE5RTE3MTRBMEM2Q0IzRDFGNUZFNjc3NURGRUREQwotOjEwOUZBMDAwRTAwRkZDRDQxMURBNkVBM0RGMTczQjQzMDVFMDZBRkUzNQotOjEwOUZCMDAwQzAxRTdBNDgwMkJFNDgwMjBGQzBGNzM0MTJEODYxNDM2RgotOjEwOUZDMDAwN0U2REY2N0IzNjgyODE0MEZCRjk4QjE4N0MxOENBMzM5NAotOjEwOUZEMDAwQUZEQTg1NzY5MUJFRUU1NkNGRDBGM0I5Q0ZDNkU0NTI1NAotOjEwOUZFMDAwNkIzQTQxQkI1MUJCNDc0Njc5OEE3RjU1NzEzRkQ1QkQxRQotOjEwOUZGMDAwQTlERTAwOTQ3N0RFMjM2Rjg3RjMyMEJCM0Y5QkM5MDk1RQotOjEwQTAwMDAwNjI5MTFGOUI1QTk3ODNDQkQxMDFGQjY5MzNGQTNEN0I0OQotOjEwQTAxMDAwMzFGNTkyN0VGNDdGMkE0NDExMjBENUQ3M0ZCMEVFMTE1RQotOjEwQTAyMDAwNkNERDE0MUU4NzYwM0QzMkY4NEI2OTdFNzVFQTU1MTM2RQotOjEwQTAzMDAwNjEzRDE0MUUyRjcwNzhCQzY4MUI5NjFDMUUwNDRFMEFDRQotOjEwQTA0MDAwQUFCODJBMDFGRkVDMTY0Q0ZFQzc3Nzg1NTBBRjhEOUQ0QwotOjEwQTA1MDAwNUZFMjdDNTRDRDhGNzA3QkM0QzZGQ0REM0FGQ0U4REY0OAotOjEwQTA2MDAwQUQxOUJBM0Y4NkI1M0I4MkZCNjBFOTRGRUZBN0Q3QzY3MwotOjEwQTA3MDAwQzdFN0YyNTBDN0UzNEM5MTg0MTJDMUJGQTU5MUY5OUY4NQotOjEwQTA4MDAwQzlBRUZDMkZFNUFGRkVDQzJFMjYxQ0M3MkUwNUYxOUNEOQotOjEwQTA5MDAwNzQxMERGQ0JCMkQ4RjU1OTIxMzhEMzg1RjM4Nzg0RTcyNAotOjEwQTBBMDAwQTk5MzY0RUVDRjkwMEFDRUVCM0M0QUY3OTc5MERERjk4NgotOjEwQTBCMDAwRTc1NUZGMjE3RERENzBCRTkwOERBMDYzRkI3NDI4MUZFNgotOjEwQTBDMDAwRjNBNUJDN0QzMUQ3RUI5RUZGRDM1M0QxMjU5NDBGNzRGQwotOjEwQTBEMDAwNTIzMEIzRjM0OEIzM0VEN0I5NDlDNDczRjRFMjExNENEQwotOjEwQTBFMDAwM0Y2Q0UwN0E4MDgzOUEwREFFNzEwNjM5REQ2OUQ2MEIzQwotOjEwQTBGMDAwREI3NDM4RUUzN0MzQjE5ODIyRjQ0RjJCRThGRkI4MEI2RQotOjEwQTEwMDAwRDhGQzE0RjM3QTlBRjVGNTVBRTZEMTUyRUUyNzQ2QkJGRAotOjEwQTExMDAwNUIxQTFCMTQyMUVGRDhDNEU2NjExRDlGRjBGMzAzNURBOQotOjEwQTEyMDAwRUY3NUI4QjlERjQ0MjlDMDdFRjU3MUFERTMxMERCNEFBNQotOjEwQTEzMDAwM0MxRjRBQUE4RjU4QzdGOTkyRTc2RjE3NDk4OUNGMkY1QQotOjEwQTE0MDAwRTlGRTIwOUM0QUI4N0U0NDFBRTgxRkNEOEZFNEYzRDc3RAotOjEwQTE1MDAwRkJEM0NGRTFGNEZDRjM3RkFBQzNGM0VERDY3MDJERUE3NQotOjEwQTE2MDAwNzlBRDNFMjZBN0M5NjdCNDc3RTg4RjI0QzYxN0ZEM0NCMgotOjEwQTE3MDAwN0MwREQ4OEQ2MENGOTVENDM4QjE1RDU2ODE2OUJGNUNCOAotOjEwQTE4MDAwQTU5QjlDMDA4RjY2RTU2RTA1RDJCNTY1QUM1RUNBRThGRQotOjEwQTE5MDAwMURGQ0ZCNzZGQ0VFRUFBQTNGMENGQUEyOEJFQUFEMTI5QwotOjEwQTFBMDAwQzA3QkM0QUQ1OEFGNTk1OTgxRkVEOTk0MkVFNkI3NEQ0NgotOjEwQTFCMDAwRTFFNUI5MjVBQjlEMTBBMjkxMUIwRTM4QTExRDUxMjVEQgotOjEwQTFDMDAwN0YyOUI0RUIwQTRGMkYwMjdGNTcxQkYxNEI2QzBBNEVDRAotOjEwQTFEMDAwRDhDN0VEMUMwRTc5MjU1MjBEQjRDQjBCNkI5QTBCREI1NwotOjEwQTFFMDAwOTEwMEI0RDNFQjQ1Rjg3QUYzQ0JDNDU1NzBBRTkwMUYxMQotOjEwQTFGMDAwOEU4NDZCQzA0RjU3NEZGQ0E1RjhGRDYwQjREMDUwN0ZFNAotOjEwQTIwMDAwMUJFRjU3MDlCM0Y5OTNGOUFDOUU1RUJFOTVGN0U3MEVDNQotOjEwQTIxMDAwRDdGNzU2NDMzRjlCNThCOTJGQUYxMkQ4MzdDOTU2NkI2MwotOjEwQTIyMDAwNDU5OENGM0E4RUI3Q0U0MjQ5NjBFNzQxQUNGRDE2MUQ0NgotOjEwQTIzMDAwQ0QyQ0Y0NUUxQTY2RkU0RUJENUUxNzlGODcwREJFOTc0RAotOjEwQTI0MDAwQzdFOTdFMERCN0U3RjU3QTNGRTRERDhEQjRCNDBGRjNDRgotOjEwQTI1MDAwRUY4RTRBRDZCRTg5REJGRkZBN0U5N0NBQ0MyRkFFRTNEQgotOjEwQTI2MDAwNDczMjdDMjU2RDA2N0UwNjBCRDQ1MkNDRjk4NjBDOTNDMgotOjEwQTI3MDAwMUQ0N0VBNzNDREY5Rjk0NUU2RkFBMTMxRTZGQ0FDMEFDRgotOjEwQTI4MDAwNzNGREMwNjQ1M0Y5MjcwM0ZFOTI4ODBCRkQyMkRDNUY0NwotOjEwQTI5MDAwMzI5MkQ3RDlEMkM1RjAzQ0VFOEZFQjczMTlFRDhCM0NERgotOjEwQTJBMDAwNUU2RjVCM0Q4QjczNjk3MjlGNUY1QzQ5MThGQzE2QzhEQgotOjEwQTJCMDAwMkM5ODFGNDZEMUZCNjlFQ0MyRUZBRDgxREExNDE4NzdGOAotOjEwQTJDMDAwNjdEN0QwRkRGRDg0RDNENUUzOUNBRTFFRTNGQkI3ODdGMwotOjEwQTJEMDAwRUZDN0EzREMxRkYzMzBGN0M3M0NDNEZEMzEwRjcwN0YxRAotOjEwQTJFMDAwNEMzN0Y4NjNFOEY3RkJDMTFGRTMwMDNGNEQxMEQzMkQ1NwotOjEwQTJGMDAwRTA4RjQxM0YwREYzQzdGQzkwRkI2MzM2ODAzRkM2MDEwMgotOjEwQTMwMDAwRjhENzgwRTlDNkYxRTFFQkMwQ0ZENkMxRkQzMkVEREM3NAotOjEwQTMxMDAwMkZFM0I1MzM3RkUzQzZDQjAyQjk1MEJFRTNCMkM0RjYzOAotOjEwQTMyMDAwQUVEN0NFRjAyNDE3MTQxNENBQkZGMzg5MTY0RDAxQkE2NAotOjEwQTMzMDAwRTgyNDA0Q0U1QjlDQUY2ODAxMzdDRDhGREVDNTg5NjQwRAotOjEwQTM0MDAwQkYxNjQ4QTVGOTUxMTE5NkNGRTNFMzgwOUNDMEY4QTc0QQotOjEwQTM1MDAwMDYxNjE3RTNDOEQzQzg2Q0Q4QTczQ0FBRUQ1MEY4QUVEMAotOjEwQTM2MDAwRTFGOEZBOUFDNEM2ODM3MkE0MUI5NUY4OEM3Q0ZCMERBNQotOjEwQTM3MDAwMjE3MDQ0OUEwMEZEQjJGOUI4NDIyMTAxQ0E4NkRGREFBMQotOjEwQTM4MDAwQUZDOUI0NUM1OURDMUI4MEFERjJCNkY1NDRDMTdFNTY1MgotOjEwQTM5MDAwQjUyOEVBMUIxQkFCRkQ4N0UxM0M2QkYzRUY2RDdFRTQ1OAotOjEwQTNBMDAwMUQ1OUM0ODQxRkI0RUY4NDc2NzU3RTZDMUJFQUI3QUQ2QgotOjEwQTNCMDAwRjUzQ0JFQTg5MkQ1Q0I0RjYyN0Y4RkQ5NjE5NkZGNjVFMQotOjEwQTNDMDAwNUJDRDc2NEY2QkMzQ0MyMUZEQzVDMzY3ODkxNjdGOTJFOQotOjEwQTNEMDAwRTU1QzYwOEExOTFGNUIwMzZDNUVDOUZBRjM1NjlBRTc2NQotOjEwQTNFMDAwRTMyRTM3RjdEN0VBMUU3QTNFQUVEODU1QThFRjI3QzMzQgotOjEwQTNGMDAwRjMzMkIxRDY2RDlGMTBDRjE3QzcyRUM1RkE1NkZENEU1QQotOjEwQTQwMDAwMjI3RTU0M0VBNEE5NzIwMENFNzlBNUE5NEEwMEY0NUEyRQotOjEwQTQxMDAwNjlBQUNBNTMzRkZGMUVFMEY5MjBDQjJCMDNFN0RCQjk0MwotOjEwQTQyMDAwRjY2MTA4N0ZDQkY5NzY4MEMwRjlGM0M2RDE4NEQ5MTdERAotOjEwQTQzMDAwREE5Q0Q1ODEyOTM0RkY2RDgyRjZDMkVCRDJCMjFBMkQ5NwotOjEwQTQ0MDAwOEZEMkNCMENBNzY4RkIwQUUwMUI4QjU3RDBFM0JCMzI0MwotOjEwQTQ1MDAwRTU0ODdCMjFFNUUzOUIzNzhBNjQzQkNERUYwODBGNEQ1MAotOjEwQTQ2MDAwQ0Y4M0UyMThEQzAxRjRDRjE0NzcyQTE1MjBCRTkzQjUxMAotOjEwQTQ3MDAwREJENDI5NEU0RjE0Mzc3MDMxQTcyRjcyODg1OEY1RTY3OAotOjEwQTQ4MDAwOEI2MUJEMkQ5RDMzMTU5MDY3RDJCNTdFQjQwRjg4Q0EwMAotOjEwQTQ5MDAwRTZBRkYzQkZDQzJENDNFRjVGQkI2NUJFQUUyNDdFOUIyMgotOjEwQTRBMDAwRUZFOUYzMjg2MzdDNTNDN0VGQ0NFRjBGOEQ1RkJBN0VFMwotOjEwQTRCMDAwMTZFQjExNENGRTlENjFENzA2QUJFRDE0MkVBRDlCODlCQQotOjEwQTRDMDAwREY0REZCNjlGRERDQzZGQzY0RkI1OTdDOTk4RUJGNERGQQotOjEwQTREMDAwODFBM0M4QUZGNUYxNzM5NTY4QjUwMEY1MEY0QzIyMkEzQQotOjEwQTRFMDAwRERENzkxRUU5MDg4RjZFMDAxQ0FERjgxRkUyNEFBNzVERgotOjEwQTRGMDAwRDJGQUNBRkM2ODgwRkJDOTA1RDg3RkE1REVBRjQxMUUzMQotOjEwQTUwMDAwRjYwM0Y4MDZEODlCQkMzRUNBOEQ3MDAzNTUwRjI5RkQ5MwotOjEwQTUxMDAwMzc4MTVGQjMzMENFRDc3NTNDNjhGMjcxRkYzQUQ1M0JENwotOjEwQTUyMDAwQjBGNDMzQkEzRUREMUVBMUZGOENFQzYyRkJEQzNBOEM0QQotOjEwQTUzMDAwRjg3MTk5NjVGNUM0ODZGREIwMzgyOTg5RUI4RkFEOUUxOQotOjEwQTU0MDAwREJGMTFDNTA5QkMwRjQwMjZBMzUwNzA0QTgyNzY5NDQ1QwotOjEwQTU1MDAwODRGMUU3MkFGRUI1MzQ1QkRDMzUwRUY5OEFBNDY4MDI4MwotOjEwQTU2MDAwRTBEQjBDMjE3NDFCRUM3NzFDQUY3QUQ4M0EzOERDQUNGQQotOjEwQTU3MDAwNzBCRjk2RjNENTk0MjRGQjk5MjIzMzdEM0I1M0Y2NUY0RAotOjEwQTU4MDAwMDlGNkU0RTY3QjI4N0UyNzg4Nzc5MTY0RDZDRjAzOUI4MwotOjEwQTU5MDAwNjZBNjhENTZFM0Y0QUE5NzNGNjI1M0IxOUYzODdEQ0JGMAotOjEwQTVBMDAwMkM0RTJGNkFCNjNGRkU1RkQ3RTM3N0RCQ0Q3MTc0RkY4OQotOjEwQTVCMDAwNUY4RkZGQkY1QjhGNUYzNzgwQUZFN0QyREJEOUZBQzkxMAotOjEwQTVDMDAwMkM3M0ZGNzFGRDVENTM3MDlFNURBQzVDQjcwNzNBMkMzOAotOjEwQTVEMDAwRkRFQjdBQkNBRURGRUJGQUJDQUVCNzkzQzE3QTNEOTcyOAotOjEwQTVFMDAwNzc4MUQ1MDEwQUQwNTE2RTk2MUZENTFBNThBRDQxOTk4MQotOjEwQTVGMDAwQzVDRjYxQTM2Q0NERThBRkY4QzA0MkQ3OTJEQkFDNzc5MgotOjEwQTYwMDAwOUMzRjNGOTA1MERFMTNGRjA4MTMzRkNEQ0MxRDVBNkU4OAotOjEwQTYxMDAwRTg3MkY0OTMxMUJBREUxRTQyN0Q5QTk0OTQxMUEzN0VERgotOjEwQTYyMDAwQjVCM0ExODYwODc0M0Q1QjdEQzRDRjk3OEVFM0U0RjI5OQotOjEwQTYzMDAwNzUzOUZCMDI5QTg4NEUwRDMzMUZERTNBRkZBMDZCOTRFQQotOjEwQTY0MDAwODE5RjNCREMzRDAxMzgwRjc3RkI3QTIxN0NDOUM4NzdCRAotOjEwQTY1MDAwNEJFNDA5QzA4RkFCOTBBRjM5RDUzMEVFQ0Y1REEwNUYzMgotOjEwQTY2MDAwNEUxODBDNTdFMDczQkUwQ0U4RDFDMjVGNDhCMDE3RTIzOQotOjEwQTY3MDAwM0Q4QUM3MTM4Q0FCNzc0MDk0MTRFNTAzMEUzRkUzNEYzQwotOjEwQTY4MDAwNDlGOUNDNzlDNjY5RTg3MTEzRjlGNDBGRjhDQjJBMjA5RgotOjEwQTY5MDAwMjJEMDg3OUUzNkM3OTMxMzg1RTI4OTIxM0U4MEJDRDc5RQotOjEwQTZBMDAwNDQ4Q0YxN0UzQURDQURFRDlBOTUxQTI1MTFCRjdCNDNCRgotOjEwQTZCMDAwMDg1RDIxMEY4MTI3NTYzRjE0QjFGMDY3QUFCMDg5MTBCOQotOjEwQTZDMDAwN0Y1ODNDNjMzQUZBOTcwNkZDNTE5Mjk5NUYzQjIyN0E5NQotOjEwQTZEMDAwMUNDQkZGMkNERjlFMjMyN0U2REJDOURBMEZDNDNEN0ZBRQotOjEwQTZFMDAwNDk3RjVEM0IzRjhGRDdFOTdCODBBRTJERkQ4OEU1M0RGRgotOjEwQTZGMDAwQTQyRkMxRjhFRTcyMzNEQzUzNEFDQzc2QzUzRjgwMkVDRQotOjEwQTcwMDAwMjdDMEY5NzE4NkU5QkJFNENFNERFQ0ZGRTc3MTk5QjUzRQotOjEwQTcxMDAwMTNGNTZENTNCRkZCNDc4QUJGMEIwRURCMDlFODI3QkE2MQotOjEwQTcyMDAwOUNEMUZEQjEwQjIwM0U5M0VFNEYyREM0NkJEMjdEOUM4RQotOjEwQTczMDAwNEI4MjVFMjhGQzgwODhEMzQxRkZGODgwRkNENjdCOTE1OQotOjEwQTc0MDAwNjE5RjM2Q0JDQ0ZGNEVEQUVDNDdFMTFFOTAxRTg3NzgzNgotOjEwQTc1MDAwNzM5OEU1RjVGOUQ0NzU5OUYzRjNDOENDNkMzODg3OThGQwotOjEwQTc2MDAwQjdDOTRFMjBFRTcwMDE5MThFRjZFOUYzQTdGQTRCM0I4NAotOjEwQTc3MDAwNUM0Q0EwRkRENjkxRkE1NkUwNjcyRERDREY1RUFCMTA5NQotOjEwQTc4MDAwMDlFMjA2OTczQzc1NUZENTZDOUE4RjcwRkRFNzI0ODVDQQotOjEwQTc5MDAwQkY2QTg4MkY1QkU4OEVDODcwOUVGMENFQkU4QkJFRjM3QQotOjEwQTdBMDAwNTUwMkVEMjNBREI5MTAzRjk4NEUzMDdFRDAwQUY3MzlFRgotOjEwQTdCMDAwNkRFNkY5OUQ2QkZFRDZGOUVBRjc4NjkyQ0Q0M0RBMjU3MAotOjEwQTdDMDAwMjQ4QzczRkJCMUFDQzcyRDZBRTc3NTlGRTlCNzYwRkNCOQotOjEwQTdEMDAwQTIzRkRFN0M5RkU5NUNFRDVFRkIyN0RCQkQyOUFCMjQ1RAotOjEwQTdFMDAwRDFGREE5NzNCNTdCM0JDOTc4NEI5QzdEMzJGMDhCNjU1RAotOjEwQTdGMDAwNTI2OEJBNTAxNDhGRDM5MkVEQzFDMDA1MTQxNEQyRDM0RAotOjEwQTgwMDAwRTNBMzcwQTQ2NEE4RDc3NjlFRjUwRUMzNzlDNzc5RDQ2NAotOjEwQTgxMDAwOUIyRTBFRDFERjE5NEVDN0JGRDhGRDgwMENGNEY5QzFCNQotOjEwQTgyMDAwMjM2RjVGMDU3QUY1QTI2NzZENTRBNkQzRjJERDFFMTI4MQotOjEwQTgzMDAwNDU3QjIzMjI4MzFDNUJCOENGODY3RTM3MjI0NUFCQUU5NwotOjEwQTg0MDAwMzFGMDVGOEM5MEE1RkQyRjdBQ0M4MzcxMTUwQkY3M0ExMAotOjEwQTg1MDAwMjIzMzY4RkI4NTRGQkUzMzhFNTAzODlDNTlEREZGRTJCMgotOjEwQTg2MDAwMDU2MDNGM0MyMkIwMzg0MkFENkZEQzM1RjRGQjQyODlENQotOjEwQTg3MDAwREMxNDRDQzQwNzM5OUU5RjdFMjY3NTE2RTA5MUIwRUIyMAotOjEwQTg4MDAwQzA4REQ4NkZDRjc3RUQwRUMzMzlERTVGNjU3NjRGODEwRgotOjEwQTg5MDAwRDZDM0YzMjVFRDYxMjE1MjJBQjBGOTE5RUYyQkU4RjE2NwotOjEwQThBMDAwOUJBNzFGMTZEOEZDOUVCNjQ3NUMzMEJGNURERDcyODg0MwotOjEwQThCMDAwRDY1QkI2RUIyRjg4Qjc1RjdGNkM4RjE3RTBCMEVDNjk4MwotOjEwQThDMDAwOUI4OUJGMkNEQjY1OEIzQUM2NjFGQUI2MDNFRkI5MDRFRQotOjEwQThEMDAwREMwMkU1MjM0QjkxQzVEMDc0REYxMjhDRjc1RURBRDMyRQotOjEwQThFMDAwRjExNzlCMTdEQTlCRTk4N0MyQzUxRjA1QjhCRTY2RjM0RgotOjEwQThGMDAwQ0Y4MEZDNEYxRUYyODIxRDc4QjJGNzQxMkZDMDk1RjYzMwotOjEwQTkwMDAwM0I1QkE2Nzg3NUU5NDcwNjNBMjNBQ0ZGNThDNkUwRkVFNAotOjEwQTkxMDAwMDhFOTk3MDFCRjk2RjVCNEIzRjEyQ0Y0NzkxMkZFMjczQwotOjEwQTkyMDAwNjdCMDVDMThFOTMwQ0I4NThGQzkyQjU1QTgxOEVFQ0FFMwotOjEwQTkzMDAwNEMxODFGM0YyMDE3MzhCRDJFREFGM0YxMzY4RDhFN0I3MQotOjEwQTk0MDAwN0FFRkE5NkQxQTlERkZFMjdGN0NCOEVENEVEMDAzN0ZCMAotOjEwQTk1MDAwRUU1MjgwQ0YyQzdCRTRGNzVFNjI4MDdCQjU4M0QxRkIyNwotOjEwQTk2MDAwOTk4NzFGREFCOTg1RDJDQjk5RDcxREE4Qjc5Q0Y5RDk5OQotOjEwQTk3MDAwODk3Qzk1QUVGQkNDRTM3RkNCODY3QjAyQjdGRUVDQjI0NQotOjEwQTk4MDAwRTEwMDg3NUI5RkY4RkFGMEExRUM3RUMwRDc4OEMzQjhERQotOjEwQTk5MDAwQUYxMUVDNUY3RDVBNjBDMUY4RkI3OTZBRDk5RkU3Rjc4OAotOjEwQTlBMDAwM0Q5RjBGRjNGQ0UwODgwM0VGMTUyRUEzREYxQTJBNjAwQQotOjEwQTlCMDAwQkY5NjIwREY4N0ZDNEEwQUU3QTVCQkQ3RkNDNTM2MkUyOQotOjEwQTlDMDAwMTFCQ0I1MEI0NDFGQTQ5NDZDN0NCMERGRDc3Q0VCOTIxOAotOjEwQTlEMDAwNEE0OEVEN0UxNUZBMjNGREM4QjdBREVEOTZCRDRBRjc5RQotOjEwQTlFMDAwRjUyQkM5RjdGMTYzRjI5OTBDRjA1RkI2QkI5RDhENkI0NwotOjEwQTlGMDAwRDlDNzBGRTA3RjI2MERERUM3OUIxQ0U2RjM5NThGQzlGNAotOjEwQUEwMDAwRTJGQjUxOTdERjk3OTkzMDVFNEFERkM3MjU0RjdDN0I4OQotOjEwQUExMDAwNDgzRDQwRTcwN0U3ODJFRjdDMUVGNzU3RUUwODJDNzNBRQotOjEwQUEyMDAwMDA1REVENERENTdDNkM3RjIzMzM2OEQ5OTkzRDFGRTdFMAotOjEwQUEzMDAwMTM4QTFGRUZEOUZCNkYwNDNFRDlGRjMzODdCMjlEN0U4NwotOjEwQUE0MDAwNUZGOEIzRDc5MENFQ0UzQ0YxMUI1OTY1Rjc5RERDMDI4MQotOjEwQUE1MDAwRDUxM0NFOTA4MUJGNUVEMDFCOTZGMjMzRTQ2NTNCM0NBQwotOjEwQUE2MDAwNTE4NzM3QkU0RjRCMjM1NzRGNTdCREY4RkQ2REZDMUUyNgotOjEwQUE3MDAwNjFGOEJGMzQ3MkUwNUEyMUMxQkUzREVDMjg2MjdDMzlENgotOjEwQUE4MDAwMzIwQ0UxQjI4NEY0Q0E0QUI5NzkzRjg1ODlCMDhGNkYzQwotOjEwQUE5MDAwNEYwM0JDNEJCNjhGRkFGQTE1NThGRkM1ODZGRERDQzFEMwotOjEwQUFBMDAwRThENjVBN0YyOUE1NEZGMDBCMEVFQzZCNDQ3ODhEMjQyNQotOjEwQUFCMDAwQTBEMzMzREQwRTA5RTI3QkNGRDhDRjcxM0ZGNzRCRUE0RAotOjEwQUFDMDAwN0YwRjM4OTI5Q0JGNzEzODlDOEJDRUNGQjVCRTJGMEJCOQotOjEwQUFEMDAwQkY4REUwQjQxRTM2MTg4RUE3M0Y0QkNDRkY5RjczMDg4NgotOjEwQUFFMDAwN0MxRUExRTlCOUI2QzFGMkNCNDYwMkRBMDU4NUYxRjlCRgotOjEwQUFGMDAwQjZGNkQ4OTBBRjlGREU2NUMzRkJBNjU2M0VCMTk0MjQ1MAotOjEwQUIwMDAwM0VBN0ZFQTUzRUNFRDMwN0M2MDEzRjNCN0RGMDE5OEU4MgotOjEwQUIxMDAwOTcwQ0VGOTdFRTdFNUJENkI4M0M4ODE4RTU0MTEyRkZBNAotOjEwQUIyMDAwRDQ2QjlDREYyRERCOUZCOEJGNjVCQkZGOTJCMEJGOTM5QQotOjEwQUIzMDAwNTJFMEJCMzBGRjkzQkQ3NkEyRDEyRTRFRjZEOEE2MjdBOQotOjEwQUI0MDAwRDI5RjBFMzhFQzI2RkRBOUQ1NTM3NTI0OERCNkIzNzk2NgotOjEwQUI1MDAwNTM1NDE4QkE2OTc1RTAzNUIwRTdCNERGREFGMTFDODNGNQotOjEwQUI2MDAwNDhGRUY3MUM3MDRGRDM5M0EyQUVBNUYwNkFGMkNFNDMxNQotOjEwQUI3MDAwRkZBM0RFNUZCMzA1NEU5MjJGQTg4MTVEMkE2NTA1MkJFQQotOjEwQUI4MDAwOTk4RUNDRTZBRDk3REIxNUQxMzQ2RjJBNjdGMzQwMEU3MgotOjEwQUI5MDAwQkQzNUZFODQxREQ2Rjk2NzhCM0VGODY3ODlCNDBFQTdENAotOjEwQUJBMDAwRkRGRDU5MTNGQ0FCRDQ0NEY4NkRFRTNGQjREMjQ2NTRDRQotOjEwQUJCMDAwQTNGQzczRjRCRjA1RjMyMUNGQjkwOEM0OTVEODdFRUU4QQotOjEwQUJDMDAwRDI4MDlGMkNEQkU2OEEzOEU4N0E5RTdGRTI5MzlEMDA1NAotOjEwQUJEMDAwQjczM0Y3M0I4OEMzMTAyNzVFQzdFREFGMTM0RjdDQjI4NgotOjEwQUJFMDAwRURFRkI0RkMwNDM0QTZFM0Q3NkRBM0Y1NDEwRkRGOUQ3MAotOjEwQUJGMDAwOEFDMUZBRkZCOTM3NkQxQ0ExRkNCOUVFQjkzQkFGMDJBRgotOjEwQUMwMDAwRkU1MjA3MzQ0M0VCRDczRDM2MUNGNUJBRTNDMzU4RkU3QQotOjEwQUMxMDAwRjg5RTExMTFEODk3QzUzRkY5RDk1MjkwMjM4QjdFOUM4RAotOjEwQUMyMDAwNEFDMDM0NzlGRTg5RDc2RTg0RkM5OUU3M0MxOEQ3NzhGRQotOjEwQUMzMDAwRTZCOTEzOTcwMjFENTBGRDU5MzVDQUYxMDVDNjc3MDREMAotOjEwQUM0MDAwNjhCRjhCMjBDRkNBODUyRjBDRjEzMjhCMjBBNTdDNjM4NwotOjEwQUM1MDAwRDFEMzY5MDFGMDEzMUFFQTYxQkI2NThFRkVEQkQxNTFENQotOjEwQUM2MDAwNEJCNDVDMTE2RDlDNjgyRUQwRTFBMjVERTZGMUYyOUNDNAotOjEwQUM3MDAwNEM3RjVBMjZGN0NGNjNGNUMzQjk4QzVFN0JCMURENjg5NAotOjEwQUM4MDAwQTc2MDJBQjdCNkQ3RUI4RjcyMTY1OUZBNjFFRDk3M0FEQgotOjEwQUM5MDAwNDg3RDIyRkNBRkU0RkQyRURBRjVGOTI4NzM3RjFBRkYxOAotOjEwQUNBMDAwNkUxRDg3N0RCRjRENjBGNzRBQzhFMzJFM0M0NzVCMkM4NQotOjEwQUNCMDAwNDc0NzY2NTA3QTdENTIyNkYzODE2RTE3N0JBMzIzRDNENAotOjEwQUNDMDAwRTk3OENGNzIzRUI5Mzg4NUU2RTlGNzVDM0UwRkE4MEYwOAotOjEwQUNEMDAwNzlFMkVDRkIzMUVDRUY5MkE3NUMwNEYwN0RDOTczMUVDNgotOjEwQUNFMDAwM0M2RjU5RjJFNDI3Qzc3RjQ0QkY5RjdFMjIxNUUzQjQyRgotOjEwQUNGMDAwOTczQzc3MDdFRUY3MTI0N0Y0NDZGMDZCRjczRkVFNDBDQwotOjEwQUQwMDAwM0ZGMkU5Qzc1RkNBMDczREU0QjQzRDlBOUYzMTg0N0RCNQotOjEwQUQxMDAwQkVBNDA3MEVDMTA3QUY4M0RBMDU2NUY1NzQzRURBNDZCNwotOjEwQUQyMDAwMTY3N0Q2NDA1MkZDQUI2OEJGMERFMEQ3MDAzQzdFRDMwRgotOjEwQUQzMDAwQzVFMkEzRjgzOUVFMEFFRTBGM0EzQjU3NERDM0Y5OTczNwotOjEwQUQ0MDAwMzNGRkQ2MEE3RTRGN0RDNTM3RDVFMUU5ODY3OTQwNUM3MQotOjEwQUQ1MDAwMjhCOTg4OTAzQkU0RkE1MUMwNjc2REIxNkYxMDE1RkNCQgotOjEwQUQ2MDAwRURCMTYyNENGNTdBMzY4NUFBNTk3MDZFOTBDNUNFQzlBMAotOjEwQUQ3MDAwRUQ1OTdFNTI1NzBFRUQ1ODFDMTE3MTVGMzk0MDY3QkY3NwotOjEwQUQ4MDAwQTY1QkJDNjJCMzNBMUNGQUZCNzcyN0UzMkYxREFFQzA2QgotOjEwQUQ5MDAwNDIyN0YyMTkzN0RFRjdDNDc1NTI4NkEwM0RDMUQ2RjVCOQotOjEwQURBMDAwODlDMEQ2NjU5REVGMjc3NkNEMDFGQzNDN0VCRUNEQ0UxOQotOjEwQURCMDAwNEQxQTI0RjUzNTM4QTcyNDg3Mzk1RjFBQjQ3RTQ2NjdDMwotOjEwQURDMDAwNjc5NTBDQTQzMzdEMUQxRDhEMEFGMjkzRjY0NjFGQTZEMAotOjEwQUREMDAwNkIxQUNCODg4QTcxRjg3RUNDREIzODNDMUNFNTFBQjE0MwotOjEwQURFMDAwQzFGRDU3OTVDREQ1RTEwRTA2RTA1QzAyRkEwNDdGQUJCQwotOjEwQURGMDAwQ0QxRDQyRkM3MkY4RUFEMUY2NzdCQTk5MUZEMkU2RDY5OQotOjEwQUUwMDAwNDgxRDRERUQ2RTA2MjdCODc3MEE3MDkyNzk1RUVBOUE3MgotOjEwQUUxMDAwODE3MEE1RURGMUZCMDI1NzY4QTMxM0ZEMTE2MzRDN0MxMwotOjEwQUUyMDAwNEFDRUFBMzBFNTA3QzE0REM3OEIzREZGRDNGMDIzMDhCQQotOjEwQUUzMDAwMkZGMEQzQThFODNGOUY4ODcwNkI2OTBDNjBGRUZGMDA3RAotOjEwQUU0MDAwRkM5RTYxRjA5QjRDNTQwM0ZEQzg1OTM1QTY3QzUyRjgxQQotOjEwQUU1MDAwNkRBNkYwQ0I4QUQzOTUxNTBFMEQzQzFFNERBN0E3NjRBOQotOjEwQUU2MDAwRjRGQkMzNDY4MkNFQkNCQjFCQkIzMEQ1QkY2NzI0OTE2RAotOjEwQUU3MDAwRUIzOTJFODE5RkY3ODc1NkMxRjkxRjUxOTg1Rjg1NjQ4MgotOjEwQUU4MDAwNjkyNENGRTA0RjIyM0UwREVGMzFFMTlCMjY1MEVFNjY2NAotOjEwQUU5MDAwN0U0NDdEN0Y2RDhBNzREQ0NDRkZENEQ3NjAzRDc3QkM2NwotOjEwQUVBMDAwNkMxNzgxNUZEOTFBMUUyMEVGNjQxQUU4Nzg0NkQwQTU4NgotOjEwQUVCMDAwMjI5Q0ZERThCRjZERTJGMkI1NjU2MDNGQ0RGNEQxRDFEMwotOjEwQUVDMDAwQTg2MkJBOEVEM0M5MDY0RTI3MUI2MURGQzEzRkU3MTdDMAotOjEwQUVEMDAwNzE0RjNCQTcxMzk0OUZGN0QwM0NCM0VGQTNDNEU4RDdCRgotOjEwQUVFMDAwNEVGN0Y3NDRFRDc0RkY5MTI3QTk5OEIyNzc1RThFMzgzQwotOjEwQUVGMDAwMjJBNUI0NUQ2QTM5MDkwMEJFQTQxRkY5NUU4NEJEREZENgotOjEwQUYwMDAwRDI4M0Y3RkJEMzM5RkNDOEZFQTJGNEVCRjBGRTM0QjFEOAotOjEwQUYxMDAwMzMzOTQ1NkMyQzBEREJDMTdFQjJDMkI3Qzk3RkQwMDk3NQotOjEwQUYyMDAwNzY3N0IyRjk2NEZCMzU0NzNFMUQyRkZCNEQwN0YyRUZGNAotOjEwQUYzMDAwQUMxQjdBOEVENEQyNzVCODNCNTNEMTlFQ0NGNjMzN0MwMQotOjEwQUY0MDAwNzRGQjQzNDI5RDYxRkZCMjkzRTg3RDlCNUQ1NzM4NUM4MwotOjEwQUY1MDAwODA4NzEwN0Y0QkY5RjZERDVEQzUyRTNDQkZCMEY3Rjg1QQotOjEwQUY2MDAwODAwRjc2QTQzMzM5QTNDRUEyQTM1RDFDNkY3Nzk2RjMyRQotOjEwQUY3MDAwNDc2RkE1OTlGRTc1N0VBQzRDQTkzMEUxQjFDRTZGMzMxOQotOjEwQUY4MDAwQTY5QUYxNURFN0I3NkYwRUYwREI2MDhFMEJDRTM1NjNFRQotOjEwQUY5MDAwNUI5MTFFQURGOERGNjQ5NzM1RTEyQkYwREUwNjYxN0UzNAotOjEwQUZBMDAwQTdCNzA1RjYwRUNCNjAzRTgwRjEyODY3RkIwQUI3QzM1MgotOjEwQUZCMDAwM0IwMEFCNzlGQ0IzNDZFOTA1RTUwRUY3N0ZFQTc3QjlDQwotOjEwQUZDMDAwRjY5MDYwOUI1QTA4RUY4MTUwMDQ4NTc3NjMyOEZFMDA1NQotOjEwQUZEMDAwM0RBQ0E3Rjg0MzMwNUVDOENGRTk2NDIyQTYzQTdFNTY1RQotOjEwQUZFMDAwODNGM0M0QTBCN0Q5NEE1RTE0RDlGRDBCMTE2NDBFOTE0NgotOjEwQUZGMDAwQTgxREU4MDYzRkQzODE0OTRFRDAwQjI1M0I4QjUzRTk3MgotOjEwQjAwMDAwRjc4ODNENzAzNkQ2RTI5RUU5ODRGODY4MjFCRDEyRjdENAotOjEwQjAxMDAwRkRBRjlFREE4MkExQ0U1NTA4QzRGMTUyQkM1MURDN0U1MAotOjEwQjAyMDAwNzIxNEM2ODE3QkJBNDAxNzRBMDUwMTdCNzI4RkJCMzcwOQotOjEwQjAzMDAwMDVFQzFCQkY0QjM0OURFMzc0Qjg0MkQzNUM4NkZDNThDRgotOjEwQjA0MDAwMTg5REVGREJENzcwRkRBQzFGRUI3ODMzMzlCRDkzM0MxNwotOjEwQjA1MDAwOEQ5NDE4RTg1QjhGMEIyNUFBNDZDQTBDNzRCRUJBNzQ4RgotOjEwQjA2MDAwMUE4MTczQ0RDMUY0OUQ4NDhGM0RGOERGQzNDNzlBMEE1RQotOjEwQjA3MDAwMjJCODZGNzYyQkRGQzhBMkZDREQ4REE5MjYyQTMwRkYwRgotOjEwQjA4MDAwQkRDREZGMzYxRUYxQUMwRUUwNDFEQ0RCMDdGNDk3QUYxRgotOjEwQjA5MDAwMTUwRDlFQTc5NTZGQzVFNTkxOEFGRTJBMkE4RkVFOUQxNAotOjEwQjBBMDAwMDg3QzMwODkzQzNBRjBBNzUxREY5MjY5RjkzQjJGRDlFRgotOjEwQjBCMDAwMDRBM0JGNkU3RUFDMURFNTQxNUQ2QzEyNTFFOTdDNkI1MwotOjEwQjBDMDAwQkI3RTgwRTlCQ0FFNkVDNEZCRjcyMjJENUVEOEM3RjcwRAotOjEwQjBEMDAwREE5ODNERjc1RUM0MUVDMTc4ODRDRkJFRjhDMjA2N0UwMgotOjEwQjBFMDAwN0RDMkZBN0Y2RjZCMTNENjIzRTA3RDMxOENGQkRFNTY3OQotOjEwQjBGMDAwRDY5RTU0QUFBODRGOUZFNTZCQUNEREUwMDg0MDVDRjlGMgotOjEwQjEwMDAwN0I1REI0REQxMEYwQUMwNTYzMjg4MTdFOEFGN0ZGMjFGQQotOjEwQjExMDAwRDY5RkQ0OEYwMjNFQTdEM0ZCMUQzMkU1NEIwMDg3QjdFNQotOjEwQjEyMDAwMUMwOUZERUMwQjVDOTdBRDAzNzgyRjcwMDUzNjAxQkY1MQotOjEwQjEzMDAwMjFFRThDRjM3QTg3RTIxRDkxRUFCRDA4RUY5MEY3NkE2MQotOjEwQjE0MDAwOTM5Rjk1RjkzMURGRTE3QTMxNzEyNjI5RjdGMkY2NEFCQQotOjEwQjE1MDAwRTJGMjI1OURBNzVFQkM4QkU2NUFDQjQzNDE2MkIwQUZCRAotOjEwQjE2MDAwNkQ4NEQ5RDc0QjlGQUVFNkVGN0RCMEY5MjRDMDRGQTZEMgotOjEwQjE3MDAwQ0Y3NjNBOTAwRkNERTVGRTIwMUQ1RkUzRjgxMkYyRjI5NAotOjEwQjE4MDAwRkJBMDI2N0M1QTEwREI4OEZCMkQ3NDhDQkQ3NzEyODVDMgotOjEwQjE5MDAwREY4NzE0OEZDMDJGMjc3NDVDMzIxQ0U4NjhENURBQUZDNAotOjEwQjFBMDAwNkVCODgxRjZGRkQxMkIzNkZDM0UzRkU2QzJGQUVGREZFOAotOjEwQjFCMDAwRTVCRkY3MDZEMEQ3N0Y2OUM3MzNGNjhGMEU1Rjg2RTcwNgotOjEwQjFDMDAwQjFFRkRCQ0Q3RTg0MUI1MzE4RkRGRUQxQzVFQzkxNzkyOAotOjEwQjFEMDAwQjEwRTkzN0UzQ0FGNkQ4RTBDRkVDNzc5QjFGNUY4N0Q1NAotOjEwQjFFMDAwMUUxQ0NBQjA3QjFCODdBQTRCRTBCQzg2RTBGOUU4MUY5NwotOjEwQjFGMDAwREJERjlEQkExQUU1NTkwNUZBQjFFQUQ2MzkxMkRFMjMyQQotOjEwQjIwMDAwRjlBMzRCMzVGMTlEQkFCRTRFRUM5NzUwRkQyODJCOUIxMAotOjEwQjIxMDAwRjc2N0UwMUY3NTMxQjg3NDAyRkJBMzExQjg2NzMwOEY3MAotOjEwQjIyMDAwRjM5MTgxRjk2REI1OUJGOEM4RkJBRUM0N0U5MjUzMDNEMAotOjEwQjIzMDAwRUJGQjJBRDJEMUUwRjU1RENBRTg0QjFGQjc4RkQxNUQ5OQotOjEwQjI0MDAwN0MzREY3NEU0QUI0OUVGODNBQTY2MEZERjdEMzEzOEZDMwotOjEwQjI1MDAwOUY5MUMyQzYzRkRFMzg5RjA0MjgxRkFBNzVEMDdBNkUyMAotOjEwQjI2MDAwMThGRjk2RDY4OTYwNjc2RjREQ0YxMDBDRUJBQUVCNUE4QQotOjEwQjI3MDAwNDQwMjg2NzVENTZEOUQyREQ3MUFGQThERUY4M0VEMDVBNQotOjEwQjI4MDAwRTMzRTY0QTRGQzYzRUFFQTcyOTBEQkMxN0YwMDNERDUzMwotOjEwQjI5MDAwNzY1QzMyMkU4NDc2MzZFMzI3RUZEOEZERjlDMDU3NEYxRgotOjEwQjJBMDAwNzRERDkyOTBCRTMzNTIyQ0ZCRDNDNUY3ODdFQUJEOTU2RgotOjEwQjJCMDAwODZGREQxRjdDNURBRkVGODlGRUFGRTdBMTdGODAxMzY2NwotOjEwQjJDMDAwMzNBNTI2MTlCQzA2RUQ1QjYxNjJCODk1NzNGQzNDNEU1NAotOjEwQjJEMDAwRTU2QzA4RTFBNjNFNzkwNEYwN0E1RDJBQzY3MTI2ODdGRQotOjEwQjJFMDAwREY4NTI0MzQxNEZDOTJFOEFGNTRERjI5NEQ5OTAwRTM0NAotOjEwQjJGMDAwMTI4NDQzNUQxN0MzODM3M0MxMkQzRTJFQzc4M0VBQzRGNgotOjEwQjMwMDAwRUJCOTdFMDAwRjFBODg0NjA5RjZBODdDMkUzQ0I4OTM0QwotOjEwQjMxMDAwNjhDRTIxRDYzMTgwMDdBMzRDNzg3MEZEREFGQ0NCODA1MwotOjEwQjMyMDAwMUVERjAzM0Q2NUQ0RTBGRDNGMkE2QkRFQzk3MDBFQjQxRAotOjEwQjMzMDAwRDY4NkU3NEM0NzUzQjRFQ0VCNTk3RTNDRjBFN0EzREVFRQotOjEwQjM0MDAwRjA1NTkzMkJFM0Y5MDUwRjk2N0E2NzFCQzYzREQxNzYyRQotOjEwQjM1MDAwOEIzNzkxOUZGNUZBNjRGODUzQTI5MUYyQUFGRjdERjgxQQotOjEwQjM2MDAwRjM0RTkyN0I1NzBCNUNENTM3QTYwMDVGMEUyN0Y2RTdBRQotOjEwQjM3MDAwRUFBOUNFQkY2RDY5RUUwMUJCMTNFNEU5NTE3N0QxNUY1NQotOjEwQjM4MDAwMjNCNEY0NTE1NzY4MDFGNDczODdBODhFOUIyREM0RUQ0NAotOjEwQjM5MDAwQ0Y0MUZBNjdFM0Y0NEI4RTk1ODJCRjMwNzhDOTMxM0JEOQotOjEwQjNBMDAwRUE0M0Q4MUYwMUJEQjI5MERGREY0MkZGNDYwRUNBMDM1OQotOjEwQjNCMDAwRUI3OUU5RkE5NEMyODRFN0FBMkQ4REY1MTcxREMzMDAzNQotOjEwQjNDMDAwMjI4RDI4ODY3QjYwMTI2MTdBRDRBNzg0RjlCREY0RjVCQQotOjEwQjNEMDAwQzhGNjkwRTIwN0ZCNTIyMDQxQzA3M0JCMTQ2QTgzMzg2MQotOjEwQjNFMDAwMjhCQjJGNkJCQzY2ODA2QjY3MEE4QkZGNzMxRDNBRDQzQQotOjEwQjNGMDAwNTY0OERCQkJERTdENDVDMUI4MTUzQTBFRjhENzlDNzlCRgotOjEwQjQwMDAwRDI1OUEzN0ZEQTlFQzVFMjEyNDk4OUUxN0IxMUM0Mjc5NAotOjEwQjQxMDAwRDBCQ0M5Q0VBN0YzMURDMjRFN0Q1NjYwNzBEMDNDMEU4NQotOjEwQjQyMDAwN0UwRjRFQjM4MURDQkI0RTdGRjgwMjQwNDdGMUU1NzVERAotOjEwQjQzMDAwM0QwRTQ0NkE2NkU1RTk3QTcxMzMyQkU3RkVDQjY1QjVDQwotOjEwQjQ0MDAwQ0MzRjY5REREN0VCRjZBRkMxNzdGNUFFREI5RjMzMDdCNQotOjEwQjQ1MDAwRkM1OEQ3Qjk0N0JEMEJFNzBCQ0Y4MjBGMUZGMDNEOURCRQotOjEwQjQ2MDAwQzk2NTZCQkJDNzM4OURGRTVCQjdBOEQ5RTlCRTFDQjJFNgotOjEwQjQ3MDAwRjcxRjg0Qjg3NkVEMzZGNjRFRTJGNUJGM0Y2NDRGQTU3MAotOjEwQjQ4MDAwRTkxQkFGMUVCNTQzNUNEMTREMTBBMDQzRDczNTlCQTgzNwotOjEwQjQ5MDAwMzI1MzgyMjMwOEQ3MzlBNEM3QzNGMjNEQzM2NjdBOENERQotOjEwQjRBMDAwRkQ1MTUzMTVGQTVCQ0VDRTc5QUZGRkZEQUI5NzgxRjgxNgotOjEwQjRCMDAwQTRGREI1NDA3QUQzMkI0NDg2RkU2N0VGNTM1QkQ5QjUyNAotOjEwQjRDMDAwM0JERURGN0VEQTlGMThFRjJGMEU0Nzk5RDkzOTkyMTNCMgotOjEwQjREMDAwRTExMjg3OTMxM0UxRjZGQTQwNUNBNDg2N0UxNDAzOUM4NAotOjEwQjRFMDAwNTFERkQwRTEzQzAwQjdCNDU5NTc5MjcxQzlFOUU1M0E1MAotOjEwQjRGMDAwRjdDODc3QzlCOEY4QkNBQzcwRkUwODhBMjhCRDNEOTM4MAotOjEwQjUwMDAwMTJGODE1RDA0RDI0MjVGMDZCNDgxNzNCRkJGM0E1MjIwQwotOjEwQjUxMDAwQkM3N0Y4M0JFMEIzNEI2REExODJFQzYyQkM4RjM4NkExQwotOjEwQjUyMDAwMThDNDcxRjUyNjNFNUZCNUQyRTk1QjQwMkYxMENGQ0QzMAotOjEwQjUzMDAwRTMyQjZGRTRFQjdCRkU3QjI3M0MxODM3RjlDNDZCRjlGOAotOjEwQjU0MDAwOTAyRUIxRjVBREZCMkVEMERCN0ZEODUwRkYzRUJCNkYwOAotOjEwQjU1MDAwRDQ5MDcxNjk2RjcxN0ZDN0M5MTRGRDNEMTZCNkJFOUI0QgotOjEwQjU2MDAwQjgxRTc3RDNCRUQ0MDhCQzdCNzk1MzgzQ0RBNEZGREU0RAotOjEwQjU3MDAwRDRDMEUyMzg4OEQ0M0JFRTVBOTMxRUQ5OUNCNDFGQjA5NQotOjEwQjU4MDAwM0JBREZERThFQjNCOTg5RjdCMjFEODg3Rjc0RjkwNTU2QgotOjEwQjU5MDAwRjAzRjFDNzhFNUVDRUI3NTM0OUYzMkMyODlFN0IyRUJFMwotOjEwQjVBMDAwRDIzOUZFNTY4QkI4RUZGN0E3MDc1MkM3ODJERjY5NkQxNQotOjEwQjVCMDAwODY1RkEzRUI1Q0ZCMDJFOTExMjk3QzBFOEVCRTNENTIzNwotOjEwQjVDMDAwNDNDNzVCN0Y4OTg4M0VBQjBEQjEwNzMwNkU1MjJCNjc1NgotOjEwQjVEMDAwRUYxNDI5NUMxRkRERDA3QkI0MEJGMEYxQzQxMTA3RkEyNgotOjEwQjVFMDAwRkJFRDFFNzY1Rjc1QUQzRDk4MEZGQUZCQkJERDcyQzJCOQotOjEwQjVGMDAwNzdFRkZFRUU5NjcwNURERDQyMUZDNkJCQ0QyMTYxMjc2MQotOjEwQjYwMDAwRjA4RDdEQkQzMzg3QzM3Q0JDN0VBMjAwRkE5RkQ4NkFEMwotOjEwQjYxMDAwMTNGOTNEMjhFRUU3ODg0QUNDQ0ZBRTQ5MkMxRkUwQTlBQwotOjEwQjYyMDAwRTIzMkM2QUJCNTRGOUY4QUYxMTQ3MzNCN0Y4MzcxQzI4MAotOjEwQjYzMDAwNUU3RTlGQzkzQThGMEI1M0Q5N0MzREJEMTk1NzAwN0M2NAotOjEwQjY0MDAwM0Q1MzQ1N0NEM0M4RTNFRkM3NzhGMTgyREUxQTE5REI5RQotOjEwQjY1MDAwODc4NTIxREIxN0FDNTRBRTAwQjg0MjdCRTBGRjA1RTdERAotOjEwQjY2MDAwRDlCRTM4OTVDNTNCNkRFNDc2NzJCN0REREYzQTk1RjYwNQotOjEwQjY3MDAwRDNCRDJFNUQ4MEZERDBFQjRENDk2NUZBQ0M4OUE5QkFDQQotOjEwQjY4MDAwRkYyNjhDRkU5QkZDMTJDNTA1RUZBM0U0MDc5MEI4ODk0QQotOjEwQjY5MDAwQTczMjhDNzFCOERCQTExRUYzNkYyMjFDQkE0NzNGMTk4OQotOjEwQjZBMDAwODVGM0UzQjUyMDFCNjA5RkVEMEM5RkQ2QUUxM0QwOUZCMgotOjEwQjZCMDAwNDlFMTk3MEJGMkUyREQ3QjFDREY4MDc1MTRCNDA5MEFDNwotOjEwQjZDMDAwRDhERTM0NEQzOEVGNUJERDRFNjZCNzc0REU4Qjc2MjAwNgotOjEwQjZEMDAwQjg0N0ExREZGQ0FEQkZDMzc5Nzk5MkFDNzc5QjlCQzEyMgotOjEwQjZFMDAwRUJERDczRTA0NzVBQUE5REREMUI2QUU4RTU3NjUyMTQ0QwotOjEwQjZGMDAwREYzRjBDRUJFRkMyMDUyQUQ5QkI4NDUyNDAzNUM2QTEwRgotOjEwQjcwMDAwQzRFOTg3RDk2MTc0OUQwMTM4REZBQTlEMjg0N0MwMEYxRAotOjEwQjcxMDAwMjBCNjc1RTMzQkJGNzNDMjBFNzIzOTVENUZBN0QwMUJDNQotOjEwQjcyMDAwMDA3QUQxMjY4OEZDRkRBREMwNUIwMEE3RjUxQjg3NjNCRQotOjEwQjczMDAwM0NEQjFBMzE5MDhGRkU5REZGMjVFM0Y5RDhDMUMwRDlCQgotOjEwQjc0MDAwQ0Q3MzY4N0VEQjQ0MTlFOUUyNjA4MERENkJCRDdGNjUwNwotOjEwQjc1MDAwNTEzN0Q4RTE5RTg2MUE3Q0I3MzdBMkUwNEJCOEE0QTkyRQotOjEwQjc2MDAwOTJCQzBDRjFBNDREMkI0NTQ1QTBGNUMzNDFGRDdFODE1MwotOjEwQjc3MDAwOTIwMjc4MzFERUY2RTExNTY1NzA3RTk2MjM4MjJGODk3QwotOjEwQjc4MDAwOUMxMEQ4QkIyMDJEMkI2QjE0RDhENzE2MjU0QjMwREE0NAotOjEwQjc5MDAwMkRCN0E0MzJGOUYyQUJGNEUwMkRBOTM0RjVERDc1Qjc3RAotOjEwQjdBMDAwMDIzMUREMUI2Mjk5MTc4MkJGNTA2QjkzNTVGNjdFMzBENAotOjEwQjdCMDAwN0I0RjI0OTNFRjRCNjZBRjE4OURFN0M1QkM3QjNFMzVBRQotOjEwQjdDMDAwOTEzNzRDNjE3RUNBMUY1QzE5NjJGRTQ1Mzg5M0FDNDJDQQotOjEwQjdEMDAwRkYyMkZGRjNFMUJFNjZGMURDREEzMTI5OThEOUI0N0FCMQotOjEwQjdFMDAwMUVENjg3N0VCMjY5M0Y5OTk1NjJCNDhBRjZCQjNEM0QwRAotOjEwQjdGMDAwQjAwREU1Qzk2NTRFODQxMzkxRkFCQTAwNEU5MUNCNzIzMwotOjEwQjgwMDAwRkQxMEQ3N0FGN0E0OTFCRjgxMjdBNTMyMEZGN0NGMDQ5NwotOjEwQjgxMDAwMzkxQTE5OTFGMjQ2MzdGMEE5MTY1OTA1M0FDRjVDNzlEMQotOjEwQjgyMDAwRkMwNkY4OUVFRUZGRTEyRDkwNjYzNkZGRTE0RTkwMDc5NAotOjEwQjgzMDAwRTk3RDdGNjlDNEVGRDM2NTkzN0YyRkYzQ0RGNzNGODcxMQotOjEwQjg0MDAwRjJDQ0EwNkNGMjEzOUU0RTBGRkUzMDk1RUVGQkI2RjJEQQotOjEwQjg1MDAwNzAxOERFM0RDNTFEQ0Q4RUFGNjNDRkFBREVFOUYwOEUzOAotOjEwQjg2MDAwRjU4OUFCNDVGRjc2NUU4RUVCREFBNDQ0RDYzMkI4NTU0NwotOjEwQjg3MDAwODI1Q0QzRTFCNjQ2NTQ3QkUwMUQ2NUVEMkEyN0UyNDdBMgotOjEwQjg4MDAwMDlFOTQ1N0U5NTAzQTdDOEM1RjE3REM5N0NCMzdEMzkxQgotOjEwQjg5MDAwQzQ0OTU4RTdGMzA4QTc1QkY4ODM3NzI1MzFGRTlFQ0FCMQotOjEwQjhBMDAwMzEzOTY3NkEwQUUwRjVFMzE1QkQzRUQwRTNEN0E1MjczNQotOjEwQjhCMDAwOEU0RjM4RTk2NkVEMUQ0OUVFQTcxRkU3RTVDMDEyQkJDNAotOjEwQjhDMDAwMkEzMDBEOEM4NUQ0NERCNDM0NDhGMzlDRjgzRUUxRTMyNgotOjEwQjhEMDAwQTJGQTQ3QzRGM0JCNkQyQUVDMEZENEI3RDNGRDNCRjBGQgotOjEwQjhFMDAwRjI0OUY0MEYxRTA4RkYwRUQzMTdEQzY1N0E3RkQxNkM4NgotOjEwQjhGMDAwREE3RTdERTU1MUY2Q0VCN0MyNzBBNEFFOERGMThCM0FGQgotOjEwQjkwMDAwNUY5RjEzQ0UyQkVBQ0E4OUIyOURFMzlCQTZDMzE5RkNBNQotOjEwQjkxMDAwNUQ1QzVFRDU1RUNCRTA5QTU1NEVGMEJDMTU3QzYyRjA2NgotOjEwQjkyMDAwNEU1OTM2RDRBM0YwQ0I2QTVCQjUxQ0Y3OTFGNDZBQzVDNwotOjEwQjkzMDAwQjRERTdBRTgxN0Y2QTc5OUREM0IyMUE0Q0Y4OUY0MUI4MgotOjEwQjk0MDAwQjZFMTc5MjNBNUY3NUZDMTc5NjI2REU3NzAzQzZGODczNwotOjEwQjk1MDAwRUJFOUQwNUYwNjFGMzc4M0Y3RDc0REZCMDFGRkRGODk4NwotOjEwQjk2MDAwMzYxQkQ5OEVGQ0FEOTc0MDVFNUQ0OTcxMTlGMUIzQkZBRQotOjEwQjk3MDAwQkE4Q0Y2QUI1NjJBQ0E1QTFEMEY3NDNFNDY0OTYzMkUzRQotOjEwQjk4MDAwOTUxNzAwQjdCOTlBQjYxQ0YwRUZBODUzNzkxOUU2OTE0QwotOjEwQjk5MDAwQkFDOUExQzJGQUU3NkU3QUVBMEVEMDVCNTI3RDdENkQxQwotOjEwQjlBMDAwQzAxRkVBMjZCMkY5NjY3NEQyRUZBOERGQThCRjgyRkFGOAotOjEwQjlCMDAwNzU5RDBFOTU4REM3RTE1N0M5RjE4Q0MzRTE2NjNFRUZDOQotOjEwQjlDMDAwOUJCN0IyNzlBNzhDODg4NDAxM0ZFQjU2NTJCODQyNTk5NQotOjEwQjlEMDAwODhFMTNEQjgzNEJGMTA5MUFFMEVDM0ZBM0Q1QTM2RjYzOQotOjEwQjlFMDAwM0I2Qzk2ODUyRTJDRjhBN0FGQUI5NkFGQUI3NjI1NUI1QwotOjEwQjlGMDAwMTdFMUY0NDRBNzE1ODU3RTZCMkJEOTNBRTcxMkQ2NUU4MgotOjEwQkEwMDAwODRFRkI0RkY5QkY5N0E2QUI1MjczMUJEQjlDRDYxRUFGRAotOjEwQkExMDAwN0Y1QkQ5OEU1RTk4NEY2MUI5QUMwQTA4NjdGNjNFNjZDNwotOjEwQkEyMDAwM0U1RjU3N0UzMzFCMkZCRkZDNDk4NDE3NjkzMENDMTcwQwotOjEwQkEzMDAwRkRBMjg2M0NBNUFCMTMyRjUxQzJBMjdBQUUwMDgxRkNCOQotOjEwQkE0MDAwQjRERkEzREY5M0YxMUNBNTY0OTM3OTVEMjdEQTQ3M0Q0QQotOjEwQkE1MDAwRDAwOUZFQ0Y3QjY0M0NBRjc4NUNGNEJGNTU4MDc2QThGQwotOjEwQkE2MDAwQUMzMkZFRTNGRkREMENFMEQzMzczN0UzQkRBOTNERDVCMwotOjEwQkE3MDAwMENGRTI3QkU0OTIyODAwRkE1ODc4MzE5MDBFRkQyQzM5MQotOjEwQkE4MDAwMjE5RUQ2RTMzOTM2REUxM0FCOEFFMzMxMzU5RERBMDRFNQotOjEwQkE5MDAwRTA5N0IxRTI0N0U3MDMxRkEwRkIwQ0ZBRTAwOEUzQkMyNAotOjEwQkFBMDAwRTlGQzMyREJCMjZCMjAwRTI5NkI2MjQ2OEQ4QzRGRkFCQgotOjEwQkFCMDAwNUFDQTBGNkY5OTA5RUZENzY2MUREQTcyMEI4QzkzNDM0MAotOjEwQkFDMDAwMENFQkExRTU0NTlFNjJBNEJCQ0M0M0I0MTRFQTM1MUM0MwotOjEwQkFEMDAwQkYwQkY2QTM5M0JGMkY1RjBBMzNDQkMwRjQxMEE0OTkxQQotOjEwQkFFMDAwOTRCRTNCMzI2MDlFMTI5OTVBMTFFNzA3MEZERTUzMzUyMAotOjEwQkFGMDAwMUVGODBBREUyOUE5QzAzNDRBMkEwNkYzMEQ0M0ZERDFGNwotOjEwQkIwMDAwQkNCRTI2MjRBODM3REFBMzlBRUNGMjA3RUY5OTM2MUFCRQotOjEwQkIxMDAwRUNGN0Y1QTAyN0QyN0Q2QTI3Q0E4NzEwMUZBM0Y5NDU0NQotOjEwQkIyMDAwODRGQjdBN0JENDU5NEVGMzZCQThERTA4RkFDQjg2QjIzRAotOjEwQkIzMDAwM0Y4ODQwNzdFQkY3MTEzRkUwNDc2NkYwMUYwRUUzM0U4QQotOjEwQkI0MDAwQ0U3MUE3RTNCQTI1OTk3NDAwRkQxRjFDN0Q3QzNBRUNFOQotOjEwQkI1MDAwNTNFNDgwODhFRjQ4RDRGQ0MyQkQyNTE1RjRBMUQ3NTkyMQotOjEwQkI2MDAwRkM0OUY3NEJGNTI4QkY2RkNGOTcxM0JFQzM0Q0NFQTE0RQotOjEwQkI3MDAwMjc1QUVCNjc5NENFNDQzRjVFQzFBNjhERDNFMTNFNEU3QgotOjEwQkI4MDAwREQ3NEM5N0YzOUFEOURCNUE5QkExQUY0MTgzNTQ4QjEyRAotOjEwQkI5MDAwNkIzODlERjdENkYxQUI4MDA4RDUxOUVDQkM0QTlEQ0UyOQotOjEwQkJBMDAwQkVBQjUzNTlEQUQxMzhGRjIyQjBEQkMzQkIyNDE3M0NGQwotOjEwQkJCMDAwODUzQ0E2OURCRDU3RDc1MTdFRDYxOUEyN0E2OTY1RjVGOQotOjEwQkJDMDAwNUVFNzM3RTlGNzYzOTU1NDBBRDJFRkM3QTY5Qzc1QzFDMwotOjEwQkJEMDAwRjlDQ0ZEOTUzNTk5MDBDRjdENkQ2NkJEOEVDMDYzNkE0OQotOjEwQkJFMDAwRDQwRTFBRUIwODA3M0M3NDVFOURCRjI3MDg0RjlCMjNCOQotOjEwQkJGMDAwREE1NTRCRjNCNkE3RENBMEUxMENCMjZGREEzQkJCNjdCQQotOjEwQkMwMDAwMDE5RUNFMkRDM0YwRTQ0MUVCM0RDQkU1QzU5Qzg2N0U4NQotOjEwQkMxMDAwQkM1NzU1QTgxMTc2OEUxQUJFMTc5OUYyQ0Q5QzY1MTRBMwotOjEwQkMyMDAwNkFCREM4NzQzQzlCOTg3RDEyOTYwMjJGMDI1RjBFOTdFNgotOjEwQkMzMDAwODc2NDY4QTJGM0IzQ0VEMkRBOURDMENGRkUwNjdBMUQyOAotOjEwQkM0MDAwQzhCOUZBRjk3OEZGMTFFOURGMDZGQTUwN0Y3NTIyQkIwRgotOjEwQkM1MDAwMjk5ODlBODJGMzNEQjFGNTlBRDdDMDNGM0RCNzgxRTk2MwotOjEwQkM2MDAwRkIwNTVCM0YxNDcwM0ZBOERFOTc0M0ZCMkZBOEM0Mjc1QQotOjEwQkM3MDAwMkFDOURDOTU2MUU3NThEODlGMTI5MUE4MkFDQ0E3ODdEQQotOjEwQkM4MDAwODA5RDEwQTZGMkM3MDgwN0JEREY3RkI2RkQzQUI3MDM1NwotOjEwQkM5MDAwREIwN0MxNzgxRTE2NUY4RjlCQUYyN0RGNEZENzkzNDAxRQotOjEwQkNBMDAwNEU1RkM1QzdCREVEQkUwRjBGNEMwMkY4QUY2NDI2NTIwNAotOjEwQkNCMDAwNDFGODZEQzE2OTk4NDc4MTc2N0VGM0Y4MTZGNDQ3RTE0MwotOjEwQkNDMDAwQjlEM0NERUU0MzdCMkFGQkYwREU5MTk1QkY4MzNBMEZDQgotOjEwQkNEMDAwNzRCQjJERjVDQzc4NjZERjlCRjlFOUEwM0NDNzJCRUI1NAotOjEwQkNFMDAwRjc3QzBCQkYxQUVCRThCOTEyRjc3NzBGN0JFRjlDMTBDQwotOjEwQkNGMDAwNEFCNzRFN0MwNjU0NjVFRkM0NDZGNDc3QzlFQkExREUyMwotOjEwQkQwMDAwMTg4RjVCMDEzQ0U4MUNGRDg3MEE4MENGM0FBRTJGREMyMAotOjEwQkQxMDAwNUM0RUQwNUVCRDM5QUYxN0Y1ODUzOUNENUM1RjkwRkNDOAotOjEwQkQyMDAwQURDMDY0NTNCN0E2OTNCNTA2RkQwMTQzRkNFMTg4QjFFRAotOjEwQkQzMDAwOTlFQjBCQkFGQ0U3NzJCQkNFRDdEQjg2NzIxNUY0MDMyNgotOjEwQkQ0MDAwODM1Q0FERDU5ODVDMkRGMDMxQjk1RUQ3NDZDNzUxMzlDQgotOjEwQkQ1MDAwMzI1NzE5RjUxMjI2QzdENTRENUM3RkUwNzIzODkzOEZBNAotOjEwQkQ2MDAwOUJENUM2RTQ1NTI2RTgxMTVFMDgzRkQwNTAyRUUzNTkxNgotOjEwQkQ3MDAwNUU3NjVDNkYxOTU2Q0VFNDY1NjZFN0UzMjhENzVFMDExMAotOjEwQkQ4MDAwQTdDQjA0RTAxQjRDNUU4RUY4Q0RBQjFBODBDOTQ3M0ZCMQotOjEwQkQ5MDAwNzc1MTNFRkQxNDJGRjcyOTU0M0ZDQjg4RUI2NzZCNDQ1NgotOjEwQkRBMDAwN0VDRTQ0OTg3RTg4QjFGNTc0OUU4RkYxRkFGQUY3MUQyNQotOjEwQkRCMDAwN0M3RThGMUZDQUY4MDZGMEQ3MDdDMzQ1RTM2RDA2QkEyRAotOjEwQkRDMDAwNDVBRjI3Q0RFNzU3QjI3M0ZBRkMwNjc2NEVFREYxQ0ZCQgotOjEwQkREMDAwREI2OTMzOUMzRjM0QkI5OUJERDlBQ0UzNTU0M0Q0MDdGMQotOjEwQkRFMDAwRkRFMkZENDBFNEUzRUM3REE5NzZGRTFFOTQ2RTVGN0RFRQotOjEwQkRGMDAwMjc5NUZCMzUzOEZFMjQ5MzI3M0ExRkYyOTA4MEI3OUM5NQotOjEwQkUwMDAwQzJGNzU4NjQyN0YyNkI4RERBNEJCMEI2NjNFMUE2REM1QgotOjEwQkUxMDAwODU0MEVGRTFBQjJCNjFGRUVCMjdGRDE1RTMyRTBBOTI4NwotOjEwQkUyMDAwRDg4QjdGMDczQjkzQzFFMTRCRjE3NUNGRjQ1Nzk5MUQzOAotOjEwQkUzMDAwREEyQjI2QkMyNzMzRDEyM0UxM0M3QjI0OTIwQUYwNzQxMQotOjEwQkU0MDAwODVEOUZCODRBRTg5NzJDMkZBMTc3QTE4REY5NDNERUM2QgotOjEwQkU1MDAwMUVEMUZBNDkzQkYxN0U2MzUyRjkyQzExQ0Q5NjQwOUVEQQotOjEwQkU2MDAwRUFGMkI2MTNGNjc5MzIyMUQ1RUU1OUFEMUFGMkZENDg1MQotOjEwQkU3MDAwRDA4NkZDOTVBMEREMTlFNkJGRkZBMjk1QzlFODM3RUM5NgotOjEwQkU4MDAwQjQ4NzlEQjAxRjFCMkFGOUJFMkFDRTZFQjg4RkZFQTVCRgotOjEwQkU5MDAwRjc4NUMyMDNGNkI5M0QyMDQ2RTA3RTc5M0JCNTU0QzcyRAotOjEwQkVBMDAwMzJCRjBFRkU3RUNFMDk2QUJGMUJDRjI5MkVGMzg4MUMzRgotOjEwQkVCMDAwNEVBQTA4RjE4OTA1NkQwQ0JGRDY0RjkyNzExRTZCQzc1MwotOjEwQkVDMDAwNjc3N0RCMEE4REZDOTdDMTI5OThDQUUwQjQ3NkQyOEJEQwotOjEwQkVEMDAwODg1RkU3M0JCRjc5MEQ3NzRFM0U2NjM4NDczQ0JFRjkzOQotOjEwQkVFMDAwQTEyMjgwNzNGQzlEOTZDMDkwRjcxN0U2MzVGQzY2RjJBMAotOjEwQkVGMDAwOEUwNEU3MDMwM0U1NjA0N0I5QzEwRThDNUM2RjNDNjdCNQotOjEwQkYwMDAwRjk3NzBGQjNBQjQzMUVCM0ZGMEVGOEFCMUQ4RDhCNDgxMwotOjEwQkYxMDAwMkVGODk3RjY1QzEyRjFBMkZGN0UzMTNCQUY1REMwQ0ZFOQotOjEwQkYyMDAwNkI0RkVFQjgwNkRGNTMxODRCRDFDQTlFNjBERkRGNkY1MAotOjEwQkYzMDAwMzRCRkE3RjBGRTgzMEZFNTMyQkY0NkM0MTRFN0IxNjBGQgotOjEwQkY0MDAwRTczMzYzRDhCQjY2MUFGRjlEMENBMjY2NTVCMTc3QUY4NQotOjEwQkY1MDAwNTE0RUJGRThENzFDRjhFRTVDMTBGOTkwMENCRjUzMDFBRQotOjEwQkY2MDAwRkU3NkEwRTA2MkI4RDdERjgzQTkxQkU4Qjc3OEYwN0I0NAotOjEwQkY3MDAwNkUxOTU0MEQ0M0JCOEIwNDMxQ0QyNkY1OThGQTQ4MTg0MQotOjEwQkY4MDAwRDM1Q0QyODM2OTFFRDhCOUM1MjAxN0ZBMzE1NTg5MjJFRQotOjEwQkY5MDAwMTIwM0RGMkYyMjdFQ0M5NzkwMjBBNjEyRUM1QjY2RkM2QQotOjEwQkZBMDAwNUM0MkRBRTVDNEY4MEIzOEJGMDBCQUQ3Q0YyOUY0RjMwNgotOjEwQkZCMDAwRkQxOTlFREE0RTBGMzI3QkYzNzlDNTUyNEY2MDlEMDcxMwotOjEwQkZDMDAwRTExRjQ1QkUzRDg3QjNGMEMzM0YxRUQzMDNGNzdCNTY0OQotOjEwQkZEMDAwQUM2M0Y3NEI3NEJFOEU3NjBERURGRkQxMEMyNjA3QjQyMwotOjEwQkZFMDAwQkIwNUU0NUZBQjUzQUZCQTE0RTFEODY5M0Y2RDNDNkY1QQotOjEwQkZGMDAwMjA0RTY3MDlGQ0ZFOEJERUVGMUNFRTVGOThDM0U1MUY0OQotOjEwQzAwMDAwQjhCN0Q5RkQzQjNGREVGRjk5MDM3RTA2NDMzOTE5MjhCNwotOjEwQzAxMDAwNjdGN0FBRjU3RUM0RDQyOTIzODczQURGMzNCNEM3NzhGQgotOjEwQzAyMDAwRTQ1QThCRkU3RjRFQjk2REM5Q0ZCNUI2RkY4QzRFMjg1MgotOjEwQzAzMDAwM0JFRTg3N0JGNDUyMzU5RjlEMzMzMUI5NEQxMTQ5QzU5NQotOjEwQzA0MDAwNzY2RDhFQjdEMTBFMEI1RjE2MzBDMkU1MTBDNzdGNURERgotOjEwQzA1MDAwOUVDQ0I1RjhGNUFERTk1Qzg5RDM4NUE1MUYyQUY5RDI0OAotOjEwQzA2MDAwRTE1RTA0QkU2OTYyQTA2QkZEREQ1QkZENzdEMjE2MDQ2NAotOjEwQzA3MDAwNDI3MjBFNkJFNkMzNzczREY4QkNDMzY0NkI0RDBFNEQ0OAotOjEwQzA4MDAwREY4M0JDQzE5RjdGRDgxQkZBQURDNzYwODcyODgxN0E0OAotOjEwQzA5MDAwOTFCRkZGODc3NDM4OEZEM0UxNjVCNkNFNkFFMDZGMjcxMgotOjEwQzBBMDAwNDJDNDBGRjZDMzAyNTJCRjFFRjQzMUYyQUEwREY5REJFRgotOjEwQzBCMDAwMDU3NERFNzIwNUQ4NkY0NDEzMzMzMEFGQzFFRkY5N0NERAotOjEwQzBDMDAwRDBDOEVFRTUxQ0U3RUY1NkVGRTRFRjI0OURFMkVGNTQxNQotOjEwQzBEMDAwOEZFREJBRTMyQUMwODM5M0ZDQkQ2QTlERkVGNTcxQzc1QwotOjEwQzBFMDAwRjZBNENFMDZCOTNGQjZFNzkyM0FBODM3NzY5NzIzMEE2OAotOjEwQzBGMDAwNzAyRURCRDcxRTA0QkYxMEJDQ0Y5MjQyQzdDOUEzRTM4QQotOjEwQzEwMDAwMzkzMzgwOEYxMDk0QjdBNzNBNTMyMkFCRTkzQzRGNzU2RgotOjEwQzExMDAwRDk5MDJGN0Y1QzJFRTIzQjIzRjBDQ0E1OERDRjJGMkQyNQotOjEwQzEyMDAwMDNGQUY5RkI4REEwODc5Q0U0N0M0NDdGRUZGMTU0QjVDMgotOjEwQzEzMDAwOEFGNkYxMEI3QkQ2MDg3MDJGRTFENDZDMTVENzdEMkFENwotOjEwQzE0MDAwQTcyNzNGODNDMkM3RTc2NUYxRTUyNUJCMUREMTIyM0E4QQotOjEwQzE1MDAwOEY4NThGQkM1RTU0MEJGQ0FGMjhCQzMwRDEzOTczQkFDRAotOjEwQzE2MDAwOTdGMUJGNTM0RjEwOEM4NzNCRTVFMkJGNEZFNEVDRjFGMgotOjEwQzE3MDAwMUFGREFDQTk1RUMxNjQxNzlFRjJGMERGMzlDQTNCNDdENQotOjEwQzE4MDAwM0QxRTVGNEVEQzNENUU0NkY3M0Q1RTM4OEZCQTM3RjVBQgotOjEwQzE5MDAwQzc3ODdGRURGODEzRUM5Q0UyODVDRDc1RjlFMDhGMUEzNgotOjEwQzFBMDAwRUU1NUQ5MzlGRTlFOUY2MERDMzhBQzAzRUM2ODNBM0YwRgotOjEwQzFCMDAwMTVFNjc3NkZFQTVCMjdDMUZGNDBEQkUxRkQwQ0JEREREMwotOjEwQzFDMDAwRjEzRDc1QUM3RTE3QURFRjQ1QjgxMzZGMDVFMDAzODMwNQotOjEwQzFEMDAwM0JEOUNERjg4NEFFM0YyRThBNjRFM0VGMkRDNENCNDUyNgotOjEwQzFFMDAwMkM4NzI5QkEyOEZDQzdFRUJFMUFDRkI1NDY3QjMzOThGOAotOjEwQzFGMDAwN0M1MDdBQzZDQ0M0Rjk4N0YzNjExRDdCMkUwOUU1ODM5OAotOjEwQzIwMDAwMUZFRkI4RkU3QjRFNTIzODFGRTAzMEMzMTMxQUVEMzVENgotOjEwQzIxMDAwRjBGN0Y3REY3RTBBRjk3Qjk5NThGRkU3QkIwMDJGRjdBRAotOjEwQzIyMDAwQjJERjFGQjlFM0NEOERBMjkxN0Y0Q0Y0MzJGRkZBQkQ4RQotOjEwQzIzMDAwQTk0QkJENzAxRTc1N0NFMDlEOUMzMDhCRjdEOUNGREU3RAotOjEwQzI0MDAwNjE1REM0NjlFRjc4MzdCNTlGMjgzQ0RFREZGRDAzMkNDNAotOjEwQzI1MDAwM0YzRUYwOEU0RDBGQzY5M0JEQkZGQkY5MEM0ODZCNzk4NgotOjEwQzI2MDAwM0MzRjg5NUM4M0Y0NDVFMUQyRTY0QzIwQUYwNkVFNDVDNQotOjEwQzI3MDAwNDVEODdEQjczMzAyN0Y3RkY0M0UxRDZFRjVGMjRDRDM3NwotOjEwQzI4MDAwNzkxNUEzRUZCQ0FEODU4NzUwNUY4RTI0QkUyNzY3OTVENwotOjEwQzI5MDAwRjdENkY3NjRDRjc1MEZGODI4QTdEMzYzRkM5RDkyQTU1NgotOjEwQzJBMDAwOUVEMEI3QkQwOUU0NDg2REM3OTI3QzgwNzMyRERDQTk5MAotOjEwQzJCMDAwQzMzODg3QUY1RTBFRjYzNkRFMzc2MUVGQzk0NjExNEVFMgotOjEwQzJDMDAwRkE3QkIxNjQzQzJCNEY2N0Y5QzVERTJCRDc4MDRFNzRFNwotOjEwQzJEMDAwNUM3RjdGNTZGQjFBMkIyRjY0RTU2REJDRkMyNTRGNzBFRAotOjEwQzJFMDAwMkUxQjlGQkQyNzQ0Qjk2MjNBRkMyRTg1Q0VGRjkyQUYyQwotOjEwQzJGMDAwREZGQ0JCMTQzRjAyOUUzQzAxRkI1QjhBRkQ0OUI0QkZERgotOjEwQzMwMDAwQjFGRjdBN0YzQUJGRjk5N0ZCNzFGRUY3RjZBM0YzNjFBRAotOjEwQzMxMDAwQTA0QjA4RDkyMzdFRkY5OEZGMEVGOEZEQjNFREM5QUMwMgotOjEwQzMyMDAwMDIxMzNGRkY2NDczNzEyQjlDMDM3RENDREYwRjcxNzQ4QwotOjEwQzMzMDAwQUUyMjIwOTc2RURFQjREMUY0QkIyNkQ2NzdCRDlBNzhCNAotOjEwQzM0MDAwM0M4OTVDNENFOUNDNDBDRkZCQkQ0QzhGREVDRkY5MjE2MgotOjEwQzM1MDAwRkNCOTBERUZGOUMwNUY2NzM2ODZEQ0EwRkQzNzhBQkZGOAotOjEwQzM2MDAwRjM1RTQ2QzJBODVGOEQyMTNEOTg5NjkzNUU0Q0M3OTFCRgotOjEwQzM3MDAwN0U0Q0YxOThCNDE4NUM3RDdFMUI3RkFGQjcwQTE2QkY2OAotOjEwQzM4MDAwRDgxOUJBMUY0Mjc1M0Y3NTg0OUUwMTdDODI3NzdCMDU2MAotOjEwQzM5MDAwMUJFODQ1NEIyN0MzRkM3RkVFNTVGNERGRjUyNDk2REYwMQotOjEwQzNBMDAwNEI4QkZGMEU4ODBBN0FDRDBDREY1MDdBMEQ1MUE0RDM0NwotOjEwQzNCMDAwMDNGMTFCNDVGOEVFRUYwQjVFRUMzN0Q5RUZCRjJEQjc1RAotOjEwQzNDMDAwQkM3RkMyRUUxMUVCNzA1ODQyN0EzMDBFRTI4NUFEMkI4NQotOjEwQzNEMDAwNUUxRTRERTFCRjcwQjcwN0U1QzFDOEFEQ0RGOEZCNUY4QwotOjEwQzNFMDAwMEI0OTZGMzZEQzJGMURDOURGOTMyMDVERUNGNzg1RjQxOAotOjEwQzNGMDAwNzcyMjQ2NzczOTRDRUZENDJEQjFGQ0ZFRDAyMkZFN0I1QwotOjEwQzQwMDAwNjE4QjJDREZGNUZCOUIxREYwMjE0MTFDODFGNUZFRTdDNAotOjEwQzQxMDAwM0JERTI0RUYzNjk1MjdGRTFEMThFQkZEQ0ZERDNEMjJEOAotOjEwQzQyMDAwQzZGN0FDODA3ODIxMjFDRUY3NDZFRkE4Nzc5OEYxQUIxQwotOjEwQzQzMDAwRTdEMjEyQzNGQjRFNEQ4MjlGRDlEMzlFOTRDMDgzQzJENAotOjEwQzQ0MDAwRTA3MTQ2MkEwQ0JGRjYwODQyQzIzOEIyNkZBNjg5N0M1QQotOjEwQzQ1MDAwMUY5QUM5OTVCNDlGQTZDNTkyMDJGNjY2NTMyNDA1Q0ZDQwotOjEwQzQ2MDAwNDE5QjE0NjYxNzVFRTBBOTcxODI5RDRFRDI0NTdDNDdDMAotOjEwQzQ3MDAwNkU5QTZEMEFDNjk3Q0I0QkE0OEJFMERDRjNEMEY2ODVBMQotOjEwQzQ4MDAwQkQ3MDdGQTFDOTI3QTE5RkY2ODI3NDc2MEU0QTcyNDRCRgotOjEwQzQ5MDAwN0MxRkEwNTlEOTlCM0UwN0Y2QzlDRENFMTk0NzI4MjQ0OQotOjEwQzRBMDAwMDI3MUYwMDdCQTZGMTcyMURGNDRDRDk2RTEzMDhFMTA4QwotOjEwQzRCMDAwRUFDNTdCMzczOTEyRTFFN0FGMzNDNjUzRkMyQkUwRjgwRQotOjEwQzRDMDAwMjA5MTRFQkM3RjNDNzVDOTMxMTdDOEY1MDJCRUVGMTNGMQotOjEwQzREMDAwRDIwQTk5REY5OEVGRTdCNjg2QTNFOTgwQTcyRjc1Qjc1MAotOjEwQzRFMDAwRkU3NjFBRURDRjFFOTEzMEFFQjVFQ0YzQTYzN0E2RDE4RAotOjEwQzRGMDAwRjFGQUJCNjU4QzY3RDVFMTkwQkY1MjMyREQ5RkNEQkJCMQotOjEwQzUwMDAwRDU5Qzk3MkRGNzg4MjU2MjI4QTdGOTUxN0M3Qzc4QzBBNwotOjEwQzUxMDAwMjk2QThDQUJDQTBBMzA2N0ExRTI0NkZDQjgyODREMjBENAotOjEwQzUyMDAwNzg2RUMzRjNBMzIxNEZGMTc0OTczRDVDMDNFRjYxRUU4NgotOjEwQzUzMDAwRkE5MzgwN0U4NzgzRERGMzBBMzA0RUZGOTk1MDAxRTA0NQotOjEwQzU0MDAwQjc4RTBGRDZGREZCMUJENzg3MjgwNkI4RjhGRDYwMTdGRQotOjEwQzU1MDAwMUNENjU5RjFBN0I5OTE5NDgyM0ZEQTE5Mzk5NDcyMjEwNgotOjEwQzU2MDAwRUNFMzYxM0JCRTIzRDVDMkY1NkY4OUZGNEVBRjhFMkY0MgotOjEwQzU3MDAwRDZCNEM1ODI3NzJEOUY1RjgzNzhENzRGRjE2RUZCMTBCRAotOjEwQzU4MDAwNzgyNzI5MkFFQTA5RjYzQ0UyMDdGMkI3NjdGNUU2MkE5NgotOjEwQzU5MDAwQjRERDg1NEZDOTdFMzcwNUQ5QjRDN0NBRDM0MDlGQjkyQQotOjEwQzVBMDAwRjBGOUVCRjA5RTJDQzAwQkRGNzk2QzkwNEJDMUVFNzc2RAotOjEwQzVCMDAwMzQ2NDk1QzJFRjFENEQ3QkNDOERGODc4RDZDRENFN0ZGRgotOjEwQzVDMDAwQTQ4NjU0M0Y5NDM3NzU1N0Y5NTQwMzVFQjczNjJBQTVBRAotOjEwQzVEMDAwNTIyOUJDNkZFQTJDODVERjQ1NkE0REYyM0JDQzIzRDI1MQotOjEwQzVFMDAwQzUyMEY4OTc2NDZFRkZDRjRCNjNGMzlEOTc5NjhBRTk1OQotOjEwQzVGMDAwQ0QzQzdGOUZBNENEODRGOURGNDdGMTA3RTIwNTBFREMzNwotOjEwQzYwMDAwQ0FGMDc3NDU4RTEzRUYzREFGNzhBOTc4Rjg1MDcxNDBBNgotOjEwQzYxMDAwM0IxQjdEQTUwMEI3QURCN0Q2QTJERkEzN0FGOTIxRDcyMgotOjEwQzYyMDAwRTU0MEU3MUVBNzAyRjg2OEYzOEVCQzc3MEFFMEZCQ0I3MwotOjEwQzYzMDAwNzZCQ0Y3RDVFNEE5NTJFNzE4RkFCMzc5MjdBMjVGQzkwNwotOjEwQzY0MDAwMjY2QUI5NjAxNEREOTk3NkU0NzIyOTA3RjA0NURCMDJBOQotOjEwQzY1MDAwOTJBODY5QzM3Mzk3NEI5NDNGRURGMjY4QjkwMjJERUYyRQotOjEwQzY2MDAwRDhGMDNDQ0IwRkQzQjYwOEI0RkMwNzFCN0VDMUVBOEZEMQotOjEwQzY3MDAwRDA3MkUxOTczRjdFQjRFMTNGNTg3OUE5QjYwNUYyMEYzOQotOjEwQzY4MDAwNkNGODM1Q0I4MzZFNDFGNTk4NDczN0ZDRUU3MkI4MkZDNgotOjEwQzY5MDAwREQ2NEY3Q0YwMkZGQ0U4RkU5RkNDQkU5RkM3Qjc4QkFGMwotOjEwQzZBMDAwMjc4REY5NzNGNEYyQkRGMDlEQzI3QjFGNEZBREU1NEZBRQotOjEwQzZCMDAwRjI3NjRGMjcyOUZGMjkyRkRGOUZBNEZGOUZGMzc2RDEyMgotOjEwQzZDMDAwMjRFRDBGRjI3Njg3OTJCNDdGOTFCNzNCOUNBNEZDNjU3MgotOjEwQzZEMDAwNUVGRTRBOTJGRTdGQzVEQkY1MjY2OUZGNUJERUVFRDU4NgotOjEwQzZFMDAwMjRFREZGQzBEQjFENDk1MkZFMDYyRjdGRDNEMkZGNUIzNgotOjEwQzZGMDAwQkM3RTFGRkY5RUU3Njk3QjQzQTM3ODk3RDdDRDVFRjY4QwotOjEwQzcwMDAwMkNGM0I0QTFGRUJFQjVCRTEyRjFCRjY5MDJEMzMzNzRERgotOjEwQzcxMDAwN0NDRjgzNzg0RDlBMkY1MjU4NUM1NTkxQzJFQ0I4NUYwQwotOjEwQzcyMDAwRjBGRUFCOTc5NzZDMDBCQzVCRjE0QjFCQ0E1MzJBNDdEQQotOjEwQzczMDAwRjBGNzc0QjVFNTJDRUU2NUM1NEJFQzNFQzg4QUU1MTIwMgotOjEwQzc0MDAwQkVDRkFFRTNFMzJGMkNGM0RGQzZFN0Q3Q0NFN0ZCNUMyRAotOjEwQzc1MDAwNUExMTNGNkZGMTk1Q0UzMEM2N0IyQUU2QkM5M0QyMTNCNwotOjEwQzc2MDAwODRFQzM0NjczMUY5NTJCNkJDQzYzOTBBRTQwNzk1MkYxOAotOjEwQzc3MDAwQzAzNzVCREM3MjE0RUVEMUI3MjgxMjk2Mzc2N0Q1MjgyNAotOjEwQzc4MDAwNTBBRTI5MTJDQTlGOTZBQzFBRTcxQ0Y0RTc2NEEwN0Y0QQotOjEwQzc5MDAwQTI4MEM3RUQzNTJCMTJERUUzOTdEMkE3NjJGOUI0QzdBQQotOjEwQzdBMDAwNjYyOEMwNDc5QjQ5N0YzQUJDQ0ZBN0FEOTRGMEJDRjY0MgotOjEwQzdCMDAwNDA3RDBEN0UyRjQ4RkYyODFERjhGMzgxNzRCNkFFNDNFRgotOjEwQzdDMDAwOUUxNzVERjA4RUFCNzQ5Qjg4RjI2MjI0QzA4RjhFNUJFNwotOjEwQzdEMDAwQjQ1MjhDQThCNENBMjE2NTg1MDhGOTA3OUE5OUJDQTJGRAotOjEwQzdFMDAwN0Y5RUYxODY3NzE0NzdERDVFRjUzMkM0RUYzNEFEOTMyQQotOjEwQzdGMDAwRjA3N0I2RTE0RjMyQzg4MzEyRkUzQkE1OTk0QTg2NDlDRAotOjEwQzgwMDAwNUVEREM3RkRCODlBQ0Y4OTcxNzgyNTEyRjExOTdGQkYxNwotOjEwQzgxMDAwMzI1M0UxRTc2OUI2MTlGODhFNTk3MUQ4MkM5RjBBREJCQgotOjEwQzgyMDAwQ0NFRkQ4MTQ1OEU0OTM1NTVFOERBOEE3RkNEMTUwREYwNwotOjEwQzgzMDAwRTE1MzRDRjlDRkQzRjg3QjE2N0VFMjA3N0Q2NkM1RTM2MgotOjEwQzg0MDAwMkIyRTg3NTA3NjlENUZFQkYyRTVCRjAwNUY3MTUyMTI5MQotOjEwQzg1MDAwMDA4MDAwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDBBNgotOjEwQzg2MDAwMDAwQkREN0QwQjc4NTRENUI1RjAzRTY3Q0UzQzMzNDlFNwotOjEwQzg3MDAwNjYyNjMzOTNDOTdCMTIyMDA0MDgzODgxMTAyM0JFMjYxNAotOjEwQzg4MDAwMjE2MDQ0QjQwM0EyRTJBMzM4RTExOTIwQzkwNDRBMkI3MQotOjEwQzg5MDAwNTZCQzRDNDhDNDQwQjE4NkRCODg0MDgxMEUyQThBRjVEQwotOjEwQzhBMDAwRDFBMTQ1OEQxOEVDODA4ODc4QUJCREQxRDI1RUQ0RDZBRAotOjEwQzhCMDAwOEVDODU1NTAxRUEzQjY0OEJEQjVGQzdCQURCRDc3MzJDMgotOjEwQzhDMDAwRTcyNDUxNkNGREVFRkRCRTNGRkRFQzYxOUZCRENGN0VDOAotOjEwQzhEMDAwQUNCRERFNkJFRDNERTdDRkQzQkYyQjA5Njk1RDE5QkQ2NAotOjEwQzhFMDAwNjJBODlFOTAyRDJCNERDMzE0RkE2Q0ZENzJEQzRDNTI0NQotOjEwQzhGMDAwNEU0ODIyRDVFMjdGNDgyMjY0RjU0QURCMzA2NTE4MjE5NAotOjEwQzkwMDAwRTc3OUZCNjIxQjdERTkyMjY0QUIxMjlFNEU5Q0Y0MTkxMQotOjEwQzkxMDAwNTE0ODRCMjEyMUZCOTZDOTA0Q0E0QkIzNEMxMTIzNkRERQotOjEwQzkyMDAwQjJGNEQ1REY1RDNEMUNDQTRCNjQxRkYxRjY3REFGN0RDRgotOjEwQzkzMDAwM0VCQUQyMzMwQ0M2N0YyNTlENjBCRkZBQTAzNEVDRDgzNgotOjEwQzk0MDAwMzhGQTZGMjVFODA5QTQxMjMyQTQ0MzM5MUEzNzExRkNDQQotOjEwQzk1MDAwM0I0RkZGMkI2Q0E3RTU5MkJFQjI1RTFGQjBEOUFDODRGMwotOjEwQzk2MDAwMTQ5MEE0NzY3NDNFOEFBNkFDNzcxREI2MDc0QkExN0ZCRgotOjEwQzk3MDAwMDVGQkQ3Q0UyM0FGOTlBRTNGQTk1RkEzQzdBNjJBQUZDOQotOjEwQzk4MDAwOTY5QTRCQzgxMEZBQTQ3MzA1Rjg4NDVENzI2NDA3NUQyQgotOjEwQzk5MDAwNjdFRUYyQkIyNjFDQ0IyMDI0RTdBMEE1OERDMDFBM0E3NwotOjEwQzlBMDAwMUUyNEM0NEQ4ODBFQzZBNkVCNTYyNEJGOTdFODA4NjkxRQotOjEwQzlCMDAwMkIyQ0YzNDlGNDc5RTg2OTBCODM1MzlFMTVFMTY0OTBCRAotOjEwQzlDMDAwN0M5OUQ3RDBBNzUxMEVEOEEwN0ZGQUU3ODdGRUVGQ0Q4QwotOjEwQzlEMDAwQjM2QzVGNUIwOEM1QTAwOUUwOTBCQjkzNzY5ODREOEI2NAotOjEwQzlFMDAwRTFEQzM1RkVBMTc0OUYyOEI4QzkwNEE4RUY2OUY3RDMyQwotOjEwQzlGMDAwRjVFRjk0N0FDQkI1NTA4RTQ2MENBQzNEMjEzMUY4QkZBMwotOjEwQ0EwMDAwNURCMkM0RUI4OTVGRjExMEYyOTQyNEYxRkE5MUI1MzU2RgotOjEwQ0ExMDAwQjlCNEJENjIxQkE1RjgwODk5REQzMUJBNUQ3RjM5RDQ4MAotOjEwQ0EyMDAwQ0JFMjdCM0ZBOUE0RUI4M0YxNzgxOUUwRjJDNDAxNUU2RAotOjEwQ0EzMDAwMUZCRUI0QkQ4NkNFNjc5NzQxOEM0RkMyRDA3RTk3MkM2NwotOjEwQ0E0MDAwQjM3MkI4QkNCREU2MzJEQTVGMzVGRjNFOUNCRkM2OUYwRAotOjEwQ0E1MDAwOEJGM0I5NDY2NzI3QTREOTc2NjVCQkY1OTJCRUY5QjZDNAotOjEwQ0E2MDAwRDgyN0I1QjcyODg0OUNGMkM2RDNFODc2OTFDNkVEQzcxRgotOjEwQ0E3MDAwREM4NDc2QjU3QTY2MzAwMDcwMjRDNDQ3MDJBMzA5RjlENQotOjEwQ0E4MDAwNkZDOThCRjgyMkY2NEZCRkJCMkE5QzQzNUY5RDM5RjhENAotOjEwQ0E5MDAwNDU1QTI5N0Q4Njc0RjE4MzI5MTQ3RThENUQ0MTkzQkVBQwotOjEwQ0FBMDAwODhDMjU5RUYwRkU3MTRGNjdERDdCODdCMUEwOTUyMzhDMAotOjEwQ0FCMDAwODVCQUNCRjAzOUMwNzc4NzE0Rjk5RkZBQ0U2NEI4ODA3NQotOjEwQ0FDMDAwRjE0RUM1REU2QzdBOTI1NjM1RUE4MkVERDYyMUQ4OUVCQgotOjEwQ0FEMDAwQjBGRDFGNzg3REUyRkI1MzRGQkU3OTIzOEM3N0RBMUJDNAotOjEwQ0FFMDAwNzc0RjAxQkM4QzUxQjgwQ0YwOUQ2OERGRDQ1NTQ1MDBFMAotOjEwQ0FGMDAwRUZGRjYyRjFBRkI0OEQyN0U0MjYzQkEzMzNBMjM0RkJGMgotOjEwQ0IwMDAwQTA3REQ0RDQ2MUYzRDE3QUIzQkUyM0UwQTNFREU5NTY3RQotOjEwQ0IxMDAwNDZFNENBQkVFNzJBREI1MDZDQUY3REFGQTU5RkE4ODk2QgotOjEwQ0IyMDAwNjQ0Q0E1NzgxRDZFNTA3QzNCMDg5NEMzMjk2MzY4NzlEQQotOjEwQ0IzMDAwNURBMzMyQUU4NTRFNjk1NUQ5MUZDNjk2NDJGOTE5MkJCMQotOjEwQ0I0MDAwMzFEMjcyNkJDMzAxNEYyOUQwOTFDRjQwMjg3QjIxRUJBQQotOjEwQ0I1MDAwMkU4OTY2MDExREI3MzUxQTY2M0U0MkU3MTM4RDJERjUwNQotOjEwQ0I2MDAwQ0MyQkVERUJCRkM1NEUwOThGQ0U3RkNEQ0I5NENFMkUxNwotOjEwQ0I3MDAwQTI0RjdERDQyRUMxRjdDMzE0MDI3NDY4QjZEMzdEQTYyQwotOjEwQ0I4MDAwNjU3Mzk2ODM4NDBCQTE5RDc1MUREMEUzMUE3REIwQjZBNQotOjEwQ0I5MDAwMUFEQTY1Qzk2NDA3MURENzNDNkM0NjZEMzU5RDg3Qzc5OQotOjEwQ0JBMDAwMjU0QjNBOUM0N0NEOTFGOUI0QkVENTY2MDBDRTQ2N0U2MgotOjEwQ0JCMDAwNkI5RkJEMTNFMEY0ODRFMjZCMDYzQTdDQzI2QUI1ODVENAotOjEwQ0JDMDAwNjkwNUU1OEQ3RUEwNUI2NTk4MzMwMjY1QTM4RTM0NDdDOQotOjEwQ0JEMDAwRTlGQzcyQ0E0ODIwNkFFRDlCRTc2RjM5N0ZGQ0FEQ0Q1NgotOjEwQ0JFMDAwODBGMzVENjc4RTRFQUJBMkZENTg5NkNBQjYzMDFENkZCRQotOjEwQ0JGMDAwNERFMzg2OUVDOTc0OUM5RjM2M0VGQjQ2MEI3REJGRDY5NwotOjEwQ0MwMDAwQUQxMDk4ODdENUE5QzQwQzY5MTQ4RkFGQTU3M0E0RjM5MAotOjEwQ0MxMDAwN0VBQTI1NjAwM0ZFOTk3MDI5RTQyMTVBNkYxOTZBMjBDMwotOjEwQ0MyMDAwREUyNDNFNjgyREE1RTUyNEZFOTRFMTU0RkM2NkZBRkQ2MQotOjEwQ0MzMDAwNDk3QkYwRDczNjNBRkVCOEQ3MEY5QkUwN0JDRjc4NTlDNwotOjEwQ0M0MDAwMDZCMjg5MkE2QzlGRDNDQUQ1RkREODJFNTNGN0UzQTgyNAotOjEwQ0M1MDAwNTFENzNCQTdBQUVCREQzM0Q0RjU5RURCRDRFNUVDQjk4NQotOjEwQ0M2MDAwRUE3MjJERTBEQjc4Njg0OEU3NUM0MUQ3QzFBQTg4MjVFNQotOjEwQ0M3MDAwRkVDOTRBOTI4NkYwNzkwQkUwNkYyOTk2N0QwMDFGNzNGQQotOjEwQ0M4MDAwRTMyM0M3RTdEM0ZBMUNFMDI3NzRGRTY0MEM4OUVDQTAwOQotOjEwQ0M5MDAwRkJCOTNGRkY4N0RFMzg4NUIzRDFEMUVDQjU5N0Y2ODc3NgotOjEwQ0NBMDAwNDc0RTlFRTkxQUQ4MkZFQjUwQzU0NjY4N0JFQjFGNEZDNQotOjEwQ0NCMDAwN0MwOUZENUI0OTUyQkI0MjgwOEYzRjBFRkIwQjdGMUUwMAotOjEwQ0NDMDAwM0E5RjU0Rjg4NzE3RTBEREZDRTdCQjQxRUVCREExRjNDNgotOjEwQ0NEMDAwMDFCQzczMUExNTFDRkZCRTE5REU4OEFFOTAzNTI3QjQ0RgotOjEwQ0NFMDAwN0QxQTZGOUY2NjVBRDdBMzFCNDM5RjdGNUNCMzQ0OTdGRgotOjEwQ0NGMDAwRDYxRkFFNkVEMjJDMDE1RDUyRkM0MDc5NDFFQTA4Q0FDMwotOjEwQ0QwMDAwOEI3QjY1NTIwRjc4NDNDOTk1NDA3RjM2Rjg4MEYyOTk0NgotOjEwQ0QxMDAwODkwRTAzRTJDREU3MUM3RjI4QTZDOTUwRUZCNkIxM0VDRAotOjEwQ0QyMDAwMEQ1OTczQ0Q0MENGRjcxQzY0Rjg3RjhGODFGNUQzREJBRAotOjEwQ0QzMDAwOUYxNzA3NDUxMTA0N0M1MjY3OTc1NUZENkNCMEYxMzY3QgotOjEwQ0Q0MDAwQkNFQ0IyQjNGMkFFMDM4RTZCODAyRTM3Q0M3MDhDMDU4OAotOjEwQ0Q1MDAwM0MzMUNBMjQwOEZEQTVFNzlBRkMyM0U4RkFDQ0FGMUFCNwotOjEwQ0Q2MDAwQzIxMkVEMzQ1RDIxMDdGNDBFREFERTQyNkUwRkQwNzk4NwotOjEwQ0Q3MDAwNkMzQTY0MDlFQkU4N0JGM0JDN0ZCNzExRTAxQjc2MzZCNQotOjEwQ0Q4MDAwRUY1REFCN0NCRjAzM0U5MEE4NTMxMDhFNjY1Nzg3NkQ1NgotOjEwQ0Q5MDAwNkMyOTVCNDM5OENFQ0YwMUZGQTBGQ0IxNkE1OEE3MEQ2OAotOjEwQ0RBMDAwRjZEMzVDRDU4MUYyREI1Q0Q2RDEwMTcwREEzNDU1NDYxRQotOjEwQ0RCMDAwN0RDMjMxNTc0NjdDMzZFNzQ1REYxODRBREZFQkU3QzlDRAotOjEwQ0RDMDAwMzZFOENGNDEwNUJCODE3NkYyOTNEQzhFNDAwMEZBQTVCMAotOjEwQ0REMDAwMzA5NzJCMThBQTQwQkZCODQyM0E0RTA2ODdBQkQzQjk1QQotOjEwQ0RFMDAwRkIwRTg5RjY5MzAxRkQ4RDYxRUQwMTRFNzYwRUE3NTI4MwotOjEwQ0RGMDAwQkIxN0YxRDNDOUZCQ0QxODRBREI4RjYxRkRCNDU1RjRFNQotOjEwQ0UwMDAwRjUyM0Y2NzE1MzJEODlDMEZDQzRCOEEyOUZERUZFODlCQwotOjEwQ0UxMDAwNUYwMkJFQUFGRjBEODUxQkREMjcyOURGODQ5M0JCNjc1OAotOjEwQ0UyMDAwMTE4OTE4MEIwMTNFODFFNkVENDhENzU2RjIxMEQwOEJFMAotOjEwQ0UzMDAwMzNCNzFBRjAyOEZCRDBFNkU5RjIxOEY4Q0U4MkUzRTgxRgotOjEwQ0U0MDAwRTc5MTA4RTA3MUI2NDI0QzU3Mzg0MDdGMDkyMDFDQjU4NQotOjEwQ0U1MDAwRjQ5QTc1QTBFMzdBNEEyM0JERkJBMkE1REYyQzg1QjQyMgotOjEwQ0U2MDAwRUIxQ0ZERTkzOENCRTlBQzJFMUUzMzAwM0Q2QkU4MjUwOQotOjEwQ0U3MDAwRUI1MEUyRkI4MEY0NUFCQURFOTY3MkJBMENFMDQyOTJCMgotOjEwQ0U4MDAwREJFQkJFQkVBQ0QzNDVERjk4MEM5Qjk1NDlFNTA0MDVCMgotOjEwQ0U5MDAwN0RCRTY2M0M0MkZFNjE4NEIyNDQ2NEVGRjkyMUMwRjc3NgotOjEwQ0VBMDAwRUQ4QzdGMTAyQUFGMjhCMUVFMUE2QjlCNjgwNTNBNURCNgotOjEwQ0VCMDAwNDIxMEJGQUE5RjVCNzdDQjZGNjg3RjY3ODcxOTZDMjA5MgotOjEwQ0VDMDAwNTdGMjBFNzVGNDgwN0MyNDVEQzFFMUIwMEY1Qjk0RTBGNQotOjEwQ0VEMDAwQ0Y1MjY4RkQ5NjIzOTkwNEY4RjYxQTMzOTkwOUY4QURGNAotOjEwQ0VFMDAwNzAzQ0Q3Q0E5NzE2NEUzNzVFOTA3MzlFN0ZGRTI5RjQyQQotOjEwQ0VGMDAwQzFFODUwRjcyODFCQTVCRDk2RjVCMTQzMjZEN0ZGQTI4MAotOjEwQ0YwMDAwOUU0NTg2QTE5RTk1N0JBMEE3QzUwQUUzNzdGOERCNEREOQotOjEwQ0YxMDAwMTRCRUU2RDc1OUZCMzAyRDg3MTU4MDVGNDMwMUQwRTE2MQotOjEwQ0YyMDAwRkVCQ0Y5MDgyN0U1NkQyMzAxM0MxREFERjM0N0EwNEM3RAotOjEwQ0YzMDAwREUzMTEzRTBCRjNCOUZCOUFEREUwQkZDQzczREM1MEIzNwotOjEwQ0Y0MDAwN0NFOERGODFERTI5QkMzQTM4REQ2QkQ3QUYxOEZDNDFDNQotOjEwQ0Y1MDAwRDAyN0I0RUZENzAyN0M3MTNGMDNDN0VCRTgzRThFN0U0QgotOjEwQ0Y2MDAwRDg0MEQ2RDJDQTEyNzk3NjdCMjFEMEM1MUFDQTdGNjkzOQotOjEwQ0Y3MDAwRUQ2QzlEQjdFOTQ3NTJERkZFM0M2MUFFOEFEOEMxRUU0OQotOjEwQ0Y4MDAwNTg2OTIyNDEyMzVERDczOTg5MDQyOTcxRTYzOURGQUMxQwotOjEwQ0Y5MDAwMDJGRTkzNEY2MjEyQzhEOUZDNjZBQUYwMDI1RTJEQjM1RQotOjEwQ0ZBMDAwOTA2MDEyQkVFNzlFNTNCMEZEMTM2NjdGQzRDRUY5QkZGQQotOjEwQ0ZCMDAwODlGMjAxM0RGQjI3NzlDMjExMjA3NTRFQzZBMzQwN0YzRgotOjEwQ0ZDMDAwRDEzRjY5NzkwRkY4MDY3MUQ2Rjg3QkVEOEQyMkMwNUZFRAotOjEwQ0ZEMDAwMkFGN0U5Nzg0RkYxRjVFQjI5MENGNTYzRTk3RjU2MzkyQgotOjEwQ0ZFMDAwNjYxQ0QzQkZGRDJGMzk3QzE0OTMzNTA2RkM1MkIxQkVBRAotOjEwQ0ZGMDAwNzYwNEY5OEI0RDM5OTlEQ0NFMTQ2MUYyODYzNDkwQzhGMQotOjEwRDAwMDAwMzA4OUMxMDVDQkRGQjM2MTM5ODdGMjVGRTM1OEQ0RkJDOAotOjEwRDAxMDAwQzM0Njk4NjcxQUIzM0Y4OERGRUY3NUJBODE1RTA4MDI4RQotOjEwRDAyMDAwMzlENzQ0REE0REI0MUQ2MjNCQTVCNzJDRDI2MzQ2QkQ1NwotOjEwRDAzMDAwRjkwMEYxMDIzRDUwODhEOTNGNDg0MTk2NDUwMEFFNUI2QQotOjEwRDA0MDAwQTg4ODRFQTYwM0YxMkNCMkIxN0Q1Mjk2RUJEMDVFMUFBMQotOjEwRDA1MDAwRjU5MjE5RTdBMzZGMjYxMTMzRTg0MzMwMzcwQTZGNjU1RAotOjEwRDA2MDAwMTk4OTI4NjA2RjJEMzc2MEJCMjI5QjE3QkYzMzkwNjZFQwotOjEwRDA3MDAwRDQ2NzlGRkFGMkRENkNFMEQzOTY4MzU0MUZCQjA4RjZBOQotOjEwRDA4MDAwNTk0NjNFNjVCMUE4RTk4RjYyMjg3RTE3RTdGOEIxNzU2OQotOjEwRDA5MDAwQTUwREY3QjlENzNFMEIxRUU2RkIxQzZGMDE3OTkxQkZCQQotOjEwRDBBMDAwQ0NBMURBNUZEMTJFRjc1QzBFMDk4RTRCRUUzNzgyRkRGNAotOjEwRDBCMDAwRTUwRTNEMjA5MTUyQThDRkM3RkFBRDJCQkQ1RkQzN0ZCRgotOjEwRDBDMDAwRDEyMEZENjcyMTFFMERERTdGMkVENjZGOEQxREI2NUYzMAotOjEwRDBEMDAwNDc0MUIxMjU3MUMwMUVGMEY2RTlENzVBMzhFNzJFNTMwMwotOjEwRDBFMDAwRjNFNThCQkFENDY1MDExN0IzREVFRjlDNDY2MTZFRkVBMwotOjEwRDBGMDAwQkVFQ0RCNEVGQkJCRjg4OEJBNUQ2REUxRUZEMUJFRUQ1NwotOjEwRDEwMDAwNkIxRjczNUUwRkVEQTlGREJEOURCRUJERjRCOEJBN0Q2QQotOjEwRDExMDAwQTBFQTY1M0JEMDcxNUY3QjM2QkYyQkNGQTlEQjY5RjdGNwotOjEwRDEyMDAwNDczQjVGM0EyRkQ3MEQ0OUYzOUE2ODMyQUFFQTY3RDY5MAotOjEwRDEzMDAwRjU5Qjk3RUJBNkE0Nzk1REU1NTFCNzBGQjYwQzNDQUYxNAotOjEwRDE0MDAwNkI0QThDNUYzOTJGRDFFRTNCOTUxN0Q2NEVCQjhFRUJEOQotOjEwRDE1MDAwNkI4RDgzQzA5REI1QkY2OUU2ODVGNTdCNkJGRDU3QjdDOQotOjEwRDE2MDAwQkI3REI5NzY5QzMwRjI4NzVBQzkzRkNFNDFFQjY3QzM4RAotOjEwRDE3MDAwMkJEMDE3QUQxNkQ0N0JCNUY4MTJFMUYyNjkwMkU4NzMzMwotOjEwRDE4MDAwRjQzOTM1RDUzRkMxNDE5Rjk1NDA3N0Y0Njk3OEZDMEY1QwotOjEwRDE5MDAwQjcwMDdGMzlGNEY0Qzg0Q0UwRUIzOTIwRTcxMDlFQ0M5RgotOjEwRDFBMDAwQUZCMEFCQzE4MzdFODUwMEE3NTMyQTRGREE4MDVGRUMxNgotOjEwRDFCMDAwREE0OUJGNEI2M0YzNEFENjlGMzIxQTk4NUQ2MTIzMDk1RgotOjEwRDFDMDAwQTQ2N0ExMkYzOTg4NEQ2MkY2MzhEMzc3MDYxQjQ3REI1OQotOjEwRDFEMDAwRkZERERDMUU5OEIzN0MyMjc5OUZEMkUxQjMwNjVCOTUxQwotOjEwRDFFMDAwMDJGNkQ5MzYwOUY1ODEzOTM1N0U1RDJBQzU4RjA5RURGQwotOjEwRDFGMDAwMTJGQThERTZEQ0Y5QkQ3MUMwNTcyRTM5RTZFRDhBRDNGRgotOjEwRDIwMDAwRjc3MzIyNzYxRjBDREJENDQzRkMxMThBNTc5OUJBMjU5OQotOjEwRDIxMDAwNjU3N0QzRTcwM0ZCQTlGRUMzQ0I0QjAwREZBQzdFMkZDMgotOjEwRDIyMDAwRDgxQjc1MzAyM0RBQ0Y0OTdENzM5OTBERjhFNjc3QURCOQotOjEwRDIzMDAwN0VFMDlCNzUzM0ZDNkZFMTdBRkY0RUI1MTJEQTZFMUUwRAotOjEwRDI0MDAwNUIzQTc5QUU3MzlBQzE0QkY1OENCQURCQkM5NUEwRjcwQgotOjEwRDI1MDAwRDQ0NUNEN0U3QzlBODg2MkExRUJBOEEzRkExODNDMzMxMgotOjEwRDI2MDAwMEQ0NDMxQzNEMzQyNENGMEFDNThDNUY0QUZCNENBODBCRQotOjEwRDI3MDAwQTE4RThFNUZEN0ZERDg1RkUxQkIwNTRBNkMxRkQzMjcxNwotOjEwRDI4MDAwMjNCOEVFQkFFRTU3RkYwNkZBREEzQzdGQzAwMEZDNjIyNAotOjEwRDI5MDAwRDQ0RTAzRDM0OTM5M0U4QzhFQUFDQkMwMEY5MkNCNjVCNgotOjEwRDJBMDAwMzE3NTc5REMyMTc1RjkyRDA3QzM4QjNENTI2NDE0RUM3RgotOjEwRDJCMDAwQ0YxRTJBRTBDMDJFMEUzRjY1NDQ3OUIxN0ZBRjExRjczMwotOjEwRDJDMDAwNjdGMUM3OTZFREUwN0Y5QUI4RDg4QTdDRkRFMzlGOUIxMwotOjEwRDJEMDAwRDExRkI1NDc4RTNFMERFNUYwRDMyOTY4NTdFRjdCN0IxNAotOjEwRDJFMDAwNEY4NTQ0Q0I4QjdFOTEyQTQzRkQwQjVGRUExMENFQjA3NQotOjEwRDJGMDAwMUMzRDdEQkZGOEU5MTFEQkQ3RDJGNzhCQzc0NTJCNkNGRQotOjEwRDMwMDAwRjRGREIzMjMwOUU5ODE3QTI1MzIwNkQ2RjdFQzNGNzRBMAotOjEwRDMxMDAwRDg3RkUyNzE2M0U0MjE4QTBGMUYzRkZGRDhEMzc3RDExMgotOjEwRDMyMDAwRjEzRjdFM0NDNzIxRDE3REI5MTRFNDAxNkQzN0UxNjE0NQotOjEwRDMzMDAwOTMwNUVDOEMwOTFGM0YzOTA0RjhDNUUyOUQ0NkQ1QkEyOAotOjEwRDM0MDAwQjYzQTI0QUUzNzc4RDMwMERGMDZGMzI3MUU1REYzMTgxNAotOjEwRDM1MDAwN0U1RjcyRkMwOEUyREIxRTdENThCNkMwRkFENzMwRkM1NwotOjEwRDM2MDAwRDJCNjdGQzRDMUU0OEQ5ODA3N0M1NzQ4RjdFN0NDMDk1MwotOjEwRDM3MDAwQ0JFRDdFNUExRUJFNTEwRERGMTExMTc1Rjk0OTA3OTM5MQotOjEwRDM4MDAwRUZCMzQ5RDJGQjQyRThBRjY4QjUwN0Y0RDRFRDA0RjUzQQotOjEwRDM5MDAwOTk5MkUzN0ZCQ0E1MTBGNDY4MjNEMzFGQjRGMzc4ODY3OQotOjEwRDNBMDAwQ0ZFM0U3M0ZBN0ZEMzBGRUEwNjNGQTMzNUQzMUE1QzdBOQotOjEwRDNCMDAwQzUxQzhGNUY5MDk4RkU0QUZGOTZFNTUwQkM1RDBDODJCRAotOjEwRDNDMDAwQkZBOEVGRkQ2MkNEM0M0NEZGNEIxQzhDNkYzOEI5NURBQwotOjEwRDNEMDAwOUQ3ODVEODdGQkYxRDFDQUZBNzFDNzg2RjU5RkNGMDdBQgotOjEwRDNFMDAwMkI5QjQ3RDRFOEZCQ0FGMzM3MkUzOTk4NDVCRjZCRDgzRgotOjEwRDNGMDAwRTU0MjNCNTFCQzZGNzhGQzI1RjdBREY0RkRDOTlEOEEzMQotOjEwRDQwMDAwMEY1NEQ3ODY5QjFGRkRGMTA0NjhGN0I4MkUwQUYzODVFOQotOjEwRDQxMDAwN0FGMDQ3OUU4Q0JFOUMwNkVERTY2RkIxOEZENTI1RUQ2OAotOjEwRDQyMDAwQzM4MjhEREYxRjUxOTNDNDBGQkYyOTNEMDhGQTZERTAwMQotOjEwRDQzMDAwRjZFRDczOTUzRDkzNzMwMEJGMzc0QTNFNjhCNjM4N0E3MAotOjEwRDQ0MDAwQzNGNUQ3ODJBRUIyNDVFNzFCNDZFQjJCMTQxMkQwOEQ0NQotOjEwRDQ1MDAwNDVEMzdCMDYzQzFCNzYzRDczMzA5QkQ2ODdGNjhFQUY1QgotOjEwRDQ2MDAwODA3NUFEOTUwM0Q3OEMwNkZDREZBNjQ3M0Y5NjE2MkUzOAotOjEwRDQ3MDAwQTdGOTdFRDNFRjYzMzJGRDdFRUQ4REQ2RkE4ODE1RkJEQQotOjEwRDQ4MDAwM0QwMEU1RkQyNTBGRTlFMkUwNjczOTRFRjkxMzdCN0ZBQQotOjEwRDQ5MDAwNDRBNjM0NzlCQ0ZCOUUzMUUwNEZEQ0EzQjdCNjAzOUVCMwotOjEwRDRBMDAwRUY0OTY1RkIxMDdFNEE4NzdDOUVDNEQ4M0EyNjcwQkY0MAotOjEwRDRCMDAwRjFFMjNGNzUxQTE0RkEzQzdFN0M1NTVBMTVBMzIzRTQxOQotOjEwRDRDMDAwMkZDMDk0OUQ3NDdERjUwRjhGNDZCQTVCQjA1MTREMjdFOAotOjEwRDREMDAwQTI5RDk4RUZDMjg4QkE1RThCMUY2OTE5QzJERjQwNEFDRAotOjEwRDRFMDAwOTJGMTRDREIyRTYzNkFEODAwNzRENUIwOUNGMkUzMjQzMQotOjEwRDRGMDAwRkRBN0UxNTg4NzAxRjQyNkVEMzhBMDAxMTJCMUFGM0EzQgotOjEwRDUwMDAwQzQ0RkUyQzVGNTlBRDk3QUE5Q0E2QUEyRUJGRDA4RkUxMgotOjEwRDUxMDAwQzVGQ0RFMTJEOEU1OEIyNDVDMjI1OTNDOTJENDc4MjlENAotOjEwRDUyMDAwM0MxNzRGMjdCNUYwREMyM0M1N0VBQ0UzRkMwQ0ZERUZDOAotOjEwRDUzMDAwNEZBNTIwM0YzQjY5OEIzRkZBNTNDMEJGMjdGMzdDNjE2NwotOjEwRDU0MDAwNUE5NUNERkQ3MjI3QkRCMTM0MDc3RDlFMDFCQTAwRkMwRQotOjEwRDU1MDAwQjNCMUYyQTI2RUNBQ0YyOTdEN0Y3Q0NBODA3Q0JEMjU4MwotOjEwRDU2MDAwRkE1MjFBRUNEN0M5QTdDREIyNENGN0U1RTM1RDE5RDU0RAotOjEwRDU3MDAwRTBDRjM5MTlGRDREMUFBQ0VCQTM2ODQ2MzVGOEU1MDY0NgotOjEwRDU4MDAwRTMzNzVBM0UyNUU0Rjk3QkYwQ0Y0QjI4N0ZDRUYwOEY2RQotOjEwRDU5MDAwQzkwMEY4QjY2NTgwMzI0RTMyMzM5QUNCOUEwN0EwN0YyNQotOjEwRDVBMDAwRjE5REQzRDA1Q0U2MDVCRUYxNURBQjBGRThGM0QyMEM4NAotOjEwRDVCMDAwMkZCRUFGOTM1ODdGRjBFN0E3RjU5RjFFQ0E3ODA4RjZGNQotOjEwRDVDMDAwRkZEMEJFRTI3NDkwRjM5RjEyNkYzQUYwREYyOUFFQzAzNQotOjEwRDVEMDAwMTUxOTk0OEY3OEFBN0JGQzNBRjBGRjREMjFCRTU2RkFCQwotOjEwRDVFMDAwQ0RGQjNBREYwRjZDMTRDRTczMDk5NTNCRjAyQzBGMUE2QwotOjEwRDVGMDAwRDA1RkQyRTZDMjc5Q0Q1MTQ4NENBMTc4M0EwN0U0RTIzNwotOjEwRDYwMDAwMTgyQzIzOUNFNzZDOTEyMkFENzQxRTczRDdBOUQ3MzlDRgotOjEwRDYxMDAwQkZEM0Q4QjdCRkY0QkY4NTg0MzI0NjIwQTAyRDQ5RUREMwotOjEwRDYyMDAwNjhGRjBCNDFGRTUxRjgyRDMyOTE1ODBBRUQ3N0QxMjM1NgotOjEwRDYzMDAwRUFFRjE2OTMxOENFQTdFMUM5RjNDNjgxRTBGODU3MEVCQQotOjEwRDY0MDAwQzcyOTJFRkY0RDE5MkFGRUE1NDdGRUI1OTgwNEFFODBDNgotOjEwRDY1MDAwNzExNzczMzkzQkNGQjgwRkU3MTFCQUYzQ0UxMTczQTkyNQotOjEwRDY2MDAwREU3MDY2Rjk1RDIzRTY2NjgwMUY5MDdENDczNjRBODg0NgotOjEwRDY3MDAwN0Y4QjZCNDgyQzhGQ0U2QjcxQjcxNDFCMEQ3QUMwNjFGQQotOjEwRDY4MDAwQjYzRkEyN0ZCMjhEQjVCQjg1RUIyOUYzMjgzQzQwRUVCNwotOjEwRDY5MDAwNEY3ODUyMEFBNzUyM0I2NjlFODk5QTYwQzAzRkY4QkFGQgotOjEwRDZBMDAwQTAzRTlEOTZFQjQ5MDdBRUE3OTFDNDcxMUVERkUzRkIzOAotOjEwRDZCMDAwMDcxMTI5ODBFNzVGMEZCMzdEOUI1MEJGNUQwNzkzM0E0OQotOjEwRDZDMDAwQjRBRjIyMURGMEVGMzNFMkMzRkRBM0ZBMDQzMTNCRkFGRAotOjEwRDZEMDAwRTMwN0MwREI5RjA0OUZGQTJERUEzMjc5MjRBOTVDMDQ5QQotOjEwRDZFMDAwRjBBNEU1MjQzODM3RUQzRTZGRjQwRjAwREYwNzdBRTU0QwotOjEwRDZGMDAwNDk2NEM0QjREMUE0OUZCRUZBMkU4N0ZGMDMzN0NDQ0ZCMAotOjEwRDcwMDAwMDJGQUJGMUZGNEI3NkNERTQxMjVGMDRCMjJGQzExMzE0OQotOjEwRDcxMDAwMTNFRERGMzI4RUE4RkMxMzU0MkZDMjcyQzc0RjVFQjlDRgotOjEwRDcyMDAwN0E2MzJFMjExQkY0NDFGNEYzQ0ZEMTA1MEU0MjQ4RUE2RgotOjEwRDczMDAwODQyQkQ4MDlGODNBNDdGNkU3MkJDODA3RkNDNTY4QTczOQotOjEwRDc0MDAwMkU2N0ZCRjFFMEQ4RTYxMUNEMDNEOEE3NjJGRTFCQTQzQgotOjEwRDc1MDAwNjg0QzA2N0VGMDNDOTNFRkE5RTUwOTdEMzA4OUJFOUVCQQotOjEwRDc2MDAwRTZGQzJEN0Q3RkZDNjAwRUUwQ0QzMzEyRkFEMzM3NDkwNQotOjEwRDc3MDAwQTQ0REEyNzBGNkQwNkQwMTM5QjA0OTdBRUYyMEM4OEQ2MgotOjEwRDc4MDAwNEQ1NzdCNDkyQkFEMkZERjNENkRDOUNCNjhFMzVBN0NFQwotOjEwRDc5MDAwMTA5RjY4REM1REE1NkJCNEUyRkE5OTlFOTlEMkJDNURERQotOjEwRDdBMDAwQTZGNTk5Qjc5NzhDMDVGQUEwRUJCRTdEM0E3REZGMkJDNQotOjEwRDdCMDAwQkVERjU5NTY4NjBGOUU1NUUxQzJBNUUwNEZERDFGNThDQQotOjEwRDdDMDAwRjIzMkQwRjU2ODBCRkFBRDMyMjlBQzUyMURGODZDMDc3NQotOjEwRDdEMDAwRkREMTQzNUEyNDY4Rjc0MDFBRUJERjI1RUI2RTlGMDYxNAotOjEwRDdFMDAwRTVCMUFDRUM1ODIxRjkxRjQyMjQ1RThGRkQ2NzFBQTkwMAotOjEwRDdGMDAwQzlFMDYwRUY0MTBGQTZEREY5Nzc2MTdEMDRGNzJENzM3NQotOjEwRDgwMDAwNjI3MzE5RjQ5NzM5ODQzRDlEODY1ODJFRjRGMzlBRDhBMwotOjEwRDgxMDAwRUZFRTJDMTlGOEVEMzIyRTM3OTdFREFBQ0E3NEQwRUYzRgotOjEwRDgyMDAwNUYzQjY5NTI4MDBGQkVFNjExN0E1Q0NDMEE3QTFDMTkwNAotOjEwRDgzMDAwNUFDMkRBNzNGOUI0QUM2QzYyMjZFMEFGMzM1RkRERUU0NgotOjEwRDg0MDAwOENERTlGM0UwRUY4RkMxQjNBOENCN0ZDQzVFQTRGQjc0NgotOjEwRDg1MDAwRDM3Njk3MUFEODNBQjRGQkY4QTcwQ0E2RDc4NUNFNDk0OQotOjEwRDg2MDAwMjQ5MjY0Qjc4NzY2OUU0NUZEMzg3NDRFNTFCRDNGQjkxQQotOjEwRDg3MDAwRDI0NDIyNDk3NjdCNDNGREZFQzlEMEFFOTFGNEFDMDY3QQotOjEwRDg4MDAwQkM2QThDQTY5MDQ4MTI5RTVGNkExOTc4NUM4MURGQTEwMQotOjEwRDg5MDAwNzMzQTEyMUU4N0U4OUIwQkZFQzVEN0Y0ODlENUYzMDBCNwotOjEwRDhBMDAwOUZGNjRBRTgwNzBBNTE3QjM4OUMzQ0FGNzMxOTI0OUNDOQotOjEwRDhCMDAwMzFEMDNDRERFQUY3NzQzREFBNzJEN0U3RDg4RTU0QzY2MgotOjEwRDhDMDAwRDM2MDlDRDNCNjc4OUE5REFGMEZEQTA5Qjk3NTI2MjIzQQotOjEwRDhEMDAwODdGNTE3NjE3QzhGQzkyRkYwQ0Y1ODk5N0UzQTBERjZFNgotOjEwRDhFMDAwNTc0OUE0NEQ0RkVERUI1N0Q0NDM3RjhFQTQ3NTlFOUVCMAotOjEwRDhGMDAwNjkyMDMxREM5NzA0OEUwQjcwMEIwRjI3NjQ3M0Y3MjdCOAotOjEwRDkwMDAwMDYyRkM4RjFFRTdEMDgzNzgxMkZDOUYwMEIyN0M3N0JBMgotOjEwRDkxMDAwNUE3QjYyMzJBNUY5Q0M0RUNCREFEMjExMTRGNUY2NzNFQwotOjEwRDkyMDAwRkEwRTVCRDc4MjdGRDFBRDkzNTVGNDlFNTJERTRCRkY0QQotOjEwRDkzMDAwQzg2RTFFODBFODEzRkEyRjUzRDc0MjlDQjlCN0NDREJEMAotOjEwRDk0MDAwRjc3RTFGNEU5QjAyRjVFNUE1RUNGQkMyQ0VGNEZGNTgxNwotOjEwRDk1MDAwMDUzMjg4NzQzMEJENUY0OUU0MDc1MjkzQ0EyNjRERDkxOQotOjEwRDk2MDAwNEFDQkEzOTNDQTM2NERCRDUzNTNFRkQxOTQ3MzU5RkJBMQotOjEwRDk3MDAwOTNBOUIxN0M5RDhGREFCOTlEMTk1MzE0Q0E3RjRFNjY2NQotOjEwRDk4MDAwQzU2NjUxNEI5NEFDRDNCOUE3RDREMDcyNjMzOTkzQUI2RAotOjEwRDk5MDAwNERERDkyMEY3RDZFMUM3RTREM0VBNkVGNTk3RDcxQzMwRAotOjEwRDlBMDAwOUM1MjgwNDNDRjQxRTAwRjBENUQ5MjREQTI3NDYwOEQ3QgotOjEwRDlCMDAwRUU4QTYxMTlCRUYzMjY3RDE3OTVGMEJCODZFODdCRjhFOQotOjEwRDlDMDAwRERBMEZEOTdDODQ4RTc2QjRCOEVCMjc2RDEwRjUxN0UzNAotOjEwRDlEMDAwQUY2RUFCQzNCOEI4ODhGQkVBNDhDMDlGMjNGNUM1N0RERQotOjEwRDlFMDAwMDU5RjNDOURFNTdGNDk2Njc4NkQ0QkI2ODM0MkQwNkZCRAotOjEwRDlGMDAwOTJCRjQ1QjQ3RjY3NzRGN0VGNDEzRDQ4NTlGNjQ5MEIzNAotOjEwREEwMDAwRThBMTdGNkFGQzcwM0NFODY1RUY3MDc5QjA0MThBOENEMAotOjEwREExMDAwODA3MTM3OTNFMDA4OTA3N0RGNkQxQ0I2NEZBNkVEREU3RQotOjEwREEyMDAwRDVDN0I3NDI2QzZCNzFFN0E4MjkwQTZERjc2RTZBM0NERgotOjEwREEzMDAwNEZBMjNDQTZEMTU5ODFGMDdDRDcxNURGMEFGMDdDQzlGMgotOjEwREE0MDAwNzkzMTJCRTdDNUYzNjQ1QTVFRDI1OUM3REEwRjhCNkY3MQotOjEwREE1MDAwODVGMjI2RTdCNUFDM0MzQTlFQTdCMzgxODk3MzFEQzIxNwotOjEwREE2MDAwN0Y4NzZENjA3QTlFRUQ2NDdDNDRDQ0FGQUJDOEZGNUQ3MAotOjEwREE3MDAwMjdBQ0E3ODFDOTkxQUQ1NDZGMzQ1MTdFMzk2QkQxNDcyMgotOjEwREE4MDAwNEZFREEwNzA5OEY1QzMxNEU0NjMzQjRFNUUzRjg1RTkwQgotOjEwREE5MDAwRDVFMTgwNTIwMTdFNTNGNjg3NzIwRUY5QjU4MjdBNDYzRgotOjEwREFBMDAwMTZDODM2NDdERjdFQTRFNkY3Nzg1MTBFOEM2Q0RFMDU4QgotOjEwREFCMDAwRkE0MkU2QUM1Mjk0MDNBNTE5RkUwMzMwQUU3OENFQ0IwMQotOjEwREFDMDAwQTY0RjBBQ0YwMzRFMUJFM0NCM0ExOUUzQzg5OTc3QTVCQgotOjEwREFEMDAwQTI1RTc1QkY5OUFEODdEMjBERUVBRjk1RUZDNzFENEUxMwotOjEwREFFMDAwMjZCN0VFNzAzMkJCRUQ4NjhDNDlEOENGREI5MjdGOTNBMAotOjEwREFGMDAwODlDMkZENkQzRDA5OUI4MUNGMkVCNEEwMUU3Q0VCNzZDMwotOjEwREIwMDAwQ0EzNzI4REZFRUU0RjNFRTVDOUYxNTgxMzhGOEFEMTJEQQotOjEwREIxMDAwMDkwMDVGMTFGQ0EzRDNFRUNGNzIyNEQ5MTM5RDY1QjQyNQotOjEwREIyMDAwNkNFREIzMUYzQkE3RjlCMzJDNEU3OEJBNjU4ODk3MDgwNAotOjEwREIzMDAwQkVENDU5QzhCRTEzRjIyOEIzOTU4RDkzNzlGRjg4ODc1OAotOjEwREI0MDAwNjAxRDI5MEFGM0ZCQ0M5QjU5RkM1MDBCQ0FGNUU5QjhDMAotOjEwREI1MDAwN0VFMkY3Njc4MUZGRTBEOEMyMjIxOUZDNDE2MjdGREVENgotOjEwREI2MDAwMkFGMkFGODdGNURDQzJGREU5NjI5RkM0N0UxRTcwMzJFNwotOjEwREI3MDAwN0I3ODhFOEVFQTA1NzRCREZCNUM0MTVDM0ZENTEzQzY5NQotOjEwREI4MDAwNzBCRjEzRUEwOTA3NDA0NjI3QzE5NzI4RjFGMUYwRkU1QwotOjEwREI5MDAwRkYyMzM4M0RGQjZEQzBBOTcxMzlFNTE3RjIwNUYwMEI4NQotOjEwREJBMDAwMEVCRjBENTI0QzlGQzlGODA1REFDMUYwMUVFNENFQTY5NwotOjEwREJCMDAwOENFMDdGMzg5M0YyNTI2NkRERDU4ODdBQTE5ODU3Q0FGNwotOjEwREJDMDAwMURDRkQ1REU0NEZBRDM5OTU2NkYzQjBDRkJFNUVBRDM2MwotOjEwREJEMDAwMkY3REMyN0ZDOEM3NzlGNzZEMTNDNjBCREUzNTQ0OTEyMAotOjEwREJFMDAwNkZCRTRCRUQ5ODE2RTAyRjNDREU1REYxQzNDNUFGODFGMwotOjEwREJGMDAwMUQyN0ZBOURFMEQyNjE3RjZCMjQ3RjE2QUM2RjBEREQ4RgotOjEwREMwMDAwNzcxM0NDN0Y5QTAxRjU3ODIxNTczQkVEOTE0RDkwNkZCQQotOjEwREMxMDAwRDA3OTQzMkVFNjFCOUMyMTJDQUYyM0JDM0MwNURCNUQ1OQotOjEwREMyMDAwMkExRjI1RTA4RjRDNUM2MkMzNzgzM0M1MTNBQ0VGQkM3MAotOjEwREMzMDAwQjkxOEYzM0UyODNFODRDRDUwNEZGMTA5RjJFMzNBQ0JCOAotOjEwREM0MDAwRTg4MkEwQkY5QjQ3NjIzREQ4Qjk2ODlGREU2Q0MyRkVFOAotOjEwREM1MDAwMDZDMDEzRTZERjFEQ0VGMjFBM0EwQjM5MUUyRTJDNDJGNwotOjEwREM2MDAwM0M3NEI3MzIzRjIyNTFGQzYzQTYyNUM5NzlCNzhCRjFDQQotOjEwREM3MDAwODE5NEYyRjgzM0ZGMDUzOEJGQ0U4QzdBMjlDODU4OENDRQotOjEwREM4MDAwQzU3NDY0NjI3Rjc0RkZDRjNCNTk3QzBCRjE2Q0VFOEZERgotOjEwREM5MDAwNTM3OTFFOTlBRjAyRTA3QTZGMkFDM0NCMkQ2NjE2MjdGRgotOjEwRENBMDAwREE0MkY1NjBFNDhCMUM3RjQ1RkU1QTkwRUI3OUYxN0FGRAotOjEwRENCMDAwMzkwREY0ODU1NDU3QUY5RkMwMEY3NjNCRkFBOTY5RkQyMwotOjEwRENDMDAwRUNCOEY0MUVEODVEQjNDM0JBOTgxMUVDQThGNjQ5RkVCRgotOjEwRENEMDAwNzg5MjFEMDI3RjEwNjdCQjlERjM1NUIyOTFBMEZGRUVCNQotOjEwRENFMDAwNzZGODJFMERGQUI3QTQ0MTVDRjE3NkY4MUVGQ0E0MkI1MQotOjEwRENGMDAwMjZBOUUyNjcwNTMwRTZGOEJFRjk2OUY5N0U4MTk4NTdGMgotOjEwREQwMDAwQzc4M0ZFRTQ3MTQ0RkZEQUZFQTgxREU5NzVCOTEwQ0VBMQotOjEwREQxMDAwQjE3NEIwMDc1QTc0Qjg4RkRBNzlDNjM3MzI3RjczN0MyMgotOjEwREQyMDAwNjMwMUUyOURFODZGQjA3OUZFNTk5N0Y4QkU0NEU1RTBFMwotOjEwREQzMDAwRkM4OUNDQkUxNkY2Q0IzQzZFRkY5MjE1NkFGQjBDRkM0MAotOjEwREQ0MDAwMjNCRDY1NURGRkIyRDZERTgzQjhCOEJBM0REMzVCNTI2MgotOjEwREQ1MDAwNEExMzA2OEM5Nzc4MjVENUZDMDVCQzA2ODNDM0U0NkY2RgotOjEwREQ2MDAwMDgzNzIxRjcxRTM0NTM3RUVBMDAzMzVBNDJCQ0RENzg2RgotOjEwREQ3MDAwNjcwQUNBMzFBNzIxMzIwMkYwNkE5QUNCOEJGRDZFODYwMAotOjEwREQ4MDAwRkMxNDk0QUJDQ0VFRkRFQzM1RTFBRjUwREJCQjIxNEI4QQotOjEwREQ5MDAwNjIxQkMwMkI2NDYxNzQ3NDdBNkYyQUQyMDExOTFBOUZCNgotOjEwRERBMDAwMDVGOTVENjdGNjE4MDlFMDZGOTMxNDJGMDZCQTNFMkQ0QQotOjEwRERCMDAwRjlFQkIwNUQ0QjhBMTdFOEU5N0RCOTA3RTExRDAyMDg3MAotOjEwRERDMDAwRDI3OTg1QzJGRjgzNzk0NUExMkVCNUZEN0I5QUZFNTc5NgotOjEwREREMDAwNEZGMUZEQjQxQ0FGODA3RTA0M0YwMEZBNDdCREE4OUUwMgotOjEwRERFMDAwQzU1QjlBNjQxMjA2QkJFQTUyNzlGNjQyOTRGRjM3NjcyNAotOjEwRERGMDAwOTM4N0YwRkQ3QkM1NjA0NzA5M0U0RkRCMUQ5MDFDMENFRgotOjEwREUwMDAwNkQ4MDVFMUEzOEZDOUFFNEEzRDhBRTAxRjI4MzAwOEVDRQotOjEwREUxMDAwNjA1RjgxNUYwQjJBOTNGQ0IxNERFQjNFQzZGQ0E0QTY2QwotOjEwREUyMDAwRERFQTdENkVFOEMzMDNFOUJDMDRERjI1RTEwNUQyNzFCQwotOjEwREUzMDAwOThGMzAxQzJGQzE0MzUyQzVFOUNDQUNCMjlCNTNEOThFMQotOjEwREU0MDAwQUYxNEUyN0UwQkQ3RkVGODY0RTAyN0E5RTU1MTMyOUJDMAotOjEwREU1MDAwM0U0M0M3OTk5RTMxQTE3QkZCNEI2MDBGREI2QjdCRjI4RQotOjEwREU2MDAwMDBGRDQzRENBRjI3RjY1OUNDRjM5MkVFRjVFOEE3MTA5RQotOjEwREU3MDAwRkE0OTkyOUQzOTYyQkFDQTVGQjAwQUJGMDNCQjE1QzZBMAotOjEwREU4MDAwOEJDM0FCMkNEODdFMjZENzM2NzBCOTQ2RTUxRkYyRDdBOAotOjEwREU5MDAwNzkxREMzNTFGRTgxN0MwMkJFMjRFQzVFRTA1M0MwMUY5RAotOjEwREVBMDAwNEVCOEFBQjcwMDlEQjZCOEFCMUY3NEI5RDg3OEE4Q0Y0MgotOjEwREVCMDAwODNCMTc0QzlFMEZFMzgwMTFGRDEwRUVDREZBRkYyQjdCOQotOjEwREVDMDAwM0RDNkYxRDU2OUUwN0M5NzMwRkZEQUQyNTc1REMyQkYxRAotOjEwREVEMDAwODY3MUI0QTU5MjM3MTNGMEY1MDM1RDEwRkQ2ODBCNDgwOQotOjEwREVFMDAwMThGRDNCMEJDMTdGNDU5RjBEOUNDRUU3NzNCRkQwN0NENwotOjEwREVGMDAwRUUwRjAyRkY2QzcyQkMwRkZDQTRDOUU1NDU4NEUxMkY1NAotOjEwREYwMDAwRDk2OUVDQ0I4MzAxRkY0RDBEODlBNUQyRkUxQUMxQkZBMwotOjEwREYxMDAwMDRDRkE4RkFCQjI2OTI2MDc4REY3NURFQTg4QTI3NzY0MAotOjEwREYyMDAwQjI3NURGQ0VGN0RGNUUxM0QxMDE3RkQ4NjQ2NjdFMjU0MAotOjEwREYzMDAwQzEzNzI2QUM2MEZFQTdGNEIxRkVDMjdCMDBDRjVGRDUyRgotOjEwREY0MDAwQTM1RkUyQkZGOUJFMDkzODRENzE1NTZGNzdEMUY2MTY2MAotOjEwREY1MDAwQjBEM0EwREQzRDQ2RTQ5N0M3QTgxQ0RFQzVGRDIxRDNBNAotOjEwREY2MDAwQzFGRTVDMTkxQzAxNzlEQzQ0QjFFNTI3REJBN0UyQjlFRAotOjEwREY3MDAwNzY4RkI5MUVGMEU3NEQ5N0FDQzJBRkQ1MkU5Njc3ODM1QQotOjEwREY4MDAwN0UyMkU0QzcyOUE4NkY1M0I2MzEwNkYwQUJBMjQ4Qzg3OQotOjEwREY5MDAwNDMzMjA2RkM1M0VGRTk5OTNGQjdFOTQ2NkIxMEZBOEIyMQotOjEwREZBMDAwQ0I4Q0NGRkM5OUYzQjMzRkJCNThERUU1OUY3QkU1MTVFNwotOjEwREZCMDAwQjdFRjM4RkU4ODM4MURGODZCOTJGREU0MUZGNEI2NUZBQQotOjEwREZDMDAwQ0ZGMzYzMDlBRTc3QzM0MjlFODdERDhCQzczMkYyQTNERQotOjEwREZEMDAwOTREMjAwRjJERDRCRTU2QUU0NDc4OTEzNTYyRkMwQTVDMQotOjEwREZFMDAwRjZFMzg2ODVCMDhFNEY2NzVBMDhDNENCRTY3MkJGRUQ2NAotOjEwREZGMDAwNTk0OEI4NzNGNUY5NjlCRjJFOEU1NUJCNzYwNEYyNDlCRQotOjEwRTAwMDAwRDFGRTZGMzAyNzU3N0Y3RkVGMUVDRUM3RjYxMDM2REY2OQotOjEwRTAxMDAwNzA5QjkxRjlEN0Y5RkNGNzFDMUYxOTAxM0NBNjdBNkQ4QQotOjEwRTAyMDAwMThGODVDNjI5Nzk5QzkzQkFBODcwMjdGRERCMzdCNzhCOQotOjEwRTAzMDAwMDRENkYzOUU5RUU5MEI2MUNBN0ZEOUY3QzE0REUwMDc3NAotOjEwRTA0MDAwRDlGMzRCOTcwRkYyNzM0MjhCM0UxQTAzRkFFMzlFRTMyOAotOjEwRTA1MDAwM0ZGRkQ1NkZFMUZENUVBMzBGRUNCRDNERENCRkRFNjA5MQotOjEwRTA2MDAwODgxNUEzQkVDQ0YzMTIxQkQyNjJDNUUwRjc3OTgxRUYwRAotOjEwRTA3MDAwNTc4Mzg1OTY0QjQxNzkwODNBRENBRUJFMzgxODdDMDc0OQotOjEwRTA4MDAwRUY4RjQ2OTg1RTdFOTQzMDNDMDhBRjYzRjE0QTBBREYxQQotOjEwRTA5MDAwMkM5ODQ3NjI0RDI2QzZEMTYwNURCMDBGRUZFRjFEOEQwNQotOjEwRTBBMDAwRjNERUEwRTdFREVGNjNGQURCNTE1RTNFRkE3QzE5RTZBMgotOjEwRTBCMDAwRTk5RDA5MTgzMEFGMzY3NDNGRDMxN0U3QzhERTZEQ0I0MgotOjEwRTBDMDAwODE1N0JFOTg4MkZFQzI3OTlENkY2MDVDMjNGNEUzMDVBMAotOjEwRTBEMDAwNTNBMTNFQjQ2OEM1NzVFNDJCRkNGRDIwNTc5MkZERDRENgotOjEwRTBFMDAwQTc0OTIyMUZFREUwRkFBMjY4OEM4RTdCQkE3Qjg0OEY1MQotOjEwRTBGMDAwODVFRDNDMTgyNDZBRTJGOTlCQzcyODdDNjFERTg5QkQ2NgotOjEwRTEwMDAwN0E4NEZGODVGNjBGRUIwNUJCMTRFNDFCRkFCNTkzRTNBNQotOjEwRTExMDAwMkEyODBGRDQ3MTk2QUYyQjlGRDZDNzhCRUZBNEUzQUZGRAotOjEwRTEyMDAwNzAwNDZCREM0OTdBNjJFOEM1MkNFNDc3RUZERkY3Nzk5RAotOjEwRTEzMDAwM0VFQTEzMUQyQzJFNzA0Q0VGOUYwNTc0NjJBRjg5MTlCNwotOjEwRTE0MDAwNjYyN0U5NUZCN0I5QjlERDYxRTQ3QTIzRTU4M0M5NzQ2RAotOjEwRTE1MDAwMkZFQTJCQUFENTc0MjY5RUI3QkExOUJEQTVGMjM4N0UzMAotOjEwRTE2MDAwRkY3QTkxQkY3QUJEMTFFNDI3NzMyOTQxQkY1RUVDQjdGNgotOjEwRTE3MDAwODBDN0Q3MjYxQzRGRUM4MzdDQTg4NjY4MTlDNkVGMEE5NwotOjEwRTE4MDAwNTZDNDkwMkUyOUJDNjNBMEZGMUZEQjk0Q0FGODA5NUQxQQotOjEwRTE5MDAwMjZGNDMzQkY5MkEwREUzQTVGQzdGMjEyRTYxQkE5MUUzNwotOjEwRTFBMDAwQ0NFNDM4QjZGRjYwNTMyNkMyQTE2MjE1RDNGRjEyQ0Y2QwotOjEwRTFCMDAwNDhDODE3NDU5Q0IxOEVCMEVGOUY2QjdCMkZBQ0EzRUQ4OQotOjEwRTFDMDAwRUI3NjRBNjU5NEI1OTJCQUI2MkFDQzVCNThCNEE1MTBFMgotOjEwRTFEMDAwRjc3RjAyRTdCRjczOENGRUUyNEQ4MDZGQ0ZBNTIyQkVCMgotOjEwRTFFMDAwRDFGMTUwREY2RTgwRENBQ0IxQzg5NzBDMjAwRkVCNzcxQgotOjEwRTFGMDAwNEE2NDJENDk4RThCNkFGMDIwQTI4RUFCNEM4ODMyRkU4OQotOjEwRTIwMDAwMEQ3MjgzMjRFOTY5NDIwRTgxQkMyMDFBRkQ1MThEMTdERAotOjEwRTIxMDAwNjE5NURDNkJFNzcwMTVGQzFGMjFGNjE1NzI5MEVBRDE1MQotOjEwRTIyMDAwNkI4MDhFMkJBQTE5QkQyNTc2NDkwOEU3NDZEMkNDRTIzMQotOjEwRTIzMDAwNDA1QzBFRjVDRTg3Q0JCMTBGNzQ0QzZFQ0UzN0FFQzdCNwotOjEwRTI0MDAwRTczNjc3MjE4RUJCMDhFMjI1RThGRjRGMTg4MDJGMEVCNgotOjEwRTI1MDAwODYxN0RCMDZDMTBCODEwRjNGRTNFQjY4Mzg0RTYyOTdGMAotOjEwRTI2MDAwRDNGMTFBNTY5MDU4RTMxOEY2NEMxRDgzNzI5OUM5Njc3QQotOjEwRTI3MDAwMTM5M0NGRjBCNDVDODA5Q0Q2Q0E2N0FEM0NENkNBRTE5QwotOjEwRTI4MDAwNEMwMzkzQjcwMjBGOTJGREYyQTA4RjRDNTgxMUQxMzE3RAotOjEwRTI5MDAwRkY2QkFFMERGMkYxQzRCRURDOTBFMTdGMjI3QjdDOUY3MAotOjEwRTJBMDAwQkUxNTNBNjIzMjc5MkY4MjcyODAxNDU5QzFBRjU0NTUyQgotOjEwRTJCMDAwOTE0QkQ3MUZBMkZDMUJFODJFODVDMjY5M0I3REJGOTUwMQotOjEwRTJDMDAwRUJFNTQzNzJCRDA4MUYwRkNGQkJEMTJCMDE1MjY2ODUxMgotOjEwRTJEMDAwN0RFQTQxM0IzQUUxMjI2OEQ3MEFGODZFNERBNURGOEQxMQotOjEwRTJFMDAwODVFRjE4M0RGNjdFNkYyMjZEOTZBNEVGQUJGNzk4NTEzRgotOjEwRTJGMDAwOUU5QzdEM0UxNUYzNDRBODdDMjhCMEQzRkVEQ0VGNTBGNQotOjEwRTMwMDAwRkQ5Qzk2NEZFRjQ5NDVGOTdFOUFGMzdCQTdGMDU3OTAxNQotOjEwRTMxMDAwRDVEOERGOUJCMENGMkVDMEJBRUExQ0YwRkIxMjY5NEFGOQotOjEwRTMyMDAwMEVCMDQ4QTEzNzM2REEwN0YzRDNGM0ZBQzI5RTFCMTlCMQotOjEwRTMzMDAwOUUxOTUxQ0U5RUI1Qzc3RjAwNjUzQTFGQ0NFQkZEMEZFRAotOjEwRTM0MDAwQkVFRkExREQxM0NCRUU4Mjc4N0VDMEVBNjM1MDBEOTY1RQotOjEwRTM1MDAwODFERTYwRDQyREJCMTFGQzQxOTM3NTJCMTI3N0QyNzVGMQotOjEwRTM2MDAwMzRFNjU5MzE1RkI4QTZFMDhGN0ZCODk5OTY0RkVDRDY2NgotOjEwRTM3MDAwMTMyM0VDRkI4RUVCRDM2M0YwOTlFMkY3MEMyNDlGMTc4OQotOjEwRTM4MDAwNDZGNEFBRjM2ODhCNzdBQUNCOEQ1MTc1Mzk0NDkyQ0VBNwotOjEwRTM5MDAwQUI1MTEwMkNGRjYzRDkxNTA3OTJGMEU0MzM3N0FBMTMyMQotOjEwRTNBMDAwRjdERjRCN0M5MEVGNEM3NEI3QTUwNzA3RTA5N0UyRjlENQotOjEwRTNCMDAwRjk0QURGMTUwN0Y0OTgyRkY2ODUxQkU5QzA2QjAwQkRGRAotOjEwRTNDMDAwNjYzNkUwQzMwMERGRUQ3MjMzQkZBOEQxRDg3QzFDRjIwMwotOjEwRTNEMDAwQ0U4RDJGMTg3RDJERjRBQjgzRUVBMDJFRDMwNUY2NEFGQgotOjEwRTNFMDAwRTIyMEVDQTdCMUUwRTQxODkwODNENTA1N0ZDNzM4RDhDOAotOjEwRTNGMDAwRDlCQjg5MEZFMDczRDY1Qzg1RkFDREQ5NEQ2NjJGRDg4RAotOjEwRTQwMDAwNjU5REY5NTZFNkFGNzg1MThBNDg0QzdGOUYzQUJFMDIyNwotOjEwRTQxMDAwRTI5RUI4MDYxMkRBNzhGNTA5NzY0ODgyOTg2NERDNUZFNQotOjEwRTQyMDAwNkFCRDc4ODBDRkY4RDE5RUZBNjA5QUM1QjY4QTdFNTdDOQotOjEwRTQzMDAwQkY5MUM5REIwNkQyOTMwNjdDQTAzNjkzRTE1RDQ4RjcxNQotOjEwRTQ0MDAwQTRDMTQ0RkY1OUQ4RTYxRkQxNDJFN0JCMzg2MEMxRjNFRAotOjEwRTQ1MDAwMzFDQTk3NEEwMEYwRUI1RUU4MzI0OUZGMkZDODY0NzI3OAotOjEwRTQ2MDAwQTZEMTE0Mzc1NEMxRjg3RjlGNUJFQjJBRUFGMzZGMTlFQQotOjEwRTQ3MDAwRjRDQ0JGQTU3NDk1QzU3MkU4QTcwQjk2Q0Y0MTNCQTcxNgotOjEwRTQ4MDAwMzc4RUJDODlFNTI1MkRCOEIzMEVERkJGQjRDOTg4RUI0NAotOjEwRTQ5MDAwRkI2MEFGODQ3OEZFQzE1NkI2RkUwNTFCQ0Q1RUM4OUZGQgotOjEwRTRBMDAwQkVEMkNFRUNEOTA1RjRCQjgxRDc3RkQ1MDk1OEQ3ODcyQQotOjEwRTRCMDAwNUJFRUYwODE3RkZFNDNDMkM2MDlEQjk4MUZFQTQzMUI3NwotOjEwRTRDMDAwOEI3NzQzNUJFOEU3QzNERDQzNTA4RkE5REZCODcwMkE0MQotOjEwRTREMDAwRTY4QjZERDVGOTQwOEYyMDdCNTNEMUJGQjM2MEVCRjc0RQotOjEwRTRFMDAwN0Y3QjA5Rjg4RkE2REY1MjBFNzBCOEQyQkVDQzBERkUyRQotOjEwRTRGMDAwMTJEQTJFMTA2MTdBMzFDQkMzNzU1NDNFMEE3NDc4RTU3NgotOjEwRTUwMDAwOTcxMzdCQUUwNDdENjkyQkE1OTM0Mjk2RTcwRTdBRkFBQQotOjEwRTUxMDAwODFBRDU3QTE1RUJBNjA5QUM1MEVFQkYyNkVEOTMxMTk4MgotOjEwRTUyMDAwRTRDNzg3RDNCMjY1NUNDRjUzMTJCMTAxMUNFQ0NCRERERAotOjEwRTUzMDAwRjA3RTgxQTQwNDA2QzJBNzc3RERDQ0NGNTY1NTYwRjVFNgotOjEwRTU0MDAwQzVFMEJCREZFQjEwNEYyODVEREQwOEYyQjM3MUFCMUVGOQotOjEwRTU1MDAwRjVERTAzRDNERkZFQzNDRENFM0VCQTVBQTBFQkI4NzFEMQotOjEwRTU2MDAwNDI5MkRFMTNEQTcyQURDMDEzMTJBQjAwN0I4QUMxNDQ1MwotOjEwRTU3MDAwNEI1RkM2ODIxNUM1MzAxRjJEOUQyRDU4RDU1Q0NDRTI1MgotOjEwRTU4MDAwNTVERjhDREVDODE2NEE2RkEzQThCQ0NFOTQ5ODVGRTMxMwotOjEwRTU5MDAwQzJFOUFEM0VGMzFCRDAxQkM5NzVBOEVDQThGRTdDMkRDQgotOjEwRTVBMDAwOEM3MDE0RkU3RTkzOEZGODc3NTgzMUFFRUI5NzI4REY4RQotOjEwRTVCMDAwNUQ5RkE5NjAzRkVCMzNEOUI5MjBFNTZGNEI3N0JFNEUyNQotOjEwRTVDMDAwRTFFM0NFMENGRTMwMTNGNDFGRTIyRjAzM0NGMjI2NkM4NQotOjEwRTVEMDAwRDU3MEU2QzdDQUY1MzhCMjg1RTlDREEwREZDMzdFNkYzNgotOjEwRTVFMDAwNzA5MTQ3RDcyNkY5MURFRUNCNjRGNjExQTVGRjU2RThDQQotOjEwRTVGMDAwRTdGNDVCN0YzRjA4RkJEMzk0N0Y3MjBDOEI3N0ZFMDVCQgotOjEwRTYwMDAwRTM4M0Q2NkUxNjU3QjZGQTEyMTgzN0Q3M0IwMzg4N0ZDNgotOjEwRTYxMDAwODJBRjg3N0M0Q0VFNjhENzc1Mzg5M0Q5NzMyMTY3MDIzNwotOjEwRTYyMDAwRkJGOTg1ODdEMUExRjBCNzZGNUU2RTQxM0ZFOTY2Njc2MAotOjEwRTYzMDAwQzRDQ0ZDMEE2MTAyNzI2OTZBQTU4RUM1QzVCODlFNzUxNAotOjEwRTY0MDAwMkRGNzNGOUFDQTVGMjIxMDBGMjM5N0IxRkNBREQ3Q0JBRAotOjEwRTY1MDAwNUY1MjMyNjhGOUI3OTU5MzdDNzg2RUFFRkNFMUY2MjI5MgotOjEwRTY2MDAwNThGNzY1N0E1RTNGMjQwQ0VCRkU0RjdGMTVENjJGRjVFOQotOjEwRTY3MDAwRThCQzQwRDc1M0NCNTkxRTIyQTk0RjQzN0ZDOUVCRTVENQotOjEwRTY4MDAwRUYzQkU3MjZDRDNGNDA0QzVFMkJDNTkzRTlENEM4NDkwQwotOjEwRTY5MDAwQ0U5QkJCRUUzMkIzRDc5QTg0NUY5Rjc2NDhCNTRDREZGMgotOjEwRTZBMDAwRjVBNkNGMThDREZDMjEyODg3Q0JENUYwNThFQTMxRTA2QwotOjEwRTZCMDAwQjgyREVFQUFBNzAxQ0U1NzVFQzFGNkUzQTNBNzhDMTEzMQotOjEwRTZDMDAwRTA3RjFGRjE3MzI4NUFGOEVEQ0RFNDc2RTg2RDI1QUFCNgotOjEwRTZEMDAwRjhCQ0QzMTBDRDA3RjlGOEIxQTRGRTZFNTFCQjBFRTMyMAotOjEwRTZFMDAwRTMwQkRCMjUxMkExRTM3REY0Rjg3M0Y5QzBDNzRGRUMwRgotOjEwRTZGMDAwNzgyRTdGNzZEMjdDQjRERjg5RTcyQjk5MUM1RkI5MUYxNwotOjEwRTcwMDAwNTBFQkQ3MURDQzlGMkJEQTlERDk0ODgyQTYyMTdERURGOQotOjEwRTcxMDAwQ0ZENDdGODFGRURDRDlERERDMUZFQ0Y3MEY3NTgyMURDNQotOjEwRTcyMDAwQzREQjZCRkI0QjcwRkM5MEJBMjRGNDc3MDg3RkU2RDExNgotOjEwRTczMDAwNDMwRjQzRTRBNDc3RkZDQ0REODU3MjcyREVBMTc4NEVFRgotOjEwRTc0MDAwRTBGQjc2M0RFQzFCNUQ4QUI5OUQ5NTA3REJBRkMxRTgyOAotOjEwRTc1MDAwNzExREM4OUZGMTdERkI3NkI0N0Q0ODNBQzBEMUQwNjQ2RAotOjEwRTc2MDAwNTUwODNCMEY1NjAyN0FGQTU2NjJGMTAxM0QxOUIyM0Q0NwotOjEwRTc3MDAwNTZFMDVGQ0I0RDY5NjNFMDlDQ0ZFNzY2RjY3NDVBRThEQwotOjEwRTc4MDAwOTNFQTZCNzlEOTI1RjhERDFENzIwMEYzREIzRTk3M0JFOAotOjEwRTc5MDAwRjAzQ0UwMURCQTY2Q0M5QkZFOENDQkJCNUM1QjYwRDdDQgotOjEwRTdBMDAwN0NCNDRGQTI5ODQ3NEREQUQ1RjA3NUI3MzJGOTkxQThFRAotOjEwRTdCMDAwMzNBMDlDMTI3MEJFNzRGNjBGRDA0RTFENjA3RjM2MDJERgotOjEwRTdDMDAwREU2NDU3QjI3N0E1OUU0MkFFMkZDNzMxNEU2MEFFMjRBRAotOjEwRTdEMDAwMzZCMEU3NUIyRjA5RTM3Q0M0RkU4NDU4NzMyMjc1NEI4NwotOjEwRTdFMDAwQTgyNzQzN0U0QThBMDNFM0ExNjFGRTI0NTYwN0U5OERFOAotOjEwRTdGMDAwMEZBNDcwQkI5NjY4RTIwMTk0NkQ4NUExOUQ5ODI3QjAyNwotOjEwRTgwMDAwMzFDODczQjlERjFFRUQyODJFQzc3ODJBRUE5RkQwMkZCMgotOjEwRTgxMDAwQkM5RjVEQUFBMDNGMUREQTE5QzY3RTNEQkVGNUUyMjU2QwotOjEwRTgyMDAwQ0YxNzlDMkFERUQ3NUIwNjhDM0Y0Qzg1NzMzN0I0N0RBRgotOjEwRTgzMDAwMUU5NTgzQTBGRjExOUY1RTc1RUU2NjBCRDU5QkMxMUVEMgotOjEwRTg0MDAwMTNGMTVEOUQxQzJERjNBMDFERDIxMzA3RkY4OEExQzJGQgotOjEwRTg1MDAwRTQwNUI5OUFBMjhCOTZDMEJFNjlFM0JEQjQ1RDIxQ0IzNQotOjEwRTg2MDAwMzNDOEI1ODM1QzExRTc2QTlBOTY0RjBDNDBERTdBQUZFNQotOjEwRTg3MDAwOUVCMTk3RDk0NzRENzc1NkUxRkI4OUREQ0M3RjFFNkE2MwotOjEwRTg4MDAwMzdFMkI5QzA1MDk3ODRGMUFBQTY4MDIxNjI0MjNGODY0MAotOjEwRTg5MDAwQjcwNUY2MkI0Q0Y1MzBCMDFCM0JFRDJDQ0ZBOUYzNkEzNgotOjEwRThBMDAwOUIyRjRDOTJGREQ3RjE2RDc3QTFGRkRBOEE3MUJBN0Y2OQotOjEwRThCMDAwMzY3RTc5MjY5NTAyRTBBMkE0Rjg1NEJBODlDOTExRUVGMQotOjEwRThDMDAwREY3NjczN0MxMkZCMkZFODU5QzQzQjUzNEIwMzg1QTBDMgotOjEwRThEMDAwNzFFRjc2REZGRTFCQ0JGODZGOTAxNzQyQzZERUY3OTUxRgotOjEwRThFMDAwNzkyMTY0RUZCNTcwQUVDRDA0REEzQ0FGODc2OTUxQjlEOAotOjEwRThGMDAwRDk3QjRFQ0VFQ0M1Qjg1NjZGM0REQzZGNjBFQTkyRjgxRQotOjEwRTkwMDAwRjc4QkFFOURBNDYwMUUyODJGNTdBRTgzQkNFRUZCQ0RDNwotOjEwRTkxMDAwNDQzNTVFRjJGQzE0NERGRjdBREFCRkQ1Q0JEQjg3NkY0RQotOjEwRTkyMDAwQkU2NkQyNTA4Q0VGRjI3MkQ3OEZGQzc0N0VGN0VCRDVCNwotOjEwRTkzMDAwRkQyMTBBOEE3MzdEQTZCRUYxMkE3MkU0RkJENjVERDY1QwotOjEwRTk0MDAwMjdCRkE5M0M1RkU2NzFGNUM5RjE3QkRGOUVEQTcxOTFDMwotOjEwRTk1MDAwMTdFOEVCMzNDQ0FCMTVGMjM4RTQ2NDc5MjI1QUJFQjUzNAotOjEwRTk2MDAwRDIyMzA5RkQ3NzMyODhEOEQ1MzNFQkYwM0U4MERFRjgyQwotOjEwRTk3MDAwNkVGNzM0M0ZEQzhCMjBFMkJCQTExNTAxQ0NBRjA1Rjk2QgotOjEwRTk4MDAwRUY0MUY5N0ZGMjgzN0QwNEY0Q0I4RjUwRkYwRjlENTM0RAotOjEwRTk5MDAwOTgzRjg4RUExMTEyQzU0MzUzNzcxNUZBM0QyMTZEMTQ0QgotOjEwRTlBMDAwRTRBNkQ4RkY0NTVDMkU4MUFFMEVGODFEREE3MkQzMEVCOAotOjEwRTlCMDAwMURBRDdGQzdFMzVGODdGRDcyM0I1MDNCREYxRDFFNjZDOQotOjEwRTlDMDAwQkY4NzRBQUEzNzAxM0YyMDhGNDgwNEU0RjZEQTkyNEYwNgotOjEwRTlEMDAwNTFDRjY4N0E3RUQyRjhFNEZDRjA4NTVEMEZCMEZDRTI5RQotOjEwRTlFMDAwOURGQTAxRDdCRkMzQTM2M0Y5MzFDRjNGODNGRUNDOEYxQwotOjEwRTlGMDAwMjJFQzU4NEFCRDEyNTkzMzAxRkMyQUY1MzI2ODVBQTQ1OAotOjEwRUEwMDAwM0M1Mjc3MzNDQUZGOTk3NDFENzQ1RDNGRTI3MjI3QjQ5QwotOjEwRUExMDAwRjNGQTMwRTRBQjg3RTg3RjAwQjJDRDgxRjlBOEVGNkY1RAotOjEwRUEyMDAwOUU2OUIyNDJCQzI2NTQzMjdCMDlEMjgzQ0RFMjg3RjU3RgotOjEwRUEzMDAwNkJFN0Q5MUIxRkJFRDM4MkZFQzZCNTVERkE1QUQwOUJDOQotOjEwRUE0MDAwMkFBODlFRjQyQjNBREYzQ0M3OTQ1QTFGRTU0QjM5QkFFQgotOjEwRUE1MDAwNUQ2NURGQjM0MjVDN0Q2MDM5NUM5RENERjZCMTREMEFFQQotOjEwRUE2MDAwODRCRjUzOEVGOThDMjQzOTRGQTdBMDhCRTk2M0REMUUzOAotOjEwRUE3MDAwODNFQTVFODg2RTBGRDMxMzJGMEJGNzRDMDQ5QzdCNTFGNwotOjEwRUE4MDAwODlBNzgwNUUxQzIyRkU0RkMwQ0UyNTAxQUIxN0ZBODFGQwotOjEwRUE5MDAwMUIxNTQwQ0Y3MkFFRjRBMjNGRDdFNDhDRkZFODIyRDQxRQotOjEwRUFBMDAwOUIxNEI0MzM4NDFENzFGQTc5RTZGRjFBOUUxNTdDMTUwOAotOjEwRUFCMDAwRjBCMjQyMTdGRkM5NzcwMDZFM0Y2MkU3NzU4OUMyRjg2RQotOjEwRUFDMDAwNERGRUY1RDZCMUUwQUYzMjNCRTMzRkE5RjU2MjdFMERENgotOjEwRUFEMDAwRkExRkQyMkY2RkMzN0Q3OEQxNDk2QzAwOUY4OUUxM0EyQwotOjEwRUFFMDAwNDU0QTkyMzM4MjZGNENFQzNEMTdFMzQ0M0Y2OTM1NjdFQQotOjEwRUFGMDAwMkZDM0U4NkU3RDYwNDIxNDZEM0I5RkQxQTcxNzFDRkFBRgotOjEwRUIwMDAwRkIwQzA1NUUwQTdENDEzNjA1RDE5RUE5OTk0OUVENDM2RQotOjEwRUIxMDAwQzBDQkQ1ODk4MzMyRjhFNTlEM0RBODJGMzY0NjI1MUMwQwotOjEwRUIyMDAwQTdCMUU0OTc5OEZGQjY5OEU3NTlGNUU2M0IyOTcxQ0M3MQotOjEwRUIzMDAwRkY3QURGOTNDMkUzMDM2RDRDNkYyNTNENjhGRjkyMjc5OAotOjEwRUI0MDAwMTlGQ0E5RENDNEJDQjAzRUJEQkQwNURCODlGRTBDM0M5NAotOjEwRUI1MDAwOUVEMEM4RkQzNTE0NTA1ODdGREEyM0UyMDlBQjc4RkYwOAotOjEwRUI2MDAwMjI4RjhEOEQ0QjE0NkY0NUIyN0Y2MUMzMzQyQTQ5NzA1QgotOjEwRUI3MDAwNUVERTM0OThFRjEzRTZDMEU3NDA0NzQ3RUI2NUU2Q0YyQgotOjEwRUI4MDAwNkU0Rjg5QzAyMUNGMEQ1MjhGMUZGQzhFRTFCMjgxQ0YxNQotOjEwRUI5MDAwQjM1OEIzMTgxRUE1RUY0RjRDNDY3RkZGRjM4M0U1QkI3OAotOjEwRUJBMDAwQjJGQ0Q2NERFMzQ3NjI3RTc4NzlENzI3OTMwMTNGNDg4MAotOjEwRUJCMDAwMkQ0MTdBQTRGQ0UyODJGMjVERUQ1OTVFMUNFRjVCQ0Y0MQotOjEwRUJDMDAwNzdGNTQ5RkU4N0U4MzMyN0NCQUVDRTc3RjUzMUI4OEJBMgotOjEwRUJEMDAwMzhBNDM2Q0ZGNTc0NTY0QzYxNzk2OUYxNkQzQjQwN0VBRgotOjEwRUJFMDAwNzYxOTMxREY2RDZBRDcyQjQ3QzAwRjM5RDU0NEEyMTg4QgotOjEwRUJGMDAwOTdENUU4MDEyRjY2NUMzRjM0OEJBRUUzQ0NBOTBGQjYwNgotOjEwRUMwMDAwREQ0MzIwREZGOTU5MUZDQjlGNTNDQkY1QzFGNDc4OEMzRQotOjEwRUMxMDAwNEQyNEQ5N0IxNTdDMUZCRTJEM0Q1RUYwREQxMEI3OEJEQQotOjEwRUMyMDAwM0U5NjEyM0YyRTg2RjVFREQ1RDkwNjNBQTczMjMxNEJFNgotOjEwRUMzMDAwRTBERjIwRjkxQUREMDNFNzZCODg3MzUwQjVGMTQyNTUyOAotOjEwRUM0MDAwOUNFOTVBQjE5RTZGMThCNzBBODAyRjc5ODBCODk1QzI5NwotOjEwRUM1MDAwRjNCMDE0ODlCMTAwOTI2NzUwQzVBRDE0N0JGMTYwNzFCNwotOjEwRUM2MDAwQUIxOEQ2M0YzMzFDRUJFRkVEMTdCNzYyRjkwMTZEN0JBNAotOjEwRUM3MDAwMzNCREEwQTczN0I4MTI4RjNFRUE4NUZFMENEODRGREIxNAotOjEwRUM4MDAwRjMyOTExQzgzQjZGRTNGMDZGQjhGMEI4RDVDMkFDMDFGRgotOjEwRUM5MDAwRTI1NkRCQjkxRUY2N0U4OTFDMzM1MEI4NkUyNzZDRkUzNwotOjEwRUNBMDAwRTE2RTExQkY5MkQxMUU0RERDOTcyN0U2OEZGNTY3RUUxRQotOjEwRUNCMDAwMUI4NTdFOUYzOTIyMkVGNTIyRjM4N0NERTFGMUE3Rjc0MAotOjEwRUNDMDAwQTcxNzYzQkVENjYwNzA5RUQzQUVGNkVGREZDNUUxN0NCQQotOjEwRUNEMDAwRDY1Qzg1N0VGNTFGRkNGQjM0RjQzM0NEMDc3RkZDOTBCQQotOjEwRUNFMDAwQkU3MzA5ODRGQkU1QkNFREVDQkNCOTc3QTcxNEYxQjJBNwotOjEwRUNGMDAwRjg4ODQ5NDYxRENGMjZDM0ZCQzU5NDFENkUwNjE2MUExQgotOjEwRUQwMDAwQTY1ODczMzE3RDJENTFBOEQxN0E2RjFCMkQ1M0U1NUQyNwotOjEwRUQxMDAwNTlBMzg0M0RCNERERjYyMzI5RTgwN0JCRDdFOUM1RjkzQgotOjEwRUQyMDAwREVEQkM2RTJDNEUxNzU1MjY0MThFQjE3RUZGMTBBQjdGNwotOjEwRUQzMDAwQzk3RUU4RTdBNzU5NEM1RUZGMkE4QkY5MjFCQzlBRkJGNAotOjEwRUQ0MDAwMDFEQUY0M0NERUNCQzc2QjIxNzIwQzlFQjJDNDlFRjc5NQotOjEwRUQ1MDAwREE5NERBODFGNDAwRDE1RjlCQkVEOTU0MDVGMENFNjMxQQotOjEwRUQ2MDAwRjc4NTlDMzVGODY3QTI5RkQ4NTE4Q0Y3MDJCNUE1MzY3OAotOjEwRUQ3MDAwQjdEN0IyN0FBNEQ5QjNFNjQ0MDBFQjJGNTc5ODYyNDlDQgotOjEwRUQ4MDAwQkMwRTk4RUZGQTJDQTZBNzY4RTEzQ0FGNDM1REQ2QzY0RgotOjEwRUQ5MDAwNjlCNEU3QTBFNjkwRTBGMEFDMjFGRENGMDlBRENGNjIwOQotOjEwRURBMDAwNzJFQ0VDREE0MkJFMkYzRThDN0JCNEU5QkQ2RjE2MDJFQQotOjEwRURCMDAwQkVBRjYxRjdGRUI0RTQzMkI4Qzk3OUVDNTk2NEFGQzFCMwotOjEwRURDMDAwRkJEOTg4OURFQjYzODRDREJGRTg3MkE3MDRGNEQwNjZCRAotOjEwRUREMDAwNjc3OEZCQUZDRTVCM0JERjE3QjI4QTE5N0NFRDhDNUVBOAotOjEwRURFMDAwREJENjQ4MTEwNjJGMzZFRjBCRjU2RkJDMjVGOEQyQjdFRQotOjEwRURGMDAwQzQxN0RGOTc3QzhGQzYwQUYxM0JFNDBCRTFGQkY0NDhCNAotOjEwRUUwMDAwNzc0NzQ5MjQ4N0U1M0ZEQTkwNkZDRUU2RjZFQTUxMkU0MAotOjEwRUUxMDAwQUYzNkQ3MTdBNTQxM0M3M0NFRjFENTc4N0ZDRkM0RUI4MQotOjEwRUUyMDAwQUQzOEZGQTYxN0NENjg4RjM1QUU4OEU3MDMzRTZCRTE5RQotOjEwRUUzMDAwMDhCMzU1MDQzRjk1MjFFRjk4QjA3QjVGREFENUYxMzlERgotOjEwRUU0MDAwNkREQzc1ODUyMzkwMDBGOUQyNTQxRDJGODZGOENGMDMxMQotOjEwRUU1MDAwRjJGQkJCNUU2MTdDMERFNTYzRDM4QUM0QTNFMDJGMEU5OQotOjEwRUU2MDAwMzg4MjlGNDNCQjkzNzdCRTNENTlGMkUyRTdDOERGQ0VCRAotOjEwRUU3MDAwRUMxRDhFRTdGRDY2QjdBOUNGNEY5MTc1RUFGODFGNjlDMwotOjEwRUU4MDAwNzdCMDczNjI5REVBRjc3MDVFNDhGNTVEQkY3ODIwRDM3NgotOjEwRUU5MDAwNEYzNjE4ODIyMzQwN0ZCQ0YyMEE5NkVGNzA2QUExNEM2RAotOjEwRUVBMDAwNjAzRjRGOTkwOThGQjMwQjNFRUIyQjRFOTYwM0NFRUM5MAotOjEwRUVCMDAwQzFFNDFENkQwNzcwRTZGOTlEQTI3RDIzRUMyQkREQ0YyQgotOjEwRUVDMDAwMDZCRUFGQTc5RUI5QjgxOEY2RjVFNEFFOEI4QjYxNUZBRQotOjEwRUVEMDAwMzdFODNCRkM0MDE3Mjc1QzQxNEYzNkM1OTc2MzkzMDJFOAotOjEwRUVFMDAwQThERjg5N0NENjBCQzVCN0UxODNDRUVCN0Y0NzBFOTdCMQotOjEwRUVGMDAwNjdGRjczNzIxOEZFOTJGRDFFMkZGRTlERTU5RDg2QkI3NwotOjEwRUYwMDAwRDk3OUQxM0U3RkRCNDc3OEVGRDU5OTczQjIwNDdDNzgwRAotOjEwRUYxMDAwQjBGRTVFRjczMEJDRjc5ODQ4MThGQzFDMTVENTcxRkNBNAotOjEwRUYyMDAwQUVFMjBCOTk4MDNFMjdGNDU4RURGQ0FGRTJGMDlCOTlERQotOjEwRUYzMDAwRURGRjE1RThBM0MyM0Y1QkNGRkIzNjQ1M0U2M0ZBRjIxNwotOjEwRUY0MDAwMjMxMkZBNUY0RERFNzBEQTA0QjQ4RkU2OEREMzIxNUZCMQotOjEwRUY1MDAwRjkxNTlFNjcyMEREOTIwREVDOEM4NThGQjQ2MEZERTk3QwotOjEwRUY2MDAwQUUzOTU4MkY5QjYyMzFCMEE3MUE2OTNEOTQ1NzVGQTZGRQotOjEwRUY3MDAwQ0U0RkQ2RUYyRThCMjVEQkFGNzQxRUJGMDBCQjI0QzU1MgotOjEwRUY4MDAwOTkzMDAwN0UzNjgxN0U0Q0E3RDhBNDMwM0Y3NTkzOTM4QwotOjEwRUY5MDAwQTA3RkE0QkM0QjZERUY4OUY4RUJFNjAwQkI1NzY1NzMwRgotOjEwRUZBMDAwQjc4NEY3MkJCOTBEQzFDMjVDRDg1NzREMUM3NjVFQjYzRAotOjEwRUZCMDAwQkYwREYwNEVDNEMzQTdCOEZDMEJCMjU5QkMzQzFGRTA1OAotOjEwRUZDMDAwRDQ5NENERTYxN0Q3OEJGMzczRUFGMzdEODdGNkREODgwQgotOjEwRUZEMDAwN0FEMDVGNDkyMDdERTBCQ0IxODgyQTRFM0U5RjlGQkYxQQotOjEwRUZFMDAwOUNDRkNGNUYwMjdGOEU2OUY4NzM3MkI5MjEyOTZGMkM5NQotOjEwRUZGMDAwMzY1MEZDM0YyOTZGMkNGOUJCRTRCQ0IxOTg4QUFGNzU0MQotOjEwRjAwMDAwRjBGMzA5NEIzMTNFMURBMjc4QkU3QzZDMUYxRTM2MTBGQQotOjEwRjAxMDAwRkVCNzMxRjEzRTlFNEZEOTY5NDRCRjU4MDNDRjE3MEQ1QgotOjEwRjAyMDAwRDUxRjQ1N0IyMzA0RTc1RDE4M0RCMkJDNkE3RUVGNDBFNwotOjEwRjAzMDAwMDNCNUUzMzA2RjM2QUFDRTJCRkQ2OUY2QjcyQjBGNDQyQwotOjEwRjA0MDAwQkJDMUZDREQ4RjBBN0VDMEU5NTFBQzRCQUNBM0ExNUIxOAotOjEwRjA1MDAwNjJGNEEzOTlBN0Q2N0VENUZBQUQ4NUZENzlBMTdDNjkyNgotOjEwRjA2MDAwQ0ZCN0JDRUU2RkNBOTc1RUY5OTZGODUyM0ZGRkZGRDA1QwotOjEwRjA3MDAwNDQ5QUVGNUJGMEZGOUZGMDc2QjhDMTI1RDgyRTMxN0MyMwotOjEwRjA4MDAwOURBQ0IzRkE1OTdDNTFDN0YyMEZCNDcxNTdFRjY0OEM0MQotOjEwRjA5MDAwMjcwQTdGQUJFOTU5NUQ2NDU1MjFCNkM3Nzg2QUUzREU3QwotOjEwRjBBMDAwNTRDQzA3QThGN0Q2QTM5RUFEOEQzMzJFMjJCQjI2QzMyMgotOjEwRjBCMDAwMTZGQzk1QkM4NkU3QUFGRUQ1QjhGRUU5RUNERUI4N0U2NAotOjEwRjBDMDAwRTEzNzhDRUJGRjM1RkIxQkM0MTk1RkIyN0U5NjExNEMwOAotOjEwRjBEMDAwQzI5M0VBNTJBQUIwOTcwRTlFNzdBNUNCNjFGQjlFQzI1RgotOjEwRjBFMDAwRjMzRjRDNEE5OEQ4OTNCRTFGRUNCQjk0MUMxNjY3N0YyNQotOjEwRjBGMDAwODlFNzBCREQ5RjlBODJFN0U4M0QwNjc2OEVDMDIzQjM1MQotOjEwRjEwMDAwQkNBNjc3QThCNjlGRTMwMjM5QzBGNkYxNjdDRkRGNDQwQgotOjEwRjExMDAwMjA0RkYwNjdGQTI4OUU2QjBGMzc1QTdEMjBCRjg0QkZCRgotOjEwRjEyMDAwNDhGNERGQ0NGRDk4MTc0QTNGNDUzOUZGQkI3Q0EzMzQzOAotOjEwRjEzMDAwNDdGQTY2NzFCMjhEMTQwNjQ5NzRBNUE1ODNDMUJFMUIzQQotOjEwRjE0MDAwOENBRjVDOUUxM0E4Q0M0MUJFRTUxRjgzRjE4NjBCRTQxNwotOjEwRjE1MDAwNDcyOUU1OTQ1RjgzN0NERTZERjQ4MkJENjBFMkU3NUQ2NAotOjEwRjE2MDAwQzhCQTJDOTVCRDNERTdGRTNDOTQ1QkE3Q0NDQzdFMTA4NQotOjEwRjE3MDAwRTc3MkM0RkEwMzgzQzJGQjlGRDNFRkY2QjkwMkQzMDE0RgotOjEwRjE4MDAwNEY4RTU1RjkzMUFGRkZERTU0MjY1NzEyOEZCM0ZDMUU1OAotOjEwRjE5MDAwRURGOTE0QUQzQzExRTcyQkM0Nzg3M0M1RkVGQzFGRjFFQgotOjEwRjFBMDAwRDMyNTAyM0VGRjIyM0ZBNUYyMTVGRDJCODNDNjUzRkI1QwotOjEwRjFCMDAwN0QxRjY2Rjc5MTU0RjdGODc5OUMwOUNGMkI4ODc5ODVFNAotOjEwRjFDMDAwN0E1ODVFNUMwQjlGNUYyRkJDMzhGRjNGOThFMzVGMDU2QQotOjEwRjFEMDAwRkI3MEYyMkQ5MzA5RTI5N0U1RTU4QzdGMzYwNUFDRThFQwotOjEwRjFFMDAwRkY2RjhBQjI3Qzk4QTYxNTA0RUQ3QzcxMEVENTlEMTkyRgotOjEwRjFGMDAwNUMwN0Y4NzhFRkRCNTZCQzA3QjRBOTZCN0I3QjExRTZBNAotOjEwRjIwMDAwMDkwNDUxQUYzQkZEMTY3QjdGRDAxREVDODBGRTQzMkJFNAotOjEwRjIxMDAwRTJBQTM4NDNDNUY5Q0Y1NkQ3OTZFMzdDRDE0RTc3MUE4OAotOjEwRjIyMDAwRDVFNzdCN0U5OUMzRUM2RkYxRkM0NTJGN0NBOTVENDI0RAotOjEwRjIzMDAwQkYzQjU5Q0ZGMkIwNDM0RUJGQUQwQUYzMDM5ODFGM0IxQgotOjEwRjI0MDAwQzVEQjgzRkVFN0E2REQyODI0MDgyNjg1NDJGRDVEQjlERgotOjEwRjI1MDAwODgzNzREQkJBQkNBRjA1QzdGRDQ1Qzg2RjdDMUJDNjMxQQotOjEwRjI2MDAwNDVGQkVBRTQ5REQ5MTExREYzN0IzRjA2RUI0QTJEOEY0OAotOjEwRjI3MDAwNUMwREZBNjUwMTFEMDdGQ0Q4Mjc3NzVENUQ4NkZFNDBCMQotOjEwRjI4MDAwMERERDA5N0FFQjNERDc3OUFCMjlEMjJBRjVEMUUzMDYxQQotOjEwRjI5MDAwM0Q5MzhGNDJBRTNEMDhDQTJDRTY0N0YwRkNCRUVFNjlCNgotOjEwRjJBMDAwNjQ5RUI1QUY2Qzc1QUFGMzFFNjc2NjRGN0ExMEU2RjNERAotOjEwRjJCMDAwNjA4RUMyRTNEMzJDMUU1RTY4QTJENjY3NTE3RjNDMkNDMQotOjEwRjJDMDAwRTRGMUYwNjkzQzhGODE4NDREN0RGOTBCNDU1RjFGMEZBMAotOjEwRjJEMDAwMTdGMzEzNjUxMTBGNEYzOUM3RjREQjIyOUIwMUYxMjI5RAotOjEwRjJFMDAwQjU5REYxMEQ0MkYxMDJGNEVCQ0IxMjNEMTNFMTNDRDU5QgotOjEwRjJGMDAwRDBDRUQ4NjUwMEFGNzQwMDNGRTY5MUM2N0Y3NDExQzRDQwotOjEwRjMwMDAwMUQzMjk0Q0IyMEVFQjA2REY5RDhGRDI2MjdGODhGN0EwOAotOjEwRjMxMDAwMkU4N0FERjE3NkQ4QUFDMUI0NzQ2NzA2MEUwMzlFMTA4RAotOjEwRjMyMDAwQTVCOTA0RjBCRkZBRjc3QTk2NkZCODI2MDVFNTdENjdCMAotOjEwRjMzMDAwN0UwM0U2MUI5RTdFREJBODNBNDdBMzdEODZDOTJBMEY4MwotOjEwRjM0MDAwRjg4OThBREE3Rjg3N0VGRkQ0REREMjgwNzlBNDE5QTA3QwotOjEwRjM1MDAwRjQ4RjY3RURDMUVGOTREQURFMTNBRTA0M0ZDQTdEMTI3RAotOjEwRjM2MDAwQkI0QjkxQ0U1RUYyODBGREFGQzhBMDc3Q0NFOTYyRTdERgotOjEwRjM3MDAwQjFFNzc0RDhBQjREQzg0RjI1MTYzN0I5Q0M4OTdDNTI0QwotOjEwRjM4MDAwNTk3MzhEMENGNjk5RDI0MkYwREUzMjRCMkVGMzVCMEY5RgotOjEwRjM5MDAwRUJCNEM5QjBFRkJGRkU1MjM3NjAzQ0VDNkYxQ0JGMjEyRAotOjEwRjNBMDAwN0YwREMwRDU2ODRDMUM4NDkwQkQ4OEUzODlCQ0I1QzE3NQotOjEwRjNCMDAwRUUwMzE3RjI0OEFCQzdGNkQzNUZCOTNDRUFENUUzMzVBNQotOjEwRjNDMDAwNzgzQ0Q4NzcwMkJGMDUzRUZGNUE0RjUwMEZGQkI1NjQxQgotOjEwRjNEMDAwQzI3MzVBMDJBRkRCNDQxRUZFOTdDQzhGNUJDMEYzNjI1MAotOjEwRjNFMDAwOEVBRUZEOUYzMUVDM0UzRjExMDc4OUIwN0IyNUY1RjFENAotOjEwRjNGMDAwRDUzOTA4QUZGODE1NjE1OEY3NkVCQkRDNTQ4QUZFQUZGQgotOjEwRjQwMDAwMjZFQzY3MERCQjdGQUNBMDdEQzhBQUNBNzI3OERBMDg2QgotOjEwRjQxMDAwODBFMEU4OUVDNTA1NDA5NzYxOEEwN0MzMDZDMDgzMjM0NAotOjEwRjQyMDAwMzkyQ0ZGNDg1OTkzODJGQkE2QUNDNzlCOTY4OTYyNzcxQgotOjEwRjQzMDAwRTNCRTI5MEZCMEZENzkzMzg3QUQ0N0M0NjE4NTlGRjJFNAotOjEwRjQ0MDAwNjA0RUIwMDRGMjZCN0JDRjU3MkRCN0IwRjM1NUZDRENBOAotOjEwRjQ1MDAwNkVFQUYyQjc5RjgyNzM0QkRCQjhCRjc4RkY4QkEzRjBFNQotOjEwRjQ2MDAwNzcxMENFQUU1MTI0RjAxQjlEQjVENzE1ODBCRDM3MkUzOQotOjEwRjQ3MDAwOTdFOTRCQTk0QTBGQjE1OTkzRjE3MzNGRTZCRDE2RUREOQotOjEwRjQ4MDAwNjVGOTdCMEFCRkNGNDg1OUUzREMwRUYwMkNDRDA4NjI0QQotOjEwRjQ5MDAwN0VFRkU1NkQzMUZDMDk4MTE3NkRDNzMwQkU0NkY1MjI2MAotOjEwRjRBMDAwM0NDN0ZDRDFGMzkyRDA4QjU0RjI1MEQ4NkI1QTNCRUM1MgotOjEwRjRCMDAwQUFEQzZGNTcyRTdFOUQ5RTM0M0Q1NzJEMDcyRkQ4QkU1OAotOjEwRjRDMDAwMjI2QTNCQjNCN0JEQjAxQkI1NzY4NEU2RkJDMUY0MUYxRgotOjEwRjREMDAwRTIwRkFCRjI1QkU2RTU3QTg1MUU4N0YyM0Q5QkYzNDZEMQotOjEwRjRFMDAwOTFGN0QyN0IwRTk5NDRDQzcwOUUwMTcyMDlDNEZENThFRAotOjEwRjRGMDAwOTBGRkIzNTFCMkY4NDA0RkQyRTZGREY0RTZFMzkwRTY1OAotOjEwRjUwMDAwRTEyQzFGQTRGOTIyNzZCRjQ0RjNDNUYwMTQ3OTQxNjZCQgotOjEwRjUxMDAwQzgwQjQ5Q0UzRjRENjU3OTNENjZDODBCQTFFRjVCMDcyRgotOjEwRjUyMDAwM0RCN0VDNkQ4MUYxM0JFRkI2ODk3M0NCQ0NDRjVFNEIzMQotOjEwRjUzMDAwNzg5Q0UxMjEzQ0Q3OUNCODIxMTdDRkM5NENBQzY1RkUyMwotOjEwRjU0MDAwM0I0N0MwMjAwMzVFM0VGQjBGOUQxRkY4NkU4MkQyMkQwRAotOjEwRjU1MDAwRTg1NzhFQTFGRTJDRDBCN0NDQjQxRUYyNEQ3QUNGMkQzOQotOjEwRjU2MDAwRDc5MTAxQ0YyRDhCQkMyNDExQTdDRDFFQkU0MTAyRjkyRQotOjEwRjU3MDAwRDM5QjJGMTJFQTNCQ0YwQ0UzNzYyRUYxQTI3RkI4Mzc1NAotOjEwRjU4MDAwN0ZFOUJCMDRENzU5MkRGODhDNDlCRDdGNjk3RUQ2MkUwMwotOjEwRjU5MDAwNkRBNjAxRjUwQ0I3MUM3QzFDRTM3ODlCN0JDQzc4QkY3NwotOjEwRjVBMDAwNDQ2RTExRUU1QjZCNjUwNEVGQjM3NTk0NzZBMEZGQjUwNgotOjEwRjVCMDAwMjVDM0JGMzlEN0Q1ODczRjYyN0U2NDIzNUJGRjE5MzhFNwotOjEwRjVDMDAwQUYyNUY1OEQ3QjY2RTExN0Y5QTA0RjU1NzcxQjE5MUUwNgotOjEwRjVEMDAwNkFFNkIxQjlGN0RFMTQzQTBFN0RGRTIyOTdFREJGNEYxMQotOjEwRjVFMDAwQTNERjhBRTcyRjA0N0Q3MTNFMkNDNjFGNkM5RDAyMUY4RQotOjEwRjVGMDAwQkY0RTZGRDdFMjU3Qjg5QUVGQ0ZCQkU2MDhDQjNCNTI2RQotOjEwRjYwMDAwRTNEN0ZFOTVCNUUzOEU1MTVFNzI2MDY1MDA5RjY3Q0NDRgotOjEwRjYxMDAwNTI1NDA3Rjk0MUU2QzQyQ0UwODA3N0U2Q0RCRjBFRUVFOAotOjEwRjYyMDAwRDMzODkzOUFDODg3RkIzODVBRjJBNzdFMDdFRURGMzhBMwotOjEwRjYzMDAwRTM0QUJDMEJFNUNFQkM3RjYzRTU2MTg5NkQ3MDNGQzdEMwotOjEwRjY0MDAwQ0ZGMzE0NTY4NkIxQjIwOTc5NjVDQkI5RUJDMkE1Nzg3MAotOjEwRjY1MDAwQUZENUVBMUU5MDRGRTU5QTNDMTNDRDNEMDI5MDBGODkzRAotOjEwRjY2MDAwRjcxRTU4RDk3RTY2RjI3QzU0NTJDM0Y1Nzc4ODJDRDFBOAotOjEwRjY3MDAwNzI2QjU2OTkwRkYyMDhBQ0M0QkJCQjA3RUE3MzhERUNGMgotOjEwRjY4MDAwQkUwMUMyRjI5RjVBODcxNUIyN0MwNThFRUYyNDk3RkIwQwotOjEwRjY5MDAwOUY0OTNDMENGOERCNUE2OEM3RUY3QkY5RjU2RTIzOEY2NgotOjEwRjZBMDAwM0JCMUYxREY3ODg2OUQxMzEzNzlCNjg0RDhGMjQwRUYzMQotOjEwRjZCMDAwQjE3QTg5QUEyQ0VFRTEyMDhBMkQwRkNFRERCNzBBQkZFMAotOjEwRjZDMDAwMUUyRjFGQjEwNDRGRTQyNkU5NDU2RjRDQkFBMzE0N0ZFNwotOjEwRjZEMDAwOEZFM0Q5QkI4NkMyN0FBRjMyQThFRjMzRUVFNUE3Rjk0NAotOjEwRjZFMDAwOEMxRjlFRTFGN0ZFNzU1ODgyOUY0MjNGNDc1MjY2NEQ0MAotOjEwRjZGMDAwODZBQjU0Njc2NjU0MTlFQ0E4QTczREFFMDM3RUU0RTJERQotOjEwRjcwMDAwNzg2MTlGQzFFNjY3QUYwOTQ4RjAzQjE4RTJERTNENTdEQwotOjEwRjcxMDAwNTA0MTdGMDAwOTc2RUE0MDdFQkE4RTA1MzA5RkFGQzEyNgotOjEwRjcyMDAwOTRDODU3Mjg3RTdENjEwQ0ZFMDNFOEUxNkNERDdCM0ZDOQotOjEwRjczMDAwQzAzODYwRjYxQkVGNDJGRUM1MUJGQThFODk2OTIwMkY4OAotOjEwRjc0MDAwMEFGOTdEMEVENEYwMEIzQjQxREUxNUEwRERENzdCNEZDRgotOjEwRjc1MDAwRTczMDA5RjlDM0Q0MTlFQ0ZDRTkxNDEyNTVEMEZGNjI2MwotOjEwRjc2MDAwNjNFN0ExMjY5NzE3RkE1QUU5Nzg1Mzc5RkVDNkU0MjM4RQotOjEwRjc3MDAwODEzNEYwMDM0Q0JFMjlBRUIwNzg0QjQyNDlDRTk3MTA4RAotOjEwRjc4MDAwNEZFMkQxN0I5M0U5RTA2QTZGNTI5OUMwRkRCRUVBRjI4NQotOjEwRjc5MDAwQjUzRTc1RjkzQjk1NUYwRTRGMkVBNzUzM0IyMDZGM0M0RQotOjEwRjdBMDAwRjBBRDM4OUUyNzBFNUY0MjZDNkM1RDJDMkZGMEU3RENDRAotOjEwRjdCMDAwNkUxQkU1MjFBNjAyQzg1Qjc0NEE2MUIwMEI0NjNEOTdGQgotOjEwRjdDMDAwOEQ3MTk0RTcyQTA5OTZERDNCNEQwRjk5OTJEN0JGNUU2NAotOjEwRjdEMDAwNjY3MTVBRUVFNzE2QkZFMzAzNzUyMDU3OUY3RENCOEQwOAotOjEwRjdFMDAwRjA3MjVCNjVFNEE3RTAwMTA3N0NBQkM4MzE1OTgwQkZDQwotOjEwRjdGMDAwRUIzODlGMTdFN0FGMjdBNTk5RjBGRUQ1RDYyNUVDRkU4RAotOjEwRjgwMDAwN0ZFREZEOTNBRDdBREIzRUQ4QzdENjEzNzQwRDc0OUNBMwotOjEwRjgxMDAwNDc1MjBEMzEzOTBERjY4QjEwODNCMzhGMUYwQkZDODFDRQotOjEwRjgyMDAwRkVBRTAwQkMxRkNGN0U2Nzg5NjJGOUQwRTRGQkJGNUJGMAotOjEwRjgzMDAwNUQ2Q0FFQUQ3NzJCM0MzRUM3N0VFRkExQTRGN0Y3MUYwMgotOjEwRjg0MDAwMjhEOUQxRjZBMDUzMTJBNDEzMTYxRkNCMTNFQjI0OEE4OAotOjEwRjg1MDAwMUZEQTY3MTE1MTY2RTdBQ0RDQkMyQ0VFQkQyNEE0NEE2QwotOjEwRjg2MDAwQzFGQjcyMjREMUFFMDVDQjBGRjI3NjUyRjcyQjdGMDM4QQotOjEwRjg3MDAwRkMxODlBNDZENzQzOUY0QkYyMTg5Rjc4NTg3RTYzMjMxMwotOjEwRjg4MDAwRTI4OTM1RTgwNTNDRjFBNTBDN0NFRUU3QjYzQzQ2Mzc0RAotOjEwRjg5MDAwOTNEMjJBM0Q5MDM3RDA5QUU1RjM4MDVFMjVFMDIzREVBRgotOjEwRjhBMDAwOEI3RTQ1QkQxOENGOTczMTcwQkY0Qjc4QkY1MTdFNkVCMAotOjEwRjhCMDAwNTg1QkJGMzg4RkU5NkRCREUzRUE2OUJGRDZBRjE4RDc5MwotOjEwRjhDMDAwQTUxRUI3RjdCQkJDODFCRjEzRUY0NTdCRkM3OUE2MEEyOQotOjEwRjhEMDAwQTAzMzA2QjcyOTNDNUY5NTk0QThGMzUzNDhBNUNGQzQzRAotOjEwRjhFMDAwRjhCRDNBMUZFNTJBNjk0NTE2RDBFN0Q1QTZDNkVFMzgxOQotOjEwRjhGMDAwRkRGRTE1OEUyNzU3QzlDMUJGNDBCQ0UxOTU1OUM1MDcwQwotOjEwRjkwMDAwODAzRTZCRTE4Mjc5REFDRjM1MjRCNjFBOTBFNTRDNTUwQQotOjEwRjkxMDAwRjA2N0Y2MjFDODJGREFGMkU4M0E5QTc0QzFFMTBFNUE3QwotOjEwRjkyMDAwM0VBNUVGMThCQUE0MTBFOUVCOUVCQ0YxRkRFNzI3RjA2NQotOjEwRjkzMDAwQjA3NzlFMTRGRjYwREYwNUZFNjlFNzJERjA4MDVDMTc0RAotOjEwRjk0MDAwQzVDNEJDQUQyNDg2NEYwRjYxRjlEMDU0N0VCMUJDNjdFRAotOjEwRjk1MDAwNkY1RURGQkEyODcyNEUzNjM1MEYwNUY5RkU0QTRCMTgzNgotOjEwRjk2MDAwRjlDRjU1RjY5RjYwRkVENzgzMDVDMUNEMzBBRjk5MTcwQgotOjEwRjk3MDAwN0Q4MkY3REQxMDRGMURFQTVCNzRCRTNGRkRCRjlDMkZGQgotOjEwRjk4MDAwQTVBQjJDNzgyRkY0NDBBMUVGRjVDQjAzM0U2MTUwRTVGOQotOjEwRjk5MDAwMDE4QkY5NjlFOTU4Q0MyMzQ0RDgzRDQ2MTNCQkI3QTM4MgotOjEwRjlBMDAwN0UxNzlBNjFGNUMxNzk4RDEwRTRCNzk2NjNGQzBCRjM2RAotOjEwRjlCMDAwODVGNzcwQkIyQzJDQjFCQ0REN0VGQUUyRTBGOUMyRUMxRAotOjEwRjlDMDAwNUM3RkEzOERERDY3MjNFRTQ1RkE3RTkxQjhFRjg2Q0Q4RgotOjEwRjlEMDAwOUJGMjJGN0VERjBEOTYzQkVCQkM2OEZGRjVFQThERjNDMwotOjEwRjlFMDAwOTgxRTdBNjVCMUE1MERFRTBGRUM3RkVGMERGM0VGOTE0OAotOjEwRjlGMDAwRTc4QzVFQUUyN0EyRkNFRTRDNjVFMzlDMzJCM0ZDRjREMAotOjEwRkEwMDAwMjQzRTRFMjQ3N0RGN0Q1QzFCRjQ0QzFGRkM2MzVFMjE5QgotOjEwRkExMDAwQkI1RjQ0RjY1NUMwN0U2Qzg2Qjg5NUFFQkYxRkYyODRCRQotOjEwRkEyMDAwMkJGODY3QzBFQjc5QTVGRTdDRjg4OThEMzkwNkU2Njc2RgotOjEwRkEzMDAwQTQ3OEI1QTU4NzQwOUE1QkYzMjM3MERGRTRENUE0RjlEOQotOjEwRkE0MDAwQjAzQzA0RjFFQUJGQTFGRENDNTE5RkIwN0IyOEZCRjA5NAotOjEwRkE1MDAwRUEwMzg2NTc2MTY0ODI1RjQ3QTcyRjY2MDRDRjQwRkJBNQotOjEwRkE2MDAwNEU3QkY0OURBNjcyODgzMzFBMTFGRTIyOEY1MDRCQkYzNQotOjEwRkE3MDAwNDlGMzM5QTY2N0YzNzFDMjNEQjc3NDNFOUYwRjM0OUZCNwotOjEwRkE4MDAwMEJDMUVGNjQzQ0NBMjQwQzhGMDdDMzczQzhENzRGMUQ0QQotOjEwRkE5MDAwREI4N0U3RTkyNDY4QzgxRjlGODRFRkFCN0RFREJBMjFCRgotOjEwRkFBMDAwMDNDQzVCNjdDNTdEQkZGMTY2MTY4RjA5QTUzMDNEMTU5OAotOjEwRkFCMDAwRTIzMjU5NkVGMDNGQjFGMTZGNUNDM0YwRTM0NkIzMTEyRgotOjEwRkFDMDAwRjE2NTVBNzcyM0M2NUY0ODBEOEJBN0Y4RThGRjYwM0VDMwotOjEwRkFEMDAwMzM4OTdGMTJGQzU0QzZGNUI2Njk3OEZFNzJDNjU0NzUzOAotOjEwRkFFMDAwQkM2NUE2RTkyQThDRUZEQzQwOTgzRkVEQzYxOTdBRDVCMwotOjEwRkFGMDAwRUYwMDBBMzhDQzI0RUIzRTgxN0M4RTk5OUFERkZGRDM0RAotOjEwRkIwMDAwQzI0NTFCQUYxMUYwNjhBREZDNkFCQTFGOTFERjFCRDc2RAotOjEwRkIxMDAwMTlGRTBERTMzQUJFN0M5NjNGNzc0MTcxOUQwM0ZBMDRDRQotOjEwRkIyMDAwOUVCQjdGRDlCNTYwQ0IxMjRBMTdDMzdGNUE4QUY3NjY0RQotOjEwRkIzMDAwNEY3MjJGN0M2NDNEMkQzRkI2NzkyNDk2NUY3NkRGQkFGNQotOjEwRkI0MDAwRUMwREE4REY1NjhDRTUxQUY5OTM1OTc4OEY3OUM1Q0Q1RAotOjEwRkI1MDAwNTNFMEJFRjEwMzY2RDY4RkM3MTJFQzg0REY4RkYwOENDMgotOjEwRkI2MDAwMjkxQTBCMjY1OThEMjE4MUVEQUVCOUE4NzExQ0U0QzE2QgotOjEwRkI3MDAwRDQ1ODU4RjlCNUIyRkYxQThCRTUyMjVFMUVGQkMyNDg3NQotOjEwRkI4MDAwMjgxRjkwM0U5OTM1NTA1QzY4NTQ4OTE0ODNERjg5QUFGOAotOjEwRkI5MDAwNzFCMEY2NTNDNzNFOUUwRDdFODI5QTZBNTYxRUU1QUI0MwotOjEwRkJBMDAwNUEzMzA0RUFFNTRGNjcwRDI0OEY2N0U1NzNGQjg5RUI1MQotOjEwRkJCMDAwNUIwMTRFRUZDRkY5REY2QjgzNzM1RTAxQUJFNDgzRkMzNwotOjEwRkJDMDAwRkU0MEU1N0JFQzlFMkIxM0NCMjMwOEY4Q0IxNEI4MDc0MwotOjEwRkJEMDAwQjFEQUNGRkM3QjEzQUQyRDU5QzBGRkFFMEIxQUNBQzFGMQotOjEwRkJFMDAwOEY2QkIzMTZCNkMxN0RGRkU5OTU1NUUzNjFCRjI3NTIxMAotOjEwRkJGMDAwMzUwQ0U0MUZBNUFCRDlGOTQwNTcxNzdGOTI5Rjg2N0E0MQotOjEwRkMwMDAwODg5QUFFMDRERTRFMTNGNDU0QTNBNjFCQ0EwRkVBRDk5OQotOjEwRkMxMDAwM0VBQUU5ODFGNkRCODhGRDVFQUE5NjRCQkRGQzVENDNGQQotOjEwRkMyMDAwQjc1QTdDMUM1NEVFMTMzNTFGRUM5NTRGQUJBMzg4OTc0NQotOjEwRkMzMDAwQjk4NDlERTNEOTBBNzhDQUU4RjdERjYwN0UwNkI5QzdDMAotOjEwRkM0MDAwMEJFRjBCMjRERjQ4NENBQzE4NDQ3RjEwRjMwM0I1ODc0RgotOjEwRkM1MDAwOENFRDNGMkZGODUzODRCRUM4NjY2MEIzQjk2MTVDNTYyMwotOjEwRkM2MDAwNEZCRkYzQzM4RjdBODk3OUQxRjE3RjhDRjA1OUNERTZGQwotOjEwRkM3MDAwQjM1NTZBRTZCRjEzQzFGNDcyNjFGNzM2ODlGNTc2QTkwOAotOjEwRkM4MDAwRDc1QjYxNjFFN0QxM0Q4NEYyMURGNEREOTc4REZDQUE1RAotOjEwRkM5MDAwNzk4N0I4OUM5RDYxMEFEQzY3QTQ2QkI4QzEzRTA3RjcwMQotOjEwRkNBMDAwRjkyNjEyN0UwNkY0OUJENzJDQzEwOENDNDcyNzg3Rjc4QwotOjEwRkNCMDAwQzYyNUY4OUQwNzNGQzY5M0U5M0U2RUNGNEZEMjE3QzRDNQotOjEwRkNDMDAwQkNCNEYwNjgxQTg0QUY2QUU3QUQ4NTQzREZGRUY0QTBFOAotOjEwRkNEMDAwN0U5NkM1N0YwRkFFNzc1RDlBRjVCNEYyRkJFMDEzNjVCMwotOjEwRkNFMDAwNDY1NTlFRTg2Qjc1MkMwRjU2Q0NFQjM1ODk5NEEwOUMzRAotOjEwRkNGMDAwOTQyQzE4NDdFREY1M0I2OUY5REIyMEU3RDI4NDdDMTY5QwotOjEwRkQwMDAwRjNCQzgzOUY4QkZBNUM2NjdDRUYwRTVEMENFNzU5NTA2OQotOjEwRkQxMDAwREI2MzA2MzhDNkYzOEJEODdEQzY3Q0ZFQUQ5NTYxNkM3RgotOjEwRkQyMDAwNjc5MEE1MDFFM0M0RjE3QzU5RTQ1N0E4RjY1QkRDNEY2QQotOjEwRkQzMDAwMjZFMjVDMDJBRTRFODMzNzE3RjMzRDM1RjA5QzZEMzIwMAotOjEwRkQ0MDAwMEUxQzU3RDVDNjVGMDc2OTI3NTFGOEU1MzhGQUMzNTkyNQotOjEwRkQ1MDAwQzRDQkFFRDVGQUUxQUU2NkZFQTk2QkI5MUY2RTYyMkRCQgotOjEwRkQ2MDAwODNCRjYzNzkyQURBNkQ4RUYyMzcxNDMyQkFFRkZFNjRGQwotOjEwRkQ3MDAwQjExRjNEQ0VFMDQ5QzQyMzI1M0UxRUZDMDRBRjhGN0Y1QQotOjEwRkQ4MDAwMENFMzQ0RTI5RTQyMkQ3Q0NFMEQwMjlGQzFFODYxQjA5RgotOjEwRkQ5MDAwRjkxRkIxMDRCRTgwNzE0RjQ5M0Q3ODlGNTlDMjYzRTM5QQotOjEwRkRBMDAwQ0U4MzYwMjFEMDhCREQ1NjU4MDVGRTA1Q0E1N0NGOUYwNAotOjEwRkRCMDAwMDc2MzEzQUFFOEZFMkQ3NzA1NjVCODUzRUYyNjEyOTg1RQotOjEwRkRDMDAwMDRCOUQ3OEVEQUEwOUVGOUU3MDlGQTg3OTc3MjNCNzFEQQotOjEwRkREMDAwMTI5N0VGOUYzRUM5Q0VDMUQ3Rjg0NzNDNzgxOUU4OUZFQwotOjEwRkRFMDAwODdGNDI0RTI4NTNDNkUwNjlGNEZCN0U4NTBBRTJGNzgyQgotOjEwRkRGMDAwNzU5QzA3RjRGM0Y3MzlCRTBEREYyOEFCN0UyRjZFNDRGOAotOjEwRkUwMDAwQzRBMkJBMkY2M0Q0NEU4N0FBM0MzQTlBQUQ2QTdGNTFGNgotOjEwRkUxMDAwNTc5MUFBQkUyQzM2NTI1NTNGRUVEMDU4NTU3OTdDQ0YxQgotOjEwRkUyMDAwMDQ1NUZCOEI4RjU0QUJDQTk3QzRBN0E4REE1RjdBN0NDMgotOjEwRkUzMDAwQkFBQTdDNzlFMjE2RjU3RDFGNjE3RjRGODkxQkVFQ0I1NAotOjEwRkU0MDAwNjdGMEI4RjJEQzZDNTVGQjhGRDMyNjFGMDJCQTlCQkI2MAotOjEwRkU1MDAwOEVFNTZENTc5MUM1QUFFRjE3RUIxQTMwMUY5QTc0MzBEMwotOjEwRkU2MDAwM0RBNjk5RkU4RjlGMzc1NzMwNEY4Q0VBRUYxOTAwQjdBOAotOjEwRkU3MDAwOEQ2QTNEQTdCRTdCRkQ2QUUwQjVGREVFOTlEMEU4MzMwMwotOjEwRkU4MDAwNUFGRDY1QjhCMzBFQUU2OTI2OTcxN0IwRjNFREU0NjI3QwotOjEwRkU5MDAwNzIzMUZGRkQxMEVEQkVFMkI5RkQ0RjBGRUJEMDhFNTg3MQotOjEwRkVBMDAwRkEyQUQzRUY5NzNFQzVGMkUxOEFDOUIwNzQzQ0NGNzUwOAotOjEwRkVCMDAwNDg0NzIyMTJEQzVGRDBCQ0UxMzJBOTRGOEZEMUMyQzVDNgotOjEwRkVDMDAwRTg1MUVGQjNEOUFCREVFNzk0MTJGNTNFQTdGQUQ0RkJDNQotOjEwRkVEMDAwOUM1RUE5REU2N0JCNUZCRENGMTlCNUVBN0Q3NjA1RDQxMAotOjEwRkVFMDAwRkI5QzM5NTNCRENGNTk0MUY1M0VFN0Q0QUJGNzM5QUY1MQotOjEwRkVGMDAwNTlCRENGMDVDQkQ1RkI1QTE4NUVBNEFBMTc3QzczNDgxMQotOjEwRkYwMDAwRkI1MkQ1RkI1NjI5NUE0MTM5MjU5OTFCQThDNzdCMUJBMwotOjEwRkYxMDAwODY3NUZDNzA0MEZDMTBGQjFGQTZGRjYzRjREQzhDRjlCNwotOjEwRkYyMDAwRjVGM0U5RkU0MzdFRkQ1RkM5QkE4MzEwOEFEMkUyNDE1MAotOjEwRkYzMDAwNTNENzdBOENBQjdENTMzQ0I4QkI4MEVCQTc2MkZGMkZDNQotOjEwRkY0MDAwNTAzRkE1RjJCMDE1RjgwMkQ1NjM1NjE3ODA3RDNEOUM1MQotOjEwRkY1MDAwREIxRDgxODFGNTE4QzFCNzkyRjU4NjY0QkI3QTMwN0VDRQotOjEwRkY2MDAwRDY0RjRFNzIzQjdCNTAzOUE5QjFCM0RGODJFQzI2RDQxOQotOjEwRkY3MDAwQzdEN0ExNUZFQjY2OEVENzlGQzFBQjRCQzBBRkZBMzQzQQotOjEwRkY4MDAwQ0FGRkI3RTg0NDJBRTlCQ0RFODI3OUQzNzFERUIyOENCRAotOjEwRkY5MDAwNDIzRkM4QUQyNEE2Qzc3ODAyNjQ2RUVBRjBERTRCQ0NCRgotOjEwRkZBMDAwQzNBQ0EzN0EzOTNDRTc3MEZENjAxRUY3OTM3QzYxMEMwQgotOjEwRkZCMDAwRUUyQzYwRkU5MTAyMzc4QzlCREJDM0NFNkZCRDk2NzEzOQotOjEwRkZDMDAwNDFGNzNCRkMwRUZFNDlEQkZEQTkyMDEwODU3RTZBNEMwMwotOjEwRkZEMDAwREU2NTBGRDA1N0ZCQjlGRjg5NEM2NUY5OUY0NDA5OEM0QQotOjEwRkZFMDAwNEVCRTRGQjFBRjFGMTYzNzdENDEwQTA2RDFDRUNFMzI3RAotOjEwRkZGMDAwRjlDMENFMUU5NTQzNEM1OTIwREYzQzkxMjI4ODUzRkQxOQotOjAyMDAwMDAyMjAwMERDCi06MTAwMDAwMDBCQTQwMTY3MTJBOTQyQjIzMzk4RTNDOTUxRDVENkE0N0EwCi06MTAwMDEwMDA3ODQ1MUMxODI3Rjg4NkUzRkVBNkMwN0YxMEYwNDFCNDhGCi06MTAwMDIwMDBGRkJBRjUxQTBDRDEyNUNDOUZDMDdFQkZFNDMwREY5NzE0Ci06MTAwMDMwMDA4NzZGMzRDNkMwMkUxMzc4NzQyNDY1RDY0MTk3MTdGRDk4Ci06MTAwMDQwMDBFMTg3MDEyRTMzNkZCQTdBMzU5NEE1RkQxOURFQTU3NEM4Ci06MTAwMDUwMDA3RTY3RUFFMjY4REY1M0Y4MUY4MUYxMUI0QzE0RkU3NERGCi06MTAwMDYwMDA4OUE3RjI4MkMzRDMwMTE5MDIxOURDNDkxOTE4M0REMEJFCi06MTAwMDcwMDA3OTI0MzE5Rjg5MTJDNzBCNEJGMDNEMTg2N0JGREM5MzgxCi06MTAwMDgwMDBFRjAzNzgyODNENzhGRThFNTg1MUI5MjFBNzBDMDNGQjY5Ci06MTAwMDkwMDAwMzA1MUNBQTUzRjI2RUMzRkI3NDhENDYxRkQ4MTdENUY3Ci06MTAwMEEwMDAxMkRCRDc2MzE5QjdDRjgyRDhFMjNDMzlFMDhFRTk1NDJFCi06MTAwMEIwMDBGMzNFMDNFMzM1RDhFQTBBQjI4QUMwQUZDNkU3MEQzRjg0Ci06MTAwMEMwMDAwMjhBNzBGNzk2MEVFODI3RTdGMzg2MUMxMjhDRUZERUEzCi06MTAwMEQwMDAyRDg5REZDQkMxRjI3MzYxM0JDNjMzOENGMjY3ODdFMUI4Ci06MTAwMEUwMDBGN0ZEMTJBMzY1OENGNzZEQjFEMEFFMjlCRUZGMjc4NzRGCi06MTAwMEYwMDBCN0I4RUY5Q0JFNjdGOTc5MTZGNkJENjc4MzhDRjFBMzlDCi06MTAwMTAwMDBGRjA3RUY1NEYwMkQwMDgwMDAwMDAwMDAxRjhCMDgwMDU3Ci06MTAwMTEwMDAwMDAwMDAwMDAwMEJFNTdEMDk3Qzk0RDVCNUY4RkRFNkY0Ci06MTAwMTIwMDA5QjJEQzkyNDk5MkM2NDIxMTAyNjA5NTk4MDEwMjY2MTIxCi06MTAwMTMwMDAxMTE0NzE1ODgyNTEwMzRFMDA2NTMxRTI0QzEyMjA2NDUzCi06MTAwMTQwMDA4MTAwREFDNjRBQ0Q0MEQ4NTRBOEExMjJBMkEyMEUwODQ2Ci06MTAwMTUwMDAxNDE1NjhCMDA4QThEMTM3MkM1MjdDREE4QUFEQjUyRUI4Ci06MTAwMTYwMDA5NTk3MDAyQTNCMzE2OEE1N0RCRUZBM0ZFN0RDN0IzM0RCCi06MTAwMTcwMDBGMzdEMjQ0RjdDQ0JFRkQ3RjdGQkM3RDc3N0I5REZERDEzCi06MTAwMTgwMDBDRjM5RjdEQ0IzREQzQkVFMzFBRjJFNjA0MzE4N0I3RTE5Ci06MTAwMTkwMDA5RUNEQTkyQThDNzk5OUMzQ0M1NEM2Q0E5OUNCQ0MzMkFFCi06MTAwMUEwMDAxOEZCN0NGNEJGQkZEMUVBNjAyQ0QyRTFCMTNBODYzMkIxCi06MTAwMUIwMDA3NjRGOUMyMUY1ODMzNDA2N0Y5RTAxMjU5MTkwOEM4QzhGCi06MTAwMUMwMDA2MzJDOTlCMUVGRjFFRkE2QUI1M0M2N0M4Q0Y1QzA3NEVDCi06MTAwMUQwMDBCNTgxMEQ2MzZDOTI5REQxREYyQzE4MEJEQjRENjYyRTIzCi06MTAwMUUwMDAxMzhFNzMwN0YzOTg3MERDM0Y1QzM0QkI1ODE0QTQwNjdECi06MTAwMUYwMDAyODJGNjA2QzJBRjNEMUY3RTlDQzRGRTk1RDJDNDBGNTRDCi06MTAwMjAwMDBFRjY2QUQ5NDdGM0YyMkFGNzczRENDQUZFNDg5RUM0Q0Y1Ci06MTAwMjEwMDAwNjZEMkU3OTVCODc2MUY5REYyRDlFNTQ5QzZGOERENTFECi06MTAwMjIwMDA3MzRGM0M3Q0JGRDBEQkYzNjUyMkQ0NjdFQjYwMzIyMzk1Ci06MTAwMjMwMDA3RTc4QkUyNTM4M0ZBOEY3NTkxRjc3OTYwM0YyRTNBQ0M2Ci06MTAwMjQwMDA4RTIxRjlFOThDMUQzNEIwQ0E2NjFCOTQ4REVCNDFGMzA1Ci06MTAwMjUwMDA2NzQ2N0JFNkE0ODE1REY1QjM5NDMxMThGRjU4NDc1NDk3Ci06MTAwMjYwMDAxRTFCODQ3OTk3MkQxOUQ2N0YzMzVGM0VCQkQ5NTU1RDEwCi06MTAwMjcwMDA4Q0VCMkM1NDZEMkMxRUUwN0ZDQ0ExRkEyRDMwNjZEMTc2Ci06MTAwMjgwMDA2ODZGNEY1QzE3RkM0NUZBRTIxOTlCRTg1MkQ5QzMwMDJFCi06MTAwMjkwMDBFRkRGMkU4MTJGNTBFRkI3RjlBQUJGMTFFQTREREMzMDA2Ci06MTAwMkEwMDBGRTBDQjYyRjFFM0Q3OTU5MzRBQzdGRkM3N0FENDMwMjZFCi06MTAwMkIwMDA5MDE2RjUzMjlENjhDREUxNjM3QzBGRkZGQjg2NkQxQ0M3Ci06MTAwMkMwMDAxNzAzRTlBRDQ5QkI4RDBDRTY3RjZCNUY2RDc5NzEyRTJECi06MTAwMkQwMDBFNEFEQzFGQzQ0NjYwQzk2QzNCODA3MTAwRUIxOENENUQyCi06MTAwMkUwMDBGRjI1N0ZENEUxOTA3NjhDMzVBOTZFNThGN0FEOEVDODg2Ci06MTAwMkYwMDBGODJGMDY0MEI2M0ZFQkZGM0RDRTVCMkQ4REY2RDhCQTBBCi06MTAwMzAwMDA4N0VGQjcwRENFNTE4NzREMzA0RkM1NTU4MkY4NjE0MDBDCi06MTAwMzEwMDA2RjZFQTBBMzMyMjM3MzM1NzdEMUVFRTk0QzQ1RDAwRjMxCi06MTAwMzIwMDA2MDM3ODFCMURCQzU1QzNCOEEyRjlCMkZDMTdBNTczOTdGCi06MTAwMzMwMDAzQ0E1RDhDRkMyMDk5RkNGQzRGNTMxMjNGQkRENjA4MDM3Ci06MTAwMzQwMDBEQkJDREYwM0RDQTBGQzQ0MDM0MDNFOUJCMTUzMEQ1NkY1Ci06MTAwMzUwMDBFNkIyMzBGNjQ1ODM5REYyQTcxQjkyMjgzRERCRTBBMDc0Ci06MTAwMzYwMDBGNDdDNDMwRTk1NUY2QzcwNTJGRUQ3MEVGNzJDRUNCNzAxCi06MTAwMzcwMDA2Q0Q1NTc0NjRGMkU2MzJCQzMyNDFFRjkzQzE2MDkzQTAxCi06MTAwMzgwMDA1RUQ5N0JEODlGOUQzMERFQ0E3NzREOTRBRjZDNkUxQUQ0Ci06MTAwMzkwMDAxRjAxRTlBMkRFMjc5NjQ2QzBGNzQ1MkYyODRFRkM1RUQ2Ci06MTAwM0EwMDBEREUyMzJEQjYwM0VCMzBFN0I1NjIwRjlDQzc5Qjc3NUM3Ci06MTAwM0IwMDAyMjgwOEZENTVFNTE5ODA3QjY5MEE1QUY3QjExRDJEOTE4Ci06MTAwM0MwMDBEMDNGOUQ0QTQwRjg3REQ5MzA5Q0U2NzNBNkMxNDVGM0U1Ci06MTAwM0QwMDA3MUI1QjQxRDg5ODNGNkU3MUE4QTI4N0ZENEUxQkUxRjYwCi06MTAwM0UwMDBFN0U3NjI1Rjk5QjFGRTg0MUQ2REM2MTQyODJGNzQyOTVBCi06MTAwM0YwMDAyRTA2RTM4RTcyMzFCRjFGRjBCN0MxRTRGMTIwREQ2QzMxCi06MTAwNDAwMDA0OEI2M0ExQjIxM0Y3QUUwQTQ2N0VFODU3MURGRTlFMzQ1Ci06MTAwNDEwMDA2OUM0RjY3N0M0OTYxN0M2QzFGNzg5QzNCRDQ2QUMzNzIxCi06MTAwNDIwMDBGNTNCQzYzMDJGRTlGQjg3RjczNTg3NDdBREMwQ0I4NTU1Ci06MTAwNDMwMDAzNzE1ODJEMzg1QkQwMzZFQkYwMUZBN0JGM0E4Q0E1NDdBCi06MTAwNDQwMDA5ODU3QzcxNTAzQ0RBQkUzQTM3MDNGNTM4MkY1MTZCRTkzCi06MTAwNDUwMDBBMjEyNUQyRjFDNjhGNkIzMzRDQzBGNDg2NEI5Qjg0RUI1Ci06MTAwNDYwMDBFODBDRDY5RkEzMzg1ODNERDBERkI5OUQzRjRENDIzQ0E0Ci06MTAwNDcwMDBDOEYxQ0ZDNTM2RkZGNTEzRThBRkZEMzM4MzczMzM4RDc1Ci06MTAwNDgwMDBEQ0ZDQzU1MzkwREZENzJCQzlGOTMwRTQyRTlBRDgzNDYxCi06MTAwNDkwMDBEQUE3QUMyRTYyMTJEMEQ3M0MzM0YzRjBCQzY3MDBFNjhCCi06MTAwNEEwMDBDRjg1QjM3QkRDOTAxRkI2MkI2NTBDRUUyMzFDQ0Y5MTYwCi06MTAwNEIwMDAxREU0NkI1OUJCOUU0ODdGQzAxMTFDNkY3QkYzQUM0RjkyCi06MTAwNEMwMDA5RTgyRkMwNUJGQzE2NzhBODY5NDM1NUY3QzBEQzZGM0FBCi06MTAwNEQwMDA2REIxMzlCNzMyOUNBNzMxMUNFN0Y5ODg4OUNGQ0JCNzBBCi06MTAwNEUwMDAzNURDQjlENTgxRkRGOTg5MEY0MEI5MTlDQjZCNUU3RTNBCi06MTAwNEYwMDBCMjI3QUVFMzc1ODBDMTcwQzhCRkJFMzY4MkY4RERFQkFGCi06MTAwNTAwMDAyNkU3RjE3QTZDRjcwQ0VGRUY1N0JGQjhGRkM0N0U0Q0NCCi06MTAwNTEwMDBEN0Q0MTZEQzBGNjlDMDExNEJGMEFFRjhFNURDRkVEODdECi06MTAwNTIwMDA3RTQwMEFBMDA3RjhFMzRCRkI5NDQwNTgxRTYzMDNEN0I0Ci06MTAwNTMwMDAxRDU4OUEwQ0UzMEREQUQ4NjZFODA5NjlGRTE2QTUxMTc0Ci06MTAwNTQwMDBEMzAxQkQ4QjhFQUFEMEZGMTE4NzgzRTYzMTc4NDc5QUZECi06MTAwNTUwMDA5QTgyREJCNUE3RkY5MzlCMzIwODcwMEFFMkFGQkZDMDU3Ci06MTAwNTYwMDA1RkVFQkFBRkM2RjQ4NDc0NjdDRkU2ODUzMTUwREU1RkM0Ci06MTAwNTcwMDA2OTNFQkIyNDBERTlGQ0MzMDIwRkMxQUY4OUZBNzlBNTFFCi06MTAwNTgwMDA2NUYyMUZFRjYyQjgwRTVGQjIxNUU3RUQzNTNCQjdBNjE3Ci06MTAwNTkwMDBGMUU1OUEyMDdGNjE0RkM2QTY4NzYxOEQ3QjBEQkU0RDI4Ci06MTAwNUEwMDA4ODc3NUY5OUQ1QjkxNUYxRUVGNjNEODlGOEFFODVGQUYxCi06MTAwNUIwMDAzRUM4RDdFNkZCQTJBRTg3RjJEQUNGRkEzQTgxQTI1ODVDCi06MTAwNUMwMDBFRjY3NkYyRTQyNzhDQ0RCRjNGOEY4OUU1MEVGQzI0ODBECi06MTAwNUQwMDBFNjA0MTI2MDk1QUY1QzFFOEZFRDU4NkZDNjkwMjU1Q0U3Ci06MTAwNUUwMDBEOEQzOTgzMDAzREEzRDkyM0I2NjI4RDI5NzVCNkRBNjRDCi06MTAwNUYwMDA3MUQ4N0MzRUNFMTNCMDFEQUQwMDMyRDYwQUMwNDkxMDcyCi06MTAwNjAwMDBBNDBBRjUxRTgxQ0ZGODNEQjYyNUU2NDAwQTBCRTI2NzQ1Ci06MTAwNjEwMDA3RUNCOTIzNDIzQjQxRkUyQjEzQTU1REMzNzY5QkVFNDk1Ci06MTAwNjIwMDAzQTU4RUY3QjU4NjUwNDlEN0ZBNzcxN0YyNjlCNDVCRjk1Ci06MTAwNjMwMDBGNkM5QTlFRTFGNzFGRTk5QzU3OTI2RkI3QkMyQ0M3QzU5Ci06MTAwNjQwMDA2MUQwNEY2RkY4QUU0MEJBMTFGQjg1RjJBREMwNTdFQUVBCi06MTAwNjUwMDAyMTdENDZDQzFGQzZCRDgyRkIxNERBQkI5MDBGQTdDMDFDCi06MTAwNjYwMDAyMTlEMEZGMzRDNzlDMjQyRTdDMEI1OEU3RkM5NjQ1QjEwCi06MTAwNjcwMDBBNTAwRERDRTBGRTc3QzZDOEMzODdGQTdDNTM1QkVEMUQ5Ci06MTAwNjgwMDAwQUVCN0QzNURDNjM0QzgzNzE2Njg5NzM5RjE5OUQwRTdGCi06MTAwNjkwMDBFNEVGRkU3MDk3MjlBRDA3OUVBM0VEQTlCODA2Mzg1NzgxCi06MTAwNkEwMDBDMzMwM0Y0RkY1RjQ0OUM4QTA3MzM1M0IxQUY5QkVGNTg2Ci06MTAwNkIwMDBEQUNFRDU3N0MzNUREMUQ4RkU1QUVCRUJGOUVEQTI2RjU4Ci06MTAwNkMwMDAwQzJDMUZFODYwRDFFMzE2RTIxNzhEQzg5NzYxNUQ4RDkxCi06MTAwNkQwMDA5MUMzQUNDODM3RDg2MTQzQ0QxMTM4Njc2RkU0MkQzQjY3Ci06MTAwNkUwMDBGQjVCMTQ1OTQwN0NBNTkxQjEyRUUxRjUyNkVDN0YwRjAwCi06MTAwNkYwMDBGMDlCMDA5QzEzMUVFMDAzQTNBRUI0QUI5Q0RFOEYxREU5Ci06MTAwNzAwMDA4QTFFODI3Qzk2QjkyMjgxN0U2RUJBNjI2MDlFOTA3MzQ4Ci06MTAwNzEwMDA1MERGMEZFMDJCMEZFMTM4OUE0NTMwNEZDOEI5RUE2MjNECi06MTAwNzIwMDAzMTY2RENCN0NDMTZGQjVGNUJCNzk4RkY0ODgxQkY5MUExCi06MTAwNzMwMDAxRDFGNDUzMDFCQzIwM0JFREJCQTVGRDcxQjYyNURGRkM2Ci06MTAwNzQwMDA4MkVCODI3NDVEQTZEQjg1RjBCRkYxNkJCQjExRDc3N0JFCi06MTAwNzUwMDBBM0IxMjQxNUU1MUE5OEY3NzhGQzNFRUE2QjgzNzZERUEwCi06MTAwNzYwMDBERjg1NkJGMkQ3M0FGRkZCMTRFNjMzRTA3RUZDQ0FFQzgwCi06MTAwNzcwMDBDN0ZERDg4MkM3MjNDMEIxNjU2RUFFMUZGN0ZENUUzM0RCCi06MTAwNzgwMDBDRkZCQTJBMDFDRjBEODEyQzk3Q0M4NDc1QTRBMTJGQzYxCi06MTAwNzkwMDBCRTM0RTQ4NzUwOEU3Q0EzMDdFM0U1NjFBMkZERjQwNDM4Ci06MTAwN0EwMDA2QURGRDMwMjIwNDU3RTcwNTdCOEU4QkZFRTlEODE1OEJFCi06MTAwN0IwMDBCRTI0ODVGODQ4QTNDOUJGMkExREZCRkZCOTRBN0NGOEFGCi06MTAwN0MwMDAyM0MxQjdEN0M1MDRFRTUyQTFERjc1NUYyNTMwMUNFNzAyCi06MTAwN0QwMDAyMzE2NDg5OThGRTM1NDg2MTNERkJEQzE2MEI4QTdDNEMwCi06MTAwN0UwMDA4NkY1NUNDOUIxMDBFRkJERkY1MEU5OUM1ODk3MEY3OUMxCi06MTAwN0YwMDAxQkYxRUQ2OUNERjA3RDVEODkyQjM5MUNGQjI5NDkzMDVBCi06MTAwODAwMDBEMDdDNTQ1NjQ3REZEMzc4QkI0RjRDQkNERTBDODFBRjU1Ci06MTAwODEwMDA4RjA1N0U2MDVGRDNCRUY3NEM4QzMwMjJEREFFNDkyQjU2Ci06MTAwODIwMDBGM0E1OTExQ0U0NEE1NjYwQkU0RjU1NjQzMkU0OUIzM0Y1Ci06MTAwODMwMDBBQTZFNDkyMzdBNjk3QTgyRjhENzM0ODEwM0Q5MUYzNkEwCi06MTAwODQwMDBCMDBFNDNCOTk5RkY0RDlGQjUzNTBDRjE3OTQ3NjU1ODA2Ci06MTAwODUwMDAxQjlDQUNFQ0EzQ0FBNTkxMEU2ODdGODc0NzBENTg4MEZFCi06MTAwODYwMDA5RkIyMjk4NUFFNEVCOTJFMURDNzc1RDFCOEI1Q0RGRDQ1Ci06MTAwODcwMDAzMjRFODVEMDczOTkwNUY4MDRGNEZGNTI5ODY3MjVFRDQwCi06MTAwODgwMDBEM0ZERjk1NEJFMUY4NDlBRUY2MTNGOURBOEM4REM4NTUzCi06MTAwODkwMDBGQjhBNTVDNDExMUQzMDYzQTAxQ0YxRjA2NkJCOTVFNEMyCi06MTAwOEEwMDBENEVFRThBMTExRTEzRjQ4RDAyOUUyNjUzMUM3M0JDODQ5Ci06MTAwOEIwMDA2Qjk0NkY5Q0Q2REY4RkVEOUYzMzcxQkFGMUVEMEUyM0YxCi06MTAwOEMwMDBCQzE2NERCMjEyOUUzQkE2ODU2RkIyNDBGOTNEODI2RkI5Ci06MTAwOEQwMDAzNTRFMEI3NzI5NTBBRkYxMTU4QkRGODA3QzQwRTFGNDZBCi06MTAwOEUwMDBFMDdCMjM5MkZBQUQzMUYzN0NDRENCOTk0NDRGN0JDREE1Ci06MTAwOEYwMDBGRTE3QjY2MUY5OUI2MTQ0MEYzNTUxN0NEQzlBRDc1MkUzCi06MTAwOTAwMDAwNEJEQjlEMjk2RTNCODZGNTg4ODBFNkFDMjFERDE1NDlGCi06MTAwOTEwMDBGRUFGNzE0NDI3MkVBQjY3M0JDMjAzRThBRTBFRTU4OEZECi06MTAwOTIwMDAxQTczMjAyQjA2RTA3QjVDRDBENTcxNjg4M0Y4RjNENTcxCi06MTAwOTMwMDA0NUQyQkM2OUNCNDNERUQzRDg3QjMzRTJEMzYzRTZFNTUzCi06MTAwOTQwMDBFQzY3MkE5NTFGQjdGM0YxOEZBRkU2RTM5NzNFNUFGREE4Ci06MTAwOTUwMDAyRTAzQkMxRDc3OEY0RjlFMDVGMzM4NUUxNzQxNzJFMzVGCi06MTAwOTYwMDA1RkVBRDU4MDM5MEFGNTlFRjZGNTU5NTBFRkUyRTI5MzM5Ci06MTAwOTcwMDBDMzM2QzBGQzVCOTc3RTlBOEFGNDUxQkFCNEI2MThEQkQyCi06MTAwOTgwMDA5NTU2MkQ5RTg4RTc2Njc3RkJCMkI0MDYzNjdGQzgzRTQzCi06MTAwOTkwMDA3RTNGQ0QxNUMwRjU1QzQ4RjMxQzQyM0E5ODlGREIzQTg4Ci06MTAwOUEwMDAxQkU1RTc4QkU2NjNDRkEyRkUxMTE1RTczOTgyREYyRjQ3Ci06MTAwOUIwMDBCREZBRTUzNjJFNTdCNzY3RTE3OTMwQ0ZDOEU5NDM5RUQ3Ci06MTAwOUMwMDBBQkYzMDVGREREOTdFRTc5OTdDRTg5RjBDMDRDM0MzRjQ3Ci06MTAwOUQwMDAyMjcyOEY3MTdFQjdGOERBRjhGQ0Q5OTZBRDdCMTUxOEM0Ci06MTAwOUUwMDBBNzNBQkM2NTFFQTVBQTNGMEZGQjM5QTcwNEEyOTQwQzI5Ci06MTAwOUYwMDA4MjlGMDdGN0QzNzk3QjIwMEFFMUVFMzE3MDc5QUU3QUQ2Ci06MTAwQTAwMDBCQjc2NURGODY3ODQ3OTU1RTMzRkEwNUQ3NUIzRUEwQTZDCi06MTAwQTEwMDA0MzVDMzNCRjE5RTc1RkNEQ0NDMUZBNjk0MTNDNDEzRjJDCi06MTAwQTIwMDA4NDI3NjZGQkNCQ0MwNzAwRkU1NTJGRjQyQjQwRkRBMTlECi06MTAwQTMwMDAzQTY2RkYyRjZFQTA3QUQwNEVFRTEzRjVFQUJDNUNDRjdCCi06MTAwQTQwMDBENUYzRTFFQjNCMkZFOEZGQkNBNEZGNjk4MkZFQzVGOEJDCi06MTAwQTUwMDAxNzVGNERBNEYxQ0Y5NUY4QjMxMEZFMTcxNTUxRUYwNUIwCi06MTAwQTYwMDAwQkFGMDdENDYwQzQ3OUZFOUFEM0QzN0E5M0NGODBGQ0JFCi06MTAwQTcwMDBDN0Y3NzM0NkY0NUMxREQ3M0MwQ0UxMjJGOTEwQ0NDMURBCi06MTAwQTgwMDA2NzgwRkFFNzc2QTU1MDdEQzlCNzk4OUIzMTZDNTdCRDUyCi06MTAwQTkwMDAyQjc5MzM5N0NGODQzRThCMTM4NUZBNTUyRkYxRkUzMTk2Ci06MTAwQUEwMDA4RkZCRjBFQzhCMjk2MjNDMkU0RkVCRjFBNzVGNkY0NDdDCi06MTAwQUIwMDBCQTgxRTRBOUY1OTI3RjQ3Q0E3REVFNEMyQTAxRjg2NzE2Ci06MTAwQUMwMDA2RjMwNkJFQTVGOEMzNERGRTM4MjdFRkJGOUI1REY2NTY0Ci06MTAwQUQwMDBGRjg5RTk1Q0ZGRUJBM0MzNUI0RkI1RkQ4MDA1RjdEMzRFCi06MTAwQUUwMDBGMzhDRjZBQjdFNUVBOUEyREQ4QjJGNzZFMjQ5RTU3ODJBCi06MTAwQUYwMDAwMzMxNTBEMjg3ODNDQkUxMjY4NEYzQzc5REY4QjgzNzAyCi06MTAwQjAwMDAwNUY4NkEzNUMyMjAzRDA4OUZCREY5OUUxNEU0RkYxNzIxCi06MTAwQjEwMDAzMThGRTc0MjBDRTQ3MzUxMEVFMkYwOTY3OTA5NjczRDlDCi06MTAwQjIwMDA5RDJERkQ3ODc2NEEyQkI0QkY0NUMwMDcxMDlBODhGNEY2Ci06MTAwQjMwMDBEODI5QkY5ODQwMUZDOTQ1N0RCNDcyRjBBOTRDRDQ1MzQxCi06MTAwQjQwMDBFQkZBQzE1MUQwQjk5RUQ5MUJGMkFEQjg5RkU2NkNDQzdGCi06MTAwQjUwMDBCNzk2ODVFMEExNzFGQkUwQTMwRTgwRjNGOUVENDYyNzdGCi06MTAwQjYwMDBCMkU1NDZBM0ZGMTcyODRGMzc2RTU3OUI3RDhDQ0FBRDYxCi06MTAwQjcwMDAwOERGRjNCNjgzQkZDNzdBQjMzN0M2MTRBMEJDMkNEQjNCCi06MTAwQjgwMDBDRkQ5NzA1RkJGOEExMEI4MEZEOEFFQzVDM0MwNjY2RDJECi06MTAwQjkwMDA3RUQwN0U2RDdFMzJGMjg2QTEzRkJFNUQ3RTQwOUIxRjgxCi06MTAwQkEwMDA3QzU0OUI2N0VEODAyREMwODM2QUU1NzhEQTM3REM3OTY5Ci06MTAwQkIwMDBENDAxNzhFQUUzNTc5REY4QTk4RjZERDJFNDA5Mjg1RjQ0Ci06MTAwQkMwMDA2QzU0OUQ5OTUwREU2N0IxRkJCNjgxOTAzRkJENzE5NjI0Ci06MTAwQkQwMDAxM0QxNUNBOUZBRTYzRDAwMzhBQ0ZDNzRGQzUxM0MwRjIzCi06MTAwQkUwMDBDRkIxRTYwRjI3MDAxRTY2QjdBQzM1MUIxREI4NkUyREMyCi06MTAwQkYwMDBEREVFMzUwODdBN0Q1MTIxM0E5OEVCRDc5NjVGQkRBRjhGCi06MTAwQzAwMDA5NzA4M0NCMjlDNTA3QUQyRTMxREM2QkREMzA1MTNBQTA3Ci06MTAwQzEwMDBBOTVGMzRGODE0MUM5OTk1QzU0MEU4MDBCMzExQ0Q2QjU5Ci06MTAwQzIwMDBDRDI4QjdGREYwMzgzRTJFMEZEQTVDMEU4NDg3NzczODdBCi06MTAwQzMwMDAyRkJCQkU3RTJDM0IzOTE4RkVCMUZBRkRGMTM4NkZFRkE5Ci06MTAwQzQwMDAyMzBBQzkwRERFREY2NDFGQzY3M0EwNkRGN0Y0NUIyOUFDCi06MTAwQzUwMDBCREIzODhENjJGRUQ3OTczNUE5NDQwMjRFNEVEQzMxREJCCi06MTAwQzYwMDBGQjVCQTFERDJDQkZFMkM0Nzk5NzJEQjMwNEY5MTlGQzFECi06MTAwQzcwMDBBRjYyQjU2RTFFRUI0MkNBNjFGRTczRjYxRkY4OUIwMkFGCi06MTAwQzgwMDBGRDU3NkVENEI2OUIwQjdDMTZGOTU3RDU5NkVGMkRBMTY4Ci06MTAwQzkwMDBERkE1REU3ODdEQ0IyNjE1RDczRDRCQ0VERjM3OEFFMTQ5Ci06MTAwQ0EwMDBCQUFFRTc1NTU5QkM5MDZGNEU2MTA2Q0U4RDVCN0JCOEVFCi06MTAwQ0IwMDBEN0E3NjNCQjc1QkMxREIwNEIyRkFFQjdENjY2NzZFMDI5Ci06MTAwQ0MwMDA3QTZCQUQyQzEwMDFGMzM4MUE2OTc2RDlFMUZCRTUwRDhBCi06MTAwQ0QwMDA5MTY0NDc5QjZEMDE3OUIyODA1MjE2NTY4MEVEOUNEMThDCi06MTAwQ0UwMDBEOEVFOEJGN0I4M0RBRDM2OEVFM0JCRjYzOTg1RjRBODY4Ci06MTAwQ0YwMDA1QTM0N0U2MkZFNzk5RTlGQ0IwMkI0MEVBNDEzNTdFODRECi06MTAwRDAwMDBGQUZDREEzQzZCRTJGQTU3OEQzMTcwMDBFMTUxQzU1QUJBCi06MTAwRDEwMDBCOUZFMDQ3ODc0NDlGODAxQkM2QTYwOUQxRkM1QTJCQzg1Ci06MTAwRDIwMDBBNTZCQ0Y5QzFFMUM3N0JFOERDQjRGRjNGNzdGNkYwOTUxCi06MTAwRDMwMDAyRDk3N0FBMEQ0NTMzNzg2NzMzREYxQjkyQzc3Mzg4RTJFCi06MTAwRDQwMDBCMzVDNzEzRDY5ODU3OTJFMTdGMkI1NkY2RDE4RDFFRkRGCi06MTAwRDUwMDA4QzRERkNCQzAxMzkzNjBCRTFCMjZFNkRCMjEzRTU4Q0UzCi06MTAwRDYwMDAxOTIwOTc4N0UxQkU5OTFCNEVGNTQwREUyNUJCNEMzQjExCi06MTAwRDcwMDBDOEQ1OUJEM0IwN0U3MzAwQ0Y4RDc1OEZBNzkxMUMwRDA2Ci06MTAwRDgwMDBGMjJGQzFBNTdENEQ5ODdGQjM4MjcyMzA5NzYzRDZBREE3Ci06MTAwRDkwMDBDRDI2MzlGQzc1Nzk0RUFERTE3MjU3MTc3MjMxOTVCMzk2Ci06MTAwREEwMDA0NDJFQzc3RjgyNEIwOTkxODNDRkY0RjA3QzkwMUVCMjEyCi06MTAwREIwMDBBRThBQTVBRTY0M0M3NzJBMjY5OTBENjhBRjYyOTU3MTFDCi06MTAwREMwMDBENzI0M0Y2QzE1NzI2NDNCQUMxRkQ3NzE0QTcxMUYzMTM5Ci06MTAwREQwMDA4NEM4QTM5RkUzNzkwMEUzMEMxQkUzREEyNkVBMzlCMTY4Ci06MTAwREUwMDA1RTg1QTFFNEUxOUI3MEJDRjUwNjA3OEVENzA5NkY5NzdECi06MTAwREYwMDAyQjBCRTc3MTZBNkQ1ODAxRDJEOUIwMzFEQzVFNzQzQ0JGCi06MTAwRTAwMDA5RkYzRjc4ODIxQ0NFNTg3RjRBMjM4NjcyRTIyNUYwRjg1Ci06MTAwRTEwMDA0OTkzQzI4MUZFQTA5RjUzODVEQzVFMUQzOUM0NEQ3Njg3Ci06MTAwRTIwMDAzQTM4QUI4OUNGRUJEN0YxNzdEMTRGODVEOUZEQUYzN0MyCi06MTAwRTMwMDA3NjMxMUYwOTFGMzY4RUNCMEJBNzE2Mjg5QkY5QkMwMEY1Ci06MTAwRTQwMDBCRjkwMUZGNkNCMzBCMkVGOUQxMkU3OEY4NDMzRDBDRDI5Ci06MTAwRTUwMDA1MEIyRDMwQjdFQjU1NkQwQ0I1QTEzQTcwM0RGNUNBRThFCi06MTAwRTYwMDAzRjA1RTk4NTExM0RBQzEzN0FENjBDODE1RkI2ODZDQjgwCi06MTAwRTcwMDBCNTQwMkYxQ0NFNkI5MjA1QkRDMERDOTExRTBBMUQ1Q0Q3Ci06MTAwRTgwMDBDRUJFNDY3RDA5RjAxRTlCRDFFMzZBQkQ0OUUyOUIxOUE3Ci06MTAwRTkwMDBGRDQzRDFCRUQyMURCRTZCRjdFRERDRUI4M0YzQjNFQUFECi06MTAwRUEwMDBENzhGNDczMUE4NzdDNkQ4OTRFMDg0RjYzNTVCOTc0NzRCCi06MTAwRUIwMDBCOTIwM0Q2REY0NDVEOTYxRkMzMzdFQjVDOERGMDVCQzcyCi06MTAwRUMwMDA2RkNGOTA3NjY1OTc0RDAxRkUzMzBGRkZFOTQwNzlFN0NDCi06MTAwRUQwMDA5MTg5QjhCRUJGNkUzNUQ5OTEyNUNDREY2RTIxRkQ2OUYxCi06MTAwRUUwMDBERTlFQjkyNDY3NDNCRThERTc1NzdFQTU2MjdFQkZENkRFCi06MTAwRUYwMDA3RTVFRjVBQkM3MTMxQzA0NkY1RjhBMjEwOUQzNDAwQURECi06MTAwRjAwMDA4Mzc0REUxNjkzMzM4MDc2RTkwRjU0MjcwQzAzNzI3M0QzCi06MTAwRjEwMDBGQjBBOUM5RkJFM0RDRUUzMEFFMDdCN0VCM0VBMzU0N0U5Ci06MTAwRjIwMDA1RjVEM0U1RkYwOTdGOTdCMUVGOTBBRUQ3QUYzNzVGNjg3Ci06MTAwRjMwMDBGQTRBRTFCN0QwREJFQjZGQ0E4ODhDRkYwMjBERDNENzNBCi06MTAwRjQwMDBCMUVCNTAwRTAyQjgzODAzQjg2RjYxM0U5OTQ0MjZEQzBECi06MTAwRjUwMDBERURCRjhDMjEzNzk2RDI4MkY2Qzc5Mjc0QUM5MEREQUM4Ci06MTAwRjYwMDBFQkE1M0ZBM0EzQjlGQ0I5RDcxQ0RERUZDNzhCQzI2RUJECi06MTAwRjcwMDAxQkM0MTdFNzVCOEVGRDBBRjIwMDUwRDA3OTVBNjMwQTUyCi06MTAwRjgwMDA0NEREMDBGMEE4RDk2NDIyM0U1M0IzRjNGOTZENEYyMTNDCi06MTAwRjkwMDA5RDdENkNBMUYzQkM3QUU3NUIxRjVFOEZGMkVFNkU1MzEyCi06MTAwRkEwMDA3QzMxNUY4NjRENDkwOEUyNjlCRTgzREJDOTI0NUVBQUI1Ci06MTAwRkIwMDA3RUYzOTZEOTMxOTA3RjVGMUMxQkM0NEZGNUVFMDM2NjFDCi06MTAwRkMwMDAzNkYwNkEzODhFNkQzRTYwNkVCNTc1ODFBN0U2QjZGMTczCi06MTAwRkQwMDA2NDI3N0FFMTVCMzNFRTgzMzM2RjJBMkMzMUVERUFGNjM2Ci06MTAwRkUwMDA5NTlCREU4QTQyNzkwQ0UxODRFNzkyQzQ1NzI3RkU3NDEwCi06MTAwRkYwMDBGNUExRkY4OUFGMERBMTdBNzZENDJCQkFDMzlGMDNDRjk5Ci06MTAxMDAwMDAwRUQ0Q0JGNzQ1QjIxODE4QkZGMjEzOEJCRjE4RjFCQTQ0Ci06MTAxMDEwMDA2QjUxMTRBRUUzNEI2MzFEQTdGMzY3OTYyN0EwNUM1NzkzCi06MTAxMDIwMDA2OUYyMjVEODI5RTVERjJCOUZCRDhGRTg2RjhFNTI5Nzk3Ci06MTAxMDMwMDA2MENGMjVGQTRFMzY5MENDRTA0QkM2RjVDRERBNzgwNzc2Ci06MTAxMDQwMDBBRDZGMzZGMzEwRkQ1NTNFQTNCQUZEOTA3RTYzNjQ0NTQ3Ci06MTAxMDUwMDBCQkJCRDgyNzZGNjc3MEJFRjlFNTY2NDAyQUFDRUY0QjgzCi06MTAxMDYwMDBCNERCMjBERkY4ODMyQUY0REMwNTc0N0VERjI3RDZDQUUwCi06MTAxMDcwMDBEODQyQ0E3RjIzRTRCNjhEMTk1MkRFMDU2OTIyNDQ1RjQ3Ci06MTAxMDgwMDA5Q0JGNjVFNTMxQzRDRkQ5REVBRTQ0OUMyN0MwQzEyN0UzCi06MTAxMDkwMDBFMEE1N0MwRkZEQUFFRjE3MjY3MkZDMzA4NzcxOTg2OEQ3Ci06MTAxMEEwMDAwN0U3RTg1OEZDOEVGNThGOTk1QzY4RjcwRTY5MjdGNDFFCi06MTAxMEIwMDAzOTNFRkVCRDYyN0M5ODc3MzhFQUFCNUYyNjcwQjk1RDM5Ci06MTAxMEMwMDBCRkJFNkYzQkY5MDAzQkM2NDJFOUFCQkI3REJGRTUyMTJDCi06MTAxMEQwMDBBMkFCQUYzRkUwN0M2NTlFQkZBNDg4Q0E4Rjk5MDI4OTBFCi06MTAxMEUwMDA1OEVFM0YzMDQ1MjFCRTYwNjE4MUFFRjZGNTE2OTNEOENCCi06MTAxMEYwMDBEN0RBNzI5OEE3NTEwOTg1RUY5QjVDMEU5RDBENzI1NzQ4Ci06MTAxMTAwMDAyMDY0MUYwN0U5QzYxQ0ZDNEVFQkZFQTU1ODQ3MkJGOUNGCi06MTAxMTEwMDBEM0E0MUY2RThFRTAwN0ZBNzVFQkY5QzMyMTFEN0Y5MEYzCi06MTAxMTIwMDBFREQ5QzZBRUZENDA0MUJFRTBBMzcxNkJFMDNDNDEzOTU0Ci06MTAxMTMwMDBBM0U2NjMwQjlEMUIzNTNCNEQ2RTg0Q0ZCOTFEODczRUU3Ci06MTAxMTQwMDA5QzgxN0E2OEIzRENDNzVBN0VBQkRGQzc5NTJGMEZFRDYxCi06MTAxMTUwMDA3MjFGOUY1QjlEREZGNTNFODZFRjVERUVFM0Q1MEFGMUUyCi06MTAxMTYwMDBCN0ZGMkVCRjg1OTM4RUVDMDZEREVERDczOURERjBEQkMyCi06MTAxMTcwMDAwQjNBNzg3RUMzNzJBMzZGQzA0MkJCQjcwRkUxNDcwNzNCCi06MTAxMTgwMDA1NzA5NEYzREZGNUM5RUUxMjBGOEVBRjkyN0ZDN0RDMDNFCi06MTAxMTkwMDA0MkUwMjhFMTI3RTk5MzMxMEY4REQzNDlDNzkyNEUyNUNDCi06MTAxMUEwMDAxRDc3RDJBOTdFQkQ1QTM4RUFDQjc3MjM3RjgyRjlCODYyCi06MTAxMUIwMDA1RjM1NzFGQjU5OEI0MkYyMzZCNDNCOTIzMjg0RjZBOTBCCi06MTAxMUMwMDA4QjhFM0ZENjc0MjQyNTNFMzRFRkQ3RTU5Qjc1RjU1REI1Ci06MTAxMUQwMDBCQUJDNUI1N0RGQTNDQkQ3NjlFQUQ3RUMzRjY0RTZGQTJBCi06MTAxMUUwMDA0MTQwNTNDRjUyN0YxQkU5MTk1N0NCMTE3RUVFRjdEOUZGCi06MTAxMUYwMDBGMzk1RDk4Nzc0RDFBQkREOEM3Q0QxQjQ5NEY5MjI1MUFECi06MTAxMjAwMDBERTdENDMyNTc5Rjc5MkEzM0QwQUU1OTJFNTYxNUM2RUE4Ci06MTAxMjEwMDBCQjY0MTdGOTE4OUU2RkVGNjE1RTgxN0M1MTdFNkYwRjgyCi06MTAxMjIwMDBFMzc2OTI0QkVFRjZBODk4MTAzREJEQUQ0NThENDI3QjFFCi06MTAxMjMwMDA2Q0FCOUYxNTc1NjU0NzIxQ0IyOEMwQjU5NTc1NTdDRTBBCi06MTAxMjQwMDBFNUI3NDJENTk2NUE4RkY2RDAyNkQ1MDk2NEMyMkE5NkJDCi06MTAxMjUwMDA0QzhEQTJCODg3OTY4Q0RCQTdDMUY3NTk2RkFCMTQzRUIzCi06MTAxMjYwMDA3MDI5OUNEQjE1OThDRjY1QzRCODgzNzI4RTQyNzY5QTNDCi06MTAxMjcwMDBGOUQ2OEY4NDc1OTVCN0YwRjg4MzhBRDU1QUZDQ0VCNjI3Ci06MTAxMjgwMDA0RDg5MEUzODkwRUY2OEUzMDRFNkEwNUU5NzgxRkE5RUUwCi06MTAxMjkwMDBGNjdCMTU1QjRERjQ1NkE1REIxNzFFNjFBN0Q1RUYwQjRBCi06MTAxMkEwMDA3NzVGMTEyRjkwQ0ZGMjg1M0Q4NkZDMUMwQjA1QkYyRTdBCi06MTAxMkIwMDA1NDczNkY5RjA2RjBCRjc0NTQ2NTE2Qzg3N0I0QTg2QzVBCi06MTAxMkMwMDAwNUFFNzc4NzQyRkUxRTc0MDhFMDdFOUIwN0ZCMTJFNzlGCi06MTAxMkQwMDAyM0UxNzMxRUY3NEQ3NkY3NzJDOUY5NTczRTFCRjYwMEVFCi06MTAxMkUwMDBEMkM5REU0RkYzOUU4NkY0RkNERThGQjM1RUM3RkNCRTMwCi06MTAxMkYwMDAzRkE3N0VDQUFFQUUzRkY2Q0RCRkNENDQzRTdDRTk0REEyCi06MTAxMzAwMDAwQjQzRkFCRUY0RTY2RjUzRDEyRTc4RTkzNTBCRTlDQkU3Ci06MTAxMzEwMDA5Nzk2NUFCOEJERjlDRDQ4M0ZGQTIzMkZGNUU2NzI2RTdECi06MTAxMzIwMDBFMzFCREZFNkI1RDJCOUJCOENGMEY1NDA1RjMzOTc5QjhBCi06MTAxMzMwMDA1QUZFRkQzOERBQUIzQjVBNjA1NTI4NEZCQzE5NDFGQkM5Ci06MTAxMzQwMDA2N0ZFNkI2MUU0MEZCRkY0QzZCN0MzNDJFMzI2RkVCQjgyCi06MTAxMzUwMDBFQjkxRkVFRTRCOTE2Q0RBQ0I0OEI3NDJBRTlGRkZGQUIxCi06MTAxMzYwMDA4OEU3RDE5RjVCQkJFNzgwQjkxQ0NBQzdGRUNCN0ZFNDhGCi06MTAxMzcwMDAyMUZGQkNGNDMyOTc5MzJFOUE1QTlGNDU1QkUzOEEyRDQ2Ci06MTAxMzgwMDBDRTVGOUE5MkQxM0UwNzlERjU2NEFDQ0ZENkJBNDlCOEVDCi06MTAxMzkwMDA0RkFFODYwQjg3QzMyNTgwMDNBRTBCRTA1Mjg5N0NCRjFFCi06MTAxM0EwMDAzQjc4M0M4M0YwRThGMUNGMDg4RkFGNjY3MjdFNzYxRDA0Ci06MTAxM0IwMDA0M0ZGNkYxMDJFMEFGNzIzQjQ0NEZBQUQwQUFEOUY3RkE2Ci06MTAxM0MwMDA3RkYzREIzQ0U0MzczRkI0REVEN0ZGNjlGMUZGQkZCMzA3Ci06MTAxM0QwMDBERThGRkY2OUYxQ0JFOUREREJENzQxRjNENEQzRkRENTU3Ci06MTAxM0UwMDA3NEJERUYyNzk0REYxNUU5QTRGOTVFRTM3RUZGREJGRjEwCi06MTAxM0YwMDA2N0Y4NEVDQ0ZDQkY4QUVGQjcwNUJFMjNFREU4NTdCQ0JCCi06MTAxNDAwMDBGNEM2N0ZBNEIyMUZCMUVFNjFGRjQ3RDcyREU1RjUzMUQ5Ci06MTAxNDEwMDBBQUYzNjgzRUQ0N0Y4NzM1N0ZFMDRDMjNFOUEzNEJCOTFDCi06MTAxNDIwMDBBMzNDNTM5MUZBMUJFOTQ3NjMxOTNGQTdDNzVBQUI0OTNECi06MTAxNDMwMDBERTFDREI2QjBEQzlDNThEQUM4MEZDMTBCRTVFMkFGOUNECi06MTAxNDQwMDA2MzI4RjgwMkUwRjBEQkE0N0MzRkY5OTM4QzgxNUU4QjhCCi06MTAxNDUwMDAyMDNGMjZBNTk2RTJCM0Y0N0FFM0Q4RjAwOTQ1Mjg4RjE5Ci06MTAxNDYwMDAxRTVBMDJGMzgyN0UwRTQ1MUFFQ0U4MkIxRUQ3NEIwRDU2Ci06MTAxNDcwMDA1OEYyMjg2REMzRjQ0OEVBNkQ0NzUxNkUxOTY3RDNFQUY0Ci06MTAxNDgwMDA0RkI3RTlGNEExNUIxQ0RBRjIyMkY2NzIzQ0ZBQ0Y4QTdDCi06MTAxNDkwMDA3MjREQ0MwRkYzMTk4RkY1NDNGNEM2RDE5OTc2NUFFNzA0Ci06MTAxNEEwMDAyREFDNjk5OURERjZFM0UxRjQ5ODgwRDNENTcwRjhDRkRGCi06MTAxNEIwMDBFMTc2MTU5Qzg0OUU2QzE0RjVGNTcwMzNEQTFFM0U4NjM5Ci06MTAxNEMwMDBFRDhDMENGNDVFQkU1RUQyOTdBNURFRkI0M0YwNjQ0MjY5Ci06MTAxNEQwMDA5RjM2OEFBMTI1N0M4REJEQjg5RjM0QTQ1RjgyOEI4NDAyCi06MTAxNEUwMDBGQjhGODVCN0M0OTMxRUVFMTJCRTEyNkU3QTNDQ0M0NkJCCi06MTAxNEYwMDA2MzU0OEYyMEZDN0IxOUYzOERCOEVGNkUxNDcyRkMzOEE3Ci06MTAxNTAwMDA2MzBDQ0ZGNzNBQTZCQTY5M0ZGQTM5OUQ3RkVEMzRBMjUyCi06MTAxNTEwMDA3QzMyREExNjQzRjE5QUNDRDEzQjA2RTU0QzE0MzFCRjRDCi06MTAxNTIwMDA0RjYxQUM2Qzc4Q0MzMDA1RDY5QjYyNjQzRTBCRTg5Qjc3Ci06MTAxNTMwMDBFODQzMjMzQkVBNDM0NkZGRDIzNDFDODdEQjZCN0IxQjJCCi06MTAxNTQwMDBCOTVEMUE3NkI3MkZCQzgwRUFCQkNDOTBGNzNFMzY4N0UwCi06MTAxNTUwMDBCOUEwQkUzNzg1MzkxNTVFOUY0NUM3NTIzODFBNTMzMTM5Ci06MTAxNTYwMDAyRTBCNTI2Q0U3OERFNkZEN0ExMzk5N0YyOUM3MjdFMTkwCi06MTAxNTcwMDBBNTJGQTZFOUQ0QUZDQjEwQ0JEQjQ3MTU1MDdCOUY4MUJECi06MTAxNTgwMDBCNzc3MTkyMUVEOTNDMUVERUJFRENCMkRBNDdGNzg1NzAzCi06MTAxNTkwMDBGNkNFNDJGRTUxM0M0NjZCMzc4RUM4RTI3NjY2OTlGRTI3Ci06MTAxNUEwMDAyNENCNDFBOTZBNzAyNkExNUM1Q0I2QUMxRkU5NDM2QUYyCi06MTAxNUIwMDBCOEJCRjYxNUI0RjdFRjhBMjA3QUY0QUVCODdCQzI1MDA4Ci06MTAxNUMwMDA5Q0RGQUUzODI3NEVFRkVDQzREREMzNzhGREU5RjdGREI0Ci06MTAxNUQwMDAwOUJFN0JCNjg3RDFGN0E3QjIzQzQ3MzIwMUFFNjcxNThCCi06MTAxNUUwMDBDN0NDNTdFMDQzRDkxRDg3Q0M0OTMwODRBN0I5RTQwMjYyCi06MTAxNUYwMDBEQUZGMjZGQTc2RkYxRUZEOEMxM0E3QTg1NDdGMjJFMzlDCi06MTAxNjAwMDA3MThGNkM1OTA0RjlBMzI3RjhCRTMyMjY0MTdGMTM0MDJECi06MTAxNjEwMDBEOUMwRjJCNjMwN0JFQTAyOThCRjU3RDg3QkZGMjBGNkRDCi06MTAxNjIwMDA4QjFBQ0UzQzJGMjNCRjVBRDEzQjJCMURCRTRGNjA1RDgyCi06MTAxNjMwMDBDNzAxREJCM0I4OUQ0NjFEQTM2QzQ0RkY1MDlGQjFEQ0NFCi06MTAxNjQwMDAxRTJGRUI2MzNGRDg2RjgyODBDNzY3OTlEQ0VFMjRGM0NGCi06MTAxNjUwMDAwMDU3QUE1RkIxQ0FEMjk2ODE3QUNGMkE1MzIwMUJFM0UyCi06MTAxNjYwMDBBNzczQzZCNEUxM0E4QkQzRDlGODBEMDhGN0ZCNTVCNjhBCi06MTAxNjcwMDA5OUU2REJFRTI1M0I3NzY0OEUwM0YxRTAwMTkyQTZGODU0Ci06MTAxNjgwMDBDMkE2MzQwN0RBQkREQTQ2MzcwN0QwM0ZEMEY2NjQ5QUVGCi06MTAxNjkwMDBCM0QxNDE1OEE2NzgxQ0E5NjdCNThEMEVGNDQ1QkI3QzIzCi06MTAxNkEwMDA3QjNFRjczMzFDQjdCNzQ2QTI3RTU4NkVCMzUyN0M4RTkyCi06MTAxNkIwMDA4Q0VCOTk2NUU3RkJCQzRGNjNFQjlBRUI1MEVGN0M1Q0RFCi06MTAxNkMwMDA3NTZFODZGQ0FDQzdCOURGRTU3MzlCRDVBRkEwQkVCNjFGCi06MTAxNkQwMDA4RUVGNTNCNjVBMUJDN0MzRUM0RUIyRjc5NDM3OEQzNjE0Ci06MTAxNkUwMDBBMzdFNTk2MTczOTk3MTlEQzlEOTlFRUY3MTVERUMzQkUxCi06MTAxNkYwMDA4MERGMzA4Q0UzNjRCNDE5QkM0RDVFOEEzMzUxQTM2MDQzCi06MTAxNzAwMDBERkUxM0UzMTNBQTI1MEVGRDVDNzAxQ0QxNzcxM0YzMjJDCi06MTAxNzEwMDBGRjUyOThDNzlBMDU3MDJDOEI3NkVDNDI3QTM5NTE5RjBDCi06MTAxNzIwMDA0MTc2Q0Y5QjkxRUUxMDdFMThDNzg4RkUwOTYzNkIzMjFECi06MTAxNzMwMDBDRUU3RDU0QzRFOEZDNUIxRjYyQzFCRDE3MzE4NDMzODZDCi06MTAxNzQwMDBCNDk5MDA5MzkwNkY1QjFFNjY0MDNGNUJGMTUyNEVENzk5Ci06MTAxNzUwMDBCMENGQUM0NjY4RkY5MDkxODVBM0RGRTA0M0QxQkU3NDYzCi06MTAxNzYwMDA4OUQxQkQwOUYyQkRBQ0NDMTgxOThCNzQ5NTRGNzRGREFECi06MTAxNzcwMDA2ODhFRTczMzVDREZFOTlGQjNFMTQ4MEZFNUFCRDc5MkIyCi06MTAxNzgwMDA3RjQ1RDIwNTMzMUUxQjE3MDdFMzlDREU5QTU2ODA3Q0VCCi06MTAxNzkwMDA1M0QyRDFBMzM5NjNGQTY0ODVEMkMzMTQ4NUU4MDBEMjQ5Ci06MTAxN0EwMDAwMzE5NDQwRjkzRkE2Mjc5RjE5ODQwREY4NUI5QTg4RjQ1Ci06MTAxN0IwMDBENjMwMTc5RUVGNDlDQzg5NzI0MjA3NkIyN0ZGNjM4N0FCCi06MTAxN0MwMDBDREVDNDAzQjk3RTQyNzkyNkYwMDVFNURENjg0MjAxREYwCi06MTAxN0QwMDA2QzgzRjNERTY4NjI2QzdCODM5NUQyMTcxQkVDQ0MwOEJDCi06MTAxN0UwMDAzQzZFNDc0MzEyRTU3NzM1MzgyODZENkVDOEExRUYyRjYwCi06MTAxN0YwMDAzNzM4MjlCRkE3NjEzOEU1RjczNkI4MjhCRkJGQTE4OEI5Ci06MTAxODAwMDBEMkQ3MUFEQ0Y0NURGMjI1ODAwQkYxMjFDOTU3MjQzRkIxCi06MTAxODEwMDAyQUI3OTlEQkQwMUYyOUY5OTI5RTZFNjYwMjc4NDcxNTg4Ci06MTAxODIwMDA1MDdCRTI3QjkyREZFMTNBMEMwNTQxN0UyNEYxOUJBRUQ2Ci06MTAxODMwMDBCODdENDk2OUM4Qzc1QUE3MjNGRTBCRDVGMzNCRjdBMTZBCi06MTAxODQwMDA1RTVFNjk3MzkyOUVDRTM4REZFQjAwN0E0NUI4QTQ5QTRCCi06MTAxODUwMDBEOTdFQjRCQjM2MkU3MEI1QUQ0QzBCQzJGRkFFNEE4NUY3Ci06MTAxODYwMDAxOTQzRThFQUVFQkEzMDY2MEMzOTM3RUVBOThGRDFFNEI1Ci06MTAxODcwMDA0QkVCRkZGODU2MjJGNDNGMkVERTMzMkQwQkU2NzFGQ0M2Ci06MTAxODgwMDBDMTJGOUVGOTMzN0M3RkVFQzFCMzk5ODg2Rjk4QzdENjdDCi06MTAxODkwMDAyNzcwRENDNUUxOURGMzg4QzVGQzMyMTNGOUEzRkE0ODMzCi06MTAxOEEwMDAzQjA4RkMyMTVFQ0ExOERGNkZDRjNERjg3N0RBREY2REE5Ci06MTAxOEIwMDBGNTE2MDdDQUMzOUYyMDlFMDBBRTdGMTE3ODJBQUJCN0VBCi06MTAxOEMwMDAxMEZDQkNDQjRGRUVEQzg3RkI3Q0IxOTlGODVDRDkzMkM1Ci06MTAxOEQwMDBCMTBGNTcwMTNDNDNGQ0JCMjc5MjE5RDkyMzQwOUFBNjZDCi06MTAxOEUwMDA3OEY1MTMzRjM3MDcyMkEwRkYxMzBBREZCRjBBMDgwNTY4Ci06MTAxOEYwMDBBNTE4RjdCN0VBQjcxRkUxRkU1N0VBOEY5MkZGREM2MzNFCi06MTAxOTAwMDBCNTA1NDgwRUYwOTlDRTg3RjZBN0Q0MUZBMTdBQUNCNURECi06MTAxOTEwMDA1NzBDREExMUU5MUM0M0JFM0ZDNDY1NzZDMEJBOTFBNkU0Ci06MTAxOTIwMDAxMTZGNjUzOTA3NTkzMkZBNEQ5QTE0M0I2RTk5MEFGMUQ1Ci06MTAxOTMwMDBCRDYyOTU0MkZFNDk4Q0JCOTkwMjcyOUYyRjRCMjUzQzlDCi06MTAxOTQwMDBCNjY0MUE2OTVGRjVDQzYyNDJBRTZCQTJGMzQ5RDI2QjAyCi06MTAxOTUwMDBDNTZBNjg4N0ZCQTIyOURGM0MzQjg0MEY5Nzg5RUZFNUM2Ci06MTAxOTYwMDAzOTA2NEFFNUY3MjZFQzE3RkI1Qjk1M0YwREU1ODk5RUE2Ci06MTAxOTcwMDA1ODlFOEI2OUMxMzQ4NDZGNEZEQjc4QTMxMjgyRkY4NzM2Ci06MTAxOTgwMDBCM0Y4RjgyRDk5N0NGQzlFQjhEOUUwRkYxRUNFNDkzN0ZDCi06MTAxOTkwMDBDRkNBNDVGQ0YwRjM0QjhFNTM5NjUzQjAwMkUzMzhDQkRECi06MTAxOUEwMDA1NjhGNDZFRUNCMUE0RENFQTQ3OEE4RjcxOEY2NDNFQjI3Ci06MTAxOUIwMDBCMTczNzlDMUNBRTM5NTZCQkEzOTNGQTRGREVDMzRGRTJCCi06MTAxOUMwMDA3MzA0QUQ5QkVDQkE1NUJCNUVEQTg1NzFGQzU1OUY1QTJBCi06MTAxOUQwMDAwOEJGNTU4MzQ0RkM1NEFFN0ZEODY0MzIzNDZBRURENUQ5Ci06MTAxOUUwMDBFMzVFRkEyQzhBRkMwRjdCNzg1QzI1QTREQzlFQkFCOEY3Ci06MTAxOUYwMDA5MkRCNUY5REIwQUZCQUYwRkYxQ0RFRjU2OTU0OTc3NkJECi06MTAxQTAwMDBFQTNERUEzNUQ5QTlFNzJCREY0NUExRkMyMEQ3NTNGOEY5Ci06MTAxQTEwMDBDNjM3MDkzNDBGRTUwQUY5N0ZFNkJGQjEzQ0ExQUI3QkJECi06MTAxQTIwMDAzNzdBN0I3NUE3M0Q1QkQ4RURGNEU1N0E3QkREOTEyQ0E5Ci06MTAxQTMwMDA5RDVGQzBDOEU4MUU5N0I0RDczMTM1MzcxQUVERkJERjdDCi06MTAxQTQwMDA4ODdCMUVEREU5MzVEMkJFM0Q3RjAzNzQxMjA3RkJEM0QwCi06MTAxQTUwMDBFODg4NDY3RkQ1QTU2RUU0RTlBODZDMkUxRjVDMTBGNkQ5Ci06MTAxQTYwMDBGMDRCM0I1NEQyNzMyRUVEODhBNEZEMzQ2RkM3NjM0NzBGCi06MTAxQTcwMDBEMDdGMzg2RjhCNDJEM0E4NjVDNzA4NkUwMDRGNjYwREM0Ci06MTAxQTgwMDAzREM3MzBERTJDRUVFQTc5NzdGODMzQTNGMTFDQTk3RTRFCi06MTAxQTkwMDAyOUIyMEVFOTZDNkVCM0UyREEwQUYzRTlCMDNBQTI3QjNFCi06MTAxQUEwMDA4NENDRTdBQ0EwRDc2QTRCRjMzMDgyQjM5ODdGQUI5MDdECi06MTAxQUIwMDBCNzY0QkRCOTJEOEY5MUZEMThFQTVEMjQzOUU4RDcxMUJGCi06MTAxQUMwMDA4Q0RGRkY2OEZGM0RDRUYzRENDNkMxNEVGNEZCQ0Q2RDZECi06MTAxQUQwMDBERTNEOEZFNDg4MUQxMTc2MTQ4MUNFOEEzODYxRDlDRjFFCi06MTAxQUUwMDA1RjA1NURGRjM1OEJDQjJGRTc4NDNGRThEQzJFOTVGODUzCi06MTAxQUYwMDAxOUNFMTNGN0Q3NTk0NTFCOEZGNzlENjhGNzVEMTY4N0U5Ci06MTAxQjAwMDA5QjFGRjc3NzhGNjBGREI5Q0Q2RDUxN0RBMUZFOTdGQkNGCi06MTAxQjEwMDBGRjQ4QTkzOTlCQUY2QkFFRUQ1ODFFOUVCRjVGRUU4OUEzCi06MTAxQjIwMDAyMDdGRDY5NzdCOUUxRUZGM0E4Qzc3QTE3OTc0M0NFRTdFCi06MTAxQjMwMDAwN0Q5N0Y3Q0I2ODlFMzYzQTM1QTg0RjA2MjdFMUVGN0RGCi06MTAxQjQwMDA1MjhCRjAxRDFDM0FDRkI4NERCRUI0RDA3REM3RTM3RTlBCi06MTAxQjUwMDBDRUVERjk0RDk0MjEzNzg4Q0Y1QUFCQzc5QTlDOEVGQkI2Ci06MTAxQjYwMDBDN0VCNDZCRUYxQjlDMkUxNjlEQTMzREE4N0Y3OThFNjI2Ci06MTAxQjcwMDBCN0U0MzNBNDY3REE3N0M5NTQ3Rjk1MjFBNDlFRDlFNEVBCi06MTAxQjgwMDAyNEE2NjhEQzVGRTI0QTIxMzg4QjdCNDgyMjVFMUVFRjg4Ci06MTAxQjkwMDBENUQxQkRBMjEyMkJGOTI3NjYwRTcyNENCRDBCRjlFNDBDCi06MTAxQkEwMDAzQjI2OEU5NzVFOEUyNzUwN0U5QkY5NUUxQ0M1NEQyRDgxCi06MTAxQkIwMDA0QzczNENDNUY5MkY3QTVGQTU3OERGOTk4MzA1MUY0OEQwCi06MTAxQkMwMDA2QTFEOEE3MThCMzVBQjE0RTY4Mjc1QjZBNTcxQjlBMTExCi06MTAxQkQwMDBDNkFGMzIwRkU0N0IwMjNERjgwMDE0MjNCM0QzMDUzRkI4Ci06MTAxQkUwMDAwRDY0RTE3REMwQTcyQTBEMkUzMzlDN0ZDN0NEQ0NBNzA1Ci06MTAxQkYwMDBBMkRERTg2NTFFQ0Y1QzkzQ0VFMzg2OUY0MkJBODdCNDMwCi06MTAxQzAwMDAyNjM2OTAxNTA3RkQ5RDE3RjhBQzk5MTRDOEMyMzg4OTdGCi06MTAxQzEwMDA5QTk3OTMyOTRFRTJCQzk5RkIyREYxM0JGQTQ5NkIwQTQ2Ci06MTAxQzIwMDBBMDNERDQ4QjE3RjFCMEQ4M0UyNjg0N0U2QUNBOUMwRUE0Ci06MTAxQzMwMDBBQ0E3QzYzQTFERjkzNjlDQUZGRDIyQzlCMUFGNDQzMkZDCi06MTAxQzQwMDA5NDYzMERGQjIyNzk5Q0QzQUZDMjM2NUI0MkYwRTRDRUE1Ci06MTAxQzUwMDBFNjcyNzJCQ0MwMjM5QkMxRTMyMUQ3OEI3OEVDRjU1QkE1Ci06MTAxQzYwMDA5M0ZEQThCRkM5RkFFQjREOUVFOTA4MDc1QzA3Q0FFRkQwCi06MTAxQzcwMDA3M0NENEQ1OTI4REZDQUY5Q0U4RDZBQTI3OTlFMTdGNDJCCi06MTAxQzgwMDAzRDM3QkM4OUM3NEI5Qjc5M0MyNUQ2Qzc3QzlCODk1MTg2Ci06MTAxQzkwMDAxQzc3RkIwQjE2OEEyNzM5OUI3QzZDMkY4RTdGRjY4NTcxCi06MTAxQ0EwMDA3RTBDRDdERjk2RTY5RkJEOUZDQTQxN0UwNEJDNTVCRDIyCi06MTAxQ0IwMDA2ODA5RTA3QUNFQkNDMEVEQ0Q2NzRDNUMxRTNCNTM5MjA4Ci06MTAxQ0MwMDBFNDQwQkMxNTREREEzMDkzRUMzMTVCMkMwQUUyRkQ4QzFDCi06MTAxQ0QwMDBDMkNDNDk1OEJFQjU4N0QzODdFRDFCRUEyOTRFQkEwQTU0Ci06MTAxQ0UwMDBEODA0REVDNzgxQjQwOEVGRDU5Q0Q5REE4RkUyQzNDRTIxCi06MTAxQ0YwMDBCQ0FERTI4RDI4RkNCRTBBQkY3QjU4RDNDQzlGMjEzQ0YzCi06MTAxRDAwMDBCNjczRkRFOUVDOEJGRkRFMkZGNDFFOUE0Q0FCQjY2ODgwCi06MTAxRDEwMDBFM0UwMjQ5REM4RjIwNUQ5NUM3RjU5MjBFMDdDNUYzNjYyCi06MTAxRDIwMDBCNzM3RDQ0NjM0QUY0RkE3NzU3MkI4MDM5RTQ4RUYwMzU4Ci06MTAxRDMwMDAwRTEzRjlGNDEwOEM4M0M4NTQ5MDZGM0MwNTc0RjUzNDdECi06MTAxRDQwMDBEQTE1QjY3M0ZERUFFQzBFMTNDNTg1NTdFRDhCNzQ1MUE5Ci06MTAxRDUwMDBEQ0Q5Q0FFQjBDMTQwN0ExNzIzOUJDQ0EwMEUwQTM1NDQ5Ci06MTAxRDYwMDBBMTdFQUIyNkU1RjgxQjQ5RkU2NkE0QzdCNjZGNTVDNTM0Ci06MTAxRDcwMDAzODhDRDk3MEREREI3ODlDNkYzMUNBOEE1NDNFOTBDQUFBCi06MTAxRDgwMDBDRjg4RkM5OUJEMDM0OUFFODNGRTVENzg1RkE5RUE2NzAxCi06MTAxRDkwMDAwRjcwMzg0RUFFN0M5NzkxMURDMzRBRkNCNUE2RDM4RjA5Ci06MTAxREEwMDAzMzMyMUFDRkJCREE5NTM3NDRFMzNENDBGNjlFQ0E1MDMyCi06MTAxREIwMDAzRUQxQzNFOUIyRDE5OTg4N0NGNTcwMzZFNzVGRDU3QjE3Ci06MTAxREMwMDA5RjMxMjMzRkE4MTZGNzQzQUE1RjU0QjgzRjE5RjYxOTZECi06MTAxREQwMDBERTkzQUM1RTcxQzMxMzQ0OUZCRjM3QjE0QzU4Q0ZGOTRCCi06MTAxREUwMDBFNkM3QTI0MkYxQjE0QkY0RDM1OURGRUNBNEZBRDU1MEM3Ci06MTAxREYwMDAxRkZCQTk1RUYxNEUxNENENjc5Qjg5RTI0Q0Y0NzhCQ0MxCi06MTAxRTAwMDBFNkY2MkZBQUQ3RDRCRTkzM0U5QUI5MURFNUFBRjVCMzNDCi06MTAxRTEwMDA2MzNGRjkxNEZBRkY3QTQ3OThEMzQ3NUY5QkU5NUVEOThECi06MTAxRTIwMDAzOTUzRjM2QzVDRkZCOTlENjFDNDhGQ0VDNTcwRkVGMDcxCi06MTAxRTMwMDAyNUYwNEY1RjM2Q0VFM0I2NDcyOTJFRUIwRjkzRTkzRUYwCi06MTAxRTQwMDBEQzFDQkZCNjVGMzlFRTZGOTA2RjYzQkM1NDlDMzMxQUQ1Ci06MTAxRTUwMDBFM0ZBNkFERkUzRkMwREYwNzIzQkI1N0ZDRjQ0RURGNUFBCi06MTAxRTYwMDBFQkY4QTU2OEQ3QjkzRjc3NDYxMDNEOUNFQkM5RjE3MkY2Ci06MTAxRTcwMDA2RTU3MzY5RDQ3NkQzMTlDQ0U2MUJFQTk3ODdGRUVEQ0YyCi06MTAxRTgwMDBDRUVDN0NCQTk3ODZDMjBERDA0Mzk1RDA2RkNGQzUzNEM3Ci06MTAxRTkwMDBBN0RBNDNDQURCNEM0MjRGMEI0MDREQTQxQjZDMDM3MkM0Ci06MTAxRUEwMDA1RjU1M0Q5N0FCQUFBREFCMjkzRTA0RTM2QTg3MTU1MDU5Ci06MTAxRUIwMDAxQUIwQzQ1RTFEMUYwQkY0NEFGQTYzNzgwRURGNUYwQzg0Ci06MTAxRUMwMDBDNzRCMTBGMURCMjRFRjM0OUI5MTdGN0I4NDVDNThCM0NDCi06MTAxRUQwMDA0MzFGNUZDQkNCQ0Y2NDc3REEzOTFERjEzMjlFMTdFOTEwCi06MTAxRUUwMDBEMEE3NTA5QzQ5RjVCMjA1NzM5MUNFQUJFQkQ2REU4NUY5Ci06MTAxRUYwMDBGQjRDQ0VCRkRBQzg4QTUwMEY2QjUzNTQ5QTQ3NUIxODFECi06MTAxRjAwMDBCQjY3MTI5RTFCQTFFMzg0Qzg2RDVGMDdDNzYxRjYwNDFGCi06MTAxRjEwMDA5MjU3RTkxQ0JCOTJFREUwNzQ4MzI3MjZERTEzNURBNjgxCi06MTAxRjIwMDBBQ0E2NzFEMkE0M0VDQkQ3MjVFMTA0RTAzMDYzNUM1RjYwCi06MTAxRjMwMDBEQjY4NTFERUNEQkFFNTNDRjVFQjk2RjNCMUU1NzA3RTlBCi06MTAxRjQwMDBENDk2RTY3ODc0MjRFMkY5NzcyQUREQTdCREZDRERFMEJCCi06MTAxRjUwMDBFOEQ4MkVFNEIyRTBCOTZFMEVDNkI3QzJGQzkzOTFGNjkzCi06MTAxRjYwMDBEMEVFOTJDREU1RjE2QThDOUY4NTc5NjY2REQ0QzY3NTA5Ci06MTAxRjcwMDBFNzZDRDFFNkZCRUZEMEU2NzNGNzY4RjM3OTJEREFCQ0I2Ci06MTAxRjgwMDBGM0IwMzZBRjg4NzE1MUNGQzZGQkJCQTg2NzYzOEE3QUJFCi06MTAxRjkwMDBCNkMzQzJGNTZDQ0NBMzlFOEQyOUVBRDlGODFERjU2Q0E5Ci06MTAxRkEwMDBDQ0EzOUU4RDc5RDRCMzMxMkZFMThERkEzNkU2NTFERjgzCi06MTAxRkIwMDBDNkYyNUI3M0I4M0M1NjIzRTIyNDExMEY0OEVGRUNENTEwCi06MTAxRkMwMDAzMENEN0Q5RjRCNkZGMDdCMUM0MDA3N0NERjRDMzdEM0JGCi06MTAxRkQwMDBCRTc5MEE2QjkwREVDMUVENEEzRDI3NUIxRDE4RUZCQjUxCi06MTAxRkUwMDAzOEQ2MzMyNDY3MjhERUY3MzhCNjIyMTlGMTY2NkNBNTk3Ci06MTAxRkYwMDBCOEQzRjlBRkYxQjhEMzlBODIzMDFCREEzNzVBOTc3RjRBCi06MTAyMDAwMDBCOTAyQzMzOUREQjE5RTExNThGRjkyQTk3RDFCQzJCNzM5Ci06MTAyMDEwMDBCNkZFMTBERDdCNkY1REUyNzhFRjI2OEUzRkIyQjNCMDg3Ci06MTAyMDIwMDBDQTU4OTI5QkJDNzhDRUM1NzY4RjQ3N0REQzM3NUJBREI2Ci06MTAyMDMwMDA4REYzRDZDNzdERUJFM0JERjU3NDIwRTVCREU3NENFRDMwCi06MTAyMDQwMDBDOUM4RDc0RkJFNjA1RDhERjMzRjE5MjZFRTlGNENCM0Q0Ci06MTAyMDUwMDBFQUZDRkQ0MjRFNUJBMzZDQzZGMzdBNDY0RTJDRjc5RjFBCi06MTAyMDYwMDAxRDA1RjlCQzhCNzM1NkE2RTU1NzA2OTMxQ0RFOTk1RkQ4Ci06MTAyMDcwMDBBRDE4RTg1RTVDNTIwMjlENDM4QkM0OUM1Mjk1RjZCNjQ3Ci06MTAyMDgwMDA5NUM4RTdFNjFBRThEQ0JDMEM3MjE5OEU3N0Y5MDM5NTVGCi06MTAyMDkwMDBFNDg3RUMwRDA2Q0Q3QUZBRjlDMzM1RjQzNTYwN0JBQ0Y0Ci06MTAyMEEwMDBFRTVFNDM0RjRERkQ0MUZCRDM3NUY3MUFGQTZCRTNFODQzCi06MTAyMEIwMDBBNzJDMzk4MEZBRkRFNEQ1ODMzNUY1MkFEQzM3RThFMDMyCi06MTAyMEMwMDAyOEU2MkRFNEQ3MEEzODNGNUNCMEJFQTcxNjZGNDg0NTE2Ci06MTAyMEQwMDBGQzJFOUFEQkQxQjYxMkU1RDM1N0MyRTg1RTU4MjVGRTM2Ci06MTAyMEUwMDAzRkUwOEI5NUQwMjdERTY3QUNEQzIzRUUwM0Q3NkJDRkM4Ci06MTAyMEYwMDBFMTcyNzEwRTU1MUE5OUNGMUUxQkE0QzM0QTNCNzNDNURBCi06MTAyMTAwMDA0MEZCQjlGRDhGRTUwNTUwQUY3OEZCOEZDM0VDRTlBODI0Ci06MTAyMTEwMDA1NzhDNEU0NDdFOTQ2QTcyNTExQzZDQ0RFRUNDOTgyNTNGCi06MTAyMTIwMDBEMEVGQTIwQ0NGNDMzOUIwQ0Y0RTM1MURGQTQ1Mjk5RUQyCi06MTAyMTMwMDA4N0JCQjlCRTc3NzJGNTZGQTIyODRFNENEMDVCQUFDOTk3Ci06MTAyMTQwMDAxRThFNzhERkQ0QzRFM0UzRDAzRUE2QzYwNkU5NjI1MzEwCi06MTAyMTUwMDA1MzVDNzg1RjVCNzBCRDQxM0FGODhFRjAwNEY4RTE3NjJECi06MTAyMTYwMDA5Q0NBODNFNEY3RTg2ODE2RUIxREFERjg1MDlFOTZFQjI5Ci06MTAyMTcwMDA1QjI4Q0UxNUQ2OTdGNzczQUZDODlGMTJGQTg1NUNFNzM4Ci06MTAyMTgwMDBGOTdFMDdGMjFDNzhGRkEyNjE3RkFBOEFGQ0RDQjA2M0FCCi06MTAyMTkwMDA1QjMyQTRCOTE2Q0YxNjVDNEZFNUE2Q0MzRjhGODQ3MTk1Ci06MTAyMUEwMDBBQUZFQzREN0YzRjlCQUIxNTEyMzUwRkVEQzY5NzIxNjA2Ci06MTAyMUIwMDA0MzdFNjVEM0YzNjZENEIzQUI4QzdFMzNDNTU3QkVCMEQ0Ci06MTAyMUMwMDBDOThDRjFDNTM3NkZERjQ0REY2NzZGRjc1MjNDRTUxQzAwCi06MTAyMUQwMDA1NjQ3RkFFNzY5RjlFRTgwODA0N0U1MTg2NUEzMURFNkUyCi06MTAyMUUwMDAxREQ2OEZGMzhGQ0E3MEVFQkYwM0Y5RTgyRDdDRjdFMzlECi06MTAyMUYwMDBGMjc2MjUxRkUzNzhBNkI4Nzc5QkJERjBGRDBEQzE4RjYxCi06MTAyMjAwMDBGNUZCQTRFM0REQzk4NTNEMDgxRUZDQkVDNjlGMTg2ODJBCi06MTAyMjEwMDBGMTE5NTdFRjhCQzk1N0QyNjg1RjRDQjkzMjgwRjRCMkNECi06MTAyMjIwMDAzQjAyRkRCOEZFOUJBQkQzN0ZERkU1RUYyRTc0QjRGMDJECi06MTAyMjMwMDA3RDUwNjkwRUM0NEZDNjdERjJBNjg5RTREQzVBMzg2RjIyCi06MTAyMjQwMDA4NjE3QTA1RUNERDhGNTkwQkE0N0FBMUE3QTlEM0YyRTgwCi06MTAyMjUwMDA0MjQzQ0ZEMzU4QzgzRTgxRkVFRUM0QTA5MTkwRkM5NDc3Ci06MTAyMjYwMDBFMjBDNERGREE5NTMwNkU4RThCRjIwNTg0RTdDRTQ3QTA1Ci06MTAyMjcwMDBDREZEQkFEQUM1M0U4NzQyNzJFNjE4RUQ3N0M2RTMwNEIzCi06MTAyMjgwMDA4MTQzNkJEQUQ3QjI0OUMxN0E0OERGNUJCODFDNUNCQkNCCi06MTAyMjkwMDAyNzY2MzNEQUZCMkEwRDVDN0Y5QUU2RTFERkU3RURFNzlDCi06MTAyMkEwMDBERkQ5MzRBNkQ5ODc3RDMyOUM3RkU2RTdBMjg5RkMwMjdDCi06MTAyMkIwMDBEMjlFM0UwREZGREQwNUZDNDExMkU5QkMxRjhFRjdFMjA4Ci06MTAyMkMwMDBEMTFFQTFCOTNGMkRGQzgxMzg2RkM0NDNBREIwMUJENUUxCi06MTAyMkQwMDBFNjcwQkI1MUFERUY5ODE5REYxRDAwRjgxQkUzNjJBOTUyCi06MTAyMkUwMDA5RTM1MEVFMzIzOUIxNEIyMkI2MkJBOThFMjI1QjU3MTlBCi06MTAyMkYwMDA1OEQ4MUZDNjMxQ0UzQkFBN0E3MTlGRThDQjgxRUU3OEMxCi06MTAyMzAwMDAxQ0ZGNkIzQ0FFNzRDRTA2N0QxQ0U0NkFGMjQ3Q0U0M0U0Ci06MTAyMzEwMDA3QjUwMDhERTZFRTlFNzEwRkUzOEZGOEE5RTA4QkY2MjM4Ci06MTAyMzIwMDAyNTlGRUU0NUVFMzg2MEM2MzhCQjI5NTM2MkYyNzFERjU3Ci06MTAyMzMwMDBFOEU5NEJGMjc1RDhDRkE0N0Y3N0JDN0I4OEU4QUJBM0U0Ci06MTAyMzQwMDBEMjQ4RjRGQjQzNzA5OEU3RTI3NjU0M0RERENENjZDNzkyCi06MTAyMzUwMDBDQzc4NEY3Q0Y2MUVDNTg5RkEyOEQ2NDM3OEY0NDQ3QUE3Ci06MTAyMzYwMDBENEMxMjMyRUY2NkEzODQ4Rjg3NEMyNkI4RjNFQ0U4REU2Ci06MTAyMzcwMDBDMzY5Q0U3RUM1MUZFODAyNEVGQTc5NzcwNzM3Qjk5RTRBCi06MTAyMzgwMDBEOTFFQ0Y3OEU0MEI3MjVENzM3MEZFRDgzRkNDMUZGQjczCi06MTAyMzkwMDA5NzdFMDgzNjVDQkYzRjMzQzgzRTM1Q0ZDREUzNjNGNTRCCi06MTAyM0EwMDBGNDMwRTkwQUI3QkJEQzc5QzU0OEU5OTQ2MkVEN0VDNDM0Ci06MTAyM0IwMDA3NkI4MkZFRUI4OTI0MEU1M0Y5NjVFRTZDMTNDRjlGRDU3Ci06MTAyM0MwMDBBNzZCQTMxM0I5MEVDOTc3ODNGQjgxREYxQkY4QTE3NzM1Ci06MTAyM0QwMDA4MUY0NzZDNzNCRkEwOUJCRTM1MDM2NTQxMzhGMkNGOENGCi06MTAyM0UwMDBBQUJFQkQzRTFFNTlDQTAxRkFGM0M1MUI2OUEwQjhDOUYxCi06MTAyM0YwMDAwRTVCM0FDOTE3OTJDRjdBQzRGOUUxNTlGRTBERDVGM0I1Ci06MTAyNDAwMDA0MDNEM0U5QjA0Q0Q3OUUzMTFGNkJGODU5MUU5RjQxRTcyCi06MTAyNDEwMDA0M0VBOTJCODA0QzQ5MzM3Q0M0RUYxRjdERTI1MkFDNUJGCi06MTAyNDIwMDAzRDdCQTE5RTIzNDQzRTU5QjEyQzIzMTVDRjhCMTMwRjI2Ci06MTAyNDMwMDA2NTNGRUIwM0I5RkRDNEZERjEwOUMzNjE5QzkzQ0I0RDJFCi06MTAyNDQwMDBGMTU2NDdCMERFODlFNTg1QTkxOEE3NzE3MkFENjU5QTg2Ci06MTAyNDUwMDBCRjBCNzgzNUY0RTNFNzQzRUQ4MzFGRDE3OTc2QzFGMDA0Ci06MTAyNDYwMDA2RUQ0MzQ2ODVGQjNGQzk1MjgwQ0YzQUY1RUNFQ0ZGMTI5Ci06MTAyNDcwMDBDNDBDQ0Y4M0ZEQzg3RkJCNjk5QjFERTE2N0RGOTQ4N0Q4Ci06MTAyNDgwMDA3NkRGMzU3MDFDNjA3QjI5M0Y1NDJEMkY0QzQ0RjlBMjE4Ci06MTAyNDkwMDBFNjFGODc5RUI1RTMzREVCMjVBNjA0OTQzRkNGN0MwMDY1Ci06MTAyNEEwMDBFN0ExNDJFNzE5QzkwREE3QzNBMDBCRjJBNzQ1OTIxREVBCi06MTAyNEIwMDBFMUI0QzI1Q0U4NTczQTZGMzhGMEQ3OTVBODE3RTYzNzExCi06MTAyNEMwMDA2NzA1MjBBREI1NzhENkY0NDNGOTdGRjlGMzI0Qjc1NDA2Ci06MTAyNEQwMDAzREJDMjQ0QjU1QjFERkNDRThBRUVDMjYzMkREMjZDRTM4Ci06MTAyNEUwMDA2RDk0REYzMTQ1RjkxREUzNjQ1MDdFQzczQ0NBRUY5ODE3Ci06MTAyNEYwMDBBMkZDOEVERkU3NkZEMENBN0ZDRjA4N0ZBMUI0MjdGNzk5Ci06MTAyNTAwMDA2OTZDQ0Y0N0ZGOUQ2RjBDQ0JBOUEzRjNENjk2ODNGMkRFCi06MTAyNTEwMDBGQTIyMjVEQzg5RkM2ODExQ0E0QTk4RkYyQzhDRjQ1OEYxCi06MTAyNTIwMDBCNjI1OTk5RkI3MDJDRkY1NTZFRTM3RkE1NkRDQ0ZCREU4Ci06MTAyNTMwMDBCMTFENjRCMjEwRkFCQ0U5OEE5NTg1REU5QjFEQ0Q2MjlGCi06MTAyNTQwMDAzNEY5QjFENjY0NERGRDQyN0I5QUE2RkNFNkE0N0U5QThFCi06MTAyNTUwMDBGMjVCMUNGOTlBRkM2RDM5MjMzNEY1MjczODQ3NkJGMjhFCi06MTAyNTYwMDBCNzBGQkY0NTUzQkZDNDU1QTJDOTRGMkU5QUFFQTk3RjFFCi06MTAyNTcwMDA4N0RCQUIyOTlGM0E2REFFQTY3Q0JBNjc4MTI2N0Y1NzcxCi06MTAyNTgwMDBFNUZEOUFGQTc3RDcyREQxOTQ3RjZCMDA4RDE0RThBNURECi06MTAyNTkwMDAwNUY1MkUwQkJFOUY2MkE1RjRBN0FBREQ4ODdDNjNEMTRBCi06MTAyNUEwMDBFRjMyNkQ4OEVGOTE2MzBENzU1REQ5RjczRjE0NzQxQ0EwCi06MTAyNUIwMDAzN0MwRjUzRUQyNEI2RkYxM0U0RTZGRjFDRUNEMjkzQzg4Ci06MTAyNUMwMDA3Nzg2QTIxRjEyQTg4QUY0REQ2M0M5NDhCRkZBN0FGQTk3Ci06MTAyNUQwMDBGMjkxMTEwNzJGM0IwMDg3QTM1RTM0REY2MTA0M0UzNDg0Ci06MTAyNUUwMDBGMkJBODM4MzMzMjBGRkQzMTc2RkU0RjkxQjBFRkUyNjY0Ci06MTAyNUYwMDAxREYyMEQyRjJFRTVGOTQxMDcyRjYzQjlGOUE1MzEzQ0U2Ci06MTAyNjAwMDAzRjk5OTFFOEYxNDhGRjhFMjkxODRGMzJGMkE2RjRENTkwCi06MTAyNjEwMDA0RTZFMjdFOUYyOUVCOTRDMTEwRTc4NUYxQkUxODA2OTdFCi06MTAyNjIwMDAwMEU4MTdEMzgzNDBCRjk4MUUwNkZBQUQwMEZFNzQwNDdECi06MTAyNjMwMDBFODE3RDNBM0EwN0ZFMkY3N0YwNUZEMTNEMzc3NDFGRjBGCi06MTAyNjQwMDBDNEY0RjdBMDc3NjI3QTBDRjQ0RTRDRkZEMDMwOEREMkYwCi06MTAyNjUwMDAwRjFBM0NENEVFQzM4NjRBNEEzRjZBQThBM0VGOUYzNEMwCi06MTAyNjYwMDBENDUzRkE5NzA2MUY3RDI3NDczRkI3NDMzM0NERkQwMDZDCi06MTAyNjcwMDBGNDMzQTIzRjcxQkZFOTdDQTgxRjU4RkEyQkE1N0ZCMkEzCi06MTAyNjgwMDBCMThFQjU0NjIwQkY2ODM1QzY3QzYxMERGQTFEQkJCNzVCCi06MTAyNjkwMDAwMzE4RDkxNzIxRjI1ODM0NzM0NUY0Mjc3OUExOTc5RDZGCi06MTAyNkEwMDBGOEI3RjhCRUIzOEZDN0RFMUZFNkY1QTdCNEM5OTk4M0E0Ci06MTAyNkIwMDA1NTNDQjdFQURFNDJCN0VDOUZDNEZEN0E3REJGQTc4NEU0Ci06MTAyNkMwMDBCQ0ZDNjU3RjU3MEY2QzI3RkRFQkQyQkZERDE5MzcxM0JDCi06MTAyNkQwMDBFMjdGMzc4NEM0RUJEMDVGNDhEQzhERjQ4M0NCMzg5RjM2Ci06MTAyNkUwMDAxQkFERkM5RUIxRjQ3M0NCNzgxRUQ5NUZFMUQ3OENGODlCCi06MTAyNkYwMDBDM0E4NTU0NjkyNUYyMjhEMkM4MEZEQ0JCODlENTFENjQ0Ci06MTAyNzAwMDBFNjdDOEM2MzE4NTU2M0EzN0JCNTg5RjBERDVDNDBGNUVFCi06MTAyNzEwMDA1QzJBQTQ1QkZFMDZGNUYzODI3RUY1NDQzMTdGMjhBNzkwCi06MTAyNzIwMDBGOTE3N0VFRDIxM0JFQzI4MTE1NzgwRURBREJDREM4NzFECi06MTAyNzMwMDBFRDQ3QTE2RDYxMDhBNUM0OUY5RUMxN0JCQjA1NDEzRkNDCi06MTAyNzQwMDAzRkQ2OEZFMEY1MDNEODVGREZCRkMzNzg1MUMxN0REMzlCCi06MTAyNzUwMDAzQkI2MzkxRkY5NzVFRjc5MzZCQTE3QkE3MTc0ODBERTU2Ci06MTAyNzYwMDBCMzIyQTMxM0MwNjVCMkQ0OUZBQzIyMkZGRDc5REIxMzMzCi06MTAyNzcwMDBDOThFMzQ1NkVDRjUwQzg3RTc2NkM0QTdEQjYyRkYyQ0U0Ci06MTAyNzgwMDA4MkY2NTk0NjZGQjQ0Rjk2MDhGOUY5M0ZDMTVCMzFFMkMyCi06MTAyNzkwMDA0REMyNTNFMjQ1RTI1MUUyMjMyNDdFOEFGMEQwMUQ1RTExCi06MTAyN0EwMDBGNUY4RDRFMzUxRTJBRkYwRUIyMDVFMTBBRTU3RTMyRDI1Ci06MTAyN0IwMDA4ODU3QjRFN0ZFQjNFMDZEODg5MUJGNUY2NkE5QjFEMkQ4Ci06MTAyN0MwMDBCQjY4M0Y4NEM3N0JEQUQ5Rjg2OEE4NzJDQUUxMzk4NTRCCi06MTAyN0QwMDBFN0JDRjc4QUUzMDhFNkNCRDlFOEYxODg1QTU5N0VBMTJECi06MTAyN0UwMDA5QjcyQ0ZEN0VEQTZFODEwN0NERjI4RjAxRDlGMDZGNTgxCi06MTAyN0YwMDA3QjVDNUQ1RkQ2OTNFRjMxQzhGRTA3Nzc1M0ZGOUQzMDVBCi06MTAyODAwMDAxOTc3RTFCMkU1MEYwQkM2M0YyRTJBRTRGMDJGNEE1M0E5Ci06MTAyODEwMDAwOUZFNjM3M0U3OTA5Q0NDNkM1Q0NFNzRDMDdGQzg5NzU0Ci06MTAyODIwMDBDNjdGRTdBNjc3MkRCRjYxM0JEMDczQ0JDNkM3NkJFNUVDCi06MTAyODMwMDBEMzIyOURERkZBNTYyMTk3REVBQTkzNEJGNTcyQTVCRkVFCi06MTAyODQwMDBCRjkwMkJEMzU4REE4RjdDQUZGMjU3RkQ4OUFGNUVFQjg4Ci06MTAyODUwMDA3Qjk1RkNCREQzNzE2MjlGQTUwODNBQ0I3MEE4NkMyNDEwCi06MTAyODYwMDBEMjExRjNEMDM5NzkxOERGM0JDREMzNzc0MTdEOTRCRkM2Ci06MTAyODcwMDA4NUY5MjlCRDhEMDVFODdDOUQwMDhDMThGM0I3MzM0NjlBCi06MTAyODgwMDBGN0M4MEY0NTRDMkNDNUJCNzE2MzA3OEZFRDhCREY0MzM5Ci06MTAyODkwMDBERTY1NkJDMTdEM0E0RkY1RkM5QjNERTQ1REI2ODNFMzlECi06MTAyOEEwMDAxQzc0QkZGMkEwMzU4M0U0MkZEQzg3QTYxMDdCRTBEQjJECi06MTAyOEIwMDA3MDNFRjU4NUYzRTMxMDlDNUY5OEJFMDVFNzU3NUY1OEJGCi06MTAyOEMwMDBFRjZGRTFGQ0MyRkNBRDM5NEIxOEI2MUJFRkQwQzZFRDgzCi06MTAyOEQwMDBDOEY2QjdEOUM3ODI2MkQyM0RGQzZFQ0I3QkI1MTdDMkIyCi06MTAyOEUwMDBGNzlEOThFQzcxNjgzRjdGMjdFNkJBNzFCOERFNzc2MjkyCi06MTAyOEYwMDAxMjBEM0NCNTk4MjkxREI4QUY2RjU3RjJBMURDMDdDMTg2Ci06MTAyOTAwMDBGMUM2RDM3ODdBRjg0QTc4RUFFMTI4RTFGQjVGODBFN0ZDCi06MTAyOTEwMDAxNzVEQzFGMzk0OTA5RjNCQUM3RjhDNEE0QTQ3RkY1REEzCi06MTAyOTIwMDA5NDc4QzdGMjc3NzkyQUU0Q0ZFMEQ0OTIzMTVFRjUwNjQ1Ci06MTAyOTMwMDA5QUU3QThGQTExQ0MzODk4RkMzNkI5MDhENzFBMkI4NzMxCi06MTAyOTQwMDA5N0RFNkVDNUI2MjQxQTQyRTM3N0JGMzA3QkJFQzVGMTcxCi06MTAyOTUwMDBCRkRDQThEMkJERjEwQjJGODc5MTNERUFCNDlGREJEQjMyCi06MTAyOTYwMDA4QTE0Q0Y3NzQ4OEYzNUFBNjMzNUJFM0ZDQURFRTFFRkMwCi06MTAyOTcwMDA5Q0IxRUYwRUE1NEU4QUZDMTE3NEJBODVERkI3QUZCMURBCi06MTAyOTgwMDA4RUVGMTI4RjUyOUZGQTBGODc4QkY4MDgxM0VGNDU0QThDCi06MTAyOTkwMDBCOUEyOTc4NUJGNEIyMERGMkZFQzRFQ0UxODE2Q0VGOThCCi06MTAyOUEwMDA2MDJGOEI3ODE3NDFFMDE1REE1MTNFMDVGQTE5MDY3QzQ1Ci06MTAyOUIwMDAyRUU1RDE3MEQyMkZFQTdCQjhFMjA3MEMwRERBMTEzQTdFCi06MTAyOUMwMDA3QTQ1Rjg5MURGOEUwQTBDQTA3N0I5OEE4RUFBMTQ0RjQ3Ci06MTAyOUQwMDA3QzUwQzQ3N0REM0NBMENFOTYwRTc4QkEyOUQzOTMzQUNBCi06MTAyOUUwMDAwMEQ3QTU3RUE3MjI5Rjc5MTdENjE5ODdGNjg3QTM4M0RDCi06MTAyOUYwMDA2REE0M0ZGRTQ4M0QzNDZCODBFMDE3NzkyQzRGNzM1RjI4Ci06MTAyQTAwMDA0REQyOUQ2QUEzRjg5RDhFMEZGODdEQkM4NTZGRjNCOEZCCi06MTAyQTEwMDBDRDg1M0Q1NDhBRkZEN0M3QzU4RDYyNTk4RkEyQkQ3MTQwCi06MTAyQTIwMDA2Q0JDQzlFOTc3MDRGOThCN0MwN0M4OTI2NDYwOEUxMDhFCi06MTAyQTMwMDAzOTNCQ0MxMUNFMUMyMUYzODlDODg5RDVFNDIzOUQzREI3Ci06MTAyQTQwMDAzNUY1QTM4N0E3NkJDQTYzNUNGRDM1RTU3MTQ1MDU5QTJCCi06MTAyQTUwMDA3QzBGRjdGNTlBRkE4OUQzQzY2OEYyQzk5RTVCMzVGNTAzCi06MTAyQTYwMDA1MzJBMjc2OUYzQjhFRjAwRUVCREVCNjY2OERBRjVBOUUzCi06MTAyQTcwMDAyRkQzRDQ0QkYzNTU2OUNBOTlDRjc1MkMyNzAxRjkzODU4Ci06MTAyQTgwMDBGRkNCNThCNTUwNTNGRTc0NTQxMThGMUZCN0NEQTY3QkEyCi06MTAyQTkwMDA4QTk5NEQzRkQzRjQyN0YxOUIxMkM3RjFDQjFDRkM3Q0U0Ci06MTAyQUEwMDBGMEMxN0ZFNEI3MTA3ODJFNENEMjlFMUI2M0VEQTMwRkNDCi06MTAyQUIwMDBEQjI5RDVEQTM1NTI3RTIwMEU2QUNFN0Y5NTBFNkE5OUQzCi06MTAyQUMwMDA5NjBFRTI3OTFDNEZFMURCODMxRDI4QzdFOEYxOEZGRUVCCi06MTAyQUQwMDA4OEQwNzVBMjNGMjIxNDJFRTg4RjA4Q0RBMzNGMjJCNEUwCi06MTAyQUUwMDAzRUZBMjM0MkNCRDExRjExNUEzRUY4QTgxNkZGNDM4RjVFCi06MTAyQUYwMDA2OUYxN0ZERDQ3NjNGRTUzM0M4RDY4RDVEMjgzMUU0RjVECi06MTAyQjAwMDAzNzlDRDZEMkM3Mjg0RjM4QzE2NTJDQzg2MzQ4RUYxMjBFCi06MTAyQjEwMDA0RkQzRTAzRjNBRTc5OTNCMUFFRDA2MzczMTE3REQwQjBCCi06MTAyQjIwMDBGODlGQzJENzMzM0E3QzdEQzM1NjBGQzU3NzJFMkY3OUQ1Ci06MTAyQjMwMDAzOTFGRUZFRTlDN0ZBMjhGRUI3OUU0MUZFRjBCM0VBRkM2Ci06MTAyQjQwMDBCNzAzQzg3ODUyREYxODhFNEZERkYxMzBFMjU3REYxQTMzCi06MTAyQjUwMDA1QTIzRjFGQ0Y4QTlEQTRBNzZGOTY0RDZGRTE2QkUzRjhDCi06MTAyQjYwMDA2MzhBRjdGQzFBRjk1ODIyNDYwRjQwRjk1MzczRUZDQ0U5Ci06MTAyQjcwMDBDNzczNkVFNkJGNTg1MjUxQUU5OUQ5ODdCRjI3Qzg3MjQ2Ci06MTAyQjgwMDA1QkU5OUQxNjM5OUY5OTI5M0NGRTY4REYwMEMxQTc5RDJFCi06MTAyQjkwMDAzQzBFRTlCNTAxNUNCRThFNzREQTI5MEVEQTlCQ0I0NDlCCi06MTAyQkEwMDA5QzI3NEI5RDM5MTBFOUYwRERCMDZDQTRCMzc1RENDRUU5Ci06MTAyQkIwMDBENTZBNzI1MDVDOEIwRkU4MTFGRDk0Mjg2RkEzM0NEQzQyCi06MTAyQkMwMDA1QkM4QTM4RDFGNUJBRDlDRUU5OEU2N0NFRkU3Qjc2QTEwCi06MTAyQkQwMDBFMjcwMDc2Q0I3NkJGMjAzOUI5MzM0RjUwN0VENzc2OEVGCi06MTAyQkUwMDBDQUYzMDMzOTlBRjJDMTQ3OUQ5QUZDRDA2M0MzMzVGNTA1Ci06MTAyQkYwMDBBRkZCQzhBNUM5OEY2ODJERDJENEJGRTFCNDVCOTM0RjlBCi06MTAyQzAwMDA2MUVENEYyMjNDQkYxQTkwQ0VFM0ZCMTU2MTA3NzA3MDU3Ci06MTAyQzEwMDBCQ0NDRkM2OTAyRERBNzkxN0E4NDhDQ0JGNjA4M0FENjRECi06MTAyQzIwMDBFQjIzN0RDQzFFOEFGMzZFNEM2NjRFQkEwRjYyMTVGQTBBCi06MTAyQzMwMDAyMEQzRUEyOTFFMTE1NzJERTU3OUU2RDNDNjU1Q0I3ODY2Ci06MTAyQzQwMDBFQTRFN0Q0NkU4MkY1MjlGMDg4OUE3NzZFMUZDNjUzQzU1Ci06MTAyQzUwMDA3NTI3REVDNUZCOTI3QUZBRkM4N0MwQkI3RTFEN0RDQzUyCi06MTAyQzYwMDBGQ0ZFNTdFM0ZENjZCQUM3MjJFN0E3OUZEN0NEMjIxRTE5Ci06MTAyQzcwMDA3MEFCQjVFQkY3ODc2Q0I5REM2RUYwNjhCQURCOTgwQjFDCi06MTAyQzgwMDBGNTlFODVFMzg5RTA3OUQ1NzhDRTU2MUZDMEI3RjFFNzg4Ci06MTAyQzkwMDA2NkU3NTJDNzBGOEYzNzczMTA1RjRGMjlCRUFCOUE0QjUxCi06MTAyQ0EwMDBFRjc0RDJCRDM1Mzk2RUFGNUM0RURGODYzQ0E1Q0JGNUY3Ci06MTAyQ0IwMDBDRDhDRTZGMTVEMkNEQTRDRjcyRUJBMUY4RkMzMzVDOUU3Ci06MTAyQ0MwMDBDQzk2RDEzQjQ5RTIxRUMyRERBQjlCRDc2MDY4NDVBOURCCi06MTAyQ0QwMDBCOUM5QzRERkQ1Rjc5QkQwNEU1NDNDMDZFNEMwN0NFMEI0Ci06MTAyQ0UwMDAxMzVCNzdBRUIzODFCQ0Y2NkNCRDkxRUMzRTE5QjlGMUM0Ci06MTAyQ0YwMDA3NzgyMDREOTc5QUZBNDBGRTg2OTQ4MjdDNTg4N0ZFOEFGCi06MTAyRDAwMDA3N0MzNDAxRUVGM0MyRTk3QUZBRjUwRkRBRUYzM0U4MDMxCi06MTAyRDEwMDA0NUMzRTdCOUZFRDcwNUREMTEzRENBNzVGQzZGREQwRjcwCi06MTAyRDIwMDA5MEY0QUI4NzkzRDRBRjk5MzhCRkZBOEE3OTQ5Rjg3NTk0Ci06MTAyRDMwMDBEQTRGMDRGQ0U0RkQwQ0M3MDI5MzdCQjM4REVFNzkxNEVCCi06MTAyRDQwMDA2MTVDOTlDNERGNEIwMzM5NURGRTA0RTEzMTk0RDc0M0U0Ci06MTAyRDUwMDA3RUQ0NURCRDQyMzUzNzFBRURFMDFEQ0MxMTZERkYwMTBCCi06MTAyRDYwMDA3QkYwRkZEMkJEMDk4MjdGNzdGN0JEQkFFMzEzNTdGMTNECi06MTAyRDcwMDA4NzZFRUU3Rjc1NDc5RkY0RjcyM0VFODE4NUYwMDkxRTdECi06MTAyRDgwMDBFRjIzRjBFMUVGNkIyMEJGRkFDQTQ4RUQzRURFOUFDQkFECi06MTAyRDkwMDBFMTdCQUJEODRGNzA2RURCRjJCNTdDODJBMTVEQkY3MTc5Ci06MTAyREEwMDBCOTJBRjhDNEVDQ0VERjlGQzBFRkIzOTY5QjQ4QkU2NjRECi06MTAyREIwMDBDQ0JEMUVFMzBDM0U1RjY3QTJCOEQ4NTEyRTQ2NzI0Q0M0Ci06MTAyREMwMDBEOTQ2QzVCRjQ5QzE3Mzc0NjQxMkNFREZFQkQzOUVDNzI5Ci06MTAyREQwMDAzNzMxRTcwQUY0N0Y5NEFGRDI3RTlGNjNFM0JGNTMzMTZDCi06MTAyREUwMDA0QkZGNkU4QUQwRDdFN0ZDODBCRUJFM0U1NzlDRTM0RUI5Ci06MTAyREYwMDBFNjI0Qjk0QkY4RkYyQjQ1MUJCRERDRDVFMUU3N0UzMzVDCi06MTAyRTAwMDBENEI3NTU2RTc3QTJCODMxNzlCRTNCRDA3RjEzRjIxRThFCi06MTAyRTEwMDAwOEMwMzMzQzA3Q0ZGMTY1QzYyRUUzRjkzQUUxRDk0RDNFCi06MTAyRTIwMDBCQ0MyNzk5Qjg4NTdCMEYxRjg4QzhFM0Q2MURDQkYyOTFDCi06MTAyRTMwMDBGRDRBQTJGRTc5REY2NTJBQzdGQUQ4REI4NTdDMUU3N0JBCi06MTAyRTQwMDAyMUZENDk3QTdGNTU4N0NENDBGRTk2OEUzRDkxRTQ5RkM2Ci06MTAyRTUwMDA0NzNGNEUzNEQwQzE1OUMzRUU4NEUxNjlDMUY5Nzk1QTc0Ci06MTAyRTYwMDA1NThEMUY0NDlGN0E5NkJDNDJGQTYyNjI4NjI3OTA4QkVBCi06MTAyRTcwMDA3MUQ4NDZBN0Q1MDlGOTg3NkMwN0U5RkRBODYyNjFGNzAzCi06MTAyRTgwMDBEMkNGQjc1M0VGMUFDOURGNzdFOUYwNzE3OUI2QTM4OENCCi06MTAyRTkwMDBCRkMzMDE3QzkxRTEzRTkyNzEwODI1MENCNDU0NDhCRDNBCi06MTAyRUEwMDA4MTExMzQ5RjFGRUJDRjk5N0MyNTlGRkIzMUFGREM0MDE0Ci06MTAyRUIwMDBFRDNEQUI0NjUwQkVDRkIyMzUwQkYwMUVDQzFEOEQ3MzMxCi06MTAyRUMwMDA0Q0U4QzI2RTdENzI3MTYxMzgzNDZERURFRDVGMUE4RTIzCi06MTAyRUQwMDA3ODFCQUQ3NDY5OTc2RjEzRTc1OUFCMkVCRTVFQTYyNUJDCi06MTAyRUUwMDA4MjFGQ0QxQjI4RjlCODg4NDM1QUEyRDAzRTU4QTgzMDdCCi06MTAyRUYwMDAxOTk3NDQ3QzVDRTYyRjM3ODk3QzIxQ0YyRjVBQ0VGMzdCCi06MTAyRjAwMDBBREUyN0RGRDZEQzI4RTgyRUJDNjE0RDc4RDdBRkYwRUM5Ci06MTAyRjEwMDA2MTY3QzE3NTYzOEFFQkM2RUZDOEI3MzA4RjdDMEJGMzZFCi06MTAyRjIwMDBDOEI3MzA4RjdDMEI1M0U0NUJGOEJEOENCOTUzRjM1NUI1Ci06MTAyRjMwMDBFRTg3MUExN0JBRUZBRTU4RDlCODkwRkQ4MjdFQThEMEE2Ci06MTAyRjQwMDAzQ0ZBQTE0MkVCQTMxRjJBQjQxQ0ZENTBBMUU1RTg4NzdGCi06MTAyRjUwMDAwQUNEQTMxRjJBQjQzRUZBQTE0MkYzNkNGODJEQzEzQzVFCi06MTAyRjYwMDBGMjM5NTc4OTI2M0YxOUU0RkM3MTIxRkIxQkZENTBBMTYyCi06MTAyRjcwMDBGREEzMUY0QUQzOUY2NzgxQTZGRDVEQUM1RUQzMUVGREY2Ci06MTAyRjgwMDA1MEExRjVFRkE5NTczNDdFQUE3QkM0M0JBN0U1MUJFMjBECi06MTAyRjkwMDA4ODdFMjIxREVFRDQ4MTgwRTc3RjhCRjhDNzdEQTY3NEUyCi06MTAyRkEwMDBDNDczQ0I1Q0FFOTc4NTNCMzk5RTlCOEEzOERFMEQ4QzEzCi06MTAyRkIwMDBFM0I5N0QzQUUxNzlCMTk5RTcwQjc5N0NCMjlFN0VEMDk1Ci06MTAyRkMwMDBERjMzQ0VDNEZEM0Q5OEEyQkYwNzUzRjRGNzYwOEFGRUZECi06MTAyRkQwMDA5RTcxOTlEQ0RGODMyOUZBN0JGMDNCRkE3QjMwNDU3RkQ5Ci06MTAyRkUwMDAwRkE2RThFRkMxMTRGRDNEOThBMkJGMDc1M0Y0Rjc2MEE4Ci06MTAyRkYwMDAzQkY0Rjc2MDhBRkUxRUZDOEVGRTFFNENEMURGODNERkExCi06MTAzMDAwMDA4RkEzREZDOTE0OUMxN0NBRjE3RDM1RkEyM0QwQTE0NkRFCi06MTAzMDEwMDA3RkI0NkJGMjI4Qzc4N0Q2NDczOTNFQjQxQ0U1RjhEMDk5Ci06MTAzMDIwMDA3Mjk0RTM0M0YzMjhDNzg3RDY0NzM5M0UzNDNGMzNEN0ZBCi06MTAzMDMwMDA0MUZCMEJFNUY5RDA3NjI4Q0Y4N0U2MDczNkY5REU0MjZCCi06MTAzMDQwMDBEQkQ5ODQ4RDE3MEY2M0RBMUFBOTNDQUIwMENCQjg2N0M0Ci06MTAzMDUwMDBFNzRCNzcxQTQxM0U2QjBENTM1MjYzODA3MzlBOTREREIwCi06MTAzMDYwMDA3NzhFODNCQzQ3QzRGRkU1QjE3NjAzRTJEQjIzREU1M0YyCi06MTAzMDcwMDBGNzA0MThDNTVCMEVGQzVCMzI5NTNGMjNFRjg3RTExRjE5Ci06MTAzMDgwMDBFMDNEN0YwRkEzREYyNTkxRkU2MkQ5REVDOUVDMkFBNkMxCi06MTAzMDkwMDBCMjdFMzBERjc1M0RGREY4QjIxRUYxQ0Y5MDc5RTAwREM0Ci06MTAzMEEwMDA2MDhDNTdDOTVGNkMyQkMwNzhDRjZEMDY4NUUyMjRCNjYzCi06MTAzMEIwMDAyREU1NzFDMjdBQkE3QTZDMjBGNzhCNkUzM0VDM0U4OEJDCi06MTAzMEMwMDBGNzQwREFCRDBBREQwN0NFMzJCMkEzQTYwMjg0NTM1RDEzCi06MTAzMEQwMDAwMTlFQkYwRjBDOEMxMTdFQkVCQUVCRjFCRTg5OUNCNzZFCi06MTAzMEUwMDBCNDZGMDI5RkEwRkI3MzIzREI4RjhEOEQ4NjdFM0NCRTY5Ci06MTAzMEYwMDBEMUY0M0IyOUM1NjYyRTM3NjAzQkQ0MjcwN0Y4MTRENzk3Ci06MTAzMTAwMDBFNjEwRkE1RTNFOTBGMzREOEY4RjhGRkZBQkU3MjZGMjBECi06MTAzMTEwMDA3NkUxQkNEREFGOUU4QjIyMzg0RTVDQTY1MEJDRDRDODk1Ci06MTAzMTIwMDAxRENDODVGNzczN0YyMUU2M0Q2MDQ3NDBDNUYxQkNDQkUwCi06MTAzMTMwMDBGODc4QjI1RkVGQzY1NEJBQjdFODY1QURFMzkyQzg0NzE2Ci06MTAzMTQwMDBBMjMwRTREQjEyNkVCMEJFQzNCODNFNTAxQjhFQTI3RDJGCi06MTAzMTUwMDBGQTVBRUZGRERDMzgyNEE2MTBFM0U4NTgwQkEzNzcyQ0NECi06MTAzMTYwMDAyNzBDNzk1RkIzNUU0MkZCMzBFQTk3Q0VCNTZDOUY0Mjg1Ci06MTAzMTcwMDBFRjA1NEZGNDJENTk4QTY0MzFDMUI3RTBBRDFFNTg3Rjc5Ci06MTAzMTgwMDAwQjczQTYzOUU4MjhBMjdCQjE3MjNFRkQ1REJCMEQ3MEMyCi06MTAzMTkwMDAyQ0IyNUM3NkNDMTBBNjIwQkVEOUExQjgxMEZBODE5REM1Ci06MTAzMUEwMDAzRjA1RjE5REVGMzREMUZCQkQyNTQ2QkI4OURFOEZFODlECi06MTAzMUIwMDAyNkZFRTRCMjREQzY5RkU4RTQwNTVEOUM0OUUzRTI4RjNDCi06MTAzMUMwMDA1MkQxOUVCQzMwRDI0MEY2REY4NUFGRjBERjAzRjA2QzA5Ci06MTAzMUQwMDA1MDg4QUY0OTM5QzgyQkUyRDQyRTJGN0JBQkM3NTQ4NDFCCi06MTAzMUUwMDBGQjZFMTNGNTI3RTM0RjZBMzNGQ0E5MDY4Q0FCRUZCOUVFCi06MTAzMUYwMDAyOTJGNTYyNTM5RTAwMEYyQzM3M0JFREZEQzM5MUNFQjAyCi06MTAzMjAwMDAyREU3RUY1ODVFNUU3NjQ3NzQ4MDdBRTJGRTlBMEEwMUY3Ci06MTAzMjEwMDBBRjBBMTFDN0U0QzUwN0JERDVFMEVGNjlDOUZCMURBQzE2Ci06MTAzMjIwMDA4OUNCN0JEMjlFRTNGRERERTAyMzg4NUZFRjMzRTI1RDU3Ci06MTAzMjMwMDBFOTU1NUVCQTk3QUQ4RjIzOUFCQkNDNDQ3MTQ3NzM3NTNECi06MTAzMjQwMDA3MjYxQjU5MDBCQUI3RjQwMkVGQzc4QTA0RTJFOTRCRkUwCi06MTAzMjUwMDA5NzIyREEzMEI1RDc4NzE4QjcyN0VGMjU5NjlBRjhGRTY4Ci06MTAzMjYwMDAyRkREQ0RDODBFNUJCQTY0QUM4MURFNDE3RTg1RDM0REM3Ci06MTAzMjcwMDBFOTEyMkVERjk0QkVFQUEyRkI4NTUyNUU3QzRGQzgzMTc0Ci06MTAzMjgwMDA5M0FFQTQxMERDRkYyOEU0OTYzQjMwQkUxMkUwNUJEQzdBCi06MTAzMjkwMDAxQTI2RTJCMDkyMjk5RDdBODVDNzVCNEVCMjcxM0VEMDY0Ci06MTAzMkEwMDBGQTA2N0YwN0EyQzM2N0UxRjJENDYxQzZERjMxRDNEMTRBCi06MTAzMkIwMDA2NTg5RDE2RkMwMEI3N0NFOTE0MDk3OTA5RjgwNzIxMDM3Ci06MTAzMkMwMDBGNDM3MERFNUEyMzhBNEYzQjQ0MjhBREYyQjUyRThERUNFCi06MTAzMkQwMDA4QjlFQ0U4QjRENzU2RjYxN0M2OEYxNTZFNkY0QjE1MEQ0Ci06MTAzMkUwMDAzQTA3RkFDNUZFN0MwQUJEMEZFMDExN0FBREE0NUYzRDM2Ci06MTAzMkYwMDBCRENGOEMxMEY2MjgxQkI3Mzc3NURBMjU1MDQ2QzU0NzY5Ci06MTAzMzAwMDBCQTdEQTZBOTE4RkYzQTEzN0Q3QjNEMzlDMTYwREM1OTBGCi06MTAzMzEwMDA2NDJFMkY4RkRCNjU5QUJBMENFRjJBNzQ2M0E3NTA3RjU3Ci06MTAzMzIwMDA2NjI2Nzg3OEU0M0IwOERERDgwREQwNUU4MDdDRjJFRTJFCi06MTAzMzMwMDA3QkYzQ0Q2NTIxN0NGMkU0QTAzMTgzMDdGNTA4RTJCQjg1Ci06MTAzMzQwMDBBQ0YzQkU1RjJFQkQwQkJBRjBBMTRDRkEzRDlDRUVFNDhGCi06MTAzMzUwMDBFMTcyODAyQkVFOEI5OUQxQURGN0UxMkZCMzE1RTQzMUZCCi06MTAzMzYwMDBEN0I4MjRGQzdENDEyNjFGMjEwRjYwMUNFMTBDOTFCRkMyCi06MTAzMzcwMDAyNzJGRUZDRkFCNkMwNDE3Q0FFN0VEOEE5QjhBNzEyMTI4Ci06MTAzMzgwMDBCNUQ2RDZGMTQ4NzZGMzczM0Q0NTc4OEYzMUM4OUZEQ0NBCi06MTAzMzkwMDBBRTE0MDVGOTUzN0UwMDc1QzI5QkIzRjgzRDJGQkQzREI5Ci06MTAzM0EwMDBFMjlFM0M1RTVGNkY5NzI4Q0ZFNTdDNUJGRTJFQ0E4OTZDCi06MTAzM0IwMDA4N0Y2RURDMkYzNEFDRUZGNDQzN0JGQzMzMDM1OEZDQjFCCi06MTAzM0MwMDBCM0ZGNTNGNzIwRjRGNzFGNjZGNUY0MTRFNUMxN0NENzdCCi06MTAzM0QwMDAxQkY4N0RGRTlFNkExMzEzRjYyMUYyMEI0QjdFQzFDNENGCi06MTAzM0UwMDAzQjE4NDFCQ0JCRTgxREREQzY4NzE0N0JBODdEQ0FCMzcyCi06MTAzM0YwMDA0QUUxRjdFOEJCQjFFM0IwOUNGNjI3Qjc0MkJCOTkwREIxCi06MTAzNDAwMDA2NkZBMURCRkU3QjIzOEZEM0MwN0Y0NDNCRjk3NjIzRTQyCi06MTAzNDEwMDBGNjk2MzUyRDA4Qzc0RkVCN0Y2OUEyREZBNTYxODE0Qzc5Ci06MTAzNDIwMDA3QzdGNjc0NjVEOTgxM0Y5RjFDOTQxRUU5OTM4RUY4OEMyCi06MTAzNDMwMDA1QzI3RjFBMUMxODMzODdENjVDNEJCQkQ3OTc4RkY2RTdGCi06MTAzNDQwMDBGNTgxNjdGMTNEODFGOTJENjlGNDdCMjVERUZERjkyQkNFCi06MTAzNDUwMDBGMDlEOTM5MzgzM0NCM0IxREM2QkIzRDM3QjFBRjM5NkFCCi06MTAzNDYwMDBDNUQwRjkzNTMzNTFEQzBCNjVFREU0Njc5M0YwN0YzMDVGCi06MTAzNDcwMDA4RkVCODlENzM5OTlGOEJEMkQ3MURGMDExODY0ODlBNkMyCi06MTAzNDgwMDA5RTg4RUZENkVEMEY2OTI3RDREQjE5RjRFRjRCNzQ2N0Y0Ci06MTAzNDkwMDA1RjkwRjYwNEI0MUY5ODQzRUM4Q0QyM0U2MUNBMzkzMTc4Ci06MTAzNEEwMDAxREU1ODY1MkIzRjY1RUEyNEM3RjJERTYyRkY1QzA1OTdFCi06MTAzNEIwMDA5REU3NTZFRUY4NDQ5NDhGRDcyQTc2N0E2RkQyRTY5ODM1Ci06MTAzNEMwMDAzQTAyRjIxNTQ3NEQxOEQ5Qzk4QTYzMUQ2NjdDN0ZBMDYwCi06MTAzNEQwMDAxREYwOEJGMUQxNjVCMDVGOTFDRjk0OEEzOEFEOEEwRDI0Ci06MTAzNEUwMDAyMzY4QkY1NUY4MjFFREUyMUQ0RTk5REVCNUY2NTBFRjg5Ci06MTAzNEYwMDA1NzkxN0UwMjJFRjI1QjU2RDg1REU2RDg5MDdENUZERTU2Ci06MTAzNTAwMDBBNDY4REUxRDkwRjlFN0YyNTQ1QTY3Mjk4OEUzMDhCRkUyCi06MTAzNTEwMDBCQkVGNEQzM0UzREIzRUE1MjA0NjYwRkNERkFGMDU3RDBFCi06MTAzNTIwMDBDODc2NTA4RkUyNDE4QUQzRDkxMUZFMEUzQ0NDM0I4RDM4Ci06MTAzNTMwMDA4RjU3MTBEMjdGNTkxM0JGMzcyREYzNTA5RkU0OUYxNzM5Ci06MTAzNTQwMDBGMjIyQTkzRkFGMURENjlEODZBOTlERTYwOTcwMjAzOEJECi06MTAzNTUwMDBCNUFGODFGRTFDMzQwRUUxQTMzQ0UwMzdBMUJFNUQ4QTBECi06MTAzNTYwMDA3MTI4OTA5RjYxRjc5QjcwOUNCMjY1RkMxRDEzQ0Y2QTE4Ci06MTAzNTcwMDAzRThFNjc1NThDNzkyMENBNDc0NkJCQjkzN0MyMkY5QzBGCi06MTAzNTgwMDA5RjU3MzAzRjkyMjMyQjAwMkU3ODFGMEJFRkJCRTFEOUMyCi06MTAzNTkwMDBBMjg3OEY1N0NDQjdBMjI5ODZERTUxMDg3RTVGNkI0Mjg3Ci06MTAzNUEwMDA3QzRDRUZFNjVEODQ0RjA1REVDQjk2OERBNkZCRUIxNURDCi06MTAzNUIwMDA0NjE3REQ3M0YwMDhGODdFQkUyMEVDNjFGNDBGNEM1RjE3Ci06MTAzNUMwMDBGNzg0MjkwREZERjg4MkNGN0MyQUUwNUE5QzFFQzhBNEZFCi06MTAzNUQwMDBGNzhBMTY4NDM5NzE5RUQzRUQ0REI0QkU0RUY4M0UwRTc3Ci06MTAzNUUwMDBGMDUwRjA5RDFCMzdDMTE3RThDMjg3NzE3QjE1RUJCNDEzCi06MTAzNUYwMDBGODBDQ0U4N0MzQjc2MjlEOTdGNkRCNkNBM0M3NkMwRjQwCi06MTAzNjAwMDA5REM3ODYwMzk5NzhBRjZBM0FFQzZGN0M1NzgyRDkzREEzCi06MTAzNjEwMDA3NDVGRjI4QkM3QTdBNkQyM0E2MTlFMDhENzQ4QTc2MzBBCi06MTAzNjIwMDAzQ0JFM0YwNDc0QzJFRkMxODhGNUM4N0JERDcyQkNDQkUxCi06MTAzNjMwMDA3OUZDMUVGQ0U1MUZEQzk3MkU5MjZCMUEwMUJGNjhGNzIwCi06MTAzNjQwMDBFRTZFNUY5QTkxNzFDM0I4RTYwQUZFM0IxMkZBN0QyQUNDCi06MTAzNjUwMDBGN0E3REM5NzcyOUZDQUZERkJBQ0M5MUQ0ODUyODI3QzVDCi06MTAzNjYwMDAwNkNFRDlCQTk3QkI4MEQzRTA0MTFDMEYzMzA0NUUwMTZDCi06MTAzNjcwMDBBRTg3NDNFRjc5RjUxQUM0RjE1QTlBQUVEREVGRDgxRjQxCi06MTAzNjgwMDBGNjZCOTVFNTYzMDI5OUY4MkU5M0FDMkZDNzJEOERFNTY3Ci06MTAzNjkwMDBFRDkwRUU5MURFQUM4MzBDOURGNTE3NTI3REVEM0Q5NURFCi06MTAzNkEwMDBGMjRFN0VCMTYzNzkwMkYyOEJERDBBRjc4M0FFMzlENDM0Ci06MTAzNkIwMDBGQkE3MjhCRkVFRTRGMkVCQjk5QUFERjNGMEJDNjQ0Njg5Ci06MTAzNkMwMDA3RjZBRThGQkZFQjM0MENFNDEzRTMxNUI5Q0NGMTU4MTYzCi06MTAzNkQwMDBBRUY5QzU1MzU5OUVFNDQxMjFGQkI5RTJCMTlENTkxRTkzCi06MTAzNkUwMDBDRTZGMDJDODZGRkVCMkYzRjUzRjVERUYwODlFQTc3MjgyCi06MTAzNkYwMDAzRDY1QUJERTM3Nzk2REExRjBFMzdBQ0VDMzM5MUQ3NDM5Ci06MTAzNzAwMDAxRkFGREM2Njc2NjBCQzczRjkzMjJGRjE1Rjk2MDQ3MkVFCi06MTAzNzEwMDBBMTEyMTI3RkE2QTMwQkVGMzI4NUVFOTE5NUQ3MEZGMzdFCi06MTAzNzIwMDBBQkZGODM3Q0JBN0M3NTA5QkQ3QjIwRjEyNkRGNjc5MUY2Ci06MTAzNzMwMDBFN0FCOUNGRjQ4MzFGRjlCMDZGMUY2MzMwNDdEQ0ZBODMxCi06MTAzNzQwMDAxQzZENEU4RTI3QjkxQkMzMkNEOTc0RjE3RDdBODVGNjdBCi06MTAzNzUwMDA3QjI3REUzQUZERDdCOTJCNzBCRkUwRkQyMkQyNEY1NjUyCi06MTAzNzYwMDA5QkI4QkQ2RjA3QjczRjlFNUJCOEVGRjc3NzQyQkRCMzFECi06MTAzNzcwMDBFQjM3QTUzMjU1OEIzNzk0NTM2NzBCNzk3NThFQjBGRkI1Ci06MTAzNzgwMDA3NTgxMzdGN0EwOTAzODlFMzlDRjcxQkM5NUVGRkFERDdGCi06MTAzNzkwMDA2N0Y4OUU1ODY5QkFFMDc3NkJGODNCMDA2NUNEQkIwOUM2Ci06MTAzN0EwMDA4RkQzNTdBRDM1QTUyMTNGMUE5NEE2RTFFM0U1NzVGOTBFCi06MTAzN0IwMDA3NkI0MkJDRjU4QjVDOTg0N0NDMjIzRTFBMERCMEZBNTFBCi06MTAzN0MwMDAyMjRFNThDMjE5Q0YyNTI1QzRCRjIxRUIyMzdGQzRGNzUxCi06MTAzN0QwMDBFRkVGNUQxMDE2ODVGMTNDNzI5Qzg3MDQ5RDk3RDdDNTZECi06MTAzN0UwMDBDNEUyNzhFNTc1REU1RkEwM0UyNENGMDNGRDNBNEY4NjQ0Ci06MTAzN0YwMDBGMUZENTIwNkZERTFCRTNEMzlEQTk5QkEzMDM3MjhDRkU2Ci06MTAzODAwMDBFQUVCRkJDNEJFN0JEQUM0N0ZBNzI2MjVBMkY5MDU4QUIyCi06MTAzODEwMDA2Qjk4MUZFRTQ0RkVEMUI3NkZBQjFGQzc0NUZBQzY3OTUwCi06MTAzODIwMDA5QjBERkM3NzZERkFENkI0N0U4NUYzRThDQjc4NUMwRDAyCi06MTAzODMwMDBBNkY4M0UxNkZBMTcxMjIwQkZEOUMwRUY2RkE1QUIzQzExCi06MTAzODQwMDBERDI2RTAwM0U1MDEyQzY3RjFBREY0RkIxQTIxNzFCMzJECi06MTAzODUwMDAxQUZBMzVCMzJERjRGQjg5RTY3ODQ2RUY5QjQ5N0E5NTQxCi06MTAzODYwMDBGRDQ4N0E5NUY0RENEREZBOUVCREM2RjU5RDRDRTNGMDhCCi06MTAzODcwMDAzNDhCREY0REI5RTZGNTU5RjhFRkU4Q0E3NUM5Rjk4MTFGCi06MTAzODgwMDAwQ0VGQTJGNzNEMUUxODQ4RjY5RTkzNEI5Q0E5MTgzN0UzCi06MTAzODkwMDBEOUZEN0FENzE1MjY3NEIxNUVGRDNBRTVCRTkxQjFGMDM3Ci06MTAzOEEwMDA5REZFQUMyNkVFNzczOEE5QzBGOTA2RUQ0RTJFMDhBMzkyCi06MTAzOEIwMDBGODM2QjlBRTFGNkIwRjNGMzgyODU2RDg3NzVBMjM1MUM4Ci06MTAzOEMwMDBDRTJDMEQwRkRFOTc0N0Y4MURBRkU3QkZBRjJCQkY0QkQ4Ci06MTAzOEQwMDBCOTQwQkUzMzI3RjlGN0E5M0E3MTZFQjJENjM1QjhCRkYxCi06MTAzOEUwMDA1OTdEMDZCRDdGNzJCQ0U5NjQyNEJFQzc3MjcyMzQ5RkU1Ci06MTAzOEYwMDA5RjZDNzdBRjg5REY0RjY2OTE2NjA3REUxMzhCQjhGNzUxCi06MTAzOTAwMDBGREMyNDRGNDBGQUQ0QkNCNTdBMERERERGNTgzOEZFMzUzCi06MTAzOTEwMDBGQkUzNzcyRjRCMjRGRDdFOTZDREIxMDJDRkM1NTlCRTc4Ci06MTAzOTIwMDAzNEYyMDc0N0FDQ0JGRjAyREZEMTlCQjU2QzAwRkQ2RUQ0Ci06MTAzOTMwMDBFRkJEMEE3MzkzM0UyOUY0ODREOUFDRjM4RkY0ODQzOTM0Ci06MTAzOTQwMDA4MkFGQ0Q0MTdFODlGN0E1RUEwRkQxQkI3OUIzOUQ2MUU2Ci06MTAzOTUwMDBGOTc4QkVDRkQ5QzBGNTg0NjIwMzVCODVGRUM0M0U4RDg1Ci06MTAzOTYwMDBFRUYxQzhDN0RBOUY1NEY4RUYzRTZGRDRCRUMzOTU5QzAyCi06MTAzOTcwMDBFREZFMENGOThDRkVEREJCN0I0RENEMkU1QzA3MDM3OTkzCi06MTAzOTgwMDAwNEVENEVCMzZDNkU5MkVCNEIwNUJEMUM1RkQ3NDZCRjhBCi06MTAzOTkwMDA5Nzg5RjBBNkRGQ0JEMUQ5NkZGQTk4RjkzREUyRjY0OEM2Ci06MTAzOUEwMDAwM0Q5RTMwMEVGRUZFMUVGOTFFMTdCRUIxNjNBNkZCNDVGCi06MTAzOUIwMDBGNjlCM0UwRjBFQTdERjZCOTNGNzg0MkE4NERGNDlEMjc0Ci06MTAzOUMwMDA4RkY0NUZDRERBMzQ5OUVFMEZDRDQyN0JDREUwRTBGRDkwCi06MTAzOUQwMDBBOTE1RUJDNkQyRkI0RTE1NkIwQkQ3RTNFRkRDQTQwQTlGCi06MTAzOUUwMDAzODlFMzJCNjk2MjA3RTRFNkY0QThDQzU3QkI5MTVCNThGCi06MTAzOUYwMDA4RDU5Nzg1RkE4NjJEMzRBQkEzNzc0N0E1MzE4REQxQkExCi06MTAzQTAwMDAxQTY3MkYxOTg3QkYxRjMyN0IyM0JGOUYyN0Y3QTNDRENDCi06MTAzQTEwMDBDOUY3NjM1NUVENThCQUY3RjNGRjAwQjkxMEFEOEMwMDQ0Ci06MTAzQTIwMDA4MDAwMDAwMDFGOEIwODAwMDAwMDAwMDAwMDBCQ0Q1NjM2Ci06MTAzQTMwMDA1QjZDMTQ2NTE0M0VGRjNGN0JFRkVDQTVFRDUyN0FBMTYxCi06MTAzQTQwMDBFREI2RTVCMkVBQjY5REE1MTQwMzE4OTgzNDgwMjQxMkE5Ci06MTAzQTUwMDA1RDA4MDUzNjgxNzYwODgxMTQ2ODZCNDU5MzE2NDM2NENBCi06MTAzQTYwMDA2MTk1MTA4ODcxMUY1QUExMDRDQzUyQTFCRUE4RDk4NkI1Ci06MTAzQTcwMDA0NjIxQUU2NkE1NDFBMjM2QjE4MTE3MTI5MjY2RkI1MjZECi06MTAzQTgwMDAyRTExQkI1NjRENjlBMkUwMzlGRkNDNjYwOTk3QzQ0Nzk5Ci06MTAzQTkwMDBFN0U1RUNGRkNGQjk3RkRGMzlCM0VEMEY0NzNFRjFENDU3Ci06MTAzQUEwMDAwMEVDQUEwMkYwMkMwMUY4MkI5MTE3OEYzMDgwRjY0MzFFCi06MTAzQUIwMDA5NzJBMjQwRTEwQjA2QTU2NjUwRUMwM0U5RURDQkNDQzIwCi06MTAzQUMwMDAwNzcwOEZDNTA3NEI4NEJFNkZBRTQ3MDY3ODQ0Q0ZBQUY4Ci06MTAzQUQwMDBBN0U1RTQyMTAwOUYxNUEwRTNCRDlCQzJDRjdEM0VGQTgwCi06MTAzQUUwMDA3QTE4RUREQjNCMkVCQUM4Q0ZCRUJFMUI0QjNENzgzRkVDCi06MTAzQUYwMDBCNzQ2MkI1NDFBQzlFRkI5NDE4RjA0MDBBN0NFRDU4NTFDCi06MTAzQjAwMDA2QTAxQkMwQUZFQzZGQkY1MDVBMUNENjFDQzJCRjNBMzZGCi06MTAzQjEwMDBBNDBDRjg5RTFGQUZFRDEyMjZERDkwM0I2RjhGQkIyRERFCi06MTAzQjIwMDAxMDAwRDA1MjYwRjE5MEY0ODBBNTAwRTUxRDA5N0ExMkQyCi06MTAzQjMwMDAyOEQ3NTc0M0VCNDYzOTc3QkY0ODQxN0JBQ0YzOEUzQkUwCi06MTAzQjQwMDA1NjExQzJGQjNEODMyNzJCN0MyOEVGM0FGNUYzQjZDMTEzCi06MTAzQjUwMDAyRDNGODEwQkY1Q0Y1QjJENDA3NjI2QjAyODY4QjczMzFCCi06MTAzQjYwMDBDMkQ0Mzg0QTY4MkIwMDI4QzlDNTBGMkE3OTIyRkYzREU0Ci06MTAzQjcwMDBBNzMwQTlDMkRDM0Q0MDVDRENERjM1QzEzQUNBQTMzMkM0Ci06MTAzQjgwMDA5QTA5QkU4NUYyOTYyOUI1MEJCMENFNUI1RDc2MjU4MjhCCi06MTAzQjkwMDA1OEM4OEE0RkU0NzMyQjI2QURBNUZCQzgzQjBDMTYzMEUyCi06MTAzQkEwMDAzQTVGNzRDRUM3RjgyRDZFRTgyMjdCRTc5MjQ0OEE3Qjk5Ci06MTAzQkIwMDBCMUNGQzNGOThCQTk3REY4NzAyODAyRThGNEU4ODczNTA2Ci06MTAzQkMwMDA5MkJDQjYwQ0RGRUYxRjYyMUUyQkJBREM3RkY5RUE1QUZCCi06MTAzQkQwMDBEMENGMDBFQ0Y5RkREQ0ZCNjAwNUY4MUVDQjdCRUZGMEVECi06MTAzQkUwMDA5MEM1ODdGMURBM0ZDNzdBMzE3RTdCNjJFODg3NTJGNDZECi06MTAzQkYwMDBEMzc5Njk0NzgzMUUzNzA2QjAxNEYzQTA5RjE4QTc3M0MzCi06MTAzQzAwMDA1OEVGNEJDN0YwODQ2NTY3MjBFNzY3ODdCRkUwNjgxOTA2Ci06MTAzQzEwMDA2MkJCMjlEMUI4QTUwRkY1NzYxMDZFQ0I5MTBGNzUyRjI5Ci06MTAzQzIwMDA2QzNENkMyMkU5MTFGRDAxNTNBNjIyRTQwNDM4RUVCRjdECi06MTAzQzMwMDA2RUQxQzhDRkZCODYzRkZGRjVBM0Q1QTJERTBEODVGMDgwCi06MTAzQzQwMDAxODFGOUExNUIzQjBDQkRBNjMzRjg0NURBQUMzNzEwQzE5Ci06MTAzQzUwMDBFQTAxRDQ0RUQ5NDQzMkRBMjFCQjQ4OUVFOUUyN0UxMzEwCi06MTAzQzYwMDBGNjU1NjUwRTQ1QzI3RUY3RDg1Qzc1RTAwNjk4QjFFQjU3Ci06MTAzQzcwMDAzMkU5RDA2NTM3MEYwREVEQzYxNDY3Rjg5ODFEOTBGNzNGCi06MTAzQzgwMDBERDUyOEM5MTVDMTVFODYyRDg2OTMwN0JCNTdEMzQxRkJDCi06MTAzQzkwMDBDNTkwNjAyMDFBOTE2Mjk0RjdENEI3QjcxQjI4RkVDQTZBCi06MTAzQ0EwMDBDQUY0MUY4MDI5OTlEOUNCNUI1NzIzM0ZERTU2OENGQTgzCi06MTAzQ0IwMDAwMkU5MDZFMkY5OUMyQkQwNEFGQzNBNkI4NjYzRjZDNTEyCi06MTAzQ0MwMDA1NDc3MDgzNkQ2OTIxN0ZDNERCOENGRjJGODA1Q0MyRkIyCi06MTAzQ0QwMDBDOTUyOUY5MkZGNkNCRDlGMTE1RkQxNEZDODJBMUY2M0NECi06MTAzQ0UwMDA5OEU3OUY5NURBNDFDQUUzMEQ2NkFFMEQ3MkMyNDA1QTVECi06MTAzQ0YwMDA0MEZFQTdDQ0ZBN0I4ODlENTQ2REM4OEIyNjlEMTY1MDNDCi06MTAzRDAwMDBDRTIxMDI0ODU5NEI2OUIxNENCQzY2QUEwQTNEMThGRjQ2Ci06MTAzRDEwMDA0OEUwQ0E0RUUyQzc4OThDMERBQzE4Mzc2QUY0QTMyOTczCi06MTAzRDIwMDBFMzk4NjBBODU3NUVCQThFNDMxREVBRkJCQ0IwMERFRDY4Ci06MTAzRDMwMDBBRjA0NzhDNDhBNzk5RTAwNUI5Q0Y0QzFCNjQ2NERGQjAzCi06MTAzRDQwMDBGNTE4OEZBQUQxM0ZCN0FCNDIzRjc5NkQ5NkExMkM5MzVFCi06MTAzRDUwMDA3RTFGNzFBMzdFNTkzNzUzQTJBOEQzMzIzRDc5RjYxNzNGCi06MTAzRDYwMDA5NERCMjAxRUE0QkVBRUY2NkE3REI0MEZDNkE3RDc0RDY1Ci06MTAzRDcwMDA2ODg4RUYwOTRGQzI0NjczNDZDRkUzRjkyNzBGQ0NCQUU0Ci06MTAzRDgwMDAwQTc4MkVBRkE5Q0NFNDE3NUYyRjIxNjk1MzE4REEzNUQyCi06MTAzRDkwMDAyNUE1OTRCNUVFRTk3Q0E2OEE3RDI2OEE4MzdBMjk0RUVDCi06MTAzREEwMDBGQTMyOEYzMzQ2RkEyMzM3MjlCRjI2OUI5QzkyNUM2NEY0Ci06MTAzREIwMDA2N0ZFMzU2RENCRDlDMTU4NzlGRUU0NEIyMDIwN0U1NDg3Ci06MTAzREMwMDAwNjUwMTRENTcxNUI2OUNDNjExNjk3Q0IwQTE3Qjg1Q0E1Ci06MTAzREQwMDAzNkYwQzlGNjRGMjQ4RkYzQjFERkE2Q0ZDNzc3RjJFMEY0Ci06MTAzREUwMDA3NkUyNEY3NjVFREYzNEVFQTcxRjU0QkI2OUJGNEMyN0U3Ci06MTAzREYwMDA2QkRDMTA3OEZFN0NERUMwRkQwQThCMDA1RUFCNTJCRjMwCi06MTAzRTAwMDBBNzdFRTFBM0RBRDA3RkIzRDExRkM0MUJDOEFGNjRGODhCCi06MTAzRTEwMDA2RDM2RkFENDJDNzNCRDJGOUI5RUU4OEJDMTkzMkMwRjZCCi06MTAzRTIwMDBCMjc5Njc3MUNFRTIwN0VGOEU1RDc1NTcwOURDNkEzRkE0Ci06MTAzRTMwMDAwMjgxRDdDRkM0QkJGMUQ5RDEwRjcwQUNBMDU0NTIyN0E3Ci06MTAzRTQwMDBCNEFBRkYyMzVFMjlGQjIyRTQ3NUE2OEYyQjAzQzQ3RjRGCi06MTAzRTUwMDA2QUZDNjIyMTU1OEVGNTgxMUZDNDNFNjg5MTFDQ0FGMTJGCi06MTAzRTYwMDA2N0VDMDM4REY2NDEzREVEODM5ODk4RjMxOTlFQjlDQTJFCi06MTAzRTcwMDAxOUVEODMyRTcxMkU4NkNDNjExMzlFQzc3OURBNDlGOTJDCi06MTAzRTgwMDBBNkVEQzg3QTk0RUU2MEI1RDhFMzY1MzREMTM1M0E0RUU0Ci06MTAzRTkwMDAzNEQ3NjcwRjM4MDc4RUEzN0U5NEE5RkQzNkI0OEY5QTY2Ci06MTAzRUEwMDA4RDc5REYyM0M3MkZFMEZENTQ5QzQ3Q0MxOEFGMzczRkY3Ci06MTAzRUIwMDBERUJGMUJFRjdCOUJFNzI5MTFFQ0QzMTQxODdBNkQwRTQ0Ci06MTAzRUMwMDBCMTE3NTY3MDJFQ0U5OTcwNTE3Q0EwOEFGNDcxQUVCMUE0Ci06MTAzRUQwMDBDRURFRjA4QkUyM0JGRUQ1NDM3NDRFNzUyRjAwRkQ3REE4Ci06MTAzRUUwMDAxMDE2OUVBMkY3MUJGQ0MyREYzN0Q5M0RGM0ExNTNGODkxCi06MTAzRUYwMDBFQkREQTA5NjM4QzRGQjIyNEVGNjg3MEIzNTdCQjA5MUU0Ci06MTAzRjAwMDA3MEQ1RjVGMDhGODBEMDNCN0Q1QTJEMjEzQzRFNkZCNDlCCi06MTAzRjEwMDAwOEJEOEY1OTI4QkM4QkZDRDRDQUNBMDVGNDlCMEUzQjQ0Ci06MTAzRjIwMDBCRTFDRDRFMTQ4MzFCQzFGRUZEMUVCQ0RGMkY3RDU4NUYzCi06MTAzRjMwMDBGQTFFQUM4QzRDRjQwM0I2MjhEMjA0RkUyRUU0RkQzOEY1Ci06MTAzRjQwMDBGMUIwM0U4NzBGNTMxMThCODIxQzRFNTkzRTQ2Q0M4OEYwCi06MTAzRjUwMDA5NzU3QzdFQjA4N0IxQTJGQUY4MTE3RUI0MURFQkEwOEUyCi06MTAzRjYwMDBCNzg0RThGRjBDRDc3MUU4OTYyMDlEODczNTQ5NUMyOTE2Ci06MTAzRjcwMDBCNkEyMUNGMzZBRjNGNTNBQzc0QUU4N0Q4QjM1REQxODIzCi06MTAzRjgwMDAwQjEwOUVEMDk2NzhDNjFDRDZEMzkyOUQyM0VBNjMzNDNDCi06MTAzRjkwMDA2N0FEMDZDRjVCQjM3QzNDRjgwNDFGRDNGM0YyMjdGMzg1Ci06MTAzRkEwMDAwQzNFQTJGRDRENDcyODQ4RjFFRUIzMUI0QkU5NzJGNERECi06MTAzRkIwMDAxRjY5RUJCM0UyMkMwRkVBN0JFNDM3QUJCNjhDRjRFMTdDCi06MTAzRkMwMDBGQzVDMkVGNjg4NDc5RkVCRDFFMEVENzJGQUNFQzBERkE1Ci06MTAzRkQwMDAyM0YzRThCQkQzNUYxODdBODVGNEVDRjMzMzE2OERGQTNDCi06MTAzRkUwMDA1OTkyMzE1MzNERTNFMTdCRTVGNDdGQTZCNUU3OUE5ODFBCi06MTAzRkYwMDA5QkZGOUFFN0JGM0FCNEFGNEIyMDBBMDAwMDAwMDAwMEQ1Ci06MTA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTgwMDAwMDAwMDk4Ci06MTA0MDEwMDAwMDAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDYwCi06MTA0MDIwMDAwMDAwMDAyODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDU4Ci06MTA0MDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDAwMDAwMDYwCi06MTA0MDQwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDYwCi06MTA0MDUwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU4Ci06MTA0MDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUwCi06MTA0MDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwCi06MTA0MDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwCi06MTA0MDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwCi06MTA0MEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwCi06MTA0MEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi06MTA0MEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYwCi06MTA0MEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUwCi06MTA0MEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQwCi06MTA0MEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMwCi06MTA0MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFGCi06MTA0MTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlGCi06MTA0MTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGCi06MTA0MTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdGCi06MTA0MTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZGCi06MTA0MTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVGCi06MTA0MTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRGCi06MTA0MTcwMDAwMDAwMzMyODAwMTAwMDAwMDAwMDAwMDgwMDAwMzMzMDY5Ci06MTA0MTgwMDAwMDEwMDAwMDAwMDAwMDAyMDAwMDMzMjgwMDEwMDAwMEIyCi06MTA0MTkwMDAwMDAwMDAxMDAwMDAzQTc4MDAwMDAwMDAwMDAwMDAwODU1Ci06MTA0MUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGCi06MTA0MUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZGCi06MTA0MUMwMDAwMDAwMDAwMDAwMDAzMTIwMDAwMDAwMDAwMDAwMDAwODk2Ci06MTA0MUQwMDAwMDAwMzM2MDAwMDEwMDA0MDAwMDAwMDEwMDAwMzM2OEFCCi06MTA0MUUwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDMzNzAwMDAwMDAwMDJBCi06MTA0MUYwMDAwMDAwMDAwODAwMDAzMzc0MDAwMDAwMDAwMDAwMDAwMjBFCi06MTA0MjAwMDAwMDAwM0E3MDAwMDAwMDAwMDAwMDAwMDgwMDAwM0E0MDgyCi06MTA0MjEwMDAwMDA4MDAwMDAwMDAwMDA4MDAwMDNEODgwMDQwMDAwMDg5Ci06MTA0MjIwMDAwMDAwMDA0MDAwMDAzQTUwMDAwODAwMDAwMDAwMDAwOEI0Ci06MTA0MjMwMDAwMDAwM0E2MDAwMDgwMDAwMDAwMDAwMDgwMDAwM0E4ODEyCi06MTA0MjQwMDAwMEM4MDAwMDAwMDAwMDk4MDAwMDNDMTgwMDk4MDAwMDIyCi06MTA0MjUwMDAwMDAwMDAyODAwMDAzQzU4MDA5ODAwMDAwMDAwMDAyOEUyCi06MTA0MjYwMDAwMDAwMzM3ODAzNjAwMDMwMDAwMDAzNjAwMDAwM0VCMEJGCi06MTA0MjcwMDAwMDA4MDAwMDAwMDAwMDAxMDAwMDNFQjEwMDA4MDAwMDNFCi06MTA0MjgwMDAwMDAwMDAwMTAwMDAyMDA4MDAxMDAwMDAwMDAwMDAxMEU1Ci06MTA0MjkwMDAwMDAwMjAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMEY2Ci06MTA0MkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFCi06MTA0MkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZFCi06MTA0MkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVFCi06MTA0MkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERFCi06MTA0MkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENFCi06MTA0MkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJFCi06MTA0MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFECi06MTA0MzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlECi06MTA0MzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhECi06MTA0MzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdECi06MTA0MzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZECi06MTA0MzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVECi06MTA0MzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRECi06MTA0MzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNECi06MTA0MzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJECi06MTA0MzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFECi06MTA0M0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBECi06MTA0M0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZECi06MTA0M0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVECi06MTA0M0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERECi06MTA0M0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENECi06MTA0M0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJECi06MTA0NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFDCi06MTA0NDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlDCi06MTA0NDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhDCi06MTA0NDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdDCi06MTA0NDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTJDODkyCi06MTA0NDUwMDAwMDgwMDAwMDAwMDAwMDgwMDAwMDAwMDEwMDAwMDAwMDVCCi06MTA0NDYwMDAwMDAwMDAwMDAwMDA0MDAwMDQ5MDAwMDAwMDAwMDQ5MEU0Ci06MTA0NDcwMDAwMDAwMTlDODAwMDAwMDAwMDAwMDAwMDgwMDAwNDk0OEMyCi06MTA0NDgwMDAwMDA4MDAwMDAwMDAwMDA4MDAwMDQ5MjgwMDA4MDAwMEEzCi06MTA0NDkwMDAwMDAwMDAwODAwMDA0OTM4MDAwODAwMDAwMDAwMDAwODgzCi06MTA0NEEwMDAwMDAwMjAwODAwMTAwMDAwMDAwMDAwMTAwMDAwMjAwMEE0Ci06MTA0NEIwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDQwMTAwNDkwMDA0MEQwCi06MTA0NEMwMDAwMDAwMDA0MDAwMDA0OTk4MDAwODAwMDAwMDAwMDAwMUMyCi06MTA0NEQwMDAwMDAwNDk5OTAwMDgwMDAwMDAwMDAwMDEwMDAwMDAwMEYxCi06MTA0NEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENDCi06MTA0NEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJDCi06MTA0NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFCCi06MTA0NTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlCCi06MTA0NTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhCCi06MTA0NTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdCCi06MTA0NTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZCCi06MTA0NTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVCCi06MTA0NTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRCCi06MTA0NTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNCCi06MTA0NTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJCCi06MTA0NTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFCCi06MTA0NUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCCi06MTA0NUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZCCi06MTA0NUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVCCi06MTA0NUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERCCi06MTA0NUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENCCi06MTA0NUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJCCi06MTA0NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwMDAwMDE4MDAwMDUyCi06MTA0NjEwMDAwMDAwMDAxODAwMDA0MzAwMDA0MDAwMDAwMDAwMDA0MEJGCi06MTA0NjIwMDAwMDAwNDMwMDAwNDAwMDAyMDAwMDAwMDEwMDAwNDMwMUMwCi06MTA0NjMwMDAwMDQwMDAwMjAwMDAwMDAwMDAwMDMwMDAwMDQwMDAwMEM4Ci06MTA0NjQwMDAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJBCi06MTA0NjUwMDAwMDAwMzAwMDAwMDgwMDQwMDAwMDAwMDQwMDAwMzAwNEFBCi06MTA0NjYwMDAwMDA4MDA0MDAwMDAwMDA0MDAwMDRCMDAwMDI4MDAwMDhCCi06MTA0NjcwMDAwMDAwMDAyODAwMDA0QjUwMDAxMDAwMDAwMDAwMDAxMDU3Ci06MTA0NjgwMDAwMDAwMzgwMDAwODAwMDAwMDAwMDAwODAwMDAwMzgwMEJBCi06MTA0NjkwMDAwMDA4MDA4MDAwMDAwMDAyMDAwMDM5MDAwMDIwMDAwMDM3Ci06MTA0NkEwMDAwMDAwMDAyMDAwMDAyMDA4MDAxMDAwMDAwMDAwMDAxMEEyCi06MTA0NkIwMDAwMDAwMjAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwNTEwODc5Ci06MTA0NkMwMDAwMDA4MDAwMDAwMDAwMDA4MDAwMDUxMjAwMDA4MDAwMDYxCi06MTA0NkQwMDAwMDAwMDAwODAwMDA1MTMwMDAwODAwMDAwMDAwMDAwODQxCi06MTA0NkUwMDAwMDAwNTFDMDAwMDgwMDAwMDAwMDAwMDEwMDAwNTFDMTlFCi06MTA0NkYwMDAwMDA4MDAwMDAwMDAwMDAxMDAwMDM5NDAwMDEwMDAwNDI0Ci06MTA0NzAwMDAwMDAwMDAwNDAwMDA1MUQwMDAzMDAwMTgwMDAwMDAxMDJDCi06MTA0NzEwMDAwMDAwNTFEODAwMzAwMDE4MDAwMDAwMDIwMDAwMDAwMDI2Ci06MTA0NzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg5Ci06MTA0NzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc5Ci06MTA0NzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY5Ci06MTA0NzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU5Ci06MTA0NzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ5Ci06MTA0NzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM5Ci06MTA0NzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5Ci06MTA0NzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE5Ci06MTA0N0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5Ci06MTA0N0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY5Ci06MTA0N0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU5Ci06MTA0N0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjNFOENFCi06MTA0N0UwMDAwMDgwMDAwMDAwMDAwMDgwMDAwMDAwMDEwMDAwMDAwMEM4Ci06MTA0N0YwMDAwMDAwMDAwMDAwMDAyMDA4MDAxMDAwMDAwMDAwMDAxMDcxCi06MTA0ODAwMDAwMDAwMjAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMkRBMEIzCi06MTA0ODEwMDAwMDA4MDAwMDAwMDAwMDA4MDAwMDJEQjgwMDA4MDAwMDlCCi06MTA0ODIwMDAwMDAwMDAwODAwMDAyNEU4MDJEMDAwMjgwMDAwMDJEMEE4Ci06MTA0ODMwMDAwMDAwMkU1ODAwMDgwMDAwMDAwMDAwMDEwMDAwMkU1OTYyCi06MTA0ODQwMDAwMDA4MDAwMDAwMDAwMDAxMDAwMDJEOTAwMDA4MDAwMDlBCi06MTA0ODUwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUwCi06MTA0ODYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ4Ci06MTA0ODcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM4Ci06MTA0ODgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI4Ci06MTA0ODkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE4Ci06MTA0OEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4Ci06MTA0OEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY4Ci06MTA0OEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU4Ci06MTA0OEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ4Ci06MTA0OEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM4Ci06MTA0OEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI4Ci06MTA0OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE3Ci06MTA0OTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk3Ci06MTA0OTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjUwMDYyCi06MTA0OTMwMDAwMDQwMDAwMDAwMDAwMDA4MDAwMDI1MDgwMDQwMDAwMEMyCi06MTA0OTQwMDAwMDAwMDAyODAwMDAwOUMwMDEyMDAwMTAwMDAwMDAwODNECi06MTA0OTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU3Ci06MTA0OTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwMjAwMkQwMDAyOEVECi06MTA0OTcwMDAwMDAwMDAwODAwMDAzMDAwMDAwMDAwMDAwMDAwMTAwMEVGCi06MTA0OTgwMDAwMDAwNTA5OTAwMDAwMDAwMDAwMDAwMDEwMDAwNTBCMDNECi06MTA0OTkwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDQ1QTAwMDkwMDAwODk4Ci06MTA0OUEwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZGCi06MTA0OUIwMDAwMDAwMjk2MDAwMDgwMDAwMDAwMDAwMDEwMDAwMjk2MURCCi06MTA0OUMwMDAwMDA4MDAwMDAwMDAwMDAxMDAwMDI5NzAwMDA4MDAwNDM5Ci06MTA0OUQwMDAwMDAwMDAwMjAwMDAyOTc4MDAwODAwMDQwMDAwMDAwNDI0Ci06MTA0OUUwMDAwMDAwMkZCMDAwMDgwMDAwMDAwMDAwMDQwMDAwMkZCNEY5Ci06MTA0OUYwMDAwMDA4MDAwMDAwMDAwMDA0MDAwMDJGQzAwMDAwMDAwMEJDCi06MTA0QTAwMDAwMDAwMDAwODAwMDAyRkM4MDAwMDAwMDAwMDAwMDAwODlGCi06MTA0QTEwMDAwMDAwMzAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwNTA0MEM2Ci06MTA0QTIwMDAwMDAxMDAwMTAwMDAwMDAxMDAwMDUwMDAwMDAwMDAwMDMzCi06MTA0QTMwMDAwMDAwMDAyMDAwMDAwODA4MDAxMDAwMDAwMDAwMDAwNDMyCi06MTA0QTQwMDAwMDAwMDgwQzAwMTAwMDAwMDAwMDAwMDEwMDAwMDhCNzgyCi06MTA0QTUwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDA4QjYwMDAwMDAwMDk3Ci06MTA0QTYwMDAwMDAwMDAwMTAwMDAxMDAwMDAzMDAwMTgwMDAwMDAwNEU5Ci06MTA0QTcwMDAwMDAwMTAwNDAwMzAwMDE4MDAwMDAwMDQwMDAwMTAwOEJFCi06MTA0QTgwMDAwMDMwMDAxODAwMDAwMDAyMDAwMDEwMEEwMDMwMDAxODdBCi06MTA0QTkwMDAwMDAwMDAwMjAwMDAxMDBDMDAzMDAwMTgwMDAwMDAwMUFGCi06MTA0QUEwMDAwMDAwMTAwRDAwMzAwMDE4MDAwMDAwMDEwMDAwMTAwRTgyCi06MTA0QUIwMDAwMDMwMDAxODAwMDAwMDAxMDAwMDEwMTAwMDMwMDAxODQ1Ci06MTA0QUMwMDAwMDAwMDAwNDAwMDAxMDE0MDAzMDAwMTgwMDAwMDAwNDcyCi06MTA0QUQwMDAwMDAwMzAwMDAxMDAwMDgwMDAwODAwMDQwMDAwMzAwNEU1Ci06MTA0QUUwMDAwMTAwMDA4MDAwMDgwMDA0MDAwMDAwMEEwMDAwMDAwMDJGCi06MTA0QUYwMDAwMDAwMDAwMDAwMDAzMDY4MDEwMDAwODAwMDAwMDAwMTlDCi06MTA0QjAwMDAwMDAwMzA2OTAxMDAwMDgwMDAwMDAwMDEwMDAwMzA2Q0VFCi06MTA0QjEwMDAwMTAwMDA4MDAwMDAwMDAyMDAwMDMwNkUwMTAwMDA4MEYzCi06MTA0QjIwMDAwMDAwMDAwMjAwMDAzMDcwMDEwMDAwODAwMDAwMDAwNDVFCi06MTA0QjMwMDAwMDAwMzA3NDAxMDAwMDgwMDAwMDAwMDQwMDAwMzA2NkI2Ci06MTA0QjQwMDAwMTAwMDA4MDAwMDAwMDAyMDAwMDMwNjQwMTAwMDA4MENECi06MTA0QjUwMDAwMDAwMDAwMTAwMDAzMDYwMDEwMDAwODAwMDAwMDAwMjQxCi06MTA0QjYwMDAwMDAwMzA2MjAxMDAwMDgwMDAwMDAwMDIwMDAwMzA1MEIwCi06MTA0QjcwMDAwMTAwMDA4MDAwMDAwMDA0MDAwMDMwNTQwMTAwMDA4MEFCCi06MTA0QjgwMDAwMDAwMDAwNDAwMDAzMDU4MDEwMDAwODAwMDAwMDAwNDE0Ci06MTA0QjkwMDAwMDAwMzA1QzAxMDAwMDgwMDAwMDAwMDQwMDAwMzA3QzU4Ci06MTA0QkEwMDAwMTAwMDA4MDAwMDAwMDAxMDAwMDMwN0QwMTAwMDA4MDU1Ci06MTA0QkIwMDAwMDAwMDAwMTAwMDAxQzE4MDAxMDAwMDAwMDAwMDAwNEFDCi06MTA0QkMwMDAwMDAwMUMzMDAwMTAwMDAwMDAwMDAwMDQwMDAwMUMzODMxCi06MTA0QkQwMDAwMDEwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMEMxCi06MTA0QkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM1Ci06MTA0QkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI1Ci06MTA0QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRDMTAwMDA4MDAwMDQwCi06MTA0QzEwMDAwMDAwMDAwMjAwMDA0QzEyMDAwODAwMDAwMDAwMDAwMjJBCi06MTA0QzIwMDAwMDAwNEMxNDAwMDgwMDAwMDAwMDAwMDQwMDAwNEMyMEFDCi06MTA0QzMwMDAwMDA4MDAwMDAwMDAwMDA4MDAwMDRDMzAwMDQwMDAwOEEwCi06MTA0QzQwMDAwMDAwMDAwODAwMDA0QzAwMDAwODAwMDAwMDAwMDAwMjA2Ci06MTA0QzUwMDAwMDAwNEMwMjAwMDgwMDAwMDAwMDAwMDEwMDAwNEMwNEFECi06MTA0QzYwMDAwMDA4MDAwMDAwMDAwMDAyMDAwMDRDRDAwMDA4MDAwMDE2Ci06MTA0QzcwMDAwMDAwMDAwODAwMDA0Q0UwMDAwODAwMDAwMDAwMDAwNEY0Ci06MTA0QzgwMDAwMDAwNENFNDAwMDgwMDAwMDAwMDAwMDEwMDAwNENGMEFGCi06MTA0QzkwMDAwMDA4MDAwMDAwMDAwMDAyMDAwMDRDRjQwMDA4MDAwMEMyCi06MTA0Q0EwMDAwMDAwMDAwMjAwMDA0RDAwMDAwODAwMDAwMDAwMDAwNEE5Ci06MTA0Q0IwMDAwMDAwNTAwMDAwMTAwMDAwMDAwMDAwMDQwMDAwNTAwNDNDCi06MTA0Q0MwMDAwMDEwMDAwMDAwMDAwMDA0MDAwMDUwMDgwMDEwMDAwMDY4Ci06MTA0Q0QwMDAwMDAwMDAwNDAwMDAxNDAwMDAwODAwMDAwMDAwMDAwMkIyCi06MTA0Q0UwMDAwMDAwMTQwMjAwMDgwMDAwMDAwMDAwMDEwMDAwMTQwNDhECi06MTA0Q0YwMDAwMDA4MDAwMDAwMDAwMDAyMDAwMDE0MTAwMDA4MDAwMDdFCi06MTA0RDAwMDAwMDAwMDAwMjAwMDAxNDE0MDAwODAwMDAwMDAwMDAwMjZGCi06MTA0RDEwMDAwMDAwMTQxNjAwMDgwMDAwMDAwMDAwMDIwMDAwMTlCODhFCi06MTA0RDIwMDAwMDA4MDAwMDAwMDAwMDA4MDAwMDE0MjAwMDA4MDAwMDM3Ci06MTA0RDMwMDAwMDAwMDAwMjAwMDAxNDI0MDAwODAwMDAwMDAwMDAwMjJGCi06MTA0RDQwMDAwMDAwMTlDODAwMDgwMDAwMDAwMDAwMDgwMDAwMkMxMDM2Ci06MTA0RDUwMDAwMDA4MDAwMDAwMDAwMDAxMDAwMDJDMTEwMDA4MDAwMDA1Ci06MTA0RDYwMDAwMDAwMDAwMTAwMDAyQzEyMDAwODAwMDAwMDAwMDAwMUZCCi06MTA0RDcwMDAwMDAwMkMxMzAwMDgwMDAwMDAwMDAwMDEwMDAwMkMwMEJGCi06MTA0RDgwMDAwMDA4MDAwMDAwMDAwMDAyMDAwMDJDMDIwMDA4MDAwMEUzCi06MTA0RDkwMDAwMDAwMDAwMTAwMDAyQzA0MDAwODAwMDAwMDAwMDAwMkQ4Ci06MTA0REEwMDAwMDAwMkMzMDAwMDgwMDAwMDAwMDAwMDIwMDAwMkMzMjNGCi06MTA0REIwMDAwMDA4MDAwMDAwMDAwMDAyMDAwMDJDMzQwMDA4MDAwMDgxCi06MTA0REMwMDAwMDAwMDAwMjAwMDAyQzIwMDAwODAwMDAwMDAwMDAwMThDCi06MTA0REQwMDAwMDAwMkMyMTAwMDgwMDAwMDAwMDAwMDEwMDAwMkMyMjJGCi06MTA0REUwMDAwMDA4MDAwMDAwMDAwMDAxMDAwMDJDMjMwMDA4MDAwMDYzCi06MTA0REYwMDAwMDAwMDAwMTAwMDAyQzI0MDAwODAwMDAwMDAwMDAwMTU5Ci06MTA0RTAwMDAwMDAwMkMyNTAwMDgwMDAwMDAwMDAwMDEwMDAwMkMyNkY2Ci06MTA0RTEwMDAwMDA4MDAwMDAwMDAwMDAxMDAwMDE0MDAwMDA4MDAwMDZECi06MTA0RTIwMDAwMDAwMDAwMjAwMDAxNDAyMDAwODAwMDAwMDAwMDAwMTYxCi06MTA0RTMwMDAwMDAwMTQwNDAwMDgwMDAwMDAwMDAwMDIwMDAwMTQxMjJBCi06MTA0RTQwMDAwMEMwMDAxODAwMDAwMDAyMDAwMDE0MTAwMEMwMDAxODhDCi06MTA0RTUwMDAwMDAwMDAwMjAwMDAxNDFDMDBDMDAwMTgwMDAwMDAwODQwCi06MTA0RTYwMDAwMDAwMTQxNDAwQzAwMDE4MDAwMDAwMDgwMDAwMTQyN0ZGCi06MTA0RTcwMDAwMEMwMDAxODAwMDAwMDAxMDAwMDE0MjQwMEMwMDAxODQ5Ci06MTA0RTgwMDAwMDAwMDAwMjAwMDAxNDI2MDBDMDAwMTgwMDAwMDAwMTBECi06MTA0RTkwMDAwMDAwMTU5MDAwMDgwMDAwMDAwMDAwMDgwMDAwMTVBMEE4Ci06MTA0RUEwMDAwMDA4MDAwMDAwMDAwMDA4MDAwMDE1QjAwMDA4MDAwMDI1Ci06MTA0RUIwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVBCi06MTA0RUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUyCi06MTA0RUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQyCi06MTA0RUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMyCi06MTA0RUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIyCi06MTA0RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEExCi06MTA0RjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkxCi06MTA0RjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgxCi06MTA0RjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcxCi06MTA0RjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYxCi06MTA0RjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUxCi06MTA0RjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQxCi06MTA0RjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMxCi06MTA0RjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIxCi06MTA0RjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExCi06MTA0RkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCi06MTA0RkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYxCi06MTA0RkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUxCi06MTA0RkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQxCi06MTA0RkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMxCi06MTA0RkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIxCi06MTA1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwMDIyMDAwMDAwMDAwMDc4Ci06MDAwMDAwMDFGRgpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvYm54MngvYm54MngtZTEtNi4yLjUuMC5mdy5paGV4IGIvZmlybXdhcmUvYm54MngvYm54MngtZTEtNi4yLjUuMC5mdy5paGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNTM1ODIKLS0tIC9kZXYvbnVsbAorKysgYi9maXJtd2FyZS9ibngyeC9ibngyeC1lMS02LjIuNS4wLmZ3LmloZXgKQEAgLTAsMCArMSw5NDgzIEBACis6MTAwMDAwMDAwMDAwM0JCMDAwMDAwMDY4MDAwMDA3MEMwMDAwM0MyMDJFCis6MTAwMDEwMDAwMDAwMUFGODAwMDA0MzMwMDAwMDAwN0MwMDAwNUUzMDUxCis6MTAwMDIwMDAwMDAwN0EyQzAwMDA1RUIwMDAwMDAwQjAwMDAwRDhFMEI0Cis6MTAwMDMwMDAwMDAwODAyMDAwMDBEOTk4MDAwMDAwODgwMDAxNTlDMDBECis6MTAwMDQwMDAwMDAwMzk4ODAwMDE1QTUwMDAwMDAwOTAwMDAxOTNFMDQwCis6MTAwMDUwMDAwMDAwQUJGQzAwMDE5NDc4MDAwMDBGRkMwMDAyNDA3ODI3Cis6MTAwMDYwMDAwMDAwMDAwNDAwMDI1MDc4MDIwNDAwNDgwMDAwMDAwRjY1Cis6MTAwMDcwMDAwMjA0MDA1NDAwMDAwMDQ1MDIwNDAwNTgwMDAwMDAwMDgzCis6MTAwMDgwMDAwMjA0MDA1QzAwMDAwMDA2MDIwNDAwNzAwMDAwMDAwNDhFCis6MTAwMDkwMDAwMjA0MDA3ODAwMDAwMDAwMDIwNDAwN0MxMjE3MDAwMDM3Cis6MTAwMEEwMDAwMjA0MDA4MDIyMTcwMDAwMDIwNDAwODQzMjE3MDAwMEJFCis6MTAwMEIwMDAwNjA0MDA4ODAwMDAwMDA1MDIwNDAwOUMxMjE1MDAwMEUwCis6MTAwMEMwMDAwMjA0MDBBMDIyMTUwMDAwMDIwNDAwQTQzMjE1MDAwMDYyCis6MTAwMEQwMDAwNjA0MDBBODAwMDAwMDA0MDIwNDAwQjgwMjEwMDAwMDlBCis6MTAwMEUwMDAwMjA0MDBCQzAwMTAwMDAwMDIwNDAwQzAxMDEwMDAwMDU4Cis6MTAwMEYwMDAwMjA0MDBDNDIwMTAwMDAwMDIwNDAwQzgzMDEwMDAwMEY4Cis6MTAwMTAwMDAwNjA0MDBDQzAwMDAwMDA0MDIwNDAwREMwMDEwMDAwMDIzCis6MTAwMTEwMDAwMjA0MDBFMDEyMTQwMDAwMDIwNDAwRTQyMjE0MDAwMEIzCis6MTAwMTIwMDAwMjA0MDBFODMyMTQwMDAwMDYwNDAwRUMwMDAwMDAwNEExCis6MTAwMTMwMDAwMTA0MDEyNDAwMDAwMDAwMDEwNDAxMjgwMDAwMDAwMDY3Cis6MTAwMTQwMDAwMTA0MDEyQzAwMDAwMDAwMDEwNDAxMzAwMDAwMDAwMDQ3Cis6MTAwMTUwMDAwMjA0MDAwNDAwMDAwMEZGMDIwNDAwMDgwMDAwMDBGRjg5Cis6MTAwMTYwMDAwMjA0MDAwQzAwMDAwMEZGMDIwNDAwMTAwMDAwMDBGRjY5Cis6MTAwMTcwMDAwMjA0MDAxNDAwMDAwMEZGMDIwNDAwMTgwMDAwMDBGRjQ5Cis6MTAwMTgwMDAwMjA0MDAxQzAwMDAwMEZGMDIwNDAwMjAwMDAwMDBGRjI5Cis6MTAwMTkwMDAwMjA0MDAyNDAwMDAwMDNFMDIwNDAwMjgwMDAwMDAwMEM5Cis6MTAwMUEwMDAwMjA0MDAyQzAwMDAwMDNGMDIwNDAwMzAwMDAwMDAzRjY5Cis6MTAwMUIwMDAwMjA0MDAzNDAwMDAwMDNGMDIwNDAwMzgwMDAwMDAwMDg4Cis6MTAwMUMwMDAwMjA0MDAzQzAwMDAwMDNGMDIwNDAwNDAwMDAwMDAzRjI5Cis6MTAwMUQwMDAwMjA0MDA0NDAwMDAwMDNGMDIwNDIwMDgwMDAwMDIxMTU1Cis6MTAwMUUwMDAwMjA0MjAwQzAwMDAwMjAwMDIwNDIwMTAwMDAwMDIwNDlGCis6MTAwMUYwMDAwMjA0MjAxNDAwMDAwMjE5MDIwNDIwMUMwMDAwRkZGRjZBCis6MTAwMjAwMDAwMjA0MjAyMDAwMDBGRkZGMDIwNDIwMjQwMDAwRkZGRjYyCis6MTAwMjEwMDAwMjA0MjAyODAwMDBGRkZGMDYwNDIwMzgwMDAwMDA4MEIwCis6MTAwMjIwMDAwMjA0MjIzODA3RkZGRkZGMDIwNDIyM0MwMDAwMDAzRkM3Cis6MTAwMjMwMDAwMjA0MjI0MDA3RkZGRkZGMDIwNDIyNDQwMDAwMDAwRkQ3Cis6MTAwMjQwMDAwMTA0MjI0ODAwMDAwMDAwMDEwNDIyNEMwMDAwMDAwMENDCis6MTAwMjUwMDAwMTA0MjI1MDAwMDAwMDAwMDEwNDIyNTQwMDAwMDAwMEFDCis6MTAwMjYwMDAwMTA0MjI1ODAwMDAwMDAwMDEwNDIyNUMwMDAwMDAwMDhDCis6MTAwMjcwMDAwMTA0MjI2MDAwMDAwMDAwMDEwNDIyNjQwMDAwMDAwMDZDCis6MTAwMjgwMDAwMTA0MjI2ODAwMDAwMDAwMDEwNDIyNkMwMDAwMDAwMDRDCis6MTAwMjkwMDAwMTA0MjI3MDAwMDAwMDAwMDEwNDIyNzQwMDAwMDAwMDJDCis6MTAwMkEwMDAwMTA0MjI3ODAwMDAwMDAwMDEwNDIyN0MwMDAwMDAwMDBDCis6MTAwMkIwMDAwMjA0MjRCQzAwMDAwMDAxMEMwNDIwMDAwMDAwMDNFODNDCis6MTAwMkMwMDAwQTA0MjAwMDAwMDAwMDAxMEIwNDIwMDAwMDAwMDAwQUM2Cis6MTAwMkQwMDAwNjA1NDAwMDAwMDAwRDAwMDIwNTAwNDQwMDAwMDAyMDVCCis6MTAwMkUwMDAwMjA1MDA0ODAwMDAwMDMyMDIwNTAwOTAwMjE1MDAyMEJGCis6MTAwMkYwMDAwMjA1MDA5NDAyMTUwMDIwMDIwNTAwOTgwMDAwMDAzMDVECis6MTAwMzAwMDAwMjA1MDA5QzA4MTAwMDAwMDIwNTAwQTAwMDAwMDAzMzU4Cis6MTAwMzEwMDAwMjA1MDBBNDAwMDAwMDMwMDIwNTAwQTgwMDAwMDAzMTIyCis6MTAwMzIwMDAwMjA1MDBBQzAwMDAwMDAyMDIwNTAwQjAwMDAwMDAwNTVDCis6MTAwMzMwMDAwMjA1MDBCNDAwMDAwMDA2MDIwNTAwQjgwMDAwMDAwMjNCCis6MTAwMzQwMDAwMjA1MDBCQzAwMDAwMDAyMDIwNTAwQzAwMDAwMDAwMDIxCis6MTAwMzUwMDAwMjA1MDBDNDAwMDAwMDA1MDIwNTAwQzgwMDAwMDAwMkZDCis6MTAwMzYwMDAwMjA1MDBDQzAwMDAwMDAyMDIwNTAwRDAwMDAwMDAwMkRGCis6MTAwMzcwMDAwMjA1MDBENDAwMDAwMDAxMDIwNTAxMTQwMDAwMDAwMTg0Cis6MTAwMzgwMDAwMjA1MDExQzAwMDAwMDAxMDIwNTAxMjAwMDAwMDAwMjFFCis6MTAwMzkwMDAwMjA1MDIwNDAwMDAwMDAxMDIwNTAyMEMwMDAwMDA0MEZBCis6MTAwM0EwMDAwMjA1MDIxMDAwMDAwMDQwMDIwNTAyMUMwMDAwMDAyMEFGCis6MTAwM0IwMDAwMjA1MDIyMDAwMDAwMDEzMDIwNTAyMjQwMDAwMDAyMEI0Cis6MTAwM0MwMDAwNjA1MDI0MDAwMDAwMDBBMDQwNTAyODAwMDIwMDAwMDJCCis6MTAwM0QwMDAwMjA1MDA1MDAwMDAwMDA3MDIwNTAwNTQwMDAwMDAwNzVECis6MTAwM0UwMDAwMjA1MDA1ODAwMDAwMDAwMDIwNTAwNUMwMDAwMDAwODQzCis6MTAwM0YwMDAwNjA1MDA2MDAwMDAwMDA0MDIwNTAwRDgwMDAwMDAwNkE5Cis6MTAwNDAwMDAwMjA1MDBFMDAwMDAwMDBEMDIwNTAwRTQwMDAwMDAyREUwCis6MTAwNDEwMDAwMjA1MDBFODAwMDAwMDAwMDIwNTAwRUMwMDAwMDAyMERBCis6MTAwNDIwMDAwMjA1MDBGMDAwMDAwMDAwMDIwNTAwRjQwMDAwMDAyMEJBCis6MTAwNDMwMDAwMjA1MDBGODAwMDAwMDAwMDIwNTAwRkMwMDAwMDAyMDlBCis6MTAwNDQwMDAwMjA1MDAwNDAwMDAwMDAxMDIwNTAwMDgwMDAwMDAwMTkwCis6MTAwNDUwMDAwMjA1MDAwQzAwMDAwMDAxMDIwNTAwMTAwMDAwMDAwMTcwCis6MTAwNDYwMDAwMjA1MDAxNDAwMDAwMDAxMDIwNTAwMTgwMDAwMDAwMTUwCis6MTAwNDcwMDAwMjA1MDAxQzAwMDAwMDAxMDIwNTAwMjAwMDAwMDAwMTMwCis6MTAwNDgwMDAwMjA1MDAyNDAwMDAwMDAxMDIwNTAwMjgwMDAwMDAwMTEwCis6MTAwNDkwMDAwMjA1MDAyQzAwMDAwMDAxMDIwNTAwMzAwMDAwMDAwMUYwCis6MTAwNEEwMDAwMjA1MDAzNDAwMDAwMDAxMDIwNTAwMzgwMDAwMDAwMUQwCis6MTAwNEIwMDAwMjA1MDAzQzAwMDAwMDAxMDIwNTAwNDAwMDAwMDAwMUIwCis6MTAwNEMwMDAwNDA2MTAwMDAyMDAwMDIwMDIwNjAwREMwMDAwMDAwMTBCCis6MTAwNEQwMDAwMTA2MDBEODAwMDAwMDAwMDQwNjAyMDAwMDAzMDIyMDBDCis6MTAwNEUwMDAwMjA2MDBEQzAwMDAwMDAwMDIwNjAwNjgwMDAwMDBCODAwCis6MTAwNEYwMDAwMjA2MDA3ODAwMDAwMTE0MDEwNjAwQjgwMDAwMDAwMEE4Cis6MTAwNTAwMDAwMTA2MDBDODAwMDAwMDAwMDIwNjAwNkMwMDAwMDBCOEYwCis6MTAwNTEwMDAwMjA2MDA3QzAwMDAwMTE0MDEwNjAwQkMwMDAwMDAwMDdGCis6MTAwNTIwMDAwMTA2MDBDQzAwMDAwMDAwMDcxODA0MDAwMDdCMDAwMDVBCis6MTAwNTMwMDAwODE4MDc2MDAwMTQwMjIzMDcxQzAwMDAyQTA0MDAwMEFBCis6MTAwNTQwMDAwNzFDODAwMDMyMTEwQTgyMDcxRDAwMDAxRTBDMTcwN0NECis6MTAwNTUwMDAwODFENDU1MDU3NTYwMjI1MDExODAwMDAwMDAwMDAwMEY0Cis6MTAwNTYwMDAwMTE4MDAwNDAwMDAwMDAwMDExODAwMDgwMDAwMDAwMDRECis6MTAwNTcwMDAwMTE4MDAwQzAwMDAwMDAwMDExODAwMTAwMDAwMDAwMDJECis6MTAwNTgwMDAwMTE4MDAxNDAwMDAwMDAwMDIxODAwMjAwMDAwMDAwMTAzCis6MTAwNTkwMDAwMjE4MDAyNDAwMDAwMDAyMDIxODAwMjgwMDAwMDAwM0Q2Cis6MTAwNUEwMDAwMjE4MDAyQzAwMDAwMDAwMDIxODAwMzAwMDAwMDAwNEI3Cis6MTAwNUIwMDAwMjE4MDAzNDAwMDAwMDAxMDIxODAwMzgwMDAwMDAwMDlBCis6MTAwNUMwMDAwMjE4MDAzQzAwMDAwMDAxMDIxODAwNDAwMDAwMDAwNDc2Cis6MTAwNUQwMDAwMjE4MDA0NDAwMDAwMDAwMDIxODAwNDgwMDAwMDAwMTVBCis6MTAwNUUwMDAwMjE4MDA0QzAwMDAwMDAzMDIxODAwNTAwMDAwMDAwMDM4Cis6MTAwNUYwMDAwMjE4MDA1NDAwMDAwMDAxMDIxODAwNTgwMDAwMDAwNDE2Cis6MTAwNjAwMDAwMjE4MDA1QzAwMDAwMDAwMDIxODAwNjAwMDAwMDAwMUY5Cis6MTAwNjEwMDAwMjE4MDA2NDAwMDAwMDAzMDIxODAwNjgwMDAwMDAwMEQ3Cis6MTAwNjIwMDAwMjE4MDA2QzAwMDAwMDAxMDIxODAwNzAwMDAwMDAwNEI1Cis6MTAwNjMwMDAwMjE4MDA3NDAwMDAwMDAwMDIxODAwNzgwMDAwMDAwNDk2Cis6MTAwNjQwMDAwMjE4MDA3QzAwMDAwMDAzMDYxODAwODAwMDAwMDAwMjcxCis6MTAwNjUwMDAwMjE4MDBBNDAwMDAzRkZGMDIxODAwQTgwMDAwMDNGRkRBCis6MTAwNjYwMDAwMjE4MDIyNDAwMDAwMDAwMDIxODAyMzQwMDAwMDAwMEZBCis6MTAwNjcwMDAwMjE4MDI0QzAwMDAwMDAwMDIxODAyRTQwMDAwMDBGRjEzCis6MTAwNjgwMDAwNjE4MTAwMDAwMDAwNDAwMDIxQjhCQzAwMDAwMDAwMUNGCis6MTAwNjkwMDAwMjFCODAwMDAwMDAwMDM0MDIxQjgwNDAwMDAwMDAxODk0Cis6MTAwNkEwMDAwMjFCODA4MDAwMDAwMDBDMDIxQjgwQzAwMDAwMDAyMEE0Cis6MTAwNkIwMDAwQzFCODMwMDAwMDdBMTIwMEExQjgzMDAwMDAwMDEzOEU3Cis6MTAwNkMwMDAwQjFCODMwMDAwMDAxMzg4MEExQjgzNDAwMDAwMDAwMEZFCis6MTAwNkQwMDAwQzFCODM0MDAwMDAwMUY0MEIxQjgzNDAwMDAwMDAwNTRECis6MTAwNkUwMDAwMjFCODM4MDAwMDdBMTIwMDIxQjgzQzAwMDAwMDFGNENECis6MTAwNkYwMDAwNjFBMTAwMDAwMDAwMjczMDQxQTE5Q0MwMDAxMDIyNzI4Cis6MTAwNzAwMDAwNjFBMjAwODAwMDAwMEM4MDYxQTIwMDAwMDAwMDAwMjk3Cis6MTAwNzEwMDAwNDFBNDk5ODAwMDQwMjI4MDYxQTJFMjgwMDAwMDAwMjM0Cis6MTAwNzIwMDAwNjFBMkUyMDAwMDAwMDAyMDYxQTA4MDAwMDAwMDAwMjJGCis6MTAwNzMwMDAwNjFBMDgwODAwMDAwMDA0MDYxQTA4MTgwMDAwMDAwMjQzCis6MTAwNzQwMDAwNDFBMDhCMDAwMDIwMjJDMDYxQTJGRDAwMDAwMDAwNjdFCis6MTAwNzUwMDAwNDFBMkZFODAwMDIwMjJFMDQxQTJGQzAwMDA0MDIzMEVGCis6MTAwNzYwMDAwNDFBMzAwMDAwMDEwMjM0MDYxQTMwMDQwMDAwMDAwM0FECis6MTAwNzcwMDAwNDFBMzAxMDAwMDEwMjM1MDYxQTMwMTQwMDAwMDAwMzdDCis6MTAwNzgwMDAwNDFBMzAyMDAwMDEwMjM2MDYxQTMwMjQwMDAwMDAwMzRCCis6MTAwNzkwMDAwNDFBMzAzMDAwMDEwMjM3MDYxQTMwMzQwMDAwMDAwMzFBCis6MTAwN0EwMDAwNDFBMzA0MDAwMDEwMjM4MDYxQTMwNDQwMDAwMDAwM0U5Cis6MTAwN0IwMDAwNDFBMzA1MDAwMDEwMjM5MDYxQTMwNTQwMDAwMDAwM0I4Cis6MTAwN0MwMDAwNDFBMzA2MDAwMDEwMjNBMDYxQTMwNjQwMDAwMDAwMzg3Cis6MTAwN0QwMDAwNDFBMzA3MDAwMDEwMjNCMDYxQTMwNzQwMDAwMDAwMzU2Cis6MTAwN0UwMDAwNDFBMzA4MDAwMDEwMjNDMDYxQTMwODQwMDAwMDAwMzI1Cis6MTAwN0YwMDAwNDFBMzA5MDAwMDEwMjNEMDYxQTMwOTQwMDAwMDAwM0Y0Cis6MTAwODAwMDAwNDFBMzBBMDAwMDEwMjNFMDYxQTMwQTQwMDAwMDAwM0MyCis6MTAwODEwMDAwNDFBMzBCMDAwMDEwMjNGMDYxQTMwQjQwMDAwMDAwMzkxCis6MTAwODIwMDAwNDFBMzBDMDAwMDEwMjQwMDYxQTMwQzQwMDAwMDAwMzYwCis6MTAwODMwMDAwNDFBMzBEMDAwMDEwMjQxMDYxQTMwRDQwMDAwMDAwMzJGCis6MTAwODQwMDAwNDFBMzBFMDAwMDEwMjQyMDYxQTMwRTQwMDAwMDAwM0ZFCis6MTAwODUwMDAwNDFBMzBGMDAwMDEwMjQzMDYxQTMwRjQwMDAwMDAwM0NECis6MTAwODYwMDAwNDFBMzEwMDAwMDEwMjQ0MDYxQTMxMDQwMDAwMDAwMzlBCis6MTAwODcwMDAwNDFBMzExMDAwMDEwMjQ1MDYxQTMxMTQwMDAwMDAwMzY5Cis6MTAwODgwMDAwNDFBMzEyMDAwMDEwMjQ2MDYxQTMxMjQwMDAwMDAwMzM4Cis6MTAwODkwMDAwNDFBMzEzMDAwMDEwMjQ3MDYxQTMxMzQwMDAwMDAwMzA3Cis6MTAwOEEwMDAwNDFBMzE0MDAwMDEwMjQ4MDYxQTMxNDQwMDAwMDAwM0Q2Cis6MTAwOEIwMDAwNDFBMzE1MDAwMDEwMjQ5MDYxQTMxNTQwMDAwMDAwM0E1Cis6MTAwOEMwMDAwNDFBMzE2MDAwMDEwMjRBMDYxQTMxNjQwMDAwMDAwMzc0Cis6MTAwOEQwMDAwNDFBMzE3MDAwMDEwMjRCMDYxQTMxNzQwMDAwMDAwMzQzCis6MTAwOEUwMDAwNDFBMzE4MDAwMDEwMjRDMDYxQTMxODQwMDAwMDAwMzEyCis6MTAwOEYwMDAwNDFBMzE5MDAwMDEwMjREMDYxQTMxOTQwMDAwMDAwM0UxCis6MTAwOTAwMDAwNDFBMzFBMDAwMDEwMjRFMDYxQTMxQTQwMDAwMDAwM0FGCis6MTAwOTEwMDAwNDFBMzFCMDAwMDEwMjRGMDYxQTMxQjQwMDAwMDAwMzdFCis6MTAwOTIwMDAwNDFBMzFDMDAwMDEwMjUwMDYxQTMxQzQwMDAwMDAwMzRECis6MTAwOTMwMDAwNDFBMzFEMDAwMDEwMjUxMDYxQTMxRDQwMDAwMDAwMzFDCis6MTAwOTQwMDAwNDFBMzFFMDAwMDEwMjUyMDYxQTMxRTQwMDAwMDAwM0VCCis6MTAwOTUwMDAwNDFBMzFGMDAwMDEwMjUzMDYxQTMxRjQwMDAwMDAwM0JBCis6MTAwOTYwMDAwNDFBMzIwMDAwMDEwMjU0MDYxQTMyMDQwMDAwMDAwMzg3Cis6MTAwOTcwMDAwNDFBMzIxMDAwMDEwMjU1MDYxQTMyMTQwMDAwMDAwMzU2Cis6MTAwOTgwMDAwNDFBMzIyMDAwMDEwMjU2MDYxQTMyMjQwMDAwMDAwMzI1Cis6MTAwOTkwMDAwNDFBMzIzMDAwMDEwMjU3MDYxQTMyMzQwMDAwMDAwM0Y0Cis6MTAwOUEwMDAwNDFBMzI0MDAwMDEwMjU4MDYxQTMyNDQwMDAwMDAwM0MzCis6MTAwOUIwMDAwNDFBMzI1MDAwMDEwMjU5MDYxQTMyNTQwMDAwMDAwMzkyCis6MTAwOUMwMDAwNDFBMzI2MDAwMDEwMjVBMDYxQTMyNjQwMDAwMDAwMzYxCis6MTAwOUQwMDAwNDFBMzI3MDAwMDEwMjVCMDYxQTMyNzQwMDAwMDAwMzMwCis6MTAwOUUwMDAwNDFBMzI4MDAwMDEwMjVDMDYxQTMyODQwMDAwMDAwM0ZGCis6MTAwOUYwMDAwNDFBMzI5MDAwMDEwMjVEMDYxQTMyOTQwMDAwMDAwM0NFCis6MTAwQTAwMDAwNDFBMzJBMDAwMDEwMjVFMDYxQTMyQTQwMDAwMDAwMzlDCis6MTAwQTEwMDAwNDFBMzJCMDAwMDEwMjVGMDYxQTMyQjQwMDAwMDAwMzZCCis6MTAwQTIwMDAwNDFBMzJDMDAwMDEwMjYwMDYxQTMyQzQwMDAwMDAwMzNBCis6MTAwQTMwMDAwNDFBMzJEMDAwMDEwMjYxMDYxQTMyRDQwMDAwMDAwMzA5Cis6MTAwQTQwMDAwNDFBMzJFMDAwMDEwMjYyMDYxQTMyRTQwMDAwMDAwM0Q4Cis6MTAwQTUwMDAwNDFBMzJGMDAwMDEwMjYzMDYxQTMyRjQwMDAwMDAwM0E3Cis6MTAwQTYwMDAwNDFBMzMwMDAwMDEwMjY0MDYxQTMzMDQwMDAwMDAwMzc0Cis6MTAwQTcwMDAwNDFBMzMxMDAwMDEwMjY1MDYxQTMzMTQwMDAwMDAwMzQzCis6MTAwQTgwMDAwNDFBMzMyMDAwMDEwMjY2MDYxQTMzMjQwMDAwMDAwMzEyCis6MTAwQTkwMDAwNDFBMzMzMDAwMDEwMjY3MDYxQTMzMzQwMDAwMDAwM0UxCis6MTAwQUEwMDAwNDFBMzM0MDAwMDEwMjY4MDYxQTMzNDQwMDAwMDAwM0IwCis6MTAwQUIwMDAwNDFBMzM1MDAwMDEwMjY5MDYxQTMzNTQwMDAwMDAwMzdGCis6MTAwQUMwMDAwNDFBMzM2MDAwMDEwMjZBMDYxQTMzNjQwMDAwMDAwMzRFCis6MTAwQUQwMDAwNDFBMzM3MDAwMDEwMjZCMDYxQTMzNzQwMDAwMDAwMzFECis6MTAwQUUwMDAwNDFBMzM4MDAwMDEwMjZDMDYxQTMzODQwMDAwMDAwM0VDCis6MTAwQUYwMDAwNDFBMzM5MDAwMDEwMjZEMDYxQTMzOTQwMDAwMDAwM0JCCis6MTAwQjAwMDAwNDFBMzNBMDAwMDEwMjZFMDYxQTMzQTQwMDAwMDAwMzg5Cis6MTAwQjEwMDAwNDFBMzNCMDAwMDEwMjZGMDYxQTMzQjQwMDAwMDAwMzU4Cis6MTAwQjIwMDAwNDFBMzNDMDAwMDEwMjcwMDYxQTMzQzQwMDAwMDAwMzI3Cis6MTAwQjMwMDAwNDFBMzNEMDAwMDEwMjcxMDYxQTMzRDQwMDAwMDAwM0Y2Cis6MTAwQjQwMDAwNDFBMzNFMDAwMDEwMjcyMDYxQTMzRTQwMDAwMDAwM0M1Cis6MTAwQjUwMDAwNDFBMzNGMDAwMDEwMjczMDYxQTMzRjQwMDAwMDAwMzk0Cis6MTAwQjYwMDAwNDFBMzQwMDAwMDEwMjc0MDYxQTM0MDQwMDAwMDAwMzYxCis6MTAwQjcwMDAwNDFBMzQxMDAwMDEwMjc1MDYxQTM0MTQwMDAwMDAwMzMwCis6MTAwQjgwMDAwNDFBMzQyMDAwMDEwMjc2MDYxQTM0MjQwMDAwMDAwM0ZGCis6MTAwQjkwMDAwNDFBMzQzMDAwMDEwMjc3MDYxQTM0MzQwMDAwMDAwM0NFCis6MTAwQkEwMDAwNDFBMzQ0MDAwMDEwMjc4MDYxQTM0NDQwMDAwMDAwMzlECis6MTAwQkIwMDAwNDFBMzQ1MDAwMDEwMjc5MDYxQTM0NTQwMDAwMDAwMzZDCis6MTAwQkMwMDAwNDFBMzQ2MDAwMDEwMjdBMDYxQTM0NjQwMDAwMDAwMzNCCis6MTAwQkQwMDAwNDFBMzQ3MDAwMDEwMjdCMDYxQTM0NzQwMDAwMDAwMzBBCis6MTAwQkUwMDAwNDFBMzQ4MDAwMDEwMjdDMDYxQTM0ODQwMDAwMDAwM0Q5Cis6MTAwQkYwMDAwNDFBMzQ5MDAwMDEwMjdEMDYxQTM0OTQwMDAwMDAwM0E4Cis6MTAwQzAwMDAwNDFBMzRBMDAwMDEwMjdFMDYxQTM0QTQwMDAwMDAwMzc2Cis6MTAwQzEwMDAwNDFBMzRCMDAwMDEwMjdGMDYxQTM0QjQwMDAwMDAwMzQ1Cis6MTAwQzIwMDAwNDFBMzRDMDAwMDEwMjgwMDYxQTM0QzQwMDAwMDAwMzE0Cis6MTAwQzMwMDAwNDFBMzREMDAwMDEwMjgxMDYxQTM0RDQwMDAwMDAwM0UzCis6MTAwQzQwMDAwNDFBMzRFMDAwMDEwMjgyMDYxQTM0RTQwMDAwMDAwM0IyCis6MTAwQzUwMDAwNDFBMzRGMDAwMDEwMjgzMDYxQTM0RjQwMDAwMDAwMzgxCis6MTAwQzYwMDAwNDFBMzUwMDAwMDEwMjg0MDYxQTM1MDQwMDAwMDAwMzRFCis6MTAwQzcwMDAwNDFBMzUxMDAwMDEwMjg1MDYxQTM1MTQwMDAwMDAwMzFECis6MTAwQzgwMDAwNDFBMzUyMDAwMDEwMjg2MDYxQTM1MjQwMDAwMDAwM0VDCis6MTAwQzkwMDAwNDFBMzUzMDAwMDEwMjg3MDYxQTM1MzQwMDAwMDAwM0JCCis6MTAwQ0EwMDAwNDFBMzU0MDAwMDEwMjg4MDYxQTM1NDQwMDAwMDAwMzhBCis6MTAwQ0IwMDAwNDFBMzU1MDAwMDEwMjg5MDYxQTM1NTQwMDAwMDAwMzU5Cis6MTAwQ0MwMDAwNDFBMzU2MDAwMDEwMjhBMDYxQTM1NjQwMDAwMDAwMzI4Cis6MTAwQ0QwMDAwNDFBMzU3MDAwMDEwMjhCMDYxQTM1NzQwMDAwMDAwM0Y3Cis6MTAwQ0UwMDAwNDFBMzU4MDAwMDEwMjhDMDYxQTM1ODQwMDAwMDAwM0M2Cis6MTAwQ0YwMDAwNDFBMzU5MDAwMDEwMjhEMDYxQTM1OTQwMDAwMDAwMzk1Cis6MTAwRDAwMDAwNDFBMzVBMDAwMDEwMjhFMDYxQTM1QTQwMDAwMDAwMzYzCis6MTAwRDEwMDAwNDFBMzVCMDAwMDEwMjhGMDYxQTM1QjQwMDAwMDAwMzMyCis6MTAwRDIwMDAwNDFBMzVDMDAwMDEwMjkwMDYxQTM1QzQwMDAwMDAwMzAxCis6MTAwRDMwMDAwNDFBMzVEMDAwMDEwMjkxMDYxQTM1RDQwMDAwMDAwM0QwCis6MTAwRDQwMDAwNDFBMzVFMDAwMDEwMjkyMDYxQTM1RTQwMDAwMDAwMzlGCis6MTAwRDUwMDAwNDFBMzVGMDAwMDEwMjkzMDYxQTM1RjQwMDAwMDAwMzZFCis6MTAwRDYwMDAwNDFBMzYwMDAwMDEwMjk0MDYxQTM2MDQwMDAwMDAwMzNCCis6MTAwRDcwMDAwNDFBMzYxMDAwMDEwMjk1MDYxQTM2MTQwMDAwMDAwMzBBCis6MTAwRDgwMDAwNDFBMzYyMDAwMDEwMjk2MDYxQTM2MjQwMDAwMDAwM0Q5Cis6MTAwRDkwMDAwNDFBMzYzMDAwMDEwMjk3MDYxQTM2MzQwMDAwMDAwM0E4Cis6MTAwREEwMDAwNDFBMzY0MDAwMDEwMjk4MDYxQTM2NDQwMDAwMDAwMzc3Cis6MTAwREIwMDAwNDFBMzY1MDAwMDEwMjk5MDYxQTM2NTQwMDAwMDAwMzQ2Cis6MTAwREMwMDAwNDFBMzY2MDAwMDEwMjlBMDYxQTM2NjQwMDAwMDAwMzE1Cis6MTAwREQwMDAwNDFBMzY3MDAwMDEwMjlCMDYxQTM2NzQwMDAwMDAwM0U0Cis6MTAwREUwMDAwNDFBMzY4MDAwMDEwMjlDMDYxQTM2ODQwMDAwMDAwM0IzCis6MTAwREYwMDAwNDFBMzY5MDAwMDEwMjlEMDYxQTM2OTQwMDAwMDAwMzgyCis6MTAwRTAwMDAwNDFBMzZBMDAwMDEwMjlFMDYxQTM2QTQwMDAwMDAwMzUwCis6MTAwRTEwMDAwNDFBMzZCMDAwMDEwMjlGMDYxQTM2QjQwMDAwMDAwMzFGCis6MTAwRTIwMDAwNDFBMzZDMDAwMDEwMkEwMDYxQTM2QzQwMDAwMDAwM0VFCis6MTAwRTMwMDAwNDFBMzZEMDAwMDEwMkExMDYxQTM2RDQwMDAwMDAwM0JECis6MTAwRTQwMDAwNDFBMzZFMDAwMDEwMkEyMDYxQTM2RTQwMDAwMDAwMzhDCis6MTAwRTUwMDAwNDFBMzZGMDAwMDEwMkEzMDYxQTM2RjQwMDAwMDAwMzVCCis6MTAwRTYwMDAwNDFBMzcwMDAwMDEwMkE0MDYxQTM3MDQwMDAwMDAwMzI4Cis6MTAwRTcwMDAwNDFBMzcxMDAwMDEwMkE1MDYxQTM3MTQwMDAwMDAwM0Y3Cis6MTAwRTgwMDAwNDFBMzcyMDAwMDEwMkE2MDYxQTM3MjQwMDAwMDAwM0M2Cis6MTAwRTkwMDAwNDFBMzczMDAwMDEwMkE3MDYxQTM3MzQwMDAwMDAwMzk1Cis6MTAwRUEwMDAwNDFBMzc0MDAwMDEwMkE4MDYxQTM3NDQwMDAwMDAwMzY0Cis6MTAwRUIwMDAwNDFBMzc1MDAwMDEwMkE5MDYxQTM3NTQwMDAwMDAwMzMzCis6MTAwRUMwMDAwNDFBMzc2MDAwMDEwMkFBMDYxQTM3NjQwMDAwMDAwMzAyCis6MTAwRUQwMDAwNDFBMzc3MDAwMDEwMkFCMDYxQTM3NzQwMDAwMDAwM0QxCis6MTAwRUUwMDAwNDFBMzc4MDAwMDEwMkFDMDYxQTM3ODQwMDAwMDAwM0EwCis6MTAwRUYwMDAwNDFBMzc5MDAwMDEwMkFEMDYxQTM3OTQwMDAwMDAwMzZGCis6MTAwRjAwMDAwNDFBMzdBMDAwMDEwMkFFMDYxQTM3QTQwMDAwMDAwMzNECis6MTAwRjEwMDAwNDFBMzdCMDAwMDEwMkFGMDYxQTM3QjQwMDAwMDAwMzBDCis6MTAwRjIwMDAwNDFBMzdDMDAwMDEwMkIwMDYxQTM3QzQwMDAwMDAwM0RCCis6MTAwRjMwMDAwNDFBMzdEMDAwMDEwMkIxMDYxQTM3RDQwMDAwMDAwM0FBCis6MTAwRjQwMDAwNDFBMzdFMDAwMDEwMkIyMDYxQTM3RTQwMDAwMDAwMzc5Cis6MTAwRjUwMDAwNDFBMzdGMDAwMDEwMkIzMDYxQTM3RjQwMDAwMDAwMzQ4Cis6MTAwRjYwMDAwNDFBMzgwMDAwMDEwMkI0MDYxQTM4MDQwMDAwMDAwMzE1Cis6MTAwRjcwMDAwNDFBMzgxMDAwMDEwMkI1MDYxQTM4MTQwMDAwMDAwM0U0Cis6MTAwRjgwMDAwNDFBMzgyMDAwMDEwMkI2MDYxQTM4MjQwMDAwMDAwM0IzCis6MTAwRjkwMDAwNDFBMzgzMDAwMDEwMkI3MDYxQTM4MzQwMDAwMDAwMzgyCis6MTAwRkEwMDAwNDFBMzg0MDAwMDEwMkI4MDYxQTM4NDQwMDAwMDAwMzUxCis6MTAwRkIwMDAwNDFBMzg1MDAwMDEwMkI5MDYxQTM4NTQwMDAwMDAwMzIwCis6MTAwRkMwMDAwNDFBMzg2MDAwMDEwMkJBMDYxQTM4NjQwMDAwMDAwM0VGCis6MTAwRkQwMDAwNDFBMzg3MDAwMDEwMkJCMDYxQTM4NzQwMDAwMDAwM0JFCis6MTAwRkUwMDAwNDFBMzg4MDAwMDEwMkJDMDYxQTM4ODQwMDAwMDAwMzhECis6MTAwRkYwMDAwNDFBMzg5MDAwMDEwMkJEMDYxQTM4OTQwMDAwMDAwMzVDCis6MTAxMDAwMDAwNDFBMzhBMDAwMDEwMkJFMDYxQTM4QTQwMDAwMDAwMzJBCis6MTAxMDEwMDAwNDFBMzhCMDAwMDEwMkJGMDYxQTM4QjQwMDAwMDAwM0Y5Cis6MTAxMDIwMDAwNDFBMzhDMDAwMDEwMkMwMDYxQTM4QzQwMDAwMDAwM0M4Cis6MTAxMDMwMDAwNDFBMzhEMDAwMDEwMkMxMDYxQTM4RDQwMDAwMDAwMzk3Cis6MTAxMDQwMDAwNDFBMzhFMDAwMDEwMkMyMDYxQTM4RTQwMDAwMDAwMzY2Cis6MTAxMDUwMDAwNDFBMzhGMDAwMDEwMkMzMDYxQTM4RjQwMDAwMDAwMzM1Cis6MTAxMDYwMDAwNDFBMzkwMDAwMDEwMkM0MDYxQTM5MDQwMDAwMDAwMzAyCis6MTAxMDcwMDAwNDFBMzkxMDAwMDEwMkM1MDYxQTM5MTQwMDAwMDAwM0QxCis6MTAxMDgwMDAwNDFBMzkyMDAwMDEwMkM2MDYxQTM5MjQwMDAwMDAwM0EwCis6MTAxMDkwMDAwNDFBMzkzMDAwMDEwMkM3MDYxQTM5MzQwMDAwMDAwMzZGCis6MTAxMEEwMDAwNDFBMzk0MDAwMDEwMkM4MDYxQTM5NDQwMDAwMDAwMzNFCis6MTAxMEIwMDAwNDFBMzk1MDAwMDEwMkM5MDYxQTM5NTQwMDAwMDAwMzBECis6MTAxMEMwMDAwNDFBMzk2MDAwMDEwMkNBMDYxQTM5NjQwMDAwMDAwM0RDCis6MTAxMEQwMDAwNDFBMzk3MDAwMDEwMkNCMDYxQTM5NzQwMDAwMDAwM0FCCis6MTAxMEUwMDAwNDFBMzk4MDAwMDEwMkNDMDYxQTM5ODQwMDAwMDAwMzdBCis6MTAxMEYwMDAwNDFBMzk5MDAwMDEwMkNEMDYxQTM5OTQwMDAwMDAwMzQ5Cis6MTAxMTAwMDAwNDFBMzlBMDAwMDEwMkNFMDYxQTM5QTQwMDAwMDAwMzE3Cis6MTAxMTEwMDAwNDFBMzlCMDAwMDEwMkNGMDYxQTM5QjQwMDAwMDAwM0U2Cis6MTAxMTIwMDAwNDFBMzlDMDAwMDEwMkQwMDYxQTM5QzQwMDAwMDAwM0I1Cis6MTAxMTMwMDAwNDFBMzlEMDAwMDEwMkQxMDYxQTM5RDQwMDAwMDAwMzg0Cis6MTAxMTQwMDAwNDFBMzlFMDAwMDEwMkQyMDYxQTM5RTQwMDAwMDAwMzUzCis6MTAxMTUwMDAwNDFBMzlGMDAwMDEwMkQzMDYxQTM5RjQwMDAwMDAwMzIyCis6MTAxMTYwMDAwNDFBM0EwMDAwMDEwMkQ0MDYxQTNBMDQwMDAwMDAwM0VGCis6MTAxMTcwMDAwNDFBM0ExMDAwMDEwMkQ1MDYxQTNBMTQwMDAwMDAwM0JFCis6MTAxMTgwMDAwNDFBM0EyMDAwMDEwMkQ2MDYxQTNBMjQwMDAwMDAwMzhECis6MTAxMTkwMDAwNDFBM0EzMDAwMDEwMkQ3MDYxQTNBMzQwMDAwMDAwMzVDCis6MTAxMUEwMDAwNDFBM0E0MDAwMDEwMkQ4MDYxQTNBNDQwMDAwMDAwMzJCCis6MTAxMUIwMDAwNDFBM0E1MDAwMDEwMkQ5MDYxQTNBNTQwMDAwMDAwM0ZBCis6MTAxMUMwMDAwNDFBM0E2MDAwMDEwMkRBMDYxQTNBNjQwMDAwMDAwM0M5Cis6MTAxMUQwMDAwNDFBM0E3MDAwMDEwMkRCMDYxQTNBNzQwMDAwMDAwMzk4Cis6MTAxMUUwMDAwNDFBM0E4MDAwMDEwMkRDMDYxQTNBODQwMDAwMDAwMzY3Cis6MTAxMUYwMDAwNDFBM0E5MDAwMDEwMkREMDYxQTNBOTQwMDAwMDAwMzM2Cis6MTAxMjAwMDAwNDFBM0FBMDAwMDEwMkRFMDYxQTNBQTQwMDAwMDAwMzA0Cis6MTAxMjEwMDAwNDFBM0FCMDAwMDEwMkRGMDYxQTNBQjQwMDAwMDAwM0QzCis6MTAxMjIwMDAwNDFBM0FDMDAwMDEwMkUwMDYxQTNBQzQwMDAwMDAwM0EyCis6MTAxMjMwMDAwNDFBM0FEMDAwMDEwMkUxMDYxQTNBRDQwMDAwMDAwMzcxCis6MTAxMjQwMDAwNDFBM0FFMDAwMDEwMkUyMDYxQTNBRTQwMDAwMDAwMzQwCis6MTAxMjUwMDAwNDFBM0FGMDAwMDEwMkUzMDYxQTNBRjQwMDAwMDAwMzBGCis6MTAxMjYwMDAwNDFBM0IwMDAwMDEwMkU0MDYxQTNCMDQwMDAwMDAwM0RDCis6MTAxMjcwMDAwNDFBM0IxMDAwMDEwMkU1MDYxQTNCMTQwMDAwMDAwM0FCCis6MTAxMjgwMDAwNDFBM0IyMDAwMDEwMkU2MDYxQTNCMjQwMDAwMDAwMzdBCis6MTAxMjkwMDAwNDFBM0IzMDAwMDEwMkU3MDYxQTNCMzQwMDAwMDAwMzQ5Cis6MTAxMkEwMDAwNDFBM0I0MDAwMDEwMkU4MDYxQTNCNDQwMDAwMDAwMzE4Cis6MTAxMkIwMDAwNDFBM0I1MDAwMDEwMkU5MDYxQTNCNTQwMDAwMDAwM0U3Cis6MTAxMkMwMDAwNDFBM0I2MDAwMDEwMkVBMDYxQTNCNjQwMDAwMDAwM0I2Cis6MTAxMkQwMDAwNDFBM0I3MDAwMDEwMkVCMDYxQTNCNzQwMDAwMDAwMzg1Cis6MTAxMkUwMDAwNDFBM0I4MDAwMDEwMkVDMDYxQTNCODQwMDAwMDAwMzU0Cis6MTAxMkYwMDAwNDFBM0I5MDAwMDEwMkVEMDYxQTNCOTQwMDAwMDAwMzIzCis6MTAxMzAwMDAwNDFBM0JBMDAwMDEwMkVFMDYxQTNCQTQwMDAwMDAwM0YxCis6MTAxMzEwMDAwNDFBM0JCMDAwMDEwMkVGMDYxQTNCQjQwMDAwMDAwM0MwCis6MTAxMzIwMDAwNDFBM0JDMDAwMDEwMkYwMDYxQTNCQzQwMDAwMDAwMzhGCis6MTAxMzMwMDAwNDFBM0JEMDAwMDEwMkYxMDYxQTNCRDQwMDAwMDAwMzVFCis6MTAxMzQwMDAwNDFBM0JFMDAwMDEwMkYyMDYxQTNCRTQwMDAwMDAwMzJECis6MTAxMzUwMDAwNDFBM0JGMDAwMDEwMkYzMDYxQTNCRjQwMDAwMDAwM0ZDCis6MTAxMzYwMDAwNDFBM0MwMDAwMDEwMkY0MDYxQTNDMDQwMDAwMDAwM0M5Cis6MTAxMzcwMDAwNDFBM0MxMDAwMDEwMkY1MDYxQTNDMTQwMDAwMDAwMzk4Cis6MTAxMzgwMDAwNDFBM0MyMDAwMDEwMkY2MDYxQTNDMjQwMDAwMDAwMzY3Cis6MTAxMzkwMDAwNDFBM0MzMDAwMDEwMkY3MDYxQTNDMzQwMDAwMDAwMzM2Cis6MTAxM0EwMDAwNDFBM0M0MDAwMDEwMkY4MDYxQTNDNDQwMDAwMDAwMzA1Cis6MTAxM0IwMDAwNDFBM0M1MDAwMDEwMkY5MDYxQTNDNTQwMDAwMDAwM0Q0Cis6MTAxM0MwMDAwNDFBM0M2MDAwMDEwMkZBMDYxQTNDNjQwMDAwMDAwM0EzCis6MTAxM0QwMDAwNDFBM0M3MDAwMDEwMkZCMDYxQTNDNzQwMDAwMDAwMzcyCis6MTAxM0UwMDAwNDFBM0M4MDAwMDEwMkZDMDYxQTNDODQwMDAwMDAwMzQxCis6MTAxM0YwMDAwNDFBM0M5MDAwMDEwMkZEMDYxQTNDOTQwMDAwMDAwMzEwCis6MTAxNDAwMDAwNDFBM0NBMDAwMDEwMkZFMDYxQTNDQTQwMDAwMDAwM0RFCis6MTAxNDEwMDAwNDFBM0NCMDAwMDEwMkZGMDYxQTNDQjQwMDAwMDAwM0FECis6MTAxNDIwMDAwNDFBM0NDMDAwMDEwMzAwMDYxQTNDQzQwMDAwMDAwMzdCCis6MTAxNDMwMDAwNDFBM0NEMDAwMDEwMzAxMDYxQTNDRDQwMDAwMDAwMzRBCis6MTAxNDQwMDAwNDFBM0NFMDAwMDEwMzAyMDYxQTNDRTQwMDAwMDAwMzE5Cis6MTAxNDUwMDAwNDFBM0NGMDAwMDEwMzAzMDYxQTNDRjQwMDAwMDAwM0U4Cis6MTAxNDYwMDAwNDFBM0QwMDAwMDEwMzA0MDYxQTNEMDQwMDAwMDAwM0I1Cis6MTAxNDcwMDAwNDFBM0QxMDAwMDEwMzA1MDYxQTNEMTQwMDAwMDAwMzg0Cis6MTAxNDgwMDAwNDFBM0QyMDAwMDEwMzA2MDYxQTNEMjQwMDAwMDAwMzUzCis6MTAxNDkwMDAwNDFBM0QzMDAwMDEwMzA3MDYxQTNEMzQwMDAwMDAwMzIyCis6MTAxNEEwMDAwNDFBM0Q0MDAwMDEwMzA4MDYxQTNENDQwMDAwMDAwM0YxCis6MTAxNEIwMDAwNDFBM0Q1MDAwMDEwMzA5MDYxQTNENTQwMDAwMDAwM0MwCis6MTAxNEMwMDAwNDFBM0Q2MDAwMDEwMzBBMDYxQTNENjQwMDAwMDAwMzhGCis6MTAxNEQwMDAwNDFBM0Q3MDAwMDEwMzBCMDYxQTNENzQwMDAwMDAwMzVFCis6MTAxNEUwMDAwNDFBM0Q4MDAwMDEwMzBDMDYxQTNEODQwMDAwMDAwMzJECis6MTAxNEYwMDAwNDFBM0Q5MDAwMDEwMzBEMDYxQTNEOTQwMDAwMDAwM0ZDCis6MTAxNTAwMDAwNDFBM0RBMDAwMDEwMzBFMDYxQTNEQTQwMDAwMDAwM0NBCis6MTAxNTEwMDAwNDFBM0RCMDAwMDEwMzBGMDYxQTNEQjQwMDAwMDAwMzk5Cis6MTAxNTIwMDAwNDFBM0RDMDAwMDEwMzEwMDYxQTNEQzQwMDAwMDAwMzY4Cis6MTAxNTMwMDAwNDFBM0REMDAwMDEwMzExMDYxQTNERDQwMDAwMDAwMzM3Cis6MTAxNTQwMDAwNDFBM0RFMDAwMDEwMzEyMDYxQTNERTQwMDAwMDAwMzA2Cis6MTAxNTUwMDAwNDFBM0RGMDAwMDEwMzEzMDYxQTNERjQwMDAwMDAwM0Q1Cis6MTAxNTYwMDAwNDFBM0UwMDAwMDEwMzE0MDYxQTNFMDQwMDAwMDAwM0EyCis6MTAxNTcwMDAwNDFBM0UxMDAwMDEwMzE1MDYxQTNFMTQwMDAwMDAwMzcxCis6MTAxNTgwMDAwNDFBM0UyMDAwMDEwMzE2MDYxQTNFMjQwMDAwMDAwMzQwCis6MTAxNTkwMDAwNDFBM0UzMDAwMDEwMzE3MDYxQTNFMzQwMDAwMDAwMzBGCis6MTAxNUEwMDAwNDFBM0U0MDAwMDEwMzE4MDYxQTNFNDQwMDAwMDAwM0RFCis6MTAxNUIwMDAwNDFBM0U1MDAwMDEwMzE5MDYxQTNFNTQwMDAwMDAwM0FECis6MTAxNUMwMDAwNDFBM0U2MDAwMDEwMzFBMDYxQTNFNjQwMDAwMDAwMzdDCis6MTAxNUQwMDAwNDFBM0U3MDAwMDEwMzFCMDYxQTNFNzQwMDAwMDAwMzRCCis6MTAxNUUwMDAwNDFBM0U4MDAwMDEwMzFDMDYxQTNFODQwMDAwMDAwMzFBCis6MTAxNUYwMDAwNDFBM0U5MDAwMDEwMzFEMDYxQTNFOTQwMDAwMDAwM0U5Cis6MTAxNjAwMDAwNDFBM0VBMDAwMDEwMzFFMDYxQTNFQTQwMDAwMDAwM0I3Cis6MTAxNjEwMDAwNDFBM0VCMDAwMDEwMzFGMDYxQTNFQjQwMDAwMDAwMzg2Cis6MTAxNjIwMDAwNDFBM0VDMDAwMDEwMzIwMDYxQTNFQzQwMDAwMDAwMzU1Cis6MTAxNjMwMDAwNDFBM0VEMDAwMDEwMzIxMDYxQTNFRDQwMDAwMDAwMzI0Cis6MTAxNjQwMDAwNDFBM0VFMDAwMDEwMzIyMDYxQTNFRTQwMDAwMDAwM0YzCis6MTAxNjUwMDAwNDFBM0VGMDAwMDEwMzIzMDYxQTNFRjQwMDAwMDAwM0MyCis6MTAxNjYwMDAwNDFBM0YwMDAwMDEwMzI0MDYxQTNGMDQwMDAwMDAwMzhGCis6MTAxNjcwMDAwNDFBM0YxMDAwMDEwMzI1MDYxQTNGMTQwMDAwMDAwMzVFCis6MTAxNjgwMDAwNDFBM0YyMDAwMDEwMzI2MDYxQTNGMjQwMDAwMDAwMzJECis6MTAxNjkwMDAwNDFBM0YzMDAwMDEwMzI3MDYxQTNGMzQwMDAwMDAwM0ZDCis6MTAxNkEwMDAwNDFBM0Y0MDAwMDEwMzI4MDYxQTNGNDQwMDAwMDAwM0NCCis6MTAxNkIwMDAwNDFBM0Y1MDAwMDEwMzI5MDYxQTNGNTQwMDAwMDAwMzlBCis6MTAxNkMwMDAwNDFBM0Y2MDAwMDEwMzJBMDYxQTNGNjQwMDAwMDAwMzY5Cis6MTAxNkQwMDAwNDFBM0Y3MDAwMDEwMzJCMDYxQTNGNzQwMDAwMDAwMzM4Cis6MTAxNkUwMDAwNDFBM0Y4MDAwMDEwMzJDMDYxQTNGODQwMDAwMDAwMzA3Cis6MTAxNkYwMDAwNDFBM0Y5MDAwMDEwMzJEMDYxQTNGOTQwMDAwMDAwM0Q2Cis6MTAxNzAwMDAwNDFBM0ZBMDAwMDEwMzJFMDYxQTNGQTQwMDAwMDAwM0E0Cis6MTAxNzEwMDAwNDFBM0ZCMDAwMDEwMzJGMDYxQTNGQjQwMDAwMDAwMzczCis6MTAxNzIwMDAwNDFBM0ZDMDAwMDEwMzMwMDYxQTNGQzQwMDAwMDAwMzQyCis6MTAxNzMwMDAwNDFBM0ZEMDAwMDEwMzMxMDYxQTNGRDQwMDAwMDAwMzExCis6MTAxNzQwMDAwNDFBM0ZFMDAwMDEwMzMyMDYxQTNGRTQwMDAwMDAwN0RDCis6MTAxNzUwMDAwNDFBNENCMDAwMDgwMzMzMDYxQTQwMDAwMDAwMDEyNEFDCis6MTAxNzYwMDAwMjFBNDkyMDAwMDAwMDAwMDYxQTI1MDAwMDAwMDAxMDlGCis6MTAxNzcwMDAwNjFBMjU4MDAwMDAwMDEyMDYxQTA5QzAwMDAwMDA0ODYxCis6MTAxNzgwMDAwNjFBMDgwMDAwMDAwMDAyMDYxQTA4MjAwMDAwMDAxMkQ1Cis6MTAxNzkwMDAwNDFBMkZCMDAwMDIwMzNCMDQxQTRDRjAwMDAyMDMzRDcwCis6MTAxN0EwMDAwNjFBNTAwMDAwMDAwMDA0MDYxQTQ0OTAwMDAwMDEyNEFDCis6MTAxN0IwMDAwMjFBNDkyNDAwMDAwMDAwMDYxQTI1NDAwMDAwMDAxMDBCCis6MTAxN0MwMDAwNjFBMjVDODAwMDAwMDEyMDYxQTBBRTAwMDAwMDA0OEE4Cis6MTAxN0QwMDAwNjFBMDgxMDAwMDAwMDAyMDYxQTA4NjgwMDAwMDAxMjJECis6MTAxN0UwMDAwNDFBMkZCODAwMDIwMzNGMDQxQTRDRjgwMDAyMDM0MTA4Cis6MTAxN0YwMDAwNjFBNTAxMDAwMDAwMDA0MDIwMEE0NjgwMDBBRkZEQzcyCis6MTAxODAwMDAwMjAwQTI4MDAwMDAwMDAxMDIwMEEyOTQwNzFEMjkxMTFECis6MTAxODEwMDAwMjAwQTI5ODAwMDAwMDAwMDIwMEEyOUMwMDlDMDQyNDg4Cis6MTAxODIwMDAwMjAwQTJBMDAwMDAwMDAwMDIwMEEyQTQwMDAwMDIwOTIxCis6MTAxODMwMDAwMjAwQTRGQ0ZGMDAwMDAwMDIwMTAwQjQwMDAwMDAwMTRGCis6MTAxODQwMDAwMjAxMDBCODAwMDAwMDAxMDIwMTAwREMwMDAwMDAwMUZDCis6MTAxODUwMDAwMjAxMDEwMDAwMDAwMDAxMDIwMTAxMDQwMDAwMDAwMTdBCis6MTAxODYwMDAwMjAxMDA3QzAwMzAwMDAwMDIwMTAwODQwMDAwMDAyODFBCis6MTAxODcwMDAwMjAxMDA4QzAwMDAwMDAwMDIwMTAxMzAwMDAwMDAwNEExCis6MTAxODgwMDAwMjAxMDI1QzAwMDAwMDAxMDIwMTAzMjgwMDAwMDAwMEM4Cis6MTAxODkwMDAwMjAxMDU1NDAwMDAwMDMwMDIwMTAwQzQwMDAwMDAwMUY0Cis6MTAxOEEwMDAwMjAxMDBDQzAwMDAwMDAxMDIwMTAwRjgwMDAwMDAwMTZDCis6MTAxOEIwMDAwMjAxMDBGMDAwMDAwMDAxMDIwMTAwODAwMDMwMDAwMDgxCis6MTAxOEMwMDAwMjAxMDA4ODAwMDAwMDI4MDIwMTAwOTAwMDAwMDAwMEQyCis6MTAxOEQwMDAwMjAxMDEzNDAwMDAwMDA0MDIwMTAyREMwMDAwMDAwMUVBCis6MTAxOEUwMDAwMjAxMDMyQzAwMDAwMDAwMDIwMTA1NjQwMDAwMDAzMDJBCis6MTAxOEYwMDAwMjAxMDBDODAwMDAwMDAxMDIwMTAwRDAwMDAwMDAwMTQ4Cis6MTAxOTAwMDAwMjAxMDBGQzAwMDAwMDAxMDIwMTAwRjQwMDAwMDAwMURGCis6MTAxOTEwMDAwMjBDMTAwMDAwMDAwMDI4MDIwQzIwMDgwMDAwMEExMTMwCis6MTAxOTIwMDAwMjBDMjAwQzAwMDAwQTAwMDIwQzIwMTAwMDAwMEEwNDI3Cis6MTAxOTMwMDAwMjBDMjAxQzAwMDBGRkZGMDIwQzIwMjAwMDAwRkZGRjEzCis6MTAxOTQwMDAwMjBDMjAyNDAwMDBGRkZGMDIwQzIwMjgwMDAwRkZGRkYzCis6MTAxOTUwMDAwMjBDMjAzODAwMDAwMDIwMDIwQzIwM0MwMDAwMDAyMTc2Cis6MTAxOTYwMDAwMjBDMjA0MDAwMDAwMDIyMDIwQzIwNDQwMDAwMDAyMzUyCis6MTAxOTcwMDAwMjBDMjA0ODAwMDAwMDI0MDIwQzIwNEMwMDAwMDAyNTJFCis6MTAxOTgwMDAwMjBDMjA1MDAwMDAwMDI2MDIwQzIwNTQwMDAwMDAyNzBBCis6MTAxOTkwMDAwMjBDMjA1ODAwMDAwMDI4MDIwQzIwNUMwMDAwMDAyOUU2Cis6MTAxOUEwMDAwMjBDMjA2MDAwMDAwMDJBMDIwQzIwNjQwMDAwMDAyQkMyCis6MTAxOUIwMDAwMjBDMjA2ODAwMDAwMDJDMDIwQzIwNkMwMDAwMDAyRDlFCis6MTAxOUMwMDAwMjBDMjA3MDAwMDAwMDJFMDIwQzIwNzQwMDAwMDAyRjdBCis6MTAxOUQwMDAwMjBDMjA3ODAwMDAwMDEwMDYwQzIwN0MwMDAwMDA0RjU0Cis6MTAxOUUwMDAwMjBDMjFCODAwMDAwMDAxMDIwQzIxQkMwMDAwMDAwMTIzCis6MTAxOUYwMDAwMjBDMjFDMDAwMDAwMDAxMDIwQzIxQzQwMDAwMDAwMTAzCis6MTAxQTAwMDAwMjBDMjFDODAwMDAwMDAxMDIwQzIxQ0MwMDAwMDAwMUUyCis6MTAxQTEwMDAwMjBDMjFEMDAwMDAwMDAxMDIwQzIxRDQwMDAwMDAwMUMyCis6MTAxQTIwMDAwMjBDMjFEODAwMDAwMDAxMDIwQzIxREMwMDAwMDAwMUEyCis6MTAxQTMwMDAwMjBDMjFFMDAwMDAwMDAxMDIwQzIxRTQwMDAwMDAwMTgyCis6MTAxQTQwMDAwMjBDMjFFODAwMDAwMDAxMDIwQzIxRUMwMDAwMDAwMTYyCis6MTAxQTUwMDAwMjBDMjFGMDAwMDAwMDAxMDIwQzIxRjQwMDAwMDAwMTQyCis6MTAxQTYwMDAwMjBDMjFGODAwMDAwMDAxMDYwQzIxRkMwMDAwMDAwRjEwCis6MTAxQTcwMDAwMjBDMjIzODA3RkZGRkZGMDIwQzIyM0MwMDAwMDAzRjRGCis6MTAxQTgwMDAwMjBDMjI0MDA3RkZGRkZGMDIwQzIyNDQwMDAwMDAwRjVGCis6MTAxQTkwMDAwMTBDMjI0ODAwMDAwMDAwMDEwQzIyNEMwMDAwMDAwMDU0Cis6MTAxQUEwMDAwMTBDMjI1MDAwMDAwMDAwMDEwQzIyNTQwMDAwMDAwMDM0Cis6MTAxQUIwMDAwMTBDMjI1ODAwMDAwMDAwMDEwQzIyNUMwMDAwMDAwMDE0Cis6MTAxQUMwMDAwMTBDMjI2MDAwMDAwMDAwMDEwQzIyNjQwMDAwMDAwMEY0Cis6MTAxQUQwMDAwMTBDMjI2ODAwMDAwMDAwMDEwQzIyNkMwMDAwMDAwMEQ0Cis6MTAxQUUwMDAwMTBDMjI3MDAwMDAwMDAwMDEwQzIyNzQwMDAwMDAwMEI0Cis6MTAxQUYwMDAwMTBDMjI3ODAwMDAwMDAwMDEwQzIyN0MwMDAwMDAwMDk0Cis6MTAxQjAwMDAwMjBDMjRCQzAwMDAwMDAxMEMwQzIwMDAwMDAwMDNFOEMzCis6MTAxQjEwMDAwQTBDMjAwMDAwMDAwMDAxMEIwQzIwMDAwMDAwMDAwQTRECis6MTAxQjIwMDAwMjBDNDAwODAwMDAwNTYyMDIwQzQwMEMwMDAwMDU1MTQ4Cis6MTAxQjMwMDAwMjBDNDAxMDAwMDAwNTU1MDIwQzQwMTQwMDAwMDU3MjE0Cis6MTAxQjQwMDAwMjBDNDAxQzAwMDBGRkZGMDIwQzQwMjAwMDAwRkZGRkMxCis6MTAxQjUwMDAwMjBDNDAyNDAwMDBGRkZGMDIwQzQwMjgwMDAwRkZGRkExCis6MTAxQjYwMDAwMjBDNDAzODAwMDAwMDQ2MDIwQzQwM0MwMDAwMDAwQzEzCis6MTAxQjcwMDAwNjBDNDA0MDAwMDAwMDVFMDIwQzQxQjgwMDAwMDAwMTZECis6MTAxQjgwMDAwNjBDNDFCQzAwMDAwMDFGMDIwQzQyMzgwN0ZGRkZGRjlCCis6MTAxQjkwMDAwMjBDNDIzQzAwMDAwMDNGMDIwQzQyNDAwN0ZGRkZGRkU2Cis6MTAxQkEwMDAwMjBDNDI0NDAwMDAwMDBGMDEwQzQyNDgwMDAwMDAwMEZCCis6MTAxQkIwMDAwMTBDNDI0QzAwMDAwMDAwMDEwQzQyNTAwMDAwMDAwMEVCCis6MTAxQkMwMDAwMTBDNDI1NDAwMDAwMDAwMDEwQzQyNTgwMDAwMDAwMENCCis6MTAxQkQwMDAwMTBDNDI1QzAwMDAwMDAwMDEwQzQyNjAwMDAwMDAwMEFCCis6MTAxQkUwMDAwMTBDNDI2NDAwMDAwMDAwMDEwQzQyNjgwMDAwMDAwMDhCCis6MTAxQkYwMDAwMTBDNDI2QzAwMDAwMDAwMDEwQzQyNzAwMDAwMDAwMDZCCis6MTAxQzAwMDAwMTBDNDI3NDAwMDAwMDAwMDEwQzQyNzgwMDAwMDAwMDRBCis6MTAxQzEwMDAwMTBDNDI3QzAwMDAwMDAwMDEwQzQyODAwMDAwMDAwMDJBCis6MTAxQzIwMDAwMjBDNDRDMDAwMDAwMDAxMEMwQzQwMDAwMDAwMDNFODVFCis6MTAxQzMwMDAwQTBDNDAwMDAwMDAwMDAxMEIwQzQwMDAwMDAwMDAwQUVDCis6MTAxQzQwMDAwNjBENDAwMDAwMDAwQTAwMDIwRDAwNDQwMDAwMDAzMkIyCis6MTAxQzUwMDAwMjBEMDA4QzAyMTUwMDIwMDIwRDAwOTAwMjE1MDAyMERDCis6MTAxQzYwMDAwMjBEMDA5NDA4MTAwMDAwMDIwRDAwOTgwMDAwMDAzM0RGCis6MTAxQzcwMDAwMjBEMDA5QzAwMDAwMDAyMDIwRDAwQTAwMDAwMDAwMDA4Cis6MTAxQzgwMDAwMjBEMDBBNDAwMDAwMDA1MDIwRDAwQTgwMDAwMDAwNUUwCis6MTAxQzkwMDAwNjBEMDBBQzAwMDAwMDAyMDIwRDAwQjQwMDAwMDAwMkJFCis6MTAxQ0EwMDAwMjBEMDBCODAwMDAwMDAzMDIwRDAwQkMwMDAwMDAwMjlECis6MTAxQ0IwMDAwMjBEMDBDMDAwMDAwMDAxMDIwRDAwQzgwMDAwMDAwMjdCCis6MTAxQ0MwMDAwMjBEMDBDQzAwMDAwMDAyMDIwRDAxNUMwMDAwMDAwMUNBCis6MTAxQ0QwMDAwMjBEMDE2NDAwMDAwMDAxMDIwRDAxNjgwMDAwMDAwMjE1Cis6MTAxQ0UwMDAwMjBEMDIwNDAwMDAwMDAxMDIwRDAyMEMwMDAwMDAyMEExCis6MTAxQ0YwMDAwMjBEMDIxMDAwMDAwMDQwMDIwRDAyMTQwMDAwMDA0MDFFCis6MTAxRDAwMDAwMjBEMDIyMDAwMDAwMDAzMDIwRDAyMjQwMDAwMDAxODUyCis6MTAxRDEwMDAwNjBEMDI4MDAwMDAwMDEyMDQwRDAzMDAwMDE4MDM0M0FBCis6MTAxRDIwMDAwNjBEMDM2MDAwMDAwMDBDMDIwRDAwNEMwMDAwMDAwMUQ1Cis6MTAxRDMwMDAwMjBEMDA1MDAwMDAwMDAyMDIwRDAwNTQwMDAwMDAwMERGCis6MTAxRDQwMDAwMjBEMDA1ODAwMDAwMDA4MDYwRDAwNUMwMDAwMDAwNEIxCis6MTAxRDUwMDAwMjBEMDBDNDAwMDAwMDA0MDIwRDAxMTQwMDAwMDAwOTdGCis6MTAxRDYwMDAwMjBEMDExODAwMDAwMDI5MDIwRDAxMUMwMDAwMDAwQUVDCis6MTAxRDcwMDAwMjBEMDEyMDAwMDAwMDJBMDIwRDAxMjQwMDAwMDAwMEQ1Cis6MTAxRDgwMDAwMjBEMDEyODAwMDAwMDIwMDIwRDAxMkMwMDAwMDAwMEJGCis6MTAxRDkwMDAwMjBEMDEzMDAwMDAwMDIwMDIwRDAxMzQwMDAwMDAwMDlGCis6MTAxREEwMDAwMjBEMDEzODAwMDAwMDIwMDIwRDAxM0MwMDAwMDAwMDdGCis6MTAxREIwMDAwMjBEMDE0MDAwMDAwMDIwMDIwRDAxNDQwMDAwMDAwMDVGCis6MTAxREMwMDAwMjBEMDE0ODAwMDAwMDIwMDIwRDAwMDQwMDAwMDAwMTg3Cis6MTAxREQwMDAwMjBEMDAwODAwMDAwMDAxMDIwRDAwMEMwMDAwMDAwMUNGCis6MTAxREUwMDAwMjBEMDAxMDAwMDAwMDAxMDIwRDAwMTQwMDAwMDAwMUFGCis6MTAxREYwMDAwMjBEMDAxODAwMDAwMDAxMDIwRDAwMUMwMDAwMDAwMThGCis6MTAxRTAwMDAwMjBEMDAyMDAwMDAwMDAxMDIwRDAwMjQwMDAwMDAwMTZFCis6MTAxRTEwMDAwMjBEMDAyODAwMDAwMDAxMDIwRDAwMkMwMDAwMDAwMTRFCis6MTAxRTIwMDAwMjBEMDAzMDAwMDAwMDAxMDIwRDAwMzQwMDAwMDAwMTJFCis6MTAxRTMwMDAwMjBEMDAzODAwMDAwMDAxMDIwRDAwM0MwMDAwMDAwMTBFCis6MTAxRTQwMDAwNjBFMjAwMDAwMDAwODAwMDIwRTAwNEMwMDAwMDAzMkM4Cis6MTAxRTUwMDAwMjBFMDA5NDAyMTUwMDIwMDIwRTAwOTgwMjE1MDAyMEM4Cis6MTAxRTYwMDAwMjBFMDA5QzAwMDAwMDMwMDIwRTAwQTAwODEwMDAwMENFCis6MTAxRTcwMDAwMjBFMDBBNDAwMDAwMDMzMDIwRTAwQTgwMDAwMDAzMDkzCis6MTAxRTgwMDAwMjBFMDBBQzAwMDAwMDMxMDIwRTAwQjAwMDAwMDAwMkEzCis6MTAxRTkwMDAwMjBFMDBCNDAwMDAwMDA0MDIwRTAwQjgwMDAwMDAwMEIyCis6MTAxRUEwMDAwMjBFMDBCQzAwMDAwMDAyMDIwRTAwQzAwMDAwMDAwMjkyCis6MTAxRUIwMDAwMjBFMDBDNDAwMDAwMDAwMDIwRTAwQzgwMDAwMDAwMjc0Cis6MTAxRUMwMDAwMjBFMDBDQzAwMDAwMDA3MDIwRTAwRDAwMDAwMDAwMjRECis6MTAxRUQwMDAwMjBFMDBENDAwMDAwMDAyMDIwRTAwRDgwMDAwMDAwMTMzCis6MTAxRUUwMDAwMjBFMDE0NDAwMDAwMDAxMDIwRTAxNEMwMDAwMDAwMTNFCis6MTAxRUYwMDAwMjBFMDE1MDAwMDAwMDAyMDIwRTAyMDQwMDAwMDAwMTY4Cis6MTAxRjAwMDAwMjBFMDIwQzAwMDAwMDQwMDIwRTAyMTAwMDAwMDA0MDExCis6MTAxRjEwMDAwMjBFMDIxQzAwMDAwMDA0MDIwRTAyMjAwMDAwMDAyMDNECis6MTAxRjIwMDAwMjBFMDIyNDAwMDAwMDBFMDIwRTAyMjgwMDAwMDAxQjE4Cis6MTAxRjMwMDAwNjBFMDMwMDAwMDAwMDEyMDQwRTAyODAwMDFCMDM1QjZCCis6MTAxRjQwMDAwNjBFMDJFQzAwMDAwMDA1MDIwRTAwNTQwMDAwMDAwQzFBCis6MTAxRjUwMDAwMjBFMDA1ODAwMDAwMDBDMDIwRTAwNUMwMDAwMDAwMEExCis6MTAxRjYwMDAwMjBFMDA2MDAwMDAwMDEwMDYwRTAwNjQwMDAwMDAwNDc1Cis6MTAxRjcwMDAwMjBFMDBEQzAwMDAwMDAzMDIwRTAxMTAwMDAwMDAwRjQyCis6MTAxRjgwMDAwMjBFMDExNDAwMDAwMDJGMDIwRTAxMTgwMDAwMDAwMEQ0Cis6MTAxRjkwMDAwMjBFMDExQzAwMDAwMDIwMDIwRTAwMDQwMDAwMDAwMURGCis6MTAxRkEwMDAwMjBFMDAwODAwMDAwMDAxMDIwRTAwMEMwMDAwMDAwMUZCCis6MTAxRkIwMDAwMjBFMDAxMDAwMDAwMDAxMDIwRTAwMTQwMDAwMDAwMURCCis6MTAxRkMwMDAwMjBFMDAxODAwMDAwMDAxMDIwRTAwMUMwMDAwMDAwMUJCCis6MTAxRkQwMDAwMjBFMDAyMDAwMDAwMDAxMDIwRTAwMjQwMDAwMDAwMTlCCis6MTAxRkUwMDAwMjBFMDAyODAwMDAwMDAxMDIwRTAwMkMwMDAwMDAwMTdCCis6MTAxRkYwMDAwMjBFMDAzMDAwMDAwMDAxMDIwRTAwMzQwMDAwMDAwMTVCCis6MTAyMDAwMDAwMjBFMDAzODAwMDAwMDAxMDIwRTAwM0MwMDAwMDAwMTNBCis6MTAyMDEwMDAwMjBFMDA0MDAwMDAwMDAxMDIwRTAwNDQwMDAwMDAwMTFBCis6MTAyMDIwMDAwNzMwMDQwMDAwQUYwMDAwMDgzMDA3NjgwMDEzMDM3NjkzCis6MTAyMDMwMDAwNzM0MDAwMDMzMUMwMDAwMDczNDgwMDAzMjc4MENDOERECis6MTAyMDQwMDAwNzM1MDAwMDFBODAxOTY3MDgzNTM5QjA1OENBMDM3ODc3Cis6MTAyMDUwMDAwMTMwMDAwMDAwMDAwMDAwMDEzMDAwMDQwMDAwMDAwMDFBCis6MTAyMDYwMDAwMTMwMDAwODAwMDAwMDAwMDEzMDAwMEMwMDAwMDAwMEZBCis6MTAyMDcwMDAwMTMwMDAxMDAwMDAwMDAwMDEzMDAwMTQwMDAwMDAwMERBCis6MTAyMDgwMDAwMjMwMDAyMDAwMDAwMDAxMDIzMDAwMjQwMDAwMDAwMkE1Cis6MTAyMDkwMDAwMjMwMDAyODAwMDAwMDAzMDIzMDAwMkMwMDAwMDAwMDg1Cis6MTAyMEEwMDAwMjMwMDAzMDAwMDAwMDA0MDIzMDAwMzQwMDAwMDAwMTYzCis6MTAyMEIwMDAwMjMwMDAzODAwMDAwMDAwMDIzMDAwM0MwMDAwMDAwMTQ3Cis6MTAyMEMwMDAwMjMwMDA0MDAwMDAwMDA0MDIzMDAwNDQwMDAwMDAwMDI0Cis6MTAyMEQwMDAwMjMwMDA0ODAwMDAwMDAxMDIzMDAwNEMwMDAwMDAwMzA0Cis6MTAyMEUwMDAwMjMwMDA1MDAwMDAwMDAwMDIzMDAwNTQwMDAwMDAwMUU3Cis6MTAyMEYwMDAwMjMwMDA1ODAwMDAwMDA0MDIzMDAwNUMwMDAwMDAwMEM0Cis6MTAyMTAwMDAwMjMwMDA2MDAwMDAwMDAxMDIzMDAwNjQwMDAwMDAwM0EzCis6MTAyMTEwMDAwMjMwMDA2ODAwMDAwMDAwMDIzMDAwNkMwMDAwMDAwMTg2Cis6MTAyMTIwMDAwMjMwMDA3MDAwMDAwMDA0MDIzMDAwNzQwMDAwMDAwMDYzCis6MTAyMTMwMDAwMjMwMDA3ODAwMDAwMDA0MDIzMDAwN0MwMDAwMDAwMzQwCis6MTAyMTQwMDAwNjMwMDA4MDAwMDAwMDAyMDIzMDAwQTQwMDAwM0ZGRkMzCis6MTAyMTUwMDAwMjMwMDBBODAwMDAwM0ZGMDIzMDAyMjQwMDAwMDAwMDRCCis6MTAyMTYwMDAwMjMwMDIzNDAwMDAwMDAwMDIzMDAyNEMwMDAwMDAwMDg3Cis6MTAyMTcwMDAwMjMwMDJFNDAwMDBGRkZGMDYzMDIwMDAwMDAwMDgwMEVCCis6MTAyMTgwMDAwMjMzOEJDMDAwMDAwMDAxMDIzMzgwMDAwMDAwMDAxQUZGCis6MTAyMTkwMDAwMjMzODA0MDAwMDAwMDRFMDIzMzgwODAwMDAwMDAxMEI3Cis6MTAyMUEwMDAwMjMzODBDMDAwMDAwMDIwMEMzMzgzMDAwMDA3QTEyMDEwCis6MTAyMUIwMDAwQTMzODMwMDAwMDAwMTM4MEIzMzgzMDAwMDAwMTM4OENBCis6MTAyMUMwMDAwQTMzODM0MDAwMDAwMDAwMEMzMzgzNDAwMDAwMDFGNDE4Cis6MTAyMUQwMDAwQjMzODM0MDAwMDAwMDA1MDIzMzgzODAwMDA3QTEyMEY5Cis6MTAyMUUwMDAwMjMzODNDMDAwMDAwMUY0MDYzMjJBODgwMDAwMDBDMkQ2Cis6MTAyMUYwMDAwNjMyMjAwODAwMDAwMEM4MDYzMjIwMDAwMDAwMDAwMjVECis6MTAyMjAwMDAwNjMyMjNFODAwMDAwMDQwMDQzMjJFNTgwMDA0MDM3QTBFCis6MTAyMjEwMDAwNjMyNTBBMDAwMDAwMDA0MDYzMjUwQjgwMDAwMDAwMjUwCis6MTAyMjIwMDAwNjMyNTA4MDAwMDAwMDA2MDQzMjUwOTgwMDAyMDM3RUZGCis6MTAyMjMwMDAwNjMyNTAwMDAwMDAwMDIwMDYzMjMwMDAwMDAwMDQwMDhBCis6MTAyMjQwMDAwNjMyMUMwMDAwMDAwMDA0MDQzMjE4MzAwMDAyMDM4MDMzCis6MTAyMjUwMDAwNjMyMjRFODAwMDAwMEI0MDIzMjJEQjAwMDAwMDAwMDc1Cis6MTAyMjYwMDAwNjMyNDAwMDAwMDAwMEI0MDYzMjMwMDAwMDAwMDAyMEJBCis6MTAyMjcwMDAwNjMyMzEwMDAwMDAwMDIwMDYzMjMyMDAwMDAwMDAyMDRCCis6MTAyMjgwMDAwNjMyMzMwMDAwMDAwMDIwMDYzMjM0MDAwMDAwMDAyMDM3Cis6MTAyMjkwMDAwNjMyMzUwMDAwMDAwMDIwMDYzMjM2MDAwMDAwMDAyMDIzCis6MTAyMkEwMDAwNjMyMzcwMDAwMDAwMDIwMDYzMjM4MDAwMDAwMDAyMDBGCis6MTAyMkIwMDAwNjMyMzkwMDAwMDAwMDIwMDYzMjNBMDAwMDAwMDAyMEZCCis6MTAyMkMwMDAwNjMyM0IwMDAwMDAwMDIwMDYzMjNDMDAwMDAwMDAyMEU3Cis6MTAyMkQwMDAwNjMyM0QwMDAwMDAwMDIwMDYzMjNFMDAwMDAwMDAyMEQzCis6MTAyMkUwMDAwNjMyM0YwMDAwMDAwMDIwMDYzMjFDMTAwMDAwMDAwMkYxCis6MTAyMkYwMDAwNjMyNDVBMDAwMDAwMDI0MDYzMjI3QjgwMDAwMDBCNEQyCis6MTAyMzAwMDAwMjMyMkRCNDAwMDAwMDAwMDYzMjQyRDAwMDAwMDBCNEJBCis6MTAyMzEwMDAwNjMyMzA4MDAwMDAwMDIwMDYzMjMxODAwMDAwMDAyMEFDCis6MTAyMzIwMDAwNjMyMzI4MDAwMDAwMDIwMDYzMjMzODAwMDAwMDAyMDk4Cis6MTAyMzMwMDAwNjMyMzQ4MDAwMDAwMDIwMDYzMjM1ODAwMDAwMDAyMDg0Cis6MTAyMzQwMDAwNjMyMzY4MDAwMDAwMDIwMDYzMjM3ODAwMDAwMDAyMDcwCis6MTAyMzUwMDAwNjMyMzg4MDAwMDAwMDIwMDYzMjM5ODAwMDAwMDAyMDVDCis6MTAyMzYwMDAwNjMyM0E4MDAwMDAwMDIwMDYzMjNCODAwMDAwMDAyMDQ4Cis6MTAyMzcwMDAwNjMyM0M4MDAwMDAwMDIwMDYzMjNEODAwMDAwMDAyMDM0Cis6MTAyMzgwMDAwNjMyM0U4MDAwMDAwMDIwMDYzMjNGODAwMDAwMDAyMDIwCis6MTAyMzkwMDAwNjMyMUMyMDAwMDAwMDAyMDYzMjQ2MzAwMDAwMDAyNEY1Cis6MTAyM0EwMDAwNzIwMDQwMDAwODcwMDAwMDgyMDA3ODAwMDEwMDM4MjM3Cis6MTAyM0IwMDAwNzI0MDAwMDMxNjUwMDAwMDcyNDgwMDAwODFEMEM1QTI2Cis6MTAyM0MwMDAwODI0OEVCMDZDOTAwMzg0MDEyMDAwMDAwMDAwMDAwMEZGCis6MTAyM0QwMDAwMTIwMDAwNDAwMDAwMDAwMDEyMDAwMDgwMDAwMDAwMEFGCis6MTAyM0UwMDAwMTIwMDAwQzAwMDAwMDAwMDEyMDAwMTAwMDAwMDAwMDhGCis6MTAyM0YwMDAwMTIwMDAxNDAwMDAwMDAwMDIyMDAwMjAwMDAwMDAwMTY1Cis6MTAyNDAwMDAwMjIwMDAyNDAwMDAwMDAyMDIyMDAwMjgwMDAwMDAwMzM3Cis6MTAyNDEwMDAwMjIwMDAyQzAwMDAwMDAwMDIyMDAwMzAwMDAwMDAwNDE4Cis6MTAyNDIwMDAwMjIwMDAzNDAwMDAwMDAxMDIyMDAwMzgwMDAwMDAwMEZCCis6MTAyNDMwMDAwMjIwMDAzQzAwMDAwMDAxMDIyMDAwNDAwMDAwMDAwNEQ3Cis6MTAyNDQwMDAwMjIwMDA0NDAwMDAwMDAwMDIyMDAwNDgwMDAwMDAwMUJCCis6MTAyNDUwMDAwMjIwMDA0QzAwMDAwMDAzMDIyMDAwNTAwMDAwMDAwMDk5Cis6MTAyNDYwMDAwMjIwMDA1NDAwMDAwMDAxMDIyMDAwNTgwMDAwMDAwNDc3Cis6MTAyNDcwMDAwMjIwMDA1QzAwMDAwMDAwMDIyMDAwNjAwMDAwMDAwMTVCCis6MTAyNDgwMDAwMjIwMDA2NDAwMDAwMDAzMDIyMDAwNjgwMDAwMDAwMDM5Cis6MTAyNDkwMDAwMjIwMDA2QzAwMDAwMDAxMDIyMDAwNzAwMDAwMDAwNDE3Cis6MTAyNEEwMDAwMjIwMDA3NDAwMDAwMDAwMDIyMDAwNzgwMDAwMDAwNEY4Cis6MTAyNEIwMDAwMjIwMDA3QzAwMDAwMDAzMDYyMDAwODAwMDAwMDAwMkQzCis6MTAyNEMwMDAwMjIwMDBBNDAwMDAzRkZGMDIyMDAwQTgwMDAwMDNGRjNDCis6MTAyNEQwMDAwMjIwMDIyNDAwMDAwMDAwMDIyMDAyMzQwMDAwMDAwMDVDCis6MTAyNEUwMDAwMjIwMDI0QzAwMDAwMDAwMDIyMDAyRTQwMDAwRkZGRjc2Cis6MTAyNEYwMDAwNjIwMjAwMDAwMDAwODAwMDIyMzhCQzAwMDAwMDAwMTFECis6MTAyNTAwMDAwMjIzODAwMDAwMDAwMDEwMDIyMzgwNDAwMDAwMDAxMjFGCis6MTAyNTEwMDAwMjIzODA4MDAwMDAwMDMwMDIyMzgwQzAwMDAwMDAwRUYzCis6MTAyNTIwMDAwQzIzODMwMDAwMDdBMTIwMEEyMzgzMDAwMDAwMDEzODQ4Cis6MTAyNTMwMDAwQjIzODMwMDAwMDAxMzg4MEEyMzgzNDAwMDAwMDAwMDVGCis6MTAyNTQwMDAwQzIzODM0MDAwMDAwMUY0MEIyMzgzNDAwMDAwMDAwNUFFCis6MTAyNTUwMDAwMjIzODM4MDAwMDdBMTIwMDIyMzgzQzAwMDAwMDFGNDJFCis6MTAyNTYwMDAwNjIyNTAwMDAwMDAwMDQyMDYyMjIwMDgwMDAwMDBDODk5Cis6MTAyNTcwMDAwNjIyMjAwMDAwMDAwMDAyMDYyMjQwMDAwMDAwMDBDNkUzCis6MTAyNTgwMDAwNDIyNDMxODAwMDUwMzg2MDYyMjQzMkMwMDAwMDAwQjlBCis6MTAyNTkwMDAwNDIyNDM1ODAwMDUwMzhCMDYyMjQzNkMwMDAwMDAwQjA1Cis6MTAyNUEwMDAwNDIyNDM5ODAwMDUwMzkwMDYyMjQzQUMwMDAwMDAwQjcwCis6MTAyNUIwMDAwNDIyNDNEODAwMDUwMzk1MDYyMjQzRUMwMDAwMDAwQkRCCis6MTAyNUMwMDAwNDIyNDQxODAwMDUwMzlBMDYyMjQ0MkMwMDAwMDAwQjQ0Cis6MTAyNUQwMDAwNDIyNDQ1ODAwMDUwMzlGMDYyMjQ0NkMwMDAwMDAwQkFGCis6MTAyNUUwMDAwNDIyNDQ5ODAwMDUwM0E0MDYyMjQ0QUMwMDAwMDAwQjFBCis6MTAyNUYwMDAwNDIyNDREODAwMDUwM0E5MDYyMjQ0RUMwMDAwMDAwQjg1Cis6MTAyNjAwMDAwNDIyNDUxODAwMDUwM0FFMDYyMjQ1MkMwMDAwMDAwQkVECis6MTAyNjEwMDAwNDIyNDU1ODAwMDUwM0IzMDYyMjQ1NkMwMDAwMDAwQjU4Cis6MTAyNjIwMDAwNDIyNDU5ODAwMDUwM0I4MDYyMjQ1QUMwMDAwMDAwQkMzCis6MTAyNjMwMDAwNDIyNDVEODAwMDUwM0JEMDYyMjQ1RUMwMDAwMDAwQjJFCis6MTAyNjQwMDAwNDIyNDYxODAwMDUwM0MyMDYyMjQ2MkMwMDAwMDAwQjk3Cis6MTAyNjUwMDAwNDIyNDY1ODAwMDUwM0M3MDYyMjQ2NkMwMDAwMDAwQjAyCis6MTAyNjYwMDAwNDIyNDY5ODAwMDUwM0NDMDYyMjQ2QUMwMDAwMDAwQjZECis6MTAyNjcwMDAwNDIyNDZEODAwMDUwM0QxMDYyMjQ2RUMwMDAwMDAwQkQ4Cis6MTAyNjgwMDAwNDIyNDcxODAwMDUwM0Q2MDYyMjQ3MkMwMDAwMDAwQjQxCis6MTAyNjkwMDAwNDIyNDc1ODAwMDUwM0RCMDYyMjQ3NkMwMDAwMDAwQkFDCis6MTAyNkEwMDAwNDIyNDc5ODAwMDUwM0UwMDYyMjQ3QUMwMDAwMDAwQjE3Cis6MTAyNkIwMDAwNDIyNDdEODAwMDUwM0U1MDYyMjQ3RUMwMDAwMDAwQjgyCis6MTAyNkMwMDAwNDIyNDgxODAwMDUwM0VBMDYyMjQ4MkMwMDAwMDAwQkVCCis6MTAyNkQwMDAwNDIyNDg1ODAwMDUwM0VGMDYyMjQ4NkMwMDAwMDAwQjU2Cis6MTAyNkUwMDAwNDIyNDg5ODAwMDUwM0Y0MDYyMjQ4QUMwMDAwMDAwQkMxCis6MTAyNkYwMDAwNDIyNDhEODAwMDUwM0Y5MDYyMjQ4RUMwMDAwMDAwQjJDCis6MTAyNzAwMDAwNDIyNDkxODAwMDUwM0ZFMDYyMjQ5MkMwMDAwMDAwQjk0Cis6MTAyNzEwMDAwNDIyNDk1ODAwMDUwNDAzMDYyMjQ5NkMwMDAwMDAwQkZFCis6MTAyNzIwMDAwNDIyNDk5ODAwMDUwNDA4MDYyMjQ5QUMwMDAwMDAwQjY5Cis6MTAyNzMwMDAwNDIyNDlEODAwMDUwNDBEMDYyMjQ5RUMwMDAwMDAwQkQ0Cis6MTAyNzQwMDAwNDIyNEExODAwMDUwNDEyMDYyMjRBMkMwMDAwMDAwQjNECis6MTAyNzUwMDAwNDIyNEE1ODAwMDUwNDE3MDYyMjRBNkMwMDAwMDAwQkE4Cis6MTAyNzYwMDAwNDIyNEE5ODAwMDUwNDFDMDYyMjRBQUMwMDAwMDAwQjEzCis6MTAyNzcwMDAwNDIyNEFEODAwMDUwNDIxMDYyMjRBRUMwMDAwMDAwNTg0Cis6MTAyNzgwMDAwNjIyNEIwMDAwMDAwMDE3MDQyMjRCNUMwMDAxMDQyNkM3Cis6MTAyNzkwMDAwNjIyNEI2MDAwMDAwMDAzMDQyMjRCNkMwMDAxMDQyNzVBCis6MTAyN0EwMDAwNjIyMzgwMDAwMDAwMDQwMDYyMjMwMDAwMDAwMDIwMDJGCis6MTAyN0IwMDAwNDIyNTFDMDAwMDQwNDI4MDYyMjEwMDAwMDAwMDBDMEJBCis6MTAyN0MwMDAwNjIyMTVDMDAwMDAwMjQwMDQyMjFFQzgwMDA4MDQyQzg2Cis6MTAyN0QwMDAwNjIyMzkwMDAwMDAwMDA4MDIyMjUxMTgwMDAwMDAwMDAzCis6MTAyN0UwMDAwNjIyNTFEMDAwMDAwMDA2MDYyMjEzMDAwMDAwMDAwMjVECis6MTAyN0YwMDAwNjIyMTQxMDAwMDAwMDMwMDYyMjM5MjAwMDAwMDAwOEQ0Cis6MTAyODAwMDAwMjIyNTExQzAwMDAwMDAwMDYyMjUxRTgwMDAwMDAwNkQwCis6MTAyODEwMDAwNjIyMTMwODAwMDAwMDAyMDYyMjE0RDAwMDAwMDAzMDM3Cis6MTAyODIwMDAwMjE2MTAwMDAwMDAwMDI4MDIxNzAwMDgwMDAwMDAwMjM1Cis6MTAyODMwMDAwMjE3MDAyQzAwMDAwMDAzMDIxNzAwM0MwMDAwMDAwNEY3Cis6MTAyODQwMDAwMjE3MDA0NDAwMDAwMDAwMDIxNzAwNDgwMDAwMDAwMkM4Cis6MTAyODUwMDAwMjE3MDA0QzAwMDAwMDkwMDIxNzAwNTAwMDAwMDA5MDhBCis6MTAyODYwMDAwMjE3MDA1NDAwODAwMDkwMDIxNzAwNTgwODEwMDAwMDYyCis6MTAyODcwMDAwMjE3MDA2MDAwMDAwMDhBMDIxNzAwNjQwMDAwMDA4MDU4Cis6MTAyODgwMDAwMjE3MDA2ODAwMDAwMDgxMDIxNzAwNkMwMDAwMDA4MDQxCis6MTAyODkwMDAwMjE3MDA3MDAwMDAwMDA2MDIxNzAwNzgwMDAwMDdEMDQxCis6MTAyOEEwMDAwMjE3MDA3QzAwMDAwNzZDMDIxNzAwMzgwMDdDMTAwNDNGCis6MTAyOEIwMDAwMjE3MDAwNDAwMDAwMDBGMDYxNjQwMjQwMDAwMDAwMjZBCis6MTAyOEMwMDAwMjE2NDA3MDAwMDAwMDFDMDIxNjQyMDgwMDAwMDAwMUMxCis6MTAyOEQwMDAwMjE2NDIxMDAwMDAwMDAxMDIxNjQyMjAwMDAwMDAwMTEyCis6MTAyOEUwMDAwMjE2NDIyODAwMDAwMDAxMDIxNjQyMzAwMDAwMDAwMURBCis6MTAyOEYwMDAwMjE2NDIzODAwMDAwMDAxMDIxNjQyNjAwMDAwMDAwMThBCis6MTAyOTAwMDAwQzE2NDAxQzAwMDNEMDkwMEExNjQwMUMwMDAwMDA5Q0NFCis6MTAyOTEwMDAwQjE2NDAxQzAwMDAwOUM0MDIxNjQwMzAwMDAwMDAwOERECis6MTAyOTIwMDAwMjE2NDAzNDAwMDAwMDBDMDIxNjQwMzgwMDAwMDAxMDZGCis6MTAyOTMwMDAwMjE2NDA0NDAwMDAwMDIwMDIxNjQwMDAwMDAwMDAwMTgyCis6MTAyOTQwMDAwMjE2NDBEODAwMDAwMDAxMDIxNjQwMDgwMDAwMDAwMUY1Cis6MTAyOTUwMDAwMjE2NDAwQzAwMDAwMDAxMDIxNjQwMTAwMDAwMDAwMUE5Cis6MTAyOTYwMDAwMjE2NDI0MDAwMDAwMDAwMDIxNjQyNDgwMDAwMDAwMDJCCis6MTAyOTcwMDAwNjE2NDI3MDAwMDAwMDAyMDIxNjQyNTAwMDAwMDAwMERECis6MTAyOTgwMDAwMjE2NDI1ODAwMDAwMDAwMDYxNjQyODAwMDAwMDAwMkI1Cis6MTAyOTkwMDAwMjE2NjAwODAwMDAwNjE0MDIxNjYwMEMwMDAwMDYwMDEzCis6MTAyOUEwMDAwMjE2NjAxMDAwMDAwNjA0MDIxNjYwMUMwMDAwRkZGRjAzCis6MTAyOUIwMDAwMjE2NjAyMDAwMDBGRkZGMDIxNjYwMjQwMDAwRkZGRkU3Cis6MTAyOUMwMDAwMjE2NjAyODAwMDBGRkZGMDIxNjYwMzgwMDAwMDAyMDk5Cis6MTAyOUQwMDAwMjE2NjAzQzAwMDAwMDIwMDYxNjYwNDAwMDAwMDAwMjY1Cis6MTAyOUUwMDAwMjE2NjA0ODAwMDAwMDIzMDIxNjYwNEMwMDAwMDAyNDFDCis6MTAyOUYwMDAwMjE2NjA1MDAwMDAwMDI1MDIxNjYwNTQwMDAwMDAyNkY4Cis6MTAyQTAwMDAwMjE2NjA1ODAwMDAwMDI3MDIxNjYwNUMwMDAwMDAyOUQyCis6MTAyQTEwMDAwMjE2NjA2MDAwMDAwMDJBMDIxNjYwNjQwMDAwMDAyQkFECis6MTAyQTIwMDAwMjE2NjA2ODAwMDAwMDJDMDIxNjYwNkMwMDAwMDAyRDg5Cis6MTAyQTMwMDAwNjE2NjA3MDAwMDAwMDEyMDIxNjYwQjgwMDAwMDAwMTY3Cis6MTAyQTQwMDAwMjE2NjBCQzAwMDAwMDAxMDYxNjYwQzAwMDAwMDAzRUQ3Cis6MTAyQTUwMDAwMjE2NjFCODAwMDAwMDAxMDYxNjYxQkMwMDAwMDAxRkVDCis6MTAyQTYwMDAwMjE2NjIzODA3RkZGRkZGMDIxNjYyM0MwMDAwMDAzRkJCCis6MTAyQTcwMDAwMjE2NjI0MDA3RkZGRkZGMDIxNjYyNDQwMDAwMDAwRkNCCis6MTAyQTgwMDAwMTE2NjI0ODAwMDAwMDAwMDExNjYyNEMwMDAwMDAwMEMwCis6MTAyQTkwMDAwMTE2NjI1MDAwMDAwMDAwMDExNjYyNTQwMDAwMDAwMEEwCis6MTAyQUEwMDAwMTE2NjI1ODAwMDAwMDAwMDExNjYyNUMwMDAwMDAwMDgwCis6MTAyQUIwMDAwMTE2NjI2MDAwMDAwMDAwMDExNjYyNjQwMDAwMDAwMDYwCis6MTAyQUMwMDAwMTE2NjI2ODAwMDAwMDAwMDExNjYyNkMwMDAwMDAwMDQwCis6MTAyQUQwMDAwMTE2NjI3MDAwMDAwMDAwMDExNjYyNzQwMDAwMDAwMDIwCis6MTAyQUUwMDAwMTE2NjI3ODAwMDAwMDAwMDExNjYyN0MwMDAwMDAwMDAwCis6MTAyQUYwMDAwMjE2NjRCQzAwMDAwMDAxMEMxNjYwMDAwMDAwMDNFODMwCis6MTAyQjAwMDAwQTE2NjAwMDAwMDAwMDAxMEIxNjYwMDAwMDAwMDAwQUI5Cis6MTAyQjEwMDAwMjE2ODA0MDAwMDAwMDA2MDIxNjgwNDQwMDAwMDAwNUY2Cis6MTAyQjIwMDAwMjE2ODA0ODAwMDAwMDBBMDIxNjgwNEMwMDAwMDAwNUQyCis6MTAyQjMwMDAwMjE2ODA1NDAwMDAwMDAyMDIxNjgwQ0MwMDAwMDAwNDNGCis6MTAyQjQwMDAwMjE2ODBEMDAwMDAwMDA0MDIxNjgwRDQwMDAwMDAwNEE5Cis6MTAyQjUwMDAwMjE2ODBEODAwMDAwMDA0MDIxNjgwREMwMDAwMDAwNDg5Cis6MTAyQjYwMDAwMjE2ODBFMDAwMDAwMDA0MDIxNjgwRTQwMDAwMDAwNDY5Cis6MTAyQjcwMDAwMjE2ODBFODAwMDAwMDA0MDIxNjg4MDQwMDAwMDAwNDI5Cis6MTAyQjgwMDAwMjE2ODAzMDAwMDAwMDdDMDIxNjgwMzQwMDAwMDAzREY4Cis6MTAyQjkwMDAwMjE2ODAzODAwMDAwMDNGMDIxNjgwM0MwMDAwMDA5Q0I2Cis6MTAyQkEwMDAwMjE2ODBGMDAwMDAwMDA3MDYxNjgwRjQwMDAwMDAwNTAxCis6MTAyQkIwMDAwMjE2ODgwQzAxMDEwMTAxMDIxNjgxMDgwMDAwMDAwMEM0Cis6MTAyQkMwMDAwMjE2ODEwQzAwMDAwMDA0MDIxNjgxMTAwMDAwMDAwNEFGCis6MTAyQkQwMDAwMjE2ODExNDAwMDAwMDAyMDIxNjg4MTAwODAxMjAwNDY5Cis6MTAyQkUwMDAwMjE2ODExODAwMDAwMDA1MDIxNjgxMUMwMDAwMDAwNTc1Cis6MTAyQkYwMDAwMjE2ODEyMDAwMDAwMDA1MDIxNjgxMjQwMDAwMDAwNTU1Cis6MTAyQzAwMDAwMjE2ODgyQzIwMDgxMDAxMDIxNjgxMjgwMDAwMDAwOEY2Cis6MTAyQzEwMDAwMjE2ODEyQzAwMDAwMDA2MDIxNjgxMzAwMDAwMDAwNzE5Cis6MTAyQzIwMDAwMjE2ODEzNDAwMDAwMDAwMDIxNjg4MzAwMTAxMDEyMEU0Cis6MTAyQzMwMDAwNjE2ODEzODAwMDAwMDA0MDIxNjg4MzQwMTAxMDEwMUUzCis6MTAyQzQwMDAwNjE2ODE0ODAwMDAwMDA0MDIxNjg4MzgwMTAxMDEwMUJGCis6MTAyQzUwMDAwNjE2ODE1ODAwMDAwMDA0MDIxNjg4M0MwMTAxMDEwMTlCCis6MTAyQzYwMDAwNjE2ODE2ODAwMDAwMDAzMDIxNjgxNzQwMDAwMDAwMTRFCis6MTAyQzcwMDAwMjE2ODg0MDAxMDEwMTAxMDIxNjgxNzgwMDAwMDAwMTVFCis6MTAyQzgwMDAwMjE2ODE3QzAwMDAwMDAxMDIxNjgxODAwMDAwMDAwMTE0Cis6MTAyQzkwMDAwMjE2ODE4NDAwMDAwMDAxMDIxNjg4NDQwMTAxMDEwMTJFCis6MTAyQ0EwMDAwMjE2ODE4ODAwMDAwMDAxMDIxNjgxOEMwMDAwMDAwNEQ5Cis6MTAyQ0IwMDAwMjE2ODE5MDAwMDAwMDA0MDIxNjgxOTQwMDAwMDAwMkI4Cis6MTAyQ0MwMDAwMjE2ODg0ODA4MDEyMDA0MDIxNjgxOTgwMDAwMDAwNUI5Cis6MTAyQ0QwMDAwMjE2ODE5QzAwMDAwMDA1MDIxNjgxQTAwMDAwMDAwNTdDCis6MTAyQ0UwMDAwMjE2ODFBNDAwMDAwMDA1MDIxNjg4MTQyMDA4MTAwMUI1Cis6MTAyQ0YwMDAwMjE2ODFBODAwMDAwMDA4MDIxNjgxQUMwMDAwMDAwNjQwCis6MTAyRDAwMDAwMjE2ODFCMDAwMDAwMDA3MDIxNjgxQjQwMDAwMDAwMTI1Cis6MTAyRDEwMDAwMjE2ODgxODAxMDEwMTIwMDIxNjgxQjgwMDAwMDAwMTg2Cis6MTAyRDIwMDAwMjE2ODFCQzAwMDAwMDAxMDIxNjgxQzAwMDAwMDAwMUYzCis6MTAyRDMwMDAwMjE2ODFDNDAwMDAwMDAxMDIxNjg4MUMwMTAxMDEwMTc1Cis6MTAyRDQwMDAwMjE2ODFDODAwMDAwMDAxMDIxNjgxQ0MwMDAwMDAwMUJCCis6MTAyRDUwMDAwMjE2ODFEMDAwMDAwMDAxMDIxNjgxRDQwMDAwMDAwMTlCCis6MTAyRDYwMDAwMjE2ODgyMDAxMDEwMTAxMDIxNjgxRDgwMDAwMDAwMTJECis6MTAyRDcwMDAwMjE2ODFEQzAwMDAwMDAxMDIxNjgxRTAwMDAwMDAwMTYzCis6MTAyRDgwMDAwMjE2ODFFNDAwMDAwMDAxMDIxNjg4MjQwMTAxMDEwMUZECis6MTAyRDkwMDAwMjE2ODFFODAwMDAwMDAxMDIxNjgxRUMwMDAwMDAwMTJCCis6MTAyREEwMDAwMjE2ODFGMDAwMDAwMDAxMDIxNjg4MjgwMTAxMDEwMUNECis6MTAyREIwMDAwMjE2ODI0MEZGRkYwMDNGMDYxNjgyNDQwMDAwMDAwMjE4Cis6MTAyREMwMDAwMjE2ODI0Q0ZGRkYwMDNGMDIxNjgyNTAwMDAwMDEwMEY1Cis6MTAyREQwMDAwMjE2ODI1NDAwMDAwMTAwMDYxNjgyNTgwMDAwMDAwMjBDCis6MTAyREUwMDAwMjE2ODI2MDAwMDAwMEMwMDIxNjgyNjQwMDAwMDBDMDZCCis6MTAyREYwMDAwMjE2ODI2ODAwMDAxRTAwMDIxNjgyNkMwMDAwMUUwMDhGCis6MTAyRTAwMDAwMjE2ODI3MDAwMDA0MDAwMDIxNjgyNzQwMDAwNDAwMDJBCis6MTAyRTEwMDAwMjE2ODI3ODAwMDA4MDAwMDIxNjgyN0MwMDAwODAwMDhBCis6MTAyRTIwMDAwMjE2ODI4MDAwMDAyMDAwMDIxNjgyODQwMDAwMjAwMDJBCis6MTAyRTMwMDAwNjE2ODI4ODAwMDAwMDA3MDIxNjgyQTQwMDAwMDAwMTI2Cis6MTAyRTQwMDAwNjE2ODJBODAwMDAwMDBBMDIxNjgxRjQwMDAwMEMwODkxCis6MTAyRTUwMDAwMjE2ODFGODAwMDAwMDQwMDIxNjgxRkMwMDAwMDEwMDBCCis6MTAyRTYwMDAwMjE2ODIwMDAwMDAwMDIwMDIxNjgyMDQwMDAwMDAxN0YzCis6MTAyRTcwMDAwMjE2ODIwODAwMDAwMDgwMDIxNjgyMEMwMDAwMDIwMDg4Cis6MTAyRTgwMDAwMjE2ODIxMDAwMDAwMDAwMDIxNjgyMThGRkZGMDFGRkU4Cis6MTAyRTkwMDAwMjE2ODIxNEZGRkYwMUZGMDIxNjgyM0MwMDAwMDAxMzlECis6MTAyRUEwMDAwMjE2ODA5MDAwMDAwMTNGMDIxNjgwNjAwMDAwMDE0MDgxCis6MTAyRUIwMDAwMjE2ODA2NDAwMDAwMTQwMDYxNjgwNjgwMDAwMDAwMkNGCis6MTAyRUMwMDAwMjE2ODA3MDAwMDAwMEMwMDYxNjgwNzQwMDAwMDAwNzIzCis6MTAyRUQwMDAwMjE2ODA5QzAwMDAwMDQ4MDIxNjgwQTAwMDAwMDA0OEY2Cis6MTAyRUUwMDAwNjE2ODBBNDAwMDAwMDAyMDIxNjgwQUMwMDAwMDA0ODE0Cis6MTAyRUYwMDAwNjE2ODBCMDAwMDAwMDA3MDIxNjgyMzgwMDAwODAwMDJECis6MTAyRjAwMDAwMjE2ODIzNDAwMDAyNUU0MDIxNjgwOTQwMDAwN0ZGRjQwCis6MTAyRjEwMDAwMjE2ODIyMDAwMDAwMDA3MDIxNjgyMUMwMDAwMDAwNzMzCis6MTAyRjIwMDAwMjE2ODIyODAwMDAwMDAwMDIxNjgyMjRGRkZGRkZGRjI1Cis6MTAyRjMwMDAwMjE2ODIzMDAwMDAwMDAwMDIxNjgyMkNGRkZGRkZGRjA1Cis6MTAyRjQwMDAwMjE2ODBFQzAwMDAwMEZGMDIxNDAwMDAwMDAwMDAwMUU3Cis6MTAyRjUwMDAwMjE0MDAwQzAwMDAwMDAxMDIxNDAwNDAwMDAwMDAwMUY3Cis6MTAyRjYwMDAwMjE0MDA0NDAwMDA3RkZGMDIxNDAwMEMwMDAwMDAwMDY3Cis6MTAyRjcwMDAwMjE0MDAwMDAwMDAwMDAwMDIxNDAwNkMwMDAwMDAwMEI5Cis6MTAyRjgwMDAwMjE0MDAwNDAwMDAwMDAxMDIxNDAwMzAwMDAwMDAwMURGCis6MTAyRjkwMDAwMjE0MDAwNDAwMDAwMDAwMDIxNDAwNUMwMDAwMDAwMEE1Cis6MTAyRkEwMDAwMjE0MDAwODAwMDAwMDAxMDIxNDAwMzQwMDAwMDAwMUI3Cis6MTAyRkIwMDAwMjE0MDAwODAwMDAwMDAwMDIxNDAwNjAwMDAwMDAwMDdECis6MTAyRkMwMDAwNjAyODAwMDAwMDAyMDAwMDIwMjAwNTgwMDAwMDAzMkNCCis6MTAyRkQwMDAwMjAyMDBBMDAzMTUwMDIwMDIwMjAwQTQwMzE1MDAyMDM1Cis6MTAyRkUwMDAwMjAyMDBBODAxMDAwMDMwMDIwMjAwQUMwODEwMDAwMDNDCis6MTAyRkYwMDAwMjAyMDBCMDAwMDAwMDMzMDIwMjAwQjQwMDAwMDAzMDAyCis6MTAzMDAwMDAwMjAyMDBCODAwMDAwMDMxMDIwMjAwQkMwMDAwMDAwMzEwCis6MTAzMDEwMDAwMjAyMDBDMDAwMDAwMDA2MDIwMjAwQzQwMDAwMDAwMzFCCis6MTAzMDIwMDAwMjAyMDBDODAwMDAwMDAzMDIwMjAwQ0MwMDAwMDAwMkZGCis6MTAzMDMwMDAwMjAyMDBEMDAwMDAwMDAwMDIwMjAwRDQwMDAwMDAwMkUyCis6MTAzMDQwMDAwMjAyMDBEQzAwMDAwMDAwMDIwMjAwRTAwMDAwMDAwNkI2Cis6MTAzMDUwMDAwMjAyMDBFNDAwMDAwMDA0MDIwMjAwRTgwMDAwMDAwMjk2Cis6MTAzMDYwMDAwMjAyMDBFQzAwMDAwMDAyMDIwMjAwRjAwMDAwMDAwMTc5Cis6MTAzMDcwMDAwMjAyMDBGQzAwMDAwMDA2MDIwMjAxMjAwMDAwMDAwMDI1Cis6MTAzMDgwMDAwMjAyMDEzNDAwMDAwMDAyMDIwMjAxQjAwMDAwMDAwMTRGCis6MTAzMDkwMDAwMjAyMDIwQzAwMDAwMDAxMDIwMjAyMTQwMDAwMDAwMTAyCis6MTAzMEEwMDAwMjAyMDIxODAwMDAwMDAyMDIwMjA0MDQwMDAwMDAwMUYzCis6MTAzMEIwMDAwMjAyMDQwQzAwMDAwMDQwMDIwMjA0MTAwMDAwMDA0MDY0Cis6MTAzMEMwMDAwMjAyMDQxQzAwMDAwMDA0MDIwMjA0MjAwMDAwMDAyMDkwCis6MTAzMEQwMDAwMjAyMDQyNDAwMDAwMDAyMDIwMjA0MjgwMDAwMDAxRjczCis6MTAzMEUwMDAwNjAyMDUwMDAwMDAwMDEyMDQwMjA0ODAwMDIwMDQzNERGCis6MTAzMEYwMDAwMjAyMDA2MDAwMDAwMDBGMDIwMjAwNjQwMDAwMDAwN0VFCis6MTAzMTAwMDAwMjAyMDA2ODAwMDAwMDAwMDIwMjAwNkMwMDAwMDAwRUQ1Cis6MTAzMTEwMDAwNjAyMDA3MDAwMDAwMDA0MDIwMjAwRjQwMDAwMDAwNDM3Cis6MTAzMTIwMDAwMjAyMDAwNDAwMDAwMDAxMDIwMjAwMDgwMDAwMDAwMTg5Cis6MTAzMTMwMDAwMjAyMDAwQzAwMDAwMDAxMDIwMjAwMTAwMDAwMDAwMTY5Cis6MTAzMTQwMDAwMjAyMDAxNDAwMDAwMDAxMDIwMjAwMTgwMDAwMDAwMTQ5Cis6MTAzMTUwMDAwMjAyMDAxQzAwMDAwMDAxMDIwMjAwMjAwMDAwMDAwMTI5Cis6MTAzMTYwMDAwMjAyMDAyNDAwMDAwMDAxMDIwMjAwMjgwMDAwMDAwMTA5Cis6MTAzMTcwMDAwMjAyMDAyQzAwMDAwMDAxMDIwMjAwMzAwMDAwMDAwMUU5Cis6MTAzMTgwMDAwMjAyMDAzNDAwMDAwMDAxMDIwMjAwMzgwMDAwMDAwMUM5Cis6MTAzMTkwMDAwMjAyMDAzQzAwMDAwMDAxMDIwMjAwNDAwMDAwMDAwMUE5Cis6MTAzMUEwMDAwMjAyMDA0NDAwMDAwMDAxMDIwMjAwNDgwMDAwMDAwMTg5Cis6MTAzMUIwMDAwMjAyMDA0QzAwMDAwMDAxMDIwMjAwNTAwMDAwMDAwMTY5Cis6MTAzMUMwMDAwMjAyMDEwODAwMDAwMEM4MDIwMjAxMTgwMDAwMDAwMjBCCis6MTAzMUQwMDAwMjAyMDFDNDAwMDAwMDAwMDIwMjAxQ0MwMDAwMDAwMDU1Cis6MTAzMUUwMDAwMjAyMDFENDAwMDAwMDAyMDIwMjAxREMwMDAwMDAwMjIxCis6MTAzMUYwMDAwMjAyMDFFNDAwMDAwMEZGMDIwMjAxRUMwMDAwMDBGRkY3Cis6MTAzMjAwMDAwMjAyMDEwQzAwMDAwMEM4MDIwMjAxMUMwMDAwMDAwMkMyCis6MTAzMjEwMDAwMjAyMDFDODAwMDAwMDAwMDIwMjAxRDAwMDAwMDAwMDBDCis6MTAzMjIwMDAwMjAyMDFEODAwMDAwMDAyMDIwMjAxRTAwMDAwMDAwMkQ4Cis6MTAzMjMwMDAwMjAyMDFFODAwMDAwMEZGMDIwMjAxRjAwMDAwMDBGRkFFCis6MTAzMjQwMDAwNzI4MDQwMDAwOEQwMDAwMDgyODA3NjgwMDEzMDQ1NEI0Cis6MTAzMjUwMDAwNzJDMDAwMDM0MDkwMDAwMDcyQzgwMDAzODk5MEQwMzZBCis6MTAzMjYwMDAwNzJEMDAwMDM5MEMxQjJBMDcyRDgwMDAwNjQxMjk2RTBFCis6MTAzMjcwMDAwODJEOEFCMDRFQUEwNDU2MDEyODAwMDAwMDAwMDAwMDY0Cis6MTAzMjgwMDAwMTI4MDAwNDAwMDAwMDAwMDEyODAwMDgwMDAwMDAwMEUwCis6MTAzMjkwMDAwMTI4MDAwQzAwMDAwMDAwMDEyODAwMTAwMDAwMDAwMEMwCis6MTAzMkEwMDAwMTI4MDAxNDAwMDAwMDAwMDIyODAwMjAwMDAwMDAwMTk2Cis6MTAzMkIwMDAwMjI4MDAyNDAwMDAwMDAyMDIyODAwMjgwMDAwMDAwMzY5Cis6MTAzMkMwMDAwMjI4MDAyQzAwMDAwMDAwMDIyODAwMzAwMDAwMDAwNDRBCis6MTAzMkQwMDAwMjI4MDAzNDAwMDAwMDAxMDIyODAwMzgwMDAwMDAwMDJECis6MTAzMkUwMDAwMjI4MDAzQzAwMDAwMDAxMDIyODAwNDAwMDAwMDAwNDA5Cis6MTAzMkYwMDAwMjI4MDA0NDAwMDAwMDAwMDIyODAwNDgwMDAwMDAwMUVECis6MTAzMzAwMDAwMjI4MDA0QzAwMDAwMDAzMDIyODAwNTAwMDAwMDAwMENBCis6MTAzMzEwMDAwMjI4MDA1NDAwMDAwMDAxMDIyODAwNTgwMDAwMDAwNEE4Cis6MTAzMzIwMDAwMjI4MDA1QzAwMDAwMDAwMDIyODAwNjAwMDAwMDAwMThDCis6MTAzMzMwMDAwMjI4MDA2NDAwMDAwMDAzMDIyODAwNjgwMDAwMDAwMDZBCis6MTAzMzQwMDAwMjI4MDA2QzAwMDAwMDAxMDIyODAwNzAwMDAwMDAwNDQ4Cis6MTAzMzUwMDAwMjI4MDA3NDAwMDAwMDAwMDIyODAwNzgwMDAwMDAwNDI5Cis6MTAzMzYwMDAwMjI4MDA3QzAwMDAwMDAzMDYyODAwODAwMDAwMDAwMjA0Cis6MTAzMzcwMDAwMjI4MDBBNDAwMDAzRkZGMDIyODAwQTgwMDAwMDNGRjZECis6MTAzMzgwMDAwMjI4MDIyNDAwMDAwMDAwMDIyODAyMzQwMDAwMDAwMDhECis6MTAzMzkwMDAwMjI4MDI0QzAwMDAwMDAwMDIyODAyRTQwMDAwRkZGRkE3Cis6MTAzM0EwMDAwNjI4MjAwMDAwMDAwODAwMDIyQjhCQzAwMDAwMDAwMTRFCis6MTAzM0IwMDAwMjJCODAwMDAwMDAwMDAwMDIyQjgwNDAwMDAwMDAxODVCCis6MTAzM0MwMDAwMjJCODA4MDAwMDAwMDBDMDIyQjgwQzAwMDAwMDA2NkYxCis6MTAzM0QwMDAwQzJCODMwMDAwMDdBMTIwMEEyQjgzMDAwMDAwMDEzODdBCis6MTAzM0UwMDAwQjJCODMwMDAwMDAxMzg4MEEyQjgzNDAwMDAwMDAwMDkxCis6MTAzM0YwMDAwQzJCODM0MDAwMDAwMUY0MEIyQjgzNDAwMDAwMDAwNUUwCis6MTAzNDAwMDAwMjJCODM4MDAwMDdBMTIwMDIyQjgzQzAwMDAwMDFGNDVGCis6MTAzNDEwMDAwNjJBM0Q0ODAwMDAwMDA0MDQyQTNENTgwMDAyMDQ1OEQyCis6MTAzNDIwMDAwNjJBM0Q2MDAwMDAwMDA2MDYyQTMwMDAwMDAwMDA0ODIxCis6MTAzNDMwMDAwNjJBMjAwODAwMDAwMEM4MDYyQTIwMDAwMDAwMDAwMjFBCis6MTAzNDQwMDAwNjJBMzEyODAwMDAwMDhFMDYyQTMzNjgwMDAwMDAwMzk3Cis6MTAzNDUwMDAwNDJBMzM3NDAwMDEwNDVBMDYyQTNBNzgwMDAwMDAwMjU0Cis6MTAzNDYwMDAwNDJBM0E4MDAwMDIwNDVCMDQyQTNBNzAwMDAyMDQ1REQ4Cis6MTAzNDcwMDAwNDJBM0UyODAwMDIwNDVGMDQyQTNFQjAwMDA0MDQ2MUNFCis6MTAzNDgwMDAwNDJBMjUwMDAwMDIwNDY1MDYyQTI1MDgwMDAwMDEwMDIwCis6MTAzNDkwMDAwNjJBMjk3MDAwMDAwMDA0MDQyQTI5NjAwMDA0MDQ2NzM5Cis6MTAzNEEwMDAwNDJBMkY0ODAwMDIwNDZCMDYyQTMzNzgwMDAwMDBEODUzCis6MTAzNEIwMDAwMjJBM0EzODAwMDAwMDAwMDYyQTNBODgwMDAwMDAzMjRBCis6MTAzNEMwMDAwNDJBM0Q4ODAwMTAwNDZEMDYyQTUwMjAwMDAwMDAwMkU2Cis6MTAzNEQwMDAwNjJBNTAzMDAwMDAwMDAyMDYyQTUwMDAwMDAwMDAwMkI4Cis6MTAzNEUwMDAwNjJBNTAxMDAwMDAwMDAyMDIyQTUwQjgwMDAwMDAwMTE1Cis6MTAzNEYwMDAwNjJBNTA0ODAwMDAwMDBFMDQyQTNENzgwMDAyMDQ3RDkwCis6MTAzNTAwMDAwNjJBM0MxODAwMDAwMDI2MDIyQTUwNDAwMDAwMDAwMDU1Cis6MTAzNTEwMDAwNjJBMzZEODAwMDAwMEQ4MDIyQTNBM0MwMDAwMDAwMEYzCis6MTAzNTIwMDAwNjJBM0I1MDAwMDAwMDMyMDQyQTNEQzgwMDEwMDQ3RkU4Cis6MTAzNTMwMDAwNjJBNTAyODAwMDAwMDAyMDYyQTUwMzgwMDAwMDAwMjI3Cis6MTAzNTQwMDAwNjJBNTAwODAwMDAwMDAyMDYyQTUwMTgwMDAwMDAwMjU3Cis6MTAzNTUwMDAwMjJBNTBCQzAwMDAwMDAxMDYyQTUwODAwMDAwMDAwRTI0Cis6MTAzNTYwMDAwNDJBM0Q4MDAwMDIwNDhGMDYyQTNDQjAwMDAwMDAyNjk5Cis6MTAzNTcwMDAwMjJBNTA0NDAwMDAwMDAwMDIxMDEwMDgwMDAwMDAwMTYwCis6MTAzNTgwMDAwMjEwMTAxMDAwMDAwMjY0MDIxMDEwMDAwMDAzRDAwMEFFCis6MTAzNTkwMDAwMjEwMTAwNDAwMDAwMDNEMDkxMDE4MDAwMjAwMDQ5MTAwCis6MTAzNUEwMDAwOTEwMTEwMDAwMTAwNjkxMDYxMDExNDAwMDAwMDAwOERCCis6MTAzNUIwMDAwOTEwMTE2MDAwMDgwNkExMDYxMDExODAwMDAwMDAwMjI5Cis6MTAzNUMwMDAwOTEwMTE4ODAwMDYwNkE5MDYxMDExQTAwMDAwMDAxOEI1Cis6MTAzNUQwMDAwMjEwMTAxMDAwMDAwMDAwMDYxMDI0MDAwMDAwMDBFMDlGCis6MTAzNUUwMDAwMjEwMjAxQzAwMDAwMDAwMDIxMDIwMjAwMDAwMDAwMTNBCis6MTAzNUYwMDAwMjEwMjBDMDAwMDAwMDAxMDIxMDIwMDQwMDAwMDAwMUExCis6MTAzNjAwMDAwMjEwMjAwODAwMDAwMDAxMDkxMDNDMDAwMDA1MDZBRjcwCis6MTAzNjEwMDAwOTEwM0MyMDAwMDUwNkI0MDkxMDM4MDAwMDA1MDZCOTYxCis6MTAzNjIwMDAwMjEwNDAyODAwMDAwMDEwMDIxMDQwNDQwMDAwM0ZGRjNDCis6MTAzNjMwMDAwMjEwNDA1ODAwMjgwMDAwMDIxMDQwODQwMDg0OTI0QTgyCis6MTAzNjQwMDAwNjEwNEMwMDAwMDAwMTAwMDIxMDQwNTgwMDAwMDAwMDZECis6MTAzNjUwMDAwNjEwODA2ODAwMDAwMDA0MDIxMDgwMDAwMDAwMTA4MDQ2Cis6MTAzNjYwMDAwNjEwODAyODAwMDAwMDAyMDIxMDgwMzgwMDAwMDAxMEMwCis6MTAzNjcwMDAwMjEwODA0MDAwMDBGRkZGMDIxMDgwNDQwMDAwRkZGRkE2Cis6MTAzNjgwMDAwMjEwODA1MDAwMDAwMDAwMDIxMDgxMDAwMDAwMDAwMEM1Cis6MTAzNjkwMDAwNjEwODEyMDAwMDAwMDAyMDIxMDgwMDgwMDAwMDJCNTIwCis6MTAzNkEwMDAwMjEwODAxMDAwMDAwMDAwMDYxMDgyMDAwMDAwMDA0QTk2Cis6MTAzNkIwMDAwMjEwODEwODAwMDFGRkZGMDYxMDgxNDAwMDAwMDAwMjk3Cis6MTAzNkMwMDAwMjEwODAwMDAwMDAxQTgwMDYxMDkwMDAwMDAwMDAyNDA0Cis6MTAzNkQwMDAwNjEwOTEyMDAwMDAwMDRBMDYxMDkzNzAwMDAwMDA0QTc2Cis6MTAzNkUwMDAwNjEwOTVDMDAwMDAwMDRBMDIxMDgwMDQwMDAwMTA4MEZGCis6MTAzNkYwMDAwNjEwODAzMDAwMDAwMDAyMDIxMDgwM0MwMDAwMDAxMDI0Cis6MTAzNzAwMDAwMjEwODA0ODAwMDBGRkZGMDIxMDgwNEMwMDAwRkZGRjA1Cis6MTAzNzEwMDAwMjEwODA1NDAwMDAwMDAwMDIxMDgxMDQwMDAwMDAwMDJDCis6MTAzNzIwMDAwNjEwODEyODAwMDAwMDAyMDIxMDgwMEMwMDAwMDJCNTgzCis6MTAzNzMwMDAwMjEwODAxNDAwMDAwMDAwMDYxMDg0MDAwMDAwMDA0QUZGCis6MTAzNzQwMDAwMjEwODEwQzAwMDFGRkZGMDYxMDgxNDgwMDAwMDAwMkZBCis6MTAzNzUwMDAwMjEwODAwNDAwMDAxQTgwMDYxMDkwOTAwMDAwMDAyNERGCis6MTAzNzYwMDAwNjEwOTI0ODAwMDAwMDRBMDYxMDk0OTgwMDAwMDA0QTkzCis6MTAzNzcwMDAwNjEwOTZFODAwMDAwMDRBMDIxMjA0OTAwMEUzODM0MDFECis6MTAzNzgwMDAwMjEyMDUxNDAwMDAzQzEwMDIxMjA1MjAwMDAwMDAwMjg1Cis6MTAzNzkwMDAwMjEyMDQ5NEZGRkZGRkZGMDIxMjA0OThGRkZGRkZGRkQ1Cis6MTAzN0EwMDAwMjEyMDQ5Q0ZGRkZGRkZGMDIxMjA0QTBGRkZGRkZGRkI1Cis6MTAzN0IwMDAwMjEyMDRBNEZGRkZGRkZGMDIxMjA0QThGRkZGRkZGRjk1Cis6MTAzN0MwMDAwMjEyMDRBQ0ZGRkZGRkZGMDIxMjA0QjBGRkZGRkZGRjc1Cis6MTAzN0QwMDAwMjEyMDRCOEZGRkZGRkZGMDIxMjA0QkNGRkZGRkZGRjRECis6MTAzN0UwMDAwMjEyMDRDMEZGRkZGRkZGMDIxMjA0QzRGRkZGRkZGRjJECis6MTAzN0YwMDAwMjEyMDRDOEZGRkZGRkZGMDIxMjA0Q0NGRkZGRkZGRjBECis6MTAzODAwMDAwMjEyMDREMEZGRkZGRkZGMDIxMjA0RENGRkZGRkZGRkU0Cis6MTAzODEwMDAwMjEyMDRFMEZGRkZGRkZGMDIxMjA0RTRGRkZGRkZGRkJDCis6MTAzODIwMDAwMjEyMDRFOEZGRkZGRkZGMDIxMjA0RUNGRkZGRkZGRjlDCis6MTAzODMwMDAwMjEyMDRGMEZGRkZGRkZGMDIxMjA0RjRGRkZGRkZGRjdDCis6MTAzODQwMDAwMjEyMDRGOEZGRkZGRkZGMDIxMjA0RkNGRkZGRkZGRjVDCis6MTAzODUwMDAwMjEyMDUwMEZGRkZGRkZGMDIxMjA1MDRGRkZGRkZGRjNBCis6MTAzODYwMDAwMjEyMDUwOEZGRkZGRkZGMDIxMjA1MENGRkZGRkZGRjFBCis6MTAzODcwMDAwMjEyMDUxMEZGRkZGRkZGMDIxMjA0RDRGRkZGMzMzMEQ2Cis6MTAzODgwMDAwMjEyMDREOEZGRkYzMzQwMDIxMjA0QjRGMDAwMzAwMEVCCis6MTAzODkwMDAwMjEyMDM5MDAwMDAwMDA4MDIxMjAzOUMwMDAwMDAwOEJFCis6MTAzOEEwMDAwNjEyMDNBMDAwMDAwMDAyMDIxMjAzQkMwMDAwMDAwNDg0Cis6MTAzOEIwMDAwMjEyMDNDNDAwMDAwMDA0MDIxMjAzRDAwMDAwMDAwMDQyCis6MTAzOEMwMDAwMjEyMDNEQzAwMDAwMDAwMDIxMjAzNkMwMDAwMDAwMTgxCis6MTAzOEQwMDAwMjEyMDM2ODAwMDAwMDNGMDIxMjAxQkMwMDAwMDA0MDE5Cis6MTAzOEUwMDAwMjEyMDFDMDAwMDAxODA4MDIxMjAxQzQwMDAwMDgwM0ZGCis6MTAzOEYwMDAwMjEyMDFDODAwMDAwODAzMDIxMjAxQ0MwMDAwMDA0MEJGCis6MTAzOTAwMDAwMjEyMDFEMDAwMDAwMDAzMDIxMjAxRDQwMDAwMDgwM0RCCis6MTAzOTEwMDAwMjEyMDFEODAwMDAwODAzMDIxMjAxREMwMDAwMDgwM0IzCis6MTAzOTIwMDAwMjEyMDFFMDAwMDEwMDAzMDIxMjAxRTQwMDAwMDgwMzlBCis6MTAzOTMwMDAwMjEyMDFFODAwMDAwODAzMDIxMjAxRUMwMDAwMDAwMzdCCis6MTAzOTQwMDAwMjEyMDFGMDAwMDAwMDAzMDIxMjAxRjQwMDAwMDAwMzYzCis6MTAzOTUwMDAwMjEyMDFGODAwMDAwMDAzMDIxMjAxRkMwMDAwMDAwMzQzCis6MTAzOTYwMDAwMjEyMDIwMDAwMDAwMDAzMDIxMjAyMDQwMDAwMDAwMzIxCis6MTAzOTcwMDAwMjEyMDIwODAwMDAwMDAzMDIxMjAyMEMwMDAwMDAwMzAxCis6MTAzOTgwMDAwMjEyMDIxMDAwMDAwMDAzMDIxMjAyMTQwMDAwMDAwM0UxCis6MTAzOTkwMDAwMjEyMDIxODAwMDAwMDAzMDIxMjAyMUMwMDAwMDAwM0MxCis6MTAzOUEwMDAwMjEyMDIyMDAwMDAwMDAzMDIxMjAyMjQwMDAwMDAwM0ExCis6MTAzOUIwMDAwMjEyMDIyODAwMDAyNDAzMDIxMjAyMkMwMDAwMDAyRjMxCis6MTAzOUMwMDAwMjEyMDIzMDAwMDAwMDA5MDIxMjAyMzQwMDAwMDAxOTQ1Cis6MTAzOUQwMDAwMjEyMDIzODAwMDAwMTg0MDIxMjAyM0MwMDAwMDE4MzNFCis6MTAzOUUwMDAwMjEyMDI0MDAwMDAwMzA2MDIxMjAyNDQwMDAwMDAxOTA1Cis6MTAzOUYwMDAwMjEyMDI0ODAwMDAwMDA2MDIxMjAyNEMwMDAwMDMwNkY4Cis6MTAzQTAwMDAwMjEyMDI1MDAwMDAwMzA2MDIxMjAyNTQwMDAwMDMwNkQ0Cis6MTAzQTEwMDAwMjEyMDI1ODAwMDAwQzg2MDIxMjAyNUMwMDAwMDMwNjJCCis6MTAzQTIwMDAwMjEyMDI2MDAwMDAwMzA2MDIxMjAyNjQwMDAwMDAwNjk3Cis6MTAzQTMwMDAwMjEyMDI2ODAwMDAwMDA2MDIxMjAyNkMwMDAwMDAwNjdBCis6MTAzQTQwMDAwMjEyMDI3MDAwMDAwMDA2MDIxMjAyNzQwMDAwMDAwNjVBCis6MTAzQTUwMDAwMjEyMDI3ODAwMDAwMDA2MDIxMjAyN0MwMDAwMDAwNjNBCis6MTAzQTYwMDAwMjEyMDI4MDAwMDAwMDA2MDIxMjAyODQwMDAwMDAwNjFBCis6MTAzQTcwMDAwMjEyMDI4ODAwMDAwMDA2MDIxMjAyOEMwMDAwMDAwNkZBCis6MTAzQTgwMDAwMjEyMDI5MDAwMDAwMDA2MDIxMjAyOTQwMDAwMDAwNkRBCis6MTAzQTkwMDAwMjEyMDI5ODAwMDAwMDA2MDIxMjAyOUMwMDAwMDAwNkJBCis6MTAzQUEwMDAwMjEyMDJBMDAwMDAwMzA2MDIxMjAyQTQwMDAwMDAxMzhBCis6MTAzQUIwMDAwMjEyMDJBODAwMDAwMDA2MDIxMjAyQjAwMDAwMTAwNDY4Cis6MTAzQUMwMDAwMjEyMDJCNDAwMDAxMDA0MDIxMjAzMjQwMDEwNjQ0MDI5Cis6MTAzQUQwMDAwMjEyMDMyODAwMTA2NDQwMDIxMjAxQjAwMDAwMDAwMTJECis6MTAzQUUwMDAwNjAwQTAwMDAwMDAwMDE2MDIwMEEwNkNCRjVDMDAwMEYxCis6MTAzQUYwMDAwMjAwQTA3MEZGRjUxRkVGMDIwMEEwNzQwMDAwRkZGRjlFCis6MTAzQjAwMDAwMjAwQTA3OEYwMDAwM0UwMDIwMEEwN0MwMDAwMDAwMEFBCis6MTAzQjEwMDAwMjAwQTA4MDAwMDBBMDAwMDYwMEEwODQwMDAwMDAwNUI0Cis6MTAzQjIwMDAwMjAwQTA5ODBGRTAwMDAwMDYwMEEwOUMwMDAwMDAxNDE2Cis6MTAzQjMwMDAwMjAwQTBFQzU1NTQwMDAwMDIwMEEwRjA1NTU1NTU1NTY4Cis6MTAzQjQwMDAwMjAwQTBGNDAwMDA1NTU1MDIwMEEwRjhGMDAwMDAwMEFCCis6MTAzQjUwMDAwMjAwQTBGQzU1NTQwMDAwMDIwMEExMDA1NTU1NTU1NTI3Cis6MTAzQjYwMDAwMjAwQTEwNDAwMDA1NTU1MDIwMEExMDhGMDAwMDAwMDY5Cis6MTAzQjcwMDAwNjAwQTIyQzAwMDAwMDA0MDIwMEEwNjAwMDAwMDMwNzYxCis6MTAzQjgwMDAwMjAwQTEwQ0JGNUMwMDAwMDIwMEExMTBGRkY1MUZFRkI2Cis6MTAzQjkwMDAwMjAwQTExNDAwMDBGRkZGMDIwMEExMThGMDAwMDNFMEUyCis6MTAzQkEwMDAwMjAwQTExQzAwMDAwMDAwMDIwMEExMjAwMDAwQTAwMEYzCis6MTAzQkIwMDAwNjAwQTEyNDAwMDAwMDA1MDIwMEExMzgwRkUwMDAwMDZCCis6MTAzQkMwMDAwNjAwQTEzQzAwMDAwMDE0MDIwMEExOEM1NTU0MDAwMDI2Cis6MTAzQkQwMDAwMjAwQTE5MDU1NTU1NTU1MDIwMEExOTQwMDAwNTU1NTdECis6MTAzQkUwMDAwMjAwQTE5OEYwMDAwMDAwMDIwMEExOUM1NTU0MDAwMEMyCis6MTAzQkYwMDAwMjAwQTFBMDU1NTU1NTU1MDIwMEExQTQwMDAwNTU1NTNECis6MTAzQzAwMDAwMjAwQTFBOEYwMDAwMDAwMDYwMEEyM0MwMDAwMDAwNDkxCis6MTAzQzEwMDAwMjAwQTA2NDAwMDAwMzA3MDAwMDAwMDAwMDAwMDAwMDk0Cis6MTAzQzIwMDAwMDAwMDAyRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY2Cis6MTAzQzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg0Cis6MTAzQzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc0Cis6MTAzQzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY0Cis6MTAzQzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU0Cis6MTAzQzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRTAwNEQwMDAwMDAwMEM5Cis6MTAzQzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM0Cis6MTAzQzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI0Cis6MTAzQ0EwMDAwMDAwMDAwMDAwNEQwMDhCMDAwMDAwMDAwMDAwMDAwMDNDCis6MTAzQ0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTAzQ0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTAzQ0QwMDAwMDhCMDA5MDAwOTAwMDk0MDA5NDAwOTgwMDAwMDAwMDc5Cis6MTAzQ0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ0Cis6MTAzQ0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk4MDJERTRDCis6MTAzRDAwMDAwMkRFMDJFODAyRTgwMkYyMDAwMDAwMDAwMDAwMDAwMDBCCis6MTAzRDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEzCis6MTAzRDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkzCis6MTAzRDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgzCis6MTAzRDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDczCis6MTAzRDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYzCis6MTAzRDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUzCis6MTAzRDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQzCis6MTAzRDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMzCis6MTAzRDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIzCis6MTAzREEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEzCis6MTAzREIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzCis6MTAzREMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTAzREQwMDAwMDAwMDAwMDAwMDAwMDAwMDJGMjAyRkEwMDAwMDAwMEYzCis6MTAzREUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQzCis6MTAzREYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMzCis6MTAzRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIyCis6MTAzRTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEyCis6MTAzRTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkyCis6MTAzRTMwMDAwMkZBMDJGRjAyRkYwMzBBMDMwQTAzMTUwMDAwMDAwMDUyCis6MTAzRTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcyCis6MTAzRTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYyCis6MTAzRTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUyCis6MTAzRTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQyCis6MTAzRTgwMDAwMDAwMDAwMDAwMDAwMDAwMDMxNTAzMTYwMDAwMDAwMDAxCis6MTAzRTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIyCis6MTAzRUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyCis6MTAzRUIwMDAwMDAwMDAwMDAzMTYwMzU3MDAwMDAwMDAwMDAwMDAwMDhGCis6MTAzRUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYyCis6MTAzRUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTAzRUUwMDAwMzU3MDM3QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZBCis6MTAzRUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMyCis6MTAzRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzdCMDNCQjc1Cis6MTAzRjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEExCis6MTAzRjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkxCis6MTAzRjMwMDAwMDAwMDAwMDAwMDAwMDAwMDNCQjAzRjcwMDAwMDAwMEM5Cis6MTAzRjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcxCis6MTAzRjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYxCis6MTAzRjYwMDAwMDAwMDAwMDAzRjcwNDNEMDQzRDA0NTIwNDUyMDQ2N0JFCis6MTAzRjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQxCis6MTAzRjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMxCis6MTAzRjkwMDAwNDY3MDRFRDA0RUQwNEYyMDRGMjA0RjcwMDAwMDAwMEVECis6MTAzRkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExCis6MTAzRkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEY3MDRGODBBCis6MTAzRkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYxCis6MTAzRkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUxCis6MTAzRkUwMDAwMDAwMDAwMDAwMDAwMDAwMDRGODA1MEEwMDAwMDAwMEM2Cis6MTAzRkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MTA0MDEwMDAwMDAwMDAwMDA1MEEwNTFGMDUxRjA1MjIwNTIyMDUyNUQxCis6MTA0MDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkwCis6MTA0MDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwCis6MTA0MDQwMDAwNTI1MDU1NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVDCis6MTA0MDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwCis6MTA0MDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTU1MDVEQzE1Cis6MTA0MDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwCis6MTA0MDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwCis6MTA0MDkwMDAwMDAwMDAwMDAwMDAwMDAwMDVEQzA1RTMwNUUzMDVFNzgzCis6MTA0MEEwMDAwNUU3MDVFQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM0Cis6MTA0MEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCis6MTA0MEMwMDAwMDAwMDAwMDA1RUIwNjJCMDYyQjA2MzMwNjMzMDYzQkVCCis6MTA0MEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUwCis6MTA0MEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQwCis6MTA0MEYwMDAwNjNCMDY4ODA2ODgwNjk1MDY5NTA2QTIwMDAwMDAwMDg1Cis6MTA0MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA0MTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkEyMDZBRTQzCis6MTA0MTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGCis6MTA0MTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdGCis6MTA0MTQwMDAwMDAwMDAwMDAwMDAwMDAwMDZBRTA2QjQwMDAwMDAwMDAxCis6MTA0MTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVGCis6MTA0MTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRGCis6MTA0MTcwMDAwMDAwMDAwMDA2QjQwNkI3MDAwMDAwMDAwMDAwMDAwMEM4Cis6MTA0MTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGCis6MTA0MTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFGCis6MTA0MUEwMDAwNkI3MDZCRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGCis6MTA0MUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZGCis6MTA0MUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkJEMDZCRTY4Cis6MTA0MUQwMDAwNkJFMDZEMDA2RDAwNkUyMDAwMDAwMDAwMDAwMDAwMDg3Cis6MTA0MUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENGCis6MTA0MUYwMDAwMDAwMDAwMDAwMDAwMDAwMDZFMjA3NEYwMDAwMDAwMDgxCis6MTA0MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFFCis6MTA0MjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA0MjIwMDAwMDAwMDAwMDA3NEYwNzUwMDc1MDA3NjMwNzYzMDc3NjM5Cis6MTA0MjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdFCis6MTA0MjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZFCis6MTA0MjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVFCis6MTA0MjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRFCis6MTA0MjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNFCis6MTA0MjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJFCis6MTA0MjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFCis6MTA0MkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFCis6MTA0MkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZFCis6MTA0MkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVFCis6MTA0MkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERFCis6MTA0MkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENFCis6MTA0MkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJFCis6MTA0MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFECis6MTA0MzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlECis6MTA0MzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA0MzMwMDAwMDAxMDAwMDAwMDIwNEMwMDAwMzA5ODAwMDA0MEU0MEQ4Cis6MTA0MzQwMDAwMDA1MTMwMDAwMDYxN0MwMDAwNzFDODAwMDA4MjE0MDZDCis6MTA0MzUwMDAwMDA5MjYwMDAwMEEyQUMwMDAwQjJGODAwMDBDMzQ0MDAwCis6MTA0MzYwMDAwMDBEMzkwMDAwMEUzREMwMDAwRjQyODAwMDEwNDc0MDk0Cis6MTA0MzcwMDAwMDExNEMwMDAwMTI1MEMwMDAxMzU1ODAwMDE0NUE0MDI4Cis6MTA0MzgwMDAwMDE1NUYwMDAwMTY2M0MwMDAxNzY4ODAwMDE4NkQ0MEJDCis6MTA0MzkwMDAwMDE5NzIwMDAwMUE3NkMwMDAxQjdCODAwMDFDODA0MDUwCis6MTA0M0EwMDAwMDFEODUwMDAwMUU4OUMwMDAxRjhFODAwMDAwOTM0MDA0Cis6MTA0M0IwMDAwMDAwMjAwMDAwMDA0MDAwMDAwMDYwMDAwMDAwODAwMEJECis6MTA0M0MwMDAwMDAwQTAwMDAwMDBDMDAwMDAwMEUwMDAwMDAxMDAwMEFDCis6MTA0M0QwMDAwMDAxMjAwMDAwMDE0MDAwMDAwMTYwMDAwMDAxODAwMDk5Cis6MTA0M0UwMDAwMDAxQTAwMDAwMDFDMDAwMDAwMUUwMDAwMDAyMDAwMDg4Cis6MTA0M0YwMDAwMDAyMjAwMDAwMDI0MDAwMDAwMjYwMDAwMDAyODAwMDc1Cis6MTA0NDAwMDAwMDAyQTAwMDAwMDJDMDAwMDAwMkUwMDAwMDAzMDAwMDYzCis6MTA0NDEwMDAwMDAzMjAwMDAwMDM0MDAwMDAwMzYwMDAwMDAzODAwMDUwCis6MTA0NDIwMDAwMDAzQTAwMDAwMDNDMDAwMDAwM0UwMDAwMDA0MDAwMDNGCis6MTA0NDMwMDAwMDA0MjAwMDAwMDQ0MDAwMDAwNDYwMDAwMDA0ODAwMDJDCis6MTA0NDQwMDAwMDA0QTAwMDAwMDRDMDAwMDAwNEUwMDAwMDA1MDAwMDFCCis6MTA0NDUwMDAwMDA1MjAwMDAwMDU0MDAwMDAwNTYwMDAwMDA1ODAwMDA4Cis6MTA0NDYwMDAwMDA1QTAwMDAwMDVDMDAwMDAwNUUwMDAwMDA2MDAwMEY3Cis6MTA0NDcwMDAwMDA2MjAwMDAwMDY0MDAwMDAwNjYwMDAwMDA2ODAwMEU0Cis6MTA0NDgwMDAwMDA2QTAwMDAwMDZDMDAwMDAwNkUwMDAwMDA3MDAwMEQzCis6MTA0NDkwMDAwMDA3MjAwMDAwMDc0MDAwMDAwNzYwMDAwMDA3ODAwMEMwCis6MTA0NEEwMDAwMDA3QTAwMDAwMDdDMDAwMDAwN0UwMDAwMDA4MDAwMEFGCis6MTA0NEIwMDAwMDA4MjAwMDAwMDg0MDAwMDAwODYwMDAwMDA4ODAwMDlDCis6MTA0NEMwMDAwMDA4QTAwMDAwMDhDMDAwMDAwOEUwMDAwMDA5MDAwMDhCCis6MTA0NEQwMDAwMDA5MjAwMDAwMDk0MDAwMDAwOTYwMDAwMDA5ODAwMDc4Cis6MTA0NEUwMDAwMDA5QTAwMDAwMDlDMDAwMDAwOUUwMDAwMDBBMDAwMDY3Cis6MTA0NEYwMDAwMDBBMjAwMDAwMEE0MDAwMDAwQTYwMDAwMDBBODAwMDU0Cis6MTA0NTAwMDAwMDBBQTAwMDAwMEFDMDAwMDAwQUUwMDAwMDBCMDAwMDQyCis6MTA0NTEwMDAwMDBCMjAwMDAwMEI0MDAwMDAwQjYwMDAwMDBCODAwMDJGCis6MTA0NTIwMDAwMDBCQTAwMDAwMEJDMDAwMDAwQkUwMDAwMDBDMDAwMDFFCis6MTA0NTMwMDAwMDBDMjAwMDAwMEM0MDAwMDAwQzYwMDAwMDBDODAwMDBCCis6MTA0NTQwMDAwMDBDQTAwMDAwMENDMDAwMDAwQ0UwMDAwMDBEMDAwMEZBCis6MTA0NTUwMDAwMDBEMjAwMDAwMEQ0MDAwMDAwRDYwMDAwMDBEODAwMEU3Cis6MTA0NTYwMDAwMDBEQTAwMDAwMERDMDAwMDAwREUwMDAwMDBFMDAwMEQ2Cis6MTA0NTcwMDAwMDBFMjAwMDAwMEU0MDAwMDAwRTYwMDAwMDBFODAwMEMzCis6MTA0NTgwMDAwMDBFQTAwMDAwMEVDMDAwMDAwRUUwMDAwMDBGMDAwMEIyCis6MTA0NTkwMDAwMDBGMjAwMDAwMEY0MDAwMDAwRjYwMDAwMDBGODAwMDlGCis6MTA0NUEwMDAwMDBGQTAwMDAwMEZDMDAwMDAwRkUwMDAwMDEwMDAwMDhFCis6MTA0NUIwMDAwMDEwMjAwMDAwMTA0MDAwMDAxMDYwMDAwMDEwODAwMDdCCis6MTA0NUMwMDAwMDEwQTAwMDAwMTBDMDAwMDAxMEUwMDAwMDExMDAwMDZBCis6MTA0NUQwMDAwMDExMjAwMDAwMTE0MDAwMDAxMTYwMDAwMDExODAwMDU3Cis6MTA0NUUwMDAwMDExQTAwMDAwMTFDMDAwMDAxMUUwMDAwMDEyMDAwMDQ2Cis6MTA0NUYwMDAwMDEyMjAwMDAwMTI0MDAwMDAxMjYwMDAwMDEyODAwMDMzCis6MTA0NjAwMDAwMDEyQTAwMDAwMTJDMDAwMDAxMkUwMDAwMDEzMDAwMDIxCis6MTA0NjEwMDAwMDEzMjAwMDAwMTM0MDAwMDAxMzYwMDAwMDEzODAwMDBFCis6MTA0NjIwMDAwMDEzQTAwMDAwMTNDMDAwMDAxM0UwMDAwMDE0MDAwMEZECis6MTA0NjMwMDAwMDE0MjAwMDAwMTQ0MDAwMDAxNDYwMDAwMDE0ODAwMEVBCis6MTA0NjQwMDAwMDE0QTAwMDAwMTRDMDAwMDAxNEUwMDAwMDE1MDAwMEQ5Cis6MTA0NjUwMDAwMDE1MjAwMDAwMTU0MDAwMDAxNTYwMDAwMDE1ODAwMEM2Cis6MTA0NjYwMDAwMDE1QTAwMDAwMTVDMDAwMDAxNUUwMDAwMDE2MDAwMEI1Cis6MTA0NjcwMDAwMDE2MjAwMDAwMTY0MDAwMDAxNjYwMDAwMDE2ODAwMEEyCis6MTA0NjgwMDAwMDE2QTAwMDAwMTZDMDAwMDAxNkUwMDAwMDE3MDAwMDkxCis6MTA0NjkwMDAwMDE3MjAwMDAwMTc0MDAwMDAxNzYwMDAwMDE3ODAwMDdFCis6MTA0NkEwMDAwMDE3QTAwMDAwMTdDMDAwMDAxN0UwMDAwMDE4MDAwMDZECis6MTA0NkIwMDAwMDE4MjAwMDAwMTg0MDAwMDAxODYwMDAwMDE4ODAwMDVBCis6MTA0NkMwMDAwMDE4QTAwMDAwMThDMDAwMDAxOEUwMDAwMDE5MDAwMDQ5Cis6MTA0NkQwMDAwMDE5MjAwMDAwMTk0MDAwMDAxOTYwMDAwMDE5ODAwMDM2Cis6MTA0NkUwMDAwMDE5QTAwMDAwMTlDMDAwMDAxOUUwMDAwMDFBMDAwMDI1Cis6MTA0NkYwMDAwMDFBMjAwMDAwMUE0MDAwMDAxQTYwMDAwMDFBODAwMDEyCis6MTA0NzAwMDAwMDFBQTAwMDAwMUFDMDAwMDAxQUUwMDAwMDFCMDAwMDAwCis6MTA0NzEwMDAwMDFCMjAwMDAwMUI0MDAwMDAxQjYwMDAwMDFCODAwMEVECis6MTA0NzIwMDAwMDFCQTAwMDAwMUJDMDAwMDAxQkUwMDAwMDFDMDAwMERDCis6MTA0NzMwMDAwMDFDMjAwMDAwMUM0MDAwMDAxQzYwMDAwMDFDODAwMEM5Cis6MTA0NzQwMDAwMDFDQTAwMDAwMUNDMDAwMDAxQ0UwMDAwMDFEMDAwMEI4Cis6MTA0NzUwMDAwMDFEMjAwMDAwMUQ0MDAwMDAxRDYwMDAwMDFEODAwMEE1Cis6MTA0NzYwMDAwMDFEQTAwMDAwMURDMDAwMDAxREUwMDAwMDFFMDAwMDk0Cis6MTA0NzcwMDAwMDFFMjAwMDAwMUU0MDAwMDAxRTYwMDAwMDFFODAwMDgxCis6MTA0NzgwMDAwMDFFQTAwMDAwMUVDMDAwMDAxRUUwMDAwMDFGMDAwMDcwCis6MTA0NzkwMDAwMDFGMjAwMDAwMUY0MDAwMDAxRjYwMDAwMDFGODAwMDVECis6MTA0N0EwMDAwMDFGQTAwMDAwMUZDMDAwMDAxRkUwMDAwMDIwMDAwMDRDCis6MTA0N0IwMDAwMDIwMjAwMDAwMjA0MDAwMDAyMDYwMDAwMDIwODAwMDM5Cis6MTA0N0MwMDAwMDIwQTAwMDAwMjBDMDAwMDAyMEUwMDAwMDIxMDAwMDI4Cis6MTA0N0QwMDAwMDIxMjAwMDAwMjE0MDAwMDAyMTYwMDAwMDIxODAwMDE1Cis6MTA0N0UwMDAwMDIxQTAwMDAwMjFDMDAwMDAyMUUwMDAwMDIyMDAwMDA0Cis6MTA0N0YwMDAwMDIyMjAwMDAwMjI0MDAwMDAyMjYwMDAwMDIyODAwMEYxCis6MTA0ODAwMDAwMDIyQTAwMDAwMjJDMDAwMDAyMkUwMDAwMDIzMDAwMERGCis6MTA0ODEwMDAwMDIzMjAwMDAwMjM0MDAwMDAyMzYwMDAwMDIzODAwMENDCis6MTA0ODIwMDAwMDIzQTAwMDAwMjNDMDAwMDAyM0UwMDAwMDI0MDAwMEJCCis6MTA0ODMwMDAwMDI0MjAwMDAwMjQ0MDAwMDAyNDYwMDAwMDI0ODAwMEE4Cis6MTA0ODQwMDAwMDI0QTAwMDAwMjRDMDAwMDAyNEUwMDAwMDI1MDAwMDk3Cis6MTA0ODUwMDAwMDI1MjAwMDAwMjU0MDAwMDAyNTYwMDAwMDI1ODAwMDg0Cis6MTA0ODYwMDAwMDI1QTAwMDAwMjVDMDAwMDAyNUUwMDAwMDI2MDAwMDczCis6MTA0ODcwMDAwMDI2MjAwMDAwMjY0MDAwMDAyNjYwMDAwMDI2ODAwMDYwCis6MTA0ODgwMDAwMDI2QTAwMDAwMjZDMDAwMDAyNkUwMDAwMDI3MDAwMDRGCis6MTA0ODkwMDAwMDI3MjAwMDAwMjc0MDAwMDAyNzYwMDAwMDI3ODAwMDNDCis6MTA0OEEwMDAwMDI3QTAwMDAwMjdDMDAwMDAyN0UwMDAwMDI4MDAwMDJCCis6MTA0OEIwMDAwMDI4MjAwMDAwMjg0MDAwMDAyODYwMDAwMDI4ODAwMDE4Cis6MTA0OEMwMDAwMDI4QTAwMDAwMjhDMDAwMDAyOEUwMDAwMDI5MDAwMDA3Cis6MTA0OEQwMDAwMDI5MjAwMDAwMjk0MDAwMDAyOTYwMDAwMDI5ODAwMEY0Cis6MTA0OEUwMDAwMDI5QTAwMDAwMjlDMDAwMDAyOUUwMDAwMDJBMDAwMEUzCis6MTA0OEYwMDAwMDJBMjAwMDAwMkE0MDAwMDAyQTYwMDAwMDJBODAwMEQwCis6MTA0OTAwMDAwMDJBQTAwMDAwMkFDMDAwMDAyQUUwMDAwMDJCMDAwMEJFCis6MTA0OTEwMDAwMDJCMjAwMDAwMkI0MDAwMDAyQjYwMDAwMDJCODAwMEFCCis6MTA0OTIwMDAwMDJCQTAwMDAwMkJDMDAwMDAyQkUwMDAwMDJDMDAwMDlBCis6MTA0OTMwMDAwMDJDMjAwMDAwMkM0MDAwMDAyQzYwMDAwMDJDODAwMDg3Cis6MTA0OTQwMDAwMDJDQTAwMDAwMkNDMDAwMDAyQ0UwMDAwMDJEMDAwMDc2Cis6MTA0OTUwMDAwMDJEMjAwMDAwMkQ0MDAwMDAyRDYwMDAwMDJEODAwMDYzCis6MTA0OTYwMDAwMDJEQTAwMDAwMkRDMDAwMDAyREUwMDAwMDJFMDAwMDUyCis6MTA0OTcwMDAwMDJFMjAwMDAwMkU0MDAwMDAyRTYwMDAwMDJFODAwMDNGCis6MTA0OTgwMDAwMDJFQTAwMDAwMkVDMDAwMDAyRUUwMDAwMDJGMDAwMDJFCis6MTA0OTkwMDAwMDJGMjAwMDAwMkY0MDAwMDAyRjYwMDAwMDJGODAwMDFCCis6MTA0OUEwMDAwMDJGQTAwMDAwMkZDMDAwMDAyRkUwMDAwMDMwMDAwMDBBCis6MTA0OUIwMDAwMDMwMjAwMDAwMzA0MDAwMDAzMDYwMDAwMDMwODAwMEY3Cis6MTA0OUMwMDAwMDMwQTAwMDAwMzBDMDAwMDAzMEUwMDAwMDMxMDAwMEU2Cis6MTA0OUQwMDAwMDMxMjAwMDAwMzE0MDAwMDAzMTYwMDAwMDMxODAwMEQzCis6MTA0OUUwMDAwMDMxQTAwMDAwMzFDMDAwMDAzMUUwMDAwMDMyMDAwMEMyCis6MTA0OUYwMDAwMDMyMjAwMDAwMzI0MDAwMDAzMjYwMDAwMDMyODAwMEFGCis6MTA0QTAwMDAwMDMyQTAwMDAwMzJDMDAwMDAzMkUwMDAwMDMzMDAwMDlECis6MTA0QTEwMDAwMDMzMjAwMDAwMzM0MDAwMDAzMzYwMDAwMDMzODAwMDhBCis6MTA0QTIwMDAwMDMzQTAwMDAwMzNDMDAwMDAzM0UwMDAwMDM0MDAwMDc5Cis6MTA0QTMwMDAwMDM0MjAwMDAwMzQ0MDAwMDAzNDYwMDAwMDM0ODAwMDY2Cis6MTA0QTQwMDAwMDM0QTAwMDAwMzRDMDAwMDAzNEUwMDAwMDM1MDAwMDU1Cis6MTA0QTUwMDAwMDM1MjAwMDAwMzU0MDAwMDAzNTYwMDAwMDM1ODAwMDQyCis6MTA0QTYwMDAwMDM1QTAwMDAwMzVDMDAwMDAzNUUwMDAwMDM2MDAwMDMxCis6MTA0QTcwMDAwMDM2MjAwMDAwMzY0MDAwMDAzNjYwMDAwMDM2ODAwMDFFCis6MTA0QTgwMDAwMDM2QTAwMDAwMzZDMDAwMDAzNkUwMDAwMDM3MDAwMDBECis6MTA0QTkwMDAwMDM3MjAwMDAwMzc0MDAwMDAzNzYwMDAwMDM3ODAwMEZBCis6MTA0QUEwMDAwMDM3QTAwMDAwMzdDMDAwMDAzN0UwMDAwMDM4MDAwMEU5Cis6MTA0QUIwMDAwMDM4MjAwMDAwMzg0MDAwMDAzODYwMDAwMDM4ODAwMEQ2Cis6MTA0QUMwMDAwMDM4QTAwMDAwMzhDMDAwMDAzOEUwMDAwMDM5MDAwMEM1Cis6MTA0QUQwMDAwMDM5MjAwMDAwMzk0MDAwMDAzOTYwMDAwMDM5ODAwMEIyCis6MTA0QUUwMDAwMDM5QTAwMDAwMzlDMDAwMDAzOUUwMDAwMDNBMDAwMEExCis6MTA0QUYwMDAwMDNBMjAwMDAwM0E0MDAwMDAzQTYwMDAwMDNBODAwMDhFCis6MTA0QjAwMDAwMDNBQTAwMDAwM0FDMDAwMDAzQUUwMDAwMDNCMDAwMDdDCis6MTA0QjEwMDAwMDNCMjAwMDAwM0I0MDAwMDAzQjYwMDAwMDNCODAwMDY5Cis6MTA0QjIwMDAwMDNCQTAwMDAwM0JDMDAwMDAzQkUwMDAwMDNDMDAwMDU4Cis6MTA0QjMwMDAwMDNDMjAwMDAwM0M0MDAwMDAzQzYwMDAwMDNDODAwMDQ1Cis6MTA0QjQwMDAwMDNDQTAwMDAwM0NDMDAwMDAzQ0UwMDAwMDNEMDAwMDM0Cis6MTA0QjUwMDAwMDNEMjAwMDAwM0Q0MDAwMDAzRDYwMDAwMDNEODAwMDIxCis6MTA0QjYwMDAwMDNEQTAwMDAwM0RDMDAwMDAzREUwMDAwMDNFMDAwMDEwCis6MTA0QjcwMDAwMDNFMjAwMDAwM0U0MDAwMDAzRTYwMDAwMDNFODAwMEZECis6MTA0QjgwMDAwMDNFQTAwMDAwM0VDMDAwMDAzRUUwMDAwMDNGMDAwMEVDCis6MTA0QjkwMDAwMDNGMjAwMDAwM0Y0MDAwMDAzRjYwMDAwMDNGODAwMEQ5Cis6MTA0QkEwMDAwMDNGQTAwMDAwM0ZDMDAwMDAzRkUwMDAwMDNGRTAwMUU4Cis6MTA0QkIwMDAwMDAwMDAwMDAwMDAwMUZGMDAwMDAyMDAwMDAwN0ZGODdDCis6MTA0QkMwMDAwMDAwN0ZGODAwMDAwMTZBMDAwMDE1MDAwMDAwMDAwMUVECis6MTA0QkQwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMEQ3Cis6MTA0QkUwMDAwMDAwMDAwMDE0MEFGRjAwMDAwMDAwMDEwMDAwMDAwMEE3Cis6MTA0QkYwMDAwMDIwMTAwMTAwMDAwMDAwMDEwMDg2MDAwMDAwMDEwMEZDCis6MTA0QzAwMDAwMDAwODYwMjAwMDA4NjA0MDAwMDg2MDYwMDAwODYwODc4Cis6MTA0QzEwMDAwMDAwODYwQTAwMDA4NjBDMDAwMDg2MEUwMDAwODYxMDQ4Cis6MTA0QzIwMDAwMDAwODYxMjAwMDA4NjE0MDAwMDg2MTYwMDAwODYxODE4Cis6MTA0QzMwMDAwMDAwODYxQTAwMDA4NjFDMDAwMDg2MUUwMDAwODYyMEU4Cis6MTA0QzQwMDAwMDAwODYyMjAwMDA4NjI0MDAwMDg2MjYwMDAwODYyOEI4Cis6MTA0QzUwMDAwMDAwODYyQTAwMDA4NjJDMDAwMDg2MkUwMDAwODYzMDg4Cis6MTA0QzYwMDAwMDAwODYzMjAwMDA4NjM0MDAwMDg2MzYwMDAwODYzODU4Cis6MTA0QzcwMDAwMDAwODYzQTAwMDA4NjNDMDAwMDg2M0UwMDAwODY0MDI4Cis6MTA0QzgwMDAwMDAwODY0MjAwMDA4NjQ0MDAwMDg2NDYwMDAwODY0OEY4Cis6MTA0QzkwMDAwMDAwODY0QTAwMDA4NjRDMDAwMDg2NEUwMDAwODY1MEM4Cis6MTA0Q0EwMDAwMDAwODY1MjAwMDA4NjU0MDAwMDg2NTYwMDAwODY1ODk4Cis6MTA0Q0IwMDAwMDAwODY1QTAwMDA4NjVDMDAwMDg2NUUwMDAwODY2MDY4Cis6MTA0Q0MwMDAwMDAwODY2MjAwMDA4NjY0MDAwMDg2NjYwMDAwODY2ODM4Cis6MTA0Q0QwMDAwMDAwODY2QTAwMDA4NjZDMDAwMDg2NkUwMDAwODY3MDA4Cis6MTA0Q0UwMDAwMDAwODY3MjAwMDA4Njc0MDAwMDg2NzYwMDAwODY3OEQ4Cis6MTA0Q0YwMDAwMDAwODY3QTAwMDA4NjdDMDAwMDg2N0UwMDAwODY4MEE4Cis6MTA0RDAwMDAwMDAwODY4MjAwMDA4Njg0MDAwMDg2ODYwMDAwODY4ODc3Cis6MTA0RDEwMDAwMDAwODY4QTAwMDA4NjhDMDAwMDg2OEUwMDAwODY5MDQ3Cis6MTA0RDIwMDAwMDAwODY5MjAwMDA4Njk0MDAwMDg2OTYwMDAwODY5ODE3Cis6MTA0RDMwMDAwMDAwODY5QTAwMDA4NjlDMDAwMDg2OUUwMDAwODZBMEU3Cis6MTA0RDQwMDAwMDAwODZBMjAwMDA4NkE0MDAwMDg2QTYwMDAwODZBOEI3Cis6MTA0RDUwMDAwMDAwODZBQTAwMDA4NkFDMDAwMDg2QUUwMDAwODZCMDg3Cis6MTA0RDYwMDAwMDAwODZCMjAwMDA4NkI0MDAwMDg2QjYwMDAwODZCODU3Cis6MTA0RDcwMDAwMDAwODZCQTAwMDA4NkJDMDAwMDg2QkUwMDAwODZDMDI3Cis6MTA0RDgwMDAwMDAwODZDMjAwMDA4NkM0MDAwMDg2QzYwMDAwODZDOEY3Cis6MTA0RDkwMDAwMDAwODZDQTAwMDA4NkNDMDAwMDg2Q0UwMDAwODZEMEM3Cis6MTA0REEwMDAwMDAwODZEMjAwMDA4NkQ0MDAwMDg2RDYwMDAwODZEODk3Cis6MTA0REIwMDAwMDAwODZEQTAwMDA4NkRDMDAwMDg2REUwMDAwODZFMDY3Cis6MTA0REMwMDAwMDAwODZFMjAwMDA4NkU0MDAwMDg2RTYwMDAwODZFODM3Cis6MTA0REQwMDAwMDAwODZFQTAwMDA4NkVDMDAwMDg2RUUwMDAwODZGMDA3Cis6MTA0REUwMDAwMDAwODZGMjAwMDA4NkY0MDAwMDg2RjYwMDAwODZGOEQ3Cis6MTA0REYwMDAwMDAwODZGQTAwMDA4NkZDMDAwMDg2RkUwMDAwODcwMEE2Cis6MTA0RTAwMDAwMDAwODcwMjAwMDA4NzA0MDAwMDg3MDYwMDAwODcwODcyCis6MTA0RTEwMDAwMDAwODcwQTAwMDA4NzBDMDAwMDg3MEUwMDAwODcxMDQyCis6MTA0RTIwMDAwMDAwODcxMjAwMDA4NzE0MDAwMDg3MTYwMDAwODcxODEyCis6MTA0RTMwMDAwMDAwODcxQTAwMDA4NzFDMDAwMDg3MUUwMDAwODcyMEUyCis6MTA0RTQwMDAwMDAwODcyMjAwMDA4NzI0MDAwMDg3MjYwMDAwODcyOEIyCis6MTA0RTUwMDAwMDAwODcyQTAwMDA4NzJDMDAwMDg3MkUwMDAwODczMDgyCis6MTA0RTYwMDAwMDAwODczMjAwMDA4NzM0MDAwMDg3MzYwMDAwODczODUyCis6MTA0RTcwMDAwMDAwODczQTAwMDA4NzNDMDAwMDg3M0UwMDAwODc0MDIyCis6MTA0RTgwMDAwMDAwODc0MjAwMDA4NzQ0MDAwMDg3NDYwMDAwODc0OEYyCis6MTA0RTkwMDAwMDAwODc0QTAwMDA4NzRDMDAwMDg3NEUwMDAwODc1MEMyCis6MTA0RUEwMDAwMDAwODc1MjAwMDA4NzU0MDAwMDg3NTYwMDAwODc1ODkyCis6MTA0RUIwMDAwMDAwODc1QTAwMDA4NzVDMDAwMDg3NUUwMDAwODc2MDYyCis6MTA0RUMwMDAwMDAwODc2MjAwMDA4NzY0MDAwMDg3NjYwMDAwODc2ODMyCis6MTA0RUQwMDAwMDAwODc2QTAwMDA4NzZDMDAwMDg3NkUwMDAwODc3MDAyCis6MTA0RUUwMDAwMDAwODc3MjAwMDA4Nzc0MDAwMDg3NzYwMDAwODc3OEQyCis6MTA0RUYwMDAwMDAwODc3QTAwMDA4NzdDMDAwMDg3N0UwMDAwODc4MEEyCis6MTA0RjAwMDAwMDAwODc4MjAwMDA4Nzg0MDAwMDg3ODYwMDAwODc4ODcxCis6MTA0RjEwMDAwMDAwODc4QTAwMDA4NzhDMDAwMDg3OEUwMDAwODc5MDQxCis6MTA0RjIwMDAwMDAwODc5MjAwMDA4Nzk0MDAwMDg3OTYwMDAwODc5ODExCis6MTA0RjMwMDAwMDAwODc5QTAwMDA4NzlDMDAwMDg3OUUwMDAwODdBMEUxCis6MTA0RjQwMDAwMDAwODdBMjAwMDA4N0E0MDAwMDg3QTYwMDAwODdBOEIxCis6MTA0RjUwMDAwMDAwODdBQTAwMDA4N0FDMDAwMDg3QUUwMDAwODdCMDgxCis6MTA0RjYwMDAwMDAwODdCMjAwMDA4N0I0MDAwMDg3QjYwMDAwODdCODUxCis6MTA0RjcwMDAwMDAwODdCQTAwMDA4N0JDMDAwMDg3QkUwMDAwODdDMDIxCis6MTA0RjgwMDAwMDAwODdDMjAwMDA4N0M0MDAwMDg3QzYwMDAwODdDOEYxCis6MTA0RjkwMDAwMDAwODdDQTAwMDA4N0NDMDAwMDg3Q0UwMDAwODdEMEMxCis6MTA0RkEwMDAwMDAwODdEMjAwMDA4N0Q0MDAwMDg3RDYwMDAwODdEODkxCis6MTA0RkIwMDAwMDAwODdEQTAwMDA4N0RDMDAwMDg3REUwMDAwODdFMDYxCis6MTA0RkMwMDAwMDAwODdFMjAwMDA4N0U0MDAwMDg3RTYwMDAwODdFODMxCis6MTA0RkQwMDAwMDAwODdFQTAwMDA4N0VDMDAwMDg3RUUwMDAwODdGMDAxCis6MTA0RkUwMDAwMDAwODdGMjAwMDA4N0Y0MDAwMDg3RjYwMDAwODdGOEQxCis6MTA0RkYwMDAwMDAwODdGQTAwMDA4N0ZDMDAwMDg3RkVGRkZGRkZGRjJDCis6MTA1MDAwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkIwCis6MTA1MDEwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYwMDAwMDAwMzk5Cis6MTA1MDIwMDAwMEJFQkMyMDAwMDAwMDAwMDAwMDAwMDUwMDAwMDAwM0RFCis6MTA1MDMwMDAwMEJFQkMyMDAwMDAwMDAwMDAwMDAwMDUwMDAwMjAwMEIxCis6MTA1MDQwMDAwMDAwNDBDMDAwMDA2MTgwMDAwMDgyNDAwMDAwQTMwMDFBCis6MTA1MDUwMDAwMDAwQzNDMDAwMDBFNDgwMDAwMTA1NDAwMDAxMjYwMEZDCis6MTA1MDYwMDAwMDAxNDZDMDAwMDE2NzgwMDAwMTg4NDAwMDAxQTkwMERFCis6MTA1MDcwMDAwMDAxQzlDMDAwMDFFQTgwMDAwMjBCNDAwMDAyMkMwMEMwCis6MTA1MDgwMDAwMDAyNENDMDAwMDI2RDgwMDAwMjhFNDAwMDAyQUYwMEEyCis6MTA1MDkwMDAwMDAyQ0ZDMDAwMDJGMDgwMDAwMDExNDAwMDAwODAwMDNDCis6MTA1MEEwMDAwMDAxMDM4MDAwMDE4NzAwMDAwMjBBODAwMDAyOEUwMEQ4Cis6MTA1MEIwMDAwMDAzMTE4MDAwMDM5NTAwMDAwNDE4ODAwMDA0OUMwMDg4Cis6MTA1MEMwMDAwMDA1MUY4MDAwMDVBMzAwMDAwNjI2ODAwMDA2QUEwMDM4Cis6MTA1MEQwMDAwMDA3MkQ4MDAwMDdCMTAwMDAwODM0ODAwMDA4QjgwMEU4Cis6MTA1MEUwMDAwMDA5M0I4MDAwMDlCRjAwMDAwQTQyODAwMDBBQzYwMDk4Cis6MTA1MEYwMDAwMDBCNDk4MDAwMEJDRDAwMDAwQzUwODAwMDBDRDQwMDQ4Cis6MTA1MTAwMDAwMDBENTc4MDAwMDA1QjAwMDAwMDdGRjgwMDAwN0ZGODcyCis6MTA1MTEwMDAwMDAwMDE2NjAwMDAxNTAwMDAwMEZGMDAwMDAwMDAwMDE0Cis6MTA1MTIwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMDE5MDAwMDAwMDAwMDY3Cis6MTA1MTMwMDAwMDAwMDAwMEZGRkZGRkZGMDAwMDdGRjgwMDAwN0ZGODg1Cis6MTA1MTQwMDAwMDAwMDM2MTAwMDAxNTAwMDAwMEZGMDAwRkZGRkZGRkRCCis6MTA1MTUwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDQ2Cis6MTA1MTYwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjI5Cis6MTA1MTcwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjE5Cis6MTA1MTgwMDAwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDE2Cis6MTA1MTkwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwRkZGRkZGRkY5Cis6MTA1MUEwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMEY2Cis6MTA1MUIwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRkQ5Cis6MTA1MUMwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRkM5Cis6MTA1MUQwMDAwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMEM2Cis6MTA1MUUwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwRkZGRkZGRkE5Cis6MTA1MUYwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMEE2Cis6MTA1MjAwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjg4Cis6MTA1MjEwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjc4Cis6MTA1MjIwMDAwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDc1Cis6MTA1MjMwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwRkZGRkZGRjU4Cis6MTA1MjQwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDU1Cis6MTA1MjUwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjM4Cis6MTA1MjYwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjI4Cis6MTA1MjcwMDAwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDI1Cis6MTA1MjgwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwRkZGRkZGRjA4Cis6MTA1MjkwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDA1Cis6MTA1MkEwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRkU4Cis6MTA1MkIwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRkQ4Cis6MTA1MkMwMDAwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMEQ1Cis6MTA1MkQwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwRkZGRkZGRkI4Cis6MTA1MkUwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMEI1Cis6MTA1MkYwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjk4Cis6MTA1MzAwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjg3Cis6MTA1MzEwMDAwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDg0Cis6MTA1MzIwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwRkZGRkZGRjY3Cis6MTA1MzMwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDY0Cis6MTA1MzQwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjQ3Cis6MTA1MzUwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjM3Cis6MTA1MzYwMDAwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDM0Cis6MTA1MzcwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwRkZGRkZGRjE3Cis6MTA1MzgwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDE0Cis6MTA1MzkwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRkY3Cis6MTA1M0EwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRkU3Cis6MTA1M0IwMDAwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMEU0Cis6MTA1M0MwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMDAwRkYwMDAwMDBGRkQ0Cis6MTA1M0QwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMENGCis6MTA1M0UwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkNECis6MTA1M0YwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkJECis6MTA1NDAwMDAwMDAwMTAwMDAwMDAyMDgwMDAwMDMxMDAwMDAwNDE4MEZBCis6MTA1NDEwMDAwMDAwNTIwMDAwMDA2MjgwMDAwMDczMDAwMDAwODM4MEUyCis6MTA1NDIwMDAwMDAwOTQwMDAwMDBBNDgwMDAwMEI1MDAwMDAwQzU4MENBCis6MTA1NDMwMDAwMDAwRDYwMDAwMDBFNjgwMDAwMEY3MDAwMDAxMDc4MEIxCis6MTA1NDQwMDAwMDAxMTgwMDAwMDEyODgwMDAwMTM5MDAwMDAxNDk4MDk2Cis6MTA1NDUwMDAwMDAxNUEwMDAwMDE2QTgwMDAwMTdCMDAwMDAxOEI4MDdFCis6MTA1NDYwMDAwMDAxOUMwMDAwMDFBQzgwMDAwMUJEMDAwMDAxQ0Q4MDY2Cis6MTA1NDcwMDAwMDAxREUwMDAwMDFFRTgwMDAwMDBGMDAwMDAwMDAwMENGCis6MTA1NDgwMDAwMDAwN0ZGODAwMDA3RkY4MDAwMDAyMUQwMDAwMTUwMEZBCis6MTA1NDkwMDAxMDAwMDAwMDAwMDAyOEFEMDAwMTAwMDFGRkZGRkZGRjI5Cis6MTA1NEEwMDBGRkZGRkZGRjAwMDUwMjA2Q0NDQ0NDQzE3MDU4MTAzQ0JBCis6MTA1NEIwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMEVFCis6MTA1NEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFDQ0NDMDIwMTQwCis6MTA1NEQwMDBDQ0NDQ0NDQ0NDQ0MwMjAxQ0NDQ0NDQ0MwMDAwMDAwMEQxCis6MTA1NEUwMDBGRkZGRkZGRjAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRkM0Cis6MTA1NEYwMDAwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRkIwCis6MTA1NTAwMDAwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjlGCis6MTA1NTEwMDAwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjhGCis6MTA1NTIwMDAwMDAwMDAwMDAwMEUwMDAwMDExNjAwRDYwMDAwRkZGRjgyCis6MTA1NTMwMDAwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjZGCis6MTA1NTQwMDAwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjVGCis6MTA1NTUwMDAwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjRGCis6MTA1NTYwMDAwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAwMDcyMDAwMENCCis6MTA1NTcwMDAwMTIzMDBGM0ZGRkZGRkYzMzE4RkZGRkYwQzMwQzMwQzVCCis6MTA1NTgwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDAwQ0YzQzVGCis6MTA1NTkwMDBDRENEQ0RDREZGRkZGRkYxMzBFRkZGRkYwQzMwQzMwQ0MxCis6MTA1NUEwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDAxQ0YzQzNFCis6MTA1NUIwMDBDRENEQ0RDREZGRkZGRkY2MzA1RkZGRkYwQzMwQzMwQzJDCis6MTA1NUMwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDAyQ0YzQzFECis6MTA1NUQwMDBDRENEQ0RDREZGRkZGNDA2MUNCRkZGRkYwQzMwQzMwNUMyCis6MTA1NUUwMDBDMzBDMzBDM0NGMzAwMDE0RjNDRjNDRjMwMDA0Q0YzQ0U2Cis6MTA1NUYwMDBDRENEQ0RDREZGRkZGRkYyMzA0RkZGRkYwQzMwQzMwQzAwCis6MTA1NjAwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDA4Q0YzQ0Q2Cis6MTA1NjEwMDBDRENEQ0RDREZGRkZGRkZBMzAyRkZGRkYwQzMwQzMwQ0Y3Cis6MTA1NjIwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDEwQ0YzQ0FFCis6MTA1NjMwMDBDRENEQ0RDREZGRkZGRkY3MzFFRkZGRkYwQzMwQzMwQzE5Cis6MTA1NjQwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDIwQ0YzQzdFCis6MTA1NjUwMDBDRENEQ0RDREZGRkZGRkY1MzAyRkZGRkYwQzMwQzMwQ0JDCis6MTA1NjYwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDQwQ0YzQzNFCis6MTA1NjcwMDBDRENEQ0RDREZGRkZGRkYzMzE4RkZGRkYwQzMwQzMwQzNECis6MTA1NjgwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDAwQ0YzQzVFCis6MTA1NjkwMDBDRENEQ0RDREZGRkZGRkYxMzEwRkZGRkYwQzMwQzMwQzlGCis6MTA1NkEwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDAxQ0YzQzNECis6MTA1NkIwMDBDRENEQ0RDREZGRkZGRkY2MzA1RkZGRkYwQzMwQzMwQzJCCis6MTA1NkMwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDAyQ0YzQzFDCis6MTA1NkQwMDBDRENEQ0RDREZGRkZGNDA2MUNCRkZGRkYwQzMwQzMwNUMxCis6MTA1NkUwMDBDMzBDMzBDM0NGMzAwMDE0RjNDRjNDRjMwMDA0Q0YzQ0U1Cis6MTA1NkYwMDBDRENEQ0RDREZGRkZGRkYyMzA0RkZGRkYwQzMwQzMwQ0ZGCis6MTA1NzAwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDA4Q0YzQ0Q1Cis6MTA1NzEwMDBDRENEQ0RDREZGRkZGRkZBMzAyRkZGRkYwQzMwQzMwQ0Y2Cis6MTA1NzIwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDEwQ0YzQ0FECis6MTA1NzMwMDBDRENEQ0RDREZGRkZGRkY3MzBFRkZGRkYwQzMwQzMwQzE5Cis6MTA1NzQwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDIwQ0YzQzdECis6MTA1NzUwMDBDRENEQ0RDREZGRkZGRkY1MzA0RkZGRkYwQzMwQzMwQzlCCis6MTA1NzYwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDQwQ0YzQzNECis6MTA1NzcwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQ0YxCis6MTA1NzgwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDAwQ0YzQzkxCis6MTA1NzkwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQ0QxCis6MTA1N0EwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDAxQ0YzQzcwCis6MTA1N0IwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQ0IxCis6MTA1N0MwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDAyQ0YzQzRGCis6MTA1N0QwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQzkxCis6MTA1N0UwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDA0Q0YzQzJECis6MTA1N0YwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQzcxCis6MTA1ODAwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDA4Q0YzQzA4Cis6MTA1ODEwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQzUwCis6MTA1ODIwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDEwQ0YzQ0UwCis6MTA1ODMwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQzMwCis6MTA1ODQwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDIwQ0YzQ0IwCis6MTA1ODUwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQzEwCis6MTA1ODYwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDQwQ0YzQzcwCis6MTA1ODcwMDBDRENEQ0RDREZGRkZGRkYzMzIwRkZGRkYwQzMwQzMwQ0JBCis6MTA1ODgwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDAwQ0YzQzVDCis6MTA1ODkwMDBDRENEQ0RDREZGRkZGRkYxMzEwRkZGRkYwQzMwQzMwQzlECis6MTA1OEEwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDAxQ0YzQzNCCis6MTA1OEIwMDBDRENEQ0RDREZGRkZGRkY2MzA1RkZGRkYwQzMwQzMwQzI5Cis6MTA1OEMwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDAyQ0YzQzFBCis6MTA1OEQwMDBDRENEQ0RDREZGRkZGNDA2MUNCRkZGRkYwQzMwQzMwNUJGCis6MTA1OEUwMDBDMzBDMzBDM0NGMzAwMDE0RjNDRjNDRjMwMDA0Q0YzQ0UzCis6MTA1OEYwMDBDRENEQ0RDREZGRkZGRkYyMzA0RkZGRkYwQzMwQzMwQ0ZECis6MTA1OTAwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDA4Q0YzQ0QzCis6MTA1OTEwMDBDRENEQ0RDREZGRkZGRjhBMDQyRkZGRkYwQzMwQzMwQzkwCis6MTA1OTIwMDBDMzBDMzBDM0NGM0NDMDAwRjNDRjNDRjMwMDEwQ0YzQ0RFCis6MTA1OTMwMDBDRENEQ0RDREZGRkZGRjk3MDVDRkZGRkYwQzMwQzMwQ0MyCis6MTA1OTQwMDBDMzBDMzBDM0NGM0NDMDAwRjNDRjNDRjMwMDIwQ0YzQ0FFCis6MTA1OTUwMDBDRENEQ0RDREZGRkZGRkY1MzEwRkZGRkYwQzMwQzMwQ0Q4Cis6MTA1OTYwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDQwQ0YzQzNCCis6MTA1OTcwMDBDRENEQ0RDREZGRkZGRkYzMzAwRkZGRkYwQzMwQzMwQ0JCCis6MTA1OTgwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDAwQ0YzQzVCCis6MTA1OTkwMDBDRENEQ0RDREZGRkZGRkYxMzAwRkZGRkYwQzMwQzMwQzlECis6MTA1OUEwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDAxQ0YzQzNBCis6MTA1OUIwMDBDRENEQ0RDREZGRkZGRkY2MzA1RkZGRkYwQzMwQzMwQzI4Cis6MTA1OUMwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDAyQ0YzQzE5Cis6MTA1OUQwMDBDRENEQ0RDREZGRkZGNDA2MUNCRkZGRkYwQzMwQzMwNUJFCis6MTA1OUUwMDBDMzBDMzBDM0NGMzAwMDE0RjNDRjNDRjMwMDA0Q0YzQ0UyCis6MTA1OUYwMDBDRENEQ0RDREZGRkZGRkYyMzA0RkZGRkYwQzMwQzMwQ0ZDCis6MTA1QTAwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDA4Q0YzQ0QyCis6MTA1QTEwMDBDRENEQ0RDREZGRkZGRkZBMzAyRkZGRkYwQzMwQzMwQ0YzCis6MTA1QTIwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDEwQ0YzQ0FBCis6MTA1QTMwMDBDRENEQ0RDREZGRkZGRjk3MDQwRkZGRkYwQzMwQzMwQzgyCis6MTA1QTQwMDBDMzBDMzBDM0NGM0NDMDAwRjNDRjNDRjMwMDIwQ0YzQ0FECis6MTA1QTUwMDBDRENEQ0RDREZGRkZGRkY1MzAwRkZGRkYwQzMwQzMwQ0Q4Cis6MTA1QTYwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDQwQ0YzQzNBCis6MTA1QTcwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQ0VFCis6MTA1QTgwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDAwQ0YzQzhFCis6MTA1QTkwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQ0NFCis6MTA1QUEwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDAxQ0YzQzZECis6MTA1QUIwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQ0FFCis6MTA1QUMwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDAyQ0YzQzRDCis6MTA1QUQwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQzhFCis6MTA1QUUwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDA0Q0YzQzJBCis6MTA1QUYwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQzZFCis6MTA1QjAwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDA4Q0YzQzA1Cis6MTA1QjEwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQzRECis6MTA1QjIwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDEwQ0YzQ0RECis6MTA1QjMwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQzJECis6MTA1QjQwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDIwQ0YzQ0FECis6MTA1QjUwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQzBECis6MTA1QjYwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDQwQ0YzQzZECis6MTA1QjcwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQ0VECis6MTA1QjgwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDAwQ0YzQzhECis6MTA1QjkwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQ0NECis6MTA1QkEwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDAxQ0YzQzZDCis6MTA1QkIwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQ0FECis6MTA1QkMwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDAyQ0YzQzRCCis6MTA1QkQwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQzhECis6MTA1QkUwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDA0Q0YzQzI5Cis6MTA1QkYwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQzZECis6MTA1QzAwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDA4Q0YzQzA0Cis6MTA1QzEwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQzRDCis6MTA1QzIwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDEwQ0YzQ0RDCis6MTA1QzMwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQzJDCis6MTA1QzQwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDIwQ0YzQ0FDCis6MTA1QzUwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQzBDCis6MTA1QzYwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDQwQ0YzQzZDCis6MTA1QzcwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQ0VDCis6MTA1QzgwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDAwQ0YzQzhDCis6MTA1QzkwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQ0NDCis6MTA1Q0EwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDAxQ0YzQzZCCis6MTA1Q0IwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQ0FDCis6MTA1Q0MwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDAyQ0YzQzRBCis6MTA1Q0QwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQzhDCis6MTA1Q0UwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDA0Q0YzQzI4Cis6MTA1Q0YwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQzZDCis6MTA1RDAwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDA4Q0YzQzAzCis6MTA1RDEwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQzRCCis6MTA1RDIwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDEwQ0YzQ0RCCis6MTA1RDMwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQzJCCis6MTA1RDQwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDIwQ0YzQ0FCCis6MTA1RDUwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQzBCCis6MTA1RDYwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDQwQ0YzQzZCCis6MTA1RDcwMDBDRENEQ0RDRDAwMEMwMDAwMDAwNzAwQzAwMDAyODEzMDY5Cis6MTA1RDgwMDAwMDBCODE1ODAwMDIwMjEwMDAwMTAyMzAwMDBGMDI0MDk3Cis6MTA1RDkwMDAwMDAxMDMzMDAwMEMwMDAwMDAwODAwQzAwMDAyODE0MDM4Cis6MTA1REEwMDAwMDBCODE2ODAwMDIwMjIwMDAwMTAyNDAwMDA3MDI1MDNGCis6MTA1REIwMDAwMDAyMDJDMDAwMTAwMDAwMDAwODAxMDAwMDAyODE4MDAzCis6MTA1REMwMDAwMDBCODFBODAwMDIwMjYwMDAwMTgyODAwMDBFODI5ODEwCis6MTA1REQwMDAwMDA4MDM4MDAwMDI4MDAwMDAwQjgwMjgwMDAyMDBFMDIxCis6MTA1REUwMDAwMDAxMDEwMDAwMDA4MTEwMDAwMDAxMThDQ0NDQ0NDQ0Q3Cis6MTA1REYwMDBDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0MwMDAwMjAwMEYzCis6MTA1RTAwMDBDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0QyCis6MTA1RTEwMDAwMDAwMjAwMENDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0QyCis6MTA1RTIwMDBDQ0NDQ0NDQzAwMDAyMDAwMDAwMDAwMDAwMDAwMDAwMDIyCis6MTA1RTMwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkZCNTFDRkMwRjAwM0Q3Cis6MTA1RTQwMDA4QUJCNTgxOTE4MDIzODEwN0M3QUUwQTU4Qzk0RTlERkQ3Cis6MTA1RTUwMDBDOENDQzBCMDAzODhBRjAyRjE3RTY2RDJGNUIzNEEyMzQ2Cis6MTA1RTYwMDBEOEY3MjQxODE4MTgyNDE5MTg0RTg5MzEzMEVDOTI0NEE4Cis6MTA1RTcwMDA4OEU3MDJENTA4NEEzMTMwREM4NThBMDUwMEQ5NjdBNTU0Cis6MTA1RTgwMDBFODFCNEVBMzk4MzZGOEJCM0EyQUZGOTEyQTg0Q0U4N0E2Cis6MTA1RTkwMDA4OUEzQzkzRjg2Q0E2RjU0ODBEMDNGRDVCMTlCQkIwOTQ3Cis6MTA1RUEwMDAyQTBGMDBGRTY5NEY2NzYwMDMwMDAwMDAwMDAwMDAwMDM5Cis6MTA1RUIwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkVEN0QwQjc4NTRENTBGCis6MTA1RUMwMDBCOUU4REFDRkQ5MzM5OTRDNzY0MjQyMjYxMDcwMDcwM0VECis6MTA1RUQwMDAwNDBEMzAyMDhGQTg1NDI3RTFEMUUwRTVFOEYwNDYyRUVDCis6MTA1RUUwMDBDQTgwQUYwODkyNDQ4RDM1NkQzOTM3M0I2NDEyMDIwMjg3Cis6MTA1RUYwMDA4RUNBQTFCNEE1M0EyMDdBQTI0N0RCRDQ0NjRCN0JGNUUzCis6MTA1RjAwMDBEQzIwNkE3M0RBRDM3QjkxNTJBNTJEQjY0MTNEMjgxNjY5Cis6MTA1RjEwMDA2OEY0OTQwM0JERDc5NkJCRkU3RkFEM0REOTdCNjcyNjYxCis6MTA1RjIwMDAwRjVGREYzOTVGMUIzRURENTk3QkFGQkRENkJGRkVGNzhDCis6MTA1RjMwMDBGQUZGN0ZFREE4QTI0MkQ0NEIwOEI5MDgzRkQ3MTJCMkFFCis6MTA1RjQwMDA0RTIwODRFNEY1NUVBREZCNDQ4QjU2OTM1QzQyQUE4MkZFCis6MTA1RjUwMDBBQUIxOTUzRTVCMkY4NThEQzY2OUY0RkUyNTYyRTgwOURFCis6MTA1RjYwMDAwMkY3QzdDRDIxOTMwODUxRTBCRDAyNDJBNkMyRkZBNkE5Cis6MTA1RjcwMDAxMzIyRTdCNDBFOEZGQUU5M0Q2OTU1MTY1Q0FERjFBQzFBCis6MTA1RjgwMDA2Qjk1NEM4ODNFMTU5RTZGMUI5N0VBNzk3MkZFODREMjAyCis6MTA1RjkwMDBEM0FEMTFGQ0I5Mzg4NjkwRkFFMzM3Q0U3RkM1NkFEMzBBCis6MTA1RkEwMDBGRjQ2OTJDQ0RDOTM5N0QzNUY2NjkyOTkxNzI1NDIzRUM5Cis6MTA1RkIwMDAyQTVDOTRENTY5QTQxRkVGODM4NjJFNUQxRTRCQzhGOTE5Cis6MTA1RkMwMDA4NjE1RjM1RjE5REJGN0Y5N0E4OUQ0QjY5N0Y2QkQ3RkFBCis6MTA1RkQwMDAxNUQxMTAyRjQ0MzNENUM4QzRERTc1QUYyN0E0RDM5MzkxCis6MTA1RkUwMDA0M0M4RTZDMjRENkNCREI5MTQ1OTU3RDJGQjZERkZBMjMwCis6MTA1RkYwMDBDQjI1QkQ3MEFFOTc2OUJGQTk3REQ3NDM4ODg5RTM1QTg5Cis6MTA2MDAwMDBFMzI0REY0Rjc0MzlERTc3QkY5NzFDOEZCRjRGNjRGQUVDCis6MTA2MDEwMDA2RjA2MjFEODg1QUU3RkJBMTBCRDE2RUU3QjBBMTc5OUEwCis6MTA2MDIwMDAyMzY4N0JGRDMzRTUyNDVBOUExRUZFMjRCRDNFMjFGQ0U1Cis6MTA2MDMwMDBENjdCNjlFOUM4RkI3REI0QkZBOTg1RDBGNzRFQUFGMTJDCis6MTA2MDQwMDBFQkFGQTI3Q0Y0REVGN0E1RDAyNkUwQTMzREUzRTc5MDFBCis6MTA2MDUwMDAwMEJENEYxODFGNTk3NDNBQjVCRjY5NzgyQUZFNDg0N0VBCis6MTA2MDYwMDBBN0JGMjc1RUU0M0Y4QkJGQUFDNDU1NTk5REU0OTNGM0I1Cis6MTA2MDcwMDBENzFEQzA1RjE5MzZGRTZBNUZEQ0VGNzg5Rjk0QkY2MjYwCis6MTA2MDgwMDA2RUZFRTJGODM4RERDRUQ2NEY3NjBGNjM3NEUxRjQ3MjFGCis6MTA2MDkwMDBEMzI3MkQ1RDNFRTk3QjdERjk2OTBCRTBENUQzQkVEOEQyCis6MTA2MEEwMDAxQzQxNTJGMDEzODdEN0EyRDdBNzg1NzcyMDNFMjIyNDIwCis6MTA2MEIwMDA4RTc0MjYyNDIyQzFGQ0JERjdEOTM1QTNDQzEwODBDRjI1Cis6MTA2MEMwMDA2OEYzMzBBQzIzQzhBNjIyQzE1QjVCRUUxNjI5OUMwMUE1Cis6MTA2MEQwMDA5MjY4MUQ1NzQ0REJERDZCMTYwMERDODFFM0YzNEY4MUQyCis6MTA2MEUwMDAzQzM0ODcyQUI0RDk3NEJERkEzNEUzQTE3OUY0OUE1MUM3Cis6MTA2MEYwMDBBQTBCQjA5RUFENDQwNDI1NDBDN0FCMzZDQjRCODE1RUE2Cis6MTA2MTAwMDAwNERCNEY5QkI3ODQ0REMwMDMwOTEzMzI5QzkwRkJGODBFCis6MTA2MTEwMDA5QTA4MTEwRDk5QjY1NUY4NzU0Q0FBNzVBOEE0OTNFMTgzCis6MTA2MTIwMDA0M0I4RThFOUZCN0VCQUY1QUJCREVGOTE4QjQ1RjBGRkQ0Cis6MTA2MTMwMDA3QjA4QUM2RkEwRjc0ODk0QkQ2N0QyN0Y4MEVGMUNENzc3Cis6MTA2MTQwMDAzOEZBMUNEQUI2RjE3RDgwRDhEQUY0Rjk1MUY4MDVGMUE1Cis6MTA2MTUwMDA3REY3MTczMjVGMzZEOUE3MTk1NDNGQTgyNUEyOUU4MDM0Cis6MTA2MTYwMDBGRUM0Qzg5NjY5M0JBMzkyMkEyMjc4MUUyNDA3Mjk0NUJCCis6MTA2MTcwMDAwNkE0NEIzMzIxOTVFREMwOEZBNDlEMkM5Q0Q4MEJERjNBCis6MTA2MTgwMDAyOTIyRTA3QTBBNkVERkI5QTY4NUFBQUU3MzY1RkUxMEYxCis6MTA2MTkwMDBGMDc5NTAyNzY0NTg0RURGRjU2QzZCQTA4QzNDREVENjRFCis6MTA2MUEwMDAwRTNEODdGQzFGQTM3QzM0ODZCRTZGODY5ODNEREM1QTZCCis6MTA2MUIwMDBGMkIyMUVCNUM5Nzc4NjIwNzBCRTc0RjMwNzMxRTQxOUI4Cis6MTA2MUMwMDAyMDY2QzAyQUY0NUEyMjg2QkQ4MTRGQ0YxRkIyMEI4RkEyCis6MTA2MUQwMDA4M0U1MEY3RkQ0NDYxRjMyNzQ3QTA1QjlERjMwNThGRTRECis6MTA2MUUwMDBGOEI0RjM1OTc0RUQyQjU3OEQxNjVEMzU0MkU5QjBBNTFGCis6MTA2MUYwMDA3ODUxNEFGRjIzM0Q1REY3MTFFODlGNTE0MkMyODkxNDRGCis6MTA2MjAwMDBFRjhEMTIwNDJFMDdBNjQzREZFMDk1RDI0NzRBOTJGNzlFCis6MTA2MjEwMDA1RTA3QkRBNEZDMTkyQkY2RjY4MzBGMjlENzg5MEY2QkY3Cis6MTA2MjIwMDA1QzZGQkQ2NEJDNEI1NTIyOTE3NTExQzY1MzYxM0NDQTZECis6MTA2MjMwMDBBNzVCODIwRjlCODRDQUMzMzlFMDZEOEEwRjI5M0VBNUY0Cis6MTA2MjQwMDAxM0RBQTQ5ODIwMUZEMjlGNEU4MUI2QkRDMTcwNjIyQjc1Cis6MTA2MjUwMDBGMjQxMDJFOTYyQzFFNzMxNDQwNzdFRTU1QzlGQTM0RDRDCis6MTA2MjYwMDA1Njk4ODIxRDdFNkZCRDhBNzBBOEU4MjNEMDcxNzQzQTVCCis6MTA2MjcwMDAyMDQ1ODVFQzI3OURDMEI3MTZCRjAyMUI1Q0JDMTREQTE1Cis6MTA2MjgwMDA1Rjc3RjA0MUFCMzE5NUE0QTI4M0M1QUY4MDU2QzZBRjBFCis6MTA2MjkwMDA1RjFGOUM3RTcxQ0ZCN0M0MDlFRkEwREZGM0NCQzY0OTY3Cis6MTA2MkEwMDA5QjFENEFGRjlFNEM0RTVBRjRBMTQ4QUM4MjAxNkM3QzY3Cis6MTA2MkIwMDBCMDU5MjEwNzg0Qzk4NDM0MTUyRTIzNTE3QTc3MzMzQzkxCis6MTA2MkMwMDBBMjc2QUMwNUFFMDVFMDFGNEU0NUJENDBEQTA0MTlFMEVDCis6MTA2MkQwMDBCNEVDMkEwOUU2NjBCRkU5ODI4MUUzODk1QTJERUExNTA4Cis6MTA2MkUwMDBDOTFGNjZGNjk1M0Y0RjBGMTc5QjdGQjgxMTBGRUIxNDMwCis6MTA2MkYwMDBCRkY5MjQxRTE2Mjk3REE4QUUwQzc1MTJEMDlCNjEwMjMxCis6MTA2MzAwMDA3QzQwNDI4QzJGMjRFRUE3NUJFRkM3MzgzRjdCQzk1MUZFCis6MTA2MzEwMDA3QzlGNkE1NzUzNDc3QkU2OTRFM0I5MTI3RDQ4QzdEOUZGCis6MTA2MzIwMDA1MjQyMTIxRUE0NTM1QzgzQjY1QzIyMTNEODE3NTBGRDUwCis6MTA2MzMwMDBFNDJGQTBGREIzMkNGNjk3MTY4NDAwRkUyQzZFNUZDOUU3Cis6MTA2MzQwMDAyQ0NFREYwMkQ1NjcxNENGRkU2OTRFRjlGNkI5RTQ1RkIzCis6MTA2MzUwMDBFNkY2Qjg4RjNFNEJCMzlGQjBBRTZFRkZFRDMxODFGQkRBCis6MTA2MzYwMDA2RjE5QzQ4RkY0RTZFRjEzN0Y2QTdGRDVGMkRCMkNCQzg0Cis6MTA2MzcwMDBFNjg5MDRGMTQ5N0VBQTI0OUUyOEUyNkJBM0VEN0JERTI4Cis6MTA2MzgwMDBDQTRFQzBCQUNEOEFDODlBNjY4QTA3RjM2RDIxRDQwNDcyCis6MTA2MzkwMDBGNDk0QzMzRDU5RjRGOUM5MjcyNURDMkZFNTJEQUJCRjkzCis6MTA2M0EwMDAwNEU2REJERTYwOEUyREI2Rjk4M0RCRTU1QTBERjA0RDk5Cis6MTA2M0IwMDBGOTQyQjNEQjhCMUI0OEY0MDVDMUI2RkZGMjA0NUJDNkEwCis6MTA2M0MwMDAxNjBGNDNGRTdCQkJCQjA0NEM4NTgwRkNFN0Y1Qzc4MjAwCis6MTA2M0QwMDBBRjgyNUNGMkZCNDlGQ0Q4REI1MkRGNzY2RTNFRTFGNjIxCis6MTA2M0UwMDBGMjg2RjIzMDlEQjcxNTc0RDcwODdDNkMwQTE0OUVENkRECis6MTA2M0YwMDAwMkQ2RkU0OUUzRjA3MkIwOUZBRDk5QUNGRDUxRTMzQjhDCis6MTA2NDAwMDBFMTQ2RTQ4QkE4MTZBMUY3RUEwOUM3NEIxN0M1MEJEMkUyCis6MTA2NDEwMDBERkM4QjdEQjU3RjdENUJERkUxREIyRUUwMzNFREJFQkExCis6MTA2NDIwMDBDRkI5QUUwNEVDNjc5OTE4MDJCNEVGOEQxREQxRDdEODVGCis6MTA2NDMwMDBGMEYxNEQ0RkM1MUI4MDhGOTEyNDIxMTBBMDVGMkMxN0M4Cis6MTA2NDQwMDBFNUM3RjJFNzgwRjFBMDVEQzBFNUE5OTAxQ0M2N0VBMzc4Cis6MTA2NDUwMDAyMzNERTUwQURDNUFBMUJGMENENzk2RTA3M0Q5Mjg0RjNCCis6MTA2NDYwMDA2NDhFN0UxMkU1NUYxMjJFNUUzRTc4Nzk0RkI3REU4MDM1Cis6MTA2NDcwMDA0MDIyQTlGQ0Y5RkJBNTFDOTRBQkMwMzRCQTZFODc1RTIwCis6MTA2NDgwMDAyRkQ0OTExRkY5Qjg1RjAzMUE4MUZFQzhBNjMwNEQwNkJDCis6MTA2NDkwMDAzRDEyNUYxMTQ5MzFERTRGMDQxMUZCNjk2MDBGQUVBMDYwCis6MTA2NEEwMDA2ODI4NUM1NkY2NkY3NEJEOUExNjlFRjIyQTg1Q0I5M0M3Cis6MTA2NEIwMDBFQjBGOTkwODM2QjMxMzA2OTcwMTRGQkM1MTAzRkM5MkJBCis6MTA2NEMwMDBBMzEyMDFGOUQ3MEFDMzkxREI4MDRGNDkyNDJDRDBGQkRBCis6MTA2NEQwMDA1QTMwMUNEQTZBRjQ1RDlGNEE5ODdEQzhBMUQ3OEI0QzZDCis6MTA2NEUwMDBCRTA5RjRCRjI3NEZDN0ZFMDRFQzg1QjVBRTMxMDA5NzU3Cis6MTA2NEYwMDA4QTcwN0QwNkY0Q0UxNUE3MEY0Q0U3MTFBNEJEMUM4QzQ1Cis6MTA2NTAwMDA1OTNBN0E3RkQ2NzQ0RUY3QkU5QkJFMDE4MUM5RDdGRDNBCis6MTA2NTEwMDA0REU3QzMyNjk1QTc5NkUzODIyODgxNTI4QzE3MjM1RDA5Cis6MTA2NTIwMDAzNDRFOTdGMzRBNTQwM0JGNzFDQjU3NDVCMjhGQjYxRjExCis6MTA2NTMwMDBBREVGREY0Rjg5ODE5RkUyQjFEOTREOUREMTZGRTQ1RDExCis6MTA2NTQwMDBGQTU0NjBBMTc0RUZFREJBNEJBQzRDQTRFMEE3NEE5MUE5Cis6MTA2NTUwMDBFOUZEMkQ3NzNEMUMxRjBCRjQ3Q0M1QjlERjUzNTY4NTMzCis6MTA2NTYwMDBEMTJGQTVGQkJFNEFBMDg3RjU5RUI3OThEOTI3QjI5RjI5Cis6MTA2NTcwMDBBRTg3RjY1N0I4M0Y3MjNFNkY1MTE2NDkzMThGNzVEREMxCis6MTA2NTgwMDBFMzgyQkY5MEUyMzk5NURDREMyNzcxRkY2QTI3MUJERkNECis6MTA2NTkwMDBGMjc3Q0UxN0Y0M0ZCRTg1OUYwQjk1MjIzOTVDOEE2NDUzCis6MTA2NUEwMDBGNTkxNTJCRTE4OEFGN0MyQTRERjlEODc2RDBGN0Y5NEM0Cis6MTA2NUIwMDBBODE1N0QwNEVDNUU2MTY3Mzk1QzE1RDJEMzA4N0NCQUZFCis6MTA2NUMwMDA0QjI0NTVBOUUwNUIyQjg5MDg1RjYxOTg2RTNEQThERURFCis6MTA2NUQwMDAyRjM0NDVEMDRDRTQ1RUM5QzBGQkY5QUI2QTBGMkE5NDU2Cis6MTA2NUUwMDAyRUFEQTM0ODA4Q0NDQzI1MzAxRUU4RDU4MzVFQjQ5RkUxCis6MTA2NUYwMDA2QTJFNDk3OEE5OUU3RUFERTgyQjI2RDg2NUJEOTA4NDg5Cis6MTA2NjAwMDAwMTE2QkQxNkY2OUNGNDNGNkE1RjBERkE1Q0Q5MTgzNTg5Cis6MTA2NjEwMDAxMUFFNjAwNEY3MDg4NzhBOTYyMUJENUJBODdGRTc2MTA5Cis6MTA2NjIwMDAwQjcxRjA1MzhCMjk3NjAyREZDNkU5RjhFMDBGQzY4REI3Cis6MTA2NjMwMDAwQTk0RDc3MzQxNkFGOUUxRTc2MzBBQkZCNURGQjgxNDdBCis6MTA2NjQwMDBFMjQyOTQ5NDAwRTcwNDE5RTFBNDIzMzE3QUVBMEMyRjgyCis6MTA2NjUwMDAyMzc3Q0YyMjlERDRFRUI0NjZFRjQyNzkzMEFGMjQyODYxCis6MTA2NjYwMDBBRjMyMzk2QzBBNjA2N0U0ODQyOTUyNzg2MzU1NEMxRjU1Cis6MTA2NjcwMDAyOEI5NzFDMTZFQzdGNjkwRTg4Mzc2QkU5MUY1NEVGNEU1Cis6MTA2NjgwMDBGRjVBRkYyQ0FENDg4NUQ3NkE5MUU5QjdGQkI4M0UzQzZECis6MTA2NjkwMDBBRkI0Q0Y0NzdGQTM5OUNBNDc1MURGRkU2MTRFODc2RkUyCis6MTA2NkEwMDBDNzE2M0QzODFFRjUxOUIzNEJENkYzMkVDMTcwQzQzMTUxCis6MTA2NkIwMDA0NzVFNTA3MTNENkVCRjY2MUVGNzZCNUEwQUE5NUY4MzM1Cis6MTA2NkMwMDBGMjRFMTY4MDFGOTNDMUY5QTMwNUIwNDc5RjdCQjI0OUQ0Cis6MTA2NkQwMDBDMkE0NzA2NDgwM0Y0M0ZEMTI1MkNBRkMxMjhERkUwM0I3Cis6MTA2NkUwMDBGRDk3QkZDMkU5Q0Y3ODVDN0U0QjNBN0ZFNjZCNDJFNDEwCis6MTA2NkYwMDAwN0E4RUZBOEFBMDJGODc3MEJGMUY5RTMwMERGMDU3NDA5Cis6MTA2NzAwMDAzRjY5RjQ1RDc3MTdERjRGQ0U5NUI2MTVCNTUwQjgxRUNCCis6MTA2NzEwMDBDQjE1MURGQzMwOUFDQkNCNjNDNDNDNzE5MTNFOEYxN0Q3Cis6MTA2NzIwMDA4QTA2QzAxREFGMTc3MTFERTcwQ0U2Qjc5Mzc3QkQwRTQzCis6MTA2NzMwMDAzQkQxNkMyRUQyODg0REZGRUNFMEYyQjRBRDQxNzNDODcyCis6MTA2NzQwMDBBREZCRUE1N0UzRDE0ODBBQkRBNTczRkE2NENDMEE2M0VFCis6MTA2NzUwMDBGQ0MzMUY0QTIwRkQ2MTlEQTlGQ0Y0MDc0QTJCQjRGRTJGCis6MTA2NzYwMDBGNDlGNUNBMkFFNDFGQzE1NTY5QzkyRTE1QUU2REUyRkU2Cis6MTA2NzcwMDBBNTFFRDc3RDI1NzYzRjUzNEFERjZGQjBENzJEMTQ0RjI2Cis6MTA2NzgwMDA2RjJCMEU3RkJDNTM4MjdEOTc0OUQwRkZGMzg2QThBOTVCCis6MTA2NzkwMDAwQUMwNTUxRjBFRjA3QjQzNTREQ0UwREE1RDVFMDlGNzVBCis6MTA2N0EwMDA4RDU5MTEwREU0QzhCMkNGREU1MDY0MkJEQ0NGRkE5MkM0Cis6MTA2N0IwMDBCQzA1RThFNTJEMTc0NTg5RDI0RjkzNEQ5MjYzOTM5QjE1Cis6MTA2N0MwMDBBOTcwRDNDNkRGOTk1NDVEREFGMUExNDVCRjUyMDk3RUE1Cis6MTA2N0QwMDAyQTI5MTRDOTU4MEFDN0U2OEYxQjM0M0I5REJBRTgzNkVDCis6MTA2N0UwMDA4NEVENUI5RDdDMTNBRkVGNUZDRjdFNUFCRUY4Qjk2ODM2Cis6MTA2N0YwMDBDNTQzOUNGNEMyMUY3QjNDODREMzM5NDlGRjNFNzE4RDU1Cis6MTA2ODAwMDBGRjFDRjRENjM4RkQwQzRBQkY0RDA2RDA5M0U5MEJCQUY1Cis6MTA2ODEwMDBGMTQyRkYyMUFFOTk2MTY4QzcwRDQzMzQ2RDdBRUM2Mzk0Cis6MTA2ODIwMDAzMTA3RjEyMDVGOTA1MTJGRUQ1RUQzMTIwNjdBRTk3NEEzCis6MTA2ODMwMDAwQzIwMkRCRDg2NTNEOUVEMkU0MTQ1QjlBMjdBRTMyQTBECis6MTA2ODQwMDA2OTNBMkE2NDAxRTI5RjczQTU4RDQ4RUZDNzI4QkQ0MUNDCis6MTA2ODUwMDA4RjNENDY2QUJCMkVFNkY2Q0FCRjE2NTVEMThGRUY2QTRBCis6MTA2ODYwMDAzNENCMUI4Qjg3QTIzNzI5N0NENEFGMjM3Qjk4RkY3MjU0Cis6MTA2ODcwMDA4OUU1QkZGQzNERTU5MzQxRjgyQkU3QTlEMUUwRjZEOEM3Cis6MTA2ODgwMDAwQjdDMjU3NzUzOTZBNjcwMTU2RTY0NzYxMzdDQjUxQzI5Cis6MTA2ODkwMDBEQTM2QThEREVCMTQ3QUY5RDFDM0U3NTE0QTEzODdDNzdBCis6MTA2OEEwMDAyM0JEOURGNkU5QjFDMjk3MDUwRkQ4Qjc2MjY2REY1NEU0Cis6MTA2OEIwMDBCMzMzMEM3QTI2NTA0Q0VEMTM0MUZCQjMxQUYwMzNBMkRDCis6MTA2OEMwMDAyNDVFMEVFRDkxQkJFN0UxM0FCRTBEN0VBODFGRUMwQkY2Cis6MTA2OEQwMDA0MTdDN0M1MzRDMzQ5QTk0NjZCRTcwQTQ1Mzk0NjBGRjAwCis6MTA2OEUwMDA0QzcwN0Y2N0QxQ0YzRDJGQjU3QTQ4NEY1RkI2QjgxNzUwCis6MTA2OEYwMDBFODE0QTgzRDBDQ0JCNERCQkQ2QTI5QUZENzFFOEUyOEE3Cis6MTA2OTAwMDBFOTQ0NzVFQkY2MTdEMkZBMDk3Rjk2Rjg3RTZDNjY2MzU4Cis6MTA2OTEwMDA5OEI2NDdDMUFGRDQ5RkRDMjkzRURFMDhGQkIxODgyNzdCCis6MTA2OTIwMDA1QzhGNzQ3N0VEMjM5MjcxMjgxRUVGNUU1QjY2MDk5NThDCis6MTA2OTMwMDBCMUZDMzc3NDlFM0JCQjE0MEEwMDAxM0Y0MEIyQzc4MUQzCis6MTA2OTQwMDBFRTA0QkI0NEY1Q0Q1QTZFRDc2RTI1OTEwMDNDM0M0MzE2Cis6MTA2OTUwMDA0NDhDQUY5RDIxNDcwMjU3RDhGODcwQTdBNEIyNzk1QTRBCis6MTA2OTYwMDA5NUI3MjE3RTZGQzU3NzZGOEJCM0I2QTU3RkVFRDhFRDU3Cis6MTA2OTcwMDA2Q0RGNEUxNjBEODdGOEVERUQzQjE1NUNGRjlEQUU3RDhGCis6MTA2OTgwMDA2QjRDRDI3MURDM0I0ODZEMEJFMEExNTkyMUU4MjdBQzgwCis6MTA2OTkwMDBENTg5MENGMUQ4MEQzRkZDQ0UwQ0Q4Mjc3QzlCREI5NTFDCis6MTA2OUEwMDAwRjI4N0YxOTM2RkRCM0NFOUY1MDYxM0ZGQjRFQzcxNUIwCis6MTA2OUIwMDBDQkFFMjZGMDdFQTI2NTA0RUNDQkIzNDk0QTNCN0E0QkMyCis6MTA2OUMwMDBBQjEzQkU4MUUwNzdDMzRCQzhBNjdFRTE5MERCODQ5NDE1Cis6MTA2OUQwMDBGMUMzQTcyNEMxMTEzN0FDRDcwMjkzMjA2ODcyREVDQjc0Cis6MTA2OUUwMDBBRTY2MDVEMzFGRTY2RkJEODkyNkYwMTMyNTgzRjdBRjhBCis6MTA2OUYwMDA5RENDRjIxQ0I1MzNFMTNBRDA3QjNGRTNGRUU4NTBERjlCCis6MTA2QTAwMDAzQjlDRTZCRDBENUFCNzBBRkM1RjIzOUI5NTgyRDgxQkMxCis6MTA2QTEwMDBBRkQyOTREQUYwNDg5MEUzMDNFNTlEMjM4OUEzNUZFQkJFCis6MTA2QTIwMDAyMEZCNTU4QUZERjQ3M0MzN0I0QUQ3NEM3MTcyNUZCODYzCis6MTA2QTMwMDA2RjIwRDFCNzQwRUVDRThCRDE2QThDMTM3MEI4M0Q4MEY5Cis6MTA2QTQwMDA2NzA5QUUzMkQyMTNFMzI3NDUzMEFGQkY1NUM4ODIzODRECis6MTA2QTUwMDA0QTA3RkEyNzVFNDM3NkQwQkJDNkQyMDM1NDJGNDFEQ0U3Cis6MTA2QTYwMDAyN0EzQzRGOURDMUQ1N0U5NDlEMkI1MTNFNTBCNDNBMkFFCis6MTA2QTcwMDA3NDQ5MDFDRERGMjk4MUJGNTgyNjlGNEVGNkE3RjM1NUYzCis6MTA2QTgwMDBDM0JBMjY2MzI3RDQyRjc1NUNCRjU0MTNFM0MxNTlEMzBGCis6MTA2QTkwMDA1MEJFMzA1RTU3Mzc3RjhDMDk3MEQ0RTUxOTIxRDMwMDgyCis6MTA2QUEwMDAzNTFBMEFFMzE4MkVCRUFBQjkyMDkwODQ2REZGNUQyMzIzCis6MTA2QUIwMDBGN0E4MjA0NzM1NTQ3RkRCRUZERjEzNjRGMUU0NzQ3QUU1Cis6MTA2QUMwMDA1QjIxOUFFMTJGMDFCRjU2NDQzQzQ5M0E2RERCRDZGRDZDCis6MTA2QUQwMDA1MTVDQTg2QzY3RkJBQUFDMjVGREVDOEJFRjA5QjI3ODgyCis6MTA2QUUwMDBGMURBMkQ2M0IzNThEQ0M1QTlBRkNFNzJGQkYwOTM2NzIyCis6MTA2QUYwMDAxRTU3QkI0MUNGM0M3REUyN0E1OEU3RkFGRjI5MTE4RDQyCis6MTA2QjAwMDBDRTdCRjY5OTRDRDI4OTc2MjNBMTgyREQ1OEQ3MjFBNTc4Cis6MTA2QjEwMDBCNDg3ODQzNEIxRkNGOUY3MzI5MTVFRUI5RUYzMjQxNjBFCis6MTA2QjIwMDBEMEY3RDdCREYwQ0UyNDQyRTEzQkJCQTlFN0I1OTFFMDU5Cis6MTA2QjMwMDA0RjNGMkRCMEI4QjhEOTNENjkzMUJEQkY0RTI2QUI1M0RDCis6MTA2QjQwMDBDNTU5MjZDODZDMUY3MkZBNDcxOTJCNDA3RTg1QjY4MzNCCis6MTA2QjUwMDAzN0UzQjhFRENCMTVCMEFCNTYzRjQzNTY5MDVGNjkzRjc2Cis6MTA2QjYwMDBCNERCRTY1MzQyNjJBQzkwMEEzRTk2OEYzOEZEOTRDMDg3Cis6MTA2QjcwMDBFMDNCQTBFMEZFNkY1RERCNUUzNTRBRTFBODY5RkIxMEZCCis6MTA2QjgwMDBGNUM1RUNFRjNEMUIwMDNDRDQxQzkwMUM3RTVDNEQ5QjdFCis6MTA2QjkwMDBENEU5OTk4NEQ3MTM3MDg1MzhBQjMwMDNGODg0RjM0QjZDCis6MTA2QkEwMDBDNzA2OENBRjU2QjczRkYwQTExNDgwRjc5RDdBOEJFMkYxCis6MTA2QkIwMDAyNUQ0MDk3ODdENTMwQTJEODBGNjBGRkUzMTYwNTA1NDlDCis6MTA2QkMwMDA3RDcwRjg4OTAwRTA5NThFQkI0NkNEODIzOEJFOTNCRkJDCis6MTA2QkQwMDA2MUZDMEIzOTdEQzdBMzlDOEVGOURFOUFGNjJENkMzRUM1Cis6MTA2QkUwMDA5NzVFRkMwMDdFMjlFODFCODc4REM4Q0UzQzNBNjkxQjY2Cis6MTA2QkYwMDA1QzlFNzdGREIzRTcxRTM1RTk3Q0E3OUZGQkZEQTMyNkNFCis6MTA2QzAwMDA4NUZCQUVCRkZDRkJBMzVGMDdCOUZDNjdBRjBFN0FCRDg3Cis6MTA2QzEwMDBFNkU5NUYwNjg4OEQwRkQ3QzkyQzdFNzA3NjE0REQ0MkI5Cis6MTA2QzIwMDBEMTdFNjc3RkU1NDk4MDQzNzBGNkE1Rjc0NjFCNzRCREFBCis6MTA2QzMwMDA2N0JGRkZBN0UxMDZFRDVGRjdEMkRDN0M1ODdGRERGMzhECis6MTA2QzQwMDBCM0YzRkJGMzYzODA0RjEzMUUzQjVDMDkxQ0RGMzgyMDVBCis6MTA2QzUwMDAzMDY3RTE0NTdFNzVEMUU1NTBDN0ExRDEwMEU3OTk2MzYyCis6MTA2QzYwMDAxRURDOUZENUQwN0JGNTUzODE0RTFCRDBDRTQyN0IyM0JCCis6MTA2QzcwMDBDNTZGRjUzMzlCM0YwNEZERDAxN0NGRTY0ODExODM1RjA2Cis6MTA2QzgwMDA1NDBEMDY4MUNFRUZDQzQzN0E5MTFFQjQ4RkVFRkUzNUMzCis6MTA2QzkwMDA0NzI5MUQyN0E3QTdEQjM5RjJCMTBBN0FBRUU2OTkyRDVECis6MTA2Q0EwMDA2QzNFMTdERENFQzAyRjU3RjZBNURCNjYxN0REQ0U5MTAzCis6MTA2Q0IwMDBCQjFFMkI4MEM0NkJDNzMwNDcxRUMxQkFGNkM2Q0YyMzlDCis6MTA2Q0MwMDA1OTkxN0VGNDgzMjVGRjAzRTExNUYzMkMxNEFFQTU3MkQwCis6MTA2Q0QwMDBGODFCMzJDOEQxNzMxOTQ5QkEyRTAwQkEzRTdCNkUzNDA0Cis6MTA2Q0UwMDBBMTdDRjFCRUQyNzMzM0Q4ODM5RTk3M0NGQTNFN0E3RjYzCis6MTA2Q0YwMDBERDRCNkZBMjVDOUQ3REZFNzVENTQwM0I0NkZDMDJGNUU5Cis6MTA2RDAwMDAyQkNGOTJFNENGNjFGMDMzQUI5OUNGNDk2QUY2Njc3NjI3Cis6MTA2RDEwMDA3QTAyQkRGNEE5NEUyQ0FDMzQwMjc4RkYwNERFNEYzMDY5Cis6MTA2RDIwMDA3RUFGNEUxQzVDMjJBNEEwRDdFQkYyMThBNkZGMTM3OTBECis6MTA2RDMwMDA4ODk3MERGQjdGQTMxMkJGOTM4RTQyMTlEMEYxQzQzQ0ZDCis6MTA2RDQwMDBCODlGOEU4RUQ2RkE3NTU4RkY0QzFCM0RGNzMzMzk3NUI4Cis6MTA2RDUwMDBGN0FGQTZGMjA4RjYyRTQ5RDc4NEYwMjY0OTIxOTc2N0E3Cis6MTA2RDYwMDBGNzdBNjRCMDc3NjdDMUFGNEE5OTM3NjVGRUNDNTBGM0M0Cis6MTA2RDcwMDAyQjNGOTM5REY1NTdDOUZDMEFDNzQzN0FGRTYwRjIzRDRECis6MTA2RDgwMDBEMEZBODY4QUJGMUZDOTA2OEVFQkM2RTNFOThGNTNFQkE0Cis6MTA2RDkwMDBGQkY3QjhCRUE4MjY2NkU1ODg0QkZCRkEyMTMyODk5ODM2Cis6MTA2REEwMDAyMzhCN0FFMTNEMEQxQjU0Q0E3RkE3OUY5NjMwMUVENERBCis6MTA2REIwMDBEMjdFMDhGNUI2NUI0RjU0QTc4OTZGNUU5MDk5OUY1MEJECis6MTA2REMwMDA3REUwRTAyNEQwNjdBNzVGRkUxMUYyNjdGNTMzMjc1NDFBCis6MTA2REQwMDA4ODE3QkZENkY2MDNCNUJCQjQ1NzFFQzAxRTI0NkNGNjg5Cis6MTA2REUwMDBFMEY0NzcwRjRFNjI3QTgwOEU5RjgyNEU4QUMyQzZBRkUxCis6MTA2REYwMDA3OUQxMzk3RUNEMzMxRjNBQzY1RjZGQjZBMzdGMzBEMENECis6MTA2RTAwMDAzQzFGQzhFMUU1QjBERTBGMEUyQjA0RjRFODA3RUQ1MjlECis6MTA2RTEwMDA2NTJBQkZGNjAzNkUwRjJEM0NCNUJDM0VFRjM3OTAwN0Q5Cis6MTA2RTIwMDA5Qjc2QzQ2NzgwRERFQ0Q4MTRDRURGMEVGRURBMTE4NUM4Cis6MTA2RTMwMDA4MERFMjY3MkY4RjcxRURBRUU3OERENjc0MDdFQkFFMzcwCis6MTA2RTQwMDBDODMyQzlCMEVENDM3RkU4QzJFN0NDQTNFNkVDNEMzQUM4Cis6MTA2RTUwMDBERUNDRUVDODM0NzA1MUREN0FBM0VDMzhERDU3RDlGOEJBCis6MTA2RTYwMDBBMEVFRjVDQTdDRDBGN0IwMEYzNUM2QzM3Q0ExMjBFQ0VDCis6MTA2RTcwMDA3M0E1QzBCQzRBOTZCRjE2NzU2RjRBN0JDREM2NTNGQzNFCis6MTA2RTgwMDAxMThDNTcyOUJBOTg4QzkxQzFCODIzNDlBMjExRTJBQjUxCis6MTA2RTkwMDBDNEVGNzdFNzI3MjI5QTNEMEZCNUUyRjA0MUQ4NjJFNkNBCis6MTA2RUEwMDAyRTdFQjEwMEM2MDk5MDk4N0UxMkZENEYxMkJBRDg4RjdGCis6MTA2RUIwMDBGRkU1Q0U0NzU4Rjg0Q0NBNUY5QUZDNDQ4NjdFNzNGMEQzCis6MTA2RUMwMDAyMEU5M0I1RURGM0M0QzU0ODNGODc2OEI3RjZENkI5MTAxCis6MTA2RUQwMDAyRDBGRDMxMkVDOTM4Nzk5QUI1MDNDQjQwQTI0NjVCQ0I4Cis6MTA2RUUwMDA3NkJDNTIzMTVGQzlDM0RENzEzNEQ1RjM5QjE0MjY1NzhDCis6MTA2RUYwMDBENzkyRUU3QkQ3MDA5QzExOTZDRjk5RTVDMkQ3OTczOEYxCis6MTA2RjAwMDBCRUZFNzkzMjVEMzg1NUExRTVFMDU5NTFGQ0NFNUUxMkU2Cis6MTA2RjEwMDA4RTI5RjRGRURDNTUzRDk3QkY4Q0RENzkzRUM3MUMyRkQyCis6MTA2RjIwMDA1RUNDMTgzQ0ZFODY5QUI3OEI3ODE2RERBRTBDMjI2RkNECis6MTA2RjMwMDA5NzJFN0ZEQzBCODdDOUY3RTMzOThFM0NDNkExQjdFRUVECis6MTA2RjQwMDBEN0JBMzFDRjUwREI1QTY0OEJGQjBERUZGNDkyMzBFNkE5Cis6MTA2RjUwMDBGMTBDRjQwRjg3NzdERUY5Q0REQjIwRUU5QzVCMThGMkE1Cis6MTA2RjYwMDA5MkJFRTNDODE3QUVDNkI4OTE5NUNGOTcwQkMzOUQxMERDCis6MTA2RjcwMDBFRjk3NzVBMzVDQzI3OTk2ODcyMUJGQjBEOTYwRjk4MjdCCis6MTA2RjgwMDBDREMxRkVFMzdBMzM5NDY4QjM4MkYxQTg2QjcwNUM1MTkzCis6MTA2RjkwMDBFM0Y1MDc4MzVDRTczNzE2MDcxMENGMDE4QTY3OTA3NzIwCis6MTA2RkEwMDBEQ0ZGQzBGQThFMEIzQzZGREU2RDRBOTAzRjNDOTE4RDRBCis6MTA2RkIwMDBGOTgyODA0QzRBMjAxRTcwNUVGMDg1MzY2MTNFQzE5OTkwCis6MTA2RkMwMDAzNzRGQzdCRkRCNjUxM0YzRTZBRDQ2OUZCQ0Y5NzcxNEI3Cis6MTA2RkQwMDA1QkJFNDE0QjkzMzdEN0ZDNEIzMDZGQUUxMTlCQkY1QjExCis6MTA2RkUwMDBENERCQUY1N0VFNUM3OTczMTgwQkUzMzJEQjY3NDM1QzlECis6MTA2RkYwMDBBNjM5OUIzOEYyRTZDRDIwRjg1NzExRjI5QzcyRjU2QzU5Cis6MTA3MDAwMDBBQzNCRjNGMkU3RTZBQ0Q5NjE3QjlCMUM3RjE5REIzQzIwCis6MTA3MDEwMDBGRUY0QzdFNjczOUJBMDdGRUU0ODUyOEI3NTZBNzI4NEJDCis6MTA3MDIwMDAyQ0I1RTlDMUY3MTQxNkE3RERBMDg0N0ZBOEQ4RUI4RTk0Cis6MTA3MDMwMDAzODNGNThGOTlGNDM2RkJEODc3QzA1RDczMTE0QUZDRERBCis6MTA3MDQwMDA5NEFGM0NDODU3QTc4ODVEQUY1QTU3OEI3RjlBOERGRTg3Cis6MTA3MDUwMDBGOTQyQkQzMDA1RTM2NkM5NzZEMDQ0QkUwODA0QTNFMTE5Cis6MTA3MDYwMDA3MDhBRjcyNjc5OThEQzVCRjMwNkNBQTgxRUE1RjJBNkZCCis6MTA3MDcwMDAxODExQ0M0N0E5M0FEREYwMUE4Mzg3M0YxRDVDMTY5RjkzCis6MTA3MDgwMDAzNjFCNjM1ODFEOTQ0RUIwN0UyRkZEM0FBNkIxMzgyNkFDCis6MTA3MDkwMDA0NEI4Mjg1Q0JCNkVCQzNERDQ5RjlGNjNBRDczODYxMjIxCis6MTA3MEEwMDAzRTY5Qzc3QkVFMjVBOUVCNzdBQjU1QjZFRUU2QzgyQTVECis6MTA3MEIwMDA5NjVGQUY3MkU2NTMyMTdENkQ4RkIzNEUxN0EyRkZBRTgwCis6MTA3MEMwMDA2MDlDOTBFNTUzNDUyREMyRjMyM0E2MTUxRjBGMjZFM0MwCis6MTA3MEQwMDBFMTA2RDQxOURFNjU4MjNFNTQ1NkI1OUIwMjVDNzM1OUI1Cis6MTA3MEUwMDAzRTI1NTc4QjdFQUNEOEVDODNBQzc3MzNCOTc1RTUwNzdBCis6MTA3MEYwMDBFNzRBQTc4Nzg0NUZBQjJFNkU2QjgzOEU3RUZBOTY4NkY3Cis6MTA3MTAwMDAyMEI2MzczNzE4Nzg2RDY5MDhFMzdEMzcxRDlCOEQ5NzVBCis6MTA3MTEwMDA4M0I3NjA1RDlBMEZFM0IyRTlDNjdGQjAyMTg0RTNDNDEwCis6MTA3MTIwMDAxQUNBRDg3ODNDNkY0RTQ4NjYxM0YwOTUyQTVBRjIzMjQ0Cis6MTA3MTMwMDAwQ0RCN0U4OTNGMzcwQjlBNDBGRUI2MEJFQ0Y5MzUyRDAwCis6MTA3MTQwMDA5N0EyQkM1OUZDQjNDM0U4M0YyRTJEMjU2NjIwMUYwQzI3Cis6MTA3MTUwMDA3NUZDQkVGQ0ZBMTM1QzY3RjMyQzNGRUFENzgxRTQyODg4Cis6MTA3MTYwMDBBQjkzQ0QzQkQ4Nzk5NEE0QkQ2MEYzRUM5OEE1RTEzQ0ZBCis6MTA3MTcwMDAzQjcyMDc5ODI3Q0VFNjE5MTg3RTg2QUY2RDA3NEY2MUUwCis6MTA3MTgwMDAxRDgyNDJGOTAxNTQ5NEEyODc1M0Q3RTk3MTc5RUIzQkYwCis6MTA3MTkwMDA4RTA3RjU3QzczOTBENTg1QTlDNUZFMzAyOEZGNjY4M0UwCis6MTA3MUEwMDBFNzFCMEI1OUJFNTEyRDE5NUUwMUY3RDVEMDY1NTgyNzQ1Cis6MTA3MUIwMDBBRTk2RkEzMTlGQTcxNjBGQkYwNURBREIwRTZFRDEyQjA0Cis6MTA3MUMwMDBDMDdFMTQ4QTIxQUYwMTc2QkI5QkM4QjkyODM2MThCRjkwCis6MTA3MUQwMDA1NThCNEI2RTgzRkUzQUM4MzE4NTYzOTQ4N0VEQjdENEU3Cis6MTA3MUUwMDBFMkFCRUU4MEY3MEY0RTc5Q0Q2OEEyRkQ5QjBCN0QyMUJGCis6MTA3MUYwMDAwRkM4NUJCN0VDRTBGRjQxRUI4OTQyNjcxRThEQzg1NEI2Cis6MTA3MjAwMDA1RjUwRkRCNTZEQ0FFRDI1Mjg5RjlBQUQ0RTMyNDVCRDQ0Cis6MTA3MjEwMDBBMDRENkY2QzUwNkQ3QTQzMjU3MzRDQzA0MzNBQkQ0MzBCCis6MTA3MjIwMDBFREVGN0Q2QTVFREY3MUFDRjczNzI4OTE3QTE1RjU0Mjk0Cis6MTA3MjMwMDA4NDM4RUJERDUzRTdCMzJEN0E4MDlCMDVGOTQ4Mzk5ODA0Cis6MTA3MjQwMDBBQ0QzNUI1MDMwQkMzN0JGNkRENUU5QjlGM0RBNzFGQTE2Cis6MTA3MjUwMDAyRjU1NUVEQjVEN0ZGRTU5RDVFOUVENTQ5Mzc1N0FBMzFBCis6MTA3MjYwMDBBMDRFRUZDNzBBMDk3NTQyNUVGRTk3NTI2ODlGRDE5N0ZDCis6MTA3MjcwMDBFRkRDRTNCOUNGNUI1MEZGNDc4MzdENEUzQUI5RkM5OTExCis6MTA3MjgwMDBFQUNDOUYxNjQ0NUQ3NEJGRDVFQjk4RUYxNTkwOTdEMjZBCis6MTA3MjkwMDA4MUY1Q0JDODJBRTczOEEzNkE5RDc1QjU5N0Q0RTczODNFCis6MTA3MkEwMDBEQTQ1RTYwODQ3RkY0QjVCQzczODlFOEY4RDVGRTY3ODZGCis6MTA3MkIwMDAzRTdFRjc1NDQ3N0I0MkUyMkE0N0ZGQ0JEQjJBMUNFRDk4Cis6MTA3MkMwMDA4OUVERDczOUZBNEYzRUIwQzhEMTlFRDJCOUQyRDFGRjlECis6MTA3MkQwMDA4QUFFQjU4RUU3RDMwRkFGNzMzQzlGNzlFQzFFNDdGQkE4Cis6MTA3MkUwMDBDQUVFQUYzOUZBRDc1Mzc3NDgwNUI5Q0RFNTc1QzhCOUI1Cis6MTA3MkYwMDBGOUEyM0Q0RkRCOUE0N0VEMTJEREU3RUZDOEEzMEM4M0ZGCis6MTA3MzAwMDBGMTZGNTZEN0E1QjJDN0M5QkNBMUZCM0REOTUwQzMzQTRFCis6MTA3MzEwMDBFNkZEQzdDRDgxMkI5MUVCRDA5RUNBQzZGMDBBMDNFRkU0Cis6MTA3MzIwMDBDRjk4MDc1NzMyQ0Q1OTVGQUIxQUFDM0UxOUY2NzFDRUU0Cis6MTA3MzMwMDA3QTAxNjc5REIxMkE2REMzM0M5REU3Rjg5N0JCODQ0OUVDCis6MTA3MzQwMDA3REU5QUExNjNBRTU2MEIwNzVDQThBRTE3QTZGODg3MjVCCis6MTA3MzUwMDA3MURFOTI4QjUxNTQyRTMwRkVGNkIxODRFNzVBRTY2NDBBCis6MTA3MzYwMDBBMjdGNjFEQjRGMjExRUFERkRENDM1MUE4OTgxOEI2OTY3Cis6MTA3MzcwMDBDOTQ1RjlBQTlFOTFBRjYyMzc2QjFGRTUxMTg3NTIxNzc1Cis6MTA3MzgwMDA2N0M5NUZDMEE2Rjc2MUJGNjJFOTk5RTZCMkMxRTk1Nzc0Cis6MTA3MzkwMDAyOTcxODVDMzlGNzQ1RjlCMDJFQkQyRTlDNzAyOEZDRDMxCis6MTA3M0EwMDBCRjc3RUJDNzE5NEFBNDEwOUU2QjcyRDgyNEI2NzgwRDJDCis6MTA3M0IwMDBBOTU1MUM3MDBGMTZDRTRGNkEwN0VFQTIwQzQ3NTJFODczCis6MTA3M0MwMDA3MTk1RDQ2MkRENTVDQjhBMzAwNjAxNDgxRDcxRjBFOTE0Cis6MTA3M0QwMDBDRUM1RkZBMzBDQzZBNTdFRTEwQ0U3M0E5OTVGRThGNjlGCis6MTA3M0UwMDBBN0E5N0U0MzdGN0EwN0Y1QTdEMURFQjlGNDIzRDU1MzQ5Cis6MTA3M0YwMDAyNkFGRkYzMjk4MUZDMUY0QTE3QjlEOUY5NzFGRkQ2RkExCis6MTA3NDAwMDBFMEFDRjY0M0FGNDA1MUE4MTJGNzg3NzkyMjgxRkQ2MUM1Cis6MTA3NDEwMDBGM0FDNDgxMEUyNzM1NkREQkNGNTVFQUJFNzUyMUMyN0I3Cis6MTA3NDIwMDA5NkFCOEExMEJGOEM3NUNEQzU3ODdEOTMxNkQ1NTg5RUM2Cis6MTA3NDMwMDAzODhBRTMzNDY1OEI3QUFBM0FCMTNBMEZDQjE3NkJGNUU5Cis6MTA3NDQwMDAwRjhDRERERjRGREM0NTUzNDkzNDU1M0M2REE3ODdFNTk0Cis6MTA3NDUwMDA4MzYyRkFEQTJFQjBBMzk5NzlBQTAxN0JFRUQ2ODNBN0NDCis6MTA3NDYwMDAyMjEwNDc5MkNCNjQxREY2RUI4NDAyRjM4RTJEQkY0N0FBCis6MTA3NDcwMDA0ODE0RTM0QzVBNTA0NEJCQUJENUVGQzBGOTA3ODJGNzMwCis6MTA3NDgwMDA2NjhGQzBDRjdENkNFOTE3NUVBRjlBM0FFRTkyMEVERTQyCis6MTA3NDkwMDAyRDAwRUZCNDgxRTFGNTAyQkM0NTMwRkYzNjlDQkZDNjNDCis6MTA3NEEwMDA2M0E0QzRCRjQyQzI5NUIzODE2RTI3QkUxQ0MxNzQyQkI2Cis6MTA3NEIwMDA2NTFCOTA4RjFENjU2QzVGNEUwRDgxODNCRkFEN0QwRThBCis6MTA3NEMwMDBFNUVGODczRDc5NThCRjhBN0M2RDlENzNCOEQxQTNFMzAyCis6MTA3NEQwMDAzQzE2NUQ0OTYxMEVDNjM1MDJEMUQ4RDg2MkNBNkY5OTkzCis6MTA3NEUwMDA1MUI2OUZFRkQ1NEY4QzhGMzI5NTMwODE3ODk2RUMxNzNGCis6MTA3NEYwMDAzMTNGQThGMjc4ODhENUVGMEYxQzlGNERCM0JBOTE1RTRCCis6MTA3NTAwMDA5QkFGOTRDOTI2QTFCN0NFM0E1NjQ4RDczNUI5Nzc1RDE3Cis6MTA3NTEwMDBGRkM3OTNDREY4OTNDRkVCMjM0QkIyQjAyRTQ1N0EyNjFECis6MTA3NTIwMDBEODlGREVGNjcxN0NCOUY1RjdGNzNDNUM3RjE3OTAwMkM3Cis6MTA3NTMwMDBBNkJGNEI5NzQzQkUzQkREMzg2RTNGQTY5RUM3Nzk4N0ZCCis6MTA3NTQwMDA1RTVGQ0ZDRjE3RjhFRkU5ODIzODkzMTVFNzIzQzE2OTYzCis6MTA3NTUwMDAyOUUzRjJCRDc4NjVGOUNBNUVGQTJFMzczQTI5RkRFNENGCis6MTA3NTYwMDBFOTUzMzE0RjZFOUQ1N0EwRUFDQzU5MkZDQ0U5NkJEMTJFCis6MTA3NTcwMDBENThBQTM5MzIwOEIxRjU5NzRGNjI2RjFCOUE3NUY3Qzk3Cis6MTA3NTgwMDA3QTQxNUVBRUU4OEJDRjVGNzk3OEJFRTFCRjE4M0U1RjhGCis6MTA3NTkwMDAwMTlGODY1RTMzMzNEOUY5NzQ3MkU4QUIwNEYzNTI4NUU4Cis6MTA3NUEwMDA0RTM5QjRERUIzRjhEREJERkUzRkZEMTdFNTI3NkJGREI4Cis6MTA3NUIwMDAxNjNGQTRFRjZGQTZEQ0Q3NThGOUQ1NENDRTZGMUE5Q0I2Cis6MTA3NUMwMDBCMkEyOEFFN0Q1QjJCNzVCMkY4NUZENkJEMDhGRkJCRTI5Cis6MTA3NUQwMDBDQ0IyMTg5RUVGNTU4OEE5ODM1RUM4QjRGNjM1RkNCQ0MyCis6MTA3NUUwMDA5MTU1QUZFNDJCNzVGQTY1OUE2QkZGQTJGMkJBQTgzRUVCCis6MTA3NUYwMDBFNzZEQjlGRkU2M0U0Nzk1QzRBRjhCNUU5M0I1MzRGOUFFCis6MTA3NjAwMDBCMTQxOUUzRkRBQzVGMzc1MDU3NUYxNDZEODBGMTdEQzE5Cis6MTA3NjEwMDBDQUVBRkRGNzI4NjQzNUQ0NTc4RUE4MzI0NTVGMkVFNEI4Cis6MTA3NjIwMDA2RjhBQkU5RjQxRDc1RkYwRTI0MzhEMjM4MTI0QjcxQTUyCis6MTA3NjMwMDA0NUUwNjYzQ0EzMTkwRTNCNUM3MDU3QkNEQ0M3OUU0RjBGCis6MTA3NjQwMDA4MTcxOUVEMjk4REUyREE4OENFMzM5RTdBNkU3Qzc2NzQzCis6MTA3NjUwMDA4MTlGRjBDQTVCQ0I3NTg4MEY3Qzk0NUI4Q0ZCQTczMzUyCis6MTA3NjYwMDAyRjc4QzJBMEZGQ0ZFNDkwMkFBQzBCN0I2MUU2NkJFMEUxCis6MTA3NjcwMDBDN0ZGQkVBMTJCNDdCNkYxQzk5OUVGQkUzRTQzQTE0NDU3Cis6MTA3NjgwMDAzQUYzRENFQjMzNjQyNDU2QzIzMUZGODY4QkJGOTgwMTlBCis6MTA3NjkwMDA3MDlCMTVBNEE0MTZGMjc3QkE0QTYwREMxQThERTVDQjZDCis6MTA3NkEwMDBBQzdBOUY1REMzRDUxNkI4RkVENDlCQ0RFMjg5RjlFMkQyCis6MTA3NkIwMDAwRTY4RDc0MzQwMENGQzA2MUVDRkJGRkFCNEIxMUNFQURCCis6MTA3NkMwMDAyRkIzQkIxNDAxRUFGMTFFMTI0Q0QzNEZBRkU3NEYzQzZFCis6MTA3NkQwMDAyNDgwOUZBNTc2RDY0Mjk4ODVERTBGMUQwMjk0OUI2Mzc5Cis6MTA3NkUwMDBEOUJFRTQ3QzExMjkyOUEyN0FERjc3Qjg3NjNDRkFEMzk3Cis6MTA3NkYwMDBBRTdBMjc4QkZGRTVEOTA0RjM3RDNEMzc2QTA5QjBENzExCis6MTA3NzAwMDBEQjY1RTMxQkFCQzA3RUFGOTJCMTFFNjdCQjdDMThFNUE3Cis6MTA3NzEwMDBDMjREQzdFM0RFMzFDRUZBNUMxRThGM0VGNEQ2MURGMUJBCis6MTA3NzIwMDA3MkZBRkUzRDUzNDRFNDU3RkY4OTI5NTkyNDg1RkM2RUMzCis6MTA3NzMwMDA2RjI4QzNGOTAzMDU2RjU3OTYwMzU4MUZEM0JCMzM3QURECis6MTA3NzQwMDBGNzQ5N0U5OTk4NTlENDQ0MkE0NUEyQTk1MEJDRjhDQjUwCis6MTA3NzUwMDAwODc5REJDNjc3MkQyMjA5RUJGNEY5MEIwRDA0QzdFOTk0Cis6MTA3NzYwMDA2OEQwRjBEQUQ2QTA4RjJEQTYxQjgzNkYzNTA0RjFCQTRFCis6MTA3NzcwMDBCM0MxQzBFQkMzMEQyNUY4RkNDMTg2OTA0M0VFNjFCRURBCis6MTA3NzgwMDBCNzRCNzgzQjg1QkZGMjc5NUQxRjY4QTBGM0RBRTBEODhDCis6MTA3NzkwMDAzNTkxNEEzREE1RDcyRTlFOEY3QUEwNzQ2QUQ2REE3RTlGCis6MTA3N0EwMDBFMjYwN0IxQUJBODZDRDE5Q0I5MTA1RjVBNjc1RkFERTkzCis6MTA3N0IwMDBBREZEQzBCRkE3NTE1OEJEMDhGQzlBQkJFNUM4M0VENDdCCis6MTA3N0MwMDA4RkQxODI0NTM2RkQ0OEZEQjYwMjQyNTlGMURFOTYxMTUxCis6MTA3N0QwMDA3M0U2MTRBMDNDQTJCQzRDM0IxQzQ1N0ZCQzIwMTgxNzkwCis6MTA3N0UwMDAyMDhFNTg3MDk0RERCN0NFNUIyMEJEQThBMEZEMzA3NzA5Cis6MTA3N0YwMDA4RUEwODBERTJDMjVFRDAwOTY1QTFBMjUxNUI0RkZDQ0ZDCis6MTA3ODAwMDBCQzI1RTU3MDlGNEM3NERFOUZBMTMyRjk4NjcxMkJFODkwCis6MTA3ODEwMDA3NUI2MTZGOTkxMzYxREJFRDNCMURCN0M5NkFFRTc4RkY3Cis6MTA3ODIwMDAxRDFFMDNGMjNDMEZCRUZDMjcxNUY2MDVCMTVGQTkxQTE5Cis6MTA3ODMwMDBGODMxMDUyRjlFQzBCQTg3OThEMEFENDI2NUVDNzFBRDg2Cis6MTA3ODQwMDA3QThFNENGNTBDNkUwNjMxQkU0QTE1MEJFNTkzMThFODlFCis6MTA3ODUwMDA1ODhDN0ZGNkM0RTZGOEUxQkM0QkY0OTRCREZGMkU1Rjc0Cis6MTA3ODYwMDBGNDZFN0U3MjI0QUMwNTI5MUYyNUYzMTdFQjYzNjFCQTExCis6MTA3ODcwMDBFOTdDODFFNzJGOEU2QkVCNjI2NjIxQjQ2OUZGMjlBQzRFCis6MTA3ODgwMDAxREEzRUZCRjkwMUQxRDI5NjY0M0QxNDU1NUFDRUI0QkExCis6MTA3ODkwMDBEMEI2RkE1N0M1QTBERUY2NERBRTc3ODgzRjVBMDRGMjRGCis6MTA3OEEwMDA5NjZDRUJCNDlENjk2QkNCQUM0RDM0NzZCNUQ2QkJFMTMxCis6MTA3OEIwMDBEMDlGNUUwMzNENTdGREEyRDAwRUEwNTFCREM3RjA3RjAzCis6MTA3OEMwMDBFMDIxQUNCQjZENkJFOEQyNjMwQUE3QkY0NTA3MkE5MkUzCis6MTA3OEQwMDAxMzgyMDRFQkU5RDQ4NDkwMTg0M0Y1QzcwNEZFN0Q4QTMzCis6MTA3OEUwMDA4MjY5NjFBMzExRjQ2QjQyMDk4MURFMENGOTk4REYzOERCCis6MTA3OEYwMDAyMTQxQzdCMUM5RDU4NDM0REY0MUMxQkMyRkQwNzExQjMwCis6MTA3OTAwMDBBQjFCNzZGM0Q3QjM1RTk2MUZBODI3RTY1NkM4ODM5MUM0Cis6MTA3OTEwMDA2NzE0MURGMzkxM0M0RTc5REFCMjczN0NCRjdBOTc5NzY2Cis6MTA3OTIwMDAzNTk1NERBNkVGMzJEMDNGNkI2NDhDODNBRDJGOEE5NzhGCis6MTA3OTMwMDBBQjc0OUVGNTNGMkEwQTUxQ0IwQTc5MjVBQzZCNTg5RjUwCis6MTA3OTQwMDBERDNFN0MyQUNCNEIzOURBMEZGMTNBREE2MEI2OTkwRDdECis6MTA3OTUwMDBFNzA3QUEwRjNDMzQxQUVBMDJBQTQ5RkNFNkFGMDFCQ0M5Cis6MTA3OTYwMDBGRkNBRjI4RkE3MEU1RTk5NzUzNTZENkZBMDZEODhCRjQ3Cis6MTA3OTcwMDA2RUU4Nzg1RDhERDI3RUMzMzhEQ0Q1MUQ1M0FFODNGNUJECis6MTA3OTgwMDA1NTZGMTM4OTU4QzRFNDMzM0M5RUUyMzkxQ0JGNENBNkEyCis6MTA3OTkwMDA3QzcyQ0RENjkxNzNCRDk0Q0U0RjhEMDlFQjIyRTU4M0Q5Cis6MTA3OUEwMDA5NUJFNzFDRDFBQjQ1NTdEMDJDOENENEFERkM0NjZFMERDCis6MTA3OUIwMDBBQkY1MTNGOUY3MUFDOEM0NTdDMzMyQUY5N0EyN0MzMTlECis6MTA3OUMwMDA2QzRCNDMwQ0VBMTNGNkFGQUNCQzBFQ0NFQzcwOTFDOTE3Cis6MTA3OUQwMDAyRDY1NDRDQzFGNEFEOTMxQ0M1QkZDQTE5OTlENzc4MUEwCis6MTA3OUUwMDA5NEZFNDY0QTg3NjI5OTc0QzlGNEJBNEI2NUY0MzM1QkQ2Cis6MTA3OUYwMDA2NDhDMTdEM0ZCQURDQTU0QTA0QjNDOENFNzJCNUE5OTJGCis6MTA3QTAwMDBERTFGRkJBMjA3RTNDRUM1QjVFMTNCRDEyRkQwNEI3MTAyCis6MTA3QTEwMDA5RjMyOUEyNDdGMzAyRjdEMDlGQzQ2QzcxOUFGOTM3MjlECis6MTA3QTIwMDAzODg3RjA2MzJGOEIxNzE2QUY1OEI2MUVERTkzMzI5NzQ4Cis6MTA3QTMwMDBGODcwNUYyRUIxNzM1MEU0REIyQzRFQkQ0QjRDQjQ2QjMxCis6MTA3QTQwMDAyMEU3ODE2MkE0RUZBRTAwRTMwQkYzRTE1MkU0OEJGRDhCCis6MTA3QTUwMDA2MkM1NjU3NzQzNUM1MjU4QjNGNTVGODBBRUQ5QzUwNDAzCis6MTA3QTYwMDBFODBBRjdFRkExRjdGNzczN0E0QUQ5MjExREU4Qjc5RjIzCis6MTA3QTcwMDBEMzMzOTYxMDREQTg4RkIxRUVCRjIwQUNCRDEzRTQ2RDhCCis6MTA3QTgwMDA5REY3RjkzOTFBQzVFQjcwNEYzODNFOENEMkUxNEVFRkI1Cis6MTA3QTkwMDBGM0IxNjAwMUQyNjE4QzQ2RjE3RUU3OTY4RTk4MzY4QTBBCis6MTA3QUEwMDA4RUQzMTgxRUExREJEQUUzRkY0Q0JEMTFDQzRGNzZBMEJDCis6MTA3QUIwMDAzQ0NCRDkwRkFGMDM3OUE3Q0Y1RkQxRTgzQTlGQ0FFMTlBCis6MTA3QUMwMDBGQTgyM0YyRjFFOTNENDFGNjE0MjZEOERENEQ4QUI0RkU1Cis6MTA3QUQwMDAzNDZBMUY4QTZERkRFNzUwN0RGMEU0QTNBQzhFRkQ3QTE5Cis6MTA3QUUwMDAzQTFGQzgzQjVEMDdFNjdGN0IyNkM4MDlBOENGRjI1MTQ1Cis6MTA3QUYwMDA1OEMwNkZGMTREMUM4M0Y1Nzk3NEREMDRGQzkyOUU4OUFBCis6MTA3QjAwMDAzMkRBNTkyQjhFRUQ5OTIwNjI3QzA5RkEwMzNGRjg0NjUwCis6MTA3QjEwMDBCMUZFNTQ1MDIyQTAzN0U1NDIxOUY3QUJCMkI0MjczQzZFCis6MTA3QjIwMDBDMTgwRjAzMUNCRUIwQUZBNDIzQ0I3RUEyREIxRTU3MUU2Cis6MTA3QjMwMDA0OTZGMUQzMEI2OEJGMDMzMzc4RUY2NTg0Rjc3ODE0ODNBCis6MTA3QjQwMDBGRENBRENFMzBCODVEMTc0QkMzQkJDRENERkNFQTVGRUZCCis6MTA3QjUwMDAzNkJEQkZERUNCRjREMkZEMTFGM0NCMTBFMjIwNDY3NzY5Cis6MTA3QjYwMDAwMUVBMjcxMjk5MEFEN0ZDOUI4QUYzQTNGREQ4QTVCRTg4Cis6MTA3QjcwMDA3RTc1MzdGQTBGM0JGQ0E5Q0Y2OTRFRjdCMUZEN0M5M0I4Cis6MTA3QjgwMDBGRjg4MEVGQzU2NEZBOEZDODM1Q0U4OENERjJDRkQ2MTVGCis6MTA3QjkwMDA5RDRGNzBENzEzNUJGQTQ0Qzk2NjZCQUM5QjVGOTEwRjI2Cis6MTA3QkEwMDA3QTQwRTZGNTQ5QjIxRUQyQTFCRUIyM0M3MzFBRkE3RDA0Cis6MTA3QkIwMDA0RjdBOTlERTkzMEU1RTc5MDM5Q0QzNTBGRjk1RTU4NTRECis6MTA3QkMwMDBGNjc4QTMxODRGRUEyOTIwRURDMEFGNzIzMDRDRUNGOURCCis6MTA3QkQwMDA1RjRCMUZCNDM0Njg3ODdENjJFQUI4MEE5MDkzMjdBNjk5Cis6MTA3QkUwMDAwRUFGRDBBOTBDMUM5QUY0RTMyRUM4MzM5RERCQzNFNDdFCis6MTA3QkYwMDBGN0RDRTFEQkYwRkNFMzM5OTNDNTlCODBBRDMwMkVEOTk3Cis6MTA3QzAwMDBGOTA4OUVENzdENUM4RTNDODg3NUI1NTAxRjQxNDFEQURFCis6MTA3QzEwMDA5NkVEQUNERjJBRTY3ODMxQjk3RTZBNTZEOEYzQ0QwRDAxCis6MTA3QzIwMDAyQzdFQUM1RUI4MUNFMzVBMkFEN0UzOUVFOEFENzg2RTkyCis6MTA3QzMwMDBDMzQzNkQxOTlDQUZENDg4NjlCMkVGMUQzMDNDNjg4NTkxCis6MTA3QzQwMDBDRUVGNjFBODE3MjZFMUZCQTY5N0M1OEZBQzdBMTE3NzE2Cis6MTA3QzUwMDA1RDg4MDVDRjBDMEU0RkRGNzMxOTRFN0E1OEZCMkY4QkMyCis6MTA3QzYwMDAwRUQ2RkI3NTQyMzg1RkVGODc2RjZBMkU0ODI0NjE4QjEyCis6MTA3QzcwMDA3RkY0RDY3N0FCNzhGRjJDRDRDNTY3NDExRDRGMzQ3RTk3Cis6MTA3QzgwMDA3NTExQzg0MTAyRjc0NzVFN0YxRDIxRkNGQjRBQzhBNzVBCis6MTA3QzkwMDA0MUI5Qzc1RTg3OUVFMUFBOEJFRjIzMkY4NkIzRURBRTc1Cis6MTA3Q0EwMDA4QjU4MEZDQ0MxRUJGOEIwOUU1NTI2REYxNDI4QkRDRjAyCis6MTA3Q0IwMDA2NEZDNzYwNkY4QjUzNTU0M0Q2ODEwMjA5MjREMURFNkZCCis6MTA3Q0MwMDAzRkNCRkQ3REY5QzVCQkMzMjMwRDFCOUYwQjg2NjM5Rjc3Cis6MTA3Q0QwMDA1MDdENjAyMUM2MTE2QUY2RkJCMURFQkYxQUY0REY2NDg1Cis6MTA3Q0UwMDAzODM3NjA3Njc5MUNFNzA1QzI5RDUwOUZBNzFDNjBFMzdBCis6MTA3Q0YwMDAzRDA5RjBEMEZCN0ZENEFCMEE2MEREQzc2MUZGOTMwNzdECis6MTA3RDAwMDBGNjI0MkFCMTQzMkY4NzExMEYzMTZGRjgxOEQxOTkzRTBECis6MTA3RDEwMDA5MzI5NEZDNEIyMkQ3RDU2MUQ4MzBEQzMyRTk1MzhGQzdCCis6MTA3RDIwMDBBNTVEM0VERUY2NTVDNzYyQTVCREY1MUZDN0I1RkY4NzQ5Cis6MTA3RDMwMDBGQUNEQUFFRjM4QUVGRDA3RkE0M0JCRDQ3ODI3RTgzQjZCCis6MTA3RDQwMDBGMzA1OEYwMUY2OEJCRThGRTc3N0NEOTUyNTY4MDc2MjI3Cis6MTA3RDUwMDA0NTY0MDRFMEUxOTU2QzE1RjU1Q0VDNzlDRjNFRDA3Mzk5Cis6MTA3RDYwMDBCM0I1RTg5QjlBNkRERjcwMjZGQjhERDFCMEZGNEEzMTI5Cis6MTA3RDcwMDA5RUU5MTg2RkQ0RDBDNkEzRjM3NzAwNUVBREU3QUY2NDc5Cis6MTA3RDgwMDBFRkMyNzM4QkY0M0QwM0YzODY4NTg3NDdBRkExRURFMTI2Cis6MTA3RDkwMDAyRjc4RjBEQzkwQjVERjc0RjM2NTNFOTdBRjE2RDc3OTk2Cis6MTA3REEwMDA0MDE1RTRDRDBGRkFCNjE2RTVDQzEzNzRFNkMxMkNCOTM0Cis6MTA3REIwMDA1MzJGNEM3MEU0MDM5RTA0M0I0QkU5QTdDQTUxMDg1MTcyCis6MTA3REMwMDBEMkU3QTVGOERDRTQ3Q0Q2QzJFQjExRDJDRjkzOTM2NjYwCis6MTA3REQwMDA5RTJCNTA5RUQzQ0YzMzgzQ0IzQkUxNzIyQ0VCQzlFRjZDCis6MTA3REUwMDBDMkY0NzM2RUQwOUQyNzcxRUIyOUVCNkFFOUE5NkY3MTFDCis6MTA3REYwMDBGRTk0NDlGNDBBMUY5RDY3NURBMjdEOUUwRkRGOEU0RUEzCis6MTA3RTAwMDAwMjNGRjgwMzhEOUQ4MzJBNjk3QkU4NjUzMENGREZGNDVDCis6MTA3RTEwMDA4NEVGRjc0RUM3NzM1RkZGRTRDRDFCQkEzQ0FDRjQxMTlGCis6MTA3RTIwMDA1RTk3RDk0NzBGMzFGRkVBNTZFNkFGRDZDRDlGOEFGRTVGCis6MTA3RTMwMDA1RERERjYzMUJBRkQ5Q0EyRkI1QTc1MjFDM0ExODc4NjkwCis6MTA3RTQwMDA3OTBERkVCRDNEMTNGNTUxRDU4NTAwM0VGRkVDRTZGM0ZGCis6MTA3RTUwMDAzQUNFQUZGNDlEQ0Y4RkNGQURGOUVFNzJFOUQ5NDM5MzBGCis6MTA3RTYwMDA3RUJBMEJDRUI5RDc3RDVGMTEzREI2NzlFQUJFQ0ZFQkI2Cis6MTA3RTcwMDBGRkJENTRFRjNBRTUzRDBDRjIyRTE3OTE2NDdEMTdFOEYzCis6MTA3RTgwMDA4NzZEQUFENTBFMzdDRjk5MDU3RUFENEQzRjk0ODFGRjAyCis6MTA3RTkwMDBENUZCM0U3Q0U3NkU5QjhGRjczNzJCNTNGN0NGNzBGNTAyCis6MTA3RUEwMDAxRjYzOERCRjEwRkJCQkUxNDlFQTFGRDg4RkQxRkVGMkUzCis6MTA3RUIwMDA5RjNEMTY3Q0E4QkYxRTEyNURFM0U1NThGM0RGODhFMzAzCis6MTA3RUMwMDA1OTdFRjc0NTZERURBQkE2MEM3QzFBMkY4N0ZENTNDRjdECis6MTA3RUQwMDA2REM0ODBFRjRGM0MyRTg3N0MyMTNCREY2QThDNUZBQjBCCis6MTA3RUUwMDAyRTVDRUFBMDc3MkZERUM3MzlFRUJGRDcxMDc0RDRFQjMzCis6MTA3RUYwMDBERTExQURDMzNBRUQ4QjNDRkU1NDQ1M0Q3MzdDNkZDRjM0Cis6MTA3RjAwMDA0ODQ3OURFRURGRTBGOEE0NzA1QzlEMDY4RTZCQkU2MDc2Cis6MTA3RjEwMDAzODhBMUNGMkQ5MEI0N0IxRTNGRTI3ODU2M0ExQzZGNDZBCis6MTA3RjIwMDBENzcyN0U5REFCQjM3M0IzNzMwRDIxRDQ0NDZGQ0RBNUNGCis6MTA3RjMwMDBGN0JEOTREN0JGNENBRjFBQkRDRTk1ODlFOUM3RUZBMjY0Cis6MTA3RjQwMDAyNjU4N0ZEQTg2RkRGRDBEN0ZCRUY3REQ2QjMxNTExNUJBCis6MTA3RjUwMDA3NEQ0MTU0OEJDQ0VEQkFENzdFMDlDMzdBQjc3RDMxQzJGCis6MTA3RjYwMDBERjg3QjNBRTNFODlENTZCQkFFRjdGRTg2Mzc4RjlDNjk5Cis6MTA3RjcwMDBFNUQ1MDRGQzY5RUFBQkE3M0NCN0I2Q0IyRkYwRUY3REEzCis6MTA3RjgwMDAwNjQ1NDc5QzlCQjdBRDNBREZDRjBBMkUzOTgzQ0RGNzI0Cis6MTA3RjkwMDA4RENCQUYyNzEwRDc5NTczNTM3RkRGRUVBMDlGQzFERjQ2Cis6MTA3RkEwMDBBMjg1QjE0RTNDQTZGN0ZGNUQ5QTRGMEFDRkYwMjQzQzY0Cis6MTA3RkIwMDBENzIwOUVBNDM0NzhBQUI1RTBEMTU5NUVCMDI1RjhGOTRGCis6MTA3RkMwMDBDMDUzOTI2MUQxQUQ3RkZDNkNFNTcwOTMwQjk3MjAxRjdECis6MTA3RkQwMDA0OTlDNEUyREIwN0Y0QkQxREZDQTdGQjQ2ODlGMkZGQ0U4Cis6MTA3RkUwMDBFMTQxRDJGN0I5OEMyRjg2QkU4QjA2NDlERjYyMkUwNzlFCis6MTA3RkYwMDAyREZBRTcwQkNGQUQ4Mzg0RTczQThCREY4MjYxQTREN0ZDCis6MTA4MDAwMDBFNzA1Q0Y1NzA2MDlDRjMxOEI1RUM2RTc4QjlGRDYyNDk1Cis6MTA4MDEwMDBGRkY3MEZDRjVGMzhEQ0Y5MTkyQzBFRDI1MkMyQ0U5Mzg2Cis6MTA4MDIwMDBGOEE0Qzg4MzQ1QzJDMDcyRTEyQjc2RUVCM0I1NDI5Rjc3Cis6MTA4MDMwMDBCM0NFRTY1RDY3REQ1N0JBNzVGRTlBQUYzMzlEM0NBREIyCis6MTA4MDQwMDA1NDEyNzk0MEJGNjMwRDJDMUVGMDA2REY5RkZDQkFBQUM0Cis6MTA4MDUwMDAyOTEzRTNGM0FFNzk1QTgyRkIzMkZCOEJEQkZDRjcyQTYwCis6MTA4MDYwMDBFN0I5REM4MUU0Nzg1MjA2Q0JGRkRDMTg3NUJFQjc3QzNCCis6MTA4MDcwMDA0NTg2QUI4RUNDQzQ3RTE2RkVEMjhERjdENzgyQjczMDQ0Cis6MTA4MDgwMDAyNDMxMDc4MTM3OEFBRkFDQTI3RUY2MEQ5RjM1QkVEMjcwCis6MTA4MDkwMDBDOURENTBGMTE1RDM4Nzg2QUY4MUU0RkQyQjQzQzQ5NzJBCis6MTA4MEEwMDAyNUFGN0ZBREY4Q0EwNzdDNERGRjFCN0YwRDE2NUY4Qjk4Cis6MTA4MEIwMDBGRTI2OEY0M0MyRDdBRDQzOTU0N0VFRDdGRUI1RTI2QkEwCis6MTA4MEMwMDBCMEYyRThERUI3RDFGRDVEQThCRkVGMEI3Q0Q2Rjg3MzQ4Cis6MTA4MEQwMDBDRkZGNjlGMTY4OERCNzMyQ0QzRTJGMUQzRTA3ODJDM0I5Cis6MTA4MEUwMDBCQTdFRTgxQjI0NUVEREZCQ0YyRjFBQUZBRUY5M0YzNTE5Cis6MTA4MEYwMDA1RUY5Nzg0M0M2RUIwMDcwNTg1Nzc5OTBGMjZERjk3NUM4Cis6MTA4MTAwMDA2RDZBRUFFRjg4OEVDQjY0REY3MTFCMkZENDFFOTkwRjQ2Cis6MTA4MTEwMDBGOUUzQkY5MzMwM0Y3RDY0Q0Y5QzBERjY3QUEwNzE5OTRGCis6MTA4MTIwMDBDQ0RGM0U1MjM5N0IwM0M0NEZDRjQ1MzJCMEY2RUNBOENBCis6MTA4MTMwMDAxOEZBRjkzNEM4MkIyRjYyRUZCOUM3M0ZDMkYxRTVDOTZECis6MTA4MTQwMDBDQ0I2RTJCRjc5NDBEN0EzOTFDNUZEQ0EyM0E5QjRBRDhGCis6MTA4MTUwMDAwQkYzNDYzNkZBNEE3REYxN0Q4NDE4REJBNzQxMUU2Mjk3Cis6MTA4MTYwMDA0MTZBMzgyQzNBQTc5Qjc3QThGNDNEMUE3OTdDNDhGQUUzCis6MTA4MTcwMDA2N0EwRjVGRTg3N0ZDQzIwRjU0RjAyRkJFNTkyRTRERjk4Cis6MTA4MTgwMDBEREI5MENGMEQ5MjZCMjdBQjhFMzcwQUIwMEJFRUI0NjhECis6MTA4MTkwMDBCMEQzRjIxNUY5N0I4MTRFNzc2N0IyRkM2MTg3NkE2Q0M4Cis6MTA4MUEwMDA4MEZDODk2N0YxODIwNzMyMjlERDhFMkVDRDE2RUNFNzNGCis6MTA4MUIwMDAyRkU3NjRCMkZERDc4QzU1QTlGNzVEMEIzOTFGRjRCRUNDCis6MTA4MUMwMDAyRjkwRjEyOUY4M0JDQ0ZCMkQ1REM1QkUzRjQ2RTRGMDc2Cis6MTA4MUQwMDBBODQ1QjY3M0E3RUI1RENGRkJEMDIzMzM4MDcwMUM0RDUxCis6MTA4MUUwMDA3M0VFN0YwMTdGN0ZGOTkyRkVERjI3QjVFQ0ZCM0U5NEIzCis6MTA4MUYwMDBFRjQ2RDlDRkJEMjZGOThDQ0JDNzE5N0Y3NDY5MjZCRDUwCis6MTA4MjAwMDBCRTIxNDRCRjczMUZGMEQxMDQzRjNCMzcyNDkzMjJBODAzCis6MTA4MjEwMDBCRkIyQzZDOTk1NDlBNzRBRjFGRUFFNjI4QzgyQkM2NjYwCis6MTA4MjIwMDA4QTcxNkVDRTlDOUU3RTlDNzQ3OEI1RDY2M0NEMDNBMjc3Cis6MTA4MjMwMDAwOERGRTk5OUFCQjEzOEUyQjQzMDIxQjMyMDdFRTgwOTE4Cis6MTA4MjQwMDBERENERjI4NzhDMEY3Mjc4MURFMkNDREE4QzQ0MjNFQzAyCis6MTA4MjUwMDA3QjY1QkE0RTFCQkMxREZGNzdGNjdGODNFNzFENDc0NDQ1Cis6MTA4MjYwMDAxRENGQjdCQkYwMzA5MDdFNjhDQTY0RjlFNDVDMjlCQUQwCis6MTA4MjcwMDBDOTBCNzk5M0Q1NDJDQUVGRDg2RENDNjQ3RkVGNjg1MkIxCis6MTA4MjgwMDA2NkIyNUUwQUU3MTlCNzMzQUFDMEY3MkY5NkM5MkNGRjZBCis6MTA4MjkwMDA0NTQ4NzRENDQyREJGQzkzMzhCRkI5REZDQjk1NThCRDU5Cis6MTA4MkEwMDAxMTc5OTNDOTczREJCRTc1QTM1MkM5Q0YyRkI4OUM0RTA5Cis6MTA4MkIwMDBDQTJDNzFENDM5MkU4OURDQUQ4MDdDMkU1OUIwNTAzMTU2Cis6MTA4MkMwMDBGQ0YwRENDMEYxOTc3MjM4REFENEU4QTgyOUZFNUUzQ0Y1Cis6MTA4MkQwMDBBNUQ1NDMxQzNGMURDN0EyNERGMEREOEZENUY1MDJENkI1Cis6MTA4MkUwMDAwOTk0NkU2NDdDQjc3QUUzNDE3MTAzQkRFRUU1RjJCN0ExCis6MTA4MkYwMDAxMDY4NjAxQkVGQkI5Q0FFNkRGQjdDQTMwMUZFQjY2NEY3Cis6MTA4MzAwMDBGRTg2MEU0Q0UxQjg3OTM3QzE3Q0M4OTNEQjRGQjc0MDhECis6MTA4MzEwMDAzRUE0NUIyMDNDN0Y3MjYzMjVENDM1NzRGM0ZBQjY5Nzk0Cis6MTA4MzIwMDBFOUYzNDZDMERGOUMzQzk0RUY3MTFCM0ZBQzAzRkREQ0RFCis6MTA4MzMwMDBBMTEyM0MyRkYzQkIyRDlFMDQ5QzI3QjBGODI1QTkyNzQyCis6MTA4MzQwMDAzNjlFNkY4MEZBRTE0N0Q0Q0U4OUMwMzc3OTREQjVGN0I0Cis6MTA4MzUwMDBBNUNBOUZCRUM0RTlGMDQ3N0YyNDJCOTUxRjY4NUQyREY5Cis6MTA4MzYwMDA3RDZFRjU1QjI0MUI0QUFBRkU4QjJCNUQ3NjhEQzMzRDhCCis6MTA4MzcwMDBDQ0QzNzk4NkE0Qzg2MzI2RjkzMEQxQkY5RkY2NEJBRTIzCis6MTA4MzgwMDBDNzdGRTFDQUYzMkUzOTk2M0FDRUY4MkJDRUJGNkQ4OTVFCis6MTA4MzkwMDA4QUY1NjhCNzRDMEY5RTQzQjFFMEIxRjA5NTZCMzIzQzYzCis6MTA4M0EwMDAyRDVCMjIzOUY0RURFQTA1MTkyRUJGODdFMUY1MDY4RjIyCis6MTA4M0IwMDBGMTI4QUNFMzkxN0QzRjlEODhFN0E4NUNGNkMxMjc0NTk1Cis6MTA4M0MwMDA1NTc4N0UwN0U5NTQ0MDRGQkMyRjE5Nzg3REEzQzFGOTM5Cis6MTA4M0QwMDA3NzVFREUyMEQxRUREM0MxN0VENjRCMjlFNUVBOEY5Q0I2Cis6MTA4M0UwMDA3RkRFNTg3MUNCNTI4NDNGMjZFOTAwRkY4OTU1QzNBRTJBCis6MTA4M0YwMDAyRjAzRkRCMjQyMDlDMTc3RDM0RkM0RUVDREJDQ0RCNjM5Cis6MTA4NDAwMDBGRUE0NUZFMzgyRUJENzU1QjdGNDZCQjc5NkFGNzBEMjlCCis6MTA4NDEwMDBBRDRENjU3RTgxNzkxRDkzQzMzQjI5OEZDRTQyRkVFQTI3Cis6MTA4NDIwMDBERTNFOTNDRTdGMjQ5MTMzNjUyQkVCNEVFMEVGNEMyRDU3Cis6MTA4NDMwMDBFNkJGQkYyRjQ2NzdDQ0E0RkFFNjk0QzhGMjI0RTY1N0VECis6MTA4NDQwMDA5OERFNThCMjMzRDIwQ0E5RDM1M0Y1NTdCQ0Q0NERGQkE4Cis6MTA4NDUwMDA3OTAzOENFRjdFNUJERkJGN0Q3NEYzRDNCODlENEU3RkQ1Cis6MTA4NDYwMDA2RkM2MzFBMkMyRkJEMUJBRDRGNkUwREI3QTA2RkY3QjNECis6MTA4NDcwMDA2MkExRDFBMDVGNkVEQTk4QkFERkZGMDI2NkE2RjA5QzE3Cis6MTA4NDgwMDBGQThCNTQ5NTJBM0U3OTk1Q0VFMDVEMUQ0OUZERkU1NTQ3Cis6MTA4NDkwMDA3QTI2N0IwRTc2MjkwNTlFQ0YwNTMyQjg5RUQzNDc4Mzc4Cis6MTA4NEEwMDA5RTVFOUQwNkRFMEYwMzAxODRGNzlERTZGQjZGODIzQTE4Cis6MTA4NEIwMDA5MEY3NURERjgxN0YyN0MwRjhFMjYwODBGMUY3QTk3RDRBCis6MTA4NEMwMDAyQjk1M0NBMDUzOEJBMDAzM0ZCQzlEMUQ5QTAwRkNCNjhFCis6MTA4NEQwMDAyNjc2MDJDRkJCMUNFMDc4N0VEMzE3OTkxMjk4MEVGMjU1Cis6MTA4NEUwMDBCMjY4NkUxRUE1NEJDNzJBMTIxMjhDRjRGQUZGQ0EwMDlFCis6MTA4NEYwMDBGMzFCNzI3OUJDOTZEQUJGNzdDMUZFRDE1N0RGNDVGRjE3Cis6MTA4NTAwMDA0MzBFOEZCRTcxMjIyQjgxODIzQUYwNTNBMkI5MEVFQjNCCis6MTA4NTEwMDAwQ0Y3Rjk1ODVEMjkwOTREQjdGQkYxNUZFNjcwOUNEQTVECis6MTA4NTIwMDAzRjM0N0EyRjhEQjhGQ0EwM0VGRTVGQkMxQUU3REQ5RjdBCis6MTA4NTMwMDBBMTQzNURDQTkxNEFBOUYzNUEwQUU0QzlGRDE5Rjg3RDFECis6MTA4NTQwMDA1Q0I3NUNBNDlCN0ZBODdFRTBBOUZENDNGMzAzMDc1QUI4Cis6MTA4NTUwMDBGNzg2NDBEMUEwRkNDMDczOTU4RkVDOTgwNjcyQTRDNjM0Cis6MTA4NTYwMDAyN0E1RDJCRjk2OUUzRUNBRTNFRjZFRkVCMUFFNUZFNTkxCis6MTA4NTcwMDA3Q0Y0N0VBMjdGQjhFRUQ4RUQ4NEU3QTY1QTI3M0M5NjFECis6MTA4NTgwMDBCQ0JDOUY2OEYyQUQwMTNDOTFDRTg5NzZCRjk0Q0M5OTdBCis6MTA4NTkwMDAzRTgwOUQ2NUY5QTk3NDcwNkU3N0U5MDlFMDNDQTBDMzNGCis6MTA4NUEwMDA5RDVDREZGQ0I2RkU5MTgwOUQwRUVFRjU5RjEyRjlGRUZDCis6MTA4NUIwMDBFMDUxNTY5NzNCMzZCMkE2MjJDRkU4RTVDRjZGN0Q0RTBECis6MTA4NUMwMDA3QzY5RDkxOUY3MzhGRkQ5RjlEMEIyNzMwM0YxNjE2RTFDCis6MTA4NUQwMDA5QTNDQ0UyNDM4RTg0Q0RGNUYyM0VCMkFFNEVCMjcwNUY2Cis6MTA4NUUwMDAwQ0Q2MjZGQTNDMzhBQTQ1Q0E3OEREMjgzMTQ2QzNGOUFDCis6MTA4NUYwMDBBRjUzRkI3Q0Y4RjdBMUNDQUQ5RUM0NTgyQTAyRUZFRjM1Cis6MTA4NjAwMDBCQjdBODI3RDNEQkZFMjdDQkE3QTQ5MzY3RTdFRTI3RENFCis6MTA4NjEwMDAzMTM0M0YxRkVCQ0UyNEZDOEVEQjFCQzc3MkU2NDFGQkRGCis6MTA4NjIwMDA5MUMzMjI2ODY4NzI1M0REMUEwOUQ2Rjc0NjgwRUQzQjg0Cis6MTA4NjMwMDA1NzZGN0MxREZEQzFBMUYyRjlFQTVBQTdGREJGOEFBRkIxCis6MTA4NjQwMDAyM0U5NjdDOTNERDM4MDdGRDJFMUUxMzU4RTg3QTU5MUNCCis6MTA4NjUwMDA4NTczNDEzRkRGQjI1MTQwN0RGQjEzMTg4NzJFRTQxNjJFCis6MTA4NjYwMDAzOThDN0E5QkM0OTg3RDI0MUFDNTA3MzUyMTI3NjAxMTVGCis6MTA4NjcwMDA4MDhGN0ZFMERGQUQ5MjIzQUFGRDlDREM2RERCRUU5RjU3Cis6MTA4NjgwMDAwQkZFQTE1QjVFNTY2NDMxM0VBRUM4NjI3NkUxNEQ1RjgzCis6MTA4NjkwMDBGNDBGQTBFRjJERkRGQ0I2NTA3QjMwOUY3NkQ5MThEMDlCCis6MTA4NkEwMDBBREVGMDRBMzlDNUFFQkQ5QzhFMUEyN0VEQUIzRjhGRDgyCis6MTA4NkIwMDA2MkJFM0VEMkUzRTIzNzMxNUVGRDYzQzA3Rjg1ODY3RUQ3Cis6MTA4NkMwMDA4MUNGNDNGNTNFRDQ0NTNGRUVDMzNBMkE0QkFFMkM3RkQzCis6MTA4NkQwMDBDN0ZERkUzMjM5RUFGMDFCMzNCMzhBMUNGRUJCREIwRjQ5Cis6MTA4NkUwMDBGOTlCQkQ0OERERkY4QUFDMkZENjVFNUM5QkY1RDlEOERGCis6MTA4NkYwMDA4QjYxOUNDRkRDNzYyMzI5RDcyREVDM0NDODg5NjMxRjg2Cis6MTA4NzAwMDBDRDREMjVENzkxNEYwODg3NUI5RURGREZFNzYzREY0REI3Cis6MTA4NzEwMDBCRTI2MTNGNTRFRUY3RTJBM0YwMUZCNjVCNzVDQzA3RTk3Cis6MTA4NzIwMDAwQUJFRkJGMUM4QkU5RjREODRCQURFMTNEQkVGQkYyOTQyCis6MTA4NzMwMDAxNTNENjdFOUNDNkYyMkRERjk4RTc4REVEQTAwQzFGQUVCCis6MTA4NzQwMDA2RjQyRTc3QkMyMzZCRUY1NUU1MjVFMDY4ODVGMkU1QkU3Cis6MTA4NzUwMDA3OTI1RUUyN0RGNTg3OUY1RTgzNUE1N0RGNzE1N0RGQUZGCis6MTA4NzYwMDAwQkQxN0Y1ODBBRjMzNkYyRkRGNDBFNEZENUJFNTRGQjAxCis6MTA4NzcwMDA0MDhFRDdCRTcxNjJBNzdGQkY3NDYzNzkzMzZDQTkzNzBGCis6MTA4NzgwMDA2NTVDRjNBNTY4OEFGOTkzRkI5QThEQTlFMzcxMEY3MjcyCis6MTA4NzkwMDAzRDk1RENENzk4NzQ1RjQzRjFEMUJENEEwQTk0NERFQjA3Cis6MTA4N0EwMDBEREQ3NzQ5QjlGQ0ZCRUU2NzdBNEU3RTczMzUxRkU1MzM2Cis6MTA4N0IwMDBDM0Y3M0Q4QkJGRDRFODhFMkIyOTdDQTdFOEZFQzcwNDA2Cis6MTA4N0MwMDBGOTExRTk3QkMwMkZERjRBQkQ1RjdCOUNCRkY3QkI4REYyCis6MTA4N0QwMDA0M0Q0NTdDNzlDRkI5OTc0RjJGN0JEQ0Y0OEZFREFENDU3Cis6MTA4N0UwMDA5RTUxQTAwNzdFQjdGN0UzQjdFRTg3RjVFQ0Y1MjFCRTAzCis6MTA4N0YwMDBEREUzNDQ3NDg5RUYyRjdDQzhCNzk2N0RFRTUwOTlGRTc3Cis6MTA4ODAwMDBGRkREREY4REMwQkY5QkVEOTYwRjQyRTJENzVGNDU5RjM2Cis6MTA4ODEwMDAxRkRGMjc0RTgxRUYyQ0I2RURDQkE4NEFCNUNGNTlBRjVECis6MTA4ODIwMDAwQjNDQkVFNDhDRjcxMEVFREYyREU1RkNBNkVGN0JCQTI3Cis6MTA4ODMwMDBENjFFOEY3RTkzRUIyQjJCMEVGMEJGQjM5ODlENURCMkFGCis6MTA4ODQwMDA2MEExMEFGMTlFREI5MkYxMjY4MjlCMTVGREIyQzJCREFBCis6MTA4ODUwMDBGMEZEOEI1RkYyRjM1Q0U2REFDQzk0RTdFMzdFQzNGMUU0Cis6MTA4ODYwMDAzQjUwMUM2MkM1MkE2NzlDNjBDOTgyRkVFRENEQzk0NDlECis6MTA4ODcwMDBFQUJBMkM4QjlGRDNDRDM3NTRGQkQyOTYxODVBNUU2QzM0Cis6MTA4ODgwMDBBMDc1OEVEMDA3Njc1Rjk2OTJEQTJGNDFCQzYzMTkwOUY1Cis6MTA4ODkwMDAyOTcwNUQ0MjZBMjdGRTk4QTJGMkU0RUVDNTA4Q0YyRjQ4Cis6MTA4OEEwMDBBREJGN0ZGQ0YxQkQxM0VEN0VDQ0ZGMDcxMEY2NjcyNzRGCis6MTA4OEIwMDAwMDgwMDAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMDg2Cis6MTA4OEMwMDAwMDBCREQ3RDBCNzg1NDQ1OTY3MEREQkVGRDRBRDI0OTI0Cis6MTA4OEQwMDAzQTlERUVCQzA5MUQwMjA4MTg2MjA3NDIwMDFGRDAyMTE0Cis6MTA4OEUwMDA0NDgyQjJEQTgxMDA0MTUxOUE4NzE4NDk0OEEyRTJDQTBCCis6MTA4OEYwMDBGRUJBNDM4NzIwNDY3NDY2QzJBQThDQkZFM0I4MEQ4MkQ1Cis6MTA4OTAwMDBFQjI4NkFBMkQxNDE4Q0Q4QTBGOEQ4RDU5REEwQUU4QjE3Cis6MTA4OTEwMDBCM0U4NDZDNzQxNUU0MzIyQTMyQkIzQ0IwQ0ZGMzlBNzc0Cis6MTA4OTIwMDBBQUQyRjdERTc0NDM3MEM3RkRGNkZCRTMzOEQ3QkFCN0I3Cis6MTA4OTMwMDA5RUU3N0Q0RTlEQUFCNjM5MTVDNjNDOEM3RDVCNzNGQkM4Cis6MTA4OTQwMDA1RjRENjI4Q0ZEQUJCNTc5QkNEM0MxRDg1OUZDOUIxRTgxCis6MTA4OTUwMDA3REZFQ0IzQUM2MjIxNzMxRjZFMTNBM0I4QkQ4QTAxQ0ZDCis6MTA4OTYwMDAzNjU1ODU2M0Q0RkI1M0FBODkzMUU4RTg1RkUxQzE0QUYzCis6MTA4OTcwMDAxOTBCMkQ1MEMzM0I5NEMxRjVCMjcwNUNBQ0I3Nzg1RTU3Cis6MTA4OTgwMDA2QTMwNDYzRkYyQjlBMDQ2NjUxMTNCQTNCRkIzRjA2RjEyCis6MTA4OTkwMDBDRDlDMjQ1REY5MjJBNzUzRjREMzlBMTgyQzYyRUM4ODVECis6MTA4OUEwMDAxQ0Y3NTEzRUVFOTEzMDdGMkZGQkJCNDg4QzdCMjQ3QzIzCis6MTA4OUIwMDBFRTcxNkY3RTA0QzYxRDEzMURFNzg2NjZGREI4QkQyQ0UzCis6MTA4OUMwMDBCNDhBQjk2MTlDNzBBMjczNDcwMUMzRkY4Q0Q4MjY0NDU2Cis6MTA4OUQwMDBEQkVGNzU5QTA4QUVFQzQ4QTY4OTY1MzA3Njg3NkMxQjhDCis6MTA4OUUwMDA2N0JDMEYwNTdDOERGNTZCQ0M3RThCMTYxRkI3QTc3QTA1Cis6MTA4OUYwMDA2OUZFQjI1QzMzNDczRjRGNkY4QTkzOEZDQjlDRjk4MUZFCis6MTA4QTAwMDA2NEM2OEU2RTRCRjQxMzNDQTYyNTg3NDdDMTNDMkJFRDA0Cis6MTA4QTEwMDAyQ0U0ODA3OTNFRjhFNEM1OUZCMTExOEMyRDEzRjhBRjlBCis6MTA4QTIwMDAwOTdDNkQ0MTc4MUMzNUY1REY5MzhDRUJGQUMwRTREQ0YyCis6MTA4QTMwMDAwMTQzOTUxREY0NUJCNEYwQkIyQjg1QzNFRkU4RjY3M0RGCis6MTA4QTQwMDBDM0VGQUUxNDNFQ0Y3OTU1RkFGOUNEM0Y5OEE4MkIxQjUyCis6MTA4QTUwMDBEN0ZCRUY3RjdCRUYwNEVDRjdERkZGRjYzQjhCQjZGRjM2Cis6MTA4QTYwMDAwNUE3NzM1OTI0M0Q1QTVFNTJBQkY4QzM0NTgzQzc3REIxCis6MTA4QTcwMDAyOUQ1M0EyNEI4QkY2NDgwRTM5MkQzRjlENEJGNUI2NUFCCis6MTA4QTgwMDBDRDFEMzFENjU1RUVCNDUzRkRGOTgxNzI4QjA3RTBCOTk3Cis6MTA4QTkwMDBGQzZFQzVBNzQwMTczMzlDQkM5RkU1NjZFNkVGODBGOUU2Cis6MTA4QUEwMDAzMEIzMzdCRjFBRTBFRTY5NkRCRTIzMTBBMzlGRkYyM0RBCis6MTA4QUIwMDBFMEZEOEQyMzkwMUE4QkNGRTRGMzYzNDEwRkIyREUwMjA5Cis6MTA4QUMwMDA3M0QwMTJBQkZFQzI1QTNEN0M3QjE5QUI4QTM1RkYxRkI3Cis6MTA4QUQwMDAzQjM5NUYwRTk1MUVFNUY4QzZGQTQzOURDN0REODIwRTUxCis6MTA4QUUwMDBEMzZEOTFERjMzMTU1RTlDODA3RUNBMkU2MDVDNDM3RDIyCis6MTA4QUYwMDBFM0I4RjczQkY1RjgzMzhFN0ZGNENGNkE1RDJDMzhCQ0QyCis6MTA4QjAwMDAyNkY4M0YxODAwRkE4OUY5M0Q5OUJFN0ZDMERBMUI3NzM1Cis6MTA4QjEwMDAxMzdGMjdGOTc2MjAxOEI2MkZGRjA5QTA5REFEOUM3RDA1Cis6MTA4QjIwMDBDNzVCRjA5QTI1QTYxNEQwRkExNjA3MEU1NDEyQkI5RDA3Cis6MTA4QjMwMDA3OUIwMThGMUZFNkRENTgzM0YyOTg1QTkxREI1MDY1Qjc3Cis6MTA4QjQwMDA5M0ExQzFEMUY1OEEyRkU0MUQzQ0NFMDdCODRFOTBBMzY2Cis6MTA4QjUwMDAxRkExM0NCRDA4RkI2MzlDNkU2N0MyRkY2NTMzMzY0NkIwCis6MTA4QjYwMDBGNUQ3QTM1MDYxNzdEOUJDM0IzNDdDRUI1RUZCREQzQTkzCis6MTA4QjcwMDA1NkNDRDg1M0Q2QzBGQTY0NzgzRkZBRUVBRkQ3MzA5NENCCis6MTA4QjgwMDA3OTJDNENGM0ZFQzJFMkJCODVFMENEMThGMUZEQTE2RDVFCis6MTA4QjkwMDA4RUFEOUJBMDVFNkEwQTk3OTM4Q0Y5RjIwM0UzMzU3MjVGCis6MTA4QkEwMDBDMkVDQTRGMjUwRjFGMzYxMUNGQzVDQTg5QzkyRUI4QzJCCis6MTA4QkIwMDAzNzBFNDA5RUU2Mzc3Nzg2QTM0RDQ5NjVBQ0NCRUFCREJDCis6MTA4QkMwMDAwOUQ3RDMzRjNCQzFCOTBENTAzOEQ3RUFCRjFBRTFGM0ZCCis6MTA4QkQwMDBDMTAxOTNBOUE1ODBCQTM1MjM5RENFRTM0M0IwODI2QjMyCis6MTA4QkUwMDAwQUVFMUY1NzhBRjJDN0UyNEY4MEE5NTQ0MzFCMzYxNTdECis6MTA4QkYwMDBFODY4ODYyMzg0RkQ5NTdFMzhFNzE5QzRDRjgzQjUzNkFGCis6MTA4QzAwMDBBRjhBRkQ0REYzN0VBQTQyNzlFRTU1MzZFRjdBRThBRjkyCis6MTA4QzEwMDBBQzY3QzQ1RTM3RjQzRjdGOEVFMjY0RDA3RUU2RUM1MUYxCis6MTA4QzIwMDA5RTVFNTg1RkQyNUFFODI3MDc0N0I4QjdBQUMyQ0NEODg5Cis6MTA4QzMwMDBEM0Y4OUY5NzMyM0U2MTgwQzU1QzQ1OTY1RjZDOUIwOTc3Cis6MTA4QzQwMDBGMjYwOUNBN0NCRTQwMDUwQUY0QzdCQjFDRDBFRkRERUIzCis6MTA4QzUwMDBEMzEyQzg3MkE2QzFEMjM2REZENzY2MUZDNjU4NDY4NjYxCis6MTA4QzYwMDBCRjY3QkE4RkIxRDk5QkVGQUZCMjVGMDFFQjdDNTRCNDUxCis6MTA4QzcwMDAwRjNERDBFNkNGNjNFQzU1NTNCMDQwODFFRkNEOUI3N0VECis6MTA4QzgwMDA1NDk5MDE1RUVFNDIzOUZFMkI2REZFQ0I2MTNENTdEREZFCis6MTA4QzkwMDBCMjYzMERGNEJGMjVFRDlGQUFDQzM4RUZDNTcyRkM5RUUwCis6MTA4Q0EwMDBBQThBOTEzMEZGQ0I2NUY5NUZFQzM4NUY3NzkyNkMwRjQxCis6MTA4Q0IwMDBGMzlEQzI5ODY1NDQ3NEZFRTYyQzE4REYyNUNCOUY1NEMzCis6MTA4Q0MwMDBDRDg0RjEzRjJFNkZBRTMwQzNGOEM3RDJGRUJEQUQ2ODg0Cis6MTA4Q0QwMDAyQzYzOTNFNzk0M0JGRDUwRUVEQkZDMUY1NTQ5ODA5RkNFCis6MTA4Q0UwMDAyRTA2NzQwQUU1M0Y2QzNFNERGMzc3QUIyNkRFN0ZFODM3Cis6MTA4Q0YwMDA4RjM0QkZCMkM1QTE3MUY4NUQ2MTdGNkFBQjgyNzVBRjc5Cis6MTA4RDAwMDBCNkY3QkU4NUU0REFCNDM2NjRDRjQwOTFBNDcwM0FCMUM4Cis6MTA4RDEwMDA1QjlBRkRCOTAwM0JDQkFFRjI0ODJFNERBNzlERDM2QkJECis6MTA4RDIwMDA1RTY0M0NFQUIxODFGMjE4Mjg4RkQ3OTRCMzc4Qjk2QkFFCis6MTA4RDMwMDAzRDVCMTI0QkRFNzZCQUI4MUVFRTRBOENGREJEMjI4RDJECis6MTA4RDQwMDBDQjAzODAxQkU5OTNENDgzQ0NCRjMzODY1RTE5OTdFNkFGCis6MTA4RDUwMDBBMDdFRjYyN0IyOTBERDE1RTVCNzZCODE4N0E3MDA1RjhGCis6MTA4RDYwMDAzMjNCOUZBN0VDNjc5MEZFNDhFMzcyOUY4NUFFNzUyMTZBCis6MTA4RDcwMDBERkNDQzEyRTYwRTk4NTNFMjU4NDc0Q0Q5QTkzQzJBM0QxCis6MTA4RDgwMDA5MDc2NThDNDNDMEZGNTg3NkFBMkY5N0E1NDY1NDkzNTQ0Cis6MTA4RDkwMDBGNDk3OTFDODgyOURGMEY0QTQzMzJBNDM3QjdGQTcyM0U0Cis6MTA4REEwMDBEQURGN0I4MkVFMkIwQjAzREJCMUJGQ0FDQ0VDOTJENkIxCis6MTA4REIwMDA4MjY4M0YzMEVGMERGNjA5QkE3OTlCQTdCOEYwRkJEQzZCCis6MTA4REMwMDA5MjVCOEIzNEYwMkNFMkVCMDAzQUEwNzYzMENDMzNEM0JDCis6MTA4REQwMDA4MTBGQkE3QUM2OEREODA0RjNGQjA2RTVBRTI3QkFBRThBCis6MTA4REUwMDBCMjlFQjkxNjA2RjVCNkI4ODQzQ0YxRjJGNjlFMEEyRThDCis6MTA4REYwMDA3RkZBNkY0RDBBNkY0M0ZFQjRGQjRBMTA0RkIyREQwRDkwCis6MTA4RTAwMDAwMkVFMTVGN0NFRjkxOUQ2NkJFOEIxMzAxQkQ0NUJEMzVGCis6MTA4RTEwMDA1OTlFQzlDRUExMTcxQjRFNUZDNkMyMTMzNTY1NzNDNEQ4Cis6MTA4RTIwMDA4QTcyQTdFMUY0MzQ3QTVGNzFFRjdCNTZFNDUzRUNDN0EyCis6MTA4RTMwMDAwQkVCNUE5M0UwQ0ZGNDIxREM1QTYzRTM5RkIxMTY5QTBGCis6MTA4RTQwMDA0N0MzRTkzNDE2OUFBODdEQ0ZFMTE0RURERjREREZDRjlCCis6MTA4RTUwMDBCN0FFNjg3RjJBMEJBNzlGQUIzRjJCN0QxRjgwQkI1OTA2Cis6MTA4RTYwMDBDMEREMUE3QjlFMUIwNEZEMjBCQzREMUFGQTlBMkZFODI4Cis6MTA4RTcwMDAwREE0OUYxRkU1RTFBMTZCOEFCNkExQkM4RjhFQkI5RTlFCis6MTA4RTgwMDBGQUVGMzIwMzFFRDEwRUVDNDlGNEEyNUQ1QzY2RTZGMjA1Cis6MTA4RTkwMDBCM0FDQzdFNTBDMjk1MUZBOTA3NDIxRjFEQUU1NkEyRURBCis6MTA4RUEwMDBBN0Y1NTYyQkNFNkQwNTgzRTc3NUJGOUM5N0QwQTc5OTg0Cis6MTA4RUIwMDA4QjgzRUE1MkNERkMyNDNGNDBGRjVEQTJGRkQyMjlDNDQwCis6MTA4RUMwMDAzRkJGRTBGNDAyN0M3MzAzRjIyRkRBMkRCODBFNUY2NDJCCis6MTA4RUQwMDBGQ0RDRTRDMUYzM0YwREU0ODU0RkMwMjM4N0ZGNUYzOTFECis6MTA4RUUwMDBDMkE4MDcyNERDMDZDMzNGRjczQ0Y4Q0NBN0VGNjUzRERBCis6MTA4RUYwMDBGQkFDQjhDRTg2Mzg3Q0ZCODAyQjg1REE2NTFFOENBNDUzCis6MTA4RjAwMDA3OEExREUxOTYxNzc3NDc1NEM0Q0I4MENGOTYyOEU4OUMyCis6MTA4RjEwMDBBMTA4QzM3NUEzQkQ1QTM2MjA2RkFGN0M3NzA2QzhEQkE2Cis6MTA4RjIwMDBDQzgxMzJDODVCMkZFMjYxNDBGRTQ2RUNGNjY4RkQxRjQzCis6MTA4RjMwMDBCOUFFOUNCRDAxRTRCNURCMDZGODJGMjIzQkQ0Q0UzNDlDCis6MTA4RjQwMDBGRUM0RUUzNDZFQkY0RDA5QjI5ODc2Q0JERkI5OTI3NTkwCis6MTA4RjUwMDA3MkVDRkZBRUFENjBCRjg1RjU5OUQzQjhERTlGRDIxQjMyCis6MTA4RjYwMDA1MjEwMkY5MkFGOEQ3MkVBMTNDMThGMUY4QkU3RkZCQzk3Cis6MTA4RjcwMDA5QzUyQ0UyM0E3QUE4NTlDRTJFRkY3ODM5OThGRjUzMjA2Cis6MTA4RjgwMDAzMjIyRTMxNUQwODlDQkRFOUQzODBBRkQ5OURCQjI1NDNECis6MTA4RjkwMDBFRjk3QzA1N0YzMTRERkIwNjdBMURGMUFCQkY3OUU2NEU5Cis6MTA4RkEwMDA2Rjk0NEU2QTk4RERFQjQwQjg4M0QxNzQxNkY1RkU5QzQxCis6MTA4RkIwMDAwNDJBRTMxRkRBMjVBN0RBMTU0RTg3Q0M5QjVBMzMzRUU1Cis6MTA4RkMwMDBCRTFDOTJGM0I4MkRDQjRBRTMyREJCNkY1NDZBNTAzQkM1Cis6MTA4RkQwMDAzRkExMjdBRUI1NDU5RTY1ODU4M0Y5NUM5NjYxRkVBQkUyCis6MTA4RkUwMDA0REFBRTZCQjgzRUJCM0IxQzlGRTZGRDJEMDBFNTU1ODg0Cis6MTA4RkYwMDAyRENEQzc2MDJGMzkwNERGMTlFREE1ODdCMTZGMEZGREE3Cis6MTA5MDAwMDAyRjYyMjMzRTM2OTE3MzlBRDk2NjBCMzNERTI0ODQ3RTE5Cis6MTA5MDEwMDA2QTY2MDcxM0ZDMUEzMTM1NjhFOEMwRUVDQUEzNzkyQ0RBCis6MTA5MDIwMDA1RTA4MUYyRjAxQTZCNEJGNzFDOTk3MUEzRTdBMDdFN0UxCis6MTA5MDMwMDA0MzdBMjEzMjA5RjkzNEMxQzU3NDc2REU2MjM1OTBBN0NFCis6MTA5MDQwMDBBMEREOUE2OUYzQTE5QzAxM0MxMTFDRjYyNzMwNzMwMjQ0Cis6MTA5MDUwMDA4Q0ZCMzYzQzExNkY5NUVBQUQ3QjJENkVBNDAzQzVENzEyCis6MTA5MDYwMDA0QUQwREYyQUZDNTYxNjQxN0Q3M0VERjQyNEIyNUJEOTU5Cis6MTA5MDcwMDA5OURCNDc1NjAzM0MzQzQ5OUM2RUExMUZCQkU4Qzc0RTk5Cis6MTA5MDgwMDA3NDIyRTRERUFGRjNDNzZFNDNGRDI0RTVBN0M0MDMzQkJGCis6MTA5MDkwMDBBMzUyN0ZGMkZCN0VBNTNBQ0YwOUU1RkQ5RThCNEE1QThCCis6MTA5MEEwMDAxNUJERkQ4M0Y2NTBENDdFNEFCRjZGMTZGMEUzRTRBQUU3Cis6MTA5MEIwMDA4RTg4MDk1OEE4MjVFNDk5N0QyN0Q0QUY0Q0UyNkIxRTExCis6MTA5MEMwMDBFOUUyN0E3MDdGNDE0ODREQzFGRTQ2QzEzQUUwRDU1Qjg2Cis6MTA5MEQwMDA4OUMxQTI2NjQ3MTQxRjYwRTMwNDExN0YxOTU2NzgzQUNDCis6MTA5MEUwMDAzODdGRTA3MzlGOEJGM0Q5OUM3NDhFOTQyREU5QkM5Q0UwCis6MTA5MEYwMDA5MUMyRUIxQkU5RUQ0OUYxN0Q5NUMyRjFCQkE5OUNDQjc3Cis6MTA5MTAwMDAwOTYzQkRFOTJFREVERjZBN0JBODJBNjM4NEQ2QkUwQTI2Cis6MTA5MTEwMDAzMEE0NDMzM0UzNzY5NkRGMjVFOEE0ODJDM0FCRTJERUQ2Cis6MTA5MTIwMDBDNUE5QTgzN0JGRUQ5OTlGQ0E4QUEyNzJGNDFFMjVFODg3Cis6MTA5MTMwMDBGNDQxRkQ3QjJDODE5RjUyQkNFMzVGNTQ4NkZFODgzNTUxCis6MTA5MTQwMDAyREU4NzQ0MUJERjRBNEQ4RkVGMjRENjIxRUU5RTg0RjRCCis6MTA5MTUwMDA0M0JEOUYwODdGQzc3MkZBNjJGMkIzMTdCQUI4M0M0QjlGCis6MTA5MTYwMDBDOUFBMjE3OThFMzBGNEEyOUZDMkZBNDM0RTBERkU1MjU1Cis6MTA5MTcwMDBBNzk4NzQ3RTgzRTU3NDMxQjVCRjcwQkJBMTI0OEVEREUyCis6MTA5MTgwMDA1MEFBQjMxQkU0Qjg0NkZCRTFEMzc1NTkzNDdGRDlGRTJFCis6MTA5MTkwMDA4NkFDOEYyQTk5QTZGRThEQUNGNzFFRUNFRkM2MzVCOUNBCis6MTA5MUEwMDBCQTM4NTEzQ0JCRTMyRTAxMUZCNDEzNDIzMUU3NjVENUY5Cis6MTA5MUIwMDBCREZGMTRGQ0M0OTA3NkZDMjM3Q0ZDRThCODQ5QzA2ODcxCis6MTA5MUMwMDBEMTcxRkQyRUZGREQyRUUyQTdDQjlEODcyRjg2NDcwMkIyCis6MTA5MUQwMDBCQzU3NDlERjkwREMwN0JERTRERkVBMjA3RDU0ODVGMjBGCis6MTA5MUUwMDA1QUZBNDdDOEY3Q0U1NEE0RjFGMjBEQUU0OTFBRkQyODM5Cis6MTA5MUYwMDBEQTE5RTVEMDlGNDUzQ0UzQ0Y0RTZFRkZBNTFFOTRGNkVECis6MTA5MjAwMDA2MkEyNTc1MUEyRkE2NkIwQkUxMjdBQzYyMDE3Q0Y2NzgzCis6MTA5MjEwMDA1RjAzQkQ4NkI0RkFERkQ4RUY1M0FFRUY2QjU3MTZDNkM3Cis6MTA5MjIwMDBBMThGRDFGRjIzNzY2NUQ5RTU0MTc1M0NDQUNEMkE4NTRBCis6MTA5MjMwMDA4RDgyQzdFNDk5N0EzRERGRURFMkZFNDdCNzJCNDlBNzVGCis6MTA5MjQwMDBFN0U3MkVENkQ3OEI2MEJENDlGODRDMUE5MkJGQTJENTVFCis6MTA5MjUwMDA0MzhBOEFGMjhFRjdENzI4RThBMUUwRDgwNzU2MkZDOEFDCis6MTA5MjYwMDBERkZGMTI3NkQwMTdFOUZFQjc5MUFFMzYyNEE2MTRBMzFECis6MTA5MjcwMDA3RUQ4RkFBNzhBMzE1QjYxREVGREVGNUI3Q0RCQjBCQjk5Cis6MTA5MjgwMDA1RDlDM0VDQTE3QUQ2OTM1QzM3QjRCODdFMkI0MzE4RDE3Cis6MTA5MjkwMDBERTVBREI3OUM5MEE1OEVGMDc5MkZFREQ3QzFEMERFRTIwCis6MTA5MkEwMDA4ODc1MjQ4QzlCRDNDMEM3Q0ZFQkQ4QUI5ODM1RjIyREYzCis6MTA5MkIwMDBBRjhFRDczQkU0QjJFOEY0NUVBRjI4N0YyNkZEMEYxNkYxCis6MTA5MkMwMDA2RUE5MkNDNUZBN0VGMzI2MTA3RDM5MUQwQUM1ODM3MzVECis6MTA5MkQwMDA5QTAxMDA0MDA3MzkzRURFQkZDMzE3NTY5NjE3NDVENzlGCis6MTA5MkUwMDBEOTY2QUEyRTQyQkREMDk2OTFFNDQzQkQzMEQ2MUQzQzJFCis6MTA5MkYwMDA4Q0Y0REY3MDI4MTI0MTMwNEQzRUQ0NjM0NkZCQUVDMjgxCis6MTA5MzAwMDBFREZGMEFERkNCNzU3QTU1NjcwRUNBRDVBNDQzN0M3RTg0Cis6MTA5MzEwMDBFRDA2N0EwNzBCNTlEMEY5MzYyRTZGNTVGNjBFNDM3Q0MxCis6MTA5MzIwMDBBMEVDODBGMTMyRDY4RjIxQkQyNEVCNjdCODg0OUVDOEIzCis6MTA5MzMwMDA2MEMxMTdDOEFFNjI2RDhDRjBDNTY4MUQxOUVCNDc5MzBDCis6MTA5MzQwMDA3RDJGRjExOUI1QTNDNjRFNDAzQkFBRjA4MTg4NzkxOTRCCis6MTA5MzUwMDBCNERCRkQ1OEVDRjhCQzQ1RTgxMTU4MDc0QkY3NDRENzhGCis6MTA5MzYwMDAxMThGMkZBNDFFOTNGNTJDNzFGQzY4NDlFRjQ5NTVCMTVDCis6MTA5MzcwMDBFRDUzRDAwMEY0QkQ3QzkxRkIzQTVDNzdDMzA2MkJCMzcwCis6MTA5MzgwMDAyOTUxRjg1N0I4MDNFOTM4OUY5QzhFQUQwQUMyNDZEMkRFCis6MTA5MzkwMDBENzA2RDdEMzRBMkVBQ0VGRjY1Qjk4NTM2NUYxRTdEQkRGCis6MTA5M0EwMDBCMEY2QzU0QjU2NjhGQzJERTg5RkYwQjFENUNBRUFCNEJCCis6MTA5M0IwMDBGQTU0RkExMzE3QTc3M0ZENzNBNzNCMzAwMkM3NkREQzhECis6MTA5M0MwMDBCNUQ5OEFGOEJENjVGQkU3NTY2REJDN0JEMDNBODYwOEY3Cis6MTA5M0QwMDAyRkE1OEVGQjI5MERCNUY2MzBBRUIzN0M5MTk5RjA1N0QxCis6MTA5M0UwMDBCRkMxMUE0Njc5RDRCMEIzMzM2MjQyN0JGQTZFRTY0MzBBCis6MTA5M0YwMDA3RTZGRThFODdDMkIwN0UwOTJEQkUwOUZBNDdBQTNGRDc4Cis6MTA5NDAwMDBFNTM2ODQxNTlDNEYwNjEwNjEwRkY5NzkxMTJCRUE2NzM4Cis6MTA5NDEwMDAyMzVEQTMzRDhDNzZDOTVCMDk5Q0RGNEY5NDNCNDIwQUQ4Cis6MTA5NDIwMDBDMEVGODQyNUQ4ODBGNTRFNjQyN0Y5NDIwNTUxNzhCRkY2Cis6MTA5NDMwMDBERDM5RUIxRDA1NTgzQUY5MDU1QjA0OUY2REE2NkQ1OUEyCis6MTA5NDQwMDA3NkE4RDczNkNFRUE0MzNBQUE3MDA3NjdBNTAzN0M1Q0I0Cis6MTA5NDUwMDBFNjQwMTdCNjRGNzMyN0ZCNUFBMEFERDdDNjI2OTA3RUJECis6MTA5NDYwMDAxRTIyMUMyNjFCRTg2MUYyREQ5QzRGRkUyNjNENDVEQURDCis6MTA5NDcwMDA3QjEzNTAwRTJENEQ0Rjk2RjYxMkM5QTdCNzJDN0MxREFECis6MTA5NDgwMDAxQjE4OUZFRjNFOTc3RjAxRDFBQkQzNDVFM0U2MzQ0NEYxCis6MTA5NDkwMDAxNEI0Rjc4REUzNDZFOUM5QkZGODQyRTgxQkVDM0MyQjU2Cis6MTA5NEEwMDBDQUY1N0EyMTY3Q0ExNzZENTc3RUFCQTE4MzdBMzA2NEZCCis6MTA5NEIwMDA5MDVFNzI3NjZFNTVEMDBGODRFRjJEOTU2RUFBQ0Y2Q0FDCis6MTA5NEMwMDAyODY3NzZGMkZEODg3QUY4N0U5MzQ2QUVDODc1QzQ5MDE4Cis6MTA5NEQwMDAyRkI3MjE3QzFEODc3QURFRTRGMjI1NDJGNDI3RTc2QjYzCis6MTA5NEUwMDBDNEU3OEZEMkI5MUQ3NzI1OTgwNUY0REUxQTFBRTM4NUYzCis6MTA5NEYwMDBGRURFMUE5MTQ4RkQ0OTdFMzdGMkU3OEYwNDlERTdENERFCis6MTA5NTAwMDA2RTU3MzA2RUUwNEVFMjc2QTM5QzlGQUNGNzQ1RkE4QzI2Cis6MTA5NTEwMDBGNTM4OUZDOTU1M0QwNDg3RDVCNTY2QzI5QjlDNEZBNUJDCis6MTA5NTIwMDAzNTMwMTJGREFGNzZEMURGQkU4NTlGNTk3QkExRkNEMENGCis6MTA5NTMwMDBBRjBFMTAzREFFNkU1N0ZDRTQxN0I0MUZCMENFQzdGOEE3Cis6MTA5NTQwMDA1Q0U4OTcyQUM2NjNBRkU2MjYwOURCRjJEMjAxRDIyMzk0Cis6MTA5NTUwMDA1Nzc3RjEzOEMxRUFBRTRFRjM3MjQ3OTQ0RTBCOEVFRDU5Cis6MTA5NTYwMDBCQjExRTk2Qzc1ODc4RDI1Mjg4ODNGQkU1RTIzOUQ4MkRGCis6MTA5NTcwMDA3QzIxQkE2NzIxMkJFRDY3ODE3QzBDOTEzQzY1QzEwMjhGCis6MTA5NTgwMDBGNDQ3QTRGQ0REMjdFQzRCRTZFMEVGOUYxMEYzOTZGRERCCis6MTA5NTkwMDA0NkU1NjYwMkQxN0JDMUIxMDlGQkVDMDBDRkQ1M0VDNUUzCis6MTA5NUEwMDAwN0E2MTJEOERCQkMxRUY0MUYyMUY5Q0JEODA4RjRDQkQ4Cis6MTA5NUIwMDA2NEZGNDZGOEZENUFDOEQ1MTg3ODdFM0UzRDg2MUU5MTU4Cis6MTA5NUMwMDA3QUI1RTBGMTE5MEM5RjEyN0Y2NjAxNzdEOUVGOUU3NDhFCis6MTA5NUQwMDBCRTlGQjUyN0RENENGRDZGMjhFN0YxRUIwRDE2QUUzRkMyCis6MTA5NUUwMDAzNkI0RDhDM0M4RDc2RkE3NURGOThFNTIwQzcwNzI1OUM0Cis6MTA5NUYwMDAyM0Y4REM2RjVBRDY4MERGRjdFN0YwNzlCNDk5RDY4RjdECis6MTA5NjAwMDA2OUU2RkFFQkY1NzRDMjVGMEFFM0YyODlDQkEzODc1RUUxCis6MTA5NjEwMDBFNEYyQTQyMUU0MjAzRkIxMjE1OEIzODJGNjFGREMwOTEzCis6MTA5NjIwMDAzRUI0Rjc1OUYwNERFQkZDRTQyODNEMThGMUVCN0Q2MUI5Cis6MTA5NjMwMDBBRkQ1MEJERkFGRUVFMDdDMTA4NTVCNTg0N0I3MjBFNzc2Cis6MTA5NjQwMDAwOEVGRkI1QzcyM0YyMjU4ODA3MDA1RkZCRDA1RTMwQ0ZDCis6MTA5NjUwMDBEMjdGNEY1OTFDMDgyNTdCMDdGMzZCQkFGMERGMjcwOTJGCis6MTA5NjYwMDBGRkREMzJDNUZFMTdGNURGRUJEN0ZFNTMzNjk2NTc2NUEzCis6MTA5NjcwMDBCRDRCNEZDOTJGRTAyN0VBRjhFQTg0RjBEQjBFMDhCQ0E3Cis6MTA5NjgwMDBGRjQxRDA0QjdENjkwN0YxNDNGRDk3Q0RDNDQ3OEUyQTNBCis6MTA5NjkwMDAyRTRGMUM4N0Y0NzI5MEIxMUY4QkY1M0Y0MEZENTQyNjZFCis6MTA5NkEwMDA3NTVDQTlBMjNGRkNGNzhBQjM5NUM1OUZGN0NENEFGMzM1Cis6MTA5NkIwMDAzRjRGNDVCQzc0QUFCNDJGQzVDRTgwNTU1RjA2NzA0RDkwCis6MTA5NkMwMDAxMDMwMTBGNTJDNkUxRUY3M0VGMTE0MjAwMkY5RDJEQzlBCis6MTA5NkQwMDA2QzNEOTdGRDdCQkU3RTU5RTQyMzA1RjE1RDJGNjA3REQ3Cis6MTA5NkUwMDA2MjY3QzVENERGNjEzQ0YxQTk1NERGMjg1OEZBRjE5REM3Cis6MTA5NkYwMDBGM0ZFRTY3N0QwRkVDNEY2RTkzRUQ0RDNFRUQ2MDBEMTMxCis6MTA5NzAwMDA0RkJGMjdDMTg3NzE0M0I3MEE5NjJERDA0MzRCQzcxQjY0Cis6MTA5NzEwMDAyOTk3RTFCRUQ4MzM5NzRDNDBCOTk5RTdFNjdDNzlFQ0JDCis6MTA5NzIwMDA0NTc1MkRDMjY3RkQzRjNDM0YwREJGRDc4Nzk1NzRCNDhCCis6MTA5NzMwMDAxQjRGM0NGNUY3N0Y0NkJENThCN0JEMDkzRDBERDZGQTI2Cis6MTA5NzQwMDBDQ0VCNjQ4NzlCQzI1QkY5RkJBNzUyQzlCRTNDRkFDNDUxCis6MTA5NzUwMDBFNjY5MDhGN0Q2OEU1NkZBN0VFQzg5QUQ1NERFRjcwRjJGCis6MTA5NzYwMDBDRkVGRjk0RkI0MzcwMjI5M0VBQzc3RUNDNUNEM0ZGQUM1Cis6MTA5NzcwMDA0RkE0RjM5QTE0MUZBRUEzMjE2OEU2RkJCNjkyQkU4REU4Cis6MTA5NzgwMDA3MkFCNzMyRkYxQTlBNDk3QUI1MUVGMjI5QzZBQjlGQzdECis6MTA5NzkwMDA5MUY0RkM4NUQ4NTc1QTU2RTE2ODQzNzlGNkM1QTZFNDlBCis6MTA5N0EwMDBCQTU4RjE0NEJGNTgyRkM2NUM0ODhFRDUyQTE0NEY2QjY3Cis6MTA5N0IwMDAwM0FBQzFCODQ2NUIyMjlCODJDRkE0QTI4ODM1MTdDNkY0Cis6MTA5N0MwMDA1OUI4Qjg3MzFBRDkzREExQ0Y1NzYyRkQ3OUJCMTJEOEU5Cis6MTA5N0QwMDAyNjhBQkY2MUYwMTZFQzdGMjI3NUM2QzY4MzE4M0MwQzQyCis6MTA5N0UwMDA3RTMyRjRCRUZEMkNEOEQ3MUY1QjMwOTY0M0ZERTlFQ0VBCis6MTA5N0YwMDBGRjc5NkRFRkZFMTFFNTY4OERCRDc3QUZDNzFCN0RERjhCCis6MTA5ODAwMDAyNkUyMzQ1MDlGRjQ0RUQ5OUFEOEYxRDAyQUI3NDNEMEVCCis6MTA5ODEwMDAyREQ3OUIzOTVERDU3OTVFOTIxMzM2REYyODhENUQzQTYxCis6MTA5ODIwMDBFQzYwRjMyNjEwNDMyQ0E3QUVFNzRBNUNDNzU1NjM5NjVECis6MTA5ODMwMDA0RTI0QkFDMDM4MUZFQTlGOTA4M0ZBNUY4RDcxNEFFMEM4Cis6MTA5ODQwMDBCMzQ1NkVDRTRGMTk0RUU2QkUxNEM2QUYzNDMzQjcwM0UwCis6MTA5ODUwMDA5RjhDN0Q2NDIxMzlCMjgzRkEwNUZCODNFQzJBRUZFQjAwCis6MTA5ODYwMDAwQjc3QTAzREIyQzUxMkNDOUU4NEZEQjQwOUJEQjU5RDU5Cis6MTA5ODcwMDBDRjFCREEzQjcxQkYxNEZBNzM1RTNBODFGQUU5QjFCOEQzCis6MTA5ODgwMDBBODdEODhCNzlGQjVCRDQ1ODlDRTE3MjgzNTFGRjUxNjI5Cis6MTA5ODkwMDBGNjU3RUE0MDNEMTNBQTI1RkM3OEFEQjRBRTYzNTgyNUNGCis6MTA5OEEwMDA5QkQ2NUQ3Q0MzRjgyOEZGMUFFMzNCMjhDRjcwMUZGOEQ2Cis6MTA5OEIwMDA0RTc3Rjk2REVFNDlEMUE3OENGQjE4RTFGOTMyN0U4NzFFCis6MTA5OEMwMDA3NTdGRUJGNkQzOTMzRDk1QUVEMzJCRjFFQzk1N0QwQkU1Cis6MTA5OEQwMDA0RjcyRkRGQkVBRTcyNDZGMUE5MThFNzFGQ0UwOTczQTE0Cis6MTA5OEUwMDBGREJCNUNEMkYxMkI5RjEzMUQyRkRGQzVGNTZGRTNBRURGCis6MTA5OEYwMDAxMjJCRDJFREYxNzU3RUY2NUIzMDQwMUJDNTNFRUIxNkE4Cis6MTA5OTAwMDBBNTc3MjVDNTc5NUU0OTcwNjJGQ0VFQTREMDM3RjUwRkM2Cis6MTA5OTEwMDA3QzdFMThGNzQ3NDdFQ0NBMjZCRkZFRTQyQjA5QjVEODcyCis6MTA5OTIwMDBDRjdFOTM4OUUwQjk3RkRCQzU1QjVCMTVFRDNDQjkzRjJBCis6MTA5OTMwMDAwMDc2MzA5MTZBMjNEOEE5REMwRTVFQjExOUZEQjNENTRCCis6MTA5OTQwMDA3NUNDODdGQ0RGNjhBMDlGQzY1RDA3ODg1RUE0MUQ1Q0EwCis6MTA5OTUwMDBGMEY4REMxNURDRkU0Q0YwMjVBMEZGMzY5M0RCQTMwQzAxCis6MTA5OTYwMDBFQzUxQUM5RjM2MzNEQzYyMjVGQTJBMjk0M0ZBREFCNzg4Cis6MTA5OTcwMDA3MENGNDZENEUzOEQzMzk5MTNGQkRGMzJDQ0ZGNEEyRUYwCis6MTA5OTgwMDBBRDQ3NjE5OENGQjJDNUQyM0VDMzBDRURCNzU0N0E5REI2Cis6MTA5OTkwMDAwMDQ5ODBEQjc2QjI3QkQ5MThBQkQwNzMyQkM4NUU2RUUyCis6MTA5OUEwMDBDQ0JBREU0NzdDNjY5NDA3QUZCNDkwRERENUU4NERBNDExCis6MTA5OUIwMDBGOTVDQkQ0QkI5OEREQjIzMEVDNkU3QUYxMDdENUUxRDk0Cis6MTA5OUMwMDBCRTJDOENGQkNBQkYxN0YwOTM3MDNDNjlFOUI5MTFFMTVBCis6MTA5OUQwMDA3MUYyMjUyMDQ0Rjg3RUY1NEM0RUFGNjkzMzNCNDg4RTNBCis6MTA5OUUwMDBCQ0ZEQ0EyQ0QyRTM5MjJFOTM1RkI2OTEzRTc3OTk5RDJGCis6MTA5OUYwMDA4QThGRjREQTNDOUIxNkFGRUQxNkFFOTdEMjg0OUUyOTdGCis6MTA5QTAwMDA3QzgwRTMzNzIyRjgyOTIyRjQ0MEM0NkRENUM3NUI5Q0UzCis6MTA5QTEwMDBBMTYyRDRCQkJGMTdGODI3MzE4MkYyNURDODkzRDUyQjYyCis6MTA5QTIwMDAyMkM0NEYwRDNCNzk3RjZFOUJCRkU0NzYwREZEQkEyQkIwCis6MTA5QTMwMDBCODVFOTQ3MTdGREMwN0E4OEUyMTJGN0VFN0U2RkFCMTJECis6MTA5QTQwMDBFMEYxNjU5QkQxNUVCRTBBRjA4RTJBMjU2NzhDOTBBMzVCCis6MTA5QTUwMDA0MDE3MDhCNzlDQkEwMEQxQzE1NUVFOUI3RDZBMDFFRDU1Cis6MTA5QTYwMDAxRjkwOUZEOERGNjI2NUIxRTIzQzQ3ODUxQ0Y1QTQwN0QzCis6MTA5QTcwMDA0QTMxREVFQ0M5NEMyNjNCQzdBMzk2OUIxMkIwNUQ4OUU4Cis6MTA5QTgwMDBFMkRCRTZBNUZENERCMkYzRkEzREQ5QkU2RDNBN0UwRjlECis6MTA5QTkwMDA5NDlBQTBERTkxOEM2NDhFRTdGMEFGQ0Q3M0M3MjMxRjNDCis6MTA5QUEwMDA3QUE1OUZBRUIzRkIwNkZCREJEQzZFOUNEMzFFMkE0Njc5Cis6MTA5QUIwMDAzRjQ0RUU1RjQ4Mzg4NDVCMTI2QkI1RjJCMzRGQzAyMTcwCis6MTA5QUMwMDAzQzk2QzdGM0MxQkU3NzUwRkNEQTA5RTNBMDVGQkZFRDU3Cis6MTA5QUQwMDBCMjI3Qjg1RkRGNEFFMzFGNzRGMzc4NDYyNUFDMEZFRDc5Cis6MTA5QUUwMDAzNjRGNjE2MDBERDdBN0M5QkU1OEYwQjg1M0UwNzlERjkzCis6MTA5QUYwMDBDMjFCNEJEMEFGNkNBQzcxRjg5MERGMUU3QTU1NTk0NjQzCis6MTA5QjAwMDBGNDhDQzE0MUY0Qjc4MzJCMDgwRjBDRjA4MEZDQzA4MkE5Cis6MTA5QjEwMDBEQzJGNkQ2QzBFODQ2M0QzN0IzNUYxNUYyM0YyOUY0MkEzCis6MTA5QjIwMDBGNDRFRjE3NkEwRjczMEE3NzdBRUZGQTRERjhGRjJCMTQ1Cis6MTA5QjMwMDAzQUM2N0VBODk0MkY4REQ2REVEMTQ4Qzc5MjFGMUFBN0E5Cis6MTA5QjQwMDBGNThFNDZCODBENTU5RTlDQjQwMEZGMjNGRjAwMUM5MDc3Cis6MTA5QjUwMDA3RjI0QkYyNEVGRTY3Q0IyQTlDNTVCOEVERjM3NTUzMjg4Cis6MTA5QjYwMDA2N0FCNDYxRjE5RkQyNTlDMjdGQTlENTJBRThGNzUwN0RFCis6MTA5QjcwMDAwQTNEMTgwNzMwNDUzNjYyMUU4NTk0QzM4REJCRUYxQjI2Cis6MTA5QjgwMDAxRDJCQ0Y0RENBNjFCQjk5Q0IzNzdCMzgyOURDQUFBMUVECis6MTA5QjkwMDAyRkRDREI0QjlFNDA0RkNBREI0OTVBMUIzQjJFNTJFNjYzCis6MTA5QkEwMDA3MTg4NzhGREQwRjIyMjMyNTA5N0EzQkNEOTk2MTQ0NjIyCis6MTA5QkIwMDA3OTI1RTM0NEM2N0VDNzc4MTQ1RDNDNDZGQTJEQjhCRkNDCis6MTA5QkMwMDA4MEY1RTc3QTM4QkQ1NDdBQjg5Q0I4NUUzQ0U1RkMyNTUwCis6MTA5QkQwMDBGRDdCNERDMUNGMzE5RjI4OUVGRTkyRURGRTUyNzEyQjMxCis6MTA5QkUwMDAzOThFRDRBMzQ2RkNDQkZEMTE1QzRGNzU1MUZDN0FFRDQ4Cis6MTA5QkYwMDA3QkI5N0MzMkQyRTM3MkMxMjc1RTVDMkJENDdCNEVFQzA2Cis6MTA5QzAwMDA2NzBEQzYyRkVGODdENTlBNzVGOTZGNkRBNkNFQkE1ODM2Cis6MTA5QzEwMDBGMTJGQjlCRkMxMUUzMjBGMjlCRjZFRUYzQTlFNDdGNTMzCis6MTA5QzIwMDA5Q0M4QTc2NThCQ0RCQTdDMkE4N0NGREI4MkYxRDMxOTdDCis6MTA5QzMwMDBGNjgyMTI5NUM2RTU3MUFDRTQ2OUVDNkJENEMzQzVCQjgyCis6MTA5QzQwMDBEQUM3NjA5RTkyMjdBMERGMUZDOUFDNERENEVEM0Y2NEY4Cis6MTA5QzUwMDAwNzVEQkE3MjZFNUQ4RUFFRkVCMEU2MTFCQUVGQzNENzg1Cis6MTA5QzYwMDA4RUQzN0QyRjA4NEREMDk1MEJEQjJFRDVENTFGRDUzRTNECis6MTA5QzcwMDA0MzlGOEZGQkM4NTVCQUZBNjNDMzczNzVFNTREMkQxRDFECis6MTA5QzgwMDBCNTg4OTc4QjlGQkE0RUQ3NkU4NkQ5NjkyRTAxQjg4RTRDCis6MTA5QzkwMDBFRjU4QTZDRjEzMzNDMDMzRjVDRjZBNEMzQTdDRDI1MzdBCis6MTA5Q0EwMDA0MDc4OUQ2MUQ2RTcwQjVGQjI0QjBGMEY0QzhCQzNGRTI0Cis6MTA5Q0IwMDA4QTk5RTg2RkRBOTEwOUU3Q0E2MzJENjZFNjZGN0E2NURCCis6MTA5Q0MwMDBGQjgyQzFGNEMwRUNCREJFNDAwQzNGNTNEMkI5MkMxQjhCCis6MTA5Q0QwMDBGN0IxQTRGQ0I4NTBGQThCMzc0RjQ5N0ZGMUJFQzc4MzY4Cis6MTA5Q0UwMDBEQkJCMUVCOTBGQzNFMTYyMTk4MDRCQURFRjVDNzBCMUY1Cis6MTA5Q0YwMDA5QzBGMkUwQ0UwOTJGQ0ZERTE2MkVDNkY3RDUyMjNFNTlGCis6MTA5RDAwMDAwMzdGODQwNThEN0REQzJCRjg0ODk2MTc4NDUyQjkxRTlECis6MTA5RDEwMDAwQUNDM0I4RjFEQ0RFM0MwNDExQkRGOUYzNDdFQjc2NzZDCis6MTA5RDIwMDA3MEI5MzYxQUU2NDBGMDE5MjI1RjdGMjZGMDcwMjgxRUJGCis6MTA5RDMwMDA1RkFGRkQ3QTdGMjZDQUVGMkE0NjdFQjNCM0I5RTU2QkUzCis6MTA5RDQwMDBENDVCNEJDQzExODZGNEZGOTA1OENGMTY5MTE3RkFDODBDCis6MTA5RDUwMDAzQTI3RjVGM0E4RDg3RjdDNkM5RDk3REUzRkJFNkUwQzRBCis6MTA5RDYwMDAzREMzRUI3Q0Y0N0VEQkJBMjlGNERDMEVGNjFDM0U5RjhGCis6MTA5RDcwMDA1QzU3NDVDRkE3RDYwNUE4REVEM0VCNkFFOUI5NzM1RDdBCis6MTA5RDgwMDA5MENGNkIxMEJFNTgxOUQ5Mzk4MUY0OThGMUQyQTUyMTIyCis6MTA5RDkwMDA3NTQ4Nzg2MjZBNUU0QzdEMTlCNzFGNzVGMTM5RjNDODUyCis6MTA5REEwMDBENzFFNUEzNEZCNEQwREZGNjY2NTI0QkIwRjYzMEVFM0NGCis6MTA5REIwMDA2NDM2MTlGNzMzQ0ZEN0ZFQkI3NUI1QjNERjFDMzU3NEU2Cis6MTA5REMwMDAzRTkyRjRDNENFQTQ4RjhFQzVENzQxOTEzRkY5QkI4Nzk0Cis6MTA5REQwMDBDRjZFMEExNUM1ODc1Nzk0Q0U2MkMzQTlDNjdFMzIwN0Q3Cis6MTA5REUwMDA5REY1NjJCNDE5MzRFRDBGMUFGOEI4MjY5ODFBRDM2RTlGCis6MTA5REYwMDBBODExRjQ1OTZCRTNGQkVGOEIwQ0ZDRkQ5MkY4RkU1MkJCCis6MTA5RTAwMDAwNkQ3Nzc5RkM0OTEzMzU3Njc5OEE0M0Y2RkExRkRDMEQxCis6MTA5RTEwMDA0MTdDRjc5MzJCNjJDMTc3N0Y4NjU3QzdDNzhCODIwNjM5Cis6MTA5RTIwMDBCQzFBRkFGOUM0RDIzRUNDMTc4M0NGQ0VENzhGNUM5RjMxCis6MTA5RTMwMDBCMUREQzMxOTVDNkVCREY4RkYyOTdGN0U3MjUzMzJGOTI0Cis6MTA5RTQwMDAwRjA4Mzc4RjY2RkQ5RkRDOTQ1NDFCMkIyRUYzNUEwNkE4Cis6MTA5RTUwMDBERjA3MDVFQjlDMTVCOEM4RDQwRjU5RDE1NjFDQzNCQ0ZECis6MTA5RTYwMDA3QzlGNzdBNDEzRTM0MzMyMEYyMDNFQkQ5QTI5OEU0NDkyCis6MTA5RTcwMDAzMDU0MDdDMzE1RjBFMUI1MTY0MkZGRTY4MTcxMjI2NjQyCis6MTA5RTgwMDAxQ0M3Njc4QUVBNTlDQ0E5NjE5QTczMUVFQTYwN0E4MDc2Cis6MTA5RTkwMDBGNjIxMkJFNUVGRjRFNkQwQkVGRjA1RDIxMzUzMUYxQkNFCis6MTA5RUEwMDA3NUFFN0RCQTQxRUQyRjUwQ0VFQ0Y4ODFFNThDRTQ3M0IwCis6MTA5RUIwMDA3NkU2QzE1MUIxRjQ2NDJEOEU3RDI5QUM2M0NCRDRGQjIxCis6MTA5RUMwMDA0OUNFOUNBN0RGMEI4NTVGQUREQTRCRkJENjQzODZERjFGCis6MTA5RUQwMDAyRUY3OTBFMjUyNkJFRDI5QzUwQ0ZDQkFFRjEyRjgzMzY1Cis6MTA5RUUwMDAzNDgzRjFGMzU4OUYyNTg0RDFDRTNGMjBFNjA5OEVGRkJECis6MTA5RUYwMDAyNURDQUY2RTlFOENDRjdGQ0UwQTdDOTgwMUVEOTc1OTAyCis6MTA5RjAwMDBCOTlGMzgzRUMzRkYxMTk2MTNDNTNFQjAzNUQzQkExMTgxCis6MTA5RjEwMDA5RkNDQzlENzcxODk1OEM3NDY5MzM3MUZEN0YxQTVFMjlGCis6MTA5RjIwMDAxQjhCN0U4QUQzMTRGNkUxMzM4NTQ1QzZGM0JDQkI3MDI4Cis6MTA5RjMwMDAxMEZEQjNGNDhCMTNCREU4REYyNjhFNjZBQzg3RTJFMTNCCis6MTA5RjQwMDBCRTA0OEM5QjU5OTNGQUZGNzEyNEYyRkJFQjI2OEMzMEY0Cis6MTA5RjUwMDBCMkU3OUQ3Q0JFQ0YzRjkyNEJGQjJBRTgwMUExN0MyODUzCis6MTA5RjYwMDBDNkY3MzBGNTRENjg4NzQzRkI2QjU5RjAxOENFRUZBODY0Cis6MTA5RjcwMDBEMzFFMzJDMUJDOEE2NzdGRTFDMjdDQThFN0JCNjdEMDMxCis6MTA5RjgwMDAzRTQyRTQyOTM1NjRDNTczMEIzRDI3RkVFRTZBRThFRkQ3Cis6MTA5RjkwMDA5MjFFMEJDNTlCMkY2MTJBQzlGMzdBMzM3QjAwRjkyNkU5Cis6MTA5RkEwMDAxRTNDOEZGRjc1RUNGQ0FFMkIzMkI5REM5Mzc5NUJDNjlGCis6MTA5RkIwMDBFRjc5RTJGQkYxMzg3OUM0OEU0Q0FFMTc2NDdFOEM0NUE0Cis6MTA5RkMwMDBFNkM3NzhGQ0U3Q0M4RkIxMThGMjYzMkNFNjAwQzM3REJFCis6MTA5RkQwMDA2MENCNDA3RUNDNjI0NkY5MzFEMDhGMzYzRkU2Rjg4Q0JDCis6MTA5RkUwMDBEOEYzNzA4Qjc5NTg0RTI3QzVFOTM3ODVERTFGMUY3MTZFCis6MTA5RkYwMDBFRTc1NUE0RTI3RThGMkFDQTNFRDFERjQzRTVFN0VDRTIwCis6MTBBMDAwMDA3ODMxRkVGMTM4Rjk0OTYzMDdGQUNGNjZBMTc0NkQzQkU4Cis6MTBBMDEwMDAyRjlGRjdDMDM4NzlGNERENjJDOEYzODk3RUU3RjkzREY4Cis6MTBBMDIwMDAxQkQyMzg5REVDQ0Q3MkJBOTc0MkQ3NEI1OUFGMDVFOTk4Cis6MTBBMDMwMDA3NDg5QzM2REMxRjg1MTgwRjkzQUU5REM4RUQ5RDJERjU5Cis6MTBBMDQwMDAyQkY5NkUwNEQ2MzM3RjgxNzZCNjA5MjQyRERBRDk0QkVECis6MTBBMDUwMDBENjVBQkVFOEQ1QzhBOTZBQkZCRUNDQjBCRTQ2RUU2RTIxCis6MTBBMDYwMDBDQTYyMzRERkM0NzE2MzI4QUZFRjE0RjNBNjNBQ0YyMTdDCis6MTBBMDcwMDAzNzE3REI1NUJCNTlCM0RFNDM3MUVDODY1QjA1RkMwRTJECis6MTBBMDgwMDA2NUM3ODZERjc1OTlEQ0VFODg3NzFFRTJENkNDMTREREQ1Cis6MTBBMDkwMDAzOUJEREI5REU3OTY5NzA4REY2MEJBQjY3RjIzMUVEQ0VCCis6MTBBMEEwMDBGNEZEN0M3MEY2RTBFNjFBQzZEMUNBMTU5RUJGRkYxNzE0Cis6MTBBMEIwMDA4Nzc3OUEzODU3QzVDRjA1NTgwQzc5RTg5QkIyQjhGQzFBCis6MTBBMEMwMDA4QkNFOUJFN0ExN0ZFNDBDREM5RTg5NzJEMUVDMURBREE5Cis6MTBBMEQwMDAzRDA3RDA2NUY2Mjc0RDgwRTcyMTIxNzc4QzcwRDk5RDBCCis6MTBBMEUwMDBDOUVEMzdFM0JBQkI0NDNFN0RBMkNBOUEzQjM1RjAzNzhGCis6MTBBMEYwMDBBRUY3Mzk0MUU3QjJGRTA2MEJERkJGODJCRjgwMURGMDJECis6MTBBMTAwMDA3MjAzRTM3MkVGRTFDQzExMjIyRjNDQ0Q4Q0YyNzAzMTVGCis6MTBBMTEwMDBFRjgyRERFMDdDOEJGNjkzMjQ5QzA3QzE0RkMwREQwODA1Cis6MTBBMTIwMDBDNzAwRjNERTg4NzlEQkU3ODM2NzQ3OTZGRjYxODRDQjVFCis6MTBBMTMwMDBEMjAzODk1Njk0RkYzN0RBRkJGN0EzOEZEQURCNjNGQTkxCis6MTBBMTQwMDA3ODI0M0MzRjc3OEMzQ0JDOURFMUZFREI5ODk3RjdDMUJGCis6MTBBMTUwMDAzMzY1OEE4RkU3NTFCMDk5NjRFRjI4QTE1Q0Y1RUNDNUFGCis6MTBBMTYwMDA0M0I3NzczNkE2MDRDNzIwN0Y3QzI5RjJBRUE1M0VEQTM2Cis6MTBBMTcwMDA5ODczNkMzNEU2Q0Y3QjVERTVBQkIyM0MxNDc3RjdBNzAwCis6MTBBMTgwMDAyMzFEQkQ2NkUzNzRGNDA4RjQwNEU1QTYzRDYzQjdBMjlECis6MTBBMTkwMDA5RTc5MzAyQjU4ODdGNTY0MUUxRkYzRjc4RkM2M0M4NEQ5Cis6MTBBMUEwMDAwQjg1MTNGQzU5OTA4RUNFMDdBNzI3MzIxOUUxRTc1MDkzCis6MTBBMUIwMDA0QTZDM0FGOTREMUMzQTMxRjIwNzlEMkYyQkZERTFGODFDCis6MTBBMUMwMDA0M0MyNTNFRTVCQzhGOUQ1NjU3MTNBOTQ0RjA5Mzc2M0MyCis6MTBBMUQwMDBGRTUwNUQ5NjQ5RDRFM0Y5ODgwRjY2MDUwOENFN0RDMzJECis6MTBBMUUwMDBCRTNFOUMwMDczM0Y2NEM4Rjc5MkNGOTM0MjFFOUQ2RkEyCis6MTBBMUYwMDBGRDEyREUzRjk0MUMzRTk0MTg3QjdFQTZBQ0ExRTFFN0U1Cis6MTBBMjAwMDA4NzlBNUZCRDlDNUY3MUVDRjk2NTY2MEQwRDdFMDFENjg2Cis6MTBBMjEwMDBGRjU5REEwRkEwQzcwMENGRjU4ODY3QjZBMTlGRTRFMzI2Cis6MTBBMjIwMDAyMTU3RUM3OTk2MEQ3OTlFNDFDQjBGQTE2RjI1N0RCMzE3Cis6MTBBMjMwMDBEMEQyM0FEQUFGQ0Y0QThDQjk1RkJGMDBGQzI3RjQ3RkE3Cis6MTBBMjQwMDA4Q0ZCRjY3MjdGMUVFNDA3QURCN0M2REU3RjYzM0FFMjkxCis6MTBBMjUwMDA3REE2NTg3NzA2OEJBNEUxN0VFNjFFMUJDNUZGOERFQjFECis6MTBBMjYwMDBCRjQyRDAxMUMwQUI4MkUwMzVBNzlGRTIxODg3NDZDNzM2Cis6MTBBMjcwMDA5NjBCMTVDNkZBNkQ3QzlDNzhFNzBCQUVDRTUyODY3NEIxCis6MTBBMjgwMDBCRTgwOTUwNjI5RkU1NzZFNzc0NDU0QzBDMzZEMDIxRkU5Cis6MTBBMjkwMDBENkRDNTUzRUI0MEZDQkIzREUzQjg4RUIwNEY4OUYxOEY5Cis6MTBBMkEwMDA4MEE3MjY5RkVGRDhCQTc3OUMyMzJERjFFNTc2QkRGQURCCis6MTBBMkIwMDA0MjU5NzM4Q0Y1MDQzREMxMUJCMzM0N0U1MEZENTNFRkZFCis6MTBBMkMwMDAzQTQ3NkFGMDM1OUVGNTlBRjhGOUU4N0U5M0NFMkZDRTlDCis6MTBBMkQwMDA2NDE3RTQxNzU3NjM5Rjk4OEZFMDBBOTAzRTQwRkQ4MDEzCis6MTBBMkUwMDA3QTY3RTNFRUE5MjU4ODRDQjQzMzMwOUZBNzNGMzk5MUI0Cis6MTBBMkYwMDBFNDY4NkJDRUE1NjNCQzFBNzg4NkIyQTQ3REE5QzZCMTBBCis6MTBBMzAwMDAxQkZGN0JGOUZGNTFCQjQ5RDFEOUFGRDFGRUNERjQ1RTI0Cis6MTBBMzEwMDBFMkE3RENGMThGMzFGMTExRjRGOEVGMjEzREU2RjI2RkE1Cis6MTBBMzIwMDBDNEE3MTE3RUExN0IyRjRGQTNGMzA1MDhCRkU5RDFGRTdGCis6MTBBMzMwMDAwNkYwMUYwN0NGMUQxRTdGM0JGNkQ3MjBDRUQxMjgzMjU3Cis6MTBBMzQwMDA4RjZGMjA1RTYxNzYxRUI2NDdFMTNENTRCQzI0OEE3ODRCCis6MTBBMzUwMDAxQUQ4MEQ4RjIxMUQ1ODZEODIxRjk5ODNDRTg3NEJCQjU0Cis6MTBBMzYwMDA4NTE5RUMxQjM2ODZGQkI3Mzc2NEJERjc0NzhDRjc2QzU1Cis6MTBBMzcwMDA0Q0UxMkNCQkYxNDcwOUU0MDcyRTUxOUM1NjVDMzdEOEMxCis6MTBBMzgwMDAxRjlGRkUxQ0VBMDc1OUU0RDNCQkM4M0Y5NDc2NDY5MjUwCis6MTBBMzkwMDA3QTM2NjlFOEYzOTRGRUYyRjlGMkE5RjdBMTNEMDZGM0UzCis6MTBBM0EwMDA5OTYxNzJEMEZFRTYzRTU4NUYzNkM4OEQxOTU2RkUyQzc0Cis6MTBBM0IwMDA5RjA1NTQwNUZEQ0Q1MEYzQkE3QjYxNUVERkIyMzM4OTUyCis6MTBBM0MwMDA1N0MwRjNBNzhDQzM2MUNEODFERkI5RDAxRjlENjFCNkEzCis6MTBBM0QwMDAxQ0QzQ0EyRDYzQkNFMzhEQUM2NDM3RTE1MUM0M0JCRUQyCis6MTBBM0UwMDA2NTczN0U3RDMxQzJFNTcyMTdDMUE1Rjg5NTk5OTlEQTNBCis6MTBBM0YwMDA3OENCNDBCQzQzQUM2MzVFNjgyOTk3QTcwNjM5MjdFNTU0Cis6MTBBNDAwMDA5OUM5Q0VFRjExNjE3RUU2NzU2NjUwREM4OEMzM0RBNDI0Cis6MTBBNDEwMDAzMDMzOTRBRjkwNjU3NDUyQTA3Q0I5NDA5MjgyRUQ2MTY0Cis6MTBBNDIwMDBERDU3ODgyNzVCMTZDQzQyMzk4MzY5M0MzODFFNzg3RjFDCis6MTBBNDMwMDA1OUY4NkM5REVBRjNFMjczQkExMjMwRjM3OTg0NzlERTRECis6MTBBNDQwMDAyMTZCQ0VDM0ZBMjY3QkFGQ0FDRkU3QzEwQzMyQjBCREI5Cis6MTBBNDUwMDAxQzhGOTc5MzQ1Nzk0M0NEQTkxQjZGRjIwRThFNjMzMDA1Cis6MTBBNDYwMDA0NzMyRDlCRDU2MzFBRkEzNEU0N0M4MDRFRjZEOEVDOEYxCis6MTBBNDcwMDA1MUNBNEYxNTRGNjNCQ0UzM0I1MzI4ODRGOUQ5NzdBQURGCis6MTBBNDgwMDA2MTlBNkYxMjhCNDQ3QTMwM0U2MTA3MTA5ODI4OEVGMEUzCis6MTBBNDkwMDAwN0U0MDNGMDZFMUE3MTlFMDlDRTUzOTFCQjE4RTYzOTlBCis6MTBBNEEwMDBGQTE1MkNBNzFCRjQ5MUM3QjE4NkYyOUUzRDAxQjM0MTZBCis6MTBBNEIwMDAwRjA1MTVFNDlCQ0M1QUUzN0JCRDdFQjJCMzQzNzQxRUZCCis6MTBBNEMwMDA0ODg5MDRCMkNFQTY5RjNGNUU2MzhDRDM1ODY2NzAxNDUxCis6MTBBNEQwMDBGN0RGQzJFRERFOEYxMzc5M0I0OTE3RTlEOTVDRkYzNjEwCis6MTBBNEUwMDBCQUFDOENGMjVEMzJFQzc2QjREQjRGMjYxRkMxMjM5N0Y5Cis6MTBBNEYwMDBBODM3REE1MDZGRDgyRDdFODI4N0Q0MUZBQkJCNkU2NTJDCis6MTBBNTAwMDA4ODlGQzY1REQ1MENFNUU4NkYxNEJFRkYxOUJBNDFBMTVFCis6MTBBNTEwMDAzQzA1Nzk2RjQzNkQxMTdCMUY1QUIyQTZFQzExMzRDRTA2Cis6MTBBNTIwMDBGQzc3ODIzNzM0NDBCOUU2M0QzNjNFMDJGNTRBQTYwNzRECis6MTBBNTMwMDAyQUYxN0U5NkQ2RjFDQ0I3MUVDQUFEMDlDMTY3NUZDMkJCCis6MTBBNTQwMDBGNTFDNTBBOTlGMjY3MTJFOTYzMTY3RkQ0RUU4N0ZFQkQyCis6MTBBNTUwMDA3NUMzN0M5QjcwNDkxNUZEMUIzMTBGQThGRjNFRTZDNEY3Cis6MTBBNTYwMDBCQzkxNDE3NDdBMDZENjA3Rjg3RjAyQ0IzMEVGQTYxNTZFCis6MTBBNTcwMDBDMTVGREMwMUY1QjNERjYzM0VBQTIzQkVBMzJGODI3ODVGCis6MTBBNTgwMDA1MzA0M0RFMEZCRTlGMEJFNDlEMDRENjFCN0MyRjdFRjlGCis6MTBBNTkwMDBERDM2Q0E5RjYwMDczMzg5NUZFNkRCRjkzODRERERFNUJDCis6MTBBNUEwMDBENzRFODI3OTE1RjY0QzI0MzIxRTA5RjUzMUJGMDkzMzk2Cis6MTBBNUIwMDAwQzc4N0UxRDIzN0ZEOTU4N0YyNEQ2Rjc1MkI0OEFFN0MyCis6MTBBNUMwMDBENUU0NThFOUZFMjMyNkU0REM2NDAzQkY1RDE2QTU3RkNECis6MTBBNUQwMDBGQTVFMjJDQTRENDIxRkU5RjgwNEZCMDFGRkRDNUZDNkE4Cis6MTBBNUUwMDBCN0YzQTk5RDlCRjM4MzhGQzkzRkNFQjc5N0IyRTgxRkZFCis6MTBBNUYwMDBGNjVCMTExRDg3RTRFRjRDRjE2REZGQTJEOTk0RDczREI2Cis6MTBBNjAwMDBEOTFDRDk4QjdDN0Q5OTc4OTY4ODI3RjJCNTFERTBCODQ2Cis6MTBBNjEwMDBEMERDQkNERjAzRUI0OTVCQ0I3QzJEMzhDQTYyNkYyQkVGCis6MTBBNjIwMDBGNjU3Q0EwMjJBQzJCOUNDNzk1RjJCQ0U2RkVBRTIwMzkxCis6MTBBNjMwMDBFOTQ4NUY0RjY2MTcxMjNENUQ2RUY3MTUyNjAwODlCNDM1Cis6MTBBNjQwMDA0RUYxRjk5Q0YwQUE3NkIxNDI3MDk5NUY2QjBGNjNGRUYwCis6MTBBNjUwMDBEQUZDODFGQjdBODIwNTBCODA2RjE2MDYxNTcxOEUzRTNGCis6MTBBNjYwMDA1OEIwNTgxMzhGOTU3OTdEMEI2Q0UwNDdDN0RBNzdDRUQ5Cis6MTBBNjcwMDBFNjdBNUNCNjZGMTJFNzRFRTRGNzZERDkwRTlFNUY5OUVECis6MTBBNjgwMDA3RDY1NTMzNkU1NTdGMDdDNjdFMEZCREJCMjI3NDVFNTk3Cis6MTBBNjkwMDAwODhDNEJGOTI4RjM5OERGODJFQjlBMjdGODU2RjJGREU1Cis6MTBBNkEwMDA3Q0ZGRUQ2NEI3Q0UwRkU4RURDRkRGMjgxQ0RGQTE0NUJFCis6MTBBNkIwMDAwQUQ5ODMwQjZCQ0Y2RDlGQjY2NENCRkRERTNDMjdDNUZCCis6MTBBNkMwMDBCNzk5RDQ0NzlDQUVBNERDOUU4QjdBMUNFNTZEMTVFODQ3Cis6MTBBNkQwMDA2RDhEN0RCQ0Y4Q0UzMzY5RDQyRUYzQzlENTY3ODc0NzFECis6MTBBNkUwMDBDRkI5MzQxOUNFQjkzNDhBNzMyRTREQkI1QTJDMTk0OEMwCis6MTBBNkYwMDBFRkUyOUM0QjUzRjdFNzFCQjVGOTdEMTI0RTgzQ0ZCOUMwCis6MTBBNzAwMDBGNDUzNUVFMzAyNkI3ODJGOUVGRjU5QjAwQUQ2MDhGNTJBCis6MTBBNzEwMDBERjEwRTcyMkRFQzQ3MzExMTNBMjc0OTQ3QzVENDI4NEJGCis6MTBBNzIwMDBFN0NERjkyOTdGMkZDRjk5RTRDMzdDOTMzNkQzMDRDQUIwCis6MTBBNzMwMDAxNzZBNEI0OUY2NjlGMzczMzZCNTM0NTc2MjNEOTkyNzZBCis6MTBBNzQwMDAyNENGQjUyQzg4QjMxRkZDOUM5MDZCNUIxNDlFQUYxNTc3Cis6MTBBNzUwMDA1QTY0Mjc3ODdCNTQ3NjUwN0I0RURGNTMxOEEwM0NCOTVGCis6MTBBNzYwMDBBNjZDMkY4REIzNDVDNDExMzBBRjc0MjIzQ0MzNjA4RUVDCis6MTBBNzcwMDA3MTdDRjFGNjQ2RjkwMEZENkRDMEZFMkEwQTdEOTQxRjNBCis6MTBBNzgwMDA1MzkxQ0FGM0NDM0NFOTgxOTJEQjhBQTJGREQ2NzRGM0UzCis6MTBBNzkwMDBCQ0JDOUFDMEQ3NkZGMUZDREFFQTUyODRBNzUxOUU0QjM5Cis6MTBBN0EwMDBGQTMyQ0E3NUEwQkY3RDQ4OEZERjk5QjhERTg5Q0FGNzMzCis6MTBBN0IwMDBDMEEyOUJBMEJGQkVGN0FEOTQzRkM3RUVGNjJCMTY2OEI0Cis6MTBBN0MwMDBGN0UyQkI0RTFGOUVBN0RCNTAxRUE4QUVBNEVGNjYzQTcxCis6MTBBN0QwMDBFRjk3NTFDQjIyMzZGODVFRkE5RTc1MUJFNkVERDVCMUE4Cis6MTBBN0UwMDA3NjJCRjY1NzY3RDA1QkFCMUM2RjVBOTEzRjU3NkRCNzBFCis6MTBBN0YwMDA0NEU5OTE2MUJFQTFBRjEwMDU1REMzQ0U0MTcxMEY5MkQ2Cis6MTBBODAwMDAzRjUyMkUxOUU5OTg4REQ0Q0I5RjEyMjk2RjQxMkU3MDlCCis6MTBBODEwMDA3REI1OThFQjM5RjZBNDgyRjE5RkJFRTQyM0FBRjA5RkEwCis6MTBBODIwMDA0OURFNEQ5MjQyQ0EyMEU3Mjc3NUJGNERGNkNBMzQ5MEUzCis6MTBBODMwMDAwRkU4OUYyOTU4MkVBNkZBNTQwNkY5MzkwNkYzNDcyRjM4Cis6MTBBODQwMDA2Mzg5NDQ1RjgzRUMwNDMxQUZEMjgxNzk3MzdCNDhDQTVBCis6MTBBODUwMDBDNUYyMjk4Q0UxN0QwNjEyMkYzMDBFRDFCM0RDQUY5QkZGCis6MTBBODYwMDA4NEY3RjBDMEYzMzIzMUVFOUQyNjdGNTE0NDQxM0NCMTc0Cis6MTBBODcwMDBCMEE5MTBFRDg4MjBEOTNCNDZGQkE3Q0NERTlDNjQ4N0FECis6MTBBODgwMDBGNTRENjFFRDI0MTcyN0VGN0Y5M0U0MjRFMEY5MkNDQUZFCis6MTBBODkwMDA5OUQ3OThDNEIzQ0Y4RTcyQTYxMjEzRkY1NDdDRUFGMUY1Cis6MTBBOEEwMDAzNENCRjE5MDE5RTEzNDJCQ0I4ODhGOTAxOUUxM0FEQjRFCis6MTBBOEIwMDAzQjA4NEY3NDRFQzAxRjA3NEY3RTI5NDc5ODVFOEUxNDg5Cis6MTBBOEMwMDBCMDMzRkM1Q0YyN0Q2RkREODE3RUVGRjlFQzkwMEYzREUzCis6MTBBOEQwMDBDMUFDMUM5MjlGN0E3QjI0NUU1RTVENDE4RUUzODJGMjY2Cis6MTBBOEUwMDBFQUZBMkNEQzRGQjg5NEY1QUVEQ0E5MENBNjhCOTNGQkVFCis6MTBBOEYwMDBEN0FBNTkxQUZBOTE3NEI5NUJFNEQ5MkJBRjhCQkNERDk2Cis6MTBBOTAwMDBEMjY0RDI3MzUxQkRDOEYxNUYyNjRBOTcyMjVENjlGMEM3Cis6MTBBOTEwMDA3RkM1QUU4NDg4MEFGNDU2MjJEQTVGOEFGNDMwMjFBQTExCis6MTBBOTIwMDAxNzIzMjY4N0Q3MEFFMzZFNTQ3QzZENkEwQ0JDNjdCODgwCis6MTBBOTMwMDBCQ0E0RkYyNjlBRkMyQUQ5NTNDQzk3OEU3ODA2QkM0RjJDCis6MTBBOTQwMDA0Mzc4NERCMTc3QjQ5QTYxOUU4N0FEQkU5RkEzQkY1MjQ1Cis6MTBBOTUwMDBDRUJDODRGNzcyODM3RUE5NzBENDk4OTEzRjJCRUM0NkNECis6MTBBOTYwMDBGQ0ZBMDlFRjk1Q0U0MUVGNERERjA3RUZDMzExRUY1MjJGCis6MTBBOTcwMDA3RjBDQzFGRTA0QkMyRkNDODlCMTVGMTgwRkVGQzFFRjczCis6MTBBOTgwMDA4OTc3MjNCRTI1REY3NzI2MzgyQjFDMThEN0FERTNGOTRFCis6MTBBOTkwMDBDNDEzREYxRkQ5OEFFNThDRDUwNTc0Q0VBNTMzQ0RGNzU2Cis6MTBBOUEwMDAwNjdENkZFNkRGNEI3QkZDMkFERTlGNThCODA2QkU0MzcwCis6MTBBOUIwMDBCOUIzMjA1MDgxRTVBNkI1MEFDOUNCNDkxRjA1NUJCMUUzCis6MTBBOUMwMDAzQ0YyNkVGRUJENjQ3REYzMUI3ODBGNTk1Mzg4QjdERkYwCis6MTBBOUQwMDA3RDc0MjNERDI3MTFERTI4REE5N0I3NTc2MEI5QTk4RDdBCis6MTBBOUUwMDBCN0ZGMkFEOTFFNDJGRkJBRUM2MEI4MTVERjhGN0Q4MDExCis6MTBBOUYwMDBDRjQzREE3NUQzMDU5RDc1MkEyRkJDNDFFRERBNzlCQkJCCis6MTBBQTAwMDA5QkRGQjIyNzkyN0MxMjc2REEzNEIxQ0VFOThGRjE3NUYyCis6MTBBQTEwMDBCQTdGN0I1NTk1MTdFOEYwQTZGRTkwMDVFOUUwQjBBOTRFCis6MTBBQTIwMDBBMThDRTQ2NTFDN0ZBQjVDNjlDRkMzRTcyQzkwMEI4Q0Q5Cis6MTBBQTMwMDBGMDBERjQzOTgyRTc5QjZFODMyMTFFQ0JFMTc2ODZDQzQ0Cis6MTBBQTQwMDBEM0M0N0NGMTZBMERCRTFFQ0JFMTcxMjc1OTJGQzNDNTVCCis6MTBBQTUwMDA3ODVFRjFBM0M5NjRCN0NBM0NEMkM4Q0Y5ODgyNzEwMEFFCis6MTBBQTYwMDA1QzIzRTlENzM4NzlBNUIzMEE5QjQ5NUZDRTFBMkVGMzQ4Cis6MTBBQTcwMDA0OTdCQ0RDQjYwREM5MkIzN0ZCODMyOTY3RkZEODQxOEUyCis6MTBBQTgwMDBGNzg4Qzg3Rjk3RUZFQkMyMDUyNkY0M0YzQTkxNzhFODQ0Cis6MTBBQTkwMDAxRUIzREFGN0QxMkVFOTRDNjNCQTdCNDIzQTBCNzhCOTkwCis6MTBBQUEwMDBGM0QxOUExRkI3RTUwMTdDNERDREU2MTAwQUZEN0M4NUY4Cis6MTBBQUIwMDBFRTNEQjlBNjg3NDU1MjUzMDZDRjdGOTY5OTQ1NzhERTdECis6MTBBQUMwMDAwMzlGRkZDQTU2RUJCNjREMUEzQjdEQkUxNDFCOTc4RkYyCis6MTBBQUQwMDAyMjNENTIyM0YwMjRFNUM1N0M4MTJGRTBFRkREQzhERjY1Cis6MTBBQUUwMDAwQkVDQ0Q2NDE3MkUxMkYyRkQxNjE2QTYzOEM1MkQwNkY2Cis6MTBBQUYwMDBGRUFFNzc3Q0YzOTlDOTg0RjEzMDNEMUZBRjg2RTk3MEQzCis6MTBBQjAwMDBCREQwRkZGODI3MDBGRkJBNDc5MjlEQThFNzU3NzdFODI2Cis6MTBBQjEwMDBFQkQ1M0RGMkZFNDE2RTVGRTlGOUJDNEVGMjc5NThDRkJDCis6MTBBQjIwMDBFNzYwMzg3MDNFRkZEOTM4REE3RjkxRTdGQTEyRUNGRDIyCis6MTBBQjMwMDA5Rjg1NTg3NEJEMDNGQUREQzA3RjA5NzhDRTZGMENGQThCCis6MTBBQjQwMDAyRDI2OUU1RjI4Q0E3MkRDNTNFRDVDMEY4NzQwMEYwQkU5Cis6MTBBQjUwMDAzRjg3NDRFREE5NDNCM0MzNDgwRjI1ODI3RjI1MUY5NzQ0Cis6MTBBQjYwMDAwODdEM0U0ODVGNTcxOUZEOTg4Nzg4M0YyNjhBOTI4NDYyCis6MTBBQjcwMDBCQkQ0Q0ZEMDBGRTk2Nzc5NkUxMEY0RjJGQjdFRjJFRjExCis6MTBBQjgwMDBDMUZGQzQ3OThFRDNGM0NCMjYwNUU0NzM0MUQ0NUYwMUIyCis6MTBBQjkwMDBCQzdEOEQ3ODAzNzk2Q0U3NzE4QTc2ODZGMjJDQUVERDA4Cis6MTBBQkEwMDBFRjU4MTNEM0VFMDc0OTQ3RkIwMDgzRURGRDg4Q0U4RUE3Cis6MTBBQkIwMDAzN0UyMkI5RTVEM0Y4MEFGMDRCMDk3OTJEMDhGNjdDNDgxCis6MTBBQkMwMDAxRkZGODhDRjIxRTQ3NTgwOUM3NkU0QzY5MEQzRDY3REE0Cis6MTBBQkQwMDBCQzVFRkZENjA0OEExN0M4RjhCOEU0MzcyNThGREJENUVBCis6MTBBQkUwMDBFRjY2Rjk1REI5QjhGRjIwRkEzRjc0RUIyQ0RBQUZGRURGCis6MTBBQkYwMDA4NkY5NjlCRjFBRjM4RDcyNjNFNDRCRTA3RUY1MDY0RDZBCis6MTBBQzAwMDA5Q0Y0NTA1QUVDQjhGNUYwNUNDRUVGNEI3MkY5QkFDNjMyCis6MTBBQzEwMDA3QkZDNUUxQ0VGODg5NUM3QzU4RjI0OEE2NzBBREY1N0M3Cis6MTBBQzIwMDBCODM4OTdDN0I5OTc4ODY3Qjk3ODFFMTE3OUQ4NDc1QzQzCis6MTBBQzMwMDBGQTc4QkFBQzU3MjFDNkY5NzI5REREQkU0MTIzNTdCQ0U0Cis6MTBBQzQwMDAzRkIzMzVBM0JFRjIxNDhBQkNGNTM1OUM1RUZCNUU0OTZBCis6MTBBQzUwMDBEQkFBQkRBRkVEOUFEQ0YyMjUwODQ3NEZBMURGOUE4RDQ0Cis6MTBBQzYwMDA3MTk2NTdCODVFNjgzNEY3NUEzMUJGRTQxQTc3NzAyQTg0Cis6MTBBQzcwMDA3RTZGRjQzMkZGMEJEODhGQjdENzNBMEZFMERDMjdGNkEwCis6MTBBQzgwMDBFOUZCMkNEQ0RGRTg0QkUwNEYzOUFGNkI3MkFCOTdFMEIwCis6MTBBQzkwMDA3QUZCNkVFRDI1RjkzMDUwQUVFRTI1RkVCRjI2Mzc0MDJCCis6MTBBQ0EwMDBFM0Y2Q0Q5N0RGNDVGOUM3QkNDQzg0N0Y1ODJFRjg4MkY4Cis6MTBBQ0IwMDBFMkJDMzFFMkJBODNFM0I4RkFGQjY3OUFBQ0IxRjc5NzJBCis6MTBBQ0MwMDA1OTVFQjIyRTNFN0I0MzM3OEYxQkRFNjg2NzFCNzNFMUY0Cis6MTBBQ0QwMDBGQjkyRUU0Q0YyMUZFQTUyNDJBMzlEMTRDN0ZCRUZDNTU0Cis6MTBBQ0UwMDA1REZCODZGNUQwQkEzNjk1RjdFNzNGNUE0QUZCQjgxNEI0Cis6MTBBQ0YwMDBGNzU5RERGRDM2QzlCOUQ1OTI0RkJBRjQ3QzUyMkZGMDIxCis6MTBBRDAwMDA3QkJFRkQwRjYzNUM3QzA4RkNCMzI2MTZGRkJDOENGQThGCis6MTBBRDEwMDBDOTEyODVGRjZEMjIwRkE5NTI2REE4QzBCOEQwQTkxNTIwCis6MTBBRDIwMDA4Q0NFQkZERUY2QUU0QUY0NzREQkIzMEFERDA3MjFFRDRDCis6MTBBRDMwMDBCM0Q1MDJCRUYxRDY4M0U3MDdCQzFBRjk4MUU3MDdCQzk5Cis6MTBBRDQwMDAxQUZGMENDRjBGNjhDQjc4N0U0MDVCMUZDRjBGNjhCRjE4Cis6MTBBRDUwMDBFM0Y5MDFFRDc3M0MzRkEwMkQ5N0IwRTVBRDE4Njc2QkE3Cis6MTBBRDYwMDA2QTYzQ0VCMDk3OUYyN0QwQjZDN0YzMDREQTMyOUUyNzI2Cis6MTBBRDcwMDBEMEI2QzdGMzA0REFGMjI5QzZFMTc4RUEzMTk1RTJGNEY1Cis6MTBBRDgwMDA3OEFFNDBEQkZFRTY3NzI3NjYyMURENzQyNUYwM0MzMkE1Cis6MTBBRDkwMDAxNkYyRjcxNDAxNUM1NjA4QjhFMDc5MDM2RDdGQzc1M0NCCis6MTBBREEwMDBBRTdDODcwMUREQURFODU5MzkwNzlGOTdFQzVBQTVFQkRBCis6MTBBREIwMDBBRjVFNkQyMDNBNjRFRDVDRUUzNkMzM0YyNDNGRDUyMjkyCis6MTBBREMwMDAxNUU3RjFFRDJFODVBNTE3RTBGREUxMDZGREQ5QkQ3OTZBCis6MTBBREQwMDAyMzhBOUU1QkMyRkFGN0Y1NEMxM0FGMkQxODFDOTc3RkEwCis6MTBBREUwMDAzOTU3RTQyMUU2QjAxQzZEOUMyNjRBMDcwRTVGMDRENzU0Cis6MTBBREYwMDBGRjkxRUE4QjQ1MDcyNUVDQTI1NDhBQ0ZCQ0EzNjJFQ0Y1Cis6MTBBRTAwMDA4MTdEQzU5QUI3NUNBRTY4RTJGNzA2NzhEOEIyRjRGNEYzCis6MTBBRTEwMDA5MEUwRDVEMzQzRDIxODNEM0QyNEZCRjRGNDkwM0E0NTVECis6MTBBRTIwMDA0RjBGNjlGRTcxRTc4NDZGN0E5NTlFM0U4Q0YwOUQwMjBDCis6MTBBRTMwMDBGRjIwN0MyN0UwQ0Q5MDE4NTc4Mjc1NjI5Q0Y3MkYwNTg0Cis6MTBBRTQwMDBERjJGNzJDNUJFODc4MEVGQjdFQ0YyMEE4Nzk3M0VENzM3Cis6MTBBRTUwMDBEOENCQTJGNjQ5RTkzQkNEQjQ0OTZCOEM3QjRBMzg0QTQyCis6MTBBRTYwMDAzQjQxQzYyRjI3MzFFRUE3REJGMUJDNjUyMURBMDFEQ0JGCis6MTBBRTcwMDA3RjQzRkQ4RjdDN0VEOENBRkQzNkE0MjA5NDkzMzdCMUUyCis6MTBBRTgwMDAyMEM5QTM5QjBDRkFGRjY2Qzc0MzU2RDRGRjgzRDYwQjk5Cis6MTBBRTkwMDAxNjE3REUxQjY4NUMyRkRBNTE0QzEzNEYzMkVBN0ZBNTgwCis6MTBBRUEwMDA1Qjg5MjQxN0UzNzJCQkE1NUMwRTlFMjU2M0M3QUYwQ0JDCis6MTBBRUIwMDA0NTVFRkNERUUxQjdFNTc5NjgxQzY2MkZEM0M1N0I2MzkwCis6MTBBRUMwMDBEQTczNzIxRTEyMkU3MjdDMUI2QjU2QjM5MDlFQzcxOERCCis6MTBBRUQwMDBFRDJGQkRCRjJDRkQ2QkVBNTQxMzhGOTZGRUIxRjQ0RkRFCis6MTBBRUUwMDA4QzcwNTY4NzE3OTBERDM1RDEyOUZERTI5RUVCRjFCREMwCis6MTBBRUYwMDBGNDg3OEQ3RUU4RjlGNkE1RTY4NTk0REU5RjE3NDRFRDhDCis6MTBBRjAwMDBDOTJCQzQ3MzlFODgxN0MxQjI3RUZCNkZEMEY4NzJDNTdGCis6MTBBRjEwMDAzQjBDQzc5QkJCRkIyMjBGRDJDQjQ2QTU5OTE5RTY3NzBBCis6MTBBRjIwMDBGMDU1RTg0NzM1RjVBN0YzRjg0QjUwQjc1RkY1QjZEMkMzCis6MTBBRjMwMDA0QkYzNUVDMEZDRjdFMEIzNTFDNEQzMUFCQkRFQTY3RDcxCis6MTBBRjQwMDBENEM2MkUxRTJGNjBCQkY0NzgzMURBRkJBQjU4ODdCNTIwCis6MTBBRjUwMDA0MDE5NkNFRjM3QjAxRUVBQ0Y2OERGMEZBMjkzRjNFODE5Cis6MTBBRjYwMDBGMThFM0M3OURGMTZDRjE3NjA0MjJFRDUwOTc4QzVGM0Y0Cis6MTBBRjcwMDAwQkNDMDhFMEE5RDFGQjNCODExRkU2RTU0RDhBRTZEMTY5Cis6MTBBRjgwMDA2NkI4QzA4RjUxMzEwRkMzNkI4RDk1MjdDNUYwNzIxNTEwCis6MTBBRjkwMDBCMDQ5OTczQjZBNDg0RTJDNkYxQjE0OTdCMDEyM0ZCNUNGCis6MTBBRkEwMDA5RjdCN0REMjBFQjgxRjdDMzc3Qzk2RTY3OTc5REMyMEJBCis6MTBBRkIwMDA3MUNFM0I3RUZDNUNEQTkzQUYzREZGRDE2NEU1RTcwRURBCis6MTBBRkMwMDA1OUIzRkU3Q0ZFREEzQzkzM0MzRkE1MEU2NUZEODNFMTYwCis6MTBBRkQwMDBGQUZERjJGMjY1RkUwMUMwRUYyRTJERkNFNDNFODI1QzJDCis6MTBBRkUwMDBDRkVGMjdGNTNDODlGMTQzMzU3OUE2MURGRDVBQUYyQkVDCis6MTBBRkYwMDBEODgyRjU4NzFERUMzREFDQTAzQzczNzgyOTNGRTRFNDkyCis6MTBCMDAwMDBBRUEzMUZBM0ZGMkVEN0M3NThFRjE2QkNERkI2NkU5N0FGCis6MTBCMDEwMDA0QUZFNjBEREFFMzdDODJFOEFFRkVGQjUwRkRDQTMyMDA1Cis6MTBCMDIwMDBGNjM3N0UxMjZCNUUzMkFGQjk1MjJENEFFREQ1RDhFOUI0Cis6MTBCMDMwMDA0Qjg1MUYzMDc5NzhFMDIxNkM1N0ZBNjE1RTBBQ0VEN0Q0Cis6MTBCMDQwMDAzMkEyODNFRUM1RUFCRjgzREJDMTZFOTVDRDQ0Rjg4MUExCis6MTBCMDUwMDBERUUzN0FERjYxQTY3RDA3Nzc1MjQ4NEQ0MTNCNkUyOURBCis6MTBCMDYwMDBFM0Y3RDBGOTlBN0Q0ODJBRUFCMDIyOEFEMzY2RENBMUI4Cis6MTBCMDcwMDAwNkQwRkVGRTc0Q0RGMjM0M0NBRjlDOTFCQzIyQUQxMEU0Cis6MTBCMDgwMDA5RUQzNkRGQzVFOUEwQ0M1MTRFMEU3NEU5N0E1RTEzRDlBCis6MTBCMDkwMDAyMDM3RDhGOEJFN0NDMTVGMjc0NTBBODFERjVFQjdGMjUyCis6MTBCMEEwMDBGQjQ2REQ0OTQxQkFCRkEwM0Y0REE1RjkxQzVCMDc0QkVDCis6MTBCMEIwMDAxQjg1RkIxRURGNENDNDdCMDc3MkNFMzgyNkUwN0NCMkJBCis6MTBCMEMwMDBDNUJEMTYzRkNBRTNGN0RDMUM3RkY2QkI4OUU4QUZBQTEzCis6MTBCMEQwMDA2NzFENzRCRTVERDI5RkJCMzBCNkJGQjI0MkMwQTNEMTY0Cis6MTBCMEUwMDBDM0YzREU0RjBBRkJGMTkwRDg2Rjk1NzlGMDZCQzQzRTQ1Cis6MTBCMEYwMDBFMEExRDEwM0Y3ODM3OTMwMkZBNDMxQzE5RkJBMTBFM0M3Cis6MTBCMTAwMDAxMTA3NTRDQTZCRkZDNkU5NEY0RDIzQkI5OUU3QjNBRjk0Cis6MTBCMTEwMDAxMUY2QzM0OTkxRjdCOTY2RjY4QzRDRjQyRkUyRTU0QjcyCis6MTBCMTIwMDAxRkM4RTM3NkVGMEY3NTVGQTVDQzNGOEQwQjg3MzQzM0Q3Cis6MTBCMTMwMDAzMzVGNDJGNzJFMDVDRTU1RUZENTNGQUIzMUUxNzk1QTVCCis6MTBCMTQwMDA3QzhGOTczN0RGOTdBN0U4RjJFMjFCMzEyRjFFNUVBREE5Cis6MTBCMTUwMDA3OUE1M0M5MzlEMjM1RkJBMTFFRjIzRDdFNEQ3QTA5RjM1Cis6MTBCMTYwMDA4NkVCNkJDNEZCQzhFOTlFRDIxMzc0NEYwN0Y2ODNGN0Q2Cis6MTBCMTcwMDA4NjlERUZERUM4MTU2MjFFOEQ5ODRGOUVBRTdEQ0ZGOTdECis6MTBCMTgwMDAzOURBQkY5QkJFM0YyREUwRjZGNDNCQTZBQTZEMzFFNjRGCis6MTBCMTkwMDA5OTM3OENDQkE3NzExRTczMDBGNzI1MkY4RUYwN0IzRjVDCis6MTBCMUEwMDBFM0Q1OTNFN0I4RTNDREFCNkI0NkVGOEQzODZGQ0NDRkVCCis6MTBCMUIwMDA4QzM1NUVDQTMwNEUyNzcyQkU1REFFREU5NTAxQkU5RkY1Cis6MTBCMUMwMDAzN0JBM0E1OTUzNzZGNkU3Q0ZENUM4RDdEOTAyM0Y1RDlCCis6MTBCMUQwMDA1N0Y1RTZEMzdEMDBCM0I5RkYxQTBGQ0Y2NUU2NjYwNUQ0Cis6MTBCMUUwMDBFMTkwRTAwQTA2RDExRTkxRjcxNUUzN0RDNjNDQ0YyMzFFCis6MTBCMUYwMDA3NDRFN0M0N0UxQUNFQUNFMUYwQzg2QjM5NUJFQ0JGRTA1Cis6MTBCMjAwMDBBNERDMzlGQTg4NEE3MkU3RTgwNzgyMUY5OURGQTE5NDIzCis6MTBCMjEwMDBBMUJFRTI3Qzc1OTRGMUI4RUVEMTc2RkVGQjFGQ0I4MjI1Cis6MTBCMjIwMDBBMDJCNDA3RTJDREQ1RTNGMDcwRjFGQUZEQzMxNzEyMzZBCis6MTBCMjMwMDA4QTdGN0M3RjM3Qzg5RkE1NTk4QzREODNFN0IyMERGQTcyCis6MTBCMjQwMDBGREIxNkZEOTAzQTRFNzU2M0M2MEQ0NjcwMTJCQ0FEOTdFCis6MTBCMjUwMDA5NTBGRTlFQkQ3QjEwN0JFNDZGQkEwQ0U2MEY3NjYwOEI1Cis6MTBCMjYwMDBCRDZCQjQ3RjY3MEMxM0Y2NkYxOTJCQkI5MDczNEU4RkI5Cis6MTBCMjcwMDAzMEZGRUM2MUE0RkZGOTdFREIyNEIxOUY2RUFDRkZCQzE0Cis6MTBCMjgwMDA5N0QzQzM2RDNCRkU2MEM1OUYwNDhBRDdFRjMxOTAxN0ZCCis6MTBCMjkwMDAyM0ExREYxM0VCOUNGNDVDMzJDQzVGMzMwQ0RBMzUwRDY5Cis6MTBCMkEwMDAwQjJFQzQ3MUZBMEU3MDM4OUY2QTM4QjU5MkUyRDJCNThGCis6MTBCMkIwMDBEQzBFQjBFMTI1MkJGMDlGQjZFQkVERTQ0N0RGOEJGNzFBCis6MTBCMkMwMDA4QzAxOUM2RDM2NkU1RjQ4QkI0QTU1NkY1N0YxMjc1QjBBCis6MTBCMkQwMDBBNkZFNkU0NTFBQUVDRkZEQ0NBQzJBRjQzRjNDQ0YyNDdGCis6MTBCMkUwMDBGOTExMUY5QkNBRkQyNTI4QkYzNzU1M0I2ODlGNzhBQkQ2Cis6MTBCMkYwMDA4OURGNDM2OEI3RjFGREI5RjBEMzUzRjc2MTM4Nzg2NDVCCis6MTBCMzAwMDBDN0U2MTlFODY3MzhCQkY3NDYzMDJFRDE2NkUyRkJBRkQ3Cis6MTBCMzEwMDA2REQzOThCOEM3OUE4RkQ3RDQ1REREODlGM0NBQUYwMUQyCis6MTBCMzIwMDA3OTBGRkQ2RDJBRjA5NzM4MzVGRDMzNjEyRjM1MEE1Q0IyCis6MTBCMzMwMDBGNEJENzZEMTRGRjFERUFCOUZCRjQzRTYyQUFDNzMwNDc4Cis6MTBCMzQwMDBDNUJGQzYzMTRFMzczMkJGODQ3RTFCNDMxMzJGM0EwMTJGCis6MTBCMzUwMDBGQTg3NjlDRTNGOEZFQjUwMjI5NjE0QkE1RjhGRTJEOEZFCis6MTBCMzYwMDAwREVCMjMxOUQ3QTNGRUZDMjVERkFGOTVGMzczQkY5RTJBCis6MTBCMzcwMDAzRDAzRTNGRDUyOUY1RThGRjk2RDE4MDcxNjc2RUYyMkFECis6MTBCMzgwMDAyNkZGRjg3RTQxQURBMEVCNDVDMkRFQkQzRTg5QzM3OTA0Cis6MTBCMzkwMDAxOUYzRDFGOUFCRUJFQzJDMDVFM0NCRDc1Nzc0NENBMkU2Cis6MTBCM0EwMDBGQkFGRUIyRDY5NjhBRkM4Qjg3NzNDQkNDNzhCQ0YzNDE3Cis6MTBCM0IwMDAzRTk5Q0NFRkNCNTFGQTQ3NjMyN0M3MzAwNjUyMUFDRERFCis6MTBCM0MwMDBCNzM3RjZCMzYzOThFMEU3RDFDMjRFMUJDOUZDQjhDRkRDCis6MTBCM0QwMDBEMkI4RTcyMkNBQzdCNzI1RjI3RDM1OTA2Rjc2QzRFQkE1Cis6MTBCM0UwMDA3RUQ0RTdCMEVFNUI1RTREODhGMDdERTNCMEI4MTc4N0EyCis6MTBCM0YwMDA4NTY4M0Y2NjRGMjZFRDJCQjgwQkZEQjRFRjdFRDJEMkE5Cis6MTBCNDAwMDA5QjRGRjIwMEU0OTcwMkJBNzNDRkIwNEZBRTMxRTNGRDI5Cis6MTBCNDEwMDAyMDM5NjA0NzQxRjlGODJGMEU1RjgzQkZDRkQyMzhBMkExCis6MTBCNDIwMDA3NzI1REUxNzlFRkVGODU5NUUxRUQ3N0IxOENCQzMxRTBDCis6MTBCNDMwMDA0RkJDOTZDQTEzN0E1N0FBNTA5RUYyNzhENkI1RDQxRTNFCis6MTBCNDQwMDAxRDI4MjBBQ0NBQzc4NzVGOEJFN0ZDOEU4OUY4MjVGM0RGCis6MTBCNDUwMDBGNUQyM0Q0MThEQkIyRjMyNjlFMzgzMjVGOTVDNEUxRjQ4Cis6MTBCNDYwMDA0QkUwRjU4RTE1QjAyNTczMTFERTYzN0E0NzZCN0YzNzlECis6MTBCNDcwMDBDMTkzMkZFRDUyNkU5N0M5NzVDQTc2MkMyQjc2RkZFRkNDCis6MTBCNDgwMDAwQjNENzA4QkI4REY2NzdBMTI2QjRCRTBGQjE1MjFCNDc0Cis6MTBCNDkwMDBBRkRFRUNCRTg4RTBGMkMyMzA5NzgwNTcyRkREREIyOEFDCis6MTBCNEEwMDBGQjMxOUVFRjk3RTNBRTQyQkQ4RDcyRERBMjNGNEZGNEJDCis6MTBCNEIwMDAxQkExMkY2MDlDMEQzNDRFOTFCRjA0RUZFNTY5OUM5QjRFCis6MTBCNEMwMDA1NzgyNzgwMzdDOTkwNUJFQ0NEQzBGREM0QTc4QzY3RUI3Cis6MTBCNEQwMDBEMzhBNDk4RjRDQzQzQ0IxMzdDRjQwRkQ4MkU4QkM4RDQ0Cis6MTBCNEUwMDBGNDcxNTg4QzczNEIyQkRGNjdFQTRGMkIyNDNBOUE5RUVBCis6MTBCNEYwMDBDNEVEM0Y1NjBBRjAwMzM5MzY0NUMwQUQyNDVGOUNFM0U2Cis6MTBCNTAwMDAxOUMwNDNBNjQyRkRCNzBBRjhFNUYxRkExN0JBREVEMzJGCis6MTBCNTEwMDAzRkQwN0EzNTc4RjI2M0RFRjE5QkJCQzYxMjlFQTYwQzUzCis6MTBCNTIwMDBEMEMxNjY1RDNGQzc1QTBDRURBNkYwQkM5NDQ2NTcyMUNBCis6MTBCNTMwMDBCNUJCNTdEQ0IzMkZFRjJEQzY3NjA1RDA2RTdBNDVGRjJECis6MTBCNTQwMDA0NEU0MDc3OTZGMUIwQjREMjM2N0JENDE0ODhCODE3QjFBCis6MTBCNTUwMDBEODNBNzg3RTBBMUJFOUU3RjcxMUNEOUQ1MzJBRDZFNzQyCis6MTBCNTYwMDAxNEVCNzM2QUVGQTUxQkUwQzM4RkZBRjM2QjM0Rjc1MjQ5Cis6MTBCNTcwMDBDQkY3MDM3MDFGRThBRjY4ODJFODRGQzdDRkIxRkE0MzNCCis6MTBCNTgwMDBCRTg4ODc4RjcxRjk3RjYxN0NDODc5MUFFMDM5MDA2N0JFCis6MTBCNTkwMDBDM0ZDMjQzQzkxOEZBOTVEOTE5RTlGRTQzQzg3RTU5QjcxCis6MTBCNUEwMDA4NEJGNkRFMEU3ODJFRjM5OUVDOEVGNUZGRDM3MjIxRjUxCis6MTBCNUIwMDBEMkFCQTdFN0Q1NUQwNTI2REMzRjk1RUREQTNBNUEwMjE2Cis6MTBCNUMwMDAyOEU3NjVCQ0RCRDY1NTFENDJGREQ3RDQ1RDRFNzk5QjdGCis6MTBCNUQwMDBBQjdGRjVFQ0NCMjE2OEJGRUFGOTg3NTMzMDk5RjZBODI5Cis6MTBCNUUwMDBCOTNEMDNFRERDODYxREY3QTRGODcxQkZDNDFDNEE0MUM4Cis6MTBCNUYwMDBGOTc5MzRBQzU2QzUzQTBGMTgxMjc4OTA3NjU0QTNEMDI2Cis6MTBCNjAwMDAzN0M3OUVCRUZGMUE4NEM3N0ZFQ0IwMzg1MThGMzYzREQ2Cis6MTBCNjEwMDA2NThCRDgyODBFNzIwQkQ5NTE1MEZFOUM5N0VGRkQxQUZFCis6MTBCNjIwMDBGREQyQTY1RDdBM0I2OUQ1M0YzQzlDRTEyNTdBMEFFNUNGCis6MTBCNjMwMDA5QUYwOEMwQjhCRTQzMjc4MzY2RUI3RjgyMjZFMUU0RjgwCis6MTBCNjQwMDA4NDYxNTgxM0VCREY4OEYzMzNCNkM3Nzk5QzA2QkMzN0E3Cis6MTBCNjUwMDA3NUE4NEJGMTNDQUZGMTNCNDgxMkIyQzM5QUJBRUUyNzQyCis6MTBCNjYwMDBCQkFCNDkxQjY3MDAzQ0Q0QzVCMUJCNkVDREQ3RTc1QjE0Cis6MTBCNjcwMDA0QkI4QjBCMDg3RUM5QUQ2NUZGRUFDRjg3MzA3REVBNzg0Cis6MTBCNjgwMDBGOTRGMjk0QTkxNTY1RkFFMjczODlERUE1OEZFRjdCQjFECis6MTBCNjkwMDBCREYxRjVFQTQ5QjQwQjZDREE3NjFDQUZERTVEMEFFRDVDCis6MTBCNkEwMDA0OUIwNkVGRTZDQjA0NDUyRDBDRjZGRDg2QUYxODFFNkRCCis6MTBCNkIwMDA2NTBEQ0YzRUYxMjRFRTg3QjA0RjZDNzRGRjQxRkRCM0IyCis6MTBCNkMwMDBGQjNGQkUxNENBRjU5RDE2RjcxQzNFN0Q4NzkyMTFDNTNGCis6MTBCNkQwMDA0RjkzOTdEQjI3MTIxRkFCNUVEQzRGRjcwQ0UyN0JCNDc2Cis6MTBCNkUwMDA2QjI1NUVFQTNCRjc1QUQ5RjhDMUYwQUJFOEQ4MkI3RTYwCis6MTBCNkYwMDA3N0MxODA5RjhFQ0ZBRkE0RkIzQzdGRjk5RDE1RTlGQUZGCis6MTBCNzAwMDBFODFFODU2NTE2MEM2RTVGQjc3NTdGMEFEMjFGQzIwOUU5Cis6MTBCNzEwMDBGRDRCODlBNzAxQkMwREMyNTdFNDlBRERBNTU0OEZFMjA5Cis6MTBCNzIwMDAxQUYxRjAzNjM3OUZGMTc4RDBBRjlFN0QwRTdGMDdCMENCCis6MTBCNzMwMDBFRTM3MzYxRkFFQkZFRUI5REI1MzcwMUQ1Rjk5OUIzOUY0Cis6MTBCNzQwMDA3REZGRTI5RTBDM0Y4QzVCNjcwOTY1MzhFOUM5REZENzU2Cis6MTBCNzUwMDAzRDdFMDdEMUREQ0QwN0VFQzhFMEJGQTdFMUNGMzY0RDc2Cis6MTBCNzYwMDBBMTc1NjZFM0ZBNkU3QTZDM0VBRDZGMjUwQjEyRERENURFCis6MTBCNzcwMDBGRDgyQzcyN0JFMTVCRkM3NjBDNEU3NjlDMTFGNUY2REUzCis6MTBCNzgwMDBCM0UxOEY2NEIwQUYzMDExMURGMzA4M0Y1MDQ1OUVFRjE5Cis6MTBCNzkwMDBBRDRDN0I4RjA1NThEQzU0RkU1NkM0MDdERTFGRDAwMzJBCis6MTBCN0EwMDBDQ0NFMzQ3MUQ5QTZFREY3RjYyMDdFOEUwREYzNjdFMjhDCis6MTBCN0IwMDBCRTFBQzAyMTI0RTBBNUUwRkRCQUVBODFDQTRDOEUxRjYyCis6MTBCN0MwMDBFNjM1Q0JCODMyRDhERjE1RjgxRUVCRjc1OEZDMDlDNUMzCis6MTBCN0QwMDBCQTc2NjJCRjlFOEYyRkUzMTMzMEVGNDREQ0Y3RkIyQTZCCis6MTBCN0UwMDAyM0Y2QjlBREQxQzMxNTIxREY1ODBGRDNEMjU3M0M3RTE0Cis6MTBCN0YwMDBERjdFMUZEMUQ1MzcxRjcxQkU2OTBDNTc1N0QxRjcxRTk5Cis6MTBCODAwMDA0QjA0OEYxNjM3ODZGN0Q2MjgyNDBGNkNCQUZCOUYwNjk5Cis6MTBCODEwMDBFODYyQkI0NUYwQjNGRTNCQ0NEM0FDNjhFMUJCODdFNzQ1Cis6MTBCODIwMDBENUFFN0NDOEE2QkIwRjIxNEEzN0Q2RThGQjgyMjg3RjVECis6MTBCODMwMDA0QTNGRUE2NkMxRkZDNkY1MUFFNUMxMUYwQ0YyODAzRDFBCis6MTBCODQwMDBFNjE5RDJCRDMyMEQ5NkYwOTM4RjIyRkYwMkJGQTI5RjYwCis6MTBCODUwMDBEOUYwQUM4NUZDRkNFMzNCREZGOEY4M0FBMEYzRTMxRDNDCis6MTBCODYwMDA5MjZGRjU3MkQ1QzhCNzc1MkY0QzYyQjFGOEY2QjhDM0IwCis6MTBCODcwMDBDNzYyRjIyREJDOEZDOUI3OEVFODNFOEQ5N0ZENzA3MkZFCis6MTBCODgwMDBGNUU2Mzg3MjM1NkZCOEYxMUM0QjUxMkFFNkJBMUY3QkNBCis6MTBCODkwMDBCQTdFMzhDNTA1MEM3MDk1RkVBQzUxNUVCRTlDRUY4RDJFCis6MTBCOEEwMDAyOTJGMTk1RTQxQTU4MUEzODQ5RkE0Qzc1NUNGQUNBNkJCCis6MTBCOEIwMDA3MTA2RTg1NkQyQTVBNERCMDFCQTFDOTQ1RkE5ODNBMzQ0Cis6MTBCOEMwMDBGMUZCMTcyODhGMjY0NUYxNkU1OTBGN0UwQURBQjFBRkNBCis6MTBCOEQwMDBBOUY0M0IyODdEMzA5NzhEMDBGN0JFOUQwNUI0MEY3QTAzCis6MTBCOEUwMDA4RkIwRjNGQjlDRkQyOTE4RDdCQjQ3RjgxNUZEMTg0RjA3Cis6MTBCOEYwMDA0QzhEQkVFRjRGMTA3OTAzODFGRTk0MzQ4RDVERjQ3OTQ5Cis6MTBCOTAwMDBCNzlBODI3NjVDNkYzOEY2RUZDOUNBN0IyQTdCRTNGQzc0Cis6MTBCOTEwMDBERUFDM0NCRjU0QTkzQUYyRDc2MjlDQjY5REVGNEZBRTY1Cis6MTBCOTIwMDA2ODU5OTg4MkYxOENCRUVFNDJGQTNEQTE5QkRFMDU3RkZDCis6MTBCOTMwMDAxN0U2REIyN0UzOUEyMUJGMzlCQjJDN0FCRkU5MTExNjQyCis6MTBCOTQwMDBBMkZEQ0FFNURERjVCNDVGNjg4QzgzQUM3NEQ0QTRFMkQzCis6MTBCOTUwMDA3RUEwMzEwRTcyMzNFNjQxNjExRUYyNjNGQUY3QUIzMDFFCis6MTBCOTYwMDAzRTgyNzgzMkQwNTMxMEU5Mjk3QjMwM0RBRDFDMkVGNjUzCis6MTBCOTcwMDA1RjRCNTg4OTZFRkY1NUM4QjU0QUI1RThBNzY4OUZGNDc0Cis6MTBCOTgwMDA4MURGOEVGMTIwQTYxNkZEMUFGNUU5QjdFOEM3MjMwMzdCCis6MTBCOTkwMDA4NDNDNDRBN0Y1QzEyMzMyQ0Y4QUU4NUFEMjlERDE3Rjk3Cis6MTBCOUEwMDAzNzNFNEZCQ0Y0NjkxOTlFMDc2QTc4RjlERjhBN0YwRTJCCis6MTBCOUIwMDBDRjEzMkY3RjMyRkE1NTJDRkZFQTVGRjNGRjhEMERBRUM4Cis6MTBCOUMwMDA1RkIxRTc4RkU0QUZGNEVEQjFEMTdDRkFGNkJDOUQ3RkI3Cis6MTBCOUQwMDAxNzk2NzdEQjdDMzhERkJFRjUzNkZFN0JEMDdCOTJFOUFECis6MTBCOUUwMDBERUU5QkU2MTNDQ0VENkZBREE3N0M1QkRBNEE3MzYxMDMzCis6MTBCOUYwMDBERUZFNkUzOEJGMkZGNjU0Rjc3RjdEODZGN0FCOUVFQUVBCis6MTBCQTAwMDBCNjc5MzFFRUQwQjQyNzg5RkNGMEE2REQwOTc0NEY3Q0ZECis6MTBCQTEwMDBERjZCREY5NTY5RTM0NUZGRERGNTM0OEFGMzE2N0RDOUY5Cis6MTBCQTIwMDBBQzE2RjM1QkZBRDJCOEJGRDZGNEVBRDQyNzVBMEFEMEUwCis6MTBCQTMwMDAyRURENEJGNzE2NTdCQ0ZFQTc2Mjk0M0Y3RDJGNzBCQkRGCis6MTBCQTQwMDAwMkZDRjNDNzcxMTNGMTE3QzNCQjdGNkE5OThBRTc4REI0Cis6MTBCQTUwMDAxOEY5RDU1M0JEN0ZCQTM2RTQ4ODA1MTcwRTg3M0U4MEE2Cis6MTBCQTYwMDAwM0FFMEJFMDQyRjc3NUM3ODM0N0Q3NzA3RTBGRkZGRjI5Cis6MTBCQTcwMDAzRTc4N0M0REZFNDI0M0Y3NjRFMkEzMjg1QzE0RkVGQjUzCis6MTBCQTgwMDAyM0REQzk2MUJCNDJFQkU3RUZGNzdDNTc4Qzc2RDJGMTNGCis6MTBCQTkwMDA4RTE2RDJGQkU3NUJGNzg3RkY2QkU5RTBGQkFFNUI4OUI1Cis6MTBCQUEwMDAwQzY1RERBN0ZFRDdBRTlCRDNGRkRBRTE1QzNGMTlGOTQ5Cis6MTBCQUIwMDA2MDMwOURGRkVBQUZBOUZDNUNCMjhGRTY2QkUwRkZGRjUwCis6MTBCQUMwMDAwN0FCQTM1OUYzMDA4MDAwMDAwMDAwMDAxRjhCMDgwMEEzCis6MTBCQUQwMDAwMDAwMDAwMDAwMEJDRDNDMEI3ODE0RDVCOUZGRUNDQzc2Cis6MTBCQUUwMDAzRTkyNkNDMjI2MDQwODQyNjBGMjI0NEExRTBCNzkxMDcyCis6MTBCQUYwMDAxRUE5OUI4NDIwMDhFMjA2QTRBMjIyMkVGOEUwMTU5MjNCCis6MTBCQjAwMDAwOEI2QzY2QUNENjIyMjAyRjVCNjUxNkNBRjZERDE2RjMwCis6MTBCQjEwMDA0MTQxREFEQTZCOEE0MUIxMDI1RDEwMTE1QUFBQUI4MjU3Cis6MTBCQjIwMDBBMjQ2QkE1MkFCNTAwMzFCNDEwNTJBQkRERUZGRkZDRjMwCis6MTBCQjMwMDA0Q0IyMzMyNDNDRkNBRURGRDdFNDIzQzczM0U3Q0MzOTI3Cis6MTBCQjQwMDBGRkZCNzVDRTE4NDk4NTk5QURCOTAwNEREQjRFRTU4N0YxCis6MTBCQjUwMDBCMTA1NjgwNjI4MDY0ODUyNkQwMEZEMDA0RTZDRkRGQURFCis6MTBCQjYwMDA5MDk0NENBRDVEODUzNDgwQkFFRDcxMDA0NUQ4RkUzMUJFCis6MTBCQjcwMDAyNjAwMTI0MDY0REJBOTEyOUYxM0UwMUJGQUI5MTJBMDQxCis6MTBCQjgwMDBBMzExOTcxOEQ2REQzN0I3MUQ5QjNGMkNCOTE3QTdENDQzCis6MTBCQjkwMDBCQ0YwNDFGRUFGQjFFRDc4RTFCREVDOTdBOUZGRTJCQjhGCis6MTBCQkEwMDA0MzNFQzBCNkQ2MDZCRTU2NUMyRjEyMEYzMzM3MjEzQzNCCis6MTBCQkIwMDA5MTQ0RjAwMEVFNUZGN0YyRThBNzk2RTFGRThCREIzRUUyCis6MTBCQkMwMDA5RjRERkJENzZDMUQwNTMyRjYyQkZGRjRFRkZDMzBDREZCCis6MTBCQkQwMDBERjI0NzlDNEYzRjg4MDAzRTFBQURDN0U0NjNDREY3RUYzCis6MTBCQkUwMDAyQTFGQjBGRDZDOTMxNDk0MTNCMEZGODA3RDdFODBENjI1Cis6MTBCQkYwMDBFRDA1RUYxMTg0NzdGMTdGMjJERTNCNkNCN0UyNzhDMzZECis6MTBCQzAwMDA1MDk1RTFFQkM2N0I4NzBERjIwOERGQkRCMzY5N0U2NDFBCis6MTBCQzEwMDA3QkJDQ0I5RTQ2RjBGRDdCMDg0NEUxN0YyMUJDQkRGRjkxCis6MTBCQzIwMDBCMUZDM0UzRkRFMDA3RTg2REIyQTdCMURFOTA4REZDM0Q4Cis6MTBCQzMwMDAxMDBDQTlEODNFMDgzMEIxRDU3OTJFM0MzRkE2QzE2MjgwCis6MTBCQzQwMDA3QTBGNDJEMDFGNDAwNkYxMjMyNzJGOUMwMjA5RDRBRTYxCis6MTBCQzUwMDBGQTVDQ0VBN0Y3QTc0RDRDNDMzOEZDQUFDNUJENUVBNTNDCis6MTBCQzYwMDAxOTE2QTZDMzhBQzFFRUMwMkE4NDBCMTRFRkZDQjVEOEZFCis6MTBCQzcwMDBCNzBFQUQ3MUFGRTIxNUVFMDQyODAxRjg4MTQzNUJBRjVBCis6MTBCQzgwMDBGRjk0ODkxMkFFRDdCNDBDRTFDMjc1OUFGQTU5NUM0RDkzCis6MTBCQzkwMDBCODhFQTI1QTgyRjY3QzZFM0ZBMkY2QTFGRTU3RUZBMUEzCis6MTBCQ0EwMDA3RDE1QTcwRDgyREFCQkRGRTAzRjI3NjAzRjQ3RUJFMzVFCis6MTBCQ0IwMDA3RUIxOTk1MTdERkMxNzAzM0I1RDBBRUUxRkUzNTYyMEQwCis6MTBCQ0MwMDA4MDI4RDkyMUVBN0Q5QzdGOTNFQTYyQkFDNDQyQzBFRjAyCis6MTBCQ0QwMDA3MjVFM0E5RDdFNEY4M0ZEN0FBNzkzOTkzRTNBRERDRTAwCis6MTBCQ0UwMDBBMTEzODA4M0RFNTdFOEJGMDhGRkU0NTUyMUQyNDMwNTQ2Cis6MTBCQ0YwMDAxNDdGNThFMDIzN0QyMzExM0RERDI5MEU1Q0NGREFFNzY4Cis6MTBCRDAwMDAwRUY3MkE4OTlGQUI0QTg5RjY5RTg1RkUyQzMxRDAxNzAzCis6MTBCRDEwMDBFOUU3ODlDOUVGQTY3M0Q0N0E4Q0JGOTlDRTk3NEE1RkI5Cis6MTBCRDIwMDA5RDJGMzEzMDhERjkxQzMzRDhFOTBFMjBGQzBGQUE4MkVCCis6MTBCRDMwMDBFRTBGMjJERDI1QTk5QkJFM0FERENDN0NGMDkzRUMxNEZFCis6MTBCRDQwMDA3N0QzQkZCQjFERTdGQTY0MzgzMzEyQkU0MUUyRkEyQjRBCis6MTBCRDUwMDAyMEE3MUVEN0E5OTJDNzg1RkRCOEZFODlEMjM4Qjc5RDA2Cis6MTBCRDYwMDBGNDQ1ODJBMDM0MTJEQkYyRkUxNTgwNzg3NEE0REExNDU0Cis6MTBCRDcwMDA2QUNCM0ExMUE3Mjg3OEFGM0NFRDAwMjUwQUJGNzI0ODdDCis6MTBCRDgwMDAzNEY0M0I1MkIzRjlGRDRBQzc0MEMzN0IxRDAzNEIxRDNFCis6MTBCRDkwMDBGNEJDQ0E5NTY2OThGRjQ2NEM0MjNFMTREMDdCMTMyNkVECis6MTBCREEwMDBEMkY4NTUyOTk3MUJERTlCN0FCODYzQ0QxQzZDQUY5NUYyCis6MTBCREIwMDBDMjQ1MjQxQzFEN0I2NzU1MTBCRDI2QTkyMzBDRjNCNjc0Cis6MTBCREMwMDBBMDU5MjE3REVFQUM5MjAzRUI5MDFFRDU1MkIwN0YzRTgwCis6MTBCREQwMDBEMjZENzJDRTY4MjM3QzEyOEMyNzNDNkIyQzI4NUEzODhCCis6MTBCREUwMDBFRjFBNzdCOTYxRkNEQUQyNDk4Njc1QUIzREQ1ODY3RTBDCis6MTBCREYwMDA0REMzNTdBMEY0MDUxOERCNzAxNjk0NDJCNEUzQzE1NjQ2Cis6MTBCRTAwMDBDM0ZCODU3QkI2MThFNjI3RUMwMzM5MUVEQjExRkJENTk3Cis6MTBCRTEwMDAyNjZBMEJEQjQzNDkyNEJFQjZCRTBFQkZBNTBGOEE3MDRGCis6MTBCRTIwMDBEODVCODlFODQwQzk5MUZBNTdBODZENzAyMDNERjBGOUI4Cis6MTBCRTMwMDBBOTE4RDEyMkJGNThDRUZEODc2MjAyNEQwOEVGMjk0QkM5Cis6MTBCRTQwMDBDMDQ3NzRCODVCMEVFNDUwMUIzQkU4OEU3QzQ4MDczODUzCis6MTBCRTUwMDA5QUYyQjBEQzg3RTAwNzVGQTc4QTcyMzBGQThCNDAxMzUyCis6MTBCRTYwMDBGNUFGM0NEQjJBRkJDODBFNkY5NEZEQjYwMkUyRkI5NEYzCis6MTBCRTcwMDBCOEJGOTJERDZEOTU4MEY4NUVFM0I0NzgwMkU0Qjc5MkM2Cis6MTBCRTgwMDA1QUYzOTc0NkM5RDc2NzNGODQ1QkJDQjlFN0VBRUI4QkE3Cis6MTBCRTkwMDA1OUU1OTYzNDVDQkYzOUM1RDNCMjgzRUM2NkM1ODdCMzI4Cis6MTBCRUEwMDBFNUY0NzNFNzgxNEJFOTBDRUI3NDQ5QTdGN0JDNDU4M0Q0Cis6MTBCRUIwMDA1MTFFRTVGOEYxMEVCMkVCQjE5NTMyRTMwNTU3NTkwMzg3Cis6MTBCRUMwMDBFQjcxOURFNTE2Nzc4Q0E2RkNFQzVGNUQxM0FDNkI0OUJFCis6MTBCRUQwMDBBRkQ3QTQwOUZCMTBGQjE3NTAyNTg0M0ZCNkFGNEZDRTU4Cis6MTBCRUUwMDBBM0Y3N0UyNkMxN0FFOERFRUZENjUyNjAzQ0IyRDIyQ0IwCis6MTBCRUYwMDA0MjBGMTQ1N0JGOUJGM0U4RkQ3ODdFQkZBNDU0RDAxMUM2Cis6MTBCRjAwMDBBNjU4MDI1OUI4NjRDMjQxRjc2RTJCRjY1N0U3RUM3NzkyCis6MTBCRjEwMDA5MTE5Njg5QjcyRDgyRjIzNUREQTBFODZDQTI0RDRBNUE2Cis6MTBCRjIwMDAwMTBGOTc5RkNDMTRGMzIxMEJGQjZEMzlFM0UzRjJEODlCCis6MTBCRjMwMDA4RkU1NThDOENFMkM0MUIzNDc3NjY2NDdEOTMzMzlFNEVDCis6MTBCRjQwMDAyNzk2NUM3RUM1MDBFOEMxQkVFOTZEQzI2OTA5RDRDMjBFCis6MTBCRjUwMDBFRUZFOUEzNDk1RTE0QTUwQzI0MDdBOUQ3MDVBRTE3MUUyCis6MTBCRjYwMDA2OEM4QjY5MEZERDFENzRGOThBNUJFQkI5NEUwRDg2MzAyCis6MTBCRjcwMDA4NTJDREE1RUYxMkMyMjNDNTY1REQxQUVBRTYyM0MwNERCCis6MTBCRjgwMDBERTAwRTExNDJGQTJGQTRGRjQ5MzJBMzE1NjA5QTdEQzAwCis6MTBCRjkwMDAxQzdGMkUxQ0ZGREM1ODlDQTgyMjFFN0RDQkREODk2RUU5Cis6MTBCRkEwMDA2QTdGOEY0NDFGQzM3NEY3MTMxRDdFNEE3RjJFQTNERTYyCis6MTBCRkIwMDBEQUQwNzgxQ0RGNDgzNjUxOEMwNzAxRTU3QTk1NEQxQkE1Cis6MTBCRkMwMDAyNzkzODJGREJFOTIzNkVFNUZFQjFENEY3Qzk1OERGMzdECis6MTBCRkQwMDAwQkQyQkJFNjdCMUMyOURERUI3QkQ3QUUwRDM1Rjc0OERBCis6MTBCRkUwMDA0RjNCRkJFNTU1MTNBQzAxQkI3NDMxNzQ4REJCMDA1RDU5Cis6MTBCRkYwMDAxMzA0NURDRkEyRjVDNzdERUU3Mjg4N0QzRTk2RDQyMUY1Cis6MTBDMDAwMDAyNDZGQUIyRDY4MDUzMjAwRjZCQjdDRDc5MzVDQzdDQUEyCis6MTBDMDEwMDBDMTNDN0EzRTM3QzEzM0EwMENFNUFGQ0RFNjE5NzIwRkIzCis6MTBDMDIwMDBEOTk1NkQzMUVFNzVGODVFRjU5RDlGM0RERTQwN0EzRDA4Cis6MTBDMDMwMDBGNTlGMzlDRDI0Mzc4QTI3NkUyNEVFNTNFN0ZBOEFFRDJGCis6MTBDMDQwMDA0MTk1OUNEQjg3RTI5RDJFM0E5MjNDRTM5RTNGQjU3NDdFCis6MTBDMDUwMDBGN0M5M0UyNDc0RDNENTkzODlFM0FCQTJFOEVDNzA5MDgyCis6MTBDMDYwMDBGRDEyRkQ0N0QzREFCQzRDQTdEQjFDNENBN0E1OUE0RUFBCis6MTBDMDcwMDAzNTI3NDI4QjA1RjVFMUE0NkJDM0Y3NDkxRTRFNkVCNDFDCis6MTBDMDgwMDAwMkM1NEQ2RDM0NDhGRTMyQzdDMTdBMDVDOUUxOTQ2QUQ0Cis6MTBDMDkwMDBENDgzQkMzNzJENUU4QUNCREE1MTNFM0MyNDFGRjVEOUMwCis6MTBDMEEwMDA4NkY1NEU4RTdCMzcyOTBGREYzQjk5QUMyNDExN0QxNjI4Cis6MTBDMEIwMDA4NjZENENCNzlCMTUwOERBRDE1RUI2MjVERjU2NTlDRTkyCis6MTBDMEMwMDBGQUExRjI3OEFCQjZDRTZCNTk5RUZCRDJEOEVGOEM3NzQzCis6MTBDMEQwMDA3RDgyNzg0OTlFMzFGMjM3QzM3QkU3MTc3OUQwNEY3NDYwCis6MTBDMEUwMDBGQjg4NzRBRTIzMzQ5MzdBOTc4M0U2NzI0NzgwRTJDQzYwCis6MTBDMEYwMDBCQUQyNjVCOUU0MUY5NjI0NjYwRjAwQzRBMzZFQkNDNDBGCis6MTBDMTAwMDBGRUI2QUVFMTBCQTZCQkJFQkU3MjVBMDZCNTZGNzc3RjE4Cis6MTBDMTEwMDA3Qzg2Q0FGNjQwNTEzQzJDMEZDQTY5MUI4RkQ3MzQ5Q0QxCis6MTBDMTIwMDA2NDNCOEVFMEE0OTFERTc0MkMxM0Y2QUVDNTBBQjc1NEJFCis6MTBDMTMwMDA2MzVCRjNCRkYyMkRENTM4QkYwNjQzMENGNjE3QjBEM0JGCis6MTBDMTQwMDBCNjI0Q0ExRTQyRUJFNzVENzZCRjAwNzlCNzdBQ0E1QkI4Cis6MTBDMTUwMDBCMTY0NjdBQjI1RDcwQzQwMUM4RUE2QkJBQTk1RDFEODdECis6MTBDMTYwMDA4RjcxQ0Q5MEIwREZCNkVFOEM5N0ZCQTlBRTE5MTZFQ0FGCis6MTBDMTcwMDBFRjRBQkI0OThDMEY3NEZERENFMjA2Rjg3Q0RENURBMjYyCis6MTBDMTgwMDA5RkU2M0E0MEZEMEZEMzFFQTk1NjA2NjIzRjVFQzhDMTI2Cis6MTBDMTkwMDA2RkQyNkFBQkZEQjkyNDVGNEVBNkNCODkxNTcxQUMxRjc3Cis6MTBDMUEwMDBCREQxNzk1RUMzQ0IwNkJBOUMzMzJFNEJCNzc4Qzk2RTJFCis6MTBDMUIwMDBDQzE0NzZGMUQ4Q0E0MTZCMzkxRUNBMEM2NUQzOUU1QjhDCis6MTBDMUMwMDBEMzQ0RkNEQTFGNzk1MzhBRkY1RTQ1QkQ3NzIwMUQ5MjY4Cis6MTBDMUQwMDAzM0MwNjNDMUY5QzkyRkEyM0ZBMkY5MUY4Nzg2MTBGREEyCis6MTBDMUUwMDBFNkJEMTgxMzk0OTAxRjhCOUY3OEM1NDZGRTY4QUVBQ0QxCis6MTBDMUYwMDA2NjkzNUVCRDNGQ0NCNzkzRTRFMzc4N0M4OEZCRjMxQThCCis6MTBDMjAwMDBCNjMzNUMyOTU5MkU2MUE3NUQ5REI5NUU5NENGRjlEMEY0Cis6MTBDMjEwMDA2MkEzRjFGOUEwMUMyNkJGNjE0MTYxQTZCODY2QTE3M0IzCis6MTBDMjIwMDA5NzhERTJCMjg1NEY1QjBGODdBM0ZDRUEyMjA4MUYyMjlECis6MTBDMjMwMDAzREFENzlENjdBMzgxQ0U1N0Y4MURFOEY5MkFGQzMxNjhCCis6MTBDMjQwMDAwMTg3QTJEMTYzQUUxQzlBNkQxMzcwMUQyMEI4MTYyNzBBCis6MTBDMjUwMDA2MTdDMkY5M0JCMDhGNUY3NzE1QzU0OTNDMzc5NDk0QTBECis6MTBDMjYwMDAyQzkwREMyREJGRUNGRDdDNUYwRjdFQjBCNTExRkQzRTQ4Cis6MTBDMjcwMDBBQURDQTZDNjJERENBRUMxMzVDOUVFMEM1MEMyMzYzN0RECis6MTBDMjgwMDBBRTUzQUJEOUU1OTJEMDYxMUI0NEJEN0Y0MkEzNkI5RkY3Cis6MTBDMjkwMDAyRDEyOEZFQkY2QTI3QjNDNUVEMDI1RDczM0MyODI3MDg1Cis6MTBDMkEwMDAyQzlFQjY2RjFDRjE0NUU3RTc5NTcxRDAxQTkzQzQ3Q0JDCis6MTBDMkIwMDA3MTZCN0M3MTEzNUY3NEZBMjMzRDBCMTU3QzZGRDc1OTNBCis6MTBDMkMwMDA3QzJGQUQyN0I5RDBFOTJGRTA2RDhCMTVGNkEyNzM3M0UzCis6MTBDMkQwMDAwQ0M3NEQ2NkY4RTNEMjA1QkMzQTFFNDNEM0NGMEZGRjFGCis6MTBDMkUwMDBEMEY0RUYwNkZFQTFFOTQyOEZDRDc4RTg3QUFDM0ZEN0QzCis6MTBDMkYwMDBGNUQ4OENCNzBFRjdBNUNCNTlDODc2MzE3MkE2REI5OTY1Cis6MTBDMzAwMDA1QUYwRTVEMEZBQkE1REQxRTlBQ0MzQTlEM0FCOERGMjRFCis6MTBDMzEwMDBBMTFFRTA1NDFBNUUzMkUwQTM4NDJBMjg4OTgwNzFFOUM0Cis6MTBDMzIwMDBFOUMyOEVCNTRFMDJFMjgzRDJCMDk1RTc1RDJBM0VCQUVECis6MTBDMzMwMDBCREVEMEQyRkREQ0U5QUYxRDNFREFEOEVBNzZFNzc3NUU1Cis6MTBDMzQwMDA3Q0NCRDA5MEIwM0RDNDM0OUVGMkFDMkI0RkZCMEM3MTMzCis6MTBDMzUwMDA3MDM5MkMzMEM0Qzk5NThFM0IwREZEMkFENzNEODZGOTI2Cis6MTBDMzYwMDA1N0E1MkMzMzhDNEY1MjU3MUFDNjI3RTczQzYyRTg1RjFCCis6MTBDMzcwMDBFM0ZFQTUyOThFNUY2QjhBRTM3RjYzMTgxRjE3MEU3MTlBCis6MTBDMzgwMDBEQ0ZEN0FFMzQ0NTA5MDQ3REYzQkQyQzlGMTc3QjBEMTZFCis6MTBDMzkwMDBDNUZEOUQ4RDI5RENFRTZBNTQ1OUJGNzczN0U2NzBCQjI5Cis6MTBDM0EwMDBBN0QxQ0RDRkZGREM1OENBRURCRTQ2MEZCN0ExNDYyRkFGCis6MTBDM0IwMDBCNzY2QkIzMEY1RjlFQjE1Q0E1NzRBNDMyRDk1NjRDQUU5Cis6MTBDM0MwMDA3NzY0Rjg3RTkyOEVGNDdCQzMxMjY4OEE0NzNBOEQ2QTRFCis6MTBDM0QwMDAxN0YxMzlDQzM3RkJFMzUzODdFRTI1QkZFRUIyQjlDOTZECis6MTBDM0UwMDAxRjM2RUYxODJEQTkzREM0NzMwOUU4RUYzQzUxRjI5MkI2Cis6MTBDM0YwMDAzMDI1MEMxRThBN0JEMDNERjcyNDVGMkRFOTE2OTY0NzI5Cis6MTBDNDAwMDAzMkZCODA3QTM3RDMwMUQ2NjRENEI3OTkzMzI1NzcxM0JBCis6MTBDNDEwMDBGMDczM0YyNDcxMUJGNEUxRjg1NDA1RkNFNEZGQUI5RDdECis6MTBDNDIwMDA0QUQwOUVDMEEwNzkxRDA4RTcwQzAxMjZEODY5OUNGQzYzCis6MTBDNDMwMDA3NzcyNUY4NUUyRDZFQkU4MjFDMjJCN0I2NEY4MUUzRTYzCis6MTBDNDQwMDA5RjUxRkE5NzMzOTQzN0RGRTg2Q0I1OTI5Q0RDQjBFN0U0Cis6MTBDNDUwMDA4MTYzRjdFMjM4MzRGQjhCNDkzRkJBRTIwNkZGRkI5NjczCis6MTBDNDYwMDA0Qjg5MUI1QTI4QUU0NDNBNDYyNDc3Qzg0M0YxNEVBMjYyCis6MTBDNDcwMDBFMjhFQ0UwN0Y0RjZCNjc0OTEwRjRDNkRGMkNCMDk0OEZDCis6MTBDNDgwMDBDRkNFMzc4MUUzMzg1RDFGMTFCRjE1MDRCRkFFMTdENTdFCis6MTBDNDkwMDAyRTI1MzgyQzgxRkNGRDIzOTUzNEJGNjZCRkNBNzREMThDCis6MTBDNEEwMDBGNTQyRDcwMzNEMEZENEY1QTA0QTdFQjY4OUU2OUYzODAyCis6MTBDNEIwMDAwODlDNEY4RkVBRjAxRDc5OUVGMDM0QzU5REE1OUQyREY3Cis6MTBDNEMwMDA5NTk0OTc1RDI4NkYxQzczQkFGNTE1OUFCN0JERDFDN0JGCis6MTBDNEQwMDA3MkI0QjU3MTI2QjdDMUM2Rjk5QTdDRDY3MzdGNTc2MzFCCis6MTBDNEUwMDAwM0Y3NzczN0ZBQjlEREQzQjg0MjkzQ0YxNjFFREZEN0ZCCis6MTBDNEYwMDBGODM4Rjc1RjZGMEM2ODcyQkE5MTlGOEZDRjEwRkVGNzE0Cis6MTBDNTAwMDA4QjUwRTUwMDkyQkYxN0QzNDUxRDA3MUNFNTlDNDc4MDYzCis6MTBDNTEwMDAyMkRBOEI5NTkzOUE5NDk3NDUzQzY1OTIwRkIzNUNFODI5Cis6MTBDNTIwMDBGMjAwNjgzNzI0QTRENzhERTg2N0M5M0ZEQzA0RkVCQzVECis6MTBDNTMwMDAzOUQ4Q0U5Q0Q3NjIxRDJCN0Q3QkI5NThFODZDRTZGOEM0Cis6MTBDNTQwMDBDMzZDMEYxNzQwOTBFREREQjlGNjVEQzRGRjE3QjJFRjc1Cis6MTBDNTUwMDAzMkU2QUJFNEFGNzRGQkI3MThDMkJDOUU1REJFRDM0REYwCis6MTBDNTYwMDBGNTk0RUZDRUFGQjgzNEJGMDI3MzY4N0U1N0RFMUREQkEzCis6MTBDNTcwMDAzRTVCQjY1QzM4RUYyRTFBMkNGOEFBRTdERDE4M0YwMkI2Cis6MTBDNTgwMDBGOUU1NDg0MEU2Qjg3QTdFNUE0QjAyRTdEREE1OUQwOUY5Cis6MTBDNTkwMDAxNDA3MkNEODI2MzMzRjMwQ0Y1NDA2MjJERkU2Njk3Q0JGCis6MTBDNUEwMDBFQjgwRTAzQkM0OTc3OUUzRTY3MTVENkVGRTFBMjMzRUIzCis6MTBDNUIwMDAwQjlERDdGNTA5QUEzREM2NjkzREUyNTkwQjBGN0Y0RTg5Cis6MTBDNUMwMDBGNUI5NUE4RDVFRkMxQ0UxNjk2OEJGNjFEMkFFQTg3OUVECis6MTBDNUQwMDAzMTE5RjFDOTlGQzQ5MTQyQzEyOEEyMDdDMkVGMEU5MjNFCis6MTBDNUUwMDA5RUVEOTc1OUNGN0E5MzhCRTM5ODlGOTA5QzlGNkE5QzdFCis6MTBDNUYwMDAzOTY5MTdDQUZERjFCMzhEOUM3RjI1NjUzQ0YyODg3RkIwCis6MTBDNjAwMDBEQzc3QzdBRkI1NTlERUExMTk5QzBGODU2REE0M0YzQTAxCis6MTBDNjEwMDBGRjk2OTM4RDQ0Qjg5NzU3MzgwMjk0Njg0NzhBNUQwQTBECis6MTBDNjIwMDBFRDFGOTEzQzcyM0NGMUUzMjM3MDJGNDNGQTk1NkY3RDJGCis6MTBDNjMwMDBFRDIwRTk0N0I5QzNDOUU3MDg4ODQ0NDczNDNGNDdFRkNECis6MTBDNjQwMDBGNzM1Mzk3MURFQTg3RDFFOTlDMkY3RTI1REUxMjY5QUMxCis6MTBDNjUwMDBBNkZCMUJEREZGOENFREU4OTQ3RDVDMTdDODY0M0QwMkYyCis6MTBDNjYwMDBDQzI1QkVDOUI4NzgzRDMyRTc5QjREOTQ2RkEyNDEzQUM0Cis6MTBDNjcwMDBFOTlDQzBGMDlFMEM4MjlCOUU3N0Q3QjU0NEJENjlFQ0M3Cis6MTBDNjgwMDA1OThGOUM4MEYwMkREN0YyQzNEMTFGN0IxOThFNkE4N0ZBCis6MTBDNjkwMDBDQTcyNjhEN0YyNDk3QjhBMDUzQzUxNzQ3NEQ5N0MxQkY1Cis6MTBDNkEwMDBBOUZFMDk3RjhDRTEzQUFGMTlCRUM5MTlDMjhFQUI0OTA4Cis6MTBDNkIwMDBERUM5NEM1RkE3OUE0RDc5NDM5NURDQjFFMUQ3MjQwRkQxCis6MTBDNkMwMDA2RDcxNkUzQkJFNjdCNkI3QkE3REVCMkQ2RUFGNzM5REQ1Cis6MTBDNkQwMDBFQzMxOEVENERCM0E4QjM4MzcxODU5QTkxNjUyRkU0NzA1Cis6MTBDNkUwMDBGMTI1RTU4NTdBOUU2ODlFRUZDQkFBOTg5REQxOEZFQkM4Cis6MTBDNkYwMDBBQjIxMEZDMUU1QjI5QzU3NEVFQjFBM0UzRjZGOUVBNjkxCis6MTBDNzAwMDBFRjVGQjdBREQ4MzUzN0FBMEVCMjI2NDMzRjVGNTA1QzE2Cis6MTBDNzEwMDA5RjM4QkFGOTc2QjFGQzJERUI5QzY5RjAzRkZGRTlGMTQ3Cis6MTBDNzIwMDBEQTU0MEM3MzI0RDRBMTNDMjkyMEUyMDgxMEYxQzQyQzYzCis6MTBDNzMwMDAwODcxM0IxQjNBQjlGNUExMjQ1MTNCMTdEQ0RDREUwNjNFCis6MTBDNzQwMDA1RTZFQkZDRUY0QUQyNkI5ODk1ODNCRkI5MzFFMUY3QkFFCis6MTBDNzUwMDBFMUVCNUM5MjhCNjNERjFCRUI0QTUzQkJGREFCRUU2RkVGCis6MTBDNzYwMDAyRkQ1QUZDNkQyRjk1MjBGRjJCMDQxOTM1QkRENkVGNzExCis6MTBDNzcwMDBDQTFGOTNERDhFOEM0MEZCODA3MDQ2MzY4QjczQjE0OEE4Cis6MTBDNzgwMDA3QzZDODBDRTAxNzRGQjAwN0U2M0JDQThEQjhCQzI1OTNECis6MTBDNzkwMDBFRTM3Qjg1RUI4NEZFNkJBQTVEOTdFNTQyOTIyOEYwNzg2Cis6MTBDN0EwMDBDNTlENDNGNTUxN0RGRjI2MEJDQzI3MzlEQjg4RUQxRjU2Cis6MTBDN0IwMDAxMDhGM0VCM0MyOEExQTg1Q0Y3NjBEOEZGMjFCQzYwMzQ3Cis6MTBDN0MwMDBFNTJGNTM1RDIyM0Y5Q0VBODBFNEQzNjREQkNFOUVDQzEwCis6MTBDN0QwMDA5RDgxODY2MDJBQzVBMzI4Q0ZBMzkyM0M3RjIyN0FGQjQ1Cis6MTBDN0UwMDAxRjFBOTdDOEU3MEY2NDdGODYyMkZGM0UxMkU3MzZCMDE0Cis6MTBDN0YwMDA0MDBBNjQyMTNEQjZCNDg5N0VERUVEODk4Q0RGNEQxMEEwCis6MTBDODAwMDA2NDNFREUwQzYxMkJFMTdGMEIwMERCREQzOUEwNzI3QjI3Cis6MTBDODEwMDAyQjc4OTg5RkI4NzI1QzNFREFBMURCREI5NDkxQUIxMDY5Cis6MTBDODIwMDBDRjgyQTRDRTc0RDJDRkJDRDFFRjI1NDkwODU3M0VDNUU0Cis6MTBDODMwMDBCRjRFQUVDREFDQTAzODQ1QzdDMzkyMjlGMEI4MkNEM0JCCis6MTBDODQwMDBGMzM2QzE1NzkwMTQ1QUI1OUFFMkMyQ0QxNkEwQjhGMDhCCis6MTBDODUwMDBEM0QxRjdEQzAxNTE3RUI1MjRBQkUyMjBDRDdCNEUxMjYzCis6MTBDODYwMDBFNzg1RkU2RDc2NTE1NzgzQ0VGRURFQTg3OEZDRUJDQ0QzCis6MTBDODcwMDBDQTQzQTRGN0ZGMjBEODM4RkY1REM1RTc0OEQ1MkU0MTRECis6MTBDODgwMDA3QjE4REY4RjY5ODBFRjBERjFFNkY1QTQ5RjdFQjY4RkYwCis6MTBDODkwMDAwNTQ0NEI1MTI3RjQ0MzI5RUZDQkZEQUY5RUZBQTJCQUQyCis6MTBDOEEwMDA1OUUwRTNBNzc4QUMyNENCMTdBMUZEMEE2QzY4MEEwOTBDCis6MTBDOEIwMDBGRTI3RUM4MTc1MUMzN0Q1MEZBMUZBQzVCQzI3RUQxNkY0Cis6MTBDOEMwMDBGMkUzRUZBMTFEQTY3M0QzMEYxQTFEREM3RTg4RjkwRENDCis6MTBDOEQwMDBCNTdGQzNGQzg2REE4RjMwQkZBMUY2RUY5OERGNTA3QkJGCis6MTBDOEUwMDBGQkU5MTEyODQ0MDAzRkNDRjRGQzZGQzY3OUYwRThERDg5Cis6MTBDOEYwMDBDRTA4M0MyMjEyQ0NFQ0U5QkNFRjU0ODZDODNGRjJEQkY4Cis6MTBDOTAwMDAzRTdFMjA4RUU0NjA4QkVDMjYzOUNEREJBQzcwMURFMkUwCis6MTBDOTEwMDBGOEQ2NTEwMTM5MkQ5QUFFQkVCODRDODQyMzdGQ0JEQkJCCis6MTBDOTIwMDA4RjhFMkRBMkY3MTQ5Nzg0RjM4RjZGMzlEOTlGRjMyNjNBCis6MTBDOTMwMDAxMzdDNURGNEQ4NjYxM0Y0RDBFMDdEMkUzMUI0OEFERTJBCis6MTBDOTQwMDA3RjZFNzMzQTQxODg3NjA0ODQxQzEyM0Y3QkE4QTMwMTUyCis6MTBDOTUwMDAyQzYzM0VCRTlFMjFFMkE3NkJFRDlENDVEMUU3OUI0MDM3Cis6MTBDOTYwMDAyMTAzRDUyQjM1M0Y1MzI1OUY0RDA4RTc2QTc1REJEMTUxCis6MTBDOTcwMDAyNEQ3OTk2RkQwN0VGRTNENDIwRjkxQUY4NkJBNDRBNTcxCis6MTBDOTgwMDAyNjg3N0E5QkI3Q0RFNjI1N0Q3QTZFREIzQkQzMjYyM0JGCis6MTBDOTkwMDAxREE2OEU5OTU0MkNBQkRERjMwQjMzRkJGMUJFNzlBM0FFCis6MTBDOUEwMDBDRkZDNkE3NTMyQ0ZFNzczOEIxQjYwNkQ5NTBCRTdEREFCCis6MTBDOUIwMDBFNEQ4RjEyQTkxRTA2NkQ3NDc1NTg5RDhCRjI1NDVEQUYyCis6MTBDOUMwMDA0REVEMUMzNTZENDIxMkQ5MDEwOEYwM0VCN0U2OTRFRkVCCis6MTBDOUQwMDAyNjExOUJFMkFFQjY5MTVGMkUyN0E1OEFCMkJCOTU4RTNCCis6MTBDOUUwMDAzODNBNDlFREVBNTdCOUZBMUFGQTU3QTUwQzMyQ0M5RkYyCis6MTBDOUYwMDBBNDY2MThDNjI3RTcwQzM3OENFQkZCNEU3MTE3MUFFNkI2Cis6MTBDQTAwMDA5MUJFNTJEQzhDNzgzMERGNjFCRENDRTczMjc5OUJCRkMwCis6MTBDQTEwMDA3ODdGMTFFMzdGNDMxMUUxMUY0MUZBRDkzMEIwMzg1MkRBCis6MTBDQTIwMDBCQUYyMTdBQkM5NkM2Q0RFOTlDMEU3QjRBNkY4QjQ2NjZECis6MTBDQTMwMDBEQjUzQkIzRDZBRUZGMUU5OTdCMEI1QzdCOEFFQjY5NzI3Cis6MTBDQTQwMDBCOEVFNjJFMzUzQjQxRjhGOTJGRDI4NzhFMTNBM0U3NzQ3Cis6MTBDQTUwMDA3RjZFRjQ5OUNCNTRDNENCOTc4OTcxMkJEOTNENTNEQ0FECis6MTBDQTYwMDAxQUQxRTI1NkIzRkM3NEM5QTlBNDBBQjlEOTJCMDNDNURCCis6MTBDQTcwMDA0MTdBRkM2QTk2MUY4MDA3MzRGRjJGREE0QkQ1RjNBOTYxCis6MTBDQTgwMDA2RjA5N0ZGNTBGRDJGN0JFRDE3MkFEQjVBNjdBNDQ4MTlBCis6MTBDQTkwMDAwREZEMEFENTA5RkYyQUMzM0E3QTcwMTZFMUQwRTk5RjQ1Cis6MTBDQUEwMDBEMTJERjc3MERCREE1NzA3MTZGMTczN0YzQzZFNTlBQjY3Cis6MTBDQUIwMDBENTI3N0U5NUE5OURGM0Q3RUM3ODc1NjA3MkY3MzhEQ0ExCis6MTBDQUMwMDBGNTkxNjEzRURDMjdFRDM2RjQ5QkQzOENGRDg3Q0I3NzY3Cis6MTBDQUQwMDA0N0JGREY5QjFEOUFCN0U2NEU5QjhGRUFEMjhGODkzQUZDCis6MTBDQUUwMDBBNTc5NUM4N0E3NkE2NzhDODdFQ0E1QjJENUNFRjk1MDhCCis6MTBDQUYwMDBBRENCQzNGNTEzQTU5N0ZBODk2RTE3NkU5MEExQkUyNzJCCis6MTBDQjAwMDBGQkI2NUU1Qjc3Q0FDRTE4OTBCRkM1QkFFRkExQUMxMDdBCis6MTBDQjEwMDAzQ0ZFMTc4NTlGNzlBRjhGMDdCQzUxRkJCNDY2OEFCODdFCis6MTBDQjIwMDBFRjU4NjJDQjhGQkZDMjc5Qzc1RTAyMzc5MUZFNThBMjIxCis6MTBDQjMwMDBCMEI3Rjk2RDlGNUEyQ0U0Mjc2Mjg1QkNFNEJCQzI5NjVFCis6MTBDQjQwMDAyNEJBRUYzMjNGQ0U0RkU3Qzk3NTBCRTJGRDc0NkU1NDQ1Cis6MTBDQjUwMDA5MERFRjk4RTAzNTlCRkU1NjlERkEzMEU5NEJCRjcyRDc0Cis6MTBDQjYwMDAxNjgzREY4OTkwQURDM0ZFOEU0Q0RGMzRGMjNCOTM3N0EyCis6MTBDQjcwMDBDNjA0MkRERjAyOUYxRDk5MjBGQzVBODVEMEY3RDkyNEM5Cis6MTBDQjgwMDAzN0ZBQjkxODlBOUFCQTA3QzE3MDRFNDZGODUzRkZDQ0QzCis6MTBDQjkwMDBEM0I3QkVGNTE4QzVCRDdCODVGRUUzQjBEMzlDOEZERTUxCis6MTBDQkEwMDAxNDk1OEZDMjFBQTFCRjBFRkNBNTM4NjdFMUFFMTYxQjAzCis6MTBDQkIwMDBFNTQ5REY5NURFQjc2NzNBQkJGNTdCRDhCOUZBQUNFQjUwCis6MTBDQkMwMDA3QkREMDFBMUVGMjdCNjdFRjkxNkQ5RjUxM0U4RUZBMkI4Cis6MTBDQkQwMDBGNUJEQ0IyRjZBN0E1RUY3QjhDQ0ZBQTgzRjNGQkU1NUI5Cis6MTBDQkUwMDA5RTE4RTg4MUJFQUY2OTcyMDBBRTZDQzNCOUQ5OTJCMjJCCis6MTBDQkYwMDA1M0QzQzhBRjJERDlBNkYwNzk2MDZGRkVCQTZFODVGMTE4Cis6MTBDQzAwMDA5Q0VDQjlFREY2RjlFMjFDNTlFMDExRDFGREU5QjYyRjIzCis6MTBDQzEwMDA5M0NBNzM0NUJCOENDRjZCNUIzNEJCMjNFMjE4RjRBMzgwCis6MTBDQzIwMDBENjY0RjJBM0Q1MTJEN0RGMEU2QzFCQzBGNzMzMEU0OEMzCis6MTBDQzMwMDAxMDU0NDdGMjEyRDczOTkwNkZEM0M1NzJGNERDNDlGMTIyCis6MTBDQzQwMDAxOEE0RTQyOEI0Q0YzNDhEOUZEM0I1QkFEMDhDNkQzM0ZCCis6MTBDQzUwMDBCMjg4NUZFRkI0Q0QzREUwMjFGNEIyMzI1ODdFQUUwNzJBCis6MTBDQzYwMDAzRkM3ODMwNzEyQkRBOTc0NEY2MTZBOTM5MEVGMDM4OTkwCis6MTBDQzcwMDA5RDFENTQ0NzNBNTAxNjI3RDE3OTE0QUVERjFDMURFRjg1Cis6MTBDQzgwMDAxREIwN0E1M0VCMTkyRkZEN0NGMjBBRjk5QkI4NEJDODAzCis6MTBDQzkwMDA4MzM1N0I4OEZDRjQ0QjIyOUY2M0Y5NTcwNjNFQ0M3MkE4Cis6MTBDQ0EwMDBCNTAwMDJCQjNEQjg2RkFEM0JDODcxRTkyMjEwNzlCRDNDCis6MTBDQ0IwMDAzOTlFQUYxREY3OTk4REZDODIzOUZGMkNERkIyRTMyMDNFCis6MTBDQ0MwMDA5RDdCOUM1Mzg3MzBDOUVCODVFQTBFRTZCQ0I3QjdGQTZCCis6MTBDQ0QwMDBDMUE4MjQ2RjYxNTY1NEREQ0YxQzlGNzdDNUExN0ExQzczCis6MTBDQ0UwMDBCNTNFOEVDRjg1NUUyOUZCRUZFMzhCQjA3RkQ3RkEzODU4Cis6MTBDQ0YwMDAxN0U1RDk0NzlGQjRGQkM5MkUxRjVENjcwRjQ4Mzg3RUUzCis6MTBDRDAwMDAzNEE5QjM5REYyOEVBMzlCRjJEQ0I4MDJDQ0IzQThCRkNBCis6MTBDRDEwMDA3Qjk2RkNGQTZGQUQyQzE3MDBDNjdCMEQ0QkNBRUVFNjc2Cis6MTBDRDIwMDBGQjdGNEJENkM3NEI3NDBGMDc1MkM0Qjg5RUYzQzlDRkQ1Cis6MTBDRDMwMDBDNDczNUNCMEUwRjk4MTdDQ0VBOUZCMTdEMjBGM0E5NzlGCis6MTBDRDQwMDAzRUYyNDQ4Qzg3ODJGQ0EzN0JBNkY3QTE3QTVGODdFNTNECis6MTBDRDUwMDAwRjdDOUUwRkYyN0Q4N0U4QkM3RUQxODZGODkxMTQzRjUwCis6MTBDRDYwMDA0MDJFMzBERkU2QUZCQjlDQ0YzNzdGQUVGODY2MTBGRUJCCis6MTBDRDcwMDA5NUNGNUMzMzgwRUU5NTJENzhCQjFGMTAzRTkxQURDRkUzCis6MTBDRDgwMDBGM0Y5NUY3NzlDREU3MzdDNzc2MjZCNDYxRkM4RURBNjc0Cis6MTBDRDkwMDA5MzVFMDc1Q0YxRjQzMjJGRjFCRDU4NTJDNTM5MERENEMyCis6MTBDREEwMDA3QjA2OTE1QzZDQTkwNjVBNzdBNDJDRUU4RDc2QUU4QzJFCis6MTBDREIwMDBFM0I4RDQyQzc3MzU1OTIyMEVBQ0QxRUIwRDdEQzE5MTVGCis6MTBDREMwMDA0MkZBRTMwM0E2NDM2NEU1RjA3NTc0MUVENjlDOTVBNDZECis6MTBDREQwMDBGOUU5Q0VFQzY5NTFGNzEyQUJFNEY2REE5NzQ5M0VEN0EwCis6MTBDREUwMDBEOEI5MEVEMjExRDNGMzM5NTg0MzU2MjJDRjlGRTczMDJBCis6MTBDREYwMDA5RTlCRDczNjlDMzFGNjczMzFCRkMzRjc0NzM2QTk4NTYyCis6MTBDRTAwMDA3NzYyQkI1NEEzRkZFQTU0RUZCRDU5RjhGRUMyRDY0NzgwCis6MTBDRTEwMDA1RUQ4Qzc3NDU5RjNDM0Y3NjlERjNENEU1MTdGRDkyN0Y4Cis6MTBDRTIwMDBFODY3OEVGRkU3Mzk0NDlEMDM2MDJERUZBRjNGRkZGNEM1Cis6MTBDRTMwMDA4OTc3Rjk3Q0Y1RDNDREMzQjNDNUI5NzFFODkzNUZBNzAyCis6MTBDRTQwMDBGMTc5RjFBMTdCQjFEREI0RTcyREU2OEIxOURFNzNDRTZDCis6MTBDRTUwMDBGRDI0ODlGMUFEMjEzQ0ZBRDJGOUFFRjcxMTgyMTMxOTA0Cis6MTBDRTYwMDBDMTc5REJEQzU1Nzk0QzNGRkRGQzJENzJCNEU3RkM0NDA1Cis6MTBDRTcwMDA4NzUzNUY1Rjg3NEY1RjVGOUZGNzY0OTZDODYzNjY2QkZBCis6MTBDRTgwMDBGOUMxMzE1QkU4Mzg5RkEzQkYzMDVDQTJGQTVFRDdGM0VCCis6MTBDRTkwMDBBNDUwN0U2Mjk0QkM3QzU3RjVGNDFCQjU3QUM4NDFDQjk0Cis6MTBDRUEwMDBCMjFGRDhFODlFNUNFQjZBQUIyRkRBRUU1RDYyMURCRDY3Cis6MTBDRUIwMDAyQjBFRjQ4MEVBRUEyRjVDMDlGQjJENDQ0RUU5NEZFNzg0Cis6MTBDRUMwMDA3RDVBOUY5NDAxRkJFMzM0RjAyNDgyODdFRTBENkEyRDk2Cis6MTBDRUQwMDAyQ0Y0QTU3MDlEOUNENjkzRTkxQTYyODBGQjRERTU2RUZCCis6MTBDRUUwMDA5NURBMkIyNUFGMjJFRTdEMDU1OEZFMjc0MEZENjBDMjY2Cis6MTBDRUYwMDBDM0UyMDhGM0I5OTg3RUNGNjU0NkUyRjI2QkQyNzBCRjA5Cis6MTBDRjAwMDBFNjdFQjA5Q0UyOTg2NkFCRDAwQkZGOUMzOENFREY3NDE3Cis6MTBDRjEwMDAzQUU5N0UwNjVDQjkwNkZGRDJFQzAyNTVDMTc1NjYyQTc1Cis6MTBDRjIwMDBCMEMyOUEyNEU2MEQ0NTNBMUZEODMzRjc1NThBMTNERTZFCis6MTBDRjMwMDA1NUVBRkJEMUJFRUYzOTFGQ0I5MzJDMTRERjA1RTIyOTU0Cis6MTBDRjQwMDA0NzdDRkZBRERGMTZGRjE1RTc3RTAwOUUzMjI3Q0FDRjc0Cis6MTBDRjUwMDA3NUFGMzlEOEVFOUJFQjExQjc4MzhGRkJGMzIwNkNGREQ3Cis6MTBDRjYwMDAwMkRGRkJEQkU4N0ZBRERGMDlERDc4RkQ2RENDNTc5QjkxCis6MTBDRjcwMDAyOTNGQjgyOUYxODE2MjdBNUZCRjg3NjlCRUVGNzdENDE0Cis6MTBDRjgwMDBFNUU0N0I4MUU2N0I3RkQ3ODJFRjMzQjI1QkE3MkNCRUUzCis6MTBDRjkwMDA1QTUxRkZBODFGNDVGRTM3OTI2ODAzMDlFNzQ3RkE2OTBGCis6MTBDRkEwMDBGNDM4MDY0QzhGODg1NTdCRkY3Mzk1RkI0NTk1MjNCOTY0Cis6MTBDRkIwMDAxRTA5QTc1NEI2Qzc2MzRERkVBNjY4Qjg0NUU0NjFERkY1Cis6MTBDRkMwMDA4OEY5NjU5RDhBQzFERjE0MTU2ODc1OUJBRjU1OEU0QjM2Cis6MTBDRkQwMDBBRjNDQUQ5Q0Q3MUYzRDk0MkRFQzU5NTE1RjRCN0Q0RjFECis6MTBDRkUwMDBGMUExOUEyREY0QTcwOTgyQjJDMDQ3QzQwOTYzQkJFNDNBCis6MTBDRkYwMDBDQTIzMTNGRjZBQjU3RTJERjkzMzk0QTc0ODgyQzM0RjI1Cis6MTBEMDAwMDAxNzFEQzc2RTE1RjIzNTU2MDlFRUEwMTZBRDJCMzQ1MDFDCis6MTBEMDEwMDA1Q0IxMDVGRDlEMEUwNzlEMTFBNjBDNjczOTE4QTNDQkM5Cis6MTBEMDIwMDAyN0FFMzUwQkU3MkQ5N0VBMzk2RjcxNTAzQzgzRUQyQTE3Cis6MTBEMDMwMDAyOUM0NzA3QzBGM0FCOUY1Njg3RUJDMDJEQ0RDOEUwNzJGCis6MTBEMDQwMDAyRkI3Mjg5RkRDNEU4NDE2NkVBRjg2NTY2RUE3NDA0OEQ5Cis6MTBEMDUwMDBGOEZEMkI4MjRERUNDRkUwM0UxNzlGNUI0QzlBNjdBMTA5Cis6MTBEMDYwMDA3OEEzRThGQTlFRjM4NTBBOEQ0RUJERDMwMTE1QUVFNDkwCis6MTBEMDcwMDBEMkU5MzAwMTUwRUYzMjdBQTBDN0UwMUNCNjFGNjY3QUMxCis6MTBEMDgwMDA5OEY1QjMwQ0MyMzJFQjI3MTk4NjBDQUExM0E4QUNBN0VCCis6MTBEMDkwMDA5NUUwRTE3RUQ1NDVEMkExMzRFQzUzQjg0RTYzQTY0NzY2Cis6MTBEMEEwMDA2NUNGNzIzMTU5QTNDN0JGQjI4MUU1NDNFN0QzRkREOTNDCis6MTBEMEIwMDAyQTNGRDdGOTg1N0E5NTQyRjI2RkU2QTNGRUJDMjhBRUU3Cis6MTBEMEMwMDBFMjI0NUQ0REJGMjM3QkY4NzRCQTU3NTU1NDU4QjE5NDkwCis6MTBEMEQwMDA0Q0YyREQxQkM2NENBNzdCNTU0NTYzMkI5RUE3MjNDRjg3Cis6MTBEMEUwMDA3QkIyQzc4OTdFNDE0NUExRDU4RDU5OEI1NDM2N0QzQzk1Cis6MTBEMEYwMDBDRUY3NjlGNzkyNjFBNjg4QUZFRkQyRTIxNkRGQjIxRkQyCis6MTBEMTAwMDBCODVEQTgyN0JFNTRBNzlCRjA3MzYwNzA0RkY3NTlFNDMxCis6MTBEMTEwMDAwQzcxM0UzODY0NjI3MEE3MTVFNzFENTI3QzczQjIyOTBBCis6MTBEMTIwMDAzRTcwMDQxMzU0QTRGQjVEQ0JBQUY4REVEQTQzMzYzMTFCCis6MTBEMTMwMDBERjZFMTc3NTU4MUQyRjdDRUU4RkMxRkVBNjREQzM5NzZECis6MTBEMTQwMDA0QUU5QkRFRjhGRUJENkQyQkFCRTY1NTk3RUQyNTdERjIyCis6MTBEMTUwMDA2NkM5MkQzODU5MzE2MDI2RUE2NzQ3QzgwQTU0MEZENTg5Cis6MTBEMTYwMDBGN0M5NEVGNTJEQ0RFNjczREQ2Q0FFOTMwREQyRTI5OTg1Cis6MTBEMTcwMDA4RTREQzM4NzEzNUZFRUNGRDZFRTYxMjVBNzE1MTJERDY2Cis6MTBEMTgwMDA5NkE1N0FFRkE3Rjk5MTc4MjE1RkY3NkI3Q0U4QURERDgyCis6MTBEMTkwMDA5MEVEQjkyRkJCRjhEQ0U3OTE3RjIwMDBGOEZFQ0ZCMjBECis6MTBEMUEwMDA3RDBGRDA3QTc1NzE2N0Q5QkYxRjFGRjFGNkYyNzA1QUUzCis6MTBEMUIwMDBCNzlDNEFDOEE0NTk4ODc3OTMwNzAyMzZGNjAzREE3REVDCis6MTBEMUMwMDA3NUVEQkMyQTcyM0JBRTgzNzQyOEYyRkE5QUM4QTQ4RDFFCis6MTBEMUQwMDA5QUQ1NTk0MkY2MTNEN0ZEMkY1RUQ3MTYxRTMyMDJERkJECis6MTBEMUUwMDA3QjZDRkEyMTlCOTBCM0MxNDJDRTM0M0JCNDZERkJERTI1Cis6MTBEMUYwMDA3QjA3ODlBRTE3QTJGNEFBNkVGQjk5QUYzRTQwRkFENTIxCis6MTBEMjAwMDA5RDcwQkE2OTdBQjczRUZENzIyOUU3OTNFMDM0RDgwRDc0Cis6MTBEMjEwMDA1RENGQzY2Q0IxNzM1QzNENzZFQkU1QjdEM0JDQjJCN0ZFCis6MTBEMjIwMDBEQjMzMDhBRjJCREJDMzdDMEUxNkQ5RjZFRTIwMDE4NzZCCis6MTBEMjMwMDA5RTZGOUM5MkJFOERERkE1NzM1QUNFRTMzNjhCNzNEQTU4Cis6MTBEMjQwMDAyNTUyRkQyQkYxRDRGRkJERTRGNjIzRkM5RjZBN0U0M0ZCCis6MTBEMjUwMDBDRjhCRTc2Qjc4MkRERUJCN0UzOUQ1NDVFNkFGQjk3NTUwCis6MTBEMjYwMDAwQURGRTMwOTg4QkM0MUM1NUZEMkZGMkY2MTFGOUY4RjkyCis6MTBEMjcwMDAyRkRBNjhDRTI3M0E2REM0RkZDNUFEQTZGQjQwOTQwRkU4Cis6MTBEMjgwMDBEM0JEODc2OEZCREU0MzNFQkMzRDVCM0JBNzREODU1NDY5Cis6MTBEMjkwMDBDNjQzOUVENUM3RDc4M0JEMzNFN0JCOEY4M0U3NTU5NjdCCis6MTBEMkEwMDA0RkYwQ0FCNDdGQjFEMjczM0RFMUI5RUVFRjY5NTgxRkI4Cis6MTBEMkIwMDBFNjY5N0IxMzlEOUM5Q0VGREFDNDdERTEyNzk2QkE1REZECis6MTBEMkMwMDBENEQ3RjQ3MzJEQ0E0QTI5QzVEMTlEQkY2NEY5RDdERkRECis6MTBEMkQwMDBEM0Y1NzVDMTBBNzEyRjFCRDZGNDY1OTkyQkQ4NjBGNzY5Cis6MTBEMkUwMDAxMDVGMEIzNjBDRTBGQzAyRjMyMDhFRkJENjZFQjBBRjY1Cis6MTBEMkYwMDBBMDdFRDM4M0IxN0VCOTgwRUFDOTlEOTc1MTVEQTUyOUVGCis6MTBEMzAwMDA0NjdDRTc0NEVFOTFFRTg5MTZBNDhCM0FDNzE5RERBRTUwCis6MTBEMzEwMDA2QjdFNURCRjZGREI5NUZGQzQ2N0YzQkRFNkFFRjFCMDFBCis6MTBEMzIwMDA2MkM4Mzc5QUI0RjhCOTg4RTBBMzM4QjBERTJBRjJBNzA5Cis6MTBEMzMwMDAxODAxRkY4RTM3QkYxRjQ3NzFFQzY2QzUxQjQ3NzVFOUEzCis6MTBEMzQwMDAxM0ZCRDNGQjQwMEY3NEQzREI2Mjc0MkY3MDlFNzNDNjQ0Cis6MTBEMzUwMDBFMjc3QTc2NDlDOEY1RjQ1OEY2QkY3RDMzNUY5RkM2MzQ5Cis6MTBEMzYwMDBBMzA3RkU2RUVERTY4NzhFNTc5NUZDNkNBNThERUExQzMzCis6MTBEMzcwMDBCNzgxOEJFQTFFNEJGNjNFRDU0NERGREIyQzU5MDk1Q0E2Cis6MTBEMzgwMDA1MTM4NDE3RjI4NUYzODYyRTE3M0YwMzE3QjBCNTM0ODlECis6MTBEMzkwMDAxRURCMzQ3QjQ3RTdDMjZBOTQ1Qzk1NTA1MTA4RTcxNzVGCis6MTBEM0EwMDAwRjg2MDA3RDdGMTRBM0M2ODIxQTk1MTdDN0U1MjQxOTNFCis6MTBEM0IwMDBGQUYxRUVDQjBDRUZGNzI5NEQzNzhDODNERjEzQ0EyRDMyCis6MTBEM0MwMDBFOThFNUYxMzNENTcxOEU2M0Y5NDMwODFCRkM3MjkwQkE0Cis6MTBEM0QwMDBEREMxNzVBNUJFMTM0NzFBQzZFRDI4RDc3NENGMDFCRUFGCis6MTBEM0UwMDAxMEYxNEYyOUZFQjI1Rjg1N0E5OUUwMUMxQjA2RjgxNUYzCis6MTBEM0YwMDBDQUREOTgwRTYzN0M1NDFBNkVFMTNDMzA2NkJGNjJDODg5Cis6MTBENDAwMDBFQkVEMTdBODMzNUQzRTRDRDNBQkMxMzA1OEQ4MDczMzkyCis6MTBENDEwMDBCRDhERjcyMTk2RUM5NTM5OEU1QjkyOEE4MTY3NUFFRjI0Cis6MTBENDIwMDBGNEQ2RjU0RkE3N0IzRkFGOTFFRTAzNjYxQUU5M0NEMEU3Cis6MTBENDMwMDA2N0E0RjNBMEY5NDYzQUE3RDYxQkU5M0NCNEMxNDhENzg0Cis6MTBENDQwMDAzNEJGOTE4RTE5MkJDNjE4RTY2N0I1NTQxOEZBQzMxRTVGCis6MTBENDUwMDBCRkRBMzBGRkYyQzAzNDQzN0ZGOEM2MUIwREYzRjM1QTM2Cis6MTBENDYwMDBFNzFBQzYwQkI2MkMzQzJGREY0NzA0OTcxOEM2Q0Q3Q0I1Cis6MTBENDcwMDAyRkRDRjMyMzkzMUMyQTRDRTc2MkVERkIyQzlERkY3RUVGCis6MTBENDgwMDBGQzI1RkU4RjA1NkY5RkEwNDRFNTQwN0YxM0U5RTNGRjc1Cis6MTBENDkwMDAxN0ZGMTcwQ0QzQ0UxMTc0RkU1RkE0NURCRDRBRjNDMzEyCis6MTBENEEwMDBFNkVGQkNBNkM2MDk3QkYzRkE5RTEzRkIzREQ4N0Y0MzhCCis6MTBENEIwMDAyREI0QTY1MERDQTRDNTA3NUVGRDNDQzI5NEY3RTk3OTAzCis6MTBENEMwMDBDQUI1QTU5MkU5OUMzRUM2NzA0RTdGQTE3QjZEQzVBMUYxCis6MTBENEQwMDBBMEExM0Y2MkJGRjgzRTZBRTQ0MUY3MkJENDE2N0ZFQzZGCis6MTBENEUwMDA5MUEzQkY4NzFBRkQwNUJCRTU3M0YyNEVGRDdFOUM5RTlFCis6MTBENEYwMDAzNzQxRjM5MzlDODdDRUQyRTEyNzI1MjgzOUI3QkVBOEMwCis6MTBENTAwMDBFN0E3RTZCQzU1Q0Y1N0NGRkRERTRBQzQyNTc3Q0JCRDk0Cis6MTBENTEwMDBFNUIxMjI3RkQ1RjNENkVGODM4N0JGMkJCQjZBQjA2RjBGCis6MTBENTIwMDBFRDMwQjRGRkIyQTVCMzJGOERFQkY5MkMxMTk2Q0U4RDUzCis6MTBENTMwMDAyMzQ0NThGRTZFRTY5REU5OUU1Q0ZFMUU5NUVCREUwQkQ1Cis6MTBENTQwMDBBNUI3QTdEMzNEN0YwNERGMTUyRTExRTUxRkZBNzk2OTMyCis6MTBENTUwMDA5OEVGNzdCNERFNjFDOUI1QkMxMERGN0Q3RENDNjc0MzQxCis6MTBENTYwMDA2OEJERkYxOTI2RTIzN0JCOEMxNDQyRkYzMzYwOTYwNzczCis6MTBENTcwMDBFOEY5QTgyNENGNzMzNERGN0MzRkRCREM5QUVGMERCNUVDCis6MTBENTgwMDAzNTA2Qjk1NTVDNkVCRUI3NjNBRTBGODYyRDJBQzc5REIyCis6MTBENTkwMDBGRTFGNDk3QzRGRTczMzAyNkU3NDc3QkM3MjYyODU5NTNCCis6MTBENUEwMDBFMzE1RDBGMkYxOUIzNUZBRUI3NThCNTkxQTNFODc3MTcyCis6MTBENUIwMDA4OUY5RTg3RjZGREVGMjFBRjM2NTUxNEE4NzU2RUZBOEMyCis6MTBENUMwMDBFN0Y4RkFENkMxQ0U5MTdDMEZDRDUzRTgxNjc1MkVCRDgzCis6MTBENUQwMDA4RTMxRTg5MkJFMkZCOTEwRkU4QjUyOEUxQUVBNDhGMEI3Cis6MTBENUUwMDA2Q0RGOEIzQURGRUVDNjVCQUM3Rjc4QTVBODQ3MUU1RThBCis6MTBENUYwMDA5OUNBRjVFRkVFRjU4RjczM0RFOUU2RkEzNzBEN0E3MUNBCis6MTBENjAwMDA0QkMzN0IwNjNEOThFM0ZGQzgzMDFFNEVFRUI0NTJGRDdGCis6MTBENjEwMDAzMEZDQzJDMDA5MzcyMUZEOEU2REI2RjNGN0QwMjgwNzY0Cis6MTBENjIwMDAxREM0NTc3REZERjBDQUUxRTNGOUJCQ0EwQkUyRjkxOTRECis6MTBENjMwMDBDM0QxREUxODYyRkVFQTc4MUU2QTNDQzhGRDcwNjM5OEFBCis6MTBENjQwMDA1QjMzOUU3QTlENDI2RjZEM0IyMTg3RUVFNzc3NEFCMTRGCis6MTBENjUwMDA2RUFBMEI5QkVCMTc3NzVCRDQ0RjQ4MEYxRUNBNDlEN0I2Cis6MTBENjYwMDBFMkI1RkEwMjJGRjM0RkQ0MkJEQUI1RUY0QkRCQjVFRjZGCis6MTBENjcwMDA0QkRCQjVFRjQ1REJCNUVGNDNEQkI1RUY0MDIzNTZFN0JBCis6MTBENjgwMDAwQUFBNkJCNDRCRTJERUNGMkNDOUYzRTQxQ0RDMkY2RDhECis6MTBENjkwMDBCMENGOTk0MzcxRkZDMkNFN0MwNUY3QTkyQjA4Q0Y5Njc2Cis6MTBENkEwMDA5MENGNzlGRDdDN0RFOEI5ODRFOUMyNDBGRTlFQzhDRjY5Cis6MTBENkIwMDBGN0MzOEU1OEZDRjlGNEZEQ0RFNDhENTlENzUxMUU3ODhGCis6MTBENkMwMDAyNEQ2N0Y5QzIyOTFDQTlDQjRFQjI4RUYzQjYyMTM3QTRDCis6MTBENkQwMDAzODdENjNFQzc1QTQ3NzFGRTM2Mjg0OUZGRjI1NDlENEVFCis6MTBENkUwMDA5NTlDNjExQjdEM0YzNTM1RDkzNzI4QTc1OERDRkJFMjc3Cis6MTBENkYwMDBFRjY2RjAzOUM5QTU1RUU3OEM1ODQ1MUMxOEQxRTJDMTI4Cis6MTBENzAwMDBGNDFDNzEwRTk4OTEyM0UyNTZCRDJEMjM5RUUzRjNFOTlDCis6MTBENzEwMDBENEIyN0UzRTlDQ0RERjlCQUNCMTAzQzVBRkI4M0Y3RjlBCis6MTBENzIwMDA1RkEzREYzMzMxN0Y3RjMzRjI0Rjc2RkU0RTQyQUY4NzA4Cis6MTBENzMwMDA5NkU0QTRGMTNBRjQ1RDBFRTk2NUYyNEZFMkQ4NkU0MTQ5Cis6MTBENzQwMDAzODM0ODRCRUUzRTk4Mjc3QkZGOEFFRjIxOEQ1OTFBM0VFCis6MTBENzUwMDBFQUNGMjUzOUEyMEUwM0I3ODFFMTNCQTBDNTdCMEYxRjlECis6MTBENzYwMDBBMjNDRUJGRDYxQkUzMTQ0RDdCOTE2QjU4NEY4QkEzODk2Cis6MTBENzcwMDA2MTA3RDdCQkE2RTRBOEJDMkZDMkNCRjhBMkZENjkyNkRGCis6MTBENzgwMDAzRTJENzY4NEI5M0U3NkExN0E3ODZGRjgxRkJCM0RGNEMyCis6MTBENzkwMDA4QjVDQUVGRkFBRjlGQzFEOUVCNjJGQzIzMTg1RThBRkE3Cis6MTBEN0EwMDBFM0FEQzNEMUJEQ0VGOUU1NUZBRkVCRUFGRDRGOUY3OEE2Cis6MTBEN0IwMDAyODVCQUJDQkRGRTJFREMxOUZERUFBRDFBNUREREE3MzNBCis6MTBEN0MwMDAxREZEN0U4REJGRTdGMDY3MTgwMEQ1RURFREIxRTgyM0I0Cis6MTBEN0QwMDBCMEFERDdFODc0RUMwNkM0ODdFQjEzOUUxMUM0REZDNTY3Cis6MTBEN0UwMDBEMzlDRkNGREI5QkUzRUFFRTNGQkMzNzlGNjU5OURFQTdFCis6MTBEN0YwMDA1RDQ4RjgyRkFDMTc3NTc3N0QzQzIyMDlCRUZBNTc4QTMxCis6MTBEODAwMDAzQUU4RTJFREVGMURBMkZGMEZDMjgyNjdGMjBBMzlCRkNDCis6MTBEODEwMDBEN0RFMzdEMzE5RTlDQkRGNDVDRDk1QzVCOTE1RDJGNzlBCis6MTBEODIwMDA2RUUyQjNCOURFRkU2REU5MUE0OTE1RTdBQjkxQjU2NzUzCis6MTBEODMwMDA4NkQwM0RCMkM1NzQ2RjhEQkUwRkQzRUE1N0QwNjZBQ0FCCis6MTBEODQwMDA0QjIxQkRGQzU0QUYzOEY3M0MwQUY4NUNDQkFFRjkxMTY0Cis6MTBEODUwMDBCQkZFRkU2MEM1RjBGRTMxQTdGN0E3NDQ5RjE3MzRCQjlGCis6MTBEODYwMDA4MUYzMDMxNkRDQkY0RENGOTM0RDc1OTRCNjkwQTg3NzI2Cis6MTBEODcwMDBCNkE1RDgzODRFQTY3ODg3RkM5MzFFRUZEQ0Y1QTZBODhGCis6MTBEODgwMDA3N0RFOTUyNkUyNjg4MjhGRjgyQjFERENDRDcxNDI5N0ZBCis6MTBEODkwMDBGRjk3REMyQUQxQ0Y2OUY1MDU2ODdGRjAyRDY1RkYyNTVDCis6MTBEOEEwMDAwRjQ1RkVEMkY5QzU5RkFGRDZFQTAxQzIxRjE2NkJGRTI3Cis6MTBEOEIwMDBBRjk4RDZBMTAwMjdCNzBGRkJDNTIyNkQ1RjhDMUZCOUFCCis6MTBEOEMwMDBFRTM2MUE3QzREMDIxOEFENkVCNjcyQjdBMThFRjA3RjlGCis6MTBEOEQwMDA5NDc4MTdGMjUwNDUwMDAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTBEOEUwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkZCNTFDRkMwRjAwM0FECis6MTBEOEYwMDAwOTE3QjFBMUYyNkZBMEYxNTMzOTUxRjlCRjU5NTFGOThDCis6MTBEOTAwMDA5N0QwRjg4NEIwMkUxMzAzQzMwQTQ2RDJGNDIwRTM5REM3Cis6MTBEOTEwMDA0MEZEMDc4MEY4MzgxMDlGNjMyMkRGMUMxMDNFMkNDQzlFCis6MTBEOTIwMDBDMEYwNEQ4QzgxNjEwRTkwNkUwM0QyRTc4MUY4M0IxMDAwCis6MTBEOTMwMDBERjA1RjJDNTQ0MTgxODU0ODE3OEExMjgwMzQzMEM5MEUwCis6MTBEOTQwMDA1RTBFQzQ0NTIyMTA3RDQ3ODA3NDlEMjg3OTc2NkFGMjY4Cis6MTBEOTUwMDA1MEU2RTY1MTRDMTk1RTJEOERDQTJGNTcwMUE2NDc1NTRBCis6MTBEOTYwMDAwNjg2Qjc2QTEwRkU2MjI0NzkyNjc1MDY4NjBBMTUwOEFGCis6MTBEOTcwMDBEQjQwOEU4MUExMEJBODY2QjYzNDc2NzMwRDgxRjJERDkzCis6MTBEOTgwMDA0MDc5MjE3NTA4MUYwMEI1ODgyQ0VDNjgwMzAwMDAwMDYxCis6MTBEOTkwMDAwMDAwMDAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMEQ1Cis6MTBEOUEwMDAwMDBCQ0Q3RDA5Nzg1NUQ1QjVGMDNFQzM5RDg3OUMyNEVECis6MTBEOUIwMDAzNzcwMzNDOTQ5MEMxODM1QzA0RDBDODM4ODc4MTIwMzcxCis6MTBEOUMwMDAwNjRERjEwNkQxQzZGRUI0NUVEMERBNDgxOTIyRjI2QURECis6MTBEOUQwMDBCNEI2Qjk0MDEyQzJBNDQxQjRBNTY4RTk4RDU1NEI3OURCCis6MTBEOUUwMDBCNjQ2QzUzRURBQTdGNDgyRjg0NDZCNkJCNEQ0RTE2OTVECis6MTBEOUYwMDBGRjQ2OUVCNUQ2NUZGOUUyODA1MzZERjlENzVBN0I5RkZCCis6MTBEQTAwMDBFNDlDOTM5QjA0QjVFRjdEMEY4N0MzM0U2NzBGNkJBRjFDCis6MTBEQTEwMDBCREU2QkRGNkJFNkVEOUM1RDgwNEM2NEVFMDlGRjMxODZDCis6MTBEQTIwMDBCQjVBNjI4Q0U1MEQzRDk5MzdENkM0MjI4QzM1NkI2RTlFCis6MTBEQTMwMDA3RDUzMDk2M0RGNTQ2Mjg3RjU2QTc4M0Y1RThFRERBMzBDCis6MTBEQTQwMDBFM0ZCNDk3NTJDQ0M5ODgyRjVGMzE5OEJFMUZGQTBERDNGCis6MTBEQTUwMDBGQUUwQkE3MTg5MjBCQzUzMTY2N0UxRDNFQ0RGN0MzNjVCCis6MTBEQTYwMDBBQjhDNjk1NUY4N0RDQkE0NENERkNEMjc0QkI5MDZGQUJBCis6MTBEQTcwMDBCRDhDRkU5QzI4NjVBQ0Y1OTU5NzI2MUYzMkNCRjA1RkQ4Cis6MTBEQTgwMDAwMTBCNDU1RTBGQzA1RjY2QjAxOTI3MTRDNkRFMEQyRTcwCis6MTBEQTkwMDBDQzRBQjM5MUZCN0JCM0FERkI0Qzc1MjI2MzFGQjZCRDgzCis6MTBEQUEwMDAzOEY5RDBDNEUxREZCRkE5QjA5NkRFOEFFMUVGNjczMDc0Cis6MTBEQUIwMDAxODc0MUFFMjIzRTk4RTRGMUU5QUY3RTAzQzgzODBBNDgzCis6MTBEQUMwMDBCM0ExM0Q2MzY5NEYwRTNDNzc2RjNCNTMyRDFGODJEMzRCCis6MTBEQUQwMDAzOTBGQzY5MjFDQkY5RkIzOUQyNzUyOUIyRTgwNTJBNTIzCis6MTBEQUUwMDA5NDk4NEQ3MEE5RjBDRjc0QzZBODJBQUNDQkIyREQ4RDQ2Cis6MTBEQUYwMDA4Q0UwNzJDMERCMTFGOUU3QzAzQkUyN0E4OTdBRUYwNjZECis6MTBEQjAwMDBENzc1MzI2OEI3REVDNUU5QTUzRDRGOEVBRDYzQzNFOTcxCis6MTBEQjEwMDBDNTVDMEYxMzhGMjdCQjFFMzczMDFGOEQ2M0QyNTFCM0U3Cis6MTBEQjIwMDBCQzc4RDQ3NTFGOEI4RUFFNDQzQTNBRjNCRjlGOEU5MjY5Cis6MTBEQjMwMDBGRjdCRTlBODgzRkFGOTVGNDY0NzhDNzU3MzdDQjE3RTU5Cis6MTBEQjQwMDAxNUM3MUY3QUNGOUY5MUM1QkQxMkQyMTkxNEZCMTBFRUQ1Cis6MTBEQjUwMDA2MjNFMTQyQjZFRURCQzU2OUUwMjYyOEFDNTlFM0MwRDQxCis6MTBEQjYwMDBFNDU2NzFGRjkyMDY4NDdCRkMyQkYzRkY4QUNGQ0U0NUVGCis6MTBEQjcwMDBCNUY1NzM2MTdFRjk0REJEQ0Y1RTAwQ0Y0ODNDMjUyNURDCis6MTBEQjgwMDA2MEJEQjYzMzE5ODUwQUY0QjczQzU5MDNGMzZCQzdDRUIxCis6MTBEQjkwMDA2NjMxNzY2RjcyODk5MUM0RjkzMjgzQjE3MThDRkQ4QkQ1Cis6MTBEQkEwMDA5ODEzNjNCMkFFNDIzOTQ0N0ZDRDM0MEYzNzRCNzM3QzQ4Cis6MTBEQkIwMDA0ODI3M0NDM0RCOEYzNEZGMTBCNjMzRUI5NEUwRkY1N0FDCis6MTBEQkMwMDAzMzlDREY1OEVERDgxQTNFNUUxMkZFNDE3QzE3MEU4RDU1Cis6MTBEQkQwMDA0RkZERTQzNzVCQ0EwQ0YxNjNGRkRFODc3RjIxRkM1RUZCCis6MTBEQkUwMDBGQjNGMzI1RTAxQUJGMkExN0MwODM1Qzg1QTBBRUJCM0E5Cis6MTBEQkYwMDBERTZDMTVDQTkxRTUyQTRCODM4QzI4QThFRTk2NUNGQTU4Cis6MTBEQzAwMDBEOEVCRDJDOTU4N0QyRjVGMUZBOTMxMzQwNERGOUY5OTBCCis6MTBEQzEwMDA0NEY0NzNDQThEQUZGNTZDMDA5MjNCQkUzODE4MjNGQUZBCis6MTBEQzIwMDBEMDE4Q0JDRDE5M0U5RkRCREI5MDkwMkRFNTQ1QjU1MjRBCis6MTBEQzMwMDA4MkM2OEIzRDU5MDZFRDkzOEJCOERFREJERUIwMzBEQjYwCis6MTBEQzQwMDAyQUFGM0M5MjI0RjBFNkE0MEZBNkFCRDM5MUFEMzg3RDY5Cis6MTBEQzUwMDBBODBEQjJFMTlCRjJDNUU5NDNGRDlDRjQ5MUI3QzZEMjkxCis6MTBEQzYwMDA4RTdERjZGNThBOTg3NkMxNDlEMkM3MTcxRENGNUNENzRECis6MTBEQzcwMDBFMTdDQjU1NkFDNkI5OThGMDFERkRFNUFCRjMwQTM5REI2Cis6MTBEQzgwMDAzMUYyQkE1NjExQkY0NzFBOTg5MUNBRDAyRTdGNzAzRDEzCis6MTBEQzkwMDA5M0MzOUZCMDNFQ0FFMEYyNUU2NzVCMkY2NUZDRjRBNkJCCis6MTBEQ0EwMDA5RTUxRjBBMTQ0RUNGMzM1RkJGNUI1MkFGQTZCQjk1MDVGCis6MTBEQ0IwMDA1NDM1MTlGQjczNjM3RjQwNjcxQkEzQjcyNjE5RjBDMzY0Cis6MTBEQ0MwMDA3MUE0NkRDMDg3RDI1RDk5QzYzMjJCNjNCMTdCMDQwNDA5Cis6MTBEQ0QwMDAzMjk0N0Q1MTIzQjU4OUU4MjA0NUVCNjJDMkU3RDE2NUQ2Cis6MTBEQ0UwMDAxQkZFRDU4OERGNTY2NjRENDlDOTBBQkZBRkQ1NEQ3MEJBCis6MTBEQ0YwMDBCODcxM0NBMDc3NDU4MzBFMDExNTZBOTBBNTdENjFBQzkzCis6MTBERDAwMDBDMUUxNDczMjM4NzEyQTk2QkY2REEzODMyRUJEOEE2NTYzCis6MTBERDEwMDA1QTA3OTM1RTExQUQ5QzVFQkY3RDcyRjJDNTM5REUyMjVCCis6MTBERDIwMDAzQkJDMjdERDJFQThFQUFGNUJGNEQwQzhFRDU0RjZCQUIxCis6MTBERDMwMDBCOTNFODBDNEFCQjA4MzY5NDNFQkI0QzFDNUY2NDk1MzY3Cis6MTBERDQwMDA0MTVGMTc1REM2MTJGMDc2MDM3RTNBOUJFODk0RUM5OTJBCis6MTBERDUwMDAwRDQ1NTUxQUQyMTVEQjJEQTkwOEE3QTk0NzU5MzQ4N0I3Cis6MTBERDYwMDBFQTU1NEEzQUY1MjM3QjVCMThENjUzODIwNjNEQ0RFRjQwCis6MTBERDcwMDAyM0MzMjVFODJGNjkxQzI4ODM3RUJGMjRENkY3NEI0Mjk2Cis6MTBERDgwMDBBRkIxNkFENzZCRkQyNkRDQTQ2N0Q1QTEzMkNDRTNFRDM5Cis6MTBERDkwMDAxQkUwN0Y0MDI3Qzk0QTI5NzU4RjM0RkM3QjAzRUE0NTg1Cis6MTBEREEwMDA5MDRCMERGOERFMjI1Nzc2MENGMjQxOTRENkFCNDE3Q0I1Cis6MTBEREIwMDA3QkVDRTExNzI2OUQwNUY0RDExNzUzMTg4QUFENzUwRjNBCis6MTBEREMwMDA3QjhDM0FFOEZGRDk3M0E1OTQ0NzEyRjAwMjlDMEIwNEIwCis6MTBEREQwMDA5QzRGMUJCOUM1NDhBNzdENzUxRUEyRTMwNTE3N0MxODhCCis6MTBEREUwMDA0MTMyM0VCNkVGRjc2QTI2N0E1OTMwREIzNTA0MDdGQzNDCis6MTBEREYwMDBCN0NBM0EzRkY4RUYyNzgzRUI1MjQ0RTM5ODcwQURBOEQ3Cis6MTBERTAwMDA1MjA4OEVCRUQ5NTIwQUM3MzlGNEM3QkZEQzdDMEVDMDk3Cis6MTBERTEwMDBGOTc0QjUxNEYzRTgwNDZGODhDMTc4N0RDNjdCOTE1MTFECis6MTBERTIwMDBGRDBFNzM3QzlENjk4ODRGRTdGOEU2N0E4NDBCMTlFMTUzCis6MTBERTMwMDA5NUZEMDlGMDBBRTMyNTZCMDdGQUQ3MjM5RThGNEFCMUI3Cis6MTBERTQwMDBGNTMwNUVENjlDRDYwOTM4NEU4OTJDMTNCQzFCNjc3QkY3Cis6MTBERTUwMDA2NTA1RTg4N0JEMzg0RTQ2N0MwNjA1OUY2N0I5QkJCREEyCis6MTBERTYwMDBBNzAyOUM5RDEzNjU3NjE3QkNEQTU4MzZCQTNDNkI3N0NGCis6MTBERTcwMDBDODMzNTU4QjFCMTJCNEQ3OTM1QTk1MzIwQTVGQTQwQzQyCis6MTBERTgwMDBCOTNFOTNCQzdCNEFFMjdBQjIyM0I5NTAyQkMzRTkxRDU5Cis6MTBERTkwMDBCMkRCODFBODk3RTIxNkJEMEFGNkUyNTMxMkNDREYxNTc5Cis6MTBERUEwMDBFMTc0OUM1RDE3RTc3NjYyREYzODkyNUYwMUIxMUU1OTFECis6MTBERUIwMDA1MzE2NjZCMTBDNzZGMDg4RjM4MDgxMzJEOUNERDkzMjExCis6MTBERUMwMDA4NzhGQkRDMkZCNTdDREZFNzM0NkVGN0Y4M0U4RkZBMzZDCis6MTBERUQwMDA2Njg5RjUyMTdDNkFEQzhCRUJDRjhDNEFBMjY3QkZBMEY4Cis6MTBERUUwMDA0RkI2MjY4N0NBQTZEQ0Y1OTRDN0JCNEE2MDFEM0Q1MUQ0Cis6MTBERUYwMDA5OUU5M0FDRTJGNDlFQkJDMTlENkI4MDg0MEYxRDdDMTAxCis6MTBERjAwMDA3N0E4QkFGOUVGMEFEOTI1RDlGMkYxNjQxMkUwRDg3Q0UyCis6MTBERjEwMDBFMDFBQTY4MzlERUE4RkE2MTg5NTI3NUZFRDQ1RkM2QzU1Cis6MTBERjIwMDAwNkE1QzBDN0VGNjUzODdFMDBDODE2RTU2QjAwRTRBQkY4Cis6MTBERjMwMDA4RUYyNTVFRjREQ0I1MDU2RUI1OUNDODA0RjIxMkQyNjBDCis6MTBERjQwMDBGOTgxNjQwRTQ2NEJEN0FBRjBCRTdEMzEyM0ZBNjU2ODhECis6MTBERjUwMDA0NTU4RjBEQjFFN0RDRTUwMDBBRUNFMjY0Njc2NEQ2NzhFCis6MTBERjYwMDBBNDk2RTZENzVFNTFFQjJENDE3QkE3NDFBNUY3RUM1Mzc0Cis6MTBERjcwMDBDMDg3Njk4NzgwM0NGNDk3MzMwM0M3REI5Q0NGNTI0MTRECis6MTBERjgwMDBFNEE1QkEzQ0EyNDdCN0M2RTdBRkVGMjg2M0U5QjNFMDIwCis6MTBERjkwMDA3QkY2RjQwMzM4N0VGMjNCMkMzNjkxMEY0OTcyNEQzNUY3Cis6MTBERkEwMDBFOTQyNEQyNDI1RjRFRjVBQjVEOEE2MEM3NEI3ODMyNTYxCis6MTBERkIwMDBCMkU0NjkzNjNBMjVCREVCQzQ1Qjk2OUI1RDg4RjhFRDBCCis6MTBERkMwMDBBQzA0RkEyRjE5REU0RjExRjIwRkQwNUIyQUI2RjBFMjQzCis6MTBERkQwMDBEMjBDRTM5NEM4M0FEMTg3NTlENjNGNzIxM0ZDMjNENUFCCis6MTBERkUwMDAxRkFBMDc3NjY2MkU3NjZENDg4ODE3NTYxN0ExRjlFNUExCis6MTBERkYwMDBCMEMxM0YwNjk2NzNDNTdDQzdCMTE2QUExNzlERDk3RERGCis6MTBFMDAwMDAwMEY5QUNDMEU4QUQ0MTVDREMxRUJBRUM1OTVBMzc3Njc5Cis6MTBFMDEwMDBBNzg2RjEwODgwQjZFQzQ0RUU5MDlDMzA4MjVDNEVCQzQyCis6MTBFMDIwMDAxQjkzNDkzRTg2RTRCNDY2NDAwNzIxNUY1Rjk0OTRCNTM0Cis6MTBFMDMwMDBDRUM4OEZDOEMyMjYwMEYwQTZCNkVFQzlFODVGODY1OUUyCis6MTBFMDQwMDA0Q0MyRUZBMTk4OUFCNENBOUYyQzA2NjU5QkZEQzc4RTVGCis6MTBFMDUwMDA5NDREMjdEMkUyN0NDMUI0MDNDODMyNUE3OUNCNjlEODM3Cis6MTBFMDYwMDBERjc2MDBDODA3N0VGMjk2NTA4MkY0QzU4N0JFRjAxNEIyCis6MTBFMDcwMDAxQ0VDNDMzOTlFOTVFNkVEQ0JEMUVFQkU1RUYxQzczNjgyCis6MTBFMDgwMDAyMTNEQzRCODdFRjBDMjNGMjhGRkIyNjZBQTM2Nzk5QzEzCis6MTBFMDkwMDA2REQ4Q0JCOTBFQkQzMTRGMDlEMjdDQjNCRkM0ODQzRTFECis6MTBFMEEwMDAzMDFBMjY4RTFCODIwRjIwNkI0NEJBRDk1NkE3MzIxQzE5Cis6MTBFMEIwMDAyRjE4RTQ3MDk5NzBFNjJBOUZBNjY1NDY3MDFDNDUzOEIzCis6MTBFMEMwMDAwMDNEMDQ0N0I4OUM5MUJGMDdGMDFDNzVDMDczRDQwMTk0Cis6MTBFMEQwMDBDRjUxMkIzQ0FENUUzRTVGQTdERkJGNTQxNjdFM0ZGOEFECis6MTBFMEUwMDBCREE4MDc4RkIzQjc4QzdBMjQxOEEzOThGNDRBNThFM0Q1Cis6MTBFMEYwMDA3NTgzREUzRTMyQUEzNEE2RDFGQTNCRkQ3RTU4OUY3NzY3Cis6MTBFMTAwMDA2REZBNjFBNjI4RUI2MEQ3OTcxMjdDRjZFRkFDODhFODMxCis6MTBFMTEwMDA4NENBMEExQkY0NUY5N0NFMzRGMUEzN0ZGOTY1RTBCQjk0Cis6MTBFMTIwMDA2QjBFQkIxOEYyMTVGMEFGODJERjVERTJFQjM1QzI4RkVDCis6MTBFMTMwMDA1RDhBRkExRkY0RjY1NTJDMUU0NkY4REU2NjMyRDlDQkZFCis6MTBFMTQwMDA2RkIzRTdDMjY3NTlFNEUyNzZEOTJERjQzODJDQTg5NTZECis6MTBFMTUwMDA3RjU5MkM4QTdFQjUxQUVDRUM1M0MyODQwNjkzQ0VBNDY4Cis6MTBFMTYwMDAxM0I0NkUzMTQ2N0U3NzkwRDM1QjkyNzlENzkyN0REMThFCis6MTBFMTcwMDBDNUY1QTNFOUY3N0RCRERCQUVBRkJGQjFDMzVFQkU5QTA3Cis6MTBFMTgwMDAyRDFDODdGNDc1RjU2RDJFOTY4MjdFQUZCMURBMUZCMDI3Cis6MTBFMTkwMDAzRTM3Q0ExQUMxRjcwREQ2RDJBOTA1QzlDRTZBQzI3OUNGCis6MTBFMUEwMDAyQ0Q1OTg4QTdFREE4QTdGRkJFMUY0MjUzMDlGOUQ0MjQ4Cis6MTBFMUIwMDA4RkJFMDk3MjVEQjdFODhENjU5MTk0REJBODE4M0VCRkVDCis6MTBFMUMwMDBGNTUyNkNDMTM5RDJDOEYzREJFMEVBNUI4MEY2NDE3MkVDCis6MTBFMUQwMDBBQjhCRkMzQUU2RjREN0Y2MkFFNEFGNTlEQTExQkM1NzE4Cis6MTBFMUUwMDA3NkQ5RTczN0Q2RkM5REYzMDU4Rjg1RTZCQjZDRjcxMjMxCis6MTBFMUYwMDBEMjlCMjNDREM3QkQ1QjMyNTIxOUY0REIwM0E2M0UxNDdDCis6MTBFMjAwMDBGMkM1QTQ2RjkzQUY5M0I1OENEQjdCRkZENzk3NUEwRjAyCis6MTBFMjEwMDBFM0ZEMDFFNTIzQUQ3RkNCNTQxRTQ3Njk5OTgxQ0ZCMTYyCis6MTBFMjIwMDBEQUZERTdFNzZDRjdBN0NGRDlFRTM1MjFDNzlERUQ1NkFDCis6MTBFMjMwMDA3OEZCRERCODlFQUJENDY0QkQyNDBGRDlEMTVFNTc4QjdCCis6MTBFMjQwMDA1MTA4QTg3MEVEQUI0OUEzMjk2NkE5RDc3NTkyRjUwRUMwCis6MTBFMjUwMDA0QkE1Mjc1NUFGNUUxRUE1QkY2M0MyQ0U3OEUyQkUxRjk5Cis6MTBFMjYwMDBCQkZCOTFGRkY2QkNCQTAwRjVGQjM3RkY1RDYxNUU5ODIyCis6MTBFMjcwMDBEN0IxRkI0MjJDOERGNEE5QTZEQzY4QUYyQzAzQkE0QUI3Cis6MTBFMjgwMDA1MTM5M0RGRDEyOEI1RDA1MTQ0QkZEN0ZGM0ZFMTBEOTE2Cis6MTBFMjkwMDAwN0NCMUVGNEE0MUFBMEZEQjI1RkZDRDcxNDA2NzgzODkxCis6MTBFMkEwMDBCNjZFRTAzRjBBOTE1RUY3NDhEQ0ZGNEJGNjRGQjkwNENCCis6MTBFMkIwMDBERTJGNTNEOTE1RjEwQzc0MjIyQjlDNUZERUZBNjVBMDdBCis6MTBFMkMwMDAwOUVEM0U2OUY3ODFBRjUxQkZCRDVGNzZBMTVDMzZFQkNBCis6MTBFMkQwMDA3RDhDRkIwMDc5NTRDRkMwRUZDOTlGNEFBOTg5MTI4NzcyCis6MTBFMkUwMDBBRjcxRjI3MEJGRkJBRDlGNEExQ0JFN0RBRTk0MEZFMUQzCis6MTBFMkYwMDBEQkRERTM0RTQwQkQ1NUJCREYyMUJBM0RGRkZFOUY4NTEwCis6MTBFMzAwMDAxMTBGQUJGNjI5MzY3Rjc3RDU2RTI1RUQ5OTQyQ0Y1N0ExCis6MTBFMzEwMDBGMTg5OUE1MTAyN0U1QjI5Rjg3NUU1REUxNUE0MDc1NjRFCis6MTBFMzIwMDBGNjZFN0UwN0Y5NzVENTNFOTc0REFFMDM1RTYyNjlDNDAxCis6MTBFMzMwMDBFQjBCNEFBQzAxQ0IwRkZEMjRBQzAzQUFERThDRUUwOTNCCis6MTBFMzQwMDA2QjE1RDRFRjEyMzdEMEQ1QzUzM0VERURCMEZGOEY3MjFBCis6MTBFMzUwMDA4NkY3QzdEODAwQzUzNTU3RjU2RUU0RTMzMUFFNkY0QzhDCis6MTBFMzYwMDAzRTdEMTNGRjkyM0Y1QzZGOUNBRUQ4RjcxRDhFQjNBNzI2Cis6MTBFMzcwMDBBNzUzMUM3Mjc3NkU0NjNGQ0VENDE3MjZCRjdFRjM2NzM1Cis6MTBFMzgwMDBDNzc3MjU2MURDQjcxRUZDN0ZCQjkyMDBGRkYyN0ZCQzI0Cis6MTBFMzkwMDBCN0VCREIzMDJGQjZERkE3QTExQzVBQjVFNzBGNjE2NkRDCis6MTBFM0EwMDBDMTdCOURDMkZEQjA2MzNGRkRDOUJEM0I4MTVGOEVCRDlBCis6MTBFM0IwMDBFNDIxQkJFRUQ4QTM3RjM5NDU4Nzc5MUY3QkUwRTM3MTY5Cis6MTBFM0MwMDA2ODc3QUU3OTc0RUU3OEE0QUYzNTBGOUYzRjlFOERFMkVCCis6MTBFM0QwMDAzRjIwQkRBNjNDRDY3NTRERDFCQUVBRkIyNDBDQzIzMDE1Cis6MTBFM0UwMDBGNjg4NzgzQUQ2RTdCMUJENEExQTQzQjc2RkJGRTg0OTE1Cis6MTBFM0YwMDA3OTAwM0ZBQkUwNUQ2QjE1QUVENzBBRDI0MzU4QkUwOTNBCis6MTBFNDAwMDBGMEJDRjJCRTBERUYyODUzMzJFMTNCNTkyODQ3RjEwOTI5Cis6MTBFNDEwMDA2QzEzQzVGNUJFRTRFMjczQUJGMUU5OEFFOTQ4MUY2QzAxCis6MTBFNDIwMDA4MEU0QkZCM0REQUEyM0IwQUU1MzQ3NUVDN0UzRUM1MzJECis6MTBFNDMwMDAzN0UyN0ZENTdEMUJGOUI4OEU3NTdDMUJGRjcyNzYwNjlGCis6MTBFNDQwMDBGRDNGNkMxRDk3RkY2ODI3N0VEQzlCNEJFQjNFRDIzQTZECis6MTBFNDUwMDBBRTc4RjhEMjUxRkQzMzUzMUU4Qzg1REY2Njg5QzMzNTAzCis6MTBFNDYwMDA1NTMxNTYyQkM4NTcwRkZFRUJCRDNCMjM3QzdEMUIwMDVGCis6MTBFNDcwMDAyMUM3N0U3NkZDMTQwQzJFQkZFMTFBRjgxQUNBQzk4MTk2Cis6MTBFNDgwMDA0NzNEREE1REQwNjZEOUEzMkYxMDlGMUQ3QkY4NTlCN0ExCis6MTBFNDkwMDA0RTcyOTIwNTI1RDA3QkM3RDhFMDlGM0VENDgzMkIyNUIyCis6MTBFNEEwMDA1RTU4NzU3NzI4RUQwOTBGQUREM0NBNTQ2M0JEMUVBNjFCCis6MTBFNEIwMDBGN0FGRDJGQjE0QTdGRjk1QTkwMzhCQTQwQ0VCQjY0N0NCCis6MTBFNEMwMDAyOUU1NzIzOTk1NDc3ODU5QTFGN0I5QjVBMDdEM0RBNUUxCis6MTBFNEQwMDA5OUI4OEVBRkNFNDNCQTFCNjkxRENERjk2QjM4RkYxOUMxCis6MTBFNEUwMDA5NkY1QkM5QkYzRUQ0OEZDNzlBQ0M3QTM0QTU5NDNFQkM2Cis6MTBFNEYwMDA3QjRDRDgwN0FCNTJEMjBCMkMwM0RGMzJCNjhFQzMzQjFBCis6MTBFNTAwMDBDMkZFQTNGOTc0RDJDM0REMEU3QTMwREI5QkYzMUU4QkZGCis6MTBFNTEwMDBBRkM3OUVDRjY3QzNENzZEOEE2RUEzMUIxMzZGNkY3RDg2Cis6MTBFNTIwMDA5QTU5REVBNzg1OUM1OEM5OTJGNTA1QTcwRUQ3NTcyQTk4Cis6MTBFNTMwMDA4QjI3MEI0Qjg2RTBFREVDNTU0ODhFQkZCNTVCMjEzQjNFCis6MTBFNTQwMDBERDI5MTc1NjhFRTA4RkZGNEVFMUY2QzdDQTdEMDdBNjdDCis6MTBFNTUwMDBBMEZDN0FFQkUwMkYwNTFENzIzQTVGNzlERkFCRUVBNEU5Cis6MTBFNTYwMDA5MEZGMjlBQkZDQzdGRTMyQUNDNzhCMDJFRTU1OEY2NDFGCis6MTBFNTcwMDBFRTZGRDU3REVGNjRFQ0VGNERENUY4MzJDMkZGNjY5RkFDCis6MTBFNTgwMDA4QjI1QTE4QjM3N0I5NThDRjE4RDgzOEFDQjE2QzdFREJDCis6MTBFNTkwMDAwQzREN0YzMTBCRTM5QjYxQkY4RUYzNUVCRkNFNzgyMUM0Cis6MTBFNUEwMDA4OTc2Qzg3MzJFNDY3NkEwMUE3QkMzMDNERkQ3ODdGQzEzCis6MTBFNUIwMDBCNEVGQkQzRTdDMzVEMzJEN0FCQUREODEyNzM1MUEyN0RECis6MTBFNUMwMDAzRjU4OERDNEFCNzlFQzM1NjVGMzQ3NUQ5QTZDODM5QkZFCis6MTBFNUQwMDBBOUM5MjI4Q0E3RkNBRUU0MkYyQUY2RkIwQ0RBN0ZBNzkwCis6MTBFNUUwMDAwREQ1N0Y0NjY1MURCOUQwREYzMzg2MTQ1QkNCMzJDNEIxCis6MTBFNUYwMDBBNzFDRkRDNzY3MkI0Q0I3RDI5OTUxMkU1QkUzQUJFMTRCCis6MTBFNjAwMDA4MzM3NTA1Q0EyOTVCNUE0MzE0RUM0OEE1OEVGM0Q5NjJECis6MTBFNjEwMDA3RUVGNkNEMzU4MUFDNjY3RjVFNUIyMzVCRUVBNjk2OTc0Cis6MTBFNjIwMDAzMTNDMDA0N0QxMUFBRDE0NERCMzkxQzYyRjZFOTFFRDE4Cis6MTBFNjMwMDA3MTZEMzFGRTZBMTE0RjYwQkJGN0VDRDkwM0ZERDZFMzczCis6MTBFNjQwMDBCNzUyRjQ2Mzc4QkMwQURDMjlCMjYzQ0UxNzcyRjBEN0Y0Cis6MTBFNjUwMDBDMjBFM0UyOEM1MEZBMTlGNjVFOERCNTQ5NDczNTJEOUMyCis6MTBFNjYwMDAzNjE1RUQ4OUY5OUY3NkFCNEIyREY0MzhCRjZDNkQxMUUzCis6MTBFNjcwMDBEMkNCRTFCRjJCNEQ5OUU4NkE5MUNBRTk2QTZEQzk4NjkwCis6MTBFNjgwMDAyMjZDN0ZEODc3N0QxMTc3NDJBMzM0Q0YwMjMxQ0Y0M0ZDCis6MTBFNjkwMDBDNURGMDhGNjQzQkYwNzRBQkVCMTY1MTJDMDU1MUY1NTE2Cis6MTBFNkEwMDAxOEM2NUJFQTIzNEJCNjU0QzJGQzBCOEUyODMxMUY5NDZDCis6MTBFNkIwMDAwQjlBOTM2QTYyRjJGMDcxNzZBMUJDMDdGQ0REODU3ODUzCis6MTBFNkMwMDAwNEY4RUY2RThCNTJGOURFMzY5RDlFQkJEQkNBRTlCOUNBCis6MTBFNkQwMDBBNzJENDZERkVGNkI5QjQ5RTVERUI2N0E3QTNFRDgxNjZBCis6MTBFNkUwMDBBN0Y3RTExQkZEMDlBNERGQkQ2RDRERjRGRTE3NkQwOTExCis6MTBFNkYwMDA3QUQ2QUE5Q0RGRTYwQjdDNThFNjRERkI2MDhCREFDMzJBCis6MTBFNzAwMDBFQjMwOEU2MkUyQ0Y4OUVGM0FBMEI4MUNEQTM3OTA3NDEyCis6MTBFNzEwMDBDNEY3Nzg5NUNCMTUyNzVFNUI1QjgzNjQ5N0VFOTI5ODgwCis6MTBFNzIwMDAwRDlGRDM1NTZFNDdDNjA1MUNCRkY2MjYyRTU0RTFGOTQyCis6MTBFNzMwMDA2RTdENTkwNUQ5M0QyQzFFNDMzOUJENEI4QURGNTIwOUU4Cis6MTBFNzQwMDBGQ0YyNDRGMThDQTg1NUVFNjYwNTEzNzEzNTZGQTg3Qzc4Cis6MTBFNzUwMDA0QTE3OEZDRkNDNTBCOTdDQUE2NzZCMEY2NTAxN0NDNjc2Cis6MTBFNzYwMDBBNzRDNDczQTMzRTc3OUIwNDYyRjQyQjk3ODcwMkRDMEFECis6MTBFNzcwMDA1MzgxREY2NTU2NkVBMTMzQjNCRjU5MDIzRTE2Q0MyQ0QwCis6MTBFNzgwMDBBNzg3RTg5NkYzN0Y3NDU2RjkzNjhDMTM4M0UzMTk5QkI5Cis6MTBFNzkwMDBBODkzRDU2RDZCQjc0RDM1RTNERTNBRDFCMTQ5MjdDMEFCCis6MTBFN0EwMDAzRjRGMTQ0N0E4MUJFRTJGMzY5N0YwRUYzRTRFRTdBREQ0Cis6MTBFN0IwMDBGREVGNTA3QzJCM0E4RUQ5RTI4RDFEQ0QzMkY5MzkzQkRECis6MTBFN0MwMDA1RkUxNzFFOUUzQ0RBNURCMjY0MUZEMUFDMDFCRkFFRDNGCis6MTBFN0QwMDAzOUYzQ0JCMjEyMTZCQURFMjJFODY5QTczNzlFQTU4REFGCis6MTBFN0UwMDBBMkJGM0E0NTNEQjNGQ0JDMkZGMTVENUM5N0VGNEZGOEZCCis6MTBFN0YwMDA3OTNFRDJGMzRFNTdFQTcyOTQ4RkFEQUY3OEY0NzUzMDBDCis6MTBFODAwMDBBNTdGMDRFMjQ5RkMxRTJGODJGNzAwRDJGMUZBMzUxRUUzCis6MTBFODEwMDA5QTVBOTBFRjNGQjRERUE0NkYzQkNEQzJFN0ExOTg5RDFBCis6MTBFODIwMDBBRjc3QjU4RTFFOTczNkUxREU4NTcwOEYxMjk3MzVFMTkyCis6MTBFODMwMDAzNkQ3RTM3OEZEQTI4MTZGQjBFMTc4NzBGNjlCMzM3RjI1Cis6MTBFODQwMDBEMUE4RTNERjg5N0NFNzIxM0NFQ0IyRDI1QjUxOEI0NjU3Cis6MTBFODUwMDBGQjBDNjY3QjczQkVDRUY2Q0VGOTBFRTUyQjlDRENGRTgwCis6MTBFODYwMDA0Q0FGOEJFNUUyN0EzRUYwQjc1MzFFN0E4NkUxOTJDNzUxCis6MTBFODcwMDAxNTk0NjM1N0E4ODk1RTg0NjczQTZCQTEzMjUzMDdGMkY3Cis6MTBFODgwMDA5MTVGNUVGNDczRkFERkQ5Nzk2RjNFRjE5MTlBMkE0MTc0Cis6MTBFODkwMDBCRDcwQjJFMzc1QjA3OEJDMDZGNTU2NEM4RTU5RTVCOTNCCis6MTBFOEEwMDBGOTdDNUMzNUUzMDQ2OThBMUZEMTE2MzMwQzI5MDc2RUE1Cis6MTBFOEIwMDA4QTY2QzJGMzYwRkY0NUVBNUJENkZEQTQyRDhDNzEzRkVBCis6MTBFOEMwMDAzREVEQTU3RDBFMEM4ODY4NTAyRTM5Q0NBQTM2NDE3RkNGCis6MTBFOEQwMDA3Qjg0M0NBOTUxQjk1Rjc4RDY2MUJENDdFMUYxMjNBNTlFCis6MTBFOEUwMDAzMTY0QzFBMzg4QTc5QTcxQUMwRTc2MTNEM0EwQTk1QjNCCis6MTBFOEYwMDBBRDNDODBENTREM0U2Qzc0Mjc5RTQ3N0NCOUEzM0FFRDY0Cis6MTBFOTAwMDBCRkJCMjIwOUUyMkIyNkUyREZDNTIyNEUzRjU3QzQxOUM2Cis6MTBFOTEwMDBFRjY5RTU3MUM2NTYxNkJGRjAzNEU0RUIyMzBBMjNGRjE2Cis6MTBFOTIwMDAzODcxQUE4RDdGOURGMzNDMjBFOEVBREY4NUZFRkJBNUM4Cis6MTBFOTMwMDA5MERCNjVFQTAxMjkwQkZBMEZCRDkxM0UxODg2RTdCRjBGCis6MTBFOTQwMDAwOTM5RkVCMDkwRTMwN0I3RkQ0NzA5RTYxMzc0MjREQ0VDCis6MTBFOTUwMDAzMUM0NjlCOERBOUY5NkMwMEVCRDc5RkExQkZBMzU1MEZBCis6MTBFOTYwMDBCRkEzN0I1MjNCRTI2N0MzMUExRTk3N0YwOEU1M0VCNDA0Cis6MTBFOTcwMDA3QjQwQzhGRDcwNEJFN0I1QjQ2RjI3RTQ0QjkxOTkyRkVFCis6MTBFOTgwMDAyMEU0NDk5MTkwMjc4RjZEN0I3RUM5MDY5QzVGQzI0QjI2Cis6MTBFOTkwMDBFM0I0QjJGNDkzMThENzY3NkI2NEIyNTNDMkJEREZCQjY0Cis6MTBFOUEwMDAwRUZCQjlCRkNERTBGRDc2RUZGOTE3QjRFRjdGRTg0RDcwCis6MTBFOUIwMDA1N0ZEMDZFM0ZGQjNEREIxMjRDQUE5RDQ0NDlCOUMwQUVBCis6MTBFOUMwMDBGN0VFQkIxRUVCODU3QjlGQkE4MUYyNjEwNDFFM0M4Rjg0Cis6MTBFOUQwMDBDMDdDQTE0QUQ2QUQ4N0QzMjFBODU3RDg5RjQ2QjMxQjg4Cis6MTBFOUUwMDBENkI1NjdGRUU5RDA1RjU5ODM0Q0UxRUFGQkE0RjhGOTlDCis6MTBFOUYwMDAyMUE0ODc0NkJFMEY5RDU1Qjk2ODJERDZFRjVFRkU1Q0ZCCis6MTBFQTAwMDAxMkRCOEY3QkJBNDVDMjY1Q0ZGOTk3QkI2QTEwN0ZGN0RGCis6MTBFQTEwMDAxNEJERjY2NDBEM0MyN0I5NEE4ODBFODJBRkU4RjkzRjcxCis6MTBFQTIwMDA2MUQ4N0YzQzdBOEQzRTMyMUQzRUI2N0MzNTQzMzlFNjU3Cis6MTBFQTMwMDBCOTREQTY3REZBN0I2RTVCQ0RCRTYxQ0RCQjU4QUU2NjhGCis6MTBFQTQwMDA4QzhGNEQ3Mjc5Rjg3RUQ2NkQwQkZCNTBDRTlBRkI1N0FBCis6MTBFQTUwMDA4NTJCRUFCQ0M0RkY0RjMzREJGRUFDQjk4RjY1QjZBRjg0Cis6MTBFQTYwMDA5NDEyOTM1Qzc5QjQ1RkMxRjdCNTQ0RkIwMjA1NkQzQzI5Cis6MTBFQTcwMDAyODVFMjc3MzNFODhBNzdERDY3QzkzRTBCNTcyM0MxMzUxCis6MTBFQTgwMDAzQzMzNUMyQUMxRDMxRUFCREJGRDFGMzA5RTNBRTMzMjIwCis6MTBFQTkwMDBEMkNCQUNEQjBFODdCMzFEQzAzMTgzQzNDMUUxMzNFMTAwCis6MTBFQUEwMDAyODA2OTMyMDA4RTNERjNBRkZGOTdDODRFRkEzRkE0MUJDCis6MTBFQUIwMDA3REUzNDdGRkJGRTM3NjM5M0QwMUQ2Njc2QkJCNENGQjc3Cis6MTBFQUMwMDBGNzA3QUIwRjdBMTE4RjVCQUE2QkZERENGRUUxNzQ5NzQxCis6MTBFQUQwMDAyM0Y4RThFRTdBOTlGOEY2NzgzNURGRUY2NzlGOUVBMDg1Cis6MTBFQUUwMDBGRDMwOTdGODlFOTM3N0QwNEI3QjE4NDkyMzU4MzMxRDAwCis6MTBFQUYwMDBEMzBGQ0MzRjk2RkMwMkMwNEQ1NUQyNkY5MzlGNzI2QkUzCis6MTBFQjAwMDA4RTJEREZBMDk4MTUzOEYyNTY0QTg3RUFBM0ZGNUQ3RjY1Cis6MTBFQjEwMDA0NDQyQkQxNDEyRkJEMTY1RTZGRUI2RjI0QTBDRTc3RjEzCis6MTBFQjIwMDA4N0E5MTdEQkJDRjRFQzY5MzlFOEQzMDFBRUM3NUI4MDc5Cis6MTBFQjMwMDA0RTY4NUVGNkJDMTQ0RjMzQTM3OTE1QjRGMDdEQjYyRDQ0Cis6MTBFQjQwMDA1QURGMDEzNzk0OEI2RTA3RDRFQjY4Q0ZGNTkyN0M2MTY2Cis6MTBFQjUwMDBERDNDNUZDMERDRUY5OEI4REM5RUI3NTJFNEM4QjcxOTYzCis6MTBFQjYwMDA5NjlGRjUxOUZEQ0M2QjVERjY3Q0MzRTM2Q0NCRTk0NDU1Cis6MTBFQjcwMDAwRjdEQTVCNjc1RTkzOTFCREM5QUE5QzNGRENEQzE3RTExCis6MTBFQjgwMDA4NTNGQzVBMjVDQ0VFNUY4RjgxODM3REZBODM0QTNCREYxCis6MTBFQjkwMDAxNEJFQjAyQURCQkEzRkRBRTlFMjc2RDJBMTNGN0ExODk2Cis6MTBFQkEwMDBDNkUzMzdENDc5Mjk4RTYzRUVBMzlCRUJCRDE1OTNBRUY0Cis6MTBFQkIwMDAzMERGQTFGRDVFMUZEMkNCQ0U0ODI5M0QxRjlCRjU5NENGCis6MTBFQkMwMDBBRjlGRTg5MEU3MDM3OEM0OUNENkNEN0E2QTdFMzNFMEE1Cis6MTBFQkQwMDBGNTg3NzkzMkU5OTg4RUEyRTdGMjcxN0ZGMUQ2M0EyRjY0Cis6MTBFQkUwMDBFREY3ODcwM0ZEQkQ4RjQxMzlGODdENzcwQ0Y3QjdFRjVGCis6MTBFQkYwMDBBOTQ5Mzc1OUZERDdGQjVERENERURBRTExMkZBNkE4QkYxCis6MTBFQzAwMDA3REZGMTlGODYwMDdGMjgxMjcxOEE3RkQ0QkQ5MkJGMjc5Cis6MTBFQzEwMDAyNjFDN0U4RTg5OEZGMEMxN0NCOTY0MzI3Rjk2NEUxRTkxCis6MTBFQzIwMDBCMkNGRUYxNDc0QjM1M0M4RkIyRDQyREUzQkZCMjk2OTBFCis6MTBFQzMwMDBENjBFQkFEMUVFNUZBRTU1MjkxOUY4NzI0MkFCREQ0RTUxCis6MTBFQzQwMDAyODZFQjFFN0Q1MTQzNkRCRTkzRTE0MkI3MEQ4MTU2OTcwCis6MTBFQzUwMDBEMjYzQTYzRURFRTAwQjlFOEE3NDVGMDVGQTkyREIwNzY0Cis6MTBFQzYwMDA5QTZDREQ2Rjc3RUFFMzNEQUFCMUNGNDVGNkVFQzlEOURDCis6MTBFQzcwMDAwOUUxNDBCQzA1RjFFREI0NzMwRjA5N0NGRjREMzEwRTg1Cis6MTBFQzgwMDAyMjdFMDM2QUZDOTA4QkYyNDBFMzI0Njc5Qzc2QzMzMEJCCis6MTBFQzkwMDAzODE5QzAzOTc5NTQzODdGRUJGQTBDRjZEMzU4RkIwMzk2Cis6MTBFQ0EwMDAxRkNBRjExRENGMDBDODczQjI5OEM4QkIwODkxMUNFRUYzCis6MTBFQ0IwMDAwODcxN0ZBNUMzQzVGRDg0NzdDNUJDRkVDQkE1NTBCRjM5Cis6MTBFQ0MwMDAwMzgyQkVFNjA0NTg0QkU2N0MzMjFFMkY3QTFGMEQxM0RBCis6MTBFQ0QwMDBBQzM3M0U3M0ZFMkU1QTJDRjRCRDMwRjNGN0Y3NUQ3QzUzCis6MTBFQ0UwMDA5RjZEQ0U4NEQxQzdGOTAwQzc4MUU3RUY1NEUzMUQ5NzJDCis6MTBFQ0YwMDA2NTFGRTc1MTk3RjE5RUNCMTJBN0Y4QzhBNTcxN0UzMDJBCis6MTBFRDAwMDBENzQzRTRFNzlBRjZEMzNFRDVGOEQ4REFERTdDRTZDQ0YyCis6MTBFRDEwMDA1NzY5M0ZGNzM4RjNDNzE0QzBDRkZFN0NCNjk3ODExQzA0Cis6MTBFRDIwMDBEOTJGMDk3Q0ZFRDE0Nzc5NDAyNkJFMDdFRDZCOTQxRjkxCis6MTBFRDMwMDBBODA3NUUwOUE0MzA5RTYyQUU4M0I5MEYzMzI4NDc0NDBBCis6MTBFRDQwMDBGRDMzREM1QzlFMDBERDA0REMzNDdFOUNFRjE3QjIzNEM2Cis6MTBFRDUwMDBDOTg3MDI0MTM3M0I3RDhCNkZBOTgzRTdDREIzREU3QzRBCis6MTBFRDYwMDAxMUYzMTVERTdFRDhBNzIzNUM1QkFCOEY4NkFENzI5MzYzCis6MTBFRDcwMDAzNURCRTlDNzdDRUZGQUE4OTBGNkU5QkYyNTI1RjJERDdGCis6MTBFRDgwMDAxNkJCREUxNTE5NzA2M0ZCRkQ5MjRFRkU1Q0YyMEYwQTk2Cis6MTBFRDkwMDBEOTIzRkJBNUQ0RTk2NEE4QTg4Q0Y2MzNGNjVGMTM0REZDCis6MTBFREEwMDA2REIyRUM3NzM4RURGQzFDNUZGRjFEQUI3MERFQ0Q2MDAzCis6MTBFREIwMDAyRkIxMENGMTI5NjFBNzBGREExRDUxN0JGQkI4OUIwOTFDCis6MTBFREMwMDAzQjFCQTYwQjdDNUQyOUU2MUQ1MzBEMDVFMTk4QzYxMjgxCis6MTBFREQwMDBGNDlDQzE3NDdBODIzRjUwRTU4NkZBNjdCMTgxN0NFNDg1Cis6MTBFREUwMDBBMzc1ODE1M0NFRTE3NkM2N0YxQkRFOENGRjhENzgxQjI5Cis6MTBFREYwMDBBMjVCQkJERTM2RjcxREYyMDQxRTQyQUM4NUY2REYxRkI4Cis6MTBFRTAwMDA2RjVBQkE3MTIyOENFNzJFMEE5MjNEOUNEN0Q0N0VBRDAwCis6MTBFRTEwMDAxQ0M2NkNCRjNFMERGRENEM0NCMTFGQ0UxNjcxRkQ2QzA2Cis6MTBFRTIwMDBFRTRGRTczNEQ4RjVCOTUzN0Y3Qjg0QkRFMTE5NDFBRjhDCis6MTBFRTMwMDAzQkU1RTY0ODdBN0RCOURCQUVENzA3RTNDNzIzQzgzRjk5Cis6MTBFRTQwMDA2N0ZDNzg2Q0Y5QTdERjUyNTc4Mjc5MUFDNjBCNzU2ODkwCis6MTBFRTUwMDBEN0NENTYyOURFMTkzRTk1NUQxMUI3RDBDM0ZGNzUxMzg2Cis6MTBFRTYwMDBEMUMxOTNFN0NENkMwMjdFNEQ5REM2Rjk5Q0ExOUYxMDQ4Cis6MTBFRTcwMDAwMDA1ODRGQjA5QzU3MjBBRjM2RDM2MjQ1M0Y1OTg3RkFCCis6MTBFRTgwMDBCNjQxOURBODU5RDdCMUE2OThEQkIzNUI2QkZEQ0Q1NkIzCis6MTBFRTkwMDBCQkY2NzUzRjhGQTc1RTFCQTg3OTBBRTlBQTIyOThBQTNDCis6MTBFRUEwMDAyNTc3Q0YwMDQ3NzAxQ0NGQkJDNDc1M0I1MzYzRkRCOEJCCis6MTBFRUIwMDAwRkVCNjE1QzZGMDM0Nzc4Qjk1RUE5RDM1RUE3RkNDQzBBCis6MTBFRUMwMDAwNDNCMTExODREMkZEOEYzMzFGN0E4QTk3NTdFQzQ0NzFDCis6MTBFRUQwMDA4NEM3NUY0MjNCMjQ0QUNFNTE3QThEMzRFNjcyNEQwRDkxCis6MTBFRUUwMDAyQ0JDRDNDREY1NTczOThFNzM2MDNBOThCQjUwRkY4MzU1Cis6MTBFRUYwMDAwMzZFQjI3MzdBNDM4NTJBREE5M0ZCRTVBNTNGNDIzQjYyCis6MTBFRjAwMDA3MEUwMjUwRkMzRkQ5NERFQkY5RjQxRTcxQTdBNDNFNzA3Cis6MTBFRjEwMDBDQzQzM0FFODk1MTg3OEI2MzA3RkUwMUY5RUZDQzMwMkQ4Cis6MTBFRjIwMDAxOEI3MEY5RjZGMzA4QzVCMEUzQ0NFNjI3N0MxRjhBRTg2Cis6MTBFRjMwMDBFODQzNzFDQURCNjU0NjQwOUUwOUVEN0NBQzBCRjM1Nzk0Cis6MTBFRjQwMDA2MjlGRjhERjNCMEZFOEVFQzE2MEQ1RjZBOTZDMjgwRTkyCis6MTBFRjUwMDA2MEZBRkZFN0Y5MTMwRjIxOUMxREUzRkVCMzE5RjlBQzJBCis6MTBFRjYwMDAwQkUwNTRDODBFMzNBMjA4Nzc1NTlFNENGQ0M3RjI4MkMyCis6MTBFRjcwMDBBOTg5RjBCRUU2NzBBNDBFRjNEMTZBRDQ0QTk0MzQwMDk1Cis6MTBFRjgwMDAwNzVGRUZFNzdEODk0N0IxOUYzQUFEQjEyRTFCRUE1Nzg2Cis6MTBFRjkwMDAxRkQxQzk1RTk5MTdCREY2MTA5NkE3QkZDMkNCMUQ2RUQzCis6MTBFRkEwMDA0NkY2MjBGMjJGQjNGMDVGQ0Q0N0E3RDBGQzBFMEIzOTA5Cis6MTBFRkIwMDBERTFFMzVGQTBDNjk5NEY1RDA1NEM3NzkwRTdCMUU4QjkyCis6MTBFRkMwMDA5NTBFQjRFOTM2M0E0OEI4QUM3NDMwMTNFODYwQjI5NTlGCis6MTBFRkQwMDAwRTBDRTlCM0QwQzFGNzg0QkMxRDlCNUYzODlGNUNBRkJBCis6MTBFRkUwMDA3MEJFMTk0RUY3MkRERTlDOEFFMUZDNjE4RUJCQTkzQUZBCis6MTBFRkYwMDAyNzgyRkJBQjI2MUY2ODMzNkVEMkIwRUM1OUUyOEUyMzFBCis6MTBGMDAwMDBERjk5N0M2MUYyQzMzRkJDMkU4MjBCRjhFMjQyMUYzQ0M5Cis6MTBGMDEwMDAxNzA1RjVCOTk5RjgwMkZEMzgyQkZENUYzMjAyOUYyQ0Q4Cis6MTBGMDIwMDA2MDAzODczMEU3N0U4MUNBOTI1OTIwNDI3RTc3RjYxQkMzCis6MTBGMDMwMDA2NUE3NThFOERFODlBNzA1QjMyNTc2RDQyMjhGNEU5Q0I0Cis6MTBGMDQwMDBFMDY1MEIxRUI1QzEzQzY4RTVFNEYxRkQ5Q0FBNzc0NDgwCis6MTBGMDUwMDAyQzdDRDcwOUY2MzMxQTg1NUQ3MjhDRTU5NTIwREYyRDVGCis6MTBGMDYwMDAwRDdBQTZFMUY5ODYwN0EyMTRERkY3QzQ5QjI5NkY2RDFDCis6MTBGMDcwMDBDNjVCODFBQjgxMEUzRjE4MjdFQjM4RjkwRTdERTlGREE5Cis6MTBGMDgwMDBDNEJGMkYwNjE4REE2RDVCQTcyRjlCODBGRUM5MDdENzc4Cis6MTBGMDkwMDAyNDI2NjA5QzczMjNFMEZGMjgxOTM3QTlGMTMyRTU0MjRBCis6MTBGMEEwMDBGNThGRTdGQjY1N0E5NDNGMTM1MUZFOUU4OUVGMjk1MTU2Cis6MTBGMEIwMDAzNjQ0QkQ3RUFBMDdFQjZDOTM4N0RCQkQ5Q0JFQjc3QjU1Cis6MTBGMEMwMDBCOTVEQjhEMURERUQ0NUZFMUEyOEYxRDI3RUFBNTlFRjFGCis6MTBGMEQwMDAzQzg1REI2REIzM0MyMjlFRkNFOTdBMURGREZCNTkxRThECis6MTBGMEUwMDBERTZFN0I1QjJBRkVEQTQ0ODQ3MzM3M0Q3MzFCNTIwQzYxCis6MTBGMEYwMDBGNzAzRkNFNTQ5MURFM0YxREU3NTJDOTFDOUVFQkJERDlDCis6MTBGMTAwMDBDQkZEN0ZFRkMxMUZEMDNFNTI2RTU5OENGQ0NFNDgwMzIxCis6MTBGMTEwMDBGNDY3NTlBRjA1ODA5QTJDOTAxRjAwQUU4MTc0RENBMTcyCis6MTBGMTIwMDBGQkM5MEU1QjEwQTlGREFCM0E2NUY4RkFFMjlGQTM5NjA2Cis6MTBGMTMwMDA3NUYyRkU0MzQ5RjQ3MkZGOENGQzhCMzVDMjlGQUIyQkZBCis6MTBGMTQwMDBGNTEyNUY3NEI0QkE3QjcwMkE4QjNDRDlEQ0RFOERENEE3Cis6MTBGMTUwMDA4RTlBM0Y4QjdFNTMxMkQ2MzkwNTdFMTMzRTcxN0YyM0U0Cis6MTBGMTYwMDA3OTFBREZERkMwMzJFRTZGRTAxM0Y3MzdGMDg5RkIxQjRGCis6MTBGMTcwMDBGODFERjczN0IwRkNGMzM2ODNDQUI4Q0Y4MTY1RENFN0ZBCis6MTBGMTgwMDBDMDMyRUU2RjYwMTlGNzM3RjBCOUFGQUQ5OTlFQkY2QTI0Cis6MTBGMTkwMDA2QkExRUY4RkI0QjU1MkY5M0MwRkI3QjM1OTc5MzJCQUJFCis6MTBGMUEwMDAxMEYwREM3NTgzREJDMDdERUJDRDYyN0QxRTMzNEE3M0NFCis6MTBGMUIwMDA2M0IwOEVCRTA4RjczQjdENEZERkNBNzAzRUJFMjg4RjFFCis6MTBGMUMwMDAxNzc1NDY2RjY1NTdDMkIzNkI1QUE4MEIwMzU5REVGQjIwCis6MTBGMUQwMDA4M0Y0RjRBOURCMTlDNjBENzY0OUM5NjY4Q0QwQURGNjY3Cis6MTBGMUUwMDBGQ0UyN0MxNUY0NzM1OUY0REFEQTFDMjhCNzdBMUU1OTVDCis6MTBGMUYwMDA4Rjc5M0I5M0Y0QjVCMUE1REE1MDU5MEY1NTJEN0JDMEVCCis6MTBGMjAwMDA1MjlFNTBEMUEzRkFBMUZFNzczNkVDNUY4RjdDOEE3MEI0Cis6MTBGMjEwMDBBMEYxQjZDMTczRTBGQ0I1QjBFNEU5NTI0NkU3MzcwNkE5Cis6MTBGMjIwMDA0QURDMjlBNEIzQUI3MEJEMjYyMkZDRENBRUJGODhBRDlFCis6MTBGMjMwMDA4RkEyOUYzQzQxNzc1NzIxN0Y0MEZEMzRBN0NCOTNBQkYyCis6MTBGMjQwMDBCRjE5MzdBOUE2MEQ2RjM3NUEzREI5RkFBNEVBMzE2NTNGCis6MTBGMjUwMDA5NEZFRjBCQjM0NEEzRjFENkNCRDg2NjdDOTM2MjMyRjMwCis6MTBGMjYwMDA2MzNFOTEyRjQwN0U1QTk3OEJGMzY1OTc4RjNGREZGNDczCis6MTBGMjcwMDA3MkJGRUNEN0RFREE4QkJDRjBCQzQ4RjA2OTk3MkY1RTJBCis6MTBGMjgwMDA4RjcxQ0U4MUM5MzJDNTBCN0E1REQwMDUyNkU1QjY5NjYxCis6MTBGMjkwMDBGQ0JFMTRDNkZERDY1MzJBQzNCOEYzNUQxRTZFREY0QzA4Cis6MTBGMkEwMDA5QzEwRTJGQUYyREI1RUQyOTcxNzRDRjg1OTdCMEU5NDcxCis6MTBGMkIwMDAyN0ZFMzgxNjQzRkRCNzk5QzVGQzQ4MjdDOTJEM0M2RTdCCis6MTBGMkMwMDBGQUFGRDVBN0U2MzQ0MkY1MzNBNzNEOUM0MzcxM0ZDMTYxCis6MTBGMkQwMDBERjI5M0M2RjA0RTVCNTFENTc0RkMwMzhDNzA3Q0Y3MjEzCis6MTBGMkUwMDBCOUY0ODBBMEI3MUU1NzVGMEJBREU3QjQyMEQ5MEQ4Q0UxCis6MTBGMkYwMDA3NTkzNURCMDM2QUFEMkJFQkM5Q0NGOUY2RTk3RjYxNUIzCis6MTBGMzAwMDBBQ0U3MDZDNTlCMDQ3OERDN0Y5RkUxMjVGRkZCMjM4RkRDCis6MTBGMzEwMDAzOEE3RDY0N0Y2ODJEQjk3RDBCMkUxN0Q3NzUyMjY3RUJBCis6MTBGMzIwMDA1RkFGRjk1Mzk4OEFCRjM5NTg0NUU3NjY5MzE1MkFFNUM4Cis6MTBGMzMwMDA1RDZGQUVFMEYxQjk0MEU4QjIxNERBMDlCNzFDRjA3MUM0Cis6MTBGMzQwMDBGOTEwRjQ1MkZFNTVBQTYyRUZFMURBMDgzRTY1MERGOUI0Cis6MTBGMzUwMDAzRDY1MkNBQzI3QkM2QkIyNDY3OTVDRjAzN0ZBREUxQ0ZECis6MTBGMzYwMDBBMTNDRURDRDRDQUM0QkIzNEM3RTYwQzdCODRGN0UzMzY3Cis6MTBGMzcwMDAxNUY3QkJCRkFFQzVDNEQ5MjFDQTgzMjREMzQ2QzY3MzEzCis6MTBGMzgwMDBCQzAzMDcwMzA4Q0Y1N0NENzM0N0ZERUIwMjUwQkY3RDg5Cis6MTBGMzkwMDBBOTE2QzM3NTk4QTJENUQ2NjM3Q0IwNDNBQkY1MjI1RjlFCis6MTBGM0EwMDAwNTI2RDc3OTk3OTAxQzFBQ0M1M0E2RjM2REVEMTVEQzgyCis6MTBGM0IwMDA1RUM1RUZDODk3QUM5RDFEQzJGMzJDODU0Mjk2MDVCMjgxCis6MTBGM0MwMDBBQjI0QjQ3MzNBMUEyODZDODQ3OUJDQjZCQ0NCRjY5Q0Q3Cis6MTBGM0QwMDAwQjI5QUY1RDU5OTA0MzcwNzYzMEMzOEJGNTkzMEQyQTlFCis6MTBGM0UwMDBFOUE1QzJBMDM3OEQ3NjVDQTExOTM3QzQ5NDYzOEIxRjQxCis6MTBGM0YwMDA5MUJCREM5RUI3OUNERkFDREFDRTc1OEM0RkQ4Q0I3OTU1Cis6MTBGNDAwMDBDMjJGQzg3M0U0Mzc3RkVBMzFGNzU1RUM3ODcyQ0UzN0Y0Cis6MTBGNDEwMDAzNzcyNTczNkMyOUI4QjA3OTVGNUUxRjNEOTFFQTk2QTVGCis6MTBGNDIwMDBDNDc5MTY2QTdFODIzQkFBQURBQjQxRjkzNTlFQjVBQzc0Cis6MTBGNDMwMDA0NUJBRkJDQ0YwM0FFMDlDNTJEMURFODdFQjNFNDU1NzEzCis6MTBGNDQwMDBFOTFDQzM1NDM2QjAwRUZCREQyQ0U4QkNBQkM0QUUyN0MwCis6MTBGNDUwMDBFRkYyMjg2MjdGQjdCNkRBM0I4REM3Qjk5Mjk2RjE0QkNGCis6MTBGNDYwMDA5MjdFOTZCNDhDNzc2QTU3OEVBRDNDQjFCQkMwNTZGRjg2Cis6MTBGNDcwMDBCNDFEQTVCNkVGQTdBN0NFQjA3RDNGNzM3Nzk1QUQzQzgxCis6MTBGNDgwMDBCOTc3OTZBREZFRDQ3REI1QjY3MjY1RkE0MjVCRkRCMzMxCis6MTBGNDkwMDAwRTJGQjQ5NUE3RjU3REM1NTY3RkM2OEI0QjZEREZDRjdDCis6MTBGNEEwMDBFRTVGNjZGQjdFQ0UxQkFCNkRFNTczMDc2RUI0RDUzN0EyCis6MTBGNEIwMDBFRDY2QTc1RTlDRTJGRDdDRjZCMjA3Q0Y3OUQ5RTI4MkM5Cis6MTBGNEMwMDA3NjdCREM2OTRGN0JGRkIxNUU1Rjg3NzIyREVDMjZGQTlECis6MTBGNEQwMDA1NjUxOEY0Mzc5RjUwRERDOUZGMUNFODlFOTI4NTdDQTQzCis6MTBGNEUwMDA4NDVEOTMxNTM0Q0U0MTM5NUExM0Y2OTIzRTUwODNCQzU1Cis6MTBGNEYwMDA5RTFBOUM0Nzc2QzcyOTNCNDAxRTlEODU1NjIwMUJGQ0MzCis6MTBGNTAwMDAxRTQwQjlEQzk2OEM5N0I5ODZFMEY2NjlERDc0NjZBMTc5Cis6MTBGNTEwMDAyNjVDNEY3MTc1QjNCREFBMTkyQzExQzJGMTc0NkVDRjYwCis6MTBGNTIwMDA4MEI3ODhGNTdDM0FCNEI3Q0M2M0JGMkNEMzExRUYwMTE4Cis6MTBGNTMwMDBGMEJCRUVCMkY4NUQyM0Y5NTk0RUJGRUE2NEZEQTg1MzYzCis6MTBGNTQwMDA2NEU2Qzc2NzhGMTQ2RkMxNjc0NUNCQjNCNTk4NUUwNzk0Cis6MTBGNTUwMDBGRUQ1MTU4ODg3QURFRTc4NzMwRkY0QkJCNUQ0Q0ZGNzIxCis6MTBGNTYwMDBDMTg0N0ZENTU1RDI0QjdDMzE1MEEyOTI3RTYxQUE1RTc4Cis6MTBGNTcwMDBCMUQwMTJERkRBRTRFNTdBMjVFMEJEODNGQzNCQjU3NDU3Cis6MTBGNTgwMDBFNjYxMURGMUJFNTZBNUI4QzM2Njg5Qzc0NzkyQjAwRUE1Cis6MTBGNTkwMDBBOEQ3NzZDRDdBRTM5REVGQzA3QjZGQTlCN0QwMEJGMkU5Cis6MTBGNUEwMDAyOEY2OThEQkMwRkRDRkVEMDJBRkE1NUE2NTJENTg1QzVCCis6MTBGNUIwMDA2MDVGMzQxRUM0RTcyNDFERUMwQzc4OTY5NzZGM0I4ODdGCis6MTBGNUMwMDBDRjlCQkMzQ0JGRUU4Q0Q4MDNCNTI4NEJCQzczQjhGREI5Cis6MTBGNUQwMDBBNzRDNzFBN0Q2RTFGQTY5MUM4RTkxRTg0Q0NERDlDMTMwCis6MTBGNUUwMDBGN0E5Q0FENEQ3OTFERUQwREEzRTIxMEZEMTgxMEZFOTM1Cis6MTBGNUYwMDA0MEEyMjdEMThGMkYxMjI0QkRFMUMzOEQxQzJDQUI1MjBBCis6MTBGNjAwMDAyQTAwREYyMzY1ODY4NDc5MTczNUUxMURCNEVGRTY0QkM4Cis6MTBGNjEwMDBEQkVENTVGMDM3MzcyMTVFMjMwREY2RjUwRTc4NzcxMUM3Cis6MTBGNjIwMDA3Q0VEMTI4RkJGNzY2NUVCNEZENzAyRkM1RDc5QTUzOTczCis6MTBGNjMwMDAxODNCQzFGODQ0QTM0NURFNkMxN0ZBRjQyQjNFRDlENDJECis6MTBGNjQwMDBGRjI0NkZFODVDRDdCNDIxN0IwN0U4N0Y4NzdDMkFDMjYwCis6MTBGNjUwMDBEN0NENTA2RUY5NkVFQTY2NDhFRjNFMEQ1NjEzRURFRENDCis6MTBGNjYwMDBFRjI2ODlGRTREN0JGNzNBQzE1Qjc1QTU0REI0REZGNUZBCis6MTBGNjcwMDA1RUE0OEFFQzVCNUZFQkNGMzNFMkNGRDdBRjMwRTNBQzc1Cis6MTBGNjgwMDA5MUYxMUE5RUI0OTNGNDNEMkI3NUVCNjg1N0I0RUE2RTcyCis6MTBGNjkwMDBBMzI3ODMzQ0E4RjI3MDNCNjYyM0U2N0QyMDNDMjJFRjQzCis6MTBGNkEwMDBBMzRCRTBDM0RDNkY3QkNGQ0M4NzEyRkJCQ0Q3NjUzM0E5Cis6MTBGNkIwMDBEQkJFREY3NTc5NTVFMzQ3QjNDNzdERTBGNzI1MkNGMDU2Cis6MTBGNkMwMDA2RTg0NzExMDJGMUQ5RjM2RDZDNzY5RkY4RkYxNzM2QTQ0Cis6MTBGNkQwMDA3RkFGRThBMUYzQzBDMjdGQTkxMjc2RDIyQzBBOUEwMUFCCis6MTBGNkUwMDBERkI4MTlGOTA5RTc2M0ZDRTIyQ0Y0MzYyRkFBNDdCRTBDCis6MTBGNkYwMDAzNEUzMURBRjc5NzNBODVFMkNDOTk0MTZCMjU3NUNBNjhCCis6MTBGNzAwMDBERTkyNEY0QzI1OTg3NUI3MTlBNzI0OTM5N0VCMzVGOERGCis6MTBGNzEwMDBGNzAwOUVBQjM4QjVDQjdFNUU2OTYyQjdCRDdDREEwRTcyCis6MTBGNzIwMDA3QkY5RjQ5NEJEMEM1NkYzMTFCNDBCMUExOUM3Q0Y5OTk5Cis6MTBGNzMwMDBCQkVEREYxQkNEMzg1RjFEM0Y2N0UxODU5MTRGNzBGRDRECis6MTBGNzQwMDA2QjNCRDdDQTg0RkUzN0UzQTlDNUJERTkxQTE0QUY0NUEwCis6MTBGNzUwMDA2QkVDN0FCNTQwRThGOTAyODdGRUFDMEEyOUU0RTdEN0ZBCis6MTBGNzYwMDAxQzhFMUM0MkZCRDE4Q0JGM0NFRkQzNkRGOTZGNjYxQzI1Cis6MTBGNzcwMDBDNTI5Q0ZGREFGNkM2M0YwODVGQ0U1ODQ4N0M3MTcxMjAwCis6MTBGNzgwMDBFMERGQjQxNjg5Qjg0NTMxN0ZCQTE0RkQ5OUM1NjRBNzg2Cis6MTBGNzkwMDBCNTlDODZGMkU5RDdERUM0MDc1RTMyNUFFQ0U3MjBERTdDCis6MTBGN0EwMDBBRDU3MUY5Nzc0M0U0RUMyMzJDRUY1RTVDOTBCRjhGNDQzCis6MTBGN0IwMDA1Mzk0NTc2MkM2MzE0QzNGRkQxRjAxRTMyMkU0QUZDREE1Cis6MTBGN0MwMDBCMUU3NUExRUMzMzhEMjRCMUU4NkZEQ0M1NTlFM0VEQzk3Cis6MTBGN0QwMDAwNkU1RDVDNTJBRTU0MTZBMzM5NkZGQzg4RjcxNDBGQzFFCis6MTBGN0UwMDAwRUU1OUExMjdEM0NEMUZGOTMyRUYyRDczNzA4N0EzNjc4Cis6MTBGN0YwMDBDRkU3OTg3MThGNUM5RkQwM0YzRUM5REM4N0YwOEIzQzkwCis6MTBGODAwMDA1NzNGREFCOTY3RUUwNkQ5NkNEMzczM0M5RTY2QzZDRDE2Cis6MTBGODEwMDAyNkY3REFCRkY3MzIyOTU3ODNGNTlCREE5NDkyQjk1RDYwCis6MTBGODIwMDA2NTA0NkIyQzcxRjUzM0M0N0E0RDU5OUNCRTc1MzE5NEM3Cis6MTBGODMwMDBFRjYzQTkyQUJDMkZBMjUyRDA0NUVDOTBGRDNDRDgzOEVBCis6MTBGODQwMDAyNkQxQjk4MTcxNDc5NDU4MEFFQTRGNzlDNEZFQkRDMkU2Cis6MTBGODUwMDA3MTVFRUMwQ0U3RjkzMTQ3OUMzN0E0QjA3Nzk2QzA3ODFECis6MTBGODYwMDA1QkY0MTYwOUU1RTc5NkM1NjBDMzQzQjlDMjI3RjI4NzgyCis6MTBGODcwMDAyN0IxNDk0ODdGNzM5NTYwMkM4REY4RkQ4MzQyN0FDMzg4Cis6MTBGODgwMDBGM0VBNjkyRjJDNDE3REZFMkNDRjRGRDE0RUQ1QjdENTUxCis6MTBGODkwMDA0MTU5RkI4RDQyRkE0OTBCQjBDQUNBRTA1MDVDRjg3QjczCis6MTBGOEEwMDAyNzYyQUNERDM1MTQ2N0RBMDNFQjVBMzYxMUZENkIyRjk2Cis6MTBGOEIwMDA0M0JERjI3MzU4NUYyQ0Y3ODIzRjhFRTUwN0MxMUZDNzI3Cis6MTBGOEMwMDBFNzVFRjBDN0YxRkQyRkMwMUZDN0YyM0VGMEM3RjFGOUE4Cis6MTBGOEQwMDAyQkYwQzdGMUZEMjNFMDhGNjNGOURBNDA0RDhEMkZDRjc4Cis6MTBGOEUwMDAxRUE3QjJDNkVEODZFMjU0RkQ5MjE5QTc0MjUxRjJCRUEwCis6MTBGOEYwMDA5QkQzRkY2MEJDMkFDMUUzNTU2M0Y3NjM5OEZENTAzQzdFCis6MTBGOTAwMDA3MDU4M0YyMjJFRjhGNjBERkY3OTJGOUU5RjVFMzE2REM1Cis6MTBGOTEwMDA1RDE3OUU4M0Y1QkFDQ0I4MThDRjdGMzBGMzlBNERGRUIxCis6MTBGOTIwMDA1QkIxRjc1QURBMEY3NkU3MUY2OUMxRjVEODVCMURBNDAyCis6MTBGOTMwMDAzQjg2RENBRTg0ODZGMkQxRTk3Rjk5N0U5N0QzRkUzNTkzCis6MTBGOTQwMDA5RjRFN0RFNDQ3M0JFMDJDQjQ5M0JBMjlFRUIzQzlDNTgyCis6MTBGOTUwMDBDQUU5NUNBQ0U0OEYyMTVGMzhFMzkwMjYxRjNGRUIyQkI0Cis6MTBGOTYwMDBDRDc4OUU2OTMwM0Y1NkM0NjczQzJDRTVDNTc4OTk1QkRECis6MTBGOTcwMDAxMkYzMTRGOTlCMjRDMkEwOEJDREM4Q0Y5NjdDRTM2MDEwCis6MTBGOTgwMDA0NTlBRTIxQ0MxQTA0MUY2OTcwNDc2MTlEOTY5NUEyMjFBCis6MTBGOTkwMDA4QTcxQThDRTExRjI2MTc3MDkzRTVEOUJFRkE2N0IyNEE4Cis6MTBGOUEwMDAzQUYzRjlGRTdGNUQ1MTJDOEFFREQ3RTc0RjhGNUFGMzdBCis6MTBGOUIwMDA2M0NERkNERDQzQTFFOURFN0U0QjdGQUI0M0E1QTNFQTJCCis6MTBGOUMwMDAyOTA1RjRBQTNFOEE1RTU1M0MzQzdGN0RGREMxQjNCRDRFCis6MTBGOUQwMDA5ODk3QkMyOUI4QjQwRkVEQUI0REQxMDg5RDVGM0Y5MDBGCis6MTBGOUUwMDAzRjlERUM4RkMxRkFEMTk5OTRCRkFDMDRCOUREQUE0NDE0Cis6MTBGOUYwMDBCRDY0QjdBQTM4RkY4QUExRkE2NkJEMUI4NTdDMDZGNkVFCis6MTBGQTAwMDBBM0Y4NUMyMEQ4NEJGNTNDNkE5Q0UyMUY5RTA4QTNGRDNFCis6MTBGQTEwMDAyQThGOTdFNzBCMDRDMUJGRjZEQUUyQTY0MjFGRkJCOEI0Cis6MTBGQTIwMDA3Q0RCQTQyN0UyRDg2RTUzNTRENTUxMUM2RDJBQUYyMjNCCis6MTBGQTMwMDAzQ0FGMTc3ODVFOUY2N0VBRkQxOEQ5MUIwRjBBMzk2ODNCCis6MTBGQTQwMDBGNkIzNUVGOEVCRUI5QkRENjQ3N0M1NUJCMzhEQkE1QzE4Cis6MTBGQTUwMDBDQUM3RkMwOUYyREZBNkUwNUQ1RUNDNkY3N0U3NTc4RjdGCis6MTBGQTYwMDBEQUVGQTM2M0Y2RkI2QTZEREQ1OUQ0RUY4MzE4N0Y3Njc2Cis6MTBGQTcwMDA4Nzk2NkFEOEFGNkI4NEJDRkJBNzQ0N0Y5RkQ3QkUwNDMwCis6MTBGQTgwMDBDQzY5QjRERkM1NEM3RDlCOEE1QUY3ODk5RDRGM0ZEQTFDCis6MTBGQTkwMDA4OTY3MEQ2RkI3NDJFRjlGODc3OUJGMkE0QkQ2RkI5NUQ5Cis6MTBGQUEwMDBFMUU3MTY1NkVFRTNGNzUwNkQ1NUZCQzhERUQ5RkFBOTJCCis6MTBGQUIwMDA5NEYxRkM0M0I2REZENDNGODM3RUI4Q0Q1RTI5MTRGQ0JECis6MTBGQUMwMDA1NDI4QkVFQjY4QUY5NEEwNUY2OUI3MkZDRTNBNkMyRjc1Cis6MTBGQUQwMDA0RkVCQjM5NzY3QkNFOEI0NTc4QzNGQTBCREIyNDhDOEEyCis6MTBGQUUwMDBCQjNFOTBDRjNDNjk2MjQwNDUzOTEwNEZBNjZBMTBFRThDCis6MTBGQUYwMDA0NkQ2QkIxNkY3Mjk1RDIyQ0VCQzQ4RThBQjhCQ0RGREMwCis6MTBGQjAwMDA0NzdGMzZDMTVGRDhFQ0I3Rjk4OUU2N0QxQTQ1QTJGRjc5Cis6MTBGQjEwMDBFMkJBNDNEN0I2QTM3MDhEOUJGNjhGNEVGRTY1RjFGQzFCCis6MTBGQjIwMDAwNzZCNDg0QzNBRUNBMDQ2QzM3RTFFRjU2Mjg3OURFMzA2Cis6MTBGQjMwMDBCNDg3NkFENDFFQ0FCNzJDNzBDNDFGQ0M3RDRBOUMyN0Q4Cis6MTBGQjQwMDA5RUNCNzU4RUZGNTlDNzM1RkJEQjA5N0EwQkVEMTVGMzlDCis6MTBGQjUwMDA5RTAyQkFDNzBCREExN0FCNjkyOTE2QTRGQzJEQ0FGM0FCCis6MTBGQjYwMDAyQjVDQzM4QzlFMEM3NDNDRDNDRkU1REEzMEJDMjVDRjI0Cis6MTBGQjcwMDAyM0JDOUQyRkRFMTUwNEY5M0QyODA1NzU0QTRBMkZFMTY3Cis6MTBGQjgwMDBGOTVGMjg0RjE2MkU4N0Y5OTBCRDdDODJGNkExQ0RGQTM5Cis6MTBGQjkwMDAzOUQ5QkQ5NDJGQjZCMzQxRTJGRTYzOTI5MTFENjJBRTk2Cis6MTBGQkEwMDBGM0NFMjAzRjNGRDM3OEFFOTQ5MkIxN0Q0QjI5OEQ0RjU5Cis6MTBGQkIwMDA3MDk1MEVBRDJGRTBFOTI4QzcxM0NGMkZCQkE0REU3RUQyCis6MTBGQkMwMDBDRUE3RDE2MTZGOThGNDcwQjFFM0ZEQ0IzRTdFNEVEQUUzCis6MTBGQkQwMDBFNDgzQjdDRjdFNzFEMjI5MDBDNzBBMjk1OTFGNTA0RTNFCis6MTBGQkUwMDA1RTRGNUFGOEMzNzUwMkY5MTBGRjNFOEVBNjQyRkM3MUIzCis6MTBGQkYwMDBEMEZCOTA0NkY5MDFEOUZENzczMDIwQzkwNjNGNEJENjlFCis6MTBGQzAwMDBDRDA2QkRFODFGMzg1MzgyRjIyNUZFQzkxRDVERTdFMjJGCis6MTBGQzEwMDA3MUM1ODE3RjQ1QTNDQ0UzQTk5QTVCNUYzQzU0RjZGQjk5Cis6MTBGQzIwMDBFNzUwMzkyMkM2MDFENzIyQzlEN0RCNzI2RjAxQzBGQjZBCis6MTBGQzMwMDAwMzkxMUZCMEQ5NjBEQjE0Q0NBRDk0QjU2REIxOTJBMTI2Cis6MTBGQzQwMDA3NjM5RDg0RTFBQTU1RDlDNkQ1MzMzQjQwQjlBRUQwMEVFCis6MTBGQzUwMDA1RDlERTYzRDFGQTVGOEU0REY2NTAxOEY3NTdDMTVGMTFDCis6MTBGQzYwMDBBNkU5NDEzQUM3MzM0RkQ1MzBFRkUxOEJDMjMxNkVBQ0Q0Cis6MTBGQzcwMDA3OTI3RDgzNkQ3QTlDM0RCMDFEODZCNERGOEU1Q0NGMDhFCis6MTBGQzgwMDBBN0YwQkI3NTdDRDcyOEYwRkZCM0YxMzE1NjdGNkVGMTNBCis6MTBGQzkwMDBGRDMzQzMwN0Q1RDc4RDFCNzlCRTA4OTc4QkVFQ0JEMDJDCis6MTBGQ0EwMDA4M0IyQTU5RjVCMEU3QzRDRjE2QkY1NzI0NkU3NzQ1NEYyCis6MTBGQ0IwMDA5N0ExQzU4MENFMkJCNERCQzgwRjU3QjNFQjM0QjQwMzg4Cis6MTBGQ0MwMDAzNjQyMTlFRDgwOERCREREMTRBN0FFMjhCQkI1MEI4OTdBCis6MTBGQ0QwMDBCRTIyRUQ2NzI4MEYyNjMzMkRGQjNFRTg3N0IyQTY2MkUxCis6MTBGQ0UwMDAyNjBFNTNDRjNEMjQ2M0RDOUI3RDg5RDEzOTkxQUMwMzMzCis6MTBGQ0YwMDA3RTdFQUY0NUM5QUMxRkEzN0Y5NDlERURBNTM4NTAyMEYzCis6MTBGRDAwMDA3QkZBOEZCOUIxQ0JFM0MxMjZGQzgxOUEyM0I1MTgyN0MyCis6MTBGRDEwMDA1NzFCNTkwQzU5NTE5NTUyQUMwNjk5RUM3NDQ2RkIxMDdGCis6MTBGRDIwMDA3RTYzRUZGNTc4REUxMjE0MUZFOTI3QkFFQjAxRjVBQTFFCis6MTBGRDMwMDA4ODhCOEZFNzI0QzNCQURDNUEyM0ZBMDlDOUE3NTQ4QUVGCis6MTBGRDQwMDBCRjhGNDdEMzE0ODhCMkEyMjI2NzFCQzI1MzkxODAwRTgzCis6MTBGRDUwMDAyNDg0OUZDN0I1MjYyN0U0NTgxQUZBQUY3QTg3Qjc2Mzc5Cis6MTBGRDYwMDBCRkU1RTcwM0MwOTc2ODdBMzgzODg0NTc1M0FFOEMxN0RECis6MTBGRDcwMDBGMUYyRTg2MjdCM0M5OTBEQzA5Q0ExN0RENTZGMTdERTQ2Cis6MTBGRDgwMDA4M0YxODQ3MUMzRTQzN0Y3QUZDRDdCNzRCMkRFNjFGMUU4Cis6MTBGRDkwMDA4NzY5NUZEM0FFMzdGQ0UyQkUwQUJGRTMxRTg0OTJBMDQwCis6MTBGREEwMDBDQjc2OEZDMTMwQkZFMUJCNzFEMjAzMUUxNkYzQkFDOTQ3Cis6MTBGREIwMDBCRTU4NEM3NjgzRTk4RkVDQzQ4QTE4RkYyRjY2RkM1RTMwCis6MTBGREMwMDAyQjY3RkJFOUJDM0Q4QjcyRkZDNEUzMDczM0FGMEFCRTcwCis6MTBGREQwMDAyRkYzMUJBNDZGM0Q1MDA2M0M0QTZFRTZDRDg3RjcwNTE2Cis6MTBGREUwMDAzMjhGOEJBQzk1OTg4QUU1QTFGMUQyQjQ0RkJGNDE4QThFCis6MTBGREYwMDA3NUM1QTQyMUZGNzdCRDE2QTNGQzAxQjYyNkM3NjYyRkUzCis6MTBGRTAwMDA5Qjc5QThBQkFGMjkxOTlGMDNDRkFDQTFGMzQwMUFEMkJECis6MTBGRTEwMDBFM0VBQkMzMkIyOUZDM0I5RkRGRjA3RTVFQkZCOUIzNkJCCis6MTBGRTIwMDBDRkY1QTJGQ0M0RkM4NTU5RjA1RkEwQjMyMzA5RjJENjNDCis6MTBGRTMwMDBGMzUxMjFEMzJENzY5OTQ3NkRBMTM4OThFN0EzNTM2Q0UwCis6MTBGRTQwMDBFRkQzNkRGNkYzODM0NjUwQUVDMzcxQzYwNzc0N0UyRUIyCis6MTBGRTUwMDA4MzY5RUREOEFFODZEOUNGMDk3QTNFQ0FCN0Q5RTk0M0NFCis6MTBGRTYwMDBGRDE3RDlERUE3QzE5RUIxREU0RjMxNzJGRjAxQTY5NzAzCis6MTBGRTcwMDA1QkZCM0Y3NTg0RkUyNzM5RkFENzMyRjYzRkQ0NkZBRTZECis6MTBGRTgwMDBBRERGMEU5NUM3NDc5MzExM0ZBREJCRDMxRTk4MUFBODlGCis6MTBGRTkwMDAyRDBBNEMxQjI1N0UxRkUwRjFDNzBERDExNjhBREZENzM2Cis6MTBGRUEwMDAzMjYwNzhBMDkzRjMzRTNEQUFGMEYzNkM4Q0VDMzY1NkFBCis6MTBGRUIwMDA2NDhGREZENzBBRkE5NTgxMjI5MDdFQ0Y1M0VERjc4MkM3Cis6MTBGRUMwMDBDRDYxQ0U3QkMyRUNGNkQwNzNDODI4MzBBRTFDQUFFRTUyCis6MTBGRUQwMDBBMzM4RkVDNzQxMURGREFGOTFFQ0U1QkUzNjQ2RjFFMzA4Cis6MTBGRUUwMDAzOTgxRkVFQjcwOUZGQTgyQ0Q3N0JBM0E2NjhBRkNEN0U5Cis6MTBGRUYwMDAwMkM2MkVEREZDQzA1Q0I0RUZGQkM0NzlCRDhFODg0QzFECis6MTBGRjAwMDA3ODg5RDc4RUE3RjMzNzY2M0Y3MTM3OUI4OEYyMzAyRUZBCis6MTBGRjEwMDBGM0ZDMDRGQTAzRTNGN0U1MTVEQ0I1MjkwM0ZFOUNFN0RGCis6MTBGRjIwMDAzQjFCMEQyOTVFNjZBMTlCM0UxOUYwNkExREVGRkNDMkNBCis6MTBGRjMwMDAxRUM1MzI4RkI4ODc0REEzRjE4NDlEM0IzOERFQjhDRjA0Cis6MTBGRjQwMDAzN0RFQjMyMkVFNjQ4RUQ3MzhDRjNFQkY0NkI3NDZGM0Q2Cis6MTBGRjUwMDA2QjE0RkM2QjhFRjcyQ0NFMkYwMzdFQzcxQzRGRTY3NDAwCis6MTBGRjYwMDAzMzM4REUwNUY2RjkzNTdBMzQ5QTVGQTNCOEU3Nzc3MDRGCis6MTBGRjcwMDBCQzcxOUY2RkJDMERBRTk2MDREQTZEREIyNENFRkZERDQ1Cis6MTBGRjgwMDA4MTVGNzVFMEJBQkVEN0IwM0E0QUZBNDBEOEM1MTc2MzY4Cis6MTBGRjkwMDAwM0E4NzdCMUNBQzc1QjUwRTQ0REFEQjU4Q0I3MTNFNDg1Cis6MTBGRkEwMDA4MDIxRjJEQzBEMEZFNjZGNjg1NDRFQjU0NUU5NzkxN0Y0Cis6MTBGRkIwMDBEOEQ5MDZFNTZGOTREM0Y3N0JEQjYyNTRERUREMzY5MzQ4Cis6MTBGRkMwMDA5RTY2M0ZFNTMzRjlCRDMzQTdDRjk2MzJEQURCODcwMzcwCis6MTBGRkQwMDBEQ0NGREE5NkFGNUQ3RTE1RUFBNTFBM0YzRjBGMzlGMzA1Cis6MTBGRkUwMDAxQzY2NThFQzVGMzA4ODBGRkE3MEZGRTUzMjU2ODlCQTBDCis6MTBGRkYwMDA2REQyMEUwRTc3QTQ2RTVDMEFEN0NGNUY3OUE4QUYwREQ1Cis6MDIwMDAwMDIxMDAwRUMKKzoxMDAwMDAwMENBMUU5NzRCNDc3RDBBQkMxMENGRTRBNzNFMTZFMDdFODAKKzoxMDAwMTAwMEI4QzdDREU1M0Q5QkM1RUYzMTVDMjBGNDBBNTMxQTI0RTcKKzoxMDAwMjAwMDE3RTJFM0UyNkNEQUVGNUZCOEM4MDg2OTgwQjc0NTkyN0YKKzoxMDAwMzAwMEY0ODczMkExQTdGMERDQ0FBNTYyQTk5Qzc2N0UwNDM1QkMKKzoxMDAwNDAwMDA2RjQxQjMxOTQxNERFNEY3NDY5RDFFMTI2RDRDQkYxNTAKKzoxMDAwNTAwMEQwMjVFNDFGQzRBMTYxMEVGNDczQTlEMDkzMzVBRjdBMDMKKzoxMDAwNjAwMDE4RTYzQkIwQjk2RTgyNjNEMTIyQkIzREJGQ0Q5N0Q2QjcKKzoxMDAwNzAwMEQwM0VEOTU2MTk2MUI4M0UwQjFCRUNERjNENkVDRTg3RTIKKzoxMDAwODAwMDcxQzdCRDA1MEJDNkI4Qzc4MEVFRDJDQTkwNDdFQThDQ0YKKzoxMDAwOTAwMDRGM0UxQUIwQzcyMThGQjM4QTVCRUFGMDYzNTE2NEQ0MzQKKzoxMDAwQTAwMDdCMENENjYwOUJCQzIxRkQzNjlDOEUzOTNDQUZGQjk5MDYKKzoxMDAwQjAwMEYwREJGNjUxM0NDQzg0QUY0MDRENDkyOEFGMEI5QkY3QTkKKzoxMDAwQzAwMEQ5RjI5QTAwQjE2NDBDOUI3MTc4QTZEQzU3ODk3RTg4QkUKKzoxMDAwRDAwMDczM0UzQkE1RkJGMjQ3QkJCN0E0ODBBOUFGRjc5NzhCNTQKKzoxMDAwRTAwMDdCM0RBNUUxRjM3RTI1MjBGMjZGMDdFNzNERkI5OTMyQ0EKKzoxMDAwRjAwMDk2ODk3Rjc4REM3NUMxNjEyNUI2NTYxRkMyOEI4OTg3Q0EKKzoxMDAxMDAwMEZGNjkzRUVBMTI3ODdGRTZGQ0Y3QUJCOUZGNTY2NEJCQTUKKzoxMDAxMTAwMDNGRDNCQzE3Rjg5MkMxQjJDQTU0MEIzRDVGQkNDQzRENjMKKzoxMDAxMjAwMEY2MEMzMzA2MkE5MEVFOEU5QzFCRTBGN0I4OTlGNjRCM0UKKzoxMDAxMzAwMEZBMjUxOUVEOTcyRkRFQkY1MTZDQ0JEQjE0RkQ4RUI0ODEKKzoxMDAxNDAwMDVFQ0UzQzQyQ0IzOUQwQTEzQzc3Q0MyRjkxRjgzRTU2QzUKKzoxMDAxNTAwMDAxRTZCOTg1RjlGQkEzNzYzQkQzOTZFN0I2RkVDMDRGMUYKKzoxMDAxNjAwMDI1OENGM0REODFGOTc4OTY3REVCNDJGMEU3NTE2RTE2MzAKKzoxMDAxNzAwMDJEQjdFN0Q1MzlFMTMyRjNBQTA2Q0ZEMUNFNUVBNEREQTMKKzoxMDAxODAwMEE3RDNCRDg5REQ3ODExNERENzhFNjQ5QzU5RjIyM0NENUMKKzoxMDAxOTAwMEYzODFBNjNGRUQzQzE3QTgwNEY5RkQ3OTUxNzFERUMyNDkKKzoxMDAxQTAwMDE5MEZCRTVFNEU2QTI1MTJFNkEzQTZCQzM1RjA5QzkyREUKKzoxMDAxQjAwMDkzQThDMkEzRUFENzJCQzk3QTdDQUY4QzlGRDU4Qzc4NDEKKzoxMDAxQzAwMDU4RENGQUVEMThDNkVGQjREQ0NDNzFFOUM1NDI3RjlGNkMKKzoxMDAxRDAwMDFCRTRGMThFNTc1Q0U5NjI4QzYzMkZDREE5M0QzNzM4NjMKKzoxMDAxRTAwMDJENDNGREQ2RUY1MjdGNzM0NkI4OEZGRUIyMjBBN0JGRDYKKzoxMDAxRjAwMDNCODQzRTc3N0VCRjU4OENGM0U1MTUzMkRENkZFMTYzQkIKKzoxMDAyMDAwMEExOTQ1NDgyRkJDNkREMzNFOTNDREVDQTlEQjE0Q0U3QzQKKzoxMDAyMTAwMERFOUUwQTI3MTYwNDJENzEwNzVGMTkzRjdGQ0Q1OEVGMjgKKzoxMDAyMjAwMEQ5ODhBRjhEN0ZCQkIzRjc3RTQwNjVDRURGODIyNDQ3OTAKKzoxMDAyMzAwMDczMTRERUFGQTVGRDY1OTlEQUVGRkZGODc5M0FCN0JDMjQKKzoxMDAyNDAwMDFGQ0ZBOUEwOURDQ0VFOTg4N0ZFRENENkMxMzI0QjRBQzkKKzoxMDAyNTAwMDE4MUZDQzE2RTU2NDJCRkYzRTU4QUU5QTU3ODM2NUE0NTEKKzoxMDAyNjAwMDQxMjBCMjk3ODI3MzNCOTE1RUI2NEE0QzEwRTMzQzVFRUMKKzoxMDAyNzAwMERGQzVFQkZGNDI3QzlGNzNFMTVCM0ZCRTA1RTVGRDc0OEMKKzoxMDAyODAwMDM3Rjk4MTVCODUzRDYyQzJGNzcyOTBFN0NEQkMzQzA2RDEKKzoxMDAyOTAwMDNFNUJDNUY3MjBFMjMzRjI5OUYwRDk5QTA5MUYyRkU3QTgKKzoxMDAyQTAwMDE4MzdFMEJBRkIzMDkzMDI0MEYwRkRDREJCMDZGMzg4NkYKKzoxMDAyQjAwMDdGRDBDNjYyNTdDMTFDRUU4OEVERkRFOTJEOENEQTI3OTAKKzoxMDAyQzAwMEFERjQ2MUI2QkYyOEM3NTgxQjI0Nzg4RUQyRkM0MjY1QjYKKzoxMDAyRDAwMDQxNzQ2RkQ4QzYxOThDRkFDOTAwQzdDNjRDRkQ5OEVCOUIKKzoxMDAyRTAwMDdBMzA4QkNCQjEwRkQxNzY5RTg2RUJDQUVEM0ZDNUQzNkEKKzoxMDAyRjAwMDE3QzVGRDdGQURGQTdCRDc2OTIwNDczQTRCQkE5QjMyRDEKKzoxMDAzMDAwMEQxRjdGNzQzN0M5RjNBN0I4NDc4RjVDRjA1M0RCRUE0QjcKKzoxMDAzMTAwMEM1N0Y4MDcwQjQ2QkI3RDJGREFBNkU4OURCMEQxQjY3RjkKKzoxMDAzMjAwMEY2MzNDOUQyRUVCNzIxOEU2RjgwQkIwN0VCQkJDRkU2QTkKKzoxMDAzMzAwMEY3OUU4NjAwRUY5ODYwMTZBQUU2RjA2RkQ0OEYzMENDNTcKKzoxMDAzNDAwMEVCMEU0NThGNTA1RTY4QThCQTlGRjg5RDhFMkExNDcwRjgKKzoxMDAzNTAwMEJBNDI3RkNEMkJFQ0IzOUYwN0JGMzIwRkVGREJDODUxMDIKKzoxMDAzNjAwMDRDQkE3QkFCMTNFOTQ2MTkyQTEzMURGNUU0RjBGNkJGMkUKKzoxMDAzNzAwMDBGQkRENTk5MDQ5MUJCMEJFQzE3QkM4NzIzNTlDMEYzNzMKKzoxMDAzODAwMDQ2OUNGM0ZCQTU4MDc3NDdEOEQ4OEJFQjMyMEM5RjlFMTkKKzoxMDAzOTAwMEZFMUZERjAyRURCNzRFRTRFNzZERTZDODdENEQ1NzIyNDQKKzoxMDAzQTAwMDVENUUxODI0RkIwQkRFMzc1OUVGQkY3OTVERTBFQkY1OUUKKzoxMDAzQjAwMDIwQjc5RkI2N0VFQ0E1RUZDRUY1MTg4OTVFN0YyN0RBRDEKKzoxMDAzQzAwMDdGMEU3QUZENUQyNjNBMDE3QTdEMDZFNzY1QTFEN0Y3QjMKKzoxMDAzRDAwMDU5NjY3QTdEN0UwNDdBN0QyMTEzNUU5QzY1ODUxOTNCODIKKzoxMDAzRTAwMDcwN0Y1NkZENjRERTZFRUM0RkJENjhGNjhFRkJFMUE5QjIKKzoxMDAzRjAwMDdDNzI1MzkyNTYzMzI2RDlDRTk3OUFFMzU0NEE4OTNGNUEKKzoxMDA0MDAwMDA3MkRGMkREQkM5RkZCOUI0MURFRkZCMDdFNjc0Q0RGMUEKKzoxMDA0MTAwMDgxNzJFQzI0RkExREMwRjkzOEZCREQxRkU0RjBDRUI5N0YKKzoxMDA0MjAwMDMwOThDODc0NkZEMUNFMTBDRjFCQkY1QkNDNkIyNEJFOEQKKzoxMDA0MzAwMDc5MkFDNEZERDk5MUY4RTY4MUQwMjBERkIwNTBERUQ4MEEKKzoxMDA0NDAwMDdDRjNBQUE4MEZFQkUwQzVGQTYzRjNDRDZERjRGNDk1NDUKKzoxMDA0NTAwMDcxQkVBMTYzQzhCMzg2RjMwRDRCQkU0ODdDRDI1OUMyQUUKKzoxMDA0NjAwMEY5MjI3RkVCOUYzQjMxQ0UzMUM4NDdDOTBGRUM3Qzk0MUEKKzoxMDA0NzAwMEZDQzBDNjQ3N0ZEOUZBMDFENTc3QjYwRjhGNzA0Rjk1NkMKKzoxMDA0ODAwMDNFQzhGRkYxMDkzODBGRTM0Q0FEOUQ5RkIzRTkyN0JEOEUKKzoxMDA0OTAwMEREQzMwNjBFNzgyOENGOTZFN0I1RkE5MzQ5ODM5QjBEMDYKKzoxMDA0QTAwMDdEMENFRjNEMkMxNzc4RDg4NTNFMThGQTM5RDM0NTlDNDIKKzoxMDA0QjAwMDQ5RUQ2MzBCNDNDM0Y5Mzk1NDlEQUVCNkRFMjNGMDZCQUYKKzoxMDA0QzAwMDMxRkU0N0ExRjhENEQwMzQxQ0FGRkY3NEI0QkY0NjVBRjQKKzoxMDA0RDAwMEE3NkE1MTdGNUJCNjUxMURDQTQwRDc2M0U5QTFDQjQzRTAKKzoxMDA0RTAwMEZDQkNFQkU1MDJFRTlDQkY3OTVCRDBGRTc0RjJGQjlDOUEKKzoxMDA0RjAwMDk1QkZGQUVCQkRBM0Y0NzM5OTY4QkYyMEY0QjlGOTdGRjcKKzoxMDA1MDAwMDQxMjgzM0ZGNUYxQ0IyRjM3RjM1REVCRjk5ODFGRjJGOTcKKzoxMDA1MTAwMENCRDQxRUY4RkZDQkExMENGQ0ZGMDVGOEZEQ0E1MDA2OUEKKzoxMDA1MjAwMDdFOUYxREUyRkQ4Rjg1RUY3QjA1QkVFRkZEODJGODZFOUQKKzoxMDA1MzAwMDE3RUQ2RjBBN0Q2RUZCRTBBNjUwNjZGQkUwM0JBMTY5RkMKKzoxMDA1NDAwMDI3ODVFRkY2MTFGMEREMTEyMjc4MUUyNEY4NDM3QTkwMEEKKzoxMDA1NTAwMEUyRDg1RDMzRDg1RUE5MzQyMzFDNUJBREZENzg3NURFMkYKKzoxMDA1NjAwMDBGRTBGRDdEMDlFODdFQ0UyNzVEQjE0Q0Y3Q0U0MEJCQTQKKzoxMDA1NzAwMERCQUNGMDlCRURBQTQzOUE5OUJDN0QyREZBRTc3NzVDNDIKKzoxMDA1ODAwMDE0QTQ3ODNGRThDNzFERkY2NDNBQjgzQjk0NDEzRUNGQkUKKzoxMDA1OTAwMDkxQjkxQ0ZBMjBGODIwRDk4MTVGQTBGRkRFNENGRDJGMTUKKzoxMDA1QTAwMDEzNzQzNjk2NURGMDk4QTAwRjk4RjdCRjg1QTYwRDk3NDcKKzoxMDA1QjAwMDdGM0RFMjc3NTI3Njg0MTNGQjQzODRBRkZFRjkyOEFGODgKKzoxMDA1QzAwMDc2REQ5ODIzNjEzQ0FBQzg0ODRCRTgyN0VDMTVGQTY2MEIKKzoxMDA1RDAwMDcyNDhFN0U3MTk0NEJCNUQ2QTVBQzI3Qzk2NUQyRDlBNjIKKzoxMDA1RTAwMDg0RTc4RDJDRkQxRDBFNEQxQkI5M0YyNzFDMDBERjZGQ0UKKzoxMDA1RjAwMDQyMjRFRjhDQTdCMTVERjU5MDFERjg5OUVDQTQ0QkIyQTUKKzoxMDA2MDAwMDhEMjMyMUQyM0ZGMUU3NDk2RTlGNjY5N0RCRTYzQ0U0RkMKKzoxMDA2MTAwMDc4MzdFNUJERjg2NjY2RkUxRDk3QkQ0MUQ1OTRGRjdGMkUKKzoxMDA2MjAwMEIyQ0FGRjE3NDI5QUY5QkI1MkQ0REY2N0Q1M0YwMERGNDkKKzoxMDA2MzAwMDFCMDJCRTM3MzNDMUU3QzRDQjU4NzA4RTE3N0ExRUZBM0YKKzoxMDA2NDAwMDdCM0Y5MzlFNzJGNjY3RkFBREU2M0FCOTUxMjc1OUUyQkQKKzoxMDA2NTAwMDNBNTI3OEQwRUU2NTYxOTRERjFEMzI5RDQzNUEyMEU0MTIKKzoxMDA2NjAwMEM5ODI5OUQ5QzI2RUQ3RkNEOEZGMUQyMjRFN0VDN0YyMkYKKzoxMDA2NzAwMDVCNkI3MEJGQkJFNzI2QUQxMjUxNTBEMENDRjU5RUJFNzAKKzoxMDA2ODAwMEZDMTQ4QTdGMDY0NEJGNEVGODA3REJCQjdCNEZDNzdCNTkKKzoxMDA2OTAwMEM3NjFEQzJDMUNGN0JDRDkyQzhEN0U2MzE2REEwRDE0RDcKKzoxMDA2QTAwMDhGRDBFODc3QkM3MjNDREQ1MThDOUY2RTk0QkE5Qjk2REMKKzoxMDA2QjAwMEEyNUU5RDFGRTRFNzRBQTI4QkM2QjhCRjZEOUQ4RDZFRkEKKzoxMDA2QzAwMDU5QjQ3QThDRkE2QkE5QkUxNkU4QTZGQjJGNEVCQUJFQjcKKzoxMDA2RDAwMEE3QkIyOTUzN0U0OTJDMkM5Qjc2RDE5OUEzRTIzNTFBQ0UKKzoxMDA2RTAwMEExQjg5Njg5REZFMUUzRjBGNUFCODlCNzQ4ODhFRjUwMTAKKzoxMDA2RjAwMEI1QTRFMUQxQUIxMEQwMDlEQTRCNzI1OTFGRTUzMzdEQjcKKzoxMDA3MDAwMEE5OUFEMzBCMDNCRjY0RjRGQjMzM0FDREY1OUUxM0NFMDUKKzoxMDA3MTAwMEZCRTI3MDk5RjU0NjFFNEZENDczOUM1N0MwN0QyRjhBMUIKKzoxMDA3MjAwMENGMDZCOTFDQTM4QTUwN0VGNzcwNkVDNkI4QkZGOURDM0QKKzoxMDA3MzAwMEQwQTYxNUE5MkU2QkZGMjlCRTNGMzM5ODNGMUQ4QkEyNzMKKzoxMDA3NDAwMEJERDVDQTM4M0RCMkE4OTdFQzMwQkFBN0REQjI5RTRCRjIKKzoxMDA3NTAwMEMzREM3RkZDNDE1NkZDQUI2MUUyRUYxOERENEJDODM0RDMKKzoxMDA3NjAwMEVEQTRFNjAzRURBRUEyNzYyQUI0MEI5RDdDQkI5MTlGNkYKKzoxMDA3NzAwMEU2RUZEN0M1RjRCOEU1MUUzNDkzNUZDNzI3OTIwQ0VGQjgKKzoxMDA3ODAwMDk5RjE1NzMwNEQ4MkY1OEY4NENDN0Q0MjRFMDdCNzA1RTUKKzoxMDA3OTAwMENENzI5MjM2QzlFMzY1REQzQzJGNUYzN0U5ODRDQjE1MTYKKzoxMDA3QTAwMDJERDA2QkM4OTU4QzZEQkY3OUZFMDVEMUQzQTFCRkIyOUEKKzoxMDA3QjAwMDQ0MTRBRkQ0ODdGMjEzNzg4RjVBOEVDMkNCQzA2ODRGREYKKzoxMDA3QzAwMDFDMjI3REExOUQyMUM1NDA0RkI1Q0Y3REUyNzAzMUUzNTQKKzoxMDA3RDAwMDQ3QTVFOEY3RDVFNjNFODFGOTg0M0Q2NjE5MkZBNDI4QTAKKzoxMDA3RTAwMDg3QjI3RkIwNkM3OEEzNTAyRTFEMkMyN0IxQkM0QkU4OEMKKzoxMDA3RjAwMEM5RUQzN0NGN0RBMjNENDg3MkVDNjYyQjdGRDQwODNBMTUKKzoxMDA4MDAwMEZDNjdEMzVGOEZERUFFRTEzOTgzNjQ1NDI1QkI2QUEzRjYKKzoxMDA4MTAwMDgzMUU3RTE1NzYxM0ZFQTc2QTg5MTRGMkM1ODI5QjA2OTUKKzoxMDA4MjAwMDU0M0NCQUUyMkQ4OTg0OTAxRjI2NDRERjRGRTJGRDc5QzMKKzoxMDA4MzAwMDEzNjY4QjM0RDUzMjdFNEY0MzRGNzQwREYxNjUwRkFFODYKKzoxMDA4NDAwMDBCRTM2OTA5MTg5RjFDNUE5RjU0RTZGNTI5NEZEMUZBMEEKKzoxMDA4NTAwMEY4NzVGRTVEQzYzMkY5REIzQ0ZFMTYyOEU3RkNBQzc5ODQKKzoxMDA4NjAwMDc4N0NFRjIxNDFBRjA3QzMzQzdFNzQ1MEM4RDdBQzY4OTkKKzoxMDA4NzAwMDNCRjk1M0RFN0E5OUUyQzc1OUY1QjI0RDZGRDAyRkUwQkMKKzoxMDA4ODAwMDUxN0RENTQ2NkYyRkU3MjRGNjg3MkQ3QTAxOTYyRjVFOEUKKzoxMDA4OTAwMDBFRjNGMDlGMUVDOUMxRkQ5NzlBNzI3NTBERkFEQjNGRUEKKzoxMDA4QTAwMDEyRjYxRkFDRDMwRjQ5NUU1NDQ2RkMwOTkyREJGMUM3MjgKKzoxMDA4QjAwMDMzQUU5QkMwQ0I1OEVCRjY3QzVCMjI1NkU3MUE3OURENTIKKzoxMDA4QzAwMDJFQkI5Q0U3RDMzQkRGQkYyOEU0RUFCMUE2M0Y3RjBGRjYKKzoxMDA4RDAwMEQ5NjU4NTc3ODBFRUYzRUUyQTVCNEI3MTU4MzNFRUVBRUIKKzoxMDA4RTAwMEQ5NUI5MzJFRDQ4N0YyMDFENzA1QzJCM0U5NUM4QTYzNDIKKzoxMDA4RjAwMERDRTczRkZEQkU0NkU3NDQzRUY2NjREQzRGRkE4N0MwQzYKKzoxMDA5MDAwMEYzOTFCNjI2NkEwNzBCNENCRkJGNzIwNTRFODVFN0IxNUYKKzoxMDA5MTAwMEQ5Q0VGMTk5RTcxMUJFQzYzODMxMkM4QTJGRjkxMkNBMDcKKzoxMDA5MjAwMEExQTU0RDBBREREQjcwMDVCM0U3NTM3Q0NEQ0NGQjZBOTYKKzoxMDA5MzAwMDM1RjNFMzc4REU1NzgyNjVDRjQzMzY1QzkyNzRGQzdFRjQKKzoxMDA5NDAwMDA0OEJDREMzNzNGNEMzN0U1NzQyRUM2RjdEREQ5MTM3Q0EKKzoxMDA5NTAwMEYxRTVBNjI1QjEzQTUxRUYzREZBN0Y4QUYwQjc0OEU3QjUKKzoxMDA5NjAwMEYyNzc1MThDREZERjczNjlGQ0YyNTg5RDY1M0ZGQTg1QTEKKzoxMDA5NzAwMEJGMkIxOUYzMjYyRkNBMzJGMTExOEZENTREMUM4RThGNDQKKzoxMDA5ODAwMEE1NzFDOUFERTk2M0UzRTU2NEYxQjA0NEFEOUM5N0E3RjcKKzoxMDA5OTAwMDBGQzc4MzczRkU4MEIxQUQ4OEU3QUYwMzlFRDFFRTFDMTUKKzoxMDA5QTAwMDA5MUY1MDhGRDZFMzg1Q0IxNUZBM0Q5OTc5NEE4MzBCMDEKKzoxMDA5QjAwMEY3NDFBRTZDOTQ2ODhGMDlGMDFCMTY3OTcxMEQ3MzJEOTkKKzoxMDA5QzAwMEYwM0FGMUU4QzRENzk1OEYzMjNBMzc3MEU1RUQyMThBRDUKKzoxMDA5RDAwMEI3M0Q2N0UyMjc3RDFFRUQ1Rjk4RkIyNzk2NzkxRUU1MDAKKzoxMDA5RTAwMEY5NUIxQUNENzNFMUNDQ0FDN0YxREU4NDQ0M0I0ODVCQTYKKzoxMDA5RjAwMDNFNUZEQjNFRTA1MjE2Q0ZDMjczMEIzMEVGQTMyM0FDNTkKKzoxMDBBMDAwMEJCNkQzRkQwMDk5RjEzN0U5RkQwMkJDRTdEMzFBNkE2MTQKKzoxMDBBMTAwMDJCNTAwRjFBNTk2MjVGNzAwQThCODlGREIxMkM0QUM3OUYKKzoxMDBBMjAwMDJEQ0IyQzZGOURGN0NEOTk3NDc2NDU2QkUzRTBCOEQ4NEMKKzoxMDBBMzAwMEJGQzQxMjgzNjUwRENGNkIzREE5NkNCRDE0RkVCRTNBRDkKKzoxMDBBNDAwMENBN0ZENzMwN0U3OTZFMDc3RTVCQzBDQ0RGMUIzMjY4RjEKKzoxMDBBNTAwMEJGRTkwQTgxQkY0NkYwRjhGMEI3RDBDRTAzRTE4NEZCQ0UKKzoxMDBBNjAwMDdBMEIwQzlGMUVCNENDRjNERDZFQTk1RTlDQTNDQTVBMTAKKzoxMDBBNzAwMDM0MTlEQjI1MEYyODUzODZDM0JCM0FDQTdGQkYxMEU4NjEKKzoxMDBBODAwMEYwN0QyQjFERkEyNkYyN0I2NTlENzgzMUYxNzU2NTk2MTgKKzoxMDBBOTAwMEQ4Mzc5Q0MyQTY3QzE2QkNCQzg0OEE3MzFBRURENzkwNEEKKzoxMDBBQTAwMDlEM0IyMDc5RTkzQ0JDQjk4RjAzN0Y0REJBNDE3NEI2QjgKKzoxMDBBQjAwMDY2OTUwODNCODBDRkRCQkNCRjhCQjExNkIyRUYxNzhCQkUKKzoxMDBBQzAwMEYzNThBRkI4NThEMzAzNDFCRUFGNTM2NTkxNUIzN0U0RDkKKzoxMDBBRDAwMEQ0QjQ2NjU5RUM2RTczNUZDN0JDMkZDQUE0RTdBRjc5NzQKKzoxMDBBRTAwMDgzNjk4NUQzQTFFRDNFQThBMTNDQTYwNEU1MzEyOTU5MkYKKzoxMDBBRjAwMENCNzVDNDQ3MTc3RTNBOUJFQzlFRjVEOEJGMTJFMEZCM0UKKzoxMDBCMDAwMDU1QkUyNzFGRUFCQTU0MUY1QUJGNEQ1NzNEREMzRDBENTUKKzoxMDBCMTAwMENBRkVBRkZGM0U0OTlERUEzOTg0Qjc5MDU4QjcxQUIxNzMKKzoxMDBCMjAwMDZFMjY3Q0ZFMEFGRURFQjI3RTNDN0U1NjJFRTI2NzYyQjgKKzoxMDBCMzAwMDFENDdEMjEzRTYzQTlBRUI4Njc2MTREMkFGQUY1Q0ZEMkUKKzoxMDBCNDAwMDI0RDNFRkYwQjE0M0Q1MDNDOEE3ODlBODRBMzk3NDA5NjMKKzoxMDBCNTAwMEU5QjUwRUJBNjc4QkU5QkI3MEZGRkQ4QTU2OTdFREY3RDIKKzoxMDBCNjAwMDk3MTI3ODRFMUZFQjZGRjQwOUJGMjQ0NkVEOTdFNkYzMUEKKzoxMDBCNzAwMEY2QUM5Q0RCOEQ4Mzc0OUY4NEY2OTYzQzIwRTYwRDhGNEIKKzoxMDBCODAwMEMzNzVFQjg3QjY5ODI3MDZGRDhENDM3RENGQkEyQ0UzNUUKKzoxMDBCOTAwMDk0MEUxRjc3QzRGRTFDRUQ5NEMxN0Q5MzU4MkM2NjkxNzIKKzoxMDBCQTAwMEQ3MEY2NTcxM0RGOTZFQjRCQTU3Q0UxMDdGMzE5RjRCQTgKKzoxMDBCQjAwMEJEQjk0NUFBMjUzRkVDNjhCRUI3MjlEM0JEQTQ2NjdGNjEKKzoxMDBCQzAwMDgzRjdDNjBEREE4OTZGM0Y3MUE4NjhDODRFRENFQzdBRUUKKzoxMDBCRDAwMEMzNkUyN0IyMzdCRTkwOURGODcyRDYxQjRGQjQwMzNDNEMKKzoxMDBCRTAwMDFGRkVEMTQzRkFFQUREN0EzRkFENDM2RUVCRjlFQ0JGNkQKKzoxMDBCRjAwMEYwQkNBRDhBQkZFRDQ3RjYzREREN0JFMzZEMkRBNEY5N0EKKzoxMDBDMDAwMDQ4MkE2MDBFN0YxRjRDOEY0OTg4RUZEN0YwOTI1RThDODgKKzoxMDBDMTAwMERGRTkyQzFEMDJFMDcyRDU5ODg0RjhCQTU1RjhBMzQwOUMKKzoxMDBDMjAwMDY3QTc1QkVGNjc3RDJEOEJEQjVCRTYzODFFMkY0QkUyMDIKKzoxMDBDMzAwMDM5NjNCMzVGQTA4M0I1OTQ1N0RBQzA0ODhGOThGQkIwOEYKKzoxMDBDNDAwMDI2M0Y5QkZEMEM2NEQ5RkRFMDkzRTBERjgxNENGQ0ZCNkIKKzoxMDBDNTAwMEI0RENGMkE3RUZBMEZERkE5NDQyRjlBMDVGOERERTQwNkMKKzoxMDBDNjAwMEVGMkY2QkJEOTI5RTk3Qjc1RTQzQ0Y0RkM0NzhERjkyNTQKKzoxMDBDNzAwMDEyOUY2NEMxN0FGNTM1RkRGRUFCRDcwM0JEQUVEQUVCNEEKKzoxMDBDODAwMEExNzM2NTJCQkVGNUQ3OUI5MTNGQkRBREIwRUVEOEVFRkQKKzoxMDBDOTAwMEVCNTdERTNFMERCRUJCMjdDQTY0QkY3NjE1RjM3QzBFNTQKKzoxMDBDQTAwMEY3NUE4OUM3RkI3NTc3M0RDNjUwRkUzRjM3OEI5QUE4MjgKKzoxMDBDQjAwMDAwODAwMDAwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwMDIKKzoxMDBDQzAwMDAwMEJFNTdEMDk3QzU0RDVCOUY4Qjk3M0VGMkM0OTY2NjIKKzoxMDBDRDAwMDI2OTMzRDIxMEIzNzg0MjU0OEMwNDkyMDIxMjhENjA5NzkKKzoxMDBDRTAwMDVCNjMyNTEwQzQwNTI1QzA4NDQwMDgxMDkyODA1Njg3OTgKKzoxMDBDRjAwMDRBNjU0MjAwQTM0NjhENzVDM0E1QkM4MTYyQUJBREZBQkYKKzoxMDBEMDAwMDgyNTJBNTZEQTQxMzcxMDFBNTE4QUJCNUI4MjA0MTc4MjYKKzoxMDBEMTAwMDRBREQxMjQxMUVBM0Q1RkFDRUY3OUQ3MzkyN0I2RjY2MTIKKzoxMDBEMjAwMDQyNjg3REJGN0ZGRkJGMTc3RkVEQzdCOUU3RENCMzdDQUIKKzoxMDBEMzAwMEZCRjlDRTc3RUVBQzcwOTZFNEJBMEEwOUY5MEVGRTJFRjYKKzoxMDBENDAwMDI2NjQ4NTczMUE5NjQ5QUFEMzQ0OEEwODU5NjNBM0ZGNzcKKzoxMDBENTAwMDU2MDkzOTczRjhFNkQ0QzU4OTg0NDREQkVENkVGQTg0MEMKKzoxMDBENjAwMDU4MUFCM0VGMzREMTMyRDkyRjkzNDcyODkwNjNDOEEyRDEKKzoxMDBENzAwMEYyM0MwQUFEMEMwRTcxMjk4NDI0MDEzNDIxOEMwNzQ4MDEKKzoxMDBEODAwMEZCQjU4NTI0NDIxMkEwOUREQkRENjBBNzY1QzU0RjVDRTUKKzoxMDBEOTAwMDAwNDMwQTNFQjc0ODUyNzk1QjVFREY3QzA0MTRGREQ5RkMKKzoxMDBEQTAwMDQyMzIyMUUzNjEzQ0UzRkIxNjdDN0U4QjZBMjk4NUY3QTYKKzoxMDBEQjAwMEU1MDQzNjBGRjE3RTBFN0YzRjg3Q0ZDNzE2OEE2MUYzQjkKKzoxMDBEQzAwMDQ4MzBGNkUzNjRDRjY1RDJEMDY2RUYzRjhGRjVCMTUzN0MKKzoxMDBERDAwMDQ3Qjk5MjAwNEY5RTVDODA4NDc0OTlDQjFEODQyQ0I0REIKKzoxMDBERTAwMEJGNzI0ODFBNDdBMUNEMUU5NDI5MjQzRUYzQTc1REI5Q0UKKzoxMDBERjAwMDA0RkZCRTFCMDZGRjVGRTFGQTcwMEMyMTEyRTk5MkJFRjAKKzoxMDBFMDAwMEEzNDNDRkZBNDYwQTBFQTVGODhCMkE5MTAzMUJCMjI5RjkKKzoxMDBFMTAwMDk0NUM2NTEzMjZEMDY2MjU2NjM3RTBCMzczNzhBMjYzQzkKKzoxMDBFMjAwMDk4NjZGQzBCNUMxMkUyRUY3NUM1RTU4MDc5OTY0Rjk3RUEKKzoxMDBFMzAwMENCMDM3OUQ4N0REMkU1RDBDRkY0QUFBMjVCRDk3MDM2QTYKKzoxMDBFNDAwMDkyNENDODIyRjY2RkYyQkFCQUEzNzkxOEFERjdGQkNENkYKKzoxMDBFNTAwMEVFMTE5NDhFOEI2Q0ZFMDBDQzZGMTE1MUZDNUQzNjZDRTQKKzoxMDBFNjAwMDIyN0QyNzIxNTQ5NTIyRkUxRTlERUZBMjY5QjIyN0NBM0EKKzoxMDBFNzAwMEE5NkI0N0JFQTNGMzI0MUJDOTBCQzM2OUZGMEIyNTNFMTcKKzoxMDBFODAwMDgwOUY5NkU5N0JFRkYzRTI5MTY5QTdBRTgwNjU3NDExQ0MKKzoxMDBFOTAwMDk3NjUxODZEQkZCMEFCNzIyNjE5ODc1NTc2RTBBN0E1ODgKKzoxMDBFQTAwMEJDREQyMjlGRjk3ODZGQkZGNDdGOTU3RTdENzk3MTcxRUIKKzoxMDBFQjAwMEZFNEI5NDBDMTQyRjgxRDIwOUMwNjdBMzREQzg2NzU1MEYKKzoxMDBFQzAwMENERkE3NjRCREZCQkU0NkZDNDA5RkQyQUM3N0JGMTBENzkKKzoxMDBFRDAwMEYzMjQ3NzMxM0E0RjZGNzJBOTE0NEZFN0JCNTQyQ0NGRUMKKzoxMDBFRTAwMDlBNzY2QzFBQTFFNUQ5ODQ1QzAxRkRDRTlFMjZCQjgyNjAKKzoxMDBFRjAwMEI0NzU4QkNGNDQzQzc0RTIwNzNENzI0MEEyNkIzQjk4QzMKKzoxMDBGMDAwMERCQjVGRjYyQzA1QkIxNTk3RDA0RDY5QTRCNkU5RjlCRTcKKzoxMDBGMTAwMDA4RjVFMzVEODBFNzcyNzg5Njg2RUQwOTgxNzZBOUI2REIKKzoxMDBGMjAwMEMwMDhGQUFDRDM3M0NDNUVBNUUxQkI4M0M1Qzc0NjdCRDIKKzoxMDBGMzAwMDI5QkRCNjlBNDg0RDM4N0UyMkE0MTFFOUZBQzI0RkEyQzMKKzoxMDBGNDAwMEIxOUYyM0Y3NDgwMTJCOURGRjc0Rjk5QjNGNERBNEYzRkMKKzoxMDBGNTAwMEE5RkFBOUQ5NkQ1NTcxNTkyNkEwRUI0QzM3OTM0NzQyOTAKKzoxMDBGNjAwMDNDRjZFOTE0OUYwQjA5MkIxRjIzRTU0NTQxM0E3RTU1QkEKKzoxMDBGNzAwMEZFRTExMjJCRURBNzZBOTM4NDcyMkFGMDRGRjFGRDgxRjYKKzoxMDBGODAwMDE2NkZERTg2RjJEOEEwOEE3OEQ3M0RBNzlENTk4MDlGM0MKKzoxMDBGOTAwMDI5OUUzRjg4ODBFNzBGQjQ3OEY2QkRGN0Y2RDgxNzM0NUUKKzoxMDBGQTAwMEVENUE1QzhFNDRFMDczNTI0MDBBQkVBM0E4Mzk0RDI2MjgKKzoxMDBGQjAwMEM3OEUyN0ZERDcyREUwOTlGNTg3QzZCRTMwODI5MDdCN0UKKzoxMDBGQzAwMDg4RTc2RTJFNEY0QUY5NTg0QTI3ODU3OEMyRTk4MTUyNDAKKzoxMDBGRDAwMDI3OTM4M0U5RjJBNzQ4OUY5M0M1QjIwQUY4M0FFOEZCNDIKKzoxMDBGRTAwMEQ4NEUzOThDMUNGQzQ2MkUwNTNDMTMwRkVENkM1MkRGOUQKKzoxMDBGRjAwMDdCOEZCOTJDNDhGRkFEMTZFMjAxM0M2RjFENjIwQjM0QUMKKzoxMDEwMDAwMEQyQUUzQTdFNzI1RTRBMTdEMjQ3QkQ3RjMyRDBGMTE1MUEKKzoxMDEwMTAwMDMzNzk0NDhEM0M1Rjg3NEYyNkMzMjk2Mzk2RjkyNDg0MzYKKzoxMDEwMjAwMDgyN0U0MzdENTE0NDE5REZENzZFMjgwOTNGRkZERjgzNUQKKzoxMDEwMzAwMDFDRDM3OTI0QUQyMzI2OTU4RTFCRTcyNzlFNDAxOEJFMkUKKzoxMDEwNDAwMDEwRUQ1NkQ5N0E2NjI4MDREQjA3RTNFOEZDRUE1NDUzMkUKKzoxMDEwNTAwMDQwQTJFQkNEOTcxODNGREJDQzBEOUU3NERBNTQ2OTlGMEMKKzoxMDEwNjAwMEUzNEYyNzMwMEYxOUU3QTFEMkY5Mjk3NDdFRDlCRTE4QjIKKzoxMDEwNzAwMDJDMEZGMzI1MjBDQ0YxQzUyMTFDRUU0QkM3RkExMUJFNzUKKzoxMDEwODAwMDFDODQyMzdERDlGODdDOTQ2RjBDOTY3MzdERTMxMThFQkMKKzoxMDEwOTAwMEY2RTUyMzNDQ0Y3NzIxQzIzMUJFQTlEODJFQ0Y1NzgyQTcKKzoxMDEwQTAwMDcwQUNFRjUyN0MzRUNFMzcxN0UxRjlCRTM5MDhEREJFOTkKKzoxMDEwQjAwMEY5NTg5RkVGQUI0MjU4RTBBQkM0RTdFMzdEMkJCMTNDNUUKKzoxMDEwQzAwMEMxNzcyRDk2MEI3REFCMTExNkY5NkU0NDM4RDFENzg0QkMKKzoxMDEwRDAwMEIwRDhENzg4RUQyNkY5NkVDM0YyMDVCRUJCMTE1RUU4MjUKKzoxMDEwRTAwMEJCMEJFMTY0REY0MzU4MEYwQTA4RjAxMENERTVGMTM2ODEKKzoxMDEwRjAwMDc1ODk4QjRBMEE3MEI4MEE3QzFDNDlFRUJFRTJGNkE4RDQKKzoxMDExMDAwMEQyRTUzOTBBRjY0RUI0QjM5ODg4NTdEQjVFQjQzQkNEQ0UKKzoxMDExMTAwMDYxMUNEMDM1NEM3RjNENUMzRjdGRUVGRUUwQkU1MUE0QUMKKzoxMDExMjAwMDhGNkVDREE5OERFNTQ0RUVBMzk3NzU1NzQ5MzA5REZFOEUKKzoxMDExMzAwMEIzNkVGNzFDMDI3QTgxRTQyNkVBRjhCNEJGN0U2MEVCNTYKKzoxMDExNDAwMEVCRTJGQTZCQUJEMkU5OTE4MTdGMUI4OERCNEYxRjk1RjUKKzoxMDExNTAwMDRENzg1RDgyN0VCNkE5NEE2OTIwMENCRjhEOEUzM0UzM0YKKzoxMDExNjAwMDdCRTdCQkJDMjQ4RUNFMkYyNkZCRjgwQkEwNEY2NkZCODMKKzoxMDExNzAwMDVEN0Y5QTAyRkM5Mjk3RjhDQTE0REFERkQwOEQyNjE4QTgKKzoxMDExODAwMDgxQUExMjU3QzcxNEFBNzdENDY5MDRGNUUyMzYyQTcyRTUKKzoxMDExOTAwMEIwREU2REQxN0E3QjlBMURDN0VDMjgyMTZERkI4NkExNEMKKzoxMDExQTAwMDNDMEQyRjYwRjZBN0VCMTI5MDJGQ0I0Rjg2OTE1QkIzQ0YKKzoxMDExQjAwMDQxREU4MjkyNDJGQkYzQUYyMUU0MTE2MTMzQTBGREU2RjAKKzoxMDExQzAwMEM1QkY4NEZBQkVGRTJDNEM4RTlBQzlGMzM2M0E5MUVDMTgKKzoxMDExRDAwMDU2NzU0QTE0ODUzOTVCM0NDRjQ3RDE1NzQ2MDRCQzUzRkEKKzoxMDExRTAwMEEyNjk3OUQ0QTNGRUU3MDE4RTZFMEI0Qzg5QTE3MENDNjUKKzoxMDExRjAwMEVFRTBGM0Q0OUM5MkIxQzFBRTI5NzY1QTNFN0YxRkQ5NUUKKzoxMDEyMDAwMDBCNjhDREVGNTRBNzNBNjg3OUZDMjFDRjVFQ0EwNkE0REIKKzoxMDEyMTAwMEIwQ0IzQkQ1QTlDMjdDMDI0RDRFM0E5RkFERUYxMzc3QzAKKzoxMDEyMjAwMDIzMkQxNzdGREEyQUM3MTIwREZEMkRDNEJCNTM0MzE3OTgKKzoxMDEyMzAwMEM3ODRDRTY5MDlGNDlGMTlEN0I5RjI2NTc4NUZFOThBNDYKKzoxMDEyNDAwMDhBQ0JFQjRGOUY2REIwNkU1ODI3QjUyMzhGRDA3NTY1NTUKKzoxMDEyNTAwMDc4ODI5MjRCQzMyNzY1NzE5MkEwNDM3RTFDRDhBMTc1RkEKKzoxMDEyNjAwMDNEMEFBQzczREJDNjc4MDdEMjJGREE1NTAyNDNGNjRDNDEKKzoxMDEyNzAwMDI3QUVFRDJBRjBCMTgyNzhCMjZDMUE4NkYyMkVGODhFODMKKzoxMDEyODAwMEUyNzdGNDFDODcxNjZGOTJEMDZCMzU2RDc5OTFGMTVCMjQKKzoxMDEyOTAwMEY2NkY4NkRGRjczODNGNDdDMkFGMEQ3ODY1RDJEOUU1RTQKKzoxMDEyQTAwMDc4NjE1Q0FGMUM1RjAzNzg4REQ0QUUyOThFQzlBNzExMUQKKzoxMDEyQjAwMENGREI0QzY0MUZCNTU1NzQ1Q0NBQTc0Q0FFODg5RjM2MTMKKzoxMDEyQzAwMEJEODlGM0Y3RDlGMEVBRkIzN0MzRUIxNTcxMDNFMzk1NUEKKzoxMDEyRDAwMEE4ODlBODI3MjlCRjhFMjYzOTkxRjUwREY0MTdDRTdFNEYKKzoxMDEyRTAwMEREQ0VGOTREQTNFNzJDRTAyRjM2QkJBODlFQ0I4OUFDMTEKKzoxMDEyRjAwMEU3QUU4RTNCOEJGRUUyN0FDNkMyRjVCODE4RUY0MTNFRjAKKzoxMDEzMDAwMERFMkJDRUYyMkRBMEJGRUM5QjRDN0U5MEIzMTJFMjQwQzAKKzoxMDEzMTAwMEI5MjBBOTg5OUM0RjVDRDFDMDI3MzM2NTU3MDlFODFCQzgKKzoxMDEzMjAwMDMyOEFBMDFGMUQ5MzE3RjBDMzNFNjVBODVGMkQ5MEExQzAKKzoxMDEzMzAwMDE5Mjg2NUMwRTM5MERDQzBBREI0RUI2Q0VBNjcyODk0NzMKKzoxMDEzNDAwMEZFQjRBQjIwNDA5QkVBMzIyREE2RUI4RTE1RjJFNkFBNDYKKzoxMDEzNTAwMDRDRDVDQTlCQjBGNzdERjIyOEY4MjI3RURCQUREOThDNDQKKzoxMDEzNjAwMDVGRTc1MEZGRTU2RENFNkY3REZENDhEODZFRjNEQTIxNjMKKzoxMDEzNzAwMERCNkVENUU4QzE2REE5QTk1ODE2RUQyM0YxRUYxOUMxQUYKKzoxMDEzODAwMEJGMUIzNzEwMkZDOEM3RTRGMDdFQzMxQjcxMzJFN0RCRTkKKzoxMDEzOTAwMDFFMEZGMEI5RkYwN0M0MDVGRTRDRENDNjBGNTAzRkM1NTkKKzoxMDEzQTAwMDUxRkQyNEExN0U2MkUzNjdGOEEyN0ZFOUE3RTUzRkM3NkMKKzoxMDEzQjAwMDI1NzM3REVFOEFCRUQyRjFGRjhFOUY3RjQ1MTEwQkYzMjAKKzoxMDEzQzAwMDE4M0FEOUQ1MjFEM0ZBQTFENDBFQTkyMEE3OTNFOURDRTQKKzoxMDEzRDAwMDI3MDBCRTJDNDg3Nzk1MzAzQUFBOTM0OTAwRkM1RThBRDQKKzoxMDEzRTAwMEI3QTAwOUY0QUZDOTExMDAzQjYzQjFCNDdBNDA5RTg5M0MKKzoxMDEzRjAwMDI1MEVEN0ZGOEFEMzdCMzQ2RTAwQjk3MEM1QThGOTQwOUIKKzoxMDE0MDAwMEQ0OTM3MTVGOTVEQTI5RkY2RENFNzY0NTQzQjk5Qjk2RUIKKzoxMDE0MTAwMDVCNTJFOUI4RjE1RDg0OTc5QkVEMjgzRkY0NkYwODUyNjkKKzoxMDE0MjAwMDMxNDhGNzA2NjAxRjQ1RDk2MzgzRjZDMzdBQ0I3RTI4MUYKKzoxMDE0MzAwMDZGMDU5RkU0MDJEQUZGNUQ2N0Y2NkRBNDg4OTkxQkU3RUMKKzoxMDE0NDAwMEU5ODk2MzdDN0QxMkY4REEzMzhBNkU1MDczRkFGOEY5MTEKKzoxMDE0NTAwMDZDRkU4MDkwQ0YzRTc5NzJFNTBCNzlBQUNDNDM3REY4ODMKKzoxMDE0NjAwMDBERjQyRkZBOEJFNERGM0NDM0Y1QTcyMzdFNjBGRjQ2MjMKKzoxMDE0NzAwMEYwRkQzOUZCMzc3Q0JFN0YwN0Y5MkY4QzJDRkY1MUZCMjkKKzoxMDE0ODAwMERGRDhCMjgzOTZEN0E0Q0FFQTcxRUFERjM5ODZCQ0Q1MjEKKzoxMDE0OTAwMEE5RDBCMjhERkE5QkM3NjhEOTY0RUI1NEEwNUQxOTk1QTkKKzoxMDE0QTAwMDUwM0JDNUI3ODczQTc5QjBGRkIwNEQ2MDY1Rjg4M0ZEMTIKKzoxMDE0QjAwMEM3Qzk1NkE5OTRFOTZCMzVGNkYyQjEwM0UxMzE4MEYzNUYKKzoxMDE0QzAwMDU5OTM2QUMxRjFBMjQ2MEM4RjA1Qjk3MjcyQkUyMjhBODUKKzoxMDE0RDAwMDE0MDAzQkVFMkM3NjI5OEJCMUJGMkU3MjE5RURFRjNDMzgKKzoxMDE0RTAwMDhFMjcyMUQ3QTBCNzlFQ0EwM0JEMTRBRkMwN0VERDZBODgKKzoxMDE0RjAwMDIzN0U0NzdDNUZGRjUwOEUyREU4RDM0Rjg0RUZFM0FFMTEKKzoxMDE1MDAwMEU1N0JBNkQ2MERFRUQ4RTEyMEE3MDc1OTFDQTVGNTI2NDgKKzoxMDE1MTAwMDI2OTc2NTE5MjRCMDAxRjQ4NDg3QTgyRURBM0U4QTg4QkMKKzoxMDE1MjAwMDNGMkFCOEI0NkNFNkE1OTk1RjRCQzQ0M0U3N0ZFMDZCRjQKKzoxMDE1MzAwMDE5QTEzNDlDMDQxRDc0QkY1N0U2OTY4MkIwMEZCNDk4NkQKKzoxMDE1NDAwMDZDMDFCMEE1MjU0MzZDQzQwMjY1QTcyOTYwMDVGOUY4QjQKKzoxMDE1NTAwMDQwQzI3NTVBMEE2MjAyQTBGQ0E2MEQyOThFRURBMkVCQ0MKKzoxMDE1NjAwMDM4NzU2MEFGREQxQjg2RkU1Nzc5MkJEREQzQzY0N0M2QzUKKzoxMDE1NzAwMDYzNkZCQjA1MkZCQTAwOEYwRkE5MUI1REUwNDdGQTUzQkQKKzoxMDE1ODAwMDE1OEMzQkRDMDI0RDM1N0FGREVBNzg2NjM3QTkzRjM0OEQKKzoxMDE1OTAwMDM3OUVDMjU5NEI3QTM2NUE4MERFRDk4OUU4MEY5MUUxREQKKzoxMDE1QTAwMEYxQzhCNzY5QTlCQjZFMjkwMTkzNTVDQkZDRDMyMTI0OUYKKzoxMDE1QjAwMEQwQThGNUFCMDQ3RkJEMUJFRjVEMTA0RkUxNDNEQzhFN0YKKzoxMDE1QzAwMDUwQjFFQzFDMDlGMUFBRDE4OUYxRTA5Nzk2RDQwRjY5Q0EKKzoxMDE1RDAwMDA3N0ZGNzgxRjVDNEJEQzQ4Q0ZBQTAxQ0RBN0IxMkRBNTAKKzoxMDE1RTAwMEYyODE3RjFGNzJFRjdBRUM0RUMwQTc5NUVFOEI0MThGOTAKKzoxMDE1RjAwMDhGM0Y2QzU3MjlCRDJBMEFGNzI2QzE3QUZFNjQ5OEJGMkYKKzoxMDE2MDAwMDgwMTVCRTlCMTAyRkM2N0RGMEFBNzhCQTBGMDY4NTM4Q0MKKzoxMDE2MTAwMDhFOEM4MzdERjAyOUY3RENEODIwRjI1NjQyNThGOUFFNDMKKzoxMDE2MjAwMEYwREQ4OEZEODhGREYwN0JFNjYwQTYyQkFDMUNFQUYxQkUKKzoxMDE2MzAwMDJEQzZBRjkwRDhCRTk2OTgyNUE2RkZCODFEQTVGQTY1MTEKKzoxMDE2NDAwMDNERTA5N0JFODY3NkQzNjM5NUI2ODNCRDM5RTUxRUVGNDAKKzoxMDE2NTAwMDA2QkIxRDQ5REY4OEY5NTAzQzhFMjg3Nzg0QTk5NzQ4M0UKKzoxMDE2NjAwMDc5MzgzREYxNDAzQ0IzRDcxNTY2QkE1RkEwRjVEMkVBQjAKKzoxMDE2NzAwMEMyMDY5ODU3ODVDMzJFMDFERjg5NzY5QkUyOTkzRDEzRjgKKzoxMDE2ODAwMEZDMkNFMjU1NzJFQzM3ODU0MDdGODgwRjg2NUJGRjIyODkKKzoxMDE2OTAwMEEyN0NBOThENDc2RDAyNTk0QjYyRjg3Mjg3RjE1NzIyREYKKzoxMDE2QTAwMEUxRUI5MEI5QjUwQ0U2NzU2OEE5NEMxQTY5M0ZBN0JDODcKKzoxMDE2QjAwMDEzNTM0ODk4RjcwNTdDMDdGODg2RDJBNTNFODE4REQ3NEQKKzoxMDE2QzAwMDRCQ0ZFMUUxRjE3NzY4N0Q4RDdCOUFCOThGOUVGREVBODIKKzoxMDE2RDAwMDJCQTNFNjgxRkQ5RTA3NzhENDhDRkIwQUM3REYzMTgxRkUKKzoxMDE2RTAwMDFGQUI1Nzc1RDE3QUNCRTI3QjVENjQyQ0U4QTkyRjBCMzkKKzoxMDE2RjAwMEZEMEU4ODhCRjVGQ0I2MTFFOEZENTMwN0M2MkJFNjU1QTkKKzoxMDE3MDAwMDlFMkU2QzFDQUJDMTY3MzE0MTIzQjk2OEVGMDMyRTk1NDcKKzoxMDE3MTAwMDNFOUYzNzYyNjM5MkRGMUUxOThGQzczODFFNkY4MzA3QTMKKzoxMDE3MjAwMDkzMzAxRUYzMjJGMkNEMjBFMzMxMjQyRjFFRjk4REVDRUQKKzoxMDE3MzAwMDhENzIwNzIxMUVGOTE3RDkwRDdFMDM4Q0VCNDVGREM5NkIKKzoxMDE3NDAwMEUyQzlEN0I5RDhCQ0EyMEM3RURFM0M1RjlENEVCRkM0QjcKKzoxMDE3NTAwMDg0MjQxMjQ4RDA5NDk1MzY4Q0NGQzY4NDE0N0M2RTk0MjEKKzoxMDE3NjAwMEI3NUYxOUU0NERFMDNGMTIzRDA1RkU4RENGOUZFNzc4NEUKKzoxMDE3NzAwMDNGNTRCOTVDODVCOEExMjUzQUJDMUY5Qzk2QzBFODI0QUIKKzoxMDE3ODAwMENBNkZBREY3RUFDNkZCRUJCN0IyNkVCRjJDRTA3RjczNTIKKzoxMDE3OTAwMEZBOUVGMjRFNEE4MTc4RDUzQzhCN0ZDNDYwRTQ1Q0UwQ0YKKzoxMDE3QTAwMEU3QUQ2RkVFNzc0MUJGNTE1RjU5QzNDQTVGMzdCNzRGOUYKKzoxMDE3QjAwMEQ0OUUzNjVGQTE2QUVDRTlENUYyNDZDMDdCOENDMkY1QjcKKzoxMDE3QzAwMDlCNDFFRTNDNjA1NzI5M0UyRjA2QkI0QUE3MTg3MzE2NzMKKzoxMDE3RDAwMEJCQkE4OEY4M0IyMDhFNkMxQzVGRDg1MzIzN0YwOUZCNzMKKzoxMDE3RTAwMDZBQTQ5QkUwODM4NDA0MUUzN0U0RjQxMzcxQzM0OEYyQjcKKzoxMDE3RjAwMDI1RTRFQTVERTBEQkMyRkVGODM3QzJBQjJDN0FCRjQ3RDYKKzoxMDE4MDAwMEMwMTNCREY0ODgyMjdFQUExRkFGMkQ5MTAzNDQ0MkZFNkYKKzoxMDE4MTAwMDQwRkI3OEU4NUUwOUZEQ0Q2MEE1MTVFRDcyNTU2NTE0QjUKKzoxMDE4MjAwMEM2NjdBQkYyNjVBQ0FGQkE1RDQ2RkIxOUE0RkFBMTk2RTgKKzoxMDE4MzAwMENFRTc0RjVDNEYxOEUzQjMyNTQ0NzI0RkQzQUM3QkQ2NTEKKzoxMDE4NDAwMDg0Mjg1REY5RUFBNTc3RkY2OTNEQzQ5NzhCQ0QyQThDODIKKzoxMDE4NTAwMDc3NTA2NUYxNjZCRjQ3NDZGRjk1RjZFMTBFNDI3Q0ZBODgKKzoxMDE4NjAwMDlFOEJEQzYwQ0YwNDNGMUNGNEM4Mjg2RkZFMzc2NTM3QzEKKzoxMDE4NzAwMDBDREJDOUUzRDEwNzlCRjMwMzMyRDA1OUYyRjY4RUEzRjgKKzoxMDE4ODAwMEU2NDBGRjU1MkFEMEUxRURENDJEMkVEMDc3NTFERkRFOTIKKzoxMDE4OTAwMDVGNUU4RUZCNDdBRjlBOEY3NjkzM0FBQjc0REU1MTVDRjYKKzoxMDE4QTAwMDRFQTcwRTI5QkUxMkVDRjg5MTE2MzM4MUI4RDE5MTc1NkUKKzoxMDE4QjAwMEE3NTA5RUJCRDYzN0I4QTc4REU4OEIyRjhCRjhCMDMxRDkKKzoxMDE4QzAwMENFNkM4QzJGRjc4QjJCMUJFMkM5ODIxRjhDN0M3MjU1NDAKKzoxMDE4RDAwMDA0RkUxMEZBMkExMjdGNTAzREI2MzBFMTlGRDA2MzQyRDkKKzoxMDE4RTAwMDdGQkNDM0Q3Mzk3NUM4OTZEQjFCMjkxRTYyOTZDODg4OTIKKzoxMDE4RjAwMDA3QzE5NzZGN0Y3M0YzQ0Y0MTBGNDc1MUZFRDgwMEZDQUMKKzoxMDE5MDAwMEZDRURBRjVFODQ3RDA4NTkyRTg1OEQyM0ZGMDdFNzM3RjgKKzoxMDE5MTAwMEJBNEY3NDRGQ0JFREEzQ0JENURFRTVCRDY1MTBGRkY5MTMKKzoxMDE5MjAwMDM1QUI3QkNCQjA3RUEzNUQ4OUFDRDcwNkQ2NUJEOTA5M0UKKzoxMDE5MzAwMDJDMEU2RUI0M0I0Njc5RjhCRUVEQ0VCQ0NBN0I3M0UxOEIKKzoxMDE5NDAwMEZENzk5NTRCMDMwMDZGMTk2MkFCMDFGRDZCRDQxMzQ2MTMKKzoxMDE5NTAwMDNCMjFFNjYzOUM2NzRDNDgyNjgxRjFEQTc5QUJEOEFFMkYKKzoxMDE5NjAwMENGNEU1OEIwREU2NzczOEUwMzY3RkQ0QzE0ODM3RTcwRDQKKzoxMDE5NzAwMDAyQzEyRjdEM0YyQUQwODRFMzM1OUM1RjhFRjM2Rjk4QTAKKzoxMDE5ODAwMDA4RDA0N0RDNUQ3RTU4NUY2QTM0QzYwRjVBMzM1ODdCRjcKKzoxMDE5OTAwMEY5OTI2OEU2OEY0Rjg4Qzc3NUNBQzIyMUZGMzIwRUNCMTUKKzoxMDE5QTAwMDREN0MwREUzRTJCRDRGMDJCRjM1Nzk0QzUxNzBBRTMwMzYKKzoxMDE5QjAwMEQ1QTFFQzg3OTA0QkVCMTQxM0IxOTIzRTNDMDlGRjlERUYKKzoxMDE5QzAwMDQwNjQ4MEFFMTdFQjI0RDg3N0U2REIyQzM5RTg5RjNFRTUKKzoxMDE5RDAwMDkzMDA3NEI4ODlFRTBCMjlCRjFGMzgyMEVGREE0Njk3QzEKKzoxMDE5RTAwMDc4QzAzRDNFMzY5QzdGMkVFMDgyRDRCNUE4MTdBRUY0NzkKKzoxMDE5RjAwMDU1MjEzQ0ZDRTNCRjY2ODFCQzVFMkY3OTNCNjA1RTlENTgKKzoxMDFBMDAwMEYzQUE2RTJGQTRGM0E5REYyREUzQjlEMjgyRUJERjFFNzgKKzoxMDFBMTAwMEM5RjY2OUZBRjM0OUQ5NjlDQjg1Mzg0QTkzMTRFRDA2QkEKKzoxMDFBMjAwMDNEMjJGMEQ4RTFCMEEwN0U2OTNBQ0NGNDYwRDM1MTg5NzAKKzoxMDFBMzAwMDk3RDkzRUUyMDU1RTdGRUEzRDA3RUUzMzA0REVFOTdBQTAKKzoxMDFBNDAwMDNBNjEzRDlFQkJFMzcwM0Q2MjlGRjEyRkFDRTc1REU4REMKKzoxMDFBNTAwMDJGRjI3QTMyNUNFODBGMDA1RkM5N0RGMzk3MUQwQUFFNjIKKzoxMDFBNjAwMEFCOUI0NEJCNjFGRTNFMUUwRjIyRUY0NUExREYyQ0U4N0QKKzoxMDFBNzAwMDVCQ0ZGOTRGRDBCNzhFRDNCN0JCRkRGNDFEMTdEMkY2QUQKKzoxMDFBODAwMEFEOUU3ODNDNjU5MDMzMDlBRUI3RkJCRDE4RTQwRkIxNEQKKzoxMDFBOTAwMDVFQ0EwN0REODBFRkJERURDQzRFQjRCRUVGNjBGODcyREMKKzoxMDFBQTAwMDE0RTVDMkZDODQ3RkVENEE2MDdFQjI3MUREMTU3QzlGMzcKKzoxMDFBQjAwMEZFNzUwMkQzNEJFMERGNDI5QzYyNzFGQzk0QUYxMzBBQzcKKzoxMDFBQzAwMEMzQjRFNzdFMkRDNUYzQjc4MDk3MTIxN0Y5MzI0MEZBRjkKKzoxMDFBRDAwMEYwMkNDNjExRTM4QUY3QTIxMkY1RjI1NUMxRTMwQUVGMjIKKzoxMDFBRTAwMDk5QzkzQzhDRDNEMjcxMEIzNEYzNUIxQjVGMTI5NTk4NzAKKzoxMDFBRjAwMEQ0N0ZEQzdGODE4RTg5ODkwM0YyQTU5RThFRjU4QUJEMTUKKzoxMDFCMDAwMDU5OEEyNUJERkI2MjBDQTVBOUZERTVEQzI4Njc1MjdCM0YKKzoxMDFCMTAwMEM3NTc3MDNFNkY5NEZGMzNBNjA2MjJEMTdFNkY5MEJERUIKKzoxMDFCMjAwMDg3RTIyOTZDRjI5MjJFNkI0RTdGNzkzODlCMUVBMUY0Q0UKKzoxMDFCMzAwMENFNEI0Q0VBQUY0RjA2NEJFNzg5ODlGREU4M0MzMTcxNEIKKzoxMDFCNDAwMDAwM0EwRjhCMkY5RjA0RjVCMEZFRjQwMkRDRTc1RDA4MkUKKzoxMDFCNTAwMDY1RDAxMzk2NjEzODFFRjI2NTRGMUMwOTZDQTc4RDEyNzMKKzoxMDFCNjAwMDc4MUM0NUNDMDdFMjEyNTFGNEJEMUYyNTY2MjNGRDI1RTQKKzoxMDFCNzAwMDg1RjhDREI0OUM5MEVCOTY0MEVGMEY4MjBGN0VBNDlEMkMKKzoxMDFCODAwMERGRjdDMDA3NTcwQ0NDMDc0MUY0NEI1NjcxN0FBRjEyMDAKKzoxMDFCOTAwMDc5MTZCQjA2Q0VCMzE4MDREREFBNjBEQzMzMjY3NzhGMzYKKzoxMDFCQTAwMDM3RkJEQ0U5NTZENzlGNkU3NTAzRDNDREJCMUFFQTlCOTIKKzoxMDFCQjAwMDJDRTQ0QkY0QzM4QjJCNTM2MUJDNTc5QzlFRTNCMUY0RDQKKzoxMDFCQzAwMEY5OUU0NkFFNEZCMjI5REQ2OEZEOEI4OTMyRUFBQjlGQTQKKzoxMDFCRDAwMDkxRjM1MDBGRkZDMDY0QzJGOTc3NTNGREJCM0QzQjFDMkUKKzoxMDFCRTAwMERGRkI5NTc4RkFGRTk5Q0IwODlFQzdEMUY1RjkxOTVGMEUKKzoxMDFCRjAwMEZBMjU3ODdFQzMyMjYyODJFN0E5NkEyMzMxOUQ4MzFFN0IKKzoxMDFDMDAwMEJBOERFQjA5Q0QzQTZGNEIwQzYzOTczNTdBRTgwRUE4ODUKKzoxMDFDMTAwMEE3RkM3ODFERjBBMzRENzUyOTAzRTlBMTA3Q0Y1RDBGM0YKKzoxMDFDMjAwMDNERjgzREVCQTE0NzA2RTZCRjczRTZBQjI3QzNFOTAzRUEKKzoxMDFDMzAwMEMxQzc2MjVGMTAyOTVGODhDQTIzNDk4RkVGM0YyRTIxRjkKKzoxMDFDNDAwMDZFM0MwRjJCNzFEQTk4RERERDI5QTE5RDZEM0E5QUVGN0MKKzoxMDFDNTAwMEM1QjJDMzg2NEE0MUQ4RTE5M0JCNThCRDNDMjVCQzNGQzEKKzoxMDFDNjAwMEY4NkM2MjNDRjJFRkFBQjZENTZFNDU5NzA3RTI0NzdBNjgKKzoxMDFDNzAwMERDRTkzOUU5MUE0RUY1RTIwQ0Q5OEVFQjRCMjg2M0YxMTkKKzoxMDFDODAwMDQzQjE3RUFBNjc2NzRFNEZFNjcxNTNCQTlFODQ0Qzg2NzUKKzoxMDFDOTAwMDg3MDRFQTBGQzAzOTlBOTNFRjBGNjI4QjE1OURERjJGRUYKKzoxMDFDQTAwMEYwNzY4MzVDMkU0MURDM0IyRTkxNDBEQTBERjVFQkQ3Q0MKKzoxMDFDQjAwMDhEODJGM0ZCMzg4RkJFN0QxMjY5Rjk0MkM2NDEwOENBOTYKKzoxMDFDQzAwMDQzM0NCNURGMTBDNzRBMjgzNUI0ODM3REM4Mzg2OEFGQjgKKzoxMDFDRDAwMDc5OUVERDdGM0Y3MTM0OTFFRjI3MkMyNDE1RUMwQTkxMUEKKzoxMDFDRTAwMDJCMDZFNDFCQ0Q3RUUyNDRFMjIwRjYxMzlGMjc4QUYzMDUKKzoxMDFDRjAwMDcxQkRGRDZBOEIyMjYxRTMwMkVCOTJCOERGRkQ2NTFDQ0EKKzoxMDFEMDAwMEZBQkYzMkI3NUJEM0JBQjIzMTNGNjU4RDQzQzU3ODgxMzQKKzoxMDFEMTAwMDJDQkI2RDMzQjNGQkJGMUZFNzMxMTE1NUIzQkU4NEQyNkIKKzoxMDFEMjAwMDY4QTI2QUY2MEY0OUU1RjFCQTcyQ0FCQzIxQkFGNjY5MkYKKzoxMDFEMzAwMERFNjFCQUZBRjQ5QUYzNzRGNTk5MEQwNUJBRjI1MERGNDAKKzoxMDFENDAwMDA1QkFGNkQ5NTQwMEI0RTU5Q0U2MUZFOURBOEY2OEJEMDAKKzoxMDFENTAwMDRDNTcxRUI1RTUxQTVERkJEMTgxQzVCQUZBMzE4RkFFN0QKKzoxMDFENjAwMEQwRDU4RjZENUJBMzJCOUZCRkZCMjdCQUY2NEQzQ0VFMDIKKzoxMDFENzAwMDZCQzRDQkM1NDk0QzNGMzcyOTRDRUYzNERBMEIzMDFFQ0UKKzoxMDFEODAwMEQ5NjREN0M3MjNEMzM4RkU0QjYyMjdFNzQyMUNCQ0U5OEUKKzoxMDFEOTAwMDgzRkM1Q0MwRjcwQkNFMEIzMDJFMUU4OTJGOEM3QTJDNjcKKzoxMDFEQTAwMDkyRkUzNDNFMkZFNkUzN0RGRUJDQzUwNDcyNTBCNzk3MjkKKzoxMDFEQjAwMENBRUJGOUI0NkM3RjY3MzNBQ0E5Mzk4RjlEQTcyQTg0MkQKKzoxMDFEQzAwMEU1Rjc4OEYzMTVGMTdFRUZGOThBRTI2NkYxNTVBNzlERjQKKzoxMDFERDAwMERDMUE4NjJGRDI5MkY0RUYwOTNEMjlGODI4MTJERTA0OEUKKzoxMDFERTAwMDNGOUUwRDZGOUVFRjA5NkZFRjQ5NjQ5RTc2MUUxNUZDQjYKKzoxMDFERjAwMDNDREJGOERFREEyNDEzM0YwRkY2NUU5M0M0RkM5RDA5NEEKKzoxMDFFMDAwMEQxRTg4OUJCNTAxRUNGNTVGRjhCNzk1MEZEQkYzNDA5RjcKKzoxMDFFMTAwMEY3MTM2RjJDQjgwMUY0RkYyRUFCMUJGNjY0OUZDRjdCM0EKKzoxMDFFMjAwMEEzRkE3RTE1REE1N0IzRjYyNjc3MkVEMDI1NTJGQzdCMUYKKzoxMDFFMzAwMDZENTJCRkY4NzcwRDhCN0Y0N0VCRjBCNjRDQzhCQjIxRDYKKzoxMDFFNDAwMDBFRDdFNEZDMUFFM0RGNEQxNjc3RUU2MEUyREZDQkEwOUQKKzoxMDFFNTAwMDBGMzgzRkU0NzRFRUE1MkY4RjlGNDdEQTA3RjkwOEQ5QjIKKzoxMDFFNjAwMDJGQzFCRUM3QUVBODcwQ0U3NUI2N0QyREREQ0ZFNkMyNDAKKzoxMDFFNzAwMDc5NkEyQkVDOUIzNEZCMUNCQUJGRTVGQjlCMjhCNDBCQTcKKzoxMDFFODAwMEQ0RUVERDkxODRFQjIyRkI1NUZBRkMwQ0RERjdERUFBRTMKKzoxMDFFOTAwMDQyNTFEODNGOEZDRTJGQjcxMkI3Q0QyMjIzM0RFRkMxOEQKKzoxMDFFQTAwMEY3NkUyMkQ3NDVDOTEwMkYwQjFFOTg5Q0ZEMkZEOUYzMzIKKzoxMDFFQjAwMEZGNDgxQTcwN0Y2OEI0QUI2NzNEOTc0M0JCNTM0NkQ3NjIKKzoxMDFFQzAwMEJGMjE4Q0RGNjUzQzg3RUJGNUJGQzE0RjkzRjAzQzBFMjMKKzoxMDFFRDAwMEYxQjQ4OURBNDUzODhGRUI0ODYyRjY3OUQzNjFCNjRGQjEKKzoxMDFFRTAwMERFNzQ3NDRFMkFDQTRENTJEMTgwRTc3MDgzRDUzNzFERjcKKzoxMDFFRjAwMDQ5RkRGQ0I1OEVBNDAxRkMzNUIxRkUzNTdDREYzQjVEQjAKKzoxMDFGMDAwMENFNkI4Mzc4RTNDOTkwMDVGMTI2MTM5NjFGNTlCRkNGOTYKKzoxMDFGMTAwMDRDMDI0ODRGOTY2NzJDRTg2ODBFNkRFRTA0RkI2QzI2NjkKKzoxMDFGMjAwMEM2QkM2MjM1MTZENjZEREUyN0EzN0UyMjg5QUNERTRGOTUKKzoxMDFGMzAwMDZDOERFMEU3QzQxNkVCRUQ1NjlDNDc2RkI3MTI0QUUzOTEKKzoxMDFGNDAwMDBENzY0QzZGQjc1MkU2RTlFRDU2OUE1NzZGQjdEMjZCRTQKKzoxMDFGNTAwMDBBMEM3NjRDNkZCNzg2RkFBNjE4RUM5OERFNkVFNTM0NUMKKzoxMDFGNjAwMDVGNjZCMDYzN0FCQjM1NkE4QkRFNkU4RDBFRThFREQ2QTgKKzoxMDFGNzAwMDk4NDdENzE4RUM5OERFNkU5REJGN0I4M0FFM0UzRjc4QzYKKzoxMDFGODAwMEFCQUU3RUZDQkU5RkU5Q0E4NTlEMEZFQURBMkZEQkZGNzAKKzoxMDFGOTAwMDM0RTZERjRDM0NCNDVERDc2RTUyRDdBRjc1RUQyOEMyNDYKKzoxMDFGQTAwMDNCMjE0RjdCMDk5Mjg0OTAwQjRGM0NBNUFCNUZDMkZENTgKKzoxMDFGQjAwMEI0OEI3QTdFQUZFQjg3QjRCMjdDNkIzRkZEMEZFOEY1NTQKKzoxMDFGQzAwMDExRjE1QUMwMzk1MTQ4Q0Y0QkU5OTRBRTc1MDFDOTFEODIKKzoxMDFGRDAwMEE0Q0Q5NkVGREU1OTA0RjNGOEU0RkQ0QkY2NDEzRkNCNzgKKzoxMDFGRTAwMEI2RThGM0I0OTcwN0Y0RTU3QTMyMkMxNkY0NDMzREU1RUUKKzoxMDFGRjAwMDhCMDBFNTkzOTU5MEJGQUREMTZCMkI0OTgzMTNGMzIxRjMKKzoxMDIwMDAwMDA2Qzk2N0NCRjZDRjI1OThGN0U5Rjc3NDQyN0VCQTU4MzAKKzoxMDIwMTAwMEE3RTAzNzBGRTczNzMxM0ZCMURFOTVENEVGMEJBQTdENEMKKzoxMDIwMjAwMEVCRjREMEZGRDgzRUIyQ0IwMjdDNUJCRDVCMjIwRjRBMDMKKzoxMDIwMzAwMEZERDc1M0QzN0VEN0U2RjQzMEVCMzJBRUMzRTg3N0JBQTAKKzoxMDIwNDAwMDkzRjVFNzU0RDM2NTNCQzZGNTRGQkUyOUJCNTk3QzUwODkKKzoxMDIwNTAwMDJGODc2QkY2QjM3OEZFOUEyNzI0OENBRjE5RjEyMUZDRjkKKzoxMDIwNjAwMEQyNDg3ODkxRkQ2QzlGNTA5RjQ4MDIwMThERkNBOTFDQkQKKzoxMDIwNzAwMDFGRDY1NEJERkM5RDg0N0ZDMDdDMUU5NjAzOTAxNzE0MTAKKzoxMDIwODAwMEE1NDYxQkY5QUQyODQ4RkFFMzM5MjY1NzJGQTc0NjNDNDkKKzoxMDIwOTAwMDNCREM0M0MyRjI5NTRBRkY4Mzc5NTQxMzc2MkU2NUU0MDQKKzoxMDIwQTAwMDJCMjNERUVCNzZERjY1MDFCRDc4QUU3ODVGNjRDMEJCQzUKKzoxMDIwQjAwMDM4M0YyOEExQUJCNTg0Qzk4MzEzNzhBNUZCRjJBNUM5MjUKKzoxMDIwQzAwMDQ5OTFGN0FEQUI5MzI1RkRGOUYyRDlGN0FEQUI5M0JGQ0QKKzoxMDIwRDAwMERGQjhDOUJBRTQwMUY2QURERDEwMkZBMzdFQTUzMTVFRUQKKzoxMDIwRTAwMEQ2M0YzRUI2RjcyQkM5ODk3MTY4MTZGRkYyQkE2RDJDNDAKKzoxMDIwRjAwMDVGQzU2MDI3NzM1Mzc1NzZCMjc3REZGQjgxMTQ2ODAyODIKKzoxMDIxMDAwMDM5NzY3QTZFODNGOUQ0M0EzRDJEMDA3RkU0RjREQ0FFNjMKKzoxMDIxMTAwMDVENkYxM0M1MEJERUNGQTE3NjZBNjcxOEZGRjBFNTY0MkIKKzoxMDIxMjAwMEUxMTc5NTYzNUM2NDUzMDk2QjZGNkNCNzMzNTk0MUJDMUQKKzoxMDIxMzAwMDc3MjQxNUE1QTJERjc5MzQ5RkQ5NEY0N0QxODA3RUU3NTgKKzoxMDIxNDAwMDlERkMzQ0U3MzYzODJGMUNEMTk3Qzc3MzNCM0Y1N0ExMDYKKzoxMDIxNTAwMDYyRTcwMUJBNkQzMjk3QTc2QUYzN0NFRjQ5OEVDM0YxNEIKKzoxMDIxNjAwMDlDOTM5RUVBODQ3Q0U3MjY5N0M5MjVBOUUwM0Y5QkYwRDMKKzoxMDIxNzAwMDVDNzRBM0M3NUVCQTJCOEZCRDk3QTg3QjhGREQzQjkyQTMKKzoxMDIxODAwMDAxREZFMENGREI5NUFGQjU3Q0ZCMzJDNTI1RjQxQjY5RTEKKzoxMDIxOTAwMDlEMkYyNzMzN0ZENzRDM0MzNkQwQkJFMjNDRDdGQzQxNDgKKzoxMDIxQTAwMEJFMERGNEFEMjJCOTVERTFGMjM4Q0QzQzRGNkEwQTNGNzUKKzoxMDIxQjAwMENGOTU1REVDN0NCNzU3Q0VDRjkyMjc1NUU3RjRCRTk0MTAKKzoxMDIxQzAwMEFDRjExN0M0QjlFRTk1NEVDRkNCNDA0RjlGRTJCNzgyMkEKKzoxMDIxRDAwMDdGRTlCMzg1REZGRkZFODlEM0YxNTZCRTNFRUE2ODIyNzAKKzoxMDIxRTAwMDFGRTFGOEYyQTBFMjI3NkYyNTYzNUNDRThGRjk4QTM3RjIKKzoxMDIxRjAwMEM4RUUxMzEwOUYxQjZDQkNFQTY4NzJCRkI4REM1MTJEOEYKKzoxMDIyMDAwMDFGMUFFNThGRkE5RkM3NjNFMTdDMjI3Njg4ODJEQjA5N0IKKzoxMDIyMTAwMEM1OUQwQkZDREYwQ0ZGOUU4NEYxRDUxM0YwN0VCRkZDNDcKKzoxMDIyMjAwMDUzMzU5RUU3RDNBQTAzRTZEMzhBN0VFNkM2NzlCQTkzRUUKKzoxMDIyMzAwMDU5REVERjE3MDAzREEzNUMxQjY1NEQzRkNFQjNGNDQzNzEKKzoxMDIyNDAwMEYxOTREQjYwMUYxNEZFRkVDMUYwRTczRUMxODIwOUU3OTYKKzoxMDIyNTAwMDE2RDc4QzRBRTlFNzNGNDZBNTBDRTAzRjlFMzkzQzJBNTkKKzoxMDIyNjAwMDE2Q0U5MzQ1RENDQUQ4Q0VFNjRCQzhEMERFOEY2OThFMzkKKzoxMDIyNzAwMEQzOEZCRkI5ODA5NTEzRjlCOENCNjMxOURGRTdGMkIyRkEKKzoxMDIyODAwMEM4MDMxNDcxNkJEQjRDRTI4MUZCMEUzRkUzRjlEOUEyNkEKKzoxMDIyOTAwMDlGREMxNDA3QjY4RjhCOUY5MjlCNTIwOEU3NjkxMkVFNjIKKzoxMDIyQTAwMDJCMzdDNzQ5QkFGREU1RjFFNDkyNUM1OENGMzBERTdGQTkKKzoxMDIyQjAwMDZFMEFFM0QzNkRDMzU4N0NDNjk4MDdGOTE5NkZGRjU5QUUKKzoxMDIyQzAwMEYyMTQ4NDk0NjBBMzAxOUYxNjU5MEU4QkM3QjEyOTZDMzgKKzoxMDIyRDAwMEZFQzc2MzU5QkYyMjdFNTY3NTJGQkJERjI1RTI2NjIyRkIKKzoxMDIyRTAwMDBFNDgzRDgzQjc2MkE4NUUzOUQ2NjIyNjEwRDc1QTJBQjcKKzoxMDIyRjAwMERCMzcwMzFGRjZERTlGRTNFN0VBMkVGQTFGRDhDQkNBQ0YKKzoxMDIzMDAwMEJDNzJDQzNGRkE1N0VGNkYwMTNFNjNFMkZCREJDQkU5RDcKKzoxMDIzMTAwMDI5QkRGNkQyN0Q4RUY3Qjg2NjMyRkMwQ0VFQkNCRDJCMjMKKzoxMDIzMjAwMDlBRjE2RDhGQzM4RUYxNkM2M0JCNkE0RTlGMTYxRUE3MjgKKzoxMDIzMzAwMDAwN0QwRDc2MjM1RTI2MERFMUVDNDczNUM3RkI5OUMzODIKKzoxMDIzNDAwMDU2MEZGQTMxQTVEMTk4Q0YyMUNFM0YxNENBOUZCMUYxRDMKKzoxMDIzNTAwMDk4MDZFRTA3NjhGM0E1NjdDMDdEQTJERUYzMEY5NUUwNEYKKzoxMDIzNjAwMDdCMDk3NjNCQkVBN0E4MjRFODgwMkJBMThBNUI4MkZDNzAKKzoxMDIzNzAwMEIyMkU0QkQ3QTYxNDk4RUY0NTkyMUJFRTBGQTQ1NEI4N0IKKzoxMDIzODAwMDNBNTIxMkUxMUVBMThBNjJCNjM5OUIzODhCQTEzRURGMTgKKzoxMDIzOTAwMDg0RjU3MTk3QkIzNjlCMjFFRjVBMjU3MDkyNERDQzc0MTIKKzoxMDIzQTAwMDFDMDcxREU3OEU5NDZDNUM3RjhCN0Y2RTQ3MEE2RDE3NTAKKzoxMDIzQjAwMEFCRjY5MDYxNzlBMDQ3NUMzMzUyNDE4RUU3QjFGQzc1NzIKKzoxMDIzQzAwMEUzRkFENkE3MzBCQ0Q5MzdEMTdEMDNFMDQzMEQ5RjA3OTAKKzoxMDIzRDAwMEJFM0U4NUU1MDE1MTNENzMxM0QwQTM0NDI1QkJEOEJENTYKKzoxMDIzRTAwMDI4OTY4NzBBNjlENjk4MkZFODY2RjlEMjMxOTA2Rjk0QkIKKzoxMDIzRjAwMEMzRjQwQ0Q0REYxNTM3NzUyM0M4OEY5MDJGOTlFMzFCRDYKKzoxMDI0MDAwMEY4NUU5QjBGN0YwN0M3Nzc4MjQxM0UwNTNFRTkwMDhENEUKKzoxMDI0MTAwMDkwMEZBMUNDMjRDOEQ3QjMyQkMyQ0ZGNzMxNEVFNzdBQTcKKzoxMDI0MjAwMDY3RjkzRDMwRUVFQ0M5OEQ5OEU3NEVCRUY5RUUzQkI5NDkKKzoxMDI0MzAwMDA4OUM1RTI2MjdGNDdEMDI3MTg4QTg0NEE2N0ZBMzU0RDkKKzoxMDI0NDAwMDE1RjUzMTcxNDk5ODY3NkE1M0REMzU1MDhFQjI1RkUwRkEKKzoxMDI0NTAwMDkyQzFFRTU5Rjk3OUUxMTIxMzUxQThCQzRERTVGRDc4MEUKKzoxMDI0NjAwMEU2MTFFOUMzNUMxNjY3NjVGQTU1MjExRjBBQjk5MDM5NzAKKzoxMDI0NzAwMDcyOEFDMDdFQjIzRkVBMTdCNUM0RDBGNTRDQjUxRkMwMTIKKzoxMDI0ODAwMDczQzRBOEUxMEQyNTcwQUZFMEM1NDVBQzhGOUY0NUM4NkEKKzoxMDI0OTAwMERCM0ZDRUY1NThCQ0VDNEQzNTgxNEY0RjhFQkRGQTQyMzcKKzoxMDI0QTAwMDA2RDJGOTNDQjhBMTc5REJBNkMzQUZFRUJCODhDN0NGOTMKKzoxMDI0QjAwMDIxNUZEQzdGRjg1NTRGREUzRjlGNUZGRUQyRkQ4NzVGRDcKKzoxMDI0QzAwMDg1RkNGMjdGOUVGRkREMTJFOEYxRTM5NEIxNjBERTQ2MDkKKzoxMDI0RDAwMEZFMTdGQUVDOTBFQzNENzQyM0M1RkYxNTk0QTk3QzA1MUEKKzoxMDI0RTAwMDAwMTU1MjgxRjQ2NkY5NDM5NzczM0NGQkJGQTY3OEI2OUEKKzoxMDI0RjAwMEY1RTFGOThBRjZGRDg4QkY0MzY2M0E2RjNBQkU3OTBBN0MKKzoxMDI1MDAwMDQzQjVGOTI3QjEzQzFGMjM4MEZENUY2OTZCOUQwRUZFMkIKKzoxMDI1MTAwMDREQjdBNTY3MUM4Q0RCRkREQzVGMzNGRDU0OUYxQ0ZFQjMKKzoxMDI1MjAwMEU5MjkwN0ExRkM3NzQ0RTk3MUMwRjMxM0VCREU3MDc4NjkKKzoxMDI1MzAwMEU4N0EwRkFGOTNGMUZFMUJERTRCRDZFNDAzOURFMDdDRkYKKzoxMDI1NDAwMDM1M0RCNUZDMDhGMEQ1QTJGNURGMTY2OUZENkNFMjRCMTAKKzoxMDI1NTAwMDQyQkJCQjNDMjBDMzFEREY1RUZEQjdGMkQxMThDRTc0NzkKKzoxMDI1NjAwMEFDQkNBQTJENDE1NzE2RjY3ODk1MzVGQzNERjFDQzU0RkMKKzoxMDI1NzAwMDQ2RjdFNThGNkZCMzQwM0VGQ0Y0NTRFRjE3MzBGRTA5ODkKKzoxMDI1ODAwMDlFNkY3MDYyOTcwM0Y3NTc2MjNFOEIxRkNGQjdDMDdFNzYKKzoxMDI1OTAwMEYyNDhCQjk1MDQ4MUVGOTU0RTMzQzEzODk1NjdBNjQ0NDgKKzoxMDI1QTAwMEY5RDZDQkY5RDAzOENGOTdGNkM0NjA3RjRCRUY5NTMxOTEKKzoxMDI1QjAwMDhFNTQ0OUM3RjI1MUJDN0FEQjk3QjNGREFENjExRDRCMTgKKzoxMDI1QzAwMDBGQUIzMzQwNUYyREJENDUyMjdFOTVCNTVGNDdFOUU2RjEKKzoxMDI1RDAwMEY1REQ4Q0U3MkJDNjc1MUFFRENCNjlCMkNFMDI3QUM0NTUKKzoxMDI1RTAwMDY4NUY5NjEwNzdGMzY0QjA1QkFERkFFN0NCREE2RkMzNDAKKzoxMDI1RjAwMDdFOTc5REU1M0MyNjIxOTVEQjlCMjIzMkYxQkIxQzg4MTIKKzoxMDI2MDAwMDMzMEZDMzdDQzE0OEY2RTZDNDdBMjY5NDFGQUZCNzIxQzYKKzoxMDI2MTAwMEZDNzRCRDBCRTExMTUwQTYxNENGMkI3Nzc3QkM5NDhFQzAKKzoxMDI2MjAwMDYyREQ1OTA0NzYyODZBRkY1NERCMzVBNENGN0Y1NkI2QTUKKzoxMDI2MzAwMENEMEQzRUE0MDI1RkVBRjMyMTJCMzg5RTg1RkZCQzhDQjIKKzoxMDI2NDAwMERGMzMzODlCRkY1QzAxRUIxQzIwMUZCMjYyOTBGOTkwRDYKKzoxMDI2NTAwMDI3Rjc4REI3QzFGM0MyNTQ3RTNFMzU5MUUyMDNFRDZGOEIKKzoxMDI2NjAwMERFNkIyQTM5QkJGRDhEODQ5NzQ4RUZBRDgyRUYxQzg0NjkKKzoxMDI2NzAwMEMxQjM5MDlCMjNEQzhFMkNEOTMxNjdGMzEwM0E4MUE2MkQKKzoxMDI2ODAwMEU3M0VDQUVBNDJCRTY0NzEwODcxNEUyNUE3NkVFRTg0MjkKKzoxMDI2OTAwMEY1Q0JDNDEwRkZGMzkzMzc4OTg2N0Y4REZDQjk4Q0I4RDYKKzoxMDI2QTAwMDk5RERCMUIzRjc2QzNDMkVEMUNCOTdFREI3MjM1RTA1MjYKKzoxMDI2QjAwMDFGQzE4RDAyNTMyQUMwNjBBQUE5QjhGRjc3MDNGQTdEMTMKKzoxMDI2QzAwMDFGQTA1NTVGRkVEQ0RDOTUwNTdBNjM5OTIxNUVGMEI5QTkKKzoxMDI2RDAwMDE0N0VGRkY1QzNENDYxNkNGREFBNjcwNkU0NDUyQzI1ODIKKzoxMDI2RTAwMEU1OUI1OTVDQkQxNTlGOUY1MDVBNUZCQTExRTQ3OTA3NkQKKzoxMDI2RjAwMDkzQTc1NUNGM0VGMTBDRThBOTE1RkY3OUFGMTNGNEQ0OTkKKzoxMDI3MDAwMERGOTRENjY0MThBRkY2OTE0RDRFRDBFQjI3MTRCRjEzNkIKKzoxMDI3MTAwMERFRkY1QjQwMEU3QjVGNzc3QkFBMjRGMkUyRUQ5MDE3MzEKKzoxMDI3MjAwMDU2ODcyQzA2MDJFNjlGMDU3QUYyQkYxRjMxQkIyMDhFMkEKKzoxMDI3MzAwMDVBRkZBODM1NjhBNUY4QThEQkM1RjA0OENCNDc1OUY5N0EKKzoxMDI3NDAwMDY2QzQ1N0ZENkVCRDFDQUVGOEQ1QkRDOTJBRUVFN0ZEQzcKKzoxMDI3NTAwMEU5MUM3RkU5QTBBQUVCNzY5ODMxN0ZCNEVFNEREOTBENDQKKzoxMDI3NjAwMEMzRDQ5MzFFNUM5RkYxN0Q5ODQ3ODhEMkFEQkU0REFFMTkKKzoxMDI3NzAwMEI0QzRGNkFGQTcxRThGMDVFNEFDN0UxN0EzNTNCREMxNEEKKzoxMDI3ODAwMENGQUNFMTdBRDlDOEVGM0YxMzcyQ0ZGOTlDRTIwNUUzRjEKKzoxMDI3OTAwMDYxMjI5Rjk1MDQ5ODdFNkU3QUVDRkU3MTQ3RTlCQzNFRkIKKzoxMDI3QTAwMERERjFBQTUzQ0FFQkUzNzcwMjU5OTcxNDVGMjdEQkFBM0UKKzoxMDI3QjAwMDE2NDE5RTQxMjQzRUZGOUNDQjQ1QUZERUU3NzY0NkREQzkKKzoxMDI3QzAwMDREMjcwNkJFN0YzQjgzQjVFNkEwRjM0MjhBOEZEQTZEQzQKKzoxMDI3RDAwMDY2Qjc5RjNFQUU3RDQyRjZEOEMxNEY3QURCOEFERjc3N0YKKzoxMDI3RTAwMDU4RjlDNDhCNkY1RDQwRTdCNzcyQTczOTcxMjY1Qjg2RDUKKzoxMDI3RjAwMDFERjRCM0EwNTMzREYwNzc0MTFGNUQ1NjNDRkRBMjA1OEIKKzoxMDI4MDAwMEYyMjBFMUY5QkFGODNFRkFBQ0RDRDk2MTgxQkM0QTIzODYKKzoxMDI4MTAwMDFFQTdCNjc1NTg5ODdDMTlFOEQ0NzY3NDA2RDhFNUE2MzQKKzoxMDI4MjAwMEM3Q0U1ODgwMEZGRUI2NDcyMkUwNDIxQURGQUZEOUY2NzYKKzoxMDI4MzAwMEEyMTNGNDA3RTAwOUVDODdBMDU3MkZGREZBRDEyRDM4MzkKKzoxMDI4NDAwMEVCRjcxM0IwOUQwQkNFNjkyMkQxRUY1QTk4NEIxMkYyRTEKKzoxMDI4NTAwMEY3OTNCRkE3RTNEN0JDNjM3NUMzRkE2QjlFQkNENjA5RDkKKzoxMDI4NjAwMEVCRjg0ODY5NjA3Q0ZFRjM0REM5NjA4RjZCQ0NGRTY0NjkKKzoxMDI4NzAwMDE3NDJGNkJDNjZFQjhGOTFGRjk2QkRGRUUzNjQ4MjdBNDkKKzoxMDI4ODAwMEQzOTMwNkYyNEJENzk5MDZFQjVCRkFGMDE1QjhCRTZBMDQKKzoxMDI4OTAwMEUyNDVGRUFCRjlCOTVDMEU3RUUyNjk4NTk0ODZGM0YzRkUKKzoxMDI4QTAwMEQzRDM5ODlDN0NCNEREOEE5QjgyOEYyQzg0N0Q4N0UzNzQKKzoxMDI4QjAwMENGMzJDQkUzMjNBQkQxMEZGOTMxNUYyQkQ1QzQ1ODNFRDgKKzoxMDI4QzAwMDZENjM3NEVBNEUzNTcxMzk2MzdBQUM5RUI3QUFERjcxRDUKKzoxMDI4RDAwMDMzRUFCMThGMzMzRDI5MjBFRjE0MEZGQTc4RUFFQkQzQjYKKzoxMDI4RTAwMDUzQjhGRUMzRUZBNUUwN0I5NEVGQTZDMjczNjhERjY5MUYKKzoxMDI4RjAwMEY2NDQ4REQzQkRDN0YzNUFEOUY4RDdGMUYxRTlCQ0EzOUIKKzoxMDI5MDAwMDIxMkVGNzUxQjI3RUZGMkFFMDI1NjkyMjBFNDYzQTg5MzAKKzoxMDI5MTAwMDk2QkYyMkM5RkQ4RTVCOTBBRkJFN0M5M0U5OTVCQUMwOEQKKzoxMDI5MjAwMDlDNTJBQ0VGMzQwNzUzQTAzRUQwNzFCOTg0N0E4MUZBM0YKKzoxMDI5MzAwMDE3RTFFNDdBODc5OUNCQjVCRTlFQ0U1MzkxQjRGOEREMEEKKzoxMDI5NDAwMEMzRUVDNTU1REY0M0RCNjlGQzkwM0VCRUIxRjQzRENGMUQKKzoxMDI5NTAwMEVFOTM0RjkxNUZCMUNDRTA5RjA5NjhENDBCNDk2OTdBM0YKKzoxMDI5NjAwMEZCMjdERTI3MEYyNzg1QkQ4N0Q1QTcwRkZDODhCNzVBMjEKKzoxMDI5NzAwMDczRTA5NzBGODIxQ0JGNkRDNTdCODZCNTRGOThGMTdCQzYKKzoxMDI5ODAwMDM5OUYzQ0JFRjdBRDZCMjhCRjdGRDIyNkU0NTdBRjY3QjcKKzoxMDI5OTAwMDhERjI1QkYzRDQxNTI0OUNGQzdFOTI1ODRFQzJDQTJGNTQKKzoxMDI5QTAwMDdEMUU1NjdFMTM1OUZFRkVGRkI2OUU1RDE2NDFDRjVFMUMKKzoxMDI5QjAwMDlDQTZEN0IzRDQ5Rjg4QkQ5MDE2M0ZGRUY1Q0FBMUI4OTgKKzoxMDI5QzAwMENGMzJFMDU1RTBEM0E4MzcwRkE1QUE4ODVGQTNERUE0RDUKKzoxMDI5RDAwMDdGNkYxMjBEMUUwNUZFMDQ1RkFFRjhDRDJBMUNBNzk3NkYKKzoxMDI5RTAwMDdGMDU3RjBBRkVFREU1NEZFMzdBRjU3ODM0RDYyQjcwNEMKKzoxMDI5RjAwMEU3QThCMDhGRUVFNjBENzQ3RjBERTdBRUNGQzk3OEVFOTUKKzoxMDJBMDAwMERBQURGNjM4RTMyMTJFQ0JGMzZFQkE1REJDMUNDN0NBMzMKKzoxMDJBMTAwMDNENDk5NkNEQTAzRkM0RjM5RTI4OTY4N0QwNURERUUzNjYKKzoxMDJBMjAwMDhDRDNGOEY1NDdEQjY1MjdFNEQ1NzcwNUMyRTc0QjYwMjMKKzoxMDJBMzAwMDI2NDUxMkRDMTI4RDU0REZDOEJGNUI2M0NGRjJDMUJFRTYKKzoxMDJBNDAwMEFDOTU5REY3MkM2OUJDQ0EwOUZFNzQ3NzdCQ0VFQzc5RjYKKzoxMDJBNTAwMEUwQzdFRjk3RDFBN0VBOEVFNkY5NTU3RThGOTI0NkYxNEYKKzoxMDJBNjAwMDVBQzU5NjRDNEUxMEZGN0RFMDY3NTdCNUFGOUMwOTlCNDkKKzoxMDJBNzAwMEM2MjUyRDdBN0M1NERCMkZDN0YzQUNFQTdCQ0M3RDdDNUEKKzoxMDJBODAwMDQxQzBERjA5NThDMENGQUE3OTU4RkY3QzA1RTQ1NTAxNDEKKzoxMDJBOTAwMDdEMEM3Q0U0MDUzRTBBNzMwRkEzNTlGMDUxM0VDOTY3RDMKKzoxMDJBQTAwMEZCNjQ3RTVFQzVGNURBNzQzOTZGRjYzQ0M4NUZEQ0M3M0YKKzoxMDJBQjAwMEVFNDk5QzZDOTdDOTY2NThFRkUzRkNGQ0NBOUY4NEZDMDYKKzoxMDJBQzAwMDU5NDdGOTU4MUJFN0ZDMTRGODZDNTQ2NEZCRkRFOTZGOTcKKzoxMDJBRDAwMDBGMTdERDQ4OUJENDNFRjNFRUI4ODcyOEZDRjQ5OUI3NzYKKzoxMDJBRTAwMDQ3RkUwMUNBQ0ZGRTM1RUI1REQyQkZGREQ0M0Q1RjJENjEKKzoxMDJBRjAwMEM0M0NDQTNENTYwMkZCQTJFRTNEMkY2N0REMDhFNURGNzAKKzoxMDJCMDAwMDVCRERBOEZGMzdCMEZEQjE3RjhGMDNFRDdBNzcyNkYzNDkKKzoxMDJCMTAwMEZGOUE5RTNCMzNBRTBCRUREMzQ2QTREN0QzNjlFQzlFMTAKKzoxMDJCMjAwMEVBQzlGNkJGQkYyRjQxM0U1RDNCNUQxNUQ4NURCRUVGRTQKKzoxMDJCMzAwMEFBRkY3RDE0RUVBRkJCOUYzQkEzREI1N0ZFQUJFQkE5MTcKKzoxMDJCNDAwMEUzRjc5NUJBMUQ2NDFFREMyRkVFOEU2M0Y3M0JFQkZGQjcKKzoxMDJCNTAwMDMwRTkxNzcwNUY3MUQ1QUUwRTRCMTVBRDlGRkFDNzZGOTgKKzoxMDJCNjAwMEM3ODFCRUU5N0U4QUY5MTNENEJGREQwQTJFRjU5RTA3MjAKKzoxMDJCNzAwMDBFQjQ5ODI5RkQzRTA3OUY2RjA4MjE1NzNENjgyRjgzQUIKKzoxMDJCODAwMDdCMThGREYxQzJGMEQwNERGMTAwRUJBMjc4QTkwMTNEMTgKKzoxMDJCOTAwMDE5MDkxRjdGRjlCN0M1QzcxNzBCNjFGQ0RBRjY4OTA0NUQKKzoxMDJCQTAwMEUyRTk3RDc4OTEzQ0VDQjkwM0YzMkVFOEZBRDlGMzNERTQKKzoxMDJCQjAwMDY3QzY4MTdGNzRCNkY1OUU0QTYzRjc2NUZFQUZBQzM3OTIKKzoxMDJCQzAwMDZFQzhCRkVCN0ExOUJGM0Y5MEE2RTIzQzhEN0NERjlGQjkKKzoxMDJCRDAwMEFGOUZCRDFFQ0I0RjNBREMzOERGNDFDQTdCRkU5MEZGNzIKKzoxMDJCRTAwMDVCRkMzREZCREY3NkJENjdBM0Y3N0U0RTZGODcwQkNFQTgKKzoxMDJCRjAwMDUzQkE5RkZCMzY4QjlDQzNCQUVCRkUzRjVENzdBRjlGMEEKKzoxMDJDMDAwMDYzNzJEQjI2RDBGOUJENDMwMjU3OTQ0ODkxRjMzODFGMTUKKzoxMDJDMTAwMDFBQTJERjQ3Q0NFMjdFQzRBQ0M0NkFGNDFGNjY3OTU4QkUKKzoxMDJDMjAwMDdDQTU4OTE0RUM4MzdCNkE3RThGOENFNzBFOTg0QzQzREQKKzoxMDJDMzAwMEYxRDA3OTc5N0UwMEYzQjYxNEZGODhGQjIwOEZFQkNBQzAKKzoxMDJDNDAwMDU1NkVGNjlEMkZGREZFNkE1NjcyNjkyOUY4NkYwNzFCQjcKKzoxMDJDNTAwMEU5QkM2OEJCODMwRTkzQUI4OTJFNjFCNjQ3NDY3RjhGNzQKKzoxMDJDNjAwMDQyRjRGM0ZFMzJFNTUyQ0MwQjk5NURBQ0RGNjc1QzYzNTYKKzoxMDJDNzAwMEQ4Mzc1QzM1NEY1RjdGMjVEOTlFMDRGOTc3NTdENjk4QjIKKzoxMDJDODAwMDMxNUZFODBBNDNGQkI1NDM1Q0I4Q0VBQjQ4QzMyNjE2QjgKKzoxMDJDOTAwMDlGMzkzNzNDQkRDQUYxRDQxRjBGMDNFM0FEMUY5RUY4MjcKKzoxMDJDQTAwMDdFMTI3Mzc5RDRGRTc4QjM3QUQ5RkVEMjRBMkJCOEJGOUMKKzoxMDJDQjAwMEM1RjNFNEQ2MEMwQTlGODRFRjNCQUQ3QzY4ODE1RkFCMjMKKzoxMDJDQzAwMDg3N0RBRjUzRDMyRkUyNDVFMEZENUNGMTJERTg2NEM0NkUKKzoxMDJDRDAwMEJCQzBBRkMwOUI5MTBFNUJFMTRDNDJFMzhGRjc0MTkxQ0IKKzoxMDJDRTAwMDQ3RTIyNURBN0NDQjU5QkQ3RUEzMURGMUY4REEwRTc2REEKKzoxMDJDRjAwMDVGRTFCNUUyQUE5NjdDMjgzRjJFQTFCRjc2N0FGMjc4RjIKKzoxMDJEMDAwMDYyQTNFQjNENjgyNkJCRDlGRDJGOEZFQTJBRUFDQjY3ODkKKzoxMDJEMTAwMDkxOEE1RkM2NzMwNUM4MjdENEVFNEIyMTlGNTBCQjJFMDYKKzoxMDJEMjAwMEM4MjdENDk2MjE5RjUwREIxRUYyMDlCNUY1OTA0RkE4MTUKKzoxMDJEMzAwMEFEODc3QzQyNkQxOUYyMDlCNUVEMjE5RjUwNUI4NjdDMTEKKzoxMDJENDAwMDQyNkQ3QkM4MjdENDk2MjE5RjUwREIxRUYyMDlCNUY1NTIKKzoxMDJENTAwMDkwNEZBOEFEODc3QzQyNkQxOUYyMDlCNUVEMjE5RjUwQzcKKzoxMDJENjAwMDVCMEZGOTg0REE3QUM4MjdENDk2MjE5RjUwREIxRUYyRDQKKzoxMDJENzAwMDA4QjVGNTkwNDdBOEFEODdCQzQxNkQxOUYyMDVCNUVERDIKKzoxMDJEODAwMDJGMEUzREFGMkI5NzkwNTc3NUVEQTdEQURFRDA5NUE3QTQKKzoxMDJEOTAwMEJCREVENUI1RkY2MUVBMzE1REZEMjVFQTI3QkE3QTQxOTAKKzoxMDJEQTAwMEZGNEI3MzRGRTk5RUMzOTk4NUJGMDhGNjMxRUNBRkNDNUEKKzoxMDJEQjAwMEZENzc1RDNGMEEyOUM3MzhCMzg1MzQyMEI0NDFGQzk2QkUKKzoxMDJEQzAwMEMyNjhEMjg2RDA0RUM1MUNFMEY0OTFERTExRTlDMEFGRDYKKzoxMDJERDAwMDVCRkQ5QjgxQjkwRTRFM0E5MzA1RkFGRkI1Qzk3MzU5NTUKKzoxMDJERTAwMEZDODE5RjEzQ0M4NjdGQUE5NDg5NjNCRUM5ODA3REFEODgKKzoxMDJERjAwMDM4Rjc3NDg2NjQxMjFDNEZGOTMwMjQyMTc0ODU2MjQ4QjgKKzoxMDJFMDAwMDMwODFGMjYxMjgwQTYxN0MyODAxOUYyNzg0RTIxMDI2MjQKKzoxMDJFMTAwMDg2RDJGMTc5NTIyODBENjE3MjI4MDc2MTRBMjgxQjYxMTgKKzoxMDJFMjAwMDZBNjgwQ0MyQjREMDY4ODQ0MzQyRTNGMUJERjQ1MDNFRkEKKzoxMDJFMzAwMEMyOENEMDg1RjgzQzMzMzQwOTYxNTY2ODJBM0UxRjFBOEIKKzoxMDJFNDAwMDJBNDFBODg2MkU0NTk4MURCQTA0RTFCMEQwNUM2Qzk3NDMKKzoxMDJFNTAwMDEzOUE4MzcwNzg2ODNFM0UxRjExQkExQUUxQzg1MDE1NjQKKzoxMDJFNjAwMEMyNTFBMTRBODRCOUExOTUwODQ3ODc5NjIzM0MyRjc0ODMKKzoxMDJFNzAwMDJEQkUzNzI2QjQxQTYxNUVFODQ2N0MzRTM2QjQxNkUxQjQKKzoxMDJFODAwMEI4NTAxM0MyRjM0MzhEMDhEREExREJCMDVEN0VFODE2QjgKKzoxMDJFOTAwMDg0MDVBMUJCRjFGOUY4RDA1RDA4Mjc4NDFFQzJFNzg1M0YKKzoxMDJFQTAwMEExMDcxMDE2ODU3RTgxNzA2MjY4MUJDMkUyRDA2RjEwODgKKzoxMDJFQjAwMDRFMEEzRDg2RjA4MkQwRDNGOERFODVBMTlEMDgyNzg3OTMKKzoxMDJFQzAwMEZFODBDRjJGMEFGRDBFRTEwRjQyN0JGMUY5QzVBMTBFNjYKKzoxMDJFRDAwMDg0OUVEMEFCRjhCQzI0QjQxRkUxOTREMDFCRjg3QzZBNkMKKzoxMDJFRTAwMEU4NzU4NEQzNDJFRkUyRjNFOUExQjcxMUNFMDgxRDQzQTAKKzoxMDJFRjAwMEY4QzNEMDUxODRBNUExNEYxMDVFMTJGQTFCQzIxRjg1RTIKKzoxMDJGMDAwMDRFRTE3Qjk3ODZCRTQwMzgzM0Y0Nzc3QzVFMTZGQTBBMzIKKzoxMDJGMTAwMDYxRUY3RTdGNzJBNDdCODk1RUQzNzcxMEQ3QjJDNzBGMzMKKzoxMDJGMjAwMEVBM0I1Rjg0NkNEMTlENEJERDFGRTM0NDNEMzk3QjFENDMKKzoxMDJGMzAwMENCMjNEOTVDNzI2QTFBRkFCNUFCQUQyQUZGQkVBNjQxQTMKKzoxMDJGNDAwMEFGN0U2MzA3RkY2MTEzRDRBNEIxM0UyMDBGNzAwMUU3ODkKKzoxMDJGNTAwMERGRDc4QUY3MjY4MUJGQjRCOUEwQUIxNkUyMjFCNzY3RTUKKzoxMDJGNjAwMDc3NTUwMEJDMzM5REM1NTczNzczNzg3QjNBM0JDRkFDNjAKKzoxMDJGNzAwMDE4RTlDMjcyQzVFQTExNzg3RTQ1MTIwN0I3OEVENzg2NjYKKzoxMDJGODAwMEIwRjc0NEZCQkE0QzVFQjZGNzY0RTFCRDgwNDFGNjMzNUUKKzoxMDJGOTAwMEQ4NzY2N0NCOEZCQTJFRERCQjFERTVCQ0RGRkRCQzQxMEIKKzoxMDJGQTAwMEJGRkZFQkY0QzI3RkU5RkRBNzA2N0FGRjA4QTc5NzJCQzYKKzoxMDJGQjAwMEEzRkMxOTlDQTdFMjE5MDdGNTUzMzZBNEM5ODlCNDlGNEQKKzoxMDJGQzAwMENBMTZDOTA1NzZCMjZBNjNGRTBDQTA1RjAxRjE2MDNDQzcKKzoxMDJGRDAwMDcxNDE4NEJDQUU3NzM5RkQxNjM3OTgwOUM0MTUxN0FCMUIKKzoxMDJGRTAwMDA0RTNCOThCNzdCMTNDNUY4ODgzOTY1MUJFQThFMTdDM0UKKzoxMDJGRjAwMEIxRUE5NjlEMTY3MDQxNkIxQTk2QjFGQ0EzMDA4QjMzMTMKKzoxMDMwMDAwMEQ5RTg3RkMwQ0YyQjVBRTY2MEZFRDFDQTQ3RjVGMUE3QjkKKzoxMDMwMTAwMDVBODhFQkM4NzA4RUFDN0Y1RUNGRTM0Q0M2NzhBNTMxODIKKzoxMDMwMjAwMEJFRjQ2NjNBOEZGQkJBNTlERTExOTEzMzcwQkRBN0U5NDEKKzoxMDMwMzAwMDdBMjE5RkMzN0JCREMzMDZGQTlGRTIwMUNGNDlDNEZBNDAKKzoxMDMwNDAwMDQ1QkM1MkUwODFGNEJGQ0Y4MDc5QTEyN0Y3OERDMDNDMDkKKzoxMDMwNTAwMEI1OTNBQTlBMDJFREJDNTQ5QzNBRUQ5MEZGRTA5RDA4MEUKKzoxMDMwNjAwMENGMjlGRTMwOUZBNEE3MzEwNkYzOTE4RTUyN0RBRTQyNDgKKzoxMDMwNzAwMEUyOTNDQjNCMTFCRTlGRDZGNTRFMjZFMURGNkZENDlGODYKKzoxMDMwODAwMDFCRDg1QTMwRkZCQUQyNEMwN0E2RUQyQTFGNDlDMEZCMDUKKzoxMDMwOTAwMDhGQjRCRjcxQkIyMTFFRjk4ODE5RjM4MUZDNjQ0RDJBREUKKzoxMDMwQTAwMDI5RUU3RkFFNTBCRUM5OENGQ0IxNzg3NzFDQ0IwRkYzRjQKKzoxMDMwQjAwMDdCREU4NDdDN0Q0MThGQTMxQjczNjY0MDVFRDFFMkU2OUMKKzoxMDMwQzAwMEVDN0MwQ0JCRUQzNkEzOUYyN0NFNEIwNTlERkFFNzQ1NjQKKzoxMDMwRDAwMDk3QzdDMkY3MTE1NzM0QkY4RUY0QTRGNEQyRDVEN0I2MzAKKzoxMDMwRTAwMDdDODFGNzA3MjhCRDhFNDdBMEQ3RjE4MUU4MTU5REMxRTcKKzoxMDMwRjAwMEUzODE2RTkxMjc5NjE3N0IxNTU0QUU0QjQwMzlBREQ4QkUKKzoxMDMxMDAwMDEwMUNEMUEwRTE0NzYzOUM5RTY0RDhGMUJFQTNDODI3RTAKKzoxMDMxMTAwMDJFMURDMkU4NDExNDc3MzJEMEY1NTQ0QjIxRDJDQjQ4NTIKKzoxMDMxMjAwMEE3RDI3RjU0MjEzREM4M0IwRUZDREVFRTgyMUNCMkU4RTQKKzoxMDMxMzAwMDMyRkE3QzExOEY1QjJFNjhCQTA0RkRFNzlDMENFNkQ3NEYKKzoxMDMxNDAwMEJGQjYxRTcyMkQwOTc5N0RCRDhENzhBOEYzRkNDNjdBQjUKKzoxMDMxNTAwMDE3OTZGRkIyM0UxNUNCN0Y1REFGMjI3QzdCN0QyRUMyRTIKKzoxMDMxNjAwMEUzMTY5NkNGMjNFNDg5MzIwMEU2RDU4RENFNjA3MjM0MjMKKzoxMDMxNzAwMDNBNDNFQ0FCQUU0Qjg1Qjg3NEU5M0ZERTI4ODRGQzlFNDUKKzoxMDMxODAwMDI0N0ZEMkFDRTk5OUU4NzdFQkYyMzRFNjVEQUVDRkMzQTkKKzoxMDMxOTAwMEU4MzJGMzNDQUY1QjI0Mzc3QzQ3NjU3MUY5ODVCQUY2QkEKKzoxMDMxQTAwMDI0Nzc3QzVGMTlFQzA3Q0YxQjU5REMxQzg3REY2RkJCRDIKKzoxMDMxQjAwMDdBNjY4MkFFRkQ5NUNERTlCQTcyNDk4NjhBRkE3NTRFNzUKKzoxMDMxQzAwMDY5OEVFRUY5MzUxNTYzNzRFNTRBRkVCQjA5QzQxNjZEQzgKKzoxMDMxRDAwMEQyOUU0RjUxQ0FCMjNDNkYxNzZCRkI2NUMzQzQ5NDFCQTAKKzoxMDMxRTAwMEU4Rjg1RjFFMzA2M0JEOTExRUM3MkQ3RURDOEZGQkI3RjQKKzoxMDMxRjAwMDVCREQ2MDg3NEVDMDNEMzI1QTNFRjExNzE5RjVERDA5OUYKKzoxMDMyMDAwMDMzRjFCQkE4RUEzRTIxOTE4RDAwODlDMkU0RTlGNDIxQTMKKzoxMDMyMTAwMDI2NEZBNUZGOTAwOUVDQzNDOUFGQUQ3ODdFNTdCNTQ1RTEKKzoxMDMyMjAwMDIyN0VCODQzRDU0MzMxNEZDN0JERUUzMTJCQUU3QkM5QUIKKzoxMDMyMzAwMDE2OTk3OEYxQkU5MkRBMDZFN0Q2RDczRDMyQ0EwREU3ODUKKzoxMDMyNDAwMDk2MEI3MjgyOTk3MDZGQUZFN0I3NTFFRUVEQjRCNkFBRTQKKzoxMDMyNTAwMDhCQkQ3RjgyRUVBRkUzMjAyRjQ5MkFDMEYzODNDRkNBMTQKKzoxMDMyNjAwMDVBQUI0RDkwNkYyMDFGNDgwMjM5RkRFQzI5MTlFMzI5MTQKKzoxMDMyNzAwMENCNTdGRkE1QzgwNTdBRURBNUI2Qjc4QUU5MzhDNzVCNzUKKzoxMDMyODAwMDY1MUNGNzkzNDdBRERCNjQ5NDc3NEYwQTdDRDdCNTZGMjUKKzoxMDMyOTAwMEREMDE4QzMzQkM5NDVBQkUyMjgzRjJDMUM3RDU4MTcxNDMKKzoxMDMyQTAwMEE4NzdENkIxRjg3NjdGRkNEMEY1MDJCRDgxNUYzNTdBN0MKKzoxMDMyQjAwMEFDQ0Y2RUIxNzMzMkFBN0NEMjQwM0Y1NDk5REQ3ODZFQTgKKzoxMDMyQzAwMDdBQkNDNThDRTc3OTU0RkZFM0Y5RkZGMUQ2MDQxM0QzMzgKKzoxMDMyRDAwMDNGNEYyMURGMkQ1NjU0OEI3NkRDQzUyREIyODdGRDJFNTYKKzoxMDMyRTAwMDg0NkE4MUY5OTJCQjY0MkY5OTA4NjU5NkFGRTA2Rjk2NjYKKzoxMDMyRjAwMEJDRUNCQzQ2NEZERjZCNTc0RkM0RkJDNUM2RkMyOTAxNzUKKzoxMDMzMDAwMDNGQTczMkU1RDU5QzAzQUQ3ODhFOURDRjkyMDk1RDhBQUIKKzoxMDMzMTAwMDM2N0Y1Q0M0NTc0ODJBRUI1RjdDQzdBNzc2RDhGRDc3MTkKKzoxMDMzMjAwMDRDQTZGMEE0ODc3RDcyRjBGNDBFMDdFQUM3NEY0RENGOEMKKzoxMDMzMzAwMDE3REQ0MEUxMjc2NUZFMEYxNTRBOTcwNkQ5N0I1RjA2MkEKKzoxMDMzNDAwMEU0RUY5ODVBQjY0QTc4MkU3MkVDMEUzODhGRkZGODA5REYKKzoxMDMzNTAwMEIzMUJDNTkwRTc2QkFERjhGNUYyQTEwM0U1MDdDMTBDMEYKKzoxMDMzNjAwMEQ4Rjk3MjMwNTk0QTg1QUZGMjEyQ0NERjk4NEZEQTc4MkIKKzoxMDMzNzAwMDdDMjBDMENFRkY2MTEyMTQzRkFFNUE3NjhFNzVBQ0QwNjEKKzoxMDMzODAwMDcxMkJEQ0MzQUQzMkRDREIzREM2RUYyRDNDOTZDMUZDQkUKKzoxMDMzOTAwMDIxNjE5RjNGRTJFNTJBMTM5MzRGQjI4NzdEN0YxMUYyQUYKKzoxMDMzQTAwMDVFODY2QkVDQTlEMEE3QkIzMzg2QTFERUU4QjVBQkE0RTMKKzoxMDMzQjAwMDBERjU0QTM1RkYzRTcwRURBMzU2NzY0RjQ3MjUyRTkwMEEKKzoxMDMzQzAwMEM3RTU4NENCMUZDODMzN0Q2Rjg1RTU4OUZCODA5RDk3NUEKKzoxMDMzRDAwMDkxNEVCNDczMUY5QjAzRDU5REQ5RjBGRUI2OERGMUY4QzUKKzoxMDMzRTAwMEJFRDkxRDAwRjlFNTc2QzA0NjE1MDdFODhGNjU4NENEODYKKzoxMDMzRjAwMDZGNTVBQjE0MDg2QUUyMTRFMkY3MzgwOEQ4MDU4REJFQTEKKzoxMDM0MDAwMEU5NkYwRkY0NzY2MDI5Qjc3NzRCODkyMURGQTc1NTZGRjUKKzoxMDM0MTAwMDk3Q0E2MzFDQjhBRTE1QUQzQ0VGQjk3NzVFMzJGOThFMzIKKzoxMDM0MjAwMEUyQUNEQTFCNzg2OTE2Q0U1QjcyMDdDMkNDNjMxOUU5OEQKKzoxMDM0MzAwMDA5QzI3NzgwNTczRENFRUUwMzE5RTc2NTVDQzc2MEU3QTgKKzoxMDM0NDAwMDU5RUQ5RTMzMERCRTI3REMzQkFFNjFERTAyREYwNDJFNUMKKzoxMDM0NTAwMDI4NjlFODIwRjA1RUVENjdGOEFDNkU5NzkwNUVGRkM1RDYKKzoxMDM0NjAwMEZEMkE3MUNGNEVEMDdEMTkyOTlGMDU3QTZERDkzRDc0MDMKKzoxMDM0NzAwMDVGOThEREM3MDdCREY2N0E2NzAwRkRBNTRGNDhBQkQzNUYKKzoxMDM0ODAwMDRFRjlCRjc2Q0JDRTJCMjdDMTdCMEZCRjZFMDFGRUFFQjAKKzoxMDM0OTAwMDg4MEY4RTMwQzVDMTRGRDJEQzc4NDdFOTQ1NjFFQ0JCNUYKKzoxMDM0QTAwMEMxOUU3RjVGRjgyMTNDQ0U4NEVGNTE3QzJDREQyMTYzRUYKKzoxMDM0QjAwMDVFODNBNjFEM0ZERkY3MzM3RUY2MTNDQzIzQUE3OTUzMzQKKzoxMDM0QzAwMDc2MzdEMUE3MzVGMDczM0UwNUU3M0U1RjgxOUZGRkVENkMKKzoxMDM0RDAwMDc5MUJGRDk4OUNDQzgxRkQxOEEzN0VFOUU3QzcxOEVDMDkKKzoxMDM0RTAwMDI3REM5QjAwN0JEOTkzQzRGMkMwQkY1NDNDQjFGMUE4NDgKKzoxMDM0RjAwMDk3MEQ3QTM3QTkwMEJGM0IyQUY0NkUzNUI3N0I2MjlDRTMKKzoxMDM1MDAwMEE1NjBFRjY4RjlDMzJENEYzQjIxRkVGMDVGRjczQzlEQUUKKzoxMDM1MTAwMDhDNzkxNDYwNUZGMkZBRUNDQkY1NTU2Q0JDRUI5RjhEQTcKKzoxMDM1MjAwMEMyQkNBNUNGQ0EzQUM3ODFERjU3RjFGMzk3OUREQUVGNDYKKzoxMDM1MzAwMDlBQUU0OEY1OTY2NDgyN0VFNkY2NzA5NUJDMkRDQjA1NzIKKzoxMDM1NDAwMEY2RDAxNzNFQUZBMkRGRkUyQkQyM0ExRDY3NTlBNzQzMzQKKzoxMDM1NTAwMEJGQ0VDNUIwNEVDRDdEOTAyQUJFQ0UwRjlBRDlGQThFODEKKzoxMDM1NjAwMEI1QjBGNTJFRTlCNzRFM0Y5RTgzNUNGRjBCQUJEQjhGMEEKKzoxMDM1NzAwMDdFNDYxMEVERjg4OTlEMzI4MUZCNjdCRDdFODZDMUVFRTcKKzoxMDM1ODAwMDlGMjZBRDVCMDExRkFCRDZGQ0Y1N0Q4NUYyQzVGMjkxQTAKKzoxMDM1OTAwMDE0M0Y5NDBGMkFFRUIyQTI5RDVGRkU1Qjc2RkVGOUIxNTYKKzoxMDM1QTAwMDU0OTI4MjA3RjAyRjA0OUQ2QkU5RjMxNUQ0M0YwMEZGN0UKKzoxMDM1QjAwMEEyNkYxRUJENzY3RjM5RTBCMUQ3RUUwRjEyN0Y3NTNDNEEKKzoxMDM1QzAwMDBFNTVEN0ZFMzJGRTVFOTRFNDYxRjk5MDc1RTIzQjMwMTEKKzoxMDM1RDAwMEJCMERERjgxNTE0MTA3QjA3QkYyMzZBMDUzMDY1MUQ5QjQKKzoxMDM1RTAwMDNFNTExRjRGRkRFRjExNUYyQzVDODNGQ0RGMzM1MkZCMUMKKzoxMDM1RjAwMEJEREVGQUU4QTAxOUYyN0Q3Qjc2NEFFODE3QURCQUFFRDcKKzoxMDM2MDAwMEM0NTk0MjIwQkY5NUM1QzEzNjY3MzJGQjI1NzkzQzk4MjUKKzoxMDM2MTAwMEY3NjJBNTc0OERBNkUzREQ5MkE5QjJFN0FBOEJFNTc1RTIKKzoxMDM2MjAwMDNGNENGMEJCMzM2MkJFQzZFNzEwMUZCNzgxRkRCMzlCQjIKKzoxMDM2MzAwMEQwRkUxOUQ3QkYzQjkzRjlDQkFCNjQxM0ZBRDNCNTE2QzEKKzoxMDM2NDAwMEU2NTc3N0YzRUYzRURDQzdFQkVGQ0I2NEZFRjVDMzk5QUIKKzoxMDM2NTAwMDJDOUVERjBEN0UyNDlDNEY1RjY0QzVERkVCMjE2NDFBMzYKKzoxMDM2NjAwMEM2QzkxNUMyRjg0RjExNzg3MzI5OUZGN0NBMzdGQUNCMkMKKzoxMDM2NzAwMDNEMTk4MEE3ODVBNEQzMENGNDlDNTUzQzQ3ODU3QjAzNUEKKzoxMDM2ODAwMEVGMjdEQkYwM0I0QUY0QUYxQ0ZBOTlDRkZCMzk2ODY2QjEKKzoxMDM2OTAwMEY3MDRERTg3MzFFOEJBRTZGMzc4RjJGQkYwMTk1MDNBMjYKKzoxMDM2QTAwMEZFRkI2OTE2RjQ2M0ZEQ0Y1OUQxNEZCODM5OUFDNUZCQkIKKzoxMDM2QjAwMDQ4NjJBQzAyN0M3RTBERDc1MzBCMjY1QjNENzAzRTMwREEKKzoxMDM2QzAwMDdGRjJDREU1MDA2OTdGN0U0MkYxNTU2MUVCRDk5NDRGRTEKKzoxMDM2RDAwMEM3NjkzNDMxM0JERjE4NEZGMEJFMjREOUQ4NTUwOEY4RkMKKzoxMDM2RTAwMDNCOUZCQUM1OTAyNzRGNTdCRkVCQkI4NDgxRjg0ODdGRkIKKzoxMDM2RjAwMDRGQTExNkUyMEExNzEwQzY2MEM1ODg1RjVEQjlENkMyMzEKKzoxMDM3MDAwMEVBMEY2NjFFOTk3NTRGMDYyMTdGODY2QzI2QjAzMzgwQkUKKzoxMDM3MTAwMDIzRTA4QkNBNThEQ0U3Q0U4NjNDRkU3ODgwMEFGMkRCRDkKKzoxMDM3MjAwMDY1MEFGMTlCMTg2Q0I2RTM3Nzg4NTg1RUJGMzgwN0I5MTUKKzoxMDM3MzAwMEEyOTgwNDYzRTlGQTgyRkJGNUY3MjhBRTBBOUE4MkEzRkQKKzoxMDM3NDAwMEUwN0M0NzA5NzYwMEZFNEMzNkQ1RUNBMkUzOTQ5NzRBMUMKKzoxMDM3NTAwMDA1ODBGN0RBMEQ4MzlCRUZEMUNDOEY2N0REMzM5OTk2MjcKKzoxMDM3NjAwMEUxN0I1NzMwQ0ZCNTEyRTZGM0NDQTc0MjBGN0NCQTUwQkQKKzoxMDM3NzAwMDIxMkZDODA1OEM3RUMwODdGNUYxQUExRkRCQUQ2NjdDQzIKKzoxMDM3ODAwMDJFRUU2RjA4QkFFNEQzRUVCNUY4OURDRkU3NDdGQjY5OUMKKzoxMDM3OTAwMDc2QzJGQjk2RjA3MTkzQ0YzMkM1M0U4RkY5NjkyQkI5OTMKKzoxMDM3QTAwMERDQUUxNDdDRjdCODVFNUU2M0IzNTRGNjNEMzVGMDA3Q0IKKzoxMDM3QjAwMDI5REVFNjczMTg4OUVGRUQ1OUFDN0Y3QjE2RTNGQjEwMjkKKzoxMDM3QzAwMDk3QzdDMThFQjdDQTRBODJCOEVFRTdBQzQ4NDczMUVFMTgKKzoxMDM3RDAwMDZDMEVBM0IzNThGRUIyOTg4N0UwREY2QUQyODBGOTM3NDcKKzoxMDM3RTAwMEQ1M0MxRTYzQTI5QTA0RjM3NDVCN0Y4MUY5RkRDNjNDNEQKKzoxMDM3RjAwMDIxRUEyMDYxREVEOThBMURDNkU3OUE3ODhFQUNEMzRCQzgKKzoxMDM4MDAwMDE4RTc5NDJDM0Q0QjYwN0VEMjBGQTJEQ0MwRUZGMzJENjUKKzoxMDM4MTAwMDZEMTgwRjMwQjYzM0I3NEEyOEU3RTY2NkVBNEY0OUZDMjEKKzoxMDM4MjAwMDdDOEI5NkFEMkQxMkZFQkVDM0ZDOEM5RUIxRjhCRDcyOTIKKzoxMDM4MzAwMEVFNTc1NzczQkE1MkVEM0QwM0VFMDE1NTgzM0Y4NUU3Q0UKKzoxMDM4NDAwMDVGRkMzQjUxNUI5ODFGQTk3MEZGNzc3MThCREVDRjk4QUYKKzoxMDM4NTAwMEJGNTFFMzY3MzJBMEJCNTc2RjM1RTQ4NzlCQjlCRjcxOTcKKzoxMDM4NjAwMEM0RDIzMzE2RjRCREYxOUVGRDExMTM5QkJGM0Y5OTYwODYKKzoxMDM4NzAwMDdFQTRCODY3QUY3MDdGNTJGMDUzN0E5NjU5NzczRTI2OTAKKzoxMDM4ODAwMEVFNzM1NjgwOUU2MkRGM0IzMEU0NTNEOUYxQkIyQjE1QkIKKzoxMDM4OTAwMDEyRkY1RTI1OEYyQjlFQTRGRTI2N0U1N0U2NzAxNERBNUIKKzoxMDM4QTAwMDJEMTE2N0VDMkU3MUY4NERCMUYwMzk0QjU2NUUxMDdCM0YKKzoxMDM4QjAwMEZEMkNGMDMzMkI5QzE2MDVFMDE5NTMxNzhFNzM4M0RDMTcKKzoxMDM4QzAwMEU5QzhDRUVFOEJFMzZFMkUxOUJGMDVGMjg2RTY2Q0NEMEQKKzoxMDM4RDAwMDlENkRDQkM0NTMwRTdFMUY2OUVDNkI5MENGN0JGOTM3ODcKKzoxMDM4RTAwMDc0RkU1ODFFMzdEQjQzRjc0N0REMkZGNjJDQjQ1MTE1MTUKKzoxMDM4RjAwMEJEMkNFQkZDRDkwQUI1RTdEREY3RjY2Qzg1RjJEQUFDNDYKKzoxMDM5MDAwMDYyNTZCRUJEMjcwQkJFMjFCQzc2RUI2NDU2NkUxNEZEMUQKKzoxMDM5MTAwMDREOUUwRDc5RjBERDBGQjBGMjk1QjRERTBGN0UyRUJGMTcKKzoxMDM5MjAwMDA3NTQ3MTgxODQ3QTc2MkRCNzNGMjI3RTU0NjE3QTlFNDYKKzoxMDM5MzAwMEMxMjlFQzc3M0VDRUQ2NkU0MzU2RjlEQUNDMjRGOERFQjgKKzoxMDM5NDAwMEU3NzFGQzNEODExNkQ1QjMxNkVDRjVGQTBDNkY2NTE2RTAKKzoxMDM5NTAwMEVDQTNFNjQ4N0UwQkRDOEI3RjMzMzA5MkRCQUZCMEJGNEQKKzoxMDM5NjAwMDdCQjEzNjkzRTUwOTZGMUM1QThFRUYwQjdDRDE3RTU2RTYKKzoxMDM5NzAwMDY0MTU5RTdCM0ZGMUZERkJCOUY2OUY5OUNGOTFBMTZDMzkKKzoxMDM5ODAwMDdEOUE3RUQ2RkQzM0ZENEM1MUY1RjMxMUZFOTlGOENFQUMKKzoxMDM5OTAwMERDQkU2Q0NGMTZFODc3RTU0RDZDM0Y0QzhFREI3NUY3REYKKzoxMDM5QTAwMEZGNEYzNTNDM0IxMkVDRkVBOUM3QUQwOUMwODcyQjlGRUEKKzoxMDM5QjAwMEZDNUQ1NjM1Rjg3RkRDMUZGQUE0RTM2RDBCRTQ3REQ3ODAKKzoxMDM5QzAwMDg1RDg3NzcxRUE0M0VDM0IzOTc1QkIzQTJDMzNGMjIwNEEKKzoxMDM5RDAwMDhGQjVDMzMyNTUzM0JGREFCRURGQjk1MjJFRDNGODMxQkIKKzoxMDM5RTAwMDNGQ0YxMkY5REFFQzc3MUQ1NzNFRjkzN0ZDOUVFMDRBREIKKzoxMDM5RjAwMDUzREI4NzkwRTc0QjJFNjA3MTM0RTMzQTM3RjFGN0RFMDMKKzoxMDNBMDAwMDg3NzNGRjMwRjE4MjVGNzBGREZCNTU4RTY3M0JBQzczQUYKKzoxMDNBMTAwMDYzMTZDMUY2NzI4NEVGNzY3RENBRkJBQjg4NjY3QUJDMEEKKzoxMDNBMjAwMEFBQzg2MTUzMjlCRTBCREZGNDM2NDFERTY5RjVDM0Q5NUMKKzoxMDNBMzAwMDA1MzI5REM3RjY4QzI5OEYwMzdGNDQ4RTZGRjZCMEY4NTAKKzoxMDNBNDAwMDY2M0I4QjZGNTZDNDc3NUU0NzhEMTRGOTY4NkJDNTlERDYKKzoxMDNBNTAwMDM2QkFDRkJCRjQ3RUQyN0JERjBGRTI4NkE1NTYyMTNGN0MKKzoxMDNBNjAwMEQ3Q0U5RTk2QzFFMjY1NTA3RTI1NkJENTlEMjAzRkZCNEIKKzoxMDNBNzAwMEY4RUZCMzJEOTgzODM2MUFFNEJDMkIzQkM2RTRBMkYyMUIKKzoxMDNBODAwMEZGNzQ3QUU1NDczMDhGMDUxMzJGOUEwMUNGNEJBQzhFMjgKKzoxMDNBOTAwMDkxOTUyQzNFOEVGQ0YxNzQ3QUY5RjM1MDBGRUQyMUVFRTYKKzoxMDNBQTAwMEUxQjUwNDkzQUVBMkVCRjBCRTIyNjNERUI0Nzc1QzhDOEEKKzoxMDNBQjAwMDM3REMzRDk1MjBCNzU3MUY2NTMxM0Y2RDlGODlDRUIzRTkKKzoxMDNBQzAwMEEwNkYxRTYyN0NFQTk4NURENzA5NzFBQjBENjlGOUUwQzEKKzoxMDNBRDAwMDQ3QkIzMjRBM0VDQzRBRUExQkRGOTVFMTdEMDNDQTYyMEUKKzoxMDNBRTAwMDdDQkFEQzcxRjA3Q0IwRjNFOEU0RjRGODEwRTg0NkZCNTMKKzoxMDNBRjAwMDI5OUYyQ0MzOTcxMjdBRjVGQTY1RDM2Mjc0RTVDQjY3RDgKKzoxMDNCMDAwMDI2MTA4RjM2NkU3QTc5QkFBRTNDQUYyMjQ3RDdGRTlBMkUKKzoxMDNCMTAwMDI1NjM3NEY1NjVENkNFMDkwREU3RTBFRkQ3M0IxRUM1RUEKKzoxMDNCMjAwMEZDREVDM0VEQTdERjlBMEY3RUVDMEVEOTJERDFGNTJDNkMKKzoxMDNCMzAwMDdGRUU5MUI3MjBGRkZBMjRGQzA0NDkwMThCOEJCMUVGOTMKKzoxMDNCNDAwMDM1RjJGMzE4QzVBM0U4Q0U2M0Y2M0Y2RDAxQkY1RDEzRjAKKzoxMDNCNTAwMEU3MzdEQ0NCM0I4MDcxN0NFMzc5OENDODE3RkY2N0NGRkMKKzoxMDNCNjAwMDYzMkM0M0Y5QkVCOEY3RjczQzNGN0Q4OUFFOEM0Q0RENDIKKzoxMDNCNzAwMEREODFGNDY5REFDRkYyOTg5QkE4REYwMkRGMTNGQkUxNjUKKzoxMDNCODAwMDJFNkIwMEJFRTFGRUQ5RUY4RTVBNTRDREI5NEM3REE4MDQKKzoxMDNCOTAwMDExN0Y1Nzc3RUFFRUEzNzg2RUYzQUIyQ0E2QjdFQkRBN0EKKzoxMDNCQTAwMEJGQjBDMDNEQTkxRkI2QUY0Njc5OUU0MUY1NTcyQ0U1ODEKKzoxMDNCQjAwMDlCQ0UwRTMyNzYxN0M0OTNCMzFEOTg4N0IzQjJGOTEyMTkKKzoxMDNCQzAwMDhDNTNDNzg2RTYyM0FDNkRCRDA0RkI1QjE1OUE4QkU1NzEKKzoxMDNCRDAwMDNBRkU3QkJFRkJBMjNCNjc4MDFEREVGNzRDMUNFRTA3NjYKKzoxMDNCRTAwMDVGOTM4MzIzMUY4MjdFQUMwRUQ0MEY2NUU5MEIzNjgwNzIKKzoxMDNCRjAwMDlGQjAyRkRBOUY3NzJEMURBRkVDM0Y3Rjg4NzlFODc1NTYKKzoxMDNDMDAwMEJCMjQ4QzlCOTZDOTY0OUYwNEY5RjdBMTI4RUNBRjRDQTgKKzoxMDNDMTAwMEZFRjM4NEQ1RjRGOUE1NTM5OTVEMkQwMzFGODdENkNCMDgKKzoxMDNDMjAwMDQ1OEU1QkYxN0JEMjExN0UyN0FENjAyOEQzMkJFNjJFMkIKKzoxMDNDMzAwMDM2RUZFOUExMzlEODlGQTgyRjFFM0E0Q0Y3REQxODczNEIKKzoxMDNDNDAwMEQyMEU2NUIxQkQ2RjNERTYyRTA5RTE4RjQyNjMxMEQ2RkQKKzoxMDNDNTAwMEVGOUFBMzQwRkVGOTJCQjlCRjQ4MDQzQ0QxRjZGODdEOUEKKzoxMDNDNjAwMEIwRkVGQTc4NjIyQzA5QTNCNzA0QjQ3MjNEM0MxRkY0OEQKKzoxMDNDNzAwMDMwOUNEMzY3N0I2NjBENEQ4MkRGMjNFQzUyNkNBMDQ3RUUKKzoxMDNDODAwMEVEMzYxN0Y4MkZCMzhBRjNENTZBQ0RCQUU0RTdBRkM2OUQKKzoxMDNDOTAwMDdCMTBENkM0MUUzM0Y4MDNGMzI5RDRFQUVENDUxMUVDQUEKKzoxMDNDQTAwMENDRTU0MzREREM3RjZFQzRGNTBBN0I0NDhFRkYxOENGMTQKKzoxMDNDQjAwMEI1MTdGMkY4ODA5MEE3OTJBMTI2MUQ1RTNBMjUyNjE3MjcKKzoxMDNDQzAwMEZFREZCMjczODFEMjZDNkYzNUNDQjdCMzg0Q0M3QjBBODQKKzoxMDNDRDAwMEY1Njg2NzE2REM0N0ZGQkVFNjRGRTk2QjAzRkEzQjk1RDQKKzoxMDNDRTAwMDJFMDI3MThDOTVCREYzNjdGMjdDQjZGOTVGQ0RFN0ZGQ0MKKzoxMDNDRjAwMDlBNEM3Q0MwMTdBRjVEN0M3MUE3ODdDRUFCRTNDNkYxNTEKKzoxMDNEMDAwMEUzQzEyRTg4RjFENjBENjVGOTg3QzRENUYzMERFNjFCMDYKKzoxMDNEMTAwMEVFODk1MTIxQUU1RjA2NjcxRTEzRkFGQzc5Qzg0Nzg0MEQKKzoxMDNEMjAwMEY4NjFGRDFFRUI3NkY4NDA2QUJEOTNFRUVGRUQ5MDE3NUIKKzoxMDNEMzAwMDE4MTUwNEJFRURGODYzOTQwMkY2NjNFQzcwRUZCQUExQjcKKzoxMDNENDAwMDk4MkYzODZBMUE3Q0M3QzdEMzZFNTUwOEZBNDE5RTlGRDAKKzoxMDNENTAwMEMyRjM0OEYzM0Q5QkZFMTJGMjY4RTQzMzZGMzM5MzNGQTYKKzoxMDNENjAwMDJGOTdDMzRBQ0VCNzhCQjkxQzU2MkFFRTU4Mzg4RjU5QjUKKzoxMDNENzAwMDc0NDBDNjdCOTE4QkQ3NDk2Mzc3NDE3QzQwNzVFMDNEQTkKKzoxMDNEODAwMDdEMjE4NzQyREVDQ0MwOTdFMzgxM0YxOTVGRDY4NkUyNzIKKzoxMDNEOTAwMEI4N0M2N0YzN0U5OTFDOTRDOTJDREZBRTZDNEMxQ0VFOEEKKzoxMDNEQTAwMDlGRUI0MjA5RDg0RUM4QUI5MEQzQ0REOURFQzc2MUREQjkKKzoxMDNEQjAwMDY1NEQ1NEJFRTkzOERFMEQ2OTEzNDA1RUZBRjhDNEUyODEKKzoxMDNEQzAwMDAyN0VBMjdDOTI1QUFERTE4M0E2OEVBRjE0RTAxM0YzN0IKKzoxMDNERDAwMDY0MDlGOUM0NEFFMTU0MEQxRjk1RjdGQTI3QUUxOUM5RDEKKzoxMDNERTAwMDc0MUVCMzM2NjZFM0Y3OTQ0NUZEQ0VBMUMyNEYxOTFDOEQKKzoxMDNERjAwMEJGNkZFNUZDQjVEODFFMUMwMTdFQURCOTIxQ0EwRERGMzEKKzoxMDNFMDAwMDkxM0Y5OUE4QTIxRTVCNzM4Qjg0M0Y0RUI4QzY1QzNFNUYKKzoxMDNFMTAwMDE1RkM4QjM1MEY0ODE4REYwM0JGMDNGNDRGRDFBMTA2MDMKKzoxMDNFMjAwMDhCRjYxQ0U0RUFEMDM4M0NBRjlFMUIxQThFNzA3Qjg2NjIKKzoxMDNFMzAwMEY3OEY4MDg3Q0FEMDk1MUM4RkUzQzI5RUY3N0REOTcwMUIKKzoxMDNFNDAwMDMzQzZENUJFMEM1OERERUMzQjYzRkFGODVEQTFDNzhERDcKKzoxMDNFNTAwMEU3N0ZFNjAzNjZCMjREODVCODlCNTdDNkYzQkQ0Q0UyREIKKzoxMDNFNjAwMEJBNUI2MkYxM0I4OEU3ODlGODlCMzhBNzEzNzEzODJCNUUKKzoxMDNFNzAwMDdDMEY1NzYzNDc0RjJCQUQ1OUIwMEZFOTE3OEYyQjYxNUMKKzoxMDNFODAwMDc2RkZEMzFENjY3NjZGQUJFM0NGNDUyNjVBRkY3MUI2M0EKKzoxMDNFOTAwMDA3RTM3MjJGQTU3QURGODZGNUFDQjgyQ0YwQTQ5OTk2Q0IKKzoxMDNFQTAwMDU3REVGRUI0MTNFMkU1MDI5RjZENEE3MDA0RUM5N0RBMjgKKzoxMDNFQjAwMDI4MUUyMTNFRDhENjIyOTcwNjk4QkYxMzMzNDc5MzVGMUEKKzoxMDNFQzAwMDExODlBRjU3ODQ3MjEwM0ZDMkRFMDhGREZERUNGQTU0MzEKKzoxMDNFRDAwMERDOTQwQTNEN0UzNjNCMjRGODdCMTU5NzgzNTUyMDA3RkEKKzoxMDNFRTAwMDQ0NkI2RkU2OTRDM0VGOUE5MTVDMDlFRkI5RjZEOTFCNjYKKzoxMDNFRjAwMDI2MEY0MjRGNTM3RTQ3QjkyOUNCQzlDNEI4QkFEMERCOEQKKzoxMDNGMDAwMDQ2N0JCNDU3NkVCQkZCMDJCMEJCQUEzNzQ2QTVFQjlCMDIKKzoxMDNGMTAwMEYyOUJCRjNGRkQwRUFEQUE3REVBQjE2OTQwQTc5MjMxODkKKzoxMDNGMjAwMDEyODE3MzRDQTM5RUZDMUYyQjk3MDg5RDAwODAwMDAwRkMKKzoxMDNGMzAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJCNTVCQjQKKzoxMDNGNDAwMDBCNzg1NEQ1QjU1RTY3Q0U5Qzk5NDkzMjJGOTIxMEMyM0EKKzoxMDNGNTAwMDIzRjFDQ0U0NDFBODAxODc0NzI0M0NGQzNDMTAwODIwMTUKKzoxMDNGNjAwMDA2MjdGODE1NTE1Mzk5NDQwNEM0QkM0MEI5QTY0MkJGNzIKKzoxMDNGNzAwMDM5MjEwOTAyQTUzNjU0QUJENEEyOUQ1MEIwRDRBQThERTQKKzoxMDNGODAwMDgwMzVBRDNDMDY0MTFBOEFENTY5QjVCN0Y0MTZFODI4RTQKKzoxMDNGOTAwMDVDREU2MEMwNUFGMTE2RTVBRUI1RjczOTk5Mzk5MzA0ODUKKzoxMDNGQTAwMEI1RkQzQTdFN0U5Qjc1RjZEQTdCQUZCREQ2QkZENjVFOTkKKzoxMDNGQjAwMDZCOUY5MzU5QzUyM0U1MDU4NTAwRDdFODc3MkI4MEY4REIKKzoxMDNGQzAwMEU2Njc5MjNDMUNDMEJBQTIxQzE0M0JDMEJERDg5NkQ4NzAKKzoxMDNGRDAwMDYzRkQxMjgwRDI4RTM0NDBENDNDREIxMTdCRUU5NjRERDMKKzoxMDNGRTAwMDAwRkRFOTc5MjM0MDExQzAyQzlERUZDNDMyODAwQzgwODQKKzoxMDNGRjAwMEZCRENDMDdGMERDODM0MTBFMDhCMUIzOEZGNzQyQkNDNkEKKzoxMDQwMDAwMEYzRTNGQTYwOEU2NEM3Q0YzN0REMzNEOTJCNjNGRjUwRkIKKzoxMDQwMTAwMDU5RTBGM0FEODg5QTZERTlDODY3QjdCOUI3Nzg5MEZFRjMKKzoxMDQwMjAwMDE3RTUyRTEzQzEyNkE0MDIzOENENTE0ODJEQTRGOTREMTEKKzoxMDQwMzAwMDZDN0UwMDk1QzlGMzY1NzJGN0Q3RjZGOUFFMDgwREVEMDEKKzoxMDQwNDAwMDM4RkVERDVCNkY4RDI4MjhEN0RFRTVBMzQ3OEI3MjZDQzkKKzoxMDQwNTAwMEJERjFCMjg1RjE5NUE1RTFEODMxMDA1REJCQUNBMTREQjQKKzoxMDQwNjAwMDI4MzdFMDdDMDJGMjdGQjQ2QjU4NjgyRDZFRUQxODc0MkYKKzoxMDQwNzAwMDVEMDVBNEQ1OUQyOTMyRURBQjZFNzcwQUUzQUY0Qjc2OTMKKzoxMDQwODAwMDg1MDRFQ0FGNzM3NkU1RkI1MTlFOTIzRDQ5NjExODgxNDIKKzoxMDQwOTAwMEVCRUM0OTMyMDNBRUZCNTlDRUZERTNFNTIyN0EzRTc0RTgKKzoxMDQwQTAwMDhBRTA0NEExNzc1QUNEODA3QzJCQjM5NTA5QTRCN0JFOTIKKzoxMDQwQjAwMEU0RDdFNTRCNkNGNUZEOTc5NjBCQUFDQjA1MzBCM0M0NUUKKzoxMDQwQzAwMEExOUFCMDVEN0MyNTA3NjAzNEMwNDNBQjY3QjBGNkY1QkMKKzoxMDQwRDAwMDYwMjYyQTE5NjBFQTk1NzIwMERDNUJDRDk1M0JEOUYzMjYKKzoxMDQwRTAwMERBMkIyOThDOUVGOURENDgyOUVEMDc1RTE3NjAwQkNBOTMKKzoxMDQwRjAwMDVGMzZGODVCMkIwMUU1RUI0Qzg2RTEzQjcwNUY5RERFQTQKKzoxMDQxMDAwMDJDNUYxMzc2NTdCN0NFNjBGQzY1QkY5QzM2OURGNjU1ODUKKzoxMDQxMTAwMEJCMDM5OTY5NUM4MTEwQ0EyMzNEOURCMDlCNDhGRTg3MTMKKzoxMDQxMjAwMDZENUNGQzhGRUJGRjNDNDZDNkYxMUY4RjcxOEMwNDY0MDUKKzoxMDQxMzAwMEREMjdCNjNGMzk1RTYwRjZFQzI0N0I0RUZFQzUzRkI3MDcKKzoxMDQxNDAwMEZGMEZGMjQ5NTc0NDUwNTAxRUVCMTU4MUI1N0Y5NDAzODEKKzoxMDQxNTAwMEQ1QTQyN0U0MDM0MEJFRUE2RDAzQzcwNEVDNUYwNTRGMTYKKzoxMDQxNjAwMEJGOTY2NEM0QTM1NDdENDkyMjNDNTlCMTJEODlFQjlGNkQKKzoxMDQxNzAwMEE3RTEyNDUxOEY0QkJBRjFGNEQ1RkM2MDlFQzZGRjY1RDAKKzoxMDQxODAwMDc4NkFGRUNGRTNBOUI5MEYzQ0I1RkMzQjc4QkE4RTFEMjcKKzoxMDQxOTAwMDdERTA4OUUxNkNFNjIxOEUwRkM4NzFGOEI2MDBDMzBCOTMKKzoxMDQxQTAwMDkzQkJEMzkyMTU2QTQyQkU3QkM5QUU4NEFGNkI1MDRGQUUKKzoxMDQxQjAwMEZBOUM0N0Y2NEQ4QkUxRjU5NzlFQzBDRjQ5NEVERENFNzgKKzoxMDQxQzAwMDlEQzk2QUUxOTJDMkFGNjJFN0JCODFFMkM2QkRFOUY1NzMKKzoxMDQxRDAwMEEwRTBGMzc5RDhDNkM3MEQyQkQ5QUZCMEU3RkU1RUY5RTIKKzoxMDQxRTAwMDlBRjE2RUUzNTdCNEYzMUVCMjMzRTFDNzhENzYxQ0MzNjgKKzoxMDQxRjAwMEVDMjc5MzVEMTNFRDRFNzYyNUJCRDdFREI2NkVCQTlFRDgKKzoxMDQyMDAwMDVEODdFNzA2N0U0NzdBNDlCNDJCQjg5MzRENzA3M0JDM0YKKzoxMDQyMTAwMDVEQUM3NzEyNkUzRTBFOUI4MUZDQUIyRkJCNEExQkI4ODgKKzoxMDQyMjAwMERFNzVCQTI1NkM5RTFFNjJFNzAxQTQ5NTBGNjc3ODM5OEEKKzoxMDQyMzAwMEY0RUZFMEE1QUNBNEZERUZCNjdFMDA2N0U0MjU3RTMzODUKKzoxMDQyNDAwMEYyQ0YyOUM2QUU0MUQ0QkZCNDU1MzE1MzdDQzE3RjhFNjUKKzoxMDQyNTAwMDY3MzMyQTYwNjNGQUQ0RTg4NzIzNTM1MDhFOTk0Rjc2RTgKKzoxMDQyNjAwMEY3QUJENDNGNzVBMjRCMUIwRjBBNkVBQjlCRkZCNDVDNDAKKzoxMDQyNzAwMDFGNTlDN0U0NkVFNUZBMEU0NENERkVFMTcxRjQxOEE0QUYKKzoxMDQyODAwMDFENzE3NDcxMDJCRDkxRjNEMzM5RTI2NkYzODREODczNjIKKzoxMDQyOTAwMEMyOUYzMDhBNjg3RDNFQ0QwRkEwQUJCNDFGREE2RkQ2QzcKKzoxMDQyQTAwMDBFQzFCRDE2RUQ3RENGQzQ4RjJDNjQ5RkIyOTJFODgxMDQKKzoxMDQyQjAwMEMxQjhERkFCRjI2MzdFN0IxMjNFQTczODg4RjJEQTNERUQKKzoxMDQyQzAwMDJCNUI1NUIzMzYxRUY1NThBREE5RDFEQTJFMjgyMkRBNkMKKzoxMDQyRDAwMEE5QkE1ODA4NzkzRDNERjU2OEY3RThCOEQ0RDdDNUEzMjEKKzoxMDQyRTAwMEQ1MzgxRTJDNjNCRURFNzhDMjA5MUJFRjY1RTNDM0Q2NEEKKzoxMDQyRjAwMEFGQjFGRTVEMTM0MTA5RjUxMjI3MDc3OUI0Mzg3OTE1N0UKKzoxMDQzMDAwMDY5N0Q3RUQ0REQ5REI4QkY1MDJGRkVFNkQ1RTY4RDk4NDEKKzoxMDQzMTAwMDRDMzU4MEZBRkE4NkU3RTk1NjVCMTZEQTE3MzgzRTBBMUEKKzoxMDQzMjAwMDNEM0ZGNEFCMUM4N0EwMjRFQ0Y3N0FGMkJBM0RDNkYzMEMKKzoxMDQzMzAwMDlGN0VCMjcxN0NGODdBRkFDQUU4MzE1RUMzQzcyMjIzNDUKKzoxMDQzNDAwMDVFNUM2NkZGRkU4RjUxMEU1N0JBRTA1NkQxRkVCNUZFOTkKKzoxMDQzNTAwMEE0NzVFMDIyRkJFQkY4MEVGOTk1MjFCOEJGMjRFOEM2NUUKKzoxMDQzNjAwMEFCMTFERjZERkUyOUE4OTc1QUQwRkI3RkRBNEFGMUNBNUMKKzoxMDQzNzAwMDZGRUFFNkU3NzhERjI5NzQ4RjJGNDBGQ0I4ODA4RjJGMzMKKzoxMDQzODAwMEY1NkM2QTU1MEI5OTNENTgzRkEzQ0REN0MxN0I3QjAyOTUKKzoxMDQzOTAwMDNEMzFDMTNGMzQ3QzMzRkZBNEI4OERGQUM5RUIyNTZFQTMKKzoxMDQzQTAwMERDQUZEOUVEODIwMDczMjlFRTQ1MjZGMzdDMkZFMkU1RTAKKzoxMDQzQjAwMDZEOTM4N0U3NzcwRjY5N0E3QzU4NkIyM0M5NzE3QTE4RjgKKzoxMDQzQzAwMDEyQjMzM0ZFQzI1MDYwRDgzN0QzRDNEREU5REFCRUQ1OUQKKzoxMDQzRDAwMEJERkVEQjcxNUY5MTU0MTgyRTIwNEVCRUQzQjZBQkI1MzcKKzoxMDQzRTAwMEY5OTZEOEY4NjBEQjVFODY5M0VFRjlENDNEMTEzQURGOUEKKzoxMDQzRjAwMEVGRDZGNEQ0RDQxNjhFNjgzODEyQzhFRjZBMTgyMDEwOUQKKzoxMDQ0MDAwMDA3M0IwNDU1QzQ3REQ2MTAwRTdBRDk2NzU5NEZCRjUxNkEKKzoxMDQ0MTAwMDEzQzYyQkQyNzVDNkRGRDk3M0JDOTIzMDFFQTRGNEFGN0QKKzoxMDQ0MjAwMDMzNUVCM0QzRUQwOTc2OUM5RTYwQzcyOTA5NzQ4NTRFMkYKKzoxMDQ0MzAwMDg3MENGMTRDOEY3MzU1MURFQjVCMzI1MDhFODdCNjBBOUIKKzoxMDQ0NDAwMDc0NEM1MEJDQjYwODIzMDEzNjc4MEVGOUVERTMwOEFGODIKKzoxMDQ0NTAwMEIyMzQxODYzRkU0NkNGRUYyM0I2NjEwMEU1MTRDRjE4REYKKzoxMDQ0NjAwMDdFREY2OTU1NzI1MTRFRjI3NzQ2QkZFQjU3NkUyMkZDRTQKKzoxMDQ0NzAwMEQ0Qjc2NDIyRkYyNjRGQTRENTg2QUNGNzM0QUY5NzI4NzMKKzoxMDQ0ODAwMEE3NzlDMUYzQzc1NjMzQ0U3QkY3OTg1RjFFQTBGOUNDNEUKKzoxMDQ0OTAwMEMyRkI5MURCM0REN0MxNkI2QkMyM0UzNjI2RDA2QTAyQjAKKzoxMDQ0QTAwMEZGNTM1RjEyREY5QjEzQzZBRjQ4RTg1Rjk3NDA2RjQ4MkEKKzoxMDQ0QjAwMEEwNTcxQkM3NTdDRTE3OTg5RjU0QTJGRDQ4NzE1RkU2QkYKKzoxMDQ0QzAwMDM3M0IzRERERjk0MkY3NzkyNkQ4NTk5RTY0QzBGRENDRDMKKzoxMDQ0RDAwMDI2NEUxRkYwN0NFODVGNkQ4RkEzREI4RUZCQzlERjc1NzYKKzoxMDQ0RTAwMDFDNEJDMDdGRjdBNjgzNEFFNzg3RDQ0NzNDREJEMTE3MzQKKzoxMDQ0RjAwMDhFMEExMkNGM0JERUZGMzdGQUU3NDBDQTNCQzE3MDJFNkYKKzoxMDQ1MDAwMEVGMTM4REY0NUU1MUY3Qjc0QjkxNDcwQUU5QTE0RTc3NEYKKzoxMDQ1MTAwMEY5MDM0OENGN0NDNkI4MkZBQzBCQjVGRThCRkUyOUU4NUIKKzoxMDQ1MjAwMEZGMzNCRkFGRjc1RkY0NTNEQ0QzRjdBOUYzOTc3RTdFNzkKKzoxMDQ1MzAwMDREQTRGNThFQjQ1REYwNkZDNkZFOEFDOUUxQkM3QTk0RDUKKzoxMDQ1NDAwMEIzMjI5NUI3NzhDRTg4NzQ4RUQ1RDlCODNGOTVFRTEyNDAKKzoxMDQ1NTAwMEZENzRDRTU0MjQ4N0YzOTYxNkM2RUQxM0RBRjM2OTlGRTMKKzoxMDQ1NjAwMDdCOTc4QkNDM0U2QTEzQUY0N0FBQzA2NzAxMkM4NUY2QjgKKzoxMDQ1NzAwMEJBNUMwRDJGMjBGRkJFRTU2MjAzOUQ2QkM3MUFEMjMyRDUKKzoxMDQ1ODAwMEE4OUUxOEVFRTU3OURCM0VENzBEMTkwRjIwQkQzNzY1RTMKKzoxMDQ1OTAwMDlFNDU0NkJFQkQ4RjRGNjVFRDlCQTJCMkFBMEI3MUZDMzYKKzoxMDQ1QTAwMDdGOUVDRkZERjY2MUQ0RUY2MkZBRjk0N0RCMTU3RjIzREEKKzoxMDQ1QjAwMEZBQzU2NzFFOTlFOTMzOTBFQUNFRThBMDdDNzVBRDA0OTAKKzoxMDQ1QzAwMDVCNjQ5MkM3RjczQ0MzQ0RGN0FDMjNEN0EyMUM5NThEOTMKKzoxMDQ1RDAwMDM3NjY1MEZFNTZGNUMzRjJEMjgxQzg1N0Q1MjJGOTA0OEEKKzoxMDQ1RTAwMEM2MDcyMzQ4RUVDMERBQTkxNkVBOUZERkFDQjVFQTM0NjUKKzoxMDQ1RjAwMEQ2RUVGOTYyRkJBMTExQzhERkI1NDZGNDZENDJFNkRERTcKKzoxMDQ2MDAwMDU3QkNDRTJBOTRFQjc4MTI4RkMzMUY5RUNGNzU5MjlDMTUKKzoxMDQ2MTAwMEVCQkQwMUM5OEI3MjU0M0ExREM5MDIxRDFFNkVEOTM5RkEKKzoxMDQ2MjAwMDFCRTc3RDIyNDdCMTc4OEI2MkZDN0JCRTEwRTc1MUJFNTEKKzoxMDQ2MzAwMEY5QzZGOUFBMENCMjlGREJDQkYxQkFGQjRBNTU0NjU1MzUKKzoxMDQ2NDAwMERDNzlCRkUwODI5OUU5Nzk4RjQ1N0U4NEYyQ0IzREM5NjAKKzoxMDQ2NTAwMDU5ODIyQTMwM0RBNzk1QTNCRkNDRDdGMjZCQzQ0QkMzNzgKKzoxMDQ2NjAwMEY2NUVDRUZEQ0YzRDIyRDNDQjA5NkIwMzFDNDcxMEVGODYKKzoxMDQ2NzAwMEZENkVGRjg5MjRBNzNFQUVFOEZENDA5MzgzRjAzQzQ0RTUKKzoxMDQ2ODAwMDFFMTU5RjQ3RjdDQjlFM0M4NEY2MTFDMzU5REExRjA4Q0QKKzoxMDQ2OTAwMDM3MkM4RjQ2N0FBOEQ3QkQ1RTQ1NUNDMTNFQ0NGRjQ5MUEKKzoxMDQ2QTAwMDhFNzRBNTk0Q0UwMTU4ODEwQzE4QzcyMEIzM0QzRkZFRUYKKzoxMDQ2QjAwMDNFMjI5NkE3QUVENEUyMDFFNzNCQUEzQTU4REQ3QUY0NEYKKzoxMDQ2QzAwMEE1QTQxMEQ1MzM0N0Q1QkYzQUMwMUVDRkNGRkQ2NEExRjYKKzoxMDQ2RDAwMEQzQTFEMjYxN0NDQUUxMzA5MzVFOEY5OTgzMjdCRjhEQ0QKKzoxMDQ2RTAwMEUzMTYzQzI3QjEzOEJBRTBCOUZFMkJCQTI4MUVBMDNEMkMKKzoxMDQ2RjAwMEYzQTBFN0JBQUE1NzYyRjNGNEU5MjdFMDI5MzdGODg5NkIKKzoxMDQ3MDAwMDJBOTcyQkY2QkVGRDY0OTI1NzJFQkY5RTlGMkNENEYyQTMKKzoxMDQ3MTAwMEY2RDJFNzI0M0ZFMTdDNjE5MUMzMEMxOEFGMjczRkY3NDUKKzoxMDQ3MjAwMEQ2MTZDMkUzQzIyNTQ5QTNBQzI4RjhDMkU3QUNDQ0JFN0EKKzoxMDQ3MzAwMDUxODc0Mzc1NjM3RkMwRTkzMEY3QTNCOEVFRTU3MTI0NzQKKzoxMDQ3NDAwMERBOThDNEVBMTQzMUMzQzJFMjlFQjhBQTQ4MjZGRDk0OUUKKzoxMDQ3NTAwMDg4NjBCNkUxQjkyMjNBN0RCMjlGRDNDRDZFQUNEQjVBMDgKKzoxMDQ3NjAwMDFDQzUzMkQ5RjczQjVFRUUwRkRERkRBRUI5QjcwOTU4NzcKKzoxMDQ3NzAwMEQ3NUNDNjdEQTRFMUI4MzMwRDRGM0UzRDE2RTUzQjBCM0IKKzoxMDQ3ODAwMEExMzk2MzUxRUY5N0M5RDBCOENFRTUxRDYyNDhBNTczMzIKKzoxMDQ3OTAwMEMyQUM5OENCMzBFRTJEMDJFRUVGMzUwN0I3NUIyNkUxQzkKKzoxMDQ3QTAwMDNGMTdENTJGQkM5REVBQTMwNzQzRDI4NzUxQURGNkI5NzkKKzoxMDQ3QjAwMDg2RkY3RjAyNkY1QjI4QkY3RDY4QUJGMTM5N0E4Qzg1RkQKKzoxMDQ3QzAwMEZDQUFBNkRERjhCQzBFRDY1RDEyNDc1MDZCRkUzMDVBMkYKKzoxMDQ3RDAwMEEwM0RDNzc1MUI4RUZDNjVGOEZFMzhCRTVBQUYyM0ZEQTEKKzoxMDQ3RTAwMDI0OTZFMDMwMEE0NkExNjY3MTlENDJENzVEMDRCQjA2NUYKKzoxMDQ3RjAwMDkxQzkyQkFFNEMwQTkxMUVDNTZDN0UzRTRDMDMyMTk0OTAKKzoxMDQ4MDAwMDQ0ODA3MEUzQkU3MURENEY4Mzg3ODdFRjQ3NDA4ODhGMTgKKzoxMDQ4MTAwMDhENjY3QTM5MTE0NDNDMEQ0NTdEMzg2RDhDNUY3QzRDM0EKKzoxMDQ4MjAwMDBDNTk3MUREOTIzNDUwRkE5MTNFOUYyRTA3NzAzMDdEMDUKKzoxMDQ4MzAwMEFBNkVBNEE3QTVENzlCMjkzRTlERDNFMjRCQTUwMEZFNTcKKzoxMDQ4NDAwMDc2RTZGN0JFNkNBQThGMTczQzk3QzRFQ0I3RjBGOTA3NzEKKzoxMDQ4NTAwMEZGRkI0NzYzQzg1RTY1RTlGMTdFQjQ0NkMzMURDRTA3MjIKKzoxMDQ4NjAwMEI2RDREODNDQTcxQUJGOTM0REYyOTRGQzA0RUI0QUFBRTUKKzoxMDQ4NzAwMDM3QzVDMEQzNzdCMzc4OTlFMjYzNzFDQjFERkRERTU4OUQKKzoxMDQ4ODAwMEMyNDk2M0NBQzhCNTQwMzgxOTk4RUQyRDhDOEQ1RkI4MDAKKzoxMDQ4OTAwMDcyNzkzRTFGOEZGNUFBOTNFMjU1MTJEQjRGRjUwRTJCNkUKKzoxMDQ4QTAwMEMzNDlFNTFBNTE2MUU3NjM5Njg1OUQ4RjFGMzYyNzMxMEQKKzoxMDQ4QjAwMEJBN0E0ODMxRjNCMzRBMTMwNDY4MUY5ODBCNjZCMkI4NEEKKzoxMDQ4QzAwMENFNTUwRUQ1NzY1MEI2REIyOUNFQUY4Qjg4NEU2NjFGRkYKKzoxMDQ4RDAwMDU1QjM5Qjg1RUNCM0Q5OUJDNkZDNzcxRUU5MThDRkFEQzkKKzoxMDQ4RTAwMEZEODRCMzIyMzYxRkJGN0ZEQTJEODRCNkIwRjg1NDJGNzMKKzoxMDQ4RjAwMDkzRkY1Nzk4MDQxNkU3MTJGREYxMzUyRkNGNUIyQkIzQ0EKKzoxMDQ5MDAwMDdERjdEMUI4OUEyN0FDQkU5NTFFMkU4M0E4Q0I4Mzc4QUQKKzoxMDQ5MTAwMEFBMzE0NTE2RkM5OEU2RkQ5NTk1REQ2QkQ0RTEzRTkyRjMKKzoxMDQ5MjAwMDlDQUNCRTUwQjZBMUZDNzU2NjMwNUJFODVFNEFFNkYxMTEKKzoxMDQ5MzAwMDRDOTdBNzRFMkU5RjQ2MzhDNUZFQzM2NkVDQUY3MUYwNkMKKzoxMDQ5NDAwMDc4NUNEMzhGREZGNzgwQzMxNkRBMTJCRjFFQzk5Q0MzMTEKKzoxMDQ5NTAwMEM3Qzk0RUYyQjM3MTBDMkZFNEY3MjZFQ0ZGMDg3ODdGM0QKKzoxMDQ5NjAwMDg5QjM1ODhFRTJGMzRFMTNBQ0E2N0IxMjkyNjdEODg4QjcKKzoxMDQ5NzAwMEI4NzU5MTFFMzg4MkYwQjhDNEVDNzU5MDFERDJFNkNDQTMKKzoxMDQ5ODAwMEE1RjU1RTE2NTk1QzQyNjc3QUEyOThGMkJGOTdDNUQxMjkKKzoxMDQ5OTAwMDU0Qzc1NkFFRDk1N0JBODFFODU3NDdCQTQ5ODRDQTU3NUYKKzoxMDQ5QTAwMERFNjNFN0QzNDMxQUNFQTI5NEY3RDM3OTg1RjRBQkQ4NkMKKzoxMDQ5QjAwMDFFRDVFMjQyNDBFNEY3Mzg0NzQ5OEZGRDYzN0FENUZCQzQKKzoxMDQ5QzAwMDZCRDY0OENDMUUzNTJEMUMwRjM1OEQ3RjY2RjNENjM4M0YKKzoxMDQ5RDAwMDIyMTk2NDhGOUFEN0E0OUIwOUQ3MjczNUI5QUIxQUIzOEMKKzoxMDQ5RTAwMDI2MUU0NjdDNTQ0OTJFQjc4MDhGQUFENTMyMEJEMUQ1Q0UKKzoxMDQ5RjAwMEFEMDJBM0Y1RjU2QUQ2RkMyOUMzNTRDOEU3QTNENkFBMkQKKzoxMDRBMDAwMEUxMjgzNjZGRkY2QzNBQ0ZDRUJEOTQ5NjVEMTk2N0Y3RkIKKzoxMDRBMTAwMDczQ0RBRjNCNjUzQkY5NEQzOENGNERGNzMwNEI5MjdDQjIKKzoxMDRBMjAwMDlCOTg5RjcyN0I5QzZCQ0VEQjQ0RjczNEYzREQxMTg3NDAKKzoxMDRBMzAwMDgwRkRGMzFGQzk0OUE1NzNFRTk4M0I2Q0ExRkU2M0VEQTEKKzoxMDRBNDAwMDFFMTNEMThBREIzRDkxNjhDNTdDMTNBM0NGNjEwODZGMkIKKzoxMDRBNTAwMDJGRDRDMDhCNzZBQTE1Mzg2RUFBNUZEQTY3RjFFMjdBOTYKKzoxMDRBNjAwMDI5Mzk1QzNGMTc1RTdFMkY5RkVFMEI2QUIyMjNGOTc0RTMKKzoxMDRBNzAwMEZFMjJBRUYyMDc5MzVENUUxNDU4OUU1MEZCOTJBODI0NkUKKzoxMDRBODAwMDhEODhFMUFBOTY3MDg1RkVCRjU4QzM1NUVEOEVENzFGNUQKKzoxMDRBOTAwMDI1M0ZBRDI1M0M4REVBODk0QkFDMkJGN0IzRTdEQkRBM0MKKzoxMDRBQTAwMDRBODE4RkRGNEZCOEQzQ0Y3QkE0OUIyNUJBNTdCMzY4MTkKKzoxMDRBQjAwMDM0QUU0M0I0M0Q4N0VCMUZGQkE3RjA3RUI1OTA5RDIzM0EKKzoxMDRBQzAwMDEwQjU1MDNFNUMyN0YyM0MwMUZEMjk5M0YyODhCQTBFRTYKKzoxMDRBRDAwMDQ5RUQ4RTk3QjQyRUY1MTdDNkZBRkJDMkNERjAxQzkzQTQKKzoxMDRBRTAwMDY2NjcyQjNCOEY4NkU3NzBGRjhCQUU3OUNENDlCOEI4RjAKKzoxMDRBRjAwMEYwRjJCRTAzRTNBOUJFREEyNkI4MjlERUY3RjA0MzREOTMKKzoxMDRCMDAwMDZGNzVBNDI3MjdEQjI3Q0I4QkVBNDgyRkNFOTg5RUJBNTgKKzoxMDRCMTAwMEZENERDMzQ1MUQ3MDNERTg3QUE5MzM2QjdBRDJGQkI1RDQKKzoxMDRCMjAwMEYxMjMzNDNENTQ4M0E2RDcxRDQzQjlCRjZCRkVBRDlGMUYKKzoxMDRCMzAwMDIzRkFGRTAyQTk3Q0JDOEVBRjc5REFGRTI2NkE2RDM1QjcKKzoxMDRCNDAwMEUyQzY1N0M4RjBBNTU4NkVENkVBN0VFQ0JBRjA2QTFCRUEKKzoxMDRCNTAwMEJCMzdEMkVEQTlDQkZEQThCNjNFQzY2OUE1NUY2QUNDMkUKKzoxMDRCNjAwMENFNTExMzJDRUFFRDlFN0FCNjg2MkJDOUNFRTNDQTA3NDYKKzoxMDRCNzAwMDhEODNFRjZCNDBGRDJEN0U0OUY0MzFFNTUxQ0QxNUI3QTYKKzoxMDRCODAwMEFFRDUxNDc1QjBCQ0Y0MzFEMTRERkIyQUY5NDVGOTZEQTEKKzoxMDRCOTAwMEI0NkYxRDc3RDI1NkMxREMzMTg2RUE4QzdFNENGRkJBRTkKKzoxMDRCQTAwMDdDMjUwM0ZDQjdGNUUzQjgwQjkzM0NCQTlDMUYwODYxNjYKKzoxMDRCQjAwMDY2MkZGNTU1QzFDREYzRENBODg1RUUwRjc1M0Y0RDk0RkEKKzoxMDRCQzAwMDc3OUU2NjZGRDEyOThDMTc2RTIyNzk3QzMyRjkzN0UwOTcKKzoxMDRCRDAwMDM5QzhFNEIxMUY1RUNFRDY1MzhGMkVGNzhDODhBRDczRTMKKzoxMDRCRTAwMDRDNzU5ODg5RUYxOEYwMzhBMEUzRjIwM0VEM0VFMjgzQUMKKzoxMDRCRjAwMDk2RDc1OTFFQUNBRkIzNENEMzRCREMzQTgxODZGNDlFQUEKKzoxMDRDMDAwMEVCRThGQzM1MUFCRkVFMTc5REE5MUNGRjI1Q0Q3RjY2OEEKKzoxMDRDMTAwMDdDN0E5Q0E1MUZEREMzRTlGQUQ0RjUxNkU3OTcwNkZENUIKKzoxMDRDMjAwMEU4RkVBNUZCOTM2RUQ3N0ZENUFGNjA0NTdGOTZBRjNFN0MKKzoxMDRDMzAwMEFFRUQ5QkY5NDg0NkVDNUMyMDdDRDI3OTY3QjUyMDJFMUUKKzoxMDRDNDAwMEVEODY3MzkzRTUzNUQzODY1Q0IyMDQ3QTc5QUVFQjI5QjEKKzoxMDRDNTAwMEYxNzlBQzlFNzI2NzkzRkVBN0Q5MzM0RDk0MDc0MDczRTgKKzoxMDRDNjAwMEU2RkVEQ0I4QkNFQzM4REQ3NzUxM0NFRDBGRkM3RDA2OTAKKzoxMDRDNzAwMDg2OTRGOEYzNUNDRkQ3RjRGMzFBN0ZFQkJBNzE4OUUzMkIKKzoxMDRDODAwMEVCRDI5NTMzRDRCRjY4Q0M5MjdDQ0EyMzJFRTU3OEQ5NzkKKzoxMDRDOTAwMEJBNjdBMUREMzIwOUU3QUIzRTFEMjk3NUNBQjE3QUU1RDUKKzoxMDRDQTAwMDk2QkY4NzQ1MTdERDA3RUVGMDE4RUE4NUVBRjNGQjk5MTIKKzoxMDRDQjAwMDdGRDc0MDY0MTVENUI3OTU2QkRFMkIxQjRCNzZGRjM5M0MKKzoxMDRDQzAwMEU2RTNDODM3QkZENUMzQ0VCRDMzOUJFRjFGNERBNTZDMDAKKzoxMDRDRDAwMDY1NEIxRUEzMUZEQ0YyMDBBN0Q3RjA3Q0FFQjJBNUU4OUYKKzoxMDRDRTAwMDA1QkE4RjNGOUVBNDk0MTJCRUJCRDYwQjZFQUFCNzI2MDAKKzoxMDRDRjAwMDZDMjk1QTcxMEZGNjRGNzBEQ0QwOEZFNDNFQkFGOTc4MDgKKzoxMDREMDAwMEQ5NzhBQTFCMUE0NEU2MkZDQUU2MjdFNzUwQkZEMjIxNUEKKzoxMDREMTAwMEZBNjhBQkYzQzFCREUyMUVDMkI3RDlDNUZDRUQ5ODc2MDcKKzoxMDREMjAwMDRFMzQ0OTFDNjc2RjZCNzE2MjdGMEUzRjJGRjc2QjM4RjMKKzoxMDREMzAwMDJDNjk2QUNBMzdEMUJBNkQ3ODNFRTFGRTJCMkM3MjdCQTIKKzoxMDRENDAwMDk4RUFCRTVEMDM3QzlCNDg1RjU4QTY2NjIyOEU0RTBCOTgKKzoxMDRENTAwMDNDRkY1RTY0MDExQkUxRUFBMDE0NTk0NkYyMUY1Q0U2QzkKKzoxMDRENjAwMDE4RDk0ODAyODg1NzZGQUVFMjc1M0E4QjJGNTgzN0IxODEKKzoxMDRENzAwMDc1NzU3REU5RUIxRkQyRDZENUU3RDFDNzc1NTIzRTQ1OTMKKzoxMDREODAwMEU3ODcyNkVGOTlFNjlGQ0ZBMTNDRTFDQ0Q2QkM1NDg4QkIKKzoxMDREOTAwMEQzRkIxOURBMTdFQUZCNDE4QzhCREI3QUE5RkYwRUU3MEMKKzoxMDREQTAwMEU4RjdBQjIxRDYyRUQyRUUwRDBGNEFBRDQzRThGRDJEMkMKKzoxMDREQjAwMEU2RjEyN0UyRjNGMjUzNkQ0OTM2QzIyM0U2RjFDNkU3ODYKKzoxMDREQzAwMDEyM0Y0RjMwOEYzNzNDNDdCRjM5NjFDQ0Y3QjVGQTRFQjEKKzoxMDRERDAwMEFDNzAwNTdBODk0MzdBOUI5OEU3OUZDQkIxQTc5RkJDQkIKKzoxMDRERTAwMDExN0FFNEY5QkFERjI1OEVEN0YzRkFFRTdCOTYyM0Y2MzMKKzoxMDRERjAwMDg0RjczMTYzNUQ3MDlERjVDRjA3RDEzMDU4RkJGRDk0OEEKKzoxMDRFMDAwMDdDMTdDNzRGNDlGOTdDN0I4NEVBQzk1NkFCREI4QUZBMjkKKzoxMDRFMTAwMDNENDE3RTQ1RUYwMTVGMTM3OTlFNjgwMzVGMTg3MTcxMTQKKzoxMDRFMjAwMEUyNEZBMzdERTQ4NzBCOEU3MEJGNUJEMDJFODRFODE1MjQKKzoxMDRFMzAwMEZCRkVGNThGOEJDNEZGQzA0NjAxMDYwODcxNzVENjUzODMKKzoxMDRFNDAwMEVCRTc5MERCNURGNjA1NTYwRDQ0RkVDQjVCMDU5RkNBOTQKKzoxMDRFNTAwMDI0NTRFQzA5RjVENTgxODE3MkRGRjVENUJGNUI1N0U5QTQKKzoxMDRFNjAwMEY3NEM4OTdBMUY5NEFCRDU1NzNFRjAxOUY1Q0VFQkYzOEEKKzoxMDRFNzAwMDNEMDg5RkUyNTEzREY1N0UzRTE4NjA3NUQ0QzVFMDIyQTUKKzoxMDRFODAwMEQ2OEU2QjZGMkIxOThDRjI3RjI0N0NGMEM0MDRGMjFGM0EKKzoxMDRFOTAwMDg3OEJERDkzOUMwRkQ2QjM5NzgwMTczQjQ2NUY5RDg1MkMKKzoxMDRFQTAwMEZBNzlDM0VFNzI1M0RDQjgxODZDNjBDRkJCRjFBMkUxQTMKKzoxMDRFQjAwMEYzOTYxRDdCQzVDMUMwRjg3NzRFNDBGRURENzYxN0JENjkKKzoxMDRFQzAwMEQ2RThFNTdEMUJCNzJGNDAzMjdGM0ZBQUQ1REIwRjJGRjkKKzoxMDRFRDAwMDE5M0I4MDlFRUJGQjNERkI2RDZFNjc1REZFQjM1QkVGQTgKKzoxMDRFRTAwMDc3NTI3RUJBRjdDNzY5M0JDNzkxN0Q1MzVDNkU4MkQxMUEKKzoxMDRFRjAwMEMyMEQyMjA0NDY2MzNFQkM4MUM3QTFEMzM2RDcwQjc0RDIKKzoxMDRGMDAwMDVGN0E3QUUzOUQxOTU0MEYzRTIwNzU1OTdDMzhBRjZGNTQKKzoxMDRGMTAwMDU3Qjk5M0VFNDFGRUQ3MUM3NUJBQTk0NUZFMzBDOTYxNTkKKzoxMDRGMjAwMDBFODkxNEZGQzY0RjA3RjYxRTcwN0NEODBDQjI4N0JERTEKKzoxMDRGMzAwMEEyNjczODE5NzdERTFDMEEyMzdEOEVERTBGRDJCOTdENzkKKzoxMDRGNDAwMDM1OTlCRkE3RDdERUZCM0RGMDZCN0U5RkQ2N0Q3RkEyNTQKKzoxMDRGNTAwMEREMjM0Q0QwRjZGQjVGQjlBOTFDRTdEQUYzOTI2MkZFQzEKKzoxMDRGNjAwMEZDRDRDNkVEQjM2OEJFMzM5QjI1MzdDOTdCNzFCM0M0OEYKKzoxMDRGNzAwMEU2NUY4Qzc1QkMwOTcxNzgxQUYxNDZGMTZCRjFGQkEyMDIKKzoxMDRGODAwMDhGMjA3RDY2MkJBRjkzMTcyMzZFRTlCRUI4NjY4OUE0ODgKKzoxMDRGOTAwMDU4NUMzREYxNThBMkYzRUQxNDU4N0RBREUzNzJCMTEyQTcKKzoxMDRGQTAwMDJBNjU3QUQ3RjA2OUMzRkZBRUUxOTFEMTBGREE1NzkxNDQKKzoxMDRGQjAwMDNFMTI3MUZBQUZENkZEMzVCOUJERDdGRDg5MzhEMEY1QUYKKzoxMDRGQzAwMEE1RTMyMTg2NEY2MEI4RDRFRDlFREEzRTcyRDI2MDM2RkEKKzoxMDRGRDAwMDQwNjU3QTU0Mjc0MzAxRTUwNTREMTYyODMwMTMwRTRDRTEKKzoxMDRGRTAwMEM5M0VGMkYzMDY5QjczMDRERDMzN0Q5QUM0REI0NzRENjMKKzoxMDRGRjAwMEVFQjdBODVFRkVENDI0NEIwMkI2RDE1QzBGMUJGRkE4MEYKKzoxMDUwMDAwMEU4OUI0QUI0OTQxRTY1RjcwMzYyODk0OTMxRDE3OUQ3ODgKKzoxMDUwMTAwMDY0NjVGMTIyMzFERUFDQzlFNTcxMzgyQjhGQzc5QjJENTkKKzoxMDUwMjAwMEI5NkU5RTNGNDIzRENCMUZGNDE2Mzc5ODQ1Rjk0OTc5M0EKKzoxMDUwMzAwMDRBRUEyNzMyQjIzQ0JENzlDNjZDMzNFRUFGN0M0MkVBMTUKKzoxMDUwNDAwMEIyMUNDQzJDOUZERjdDQzc2QzdBQUY1QjNFM0FGNTM1NDcKKzoxMDUwNTAwMDJGRDJBMURDNTlCQ0ZGQTZENDIyMDlFOUM2NDZGRkVDMzkKKzoxMDUwNjAwMDI5RDhCRjJCNTc3OTJBQjcyOEI2OEUzRTJGM0U3Rjg2ODgKKzoxMDUwNzAwMDlFRkY3NjQwRTBEOURDRkU3NDlFRDk1NzUzQkNGRjQ4QjIKKzoxMDUwODAwMEU4QUEzNTg5MzFGRTNGMDg3MEVDMEQyMTQ2NDcyNUM4NTYKKzoxMDUwOTAwMEE2N0M3QTRCMkVCMDdERjRENTlFQzk1NTdFOUFEQkNCOEIKKzoxMDUwQTAwMEYzMkE4MDE2RDI2Mzk1RkFEQkMzOTRBRkUxQ0Y2RjQzNDYKKzoxMDUwQjAwMEJDRERBMUUxQURDQTY2MEYxMzJFNjBCNTc0QkUxQjE3MkYKKzoxMDUwQzAwMDVFOEE0QjJFMzNGOUY3MkNDRERDNzc5OEMzN0I2OUZDRDUKKzoxMDUwRDAwMDMwNjg3NjlGQjRCMTU0NzBFM0I1QjRCRUUzM0MzQTI2NzEKKzoxMDUwRTAwMDlDRDRFN0MzRkQ3RDI0RTE3RUQxQUU4MjgyQjY0Njk3OTMKKzoxMDUwRjAwMDEyNTBDOTE1MThERjg0OURCRkZEOENFNjZENTIyMTlBQjAKKzoxMDUxMDAwMEM0RUM1MEUxQTZGMzQ4ODA4MEU5MUFCNjM1Mjk4ODA3MzcKKzoxMDUxMTAwMEQ0RDNEMkQ3MkVFQzI3RjgzRkE4RTc1Mzk5RkNGQjhDQzkKKzoxMDUxMjAwMDY1MUExRUVGODgyOENGQjRBMTUwQTc4MjkwOUU4QkI2MzcKKzoxMDUxMzAwMEJFMDA2RjVFMzRFM0JBNjc0QzgxODNBNDk3NkFEM0RCMDkKKzoxMDUxNDAwMEQ5NEI2NUYyREIyNjI3RTUyRjE3NUUxMTdEQjdFM0I4NTMKKzoxMDUxNTAwMDZBMkQ2Rjg3QUI2MkY4NTY3Q0RFRTkxOUI2Njk2RDFDNjMKKzoxMDUxNjAwMDhFRkU5OENCRjM5NEYzOUU3MEY2NzI4QTFGMUU1RTc3QzQKKzoxMDUxNzAwMEMyRDU3REQ5Q0I5MTdGQkE3NzQ2MTE5RDRCNEY4MUYyMzUKKzoxMDUxODAwMDdFNkVEQ0ZCQzU1OUU2REVCRkJGRjhGRDIwOUU3N0MwMTIKKzoxMDUxOTAwMDY2N0VCRTVBQ0RBMDNBNTI1OTBCNEVENEM3MEM5NEE1ODgKKzoxMDUxQTAwMDE4NjkwOTY5OTFCRDhGMEYzMTNCMTI5RjkzRjIxNEY5NzEKKzoxMDUxQjAwMEZFNENGRUJFMDZGQ0U0OEZCQTFENzVGQkY0QjAxQjhBRTQKKzoxMDUxQzAwMDRDRjlCOUM5MDYxMkY5Q0IzMEQ4RTgyNkZGRDZFRDM3MkQKKzoxMDUxRDAwMDU1QjRCMzc4QjNGNDM1N0UxRkI3NTQ4ODM2QTcxMUZEQTQKKzoxMDUxRTAwMDMyOUU5N0E0MkZDRDJGN0I5RTlCNUIyQzY0OEE0NTFCMDAKKzoxMDUxRjAwMEVGNjdGMTQ5OEY0QjMyRkU0N0Y4Rjk0RkRENEIwQTc5RTMKKzoxMDUyMDAwMDBFOUVBRjhDODQ5MTg0QUIyRkNCNzdGNEI4ODRGNkIxMkIKKzoxMDUyMTAwMEU1N0QxREZCOTA4QTcwQkYwQkI1QjVBNzhBMTVCMjk5QzUKKzoxMDUyMjAwMEY0RDJERkU2QTNCOEJDRjRCOTFDNzZERUMxQkExRkIwNzUKKzoxMDUyMzAwMEZCMEY5RDBGMzZBNjMxN0NBRUYyODhDQzhFNjUxRDgzQTgKKzoxMDUyNDAwMDQxQzY0NzBGNzYwODIwRTMzOTc3N0I0NzFBQTM5RDU3NUQKKzoxMDUyNTAwMDA2MzJCQUVDNjcwMzI2NTNGRURGRkRERUYyNjc0MzE5MjAKKzoxMDUyNjAwMDdERTY4NTQzNjMwMkZDN0VDNTQ2NzJGODQxOTdBM0IwOTQKKzoxMDUyNzAwMDlERjJBMUNCNzY5NDAzRURFMEI3QUY2NkY3ODU3RUU4QUIKKzoxMDUyODAwMEFFNjM4NDZCMDJEMTg4MTJGMjI3NDU1MkI5NUQ2QzhERjIKKzoxMDUyOTAwMENDQUZCNTdEMkQ3NTczM0IyRTNEQzhDRkREQTU5M0Y4MDIKKzoxMDUyQTAwMEZCM0RCMzNBQ0M0NTc4OTAzQTQ1MDgyMUZEQ0Q4MzYyNjkKKzoxMDUyQjAwMDUxMTg1OTlCQjRCODZDQ0QzNDgxMUM2NzhGMjQzOTE5QUYKKzoxMDUyQzAwMEU0QjhGQTBENTQyNTQyNzVEMjVDMEQyNzI5MDVBOTg2NEMKKzoxMDUyRDAwMEZFQzc4NTgwNDQ3MkNEQjUyRjYwQjg3MUY4MDYxOUU2MTcKKzoxMDUyRTAwMDhCNjQ5Nzc2MzI3RDA0Nzg3RUFCRTMwOUM0RjM2NjkyRDMKKzoxMDUyRjAwMEYzOTM4OTAyQTQyMTJFQkUzOTE3RkJFM0U2OTUyNjVFQkYKKzoxMDUzMDAwMDlBMjJCMEQ2OTgxN0EzNUU0RTVDMEY0RjMzRjNCNEYzRDYKKzoxMDUzMTAwMDZFMTgwQzYzNzg0QUQwMEZGQTA3Q0IzRjJGRTMzOTRFNTMKKzoxMDUzMjAwMDY5MTM2NjE3Q0Y0QzQ0N0E0RUE3MDQyMTk5RTU5QkNDQUMKKzoxMDUzMzAwMDdGMkUyQjI5RUNGRUJFNDVEMzkzOEUzQkZGNTA3MDI4NjkKKzoxMDUzNDAwMDM4QUZBQkQ4QThCNzdFOEE1MTZGNjlEMzhEN0FFQUVGQjAKKzoxMDUzNTAwMDM3RUE2NUMwNUNBRkExN0Y2MEUwMUI4NkZFQzE4QjQ2NkIKKzoxMDUzNjAwMDE5RThBQ0ZBRjEwNkZFMUIxQTI2MUI2ODhGN0E5QjgxOUUKKzoxMDUzNzAwMDNGNjdGNTZDMDM5REQ3N0E4RjgxN0ZFODg2MkE0M0ZGQ0MKKzoxMDUzODAwMEIwRDA2MjQzRkY4RDVCOTcxQUU4RTFFRDhGMTlGODZGOUIKKzoxMDUzOTAwMEVBNTg2OUU4MUYxOTVFNkJFODFGRERGOTAzMDM1RDE0MjUKKzoxMDUzQTAwMDc5RDZDMDNGRjZGMDI2NDNGRkI4RTg4Qjg2RkUwOUE3MDIKKzoxMDUzQjAwMEI3MTlFODVCQkE3RTYzRTBCRkY1Q0E5QjA2N0ExMjFDOTgKKzoxMDUzQzAwMDMyRjA5N0Q4REUzM0QwNTNERDdGMzVGMDRGQ0IzQzZFRDMKKzoxMDUzRDAwMEU4OUYyMTlGMzNGNENGMkNGOEQ4NDA5N0Y5RkU2OUUwN0QKKzoxMDUzRTAwMERGMzgyOEYwMkNDNTlGQjlBNjc1NDc1NUEwRjgyQzdGNEIKKzoxMDUzRjAwMDdGMjJFMkY5QUU3NEIzMkY0QzRDNUZCMzZFREJBNEM3Q0YKKzoxMDU0MDAwMDQxMERCNzlGODBGRDNFOTNGN0NCRTNFMEUzNUE1RTMwNUEKKzoxMDU0MTAwMDU1QkMxREU4QkVGNzcyQkJDMDcwREREN0Y5RUNDMjdDOEQKKzoxMDU0MjAwMEQ3MUNCNzhGN0U4QTBEMEJGMDE4OUQzNkRENkRBMEZCNjMKKzoxMDU0MzAwMEZCMzMwREZDMDNFNkNBODZGRTgxODEwMjQzRkZFMDQ1OTMKKzoxMDU0NDAwMDNFMDM5RDU1NUY2Q0UwQkZBMTQxMzFEMDFFNzVCQTgxMEUKKzoxMDU0NTAwMDNGNjdCNURGNDBFN0I1Q0UzNUYwMEZERDEwMzBGNDBGMTQKKzoxMDU0NjAwMDBCMkQzMkY0REZCOEI1REU0MDBGNkY2RjMwRjBERkQ0QjQKKzoxMDU0NzAwMEExMUFGQTQ3ODY1NzFCRkE0Nzc3QjYxQUU4QTJDODA2NTgKKzoxMDU0ODAwMDAzRkZEOEMzMjE0M0ZGQjhFODU2NDNGRjg0RDNFRDA2OUEKKzoxMDU0OTAwMEZBOTZBRTBFMDNGRkFENTdDMjA2N0ExMjFDMzRGMDk3OEYKKzoxMDU0QTAwMEQ4RkU2MEEwQTdCQUZGNjJFMDlGOTZGOTgxQTE3Rjg2MkYKKzoxMDU0QjAwMDdDQzZEMDVGN0QwRUUxNDdGOUYzMUIwMjdCRkYzNUIzNUQKKzoxMDU0QzAwMEUwOTJBMTVGNEFDNzNDOURFRUE3MjFEOTI3MEEzREYzOTAKKzoxMDU0RDAwMDc0M0Q3RjJCRjM3RDY2NThFNzUxNTMzREZCMkVFRTUzMTEKKzoxMDU0RTAwMDEzQ0ZFQjZDRjlGQzdFMEJGMzc3OUI4REM1NTkzQ0ExNzgKKzoxMDU0RjAwMDg2QjNBQjk2NDZDQTRGNURBQUMwNzA0N0E5NDYwNUJCQTYKKzoxMDU1MDAwMDJGNEM2N0U3MkEzQjFBNjVGQTBFMERGMzFCMjQ1MjREMDgKKzoxMDU1MTAwMDFFMEZENTBGMjlCMTNDNzRDOEI1RDE1RjNEMEZDREM4NjIKKzoxMDU1MjAwMDA3OEVGRkZDNDA0QTdFMTFENTYzQUY5NjUyN0RGMjIwNzQKKzoxMDU1MzAwMEE4QUI0ODBFM0M1RjVERjQ5RUU5OUQyNEUzQkQ5MURFN0YKKzoxMDU1NDAwMENFQjBBMUZFRTJENjNCOThENDNBNjRENDc1RkM3Njg2MDAKKzoxMDU1NTAwMEVEM0NFM0VGOUU1N0JCNTcxMjcwN0Y0QkUzRTY3RjAyQjMKKzoxMDU1NjAwMEVCMjYzMzk2OTBBRDQxRjQyRkY0RDMxRjA0REQ4QzdFRUYKKzoxMDU1NzAwMDJBOThDOUU4QTc4MzMyNkIzNzA0MEI1OEZCNkNEMEM3NTUKKzoxMDU1ODAwMEZBMzcwNjhCMTlGRDdDNTA2MTc0MjgzODlEQjU5QjgyRDMKKzoxMDU1OTAwMDdFRjY3QzczNzAyRUEzNUYwODA2NThCQjM1Qjg4OEI1QkQKKzoxMDU1QTAwMDJGMDZFQjU5RkY0QkMxMDY0NkJGMTI1NDU5REIxRTVDNTgKKzoxMDU1QjAwMENEOUU2RjBCQjYzMjdBNDc3MDAzQTM3RjE1MENCMUI2NDAKKzoxMDU1QzAwMDIzQjg5NUI1QkYwOUI2QjNGRTlEQzEwRTQ2RUYwRTg2NTIKKzoxMDU1RDAwMDE5MUQwRTc2MzJGQUNENjA4NEQxRkI4Mzg3MTk3RDIwQTgKKzoxMDU1RTAwMDE4NjU2RDY3RjAzNDZCN0YxN0VDNjJGRDZGMDdBRjMwQTUKKzoxMDU1RjAwMEZBQkM3NkRGNUY5MjZGN0NBRkE2RDMwMDUzMTgxRUY0MUYKKzoxMDU2MDAwMEJDNzYxNkQ1MkQwNDhFNjJFOUEyQTE2RTQ5QTgxRjEyQTAKKzoxMDU2MTAwMEVENzE1NjVCNDc5QThDQzczNkU1Mzk4M0YyMzczNUM1NEQKKzoxMDU2MjAwMEU1RkI3NzY4RUIzRDlFMEM2QTEyQzZCRjQ2MkFFNjExODEKKzoxMDU2MzAwMDhBOERBOTEwNkE2MkVGNTc3OURFQkQ1MEMzMjVBNEYzQTUKKzoxMDU2NDAwMDdDN0I4MTI2RDc0MkNEMUY4QTA4OUYwNTBDOUY2RjdGRTgKKzoxMDU2NTAwMDlEM0E0OUFGOTM4MzQzMDJGM0YyQjE1RDlDNjU1MkQ5MDEKKzoxMDU2NjAwMDNEODEzRDk0NEY3OUZGQTYyMTgxMkFDMkVERTVGQTA3REQKKzoxMDU2NzAwMDBFQjBGNURDQkU3QzVBQTRDQzFBRUU3RjE3RERGRjFDMDEKKzoxMDU2ODAwMDE0RDk3RDY5NUZFQkQ1Njk3RkJGRDA2N0ZGRUUzMzQzRTcKKzoxMDU2OTAwMEU4MUM5QUZFODVDOEVFRDNERjkxMUM3M0U5N0VFNDkxODUKKzoxMDU2QTAwMDdDRkUxRUUzOTE3QzkzQTExRDk2RTU3Rjk4RTQzQzk1REEKKzoxMDU2QjAwMDU3RkZDMkMzQzg1MkIxMjRDRjQ1NzlFQjFENTQ1QUEzM0EKKzoxMDU2QzAwMERGOTc4MzJDQjFFRjYzNDE3OThCM0U5OUZDMjYyNjc2RDgKKzoxMDU2RDAwMDQ0REYwNTJBNkJCNzBGMEVBQ0EwRjE3NzYzMDE0MTc0NkMKKzoxMDU2RTAwMDYwQkMzNUJCQjdGRDI0Q0FCMzRBQjNEM0FBN0M5M0ExMkYKKzoxMDU2RjAwMDJEQ0RGMkI3RDA3QzI3RjIxNDgzM0NDQkIzNjRFREVGMTEKKzoxMDU3MDAwMDY0QkE5RTI3QjlGRUIxRUJEMjQ5MjEyN0E2NkZGRDVFOTAKKzoxMDU3MTAwMDYyRDUyNEVERkJBOTI1ODJGRTlFOUFFNzgzMzZEMEYzNUQKKzoxMDU3MjAwMDQxRDY1RkIxOENERkNGN0MwQkVCMzI3QTVGNzk0NDhCNTMKKzoxMDU3MzAwMDg3OTdFQjI1MTYyRjJCODQ2NDFGRTVEMzk3RUI5NzBERTYKKzoxMDU3NDAwMEE1RkQyNEM2Q0QwQTFDNjdDMjcxMTVDMEJGODdBODM4NDUKKzoxMDU3NTAwMDkyQzJGMDg1RjMwMUJENzdBQkMwQ0M5REVBQkZEQTJDRDUKKzoxMDU3NjAwMEZEREUyMzZBRUZDRkU1NTFFODNERUNCQzlERDYzNkFBQkQKKzoxMDU3NzAwMDUzMTEyNzlCNTkxQzFCMjdBQTE2QUM5M0RGMzE4NUYyQzYKKzoxMDU3ODAwMDA1OTFFMUMzMjJBMEJDMEJEMzExMUZCREU0MDUzQTBFNjUKKzoxMDU3OTAwMDZBQjVCRjhGRDE5RjIzQkU1RUExRjkyRUZFN0E2QzAxNDAKKzoxMDU3QTAwMDdCNkZCMjdCOUM0Q0ZBNkIzMkExM0RFOEJFRTY3NzIyNjAKKzoxMDU3QjAwMEZGNEU4MkFFRDhFOTNCMEU1NzYxMUJGQkNFOUY5MjA4OEQKKzoxMDU3QzAwMEIyRDczODA3N0IxRkIyNTc4NDg2NTc3Qjg5OUZFRjZBMTEKKzoxMDU3RDAwMDM4N0EyNzUzOUExRTYyRjMxQURGRjM3NTZBNzZFQ0Q0OEYKKzoxMDU3RTAwMEVDNUJGNkU2QzFBQzQ3NzFERURBNEU4OUQ1M0IzMDI2N0MKKzoxMDU3RjAwMDVBRThFRkU1RkJBNkJBODY0MzAzNzNFM0Y2NTFEN0YxMDcKKzoxMDU4MDAwMDAxRkYyRTBBQTI4NUYxREY0MzlERDJENkQ3RjEyNDVBOUIKKzoxMDU4MTAwMDFDODEzNjdCQkM3Q0REQjg3RTQ3QzNGNTQ5Q0FFQjY3OEIKKzoxMDU4MjAwMDU5NjVENzVEMzgzNDhBQUEwOTYzMUJGODg5OUI3RDU3NkYKKzoxMDU4MzAwMEE3N0Y1RjM3MUZGQ0FDNUQ4ODcwMjAxQ0ZCRDVGNUFDRTMKKzoxMDU4NDAwMEZFNUQwQ0VERUM3OTZERjFGREQ5NDRENzQxRDc5NDRDNTgKKzoxMDU4NTAwMEFBNUY1NjM3QkU5NTg5RDJEREQ5QkE3RTJBREQzRkNGMDEKKzoxMDU4NjAwMDBFNTVCRTQ1NkRGOTY2RTEyNEQ1RERFODE3N0ZBM0Y1MzkKKzoxMDU4NzAwMEEzNDI3RDBCOTVBNEY3QkMzNEE5ODVFRTc5Njc4OURDM0EKKzoxMDU4ODAwMDBFNzA4OERCMDE3MUE0ODhBOTNERjc4NzdFNzA1MkYzMDIKKzoxMDU4OTAwMDAzMjZCRkVFMDcxNTJCMzk3RUY0QkZDN0U4RjY4QkUyNkYKKzoxMDU4QTAwMDg3RkUzNjk4REU3RDk4QkJEODc3MjE3NUJCQURBOTg0N0QKKzoxMDU4QjAwMEFGQzU1NDc5OEFGMTc5QTE3RTNFRjNCQ0UwMjFDQzBCQ0YKKzoxMDU4QzAwMDg4RUZBQ0M0RUQ3RkY2NjgxMkZCQkI5N0IzMDJFMjYzQ0UKKzoxMDU4RDAwMDU0NEZEQ0VCNzlFNkE3MjY3RUVGRjZBODg4NUIxNEE5ODcKKzoxMDU4RTAwMDVFN0U5MkU5Njk5MTJEMzQ4MkY0ODRFNzMzMEMyNTVDNjUKKzoxMDU4RjAwMDFGNkY1RjM1OTJFRUZCMjY4N0IyMjk1Rjk1NUVCNEZBODMKKzoxMDU5MDAwMDlBM0M4NjM4MEZENzUyNjJGNzc4NEY0OEZDNUUyRDUxOEIKKzoxMDU5MTAwMERFMUU3OTRCRjE4MUNGMjg5RkIwNUE0MEE1Rjc0OUU4QTgKKzoxMDU5MjAwMEZGRENFRjhGNzFGOTNGMzUwNTMyNkYxNjc5QkVDMkVBQTEKKzoxMDU5MzAwMEU4MjE3RTU2RkY0Mzg2Q0RCNzU2RThCOTdFQjNCNjZFRjIKKzoxMDU5NDAwMEU3RTdCQzlFNTZCMzgwN0Q4RjkzMjg4N0UwRTZFQjI2ODEKKzoxMDU5NTAwMENBNjM0REU2NzJFOEU3NEU0Rjc5QjgxRDc0NzkwQTg2M0UKKzoxMDU5NjAwMDdBRjhGRDdEQjZDMkY2REQ2OEVBQzdFMkQ3NDc2MjYwMjUKKzoxMDU5NzAwMEU4NTAzQTJGQjVGQjMxQkQ4RUVERjQ5QzYyNzExREFFM0YKKzoxMDU5ODAwMDM2MERFMURGRjc4NkZCM0E0RkNGNzdEN0NGREVEODc5RjgKKzoxMDU5OTAwMEE3REYzM0MxQzRERUVGMDVGRDM2Qjc0NDc2OUIwRDNFNkQKKzoxMDU5QTAwMDE2Rjc4N0MxMTE1RDNGRUM5RUU5RkYwMTlFQ0RFRTE4MTEKKzoxMDU5QjAwMEIwMzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkUKKzoxMDU5QzAwMDFGOEIwODAwMDAwMDAwMDAwMDBCN0JDNENFQzBGMEEzQkEKKzoxMDU5RDAwMDFFODIyNTM4MTA2QzYyNzExRDBCMDNDMzA3NTZEMkY1NjkKKzoxMDU5RTAwMEMxNzAyNTUwN0YwOTEwRTcwMzcxMTYxMEE3MDI3MTAyREMKKzoxMDU5RjAwMDEwNDcwMzcxMTgxMEJGMDY5QUZEMEM4ODFGMDJGMTFEOTUKKzoxMDVBMDAwMDIwQkUwRUM0OTc4MEY4MkMxMDlGNDBCMjc3MTkxQjAzNUMKKzoxMDVBMTAwMEMzNUEzNkQyRURGRjgzRTRFNzg5NDA3NjM5MTBDRjI0QUMKKzoxMDVBMjAwMDIzMUM0NkYxRjBDMEYyM0MwQzBDREFCQzA4RkUzRTVFRDIKKzoxMDVBMzAwMDU0NzkwNTFFMDQ3QkI5MjA2NTc2NkQwM0VBMDcwMEU5RjkKKzoxMDVBNDAwMENENDI0QTgwMDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0EKKzoxMDVBNTAwMDFGOEIwODAwMDAwMDAwMDAwMDBCRDU3RDBCNzg1NEQ1OEIKKzoxMDVBNjAwMEI1RjAzRThGNzkyNTMzOTNDOTgzOTA0MEM0OTM5NzA0NTIKKzoxMDVBNzAwMDA5MzgyNDIxRjJBQTFFMDg0MkE0RDQwNkY0MkE1QUFFRjgKKzoxMDVBODAwMDBFQzgyMzg2OTA0NEIwMkRCNzcyOUIyMTA5MkY0MTFCNkQKKzoxMDVBOTAwMDE1MkQ1QUI0ODM0NThCMEEzNkYyNjhEMTA2RUVGMDI4RUMKKzoxMDVBQTAwMEM2NUJCNEQxQTI4MkQ1MzZENDVCNDUwQjQ5NDQxMTZGOTUKKzoxMDVBQjAwMEI1QkY3N0FEQjVGN0M5Q0MzOTMzNDk0MDZCRkY3QkMzNzAKKzoxMDVBQzAwMEM3QjdCM0NGRDk2N0VGQjVENzVFNkJFREY1REEzQjc2RTUKKzoxMDVBRDAwMEQ5QzZFNDJCMTlGQjAyN0ZBMDlDQTMzMEM2MDY0NENBOUEKKzoxMDVBRTAwMDUxNzc1RUJCNjg3QjA5RkNGRTk5RERGRkI4MTY2OTY3REMKKzoxMDVBRjAwMDk0MTczMzg5QjFEMUYwOUU2NTMwNTZDQUQ4OTU0RUY4QzcKKzoxMDVCMDAwMDE1REE5NUJENzBFQTBGOTdBNTMxQjY5RjI5Q0MwMThGQTQKKzoxMDVCMTAwMEMyNkE1OUVBQjdBMDlGRkQ5RjMzM0ZCRTk3NUY3MDY3ODcKKzoxMDVCMjAwMDc1QjhGMUJCMjA2M0U5OEM1REMxRjg3N0UxNkMyRENCRDIKKzoxMDVCMzAwMDU3ODgxNTI2RTM3M0RENDlCRjQzM0ZCOTlCRUFFMEZCNzUKKzoxMDVCNDAwMEIzOUZCQUU5N0IyQjFDNDZDOTNFOTc1OTU4N0NGMzQ1NTUKKzoxMDVCNTAwMDBFRjZBQjdFREM1MTIwRUFEOTBDMDY2NzAyREUyQzFBNjkKKzoxMDVCNjAwMEQ3ODBGN0QwREJFRjExQkMwNzU0ODA1NzhCMzNCRTEzQkYKKzoxMDVCNzAwMEUwNEY4QkMwQkY5RjVEOUJDNDBBMzlGQzdBNjkwNEZFNkQKKzoxMDVCODAwMDBCODU4N0U2MEY3ODZFQUNEN0JFOTk5N0NGRDhCQTdBRDcKKzoxMDVCOTAwMDQ2RTVEQTdBMjc5NUFCRUI3RERGQ0NCMzMxQjZCMjNFODIKKzoxMDVCQTAwMDgzQ0E0NjE1M0UwMTM4MUFCN0IwNTAxMDUwRUYyRTg0MDQKKzoxMDVCQjAwMEY2NDZGRkYwM0YyMUNGNjlBQTNCQjM3Q0E2QkEzRDBENjQKKzoxMDVCQzAwMEZBMjk4OEQ0NTVCNzY2QUEzN0JBMjczOTAzNkUxQzFGM0QKKzoxMDVCRDAwMEU2RUVDMEYxOUQ1NDAyOTg0NzMzMDAxRjk3OEE3OUJBQzgKKzoxMDVCRTAwMEI0RTAyQzA2RUI5MUU3QjY2QjIxODBFMzUyRjc4MkU5MzMKKzoxMDVCRjAwMDZDMjRCNkNCMjdCQ0Q5MDU1RTk3NjQzNjc0MjBCQzFGRDUKKzoxMDVDMDAwMDQzM0IwNkYzMURFNjlFRjIzRUYzMzJGNjlGRDk0RkYwN0EKKzoxMDVDMTAwMDc5NkM2MDZDMjAzQzVGRkRFRjc1MUQxMkY0QjczMkQzRDgKKzoxMDVDMjAwMEFFMzU0MDdGNEZDMEY4NkIxQzUxNzhEQ0FBRkVCOTAzM0IKKzoxMDVDMzAwMEZBNzRDMjNGQzRFM0QwOERCQzFFOTkzN0Q0QTNFNjMxQjkKKzoxMDVDNDAwMDhDNDVCRENGOEVGNDczQTFGREU2Mzc5QkVCRDY3RUYzN0EKKzoxMDVDNTAwMDM0N0QxMkQyQUJEMTZGM0VBQjY4RjBCOUZGRjdGNjdCNjMKKzoxMDVDNjAwMDI5RTAzQzM1MjVEMkFGMzE0RUJGRkQwMjM5NTRDMEI3RDMKKzoxMDVDNzAwMEY5MUI1OTI4OUMxRDNCNEU5RUU2MkYwRkMyRkJCQzhEODUKKzoxMDVDODAwMDJBMEI2NUYzRTc2OUMwMTc3OUZDNTdENkU0OUI5NDEwOUIKKzoxMDVDOTAwMDI4OEM4NTg3NDU4RjkzMTM1OTk3QkMzNEZCMUMxOUU4RDIKKzoxMDVDQTAwMDI5MkZFM0ZBNDUxMkQyNTU3M0Q0RkFFNjMwNjZGMENEQzcKKzoxMDVDQjAwMDhGRUE3RDRDMUZDQUQ4RERGNTA1NTQ2RUE5RjdFOUM4RjcKKzoxMDVDQzAwMDI3NzdGRjVEOTlENTUyMThDQjhGN0YxMUYyRUExRTFCMDMKKzoxMDVDRDAwMDIzRkEwQjNFQ0U0MjhGNEJEODVGQzVBQzM5NTA1RjNGQTUKKzoxMDVDRTAwMDJBQkRFODJFOEQ4ODVDNDY3OUU2MTI3NEJDNUVEMjZFQzEKKzoxMDVDRjAwMEM4QzFGNkFGMjgwQ0U1QTA5NTFGRUVCNkU5RDNCMEJGM0EKKzoxMDVEMDAwMEI1QTM2NEE5MDFGMTlDQzdGOTIxQ0YxNjc2RTY2MkJGNUQKKzoxMDVEMTAwMENEMzlBMzgyRDg4RkZGNTVFMjg3QkNGQzRCMzQwNUM2MzIKKzoxMDVEMjAwMDFEOTYyN0Y4NjFGNDgzNEU5NDg3M0RGMzVGOTZBRUU3QTYKKzoxMDVEMzAwMDE1MzM5NjY0QTEwM0RGNzlEMjgxNkY0MkRGNzRGMDc1NjkKKzoxMDVENDAwMEYxQzNENzQ3NUZDRDdERDJENzdBRkY3REVGM0JFMEZEMzIKKzoxMDVENTAwMDk2M0NCQkE2NjRDN0MyOTU3OTcxMzhBM0MyMUQ0QjZGMzAKKzoxMDVENjAwMDc5Nzk4MkNFRkM3REQzOTlCNTdDQjAzRUM0REUwMTFBMzAKKzoxMDVENzAwMEJBQkYzRTgzRThFRURFN0E4RENBQjU0ODg3MzBFRjA3QkEKKzoxMDVEODAwMEIwRTk1OEE4MjMxREUyQjhENzE1NTFCREQ3N0Q4QkFEMUEKKzoxMDVEOTAwMDIwQkE0QzlGRDVDQzUwRkVERThGRjQzOTBFODc1QkE5MUMKKzoxMDVEQTAwMEVCMTM2MEFFNzlBMjBFNUJBNDBDN0JDMEJERjg3RTEwMzUKKzoxMDVEQjAwMEQ1NzVEQ0NBRUU5MjhDRjZDRjA2NzVDMDc3OEE2ODNGM0YKKzoxMDVEQzAwMDc1QzVCM0MxNDZGOEZEN0UxN0FGNUZCREEyNTMwRjY2MjAKKzoxMDVERDAwMDQ1N0QxRjVDQTdFQjU5OTFGNjUwMEY0RjUyQTNGQUMzQjQKKzoxMDVERTAwMEZFMEJBM0UxMzk0OEVEOERGRUU2QUYzOEExMDcwMUJFRjkKKzoxMDVERjAwMDdCNURCQ0JGQjUyQjhFRkQ1M0ZBNUYyQjA1MzI0MEI1RTIKKzoxMDVFMDAwMDYwQUIyQ0ZEQUNFREE5REZBQjIzMUU4QzcxNzJBNDVGREYKKzoxMDVFMTAwMEU4QzFFOEY3QzE2Nzc0REQxRDc5N0ZCOTc0NkYxMERGRTEKKzoxMDVFMjAwMDZGNjQxNTc5MTJBQzQzRTZGNDhBMEMwNkVCNkZBRjY4MjkKKzoxMDVFMzAwMDBFRTI5NkRCMDM5RkMwNzc2NDdFMEYxMkJDQUUwQ0ZFQjEKKzoxMDVFNDAwMDdFQzQ4QURGRUI4RDUxRUIzMzY5QzVDQjQxODREN0QwNUIKKzoxMDVFNTAwMDczMTQ0MUFGRjIwQjU5NEI4RjAwQkQyQTQ5NzYzRkU5Q0QKKzoxMDVFNjAwMDFCRDcwMUQzNjRDMjc4QjMyQTk4MDY3MEM5NjkxNTBDOTAKKzoxMDVFNzAwMEU1ODE5MkE2QkUxQkNEMDcwNkZEMDE5QzYzMDlDRUM5MzQKKzoxMDVFODAwMDE1QjM3QTgxMzMxODBEQTcwMTQ3N0Y3MDFCNzBGNDRFNEMKKzoxMDVFOTAwMEE3N0M3QzJCM0Q0REJBNjZDQ0VGMjZDMEZFNkQ2RkI3NUMKKzoxMDVFQTAwMEY5NTE1RDQ4NDUzQzQxNTdFQ0YzNUI4MzM2Nzg5RTNBQTcKKzoxMDVFQjAwMDEzNzBBREQxQkFDRDYyQjlCMUZEQTY0RDFGQzQ0MjUxMjgKKzoxMDVFQzAwMEZCRjczRjdBNURGM0IwQ0VGMTE2ODg1RTVGQThDRjk1MDEKKzoxMDVFRDAwMDA2NDRGMDM4NTZCNEIzRDI5RjMxM0Y1QkNDRkNBRTM1QUMKKzoxMDVFRTAwMENEOEZBOTgxOEMwQTRGRkZGM0JCRDdFNTlGNTVFMThFN0IKKzoxMDVFRjAwMDZERjc1QjQ5QTJGMTI3NEQxOUYzNkRDNkM3NjMwRTkwOEMKKzoxMDVGMDAwMDVGQzkzODVFNTE2NEJDRTQ2OTMwMUU3NkE2MzZDNzFEOTEKKzoxMDVGMTAwMDJGNjUzMjhDRTdGQ0ZBRjA2OUU1NDcwMzVFN0IwQ0JDMjkKKzoxMDVGMjAwMEI3OUFFMDVENkIwM0JFOERCM0ZFNUYzN0JDRTdDQjdGRjYKKzoxMDVGMzAwMDJFOTBCRkM0N0Y3OTdERjNERjNGQkFCRjY0RkMxNTNFNkUKKzoxMDVGNDAwMEY5NDg2NUUxMkIwMTVGNzc1Q0U1MjRGRERFOTA3M0ZGODYKKzoxMDVGNTAwMDZDN0NBNUUyQTdCMDdFNzdCQzU0N0NFMjRBMTkyQjQwNEEKKzoxMDVGNjAwMEQ3MjMyMkUzRDc0QTFBRUQ1N0JERDE3NzZGRjM4MTBEQkUKKzoxMDVGNzAwMEQ2RDRDRkZGQUZGOUY0ODZEN0FGNUIwRTlEQUY3QzZENjMKKzoxMDVGODAwMDc4M0Q4MTIxM0ZBRDJDNjQyMTA3RjRCMUIyRUQyQUIyRjYKKzoxMDVGOTAwMDM3NTcxRTI5MUJDOEEwNUZEQjlBRTE0Qzg3NDkyNTYzNTAKKzoxMDVGQTAwMEZGRDBERjRBNDNDRjk4NUNEMjRGRkY1Q0NGMDBGQjRFNUYKKzoxMDVGQjAwMDZGMDJBNTZCQjdCNzgyRjRBMjk1MTJBM0VGRDc4M0RFNjkKKzoxMDVGQzAwMDE2MDIzREE2RTQ5NTBEQ0UzOTU4RjdFRjcwQ0VDMTcxOUIKKzoxMDVGRDAwMDZEOENGNEU5OTI1NzBFRjlDQTgwQ0U1RDIzNTI0NjI5QTIKKzoxMDVGRTAwMDQwMDIyQjVEQzZGM0EzRTVBOEU3REU1NTI4OUU3Qjc4MkIKKzoxMDVGRjAwMDdGRjBCQzAyREIyNzg4RjZCREMxOTU5MDA3RjA0NEFENjkKKzoxMDYwMDAwMDdGQTJCRDM5NTAxMTQ3N0ZENzY1OTlGMEYzOTBEMEJCN0YKKzoxMDYwMTAwMEVFNDZCRDBCMDQ3MjYyNDI0QjAwRjU2QTU3QkE1RDdCRDcKKzoxMDYwMjAwMDRDOEFGREVFMjY1OTEyRjMwNkJEMERFREVDMTE1MzMyRUMKKzoxMDYwMzAwMDUxQ0YzQTMwRTM4OTE1NzY4NEFGOTA5MTVDNzdFNTg1NEUKKzoxMDYwNDAwMDc0MTlFQUVFMDJDRURCMEY1OUY2N0QzN0FFMjFFOTVEMTkKKzoxMDYwNTAwMDk5NTI5OTRBREY5OUVBNzdGN0U4MzFEOTEzNTE2RkYzRUEKKzoxMDYwNjAwMDE2RjBGNzY1MEQ1NzRDNkM4QzdFQ0ZGQzEzNzFGRjM1MjUKKzoxMDYwNzAwMERFMDcxQTRBRTk3REE2QjNFMkQ4MDQxODNGMTNFNDY4QTQKKzoxMDYwODAwMDIzRTAyQjUzNkQ5NkVBNjg1REQzRTJFQThGMUJFNjNCNzMKKzoxMDYwOTAwMDY3ODUwMDg2MEQzMzFFQ0M5RTFGNjczRjgxRDUzNEYxODYKKzoxMDYwQTAwMEU5QTA3OTY2M0U3QjQ4RTBFRjZFODFDRjRDRTRGNUQxMDQKKzoxMDYwQjAwMDgyMEU0MUJFQjk3OEQzMUVGOUU2MUFDQUU1NUI0MjQxQTkKKzoxMDYwQzAwMEYzMEFDNEY3QTA3OUNDOEZGQUY2ODYxOTRGOTBERTZBRUUKKzoxMDYwRDAwMDhDRTMyQTMwQ0JCOTRDRDUzQ0FGQUY2QjNFMUI5OUZFNUQKKzoxMDYwRTAwMDFENzk3NEVGRkQ1QkY5NkMyMzBCREM4QUVEMzNDNTdFMDMKKzoxMDYwRjAwMDlFNTAxMDkyMDI4NUZEQ0ZERjNBREZERUU2RkQyREM0MTMKKzoxMDYxMDAwMDI3MUZBNzRFMUUxMDNCQ0UzRjBCMkY5OTZFMThBN0U0RkEKKzoxMDYxMTAwMDFGM0Y0RUMyM0NCM0JDM0M1RkJDQzMzRTIwRTg4QzI5NTEKKzoxMDYxMjAwMEI4MUY1OEVEQUI4NDEyOUZDNDY0QUFCNkEzMUQ0RUYyRUIKKzoxMDYxMzAwMDFCRTBGNkIwRTZGMjRCODBERTUyMkI1NkREMkU4M0RERkYKKzoxMDYxNDAwMEVDNzlFQkVBRjdEMUNFNEVFRDk4NDNGNjc2NTM2MTUxRjgKKzoxMDYxNTAwMERCMjQ2ODk3RTRGN0NEOTg0Mjc0Q0EwOENGNkJCMTMzNUIKKzoxMDYxNjAwMEUyQkJBQTE1MTM2MTVFOEQ4Q0YzREQ2NkY5OTY4OTVDM0UKKzoxMDYxNzAwMDNGRDA2OUJEQkYyQjcwMDYyQkFFQTk1MDQ3NzY2NTM5NUQKKzoxMDYxODAwMEYxRTY2MTY3NjEzRTZGRTkwQjQ3RUNGN0JEQ0RERjE2QzUKKzoxMDYxOTAwMEY5NEVGOEZGOTY5MERGQjRCRkVGRDg3NDNCRjkxMTgzNDYKKzoxMDYxQTAwMEYwMEZFREQyNjQ0QjNGNDlCQTNERTI2NzY0ODhBN0E4N0YKKzoxMDYxQjAwMDNBQkNGRjZEMEY1RkRGRkU0RjE5Q0ZDN0VFNzM2QTQwMjkKKzoxMDYxQzAwMDBBQjYzQ0Q5ODdGNjdBMTJGMzI1QUIyODY3Mjc4MzQyQjMKKzoxMDYxRDAwMDAwQTJEODk3RDYxRDk0QjVGRUQ3QTU4OUIxRjI5NjQyRjQKKzoxMDYxRTAwMDRFNzczM0EyRjREQzBFOTlFQkM5NjkzMzI3NjdBRjg0OEQKKzoxMDYxRjAwMDdFQ0Y5NjcwQkY3MEFBMEZGRTE3QzVDRTY3MURFQzZCRTEKKzoxMDYyMDAwMEUxMjgzRkM3QkFDMkM3ODg3RjFCODE5RTcyODAyRjgyNTgKKzoxMDYyMTAwMDg1MzJGOUI3RDdFNkVERjA0NUYzQjVBQzE4RkU2RDJCMzYKKzoxMDYyMjAwMDdEMzA0RDJEMTVGQTFGRTA0N0M5OTM3NUQ3QzhBRjRFODUKKzoxMDYyMzAwMDFGQ0E5N0E0OEZDNEU5NTFERkIxMEI1RkFGMjRFNUMyMzkKKzoxMDYyNDAwMEU4RTNBQjhFNjdBQzZCMkM1RjcxRkQyNDZERTYzQzI3RjkKKzoxMDYyNTAwMEVBM0JBQjMyNjYyNkM1OTNCM0JEQUZFQjdEQjRBRUE4QzcKKzoxMDYyNjAwMDRGODRFMkY0OUZBNjQ4NzFGRDM5NTY3RDlFQjFBNUE2RTQKKzoxMDYyNzAwMEY1NTIwNjk2Q0VEQURDRDdCQUE1OTlGMTYxRjRFQjVBNUQKKzoxMDYyODAwMEE2NjhGRjg1QzI0QkY1OTE1RkRDMjlGQTVCQUJERDE3OTEKKzoxMDYyOTAwMEM0RkRGMzJDRUVFRDgwMEZBNTc5NTQxOEY1M0Q5NkM3OUIKKzoxMDYyQTAwMEZDOEZGMzI2QTQ4N0I4MzQzRDQ0M0EyNENBREREMjA4RDMKKzoxMDYyQjAwMDdDRjYyQ0Q5MzQ5RTlBOTY2MEMyMzc5QjA1REE3NjE0MDgKKzoxMDYyQzAwMEZDQUU2NTc2ODJDMzg5RTNDMTM4OEEwRjNBOTREMEZGNjkKKzoxMDYyRDAwMENGQzIyRTJGRjU0OEZERTE1MDVGRTQ2MkZENEUxMzFENDUKKzoxMDYyRTAwMEFDQ0UyQThBQkJERkE5NjI1REQxNkNFNUY0N0FFN0Y5MEUKKzoxMDYyRjAwMEM5MTdFQjc4RDc5OUUxM0RFRkVGRENBQUY2NkUxQ0ZGRUEKKzoxMDYzMDAwMDcxRUM3NzJBN0JEN0MwMTcyMEYxOTYxRTdBRTdFQkI0QTEKKzoxMDYzMTAwMENBQzZGNjQ4NDkyMDBGMzJBRTY3MDEwREVBRjgwQTM2QzAKKzoxMDYzMjAwMEVCMzU1ODhFNDUzQTJDRjI5MTVFQjA1NTUyMTE0RTYyQzMKKzoxMDYzMzAwMDY5MERGRjczN0RCRTEwOTU1QkU4NEY3NjA2MDg0RjhBQTYKKzoxMDYzNDAwMDVCNjdENDVFM0IzRjdERkY5Q0QwQUZEMzg0M0U2RkJDODgKKzoxMDYzNTAwMEZGQTE2MkE3N0U1NTU2QzFEMDZFM0VGN0Y2RDQwQ0VBNzcKKzoxMDYzNjAwMDU3ODc0N0E1MTEzOEFDRkQxNjJBODExRjJBMDM5MEVDRTgKKzoxMDYzNzAwMDM4M0NGODAxRkEwOTU4NDcwMUY5QjVGMzA1Q0VDRTNEOEUKKzoxMDYzODAwMDMwMzM4OUY1QzE1RjBGNTlGOEVCMjE4OUMzQzkyQUNFOTMKKzoxMDYzOTAwMENGQ0UzODA3NjNCNjYzN0IzNTkwNDBGMUIyOTMwNUM0MjYKKzoxMDYzQTAwMDA3Qjk2MkZDMjdENkNGNERDMEYxOUZEOEQ4Mzc5RjFCQzUKKzoxMDYzQjAwMDcwRkNCNERFQzlDMkEwQTc4NkVBN0Q1NDFBRUY0M0MyQkUKKzoxMDYzQzAwMERGQkY1OUQ4MzFDNkYzNzM4QTRDNzBFQzEzN0NGRjg0NUQKKzoxMDYzRDAwMEIzMjI4MUZDRTcwNzZGOUMzNjBDRjgyQkU3QThFMjQ3NTUKKzoxMDYzRTAwMDFENEY1QkNCNTJGQTFBM0YzQjY4RTYzN0E2Q0NFRTEzNDMKKzoxMDYzRjAwMERFNjU2RjREOUM3MTI4OEExRjdGQTE3OEQyREUxRDBFNEQKKzoxMDY0MDAwMEJGNUNDRTJFNDdGQUVCRUZGQjczRjVGQThDNDNGOTVGRDYKKzoxMDY0MTAwMDFEMkY5Qjg1RkQ3OUFFRjE3NzJCNDhDRjA5NUY0OUZDOTUKKzoxMDY0MjAwMDk5MjNFNDQ4Q0UzQzJFMEY3MkFCNTk0ODQzRkVGREZDNDUKKzoxMDY0MzAwMDBCMTY0RDFGNjA5OTEwOUUzMkFCNTU4REZDNEQ0Qzc3NUQKKzoxMDY0NDAwMENGODFGNzQzQzVEQjRDNjVCQThDNUJGODUwRDRCRjUwQTUKKzoxMDY0NTAwMDhFNkNFMkZFNzNDM0NGMEZFQjdFMTdDQUI5Q0RBRjI5QTYKKzoxMDY0NjAwMDY0MEJFNzU1NkEwREI4REUzOUVCQ0RGRUZEQzEyQ0NBRDEKKzoxMDY0NzAwMEVGOEVGRTdBQTFENzY1NUFGQ0Y4NUY3NTFEM0E3MDFENDQKKzoxMDY0ODAwMDEyRkZGOUVCMTA1MjE5RDE5RDUxRDcyNDU2MTE2RkZGMEQKKzoxMDY0OTAwMEZCNDREMEE5QjZFMjEwQjc0M0MwRjg3QjI3MkExRTAxRkYKKzoxMDY0QTAwMEVCOTk4MjlCQzA0RjgzRjc0RDQ0QkIzNUI4ODZGOUYzMTcKKzoxMDY0QjAwMEUzQzg0QjlCOUE0ODc0NkY2MzdBNzgyOEZBMEZFNjVDQkUKKzoxMDY0QzAwMERGQjExN0U1RDUwNDY2OTI1RjcxRTQ4NjREQzVFRkQyNjIKKzoxMDY0RDAwMEI4REMwODA1NjdGMkYyNzM4NUUyNjVGOUVCNTkwOEUzNjkKKzoxMDY0RTAwMDVCOTMzN0Q0RUQ0N0JGNUU2NjM1Qjc5QjMzRDcwNDI1NDIKKzoxMDY0RjAwMDNCRDQ3M0VBOTgxRjg3QzlBRDY0QkNGRDZDMTZEMjc5OTIKKzoxMDY1MDAwMEJDRTY2ODA2RDBDRDEwNDEzNzQzMEM3QTU5NjZBNjk3OTEKKzoxMDY1MTAwMEMxNzU5NkI4RDAxQTczN0QyMEQyMDU3QzM3RDA0MjJGMzIKKzoxMDY1MjAwMEQ2N0U3MjM0NDZGMUI4QkNGNTMyOEYxN0NEMzJDNzdEQjYKKzoxMDY1MzAwMEYyNTlGN0ZCM0YwNzc4RjMwRkI5RkQ2MTE2MUI2RkIyRjUKKzoxMDY1NDAwMEY2QUZCMjQwMDFFMjY1RjcwRkRERkY1OTAwMTNGQ0Q5NDkKKzoxMDY1NTAwMEZBNDlBOTg4MTc5MDI3NDkyNDRGMkFFMkRCM0QzMUY0RjQKKzoxMDY1NjAwMDZBRTgxQkJEQjQ4RkM4NEZERUFFQjdGN0FCRjJEMzk3NjYKKzoxMDY1NzAwMENFMDUzOEQ2N0E3NDQ2RTMwN0IzNDlBRTJCMjI1RTc5NEUKKzoxMDY1ODAwMDMwRjM3QTY3MDdGQTZEREM0NTI0REZGNzYzMURGRDNDQzUKKzoxMDY1OTAwMDE5OTcwQzhDOTZGNzhBRjAyMzE5RjU0NkUxNDdCMjhFQ0QKKzoxMDY1QTAwMDM3NTVFNTdBRjA3QjRDOUY4QTc4MThFNTA4NjQ2MDVDODMKKzoxMDY1QjAwMENGOTY5MUJFNzMwRThDNjdGMzgxQkUxNUU3QkJCMTZBQUYKKzoxMDY1QzAwMDAyOUZBRkE2RkUyRDFBRkZCMDcxRkI0ODFFMzJCRTFGMDAKKzoxMDY1RDAwMDMzNzdDQTc5RTFBMzQ0MEREQ0E0NDIxOTlDMDQ2NjA0MTQKKzoxMDY1RTAwMEQyN0YwRTBCMzVFMkZBRDYzNUYzRkQyREQyRUUxNkQxNjEKKzoxMDY1RjAwMDJFODg3OTA1M0RFRDAyRDA2RTg0QTlERDNDOUMwRkI0NTgKKzoxMDY2MDAwMEQzNERFRDJBNjJEQUREMjZGQTYzQTY3MUY1OTg3MTZCMzcKKzoxMDY2MTAwMDQ0N0ZBNENGRjVCNEYzQzdGNEI3NTRCNDIzM0RCMEE3NzcKKzoxMDY2MjAwMDlEMTZEM0RGMzIzMUFFNkU2QUU3OEI2OUY3RUYwNjdDRDkKKzoxMDY2MzAwMEE2NzE5OTc5REM5RUY3QTU3NkUzM0RGOTYzMEZFNDRGRTcKKzoxMDY2NDAwMDIxN0EzOTk0M0ZBNTdDMkU4Q0IzRjQ0NTFCOTcxMTVCQkUKKzoxMDY2NTAwMDc5M0U4NzQxNTdGQjQ1QkIyNkE0QUI0MkNDNUI2MTYzQzcKKzoxMDY2NjAwMEFBMjk0Rjg1RTdBRDM0QkE2NzNBMDM1MUNGN0JFOENBMTAKKzoxMDY2NzAwMDNERDMxN0ZGRjk1QzUzN0I3NThEOEJFOUM1RjQ5Q0RBMkMKKzoxMDY2ODAwMDM3RkQ1RDExRjFBQTFGNEM0MjdGRUJFQTM0NTlGOERCNkMKKzoxMDY2OTAwMEFFNjlEMDU1OTA2MzAzNTQ1MzdENEQ4Njc4NkZCQkE2ODkKKzoxMDY2QTAwMDgxMDI2MjIyM0UwMkIyRjI5Qjg1NTFGQ0REMzNGRTNGNDUKKzoxMDY2QjAwMDBCN0VFMTNGOEVDMDNGREIwMkZGNkMzM0ZDQTJFRUNDRDEKKzoxMDY2QzAwMEU0RUZENTk1QjMyN0UxN0MwQ0ZGRjJEOUE2RTUwRDQxQTcKKzoxMDY2RDAwMEY3RkZFNkY5NTU1OUU2NTc2NTk5NUY5NTY5N0VGNjk1OTYKKzoxMDY2RTAwMDU1OTM4Mjc5RkY5N0U2QjdDQzMyQkY2NTk2RjkyRDMzODMKKzoxMDY2RjAwMENEQ0ZCOTcyRDkwNUFEOUZCNURERERCNjY2OTJCNzZCNkEKKzoxMDY3MDAwMEYzNUYyN0ZEN0ZBRDg4RTMyNkFDRDQxQjU2RTA3QkUwMkEKKzoxMDY3MTAwMEVENzZFQTRGMjNGOTNFOEFFOTlGQTMzQ0U4RUZCQjQ3QjkKKzoxMDY3MjAwMDU0OERFNDgyRDMyMzkzNUM2MEY5RjY1MDdFMzY4NzZCRjgKKzoxMDY3MzAwMDI2Qzg4NUU3NTQxRjk3REYwMkNFRDcyQ0Y1MEYyRDc1OUQKKzoxMDY3NDAwMEY4RTU2RkI4NkZGQTk4NjE0NzVBRTQ3QzNGRkJEQUNBMDQKKzoxMDY3NTAwMDRDQkU5RkFDRjJGOEU1RTg3RDREMTVCODM5MzhBMDk0RjEKKzoxMDY3NjAwMEU0NEZBMzhGQ0I5RkZEMDM4NDNDNEE4MzdEOERGQzQ0ODMKKzoxMDY3NzAwMDE5MjRBRjZDNDI1RURENTdDRkYzRDg5QTQ1N0U1MDYzNDMKKzoxMDY3ODAwMDVBMTFFMUE3NTlEODBCMkM5NDY1REEzNzBGNEM5Q0QyREIKKzoxMDY3OTAwMDg2N0VBQjMzNDc3OURFRTIzQTFCRDdDNzU2RDYzMzlEQTgKKzoxMDY3QTAwMEU4QUJERTQ5Rjk0NUZCQTBERjAwMzQ2ODA1N0QwRkNCN0YKKzoxMDY3QjAwMEU3NDFERkMzNzI0RjdEMDY5NUJGQUNEN0E4REMwMUUzOEMKKzoxMDY3QzAwMDYyRjk0Q0JEOUYwNTYwRkM2REY1NjNBOEZDMzFFQThCNTYKKzoxMDY3RDAwMDUwM0UyMEY0QzUyQkQyNjRGMjU3NkNBRTg3MkQzMzlGMDgKKzoxMDY3RTAwMEY0NDgyQTFGQTlGNzhENTU2MUJDOUZENDY3NTBGRDIzM0IKKzoxMDY3RjAwMDY5RTY1ODFCRDlBRDFEOEQ0OTAwRTdFRTU3RjMyODVGQjgKKzoxMDY4MDAwMDY5NDI5QTRBRkIyRjUzQzM0QTUyNDlFNEI5ODFENzhGNTAKKzoxMDY4MTAwMEE0NDk1N0UwNzdFMzMyNjRERUNFMTk2QUY0QzY2RjU3QjUKKzoxMDY4MjAwMDg2RURDNjY0QTgwNDBGNzMwNzE1NkY1QURDNzZFNTM2NEIKKzoxMDY4MzAwMEMwNEJBOTVCRjRFNzBCMzQ3QUUyRjdGNzJENkM1N0U0MTEKKzoxMDY4NDAwMDE2RkRBNTY5OERFRUY4RkRDREM0NzE0N0ZBMzgxRTU4QzYKKzoxMDY4NTAwMDQ2NDc0MzYyRkM3NjM3NjBCQjQyOUY5ODZGNTY1ODRFNUUKKzoxMDY4NjAwMDhDM0ZFRTZDMUMzNzI1QTUzOTgwRjFBRDJCNjczM0QyRjgKKzoxMDY4NzAwMDQ3NkQ2OURBNjYyOTJBM0UxNDFBNTBDMTY0QTBGMzk0NjAKKzoxMDY4ODAwMEQ0RTYzQTZDRjc4RDgwOUZFNUMwRjg5QUQ3Q0Y2NEEwMjQKKzoxMDY4OTAwMDY3OUIxQkRFMTc2MjRFMTM4RjQ3OERCRjBFREVBMzNFMzQKKzoxMDY4QTAwMDhDRUY0NzQ0QkRDN0VGQTExQzNCNEI3QzlGNjQ3RURGNTAKKzoxMDY4QjAwMEEzOTdBRjYxM0Q3OTNDOThCQzY0NkIzMkQ3OTM2NUNFQUEKKzoxMDY4QzAwMDlGQ0I1NzFFOTg4NDdDOUY2Q0U3RUY3RjhBNzVENEI3NjcKKzoxMDY4RDAwMDk2MzM0MzFFRjFGNjA5RkNGRDhGOENGNjVFRkVGRTE3MjMKKzoxMDY4RTAwMEEyN0Q0QTBBOUZCNzZCOEEzMzg0NzFCMTQ3QkU3QjQ5NDgKKzoxMDY4RjAwMEU2RENDMkM4N0MyRkZBNUVDMUIwQjk1MUYzN0JFNDdCMDEKKzoxMDY5MDAwMEUzMzJFN0JBMjNGM0I5RThGQjEzODZDREVEQzNFRTQ5RDIKKzoxMDY5MTAwMDJEOTc3QjcyNjQ1MTZFMjUzNzE3OTJGQzFDRTVBODIwRDkKKzoxMDY5MjAwMEI5MzM2QTYwQTk4RUZDQUNBQ0U3NzBGRDg3RURBRTg2MkEKKzoxMDY5MzAwMDg2M0M4MjJCODhGMkM2ODBFQjI3OEJDRDcwMERBRTMxNjIKKzoxMDY5NDAwMEMzRjU5MzFBMzM1QzgzNkJGQjg2NkI5RDhEQ0JCNURFRjEKKzoxMDY5NTAwMEUwODNGMUY1RThGMTFGRkQzN0YzRjg0MzdFNjAxRUZGOTkKKzoxMDY5NjAwMEQxMUY5OEM3MUY3MkU3NTcxRTNGMUNCRDJFOUI2RTM3NjUKKzoxMDY5NzAwMDhGOUZCNUM0M0NGRUE2MjVFNkYxQjM5NjdFQjVGMUZGMjgKKzoxMDY5ODAwMDUxRkE3ODkyMkQ3MEM0MjZGNDVEMjU1QUVGQUMwQjk4MUQKKzoxMDY5OTAwMEY0NTM2OEY3OEE2ODE3NTRBMkY1RDg0MEMwQTQ5RjQyMDAKKzoxMDY5QTAwMEJCRDc2RDQyREYzNUI1QUI4ODY5RjcwN0QxMUYzMzhEOTMKKzoxMDY5QjAwMEFCQzc4Q0RCMjFGQTBCQ0JEMUZERjk2M0ZBRkI4QjY4RkIKKzoxMDY5QzAwMDE3OTRBM0ZCRDM2MkZBRkJDMDgwQ0ZENENFMTdEM0FFMEIKKzoxMDY5RDAwMDRCQjQ2M0E2NzE5OTc5NUNGODI5NTBBMTlGRUZCMzA0NzkKKzoxMDY5RTAwMDNGRkE0Nzk2NEQ1RTQzNzFBRjgxMkMyMEExQkZDRjk3RjAKKzoxMDY5RjAwMENBNDYxRDgyRUY1OTJFQ0ZCRjRGOUVCMkVDNjJCNDNCMDgKKzoxMDZBMDAwMEQ3MjQ5QkZENUNFOTc2NkU5RkQ5RUMwQTk1QkU0NDU2NkYKKzoxMDZBMTAwMDQ3RjkwMENFNjBFNjhDQTg3QzhCNkEzQkRGQ0Y3QURFM0MKKzoxMDZBMjAwMEJCODM5OUQ3NDZCRDFGMjhCRTVGMjNFMkQ0NjlGNkQyNDcKKzoxMDZBMzAwMDQ2OTQyQkJFQzFEMDNFOEVCRjIyNTM4QzZCQkM2NzY5N0YKKzoxMDZBNDAwMEZFNzYxREUwRERGOEFGMzM0N0EzQkYyODMyQUU4REI3MjkKKzoxMDZBNTAwMEJCNTg4QzlCMTUxRkFFMzVEOTdDREM0NTM4NkUyMTNFNkEKKzoxMDZBNjAwMDM3RjQ4QjYwMjZFMUQ3Qzc0QkUzRjk4MzlFRUY0OUZGRUMKKzoxMDZBNzAwMDA1Nzg1OTNERDkyOTJCNDlGMDdFM0RGNzZGMUE3RUY2RUUKKzoxMDZBODAwMDY0N0I5RDEzRjM3NjFCMkY5MkQ5NjNEODJFQUI2RjNGOTcKKzoxMDZBOTAwMDRFNTNCREQ5REZBOUZBMkE3NEI0RjcwNjU1RkE4QTE0MDEKKzoxMDZBQTAwMEQ2RkI3NzBGOTdDQkU1RjFFMjBEQTNDNUJDOUEyQTI3NTkKKzoxMDZBQjAwMDM1RTdDMUY4RUM5MEQ5NkYwQjg0Q0RBMkYzNjEwQTk1NEMKKzoxMDZBQzAwMEMwNjg3QjNDQkY2RDUzODEyOUFGM0U3OTUwREY3RURCRDAKKzoxMDZBRDAwMDQ2QTE1RkY0Q0MwMzNBOEFCNzdFMzcwQUY4RDhDNjAyREIKKzoxMDZBRTAwMDkzOUU5NTlDMzI5M0Y0QUJFNDg2QUI5REJFMzhERkFEQUMKKzoxMDZBRjAwMEI1RjRFRjYyMzM3NTZDOTc5OEQ2Q0M2NEVFNUMzNEU5RUMKKzoxMDZCMDAwMDYxNERCRUM3RjgzRTk0MDkzMjA5RTMzRjY5M0JDMkM4RjQKKzoxMDZCMTAwMDNGNjc0QkY4NzkwQTM1MjMxNDk0MjhDRUMxRTc4OTZBNzgKKzoxMDZCMjAwMDI1RkUyNEFBRTFBMDBDRUQwNzZENTQ1OTM4OTVCMUZCNjAKKzoxMDZCMzAwMEU1QzA4RDg4MUY1NzVFMzNGOUM3NTQ5RjJFMjE5RUNFMjYKKzoxMDZCNDAwMEQ5NDI1N0QzNzkwMjUwMTdFM0U1N0ZDQ0IzNzMzRkYwQjYKKzoxMDZCNTAwMEMzREFDQ0RGNjVDNzU5QzdEQkVDOUE0OTJGMURGNEE5MEUKKzoxMDZCNjAwMDlEODU4QjdCNkYxRjY5QzdFMUVBQTFEMzBDQTA0RkU0MjEKKzoxMDZCNzAwMDZGOEREM0U5RUQ4QUJFRDg0RUZBNUE5NjhGRkM4RTg2NzkKKzoxMDZCODAwMDdDMzVGODVGQzRCN0U3OEU2MUUyNDdCQkUxMEYzMDhGMTkKKzoxMDZCOTAwMERCREE2QzNDQkZFRjczNjgxRDE1RjdCOTRERjhCRkU2NDMKKzoxMDZCQTAwMDhBNzhGNzNDNTZFMUM1OTdBNzk5NUM4RTdDNzU5QUJEQUIKKzoxMDZCQjAwMEVBMkQ4RTVBQUZCNTc2M0IxRjY3OEQ4REZDNUI0NjNDNDgKKzoxMDZCQzAwMDc3N0VCM0NERTRFRjVBQjhEMTVDNUZDMDY2QTZBMzVDMTQKKzoxMDZCRDAwMDVBQjBDMUM2RjA3Q0M3NkQxNjdGRDhCRkUxN0M2MTVFM0MKKzoxMDZCRTAwMDBCNTlERDJBRDREMzhERkNBMEI5M0VBNjYyRkVGN0UyOTQKKzoxMDZCRjAwMDVGM0Q1MjhBNzk0M0NENzY5RUFGRjMwMUQwOEIxNkM1QTcKKzoxMDZDMDAwMDU3NTVFRTkwMURFREY5Nzc3NjE1NUYzRjlFRTFGN0ExQTAKKzoxMDZDMTAwMDU1ODM1MDlFMjZCM0I4RTc4QzZFNUQ2Mzg2QUYzRkY4MTAKKzoxMDZDMjAwMEFERjAzMkQ2NDBGMEY2MDY4N0JBNTU4QUVCQkY3QUQ0N0IKKzoxMDZDMzAwMDJFOTlFMjQ0Q0I5Q0RFOTEwQ0U0Q0MzOTE3MkY3QkZDREYKKzoxMDZDNDAwMDI5N0Y3NDkxN0NERjI3RTgwODM2QzBDQkI4OUNBRkJCQTYKKzoxMDZDNTAwMDFDQ0JGRUJFM0JEOENCNzc4QjlEMUQ3NkU0OEY1QUI1RkYKKzoxMDZDNjAwMEFFNUM5MjIzNzEyNjg3MkRBMDBGODZFRjZDN0IyNjg2NjMKKzoxMDZDNzAwMDA3MzM1M0JCMzVFN0Q5QUU0RENBMzlBRjc2RTU3MjFGM0UKKzoxMDZDODAwMEZENzUwQTc5RjlDMkI2OUZEOUQxQkY3OEZBQTkxM0Q3OTEKKzoxMDZDOTAwMDIwMUYyRUZBQjVDMjlDRDBBRTczOUI4Nzg1NzE1RjUwQzIKKzoxMDZDQTAwMDQzNzY5NDI3NTVCQjk0Qjg3MTU5OEFGQ0MzRkMxN0ZERjEKKzoxMDZDQjAwMEMyNDM3MkEyNkE4NzIzMzQxREJFQUZGQUU1M0IyMzE5OTMKKzoxMDZDQzAwMEUwQTFCM0ExRkJGMDYwREM0NzlGOTI3ODdDMzREODMxMUYKKzoxMDZDRDAwMDEyRjdBRDJBOTVERDEyMkY0RkVDODRBMEJCNTNDRjI1QzAKKzoxMDZDRTAwMENFQzI3NTk1QjZFRUJGOTlGQTZEQjlDMUU2ODg5MjBGMUUKKzoxMDZDRjAwMEM3QzRCRTA0RURCODdGRUQ0OTI5OTQxRjQ3N0UxOEYxNDMKKzoxMDZEMDAwMEFDNTM0RjRBMUNCRTNEQjY5MDBCRTFEQkJBRDkxRTAwMTYKKzoxMDZEMTAwMDM4NkFCNzdFNDg3NDU0RjY4QkVENUVDNDQzRUQxRUM1RTkKKzoxMDZEMjAwMEU0RjdBREREQUE4NDFEMjNBOTNDODEyNUM2NTEyNEUwRUEKKzoxMDZEMzAwMEVCMUFDNkU1NjNDREFFQzVFNDBGQUY2OTU5RjdBMUUyMjIKKzoxMDZENDAwMEM1RUZDREY0MEM3OEYxODcxMUFGNkYyOEZFRTk1OERGNUQKKzoxMDZENTAwMEY5NzNBRjA2QThGQUEwRkQ3MTJGRTIxNUZBOUQ2MzRGRjMKKzoxMDZENjAwMEMyNzhBRUQ5OEY4REZEN0Y5QTEyREIxRjYzREQ3NkE0Q0EKKzoxMDZENzAwMEFGREE5NkI1N0MzQzBCQkY3QzgwQkY2NEM2QzY0RjlDMjcKKzoxMDZEODAwMDBFNEIxQzZCNkJFQTc5RTk4OThCQjY5RjdEMzQwOEUzNjcKKzoxMDZEOTAwMDlEREFGMUQ3NDc4M0I4N0ZGRkJGOEYxRUJEMTNGNTlBRTkKKzoxMDZEQTAwMDdEMkUxRkYyN0JFRDUzQUY3OTU5RDQzRTk4RTNFMDdDMDIKKzoxMDZEQjAwMEQ3RjlFNENGOUY3ODE4RjhBNEYzQjg4MzhFRUU3NUVFNzgKKzoxMDZEQzAwMDdENkY4ODA2RjNFRDdDRjZCRkQzMzU2ODdGQzdERUFCRjkKKzoxMDZERDAwMEM4RUVCRjYzNzdEOUMwQkVGNjQzQTREMzUwRjQzOTE3QzkKKzoxMDZERTAwMDkxQzdBNEVEOTE1MEQ5MDI0MzVFOTQ5Njc1MzlCODRCODIKKzoxMDZERjAwMDYxMkU4MEYzRjQzMTQ3MDhGMzlBNkJFMUQ5QjIyMjVDM0IKKzoxMDZFMDAwMEE3QzUyNDdGQjFCRTFDRjA1QkIzNkRGNTg3Q0FDODc4RjcKKzoxMDZFMTAwMDc4MEUwRTk2MzFDNzlFMDFCQjY0RTAzQTVGRkJFRDZGQzIKKzoxMDZFMjAwMDk0NjA2OUEzMzg0OTJERUIyNkY5NjlGREFFRjYyOEFDQ0MKKzoxMDZFMzAwMEU3NjVCREFGREY1OUY2QjkxRDgzNzhCNURCRDZGMjcxRDIKKzoxMDZFNDAwMDJERUI3NzFBN0YxOTFCQkI3RUJBNjVGRENFQjJFQTlGODgKKzoxMDZFNTAwMDNFOEMyRjc3QTVDNjhERTcxQUYxQUZDNUJCRkZBNTRGQjYKKzoxMDZFNjAwMEJEQzk5MDAzRkRFMUI3NTJFMjcwNzkxQzdBODUwM0Y5NDAKKzoxMDZFNzAwMDY5QzdEMzRGM0M5Q0M2RDc3NzNBMjBBNDczRkJEOTIxNkUKKzoxMDZFODAwMDBDRThFM0E0QURGQjY2OTQ4RkREN0IxRDNFRENDRkFCNEQKKzoxMDZFOTAwMEY2QkU0MUZDRDVCOUZCMTVCQjQ2RjI5MUI5MjVEMDEzMUUKKzoxMDZFQTAwMDNBNTlDRjRGM0JFQTBEMzUxMkFGRDQ2RUYxODQxRERFNTcKKzoxMDZFQjAwMEM4M0FENTg0NjY5NDZCNUU3QTdFODI5RTg3MzhEREQ3MjkKKzoxMDZFQzAwMDg0RjY1RjI3QzU1OUI3RDU4RTFDMkU4RjQzM0M2OTZGNUEKKzoxMDZFRDAwMEYxOTYzRkQ4OTlEQkJDOUVEMjE4NUNDNzEzNTNGMDc5NkEKKzoxMDZFRTAwMDZGRUI2OENDREY4N0YzQkYzQzZBM0RCNzcwN0VFRDhERkEKKzoxMDZFRjAwMDJGM0IzNzNCNTRDQzQ3MzBENkI3RDNDNkY1RkREQTkwOUQKKzoxMDZGMDAwMEY0MDY4QkMzQUZDNkZFNzZBMUYxRDAwNjg3MjUxRTJBRjQKKzoxMDZGMTAwMEU2REIxRjNGRjczRjhGMEJDM0QzMTI0Q0FBMUMxRDhCMjAKKzoxMDZGMjAwMEFGNTM5RkM3OTdFRjhGMzgyNDAxNDc1REY5QTBEQ0Q4OTYKKzoxMDZGMzAwMEZENDk2NTE1QzFDMUQ5MTE3ODRGODk3M0IzQTc5RTUyMTgKKzoxMDZGNDAwMDQyNDE3OEJFQUFFNTIwQzk2OUFCNUNBOEU5NDU0RjdFRkQKKzoxMDZGNTAwMEM2MTg2RkNGRkU5MTI4QkY0RTFENzg4RUU4QjA2NkRCNTUKKzoxMDZGNjAwMDA5M0JEQTQ3ODdCN0VFQjQ3NzE0NDZFODFFRTU3Rjc0MkQKKzoxMDZGNzAwMDVFRTRBOTY3RjY4RjI0Mzk4REZEQzc1OTlGNUYwQjc5QjEKKzoxMDZGODAwMDU3REI2QUVFQkY3NkRCODdBNkZFMTcwNTVCRUNFNDE3REUKKzoxMDZGOTAwMEVENjc5QzBGNTRGRDA2OUNFRjA3RUQzNjg2NzlGNzFGRDEKKzoxMDZGQTAwMEI0MjhFNUYxRjQ5QjkwQzM2NkNBODM1QUU1MjkzRDg2NkYKKzoxMDZGQjAwMDdFNDUyNUM1QUVBMUJDNkI1QUExQkYxMUE0NzM4RjM2MDcKKzoxMDZGQzAwMDdFRUU1MUQ1OEYzOTgwMkYxQjkzRUQxQURBQUI0RDlFOTMKKzoxMDZGRDAwMEVCOTkxNjI1Qjc5QjJERjhGNEE1RjkyNjYyNUNDRDM3MDEKKzoxMDZGRTAwMEI5QTIyNERBN0UzMkUwNEZENjY1MTNGQzc3NzhDQTA3NUYKKzoxMDZGRjAwMEUyNzkwOUI0QzMzNDRDMzI1MEZERTQ1NzU2QkM1M0NBNEQKKzoxMDcwMDAwMDcxM0U4QTRGRjZCOUUyRUVDRkJDM0ZGNEI3MjFGRERCMEIKKzoxMDcwMTAwMDdDMzJEM0EyRTg2QjU0RDlGNUMzRDFENUE2MzJDRDk0MzYKKzoxMDcwMjAwMEJGN0FFRjY0MUVDNzM1RTY3RkVGNDU2QzEzMDNCOTdCNkIKKzoxMDcwMzAwMEFGRDRERDg2RjlFQ0MxQUI3OTVFMjAxMzc2QkExN0VEREIKKzoxMDcwNDAwMEY0RUM1ODdEOEVFOUJBODZGMjg3QzQwRjZGQ0Y3NDIzQjMKKzoxMDcwNTAwMDdGMTQ3RUJFMEZFMEM4OThCRjIzRkI0OTk5RkZCRUEyRjQKKzoxMDcwNjAwMDUzM0U4RjFEQzdDRDQ1RkIyOTQ0Q0YxMzU5OThFQThBNUIKKzoxMDcwNzAwMDkzQ0IxRjBGQUJBM0U3NDlBQ0EzMTlDRjMwQkRFREE4NEQKKzoxMDcwODAwMEY4RDQwMUNGRUYyQjRGOTEzOERDNjFDQUQ3NDgxNkUzMTMKKzoxMDcwOTAwMEM4ODk1OTk5N0RGMTNGOUJBQzlFOEFGNkZCMzhEODI2NkEKKzoxMDcwQTAwMEIyNEJEMEVERjg0NTZBMDQwRjQ2M0U5Q0QxRUZCREFFMjEKKzoxMDcwQjAwMDA5MTJFRTM3MzhCRkMxNzhBRTQ3OUM5RkY3RjVDQzU3MjEKKzoxMDcwQzAwMEE3RkEwMEEzNkUxOTA3NUJGQTRBQzUxNjRCQUMxODkwRDUKKzoxMDcwRDAwMDU0MDU2RjBENjgyNjNGQzcyMEQ2NDI2NTE2NkJBNzMyNTAKKzoxMDcwRTAwMEM1RTk5MzU0ODJFRjJERjI0QkM5RUNDRkVDOEI0NDBCRTYKKzoxMDcwRjAwMDdDRTdBMThGOUY5M0Y1RTMwMTI4MUI2REUyRjlEQjlFRUUKKzoxMDcxMDAwMEQwRTM1MERGOTBDQzRDRTc4MzczOUQ5Q0JGMkY3N0NBQjAKKzoxMDcxMTAwMDg2NUYyNjEwNkQ3NzM1QjI2QTlBQkIyQjhEMUY2MzMxNUYKKzoxMDcxMjAwMEJFQkJERTE5MThFRThDQTIyN0M1RERDRUYzQkU4NEZERjIKKzoxMDcxMzAwMDZCRDhFQjU3MjlDQjI5RkVCRTNBODNEQkQ1QkRBRENGNEIKKzoxMDcxNDAwMENBRkEwQTkzNUQ2RDJEOUIwNzM4RTc2QzY2MDQzRkY3MUEKKzoxMDcxNTAwMDUzNDk0RTdFN0U1OTY3OUEyRjlBRkU2MDVDNjc2OTc0MjgKKzoxMDcxNjAwMDNFQTNBRTkzN0QyRkRFREI2MDdBRjhEMjgxNzg1NDYyNDUKKzoxMDcxNzAwMEU5NkYwNkQyREY2OEE0QkYwRUQxNDkzN0Y5Mjk2RTU3RUYKKzoxMDcxODAwMDAyNTdFMzdDMzNGMkVBMjRGRTNDMjA3MUJGOTdBRUUwNjUKKzoxMDcxOTAwMDdDRDM0NUZGNzI2Mjc1NjZBMDhGNzlCMjU5NDAxRjUxNEEKKzoxMDcxQTAwMDc5MkQxQjg0RkRBOEFBNEM0RDI4NDI3ODM2ODk3NUI3RTUKKzoxMDcxQjAwMEQyQTUzOTNGRDVEMEQ3RENBMkU2MTA3OTcyQkYyOTc5QTQKKzoxMDcxQzAwMDk1Q0VBM0E4Njk2RUNBNEY3MTk3MzRERDhFRTc3QzU1QzIKKzoxMDcxRDAwMDU2RTc0M0Y5RTkzNkYyNEZGQzNDOUZEMEIwOEI1RDA1OTIKKzoxMDcxRTAwMEU2M0M0RTg3MjU2RkQ1MjZFQ0VGOTgzQzZFQjFFRkRFN0UKKzoxMDcxRjAwMDgzMEZFMkU4QzNENjdERjc3NjY3RkMzQzI0MzYyNjdFMTMKKzoxMDcyMDAwMEJFQTBBMTg3OUQyRkRENUJFREM4NkE2N0ZCNjExQURDMUMKKzoxMDcyMTAwMEE3NTM5RUE1MkFGQzBEMTNBRkYzOTExRkJDNkI5QkM0MTMKKzoxMDcyMjAwMENGQUQ1OUU4QTg2QjQ3RDI0ODk0ODdDOEJGNzhDRjQ1RkYKKzoxMDcyMzAwMEEyNzgyRTZEREJCRjFGRjVBNjI2MkZEMzkzNTM0OENFMjEKKzoxMDcyNDAwMDY5NEEyRTlFOTcxQUU1OTRBMDVDQkNFQkMzOTc3RjhEOEMKKzoxMDcyNTAwMEZFRjU1Njg1RTFENkRDRTUzNkUyOTM3QTMyMkU1NjIyRUIKKzoxMDcyNjAwMDVCNkY1QURGMEI5RDRGNkM1QzkxRjNEQjEyOUZDMTZGMUMKKzoxMDcyNzAwMDZFRkFGRUNDMzY4OUNFNEYyOTZDRjg4RkYxRkM0MzZENDcKKzoxMDcyODAwMDlCOEQ4NUUwRkQxOUM2RkIzRkIzODlFQjAzMEI1Rjg0NDMKKzoxMDcyOTAwMDUxRjAzQ0E4MTgxRkY3QTVFOEZEMjNCNTNDODE2OUQxNDIKKzoxMDcyQTAwMDc5M0M0MUJEMURDRkZGQ0YxM0Y4MTg1MDkxNjI3QUZGOTIKKzoxMDcyQjAwMEQ3QjlFNTZERTQ5RjA5RjA3QjAwMDZDRTFBNjRFQTZGNEEKKzoxMDcyQzAwMDkxQjI3QzI4MjVFMTA5M0Y4NjA2RkY5MEZFOENGOTlGNEMKKzoxMDcyRDAwMDkzMDM3NkJFNEY1NDI0ODU0OTlGMDFGQjE3RUQ4NjkwOUEKKzoxMDcyRTAwMDQ0Rjk0QTU2N0Y0N0NEMUU4OUY2QTdEQjYwN0ZDMkYzN0IKKzoxMDcyRjAwMDM4Qjc4NTJDRjZBMzI1OEZDRUMwQjc5NTJFMEYzOTg1Q0MKKzoxMDczMDAwMDdERTA2NkVFNUVGMEVBMEY5NzUwN0M5NEY4NkFDOThCRDgKKzoxMDczMTAwMDNDMkY2Q0M5NzYyOTQ0NzlDQzFENDM5MzE4RTE1OTIxM0YKKzoxMDczMjAwMEJGRDE3QkFDRUU0MUQ4MzkyMkY0NkJDMTlCMjNDMzhDMTcKKzoxMDczMzAwMDY3OTc2NkM2NzM2MjgxMTlBRjFFQkYxOThGNTYzQzI3QzcKKzoxMDczNDAwMDhEQzkzMUI1NUZBNDU0REI4OUM4MDQ5RTBCRTAxRkUyRjAKKzoxMDczNTAwMDE5RTQyMENEQTMwNkU2MTFENjYyRjE1OUQ5N0FFRjJBQjUKKzoxMDczNjAwMEY0NkZGNDhCNDcwQkZFNEU1OUYwNzc5NkI1RUVFNzZGNEUKKzoxMDczNzAwMDU5ODUzMzlENTg5QkU2OURBOTg2ODk3RkFDRkM2NkUwQzQKKzoxMDczODAwMDI5Q0JENzNFOTE5RUY5M0RFNDJGQ0UxMDlENDhGM0Y4Q0UKKzoxMDczOTAwMDc3ODM5QzJEOUM3OThBRkNDNDZGNDY3RTcwNjJDRjdFNzkKKzoxMDczQTAwMEY5MEVGQjAyQ0FBNTMzMEU5RDk4Q0I2MkY5NkIxMzk2QkEKKzoxMDczQjAwMEMwRDcyREY1NEVERkJDN0M4QzRGMzNERjNDMUJDNkFCRkEKKzoxMDczQzAwMDdENTRDNkQ5NDdBOTdGQTA0N0RBMEZFRUMxQjg2NDFBMjkKKzoxMDczRDAwMEYyQjU0QUYxMkI1Q0FBRTk1MDRGNkNCNUY5RDA2Rjc5NDAKKzoxMDczRTAwMDRGNTFGNzM1QThCN0Q3Q0VFNzc5OEUzNzI3NzBGRkVCMjcKKzoxMDczRjAwMDkyMDRCRUJGREExMjc4NUVGMzVEMTUzMkQzRDFCRTZGNTAKKzoxMDc0MDAwMDU1NDIxMkZBOEI3Q0ZBOEI1N0EyREVENTZBRDM2ODVGOUQKKzoxMDc0MTAwMEYzNzVCRkZDMUQ3QTVGRUNDM0Y4NkVBNkRDM0MwQUUxOTUKKzoxMDc0MjAwMDgwRjZFNDZGRUY2QTdEQzc3QjZCOTRCRUQzQjlFN0ZFNEQKKzoxMDc0MzAwMDYxQjhFRjNDMjRCM0NBNzg3QTdDQkU4QkMzRDE1OUYwRDMKKzoxMDc0NDAwMEU3NzQyNEM3QzVDRTZFQjJBMzU3NzdENDU1RTBCQzBDMDEKKzoxMDc0NTAwMDNCQzJCRThCRkJCNzZBRjZDQzIwN0RGMkQwMDI3RTFFMEIKKzoxMDc0NjAwMDczRjcyOTdFMUU3MzhBMzJGQjlCMjNBMDNFRjYzNTk1NjcKKzoxMDc0NzAwMENCNERBNjRGOUY5M0NFNTMyODcwMUQzNzYwQkUyNEYyOEMKKzoxMDc0ODAwMEMxN0ZDOUExMDZDMjRGRjNFRjMxNEVENUY4MTc5NUExQzAKKzoxMDc0OTAwMEZFNTg1MkI3ODBGNjlGNUY3QkE3QjQ2MTU5QUFCNzE0MTQKKzoxMDc0QTAwMDIzNUY0RjZFNEQ5RTg4RTc2NDZBREZFMjc5OTVBM0RCMjgKKzoxMDc0QjAwMENERkUxQ0E2NTQxRjQ0M0ZEOEQ5NjM3QzVCQkVGQzk4MEMKKzoxMDc0QzAwMDZBQjVCQjE0REM4RkM3NzY5ODlGOEZFRjg3NkVDQjVDNTUKKzoxMDc0RDAwMDYyM0ZGMkIyRjQwQkM5OEJGRDkxQUM0RjczOTE3Rjk0NzQKKzoxMDc0RTAwMDlGRTNGMkFCRjFFREE3NDcxM0I4N0QwMzc4OTE1MDRFQkYKKzoxMDc0RjAwMDc1NzUzMzdGMDNFMEE5NkJERTIwOUE2RkQ3QzdGQzZBRUUKKzoxMDc1MDAwMEE2QUVDRjk1RjI3OEY2RDEyRDJFNEUyRjBGRDk3OURDN0QKKzoxMDc1MTAwMEY2QTEwNUVFRDAwQTk4Qzc4MTA1NTUxN0EzNURGNEM5RjkKKzoxMDc1MjAwMEJGMDUyRThFMTdBNzg4RDgwNzJDNDlBNjNENEY0RjYyNUUKKzoxMDc1MzAwMDYzOTAyRjlBRjhGOTMyRDY5QzE5RUZGQ0JDQzEwRjA2NjQKKzoxMDc1NDAwMDdGMTg3QzkxQjkyMDIxMTBDRjdGRjk4RThCQ0Y2RkQyMUQKKzoxMDc1NTAwMDgyMDJDQTgzRUREQzI3NTE4Q0E3QjMwMUUwRUEwMzhGRDYKKzoxMDc1NjAwMDQxRDYzMDE4RTFBOURERjMxMUY5MTc5Q0FERjFGREQwM0EKKzoxMDc1NzAwMEY1Nzg0ODAzRTlCNjIxQjg2MjNDRTBFQjdCQzBENDQxMjIKKzoxMDc1ODAwMEU0MDc3QjczNzZCQ0ZFODM2QzAzRjk5QjE2QjgzNEUyODgKKzoxMDc1OTAwMEI3NEUyN0I3QTM5OURBOUMzOUQzODM3QzUyNzZGNTJBNjQKKzoxMDc1QTAwMDgwRjM2MUUwM0YyNEY5ODc2QzdFODIzQkI4OTgzMUYyMkEKKzoxMDc1QjAwMEFGQUE5Q0ZGQjNBRTYxOUJFRjhBQjJCN0Q2QkEyNjNFQTQKKzoxMDc1QzAwMEUwODJGRTFFNzBGMTc4NDc2QUMwMkYyMURDRkVCRjlGNkIKKzoxMDc1RDAwMEYzNjJGRjVEOUYzQTY4RkQwNjA5M0Y4RkYxNUQ4QkMwNDYKKzoxMDc1RTAwMDRGNTk4MkZFMjNGQzlFNTVBNjkxMzBGNDA3QkNCRTc5MEMKKzoxMDc1RjAwMEIwRkY1RkI2MDdGMDFEMjdCRkNCRDA3NzUyMDIyMEZCNEMKKzoxMDc2MDAwMDAwOUUxNEI3NENFNzU2RDBERTQyN0JBMjk2MTkzRjQxNEMKKzoxMDc2MTAwMDUyM0UwREZFQzM0MzY2NzgzRUNCOTBCNzUyQUIxNEY2OTQKKzoxMDc2MjAwMDgwREMyQzcxQkFDM0U4NEY0OUE5ODQ3OTYzM0M4QTM5NUMKKzoxMDc2MzAwMDc5N0ZFRDY2N0QxNDI1MkZDQTVEOTQwMTNDNTk5RURCNTAKKzoxMDc2NDAwMDNCODYxQzM2RTQ3NzUzMzI5NzgzNERGN0FBQTE0NjA5NEYKKzoxMDc2NTAwMEQzREYzQjVDRTgzRkNFRDZCNTQ5OTg1QTk1QTI2QTk0RjEKKzoxMDc2NjAwMEU3NzA1MTI1RjMwNzUxNDhFNjNFOTJEQ0EzRjc4QzY3OUIKKzoxMDc2NzAwMEVDRDlCRjJCNzFGRDFCMjc1RERDMUUyOTRCMDhGQzBBRDIKKzoxMDc2ODAwMEYxMzVCMkFERkIwMEFBNEY3RTE3NEJDNUY1OUUyMkY0MzMKKzoxMDc2OTAwMDlCQjFBN0I5M0MzMkYyRkE2Qjg1QkQ2MTk1NDdDRjAxMkEKKzoxMDc2QTAwMDlEQTNDMDE4RkIwREJFRUY4RDNERURGNjIzRkRGNEM4ODQKKzoxMDc2QjAwMEExMDU1MzY4MUYyRDZBMkQzRTg4RjkzOTQ1NkY3MTdFRUIKKzoxMDc2QzAwMDY0NDJGRTgwRjU0Njc4Mjk2RDBCMkE4ODBGQUJEQ0U5MTEKKzoxMDc2RDAwMDRGREUxOEYyQzRCQUNFQTA1Q0Y3RDRCMzAwMjlDNTZENTIKKzoxMDc2RTAwMEMwNjc1MUZCQjc1NTRFMUQ3Mzg5RkQ1NUM4QTlCMzZDRDIKKzoxMDc2RjAwMEMyQzBBQkI0MDgzRDE1MkRGMzFGNzQ0NEQxOEYyMUE3MzAKKzoxMDc3MDAwMDIyRjQxNDIyM0FCNDhFMjMzMTY3NEZERDk3OEJGMkU1RDEKKzoxMDc3MTAwMDg4ODI3RTkwQUU4OTNDM0VCOTQyRjA1MUYyQzdBMUFCNUYKKzoxMDc3MjAwMDcxRkUxQjVBQTdCQTkwRUU3N0I0OTUzOTkxQUQ5NjY0NjUKKzoxMDc3MzAwMEYwNzM1RUVBRkVFQjgyNEM5MDRGNzQ1Q0Q3QzY5QzFBRTUKKzoxMDc3NDAwMDlFMjkxRjBGMkI4RkY4NTA3QzUwOEY5QUQ3OTk2NjQ5MkUKKzoxMDc3NTAwMDlDNzNENDkyQUU4QjczM0Y4MjUxMkVDOUUwRTdCODc2MEEKKzoxMDc3NjAwMEI0RTUyNDcxM0IzMzRDRUJERTQzRjdDMjBGNjFGMDg1ODcKKzoxMDc3NzAwMDQxRUY1NkZBMzZGOEExOTE3MUJGODRBMTNGMjg1MjhCOTAKKzoxMDc3ODAwMEIwMEJDRDdFODE0NkMzQ0YxMTc0NTE5Q0Y4MEVBMTBGNzIKKzoxMDc3OTAwMDM2QkEyRjU5MzcwMTdFNkQwQTRGRjI2MTVDRTIwRTRGMDcKKzoxMDc3QTAwMDBFRTUzM0RGMzE4MEUzQ0Q4QTA3QTNBQ0ZEMTRGNEMzQ0IKKzoxMDc3QjAwMEE4QkNGMzVBQjU5QkZDNUFCNTlGREE0RENGMERCQ0Y2NjkKKzoxMDc3QzAwMDg2MEYwM0FGRTMxMEFGRDI5N0M3RUJBN0I4QkVBMzYzOTIKKzoxMDc3RDAwMEYxRkI2NUU3OURCNTY0NENEQ0YzNzJGRjU3RTYzRDlFMTcKKzoxMDc3RTAwMDA1N0VERDQxNzYxNzNGQjc2MUQwOTcyMTJGNEE5NzZFMEUKKzoxMDc3RjAwMENDMjRFMjY4MzdERkVCNjVDODkxMzE3QkVBMEVBMjhBQzAKKzoxMDc4MDAwMDY4OTUxMzk3QjVCMjZCMTE0RjYzQzMyQUMzQTMyRUZEQkUKKzoxMDc4MTAwMEM5OEQ4RkYxOTc0QzNBN0Y3MTYzMDJGMERGQTgxNzY2MkMKKzoxMDc4MjAwMDJEREEwNjhGNDY2QTJDNzUzQTAwMzVCMjVEMjUzOUM2QzkKKzoxMDc4MzAwMERBQ0YyRjBFRDUxMkZFMzgxREZEOEI4NjVFMUE4MzU3QzgKKzoxMDc4NDAwMEExOTcxQUZCOEIxMTA3NUE5NzEwQThDNEYxQTUzREMwNDgKKzoxMDc4NTAwMDM3NUVDQzNGRTVGNkVFNUE1NzYwNTEwMkI0NEYwNDk4QkMKKzoxMDc4NjAwMDEzMzBEN0FFMjA5Q0NERUQ1MzMzNUZGNkM2ODc4OTE2MTMKKzoxMDc4NzAwMDNFNkIwMUJDRDAzOTA0RDhFN0YyQTU1ODM4OENGMUYzM0YKKzoxMDc4ODAwMDEyOTIzOTlDNDA2REE4QkY2NDk1MzIzRTU4MERCRkNGMEYKKzoxMDc4OTAwMDJFNkIyNDBCRTAzRThDQzczNjcxOUU2Qjg1RkU3NTk3NzAKKzoxMDc4QTAwMEE1NUNFQkFBNjhDMDc5RDk1NDE2NzQxNDdENzlCODBEMUIKKzoxMDc4QjAwMEJGRTBCQTA0M0Q4OEY4NzA5NkVCMzQ4RkMxM0VFNjQ3Q0UKKzoxMDc4QzAwMEJEN0VCMERBMjJGOTAxOEU5NDZBNERFQTcxRDYxOEZCQkEKKzoxMDc4RDAwMDM3OUVGQjk5QUU0RDQ0QkExODlDQzdFODNDRUM2MEQ0ODcKKzoxMDc4RTAwMDgzRTJBQ0NGQTYwNDFFQUY1REVDRUMzODhDMjFGM0RBNUEKKzoxMDc4RjAwMEU5NzVFNURFM0VFMkQzOTE3QjA2RkNDMjRGNjVDRUMzNUYKKzoxMDc5MDAwMEU4REFGQkM2NDUxODk3N0NGQkRGM0ZGMjYwRENFOTRGMDUKKzoxMDc5MTAwMDZBQjcwN0UxM0NCOUZDRjcxRUJDQkZFNUVERTVEQ0NFN0MKKzoxMDc5MjAwMEI4RDlBMkNGRUMxNEY4NEI0RUFDNzgwQUYxNzc0QkZERTYKKzoxMDc5MzAwMERGNEJBM0Y5OUQyREUzNzE5NERCNDIwQTFBOUQzREY0QzAKKzoxMDc5NDAwMEJENjg2QjIyRjlFNjhDRkFFMjk2NTQ1M0REQTBEM0M1RUMKKzoxMDc5NTAwMDBFOUUyNzY1OURGRkZCQzI4RUJBNkREQjY2RkI2MDBEMzgKKzoxMDc5NjAwMEM3MEZCNDIyQkU0RjBBN0RFREU0MkUwRkY5MzMwQzc4MTkKKzoxMDc5NzAwMEU2NkUxQjY1NDczQ0ZDQTlENTIxRTJGMEVEMzY4RTdGMTMKKzoxMDc5ODAwMDdEM0FDNkNGMDI2MjI5QUM3MDFFREU5NzQ4RkRDRDdGREUKKzoxMDc5OTAwMDQwMjFGRDYyMEU4Q0I1MENFODNCRDA3QTFCRDlEOUQ2QkMKKzoxMDc5QTAwMDc5Q0M3RjVCOUIzMjEwRDY2RkZFNUE4OUY0NTI2Q0JGNDQKKzoxMDc5QjAwMDFDRTgyMUIwNkMzNUM1RDlBQ0YzOUMxM0I0QzYzMzk3MjEKKzoxMDc5QzAwMDkzOUQ2RUNERjM5OEM3QjQ3NTEzQjJFM0U0N0JCNEYyMjQKKzoxMDc5RDAwMDM4RjlDMjdFRUM5QTNGMjYwODdEQTE5NDVEOEVGOUU4QzUKKzoxMDc5RTAwMDY3NTlFMThGMEFCNUZFRUQ5QTkzRjU4QzkyQjQzRUE4RTMKKzoxMDc5RjAwMDc3NTI3OUFBREU0N0U1NTMwOTFBOEY2N0VGRDk3Rjk4NDYKKzoxMDdBMDAwMEU4NEI2RDJGNDU3RURGRDFGNjRFRTI0RDVBNDQ2RTVGNTYKKzoxMDdBMTAwMEIxRjlBMzgzM0Y4MTdBMzFFM0ZFMUJDMzNGM0U1QkUwQjQKKzoxMDdBMjAwMEZCNEEyMUJGMTcwQTdEQTBGOEQzQkVFNUY3NkM5Q0VGOTcKKzoxMDdBMzAwMEM4NTg3ODBEQjkzRDFCRUY5NThEQzI4MzIxQzdBREY4QUQKKzoxMDdBNDAwMDM4RDM5NjlCODg3NDIxMjU1QUUzQzA1RjBEMkZCRDdERTYKKzoxMDdBNTAwMEI3NTg4OTlGMzc2OEYwQ0Y1M0MyMUYzMDZGQ0I4QzU1MTIKKzoxMDdBNjAwMDgzNjBGQ0M2QkRFRjBERTFGNzAyQjNBMzI4MUYwQ0ZBM0IKKzoxMDdBNzAwMEI0RDIxRjYzNzU3NkU0RTcxRTNBNkJCRDlCRjA2M0QwMEEKKzoxMDdBODAwMDA1RjA1MTg2ODgzRjY2QTBERDY3QTVCN0ZFRjI4OTNBMEEKKzoxMDdBOTAwMDZEMUQ0MzUwMEU1OEU5QUI1MzYyNzFFRjE1NEQ0REU0MjcKKzoxMDdBQTAwMEZFRjI3OTlBM0UwNUVENTBEODVFNTZGMTM4MUQ5NzNGQUIKKzoxMDdBQjAwMDI3RDVFNkMzNzcyMjdGNkVFMUZDQjFGODU3REI3Rjg5REIKKzoxMDdBQzAwMDcyQTdFQTE3MEY3ODUxRUVCQ0FGMzZBN0UzNzhENThGQ0YKKzoxMDdBRDAwMEFGRjQ2MjlDRkJBNDFBRjRFMkY3RUY4Nzk0Qjg3OTg1QkYKKzoxMDdBRTAwMDBCMTMyNUUxMEYzN0U3MkJCMDM1QzE2QjkwNkYzRjc5NTIKKzoxMDdBRjAwMERDRTY0MzNGNDNFRDU2MDc4RjgzRUZFMjc4ODMzQThGMEUKKzoxMDdCMDAwMDdGRUY4QTlGQUY1MEY1RjMwN0QyMzU5RUM3NkFDRTVCRjEKKzoxMDdCMTAwMEQ4NjJBM0ZDMTNGNDk3RTEzMEJEQzU3MTdCRTJDMjJEOUUKKzoxMDdCMjAwMDdEQzdCNzZCNzdBRDhCOUI3NzYyRTQwNzU4RTlGNjA2QTQKKzoxMDdCMzAwMDBCQkQwMjVFQzg4RTA5MDIzQ0U0MTYxNzcxRUJDNjI3MjYKKzoxMDdCNDAwMDdGM0NGMjA0QzA3NTZBQ0I2RkJENTI2MUI0REY5Q0M3NDUKKzoxMDdCNTAwMEM3Q0ZCNERDRkE1MzBDRjFGNDQ2QUY5RDgyQkUyMzdBNTIKKzoxMDdCNjAwMDQzMjg2RTFFNDNCNTJERUM0NTNCQkM3QUIzOERFQ0JBNzEKKzoxMDdCNzAwMEVBRUQwQTczNjIzRUNCNzEwN0VEREI4QkI2RkZFNkY1RUIKKzoxMDdCODAwMDcxMDBERkEyNjc2RDY5RDNGOTM0Mjg1RkMxNThBNzlFRTEKKzoxMDdCOTAwMDNDMTJCMTJFNTUzQjdGQzNFM0JEOUFDODI3MTFFQkIzMEUKKzoxMDdCQTAwMEU4RDlGRDc2Q0M4QkIxRTJCMUFDNjVCRkJEQzM5MjhGOTUKKzoxMDdCQjAwMDQwRUJENDcyNjIwQTlEQ0I3QkYyOUMxREY3RDNGN0Y3QTIKKzoxMDdCQzAwMDQ5NzRCRkIyRjVGQkNBQ0RCRkYxQTI3QzQwM0M1MTVDMDkKKzoxMDdCRDAwMDVFQUM1N0VGRjk0MkUxNkI5RTJGQTE3NkU0ODdFQjZEMjcKKzoxMDdCRTAwMEZEQzZFMERFM0E5QUU4RkI5OUU3NjFGQ0NBMzcxRDk0Q0UKKzoxMDdCRjAwMEFGNTRGOUNDNTJDQUVGNzk0RkFERTM3NEZFQzhDQTc0RTIKKzoxMDdDMDAwMERDNUYyQjZEQzE3NDFGOTVGQzc5RTVBM0RGMjVGQTVCNjIKKzoxMDdDMTAwMEY4Q0E3N0QzRjk3OTFFM0Q5M0ZCNkQ4Mjk5MzhCRkY5ODUKKzoxMDdDMjAwMDlCRkU4NUU2Qjc4MDA1ODhGRTJBMUY1MTJBRDA1RjcyMjkKKzoxMDdDMzAwMDU2NjVFNUNGQzZFMTkzM0YwOTNFNzlFRjMxMDcwNjUxMUUKKzoxMDdDNDAwMEQ5N0JDMjZGMTk3QzU1MTFGN0ZFNUFFMzQ5RkNCRTk1RUEKKzoxMDdDNTAwMEIzQzI4RURFOTUyODFCRjcxNDM5QTNFREFBREEyREFCM0IKKzoxMDdDNjAwMERCNzE3RDNFQjg0ODFGRThBM0I4QkUxQTE0Rjg5MjQ4RUQKKzoxMDdDNzAwMDFGN0ZFNUFBODE0MjhFRDEzRDMxODY5RTUzODZDRkIxQ0EKKzoxMDdDODAwMDdEQkI4REVFOEI4OUZBQ0U3NERGQ0IxRDYyN0M4MDNCOTEKKzoxMDdDOTAwMDQxQkEwQ0NBRjRGOEZFNEM4RjVCMzJFMEUzRjkyRjA2RDAKKzoxMDdDQTAwMDdERjVDNkY3NUI3ODNFQzlDNzQ3Qjk1Q0MxQkMxODdBOTkKKzoxMDdDQjAwMERGNkUwQjBGMzRFNUMzMzg0Q0Y3ODk0NEYyM0Q2QzgyMUMKKzoxMDdDQzAwMEFGQ0RFRjAxNEVDQTU3RTlDMUVGM0U4OUUyQUMwQjM2QUEKKzoxMDdDRDAwMDM4Q0M3OTcwM0Q3NDYzQkRFN0M2OUNCRkIyRDBBMjZGNEIKKzoxMDdDRTAwMDE5QTU1NTJFQkM2OTkxMEI2Q0QzRjlFNUFGNTREQjQyNTUKKzoxMDdDRjAwMDk0Nzc1NDdEREM0MUY2NDNGNTc2NUIwNUUyRTNBRkRCMzgKKzoxMDdEMDAwMDBFQkU3RTEzRDBGOTVGNUIwQ0JFMzVDQjU3MkJERjU2MTIKKzoxMDdEMTAwMEVFMThDREUyRjFFRDVGREQ3RTE2OTc2RkUxNzk1Q0JFODYKKzoxMDdEMjAwMDc1NDdFMjExMUFGQkZBRTRFQkMyNUVFNEFCRTI4RUQxRDYKKzoxMDdEMzAwMDA3OTIzMDJGRjc4M0E3MTY1RDRDN0UwNjBCNUUwREI5QjgKKzoxMDdENDAwMDZBOTU5NzhGMjQ2QUZDRkU4Mjk4QkMzQUJFOUY0N0YyRTAKKzoxMDdENTAwMDFEMzlGRTBDN0FBQzdBN0EzMThERDM0M0I3MDY1RDFBQTEKKzoxMDdENjAwMDc0REI0QjlFOTYxNThGRDZGNzJGQTIzQzFBMTBFQkNGRTMKKzoxMDdENzAwMDA4NEU2MjA1NzhBRjVFQTM5RDE1QTBGRjM5MjgyN0Y4NEQKKzoxMDdEODAwMDFGQ0Y4RTkzRDdDMUVBODZBMjlFRDFFOENFOEU5QjlGNEQKKzoxMDdEOTAwMEVCNzdGQkQwOENDNTczNjU0QUJDNzhCN0JGNEM4RUFCMTQKKzoxMDdEQTAwMEM3OTdCOEI5NUNEOThCQjQwMDY1QjU5QkUzQUQ0OUM0M0UKKzoxMDdEQjAwMDU3QzAxMkE0QkM3RkY0MjkxMjNGMjU3Qjg5OUY2Q0YwMjkKKzoxMDdEQzAwMDlDRDFCOTRBM0Y5RERCRjYyN0NBMUY2OUEwODI1NUI4RUUKKzoxMDdERDAwMEI1MjkyQUZBNTM4QkU1QTVCOTUwNUZFODJFRTZGNUYxRUYKKzoxMDdERTAwMEYyQ0UxQ0E4REZFNjJFRTFGNUNCRTQ2MjFCOTBFNjEzOTEKKzoxMDdERjAwMDZDRjQ5NEM5NTBBRjMxRTYzOTJGQzlFNERGNTBFNTEzNzQKKzoxMDdFMDAwMDBGNjJEQzQ1N0Q5RURGMTdCNzBFRjhEQTU5MTQ4OUY3NEIKKzoxMDdFMTAwMDI2M0E1OEQwNTU4NEY3MzQ0MjA5RjU1NUQ5QkY1Rjg1QzUKKzoxMDdFMjAwMDQ2RTAwNjQ3RTAxQTM3QzlBMzQ5MUFFMkY1OTRDRjQ5NUMKKzoxMDdFMzAwMEY5MzI3NzNDNzcxNUU1Njc1NkJCQjlERjc4RjhDRUYxQjQKKzoxMDdFNDAwMDc0RkZFRUQ3MzBGRUNERUUwMUJEOEZERjY0RTNGRDlDMDUKKzoxMDdFNTAwMERBMzFCQzBDRjEzQUZDNjI0NjdFMDgwM0ZGNDVBQTQ2QzMKKzoxMDdFNjAwMENGNUQyRDc4RjQ5NEY4M0YwM0NGN0YzNDI2REJBOTlGQjQKKzoxMDdFNzAwMEVBOUVGNTNBQkZCMjUxRTQzNTI4ODk5QzBFOTQyNEI5QTQKKzoxMDdFODAwMEVFNTkyODk3OEFGNUJGNDNFMDAzN0ZEMDVFRUVEQTNCRDgKKzoxMDdFOTAwMEYwMzE3RURGNTNGNzEwNUM1RjQ1MzlGMzQ3RDQxQkJCRUQKKzoxMDdFQTAwMEZGMzVEMThGRTc1N0RFNENFMEY4QkEyMTY5QkRFRDUyQkUKKzoxMDdFQjAwMEE4MTczOTg3MkM0NUEyN0U1M0RBRjY1RDJDQkZFRDA5NTEKKzoxMDdFQzAwMEZDOTBFMzlGODVCMUJGOUI2RTU2Nzg3RkVFM0EwRkRFNDQKKzoxMDdFRDAwMDlGMjZFOTVDOEY5NjgwNjg2NjAzMUUxQTc1QTZEOTczODMKKzoxMDdFRTAwMDkxNDVDREY5MTY4QTUyRDQxREE2NzEzREE2NzE1OTE2MzkKKzoxMDdFRjAwMEVDODNCMDRFMzc4Q0U1RUIwNDM4QTU3REYxOEQzMUJDQjkKKzoxMDdGMDAwMDNFMkI5NEQzRDhBMTExMUNGNzIwMUNBMzFDQTE4QkQwMEQKKzoxMDdGMTAwMEZFQjkwOUQ0MjI0RUQ3NjZGQkRCODhEM0Q3RkU0NTI2QUYKKzoxMDdGMjAwMDNCQjM1NkQyMUFERDUwREZGOTE2MjNCOURDOTlFMDE1QzAKKzoxMDdGMzAwMEY5MDdGQ0RFMTlDMzJGMzFGNkE1Qjk2NUI4NjQyNTdCQjYKKzoxMDdGNDAwMDE2RjEzQzBFRTE4NzMyRTJFODY3NTlBQjgyOTM4OUYxODIKKzoxMDdGNTAwMDUzNUJFNEUxNzhCNjlFRTQ2NDdGRjFCMTlGQkI0NTdDNUUKKzoxMDdGNjAwMDZDMTAxQjc0ODFGMUIxNjdEQ0U3MTExRkJCQzg2REU4QjEKKzoxMDdGNzAwMEYzMjJERTJFRjZGRjMzNDc3MjI4NUY0ODU1MzEyNzhGRjQKKzoxMDdGODAwMDMxQkJBNjUwOEE4OEYxREQyRThCRkMzNUU4NzhDNDUxRDAKKzoxMDdGOTAwMERGQUQ4ODk3MTE0N0Q5MkREQzVFRUEyNTNGRTIyNEEzQTcKKzoxMDdGQTAwMEJDRTY1MTFEMDU5NDFGNjFCM0U2NDcxQzkzMjlFMUE5NjYKKzoxMDdGQjAwMEY0QzU2MjBERjFEOTI0RTJDNjE3MUFCNzM3RTJGRUM1M0YKKzoxMDdGQzAwMEZDNTE0QzFDRkY3OTZGMzlDNTQxOEI3REYxRTNGOEUzMUYKKzoxMDdGRDAwMDk0RDkxNDc3NjA0N0Y4RkExOTcxN0NBNjE0MkEwOEU3MzcKKzoxMDdGRTAwMEQ5MzBEODYwMDhFNzUxRjNERjAxQjkzQzJEQTg1MDVBQzkKKzoxMDdGRjAwMENENUJFNkU3RTMyQzc0NjA1REVGQkY1OEQ3RkI3Q0YzMDUKKzoxMDgwMDAwMDIwREVFN0Y3QUE4RDYyMjMyOTBGQzIyNkYyMjA3RUM5NUYKKzoxMDgwMTAwMDAyRjc0N0U3NDExODc4RUMyRkNGQzQ5QTU3NjJDRDIzNzcKKzoxMDgwMjAwMEM5MEM5OEYxMzRCOEYyNTJEM0ZCOEJFQThBNENGNThCMjkKKzoxMDgwMzAwMDk3OEQzM0I1Q0Y4NjhEMzBCQTlFQkI2NjlBQTk3RDdFNkIKKzoxMDgwNDAwMEYzNEM1MzdERThDNjlCNENFRDg3ODVFNjlBREUwRkRGNDcKKzoxMDgwNTAwMDVBRDVFN0JBOEY2ODU5NjI3QUFGQzhBMTYyQkMwRkQyMEQKKzoxMDgwNjAwMDU4RjdDQkY2RkMyMDJFNUQxOEVCNkVFNDY5NjFCQTExNkYKKzoxMDgwNzAwMEUyNzczNEFDRkJDM0Q5RTQzRjJBOTNCNEQ4RjVGNzg3NTEKKzoxMDgwODAwMDgzQjQyRjVGRThGQUU3N0I4NDNFNzQ4MUZDM0UwQTg5NjMKKzoxMDgwOTAwMDBERTM0NDNBRDcxM0JCNkNFRTM1QTgxNzI3MDM2QzI4QzEKKzoxMDgwQTAwMDZGQURGQTQ1NzJFQjBCRkYyRDc5RTNFNTVCNjgyQjkwMjIKKzoxMDgwQjAwMDhFQkVBRkU4NjM3MUJGMUYyMEYyMjM5QjY0NzE5RTc0NzQKKzoxMDgwQzAwMDkyOTNGNDgxN0I2NEY5OTZFODdCRTRBRkYwNzAzOTcyQTcKKzoxMDgwRDAwMDg1ODdGQjU1N0UwMkZCMjZFRTkzODMxMzU5OTBGNjRGNUUKKzoxMDgwRTAwMDcxQkU5Q0ExNDMwQUU2RUI0RDY1RTJGQ0Y5NjNBQjI2NDkKKzoxMDgwRjAwMDRGQzA3ODY2NDc4MTk2OEMyMjA1RUFERjg4QzhGRDlCRDEKKzoxMDgxMDAwMDFDNUEyM0M2MDM0NjI5NUM4RTgzN0M5RkU2MTk4REZCOEYKKzoxMDgxMTAwMENFNzIxQkQ3N0Y4MjM2QzRGMzYwMjcwQjdBOEI2OERGNjEKKzoxMDgxMjAwMEEzQjg2NjMyNEI5Mzk2MTRBMkU5RDVCM0JGNjg1RjAwM0IKKzoxMDgxMzAwMDMxMUNBQzFBOUU4NDc2RDBDQjM4MzQwNjY5OUQwOUI0QzQKKzoxMDgxNDAwMEZGREY2OEM4QkRDQTYxMjRGN0NFQjg3QkVFQjVBMEYzRTcKKzoxMDgxNTAwMDhFNjdFNkU1RDJGM0UzMzcwM0Q3MDFGRjFDQjc5QkVENEIKKzoxMDgxNjAwMEEyRkVGQzUzOTU5QkVGRjdBMEZGRkY3ODAxMzNFNTE5QzIKKzoxMDgxNzAwMDU0N0JCODFENTVFRDUxNzhCQzNDRjQ5Nzc0NDQ0QkQ3RjMKKzoxMDgxODAwMEZDQ0YyRTQxQTA2QkE1RjY1NTI4QTI1NzZGQkNCRDgyMkYKKzoxMDgxOTAwMEYyNzY3N0NEMDhBMkZGQ0ZGMDNCMUJGREQ0QjY0RTY0M0MKKzoxMDgxQTAwMDNERjcwNzQzM0YzN0JDQzFGRDVGMzc3QzY2RjZFN0RFMkUKKzoxMDgxQjAwMEU5RTE3OUQ3Nzc4QUYxQUU4N0MyMDc3OEJCMUVFRkY0ODEKKzoxMDgxQzAwMEM2RjI4NTA5NTM5MDFGRTA3OTU4ODJGQUI3REI0MEY1NzMKKzoxMDgxRDAwMDAzQkE5RjExQzhCNjIxM0NCRjY3RkVENzc2NEI5OEFGNTQKKzoxMDgxRTAwMEFERDFGN0Q3QjEwQTFCQzJGNUZBQ0Q4QjNERDhBRUE3RkEKKzoxMDgxRjAwMDNGQTM5RkMxNzhBNjEzRjZFOUU0QTAyRDFERThBN0ZCRDUKKzoxMDgyMDAwMDFCMTJFREVCMzA5RTEzOUY1N0NDMUVCQzEyQjcwRTYzQjIKKzoxMDgyMTAwMEJDRDc1OUUwRjQ2QkIwREUzMzk5OUZGQTM1RkE2NzJDN0UKKzoxMDgyMjAwMEMxMjQwNzc3NTQyRUZBNTM2QTBFQ0EzRjk5RkMxRjRCOUMKKzoxMDgyMzAwMEY2M0E0OEZFNzU1NTlEREJGRTIwQkNCRjY1NzBDNzQ1MEMKKzoxMDgyNDAwMEE4NUZCQzU5RjVEOTI1ODg5NzFCMzcyQTRDODNGNTBGQjEKKzoxMDgyNTAwMDI1MDRFRUYzNDRFMUVERjhCQzhGM0NGODFFRjQ4NEM3MkUKKzoxMDgyNjAwMDFGQzQ0REZFNjkwNzlERjM3QUIzRUFFOTRCQTJGNUVBMTQKKzoxMDgyNzAwMDREOUU4OTNGRjZFMDNFMzlFNkZDRTIzRDY1NEYwRDIzMTkKKzoxMDgyODAwMDdCREJBMEFGREIwNDdEMkQ3OTcyMjhFOTgzNEIzQ0U2RDQKKzoxMDgyOTAwMDdCNTM5NjNDOUU0QkU3ODk0QTI1MTZENzhFQzQ3QjNGN0QKKzoxMDgyQTAwMDMwMkY3RDA3RDAxNTlFMjNEQ0Y3MjlDRjFGREY3OTI0REYKKzoxMDgyQjAwMEE1OThDRUEzQjJDMDc2ODRDRjY4QkZGM0U1OUI4NjUzNjIKKzoxMDgyQzAwMDVFRTdCMUI0RjNCQjE3MTlFMDBCQTI3RUM1Mzg5QzJGNTMKKzoxMDgyRDAwMDA5RkU5OEQ1OUE1QTJDRjRCQkU3MTA2RjM3RkRGQUM5RkUKKzoxMDgyRTAwMEQzN0Y0MEZDRUM3REZBRjEzQkIxNERDOUY5RTE4Mzg5QzQKKzoxMDgyRjAwMDdEQ0MyRkYwMDBGQjE4RDkzRjVEMkNDMUVGODg2M0ZGQzgKKzoxMDgzMDAwMDNDMkJGNEFGRUZDQjNBRDkyNUU3RTQwQTkxQkZDRUVEOTEKKzoxMDgzMTAwMDEwNDVGNjY3NjAxRTc3NEJBQjkyODg3OEYzQTJDMTYyNzYKKzoxMDgzMjAwMEM4MTdEMDA5QkQ3OEZGQTJCODNGREQwOUY2RDk3MDIxODIKKzoxMDgzMzAwMDdGREEzRDFGNEY2OUUyNzEwODkzNUU1NzcyQThDQUE0QTUKKzoxMDgzNDAwMENGNTVDMDNGOTRGNzk3NkYwQTM0RTIzRDhEQkRFQTc1NzMKKzoxMDgzNTAwMDYxOTlFQ0UxMkZBQkRGQkRGMzI1RTU3REE3ODdGMzdGQzYKKzoxMDgzNjAwMDRCMDE5N0RGMkRFMTg0MTBCNzFCNTgzMUVBN0JDRkUwM0EKKzoxMDgzNzAwMDVDRTBGREI0NjRCRTJGRDhBNUNFMDIyN0ZDN0VDNkYzMTgKKzoxMDgzODAwMEM5QUEzNTU5QjBEQzc5MUMxRjU4QzdCRkQzQzNEQTM4MjYKKzoxMDgzOTAwMDlERjZFODdGODcyRUU1N0Y2NzRFOUMwMzJFMTFFN0EyQUUKKzoxMDgzQTAwMDYzRUM0OUUwMkJCRUM5MjY5OEY0QzdGMEUxQkZEMTM5OTAKKzoxMDgzQjAwMDk3RUQyOURBRUZDNkEzM0UwRjdBMEFGMkJENEJFREIwNzYKKzoxMDgzQzAwMDI3Qzc5OURGMkY1MTdFMDI3RDhGRjU3MkZCQzRCOTg3RDUKKzoxMDgzRDAwMEM3RTE5QzlBNEVGNzlFQjk3Q0JFNTE2ODJGMTlFRDRGQUMKKzoxMDgzRTAwMDg5RkQ2NkYxRTEzNzg3RDg2MTlENEVDQjQ3QkMxODQ3QzAKKzoxMDgzRjAwMEE4REVCREMzOEI2NkYyNjU4OTgxMjQyRkM2NEI4RUJGNzQKKzoxMDg0MDAwMDVBRUFBMzdDQUJDRDQzRDBBRTZEMDlGM0Y4QzQwODk1MEUKKzoxMDg0MTAwMDA1RDUzOEY3MzVENzZFMkNBNjRCQkY2QjM2QTY1MjM5MkIKKzoxMDg0MjAwMDBDRkQwOUYwQTgzNkNDRTdEOUI5QTczMTI1OUVCRDVENzIKKzoxMDg0MzAwMEZCMUY3QjA3RTFCQTNEM0Q4MDlGOTcxQUQxNUFCQzEwQzQKKzoxMDg0NDAwMEU1MUZDMjYyMDMzOUY3RDRBN0MzQTlCRjRCQkNEOTM0MTcKKzoxMDg0NTAwMDNGMTg1RkM1RTcyMDkxNjRCQ0VGRTg2OTYxQUY3NTdFQTYKKzoxMDg0NjAwMEFBNTAzQkEzREYxMTdCMjYyQTNFNThDQkMyNzBGMzAxRjIKKzoxMDg0NzAwMEIyMEY1QjFEMUFBRUIzNkIwQkJGMEZDRUQ1RUEyMkI5OUMKKzoxMDg0ODAwMDU3QkI2RjJBQjdFMzkyNzlEQzczN0I0MkY3MUZDNTM5N0MKKzoxMDg0OTAwMDM2RkFCQjA0MkU1RjMzNEI4MUZFQjdEQkY5RkUzODBDOTYKKzoxMDg0QTAwMDE4NjA4NzNCRjJEQzE4Q0ZENUZBNjM0QTZBNzdFNkYxQTkKKzoxMDg0QjAwMDdCRjU1QzZBMzNGQjg2M0IxQUVGMUVDMkZCNTQyRkE3ODkKKzoxMDg0QzAwMEFCRUQwOTYxMTlGMzc2QkE4MTI2MUYyM0I4MjI3MDMyMDkKKzoxMDg0RDAwMDFBRDc4MDczMThFOUYzREJFRERERUZFMkY5NEIzQTVGNzEKKzoxMDg0RTAwMEE3MjExQzFDNEVENjNBNTQ0M0JEQzJFNUUzRjE1Qjk3NkQKKzoxMDg0RjAwMDRGRjMwN0E1NThCODZBNDc4MjlFMEJGQzc2NEYwMzhCNTMKKzoxMDg1MDAwMEZDN0QwNENDNjM0Qjg4RDQ5REMwMTNEQjczOTg5MDA3MkIKKzoxMDg1MTAwMEMzNTY0RkNFOEFBRTgzNDAxQTEzRjk3RUY2M0RDMzU3MzkKKzoxMDg1MjAwMDM3NEQyMDNCMjdBOEEwNUQwRkE1MjcwNUU3QzlGNzM3RTIKKzoxMDg1MzAwMEJDQkY2MDQwMTFDNzAzRkE4OTEzOURGQzdENEY3QjI3QTgKKzoxMDg1NDAwMEJGQjI0NDc1RjM3NkZFMjQ1RkUyMzQ4OUY1REM2NzZBRDYKKzoxMDg1NTAwMEY4OURFRTkwQzJFRjVFODlGRUFERjA4MTkxMUFDMDUyOTcKKzoxMDg1NjAwMEZEQzJGMzQ0Qjc4QkU0RDYwNzQ3Njg3ODJFMzFCMDAwREMKKzoxMDg1NzAwMEU5RjU1NzZGQzkwQ0VGNDdGQUUwNDkxNzlENDMyRTc4OEMKKzoxMDg1ODAwMDZFMzNGOUFCQURGREFEM0VENjcwMUZFNjY1NzczRDI3ODYKKzoxMDg1OTAwMDY5OTgwN0RBNjVFQkE2Qjg1MTRERUI3Qjc0NUU3MUVBMUEKKzoxMDg1QTAwMDlFMTM3NDZFNEI0OTBBRDQ3OTQ3NjM1RUM0OEEzMkM0MDEKKzoxMDg1QjAwMERGNThENkRDODhGRTNEOTA4NzE0QTc2RkM5RTBGMkUzNTAKKzoxMDg1QzAwMENDRDE0QjFFNUIxMTg1RUYwN0JEQzJCRkRCMURCODE4QjgKKzoxMDg1RDAwMEY5QTY1NUYwRTczRUQ0NkZBMERDMkRGNEFDRERGQjZGQkYKKzoxMDg1RTAwMENDOEQzRTg3MTU2NDA3QzgxRkQ2QzAwRTUxN0VBMUYxMDEKKzoxMDg1RjAwMEJDMkJBNEQyMzlCMEUxQUYzQjZGRDFBM0U4QUQ1OUYwQTkKKzoxMDg2MDAwMDdCQjMxODJGM0YyOUIwOEFGODc2RkY5RkVENUUwREYzRkMKKzoxMDg2MTAwMDU4NUI4NkEwREM2RDAxM0RBQ0FGN0NDNjVBMEJERkY0MjUKKzoxMDg2MjAwMEU0Qjc5Q0U0Rjc3MUMzQkEzNjI1QzEzQTNERkRGQTlFMjIKKzoxMDg2MzAwMDRCRjFFRjhCMDBGQzhDRUVBQjNBRUUyMEI5QjkzQjlCRDMKKzoxMDg2NDAwMEYzREY4QUQ3M0UxOTg5NzJFQjkzQkQ4QjJFNDY3QzJEQzIKKzoxMDg2NTAwMEYzREEwQzNBOUY5NDgwRkNGNDJDMjMzOTY2RjA2MzIxMDIKKzoxMDg2NjAwMEYyQTM4NEY3NDI3MTNGNEEyMUQyMzlGMjlGQkQ3RDFBQUQKKzoxMDg2NzAwMEYxREY2RTdFMkYwNEQwMzlEMTNERDBCOTBGRjU4QjQyOUEKKzoxMDg2ODAwMDFGRDAzRDdEM0Y5NEY4Nzk3QkJCQ0NDRjgxODMxQ0NGM0QKKzoxMDg2OTAwMEE3RkEyNENBNTdEOURFM0VEOTQ3RkMyQzAzNkE4QjkwMkYKKzoxMDg2QTAwMDJGQzMwN0E4OUYxNkZBREI3NUFDQzQ3MjlGRUIyOTRDNDkKKzoxMDg2QjAwMEQyMTgxMDkxOEY3RkYzNzAzRTZEMjlEMDkyRkMzMDlGQkQKKzoxMDg2QzAwMDQ0NDUzMUYxNDFENDNFQzlFQjYyMUY5NTdGNzREM0VBMzIKKzoxMDg2RDAwMDBERjhGN0MzREFDNUJFMjBGNEFFN0Q0MkNGNjVDN0I4NEEKKzoxMDg2RTAwMEJDNUYyQUY2QjIyNUJGMTlGN0VENkQzMERGMjUyRjI5QzMKKzoxMDg2RjAwMDVDRkUwQjNBMzkyMEY0RTA0M0Y1MTk1NEM3RkQ0MjgzODAKKzoxMDg3MDAwMDc1MUEwRDI1REUwNzU0QUFEN0UxOUYyRjYxNjNDQTlCMTYKKzoxMDg3MTAwMDBGNjIzOUFFQTJBNTBDOEY0QzREOThENTdFOTA5RjYxMEIKKzoxMDg3MjAwMEQzODcyM0ZERUQzQTcwRjU3MENBREYzREVFNjA5OEEyNjUKKzoxMDg3MzAwMEI4RUI2RkREN0Y3QzBBRjM1MUY3MDFGRUUzRUM0QkU4MDkKKzoxMDg3NDAwMDlGNjUxNEJGQTkyMDdBRUM4RDZFQkFBNDhFNkJDNkZCMTAKKzoxMDg3NTAwMDQxMEZCQ0E3N0FBQTBBMUI3RDBEMTIwNkUwRTNGNTdCNDgKKzoxMDg3NjAwMEFBNTZFM0JEODAzNzI1RTlDNzkxMUU5N0ZCMDJDNzkxNDIKKzoxMDg3NzAwMDhGQkE1RUY5NUIzQUNBRjRERDQ3RkZFQzQ1NzlCRkNCQUYKKzoxMDg3ODAwMEFFMEY0NzNBREI5NTAzRjY0MDFDRkEzQzJDRThBN0E0NTEKKzoxMDg3OTAwMDk3QkM4QUNGQkNEQzVFQkEyNEM4RDYyMUZERDRFQzUyOEIKKzoxMDg3QTAwMEU4RUYxNjlDREVBNUU4NzgwRUZCNUQzRDkwOEU3QUNFNTQKKzoxMDg3QjAwMDQ5MTZCQzdFM0NFRUVGQzJBRTlEQ0ZEMUNFRTZBM0RFMjUKKzoxMDg3QzAwMDMyOTJFRUNCMzBEOTk5NEM1OTJFRDMzREVGQUQxMkY5MDAKKzoxMDg3RDAwMDI3MkEyRDdBNDgzNTZCNUUzNTE4Rjc4REQ2Q0Q3NjlDRDUKKzoxMDg3RTAwMDQ3RDUxNkYzRjdENUE4QkY4Q0M0QjI2RjdCRjUzM0FGNkUKKzoxMDg3RjAwMEQwNUY3MjU5MkVFQTJGNDAzRkU0OUZFODdFNERGMTNGNTMKKzoxMDg4MDAwMEM2MjhCRkE3MERGMzdCOUU5NjM5N0U0MDVFMTIxRjFBQzUKKzoxMDg4MTAwMDdBQ0M1NjlGN0UxQUY1Q0FEMzgyNEVCNzBCN0JCNDdCQjcKKzoxMDg4MjAwMEJCNDRGOUZEQzNCNkYyQkNFQjcxMjdCNUNEOENDRjlGMkQKKzoxMDg4MzAwMEYyQzIyQTg1MUMxQ0E3RjJGOEM1QjhBM0I5MTQwRjFERjMKKzoxMDg4NDAwMEEzMzNGMjg3MkM2ODk1NDI4OEM3NEE0M0FGMTNFNzI5QzAKKzoxMDg4NTAwMDYwREIyNUJENkUyQzBCMzVFMkZENzIwQkI3NEE3NDBFNDIKKzoxMDg4NjAwMDYzRDE1NkIzRkZCRTdBRTMyQjg3RDEzQzVDREM2MjM5MUYKKzoxMDg4NzAwMDFGMkZGMDYyOEQ2RkVDQzA1RkUyQzQzNzJFNEUxMkZFRTgKKzoxMDg4ODAwMDlDMjE2Qzg4RTlCQzU1REJGOTlEQjdGQUFCMzg3RkZEQkMKKzoxMDg4OTAwMEFBRThERjY4MzcyMTg5RDM0RDhEOTg2Rjc1NDgwOTg5MUIKKzoxMDg4QTAwMEJGNEZFOUM2RkNEQjVCMDU3RERDMkFFOEEzOTY4NUVEQkUKKzoxMDg4QjAwMDk4QkZCRjc4MDM5RjJGNUI2RjMzREQ1QkJDNjBEN0VENDQKKzoxMDg4QzAwMDc0MUVDMTRBNDc5NURCNzhEQzBEMTA0OEYxOURDQTRERjYKKzoxMDg4RDAwMEU2Rjc1NTAyMUY1NTE2N0NENDA0MjQwQjVDNUNERjhFMzIKKzoxMDg4RTAwMDg1QUJFNTdBNUNERkM1REI2Q0Y0RjczOUFDNzA5RDY1NzAKKzoxMDg4RjAwMEIzMjk4RkU4MUYwRDlGNzU5REFFMzNENkU5NTI3NkE5MzcKKzoxMDg5MDAwMDY5OURDQUZCQkU5RjIwNjJERjk4RjVERjY3MEY1RjRBNTMKKzoxMDg5MTAwMEY5MkU2N0RBNzJDODdGNjBEMDg3QjU5RjI5NDI3RjlFQTMKKzoxMDg5MjAwMEJBOTFFQjk5QTdGNzk0MjU4RTQwQkJFODg4RUE5N0EwMDcKKzoxMDg5MzAwMDlGRTI5NzNFRjZFMjc5OEZBMkJEMEFDM0I4NjA1NzZCRkIKKzoxMDg5NDAwMEYxM0EzQ0E3QkRCMzJERUY1QUJDOEZBMkU4MjU5NUY2QUUKKzoxMDg5NTAwMDhERTI5NzhBRTg1RTkwQTI5NzhBMTI3MzI5OEY0MjRCMjQKKzoxMDg5NjAwMDQ1N0M0MDNGQjRFRjc2MURDOUZCN0QyMUNBQ0ZCNkM5MTcKKzoxMDg5NzAwMDI1ODhFNjE1NDc4QTEyNTEzRkQ4QzlCODNGNDI3QUE5REYKKzoxMDg5ODAwMDI0QjUyMzZBMUY1OTlDQzRGRDAzQUIzMkRFQjkwN0Y1MzkKKzoxMDg5OTAwMEY3QTlDRkRBRThCQ0M5NTQ1QkY3Q0I5ODdGQjBCMzRERTkKKzoxMDg5QTAwMEY1QUY4MDdBRjU0QjczMUJGMDlFOEFFQTI3MjUzRkFBMjQKKzoxMDg5QjAwMEQ5ODdEQjk3QTQ3RDA3RTlBQ0Q1RTY3MzEwQkNERjNEMTIKKzoxMDg5QzAwMDgwRUY4M0RCMjQ3RjNFQjRBRkREN0JENUYwRUQ5OEU3MEQKKzoxMDg5RDAwMEJEQjlEODFGN0QyRUJCMjg1OUJCMUZGMzJBNTk2NjIyNkIKKzoxMDg5RTAwMEQ5REY1MzJGQjJEMTdFN0E2QTUwRTJDRkU4M0UxNjdEQUUKKzoxMDg5RjAwMEYzMTQ5NEIzQTc5RURGNjlBNzczODNEQjI1OTYwMTEzNTUKKzoxMDhBMDAwMDM5OUM3MUYwMTlCQURGRTM5N0FGNTBCRTQyRDlBRTU3MjcKKzoxMDhBMTAwMDI4M0ZBMTM3Nzk3RjNBQTRCMDMwRDlERENENzQyRkNDNkYKKzoxMDhBMjAwMEUyQ0Q0NkJEODNDRTQxNTQwOEJEQTk2NkNCMDlBQTU3MDUKKzoxMDhBMzAwMEExRkUwRkUzNTU2RDUyNDIxQUZDN0E3MEVGQUYyOEJGQ0EKKzoxMDhBNDAwMEExNjYxQkNGNkY4MEY3MjQ3RkFBMzA3RUFBNDVFODdDMDEKKzoxMDhBNTAwMDJFRTM3NDMwNTdDODlGNDU4Q0RGMzNCNEE4OTk5RkEzODkKKzoxMDhBNjAwMDMzRUU0NTMyRTg3Q0ZFQjYzOTk0ODcxNjkzNkY4NkY2NkUKKzoxMDhBNzAwMDI1QzUyMTlBODlCRTYzRUYxQkUyRjQ2REJENzdDODRBMTQKKzoxMDhBODAwMERGMkQwNjdEMEY2M0MzOTBCRTNGOTlDOEYzQzMzRTc5QzcKKzoxMDhBOTAwMDI1MjFCMTEwRTZGM0M5OEIwQUU1RERGNzQxRTdCNDlGNjQKKzoxMDhBQTAwMDFFMTFGQkZGOTlCMDRDRkI5M0QxQUU3M0NGNDdCNDhGMkYKKzoxMDhBQjAwMEQ0MUUzOTYzNDc3RDc1NEFFQjg3QjQwRUQzNUJGNzRGRkQKKzoxMDhBQzAwMDQ2M0M3RjhCMDVBQTExNkZERjZBNERGNDIxOUY0RkVGNjMKKzoxMDhBRDAwMEUwNzI2QjVBQUIyMzg0N0VFQTZGQjE5NjI2NUNERkFFMDAKKzoxMDhBRTAwMDdEM0Y2RjRBNDE3QTc5ODJEMzhCMjFDRjE2MEE3QzJFNDMKKzoxMDhBRjAwMDE0Rjg1Q0E4RjJGQjlFQUEwQUY3M0Y4OEY5RDBEMzE4QjUKKzoxMDhCMDAwMDk3MzdEMzVBODRCQ0Q5NjRDNjZGOTdBRDQ1MjVCQTE5MzcKKzoxMDhCMTAwMDIxQjFFNkVDRDhGRDZFMTFFQkEwNzM4RjVEOTlDM0U5MkUKKzoxMDhCMjAwMEVGNDkwNkMxNUU0NTNEQUM3QTlCMzUwRUNFRURGQTFBOTMKKzoxMDhCMzAwMENCN0U3QTMwQzlGNkE1RUVDMTc4QzdCMjJFRDNCQkY5ODkKKzoxMDhCNDAwMDdFMzYwREU4MDlFMzIxNkRFMTg2NDI5NDdCMDY3RUFDMUEKKzoxMDhCNTAwMEVCRDJBNkU1MjZGNTc1REVGOTY1QTFCNzFCRjU2RjhCOUYKKzoxMDhCNjAwMDdCMjY1QTdDQ0RFRTY4M0JCQ0RDQzdGNUYwQUFCMTRBNDcKKzoxMDhCNzAwMDEwRDdCNUM3NUVDOTNCMzg1MjkzMjNGNjBBRDgyOTlGNTAKKzoxMDhCODAwMDI1MERFMDc2Q0IyOEU4RkE4NTJDODVBNUE1NDVFQzk1NDIKKzoxMDhCOTAwMEQ1MTlGNzRGMkY0QUMzRkIyM0I4QkNFODFDMDNGRDYxNkUKKzoxMDhCQTAwMEJFODBDQTQ4NEVENTZFNzM4NEQwQ0VGODFGODRCRkI4M0QKKzoxMDhCQjAwMEJCMDA4MDAwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwQzgKKzoxMDhCQzAwMDAwMEI4RDU3NkQ2QzUzRTcxNTNFRjdDMzFGODkxM0ZCRTAKKzoxMDhCRDAwMDlBNzg2NjJDMzRCQjMxRjkyMDI1ODREQjEwOUE0MEQ3NzMKKzoxMDhCRTAwMEY2MjZBNTFEODMxNDFDNTgyOTZBQUJFMkI2NUJEOTBBODgKKzoxMDhCRjAwMDRFNTA4NTI4MTI5NUI4ODlBOUQ2OTU2OTQyREE3RTU0RDcKKzoxMDhDMDAwMEVBNTZERDIyNkQ2MjFCQUI0QzA5NkE5ODkyQzhBMUExOUQKKzoxMDhDMTAwMDI1RTk5MEEwNDAxQkQwRDY1OUZDNjBFQjk0OTBDMDM0NUQKKzoxMDhDMjAwMEQyNEQ5NUQ4NzNERTdCOEQxRDEyQjQzQTUyOEVERkFGRDQKKzoxMDhDMzAwMEYzOUVGMzlDRTc3RERFRDc1RDdERkZGMjlBRjU0NERGN0UKKzoxMDhDNDAwMEVEQkZFRUNEQzJDNkZCQTU0NzA5QjYzQTk0RjA2OURGODkKKzoxMDhDNTAwMDIwRUEyMEYyNDQ5QTYwRkIyNDIzNDNCMEFCQUY3QjEzOUQKKzoxMDhDNjAwMDI1NDQyMzU1OEI0MjA5Q0NCQkExRUFGMzM1QjQ2RkYxRkYKKzoxMDhDNzAwMEU3RTFCQ0VERkE1MjIxMkEyM0VBODRENUNCRjJGRDlEMkYKKzoxMDhDODAwMDZBRDZDQkYzM0JGQjI1RDM4NkVEM0RGOTlGOEFDQTUyQ0EKKzoxMDhDOTAwMEEyQzk4MUU5OEFFNzYwNTc2ODMyRkU3MUZGRjc5NkE4OUEKKzoxMDhDQTAwMEQ4NzdFQTkyOEY2Mjk1RDhEODMyMkZEMEZENDQyRjkyOTAKKzoxMDhDQjAwMEYzRDlBNjExRUQ5OTg3RjZGMDRCRURENDgwMEU2OTdGQkMKKzoxMDhDQzAwMDM5QjVDMEFGODc4QzBDRDY3NTVFNTQwQzRCNDdGRjA5ODUKKzoxMDhDRDAwMDBGNTEzMzUxRjcyNzdGMUE5RTE3MjFCQUY2QUU2NEY4NjkKKzoxMDhDRTAwMDc0NjdGREFCOEQ2ODNGNkZFRjlGODdGOTM3N0YyNzE5NUEKKzoxMDhDRjAwMDE2QTZCRkY4NERBMjg3RDBCRkVENERDRjk1QUNERkQ5RkEKKzoxMDhEMDAwMEVCOTZGODlGQkVCMjE3RjM5MjQ3RkNGQTFCNjg3NTUzQjcKKzoxMDhEMTAwMDRGMzk2MTZFMEZFRDE3MzY0OTNGQkJBRTA0RTFBRjJGRkYKKzoxMDhEMjAwMEU1NjU1Q0M4MkU1ODFGMjNEQTdFNzhBNkJGMjRBOUY5MTIKKzoxMDhEMzAwMDM2RjJEQkYzOTdENjhFRTE4MkYxMzU1QTY5RTQ2QTAwQTgKKzoxMDhENDAwMDVGRUFBOEVFOTZDMkYxMTcxRjkwQjBGRkU0ODhBMkY5N0YKKzoxMDhENTAwMDI0ODFEQkRCREYyQUM0RTczNEMwNThDMEZENDUyNjIxNkYKKzoxMDhENjAwMENGQzk3MzI1NzYxMUU2RkQ3MzFGQzY2QTg5QzZGN0MxQTAKKzoxMDhENzAwMEI5MEY3RTVBMTQ4MTg3QkNEMkIxNEIwNkRGOEY3MTNEOEIKKzoxMDhEODAwMDE5RkZDNDUyQTIzRjBDQkU3RjJGRjMwMTA5ODgzQTZDMzEKKzoxMDhEOTAwMDNGOEM3OThCMEJFMjRFMjNBODgyMzgxMTk3OTFDMTdFQ0MKKzoxMDhEQTAwMDVEOUYyQTA2REM3MzVDMzVERTQ4M0VBRUUzNkEzNjY4QkEKKzoxMDhEQjAwMDE0RjA2MzdBOUZEOTMxNUM4RDcyNDkyNzQ1QkQ2NDY5OEYKKzoxMDhEQzAwMDU4RDhEQkJDMzlBMUM0RURGQTdDMUJGOTZDMzVCMUZFNzcKKzoxMDhERDAwMDI5OTcxN0E0NEU0NUUzODhGMzU5MEQ0NTA0M0ZCQkZCODMKKzoxMDhERTAwMDlERkFDQTAzOEVDNUZFOUI4OTcxNDE5QkY3OUYzNURFQjQKKzoxMDhERjAwMDY2RURFMEYxOUI5NTAxQjIxOEI3MkZBRDc2NkVFRjhFNjAKKzoxMDhFMDAwMDI5RjQwNkRBQkIzRjc5QTk5NjBBRjYyNzhFMTNGNUVEMDkKKzoxMDhFMTAwMEYyNEM0NTk5Qjc1REU3NjQxMTVGRDdCOTFCRDEyQUI0MEQKKzoxMDhFMjAwMEQ3RDIzQkFCMzVCNEQ3NTE3QTNGOEY3RjE4MEJGQzg4MzQKKzoxMDhFMzAwMDc5NkRGMUJFRjNGMzdFQkUwODI5MjI1RUUyN0NFMUNGQkMKKzoxMDhFNDAwMEEyNUYzQTdFREQ3QzdCNjhBM0MwQTFDN0U1RDUwQjIxN0MKKzoxMDhFNTAwMDU5Q0M3RjU1NEJCQ0MyRTc3MEYyREM3RkEzNDg5QjhFOTgKKzoxMDhFNjAwMDVGQjgxMkU0N0FFNUVBN0RFN0I5QkIxRDM3NzZFMEY1MzUKKzoxMDhFNzAwMDM3NUJGNUYzNEY4MzA3OEQyM0FBMTU0MjlFQzdDNjhBMzkKKzoxMDhFODAwMEVDNzZDNjY1NjBEQkRGRjY3MkREMkVGQjg4Q0ZDM0VFQzUKKzoxMDhFOTAwMEMxNkRCNUM0N0UxMzg5NjU3MTlDQzM5QjgzM0Y1RUM2NUIKKzoxMDhFQTAwMDM4OTBENDIzRTJCMjM4M0VDNDM1RDE3NzMxQUFBMzNGRkIKKzoxMDhFQjAwMDM5NzAzMUNBRTNDOUUzMkI3RTYxNjFGRUYyMzM4REVCNzkKKzoxMDhFQzAwMEI4RkZEODY5NTVGMEFGRjE0QzkzRTBERkIxM0YzNzk1NkIKKzoxMDhFRDAwMDJERTJDMEM5MDhCMERGRTQ4ODFBNjc3QzkyMjM0RDFGRDkKKzoxMDhFRTAwMEI3NjM1RUYyNEM1QjkzQzREQjlDNjkyQTYzRkQ1OTJFMjkKKzoxMDhFRjAwMDUxM0M4RDcxNjlBNDRBQjQ3M0Y5RkM1QzczRjA5QjFDRkUKKzoxMDhGMDAwMDAyMUZEMDJGNTFDQ0UxMEY1NUNERTBDRjhFREU1MzVFNDYKKzoxMDhGMTAwMENFNjM0NzlGNjIxNkYyMjhCN0VFOTBBNjBBM0ZCRjY1NjAKKzoxMDhGMjAwMEZFODA0RkRENjlDOTE0RkMzOEVBRDgxRDdEQzc0NDdFMzgKKzoxMDhGMzAwMERCM0Q2OTUxRUZFRTIzMUU2N0ZDOEY4RTI1M0EyOEQ2NjQKKzoxMDhGNDAwMDU5MzRDRjYyM0MzRUU2MkVENDYxQURENzVFNDgwODcxRkQKKzoxMDhGNTAwMEI0OTJCNkE0RTdEMEMzOUFCMDI0RDY4RDVFNEE3QzlCNjcKKzoxMDhGNjAwMEY5MzJEQTlBQThENUVBNjdDRkIzQTg0REU0NDM5MjhCRDkKKzoxMDhGNzAwMDc3QUY2NzhEM0Q4N0JGMkFGNjg3M0M4MjY1QjQzNTNFNjMKKzoxMDhGODAwMEM3NzgzOEVDRjA2N0FEOTcxMjczQzVGMzc5RUUzQzExRjIKKzoxMDhGOTAwMDFEOTBDMThCRjNFRDFFOERGOTRGNjQ5NjJDODBDRUFFRTMKKzoxMDhGQTAwMDc3NzU3NkQzRTMxRUQzQkIwQ0UzQTQ5RDJBQzJGOEZBRUYKKzoxMDhGQjAwMDlDREVCNjQwQ0ZBMDBCNzFGQ0IxQkVDNURGOEM4NzMyMDIKKzoxMDhGQzAwMDgwQjRDMzlDQTk3MzFCMjlFRUExNDVGMEIzNjY2NkZGNkMKKzoxMDhGRDAwMDEzQUM5NzBENkM1NUUxRTc2RTNBRjgyOUVCRTAxMjdDODMKKzoxMDhGRTAwMEE5QTExQUQ2NDE1MjRBMDIxMjc4RjNFRkQzMUU0RDExQUQKKzoxMDhGRjAwMEYxREE1NUFDMDc3N0U2OTdEMzk5MEZBMTdGM0FGNEVGRjIKKzoxMDkwMDAwMDM0RjQ4RjZENzdERDY3MEQ1OUUwMzEzQTc0RTlEREIwRTYKKzoxMDkwMTAwMEQwQ0YyMjhBMzEwMUJGODI3N0U0OURENERDQkRFRkYwNEUKKzoxMDkwMjAwMEQ3N0RGQjdDN0U3RjA2REY3MkY1OTk4MDY0QTdFQjY3QjYKKzoxMDkwMzAwMEQ3RTc4NkU2RDQyMUU5MUZGNzgyQUNENDQ1M0I1Rjk3OUEKKzoxMDkwNDAwMDkxNDdCREUyRjBDRkU3NDk5OEU1QzhDM0QzRDc5QTI5NDUKKzoxMDkwNTAwMDY3M0RBRDgzOEEyMkJGODk0NzI1OUI3NTFFNzE1NkY4RUYKKzoxMDkwNjAwMDBBNzQ3RTYyODEyNEM2Nzc2Rjk2NkMwQjVGODdFQTNFMzYKKzoxMDkwNzAwMDEzRjc3NjMyNzNENkNCN0NBQUU5N0RFRTM1NzE2RTJENkYKKzoxMDkwODAwMEJBNDBEMTdDMUQzN0Y4OURGQkYyNzZGRDcyRjlGMkEwNTMKKzoxMDkwOTAwMENFRjk4MUNGNDI4RjIzQzJGMjdDQkUxRkQ3QkJGN0UxNEUKKzoxMDkwQTAwMDg2OTY5OUY1QUJBNUIzOEY5NTIzOEUyNzREQzlCMEU3NkEKKzoxMDkwQjAwMEFBRkI5NkZCNEVCMURDN0REREJBMkYwOTI3MjI2MUUwQzkKKzoxMDkwQzAwMDMxNzlGNkM2RTZBNUYwMzc1QUY3RjcwQUJFNDczQkVGMDcKKzoxMDkwRDAwMEMyREYwQTk3REY1RDgxNjAwMzg1QTAyRUI1N0EyQTBCNzcKKzoxMDkwRTAwMDNDREUyQjREREMxMzY2OUQ5MEJGMEFERTRCQkMzRUZCODUKKzoxMDkwRjAwMEY2Q0IxMkQ3ODMwNERFNzczQjJGNTVBRUJGQUFCMEU2N0UKKzoxMDkxMDAwMEU4NzQ4NDk2MzNBRjdFQUY2OUNFQjlGNUQ4MEI1OTBGQUEKKzoxMDkxMTAwMEE4MUU4Rjk5OTVGRjVGNzdCQjRGN0NENEMwNzVCOTM2NzkKKzoxMDkxMjAwMDM0RDJFMDJEQThERkY4Q0IzOEY3N0M4RjBDN0MxMEQ1M0IKKzoxMDkxMzAwMDRCMEFGOTI1QkJGQzUyODU5NUE0OERFRUZEMzg5MzZGNDMKKzoxMDkxNDAwMEUzQ0MzN0FFRjdEMTBGRDYzRkNEM0NFOUREMTQ5MUY0MzcKKzoxMDkxNTAwMDgyRkJGM0Y4Rjk2MDc1ODFERjg5N0U0NUNDMjczNTVCQUEKKzoxMDkxNjAwMEYzNDQ2OTYxOUNBRjg5MzgyN0QyOEUzRkEyNkNDREE2QUIKKzoxMDkxNzAwMEE1ODVFMzI5OTdCNzU5QzFEQjlGMkNERTE5RTc3MzlDQkUKKzoxMDkxODAwMEUzQUQ0QTBFNkYzQkZCM0E0OERDNDc2RURFNjkyRkJFMEIKKzoxMDkxOTAwMDIwMkU2QkQwNjdGRjA2RTM5MzlFQTk4QTcwQzFCOUY4QjEKKzoxMDkxQTAwMEExOEI3MzczNDYxMjdDNUM0OTk2QzI3RTlCRTFGMTE5RDgKKzoxMDkxQjAwMDZFQUI5NDUxNjExRkEwOENFODI3NUE0OENDRTNGQjVENEQKKzoxMDkxQzAwMDFFMzdBQjk5MjFBOTQxQ0NCMzU0RjA3MjE1OUQxNUYzMEMKKzoxMDkxRDAwMDFFQTIyOTYxNEQ4MkMwQzNCNjkxMjE2QzhCM0ZCMzhFMTQKKzoxMDkxRTAwMEU1QTMzRTlENTY5ODRGOTlBODFBQkUwQTNFQjI5NENDNkMKKzoxMDkxRjAwMDU1QkY3Q0ZFMkE1RENERjExMzkzRjFCOEQ5MUE5RjQzNzgKKzoxMDkyMDAwMEFGMEZCQUU3RENFMEI3MUFENzc5ODJFQzQzRTg3QTkwN0YKKzoxMDkyMTAwMEIyMEE2RkYyODA0QTZCMTRFNEYzQTA0QUZFNjJDNDdCODgKKzoxMDkyMjAwMDc0NTgxNkU3NzczMEFCREJBQzVGNDY5OUJCRUUwQkFDRkUKKzoxMDkyMzAwMDQzQkJEOTc0Q0UyOTVGMzVDRjM0RTZGM0JEMTM4NzU1RDAKKzoxMDkyNDAwMEYwMTdFMjc5MkFCREVFMTEzODY2QzQ3RTBGNzNFMEM4Q0MKKzoxMDkyNTAwMEJCOTU3NDk1REJBOTcwQTVDMzY3OUE3QTk2Rjc3OUE0MzQKKzoxMDkyNjAwMERGMjdERTM5QjJERjEyNzhGQzM0RUNENDMzMDAzQzgzRTQKKzoxMDkyNzAwMEYwQjNFQUEwNDQ2M0Q4RDc1OEU0RTQ5QkYzQkYwQUFGNDUKKzoxMDkyODAwMEJFNTAyM0NGNzdFRTMxQjQ2OTBDRkQwMUJGQjM4RTY4QjkKKzoxMDkyOTAwMEI1QzY3ODQ5OTlBODdDMkJGMEY1NzE5RDhDOTI4ODNCRDYKKzoxMDkyQTAwMEY4QzJENEI1QkRFMkRERTZEMzBFMjEyNEEzRkZBMzMxN0QKKzoxMDkyQjAwMDA5RUY2OUM5MzQ2OTBGQzdFMzJGQzlGMEZCMUFFQzE4MkQKKzoxMDkyQzAwMDJGN0M1N0ZGM0FGQ0ZDNUI3Q0RFMjU1RDEzNzg1MTgyRDYKKzoxMDkyRDAwMDc0N0U2N0NDQTc1RjY5N0M2RkM4M0NBRkNDODFFRjFGMDEKKzoxMDkyRTAwMEMwRUY0OTU3RUYyRTE3M0JCQTcxRDhERUE4Q0JBOEM3RkQKKzoxMDkyRjAwMDk2ODhERkUwN0EzNEZBMkI5NjEzRkM2RTI4NEQwOEJGNkYKKzoxMDkzMDAwMDk3QTUyM0Q1QzI4OTZBQUY2MEJGMzk5RTA3Qzg2QzYxMzMKKzoxMDkzMTAwMDlDMjVCNzVFN0JGQzhFQkZFOTIyQzdGMjk5NjQzRTA3QUQKKzoxMDkzMjAwMDIwRTc3RUM0NzUwMEU3QzI4RkI2RDVFNkQ0REJGQUJDNzEKKzoxMDkzMzAwMEM4NEU2MUJGNjkzOTJFQzhGODhBNjJGODA1REY2Mzg5QjMKKzoxMDkzNDAwMEIxNjY1OEI1Q0RENDc3OTZGMDkzMUQ3OTA0RjI3OUE0MUYKKzoxMDkzNTAwMDc4MUZEQ0M3RjQwMzNDMTA0MTg2NUQ5QTkzNEZBQTQ0MDIKKzoxMDkzNjAwMDVFQ0NCRjk3NTI1NDZDRTA3MTQ0QkI0QTFEOUVFREZBMkYKKzoxMDkzNzAwMDZCOTE0RDk1QjNFMzNCRTk0QjlDRTRGQ0E2NjU2MzZDQjQKKzoxMDkzODAwMDU0RENBMzNCOUI1OUVGMThBN0VGRTQ3MDkyRjMzODZEQzAKKzoxMDkzOTAwMEIxNjNBOUFDMkU3MDE5NjE5REJFQ0Y2N0RGOTNDMUJBQ0UKKzoxMDkzQTAwMEE3N0M3NjM1Qzc5RkMzMDMwNTEyMjRENTVDOUM3M0Y4NTAKKzoxMDkzQjAwMDY4NUMzRkU2QjE4OUZBRTVFQTFGQ0JFMzc0QTBEOEMxNDcKKzoxMDkzQzAwMDA3M0ZERjFDMUM3NEQ0NzFFOUVDRkNGRjA3NTNCN0E3RkYKKzoxMDkzRDAwMEVCQjAwRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTQKKzoxMDkzRTAwMDFGOEIwODAwMDAwMDAwMDAwMDBCN0JDQkM3QzBGMEEzNjAKKzoxMDkzRjAwMDFFODFGREQwRjhFOEI4OUQxN0JGM0NBOTU4ODYwMUMxNzEKKzoxMDk0MDAwMENFRTc2MjYwMDhFMTYwNjAwODA1RTJGRDQwN0MwMDg4MEMKKzoxMDk0MTAwMEU1MzkxOTE4MjI4MDM4MTI4OEE3MDNGOTMzODBCODAwN0IKKzoxMDk0MjAwMDg4RDM4MTZBOUI5OTE5MTg3NkIxMzEzMDFDMDRFMjEzRjQKKzoxMDk0MzAwMDQwN0M5RThENzRGQjNGODgzMzMwNTRDODIwRjhDNzgwMzEKKzoxMDk0NDAwMEVDMjM3MkQ0RjVFMzI4MUVCQzM4Q0YwMDk1QkY0RTEzMzEKKzoxMDk0NTAwMDk1QkY0RDlCODFFMTNEOTI5QUY1OUFBNDk5QUY2Q0M4NTYKKzoxMDk0NjAwMEMwQTAwMkM0MDAzQTRDRTk1OTY4MDMwMDAwMDAwMDAwQTMKKzoxMDk0NzAwMDAwMDAwMDAwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwM0EKKzoxMDk0ODAwMDAwMEJFRDdEMEI3ODU0RDVCOUU4REE4RkQ5RjM5RUVDNUIKKzoxMDk0OTAwMDQ5NDIxODQyMUUzQjIxNDA4MDA0ODcxMDIyNTBCMDkzNUQKKzoxMDk0QTAwMDE0MTQyREI1MTEzRDJEN0FCQzNBODQ0NzkwNjc0MEFCMUEKKzoxMDk0QjAwMEU5MTE0RjM2MjQ4NDAwMDEwNjhBMzU3MjIyNEUxMDM0OTkKKzoxMDk0QzAwMDVBQTg0MUYxRDE1MzZDODc4NzE2QURFRDhERDY1NkRCODYKKzoxMDk0RDAwMEZBODhBOEEwQTg5QzU0NDVBN0U3RDQ3MkQ3RkZBRkI1RDcKKzoxMDk0RTAwMDkzQkQyNzMzMDFEQkRFNzNFRkY3REQ5QjdFNzVGMUVGNzQKKzoxMDk0RjAwMEY1RkVEN0ZGNUFGRkZBRDcxQTQ1QjQxMUY5RUI4NDlDNTEKKzoxMDk1MDAwMDg3M0Y5QUU2OEE4NDkwMjFGRDI5MjFCMkQ2RTM4MDk0OTAKKzoxMDk1MTAwMEU4RTc0NzU4NjA3MjVFQkExOEY4MkZBM0FEQjBDRURCMEIKKzoxMDk1MjAwMEZEMTc0MkIyMDhGOTFFQ0ZBMzdGMjE4MDY3NzBDMDE4RDMKKzoxMDk1MzAwMDhGOTE5MkEwNDI2MkM1RkRFRENDMjAwQ0Q2NDQ4MTlDNTcKKzoxMDk1NDAwMDE3RTBBQjM1REZFOEE3REVFMTFCNEZEMjA4RjlDMkM5NEYKKzoxMDk1NTAwMDUyQkQ4QTY2OTVEM0Y0NEQ2N0I0QjE4MDEwODcxMDFFNTIKKzoxMDk1NjAwMEMxQzY1Mzc3NDk3NTI5QTY5NzQyREEyODkwQjk1RDlFRkUKKzoxMDk1NzAwMDI0RTMyMEVCMDg5OTQ0OTNGREMzNDQ1MkQxM0ZGRUM0MzkKKzoxMDk1ODAwMDcyNDZEQUQ0NDA0OENDREUwRkNCMzIwOTI1NkJCNzgyNjUKKzoxMDk1OTAwMDhFMUZEQTdENUYwODU3RTA3ODNDNDQwNjdDMjgxQzFGNEMKKzoxMDk1QTAwMDM2MTIyNDg0Q0VFQjg4RkZGMkMwM0MzQUZFRDY2OTRBREMKKzoxMDk1QjAwMEQwMEUxOTNCODc0MTY1RTIzM0YwMzgzNzFGNjEwNzg3Q0EKKzoxMDk1QzAwMDJCODlDNkYxMUQ2QjE5NDFFQjM5ODMyMkQ5NDRBMUE2MjEKKzoxMDk1RDAwMDgyMkEwNzI5MjE2NEVCOTRDRjAzNjEzQTFFQTcxQzIxM0MKKzoxMDk1RTAwMDJBQTQ5RUU0RTNCQjlBODhCQzlEQkJDOEM1Q0MzQjcxNTIKKzoxMDk1RjAwMDNENjQ1OEEzNDkwODhBMzAyRjYzQkNEQjZDNzQ1Qzk5QzYKKzoxMDk2MDAwMDc0M0QyNjg5NjQxRjg1Qjc5NENGNDk4M0YxMThGMzcyOUUKKzoxMDk2MTAwMEE0RThBNzE5RjAzQTlBOTBDRDBEMEU0QzlCMjZDRjQ5OUQKKzoxMDk2MjAwMDIzNTA4RkY0Q0U4NUY1REQzQTI1NEJEQzI0RjQ5NzNGQUIKKzoxMDk2MzAwMDMyRTUzOTQ3MEY5RDZGMjNBRkQ3QUExRDc1NDA3OTYzNzcKKzoxMDk2NDAwMDlEMTNGMUI2OTVFMzI3NDQwNDFDRjdFNjUyRDdEQzY4NzYKKzoxMDk2NTAwMEM5QzA3MTg0ODgwRkYzQjczQTY5MjU5ODg3OTc0NEY3OTIKKzoxMDk2NjAwMDE1NDAwQjNENkRGMzI5RUM5QkFDOTY2REQyMDZEMkNCMjkKKzoxMDk2NzAwMDhDNTIzOTE4QTNFM0Y0NzgzQzQxM0JDREY3MDQ1ODdENzQKKzoxMDk2ODAwMEM3RUI0MjU0QzNGQTIxQ0YzMDVBREU2NUFDRkY2NEIxNTgKKzoxMDk2OTAwMDFGOUZGNEZGM0U1MjREMDhFNTQ3NUY0RUVGNkJEMDhGQTIKKzoxMDk2QTAwMEZENzU3QjMwNDRCRkJCRkZGQ0U5NkJGMzY5QkJFNDZEMjgKKzoxMDk2QjAwMDIxQjgwRkZBMjVBQjJDRUI0NUY2MzJCQ0RBNTRGQTZGMjEKKzoxMDk2QzAwMDlBRUY5QUI2NjgzNjRDQzFGREU1RTNENTgwQjc4RDQ1NzMKKzoxMDk2RDAwMEFCNUQ2QjYxQUQ4QUQ5RkFBOUY0N0ZFNzBCNjlGQjlBQTAKKzoxMDk2RTAwMDYyRTlERjY2NUVERjAyMjA0RDJCRUMxRTM5RTdEQjIzRUIKKzoxMDk2RjAwMEI0RDRGNEUxRUVGMTkxNTgwNjJEMkNERDg4RUI5REFBNEYKKzoxMDk3MDAwMDVDRkRFQjEzMkUzQjZFRUFCNzhENzgzMzRGQjlFOTNGMjIKKzoxMDk3MTAwMDJFMjU5NzIyOUY1RkEwRkUxNzBEQzFDQjhFREI3MERFM0EKKzoxMDk3MjAwMEEyNTlERUE0MkFCRjlFRDM0NzFGOUQxNTUwRkEyOEMxMTcKKzoxMDk3MzAwMEY1MEM1QzUzREFGRkZEMjVBMDBCRTAwN0JEMTJFNTE4MjAKKzoxMDk3NDAwMEYyMjI5RDZGRjM3NEQyMkJEMUY1NjgxQUE5NjhFQjI4MjkKKzoxMDk3NTAwMDFFRUNBQTEyMTM3Q0FDQ0Y1RUEwMkZGODA3QUQ2QTJGQzcKKzoxMDk3NjAwMDZBRUUxNkM2MDNGMDNEOEIxQzZDMTlGQUFGQzFEODIwMDcKKzoxMDk3NzAwMEUzNEI1Qzg3QUY4QUJGMThFMDZGNUMzRkZFRUNBNDNBMTYKKzoxMDk3ODAwMDJEMDZFQjVEMUQ0MEZDNzhGOTM4MzY0Q0JGNUQ4QkQxNjIKKzoxMDk3OTAwMEY5NkNDOEZFNjFFODZENjJDMkUzQTU4Q0NGRkFDNjkzOEUKKzoxMDk3QTAwMDEzMjVFNkZFMERGRUJBNDQwOEJEMDhGODkxOTRFMDZCNUYKKzoxMDk3QjAwMDYxOEEwRjMyNTUwOUVFNEIzMjJGNTk2MDcyQTUxRkNGQzcKKzoxMDk3QzAwMDBFOTkxODc4MDJGQTNEQUMwN0FFRjFFMjkwQUExRDI2NzgKKzoxMDk3RDAwMDNDREIwM0NGRkQxOUYwMjc2NzkyOTg3QjNDN0U2RjkyQUMKKzoxMDk3RTAwMEQzQTlGQ0NBMjRCQTNCMEQ1QjkxMDFGRTMzMjk0MEZFOEMKKzoxMDk3RjAwMEE0RjkzMzk0MzI5MDBCOTcwN0MzQjQ5RjY2MUJFRjRGQzUKKzoxMDk4MDAwMDVENkI1OUQ3M0ZGMzc1RURDRkQ3MDNGRjY0QzlCNzYxREYKKzoxMDk4MTAwMDdCQ0Q1RTJFMzdENDQ2MUNERjgwRkE3RTU2M0Y3MUJFNkMKKzoxMDk4MjAwMDdGMDIzOTNBMDlDQUE5OUM3RTFBMDNBMDZGMUNDMzlBMDkKKzoxMDk4MzAwMDY3MUQwMUJDOEZBRUVCOUEwRjczNTQwOUUyQzE5MEZGMTQKKzoxMDk4NDAwMDU0MDExMjI4NDdGNUMzOUZBMTlFNDNBQjQ2QkNEQjczNkUKKzoxMDk4NTAwMDQyMjQ4Qzc4QjNFQUQzOTQ3MjM5NDE4RjBFQTAyNzk1QjUKKzoxMDk4NjAwMEMyNDYxQjg1RjBERjFDMTVGOThEMjRFQTZGOUU4NjcyQjcKKzoxMDk4NzAwMDJGNEEwRjM2MjZGMDE1NkQyQUE5OUUyOTE1OThCQzI1NkEKKzoxMDk4ODAwMDdBMjZDRTVGMzZFODgwREIwNzM2MDMxRDNCMTkzRkFCRjcKKzoxMDk4OTAwMEJDNUYwNUM2NDNFNUExOTM0NEIxNzEzN0E1NzQ4MEJEOTMKKzoxMDk4QTAwMEE0MEVFMTczQTFCMjk4MDA3NDIzOTM4RDIwRTdFQzIxRkMKKzoxMDk4QjAwMDkxRTgwNTAzRkJERkNBRjU0OUFBNzk2QzlEOTI1QzBGMUMKKzoxMDk4QzAwMEU0MEE0QzBGNDg5RTNBQkUxRTM3QUFDMDY3ODIxRTI2ODUKKzoxMDk4RDAwMEU3ODFERjQ4ODRFQkJGMjBBRUY3ODY4NjdBRjIwRTlERTMKKzoxMDk4RTAwMDhDRUJFODk1NDRBM0Y0MjNFN0Q0ODU0MkI0OUUwNEJDRjIKKzoxMDk4RjAwMDQ4NDUzNEYxOTRCMzU0MEU2QTY2RkFFQTVCNDdCMjE2RUYKKzoxMDk5MDAwMERCQjM1MUI0QzAzQzZEMUVDNzNDMzIxRTUyRjUxQTRDM0QKKzoxMDk5MTAwMDhCQzcyRTA0RkVCMEE1NUQ1RTBGQTYxQ0E1OUI0QTAxNTkKKzoxMDk5MjAwMEZBNzcyNEE3MkJFMkExNEMzQTA1NjFBRDNBNjk3RjdDMTYKKzoxMDk5MzAwMEJENzlCOTk0RjRENTQ3MUZDNjdDMzVBNURBM0I5MDZFNDYKKzoxMDk5NDAwMDVDRTVBQTAwQUM0MEMxNkUxOENGNTAzRTlBQTFFMUU2OUEKKzoxMDk5NTAwMDU1RTI3ODU4QjdDOEFDNTE3NDdEODZGNkNDNDNGREU0MjcKKzoxMDk5NjAwMDdERkRDQTBGNjA1RUVCNEJDQTRFODAwOTk3MTY1NEFGNUYKKzoxMDk5NzAwMEI5OUNBRUE3QUI5ODA4ODBFRjhERDBEODU0NjhFMTg0MkQKKzoxMDk5ODAwMDVFMDk3QTFERkU5OTREQzhGRjEwOUUwOUU5MUU0NjNFRUMKKzoxMDk5OTAwMDU2N0I1M0Q0NjQ0MzlFODg4M0RBMkZDMjc5RkJDMEZBODYKKzoxMDk5QTAwMDI5RTUzMzMxRjEwRkVBRjFENTE3NjcyRkREQzhGQUQzNzYKKzoxMDk5QjAwMEU5RkY4MEVGRkMwOUZBMzQyRDY0NkE5NzAwN0VBQ0ZENjQKKzoxMDk5QzAwMDZDMDBCQTQxRkNBRUZBNkZFOTRGMjUzQjFDMUFEODFENUEKKzoxMDk5RDAwMDQ1QTIxQUE1N0RBNzExRDU0RjY1MzE3MUNEOTAwOUU4MzMKKzoxMDk5RTAwMDEzMzVBNzU3ODdFNUJERDBCQUFDMjc2NDE2Q0E1MUNBNEMKKzoxMDk5RjAwMEI3NjYzQTZGRTc3MjIwNTBEMzU0RDA0Q0RCM0Q1N0VFMzgKKzoxMDlBMDAwMDA5ODIxQzE4NEFDNTY2NDZGQUMwRjk2QzRFQjBCMzM3RDUKKzoxMDlBMTAwMDk3RUM0MUY5RDg0OEU5QTgxMEVDRkQxMjExRURBMThEQTEKKzoxMDlBMjAwMDQ1OEZBOTY2N0RGNTMzNDNERTBDQTAwRkEyQzkxNTI4MkEKKzoxMDlBMzAwMDNBMDhBMUY4OTE4QUM0OTA3M0ZDREY0RjFGODk3NkQyNEYKKzoxMDlBNDAwMEM1RDI4N0ZCNDZFQjdBN0NENUY1RkE2NTlGRkQ3RDcxMjMKKzoxMDlBNTAwMEY0RjFGN0Y2NjdBQzZCMkFCOTQ1RDcxNUVERUYxNjZENDMKKzoxMDlBNjAwMENFQTBGNkNCQzA3NUREODFFQkVBMkEyMkExNjQ3MkI4RTQKKzoxMDlBNzAwMDVCMTBBQ0ZBQzk5QzlBRjUwN0I5RDVCMjVFQjY0QkJGN0MKKzoxMDlBODAwMDMzRjc4MTQxRjA2MTlCNkI5REFGRDFBRUIzNUVEMkRFMDcKKzoxMDlBOTAwMDA1M0I1NjU2NTExRjE5RkI4NzhEREEwRTFERUNGOTczRTUKKzoxMDlBQTAwMDM5ODREOTdCOTE1NTMxMDFFQ0EwMjI4Mjc2MTAzNDIwODMKKzoxMDlBQjAwMDUyRDhBOTg1QTI5QjA0NDZGRkIwMkU4NjdENjNBM0U2RkIKKzoxMDlBQzAwMDk4QjkzRjQ5NzU1OUZCOUZBQjBCRTZGMTNCRUIxNTFDNzEKKzoxMDlBRDAwMDg3MDNGQTAzQkVGNEQwMDY2OUJCNTIwRTg5MzlEMUZFNjIKKzoxMDlBRTAwMDY0RUIwNzVEQjE3REZDOUQxNzQ1MDcwNkJEMDI1QTE5NjEKKzoxMDlBRjAwMEJENUFFQjM1MDdDQTQ4QjJGNTFCRDBERjc1RDZGMUE2QzMKKzoxMDlCMDAwMDk0NEI4OUY1M0NCMjc2Q0E2NDhGQTRBRTI3OTM1MzI2NTIKKzoxMDlCMTAwMEJCNjY3ODlGRkY0MjM3RUNCOUE3MDU2QTE3MzYwNkJFQzkKKzoxMDlCMjAwMEEzRTNCOEUxM0Y1NEJGQjY0MDRBRjU5OTM0QUM4QTg0MDgKKzoxMDlCMzAwMDM1RDA5MzFBRTMxMzJEOURFOURGNEVDMUIyMEYzN0JFMjYKKzoxMDlCNDAwMEE3MUUwN0VCMkZCRTkwRDIyMkM4MzU1OUIzRDhDQjg5QjgKKzoxMDlCNTAwMDY5NjM0M0UwNkIzMjI1NEE3N0ZEMDM1M0U1ODlENDg4NzYKKzoxMDlCNjAwMDVEMUI5QTVCNERDQjZGNkNFODlDMEFERjhENzIzMzQ1QjEKKzoxMDlCNzAwMDYzRkY0REQ1QTZDOTNFOTYwOTJERTdDMEFGRTRGQzQ0NkUKKzoxMDlCODAwMEY4QTgxMkNEQTRERjFEQTQwQkYzRTk1N0JFN0UwNEQ3QkQKKzoxMDlCOTAwMDAxRUQyQURBNjQ5REE4NjFCQjBBNzkxQUNCNDE0MzUwRDIKKzoxMDlCQTAwMDhFNEFGMUE5NzIzMTZCMEVFMENEQjY1MDA4QzcyNTQ3MzkKKzoxMDlCQjAwMDFDQUIyOURGNkQ3NjcyNThFM0IwOUZDMzJBODcwQjM4NDAKKzoxMDlCQzAwMDRDRjUwNEMwNkU4NUMyMzQ3NURBMjIyQUMyMkUwRTE3RjcKKzoxMDlCRDAwMDcwMzg5REMzN0UwRTE3NzI1OEQ4ODFGMDY2ODVCNUI3NzAKKzoxMDlCRTAwMDQ5OEVCMkY2NUQxQ0Q2Mzg5Q0NFNjE5NUMzODUxQzI2ODUKKzoxMDlCRjAwMDdCNThGRjc2MDZCQjZDNTFENkJFOUJDMzA1MUNDRUUwREUKKzoxMDlDMDAwMEIwOUZDMzIzMzgyQ0VDNDEzOEQ1RkFCOThBM0ExOTlFNTMKKzoxMDlDMTAwMEZBRTQ0MjU3M0Y4Q0NBODNFM0I1MEY4RTI1QzA4QzVFQjEKKzoxMDlDMjAwMDMyMDQ0Njg3RjE2RjE5NzQxMzQ0Rjk0ODNDNzlDODZGQzAKKzoxMDlDMzAwMEUzMUM2Q0JEMUJGNzk3QTE1RjgyNzAzRjhBRTlGQjA5QUIKKzoxMDlDNDAwMEQwQzdFNzNBQzVFMDYwRkNGNTQzMkU0Rjc3ODI5RDRCQzUKKzoxMDlDNTAwMEQzRUQwRDJBQTZEQjFBMDI2OEY3NkU2OUQwQjg1RkE1QUUKKzoxMDlDNjAwMDE4QkY2RjZDMDgyMkJDQTE2MTMyQTZFQjFCNDJGOEJEODUKKzoxMDlDNzAwMEIxNjExNkMyOUQwREQ1OTgzRUQ4MzAxN0QzQkQwRDYxODgKKzoxMDlDODAwMDRDRjczNDJDQzY3MkQxODYzQTg0Nzc1MzdCMTdEMkY2QzAKKzoxMDlDOTAwMDA2MUREMzVEMEQyRDk4REZENjEwNDFGODkxRkQ2NUNGREYKKzoxMDlDQTAwMDE3NTEzRDdEMkUyQ0EyOUU0RjM1RkVBMTczQUQ3RTkwQTcKKzoxMDlDQjAwMDIxRDU1NkI5OTgzRTIzREQ5MkFGNEVDQkI2RkE0RENBQTgKKzoxMDlDQzAwMDBCMkRCMEE3NjRBQzA1NzYxNTk1NTlEQTczRTQ0Q0I1NDUKKzoxMDlDRDAwMEU0MkI5OTU1MTY1OEY2NUM2NTgxQzc0NEU3NThFMEQxRTYKKzoxMDlDRTAwMDZEMzc1OERBMUIxOUE5QjFFNDhGNjg1OTYyQzkyRkQwQjIKKzoxMDlDRjAwMDU3NUJFMEZDRkE3RkIxOTRDRkFENUI2N0M5REZFNjBDNDAKKzoxMDlEMDAwMDNGMjM1Mjc5MzU3Q0YxMjY0QkI5NjFFMTFERDY3REREQ0IKKzoxMDlEMTAwMEVDQ0M4QjkyNUJFNDMzM0RDQkVDQ0Y0ODk0Rjc1MjFFRjYKKzoxMDlEMjAwMDA5ODU1MDZGMzFGREQyMDg3NDBCN0VBRjVDMTJERDI3QzAKKzoxMDlEMzAwMDgwRkZFQThBMTNCMEVGQjAxNzMxQkQzMzYwN0Y5OUQwNEUKKzoxMDlENDAwMDlFRTI3OUYwMzU5REY2NTNFOTNCMTFFODMxRjExOTA5QUUKKzoxMDlENTAwMDk4RUE1MUI5N0Y1MjY0RkJFNjRENzdCMTdENzVFQjVEQjIKKzoxMDlENjAwMEM5RjdENzI4RDlFOTNDNUFCRjRDRUVCRkVEMTEyNTZFOTMKKzoxMDlENzAwMDA3RTk5NjdENEFFQjVEMDI5NkZGN0JEQjM3RjIxM0RCNEEKKzoxMDlEODAwMEVERUY4RkQyNUM4NUQ5MEU4OTFBN0U1MUEyNjdGNUVGNkYKKzoxMDlEOTAwMDc3NkQzREZFRjlCMEVGMzFGNkI5MTJFN0YzQ0FCOUMxRkMKKzoxMDlEQTAwMEI3OUIyODlGQUM1NzA5RkEwREQ3N0JBQTA4RDgxNUU3QUYKKzoxMDlEQjAwMDU0QzZGNzY0NkYxRUVFQzc4REYyMDNDNzY3QjIyQjUwMEYKKzoxMDlEQzAwMEZFQjhBQzdFNUFDRjFDOTQyRkVCMzMwN0I3Q0I5NEI4QjgKKzoxMDlERDAwMDg0RkUzQjI5MkU5MDE4RDUzQjhBNUMzREFCODA4RTRCOTAKKzoxMDlERTAwMDc5NDUwQUFFMjVBODdGOTJFRUVGMDlEOTgxNzg5MDEyQzUKKzoxMDlERjAwMEVDOUJBNjA1MDk3MjZGNDYyRUNFREI2NkM4QjdDQzJBNEYKKzoxMDlFMDAwMEZDREVBNDBFM0UyRTNCOEMwQkM2QzNDNzY1OEJCQjMxNUMKKzoxMDlFMTAwMDk1RTI0RTFDRUY5NDc4MDZDMjkzRTM3RTRDMkY4RDBGOTMKKzoxMDlFMjAwMEM3QjQyMjNFMENEMzQ5RjExMTk4OTZDNzBCMzA5RDE4NDgKKzoxMDlFMzAwMDFGODdGNUNBRTI2MzMwOUQxMDlGODhERjgzRjEwOTk4ODAKKzoxMDlFNDAwMDVFMTJGRjFBN0UxRjFGOUY4MjY5NjlGQzFCRjhCRDI0RUEKKzoxMDlFNTAwMDVFODlFOUI4RjgzN0YxRkJEOEY4OTU5ODhFODk1RjhCNjEKKzoxMDlFNjAwMERGOEJFM0Q3NjAzQTNBRkVDRjk4OEU4QTVGOEZFOUM4REUKKzoxMDlFNzAwMEY4N0M0QzhCRTJGMzMwMUQxMTVGOEFGNTBBRTNCNzYwODIKKzoxMDlFODAwMDVBMTBCRjE1QkY2QkYxNTU5OEU2QzdFRkM0MzQyRkZFQ0IKKzoxMDlFOTAwMDdENEM3M0UzOEQ5OEU2QzRENzYyM0EzQ0JFMTlFQjY1RkUKKzoxMDlFQTAwMEM3Mzc2MjNBMkNGRTAzRkMxRTg4NkZDNzM0MkI3RTJGMDcKKzoxMDlFQjAwMEE2RkVGODAzOThBRkM2M0IzMDREOEJGRjA4QkZGQkUyMTAKKzoxMDlFQzAwMDBGNjNFQThEM0Y4RURGM0RGMTgzOThCQUUzM0ZDNUVGMjQKKzoxMDlFRDAwMEFFRjg0RjMwNzVDNjhGRTE3NzQ3RkMwOEE2MTc1QTI3QjIKKzoxMDlFRTAwMDI1QzcyQUM3QTU0Qzk3MDU5RUZDNkVCQTg1M0UyQTVFRkIKKzoxMDlFRjAwMEI3Q0FGMUYyNTcwQTJERjk2NTJGNUFFNTc4RjA3ODk5MkIKKzoxMDlGMDAwMDA1MUU3Rjc4QUFBNTdDQzlBMTJBMEIzQzc2QkY1NThFNzkKKzoxMDlGMTAwMDE3RUZCNUNBRjE1MUVENTYzOTVFQjREMzJBQzcwQjVCQzIKKzoxMDlGMjAwMEFENzI1QzZCQjJDQUYxQkMzNTU2Mzk5RTczOUI1NThFQ0YKKzoxMDlGMzAwMDY3MkZCM0NBRUZDMDAyQUJGQ0NFMjJCQkFDRkJFRjE5NUMKKzoxMDlGNDAwMDdCQUM3QTZEREEyMzk2RjYzQ0U1OEYyNUVDNTdBMjI4OTgKKzoxMDlGNTAwMDY3NUMyNUZGNkVBOUU3MjgzQTlBMjA5Rjc1MjZBNzEyMEQKKzoxMDlGNjAwMEZDRTU4MDEyOTlGMkY3MURDNDE1MzQ5RkFCMTg2OTNBQ0QKKzoxMDlGNzAwMDk3MDcxOUMwNzczNENERTQ3QzM3MDRGODhFQTZFOURGNjMKKzoxMDlGODAwMDVDODZFNzRDNUY3Q0FCRTUxNzREQjRCMUY0RTE4NEY5MzYKKzoxMDlGOTAwMDA1RjQ0ODU1ODg3RTZGMUVDNjYxRkE0NTAwMzg5N0EwQzMKKzoxMDlGQTAwMDlGODBFODY3MkFDMTJGRDY1Q0MwRTA3RjkzNEU1NUVBQjgKKzoxMDlGQjAwMENDN0ZDQkYyQzk1OTk2RUY2NEYwMjM4REJGNUEwQkY5RDEKKzoxMDlGQzAwMEU5NjlEMUVDMjA0RDFGQjEyNTk3RDM4RjQ5RUNCQ0VENDkKKzoxMDlGRDAwMEFDMThFQTkwRTg3Q0ZGQTNCMkU3NzZGMEEzRkRENTFFQUIKKzoxMDlGRTAwMERFMjdEMUVGQ0IxQ0UxN0M3MDREN0Y2QzBCM0YyNDgzQ0YKKzoxMDlGRjAwMDVDMjRBMTA3RTE3QjFBMDkzRDI0QTFCQ0I2RkE0NTFCRUMKKzoxMEEwMDAwMEMxRTBBNkVEN0MyNjU2RUY4N0ZDOENBQjE3QTM1RkNBOTgKKzoxMEEwMTAwMDk4NzdCMzc3RjBGMTQ0MjVBNjk3OUFGRDA0Rjc4REZBNjcKKzoxMEEwMjAwMDExODU5RjIzMTE3NjVFMDMyOUQ1ODNGN0I4N0QyMUM4NUEKKzoxMEEwMzAwMERGNzA0NEQ5NjNBN0VCNjBDQkM5OUE0RkM2QjM2MjE2RjEKKzoxMEEwNDAwMEZEMTE2QjVFMDU3QUQ4MDE3QTY4MDQ0OEY5MkU0QzNEMDMKKzoxMEEwNTAwMEE0OUI5RDFCOTE1RTRDNTVBMjBBOTAxQUYzRUY5Qjc3MkYKKzoxMEEwNjAwMDJFOUIzN0M1QzcyRjI0REMxRkQ0NjFGOTc1RUVBQjI3QjMKKzoxMEEwNzAwMEMzN0MyODNFNEVDMDc3OEE4RkU3QTUyMUE5RjE0MUUwMzUKKzoxMEEwODAwMDY0ODE4RTNGQ0ZBMEEyRkQ4MkM1RkZGOEJFMTBGRThENzkKKzoxMEEwOTAwMDY0RjI2M0U2RDUwNzcxM0Y3OTQwNTIxMTFGMDZGRUU4NkUKKzoxMEEwQTAwMERGNkRFOTg2M0Y4NkQ1RkIyM0Y2OUJEMDlFQ0NDRkM1REUKKzoxMEEwQjAwMDdFMjNGMUZFQjkzRTM0RTgzODQzMjRFMTY0N0FERDM4OEEKKzoxMEEwQzAwMEY3MjE5RDc5NUZDOTlGMkQyOENDMkU0OUVDQzcyNjU3RDMKKzoxMEEwRDAwMEUzNzlFQTAwQjk5Nzk5QjBBRkNGMENDM0EyNTBGRDQ5MUMKKzoxMEEwRTAwMEY1NjU5MjcxNEQ1N0I4N0Y0QUNFQkZBOEYzMkJDMzVGNzkKKzoxMEEwRjAwMDQyRjZFNzdEQTVGMzJFQTAwNDI4NkY5MDFDMzk5RTg3QjkKKzoxMEExMDAwMDcwOTBFQkRGMDJCMEVCQTgzRDcyRUM4REE3NjJDQkE5OUIKKzoxMEExMTAwMDFDRDg1MDQ0NzUyREZBMkRBQ0Y2REM4Njk4ODhFN0VCRjgKKzoxMEExMjAwMDA1N0UyQTcwNjg2M0Y1REMwRTkwQjkzRDY4RjQyQjM3MjQKKzoxMEExMzAwMDU5RkQyOTlCNkQ3QzdGN0JEODhBQzcwMjRBRDBGRjRFOTAKKzoxMEExNDAwMEI3RENDNDkzQ0ZDNkM3Q0YyRDhENzZGNkY0OERERjNBM0EKKzoxMEExNTAwMDhFMDc0QUE4Mzk2NEMyNjc2MTI5MjUxRDE4NDc4QzhENkUKKzoxMEExNjAwMDIzQjE3RkMyQ0YxNzBDRkU5MTNEREM2RkEyRTY2M0JCMkIKKzoxMEExNzAwMDQ2QkY4OUZEMTA2OTM2OUUyN0E1QzJFRjgwN0VCRUUyRUMKKzoxMEExODAwMDc5NUQ4NTlDRkNCQzkzQUUwRkUyNjk2QzhBRjUzNUNFOTcKKzoxMEExOTAwMEVCMENGOEQ4MUJCNTc4RkVERERDNTk4Mzc2NTQ3MzgwNjAKKzoxMEExQTAwMDlGQjNGRjg1QjYwQUVEMTA5MkQ0NUVEQ0NCRjFCQjg5N0MKKzoxMEExQjAwMEVGMTdGNzQ2QUExQzU4MkYzM0RGQjI0RTQ1REI2N0I4QkUKKzoxMEExQzAwMDAwMEY0RDZBNTUzQUE0RkI3NkIyNzIyM0VGQkVDRTE1NEUKKzoxMEExRDAwMDY2NzY1QjNBQTQ5QjhBRDk3N0Q3OThCRDBFNTY3RThGNTgKKzoxMEExRTAwMDBBRTlFNjEyRjZERDVEN0FDOEMxQ0EzMzNGMkRBOUE3OTgKKzoxMEExRjAwMDdGQTY3M0EwMjJCNTVBMTRDQTQxRkY5MjkwNEM2MTk3NzIKKzoxMEEyMDAwMDFBMjVFMDQ3NzZBQjVEOTgxQUUzQ0U4RTg4RTIxODVBOUQKKzoxMEEyMTAwMDI1QkIzMzk0N0UyNUY4RERFQTQ4NzAyNDFCQUEwM0Q2QkIKKzoxMEEyMjAwMDM5Q0E5NzJGQzdDOEFGQTdGOUI0QkQzMTNCOEY1NjQyODMKKzoxMEEyMzAwMDNERTdDRUJEOTU1NzZBRkRFNTc3RjNGRUM3NzQ0NjVCRjMKKzoxMEEyNDAwMDBBQTE3QzhFQjVCRDc2REU5RUIzQjNFQjA0Rjg5QjI5RTQKKzoxMEEyNTAwMDhFQjEzRDIzN0YxN0NGQjc0MzdFMjY1MjFCRDY5NzRCMzcKKzoxMEEyNjAwMERFOERDMTc5ODY4MUU3NDBCMUQ4MDg3MDIyQkYxQkVEMzEKKzoxMEEyNzAwMEI0RjE3MTA0M0JBMzkxMkFFODY3QUU3NTFDM0YzNEM4NjIKKzoxMEEyODAwMEIyOTM4NEEyMUU5MzNDRTBGOTExOUVCRjAxRjZGREI0ODcKKzoxMEEyOTAwMDNGQjk5M0Y5NTE4REZDQURDNjM4MjNBQzdFMjNGNzBCNDMKKzoxMEEyQTAwMDE4NzgxREMzRTU5MTQxM0ZBOUU4OThFOEEyNjVGRjQ2RUIKKzoxMEEyQjAwMEVBNUQ1NkI4Q0U2NERGMDFCQzM4REI5QTFGMkVCNEMyMEIKKzoxMEEyQzAwMDczQzc1QUUxNTA5OTE1OUUzQ0Q1RDJERTE3N0Q3RTk0MTYKKzoxMEEyRDAwMEE4MTNGRDI1REM4RjYyRjg1RTc2QTkzNUI4Q0ZFOUY3QzMKKzoxMEEyRTAwMEQzNDU1QzU4OEVFRjNCNzI3OEI5ODdFQjk4QkZBNUQxMDgKKzoxMEEyRjAwMEMzRjk4NUZCNUQ5QzVDMkUzNjE3QjE3RDQ5OUY1REMxMUUKKzoxMEEzMDAwMEYxRERDNUZEMUE4RjM2QjRCMUY4OTQwQkQ4QzNFREJDOUUKKzoxMEEzMTAwMERFMkU3RUZFRDhDNkZEMzIzRjA0RkNEQjYxQkQ5ODVGQjkKKzoxMEEzMjAwMDI2QzJGRDMyNUJDMTJGNDNEMzU2RjBDQkQ4ODEzRjk5NzMKKzoxMEEzMzAwMDVGQTYwNUZDMzIzNDNEQzBGRDMyM0YwMkJGMEM4NTFGRDUKKzoxMEEzNDAwMDA2QkYwQzREMUZFMjdFOTk3RERDMkZGMzAwRjg2NTI4RDcKKzoxMEEzNTAwMDdDNzA0MkY3NUNGMEI3NzU4MDdGODZDMkY3NzNGRjhDMjQKKzoxMEEzNjAwMDlGQ0JFNTgzMzNBM0Q5RTAwRjdCNjQ2NkYyN0RCMURGMzkKKzoxMEEzNzAwMEM2RkNFRUI5NjBBODUwRkFCODg0MDQ4RkExQkY5QjhBQ0UKKzoxMEEzODAwMDYxRjA3NzRGQUMwQjM2MkE5OTYwQjczMkJDNEQwQzA3QTEKKzoxMEEzOTAwMDFCNkRFNTYwQjczMjM4REZDNkY0MjhFODBCRDAxRkU0NDgKKzoxMEEzQTAwMDMwRjMyNzUwM0VDQjA0N0M2RkUxNzQ1OTc2MjIyQ0NDREQKKzoxMEEzQjAwMEEzRTNGOEEzQ0NGNUEyNDYwMjE4QjdDMEY5MDJGMjQxMTQKKzoxMEEzQzAwMDlFQkMyMTg0NUU5NzI3NDFCQjA0Qzc5NUJGQjdBRTBBRTgKKzoxMEEzRDAwMEM0NjhGMUQzRDU0NzVEQjREQ0E4QUVFMDNBNzA3RDE2MTEKKzoxMEEzRTAwMDk1QThFMDU5MjBDRTIyNEQ4NEY1Mzk1ODE5NDQzRkRBMUEKKzoxMEEzRjAwMDk2REY0QUMxM0REMDY2MjZCMUQwMDMxRDFCQ0FCRDMxRDAKKzoxMEE0MDAwMDA2M0NDRDRBMEY5N0M0NzdBM0ZEREI1QzM3MjcwREU5RTcKKzoxMEE0MTAwMDQ5MjM4M0VFQzdGRDIxRUIzRTI4NkRCMkQ1OUZENUJDMDUKKzoxMEE0MjAwMDk3QjU5MzhBNkU4QURCQURGNkM0QTg5REQ2N0Q1NDczMkEKKzoxMEE0MzAwMEQxOUM0MUZEQ0Y0NUFERDZGRTBCOUIxMkVBN0IwNkFGMEEKKzoxMEE0NDAwMDlGMUZCRjFBRURGQjU0RjQzRDRFQUM0OUIzNERFQTg3NTQKKzoxMEE0NTAwMDNERjFDQkIwN0NBMjdEMjcwM0ExNTBCQjREM0VBRTYwNDkKKzoxMEE0NjAwMDQ4OTU3QzVDMEQ4MTVEMkIxRkQ3NzgxQUU0REY0MzFDNzcKKzoxMEE0NzAwMEFFNjZCMENBRTIyMEE4M0Q5ODZCMUI4MkVCOTM3MEJFMUIKKzoxMEE0ODAwMDFEMjI3MEZFN0MxMDk1MDFGREJGQkU3MDVEODhEMkRDODAKKzoxMEE0OTAwMEMxN0YyMkI4REY3ODQzNUU1NUE1NTM3OEQ3NkM4NzI4RjMKKzoxMEE0QTAwMDVEMDJGNEM2RTIxOTE0QkU1RTE5NEE3NDYzMDFEMEMzOUEKKzoxMEE0QjAwMEMzMjIwMTdBNzhBNDczNzAzRTFFMTBFN0UwMDlBMTdGRTEKKzoxMEE0QzAwMEE2QTA0OTJEMDNGNTlEQUFERUNFMjY3MTU2MzQ0OUJCQzAKKzoxMEE0RDAwMDUzMzk1RjkxRTMyNEQxNkU5RTBBRjM1RERGMzQ0NzQ1MjMKKzoxMEE0RTAwMDNENzI1RDEwRjcwNzQ0NjNFMzM3RTQ1QzQ2RkFFMEVCNDYKKzoxMEE0RjAwMEI3QUJDMTdBQkU5NjREOTJEQkExNkI2QzlDREY4QTk5OUIKKzoxMEE1MDAwMDdDMzRFODNGRTNDMUMxREJERkMwREI4Rjc3MDkxNkZGOTYKKzoxMEE1MTAwMENFOTBFQkFBMkI2RDk5QjhERjA5N0E0MDhFN0UyOTMxNTcKKzoxMEE1MjAwMDNGRDk2MTE2OUY2NkYwNTM2M0QxMEUxNzk0MzdGQUNGNjcKKzoxMEE1MzAwMENFODlDMUY2ODQzNDFGOTlDMkUyMjYyODdFNzEzRjc4MDUKKzoxMEE1NDAwMDg0Q0FGMTEyOTRFMzY4RjczOTE3RDc4NTk4OUYzQzgyNDMKKzoxMEE1NTAwMEYxMERDRUJBQTAwRUVENDgxRTQ2MkZCMERGRTRFNTcxMzYKKzoxMEE1NjAwMDNDMUJGNzhBMTg3MkQxMzg5N0Q5QUQ4NjlDMzdFOEEwODIKKzoxMEE1NzAwMDMxQzBGREVCNzM2NUU2NjdGQjBCOUQ5RkIxMUY4MUZENEQKKzoxMEE1ODAwMEExNUE4N0U3N0JDRDkzRDg3QzZDOTkyQzBFQzQ1NjFDQkUKKzoxMEE1OTAwMDhCQzFEOTU5QjM3N0QxNUE5OEFGQkVEMEQwRDczQ0VFNDIKKzoxMEE1QTAwMDgyQjBCODJCMjMxRTBGRjAwM0U3RTAwNTZERTM1MThFNTgKKzoxMEE1QjAwMDE4NzhGQ0I2MTBBRTA3M0VCMjY1RUE0MjE4RTdEMTg1QkUKKzoxMEE1QzAwMEVEMUI3ODRCQzRGQjc3QjkzQzFEOUVDMjBGOTdBNjMwOUMKKzoxMEE1RDAwMEI5OUVBMUE4NTc4MUJDREQ3Mjg0RDI3NzkyN0RCRDkzQ0MKKzoxMEE1RTAwMDk3RUI4OENERDkwNjM2QTJDMUFGNDZGRTAxNDlDMzdFOUUKKzoxMEE1RjAwMDBDQjgyMEFFQjBCOEJFOTg3NUZGRjFGRkJBMURGRkE4MjkKKzoxMEE2MDAwMENEMUE3N0Y3RkZFREY4RkZEQkVENzg5QTBGNzY0OEY4NzMKKzoxMEE2MTAwMDAyNzYzQ0I3RjNGN0Y2RDE2RjgyOUQ1RTJDMUZDMTMwRjYKKzoxMEE2MjAwMEJBMDQ3QjNFQUI3ODQ2QUMwQUYyM0JCQkJBRDE4RTlGRjQKKzoxMEE2MzAwMDNDQjgxRDRGMTJFQzc3QzNBRTM3RUM3N0MzOUUzN0VDQjYKKzoxMEE2NDAwMDc1MzJEMDlFRTdGQUVGMUJFQjQyMzJDNDg5MTFENDdGRkEKKzoxMEE2NTAwMEUzOUFCRkIxNEU4N0ZFMTNGQzFFMTIxNTczNjZGRjQ1QzkKKzoxMEE2NjAwMDJGRjBGOTEwMTMzRjc4QUM3NkMzQzVDQjA3MTlGNTNGMkYKKzoxMEE2NzAwMDA5RTY1QUU0NkI0NkY2RTA3NjhFMTFFRkZENDVBRTYxRDEKKzoxMEE2ODAwMEFGODdEODM5Njg1MTMxMzFEQjYzNEQ1NDhFRkJFODdDOUMKKzoxMEE2OTAwMERBRTdCMkYzMjlDMkU1NzhCNkUxOTcyOTBFRkI0N0EzQzIKKzoxMEE2QTAwMDdDQjdDQURERjZDNTM1M0E5RUEzOTQxMzNDN0ZGNEU0MkIKKzoxMEE2QjAwMDc0ODVFMDdDM0M2QjZFMDRFRDQ5MkE3RjhCMTU5M0ZDMUUKKzoxMEE2QzAwMDJENjhBQjQwMzlBNzczRkIzMjExOUYyMEVGMDI2NUQwOTQKKzoxMEE2RDAwMDRGODI5QzIxQzE5NzQ1QzhDRjg1QjM2QkUwODdBODgwODYKKzoxMEE2RTAwMEZBMDNFMjM0QzYwRjIyNkYyRTMyNUVDMzg4OUZDOEEzREUKKzoxMEE2RjAwMDdGMjA2NzM2Qzg2QzdDRTQ2OTZCRkMzOTUxMjk3RDU0MzYKKzoxMEE3MDAwMEY0REJDREU0RkRGOTgyMzlFRUNGQjA2MzEyRUI1MUI5NDEKKzoxMEE3MTAwMEEwMjY5MzdCNkYwOEUxNkYyOTgzRDA0N0EyM0Y4QTI0NEMKKzoxMEE3MjAwMEM4NjkyQTg4NDRFOEJGNjBGNjJDRjQzM0Y1RjlBNTY0QkIKKzoxMEE3MzAwMEFCREM5NjAzNDYzQ0NCN0ZBRkZDQUU1NUZFQzZCOEYzMTAKKzoxMEE3NDAwMEFGRThCN0RCQzhFNUYzMDA3RTRFNjg0NzJDRTkyMjNENTEKKzoxMEE3NTAwMDQ5RkFGNzk0NThGMUVFMkFCMkRBRjMwMjA4NUI4ODFGM0YKKzoxMEE3NjAwMENFQjE5RTkzQ0I5RUVDRTRFNzAwM0MzRUIzNjZCMkIxMjMKKzoxMEE3NzAwMDZDREE3N0ZGNDhGOUU0OTYxMzM2QkM0NzYyRTgxREMzRUMKKzoxMEE3ODAwMDJGN0IwQkM0NjlEMkY1QTk4MUI4NEQ0QUNGMEI0OEI1RDAKKzoxMEE3OTAwMDBGMzIzRjI2MjJDNjgzN0Q0QzVFRjY0RDM0QUREMzdEMEQKKzoxMEE3QTAwMDhBQzJGQTY5QjE5RDg0N0I0MjQ2M0NFMkMyMDg4M0ZCQkYKKzoxMEE3QjAwMEYwREY2Njg1MTc5MTM5NTk3MDFFQjE2OEE3MEQzODg4OEEKKzoxMEE3QzAwMERDNDJFNDkzM0RDNkY4Mjk3RjZGNTE1ODdDNzUyREE5NzIKKzoxMEE3RDAwMDZCMDYzOUI2OUVDNzczRDdBODQ0ODZGOEMxRTU0RkREMkUKKzoxMEE3RTAwMDU3MzE4RkMyN0JCOUZGRjYwQ0M1QkY2NkIyODM5Nzc4MkQKKzoxMEE3RjAwMEEyMEE5QzJCQkM3MzY4RTI3N0JFNDZBMDdFQjQzOTFCQ0MKKzoxMEE4MDAwMEUyMDhBOUJEMEE3MTg0ODk3ODlGREY2MjFEREY4NUM2RDEKKzoxMEE4MTAwMDlGMzg1RUUzNUU1MUFBNzFDODlENDIyOEQ5RkVFMDMxOUYKKzoxMEE4MjAwMEM1MUFFRjc2QTFGQjRFQkY1MzM0N0VERTZDQkRFRjc0Q0MKKzoxMEE4MzAwMEExN0E3RjU0MzQ5MkVDOUVENDg1RUFGNUZDOERGREJENUYKKzoxMEE4NDAwMDk3QTJERTcyNDc4RjAyNzI2MEE1MUM5RTI1MTRGNkM3ODAKKzoxMEE4NTAwMDZCMjlCNkVBRDA3MDhBMEFGOUU5MDkzMTM4NUEzMjk1N0IKKzoxMEE4NjAwMDZCQjlDODcyMjc2MDYzNzExMUU1NjY4OTgzQjQ3Nzk2MDYKKzoxMEE4NzAwMEYzRjEyRkY2M0ZBMDAwN0Y3RUZDQzhEQjU3QzM3OUNERjQKKzoxMEE4ODAwMEQyOUY0QUM0NDFFNzc1NzZCRjk3QzQ3MERGMTE1NTQwMjcKKzoxMEE4OTAwMDdGMkQzOTI0MzFGRjlCMUNBQkI4RDYyNDdGMzE1Mjk2RDMKKzoxMEE4QTAwMEUyN0JFOUEzNUU4Q0FGNThGMjk4M0QzQTlCRDY1RkYyMEIKKzoxMEE4QjAwMEU0M0JFMzA5QzVDM0Q5NzVCRENGMEQ4N0ZEQzQyMzAyQjEKKzoxMEE4QzAwMDhCMjdENDdCQzY1RjRCQkYyRjkxQzlDREQ1NDlFNEEwNjAKKzoxMEE4RDAwMDY0Njc3NEZFRDE0RkRDNzM4MThFODRDRTIzMzc2MUJCRjUKKzoxMEE4RTAwMDVEREZCNUQ5NEQ3NkZGN0YyQTM2QTMxQzlFMzNFOTBGNzUKKzoxMEE4RjAwMDBCRDE5MTAyMUI5RkY5OUU4NDExQzdGOUQxQzMwMjFCOTIKKzoxMEE5MDAwMERGRDNCNkE4MTNDNkQ3RDlBMTg0NjlCOTk1OUQ3RjQyNzQKKzoxMEE5MTAwMEJBRkRDNkEzMDc3QzgwODc5NTRGNEIxNkY5QjJCMjUzOTgKKzoxMEE5MjAwMDhBRDlDNzYzRkFCNjFEQ0ZBRjQyMUU4MUNBOTExNTI4RDYKKzoxMEE5MzAwMDYyNjg3QTY4MzlDNjdEQUZFOERBRkMyN0M5MDdGNUFERTkKKzoxMEE5NDAwMEZDNDNGMTEyOEMwMTVFNUY5NTgyQjMwMTdFRkMyMTFGRjYKKzoxMEE5NTAwMEVDMDdDRjc0RUZGMzAxNUU2OUJCRjMxNDRBNTc5NzdEQTAKKzoxMEE5NjAwMDY2RTIzM0MyREE4RkE3MEY2QzhGNUEzODBBRDBEN0NBODMKKzoxMEE5NzAwMEFFOERBQ0JGMDRGRTNDMDNGRjE4MzY1MDJGOENCNTVCODgKKzoxMEE5ODAwMEVERkE3M0U0QzUwQURDODc3NzY2MjQ4RDkzRUZEMzBCNjkKKzoxMEE5OTAwMDlDNUY5NzFFMzhCNzVCQTdGRDdFRjREODg3QkI3NTNBREUKKzoxMEE5QTAwMEZFNjU3RkZENzRGNzlENjA1N0ZFQ0NBOTgyOUM1OUY5MjYKKzoxMEE5QjAwMEM4NkY3REM0ODRGNzk5NzZDNkVGNjcxRjdFRThDMTVERDYKKzoxMEE5QzAwMDk0NUZDRUZFREU4RUZCRDFCM0NGOUNDRUQzRThCQ0NGNUUKKzoxMEE5RDAwMDFFRkM3Mzk2NDZDQkRGRjZDQ0NDQTE4MDg3REI5RUY4QkQKKzoxMEE5RTAwMEM2RDBDMUY2RTc0MEFGNTFCQjc5NURBM0I4QUVEQUQzQUMKKzoxMEE5RjAwMDAyMEJDQTNGQ0NEMzg0RjUzOTc2RTg1ODFFOENGM0UzQkEKKzoxMEFBMDAwMEQ3RUM3ODBGNzEyNUZENTY1RjA2RUJCNTFDRTUzRUMwMEYKKzoxMEFBMTAwMDZCMjg5RTU3RUNERkYwMjc2OTdDMzI3Q0VCQzM0NUI4OEUKKzoxMEFBMjAwMEYzNDYyOERCMDQ2MEJEQUZGREY2RjQ3MjQ4NkQ0MTBEQkUKKzoxMEFBMzAwMERBMjNCRDI4QjcxM0VCQUQ3Qzg1QUVFQjI1QTlEN0YxQTIKKzoxMEFBNDAwMDFDRjk4QjAyRjg1RkI5N0YyM0VCMzc2MTFEM0Y4NjdGQ0UKKzoxMEFBNTAwMDRDMTlCODhFRjNFRDU2RkQ3RThFMkNCQjFGNkRGRDQzNTkKKzoxMEFBNjAwMDE5NDlFM0E2OEM3NTVDRkVDNDNGMEQ2QTA3MThGMkUwMzUKKzoxMEFBNzAwMDQyRjg1RENDRTNGRjgyRjZEMEFENzZFMEFCQzdEQzdBN0UKKzoxMEFBODAwMDgwQUQ2Rjc0MzZDRDNCN0JFMDVDMUUxODZCRUZEQjdBREMKKzoxMEFBOTAwMDZGMDIzOUQ5RkI4QzVEODVGREZBOTI2NzVFNDUzRTNCQkUKKzoxMEFBQTAwMEZCQzQ0QjhBODY3MjkyNzgwNDZBMjc5QzI1N0Q3RkRERTEKKzoxMEFBQjAwMDYwMzdBQzYwQjYzMDU5QjlENzFCQjNGQkZBRDc2OTQ1REMKKzoxMEFBQzAwMEY0OUE1OTlBMEZCRkJGOERERkEzOENGRTU3NDQ4RjVDNTkKKzoxMEFBRDAwMDI3MjQ1OUI3MDNGNjQyMjY5N0EzNDMxMDJGQ0I0OUI3MzMKKzoxMEFBRTAwMEEyOTY1OEQ3NTM5ODBDRUJGOEY2RTU0MDc3QTlENkQxNDMKKzoxMEFBRjAwMDk4QkYwQUYzQkZENEI0OUU3QjE5REYyNjk2NUY0MUY5NTUKKzoxMEFCMDAwMDEzRkM4MzdERUIxQTE1NUUyNTQ5RjhGNDZDODc1RDg2OEUKKzoxMEFCMTAwMDM4REZCMzI5Q0VEOUZCRUVFRjdFNDVGQkVGMjE3QjhBRjAKKzoxMEFCMjAwMEZEM0JDN0MzODVGOEZDNDJGM0ZCQUFGOEJCMUI4MkJGMDEKKzoxMEFCMzAwMDI2MERDNEUzNDc3RjQ5MkVGRjhGRDk5OUZGNkMwNTA5ODUKKzoxMEFCNDAwMENGQ0E5NjA2RUEyRjg5ODRGNEUxMDVGREUzNkRFRTkyMDMKKzoxMEFCNTAwMDUwQUU3RkQ0Mjk0NUExNkFBMjlDNTg5MUMyNEZGODkyNjkKKzoxMEFCNjAwMEQxQ0ZEMzQ3QzY4MzNDRkJFOEU4NEYzODVEMzJCQTVGQUMKKzoxMEFCNzAwMEIxRkY2RDQ1RTdGQTIwNkFENjA3MjlGQzU0N0ZFNEVENjIKKzoxMEFCODAwMEFEM0M5Q0JDQkQ5NUZCRkY5NEI0QkQzMzcyRThCQjMwQkIKKzoxMEFCOTAwMEZFMzNERDM2QTJEMzI2Q0U3NDQ5NDlGREFCQ0ZEQTZENDQKKzoxMEFCQTAwMEQ2Mzg3MTZGQzU2QjY5QjQ5RUU0NzM2OUQwNzVFM0JBMkEKKzoxMEFCQjAwMEQwQUJCMDlGRDM1RkI2MTFCQzRGMkIwN0RGQjdEM0ZDMzAKKzoxMEFCQzAwMDQ2QUY0QkRCNDRGMUQ1RTg1Qjg0N0U0OEEzQkRBNjA0QzkKKzoxMEFCRDAwMDNDQzk4MTZBMURGQzFDNzI2Njc1MzlCMzkxQTM5NkZENTAKKzoxMEFCRTAwMEIwNEQxNTJERTNBNjdBMzYwN0Y0RDA5QjEzNEVEQjYwRUIKKzoxMEFCRjAwMDlFNkYyNUQ4ODM2RkM5QTQ3OTI4NkRFRjJENUQwOEFFQUYKKzoxMEFDMDAwMEQ1OTJEMUI3QjVGREYwMUE4OTY4NjZGRDY3RUY3RDEzNUYKKzoxMEFDMTAwMEM2NDM3RUVFMjQ3MEJFMjJGRENDQTk4MzNDNTlCOURCMkQKKzoxMEFDMjAwMDE5QjVEM0Y5MUM3QkUyOEIwNzAxNkY2N0VGQjcxM0JCMzQKKzoxMEFDMzAwMDI5NUVCQzU2NjU2RDlDN0VFMjhCRERGRjQ1RjM0RjQzN0MKKzoxMEFDNDAwMDY1REE3RkVENkU1QTFFRUNGMEZENkUwQ0RBRkY4RkM3RjEKKzoxMEFDNTAwMEQyQzYxMzJBOUY2QjdGN0VFN0Q1MjA1RjZBNDFBNkQyQkEKKzoxMEFDNjAwMEYyQjU4RjBFNDVCQkVFRDQxMDA2OUYzQTkwMUI4NTc1NEEKKzoxMEFDNzAwMDU5RjZGODMzMkI0MDhGMkNGREIxOUI4MEFCRTBEODEzRjUKKzoxMEFDODAwMEFGREUwNEYwRDk5RjdCMzFCRUYxRUNDRjRGNUYwNjdDODUKKzoxMEFDOTAwMDQwRUQ2N0NEQUNDNzZGMzFCRjMzNDBEQjVEMEEzMENCRDEKKzoxMEFDQTAwMDE3Q0U3MzU5MDdGQjkyQTU5MDUyQjlCMUY0RTkzNEJDQTEKKzoxMEFDQjAwMEJGNjMyQTg3RjU1NkRBN0I2RjBGQTI3RjQ1Q0YxNjcxRTcKKzoxMEFDQzAwMDhGMTNDQjA2M0U1Q0RBNjlFRDRGNzMzMDNGRTg0QUE1M0YKKzoxMEFDRDAwMDc3MTEyQjFGQzk2NkZDREE4REY1NEExRDlDNEU3OTdFRDMKKzoxMEFDRTAwMDYyN0RBM0ZDMzg0NzYxNDIzQkFDRkUwQTNCQTk0QjQ2NjAKKzoxMEFDRjAwMEZGOTMxRDRDREYyRkVERkM3MkI0QjUzRDlEN0Y0RkVDRjMKKzoxMEFEMDAwMDg3N0RGRjlFQzBFRTk3OTA4MzRFOEMyMzVBQTZDNDQ2NDMKKzoxMEFEMTAwMEE1NTM3RTdENTIyMThCODE2Rjk3Rjk2MkEzRkNCNEJGNEUKKzoxMEFEMjAwMDlGNzIzOUI5Q0M0NTYxRkEzRDlCOEYwM0NBMDM0QzFDMTUKKzoxMEFEMzAwMDNEM0Y4NkY1NURGRTk0OTMwMEJEMkZGRkI5MTdDRjVGQjEKKzoxMEFENDAwMDk2M0ZGOUM1QTk3RkEzREYzRjdBQzI4REZFOTJFNTNGMEEKKzoxMEFENTAwMEJGMDNENzdCQjkzRDc2MTNGODUxN0EwRkRBQzkxRTVBNzMKKzoxMEFENjAwMEZFQTM4M0NGRTc4MTFERjI5MTJEOTY5NzNFQzhGRTdDMEUKKzoxMEFENzAwMDc5OTc5RDVGNkFCMENFODNFRTBCOEFFQkU4NzhGNEVEQUQKKzoxMEFEODAwMDJDRkVBQzlFQjg4MjZCMjFBRTA0MUMwNzQwQzdBRjNCQzMKKzoxMEFEOTAwMEQ5MzkyMTNGQjc1RENERkQ0OTlGMkNEMEQyNzBGQzI1MUMKKzoxMEFEQTAwMENDQUZCNTlBRkIwRjU2N0Y0QjFCRUEzNzhEMDNFMjQzQkUKKzoxMEFEQjAwMEM5NDQ0MkVFNTBFQTQ2ODM5Qzk1RTJERjI0MUE4NUU1QjkKKzoxMEFEQzAwMEY4MDg0QzhENzI5MkNBRkNEMDUyMjZGM0I3RDkzMjgzNjAKKzoxMEFERDAwMEE0QjYwNEVBQjE3ODIyRTJCOUFBOEZDRkZFMjc1REUyRDkKKzoxMEFERTAwMEQ1Rjc2QTQzQTFCRDc5MEU2NjRGNkY3Mzg2NTYzODcwRUEKKzoxMEFERjAwMDNGRTNDMTdCQTEzODRGMkExMEY0MjdEOEJDQkUxMEQ4M0UKKzoxMEFFMDAwMEJDMTJDN0ZCODU0REI3ODMzQ0VGM0ZDRjY2RTcyN0Y1MDQKKzoxMEFFMTAwMEIyRjZBQTA2RjMzRkMxRTVEMjgwRjkzMzNFRkI0NDREQkEKKzoxMEFFMjAwMDQ3M0UzM0U2QjFCOTQxNDU3OUIyQjEyMTgwRTk4Njg2MjIKKzoxMEFFMzAwMDYyQTI2MTVDN0YxMDYxODlFM0MzNUVBMjEzMDlFRUM5NUYKKzoxMEFFNDAwMDZBNkNBQzc2NEY3NTA4RkM1NkQwMjZGODNCMjU0RjE4MzcKKzoxMEFFNTAwMEU5Q0IxRUE4QzNCREJGQzNDM0ZDOTQ5MjQ3MjdCNTFFNTAKKzoxMEFFNjAwMEY0ODcyMTlFRTBCQzA1RjBBNDcwNTg2RTlCOEQ3OEE1RjgKKzoxMEFFNzAwMEY1RjFGQjcyNjdGODZFQzA4QjIzNjdBQzQ1NEUyOTk5REMKKzoxMEFFODAwMDY1MTY3ODAwREUwQ0JBMzhGMERGOEQzRjgyRjgwMjNGOUQKKzoxMEFFOTAwMDhEQzZFRjQ1MDBERUUwNUUwNEMwRkYwN0YwRjcwQ0MzOEYKKzoxMEFFQTAwMERGNTQyQUEzQ0NGOEFCQjJDMDI5RjE3NzJGQzU1RjY2NzcKKzoxMEFFQjAwMDNGNUYyNUUyQTE5RUM3QTUxOUZDOTQ4QTdGRTE1RTA5NDgKKzoxMEFFQzAwMDVDMUFEOEQxRDA4NkE5RjEzRDNEODU1RUNGNzUzMkI5RTcKKzoxMEFFRDAwMDU2NEZDMjc4MkU0NjU0RTY1NzIxOTkzQUM5MzFGOTkzMTQKKzoxMEFFRTAwMDQ4NDBDN0ZCNEM3ODJGMUFGMjNEQ0M4RjY4QUNBRkE0MUEKKzoxMEFFRjAwMENBQTdBQ0YyNEY3QjE1RTY3M0M3MEIzNjExRTQ5NTU0MjUKKzoxMEFGMDAwMEZGMDA3OUM3NzQ4RTI2Q0RBRTc2NkE4OEU3MjBGQTc1ODEKKzoxMEFGMTAwMDFCQjk3RTVEREZCNzlFNTZGRUQ4RENBMDYxQkE4NUYzMTMKKzoxMEFGMjAwMEM5MzZDRTI3REI2MUREQzEzRjE3MTQ3MTRENUI2NzExNTgKKzoxMEFGMzAwMEQ0OUY3NzUzOThFREVGNjM5NjczMkI3RkIwMkIwNkYxNzgKKzoxMEFGNDAwMDBFMjg5MzM0NEM2MzI4QkY1RUIzNDc0N0QyN0FFRTEyODMKKzoxMEFGNTAwMDEyMDI3QUYxQkZGNkZEMjhDRTk1NzQwNUMwMUZFQUU3MEMKKzoxMEFGNjAwMEY4MjM4NzBCRkREN0IzNzcxMDZDNEM0RjExODlBNTExQ0YKKzoxMEFGNzAwMDFCRUM5RjEyRjFEQjE4M0NFQTgwN0Q3N0FBRjE2NDA1OTcKKzoxMEFGODAwMDc1N0IxRUVEMkZFQjc1M0JDQUVGQ0MxQkJCNUVBQkExRjcKKzoxMEFGOTAwMEYzRjBCNEJBNzEzRjk5MTU2NEY0RTgwOTg2ODU1QUQzODEKKzoxMEFGQTAwMEZBNjVBNUIwRkJFRTczNUVFOTc2RDJGNUY0NDAxQzJFOEYKKzoxMEFGQjAwMEE1QzcxRDZEMjM5Qzc4MUU2NEVCMEE4MDFDRENFQzY3MjIKKzoxMEFGQzAwMDdBNDY5QjRCN0JCQkI0QkZERUU3MEU2NjdGRjlDQUFEMEEKKzoxMEFGRDAwMEZDNkZDODYzNzU1QTk5ODU4RTBENzk5QjNFQzM0QUVGMDUKKzoxMEFGRTAwMDg2QkNFREU5OTNCN0Q1QjkzMDlFOEM3ODNCRjI2MzIyRUQKKzoxMEFGRjAwMEZEMzdEQTE0NURBMDc2NEEyM0Q4OTI2MERGQkQyREIwMEMKKzoxMEIwMDAwMDc4REI4MTcyMDBFMzUxM0VFOTI5RDgwM0VGMDVBQ0UzMTgKKzoxMEIwMTAwMDcxRDAzQUU1MTdENDNCRENGRjY5OUNCNzFGMjBENTJERDIKKzoxMEIwMjAwMEYwN0U0QjBCQTUyMzAyRUZDQzUwRkEyMTE4QUY1MzhDQzYKKzoxMEIwMzAwMDY5ODREMjBGRTM5M0M5OTgxQUY0MzkxMzlDMjcyNkZGMjkKKzoxMEIwNDAwMEI5NTRGNDlDQzhFRTYxODhBMDczODg0Q0Y3ODExRUYwNTcKKzoxMEIwNTAwMDMzMUQ5OUUyMDBCQjUwQjYwNTRGODBGQ0VBRjU4QTVEQ0UKKzoxMEIwNjAwMDEwOTdCMERFMzNDNzAxNzFENDgyQkYxQ0Q3RkQ3MzZGNTgKKzoxMEIwNzAwMDRERkU2MEU3MjlGMDEyMDhEMDhERUEwOTkyOTMyNUZENzQKKzoxMEIwODAwMEY3NzUyNUI1OENDMDdFRjI4MEE3MUJDRkZCQ0E5REEyQTkKKzoxMEIwOTAwMEM1OUVEQ0U2MEM1RkU1MzRDMUE1RDAzQjVGQjdBRkUzRUUKKzoxMEIwQTAwMEZDOTNERkZCRkQwRUU3Nzc5MkEzOTMyMjEzN0YxQkYxNDYKKzoxMEIwQjAwMEExNDREMzQ5QjE4OUNGRDc4REJDOUNDMDM5RTc0MEZFQUMKKzoxMEIwQzAwMDRFMjFDN0Y2RkQ2M0U0NTg2MzdFMTREN0NEOTYyODM3MkEKKzoxMEIwRDAwMDMyQTk3Q0Y3NjBBQThCMkE4Q0ZGNTBEMzNGNEY0MDNBQUQKKzoxMEIwRTAwMDVCMEFGODIwOUUzRDdERjZDQkQ3MEIwNzhFMzM1MTZFNjEKKzoxMEIwRjAwMEY1RUIyMzBERkQ1NTU0MUZERDMzMTlFNDYwMEE3RDc0MTMKKzoxMEIxMDAwMEU0OEREMURGODZGOEE5Nzc5RTk3MDRCM0JGNkU3MTdDN0EKKzoxMEIxMTAwMDIzRUE4M0RBRjgxNEEyRDFGMUQ2QjRGRDAwRDM0NTZENDkKKzoxMEIxMjAwMDFENDhGN0VGNDdEN0ZCMzAzRUE2ODVFREU3REU4RkRBMDcKKzoxMEIxMzAwMEEyNTIwMUQyRUQ3OTA5RkNGQTg0QjVGRjdFN0IyMzk2RjkKKzoxMEIxNDAwMDIzRTA3RDMxRjVGQjdFM0JBQjRGQ0EzNUI0QTczRkUxMzEKKzoxMEIxNTAwMDczQUNEOTY2MEZDMTM5Q0RGQjZEQjRERTIwRjhBQzgxN0MKKzoxMEIxNjAwMENENTAxMkZCMTRERjAxODA5ODdGNTIzNzFBRTQ5Q0MxNDYKKzoxMEIxNzAwMEVGNzcyODU0MkUwMTFFREVCNDI3RjVCMzJGNzdDRURDRUYKKzoxMEIxODAwMDBFN0NCRERDMTk2QTgzOTQ3OEQyMkZFQTNEOEE3NzQ0MUQKKzoxMEIxOTAwMDZBRjcyMkJFQzNCRTZCMkM3RTU2RTZDNzdDODdEQkM1MzIKKzoxMEIxQTAwMEM0OTEyMkRGQzdFQkFCQzlGMzk3Qjc3RUY4REM1RDE0MUYKKzoxMEIxQjAwMDZBMkUwOTU3MTNEM0ZFNUEyMjZDN0ZCREUyRTk0QUZFN0MKKzoxMEIxQzAwMDJFMDgxQjRGMTJGQTY0RjY2Q0FCMURFNUQwMDJFRTBGOTEKKzoxMEIxRDAwMDMyRThCNTlGNUVDMjNFN0UyRkQ0NDI0RkI3QzRCN0UzN0MKKzoxMEIxRTAwMDdBMEI5QjRCRUY5OTQyRjFGNzI5QTUyM0YwQ0IwOTlCRjIKKzoxMEIxRjAwMEE3MEYwNTNFNUFCQkU5NkJEQjZFQTRFRDdGRjZBMjg0NzgKKzoxMEIyMDAwMERGMTdDNzlENThGRTgzQkI4MkY3REMwOEY2RkFBRjZDRTgKKzoxMEIyMTAwMDE4REZGNEQ5ODk5OTc4MEVGQjgxQ0RFQTQ3QTg3MUIxN0UKKzoxMEIyMjAwMEZEQ0Q1QjRFOTYyRThBNkZCNkQ4Qzc4QjVBRTYyQkUwQzMKKzoxMEIyMzAwMDdGNUMxNERGOEFERjE3QzFBMTBDREVDRkY4RjA3OEE1QTAKKzoxMEIyNDAwMDBDRTczNTA0Q0Y0N0RGREE3ODdBQzYzQUQ0Njc2NUU4ODkKKzoxMEIyNTAwMEM3QUFERDYyNEY3QTlGRTQyREE3NjY5MTNCQjUzREFENEQKKzoxMEIyNjAwMEQ4MkVBMUY2NTE2NjE2NkZDRjI0M0Y2QUUzNzBGOTA0MTkKKzoxMEIyNzAwMEQ2NDcyNzcwREY2MDExOTcyMzdERTM2QkI3NTlFNEM4ODkKKzoxMEIyODAwMDA3Q0VFNDdFOTJGRkU4OUJERkQ3OTA4RjA2Q0VFRjMyQTkKKzoxMEIyOTAwMEM2NUY0NkJGM0Q4Q0VGRkFFNzczQ0Y5NDY0RjNFOTlGMzYKKzoxMEIyQTAwMEM3MzQyQ0ZGODEzRjc5RkY1OTFDQ0ZBNzFBMTY5MzEwODIKKzoxMEIyQjAwMDk1NDMzNTc2NUFDRTAzRkRERkRBM0MxOUY2RDlFREZFMUIKKzoxMEIyQzAwMDc0QzEzNEFGREFCNkE1MjQ2NDNFQTc2QzlGQTdENDk4QTYKKzoxMEIyRDAwMERBRUQ1RjA3REJCMzk1NDVGREVCOTBFNTIyMzM2MTFEQTkKKzoxMEIyRTAwMEVFNzM1NjhCMkVEQTVGQ0RFNkU5RTNDM0I4Q0Y2NkYyOTQKKzoxMEIyRjAwMEU0MUQ1QjMwMEZFNEVBRTlCNjVCOTNGMjc3OTYyQjYxQ0QKKzoxMEIzMDAwMDdEREFGOEZBNTBCQkI3RENCNDNFQzZCQTI0RDYzRkY1QjYKKzoxMEIzMTAwMDQ2RURFNzc3ODExRkUwNUU2NkQ0QTRDMkQ3ODA3NTJCMjcKKzoxMEIzMjAwMDQ4OEVCN0EwOEJFOTk3NTM1NENGODYxMTZGREE5M0FGNEQKKzoxMEIzMzAwMDAxNUQ2RjcxNjMxQzY3NkFGQzhEMjNFMUMxRjA5N0MyRTgKKzoxMEIzNDAwMDdFQTVGNkNFMThENzEwRTg5NzIwMUU2QURCMTgxRDVDODQKKzoxMEIzNTAwMDA4NkZGREZENzIzQUE4NEMzRTlGOUJGQUU4QTA5RUU4NUMKKzoxMEIzNjAwMDk0NjE0RjJBMTdBMjgzM0I4OUVFMTg2NDFFN0Q3NDMwQzYKKzoxMEIzNzAwMEU2NTkzMzNGREVCNDQ5NDMzQTc4MUZFQzk0RDEwM0Q3MDIKKzoxMEIzODAwMEZGQTRBMkZCQTZDMjM5RDAyNjA5Q0Y5OTRFQkFGNEFDQ0QKKzoxMEIzOTAwMDFCMTgzQzAxRTRGMzQ5NUZFNEVBQTlFNUZERjAyREZCNEQKKzoxMEIzQTAwMDQ2RkFFNjk5RkEzRERENzJBQjJGOTk5RkY1QTY1NEY0NjMKKzoxMEIzQjAwMDUzQTQ5MzkyOEFGRjdERjRGMzhFMkQ3OUZDRjI3MjY3ODkKKzoxMEIzQzAwMDY1MERGMDAxODkyNEY3RTcxQUE5MjFCRkE1MzQ0RkRGRTUKKzoxMEIzRDAwMEJFMTNGNEU5NDk0RkUxRTc1MTlBRkJBODMzQkMxQ0U4REUKKzoxMEIzRTAwMEUyMEU1MTFCM0Y0RkU4REY3RjBFQjAzRjFCNjY0RDdGRTMKKzoxMEIzRjAwMDc3MjRGODBCQUJBN0JGNkI0MzdCMDhEQjIzNjA1NzE2QTIKKzoxMEI0MDAwMEYwQjgwOEY0NkYwQzQzN0Q5MDc4NUVCQUMzNTU5MEY0QTEKKzoxMEI0MTAwMDNDNzY3RDQzREQ0NDY4OTczODc0QTI5QUUzRTAwOEIzMzQKKzoxMEI0MjAwMEEzRkU5MzMwQkY5NzMxMUZDNTE2NTZFMTVFOUEyMjkwNTYKKzoxMEI0MzAwMDZBQTA3MzlCMUM2RTgxN0JCQ0I2NDBFNjA0REQ4NEQ3OUEKKzoxMEI0NDAwMDg4OEJGOUJGOUNDNzhGQjcxNEQwRkFDRUY3NUU1NDYxRDIKKzoxMEI0NTAwMEQwNzZEQTBGRjhENzFDMzlGMjI3NjZGRkI0MkQ5M0M1RTIKKzoxMEI0NjAwMDI3OTIyMkQzRjc0Mjg4NEZBMEIwNjU5RjRGQzczQkM4QjEKKzoxMEI0NzAwMDNFRjVBNzAyQzM4M0VFQjUzMzNGMEZEMTI1RDA3QkQ3NkUKKzoxMEI0ODAwMDNCODlGMTg3RjZGN0VGOEQzODEwQjk4OUU1RkI4REVDMzQKKzoxMEI0OTAwMDI2OTZDRkZEOTcyQjZCOTg3RjMyNzE1REFGM0ZCQ0ExOTUKKzoxMEI0QTAwMDFCRUM5OUVCMEYwRkMzRkI3NEQ3N0I0NkJGMDdFNzBCNzEKKzoxMEI0QjAwMDNGMDUxRjNFRDBCQjlGRTlFNUM0N0E4RjczM0VGREU3OTEKKzoxMEI0QzAwMDBFNTFCN0QxNzUzOTZFRUIzREVBODZGMTdFOEZCREJGNjcKKzoxMEI0RDAwMDc4QzM2RjhGREJEQzM0RkRDMzJCMjc2RDEwNEY3NDMzQzMKKzoxMEI0RTAwMDA0RThEMDc5Q0QyMzlBQzI4Q0UwMjhENjlGNEZCQUJDMEQKKzoxMEI0RjAwMDBDRUUxQTMyQzc2QjZFOEY2RTU1QTFCRDU1RUM5Q0Y3RTIKKzoxMEI1MDAwMDg2REZCRTMyMTNENDI3NkQ2RjNEQTQzN0JGNDgxNDY4NjEKKzoxMEI1MTAwMDdGREUyMUFEOTk1REJGRTNFRDFEQTZFRDg5RkRFREY1NjMKKzoxMEI1MjAwMEUzOTFERjJCOTQxRDg4OTc3RTNDMzkxMDZGMDY5RUYwQzcKKzoxMEI1MzAwMDAyNDc4NTA1Q0Y2ODZGMTg3OEVFQzM1QkRBRENBQkM4Q0QKKzoxMEI1NDAwMEY4RDRGQzcyQkQ2N0Q0N0JFQzdFMjIxQjU3MjI5RTNGNTEKKzoxMEI1NTAwMDgzMkNDQTZGQ0ZCODQyMkYwM0RGRUM3NTg1N0UwM0U5RDkKKzoxMEI1NjAwMDMyNDc2RjlFNUM4OEY3MEY1RjA1QkU1QzIxODVGM0IzQTEKKzoxMEI1NzAwMDQ2RTBCREM0RDE0M0UwNUQ5OEVFRTRFN0FCODk3Q0ZBRDgKKzoxMEI1ODAwMDI2RjAwQkM0NzVGMzM4Q0I5QkY4RkM4RTdERkZCNDE3MDcKKzoxMEI1OTAwMEUzMjg5Rjc4MzUwRkQyRTU1MkNGOTZFRjAyQkZGRDUyRDgKKzoxMEI1QTAwMDQyRkJGQjkzNDNBMzA3OEQ0NzdCOTNGQjNCQ0VCQThDQjcKKzoxMEI1QjAwMDc3NTlEOEZDNkVFNjc2RENDRDg3REM1MTc4NDdGM0U2MjgKKzoxMEI1QzAwMDdBQzk2MkZGREU1Q0NGRTIzODg4REMzREZFM0E4QjFEMzMKKzoxMEI1RDAwMEQ5QzRFMzFEMDZCNjAzRkJDRUM0NzY4Q0Y5MURDRENCRDIKKzoxMEI1RTAwMDFFMDdGQkMzRkIyNzI5MUFGODFGOEVCQ0Y4QzlFRjZCOTcKKzoxMEI1RjAwMDI5RUNDQTc1RTBCOUVDMTYzRkE3REY0QTExRDdGRDdFRUEKKzoxMEI2MDAwMDdGQzg1RDBBN0VBNzRERTk0MTlEQ0U3M0QzQjNBNDRCOUQKKzoxMEI2MTAwMEE0RjgzOTNBRTZGNjI4QzQyMTZFOUQyRUEyQ0Y2QTVCQzMKKzoxMEI2MjAwMEZDODE0ODE1RDQyQjYxRUYxNUE5REMxRURERDY3REIyNTcKKzoxMEI2MzAwMDBERThGMUY0NkI3NkY0RjczQkJEMTI4RTYzOTNBRDNBRUYKKzoxMEI2NDAwMDBGRUNGN0Y3M0E5NEE0RUZFMzlERjdDODJDOEU1OEU4NzcKKzoxMEI2NTAwMEMxNzhCN0Y5MjRFMjAwQjk3MUE4N0JDRTUwMTg4RjJGQkEKKzoxMEI2NjAwMDQ4NTQyMEZGRDNFRDkyQzhFQzY0QzNDRjExOTM5OTlGNDcKKzoxMEI2NzAwMDVEOTcxOTFDRTJBOUVBMzRDN0FCNkQ5QzM1MDNFMzI5MzkKKzoxMEI2ODAwMDE2QjRCRTg0RjcyOTdERTVDOURGODdCQUM0Q0RFRUQ5RUIKKzoxMEI2OTAwMDdBQkJEM0FGMDRGQzdBNjc4OEY4QjY5MTM3RDgyQjQwRDEKKzoxMEI2QTAwMEJERkNFRTJBMDVFQjQ3ODQ0MUVCRTdBRjUxQUYwNEJDOEMKKzoxMEI2QjAwMDQyN0Q5MEZGRjkxNzU5N0ZCNDlCQzUzQjZERTdGQkU0RDIKKzoxMEI2QzAwMDBFNUJCMDc5MDY2REE3NjM4QjVGODBGNTMwQ0E4NURDQjEKKzoxMEI2RDAwMENDOUUzOTNEQzNGMERGQjBCOEY2QkMyMkQ1MDlFRkE0NEIKKzoxMEI2RTAwMEU0ODU5MEI5ODlCNzNDODJGMUI3N0JBMDFDRjM2RjIyNDcKKzoxMEI2RjAwMDFFM0FDNjNDMTk4M0YzRTM0REEwMUI2MDlENkQ4QzlFRTIKKzoxMEI3MDAwMDM2NkQxMUQwOUY0OUYxOTcwREZBRTJCREJCRURERjg0OTQKKzoxMEI3MTAwMDc5RTRCNzA4MkFFQ0JENjk5QTc0RENGNTFFMDdBM0YzMzcKKzoxMEI3MjAwMEQ2N0I3MDFGMDhFRTUxNjgzN0FGRkQzNzM4MkU2RjhBMTEKKzoxMEI3MzAwMEY5RUVGMTMwRkE3OEVGMDJGNDkxRTE2NjdFOUJCQ0ZBMDMKKzoxMEI3NDAwMDZFQkU0RjhBRTEzQjg5MTFDMDEzQzBBMTcyRjYzRUExQzMKKzoxMEI3NTAwMDFDRDJDQzcxMjhGREZDQzNGNjYxNzQ5RTIxMzhERkFBOEYKKzoxMEI3NjAwMDk5QUM0NEMxMEYyMEI2NzRFMDdCQzBGMzIzNzY3MjA1MTgKKzoxMEI3NzAwMDlENUZBQkQwMUQwMjdFRDEyNzg5RkMxREFFRDA5QjgwODIKKzoxMEI3ODAwMEE3QUREQjg3NjIzQ0RCMDYzMTk0ODdGRTlEN0Y1NUYwRDkKKzoxMEI3OTAwMDdDRUM2OEU4OTM3QkUxM0REREREOTMxNUU0OEJBMzIxMzAKKzoxMEI3QTAwMDc2QkZGNUZFMzU4NTFEQjAwRkY3RDY1N0UxM0JCRjUxOEIKKzoxMEI3QjAwMDU1NDFDOUQyNTg0RTVFMTgwREU3ODM2QjQ0NTVBMEU1M0MKKzoxMEI3QzAwMDIzRDVDNjNEMDMxNUVGMzE0QzkwM0VCREIyMThDRUNGMDgKKzoxMEI3RDAwMDg2ODlFMDRCMjJBNzA1RjYzRUM4RkEzNTU1MkFBQ0VCMjAKKzoxMEI3RTAwMDdBMzU1MzMwRUY1QkVFNzAzM0ZERjJCMkJGRkEwRTM3QUQKKzoxMEI3RjAwMEM1NjNFMEFFMUQyQTM1RTMyOTdGNjY4QzAzN0ZBMURFOTkKKzoxMEI4MDAwMEEyNjhDNjNENzE3ODU3MjQ4M0FGNEI0NkI3MTg1QkU0RjYKKzoxMEI4MTAwMDQzRDhCMzk4NkU5MUI3NEQ2MzdFQ0ExRjVDMTU2NkZFMjAKKzoxMEI4MjAwMDQ1Mzg5M0FDNDBGRjIyRkYwQkUwQkE2NjcyNjhEMzU4RUMKKzoxMEI4MzAwMDE3MDIzQkQ3MkRDMkYyRDA0RTE2NkQyN0EzNUM4QzU1NTQKKzoxMEI4NDAwMEQwNzZGN0Y4NDNCQjUxOUZDQzc0MjA5RTg4RENEMzA2OUEKKzoxMEI4NTAwMDc4OEFDRUNDMEU0MjVDRUI4RTI5QTM1RTgyRkI1NTE5MTIKKzoxMEI4NjAwMDI3N0FFNzgwMUU4REU2QkFGRUQwMDE3MjZBQkRBMjAxN0EKKzoxMEI4NzAwMDlGNjdBQzM5NzUyMzdDRjcwNzdGNzgyQkE0MTk0REJGRTAKKzoxMEI4ODAwMEJCMTNGNDgxQkZFNzRGMERGODdEOTY2MkYxRUY2NUJDMDUKKzoxMEI4OTAwMEZFQzE5NzkwOUY1MUFENThGQzg0QkRGRUVBNUQ4MDk3MzQKKzoxMEI4QTAwMEREMjU5MTQ4OERDNkJFODdCMkZBRTc3MTYwNkRGNzJDMzEKKzoxMEI4QjAwMDc4RjdGQUY0MzU2MjcwMEZDRkM3NzlFRDU0QTM5QjE4NkYKKzoxMEI4QzAwMERFQ0E0MUFGMTk3OERCMjA2QTVERjAyRUIzN0VCNTAzODYKKzoxMEI4RDAwMEU5QTM4ODc0QTNCQzFBMDZBN0M4MjM0Q0Y0RkFGQUM2RDUKKzoxMEI4RTAwMDU1MTAyNzkxMzg5RTFGNzNCRTg1M0Y3ODVGMTJENjBBODgKKzoxMEI4RjAwMEUyNTE5NDYxMkNBRUZFNjA1OTc3MDBFQ0Y4MkRGRUU0MjUKKzoxMEI5MDAwMEYxMDk2NzNEQUNCRTNEQzUzREY1MzMxRTQ2MEYyMDEyMjMKKzoxMEI5MTAwMERCQ0EzMDBEOTU0MkVBMjE3QTFBQTQzOThFMTBDNEM3QzkKKzoxMEI5MjAwMDFFMTRCNTNGMjI5REVGOTAzNDU4MUYyODZGQTNFQjc3NkMKKzoxMEI5MzAwMEU0ODUzM0U4MUYzQzEyRjkwREE2Q0Y3QjhBOERGNjYyQjEKKzoxMEI5NDAwMDU5RjAzRTZFRjk0OTNDMUZEOUFBMzIxQUE5NkQ2MUYyMkQKKzoxMEI5NTAwMEEyMzZEMEUzODBGMzhBREExMkEyRUVFMUY0QTYxQjc4RDUKKzoxMEI5NjAwMDA2N0YxN0Q3NTczNUQ3MzFCQzY2OTYxMDNDNkYwNTlGQjkKKzoxMEI5NzAwMDE4QkM1Nzk2MDVFNTI4RkUzMjVCRDZBRUMyNzUyNEREQUQKKzoxMEI5ODAwMEZBMDg1QTZFMkJCNDBCRUJEMzI0MTJENjZFOEYwM0Y5NDAKKzoxMEI5OTAwMDM3MjJFMTc5MjNFNUY3NUZDMzc5NjI0REVCNTAzQzZGQzUKKzoxMEI5QTAwMDg3NkJFQUQwNUUzQUVGMzc5REI3RDc0MURCMDFGRkRGMDcKKzoxMEI5QjAwMEU5MTYwOUVGQjE0MEQ4MEJDMERBMUE0QUNCNDg5RkJENEYKKzoxMEI5QzAwMDk1QzVCNDVEQUQ1QzU1MzcxOTc0NjBDODMxQ0ExQTBCQTIKKzoxMEI5RDAwMEE4QkUwMEJDMkREMEY1NTU0MDdGMjcxREVBMEIzMDBFQzgKKzoxMEI5RTAwMEY3NEVCQjA2RjM1RkIwRjNBOTNCQzA2RTcxMDc3QTVBRkUKKzoxMEI5RjAwMDQwM0VENDRFNjZFMzRENkZBNURGRDFCRUQxN0UwREU1NEUKKzoxMEJBMDAwMDZCNUJFRDFBRUI4RkUzQUY5Q0QzMTlDN0MzNDIzRUVFREQKKzoxMEJBMTAwMDg1RUQ2Q0RDQUVEQzY4MDRFOEIzNzYwREM1MkJFNDg1RkYKKzoxMEJBMjAwMDE5REQ4MzRCRjNCQzg4N0M3NTAyRTZFRkQ1QjNCMEREM0UKKzoxMEJBMzAwMDIxNzMxM0Y4MjI4MUZFOEM3OUQ1RjA3OUQ1QUM2MUYzQUUKKzoxMEJBNDAwMDIyOUM5RkU4QjA2MkQwNkU0RDM5OUJFNzAyQzJFQThCMjAKKzoxMEJBNTAwMEYwOURCNkJGOTBDRkE3NDY3RjEyRDM4NTJENzY0QkZCQzYKKzoxMEJBNjAwMEJCOEJGNzc2RTM3REI2MTI0NTEzMTBDRkVDOURDQzNDMzMKKzoxMEJBNzAwMDNFQUZCQzI2RDY1RjVFQzk5Mzg4MkY1MjZGMUEyRkZBNEQKKzoxMEJBODAwMDQ1NEQzMEU1QUJEM0NGNTNDNkEyNzZBRTkwRTc0MDYyQ0EKKzoxMEJBOTAwMDNBRjk3RDA1Q0Y1MThBNzY1QUU3NzU3QUUzRTgwNzVBNzUKKzoxMEJBQTAwMEMxRkY3OUI3ODJFNzE1MDdDNUUwOUJGOUI4MEY1NTM0OTgKKzoxMEJBQjAwMDI2N0Y4MkJGOTkwRDcyN0E2MTUzMTBFNEY4ODE0QTg2MUQKKzoxMEJBQzAwMEZGRDNERjIyNTFBMDg3OTEyN0FBRDMwMURGMjM0Rjg0MjAKKzoxMEJBRDAwMDc5NUE4N0U3RDgxNDIxNDI5RkRDQTNFM0EzNUJBNzE2MUEKKzoxMEJBRTAwMDAxRTQ2NTdDQzQ4RjE2ODMxQ0EwRUIwQ0Y2NjBBRTc5NzQKKzoxMEJBRjAwMERDNzQ3QzE5MkQ1OTU1MTA4Nzk0MzkzOUJENEFDMUE3N0EKKzoxMEJCMDAwMDdGMTNGMjRGRUM5QTAzRUZEODY2MUVERjc1MkJGNDMzRTgKKzoxMEJCMTAwMDhDOThFNjQzRjM0Nzc5NDdCMEZCNTdDNzY5MkU5NEFCM0YKKzoxMEJCMjAwMDNGNzUxN0FDNDcyQjdGOEY3RTI0OEMyQzFERDNFMzkwNjEKKzoxMEJCMzAwMDY2NTBGRURFOUMwRUUzOTRDOThDQjI3RTc5QjBFRkVFQzcKKzoxMEJCNDAwMDhBMDkyMDU3RjBFRTQ4MTlBNjMxNTIzNjUwNkU5OENBMkQKKzoxMEJCNTAwMDhGRTFFNTc1MjE0OUI5NTJBRjY2RDk5N0VGQkJGQkYyOEEKKzoxMEJCNjAwMDMxQjA3RkRGMEE3NjYyMUFCQ0U3QTc3RTBBRjEzMTdBMkMKKzoxMEJCNzAwMDUwNDRCQzZGQjVDNTFDMjU5OUYwNUVCODQ4QzA3RUQ5NEQKKzoxMEJCODAwMDU2RkMzQjExRjg2RUVCMjExMjA0RkFDOEE4RkVBQkREOUYKKzoxMEJCOTAwMEJDOEVCNTFFM0ZDRTVCNTZDODY2RTBGRkEzNjM0RUNEOUMKKzoxMEJCQTAwMDgyNzU4QTFFMTFGMTNEODlBQTVGNzg3NkI5QzExRUZBQTUKKzoxMEJCQjAwMDNEOEIzRkU5NzhCRTBFRjVGN0VENzk0QUQyRjc5QUM5ODkKKzoxMEJCQzAwMDA1RUNDNEM0RjJFOTIzRTdBMDFGMkY3RkU3NzY3QzE3QkEKKzoxMEJCRDAwMEI2NzY5NjFDQkM4Mjk2Q0VEQzU5NTkwOTc2OEM1NjREQTkKKzoxMEJCRTAwMEE5NkIyODFENzdGQjg0QjVDMDg0REE2Qzc2NUVBNUNEODEKKzoxMEJCRjAwMDYyREZCNTE5MkNERERDQjA3ODIyRUNEQjIzOURCMkIzMUIKKzoxMEJDMDAwMDg4OEU3N0VDNDZGNjZFRERFNjkyNEYxQzYxNkE5Nzk2NTkKKzoxMEJDMTAwMDU3M0VFNkY4MTZGREZFNkUzOUQ1ODJGNEZCQkJEMzNFRTcKKzoxMEJDMjAwMDcxQzJGOUNDRkRFNTU1MTk4MENGNDMyRDU2QkI4RUMwQUUKKzoxMEJDMzAwMEEzNkE3NDFGNTQ2QThGODRCQzc0NUNBREJGMjU4ODRGOUYKKzoxMEJDNDAwMEM5MUU2QkFCQTFCMEY0OTQwNzJDOUMwMUZCOUI4REFEN0UKKzoxMEJDNTAwMDFENzM4MTRFMTcxNDYzNzhGMjgwRjk3RUNFRjVDOUZDMEUKKzoxMEJDNjAwMEZBREU1OTcwNUZBOTQwMjdFQzFDMzU3MjBGMEFFNTg1OTIKKzoxMEJDNzAwMDVDNjQxNEU4REQyODc0QkMzQkQ5RkUyNDIyODc5RTAzNTMKKzoxMEJDODAwMEI5MUMyOTA5MkI1MEM1OTA2N0FEMjM2QjFFMDQ3OUY2QUEKKzoxMEJDOTAwMDI1QjdFQjQ4REQ2MkJDMDc4OUZDMkY4MTNERDQ1Qjk5NTkKKzoxMEJDQTAwMDZDREY3NDlEREI4NTc0NzVCQUZEREE1N0MxM0ZCREEwQUEKKzoxMEJDQjAwMDlFRDlGQkY5RUQ5RjBBQjgxRUQ0RUUxQjQ2REJDRjJGQjEKKzoxMEJDQzAwMEM3QTcyQUM5ODIzNTExNDcyOUFDNEY5MTQ4MzQwREM2MDAKKzoxMEJDRDAwMEQzNDU2MDlGMTBBMUZBQzc4QzA3QTNEREJGQjVGRTc2RTAKKzoxMEJDRTAwMDhGMURFQjVGMDc5QkU3NDlGREYzRjFGMEY5RTQwNUU5RjAKKzoxMEJDRjAwMDdDOTJFOEU5MzlCQ0RGRUZEREY3RTk5MTI5ODBGRjM1NzcKKzoxMEJEMDAwMDZDOEI5NDFGNzk1QjcwOThDNjkxQUY1RkRDMzhBRTg1MDEKKzoxMEJEMTAwMEY2MjgzRTFGRjFCMDdCMEJERUYyMUVCQzY3OTQyOERGRDUKKzoxMEJEMjAwMEMxOUMwN0JFRERFRDNFM0I4MUVERUZBREYyNzQwMENDNzIKKzoxMEJEMzAwMEU5MkFGMTdCNUU4MkJDMkFCNTc3RTEzREQwRDYwM0VDREYKKzoxMEJENDAwMDVENzREODc5NDNCRTQwNDQ4REJEMTcxQjM1REUyRkFGREYKKzoxMEJENTAwMDgzNzI2M0JEMUUxNUU4QTA3NUNDRUZDQTAwM0Y1QkI4QzcKKzoxMEJENjAwMEJEQjBCMDg0RTA3RTc1NjE0RTM3REEwQkYzOUJCOEJEOTEKKzoxMEJENzAwMDIwMDc5QjQxQzhCQURCRkQ2NDkzQzk3RTQwNTMwOUI2RDYKKzoxMEJEODAwMEQwNEREQzVFMzBGNDNGRDdEQkI1ODFFRTE2RDRBQjRENDEKKzoxMEJEOTAwMEVDN0U2QTlGOURBMTMzQkQ5QTFGNjA3QUJEQjY4NUY2ODEKKzoxMEJEQTAwMEEzNzE2MkFFMzBEQjI1NEM4RjZCM0JCOUZEQzBGNTcwRTMKKzoxMEJEQjAwMDA2RUYzN0IzODVFOUFCMENCMDIzN0MxMDdFQTBBMzVFMDEKKzoxMEJEQzAwMEM2QjNCQ0FDN0VCQjY1NDgwOUQzOTcxOUFEMDc1MUFGNkMKKzoxMEJERDAwMDc1ODNEMzY1MDhDODBEQTYyRjczNUY3QTQ1MDczNDA1QjAKKzoxMEJERTAwMEU4RTczNjJBQTc3RkVBNjY3MjM0QTA1MkZCMkNCRERGNTMKKzoxMEJERjAwMDNFREIyMEYyNzMyNkMyRUM0MzhDQURBN0UzN0M5Q0I3RkMKKzoxMEJFMDAwMDY3N0NERkNCQzc3N0YwNzhGQTM3NDFCRUVFOEIxNDRFRjQKKzoxMEJFMTAwMDkwNEM3QzZCRENEQkNBMkI2N0U3RjQ3OUY1RUM5Q0RBQTEKKzoxMEJFMjAwMDFCNUNGNEEwNjQzQTdGNjhGMUIwNzdBRTVBMENCQUFBRjIKKzoxMEJFMzAwMDhGMDVBMDVEQkM0Nzg4NzI1QzQxQkZEQTQ2NzgxNzBBNUYKKzoxMEJFNDAwMEU4ODVFRkFGNkU3MEYzNzc4RDM4RkRBNEQyMjc4NjFDOUUKKzoxMEJFNTAwMEYyOTI5MEFGODRFMkY3RERFODgzMjhBRjc1QkE1RjgyOTMKKzoxMEJFNjAwMEI5QkQxQjY5Q0M1RTAyRkMxRUI5QTYxQ0M2QkY3NUNBNTMKKzoxMEJFNzAwMEU3MTg3NzkxOUY2MkJGNzhERUQ4Njc3RTQ1QjlFRTlENUYKKzoxMEJFODAwMEY1MEFEQjg3NzY4QjQ5RUZDOTRDRjNDQTM4OUYyRTk5QTgKKzoxMEJFOTAwMEI4MDE5RkNFMDg3QkE3RDAzOTU5NDk1QUZFMTIyRjkzN0IKKzoxMEJFQTAwMDlCMkUyRjdCQTc2MEVCOTQwN0YxNUU2MzRBRkQyQzEzNUEKKzoxMEJFQjAwMDVENEFBMjRGMEQ3RERCMEFFQjNDOTU5MDk5OUUxQjlBNDMKKzoxMEJFQzAwMDc1OTRGQkQxNkEwOUU1MkJDMTdENjc4NEZGNUU4QzVFQUEKKzoxMEJFRDAwMEFDQTBERkIwRDUxNjcxQzA3QTZDMkJFN0VCQUEzQTNBNkEKKzoxMEJFRTAwMEUwNUVGQTU3NUUxNzhBMEY1OEU3OEQyMTMxMkExNEMwOTkKKzoxMEJFRjAwMDNBNDdENTUyRTZEN0MxNzczOTRFRDNGREJCRjk5Q0UyMUMKKzoxMEJGMDAwMDRBMkZGMzY3NzVDOTlBMDhGMTg5RjkyRDhDQkVCNjRFOTAKKzoxMEJGMTAwMDUxNzAxQzlCMjY2NDc1NDgwNTY2RjlDQkYwNzQ5RDlCOTcKKzoxMEJGMjAwMEQxRDdBNjI5Q0YyMTdENURFQ0Y4MTZENURGMzlGNTVEOTcKKzoxMEJGMzAwMEQzMzlFMkE5N0IxRjJBMDQzQ0Y3QkZDQjEyMUFGNEZFQzcKKzoxMEJGNDAwMEMyQTJGQTk3QTZFRTRENzIzRUQwOTcwRkZCMjgwRkVDRDcKKzoxMEJGNTAwMDAzQTMzNzk4Q0Y1OUU2RjFGNTVERTBCNUZBRUY0MEJFOUYKKzoxMEJGNjAwMERBNzA3MzExQ0QwNkZGRDI4MUU5NTExRkZBRUY5N0IxNTQKKzoxMEJGNzAwMEYzREE1QkY4NzlFRDk5QkREN0UyQkIwN0E1NzA5NzM2ODgKKzoxMEJGODAwMEM5QkE3RkQwNjA3RDA3RTI4MzdEMEY2NTMzQkY0NkQ0OTkKKzoxMEJGOTAwMDYyNUZEREYyRTA0RkM2QjI3NzY1NzRGRTdCMUE0NENCNzgKKzoxMEJGQTAwMEFDNjBFRjVGQTM5RTdFMkVBOERCQTVGRTc3Q0Q4Qzc3REQKKzoxMEJGQjAwMEQ4MkVGNjVEQjc3NDZBODZFMUJFOEI1NDYzOUE0NUVBNjMKKzoxMEJGQzAwMDMwMEQ5MDA4QTZEOUE0MEJEMzFDRDhFN0MyRkI2QkE0RjQKKzoxMEJGRDAwMDE3NTM4REE4MjIzMUM5RkQ0MjEyNDRCODg4NTQ2MzJBRjAKKzoxMEJGRTAwMEMzQkE2NUY0OUY0QkM4OUQwRThDQkY4MEYzMEJFMDdCRkEKKzoxMEJGRjAwMEUzOUNDMjM4REZBRkY2RDY0NEJDNDlDRTJCNTY3QjQzMTgKKzoxMEMwMDAwMERCQkRBODU3NjIyOEI3RTc3MzExN0VFMkM3NjNCQkUwQzgKKzoxMEMwMTAwMDdFQ0ZFQTJERUM3RTg5MjFENzcxNUY0M0RCRkY1MTNBNTkKKzoxMEMwMjAwMEQzMDNGQTBFMDFFNUQ3M0FGN0Q1OTcyMTFFNUI2RDFGQjIKKzoxMEMwMzAwMDk5Q0YxQjg4QzM1MTA0QkYxQjYzQjQzQjlGRkIxN0U2MUEKKzoxMEMwNDAwMDczRkQwN0VFNkQ3NkZGMkU4OEY3N0ZFNjgzOUZDMTk0MjAKKzoxMEMwNTAwMDRGRkFGMkQ5N0Q2QUEzMUREMTNENkRENDYwRTc3QkE2NkUKKzoxMEMwNjAwMEZBMTg4RjVDOTM2MEZGNUY1MDZGMjdDMDBCMTJFQkZGRDUKKzoxMEMwNzAwMDg1MEUyOEFCREYwRkY3QTNDQkI0M0M3NkNFQzRGNDM2RTUKKzoxMEMwODAwMDI1MjQwREVCQjVEOERGQzY3RDU4NjQ2NkM4OEM5NzEzQTAKKzoxMEMwOTAwMDlDRkUwRDdEQjIyMEMxQUY5Rjk4MkU5MDM5NUYyNEI0RDUKKzoxMEMwQTAwMDQzMzU5RjFGRUVDREUwREIyNjI2QkUzNkRFQkYzNTdFNTQKKzoxMEMwQjAwMDVGRUI5NjUwNTgxOUM2QUEwNTYwMUQ1NTNFRUUwODY5RkIKKzoxMEMwQzAwMEFGMUE0NkQzRjcwMTM2RjlGMzVGRjQ4NTdGRTczNUM1M0MKKzoxMEMwRDAwMDQzQTlBMTNBRDFGQ0ZFRDIyMkNFODczM0E1RDY0QTkwRkQKKzoxMEMwRTAwMDZGQTdDMzI0MDhGQjg3NUI0OERENTZCMEM3QzgyQjEyNzcKKzoxMEMwRjAwMENBQjdFMTc0RENGMEJCM0ZCOTcwQTA5MThFQjBBRUQwOEUKKzoxMEMxMDAwMEY0RTMwNjc2MkZFNzU0QzJGQkQ1MUZGMjc3OTE0QURCQTIKKzoxMEMxMTAwMEVFQjgxQUU4RTAwQzdGQjdEQUUwN0ZBM0RGRDIyRUY3QTMKKzoxMEMxMjAwMDNDRDBGQkE1NUREMzZCQTE1QzY5QTcxRDdGRTdBOUY4OTcKKzoxMEMxMzAwMEQwQzY2QUYwMEJDMTNCMkQyRURBNEYwRUVEQ0Y5MTBFMUIKKzoxMEMxNDAwMDcyODRBMEJFRkRCMEQ1MTU1RDQ3QzdGOTYxOUI4NDcyQUUKKzoxMEMxNTAwMEY5NUM4OTg4RUY4REMwNzM5NzEyMUY1RjVBM0FCNEYzNjgKKzoxMEMxNjAwMDVGMzc4MTFENzI4NkNCMTFFM0REQzcwRjJCMzVEQzFGRDYKKzoxMEMxNzAwMDNGN0I2MDgzMDBGNzEyM0U5Q0E3RTFCQzNGMUNENjk1MzUKKzoxMEMxODAwMDk3NEVGMTkzRTM2M0Y3NzM4QUY2REI2Mzg1NzQxQzRCNzgKKzoxMEMxOTAwMDFFRjk3RDYxMERDOEJGQzJDODkyNjRFN0NDNDM3QzRDRDgKKzoxMEMxQTAwMEZFN0RGODA0QzE3OEI4MEY5REZDNzc4RDFDNUQzRUIzMTEKKzoxMEMxQjAwMDlGMzVDRDI3NThFNEQ2ODc1RUZFRkI0ODM5MTcyOEM3NDAKKzoxMEMxQzAwMEUzQ0I4OUE3Q0JDN0Y4QkVDQjA3RTc1MUY3Qjg3RjhDODUKKzoxMEMxRDAwMEY3RDc0RTNEQzFDRTI5OUVCREI3MzYwRkZDNTFDMzdENkEKKzoxMEMxRTAwMDFBM0JGNzNFRjAzOEM2OERDMzNDNjAxRjREQzdBN0MxNTAKKzoxMEMxRjAwMEY4RUU3MUJGNzkwNkZDMEZCNDFFREVDRjMwRUE5RDNBMkYKKzoxMEMyMDAwMDUwQ0JDQUI3RDFGMjNFQzQzQkYxOTUwMTNEMzBCQzkzNEYKKzoxMEMyMTAwMEZENEM0RTE4RjZFM0QyNjgxNkZFRUU0MjdGQkU4OEY5NUEKKzoxMEMyMjAwMDMwNDQyN0M1N0ZFOUZFNkJGMDVDQUJENDk3Q0VFODU5NkMKKzoxMEMyMzAwMEVEMUEzQjA3QzcxRkM5ODM3OTFDOTgxRUNFMDMzRkRFNEEKKzoxMEMyNDAwMDI5RTM3N0EwRTQ0ODFFRTBBMURBMUIyRUY1OTlFNkZGNkEKKzoxMEMyNTAwMEMxREI0RkExN0MyRjE2RUJERUJBMEJFOEYyMzFGNjNCQzcKKzoxMEMyNjAwMDI0NzdCQ0JFNUQzNENCOEY2OUYwODM3ODkzNjA3RTJCREUKKzoxMEMyNzAwMDdDNzAxRTc1QUFFRkJEOUMwODhCRjczOUNDREU2MzVEMjAKKzoxMEMyODAwMENBNzlFRjU0MDdERDNGNTE3QzdDQjBGRjA3OTg3RkFBNDUKKzoxMEMyOTAwMEVGM0Q5QjJFOEMyN0ZCNjBGRkIxNzQ0ODZCNzgzQzNGRDEKKzoxMEMyQTAwMDg5NUU4QkZDNDVGMUQyRTI0OEEyQUZGQUVFNDU0NUQ5NTIKKzoxMEMyQjAwMDdEQjdCMzAyN0Y4N0Y0M0UwMzZGNzVDQTFDQ0I3OTE1MzcKKzoxMEMyQzAwMEUzRUY5Q0Y2ODJFMzY4MkY0NzkzREY5MzRCRDRGNzg5MjMKKzoxMEMyRDAwMEVGQ0E1RUU4MUVGMDQ5Q0VBN0VGRjI3N0QxNTY3QkMzRDYKKzoxMEMyRTAwMEQ3RkI1MDVGNThGNTQ4Q0RFNkU1Nzk4MEU3MUFCODUzOUIKKzoxMEMyRjAwMDg3NzEwRUQzQUY4MEZEMzZERTM3NjFFRkNBQzYxMDRGQUYKKzoxMEMzMDAwMDdERUZDNjRFQkMwMkUyMUM0RkY5MTk1Q0U3OUJCRDQxQjQKKzoxMEMzMTAwMEU3Nzg2NEVGRDI1NkIyRkEwNTJDQkY5NUU3RkZDQTVCMDcKKzoxMEMzMjAwMEJEOThGNTRGMDRGNkJCNDYzNjNGRkMzRTg1MjFGRjUyRDMKKzoxMEMzMzAwMENGREZGQUZCMTRGNzgzNEMxRTgyRURBREY2MERDMTZDMTYKKzoxMEMzNDAwMDgxQ0RFN0VGNkJDRjkwMzc3Rjc3M0I4RTdGNkMzQjg2NUQKKzoxMEMzNTAwMDFDMDZCRTg0OTAzRDEyMEM4RUZENDdFMEVGNkZBRDRGODIKKzoxMEMzNjAwMEU2RTY1QkU0RjkxN0Y3OEU2ODg2NzNBMDczMDE4MkYxNDUKKzoxMEMzNzAwMENGRjZENkI1MDRGNEQyQzI5RERCOTNGRUJFNUQxRkNDRDIKKzoxMEMzODAwMEUzNDk5NDExOTRDRjRDRkMxQ0YzMzEzQjNEQzZFNTIxQUQKKzoxMEMzOTAwMEZDQzFGOUNDMjg0MkY4N0IxNzk0QTZCMjMwRTQwNkY3MkEKKzoxMEMzQTAwMDdGQTNGOTdCRUZDNTI0ODJGNkQ1NThEMjg1NjkwOUU5QzgKKzoxMEMzQjAwMEM2NzQzQ0U5QzUxNDhGNDk0NzgwQUIyRjI4RjE3NzdCQzEKKzoxMEMzQzAwMDJCNjBGMkNCMUNFMUZCMjE1NEY3QUZGNkYwMzM0MDRGNkEKKzoxMEMzRDAwMEYwN0VBRjIwODE1REI0NjIyQThDRkZBODRGMzU3RTA3QzYKKzoxMEMzRTAwMDk0MjRGQ0FFNUFGRkVGODE2ODYwRDdDQzBFMEM2NkQ3NjAKKzoxMEMzRjAwMDEwNTVGRUE4MkY3RUEzOTBCREZGQ0JGODIxRDVFRkM0MkEKKzoxMEM0MDAwMDI1RkNGRTI0QkY0NzZDRTA2MTM5RTlDMjM4ODg2N0RCNTAKKzoxMEM0MTAwMDU3QkYzMDg2RTI3RkM5N0UyRkVBODM1MUVENERGODNCNEUKKzoxMEM0MjAwMDYwNEI0ODc3MTZEQzJGMURDNURGOTMyMDZERUMxRDBGODgKKzoxMEM0MzAwMEUzOUQ4ODMxNkQ3NkNCQkIxRUNCMTM3RTg3NjgyOUZGQzkKKzoxMEM0NDAwMEREQjBBNTA5REY4REZCOUI5QkUxNDM5MjM4ODJDNEZCRTUKKzoxMEM0NTAwMDlGQTc3RDI5REU2MTJENDlGRTdCMzA4OUY3M0ZGNzc3NjUKKzoxMEM0NjAwMDg5MThERkIzMUFFMjg1ODQ3RUI5Mzc2NjZGOURERDRBOEQKKzoxMEM0NzAwMDVGNUQ5NzE1OTlERTdCNkExNDgyNkMzRkVENzU4NUY2REEKKzoxMEM0ODAwMDA5MDNGQjE5QUIzMjNCRUU4MDIwMjQ4RDIzQkIyNjhEQTQKKzoxMEM0OTAwMEVGMTc0OTEzQjk4QUI2RDNCODRDNTY2MUJGRDkxODc1OEUKKzoxMEM0QTAwMEUxMzk2OEEzQ0FGNjg1QzNCRDU1MEVEOEE3MTNCRkE4NDYKKzoxMEM0QjAwMEMyRkQ5NENCQTU2OTE4NUZBRTJDOTcyN0MyQjlFN0YxRUUKKzoxMEM0QzAwMDNENEJCQUUxRkU0MjYzNDA0NjNGRUQ3MDNGM0IwNzI1REUKKzoxMEM0RDAwMEMzNDQ3QzFGQTA0OTdEQ0MzRjFGRDZDOUMzQ0UxOTczNkUKKzoxMEM0RTAwMDU1ODJCRjYzN0FBNEUzNzYxMUUwNDZCQTZEMTkwQUZENUUKKzoxMEM0RjAwMDA4RTE2RUJDNzczMzRDMjZGQ0ZDNzVGNjA0NEE3RkY5RTQKKzoxMEM1MDAwMDlDMUU2NEQyOEFGNzhGNjcyQzdGRDcwOTdBM0Q5RkFGMzQKKzoxMEM1MTAwMEZCOTRCNDAyOUM4N0NDRDc3Mzc3RkQ0OTNGRDBFOUYzRjUKKzoxMEM1MjAwMDFEQ0QyRjVGNEVEQkIzNDU2NThDNkIyREZFQjJGMTBGMzkKKzoxMEM1MzAwMDk3RDNGRTdBM0IxNDhDNjczNUYwOTBCNzQ2QjZEQzlGRjQKKzoxMEM1NDAwMENEQjlDRDBBMkIwOUY3ODg2NTYyQ0FBN0YwMzhERTNGNUUKKzoxMEM1NTAwMDNDQjgxQTMzQzc1NTY1ODY5OEIzNTBGNUUwRkRFMDRCRkIKKzoxMEM1NjAwMEQzMDQ2NjE3NzNCODE0NjA4QTkyNEU1QkE0Q0E0NUM3OTkKKzoxMEM1NzAwMEQ5Rjk4NjgwN0U4N0EzMUQ4QkYyMzE0RUZGMjdFMTdDOUYKKzoxMEM1ODAwMEEwNkY4MzFFMTJEN0VGNEJCMDg3OTA4Rjc0MjdCRjFGMDkKKzoxMEM1OTAwMEVDODRDM0JBNDRGQTY5NkEyMDIzQzExRkVEODgxRTc3NzAKKzoxMEM1QTAwMDhEODM3NTNDNjFDM0Y3QTRENjczRkI1QkY2QjBGODc3NTcKKzoxMEM1QjAwMDgzNUUxMkQzRjUwOTc0QjdGRUNCNkI5MUVFN0EyOURENTkKKzoxMEM1QzAwMDI1N0IxN0NFQTgyN0FCMUFEQTA5QjYxQzEyMDRGNkIwRTEKKzoxMEM1RDAwMDY1NzY2N0FCQjRERUI4QTc5NEEwODdBMkVDRjI0NzRCQjAKKzoxMEM1RTAwMEQyQzA5RTE5NzdFQzdBRjY1RTFGQzUxN0JFRjc1OEFGMUEKKzoxMEM1RjAwMDhDODQ3REJGQkQzRTczQTQ5QzAxRTUzQzQ4OEY5Rjc4MzEKKzoxMEM2MDAwMEQ4Rjk4RjVDRUYwRTQyN0U2MzQ3NDU0MDMzRDE3NTczOTYKKzoxMEM2MTAwMDgzM0E1MjFFMDlFRkE1M0E0NkMyRUYyMzM1QTdGODlEOEIKKzoxMEM2MjAwMEU2NUNCRjU4MERGRTI1ODVFRkZGOTdBNEIxRjEyRTQ5QkEKKzoxMEM2MzAwMDczNjM3QTBCODdFRjkzRjUzOTMwRkVGQjI4RkQ0MEJDMUUKKzoxMEM2NDAwMEMwOTFEQjE4RkRBRTFFRTZDMDdCQ0ZBQjlGMUYzMTc0REYKKzoxMEM2NTAwMEIwMzhBMDA3MUIwMjIzMDE2RkVEQjdENUEwREZBMzcyOEUKKzoxMEM2NjAwMEQ1NzFFNzE1QzBFNzVFODcwQUY0MjhGOTQ2REQzMzBEN0EKKzoxMEM2NzAwMEU4RkQwNTFCREVGQjZBRjQ1NjY4RjM0REVENDlCRUM5QzMKKzoxMEM2ODAwMEU4NTc5MjQ0M0QxQjM2NDUwRDY5N0ZCODQyMUUwNkY0QkIKKzoxMEM2OTAwMEEyRUYwMjREQjQ2MURCMTEwNjdCRjU2QzgxRTY2RkRCMjYKKzoxMEM2QTAwMEY2MkM4Mzg3RThCQjA0OUE3RkNGQjZFNzE5OUNBQjY3NkIKKzoxMEM2QjAwMEMzMkY4MERDQkZFRDU3MEMxRUE5RUYwMkY4QTE2RDJGMzAKKzoxMEM2QzAwMDMxMTg2QzBCNkFDNzNDQkFFREI3NTc4MEVGQTdEMTE2OEIKKzoxMEM2RDAwMDlDMEJGRTlEMUZEM0YxOTdEOEUwQkQ1QTk2MUVFNDc4QkYKKzoxMEM2RTAwMDMxRjIxRjgzRUYxNERGODc3ODlBOThGRjI0QUZGNzc0MzUKKzoxMEM2RjAwMDhBRkM3RkU3Rjk4NzUzQjRGRjMzNUUyRjk2QTJGRTUxODEKKzoxMEM3MDAwMDVFRUY3ODhBRkFDRkYxN0EyNzUyRTRCRkMwRjM1RjRDMkMKKzoxMEM3MTAwMEQxRkVBRjc5QkRFRTE0RjU1RkU2RjU1RTQ5NTFGRjc3QzYKKzoxMEM3MjAwMEJDREU2QjI5RjJGRkMwRjM1RjRGNjhGRjRENUVCRTg3MzIKKzoxMEM3MzAwMDdGQ0ZGMUI2RkM0MUE3NzQ5N0QzQzE1RUY4MkNGNkI2NTMKKzoxMEM3NDAwMEEwRkRERTVFNTc4RUY0REYzODg5RDkxOTA2QkRFNzQwQkIKKzoxMEM3NTAwMEJDMjZDODVCOTVDNTU1OEQ1MkQ5M0VFRTk3NjlDQ0RFOTcKKzoxMEM3NjAwMEE4NUM1NUI0MERFODZFRjVBRjI0RDRBNzU0OEZFMEVGNjQKKzoxMEM3NzAwMEYwRUFBQjU4RENDQkVBRTdEOTdEOTBENUFCNjQ3QzI3RjcKKzoxMEM3ODAwMENEQTA0N0EzQkUzMUZFREQ3QzdDNEQ3Q0JDQzdEMjBBNjgKKzoxMEM3OTAwMEY5Nzk0QjYwRTQ2QzczQkNBNzZBODUxRDk0OUYyMDY0OTMKKzoxMEM3QTAwMEE3Mjk5M0U5OTdFMjU1NTU4RUQxQTAzRkE4N0UwMUI5RkMKKzoxMEM3QjAwMEI5REVBM0M0RTAxRUZEN0E1NUM2RkNBNkNDMkExNUYyNEMKKzoxMEM3QzAwMDc1NTU0NkZEQjMzRUIzQ0EzMTFGRkQzOUU5RTg5RkM4MzAKKzoxMEM3RDAwMEU3NzE3QjREQUE4Q0Y3Rjg2NUZGMENDQ0JGRkNEMUQ5NzMKKzoxMEM3RTAwMDJBQzhEMTI2RDJFQkFGODRGOUFEOTFGMUJDRjY0ODVERjEKKzoxMEM3RjAwMDE1N0VDRkY3N0ZFNjA3RjlGQ0FDOUZFMUZEQjhGNzM5NkUKKzoxMEM4MDAwMDI3QkNFNzJBN0Y0RjQ0N0Q4MUY4QTNGRDE2QUUxMUEzMTQKKzoxMEM4MTAwMDFBMkQ3MjVDNUQyRDAyRkM0MDEzRDM1N0Y0Q0YzQkExNUYKKzoxMEM4MjAwMDgyQzc3MUQwQkZDRURCMkI1RTgwRjg5REM2MkQ3MjEwMDMKKzoxMEM4MzAwMENFNzNFMDRGMzZFOTgzMjJGRTdCQTU0MzU1QjY2RjM0QjUKKzoxMEM4NDAwMEY0RDU3RERDOEZBQjA3MUMxODg3NTcyNDkzODBGOTc3Q0MKKzoxMEM4NTAwMDJDODdBQUZDM0M4REJGNjMzNjIyNjJENTRGMDUyREQ2QUUKKzoxMEM4NjAwMDc3NkNGMjEzRjQ1M0EyQkVDQUFEQTNGMkQxNTRERTFFMEMKKzoxMEM4NzAwMDUwMkRCMEEwQjJGNzJDRkUxNzA0NENEMDM5MDA4MDAwMjgKKzoxMEM4ODAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJERDdEOTEKKzoxMEM4OTAwMDBCNzg1NEQ1RDVFODNFNjdDRTNDMzM0OTY2OTI5OTY0MEYKKzoxMEM4QTAwMDI2Q0Y0OTgwMTAyMEMwMDQ0MjA0NDQ5RDg0ODAxMUIxRTkKKzoxMEM4QjAwMDBFMEYxNUQ0RTI4NDY3ODBCQ0EwQTg1OEU5Qzc4NDA0OTEKKzoxMEM4QzAwMDBDMTQzNUZFNDYwNDdFQTAwM0EyODUxNkVDRDBBMjAyMEQKKzoxMEM4RDAwMDA2M0IyMDIyRkVDNTM2NThEQjhCOEZEQTExQjk4ODNDMjcKKzoxMEM4RTAwMEM3NDc5NTNFRDRCQkQ3REE3QjI3NzM0RTEyQzVCNkY3NDAKKzoxMEM4RjAwMEZGRUY3N0QzQ0YxRUY2RDk4RkIzRjY1QTZCQUZCNUY2RUQKKzoxMEM5MDAwMDVBNkJFRjIxNUVFMkZENUE0N0M4RTIzRDhCNkZCNDEwQ0YKKzoxMEM5MTAwMDQyQzZGRkEyMjgzOTVBNDRDODUyNTNEMjEwOTI0Q0M4N0EKKzoxMEM5MjAwMEQ3RjA3NzAzMjE0RENCQzNEN0Y3RDUxM0IyNjlCOUE5OTcKKzoxMEM5MzAwMDlGNDI5RjRENUYwRTlGNDY0QTA4ODkyNTVBN0NEQjI0MDMKKzoxMEM5NDAwMDQyNTYyREI3RjU1M0ZBNzVCNTFGNjhBMzJGOUQ4NDZDMTkKKzoxMEM5NTAwMDU2ODI5Mzg5ODMzRTQzMEE2OUNDMjNFNEQwMTI5OTQwREUKKzoxMEM5NjAwMDc5QjFEQjE0MzJEMjI2OEI1RkZCRkQ0REZEQTFCQzQ4QjMKKzoxMEM5NzAwMEY2MTI0RjU3N0ZFREYzOTlFNUFFN0VGMEZEREY1MDk4NEMKKzoxMEM5ODAwMDYwNUM3RDQwRUE3NzdBMzhGREI3MTI3MEY5MTMwOUU5RTcKKzoxMEM5OTAwMEQzQUE5QzhBOUEwOEZFN0Q0REZGQ0I2QkExRTVDMkFFNUYKKzoxMEM5QTAwMEIyNUVFRkI3RDlBQzg0RTQ5MkI4NzYxNDFFNDU1M0Q2ODQKKzoxMEM5QjAwMDNCREZCNDA3OEE2MDdDMDVDN0Q3QzI5MURENDBFNzFGMjMKKzoxMEM5QzAwMDM3QUVEMTY1NTM5NTU3NDkwRDg1QTQwRjdENTI1ODAxNTcKKzoxMEM5RDAwMDNGNDFBNzFDN0E5QUNFMzM2QkU5ODNBMzRGQTcxMjkyRUIKKzoxMEM5RTAwMDc5RDREMjBDNzgyNUFENEYxMjkyNDY4ODBFQkU0REU3MTEKKzoxMEM5RjAwMEFENDgzRTBGQTE3NDY4Q0UyQkY2NEFGNDc5RUM1OTBCODIKKzoxMENBMDAwMEMzNTNCNjE1RjE2NDkwQkNFOTM3RDNBNzUxRjZEQjYwODgKKzoxMENBMTAwMDdDRkFFNzgzRjExRkNBQjY2QzVEOTMwN0M1ODAwOUYwMDUKKzoxMENBMjAwMDkwQjU4MzBFOTg0MThCQzE5Q0Q1M0U4NUQyODlBMjlCM0YKKzoxMENBMzAwMDhDODZGQTM3NUE3Qzc0NUUzQkE0Q0U3MjI1OTRDMzIxNEYKKzoxMENBNDAwMDAzNkI0RjQ4MDRGRTZGOEYyQ0YxN0FFMjUzNUM4NEVDNDkKKzoxMENBNTAwMDk2MjQ1RTVGNTQ1OTkxNDVEQjJCQjY0MThBOTc5MEI5NzUKKzoxMENBNjAwMEFENDM1QkY0RDc0MUJEMkNGQUZCQzg0ODNBM0ZGODFFRjIKKzoxMENBNzAwMDJGMDM1RTdFN0U4NEQ3MDdBRjZCQTlFODRCQzczNzg4NEMKKzoxMENBODAwMEVGOTMyMEI0REYyM0NCQUMxQzJDNkQ4MUYxNzc5N0YzQUYKKzoxMENBOTAwMEZFNDFDRjZBREYxODg0RTc2NjlEOUQ5MDI1QjZCMjE2RTkKKzoxMENBQTAwMEFCQkIwQkRFOTVGNjFCNUIxQUU5RkMyRTdBQTI0OTc0MzAKKzoxMENBQjAwMDFBQTQ3NkVCRTkzNDQyODc1QTM1MkRFMDA3M0MxMkUyOUUKKzoxMENBQzAwMDI1RkVDMTg0OUM5NTI4NzI0Nzc0RDE0RkJGQjcyQzk4MUUKKzoxMENBRDAwMDQ5NUY1RDNFRkFCN0E0MjJGQUFDRDc0NThGMjY1MEZDRDkKKzoxMENBRTAwMEQ1RUUwQjk4RjRGOTE0Q0Y3QTVGMzAzM0FGQUI1RkVEMkUKKzoxMENBRjAwMERFNDkyNDQwRjlBNkJFQkQxODlGM0RGNDNCQTZDOEZGMDEKKzoxMENCMDAwMDU0M0Y5M0UxMkFCRTc3MzFGMjQ2REQyRTVBNTVBQjBCRTYKKzoxMENCMTAwMEI0NThGQjYwN0JDMkU4REZGM0ZDNDRGRjhCQkJERUI4OUMKKzoxMENCMjAwMDFEQkU3N0M5MTM0RDlCMDA3QzE5QTE3OEU5QTE5RjY4QjAKKzoxMENCMzAwMDVGQjdBRjhDMDBERjVGQjFGODlBNkNGNEZENUQ3NkI2M0QKKzoxMENCNDAwMENFODhEMkUwODVGNjYxNTNBQkNENEJFQkNERkE1NkJGMjQKKzoxMENCNTAwMDk3QjZBN0E0MENDOTIzQkI5RUFCNkM3RDcxM0NFRDdCNDMKKzoxMENCNjAwMEVERkEwOTlCNDhFQTQ0Q0FEN0MxMUFDNUZCMzQ4MTcyNjEKKzoxMENCNzAwMDMwNjEwODJEQUZBRDU1ODYzNzUyOTA1NjE0RkY3MTU4NkQKKzoxMENCODAwMDExOTQ5RkIzMTIyMzJEMzdENTFDNzExNUMxM0FGMjFBOTcKKzoxMENCOTAwMDA4MTUyRjY0RURBOEIwMUJENjcxNzNBRDYxREE3NkUwOEQKKzoxMENCQTAwMERGQzg2MkQ3OUNBMkFFRjE1N0RBRjUwOEY3RUE1N0U4N0EKKzoxMENCQjAwMDNBMUI0QTlGRkFCMDVEODJGRUZEMTQwMkVCRDA2Q0E3Q0YKKzoxMENCQzAwMDc0QTY2NUIzM0I4NTA0RjNBMDlENzUyREFDQzdENUZBNUIKKzoxMENCRDAwMDQwNjUzOUI0NzNDQkU0NjlGQTVENzNCRkE5OTVFNTE0NzgKKzoxMENCRTAwMDBFOTc1Mzk2NzQwODQ3QzVDOUI5QjRCRUM5NjYwMEM5NDMKKzoxMENCRjAwMDQ2REVCMENGREMwNTc4RkFCOUUyNkQ4MDc1Rjg3M0FCMkMKKzoxMENDMDAwMEQ1MTZBNDE1NTQzNkZBNjBERDJBRkQxQzIxMjgxQjc1QTMKKzoxMENDMTAwMEE0MjE0Q0UxQ0IyQzI2RkVCMEI1MEJDRTM3NjA5NDExOEQKKzoxMENDMjAwMEYwMzQyMEJDNkJDREUxNDk2NTc0MUNDQjYyRDkxNkE0RUQKKzoxMENDMzAwMERGNUI1REJCQUU2MzNDRkRDRTdGRDYzRTdGQTI5MUJFODcKKzoxMENDNDAwMDVGOTNBNjEwODBDM0VBNTAyMjg2MjRDQUM3Qjc1MDE4NDMKKzoxMENDNTAwMDI5RENCQjFCRkQzNjkwOUYzMUE3NDJCNkQxN0E0QjVGRDIKKzoxMENDNjAwMDAzRjFDNEM5NDE2QjExMkRDN0M5QTc1NDg3RTIzM0QzNUYKKzoxMENDNzAwMEZFMzE3QkUwNjUxQkZERUVGMEQ3REYzNDQxN0ZENzA4NDYKKzoxMENDODAwMDU5ODY2NTEzNTYxODlEOTM0QUQ0RTNEOEM2QThDNzQ5NTgKKzoxMENDOTAwMEE5NTBENzNCMjZBQUVCRDNBNkFBRUI1RDc3QUJDQjE5NUQKKzoxMENDQTAwMEIzRDVFNTg5ODJERkE4Q0NCMTk2RDI3OUIwMkE2Mjg5NjIKKzoxMENDQjAwMDdFQkM5QzI0MjE3RURFMDJGQzVCMEE2NDJGRTBDNzVDMDQKKzoxMENDQzAwMEJCRkRFQzVDNUE5RjA5RjI4NEMyNEY4NjkwRDBEMzk0OEUKKzoxMENDRDAwMDlFODc3MzdFRTg4OTUyM0MxQjUzMUEzQ0Y2QTJFRUY4RkQKKzoxMENDRTAwMEM4Q0MzNkREMENGNEIyRjY1NTZDODRCNkI3QkVGQkQxQjkKKzoxMENDRjAwMDk3MzBCRTk1QzRCNUNCMDNGQ0Y4NEUwMzdERTFDRjQ1MUMKKzoxMENEMDAwMEUxNDk4NDdGNzgwMERGMEQ3RkZFMTFFOEJEMTMzQTJGRTMKKzoxMENEMTAwMEUwM0JCMzU2QzFFRjNGM0NENTEzRDJFNUIxRTY4NEI2NTQKKzoxMENEMjAwMDRGRTJFRDkzNEM2QjNCNzQ0M0U4RjNEREQ1OEI3NDQ5RDQKKzoxMENEMzAwMERERjE5QTQ2MUEyNDU4OTc5NDNGNTA1RjkwMkE4MkZBNjAKKzoxMENENDAwMEUyMjE5OTU0MDNERkQwRTU0QTYwM0MxQjc0QTA3MkU2RUYKKzoxMENENTAwMEM2MTQwM0YyQ0RERkI5N0VBNTlDMjY0MzdEOUE4RDhENDYKKzoxMENENjAwMDY5NzBDRjM2QzM3QTVFNzk5NEYxRkY0QTAzMUJBNzczQ0IKKzoxMENENzAwMDNDMEY3RTE0NTUxMEM4NDlBMzVEQzZGMUM0MzhFQjZDNTYKKzoxMENEODAwMEJDMEQyRjNCRURBQ0JDRTc0OENBQ0RCMDJFRDc0RDREMDYKKzoxMENEOTAwMDE5MDY3QzYyOTQ0OTAwQzY0QkNFMzJGOTA2RDBGOTk5NDcKKzoxMENEQTAwMDVGMzMwNDI1M0E2OEIyNDI4RUU4NTM2ODdCMEJCOUM3RkIKKzoxMENEQjAwMDRGRTFEODcwQ0MxMkQ0RDFGN0U2MzlGRjYxQTM0ODI2RjEKKzoxMENEQzAwMDg1NzYwNkY3OUUxNURFREY4MzFDODg1NTI5ODg0N0IzRDQKKzoxMENERDAwMEIzRDUzNkFDODhDRDIxNDhFMTRCODE3RjUwRjk1OEQ2ODgKKzoxMENERTAwMEFGQ0QwNkY0MzQ5N0I1QTJGRTM2MTdCN0I2MDI5RTM2MUQKKzoxMENERjAwMDRDOTREMTlFNDg5OTJEMjMzRjlCQjNDMzI3RkFEMkY3NzkKKzoxMENFMDAwMEZBMzlCMjBEQzY0QkExOEFERDQwMDc3OTNDQUJENUVGQUMKKzoxMENFMTAwMDg3NzEyOUNFRTU1MkM2MkEzMDJFQ0U5MDdFMjc5NUUzMjMKKzoxMENFMjAwMEQ1RTFEODdCQkY0NEM3NDk4NUYxODZCMEY2ODAyNzNCNjIKKzoxMENFMzAwMEM3OTNEN0VFNDFCODFEN0NEQ0Q0QkVCNEZEMTAzNjRFOEUKKzoxMENFNDAwMDczNjlENzM4ODI4RTFCMkE0OTA4RTAxM0RGMTVFMzc0MTMKKzoxMENFNTAwMDhFNEY3QzEyQzg1NUZENkYyOERFMjg5REE0MUMxMzAyM0UKKzoxMENFNjAwMEI3NzIwMTA5MTlGMzAwM0ZGRTg2QURCOEFFQUQ2NDFCODEKKzoxMENFNzAwMEFDMTc0NzU2MzlGMDUxQzZCMThEOTNFNTIxRDBDRjgyMUEKKzoxMENFODAwMERGRDFDRjIxMjFFMEUzMEM4NTk4QUU0RjAxRkJDNThGQTgKKzoxMENFOTAwMDc4RDRBRTU3Rjc5MUQ2Mjk3NDhENzREMjQ1QkI3RUREMTgKKzoxMENFQTAwMDBBNjlEMUE1NzQ1RkM3NkU4N0EzQkM2MDQ4MEZFQjU5QjAKKzoxMENFQjAwMEIzNUVEQ0M3NjJGNzAyRDM2QkQ3RjU5Njg0NEJDNTgwQUYKKzoxMENFQzAwMDE3MTJERjVFRjdFRDY1OUQyRTdDNjIzQzEwMkI5REVBMEMKKzoxMENFRDAwMDA5OEFGQTFDQ0RGNzA4RjlDQTA4NjU4OUM4OUVBRkZCMTQKKzoxMENFRTAwMDgwRENCN0YzRjU0MEY1MTU1REFDN0I4NkQ5QzY1QTYxOTkKKzoxMENFRjAwMDlEMkUyMkM4NUZFNTJGQUNCREYzMzc3NEJDQ0ZGQjE5NjQKKzoxMENGMDAwMDZDQTA1N0IyOEZCNTc2ODA3RTI0RkIwMkZEODEwRTlCMEMKKzoxMENGMTAwMDk0QzA0RjEyNjhGREE2OTNFOTA0RTRGNjZBMzM5OTA2QkIKKzoxMENGMjAwMEZDQUQ3MDNFRDdFQTk3OTU3Q0RENzg0MENGQjlGRUY5MkQKKzoxMENGMzAwMEE3QjAwN0MzN0REMzA2RDlFOERBNUJGOUQ4RTE2MzI2NDkKKzoxMENGNDAwMEU3N0ZBMzlENDVGQUEzOUQ5NTc1QTRBM0QxMEFERjZGNDIKKzoxMENGNTAwMDJENkYzMTUxRkM5QTVGNjdFRDlCNjkzOUE4MDBGRTZBMUQKKzoxMENGNjAwMDcyNjExRDFFQ0U5RThCNzg1MkRFMzYxMkUwRDNDMTNBMUUKKzoxMENGNzAwMDVGMDhDQUU0MUQzMzAxRjlCQkUzQjlCQkFCM0QyMDdGQjkKKzoxMENGODAwMEQyMjY3ODQwMEVBREUzRUJCRENEMkVGNTg4MkZDNUUwNUYKKzoxMENGOTAwMDBCODAzREExN0RGRjA4RTAxN0U5RTkzRjVCNDVFOTM4REIKKzoxMENGQTAwMEY4MjkwMzU5NDMyQjBCRTU5OTJENzlCMDJFNTY1M0Y5RTcKKzoxMENGQjAwMDRCNkI2N0VBM0M3NTNGOTZCQUU4RjMwQjczRDk3NjNCNDcKKzoxMENGQzAwMEVDM0I5NjlCNDhDMDQ4RTc3NTQ1MjIwMUJBMzhCMzFEMzMKKzoxMENGRDAwMDZGOTQ4MUZDQzkyMTExMDlGNDZDNEUwMzM1Nzg4MUFGM0YKKzoxMENGRTAwMDk2NTg0ODIwOEVERkIzQUUyOEQ4RkUxNzY2REY3NjNCMTIKKzoxMENGRjAwMDk3RkYyNjJBMDdGNEVDOUZFNEU3Mjk3RTUyRTU2MDMyOEEKKzoxMEQwMDAwMDBBRUMxN0ZEMkVDQkZCMjAzNzg4QTNDMkQ3QjlERkM4QTcKKzoxMEQwMTAwMDA3RkVBNTdBOUY3RTZGMEY5RkJGOUVFMjUwM0Y4Q0ZFNUEKKzoxMEQwMjAwMDY3OTUyM0M2MjFERERCM0ZDRkYxQTM5OEFDMTE5MDk3MjQKKzoxMEQwMzAwMDhBRjVGODQ5OTQyRjM2RTU0MjdDM0I1Mzg4RTkxQjUyMjgKKzoxMEQwNDAwMDQzNDJGRDI0ODYxNzJDRkZDMDg2RTU0QzJBN0Y4REMzMDIKKzoxMEQwNTAwMEQwRUUwRjFBMDFDRTI0QjZGRjIwM0U5RkM3OTEwNkVCRkIKKzoxMEQwNjAwMDg1MjA5MkIzNENBNEM1NDREQjIxQjdEM0Y1RTYyNjFEMzkKKzoxMEQwNzAwMDY2QjQ5QjhGMTAwRkFDMDc4QTMxRkI5OTA0MTQ1OTA0RDYKKzoxMEQwODAwMEYwQkE4OTkwQ0FGODc1MjA5RTA1MzY0NjI3NjVBOTBFMjQKKzoxMEQwOTAwMEY3NEI4MzVFMzYyMzNDRkEwNjEyMzI4MzNEMDRCMDUxQ0YKKzoxMEQwQTAwMDdDMkI0QjQ4NDg4MUZERDY1MjAzQjYyQkIwNzlCMDlGRkMKKzoxMEQwQjAwMDgxMzRBMDNEQkJGQkNCRjczMjQwNEU1QjhFNTI3QjZDODQKKzoxMEQwQzAwMDI4RDA1OTQ2Mzk2NUIxQThENzFGMjE4RDg4QTdEMzlDOTAKKzoxMEQwRDAwMDNGMzYyRkI3MjE5RDNCRjc2NzgxMzczOTlEQTM4REEwNDAKKzoxMEQwRTAwMDJGNzI5NkE0QThFODJCREE2NTVEQzkyNDgxRTFGMUUzRUIKKzoxMEQwRjAwMDg2NzBEQ0FDQkU0NzI0NTIwNEY1Mzk1OEJGNzlCOUU3RDUKKzoxMEQxMDAwMDVCQzZDRkVGNjU3QzM3RjI1MUVGRTM2NzYxRkRFNkM4QTAKKzoxMEQxMTAwMDlCRjZFRjUxNTQ2QzhBMURCMUZCM0Q1REY2QjUxNkNGMDEKKzoxMEQxMjAwMDU5NEJENDcyNzlFODNFNzU1OUUwQzVBQ0Y3MzkyNjUxQjAKKzoxMEQxMzAwMDlDOUJFRjk1QkQ1QkU5NzhENzlDNTRCN0FCQ0NGQjAzQzgKKzoxMEQxNDAwMEVFNkZCQkRBNDcxQzUzQTAzREREN0Y2RkE1NkZBRjNEOEYKKzoxMEQxNTAwMEFCNkVFRjJGN0JDNTBFRUJCOEFCM0Q4M0VGODYyQkVBQjIKKzoxMEQxNjAwMDc2NUFGQTY4RTFBNTcwMzk2RjhCODM2QkFDQzlBOEFBQUYKKzoxMEQxNzAwMDlGNTZENTBEMkVFNzFENzE3MERERTg1MkI3MEYzNEY2QkUKKzoxMEQxODAwMDBDRDdDRDg1QzY2Rjg0NEJCNEJCNzVFNEQ1QjVEM0NFNzMKKzoxMEQxOTAwMDYzNEFBNUIxMTdCQ0IzRjY3NzRDQkJCQTcxRUZBQUZFRDAKKzoxMEQxQTAwMEU2NzZGNzJDRDU3RTI3ODhGQzdFQjNFNEJCMjY4NTNFNDkKKzoxMEQxQjAwMDY3QzIyQkIwMTdBRDE2QjQ3QkI1RkNCMjlERUJBN0VCRTUKKzoxMEQxQzAwMEMxOUVBMzRGN0ZBMkVGN0FFODM3MDZENjFEMkQxQjc2QUUKKzoxMEQxRDAwMEZFRjE0RTkwMkZDNzlFMUQ5ODBFNzIzRDEzRjQxQ0UyNzcKKzoxMEQxRTAwMDkzRjkxNUY2RDRCOEQwQUYzMDk1QUY1M0FBNEY5QTQxMDIKKzoxMEQxRjAwMDVFRUNEOTQxRkIyNTMxQjhFMkVEQTdENDFBQjZBRkIwNDkKKzoxMEQyMDAwMDkxMThBRTY3NjEyRkE1MTA5QkM0RjZFM0NDREVFOUVENjMKKzoxMEQyMTAwMDNCREFGMTFCRUQwQ0VFNTk0QkM3OTIwRkU4M0E3Q0RFN0UKKzoxMEQyMjAwMDYwMkI1MzYwN0ZCNjQ1NDI3QjYwNTY4NTRGOTc0OEY5MjcKKzoxMEQyMzAwMDYzNzQ4Qjg0N0VBMzU5MEZGQzYwMzhDODk1NTFBNzNENTkKKzoxMEQyNDAwMEZCQTJGNEZEQUM5MEREMEI5RkFERUIyMEJFMTBFNUFCNzcKKzoxMEQyNTAwMDc0RERBMkUyMUZEMUU3MTM4N0E5RkRDM0NCOEI4MERGNkEKKzoxMEQyNjAwMEFDM0UwRkVDMzdBQTAwMjIzQUNFMDU3RDQzQjEwREU0NjcKKzoxMEQyNzAwMEU2RjdBRDNFOTA5QjU1NTM3RDZGRTE3Q0ZGNDFBRDEyQ0IKKzoxMEQyODAwMERBNkUwRTlCM0E3OUExNkQ5MkMxNDNFRDhDQUFCQjNEM0IKKzoxMEQyOTAwMDIzQzFFRUE5MEE5QjdERjgzNDExQzU0MkU3NTE0NUVENDMKKzoxMEQyQTAwMDMxNzhBNjFCODg2Mjg2QTc4NTk4RTA1OUJBODJEOTVGMzMKKzoxMEQyQjAwMDQ5MjNGRDg2MkFGQUZEQUFGNjlGRkUwNUZBQ0Q1MzIyRTAKKzoxMEQyQzAwMDg3OTgzRDE5QzI3OTU3QjVCRkY2NTdCMEQ3RTZGOEZDMzUKKzoxMEQyRDAwMDA2OTAxNzgzNzYxODk4NERDQUY5NjE3MDU4NUQwNjc5RTMKKzoxMEQyRTAwMDEwNUYyRThFQThDQkMzOEZBOUNCN0Y0QTYxRjgzRDIwNUIKKzoxMEQyRjAwMDg1MDYwMTdEMEU1MDA1MDdGQkUyRTA2RTIzRUE4QkMzMzUKKzoxMEQzMDAwMDA3OEQ0ODlGODVFNzJENUJDMUZGMzQ3NkExMTVFNUZBQUYKKzoxMEQzMTAwMEY5OUY5OUQxMUY3NTQwMEUzRjBCRTVFMEIzMDlCOEFGRjcKKzoxMEQzMjAwMDNFRjRGNjgxNTI4OTk2MTdGQzIyNTE4NkZBMTdCRkQ0MzMKKzoxMEQzMzAwMDIxOUU2MTNBN0FGQTdFRTFCMzAzQjZBRUExRUYxNzBFRjEKKzoxMEQzNDAwMDBGOTdEQUU4RkJFNzA3MTJEMjAxRjU0QTY4MDhDQ0VGM0QKKzoxMEQzNTAwMEY5QUY3NDM4N0U2Q0E3MzFCNDhERjJDM0Y5RkQzRjdEMEYKKzoxMEQzNjAwMEY2NDFGQUZERjMzQjMzNTMyNDRBOTc2QjQxMUZEMDc2QzUKKzoxMEQzNzAwMEEzOUYzMjU5NjA5RjMxRkFGQ0FFM0UyMDJGMTZFRTMwNEIKKzoxMEQzODAwMEFBRTZCNTM1NDVFMkZCMTk0RjEyRjA1QjZGRkVDNDUzQjgKKzoxMEQzOTAwMEFCN0Y4QUZEMEJDRjlFNDQ3RTNCQTAwRkNBMTY5OEZGNDEKKzoxMEQzQTAwMDZBQzY1RkRBRjYzQjUyRDg3QTEyNzA0MEJGM0M0QTlGOTkKKzoxMEQzQjAwMENCMUY1OUVFMDEzRjVBRkZGNTZBRkMwRTA4QTlDQjYxNUQKKzoxMEQzQzAwMDBFRDc0QzEyRjczRTBGQzZDQjVGRTUwMjNCNzUyQjQxRTMKKzoxMEQzRDAwMDdCQTZGMEVDQkI3N0U2ODExRDZENjRGNjgzMTY4RUZEQUYKKzoxMEQzRTAwMDFDOEU5RkZEOEM4RUMzRTQ4MzhFRDlDRjc0QzY3NDNEOTIKKzoxMEQzRjAwMDJFRTQ3Q0ZDQTJDNEVDNTdGQUI3MjQ5M0YyRUQ0MjUwMjEKKzoxMEQ0MDAwMEZDRjk1REVGMTc2QUUwMTBFM0RGQ0JDNzc3RjA3RDc1QkQKKzoxMEQ0MTAwMEVDNzUxREQyRTNEQ0YyRUFFMUE3RkI3NTg3RTdDQ0YyRkQKKzoxMEQ0MjAwMDg2MDExNUZBQUVGMkRDRjU4QjhFQkE2OUJGOUEzRDRFRDUKKzoxMEQ0MzAwMERDMjc4QUY3MzUzQjVGNEVCQjhCQkVCRkIwNDNGMTgyMjIKKzoxMEQ0NDAwMEU5NUEzM0ZEOTk0NzQ2NDNCQjlEQkEzMEMwMEJGNTNFQzAKKzoxMEQ0NTAwMDNBREYwQkUxNTc5MkEwREREQzRERjY2MUJBMzgzQUNDRTkKKzoxMEQ0NjAwMDVCN0ZFRjgwOEEzODc5Rjg1REQ3ODM1OEJGMzU3QzdGNDIKKzoxMEQ0NzAwMEZCQzJDODhFRjE5OUMwREZFQjI1MkYzNDVCMThCRTZENUYKKzoxMEQ0ODAwMENBMkQ2MEFCNkNEMjc5RkJEMUZBNTI4NUY4NzVDMzcwQTYKKzoxMEQ0OTAwMEVCM0QxNTlFMzU3QjlFM0I5QTQxRUJFQjBGOEUyODg1MkQKKzoxMEQ0QTAwMDc5QUQ5MUZEMzcwRjA2RkVERkEyNDczRjk2MTYyRjlGRkQKKzoxMEQ0QjAwMDcwN0FEM0ZFMTE5OUY2NUY3M0JCQjUzQTY0QzU3MThGNkMKKzoxMEQ0QzAwMDQwRjk3MEUxMzYxREY4RDk5M0NFNTJGOUM0REU5Rjk0MkQKKzoxMEQ0RDAwMEU5OUEzQ0RCQkU3MjA4RjgxMzBGRThBRDJEQzBFNzA3RjAKKzoxMEQ0RTAwMDEyMTkxRDgyQkI3NTI4RTc0OTg0Q0Q2MzM0RjcxQjJGQzEKKzoxMEQ0RjAwMEZDNTM5QjQxQTFDRkIzNjc1NzI0OTVCMTc1ODRGMjA1QzYKKzoxMEQ1MDAwMDg0QjI4M0NFQUZGQUE5QzFCOEVFRTZBRDU3QUYxM0QxNUUKKzoxMEQ1MTAwMDRFQzAzQjNGQTRBRUQ3RjI0NzRBQUE1ODU3QTQzMDlFMEMKKzoxMEQ1MjAwMENGQjRFRDUyMjcwNjBEQjBBRTZBOTY1Mjc5MUM2N0ZGNTQKKzoxMEQ1MzAwMEQ0OUM2RTM1ODBEREE0RkQwRTU4ODA0NEQwNTU4N0ZDMDgKKzoxMEQ1NDAwMDQ5M0MzODVGMzM5QjJGMzU1OTRENzRCRUU3RTA1RkNDQzMKKzoxMEQ1NTAwMEVGMkRDMUJFN0M4MTg0NTMyNDBCMDc5MjBBMEZDNUU3Q0YKKzoxMEQ1NjAwMEMyQzlBNDEyOUUwN0E0QzgyMzNBMkVDRkQwRkZCRTNCNDcKKzoxMEQ1NzAwMDAxRTVEOTA1NUJGNDk5RkYwNEZFREI5NUVEMEREMkFBMTgKKzoxMEQ1ODAwMDBDRUU5N0JCRTA4OTI0QTVEMEU3NjU1ODE3QzA3RjM2MUQKKzoxMEQ1OTAwMDU2NUVEMDRFRTUzOTVEREZFNzJGMUE1MEFFMzc4NjVGMTUKKzoxMEQ1QTAwMDRFMDI3QTVENzhENjJDQ0I5NDJFRTdGN0E0OTY4MzNGNzMKKzoxMEQ1QjAwMEU3NDJGODM3NDkzMEFGNzNFMUQ0NzJGMENCRjUyNjZGMEMKKzoxMEQ1QzAwMEI0NzI0QUU4RjNGN0UxOUZBM0E4OUQ5NkVBMUI5NjBBNzYKKzoxMEQ1RDAwMEZCOURFNjU0MzBDNjQ5N0E2QTQzNzE0MzBGRUI1RkY0MTIKKzoxMEQ1RTAwMDczMTgxQThBM0QyMDM3QkU2RkY1QzJGQUJDMjFENUMzMjUKKzoxMEQ1RjAwMEY0ODZDNEM2ODMzRjFGQURGRkU0NThFQTM2QTBGRkIxRUUKKzoxMEQ2MDAwMDQzMDVDOUEwRTczRjIxOUU2NDkwQkZCNzM5RkRFNUE5NTYKKzoxMEQ2MTAwMEI0QkRBQkJDQzNBNzAzRkZERjA0RTI2REEyN0QzRUQwNjcKKzoxMEQ2MjAwMDc5RUZCMzUxM0NDRjI2NTRFRkMwQjMyNDYwNDA3RjQ5MUIKKzoxMEQ2MzAwMEIzMTNFMTlBQTU5MDg4NDJGOTc0MTZFOEM1MjE1ODQ2QkIKKzoxMEQ2NDAwMDNDQ0ZEQTI0ODU5QTI4MUNCM0Q3QUFFNzM5QjdDREQ4QkUKKzoxMEQ2NTAwMDQ1NUZGQURGN0M0MjA1MjMyQ0EwNEQ3MUVERThGOEYzMUQKKzoxMEQ2NjAwMDQxRkY1MUZDMkQzMDkxNDgwMjFENzdDMTc2NzVCRjg1NzEKKzoxMEQ2NzAwMDI0ODJGMEQ0RUNGQURBRDgxMzFFRkZDMkYxNzg5QkQzREYKKzoxMEQ2ODAwMDc3NTdBQTRBN0VFOTUxN0UyRDI0RkVFQkUxQkIwQkI5MDgKKzoxMEQ2OTAwMDlFOUQ2MzNDODQ3MEQ0M0ZGMEMwODBEOUQ0NkVCOEJDRUEKKzoxMEQ2QTAwMEY0QzEwMUIzNTNDMTBGQzhGQTkxRjUxMkYyREZDMjBBRjcKKzoxMEQ2QjAwMDEyQzlBNjcwMkQ2Qzk3MjI4M0MxMEU3ODkzRDE0NzhDMjYKKzoxMEQ2QzAwMDRGQjZCMDc2Nzc3MjNCNjUwRUM1MDdFOEZERDFCQkE0QjcKKzoxMEQ2RDAwMDYwMjJEREM3Q0MzMUQxMkQxOEM4MEYzRTJGQTg0RkE2MzAKKzoxMEQ2RTAwMEU1NkFEMjhBRjNBOTI1NTE4NEUzN0U0RTNGODg0ODAxM0EKKzoxMEQ2RjAwMDNFRkZGMjI2QTNEQkU4RUFBRDNBMDBFQUQ4QTE1MjhDNUQKKzoxMEQ3MDAwMENCN0Q0QUJDNDgzRjZBNEYxMDczNEE3N0ZFMDA3Q0ZCRDIKKzoxMEQ3MTAwMEUyRjA1M0JENDk1RDI2REJFM0NBRjk4MDRGNUE4RUMzNjAKKzoxMEQ3MjAwMDczRERERUFGOERCRTFFRjBGQjQ0QTczRTA5MEQ5ODM0QkQKKzoxMEQ3MzAwMDk4NzRCMzU3REZFM0Y4N0ZFMkI2Qjk2RTU4RkY4RjgyNzMKKzoxMEQ3NDAwMEZEOTZDMTA3MTgwOUYyOTIwODdGNDRDNDQ0QzdCNzBDN0MKKzoxMEQ3NTAwMDI3MkFGRjA0QjU4QkIwRENGNkY4NkIzN0FEQ0YyMjY0MTcKKzoxMEQ3NjAwMDlEM0U4MDdFRkU1OTNBRkY1MTA4NDk3REU2MENBQzA3OEMKKzoxMEQ3NzAwMEJBQ0U5MjdEMzkwQUNBMDE1RjAxRUU1Mzk3MzI3QTNDRTQKKzoxMEQ3ODAwMDM5QUM2MTQwNDMwRkZCNTMwMUZGM0EyOTFDOTE0MTFFMDQKKzoxMEQ3OTAwMEVDNjdGQTNEQjEyNEE2MEZDNEFEQUY1RjcyRjk5NjdDNzkKKzoxMEQ3QTAwMDM4N0EzNDEzRjhFNjM5MDlGREU5MUIyNEQyMkM1MTNDQjAKKzoxMEQ3QjAwMEJCMjg1OTQwMEY2QzkwREUzRjBBN0E2M0MzNEQxRUQyREUKKzoxMEQ3QzAwMDQ0RUI0QkY2NEU1QUY0MEFFRTcxMkQ1RTg4NEZENEVFQzAKKzoxMEQ3RDAwMDJERDNENTVBNzFGRUNDQ0U0QzY4RDgyQUQzRkFGNDdCMUYKKzoxMEQ3RTAwMDBBODdDMUZBQTBGM0JFNjczMjdERkYwMkE3QjdEQkNBODIKKzoxMEQ3RjAwMEY4QzFCNTIyOThCNzE4RkNBOTg3RkQ4QjVFODE3NTNERUQKKzoxMEQ4MDAwMEQ4ODI3RUFCNzQ4QUFCQzQxNDdDQjY4MEZERTgyMjhEQ0UKKzoxMEQ4MTAwMDEyQjQ1QkU1OTQ5MDFFQUJBQUM4QjQ1RjE2MjFENzI4NUEKKzoxMEQ4MjAwMEM5MjlFQzc5OTIzRTI1ODUzNDgzMUYzNjVEQTFGNjI4RkYKKzoxMEQ4MzAwMDdCREYwQ0RGNzkyMjg5QzFFNTk0NzVGNzRDMDI3Qjc4OTgKKzoxMEQ4NDAwMDE4MkJBNzJDOTM3Q0RCOTBGOTFGNDM3Q0E1MUI0OTI1NDMKKzoxMEQ4NTAwMENDMUJERTgzRkQ0Q0MxRjBFREMxRkExMEMyOUQzRUI2N0IKKzoxMEQ4NjAwMEExMThFMDQ4RUZDMzlFMEU0MzI0MEJDNjM5MkVGOEE0M0UKKzoxMEQ4NzAwMEREMkQ4MzlDNUVDMkY1RUQ5MjNENjVFOTI5QjRGRkYxOTMKKzoxMEQ4ODAwMDBCMjYwNUU0RTc3MTk3QjBGRjIyNTZCMEZGNDhERjQyNTAKKzoxMEQ4OTAwMEQ2OUVFQkI1MjVDNTYzRDM4MUVGMUQzOUVBNzY5N0Y1QTIKKzoxMEQ4QTAwMEJFRTRFMUEwMUY0RUU4MzA0RUYzOTlENTk3NkNBN0VEOEEKKzoxMEQ4QjAwMEFFMzVCMDc5NjhFOTdGOTZEM0I1RkU4QTQ0NDI3MUZCRjQKKzoxMEQ4QzAwMEZERkE2OTlGQTM1RDVEN0Y0NTUxQkRCRkIwREM0NDQyNTkKKzoxMEQ4RDAwMDcxRkJGRDlBRUFDM0UzQTE1RDJERTk1ODA1RkM1ODFCRDUKKzoxMEQ4RTAwMDRFMjBBMUI4RjU3MUFEQTVFN0VGOEE3NTUxN0Y0NTQ3ODgKKzoxMEQ4RjAwMDgyQzM5MUVEQjNDMDJGNzk1QzFGNUIzNTA3RjhGMEEwQjAKKzoxMEQ5MDAwMDg0RkVBMzdBQkE4RjBFQzZDMzc1MjU5NTA0NTM3QjgyMTUKKzoxMEQ5MTAwMDMzNERGRDlFQ0U0NzU1REVGNzA1QjYyMzIzQTM0OUYwRDAKKzoxMEQ5MjAwMDlENEJCNjY4OTI5RENGMEZEQTA5N0Q3NzM5MjQwN0Y1QjQKKzoxMEQ5MzAwMDQzMzEyRUM4RjQxRUY4NzVBQ0NDQUU5RDA0RjQ1NTYyOEMKKzoxMEQ5NDAwMDQ5OTMxM0JCQzYxNUY1MzA1RTRBREMzQzJGNEQzMzkwMkUKKzoxMEQ5NTAwMDA4RDIyNTg2REYwNUJDMDVGQjEzQjJCMUZENjM4MzA3NDIKKzoxMEQ5NjAwMEY0N0ZGQjIxQzQ5QkUwOTc3OEZDMDVFM0UzNDQ0RDFENjUKKzoxMEQ5NzAwMDExOTlDQThBN0M4NzZENEREMTAwQ0E3QTg3ODU1QzQ4MjcKKzoxMEQ5ODAwMDU5MDM3RUM5MzQ5REFDOTIxMzA5MjU5RDcyMDNDNUQ0RjkKKzoxMEQ5OTAwMDEzMTBCNTQyMzk5M0JBQTY2MjRDN0M5OUI1RUZFQUVGMDEKKzoxMEQ5QTAwMDk4MDA3RUNGOTIyMkQ2QkZDOEUxRkNBRjE1N0RFMTdEMDUKKzoxMEQ5QjAwMDJCOTNCQjRBMkNDNzlGMTg1NzM2NjlDQTU2NUExRTFDNTAKKzoxMEQ5QzAwMDU3QjY2OUVBMUQ5QTdBOTdBNjlDQzVEQTVGNDg4Q0U0MzcKKzoxMEQ5RDAwMEU4QkM1NERGM0JEQzEzMTQyQTJGMkZCODIzMzNFODBFQTYKKzoxMEQ5RTAwMDk2QUM2RENBOUM1MDQxRTU1ODZEMDlEM0M3NzVFRDkyNTAKKzoxMEQ5RjAwMDE3N0Q3NTFDN0Y3NTVFNjYyNzVBQkQ1MUMzQUMyMkMwNkEKKzoxMERBMDAwMDQzQzc1MTkwMkIzNUZCMjQ5QjQ0RDc4MTM1QkMyNzgyREIKKzoxMERBMTAwMDY1RThFNzg5RUIxNzk2QjA1RjRERjg3REVDRDdFQkY4M0EKKzoxMERBMjAwMDg1MzJBRUYzMzU4NUE3NThCQkYwODdBOEY3NTczNTU3MzEKKzoxMERBMzAwMDYxM0M1REM0OEI3NUM0RUZDQjk0QkFFMkM1NDJCRTVFNTcKKzoxMERBNDAwMDcyRkI1RTk2MTk1RkRCRTJGNzRGRjUzMDZFOUM5RjQ2RTYKKzoxMERBNTAwMEI0N0Y2NzcwRkIxRkMwQUM0ODU4RjI3MTIzRDhBRjdGMEEKKzoxMERBNjAwMEFBRkQ3MDA0RDg3M0VGNDA5MzUxMjBBRjQzMDNFMEJCOEQKKzoxMERBNzAwMDFCNDk2MDAwRThDOUVGRDdGNjNCMjREMzc2RUZFOUEzNTIKKzoxMERBODAwMDlCMjEyNjc2OUZBMzE4RjFGNzVFNjIzNDVCQTIzMjY2NzMKKzoxMERBOTAwMDY5REJCNUFDRUM4QzZFMDY3Q0ZFQjY2RDBDMkI2NzQ3NzMKKzoxMERBQTAwMEIzNjU1QTVFRTY5OEM3Q0FGREEyOUJBMUJDQkQ2REYyRTQKKzoxMERBQjAwMDA0ODVFMkZCQkRDMUQxNkMxREVEOUYxRjlDMzJBMTgyOEMKKzoxMERBQzAwMEQ2M0Y2REVCNzkzREQ3M0E5ODFDMTFGMEZENTdCRUFGQUMKKzoxMERBRDAwMERBMDFGM0E5NjFGQTY3MzNCNTM3NEQ1NDVFQ0U1ODcwNTkKKzoxMERBRTAwMDZFRjdEMzE0MEYzMzdFOTg4MDcyRUNFOTBCNTMyNjMwMTcKKzoxMERBRjAwMDdCM0NFODU3NEFDMURGQ0FGRTUwM0ZBMjlDNTdEMDNFNEMKKzoxMERCMDAwMDcxODM0RTRDRTlBMjQ3NjI0RTg3MDdGNUM3QzA4NjNEMzgKKzoxMERCMTAwMDYwNjdBNENGMjg0MkZERTE0REY1RkQwRUJFMkI5RUY3QjgKKzoxMERCMjAwMDY3QjBFN0VGMUMzNjI2Qjc3NTMyQzY5RkQzMUY0QzQ0NEIKKzoxMERCMzAwMDdCRUM1MTMzOUIwRjVEMzc0ODVGMkJBN0M3MEEwN0YzNzgKKzoxMERCNDAwMDRCQUY3MDMwM0ZFQUY0RDQ3MTM4Q0VEQjkyNkY4Mzg5RUIKKzoxMERCNTAwMEUyRkQ2RDNEMDk5QTQxQ0VDRUI3QTBGRDdDRDc1NjJBOTUKKzoxMERCNjAwMDM3OTJDMThGQ0ZFMDZFN0JDQzFEODJGOEY5NUQxMkYxNDgKKzoxMERCNzAwMDgzNUMxMUYyQTNDREVFNzNBN0M0RUQ0M0RBOEE2OUQ5QjEKKzoxMERCODAwMERBQjVFRjZDOUJFNDczNUIxQ0YwNEM5MzIxQ0UyMkU0N0UKKzoxMERCOTAwMDUyNUIxRUVCMjdGNDUxN0ExM0ZCNEVGQUEzMDNCNkMxNzYKKzoxMERCQTAwMDNDMTIxNEU2MkY5QTMzQUQ2MDVCMjNEQTAzOTM3RkU3RDAKKzoxMERCQjAwMDAwN0JEOUU3NzM4M0RGRTFGNEZDN0MxOUZDNDg4MjNFRUIKKzoxMERCQzAwMEU3RjM3RDlCQTBGRTRFRUU4NzE3NzQxMkY0RkMxRDlGQjkKKzoxMERCRDAwMEY3MkMxREI1MjdFODdDOEYzQjAzMzgxRUI1MkY4NjcwQzgKKzoxMERCRTAwMDdGMTVEQTE3QkYwM0REMUU4NzVGQTI0NDQ3QzBGQkZGMjYKKzoxMERCRjAwMDhGRjA3NDA4RThGRUFGRTJBOTc2Mjk5NTE3RjI1NUM4QjAKKzoxMERDMDAwMDBCOEVCRjc1NTI0NDlGQ0VFNDA1RUU5RkUxM0RFODlEMkIKKzoxMERDMTAwMENEQTk4MTNGQzBGOEUyRkIzMzFFQUM0NTdCNTJDMDk1RDUKKzoxMERDMjAwMDcwRkYwQjk1Nzc5MEVFRUI0QzZCRUZGRDE5RTgxNTY3RTUKKzoxMERDMzAwMDk3N0E4NURGOTE3RkU3QkRCNzREMTg2Nzc4Q0YxMDQ2OUIKKzoxMERDNDAwMEI5RjkxRURERkYzNDgyN0NFMTcxRjJEMjFGMkUzQzBFNDkKKzoxMERDNTAwMEZCM0YzMUVFMzhBNzBFQzc1QjJERjlEQzMwQkZENTk0MDIKKzoxMERDNjAwMEVFMjY4MDdGOTIwMUVEN0ZBMTU3REJFQ0ExMEQ5MEE3RkUKKzoxMERDNzAwMEQwNzY1QjE2RTYyOTVDMjYyQzFGMjRCODM0MDFEQjVEQzgKKzoxMERDODAwMDJCOUYyMkUwQzc4QzhEQjI2MTlDOUFGMjA5RDZCNzREQ0EKKzoxMERDOTAwMDJGQzA3QzExQ0EwRjQxMzNENDUzN0U4MkJDQkFCNjYyMDYKKzoxMERDQTAwMDNBMjExODZGRkE0MEFDODdGRDMxRUU2QkE3OUI3MEJDMzAKKzoxMERDQjAwMDFFRjg4NEY5ODVGQkIzN0M4OEI2M0NDRTg3RjNGMzkxREMKKzoxMERDQzAwMDBGRDM5QTk4RkY5MTI4QkUyMTkzRTJGNDdDOUU5M0Y5OUEKKzoxMERDRDAwMDdEMTI0QUEyQ0ZGRDJGRTBGOUI1NjZCNDY3NDFDNzYyNTUKKzoxMERDRTAwMDBDQTczNTFEQzdBM0Y0QjczODk5MUYwMEY5NkNGNjIzQUMKKzoxMERDRjAwMDg5M0NGRkNDNUIwQTc4N0QyODkxRjFFNTI2MzM4QjJGOTgKKzoxMEREMDAwMDZEQTJGNjMzQ0E0NUNFQkYyMkVGMkRDMEVEQkM2OEI1N0IKKzoxMEREMTAwMDlDMDRGNjgyQ0JEOUU5NUZGMEMxN0UxRkZEREJCNDdFQTcKKzoxMEREMjAwMDY2NTQ3QTFGRjY2QjMzODNCQTg4MTFGNjVGMkRFMzdDNTUKKzoxMEREMzAwMEQxQjhGRDBCRkM0MTdDRUUxRTJFNTdDOTdBODI3RUJGMDYKKzoxMERENDAwMDdCQTA1RjEyOEM2RjQ5ODI3OEU0M0REMDFGRkNBQkNCODcKKzoxMERENTAwMEM2QTlFMjZFMDM5RDZDN0QwQkY4QjQ3MjdGQTA5M0M5RDcKKzoxMERENjAwMDQ5MEFCNzJGRkUzQjYyN0NFRDc4NzRGRjM5QzhFOTQ0NUQKKzoxMERENzAwMDNDNDc5MjYxMUZEMUE4NDMzQTZBRTE4Q0FFNjc3RUVBQzQKKzoxMEREODAwMEU4RkE1Q0U0M0IzMTVFNkY3MEZFNTkxN0JCNTdBMjdBMkMKKzoxMEREOTAwMDcwRUU1OEI2MkYxN0ZCOUUzOTdDREY0Qzk2QTlGNzc1QUQKKzoxMEREQTAwMEUwNTdFOTJDRUJCQTk3QjVGQjQ0ODhBN0FCREIzM0JCNTQKKzoxMEREQjAwMDI1QTEyODY2QzAzODhCNDc1MkMxMkZGMEQ1MUIxRTI2REYKKzoxMEREQzAwMDdENDdCQzA5QkRGN0E0OTlDQUQzMTREODdFNEJDOEI3MDgKKzoxMERERDAwMEVCMUY0ODQwM0RFNjMwODQwNjAwNUZEREVERjQ2MEJCOUMKKzoxMERERTAwMDhEOTBENzgyN0E5NUVEOTczRjNEMkVGQzFDRUE3RDcyOEYKKzoxMERERjAwMEJEMjVCNjA1RjA1NTZGNjFFQkU4RDJDMTQ0NUMwN0E0QzAKKzoxMERFMDAwMDZGNzQwNkU0ODU1RDNFNjAyNEMwQkY3NTUyQjQwMEQ2RDEKKzoxMERFMTAwMEY1MjVDOTU3ODVFRDFBMTMzQ0IwOUUzRTkwM0IxMERGQTcKKzoxMERFMjAwMEY1ODA0MTBBNTc3REYwRUY5ODhGNTRCRjRGQkQ2RkJFMEMKKzoxMERFMzAwMDQ0RkZBQkE2RkM3RTQ5OEU5NkMyMzg0MjFFQzBGQTQ3MEMKKzoxMERFNDAwMEJCQTg5QUM1NjlFQTY0MTI4NDdERDVCNUYyQ0NGOUE4NUQKKzoxMERFNTAwMEZGQTc2NzkwNkRGOEZFRkQwMkQ4NDcwOTM5NEZEQjFEMUIKKzoxMERFNjAwMDkxNTIxOERCQzA3QUE5RTFGOEFCOTM0RjYxQkIxQUM4OTUKKzoxMERFNzAwMDJCMDIzQ0MyRkUwQUZDNjE1MDE5RTdDN0FENUI3QjFFNUEKKzoxMERFODAwMEYzOUFFQUY2QUFFOTVDRDNDNTA3RDJENzEyRjQ4QkUzN0EKKzoxMERFOTAwMDBCNUNDNzQxQTQxQkRBRDlCMEVFMkI1ODlDMzk5MTk3ODMKKzoxMERFQTAwMDEzMkEzQjMwQ0ZBOTlFRkIzQjlDODdBM0UzNDE5RTI0RDIKKzoxMERFQjAwMDk2ODRDOTRDRkFBQzNGQ0JFQzhDRDFFRDVCNUY4NjdEOTAKKzoxMERFQzAwMEI0QkRCMjIzMUJEOEJGOUVGQjAzMDU5RDA1OUNBM0RBRkUKKzoxMERFRDAwMDFGNDNGRjg2QjA0RkUyRjY5OTAzMjZBQkZDMEMyQkIwMzQKKzoxMERFRTAwMDFGRUM1QkUxN0I1MTc4RTUwNkYyMzNCREI2OEVFQkI1RjYKKzoxMERFRjAwMDA0RDgwMDgzRkU2QkVEOEZGQTBGRjQxM0M4MjVCMUVGNDEKKzoxMERGMDAwMDA1MzkwNUYyRTEzMzY3Rjk0RjQxOEVBRDREMkJERkM2ODAKKzoxMERGMTAwMEU0MTlFNTJGQjBFNzYxQjMzNEFBNzczRjlFQzA4RjY4NUMKKzoxMERGMjAwMDA3RkJERjZGRjJEM0ZEOTJGM0FCQzNDMEU1MkU2MTdFM0EKKzoxMERGMzAwMEI5QzVBRjM5ODU1RjBFRTM2RjhCMjU0RjNBRjBFQjE5MEEKKzoxMERGNDAwMDVEMDBGRDZGRjM0ODEwRkQ0MkYzQzFFRjQ1OUYzNTdDNDYKKzoxMERGNTAwMDlEQ0ZFNUZFQTRCOURDOEYwNDdFRERGODM4MjFGODU3QUIKKzoxMERGNjAwMEUzQ0IwQjA4RTM1RkIyQzNEODk1M0YwMzdFOUYwQTEyNTEKKzoxMERGNzAwMDQ5QTRFM0Q1ODI1RjBBOUU2MTc1QkYzQTEyNjM3Q0JGRjQKKzoxMERGODAwMEVGNkJBMzJBMEVEOUM2RTY3RDBGQTdCRkJEMjJBNDAzNUYKKzoxMERGOTAwMEY5QjBDMUNDRkM1MTQyNkU4QzVFQzZGQzU2QzlDMzdDNDQKKzoxMERGQTAwMDc5MkI4MUNGNUZEM0EzM0ZFMzdGNzNCQTA5M0NEREU2RDIKKzoxMERGQjAwMDJDREYwNUY4QjdDMDNFMEREQUFEMzRBMkJDM0M0REY1MDAKKzoxMERGQzAwMEYwMUVFRTQ3OTkwQ0ZCQ0ZFNTgxMDE5MEZGNEQxNDVCRUQKKzoxMERGRDAwMDRFRkNGRTU0M0NENzFDMzA1NzAzRkZGQzg5RUIzMUYxNUIKKzoxMERGRTAwMEZFMzFBNzlFRjlFMTU3MzBGRThEMzUyNkEwQkQ0REM1MDcKKzoxMERGRjAwMEM2MTBFMEFGRDI3Q0ExMEZDOTEwRjA2QkJEQUY2NzdFMzkKKzoxMEUwMDAwMEUwQkFEQkFEMDExODJGMkEzMzM5NzM4RUNCQjM3MzRFRDAKKzoxMEUwMTAwMDk2N0YyN0NBOURGQjNCQ0UzRjIyQkUwNzdFOUU3OEZGQTAKKzoxMEUwMjAwMEZBQzc5REVEMUZFMzc2MjRDMUY5QUU5QkNGRjNCNzNCNTIKKzoxMEUwMzAwMEY5NTg0Njc5OTQ1MEU0NDdCOTdCQUQ1QzhFRjIyOEY2RTYKKzoxMEUwNDAwMDkxRDUwMzc4QTkzQzVGMzMxRkU2RjFDOTM0MEI4MTM4QzEKKzoxMEUwNTAwMERCNkNFRUVGOTVEMkVDMDg4N0YwRUY3RTVCRkNBQjcyRTkKKzoxMEUwNjAwMENEMDA5NDkzQTIzREM0NzJBMUJGRDY0RjdDODBDQkIxQUEKKzoxMEUwNzAwMDAzODRDMTFCNkMzNjMyQkYzQzg3RkZDMEQ5ODEyMUUwQ0QKKzoxMEUwODAwMDYzNkFENzA2NDFDRUM1RjY5ODk5QkVBMzc2MjhDOEQ3NEQKKzoxMEUwOTAwMDAzN0JGQjg3NjAzRUVGRUI5OUJEMTBBNEYyOTdGNTBGNzEKKzoxMEUwQTAwMDZDMDAzRkM4ODE1RjNBQkQ5MEQ3NTNCRkUwREMxMEIwMzEKKzoxMEUwQjAwMDFGMEY5Q0ZERDlBRjdFMEJFRjBGMUFCREIwREYzQkMwMjkKKzoxMEUwQzAwMEZERjIzNTg2NDgwMURBQ0IzQzlGQjEyNjI5NTIwMDdFMEQKKzoxMEUwRDAwMDlGMTczOUJENkEyQ0I0NENERjU3OTgwMkQ5NjkyM0JBMEYKKzoxMEUwRTAwMEUyNjdEMDBGREU5RjBBMzFCQkZDMTQ2MTdDMTA1Q0NCNzEKKzoxMEUwRjAwMEUyOUMxNEJGNkU4MDIzQjYzQTFERTM2RjMwMkZBMEMzOUQKKzoxMEUxMDAwMDA3MDcwNzIzRENFQkY0QkNGREMzQ0M3RTNCQzVDQkE3RTQKKzoxMEUxMTAwMEY2MTc2MzdFREY2NUJGMDFGMzcxRUIxRjY1RjZFMjJDMzYKKzoxMEUxMjAwMEQ5QjM2NTI5QzhDQTk3MTJEMENGMzhBN0VEMDRDNjQzMjIKKzoxMEUxMzAwMEVBMUY5OTM3MTFFQUVCMTcyQ0ZCMUVGOTg2MzgwMUU4MjQKKzoxMEUxNDAwMDk1NzhGRkY2MjUxMkNCQzE3RDcwNzU3RTM4NDJCRjdCNzYKKzoxMEUxNTAwMEE5N0Q4MDk3ODVGQjVDMTg1Q0FBRTM3OTlGQTcyOTdFM0YKKzoxMEUxNjAwMDAxRUVEODQxM0RFMkZGNkFDNzQ3ODc2MTI5RDM2RkU4RDYKKzoxMEUxNzAwMDBGOEY4RkM3QTAzRTUwQzc2N0JFQUQ3QzQ5MUYyRDc4NUIKKzoxMEUxODAwMDgwN0UzRjk4MTJCODM1Q0RDOUM0MUREMEJERkUyNTM3NUQKKzoxMEUxOTAwMENBQkIwRjFFRkUyMjA3RUQ4OTU2MTY0RjM4QURGN0NEQ0MKKzoxMEUxQTAwMDgwNzU2MkFGODgxODY2QzZEOTVGRjNEMkY4QkVDM0M4NUYKKzoxMEUxQjAwMEVENDYyQTA3RTNEN0JEQTgyRjJENTdBRjMzRjE5QzlCMUYKKzoxMEUxQzAwMEM2RUNDOTQ0MUVGRkVGNUUyRkYyNUVBNzE4NDE3RjMyRjYKKzoxMEUxRDAwMDk3MTI4Q0VCQzE3MTczNzk1QzZFRjREOUQ4MjFDOEEzMDYKKzoxMEUxRTAwMEFBMDkxNzYzREMyRjc3NTkwNEQ3MjVDNTc3MDRFQ0ZGRkMKKzoxMEUxRjAwMEQzMUIxMjk5M0NBMUQzODQ3MUU2OEUyNDY4QjdDRUQ1ODcKKzoxMEUyMDAwMEIxN0M4NkI5NDY2QTA3MzMzRDhFRURDRjZDNDg0NzNDRkEKKzoxMEUyMTAwMDk0QUU2MEY2NUZFQzM5MDlFNUEyODg0RjU2MTFENkZGM0YKKzoxMEUyMjAwMDg1RTZGNzgzM0FEQUJFNkE4NzU0NEM0NTJCQTk2QTJFRjUKKzoxMEUyMzAwMEMzN0M4NzA1OUJGMjkwRkVBM0I5RkM5RDY1RjQxNTZDMjkKKzoxMEUyNDAwMDAwN0U3QjIxMTFGOThEN0UwRkVERUQxQUM4RTkxQTg2NEIKKzoxMEUyNTAwMDcyQzkwMEZBQjA3QTg3NDRENjkwRjg3OEFBODYwRjQyM0QKKzoxMEUyNjAwMEVBNzhDQ0U4MzA5M0RGQTAzNzQ4OUM5RDI2RjQxMEU4OEMKKzoxMEUyNzAwMDBCQTJCMTFGRDU3QzExRTQ3MTJBNDY5RkM3MDFBRjIzQzEKKzoxMEUyODAwMEJBRTQzRjYyRUMxQkY0MjBCNUEzREI2MDFEOTc5NkIzQTQKKzoxMEUyOTAwMEY1MTZEQjIzMjE5RTZCNDkwMzhCMUY3MTNERDQwOTBGQkIKKzoxMEUyQTAwMEQ3NjM2Nzc0NEM2RkNFMzUzRTg2Q0Y5RDY5NzkwOEM3QkEKKzoxMEUyQjAwMDAyODhCMzYwREMyMDY2MDBCOUQ4MUI1RkVDRUM4NTJGQzgKKzoxMEUyQzAwMDA0M0ZGQzhDQ0ZBM0U2MkM4OTVDNDdCRjU3QjM4QzQ0M0EKKzoxMEUyRDAwMDZBODdCMDY3RTIxMEQ0Q0I0QzNGOUI5ODdFODZBN0U1NTcKKzoxMEUyRTAwMDJBRjRCNDU2M0Y2QkY1QjE1NjBGQTcxQjk4QkUxNTdDQTgKKzoxMEUyRjAwMDEwRUY5NzA3N0I2NEY0QjI5MDhFRjk1RkIzNkM5MEM3MTAKKzoxMEUzMDAwMDI3RTgzMjNERDU3NzMwQzNEOTY1NkZENTlGMzQ5OTNDMjYKKzoxMEUzMTAwMDQzQTFFQzI3Rjk1NkYwMkI5NTU1NjY4MURGOUFDQTZGMTkKKzoxMEUzMjAwMDU4NzcwOTE0NEY1QkU5RkJDRERDMkUxRjkxQzVFNkVGNTIKKzoxMEUzMzAwMEUyRjkzQTdBQzU0RjhBQUQ0MEE3MEVEQzQ3Qzc5QzA0ODQKKzoxMEUzNDAwMEY3QjUwMkJGOUIxMzY5QkY2MUQwOEZBREM3Q0VGRTI2NjQKKzoxMEUzNTAwMEQyNkM4OUVCNUY3RUMwOENGQUU0RjNGRDg5OTg1RjQyNTIKKzoxMEUzNjAwMEY1NDNBRTlEOEU5N0Y2MEVCNUNGNjlGOUQyODE0NEQ0QjAKKzoxMEUzNzAwMEVGOTdCOEJDNzcwODdGMDU1OTg1RjRGRDEzQTc3MzkwMTQKKzoxMEUzODAwMDk0Njc4MkRGOTc0ODEzMzI0MTQ0MEFCQkIxRDZERTlCQzMKKzoxMEUzOTAwMDlGOUVEN0U3NzVEQ0NFRjhDQzg4N0FGNjczN0JGNDNFODcKKzoxMEUzQTAwMDI4NTM3ODMwMUZGODBGNUMyRUQ0RUYxRDVCRkMyMEU0NUYKKzoxMEUzQjAwMDAxRjhBRDVFODZENTQwMzFEODBENDZERDkyREJDMTFGMzgKKzoxMEUzQzAwMDM0NUVCNzJDRjYwMDlENDc2REI2MTVGMzhDMkI3MkRGQ0IKKzoxMEUzRDAwMEZERTM3NDVBRkU2OEFGOUUxODgxRUU0RjRGNDk4RTQwQTAKKzoxMEUzRTAwMDM3QzVFN0VBNDkzRkNGMEZFOTU1RTdEODE2RUU1MDk3MTIKKzoxMEUzRjAwMDZCQzNFQTcyM0Q4OTNCRTc0NjUxQjBGNERERTJFQjhGMzcKKzoxMEU0MDAwMEM0RjFDOTU3Njk4OThFMzM4MzA4QzgxNDJGRTQ0OTEzQUUKKzoxMEU0MTAwMERERERDOTgxMUVFNEE1Nzg3RUIxREM3QkZEMTEzREU2MjIKKzoxMEU0MjAwMDk5RTlEMzU5MUU4RDAxRUM5QTk5QzAwRjNERjQ2QjRGQjkKKzoxMEU0MzAwMDYzNzY4REQxRDg3MDE2RjJENThEMkYxQUJEOERCNEQ3RDUKKzoxMEU0NDAwMDg5QjQ0MDEyRjRBRjkzNjM0NzgxOUVDNkRDMEI0MzQwMEUKKzoxMEU0NTAwMDBGOTZFN0ZFMDNFMzY3OUZGRjg4NzgwMTNGOUY5QkNCMDIKKzoxMEU0NjAwMEQwQkVGOTdDODNEOTAzRkJCMkI2MUMyQkYzNTdCQzI0NzYKKzoxMEU0NzAwMDg1MjQ2NkJGNEYxQzUxMEFGMTUyOUMwM0E5NUY3RkQzQ0MKKzoxMEU0ODAwMDQ3RUM3MDA1MzFDOTQ4NUZCQTdCNzE4MTlDRjFFMTdFMzAKKzoxMEU0OTAwMEVBQ0MyNDhCNkQwNUVENTdCRDlFRTlEQjFBRDI5MTA0QzEKKzoxMEU0QTAwMDcyNjA0QTNBQTc5RjZFOTdDMTQ0RkY5OUQ3RUMxQkQwODAKKzoxMEU0QjAwMDQ4RTE1REU4QjdFMEI5MUFFNTRCQzUwRkZDRjUxMDBDNzMKKzoxMEU0QzAwMDE5NjdGRjBGNEM2N0YyQTBENjE0MzU5NEMxRjdGRjMxREUKKzoxMEU0RDAwMEJCRDI5OURGRTVERjMyRTg5OTdGNEJEOTU3MUNDOUE0M0QKKzoxMEU0RTAwMDVERTcyRDlEODVGQjlDQ0VGOEYzMDY5NkNGMzRFRjgxM0EKKzoxMEU0RjAwMDJBN0NGRkYyMDYyM0NFRUZDQzQxMDlGOUZDQ0M2NjM2MkMKKzoxMEU1MDAwMEZGNzlFQkNEMUVDOEJCQkVDMUNFRjZCM0YzNjhCRjlFOEMKKzoxMEU1MTAwMEU3N0ZFMzQ3MzBBRjBGMzdEREVGMDVGRkZDODc4NDdERjIKKzoxMEU1MjAwMDI3Njg2MzdFQTgwRjZEMkM0RTBFNkQ2MTlDMEZGN0Y2NjkKKzoxMEU1MzAwMDQxM0JBNjdBRkRGQzg5OTg2N0I2NTlFNzA1M0I4MjFDRUEKKzoxMEU1NDAwMDRDNDRGRkNFQkNDREY3RkU3NjE0Rjg4RjI2REY1OTAyN0YKKzoxMEU1NTAwMDc4QjhDMUJFMjQwREZDMjVCNDlEM0ZDNEVDNjI5NkJGQzMKKzoxMEU1NjAwMDlCMzJGMjE5NTg4NzM3N0MzOUI2RTMwNkIwOTczNkQzMTkKKzoxMEU1NzAwMDc1OTJDN0YyRTNDMTRFM0ZCMkY5NDZCNDRCRTc0REIyRDQKKzoxMEU1ODAwMEQ4NjE1RTlFNEQ0RjhGMDdGREYxRTFBNDBDMTlFN0IzRjIKKzoxMEU1OTAwMDVCMjIzNkMwODM3RDY5MUFCQzlGMjcyOUZFOUVGOEU5NUQKKzoxMEU1QTAwMEEzMzRFNjY3MkJDQkI1N0EyM0QwRUYwRjNBRTQxM0JBNDYKKzoxMEU1QjAwMEFFNkUwN0ZENTlCQjU5OEY3NkVGOTFDOTZGRkY3MUJBRTcKKzoxMEU1QzAwMEEzNkI1RENERDNCNURFM0UzQUNFRUVBOURGNzQ4QkUwMTIKKzoxMEU1RDAwMDEzMTIyOTg1RkQxNEMzODk3NjdEMTk3Mzk3MTUwMDNDQTQKKzoxMEU1RTAwMERBNzUzNjZGNDU0MzAxOEI1NzdEQjdGNTQ2MzZCMUY1ODEKKzoxMEU1RjAwMDU2OTMyRTkxQUZFNUVGQjRERTdFOTBFRUJDRkFGNTQ2NzEKKzoxMEU2MDAwMEIyNTI1NEZCQThFRTcyMkQ4OEVEODRCRkRGRTQyNUJFMjQKKzoxMEU2MTAwMEE3QUQxOEQ3RjU0OUUwOTc0QjU3QjA3RTUzM0FEQkNGRkIKKzoxMEU2MjAwMDI4N0Y1REJDRTM3NTU4MTdFOTgxOTUwMDQ3MkVGMTE1RTkKKzoxMEU2MzAwMDAzMUY3OTYyQjY3MjM4MkI2NEU1NzYxQ0Q5QzRFQzY2ODgKKzoxMEU2NDAwMEIwRUY4MURFRUI5Q0U0OTkzNTcxN0U4N0Y1RTlFQzNDMTcKKzoxMEU2NTAwMDFCNURGRjhGQzAzODk3REVGQUM3NTFBMDRGNURDRTg1OTYKKzoxMEU2NjAwMDIxMkNERUY5MTlDNjA3QURFRDJDQUU2Q0Y1QzYzMERFRjcKKzoxMEU2NzAwMEFFNzdGODkxRkY4NDVDQUZGNzMyQkRBMzlERDc5RkQzRUYKKzoxMEU2ODAwMEQ5Rjk4QjdBNDcwQ0M3MzlFMDYyRUI1MEY4REIzNzJFQUIKKzoxMEU2OTAwMEI1QTA5Rjc0QTMyMzY0NjY3RTg1MjAwMUJEMzQ3MUE0NTgKKzoxMEU2QTAwMDhFQzVDNUI4OUQ3NTBCRjczRjlBNEE1RTI2MTAwRjIzOUQKKzoxMEU2QjAwMDYzNThERUQ3RUIyNTJGMkJBOUI0RkNEQjkxRTNCQzc4QTQKKzoxMEU2QzAwMERFQUVFNEE5OTY3Qzk4RjcxODNEQUZFRjEzODQ3OUZGOEUKKzoxMEU2RDAwMENFNTc4NkY1OEI1RDNBMEZBQ0VCODkyNTJDN0Y5MTU0OTQKKzoxMEU2RTAwMDI3QTFCRkU0RjU5MjBGMUNCM0UzRTBGNzEzOTNDNzRBRTkKKzoxMEU2RjAwMEY5NjQzMkRERTRDNEU3REI3RDZGOENEOTYzOERFM0FGNzEKKzoxMEU3MDAwMDRGNUFBNTRBNjZFRjdBOTJBNzBFNjZGRTEwRDRDMzI1MkIKKzoxMEU3MTAwMDZBN0MyQzc2MTlGMEJCNkJEM0NBRjYwMzlFNkZCODlFNDkKKzoxMEU3MjAwMEQxRTNEQzZFNjMwOEU0REYzOTdFN0U0NThCQkY2M0U5QUQKKzoxMEU3MzAwMERDQ0Y3QTc3QTEyQTNFRUYzMDg0NzM0MDNGOUU5N0Q0OTYKKzoxMEU3NDAwMEZEMTZCNEU4MzAzRTNFQkY0NTIyMjFGQUJENzMzQjVGNjMKKzoxMEU3NTAwMEM4MDEzOUZFRDFEMzJGRTRDQzhDODM0N0RCNEYzQ0RGOUIKKzoxMEU3NjAwMDQ4NTdGQjAxQjU3RUREREVGQ0I5QTJEREU1RjUyNDYwOEUKKzoxMEU3NzAwMEVBRDNENUZFNzJGNURGRDA5RjNCQjM5REZCODM3REJFMTAKKzoxMEU3ODAwMEJFMEVEODA3RjFGNkRBRjFGRUNFRjk0M0RBMjdBMUJGQzMKKzoxMEU3OTAwMDQzRjgzMzRGMUQ3QjBBMjIyNzlERjQzM0I3RTdDOUYxQjUKKzoxMEU3QTAwMEY5OEFFMjM5OUFEMzZEMEFEMDhENEVDNURDQzJDQUJENTIKKzoxMEU3QjAwMEQxQUJCN0Y1Rjg2NDNBODM0M0QwRUQ1NDRCOUY2NEMwQjYKKzoxMEU3QzAwMEEzQTFDRUFBMTA3NjhFQUMxMEVDRjRDREM0RTI4NUY1RjAKKzoxMEU3RDAwMDY0Qzg3MDU5NDE3RTg5NzNGODVGOThEOUQzNjFBMTRGOUQKKzoxMEU3RTAwMDZBQUY2NTY3MTQ2MkJGRkI2NTNGRTZDNTdEMjFCN0UyOEUKKzoxMEU3RjAwMDM5QzJGQjc1MEQ5ODZGRkQxNUZGNUU5NkNEQkY2NzJFNzQKKzoxMEU4MDAwMEVFNEZDMjk4N0Y0RDVBRDRGODRENkI2MkZBMjM1NjY1OEQKKzoxMEU4MTAwMDQwM0QyNUYwN0NFRENDRkI3MDlGREEwMzdERDYwM0RGMTUKKzoxMEU4MjAwMDY0OEM2NEVGQUU3MUU1NzFCRjQ2MTRFMzA0RTY5MUM0RjUKKzoxMEU4MzAwMDA2RkJGOUE2NTE0MTg0NDdEMEE3OUUzNTI3NTJCQjg0RDkKKzoxMEU4NDAwMDc2MzJFNEI1MjRBNDYwM0MzNEM4OUZDNDlBNDIzQUUzQ0IKKzoxMEU4NTAwMDAzMDk3QzVGNEIzNEYxMDAyQUI2ODJEMDRFQzAwOTYyQjYKKzoxMEU4NjAwMDBDRjI2MzFFQjU4NzVCMEI0QTMwOUU4QUY2Mjc4QzBCMzEKKzoxMEU4NzAwMEVGNjcxNjI5RTg0Rjg3NzY4NjYxREZDRTZGOUQ3Q0M5RUEKKzoxMEU4ODAwMEYzMEMyNzhBRjdENTk2MUVFMzBGMTNFMUJDMEU2RDlGOUMKKzoxMEU4OTAwMDRERjUyMEQ4N0ZDNEFCNTc5REQ3RDk0NEVENjZEODhGQUUKKzoxMEU4QTAwMDg5RjhBRTRFMEUxN0JCNzAxRkQyMTEwNUZGODhBMUQ0OTgKKzoxMEU4QjAwMEU0MDFCRDlBQTAwQjE3MDJEREI0RjE1RURBMkU4RkU1RkMKKzoxMEU4QzAwMDE5NjREOTQxQUY4OEYzMzg3NTRCQzdGQTIxREZCREQzM0UKKzoxMEU4RDAwMENFMzhDOEY2NDc3NTBGOTRFMUZCQjFFRENDN0Y1RURGMTMKKzoxMEU4RTAwMDYyQzRGMzg0RjVGQjI0OEM1N0Q1RjkwRDIxMTNGQTMxNUEKKzoxMEU4RjAwMDNDOEQ0MEFGMjBCNUMzNjBERkQ4NjY2N0Y5NTE2RDM3RjYKKzoxMEU5MDAwMEQ5QkM0MTEyRUZCRjhFNkU3OTEwRkRENzU2OENEM0ZENjYKKzoxMEU5MTAwMEIzRjFDQkNCODkxNDAxNDNFM0UyNTNDOTI2QTY0N0I4MzAKKzoxMEU5MjAwMDdGM0I4REYzOTNBMEJGNThDRjIyREU5OTU4RTRDRjAzRUQKKzoxMEU5MzAwMDhCRkJEN0VCNjZGRkM2RTJGQzJFNzkyMUQ3M0UwQzc5MjQKKzoxMEU5NDAwMDFGQkRFNzg1MUNCRDA1RjI0NjRDNjBDREYzN0EwMDhCRjgKKzoxMEU5NTAwMEVBQ0RDRUYzNzU2NjBGQzZCNTNBRUJFMTVFMDREMzNFNjEKKzoxMEU5NjAwMDg5RjdGRkMxMkRFM0ZBNjJGRTI4M0Y1Rjc3REQ1QUM4QzEKKzoxMEU5NzAwMDYzN0VENDRDNTRERjhCODc0RkQxOENBRkE3RTM1QjNERDQKKzoxMEU5ODAwMEEyRkQzRDM3OEY1MzMwQkVDQkNCMkZGREQ4NDdFMTdGNjMKKzoxMEU5OTAwMDU0QUYxRTBGNTk1MDlDMDczNDc1N0RBRjMyMzNFMUUxRkYKKzoxMEU5QTAwMEI1NjNCQUY0MzdENUU3Q0I1RENFMkUzREZFRDBEQjEzOTEKKzoxMEU5QjAwMDVCODc3QTYwN0Q3RDhBRjlCODQyMUZENzNCNTg5RTg4NzUKKzoxMEU5QzAwMDU2NkVBRDcxNDlDMkZFMUQwRjJBNzZENUI0MkFCQzQ3REEKKzoxMEU5RDAwMEEwMzNCRURCM0VDOTA3RjcyOTg4Rjg2RUZEMzIzRkU2NUIKKzoxMEU5RTAwMEU1ODJGRTc3QTFGRUJGNzBFNjEwMDFGQkYyMUNEQUZGQTQKKzoxMEU5RjAwMEY1NTcxNEU2MEZBMjc2ODQ0NEY5RDBENDVFODY3RTRGOTQKKzoxMEVBMDAwMDQ4MzcwNUJEMjlFOEJGODBFQjI1QjBENTgxQkZFQjM3N0UKKzoxMEVBMTAwMERERjFCNDBFRUM2NTk3RUY0OTFDOTdFRjAzQjVGMDg2NzYKKzoxMEVBMjAwMDVEQ0M1RUFGMkYyQ0RGMDBGMjgwNkM5NzA4RThFRDM1RUYKKzoxMEVBMzAwMDg1OUZBMDlENTFCNzdGREM4OEY4QkNGMkY5RkI5RTYwRjIKKzoxMEVBNDAwMDc5QzkzQkY0M0RDRTNGRUNEMkExN0NBQkRCRkYxQ0ZBOTUKKzoxMEVBNTAwMDMzQ0Y4NUQ4NzE5NjZBMjVCNDdBMzRGODU1QUE2NUIwNTMKKzoxMEVBNjAwMEI0NDg0OUE4NkEzQUVBRkY2OTc0MUVFMDM3MDRCRDAzNTYKKzoxMEVBNzAwMDc2Q0E4RTI5NDFDODczQUZBN0ZGMDFDQTM2RkFFN0EyNEEKKzoxMEVBODAwMEJEQkY3MTlBQzkwQUYxOUFGQUMyOTk4QjcwM0REODJDMTAKKzoxMEVBOTAwMDNFOThCRjE2Q0VDRUY4RjAwMzE2RjQzN0FFRDlBN0FGMjYKKzoxMEVBQTAwMDA0QkJBOTk0REE0OUJGQTJGMDY2QTc0Q0E4RjQ1MkI5RjYKKzoxMEVBQjAwMDk0QTlEQjUzRkMwMzJCQzRENTdCRDZDMzUzMzM5ODFFRDgKKzoxMEVBQzAwMDZFOTZGQ0MxNUI0QjMwMEY5MkM0RTdFOUU0RUU2M0Y2NEYKKzoxMEVBRDAwMEQ4QUIyRTY2QkY4OUY3QUY0MkUyMjNDNUU3OTg2MEM3N0YKKzoxMEVBRTAwMDU4RTBCOTk3OTQ2ODAyRDhDNUY1QzRGNzMxRUM3Mzg5M0EKKzoxMEVBRjAwMERGRUE4MTcxRTAyNjA2QjBCMzFDQ0IzREU4Q0YzNTM5QTMKKzoxMEVCMDAwMEEyM0YxRThBNzY5MzgyRkIwQ0IxOEZCOEI0OUZGOUJGRTcKKzoxMEVCMTAwMDQ2QjkwMzZGMDIxRDRCNzVEMUM3NkYwNUJDRkQ5ODlEQUIKKzoxMEVCMjAwMEYzMjUwQTkzMzczOTUzQUNDM0MwNUY2NTc2NDQxRkFGRjIKKzoxMEVCMzAwMEY0NjA3RTBERkExRjkyQUY2QjQ2M0FCQ0U0MjAzNkMwRkIKKzoxMEVCNDAwMENGRDg2MDk1MjJDNUU5MTkyMTM3QzY3NjlFQTc3MUEwNTYKKzoxMEVCNTAwMDlGQjQ5QzhCOTc3RTk0NUE2NzRDQzhBMkNENUZBNzc2RDIKKzoxMEVCNjAwMEQ5MDVDN0ZFMzE1NTgxOTdDMjVFOTA0RDAxRENDRjU0NjcKKzoxMEVCNzAwMDRDQTNGQjQzRTBDQjU1QjFBMzMyRjhFNTFEMUQ2ODJGMzQKKzoxMEVCODAwMEQ2ODYyNUZDNEU2REUxMkYzMUZGNkQyMUNGQjNFQUNDNDcKKzoxMEVCOTAwMDc3NTJBMjk4RkY3NUM5OTVDMEY1NjMzM0UzNEJEMjgxRDQKKzoxMEVCQTAwMEZCNUZCMjhCRTE5RkVBNERDQzBCRUJCMkRCMUJCMTlENUYKKzoxMEVCQjAwMDE4Q0ZDMEUzMDlCNURDNUY0MzExODVGNTdGNzU4OTc4MEYKKzoxMEVCQzAwMEMyMEFFRUFGMTI3OTZDRUNCQjQ0RjE5NEM2RkIxN0Q2QzcKKzoxMEVCRDAwMDREQTI5QTA0RTFGMjI0MDFCQ0JGMzBGQjY1Mzc2RDdGODIKKzoxMEVCRTAwMEFBNUE2NkZFRUM5Njg0MTAxQzBFNUQyNzc1RjhDMEVGREQKKzoxMEVCRjAwMDE4MkNFRUY5MUM0Q0JBNUJFMjc5QjJCMUYxRThFRkRGMDgKKzoxMEVDMDAwMERGNUI5RTJDQ0I4QkREMzA2MjIwRTY5NTk3RUNGQjc4QUEKKzoxMEVDMTAwMDNDRjAwN0E5MjRCODFFQTlCQ0I4QUEzQ0Q5MkMzNzVCODQKKzoxMEVDMjAwMDQ3RkZDRkU0Qzk3QTI1REYzNkZBMUNFQ0I2QUJGMzY0QjQKKzoxMEVDMzAwMEJEOEM1RTIyN0VBOUNEOEZCREU0OEUyODJDOUYyREJBN0YKKzoxMEVDNDAwMEU1NjlEMEJCRkI4Qzk4MjczNzcxREZBQjI3QzE3RjM5RDMKKzoxMEVDNTAwMEQxNDRDMjE4Q0ZENUQ4MEZBRkE1NEUyOTA1M0E1REJFMTUKKzoxMEVDNjAwMDc4NjZDQjRBMDJGOUQ1Q0Y3QjU5REU5RERBMUVFOENEMTYKKzoxMEVDNzAwMEZFQzc5ODQ2REMzRUIxRDJGREVGQjVGRjg1QkNBRUU3REUKKzoxMEVDODAwMEZCQTlGMzUyRUM5MTAyOThERjQxOURBREE3NzMzMUI3MTgKKzoxMEVDOTAwMDg5RUZGNzk2RTdEMURFNzM5RTg3Mzg3NzU1MTlDRDUzMDQKKzoxMEVDQTAwMEM1QTdFRUU5MUNFRkJCQzVCQjY2ODIwRkJBODc3ODk3OTQKKzoxMEVDQjAwMEMyRjNCNzE0ODk4OTBFOTI2RDUwQzVCQjE0N0I0MTZGQTYKKzoxMEVDQzAwMEYxQUUwOEQ2M0ZENzFGRUIxRkVBMTZFRjYyNzkwNUNERUMKKzoxMEVDRDAwMDA3RDMzRDYwREZENzM4NjNDRjNDRTM4MUYxMEMzODRFN0EKKzoxMEVDRTAwMEYzRkU4NDEwRTRCOTM3NzNGQ0Q3NUM3REJDRUI0MTc3NEQKKzoxMEVDRjAwMDBGRjFBRUFEREM3RUZCQTA1MDhFMTgyODVFQjcxMjA2NzkKKzoxMEVEMDAwMDdGQjA1REM0QkQ2NERDQzdDNjFFQ0UxNkYwNjNGREU1RjIKKzoxMEVEMTAwMDg3MDdBMUJGNjg5Njg4NjdCREM0RkM2OEIzNzhEQ0VBNDIKKzoxMEVEMjAwMDgzQzkwNTk4RTdENTFCOUU2N0I1QThFMzAyMEYwMzlFMkMKKzoxMEVEMzAwMDlERThFNzQzN0ZGQzdERkYzMTA5RkQ1MzczQzE4RkRGMDEKKzoxMEVENDAwMEE3RUIxQzA0RTFGRTNDNEYwQjNCREZFRUQ5MjE4NTNDRDkKKzoxMEVENTAwMDJDQUU2MjkyRDEzNkI0QzlGMDdFMjExNUEzMUI0MUY0Q0EKKzoxMEVENjAwMDA2MjlENzVDNDM1RjRCMTQ2QkI0REVEMzRDQ0JENEU4OUQKKzoxMEVENzAwMDU3NTYyQjQxMTc2REI3RjU2NDAyRkFDRjFFNzI3ODEwMDMKKzoxMEVEODAwMERFODc5QTU5N0MzOUI4NTYwQUY1NjNFM0UyQkQ2MUMxNjIKKzoxMEVEOTAwMDY2RDkwN0UzRUM3NjMzQkZEMzJCNkVBNkZGM0M5QUZCMTQKKzoxMEVEQTAwMDA4OUFGNTNDNEVDQ0JGRDc0OEU0MDgzQzY1ODkzRDFGMjYKKzoxMEVEQjAwMEIyMjk5NTNERDkwRjYyQkM2NjdEODNBOTBDRjA5RENEMkIKKzoxMEVEQzAwMEVFMjdGOURDRTA5Qjg2RkVFNTk0MDJCQzg3QTgzOUIxMEEKKzoxMEVERDAwMEExQTU5MkQ1RTM5QUZEREMxQ0YzNjNGRDc1MEEzMzQ4QzcKKzoxMEVERTAwMDg5MjcwNUUwN0RDQUNERUMxQjJEOUVFN0I0QUFDQkRBQkUKKzoxMEVERjAwMEY4OEVGNkRDRDUyQzEyRThFRkVFRDNGRDVDRDI1MzZFMjQKKzoxMEVFMDAwMEE2RkYzRTVGOTNDN0U5RTJDNTc4NDlCM0RFRjM0NjFFMkQKKzoxMEVFMTAwMEYwRkI2QTc2Q0Y1MDYzMTZDMzlCOUNDRDlFRjlGNjBBMzEKKzoxMEVFMjAwMEJDMEY4RUQ4QjkxRDQ3MThGQ0Y5RDczOTI0NTgwRkNEMUYKKzoxMEVFMzAwMDc2QzZCN0ZGMkFEQzVBNzg1Rjc3MTczMEZDREFEOTdBQzIKKzoxMEVFNDAwMDZENUUyRDg1MThCRTE4REM1N0VCMTczOUZGNkY5NjhCNUEKKzoxMEVFNTAwMDFGNDhERTY3MjI3OUQ4MEZFNTQyRjA2MTNEQUVCQjUzMTMKKzoxMEVFNjAwMDI0OTRDOUYyMjY2RDI4Mzc2N0YyN0RFRTY3NUNDRjZEN0EKKzoxMEVFNzAwMEFDQ0U0RjgyMzhFOEFDQjNBQkYwQkVBMEIxNTNBQzA4MTcKKzoxMEVFODAwMDdGREQ0QjY2RENDN0Q1MkU4QkU2MDAzRjZCRjEwOEQwRUIKKzoxMEVFOTAwMDJBNDI5RUQyRkE5OTBFQzJFRTk5Njk1MUM3RjVCNEYxOTEKKzoxMEVFQTAwMERBNjA4QTVGODY3ODUwNUQ3OUI0MDBFMjQ2NEZDODFGMDkKKzoxMEVFQjAwMEVDNzk5NUM5MzVENEFCNzVDQjYyQ0Y4MDlGNzk2QTRBMUUKKzoxMEVFQzAwMEMwOUM0MUYxNzNFMTgxQjdDNzRCMUVFQzhFRjJFREYyQUQKKzoxMEVFRDAwMEMxRkU3OEJFNzA2NkIzRkFCQzE2NTlBQjhFMUI5Mjk2MTMKKzoxMEVFRTAwMDE0NzYyRUFENERGRDFFQ0UyN0E5RkE3NThCMjMzMkJCQUQKKzoxMEVFRjAwMDY2OUQyMTMwMDBFQ0NFMUJBRTY3NzkxMjE3RTdDQjA0N0MKKzoxMEVGMDAwMEU4NzlEMTRDNzg3QzVFQzg1OTZGNDFCQzFFMjhFMDc2MDgKKzoxMEVGMTAwMDZGNzdCQUQyNzY4MDY3OUUxNzJBREFENzAyNUQyOTNEQ0QKKzoxMEVGMjAwMDZCMzg1RDJGM0U3NzREMDFEMEY1QzI5RTZCMEE4MEFFRTcKKzoxMEVGMzAwMEVCRjRBRDNFNTgxNzlGMzkwMzAzMDExRkE3QzdGOUQxNjIKKzoxMEVGNDAwMDJFMTQ3OUIwNTdDQjZGQTMzMkZFNjdGNUYwNzg4MTk3MTYKKzoxMEVGNTAwMEVGQTg4N0UxMkZERTVGRjJEMjNGNThCRTZBQjA5RDlERDkKKzoxMEVGNjAwMDRGRURGMkQzOURDMzdCQjYyRTVGOTEyNTkwQzNCRDhEMkYKKzoxMEVGNzAwMDc3OTJFRjkzNUMyNjEyMDRGQkFCQjQzQzhBRkQ0QUZGMDgKKzoxMEVGODAwMDI2MTNCMDAzODVGREFCODU3RjNBQzdERjgyMENERjRCQ0MKKzoxMEVGOTAwMDJFQzAyM0Y3RUI1NkYzQjE0REExNEY5OTlEQkQ1RDQyQjUKKzoxMEVGQTAwMEJGQURDOTEzNEMxQThERkJBQTM5QzM3NTI4NTc3RTg1OEUKKzoxMEVGQjAwMEU3MjA0OEJCNjQ4M0ZEQzlGQ0VEOEQ1ODdGNjlERjJDRDkKKzoxMEVGQzAwMEFDOTc0RDkxMDhFQ0MzNkE2OTNEOTQ1NzhENTFFNzM1NzQKKzoxMEVGRDAwMEVCRjcxNjQ3RTJGN0JEMTQ4RTAzQjA5RjQ5NzBDNDBDREYKKzoxMEVGRTAwMEMwOUY3NTYwNTc1MzEwRUIxNEU2REZBRTczMTBGNEFCOUYKKzoxMEVGRjAwMDk0RUM1M0VGMTM0NURDNzZBMzlGRERFM0IyQjE1REMyMjEKKzoxMEYwMDAwMEZCOUNEMjBDODFCQzJDQTBBQjI2N0U3QjdGODY2RjFEMjcKKzoxMEYwMTAwMEFDNTcxMTQ3QkZDREU5N0IyMDgzRTU5N0U1MDA5RTgyODEKKzoxMEYwMjAwMDE5MEM5RjUxQkQzOEFGQTczRTRGNzhFQ0QwRUQ2ODA3NjMKKzoxMEYwMzAwMEZEODVGODkzN0JDRTM3MEJBOUUyRUI3M0Y5NzlDRkI5NTUKKzoxMEYwNDAwMEZDQkMyN0M4RTc4ODQ2M0VDNzk3NkJFMkYyQ0QyMjNENUQKKzoxMEYwNTAwMEU1MERDNEU1OUJDNUY3OEJDRjM3OEJBOEU0MUE1QkZGQTIKKzoxMEYwNjAwMEU5QkFDNTE4RDdBRUE3N0NCRTc0NTgxNzFGRDYxMEZFRDQKKzoxMEYwNzAwMEI3M0VGNjAxOUU2QkQ5NjE0NDdGNUEwRENGMzNBREFGRDkKKzoxMEYwODAwMDNFODVGQjk0N0EzODI3QzNENjIzQ0JDN0U2RjcxQ0Q0M0EKKzoxMEYwOTAwMEQwRkQxRkU2REI4NkQ1RjlBOEJCN0I5NTFCRkY3N0ZDNkYKKzoxMEYwQTAwMEU0RkI4NDNDRTBFQjUxQ0M0QkNDQTNBNjVENjJFQjQ3ODgKKzoxMEYwQjAwMDAzQTc3NkRGQUJGNTc3OEI3REVCRDVDQUE1RTNGRkMzNUUKKzoxMEYwQzAwMDcyRTlBRDdGOTM1Q0VBMTYzN0U4MUI0QkYyRkUxQkUyNTgKKzoxMEYwRDAwMDA2MUY3OTVBRDNDMDk1RDgyMjMxN0UxREFGQjNGQTU4OTYKKzoxMEYwRTAwMDVDNTJDN0YyMTZCNEYxNUFDRjc4OEM0MzBBM0ZBREU5QUYKKzoxMEYwRjAwMDc5NUQ2ODQ1MUVCNkM3Mzg2Q0VEQzE0NENDMjNBOEY2Q0YKKzoxMEYxMDAwMDU0QTM5REFEOEQ0RjJFMjA3QkM2MDMwOUZFNDI4RUUzOTYKKzoxMEYxMTAwMDc5QUM3RjM1MUY4MDY0NzZFNjAzRTQ3REM3N0MwMDYzQUQKKzoxMEYxMjAwMEU2Nzc4ODRGQkU2Q0ZEMzQzNTEwQzcyN0U1NDVENDYwQkYKKzoxMEYxMzAwMDJGRUEzRDVGQ0I5OUM5RjgyRTgxRTc4RDk4OTQyMEIxRDUKKzoxMEYxNDAwMEM3RjVFRkFENUY3NjI2Q0IwMzdCOTlFNzE5M0Q5QTk4MUIKKzoxMEYxNTAwMDgwRTdGNjVEMDY3NkZFQzAyNUIzN0NBODMzMkU3RjZFNzEKKzoxMEYxNjAwMEU2MDhEMDAzOEM4RTNGRDk3RjA3ODFGQ0MyOUZFOEMzOUQKKzoxMEYxNzAwMDc4OEUzRTU4NkJGNTgyRkUxMjdFMjYzMUZFODNEQ0NGMDAKKzoxMEYxODAwMDcyQjVFQkE3MjRGM0RGQkI3RUJFNEQ2RTVDMkZCRTc3NUUKKzoxMEYxOTAwMEI1RjFCNUY1MTQwNzcxRUI0QUJCMEU3QUVCRDc5QjVDNjIKKzoxMEYxQTAwMEI5MzVEMzNGMjExM0U1OTY2RjA4QzYyOUFFNTIxRTI1MDcKKzoxMEYxQjAwMDk0NTA3OTBERkE3OUFGRDEwM0ZCMDUxMzNGMjc0M0Q2NUQKKzoxMEYxQzAwMEJBNTVGQkVENTk4RjY2QTNERUJBNjg2NkZCMDc3MTlFRTAKKzoxMEYxRDAwMDQ3Q0M3RjY2QUZGOEZFRTdFQ0JCRTM0RUZGNkM5OENGMDEKKzoxMEYxRTAwMEU5MzIxRjlFMDc3ODI4OTFFOTk1RDg0RTk2MTdBNDNEREQKKzoxMEYxRjAwMEQ3QTJENTI3RTI1Qzg2RjhERTdERkY2NjdFRjhBRUYyMDgKKzoxMEYyMDAwMEI0NDk3Q0ZGNUY5NEE3NTRCRkEyN0ZBNUQ3Mzg2Q0I3RTEKKzoxMEYyMTAwMEZFNDE5RTlGRDlFMUUzRjEyOTNDRTcyMEUwQUFFRjYwOUYKKzoxMEYyMjAwMEY5NzQ4RjY3NEEyQTdGRjM3RDVDRkU5RkNDRjRCNTAxQTkKKzoxMEYyMzAwMDFEMkVCQzY1MzI0MURDQjNBNDg0QzlDRjNBQkYxNUUzQUYKKzoxMEYyNDAwMDA2NzU2MTk2NDc1M0I3OENFMDNFNUY5QzVGQ0Q0QjBGRDAKKzoxMEYyNTAwMDZDMDEzOUY1RDBEQjU2QkM3N0I0NkVERkQ2OTY3Q0NDMkEKKzoxMEYyNjAwMDJGMDhBMDVENzdFOTJERjZGRTQ0NUE2MDFCOEM1RkJGMjYKKzoxMEYyNzAwMDJDQUE4QTRGOTQ3RUZERTlBQUNBMTI4NDE3RjdFOTBFRDgKKzoxMEYyODAwMEEzRkE1Q0QwOTE0Q0I2RkYxNkNGNDM5REY4QTVGQjEyQjQKKzoxMEYyOTAwMERBRUY0MjM1Q0JERkFFNzdGODZDNjU5ODU3QzBGQ0RGMEMKKzoxMEYyQTAwMDA5OUUwRUY0NUJEN0VENDUyNTQxMzA5OTE0RUExRkNDMzkKKzoxMEYyQjAwMDQyQkVBOURCNUI1NjhDRjcwODg0Q0RDNTc4RkZDQzNCRkEKKzoxMEYyQzAwMDU2REM1RjVENzgyMDIzQTQ2M0ZFRjJGRDAwNkY2MjQ5ODcKKzoxMEYyRDAwMEU4MjZCMDJGNzNFOTc3QzBGRjdENjFDRjREQzVFODBGRjkKKzoxMEYyRTAwMEQ0QUMzQkIxREUzQUNGODNERTY1MEEzNTQ5NURFQjcxQzQKKzoxMEYyRjAwMDlEOUVFOTQ3QTFENzc2ODIzMThCNzkxNTNDMkZCMDdENTEKKzoxMEYzMDAwMDEyOTk2M0VEMkE1QjFERUE3Q0M5MDUxOUUzNzYwMjNDN0MKKzoxMEYzMTAwMDNCMzM1OTFFODk4OEEzRTc5OUU4RUUzM0JGM0IxRkU2Q0MKKzoxMEYzMjAwMEYxMzhGQTI0OUVGRjQwODJBNkFFQkM4N0ZDNkY4RkEzMDMKKzoxMEYzMzAwMDBCRjg0NDU5QzREMTEzQUUzMEZCMzZERjY2NDBCRTQ4RUIKKzoxMEYzNDAwMDZDNjE3MjgzNTBCRTAwRkI3QTRDQUM2MzJDOUNDM0VBQTgKKzoxMEYzNTAwMERCMTYxOTAzRjg0QTA2RjQ2M0ZFNjlGNEM3NDMyMTVFMUQKKzoxMEYzNjAwMDkxQUE4QzgxNzhDNTk2QTVDMzBFOUIxQ0UwM0ZFQUI4OTQKKzoxMEYzNzAwMDBFNDhFMzY5QjU5NUMzRDYzMjJGREQ3RjA2RjU5RUQyRTAKKzoxMEYzODAwMDUwMDhGQzVGRkUwNzNEQ0I1MzVDOUQ4MEZBQkUyREE3NjUKKzoxMEYzOTAwMDA2RjMxNDJGQkQ2RDU0OURCRkQxM0U4MzY0ODUwQkZDRDUKKzoxMEYzQTAwMDQ0RjkyREJGQzc3ODQxRTI1RUE5QzdGQ0QzN0U2MEY0NjMKKzoxMEYzQjAwMDhGNjBFREMxRUY5NEQ4RDIxMTFDMDk3RTk0ODcyNTc2MTkKKzoxMEYzQzAwMDc3MjM4NTVFNzJDMUZFNUY5MUMxRUU5OEI1OEY5REUzOTQKKzoxMEYzRDAwMDlFRDU2QTJGMzdBMTNDOTU1OEJDNjU4QzAzRTVBNEIyMzUKKzoxMEYzRTAwMEZBNjYxOUY2Njc0QTIzQzE3QkQyQjJCMkQ4Mzk4MTdFNTgKKzoxMEYzRjAwMDZEMzYxOUU4RkVFQjJGNzUzREM2RDExMkIyOTg1RTg1QzkKKzoxMEY0MDAwMEJDMzc0MDU3QUQzMTc2MTQ0MkZEMjJGRTI3RjJEREM0RjEKKzoxMEY0MTAwMDdFQTg1M0JFRjJGQkM0ODUzRUQyREFCMURERUM1N0FFMTYKKzoxMEY0MjAwMDhGM0FFRDc4MEQxRkY3RDY0RkYwQjdFMEU3NUZFQjA5QTUKKzoxMEY0MzAwMERBNjFCRjk2NEM3OEJFNEJGMDc1QjNDOERGRkY5MkY5MjYKKzoxMEY0NDAwMDcxNzM3OTNFQ0RBOTM1N0YxRkMyRUUwRjE0RjE5MzEwNzEKKzoxMEY0NTAwMENCODNEMjQ3NTc2NTIyQkVBMkQ3MDc2MURFN0JFRDcyMTAKKzoxMEY0NjAwMDVEMTFGQUJGRUE3MDlDRDVFQ0JFQjNEQzk2M0UyQjQ2MkMKKzoxMEY0NzAwMDk2QzBEMzQ2MDAwNUE3MEUyQ0NDODU3NTE5QTQ3Q0QwNjgKKzoxMEY0ODAwMEFGMDczRTM4OTdDOUYyOTY5NEQ1MDk0ODM3RTUzMUJDQTUKKzoxMEY0OTAwMEQ5OTkyOEY2MzRBNDlCRjIwNEEzQ0Y2OUNFRTcyMjdFNDMKKzoxMEY0QTAwMDJCRkM5NDI3MzMwM0EzQjM5QzcxRTdCMjk2NUFEOEI5QzcKKzoxMEY0QjAwMDJDN0VERTM3NzFFOURCQkJFMUJDRDMxNkVFMkYzRUZDQzAKKzoxMEY0QzAwMEQyMjBGQ0REODVDRjU3MkIxMkY4OEQzRUI3NTdFNUMyMTEKKzoxMEY0RDAwMDdFNkYxQ0E3NkJBMkQyNDE2Q0Q2NzhGRTNDOENGOUIyMzEKKzoxMEY0RTAwMEY5MDc1OURFOUZDMkVGNEY1MjU2M0JCNjAyM0VCREE5MDcKKzoxMEY0RjAwMDAxQ0MwQkJFQUUzOTgyM0Y1OUYwOTJFRDM0QzZFNUE4N0YKKzoxMEY1MDAwMDVEODRFNzlGQ0ZFRDk3ODQ1REE0RDI4NzYyQkZBNkREQkYKKzoxMEY1MTAwMDg3NERDRkZBRUZCNTkzNjY2N0E5RjcxNTU3QkRCRjIyQTAKKzoxMEY1MjAwMEVBN0Q2NjY3N0JCMTZGRDRFRTIzMzRGRDdCQjM3Rjg4QzEKKzoxMEY1MzAwMDJGQThDQThCQjk5RkU3NDUwQkZEOUVDMTY1QTNDODk3NEQKKzoxMEY1NDAwMEU5M0NCRjRDNDI2NjM4MDc5MTBDQjlBRjRDQUY2M0RFNjMKKzoxMEY1NTAwMEQwN0FDOUUyMDUzQjQ5OUIyRkQ0OTlDNzQzMUFGQUIzMjUKKzoxMEY1NjAwMDNDOTI4NkExRUM1RThBODY2QkUwMjlGMjg5Q0M5MDRGQjIKKzoxMEY1NzAwMDEyOUZCNzlBQzhGMjgxQ0M5MDRGNDJERjM3RjU3QURFRkUKKzoxMEY1ODAwMEQ5RDMwOERGNkZGQjkxNEQ5Qzc3NjY3RUY2NEFDMkUzQzQKKzoxMEY1OTAwMDBDREJGMDNDNzRFQ0I2MkMzQzVGMzNCNjkyRjlFRjUyQzYKKzoxMEY1QTAwMEZDMDYxOUY4RjJGOUFGNzQzRTkwQkIzMUJBNkVDMUJFRDkKKzoxMEY1QjAwMDRBRTlFQjczODNCRDY1QTZGNTkwQTdEMjc5REVCOThBRDcKKzoxMEY1QzAwMEY0NzhERTU5RTQzMzg5Rjg2RTQ2RkY3NTEyRTg5RkNFNzEKKzoxMEY1RDAwMDNDOTNGQUFFNzNEMEYwRERCNjQ1MUVGNDBGNzdFNjNERUUKKzoxMEY1RTAwMDdEOUZFMDNDQ0I4NTlDMzFBOUU5OTdFNDYzRUQ5MkE2MzEKKzoxMEY1RjAwMDE5RDBDRTQ4OTMwMzNCMzE4RUI3QjFDMzhDRkU4QUFDOTEKKzoxMEY2MDAwMDdDRTRBQkE2OTEyMUJDM0YzN0E1QTgxNUZEQUYyQjUzRDkKKzoxMEY2MTAwMDdEQkJCMjQ2NzRGMThGODA4RkFDNjdGM0JGMENFN0JDNDMKKzoxMEY2MjAwMEE0QUVFRjVFOUVGRkI3MUNCMEE3Q0FEQjhEOEMwRjM1NzIKKzoxMEY2MzAwMDcwNkNFQ0JDNkY4NTdFODczRTBGNjUzMUZBN0IzNUY2Q0EKKzoxMEY2NDAwMEFENzgxRTEyRkNDRUU1QjBGODdFNkZGMzE0RkNGODZEQjkKKzoxMEY2NTAwMDc2QkI5NkJGODJFNTlDM0VFRjk5NDMyQzVGNDlDRDVGMTgKKzoxMEY2NjAwMDg3OTc1NzBFM0Y0RDY1Qzk5MUU1N0U3QzVFMzY0QjYxQUQKKzoxMEY2NzAwMDFERTQxNTk5NjMzMzQwMDJGRTM4QkJGRTdCNzAwRkM3NTMKKzoxMEY2ODAwMEU1QzQ1ODBFRENFM0YxNzhDRTZEQjdDMjNEMUQ5NzlEMDEKKzoxMEY2OTAwMEIxRjdBMEZDNENGNjQzQUNEQzJGQjYwNUVFRjU2OENGMTUKKzoxMEY2QTAwMDRFNjQ2NUY4NTYwNjIxNkY2RDkyNkUwRDVBRjExRUFEQ0YKKzoxMEY2QjAwMDU1MURBMDlGNEEzNEY5Mjk5QUZCMDcyMDhGMTJFRjRCNjIKKzoxMEY2QzAwMEIwMzI3QUE2RjMzQzU2NTJDMUVENzc4ODJDRDE3MjkzQjIKKzoxMEY2RDAwMEJCRDgwQkY5MDc1NkUyRDlEQjAxRjU1OTQ2NzY0RjAxNDUKKzoxMEY2RTAwMDYxNzk1MzRERkRGMjU4OUUwM0U3Nzc5MkM1RkRDRjI0MTMKKzoxMEY2RjAwMDFBMDRGRTZEQ0FCMzYzRkY0RTc5QkREN0M4RTM0RUVDNjIKKzoxMEY3MDAwMEZCMjc5RTYzRTdDQjQ0N0UyRTIxQjY2Q0IwN0JBQzFFRkMKKzoxMEY3MTAwMEEyMkE4QkZCM0I4ODYyQ0I4NkYzRkE0REMyQUZDN0NCRTQKKzoxMEY3MjAwMEVGNUEwMjdGQ0Y4QUIzOEI0RThDQkJCRjA4N0ZGRkUzQkIKKzoxMEY3MzAwMEY5MDdGQkMyN0M2RjM0QThFRjRGMTZDRjY1Mzk0Q0ZFM0EKKzoxMEY3NDAwMDVFRTZGNzBDQjY1OTAyNEEzNjJEOUY0Qzk4MzExRUFFMzQKKzoxMEY3NTAwMDZFOUQ5NjVBNjZCMEEzOURCNjUzMDdGMkM4QzlGOUMyMEEKKzoxMEY3NjAwMDNFOTVDMTY3QUZGMDRCRjBCQjFCRTI5RTNGNjc0MDQxNDcKKzoxMEY3NzAwMDdGMDAwOUI0RTk0MDdGM0E0RkZCMzEwRkIwQzYxNENCOEMKKzoxMEY3ODAwMDUxRjJDMUFCMUZCMDY1NDMxQ0IwRUFGREZCMzAwRTk4Q0YKKzoxMEY3OTAwMDcxRTIzREM4REIzOEExNkYxRDlCMDRGQTIyOEZERjAzQTUKKzoxMEY3QTAwMDQxMzc3RTQxNUEzRTlBOTk4QkZCQkVDRTdCNDFGQjQ5NDUKKzoxMEY3QjAwMDI4MUYyNjRFNjVFNzU2Mjc5MEIwODJGRTE3MUIzQjQ3NTEKKzoxMEY3QzAwMDM1QkUyNENGREI0NEJGMzc5MUU3N0Q4QzNGRTk0RjAyNDQKKzoxMEY3RDAwMDNGQzBGODNCQTIwQThCQjdDNDk0RjgzQzBCRjEyNDJFMkYKKzoxMEY3RTAwMEJEMjc3RTFERENFNDg5MkIxM0I4NEY1ODVEQkVDNUFCMjkKKzoxMEY3RjAwMDJFREYzQUYyQ0JGRUYxRTU2NEUyMUIwNEYzN0M1MThBODIKKzoxMEY4MDAwMEUyMzlFNEUwMjg2MjYzRjM2MkY5ODQzRkUzRkJCNjQxNDYKKzoxMEY4MTAwMDJFNjJDQTg1N0M0Nzg3MTQ4NDdEQzFBMDE3MzIzMDhFNDIKKzoxMEY4MjAwMEYyQzI0ODgyRTVCNDFEQTY2REE2RjhGOTNGMjZCMzM4QUEKKzoxMEY4MzAwMDJERjc3MzhCREYwRDgyM0FEMEFCQ0ZCRjk1ODZGODRBOTgKKzoxMEY4NDAwMEIzQ0EyODRGQzEwMzBFRkM1NjlBNjlCMjgwN0NENzcxQTcKKzoxMEY4NTAwMDM5MkZDRTZEOEY0QjMyRTE3REFGNEQ4QkQ4RUYwRDY4RDgKKzoxMEY4NjAwMEVGQkI2Q0QyREIwRTAxMUQ5QjNFQTI3M0EwREZEOTlFQzUKKzoxMEY4NzAwMDY4ODhDODQ5NDAyRjQyMEM4RTJFNzkyQ0Y4MDdDNkJCRTkKKzoxMEY4ODAwMDFFRjg3RTA0RkI1RDI3Q0FFNTdERTNFRjFCNkY3MjMyMzUKKzoxMEY4OTAwMDU4OUI3RUE0RjBGODFDRkI3RDg5QzJDRURGOUJBMENCRDkKKzoxMEY4QTAwMDhFQjYwNzlCOTJFMDNBNjFGMUIxNkMzMTRGQTJGOEEwOUQKKzoxMEY4QjAwMEJEOUI4ODMyM0I5Rjk1QzZDQkUyOUU0RDQyQ0ExNEJDOEQKKzoxMEY4QzAwMDY3NDcxMkVEMUFCMUZDMjQ2RjI3QjVCRkZBNTdFMDhGRDYKKzoxMEY4RDAwMEJFNDk3NDNFRjREOTk0Q0RFNEM0NTNGMjg5RjVDODI3RTcKKzoxMEY4RTAwMEQ2ODAwN0Y4QzQ5QkQwRjM3OUExQkE2Q0I2NkVDNjI1NTIKKzoxMEY4RjAwMDhENzQ0MURFNDA5M0RCRUIwMkJCNEFFMEE3RjMzRDFGNzIKKzoxMEY5MDAwMDU3RDQ4QkVGNzk1MzdCMUVCNzg5OEYxQkU2RTc4REI1RjQKKzoxMEY5MTAwMEY1M0ZDQTY2NzY1QkU3Rjg3QTNBQUVGNTFCQkVFQjU0NjQKKzoxMEY5MjAwMDdGQjdBQkJFQjc3RUVDQkQ2ODhGM0YwNzU1MEFFQjhDNDcKKzoxMEY5MzAwMEUxNkQwMkNGNzMyNTg1RUFGQzE0MzJEMjZCNjJGMjVFNzAKKzoxMEY5NDAwMDlEOEY3MkEzQjRDQzBERUJGMzI2NTM2RDdCOTRGNjdGQTEKKzoxMEY5NTAwMDk1RjNDOThENzJFMDMzODgzN0JDM0FBM0UwMDhBQ0NGODkKKzoxMEY5NjAwMDRBQjhEMDlFOEU3MzMzODlBQzAyNjZCOTVDMTZGODg5QUEKKzoxMEY5NzAwMEJEMEZDQThCNzUyMDhGRUE3NDgxRkUyOUI0N0M1MURGREMKKzoxMEY5ODAwMERBNzc1MTFFQUVBRjI3QjM0Nzc0ODc0RkYwNjEyNzlDREIKKzoxMEY5OTAwMDk0RkY4MEVFODJGRkI0NzAwQjNFMjBERjBCNjM0MkRGRUEKKzoxMEY5QTAwMDY2MTJDMUE3OEJCMDNDNkFBQUJGNThCRUI0MjdCQjZCMTYKKzoxMEY5QjAwMDVFOTQzOUM3OUIxQUZBODI3RTdGQjUzMTg4RjJFNzQ2OUEKKzoxMEY5QzAwMEZCRTM5ODM3QjYzMzM3QjAwQkQ2RkRCNEExMUZFMzNENDgKKzoxMEY5RDAwMDM5QzQ1NTg1RjYxNjg1NzdGN0ZGMjRCQzc0NURCOUUxMDcKKzoxMEY5RTAwMEJEQjAwMzg1QkRENzJEN0ZGODIzODMyQTdGNThDMEE3REMKKzoxMEY5RjAwMDVEQzcwMjhFN0FDMkVFM0YxQURCQkUxNUVEQkJGQUE5RDcKKzoxMEZBMDAwMDU2MkY5Q0YzQTg4N0JDRDgxMjhDN0Y2MTlFRjEwMUJFNTMKKzoxMEZBMTAwMDJGMEI0QTJDREZCNzlCQkREODdCOUUzMUJCMEZBMEQ2RTYKKzoxMEZBMjAwMEM2RUVDMTExRjcyOUREOUIyRkVFQzk2MTcwNTNGOUM1RjAKKzoxMEZBMzAwMEVGQzlDMTcyNUI5NTA3Rjc3RjlENzZFMzFDNjY4N0RFOTEKKzoxMEZBNDAwMDUwNjA2OTg2N0IwN0JCREY5N0MzRkM3QkU0MDVBMzg3MTcKKzoxMEZBNTAwMERCODlBOEJGREIxMkQ5NzcyRTlBNTk1RTdCOUMxQzI3QzUKKzoxMEZBNjAwMDUyNUFENzNENUVFQkY0Q0MxRUJDOTQ5REM3RTI3OEIyRUYKKzoxMEZBNzAwMEI3MTRFOEIxMTFFMjU2QkFFRTdFQzhDRjlDODE4RjgxRUYKKzoxMEZBODAwMDRGRTYxNEY5NzJFMDI3M0Q2NjE5OTg5RjkxRjJENUE2Q0EKKzoxMEZBOTAwMDBFMDJFOTcxMEREQkUxN0VDQjlCNDhDMzlCNzIxRkU0MzQKKzoxMEZBQTAwMEFCMkY4MDdGQTYwREZBOThERDdCRDlDNTU3NTcxODVGMUQKKzoxMEZBQjAwMDA1NTEwODdFREIzQTdEMkQzNTIwRTU4Q0MwM0NFRjc3ODMKKzoxMEZBQzAwMEVBNEEyMENFNjg0NEZDOEJGQzQzRURGQThEODNFN0I0MTAKKzoxMEZBRDAwMDlFQzFFMzgwN0I3NTI5M0NFNjFDNjc3Nzc4QUU4NkJGQzQKKzoxMEZBRTAwMEUzRjkyODlEMzAzRUVFOERDRjIxQ0YzRjcxNTgxNzlGMEYKKzoxMEZBRjAwMDI3OTM4MDBCRTBFRkU0Rjc1NURFMTY1RDlGMUVFMEQ2RkUKKzoxMEZCMDAwMDU5OTFFRUI3NEY2N0YxOThGQTA0NjZBNzQyNUNDNjlEMUIKKzoxMEZCMTAwMDA2RkUyN0Y2RkREQjU3MzNGRUI4REQ2QzQ0N0U5OUQ0MzQKKzoxMEZCMjAwMDVFOEJGMTE3NTJDMUUyMjk1RUZBM0Y4MDY3MUFGMThEQjAKKzoxMEZCMzAwMDgzOUZFNjk4NjI5Qjg0RTczNkE3NEU1NEM3NUJBNjk5REQKKzoxMEZCNDAwMDZFQzRGOENFNkQ4NEY5RDM2RTlGQUE1N0ZERUVBMEMwQTcKKzoxMEZCNTAwMEMzMzRCMkY2NjNDOEU3OThBNkY5QkQ0MTJENUVCNEYxOEYKKzoxMEZCNjAwMDFBODE4RkE2OTFERkJDRUVBRkNENDk3NDYwOUNEODQzNUIKKzoxMEZCNzAwMEZBN0ZDN0I4NEU3OTBFQ0I5RkJCQUFCOENFMTE3RDBDQzkKKzoxMEZCODAwMENGRUJCRkUyOUNCNzY5MTE1RDE3RkRGRkIzMDhFRkU5NEEKKzoxMEZCOTAwMDFFOTczNjdGRkI2M0I0RkNEMzhEMDNCMUZDNEFEQTVENUMKKzoxMEZCQTAwMDRCNEU0MEZEOTYwMjJDNTdDODFGQ0ZDMDdCRDM0QkE3QUUKKzoxMEZCQjAwMDRGODBGQkNEOEY5OEQ5MzgyRTRCQTAwRDdFQUZDMjM1MkMKKzoxMEZCQzAwMDI0N0YxODZDQzkyQTBDMzE2Qzc3RjNEMERBRTE5MDA3RTYKKzoxMEZCRDAwMDUzNjE2MUU1RTNDNUZGNkIxODk2RjM3OTc5RDg4QjAzMjAKKzoxMEZCRTAwMEExN0M0NEZBNzg0NjRGNzFBMTQxODU1MjA0N0U5N0FBQzAKKzoxMEZCRjAwMDIyODVCNTlGMzg2QzY3MDZGODA5MkFDQTU5Nzk5MEI3RUIKKzoxMEZDMDAwMDZDNzUxRkE4OTczRjk5RDE5MzNFNkVFMEY2QjFCMEI3REYKKzoxMEZDMTAwMEZDN0NCREJGRTA3QkJGMTlDRTg3RjlBRDkyMTdDRTA1NDYKKzoxMEZDMjAwMEY4NDdCRUNGRUVDNzMyQjEzQzAyQkZBRjU4ODFGQjEzREQKKzoxMEZDMzAwMENCN0RDQ0JGMzdENkRBRTgwNkY5RjdCRDgwQTEwNEZDNEUKKzoxMEZDNDAwMEI4MzY2QjVFMzNGQ0JFNDBGMkM4QjIxMTQwRUZCMUQ0OUYKKzoxMEZDNTAwMDBDMDNGRDQ3RDdENTEyNUM1N0Q3N0M5QzkzODQ3Njg4REMKKzoxMEZDNjAwMDdBNUQwOUJFOUQyNEQ2NTM4NTdBREQ1MDc5RjA0MzQ2RUUKKzoxMEZDNzAwMDQ3RjU3QUEwRTMyRTg3RjdEM0FFNTVFQkE1NEVGOUFFNDQKKzoxMEZDODAwMDU5Qjc1QTdFRUM1NUVGMTNCNTFDRUNENDRGQUJDMkM4MzQKKzoxMEZDOTAwMDk3NTk4NDlERkZEOTBDN0NDQUQ2NkYyQkMwNjE5MDNCQ0QKKzoxMEZDQTAwMDNDRjAzRTU3RjIwRUM0QzQ4QTVFRUMwNzAxMUY5ODNEM0IKKzoxMEZDQjAwMDY0NTg3N0I4RTA0RjExRjYyMjgzQzA2NjRCODNFRkIyRTkKKzoxMEZDQzAwMDdBREFDRjA3M0YyMjI2RTBBMkRGMEYyMTdFNTYzMTc4NzUKKzoxMEZDRDAwMDM2NEIwREZDNzcyOTk4NUQyRUY2QkQ3NTYyQkVGQkQ0QzAKKzoxMEZDRTAwMEYzMkRCNUIwNzNFQzJFNDJFNTBFRkFFRThCMDc3RTEzQzIKKzoxMEZDRjAwMERDRjU1Q0NGNEUzNUY5MUYzNkQyMzlEQzY2OUY4NTc0NTIKKzoxMEZEMDAwMEJFODMwNDlGMDNGQkE2QzMxMkY4MjVEMDVCMjcwNzBGMTEKKzoxMEZEMTAwMDQ2MjVGODVEMDkxRkM2OTMyOTFEN0Y5NTEzNjcyRjA4OTcKKzoxMEZEMjAwMEI4QjRGOEE4RUI0NUFFNkFFMUQ2RTJBMThCM0UxRDY4RjcKKzoxMEZEMzAwMDlGQjlGOUVGQ0Y3NUNFNEIzMzlGMjY3RUZGN0NBQ0Q4QjEKKzoxMEZENDAwMEE4Q0ExMzNENUVDNUYyNjAwNTVDQzcyNTUyODg3QTUyODkKKzoxMEZENTAwMEIyNjAxQ0I1RDNFRkE0OTU2RkJEOUM2NzEzRkE1OUMwNzAKKzoxMEZENjAwMDc5M0YzRjRGRjU4NUNDRTRERUZEQkEwOEMyOTk1QkQ5RjcKKzoxMEZENzAwMDYxMDYzQzdFOTJDM0ZDMkUwMkZFQTY5MTQxNkM2NzkwMDgKKzoxMEZEODAwMEE1MUVFM0M0OUZFNEM4QzI1RkE2QTJCN0I4RDc0Q0M0RkYKKzoxMEZEOTAwMEI5MDQ1RTFEMDY0RjE2RTY3QjZBRjAzOUQzNjRFQzM5NzAKKzoxMEZEQTAwMEFFQUE4REJGRjZEMjRFQTJGOENCNENFOThFNjcxMTJGQ0EKKzoxMEZEQjAwMEJCNDVFQjg3QkI4OUY5QTc2RUUxN0VCOEIxOTUwQ0ZGMTcKKzoxMEZEQzAwMDI5NEIxMzcxREY5NjUyNzI0MjIxODNCQkVFNUQxNkY0MEMKKzoxMEZERDAwMDc4QzcxMUY4MkEwN0UzMTZEMTExRTAyNzc4N0RDNDRGQzAKKzoxMEZERTAwMDMxNEUyNEVFMzdENEUyQzc5MkRCMzM3RTdBNUIwRkJEMEYKKzoxMEZERjAwMEMxRkZBRUM1NkZDREE1RTM1Qzk0M0FGMDFFQjRCRkJCQTYKKzoxMEZFMDAwMDZDN0NEQzQwMUVBQzE3QkIyREFGMENGQzBCNTRBRTdFRTMKKzoxMEZFMTAwMEZEMzU2QzM2QTEwQUU4RTcwQzM4NzI5REIwM0VGQ0UzNzQKKzoxMEZFMjAwMDIwRjczQUE1MzJBMDY3RkU3OTgyRkVFMUM1N0M5RjM4QjMKKzoxMEZFMzAwMDhFRUJGNzRGNzZCMUYzRjMxNUJFMDE0RjhFMDFGQkYzNTYKKzoxMEZFNDAwMDk4OUU4NDNDOTBDN0NERjBGM0M5MjYxREVBRjU3OUFGQTIKKzoxMEZFNTAwMDBENzc4MTdERkUwMUU3QjdGRUVCNjVENUVGRDMwRDA4ODkKKzoxMEZFNjAwMDU5NTRGNzZDMENEQTkxQTIyQTBGMEU2N0E4REEwRkRENEQKKzoxMEZFNzAwMDk3QUZBQTJGOEUwQzU0RDUwRjNGMzY0QzU1MUVEMTMxNUIKKzoxMEZFODAwMDVBRDVGRTlBOTNFNUFBRjJBOEU4MDQ1NUZCNkJDRjRFMkIKKzoxMEZFOTAwMDU2OTVBRjhCRERBOUJFMjcyNEU4RUIyODRDODNGQkY5RjAKKzoxMEZFQTAwMDE5M0U2RUI4MzI1M0Q1RkU3Q0QyRjg2M0IwRUU2NkFGMjEKKzoxMEZFQjAwMDY1NzlEQjY1NjRBMUFBRkY0MjVEMERFNjQzOTM1NjY2NTIKKzoxMEZFQzAwMEM3MzREMEZGMjEzRDc1NzcyQjk4Mjc0NkVERjc1NEMwRjYKKzoxMEZFRDAwMERCN0FCNTlENTNEREZFRDgyQTkwQjVEREVFQTdEMEQ4RUMKKzoxMEZFRTAwMDMzNUFGQkE1QkZBMzBBQUU3NzI2QjdFNkYyQkM5MzZCRTUKKzoxMEZFRjAwMEM4MzVGQ0Y3NEFCNDc0QzVGM0ZFOUZCQ0E5QzM3REM0RTIKKzoxMEZGMDAwMEUyRDc5ODdEQkY3ODM3Q0I4NzJCMjBGRDkyRjExQ0Q4QTQKKzoxMEZGMTAwMDMxMUQwOTQ5NzBFRjQxQzNCQTMxNTI5NzFEQTNDNThCRkEKKzoxMEZGMjAwMEQxQTVBNkIzRDlBM0E2NzM0MkExOUFDRTg5NUUzNTlENjkKKzoxMEZGMzAwMDkzNDdBQUU5NkNGN0E5RTk5QzVBQTlBNkIzRDNBRkE2M0YKKzoxMEZGNDAwMDczRkEzNDM1OURERDAxMzU5RDMzQUJENTc0Q0U2RTUwREIKKzoxMEZGNTAwMEQzMzk3N0E5OUFBRTc5QzEwNUFBN0EyMTM3RkJCNDJDOTcKKzoxMEZGNjAwMDU2QkQ2RjkyQzJBNTU0NTI5MkQ5RkU2QUJDRUZBMTVGRjIKKzoxMEZGNzAwMEVCMEY3QkU0MEY0MUZGMjBGRDFGNUJDRjBEOTg1RjNGMzAKKzoxMEZGODAwMDk3RDIxRkYyRUJGRjQyRDYxRTg1NTA5NDk2MEZFQUY2RTkKKzoxMEZGOTAwMDNEODY3MUI1RUZDQTA3OEY2QUU5N0Y5NUY2MjlENTg3NDcKKzoxMEZGQTAwMDRGODAzQ0ExNzZDQzdBOTAwRkQzRkFGMzdEODdCRjY3NjAKKzoxMEZGQjAwMDNCNDZDOEFENzhCQjIxN0U1RkREOUIzQ0VCQTYyN0Y5QjUKKzoxMEZGQzAwMDNFQkI1NzNEQTlEOTY3QkYwNUQ5NEQ2ODhGQUY0NUJGMjcKKzoxMEZGRDAwMEQ2NzRDRUQ3OUZDMkFCNTFFMDU3N0QxNkY1RkY1QjE0QTgKKzoxMEZGRTAwMDkwOTExNEFFQjcwMDZFRkE5REI3MkM4M0QwMEY3MjE3QTQKKzoxMEZGRjAwMDg5RThGMTlFNkJDOERDRDRFMTdEOTk5ODg3NTk0NUVEN0QKKzowMjAwMDAwMjIwMDBEQworOjEwMDAwMDAwNzI3OENFRTJGNkMxMUNFRTI3RjlDQTE4Mzg5MENCRkMwNAorOjEwMDAxMDAwMjNCOTY5RjBEREFDMEU3NkVFRUI3OEVBNTVERDBCRjEzNQorOjEwMDAyMDAwN0JGODI3RjhERDczRkQ4NzYxOUMwQTkzNjdDOTEzRjQ5OQorOjEwMDAzMDAwRDU2MUVFN0YyMjEzNTlGRTI3NTFGQzgzRTNFRjYxRUM3QgorOjEwMDA0MDAwMUE4N0M1NEQ1Rjk0MDIwMURDNjdCQjRENUVEODY3MEYxMAorOjEwMDA1MDAwQ0EyNDI2MzdFODM3NTcyODFGRTI1NDI3MzQ3QTY1MjAwOAorOjEwMDA2MDAwRTc5MUREMTlFMUM1NzZDNDU3MjgwNUUzMDRERkYxQkI0QworOjEwMDA3MDAwN0ZDQUY1OUQwNDdFMTBFREJGNkRCRTA2NDM3ODExRjM3NworOjEwMDA4MDAwMjdCMERGNEI3OTkzRDNFNUE5REI4RDExRDg5NzA5M0VEMworOjEwMDA5MDAwM0E5OTMwRTNBOEQzODNGRUYwMzNDODZGNzdEQ0I0MEExMworOjEwMDBBMDAwQ0FEMkUxNTRDRjYyMEFERkU1QUEyOEVFRUYyOUZFQ0ZEQgorOjEwMDBCMDAwMDFERTZBNEMxNEZGNzQ4QTE3QjMwM0ZEOTM4MTE5RkNBNworOjEwMDBDMDAwQTlEQzQ5RTkxRkRDRDM3OTI0MDFDRjU4ODk3REZGNUQ4NAorOjEwMDBEMDAwNEJFMDUzMThFN0IwREM5MUUzMDU3QzI4MUQ3ODZFOEY2OAorOjEwMDBFMDAwNThEMUI4MjExNzBEM0RGQjAzMDUxRUNBMTNCMkVGQzY0OAorOjEwMDBGMDAwN0I3ODhENDYyRkVDMkZDQTI1NDZEN0QzQTlGN0NDODAyNQorOjEwMDEwMDAwRDhFMjFDRDk5RjE2RDFBOUUwOTYzQzAwQjdBRDJBRDdGQQorOjEwMDExMDAwNERGOUYxRkYwMEFBNDJGQkQ5MDA4MDAwMDAwMDAwMDA2OQorOjEwMDEyMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJFNTdEMEI3ODU0RDUwNAorOjEwMDEzMDAwQjVGMDNFNzM2NkNFNEM5MjQ5MzI0OTIwMjQ4NDg0OTlBRQorOjEwMDE0MDAwODQzQzIwMjE0QzgyMjAyQUUyRjAwODhEMUEzMEJDMTQxNQorOjEwMDE1MDAwMzBFMkU0MDE4NDNDMjA4MERFQzY5NjM2MDNFMUE1NDIwRAorOjEwMDE2MDAwMUIyQzJBMkFDQTgwNDBEMTAyMDY4QjgwMUFFQzIwNkFGNgorOjEwMDE3MDAwRjE2QTM1NkRCNUE1NUFCOTA5NTBFNTREMEMzRTY4RUJFRAorOjEwMDE4MDAwQURGRjVBNkJFRjlEOTk3MzQ4MEFGNkRFRkI3REZEQkUwRAorOjEwMDE5MDAwM0ZERURFQ0QzRUZCQkRENkRBNkJBRkQ3REU3M0RFRTJFRgorOjEwMDFBMDAwQ0Q4QzU2MTk2M0I2REU4Q0REMDBBOUQ5OTk1MzFDQzlENAorOjEwMDFCMDAwRDhCN0Y4Nzc0QjMwNjVDQ0M3MTg1NDY5NTRFMDlGQkQ2OQorOjEwMDFDMDAwMjBGNzIzQzVCRkNEQzVGODFGRTRGN0ZCNjJGQzBGNDE0NAorOjEwMDFEMDAwREU2QUJBRjRDMTE0Qzg3NzBDMzZCOUI3NDBEMUM2NzAxQworOjEwMDFFMDAwRTgzQTlGQjFGN0IxMUVGNEZGQjQwNUYyQjFGNDdEMzVFMgorOjEwMDFGMDAwN0U0RjA4RTdFRDEzMUUzM0Y5MUJBMTdERjE5ODk3MTc4OQorOjEwMDIwMDAwQjJFQjE4N0I3NkJFRERBREMyNThBNUNDQTkzMTk4NUZBNAorOjEwMDIxMDAwMzlGMzY4MkM4REIxQkY4Q0ZFRkJDMTM2Mjc2M0ZEOUQ4MQorOjEwMDIyMDAwREVCRUNFNjE4Q0REMUI2NzRBRjk4MEU2RTFDRDlFMDQxRgorOjEwMDIzMDAwRjM2NjIzRTMxODRCQkM3MkZFQzY3NTMwQjZDNkM0ODY5RgorOjEwMDI0MDAwMzMzNkQ5QzE5NzMwMUJENzA1RURBNjMwOEYwNUM3OTkzNgorOjEwMDI1MDAwQzZCQzE2MUNGNzc3MTczNDBGOEI4MkQ0MDRFNTMwREY0OQorOjEwMDI2MDAwQkI5ODhGQkVDRjYwN0U0QUVGNjYwMUFBN0YwRjZCQTM1QgorOjEwMDI3MDAwRkM2RjIzNzI5M0VCNjE3RTkzMUVDRjRDNjdEMEU2NjJENgorOjEwMDI4MDAwNjlEQjcwMkNGRjg3RDVFQjc2QzJCODM1MzZFRkJEQkQ4NAorOjEwMDI5MDAwRTBGQkY5NjRFRjY3N0QxMEVFRUIzOURDQUYzNkRGNDk0OAorOjEwMDJBMDAwMEE4N0RGQzVGRUM1MjM3MERERTM2Q0NFRUJGMjUyMTk4MQorOjEwMDJCMDAwN0JEREM0MkE5QkVENTAzNkFFMzdDRDlGOTkxREU5OTM2NworOjEwMDJDMDAwMDc3N0Q3Q0YzMkM2QTA1RDZCNjc1NDJFMUI4Mjc5OEYxQworOjEwMDJEMDAwM0QxMUQ2RkYzRDgxQzJFRjc5QUE4QjcwOUQwNUFBOUQ4NQorOjEwMDJFMDAwRjUwMkY4QjczQTU1QkYxNUM2MkMxQzVEREExN0Q3MDVDRAorOjEwMDJGMDAwN0Y5MTNFQzBEMzQ0OEZDQTEwQ0ZCRjVFMEE1RkEwREU5RAorOjEwMDMwMDAwQUZGMzU0M0ZEMkM0QzQwREUzNEY2M0ZCQTJEMTUzOTY2NQorOjEwMDMxMDAwNDdDM0ZBQzc3RkQzNzY1RDAwRDJDMjdFOTZFMzZENTk5QworOjEwMDMyMDAwN0M4QzZGRTE3RjVGQjI4REUzNjIyMEJEMkQ2MThGOTk4MAorOjEwMDMzMDAwQzFGQzZGMUJBMDJGMkZDQTgxQkMyRDk4OUZDOENDQzFCOAorOjEwMDM0MDAwNzIxOEY3MTBDMjAxRThBN0ZFQ0Y3OUEzREUwODY5QzdDQgorOjEwMDM1MDAwNTg5MzVBMENFQjJFNzE0NkY2RkEzNDAyQjI4M0Q4QTBBOQorOjEwMDM2MDAwNkY3MURFNkE0OUI0RDdERTMzN0NCRjZFNzA4RjdBMDM1QgorOjEwMDM3MDAwNjhGMjc2QzU1M0VFMjRCQTcwNkE0OEZGNjU2NkU2Njk4RQorOjEwMDM4MDAwRUVBNkREQUU3NDQ1RDAwRjYwMzc5RUIxM0JDNDVDM0IzQQorOjEwMDM5MDAwOEIyRTY5MTc2MUJENEYzQUJERjNCMTlGNDUxM0ZFMzJGNQorOjEwMDNBMDAwMEJEN0M3Q0NFQzM3NDMwMTZFRjNERjAzQjg0MUY5RjE0QgorOjEwMDNCMDAwMDY4MDdDMjY2MzI3MUI2Q0NDNjM2NUVDRDMwNjA3RTVCRgorOjEwMDNDMDAwNEYzNTI0NTA3QUE2QzE0OUU5Qjk4NjJDMkFCRkQwRTAxRQorOjEwMDNEMDAwQTZGQzIxNjdGMUY3QjFERkIyRDU5RjlCQkQzOThDQUQ4QgorOjEwMDNFMDAwMEE5Mzc4RTRGMzU4MkNFODc4NTVGMkYwM0ZCQTYxQkNGMAorOjEwMDNGMDAwNTVFRjVBMjg1RkQ5REMzNDFFQzFCMTM4RjlGOEIyMDg3QworOjEwMDQwMDAwRjhCRUY4MzlDNThEREZBQjVCM0M5QTFERTYzM0ZCMERCQQorOjEwMDQxMDAwRUY0QTI0OUZCOUVGQjY0RDA0RjBCMURBQ0IwQUYzRTIwQworOjEwMDQyMDAwMTYxQTUwQkMwMkM3MUJGNkUxQzk3ODg0REY2NzBEMjM5QQorOjEwMDQzMDAwNjgzRUE3MUIzQzM0MUY0RjRCRkI1QjcxRDBGRTZDNDNFNworOjEwMDQ0MDAwMjFFNTNGNzIxNjNGOENGNTNERUM3MzBERUI0RkQ4RDk4QgorOjEwMDQ1MDAwNkU0RTgyRjIwMjhGRTJDMUZEM0RDQUMzRkM3RUMwREY1OAorOjEwMDQ2MDAwMDY4QkQ3OEI3NEIzMjFEMUU2QzZGRDNFN0FGMEU0QTdBNAorOjEwMDQ3MDAwRUY4MzcxM0ZFOUVGN0QxNEU5N0E1QTZDNzk0MTFDN0M3NgorOjEwMDQ4MDAwOUYzOEEyRDQ4Q0Y1RUVGQTg2MzFDQzRCRkFCRUZBQkU3OAorOjEwMDQ5MDAwRTZGMEE4MTU3ODM5RkY5QTQyNzAzQUJGMkZGQjhFOUI4MQorOjEwMDRBMDAwQTBCRkQ3OEVBODRDODU3OTc1NUUzNkQxQkMzQThGODZCMQorOjEwMDRCMDAwRkI5OTEyQUNCN0U4MjU5NUU4N0FEMTYwQ0RDRjVDOTg2RQorOjEwMDRDMDAwQ0ZFRUMzNzI3MDlERDAxOUFDM0Y0QjcxQjI3QUEwQkYxMgorOjEwMDREMDAwQjNCQkJFOUY4MDc4OTBFMzlGOEQ2REZFRUEyM0U0N0JFMworOjEwMDRFMDAwOUY3MEJFQzc1OEYzQTc0RjIyNUZFQzk3RTA3RTA4NzI1QgorOjEwMDRGMDAwMTcyQzZDM0FFRDUzNTYxNzMxMTlFODZCQkVDNkJDM0M0RAorOjEwMDUwMDAwRUZDREM2RkNEOTcwNzY2RjMxRTQ4N0VGNEUxQTgzRkJDRQorOjEwMDUxMDAwMDhDNzczNjYwNkY5NUFDNkVFQzc1MzdGRTgwQzhFQjc1NAorOjEwMDUyMDAwQTM3OUY2NDc0RjQyRkVCQ0RGRTRCMzQ0NDNDQTlBMkY5NworOjEwMDUzMDAwQkM4MjdDNzlBQkREQkQ4REUxM0NDREUxMzhDRjg3MkQzMAorOjEwMDU0MDAwN0M1RUJFNkRFMUVFNkQ0RUVDQ0Y0RjdDMDBDQTM1MkM2QgorOjEwMDU1MDAwQUY3OUYxODlCRUI4OEU1NzAxMDYyMzIwRkZFQUJBMDhBOQorOjEwMDU2MDAwRTI3N0FGNUFEQ0M3RUFCMURERDNCQ0JGOUZGRkU0ODFCRAorOjEwMDU3MDAwRTMwNzMwNUQ1QjlCRkYwMEE0QkY3M0M2MTJCQzJCMUU1QworOjEwMDU4MDAwOTkzNzA4REI2NzI3MDE3QTgwM0ZGRTYyQkYxMjA4Q0JFQworOjEwMDU5MDAwNjU2Q0YwRkE0M0NCMTI2MUJDMjExQkRCNEQ3RDIxQ0Q5NAorOjEwMDVBMDAwREJBQTM0NjI5QTlENUM3ODQ0ODVGRThGM0E5RDM0OEYzNQorOjEwMDVCMDAwQTEzQjVENkExMjZFRDdCRUZFOEY2RTQ5MjNDMDI5ODhBQgorOjEwMDVDMDAwQkY0MTAyN0YzOUVCM0YxRkQzMTdEMjVEN0Q5QjE3QzUxQgorOjEwMDVEMDAwNDBGOTIwQTVGOUNDNTIxN0QyRjkxRkYyQkQwNEJGMjY2RAorOjEwMDVFMDAwRUFFN0E1OTYyOUJGQkY5QkUxM0E3Qzg5MzY5Qzc3QTlBQgorOjEwMDVGMDAwRTZBNkYzMDk5NjZCODFGQ0Y5QkQ2OTlCMUY4MjM1RUU3NworOjEwMDYwMDAwMzNGOTM2RDNGOTU1NjY3MzZGNDNCQzE3RkI5RTQwN0NCNAorOjEwMDYxMDAwRDc0MjdEMUZFNDZCRjM3QzUxMzc0Mjc5RUQyNzAzREMzMQorOjEwMDYyMDAwNDA1MTJDRjk5OUVGMTUyMjNDRTZFRjdENzQ3QzVGQThEMAorOjEwMDYzMDAwNzc3RTI0NzMwMzA5QjBDQTk3MkU4REM3NzYyQzk5MzEyMworOjEwMDY0MDAwNjQwOUU3RjczNkM2Q0Y4NDc2MEZFNzhDMTk4NkY0NTUzMAorOjEwMDY1MDAwQUMzNkQzMzg2QzAxMUZFNzcxNzFFRUIxMzYwMDRFQkM3OQorOjEwMDY2MDAwMjA1NUE4RjczMDdDQzZFRkIxMkQzMTg3OTI1ODEwM0Y0NgorOjEwMDY3MDAwMEI1QTk2QkFDQ0QwRkUzQUFGQ0RBREUyQkU3MUY5MTJBQworOjEwMDY4MDAwRUJFQ0MxNzMxNENFQkZCRkUxN0U0QkQ0NDRCRjhFMjlDNworOjEwMDY5MDAwMjlDNURGRTFGQ0QzQzQ3OTI2RkI3QjVDNjNCRTMwRTg2RgorOjEwMDZBMDAwMjcxOUJFMkI3ODNFNkJGQ0RDREUwNjdDQTUzRTNGNzgyRQorOjEwMDZCMDAwNkVDM0I4RTFBRTYxRDRERTgzN0MzODA5MEVFOTNDOThBNAorOjEwMDZDMDAwNjdEMkUzNTYzQTA3QUU3NUZDOEIxNkZCNkEwNUU4NzZFRgorOjEwMDZEMDAwNDEzOEU3NjM2M0M0RjkzQjNEQUVGMTYwMUJBQ0Y3NjBBMgorOjEwMDZFMDAwQjgzN0RFMDVGNTY2OEI3MzlGOTlERDRFRTRFRjVCQzM4QgorOjEwMDZGMDAwM0Q3RDcwRkMxQTVCNDcwQUFFMDFDRUQ1MjRDQ0NGNTdBNgorOjEwMDcwMDAwQkRGREUzRDNFODVDRDVDOTMzNTc5QjQ3NkJCOEM3ODVCQworOjEwMDcxMDAwRURBRkI1QkU5MURGMkVGRUQyQzRGMjgwMEUxNjNGNkE1OQorOjEwMDcyMDAwMjU3RUQxODg3QzE5RDZENTE4MzlEQzg2N0M4M0JENjFCRAorOjEwMDczMDAwQUE3OTBCQ0VEOTlCNzlDQkFFRkUxNjQ3RTYxMzVGNjkzQgorOjEwMDc0MDAwNjRBQzVCNzhCRDA2RkJERjBCRkMyNjAwRTc4NDE3Rjg4MgorOjEwMDc1MDAwQzBBOENCMUQyQUE3RjdENkMzRDFENzIxOUY2NTlFNDgzNQorOjEwMDc2MDAwQTA5RjVCMkU5Qjk4MzdFNDFDMzRGNjAzRjhGMjIwMUMwNAorOjEwMDc3MDAwNDdCMzA4RTYwRDM5NTczRDJDNDZDMzdEQ0JFQ0IxRkY5RQorOjEwMDc4MDAwREFCQUM1RkM0NzBBRkM4REVDM0MxQUMxRUMwODBGRjgzQworOjEwMDc5MDAwNkVFRjc5NUQwN0M1QkE3RTg1RUI4Mjc0N0I3QUYxNjQ3MgorOjEwMDdBMDAwODRGRkNENUYzOENDQjhCRTlCQ0Q5MzUyNTBBRTgxNzlEQgorOjEwMDdCMDAwNEZDNzc5OEZGQUMyQTQ5RkY3MzdFMUJBRkNCNUNFRkZENQorOjEwMDdDMDAwN0U4NUY5NENCODFGM0ZEN0ZDQjgxRjVCRjA3ODA0MzgyMgorOjEwMDdEMDAwQjZDQ0NCRjFFM0JFREZBN0YxQkMyRjRBMjNCOUI2MjVENworOjEwMDdFMDAwOTJGOTkwOEZCNDRDOEFGN0ZCNUNDODBGMTk5NzdCN0IwQQorOjEwMDdGMDAwMzM1RTFFMjZEQUNGODhBN0Y2N0RBRDAwNTJFNDA3Nzc3OAorOjEwMDgwMDAwODc4QkZFRUJERTE5OENFNTRCOTM4ODhGMzQ1QUZDQUI1QgorOjEwMDgxMDAwNTNCMUZGMUZBOUM0ODc4RjBBQkVCRDNFMjY3MEI3MEExOQorOjEwMDgyMDAwRkRBRUZGM0M5RUUxMzg0NzU5MjA2OTAxOEU1MzE5NEVCOQorOjEwMDgzMDAwN0NGNzI2OTNFOURFNDk3NkFDRTc0OThDMDU3OEVGRkIzNworOjEwMDg0MDAwODc0QUU3QzRGQTNDQzhEQjg5NkY0RjZGODZFRkVCMjcxNgorOjEwMDg1MDAwNzkxMkMzQjE5RjQ5RjEyNjlBOEZDQUVBRThCQjhCQjdEOAorOjEwMDg2MDAwRkJDOEMyRUJDRDE0RjhGQTkzQzAwRkVDNkJEQUY3REVERAorOjEwMDg3MDAwODkxMTY2QTREQjREQUVCMjQ3NjgzRjMwNEZBMjAyRjM0OAorOjEwMDg4MDAwN0RCMjIyOUQyMURGOUM1OTc1QUI4QkU4QTVFOTcxRTIxMQorOjEwMDg5MDAwNUZEMzA1MEU2NDdGRDhDMDM2MUNFNTY2RkUzNzYzRjY2RAorOjEwMDhBMDAwQjYzMEM0RTdCNENBQjA3NjM4NTlEOUQxQ0E2NTkxNEVDQQorOjEwMDhCMDAwNjgzRkNEQUIwNkFDQzA0RkQ5RDQwMjRGOTc1Qzk3OEE0NgorOjEwMDhDMDAwRTM3QTY4RENEQUU2ODE2OTI3NDNFOEI5Q0MwQTdDMDI3RQorOjEwMDhEMDAwRkE3RjIxQ0NGQjA0Q0RFQjQwMUU5NTFGMDBBMUU2NUIwNworOjEwMDhFMDAwRDg0RkM3MkJEMjc3RTNCRTYyMTU3MTQyN0YwOTk0MjM5QworOjEwMDhGMDAwMUU1RUVCQjA5MTlDREExMzNEMzQyMkZDODcwODNBNDUyQQorOjEwMDkwMDAwQkMyQ0UxNzgwNzc5OERGMjhERDMwNzkxM0VCM0M5QzIzMworOjEwMDkxMDAwRTlDNkI3Mjc4Q0YwNUEzOEQ5NDY3OEVFOUMxRUJFRDk2NgorOjEwMDkyMDAwMEFFNUY3MEFCRUQ1MzgzRERDQTM0MEJEQzY5N0FDN0VDQworOjEwMDkzMDAwOTM4QkY0MjRBQUU3M0IxODQ5RkRENjY4M0M1RkYzNjIyOQorOjEwMDk0MDAwM0FEMUQzM0VDREZGREM3NjJDN0YyRDhDRThBMTI2OEFEMAorOjEwMDk1MDAwOEY1QkYzNEE5MkEwMzc4RjZCMDU4RTdCRDA0QTc0NTAyMQorOjEwMDk2MDAwMTNFRThDQTZGMkZGOEMyMzNBMTk2N0YzQkU4MkYwMDBENworOjEwMDk3MDAwQkFBQjQzMzlBMjQ2MEI2NEM0MDA3QzhGMDlCQTNBMDY2RAorOjEwMDk4MDAwNkQxMDdGQkVCQTQ4OUEzNzZENzlDODdCMUI5M0I3MjAyQworOjEwMDk5MDAwM0VCRDFBMkY2NzNGNTBBOUZDOTg4MzhGN0Y2QzBEMUZCNworOjEwMDlBMDAwQkZFNEE3RDVFRjMyQzBEQkIxRTJGMTg5QjM2MTFFQzc2NgorOjEwMDlCMDAwRUEyMjQ4NkVGQzczQkQxQUQwQTI1MEVGRTk3ODJDMDNFRQorOjEwMDlDMDAwRUE1RDU4NzI2MkY4MDY5ODdGREJCMjhGNTM5MDNFNEExOAorOjEwMDlEMDAwOTZENTE2NjFCQjkyQUEyNTEzRjFEQ0VDNjk1Rjk2RDQxQgorOjEwMDlFMDAwQzBFNjBGRDlDNzI3NUM5RURGRTE3QUJFNzU3OTNGQzRBOAorOjEwMDlGMDAwN0RCRjIwQTc2RDBFQ0FDRjE3QjRENjY3NTBGRjg4OEQ3NAorOjEwMEEwMDAwRjMxRUM1RUYxNzVGRkU2QzNCOTdBQjNCMzJGMDNDOTg5MworOjEwMEExMDAwNkZFNkY0MjFDRkQ1MDU4MkZFNTZBNTdBOEZEMTM5MTEyNAorOjEwMEEyMDAwMUU5ODg1RTc0NzQ0NEUyQkU3Nzc0QkFFOERDRjlGNjlFNQorOjEwMEEzMDAwRDlCNjRGODE3MUFBQzM1QkU2NTNBQUZBNzNCMTlGQjNDQgorOjEwMEE0MDAwNEEyMDRBNDkyM0Y4Nzk3MTNGOUQ3MzA0QTIxMEVFNUU1MworOjEwMEE1MDAwMTM5N0U3QUE3N0U4RDc4NTdGNjY5ODU3MzVGRTAzREFCQworOjEwMEE2MDAwNTUzN0FCOUUzMEM0MzVGMzZCMzhGRjZBQTYwNUVCQkIzOAorOjEwMEE3MDAwODI3ODgyN0UwODRGQ0NGRUU3NTkzRjA0Rjg1NzNEMzcxNQorOjEwMEE4MDAwMzAxRkY1ODdFQTk4MDMzRkI5ODlFQTQxM0JCOTRGRDQ1MworOjEwMEE5MDAwMkJGMzcyM0Q1N0NFODdBRkVGOUNBMEZGNzM5MkZFQTc1QQorOjEwMEFBMDAwNkI1MjlGQTdGMTJGQkNEQzg3QzYzRjNCQzk5RjgxRjBFQgorOjEwMEFCMDAwQkZBMDg4N0FDRjU5NzkzREEwMDYzM0NFRjMwNTRFNEZCQgorOjEwMEFDMDAwOEY1OTdDQTY3MEIyMEIzMEEyRTdFQUI4RTZFMTA4MTdBRQorOjEwMEFEMDAwQzk4NzYwMEUzRTEzRDQzRkJCM0I4OUVBNEJCRUM1OEEzMworOjEwMEFFMDAwMTlDMzc2RDVCQjEzQjc3MEY5NENFOEIzMzg1MUE4NUY3QQorOjEwMEFGMDAwRjUwQkRFM0ZFNjcxMUY5RTc5M0U0OThDQzdFNTY5MjMwMQorOjEwMEIwMDAwRkU4Q0VCNEQ0RTM1RDE3QTFGOTNGQzNCNTJFRTczNzc0MgorOjEwMEIxMDAwQzIyNDgwN0ZFNjA2NEQ1N0ZGNDJBNDc2QUYwN0ZBMUQzOAorOjEwMEIyMDAwRThENzdGOTdGRDBGNEM1NTQ4M0VFQjZGQzA1QjVGQjUzNAorOjEwMEIzMDAwRTM5MDE1RjdEM0IzOENGNkFCNzE1RUVFNTRBRTM3M0U0RgorOjEwMEI0MDAwRkY3QzE3OUU1NDhFMzcxMDAzMjU3RDM4QjkxQzZFNDFFQgorOjEwMEI1MDAwMzhGRkE5MEIxRkY3MjUwMTVGQUQ0NjE4QTQwNkUxQjNDNgorOjEwMEI2MDAwMkZDRjlCODRGQ0ZGMDJFNkYxNUM4ODgxN0MwRUNBNDE5QQorOjEwMEI3MDAwMUNERTMyMkZFMTZDQTRCMzY1N0Y5QTkzRDQwNkVERUZBRgorOjEwMEI4MDAwNDZGODEwQkY3N0Y3NDE3QUVDOTI1RjJDQTA4RkU0QTA3MworOjEwMEI5MDAwM0U1QTM5RjQ2NDNBRUFBOTc1MDNFMTI4RTg1QUNGOUMzMQorOjEwMEJBMDAwMEQ3OTM2REM0RjczMzdFNkQ5Q0E0MkYwRDBCODYzRTgyNgorOjEwMEJCMDAwMTEyN0MwRjlEQzBFQjMxQkQ5NzJBM0Q5RkYxMzk0QTc3OAorOjEwMEJDMDAwMUI3N0E4Q0QzRTQ2RTUzNjg0RUYzOUZCRUJFRjYxQkRFMAorOjEwMEJEMDAwMzkxQjYzRjI1MTVFOTZFREU3NkVCODdGNjA0NTA4REMyNQorOjEwMEJFMDAwQjM3N0U4RjEzMEI4NTk5RjFGNzI0MDlGOUY4REJDNjE2OQorOjEwMEJGMDAwRDg3NzZGOTcxN0QwRTc4NzFFRDFFNzU5MDc2MDBCRjBCQQorOjEwMEMwMDAwQTBEQTM4OUVGNjhGNzAxRjcxMDI5RUZBRkI1NTM3N0U3MAorOjEwMEMxMDAwRUE2RjlGM0M2NTAyQ0ExNzFCNTU3NzNBOTRGNzVGNTJGQgorOjEwMEMyMDAwN0NGQjYwQzg5RkRBMzhEQjhENjhBRTU0N0RGMzdGMDhBQgorOjEwMEMzMDAwMzhBQ0ZDNzhGQzExM0MwRkNGQjJFNjNGNEMwMDNDQ0MwQQorOjEwMEM0MDAwNjk1OUE3OTk5REI4NkUzRERERUUzMzA5N0E3RDlFREIyQgorOjEwMEM1MDAwRDlFNkY5RjVFNTU3RUVFQkE1MDI4RjJDMkI5NDlFOEM4NworOjEwMEM2MDAwNzg4NzcxRUZGNEMwODQ2QUVBMTcwRjNEMDk0NzY2NjUxQgorOjEwMEM3MDAwMTExMDNBQzBFQzg2RTY3NTFBQ0E2RDU3MUZDN0M3RTU1MgorOjEwMEM4MDAwNDFCQkM3ODlGMDI4MURDMUNCNkVBQzFGQ0I0RTBDODU3NAorOjEwMEM5MDAwN0ZBQ0Y5RUQ3ODlDNzdFOUMzMEFDOTBEQTVCRkNDN0M4MAorOjEwMENBMDAwMDNDRjgxRjYzRDMzNkVBM0Y0Q0U0MjVBQkZCNEU3Q0RGNQorOjEwMENCMDAwNkQ1MTAyOTE5MDc3OEM3MDFFNjg4Mzc2QjNGRDhBMUIwQworOjEwMENDMDAwRTc1REI2REMxQUU0NjdGMEJGOEEzNTg2NzlBQzBGMjk5OAorOjEwMENEMDAwODdGOUNGM0Q3MEU4QUYwQUY0NUZCOTUxREY2RTFFRjBCRgorOjEwMENFMDAwNTlFNDVGNTU1QkJGQjU4NjdFOTc3QUUzOEQyRDlCNTVBMgorOjEwMENGMDAwNUNGNzZDMzk3RkRGMjg4NkVCQkE5MTU3NjVCRDg0N0M0MQorOjEwMEQwMDAwNzMxMjMzNzA2RTRDRUI1REJDMjMxNURCQURFN0VEODBFOQorOjEwMEQxMDAwNUQ5NkUyN0E2QkVEOUExM0Q3NUI2QjYzODEwODk4Qzc5NworOjEwMEQyMDAwOTE0OENERTM4MEVGOTczNjQ0OTIxRDZEOEUxNUU0Qzk0RQorOjEwMEQzMDAwN0M0QTU5NTgzRUI2NzM0NzYzQkI0RkRGRTdGNkI0REFENworOjEwMEQ0MDAwMzg4RUVGREE0RDBBRTk1MUI1NjhGQ0M0RkNCMzNDM0Y3QworOjEwMEQ1MDAwOEYwNTY4MUQ0ODI3OUVEMEY1RjlGNTc5RDZDNEY1QUYwMworOjEwMEQ2MDAwMUE3M0UwMTBDMkEzOEFCNTcxRkQwOUYwRTg5MUYwMDM4RgorOjEwMEQ3MDAwNzhENUMwM0E4RkM2QTJCQzY1NjhDRkRDNUUxQzc3ODE4RgorOjEwMEQ4MDAwOURDQjRGMEIwRTdDNkIwRDJEOTc3QUEwRDQ1M0E1N0Q3OAorOjEwMEQ5MDAwNzc1MzQ2NzEzODhFQjM0MkYxM0M2MTgzNzlBRTEwRjJERAorOjEwMERBMDAwQjU2RjVEMThEMUVGQ0NDREZDQkMwMTM5MzYwM0UxQjI5MworOjEwMERCMDAwN0U1REEyMUJFNThDOTkyMDk3ODdFMUJFOTkxNzRFRjVDMQorOjEwMERDMDAwNDBERTI1QkI0QzA3QzhENTVCNUM1OEJGMzk4MEU3QzYwMQorOjEwMEREMDAwRkE0NzVEMjQ0NzgzRkM0QjcwRTk1ODFCRTZERkEyQTA2RAorOjEwMERFMDAwMUNDQ0U1OThGNUVCMzI0OTBFN0Y1NTlFNTM2QkI5REM3MAorOjEwMERGMDAwRDU4RDVDNENFNUFDMEY5N0UzM0ZDMkE1ODRDOEMxNUZCRAorOjEwMEUwMDAwRjRGNjdFOUFEQTNCQjhBRThBNjU5RTQ0M0M3NzJBMjY5MQorOjEwMEUxMDAwNkIyNkI0NTdCMUNBQjg2QjkyMUZCNjA5MzlCMjAzRDY2NAorOjEwMEUyMDAwOEZFQjM4QTkxNEJGNjUwQTkxNDdCRjE2RTdDOEYwMzFBOAorOjEwMEUzMDAwOUVFREEyOUUxQkVCNTU5ODI2M0Q3NDBCOEVGNzk4QzkyQworOjEwMEU0MDAwODlFMzc1QzFEQkUzQzlDMDc5OUM1QzE3OTY4Rjc0MzY2MgorOjEwMEU1MDAwN0MwQ0I3MTcxRENCRTNGQzNERTIzQUU2RjFFMzc5OUE0RgorOjEwMEU2MDAwQzZGQjY1NjkyNjVEOUExMDBFRjQwN0ZEOUMyQ0UwRjYyMgorOjEwMEU3MDAwRUFDOEVCOEFDOTRFMDc2NzM1RjE3OUUzM0FFQ0EyOUZERAorOjEwMEU4MDAwMEFBREY4M0Y2RkVFNjYzRTEyM0U2QzFDOTcxNzRFMkU3MQorOjEwMEU5MDAwNTRCNkYwNzkwMTdFMjEzRkZDOTEzMEIyRUY5RDE0RTcwQQorOjEwMEVBMDAwOEY4NDMzRDBDRDMwQjJEMzBCN0VCNTRFRDBDQjNBMEIzRQorOjEwMEVCMDAwQTcwM0RGM0NBRTNGMDVFOTg1MTEzREFDMTc3QUQ2NEM2MAorOjEwMEVDMDAwODE1RkI2OTZDQkI1NDAyRjFDQ0U2QjEzMDVCRDMwRjZCNworOjEwMEVEMDAwMzdBNDg3MDIyNzk3QjNBRjUxNUYwMkJDMEY0OEVCN0Q2MQorOjEwMEVFMDAwQTVERTI0RjFDRENDRkU2MUZGQ0MyRjUyQkI3RkQ3M0VENworOjEwMEVGMDAwMUY5QzlGNTUyRjNDMUFDNUEwREU2OTczNTNCQzFCREE5QgorOjEwMEYwMDAwRDc2QzVCMTFFNTgxRjQ5NEQ5MTdFNTgwRjE0RkZCRDVERgorOjEwMEYxMDAwNDI3RjM3RjAyRTREOTM3NjY1OEY1RDAxRkUzMzFGRkZDNAorOjEwMEYyMDAwRTk0NDc5RTdFMTg5QjhCRUFGQjY1OTFDQzgxMjE2RUM5RQorOjEwMEYzMDAwQjA5MkZFMzQ3RkVGM0M5MkIzMjFERkNFRjNBQjNFNTc0RAorOjEwMEY0MDAwMzE3RjQwNkYzRkFGRkFGOUEzRjE0RTgyQjcyRkM5OTRCQQorOjEwMEY1MDAwODA2OTIwODk0MTNBN0ZBQkM1MUQ0MEJCRjQwN0FBMUJCRAorOjEwMEY2MDAwODYwMUI5Qjk2MzI1Q0VDRkQ4MUVFNzcxMTlGMEJEQTBBRgorOjEwMEY3MDAwNTkyREQ1QTJBRjJDNUYyMEY4Q0I4MkJEMEY3RjhFNzY4NgorOjEwMEY4MDAwQkQwNTA2N0I3REE1RjA1QjE4RURGNTkzRDIyMjdCN0QzOAorOjEwMEY5MDAwOUEwREZGQjg5RTVEOEY3MjEwQzBDNTFEQzA3RDBCRjMwQQorOjEwMEZBMDAwNDkyNzMyRTFGNkRFQzZFNzFFQ0Y2RDQ3Nzk2MUVCM0I5QworOjEwMEZCMDAwNTE0QTRFRDA1RTJGRkQxOTlEQ0RFNTlCNUU3MUY2QkM2QQorOjEwMEZDMDAwMUYyRjA4QkI2RDEwNUY5QzZGMzkwRjI4QzgwMzQwNDE2RAorOjEwMEZEMDAwRTc2OThEMjUxMDc1MTNDMEEzNjZCMzg1Rjg0Q0NEQUVCNworOjEwMEZFMDAwNjdCNzNGODk3NEY2MjcyQjlERTdENUJCREVGQ0MzOEQyMQorOjEwMEZGMDAwMjhFRkVFQjFGNDJBRTJDQkIwMkJGMTQxM0MyRDcwNzIxOAorOjEwMTAwMDAwM0I5OUM0NEJENTJGREZENDlDODNGOUY3MjVCMTQxRkMyNAorOjEwMTAxMDAwNTRFRjM5QTRCMUMxNTdDMjcxNkNGMzIxQURDRERFMERDRgorOjEwMTAyMDAwOUU5QURCQzc5MzlERThCOUFGMzVEQzA3QTc1RjUzNTg5RAorOjEwMTAzMDAwMUZENzk1RUQyQjM3QkYxOTg1RjIxOEMyMDlDRjI1ODkyNworOjEwMTA0MDAwQUYyRUZDMTlFQTQzRkYxMzVGQjk4RUVBMzk1MEFGRThCRgorOjEwMTA1MDAwMDk3RkY5Nzg3NkEwNUVCRTNGOTJDNUMwRjg5NTFGNTkwQQorOjEwMTA2MDAwRkQ0NTg4RDdERDhCQTM3MDFEOUY5OUVCMzg5RDNGQkQ1MworOjEwMTA3MDAwMjIxRUU1QkE0QThCMkZERTQxMjlGRjVFRjlDQ0ZENDRFMgorOjEwMTA4MDAwN0Y3Mzk1QkE3ODQ3MEVEMTc3QTI4OTY0MDY1RjIyQUU0NgorOjEwMTA5MDAwNkZGNkM2NjlCNEJFMzlDQzRCRjQ1N0Y5QjQ1QUVDODczNQorOjEwMTBBMDAwRjQ0QjMzMkJEQ0QzQ0QzRUY5NThGMEE1Q0ZCNjAwNTIyQworOjEwMTBCMDAwNjE3RDlGQTFERDA2RjlDNkVGNTRBMUU3MkVBNEYzRkJFNQorOjEwMTBDMDAwN0VCMTU2QzYxNjUxRkU0QjIxQjdFRDRFMzM0OTdCOTY4NQorOjEwMTBEMDAwMkQ1NDVGNUNCMDc1NTUyQkUyRTc0Q0IyQTcwRkNFMTNEMQorOjEwMTBFMDAwRTBFMDEzRjA1MkJFODU3RUQ1REYxNkY0RTFGODYxNEVFNAorOjEwMTBGMDAwRjM3MEQxMEVDRUQxQjFGODFERUJCNzVBM0M2OEY3MEVBNAorOjEwMTEwMDAwNjkyN0Y0MzkzRUZFN0Q2MjdDOTg3NzM4RUFBQjlGQzU0QgorOjEwMTExMDAwNzNCOUREQjhCRUIwMDE5MjBGQjA1NjE2NEE1RjNERUQwRgorOjEwMTEyMDAwRkJBRDBGMTI1RDdERjEwMUU3MkJGM0ZEOTMwQUE5QkMyNgorOjEwMTEzMDAwRDUxMkU4ODNFNUZFNDM1MzE1RTIwQjU2MTZFODZFNUZDMQorOjEwMTE0MDAwNkZCNTg4N0RBRDJGODc3OTlBOTU1MEY4QkVDNkU1RDBFQQorOjEwMTE1MDAwMzkyMDc3MDU0MkY2NzE5MDZFQjRFMDc3NUFGNzIzNjIzMgorOjEwMTE2MDAwMUQ2REU0NEY5MzdFQjhCOTgyMUYxOEQ3NkRFNDBGMUYzMQorOjEwMTE3MDAwMUFGODgzNkNDRjM2NzZFRjA3MEFGMjA1MUY4RDVCMDNGMgorOjEwMTE4MDAwRTcwOUNBMTkzNTdGQjJEMkI5NTFCM0NCNTI4Q0YwMzlDNQorOjEwMTE5MDAwQkJGM0YwMUY2NkEyMUVEQTJDRjdCMTlFREYxQUY3NzFCRgorOjEwMTFBMDAwRTU4QkMzQkFEREM3NjdEN0U0NzVCRjhGRTE3QkI3RkJCQgorOjEwMTFCMDAwNzg4RDQyRkNFRDdGQ0E2RkUxQTQyM0JCNDE0RkZCNzVFNAorOjEwMTFDMDAwNkUwRkZDRjZEQjM0RTExNzE1RjBGQzkyRTU0NERGODQ4QQorOjEwMTFEMDAwODU4RUQyRkU4NDFGMDM1QzI1M0M4REZDRjNGMTM0MjcwMQorOjEwMTFFMDAwQzFEN0M4M0ZFMUVGMDMxNjAyNDcwOTNGNDk5RjhDNzlGOQorOjEwMTFGMDAwNjk5QzJFM0E5Njc0MkFFOUI4OEI0RThERUJENUMzRDFGMworOjEwMTIwMDAwNTg3RTE4RjkxM0NDQTdGODY1MEJCNzlGQjUyODI0NkY0MworOjEwMTIxMDAwNDNCQkI3OTJBRUEzN0RFQUExRTM4RjM1QkQ5NUQ0MkIzNgorOjEwMTIyMDAwMzRFRjM3RTQ5QjBERjUzRDg2N0NCMUExQkVENzkwQUY3RQorOjEwMTIzMDAwRDNENUFGMzk3MDU4RTNGQTQxNDA1N0NGNUE3RjNCRTlENQorOjEwMTI0MDAwMTk1N0NBMTE3RUVFRjdEOUZCQjlFNjQzQkFFOEQ3QTEyMAorOjEwMTI1MDAwMjE1RkI0MkM2M0JFNDg5NDc3MEZBQTI0RUY1RTc0NzZBNgorOjEwMTI2MDAwNDRBMTVDQjIyMjhDQ0I2RDE3MUQyMjFGQzNGMzFEQkRBMAorOjEwMTI3MDAwQjU5NUM4MTdFNUY3OEUzMDZFMjdCOTU4REMxMTE1MTNGMAorOjEwMTI4MDAwQTJBN0I3QjdBODUxNjg4RjZERjNCM0MyRUVFQzI4NjQ3QworOjEwMTI5MDAwMTkwNUI4QjZCMTlFQ0FCOUZDNTZBMERBNTNFQUQxMUVGOAorOjEwMTJBMDAwREFBNEJBODE0QzU4QzVEMkJCQTIyOEVFQTEyNUVEOEU5NgorOjEwMTJCMDAwRTlGMDdERjZEQjJBODUwRjVDMENFNzc2MDVFNkYzOTgwRQorOjEwMTJDMDAwMzFFRUEwOUNBMzkwOUQ2MkJFQzc0NkMyQkFDQTVCNzhBRAorOjEwMTJEMDAwRkM0MUM1MUEzRDdFRTdEOEE3NDYwNzlDQzg3N0Y0NzE0NAorOjEwMTJFMDAwMDI3MzUxQUY0QjQzN0Q0RkZGQkQ4QUFEMjE3QUFCMzJDNAorOjEwMTJGMDAwRUMwQkFGQjBEMzFBRjc0NUQ5MDBCMTJGRjI1ODlFQjAxRQorOjEwMTMwMDAwQzc5MDlGNjM5MUUwRDcwNTZBQ0UxREQzMDFGRTE3OEY2QQorOjEwMTMxMDAwQThDQzBBRjlDRTE2OTVBREM0RjVFRTU0QzhERjgzMEVGRAorOjEwMTMyMDAwMDFEQzZGRjM2MTVGRTI3QzI0N0NDRUUxQkVDOUVDNTk0NQorOjEwMTMzMDAwMkUzOUY3RDIyN0MzN0Y4ODc0QjJFRkUzRENBNzIwM0RCNAorOjEwMTM0MDAwQjdFRjRGMTlBRjYyN0VGRjFGNTMzRTY2NTdENjFGRkJBNAorOjEwMTM1MDAwREE1RjY3MjExRkJFRjg5QTk1MjE3RDVGN0NFREQ3Mjk2MgorOjEwMTM2MDAwNjgxN0JDRjg4QTk1RjRFNThCQ0JBQ0RDREVGQzVBQTQ5QworOjEwMTM3MDAwMUZGRDkxMTc5M0I5OUNEQjc4RjBFQkRDMzYzQTc3OTczOQorOjEwMTM4MDAwMTNCRUQ2MEVEMEI4RENENEYyRjc2MzY4QUZFRTZDODEzMgorOjEwMTM5MDAwNTVBMTNDRjE1QTA0RUQ5RjA1QUY4NDkxM0ZGQ0UyQzE5OQorOjEwMTNBMDAwQUY4Nzg3QzY0REZDNEZENzIzRkRERDE3MjNEOUY0MTczMAorOjEwMTNCMDAwOTE2RTg1NUNCRkUwRDUxQjlFNDU3RjZFRURERTQzNUE4NgorOjEwMTNDMDAwMzk5NDhGRkRENTdGRTcyMkZGQkNGODIyOTc5MzJFNThFMgorOjEwMTNEMDAwREE5RTQxNUJFMzg2QUQzNzNDNjI0OTQ0RkIxQzc0RDYyMAorOjEwMTNFMDAwMTdEMEI1RUQ4MUM5Qjg0RkFFODQwQjg3QzM0NTgwMDNENAorOjEwMTNGMDAwQUUwQkUwNTI4OTdDQkYyNzc4QkNGMDZGMEI4RkNGNjdCNAorOjEwMTQwMDAwNzE3RTc2M0Q0M0ZGNkYxMDJFMEFGNzIzQjQ0NEZBNkRDOAorOjEwMTQxMDAwMEFBRDlGN0Y3RkVERUI1Q0U0Mzc1NzVCRUY2RjcwQkRFQworOjEwMTQyMDAwQkRGRkZGNTlFRkQ5N0Y1QkZDNzI3QTVGM0NDMDQ5RjM4NworOjEwMTQzMDAwMzNEMkZEOTU3NEJERkYzRjI4QkYzQkQyNERGM0JEQzZFRgorOjEwMTQ0MDAwRkQxRTkxRkVFRkJBRkVGRjFCN0MwRkZDQjc1REVGRDVEMgorOjEwMTQ1MDAwRjBGREI2QzA3N0E0MDNGRDhBMTcwRkZFNzcwQUZCMEVENgorOjEwMTQ2MDAwRUIyRTRDRkY3N0RERDdGRjdDREQ1MjVFMUZBM0JBOEZEQQorOjEwMTQ3MDAwRTQ0MUZENzc1OEYzMDc2RTE3NDkxRkREQ0ExREY3MDdEMgorOjEwMTQ4MDAwRTNFRjQ4M0YxQUNCRjgzOTNERDY1NjRERjJFNkQ4N0UwOQorOjEwMTQ5MDAwNkI0OTJFNkU2NEY5RTQ4N0YwRjU1M0M5MUY0M0MxMTdGOQorOjEwMTRBMDAwMDA4NzVGMjdFNEY5Qzk5RjY0MEVGNDVCMENGOTMxNDlBQQorOjEwMTRCMDAwQjUxNDlGNjVENDFCQzc4NjRGMjg0NDc5RjRGMDUyOTgyMQorOjEwMTRDMDAwMTdGNDczMzhEMkU0NDA1RkYxQjg3RTZBQzA5QTRCNjk3MgorOjEwMTREMDAwM0JBNjZGQTVEQzdFMDRFNTk2NzE3NkJERkU3NEJCNDEyQworOjEwMTRFMDAwMUZCQUQ1QTkyRjJGNjQyRkY2NDJGRjU5NjE4RTg1RjlCNworOjEwMTRGMDAwNjEzRUUzQjE3RTg4REUzODI1REQ0MUYwQkE5NTM1MkRCOQorOjEwMTUwMDAwNzdEOEJGM0I5Q0I2QTU3MzNERjk0QTM4RkM3M0I4NURFQworOjEwMTUxMDAwMDEyN0ExMjc5QjQ1N0QyM0RDQ0NGNjg3NUFCMTlEOTlGNQorOjEwMTUyMDAwODFERUNCRDc0QkZBQjJENDdCQUYwNjRGMjZGNDY5QjMzQQorOjEwMTUzMDAwMTg1QUMyRDdEQzhGRkI0OTQzRkEyNUI4NDhCODdGNTcwMQorOjEwMTU0MDAwNzg0QjNDMTlFMTJFRTEyQkUxNjZDNDQzM0QxQUEzN0FBNgorOjEwMTU1MDAwMDdFMURGQ0Y5QzY3QzY3RDc3QjM5MEUzQzc5OTYzNzhENworOjEwMTU2MDAwQkU1RkFCNUE0Q0ZCRDFDRkU5RkMwQkI3MTlFNTkzRDE2OQorOjEwMTU3MDAwRjYxODhBRDc2NENFRTQxOEQ0Njc1MUM0RkMzNjA5RTQ1RgorOjEwMTU4MDAwQ0UxMTMxQzMxNTU4NkY5Mjk5RjlBQ0EwNkZBMjBGOEQ4RgorOjEwMTU5MDAwRUNBODBGOUFGRENCNUMzODBFQjdENzI2OUJCOTVEMUEyNQorOjEwMTVBMDAwNzZCNzJGM0M5RkVBN0IzNEM4OTdGRTZDMkVGMzQwRkQ0NAorOjEwMTVCMDAwRDIyNEU2NTY3ODdEMTYxRDRCRTE2ODRDQzVCODJDNDgwMAorOjEwMTVDMDAwQjE1RDY5MzRFRkI3QjQwRkYzMkZFM0Y4MjRCQzBDQzA1RQorOjEwMTVEMDAwMzQ5NUZBRjU5ODYyNzlGQkE4N0M2QUVGMzNGMUY2MUUzMAorOjEwMTVFMDAwMzNDNjdCQTU3MUZCN0FDNzBBMkJFOTFGQTVBQjkyMzNFMworOjEwMTVGMDAwOTA3RjE0OEREMURCOEQ5MzMzQjg5RDU5QTZBQjMzRjgxMgorOjEwMTYwMDAwN0U1NzRERUUwNDk0OEJDQjk2MEYyNDdENDgwRDJGQUU2NAorOjEwMTYxMDAwN0QwOUVERkRCQjIzODgxRTRCNTdERTMzNjExOENFNkY2RAorOjEwMTYyMDAwNzc5QzFCQTc3NzY2RTI5RUUxQkNGRThDRkIzRjg0RUZCNAorOjEwMTYzMDAwREUxRDYxRjQ3RDY3ODZGNzY4M0FGNDc3NDY3MUNFN0FFRAorOjEwMTY0MDAwMDkzRTk0NEQzQkFDMjVDMDEwREVFNjQ5RTdEMUZFMzc5QworOjEwMTY1MDAwRDFCN0U3M0RGNDMzNEU5Q0FBNTJGRDg5OENDNzNEQjIwOQorOjEwMTY2MDAwRTUxMUU0OEY5RUUwRkJEQzlDMDBGRDREMDA2NTAzQ0JBMworOjEwMTY3MDAwREJDMzFDMjkwQjYxRkVBNUMyREU3QjUyRUMxNzM1OUMzNworOjEwMTY4MDAwNzk1RkI0RTNCQzkyMzM1MkUxRkIwNEQ2N0QxQzcwNkFFRgorOjEwMTY5MDAwODZBODNGNDZEOTg4RkVBMUZFNjNCOTNENUVENkM3N0VDNworOjEwMTZBMDAwQjBERjJDMDE4RjhCRTlEQ0VFMjRGMzAwNTdBQTVGQjE4OQorOjEwMTZCMDAwREFEQTlFODY3QUNGNkE0QjIwMTNEMjU5NTk2MzJFRTEyQgorOjEwMTZDMDAwM0E4QjUyRDlGODBEMDhGNzA3NTRCNjg1RTZEQjUxNEEzNAorOjEwMTZEMDAwNzZFRUM4MkMyN0UyQzEwQjI0NERGMTg1NEQyRTI3REE3QQorOjEwMTZFMDAwQkREQTQ3MzcwN0QwM0ZEMEZFODRDQkRERTgyNDJDNTM0QQorOjEwMTZGMDAwM0M4RUQ0QjNEQTQ3MDcwNkEwNURCRTIzOEZGQjE5OEU1QworOjEwMTcwMDAwMzlEQTIyNTEzRjJDQjdEQjI4M0U0N0M2RjVDQzc2RjBCQworOjEwMTcxMDAwN0RERUJGQjE2REVERjVBODc3M0VBQUJBQjc0MDdFRjY4MworOjEwMTcyMDAwQTNEQ0VGRjIxN0JCQ0RBRkEwQkVCNjlFRUY1M0I2NDYxQgorOjEwMTczMDAwMUZDN0MzMUM2RUIyRjc5NDM3OERENjUwQkZBQ0IwN0JCOQorOjEwMTc0MDAwMzQ1QzY3NzZBNjM3MjYwM0Y3RDEzNzAwQkZFMTE4QzdBOAorOjEwMTc1MDAwQzk2ODMzOTQzNjk1NTI5Qzg5MUEwNUZCMEVGNzg5RDlDRQorOjEwMTc2MDAwMTk4NTdBQUYzMTBFNjg4MTg4RkI5MUY5MTdDMkJDN0Q2QgorOjEwMTc3MDAwMzMwMDRFNjVEMUNFREQ0ODJGQzdFQkQzQzhFRTM5NDNEOQorOjEwMTc4MDAwRDA1RDExQzYzMUEyN0ZDMkRDOTY4OEYzNzkwNzhEQjg4RgorOjEwMTc5MDAwMzA3RTUxQUMyM0MzNEVGNDFDQzYxMDBFRUQxNjQ3MDYyNgorOjEwMTdBMDAwRDI3N0ZCOEEzMDEzRkFEOThBOTY3MUJBODY3RDY2MzM2RQorOjEwMTdCMDAwNDNGQjA3Q0QyQzFDRkQwNkE3RDI3OUJGMjU0QkNEQzUxOQorOjEwMTdDMDAwOUIyMURGQ0ZDNkNDOTFCMTQ4NTc3OTQ0RDc5QkIzQkM5RQorOjEwMTdEMDAwMTdEM0ExRkY1MzNGNjIyMzkwMUVDQUQ3QUMyM0ZGOEFDMQorOjEwMTdFMDAwQTQwQjY2NkUxRDE3MDdFMzlDREFFNkNBNDdCRTI5RTkxQgorOjEwMTdGMDAwNjg3M0Q2OTgzQzg0NEIxNzNENEM1NTg4MEUyMDNEOTQxOQorOjEwMTgwMDAwNDZGNDMwNzkzODk2MTc4RDA5MEM1ODk0ODNGQTY4MEQ5MAorOjEwMTgxMDAwRjNFMEY5OUVDMERDMjgyNzc0QjIwRUYyM0Y3NkRBMzU4OQorOjEwMTgyMDAwMjdEQUI5MjQzRjkxN0MwM0YwRUFCMUM1MDdFOTYwM0JCMAorOjEwMTgzMDAwOUNGNzY2MEI2MzNCMUE2Qzk0M0VERkUwNjA2NkUwNzFEOAorOjEwMTg0MDAwM0IxQjEyMjhCRkJCQzE0OTY5NzM0MzE2N0Q3RkIxQzFFMQorOjEwMTg1MDAwNERGOUJEMEQyMzI4QkZBRkMxNDNGOTAzMEQ4NTk0QkVEQgorOjEwMTg2MDAwRDI1MDRDREYyNTVGMDJCODEwMUY5MjdDNDVGMkEzNzI2NAorOjEwMTg3MDAwQkJENjhFRkU0OEM5OTc4Qzc0MzMwQkMwM0IyQTlGREFDNworOjEwMTg4MDAwMTNERjkzRkMwRUQ3NjFDQTBGRjIyMzg5REY1NEE1RDg2QQorOjEwMTg5MDAwOTdFMDQyM0VENjM2MDNGMTVGQTA5RURCQjUxRkY1RjIxRQorOjEwMThBMDAwNEFCQjlCRjQ3NEM2Rjk1RTI3RDAyQkMyMjU0NTYzMDc1QgorOjEwMThCMDAwRDBFRURBQjhEMEQzQkVDQTE1ODRGRkREOTUwQTMzODdERgorOjEwMThDMDAwRDBENTNENzU2MUNDMUM3MjZFREM1QjFGQTNDQjk3RDQ2OQorOjEwMThEMDAwRkZGRUNEM0VEMEZGMURCREJDNTU0ODdGQzc3RUZDRTk1NQorOjEwMThFMDAwRDM3Rjg0RUY5QjdFN0MyNjFERjEwREYzRDhGNjM4OEVENgorOjEwMThGMDAwQkIyNEJDNkIxRUIxOTg1RjZFMjE3RjU0N0Y2OTA3ODE0QQorOjEwMTkwMDAwM0ZDNDRCMTlFM0ZCNkREMzhGRkY0NkZCQkJCRERFRUE0MworOjEwMTkxMDAwNDQ3OUY4MjNDNDEzQzBGNUNGMDI0RjY1RjU1NjgyNUZCMgorOjEwMTkyMDAwRTk4QTEzQkJGNkUzM0U1RkEyMTE5RjJCNUIyRUY2RTEyMworOjEwMTkzMDAwNkE4MDY3ODg3RkY3NzgyMjIzN0IwNDQ4RDMxNEFGN0VDMAorOjEwMTk0MDAwRkM0NzVBMjAwMkZBM0ZBRUYwRkRBQjgwNTA1MDgyNzE0NgorOjEwMTk1MDAwN0ZBQjdGN0QxNEY3QkY1MjdGODRGQ0U3NUU5QjNENDBFOQorOjEwMTk2MDAwNzI4MENGNzIyRUI0M0ZBNUZFMkRBQUM3REFGQUM1QTBBOQorOjEwMTk3MDAwQkQ4NENFQjE1QkQwRUZFOEQxOUNCMDZFQTQ2OUM0NUJFRQorOjEwMTk4MDAwNTlENkVCMkMxMUZEMjY0RDhBMDNCNzRDODVGODVFQjE3NAorOjEwMTk5MDAwNUFFMUZFNDlCMzNCNjEyQUM4N0Q4RjY0QTg4NEM3RjcyQQorOjEwMTlBMDAwRDJDREI0MkY3MzMyOTg4ODVGNjhBMkYzNDlEMjZCQzU0OQorOjEwMTlCMDAwMUE2ODg3RkJBMjI5NEY5QjEzQzI4N0NCQzRGN0YyMkM2RQorOjEwMTlDMDAwMTNBNUYyRkIxNkQxNkZERkQ1NzlEMzUxOUVFODhCRTVENQorOjEwMTlEMDAwMzk5OEU2NEY0N0Y4RjZCNThGMzcyQjIxRjhERjk4NjEzNQorOjEwMTlFMDAwMTZGM0UwRTNFN0UwNjY4M0ZGN0IyODJCNTU5QjlEODM5RQorOjEwMTlGMDAwRjhFMUU3OTcxQ0E3MkMyQjdGMjVDNjcxOTZBRDE5OERCMgorOjEwMUEwMDAwREM5NzM1NUFEQzA5QkRBMERFQjZBRTdFMUM1QzVFQjA0QworOjEwMUExMDAwRjE3OEU1OUExRUNFMEY2OTNGM0I4NUZGQkM4MUQ2NEQxQworOjEwMUEyMDAwNzZEREFBRERCRkQ4OEQ3MUZDNTUxRjVCMDlCRjU1NDMxQworOjEwMUEzMDAwNDRGQzU0OEU3RkY4MTQzMjM0RUFFREQ1RTM3RUYxNDk0QworOjEwMUE0MDAwMTRGOTFGRjZGMkI4NEE0OEI5M0Q3NTQ5MjVCN0JGQkEyRgorOjEwMUE1MDAwNjE1Rjc1RTNGRjc5NjNGN0M3NTFERERBQTlGN0FBRDdBQworOjEwMUE2MDAwNjRBNzVFQTA3QzEzODVGMjgzNUM0RkMxQzEyRkUzNjkzQworOjEwMUE3MDAwMUVDQTY1RjJGRjJDMzhCODIyQkVCQjdCMzc0NjdCNzU4OQorOjEwMUE4MDAwOTczRDVCRDhFRDhDRTU0NjdCREREMTBDQkQxRDFCMDQ3RAorOjEwMUE5MDAwNDRCQUM3MjVFRDc1NENDRDg5NDZGQkZFOTdFMjlFNDdCQgorOjEwMUFBMDAwNEY3QThEQjQ2RjJGRDgwMDlEQzRDMUZFMzQzQkEzRDFCMworOjEwMUFCMDAwNUY3NUIxMDc3OURBOTlDOUNGRkJGM0MyMUU3RTcxQTdCMgorOjEwMUFDMDAwNEE3QUNFQzU5RDkxQjQ5RkU2RUZGQ0Q5NUJFODNGOUM3NgorOjEwMUFEMDAwQkY1NUExNjlENEIyNTY4MjFCQzA5M0Q5NDJDRjMxOEM3NQorOjEwMUFFMDAwMzc4QkJCNzJERTlERkVGNDY4M0M0N0FBN0YxMTU5ODc5NQorOjEwMUFGMDAwNzQzNkFGNTlGMTZDODNGOTc0REE5Q0QxQkQ0M0U2RjNDNworOjEwMUIwMDAwOERBMEIzNkE2QkYzNzA4MkIzOUMzRkYyQzVERUMxN0FERAorOjEwMUIxMDAwRjM1QTdFNDZGNjYzQTg3NzgxRTRBMDE3MjIxOEJGRkYyOAorOjEwMUIyMDAwRDFGMTFFQ0VGM0VDQzZBMTZFRjRGQkNENkJERTMzOUY3QworOjEwMUIzMDAwRTQ4ODlEMTEwRTE0ODFDRTg4Mzg2MUQ5OEYyRDkzOEY0MgorOjEwMUI0MDAwNjdDQkU0NzJDQjU5RTEwRjNBQkI1QjI1N0U4NkYzQzRDOQorOjEwMUI1MDAwRkQ3NTQ2RDFDN0UzNDU4OTc2NTEwMjZFMkZFMkZFRUU1MAorOjEwMUI2MDAwMURBQzNGQUZCOTNENkEwMEQ0RkZFQ0MwRUYyOTREQzhCMgorOjEwMUI3MDAwRTQ3QzYwOUVCRDM1MTdDRkRGQ0ZGNjQ2OTAzRkVCQjNEOAorOjEwMUI4MDAwQkQ0RjhEN0YxNUM2M0JERjNDQkExN0VFMDdEOTdGNDZBOAorOjEwMUI5MDAwQTY4NUVBOUZERkE4MTYyMkJDOTg5RkM3QkRENDIyN0NFOQorOjEwMUJBMDAwODc4NkNFMzM2RUIzQ0YxNUJBRUY3OERDQ0ZEOUJEQkYwMQorOjEwMUJCMDAwOEMzMkU1MDRGMTU5NkJGM0RBMTI1MzcxRkY5NDE2MjM1QQorOjEwMUJDMDAwREYzOEE1MzhBOTlFNjVFRjY4MUZERTYzNUFEMDkyQzczQgorOjEwMUJEMDAwOTA5RTY5REYyNTUyRkRENUE2OTA3QTlBQzU0RDRDRDFDRAorOjEwMUJFMDAwN0M2MDkyMjc4OUUwMkNFRTIxODk3ODc5QkM1NzQ3RjdGMQorOjEwMUJGMDAwOEEyNkQ5QzgzRjMxNkI4OEYzQUVCQjkxNEZCRTYzRTFGMworOjEwMUMwMDAwNzhFOUU3N0MxQ0U1Qjc1OUVGQzc1MURDRDQyMjk3RjM5QworOjEwMUMxMDAwMkU5Q0ZGRTJERkFBMTRFRjNCNkJBOEUwMDMwOTZEQzMyMworOjEwMUMyMDAwMzA2RUIxNjZCNUMyM0NCMENFNzYxNzk3MUI2QUZDMkFGRgorOjEwMUMzMDAwRjM0MkJFMkZEMDgzMEY0MDMxMzEzMzU1RjBEMzQwMDZFRAorOjEwMUM0MDAwREUwNzdDQjJEMkU0RDFFMEZDM0JBNjMxOUY4QTc2QTNDQQorOjEwMUM1MDAwMTc3OTNDNzM0RDJBOEYxQjdFMTJFOTFFRDI5QUQ4NDAwOQorOjEwMUM2MDAwNDYxQ0Y0Nzc0RUUwQjM2NjcyMjAwM0UzMjQ2QTVFNENCMAorOjEwMUM3MDAwQTQzODg5NzMxQUY3NUJFMjc3RjQ5M0Q2RTQ0MzdCQTgyMAorOjEwMUM4MDAwRDc0QkM0QzM2MkZCOTgxMEZBQTkyOTczM0JCMTlFMUFDMworOjEwMUM5MDAwRUI3NkU2RDk3MUJFOEUwQjI0QzdCRTE0Qzk1MDhFMzVDMworOjEwMUNBMDAwRUQ4RkU0NzE0RTNGMEZEQjYyMERDMTUzOTlBMEI3NUUxQgorOjEwMUNCMDAwMDI4RjZDMjY4Rjg3N0M0Q0M0NjMzRkI2MkREMThGRkE4MAorOjEwMUNDMDAwOUJBQ0ZGOThDNTNCMDNFMTgwRUI0MEY5N0Q5RUQ2OTQyOQorOjEwMUNEMDAwODFGMkFEOUNFRkJDQTgyNjlBRTczOTQxREZGM0MyOUJBNQorOjEwMUNFMDAwNzhCQ0I0QzZFMzI5QjEzRUU2REIyRDhDRTJCODNCOUU1RQorOjEwMUNGMDAwQjM1MjNDQzk5OUM0RDY3RDM4RkU5OUU3MDYzMjVDN0Y2MQorOjEwMUQwMDAwQkJDQjNGRTcwMDk1ODNGQzA4NzhBQjdBREUxQUMwRjVDMQorOjEwMUQxMDAwOUM3RThFREI5QjRGNUJCODNDNzY3QTUyODIxM0YxNTZFOQorOjEwMUQyMDAwMzg3OUMzMkNCMkM3NkNCNTJBODhGN0QzMEFEMzEyQjA1RQorOjEwMUQzMDAwN0M1QjZGQjcwRkRCMzdENDUzOUM3NDE1QjAwOUJDOEYzNQorOjEwMUQ0MDAwMDM2OTIxREVBQjM5QkQ2RDIwQzU4NzlEN0U1QkM1MUI1OAorOjEwMUQ1MDAwNTFGODdEMzU3RUY3QjJBNjU5M0Y0MDc4RUNFMEZBRDNEMgorOjEwMUQ2MDAwOTlFN0ZGM0UzMEY0MUU5QTRDQUJCNkVBRTNFMDI0OURCRgorOjEwMUQ3MDAwQzhGMjQ2QjEyRjFCMDU5QzU3NjVGMjczQUIzNkEyRjkyQQorOjEwMUQ4MDAwQjE1NDVBMjc4NzNCRTA4OUY0M0UzOEY4MjM5RkJBMEVCNgorOjEwMUQ5MDAwRTMyMEQyMTVFNDFCNEYwMjVEM0Q4NTc2ODUxRDVDQkZCNworOjEwMURBMDAwM0FCM0QzNDI3MUUxNTVGQjIzM0QxNDc3QjZFQTdBMTM3NworOjEwMURCMDAwQzU0MUE4NUMwRUFGMzIwMUY4Mjg1NUE4REZBQUM5NTk2MQorOjEwMURDMDAwNzRERjE3RTA0RDdBNkNDNzM2NTU4Q0MzOTgxREQ3QkRBQworOjEwMUREMDAwOURDN0Y5MTZBMUFDNDhFNTgzQTlGQ0I0Qzg5RkRFMzdCRQorOjEwMURFMDAwOThFNDNBRThERjgzRjc5NUFBN0VGMDQzMEVDNzI5OTU3OQorOjEwMURGMDAwRUYzMkIyNjNEODg4QkZENjc0Rjk3MTQ2NDZFMzc5NTc5QgorOjEwMUUwMDAwQkJFQUE2NjhCQzA3QzhERTU3MTlDQTI3NDYzODVEMzI0OAorOjEwMUUxMDAwQkJGQjIwNUZGRDgzRTA1RkQ1RkI5RUQ2OTAxRjU0OEJGQworOjEwMUUyMDAwRkIyMUQ1Q0YyQkRDOUYwQ0ZCMENFRjQ5NTZBRkJDRTk1NworOjEwMUUzMDAwNzFBMkNGRjcyQzJDMURENjczQUVGOTY3NTFBMUY4MDgwQgorOjEwMUU0MDAwMDhCRUQ2NTU1RjczNTNGRDZBQTg4RkZENTRBRjdDMjczQgorOjEwMUU1MDAwOEFFNkIzREQ0MjcxMjY0NjNDNUU3M0ZCRTdENTZCNkFDQQorOjEwMUU2MDAwREY0NTFGQ0REQzhFNzJDNUZBNTlFQjdGN0MwQ0ZEN0YwMAorOjEwMUU3MDAwQjEzM0NDRURBM0FGQ0Q3NEFGRUNBQ0E1NzkwRUFFRkYxMgorOjEwMUU4MDAwRUNBRTMwRTI0NzY3NjMzODdGRjgwQ0Y4QTcyRjEzRTcxMgorOjEwMUU5MDAwNzFGQjRGMjkyRUVCNzc1M0U4M0VEQzVDQkZCRTVGMzkwOAorOjEwMUVBMDAwRUU5QkM4QjczMTlFMjRDRTFEOEQ3MTdEQjVFRjczRkVCQworOjEwMUVCMDAwMDY3OEI5ODNEQUJGNkZBMUY2QzY3NTZDMTVGQ0JFNkJFOAorOjEwMUVDMDAwN0ZFRThBMjA3QTM4REI5N0UzRTVFQ0VFNEMzQThGREE0NgorOjEwMUVEMDAwNjMzODlEQzM3QzUzRjBGRURDRDk1RDk5Nzk3NDJGMEQ3NgorOjEwMUVFMDAwODUxQkEwODcyQUExREY5RThENjk0RTcxODQ5NEI3NUIwNAorOjEwMUVGMDAwODQ5RTE2ODA5QTQ4MzdEODA2RTRCRUFBN0EyRTU3NTU5MworOjEwMUYwMDAwREJENjUwN0MwOEM2RDUwRUNGQTczNDYwOERCRDMyM0VERgorOjEwMUYxMDAwMTZFODk1RjRDNzdFNTk3QzdGMzExQzJGNUVDNDZGOTMwMQorOjEwMUYyMDAwQkNEM0FDMjFGRkY2MEFCOUIwNjZBNzMxQkU5Njk3RkZDNQorOjEwMUYzMDAwNURFQzRGOUM2RDJGMTlDRjhCNzRFODUzMjhDRUE0N0E5QgorOjEwMUY0MDAwRjlDMjc5NDhFN0Q1NzVFQkVFQzY3RDI2RTc1RjZENjY4OQorOjEwMUY1MDAwODVBODg3QjUyQjJBQ0RBMzNEOENERDNCMTlDRjhERDAyRAorOjEwMUY2MDAwNzE0MkU0MzYyREFCQ0I5RUNBMUNGMTI0QUZEMjM5MTY5OAorOjEwMUY3MDAwOUVFNUU0NzQ4MzI3MjZERTEzNURBRUFDQTE3MTVDNTI0RQorOjEwMUY4MDAwOUZFNUVCOTI3MDAyNzA2ODE4RDdENzNFNUE5NEY3QjA2RAorOjEwMUY5MDAwNkUzOTRGRTNCQUU1N0M1MkIyQjg5REE0RERFNUZDRTlBOQorOjEwMUZBMDAwNDhDNEYzNkY1NEJBNEY3QkU5OUJBMUQxQjFEREM4NjUzQQorOjEwMUZCMDAwQzE3MzVEMEJDNkI3QzJGQ0IzOTFGNkQwRUU5MkM5RUQwQQorOjEwMUZDMDAwQThENTE4M0YwQkYzQ0NEOEE4OEZFQkNFREFBQUNGMEY0OQorOjEwMUZEMDAwREFBOUNGRTdFQ0Q1RTc3MzVCRjQ3OUY3MUJGQTdDMUM0MQorOjEwMUZFMDAwOEVEQjlCRUJEOTc4N0YxN0Y1NkM0QzUxQ0Y3NjVBQjlDNQorOjEwMUZGMDAwOUU4RDc5RDRCMzMxNDUzRDFCQkZBMzlFOEQ3OUQ0QjM1QgorOjEwMjAwMDAwMzE4RjdBMzZFNjI1QkM1MURGQzYzQ0VBREI1ODVFMjJDQQorOjEwMjAxMDAwRTA1NDIzRTIyNDExMEY0OEVGRUNFNTMwREQ3RDlGOEI4NworOjEwMjAyMDAwMDdGOTNEMEVBMDAzQkU2RjY2NjhCNDZGOUVDNDFBQTQ4NAorOjEwMjAzMDAwNzc3MEJCNTJERjI5MzYyN0M2RkJGQTYyQkRFM0IzODY1MQorOjEwMjA0MDAwRTE3RDhGRDY5NTg5ODgzNzczMUJDNTlEMkU3ODg1QzcwRQorOjEwMjA1MDAwOURENkU0ODdEOUQxQkVEMUI2RTJCMzk1MThDRTM5MzUzNQorOjEwMjA2MDAwRDY3QjdCNTY2RkJDQ0ZEOUIxMURFMTVCNUI3Rjk4RUUxMQorOjEwMjA3MDAwQkRCNzJENzVCRTdGMEJDNzFGRDk1OTU4NjUyQ0M5NERFQgorOjEwMjA4MDAwQTU3OENFQzVGNjhDNDc2M0RDMzc1QkEzOEZGMzM2QzZFNQorOjEwMjA5MDAwN0QxQkUzQkQ4RDc0MjBFNUJENEQ5NjhFNDRFNEVCMjc5QQorOjEwMjBBMDAwOUVCM0FEQzFGOTlGMDgxM0Y3NEZBNkRCMENGRTdFMjE0RQorOjEwMjBCMDAwQTdBRDU1QjZFMDc5NUQ5MzE1Q0JGRDQ5NDc0MDNFRUY5RQorOjEwMjBDMDAwRTY5Qzk1NjlGOUU1QTEyNDg3NzdFNUQ3MjgyNkJBMTcxNAorOjEwMjBEMDAwOTcxMDRGRTdEMDYyMzFBNzE0QTVBMzdEMTVGMkI5NzkwNworOjEwMjBFMDAwMjYzQTM3MkY4MTVDODZFMzVERkE0MDI1RjkyMTczODMxOAorOjEwMjBGMDAwNDlCNzlFODFGRTcwMUQ3RDY1RUY4ODM1REM2QkU4QUJDRQorOjEwMjEwMDAwQUIzRkU0NDBBQUUxNUVDMzIwN0QxQ0ZERDRBNTg3NTAwRgorOjEwMjExMDAwQkY5RkIyNjZBOEFFNUU0NUYxNEQwNjM4OEE3OTBCRjlDRAorOjEwMjEyMDAwQjUwMkNFMEYwRkFDRUZDOTI1MUI1MjEwQkY4QkU3NzU2MAorOjEwMjEzMDAwQjZBRjQyRjlGNEE1MzBCQTE3NTY4OUZGMEZGODYyMjVGOQorOjEwMjE0MDAwRjQ4OUY3MTkyQkY3OEFGQkMwRjVGQTczQjg1QzlDNDM0NgorOjEwMjE1MDAwOTU2NkU2NzNDNDA2RTlCMEQyQzEzQzMxRDA3RURFQTBGQworOjEwMjE2MDAwRDZEQzAwRUExNTZGRkY3RUI4MjMxNUY1OEFEMTdEOTA4NQorOjEwMjE3MDAwMUZBNTU4M0MxNDA3NUJCMzI3M0Q2NjI5RjRCQjIyQ0Q0RAorOjEwMjE4MDAwRkIxNEQyRERDOUE2QzMzRjI5QzFGMzcwMEZEN0Y3NEVBOAorOjEwMjE5MDAwQUNGOTY1MTRDNTg5MDk3QTRCQjEzOEMyMTFFRjlCOUIyNAorOjEwMjFBMDAwNzg3QzFDREFDN0Q0RDgyMDVENkM2RThBMEIxRjYwMEY1OAorOjEwMjFCMDAwQUUzNzQ4MDdERjEwOUUwMDNGREM4RTUzRjkzQUY5M0RGOQorOjEwMjFDMDAwM0E5QkM1N0E0NzJCM0U5NEE3RTVGQTE2ODk3Mzg1MEQ4RAorOjEwMjFEMDAwRTBGRERDMjdGMjI3ODU3RTIxRDc3OTZFRTBBMTVDMjcyMAorOjEwMjFFMDAwREVCRjY4Mzg5MEEyMjIzRjM3RUREQzlFMDhBOURCRUEwQgorOjEwMjFGMDAwREQ4N0ZCQUU3MjczRkExRjQ3QzIzODU1MUZGMkY1RkMzQworOjEwMjIwMDAwNjVGREQ4QTgxQjUwRkVEQzY1NzExNzQxN0U1NUQzQjMyMAorOjEwMjIxMDAwMUFFQUQ5NTU2NkJGNDZGMTk1Q0Y2REQ2MzBCRUY4N0IyOAorOjEwMjIyMDAwM0IzNkQzRjczOTNCNEEyOTlFNzIyRUFCMjNGREYzOTRGQworOjEwMjIzMDAwN0M3NzQwQzBBMzcyOENCMkQxMDFGMzRFMUFDOEU1QkVDMAorOjEwMjI0MDAwQ0E3MEVFQkYwM0Y5RTg0RDdDRjdFM0QyMEUyNTBGRTMyOQorOjEwMjI1MDAwNzhBNjE2RUZEMTRBRTFGQkZCODJDRjE4Rjc0OUU3QkIxRQorOjEwMjI2MDAwNTMwQTdBMTMzQ0Y4N0Q4RDBGMTk2OEYxNjk1N0VFOEI4QworOjEwMjI3MDAwMjk5NzVEQjQyRkE2NUVDRTI2QkQ2QzVBNjAyMEQ3N0YwRAorOjEwMjI4MDAwNzMwQ0ZBRUZCQkZDREQ4NUNFMTZCRTBGMkFCNTQwQUY0RQorOjEwMjI5MDAwMjlCODRGNUVCMzkwOUM1QjBCRTdDRDg4N0NENEFCMTkxQgorOjEwMjJBMDAwQkIxMUQyRTI5MUFBOEU1RTE3OEM4QkQwRDFGMzc0MTYzQgorOjEwMjJCMDAwQjI0RkEwQkYzQjMxNjgyNDI0M0ZCNTI4NEQ1N0ZGQUUzNQorOjEwMjJDMDAwQTlEOTA2RkFDRjBGOTYxMzFGQjk1MTc3QkZBRTc2ODlGOQorOjEwMjJEMDAwQ0ZBOTkwOUMzOTQ2RkY5REYxMzg0MUM2NkVEM0I1QUY2QQorOjEwMjJFMDAwNjU5MzgzRjU5MEJFQjc3MjM5Qjg3NjZGQ0MxNkI0RjdBNAorOjEwMjJGMDAwNTU5QUI4RkUzNEREQ0JCRkNGM0ZDMEJGQjNFOTRDQjc3MgorOjEwMjMwMDAwMEZGQkE3QjlGRkM4Q0Y0NTBCRjkwNUE0M0Q3RDNBRkVFOQorOjEwMjMxMDAwQkIxQkY4QzM0OURFNzUzRjFDRUZDNUEzM0Q0Mjc3N0Y2OQorOjEwMjMyMDAwNUFGODAzNzFERTg4ODc1QTYxMzdBQUNERTI3NkEzNUEzQworOjEwMjMzMDAwNUZBQjg2RUYwRTAwRkNDRDcxQjE1NENGMTY4N0YxOTFFMworOjEwMjM0MDAwNEQwQUQ5MTUzMTVENDJGMTkyRkEzODJDRUMwRkUzMThBMQorOjEwMjM1MDAwRTcxRjUxNEI3MTlGMThDQjJCRjFERDFGQzRFRjJCM0NCNgorOjEwMjM2MDAwQUU3NEVFMDY2MzFDRTQxQUYyNDdDRTQ3N0I1MDA4REVEQgorOjEwMjM3MDAwRUUxRUU4MTRGMjhBN0Y2NTVGODQ1RjkxOTI0N0Y3MjIzMAorOjEwMjM4MDAwNzcxRUQyMzBDRTZFRUFENDk4M0NEQzM3NDZGQTkyN0M4NworOjEwMjM5MDAwMURGNjMzRTlERjlERUYxRTI2RkFFQUFDMzQxM0ZENUUyRAorOjEwMjNBMDAwMEQwRUYzM0REQzhFNkFBNEJCMzlBQzU1QzM3QkUyNzNFMgorOjEwMjNCMDAwRjYyQTZFRDQ0N0IxMUVDMkEzMkZEMkEzMDExRTcxQjE1QgorOjEwMjNDMDAwNTdDMjQxQzJBNzBCNUU3QjhENzE2RTFDNEU3MzBGMjhFNgorOjEwMjNEMDAwRkU0MDM3NzAzMkNFQkIyN0I4QzlGNUNDRjE3QUM3MjM5RgorOjEwMjNFMDAwNUY5MEVCOUE4QkYzQzdGRTYxRkVEOEJGRjQ0M0IwMTE0OAorOjEwMjNGMDAwQzZGRDk5NDZGNkE5RjlDNTNDM0VENjQ4MEY5MzJGNzMwMgorOjEwMjQwMDAwQkJDQjlEOTdDRDk0NEUyREQyRUY0NzZDODdGQjYyREEwNAorOjEwMjQxMDAwRTU3ODJBRkZBRUY0MzIxRkU2QzlFRjNGNUQxQjlEQzg4OQorOjEwMjQyMDAwNzU0OEJFMUJEQzBGRkNERUMwRDVERTA1MzJEQTFERTdDOQorOjEwMjQzMDAwMEUxNEYxQzhDM0Q4MzA1RDNDQjJFMEFCQzZGNkM2NzgyNgorOjEwMjQ0MDAwNjQyOTA3MThDRjk3RDI0ODEzQzU0RDc2REE1MzQ5QkU5MQorOjEwMjQ1MDAwOTA3Q0Q2MkJDRTBGRUY4QTJGQTk5RTE3RUFGMUQ5QzQxNAorOjEwMjQ2MDAwRUJDRTFCQUZCMEZGMkQ4QTRDQTVGNzE4NTI5NkM2QzUxMAorOjEwMjQ3MDAwMjM5RTRBQzMxQzE0N0Y1RkJBNTRBNUI4RTc1MkE4RTc0RAorOjEwMjQ4MDAwMEM5MTRGNTYyRTRGNEJDMUYzRTJGODgzOTlDRkY4NDA5MQorOjEwMjQ5MDAwNkUzRkZFNDBBRkY4MTEzMENFODkxNTk2NUUzNjY3QjBCQworOjEwMjRBMDAwREVGMTE1MDUyOTE4QTc3MTYyOUQ3NUJBQkYxQjc4QURCRAorOjEwMjRCMDAwMUJDOENGODdEQTFGMUZBNUYzRUNCQ0U5RERBOEU5RDA2NAorOjEwMjRDMDAwQkU2NkM1NEI1MTE4RTY1RkJEODI5RkUzMDNEM0JDNEQ4QQorOjEwMjREMDAwMDM3QkUzNzlCRTc5QkIwM0UxRTdEODlDOEI3NkRGNERDNAorOjEwMjRFMDAwNzAxQzYwN0IyOTNGNTRBRDI4RTg4M0YyNDVDRDNGMEUzOAorOjEwMjRGMDAwM0ZFM0MwN0JENjRCMkRGMTI4N0Y5RUZFMDBDRTQzODU2NworOjEwMjUwMDAwQ0UzMzkyMUI0RTg1NDExN0U0NEY4QjI0M0JDMjI5ODU2NQorOjEwMjUxMDAwNzlEMEFGNzRDRTc0RThBQjU1QTgxN0U2MzU2NzA0MjBDMAorOjEwMjUyMDAwNUQ2OEY1NkUxQTg4RjJGRjhBNjc0OTZFQTk3QTY4Njk1NAorOjEwMjUzMDAwODZBQTYyQkZFOUQxREREOTRENjRCQTVEOUNEQjI4QkZCNAorOjEwMjU0MDAwNjM4QUYyM0JDNkM5QTBGQzhFNzk5NERGMzE0NUY5MUQ0MAorOjEwMjU1MDAwQkYyRkQ4QTA5N0ZGNUUxMEZFNDI2OTRGRUVERkQ4OTFFMworOjEwMjU2MDAwODdGRTNCREYxODk2NTU0N0U3QUQzRDBCRTVGNUM1NEFCRAorOjEwMjU3MDAwQjgxQkY5RDE2Mjk0OTUzMEZGNDkxOEU5QjE2QzZCMjIxMAorOjEwMjU4MDAwM0Y2RjA1OUVFQjZEREM2RkY0QjVCODlGN0I3MzA3Qzg5QQorOjEwMjU5MDAwNjQyMUY0NzlDQjY1MUIwQkJEMzczQjlBQzVFOEYyNjMyOAorOjEwMjVBMDAwNkQ4OUJBRkEwNTBFOTdBRUZDN0IwOTAzNzVFNUI3M0E1QgorOjEwMjVCMDAwRjM3NEY5REJCMzZFRDBENTlGRTAxRUFEQ0JERjMxRTIxMworOjEwMjVDMDAwNTY1REZENDk5RTQ5QkFGQzk0QzIxOUJBRkFEMzhBNEJBQQorOjEwMjVEMDAwNzVFNTc3NEQ5RkE3MkI5RkUxNURBOENCREY1REY5ODA2NworOjEwMjVFMDAwQUVGRTNENzU0Qjc1RTU1RjlCNDAyMzA1N0E2OTQxQkRBNQorOjEwMjVGMDAwQ0I4QUVGQTdEODI4RkRCRUVBMzAyM0RGNThGQzlCNzRCNgorOjEwMjYwMDAwM0JFMjdCRTQ1ODUzNUQ3N0Y2RkQ1MzQyMUU0QUNGRjYxQQorOjEwMjYxMDAwOUM0MDdBNDkxNkVGRTMyNDhCNzc2RUJFMUFDOEYxOTk3NQorOjEwMjYyMDAwQzQ4MEFBNDhERjZENEQ0NEZBMzVENjMzOTY4RjhDNzgzNgorOjEwMjYzMDAwRkQ5MjEzNzA1OEZDN0NGNDM0MzNGMDg5OTFEN0JGM0U3RgorOjEwMjY0MDAwMzQwREYyMEYzRTNGOUVFNzZGN0FGRDk3QTk5MDVGRjczQQorOjEwMjY1MDAwRkNDM0QzQ0NDMEE3NDYwRTc5RkQxMjk2MjdGQ0UyNzZDOAorOjEwMjY2MDAwOUU5RkMyNDhGNDc4N0FEMERGQTdGQTcwRkVCN0E0QUU3NgorOjEwMjY3MDAwNzE3MzNCNDlCN0Y3Q0M2NThBNzBDMEZCREEwODA3NEMyOQorOjEwMjY4MDAwMDM0MEJGOThCRTBFRjQ4QkU5MUI0MEJGMTVDMDlGREUxMAorOjEwMjY5MDAwMDJGQUM1RjQwOEU4OUZGOEZEM0Y0MUZGQzRGNDVERDA5RAorOjEwMjZBMDAwM0YzMTdEMEZGNDRFNEM1QjQxRUZDNEY0NzcwREQzMjlERAorOjEwMjZCMDAwRkRBMEMxNEJFREZFRDA1MDQ5RTlEMTg2M0FGQUZFNTE1QQorOjEwMjZDMDAwNDMzREE1N0Y2RUYwRDFGN0Q4NDFEMjhFMTE2MEJBRkJBMQorOjEwMjZEMDAwMDFFODY3NDQ3RkUyMDFDQkI5NTAzRkIwRjQ1NzRBRkZBRAorOjEwMjZFMDAwNjQ2MzFENkI4QjQwN0VEMTY2OEVGOUQ0MTZGNDNCRjY4NQorOjEwMjZGMDAwNkMwNzMwQjM0RjQzRTRCMTY4RTY0OTFFNDRFM0Y3NzMxNworOjEwMjcwMDAwOTBERjQ4N0NGRjU1N0Y2RkVBMjBFMDNCMUZCQUE2QTQwQworOjEwMjcxMDAwMEY1NUYxRENBQTdCMTNEREIyMUY4QUZCRjVDNjdFQkYyNQorOjEwMjcyMDAwMTJGNEYxRDc0MTlFNEM2QzI3RkRFQkQyQkZERDE1Mzc3QgorOjEwMjczMDAwMTNFMjdGMzc4NUM0RUJEMDVGNDhEQzhERjQ4M0NCMzg2MAorOjEwMjc0MDAwOUY5QjZERkM5RUIxRjQ3M0NCNzgxRUQ5NUZDMTE3OEMzMworOjEwMjc1MDAwRjhDM0E4RDU2NjkyNUYyMkNEMkM4MEZEQ0JCODlENTFFMQorOjEwMjc2MDAwQjZFNjNDOEM2MzE4NTU2M0E3N0JCNTdERTBCQjk2NEZGRQorOjEwMjc3MDAwRjUzQzJBQTQ1QkZGMEFGNTczODM3RUY1M0U2MkZFNTBBQQorOjEwMjc4MDAwNEVGMzJGRjhDMjRCNzZEODUxMjJBRTAwREJEQjc4Qjk3RQorOjEwMjc5MDAwMEZEQjhGNDJEQkMyNzU5NDEyN0Y3QTFBRUZFREU2MDdFQQorOjEwMjdBMDAwRkRGQzU4M0Y4MkQ3MEY2MDdGMDNGRTA2RTM0NTA1RjcyNworOjEwMjdCMDAwNEQ3MjZDNzMxRUYyRUJFNEY5NzZCQTE3QkE3MTc0ODAzRAorOjEwMjdDMDAwREVCMzIyQTMxM0MwNjU4QUQ0OUY2QzIyMkZGRDc5M0IxMAorOjEwMjdEMDAwRkE5MDFENjlBQ0Q4RUJDMzlDREUxOTg4Q0Y2MkFCRTNERAorOjEwMjdFMDAwOTMwOERBNjc2OUM5Njg5RjlDMjRFNEU3N0Y4MkI3NTkzOAorOjEwMjdGMDAwRDg0RUMyNTNFMjQ1RTI1MUUyMjMyNDdFOEFGMEQwMTM0MAorOjEwMjgwMDAwNUU4REY4MzRFMjUxRTJBRkUwOEIyMDVFMTBBRTU3RTIwRAorOjEwMjgxMDAwMkQ4ODU3QjRFN0ZFQkJFMEVEM0EzMzdGQkZDQzVBNjM1NworOjEwMjgyMDAwQTM3N0QxQUU4NkM3N0IzQkQ4Rjg2OEE4RjI5NUQzRkJENworOjEwMjgzMDAwMTVGMkNGRDJDQkNFQjczMDVGQ0U0NjhGNDdENENBRjI5NworOjEwMjg0MDAwNkY3QjI4Rjc3RUQxNjE4OTBFQzFGN0NEMDJERjE5QUUwQgorOjEwMjg1MDAwRUVFQkNCN0FGMjNEMDZEOTdGNDEwRkY1REYwOTkzNzE5QworOjEwMjg2MDAwMTcxRTdCREVGMDYwRkNFM0UyMDIwRUZGNDI5NzRBRjBBNworOjEwMjg3MDAwMUY5QjMzOTdFNDY0NjZFNzcyQTYxM0ZFNDNCRTM0RkVFMworOjEwMjg4MDAwOUI2MjdBRDdGMjRCQjYxMzNEQjc2QzdDMkZCRDdDNUE1NgorOjEwMjg5MDAwNjhGMDVCREYyNkU0RDJEQjBDNzJBOTUxQUU3QzcxOTA0QworOjEwMjhBMDAwRjA2N0JCOThFQjNCQkU1N0Y5MzJFNzZCRDdGQTVFMjU3MgorOjEwMjhCMDAwN0ZFRjc0OUNEODY3NDk4MkNFRDI5QzJBMUI4OTc0QzQ0RQorOjEwMjhDMDAwQkM3NDRFQkU4MUVGOURFNkUyQkJBMDNFQ0FERkNBRkNFRgorOjEwMjhEMDAwOTRERUNFMDI3NEJFNEUwMDQ2OENGOTNCMThBMzdCRTQxNgorOjEwMjhFMDAwODcyMzI2OTZFMEREQjhCMTQzQzcwRUMwRUYyMUVGQjJEMworOjEwMjhGMDAwQkQ4N0YzOUJBRjdBRkZDQjExRjIyRURCRUJFMzlDNzQyOQorOjEwMjkwMDAwQkZGMjc1NUIxQUM5NUZCODBGMkQyMUY2QzBCN0UxN0MyNQorOjEwMjkxMDAwMUEwMEU3Qzc2MTM4QkYzMDdEMTNDRUFGMDFCMERFNUY2QworOjEwMjkyMDAwQzNGOTg1RjlEQkIyOTYzMjZDMzdERUE5OEZEQjkxRUQwNgorOjEwMjkzMDAwNkY3NzhDMDVDNUE0NjdGOEREOUVGQjcyM0Y4NEVGM0I4MworOjEwMjk0MDAwMzE5OUUzRDA3RUZFNEVDQ0Y1RTM3MEJERUZDNEY0MzE5NworOjEwMjk1MDAwRjFENEFBNTEzQTc4RkY4MEVFRTQ0M0I5MEY4MkUzOERCNworOjEwMjk2MDAwQTdGMThDRjA5NUYwMzRDMjUxQzJGNzVGODBFN0U1RUUzNQorOjEwMjk3MDAwRTBGOTk1OTA5RjNCNkRCRjhGNEE0ODQ1RkY1RDk0Nzg4NQorOjEwMjk4MDAwQzdGMjM3QjkyQUU0NEZFM0Q0MTIzMTVFRjUyNjlBRTc0RAorOjEwMjk5MDAwQThGQTFCOTg3OTI4Rjk2RDcyMTBBRTM1MzYwRTJGQTM2MAorOjEwMjlBMDAwREQ4QTZERUQ2MzBBOERERjNEQTM3OUMzQjI2MTlDQ0ZGMworOjEwMjlCMDAwMzZBQTc0NkZGQ0ZDOEI2MTY0OEYzQUU1RTdGNkI2REJGMAorOjEwMjlDMDAwMTU2RjU0MzZDQ0FGNDY3NUFFQzFGNzQ3RDkzQkZDOUQ2OQorOjEwMjlEMDAwMzNGNkNERTE5NEM5OTFERjgxNEVCN0YyRkJGNjM1QjZGRgorOjEwMjlFMDAwRjFEREUyNTFFQTUzRDEyRTBGRUQ3MzI2REU4Qjk0NzJBNgorOjEwMjlGMDAwNDUzRjJCN0Y5NzQwQkU1RkQ4OTM5QzMxM0M5Q0YzQzFGMQorOjEwMkEwMDAwN0U1NkNFQjcyNTVFQTExREU1OTNBMDlGRTFDMEU3OTI1QgorOjEwMkExMDAwN0UxQTRFRkE0NTYzNkY0RjA2QUU0RkRBMTEzQUZCNDUwOAorOjEwMkEyMDAwRjg5MURGOEUwQTY0RDNCQjVDODU0NzU0OEEyNzdFNURBQworOjEwMkEzMDAwQzQ3NzdEMkZCQkNFOUUwQTc4OUE5NEVFNzU2NzkzQkVCRAorOjEwMkE0MDAwRjk4RDhBN0NFNjVENTg2NzFDREExRjhFMENCNTkzRkUwMworOjEwMkE1MDAwRjgxREY1RDAxMUQ5ODI1RkU0QjI1Q0REN0QzNTQ5Nzc5MAorOjEwMkE2MDAwQUE5REUyNzczQTNGRTBGN0YxMTZCRENERTMzNjE3RjVDMAorOjEwMkE3MDAwNTYyOUZFREYxODE3Mzc4QTY1RkMxNEVEOEQ2MzdCNTlFNAorOjEwMkE4MDAwREM3RTY3OTBCRkM4Nzc4MEFDMDkyNkU2MEM5MUIzQzNBMworOjEwMkE5MDAwOUNFMUNDMTkzMjlGODhBQzU4NUQzRUQyREQ1NzU3M0Y0MAorOjEwMkFBMDAwN0E0NEFBQUUzQ0M2MzM0ODU3MUU1Nzk4QUZDQkY3MkU5MAorOjEwMkFCMDAwQkU1MTU3QkZDRkY0MzFCQTdDQTJGNzM2NURGREE0Q0EzMAorOjEwMkFDMDAwQzlGQTNDRUUzQjgwN0I3MkRENEM1REJCRkVGNTY1QkExRQorOjEwMkFEMDAwN0EyRTVGOTVBRTlDRjkzQ0FENTlGMUM4QzdGOTVGREEyMworOjEwMkFFMDAwRUE0NUJBRjJBN0EyMEE3OUZDQjg3RDBFREQ1MzRDNkYxNQorOjEwMkFGMDAwRkE4MUFFM0Y4OURGQTQzODhFNUZFNkU0RTc4MzBGRkVGQworOjEwMkIwMDAwMjNCRjg1QzA3MzQxODJGRURDMThFQjE4RkQ4NjgzNTIxQgorOjEwMkIxMDAwQkQ1RDIzRTkyQTcxNTAwRkZDQUI3NDUwQ0JGNDc0RDAyNworOjEwMkIyMDAwOEJDN0YxMTRCQzNERDQ4OTcyOEMxMUZGRTg4RjA4NUQwRQorOjEwMkIzMDAwMjdGQTIzNDJFMTgyRkU4OEQwM0NGQTIzNDJFQkEzM0ZFRQorOjEwMkI0MDAwMjJCNDFDRkQxMUExRTU0MzhGRThGMTNGQUM1NThGRkY4NgorOjEwMkI1MDAwRUI4RjhFRjlBNzc4QkFBMTRENEYwRjQ2M0NERDc0NEEzMgorOjEwMkI2MDAwNEYxRkEzQkNFMTA0OTdCMTIwOEYyMUJENEIzQzREODc4MworOjEwMkI3MDAwRkZFODlDNjdDNUQxNjgzN0I4ODU3OUU4NUVDMEZGMTY2NQorOjEwMkI4MDAwQkU1RUM4MTZGNjIzODFBRjJGRDk5QTYxRjhDRUU1QzU4RgorOjEwMkI5MDAwNTJDRUM3N0IzQUU3OUZFQkVGNzkwOUY5RUUwOUU0RjNGMAorOjEwMkJBMDAwQzNBRUI0MDNDODc4NTJERjE4OEU0RkRGQjEzMEUyNTc5RQorOjEwMkJCMDAwNUY5QkRBMjJGMUZDRjhCRURBNDY3NkY5NDRENkYxMjZCQworOjEwMkJDMDAwQkUzRkUzRThFNTNEODRGQ0E4MEY0NjBGNDBGOTkzRjNEMAorOjEwMkJEMDAwRUVDQ0MzNzM2RUQ2QUZBQzI5MjhEN0NDRUFDRkRGMTNDNworOjEwMkJFMDAwNjQzOTZERjQ0RThCOUNDRkFDMjQxRTdGRjQ3NkI2RTAzNgorOjEwMkJGMDAwRDM2RTFFODdGNDZFMzZCN0ZGNDRCQTFEMTQwNzVEOUE3NAorOjEwMkMwMDAwMjNERUExMzFCMzk0NTk4MzkxMEVERjBEQ0I0NDNBNUI5RgorOjEwMkMxMDAwQ0ZFRDVDNkQxNjI3QzVCNUY4ODAxRUQxNEY4OUYyMzYxMQorOjEwMkMyMDAwQ0FDM0M5NDIxRTZERkM5M0NEQzZFOThFRTlDRUY3ODFCOQorOjEwMkMzMDAwN0U5QjJFMEUzNzdCODc0Mzk3MUZEQzlDQTBBQjNGRTQyNworOjEwMkM0MDAwODA1MzU3OUUxN0M4RDI5NTBGM0RFMkQ2RTU4N0I1OEVDMworOjEwMkM1MDAwRDBENUJGRkVBODQ3OTdCRkExQUQ1MDU3RkZBNjUzQzUxQgorOjEwMkM2MDAwQkE3QzEyRUI3ODAyRTFBOUU2QTQxMjNDRkEyQkMyMEU2MAorOjEwMkM3MDAwRTBFNDc4OTlGNUZENzhCQTRGMjNGNTA4MTk5N0VEMTUzQQorOjEwMkM4MDAwNzQ2Q0Q0NDdGQTZCNUU4QUYzNkU0QzY0NkVCQTBGNjI1MgorOjEwMkM5MDAwMTNGQTIwRDNFQjI5NUUxMTU3MkRFNTc5RTZEM0M3NTVGQQorOjEwMkNBMDAwQ0I3OEVBMkU3RDQ2RTgyRjUyOUYwODg5QTdGNkUwRkNGNAorOjEwMkNCMDAwNjUzQzc1MTdERUM1RkI5MjQ2RkE3NEU0MDhCRjkwNjE2NworOjEwMkNDMDAwMURGRDM1N0VGRkFCRjEwMThERUVCMUM4RjkxOUU3MzU3OQorOjEwMkNEMDAwNDNDNDAzNkVCMzc1RkZGRTUwNEEwRUI3MUI2QzRFMkRGNgorOjEwMkNFMDAwOEVDRjgxN0FDRkMwRjE0NEYwQkM2MjNDNzc5QjBGRTA3RAorOjEwMkNGMDAwREJGODIzQ0RCRENDNzlGNUYxNjYwREUxRUIyOUMxNzc4OQorOjEwMkQwMDAwNTU3M0U4OUQ0RUJBQjcyNkM3Q0QxNUUzRjZDQTU1QkEzNgorOjEwMkQxMDAwNURERkFDNjgxRURGQzVBMjM1QkE3N0QxRjM3ODFDQUU5MworOjEwMkQyMDAwMDkxQTVCNEVFRjI0ODk3QjA4RjdBQzY5NUU5QjA5NDU2NQorOjEwMkQzMDAwMjU1QTkzODVCRkFCRUZCN0EwOURBODY4MENDODgxNzlEMQorOjEwMkQ0MDAwQzAyN0I2RUQ1QjZGMDdGOUU3OTk3QTMzRDk3RDg2RTU0MQorOjEwMkQ1MDAwMjRERkU5MUIxMEJDNTdEMjFGRjQzNEE0OTMyMkM0M0ZENAorOjEwMkQ2MDAwRjRGQkZDNjAxRUVGN0M2NzBFNUY1RjgxRkE0REQ3N0Q0MAorOjEwMkQ3MDAwMDBBQjhFQ0Y3M0ZEQUYxQkJBMjM3QTk0RUJGOEJGQkFDQQorOjEwMkQ4MDAwMUYyMEU5RDcwODI3QTk1RjMzNzE3RTBEMTBGMzkyRjA1OQorOjEwMkQ5MDAwRUJCMjlGMDhGOEM5RkIxOUNFODU5NkUyMkQ3NkJBRTcwQgorOjEwMkRBMDAwNTE4ODcxNjUxMjdGMDcwNzczQkE1QzJERTA4MUY1OTAzOQorOjEwMkRCMDAwMUZGNTU0QUY0MENEODk0NjNCNzgyNzczNDYzQkFFNjI0MgorOjEwMkRDMDAwMEZGRTNGQkEzNzQxRjBFRkU5QkU1NzRGN0NFMjBBRkVGMworOjEwMkREMDAwRDBDM0ZEQUY5RUU4OTNGRUJFQzMzREIwMTAzRUMxRTMzRAorOjEwMkRFMDAwN0QwNDNFRkMwMzRDRTQ1NzVGMTVBOURGQzdGQjczQjhCNQorOjEwMkRGMDAwRERBNTQ0RUMyNzM4QjdFRDc5N0EzRUMxRDBBRURGQjgxNworOjEwMkUwMDAwNDIxNTdDNjI0RUQ3RUY0RkUwRjdEOTJCMkMyNDVGMzM2RAorOjEwMkUxMDAwNTZGQzE4QzYxOUZDNjVCRDg1RTI2MjQ3NzkxOEM5MzFCMAorOjEwMkUyMDAwNjUxQjE1RkY2NjA1Q0ZEMTkxMDkzOEZGNTI5RkZFM0MwNworOjEwMkUzMDAwQkU4NUI5NTdBMkZGQTM3Q0I1RkVGQjVDM0JGRjlEOEExNAorOjEwMkU0MDAwRDlDNjc3NTM4NEJFM0VGNzJBRkFGQThFMUM3MThFQkIyMAorOjEwMkU1MDAwOTk5QkU0MkVFMUZGQUYxNDZEOEM3MjU3QTc5RkZCQ0RCOQorOjEwMkU2MDAwNTBERjU2QjlERDg5RTJDNkU0RjlFRTQ0RkY0REM4N0I3OAorOjEwMkU3MDAwMjAwMENGRjAyQzNDQzc5NzlCQkI4REU3RUI4MjY3MEYwMAorOjEwMkU4MDAwRjEwQUU3RUMyMjVFQzFDRUUzMzMzQUY3ODY3MUZGQTY4MgorOjEwMkU5MDAwRjQyQjg5RkFFNzdDOTdBODFDRUI2MzZGRTdGMzc4RENFNworOjEwMkVBMDAwODVGNDI3MTlGRDU1OUQ3NjEzRjk1QjNBRjc0NjkyN0YxNQorOjEwMkVCMDAwMUVGRDM4RDE0MDA3Njc0QzdCRTI0N0I4ODJGM0YzQjY3QQorOjEwMkVDMDAwQTkzQTNGODgzMUY1MkU3RDg5RjRDNTgxNjlERURGMjE3RAorOjEwMkVEMDAwNUYzRjZCNzZEQkRDOTA3RkQwRkUzQUJEMUY1NTI0RUM2NAorOjEwMkVFMDAwNUVDNkY5NzZFOTVEMjNGOUZCMkU5RDNFMkVDRjc2MTY2MAorOjEwMkVGMDAwRjI3NzM4ODAyRjMyREM0NzMyMEU2MTEyMDMyRDE1RDI2MworOjEwMkYwMDAwRDJDMDBEMzQ5RkVGRUFDRjk5NzIzOThGRkIzMTJGREY5QQorOjEwMkYxMDAwNDRFREJEQUI2RkEwN0NGRkU1NkIxN0UyM0Q5ODY5OEQ3QQorOjEwMkYyMDAwNzMyREU4QzI2RTdCNjI0OTQxMzgzNDZENEJGNjJGMEIyRQorOjEwMkYzMDAwNDdCQzhENTZCQUI1Q0I1RjEyNzg2QjMzQzREN0NCQjREMAorOjEwMkY0MDAwNUNGMDIzN0M0MzhFRjMyNTExODdCNDU0QTE3REIwNDhGNworOjEwMkY1MDAwNjEzMjJFODlGOEI4Q0M1RjZBMTJGOTAyOUU1RkJDODI5QQorOjEwMkY2MDAwRTdEQkM0RkJGQURCODUxRDA1RDc4RDI5QUUxQkY1RkUxQgorOjEwMkY3MDAwOURDMkNFODJFQkM2MTRENzhEREY5MTZGNjExRUY5MTYwQworOjEwMkY4MDAwRTY5MTZGNjExRUY5MTZBNkM4QjdGMDdCMTkyQjRFQzlFMgorOjEwMkY5MDAwNTNCOTFGNkE1Q0U4QkVCQjZDNjNFMzQyRjYwQkZBQTE0RgorOjEwMkZBMDAwNDJGM0U4ODcwQUFEOEY3RUE4RDA3MkY0NDM4NTk2QTNEQQorOjEwMkZCMDAwMUYyQTM0OEY3RUE4RDBGQUU4ODcwQUNEQjMxMUI3MDY0RQorOjEwMkZDMDAwRjNDOEU3M0M5Mzc0RjkyOTIwRTc4RjBCRDlERkU4ODczMgorOjEwMkZEMDAwMEFFRDFGRkQ1MEJBRkVCQzBCNzVFREVGNjZGNUJBRjZCMworOjEwMkZFMDAwRTg4NzBBQUQ3RjZGQkRBMkYzNTNERDJCREUzOTJEREZGRAorOjEwMkZGMDAwMTBDN0U5Qzc1OUVDMUUwQzc0RjA1RjExRkZCOERGOTJERgorOjEwMzAwMDAwOEE3ODZFOTlDN0Y1QjI3MDM3Qzc3MzUzMjFDN0JCODlFOQorOjEwMzAxMDAwNzEzQzc3Q0MyMDNDMkZEMTc4QkU4MEM3MjcxQkU5MDdCNQorOjEwMzAyMDAwRkQzREUzMkNEQ0RGODMyOUZBN0IzMDQ1N0YwRkE2RThFQQorOjEwMzAzMDAwRUYxOTk3Q0VGRDNEOThBMkJGMDdCRkEzQkYwNzUzRjQ3QQorOjEwMzA0MDAwRjc2MDhBRkUxRTRDRDFERjgzMjlGQTdCMzA0NTdGMEY2MworOjEwMzA1MDAwQjY0MzdGMEZBNkU4RUZDMUVGRThFRkMxMTRGRDNERjhERQorOjEwMzA2MDAwRkQxOEZBOUQyQ0MxNzlBMTFDM0Y0MEE3M0YwMjFERUEyMworOjEwMzA3MDAwRjQ0Nzg3MkU4RjcyN0M2ODdEOTRFMzQzQ0I1MThFMEY4QgorOjEwMzA4MDAwMkQ0NzM5M0UzNDhGNzI3QzY4N0Q5NEUzNDNGMzc1Mzk2NAorOjEwMzA5MDAwNEVEQTVGMjhDRjg3QjY0Mzc5M0UzNDNGQjhDOUY3MjY2QQorOjEwMzBBMDAwREFDRTI2NkNCQ0YwMDZBNjZEOTFDQTMzMEFCMDhDODVDOAorOjEwMzBCMDAwQkJGNkRFODk3RUI5QjYzMDI1MjUwNjM4QTc0NTc5RTUwOQorOjEwMzBDMDAwQ0U3MTkwRjc4QUY4QkY1Q0Q2NjE0MjdDN0JDNTdCRUEwMworOjEwMzBEMDAwREUwMEEzNzhDQkMxN0Y0REE0RjIxN0M0QkQ3RUZBMDNGNgorOjEwMzBFMDAwQkNFN0VENjVGNEJCMjREMjVGMkNEQkJCOTk0M0M1NTQzMAorOjEwMzBGMDAwRDYwRkU2QkJBRjY3MUM1RkQ2MjNGRTE5MzIwRkJDMDFBQgorOjEwMzEwMDAwOENGMTJBNzk0QkVDRjkxOEVGQjlEREE0NTA5Q0M0RjY4OAorOjEwMzExMDAwNjUzQzRFRDg0ODU3REIwNDVGREE2RURBRjMzQURFMDNEQgorOjEwMzEyMDAwRTkyODU1RTgzRTcwODY5OTFEQjFFNDIzOUNFQUYyRjE0NgorOjEwMzEzMDAwRkM1RDNCMzg0NkFDQUJFRTQ2QkM2RjIyRTcyREVEOUIwOQorOjEwMzE0MDAwQzAyN0U4RkVEQ0M4OEVENkIxRDFEMDhGRDczNzlBN0VBMworOjEwMzE1MDAwMjdBNTQ4RTM3MjAzQjY0MzdEMzJEQkE3NzhCNjg0RDA1NworOjEwMzE2MDAwRjdFMzgzMzlERkY0RkFGOEY4M0ZERjM0OTFCNzBCRTc4MAorOjEwMzE3MDAwRUQ3RUJFMjk4QUUwMzg3MUI5NDJGMTUyMjM3NzMyMEZEMQorOjEwMzE4MDAwREVDRkY1OEI3OTY3RUYwQ0E4Mzg1RUU5NzIzRTlFRUNENgorOjEwMzE5MDAwQjc3NDYzMEFERDVCMkM2NTZERTMxMkM4NDdBMjMwRTRBNworOjEwMzFBMDAwREIxMjZFQjBCRTM3NzA3REEwMzYxQzQxRkJGNEI1REU3RAorOjEwMzFCMDAwRkJCOUY5QkE5ODAyOENBMzYzMkQ4Q0RFQjE5QzcwREQ0QgorOjEwMzFDMDAwNkY3NUVCMjVCNDBGQTc3RUU5NUNDQkY0MjlGNDVFRjBCNAorOjEwMzFEMDAwNDRERkQyNjVBODZFNENGMDJEN0NCMzM3RDZERkNBREM1NQorOjEwMzFFMDAwMkUyNzFENDU3NDJGNTZDRTY3OTA2NzhGMDk4RTQ1OTYwMgorOjEwMzFGMDAwQzM1QTRENjEwQUUyOUIxRDhFMEJBMTFGRDhGOTUzMTFEMgorOjEwMzIwMDAwREY3OTZFMEJCRERGM0JDOUVDQjBEMEZCMTEzREM0OUYzNQorOjEwMzIxMDAwNUNCMkNCRjgxMzgzQkM2MDg4MzM2OTVDNzIzNDA1RUQxMworOjEwMzIyMDAwQzk4QjIyNEQ2NEZGNURGNDEyRkYzRDAwRUYwNjg1Rjg2NworOjEwMzIzMDAwOUE5NDgzNEE0NTlDREFBNUU1NkZGNkJFMEJFMUJFQzdCQQorOjEwMzI0MDAwNDJGREM5Rjg5M0RBMzQ3RjhBMDlFM0VBRkI2RUNFOEQzQQorOjEwMzI1MDAwNTU0OTBFRjhGRDYwOTQwMzdDQkZCQzczMDRENjVCQzE3NgorOjEwMzI2MDAwREZCMUJDQjQ3QzVBNzQ4MDdBRTJGRTlBMEEwMUFGMEFEQworOjEwMzI3MDAwMTFDNzU0OEEwRjdBQUJDMURGRDM5MkY3M0I1ODEzOTcyQgorOjEwMzI4MDAwRjdBNDNEQTdGNDM3NDNERjQyRkM5NjNFMkRERTk1NUU2MgorOjEwMzI5MDAwNUQ0QUY3QjI4RDcxNDRGMzk2NUIyOEVFNjg5RTQxMkUyRAorOjEwMzJBMDAwQUMxNjcyNjFGNTU1RTRDMkIzODMwRDcyQTFGQ0JEMTQ3NgorOjEwMzJCMDAwRDE4NkE5RkRGRTgwNzE3QkYyNUU2Mjg5ODVFRkZGOTI2NworOjEwMzJDMDAwM0Q4Q0VDQjAyNTRCQzc5QUU4MURFNDk3MzhERDk0MkM3MworOjEwMzJEMDAwRTVGMjREQzlDQjFFQkE1RjI4RTVDNUY3ODUxQzMzRjk2OQorOjEwMzJFMDAwNzIxMkMxRkRGNzQyNkU5OTg2RjE5NTAwREZBMkI2MzBFOQorOjEwMzJGMDAwMTE4Nzk1NDhFOTVEOTc3OUJDRTU2NDNCRTcwMzZEMDc2NQorOjEwMzMwMDAwRjkzQjEwOUQzRTJCOTdBN0RFNjBGQzFEMzMwMzVENEVGRAorOjEwMzMxMDAwMzJGQjRENzhFMUNFM0QxMkU4MTJGMjEzNTAwRTgyRkVFMAorOjEwMzMyMDAwQTZBMzVDMTQ4Nzc0RUUyQUEwRjhCRDQyODVFRUJEMThGMgorOjEwMzMzMDAwRTlCQ0M4NTJGNzI2QzY4NzE2NkQ2MzZFMUYwQkE1NzNDRQorOjEwMzM0MDAwQTA1RkVDQ0ZBN0QwRkIwMDVFQTFENzRBRkEzNUQyRkIzNQorOjEwMzM1MDAwQUMwODYxOEZCMjczN0I1Mzk3NUQwMjY1NTQ3Q0E0REIyQworOjEwMzM2MDAwMTc3NTE3Q0E4REIzRDBCN0Q3OTcxMzBDQzY5RDQ1RTYwRQorOjEwMzM3MDAwRjBGMkY0REQ1MTc3MkQ0NzI1QTcwNzNCODVGQTAzOEQ0MQorOjEwMzM4MDAwRTBFMTk1RUYyMEY0NjAzNzQwN0IwMUYyQzk3QkVFQ0JBMgorOjEwMzM5MDAwRDNDQTQyRjhFNDk3NDNDNjE0MENFOTFEQzQ3NzU5RDc0MQorOjEwMzNBMDAwN0RCRjFDN0ExNzc0RDE4M0U5RjQ3QjM4M0RDOUMzRTUyRQorOjEwMzNCMDAwMDA1N0RDMTdCM0EyREJFRUM3NUY2NjFCOTdDQjNDRTM3RAorOjEwMzNDMDAwNDZFMEVGMEIzMkY5MDg3OTAwRTMwODY3OEFGQ0MyRENCQgorOjEwMzNEMDAwRUJGRjg4QkFFREFDMDg5RUY3RUNFRTc3MTdDNjg1RDQwNAorOjEwMzNFMDAwREFEQUM2MjNEOTJEQzhGMTE2RTIzREM2MjA3RjJBRjZDNworOjEwMzNGMDAwMjQyOUM4OUZGMjAyQTgxM0NFQzgxMEU3OEZDMTFFQjFCRQorOjEwMzQwMDAwMzBEN0M5RDc2OUIwNEI5NEU3NzBCRTJEN0YxN0U1Rjg2OAorOjEwMzQxMDAwODNGQjc3RTM3OTI1RTc3RkJDODdERjYxOTg5NzZCRkFCOQorOjEwMzQyMDAwNUZCRDA3NjFCQ0ZGRjBGREJFREU5OUI5RDBGRjYzMjYyQQorOjEwMzQzMDAwN0U5RkJGQUZEQUM0ODQ3RDg4RkNDMjkyNUYzMEYxMEVGQworOjEwMzQ0MDAwNDYxMEVGMUU3QTQ3QjdGMTQxQzUxMTZBOUZGMkFFNTY5QQorOjEwMzQ1MDAwRjgzREZBMUVFQzM4MkNBQkUzODk2REQwNkU1NjgzNDZFRQorOjEwMzQ2MDAwQkZFM0I3Mjk4M0QzQ0YyNkEwMUZGQUJEMTRBREY1NEQxNgorOjEwMzQ3MDAwOUIyQjA4Qzc4RkVCMUZCMUQwRUZEMkIwNDAzQUJFQkYzNQorOjEwMzQ4MDAwMzNCMzJFQ0M4REZDRjhDQjIxQzU3NUI5QzNGMEY3NDgwQQorOjEwMzQ5MDAwRENDNDg3MEEzMDg2MUNDRkYzNUVDNThCNzEzREI1NkJFQgorOjEwMzRBMDAwMEUzRDgzRUYwOTJDNjg3MUQxRUY5NTk0MUVDODVCODk5RQorOjEwMzRCMDAwRUY5QzdDMzlDNDVCOEZFNUE1NzYwN0JEQTczMTdGNzk4QQorOjEwMzRDMDAwMEM5RDVGQjNGQTg4N0JBMUFDODNGQzZDMTJGRTREQzJFRAorOjEwMzREMDAwN0U3NUFCOUI4OURGREIxMkY3MUQ4MDQxNEVEMkQ1RUJBOQorOjEwMzRFMDAwREU4RTI3RUQ4NDQ2M0I4M0YxN0Q4OTlFRUMwQkQyOUVEOAorOjEwMzRGMDAwODBGNjAzMkRDNENFMjhFRDEzOTZBQ0UzMzM1MDZFMjgyRQorOjEwMzUwMDAwRDFGNEY3MTI2NTdBMjg1N0U4Qjk0MjBGOUNERDc1NkU0MQorOjEwMzUxMDAwRTU4Q0VGODNGMkYxM0FDNTQxRUY0RERBOUQ3N0REMDA5RQorOjEwMzUyMDAwRjk4QTIzMTY4Q0VDNjQ0NUIxNEUwRERGMUZFODAwRkNEMAorOjEwMzUzMDAwNjI3Qzc0MTlFQzU3RTQzMzI1MjI0RUFCNjJDMzBEQjRBMAorOjEwMzU0MDAwREYyQUZDOTA3NkYzMEVBNzRDRUY1RTc3MzhGOTY1QTQ3RQorOjEwMzU1MDAwOUY4MDg3RkM5NjE1MEU4RjE2MUJCMkVGQ0I5QjE0REQ1OAorOjEwMzU2MDAwQkIwMzMyQkYyNzk3REJFMzRBNjAyQjIzRkNFRUI5Q0ZDNgorOjEwMzU3MDAwQTVFMURCM0UyNTIwNDY2MEZDREZBMTVDQTdDRTdGMENFOQorOjEwMzU4MDAwRjUyODFFQTQyODk1QkRDNURGODE4Nzc5QkJGODc4Rjk5OQorOjEwMzU5MDAwMjFGRDk3MzVGMTdCRDMzMjBGRjU0OUZFNzkzNTM3OTIwRQorOjEwMzVBMDAwRjA1N0VBODA3NUJCMzA3NUQwM0MwMTBFMDRBNzhFQjU4QworOjEwMzVCMDAwRDA5RjkzQzYyMTdDOTQwN0ZDMTZENEI3NEIzMDBFMDVFMAorOjEwMzVDMDAwRjIzMzFEN0UwQjhFNTNCNjlDQkY2M0UyNURDM0M3RjEyMQorOjEwMzVEMDAwQUU4RUQxMDZBMzdDNjQ3NjY4QzkwODNGRjEzQkFEMzA1RQorOjEwMzVFMDAwM0Y5MjIzMkIwMDJFNzgxRjBCRUZCQkUxRDk2Mjg0NEY1MworOjEwMzVGMDAwQTk5ODZGNDU1MzBDQkRBMzEwRkNCRUNFODJGODk4RDE5QworOjEwMzYwMDAwQzNCQjA4RTcwNUREOTYyRDFGNERGN0Q3MkJDQzFFQkE5RgorOjEwMzYxMDAwRTdFMDE1RjBGRENCQzJCMDg3RDAzRjMwNjNGREUzMTY4NQorOjEwMzYyMDAwMTdFNDNGMTFGNDdCNUVFQ0JCQTJENDQwM0FCRDU3QjQyMworOjEwMzYzMDAwMzBDQzhERjM5Q0UxNjhBMkY1NzVDMUY3NTE4MDg3ODI4QgorOjEwMzY0MDAwRUZEQzE0MTM3QzgxMkU3QzE4Qjc1N0IxNUU4RkNGRTA2RQorOjEwMzY1MDAwN0MzODdDMkJENjk3RDI3RTlCNjNGNjZBOEVEMDc5NkNCMQorOjEwMzY2MDAwMzg5NDhFRjdBQTY2QzBGRUM2NzcyNTk4QzM0QkY3MjUxNworOjEwMzY3MDAwM0Y3REY0QUUxNDVBMjdDQzEzRTExQUU5NzY4RUM3RjdEMgorOjEwMzY4MDAwODc4MDRFRjgzRDE4QjExRTc5QUY1QjhFNjcxOUMyRUY4NworOjEwMzY5MDAwOUQ1QTg2NzBGQjU5Q0ZGQkQyNDM3MjREMjNFMDE3RUQ0NAorOjEwMzZBMDAwREUzREVENEIwRDE5Mzc4Q0FCNTVGMERGOTEzMEVFNTMwRAorOjEwMzZCMDAwQjkzRkU1QkU5NEZCNTRFRURGNjcyQ0M1ODEwNDI1QzhGNQorOjEwMzZDMDAwNjdFMDlDQUQ3QkIxMUIzODE1MENFMTc4OTgyOUYwMEFCNgorOjEwMzZEMDAwNzA3RDIzRjQ5RTU3RUUxMEJFOUY0QjUyRjVGQjFERkJGMQorOjEwMzZFMDAwQzM3RUZCMEVFMTc4MkYxOTEzNDhDNzc3OTk2NDdEMzlBMworOjEwMzZGMDAwNkU0OTJDNkY4Nzc0OEZGNEQ2NTc4Qzg3RjUxNzUxN0RFMAorOjEwMzcwMDAwOTM4RTVGOTQ3N0YxOEI5RDJCRTI5MTVGRUM1MUI4MUYwNAorOjEwMzcxMDAwNzRFREUxRTRFRkEzRkNCQThCQ0JBRjY3NkJCNkNEQzcxQQorOjEwMzcyMDAwRjM5Mjk5RkQyOUExRUZGQkNGMDYzOTA3RjlDNDFDNzE2QgorOjEwMzczMDAwM0U1NzA0QkFFNzE3M0IzM0JDRDk0MzQyRjY3M0M1Q0ZCMworOjEwMzc0MDAwNzY2NTc4MzlCRjA5MjBCRkY5RjNBRTU3M0ZCQ0QxMTk3MAorOjEwMzc1MDAwM0M0RkU1N0FDQTU2RkZENjUyNkEwRjg1OUYyMkRFMUQ3RQorOjEwMzc2MDAwRTlBNEZCNzhFNTc2Q0Q4OUYxQ0VFNUNCNEI4OUZGQjJCNAorOjEwMzc3MDAwMDQ5MDBCOTU5MEY4MzMwMzVEOTQyRTU3RTgxRTU5NzkwOQorOjEwMzc4MDAwRkQ3MEJGRkFCRkM4QTdDQkQ3NENBMjc3MEYyNERFRTRFOQorOjEwMzc5MDAwRkIyQ0YyN0M5NUYzOUYyOEYwMzU2OTA4REY4NzMzMDUxMQorOjEwMzdBMDAwN0RDRkFDMUNBRDI1RjYyMkI5MUJDMzJDRDkwQ0YxN0QwNQorOjEwMzdCMDAwNDY4NUZFN0IxN0RFQkFGQ0Q3MzkyQjcxQkZFMEZEMjJCMAorOjEwMzdDMDAwRDI0RkQ2NThCOEJENkYyN0I3M0Y5RTVEQjRGRkJEM0IwMworOjEwMzdEMDAwQTFERTk5QzczNkE3MzA1NThGMzc5NDUzRTcwODc5NzUxRQorOjEwMzdFMDAwQUVCMEZGNzU4M0I3MzI5NERCNjQ3RUVFMjY4RUI3RjJGRgorOjEwMzdGMDAwRERCRkY5MDRERjEzMkI0OTE1RkM2RTJEN0YwN0EwQUM0QworOjEwMzgwMDAwNzkwRkUxNzFDNkVBNzUxNjE3Q0E3NTQzNUNCQUY3MzZDNworOjEwMzgxMDAwQ0FFQkYyMUM2ODU3OUVCOTdBQjMwNUY5QzRBMjIxMUMwMQorOjEwMzgyMDAwOEVDNkZENTAyMkUyODQyNTlDRjE1QzUyNDJGQzFCQjIwNAorOjEwMzgzMDAwM0VGMjQ3N0NGRkZFQkU4NTYxNTExOENGMjNDNzc5NEEwRgorOjEwMzg0MDAwRDA3RDc5NUQ0QzJDOEU1NzVFNTdGQTEzRDQ4N0U0Nzk3RQorOjEwMzg1MDAwNjA1Q0U3ODkzMEJFNUZDQUEwM0ZEQ0I3Mjc0NkJCNTMzOAorOjEwMzg2MDAwMTZFNTA0RTU1OTYzRkQ0NzA0MUQzRTY1RTFCRjUzOTMyQQorOjEwMzg3MDAwMTREMUZDMUNDNTM1MkMwODc3MjNGRjE4MzBBMENEOEY0MAorOjEwMzg4MDAwRTMyMjdERTNCQzM1MTNGRjVEOUIwMTM1NkQ5RkUzM0M3NworOjEwMzg5MDAwNDBENEE2QjgxQTRDRjE3RDJDMTRCREUzMjFCRkM1QzQ5OQorOjEwMzhBMDAwRUY2RkE1QUEzQzNEMjBFMDAzRTUwMTJDNjdCRERBRThGNworOjEwMzhCMDAwRjczNTQyRTI2Njc1RjRBQkIxQURGNEZCODk1QTJGNDY5OQorOjEwMzhDMDAwRUY5QjQ5N0E5NUZENDg3QTk1RjREQ0QzRkE5QUFGNzE2QgorOjEwMzhEMDAwN0QyNzVDMUM5RTlBRjhERDk0NkI1RTlGOTVGRjhFQUVGMworOjEwMzhFMDAwNUM5NzlDMUZDOEYwMUU3QURGRTM4NzgzQzlERTczNjI5MgorOjEwMzhGMDAwQTkzQjA1RTMyNjdCNUVFRkZBODJGODZFRDY2QjVDQTdFOAorOjEwMzkwMDAwREMzNzMyMTZCRUNCOUZENUM0RkQwRTI3MTQzOERGQTA5RQorOjEwMzkxMDAwREQ4OTg1NjExNERGMjZEN0Y1NURFREUxMUYwQzg5OTUwMgorOjEwMzkyMDAwRUZGOTQ3QTI5QzU5MTIxRUJDMkY4RkYwM0I1NkNGN0Y1OAorOjEwMzkzMDAwNUY1NzdFOTc3MjgxN0M2NzRFRjJFRjkzNzVFMkRDNjQ4RAorOjEwMzk0MDAwNkQ2QjcxN0ZCM0ZBMzQ3QUZGRTQ1OEQzODk0ODdDOEY2QQorOjEwMzk1MDAwRTVDNDY4M0UzRkQ5RUUzRTBCQkY5RkNDMjIzNTI3REU0MworOjEwMzk2MDAwMTM4QkI4RUZCNzA1N0REMDNGQjRERTk1QTc0MEJCN0I4NgorOjEwMzk3MDAwRUE4NzFFQzNGN0M3RUY1OURFODdGNEZCRDk3NkU3NEExQgorOjEwMzk4MDAwM0MxNzY3RkI1Q0U0MEY4RTU4OUZGNzI5QkVBMzM3N0I3QgorOjEwMzk5MDAwNzkzNkZENkVFRjdEMEEyQjI2N0Q1MkU4MDk3MzU4RDdFNAorOjEwMzlBMDAwMUZFOTA5NzMwNTVGOUI4QkZDMTJFRjRCRDUxRkE2NzdCMAorOjEwMzlCMDAwRjNFNkI4QzNGMkYwN0M5RkJCODFFQjA5NDUyNkI2MUE0QgorOjEwMzlDMDAwRkQ4OUZEMUI4QkM3MjMxRkVCNzg0MkUxQkZGQkJDNTE3OAorOjEwMzlEMDAwRkYwRTU3NzY2NkYxNDUzQzFGOENFRkRFREQ2NzY5RjYxQQorOjEwMzlFMDAwRTAzQTE4QzgyMzY4Nzc5QTZEMkZFNjcyQkRFMDlGQzc0QQorOjEwMzlGMDAwRDZCN0QzRUY2NTIyQkNFOUY3NzIwQ0Y2OUJGRTFBQkY2RgorOjEwM0EwMDAwNDdEQzExNjkyMjdCMUNFMEZEN0RGQzNEMzI3QzZGREREMworOjEwM0ExMDAwNEFFNzhEREU3RUQzRkZDNzIzRThGN0RBRTQzREExMEE0QgorOjEwM0EyMDAwRTE3N0ZBN0Y4OTEwNkE3QTAwODAwMDAwMDAwMDAwMDBDOAorOjEwM0EzMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJDRDU2N0Q0QzUzNTczMworOjEwM0E0MDAwMTQzRkY3QkU3RTUzRThFMzFCNDRCMDgwNjBCNzE1N0M5QgorOjEwM0E1MDAwMDUyNTcxMjZGQTA2NkE0QzY2QjRCOEExMzQ1MUE4NTFGRQorOjEwM0E2MDAwMTkyQTY1Q0MyQzAxOTczOUFCOURDRTY4QjZCMTA0MTVFNworOjEwM0E3MDAwODkyQzg1MjlGQjY3NUI0QTI0OUI2NjZDNjkyNENFNkM4NAorOjEwM0E4MDAwOTI4Q0M4M0YyNjZDQTQyNDBCQTI5OUExNjM1OTkwNjQyMAorOjEwM0E5MDAwRDM5RDczNUY5QjFBM0Y5MkZEQjlGN0NGNzlGN0RFRjNBMQorOjEwM0FBMDAwNzVDRkVGNzdDRTdCNTA2RkUyOTAwNUQwNkMwMkYxRUNEMgorOjEwM0FCMDAwRUQ3QjJEMEJBQzI4QkIyNUIwNTcwMkY0RDBFNjJBODA1NQorOjEwM0FDMDAwMTM1RDM1NTkxMTI3QzA5RTRGRDY5RkY1OTcwMTE0MzBDRAorOjEwM0FEMDAwNzA4NzUwRUYzNzVEQTQxNjU2MDBDQ0Y0NjVBNzFENjVCRQorOjEwM0FFMDAwNzhFRTBCOTQwMjlFRUZFOUZCQTA4MEU0NEM5RkI5M0U3OAorOjEwM0FGMDAwODg3QUVCRTREQTc1QTkxOTAwNEQxNzUyNUQ5MjFERTA0MgorOjEwM0IwMDAwMTEzRDZCRDE4RjgyNDY5OTAwRkI3RDM1RDk1MDA0RDA5MQorOjEwM0IxMDAwRjI3MEU0NTNCOTE4RTMxNzAyQzhFOEY3QUY1MDUyRDA3NworOjEwM0IyMDAwOEYyQTJENDdBRTE0NDgxQzQwMzE3QTczOTU5NTAwMDdCMworOjEwM0IzMDAwRjhGMEI2NTVFOEU3MUUwQjBFRTQwQTdEN0JCNjZDNEQzNworOjEwM0I0MDAwRjg3RDUyNEUxRjAxQjAxQjAxN0NFRkREMTY3RUVFRjNCNworOjEwM0I1MDAwRDFDRDFFQjQ2RkYxNUQ0RTIxM0YwN0NFOEM1N0M5Qjg1MQorOjEwM0I2MDAwRkY0MkIxQjc0NEM5MjRCRjdEMDNCMjg0NzdFRkVFMkI4NworOjEwM0I3MDAwNzdFMzNENEExNTEwNzk2RTRBNzM2RkYzNjA1RUQxMUY4QgorOjEwM0I4MDAwMjVBNURGRkVGQzc4Q0Q1NzMwRTlDQUM0N0E2N0QwNjYzOAorOjEwM0I5MDAwMDBBQzlGMzcwQzA2OTlBNDBDODYzNDk0MzMxMjc0ODRCRAorOjEwM0JBMDAwNTA2RTJBODJDNkFERDZDNEZFQUE1ODVENjY2QzlEMDVDRAorOjEwM0JCMDAwNkVEQ0RGMzc3MEFFQzA4RUYyNkVCMkI2REUzMUIwRkRCNQorOjEwM0JDMDAwMjc0ODQxRkQ4QjQ2MDNFMUU1RDU4MTQxNDFCQkREN0VDMAorOjEwM0JEMDAwQTYwNjUxNDI3MzFBNDA2RTIyN0U4RDkyMDQ4MDc1REJEOAorOjEwM0JFMDAwRDc4RDQ5QTUyN0Y2MDE4MjYyRkZBRTBFMzY1MjFFNEJENQorOjEwM0JGMDAwMDI1MUQ3NUIyODI3NzRFMUJEODRFQjQ0OUI1OUYxMTczMAorOjEwM0MwMDAwMTI0RTc2OTFDRjQ0QTdCNDgxRjZGRDZGMzMyODYxQjQ4QworOjEwM0MxMDAwQkU5Q0JDMTRFMzM3RDhBMDhERUM5MzU3ODRDMjFDNzFCMgorOjEwM0MyMDAwRjYwREE1NTY0ODFBQTUwNEJGNUE2NTZEQjE1RUIyNkU3MQorOjEwM0MzMDAwQzhDM0YzODM4MzRDMzZBMkNCODM1N0FGNkYwMDZEMEQ5RgorOjEwM0M0MDAwQzA5RTVGQ0ZGRDBGNTY4M0ZEQjFCQ0Y3MEYwRDFBRUM4MAorOjEwM0M1MDAwMThBRkU1MEJCQzJGQzY2RjA5MERGRUIwMDhGREI0NUVCMgorOjEwM0M2MDAwRDk1NUE5QzVFRDA0QThDMjNDRTgxNUUzQjQwRTY5NzVBMQorOjEwM0M3MDAwRjEwRDREMTk3NjNCMTM3RTc2MzlEMjRFRTQyMUI2NERDNworOjEwM0M4MDAwQTEzNURCQ0ZBMERFMkVDMkVENjU4MEMzRTUxNUY1NDc3QgorOjEwM0M5MDAwOTc5Mjk0QzVCRDQxMTcyRDcwMjcwMzlDNzJEQzMyNzgzMgorOjEwM0NBMDAwQzlDRkZCMzE3RjhFNUIyNzhBQzQ3RDZCRDNFMTMxM0U2OAorOjEwM0NCMDAwQkNBMUU4ODU1RERDMUVFQjIxRUNDMjNFQ0I0OTU4MEU3MQorOjEwM0NDMDAwQTBCNjVBNzUyNDAzM0U2QjBBQzkwQjZERENBMUMzQkFCQQorOjEwM0NEMDAwQUFDQ0EyNDg1OEVGMEU1MzRBMzlEODAwRTZDRDlBMUMxOAorOjEwM0NFMDAwQjY2OEIyOURCQjA3OUIzMEM1NzkzRTY2MDZFNDdEQkJENgorOjEwM0NGMDAwRDRDOTQ4QUU3NUI2MzFBQzM0QzgxOURFQzNDNERGMUNCNAorOjEwM0QwMDAwMDgzMTEwODUwODMzQ0E3QkY2QkIzQjk1MTQ3RkNEOTJGMgorOjEwM0QxMDAwQzg5RjgwMjlFOTk5NUFCRjBFRjk3MTVDOTEwNUZFRTBCMAorOjEwM0QyMDAwOEM1NDEyQ0YzM0FGNDEyM0YxQUI1NzBGMjdDRDE1NzQwRAorOjEwM0QzMDAwNkYzNzZDMkQyMzJGRjg0RUI4MkZGMEUwMjVDQzZGOThGRAorOjEwM0Q0MDAwODUzRjIzRkZGMUZCNUUyNUJFQTIxRkI3RDE3QTkyNjFBQQorOjEwM0Q1MDAwOUUwNkJCRjcyM0NBNjMwQkQzOTdCOTM4NjEyMDk1OTBCMQorOjEwM0Q2MDAwRkY1OUJENzYwRTlERTc1NDEzRjJBMjVBQTMwNUU0NzNFMgorOjEwM0Q3MDAwRjAwMzUyRDZCMDI4Qzc0QUJDNjZBQTBBMUQxOEZGOTg5RAorOjEwM0Q4MDAwRjNEQTZFRTJDN0U5QTgwOThDMTgzNzEwQUI0Nzc1RDQ4RgorOjEwM0Q5MDAwMzJDNTUwMkY3RkQxNDYwRUU1QTg2RkNGODAxRDY4N0ZCQQorOjEwM0RBMDAwQ0RDOUZENDZDQ0YzMzQ5ODgyQTQwRkE2RjU2QUM0QTExMAorOjEwM0RCMDAwQzU3ODg0RjNDNUMwQ0RBQUQwMUZCRUIxQzA1MEU2NDlCNgorOjEwM0RDMDAwN0Y4Q0Q4NTAzRkFGOUQyOTAxRDQ2OTk4OUJFRUZEMTk5NworOjEwM0REMDAwRTUwRTA4QkFBOEFFNUIzMkJDOUZEM0JDOTk5Q0RCMzgxOQorOjEwM0RFMDAwRTU0NTdDNEZDQjIxMTNGNTE5M0Q4RkU3M0Y3QzY4MjFEQQorOjEwM0RGMDAwMjU4RDI3RjI5QThENEU3RkY5Q0QwQTkyMjY4NUExNURGOQorOjEwM0UwMDAwRjVCMDE0MzY5NjNGOURDRjZDOEU1RDQ3NzE1MDJGQ0MyOAorOjEwM0UxMDAwNDlERkNBODM4QzkxRkVDODZEQ0FBRkRBNjQwRDRCMjlBNQorOjEwM0UyMDAwNjRBN0ZGM0Q2MjRBRDhDMTU4N0VFQUY0NEIyMDIwN0U0OQorOjEwM0UzMDAwOTQwNzkwMTVEMDcwNUIxM0VCQzMzODJFMzcxNTJFNzA5NgorOjEwM0U0MDAwQjkxOUMzMjc1RTNGOTEzQ0Y2Qzc0MTkzRDYxRkRGNUI4QworOjEwM0U1MDAwMDc3NjEyN0ZFMkZERkE2NjZDN0ZFRTQxOTE4REU2Q0IyQworOjEwM0U2MDAwREM3MEIxMEQ5Q0NGRUZDRjcxOUNBRkIwMENFNzVDQTFDMworOjEwM0U3MDAwM0E0RUI4RTNBMzlBRDA3RjVEQUMzRTg4Mzc5MDVGMjk3NQorOjEwM0U4MDAwRTZCNzJFNTZBNzNBMkJEN0VBRjJGQTEzNzU4OUYxMjQzMgorOjEwM0U5MDAwQ0U4Mzc4REU3MTlDRTNGOEMxM0I2M0Q3NkQ4NTAyQjdCMgorOjEwM0VBMDAwQjI4RjQxRTBGNTJCQzU5RjVDMTgzRDhFNkQwNThCMjRDQworOjEwM0VCMDAwNzVDQTVCRjg3RkM0MkI2QzVFODZCQzhFOUVFMTRBM0Y2MAorOjEwM0VDMDAwRjE5RjBBNUYyMUE0Q0FGMTdFRTAwMDMxMEYxQTI0OEIxMgorOjEwM0VEMDAwNzJFQTE5RjNDMDRCRjM2MDM5Q0Q4MzRFRDFFN0YzM0M1RQorOjEwM0VFMDAwN0E5RDMzOUEwNzZENjI5RDAzRDFBMzNBNUM0RkYyNDhFNQorOjEwM0VGMDAwMzJFNTFCMzEyM0VCNTExNkJBOEFDNDNDQ0FBMzhFMkU3RAorOjEwM0YwMDAwRDY3MEEyQkVFRTNEOTREQzdGMEFGNTAzNEMzRDZGNDJCNQorOjEwM0YxMDAwRkI4MDNFRDZFRkZCQUNDMTRCQjgzRjFCRTQ3RTNEQzZGOQorOjEwM0YyMDAwRUI0QTBEOUU2RkMyRkRBRUJBQzU4QTFGRUIzNDBCMzE1MgorOjEwM0YzMDAwQkQ2NjhCOTgwQkFCMzkxN0VCQTgyNzJCRDg1RjQ4RkFENworOjEwM0Y0MDAwRDhENzc4Q0YyRUNGOEJFMjNCRkVGNTQzNzQ0RUY3MkVCOQorOjEwM0Y1MDAwMDFFRERDMDVBNURENzQ1RUVCMTBGRUJFOERDRjk5MEY4MworOjEwM0Y2MDAwOTM4NUJGQUU1QTM1RDcyMkNFQjMzOEQ5MUY0RkY3RTY2NworOjEwM0Y3MDAwQjkzMjA5NTc0RDBGN0YwNDg0NUU0RjhGOUE0Qjc4RjQwNgorOjEwM0Y4MDAwNkMzNTA4QkRCM0NDRUREOTRCN0VDQUFDQ0EyNUY0MUI0OQorOjEwM0Y5MDAwRjE1OEJFMUFEMEUwMDgzM0RDOUZFQ0QwRUUxQkU3QUYzRgorOjEwM0ZBMDAwQTc1NDlCODM0QkZDNTNFN0U5M0ZDNDVGMEQ4RTM2RTQ3NworOjEwM0ZCMDAwRkQyNEYxNzA3OTAyMUZBNjIyMTY2OTA5OUNFMjdDRjRBNworOjEwM0ZDMDAwRUIxMUFGMEMwREFGNjNFQzY5QkMzMjYyNzhCMTBFRTQ1QgorOjEwM0ZEMDAwNkQwQUUxMTYxMkY1OUZFNzFBMEVFRDEyNDQ5MkYwNEVBQgorOjEwM0ZFMDAwMTI1NzcyOEMyODI3MzJCQzU1REEzREM3NzJFOUJDQzEyMgorOjEwM0ZGMDAwMTg1OUQ5RTkyNDNDQTEzOUY0OEMzRTdDQzVBNUY1Mzk4MgorOjEwNDAwMDAwRDA1NzE0NzlERTE4RTM3OTYzOUM4RkVGM0VDMUM3Qzg5RgorOjEwNDAxMDAwRTJENEU5QTQxODFGRDFGRTE3OEJCQjg2RTJERDY3RTM2QgorOjEwNDAyMDAwNTVCNDM5RkE4RjU0RkZBQzM4OUI1Q0RBN0ZDOTlDRDEwOAorOjEwNDAzMDAwRkIyQUU5QzNDNTZDMkVFNjg4QUNGNUY1QThFQjRFM0UyRAorOjEwNDA0MDAwN0Q2N0UwRUY5MUM1RjREREU5NEQ3NzZGMjYzREYzRDI1MgorOjEwNDA1MDAwQThDMTRCRjVDQzhERUFFOTNFOTM5RTdCRjlGNDNGRDNBMgorOjEwNDA2MDAwRDg3MTQzRjRDRDdGQ0RGMzVGOEU4QTk0RTJCMDBBMDAxRAorOjEwNDA3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE4MDAwMDAwMDAyOAorOjEwNDA4MDAwMDAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDBGMAorOjEwNDA5MDAwMDAwMDAwMjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTBFOAorOjEwNDBBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMDAwMDAwMDBGMAorOjEwNDBCMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDBGMAorOjEwNDBDMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFOAorOjEwNDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMAorOjEwNDBFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMAorOjEwNDBGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNDExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RgorOjEwNDEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RgorOjEwNDEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RgorOjEwNDE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RgorOjEwNDE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RgorOjEwNDE2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RgorOjEwNDE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRgorOjEwNDE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRgorOjEwNDE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRgorOjEwNDFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRgorOjEwNDFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRgorOjEwNDFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRgorOjEwNDFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERgorOjEwNDFFMDAwMDAwMDMzMjgwMDEwMDAwMDAwMDAwMDA4MDAwMDMzMzBGOQorOjEwNDFGMDAwMDAxMDAwMDAwMDAwMDAwMjAwMDAzMzI4MDAxMDAwMDA0MgorOjEwNDIwMDAwMDAwMDAwMTAwMDAwM0E3ODAwMDAwMDAwMDAwMDAwMDhFNAorOjEwNDIxMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDA5RQorOjEwNDIyMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwRQorOjEwNDIzMDAwMDAwMDAwMDAwMDAwMzEyMDAwMDAwMDAwMDAwMDAwMDgyNQorOjEwNDI0MDAwMDAwMDMzNjAwMDAxMDAwNDAwMDAwMDAxMDAwMDMzNjgzQQorOjEwNDI1MDAwMDAwMDAwMDAwMDAwMDAwMjAwMDAzMzcwMDAwMDAwMDBCOQorOjEwNDI2MDAwMDAwMDAwMDgwMDAwMzM3NDAwMDAwMDAwMDAwMDAwMDI5RAorOjEwNDI3MDAwMDAwMDNBNzAwMDAwMDAwMDAwMDAwMDA4MDAwMDNBNDAxMgorOjEwNDI4MDAwMDAwODAwMDAwMDAwMDAwODAwMDAzRDg4MDA0MDAwMDAxOQorOjEwNDI5MDAwMDAwMDAwNDAwMDAwM0E1MDAwMDgwMDAwMDAwMDAwMDg0NAorOjEwNDJBMDAwMDAwMDNBNjAwMDA4MDAwMDAwMDAwMDA4MDAwMDNBODhBMgorOjEwNDJCMDAwMDBDODAwMDAwMDAwMDA5ODAwMDAzQzE4MDA5ODAwMDBCMgorOjEwNDJDMDAwMDAwMDAwMjgwMDAwM0M1ODAwOTgwMDAwMDAwMDAwMjg3MgorOjEwNDJEMDAwMDAwMDMzNzgwMzYwMDAzMDAwMDAwMzYwMDAwMDNFQjA0RgorOjEwNDJFMDAwMDAwODAwMDAwMDAwMDAwMTAwMDAzRUIxMDAwODAwMDBDRQorOjEwNDJGMDAwMDAwMDAwMDEwMDAwMjAwODAwMTAwMDAwMDAwMDAwMTA3NQorOjEwNDMwMDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAwMDA4ODAwMDAwMDAwNQorOjEwNDMxMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAxRAorOjEwNDMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwNDMzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RAorOjEwNDM0MDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDBFRAorOjEwNDM1MDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERAorOjEwNDM2MDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDA0RAorOjEwNDM3MDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDBCRAorOjEwNDM4MDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRAorOjEwNDM5MDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAxRAorOjEwNDNBMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDA4RAorOjEwNDNCMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RAorOjEwNDNDMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDBFRAorOjEwNDNEMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDA1RAorOjEwNDNFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRAorOjEwNDNGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRAorOjEwNDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQworOjEwNDQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QworOjEwNDQyMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDA4QworOjEwNDQzMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDBGQworOjEwNDQ0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QworOjEwNDQ1MDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDA1QworOjEwNDQ2MDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDBDQworOjEwNDQ3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQworOjEwNDQ4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQworOjEwNDQ5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQworOjEwNDRBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQworOjEwNDRCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyQzgyMgorOjEwNDRDMDAwMDA4MDAwMDAwMDAwMDA4MDAwMDAwMDAxMDAwMDAwMDBFQgorOjEwNDREMDAwMDAwMDAwMDAwMDAwNDAwMDA0OTAwMDAwMDAwMDA0OTA3NAorOjEwNDRFMDAwMDAwMDE5QzgwMDAwMDAwMDAwMDAwMDA4MDAwMDQ5NDg1MgorOjEwNDRGMDAwMDAwODAwMDAwMDAwMDAwODAwMDA0OTI4MDAwODAwMDAzMworOjEwNDUwMDAwMDAwMDAwMDgwMDAwNDkzODAwMDgwMDAwMDAwMDAwMDgxMgorOjEwNDUxMDAwMDAwMDIwMDgwMDEwMDAwMDAwMDAwMDEwMDAwMDIwMDAzMworOjEwNDUyMDAwMDAwMDAwMDAwMDAwMDAwODAwMDA0MDEwMDQ5MDAwNDA1RgorOjEwNDUzMDAwMDAwMDAwNDAwMDAwNDk5ODAwMDgwMDAwMDAwMDAwMDE1MQorOjEwNDU0MDAwMDAwMDQ5OTkwMDA4MDAwMDAwMDAwMDAxODAwMDAwMDAwMAorOjEwNDU1MDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDBEQgorOjEwNDU2MDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQgorOjEwNDU3MDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAzQgorOjEwNDU4MDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDBBQgorOjEwNDU5MDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QgorOjEwNDVBMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwQgorOjEwNDVCMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDA3QgorOjEwNDVDMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNDVEMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDBEQgorOjEwNDVFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQgorOjEwNDVGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQgorOjEwNDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQQorOjEwNDYxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QQorOjEwNDYyMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQQorOjEwNDYzMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQQorOjEwNDY0MDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDBFQQorOjEwNDY1MDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQQorOjEwNDY2MDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDA0QQorOjEwNDY3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDAwMDAxODAwMDBFMgorOjEwNDY4MDAwMDAwMDAwMTgwMDAwNDMwMDAwNDAwMDAwMDAwMDAwNDA0RgorOjEwNDY5MDAwMDAwMDQzMDAwMDQwMDAwMjAwMDAwMDAxMDAwMDQzMDE1MAorOjEwNDZBMDAwMDA0MDAwMDIwMDAwMDAwMDAwMDAzMDAwMDA0MDAwMDA1OAorOjEwNDZCMDAwMDAwMDAwNDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQQorOjEwNDZDMDAwMDAwMDMwMDAwMDA4MDA0MDAwMDAwMDA0MDAwMDMwMDQzQQorOjEwNDZEMDAwMDAwODAwNDAwMDAwMDAwNDAwMDA0QjAwMDAyODAwMDAxQgorOjEwNDZFMDAwMDAwMDAwMjgwMDAwNEI1MDAwMTAwMDAwMDAwMDAwMTBFNworOjEwNDZGMDAwMDAwMDM4MDAwMDgwMDAwMDAwMDAwMDgwMDAwMDM4MDA0QQorOjEwNDcwMDAwMDAwODAwODAwMDAwMDAwMjAwMDAzOTAwMDAyMDAwMDBDNgorOjEwNDcxMDAwMDAwMDAwMjAwMDAwMjAwODAwMTAwMDAwMDAwMDAwMTAzMQorOjEwNDcyMDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDUxMDgwOAorOjEwNDczMDAwMDAwODAwMDAwMDAwMDAwODAwMDA1MTIwMDAwODAwMDBGMAorOjEwNDc0MDAwMDAwMDAwMDgwMDAwNTEzMDAwMDgwMDAwMDAwMDAwMDhEMAorOjEwNDc1MDAwMDAwMDUxQzAwMDA4MDAwMDAwMDAwMDAxMDAwMDUxQzEyRAorOjEwNDc2MDAwMDAwODAwMDAwMDAwMDAwMTAwMDAzOTQwMDAxMDAwMDRCMworOjEwNDc3MDAwMDAwMDAwMDQwMDAwNTFEMDAwMzAwMDE4MDAwMDAwMTBCQworOjEwNDc4MDAwMDAwMDUxRDgwMDMwMDAxODAwMDAwMDAyODAwMDAwMDAzNgorOjEwNDc5MDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDA5OQorOjEwNDdBMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OQorOjEwNDdCMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDBGOQorOjEwNDdDMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDA2OQorOjEwNDdEMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1OQorOjEwNDdFMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDBDOQorOjEwNDdGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCOQorOjEwNDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBOAorOjEwNDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5OAorOjEwNDgyMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwOAorOjEwNDgzMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGOAorOjEwNDg0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIzRTg1RAorOjEwNDg1MDAwMDA4MDAwMDAwMDAwMDA4MDAwMDAwMDAxMDAwMDAwMDA1NworOjEwNDg2MDAwMDAwMDAwMDAwMDAwMjAwODAwMTAwMDAwMDAwMDAwMTAwMAorOjEwNDg3MDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDJEQTA0MworOjEwNDg4MDAwMDAwODAwMDAwMDAwMDAwODAwMDAyREI4MDAwODAwMDAyQgorOjEwNDg5MDAwMDAwMDAwMDgwMDAwMjRFODAyRDAwMDI4MDAwMDAyRDAzOAorOjEwNDhBMDAwMDAwMDJFNTgwMDA4MDAwMDAwMDAwMDAxMDAwMDJFNTlGMgorOjEwNDhCMDAwMDAwODAwMDAwMDAwMDAwMTAwMDAyRDkwMDAwODAwMDAyQQorOjEwNDhDMDAwMDAwMDAwMDg4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MAorOjEwNDhEMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDBEOAorOjEwNDhFMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDA0OAorOjEwNDhGMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNDkwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDBBNworOjEwNDkxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NworOjEwNDkyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NworOjEwNDkzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NworOjEwNDk0MDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDBFNworOjEwNDk1MDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENworOjEwNDk2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDBDNworOjEwNDk3MDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDBCNworOjEwNDk4MDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNworOjEwNDk5MDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI1MDA3MgorOjEwNDlBMDAwMDA0MDAwMDAwMDAwMDAwODAwMDAyNTA4MDA0MDAwMDA1MgorOjEwNDlCMDAwMDAwMDAwMjgwMDAwMDlDMDAxMjAwMDEwMDAwMDAwMDhDRAorOjEwNDlDMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDBFNworOjEwNDlEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDIwMDJEMDAwMjg3RAorOjEwNDlFMDAwMDAwMDAwMDgwMDAwMzAwMDAwMDAwMDAwMDAwMDEwMDA3RgorOjEwNDlGMDAwMDAwMDUwOTkwMDAwMDAwMDAwMDAwMDAxMDAwMDUwQjBDRAorOjEwNEEwMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDA0NUEwMDA5MDAwMDgyNworOjEwNEExMDAwMDAwMDAwMDg4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRQorOjEwNEEyMDAwMDAwMDI5NjAwMDA4MDAwMDAwMDAwMDAxMDAwMDI5NjE2QQorOjEwNEEzMDAwMDAwODAwMDAwMDAwMDAwMTAwMDAyOTcwMDAwODAwMDRDOAorOjEwNEE0MDAwMDAwMDAwMDIwMDAwMjk3ODAwMDgwMDA0MDAwMDAwMDRCMworOjEwNEE1MDAwMDAwMDJGQjAwMDA4MDAwMDAwMDAwMDA0MDAwMDJGQjQ4OAorOjEwNEE2MDAwMDAwODAwMDAwMDAwMDAwNDAwMDAyRkMwMDAwMDAwMDA0QgorOjEwNEE3MDAwMDAwMDAwMDgwMDAwMkZDODAwMDAwMDAwMDAwMDAwMDgyRgorOjEwNEE4MDAwMDAwMDMwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDUwNDA1NgorOjEwNEE5MDAwMDAwMTAwMDEwMDAwMDAwMTAwMDA1MDAwMDAwMDAwMDBDMworOjEwNEFBMDAwMDAwMDAwMjAwMDAwMDgwODAwMTAwMDAwMDAwMDAwMDRDMgorOjEwNEFCMDAwMDAwMDA4MEMwMDEwMDAwMDAwMDAwMDAxMDAwMDA4QjcxMgorOjEwNEFDMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwOEI2MDAwMDAwMDAyNworOjEwNEFEMDAwMDAwMDAwMDEwMDAwMTAwMDAwMzAwMDE4MDAwMDAwMDQ3OQorOjEwNEFFMDAwMDAwMDEwMDQwMDMwMDAxODAwMDAwMDA0MDAwMDEwMDg0RQorOjEwNEFGMDAwMDAzMDAwMTgwMDAwMDAwMjAwMDAxMDBBMDAzMDAwMTgwQQorOjEwNEIwMDAwMDAwMDAwMDIwMDAwMTAwQzAwMzAwMDE4MDAwMDAwMDEzRQorOjEwNEIxMDAwMDAwMDEwMEQwMDMwMDAxODAwMDAwMDAxMDAwMDEwMEUxMQorOjEwNEIyMDAwMDAzMDAwMTgwMDAwMDAwMTAwMDAxMDEwMDAzMDAwMThENAorOjEwNEIzMDAwMDAwMDAwMDQwMDAwMTAxNDAwMzAwMDE4MDAwMDAwMDQwMQorOjEwNEI0MDAwMDAwMDMwMDAwMTAwMDA4MDAwMDgwMDA0MDAwMDMwMDQ3NAorOjEwNEI1MDAwMDEwMDAwODAwMDA4MDAwNDAwMDAwMDBBMDAwMDAwMDBCRQorOjEwNEI2MDAwMDAwMDAwMDAwMDAwMzA2ODAxMDAwMDgwMDAwMDAwMDEyQgorOjEwNEI3MDAwMDAwMDMwNjkwMTAwMDA4MDAwMDAwMDAxMDAwMDMwNkM3RQorOjEwNEI4MDAwMDEwMDAwODAwMDAwMDAwMjAwMDAzMDZFMDEwMDAwODA4MworOjEwNEI5MDAwMDAwMDAwMDIwMDAwMzA3MDAxMDAwMDgwMDAwMDAwMDRFRQorOjEwNEJBMDAwMDAwMDMwNzQwMTAwMDA4MDAwMDAwMDA0MDAwMDMwNjY0NgorOjEwNEJCMDAwMDEwMDAwODAwMDAwMDAwMjAwMDAzMDY0MDEwMDAwODA1RAorOjEwNEJDMDAwMDAwMDAwMDEwMDAwMzA2MDAxMDAwMDgwMDAwMDAwMDJEMQorOjEwNEJEMDAwMDAwMDMwNjIwMTAwMDA4MDAwMDAwMDAyMDAwMDMwNTA0MAorOjEwNEJFMDAwMDEwMDAwODAwMDAwMDAwNDAwMDAzMDU0MDEwMDAwODAzQgorOjEwNEJGMDAwMDAwMDAwMDQwMDAwMzA1ODAxMDAwMDgwMDAwMDAwMDRBNAorOjEwNEMwMDAwMDAwMDMwNUMwMTAwMDA4MDAwMDAwMDA0MDAwMDMwN0NFNworOjEwNEMxMDAwMDEwMDAwODAwMDAwMDAwMTAwMDAzMDdEMDEwMDAwODBFNAorOjEwNEMyMDAwMDAwMDAwMDEwMDAwMUMxODAwMTAwMDAwMDAwMDAwMDQzQgorOjEwNEMzMDAwMDAwMDFDMzAwMDEwMDAwMDAwMDAwMDA0MDAwMDFDMzhDMAorOjEwNEM0MDAwMDAxMDAwMDAwMDAwMDAwNDgwMDAwMDAwMDAwMDAwMDBEMAorOjEwNEM1MDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENAorOjEwNEM2MDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDA0NAorOjEwNEM3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QzEwMDAwODAwMDBEMAorOjEwNEM4MDAwMDAwMDAwMDIwMDAwNEMxMjAwMDgwMDAwMDAwMDAwMDJCQQorOjEwNEM5MDAwMDAwMDRDMTQwMDA4MDAwMDAwMDAwMDA0MDAwMDRDMjAzQworOjEwNENBMDAwMDAwODAwMDAwMDAwMDAwODAwMDA0QzMwMDA0MDAwMDgzMAorOjEwNENCMDAwMDAwMDAwMDgwMDAwNEMwMDAwMDgwMDAwMDAwMDAwMDI5NgorOjEwNENDMDAwMDAwMDRDMDIwMDA4MDAwMDAwMDAwMDAxMDAwMDRDMDQzRAorOjEwNENEMDAwMDAwODAwMDAwMDAwMDAwMjAwMDA0Q0QwMDAwODAwMDBBNgorOjEwNENFMDAwMDAwMDAwMDgwMDAwNENFMDAwMDgwMDAwMDAwMDAwMDQ4NAorOjEwNENGMDAwMDAwMDRDRTQwMDA4MDAwMDAwMDAwMDAxMDAwMDRDRjAzRgorOjEwNEQwMDAwMDAwODAwMDAwMDAwMDAwMjAwMDA0Q0Y0MDAwODAwMDA1MQorOjEwNEQxMDAwMDAwMDAwMDIwMDAwNEQwMDAwMDgwMDAwMDAwMDAwMDQzOAorOjEwNEQyMDAwMDAwMDUwMDAwMDEwMDAwMDAwMDAwMDA0MDAwMDUwMDRDQgorOjEwNEQzMDAwMDAxMDAwMDAwMDAwMDAwNDAwMDA1MDA4MDAxMDAwMDBGNworOjEwNEQ0MDAwMDAwMDAwMDQwMDAwMTQwMDAwMDgwMDAwMDAwMDAwMDI0MQorOjEwNEQ1MDAwMDAwMDE0MDIwMDA4MDAwMDAwMDAwMDAxMDAwMDE0MDQxQworOjEwNEQ2MDAwMDAwODAwMDAwMDAwMDAwMjAwMDAxNDEwMDAwODAwMDAwRAorOjEwNEQ3MDAwMDAwMDAwMDIwMDAwMTQxNDAwMDgwMDAwMDAwMDAwMDJGRgorOjEwNEQ4MDAwMDAwMDE0MTYwMDA4MDAwMDAwMDAwMDAyMDAwMDE5QjgxRQorOjEwNEQ5MDAwMDAwODAwMDAwMDAwMDAwODAwMDAxNDIwMDAwODAwMDBDNworOjEwNERBMDAwMDAwMDAwMDIwMDAwMTQyNDAwMDgwMDAwMDAwMDAwMDJCRgorOjEwNERCMDAwMDAwMDE5QzgwMDA4MDAwMDAwMDAwMDA4MDAwMDJDMTBDNgorOjEwNERDMDAwMDAwODAwMDAwMDAwMDAwMTAwMDAyQzExMDAwODAwMDA5NQorOjEwNEREMDAwMDAwMDAwMDEwMDAwMkMxMjAwMDgwMDAwMDAwMDAwMDE4QgorOjEwNERFMDAwMDAwMDJDMTMwMDA4MDAwMDAwMDAwMDAxMDAwMDJDMDA0RgorOjEwNERGMDAwMDAwODAwMDAwMDAwMDAwMjAwMDAyQzAyMDAwODAwMDA3MworOjEwNEUwMDAwMDAwMDAwMDEwMDAwMkMwNDAwMDgwMDAwMDAwMDAwMDI2NworOjEwNEUxMDAwMDAwMDJDMzAwMDA4MDAwMDAwMDAwMDAyMDAwMDJDMzJDRQorOjEwNEUyMDAwMDAwODAwMDAwMDAwMDAwMjAwMDAyQzM0MDAwODAwMDAxMAorOjEwNEUzMDAwMDAwMDAwMDIwMDAwMkMyMDAwMDgwMDAwMDAwMDAwMDExQgorOjEwNEU0MDAwMDAwMDJDMjEwMDA4MDAwMDAwMDAwMDAxMDAwMDJDMjJCRQorOjEwNEU1MDAwMDAwODAwMDAwMDAwMDAwMTAwMDAyQzIzMDAwODAwMDBGMgorOjEwNEU2MDAwMDAwMDAwMDEwMDAwMkMyNDAwMDgwMDAwMDAwMDAwMDFFOAorOjEwNEU3MDAwMDAwMDJDMjUwMDA4MDAwMDAwMDAwMDAxMDAwMDJDMjY4NgorOjEwNEU4MDAwMDAwODAwMDAwMDAwMDAwMTAwMDAxNDAwMDAwODAwMDBGRAorOjEwNEU5MDAwMDAwMDAwMDIwMDAwMTQwMjAwMDgwMDAwMDAwMDAwMDFGMQorOjEwNEVBMDAwMDAwMDE0MDQwMDA4MDAwMDAwMDAwMDAyMDAwMDE0MTJCQQorOjEwNEVCMDAwMDBDMDAwMTgwMDAwMDAwMjAwMDAxNDEwMDBDMDAwMTgxQworOjEwNEVDMDAwMDAwMDAwMDIwMDAwMTQxQzAwQzAwMDE4MDAwMDAwMDhEMAorOjEwNEVEMDAwMDAwMDE0MTQwMEMwMDAxODAwMDAwMDA4MDAwMDE0Mjc4RgorOjEwNEVFMDAwMDBDMDAwMTgwMDAwMDAwMTAwMDAxNDI0MDBDMDAwMThEOQorOjEwNEVGMDAwMDAwMDAwMDIwMDAwMTQyNjAwQzAwMDE4MDAwMDAwMDE5RAorOjEwNEYwMDAwMDAwMDE1OTAwMDA4MDAwMDAwMDAwMDA4MDAwMDE1QTAzNworOjEwNEYxMDAwMDAwODAwMDAwMDAwMDAwODAwMDAxNUIwMDAwODAwMDBCNAorOjEwNEYyMDAwMDAwMDAwMDg4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGOQorOjEwNEYzMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDA3MQorOjEwNEY0MDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDBFMQorOjEwNEY1MDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNEY2MDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDA0MQorOjEwNEY3MDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDBCMQorOjEwNEY4MDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMQorOjEwNEY5MDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAxMQorOjEwNEZBMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDA4MQorOjEwNEZCMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MQorOjEwNEZDMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDBFMQorOjEwNEZEMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDA1MQorOjEwNEZFMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MQorOjEwNEZGMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDBCMQorOjEwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAyMAorOjEwNTAxMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMAorOjEwNTAyMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDA4MAorOjEwNTAzMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDBGMAorOjEwNTA0MDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMAorOjEwNTA1MDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMAorOjEwNTA2MDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDBDMAorOjEwNTA3MDAwMDAwMDAwMDAwMDAwMDAwMDA2MDIwNTAwMDAwMDAwMDAyMworOjAwMDAwMDAxRkYKZGlmZiAtLWdpdCBhL2Zpcm13YXJlL2JueDJ4L2JueDJ4LWUxaC02LjAuMzQuMC5mdy5paGV4IGIvZmlybXdhcmUvYm54MngvYm54MngtZTFoLTYuMC4zNC4wLmZ3LmloZXgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0ZjM2ZjEuLjAwMDAwMDAKLS0tIGEvZmlybXdhcmUvYm54MngvYm54MngtZTFoLTYuMC4zNC4wLmZ3LmloZXgKKysrIC9kZXYvbnVsbApAQCAtMSwxMzE3OCArMCwwIEBACi06MTAwMDAwMDAwMDAwNEY0ODAwMDAwMDY4MDAwMDA3MEMwMDAwNEZCOEQ3Ci06MTAwMDEwMDAwMDAwMUVENDAwMDA1NkM4MDAwMDAwOTQwMDAwNzVBMDI3Ci06MTAwMDIwMDAwMDAwOUVGQzAwMDA3NjM4MDAwMDAwQ0MwMDAxMTUzODZFCi06MTAwMDMwMDAwMDAwREM2NDAwMDExNjA4MDAwMDAwOTQwMDAxRjI3MDZBCi06MTAwMDQwMDAwMDAwNDAxODAwMDFGMzA4MDAwMDAwQTQwMDAyMzMyODVCCi06MTAwMDUwMDAwMDAwRjM3ODAwMDIzM0QwMDAwMDBGRkMwMDAzMjc1MEFCCi06MTAwMDYwMDAwMDAwMDAwNDAwMDMzNzUwMDIwNDAwNDgwMDAwMDAwRkE1Ci06MTAwMDcwMDAwMjA0MDA1NDAwMDAwMDQ1MDIwNDAwNUMwMDAwMDAwNjc5Ci06MTAwMDgwMDAwMjA0MDA3MDAwMDAwMDA0MDIwNDAwNzgwMDAwMDAwMDc4Ci06MTAwMDkwMDAwMjA0MDA3QzEyMTcwMDAwMDIwNDAwODAyMjE3MDAwMEY2Ci06MTAwMEEwMDAwMjA0MDA4NDMyMTcwMDAwMDYwNDAwODgwMDAwMDAwNUU2Ci06MTAwMEIwMDAwMjA0MDA5QzEyMTUwMDAwMDIwNDAwQTAyMjE1MDAwMDlBCi06MTAwMEMwMDAwMjA0MDBBNDMyMTUwMDAwMDYwNDAwQTgwMDAwMDAwNDg5Ci06MTAwMEQwMDAwMjA0MDBCODAyMTAwMDAwMDIwNDAwQkMwMDEwMDAwMDdFCi06MTAwMEUwMDAwMjA0MDBDMDEwMTAwMDAwMDIwNDAwQzQyMDEwMDAwMDMwCi06MTAwMEYwMDAwMjA0MDBDODMwMTAwMDAwMDIwNDAwQ0M0MDEwMDAwMEQwCi06MTAwMTAwMDAwNjA0MDBEMDAwMDAwMDAzMDIwNDAwREMwMDEwMDAwMDIwCi06MTAwMTEwMDAwMjA0MDBFMDEyMTQwMDAwMDIwNDAwRTQyMjE0MDAwMEIzCi06MTAwMTIwMDAwMjA0MDBFODMyMTQwMDAwMDIwNDAwRUM0MjE0MDAwMDUzCi06MTAwMTMwMDAwNjA0MDBGMDAwMDAwMDAzMDEwNDAxMjQwMDAwMDAwMDk4Ci06MTAwMTQwMDAwMTA0MDEyODAwMDAwMDAwMDEwNDAxMkMwMDAwMDAwMDRGCi06MTAwMTUwMDAwMTA0MDEzMDAwMDAwMDAwMDIwNDAxRDAwMDAwODkwNjAzCi06MTAwMTYwMDAwMjA0MDAwNDAwMDAwMEZGMDIwNDAwMDgwMDAwMDBGRjc5Ci06MTAwMTcwMDAwMjA0MDAwQzAwMDAwMEZGMDIwNDAwMTAwMDAwMDBGRjU5Ci06MTAwMTgwMDAwMjA0MDAxNDAwMDAwMDdGMDIwNDAwMTgwMDAwMDBGRkI5Ci06MTAwMTkwMDAwMjA0MDAxQzAwMDAwMEZGMDIwNDAwMjAwMDAwMDBGRjE5Ci06MTAwMUEwMDAwMjA0MDAyNDAwMDAwMDNFMDIwNDAwMjgwMDAwMDAwMEI5Ci06MTAwMUIwMDAwMjA0MDAyQzAwMDAwMDNGMDIwNDAwMzAwMDAwMDAzRjU5Ci06MTAwMUMwMDAwMjA0MDAzNDAwMDAwMDNGMDIwNDAwMzgwMDAwMDAzRjM5Ci06MTAwMUQwMDAwMjA0MDAzQzAwMDAwMDNGMDIwNDAwNDAwMDAwMDAzRjE5Ci06MTAwMUUwMDAwMjA0MDA0NDAwMDAwMDNGMDIwNDA0Q0MwMDAwMDAwMUFGCi06MTAwMUYwMDAwMjA0MjAwODAwMDAwMjExMDIwNDIwMEMwMDAwMDIwMDhBCi06MTAwMjAwMDAwMjA0MjAxMDAwMDAwMjA0MDIwNDIwMTQwMDAwMDIxOTVECi06MTAwMjEwMDAwMjA0MjAxQzAwMDBGRkZGMDIwNDIwMjAwMDAwRkZGRjVBCi06MTAwMjIwMDAwMjA0MjAyNDAwMDBGRkZGMDIwNDIwMjgwMDAwRkZGRjNBCi06MTAwMjMwMDAwMjA0MjAzODAwMDAwMDIwMDYwNDIwM0MwMDAwMDAxRkJCCi06MTAwMjQwMDAwMjA0MjBCODAwMDAwMDAxMDYwNDIwQkMwMDAwMDA1RjhBCi06MTAwMjUwMDAwMjA0MjIzODA3RkZGRkZGMDIwNDIyM0MwMDAwMDAzRjk3Ci06MTAwMjYwMDAwMjA0MjI0MDA3RkZGRkZGMDIwNDIyNDQwMDAwMDAwRkE3Ci06MTAwMjcwMDAwMTA0MjI0ODAwMDAwMDAwMDEwNDIyNEMwMDAwMDAwMDlDCi06MTAwMjgwMDAwMTA0MjI1MDAwMDAwMDAwMDEwNDIyNTQwMDAwMDAwMDdDCi06MTAwMjkwMDAwMTA0MjI1ODAwMDAwMDAwMDEwNDIyNUMwMDAwMDAwMDVDCi06MTAwMkEwMDAwMTA0MjI2MDAwMDAwMDAwMDEwNDIyNjQwMDAwMDAwMDNDCi06MTAwMkIwMDAwMTA0MjI2ODAwMDAwMDAwMDEwNDIyNkMwMDAwMDAwMDFDCi06MTAwMkMwMDAwMTA0MjI3MDAwMDAwMDAwMDEwNDIyNzQwMDAwMDAwMEZDCi06MTAwMkQwMDAwMTA0MjI3ODAwMDAwMDAwMDEwNDIyN0MwMDAwMDAwMERDCi06MTAwMkUwMDAwQzA0MjAwMDAwMDAwM0U4MEEwNDIwMDAwMDAwMDAwMUM0Ci06MTAwMkYwMDAwQjA0MjAwMDAwMDAwMDBBMDYwNTQwMDAwMDAwMEQwMDZECi06MTAwMzAwMDAwMjA1MDA0NDAwMDAwMDIwMDIwNTAwNDgwMDAwMDAzMjAxCi06MTAwMzEwMDAwMjA1MDA5MDAyMTUwMDIwMDIwNTAwOTQwMjE1MDAyMDNECi06MTAwMzIwMDAwMjA1MDA5ODAwMDAwMDMwMDIwNTAwOUMwODEwMDAwMDQzCi06MTAwMzMwMDAwMjA1MDBBMDAwMDAwMDMzMDIwNTAwQTQwMDAwMDAzMDA4Ci06MTAwMzQwMDAwMjA1MDBBODAwMDAwMDMxMDIwNTAwQUMwMDAwMDAwMjE4Ci06MTAwMzUwMDAwMjA1MDBCMDAwMDAwMDA1MDIwNTAwQjQwMDAwMDAwNjIwCi06MTAwMzYwMDAwMjA1MDBCODAwMDAwMDAyMDIwNTAwQkMwMDAwMDAwMjA3Ci06MTAwMzcwMDAwMjA1MDBDMDAwMDAwMDAwMDIwNTAwQzQwMDAwMDAwNUU2Ci06MTAwMzgwMDAwMjA1MDBDODAwMDAwMDAyMDIwNTAwQ0MwMDAwMDAwMkM3Ci06MTAwMzkwMDAwMjA1MDBEMDAwMDAwMDAyMDIwNTAwRDQwMDAwMDAwMUE4Ci06MTAwM0EwMDAwMjA1MDExNDAwMDAwMDAxMDIwNTAxMUMwMDAwMDAwMTBCCi06MTAwM0IwMDAwMjA1MDEyMDAwMDAwMDAyMDIwNTAyMDQwMDAwMDAwMTA1Ci06MTAwM0MwMDAwMjA1MDIwQzAwMDAwMDQwMDIwNTAyMTAwMDAwMDA0MDdGCi06MTAwM0QwMDAwMjA1MDIxQzAwMDAwMDIwMDIwNTAyMjAwMDAwMDAxMzlDCi06MTAwM0UwMDAwMjA1MDIyNDAwMDAwMDIwMDYwNTAyNDAwMDAwMDAwQTY5Ci06MTAwM0YwMDAwNDA1MDI4MDAwMjAwMDAwMDIwNTAwNTAwMDAwMDAwN0Y0Ci06MTAwNDAwMDAwMjA1MDA1NDAwMDAwMDA3MDIwNTAwNTgwMDAwMDAwMDJCCi06MTAwNDEwMDAwMjA1MDA1QzAwMDAwMDA4MDIwNTAwNjAwMDAwMDAwMTA5Ci06MTAwNDIwMDAwNjA1MDA2NDAwMDAwMDAzMDIwNTAwRDgwMDAwMDAwNjc1Ci06MTAwNDMwMDAwMjA1MDAwNDAwMDAwMDAxMDIwNTAwMDgwMDAwMDAwMUEwCi06MTAwNDQwMDAwMjA1MDAwQzAwMDAwMDAxMDIwNTAwMTAwMDAwMDAwMTgwCi06MTAwNDUwMDAwMjA1MDAxNDAwMDAwMDAxMDIwNTAwMTgwMDAwMDAwMTYwCi06MTAwNDYwMDAwMjA1MDAxQzAwMDAwMDAxMDIwNTAwMjAwMDAwMDAwMTQwCi06MTAwNDcwMDAwMjA1MDAyNDAwMDAwMDAxMDIwNTAwMjgwMDAwMDAwMTIwCi06MTAwNDgwMDAwMjA1MDAyQzAwMDAwMDAxMDIwNTAwMzAwMDAwMDAwMTAwCi06MTAwNDkwMDAwMjA1MDAzNDAwMDAwMDAxMDIwNTAwMzgwMDAwMDAwMUUwCi06MTAwNEEwMDAwMjA1MDAzQzAwMDAwMDAxMDIwNTAwNDAwMDAwMDAwMUMwCi06MTAwNEIwMDAwMjA1MDBFMDAwMDAwMDBEMDIwNTAwRTgwMDAwMDAwMDU5Ci06MTAwNEMwMDAwMjA1MDBGMDAwMDAwMDAwMDIwNTAwRjgwMDAwMDAwMDM2Ci06MTAwNEQwMDAwMjA1MDBFNDAwMDAwMDJEMDIwNTAwRUMwMDAwMDAyMEYxCi06MTAwNEUwMDAwMjA1MDBGNDAwMDAwMDIwMDIwNTAwRkMwMDAwMDAyMENFCi06MTAwNEYwMDAwMjA1MDBFMDAwMDAwMDFEMDIwNTAwRTgwMDAwMDAxMEY5Ci06MTAwNTAwMDAwMjA1MDBGMDAwMDAwMDEwMDIwNTAwRjgwMDAwMDAxMEQ1Ci06MTAwNTEwMDAwMjA1MDBFNDAwMDAwMDNEMDIwNTAwRUMwMDAwMDAzMDkwCi06MTAwNTIwMDAwMjA1MDBGNDAwMDAwMDMwMDIwNTAwRkMwMDAwMDAzMDZECi06MTAwNTMwMDAwMjA1MDBFMDAwMDAwMDREMDIwNTAwRTgwMDAwMDA0MDU4Ci06MTAwNTQwMDAwMjA1MDBGMDAwMDAwMDQwMDIwNTAwRjgwMDAwMDA0MDM1Ci06MTAwNTUwMDAwMjA1MDBFNDAwMDAwMDZEMDIwNTAwRUMwMDAwMDA2MEYwCi06MTAwNTYwMDAwMjA1MDBGNDAwMDAwMDYwMDIwNTAwRkMwMDAwMDA2MENECi06MTAwNTcwMDAwMjA1MDBFMDAwMDAwMDVEMDIwNTAwRTgwMDAwMDA1MEY4Ci06MTAwNTgwMDAwMjA1MDBGMDAwMDAwMDUwMDIwNTAwRjgwMDAwMDA1MEQ1Ci06MTAwNTkwMDAwMjA1MDBFNDAwMDAwMDdEMDIwNTAwRUMwMDAwMDA3MDkwCi06MTAwNUEwMDAwMjA1MDBGNDAwMDAwMDcwMDIwNTAwRkMwMDAwMDA3MDZECi06MTAwNUIwMDAwNDA2MTAwMDAyMDAwMDIwMDIwNjAwREMwMDAwMDAwMTFBCi06MTAwNUMwMDAwMTA2MDBEODAwMDAwMDAwMDQwNjAyMDAwMDAzMDIyMDFCCi06MTAwNUQwMDAwMjA2MDBEQzAwMDAwMDAwMDEwNjAwQjgwMDAwMDAwMDc4Ci06MTAwNUUwMDAwMTA2MDBDODAwMDAwMDAwMDIwNjAxNkMwMDAwMDAwMEM3Ci06MTAwNUYwMDAwMTA2MDBCQzAwMDAwMDAwMDEwNjAwQ0MwMDAwMDAwMDY1Ci06MTAwNjAwMDAwMjA2MDE3MDAwMDAwMDAwMDcxODA0MDAwMDkxMDAwMEJECi06MTAwNjEwMDAwODE4MDdEODAwMDUwMjIzMDcxQzAwMDAyQkRDMDAwMDg3Ci06MTAwNjIwMDAwNzFDODAwMDJERTkwQUY4MDcxRDAwMDAyRjUyMTY3M0UxCi06MTAwNjMwMDAwNzFEODAwMDE1REIyMjQ4MDgxREIwQjA0OUVBMDIyNURECi06MTAwNjQwMDAwMTE4MDAwMDAwMDAwMDAwMDExODAwMDQwMDAwMDAwMDc0Ci06MTAwNjUwMDAwMTE4MDAwODAwMDAwMDAwMDExODAwMEMwMDAwMDAwMDU0Ci06MTAwNjYwMDAwMTE4MDAxMDAwMDAwMDAwMDExODAwMTQwMDAwMDAwMDM0Ci06MTAwNjcwMDAwMjE4MDAyMDAwMDAwMDAxMDIxODAwMjQwMDAwMDAwMkZGCi06MTAwNjgwMDAwMjE4MDAyODAwMDAwMDAzMDIxODAwMkMwMDAwMDAwMERGCi06MTAwNjkwMDAwMjE4MDAzMDAwMDAwMDA0MDIxODAwMzQwMDAwMDAwMUJECi06MTAwNkEwMDAwMjE4MDAzODAwMDAwMDAwMDIxODAwM0MwMDAwMDAwMUExCi06MTAwNkIwMDAwMjE4MDA0MDAwMDAwMDA0MDIxODAwNDQwMDAwMDAwMDdFCi06MTAwNkMwMDAwMjE4MDA0ODAwMDAwMDAxMDIxODAwNEMwMDAwMDAwMzVFCi06MTAwNkQwMDAwMjE4MDA1MDAwMDAwMDAwMDIxODAwNTQwMDAwMDAwMTQxCi06MTAwNkUwMDAwMjE4MDA1ODAwMDAwMDA0MDIxODAwNUMwMDAwMDAwMDFFCi06MTAwNkYwMDAwMjE4MDA2MDAwMDAwMDAxMDIxODAwNjQwMDAwMDAwM0ZFCi06MTAwNzAwMDAwMjE4MDA2ODAwMDAwMDAwMDIxODAwNkMwMDAwMDAwMUUwCi06MTAwNzEwMDAwMjE4MDA3MDAwMDAwMDA0MDIxODAwNzQwMDAwMDAwMEJECi06MTAwNzIwMDAwMjE4MDA3ODAwMDAwMDA0MDIxODAwN0MwMDAwMDAwMzlBCi06MTAwNzMwMDAwNjE4MDA4MDAwMDAwMDAyMDIxODAwQTQwMDAwM0ZGRjFECi06MTAwNzQwMDAwMjE4MDBBODAwMDAwM0ZGMDIxODAyMjQwMDAwMDAwMEE1Ci06MTAwNzUwMDAwMjE4MDIzNDAwMDAwMDAwMDIxODAyNEMwMDAwMDAwMEUxCi06MTAwNzYwMDAwMjE4MDJFNDAwMDAwMEZGMDYxODEwMDAwMDAwMDQwMDU4Ci06MTAwNzcwMDAwMjFCOEJDMDAwMDAwMDAxMDIxQjgwMDAwMDAwMDAzNDNGCi06MTAwNzgwMDAwMjFCODA0MDAwMDAwMDE4MDIxQjgwODAwMDAwMDAwQzRCCi06MTAwNzkwMDAwMjFCODBDMDAwMDAwMDIwMEMxQjgzMDAwMDA3QTEyMDZBCi06MTAwN0EwMDAwQTFCODMwMDAwMDAwMTM4MEIxQjgzMDAwMDAwMTM4ODI0Ci06MTAwN0IwMDAwQTFCODM0MDAwMDAwMDAwMEMxQjgzNDAwMDAwMDFGNDcyCi06MTAwN0MwMDAwQjFCODM0MDAwMDAwMDA1MDIxQjgzODAwMDA3QTEyMDUzCi06MTAwN0QwMDAwMjFCODNDMDAwMDAwMUY0MDIxQjE0ODAwMDAwMDAwMTEyCi06MTAwN0UwMDAwQTFCMTQ4MDAwMDAwMDAwMDYxQTEwMDAwMDAwMDNCMzZBCi06MTAwN0YwMDAwNDFBMUVDQzAwMDEwMjI3MDYxQTFFRDAwMDAwMDAwOEIxCi06MTAwODAwMDAwNjFBMjAwODAwMDAwMEM4MDYxQTIwMDAwMDAwMDAwMjk2Ci06MTAwODEwMDAwNDFBQUY0MDAwMTAwMjI4MDYxQTM3MTgwMDAwMDAwNDFFCi06MTAwODIwMDAwNjFBMzcxMDAwMDAwMDAyMDYxQTUwMDAwMDAwMDAwMkVECi06MTAwODMwMDAwNjFBNTAwODAwMDAwMDA0MDYxQTUwMTgwMDAwMDAwNEIwCi06MTAwODQwMDAwNjFBNTAyODAwMDAwMDA0MDYxQTUwMzgwMDAwMDAwNDYwCi06MTAwODUwMDAwNjFBNTA0ODAwMDAwMDA0MDYxQTUwNTgwMDAwMDAwNDEwCi06MTAwODYwMDAwNjFBNTA2ODAwMDAwMDA0MDYxQTUwNzgwMDAwMDAwMkMyCi06MTAwODcwMDAwNDFBNTJDMDAwMDIwMjM4MDYxQTQwNTAwMDAwMDAwNjU2Ci06MTAwODgwMDAwNDFBNDA2ODAwMDIwMjNBMDQxQTQwNDAwMDA0MDIzQzg0Ci06MTAwODkwMDAwNDFBODAwMDAwMDEwMjQwMDYxQTgwMDQwMDAwMDAwM0QwCi06MTAwOEEwMDAwNDFBODAxMDAwMDEwMjQxMDYxQTgwMTQwMDAwMDAwMzlGCi06MTAwOEIwMDAwNDFBODAyMDAwMDEwMjQyMDYxQTgwMjQwMDAwMDAwMzZFCi06MTAwOEMwMDAwNDFBODAzMDAwMDEwMjQzMDYxQTgwMzQwMDAwMDAwMzNECi06MTAwOEQwMDAwNDFBODA0MDAwMDEwMjQ0MDYxQTgwNDQwMDAwMDAwMzBDCi06MTAwOEUwMDAwNDFBODA1MDAwMDEwMjQ1MDYxQTgwNTQwMDAwMDAwM0RCCi06MTAwOEYwMDAwNDFBODA2MDAwMDEwMjQ2MDYxQTgwNjQwMDAwMDAwM0FBCi06MTAwOTAwMDAwNDFBODA3MDAwMDEwMjQ3MDYxQTgwNzQwMDAwMDAwMzc4Ci06MTAwOTEwMDAwNDFBODA4MDAwMDEwMjQ4MDYxQTgwODQwMDAwMDAwMzQ3Ci06MTAwOTIwMDAwNDFBODA5MDAwMDEwMjQ5MDYxQTgwOTQwMDAwMDAwMzE2Ci06MTAwOTMwMDAwNDFBODBBMDAwMDEwMjRBMDYxQTgwQTQwMDAwMDAwM0U1Ci06MTAwOTQwMDAwNDFBODBCMDAwMDEwMjRCMDYxQTgwQjQwMDAwMDAwM0I0Ci06MTAwOTUwMDAwNDFBODBDMDAwMDEwMjRDMDYxQTgwQzQwMDAwMDAwMzgzCi06MTAwOTYwMDAwNDFBODBEMDAwMDEwMjREMDYxQTgwRDQwMDAwMDAwMzUyCi06MTAwOTcwMDAwNDFBODBFMDAwMDEwMjRFMDYxQTgwRTQwMDAwMDAwMzIxCi06MTAwOTgwMDAwNDFBODBGMDAwMDEwMjRGMDYxQTgwRjQwMDAwMDAwM0YwCi06MTAwOTkwMDAwNDFBODEwMDAwMDEwMjUwMDYxQTgxMDQwMDAwMDAwM0JECi06MTAwOUEwMDAwNDFBODExMDAwMDEwMjUxMDYxQTgxMTQwMDAwMDAwMzhDCi06MTAwOUIwMDAwNDFBODEyMDAwMDEwMjUyMDYxQTgxMjQwMDAwMDAwMzVCCi06MTAwOUMwMDAwNDFBODEzMDAwMDEwMjUzMDYxQTgxMzQwMDAwMDAwMzJBCi06MTAwOUQwMDAwNDFBODE0MDAwMDEwMjU0MDYxQTgxNDQwMDAwMDAwM0Y5Ci06MTAwOUUwMDAwNDFBODE1MDAwMDEwMjU1MDYxQTgxNTQwMDAwMDAwM0M4Ci06MTAwOUYwMDAwNDFBODE2MDAwMDEwMjU2MDYxQTgxNjQwMDAwMDAwMzk3Ci06MTAwQTAwMDAwNDFBODE3MDAwMDEwMjU3MDYxQTgxNzQwMDAwMDAwMzY1Ci06MTAwQTEwMDAwNDFBODE4MDAwMDEwMjU4MDYxQTgxODQwMDAwMDAwMzM0Ci06MTAwQTIwMDAwNDFBODE5MDAwMDEwMjU5MDYxQTgxOTQwMDAwMDAwMzAzCi06MTAwQTMwMDAwNDFBODFBMDAwMDEwMjVBMDYxQTgxQTQwMDAwMDAwM0QyCi06MTAwQTQwMDAwNDFBODFCMDAwMDEwMjVCMDYxQTgxQjQwMDAwMDAwM0ExCi06MTAwQTUwMDAwNDFBODFDMDAwMDEwMjVDMDYxQTgxQzQwMDAwMDAwMzcwCi06MTAwQTYwMDAwNDFBODFEMDAwMDEwMjVEMDYxQTgxRDQwMDAwMDAwMzNGCi06MTAwQTcwMDAwNDFBODFFMDAwMDEwMjVFMDYxQTgxRTQwMDAwMDAwMzBFCi06MTAwQTgwMDAwNDFBODFGMDAwMDEwMjVGMDYxQTgxRjQwMDAwMDAwM0RECi06MTAwQTkwMDAwNDFBODIwMDAwMDEwMjYwMDYxQTgyMDQwMDAwMDAwM0FBCi06MTAwQUEwMDAwNDFBODIxMDAwMDEwMjYxMDYxQTgyMTQwMDAwMDAwMzc5Ci06MTAwQUIwMDAwNDFBODIyMDAwMDEwMjYyMDYxQTgyMjQwMDAwMDAwMzQ4Ci06MTAwQUMwMDAwNDFBODIzMDAwMDEwMjYzMDYxQTgyMzQwMDAwMDAwMzE3Ci06MTAwQUQwMDAwNDFBODI0MDAwMDEwMjY0MDYxQTgyNDQwMDAwMDAwM0U2Ci06MTAwQUUwMDAwNDFBODI1MDAwMDEwMjY1MDYxQTgyNTQwMDAwMDAwM0I1Ci06MTAwQUYwMDAwNDFBODI2MDAwMDEwMjY2MDYxQTgyNjQwMDAwMDAwMzg0Ci06MTAwQjAwMDAwNDFBODI3MDAwMDEwMjY3MDYxQTgyNzQwMDAwMDAwMzUyCi06MTAwQjEwMDAwNDFBODI4MDAwMDEwMjY4MDYxQTgyODQwMDAwMDAwMzIxCi06MTAwQjIwMDAwNDFBODI5MDAwMDEwMjY5MDYxQTgyOTQwMDAwMDAwM0YwCi06MTAwQjMwMDAwNDFBODJBMDAwMDEwMjZBMDYxQTgyQTQwMDAwMDAwM0JGCi06MTAwQjQwMDAwNDFBODJCMDAwMDEwMjZCMDYxQTgyQjQwMDAwMDAwMzhFCi06MTAwQjUwMDAwNDFBODJDMDAwMDEwMjZDMDYxQTgyQzQwMDAwMDAwMzVECi06MTAwQjYwMDAwNDFBODJEMDAwMDEwMjZEMDYxQTgyRDQwMDAwMDAwMzJDCi06MTAwQjcwMDAwNDFBODJFMDAwMDEwMjZFMDYxQTgyRTQwMDAwMDAwM0ZCCi06MTAwQjgwMDAwNDFBODJGMDAwMDEwMjZGMDYxQTgyRjQwMDAwMDAwM0NBCi06MTAwQjkwMDAwNDFBODMwMDAwMDEwMjcwMDYxQTgzMDQwMDAwMDAwMzk3Ci06MTAwQkEwMDAwNDFBODMxMDAwMDEwMjcxMDYxQTgzMTQwMDAwMDAwMzY2Ci06MTAwQkIwMDAwNDFBODMyMDAwMDEwMjcyMDYxQTgzMjQwMDAwMDAwMzM1Ci06MTAwQkMwMDAwNDFBODMzMDAwMDEwMjczMDYxQTgzMzQwMDAwMDAwMzA0Ci06MTAwQkQwMDAwNDFBODM0MDAwMDEwMjc0MDYxQTgzNDQwMDAwMDAwM0QzCi06MTAwQkUwMDAwNDFBODM1MDAwMDEwMjc1MDYxQTgzNTQwMDAwMDAwM0EyCi06MTAwQkYwMDAwNDFBODM2MDAwMDEwMjc2MDYxQTgzNjQwMDAwMDAwMzcxCi06MTAwQzAwMDAwNDFBODM3MDAwMDEwMjc3MDYxQTgzNzQwMDAwMDAwMzNGCi06MTAwQzEwMDAwNDFBODM4MDAwMDEwMjc4MDYxQTgzODQwMDAwMDAwMzBFCi06MTAwQzIwMDAwNDFBODM5MDAwMDEwMjc5MDYxQTgzOTQwMDAwMDAwM0RECi06MTAwQzMwMDAwNDFBODNBMDAwMDEwMjdBMDYxQTgzQTQwMDAwMDAwM0FDCi06MTAwQzQwMDAwNDFBODNCMDAwMDEwMjdCMDYxQTgzQjQwMDAwMDAwMzdCCi06MTAwQzUwMDAwNDFBODNDMDAwMDEwMjdDMDYxQTgzQzQwMDAwMDAwMzRBCi06MTAwQzYwMDAwNDFBODNEMDAwMDEwMjdEMDYxQTgzRDQwMDAwMDAwMzE5Ci06MTAwQzcwMDAwNDFBODNFMDAwMDEwMjdFMDYxQTgzRTQwMDAwMDAwM0U4Ci06MTAwQzgwMDAwNDFBODNGMDAwMDEwMjdGMDYxQTgzRjQwMDAwMDAwM0I3Ci06MTAwQzkwMDAwNDFBODQwMDAwMDEwMjgwMDYxQTg0MDQwMDAwMDAwMzg0Ci06MTAwQ0EwMDAwNDFBODQxMDAwMDEwMjgxMDYxQTg0MTQwMDAwMDAwMzUzCi06MTAwQ0IwMDAwNDFBODQyMDAwMDEwMjgyMDYxQTg0MjQwMDAwMDAwMzIyCi06MTAwQ0MwMDAwNDFBODQzMDAwMDEwMjgzMDYxQTg0MzQwMDAwMDAwM0YxCi06MTAwQ0QwMDAwNDFBODQ0MDAwMDEwMjg0MDYxQTg0NDQwMDAwMDAwM0MwCi06MTAwQ0UwMDAwNDFBODQ1MDAwMDEwMjg1MDYxQTg0NTQwMDAwMDAwMzhGCi06MTAwQ0YwMDAwNDFBODQ2MDAwMDEwMjg2MDYxQTg0NjQwMDAwMDAwMzVFCi06MTAwRDAwMDAwNDFBODQ3MDAwMDEwMjg3MDYxQTg0NzQwMDAwMDAwMzJDCi06MTAwRDEwMDAwNDFBODQ4MDAwMDEwMjg4MDYxQTg0ODQwMDAwMDAwM0ZCCi06MTAwRDIwMDAwNDFBODQ5MDAwMDEwMjg5MDYxQTg0OTQwMDAwMDAwM0NBCi06MTAwRDMwMDAwNDFBODRBMDAwMDEwMjhBMDYxQTg0QTQwMDAwMDAwMzk5Ci06MTAwRDQwMDAwNDFBODRCMDAwMDEwMjhCMDYxQTg0QjQwMDAwMDAwMzY4Ci06MTAwRDUwMDAwNDFBODRDMDAwMDEwMjhDMDYxQTg0QzQwMDAwMDAwMzM3Ci06MTAwRDYwMDAwNDFBODREMDAwMDEwMjhEMDYxQTg0RDQwMDAwMDAwMzA2Ci06MTAwRDcwMDAwNDFBODRFMDAwMDEwMjhFMDYxQTg0RTQwMDAwMDAwM0Q1Ci06MTAwRDgwMDAwNDFBODRGMDAwMDEwMjhGMDYxQTg0RjQwMDAwMDAwM0E0Ci06MTAwRDkwMDAwNDFBODUwMDAwMDEwMjkwMDYxQTg1MDQwMDAwMDAwMzcxCi06MTAwREEwMDAwNDFBODUxMDAwMDEwMjkxMDYxQTg1MTQwMDAwMDAwMzQwCi06MTAwREIwMDAwNDFBODUyMDAwMDEwMjkyMDYxQTg1MjQwMDAwMDAwMzBGCi06MTAwREMwMDAwNDFBODUzMDAwMDEwMjkzMDYxQTg1MzQwMDAwMDAwM0RFCi06MTAwREQwMDAwNDFBODU0MDAwMDEwMjk0MDYxQTg1NDQwMDAwMDAwM0FECi06MTAwREUwMDAwNDFBODU1MDAwMDEwMjk1MDYxQTg1NTQwMDAwMDAwMzdDCi06MTAwREYwMDAwNDFBODU2MDAwMDEwMjk2MDYxQTg1NjQwMDAwMDAwMzRCCi06MTAwRTAwMDAwNDFBODU3MDAwMDEwMjk3MDYxQTg1NzQwMDAwMDAwMzE5Ci06MTAwRTEwMDAwNDFBODU4MDAwMDEwMjk4MDYxQTg1ODQwMDAwMDAwM0U4Ci06MTAwRTIwMDAwNDFBODU5MDAwMDEwMjk5MDYxQTg1OTQwMDAwMDAwM0I3Ci06MTAwRTMwMDAwNDFBODVBMDAwMDEwMjlBMDYxQTg1QTQwMDAwMDAwMzg2Ci06MTAwRTQwMDAwNDFBODVCMDAwMDEwMjlCMDYxQTg1QjQwMDAwMDAwMzU1Ci06MTAwRTUwMDAwNDFBODVDMDAwMDEwMjlDMDYxQTg1QzQwMDAwMDAwMzI0Ci06MTAwRTYwMDAwNDFBODVEMDAwMDEwMjlEMDYxQTg1RDQwMDAwMDAwM0YzCi06MTAwRTcwMDAwNDFBODVFMDAwMDEwMjlFMDYxQTg1RTQwMDAwMDAwM0MyCi06MTAwRTgwMDAwNDFBODVGMDAwMDEwMjlGMDYxQTg1RjQwMDAwMDAwMzkxCi06MTAwRTkwMDAwNDFBODYwMDAwMDEwMkEwMDYxQTg2MDQwMDAwMDAwMzVFCi06MTAwRUEwMDAwNDFBODYxMDAwMDEwMkExMDYxQTg2MTQwMDAwMDAwMzJECi06MTAwRUIwMDAwNDFBODYyMDAwMDEwMkEyMDYxQTg2MjQwMDAwMDAwM0ZDCi06MTAwRUMwMDAwNDFBODYzMDAwMDEwMkEzMDYxQTg2MzQwMDAwMDAwM0NCCi06MTAwRUQwMDAwNDFBODY0MDAwMDEwMkE0MDYxQTg2NDQwMDAwMDAwMzlBCi06MTAwRUUwMDAwNDFBODY1MDAwMDEwMkE1MDYxQTg2NTQwMDAwMDAwMzY5Ci06MTAwRUYwMDAwNDFBODY2MDAwMDEwMkE2MDYxQTg2NjQwMDAwMDAwMzM4Ci06MTAwRjAwMDAwNDFBODY3MDAwMDEwMkE3MDYxQTg2NzQwMDAwMDAwMzA2Ci06MTAwRjEwMDAwNDFBODY4MDAwMDEwMkE4MDYxQTg2ODQwMDAwMDAwM0Q1Ci06MTAwRjIwMDAwNDFBODY5MDAwMDEwMkE5MDYxQTg2OTQwMDAwMDAwM0E0Ci06MTAwRjMwMDAwNDFBODZBMDAwMDEwMkFBMDYxQTg2QTQwMDAwMDAwMzczCi06MTAwRjQwMDAwNDFBODZCMDAwMDEwMkFCMDYxQTg2QjQwMDAwMDAwMzQyCi06MTAwRjUwMDAwNDFBODZDMDAwMDEwMkFDMDYxQTg2QzQwMDAwMDAwMzExCi06MTAwRjYwMDAwNDFBODZEMDAwMDEwMkFEMDYxQTg2RDQwMDAwMDAwM0UwCi06MTAwRjcwMDAwNDFBODZFMDAwMDEwMkFFMDYxQTg2RTQwMDAwMDAwM0FGCi06MTAwRjgwMDAwNDFBODZGMDAwMDEwMkFGMDYxQTg2RjQwMDAwMDAwMzdFCi06MTAwRjkwMDAwNDFBODcwMDAwMDEwMkIwMDYxQTg3MDQwMDAwMDAwMzRCCi06MTAwRkEwMDAwNDFBODcxMDAwMDEwMkIxMDYxQTg3MTQwMDAwMDAwMzFBCi06MTAwRkIwMDAwNDFBODcyMDAwMDEwMkIyMDYxQTg3MjQwMDAwMDAwM0U5Ci06MTAwRkMwMDAwNDFBODczMDAwMDEwMkIzMDYxQTg3MzQwMDAwMDAwM0I4Ci06MTAwRkQwMDAwNDFBODc0MDAwMDEwMkI0MDYxQTg3NDQwMDAwMDAwMzg3Ci06MTAwRkUwMDAwNDFBODc1MDAwMDEwMkI1MDYxQTg3NTQwMDAwMDAwMzU2Ci06MTAwRkYwMDAwNDFBODc2MDAwMDEwMkI2MDYxQTg3NjQwMDAwMDAwMzI1Ci06MTAxMDAwMDAwNDFBODc3MDAwMDEwMkI3MDYxQTg3NzQwMDAwMDAwM0YzCi06MTAxMDEwMDAwNDFBODc4MDAwMDEwMkI4MDYxQTg3ODQwMDAwMDAwM0MyCi06MTAxMDIwMDAwNDFBODc5MDAwMDEwMkI5MDYxQTg3OTQwMDAwMDAwMzkxCi06MTAxMDMwMDAwNDFBODdBMDAwMDEwMkJBMDYxQTg3QTQwMDAwMDAwMzYwCi06MTAxMDQwMDAwNDFBODdCMDAwMDEwMkJCMDYxQTg3QjQwMDAwMDAwMzJGCi06MTAxMDUwMDAwNDFBODdDMDAwMDEwMkJDMDYxQTg3QzQwMDAwMDAwM0ZFCi06MTAxMDYwMDAwNDFBODdEMDAwMDEwMkJEMDYxQTg3RDQwMDAwMDAwM0NECi06MTAxMDcwMDAwNDFBODdFMDAwMDEwMkJFMDYxQTg3RTQwMDAwMDAwMzlDCi06MTAxMDgwMDAwNDFBODdGMDAwMDEwMkJGMDYxQTg3RjQwMDAwMDAwMzZCCi06MTAxMDkwMDAwNDFBODgwMDAwMDEwMkMwMDYxQTg4MDQwMDAwMDAwMzM4Ci06MTAxMEEwMDAwNDFBODgxMDAwMDEwMkMxMDYxQTg4MTQwMDAwMDAwMzA3Ci06MTAxMEIwMDAwNDFBODgyMDAwMDEwMkMyMDYxQTg4MjQwMDAwMDAwM0Q2Ci06MTAxMEMwMDAwNDFBODgzMDAwMDEwMkMzMDYxQTg4MzQwMDAwMDAwM0E1Ci06MTAxMEQwMDAwNDFBODg0MDAwMDEwMkM0MDYxQTg4NDQwMDAwMDAwMzc0Ci06MTAxMEUwMDAwNDFBODg1MDAwMDEwMkM1MDYxQTg4NTQwMDAwMDAwMzQzCi06MTAxMEYwMDAwNDFBODg2MDAwMDEwMkM2MDYxQTg4NjQwMDAwMDAwMzEyCi06MTAxMTAwMDAwNDFBODg3MDAwMDEwMkM3MDYxQTg4NzQwMDAwMDAwM0UwCi06MTAxMTEwMDAwNDFBODg4MDAwMDEwMkM4MDYxQTg4ODQwMDAwMDAwM0FGCi06MTAxMTIwMDAwNDFBODg5MDAwMDEwMkM5MDYxQTg4OTQwMDAwMDAwMzdFCi06MTAxMTMwMDAwNDFBODhBMDAwMDEwMkNBMDYxQTg4QTQwMDAwMDAwMzRECi06MTAxMTQwMDAwNDFBODhCMDAwMDEwMkNCMDYxQTg4QjQwMDAwMDAwMzFDCi06MTAxMTUwMDAwNDFBODhDMDAwMDEwMkNDMDYxQTg4QzQwMDAwMDAwM0VCCi06MTAxMTYwMDAwNDFBODhEMDAwMDEwMkNEMDYxQTg4RDQwMDAwMDAwM0JBCi06MTAxMTcwMDAwNDFBODhFMDAwMDEwMkNFMDYxQTg4RTQwMDAwMDAwMzg5Ci06MTAxMTgwMDAwNDFBODhGMDAwMDEwMkNGMDYxQTg4RjQwMDAwMDAwMzU4Ci06MTAxMTkwMDAwNDFBODkwMDAwMDEwMkQwMDYxQTg5MDQwMDAwMDAwMzI1Ci06MTAxMUEwMDAwNDFBODkxMDAwMDEwMkQxMDYxQTg5MTQwMDAwMDAwM0Y0Ci06MTAxMUIwMDAwNDFBODkyMDAwMDEwMkQyMDYxQTg5MjQwMDAwMDAwM0MzCi06MTAxMUMwMDAwNDFBODkzMDAwMDEwMkQzMDYxQTg5MzQwMDAwMDAwMzkyCi06MTAxMUQwMDAwNDFBODk0MDAwMDEwMkQ0MDYxQTg5NDQwMDAwMDAwMzYxCi06MTAxMUUwMDAwNDFBODk1MDAwMDEwMkQ1MDYxQTg5NTQwMDAwMDAwMzMwCi06MTAxMUYwMDAwNDFBODk2MDAwMDEwMkQ2MDYxQTg5NjQwMDAwMDAwM0ZGCi06MTAxMjAwMDAwNDFBODk3MDAwMDEwMkQ3MDYxQTg5NzQwMDAwMDAwM0NECi06MTAxMjEwMDAwNDFBODk4MDAwMDEwMkQ4MDYxQTg5ODQwMDAwMDAwMzlDCi06MTAxMjIwMDAwNDFBODk5MDAwMDEwMkQ5MDYxQTg5OTQwMDAwMDAwMzZCCi06MTAxMjMwMDAwNDFBODlBMDAwMDEwMkRBMDYxQTg5QTQwMDAwMDAwMzNBCi06MTAxMjQwMDAwNDFBODlCMDAwMDEwMkRCMDYxQTg5QjQwMDAwMDAwMzA5Ci06MTAxMjUwMDAwNDFBODlDMDAwMDEwMkRDMDYxQTg5QzQwMDAwMDAwM0Q4Ci06MTAxMjYwMDAwNDFBODlEMDAwMDEwMkREMDYxQTg5RDQwMDAwMDAwM0E3Ci06MTAxMjcwMDAwNDFBODlFMDAwMDEwMkRFMDYxQTg5RTQwMDAwMDAwMzc2Ci06MTAxMjgwMDAwNDFBODlGMDAwMDEwMkRGMDYxQTg5RjQwMDAwMDAwMzQ1Ci06MTAxMjkwMDAwNDFBOEEwMDAwMDEwMkUwMDYxQThBMDQwMDAwMDAwMzEyCi06MTAxMkEwMDAwNDFBOEExMDAwMDEwMkUxMDYxQThBMTQwMDAwMDAwM0UxCi06MTAxMkIwMDAwNDFBOEEyMDAwMDEwMkUyMDYxQThBMjQwMDAwMDAwM0IwCi06MTAxMkMwMDAwNDFBOEEzMDAwMDEwMkUzMDYxQThBMzQwMDAwMDAwMzdGCi06MTAxMkQwMDAwNDFBOEE0MDAwMDEwMkU0MDYxQThBNDQwMDAwMDAwMzRFCi06MTAxMkUwMDAwNDFBOEE1MDAwMDEwMkU1MDYxQThBNTQwMDAwMDAwMzFECi06MTAxMkYwMDAwNDFBOEE2MDAwMDEwMkU2MDYxQThBNjQwMDAwMDAwM0VDCi06MTAxMzAwMDAwNDFBOEE3MDAwMDEwMkU3MDYxQThBNzQwMDAwMDAwM0JBCi06MTAxMzEwMDAwNDFBOEE4MDAwMDEwMkU4MDYxQThBODQwMDAwMDAwMzg5Ci06MTAxMzIwMDAwNDFBOEE5MDAwMDEwMkU5MDYxQThBOTQwMDAwMDAwMzU4Ci06MTAxMzMwMDAwNDFBOEFBMDAwMDEwMkVBMDYxQThBQTQwMDAwMDAwMzI3Ci06MTAxMzQwMDAwNDFBOEFCMDAwMDEwMkVCMDYxQThBQjQwMDAwMDAwM0Y2Ci06MTAxMzUwMDAwNDFBOEFDMDAwMDEwMkVDMDYxQThBQzQwMDAwMDAwM0M1Ci06MTAxMzYwMDAwNDFBOEFEMDAwMDEwMkVEMDYxQThBRDQwMDAwMDAwMzk0Ci06MTAxMzcwMDAwNDFBOEFFMDAwMDEwMkVFMDYxQThBRTQwMDAwMDAwMzYzCi06MTAxMzgwMDAwNDFBOEFGMDAwMDEwMkVGMDYxQThBRjQwMDAwMDAwMzMyCi06MTAxMzkwMDAwNDFBOEIwMDAwMDEwMkYwMDYxQThCMDQwMDAwMDAwM0ZGCi06MTAxM0EwMDAwNDFBOEIxMDAwMDEwMkYxMDYxQThCMTQwMDAwMDAwM0NFCi06MTAxM0IwMDAwNDFBOEIyMDAwMDEwMkYyMDYxQThCMjQwMDAwMDAwMzlECi06MTAxM0MwMDAwNDFBOEIzMDAwMDEwMkYzMDYxQThCMzQwMDAwMDAwMzZDCi06MTAxM0QwMDAwNDFBOEI0MDAwMDEwMkY0MDYxQThCNDQwMDAwMDAwMzNCCi06MTAxM0UwMDAwNDFBOEI1MDAwMDEwMkY1MDYxQThCNTQwMDAwMDAwMzBBCi06MTAxM0YwMDAwNDFBOEI2MDAwMDEwMkY2MDYxQThCNjQwMDAwMDAwM0Q5Ci06MTAxNDAwMDAwNDFBOEI3MDAwMDEwMkY3MDYxQThCNzQwMDAwMDAwM0E3Ci06MTAxNDEwMDAwNDFBOEI4MDAwMDEwMkY4MDYxQThCODQwMDAwMDAwMzc2Ci06MTAxNDIwMDAwNDFBOEI5MDAwMDEwMkY5MDYxQThCOTQwMDAwMDAwMzQ1Ci06MTAxNDMwMDAwNDFBOEJBMDAwMDEwMkZBMDYxQThCQTQwMDAwMDAwMzE0Ci06MTAxNDQwMDAwNDFBOEJCMDAwMDEwMkZCMDYxQThCQjQwMDAwMDAwM0UzCi06MTAxNDUwMDAwNDFBOEJDMDAwMDEwMkZDMDYxQThCQzQwMDAwMDAwM0IyCi06MTAxNDYwMDAwNDFBOEJEMDAwMDEwMkZEMDYxQThCRDQwMDAwMDAwMzgxCi06MTAxNDcwMDAwNDFBOEJFMDAwMDEwMkZFMDYxQThCRTQwMDAwMDAwMzUwCi06MTAxNDgwMDAwNDFBOEJGMDAwMDEwMkZGMDYxQThCRjQwMDAwMDAwMzFGCi06MTAxNDkwMDAwNDFBOEMwMDAwMDEwMzAwMDYxQThDMDQwMDAwMDAwM0VCCi06MTAxNEEwMDAwNDFBOEMxMDAwMDEwMzAxMDYxQThDMTQwMDAwMDAwM0JBCi06MTAxNEIwMDAwNDFBOEMyMDAwMDEwMzAyMDYxQThDMjQwMDAwMDAwMzg5Ci06MTAxNEMwMDAwNDFBOEMzMDAwMDEwMzAzMDYxQThDMzQwMDAwMDAwMzU4Ci06MTAxNEQwMDAwNDFBOEM0MDAwMDEwMzA0MDYxQThDNDQwMDAwMDAwMzI3Ci06MTAxNEUwMDAwNDFBOEM1MDAwMDEwMzA1MDYxQThDNTQwMDAwMDAwM0Y2Ci06MTAxNEYwMDAwNDFBOEM2MDAwMDEwMzA2MDYxQThDNjQwMDAwMDAwM0M1Ci06MTAxNTAwMDAwNDFBOEM3MDAwMDEwMzA3MDYxQThDNzQwMDAwMDAwMzkzCi06MTAxNTEwMDAwNDFBOEM4MDAwMDEwMzA4MDYxQThDODQwMDAwMDAwMzYyCi06MTAxNTIwMDAwNDFBOEM5MDAwMDEwMzA5MDYxQThDOTQwMDAwMDAwMzMxCi06MTAxNTMwMDAwNDFBOENBMDAwMDEwMzBBMDYxQThDQTQwMDAwMDAwMzAwCi06MTAxNTQwMDAwNDFBOENCMDAwMDEwMzBCMDYxQThDQjQwMDAwMDAwM0NGCi06MTAxNTUwMDAwNDFBOENDMDAwMDEwMzBDMDYxQThDQzQwMDAwMDAwMzlFCi06MTAxNTYwMDAwNDFBOENEMDAwMDEwMzBEMDYxQThDRDQwMDAwMDAwMzZECi06MTAxNTcwMDAwNDFBOENFMDAwMDEwMzBFMDYxQThDRTQwMDAwMDAwMzNDCi06MTAxNTgwMDAwNDFBOENGMDAwMDEwMzBGMDYxQThDRjQwMDAwMDAwMzBCCi06MTAxNTkwMDAwNDFBOEQwMDAwMDEwMzEwMDYxQThEMDQwMDAwMDAwM0Q4Ci06MTAxNUEwMDAwNDFBOEQxMDAwMDEwMzExMDYxQThEMTQwMDAwMDAwM0E3Ci06MTAxNUIwMDAwNDFBOEQyMDAwMDEwMzEyMDYxQThEMjQwMDAwMDAwMzc2Ci06MTAxNUMwMDAwNDFBOEQzMDAwMDEwMzEzMDYxQThEMzQwMDAwMDAwMzQ1Ci06MTAxNUQwMDAwNDFBOEQ0MDAwMDEwMzE0MDYxQThENDQwMDAwMDAwMzE0Ci06MTAxNUUwMDAwNDFBOEQ1MDAwMDEwMzE1MDYxQThENTQwMDAwMDAwM0UzCi06MTAxNUYwMDAwNDFBOEQ2MDAwMDEwMzE2MDYxQThENjQwMDAwMDAwM0IyCi06MTAxNjAwMDAwNDFBOEQ3MDAwMDEwMzE3MDYxQThENzQwMDAwMDAwMzgwCi06MTAxNjEwMDAwNDFBOEQ4MDAwMDEwMzE4MDYxQThEODQwMDAwMDAwMzRGCi06MTAxNjIwMDAwNDFBOEQ5MDAwMDEwMzE5MDYxQThEOTQwMDAwMDAwMzFFCi06MTAxNjMwMDAwNDFBOERBMDAwMDEwMzFBMDYxQThEQTQwMDAwMDAwM0VECi06MTAxNjQwMDAwNDFBOERCMDAwMDEwMzFCMDYxQThEQjQwMDAwMDAwM0JDCi06MTAxNjUwMDAwNDFBOERDMDAwMDEwMzFDMDYxQThEQzQwMDAwMDAwMzhCCi06MTAxNjYwMDAwNDFBOEREMDAwMDEwMzFEMDYxQThERDQwMDAwMDAwMzVBCi06MTAxNjcwMDAwNDFBOERFMDAwMDEwMzFFMDYxQThERTQwMDAwMDAwMzI5Ci06MTAxNjgwMDAwNDFBOERGMDAwMDEwMzFGMDYxQThERjQwMDAwMDAwM0Y4Ci06MTAxNjkwMDAwNDFBOEUwMDAwMDEwMzIwMDYxQThFMDQwMDAwMDAwM0M1Ci06MTAxNkEwMDAwNDFBOEUxMDAwMDEwMzIxMDYxQThFMTQwMDAwMDAwMzk0Ci06MTAxNkIwMDAwNDFBOEUyMDAwMDEwMzIyMDYxQThFMjQwMDAwMDAwMzYzCi06MTAxNkMwMDAwNDFBOEUzMDAwMDEwMzIzMDYxQThFMzQwMDAwMDAwMzMyCi06MTAxNkQwMDAwNDFBOEU0MDAwMDEwMzI0MDYxQThFNDQwMDAwMDAwMzAxCi06MTAxNkUwMDAwNDFBOEU1MDAwMDEwMzI1MDYxQThFNTQwMDAwMDAwM0QwCi06MTAxNkYwMDAwNDFBOEU2MDAwMDEwMzI2MDYxQThFNjQwMDAwMDAwMzlGCi06MTAxNzAwMDAwNDFBOEU3MDAwMDEwMzI3MDYxQThFNzQwMDAwMDAwMzZECi06MTAxNzEwMDAwNDFBOEU4MDAwMDEwMzI4MDYxQThFODQwMDAwMDAwMzNDCi06MTAxNzIwMDAwNDFBOEU5MDAwMDEwMzI5MDYxQThFOTQwMDAwMDAwMzBCCi06MTAxNzMwMDAwNDFBOEVBMDAwMDEwMzJBMDYxQThFQTQwMDAwMDAwM0RBCi06MTAxNzQwMDAwNDFBOEVCMDAwMDEwMzJCMDYxQThFQjQwMDAwMDAwM0E5Ci06MTAxNzUwMDAwNDFBOEVDMDAwMDEwMzJDMDYxQThFQzQwMDAwMDAwMzc4Ci06MTAxNzYwMDAwNDFBOEVEMDAwMDEwMzJEMDYxQThFRDQwMDAwMDAwMzQ3Ci06MTAxNzcwMDAwNDFBOEVFMDAwMDEwMzJFMDYxQThFRTQwMDAwMDAwMzE2Ci06MTAxNzgwMDAwNDFBOEVGMDAwMDEwMzJGMDYxQThFRjQwMDAwMDAwM0U1Ci06MTAxNzkwMDAwNDFBOEYwMDAwMDEwMzMwMDYxQThGMDQwMDAwMDAwM0IyCi06MTAxN0EwMDAwNDFBOEYxMDAwMDEwMzMxMDYxQThGMTQwMDAwMDAwMzgxCi06MTAxN0IwMDAwNDFBOEYyMDAwMDEwMzMyMDYxQThGMjQwMDAwMDAwMzUwCi06MTAxN0MwMDAwNDFBOEYzMDAwMDEwMzMzMDYxQThGMzQwMDAwMDAwMzFGCi06MTAxN0QwMDAwNDFBOEY0MDAwMDEwMzM0MDYxQThGNDQwMDAwMDAwM0VFCi06MTAxN0UwMDAwNDFBOEY1MDAwMDEwMzM1MDYxQThGNTQwMDAwMDAwM0JECi06MTAxN0YwMDAwNDFBOEY2MDAwMDEwMzM2MDYxQThGNjQwMDAwMDAwMzhDCi06MTAxODAwMDAwNDFBOEY3MDAwMDEwMzM3MDYxQThGNzQwMDAwMDAwMzVBCi06MTAxODEwMDAwNDFBOEY4MDAwMDEwMzM4MDYxQThGODQwMDAwMDAwMzI5Ci06MTAxODIwMDAwNDFBOEY5MDAwMDEwMzM5MDYxQThGOTQwMDAwMDAwM0Y4Ci06MTAxODMwMDAwNDFBOEZBMDAwMDEwMzNBMDYxQThGQTQwMDAwMDAwM0M3Ci06MTAxODQwMDAwNDFBOEZCMDAwMDEwMzNCMDYxQThGQjQwMDAwMDAwMzk2Ci06MTAxODUwMDAwNDFBOEZDMDAwMDEwMzNDMDYxQThGQzQwMDAwMDAwMzY1Ci06MTAxODYwMDAwNDFBOEZEMDAwMDEwMzNEMDYxQThGRDQwMDAwMDAwMzM0Ci06MTAxODcwMDAwNDFBOEZFMDAwMDEwMzNFMDYxQThGRTQwMDAwMDAwN0ZGCi06MTAxODgwMDAwNDFBNjJDMDAwMjAwMzNGMDYxQUQwMDAwMDAwMDA3MjU0Ci06MTAxODkwMDAwNjFBRDI0ODAwMDAwMDEwMDYxQUQ2QjAwMDAwMDAyMDM4Ci06MTAxOEEwMDAwNjFBRDQ3MDAwMDAwMDkwMDYxQUQ0NjgwMDAwMDAwMkU2Ci06MTAxOEIwMDAwNjFBQTAwMDAwMDAwMUM0MDYxQTMwMDAwMDAwMDAxMDQzCi06MTAxOEMwMDAwNjFBMzA4MDAwMDAwMDEwMDYxQTMxMDAwMDAwMDAxMEQ3Ci06MTAxOEQwMDAwNjFBMzE4MDAwMDAwMDEwMDYxQTMzMDAwMDAwMDAxMkMyCi06MTAxOEUwMDAwNjFBMzM5MDAwMDAwMDcwMDYxQUQ0NTgwMDAwMDAwMjU3Ci06MTAxOEYwMDAwNjFBRDM0ODAwMDAwMDAyMDYxQUQzNTgwMDAwMDAyMDQwCi06MTAxOTAwMDAwNjFBQTcxMDAwMDAwMUM0MDYxQTMwNDAwMDAwMDAxMDlCCi06MTAxOTEwMDAwNjFBMzBDMDAwMDAwMDEwMDYxQTMxNDAwMDAwMDAxMDA2Ci06MTAxOTIwMDAwNjFBMzFDMDAwMDAwMDEwMDYxQTMzNDgwMDAwMDAxMkU5Ci06MTAxOTMwMDAwNjFBMzU1MDAwMDAwMDcwMDYxQUQ0NjAwMDAwMDAwMjNDCi06MTAxOTQwMDAwNjFBRDM1MDAwMDAwMDAyMDYxQUQzRDgwMDAwMDAyMDY3Ci06MTAxOTUwMDAwMjFBQUUyMDAwMDAwMDAwMDYxQTUwMDAwMDAwMDAwMjJCCi06MTAxOTYwMDAwNjFBNTA4MDAwMDAwMDEyMDQxQTQwMDAwMDAyMDM1RkIzCi06MTAxOTcwMDAwNDFBNjNDMDAwMDIwMzYxMDYxQTcwMDAwMDAwMDAwNDJDCi06MTAxOTgwMDAwNjFBMzIwMDAwMDAwMDA4MDIxQUFFMjQwMDAwMDAwMDBGCi06MTAxOTkwMDAwNjFBNTAxMDAwMDAwMDAyMDYxQTUwQzgwMDAwMDAxMjdCCi06MTAxOUEwMDAwNDFBNDAwODAwMDIwMzYzMDQxQTYzQzgwMDAyMDM2NUI2Ci06MTAxOUIwMDAwNjFBNzAxMDAwMDAwMDA0MDYxQTMyMjAwMDAwMDAwODA5Ci06MTAxOUMwMDAwMjFBQUUyODAwMDAwMDAwMDYxQTUwMjAwMDAwMDAwMjkzCi06MTAxOUQwMDAwNjFBNTExMDAwMDAwMDEyMDQxQTQwMTAwMDAyMDM2NzlBCi06MTAxOUUwMDAwNDFBNjNEMDAwMDIwMzY5MDYxQTcwMjAwMDAwMDAwNDg0Ci06MTAxOUYwMDAwNjFBMzI0MDAwMDAwMDA4MDIxQUFFMkMwMDAwMDAwMDU3Ci06MTAxQTAwMDAwNjFBNTAzMDAwMDAwMDAyMDYxQTUxNTgwMDAwMDAxMjU5Ci06MTAxQTEwMDAwNDFBNDAxODAwMDIwMzZCMDQxQTYzRDgwMDAyMDM2RDE1Ci06MTAxQTIwMDAwNjFBNzAzMDAwMDAwMDA0MDYxQTMyNjAwMDAwMDAwODM4Ci06MTAxQTMwMDAwMjFBQUUzMDAwMDAwMDAwMDYxQTUwNDAwMDAwMDAwMkZBCi06MTAxQTQwMDAwNjFBNTFBMDAwMDAwMDEyMDQxQTQwMjAwMDAyMDM2RjgxCi06MTAxQTUwMDAwNDFBNjNFMDAwMDIwMzcxMDYxQTcwNDAwMDAwMDAwNERCCi06MTAxQTYwMDAwNjFBMzI4MDAwMDAwMDA4MDIxQUFFMzQwMDAwMDAwMDlFCi06MTAxQTcwMDAwNjFBNTA1MDAwMDAwMDAyMDYxQTUxRTgwMDAwMDAxMjM5Ci06MTAxQTgwMDAwNDFBNDAyODAwMDIwMzczMDQxQTYzRTgwMDAyMDM3NTc1Ci06MTAxQTkwMDAwNjFBNzA1MDAwMDAwMDA0MDYxQTMyQTAwMDAwMDAwODY4Ci06MTAxQUEwMDAwMjFBQUUzODAwMDAwMDAwMDYxQTUwNjAwMDAwMDAwMjYyCi06MTAxQUIwMDAwNjFBNTIzMDAwMDAwMDEyMDQxQTQwMzAwMDAyMDM3NzY4Ci06MTAxQUMwMDAwNDFBNjNGMDAwMDIwMzc5MDYxQTcwNjAwMDAwMDAwNDMzCi06MTAxQUQwMDAwNjFBMzJDMDAwMDAwMDA4MDIxQUFFM0MwMDAwMDAwMEU2Ci06MTAxQUUwMDAwNjFBNTA3MDAwMDAwMDAyMDYxQTUyNzgwMDAwMDAxMjE4Ci06MTAxQUYwMDAwNDFBNDAzODAwMDIwMzdCMDQxQTYzRjgwMDAyMDM3REQ1Ci06MTAxQjAwMDAwNjFBNzA3MDAwMDAwMDA0MDYxQTMyRTAwMDAwMDAwODk3Ci06MTAxQjEwMDAwMjAwQTQ2ODAwMEIwMUM4MDIwMEEyOTQwNzFEMjkxMTRECi06MTAxQjIwMDAwMjAwQTI5ODAwMDAwMDAwMDIwMEEyOUMwMDlDMDQyNDc1Ci06MTAxQjMwMDAwMjAwQTJBMDAwMDAwMDAwMDIwMEEyQTQwMDAwMDIwOTBFCi06MTAxQjQwMDAwMjAwQTI3MDAwMDAwMDAwMDIwMEEyNzQwMDAwMDAwMDY5Ci06MTAxQjUwMDAwMjAwQTI3MDAwMDAwMDAwMDIwMEEyNzQwMDAwMDAwMDU5Ci06MTAxQjYwMDAwMjAwQTI3MDAwMDAwMDAwMDIwMEEyNzQwMDAwMDAwMDQ5Ci06MTAxQjcwMDAwMjAwQTI3MDAwMDAwMDAwMDIwMEEyNzQwMDAwMDAwMDM5Ci06MTAxQjgwMDAwMjAxNjBBMDAwMDAwMDAxMDIwMTYwQTQwMDAwMDI2MkU2Ci06MTAxQjkwMDAwMjAxNjBBODAwMDAwMDAyMDIwMTYwQUMwMDAwMDAxODExCi06MTAxQkEwMDAwMjAxNjIwNDAwMDAwMDAxMDIwMTAwQjQwMDAwMDAwMTEzCi06MTAxQkIwMDAwMjAxMDBCODAwMDAwMDAxMDIwMTAwREMwMDAwMDAwMTg5Ci06MTAxQkMwMDAwMjAxMDEwMDAwMDAwMDAxMDIwMTAxMDQwMDAwMDAwMTA3Ci06MTAxQkQwMDAwMjAxMDA3QzAwMzAwMDAwMDIwMTAwODQwMDAwMDAyOEE3Ci06MTAxQkUwMDAwMjAxMDA4QzAwMDAwMDAwMDIwMTAxMzAwMDAwMDAwNDJFCi06MTAxQkYwMDAwMjAxMDI1QzAwMDAwMDAxMDIwMTAzMjgwMDAwMDAwMDU1Ci06MTAxQzAwMDAwMjAxNjA1ODAwMDBGRkZGMDIwMTYwNzAwMDAwMDAwNzQxCi06MTAxQzEwMDAwMjAxNjA4MDAwMDAwMDAxMDIwMTA1NTQwMDAwMDAzMDU0Ci06MTAxQzIwMDAwMjAxMDBDNDAwMDAwMDAxMDIwMTAwQ0MwMDAwMDAwMTFDCi06MTAxQzMwMDAwMjAxMDBGODAwMDAwMDAxMDIwMTAwRjAwMDAwMDAwMUI0Ci06MTAxQzQwMDAwMjAxMDA4MDAwMzAwMDAwMDIwMTAwODgwMDAwMDAyODJFCi06MTAxQzUwMDAwMjAxMDA5MDAwMDAwMDAwMDIwMTAxMzQwMDAwMDAwNEI1Ci06MTAxQzYwMDAwMjAxMDJEQzAwMDAwMDAxMDIwMTAzMkMwMDAwMDAwMDYwCi06MTAxQzcwMDAwMjAxNjA1QzAwMDBGRkZGMDIwMTYwNzQwMDAwMDAwN0M5Ci06MTAxQzgwMDAwMjAxNjA4NDAwMDAwMDAxMDIwMTA1NjQwMDAwMDAzMEQwCi06MTAxQzkwMDAwMjAxMDBDODAwMDAwMDAxMDIwMTAwRDAwMDAwMDAwMUE0Ci06MTAxQ0EwMDAwMjAxMDBGQzAwMDAwMDAxMDIwMTAwRjQwMDAwMDAwMTNDCi06MTAxQ0IwMDAwMjBDMTAwMDAwMDAwMDI4MDIwQzIwMDgwMDAwMDIxMTk1Ci06MTAxQ0MwMDAwMjBDMjAwQzAwMDAwMjAwMDIwQzIwMTAwMDAwMDIwNDk0Ci06MTAxQ0QwMDAwMjBDMjAxQzAwMDBGRkZGMDIwQzIwMjAwMDAwRkZGRjcwCi06MTAxQ0UwMDAwMjBDMjAyNDAwMDBGRkZGMDIwQzIwMjgwMDAwRkZGRjUwCi06MTAxQ0YwMDAwMjBDMjAzODAwMDAwMDIwMDIwQzIwM0MwMDAwMDAyMUQzCi06MTAxRDAwMDAwMjBDMjA0MDAwMDAwMDIyMDIwQzIwNDQwMDAwMDAyM0FFCi06MTAxRDEwMDAwMjBDMjA0ODAwMDAwMDI0MDIwQzIwNEMwMDAwMDAyNThBCi06MTAxRDIwMDAwMjBDMjA1MDAwMDAwMDI2MDIwQzIwNTQwMDAwMDAyNzY2Ci06MTAxRDMwMDAwMjBDMjA1ODAwMDAwMDI4MDIwQzIwNUMwMDAwMDAyOTQyCi06MTAxRDQwMDAwMjBDMjA2MDAwMDAwMDJBMDIwQzIwNjQwMDAwMDAyQjFFCi06MTAxRDUwMDAwMjBDMjA2ODAwMDAwMDJDMDIwQzIwNkMwMDAwMDAyREZBCi06MTAxRDYwMDAwMjBDMjA3MDAwMDAwMDJFMDIwQzIwNzQwMDAwMDAyRkQ2Ci06MTAxRDcwMDAwMjBDMjA3ODAwMDAwMDEwMDYwQzIwN0MwMDAwMDAwN0Y4Ci06MTAxRDgwMDAwMjBDMjA5ODAwMDAwMDExMDIwQzIwOUMwMDAwMDAxMkEwCi06MTAxRDkwMDAwMjBDMjBBMDAwMDAwMDEzMDYwQzIwQTQwMDAwMDAxRDZGCi06MTAxREEwMDAwMjBDMjExODAwMDAwMDAxMDIwQzIxMUMwMDAwMDAwMTlGCi06MTAxREIwMDAwMjBDMjEyMDAwMDAwMDAxMDYwQzIxMjQwMDAwMDAxRDVGCi06MTAxREMwMDAwMjBDMjE5ODAwMDAwMDAxMDYwQzIxOUMwMDAwMDAwNzc1Ci06MTAxREQwMDAwMjBDMjFCODAwMDAwMDAxMDIwQzIxQkMwMDAwMDAwMTJGCi06MTAxREUwMDAwMjBDMjFDMDAwMDAwMDAxMDIwQzIxQzQwMDAwMDAwMTBGCi06MTAxREYwMDAwMjBDMjFDODAwMDAwMDAxMDIwQzIxQ0MwMDAwMDAwMUVGCi06MTAxRTAwMDAwMjBDMjFEMDAwMDAwMDAxMDIwQzIxRDQwMDAwMDAwMUNFCi06MTAxRTEwMDAwMjBDMjFEODAwMDAwMDAxMDIwQzIxREMwMDAwMDAwMUFFCi06MTAxRTIwMDAwMjBDMjFFMDAwMDAwMDAxMDIwQzIxRTQwMDAwMDAwMThFCi06MTAxRTMwMDAwMjBDMjFFODAwMDAwMDAxMDIwQzIxRUMwMDAwMDAwMTZFCi06MTAxRTQwMDAwMjBDMjFGMDAwMDAwMDAxMDIwQzIxRjQwMDAwMDAwMTRFCi06MTAxRTUwMDAwMjBDMjFGODAwMDAwMDAxMDYwQzIxRkMwMDAwMDAwNzI0Ci06MTAxRTYwMDAwMjBDMjIxODAwMDAwMDAxMDYwQzIyMUMwMDAwMDAwN0QyCi06MTAxRTcwMDAwMjBDMjIzODA3RkZGRkZGMDIwQzIyM0MwMDAwMDAzRjRCCi06MTAxRTgwMDAwMjBDMjI0MDA3RkZGRkZGMDIwQzIyNDQwMDAwMDAwRjVCCi06MTAxRTkwMDAwMTBDMjI0ODAwMDAwMDAwMDEwQzIyNEMwMDAwMDAwMDUwCi06MTAxRUEwMDAwMTBDMjI1MDAwMDAwMDAwMDEwQzIyNTQwMDAwMDAwMDMwCi06MTAxRUIwMDAwMTBDMjI1ODAwMDAwMDAwMDEwQzIyNUMwMDAwMDAwMDEwCi06MTAxRUMwMDAwMTBDMjI2MDAwMDAwMDAwMDEwQzIyNjQwMDAwMDAwMEYwCi06MTAxRUQwMDAwMTBDMjI2ODAwMDAwMDAwMDEwQzIyNkMwMDAwMDAwMEQwCi06MTAxRUUwMDAwMTBDMjI3MDAwMDAwMDAwMDEwQzIyNzQwMDAwMDAwMEIwCi06MTAxRUYwMDAwMTBDMjI3ODAwMDAwMDAwMDEwQzIyN0MwMDAwMDAwMDkwCi06MTAxRjAwMDAwQzBDMjAwMDAwMDAwM0U4MEEwQzIwMDAwMDAwMDAwMTc3Ci06MTAxRjEwMDAwQjBDMjAwMDAwMDAwMDBBMDIwQzQwMDgwMDAwMTAxMTA5Ci06MTAxRjIwMDAwMjBDNDAwQzAwMDAxMDAwMDIwQzQwMTAwMDAwMTAwNEQ1Ci06MTAxRjMwMDAwMjBDNDAxNDAwMDAxMDIxMDIwQzQwMUMwMDAwRkZGRkE2Ci06MTAxRjQwMDAwMjBDNDAyMDAwMDBGRkZGMDIwQzQwMjQwMDAwRkZGRkI1Ci06MTAxRjUwMDAwMjBDNDAyODAwMDBGRkZGMDIwQzQwMzgwMDAwMDA0NjQxCi06MTAxRjYwMDAwMjBDNDAzQzAwMDAwMDEwMDYwQzQwNDAwMDAwMDAwMjQzCi06MTAxRjcwMDAwMjBDNDA0ODAwMDAwMDE4MDIwQzQwNEMwMDAwMDBGMDI5Ci06MTAxRjgwMDAwNjBDNDA1MDAwMDAwMDFGMDIwQzQwQ0MwMDAwMDAwMTc1Ci06MTAxRjkwMDAwNjBDNDBEMDAwMDAwMDNBMDIwQzQxQjgwMDAwMDAwMURECi06MTAxRkEwMDAwNjBDNDFCQzAwMDAwMDAzMDIwQzQxQzgwMDAwMDAwMTA3Ci06MTAxRkIwMDAwMjBDNDFDQzAwMDAwMDAxMDYwQzQxRDAwMDAwMDAxQUM4Ci06MTAxRkMwMDAwMjBDNDIzODA3RkZGRkZGMDIwQzQyM0MwMDAwMDAzRkJBCi06MTAxRkQwMDAwMjBDNDI0MDA3RkZGRkZGMDIwQzQyNDQwMDAwMDAwRkNBCi06MTAxRkUwMDAwMTBDNDI0ODAwMDAwMDAwMDEwQzQyNEMwMDAwMDAwMEJGCi06MTAxRkYwMDAwMTBDNDI1MDAwMDAwMDAwMDEwQzQyNTQwMDAwMDAwMDlGCi06MTAyMDAwMDAwMTBDNDI1ODAwMDAwMDAwMDEwQzQyNUMwMDAwMDAwMDdFCi06MTAyMDEwMDAwMTBDNDI2MDAwMDAwMDAwMDEwQzQyNjQwMDAwMDAwMDVFCi06MTAyMDIwMDAwMTBDNDI2ODAwMDAwMDAwMDEwQzQyNkMwMDAwMDAwMDNFCi06MTAyMDMwMDAwMTBDNDI3MDAwMDAwMDAwMDEwQzQyNzQwMDAwMDAwMDFFCi06MTAyMDQwMDAwMTBDNDI3ODAwMDAwMDAwMDEwQzQyN0MwMDAwMDAwMEZFCi06MTAyMDUwMDAwMTBDNDI4MDAwMDAwMDAwMEMwQzQwMDAwMDAwMDNFODZFCi06MTAyMDYwMDAwQTBDNDAwMDAwMDAwMDAxMEIwQzQwMDAwMDAwMDAwQUI4Ci06MTAyMDcwMDAwNjBENDAwMDAwMDAwQTAwMDIwRDAwNDQwMDAwMDAzMjdFCi06MTAyMDgwMDAwMjBEMDA4QzAyMTUwMDIwMDIwRDAwOTAwMjE1MDAyMEE4Ci06MTAyMDkwMDAwMjBEMDA5NDA4MTAwMDAwMDIwRDAwOTgwMDAwMDAzM0FCCi06MTAyMEEwMDAwMjBEMDA5QzAwMDAwMDAyMDIwRDAwQTAwMDAwMDAwMEQ0Ci06MTAyMEIwMDAwMjBEMDBBNDAwMDAwMDA1MDIwRDAwQTgwMDAwMDAwNUFDCi06MTAyMEMwMDAwNjBEMDBBQzAwMDAwMDAyMDIwRDAwQjQwMDAwMDAwMjhBCi06MTAyMEQwMDAwMjBEMDBCODAwMDAwMDAzMDIwRDAwQkMwMDAwMDAwMjY5Ci06MTAyMEUwMDAwMjBEMDBDMDAwMDAwMDAxMDIwRDAwQzgwMDAwMDAwMjQ3Ci06MTAyMEYwMDAwMjBEMDBDQzAwMDAwMDAyMDIwRDAxNUMwMDAwMDAwMTk2Ci06MTAyMTAwMDAwMjBEMDE2NDAwMDAwMDAxMDIwRDAxNjgwMDAwMDAwMkUwCi06MTAyMTEwMDAwMjBEMDIwNDAwMDAwMDAxMDIwRDAyMEMwMDAwMDAyMDZDCi06MTAyMTIwMDAwMjBEMDIxMDAwMDAwMDQwMDIwRDAyMTQwMDAwMDA0MEU5Ci06MTAyMTMwMDAwMjBEMDIyMDAwMDAwMDAzMDIwRDAyMjQwMDAwMDAxODFFCi06MTAyMTQwMDAwNjBEMDI4MDAwMDAwMDEyMDQwRDAzMDAwMDE4MDM3RjNBCi06MTAyMTUwMDAwNjBEMDM2MDAwMDAwMDBDMDIwRDAwNEMwMDAwMDAwMUExCi06MTAyMTYwMDAwMjBEMDA1MDAwMDAwMDAyMDIwRDAwNTQwMDAwMDAwMEFCCi06MTAyMTcwMDAwMjBEMDA1ODAwMDAwMDA4MDYwRDAwNUMwMDAwMDAwNDdECi06MTAyMTgwMDAwMjBEMDBDNDAwMDAwMDA0MDIwRDAwMDQwMDAwMDAwMTY0Ci06MTAyMTkwMDAwMjBEMDAwODAwMDAwMDAxMDIwRDAwMEMwMDAwMDAwMTBCCi06MTAyMUEwMDAwMjBEMDAxMDAwMDAwMDAxMDIwRDAwMTQwMDAwMDAwMUVCCi06MTAyMUIwMDAwMjBEMDAxODAwMDAwMDAxMDIwRDAwMUMwMDAwMDAwMUNCCi06MTAyMUMwMDAwMjBEMDAyMDAwMDAwMDAxMDIwRDAwMjQwMDAwMDAwMUFCCi06MTAyMUQwMDAwMjBEMDAyODAwMDAwMDAxMDIwRDAwMkMwMDAwMDAwMThCCi06MTAyMUUwMDAwMjBEMDAzMDAwMDAwMDAxMDIwRDAwMzQwMDAwMDAwMTZCCi06MTAyMUYwMDAwMjBEMDAzODAwMDAwMDAxMDIwRDAwM0MwMDAwMDAwMTRCCi06MTAyMjAwMDAwMjBEMDExNDAwMDAwMDA5MDIwRDAxMUMwMDAwMDAwQTZCCi06MTAyMjEwMDAwMjBEMDEyNDAwMDAwMDAwMDIwRDAxMkMwMDAwMDAwMDRFCi06MTAyMjIwMDAwMjBEMDEzNDAwMDAwMDAwMDIwRDAxM0MwMDAwMDAwQjEzCi06MTAyMjMwMDAwMjBEMDE0NDAwMDAwMDAwMDIwRDAxMTgwMDAwMDAyOUY5Ci06MTAyMjQwMDAwMjBEMDEyMDAwMDAwMDJBMDIwRDAxMjgwMDAwMDAyMERDCi06MTAyMjUwMDAwMjBEMDEzMDAwMDAwMDIwMDIwRDAxMzgwMDAwMDAyMEI2Ci06MTAyMjYwMDAwMjBEMDE0MDAwMDAwMDJCMDIwRDAxNDgwMDAwMDAyMDdCCi06MTAyMjcwMDAwMjBEMDExNDAwMDAwMDE5MDIwRDAxMUMwMDAwMDAxQURCCi06MTAyMjgwMDAwMjBEMDEyNDAwMDAwMDEwMDIwRDAxMkMwMDAwMDAxMEJFCi06MTAyMjkwMDAwMjBEMDEzNDAwMDAwMDEwMDIwRDAxM0MwMDAwMDAxQjgzCi06MTAyMkEwMDAwMjBEMDE0NDAwMDAwMDEwMDIwRDAxMTgwMDAwMDAzOTY5Ci06MTAyMkIwMDAwMjBEMDEyMDAwMDAwMDNBMDIwRDAxMjgwMDAwMDAzMDRDCi06MTAyMkMwMDAwMjBEMDEzMDAwMDAwMDMwMDIwRDAxMzgwMDAwMDAzMDI2Ci06MTAyMkQwMDAwMjBEMDE0MDAwMDAwMDNCMDIwRDAxNDgwMDAwMDAzMEVCCi06MTAyMkUwMDAwMjBEMDExNDAwMDAwMDQ5MDIwRDAxMUMwMDAwMDA0QTBCCi06MTAyMkYwMDAwMjBEMDEyNDAwMDAwMDQwMDIwRDAxMkMwMDAwMDA0MEVFCi06MTAyMzAwMDAwMjBEMDEzNDAwMDAwMDQwMDIwRDAxM0MwMDAwMDA0QkIyCi06MTAyMzEwMDAwMjBEMDE0NDAwMDAwMDQwMDIwRDAxMTgwMDAwMDA2OTk4Ci06MTAyMzIwMDAwMjBEMDEyMDAwMDAwMDZBMDIwRDAxMjgwMDAwMDA2MDdCCi06MTAyMzMwMDAwMjBEMDEzMDAwMDAwMDYwMDIwRDAxMzgwMDAwMDA2MDU1Ci06MTAyMzQwMDAwMjBEMDE0MDAwMDAwMDZCMDIwRDAxNDgwMDAwMDA2MDFBCi06MTAyMzUwMDAwMjBEMDExNDAwMDAwMDU5MDIwRDAxMUMwMDAwMDA1QTdBCi06MTAyMzYwMDAwMjBEMDEyNDAwMDAwMDUwMDIwRDAxMkMwMDAwMDA1MDVECi06MTAyMzcwMDAwMjBEMDEzNDAwMDAwMDUwMDIwRDAxM0MwMDAwMDA1QjIyCi06MTAyMzgwMDAwMjBEMDE0NDAwMDAwMDUwMDIwRDAxMTgwMDAwMDA3OTA4Ci06MTAyMzkwMDAwMjBEMDEyMDAwMDAwMDdBMDIwRDAxMjgwMDAwMDA3MEVCCi06MTAyM0EwMDAwMjBEMDEzMDAwMDAwMDcwMDIwRDAxMzgwMDAwMDA3MEM1Ci06MTAyM0IwMDAwMjBEMDE0MDAwMDAwMDdCMDIwRDAxNDgwMDAwMDA3MDhBCi06MTAyM0MwMDAwNjBFMjAwMDAwMDAwODAwMDIwRTAwNEMwMDAwMDAzMjQzCi06MTAyM0QwMDAwMjBFMDA5NDAyMTUwMDIwMDIwRTAwOTgwMjE1MDAyMDQzCi06MTAyM0UwMDAwMjBFMDA5QzAwMDAwMDMwMDIwRTAwQTAwODEwMDAwMDQ5Ci06MTAyM0YwMDAwMjBFMDBBNDAwMDAwMDMzMDIwRTAwQTgwMDAwMDAzMDBFCi06MTAyNDAwMDAwMjBFMDBBQzAwMDAwMDMxMDIwRTAwQjAwMDAwMDAwMjFECi06MTAyNDEwMDAwMjBFMDBCNDAwMDAwMDA0MDIwRTAwQjgwMDAwMDAwMDJDCi06MTAyNDIwMDAwMjBFMDBCQzAwMDAwMDAyMDIwRTAwQzAwMDAwMDAwMjBDCi06MTAyNDMwMDAwMjBFMDBDNDAwMDAwMDAwMDIwRTAwQzgwMDAwMDAwMkVFCi06MTAyNDQwMDAwMjBFMDBDQzAwMDAwMDA3MDIwRTAwRDAwMDAwMDAwMkM3Ci06MTAyNDUwMDAwMjBFMDBENDAwMDAwMDAyMDIwRTAwRDgwMDAwMDAwMUFECi06MTAyNDYwMDAwMjBFMDE0NDAwMDAwMDAxMDIwRTAxNEMwMDAwMDAwMUI4Ci06MTAyNDcwMDAwMjBFMDE1MDAwMDAwMDAyMDIwRTAyMDQwMDAwMDAwMUUyCi06MTAyNDgwMDAwMjBFMDIwQzAwMDAwMDQwMDIwRTAyMTAwMDAwMDA0MDhDCi06MTAyNDkwMDAwMjBFMDIxQzAwMDAwMDA0MDIwRTAyMjAwMDAwMDAyMEI4Ci06MTAyNEEwMDAwMjBFMDIyNDAwMDAwMDBFMDIwRTAyMjgwMDAwMDAxQjkzCi06MTAyNEIwMDAwNjBFMDMwMDAwMDAwMDEyMDQwRTAyODAwMDFCMDM5N0FBCi06MTAyNEMwMDAwNjBFMDJFQzAwMDAwMDA1MDIwRTAwNTQwMDAwMDAwQzk1Ci06MTAyNEQwMDAwMjBFMDA1ODAwMDAwMDBDMDIwRTAwNUMwMDAwMDAwMDFDCi06MTAyNEUwMDAwMjBFMDA2MDAwMDAwMDEwMDIwRTAwNjQwMDAwMDAxMEU4Ci06MTAyNEYwMDAwNjBFMDA2ODAwMDAwMDAzMDIwRTAwREMwMDAwMDAwMzZFCi06MTAyNTAwMDAwMjBFMDAwNDAwMDAwMDAxMDIwRTAwMDgwMDAwMDAwMTlECi06MTAyNTEwMDAwMjBFMDAwQzAwMDAwMDAxMDIwRTAwMTAwMDAwMDAwMTdECi06MTAyNTIwMDAwMjBFMDAxNDAwMDAwMDAxMDIwRTAwMTgwMDAwMDAwMTVECi06MTAyNTMwMDAwMjBFMDAxQzAwMDAwMDAxMDIwRTAwMjAwMDAwMDAwMTNECi06MTAyNTQwMDAwMjBFMDAyNDAwMDAwMDAxMDIwRTAwMjgwMDAwMDAwMTFECi06MTAyNTUwMDAwMjBFMDAyQzAwMDAwMDAxMDIwRTAwMzAwMDAwMDAwMUZECi06MTAyNTYwMDAwMjBFMDAzNDAwMDAwMDAxMDIwRTAwMzgwMDAwMDAwMURECi06MTAyNTcwMDAwMjBFMDAzQzAwMDAwMDAxMDIwRTAwNDAwMDAwMDAwMUJECi06MTAyNTgwMDAwMjBFMDA0NDAwMDAwMDAxMDIwRTAxMTAwMDAwMDAwRkM2Ci06MTAyNTkwMDAwMjBFMDExODAwMDAwMDAwMDIwRTAxMjAwMDAwMDAwMEUxCi06MTAyNUEwMDAwMjBFMDEyODAwMDAwMDAwMDIwRTAxMTQwMDAwMDAyRjlFCi06MTAyNUIwMDAwMjBFMDExQzAwMDAwMDIwMDIwRTAxMjQwMDAwMDAwMDk5Ci06MTAyNUMwMDAwMjBFMDEyQzAwMDAwMDAwMDIwRTAxMTAwMDAwMDAxRjhFCi06MTAyNUQwMDAwMjBFMDExODAwMDAwMDEwMDIwRTAxMjAwMDAwMDAwMDkxCi06MTAyNUUwMDAwMjBFMDEyODAwMDAwMDAwMDIwRTAxMTQwMDAwMDAzRjRFCi06MTAyNUYwMDAwMjBFMDExQzAwMDAwMDMwMDIwRTAxMjQwMDAwMDAwMDQ5Ci06MTAyNjAwMDAwMjBFMDEyQzAwMDAwMDAwMDIwRTAxMTAwMDAwMDA0RjFECi06MTAyNjEwMDAwMjBFMDExODAwMDAwMDQwMDIwRTAxMjAwMDAwMDAwMDIwCi06MTAyNjIwMDAwMjBFMDEyODAwMDAwMDAwMDIwRTAxMTQwMDAwMDA2RkRECi06MTAyNjMwMDAwMjBFMDExQzAwMDAwMDYwMDIwRTAxMjQwMDAwMDAwMEQ4Ci06MTAyNjQwMDAwMjBFMDEyQzAwMDAwMDAwMDIwRTAxMTAwMDAwMDA1RkNECi06MTAyNjUwMDAwMjBFMDExODAwMDAwMDUwMDIwRTAxMjAwMDAwMDAwMEQwCi06MTAyNjYwMDAwMjBFMDEyODAwMDAwMDAwMDIwRTAxMTQwMDAwMDA3RjhECi06MTAyNjcwMDAwMjBFMDExQzAwMDAwMDcwMDIwRTAxMjQwMDAwMDAwMDg4Ci06MTAyNjgwMDAwMjBFMDEyQzAwMDAwMDAwMDczMDA0MDAwMEM4MDAwMDBBCi06MTAyNjkwMDAwODMwMDdEODAwMDUwM0IyMDczNDAwMDAzMzJDMDAwMENGCi06MTAyNkEwMDAwNzM0ODAwMDMwQUMwQ0NDMDczNTAwMDAzNTMzMThGODA3Ci06MTAyNkIwMDAwNzM1ODAwMDJBNzEyNjQ1MDczNjAwMDAxOERBMzBFMjE3Ci06MTAyNkMwMDAwODM2NDY3MDM3MzIwM0I0MDEzMDAwMDAwMDAwMDAwMEM1Ci06MTAyNkQwMDAwMTMwMDAwNDAwMDAwMDAwMDEzMDAwMDgwMDAwMDAwMDhDCi06MTAyNkUwMDAwMTMwMDAwQzAwMDAwMDAwMDEzMDAwMTAwMDAwMDAwMDZDCi06MTAyNkYwMDAwMTMwMDAxNDAwMDAwMDAwMDIzMDAwMjAwMDAwMDAwMTQyCi06MTAyNzAwMDAwMjMwMDAyNDAwMDAwMDAyMDIzMDAwMjgwMDAwMDAwMzE0Ci06MTAyNzEwMDAwMjMwMDAyQzAwMDAwMDAwMDIzMDAwMzAwMDAwMDAwNEY1Ci06MTAyNzIwMDAwMjMwMDAzNDAwMDAwMDAxMDIzMDAwMzgwMDAwMDAwMEQ4Ci06MTAyNzMwMDAwMjMwMDAzQzAwMDAwMDAxMDIzMDAwNDAwMDAwMDAwNEI0Ci06MTAyNzQwMDAwMjMwMDA0NDAwMDAwMDAwMDIzMDAwNDgwMDAwMDAwMTk4Ci06MTAyNzUwMDAwMjMwMDA0QzAwMDAwMDAzMDIzMDAwNTAwMDAwMDAwMDc2Ci06MTAyNzYwMDAwMjMwMDA1NDAwMDAwMDAxMDIzMDAwNTgwMDAwMDAwNDU0Ci06MTAyNzcwMDAwMjMwMDA1QzAwMDAwMDAwMDIzMDAwNjAwMDAwMDAwMTM4Ci06MTAyNzgwMDAwMjMwMDA2NDAwMDAwMDAzMDIzMDAwNjgwMDAwMDAwMDE2Ci06MTAyNzkwMDAwMjMwMDA2QzAwMDAwMDAxMDIzMDAwNzAwMDAwMDAwNEY0Ci06MTAyN0EwMDAwMjMwMDA3NDAwMDAwMDAwMDIzMDAwNzgwMDAwMDAwNEQ1Ci06MTAyN0IwMDAwMjMwMDA3QzAwMDAwMDAzMDYzMDAwODAwMDAwMDAwMkIwCi06MTAyN0MwMDAwMjMwMDBBNDAwMDAzRkZGMDIzMDAwQTgwMDAwMDNGRjE5Ci06MTAyN0QwMDAwMjMwMDIyNDAwMDAwMDAwMDIzMDAyMzQwMDAwMDAwMDM5Ci06MTAyN0UwMDAwMjMwMDI0QzAwMDAwMDAwMDIzMDAyRTQwMDAwRkZGRjUzCi06MTAyN0YwMDAwNjMwMjAwMDAwMDAwODAwMDIzMzhCQzAwMDAwMDAwMUZBCi06MTAyODAwMDAwMjMzODAwMDAwMDAwMDFBMDIzMzgwNDAwMDAwMDA0RUI2Ci06MTAyODEwMDAwMjMzODA4MDAwMDAwMDEwMDIzMzgwQzAwMDAwMDAyMERFCi06MTAyODIwMDAwQzMzODMwMDAwMDdBMTIwMEEzMzgzMDAwMDAwMDEzODI1Ci06MTAyODMwMDAwQjMzODMwMDAwMDAxMzg4MEEzMzgzNDAwMDAwMDAwMDNDCi06MTAyODQwMDAwQzMzODM0MDAwMDAwMUY0MEIzMzgzNDAwMDAwMDAwNThCCi06MTAyODUwMDAwMjMzODM4MDAwMDdBMTIwMDIzMzgzQzAwMDAwMDFGNDBCCi06MTAyODYwMDAwMjMzMTQ4MDAwMDAwMDAxMEEzMzE0ODAwMDAwMDAwMENECi06MTAyODcwMDAwNjMyODAwMDAwMDAwMTAyMDYzMjIwMDgwMDAwMDBDODc1Ci06MTAyODgwMDAwNjMyMjAwMDAwMDAwMDAyMDQzMjhFQTAwMDEwMDNCNkMxCi06MTAyODkwMDAwNjMyM0VCMDAwMDAwMDA2MDYzMjNFRDgwMDAwMDAwMkJDCi06MTAyOEEwMDAwNjMyM0U4MDAwMDAwMDBBMDQzMjNFQTgwMDAyMDNDNjQxCi06MTAyOEIwMDAwNjMyM0UwMDAwMDAwMDIwMDYzMjUwMDAwMDAwMDQwMEY2Ci06MTAyOEMwMDAwNjMyNDAwMDAwMDAwMDA0MDQzMjc0QzAwMDAyMDNDODU1Ci06MTAyOEQwMDAwNjMyNDExMDAwMDAwMDAyMDYzMkQwMDAwMDAwMDAzMDM1Ci06MTAyOEUwMDAwNjMyREQ0MDAwMDAwMDQ0MDYzMkRBMDAwMDAwMDBEMDZECi06MTAyOEYwMDAwNjMyREVBMDAwMDAwMDAyMDYzMkUwMDAwMDAwMDgwMDAwCi06MTAyOTAwMDAwNjMyODQ1MDAwMDAwMTE4MDYzMjEwMDAwMDAwMDE4OEQxCi06MTAyOTEwMDAwNjMyNTAwMDAwMDAwMDIwMDYzMjUxMDAwMDAwMDAyMDY2Ci06MTAyOTIwMDAwNjMyNTIwMDAwMDAwMDIwMDYzMjUzMDAwMDAwMDAyMDUyCi06MTAyOTMwMDAwNjMyNTQwMDAwMDAwMDIwMDYzMjU1MDAwMDAwMDAyMDNFCi06MTAyOTQwMDAwNjMyNTYwMDAwMDAwMDIwMDYzMjU3MDAwMDAwMDAyMDJBCi06MTAyOTUwMDAwNjMyNTgwMDAwMDAwMDIwMDYzMjU5MDAwMDAwMDAyMDE2Ci06MTAyOTYwMDAwNjMyNUEwMDAwMDAwMDIwMDYzMjVCMDAwMDAwMDAyMDAyCi06MTAyOTcwMDAwNjMyNUMwMDAwMDAwMDIwMDYzMjVEMDAwMDAwMDAyMEVFCi06MTAyOTgwMDAwNjMyNUUwMDAwMDAwMDIwMDYzMjVGMDAwMDAwMDAyMERBCi06MTAyOTkwMDAwNjMyOERGMDAwMDAwMDAyMDQzMjhFMDAwMDAyMDNDQUVECi06MTAyOUEwMDAwNjMyOEUwODAwMDAwMDAyMDYzMkRFOTAwMDAwMDAwMkFGCi06MTAyOUIwMDAwNjMyMUM0MDAwMDAwMDM4MDYzMjg4QjAwMDAwMDExOEMyCi06MTAyOUMwMDAwNjMyMTYyMDAwMDAwMTg4MDYzMjUwODAwMDAwMDAyMEU4Ci06MTAyOUQwMDAwNjMyNTE4MDAwMDAwMDIwMDYzMjUyODAwMDAwMDAyMEE0Ci06MTAyOUUwMDAwNjMyNTM4MDAwMDAwMDIwMDYzMjU0ODAwMDAwMDAyMDkwCi06MTAyOUYwMDAwNjMyNTU4MDAwMDAwMDIwMDYzMjU2ODAwMDAwMDAyMDdDCi06MTAyQTAwMDAwNjMyNTc4MDAwMDAwMDIwMDYzMjU4ODAwMDAwMDAyMDY3Ci06MTAyQTEwMDAwNjMyNTk4MDAwMDAwMDIwMDYzMjVBODAwMDAwMDAyMDUzCi06MTAyQTIwMDAwNjMyNUI4MDAwMDAwMDIwMDYzMjVDODAwMDAwMDAyMDNGCi06MTAyQTMwMDAwNjMyNUQ4MDAwMDAwMDIwMDYzMjVFODAwMDAwMDAyMDJCCi06MTAyQTQwMDAwNjMyNUY4MDAwMDAwMDIwMDYzMjhERjgwMDAwMDAwMjkwCi06MTAyQTUwMDAwNDMyOEUxMDAwMDIwM0NDMDYzMjhFMTgwMDAwMDAwMkYxCi06MTAyQTYwMDAwNjMyREU5ODAwMDAwMDAyMDYzMjFEMjAwMDAwMDAzODA5Ci06MTAyQTcwMDAwMjMyOEQ1MDAwMDAwMDAwMDYzMjQwMTAwMDAwMDAwMkJCCi06MTAyQTgwMDAwMjMyOEQ1NDAwMDAwMDAwMDYzMjQwMjAwMDAwMDAwMjk3Ci06MTAyQTkwMDAwMjMyOEQ1ODAwMDAwMDAwMDYzMjQwMzAwMDAwMDAwMjczCi06MTAyQUEwMDAwMjMyOEQ1QzAwMDAwMDAwMDYzMjQwNDAwMDAwMDAwMjRGCi06MTAyQUIwMDAwMjMyOEQ2MDAwMDAwMDAwMDYzMjQwNTAwMDAwMDAwMjJCCi06MTAyQUMwMDAwMjMyOEQ2NDAwMDAwMDAwMDYzMjQwNjAwMDAwMDAwMjA3Ci06MTAyQUQwMDAwMjMyOEQ2ODAwMDAwMDAwMDYzMjQwNzAwMDAwMDAwMkUzCi06MTAyQUUwMDAwMjMyOEQ2QzAwMDAwMDAwMDYzMjQwODAwMDAwMDAwMkJGCi06MTAyQUYwMDAwNzIwMDQwMDAwOTEwMDAwMDgyMDA3ODAwMDEwMDNDRThBCi06MTAyQjAwMDAwNzI0MDAwMDJCMEIwMDAwMDcyNDgwMDAxNTA4MEFDM0NGCi06MTAyQjEwMDAwODI0QUExMDY5MjQwM0QwMDEyMDAwMDAwMDAwMDAwMDRFCi06MTAyQjIwMDAwMTIwMDAwNDAwMDAwMDAwMDEyMDAwMDgwMDAwMDAwMDU3Ci06MTAyQjMwMDAwMTIwMDAwQzAwMDAwMDAwMDEyMDAwMTAwMDAwMDAwMDM3Ci06MTAyQjQwMDAwMTIwMDAxNDAwMDAwMDAwMDIyMDAwMjAwMDAwMDAwMTBECi06MTAyQjUwMDAwMjIwMDAyNDAwMDAwMDAyMDIyMDAwMjgwMDAwMDAwM0UwCi06MTAyQjYwMDAwMjIwMDAyQzAwMDAwMDAwMDIyMDAwMzAwMDAwMDAwNEMxCi06MTAyQjcwMDAwMjIwMDAzNDAwMDAwMDAxMDIyMDAwMzgwMDAwMDAwMEE0Ci06MTAyQjgwMDAwMjIwMDAzQzAwMDAwMDAxMDIyMDAwNDAwMDAwMDAwNDgwCi06MTAyQjkwMDAwMjIwMDA0NDAwMDAwMDAwMDIyMDAwNDgwMDAwMDAwMTY0Ci06MTAyQkEwMDAwMjIwMDA0QzAwMDAwMDAzMDIyMDAwNTAwMDAwMDAwMDQyCi06MTAyQkIwMDAwMjIwMDA1NDAwMDAwMDAxMDIyMDAwNTgwMDAwMDAwNDIwCi06MTAyQkMwMDAwMjIwMDA1QzAwMDAwMDAwMDIyMDAwNjAwMDAwMDAwMTA0Ci06MTAyQkQwMDAwMjIwMDA2NDAwMDAwMDAzMDIyMDAwNjgwMDAwMDAwMEUyCi06MTAyQkUwMDAwMjIwMDA2QzAwMDAwMDAxMDIyMDAwNzAwMDAwMDAwNEMwCi06MTAyQkYwMDAwMjIwMDA3NDAwMDAwMDAwMDIyMDAwNzgwMDAwMDAwNEExCi06MTAyQzAwMDAwMjIwMDA3QzAwMDAwMDAzMDYyMDAwODAwMDAwMDAwMjdCCi06MTAyQzEwMDAwMjIwMDBBNDAwMDAzRkZGMDIyMDAwQTgwMDAwMDNGRkU0Ci06MTAyQzIwMDAwMjIwMDIyNDAwMDAwMDAwMDIyMDAyMzQwMDAwMDAwMDA0Ci06MTAyQzMwMDAwMjIwMDI0QzAwMDAwMDAwMDIyMDAyRTQwMDAwRkZGRjFFCi06MTAyQzQwMDAwNjIwMjAwMDAwMDAwODAwMDIyMzhCQzAwMDAwMDAwMUM1Ci06MTAyQzUwMDAwMjIzODAwMDAwMDAwMDEwMDIyMzgwNDAwMDAwMDAxMkM4Ci06MTAyQzYwMDAwMjIzODA4MDAwMDAwMDMwMDIyMzgwQzAwMDAwMDAwRTlDCi06MTAyQzcwMDAwQzIzODMwMDAwMDdBMTIwMEEyMzgzMDAwMDAwMDEzOEYxCi06MTAyQzgwMDAwQjIzODMwMDAwMDAxMzg4MEEyMzgzNDAwMDAwMDAwMDA4Ci06MTAyQzkwMDAwQzIzODM0MDAwMDAwMUY0MEIyMzgzNDAwMDAwMDAwNTU3Ci06MTAyQ0EwMDAwMjIzODM4MDAwMDdBMTIwMDIyMzgzQzAwMDAwMDFGNEQ3Ci06MTAyQ0IwMDAwMjIzMTQ4MDAwMDAwMDAxMEEyMzE0ODAwMDAwMDAwMDk5Ci06MTAyQ0MwMDAwNjIyMTAwMDAwMDAwMDQyMDYyMjIwMDgwMDAwMDBDODcyCi06MTAyQ0QwMDAwNjIyMjAwMDAwMDAwMDAyMDYyMkIwMDAwMDAwMDBDNjBDCi06MTAyQ0UwMDAwNDIyQjMxODAwMDUwM0QyMDYyMkIzMkMwMDAwMDAwQjA3Ci06MTAyQ0YwMDAwNDIyQjM1ODAwMDUwM0Q3MDYyMkIzNkMwMDAwMDAwQjcyCi06MTAyRDAwMDAwNDIyQjM5ODAwMDUwM0RDMDYyMkIzQUMwMDAwMDAwQkRDCi06MTAyRDEwMDAwNDIyQjNEODAwMDUwM0UxMDYyMkIzRUMwMDAwMDAwQjQ3Ci06MTAyRDIwMDAwNDIyQjQxODAwMDUwM0U2MDYyMkI0MkMwMDAwMDAwQkIwCi06MTAyRDMwMDAwNDIyQjQ1ODAwMDUwM0VCMDYyMkI0NkMwMDAwMDAwQjFCCi06MTAyRDQwMDAwNDIyQjQ5ODAwMDUwM0YwMDYyMkI0QUMwMDAwMDAwQjg2Ci06MTAyRDUwMDAwNDIyQjREODAwMDUwM0Y1MDYyMkI0RUMwMDAwMDAwQkYxCi06MTAyRDYwMDAwNDIyQjUxODAwMDUwM0ZBMDYyMkI1MkMwMDAwMDAwQjVBCi06MTAyRDcwMDAwNDIyQjU1ODAwMDUwM0ZGMDYyMkI1NkMwMDAwMDAwQkM1Ci06MTAyRDgwMDAwNDIyQjU5ODAwMDUwNDA0MDYyMkI1QUMwMDAwMDAwQjJGCi06MTAyRDkwMDAwNDIyQjVEODAwMDUwNDA5MDYyMkI1RUMwMDAwMDAwQjlBCi06MTAyREEwMDAwNDIyQjYxODAwMDUwNDBFMDYyMkI2MkMwMDAwMDAwQjAzCi06MTAyREIwMDAwNDIyQjY1ODAwMDUwNDEzMDYyMkI2NkMwMDAwMDAwQjZFCi06MTAyREMwMDAwNDIyQjY5ODAwMDUwNDE4MDYyMkI2QUMwMDAwMDAwQkQ5Ci06MTAyREQwMDAwNDIyQjZEODAwMDUwNDFEMDYyMkI2RUMwMDAwMDAwQjQ0Ci06MTAyREUwMDAwNDIyQjcxODAwMDUwNDIyMDYyMkI3MkMwMDAwMDAwQkFECi06MTAyREYwMDAwNDIyQjc1ODAwMDUwNDI3MDYyMkI3NkMwMDAwMDAwQjE4Ci06MTAyRTAwMDAwNDIyQjc5ODAwMDUwNDJDMDYyMkI3QUMwMDAwMDAwQjgyCi06MTAyRTEwMDAwNDIyQjdEODAwMDUwNDMxMDYyMkI3RUMwMDAwMDAwQkVECi06MTAyRTIwMDAwNDIyQjgxODAwMDUwNDM2MDYyMkI4MkMwMDAwMDAwQjU2Ci06MTAyRTMwMDAwNDIyQjg1ODAwMDUwNDNCMDYyMkI4NkMwMDAwMDAwQkMxCi06MTAyRTQwMDAwNDIyQjg5ODAwMDUwNDQwMDYyMkI4QUMwMDAwMDAwQjJDCi06MTAyRTUwMDAwNDIyQjhEODAwMDUwNDQ1MDYyMkI4RUMwMDAwMDAwQjk3Ci06MTAyRTYwMDAwNDIyQjkxODAwMDUwNDRBMDYyMkI5MkMwMDAwMDAwQjAwCi06MTAyRTcwMDAwNDIyQjk1ODAwMDUwNDRGMDYyMkI5NkMwMDAwMDAwQjZCCi06MTAyRTgwMDAwNDIyQjk5ODAwMDUwNDU0MDYyMkI5QUMwMDAwMDAwQkQ2Ci06MTAyRTkwMDAwNDIyQjlEODAwMDUwNDU5MDYyMkI5RUMwMDAwMDAwQjQxCi06MTAyRUEwMDAwNDIyQkExODAwMDUwNDVFMDYyMkJBMkMwMDAwMDAwQkFBCi06MTAyRUIwMDAwNDIyQkE1ODAwMDUwNDYzMDYyMkJBNkMwMDAwMDAwQjE1Ci06MTAyRUMwMDAwNDIyQkE5ODAwMDUwNDY4MDYyMkJBQUMwMDAwMDAwQjgwCi06MTAyRUQwMDAwNDIyQkFEODAwMDUwNDZEMDYyMkJBRUMwMDAwMDAwNUYxCi06MTAyRUUwMDAwNjIyQkIwMDAwMDAwMDUzMDQyMkJDNEMwMDAxMDQ3MjA3Ci06MTAyRUYwMDAwNjIyQkM1MDAwMDAwMDAzMDQyMkJDNUMwMDAxMDQ3M0U1Ci06MTAyRjAwMDAwNjIyQkM2MDAwMDAwMDAzMDQyMkJDNkMwMDAxMDQ3NEIzCi06MTAyRjEwMDAwNjIyQkM3MDAwMDAwMDAzMDQyMkJDN0MwMDAxMDQ3NTgyCi06MTAyRjIwMDAwNjIyQkM4MDAwMDAwMDAzMDQyMkJDOEMwMDAxMDQ3NjUxCi06MTAyRjMwMDAwNjIyQkM5MDAwMDAwMDAzMDQyMkJDOUMwMDAxMDQ3NzIwCi06MTAyRjQwMDAwNjIyQkNBMDAwMDAwMDAzMDQyMkJDQUMwMDAxMDQ3OEVGCi06MTAyRjUwMDAwNjIyQkNCMDAwMDAwMDAzMDQyMkJDQkMwMDAxMDQ3OUJFCi06MTAyRjYwMDAwNjIyODgwMDAwMDAwMTAwMDYyMjgwMDAwMDAwMDIwMDA2Ci06MTAyRjcwMDAwNDIyMTI3MDAwMTAwNDdBMDYyMjMwMDAwMDAwMDBDMDAzCi06MTAyRjgwMDAwNjIyNjcwMDAwMDAwMTAwMDYyMjkwMDAwMDAwMDQwMEY1Ci06MTAyRjkwMDAwNDIyNkIwODAwMjAwNDhBMDIyMjEyQzBGRkZGRkZGRkY4Ci06MTAyRkEwMDAwNjIyMTFFODAwMDAwMDAyMDYyMjEyQzgwMDAwMDAwOUYzCi06MTAyRkIwMDAwNjIyMTJFQzAwMDAwMDA5MDYyMjhDMDAwMDAwMDAwODI2Ci06MTAyRkMwMDAwMjIyMTE0ODAwMDAwMDAwMDYyMjEzMjAwMDAwMDAwNjIzCi06MTAyRkQwMDAwNjIyMzMwMDAwMDAwMDAyMDYyMjYwNDAwMDAwMDAzMDlDCi06MTAyRkUwMDAwNjIyOEMyMDAwMDAwMDA4MDIyMjExNEMwMDAwMDAwMDg0Ci06MTAyRkYwMDAwNjIyMTMzODAwMDAwMDA2MDYyMjMzMDgwMDAwMDAwMkYzCi06MTAzMDAwMDAwNjIyNjEwMDAwMDAwMDMwMDYyMjhDNDAwMDAwMDAwODBCCi06MTAzMDEwMDAwMjIyMTE1MDAwMDAwMDAwMDYyMjEzNTAwMDAwMDAwNjlBCi06MTAzMDIwMDAwNjIyMzMxMDAwMDAwMDAyMDYyMjYxQzAwMDAwMDAzMEJBCi06MTAzMDMwMDAwNjIyOEM2MDAwMDAwMDA4MDIyMjExNTQwMDAwMDAwMEVCCi06MTAzMDQwMDAwNjIyMTM2ODAwMDAwMDA2MDYyMjMzMTgwMDAwMDAwMjYyCi06MTAzMDUwMDAwNjIyNjI4MDAwMDAwMDMwMDYyMjhDODAwMDAwMDAwOEZBCi06MTAzMDYwMDAwMjIyMTE1ODAwMDAwMDAwMDYyMjEzODAwMDAwMDAwNjEyCi06MTAzMDcwMDAwNjIyMzMyMDAwMDAwMDAyMDYyMjYzNDAwMDAwMDAzMEQ4Ci06MTAzMDgwMDAwNjIyOENBMDAwMDAwMDA4MDIyMjExNUMwMDAwMDAwMDUzCi06MTAzMDkwMDAwNjIyMTM5ODAwMDAwMDA2MDYyMjMzMjgwMDAwMDAwMkQyCi06MTAzMEEwMDAwNjIyNjQwMDAwMDAwMDMwMDYyMjhDQzAwMDAwMDAwOEU4Ci06MTAzMEIwMDAwMjIyMTE2MDAwMDAwMDAwMDYyMjEzQjAwMDAwMDAwNjhBCi06MTAzMEMwMDAwNjIyMzMzMDAwMDAwMDAyMDYyMjY0QzAwMDAwMDAzMEY3Ci06MTAzMEQwMDAwNjIyOENFMDAwMDAwMDA4MDIyMjExNjQwMDAwMDAwMEJCCi06MTAzMEUwMDAwNjIyMTNDODAwMDAwMDA2MDYyMjMzMzgwMDAwMDAwMjQyCi06MTAzMEYwMDAwNjIyNjU4MDAwMDAwMDMwMDIxNjEwMDAwMDAwMDAyODQzCi06MTAzMTAwMDAwMjE3MDAwODAwMDAwMDAyMDIxNzAwMkMwMDAwMDAwMzU0Ci06MTAzMTEwMDAwMjE3MDAzQzAwMDAwMDA0MDIxNzAwNDgwMDAwMDAwMkYzCi06MTAzMTIwMDAwMjE3MDA0QzAwMDAwMDkwMDIxNzAwNTAwMDAwMDA5MEIxCi06MTAzMTMwMDAwMjE3MDA1NDAwODAwMDkwMDIxNzAwNTgwODEwMDAwMDg5Ci06MTAzMTQwMDAwMjE3MDA2MDAwMDAwMDhBMDIxNzAwNjQwMDAwMDA4MDdGCi06MTAzMTUwMDAwMjE3MDA2ODAwMDAwMDgxMDIxNzAwNkMwMDAwMDA4MDY4Ci06MTAzMTYwMDAwMjE3MDA3MDAwMDAwMDA2MDIxNzAwNzgwMDAwMDdEMDY4Ci06MTAzMTcwMDAwMjE3MDA3QzAwMDAwNzZDMDIxNzAwMzgwMDdDMTAwNDY2Ci06MTAzMTgwMDAwMjE3MDAwNDAwMDAwMDBGMDYxNjQwMjQwMDAwMDAwMjkxCi06MTAzMTkwMDAwMjE2NDA3MDAwMDAwMDFDMDIxNjQyMDgwMDAwMDAwMUU4Ci06MTAzMUEwMDAwMjE2NDIxMDAwMDAwMDAxMDIxNjQyMjAwMDAwMDAwMTM5Ci06MTAzMUIwMDAwMjE2NDIyODAwMDAwMDAxMDIxNjQyMzAwMDAwMDAwMTAxCi06MTAzMUMwMDAwMjE2NDIzODAwMDAwMDAxMDIxNjQyNjAwMDAwMDAwMkIwCi06MTAzMUQwMDAwQzE2NDAxQzAwMDNEMDkwMEExNjQwMUMwMDAwMDA5Q0Y2Ci06MTAzMUUwMDAwQjE2NDAxQzAwMDAwOUM0MDIxNjQwMzAwMDAwMDAwODA1Ci06MTAzMUYwMDAwMjE2NDAzNDAwMDAwMDBDMDIxNjQwMzgwMDAwMDAxMDk3Ci06MTAzMjAwMDAwMjE2NDA0NDAwMDAwMDIwMDIxNjQwMDAwMDAwMDAwMUE5Ci06MTAzMjEwMDAwMjE2NDBEODAwMDAwMDAxMDIxNjQwMDgwMDAwMDAwMTFDCi06MTAzMjIwMDAwMjE2NDAwQzAwMDAwMDAxMDIxNjQwMTAwMDAwMDAwMUQwCi06MTAzMjMwMDAwMjE2NDI0MDAwMDAwMDAwMDIxNjQyNDgwMDAwMDAwMDUyCi06MTAzMjQwMDAwNjE2NDI3MDAwMDAwMDAyMDIxNjQyNTAwMDAwMDAwMDA0Ci06MTAzMjUwMDAwMjE2NDI1ODAwMDAwMDAwMDYxNjQyODAwMDAwMDAwMkRDCi06MTAzMjYwMDAwMjE2NjAwODAwMDAxMjI0MDIxNjYwMEMwMDAwMTIxMDAyCi06MTAzMjcwMDAwMjE2NjAxMDAwMDAxMjE0MDIxNjYwMUMwMDAwRkZGRjBFCi06MTAzMjgwMDAwMjE2NjAyMDAwMDBGRkZGMDIxNjYwMjQwMDAwRkZGRjBFCi06MTAzMjkwMDAwMjE2NjAyODAwMDBGRkZGMDIxNjYwMzgwMDAwMDAyMEMwCi06MTAzMkEwMDAwMjE2NjAzQzAwMDAwMDIwMDYxNjYwNDAwMDAwMDAwMjhDCi06MTAzMkIwMDAwMjE2NjA0ODAwMDAwMDIzMDIxNjYwNEMwMDAwMDAyNDQzCi06MTAzMkMwMDAwMjE2NjA1MDAwMDAwMDI1MDIxNjYwNTQwMDAwMDAyNjFGCi06MTAzMkQwMDAwMjE2NjA1ODAwMDAwMDI3MDIxNjYwNUMwMDAwMDAyOUZBCi06MTAzMkUwMDAwMjE2NjA2MDAwMDAwMDJBMDIxNjYwNjQwMDAwMDAyQkQ1Ci06MTAzMkYwMDAwMjE2NjA2ODAwMDAwMDJDMDIxNjYwNkMwMDAwMDAyREIxCi06MTAzMzAwMDAwMjE2NjA3MDAwMDAwMEVDMDIxNjYwNzQwMDAwMDAxMUVDCi06MTAzMzEwMDAwMjE2NjA3ODAwMDAwMDEyMDYxNjYwN0MwMDAwMDAwRkE0Ci06MTAzMzIwMDAwMjE2NjBCODAwMDAwMDAxMDIxNjYwQkMwMDAwMDAwMTM3Ci06MTAzMzMwMDAwNjE2NjBDMDAwMDAwMDBDMDIxNjYwRjAwMDAwMDAwMURDCi06MTAzMzQwMDAwNjE2NjBGNDAwMDAwMDMxMDIxNjYxQjgwMDAwMDAwMUFBCi06MTAzMzUwMDAwNjE2NjFCQzAwMDAwMDBEMDIxNjYxRjAwMDAwMDAwMUJECi06MTAzMzYwMDAwNjE2NjFGNDAwMDAwMDExMDIxNjYyMzgwN0ZGRkZGRjI1Ci06MTAzMzcwMDAwMjE2NjIzQzAwMDAwMDNGMDIxNjYyNDAwN0ZGRkZGRjlBCi06MTAzMzgwMDAwMjE2NjI0NDAwMDAwMDBGMDExNjYyNDgwMDAwMDAwMEFGCi06MTAzMzkwMDAwMTE2NjI0QzAwMDAwMDAwMDExNjYyNTAwMDAwMDAwMDlGCi06MTAzM0EwMDAwMTE2NjI1NDAwMDAwMDAwMDExNjYyNTgwMDAwMDAwMDdGCi06MTAzM0IwMDAwMTE2NjI1QzAwMDAwMDAwMDExNjYyNjAwMDAwMDAwMDVGCi06MTAzM0MwMDAwMTE2NjI2NDAwMDAwMDAwMDExNjYyNjgwMDAwMDAwMDNGCi06MTAzM0QwMDAwMTE2NjI2QzAwMDAwMDAwMDExNjYyNzAwMDAwMDAwMDFGCi06MTAzM0UwMDAwMTE2NjI3NDAwMDAwMDAwMDExNjYyNzgwMDAwMDAwMEZGCi06MTAzM0YwMDAwMTE2NjI3QzAwMDAwMDAwMEMxNjYwMDAwMDAwMDNFODZCCi06MTAzNDAwMDAwQTE2NjAwMDAwMDAwMDAxMEIxNjYwMDAwMDAwMDAwQUIwCi06MTAzNDEwMDAwMjE2ODA0MDAwMDAwMDA2MDIxNjgwNDQwMDAwMDAwNUVECi06MTAzNDIwMDAwMjE2ODA0ODAwMDAwMDBBMDIxNjgwNEMwMDAwMDAwNUM5Ci06MTAzNDMwMDAwMjE2ODA1NDAwMDAwMDAyMDIxNjgwQ0MwMDAwMDAwNDM2Ci06MTAzNDQwMDAwMjE2ODBEMDAwMDAwMDA0MDIxNjgwRDQwMDAwMDAwNEEwCi06MTAzNDUwMDAwMjE2ODBEODAwMDAwMDA0MDIxNjgwREMwMDAwMDAwNDgwCi06MTAzNDYwMDAwMjE2ODBFMDAwMDAwMDA0MDIxNjgwRTQwMDAwMDAwNDYwCi06MTAzNDcwMDAwMjE2ODBFODAwMDAwMDA0MDIxNjg4MDQwMDAwMDAwNDIwCi06MTAzNDgwMDAwMjE2ODAzMDAwMDAwMDdDMDIxNjgwMzQwMDAwMDAzREVGCi06MTAzNDkwMDAwMjE2ODAzODAwMDAwMDNGMDIxNjgwM0MwMDAwMDA5Q0FECi06MTAzNEEwMDAwMjE2ODBGMDAwMDAwMDA3MDYxNjgwRjQwMDAwMDAwNUY4Ci06MTAzNEIwMDAwMjE2ODgwQzAxMDEwMTAxMDIxNjgxMDgwMDAwMDAwMEJCCi06MTAzNEMwMDAwMjE2ODEwQzAwMDAwMDA0MDIxNjgxMTAwMDAwMDAwNEE2Ci06MTAzNEQwMDAwMjE2ODExNDAwMDAwMDAyMDIxNjg4MTAwODAxMjAwNDYwCi06MTAzNEUwMDAwMjE2ODExODAwMDAwMDA1MDIxNjgxMUMwMDAwMDAwNTZDCi06MTAzNEYwMDAwMjE2ODEyMDAwMDAwMDA1MDIxNjgxMjQwMDAwMDAwNTRDCi06MTAzNTAwMDAwMjE2ODgyQzIwMDgxMDAxMDIxNjgxMjgwMDAwMDAwOEVECi06MTAzNTEwMDAwMjE2ODEyQzAwMDAwMDA2MDIxNjgxMzAwMDAwMDAwNzEwCi06MTAzNTIwMDAwMjE2ODEzNDAwMDAwMDAwMDIxNjg4MzAwMTAxMDEyMERCCi06MTAzNTMwMDAwNjE2ODEzODAwMDAwMDA0MDIxNjg4MzQwMTAxMDEwMURBCi06MTAzNTQwMDAwMjE2ODE0ODAwMDAwMDAwMDIxNjgxNEMwMDAwMDAwNEIxCi06MTAzNTUwMDAwMjE2ODE1MDAwMDAwMDA0MDIxNjgxNTQwMDAwMDAwMjhGCi06MTAzNTYwMDAwMjE2ODgzODA4MDEyMDA0MDIxNjgxNTgwMDAwMDAwNTYwCi06MTAzNTcwMDAwMjE2ODE1QzAwMDAwMDA1MDIxNjgxNjAwMDAwMDAwNTUzCi06MTAzNTgwMDAwMjE2ODE2NDAwMDAwMDA1MDIxNjg4M0MyMDA4MTAwMTI0Ci06MTAzNTkwMDAwMjE2ODE2ODAwMDAwMDA4MDIxNjgxNkMwMDAwMDAwNjE3Ci06MTAzNUEwMDAwMjE2ODE3MDAwMDAwMDA3MDIxNjgxNzQwMDAwMDAwMUZECi06MTAzNUIwMDAwMjE2ODg0MDAxMDEwMTIwMDIxNjgxNzgwMDAwMDAwMUY2Ci06MTAzNUMwMDAwMjE2ODE3QzAwMDAwMDAxMDIxNjgxODAwMDAwMDAwMUNCCi06MTAzNUQwMDAwMjE2ODE4NDAwMDAwMDAxMDIxNjg4NDQwMTAxMDEwMUU1Ci06MTAzNUUwMDAwMjE2ODE4ODAwMDAwMDAxMDIxNjgxOEMwMDAwMDAwNDkwCi06MTAzNUYwMDAwMjE2ODE5MDAwMDAwMDA0MDIxNjgxOTQwMDAwMDAwMjZGCi06MTAzNjAwMDAwMjE2ODg0ODA4MDEyMDA0MDIxNjgxOTgwMDAwMDAwNTZGCi06MTAzNjEwMDAwMjE2ODE5QzAwMDAwMDA1MDIxNjgxQTAwMDAwMDAwNTMyCi06MTAzNjIwMDAwMjE2ODFBNDAwMDAwMDA1MDIxNjg4MTQyMDA4MTAwMTZCCi06MTAzNjMwMDAwMjE2ODFBODAwMDAwMDA4MDIxNjgxQUMwMDAwMDAwNkY2Ci06MTAzNjQwMDAwMjE2ODFCMDAwMDAwMDA3MDIxNjgxQjQwMDAwMDAwMURDCi06MTAzNjUwMDAwMjE2ODgxODAxMDEwMTIwMDIxNjgxQjgwMDAwMDAwMTNECi06MTAzNjYwMDAwMjE2ODFCQzAwMDAwMDAxMDIxNjgxQzAwMDAwMDAwMUFBCi06MTAzNjcwMDAwMjE2ODFDNDAwMDAwMDAxMDIxNjg4MUMwMTAxMDEwMTJDCi06MTAzNjgwMDAwMjE2ODFDODAwMDAwMDAxMDIxNjgxQ0MwMDAwMDAwNDZGCi06MTAzNjkwMDAwMjE2ODFEMDAwMDAwMDA0MDIxNjgxRDQwMDAwMDAwMjRFCi06MTAzNkEwMDAwMjE2ODgyMDA4MDEyMDA0MDIxNjgxRDgwMDAwMDAwNUI3Ci06MTAzNkIwMDAwMjE2ODFEQzAwMDAwMDA1MDIxNjgxRTAwMDAwMDAwNTEyCi06MTAzNkMwMDAwMjE2ODFFNDAwMDAwMDA1MDIxNjg4MjQyMDA4MTAwMTdCCi06MTAzNkQwMDAwMjE2ODFFODAwMDAwMDA4MDIxNjgxRUMwMDAwMDAwNkQ2Ci06MTAzNkUwMDAwMjE2ODFGMDAwMDAwMDA3MDIxNkU0MEMwMDAwMDAwMDQyCi06MTAzNkYwMDAwMjE2ODgyODAxMDEwMTIwMDYxNkU0MTAwMDAwMDAwNENCCi06MTAzNzAwMDAwMjE2RTAwMDAxMDEwMTAxMDIxNkU0MjAwMDAwMDAwMEExCi06MTAzNzEwMDAwMjE2RTQyNDAwMDAwMDA0MDIxNkU0MjgwMDAwMDAwNDVECi06MTAzNzIwMDAwMjE2RTQyQzAwMDAwMDAyMDIxNkUwMDQwODAxMjAwNDQ2Ci06MTAzNzMwMDAwMjE2RTQzMDAwMDAwMDA1MDIxNkU0MzQwMDAwMDAwNTIzCi06MTAzNzQwMDAwMjE2RTQzODAwMDAwMDA1MDIxNkU0M0MwMDAwMDAwNTAzCi06MTAzNzUwMDAwMjE2RTAwODIwMDgxMDAxMDIxNkU0NDAwMDAwMDAwOEVDCi06MTAzNzYwMDAwMjE2RTQ0NDAwMDAwMDA2MDIxNkU0NDgwMDAwMDAwN0M4Ci06MTAzNzcwMDAwMjE2RTQ0QzAwMDAwMDAwMDIxNkUwMEMwMTAxMDEyMERBCi06MTAzNzgwMDAwNjE2RTQ1MDAwMDAwMDA0MDIxNkUwMTAwMTAxMDEwMUQ5Ci06MTAzNzkwMDAwMjE2RTQ2MDAwMDAwMDAwMDIxNkU0NjQwMDAwMDAwNDY5Ci06MTAzN0EwMDAwMjE2RTQ2ODAwMDAwMDA0MDIxNkU0NkMwMDAwMDAwMjQ3Ci06MTAzN0IwMDAwMjE2RTAxNDA4MDEyMDA0MDIxNkU0NzAwMDAwMDAwNTVGCi06MTAzN0MwMDAwMjE2RTQ3NDAwMDAwMDA1MDIxNkU0NzgwMDAwMDAwNTBCCi06MTAzN0QwMDAwMjE2RTQ3QzAwMDAwMDA1MDIxNkUwMTgyMDA4MTAwMTIzCi06MTAzN0UwMDAwMjE2RTQ4MDAwMDAwMDA4MDIxNkU0ODQwMDAwMDAwNkNGCi06MTAzN0YwMDAwMjE2RTQ4ODAwMDAwMDA3MDIxNkU0OEMwMDAwMDAwMUI1Ci06MTAzODAwMDAwMjE2RTAxQzAxMDEwMTIwMDIxNkU0OTAwMDAwMDAwMUY0Ci06MTAzODEwMDAwMjE2RTQ5NDAwMDAwMDAxMDIxNkU0OTgwMDAwMDAwMTgyCi06MTAzODIwMDAwMjE2RTQ5QzAwMDAwMDAxMDIxNkUwMjAwMTAxMDEwMUUzCi06MTAzODMwMDAwMjE2RTRBMDAwMDAwMDAxMDIxNkU0QTQwMDAwMDAwNDQ3Ci06MTAzODQwMDAwMjE2RTRBODAwMDAwMDA0MDIxNkU0QUMwMDAwMDAwMjI2Ci06MTAzODUwMDAwMjE2RTAyNDA4MDEyMDA0MDIxNkU0QjAwMDAwMDAwNTZFCi06MTAzODYwMDAwMjE2RTRCNDAwMDAwMDA1MDIxNkU0QjgwMDAwMDAwNUVBCi06MTAzODcwMDAwMjE2RTRCQzAwMDAwMDA1MDIxNkUwMjgyMDA4MTAwMTMyCi06MTAzODgwMDAwMjE2RTRDMDAwMDAwMDA4MDIxNkU0QzQwMDAwMDAwNkFFCi06MTAzODkwMDAwMjE2RTRDODAwMDAwMDA3MDIxNkU0Q0MwMDAwMDAwMTk0Ci06MTAzOEEwMDAwMjE2RTAyQzAxMDEwMTIwMDIxNkU0RDAwMDAwMDAwMTA0Ci06MTAzOEIwMDAwMjE2RTRENDAwMDAwMDAxMDIxNkU0RDgwMDAwMDAwMTYyCi06MTAzOEMwMDAwMjE2RTREQzAwMDAwMDAxMDIxNkUwMzAwMTAxMDEwMUYzCi06MTAzOEQwMDAwMjE2RTRFMDAwMDAwMDAxMDIxNkU0RTQwMDAwMDAwNDI3Ci06MTAzOEUwMDAwMjE2RTRFODAwMDAwMDA0MDIxNkU0RUMwMDAwMDAwMjA2Ci06MTAzOEYwMDAwMjE2RTAzNDA4MDEyMDA0MDIxNkU0RjAwMDAwMDAwNTdFCi06MTAzOTAwMDAwMjE2RTRGNDAwMDAwMDA1MDIxNkU0RjgwMDAwMDAwNUM5Ci06MTAzOTEwMDAwMjE2RTRGQzAwMDAwMDA1MDIxNkUwMzgyMDA4MTAwMTQxCi06MTAzOTIwMDAwMjE2RTUwMDAwMDAwMDA4MDIxNkU1MDQwMDAwMDAwNjhCCi06MTAzOTMwMDAwMjE2RTUwODAwMDAwMDA3MDIxNkUwM0MwMTAxMDEyMDI0Ci06MTAzOTQwMDAwMjE2ODI0MDAwM0YwMDNGMDIxNjgyNDQwMDAwMDAwMDQxCi06MTAzOTUwMDAwMjE2RTUyNDAwM0YwMDNGMDIxNkU1MjgwMDAwMDAwMEEzCi06MTAzOTYwMDAwMjE2ODI0ODAwMDAwMDAwMDIxNjgyNEMwMDNGMDAzRjExCi06MTAzOTcwMDAwMjE2RTUyQzAwMDAwMDAwMDIxNkU1MzAwMDNGMDAzRjczCi06MTAzOTgwMDAwMjE2ODI1MDAxMDAwMTAwMDIxNjgyNTQwMTAwMDEwMDVCCi06MTAzOTkwMDAwMjE2RTUzNDAxMDAwMTAwMDIxNkU1MzgwMTAwMDEwMEJECi06MTAzOUEwMDAwNjE2ODI1ODAwMDAwMDAyMDIxNkU1M0MwMDAwMDAwMEU2Ci06MTAzOUIwMDAwMjE2RTU0MDAwMDAwMDAwMDIxNjgyNjAwMEMwMDBDMDUwCi06MTAzOUMwMDAwMjE2ODI2NDAwQzAwMEMwMDIxNkU1NDQwMEMwMDBDMEI4Ci06MTAzOUQwMDAwMjE2RTU0ODAwQzAwMEMwMDIxNjgyNjgxRTAwMUUwMEU0Ci06MTAzOUUwMDAwMjE2ODI2QzFFMDAxRTAwMDIxNkU1NEMxRTAwMUUwMDEwCi06MTAzOUYwMDAwMjE2RTU1MDFFMDAxRTAwMDIxNjgyNzA0MDAwNDAwMEI0Ci06MTAzQTAwMDAwMjE2ODI3NDQwMDA0MDAwMDIxNkU1NTQ0MDAwNDAwMDU3Ci06MTAzQTEwMDAwMjE2RTU1ODQwMDA0MDAwMDIxNjgyNzg4MDAwODAwMEJGCi06MTAzQTIwMDAwMjE2ODI3QzgwMDA4MDAwMDIxNkU1NUM4MDAwODAwMDI3Ci06MTAzQTMwMDAwMjE2RTU2MDgwMDA4MDAwMDIxNjgyODAyMDAwMjAwMENGCi06MTAzQTQwMDAwMjE2ODI4NDIwMDAyMDAwMDIxNkU1NjQyMDAwMjAwMDc3Ci06MTAzQTUwMDAwMjE2RTU2ODIwMDAyMDAwMDYxNjgyODgwMDAwMDAwMjk5Ci06MTAzQTYwMDAwMjE2RTU2QzAwMDAwMDAwMDIxNkU1NzAwMDAwMDAwMDgwCi06MTAzQTcwMDAwMjE2ODI5MDAwMDAwMDAwMDIxNjgyOTQwMDAwMDAwMEVFCi06MTAzQTgwMDAwMjE2RTU3NDAwMDAwMDAwMDIxNkU1NzgwMDAwMDAwMDUwCi06MTAzQTkwMDAwMjE2ODI5ODAwMDAwMDAwMDIxNjgyOUMwMDAwMDAwMEJFCi06MTAzQUEwMDAwMjE2RTU3QzAwMDAwMDAwMDIxNkU1ODAwMDAwMDAwMDIwCi06MTAzQUIwMDAwMjE2ODJBMDAwMDAwMDAwMDIxNjgyQTQwMDAwMDAwMThECi06MTAzQUMwMDAwNjE2ODJBODAwMDAwMDBBMDIxNjgxRjQwMDAwMEMwODA1Ci06MTAzQUQwMDAwMjE2ODFGODAwMDAwMDQwMDIxNjgxRkMwMDAwMDEwMDdGCi06MTAzQUUwMDAwMjE2ODIwMDAwMDAwMDIwMDIxNjgyMDQwMDAwMDAxNzY3Ci06MTAzQUYwMDAwMjE2ODIwODAwMDAwMDgwMDIxNjgyMEMwMDAwMDIwMEZDCi06MTAzQjAwMDAwMjE2ODIxMDAwMDAwMDAwMDIxNjgyMTgwMUZGMDFGRjU5Ci06MTAzQjEwMDAwMjE2ODIxNDAxRkYwMUZGMDIxNkU1MTAwMUZGMDFGRkVBCi06MTAzQjIwMDAwMjE2RTUwQzAxRkYwMUZGMDIxNjgyM0MwMDAwMDAxM0EzCi06MTAzQjMwMDAwMjE2ODA5MDAwMDAwMTNGMDIxNjgwNjAwMDAwMDE0MEU0Ci06MTAzQjQwMDAwMjE2ODA2NDAwMDAwMTQwMDYxNjgwNjgwMDAwMDAwMjMyCi06MTAzQjUwMDAwMjE2ODA3MDAwMDAwMEMwMDYxNjgwNzQwMDAwMDAwNzg2Ci06MTAzQjYwMDAwMjE2ODA5QzAwMDAwMDQ4MDIxNjgwQTAwMDAwMDA0ODU5Ci06MTAzQjcwMDAwNjE2ODBBNDAwMDAwMDAyMDIxNjgwQUMwMDAwMDA0ODc3Ci06MTAzQjgwMDAwNjE2ODBCMDAwMDAwMDA3MDIxNjgyMzgwMDAwODAwMDkwCi06MTAzQjkwMDAwMjE2ODIzNDAwMDAyNUU0MDIxNjgwOTQwMDAwN0ZGRkE0Ci06MTAzQkEwMDAwMjE2ODIyMDAwMEYwMDBGMDIxNjgyMUMwMDBGMDAwRjY5Ci06MTAzQkIwMDAwMjE2RTUxODAwMEYwMDBGMDIxNkU1MTQwMDBGMDAwRkEzCi06MTAzQkMwMDAwMjE2ODIyODAwMDAwMDAwMDIxNjgyMjRGRkZGRkZGRjc5Ci06MTAzQkQwMDAwMjE2RTUyMDAwMDAwMDAwMDIxNkU1MUNGRkZGRkZGRkIzCi06MTAzQkUwMDAwMjE2RTZCQzAwMDAwMDAwMDIxNkU2QzAwMDAwMDAwMjVCCi06MTAzQkYwMDAwMjE2RTZDNDAwMDAwMDAxMDIxNkU2QzgwMDAwMDAwMzM5Ci06MTAzQzAwMDAwMjE2RTZDQzAwMDAwMDA0MDIxNkU2RDAwMDAwMDAwNjEyCi06MTAzQzEwMDAwMjE2RTZENDAwMDAwMDA1MDIxNkU2RDgwMDAwMDAwN0YwCi06MTAzQzIwMDAwMjE2ODBFQzAwMDAwMEZGMDIxNDAwMDAwMDAwMDAwMUZBCi06MTAzQzMwMDAwMjE0MDAwQzAwMDAwMDAxMDIxNDAwNDAwMDAwMDAwMTBBCi06MTAzQzQwMDAwMjE0MDA0NDAwMDA3RkZGMDIxNDAwMEMwMDAwMDAwMDdBCi06MTAzQzUwMDAwMjE0MDAwMDAwMDAwMDAwMDIxNDAwNkMwMDAwMDAwMENDCi06MTAzQzYwMDAwMjE0MDAwNDAwMDAwMDAxMDIxNDAwMzAwMDAwMDAwMUYyCi06MTAzQzcwMDAwMjE0MDAwNDAwMDAwMDAwMDIxNDAwNUMwMDAwMDAwMEI4Ci06MTAzQzgwMDAwMjE0MDAwODAwMDAwMDAxMDIxNDAwMzQwMDAwMDAwMUNBCi06MTAzQzkwMDAwMjE0MDAwODAwMDAwMDAwMDIxNDAwNjAwMDAwMDAwMDkwCi06MTAzQ0EwMDAwNjAyODAwMDAwMDAyMDAwMDIwMjAwNTgwMDAwMDAzMkRFCi06MTAzQ0IwMDAwMjAyMDBBMDAzMTUwMDIwMDIwMjAwQTQwMzE1MDAyMDQ4Ci06MTAzQ0MwMDAwMjAyMDBBODAxMDAwMDMwMDIwMjAwQUMwODEwMDAwMDRGCi06MTAzQ0QwMDAwMjAyMDBCMDAwMDAwMDMzMDIwMjAwQjQwMDAwMDAzMDE1Ci06MTAzQ0UwMDAwMjAyMDBCODAwMDAwMDMxMDIwMjAwQkMwMDAwMDAwMzI0Ci06MTAzQ0YwMDAwMjAyMDBDMDAwMDAwMDA2MDIwMjAwQzQwMDAwMDAwMzJGCi06MTAzRDAwMDAwMjAyMDBDODAwMDAwMDAzMDIwMjAwQ0MwMDAwMDAwMjEyCi06MTAzRDEwMDAwMjAyMDBEMDAwMDAwMDAwMDIwMjAwRDQwMDAwMDAwMkY1Ci06MTAzRDIwMDAwMjAyMDBEQzAwMDAwMDAwMDIwMjAwRTAwMDAwMDAwNkM5Ci06MTAzRDMwMDAwMjAyMDBFNDAwMDAwMDA0MDIwMjAwRTgwMDAwMDAwMkE5Ci06MTAzRDQwMDAwMjAyMDBFQzAwMDAwMDAyMDIwMjAwRjAwMDAwMDAwMThDCi06MTAzRDUwMDAwMjAyMDBGQzAwMDAwMDA2MDIwMjAxMjAwMDAwMDAwMDM4Ci06MTAzRDYwMDAwMjAyMDEzNDAwMDAwMDAyMDIwMjAxQjAwMDAwMDAwMTYyCi06MTAzRDcwMDAwMjAyMDIwQzAwMDAwMDAxMDIwMjAyMTQwMDAwMDAwMTE1Ci06MTAzRDgwMDAwMjAyMDIxODAwMDAwMDAyMDIwMjA0MDQwMDAwMDAwMTA2Ci06MTAzRDkwMDAwMjAyMDQwQzAwMDAwMDQwMDIwMjA0MTAwMDAwMDA0MDc3Ci06MTAzREEwMDAwMjAyMDQxQzAwMDAwMDA0MDIwMjA0MjAwMDAwMDAyMEEzCi06MTAzREIwMDAwMjAyMDQyNDAwMDAwMDAyMDIwMjA0MjgwMDAwMDAyMDg1Ci06MTAzREMwMDAwNjAyMDUwMDAwMDAwMDEyMDQwMjA0ODAwMDIwMDRBQTdDCi06MTAzREQwMDAwMjAyMDA2MDAwMDAwMDBGMDIwMjAwNjQwMDAwMDAwNzAxCi06MTAzREUwMDAwMjAyMDA2ODAwMDAwMDAwMDIwMjAwNkMwMDAwMDAwRUU5Ci06MTAzREYwMDAwMjAyMDA3MDAwMDAwMDBFMDYwMjAwNzQwMDAwMDAwM0MyCi06MTAzRTAwMDAwMjAyMDBGNDAwMDAwMDA0MDIwMjAwMDQwMDAwMDAwMUFECi06MTAzRTEwMDAwMjAyMDAwODAwMDAwMDAxMDIwMjAwMEMwMDAwMDAwMTg0Ci06MTAzRTIwMDAwMjAyMDAxMDAwMDAwMDAxMDIwMjAwMTQwMDAwMDAwMTY0Ci06MTAzRTMwMDAwMjAyMDAxODAwMDAwMDAxMDIwMjAwMUMwMDAwMDAwMTQ0Ci06MTAzRTQwMDAwMjAyMDAyMDAwMDAwMDAxMDIwMjAwMjQwMDAwMDAwMTI0Ci06MTAzRTUwMDAwMjAyMDAyODAwMDAwMDAxMDIwMjAwMkMwMDAwMDAwMTA0Ci06MTAzRTYwMDAwMjAyMDAzMDAwMDAwMDAxMDIwMjAwMzQwMDAwMDAwMUU0Ci06MTAzRTcwMDAwMjAyMDAzODAwMDAwMDAxMDIwMjAwM0MwMDAwMDAwMUM0Ci06MTAzRTgwMDAwMjAyMDA0MDAwMDAwMDAxMDIwMjAwNDQwMDAwMDAwMUE0Ci06MTAzRTkwMDAwMjAyMDA0ODAwMDAwMDAxMDIwMjAwNEMwMDAwMDAwMTg0Ci06MTAzRUEwMDAwMjAyMDA1MDAwMDAwMDAxMDIwMjAxMDgwMDAwMDBDOEU4Ci06MTAzRUIwMDAwMjAyMDExODAwMDAwMDAyMDIwMjAxQzQwMDAwMDAwMDFBCi06MTAzRUMwMDAwMjAyMDFDQzAwMDAwMDAwMDIwMjAxRDQwMDAwMDAwMjQ2Ci06MTAzRUQwMDAwMjAyMDFEQzAwMDAwMDAyMDIwMjAxRTQwMDAwMDBGRjE3Ci06MTAzRUUwMDAwMjAyMDFFQzAwMDAwMEZGMDIwMjAxMDAwMDAwMDAwMERECi06MTAzRUYwMDAwMjAyMDEwQzAwMDAwMEM4MDIwMjAxMUMwMDAwMDAwMkM2Ci06MTAzRjAwMDAwMjAyMDFDODAwMDAwMDAwMDIwMjAxRDAwMDAwMDAwMDBGCi06MTAzRjEwMDAwMjAyMDFEODAwMDAwMDAyMDIwMjAxRTAwMDAwMDAwMkRCCi06MTAzRjIwMDAwMjAyMDFFODAwMDAwMEZGMDIwMjAxRjAwMDAwMDBGRkIxCi06MTAzRjMwMDAwMjAyMDEwNDAwMDAwMDAwMDIwMjAxMDgwMDAwMDBDOEEzCi06MTAzRjQwMDAwMjAyMDExODAwMDAwMDAyMDIwMjAxQzQwMDAwMDAwMDg5Ci06MTAzRjUwMDAwMjAyMDFDQzAwMDAwMDAwMDIwMjAxRDQwMDAwMDAwMkI1Ci06MTAzRjYwMDAwMjAyMDFEQzAwMDAwMDAyMDIwMjAxRTQwMDAwMDBGRjg2Ci06MTAzRjcwMDAwMjAyMDFFQzAwMDAwMEZGMDIwMjAxMDAwMDAwMDAwMDRDCi06MTAzRjgwMDAwMjAyMDEwQzAwMDAwMEM4MDIwMjAxMUMwMDAwMDAwMjM1Ci06MTAzRjkwMDAwMjAyMDFDODAwMDAwMDAwMDIwMjAxRDAwMDAwMDAwMDdGCi06MTAzRkEwMDAwMjAyMDFEODAwMDAwMDAyMDIwMjAxRTAwMDAwMDAwMjRCCi06MTAzRkIwMDAwMjAyMDFFODAwMDAwMEZGMDIwMjAxRjAwMDAwMDBGRjIxCi06MTAzRkMwMDAwMjAyMDEwNDAwMDAwMDAwMDIwMjAxMDgwMDAwMDBDODEzCi06MTAzRkQwMDAwMjAyMDExODAwMDAwMDAyMDIwMjAxQzQwMDAwMDAwMEY5Ci06MTAzRkUwMDAwMjAyMDFDQzAwMDAwMDAwMDIwMjAxRDQwMDAwMDAwMjI1Ci06MTAzRkYwMDAwMjAyMDFEQzAwMDAwMDAyMDIwMjAxRTQwMDAwMDBGRkY2Ci06MTA0MDAwMDAwMjAyMDFFQzAwMDAwMEZGMDIwMjAxMDAwMDAwMDAwMEJCCi06MTA0MDEwMDAwMjAyMDEwQzAwMDAwMEM4MDIwMjAxMUMwMDAwMDAwMkE0Ci06MTA0MDIwMDAwMjAyMDFDODAwMDAwMDAwMDIwMjAxRDAwMDAwMDAwMEVFCi06MTA0MDMwMDAwMjAyMDFEODAwMDAwMDAyMDIwMjAxRTAwMDAwMDAwMkJBCi06MTA0MDQwMDAwMjAyMDFFODAwMDAwMEZGMDIwMjAxRjAwMDAwMDBGRjkwCi06MTA0MDUwMDAwMjAyMDEwNDAwMDAwMDAwMDIwMjAxMDgwMDAwMDBDODgyCi06MTA0MDYwMDAwMjAyMDExODAwMDAwMDAyMDIwMjAxQzQwMDAwMDAwMDY4Ci06MTA0MDcwMDAwMjAyMDFDQzAwMDAwMDAwMDIwMjAxRDQwMDAwMDAwMjk0Ci06MTA0MDgwMDAwMjAyMDFEQzAwMDAwMDAyMDIwMjAxRTQwMDAwMDBGRjY1Ci06MTA0MDkwMDAwMjAyMDFFQzAwMDAwMEZGMDIwMjAxMDAwMDAwMDAwMDJCCi06MTA0MEEwMDAwMjAyMDEwQzAwMDAwMEM4MDIwMjAxMUMwMDAwMDAwMjE0Ci06MTA0MEIwMDAwMjAyMDFDODAwMDAwMDAwMDIwMjAxRDAwMDAwMDAwMDVFCi06MTA0MEMwMDAwMjAyMDFEODAwMDAwMDAyMDIwMjAxRTAwMDAwMDAwMjJBCi06MTA0MEQwMDAwMjAyMDFFODAwMDAwMEZGMDIwMjAxRjAwMDAwMDBGRjAwCi06MTA0MEUwMDAwMjAyMDEwNDAwMDAwMDAwMDcyODA0MDAwMEExMDAwMEYzCi06MTA0MEYwMDAwODI4MDdCODAwMDkwNENBMDcyQzAwMDAzNEY3MDAwMDlDCi06MTA0MTAwMDAwNzJDODAwMDM5MjUwRDNFMDcyRDAwMDAzN0NEMUI4ODc4Ci06MTA0MTEwMDAwNzJEODAwMDMyOTIyOTdDMDcyRTAwMDAxQUYzMzYyMUU5Ci06MTA0MTIwMDAwODJFNDM5MDM3OEUwNENDMDEyODAwMDAwMDAwMDAwMEM4Ci06MTA0MTMwMDAwMTI4MDAwNDAwMDAwMDAwMDEyODAwMDgwMDAwMDAwMDIxCi06MTA0MTQwMDAwMTI4MDAwQzAwMDAwMDAwMDEyODAwMTAwMDAwMDAwMDAxCi06MTA0MTUwMDAwMTI4MDAxNDAwMDAwMDAwMDIyODAwMjAwMDAwMDAwMUQ3Ci06MTA0MTYwMDAwMjI4MDAyNDAwMDAwMDAyMDIyODAwMjgwMDAwMDAwM0FBCi06MTA0MTcwMDAwMjI4MDAyQzAwMDAwMDAwMDIyODAwMzAwMDAwMDAwNDhCCi06MTA0MTgwMDAwMjI4MDAzNDAwMDAwMDAxMDIyODAwMzgwMDAwMDAwMDZFCi06MTA0MTkwMDAwMjI4MDAzQzAwMDAwMDAxMDIyODAwNDAwMDAwMDAwNDRBCi06MTA0MUEwMDAwMjI4MDA0NDAwMDAwMDAwMDIyODAwNDgwMDAwMDAwMTJFCi06MTA0MUIwMDAwMjI4MDA0QzAwMDAwMDAzMDIyODAwNTAwMDAwMDAwMDBDCi06MTA0MUMwMDAwMjI4MDA1NDAwMDAwMDAxMDIyODAwNTgwMDAwMDAwNEVBCi06MTA0MUQwMDAwMjI4MDA1QzAwMDAwMDAwMDIyODAwNjAwMDAwMDAwMUNFCi06MTA0MUUwMDAwMjI4MDA2NDAwMDAwMDAzMDIyODAwNjgwMDAwMDAwMEFDCi06MTA0MUYwMDAwMjI4MDA2QzAwMDAwMDAxMDIyODAwNzAwMDAwMDAwNDhBCi06MTA0MjAwMDAwMjI4MDA3NDAwMDAwMDAwMDIyODAwNzgwMDAwMDAwNDZBCi06MTA0MjEwMDAwMjI4MDA3QzAwMDAwMDAzMDYyODAwODAwMDAwMDAwMjQ1Ci06MTA0MjIwMDAwMjI4MDBBNDAwMDAzRkZGMDIyODAwQTgwMDAwMDNGRkFFCi06MTA0MjMwMDAwMjI4MDIyNDAwMDAwMDAwMDIyODAyMzQwMDAwMDAwMENFCi06MTA0MjQwMDAwMjI4MDI0QzAwMDAwMDAwMDIyODAyRTQwMDAwRkZGRkU4Ci06MTA0MjUwMDAwNjI4MjAwMDAwMDAwODAwMDIyQjhCQzAwMDAwMDAwMThGCi06MTA0MjYwMDAwMjJCODAwMDAwMDAwMDAwMDIyQjgwNDAwMDAwMDAxODlDCi06MTA0MjcwMDAwMjJCODA4MDAwMDAwMDBDMDIyQjgwQzAwMDAwMDA2NjMyCi06MTA0MjgwMDAwQzJCODMwMDAwMDdBMTIwMEEyQjgzMDAwMDAwMDEzOEJCCi06MTA0MjkwMDAwQjJCODMwMDAwMDAxMzg4MEEyQjgzNDAwMDAwMDAwMEQyCi06MTA0MkEwMDAwQzJCODM0MDAwMDAwMUY0MEIyQjgzNDAwMDAwMDAwNTIxCi06MTA0MkIwMDAwMjJCODM4MDAwMDdBMTIwMDIyQjgzQzAwMDAwMDFGNEExCi06MTA0MkMwMDAwMjJCMTQ4MDAwMDAwMDAxMEEyQjE0ODAwMDAwMDAwMDYzCi06MTA0MkQwMDAwNjJBOUFGODAwMDAwMDA0MDQyQTlCMDgwMDAyMDRDRTczCi06MTA0MkUwMDAwNjJBOUIxMDAwMDAwMDA2MDYyQTkwODAwMDAwMDA0ODY1Ci06MTA0MkYwMDAwNjJBMjAwODAwMDAwMEM4MDYyQTIwMDAwMDAwMDAwMjRDCi06MTA0MzAwMDAwNjJBOTFBODAwMDAwMDg2MDYyQTkwMDAwMDAwMDAyMERFCi06MTA0MzEwMDAwNjJBOTNDODAwMDAwMDAzMDQyQTkzRDQwMDAxMDREMEE1Ci06MTA0MzIwMDAwNjJBOURBODAwMDAwMDAyMDQyQTk0OTgwMDA0MDREMUUzCi06MTA0MzMwMDAwNDJBOUQ1ODAwMDEwNEQ1MDYyQTlENUMwMDAwMDAxMTQ2Ci06MTA0MzQwMDAwNDJBQ0IyMDAwMTAwNEQ2MDQyQTMwMDAwMDAyMDRFNjIwCi06MTA0MzUwMDAwNjJBMzAwODAwMDAwMTAwMDYyQTQwNDAwMDAwMDAxMDM0Ci06MTA0MzYwMDAwNDJBNDAwMDAwMTAwNEU4MDQyQTg0MDgwMDAyMDRGODJCCi06MTA0MzcwMDAwNjJBOURBMDAwMDAwMDAyMDYyQUIwMDAwMDAwMDA1MDlFCi06MTA0MzgwMDAwNjJBQkI3MDAwMDAwMDcwMDYyQUIxNTAwMDAwMDAwMjJGCi06MTA0MzkwMDAwNjJBQkI2MDAwMDAwMDA0MDYyQUQwMDAwMDAwMDgwMEM2Ci06MTA0M0EwMDAwNjJBQzAwMDAwMDAwMTUwMDYyQTk0QTgwMDAwMDAzMjJFCi06MTA0M0IwMDAwNjJBNTAyMDAwMDAwMDAyMDYyQTUwMzAwMDAwMDAwMkE5Ci06MTA0M0MwMDAwNjJBNTAwMDAwMDAwMDAyMDYyQTUwMTAwMDAwMDAwMkQ5Ci06MTA0M0QwMDAwMjJBNTIwODAwMDAwMDAxMDQyQTlCMjgwMDAyMDRGQTY1Ci06MTA0M0UwMDAwNjJBOTYzODAwMDAwMDIyMDQyQTk2QzAwMDAxMDRGQzI4Ci06MTA0M0YwMDAwNjJBOTZDNDAwMDAwMDAzMDYyQTk3NjgwMDAwMDAyMkRGCi06MTA0NDAwMDAwNDJBOTdGMDAwMDEwNEZEMDYyQTk3RjQwMDAwMDAwMzM3Ci06MTA0NDEwMDAwNjJBOTg5ODAwMDAwMDIyMDQyQTk5MjAwMDAxMDRGRTMwCi06MTA0NDIwMDAwNjJBOTkyNDAwMDAwMDAzMDYyQTk5QzgwMDAwMDAyMkU5Ci06MTA0NDMwMDAwNDJBOUE1MDAwMDEwNEZGMDYyQTlBNTQwMDAwMDAwMzNGCi06MTA0NDQwMDAwNjJBQjE0MDAwMDAwMDAyMDYyQUM1NDAwMDAwMDE1MEMzCi06MTA0NDUwMDAwNjJBOTU3MDAwMDAwMDMyMDYyQTUwMjgwMDAwMDAwMjRCCi06MTA0NDYwMDAwNjJBNTAzODAwMDAwMDAyMDYyQTUwMDgwMDAwMDAwMjA4Ci06MTA0NDcwMDAwNjJBNTAxODAwMDAwMDAyMDIyQTUyMEMwMDAwMDAwMTE3Ci06MTA0NDgwMDAwNDJBOUIzMDAwMDIwNTAwMDYyQTk2RDAwMDAwMDAyMjc0Ci06MTA0NDkwMDAwNDJBOTc1ODAwMDEwNTAyMDYyQTk3NUMwMDAwMDAwM0QxCi06MTA0NEEwMDAwNjJBOTgwMDAwMDAwMDIyMDQyQTk4ODgwMDAxMDUwM0NCCi06MTA0NEIwMDAwNjJBOTg4QzAwMDAwMDAzMDYyQTk5MzAwMDAwMDAyMjhBCi06MTA0NEMwMDAwNDJBOTlCODAwMDEwNTA0MDYyQTk5QkMwMDAwMDAwM0RCCi06MTA0NEQwMDAwNjJBOUE2MDAwMDAwMDIyMDQyQTlBRTgwMDAxMDUwNUQ1Ci06MTA0NEUwMDAwNjJBOUFFQzAwMDAwMDAzMDYyQUIxNDgwMDAwMDAwMkU4Ci06MTA0NEYwMDAwMjJBQ0E4MDAwMDAwMDAwMDQyQTlCMzgwMDEwMDUwNjJBCi06MTA0NTAwMDAwNjJBNTA0ODAwMDAwMDBFMDIyQUNBODQwMDAwMDAwMDVCCi06MTA0NTEwMDAwNDJBOUI3ODAwMTAwNTE2MDYyQTUwODAwMDAwMDAwRTIxCi06MTA0NTIwMDAwMjJBQ0E4ODAwMDAwMDAwMDQyQTlCQjgwMDEwMDUyNjUxCi06MTA0NTMwMDAwNjJBNTBCODAwMDAwMDBFMDIyQUNBOEMwMDAwMDAwMEIzCi06MTA0NTQwMDAwNDJBOUJGODAwMTAwNTM2MDYyQTUwRjAwMDAwMDAwRUUxCi06MTA0NTUwMDAwMjJBQ0E5MDAwMDAwMDAwMDQyQTlDMzgwMDEwMDU0Njc4Ci06MTA0NTYwMDAwNjJBNTEyODAwMDAwMDBFMDIyQUNBOTQwMDAwMDAwMDBBCi06MTA0NTcwMDAwNDJBOUM3ODAwMTAwNTU2MDYyQTUxNjAwMDAwMDAwRTlGCi06MTA0NTgwMDAwMjJBQ0E5ODAwMDAwMDAwMDQyQTlDQjgwMDEwMDU2NkEwCi06MTA0NTkwMDAwNjJBNTE5ODAwMDAwMDBFMDIyQUNBOUMwMDAwMDAwMDYyCi06MTA0NUEwMDAwNDJBOUNGODAwMTAwNTc2MDYyQTUxRDAwMDAwMDAwRTVGCi06MTA0NUIwMDAwMjEwMTAwODAwMDAwMDAxMDIxMDEwNTAwMDAwMDAwMTVECi06MTA0NUMwMDAwMjEwMTAwMDAwMDNEMDAwMDIxMDEwMDQwMDAwMDAzRDkzCi06MTA0NUQwMDAwOTEwMTgwMDAyMDAwNTg2MDkxMDExMDAwMDEwMDc4NjU2Ci06MTA0NUUwMDAwNjEwMTE0MDAwMDAwMDA4MDkxMDExNjAwMDEwMDc5NjI1Ci06MTA0NUYwMDAwNjEwMTFBMDAwMDAwMDE4MDYxMDI0MDAwMDAwMDBFMEMyCi06MTA0NjAwMDAwMjEwMjAxQzAwMDAwMDAwMDIxMDIwMjAwMDAwMDAwMTA5Ci06MTA0NjEwMDAwMjEwMjBDMDAwMDAwMDAyMDIxMDIwMDQwMDAwMDAwMTZGCi06MTA0NjIwMDAwMjEwMjAwODAwMDAwMDAxMDkxMDNDMDAwMDA1MDdBNjQ4Ci06MTA0NjMwMDAwOTEwMzgwMDAwMDUwN0FCMDkxMDM4MjAwMDA1MDdCMDQ1Ci06MTA0NjQwMDAwNjEwNEMwMDAwMDAwMTAwMDIxMDQwMjgwMDAwMDAxMDdECi06MTA0NjUwMDAwMjEwNDA0NDAwMDAzRkZGMDIxMDQwNTgwMDI4MDAwMEI0Ci06MTA0NjYwMDAwMjEwNDA4NDAwODQ5MjRBMDIxMDQwNTgwMDAwMDAwMDZBCi06MTA0NjcwMDAwMjEwODAwMDAwMDAxMDgwMDIxMDgwQUMwMDAwMDAwMERBCi06MTA0NjgwMDAwMjEwODAzODAwMDAwMDEwMDIxMDgxMDAwMDAwMDAwMEJECi06MTA0NjkwMDAwNjEwODEyMDAwMDAwMDAyMDIxMDgwMDgwMDAwMDJCNTEwCi06MTA0NkEwMDAwMjEwODAxMDAwMDAwMDAwMDYxMDgyMDAwMDAwMDA0QTg2Ci06MTA0NkIwMDAwMjEwODEwODAwMDFGRkZGMDYxMDgxNDAwMDAwMDAwMjg3Ci06MTA0NkMwMDAwMjEwODAwMDAwMDAxQTgwMDYxMDkwMDAwMDAwMDAyNEY0Ci06MTA0NkQwMDAwNjEwOTEyMDAwMDAwMDRBMDYxMDkzNzAwMDAwMDA0QTY2Ci06MTA0NkUwMDAwNjEwOTVDMDAwMDAwMDRBMDIxMDgwMDQwMDAwMTA4MEVGCi06MTA0NkYwMDAwMjEwODBCMDAwMDAwMDAxMDIxMDgwM0MwMDAwMDAxMDk5Ci06MTA0NzAwMDAwMjEwODEwNDAwMDAwMDAwMDYxMDgxMjgwMDAwMDAwMjUxCi06MTA0NzEwMDAwMjEwODAwQzAwMDAwMkI1MDIxMDgwMTQwMDAwMDAwMDlFCi06MTA0NzIwMDAwNjEwODQwMDAwMDAwMDRBMDIxMDgxMEMwMDAxRkZGRjA3Ci06MTA0NzMwMDAwNjEwODE0ODAwMDAwMDAyMDIxMDgwMDQwMDAwMUE4MDY4Ci06MTA0NzQwMDAwNjEwOTA5MDAwMDAwMDI0MDYxMDkyNDgwMDAwMDA0QUQ1Ci06MTA0NzUwMDAwNjEwOTQ5ODAwMDAwMDRBMDYxMDk2RTgwMDAwMDA0QUVGCi06MTA0NzYwMDAwMjEwODAwMDAwMDAxMDgwMDIxMDgwQUMwMDAwMDAwMkU3Ci06MTA0NzcwMDAwMjEwODAzODAwMDAwMDEwMDIxMDgxMDAwMDAwMDAwMENDCi06MTA0NzgwMDAwNjEwODEyMDAwMDAwMDAyMDIxMDgwMDgwMDAwMDJCNTFGCi06MTA0NzkwMDAwMjEwODAxMDAwMDAwMDAwMDYxMDgyMDAwMDAwMDA0QTk1Ci06MTA0N0EwMDAwMjEwODEwODAwMDFGRkZGMDYxMDgxNDAwMDAwMDAwMjk2Ci06MTA0N0IwMDAwMjEwODAwMDAwMDAxQTgwMDYxMDkwMDAwMDAwMDAyNDAzCi06MTA0N0MwMDAwNjEwOTEyMDAwMDAwMDRBMDYxMDkzNzAwMDAwMDA0QTc1Ci06MTA0N0QwMDAwNjEwOTVDMDAwMDAwMDRBMDIxMDgwMDQwMDAwMTA4MEZFCi06MTA0N0UwMDAwMjEwODBCMDAwMDAwMDAzMDIxMDgwM0MwMDAwMDAxMEE2Ci06MTA0N0YwMDAwMjEwODEwNDAwMDAwMDAwMDYxMDgxMjgwMDAwMDAwMjYxCi06MTA0ODAwMDAwMjEwODAwQzAwMDAwMkI1MDIxMDgwMTQwMDAwMDAwMEFECi06MTA0ODEwMDAwNjEwODQwMDAwMDAwMDRBMDIxMDgxMEMwMDAxRkZGRjE2Ci06MTA0ODIwMDAwNjEwODE0ODAwMDAwMDAyMDIxMDgwMDQwMDAwMUE4MDc3Ci06MTA0ODMwMDAwNjEwOTA5MDAwMDAwMDI0MDYxMDkyNDgwMDAwMDA0QUU0Ci06MTA0ODQwMDAwNjEwOTQ5ODAwMDAwMDRBMDYxMDk2RTgwMDAwMDA0QUZFCi06MTA0ODUwMDAwMjEwODAwMDAwMDAxMDgwMDIxMDgwQUMwMDAwMDAwNEY0Ci06MTA0ODYwMDAwMjEwODAzODAwMDAwMDEwMDIxMDgxMDAwMDAwMDAwMERCCi06MTA0ODcwMDAwNjEwODEyMDAwMDAwMDAyMDIxMDgwMDgwMDAwMDJCNTJFCi06MTA0ODgwMDAwMjEwODAxMDAwMDAwMDAwMDYxMDgyMDAwMDAwMDA0QUE0Ci06MTA0ODkwMDAwMjEwODEwODAwMDFGRkZGMDYxMDgxNDAwMDAwMDAwMkE1Ci06MTA0OEEwMDAwMjEwODAwMDAwMDAxQTgwMDYxMDkwMDAwMDAwMDAyNDEyCi06MTA0OEIwMDAwNjEwOTEyMDAwMDAwMDRBMDYxMDkzNzAwMDAwMDA0QTg0Ci06MTA0OEMwMDAwNjEwOTVDMDAwMDAwMDRBMDIxMDgwMDQwMDAwMTA4MDBECi06MTA0OEQwMDAwMjEwODBCMDAwMDAwMDA1MDIxMDgwM0MwMDAwMDAxMEIzCi06MTA0OEUwMDAwMjEwODEwNDAwMDAwMDAwMDYxMDgxMjgwMDAwMDAwMjcwCi06MTA0OEYwMDAwMjEwODAwQzAwMDAwMkI1MDIxMDgwMTQwMDAwMDAwMEJECi06MTA0OTAwMDAwNjEwODQwMDAwMDAwMDRBMDIxMDgxMEMwMDAxRkZGRjI1Ci06MTA0OTEwMDAwNjEwODE0ODAwMDAwMDAyMDIxMDgwMDQwMDAwMUE4MDg2Ci06MTA0OTIwMDAwNjEwOTA5MDAwMDAwMDI0MDYxMDkyNDgwMDAwMDA0QUYzCi06MTA0OTMwMDAwNjEwOTQ5ODAwMDAwMDRBMDYxMDk2RTgwMDAwMDA0QTBECi06MTA0OTQwMDAwMjEwODAwMDAwMDAxMDgwMDIxMDgwQUMwMDAwMDAwNjAxCi06MTA0OTUwMDAwMjEwODAzODAwMDAwMDEwMDIxMDgxMDAwMDAwMDAwMEVBCi06MTA0OTYwMDAwNjEwODEyMDAwMDAwMDAyMDIxMDgwMDgwMDAwMDJCNTNECi06MTA0OTcwMDAwMjEwODAxMDAwMDAwMDAwMDYxMDgyMDAwMDAwMDA0QUIzCi06MTA0OTgwMDAwMjEwODEwODAwMDFGRkZGMDYxMDgxNDAwMDAwMDAwMkI0Ci06MTA0OTkwMDAwMjEwODAwMDAwMDAxQTgwMDYxMDkwMDAwMDAwMDAyNDIxCi06MTA0OUEwMDAwNjEwOTEyMDAwMDAwMDRBMDYxMDkzNzAwMDAwMDA0QTkzCi06MTA0OUIwMDAwNjEwOTVDMDAwMDAwMDRBMDIxMDgwMDQwMDAwMTA4MDFDCi06MTA0OUMwMDAwMjEwODBCMDAwMDAwMDA3MDIxMDgwM0MwMDAwMDAxMEMwCi06MTA0OUQwMDAwMjEwODEwNDAwMDAwMDAwMDYxMDgxMjgwMDAwMDAwMjdGCi06MTA0OUUwMDAwMjEwODAwQzAwMDAwMkI1MDIxMDgwMTQwMDAwMDAwMENDCi06MTA0OUYwMDAwNjEwODQwMDAwMDAwMDRBMDIxMDgxMEMwMDAxRkZGRjM1Ci06MTA0QTAwMDAwNjEwODE0ODAwMDAwMDAyMDIxMDgwMDQwMDAwMUE4MDk1Ci06MTA0QTEwMDAwNjEwOTA5MDAwMDAwMDI0MDYxMDkyNDgwMDAwMDA0QTAyCi06MTA0QTIwMDAwNjEwOTQ5ODAwMDAwMDRBMDYxMDk2RTgwMDAwMDA0QTFDCi06MTA0QTMwMDAwMjEyMDVCMDAwMDAwMDAxMDIxMjA0OTAwMEUzODM0MDVFCi06MTA0QTQwMDAwMjEyMDUxNDAwMDAzQzEwMDIxMjA2NkMwMDAwMDAwMTY2Ci06MTA0QTUwMDAwMjEyMDY3MDAwMDAwMDAwMDIxMjA0OTRGRkZGRkZGRjI0Ci06MTA0QTYwMDAwMjEyMDQ5OEZGRkZGRkZGMDIxMjA0OUNGRkZGRkZGRkVBCi06MTA0QTcwMDAwMjEyMDRBMEZGRkZGRkZGMDIxMjA0QTRGRkZGRkZGRkNBCi06MTA0QTgwMDAwMjEyMDRBOEZGRkZGRkZGMDIxMjA0QUNGRkZGRkZGRkFBCi06MTA0QTkwMDAwMjEyMDRCMEZGRkZGRkZGMDIxMjA0QkNGRkZGRkZGRjgyCi06MTA0QUEwMDAwMjEyMDRDMEZGRkZGRkZGMDIxMjA0QzRGRkZGRkZGRjVBCi06MTA0QUIwMDAwMjEyMDRDOEZGRkZGRkZGMDIxMjA0Q0NGRkZGRkZGRjNBCi06MTA0QUMwMDAwMjEyMDREMEZGRkZGRkZGMDIxMjA0RDhGRkZGRkZGRjE2Ci06MTA0QUQwMDAwMjEyMDREQ0ZGRkZGRkZGMDIxMjA0RTBGRkZGRkZGRkYyCi06MTA0QUUwMDAwMjEyMDRFNEZGRkZGRkZGMDIxMjA0RThGRkZGRkZGRkQyCi06MTA0QUYwMDAwMjEyMDRFQ0ZGRkZGRkZGMDIxMjA0RjBGRkZGRkZGRkIyCi06MTA0QjAwMDAwMjEyMDRGNEZGRkZGRkZGMDIxMjA0RjhGRkZGRkZGRjkxCi06MTA0QjEwMDAwMjEyMDRGQ0ZGRkZGRkZGMDIxMjA1MDBGRkZGRkZGRjcwCi06MTA0QjIwMDAwMjEyMDUwNEZGRkZGRkZGMDIxMjA1MDhGRkZGRkZGRjRGCi06MTA0QjMwMDAwMjEyMDUwQ0ZGRkZGRkZGMDIxMjA1MTBGRkZGRkZGRjJGCi06MTA0QjQwMDAwMjEyMDRENEZGODA5MDAwMDIxMjA0QjRGMDAwNTAwMDVFCi06MTA0QjUwMDAwMjEyMDRCOEYwMDAxMDAwMDIxMjAzOTAwMDAwMDAwOEQ2Ci06MTA0QjYwMDAwMjEyMDM5QzAwMDAwMDA4MDIxMjAzQTAwMDAwMDAwOENCCi06MTA0QjcwMDAwMjEyMDNBNDAwMDAwMDAyMDIxMjAzQkMwMDAwMDAwNEExCi06MTA0QjgwMDAwMjEyMDNDMDAwMDAwMDA1MDIxMjAzQzQwMDAwMDAwNDZBCi06MTA0QjkwMDAwMjEyMDNEMDAwMDAwMDAwMDIxMjAzNkMwMDAwMDAwMUFBCi06MTA0QkEwMDAwMjEyMDM2ODAwMDAwMDNGMDIxMjAxQkMwMDAwMDA0MDM2Ci06MTA0QkIwMDAwMjEyMDFDMDAwMDAxODA4MDIxMjAxQzQwMDAwMDgwMzFDCi06MTA0QkMwMDAwMjEyMDFDODAwMDAwODAzMDIxMjAxQ0MwMDAwMDA0MERDCi06MTA0QkQwMDAwMjEyMDFEMDAwMDAwMDAzMDIxMjAxRDQwMDAwMDgwM0Y5Ci06MTA0QkUwMDAwMjEyMDFEODAwMDAwODAzMDIxMjAxREMwMDAwMDgwM0QxCi06MTA0QkYwMDAwMjEyMDFFMDAwMDEwMDAzMDIxMjAxRTQwMDAwMDgwM0I4Ci06MTA0QzAwMDAwMjEyMDFFODAwMDAwODAzMDIxMjAxRUMwMDAwMDAwMzk4Ci06MTA0QzEwMDAwMjEyMDFGMDAwMDAwMDAzMDIxMjAxRjQwMDAwMDAwMzgwCi06MTA0QzIwMDAwMjEyMDFGODAwMDAwMDAzMDIxMjAxRkMwMDAwMDAwMzYwCi06MTA0QzMwMDAwMjEyMDIwMDAwMDAwMDAzMDIxMjAyMDQwMDAwMDAwMzNFCi06MTA0QzQwMDAwMjEyMDIwODAwMDAwMDAzMDIxMjAyMEMwMDAwMDAwMzFFCi06MTA0QzUwMDAwMjEyMDIxMDAwMDAwMDAzMDIxMjAyMTQwMDAwMDAwM0ZFCi06MTA0QzYwMDAwMjEyMDIxODAwMDAwMDAzMDIxMjAyMUMwMDAwMDAwM0RFCi06MTA0QzcwMDAwMjEyMDIyMDAwMDAwMDAzMDIxMjAyMjQwMDAwMDAwM0JFCi06MTA0QzgwMDAwMjEyMDIyODAwMDAyNDAzMDIxMjAyMkMwMDAwMDAyRjRFCi06MTA0QzkwMDAwMjEyMDIzMDAwMDAwMDA5MDIxMjAyMzQwMDAwMDAxOTYyCi06MTA0Q0EwMDAwMjEyMDIzODAwMDAwMTg0MDIxMjAyM0MwMDAwMDE4MzVCCi06MTA0Q0IwMDAwMjEyMDI0MDAwMDAwMzA2MDIxMjAyNDQwMDAwMDAxOTIyCi06MTA0Q0MwMDAwMjEyMDI0ODAwMDAwMDA2MDIxMjAyNEMwMDAwMDMwNjE1Ci06MTA0Q0QwMDAwMjEyMDI1MDAwMDAwMzA2MDIxMjAyNTQwMDAwMDMwNkYyCi06MTA0Q0UwMDAwMjEyMDI1ODAwMDAwQzg2MDIxMjAyNUMwMDAwMDMwNjQ5Ci06MTA0Q0YwMDAwMjEyMDI2MDAwMDAwMzA2MDIxMjAyNjQwMDAwMDAwNkI1Ci06MTA0RDAwMDAwMjEyMDI2ODAwMDAwMDA2MDIxMjAyNkMwMDAwMDAwNjk3Ci06MTA0RDEwMDAwMjEyMDI3MDAwMDAwMDA2MDIxMjAyNzQwMDAwMDAwNjc3Ci06MTA0RDIwMDAwMjEyMDI3ODAwMDAwMDA2MDIxMjAyN0MwMDAwMDAwNjU3Ci06MTA0RDMwMDAwMjEyMDI4MDAwMDAwMDA2MDIxMjAyODQwMDAwMDAwNjM3Ci06MTA0RDQwMDAwMjEyMDI4ODAwMDAwMDA2MDIxMjAyOEMwMDAwMDAwNjE3Ci06MTA0RDUwMDAwMjEyMDI5MDAwMDAwMDA2MDIxMjAyOTQwMDAwMDAwNkY3Ci06MTA0RDYwMDAwMjEyMDI5ODAwMDAwMDA2MDIxMjAyOUMwMDAwMDAwNkQ3Ci06MTA0RDcwMDAwMjEyMDJBMDAwMDAwMzA2MDIxMjAyQTQwMDAwMDAxM0E3Ci06MTA0RDgwMDAwMjEyMDJBODAwMDAwMDA2MDIxMjAyQjAwMDAwMTAwNDg1Ci06MTA0RDkwMDAwMjEyMDJCNDAwMDAxMDA0MDIxMjAzMjQwMDEwNjQ0MDQ2Ci06MTA0REEwMDAwMjEyMDMyODAwMTA2NDQwMDIxMjA1QjQwMDAwMDAwMTQyCi06MTA0REIwMDAwMjEyMDFCMDAwMDAwMDAxMDYwMEEwMDAwMDAwMDAwQzdCCi06MTA0REMwMDAwMjAwQTA1MDAwMDAwMDAwMDIwMEEwNTQwMDAwMDAwMEZCCi06MTA0REQwMDAwMjAwQTBFQzU1NTQwMDAwMDIwMEEwRjA1NTU1NTU1NUI2Ci06MTA0REUwMDAwMjAwQTBGNDAwMDA1NTU1MDIwMEEwRjhGMDAwMDAwMEY5Ci06MTA0REYwMDAwMjAwQTBGQzU1NTQwMDAwMDIwMEExMDA1NTU1NTU1NTc1Ci06MTA0RTAwMDAwMjAwQTEwNDAwMDA1NTU1MDIwMEExMDhGMDAwMDAwMEI2Ci06MTA0RTEwMDAwMjAwQTE4QzU1NTQwMDAwMDIwMEExOTA1NTU1NTU1NTMzCi06MTA0RTIwMDAwMjAwQTE5NDAwMDA1NTU1MDIwMEExOThGMDAwMDAwMDc2Ci06MTA0RTMwMDAwMjAwQTE5QzAwMDAwMDAwMDIwMEExQTAwMDAxMDAwMEVGCi06MTA0RTQwMDAwMjAwQTFBNDAwMDA1MDE0MDIwMEExQTgwMDAwMDAwMDZDCi06MTA0RTUwMDAwMjAwQTQ1QzAwMDAwQzAwMDIwMEE2MUMwMDAwMDAwMzdECi06MTA0RTYwMDAwMjAwQTA2Q0ZGNUMwMDAwMDIwMEEwNzBGRkY1NUZGRjc1Ci06MTA0RTcwMDAwMjAwQTA3NDAwMDBGRkZGMDIwMEEwNzhGMDAwMDNFMDMxCi06MTA0RTgwMDAwMjAwQTA3QzAwMDAwMDAwMDIwMEEwODAwMDAwQTAwMDQyCi06MTA0RTkwMDAwNjAwQTA4NDAwMDAwMDA1MDIwMEEwOTgwRkUwMDAwMEJBCi06MTA0RUEwMDAwNjAwQTA5QzAwMDAwMDA3MDIwMEEwQjgwMDAwMDQwMDVCCi06MTA0RUIwMDAwNjAwQTBCQzAwMDAwMDAzMDIwMEEwQzgwMDAwMTAwMDEzCi06MTA0RUMwMDAwNjAwQTBDQzAwMDAwMDAzMDIwMEEwRDgwMDAwNDAwMEIzCi06MTA0RUQwMDAwNjAwQTBEQzAwMDAwMDAzMDIwMEEwRTgwMDAxMDAwMEMyCi06MTA0RUUwMDAwNjAwQTIyQzAwMDAwMDA0MDIwMEExMENGRjVDMDAwMEUwCi06MTA0RUYwMDAwMjAwQTExMEZGRjU1RkZGMDIwMEExMTQwMDAwRkZGRkY4Ci06MTA0RjAwMDAwMjAwQTExOEYwMDAwM0UwMDIwMEExMUMwMDAwMDAwMDU0Ci06MTA0RjEwMDAwMjAwQTEyMDAwMDBBMDAwMDYwMEExMjQwMDAwMDAwNTVFCi06MTA0RjIwMDAwMjAwQTEzODBGRTAwMDAwMDYwMEExM0MwMDAwMDAwN0NECi06MTA0RjMwMDAwMjAwQTE1ODAwMDAwODAwMDYwMEExNUMwMDAwMDAwMzY4Ci06MTA0RjQwMDAwMjAwQTE2ODAwMDAyMDAwMDYwMEExNkMwMDAwMDAwMzIwCi06MTA0RjUwMDAwMjAwQTE3ODAwMDA4MDAwMDYwMEExN0MwMDAwMDAwMzkwCi06MTA0RjYwMDAwMjAwQTE4ODAwMDIwMDAwMDYwMEEyM0MwMDAwMDAwNDJDCi06MTA0RjcwMDAwMjAwQTAzMDAwMDAwMDAwMDIwMEEwMzQwMDAwMDAwMDg5Ci06MTA0RjgwMDAwMjAwQTAzODAwMDAwMDAwMDIwMEEwM0MwMDAwMDAwMDY5Ci06MTA0RjkwMDAwMjAwQTA0MDAwMDAwMDAwMDIwMEEwNDQwMDAwMDAwMDQ5Ci06MTA0RkEwMDAwMjAwQTA0ODAwMDAwMDAwMDIwMEEwNEMwMDAwMDAwMDI5Ci06MTA0RkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzAwMDAwMDAwMEMxCi06MTA0RkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUxCi06MTA0RkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQxCi06MTA0RkUwMDAwMDAwMDAwMDAwMzAwMDMxMDAwMDAwMDAwMDAwMDAwMDYwCi06MTA0RkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIxCi06MTA1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwCi06MTA1MDEwMDAwMDMxMDA1MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBECi06MTA1MDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwCi06MTA1MDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUyMDA4OTk1Ci06MTA1MDQwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OTAwOEQwMDhEMDA5MTJDCi06MTA1MDUwMDAwMDkxMDA5NTAwOTUwMDk5MDA5OTAwOUQwMDlEMDBBMTg4Ci06MTA1MDYwMDAwMEExMDBBNTAwQTUwMEE5MDBBOTAwQUUwMEFFMDBCMUY2Ci06MTA1MDcwMDAwMEIxMDBCNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENCCi06MTA1MDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwCi06MTA1MDkwMDAwMDAwMDAwMDAwQjQwMzA5MDMwOTAzMTMwMzEzMDMxREY4Ci06MTA1MEEwMDAwMzFEMDMyNDAzMjQwMzJCMDMyQjAzMzIwMzMyMDMzOTkwCi06MTA1MEIwMDAwMzM5MDM0MDAzNDAwMzQ3MDM0NzAzNEUwMzRFMDM1NUEwCi06MTA1MEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUwCi06MTA1MEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQwCi06MTA1MEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMwCi06MTA1MEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIwCi06MTA1MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlGCi06MTA1MTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGCi06MTA1MTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdGCi06MTA1MTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZGCi06MTA1MTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVGCi06MTA1MTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRGCi06MTA1MTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNGCi06MTA1MTcwMDAwMzU1MDM1QjAwMDAwMDAwMDAwMDAwMDAwMzVCMDM1Q0JDCi06MTA1MTgwMDAwMzVDMDM1RDAzNUQwMzVFMDM1RTAzNUYwMzVGMDM2MDE3Ci06MTA1MTkwMDAwMzYwMDM2MTAzNjEwMzYyMDM2MjAzNjMwMDAwMDAwMEI0Ci06MTA1MUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZGCi06MTA1MUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVGCi06MTA1MUMwMDAwMDAwMDAwMDAwMDAwMDAwMDM2MzAzNkQwMzZEMDM3QjFCCi06MTA1MUQwMDAwMzdCMDM4OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM1Ci06MTA1MUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJGCi06MTA1MUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFGCi06MTA1MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlFCi06MTA1MjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhFCi06MTA1MjIwMDAwMzg5MDM4QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY1Ci06MTA1MjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZFCi06MTA1MjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzhBMDNENkY4Ci06MTA1MjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRFCi06MTA1MjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNFCi06MTA1MjcwMDAwMDAwMDAwMDAwMDAwMDAwMDNENjA0MDEwMDAwMDAwMDUwCi06MTA1MjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFCi06MTA1MjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFCi06MTA1MkEwMDAwMDAwMDAwMDA0MDEwNDMzMDAwMDAwMDAwMDAwMDAwMEMyCi06MTA1MkIwMDAwNDMzMDQzQTA0M0EwNDQxMDQ0MTA0NDgwNDQ4MDQ0RkM2Ci06MTA1MkMwMDAwNDRGMDQ1NjA0NTYwNDVEMDQ1RDA0NjQwNDY0MDQ2QkQ2Ci06MTA1MkQwMDAwNDZCMDRBNDAwMDAwMDAwMDAwMDAwMDAwNEE0MDRBODYzCi06MTA1MkUwMDAwNEE4MDRBQzA0QUMwNEIwMDRCMDA0QjQwNEI0MDRCODFFCi06MTA1MkYwMDAwNEI4MDRCQzA0QkMwNEMwMDRDMDA0QzQwNEM0MDUxMzQyCi06MTA1MzAwMDAwNTEzMDUyQTA1MkEwNTQxMDU0MTA1NDMwNTQzMDU0NUMxCi06MTA1MzEwMDAwNTQ1MDU0NzA1NDcwNTQ5MDU0OTA1NEIwNTRCMDU0RDFECi06MTA1MzIwMDAwNTREMDU0RjA1NEYwNTUxMDU1MTA1RTgwNUU4MDVFOTBGCi06MTA1MzMwMDAwNUU5MDVFQTA1RUEwNUVGMDVFRjA1RjQwNUY0MDVGOUM5Ci06MTA1MzQwMDAwNUY5MDVGRTA1RkUwNjAzMDYwMzA2MDgwNjA4MDYwRDE4Ci06MTA1MzUwMDAwNjBEMDYxMjA2MTIwNjEzMDAwMDAwMDAwMDAwMDAwMEYxCi06MTA1MzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNECi06MTA1MzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJECi06MTA1MzgwMDAwNjEzMDYyNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERBCi06MTA1MzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBECi06MTA1M0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjI0MDYzOTk0Ci06MTA1M0IwMDAwNjM5MDYzQzA2M0MwNjNGMDAwMDAwMDAwMDAwMDAwMEU1Ci06MTA1M0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERECi06MTA1M0QwMDAwMDAwMDAwMDAwMDAwMDAwMDYzRjA2NzUwMDAwMDAwMDBECi06MTA1M0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJECi06MTA1M0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFECi06MTA1NDAwMDAwMDAwMDAwMDA2NzUwNzc4MDAwMDAwMDAwMDAwMDAwMEEyCi06MTA1NDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhDCi06MTA1NDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdDCi06MTA1NDMwMDAwNzc4MDc3RjA3N0YwNzgzMDc4MzA3ODcwMDAwMDAwMDNGCi06MTA1NDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVDCi06MTA1NDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzg3MDdDOEVGCi06MTA1NDYwMDAwMDAwMDAwMDAwMDAwMDAwMDdDODA3RDEwN0QxMDdEQURDCi06MTA1NDcwMDAwN0RBMDdFMzA3RTMwN0VDMDdFQzA3RjUwN0Y1MDdGRTk0Ci06MTA1NDgwMDAwN0ZFMDgwNzA4MDcwODEwMDgxMDA4NjcwODY3MDg3QzY3Ci06MTA1NDkwMDAwODdDMDg5MTA4OTEwODk0MDg5NDA4OTcwODk3MDg5QTNFCi06MTA1NEEwMDAwODlBMDg5RDA4OUQwOEEwMDhBMDA4QTMwOEEzMDhBNkJDCi06MTA1NEIwMDAwOEE2MDhBOTA4QTkwOEIyMDAwMDAwMDAwMDAwMDAwMDIyCi06MTA1NEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERDCi06MTA1NEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENDCi06MTA1NEUwMDAwOEIyMDhCODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQyCi06MTA1NEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFDCi06MTA1NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEI4MDhCQjE4Ci06MTA1NTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhCCi06MTA1NTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdCCi06MTA1NTMwMDAwMDAwMDAwMDAwMDAwMDAwMDhCQjA4QzEwMDAwMDAwMERGCi06MTA1NTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVCCi06MTA1NTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRCCi06MTA1NTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNCCi06MTA1NTcwMDAwOEMxMDhEMDA4RDAwOERGMDhERjA4RUUwOEVFMDhGREYzCi06MTA1NTgwMDAwOEZEMDkwQzA5MEMwOTFCMDkxQjA5MkEwOTJBMDkzOUZDCi06MTA1NTkwMDAwOTM5MDlBQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE2Ci06MTA1NUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZCCi06MTA1NUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUFBMDlCRjcwCi06MTA1NUMwMDAwOUJGMDlEMDA5RDAwOUUxMDlFMTA5RTIwOUUyMDlFM0NCCi06MTA1NUQwMDAwOUUzMDlFNDA5RTQwOUU1MDlFNTA5RTYwOUU2MDlFNzVCCi06MTA1NUUwMDAwOUU3MDlFODA5RTgwOUU5MDAwMDAwMDAwMDAwMDAwMEY3Ci06MTA1NUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFCCi06MTA1NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlBCi06MTA1NjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhBCi06MTA1NjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdBCi06MTA1NjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZBCi06MTA1NjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVBCi06MTA1NjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRBCi06MTA1NjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNBCi06MTA1NjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJBCi06MTA1NjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFBCi06MTA1NjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBCi06MTA1NkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZBCi06MTA1NkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVBCi06MTA1NkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAyMDRDMDEzCi06MTA1NkQwMDAwMDAzMDk4MDAwMDQwRTQwMDAwNTEzMDAwMDA2MTdDMEY3Ci06MTA1NkUwMDAwMDA3MUM4MDAwMDgyMTQwMDAwOTI2MDAwMDBBMkFDMDhCCi06MTA1NkYwMDAwMDBCMkY4MDAwMEMzNDQwMDAwRDM5MDAwMDBFM0RDMDFGCi06MTA1NzAwMDAwMDBGNDI4MDAwMTA0NzQwMDAxMTRDMDAwMDEyNTBDMEIyCi06MTA1NzEwMDAwMDEzNTU4MDAwMTQ1QTQwMDAxNTVGMDAwMDE2NjNDMDQ2Ci06MTA1NzIwMDAwMDE3Njg4MDAwMTg2RDQwMDAxOTcyMDAwMDFBNzZDMERBCi06MTA1NzMwMDAwMDFCN0I4MDAwMUM4MDQwMDAxRDg1MDAwMDFFODlDMDZFCi06MTA1NzQwMDAwMDFGOEU4MDAwMDA5MzQwMDAwMDIwMDAwMDAwNDAwMEY5Ci06MTA1NzUwMDAwMDAwNjAwMDAwMDA4MDAwMDAwMEEwMDAwMDAwQzAwMDA5Ci06MTA1NzYwMDAwMDAwRTAwMDAwMDEwMDAwMDAwMTIwMDAwMDAxNDAwMEY2Ci06MTA1NzcwMDAwMDAxNjAwMDAwMDE4MDAwMDAwMUEwMDAwMDAxQzAwMEU1Ci06MTA1NzgwMDAwMDAxRTAwMDAwMDIwMDAwMDAwMjIwMDAwMDAyNDAwMEQyCi06MTA1NzkwMDAwMDAyNjAwMDAwMDI4MDAwMDAwMkEwMDAwMDAyQzAwMEMxCi06MTA1N0EwMDAwMDAyRTAwMDAwMDMwMDAwMDAwMzIwMDAwMDAzNDAwMEFFCi06MTA1N0IwMDAwMDAzNjAwMDAwMDM4MDAwMDAwM0EwMDAwMDAzQzAwMDlECi06MTA1N0MwMDAwMDAzRTAwMDAwMDQwMDAwMDAwNDIwMDAwMDA0NDAwMDhBCi06MTA1N0QwMDAwMDA0NjAwMDAwMDQ4MDAwMDAwNEEwMDAwMDA0QzAwMDc5Ci06MTA1N0UwMDAwMDA0RTAwMDAwMDUwMDAwMDAwNTIwMDAwMDA1NDAwMDY2Ci06MTA1N0YwMDAwMDA1NjAwMDAwMDU4MDAwMDAwNUEwMDAwMDA1QzAwMDU1Ci06MTA1ODAwMDAwMDA1RTAwMDAwMDYwMDAwMDAwNjIwMDAwMDA2NDAwMDQxCi06MTA1ODEwMDAwMDA2NjAwMDAwMDY4MDAwMDAwNkEwMDAwMDA2QzAwMDMwCi06MTA1ODIwMDAwMDA2RTAwMDAwMDcwMDAwMDAwNzIwMDAwMDA3NDAwMDFECi06MTA1ODMwMDAwMDA3NjAwMDAwMDc4MDAwMDAwN0EwMDAwMDA3QzAwMDBDCi06MTA1ODQwMDAwMDA3RTAwMDAwMDgwMDAwMDAwODIwMDAwMDA4NDAwMEY5Ci06MTA1ODUwMDAwMDA4NjAwMDAwMDg4MDAwMDAwOEEwMDAwMDA4QzAwMEU4Ci06MTA1ODYwMDAwMDA4RTAwMDAwMDkwMDAwMDAwOTIwMDAwMDA5NDAwMEQ1Ci06MTA1ODcwMDAwMDA5NjAwMDAwMDk4MDAwMDAwOUEwMDAwMDA5QzAwMEM0Ci06MTA1ODgwMDAwMDA5RTAwMDAwMEEwMDAwMDAwQTIwMDAwMDBBNDAwMEIxCi06MTA1ODkwMDAwMDBBNjAwMDAwMEE4MDAwMDAwQUEwMDAwMDBBQzAwMEEwCi06MTA1OEEwMDAwMDBBRTAwMDAwMEIwMDAwMDAwQjIwMDAwMDBCNDAwMDhECi06MTA1OEIwMDAwMDBCNjAwMDAwMEI4MDAwMDAwQkEwMDAwMDBCQzAwMDdDCi06MTA1OEMwMDAwMDBCRTAwMDAwMEMwMDAwMDAwQzIwMDAwMDBDNDAwMDY5Ci06MTA1OEQwMDAwMDBDNjAwMDAwMEM4MDAwMDAwQ0EwMDAwMDBDQzAwMDU4Ci06MTA1OEUwMDAwMDBDRTAwMDAwMEQwMDAwMDAwRDIwMDAwMDBENDAwMDQ1Ci06MTA1OEYwMDAwMDBENjAwMDAwMEQ4MDAwMDAwREEwMDAwMDBEQzAwMDM0Ci06MTA1OTAwMDAwMDBERTAwMDAwMEUwMDAwMDAwRTIwMDAwMDBFNDAwMDIwCi06MTA1OTEwMDAwMDBFNjAwMDAwMEU4MDAwMDAwRUEwMDAwMDBFQzAwMDBGCi06MTA1OTIwMDAwMDBFRTAwMDAwMEYwMDAwMDAwRjIwMDAwMDBGNDAwMEZDCi06MTA1OTMwMDAwMDBGNjAwMDAwMEY4MDAwMDAwRkEwMDAwMDBGQzAwMEVCCi06MTA1OTQwMDAwMDBGRTAwMDAwMTAwMDAwMDAxMDIwMDAwMDEwNDAwMEQ4Ci06MTA1OTUwMDAwMDEwNjAwMDAwMTA4MDAwMDAxMEEwMDAwMDEwQzAwMEM3Ci06MTA1OTYwMDAwMDEwRTAwMDAwMTEwMDAwMDAxMTIwMDAwMDExNDAwMEI0Ci06MTA1OTcwMDAwMDExNjAwMDAwMTE4MDAwMDAxMUEwMDAwMDExQzAwMEEzCi06MTA1OTgwMDAwMDExRTAwMDAwMTIwMDAwMDAxMjIwMDAwMDEyNDAwMDkwCi06MTA1OTkwMDAwMDEyNjAwMDAwMTI4MDAwMDAxMkEwMDAwMDEyQzAwMDdGCi06MTA1OUEwMDAwMDEyRTAwMDAwMTMwMDAwMDAxMzIwMDAwMDEzNDAwMDZDCi06MTA1OUIwMDAwMDEzNjAwMDAwMTM4MDAwMDAxM0EwMDAwMDEzQzAwMDVCCi06MTA1OUMwMDAwMDEzRTAwMDAwMTQwMDAwMDAxNDIwMDAwMDE0NDAwMDQ4Ci06MTA1OUQwMDAwMDE0NjAwMDAwMTQ4MDAwMDAxNEEwMDAwMDE0QzAwMDM3Ci06MTA1OUUwMDAwMDE0RTAwMDAwMTUwMDAwMDAxNTIwMDAwMDE1NDAwMDI0Ci06MTA1OUYwMDAwMDE1NjAwMDAwMTU4MDAwMDAxNUEwMDAwMDE1QzAwMDEzCi06MTA1QTAwMDAwMDE1RTAwMDAwMTYwMDAwMDAxNjIwMDAwMDE2NDAwMEZGCi06MTA1QTEwMDAwMDE2NjAwMDAwMTY4MDAwMDAxNkEwMDAwMDE2QzAwMEVFCi06MTA1QTIwMDAwMDE2RTAwMDAwMTcwMDAwMDAxNzIwMDAwMDE3NDAwMERCCi06MTA1QTMwMDAwMDE3NjAwMDAwMTc4MDAwMDAxN0EwMDAwMDE3QzAwMENBCi06MTA1QTQwMDAwMDE3RTAwMDAwMTgwMDAwMDAxODIwMDAwMDE4NDAwMEI3Ci06MTA1QTUwMDAwMDE4NjAwMDAwMTg4MDAwMDAxOEEwMDAwMDE4QzAwMEE2Ci06MTA1QTYwMDAwMDE4RTAwMDAwMTkwMDAwMDAxOTIwMDAwMDE5NDAwMDkzCi06MTA1QTcwMDAwMDE5NjAwMDAwMTk4MDAwMDAxOUEwMDAwMDE5QzAwMDgyCi06MTA1QTgwMDAwMDE5RTAwMDAwMUEwMDAwMDAxQTIwMDAwMDFBNDAwMDZGCi06MTA1QTkwMDAwMDFBNjAwMDAwMUE4MDAwMDAxQUEwMDAwMDFBQzAwMDVFCi06MTA1QUEwMDAwMDFBRTAwMDAwMUIwMDAwMDAxQjIwMDAwMDFCNDAwMDRCCi06MTA1QUIwMDAwMDFCNjAwMDAwMUI4MDAwMDAxQkEwMDAwMDFCQzAwMDNBCi06MTA1QUMwMDAwMDFCRTAwMDAwMUMwMDAwMDAxQzIwMDAwMDFDNDAwMDI3Ci06MTA1QUQwMDAwMDFDNjAwMDAwMUM4MDAwMDAxQ0EwMDAwMDFDQzAwMDE2Ci06MTA1QUUwMDAwMDFDRTAwMDAwMUQwMDAwMDAxRDIwMDAwMDFENDAwMDAzCi06MTA1QUYwMDAwMDFENjAwMDAwMUQ4MDAwMDAxREEwMDAwMDFEQzAwMEYyCi06MTA1QjAwMDAwMDFERTAwMDAwMUUwMDAwMDAxRTIwMDAwMDFFNDAwMERFCi06MTA1QjEwMDAwMDFFNjAwMDAwMUU4MDAwMDAxRUEwMDAwMDFFQzAwMENECi06MTA1QjIwMDAwMDFFRTAwMDAwMUYwMDAwMDAxRjIwMDAwMDFGNDAwMEJBCi06MTA1QjMwMDAwMDFGNjAwMDAwMUY4MDAwMDAxRkEwMDAwMDFGQzAwMEE5Ci06MTA1QjQwMDAwMDFGRTAwMDAwMjAwMDAwMDAyMDIwMDAwMDIwNDAwMDk2Ci06MTA1QjUwMDAwMDIwNjAwMDAwMjA4MDAwMDAyMEEwMDAwMDIwQzAwMDg1Ci06MTA1QjYwMDAwMDIwRTAwMDAwMjEwMDAwMDAyMTIwMDAwMDIxNDAwMDcyCi06MTA1QjcwMDAwMDIxNjAwMDAwMjE4MDAwMDAyMUEwMDAwMDIxQzAwMDYxCi06MTA1QjgwMDAwMDIxRTAwMDAwMjIwMDAwMDAyMjIwMDAwMDIyNDAwMDRFCi06MTA1QjkwMDAwMDIyNjAwMDAwMjI4MDAwMDAyMkEwMDAwMDIyQzAwMDNECi06MTA1QkEwMDAwMDIyRTAwMDAwMjMwMDAwMDAyMzIwMDAwMDIzNDAwMDJBCi06MTA1QkIwMDAwMDIzNjAwMDAwMjM4MDAwMDAyM0EwMDAwMDIzQzAwMDE5Ci06MTA1QkMwMDAwMDIzRTAwMDAwMjQwMDAwMDAyNDIwMDAwMDI0NDAwMDA2Ci06MTA1QkQwMDAwMDI0NjAwMDAwMjQ4MDAwMDAyNEEwMDAwMDI0QzAwMEY1Ci06MTA1QkUwMDAwMDI0RTAwMDAwMjUwMDAwMDAyNTIwMDAwMDI1NDAwMEUyCi06MTA1QkYwMDAwMDI1NjAwMDAwMjU4MDAwMDAyNUEwMDAwMDI1QzAwMEQxCi06MTA1QzAwMDAwMDI1RTAwMDAwMjYwMDAwMDAyNjIwMDAwMDI2NDAwMEJECi06MTA1QzEwMDAwMDI2NjAwMDAwMjY4MDAwMDAyNkEwMDAwMDI2QzAwMEFDCi06MTA1QzIwMDAwMDI2RTAwMDAwMjcwMDAwMDAyNzIwMDAwMDI3NDAwMDk5Ci06MTA1QzMwMDAwMDI3NjAwMDAwMjc4MDAwMDAyN0EwMDAwMDI3QzAwMDg4Ci06MTA1QzQwMDAwMDI3RTAwMDAwMjgwMDAwMDAyODIwMDAwMDI4NDAwMDc1Ci06MTA1QzUwMDAwMDI4NjAwMDAwMjg4MDAwMDAyOEEwMDAwMDI4QzAwMDY0Ci06MTA1QzYwMDAwMDI4RTAwMDAwMjkwMDAwMDAyOTIwMDAwMDI5NDAwMDUxCi06MTA1QzcwMDAwMDI5NjAwMDAwMjk4MDAwMDAyOUEwMDAwMDI5QzAwMDQwCi06MTA1QzgwMDAwMDI5RTAwMDAwMkEwMDAwMDAyQTIwMDAwMDJBNDAwMDJECi06MTA1QzkwMDAwMDJBNjAwMDAwMkE4MDAwMDAyQUEwMDAwMDJBQzAwMDFDCi06MTA1Q0EwMDAwMDJBRTAwMDAwMkIwMDAwMDAyQjIwMDAwMDJCNDAwMDA5Ci06MTA1Q0IwMDAwMDJCNjAwMDAwMkI4MDAwMDAyQkEwMDAwMDJCQzAwMEY4Ci06MTA1Q0MwMDAwMDJCRTAwMDAwMkMwMDAwMDAyQzIwMDAwMDJDNDAwMEU1Ci06MTA1Q0QwMDAwMDJDNjAwMDAwMkM4MDAwMDAyQ0EwMDAwMDJDQzAwMEQ0Ci06MTA1Q0UwMDAwMDJDRTAwMDAwMkQwMDAwMDAyRDIwMDAwMDJENDAwMEMxCi06MTA1Q0YwMDAwMDJENjAwMDAwMkQ4MDAwMDAyREEwMDAwMDJEQzAwMEIwCi06MTA1RDAwMDAwMDJERTAwMDAwMkUwMDAwMDAyRTIwMDAwMDJFNDAwMDlDCi06MTA1RDEwMDAwMDJFNjAwMDAwMkU4MDAwMDAyRUEwMDAwMDJFQzAwMDhCCi06MTA1RDIwMDAwMDJFRTAwMDAwMkYwMDAwMDAyRjIwMDAwMDJGNDAwMDc4Ci06MTA1RDMwMDAwMDJGNjAwMDAwMkY4MDAwMDAyRkEwMDAwMDJGQzAwMDY3Ci06MTA1RDQwMDAwMDJGRTAwMDAwMzAwMDAwMDAzMDIwMDAwMDMwNDAwMDU0Ci06MTA1RDUwMDAwMDMwNjAwMDAwMzA4MDAwMDAzMEEwMDAwMDMwQzAwMDQzCi06MTA1RDYwMDAwMDMwRTAwMDAwMzEwMDAwMDAzMTIwMDAwMDMxNDAwMDMwCi06MTA1RDcwMDAwMDMxNjAwMDAwMzE4MDAwMDAzMUEwMDAwMDMxQzAwMDFGCi06MTA1RDgwMDAwMDMxRTAwMDAwMzIwMDAwMDAzMjIwMDAwMDMyNDAwMDBDCi06MTA1RDkwMDAwMDMyNjAwMDAwMzI4MDAwMDAzMkEwMDAwMDMyQzAwMEZCCi06MTA1REEwMDAwMDMyRTAwMDAwMzMwMDAwMDAzMzIwMDAwMDMzNDAwMEU4Ci06MTA1REIwMDAwMDMzNjAwMDAwMzM4MDAwMDAzM0EwMDAwMDMzQzAwMEQ3Ci06MTA1REMwMDAwMDMzRTAwMDAwMzQwMDAwMDAzNDIwMDAwMDM0NDAwMEM0Ci06MTA1REQwMDAwMDM0NjAwMDAwMzQ4MDAwMDAzNEEwMDAwMDM0QzAwMEIzCi06MTA1REUwMDAwMDM0RTAwMDAwMzUwMDAwMDAzNTIwMDAwMDM1NDAwMEEwCi06MTA1REYwMDAwMDM1NjAwMDAwMzU4MDAwMDAzNUEwMDAwMDM1QzAwMDhGCi06MTA1RTAwMDAwMDM1RTAwMDAwMzYwMDAwMDAzNjIwMDAwMDM2NDAwMDdCCi06MTA1RTEwMDAwMDM2NjAwMDAwMzY4MDAwMDAzNkEwMDAwMDM2QzAwMDZBCi06MTA1RTIwMDAwMDM2RTAwMDAwMzcwMDAwMDAzNzIwMDAwMDM3NDAwMDU3Ci06MTA1RTMwMDAwMDM3NjAwMDAwMzc4MDAwMDAzN0EwMDAwMDM3QzAwMDQ2Ci06MTA1RTQwMDAwMDM3RTAwMDAwMzgwMDAwMDAzODIwMDAwMDM4NDAwMDMzCi06MTA1RTUwMDAwMDM4NjAwMDAwMzg4MDAwMDAzOEEwMDAwMDM4QzAwMDIyCi06MTA1RTYwMDAwMDM4RTAwMDAwMzkwMDAwMDAzOTIwMDAwMDM5NDAwMDBGCi06MTA1RTcwMDAwMDM5NjAwMDAwMzk4MDAwMDAzOUEwMDAwMDM5QzAwMEZFCi06MTA1RTgwMDAwMDM5RTAwMDAwM0EwMDAwMDAzQTIwMDAwMDNBNDAwMEVCCi06MTA1RTkwMDAwMDNBNjAwMDAwM0E4MDAwMDAzQUEwMDAwMDNBQzAwMERBCi06MTA1RUEwMDAwMDNBRTAwMDAwM0IwMDAwMDAzQjIwMDAwMDNCNDAwMEM3Ci06MTA1RUIwMDAwMDNCNjAwMDAwM0I4MDAwMDAzQkEwMDAwMDNCQzAwMEI2Ci06MTA1RUMwMDAwMDNCRTAwMDAwM0MwMDAwMDAzQzIwMDAwMDNDNDAwMEEzCi06MTA1RUQwMDAwMDNDNjAwMDAwM0M4MDAwMDAzQ0EwMDAwMDNDQzAwMDkyCi06MTA1RUUwMDAwMDNDRTAwMDAwM0QwMDAwMDAzRDIwMDAwMDNENDAwMDdGCi06MTA1RUYwMDAwMDNENjAwMDAwM0Q4MDAwMDAzREEwMDAwMDNEQzAwMDZFCi06MTA1RjAwMDAwMDNERTAwMDAwM0UwMDAwMDAzRTIwMDAwMDNFNDAwMDVBCi06MTA1RjEwMDAwMDNFNjAwMDAwM0U4MDAwMDAzRUEwMDAwMDNFQzAwMDQ5Ci06MTA1RjIwMDAwMDNFRTAwMDAwM0YwMDAwMDAzRjIwMDAwMDNGNDAwMDM2Ci06MTA1RjMwMDAwMDNGNjAwMDAwM0Y4MDAwMDAzRkEwMDAwMDNGQzAwMDI1Ci06MTA1RjQwMDAwMDNGRTAwMDAwM0ZFMDAxMDAwMDAwMDAwMDAwMDFGRjEyCi06MTA1RjUwMDAwMDAwMDIwMDAwMDA3RkY4MDAwMDdGRjgwMDAwMDE0MDEwCi06MTA1RjYwMDAwMDAwMzUwMDAwMDAwMDAxMDAwMEZGMDAwMDAwMDAwMEZDCi06MTA1RjcwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDIzCi06MTA1RjgwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDEzCi06MTA1RjkwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAzCi06MTA1RkEwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMDAwMDAxNDBBRkYwMEQ1Ci06MTA1RkIwMDAwMDAwMDAwMTAwMDAwMDAwMDAyMDEwMDEwMDAwMDAwMEFGCi06MTA1RkMwMDAwMTAwOTAwMDAwMDAwMTAwMDAwMDkwMDIwMDAwOTAwNDE5Ci06MTA1RkQwMDAwMDAwOTAwNjAwMDA5MDA4MDAwMDkwMEEwMDAwOTAwQzVECi06MTA1RkUwMDAwMDAwOTAwRTAwMDA5MDEwMDAwMDkwMTIwMDAwOTAxNDJECi06MTA1RkYwMDAwMDAwOTAxNjAwMDA5MDE4MDAwMDkwMUEwMDAwOTAxQ0ZECi06MTA2MDAwMDAwMDAwOTAxRTAwMDA5MDIwMDAwMDkwMjIwMDAwOTAyNENDCi06MTA2MDEwMDAwMDAwOTAyNjAwMDA5MDI4MDAwMDkwMkEwMDAwOTAyQzlDCi06MTA2MDIwMDAwMDAwOTAyRTAwMDA5MDMwMDAwMDkwMzIwMDAwOTAzNDZDCi06MTA2MDMwMDAwMDAwOTAzNjAwMDA5MDM4MDAwMDkwM0EwMDAwOTAzQzNDCi06MTA2MDQwMDAwMDAwOTAzRTAwMDA5MDQwMDAwMDkwNDIwMDAwOTA0NDBDCi06MTA2MDUwMDAwMDAwOTA0NjAwMDA5MDQ4MDAwMDkwNEEwMDAwOTA0Q0RDCi06MTA2MDYwMDAwMDAwOTA0RTAwMDA5MDUwMDAwMDkwNTIwMDAwOTA1NEFDCi06MTA2MDcwMDAwMDAwOTA1NjAwMDA5MDU4MDAwMDkwNUEwMDAwOTA1QzdDCi06MTA2MDgwMDAwMDAwOTA1RTAwMDA5MDYwMDAwMDkwNjIwMDAwOTA2NDRDCi06MTA2MDkwMDAwMDAwOTA2NjAwMDA5MDY4MDAwMDkwNkEwMDAwOTA2QzFDCi06MTA2MEEwMDAwMDAwOTA2RTAwMDA5MDcwMDAwMDkwNzIwMDAwOTA3NEVDCi06MTA2MEIwMDAwMDAwOTA3NjAwMDA5MDc4MDAwMDkwN0EwMDAwOTA3Q0JDCi06MTA2MEMwMDAwMDAwOTA3RTAwMDA5MDgwMDAwMDkwODIwMDAwOTA4NDhDCi06MTA2MEQwMDAwMDAwOTA4NjAwMDA5MDg4MDAwMDkwOEEwMDAwOTA4QzVDCi06MTA2MEUwMDAwMDAwOTA4RTAwMDA5MDkwMDAwMDkwOTIwMDAwOTA5NDJDCi06MTA2MEYwMDAwMDAwOTA5NjAwMDA5MDk4MDAwMDkwOUEwMDAwOTA5Q0ZDCi06MTA2MTAwMDAwMDAwOTA5RTAwMDA5MEEwMDAwMDkwQTIwMDAwOTBBNENCCi06MTA2MTEwMDAwMDAwOTBBNjAwMDA5MEE4MDAwMDkwQUEwMDAwOTBBQzlCCi06MTA2MTIwMDAwMDAwOTBBRTAwMDA5MEIwMDAwMDkwQjIwMDAwOTBCNDZCCi06MTA2MTMwMDAwMDAwOTBCNjAwMDA5MEI4MDAwMDkwQkEwMDAwOTBCQzNCCi06MTA2MTQwMDAwMDAwOTBCRTAwMDA5MEMwMDAwMDkwQzIwMDAwOTBDNDBCCi06MTA2MTUwMDAwMDAwOTBDNjAwMDA5MEM4MDAwMDkwQ0EwMDAwOTBDQ0RCCi06MTA2MTYwMDAwMDAwOTBDRTAwMDA5MEQwMDAwMDkwRDIwMDAwOTBENEFCCi06MTA2MTcwMDAwMDAwOTBENjAwMDA5MEQ4MDAwMDkwREEwMDAwOTBEQzdCCi06MTA2MTgwMDAwMDAwOTBERTAwMDA5MEUwMDAwMDkwRTIwMDAwOTBFNDRCCi06MTA2MTkwMDAwMDAwOTBFNjAwMDA5MEU4MDAwMDkwRUEwMDAwOTBFQzFCCi06MTA2MUEwMDAwMDAwOTBFRTAwMDA5MEYwMDAwMDkwRjIwMDAwOTBGNEVCCi06MTA2MUIwMDAwMDAwOTBGNjAwMDA5MEY4MDAwMDkwRkEwMDAwOTBGQ0JCCi06MTA2MUMwMDAwMDAwOTBGRTAwMDA5MTAwMDAwMDkxMDIwMDAwOTEwNDg4Ci06MTA2MUQwMDAwMDAwOTEwNjAwMDA5MTA4MDAwMDkxMEEwMDAwOTEwQzU3Ci06MTA2MUUwMDAwMDAwOTEwRTAwMDA5MTEwMDAwMDkxMTIwMDAwOTExNDI3Ci06MTA2MUYwMDAwMDAwOTExNjAwMDA5MTE4MDAwMDkxMUEwMDAwOTExQ0Y3Ci06MTA2MjAwMDAwMDAwOTExRTAwMDA5MTIwMDAwMDkxMjIwMDAwOTEyNEM2Ci06MTA2MjEwMDAwMDAwOTEyNjAwMDA5MTI4MDAwMDkxMkEwMDAwOTEyQzk2Ci06MTA2MjIwMDAwMDAwOTEyRTAwMDA5MTMwMDAwMDkxMzIwMDAwOTEzNDY2Ci06MTA2MjMwMDAwMDAwOTEzNjAwMDA5MTM4MDAwMDkxM0EwMDAwOTEzQzM2Ci06MTA2MjQwMDAwMDAwOTEzRTAwMDA5MTQwMDAwMDkxNDIwMDAwOTE0NDA2Ci06MTA2MjUwMDAwMDAwOTE0NjAwMDA5MTQ4MDAwMDkxNEEwMDAwOTE0Q0Q2Ci06MTA2MjYwMDAwMDAwOTE0RTAwMDA5MTUwMDAwMDkxNTIwMDAwOTE1NEE2Ci06MTA2MjcwMDAwMDAwOTE1NjAwMDA5MTU4MDAwMDkxNUEwMDAwOTE1Qzc2Ci06MTA2MjgwMDAwMDAwOTE1RTAwMDA5MTYwMDAwMDkxNjIwMDAwOTE2NDQ2Ci06MTA2MjkwMDAwMDAwOTE2NjAwMDA5MTY4MDAwMDkxNkEwMDAwOTE2QzE2Ci06MTA2MkEwMDAwMDAwOTE2RTAwMDA5MTcwMDAwMDkxNzIwMDAwOTE3NEU2Ci06MTA2MkIwMDAwMDAwOTE3NjAwMDA5MTc4MDAwMDkxN0EwMDAwOTE3Q0I2Ci06MTA2MkMwMDAwMDAwOTE3RTAwMDA5MTgwMDAwMDkxODIwMDAwOTE4NDg2Ci06MTA2MkQwMDAwMDAwOTE4NjAwMDA5MTg4MDAwMDkxOEEwMDAwOTE4QzU2Ci06MTA2MkUwMDAwMDAwOTE4RTAwMDA5MTkwMDAwMDkxOTIwMDAwOTE5NDI2Ci06MTA2MkYwMDAwMDAwOTE5NjAwMDA5MTk4MDAwMDkxOUEwMDAwOTE5Q0Y2Ci06MTA2MzAwMDAwMDAwOTE5RTAwMDA5MUEwMDAwMDkxQTIwMDAwOTFBNEM1Ci06MTA2MzEwMDAwMDAwOTFBNjAwMDA5MUE4MDAwMDkxQUEwMDAwOTFBQzk1Ci06MTA2MzIwMDAwMDAwOTFBRTAwMDA5MUIwMDAwMDkxQjIwMDAwOTFCNDY1Ci06MTA2MzMwMDAwMDAwOTFCNjAwMDA5MUI4MDAwMDkxQkEwMDAwOTFCQzM1Ci06MTA2MzQwMDAwMDAwOTFCRTAwMDA5MUMwMDAwMDkxQzIwMDAwOTFDNDA1Ci06MTA2MzUwMDAwMDAwOTFDNjAwMDA5MUM4MDAwMDkxQ0EwMDAwOTFDQ0Q1Ci06MTA2MzYwMDAwMDAwOTFDRTAwMDA5MUQwMDAwMDkxRDIwMDAwOTFENEE1Ci06MTA2MzcwMDAwMDAwOTFENjAwMDA5MUQ4MDAwMDkxREEwMDAwOTFEQzc1Ci06MTA2MzgwMDAwMDAwOTFERTAwMDA5MUUwMDAwMDkxRTIwMDAwOTFFNDQ1Ci06MTA2MzkwMDAwMDAwOTFFNjAwMDA5MUU4MDAwMDkxRUEwMDAwOTFFQzE1Ci06MTA2M0EwMDAwMDAwOTFFRTAwMDA5MUYwMDAwMDkxRjIwMDAwOTFGNEU1Ci06MTA2M0IwMDAwMDAwOTFGNjAwMDA5MUY4MDAwMDkxRkEwMDAwOTFGQ0I1Ci06MTA2M0MwMDAwMDAwOTFGRUZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjRBCi06MTA2M0QwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkNECi06MTA2M0UwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkJECi06MTA2M0YwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkFECi06MTA2NDAwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjlDCi06MTA2NDEwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjhDCi06MTA2NDIwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjdDCi06MTA2NDMwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjZDCi06MTA2NDQwMDBGRkZGRkZGRjAwMDAwMDAzMDBCRUJDMjAwMDAwMDAwMEIzCi06MTA2NDUwMDAwMDAwMDAwNTAwMDAwMDAzMDBCRUJDMjAwMDAwMDAwMDlBCi06MTA2NDYwMDAwMDAwMDAwNTAwMDAwMDAzMDBCRUJDMjAwMDAwMDAwMDhBCi06MTA2NDcwMDAwMDAwMDAwNTAwMDAwMDAzMDBCRUJDMjAwMDAwMDAwMDdBCi06MTA2NDgwMDAwMDAwMDAwNTAwMDAwMDAzMDBCRUJDMjAwMDAwMDAwMDZBCi06MTA2NDkwMDAwMDAwMDAwNTAwMDAwMDAzMDBCRUJDMjAwMDAwMDAwMDVBCi06MTA2NEEwMDAwMDAwMDAwNTAwMDAwMDAzMDBCRUJDMjAwMDAwMDAwMDRBCi06MTA2NEIwMDAwMDAwMDAwNTAwMDAwMDAzMDBCRUJDMjAwMDAwMDAwMDNBCi06MTA2NEMwMDAwMDAwMDAwNTAwMDAyMDAwMDAwMDQwQzAwMDAwNjE4MEM2Ci06MTA2NEQwMDAwMDAwODI0MDAwMDBBMzAwMDAwMEMzQzAwMDAwRTQ4MDcwCi06MTA2NEUwMDAwMDAxMDU0MDAwMDEyNjAwMDAwMTQ2QzAwMDAxNjc4MDUwCi06MTA2NEYwMDAwMDAxODg0MDAwMDFBOTAwMDAwMUM5QzAwMDAxRUE4MDM0Ci06MTA2NTAwMDAwMDAyMEI0MDAwMDIyQzAwMDAwMjRDQzAwMDAyNkQ4MDEzCi06MTA2NTEwMDAwMDAyOEU0MDAwMDJBRjAwMDAwMkNGQzAwMDAyRjA4MEY3Ci06MTA2NTIwMDAwMDAwMTE0MDAwMDA4MDAwMDAwMTAzODAwMDAxODcwMDhFCi06MTA2NTMwMDAwMDAyMEE4MDAwMDI4RTAwMDAwMzExODAwMDAzOTUwMDEzCi06MTA2NTQwMDAwMDA0MTg4MDAwMDQ5QzAwMDAwNTFGODAwMDA1QTMwMEMzCi06MTA2NTUwMDAwMDA2MjY4MDAwMDZBQTAwMDAwNzJEODAwMDA3QjEwMDczCi06MTA2NTYwMDAwMDA4MzQ4MDAwMDhCODAwMDAwOTNCODAwMDA5QkYwMDIzCi06MTA2NTcwMDAwMDBBNDI4MDAwMEFDNjAwMDAwQjQ5ODAwMDBCQ0QwMEQzCi06MTA2NTgwMDAwMDBDNTA4MDAwMENENDAwMDAwRDU3ODAwMDAwNUIwMDEwCi06MTA2NTkwMDAwMDAwN0ZGODAwMDA3RkY4MDAwMDAwRDUwMDAwMTUwMDIzCi06MTA2NUEwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMEVECi06MTA2NUIwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMERECi06MTA2NUMwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMENECi06MTA2NUQwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMEJECi06MTA2NUUwMDAwMDAwMTkwMDAwMDAwMDAwMDAwMDAwMDBGRkZGRkZGRjk2Ci06MTA2NUYwMDAwMDAwMDAwMDAzOTM4NzAwMDAwMDAwMDAwMzkzODcwMDYxCi06MTA2NjAwMDAwMDAwN0ZGODAwMDA3RkY4MDAwMDA2OTIwMDAwMTUwMEVGCi06MTA2NjEwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjY0Ci06MTA2NjIwMDAwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDYxCi06MTA2NjMwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwRkZGRkZGRjQ0Ci06MTA2NjQwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDQxCi06MTA2NjUwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjI0Ci06MTA2NjYwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjE0Ci06MTA2NjcwMDAwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDExCi06MTA2NjgwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwRkZGRkZGRkY0Ci06MTA2NjkwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMEYxCi06MTA2NkEwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRkQ0Ci06MTA2NkIwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRkM0Ci06MTA2NkMwMDAwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMEMxCi06MTA2NkQwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwRkZGRkZGRkE0Ci06MTA2NkUwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMEExCi06MTA2NkYwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjg0Ci06MTA2NzAwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjczCi06MTA2NzEwMDAwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDcwCi06MTA2NzIwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwRkZGRkZGRjUzCi06MTA2NzMwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDUwCi06MTA2NzQwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjMzCi06MTA2NzUwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjIzCi06MTA2NzYwMDAwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDIwCi06MTA2NzcwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwRkZGRkZGRjAzCi06MTA2NzgwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwCi06MTA2NzkwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRkUzCi06MTA2N0EwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRkQzCi06MTA2N0IwMDAwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMEQwCi06MTA2N0MwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwRkZGRkZGRkIzCi06MTA2N0QwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMEIwCi06MTA2N0UwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjkzCi06MTA2N0YwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjgzCi06MTA2ODAwMDAwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDdGCi06MTA2ODEwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwRkZGRkZGRjYyCi06MTA2ODIwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDVGCi06MTA2ODMwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjQyCi06MTA2ODQwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjMyCi06MTA2ODUwMDAwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDJGCi06MTA2ODYwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwRkZGRkZGRjEyCi06MTA2ODcwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDBGCi06MTA2ODgwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRkYyCi06MTA2ODkwMDAwMDAwMDBGRjAwMDAwMEZGMDAwMDAwRkYwMDAwMDBGRkZDCi06MTA2OEEwMDAwMDAwMDBGRjAwMDAwMEZGMDAwMDAwRkYwMDAwMDBGRkVDCi06MTA2OEIwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMERBCi06MTA2OEMwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMENBCi06MTA2OEQwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMEJBCi06MTA2OEUwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMEFBCi06MTA2OEYwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkE4Ci06MTA2OTAwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjk3Ci06MTA2OTEwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjg3Ci06MTA2OTIwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjc3Ci06MTA2OTMwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjY3Ci06MTA2OTQwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjU3Ci06MTA2OTUwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjQ3Ci06MTA2OTYwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjM3Ci06MTA2OTcwMDAwMDAwMTAwMDAwMDAyMDgwMDAwMDMxMDAwMDAwNDE4MDc1Ci06MTA2OTgwMDAwMDAwNTIwMDAwMDA2MjgwMDAwMDczMDAwMDAwODM4MDVECi06MTA2OTkwMDAwMDAwOTQwMDAwMDBBNDgwMDAwMEI1MDAwMDAwQzU4MDQ1Ci06MTA2OUEwMDAwMDAwRDYwMDAwMDBFNjgwMDAwMEY3MDAwMDAxMDc4MDJDCi06MTA2OUIwMDAwMDAxMTgwMDAwMDEyODgwMDAwMTM5MDAwMDAxNDk4MDExCi06MTA2OUMwMDAwMDAxNUEwMDAwMDE2QTgwMDAwMTdCMDAwMDAxOEI4MEY5Ci06MTA2OUQwMDAwMDAxOUMwMDAwMDFBQzgwMDAwMUJEMDAwMDAxQ0Q4MEUxCi06MTA2OUUwMDAwMDAxREUwMDAwMDFFRTgwMDAwMUZGMDAwMDAwMEY4MENBCi06MTA2OUYwMDAwMDAwN0ZGODAwMDA3RkY4MDAwMDAzNDAwMDAwMTUwMDUxCi06MTA2QTAwMDAxMDAwMDAwMDAwMDAyOEFEMDAwMTAwMDEwMDIyMDAwNjc3Ci06MTA2QTEwMDBDQ0NDQ0NDNUZGRkZGRkZGRkZGRkZGRkY3MDU4MTAzQzQxCi06MTA2QTIwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDY4Ci06MTA2QTMwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDU4Ci06MTA2QTQwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDQ4Ci06MTA2QTUwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDM4Ci06MTA2QTYwMDAwMDAwMDAwMDAwMDAwMDAxQ0NDQzAyMDFDQ0NDQ0NDQzVBCi06MTA2QTcwMDBDQ0NDMDIwMUNDQ0NDQ0NDQ0NDQzAyMDFDQ0NDQ0NDQzgwCi06MTA2QTgwMDBDQ0NDMDIwMUNDQ0NDQ0NDQ0NDQzAyMDFDQ0NDQ0NDQzcwCi06MTA2QTkwMDBDQ0NDMDIwMUNDQ0NDQ0NDQ0NDQzAyMDFDQ0NDQ0NDQzYwCi06MTA2QUEwMDBDQ0NDMDIwMUNDQ0NDQ0NDMDAwMDAwMDBGRkZGRkZGRjFGCi06MTA2QUIwMDAwMDBFMDAwMDAxMTYwMEQ2MDAyNjI1QTAwMDI2MjVBMDA1Ci06MTA2QUMwMDAwMDI2MjVBMDAwMjYyNUEwMDA3MjAwMDAwMTIzMDBGMzY3Ci06MTA2QUQwMDAwMDI2MjVBMDAwMjYyNUEwMDAyNjI1QTAwMDI2MjVBMDBBCi06MTA2QUUwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEFBCi06MTA2QUYwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDlBCi06MTA2QjAwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDg5Ci06MTA2QjEwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDc5Ci06MTA2QjIwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDY5Ci06MTA2QjMwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDU5Ci06MTA2QjQwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDQ5Ci06MTA2QjUwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDM5Ci06MTA2QjYwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDI5Ci06MTA2QjcwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDE5Ci06MTA2QjgwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDA5Ci06MTA2QjkwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEY5Ci06MTA2QkEwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEU5Ci06MTA2QkIwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEQ5Ci06MTA2QkMwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEM5Ci06MTA2QkQwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEI5Ci06MTA2QkUwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEE5Ci06MTA2QkYwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDk5Ci06MTA2QzAwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDg4Ci06MTA2QzEwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDc4Ci06MTA2QzIwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDY4Ci06MTA2QzMwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDU4Ci06MTA2QzQwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDQ4Ci06MTA2QzUwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDM4Ci06MTA2QzYwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDI4Ci06MTA2QzcwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDE4Ci06MTA2QzgwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDA4Ci06MTA2QzkwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEY4Ci06MTA2Q0EwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEU4Ci06MTA2Q0IwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEQ4Ci06MTA2Q0MwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEM4Ci06MTA2Q0QwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEI4Ci06MTA2Q0UwMDBGRkZGRkZGMzMxOEZGRkZGMEMzMEMzMENDMzBDMzBDMzI5Ci06MTA2Q0YwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwMENGM0NDRENEQ0RDRDY2Ci06MTA2RDAwMDBGRkZGRkZGMTMwRUZGRkZGMEMzMEMzMENDMzBDMzBDM0FCCi06MTA2RDEwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwMUNGM0NDRENEQ0RDRDQ0Ci06MTA2RDIwMDBGRkZGRkZGNjMwNUZGRkZGMEMzMEMzMENDMzBDMzBDMzE2Ci06MTA2RDMwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwMkNGM0NDRENEQ0RDRDIzCi06MTA2RDQwMDBGRkZGRjQwNjFDQkZGRkZGMEMzMEMzMDVDMzBDMzBDM0FDCi06MTA2RDUwMDBDRjMwMDAxNEYzQ0YzQ0YzMDAwNENGM0NDRENEQ0RDREVDCi06MTA2RDYwMDBGRkZGRkZGMjMwNEZGRkZGMEMzMEMzMENDMzBDMzBDM0VBCi06MTA2RDcwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwOENGM0NDRENEQ0RDRERECi06MTA2RDgwMDBGRkZGRkZGQTMwMkZGRkZGMEMzMEMzMENDMzBDMzBDM0UyCi06MTA2RDkwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAxMENGM0NDRENEQ0RDREI1Ci06MTA2REEwMDBGRkZGRkZGNzMxRUZGRkZGMEMzMEMzMENDMzBDMzBDMzA0Ci06MTA2REIwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAyMENGM0NDRENEQ0RDRDg1Ci06MTA2REMwMDBGRkZGRkZGNTMwMkZGRkZGMEMzMEMzMENDMzBDMzBDM0E3Ci06MTA2REQwMDBDRjNDRjMwMEYzQ0YzQ0YzMDA0MENGM0NDRENEQ0RDRDQ1Ci06MTA2REUwMDBGRkZGRkZGMzMxOEZGRkZGMEMzMEMzMENDMzBDMzBDMzI4Ci06MTA2REYwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwMENGM0NDRENEQ0RDRDY1Ci06MTA2RTAwMDBGRkZGRkZGMTMxMEZGRkZGMEMzMEMzMENDMzBDMzBDMzg5Ci06MTA2RTEwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwMUNGM0NDRENEQ0RDRDQzCi06MTA2RTIwMDBGRkZGRkZGNjMwNUZGRkZGMEMzMEMzMENDMzBDMzBDMzE1Ci06MTA2RTMwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwMkNGM0NDRENEQ0RDRDIyCi06MTA2RTQwMDBGRkZGRjQwNjFDQkZGRkZGMEMzMEMzMDVDMzBDMzBDM0FCCi06MTA2RTUwMDBDRjMwMDAxNEYzQ0YzQ0YzMDAwNENGM0NDRENEQ0RDREVCCi06MTA2RTYwMDBGRkZGRkZGMjMwNEZGRkZGMEMzMEMzMENDMzBDMzBDM0U5Ci06MTA2RTcwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwOENGM0NDRENEQ0RDRERDCi06MTA2RTgwMDBGRkZGRkZGQTMwMkZGRkZGMEMzMEMzMENDMzBDMzBDM0UxCi06MTA2RTkwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAxMENGM0NDRENEQ0RDREI0Ci06MTA2RUEwMDBGRkZGRkZGNzMwRUZGRkZGMEMzMEMzMENDMzBDMzBDMzA0Ci06MTA2RUIwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAyMENGM0NDRENEQ0RDRDg0Ci06MTA2RUMwMDBGRkZGRkZGNTMwNEZGRkZGMEMzMEMzMENDMzBDMzBDMzg2Ci06MTA2RUQwMDBDRjNDRjMwMEYzQ0YzQ0YzMDA0MENGM0NDRENEQ0RDRDQ0Ci06MTA2RUUwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0RDCi06MTA2RUYwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwMENGM0NDRENEQ0RDRDk4Ci06MTA2RjAwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0JCCi06MTA2RjEwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwMUNGM0NDRENEQ0RDRDc2Ci06MTA2RjIwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzlCCi06MTA2RjMwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwMkNGM0NDRENEQ0RDRDU1Ci06MTA2RjQwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzdCCi06MTA2RjUwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwNENGM0NDRENEQ0RDRDMzCi06MTA2RjYwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzVCCi06MTA2RjcwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwOENGM0NDRENEQ0RDRDBGCi06MTA2RjgwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzNCCi06MTA2RjkwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAxMENGM0NDRENEQ0RDREU3Ci06MTA2RkEwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzFCCi06MTA2RkIwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAyMENGM0NDRENEQ0RDREI3Ci06MTA2RkMwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0ZCCi06MTA2RkQwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDA0MENGM0NDRENEQ0RDRDc3Ci06MTA2RkUwMDBGRkZGRkZGMzMyMEZGRkZGMEMzMEMzMENDMzBDMzBDM0E1Ci06MTA2RkYwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwMENGM0NDRENEQ0RDRDYzCi06MTA3MDAwMDBGRkZGRkZGMTMxMEZGRkZGMEMzMEMzMENDMzBDMzBDMzg3Ci06MTA3MDEwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwMUNGM0NDRENEQ0RDRDQxCi06MTA3MDIwMDBGRkZGRkZGNjMwNUZGRkZGMEMzMEMzMENDMzBDMzBDMzEzCi06MTA3MDMwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwMkNGM0NDRENEQ0RDRDIwCi06MTA3MDQwMDBGRkZGRjQwNjFDQkZGRkZGMEMzMEMzMDVDMzBDMzBDM0E5Ci06MTA3MDUwMDBDRjMwMDAxNEYzQ0YzQ0YzMDAwNENGM0NDRENEQ0RDREU5Ci06MTA3MDYwMDBGRkZGRkZGMjMwNEZGRkZGMEMzMEMzMENDMzBDMzBDM0U3Ci06MTA3MDcwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwOENGM0NDRENEQ0RDRERBCi06MTA3MDgwMDBGRkZGRkY4QTA0MkZGRkZGMEMzMEMzMENDMzBDMzBDMzdCCi06MTA3MDkwMDBDRjNDQzAwMEYzQ0YzQ0YzMDAxMENGM0NDRENEQ0RDREU1Ci06MTA3MEEwMDBGRkZGRkY5NzA1Q0ZGRkZGMEMzMEMzMENDMzBDMzBDM0FECi06MTA3MEIwMDBDRjNDQzAwMEYzQ0YzQ0YzMDAyMENGM0NDRENEQ0RDREI1Ci06MTA3MEMwMDBGRkZGRkZGNTMxMEZGRkZGMEMzMEMzMENDMzBDMzBDM0MzCi06MTA3MEQwMDBDRjNDRjMwMEYzQ0YzQ0YzMDA0MENGM0NDRENEQ0RDRDQyCi06MTA3MEUwMDBGRkZGRkZGMzMyMEZGRkZGMEMzMEMzMENDMzBDMzBDM0E0Ci06MTA3MEYwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwMENGM0NDRENEQ0RDRDYyCi06MTA3MTAwMDBGRkZGRkZGMTMwMkZGRkZGMEMzMEMzMENDMzBDMzBDMzY3Ci06MTA3MTEwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwMUNGM0NDRENEQ0RDRDQwCi06MTA3MTIwMDBGRkZGRkZGNjMwNUZGRkZGMEMzMEMzMENDMzBDMzBDMzEyCi06MTA3MTMwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwMkNGM0NDRENEQ0RDRDFGCi06MTA3MTQwMDBGRkZGRkYwNjFDQkZGRkZGMEMzMEMzMENDMzBDMzBDMzk2Ci06MTA3MTUwMDBDRjNDQzAxNEYzQ0YzQ0YzMDAwNENGM0NDRENEQ0RDRDFDCi06MTA3MTYwMDBGRkZGRkZGMjMwNEZGRkZGMEMzMEMzMENDMzBDMzBDM0U2Ci06MTA3MTcwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwOENGM0NDRENEQ0RDREQ5Ci06MTA3MTgwMDBGRkZGRkZGQTMwMkZGRkZGMEMzMEMzMENDMzBDMzBDM0RFCi06MTA3MTkwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAxMENGM0NDRENEQ0RDREIxCi06MTA3MUEwMDBGRkZGRkZGNzMxQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzIwCi06MTA3MUIwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAyMENGM0NDRENEQ0RDRDgxCi06MTA3MUMwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0Y5Ci06MTA3MUQwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDA0MENGM0NDRENEQ0RDRDc1Ci06MTA3MUUwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0Q5Ci06MTA3MUYwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwMENGM0NDRENEQ0RDRDk1Ci06MTA3MjAwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0I4Ci06MTA3MjEwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwMUNGM0NDRENEQ0RDRDczCi06MTA3MjIwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzk4Ci06MTA3MjMwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwMkNGM0NDRENEQ0RDRDUyCi06MTA3MjQwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzc4Ci06MTA3MjUwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwNENGM0NDRENEQ0RDRDMwCi06MTA3MjYwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzU4Ci06MTA3MjcwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwOENGM0NDRENEQ0RDRDBDCi06MTA3MjgwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzM4Ci06MTA3MjkwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAxMENGM0NDRENEQ0RDREU0Ci06MTA3MkEwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzE4Ci06MTA3MkIwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAyMENGM0NDRENEQ0RDREI0Ci06MTA3MkMwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0Y4Ci06MTA3MkQwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDA0MENGM0NDRENEQ0RDRDc0Ci06MTA3MkUwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0Q4Ci06MTA3MkYwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwMENGM0NDRENEQ0RDRDk0Ci06MTA3MzAwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0I3Ci06MTA3MzEwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwMUNGM0NDRENEQ0RDRDcyCi06MTA3MzIwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzk3Ci06MTA3MzMwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwMkNGM0NDRENEQ0RDRDUxCi06MTA3MzQwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzc3Ci06MTA3MzUwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwNENGM0NDRENEQ0RDRDJGCi06MTA3MzYwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzU3Ci06MTA3MzcwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwOENGM0NDRENEQ0RDRDBCCi06MTA3MzgwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzM3Ci06MTA3MzkwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAxMENGM0NDRENEQ0RDREUzCi06MTA3M0EwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzE3Ci06MTA3M0IwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAyMENGM0NDRENEQ0RDREIzCi06MTA3M0MwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0Y3Ci06MTA3M0QwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDA0MENGM0NDRENEQ0RDRDczCi06MTA3M0UwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0Q3Ci06MTA3M0YwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwMENGM0NDRENEQ0RDRDkzCi06MTA3NDAwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0I2Ci06MTA3NDEwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwMUNGM0NDRENEQ0RDRDcxCi06MTA3NDIwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzk2Ci06MTA3NDMwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwMkNGM0NDRENEQ0RDRDUwCi06MTA3NDQwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzc2Ci06MTA3NDUwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwNENGM0NDRENEQ0RDRDJFCi06MTA3NDYwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzU2Ci06MTA3NDcwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwOENGM0NDRENEQ0RDRDBBCi06MTA3NDgwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzM2Ci06MTA3NDkwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAxMENGM0NDRENEQ0RDREUyCi06MTA3NEEwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzE2Ci06MTA3NEIwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAyMENGM0NDRENEQ0RDREIyCi06MTA3NEMwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0Y2Ci06MTA3NEQwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDA0MENGM0NDRENEQ0RDRDcyCi06MTA3NEUwMDAwMDBDMDAwMDAwMDcwMEMwMDAwMjgxMzAwMDBCODE1ODMyCi06MTA3NEYwMDAwMDAyMDIxMDAwMDEwMjMwMDAwRjAyNDAwMDAxMDMzMEMwCi06MTA3NTAwMDAwMDBDMDAwMDAwMDgwMEMwMDAwMjgxNDAwMDBCODE2OEYwCi06MTA3NTEwMDAwMDAyMDIyMDAwMDEwMjQwMDAwNzAyNTAwMDAyMDJDMEU3Ci06MTA3NTIwMDAwMDEwMDAwMDAwMDgwMTAwMDAwMjgxODAwMDBCODFBODBCCi06MTA3NTMwMDAwMDAyMDI2MDAwMDE4MjgwMDAwRTgyOTgwMDA4MDM4MDMxCi06MTA3NTQwMDAwMDEwMDAwMDAwMDEwMTAwMDAwMjgxMTAwMDA5MDEzODU0Ci06MTA3NTUwMDAwMDAyMDFDODAwMDEwMUU4MDAwRTAxRjgwMDAwMDJEODk1Ci06MTA3NTYwMDBDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQzVCCi06MTA3NTcwMDAwMDAwMjAwMENDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQzVCCi06MTA3NTgwMDBDQ0NDQ0NDQzAwMDAyMDAwQ0NDQ0NDQ0NDQ0NDQ0NDQzRCCi06MTA3NTkwMDBDQ0NDQ0NDQ0NDQ0NDQ0NDMDQwMDIwMDAwMDAwMDAwMDY3Ci06MTA3NUEwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkZCNTFDRkMwRjAwMzUwCi06MTA3NUIwMDA4QTM3QjIzMTMwNkNFMzQ0RjBFOTgxNTkxODE4MThGODcxCi06MTA3NUMwMDA5OUM4RDdCRjA2NjhDMDE2MjBCRTBDQzQ3QjU4NDhEN0UwCi06MTA3NUQwMDA3RjVFMUFDMTVFMjBDOUMwNzAwNDg4QkJDNTE5MThFQTU1Ci06MTA3NUUwMDBBNTEwRTI5NjMyMEMwQzM3ODBGQ0M1NTAzMTA5QTA5RUU0Ci06MTA3NUYwMDA2OUQyRTRCQjc5MTQwRjFFOUM2NDhBQ0E3NzM1ODZEMEExCi06MTA3NjAwMDAzNzREMjA3NDMyOUFCQzFCNTQ1RTUwMEY0MkE3OTg2MkNCCi06MTA3NjEwMDAzNzU3NDg4RjM4RkIxMzU0RDBFQzU3QzFBRjNFNUQwMzRBCi06MTA3NjIwMDA5NTFGOEVBNkRFMEZDQTA3MDBEQ0VDOTE0RUQ4MDMwMDMyCi06MTA3NjMwMDAwMDAwMDAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMDk4Ci06MTA3NjQwMDAwMDBCRUQ3RDBCNzgxNUQ1QjlFODlBQzc5RTNERkI5OUU3Ci06MTA3NjUwMDA0OTA4NjEyNzA0OUM4NDAwQzFGMkQ4NDI4MEEwMTQyNzA1Ci06MTA3NjYwMDAxMDMwQjZENDZFNUUxMkJEMDgxQjFGOTU4NzI0MTFEMzRGCi06MTA3NjcwMDA2MzVBMzlDRDQwMUUyNDAxMjQzRTRBRTkyREQ1MERDNTVCCi06MTA3NjgwMDAzNjdBNkQxQjZENkE2OThGRjY2QzQ0MkQ5RURCRDMwM0QxCi06MTA3NjkwMDA5NDJBQURFMDA5NkEyRDU4QTBCMUE3MUM2OEJGQjZEQ0RBCi06MTA3NkEwMDBGNUFGNDdGNkNDNjQ3NjFFM0VGQUY1N0NCN0YxOTNDOTg4Ci06MTA3NkIwMDA5QTU5Q0ZGRkJERkVGRjVGMkIwQTJBNDQzOTU3MjE3NDI4Ci06MTA3NkMwMDAwNTdFQUU0N0M4MTAxMDQyRDM1MzRGNzQ0Rjg2ODg3MjYwCi06MTA3NkQwMDAxMEZBQkM4QUM4Q0YyNTVGNzgzMkNBNDBBODRFQTVDRjIxCi06MTA3NkUwMDBGQkZERTE3REYwNkNBQjQ3MjgzOTFFQkU4RjRFQTAzMDBDCi06MTA3NkYwMDA0MjAxODQ4QUU1NkM2OEUxOEYzRTUxMDBDRjlBMjlCMTNFCi06MTA3NzAwMDA0OUU0MzkxMzlFNTk0ODQ0NjgzODk0RjNCNTc3MDNCNDczCi06MTA3NzEwMDBFRjJCMTJGRUU3NjRCQzBDQzY5M0U4MkIyNEEzRDI2OEJGCi06MTA3NzIwMDA5MkI0N0YwMEExMTlBOTc5QTA5QUNGNkFCMTUwNkFERUZDCi06MTA3NzMwMDBDRUE3QTQyOTI4QzlFQTVFODE3RkE0MTUxOUYxNjBGQUIxCi06MTA3NzQwMDBGQTc1Mjc4NUVGQkU2NEE5M0YxNjg1QjJDOUJDNjQyNENCCi06MTA3NzUwMDA5Mzc5QjFGNjA4OTlDODNBM0Y2NzNGOTdFQUQxNzc1RkM2Ci06MTA3NzYwMDAxQURCMTc2RUU5QzZFNTcwNkJBOTU3QzlCM0I5NUU0MzVBCi06MTA3NzcwMDA0OTJGNDJCODk5RDEzOTExM0Y4M0M4RDgzN0IxNkZCQjZGCi06MTA3NzgwMDA3MjI0MzBGOEIxRjlDMDM4M0FBRThGRkY0NzE4RUU4RDQ5Ci06MTA3NzkwMDBEOTI4MTEwMDFDQTJCODBENkU4REMxQzVBQUUxRDIxRjU3Ci06MTA3N0EwMDA3RkEyNkMwQ0I3NjIzNkU3QzJCRUVCRjVDMUJDMzAxQ0UxCi06MTA3N0IwMDA3QzMwMkYxNzc4MkU4Nzc5NERFRjNCMkY1RjkxNzM1RUNBCi06MTA3N0MwMDA2QjkwMTUzRTQzOUQ5NzdGMDI0MjQ3MDAxRkIyODExMDg4Ci06MTA3N0QwMDBDMUNCN0RCNkZFNDRDRDMwQkI1REZBNDM4QzJFNjQ5RDlCCi06MTA3N0UwMDBBRDZGOTA3ODBBMTQ4QkE5RjEwMTBFQkFERjQ2NUZERTA3Ci06MTA3N0YwMDA0ODk2OURERTlDNzQwREYwMjBGODZBNjdGMDg5NDk5NEU0Ci06MTA3ODAwMDAxRkNDMTQxRUYxMzM1MEFBMEJBODkwMTQ4RjAwREUyMjU3Ci06MTA3ODEwMDAwQ0VFOTEzQjlCRUYxNTMxNUY4NTUxQTI2NTFDRTY4NzBECi06MTA3ODIwMDA0OEY3RUE4NUMwNjdFMTkzMzc5RTQ1OTMzMUZDQTI1MzQwCi06MTA3ODMwMDBENTc5Nzg0RDVBODlGRUQwMDJGQzBDNENENDA0QTBEN0RGCi06MTA3ODQwMDAzNkUwQjM2QkExQkY1QkNDMzI1QzZFODBDRUYyNzBEMTAwCi06MTA3ODUwMDBCQ0M5MzAwOURDMEMxQkRDMzBFNDc0MTk5NzNERjA2QkJCCi06MTA3ODYwMDBBMTBCRkM1MDJGMUU4NDJCREVCRUVERDNDMUNGODMyQzg5Ci06MTA3ODcwMDBGODIzRkNCQ0QxNDY5NzY5RjExRUE3RUQ0Q0ZDMUZFMDM0Ci06MTA3ODgwMDAyQkNCRDE4RjU2NkVFN0YzMzBCMjk0RjFGN0E3RTAxNzA4Ci06MTA3ODkwMDAwMkVGN0JGRjI2RTM2NUEyN0RBQTVFODJENzVCMkM2QTlFCi06MTA3OEEwMDAwOUE4OEZGNDRDMTk5NzAzMTUzMjAyMzk5Njk5OEQwRTU5Ci06MTA3OEIwMDA2MjhDMEM4ODk3NDY4NDJBODBGRjExRUE0NDhCMjZBNUE3Ci06MTA3OEMwMDBFNkY3QUY4Q0JGNzIzRkY3RThFQTY2Q0M0RjE3NEI4MzAxCi06MTA3OEQwMDA1MUUwQUY4ODg2RDBCMEFDQkVFQkQ5Q0VFNDRCNkYzOTY3Ci06MTA3OEUwMDBGQTJDOEE0Rjg0RjExMjJEODU3ODVFNjY1NDhDM0UwMTA1Ci06MTA3OEYwMDBGMzI5N0U1MThCNUJGOEU1NzRBRjdDNzFEMjA3RDJFNTNBCi06MTA3OTAwMDAxOTRDMUU2MEY4NDhDNUEyRTE5QkZDRTFFOTQzRkE4MEVFCi06MTA3OTEwMDBGNDExOEMyQjM2QkUxQzJBQkUyRTBDOTEzRTNFRUM3ODA4Ci06MTA3OTIwMDAxQ0FGN0RGOTZBMzNDMzZCQTMwQUYyQUM0NTVGRENBRkQxCi06MTA3OTMwMDBCRUVBOEJENzdEMDhFQTA3OEE5MTkxNzA2OUY3NUY1Njk2Ci06MTA3OTQwMDA3REUxN0M1QUU0QkI1MzhFNEEyMzY2NTRFRUVEMEY2RjAzCi06MTA3OTUwMDBEOTc2NzhGMDdFN0Q3NTkyRkVDRTMwNUM5NDM1MjI1RkNDCi06MTA3OTYwMDAxNUE2MDc1QTIzMEY5QjA4RDNERDQ1OTAzRDE4MUU1MkRDCi06MTA3OTcwMDBGQjM1NDkyOEEzMjI0NEU4MTBGRjI0MDU1Q0Y2NDU4QzFBCi06MTA3OTgwMDA0NDFCQTE4MzA0QzEwQjlGOUY1NzE3NkRGMDk1QjNFRDY2Ci06MTA3OTkwMDA3MjE4NTU5QTgyNzVGRUJFM0E4NUNDNDM4MUYxQjJDMTA4Ci06MTA3OUEwMDAyRUMwMUQ2MjUwQzg0MTk0RjQ4NUExMDY5RDNGQThBNDM1Ci06MTA3OUIwMDAyQjYzQTA2Q0I3MzM1QUY0QTlDODBEMEYzMkMzQUIyMEE4Ci06MTA3OUMwMDA3MDdBN0Q2MDcwRjJDNTM5REU1MkZCN0MwN0REMkUyOEFGCi06MTA3OUQwMDBFQkVGRjIzNjJFNzIzQUQ1NEU0NkVGNzJGQzYwMjBDRUI3Ci06MTA3OUUwMDBFMTc2MURDM0QzNTYwRjNBMjA0Q0MxRjIyMEZGNjZCMDlBCi06MTA3OUYwMDAxNEQwNTZGODM0MEJEQjIxRjBDQ0M1RTVGQ0E5NDQyRTlECi06MTA3QTAwMDBBMDBFNDE4Njc5OTIyMTMxMUUxMUQ2Nzc1MDJGMjBFOEExCi06MTA3QTEwMDBBNDFGNTFBRDIxNzI0NTBBMUFFNEM5QkZBNzlGMTcxREMzCi06MTA3QTIwMDBCRkI3QUNDNkFCMDAzRjZCMjI4QURFODZFN0I4NUUzMkRBCi06MTA3QTMwMDBGNENENDAxN0QzQjA3Q0QyRTFGREI4NzJEMDczMUU4MTczCi06MTA3QTQwMDBDRUVCNEI0MjJFNTk4NzlDRDU5MjQzRUNCMjM0RjZEREY3Ci06MTA3QTUwMDAxQTE5RjNFNDU0RjhCRTdENUM3RkZDODQxMjlFOUU2RTdFCi06MTA3QTYwMDAwQjNDOURGNkUwREQwMkI2MDczRjgxN0Y5OTg5NjYwMkY3Ci06MTA3QTcwMDAxQzdGMUY1RDlDOTFFQzA3NUZFRkQ1MUZENkU0QjEyOUY5Ci06MTA3QTgwMDA3QkQwRjk3REJEODQ2QURDRTQ0MEIzQTA1MkJFNTQ0RDg2Ci06MTA3QTkwMDAwNUVDMDNCRUVFRjU5ODJGQkM1OUMwRTc1QkU4N0FCMzVFCi06MTA3QUEwMDBCMzA5N0NENzc3QkNBQUM5MTZGRTVCOEZENThDNzc2QUUxCi06MTA3QUIwMDBERkY1NzA3OEYzN0U3QURCMjcwRURCREEzQkRCRjVGNjU5Ci06MTA3QUMwMDBDN0U1MDVCNjg3ODFDRTM5MUQwNDg0RjgzNjAxQkZGN0I2Ci06MTA3QUQwMDA0NjE3OUI3OTMwRkVEMzY1MTRGRjY5RTZERjhCQUYwRjQ1Ci06MTA3QUUwMDAzODdGREU2RTIwQkFGQUZERkU4NjY2RDA0RkVGMkFFREIzCi06MTA3QUYwMDAzNzVEOEJFOUU4MzdDRjQ4RDEyREY4RUI5QTNERTNDQkUyCi06MTA3QjAwMDBDMTZFN0E5N0QxMzdDN0QzRDlGRDBEMzk2RUY0OTEwRTc2Ci06MTA3QjEwMDA0RkFGMEEzRTMyMEVBN0FGMzVFMjhBN0VFOTYxMjBGQTA2Ci06MTA3QjIwMDBGQTlFOTNCRTNBOTc3QzJDRjQ3NUM0NDk1RjBDMUVFNzBECi06MTA3QjMwMDAzQUU5RkFEMUVFNjExNDJGMEM1RjRFRkNBNEM1Q0IwN0Q1Ci06MTA3QjQwMDA2REQ3OTc5RTdFMjE2MEJFRjY3NjJFNzFBNzI3MzY1RjkxCi06MTA3QjUwMDA4RUFGMEYzQkRGODFFODI4NDczNzBDMEQ4RjNGMDJEQkVDCi06MTA3QjYwMDAzMTAyRTg4RjEyMTQ0REVBNjBENzQ1QTlERThBNTJCRDcyCi06MTA3QjcwMDBDNUU1MTI2RjdGNDFBMDc2OUE4QzhFOTNGNjEyNEE5QUQxCi06MTA3QjgwMDAxQUIxQjdFRDc2QzY3QzA5QkZDNEZEMzQxNkEzODQ5NzNECi06MTA3QjkwMDBFQzhCMEM5NUU4QTk2MjE5NTFGRDY3MDQ3MzcxRkQwQzFCCi06MTA3QkEwMDBDNDdFQTREOTUxNTg3NzA2QjNGRkQxNkNBNjdGMDU2QzZCCi06MTA3QkIwMDA2RkUxRjUwNTRCRUNGNjg3REY2MTlGNDhCMDVGMDhCQkNFCi06MTA3QkMwMDBEODVCNDNEQzFGRkI0NEI2M0YwRUEwMjBEMTQ3N0M3RjJGCi06MTA3QkQwMDA5Qzg2M0Y3QkY3QzUwQ0FFQzMxNTY0ODg3OEREQ0E2MTBGCi06MTA3QkUwMDA0RjYyOEIwMERBMEQxMUZEOEM0RTBBMDlFQTJGNDBDNTU5Ci06MTA3QkYwMDA2MDM3NkYxNEYyQTJBMDBGRjAzRUFGMjcwMzdGN0ZGNzJDCi06MTA3QzAwMDA5QjEyRDEwRjc1OTE5QTU1NERCMEVDOUJFQkM2NzdFMzYzCi06MTA3QzEwMDA3MTFGQUU0N0QzOEEzQ0E5RjExRTk2REI1NTgwNzc2QjY2Ci06MTA3QzIwMDBEMTQ2Q0RCQUFFQUYwOUYxMDJEMUEyNzc3QzExNjU1QTI3Ci06MTA3QzMwMDBEMTM0MTg0RTdFQUIxQkMzNDNDNDgwMDRGRUYzMDcxRjMwCi06MTA3QzQwMDA4REJDQUMwM0ZDRThGQjVFMzg1OUNCNTJERjcyMzZEOEYyCi06MTA3QzUwMDAzQzc5QTQ5ODA0M0JBRTM1ODRBODlEOEY0NjBBNjU5ODZDCi06MTA3QzYwMDAwRTVBM0RGQ0ZCRUI2NUIwREY2REY1RDFGMjlFMkRCM0Y2Ci06MTA3QzcwMDAzNjlCNTAxRUNFRUE5Qjk1RjQ3QjJFMkRERjI3M0U1MTdFCi06MTA3QzgwMDAwNkRGMTM5OTc4Q0Q1MzgwQUMxMzk1MzExN0ZFQkU0RkE0Ci06MTA3QzkwMDBBNDdFOTUwNjczNDZFQzJFMzIzRDZBN0Y1REM1RjdEOTBBCi06MTA3Q0EwMDA0QjZFOEFCRTBDQkYxNEU5MjNDMDdGMjIwNTYzQzRCRTlECi06MTA3Q0IwMDA5MTk4QkQyNjZCMjZENUUzNkFGNEYwNzgwQ0VGNTFDNzk2Ci06MTA3Q0MwMDAyNTY0NjIzODhDNkEzRjVBRTYwNTdBMEY3MjNCMkQ4QTJBCi06MTA3Q0QwMDA5NkUyRjY3NUNDMUZBMDIyQkEzRjA2QkZDRTE1NDJDNzZBCi06MTA3Q0UwMDBGQTA4RDhCNzIwQjBDRjJDRkI3Njg5RDk2M0JENzg3MjVCCi06MTA3Q0YwMDBFMEVEMTFCOTg2RTA2RDZCN0VFREUxMDIzQ0JFQjk1MDVFCi06MTA3RDAwMDA4QzAyRDk2Q0NEMkZDQzVDNkRDMUUzQjdENEI5OTUyMjcwCi06MTA3RDEwMDBEODMxOEREOUM0MkVFMUZCNjQ2MDE4MjhFNzkyMjkwMDgwCi06MTA3RDIwMDA2ODNCQ0JDMDc4Q0NDNzkyMEY2MTNBMUQxREVCMjkwMzhECi06MTA3RDMwMDAxNEU4OTVEQThCNjQ4RjhCQ0FCNTc3ODk1RDI1MDk1NzZFCi06MTA3RDQwMDAzRTMxNzgzQjBBRDYyRDAyQkQ2MkZBN0RDMkIyREU2MUI5Ci06MTA3RDUwMDAwMjhBQjlDOUREMTU3MjE2QzFDQkIwMEFCQ0RFN0VGQzQxCi06MTA3RDYwMDAwNDlGQzdGQTg0REE2NzcxMzUxNjRBM0Y0RUJBNzk3RUE2Ci06MTA3RDcwMDAwODc4NkUwMUJFMTg4OTEyMDQ0RTAzQzEzNTFEM0M5QjY0Ci06MTA3RDgwMDAyM0NGNjYxMjc5RkQxMUMzMzU1RDdCMjczQzg3MDk5NEFCCi06MTA3RDkwMDA1RjU2QzhBNTg0NUYwNkVCREY2OTgxRkQxNERFQUYzNjUwCi06MTA3REEwMDA4MTFGMEUzRjFCOTgxRkNFRDlERTI3QjdBM0E4MEI3RURECi06MTA3REIwMDA3REJBREQzRkE0NThFOTFFRkY1RjJCRUE1NDFGMDQ5REU2Ci06MTA3REMwMDA3RTIyOEE2N0E3NUU1OEMwRjQ0MjUzMDRFQjA1MkEwRjRGCi06MTA3REQwMDAxNzgyMUUwODMwRjgzNzQ1MTFGOUFFODQ1MEMyQzRERjRGCi06MTA3REUwMDAwM0EwMEZCMDlEODUyNjUyRjlBRkUyRkY4MERGNDY1NDE1Ci06MTA3REYwMDBEQUY1ODEzMjQ4N0RGMDhFMTA3Qjk5RjAxNzQ2MjFDQzYwCi06MTA3RTAwMDA2RkI3RDA3RUUzMzhBMDlGNUM2QThGNDc2RTZGODk1ODRBCi06MTA3RTEwMDBGRDA1QjUyMkQ1Nzc1QzlGM0Q1NkQ0M0I2RjAyM0YyRkMxCi06MTA3RTIwMDA5QkMzNjM1OEE0MDIzRDI2RjIxNzY3MTBCRkREOUQwMTc2Ci06MTA3RTMwMDA5QjdDOEE3QzY5MzFEOUZGNUFFODk5RUM3M0RCOTk3Rjg2Ci06MTA3RTQwMDAzNDFERkUzNDI1MTE3NzkzODdCQTI0OTI3OTg1OEQ5RTRGCi06MTA3RTUwMDAyNEY4RkMwODIxRTczMDk3MjEyMzZCMEE3RjY0REI4NzM1Ci06MTA3RTYwMDA4NUE3RjYxQzFFODNEN0ZCRjgzNTIyQjExQkU1RDk3MjE2Ci06MTA3RTcwMDBEMjgzRTEyQjk3QkU1MjI5RTBFN0UzQjAzNjgwQzcyQ0NFCi06MTA3RTgwMDA0NEU4MzRBODJGMzgyQjgxM0U5NkJCRDEyMkRDNUZCMDZBCi06MTA3RTkwMDBDMkI5MkZCNjk0MjVFOEE3NjcyNUQxREY1NjNGNzUzRkI1Ci06MTA3RUEwMDBGQkI4QzEzRTFCMzBCQ0RFQjJGMDNGNDJCMTBBRDBCM0RBCi06MTA3RUIwMDAzMjk2RTM2RDg4Qjg0QkYzNjA1Q0Q5RDA3MjgwNUU2NDEzCi06MTA3RUMwMDAyMzFBMjRDRkVFQjIwQTVBOEVCNUMxNzdERkVDRThEMTdGCi06MTA3RUQwMDA3MkUwNDM0RDI2RjIzRUExNTJCQ0YxN0VFNzQ4MDVCNjYyCi06MTA3RUUwMDBGRDVCQTZFNkYwOEZDQTY2MjVEMDgxNEY1NzEwRDBBNzVDCi06MTA3RUYwMDAyRkFFMTgwOTE3RkNENDhBMzI5Mzc3NzYzQUUxRjREMTgxCi06MTA3RjAwMDA4RjlDRkI1MDc0NzE0QUU0N0U2QTNCREU2REY0NTE5ODlECi06MTA3RjEwMDBDMjJCNkYxN0VDRTNBN0IyRTNENTU5RkVBOEYxRTk5QjlBCi06MTA3RjIwMDA0REYxODkzMDNFOTlCRkE0MERFMDFDMzQ0NTA0NzYxMTEzCi06MTA3RjMwMDBBRjE3OTAwQTZERjgwOTVFQzYxQjJCNkNFN0VDMkU0MzU5Ci06MTA3RjQwMDA5NTZFRkEyOTIwMjlBNDNFRTZGQjcyODlEQUU1MDJEODZCCi06MTA3RjUwMDBEQkYzQTUzRDA2RDA3OUEyMDhFMzA2RjdERkUyQzEyNkYwCi06MTA3RjYwMDAxMTJFQjc2QzE2Mzk1RTg5QkNBRERERDI1MkI2MTlENzY5Ci06MTA3RjcwMDA2OTM5Mjk4OEQyMTRBMDlCRTUwNDlGM0VFNkY3QjlFNDRECi06MTA3RjgwMDAzMTJCMEE3MUJCQjY1MTIyREFBNzgzRkVFOURGQkZENUQ4Ci06MTA3RjkwMDA1MDZGRjc2RjgxNUYwMUVDRUZGQzFBNkQyQTgwMzk1RDNECi06MTA3RkEwMDBCQjVEMzU2Mjg1OUJGRkVCMkU4OUZBQkY3NkQ0MUM2QkQ3Ci06MTA3RkIwMDAyNzY2RTg0QkY2N0Q4NzY3ODUwMTE0MDhGQjhGQkJBNDE1Ci06MTA3RkMwMDBFOUE5NzZBMTEyRUFENzQwNzFCQzFFNUNERkMzRDczM0EyCi06MTA3RkQwMDAxQ0QzNjczRkYxOEFGRkNERjQwOTJGRTdCMTc4OEVCMzQ4Ci06MTA3RkUwMDBERTRGMjQ0Njg3M0E4NTk3Q0FFOEYwNTI0MUZGRjRDRjI2Ci06MTA3RkYwMDBFMTczQjk0NTYyNzE5MDFFMUYyMjdBNzczOEYxREZFOThCCi06MTA4MDAwMDA2QzVEOTI3OUE0MENGQTkxNTFGNzY2RDg4N0VDMTJEMTg1Ci06MTA4MDEwMDAxQUVBNTc4RTExN0QxMzY2RTMzRDVFRkE3QjFGRDRCQkNGCi06MTA4MDIwMDA0MUE2RjI3Mjk0RDFEMzBBNzgxRUI1NDk0NEUwQzc3RUM2Ci06MTA4MDMwMDA0QUQyNDlENzIzNTZENDFDRjRFMEY3QUQ5QjUxMzQ4ODdCCi06MTA4MDQwMDA1RjhEODY3RTcxQkI1N0M2MkE0NEVFQUJEOTU0RUVBQjJBCi06MTA4MDUwMDBCNTk4MDQ3MDNEMTVFRjZCNzQ1QzZFM0REODhBNDBBRkU3Ci06MTA4MDYwMDA4N0YxQzYwOTRDNUVCRDE0ODlFMEU3RjZENDc1OUIzMEY0Ci06MTA4MDcwMDA2RUI4MzQ0QUVDRDA0MzYzNjc5MDdERDU4M0Q5MjhFQTQzCi06MTA4MDgwMDBENTUzNzI4MUQzRDE4MzlCMTYxQjQwMDcyRDc4MUYwNkQxCi06MTA4MDkwMDBFNTk2QTIyRDJBRjhCMTJGMTZDQkE0OENGRThDRTFDMzU1Ci06MTA4MEEwMDBGRDg1RjgxRkREQTQ3NEQzNUE0MEU3MkI0RkVDNDYyMjIwCi06MTA4MEIwMDBFMTVCOTVFMDUzRDZFOEZBNUI0M0RGMzQ2MTdFRTY1QTM0Ci06MTA4MEMwMDA0NEVDMjNCMDZGNDk3QzQ2OEVBQTIwQ0ZGMzc3Q0YyNkFECi06MTA4MEQwMDBGQzIzNkJFRDAyRDBDMzQ2MTQ3RkNBNEEyNzUyMzA0OUI1Ci06MTA4MEUwMDBFNkRGRkExNzg5RDlFRjJGNkQwNkZCN0QyNDc0ODVDQjY3Ci06MTA4MEYwMDBBRjRBRTczNzBGQzUxRUUxNzE0MTZFOEZCNEM5OUQ4NDQ5Ci06MTA4MTAwMDAwRjREQ0M2M0EwNkZCODdERTIyQkVBMjRGNEY5REY4QzJECi06MTA4MTEwMDBCRTA3REJCRkFGRDhFRTQ3NzVEQTJCNEUzQkE1NTZENDcyCi06MTA4MTIwMDA2Qzc2QTk3MzVEOTczQ0M5MUI2MTdFNkRCOTk4QkYwQkQ2Ci06MTA4MTMwMDBGQThFNzc1Q0EyRkI5MjNEOTFDNUZGNTFBMEE3RkFFMUIwCi06MTA4MTQwMDBERkI5N0RDNENCRjk5NzE1MDJFRkMxRDdDN0YyMERGNkExCi06MTA4MTUwMDA1RTA2RTVBM0QxOUM0RkJGRDAzRjlGNzIzRUJBODQ5MThCCi06MTA4MTYwMDA3RTA0RjAyMzlCMkFFMTIzQTM5OEYwMTFFNzBGQTlEQkZCCi06MTA4MTcwMDA2QzE5ODNFOTRDQUYxM0MxMjM4REMwNENDRkMyRTVBQjYyCi06MTA4MTgwMDAzMDdEMjc4NTE0OUQ4RTYyRTNDQTEzMTNFREUzNURFODBECi06MTA4MTkwMDBFQ0IxNUFEMTIwRkVFRjI4RUUwNjdGMEY5QjQ3ODg5OTVECi06MTA4MUEwMDBFOTJGNEU3MEJBQkEwODc0QzVFOTJDN0ZGNzAyQjJBRTU3Ci06MTA4MUIwMDA1NzgxQTBBNzgzNUU3NTk3MjMzRjYyNzYwRUQyRjYxQjg4Ci06MTA4MUMwMDA1NjNGQUQwRjM1QkFDN0NGNkIxRkVGMzc3RUFFMTY3RDZBCi06MTA4MUQwMDBCOEY4Nzk0OEI2RkJCMzA2NkEzRkQ0QjhCOTc0NzkxOEQxCi06MTA4MUUwMDBBMThGREUzMkRCODczQUVCQzU2NTI2NUY0RkVFQjNDMTY4Ci06MTA4MUYwMDBBNTBGM0NBNEVERDE3ODNGNzRBMjdFNDg3RjNGRDE1OUIyCi06MTA4MjAwMDA4MzgwODMxMzhFMzM2NEU2NjdGOTk4RTBFODhDNkJCRjU0Ci06MTA4MjEwMDBDQ0U0RkM0MEYyQzA2RjE4NDk3MTBDRjhDNTEwRjVEQkQ2Ci06MTA4MjIwMDAwNDExRjNEQkQ4RTlGREYxNEQ5NERFRkQyMTcxMkY4OEI3Ci06MTA4MjMwMDBBODcwRUQxMUQzNkI5OTBGQTZGNzI1RjJGMDE0QkRFN0U2Ci06MTA4MjQwMDAxNTI3OTM4MDFGQTdGRTQ5QTc3NzA2OTJCNzJCNTVFMzAyCi06MTA4MjUwMDAzNkQ5MjVDRjg0RUZCMzUzNzkwNDk4OEI1REYyMDhEMkQ5Ci06MTA4MjYwMDBFMkI1RTZBM0M5MjMxODJDQkM3QkZEOTYyQzJGRTBGNkMzCi06MTA4MjcwMDA1MjQ2QjdEODcwNzgwM0MzNjVFRDYxMEZCMUVGQjFGRTE4Ci06MTA4MjgwMDA5M0FDRjFCMkI1NkM3Rjc3M0JEQjFGREU4OTYyNjFGODlFCi06MTA4MjkwMDA3ODFFODkxNUMwMkZFN0QxQjFGMDM0MEJEREVGOTQxNUFFCi06MTA4MkEwMDBDQTJGMkQ5RUI3QzA2RkNBRTNFMDc3QjVEMzMyOUZDRkY4Ci06MTA4MkIwMDBEREJCRURFNUNGQTFDNTM5RTBBRkZCRENBMzFFRjAyMEFGCi06MTA4MkMwMDBBMEI1MEVCRjU5M0QxMDA0OUVGRkREQThBNjE5RjBENjNCCi06MTA4MkQwMDBFNEExNzZFOEVEMUE5MjIxNkVCREUxMDc1RjlGQjExQTI1Ci06MTA4MkUwMDBFQzEzNjY3RkJDODdFNUIyNkVCMTlGRDYwNTEzMEFFMDNBCi06MTA4MkYwMDBGN0VEQUU2OTM3NUY4N0EwN0RBMjM5MEZFMkQ3OTk4ODg1Ci06MTA4MzAwMDBFQzQ3OUQ3MEJFQTNDNTNFQkY4MUU2RUY5QzJGNDI1QjRDCi06MTA4MzEwMDBGQTlEODdEQzIxQjhDNjU5RjdDQkY2Mzg2QkJBN0MyOUIxCi06MTA4MzIwMDA5RTI3RjU5MjRDRjE2RkNFNDVDNDdFMzJERjBDMjQxQUE1Ci06MTA4MzMwMDA4ODNFQTE3OTUyMDNCNTdGMTVEQTRGRkZFMEVEN0YzNjE1Ci06MTA4MzQwMDBDMEY4MUJENDlFMDVDNENFQ0EzNjYzRTBFRkUxRjFCRThGCi06MTA4MzUwMDAyQTU0NjM4Q0M0QkZDQUNGMkYzMjgxRTc3QUVCNDUwNjFCCi06MTA4MzYwMDA1OUFGQThGRjdBRTlFNjdENTY1MzRENzE0QTZBRkU1RjIwCi06MTA4MzcwMDAxM0UyMjc2NTk3RjVERjJGQzVBQkEwN0YyRkUwNDE4MjgxCi06MTA4MzgwMDBBNzRDRjA0REZDQkIxOEJGRDU3MkIwNDVDODgwM0NBNkM5Ci06MTA4MzkwMDAyRUIyQ0ZGM0U5QjI4RDFFQUFFMTE3OTA2QkM1NTRBRTkxCi06MTA4M0EwMDAwNThBRURERjlEN0VERkRGRjVFMjNENDlGODhGODQ5NjlCCi06MTA4M0IwMDA3NUIwMUY4MjQ5MDlGQzMyQTVGMkI5REVGQTc4QkMyQUYxCi06MTA4M0MwMDA1ODE3RUM5MzUwOENDODhENUE4REQ2QUY0MkZBQ0VEOTNGCi06MTA4M0QwMDAyNTg0RkZDOEJFQkJCNjc1MEM4OTk3RDcwRUQ3QTNFMDFFCi06MTA4M0UwMDA4Nzk1NTFENDIwN0QzOEU4QUVGQUIyODAxMjE2N0Q1OEI4Ci06MTA4M0YwMDAyREY3MjhDMDY3RDVEODJFQjJCRURGMTg5MTZDRkU1Nzc2Ci06MTA4NDAwMDBFN0QzODM1NDNENTg0Q0ZEQjlDNDNGQTRFMUIyNjVEREM4Ci06MTA4NDEwMDBCRjZGMTc1ODVFOEE5RUIxQjQxRkJGRENDNjA4RjVGMzY0Ci06MTA4NDIwMDBERURFM0EzNjgzRkEwM0VERjJGNzAyREIxRkZERTRFOTA0Ci06MTA4NDMwMDA2RjI4RTBCRjNGRkZENEU5OUIwMERFRUJGRjQ1NDIyQUY3Ci06MTA4NDQwMDBFNDY1M0MxRDQyNDk2MjhGMjUxNEIwQzdENjc1NDlBRTFDCi06MTA4NDUwMDBGRTAzOTIzOTAzNzFDREVGODYwOEJFRDYzREVCNEQyQzVECi06MTA4NDYwMDBDNEVERDczREY3RjY2NDg0RTc3NzYxNEJDRjJCMjNDMThBCi06MTA4NDcwMDA2RTdFNEFBMDdFNkJCMzdCRjIxMkZDN0U5RDhDNTZCOTU5Ci06MTA4NDgwMDBGOTA1OEEzREQ0NEUzREY3QzM0MDI1RjBCN0QwNzE3MDUxCi06MTA4NDkwMDAyNUU5Qjc3M0I5Qzc2QkQ5NUY1RkU1RjFGMDdBRDQyRUUwCi06MTA4NEEwMDA3RjUyNDg4QzE1RENFNjQ3RjMzQUNFM0QyOUQwRjkxREMyCi06MTA4NEIwMDBGMDI0N0MzMEJGOEVCRDRBMUNDRkEzQkFFMzdEMjI0RjhGCi06MTA4NEMwMDBFNjdERjdEQjYxODA0M0Y1MDFDOUE2MDdBQTNCQTRBNEJBCi06MTA4NEQwMDA3NzMyNzk5RTg2MjdDNDgzODQxOTQwMjc4QzVFQkEzNjBBCi06MTA4NEUwMDA5MDM4NTA1NUU3QjZGN0MxNEY1MTdEQzAyRUQ3MzA1QzVDCi06MTA4NEYwMDBBMjQ5ODBFQkVCNTI3NDIxOTRCRkY3QURCMDhFNDFGNUU5Ci06MTA4NTAwMDBERTkxMjdDMjAwNTdEQ0VGNkEyNTAzRjQ4RDlEQkVBMUUyCi06MTA4NTEwMDBGRkNCNTk3REZCNDNBODg3QzRFMUFBM0I1QkU5Nzg1REFCCi06MTA4NTIwMDA5RkY5MERFODk1NkE4N0ZDN0MwRjdFQzlFRDZCQ0ZDNDdGCi06MTA4NTMwMDAzQzBFQkJCMDYzNzA3MUI4RjVERkJFRjg5ODg5QzczRERCCi06MTA4NTQwMDBGN0VDNkYxRjMzRjFGQ0VGRjlFQjdGM0RGNjAwRjBFNzNFCi06MTA4NTUwMDA4RjdEMUFDOEZGRUFBNzdFMTE0NjE2N0E1Q0U3QTFGQzU4Ci06MTA4NTYwMDA3ODYxMTQzMjczNzFCRDBCQkZGNDI2NENGQ0VBQzIwQjY4Ci06MTA4NTcwMDBCRjE5QURFMzc1NUY3OEU2OEYzOTNBQUU1RkZCQzJGQzk5Ci06MTA4NTgwMDAxMTAwODdEQUVGQ0YxQkQxREY3RTFCRTgzNUUxQjVDRUQ2Ci06MTA4NTkwMDAyQjQxRjBBQTFGMTBBODExRjQzQzdCM0FGMDczQThFQjEyCi06MTA4NUEwMDBEMDY4OThFN0Y5MTNERTI4RDgzREQ1Rjg1RERENTRDMEQyCi06MTA4NUIwMDBENzA2QTI4RkExQkMwOUMzQjlFQUU5QURFRjgzOUNFODU1Ci06MTA4NUMwMDAwQjZGNzNBNDQ4OUNGMEM5OTFFMDhDQUZFQTdBN0IwMUYxCi06MTA4NUQwMDBDMTFCRUEyMTdBRDQ1OUJGRkEzOEM2RTc5NEY0RjhCQjM0Ci06MTA4NUUwMDA4OEZFQUM4MEJDQUI3RUJBOTU4RUQ3ODlGMTE3RUU4QjM2Ci06MTA4NUYwMDBCRkYzRjBDQkFDQkVGODZCNzFFMEVGMjJCQUU3RjE1Q0YxCi06MTA4NjAwMDA0ODY4RUIxQTY2OEI3RkYyNjcyQUVFMTdDQjg4RjUyMzUyCi06MTA4NjEwMDAyRkI4M0MxODA4QkU2QjA0M0FBRjY1MUU2M0I3MDdGODY1Ci06MTA4NjIwMDBFQUQ5NDAyRjdFMTcwMjdFQkY3RDcxMzRDMkY0NzFDNjM1Ci06MTA4NjMwMDBEM0IzMTJFNDY2Q0YwQjVFNkQxRjdFQkZFRTg1RDcwOTA0Ci06MTA4NjQwMDA5RjVERjhGRTUxNDUyNzc5OTcyODI4RTRCMEZDMkZGQTYyCi06MTA4NjUwMDA3MzA0RTQ3MDE1RERDQkExRUFGREExQTQzNzlDQzI1M0RECi06MTA4NjYwMDA1NTYyNTE4NTFFMjZFRjRGOTNGNzA5NEFGRjU1ODk4M0JFCi06MTA4NjcwMDA0QjA1MTdCQzFERjMxNDUyM0IyQTMxOUNDMDY1QzNGRTQ5Ci06MTA4NjgwMDAzNzE0NkE1RkE2RjAyOTk0MDIzRTRGMkY4MEY3RTlGMDc1Ci06MTA4NjkwMDBDOUQ3QUZDMUZBNjc1QUYwQkE5RkYyQURCMzdFMTVFNkZCCi06MTA4NkEwMDA0RkQwN0I3REYwOUIxMDVFODdFNzg1QkQ1RTE5RjRERUMxCi06MTA4NkIwMDAwNUIwQkY4MjdERjE5RTgyM0ZCNTdGODZCQTVGRjlBOTgyCi06MTA4NkMwMDA5M0JGNzk1Qzk4QzEyMTNEN0Q5OENDMEVFODdGN0Q0M0I2Ci06MTA4NkQwMDA4NURGOEYzQ0JBOEQ4RTM4MUNDRkZERDk1REZFOUY2MTQyCi06MTA4NkUwMDA3MkEzMEE5OTE1NzkxNkZCNDRGNTYwRkIwNEYyQzY1MDkzCi06MTA4NkYwMDBDQzFDNTk5MDlBRUYzOUQ4NDc2MEZBM0JGNzk0NDRFMjgyCi06MTA4NzAwMDAzMENEOUQ4Nzg4MUM3N0NBOEJBQTM0RkVCRjNGRjJGMTFCCi06MTA4NzEwMDAwRTFDOUMwQzcyRUREQzhCM0YyNEY0NTlGNUY0NjkwNUJBCi06MTA4NzIwMDBGQzYzQUY3NDdDNEZFOTlFOThFMjA3RDAwRjA5OEI3RTAzCi06MTA4NzMwMDAzOEY3OUQ4MzkzQTkzQzcwREZGRjJBMEFFREJGRkE3OUQxCi06MTA4NzQwMDA3QkZGRDU0RkJGNkZFQjdGQkREOUE5RDBGQzg0RkVDNzlGCi06MTA4NzUwMDA3OTRGMzY5NkMzN0FERjNCRTI0MTIwNEZERkVCOTQ1Q0UyCi06MTA4NzYwMDBGREFEQkYwNUZENjhDOTMzNkIzRUJBRTAwRDg4REY5N0VDCi06MTA4NzcwMDAxQ0YzRUJBMDQ3QkJCNjE4MjM3NjgwQkQ3NkNDODM0MEI0Ci06MTA4NzgwMDA3RTIzRDlGODJEQzQ5N0JCOEVGQTc1Qzg3QkU4M0E3NjVDCi06MTA4NzkwMDBCM0E0NUJGQzEzM0Y3MEMwNzNFNjcxNzM1RTA4RjczN0Q4Ci06MTA4N0EwMDBCMzNCNTYwMjVCMjhBN0RDMjgzRDI5NDJDQ0EyNzdGRUNBCi06MTA4N0IwMDBCNTQ3MkI0NjgwREM2RjA0N0I3RTNDOEMxNzhEOTBGODkwCi06MTA4N0MwMDA3Nzc4NDEwNUNEMEIxNDM1OUZBQkZFQTZGRDc5NTg5Q0ZCCi06MTA4N0QwMDBEQ0EzODk0OEI3RDIyM0RGNkYzMUJGNEY3M0QwRERGRkYxCi06MTA4N0UwMDA1Q0E2NzBGQjEwOEY2QjkxODNEODU2QUQ3NEMzNUI4OTA4Ci06MTA4N0YwMDA0MkY3NDFFOUJFOTcwRUYwN0RCNkMyRjIwMEQyN0NFRjlGCi06MTA4ODAwMDBFNTZGODYxRjI1MjRDNkRDRTYzRDk5RjVFM0Y0QUJBNkFCCi06MTA4ODEwMDA5MzA3MUVENkNGMTQ0NTY3RkREM0Y1MDJCQzE3NTlGMjU2Ci06MTA4ODIwMDBERDQ3QTJDNDY2RjA3RkExNjBEMDE5Njc4RUE5RDYzODUzCi06MTA4ODMwMDA3M0U1OTE4MzEwNTdDRTVFRjI3QzJFQzAzRjhDMUFCNTQzCi06MTA4ODQwMDA3Nzg5MUQ4RkEyNTdGQUIxNjM5RDcxNjU2N0JFNjFCQUMyCi06MTA4ODUwMDAzOEIzMUFBQzNBOTE0NDdERkJFQjFCNTczNzQ4NUNCREVCCi06MTA4ODYwMDAzMUJGNUNCNUM2RDUxQkI1M0U3MUY1MEQwQTFFQjcyOUUzCi06MTA4ODcwMDAwRDFFM0VBQkNDQkQxN0JFNjNCMzMzRUVGNkJENDlBMUIyCi06MTA4ODgwMDBGRUFCRUI1MUY3Rjc1NkMzM0NBMzM0MkUzRkRCMDFBRkYxCi06MTA4ODkwMDA0RjMyNzhGRDc4MEM1RTM4NTYzRDY1NDg5NzNEMThCRURFCi06MTA4OEEwMDBGMzk2MUE4RDIwMDJFN0FGRTg1OTdGMTBGODhDQzdFNUUwCi06MTA4OEIwMDBDREYxRTI5NUMwRTBFMTM3RDQ3Qzg3OTVFQUUyMDc5NUY3Ci06MTA4OEMwMDA0MUU0M0IyMDJEQ0I1NTJGQTRFNjYxMzJCRTg5OTA3RDNCCi06MTA4OEQwMDAxMjhGQkYxQzNBNzVCNzBBNzI0QjQ2RjE4QTAyNEIzQ0E1Ci06MTA4OEUwMDA4Q0U0RDFFM0ZFNzI5MjNFNjRFMEY5MkE5QTRFRUNFREZDCi06MTA4OEYwMDA5Q0U0REFBRkRFMDVGMTcyMkQ5RkM0MUZBNENCRDcxMTIzCi06MTA4OTAwMDBGRkExQjM1RjI5MTIzNTQ5OUU1NzUwMkY5MzJDRTMzNEIyCi06MTA4OTEwMDA2N0QzNzg4Q0FDQzU1Q0YzODE1NzJBRjFBNzYxQkREMkNGCi06MTA4OTIwMDBFNTM5QTQ1RjUxQTVGMTBDMTQxQzVDMUVFQzU3OTY4NDJDCi06MTA4OTMwMDAwOTdDNTUwQzVGOTA4RjA0NjRCMDJFOTYwRkY1RDA5MjkxCi06MTA4OTQwMDAzMEQxMzNCRUMzOUVCREYwREQxN0E0Rjk1MUY3OEJGRUM1Ci06MTA4OTUwMDAyOEU0NEYzOUYzQTNDQURFQTRGMTk2RTZEMzAyODlBMzMzCi06MTA4OTYwMDA3MEZBNkQyRUE4QjkwQUU0NzgzRkY5NTEyRjJCMTZCRjgzCi06MTA4OTcwMDA3QUJBRkMyODVGRjA0RTkyMUZFNUZCQzBGOTUxOTE3MjY0Ci06MTA4OTgwMDBCMEM3OUEzMzc5MTlBQjEzM0M4RjY2OTZFRkY0MkJFNTk5Ci06MTA4OTkwMDBGMDNDRDA0RkNEMkMzRjBBOTlBRkNFMjNGNTc5MTlENUI1Ci06MTA4OUEwMDAxQzMyRTAzQkNCQTdDQUQ5REFEQzAwRjVCMzQ3QTI5QTY4Ci06MTA4OUIwMDA0RUUyQ0YzM0QwMzI4QjlDRjU3OTY5OUNGOUNCOEFGMUFBCi06MTA4OUMwMDA5RjhBNDVFRTcxRkNGQjdBRTk2QUFCMEFGQTFCM0Y0OUM0Ci06MTA4OUQwMDBCQ0IyMTlEMzE1RDhFRDM5Qzk1NjY0RDU0N0ZDQzlFOURECi06MTA4OUUwMDBBOEI5QThGRjc4OUQ3Q0Y5MUFFMkM3RTc2NTU1NEIxODJFCi06MTA4OUYwMDA4NjRCN0Q0M0E1N0E4MkQzMkZDNEQzNDAyRkE5N0FGQzFFCi06MTA4QTAwMDBBQjc3MDEzRDY3MDdBMzAxNEE5NzI0NEVENjEyMjRFRUE3Ci06MTA4QTEwMDBBOTNFRUI2ODI5QkE5REM0QkQyRTZBRDREQkNERTlCODY2Ci06MTA4QTIwMDBFRkZDRTdCMEY5MTc5QTQwNUYxNzgzMjg4QTVDRTQ1RjkwCi06MTA4QTMwMDA2QTFEMjU2NDFEMkIxNTQzRjU1QUUwOTg3RDk1N0JCRTc0Ci06MTA4QTQwMDBFOTc2MkY1RDRGNTM2QzQ1RUMyRTk4QzkxQTdCREM5NTY3Ci06MTA4QTUwMDBFNzVGRjBGQTAxMjEzRTFDRkFGNTY0RDNCOEFCQTg1MkU3Ci06MTA4QTYwMDA3RTRCRTEwQkFCMEE4QjdGQjMwMUFEMzA4MTA0RTQxNTgzCi06MTA4QTcwMDA5REU0QzhBMkFDMjU0OEZEMzFCRUY4NjhBRjJEM0VEN0I1Ci06MTA4QTgwMDA0REUzQjg4RTc4RTI3Q0U5MUVDQURGMDNFMDZGMDdEQkI2Ci06MTA4QTkwMDA5RjZDODNCOERCNzg4OENGNDVEOEI5M0Q5REM1RTkwQzdDCi06MTA4QUEwMDA5QTJGOTQ4NjlFNUE4QUZBOEY0M0I1RDc0NzQ5RkI5REUxCi06MTA4QUIwMDBGNUE1MzQwRjQ5NDBDQ0FGRkRGNTA2QTAxMzcwNEI1MDFGCi06MTA4QUMwMDBCQURGREYwMDdDMTA5MjM4NUYzQzQ1Q0EwRjBBQjQxQzQ1Ci06MTA4QUQwMDBERkRBNDVGOEU2RDBBOUQ3MkJFRkMwRjREMTZDRjgwOTVFCi06MTA4QUUwMDBGRjBGQjQzRTJEMzE4M0UwNzVBOEUzRjQ1RDJGMURCNzcxCi06MTA4QUYwMDBDNTA4OTJGREVFNDBFQkQ2OTI3NERDQzE4RUMzRTNFMzcxCi06MTA4QjAwMDBBOUY1QTk2NDlDNjY3RDgwNzFEQUU5MzgwM0NGOUZGMkVDCi06MTA4QjEwMDBDOThFODM2QjJCMjBBRUFDNjJGRUY3RTFGN0VBRUMxRTQ4Ci06MTA4QjIwMDBFNDE2MUZDQTYwRkM3M0U4OTQ5N0M4RUI5NjZDOUFDNzZBCi06MTA4QjMwMDBFQjI5MEUxQUQ0MDk2OEVGREYzMzMxNjcyRTM5Qzc1MDlECi06MTA4QjQwMDA3MjM1Qzk4QkRGNzFCMDk1QzgxOTA1QzZDMTU1M0NEMUM2Ci06MTA4QjUwMDBFMDZBREEyRTZFQzBGOUQ5NzAzOThBODI1RkRGNTM5Q0UxCi06MTA4QjYwMDA3MzA3QkNBRjQzRURCMUI5QTA4NzRCRTlCOTJENEY3MTg1Ci06MTA4QjcwMDBGMTVERDA0RjI2RjAyNTlFQzczNDk1RTY3RDc4OEFBRjBCCi06MTA4QjgwMDBCRDFCRUExRjlDRkU1QUJDMDFFMDU0NEFFOTAwMURDRTAxCi06MTA4QjkwMDBCNUMxQjE1OTJGRTRFNzcxRkFFNTdCNEZBOTNENkU4MTZDCi06MTA4QkEwMDA1NEJGMkQ2RjA5Qzk0QjQ5QkMxQ0NCODU2RDVFOEJGRjMzCi06MTA4QkIwMDAxQkVCQzU5RDUwRjZBMDEyMTNFQ0JENURCN0RDMUNCNUQ4Ci06MTA4QkMwMDBGMkYzOTc5NUQ4QzM1NDhFRjAzQzJDQ0VFN0VFRjk3MEIzCi06MTA4QkQwMDBDREQ5M0NBRjJDQUU0QTI1NzBGRUE4Mzc0RjdBNjFBRTk2Ci06MTA4QkUwMDAzNUFGOEJFNTQ5MDc3OTlFNzQ5NEM2RTFEQUYxN0Y2RTYzCi06MTA4QkYwMDA3OTcxQ0VGMzg5MUY1NTlFRjQ3N0JDNkMzRjFDNDBBMzVFCi06MTA4QzAwMDAyMDRGRkE0NzFFMTQ0REUyNzlCN0ZENDI4QTQyMUU4QzZFCi06MTA4QzEwMDA5MzNFOUNGRDM5RjNGQjdCRUQ5MTM0RkNGQzZCMDA4RUE1Ci06MTA4QzIwMDA0NUVFRTVDNjFENzhCQkQzNDdFMjczN0NCQzk3NDAzRTVBCi06MTA4QzMwMDA0RDFDOTg0RjQ3QUVCMUY3MzNBQUM2N0VFRUVBQUEzQTZBCi06MTA4QzQwMDA3QkJDQUFDMENDQjNENTFGRDM1MjY4RkIzRUI2RkQ2QTJECi06MTA4QzUwMDBEQkY3RjFCQkE3REFDQTEzMTJEN0RBRUE3RkEyNjNBRTU5Ci06MTA4QzYwMDBBRDNDQTlGMzUzQjZGQTUzMEUyQ0I2OTVBRjQ5REU2QTY0Ci06MTA4QzcwMDBBQjNGRURGMEVEQjZFRkQzOEZBQ0IzN0Q5Rjc5NjJBMzQwCi06MTA4QzgwMDBBRDNDQUJGQjhCQjZGQTc1RDgzQzUxNDgzRTFDOEQzN0RBCi06MTA4QzkwMDBBMUVEMjM0NTJCN0RCNjY2NjJCRDkyODFFMTk4ODkwOURECi06MTA4Q0EwMDA4NjI2RUI5Mzc4MzNDRDMxNEVFNTE5MzhEQjQ5NDU4QTdBCi06MTA4Q0IwMDBBMTYxRkU5NUY0NzFFNTFBQzkxRkJDOTNGMDkxNTQ5NDFCCi06MTA4Q0MwMDAzMzU3MjdFRjY3MkMwMEJGMTMyQUExRTdBRjdDQUMzRkQ3Ci06MTA4Q0QwMDA0RjExNEFDMkI5NEIzOUU4QzBBRjIzMkVFRDkxQjY5MzdDCi06MTA4Q0UwMDA3OEFBNzJGMjg2QzM0MkI4MkY1RTNEMTE2NzlFRTJFMDE5Ci06MTA4Q0YwMDBFMkRBQjJFRTY4Mzc0NEJFQzg1NDU5NUM3QjE0RTYwQjI2Ci06MTA4RDAwMDBFMjQ3RkNCMzQ0Q0UzRDk3ODc4ODdENjBEOURGMTAzOEI5Ci06MTA4RDEwMDBGMkZEQ0QxQzE1MzUwMjRDMzk1Rjk0QURFODE5NDlGMkNFCi06MTA4RDIwMDBEOTdCRjczNTVFNzEyOEY5QzY3REY1OEE5N0Q4NUQ1Q0U5Ci06MTA4RDMwMDBDRTBDQTQ1N0E0QzQzNDVCMUU4MkYzODlFNURGMTQxNTVFCi06MTA4RDQwMDBGNkUxRTE1Qjg5M0NFQUREMTdGNENBQzdEODU0RjhFRUQ2Ci06MTA4RDUwMDA5MUEzNDQzRUY2Q0FCRjhFM0M5QjVDMThBQzdERTY5NDYyCi06MTA4RDYwMDBEMzZEMjBGNEM5NzkxRjc3NzkxRDg2M0MzMDJDOTcxRTZFCi06MTA4RDcwMDA1QzcyMTM4OTgzQTE1QTY0M0JFNzk3NTMxOTUzNDFFRkZGCi06MTA4RDgwMDA2MUJCQUM0MkI1RUM5RkMzQTVENDNFRkI3QkIzNTNCREU2Ci06MTA4RDkwMDA2Q0JEQkQ3NENBRUM1NTBFRDc2MTA1MzUzMTEyRDcwQkM5Ci06MTA4REEwMDA4OTA4RjY1NTBEQjNBMzExRjAwM0I2NDAxNUNCM0U2REZGCi06MTA4REIwMDA5NzNBODZDOEQxQzZBMDIyODJCRkI0RjFGMDdDMTIxRkI4Ci06MTA4REMwMDBGMEZBNjIyQUU0RDEzNTc4NjIxNUIwQUU4NjRDNTE3MzYwCi06MTA4REQwMDBDQjc3REFBMjUyRkY4QzUyMTc5OEI2QkYxRkZBNTAxNDA1Ci06MTA4REUwMDBCQ0VGNzc1OUVGM0U5NUZBNUQxQUI1QzU4NzQxQ0Y2NTVGCi06MTA4REYwMDA4NTE0MUQ1MjZFOUIwRkNFNUEwNEUzQ0EwQjY1MERGNjA3Ci06MTA4RTAwMDBCNTA4NkZFMkRFQjZDNDE1MjFERjE3MTFGODhCNDQyRkM5Ci06MTA4RTEwMDAyQTc1NjEzMkZFNDBGM0JENDdBNTdFMDY2RjlEQUZERjI4Ci06MTA4RTIwMDBGOTdBMTU3NzNGNDVCQUY5NkU4NUY5NjYwRjNDNUY2RkExCi06MTA4RTMwMDAzNkNENUZGNUQ2MDVDOUY4RkYwQzE3NTlCOEMwREY4M0VBCi06MTA4RTQwMDA4Qzk2NzI1Q0FGRTlGNDBERUQ0NTg0NjI2ODlFREUyMzdBCi06MTA4RTUwMDAwQkE3MTIzQUM1ODJEQTQ2QkY3QzFGODFFOTM3QTEwRTAzCi06MTA4RTYwMDA0RkVEREZGOTM5RDVCQjU1OUE5N0MwRjE4QTc0RUE4Rjc3Ci06MTA4RTcwMDAxODE2OTdDOUJFMzcyQjRFRjdCRjI5Rjk0MUU5MjhDQjAxCi06MTA4RTgwMDAxMzQ1RTQ1QzU3QkU0Q0UyOTJFMEE2QjFGQTMxRkVDQTRCCi06MTA4RTkwMDBGNjcxREU0RjQ2MDlCRTVBM0YyM0EzMkQ0MDZGNDU3ODM5Ci06MTA4RUEwMDAzRDcwREVGNjMwOEQzQkI1N0FBMjk1QjE2MDZBM0NERTRFCi06MTA4RUIwMDBGRTREODYwRjE5MkRDRDIwRjk1QkQyQzI4ODlCRkREOUJFCi06MTA4RUMwMDA0QkU3MEM2RTRFMzlGQjYzMkU2NzczNTEyRTk1QjMxMzJGCi06MTA4RUQwMDA5N0MzMTFBMTc0RkQzOEVEMEQ3RUJFNjdFOEU3NEVEQTQ5Ci06MTA4RUUwMDAwOTNDNUJGMzFGMjU3NjM0Rjc4RkExNDhDOTAwRkUxRUFECi06MTA4RUYwMDAxQTJGNERFMTc5Qjk5RUM0Nzg5NDZGOUM0QTlDN0VBRDNGCi06MTA4RjAwMDA0NTBDQ0YzNThFRkM1RDg2Njc4RTVGRUVCNzQ3OTE2QzYyCi06MTA4RjEwMDBDMkQ3MUNERjEyQzAxMzcwMjVDRDhFRjRBN0FGMjRDNkI0Ci06MTA4RjIwMDAzNzRFNzg5RUY5MUYwQUNGOUZDMzFBRjAzMzZCMTQ1RTM5Ci06MTA4RjMwMDAzRkYwQ0RBMTFCMTE4OTgzMzlGODkxQjdFMzc0RUY1QzQxCi06MTA4RjQwMDBCRkVBRkI5RkJEN0U0RTBGRTlFQjlCQUVGQjBGMUVENzJBCi06MTA4RjUwMDAwRDMxN0E1Mzk5REU3Q0I5RjRBRDE2MzgyNzIyNjdEM0U4Ci06MTA4RjYwMDBGRDZFQThCNDkxRENEMzIyMjM1MzAzRkY1QTg4OUZDQjE0Ci06MTA4RjcwMDA2MUU3MzI3OTNFOTU3RkEyN0RGRkMxRjMwQjQ5MTlGMzdBCi06MTA4RjgwMDBCQjg3RUQzRkZBREM5QkMyRUMyQzdFNEVERjM5N0YyNzlFCi06MTA4RjkwMDBCRUU2RjhEQ0YzMDc1MUJFQkJERkQ1MTk4RkUzRjEwRDU4Ci06MTA4RkEwMDA5RTA3Q0JFMzAwMDQwRTc4RkQ5RTU5NjI4Q0M4QkYxMjY5Ci06MTA4RkIwMDA2NEVDNzU5MTRGQ0I3QzU0MkY3NEJERTgyMzc5MTJBMURBCi06MTA4RkMwMDA0QTg1Rjg2M0YzNEE5MjY1NTBDRUFCNDE1MUQwMTNENzJFCi06MTA4RkQwMDA5RTM5ODJFMkI4RDNCMTdFMkFGN0YzNEExMjAyRjgzREY1Ci06MTA4RkUwMDBGMkNFRDFCQ0Q4NUQyQzVFOTk1NzlCMTA1NjVCQzY3OUVBCi06MTA4RkYwMDBDMDQ3RTVFQ0E1NTNGNzEzRjlGOEUyMjg5QTg3N0U1RjlFCi06MTA5MDAwMDAxOUI1REY4RTQ0NkU2RjJGODM3MTRCNjkzRTc5MDhFRjdGCi06MTA5MDEwMDAxNzIxNkYyQzc0QzI0QkYyNkY1MTQ5MzcwMjNGMkFENjg5Ci06MTA5MDIwMDAwMjY2MDg3RjNGNTM4RkE2REUzOTE2RjJCRTU0RjIzQzJCCi06MTA5MDMwMDA1N0FGOTFFN0ExNTFDQUMxRUI3MUJEOEQwNTdFMURGQUY1Ci06MTA5MDQwMDA2RDJBRjREMzczQkIyMTk1RUNGN0ZGM0JGMzczQzRBRkU4Ci06MTA5MDUwMDA3QUExM0U0MkVBQjc3Q0M5MjA3NjQ1RTNDMUIzQzQ2RjJBCi06MTA5MDYwMDAxODMwQTY0NUE5MUZENTkwNTAyOUNDRTc4ODAxN0UwRTVGCi06MTA5MDcwMDAyNDQ3RjVDNUYwRkREMDJGNDkzRDQ5ODlGRkQyMDRGQkI3Ci06MTA5MDgwMDBFNDU2ODVFQ0VGMDEwRTEwNEY2OEYwRDE3Q0I5QURCRTBGCi06MTA5MDkwMDA5QTQ4MjYzQzBCRDBBQTQ1MkVGMEJFRDVDN0UzNENBQTcxCi06MTA5MEEwMDBBNEU0QTRGMjkwOTREMkE0OTQwMUZFRTQxMkQ0MzkxNjVDCi06MTA5MEIwMDBFNDY1NTNBMjBDRjQzNDVBQUJFOTMwNEVCRTlBMjgwMzRGCi06MTA5MEMwMDBGRjcxRkUxQTJEMEEzRTc0QTU5NERFMjNDMkYxRTFGMTcwCi06MTA5MEQwMDBBMUQ4MzM0MUE4OTcxNEVFQzVFMzE2RkFBOURFQ0MzQjFDCi06MTA5MEUwMDA5MTIwRjcwQzVEM0EzNUQzRDVGRUJGRkY2NDE5RjlCRTY4Ci06MTA5MEYwMDBCREJFRTI1OEI5ODU5RjgzNjlFMjk1MEYxNENEN0RENDNBCi06MTA5MTAwMDA4N0ZCRkQxOTZDNzQ4NkE3RUY5NzNGMDdEQkVGQ0Y3Q0Q5Ci06MTA5MTEwMDA1NDlGMUUzQTM1N0UwNEQ4OTc3NTY5RjJBODI1MERFMzUxCi06MTA5MTIwMDA2OTE4OTU0RkUwOEZEODM4NTYxRjkxMTlCNEY2NDNFMTZFCi06MTA5MTMwMDAyMUJERjg0MzhBRDc4OTk0M0UxQkJFM0YzRTAzRkE3RDhBCi06MTA5MTQwMDBFOUQ0NzIwREZDN0RCRkNGMkUyMkZCODZGM0NGNzkwREMzCi06MTA5MTUwMDBCMDVGQ0U2N0ExMzUyNERGRjJCOTk5QUZDMEZFRjBCNzlBCi06MTA5MTYwMDBGNTg3QjM2NDhCNUMzQ0ZGOURBMzMzM0NCOEJGRjNDRjYyCi06MTA5MTcwMDAxRTlEMjExM0U2NEFEOEY2RjExQkFFRkM3QzA2RDgwOUU5Ci06MTA5MTgwMDBFNjVDNTQ1QzgzOUZENTlBODJBMERGNkE5NUFFODNFNzQ0Ci06MTA5MTkwMDBDOUVEQ0E1MTlBRTEzOTNGOTA0OURBRTc4QzEwMUY4NDMyCi06MTA5MUEwMDBCMkE0RkU3Q0Y0M0JEM0M4QkE2OTVDODFDNTcxRjBGQTA1Ci06MTA5MUIwMDAxQTgyODRBRTM1QkMwMTgxNzhBMUU5MUQwREYxQUM1MzUyCi06MTA5MUMwMDA1RTQyN0Y5NzBBNTA3MUMxMTRGMDBCNEFBNDVEQ0Y1QURBCi06MTA5MUQwMDA5NDgwN0MwQTI1NTkwM0VDODk3QzNGNEQyMEUwOUJDMDlDCi06MTA5MUUwMDA3MUVEMjBBMTM1NzZDRjVCQUJBRjkwRDEyMUNEMjNEQ0UzCi06MTA5MUYwMDA3Q0VBRkVGMTAwMUYyRUQ3RTU3OTg4QzQzMzdBNkU1MUUwCi06MTA5MjAwMDAxMzYwOEYzRTJDRUI1RjU5MDE3NkUwNkQzMjk5MDcyRThCCi06MTA5MjEwMDBGQjM0MTczQzJFMEYxNERBRTA5MkM1RTIxMzFDQUZFOUMxCi06MTA5MjIwMDBFODY0NUIzRDhBMTY2MTc4RkZCODVFOERDMkY4Q0ZEN0RGCi06MTA5MjMwMDA2QkE0RkNBM0ZBMDgyOTFGQThEN0M5RjNCOUZBNjJGMkY0Ci06MTA5MjQwMDBFQ0FBOEY5MkVGMURGNUE1RTRDOUYzRkFDOEQ2NUUyMjA5Ci06MTA5MjUwMDBGNjc0QUMwQ0Y0RDAzMkVBODdEMzc0RDE4MDdDODUwQ0UwCi06MTA5MjYwMDAxOUE5QzNCMEE5QTI5REZDNDkyNUVDQjc0MUFFNjQ2NDFECi06MTA5MjcwMDAxMUJFMTdBMDdEMzZDQkYzMUI5RTNCQjdCNTRDNEZDOTMzCi06MTA5MjgwMDA1NzJFNEYxQjNDNDgwMDc5NjRDRUEyN0U4NjEwRjQ4NzhGCi06MTA5MjkwMDBEQjY3MkY0NUU4MkQ4QjVDQkY4MkZGNzlBQjk4QUQwRjY0Ci06MTA5MkEwMDBDRjI3QzNCMDdGNzdENjBGQ0I3ODAxNTk3RERCNjFCOTZCCi06MTA5MkIwMDA0OENBQTk3RURERTEzN0Q0MjdGOENCREZCMkQwRjdBRUJDCi06MTA5MkMwMDBFOTc4RDU5ODhFNzYwOTU0OEUzREM4QkVFRjk4M0UyMzM2Ci06MTA5MkQwMDBFMzc2MjhDRjlBOTE0MUYyN0Y2NzIxNURDMzcwRENBOUM0Ci06MTA5MkUwMDA4QkE2MjcyMzU1N0Y0RkZERTE5Q0YyQjE0QzA3ODE5QzUzCi06MTA5MkYwMDBBQUQ1RjZCNjU5RjYzMUY5MjY1QTE1QjNEMENCQ0UxQUZGCi06MTA5MzAwMDBCOTYyMUZCMTMzRTJCOThCMjc5MTdDNjNFNkQ3REU1NzkwCi06MTA5MzEwMDA2RUNDMjZGRDkyNzI0MURCQTE3MjkzRTkxNTkwMzM3M0Y2Ci06MTA5MzIwMDAyRTUzM0RENEFCN0ZGRTRDREY3M0JEQTczMEZDNkY5RjQ3Ci06MTA5MzMwMDBCRDQ1MEEwMzlGODAzQzA1Nzk1OTEyNDc3M0YxM0M4MzcwCi06MTA5MzQwMDA5RkE0RjFFRjU5RUYyNDExRTRGNzI5NTFGQzFFRUM1MUQxCi06MTA5MzUwMDA4NUU2OUJFNDQ1MTIwMjk0OUZGNEM1QTZGQTYxM0Y5MjBDCi06MTA5MzYwMDBCNTNCQjkwRkUzRkIwRjVENUUxREUyOEQ1RDJGRkU5MUY2Ci06MTA5MzcwMDBFNDY3NDg5MzE1MTVGODNCRUZGOUQzMjQ2RjQ5MTJCQjA2Ci06MTA5MzgwMDAxNUQ4RjEyRTZCQkI3QUJFMENGNjJDNEM4NERDMkI4MEVFCi06MTA5MzkwMDAxNTM1QzZCMzk0QzNENjY3NzYzNjk1MDMxQ0M1Rjg1OTAwCi06MTA5M0EwMDA2QkZENURGRUY4QkQ3NEM3OEMwQzM1ODJGOUMxQzdEQTYwCi06MTA5M0IwMDA5QkUzOUI4QzdDNUNGNkQwRjJCMkI2NzE0REU2NkMyOEQ4Ci06MTA5M0MwMDBFM0ZBOTlCNERDODhFRDg0NkQ5OTlEMTExMTk3ODM5QjI0Ci06MTA5M0QwMDA4QjlBMEU4RjgyMzJBRjVGRDQ2NEUyRjYzMUE2MEY1MEMzCi06MTA5M0UwMDAzMDVFMDBGQ0RFNUJENjcwMzk2NDI5Q0JCNDhDNTRGQTU1Ci06MTA5M0YwMDBFNEVCREQ3MEU4OEZBRjhDQzQ3MEE4N0E1RUU4MjQyMUJFCi06MTA5NDAwMDBCRUU3RjcwQUIwRUVCQzAzN0JFOUI5ODAwNDIyRkJGRTlECi06MTA5NDEwMDBCQzg0OTA4MEEzOUIxREY1ODdCNTQ2RUU1Q0UzNzhDMUM0Ci06MTA5NDIwMDBBMjYxNDI4NERFMUJBNDI0M0M1MUQ4NUU0RTYwRjc4MkM4Ci06MTA5NDMwMDA3MEJBNzgyNjQwRjVDMDg0MDQ2RTZGOEQ0QjNCRUUwOTAwCi06MTA5NDQwMDA5OUMwRUVBMTIxMjQwM0YyNzIzQjNERTdFQkE0RjNGMUI2Ci06MTA5NDUwMDBBQ0JGM0E2NEI2NDlBMEI3OUZGNjY4MjQzRUNFRkNFQzk4Ci06MTA5NDYwMDBFN0I4RERDNEZDMzlGNzMwMDc5RTY3OEJFOUJGMUFFNDIzCi06MTA5NDcwMDBERjZBOTlGODgxRDcxNzI0MzY2MzFCMEFBREZGNjE0MTczCi06MTA5NDgwMDAxNDVCQUNBOEM5NDdFOTY1N0Q2NjY3Q0U1NDRDMkY0RDg3Ci06MTA5NDkwMDA5OUY2NzIwM0NCOUY4RjY0OUE5OTU5MTMyMTdGRThBMUEzCi06MTA5NEEwMDBEMTkwREY1Mzg1REE1NzdFMTFFNkZCNTMxQTBGM0Y3QkNECi06MTA5NEIwMDA3MDU2QzY3NUI4QkNFMUE3MzQ4RUIxQTFFQkE4MDJGNDEyCi06MTA5NEMwMDBCREMzQ0ZGMjhFQkFBRUY5MTRBQ0FGNkFCQjQ4Q0VDNUZECi06MTA5NEQwMDAwMTVGMUFFM0YxNzQ4REY2QUI2NTRDMkZGRjFBMzgzOTMyCi06MTA5NEUwMDBERjg3RjFGRDY0QTFBMTg5RDcyMEY0QzZCNjc3OUJENEFDCi06MTA5NEYwMDA0RkUyQjJBMjREMDBGQTc4NjNEQkY5MjZBMEFGRjVCM0Q0Ci06MTA5NTAwMDBGODdENzZFNzVGMzY4QTU4RkUyMzA2REU4RUI2RDk0REEzCi06MTA5NTEwMDA3MDBFNjNGRkFEMTU5RjAyNzMyQjQ3QTRGQzhCMDk5MjVECi06MTA5NTIwMDBDNEI1QTVDQzQ2NzI3RUVGNzc0RDIyQjE5RkMxNDVCQTM2Ci06MTA5NTMwMDAwOUMzQkQ0ODQ2ODc2NUZDRENBNTYwN0MwMjlGMzVDQjJFCi06MTA5NTQwMDA0NDFFRTJGNzJEMUU4Mjk3NzY3MjdGMDg2QUExRjc1MUJBCi06MTA5NTUwMDA4QzdEREVCQjFBRUNFQ0EyMUE2MzJEQjFCN0I1ODlDNEMxCi06MTA5NTYwMDAwRjMwMUFGNUZFOTAzQzg5QUIxMDk1QkZFMzM1NTQyNkI5Ci06MTA5NTcwMDBFMzdBMjUwMUVBMkYyRkFBQkM3OTNEQjQ5MzQyNEJGRDMzCi06MTA5NTgwMDBDMEVGMzk1MkMyMjRGRDdGOERDQUUxNUQ2MkEyNTMwNTRFCi06MTA5NTkwMDBCOTFDMkUyNEY4REQxNUE2NzQ2MTNFM0M5MUQwQzU3RTIxCi06MTA5NUEwMDA3MUVFRDU2MDE3MzUwOUFCREI1RTA1QkM2NjE2OTI3M0FDCi06MTA5NUIwMDBBRUYwN0UyM0FDOUZFMUIzNDE4QkFBODBCRkZEMEM5RjMwCi06MTA5NUMwMDBEMjVFRDE4NDdDNERGRTdFOUI3MEZCNUE4MEVCM0JGRUNECi06MTA5NUQwMDA4REYzNTUwQ0Q3MUNBRkQxMzIwQ0UzRTE2REZGQzZBNjVECi06MTA5NUUwMDBDODJDODI4NzQyMTU3RjdGQkJFRERFMjYxNUUzNjVGRjIxCi06MTA5NUYwMDA2NjIzNEZCMzk0QzdGRjA1NEI3NTIyMDdFRTI1N0NERDJDCi06MTA5NjAwMDAxODdDNzQxRDI4MjFGQ0ZENjVGMDdGM0M5OUM1Rjk5RUVFCi06MTA5NjEwMDA3RTJGMkFFQzk1MjMwNkQ4QTUwRDY2NEFBRUE4NTgyRkIyCi06MTA5NjIwMDAxNDU5RUE5NzYzQjlGMENEQzcyNDgyRDdDMzc4M0M5MDI4Ci06MTA5NjMwMDAxMzc4MUQyNkQwN0RDRjA0OTlEODA1N0UzQzE3M0YyRTg4Ci06MTA5NjQwMDBGQjI3MTU5MjdDNUJCQzZFRTQwN0JCNjE5MjRDRjQzQzNCCi06MTA5NjUwMDA4RkUzMjgxMzQ0NjIzNzQzN0RBMDA3N0Y2RTIxQzk5RkEzCi06MTA5NjYwMDBDM0YyM0EwNkU3N0NBNDA4OERFQjQ4RDIxRTAzRjMzMDIwCi06MTA5NjcwMDAwQUIwRkM3RDQxNUI0NEVFMTdGMTE1NUJGMjBBNDBGRTM3Ci06MTA5NjgwMDAzQUYyMTAyNDQ3NzlBQ0I3M0IxN0NFMkI2NTlGNUMyNDg4Ci06MTA5NjkwMDA4Q0M2NzgzOUVENjc3MTk5NkNCQzhGQzVFRjdGRURBN0VCCi06MTA5NkEwMDBFNzFCRUY4Rjk5Mzc0MEJFMENEMkJCNzM2OTNDMkEzNjVCCi06MTA5NkIwMDAxNTlFMjM2RTJCMUFEMTlGRkZBNUVGN0UzNTRBRUM5NzlFCi06MTA5NkMwMDA0N0YyNjVENzdDQjBFNzAyNzQ1RkU0MUQ1NTQ0RUVDQkVBCi06MTA5NkQwMDBBODQzOThGRjgxMkZGOEZEMkE0QzdFNzg5OEJERTAzQzg2Ci06MTA5NkUwMDAyN0MwRTU4OTI3OTNBRUIxQjY3NURFODhBQzYwRUExQzY5Ci06MTA5NkYwMDA5QzE0MzQ1NDkwMDcwN0I1QTkxOTYwOEZFQTAxQ0FFRjhBCi06MTA5NzAwMDA4REM5NTk5RjA1QkI0NTY2RjI2MDhGOEY5RThGRURDOTRECi06MTA5NzEwMDA0NDlERkIxMEQ4QkY1MTY0Q0Q0QkUwRjI2MDdCQkQ0QTQ1Ci06MTA5NzIwMDA5RTRGQ0MxOTQ3RTI5NzRGQ0NDOTk5MEJGMThBNDNENzhBCi06MTA5NzMwMDBCRTQ3RjZCRjE3Rjc1MEZFQkQ3OEU0NjVCODIzMDk1RDU0Ci06MTA5NzQwMDAzNEU5Rjk1QzIwMkJFMjk3NEYzRTQyRUUwMUY5ODYxQzhBCi06MTA5NzUwMDBEQjQ5RjJFNTIxNUYwNzRGNjk2N0E2M0QwRkYzODkwMEZBCi06MTA5NzYwMDBGNTlCRkU4OUM5MjdBQ0I3Qzk3NzdFM0Y4NzdDRjkxMzgzCi06MTA5NzcwMDBDNDBGQkM5NUM5NUQzNTVFNEVGNjk1RTBDNkQzODEyRTBCCi06MTA5NzgwMDA1MDNCQjk2Nzg5QzNDMTc5MkY4NzdDNzkzMjY5RkYyNzNDCi06MTA5NzkwMDAzRjg1M0ZDRjVGNzJFNjI5RjFGOUZDODBDREE3RUY3REQxCi06MTA5N0EwMDBBRTc2N0M3MEJGMDZDNzAzNkY1RjJCMTgyM0I0N0VFOENDCi06MTA5N0IwMDBBNkZBQjI4NDEyOTZCQzkwRDRCOTBEODVCQ0JGMDBFNzVFCi06MTA5N0MwMDA1RDMyRTA1RTk1NzhGQjc1MDVDMDA3MDk2MjI3RkE4Mjc1Ci06MTA5N0QwMDA4REI2RkI1OTUxNDRFRUIxOUUyRjA5MzhDRUJCMzhGOUY2Ci06MTA5N0UwMDAwNUVFMDUwNjNEQURFOEZEOUY2QkY5MzVERUU2RjJCQzAyCi06MTA5N0YwMDA1QzkyQTcyRUEzQUY4MjVEN0IzRUYwRTYwQ0YwQzc1NUNFCi06MTA5ODAwMDA2MzMxMDFBRTcyMjQ5QkU0M0NFOTA1QjYyRjkxOUZCRjAyCi06MTA5ODEwMDA5NzlDRTdFMUYzRTNGRTM4NUVBRTNBQjA4OEY4RTlBQTM4Ci06MTA5ODIwMDBGNzA3Qzk3OTlFQUEwNDk1ODMxQjU0RjNCMDU3QjRFNjkxCi06MTA5ODMwMDBERDFBNDlDOEI3RjUxQ0EwRkRFOTgwMDM4QzhGM0Y2ODhECi06MTA5ODQwMDA2QjcyNjFGRDgxQkEzMTMzRTE5QzQ5OEU1ODczRDU2OEUyCi06MTA5ODUwMDA4MDhGNENGMTAwRkJFNTY3ODNFNDlDQUUwQzdBOUM4RjEzCi06MTA5ODYwMDBGQjRCQjYwRjVDQzZFQzkxMDAzMjQ1ODBBN0U0OEY3NkM3Ci06MTA5ODcwMDAyMzdBNjZEMTkwQjE3RDI0RjVDQUJEQUI5QjgwMUY3NjVCCi06MTA5ODgwMDAzOUVDQUQ1RDdFNUFERUJDRURFQUE2NDZBQTlGODk1QzQ2Ci06MTA5ODkwMDA1Q0Q2RjYyRkM0MUU2QUYyRjFGMjczNDQ0RUVFNTJEQTMxCi06MTA5OEEwMDA5MzIwMjdDREU3QkMzQUU4M0REQzlFOUM2MzM3NkYyREMzCi06MTA5OEIwMDAyNkZBNDMyQTQ0NzkwMEI3NzI3MEI0ODBGQzdCQ0VCQjkxCi06MTA5OEMwMDAwRkZDMEM0RkZBRTIzMUJGNjVCRjczM0U3NDYyMzRFQzlCCi06MTA5OEQwMDAyQjVERkEzMzZERkQ4RDFFNUE3Rjc4RkMyRUMwMDNGRjgxCi06MTA5OEUwMDA1RTFFREU0REZBQzdFRDg4QkYwM0U1MUY3OTEzREJCQUI0Ci06MTA5OEYwMDAyOEU3MzkyRjM5NjdCOEM3NjNCN0I3Rjk3MzM3OTMzMzk4Ci06MTA5OTAwMDAyRDhFN0IzOUQ0NzhBMzAxOUI3M0NFOUZDRUZCOTMzOUU4Ci06MTA5OTEwMDBCRkNBOTcyN0Q4RjJBNDc0QTY5RjY1RDkwMDU3MjVGRTIxCi06MTA5OTIwMDAzRTkxN0NGRjkzOUZEMjQxMEJDQkM3NDkzRjRFNTY5QTQ1Ci06MTA5OTMwMDA3MUVDNzFCQkJFRTNDQzYwNzIwMjMxRkU5N0I1REVGQjA5Ci06MTA5OTQwMDAzNkZCQzk3Rjc1QzYxNzlERjI4RDNGQjk3Q0NCMEU1MDkzCi06MTA5OTUwMDBGRThBMDlGMUFFMDAxRTY3NURBMjczODE5RkYyRTc2NDgzCi06MTA5OTYwMDBFMENGM0I5OTVFMkFFRTc4RTg0NTUwRUJERjUyOERGNzY5Ci06MTA5OTcwMDAwMTNGMkI1NTYzNkM2MEY4RDBGOUU3MEQzNjlFOEJGQ0U4Ci06MTA5OTgwMDBBMjc2RDkxQTZBRTdENkI2NEVGQjE0OTQ2Qjc3MTQ2QTlFCi06MTA5OTkwMDBBNjRCQkM4ODNGRDc1QzBFRDhFNEQ3MEVCRkNFRUU0NUIxCi06MTA5OUEwMDAzNDg5MUM1QjczMzk0Q0JFN0Y3NEUzRjk2Q0U3RDlGQUQ4Ci06MTA5OUIwMDA4RTE3MjRERkY5NzhGNzM4RTRGM0ExNkJGRjZENTcyOTkwCi06MTA5OUMwMDBBNkUzREE2NzNDQTJENzMyNEVFRDMzRUMxQzkwMEZDQjA2Ci06MTA5OUQwMDA2QjNCQkYxQkMwRUY3MjAxRUFDRDUzMDRGOUIwNTM2MTdBCi06MTA5OUUwMDA2NTEzMzU4MzVERjRBNDU1M0U5NDgyREQ5NjZBMEZGN0M2Ci06MTA5OUYwMDAxMUVFRjRGM0Y2QkVFNkYyN0M5N0ZBMDE0N0ZENDJERTgzCi06MTA5QTAwMDA3RjI2RTlERjM5MUYyRTdGQTAwQzc2OUFGQzE3MkY5RjQ3Ci06MTA5QTEwMDAxRjkxNUYwRjg5OEVGRUIyRjhGODc5QTQzRjZFQUY3Rjc5Ci06MTA5QTIwMDBBMUFERjAxNTUzMDYzQTREOTQ4REE0RkUxRDFERUM4MDlBCi06MTA5QTMwMDA2RkM4NTFCRkY1OUVBQjJGRjhBOURDNUM3Mzc5OEMwRDE0Ci06MTA5QTQwMDBERjI5Qjg4RkIzQkRGRjREN0RDNDk2QUY3Rjc3QkM5NjNECi06MTA5QTUwMDA5Q0QzRjgwMkYzMjdBRUMxMTYzRDY5Qjc2N0E0MkQ0RjFBCi06MTA5QTYwMDBGRjFGRjNGOEEwRjNCODJFQ0QzQ0U2RkM4REU3NTE2MDY0Ci06MTA5QTcwMDBFM0NGRDQzQzhBNkNFRjNGRTgzQzdFRTBBM0YyRjgwNUVDCi06MTA5QTgwMDBGNjlDQUZEMTdCMDFFNkVCMDJGMTVCQ0ZDNzc1N0Q5ODA5Ci06MTA5QTkwMDBENjZGQzA0RjE1M0ZFN0NCQzgwQzkyRkI2QjEzQjQzRTlCCi06MTA5QUEwMDAyRTgzM0ZFMEIzN0ZCOUVGOURFQkM5N0RDRjA2QzlDN0Q5Ci06MTA5QUIwMDBFMUY3NEVGMUZCMTAwN0JBOUZDOEY5NzcxQjlDREYwMzUzCi06MTA5QUMwMDA2OUVFNUZGRDYyOTBDMkU5QTEyOTM3MjE5MkJGMUU4QzI5Ci06MTA5QUQwMDA5MzM4QzFDMURDMDUxMUIwRDNCRjMyQTU4QTNDMUI3M0RBCi06MTA5QUUwMDA2NzQ0NDAxRTM1ODQzRTY3Q0IzN0M3N0IwNEQ3NzNCMENECi06MTA5QUYwMDBFRkIxN0VEMUU1MUI0NEVCNzk5NEFENzAxRUM1QTUzRTU4Ci06MTA5QjAwMDA4RjhCNkQ1NUY5RkQ4MDFGQ0Y3QTc3N0Y0Q0VCMkQwRDM0Ci06MTA5QjEwMDA1MUZEQjk1NThEOTNCODYwNzNFNEUzOTlGRkIzNDEzQUIxCi06MTA5QjIwMDBDRTQzNTNFNjIwM0FERjM5NDkxQUY3NTE3NEVCNzk2MDk2Ci06MTA5QjMwMDBGRTNDMTg5QTExODE3NTM2NjQyRTg4MDAzRDM3NjZDRTNBCi06MTA5QjQwMDBCMEFENDc0QUIzOUU5NTdDM0REQUM3QkI5RTdGRUZDNTVCCi06MTA5QjUwMDBDNzA3NURDRjAyRDczQzU4MzlEQkZEREVGOUM2MTAxREMzCi06MTA5QjYwMDA2RjZCMjQ0RUU4RUNFMzVBRDc5OTBGOERBN0ExQUQyQjZDCi06MTA5QjcwMDA4QkFERUI4RTIwREQ0NzZDRDUyOTFGMDVBNEQ4N0YxNDUzCi06MTA5QjgwMDAwODAzRjNFMTQwN0Y0RjA0MTVFOUUyNjBGMkYwN0VDNTdGCi06MTA5QjkwMDBFMDk1OEU3RjZGRjUyNDg2QzNCQzRFRDREM0ZERjM2QjY2Ci06MTA5QkEwMDBFQzNFQTk1RkFENjkwODExQkZCNjYzOUNBREY5RkI0MkZECi06MTA5QkIwMDBGREY5MzlGRUQ3MUFGQkY5RjQ4MUU0ODYxOUE0NzFBMEU2Ci06MTA5QkMwMDA1QkUyRjY3NkNCMkIwM0FFRjc5QjYwRjhFRDJDMjg0OEQyCi06MTA5QkQwMDBDMUIzMEZGRTNGNjJCOEE1QTNDN0ExQzJBRDM5MzIzNEVECi06MTA5QkUwMDBCODBEQzQwNzc3QzAyNTM3ODM4MDFCQTdCNzc0RkRGQzY5Ci06MTA5QkYwMDBGRjQyNjdCQjgzRDQ2RTE4MDRCQzA4N0RGREFERTBGNTYxCi06MTA5QzAwMDBGNzRBNUZDRjBFOUVCRUZFMDEyRkEyMzcwNzQ3NUY1QzZCCi06MTA5QzEwMDA4RTc1MjhGNDlFNDU2NzNGRUY4NEU4M0Q5QkUzODU5QTY3Ci06MTA5QzIwMDA2MzM3NDI3Q0UxMzMxMkYxRjcxRURCNTNCRTAxODlENjY0Ci06MTA5QzMwMDA3QTU0QkYxQ0FCOThCNzgxRTRCQkM2MDIwOEVFQ0YzQTlBCi06MTA5QzQwMDAyRTQ2RkZCRDA0RTIwRThCNjkzQjY3RkZDNzE4N0M1RUEyCi06MTA5QzUwMDAwRTY1QjI3REJFM0UxQ0ZDMDhDNzYzNEJGQTVEMUZBQUIxCi06MTA5QzYwMDBCMEFDOEJFNDY1NUFFRUEzOTJGQUMyRjcxOEQyNzc5NDlGCi06MTA5QzcwMDA4MEJGNjlBMUZCM0MzODNFRDM4RDNCNTQ3QzFFOEY3RDU5Ci06MTA5QzgwMDA2MzQ4RjgxQzY4QkQ1REExQzFFQUE1MDRDMTQzMzZFQTdBCi06MTA5QzkwMDBGRDNCMTg1NzAzM0MzQjQ0OUFDRjcxMEE1RUNEODJGQkQzCi06MTA5Q0EwMDBDOTEwQTlCNEJDNzIwNEI5RTc2QzRBOThFNTNEMjlGQTE5Ci06MTA5Q0IwMDAwNkYwOTM3OTk3MkNEQzE2QzI3ODNCQkUyQzUzQjBERUFECi06MTA5Q0MwMDA3RjI2ODZBOUREMzI2Mzg1QkI1RDk4MTFBNjc0OTA2QUY0Ci06MTA5Q0QwMDAyRkEwRjE3QURGN0E3RjY1RjZFM0IyMTVGNDVFMkEyNENECi06MTA5Q0UwMDAxQkEzMTY1QkNFRDU0RDA4REJCRjNCREI0N0MyNjEzMjAxCi06MTA5Q0YwMDBDRTcxQzFGRDdFNTgzRjlCQzdGMkE1RkRCNzQ3QjVDM0U2Ci06MTA5RDAwMDBEOEUxNkQ2RDkyREJGRDgyOUMzRkZFNEYyODNFMkM4QzhFCi06MTA5RDEwMDBFQkJGMjZDNEJGRkU3OUEwQTMwOTQxMUFGNzkwNTEwMUY5Ci06MTA5RDIwMDBDNEVCNzkzRkQ5MzI0QTJBMThFRUVGNzhCNDQ5RTBBNzVDCi06MTA5RDMwMDA3NUU5MjdCRkJGN0VEMkMxOTVBRjg3OEYwM0FDMDhGNzA3Ci06MTA5RDQwMDBCMkUwRkQyM0Q5MkY5NjE4MDhDRDg2N0RBMjM3N0EyRjUxCi06MTA5RDUwMDAzRDZDNDhFOTIwOEJFNUNGQ0NBQzA5MjQzNjgzOUQyN0E4Ci06MTA5RDYwMDBFMzc1NUFFNkRCRjVBNzc5OUY4NkVGNURDNzQ0NkQ0QjM3Ci06MTA5RDcwMDA0MTVGMzgwQzI0MUZDQUMyMzRERTkwMkRDNUI3RjhDMDJECi06MTA5RDgwMDAzRkI2NEE3MEJEREZFQ0RBMzBGREZCMjNFNzQyQkQ3MTIwCi06MTA5RDkwMDBGNTUxMzBDRUI4NDdFMzFFQjhFN0UwNjY5NkRGODQ1MDUxCi06MTA5REEwMDA3Q0Q0MjJDQkY4RTcxODlEMzhEQjY1NEIzNDFFOEQ1RUUyCi06MTA5REIwMDBBN0ZDRENCMTZGREQyODM3RkVGOTM5RTNEMzczQTE2MjZDCi06MTA5REMwMDA1QjFFQ0VEMkQ4QkQxRUUwQ0ZBNTBCMTc3OUY0MjA3QzQ4Ci06MTA5REQwMDBENzI5QkRCMTc5NzQyOEYxNTFENzA0NTM3MDRBMkI4NzI0Ci06MTA5REUwMDAxODdDQkE0RUM0MUJFMDdFODc1NTc1MDI4OTIzNEREQzcyCi06MTA5REYwMDA0NEU5NkVENUE2ODNFMjA2RkNEQ0NCRjg2RjkxODA2QzVCCi06MTA5RTAwMDA3OTkwRjczMEJDNzZFQ0YzOEY4NkY5Nzc3MDNGMUQ3NDRDCi06MTA5RTEwMDA4Q0U3QjE3MjM3MjI3RUFGM0IxRkZDRjQ1NkI4NEJCNUNFCi06MTA5RTIwMDA1QjQwQ0M0Rjc2QTAwMkYyMERCQTU5OUU4ODg5QkY2Rjc1Ci06MTA5RTMwMDAwNkY4OTUwRjI3RjMxREI3RTlGRDVBOTBDRjVEMEEyMjZBCi06MTA5RTQwMDBFN0U1RkVCM0Q1NEJGRTZFMDVBNzk3NUUzOUIxRTk1MjQzCi06MTA5RTUwMDAzRDI0REQzREEyMjQyNzAxREQwQzZGQThGOUJDOUI5RkFBCi06MTA5RTYwMDBGQzAxMzZDRjNGMDQ2MzE5NkU3NjJFN0Y3Mjc5Q0VFQkZDCi06MTA5RTcwMDAyRDk2NzU4RjVCRkQyNTE1NzYzOUM2RTczRENDOUIzQzRECi06MTA5RTgwMDBFRjc2NUY0MzJGMUQyNkZBRDc3QkJGNjA3MjlDRTNCRDQwCi06MTA5RTkwMDAxN0RGMjdEQ0Y3NDU1RjYxNzJBRjIzMzE3NzNERDE1Qjc4Ci06MTA5RUEwMDBBNjU3MDc3OUM4RTdDM0UxOTU2RDUyMzhEREJDNTRCMkI3Ci06MTA5RUIwMDBDOURCNTUwQjAzOEVGMzQ4MTRBRTlGRjVFQThGQzEzQTA4Ci06MTA5RUMwMDAxRUQ5Rjc2RjkzMDAwRjRFRkRFMDk3RTIwQTdDQkYxQjhGCi06MTA5RUQwMDAyNTNEMjAyN0NFNDgzQTc5QkU1NjZGQkY0N0ZBMzUxNDQ0Ci06MTA5RUUwMDBERjMxMURGNDY3OURFNENBNTdDRjMyQkNCQzU2NzlDNzM5Ci06MTA5RUYwMDAzMjMyRkY0NjQ5ODNGOTlGNUUzMUVDQTY1MjkwMkY5NThFCi06MTA5RjAwMDA5RTI4RTQ0RjlFNkVCQzJGNzQ5NzY1RkQ1Q0RGMzlFNzk5Ci06MTA5RjEwMDBGNUFCMzU3N0Y0QUJCNzk2NTdEQUYxRDZBMTUwQkJDMEE1Ci06MTA5RjIwMDBGQzE0RTVDM0I1NThERUNDMjZGNEQ1QkQ2MzI2MUVGRjcwCi06MTA5RjMwMDA1ODIyRUI5QTM2NUExREMxREY2OTVDQzI3RTNGMjNDNkE4Ci06MTA5RjQwMDAxRjlDODlFNUNENTk5MUZBQzNDQzdGQTI3MjYzRTlBMzI2Ci06MTA5RjUwMDBCMTI2ODhGMzlFQUQ5QkY2NDIzN0FFRjcxM0E2MDdERTE3Ci06MTA5RjYwMDBBQ0VCNUYzRjNBRTk2OURDQTNGNkZCMjk2NzlDNDAwQTRBCi06MTA5RjcwMDBCNDhGRDdCQUVCODM1QjMyMDM0Q0JFNDQ0NzgzN0NCOUMyCi06MTA5RjgwMDA2RDkzN0JCRDdGODZFNDRBMENFRkIzN0Y5NUQ2QjhFNTMxCi06MTA5RjkwMDA2RDVFRDZFODdDNTdDNURDREI1RkQ2NDJGNDNCRTgyNTM2Ci06MTA5RkEwMDAxNzM4N0YyRjIzNDBFNUJDQUM4RDA2MzlCRDJBQ0Q3QzA4Ci06MTA5RkIwMDBCRjlCMTEyNkZEQkNERDc0RkY2RDEwRUYzQjIzREFFNTdFCi06MTA5RkMwMDBGM0RFMEM0QTE3RjUxOTU0M0U5RkRENzdBQjY3MzhFMDk2Ci06MTA5RkQwMDBBOTU5RDA4MDFFREVDQThDNEUwMDdBNUJERDc4OUFGOEQzCi06MTA5RkUwMDAxMUZFODlENUFGMENDNjdFMTcxRTBFRkNCMjc4RkU3MDJFCi06MTA5RkYwMDA4Qzk3QUUxNTI4MkFFOEU5RTVGRjI1QzYzRkQ5MTJCREEyCi06MTBBMDAwMDBDNzAwRUJCRjc3NDBGRkUxQTZFRjEwRkI0MzM2NDZERjBBCi06MTBBMDEwMDAzMjg5NUVEOTA4Nzk4NTY3NDU3MzFEQzk0M0Q5RTdBNzk5Ci06MTBBMDIwMDA3OTQ3MjgzQUREN0FCRjhDMjc4M0MyRUZFQ0ZFQTFFMUE1Ci06MTBBMDMwMDA3QjU5MkNEMEFGMUQ3RjBDQjU1NzkxNzFGNzA3MzQ4ODMxCi06MTBBMDQwMDAzRjFFQUI5MDkyRDdFMzQ5QkVCQjNGQjA1NzJBRThDQjQ3Ci06MTBBMDUwMDAxN0U5QzYxRkFBMUQ3ODc2RkZEMEVDQzA4MUQ2RkQ4OTBFCi06MTBBMDYwMDA4QzgyNDFEOUY1MTcyQjFFNzlCMDA0Rjg0ODY5OUZFQzEyCi06MTBBMDcwMDAyNjdGQjk5QzNFQ0VGQzU2NEVGQUUxQ0Y5OThDMkVDRTZGCi06MTBBMDgwMDAyNEZBOUZEN0REQkJFREYzQjlBREM2M0UxRkNFMkY2N0Q3Ci06MTBBMDkwMDAxMjBEN0VDODBGQzdBMzRGQjJEQUE1QTg3Q0ZBMDBFNzVECi06MTBBMEEwMDAxQ0E4RkYzN0REM0MzRjlENjE5NzEzNDA3OTEwNEY1QjQzCi06MTBBMEIwMDBDQkU0Q0Q5Qjc1OEY4NEFENzg3MEFFRkZBQ0M4RjYwNzRFCi06MTBBMEMwMDA4RkQxQkNBREIxQjFENTczODdFQjI5RkFBQzY0NzBGODEwCi06MTBBMEQwMDBBOEU5OTJFQjE5NjczRjdGRUY3NEM4RjVEQzQwNzRDOEJDCi06MTBBMEUwMDBFNTgyQjNGRDM5ODhGM0UzQTVBRjk2MzUwNUUyMzJFN0EzCi06MTBBMEYwMDBDMjNBMkQyMzZEMDExQzkxNDFBNUVDREMzMkQyNDdDMzNECi06MTBBMTAwMDBCOTlCQjNGQkZDMDhGRUNFQTZEOUU2NEQ4Q0M1MkM3MERFCi06MTBBMTEwMDA2NkRGNzUxM0FDRUJGOTBBQzNDRkFBQTU5OTcwQUQwRDM0Ci06MTBBMTIwMDBBNjkzRTg4RDIzNDg3RTgxNDRFRUVCN0FFRDQ0RDYwMjc3Ci06MTBBMTMwMDAyODNGNzI0NDA0MDk4RDZFQUI1RDJEQzFGQTFFQ0RBMDdGCi06MTBBMTQwMDBGQkNFNTU5QjhFMTI3QjcwQTg3NEJFQUFDNkFFRkYyRkE1Ci06MTBBMTUwMDBCMzc1RjREQTU5NzI0RjA5RDA0RjNBMzgzNDY2NTAzODMzCi06MTBBMTYwMDAyQzhCMkQ5QTBGRjJGOThFNEQwMjkxQjc0RDE5M0FGNUJECi06MTBBMTcwMDBEN0NBMDY5MURCQTg5MUVBNDdBNDYyNzg2MDE1NzIxQUUzCi06MTBBMTgwMDAxNjAxRjBGODMyRkJGQjYzNzI0Q0IxOUU0RkJBNkJGQkM5Ci06MTBBMTkwMDBGREYzQzEzRTc0RjI0QjBFRDM0RjQ4MTM5OUJDOEY3RjMxCi06MTBBMUEwMDAzQjYzN0E0QTNFQkYyNUQ0MUMxQzgxQUI1QzlCQTFGMTZBCi06MTBBMUIwMDBGQjYxMDk5RkYyRjU1QzlCNDFENzg3RURCNDZGOTNCRkJDCi06MTBBMUMwMDBCQkM0RDY4N0EyMEU3QTEzREJBQjdFMDRGMDlGQUIxMjIyCi06MTBBMUQwMDBCQkMwRUZDNTcyMUZGMkU2QkVFMUQ3NjhERTFDRTUyQkZGCi06MTBBMUUwMDA2RUVGMzhEQkRGMkNDNzZENzZFM0ZGMDVCOTM3M0NCRDdBCi06MTBBMUYwMDAxREYyMEY3REUxNUVGRjdEMDZCN0JGOTVCRUY4Q0I0NzMwCi06MTBBMjAwMDBBNDJGOEU4Njc1OUI5REM1RjVDNkZGMDNDOEQ2MjkzMzNFCi06MTBBMjEwMDAwMDgwMDAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMDBDCi06MTBBMjIwMDAwMDBCREQ3RDBENzg1NEQ1QjVFODNFNzM2NjRFNjY5MjIxCi06MTBBMjMwMDA5OTY0OTJDQ0U0MUY5QzQ5MDAwMzI0NzgwMjIxNDQ0MDk1Ci06MTBBMjQwMDA5ODI0MDQ4MjYwOUQ0MDgwNjAwMzBFMDgxQTI1ODRBODJCCi06MTBBMjUwMDA1ODc5QUZEQ0U2ODQ0NDBDMTRCREYxRTdBQUI1NUVFRjkzCi06MTBBMjYwMDAxMEQwRjI1QUJDMEQ5NjVBNTREQThFNTQ1MDdCRjUzNjAzCi06MTBBMjcwMDBGODhCRkRBMjQ2NkIyOTIwODVFOEFCNTdEQjhGNUJERUIwCi06MTBBMjgwMDA1QUZCMjc3M0NFQzk0QzA4REFGNkYyQkRGMEYxOURFQzBCCi06MTBBMjkwMDBCM0Y3RDkzRkVCN0ZBREJERjZDRTA5OEIzQTNGRDM0MzQxCi06MTBBMkEwMDA4OEI2NTUyNjRGMTA0MjNFM0NGNjU5MzU5NjFGRThCNTA0Ci06MTBBMkIwMDBCODI1MjhBRkQ4Qjg0QTBFMzkwOTQ5QzY5Mjk3OTAxM0U1Ci06MTBBMkMwMDBFMUM1Mjk1ODNFOEYzRkIzODczRTZGN0E0NDI2OTE0MkJECi06MTBBMkQwMDA0MjdGQ0VDM0ZGRUI1QjkyMENFNTEzREQ4OTAxODJFMzg1Ci06MTBBMkUwMDBDRDcyODVDN0ZBMDlEOUFGMTA4RDk0MTJGMkMxQjZDQ0UwCi06MTBBMkYwMDBGMDE2Mjg1N0RCODlFNjlDNENDOEY0MTQxRjFEQ0ZCMzE5Ci06MTBBMzAwMDBGOThCNTZGNzI0OTg0RkY3N0YxNDkzN0M5OERGM0Q3N0FECi06MTBBMzEwMDBBRTA4MTUwRDFERjcyRjZFMEIyMTUzNjEwMDlGQ0Y0MjI0Ci06MTBBMzIwMDAzMjA4QjlDM0NFQzY1QzlENEMwMkQ4M0Y4MUYxOUVEMEE1Ci06MTBBMzMwMDBGNTJGQkU3QkJCOTU5MEM4RTU1MDNGMDZCRTJCOEI3RUFDCi06MTBBMzQwMDA2N0VFN0ZFOTc1NTc4RUM2NzVCRjdEREQ4Q0QxQUI4QTEwCi06MTBBMzUwMDBBMkRGQzU4M0MzNTIyOUY0MkY0QjcwREMzNjU5NDVCOEIwCi06MTBBMzYwMDBFRUI5MzdBMUIxM0IwNkRDQkU4RDcwOUQzQTc0N0NGQzIyCi06MTBBMzcwMDBCMUMyM0ExNkYzREY5NzZDQUVCOENCMDUyMEQ5OTIzNDUwCi06MTBBMzgwMDBFQkFBNTA4Q0YxREYyNkExN0JBNkMyNzhEQTY2MzY5RTU2Ci06MTBBMzkwMDA3OTlDNkJGODM4NkZEN0RGQjAwNEUxRkZCOTI2QkI2NTU1Ci06MTBBM0EwMDA4MDQ3N0Y4MzlDNUM4RURGRDVEQkQ0QjFEMDdGQkY3NkM2Ci06MTBBM0IwMDBCQjZCQUQ2RTlFQkY4RDAzOUZERjM2REVFMDhBODUwN0U3Ci06MTBBM0MwMDBGMTVDNTY2RkE0ODMwRkM4QzA2QkQzNzA5Q0REQjFFN0ZFCi06MTBBM0QwMDBCNzVFRDA5NzEyQkFGNzRBOThERkM5QUI2NTU1ODNGOUQzCi06MTBBM0UwMDA5Q0I0QzA3NzQ4MkY4RkMyNzdCRUExREZBREUyREY3RDdFCi06MTBBM0YwMDBCMDc5NzhCQTVDNUM2MzlDQ0Y5MjYzODk0NkJBQjQ5MEJBCi06MTBBNDAwMDBDNjlFMThFQjU5RkYxNUU5N0UwNUQyQkQzRDVBREVBMzY1Ci06MTBBNDEwMDAwQzhDNzJDM0Y3MUZFQzNDRjdERTlEQjg5RTlEODkxNDJGCi06MTBBNDIwMDBERUU2N0U5MjUzNjUzQURFNDlFNDEzODREN0Y2MDRDRTI1Ci06MTBBNDMwMDAyNzVEQ0RDRkMxNzcxRjVDOTNBMzZFMjE0M0Y5ODM5MDM1Ci06MTBBNDQwMDBBRTZGNEM4N0ZBQkU2RTRCQzk3NkE4REFEMzlERDQxODhFCi06MTBBNDUwMDA4RTMxREZGMUE5OEMwRTNDQjI5NjM4MDFEQTkzNzcxODcxCi06MTBBNDYwMDAzRTkwREM5MDZGOTY3MDdBNzM3N0ZGQjA4NTU4QTJERkNDCi06MTBBNDcwMDBCRDgzNzQ5MDQwQzgxQkFENzZGQURDRTFCNkQzRjFFQjM2Ci06MTBBNDgwMDAxNkQ2MkEzRTE4NjdBRDk1MDQxMDdFRjQwN0ZBNzU0RjZDCi06MTBBNDkwMDBDOERCQjkxRDg2N0FDQkMyQ0FEQTZBRTAzRjY5RTg3Q0JDCi06MTBBNEEwMDBCRUM3RTk3MjRGNzhEMUIwRjBBRDZGOTAwREYwQUM1QkU0Ci06MTBBNEIwMDA2ODg0QUY5OTNFOEY4NzJEMzVCMUQ2MkZFODM5REU3ODg1Ci06MTBBNEMwMDBEN0Q5QzI1RUM0RDMzMUJFREVCN0Y5N0E3RkRCRDhFRTBFCi06MTBBNEQwMDBDMkY2RTY3MUY2ODRCQjg3RTU4MzZGMzYxQUU5RTI0MjdECi06MTBBNEUwMDBFQjNDRTZGNjUzQjgyRTBGMTlCRjVCNTY2RjVDRUYxMkNDCi06MTBBNEYwMDBEMjcyMTUwMTUyNTk0QTU0MUIzRUVCNDg0QkYxNzMwMDdFCi06MTBBNTAwMDBDQUUzOEYyQ0E2RjM3OThCOTA5QTFFOUNFRkI5REI4QjU0Ci06MTBBNTEwMDA2QjhCQTNGRDFGRTZGMEZFQkNFRUY2NkI1MEVDQkNBMzBDCi06MTBBNTIwMDBCNDE0QkI2M0NDRTcyRDBFMjc4MUVGQjdFMkMwRjM3OUZCCi06MTBBNTMwMDAyRTc3REY0MTNDMjNCRDJFOTU2M0UyRjk2RENFNDdFRkM4Ci06MTBBNTQwMDAzNDBDQ0Y0NzRCRUI4NkM3RjNFRkRENkVERTRGN0IyMjNCCi06MTBBNTUwMDBBRUYzODQxOEY3NTEzNkVFODkzMDdCMkZGQUZCRkRERjFFCi06MTBBNTYwMDA4ODdGRkI4OTc2MEJBNUUzNzBBMjFCRjU4ODA3Qzk0MzlBCi06MTBBNTcwMDBBNzQ3NUE1M0I5RkUyOTFDNUU4Rjg4RTcxQjQyQUU5QTQzCi06MTBBNTgwMDBEQUQ3NTkwMzM2M0QzRTRBREM4Q0NGNDVCOTZFQTE3MTBFCi06MTBBNTkwMDA5RUVGMjdCQkQ5QjhDNDNEM0FFOEQyQzkwREFFNUY4NTVFCi06MTBBNUEwMDBCRTdCRTBDOTg5RUZBM0ZFRjQ3MUZFQUYwQjdFNkE0MzY4Ci06MTBBNUIwMDA3ODgwN0NCRENCODVFQjdBRERFMjQ2Rjk1QTc2MkM2MDVCCi06MTBBNUMwMDBEM0MzRUZDQTE0MDZCRjkzQkI4Nzg3REY5NTVDMUU1REJDCi06MTBBNUQwMDA0OENFOUFEN0ZCQzEzRkREM0QxOUZCRkRFMDlGQkVCMEUxCi06MTBBNUUwMDBFOUZCNUZGQTY1MkU4OUE0NDdDQkQ3RDc0QjgxNzAwQzY2Ci06MTBBNUYwMDAzRUJCRERBRDhDMDhFRUI3OUJFMDc4RkQ5N0EzNjlGRjBECi06MTBBNjAwMDAxRTk5QjRGNEM0NUExN0NBMzdFODc3NDlCMEMyRTYwNUIwCi06MTBBNjEwMDA3OERFQjA1OTUyMjVFODgyQTRCMjdFNkUxMEYyQ0VFQUZFCi06MTBBNjIwMDAxQjVEMEI3MEY3QjZCN0RDMTE4Q0QxNEYzOTg3Rjc5RkU0Ci06MTBBNjMwMDA5Q0MxOTQ1ODdDMzZDODFGOUMxRTQ0QkJBNUQ2OTAyRDQ3Ci06MTBBNjQwMDA1NjdCQjM1RUVERTc3QzZFNkVCNzAwRTlEMTNCNzI3QTY0Ci06MTBBNjUwMDAxQ0I0ODM0Q0VENDczQThGRTkyOThDMkZEMzEzMjI3RjBBCi06MTBBNjYwMDA0NDc5NDQ4QThDNzZEODA1QzczNUI1Mzc4RjNCMUZFMUNFCi06MTBBNjcwMDAzRTM1RkVGODI3RkYyQTM3QzY4MkMzQjc1MzE5RkQ4NjM5Ci06MTBBNjgwMDA4MjQwM0YzMUVCNURCNEZFNzVDMkY0QUIxNjRFQTJGQUM4Ci06MTBBNjkwMDBGMEM0RUUxQkVFNDVGM0VEQzZGOTc3MUM0MTM1Rjk3MkI3Ci06MTBBNkEwMDBCMjlGOEVERjEwM0M1QThENjAyNUU3MUU5ODg0NzhGRjlDCi06MTBBNkIwMDBCQ0U2ODE3QjRCNjE2QTI3OTU1MEJCMEIzRTM4Qjk0NUEwCi06MTBBNkMwMDBBMjc2OEI3OTlDRDdCOTNFNzkxM0U1RTlFNUQ4MUY2MTZECi06MTBBNkQwMDA3NDNCMDc3QUNCMDZCMENCODE3NTI4NTRDOEI3MTM3QzdFCi06MTBBNkUwMDA3QTNCRDVCM0U5OEI1NjMyMDlFRDg3RTAxNjE3QkMxRkNDCi06MTBBNkYwMDBCN0Y5RDM4REE4OTcwOTA5RDNFRjNGQjJBOTM3NTM3ODlCCi06MTBBNzAwMDAxMzY2RTdGNjc1M0I3NzZFODc3NkFGMjUzMzdDMTBBMjJDCi06MTBBNzEwMDA4RTBFMTZFQkU0ODRENTREQ0IyM0M1Q0YxQjcxRjA3M0ExCi06MTBBNzIwMDBCMTcyNEFBQzMzREUzODAwNzlGQTdENkQ5NUIzNTNCQTE1Ci06MTBBNzMwMDAwMkVEMURGNzFEMDg4RjgxNkE5N0JCMUJENjUzOUIxMDM2Ci06MTBBNzQwMDA1ODgwRUIzQkZBQkFDNUQyRTZBN0RENTI3QjY1MTFGRTE1Ci06MTBBNzUwMDAwNjQzRkJBRkY2N0YxN0VEOTk0NTBCRTU4MDAzQ0E3REY1Ci06MTBBNzYwMDBGODFFQzY1QjUyRTlENEE0MTQ1MDExNkYyQ0ZDMTFFMjAwCi06MTBBNzcwMDBFNzgxQkEwNDlGMEMyNDUxM0JEQkZENDcxOURBRDdDRUExCi06MTBBNzgwMDA0QkYyNkQ4MTcyNTk2RjdFOUIwN0VBRUI2QTI0MzdGNkI0Ci06MTBBNzkwMDBGN0UyQzIyOUFFN0U1ODVGRDIyNkU4MjcwNzNCM0I1RTMwCi06MTBBN0EwMDA1MzM1ODY5MDFGRTJBRkQzMDk5QjMwQzBFMjBEMjJFQUY5Ci06MTBBN0IwMDBEM0I2Q0QwMTc5MzBDMUJCREZFMjA0NTA4RjQ5NEJEQjBBCi06MTBBN0MwMDA2Njg3NzlERUQ1MTZDQzcyQTc0MkJCRkI0RTc0REFBRjMyCi06MTBBN0QwMDAyMjI0MjMyM0QwM0I1QjI1MjRFMUZFNTMzNUY2NTFCMEUwCi06MTBBN0UwMDBDRTQ3Nzk3RkRBMjc5RDgxOTlBMDRGMkQyMUJGMDRGNUFGCi06MTBBN0YwMDA5M0VFQjdDRUI3NUUwOUY4MkYxMEZENjc2REMzRkEyNTRCCi06MTBBODAwMDA3MzU3QUNERDBGRjU3NTY5MTNFNjVCQTFGRkIyMDYzMTM2Ci06MTBBODEwMDA5RjJCRTY1NzU5RTFGRDRDRDFCRUQ0ODFGM0Y1MjQ4OTM1Ci06MTBBODIwMDAzMkNDQjc5QzEwNUI3RTc0RkVENjJDMTgzRjREOTRDQjc3Ci06MTBBODMwMDBFN0NGODE2RkRGQUE2OEE5QjI0MkZGN0JEMjY2NkQyQjlBCi06MTBBODQwMDA3MjEwMzJBREE2QzIxRDgwRjUzQzc1RkY5MkY5NDk0MEU5Ci06MTBBODUwMDAzRkZCMDlEMDI5RDRFRkJCN0ZEOTdDOUNCRjQ3QjZCMDYyCi06MTBBODYwMDBGRUI1N0EzQUJGQjIwNjZEMDJENjRCQTQ2MTVCMERBQzYxCi06MTBBODcwMDA3QkJEQkRGRjA4OTJFQjg2NEQ5QTNEMDM3RTQ5OTIxODQxCi06MTBBODgwMDA5REQ4NkQyRDgxNUM4MEJCRUQ0MDQ1MjQ5NzRFQTc4QkY0Ci06MTBBODkwMDBEMTY3NUVBNDE4RjVEODYwQjkxMENBQzVCQTcyMTYyQjc0Ci06MTBBOEEwMDBFRkRGNDJBRThGMjU2RjVCRDI5OURDREI5RjE4QkI1RTdBCi06MTBBOEIwMDA0QTYzRjIxOEUwNDZGNTQ5Q0EzMTEyRDgxQjQzQUY5Q0VGCi06MTBBOEMwMDA0ODc1RDI3Njg3MTM4OTY2NEY4QkYyREJCNUMwQzNFNTM2Ci06MTBBOEQwMDBDMDk3QzRDRUU2MjlGQTE5NDJENzVDRUUxMEVEREEzNEZGCi06MTBBOEUwMDA5NEE3MEIzOTlEMTZBODEyRjU3NzQ5NEI1Mjc4MkMzQTRDCi06MTBBOEYwMDBEODI0NjI1RDhDMjI0OEI2RDBGOTdBNjVFOUZBNUFFODI0Ci06MTBBOTAwMDAyRjIzOTE4NEY2QzFEMzlCNEU2ODE5QkUwRkVDNzM0NjdBCi06MTBBOTEwMDBGQjdCOTVCMTE2QTkyRTA4RUVDNkZFQUEzM0IzNEJEQTFGCi06MTBBOTIwMDBGREQxN0U2MERFMURGNkM5ODY3OTVCQ0JEM0IwN0U1MTRBCi06MTBBOTMwMDBDOUFENDUzQTc4MTZCMTc1MDAxREQwRUY2MDk4MUZDREFFCi06MTBBOTQwMDAwNkJFRDhERjNCMjExRkVERjdBNzUzOEQ3QzVERDY1QjlDCi06MTBBOTUwMDA2OTIzRjBGRDkyNzQyRTRGN0NFQzdCNkYxNTkzM0YwM0JGCi06MTBBOTYwMDBCNzI2ODU5MTVGODk1RDJEMDlFQUVDQ0VEQzM0MDY4RjMwCi06MTBBOTcwMDBBQUJCMTczRThDRUQ5QTdBNkQyNDAxREE2RERDNTc5MUYzCi06MTBBOTgwMDA0OTg2RDE4QjRENUZDRTIwRTEyOUJBQjIzNUEyQTBEQzM5Ci06MTBBOTkwMDA2OUZBNzIxNjdENUY3NUY3QUIwQUYyMjlGNkUzODM3OURGCi06MTBBOUEwMDA2RDc0MDQzMjU1ODQ1QjdCNkNGQzgzNDM0RUU3RERGNEFECi06MTBBOUIwMDA2NTJBRDFBNkU4REYzMzM4NDVGQkY3RDBGQTBCQUQyQjdCCi06MTBBOUMwMDBEQTlGNENDMkU5QzNGNUE3RDBGQTQxQjg1QjM5REM5NUYwCi06MTBBOUQwMDBEOEYzQUNFNEYwNDI3ODVCNzRGNTc1NDg2RjRFMkFGRDBECi06MTBBOUUwMDA2ODFDQTVFRjFCNDVERDI4RUZBM0UzNkVBMUZERUZCN0MzCi06MTBBOUYwMDAwMjFFRDEwRUVDNERGNEExNUQ1QzY2MDVGOUU5QzFGRUM1Ci06MTBBQTAwMDBEMkRDOUExNEE1MEY0MTE3MDJBRkZCRDM1QTJBRTg3QTc5Ci06MTBBQTEwMDBBRjkxRENERDMxRUNGOEY5ODI3RjE2MzI3QjJDQjMyMTZCCi06MTBBQTIwMDAyNEFGRDJEMUJGRTAwN0U4N0YzRkVGQkZCNDlDRjJDRkE1Ci06MTBBQTMwMDBCRjMyN0UwMEJFNTk4MUZDOEI3NjBCRDJBMTFBMjk1RUYzCi06MTBBQTQwMDBFNDFBM0FGRjY3NDA3NjYwN0JDMDIzODNGRjM1Q0UzMDNGCi06MTBBQTUwMDBDRTQ3QzA2RDI4RkM3MzJGODBDRkQxQjRCRUFDRjc5MDI5Ci06MTBBQTYwMDA4MkY0RDYxNDg3NkYxN0E0MjdEM0VGMzI4RjQ1OTJEMTgzCi06MTBBQTcwMDBBRjdEOEVEQjFERkI3QkE2Mzg2NjIwNUYyQ0I0MTAxNEU3Ci06MTBBQTgwMDA2MUI4NkVCNDU3Q0I2NjBBRjlGREM0MkI5NTIwN0YzM0FECi06MTBBQTkwMDA0NTE5RTVBRDBGRjEzMDI4N0YyMzc2N0JCNEZENTUwRkM2Ci06MTBBQUEwMDAzQzMxQkYwM0U1NzMwMkUwQkY4OERBQTE3NkEyRjMyNzQ5Ci06MTBBQUIwMDAzNkE1MzEzOTU2MUUyMjMxRUQ5NkRBNzQ2NkI3MDg3ODFDCi06MTBBQUMwMDA3RjZGNTMxNUY5MURBQ0VGNTAyQUUzQ0JGMjdFNEQ1QTQwCi06MTBBQUQwMDA1NTE0RTU2QkIzOUM3QTk4RTNGMTQxRkVGQ0M3Q0IyOTkyCi06MTBBQUUwMDBFOTAyNzJBQTk2Q0IyOUY2RkUzMDk4RjlEODJFMjMyM0Q0Ci06MTBBQUYwMDA1MjJDODE0RTVDRkRDQTk0QjFFOENGREM5NjI1RkIzRTFBCi06MTBBQjAwMDAwNkJFNUEyQ0E5QTM5RTgyN0VFQkVDM0UxQTI3MTM3NDM0Ci06MTBBQjEwMDA1MjQ3RUMzRTI3QzIxRDhDQTZGMzEyREEwNzBFNUFDNjI2Ci06MTBBQjIwMDAxRkI0NEIzRUVCOTIxODFEMTI1RjRBNUQ3MTdDMzkyNEI1Ci06MTBBQjMwMDBFNjcxNUI5NjQyQzc1QkJENkQ2QzRBNDgzRjNGQUUyN0VFCi06MTBBQjQwMDBBRTREODgzQzQ1MEE4NkYyQjkyOEMzRkNENzVCNjQ1REVDCi06MTBBQjUwMDBCRDkzRTlCMzNGQjgwMjRGQTc0MUY5Mjg4RjQzODEyMjQzCi06MTBBQjYwMDAwM0E3MkEzQUZFQUZCOTNFMzFEQjRCOEI5MzM5OUZBMDQ2Ci06MTBBQjcwMDA3OTQ5RjlEODQyOUREM0NDQ0U4NDMwNjE5RjY4RThBNzRCCi06MTBBQjgwMDA2NkY2MzAzQUNBNkM4ODU4OUE3NDc0NzAyNDJEOEYzNkUxCi06MTBBQjkwMDA2QTU4MDY5NTYwNzdENUQ4QUIwMjFGRUJFNEQ4Q0IxMjg0Ci06MTBBQkEwMDBBOUE3NzEwNDEyOTk4QTdDRkE1MjFBMzFDQ0EzNDEwRURBCi06MTBBQkIwMDBFNjQ5NjhCNzY2MjZBODI4NjcwMDRGMTQwRTg3MURDNEFCCi06MTBBQkMwMDBFQTgwNzE1RjgyMjdFMkFENUFCRUY1MDU5QjA3RTk0MDM2Ci06MTBBQkQwMDA1MkRCMjlGNDc3NzJGQjk0NDQ1MERGNUMzQjNCODlEQTBCCi06MTBBQkUwMDBBREU0RENFRDYzMzA1RUUxNEQ2Mjc0MEJGREQ4NzkzRjdFCi06MTBBQkYwMDA3NjRBMjc1Q0VFRkQ2NkY0Rjg2RUQ0NEY0MjdFMEEzQzNFCi06MTBBQzAwMDA5MDczMzJFRDRGRDQxRjk2NkFGM0RDNTAzRUVDQkRCQzFFCi06MTBBQzEwMDBBNDVEMzJEQTNGNjgwRjQ1RURBN0RCQjZDREIzQTJCRDI4Ci06MTBBQzIwMDBEMzEzQjEwMDBCQjU2OTFCRTdERjg5NzYzOEQ4NEYwRTE3Ci06MTBBQzMwMDA1OENGNDc2OTRDMEYxRUY2NkI3MjMyRjYzNzE2RDYwMUE1Ci06MTBBQzQwMDBBRjhFMjQ4NjhBNUE5QzUxN0M4MDhEMTM0MkZDNjUyOEU1Ci06MTBBQzUwMDBGMDc0MzJGRUMwNjc1QjNBRTMzMzk3ODczRDk3RjE2NzQ0Ci06MTBBQzYwMDA0NjMyNkI2RkE2Qjc5Qjc4N0QwMDc5MEY5RURCMkI5OEUxCi06MTBBQzcwMDA5QzMwQjdGQjZGQ0VCRkVCRUQ1QTRENDZCRURFQkUwQTMxCi06MTBBQzgwMDAxMkE0NDMyQjYxNzZENjVGMzlERTQwOUY1MTc4NTVEREEzCi06MTBBQzkwMDBERDkwODI3QUYzRjNERTI1MjlBNDI4MkE0NzZERjYzNzYyCi06MTBBQ0EwMDA0NjdGMEM3MjI0NDIxNkZGMzNGMkFCRjI5NjRDRDA1RTE0Ci06MTBBQ0IwMDBCRUNCMDY3NDAwRUQ5NEQ0OTAzQjBEOUVFOTQ5QjFGREU2Ci06MTBBQ0MwMDBFNjMxN0M5REU5RTg1NzQzQkI3QkI5REY2M0ZCNzIyMjI5Ci06MTBBQ0QwMDBGNUI3MzNCODdEOTY5QzU1NDdFNTNBQzJEMjA3NzA0RTFBCi06MTBBQ0UwMDAyMTAzOUE1Qjg3Qzc5NDcyOEJDMTdGQjA3RDM5ODk3RUJGCi06MTBBQ0YwMDA3RkYxRjY0MzQ5MUNGQkExRDQ2MDNGODg3MUNENzZDNDM3Ci06MTBBRDAwMDA3QkFENTk3NEZFRTJGQjE1NTk2RjU2MTM1REZCOTVBNDlDCi06MTBBRDEwMDBGRjJFRUM2RkU1QzY1QzQzQkMyODlFRkQzMTlEQzMwNzRBCi06MTBBRDIwMDBFRDA1MkRFNkJDMTRDM0ZCRjdDMDVGRDRGNEUzOUY2MEQwCi06MTBBRDMwMDBFMzQ3Qzc0RDAyODY4QjhFRkJEN0I0QzA4Qzc0MUEwRkM1Ci06MTBBRDQwMDA5QUU5M0UzRTExMUU2MEMzOUY5N0E5REU2MUZBMUE5RUUyCi06MTBBRDUwMDAzQjlENTQyRkQ1QTBEQzE2N0UxMkYyQkYzQjA1RjlCQkZDCi06MTBBRDYwMDBBMjJBRERBQkQzOTNGQzNCQjMzQzNBQzhFMzFBMDdCOTQ0Ci06MTBBRDcwMDBCRTQ5MzkyNkVDQzY0NDlGMjQ0NUY1Q0U1MEJEQzVFREVECi06MTBBRDgwMDA2MjkzN0NCQzkwOUQwRDc0QUJFOUVEODAyMUZDOTJGRTNBCi06MTBBRDkwMDA1NUVEQ0I4MjM4RjQzMUVFMUY2MjVGOTZDRDBDQzlDNUZDCi06MTBBREEwMDAyODNGNkIyNDMyMTYxRUQzRTYxOEY1RkRCN0QzOUQ3NEU5Ci06MTBBREIwMDA1RERGMDY4NkQzRkIyRDhCMUE4Q0VENUFEMzk5QkZEMjVCCi06MTBBREMwMDA4QUVEQkMxNzg2QTc1RTFGNDkzMkNBM0RENjVGMzNDQURCCi06MTBBREQwMDAxQkMwQjNGRkQ0RUI4QTBGRTRGMEYzREMxRURBRTUwOTA1Ci06MTBBREUwMDA2QzQ1QkFFODQ4NEM5RTg0N0FBMjIzNzE3NDE4RTMxMjI5Ci06MTBBREYwMDAzQkZGQkJBQTcwMjdGQUU5QUZEOUQ0NkVFQ0Y2MDBGMzlCCi06MTBBRTAwMDBGMzJCOTY2RjZDQjdDMjdCNUI4RkU0NEUyMEQxNzkzQUZGCi06MTBBRTEwMDAzNzQ5ODEzNTQwNEFGNzczN0MzNTc5RDg3QTlBM0MxMUE1Ci06MTBBRTIwMDA2NTBDOEM5RkQzQzRFNjkxRDdGMzgyNjRENUM5QkJCQ0IzCi06MTBBRTMwMDA0NkQ2RUVCMTc0OUI0MUZGODQ3OUY5RjE3NDExRUYwOEE1Ci06MTBBRTQwMDBCNzU1OTc2MkZCODAxNUY3NDE3MjdBMjQxQTFGQ0U2OUI1Ci06MTBBRTUwMDAwMTQwMDAzREU0QThBQzdGQTcxQTk2NkUyODhBQUVCN0UxCi06MTBBRTYwMDBEMzUyNUI4NDdBQTIzMzIzNDk0NTNENzFDQTEzN0ExMkM3Ci06MTBBRTcwMDBGOUE4QTkyRjEyNDE3MDRERUJFQkI1QTJCRDY3RjUwNkZECi06MTBBRTgwMDA3RTgwNzAxMEVCRjRDOUVFMUM5NEIzNDk3RDZDN0U1RDNFCi06MTBBRTkwMDAyNkJBMjdFNEJCM0MzRURCQ0RFNEFGNEM1RTI2ODgxN0U4Ci06MTBBRUEwMDA5NDIxMzA1RUM2OTY0MkFBQTc0NEZCOEMzNEFFMzczMjVBCi06MTBBRUIwMDA0OEU4Njk2QTY3OTE0RTQyRjE0NkU4M0EzMkI2OENBMzk3Ci06MTBBRUMwMDBGNkJFQzA2QkQ0QUUxQTNGMTlFREFBODIxRDExRUI2QTEzCi06MTBBRUQwMDBCNDVCMUY4QjFEQUYzRkNDRTUwRkFDMjM0MkU1QzQ4MUIzCi06MTBBRUUwMDA5MUM1NjU0NDNCNUIxQ0JGNUFEMDdENTI0RDZDN0IxNUIwCi06MTBBRUYwMDAzNDAxQURBRjU4RUVCOTBFRDdEREQ0QTE5MDA0MjkwQUM0Ci06MTBBRjAwMDA3RkFCMzdGODA2Q0UyN0E3NjdBNzg0QjAzMUQzNTk0NzYwCi06MTBBRjEwMDBEQTBGQTU1QzU4RTdFRDM3MTNCNzRDRTJDRkJCNjk5MzY2Ci06MTBBRjIwMDAxQzU4QTNFN0U3MEU4NUUyNjVBNzYyRENERjEzN0VDNjQ3Ci06MTBBRjMwMDA2OUFFOEZDQUJEQzFERkUxRjhDRDA3RUU1MzEwQ0YzNzQwCi06MTBBRjQwMDBFRkZFNTAxOTZFNUY2N0E0NzA5MzFBOTlGRkQyNTQ2Rjg5Ci06MTBBRjUwMDAwRkUzN0EyQjk2NUIyOTFFRDc3NTI4NjE5NDRGNEQ3QkEyCi06MTBBRjYwMDBGNzQ1MkM2ODY3NkYyNjJBRjI3RjUzQ0ZCRTIzMzkwMDNFCi06MTBBRjcwMDA5RkRDQTZDMDU0RDlBN0YzOUY5QkMyMTJDRTI3MDM4ODlCCi06MTBBRjgwMDBCMUI3ODhDQTREMDVGNUI2OTlCRUQxNEU0NjdCRTU4ODY2Ci06MTBBRjkwMDA4M0YxRkZFOTBBQTc4NkYxQjREM0I2NTAxM0I2M0I5REZGCi06MTBBRkEwMDA5REE0NkFGRTI4REM1RkRBMzdFRjY1MDk1OERDRjU3NDhBCi06MTBBRkIwMDA0MjA0OUY5RDk2RUUyQzNCQjRFQjlDQTBBODQ4NEY1NkI0Ci06MTBBRkMwMDA2RkM4RUU4MTc1QTQ1OTgzRkJGMUZCNTQ4RjRCNkQ4M0UxCi06MTBBRkQwMDA2RjdEMDk2NDMyRDVENzIzODRDMzM0MTM1RDRDREJDQzM5Ci06MTBBRkUwMDBGODY1QkEyNzU5RDg4MTkzNTEyRUU1N0I1Q0MyOEVBMkIxCi06MTBBRkYwMDBGMkVBODg4REFEQTM4M0IwRjlCNkE1MDczMjNENDhCNzE0Ci06MTBCMDAwMDBFRTM0M0E2RTRFNTM0NDQyM0ZDMDNDNkU5NEFFMDJBM0JGCi06MTBCMDEwMDAzQ0RFOEI5OTY3OEY4MjcyN0UxRDk3MzcxNUNCNzc0QkZECi06MTBCMDIwMDBCRkQzRDE0MTkxODdFRENGRTZFQ0REMjlBMTdGMDhGNUIzCi06MTBCMDMwMDA2REQ1MUVEQTlFMjRBMEJDRDlDQkZDRTI3NTUwQkY1NjVDCi06MTBCMDQwMDAyNzVGQzQzQTYyQzg5OTI5MzgzRjY3NUZFRjhCNENDRUJGCi06MTBCMDUwMDA0NDI4RkQ4OUY5OUFGMTM5REJDM0VDQkJCOTYwMjZEMEVECi06MTBCMDYwMDBGNzhBNTZFODgzRkU4RUU0MjdEMkZFMDRERjlCRjk3NDRDCi06MTBCMDcwMDBCNjg3RDE3OTRFRkQ2RUM5NTI0NEUzODJENDlFMTRGMzUzCi06MTBCMDgwMDAxM0VENzY3OTJBQUIzQzE0MEVCRDE0MEVFQkVCQUQyQzEwCi06MTBCMDkwMDBERUMwRTc1M0FEMDRDN0EwNUY1NkVCNjFGQjVEODc5NjRBCi06MTBCMEEwMDBCREFGRjQ0M0Y5QzE5RjFEQTVGNEI4QkU0QjBBNTA3RjU0Ci06MTBCMEIwMDBBMUVCQThCMjA0RTM3NkRBRkY5MTMxNEVCQjgwOTkyODY4Ci06MTBCMEMwMDBFNEExOUYxRUE1N0E2NUMxN0UxNjhGNUZCRjdGOUZGNUE1Ci06MTBCMEQwMDAwNjY3OTQ0RUZEQTcwRUFENDQzQTVCREY5MzQwMUMxMjA5Ci06MTBCMEUwMDBFMjhGQURENzRDQTcyMDY3MjhERDEzNERBMUZCNUMyMDc0Ci06MTBCMEYwMDAyNzM1MkE1NzQ5Qzg4RjdFOEE5MEMzNkRFOTdDNUZDRTc5Ci06MTBCMTAwMDBDOURFQUZFMUYzMTZGRDQ2RTVBNzgzRDJCQkZGRDRFNDY5Ci06MTBCMTEwMDA0Mzc2ODBFNzdBNTU1MkMxNzQwMjNCREM0N0RCNDNGRjNDCi06MTBCMTIwMDAxMTJBODc4MTQ0RDE1RjEzRkQ5QkUxRDdFNTYxN0EyRDE4Ci06MTBCMTMwMDAwNjlFNUIzQzMxRjQ4OUQwQjNGRUM3MkIwOTNFMDVGRTY5Ci06MTBCMTQwMDBBQzFDRUU4M0ZBRERBM0QwN0U1QjNENTYzQTlGOEUwQTlGCi06MTBCMTUwMDAxNkQ3RUVCMDMxM0REMkQxNjYwRjIzNUZCRjk0M0FGN0Q4Ci06MTBCMTYwMDA2NTA5RTRBNTJCNEQ4OUUwRjNCMDY1NzUxM0Q2MUZDRUI0Ci06MTBCMTcwMDA2MUYzRThCNDZDMjk2QzYxN0E0Q0YzNTBGQzI1MTMyNjFBCi06MTBCMTgwMDA5Rjk4M0M3QUYwMjc0QzlFMzQ2OTRFRUEzRjM2ODVFQTE4Ci06MTBCMTkwMDBENkQwN0QwOThGNDNDNTdEMDkxMjdBNTE1OUUyOEFEMkYyCi06MTBCMUEwMDA4MzE5QkZCRUE3NUY1MDdDNTBCRkEwODdGMTQxMTQ2RUNBCi06MTBCMUIwMDA0QzVGMDlCQTA1Mzk0N0YxREUyNkUyODg4MDM3ODQyQkQ3Ci06MTBCMUMwMDBGOEY1NkQxODdGMTA3RTdENzI0MzUwNzNGOTg2RjI2QjJGCi06MTBCMUQwMDAzQUY3RUJBNzcyQkZERTU2NkVGRjlCRkFGNUVCMzZGRDMyCi06MTBCMUUwMDAwN0Y1ODM2RUM5N0E4NTNFMDVCRjgwRkY2OEUwQUJBNzhGCi06MTBCMUYwMDBCODlGNzYzRjdGRUVFN0ZDQjlBRUI0ODdGMkMzQkE4RjUzCi06MTBCMjAwMDA1QjI4MUYzOTZCOTgzQzcxRjYxOUU1MjAyMUY3RjBGNUEyCi06MTBCMjEwMDBFRjYwRjQ5OEQ0MzMxN0Y3MjVBQUZGNEQ3MkI3OTNGODZGCi06MTBCMjIwMDBGM0JFNDk2QUY5NEZDQzkzMjFGQjc4RkVDNjM5QjBGMkUwCi06MTBCMjMwMDBDQjAwQUUwRTBFMDNERUVFMDhFN0ZCRDM3QjAwMTFDODk5Ci06MTBCMjQwMDA5N0Q2MTY2NTM4N0JGODQyRkQ5MkM4OUIxMkUyN0IxREFCCi06MTBCMjUwMDA4N0Y1RTlCRDU1NTdGRTFFRTM4QzdCNTI2ODNFQ0IyNzMwCi06MTBCMjYwMDA3QjE3RkZBRkRGQzNGN0E3NzdDRjU2NTE0RjdCREE4MzRBCi06MTBCMjcwMDA5NDdFMDZCQzBFMTVFM0E3MjAzRTZCMjRBMDg3QjY5RUU1Ci06MTBCMjgwMDA1RjI1Q0ZDMEZEQjIxRjVEMzExOUU1RTY3QjdDOUVBNzJGCi06MTBCMjkwMDA3RTIyNkY0MkY4NkNGOUMxOEY2NzYxRkRCQUIwOTQ4RTVGCi06MTBCMkEwMDBGNkUzRTkzREZGRjY1N0Q0OEI4REJCMzdEMEJDQjRGNjNGCi06MTBCMkIwMDAxRkZEOTJEQUU1OTZGMDRFRjY3RTRGMEFCNTMzNEZFRTVCCi06MTBCMkMwMDBCQTZGMTZDMkJEQkRBNzlERDY5RkRBQjU5Mzk2MEZGRDg2Ci06MTBCMkQwMDBFMEM3QkZGODBCREExREMxNjQxNURCOURGQUM5N0RERjNECi06MTBCMkUwMDBGOTBCRDI3OTVEQjI4QUVCNjgwQTU5RDk3RUFFQTA2RkFDCi06MTBCMkYwMDBCM0RDREFGNzAyRTU1MzQxMkYwQjUwRUYyMjlDRUE5OUI5Ci06MTBCMzAwMDBGQzExRjRGQzExREY2RjVBQ0RGN0IxM0VEQUVFNkE4QzE2Ci06MTBCMzEwMDAxNTY3OTRCQzZDQkQxODhCQTE3MkFDNUVBMjcxQjY0RTYxCi06MTBCMzIwMDBBMDFBOEM3Nzc0MjY5MjcyN0MyNjE1NDU5NDVDMTg2NzU3Ci06MTBCMzMwMDA1OUMzQkU1OUQ0RUVEMTNFQkMxMURCMkYzRUUwMjBEQjE5Ci06MTBCMzQwMDA2OTVDMEU4M0JBRDE3REIwNjIxMDgzQzdDMTZGODZERTlGCi06MTBCMzUwMDA3NzlGMDdCQTdEMUJFNDAzRDUzQjI2N0Y2MDcxRTcyQkZGCi06MTBCMzYwMDA3RjQ2Mzk1QTY3RUY3RjAxNDVBMTc4REZDOUUzMzdEMEJGCi06MTBCMzcwMDA5RUVBOURCMjhEQjFFM0E0MEVBRjkzRUI2REE2Mzc3MzM5Ci06MTBCMzgwMDBGNkQ3RTZGOUE4OUM0ODUwQzdFQUVDRDM1MUM3NUFCNjlECi06MTBCMzkwMDA2MzdBNTI0RTYzRUY1QzVDQzdENTg1QUJBNjUwQkFDMEVBCi06MTBCM0EwMDBGODFGRUExRkNENDlGQjVGOEZGMTRCRTBCRjFDMkY5M0M1Ci06MTBCM0IwMDA5RjE5NkVFMjk5MEVFMzU3NUI4OUM3ODk0RjQyREVCNDRECi06MTBCM0MwMDA1MTM5RjIwNEVEMTdFQzBGNkE1N0Y5N0VCOUVDMDlCNDY0Ci06MTBCM0QwMDA0NzFFQjI4NUIyQTc2MjNGOUQ1QzZGRUQ2NkYzODZFRkI0Ci06MTBCM0UwMDBEREI4OEYwQUZEQjlBNzRGQTZGREY0REFEMkU4RjcxQTQ3Ci06MTBCM0YwMDBGQjdFREVFRTM2MjkzQTVGQTBENEQxQThCN0IwQkY1MkFCCi06MTBCNDAwMDAyN0VBMTlBRDlFRTJDN0E3RDA3NTlEQzIyNkQ5NzRERDgzCi06MTBCNDEwMDA5MzU2MTQ0N0Y5RDcxQ0Y3NDE3OTg2RkJDM0U1REU4QUJBCi06MTBCNDIwMDAyOTVFNkZGNDI5RTI0MTY2NzhERTg5RjVEMENGMzNERUZDCi06MTBCNDMwMDAwMDdEOTIzRDQ2N0YzQjlFQkQ3MjY4RDkxOUE2N0Y5RkQ1Ci06MTBCNDQwMDBGRjkwQ0E5QjY2QTQ2MzFDM0ZGNEIxNDFGRkRFMjBFODc1Ci06MTBCNDUwMDBGOEQ5MEYyOTFEREY3MDgwRTlERkU2MDMyNTBBRDJFRDU4Ci06MTBCNDYwMDAyN0FEMDFGMjNCMzA0MDlCMkI4MTZFODE3RTFGOTJGQTBCCi06MTBCNDcwMDA2RkE0RjkyRUNGM0FEQzE4RDczQkMzRjVDREJBMUQxRjA4Ci06MTBCNDgwMDAxRTk3MDExRUY5MDdCMkE5OUY3RkU2NTk0NzNERjY3MzQzCi06MTBCNDkwMDBEODYyQTFGMDNDREMzRDcxNjdCQkE0OUYyN0YzMEJDMEQxCi06MTBCNEEwMDAwRUE2QTREQTBDNzYyQUIzODNEN0RDODc3RURBRkE0NkI2Ci06MTBCNEIwMDBBMjIyRkYzNzlCRThBN0Y5QzA1MTRBMkZDMjBFRjYzRkUwCi06MTBCNEMwMDBCRTY4MERCMzNGMURBQTAzRkRCODM5Q0MxRTI1NjA4RkExCi06MTBCNEQwMDA2MkZCRDQzOUUxMzY4NUQyNTc0OTE5RDJEN0ExNjVCRjZECi06MTBCNEUwMDBEODhBN0FCQzc5MEU3MTYzRkYwRjhEMEEzQzlCNEJEN0NCCi06MTBCNEYwMDAyMzExQ0M3Mzc5QzhENjU1Njk4NUVGMUZBQUY2QjkwMTE3Ci06MTBCNTAwMDA5MjAwQjdEREQ0RUUyNTg1MEFENzczNkJBOEJEREM5QzBECi06MTBCNTEwMDBGNTREOTVGMjk5NTkxRTNDREI0NkVEQUU2NjVGMjI5REQ2Ci06MTBCNTIwMDBDRjgyMDNEMjZEQ0MxRTcxMTIzNjdGODlEMkU3ODJGMEIyCi06MTBCNTMwMDA4QzMwQzZDRkZFQzhFMTI3RTA3OEM2RDZCQjEyRTE3MUQ5Ci06MTBCNTQwMDBFNkE3NDA4ODUwQkY2MDBFQTNEN0Q0MzkzRDU0OEVCQ0M3Ci06MTBCNTUwMDBGNEVDM0NBQUM3MDU1REJBOUU0OUEwRkEzQ0NERUE5NjM4Ci06MTBCNTYwMDA1NEFBRDcxNjI3RThGMURBNjU2MzdBMjk5NUVCOTk4MjEwCi06MTBCNTcwMDAxRDBDQkY2RDVFQTY5N0RBQkMxNkZFNTQ4Q0YxMTdCNzkyCi06MTBCNTgwMDAzNjA5RjVFRTFGMzlGRUE5MTg0MUY5Q0VFNUM5RkEzNTlECi06MTBCNTkwMDAxMUNBNEY0RDdCNTk3RjlFODQ0MEM5RUQzQUZBRjU1NDRDCi06MTBCNUEwMDAzMUJEMjhGNjAzNzA3RkEwMzY4NkJDNzg5MkNGQzNGRkVBCi06MTBCNUIwMDBGOEVBRkJEMDVFQkUxQUYwOEUyQTI1QTc5MENCNTFBMEU4Ci06MTBCNUMwMDAwQjg0NUI0RTYzOTBEMkMxRDU5RTlCNTRDQzRGRjVBNkE1Ci06MTBCNUQwMDAxM0VBMkYwRUI0MjkyNDU2RENFNzg3N0M1RERFRjQ2MDg1Ci06MTBCNUUwMDAyOUM2QTFCRDk5MkU2QUU3NzhFNTBBOEIwM0JGMkI5MTg2Ci06MTBCNUYwMDBENDZFMUZEREY3QTQ3NkRFODAzNzVCRUQzNkYwN0JCMENFCi06MTBCNjAwMDBENDAyRUQ0RTY0QjgxODlFQzNCRkIxMkUyQTQ2M0VGNDU0Ci06MTBCNjEwMDAwOTdGREQ2MEY3MERGNUJCOTlEREI4QjA0QjlCODQ3RUVCCi06MTBCNjIwMDA4OEQ4RDcxMDcwMDhCNzI1RDZFQkU1NjcwRjk3NkZFMTdDCi06MTBCNjMwMDBGMTJDOUUwQUY2QkQ5M0M2QjVERDMwMEVGQUY3REQzMzY4Ci06MTBCNjQwMDA3NjMxRkZCRTlEQjZGQjlFOTdEOTQ3RDVCMDNFQjREQkExCi06MTBCNjUwMDBCQzA1QzE4RDRDOUZCQUQ0NThGMDI4RTc3QUU1RDBCMjJBCi06MTBCNjYwMDA5NTI1RTg1NzM2RDczOTU1RTRCNzA3OUY5NzU2NTM3QTRCCi06MTBCNjcwMDBDNjYwMjFGQUREQTEzNTE0MEYwNEYwODBGQzQwNDJDQ0Y1Ci06MTBCNjgwMDAyRjZENkUwOTg2NjNEMzdCMkRFNUJGNjZFNDNGODlEMkJCCi06MTBCNjkwMDAzQjhEQzMwM0JEODcxOUJEMzNGRDI3RkM3Rjk0OEZGQTEzCi06MTBCNkEwMDBCQzQzMjEwNzg0N0M2OTU2RkFDNzIxMUQwQjdFNjg5RTI2Ci06MTBCNkIwMDBENTNGMEVFMTM2NTI3OTcyQzYwNkZDOEZGQzAzNzA0MDBFCi06MTBCNkMwMDBGRTExRkNFMjdBOEVGMUM5RjYzNjVGMDVENjZGQUYyNjIxCi06MTBCNkQwMDBFRTc2OUQzRTMyRkI0QjM4NEZGNDNCODU1QzNGRTUwOUVGCi06MTBCNkUwMDA3RThDRjJCN0Q5MTJEOThBRjkxNTQyMEUzNzNGQjc2RDYxCi06MTBCNkYwMDA1Q0FDRkMzNzIxODdFRDU2MjZERkVDRTFBNDcwQkI4RUY1Ci06MTBCNzAwMDBCRTcwQ0ZDRjM1OTkzRTY5M0U0RkQyQTZEOEYxOTEyRjZBCi06MTBCNzEwMDBCQzRFMUVDNzFGNTlCRTQ0MDZFQTcyOTQzN0RENDkzNDM5Ci06MTBCNzIwMDBBRjVEQzQ4QkNDRkQ5RUU0RjQyNkYwMjJGQzE2REM3N0UyCi06MTBCNzMwMDBDMEY2RTkxOThDNUU5NDBDQzY5Rjc5MTkyMjNFMUIzNjFGCi06MTBCNzQwMDBGODNEM0U0QkU4NDNDQzMzOEFBN0JGQzQ3NzdGQUJGOEM0Ci06MTBCNzUwMDA5NTE4NDdFODUxMzNGRUM1QkUwOUFFQTdCNjI4N0VCQjkzCi06MTBCNzYwMDBBRTE3OTg3QzMyRDNFMzE4MkUzNzNFQzRCNUMyRkY3RkE0Ci06MTBCNzcwMDBFN0ZCNUM0M0YxQ0JGQTIxQTFGMTg2QkNCODRFQ0JCRTBFCi06MTBCNzgwMDBDNjU4NzFCMDE3NUE3OUJFRDQ2M0UzNDc5NDc3RjdFRjgwCi06MTBCNzkwMDBCQ0ZEQkQzQzJGOENBQzE5NkZDOEIzNzJBQUJFMzY4Q0YxCi06MTBCN0EwMDBBMzVFNzFEMDU3MjJEMzcxNTkxQ0NCMzU4QjdDOEE3QTFBCi06MTBCN0IwMDAzOEI5QkNBQjEwQ0Y0RDc4ODNDNkZEOTJDQ0ZBNDRDM0U4Ci06MTBCN0MwMDA3RTQ0NzYyOENENTBDRTZEQ0MzMUI0MUZENTkyNkZBODczCi06MTBCN0QwMDBCRjZDRDMwNDQzQkQ1RjlCNkMyODE3NzQ0RTM3QjQxRkY2Ci06MTBCN0UwMDBEQjU1NjkyODVGRkVDOEQ1ODZGNkUzQzM4QjBDRTVFRDEzCi06MTBCN0YwMDA2RDNERjU4ODk3ODk3QkFFMzM3Qzc3ODVCNURGNTIwMjQ2Ci06MTBCODAwMDBFRjhCN0I1NjFCRjNDNzRDRjBBQ0ZDQUIxQzkzMEU2RjVECi06MTBCODEwMDBDQUYwNTM3QzVENzFDMDA4OEY5NDcyMjMzQzMwNUQwRTdBCi06MTBCODIwMDBFMTlDNDI3ODdGODk3RjU2ODdDQjZGNEQyMUQ2M0ZGNUNCCi06MTBCODMwMDA4QkVGRkQ0M0U5ODFEOEREQTVGQUJDODQyOEZEODQwRDlBCi06MTBCODQwMDA3OThCOTU1NkQ5MzQwRkVEMkJEMTVGQkM3OThBRkRCNjMzCi06MTBCODUwMDBCOEVCODgwM0I3RUQ4MzdDQ0ZFMDYyRTNDQjRBOTk1NTIwCi06MTBCODYwMDAzRjJDNUM2QzE3ODIwQkU5NTc0NzAyMTdGMzdFREY2MEIxCi06MTBCODcwMDBEQ0Q5RDRERjk2QTQ2NjlBMjdGQzI2MTY3NEY2NzE3RjZECi06MTBCODgwMDBBQkYxM0NDQzUyMkQ4NUU5QTFFMEUyMEJEOEQxMkMwRUQ2Ci06MTBCODkwMDAxQzRBNjBGQjk1RTZGQTU3Qjg1Q0ZDMDNDMDg0Q0U2NzhGCi06MTBCOEEwMDA4NDdDRkQzRUM3NDMxRkNGOUYxRkMyRDc5QjNFM0Q5QzVDCi06MTBCOEIwMDA4OUYyQkI4NjUwQkZEOURERDJGNjI5RUFBREVCQUQxMUQ2Ci06MTBCOEMwMDA1MjAyRjM3RTkwQUZFNzIxMkUxNzFFNjk3NUQzN0UxRUJDCi06MTBCOEQwMDBFNUZCOTE4RkI1RkFFOEZCQzc1QjBCRTkzM0RDQUFEMjM1Ci06MTBCOEUwMDBGN0REQURFNUY0QjkxQkVDMzk3QzNFRDk1QTQzOUY3QkJCCi06MTBCOEYwMDA1QTgzQjRERDBGNUJFQkU5NzM2RjZCODhDRDZCMDhCRUM5Ci06MTBCOTAwMDA0ODE5QjU3MzgyRTkzMUUzQTVBQjM0Nzk0NDc4MjI3MkUyCi06MTBCOTEwMDA1RTRDN0QxOUI3MUZCOTYxRDhGQ0YyNEQ3REQyOEY1RkE3Ci06MTBCOTIwMDBENEYxQ0RCQjE5MkUwRkREREY5QzQ2QTZFMUZFRTY4NUU2Ci06MTBCOTMwMDBCRUZGQTI5NUZDRjhDNUIxMjNFNzIzNDE0RkU0NUNGQUIyCi06MTBCOTQwMDBCODYwOENGODUxODhFNzU1M0U5OTExRkFBRUU2OEMwRjM1Ci06MTBCOTUwMDBBRjI4OURDNTg2NTM5REZENEMwRTNBRUI5M0QwNjZEMDIzCi06MTBCOTYwMDA3RDJGQ0U5Rjg4NzI1RDI4MjVBNkRERTBDRDY0RjQ1OTM5Ci06MTBCOTcwMDA5RkMwRjZFMzk3OUJGOEZCNUJCQ0ZFNUI5OTRDREZCRDc5Ci06MTBCOTgwMDAxQjQ3Q0UzODMzMkRDMjlGQjdEMUZEQzEyMTdDNzdFRjQ1Ci06MTBCOTkwMDA1NUIxRTBCQjM1RDM2N0UwNjNGM0I5MTU3MzNGRUZEQTE4Ci06MTBCOUEwMDBCQTQ2QTkzMUY4RUM0MkZEODhGNTk5QkY1QjlBQzlFNDIzCi06MTBCOUIwMDBENkM2NENDMkU0RTRGRjY3RkNGOUVFNUExN0Y1MUYxMDM3Ci06MTBCOUMwMDA2RTVFRERGQURGNUQ5QjU0MUYyQjJFRjM5RDRDMUJGMzQ3Ci06MTBCOUQwMDBCNzAzQTBCM0QzQThBOUFGMjk2ODJCMTYxMjFGREJGN0IyCi06MTBCOUUwMDAxREUzQzZGODkwQzgwQjg4NEZBRjU2MUE0N0EyMzA5NDkzCi06MTBCOUYwMDA4N0MyMTVGMEUxNTMwQUEwN0ZFQkUwMzgxMTJCOEVBMzJDCi06MTBCQTAwMDA1QUEyRkEwRDczNkQ4OEVFRkM4NzNDOTQxRUUwN0I0REM0Ci06MTBCQTEwMDBBMTc5M0RGRDM5MzhCRjhCQTUyNzIyM0YzNjc2Qjg3RDA5Ci06MTBCQTIwMDBCQTIxREY1RkE0OUNCOTMxRjNFRjJCNjcwNDlGOTM3M0I2Ci06MTBCQTMwMDAwRjhDOERBNTI3RUI1MUNFNEMwNzUxOTNGOTI4OTMzM0VBCi06MTBCQTQwMDAxN0U4Rjc2MkUxNTcyRkY3RDNGREVCMTFDM0VGODA2N0RCCi06MTBCQTUwMDA0NDcxQTkyRjFDQzk5M0QwQjhEQTY0NjdDRjNCMTM5MzA0Ci06MTBCQTYwMDBCQkYxRjk4NTYzNzQ5ODI0MTNGMjAwQ0UxM0RBNjk5NTVCCi06MTBCQTcwMDA4NDlEREY3QTVGRjg0RDJERDNFOEZFNEE3NkYwNUYzMjgxCi06MTBCQTgwMDBBMTdFQjVDMkZDQzUzMzE5ODE4NzMyNjE1RDg5N0M1RkI3Ci06MTBCQTkwMDAzODkxRUYwQjJCOTlDQTU2MkM5MzQwMjE1REQ3MjQ3MDE3Ci06MTBCQUEwMDA5NzMxNkVCMUQ1RTIxQjhERUJGQTU4NTJDN0EzREZFMjk2Ci06MTBCQUIwMDBCNjg0NTU3QzI2OTM0ODMxQ0JDRjBCODdEMDVGNEI5RjA0Ci06MTBCQUMwMDA5OEU4NDM3RjM3NzExQzIxQkQzNDNFQUUzQTMwOEVBNkQ0Ci06MTBCQUQwMDAyNEY1QkYzRTA2RkREQkU3QUQzNDVFMzQwOUYzNTFBMTJBCi06MTBCQUUwMDAzQ0U5N0JCOTYxOERDRTMzNDhFNTQ1M0E4N0UzNzZCNENFCi06MTBCQUYwMDBDQkUxRkJFRjRCQTFBNzcwREUyN0RENzZDRDAyRjM3QTE5Ci06MTBCQjAwMDBBMDczOEEyMzBEREU0N0Y2Qzg5QTkyODJGOTMxQTdFRjE3Ci06MTBCQjEwMDA1RjAwRUJCREEyNTdBNjcxRTcyQkM4OTQ1N0M2QTA5QzQ3Ci06MTBCQjIwMDBFOUI1RDFGRERGNzU1NkIyMDNGOTI4MUU3QzNGRjk1NjAxCi06MTBCQjMwMDBFQzNDMzA5MjI1MTlGMkJCQ0NGNTFGNzAzREYwNDk5Q0NFCi06MTBCQjQwMDA3Q0UzREY3MDM5MkFGMjY3NkMyMjdGQzYxQjE4MzY3RkQwCi06MTBCQjUwMDBDNjY2Q0E5RkIxNTk4MzA0Rjc4NTZEODNGOTMzMEQ4NDk2Ci06MTBCQjYwMDBFNkNGNDAzRkZBRkM5OTRGMkE2M0NGRTMxRDNFMEZEQjNGCi06MTBCQjcwMDA5NzQ5NzFGQTREQTZFRjNGQzkxRjdFOURCNjJGMUQ4NkNFCi06MTBCQjgwMDA3Q0VDRThGNzRFRkEzRTVFRkVDRTAwMUZGRjkzMzhGOURDCi06MTBCQjkwMDA0QkE3MDdGQkNGMjY1QUJBRkUzQjQ2Q0ZEMTcxRjI2OEJFCi06MTBCQkEwMDBCRENEOTQwNzE0QUQ2N0Y5M0YxREE5OEM0RTVFQzg3MkQ4Ci06MTBCQkIwMDA3QjU2NDFEN0FCNDgzRjNEQ0Y3OUJERDM2M0MzNzg1MjY1Ci06MTBCQkMwMDA5MEE4RkJFOEY5MUVBQjZEQTA1RkYwNjEzRUI2QjM3RUI2Ci06MTBCQkQwMDA4NDc2QjcwNTI0MkZEQURERDc2RkIyN0RENEFGOTM1QkJGCi06MTBCQkUwMDBCNTAxNjM5OTYwN0I5RDFDNUU4ODMxNkNFNEE3MDk4NTczCi06MTBCQkYwMDAzNEZGRUYzM0UyNEI3MTBGMjM0NzFCRUM3MkQwQUE1QjhCCi06MTBCQzAwMDA0NzVGMUMzQkEyMzQ4QkMxQTcyRjNCMzZGQzQ2NjU1OUNFCi06MTBCQzEwMDAwQzc5Q0I0M0JGNEZFNkU3M0VEODM5QjREQkREQzNDQjZECi06MTBCQzIwMDA0Rjg0NkYyODVEREZCRjE5MEYxRTVBN0YyMTM4N0JEQkUxCi06MTBCQzMwMDAxOTdGMEY1NDQ4MkNDRkZGNkYwRUVGNTQ5RUVGQzZDRUU2Ci06MTBCQzQwMDAwRkQ4NENGOUVBMEJCM0NERjM2NkY5RUFGN0E3MDZDQkE4Ci06MTBCQzUwMDBCMkQwMkVCM0ZBQzZFOUNGMEJFQ0I3MDY5MjI2QzNCMzI3Ci06MTBCQzYwMDA4RkNCMUQzMzVDMzY2NzMxN0JDRkJDRUVGRDNDRUYzRUE2Ci06MTBCQzcwMDA1MTI2MkRGQjc0RjAzN0FGQjc4NUUzNTFCNEVGQjBCMTY3Ci06MTBCQzgwMDBGRDJDMTQ3Qzc2OTA3QjJCMDg5M0IzQ0JCMkYyRjkzOTYwCi06MTBCQzkwMDA5NzU0MkJFMkFCODE3NTQxNTZCODhGRDBGRDI1MDFFNzUzCi06MTBCQ0EwMDAyMUYwRTM3MDM3QzMzMTQ4N0MyQjMxQkZGQjQyRjA1QzlECi06MTBCQ0IwMDA3NTM0NTE0MUI5QkZEMjNFNzAxODdERDVGRTVFQ0JEQkU1Ci06MTBCQ0MwMDA2M0UwRjlBMTczQ0NGMUREMDRGN0UxMEE5RjM5NDQzMDU4Ci06MTBCQ0QwMDAzRUEyQjI3QzBBMzI4N0RBM0Q5Mjk2MkI5RjlGMzg3MjQxCi06MTBCQ0UwMDBCQjY3NkI3MkE4MTBGOUUyNjM4OUM1NkI4NTNFREE5QTZGCi06MTBCQ0YwMDA3MzZBMUNFNkQ3QkY5RjU2NTE5NDNEOTVDNkRGMDNFOTkyCi06MTBCRDAwMDA0ODNGM0Y0RjYwRjRGMzA4RjQwNEU1MERCRjE4NEZDRkYwCi06MTBCRDEwMDBDMTJGQzkwRTREQzhGNjQ2RjNGQjQ4NjA2MDFDRTYyM0YwCi06MTBCRDIwMDA1QzJDN0NFMEM3ODZGNDczMjFGOEFDQ0Q2MkZDREQ5NzE3Ci06MTBCRDMwMDAxQzlCM0UxRUUzN0M3ODIxQkVBMEU3Q0Y0QUZGN0U3Q0ExCi06MTBCRDQwMDAyMUUwMjlGNjJGQzRGQzI2NjQzMzM5MkM5RTAyNkVFNkNFCi06MTBCRDUwMDAzQ0EyMDlEOTE2REU4RUU1MTEyREM5MEU1MjM4OUYxRDYxCi06MTBCRDYwMDBGNUU5NzEwN0NDQkQ0Rjg5N0RBRjQzNEYxQ0ZFMzBBRjY1Ci06MTBCRDcwMDA1RkMwRkJFRjI1N0ZGQjEyNjNDRkVGQzVGRkUxRjkxNTM1Ci06MTBCRDgwMDBFM0ZDMDA4RTdEOTM2MkNGRUZERDExQ0UyRjQ4MDZERUZGCi06MTBCRDkwMDA0RkZEM0JFODJGQzA3MzMxRjIxREU5MThBMDcyQjEyRjlGCi06MTBCREEwMDAyREY2M0NCRjFDRjEzQzQzQjZCRjg3OUUxNUY0NERCNDQ1Ci06MTBCREIwMDA1NThENzRERjNFMkIzMUU2QkVGRDUyRjBBM0QwMEYzMjFECi06MTBCREMwMDBFRkRGOEI3RDdBOTAxRjc0QkQ3NUY2ODE5NUU5ODhGNzVBCi06MTBCREQwMDAzOTdDREQxOTI0OTI4QUZCOUFCRjQ4QTBGQjAwNDNFNDFBCi06MTBCREUwMDAxQUU3NzM4MDk3OERDMjZCRTEwMDhENjdGNDhEOEIyRDAwCi06MTBCREYwMDAxNzZDRDkwQzVFODNFRDNCRDkzOEYxQ0UxRkI4Mzg3Rjc0Ci06MTBCRTAwMDA1RUU4RkMwMTI5MEREMTM4NjA4NUREMTk5MTAxMEZCNzdECi06MTBCRTEwMDA3MTdDMjhCOUI3QTg2ODE3NTY2NEJEN0EwQ0Q3MDlGMEE5Ci06MTBCRTIwMDAzRjNEMDg0RjVENUVERkE5RDY5N0RENjM2Q0YxRTVGNjE3Ci06MTBCRTMwMDAzQUY5RTlCMjk2MThFQkYxNjc4NDdDMjgwRjA2REJFRDNFCi06MTBCRTQwMDA3OUM1M0Q0Njg3QUY2MkQyNkY2MUU3QTcwNzJDMDZGRjMxCi06MTBCRTUwMDAzODkzNUM5NDdGRkMzMzA3RTNFN0Y3RDM4MjU0MUZBMDQ5Ci06MTBCRTYwMDA3RTQwQkRCM0Y1QjkyQjRCMTA5OTY4NUY2MDVFQ0Y4MDAzCi06MTBCRTcwMDAyQjkxQ0FEMUY2OUNFOTg1M0UxRDNDMkJCMzg1NUQyOUVCCi06MTBCRTgwMDBDN0IxMTdCRkRFQjk4MEE4QkQyNDE5RUNENjY4RkY1NjJDCi06MTBCRTkwMDBGQTVFRTBBN0MyRjlFQjk4RjhGMDY3MDRFNjIxM0MzRkIwCi06MTBCRUEwMDA0RjBCRDRFMDNBQ0RGMEQzRUU5RTk5NEFGRDY1ODRERjg2Ci06MTBCRUIwMDBFQzY4N0Y4M0Y4OEY4M0U3NUIzMzAyOEJCMEJGODlFOTNGCi06MTBCRUMwMDAzRTE2QkYxMEY5N0M4MzcxMEJBQkZCQjgzRDBBRUY5MUI2Ci06MTBCRUQwMDBFMkU1NUVGQzA1RkNENURCQjIwMzJCQjE3RjI1ODFGM0U3Ci06MTBCRUUwMDAyMzcxRDJGM0UzQzI1RTIxMjZCQjg2OTRCM0ZDRDIxNTQ0Ci06MTBCRUYwMDA1OUFGRkUxOUUzM0U1QjkzMTlDQjZFRkQ4RTgzRTZEOUY1Ci06MTBCRjAwMDA1RDJGQjkxNTVDMzdEODFGRUY3RDFGREE4NzQ4RTRCRDc4Ci06MTBCRjEwMDA2RkQzN0QyRDYxNjcyNEM5RTc5MzQ2M0U0RkUxMzc1RkJDCi06MTBCRjIwMDAyOEJGRkExMERBNjEzMDlGNEE4QjkzRUU3MzFFMDJCMjdCCi06MTBCRjMwMDBDOTA2Qjk1MUE5QjA2N0M1M0NBMDJBRThBRjUyQ0UzQkFCCi06MTBCRjQwMDBEODBGRjNGQTlDOUM0RUJCMEFCRTRFRTRGMUM1OEQ0NzU4Ci06MTBCRjUwMDBBNzNBOTAyRTJCQURCNjUzN0FCOTY1OEU3QkRDOTU2REUyCi06MTBCRjYwMDA4QzdCN0M0RTE2RkUzM0REMEIyRTY0RkVGRjAzMEIyQjA5Ci06MTBCRjcwMDAzM0Y1NzE5N0MxQjg4NzM4OTdBNkFENjJGMkQ0MjRFNzNDCi06MTBCRjgwMDA4NDNDQjNEOEQ5M0QyMzI0NDA3Q0VFMEMxQTNGNjI3MDI4Ci06MTBCRjkwMDAwN0U3MUFFRkJEQkE0QTk0RDEzOTgxRjI0QzhFMjQwOUQxCi06MTBCRkEwMDBCRjg3NzU1RkM1OUY2NDc1MjgwQkU1MENBNkYzRTA3ODI1Ci06MTBCRkIwMDBFMEY1NjVFMUIzRkQ0QUQ1ODdDRkQ5NTJEMENBRTYxMTg1Ci06MTBCRkMwMDA2NkY5ODdBNDI1MEZEQjVCRUNGRDMyOEUyRkUyMTQ3NDNCCi06MTBCRkQwMDAyNjE5RDg4RjE4OTc5NTVEQkNEQzUxRjdEOUNBQjVCRTI0Ci06MTBCRkUwMDBBMUYxMENFMjc0NTFCQjU3RTFGMzNCRTk3NjZBMTY1REFGCi06MTBCRkYwMDA5QzIzQzExOTM5NDlGMzU2RjlEMzFDRUZCODUzRDYzNEYxCi06MTBDMDAwMDBDQ0RCNEUyNDNENTQ1RTNBOUQ3RkQ0MTAxODZFRTI5NkYwCi06MTBDMDEwMDBCMEZDN0QyOUY0MzNFNEI3RTM0QTE3RjFDM0ZCQjMzRjI3Ci06MTBDMDIwMDBGRjgyMjBGRUQyRjE2NDU4MDEzRThERkFDOUVCREM0ODU0Ci06MTBDMDMwMDBGM0ExQkQ0MUFCNDkyRjg1MjRFNEEzQ0M3QUYzN0JBM0M0Ci06MTBDMDQwMDBCRUIyOTMzRTdBNkU0ODhBMDRCM0NFQTc1RjM4OEUxMzkxCi06MTBDMDUwMDAyRjdFNjNBQjY0QTgxRkI4OTlEOUMzNkYyN0IyRUZERkY3Ci06MTBDMDYwMDA0RTY0REYxREUzN0FBNjM5NEQyMTJDQkU2M0I3QTMzRDk0Ci06MTBDMDcwMDA3RkM2NzUwMjhGNkFBMjNFRTk0NDdENjJCNzA1Mjg1RURECi06MTBDMDgwMDA4NTVFNTlCRkZGNTY4Mjc4NkIzRTUwNEJFMUYwNUI4OTZECi06MTBDMDkwMDBFRDhGNkEyQjI0OUFDN0IwOTRFN0RGRDUxNzkxRDcwMkFBCi06MTBDMEEwMDAzOEI1OUM3Q0E2Q0Y1RTBFQUQ2ODgyNzJEREFCQTQzODNECi06MTBDMEIwMDAwMkVENEE2NjA3QUJGMTVFOTdGNjYyQTI2RTgxNzJCQjMzCi06MTBDMEMwMDAyM0Y0RDQ0RjcxMUQ0N0Q5M0Q2MzFCRjg3OTVBQzBDNDdFCi06MTBDMEQwMDBCQUJERDBGRkNFRUI0NkE5REI3MTQ5NTUwMzVCMzE0RkFBCi06MTBDMEUwMDA2ODYwMUI3MTYzNUVDOTEwRkEzRDA3RkMwMEY0QjAwQjc5Ci06MTBDMEYwMDBDQjMwRUYwRDZCNDJGRjdBMDdCNENGN0U5NUE4QjQwRDFECi06MTBDMTAwMDBBRjQ3MUYwNUYxMjc3MUJBQzBGN0IzRTFGRDA2NEU0N0VGCi06MTBDMTEwMDAwNTA3MjVCNkJGRUY2MUY3N0ZEMUNFRjE3RTJFM0JGQjQxCi06MTBDMTIwMDA3NUMzQzE4QTZCQTdDMkJDMEE3QUE3NTBGMjFFMDNFRDgxCi06MTBDMTMwMDAzMUZGMDkzMzEwNTg3QjYyODlENTdFMENCNkY3RTE3RTVBCi06MTBDMTQwMDAzRUMzMEZDOTUxRThCRDQ5ODRDQkJGNjkyNjNFOUMxMTRGCi06MTBDMTUwMDBFNTA3NUE1RkMyQ0IxQkI4OUUzMkYwMERGNjAzRkU3QTlDCi06MTBDMTYwMDBBMDhDNkRGN0QzRUYzQzhDM0Y1NDIyN0UxODNGNEYyN0I1Ci06MTBDMTcwMDBEMTFGRUNCNzJBM0EwRTk1Q0I3Mzc4RERFMUU1RjM2OTcwCi06MTBDMTgwMDBERUY3MzQ2QkU0MDVFNEY3MTlGQzU5QzI5RkM4RUY3NjdCCi06MTBDMTkwMDA4MEUzMzI2QkNCNjEyRkFDMjc3NTEzNTFEQjcwOTQwNkIzCi06MTBDMUEwMDA1RjNCRjY1NzRBODIzMkMyQjlDQ0JEQUQxREU3Nzc2NTE5Ci06MTBDMUIwMDBDM0QxNzRBNEFGNzUzOTA1OTQ5RTY2REFENTAyMDc5MDkxCi06MTBDMUMwMDA0ODdCQjlBQUJBMEJGMDlFMzE4OUMyNjU0OUJEM0Q4QzQ2Ci06MTBDMUQwMDBGOTZENEIwNkVGRjkwOUY5OTcwMkZGMkMwQkIxQkM2NjFDCi06MTBDMUUwMDAyQzM3RThFMkI1MjJFRjZGNjkwMkY4RDUzMUU0RjdCQUVGCi06MTBDMUYwMDAxQzY2Mjc4OUVGMzdGMDczMjlBMkZFQTYxQzk2RkY3MUYzCi06MTBDMjAwMDA0RENFRENEMjFDOUE5N0M0RjJBMTgxRkZBNzYxNTlDODE4Ci06MTBDMjEwMDAxNTE4OTdFNkFCMkMyNjAxMUJBRTZCMzFFNzVGQzFGRjBCCi06MTBDMjIwMDA0QjAyQjc1MzdCNzY0OUQwNjg5N0ZFNTY2MkY4RDY5Njk0Ci06MTBDMjMwMDA0QkQ0NEU1QzU2M0ZCQ0REM0EzNzQ3RUMwN0U3Qjk4RjJECi06MTBDMjQwMDAyNzQ1REYwQkJBMTJGMjdDMTFFQTc3OTRDMzM1QTBDRkYxCi06MTBDMjUwMDA3NTc2NzNDMzlERTc1MkU5Nzc5OTRGQUUzRjdGNTlGNEU2Ci06MTBDMjYwMDAxQ0NDMDZEMzM5OTg2NjdFMEU2NkMzODEzNjVCMDZEMjM3Ci06MTBDMjcwMDAzQjNGMDdCM0UxRTA4NzVCRjVGOTdGMDI0RTQzQ0ZDMTU3Ci06MTBDMjgwMDAwQ0QwQkNDN0E1NEFGODA1M0MxRkI0RjQxNjU4MjNCNDFCCi06MTBDMjkwMDBGRjE1M0YzN0YxMjI5RTlCOTgxQ0E1MjNENzc1OEUwODZBCi06MTBDMkEwMDBDQkFCMEJEMEZDQkUzQzc3OTI4QUY5Mjg5RDk2QzkzNDYzCi06MTBDMkIwMDA5RkE4MzNEOUE1RUFGMzc3QjZCN0I1NTQ2MzNCOTE0NzQ2Ci06MTBDMkMwMDAyNENFQkQyQzhEQjM1RjdDN0IwRUIzQjcxRjkyNTgzRTNFCi06MTBDMkQwMDA5N0I2REM0RUUxRUQ5NUM5MzFGREY5N0U2RjQxOTBFNkYwCi06MTBDMkUwMDBEMTk1RTZGODQ0N0IxQTVGQzBCQ0QzMjlGMDBDODM5OTQyCi06MTBDMkYwMDBDNkYwQzVCRTM3Q0IwN0U4QUYwM0ZCQUIyQTUwNjlGRURCCi06MTBDMzAwMDA0QzU1MEFDQjQzRjNBNjA3NEI2RTJCOEFGNjVCNzc5MDBFCi06MTBDMzEwMDBFNUVERDUwNTNGM0RDMkYyNkY2QjRCMTE5RUYxRTRCQURFCi06MTBDMzIwMDA1OTdGMDFGRDc1RTZDNDg4RDNERjI5ODc5QTkxRkU2Qzk5Ci06MTBDMzMwMDA5NUMxRTU2QkExREZCM0FGMjkzNENGOEU2QzBFNDgzNkMzCi06MTBDMzQwMDA2OEY3OTM1N0RDMkE5RUJGRUJBODA4RDY1NkQzN0EyQjAyCi06MTBDMzUwMDAzRDFGOTg1MTRGMjIwOTUwNUZGQUFBRDI4REY5N0Q4RDY5Ci06MTBDMzYwMDBBNDRCQzE3RTFBNEQ3QUVDMTZFNzhCMEFGMkU5MkRCQjdECi06MTBDMzcwMDA2RDUxQkEyNDk4OTdBODE2QTBDMDZCREEzQjI0MkU0MkMwCi06MTBDMzgwMDBFNTkwOTA0RjY2N0EyNjYzOEM3MkE4NDRDODVEOTAwRjQyCi06MTBDMzkwMDAyQ0FGQUY4MUU5M0RGMkE0ODRGMUExQjNBRTEzMzJGNzIzCi06MTBDM0EwMDBBRkE5REM5QjJBODQ5NTQ5REU0RjNERjgxMkI1NjcwNDlFCi06MTBDM0IwMDAzQzY3ODFCQzQwM0Y0RUMyRjc5M0Q4MTE2RUJBQkZBNTBGCi06MTBDM0MwMDA0OTg1OTg2RjNBODMyNDUyN0ExQjYyNDdGMEY5OTUwRTlCCi06MTBDM0QwMDBDRTlGRDk0RDQyNEU1Njk0MzM5M0Q0OEMxRjE4OEZEMjkyCi06MTBDM0UwMDBCOUQ4RTc5QjhBRjdGQUMwNzMwNjFGRkYwQjRCQTAyODRBCi06MTBDM0YwMDBFMjQ3N0M5MUIwMDVFMEJDNTU2QUExN0FDNzhFRjk5RkVGCi06MTBDNDAwMDBGMERDMkU4NUE4NUNGQzk5QTZDOTA4RDcyQjQ5Q0JFMkE1Ci06MTBDNDEwMDA4NTdFOEFGNzIzMzk1NDNFRjYyNjIxMUU4RTJCQUExRENGCi06MTBDNDIwMDBFQkFCMzE1MTkwM0U4REY4OUFFNzdDRDA4QUYwOUE5NzI5Ci06MTBDNDMwMDA2NUM2OEI2NjQ1RjhDRUY3MERDMTE3M0Q1NzEwODg4MzRBCi06MTBDNDQwMDBBRjgwOTAyQkM0Mjg1N0ZDRTQxQzNCRDdCQ0VEQzgxRDIzCi06MTBDNDUwMDBFODFGNUZDODNFNzkzMDIzRDQ4RkYyMzM5RTlEMTIyRkEwCi06MTBDNDYwMDAxRkVGMjQ5N0M3MjNDREM3M0I2QjYzN0VDNTc0RDI3Rjc0Ci06MTBDNDcwMDBFMzVFNjkyODlEOUMzOUJDNDlDRUQyRDE5M0EwRDNFNzE1Ci06MTBDNDgwMDA3ODdFQkVGNDRCOUVFRjVCRUFBMkZBMkZBQTJGMTkxRDBECi06MTBDNDkwMDA5NEYxRDI3NEE0MkYxRDFENUM3NUMwMTE5MTYxOUQyNTZFCi06MTBDNEEwMDBGQ0ZCRTk0ODBGOTNBM0ZBMzI2MjcxRkE5NDdDQzRCQjk3Ci06MTBDNEIwMDBEQTI5Q0I0M0VERTQ4QzM0MUZDNUZGMTQ0QjgwRTI3RkI3Ci06MTBDNEMwMDAyQTUxRDNCOUREQTlFNEMyRkFDQkVEM0RFRDU2MUZDNTIzCi06MTBDNEQwMDBGRkY3RDFCRkE5MjAzRThBRkYwQTkzREVBOTcyRDY1OTgxCi06MTBDNEUwMDA5MTRFQUFFQzY2M0MwNzI4RkVBQkRENDNERTVCQkUwQTNDCi06MTBDNEYwMDBGRTJGNDNGQzBCQkQzMjAyRkIxNEYwRUZDQjFENjY5RkY5Ci06MTBDNTAwMDAzMTFFRkVDN0U3M0E3OTVDRTNFMkYwNkZDNkJCOTAwM0U5Ci06MTBDNTEwMDBGQjFDRUUyQTI3QzY4MzFCNTkzRUYyOTREN0M2QjQ2MzkwCi06MTBDNTIwMDAzOTYzQkQ5RjlFOTNEOTk3QUFGRThBRDZCN0IwRkFEMjM3Ci06MTBDNTMwMDBERTgwOENGNzMyMTY2Qzg0N0EyOEVGRjMwN0FCQjBCQzQwCi06MTBDNTQwMDA2MTkzNDRFNUU4RDQzNzQzRUQ1ODFFQjM5OUQ1OTc2QzExCi06MTBDNTUwMDA2OUY5MTVERTZGQjY0MTYzREYzRjc3NzIyQkJEQTcyMjA1Ci06MTBDNTYwMDBCQzk1N0Y1RkQxNTU4NUU1MEQ5REVDRkIzRkI4RUMxQTdFCi06MTBDNTcwMDBGQUU1NjVDN0MyRURGODdFRkMwRTM2MEY2MUY3Q0RFNjMxCi06MTBDNTgwMDBGNEI2NEY3QUZBNTdGNEJCMkVGNkRENEQ0N0VDODlDQzYyCi06MTBDNTkwMDA1RjYyNzZEQzJDQkVDRUQ5OEZCMTc1N0E3RTc3NzU4REQxCi06MTBDNUEwMDAwRkUwQkU3NjQwQjM1MUI5NjE2OTJBQTM3MjM0OEU5RjAxCi06MTBDNUIwMDA1NjIxNzVFNUUxNzMxRUM4MDk0MkYxMEU3NDlBQ0ZGMjU3Ci06MTBDNUMwMDA1NUJCNjE4OEI1QjlDQzBFMTE3OTlFOTg2RjVFQUJDMzJGCi06MTBDNUQwMDBEN0RBNUNBNjZGNDVCQjhDMzRDMkYyOTIxRjY1RjdDREVCCi06MTBDNUUwMDA4QTNDRDRDOEMzNDRDMkY4MDFBRTkxRUFERjM4NzlBOUM1Ci06MTBDNUYwMDBGMzBBNUFBODNFOUQ3Nzk5Qzg0N0VEQjdBRTg2NzE0QkFFCi06MTBDNjAwMDBDRUZGREZCOUIxRkNGMjI2M0VFRTA5OUUzRjJGREUzN0FBCi06MTBDNjEwMDA4NkZEMTZGNDRGRjYyMUYxRDBGQjdGN0VGRTFBREEyRDRGCi06MTBDNjIwMDBGQjcwMUY1OTc3RkZDODNFM0YyQkZGRUZEQzY3RUZFOTM4Ci06MTBDNjMwMDAwNDI3RjcyNjRCOEI1NTQzMjUzMDVBQTJGN0E5N0NBMzM0Ci06MTBDNjQwMDA5NzQ0NTI5Mjg3Q0U3RjlFOTU0NDU4REUwNDlCRkY4RDdGCi06MTBDNjUwMDBFRDRBRjc3NjlEMURCRjQ0ODg4Rjk5NjNBOTVFQTlFM0QzCi06MTBDNjYwMDA3ODEyNzI2MzA5QzcxN0YwNzkzQkYyQzc1MjdCMEJCNTlBCi06MTBDNjcwMDAxQjk3MTNBNkQ3NkYyNjYxMUFERkI4RDlDNEU3RUI5Q0M2Ci06MTBDNjgwMDA3RjdBREY4MkY2RjMxRTIzM0ZBRjg3RTlCMDdERjU4MTI1Ci06MTBDNjkwMDBDN0RGMDVGODM3M0VFMjcyQTNGRTVGREY2MzZDRDdGOEIxCi06MTBDNkEwMDBDODZCQzc5OEZENjVFNEY3NDZDMUVGNjEyM0JGODM0MUJFCi06MTBDNkIwMDBDMUY4RkRFMTA5NzRERjQ2OUMwQjc0RDgwN0RFRDc0ODRBCi06MTBDNkMwMDA3NEJEODM3QURGQzQ3RjBFM0MyNzU4ODg3RThEODVFNTU0Ci06MTBDNkQwMDAyN0YyQjIxOEY3QjMyRUE2OTczNUQwQ0JEQzBGQTIyMkUzCi06MTBDNkUwMDBGN0IzQkUwNTM0MEZCRTQ0RTg1MTJFNjcwNDNGOTc3MDgwCi06MTBDNkYwMDAzRDNGNDQ4RkQ3OThGRDlEMDcyOTlGNENFMTI1QjNGRTEwCi06MTBDNzAwMDAxNjdBNUI5QzNGODQ3RUE5RkUwNjdERkQ1QTAwRTZEQjFGCi06MTBDNzEwMDA2QjcxODYxMURFNTFCRDFEQTY3QzM0RDkwRUYyREE0MjUyCi06MTBDNzIwMDBGMUY3M0NDQUU5QTkxQzZGRUQ1Q0FGQzdGNTBGOUMxQjg0Ci06MTBDNzMwMDA2M0ZBMDdFMDZGRDA3RDg0QTE3RTQxQzQ2MEVGOUJGMTc2Ci06MTBDNzQwMDAxNkNGRkUxRkM0OUIwM0VDQTkyNEY0RjcwOUUzRTMxQ0Y2Ci06MTBDNzUwMDAzMkEyRkMxMDkwREJFRkU0MEVBM0I3OTU0M0VDRkRDMEQyCi06MTBDNzYwMDA0RTA3OEQyRjg4MzhCQkUwQkZERkU0QjFGOEMyNzdCMzQ2Ci06MTBDNzcwMDAwM0VGNjEzRjdEN0NCQzNFREU3RkRGQURGM0U4QkVGN0JCCi06MTBDNzgwMDA5RjQ4ODBFRTdCNjMxRTUzNkU4Q0JDMEJEQ0Y3RUVEMEIzCi06MTBDNzkwMDBDNTRCRkI1MjYzQzdDMTNGRTE3MjYwNjIxRTVCREYxOThDCi06MTBDN0EwMDA2RkUwMzRGMkQ1MDk4NUM1RDk0RjI0RjI2NzMyREJBNzkzCi06MTBDN0IwMDBGODIyOTdDNTdCMjdFNkIxQTcyQjhGQ0IxMTlFREY3RDkzCi06MTBDN0MwMDAyMkNEMTg5RjE3RUQ1MkY4RjNFMzU2N0JCMDQzMTcwRkI1Ci06MTBDN0QwMDBGNzNEOUNEMDgyN0FDQzVCQzBGM0UxMzczMjNBM0VGQjI2Ci06MTBDN0UwMDA2Q0VBNEVGREZENzAzOTc5MTUxM0YzMzA0RkE0MjBBMDhCCi06MTBDN0YwMDA2NDYzN0NFNjU5QTYyRjlBQURGRDBBREVFQjkzRTIwRDQ5Ci06MTBDODAwMDBEOUYyMzAyRUUzMjM4MUE3QjExRjVGQkZCMjE4RTA3REJDCi06MTBDODEwMDA5NkVGRjc5RkU1RjcwMDlENzVCMEE3OTg1NzRFNUVFRDMwCi06MTBDODIwMDA0NEZDRUVFQ0FERkQ1NDZFMEM5NjZCRkJBOTVDQzhDOUU0Ci06MTBDODMwMDAwQkQyNzFDRjJFMTFGNUJDN0MwRjJCMTNFRTU3NTY3MDE3Ci06MTBDODQwMDAzRUExNzFFMzE4NzFFMkExNzE2MUUzM0QzNzFCOTREOEY5Ci06MTBDODUwMDBGQkQ0MjRDRjY1ODhGN0FFMzhDOEUyOTAyQkVENjQ2QjJCCi06MTBDODYwMDAyRUQ0NUY3RjMwOTNGQTFCOERDOURBMzhBNDg3QUYxQkIzCi06MTBDODcwMDBDNzNEM0JBQTk3QUU2QjdCQzVDMEU4NDc0QkU5QkUzMENFCi06MTBDODgwMDA4RDE3QUQzRkY4MTI5NTdGRUIwNURGRUMzN0YyQ0RCNDk1Ci06MTBDODkwMDBCQzkxRURBNzk4RTNFQzIzRTBBNzhBQkM2MUVDQTA2NzBDCi06MTBDOEEwMDA1MDdGRDlBMjc4Qjg4REU3NTE1NUNCNEQ1NTE4NTdGQTFFCi06MTBDOEIwMDA2QzBEQTFFNzZCNkY3QjQ1QTY3NDc1REI1MzEyQkQ2RkUyCi06MTBDOEMwMDA0MkQ4NzFFQjM5OUNFM0FEMEJDRjI3Rjg3NDcyMDVDRkRBCi06MTBDOEQwMDAyN0Y4NzQ3RTFEOUU0RkQwOTdGMTdDODJCRTNEOUU0RkZGCi06MTBDOEUwMDBEMEQ3RTNGOTA0N0QzRDlFNEZEMDk3NEJDODBERUQxODhFCi06MTBDOEYwMDBBN0RCRDA0OURDNjExRjNCQUZBMEZGMUVDRjJCRThDQkVECi06MTBDOTAwMDA3ODVFNDFGRjNEOUU1N0QwOTczRjIzMEM2RTlGM0QyNjlBCi06MTBDOTEwMDBEM0Y4M0Y5RTVCRDA3RjdGRDMyQjNGMjk4QkUwQjIxREE2Ci06MTBDOTIwMDAyQzNGQURERDAxRjA0NzNBRDQwMkJENDUwMDlGMzUxQ0Q4Ci06MTBDOTMwMDAzRTc4QUU0MURGRUYyN0M5NzM1RjQ2RkNBQ0U5QkQ3MUJECi06MTBDOTQwMDAyMTNFQUYzODcwOEJBMTVGRDJDNUU0NzEwQkZDNDMzODM4Ci06MTBDOTUwMDBERTQ4ODIyOUU4Q0Y0RDI2MDM0NzMwREVEMTFDOTY1NEFECi06MTBDOTYwMDAxQ0Y3QTY0NzhDNzI3QkYwMUU5M0IwRjFGRDNBQTI4QkE4Ci06MTBDOTcwMDBGRkZBODdDNkZEM0JGMjVDOUVFMzJDQjczOTQ3MUZFRkY5Ci06MTBDOTgwMDA4OUQyODM1MzhEMjAxQ0RFOTRENTU4RjQ1MDQyMkU0RjBCCi06MTBDOTkwMDBBMTcxOUU5NzY1OEM2MTkwM0Y5MDk2ODc2NjRBQkFGRDFCCi06MTBDOUEwMDAwMTEzM0MxMkIyOEM3NEUxRjAxOUU5MjJBOUQwNDgxN0E2Ci06MTBDOUIwMDAyRUQ1NDgxNzI5RTU0NkJBNDgwRDRDMTgxNkJFRTkzNTVDCi06MTBDOUMwMDA0NjNBNTkyNzM3NTFCRTE3NzAyRTg3N0YwOEU3Qzk3ODM2Ci06MTBDOUQwMDAzMzI1QzIxN0Q2ODlGMTYyMzM3QzFCMEZERUI3MTVFRDA0Ci06MTBDOUUwMDBGRThCODU2RjRGMUVERjU3RTFGMEZEOUNDQ0FDNzJGQUQ5Ci06MTBDOUYwMDA2ODc1OURCRDJDNkFDNzk0QkVEQzQyMzc4MUNERjE1MzZBCi06MTBDQTAwMDAwMTQ3NjE0Nzg4MzgyOEU4N0Y2QTRGNDdGRDdBRTZFRjlCCi06MTBDQTEwMDA4MTdERjA0Qjk0QzNDNzE1RTZFNzIxMjVBMURDNUM0QjczCi06MTBDQTIwMDA0MjU0M0VBRDM1RDkwNzM3MzkxRjU0RDAzRTE4QjI1RTU3Ci06MTBDQTMwMDBCMENDRjBERTQyRjM3QUQxREUyMkJBQjg5NEQ5M0U5MDdGCi06MTBDQTQwMDAwRTRBMTFENzI0NUNFRTQxMjFBNzQzRTdBOTMxMTQ5MDg3Ci06MTBDQTUwMDA0NjIyMzc3RUU0MEFCQzg1NzIwQjFENDU3Qjk5MjE2RTA4Ci06MTBDQTYwMDAxQ0QzRUUxM0YzMTA3MDExRTMyNzkwMTYzOTBCRTlCOUJDCi06MTBDQTcwMDBEMDZDOUYxOUZENkJFMThGOEI3OEJCODg2QjBCN0Y1QTU1Ci06MTBDQTgwMDBGODMxNjYzOENCOTdGOURCOTFGRUE3Qjg4NTFGRERGQjNGCi06MTBDQTkwMDA0RDdDMkZGQzY3QjNERjNBNzgxRTAwMjE4QkU3NkQ3ODYxCi06MTBDQUEwMDA5Q0ZFNkVFRjZBM0JCQjhGOEZGMTlENzhCRkQ1QjMyODlDCi06MTBDQUIwMDA2NUI4M0NDQ0JCNUE4REU3NUY2MDE5ODE2MUNGMTMyMTBCCi06MTBDQUMwMDBDODMyNzBERjg5NjA1MDg1RUNCOEU2NDgzRkRFQjFCMzBDCi06MTBDQUQwMDBFMzFCQkYxRTc4MTE5RURCOEI5RkVDREY4Mjc1RTdDRUQ4Ci06MTBDQUUwMDBDQjA4RDdDMTc4M0U2MUU3ODMxNUZFOUQ5MkI3RjU1NjE2Ci06MTBDQUYwMDBENEEzODlBQTk1N0NBNEEzMEIzQjY4QUE4RjBBRjlCODkyCi06MTBDQjAwMDBBODI3QjIwNkVCN0ZBM0RGRDdGRjQ3M0RCRjBCRjBGOUE1Ci06MTBDQjEwMDA2OEVDMzBGNThBREExODMzQUZENjA0MkY3MTBEODZBMzhFCi06MTBDQjIwMDA2OEVFNDlCNDRGMUM0NEI3NkVBQTBGNzU2NTM5MEEyRkQ5Ci06MTBDQjMwMDBBQTVBNjU3QTVFNEFENDA3RjBERTkyQUZCQjJFQzRGQkQ4Ci06MTBDQjQwMDA0NzM2N0QzOTcyRjQ2MzlCN0VGRTYxOTY1NzYwMEQxMjA1Ci06MTBDQjUwMDBDQ0JCNTUzQzUwQUZENzJGODM3NDA4MEM1NUE2NUJERjc4Ci06MTBDQjYwMDAwOEQ2ODU0QzgzRUUyN0IzNEIxOEJFRkY1NkVCRUEzMDUwCi06MTBDQjcwMDBFMTBCRkIwRDY2NUNEMkYzRDMyRUYxRjk0NTJFNzFGQzZGCi06MTBDQjgwMDA5MkRBNEIxQjdFODFEQTRCMUI3RURBMjUzRUJGQzgyNTJECi06MTBDQjkwMDA4RTVGQjJFOEQyOUU1RjYwRDFBNThENUZFRDEyOUY1RjgwCi06MTBDQkEwMDBFNDEyQzcyRjU5N0M2OUMzMkZCMEY4RDI4NjlGNzY4OUNCCi06MTBDQkIwMDBDRjJGNzI2OUUzNTdBMzc2QTBCMzNDNDJGMDVFMDk1RkMyCi06MTBDQkMwMDAwNzUxRkQzRTMwNTlFMTM1RkFGMzA1MkFBMTc5MUE4NDVGCi06MTBDQkQwMDBGQjI1RjlEQzJGQjk2RjQ3NEIzREJBNTBCQjM0QzU0NzM1Ci06MTBDQkUwMDBFMzQxRTBERjY3NDFGRDc4QzJFQTc3NzUyRUEyNzFENjk2Ci06MTBDQkYwMDBCNjUxRTM3MkYwOUUyQTY3RTdEQzkzNzg2RTZGQkNDNjhECi06MTBDQzAwMDBGQzcxRjNERjBCQUIwRDE4RkZFRURBQjVFNUU5ODZGMjQ4Ci06MTBDQzEwMDBENDVFRTNCRDE1REY2QzJDMzBENDJGMEY0RDM0RkRERDE5Ci06MTBDQzIwMDBCQzI5QzZCRjQ3MTY5QzYxQkE3RkUxNTZBMjNGMEY5OTQ3Ci06MTBDQzMwMDA0RjIyMkFDNjU3RjJFRkIxNTRFMkJFOTkxNTdERTYyQjdBCi06MTBDQzQwMDBFMUZGNkU4NTdFMTc4MDdGN0FGRjI1MUYzQ0ExQzFGRTI0Ci06MTBDQzUwMDBGRDA4MzdDNUQwQkZEMzU0N0ZCMUU3NEY5RjE5Q0RFMzRGCi06MTBDQzYwMDAzMUE2RjNBNzA0MkY5NzhDNzFERURDOUM4NzQ5QUMzNzgzCi06MTBDQzcwMDBEM0Y4OUNDMEQ3REREQjJDRDRFNUZEN0MwN0ExRjczQkM2Ci06MTBDQzgwMDA1Njg1N0QxNjdBRkYzOUM3REI0NDRFN0E2MkRERTE1NjYwCi06MTBDQzkwMDBFMzM5RjQ3QzhENTQyMjNFMEIzQTg4MDVFMzZCRkVERENDCi06MTBDQ0EwMDA0NDBEMTAxQTE3QTI3NEIyNEI4QjREMjdCQjg4QkIxMkQwCi06MTBDQ0IwMDBFRkUzREExNTI2RjRFRjYzMDlCQUI4REJFNkNCQzE3RDAyCi06MTBDQ0MwMDBCNTg5OUQ4QzFFMDQ5REY4OTA0RTkyMzEyRkM4N0NERjUzCi06MTBDQ0QwMDA4MDE5NUY2NDcyMDRFNkJBNkI0NzdFOUEzRTFGOTVFQzNBCi06MTBDQ0UwMDA2NTcwQjdDM0JGRTFGMDU1QjhEQjg4MkYxRkQxOTVCRjgyCi06MTBDQ0YwMDAwMkJFNEU3RjREN0MyOTlFNjAyNEM1ODNGMTRDRTJDMzY5Ci06MTBDRDAwMDAzQ0E5QzNBM0M2NTkxMDFFRkU0RTk1RkFGRjM1RDAwQ0EwCi06MTBDRDEwMDBFMUVDRUY2NEY3QTgwOTNDODlGRTc2QjQ5MkM4MUM5RDRCCi06MTBDRDIwMDBGRkU3NTcyMzAxODQ3M0I1NUM1NDg5RjlFNzNCNEI2OUVFCi06MTBDRDMwMDBDODc4MDg3RTc2MTI3NzIyQzZCRDc3NzY1QTEyRTlERDZBCi06MTBDRDQwMDBENDA3MDAyRkM1ODRGQ0Q3QjZBNTI5ODU1MERGRUQyNzcxCi06MTBDRDUwMDA4OTc4QkY1Njc3OUI4NURFNTdENkZEQUM1NDZGQkM0RkE0Ci06MTBDRDYwMDAzOTkyNjBDOUEyRUI0OEIwOTREM0E3OTUzRDAzRkM0OTIyCi06MTBDRDcwMDBBQ0FDM0UyMjYzNzlGNEU2MjFGNzdEQzg1ODlGNUE2MzM0Ci06MTBDRDgwMDBGQTdCODEyNDIwNjE3QkVCNjUyQzhGMzMyNTYwQkNDNzQ3Ci06MTBDRDkwMDBDNjU2NkU5NDA3MDBDNkRFQUMzMjhDQjc3MDdBRTdGN0UxCi06MTBDREEwMDBBMzg2QUI0OTE4RkZDRUQ3NjU1Q0VFOThFOTI4RjVBRUFGCi06MTBDREIwMDA0NTk0OThEQTQ2N0Q4QkNBQjNFRTM2ODVDMkRGQzZFNTY4Ci06MTBDREMwMDAxNUQ5Q0NFODQyODM3RjQ4NEZBOTI2M0E3MkE5NDYzQTQyCi06MTBDREQwMDBCMkM5NzkzNDBGNTdGMDk1OTg4RjE4QkY2RDU0NDZBMjk5Ci06MTBDREUwMDA5NUNFQ0I0QUVGQzFCNjk5RTU4NDY5N0U0RTBDMDYwMjFBCi06MTBDREYwMDBFRTlDMUUxMjBFNDNCRDRENjNGQzQxRTQzRUZBREUzNjRFCi06MTBDRTAwMDA4RDkwNzRGRjU3OThFN0Q3OTQ0RjU3NUYxNkZCN0NGQ0MzCi06MTBDRTEwMDBDNUNBMjcxN0VGRjNFRUE5NkM5RDlGQUJFQzNFRUJBQUJBCi06MTBDRTIwMDAwRTQ2RUZBRTFEOENERUYxMjQzN0NCRDcwQTJDQ0NENkM0Ci06MTBDRTMwMDBFREFCRUVFNzcyQ0EwQzM3NTc2RkEwMEFFOTc5QUVGQzhBCi06MTBDRTQwMDA2QTAwRjMyM0VFNzk5M0QxN0ZEQkE4Qjc1RkM2RjI4RTM5Ci06MTBDRTUwMDA3QjE4RkNGRDJBQzMzM0QwOEIxQTgxQTlERjczOTc5MzBCCi06MTBDRTYwMDBFNjA1NEYyOTA1N0MyMUZFNUYzNUNBOTNBOUJENDYzOEVBCi06MTBDRTcwMDAxNjk4RTQ4NjNGMEU1Q0NERkMxQTBGQUU3NzA4Qjg5Njg0Ci06MTBDRTgwMDAwMTVDMEIyRTFFQUU4QUM2RTQ3M0VBNEM3NkJGRTJFMTZCCi06MTBDRTkwMDA1MTBBRkJCQkJDMUE4MzYzNkE0MEE1RjI3N0FFN0MyRUI1Ci06MTBDRUEwMDA5MjAyRURFRTBCODBCQzgxNzlENjA0MThCQ0REMzM4NThGCi06MTBDRUIwMDAxQzM3QzI1M0M4MTcwMUZGN0MwRTdGQjdFQTdFMDVGRkZGCi06MTBDRUMwMDBCRThCNTNCMzEyOUY4NEYwRkRBRjAwREExMTVENTM4NTIyCi06MTBDRUQwMDBCQzE5MjA4OEI3OTQwMEEzNUIwMUU3QUVBQjE4OUNGM0E0Ci06MTBDRUUwMDAwMzFDQ0U5RDFDNkUxMjkxMTBDRTY2N0EzNUNCRTc5NDUyCi06MTBDRUYwMDBBRjA5RTc2RTAxRTcwQzUyRjY1NUUwN0M1RjEyQkIzRkNECi06MTBDRjAwMDBEOTM2ODZDMUQ1RTYxQzg4QTA5Q0VERjQ1QkU5QkE1RUYzCi06MTBDRjEwMDBGMDJCQjRCRUIzOThENTNGOUNCNDMyMEJGNTZEQTc3NzE4Ci06MTBDRjIwMDA2QjE2RDI2NTlCRkZDNjJDOTRFRjhFMkMyRTY3NDhDMEUzCi06MTBDRjMwMDA5OTVEMTYzRDc3NTAyREVGQTBGNzhGNkVGNTI5MTQzRkMwCi06MTBDRjQwMDAyRTVGNkNGOTk1MzIzMzY0QTdFMzE0NTk4OTRDRTFGMEY0Ci06MTBDRjUwMDA5ODFBMEIwRUY2NTJDNTIwMkY3MzFCOERGMDREMzJDMTVGCi06MTBDRjYwMDBEN0YxMzVFNUMzN0Y3RTRERjk4MDM5NDdEOEVFRUVCMTc0Ci06MTBDRjcwMDBFMjdFODYyRTNCRDU0RkU1QjdEMEI4NzkwMTFGNkJEQjNCCi06MTBDRjgwMDA4RUZCRDk3QkFFRDc3NEVGNkJGMjUxOUUzOEFEMkFDMkJGCi06MTBDRjkwMDAzM0RFQkM4NTlERjMzOEJGMEZFNjdFN0U5RjRCMTdCRjA3Ci06MTBDRkEwMDBDRkU1NUU3RTlGQ0IwRTdFOUZDQjc2QkNDRjA1OUU5RDUwCi06MTBDRkIwMDA3ODlGQ0JFNTY4NEYwN0U4NTNCRTI3OERERTNCRjgzOUY1Ci06MTBDRkMwMDAyNkIwRkJGMURFOUMzMzI0RDZGRDI0N0VDREE4RkYyRUI3Ci06MTBDRkQwMDBEQjY0QkM5RjJDQkRDNkE4RTc1MjAzNDYzRDg3RkI1RUMxCi06MTBDRkUwMDBGQTdBOTc2QUJDQUYyREE5RDA3ODVGOUJDMzY3QkNBRkI0Ci06MTBDRkYwMDA2RENGNjUyMUQ5MDdGMEZEN0ZCMUIxQzYxRTAwODAwMDVECi06MTBEMDAwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDAwMDBCREQ3RDA5Ci06MTBEMDEwMDAwOTc4NTQ0NUI2NzBEREJFQjczQjlEQTRCQkQzMDk1OTEyCi06MTBEMDIwMDA4MTg0OUI5NTBFODREMDQwQzBBMDQxNkYxNjMwMkE4MzI2Ci06MTBEMDMwMDA5RDA4OEE4QTFBMDEzMTQwNDgxMDc1Q0MzQzlEOTc4NjFDCi06MTBEMDQwMDAwNDA4MTgzMEEwQTgzMzJFMzRFQkUwQjg0NTI3MkEyQTZDCi06MTBEMDUwMDAzMjFEMDQwNjlGQkVBMTU5NTQ3NEQ0QkY3NTdDMEFDODAyCi06MTBEMDYwMDA0ODA0MTdGQzlFQ0JBQjczQUE2RUY3QkQzNzFEMDg4QTI4Ci06MTBEMDcwMDBGRkU3N0JGMTkzNEFERERBQ0Y1NkU3OUMzQTU1MzEzQjI3Ci06MTBEMDgwMDBDQjg4REY0QUYwRTc0N0Y4QzdEQjREM0M3NkNDOUE0OEJGCi06MTBEMDkwMDAzMjIxRDlCQzZDQkNGOEIwMzU1ODQwQzhCMkI2RUEzOEI5Ci06MTBEMEEwMDA1MjAwRjU5NDQwMkEyRDhGODU0Mjk5OTBBNTY2Nzc3RjhFCi06MTBEMEIwMDAwRkZEMUVEQjM2NkIyMjcxMTBCMkI4ODkxMEZGNjA0MjgzCi06MTBEMEMwMDA1QTlCQUM5ODJFNENCN0I4RkQ4OTg0NkM3ODUzNzQ0NzQyCi06MTBEMEQwMDBEMTI2MTZDNUEzMzg2OUZEQUVGNDI1ODREMEVGQ0I5Q0NDCi06MTBEMEUwMDA4NEE0NjREMkVGQ0VGOTg0NjQxMTIyRDEwMTA0OUE5NzBBCi06MTBEMEYwMDBEQTI2MUMyMTg1QjRDMUQ0Qjk4NDhDMDlDRjY3NTk5QjI5Ci06MTBEMTAwMDBDOUVEMkYyMjI0MkFERUU2ODZGMTQ5ODFGNDUxOTA5NjVBCi06MTBEMTEwMDAzOUU5N0YzRkQyRjYzRkMyQ0Y0NUUxMzQ4QUIwNzI1QzM1Ci06MTBEMTIwMDAyNzhDMjM2QkYyMDRDNkQzOTczN0JFMjczQ0JENTM1M0RECi06MTBEMTMwMDAzRTU4QjYyNzdFMDI4QjNEOEY5Q0Y3QTM0ODUzNzE1QTA5Ci06MTBEMTQwMDA1QzhEOERBNkFEMDk4NDhDRUQzOURFMzc0REU0RTk5RDBCCi06MTBEMTUwMDBCOTA4NTA0MjkyMjBBRDI1MDA0Rjg5RjdCOTM0QkVEQUE0Ci06MTBEMTYwMDA0QTZDNjEzOEFCREYxNzNCMTk3Q0EzMDQxMkIxREYxNkEwCi06MTBEMTcwMDA4MDZCNTQzODJGMTFBMjc0MDAzRTA2MTY0NUFDQUZBNjQyCi06MTBEMTgwMDAxNDAzODQ4QzI2QTRBREM5QkZFRjYzNzNGOEJCQUQ4NEQwCi06MTBEMTkwMDBCNkI3RjVBQzVGMjk4QjM4RUYyOUIyOENFRDZDOTI5RjU2Ci06MTBEMUEwMDAzODY5M0RCQjlCQjZEN0MwQzVBNjlDRERGOEY0QTcyODVGCi06MTBEMUIwMDA5MUFFRDdDMUU5ODYzQzIxNDg4MDU3MkJDRkM3MEEzNUFECi06MTBEMUMwMDA1M0U0MjRDMDk3ODcyMjlCRDYyQjU2NDg0RDAxMUI0RjEyCi06MTBEMUQwMDA1MURCMDk5MDRBRTQyMzU3MTg1RkYwRTNBNEU1MENBNDVGCi06MTBEMUUwMDA5MEQyNzJBQkJFNUM0RTQ2Nzg2MUJGNTJCOEJERjJBMzFFCi06MTBEMUYwMDBEMEZCQkM3RkE5MTRGMEY4NTFFRTY5Q0EyREVFNUFFMEJECi06MTBEMjAwMDAyN0UzRjc3Rjk3NEQyQTFDQkIxMzI5REM0NEJFREUwOEI5Ci06MTBEMjEwMDA3MEZDNzcyRDFDNDUxQjgzNjM4QjkwQjkzNTQ4RjlDRDg1Ci06MTBEMjIwMDBBQzM4REMxNDIzQTQzNDUxRUUwMEJFNkM1MTZDQzg5N0FBCi06MTBEMjMwMDAyRDg5MUQ4MTMyOUEzRjU5NjQ3MjQzNTdGNkRDMzJFNERFCi06MTBEMjQwMDBDNzk2RkVCQjBGQ0QwNEI4NEVEQTczNzgyMzQyNEQwOTYyCi06MTBEMjUwMDA1NEE4RjBBNUU1NzY1NzY1QTA0MkM1MDcwOUUzMkI4NkRCCi06MTBEMjYwMDBGRkJFN0NEOEU2RTAyMjlBRjZCQjdDMUE3MTUyNTJCMTFFCi06MTBEMjcwMDBBNTU4ODg0OEYxMTI5RDVCNjFBREIxODVGMTYzODE1RjZFCi06MTBEMjgwMDBFOEY3OThDNDA5NDc0NENBRjczMTZFMEQxRUUxRkYxRjQ1Ci06MTBEMjkwMDA1OTFFRTE0MTE3NkYxOUI4RTQxNjAxODgyMjM1NTQ2RjAxCi06MTBEMkEwMDAyRkNDNDc5MjNERTFGOTkxNzM4RjJGMzI5MDAyMjk4RDU3Ci06MTBEMkIwMDBBNjkyM0IxNUU0NjU0RjdBRjczMkJFRTdGNTdBRTcwQkE1Ci06MTBEMkMwMDA1NjZGQkMzODMxRjU0NjBBOTdENjM3QTg3QzA0QkU3MDM1Ci06MTBEMkQwMDAzMUI5NjBCNjMyN0NCNjEyMjVGNTQ2REE1NUVCNDBDOTU1Ci06MTBEMkUwMDBFRDg1N0NFMjc0OTQxRjRCNTJBQjVCNDE3RTdFOTU2ODZBCi06MTBEMkYwMDAyMkEyMDBERjE3NTk0MTdFQzBFRkRBNzE5MzNDMjZFMjhCCi06MTBEMzAwMDBEN0UwMjc2NTZBOEM0RUVFQjdDQUQ1MjhDRjdBOUI2N0RGCi06MTBEMzEwMDA1QThEQkVGRDgwNUE3REZCRjRGOTA5QkFCQ0RBMkUzQTZCCi06MTBEMzIwMDBGNUIyMDMxNUZEQzJGOTY1OTJDNzBBNzI2NDcxRTI2QTJCCi06MTBEMzMwMDBBMTQ2NDNERkYxRjkzNTA3RTVEMUUxQkMzOTc1MTJCNkY1Ci06MTBEMzQwMDA4QjRBMkY4QTM4MkZCRjRCMzkwNEY1RTlGQTk5MUNCNjVFCi06MTBEMzUwMDAyNTQ2OTQzRkY3RjE3REU4N0VCRTBGOUQ2OTlEMEZGMjUzCi06MTBEMzYwMDBGQTdGRTRGNTFGNkU3MjYyMUFDMjY3Q0U2QzFENUU5NjdDCi06MTBEMzcwMDAyNjUxNzk0REZCREIwQzU1MzRFMzNGMjNENzFDMDdGRUM4Ci06MTBEMzgwMDAwQkUzRDkxNDg2MEYzMDZEQzExQzEzRjBBQkRBNEY0QjkxCi06MTBEMzkwMDBEMjc0QzQ5QkJBOUVERUU2RDdDQUU1QkY1QUNGMkE3OUJCCi06MTBEM0EwMDA4OUJCMDBGOTFFRTU3MDA4RUVCMjFFNUYwNTk5NUM2RTQwCi06MTBEM0IwMDA2QzlDQUQxQjc3NjdGQzg0QTk5OTk0RUU5NjFDMTQ0OTZDCi06MTBEM0MwMDAxNENBMTFGREZBN0FEMkFCN0UxRDRCMTJEOUZBN0JBNzkzCi06MTBEM0QwMDA2RkMzQkFBOTQ0MDhDRDBCRjMwOTg2N0M3RjQzRkQyQ0FCCi06MTBEM0UwMDA0M0Y5MTA0M0Y5NDg0M0ZFN0M0M0ZEMzI0M0ZFNTI0MzY4Ci06MTBEM0YwMDBGRDZBNDNGRTFBNDNGREU5ODZGMjM5ODZGMjA1ODZGQzkyCi06MTBENDAwMDBCRkU5RUIxNzMxM0NERkFFN0UzQjhEN0MwMUJDMUFFQkY0Ci06MTBENDEwMDA0QjkyODJGODk1MENGODM1M0JGNUY4MkQ0RDJGM0QzRjlBCi06MTBENDIwMDAxM0Y3ODU1QTFEN0U1NUZBRUMyQjdFOTY1MjE5MTcwMDdDCi06MTBENDMwMDA3RTkyNkE5ODdFNTIzQzg3NjhFOTYxNDk2MjE2RUUxRkM3Ci06MTBENDQwMDA2MjI5NzFCMzU2NEM0RTU5NzhCOTk4QzZDNkEzRkE5QTU4Ci06MTBENDUwMDA4RThFQkFEMjY3QTFGRTQ4MUU0QzYwNzJGMzBDNzQyMTA2Ci06MTBENDYwMDA5MDA0N0RCOUQyM0Y1QzlFMDVGRjlFNUJCQTM4MzMxREE4Ci06MTBENDcwMDBGQkY4QkU3QkZBNzlBQjcyNzdDQjIwQ0ZCQzRDOTAxNzEwCi06MTBENDgwMDAzRUFBNEYwRjBCQzM0OTBFRTlEMzc0MzBDQTc3RUIxMzkyCi06MTBENDkwMDA4OTJGOEFFRTc3RUJCRDI2Q0M3Rjk1NEEwNzAyN0RBNUMyCi06MTBENEEwMDA2MkI2NEVGRjI2MjQyODQwM0Y0NjM5QjAwQUU0MTQ0REE4Ci06MTBENEIwMDBFRjAxMzk0NUQzQkI5QjUyMzE1REJBQzI5NDM2MTNGQUEyCi06MTBENEMwMDA5QjY4NDFGREI4REZGMDI1NUUwOUQyQjJFMjdDRDhCRjhGCi06MTBENEQwMDBFRjFFQjY0NTMxRDFCQ0ZEOTQ0OEZDQTNBOEJFNTA3OEUwCi06MTBENEUwMDA0RDMxMkMyNzc2RkNGNEQ0OUQzMERDNzc3NDlDMzFDMDEwCi06MTBENEYwMDA5RDA0OTU4Qzc1MTVDNDY3MUU0RUM4OEExRDY5OTdCQTIwCi06MTBENTAwMDA2OEJGNzI4RUU0OEU4NkIyMDJGNzQyMjkxMUVCNzlDMUIwCi06MTBENTEwMDA2QzkwQTVFRTNERDkzNDNGMjhDNzg0RkE4NUI5QjhCQkQ1Ci06MTBENTIwMDAwOUY0Nzc3NURFMkIyRUE1ODQ0QjJCNjY1NkJBNEQ1RTFCCi06MTBENTMwMDAwQTgyM0IwN0Q1REMwQjcwMUFENDQ2NEMwQUNEQ0I1RTcxCi06MTBENTQwMDA1OTAwQjlGNjY2QTY4Q0YwREVGMDIyNjVDODZDMThBODAyCi06MTBENTUwMDAzQjBERjZEOUFGNTc1ODE2QzEzQzdCQzcxMzExNERDNUNCCi06MTBENTYwMDAzRjNENTVGQjQxM0RCMzNGN0U1NzQwMkVDQjEyOTIxMEJECi06MTBENTcwMDA1REU1N0ZCNTJCMzQ2RjEzNTlGRTk1Q0MyMzlFNDU5QUZDCi06MTBENTgwMDBGQ0UzOTk0NzlDOTA2RjFCOTU2MTgyNzU2NDI2M0ExNDYxCi06MTBENTkwMDA1RjA0QkFEQTBGRjI5OEFFN0JDMzhBNTk4M0I0RkJBMDVBCi06MTBENUEwMDAzMTk1MjdEMjdFNTM2ODVBQzA1M0EwQjVGMzAwRkUzQzk0Ci06MTBENUIwMDA5NUY5Rjc1NDk2N0YwREUwNDZGQjk1MUI3OTc5MjI0QjQwCi06MTBENUMwMDBDRkY1MzhDNkZFMEY2NDNBNTVCREI0M0ZCNzFGMEI2QzlDCi06MTBENUQwMDBDOUE3RDU0RkY3ODNCQzMyRUFBNzU0RDBGNTA3M0E1RjA1Ci06MTBENUUwMDA0QkVENDkxM0VEN0JFRDBBMEJGMTUyOUU1QTlCNEVEMDQ5Ci06MTBENUYwMDA0RUY0MkVCM0Y4MzYwMTdGNDg3MkZGMkIzNTdBOTc2RkMxCi06MTBENjAwMDA1OUYyMzU4MDE3OUY0MEE2NkFFNUU0RkQxQ0NFMkJCMzg2Ci06MTBENjEwMDAwNEFFNjcxREYzOEE5NDdFRDdEMjZEMTNDNEVENUFFMjJGCi06MTBENjIwMDA4QzA2N0QyNDg0NkZFRjA5OEZBMkMxRjc4NTU5QTVBQkM1Ci06MTBENjMwMDBCQzMwQUY5OTZDREZDQzBBQzlCM0JDODUxMkVENjcxRDU1Ci06MTBENjQwMDBGNDQzRjNFQjVBNEQzOEJGQjVEQjI4RkZEMkExQkVCQTg1Ci06MTBENjUwMDBFQjIzMTNFOENEQzM4OERGMDRFQjFCNEE3Qzk4QkFDOEUwCi06MTBENjYwMDA3QzEzMDBBNTgzRUIxOTFCMzlGRkU2NTFGRTQ2N0IwN0FGCi06MTBENjcwMDA0NDFGMkRGNzBDQUFGOTFBRjgyMjhFQzg5ODk3QkQ0RUIwCi06MTBENjgwMDBBNEE3RkE2REYxNjU5MUY0MDM5MjY1RTI3NjI2QTk5NTU3Ci06MTBENjkwMDBDNjcwM0I4N0MxOTk2NDhERUUwOTdGMzM5OThGNzBCRjQ3Ci06MTBENkEwMDBEREU1MzE0MUI5NkRFQjNFRkYwMDVBRjREQ0RCN0FCQUJGCi06MTBENkIwMDAwNUE4NTQ2QkU0NEUwQTFGMjdDRUVENTE0NERBQ0ZCNkNECi06MTBENkMwMDA4QzlBNTg2ODVGNUZGQkM1RUU2NEU4REFFQkM1RjZBMzk5Ci06MTBENkQwMDBCMjlDNThFRjFBN0ZDNzc4RTg2NkI4M0I1ODA2QjQzMDVBCi06MTBENkUwMDBBQ0IyNkIwNzkwQ0M1MDY1MUQ5ODE5QzQ1NTdDQ0I4RTlECi06MTBENkYwMDA3RTMyQ0NBMzI2MzE4QkQ2Q0YwQjA0NEI4MTdDNkNCNTBDCi06MTBENzAwMDBGQkZDQzkzODlGMEI0RDQwMTdEOTMwMUY0RTFGNTU0OEExCi06MTBENzEwMDA1RjMyRDI4OThBNkZBMDg3MkE5QUJGQTY4RUMxODc1QUE0Ci06MTBENzIwMDA4MzU4NEUyNEE3NkVGRUVCMTc1MzNBQjFGNUE0MTM3QjMyCi06MTBENzMwMDAxNkQzOEY4NjY0ODVFQzJCNjIzRUJEN0QzNTI0MkI4MjBCCi06MTBENzQwMDA3REE1QzJBNUJBRDM2RDA2Nzc4MUU3MDlFNzYyQjA4MUVFCi06MTBENzUwMDAyNkY5QkE3NzQ2RDNFRjhCMzI2QTQ2NDBCQkEyMDczRDIzCi06MTBENzYwMDBDRDQwN0ZCNjZEMDEyRkQ0NTNFMTY0MkIwOTI4MDJENjNBCi06MTBENzcwMDA1MzhBMDBBRTZCRUYyQTJCQzM3REExOURBMEJERDQ5QjI1Ci06MTBENzgwMDA5RTZCMkUzMUU5RkQzOEE0MURENzkxREJBRUQ3RDMyOThFCi06MTBENzkwMDAxREUzN0VERTgzOEVFRjBBRDE3MThDRDYyRkExRUUzRjgyCi06MTBEN0EwMDBCRTM2NTM4QzBCRUMwQzZBN0Y2MDVGQkRDODkxQ0Q3QzlDCi06MTBEN0IwMDA1RjUyRTk1QUZEOUU0MzIyRkIxOUE2ODZFMTlEMkE5RUVGCi06MTBEN0MwMDAxRURFNTMyM0MxREIwMUZDOTE4REZDMzIwRENBOURBNEVBCi06MTBEN0QwMDAxQkNCMDdEREE1RTc5N0ZBQUQ1RkVDMUU0MEU3NkYyQjhCCi06MTBEN0UwMDA5MjQ3MDI3RUQ0RjE2NzcxN0FBNjc0M0MxM0U5RjhDMUJFCi06MTBEN0YwMDBFRUREQjBBRjBEQkE4QkQxRjEzQ0QwMzU5MkMyRjQ3OEVBCi06MTBEODAwMDBCQjRCQjkxOUM2NTFFOUNDQjg5RTlCNzg3RjhCMzIzQzkzCi06MTBEODEwMDBGM0IwREU4MzFEQkJBMkIxOURBNzAxRjJCNjA3MDNGRUU0Ci06MTBEODIwMDA2ODEyODZFRjIwMEVERkE4REY4N0YwRUMwNEY5NTEzRDg3Ci06MTBEODMwMDBEMUJEMEJGNjY3OEZDQjM5MUVEMjQ5NzI3NzBCQTgxNjc0Ci06MTBEODQwMDBEN0Q2OEEzQUJEQ0Y4ODVGNEE1RkJGODc3NTE0MTE0RjFDCi06MTBEODUwMDBCOTIwODAzNkRCNjFDNkZEQjMxN0JBMDlFRjlCNUU1NTcwCi06MTBEODYwMDA3RURDNzUwNkI5QkQyQzEyMUVGQURBRkY4OTBDNEYzQjFGCi06MTBEODcwMDBCNDRGQThGNDkwRDNEOTZEM0RFNkQ1Qzc3QUFBREYyQzcyCi06MTBEODgwMDBBQ0M3RkE3NDdBQUM0QUY3Q0I1QkFCRDFERTUyRjFBMEVECi06MTBEODkwMDA3RTVGREM1QTVEOTkwOTc0NkU5M0RDOTFFQzlGRDA3RUJCCi06MTBEOEEwMDBDM0U5RkM1MTRFRTdBQkI5RkVENUNFRjVBRjk1NEQzMjhECi06MTBEOEIwMDBDQUY3QjYyNjE3QTZDQjlCRENEQzFGNUE4Q0U5RTIyNkZBCi06MTBEOEMwMDAwNUVCODlDQjRFOTRBMkZEN0UxNzQxQkZENkEyRDg0MjZDCi06MTBEOEQwMDAyMTEyNUQ2NTdBRjVGQUZFQTA0NjNEREVGQjU1RUFFREM0Ci06MTBEOEUwMDBFRjc4QURCRTRDRkY4RjJCQ0VEMjk1REJERDQzNzRFNUQ4Ci06MTBEOEYwMDBCMUFFOTFCQTdDQjQ3Q0JFQUVGRTk2NDEzNUFGMDE1RDRGCi06MTBEOTAwMDA1OTEyQ0I3NEY1NDhGMDBCOUQ3RUFCQzI3MUJDMzgwRDNCCi06MTBEOTEwMDBGNTdEMEE0RjY2MEY3MDdENTYyRDI3QTQ4NjY4RUQxNDlECi06MTBEOTIwMDA3NTlENkQwNjNENzYzOUMwMTFFMUNCRTBEODBFNzA0NDhGCi06MTBEOTMwMDBGODE2NzM3ODU2MzJCQjg5REIzRDMxQUFERDkzQkY3QTg2Ci06MTBEOTQwMDBFQUY0NDRENEE3NTE1RTJENENCN0UwRkVCQzNDOTNFOTA5Ci06MTBEOTUwMDBEQjNERTgyNzU1MjMzRjI5Q0YyRjVEQzZGNjczNTUxRkMyCi06MTBEOTYwMDBERjk1RkU1NjI1RThCNUVCNTM0RDI4MjdENzI3RUU3MEY3Ci06MTBEOTcwMDA2REMwN0M4QzlCRURBN0RFNzYxN0M1OUZEOUM1RkRENTA0Ci06MTBEOTgwMDA5NDYyRDNFODdBRUQ5QzZGOTY5QTA5RkFCRjk3MjdEOUVCCi06MTBEOTkwMDBEQ0UwMDdCM0JCNjY0REM0N0E4NjcxMDlCOTg1NjhFREQyCi06MTBEOUEwMDAzRkYyNzFBRDRFRUYyMEQyNkNERDNBNDNGMzJGQjJCMEFGCi06MTBEOUIwMDA3RTA0MjI0MDNGMDkwNTE2MURGRUFDNDQ5M0NGODRGOTM2Ci06MTBEOUMwMDA1QUMyNzhDQzg0RjU3MjNDMTlGNDFDQTM5RjQyMURDRjM3Ci06MTBEOUQwMDAzOTUxQkZERjJDQ0Q2N0VEQkJEMjM3MjNERThERjA3NTFCCi06MTBEOUUwMDA1NEU4RTk3NzM5QTc4Qjk2QTRGNUM4ODdDNkZBQzZGRTJFCi06MTBEOUYwMDA0OTQ5OENDRUZFNUJFRTNBQkQ5RjQ0QjVBN0Q1N0E2MDBGCi06MTBEQTAwMDA0NzNCMjNENDM3REFEMUU3QzI1RTc3RTI3OEZBRkQyRUJFCi06MTBEQTEwMDA4MkJERUVDRUQ2Rjg5MzU0Nzg4N0YwQTBGQTE3QjkxREUwCi06MTBEQTIwMDBBNkZBQURENUZFMjRDMkZBQzMzQ0ZBQjdCRDI4RkYxRTQ0Ci06MTBEQTMwMDA4ODc1QTAxRDk5NjNCM0Y4NDAxNkU2RDA3OTAwMURCNzJDCi06MTBEQTQwMDBGQzIxRDZCNzg4RTY1N0M1NEVFQThFQTNGOTlDOERBMjc1Ci06MTBEQTUwMDA4Q0U1MzYwRjlFREI3NEFEOTlEMDNGNDhDNzdENDhBODUyCi06MTBEQTYwMDAxOTlGQURGMUMzNkQ4Q0ZGNkQyQUQzMDdBNDhGODIyRTUxCi06MTBEQTcwMDA2MDcyMDFFRDVDRUZBQTUxMDEwNUY0RjE3Q0UyREU0NDM1Ci06MTBEQTgwMDBDMDBBNjZFNTJBM0QxMTZENUVFQzk5RkYzQzlCRURGQkZCCi06MTBEQTkwMDBBOUQ3OTJGOTFEMTFGMERGOUNDREY2RDFCMDFDRjdDNEM3Ci06MTBEQUEwMDBBMEJDRTY3MjNDODdDMzZCNTM3Qjc1OEM1NjhFNkJCRUY1Ci06MTBEQUIwMDBDNzQ1QTJBQjczMjVCRjVCNDA3RTBGODY3MUY2MkJCOEJFCi06MTBEQUMwMDA2RjE3MTEyRUJGOUYyMkJGNDZGOTNEMjdCMzY2MjFEMEE1Ci06MTBEQUQwMDA5QkQ5NzhERTI3MDU1MTdFMEY5Mzk1NDU1MDFFMDdGNjlBCi06MTBEQUUwMDAxRUUwRTUwNjhBOTcwOEVCNzg4MUUzRURENzhBMTc3NTgzCi06MTBEQUYwMDA1RkRERDRGRTJDQzM0QjgxOEE5Nzk1MjQ5MkZERkIyQkNFCi06MTBEQjAwMDBDMDRCMjdDMEJEQzdCRTRBODI3ODBFREIzRDUwNzkwRUEwCi06MTBEQjEwMDBGOEYxMTk1OTc5MUVEMjEwN0VBRThBQ0MzNzlGRkVDMjE5Ci06MTBEQjIwMDBGODc5OTREQkFEQUIzOTdFREFCOTdGN0MyNUM3NEYxQjIyCi06MTBEQjMwMDBERkFGOTc3M0ZDQjRGMkZEN0EwOUUwMjdFQUVDRjk2NkVGCi06MTBEQjQwMDA1MEEzMUUzRkZEMkE2MzBDRjhEMEUzMjdBRTU4OEYxRjY5Ci06MTBEQjUwMDBCQjVCOEY5RjU4RDcxMDAzM0VGNEY4ODlDQjkxOTkxRTc5Ci06MTBEQjYwMDA5OUFBQzc1MzBGQkUzOTgzQkRFMjgwN0UyMkY4MzcwNkRCCi06MTBEQjcwMDBENjA0NEFFMThDQUJGRkQ0OEUyRTMzNzRFMjY5MkY4NTM0Ci06MTBEQjgwMDA1NDVERUZDMzA2QkI1NDRERTM3Mjk4M0M0QzJEOEY4QzEzCi06MTBEQjkwMDBGN0VGMzhERUZGOThBNUZDQjc4RThGMkY4RUNDQzdBNjg3Ci06MTBEQkEwMDAxQzU2RkYxMzU5MTE3MkI0NzQ3NTU5RTRGQTU2NUVGRjhFCi06MTBEQkIwMDBFMDIwMjUyQTQ3RDMzRkZEQjk0RjNDOERCRDYwNUM3RkY3Ci06MTBEQkMwMDBBQ0EwQzRFNUUwM0FFNEFENDE4QUZCOEQwQkQ5MzlFNDYxCi06MTBEQkQwMDBDNjY4QjkwM0NFRjNCRDBCNkRFRTREMzJGNkU0QjE4MkVCCi06MTBEQkUwMDA3REM0RkIyMURFMzhFQzM3ODMwRjMzQzhCNkU3NUIzOEUyCi06MTBEQkYwMDBGN0NCOUMzMUIwRkZDREI0M0M3MzQxRUFEMTFBOUFFNjIxCi06MTBEQzAwMDBFNDY0MjM5Q0IyNkFERDNCMDBDRUEyNjM2QTdGNzY3RTI5Ci06MTBEQzEwMDAzQ0NERjlDOTUwNEE2QUZFN0VDMjhGNjA3MDNCMTNGQTUwCi06MTBEQzIwMDA3NDJFNDdFNTIwRUE4MTc0MjJCRTREOTQ0RUEzMjQyMjJGCi06MTBEQzMwMDBEOTEzNjBCRDBBQUVDQjBDN0FBQzA4RUI2REM3N0MwQzc3Ci06MTBEQzQwMDBFOUMwRDQ0NjAyRUNGQzlBREJBM0EzNzMzMjExNUU0RTBBCi06MTBEQzUwMDBFMjQ0N0IzNTgxQjgzMTU1RjlEODlBNDhBNEE0OTFEOENCCi06MTBEQzYwMDA3RjRCRDQ0ODgyMUJGRTA1NjBBRkRBMDZBRTVCMEUzNkYyCi06MTBEQzcwMDA4RDQyQTEzMDA2NTkwNUUxMjFEQ0I3MUJENzRGNUM0NDJBCi06MTBEQzgwMDA2NkZFQjZCQjlDMTg5RkYwMUE1RERGRDBCRUFGQUZBRjhCCi06MTBEQzkwMDBGNUJFODk3NjE0OTIzODQyMUFBRDJDQkQyM0M2QjExRTRBCi06MTBEQ0EwMDBEMjZGQTIzMzdDRTBCNDNBM0ZCQkU2Mzc4MDU3NkYxOTlFCi06MTBEQ0IwMDA0MUZEQzNGQjQxQUNBRjE5MjczQkZGM0M2NjFGRjRCOUU0Ci06MTBEQ0MwMDA5RjJCQ0Y1MTNGMzc5Q0EzN0U2QTgxM0ZDRUQ0Q0ZEREJGCi06MTBEQ0QwMDBGMEVCNTgzOEM3RjRENEMxQjgyREYxNjM1MEVGNTQ1MzZBCi06MTBEQ0UwMDAyMzVDRkQyRTY1M0VGNDJCNTkwRjY0N0NEQzJGQUNCNzEyCi06MTBEQ0YwMDBEOURFMTM1MDZGNkIxMUZDMDRGQzk0REUwRjA1RDRBRjFBCi06MTBERDAwMDA0ODAxQzM5MzREMjZBRUNDRTFFMTdFNkNFRUY5ODM5OEQ5Ci06MTBERDEwMDBCRjhCRjk3QjE2QkU3RkM3NjBEMEJGMUY4ODlEMTQ4QzU4Ci06MTBERDIwMDBBM0VEMzdFQ0EzN0ExRUM0RDE5NEJCREZBREE1RjQ5NDY4Ci06MTBERDMwMDBENENGRTI1RTRGRTlBNzFGQjc5M0EzNTY4Q0Q5NUI0QkI0Ci06MTBERDQwMDA3RkZENkMzMDkzMkY1QjlBRjYzODVCQTg0MEIyNEJFRUE4Ci06MTBERDUwMDA0QjQ2RDI3NjM2N0U3RTRCQzQ4OTQxRDAxQkVENjMyNDgwCi06MTBERDYwMDAxOUNFMzhGMjQ1N0YyNUNDOTczNDk4MDhGMEM1NDM3NTE1Ci06MTBERDcwMDBGQUYzREMyNTc5RjlEODlGOUExRkMwQ0Y3MzQ5OTFENDYzCi06MTBERDgwMDAxRDhBQjNBMTdBRkNFQTFDMUU1N0UzMjAwRUQwMEJBNTE2Ci06MTBERDkwMDAxRjk0Qjg0ODcxMEY2QUFBQ0VBRjI4OTFFRTVCNzFFMDZDCi06MTBEREEwMDAxN0E0OUM0MkQzQTIzNjNGMDY3Rjk0QjlGRDU2RDA2Mzk4Ci06MTBEREIwMDBEN0Y4ODhENzQyRTFGNEQ4NzRDRjZDRThBRkFERDgxMzY4Ci06MTBEREMwMDAwQjdBRjk5QTgzRDU5NzBEQTNGMzBFMDQyNTM3ODBFMERCCi06MTBEREQwMDBBNUMxMDkzOENGODAyMkFFODhBNURGQjdCRTY3NzJDMjYxCi06MTBEREUwMDBGQTM2RjBGNjZEMUUwMUY5RkZBMTY5QzRFN0E1RjBEODc3Ci06MTBEREYwMDA1MEI3QzMyQTgyREUxQjMwOTE1Q0Q0NzNBOUMxMzU4NjJCCi06MTBERTAwMDBCQjRFNjRGMEQ3MzJCRUJGNjM3MDEyN0VFQzBDMkM4ODIwCi06MTBERTEwMDAwN0I4QUM4QUJEMzBBMEQwRkVBQjJBOTlERjc5ODIzODMyCi06MTBERTIwMDA3MDE3RjQxQjY4QjMyMDdFOTI3OEZDOTE0MEFBNTA3RjUzCi06MTBERTMwMDA0RTk4QTZEMTk3RTlGRjc2MUUwNzE1Qjg4RDYwREM1MzgyCi06MTBERTQwMDBEQzY4MUJDNjAxM0MxNzY0RTc0NjBGNTUzMkJGQjM4MzNECi06MTBERTUwMDBGODcxRkMwOUUyQjY2ODEzRkRERTU5MjkzOTgxOUVFMkFBCi06MTBERTYwMDAwQ0ZBQjkwREZBQTMyNEQ3RjkyMEVCQ0YzMTgyRjU2NzZDCi06MTBERTcwMDAzN0M0NDE1OUQ1NzkzOUU5QkMyOEZFNDRCQjg0Nzg3NjRBCi06MTBERTgwMDA1NkVBRTNBNzFDODY3NjM2QzM3ODdCMDFDRjIwOTcwNjM3Ci06MTBERTkwMDA5MjNDQzBGMzQ5Q0Y2RjQ3MURDMDUyQjcxQzI5N0VBMkU4Ci06MTBERUEwMDBBRDg5MDQyQTM0RjExNkI2NUVGQzg3NUZFNDMxQkFCNTU5Ci06MTBERUIwMDBBNEVEQjRDMkJDNEU3QURFNEEwNDc3RDcxQkRGRUZGRTc2Ci06MTBERUMwMDBGODFFNDg3RkY4OEZDRTA2QkFBRUZGRkNGNkQwQzZBNzg0Ci06MTBERUQwMDAwMThFOEQ3N0VGNDczQUU0NzY1NTBBNEM4MUNFNjc1NzJECi06MTBERUUwMDA5NTA1RTEzODVBNjFGRTAxNTJENEI1RDM1Qzg0RTU3OERBCi06MTBERUYwMDBBRUI1NjI0NzM0OTYwRjI4MjZCRTY4MEFDRjAxOTI5MkNCCi06MTBERjAwMDA3NjEzRjA2QjQwNzQyRjk0QTExM0M1OTYzNjg2QjBBMzk4Ci06MTBERjEwMDAyQTlBNUY3MTNEMjUxQzJBMUY5MkE2MjkyMjlDMUY4Q0RDCi06MTBERjIwMDAxN0RGMjA3NjhBRUYzNThBMjBCM0Y4Mzc2MTE3RjA1MzcwCi06MTBERjMwMDA3QTg1ODA3NjU4RkE0MTRGMzREMEMzQzlDOTI2OEM3RjgwCi06MTBERjQwMDA1OTU4NzVFNTI1QjlCNEZGNDc0QTI1RjQzNzU0NTY5NDE2Ci06MTBERjUwMDA1RTBERTUwMzBFMzI3QTcxRENDNkYwNDdFMUU0QUZBMDU2Ci06MTBERjYwMDBGQzkwN0Q5MEY5MTM4QTQ4RDBFREE3RTUwM0RDQzQ5Q0IyCi06MTBERjcwMDAwOEZCQzczNDBBNjA5ODVGMUJDNzBGRjcwRjE0MTUwNTFECi06MTBERjgwMDBCQzAwNTRCQjVCOEY0N0E3MDE4RjQ2QkM1QTczMzkxRTM4Ci06MTBERjkwMDBGMzQ5M0VCM0VCOThGRTU4QzVFQkFDQTkxODg1RjZFQkY4Ci06MTBERkEwMDA0MzMyRjE5QTg3RjdDNEQ3N0VBQTNGMkE1NEZGMEI1MDE5Ci06MTBERkIwMDBGRDExRDJCRjUzRkQxMUQyNEVBQTNGNDI2QTU3NEEyRkRDCi06MTBERkMwMDAyQkEyRjMwRDI0RDE3RTgxRkYyNjhFNUUwNEU3MDM4RjAyCi06MTBERkQwMDA4Q0JCRjlDRTdGRDE3NDM0M0Y2N0EzOTQ5RjUwNDZFMTQ4Ci06MTBERkUwMDA1QTBENUNDQ0YyQUIxNUJBNjcxRTI4MTI3NUY5MTU4OTZCCi06MTBERkYwMDA5MjdBOEVFNzg1M0RENTlFNjZFMkU3M0NFNUY3NDI3OTY5Ci06MTBFMDAwMDA1QkFBQzRDRkY1NTgzRUJCODBFOEYyOUQxMzREQkFGQzI1Ci06MTBFMDEwMDAwNTNCMzRGRDBGMDRGQzQ0NjFCRTIwRjdCOUQ1NUU0RENECi06MTBFMDIwMDBGOUIyM0M5QUE3RTU3QkI5M0U1NzM1Q0ZFNDU5MUY4MTM5Ci06MTBFMDMwMDA3RUU3RTQzMkJENEFGQTgxNzgwNThBQUYyRjczMDhEQUE5Ci06MTBFMDQwMDBFOUEyNDk0MUY5NERGMjI0Nzk1Mzg0RjgzNDQyQTgxQ0RECi06MTBFMDUwMDBENERBRDczOTU0QUU2QUZDMjNGQkYzQjg1RkRENTNDQTc4Ci06MTBFMDYwMDBGQzZDMjRGQ0YzREQxODFFNjc0NUUwN0I1QjAwRjQ4ODQ0Ci06MTBFMDcwMDAyNTZGNUZFRkY2OTNERUU1QUUzOTU1M0FBQUE1OTM0QkNGCi06MTBFMDgwMDA1NDNBQzgyNUI5MzBGRTk3QTQ2NDZGMjlEMDU5RkIyOEFCCi06MTBFMDkwMDAwOUU4QTE4OEYzMDFFMTdBMUNBQThBOTQ3RTVFMzg3MUFFCi06MTBFMEEwMDBGRkVCOEEwQzc2NUFBQkIzMjUxN0UzN0VBRUM4RDVGOEUyCi06MTBFMEIwMDAxQjE2MjdDRDFBMDVGQjk5MUFGNzQzNDg4NUYzMTNCQUE3Ci06MTBFMEMwMDAyRUMxN0JBNTA5RjRCNkRFRjUxNDg5N0NBMjgxNDc1N0UxCi06MTBFMEQwMDBENTg0MzhEODA3NkM1QzhFMUJFQjJGNkVEQUZBMTY4QzYxCi06MTBFMEUwMDBCRkI0QTkwMzUzNUJBMjA3ODU4QzU1RjJBMkZGQzZFRjBDCi06MTBFMEYwMDBBQUE5ODU3OTU5MDdEMjcyOEQxQ0I2MjREMjc2M0EzQkVCCi06MTBFMTAwMDA2MDIwRDNCQjU0M0MzODg5NDkxQkE3QkFBNjZENjQ0QzI4Ci06MTBFMTEwMDAxNDA1NDYxQkREMkY0MDNFQUYwOTU0NDdDMzM4NkRFRTUyCi06MTBFMTIwMDA5MUE3RjU1RjlEODk0RjM2NTQxQzIwODkxNDhFQ0ZCRjZGCi06MTBFMTMwMDAzREU5RjVDOTM0REQwN0ZDNDZGN0MxRTczOERGQTQxNzMwCi06MTBFMTQwMDAzRkYzQ0VBRDNBN0UzOTlDNTA2NkQzRjJDQkUxRDU0QTRGCi06MTBFMTUwMDA4RTk2NUY1OEJFNzc3RTI5QjkxN0NBM0I1MzI1NUQzRTIwCi06MTBFMTYwMDAxREY4NDU5M0RGMTBFMjE3OTYwRkYzMEJFREJGODRDQTNECi06MTBFMTcwMDA4NTM3MkQ5ODVGOUQ3Qjc4QjU1NzUzN0U2N0RFNjEzRDZGCi06MTBFMTgwMDBCRjhDMTczREVCMjNFODAxODE1QzI2RUZDRjM1QkZEQzY4Ci06MTBFMTkwMDBDN0Y3OTEzRUYzQ0IzRkNFOEU1RjlFQ0VFNTdBQ0VDRkQyCi06MTBFMUEwMDBFNzk3MTc3MzkzN0UzOTdFRjFGNDkxNUYzQzNERjlFNTczCi06MTBFMUIwMDBFRjNGODU1RkRBOUM3RThDMDc2QzlCNkNBQUY0NDVDMEIwCi06MTBFMUMwMDA3NzAzOTc4RkFBREY3QjM0Rjc1Mzk0NEY1M0FFMUUwNjI1Ci06MTBFMUQwMDBGQTJDOEY1QjUzRTM2OURBQTZCMUZEN0I2MUQ1MDREQ0QxCi06MTBFMUUwMDAyRjM3RUM2M0ZCQTVCQTNGRjNBMzVEQ0E0RkNDOEYzMTQ5Ci06MTBFMUYwMDAzQUMwRjZDREE0NjIwMURCNEY1MjA0OUY0QzdGNkRBMzYxCi06MTBFMjAwMDAyQTQxM0ZEOEFGNEIwNEQyMkVDMzUyRTc1N0U1MEE2MUVCCi06MTBFMjEwMDBCRDg5OEU4NzdBRDMyMzZFMTYzNzRCMEUzMjdEQzc0QTVGCi06MTBFMjIwMDBGRjAzN0FCQUJDRDhBQ0RCNTc1MzhDRkE5NzIxQUY5RTY4Ci06MTBFMjMwMDA2M0FBRTc5NzhGNDA1QzAyODVDN0Q3MkFERDE4RjY1QjkzCi06MTBFMjQwMDAxNTBFNkIwRTk2QTExRUYyRDU0MENCNjlDRkFCREFGODU2Ci06MTBFMjUwMDA3QTQzRkE1NDkxQTczNDkyM0Y2QzdBMUU4QjkzQjhEREJGCi06MTBFMjYwMDBBNTQ4NzlBMzYxM0ZCRTExRjc1RDc1M0YzN0VFQ0I5REExCi06MTBFMjcwMDAxNTA3RjQ3MkM2NUJEODRGMjc2N0JDODVGN0VBRTQwQzM0Ci06MTBFMjgwMDBDRkY3MkE2NzQ4MTE5Njg3RjY2NTlFMEZFRENCM0MxRkE2Ci06MTBFMjkwMDBEQTk3NzkzRTI0NjdBMEZGOTJGMEJFM0M2ODczRTFCRDM3Ci06MTBFMkEwMDA1QTM5MzMwN0YyN0REODk3QUZDQkZCNjVFNENDNUZDRTBDCi06MTBFMkIwMDA1NkNFOUNFNUJFNUM5Mjc3Q0VFNENDODRCQzVGNTBDRTVCCi06MTBFMkMwMDA1NDgxOUM4OTNCQjM5Q0E5MDIzOTUzQTA5MzMzRDdFNjcwCi06MTBFMkQwMDBGRDA0Mzk2M0FGRUJGMkMyRjlGRDM1QkREMEJEQzhGNTIxCi06MTBFMkUwMDBBNUQ5MzlDQTBDRTg5RjRDRUM1QkRDQjY5MUFFQkFBQTUyCi06MTBFMkYwMDAzNjJGNEUwNjdBNzEzMzNCQUZCN0Y2RjZDNkJGQkNENUE0Ci06MTBFMzAwMDBBMjg5OEJCNjRCMDE3NkJGQTJGMTc5RkM3RTZEREQzRTEyCi06MTBFMzEwMDBGNDk3OUQ2OUJFRDNGMzA4QTZDNjdEQjRBQjZBQjcxNTYyCi06MTBFMzIwMDBFOUQ2NkRDMjMzRjE5RjNBOEZCNkM5OEMyRkRGRENGNDhBCi06MTBFMzMwMDAwMkVBQjcwRjgwREYyRkE5QTc5RUFCRTJCNUFGRkE4RjM1Ci06MTBFMzQwMDA3MURDODY1QzE5RDc2MTFDRkY0Qzc0NEJFOUY0MjFBMDg5Ci06MTBFMzUwMDBEMzkzMDM2RjFCMEE3NjlFNjhCRjJGMTZFMEY1MkJEODY4Ci06MTBFMzYwMDAwRjNCN0UwQTlEMDY3MjE5M0VGQkIwRUU5NzdFQzk3NTgzCi06MTBFMzcwMDBGRjBDRkVEQzBCRjMzQURCNzU1Rjk3RDdFNzc1QkZGMzU1Ci06MTBFMzgwMDA0QkFFRkI2N0Q4MEI5RkZGOTQ3NUNGQzkyNTZBREMwRDk4Ci06MTBFMzkwMDBERTk3NzFDMjJGOTQ0RjU2N0Y5RkY3MjFGODJGNTZGRkJCCi06MTBFM0EwMDAzMEU0MTk1ODY3RkJCN0Q2NzVFMEJGMjBERkZEMjgzQTg3Ci06MTBFM0IwMDBCNUY3QTcwOEJCMzc2M0U3RURFQzFFNzYxRkM2NTlBOTcyCi06MTBFM0MwMDBCOTFGNDVDMkY3QTU3MDNERThERjA4OTVFRjhENzQ1RjcyCi06MTBFM0QwMDBFRTk3NEU0MTFGRjlDODdDOUE3MjBCRjNEQjE5QkZCRjUxCi06MTBFM0UwMDA5MzIzQjA3QjZDNDI1NTM0QzRDNTc3NERERTgxRjEwNjcyCi06MTBFM0YwMDA2RDkzNDdFMkI5OTU1MTRGNTFEQjc1MzYyOUU4NEY2QTY1Ci06MTBFNDAwMDA2QkYyNjBCQUIyQTkzMjAwN0U5M0U3MEY3QzIwNDAzQ0U5Ci06MTBFNDEwMDA1OEQxODEzQURDREY1NjhDQjk3NDAwQzZGMThEMkI4QTU1Ci06MTBFNDIwMDA4MUZDNEE4MzlFRTJFMDdBQ0E5MEMxNkZFQkY0OEE4RTQ3Ci06MTBFNDMwMDAzRkQ1QURGNjk2ODRGRDUwRjc4NEY0MTdEQTRFRDZEODYyCi06MTBFNDQwMDA0OTM0MEZFNDEwQjI5MzIwQUZCMzkzRTZBMTVGQTExMzU4Ci06MTBFNDUwMDBGNDE3NUFGRkJDQzFGMzU2NDcxQTY3ODU4OUQ0ODJGRTY4Ci06MTBFNDYwMDBCMkEyQ0U1NDE5NDk3Rjc5MzcyN0IyNUY4MUU2RjFEQzM5Ci06MTBFNDcwMDAyRERBNkVGNTJEQ0EwNDdEODZENDY4RkQ2QTY3RDI1RkY5Ci06MTBFNDgwMDBGRTM0RjgyQ0ZEMEE2NzY5Mjc0RDFFN0M2RUY0OTcxMDQ4Ci06MTBFNDkwMDBERjcyQkQyNTNFNUZCOTFFNUNCMkU3NEE0RTBDRThBM0IxCi06MTBFNEEwMDA5QzE4RDA1MzRFREMzQUY4MjdDODg5Nzc3MzU4N0NCNTRFCi06MTBFNEIwMDA0QTVGMUI2NDM3RkE5M0RCMkEwOUZBMUZEQjAyOEJGQUU3Ci06MTBFNEMwMDAxNUQyRkM3Mzc1MjYyMkQwRkNFRDZGMzJCRkYwOUE2MjM0Ci06MTBFNEQwMDBFMjgzN0JCNDZCMDYxMkNDMDdEQzhDMEUyNjg4QjZERjk5Ci06MTBFNEUwMDA4MDFGQkNCMzgyREE0RjMyRjhFREFFQTgwMkQ4QUU4QUY0Ci06MTBFNEYwMDA5RDc0NzczNEE1OTdBQTYyODk4MEREMzQ0MTJDQzE3MTVGCi06MTBFNTAwMDAwMjBBOEIwRkFEQjI5MURGNDQ4MTVEMzU0RTIyOEJDRTc2Ci06MTBFNTEwMDBDMjZGNkQxNzBCMDRDQTkxOTQzRkU1NzhFMERCREVGQzE3Ci06MTBFNTIwMDBEMTQ2RkYzMzExREY3MEUzM0QyNzgzMUZGQTZDRkRDRjI3Ci06MTBFNTMwMDA2QjA3RkY2Q0ZGMzNGMkRGMTc5QkVCQUEzMTFFRkMwQzVECi06MTBFNTQwMDBGNDc4REQ2MDE5MzNDNjdEQ0FDOEM3MkEzREY1NDY3RjE5Ci06MTBFNTUwMDAzNkQwOTM0NjY5RjJGQzFFRUVCQkZDN0NEOTA2N0FEMjFCCi06MTBFNTYwMDBBODMwNUQ3NDU1OEQ4OThCMTQ3RkE1QTZCMThEMkZCRTAzCi06MTBFNTcwMDBBNUJEOEYxNzJCNzU2MDdGQjE4RERCRjBGQjdEMTAzNzRDCi06MTBFNTgwMDAwMEVCOTNEQzI4NEYxRjJCQTM3MjM4QzJGQ0I2MzdDREFCCi06MTBFNTkwMDAzRjA4RjI3MzVCNTMyM0E2MTc0OURENjIwMkFERkY1MkI5Ci06MTBFNUEwMDA5M0Y3MjBDMDZENkI1MzJCQTZDRjM3QjU2Mzc5NjdEMzM0Ci06MTBFNUIwMDA4Mzk4REVEM0U0QzM3NDQ1RDMxNjRDRUY2RUVBQzBGNEZGCi06MTBFNUMwMDBCMTJDMzY0RTg5RTRDNzdFMkUzQTQ1RkJEN0QwRDFCODYwCi06MTBFNUQwMDA2RTNBOEUwNkRGMTcxQ0Y2RUFDQUM3MDY1Qjc1RTVFN0RBCi06MTBFNUUwMDAxRDZBRDdFNTQ3MDcxRUQ0RDU3Nzk2Rjg3NEU1QjM3MzRGCi06MTBFNUYwMDA2QTNFMDFCRTc0MTQ2REQxN0RCNzE1NzRFOERBRjVENUE1Ci06MTBFNjAwMDAyRTM4RDdGNTMyQUM0RkMxMzEzOTg5ODc3QjE3NzBGRjZGCi06MTBFNjEwMDAwQUVFMEQ1MTNFNEU2OUE0RTI5NUU2MUZCNTczM0Y0N0UxCi06MTBFNjIwMDAwNzNCMjc0RjI1QTExRkE0NEJCQzcyNDVFQjc3RDk1OTU3Ci06MTBFNjMwMDAxQzY0NzMxQTZCREZGQzNCOTY3RjM0OUQ5RDFGQTk3MTkwCi06MTBFNjQwMDA5QUEyMzU0NEQ3NDQ0ODBFOUZFNzNGNkFFN0Y3OTQ3MjkxCi06MTBFNjUwMDA1ODVDNjQ0NjgxMEYzQzEyMjQwMzAyRDRFMDNDQTQ4ODM5Ci06MTBFNjYwMDA5RDkzQTlFN0RFQ0REQ0VGRjBBODk5NkMxNUE4M0VEOTAzCi06MTBFNjcwMDAyQ0IxRjkzNzJCQzRCNzkwRDY2QjJFNjBGOTg3MkE4ODU2Ci06MTBFNjgwMDBDRjA0RjM1N0E4MTQ0RkQ2OUM3MzM3RUVGRTU2MjgwQ0QwCi06MTBFNjkwMDA5Rjk3OTMyMTBBOUVENzg4RkM5QzNENzRFRTFERkQ0RkU5Ci06MTBFNkEwMDA4MkU3RkExQzVFOEI2MjNGQzczOERBRjhDNjZFMDFGODYzCi06MTBFNkIwMDAyQkE1QjFCQjBCRTZGN0U4RUYyRDcyMjQ3QkE4RUJGNzk3Ci06MTBFNkMwMDA1RkE3MDFERkFDRkREREQ3NjlDMEVDNkI0M0YxMzNERDQzCi06MTBFNkQwMDBEMURBRjg5OTBDMEU5N0I1OEQ1OTE4QkZCMEI2RDZBMUZFCi06MTBFNkUwMDBCQjA3QTcyOUM3Nzg4NkFGNkFGOUZCMDQ0NDQyQkI2ODE5Ci06MTBFNkYwMDA4MDMzMEM1NzlGMUEzRjIyNDJEQzFENUQ3Rjc2RjhGRTY3Ci06MTBFNzAwMDBFOUNGOERBRjU5REJCODgwQzVENzBDMjQzQ0JFNjYxMjZCCi06MTBFNzEwMDBEQTkzMkExRUQ2NDIzQUJDRTdCRERFNUYzQUJFRTY4Q0VCCi06MTBFNzIwMDA3MTM1ODYzODA3MURGRDQyREU2QkE0NkYxOUYxMTJDNUU1Ci06MTBFNzMwMDBFOTVCQjg4QkM1NDVBNDE5RTg0NjhEQkI1MEU5NTI4REZECi06MTBFNzQwMDBDRjUwRTMzNUQ0RjgwRDBCOEZFQkEwQzNGMkI4RTZDODc5Ci06MTBFNzUwMDBGNDY1RDk0MTVDNzBFRjREMzRDNUI4RDc2NzlFMzk4RUVBCi06MTBFNzYwMDA2MDgxMkI4QjZGMEVGMzg3QjM3RTU5RkNDMDU3ODM5NTY2Ci06MTBFNzcwMDA1QjVDNDlFMTdFMDdCODk0NUI1REEzQzM3OTM1REQwMDNFCi06MTBFNzgwMDBCRjhFQTU1REI4ODMxNUEwQUZFNjE3MkJDRDcwOUYyRjY4Ci06MTBFNzkwMDBBMTg4RTAzRDlEQTI2MjAxRDNGQzgzMkNCRkQ4MjU2MkY1Ci06MTBFN0EwMDBCQjdGNzczMTdGOTM5QUJGNUM1MTVFODVGNjcxODY3NjI5Ci06MTBFN0IwMDA5Nzg3REE5OUIxREU5MzJFQTZFNzNERTk5MkQ4QkM3OTI2Ci06MTBFN0MwMDAxQ0YyMjQ0RURGNEJDNzhBMkMzRUJBNDI2MDcyMDMwRTA1Ci06MTBFN0QwMDA1NEM3RjBGRDkwQzJFRjcyRTI5QzkyQTNGMUJCNUVDMTAwCi06MTBFN0UwMDBCMUI1QjI4OUM1RjdBOUYxRDA3RjdGNTNDNDc4Njg1QjEyCi06MTBFN0YwMDBCMUE3MUNFRTlFOEQwRTA0RkM3MEJFNUVCNDkxMzgxMzYyCi06MTBFODAwMDA2NDk4NUY1MDAxN0U1Qzk4N0VGRjBFODg4Nzc4RUUxMkQ4Ci06MTBFODEwMDA3NjY2N0JGOTQxQTYyRjVDNTE3QzMzQkUzN0UyRjg0RTE5Ci06MTBFODIwMDA0NDdGQUNCM0M0RUVGNkMxNDAxM0NENkNGRjU3RTNBMUY3Ci06MTBFODMwMDA4QkY1RkE0Mjk1NDE1RkI4RkMwQ0VGN0YyNDkwNkUyRjY4Ci06MTBFODQwMDBFQzkzNUI1QzA2N0YyQzdGMDdBNDM3RjkxRDdFMDc4NDYxCi06MTBFODUwMDBDOTg3MjJERUE3QUREODE5MERGRUVCRkM4MzI2QkNFRURFCi06MTBFODYwMDAyOTZFNTQ0NEJDMUZEQkM2RTIzQzlFMEI3ODRFN0IxRkQ2Ci06MTBFODcwMDA3NTNGODc2MzgwQ0I4OUJGRjMzOEM5NEUyRTI3REVFNTBECi06MTBFODgwMDA3MkUyMTBDODA5OUFCRUM1RTMyNDBGRjIzODQ5RTM3RDRECi06MTBFODkwMDA4OUI2QTZDQTAzNUE3REM3OThEQTA1QkYwN0UzQTA0NjIyCi06MTBFOEEwMDA0ODA0RUZERkY1RjJERTg3REQ0REZCRDFDNTMxMkU0NEE0Ci06MTBFOEIwMDBGQUQ5MTk3RjdGMjlFQUEzMUUxM0VBOTVGNzk1Mjg2OUVCCi06MTBFOEMwMDA5MUVDQkJGQkE2OTQ5RDM2RkU3MDY1RDNENDAzMkRBN0I3Ci06MTBFOEQwMDA5OUE3QzNBMkI3NjdENEY0NUI5NzdBM0ZBRTFERUY1QkVECi06MTBFOEUwMDBBNDI4MjYwMjcxNTU2OTU2MTlFRkZGQURFQzUyQ0ZGN0Y3Ci06MTBFOEYwMDBBREJFNjg1ODVGOUQ4REZDNTMxM0E3RDIzRTJERTA4MUJECi06MTBFOTAwMDBGMjE1NDUxMkRFQ0Y1MUZCOEQyQkE2RjNEMUZBRjkyQjcwCi06MTBFOTEwMDAzRkMyNzhFOTk1RTM4MkE5QTBDRkRDMzdGNjkzQTlCOTg1Ci06MTBFOTIwMDAxMDJGQjI0RjI0NDAwNjNERTZFRDYyRkU3Njc1NUQyOTVDCi06MTBFOTMwMDBEMjdDMjE1MjlDN0E2RkVCRkE5MEI3NTdFM0M1OERGMEU5Ci06MTBFOTQwMDBFRjU1RUY4MDg4ODBEM0RGQjdCMkU0MjdGNThDREZFQjlCCi06MTBFOTUwMDBDMzNDRDE2RUZENzZDQkZDQzk3MEJGQjdBRkVGNUZDNENGCi06MTBFOTYwMDA3MjNBNEM5QjQ5QTI4MTlGQ0U0NDhGMzY3MzM3OUUxQkNGCi06MTBFOTcwMDBERDMzMzNGMkI5NTE3NjNFQzNGNzNEMjVGQkQ5RkIyMjk3Ci06MTBFOTgwMDAwNTkxRTdEMTkzNUVEOTdDNTY0OEI0N0ZEQTZGN0I0OTE1Ci06MTBFOTkwMDBFNEZFQUZDODE3NTRCQTdFMDdFNDU1N0JBNTA5RjUwQTEzCi06MTBFOUEwMDAzQjE1OUYxMDE3NkYxRjQ3RjUyMEYwRTMyOEVDOURBMjQxCi06MTBFOUIwMDAyRjRCRDhGOThDNTE1RUY0MThCRjg0QzI1NzYzNkYxQjdDCi06MTBFOUMwMDBFNTUwNzFCRTRENjcxRjlGMUMzODM5Q0UxRjg5QUU3ODQ4Ci06MTBFOUQwMDBBQUMyNTE5NTQzM0RFMTQ4RjA5Q0E5MURFMDg4NzA4QTg4Ci06MTBFOUUwMDBDQ0Q3NjE3QzJENTQwRkQxNkFDRTcwNUY2RjUyMjRGQTYwCi06MTBFOUYwMDBFOTBEMEY0NjdBNTgzMUQzMTNFNzA3NzhCREZBMkQ5MTA4Ci06MTBFQTAwMDBDMUI5NTVBMkU3QzdERUUwNjc4NEQ3RjVCRjMwQkM4QzNCCi06MTBFQTEwMDBFNTE3RTc3M0ZGNDgxRkQ3RDlFNzdBNTQyRjcyNkFGNEQ2Ci06MTBFQTIwMDA2MkI4MTQyREQxRkMzODlFQkZDMjJCMDQxRkEyNzI0QkJBCi06MTBFQTMwMDBEOEY2MzdENDdCQzZGMUY0MEE0OEU5RkVCODRERjBGRkFBCi06MTBFQTQwMDBGMzFGQjQ3MTg5MjBBNzAzRDJBQTVGMUEwQzFFMzJCMjM5Ci06MTBFQTUwMDA0NDk4QUZEMzdGOTYwQkVFNDMyRkEzNUZBOEJCMUZENDgwCi06MTBFQTYwMDAxQjRGNkEyNDg2NjQxRkFFRUI2RjQyQjAxOTM2QUMyQjg1Ci06MTBFQTcwMDA4OUIyMThEMjdBRDI2RTgxNzZGNTlEN0YzQjA0RTNENEI5Ci06MTBFQTgwMDA3NzQ2RkI0NTcwNEU2RTM1MUZEM0ZBOEQ2NjZCRUY4RjYwCi06MTBFQTkwMDA2NEMyMkIxQTFEOTY0QzNBOUZCOTVCRjRFN0E0NzUyNDA3Ci06MTBFQUEwMDA4MEZEQ0RFQkQwN0YzN0RFMUYxMTQ0MEExODc4OUMyMDAzCi06MTBFQUIwMDAxNEZGNUE4MkYxQkQyNDlBOTU0QjQzOUM1Q0NFNzVFN0I2Ci06MTBFQUMwMDA2OURGMzNBQkU1RjBBQUI1REFGQ0YwQkUxMEYxRTlFNzk3Ci06MTBFQUQwMDAyOTcxMzlCNDhCQ0EzMUVCNDhCQzBGRjNBNzdDQkFFRTZECi06MTBFQUUwMDAyMzRFQUJENzQ0RjVFNUU0ODQ5QTdBODBDNzhENDRCNkNCCi06MTBFQUYwMDBCMDk0RTkwREVBQkE4ODkzRTE3Mzg2NkRCMjA1RTAzQjA0Ci06MTBFQjAwMDBBM0Q1QjgwRUM1MDJGM0I5QTlGREY0RUI1M0YxRkVGRjhFCi06MTBFQjEwMDBGMjA5QzJCRDM1NUZDNjc0NUVDQ0M0M0QwQTE0MTcwNTQ4Ci06MTBFQjIwMDAzMkI0RUY0MTM0QzBGRTAwRkMzNUJGOUY4RTdGREY1MDEyCi06MTBFQjMwMDBFOTkxMjg2MjVGRDZERjEzQUUzOUU4Mjc1M0UxREEzQjZCCi06MTBFQjQwMDA5REVBRkQ2NDJGNDRCMzc5NTNGOEVEMDUzOUEwQzI4RkQ3Ci06MTBFQjUwMDA0ODM1ODVEMEFGQkE5RTdGOEQwRTZDRjZDM0I5QUE5RDlECi06MTBFQjYwMDBCRDAzRjU0MTQyQ0Q5QjAwRUZGNDQzQzE0RjA0M0E3NTFDCi06MTBFQjcwMDA2MjkzRjM2MDlEOUY2RjNERjI5Njk4MTU1RTFGMjFDMUQxCi06MTBFQjgwMDBGQjIxM0VCQTc2QUJFODVDMEVFQkQ5RkFFQTIxQTBGNzlFCi06MTBFQjkwMDBERUQ2QTVDNkM3NTI3QTQwQjhEMTc5N0QxNDY5NUU5RjhBCi06MTBFQkEwMDBGRDk2REMwMDdBQzk3OEIxNDBFNzQ3Nzk4RUVGMjc2Qjk0Ci06MTBFQkIwMDAwQTNDODc2MTdFNDUwNzA2M0E2MEJFRTZBQzhFRERGRDA1Ci06MTBFQkMwMDBFOTNDQkE2RjE3MzBBRTM2NTEyNDE1MDAzRjM1MUVFMUNGCi06MTBFQkQwMDA4NDRENDIzQjNCMzFENjJCM0E2OEJFRkI0NkUyNUUwRjhBCi06MTBFQkUwMDBEMzcwQ0Y3NzAzQTk4OEU5MDVFRUU1OTQ2RTkyNkYxNzhECi06MTBFQkYwMDAzRDIwNEZERUJGNkQ0NkZDMEM5QTI2REI2N0M2NjdEMzBGCi06MTBFQzAwMDBGNEEyMjhFMjhEQTZGRDI1MEIyNjRGMDczQUExQTZDNzQwCi06MTBFQzEwMDA0RkExRjNCQzJFOEFDRTkzRTYzMzdGMUJFQkNGQTZGQzJECi06MTBFQzIwMDBGNjU3MEJCMTAyQkQyNkM2RDZBQzFBMEZFM0M0OEIzODFCCi06MTBFQzMwMDA5RkEzNTQ0Rjk0QTgxQzJCQkRGQUNCNTE1NjNBNUVGRkFDCi06MTBFQzQwMDBFRjZDMjM2MTNFNjk4REU1RTQ5RjE0OTRGQkYzOTk1RkJCCi06MTBFQzUwMDBGMUIzMjdCRjE5MDVGN0MwQzUxRjZENkVCQzY3Q0VFOUJDCi06MTBFQzYwMDAyRjMxOUJDMUMzODhFRkFEOUNBRURFOEI2MUY2NEU3RDJDCi06MTBFQzcwMDA5MjY1MDlGOERCM0ZFN0Y2MEY1MTVDNjgyRkRDQzZFREMzCi06MTBFQzgwMDA4NUY3NjI5ODFERjQ1RTlFRUE1RkYyMjc2OUY1REJGQTZDCi06MTBFQzkwMDA2ODI1RUUyQTMwMUVBODlFMDRGMUNFNUYzQTk1Qjg3ODFBCi06MTBFQ0EwMDBBODQ3M0NDOEI3Qjc3MUJCRjk3MzQyMkE4MUNFNkY1QkU2Ci06MTBFQ0IwMDA1NjlFOTI0MERCMjczNTMzMzgxOEU3Mzc3ODA4REI5RkJDCi06MTBFQ0MwMDBFQjRFNTE4MkQ2RjhDRkVBMjRCRjA1RjQ4NkJBNTMxNjJDCi06MTBFQ0QwMDBEREY3RjdBOTFFRURENURDNTdCRkVFRjBDMUYxMzBCRjZGCi06MTBFQ0UwMDBFQjQ5NzAzMUQ0QkZGRUI2NThFNkI4RTdGQ0RBQzlFN0E1Ci06MTBFQ0YwMDBEMTFCNUNFQUUzMjUyMjUxNzhENDBCQzQ3M0JBN0EyRjc2Ci06MTBFRDAwMDBGRjIwNDY4NEVGQTQyMUFDM0NBOTNDRjJGQUM2MEY2MTc3Ci06MTBFRDEwMDA3QTVGRjlEMjg5MEYwMDlERDUwN0NDQThDQkRGRjY2MkM4Ci06MTBFRDIwMDA2OUNBRTlGNEU3RkE1MzE3MTA5RkM2RkY1NzJGMDUxMTc4Ci06MTBFRDMwMDAxRUY1QTcyRUM0RUZFNTRCOEY1OTgwRUVBMTFGOTk3RURCCi06MTBFRDQwMDBCRjJENUE0OTAxN0Y2RDZGNzBERUNBRjVBMEZBNTNGMUVECi06MTBFRDUwMDBDNERCNEZGQjlERjE3N0I4RkY0NDJDRkYzMzg3REI5RjZCCi06MTBFRDYwMDBGNzk4MkEyM0M1NzcyREUwRUIxRTkyMjQ3OTQwRUYxQUZECi06MTBFRDcwMDBFQTI3Q0FCQTA4RTNBQUY1OTIxMzIyRUJDNUVBQkMzQTFECi06MTBFRDgwMDBDQjgyRDdDM0JDQ0ZBQjIwNEFBNEYxNjY3MjM4QUFGM0JBCi06MTBFRDkwMDBFRDRDMDhDRUYyMjA3RDc2RTdDMTNCMTNBMUJDQjMzQjFFCi06MTBFREEwMDA0M0ZCOEVDNDIzNUMxRTc0NUUxQUNDODBGRTNGQkYyNERFCi06MTBFREIwMDBGMkJEMUQxNUNGNjNCOEJFRkNCNzg0OUE0RTkwMUZEMzI5Ci06MTBFREMwMDBBRUEyMTk0QTFGMjlEM0ZDMjY3NjNGODVGMTVCNkZGODY2Ci06MTBFREQwMDAwRUMzNTkyNEJFNTFBNzgzQjMwNUNCRDVGRThFRUNFN0Y1Ci06MTBFREUwMDBGQzQ4RUQ3MDg4NTNCRjkxQ0JGRjFCMzdDRUM1QjgyN0M5Ci06MTBFREYwMDA1NTRFMUQ3OTUwNDQzOTc1MDRGNzE2OUFGQTA0RDQ1RkJDCi06MTBFRTAwMDBBN0Q3NTA5RDhBQ0E5NTU5OUJDQTc3QzM3NjcwNjMyQTQzCi06MTBFRTEwMDAyMTE3MjZCMEVGNzc0MURBNjJENkY5RkJENUYxNjYxQ0VGCi06MTBFRTIwMDBGMkEwOUUzNUIzNERCRkNGRDU5MkI2MkY0MDNGMzhCMjNBCi06MTBFRTMwMDA5RkM5MDNDQURGMTY5MEM3QjNFRUQzRjc1M0JCRjFCMjM1Ci06MTBFRTQwMDA0RjYxN0VCNTA2QkIzQzk5RUZDRjQ2M0RFRkExMjFEQzdCCi06MTBFRTUwMDBCRjNGODY4QzM5MUJCQkJDOUU5MkM1MTBEQzE3M0MyMjgxCi06MTBFRTYwMDBDQzYzQjRBNDdGNjc0QjRERTMwQTE5OUQyQ0Q4NzREMkIwCi06MTBFRTcwMDBFMjkwN0JFRkY3Mjg5NTIzMzlCNERGNjNENDFFODdGNDQzCi06MTBFRTgwMDBDNTIxQ0E5MzQzNjhCQkUzRkIxODVDNUUxQjUyRjMwQ0JECi06MTBFRTkwMDA4Qzc3N0MxRjVCRkY4OUJBMTNCM0UwOUQxODMyOTVFOTJDCi06MTBFRUEwMDAwRDUxNzBGOTgwRkUxQTc1QURENUQ3NENEN0JCOTQ4QTM5Ci06MTBFRUIwMDBBOTY4QjgxNzE0QzVGNDExNTUwRjEzQzU1QjQ1MDcyRDg0Ci06MTBFRUMwMDAxRkZCNUYzM0UzNjE5RDg5OEY1RjVDMDlGRDI1M0QxRTVDCi06MTBFRUQwMDBBQjAwREM5Njk3MkEyMzQwREUyRkFGQjJCOUUxQkVDQTYxCi06MTBFRUUwMDAzQTRBODZDNUI0QkQ5NUY2MDNGQjg5RUZDRjYzNzdDMDc4Ci06MTBFRUYwMDA3MTY0NEVDN0FBMzI3OEY3QzVCOUFEQ0IzRjgwQUVBQkNGCi06MTBFRjAwMDBENUM0REVDOTY4QkQ5MEI4OUI0OTc4QkM4NjZENTVDRjI1Ci06MTBFRjEwMDBDMEJDMzIyNkQzRkQ0MTgwN0JGNENBMDhBN0E2N0ZDMkJECi06MTBFRjIwMDBGNUFCN0E4RTkzRTNBRjBDQkVFNzAyQjg5N0IwNDc0NEQ3Ci06MTBFRjMwMDBGNUYxNDQ1RDE2REFGNTQzMDhBMzI3MzVGRTFFQzYwNjMzCi06MTBFRjQwMDAzRDUyODVERjMxQkE1RjExNEQ5Q0RBOTAwRUMxNkZBNjNDCi06MTBFRjUwMDBFQjlBRDdGOTBDQkVDNzUxQjdDODlGN0MyREVDQjc4RjgxCi06MTBFRjYwMDA0OTZDMUZFNUYzNEJGQzZCNUE5OUVDMDhFRkJGRDcwQUNECi06MTBFRjcwMDA0RUQ0MjM1NTNERjk2QUEyRkUxNEEwQkY3MDJBRTc4MzQwCi06MTBFRjgwMDBBQkI5N0U3QzZEMkM4M0YzNzRFMkNFODA3NkQ3NTg4OTQyCi06MTBFRjkwMDBDMzQ0NjE3NjZENzlDN0U4RjlCMEVGQ0UzNUM3ODM3RTlCCi06MTBFRkEwMDAwMzZCODk4NDc3MzUzNUVBNDEyQTFGRDY2RkI2N0JDMTVBCi06MTBFRkIwMDBFRkZBQjlEMDlEMDc5RDFDMzUzMzNFRUI3RTI1Q0FCN0NECi06MTBFRkMwMDAzRTMzNDI3RjdDRkZBQUNGRTM3QTVEMEU1MUUwRkU0MEU0Ci06MTBFRkQwMDBGREY2QzE3ODFGMkMyQTg2RTI3MTI0Q0EzRjJCRTA3NTBBCi06MTBFRkUwMDAxN0VDRkY3NEREQjM1RjhFRjZFM0JEMzBGNUJEMzIyNzVECi06MTBFRkYwMDBGMURBRTkzODBEREI1M0Q2ODM5RTkxOThBRDhDNTg0MEY5Ci06MTBGMDAwMDBGQkZCREMxQ0NDNDA3OTQxRTU5QjQwRjdENkQ0QTE0QkZGCi06MTBGMDEwMDBBNjQ4OTRBRkVBRkI1M0JEOEJFNkM3M0Y3RUVGMTQ4OTQ5Ci06MTBGMDIwMDBEMjYzN0Q1NjcwOTY4OUU2RTczREZFMDRDQjBGMDk3RURDCi06MTBGMDMwMDAwMkY5M0IxRTdGODFENTFGMTk5QzI1RDJGQ0VBQzc3N0I4Ci06MTBGMDQwMDBCMTcyMzhDM0E2ODRCNUY2RjEzN0E2ODBGRDdGMzQ5RTMxCi06MTBGMDUwMDBFOTBGQzQxREJDMUVFOEE3RkVBNUMxQTZFNTlBRjVERTEyCi06MTBGMDYwMDAzRDk0QzlEMUEzRDFBQ0RFRDE0QzcyNDMzNUMwREIxNTgwCi06MTBGMDcwMDBDQ0FCRDY5Q0NCMzUwQzBERjk2RjU4OUMxNjVGQTdEQTNDCi06MTBGMDgwMDA4RUE0NDZFRTdGMzA2RjM3QkI5Q0Q1QkIyODk2QjQ0NjI2Ci06MTBGMDkwMDBCM0ZCNzU1RUQwQzc3NjZFMUI4QzcwQjEwRDRERTBGMDgyCi06MTBGMEEwMDBBMkZEMTQ4NUZCNTFFMUE4RjZBNzhFM0IwN0Y2NzU5MEVCCi06MTBGMEIwMDBGQjY2MkFGNzM1NzJBNjY4MjhDMzFCMURBNzA1QzcyOTVBCi06MTBGMEMwMDA1MDQ2QzAzQjU2RjVENTAzNDcwMERFMjhCRTI0OEUyRkEwCi06MTBGMEQwMDBDOThBOEZBQkFENjNGM0EzRkRDNjE3RTIzRTMzMEFGQ0NBCi06MTBGMEUwMDBDQTNCQkZBM0Y1MzNDM0YzMzZEMjg3QzJDNzk5RERDQzgxCi06MTBGMEYwMDBFRUY3NzdDNzY3MjMxRDVEMTRDQkY0NDU1MjQ0RTE0NzEzCi06MTBGMTAwMDBFNUQ5RUFBMTZDRkZCOTdCNjgzQzVCNUYwODBGMjkwMjc3Ci06MTBGMTEwMDBGNkRGQ0NFMTM3OTBENTNGREJGNTU2RkY0MkVCRDVFMDhCCi06MTBGMTIwMDA0OTAxRkZDQUNFQURGOTg4Mjc3NTNEODRBQ0QyRjU3MzhECi06MTBGMTMwMDA3NEExQTE1RDMxNjUzQzk4NDc0MjM2QjY1QjFBNERBQzZGCi06MTBGMTQwMDBGODlEQUMwRkI1Q0JBNEVEMkUyQUVGMUUwNUZDMzA4RjM5Ci06MTBGMTUwMDBFQkMzQzQ3QjIxQzYzNUQ0NzE2OTMxQUYzNTYwMDFCRkMzCi06MTBGMTYwMDBGNEJDMEVFNjI3MjczOTc0N0Q0MDFGRDUxMzhCRjhGQUJGCi06MTBGMTcwMDA5QzdDN0Q0RUI2M0U5RjhFM0VDOUMxRUU4Q0M5RjY5RUVDCi06MTBGMTgwMDA3NDFCODI3QkE4QkY4MjkxQkMzRjFEM0Y0N0VBMEZGOEVBCi06MTBGMTkwMDBBMjM3N0NCNDBDNjVGQkQ0MzlDMzg3M0E0RjAzM0M0Mzk4Ci06MTBGMUEwMDA3MDM2Q0M0Rjg1MjdGMDMxQjYyQkQwRjM5MzNBQ0YzQjU2Ci06MTBGMUIwMDA3QUUzRTdDQzlGMzg1RTI5NkIzN0VGNzcxNDhGQTBGRjk3Ci06MTBGMUMwMDBDODdBN0E5RUQ3OTk2OTlBNUUxMDZFRDdEQUIxRDAwMzYxCi06MTBGMUQwMDA3MjNFNTY5MDk5MUZCQ0IzQ0EwQkZCNUZDM0I2NTJGNDg0Ci06MTBGMUUwMDA1M0NEN0JFMUM5RTdCREI0RkQ5Q0E3RDczODIwQjhFQTcxCi06MTBGMUYwMDA4OEQ0OUUwQzdBNzBEREE2QzUwRTc4MUZFRUIwRTQ3NTNCCi06MTBGMjAwMDA4MEZDM0NFMjEzMjNGQTA3RkZDMUYxQTBFQTVERjU3QzI0Ci06MTBGMjEwMDBCRjM5RkFFN0JCMjcwMTNDQkVERTY0QzY3Qjg2MEQ1QkM3Ci06MTBGMjIwMDBBMkZDNTFFODM3OTk4REZBMThDRDdGQzhGMjRCQkYwMDg4Ci06MTBGMjMwMDAzQkI2NjFBQjVFN0Y5QUYzQTczNUM5RTgwRjIzREUwMUM5Ci06MTBGMjQwMDAyNjNDMDRGMzBGODBDM0IwRkE4RDY2M0M0RkE5M0YyOERCCi06MTBGMjUwMDBCQUU5MzBBNDgxNzQyRjgxRjkxOURCQzMzQzRFNTFCQzRCCi06MTBGMjYwMDAzNzc0ODgzNzQyN0M5RkIxOUM0QTEyRDRDNzFBM0FFRjUwCi06MTBGMjcwMDA0NjNEQURBMUYzOTI0RjQxQUY2ODMwQzQ1M0Q0RjZBMkRFCi06MTBGMjgwMDA4N0JEMzE5NEVCNjFGQzlENzQxNTNFQzQ5Nzg0RkE0REEzCi06MTBGMjkwMDBGMzYzMEYxNDdFNDhFNzc1NkNFM0VCMEVBMTQwQkI2RjgwCi06MTBGMkEwMDAyRTQyM0M5REU4OThCMUY2MjVCOUY3RkRGNTczRDAwRkQ1Ci06MTBGMkIwMDBBMkI0RUQxODdFRTVBRDAyM0IxOERBQzZEMjNBQjNERjUwCi06MTBGMkMwMDAwMUZFODFCQTc1NjYzN0REODE0OUREOTMxQjM2RkYxMTdBCi06MTBGMkQwMDBFQ0NCNzdBMkRDMTA2QTNBRjdDOTVENkY5RDRGRjM3M0YwCi06MTBGMkUwMDA5RjMxMjc0RTY0RDNCN0MxMzlCNzhBMjc4OEQ5MDAzREVCCi06MTBGMkYwMDA0NUM1Q0I5Q0JGRUNCMkM4QzNEODc3RDA3QjU1RkNDQ0ZFCi06MTBGMzAwMDA3REE2Q0IwMkY3RkM4QzcwMkNFRkU4QjI2MDNDQUMxMTEwCi06MTBGMzEwMDA0RjFEMUY0RTAwMTVBNEY5QjE2RjJDNDBERjQ3QjYwQkVGCi06MTBGMzIwMDBGOEVFQkRCMTdERURCQTVEMEVBMDQzODAxM0Q4QTEyQUUxCi06MTBGMzMwMDBCRTQyRjhFQjgxMzdGRkE0OTc4QUIwMUVGQTQzQ0U4NDExCi06MTBGMzQwMDBCRjI3MDA0N0EzOTFDRTlGN0EwOUZDMjhFRjQ2QjkwMTU5Ci06MTBGMzUwMDAwRUI1NEZEREVBODBGNTdDMkFDRDY3RjRGRUM4RTI2NDg1Ci06MTBGMzYwMDA3ODJGQUZENkVDNEQ3NjYyQ0FCRUQ3M0U3QTNCRDJFMTVCCi06MTBGMzcwMDBDREZCNkU0RjY2RUY0ODI4NjlFQzFENEQ2RjFBQUNGMzVDCi06MTBGMzgwMDBBNjg3QTdFMDNBNjc5MTFBQTRDM0RBNDc5ODdGRTMyQkQwCi06MTBGMzkwMDA4OTU0M0UxMzgxNUZBNjE0QjA3REU0RDNGNTUxMTAxQzRGCi06MTBGM0EwMDA0NDNFODU3MzA0MzgzN0Q5MkZFMkJERkIxRUVGMjI5MTBFCi06MTBGM0IwMDAwNTk4RkY4QUZCMTdGMjBCNDJFRjFGNUE0MUJGNkJFMDIzCi06MTBGM0MwMDBCNTFBMzYyRTBEMDA5RThFQTYyQjI5RTBCN0E1NzBGMDNCCi06MTBGM0QwMDA3MkI4MDlGMEVFQkJCODZGN0MwQUMzMTM5MUUxM0MwNDJDCi06MTBGM0UwMDBEQjUxN0RCQzFDQkU0M0ZEODA1OTg5MkVENEI1RTNFRkIzCi06MTBGM0YwMDBEQkIwRjE1NUZGMDY5RDc3MEM5Q0E3N0Y5QUNDRTJGMjFCCi06MTBGNDAwMDA4Q0VCNkJFMUVCQTMzRjAxQTJBNUIzREVGODdGRTMzMjA3Ci06MTBGNDEwMDBBNEFGMkYwRjMyRkVBOUY3NTU1NTYyNzlDMEVDNEY4MThBCi06MTBGNDIwMDA3MjVGRDc2NDAxRTU0Mzk0RUVGQzNDNDQxRjFCQ0Q5QzA2Ci06MTBGNDMwMDBCRkY1RTU3NDlFOTJBMDg1RUY3NjAxREZEMzU0RTk2NUIwCi06MTBGNDQwMDBENjdENTFCQUYzRkEzMEZERThERjhCNTJGOTU1QjVCM0VBCi06MTBGNDUwMDA2RUU2RjJDMEI4NkVBMzdDRjAxNDE4RkU4RUMyQzM0OUVCCi06MTBGNDYwMDA3REYyN0ZENzk5N0Q5QkZGMDhGQzRDRjlENzJCMDMzRjlBCi06MTBGNDcwMDA5QkQxM0ZGMEQ5MTNBRkJFNzUwREE1RkJDRjNBNTQzRURCCi06MTBGNDgwMDBENkNCNUIyMzFGRDczRTNCOUE0NEUyRTNDRjZDNkUxMjkwCi06MTBGNDkwMDA5MThGRTlGNzg4N0M2QzYzRjdBNkZGN0ZDOURCOUI3QkM0Ci06MTBGNEEwMDA5MUI3RkY1NkEwOTdCNzVGOTE4MkI4MEIwOEVDMzM3MzAyCi06MTBGNEIwMDBGMUJENTcyMzdDNTVCQkQ3Mjg0NzEzMEFFNDg4NzI5NEMzCi06MTBGNEMwMDBGRTFDMjQxQTc4QUE3MDU0RTk3M0NFRTNGMzcwOUMxMEUyCi06MTBGNEQwMDAxREFCNzRBQUQyNzE4ODRFOERFQkQ2QzNEMzU4N0UyMTUyCi06MTBGNEUwMDBDQzVEMTMwNzYxNUU0NEVEMThEMDczNUYxMTdERUJFOUNECi06MTBGNEYwMDBENDhFRDNCOTJDQTFGMDNGRkU0NDI2QzYxQjJERTY3NjUwCi06MTBGNTAwMDBDMDcxNjdCNzAzRTJDNzE2NzNCQkEzMUJGQzkyNzFFMTFFCi06MTBGNTEwMDBFRkRERDE0QzVGM0FFRUU5NzZDNDZCRjRBNjBGQjc4OTA0Ci06MTBGNTIwMDAwRUQwRjM4MjNFNTIxOUM5OUY0NDI1MzZDRTIzNDg3QTI1Ci06MTBGNTMwMDAyQjY3RTc2MkM3QjkzRkY0MzhGNzc3OEUxNzZEMTk4RERGCi06MTBGNTQwMDBFMDA3NkU2NzdGRjc2NEU2QzJBQjFDNzAyRTcwN0M1QkQxCi06MTBGNTUwMDBGNjNEQzA3RjM3QkQyNkIyNzczREJEOEEwNDcxMTIzM0I4Ci06MTBGNTYwMDAxODA4Qzg2MUUyQkRCRjg0QUU3M0M2QjZCOTE4REY2MEMzCi06MTBGNTcwMDBGNEEzQ0NCMjZEQzRGMzg1QUZDODVEOTgxQUZEMjc3M0IwCi06MTBGNTgwMDBDMENGMDJGNEZFQjBFMUZCQjZDQjkwQkVFNjE4RThBQjBDCi06MTBGNTkwMDAwNkU4MkJBRDI3N0RFRDU2Rjk3NTA0MTlBMUJEN0ZCNkEwCi06MTBGNUEwMDA4MENCQkRGMTYyQzEzREEwQ0YxQ0E3NzYzRUM2MTI4OEJDCi06MTBGNUIwMDAwNTdCNjFERkZEMEFFQzdFNjAwQzZGMTJEMkVEREM5QUY4Ci06MTBGNUMwMDBDMzE2RkU4RTMzRDJCQjRBODc0NjdCREY5ODFFN0JFRTg2Ci06MTBGNUQwMDBGRDMxNzdEMjJBNzVDRkZGQTNGMDIxOUExRTdCRkU5REM1Ci06MTBGNUUwMDBCQzk3MjFGRkMyREIxOUZGMjAzREVCOTc2RkZGMTZFREEzCi06MTBGNUYwMDA5QkUzREJBMzcwM0VDN0I3RkYyREUzNEVDOEJGMTQ4NTY2Ci06MTBGNjAwMDBFN0FGQzcxNzQ1NjE1Qzk0NzdCQkREMDdGN0Y5OEVBN0I1Ci06MTBGNjEwMDAzM0JGNURGMzJCREYxNDYyRkMwNTY5NjE3QTQ4ODE4NTk1Ci06MTBGNjIwMDBBNURCRkVGQjAzODg5RjNFQjEyRDRBMDYzRjQ1QzNGNjhFCi06MTBGNjMwMDA1OEI0REIxQjVFOEFDNkI4OTdFM0FGN0MzMzQ2RUI2N0YyCi06MTBGNjQwMDBGQUI5RUJBOUU3RTdGQ0M3RUQ2NEVBQjM0MENGRjFDQzI4Ci06MTBGNjUwMDBCRTZCNzg3OUVDMDY4ODk3OUJEN0Q5NjU4MUYzODFGMkU4Ci06MTBGNjYwMDBCRjdFNUYwODcyRTlGOEIzNENGRkEwRjZGQ0EzRjBEMkFFCi06MTBGNjcwMDBFMUY3MDU3NUY3OUIyOUJDM0YwNzFEOTFEQUUxN0YxODdCCi06MTBGNjgwMDBGNkU0OTU2MDg3Rjc4NDBCODNDMzcxMEEwNzU4MTc4NUUyCi06MTBGNjkwMDA0QjJEQzhEM0RFRTA5MTM4RUNENzBBOEYyRkQwQkVBODBGCi06MTBGNkEwMDBEQjc2MUVGMjUxMTgyRTgyQzJCRURCN0Q1NjAxRDdDRjBCCi06MTBGNkIwMDBCRTZGRkZBNjEwRjRBOUNGM0ExNkEyNUU3MEE2NzU4RjkyCi06MTBGNkMwMDBGQTNGQjc2RUMxREY5Nzc1NTdDM0JBOTM3RThERUI2NjZECi06MTBGNkQwMDBGNDdGODhFRjU3NDYzRUU4NDlFNzJGRkMxNkYzNEZEOUYxCi06MTBGNkUwMDBERDM4REYzRUYyRkY4MkZGNkI3ODdGNTZDMDczRjkzMzVGCi06MTBGNkYwMDBFMTdERDVGRjVBQkNCRkM2RjE2RTc3NDI3Q0Q5RjE1Nzg4Ci06MTBGNzAwMDBCRUNGMjA5QUY1OUY2OUREMURGRjRCRDcxREQyOEY0NEQ4Ci06MTBGNzEwMDA4RjE1OUVCODZGMjNGRTAwREM1RjVGREM4QjlFRjJGRUQwCi06MTBGNzIwMDAzMEQ1MkZDMUVDMTAzNTdFNDc0QzlDODM3QTg2OThCODMzCi06MTBGNzMwMDAxQ0Y1ODZDNTg0QkQ4M0VDOTU0REZDM0QzNjE2RjdERDgyCi06MTBGNzQwMDAzQUQwRUQ0M0JGQThFNEE5NUQ0N0YzRTY0MTc1RUVFNTg1Ci06MTBGNzUwMDBEODgzREUzRTEzOTMyNzU2ODI5RkE1NzkyMTlEMTdFRDBFCi06MTBGNzYwMDBBNzM5QzlFNDZDOTZFMTk5NzY5MzNGQUExMEQzMEYyMThCCi06MTBGNzcwMDA1RDlBN0NFOTFFMTg1N0IyRTlERkFCQjUxOUVDOEQ5ODlDCi06MTBGNzgwMDAxQzhCM0VBRTk4RUM3MEMyNzk3NUI0NUI4MkI3RENBOTc1Ci06MTBGNzkwMDAyQUFCN0ZERkY2RTU2MTJDRkUyMzg2RjgzMDZFRjM2QzMyCi06MTBGN0EwMDBFMTY0MkZENERCNkI0NjM4MTlFMUEzQzJBRDA3OUNCOEU2Ci06MTBGN0IwMDAzREFBQkVDNzJGMjUyRTBGMDAxRjRBODREQTkzNkMzRDQ5Ci06MTBGN0MwMDA2ODg3QzJERjkxODJGMzFBNzNEQzJDRjc3Mjc2OUUyMjZGCi06MTBGN0QwMDA4N0RFRjE4NzM4MDg2RTZGODZERTk5OTU0RDY4OTdBQUE3Ci06MTBGN0UwMDA3MEQ2RjQ4N0VCMzdDMkY5NkNFMUFCRTIyNTlBNTQyMzZCCi06MTBGN0YwMDA5RUEzMDdEQURDM0UzQUZGQzUzMjgzRkI2MjBBNzc3OEM0Ci06MTBGODAwMDA1RjVDODVBRjBBMzcyMzFFODI0MEEzNDk2MUY4ODc1M0E2Ci06MTBGODEwMDA3REJDOEVCNzhDQjhFMDlDNjVCQzU4MTJGNDgyQkU1QzhGCi06MTBGODIwMDAxQzhCRkFGMjMxODFGODA1NkFCRjFEMkI0RDJFMDNCQkVDCi06MTBGODMwMDBFMjU4QkE0NTgyNzQ1QzM3NUQ5MzY2QkUxNzlEQjI4NjA2Ci06MTBGODQwMDBGRTg2MUVFNDRCNDlCQzJFN0YyQzNEMEZEQjk3NUJEMzFECi06MTBGODUwMDA3NEVERjY0MkRDMzZCNURCOEZBNTE1NUJGMTNDRDQ5OTJGCi06MTBGODYwMDBBOTZCMzcyOUQ2QjExRUNBRjc0MjFDMzc4RTNGMDFFRDZFCi06MTBGODcwMDA5QjhCNTNGMzc1RkQ0Q0ZBRThEOEMzMzdEMjc0MkJCNzgyCi06MTBGODgwMDBBQkJCQzc5OUQxMUY3RkVDQjU2OTY1MDBDNzRCRTQxMUNECi06MTBGODkwMDBCQUZBRkI4ODMzMDk4ODhBQUVBRjAyRDY3Nzk5NkJBQzg3Ci06MTBGOEEwMDA2RURDQkEwRjc3RTQ4MTFGRTIzN0VFNTJEREY3Q0I4QkM3Ci06MTBGOEIwMDAyRkQxRjVFM0IxMDZGRDQwREU1NTRBOTVFRTdCNURFM0MxCi06MTBGOEMwMDBENzQ0RUE0N0M4MDU4RERGMTE2OTE0NTVERkZEMURCQTFECi06MTBGOEQwMDA3RTQ2RUREOUFBQUJFRjBFMzhDQjQxNjUxQzc5QzhGRDQ5Ci06MTBGOEUwMDAyQUE0NkEzQ0JCQTU5RkQ1NkJBMkU5QjAwRkNCNDQzOEQ0Ci06MTBGOEYwMDBGNzFDRkQ3MTREMzNCOEExMkYzODQ2NUM0MDA3RTc5MUU2Ci06MTBGOTAwMDAxODNDMEZFQzJERUVGRDFCOTNBRjA2RDY3OTg3RTg3M0ZDCi06MTBGOTEwMDA0MTFBMzM2MDU2MjFBQ0VCNDg2QTlCMDhDN0QyMEYwOUU1Ci06MTBGOTIwMDAzNTU3MTQ1MjNFMUJGQkE1QUYxOUYyMTc3REQ3MjE4MjI0Ci06MTBGOTMwMDAzREQ5QkM0NUM0RkI3NUUzQzU4OUIxRkYwOUYyQjg0M0E1Ci06MTBGOTQwMDBDMDE4RkYzQTlCMDlGREYwOUYyNTc0MTRERUFBQTEzQjY1Ci06MTBGOTUwMDAzNTZFQzdDOEM3RkQ0Nzk1REU1NDQ4RTlBRDI1NTU2OUUyCi06MTBGOTYwMDBFRjAyNzk1QUY2RkVGNTYyODRGQkFFQzRBOTdGOTdBRTJBCi06MTBGOTcwMDBGRjI4NEYyQjlDRDNBQjcxNDkzMUU1MjIwQjZFQkZEOENBCi06MTBGOTgwMDA4Q0ZFOTIyNTI2NzczNDE3MEFCOEVGM0EyNzk4RDcwMUNDCi06MTBGOTkwMDBCRjdGQ0ZFNTQ2Q0NFQjQ0MDY3RjUwNENCRjFBMTFFRTNCCi06MTBGOUEwMDBEOTkxN0IwNDhDNkI1MUM3OUI1MUNDRTJFRDk3MTRBQTgzCi06MTBGOUIwMDBFRjlCMzg5M0FFMUIwNkVERUQyQzVFMDA3QzY5RDA2RTlDCi06MTBGOUMwMDBBMjA5RjU5NEFFNzE5RkEyRkQxQjczQjkyOTFERUVFMTRBCi06MTBGOUQwMDAzOThBOTVENzczNjg3RTRDNjA3RjNBREE1OUE0MThFMzY4Ci06MTBGOUUwMDA2RDE2RjAzODk5OTRCNkNDMDc3NjQwRkIzRDY2OEMzQjlCCi06MTBGOUYwMDA5RTMxNEQzOTk5NDNGMzJCMjdCMkZCODE5REM1NjVCMUVCCi06MTBGQTAwMDBDMzM0RjA3MzlDMTI4OEFDODkyQkY4QkU1MEM2NzkzODg5Ci06MTBGQTEwMDBBNDIwREUwRjczOUM5MkIwOUMwNDQ3MzBGQjhGOEZFM0QxCi06MTBGQTIwMDA5ODI2QkY3REFCNjYxQzIyMjk3MzYxREVDQjg3QkMyNzdECi06MTBGQTMwMDA4MzFDNzMxQzIyRkNFRjg4MDRGMUVGRTQ0MTNDMTIzRTZFCi06MTBGQTQwMDA4MDI2MDU1M0FGOEI3MEVGRUVFODk2RDFGMTYwODdGNzEzCi06MTBGQTUwMDAyQjc1RTMzREMxN0U0RjhBQTE3QkIyMjAxNjU3QzIzRjcyCi06MTBGQTYwMDA3ODhGQjZGQUVEMEE1QUJFMDU2NDIzMkJGNzEzNEFDRkY2Ci06MTBGQTcwMDBDQjJENkEzOTE1MkQyRUZFQ0UyMTk2NTc1RjU1MDE3ODc0Ci06MTBGQTgwMDAxNEY1RjU4NzY3ODVFQTJCRDZENDcwRkZDRjE0NTZCRkRGCi06MTBGQTkwMDBERDUyRDAxM0FFNURFM0EyNzA3RjhFQTE3NDAwRkFFNTUzCi06MTBGQUEwMDA4MkZDODI5NEQzQzVFOTNCNEVDNTlFMDFBRTBFMDZEN0JCCi06MTBGQUIwMDBFRkU4MkU5MDFDRjYyNzdFMkNDODE5NDA1RkY3QzJGNUEwCi06MTBGQUMwMDAwMDZBMzdBRjhFQUZEOTBBNzQxQzIzRkE4N0MxRjdFOUYxCi06MTBGQUQwMDAwRTI1NjUxQ0E1Qjc0RThCOTJGMTNCRjQ4QjQ0NjNCQzlECi06MTBGQUUwMDA1N0Q1MkQ5RjNEMDg1N0M0MUM5MzhFQkFBODY2NDMzQTNDCi06MTBGQUYwMDAyNTI1NzYyNEY4QTU5QzVGQTMxQzUwRTNEQUMyNzBBNEU4Ci06MTBGQjAwMDBGNDRCQzc1QzY5MEFFNzQxMkUzOEMyNzA1NUUwNkRFMERFCi06MTBGQjEwMDBFNTFBMzg1QjY5QkU4QUMzRjVFNDUzMzNBRjQyMzhDRDhBCi06MTBGQjIwMDBCNDIyNUREQ0NBNzlBODI1OUVCNDQzNUNERDQ5RTdFNkQyCi06MTBGQjMwMDAyQjgxMUU0RTZFMzE2M0YwNkEyNzE0QzJCRUU5QjJCMjQ5Ci06MTBGQjQwMDBCRkUzOTMxODRDODVCRkRCMzI2QzlGMDlGRDc5RUY1MTAxCi06MTBGQjUwMDBGQTUwODAzRUZDMjMxMEVFNkE3RjI3NEJERTRFODBGQjdFCi06MTBGQjYwMDAxMjI3MTNBNTA0ODBDRjlDQTAwNUUxNzY5RDQ0RkNGMEVDCi06MTBGQjcwMDA1RTZBNjdFMkNDRjI1MjVBREU3OTQ4QzZGMjBFREVDRkY4Ci06MTBGQjgwMDA5MDUxQ0FGQjg1Qjg4RkYzRkJCRUNBRjkyMkJDOEZEQTRECi06MTBGQjkwMDAxQkJFOENFN0Y3RTAwRjNFM0ZBMTc3M0E2ODI5QjVFMjNDCi06MTBGQkEwMDA3QjQzMERDNTBCMEI2MDVGNTgxMDlGODdGMTU3MEQxNUY4Ci06MTBGQkIwMDAwMkVFQkIwRDhENUYyMkRDRDVGRUE1NTMyMjkxMzU3MTdGCi06MTBGQkMwMDA1MjRGODBGNzMwNDlGMzZFRkMyOTBCOTZENzM1OUU0NDhGCi06MTBGQkQwMDBGOTREQTc5MzA5N0M3MzhDOUY2RkI2OUJDOTBENTUzNDYzCi06MTBGQkUwMDBBREZCNDFCQ0ExQ0E4NkU3OTRBREIwN0ZENDkxMUQ5NjEwCi06MTBGQkYwMDAwNTFBRjk0NzNBQkUwOEM5RkJFMTE0NzdGNzRFREMxRjM2Ci06MTBGQzAwMDAwMzcyQjU0QTcwNEU4MTQ3MDYyRUVERjA1RjA1RTdGN0E3Ci06MTBGQzEwMDA1NUQxQ0UyOTcwREU5RkU0RkVGMzU1NzA3RTVGOTVFRUUwCi06MTBGQzIwMDA5QzAyRTdGQkI5NEZDNzRFQzVGMjM0RTcxQUY4NEJBMDY4Ci06MTBGQzMwMDBENUVFNUM5NkNGNzRCRTA5RjkwQjg3OTdCMUJDOUREMTA4Ci06MTBGQzQwMDA0MUNDRDMxOTUzQkRCODdGREIxMDJFMjc1QTYzN0RBNzUzCi06MTBGQzUwMDA3Qjc3RTRFNkM2OTc3NTcwRTk1MTJFMEExODA3ODU4MTBGCi06MTBGQzYwMDAxQTk0N0VGRUI1NkMwMDdCMDczNzI3ODA3MTU5RTlDMzczCi06MTBGQzcwMDAwNTM1RkU4QjE0Mjc4NEUzNzUxM0IzODkwMkU3QTk4OTQwCi06MTBGQzgwMDAyRjQ0QjM3NzVBM0YwRTY0MDBGQzZFN0UyMURBMEY3RTVDCi06MTBGQzkwMDBDODc5OEZCQzZBODFGRDY3QkEyOEU3MDE1RjhEMUY1RDU3Ci06MTBGQ0EwMDA5MzNEM0MwOUZDMjUwMUNDREZEQ0I4MURFNzc1RTc0ODM2Ci06MTBGQ0IwMDBGRUY3QUM5Q0REMDVFMEFGQUFFNTcxQ0VCNTg2NzhERjM2Ci06MTBGQ0MwMDAzOUI2OURFODdGOUJCMzUxRUY2NzlCNEI4MjFGMDA5RjI2Ci06MTBGQ0QwMDBENjNENzFGQTM4REY4RjRDNkMxRTEyODdDNzc0MzE3MEI1Ci06MTBGQ0UwMDBCRDg1Q0Q2QkNDNzAzODlGNDlFOEMyMzg2M0M5MTk0OENGCi06MTBGQ0YwMDBBRTQxRjhENkI5RDAzRTQ5OERDMTdCMzQ0QkZBQkY1QkRCCi06MTBGRDAwMDAxOEU5N0Q5ODhFMjZCQURGNTM5NjdCQjY2OTJCQTZEMjZBCi06MTBGRDEwMDAwODgyRUI0OTkxODIxNjM3RURBNzlFQ0JFNTMxODE4RkEyCi06MTBGRDIwMDAyQ0RBNzhDMTJCMzg1Q0UzQjZCMkYzNkU2MzFDRUMxNUE5Ci06MTBGRDMwMDBDM0VEM0NCRTlEOUQyQkNGQUI3RUEzMDRGMEEyRTJGM0FFCi06MTBGRDQwMDBBMjU4RDI4MUYxQUEwOUM0Q0RGMUUyMDZCQ0E4RjAwRkY1Ci06MTBGRDUwMDA5RjJGRDM3Njk5OTFFODQyODUzRjYxRjE3NTMxNEM1RUQyCi06MTBGRDYwMDA3NDNGMTc4REZBOTQ3MUZFNzU3Q0JFRUEzQUJDQzM5OTU0Ci06MTBGRDcwMDA3REQzREJGQ0JEMzBGRkE0NzMzRjdGRUY3MDU5RjdERTBFCi06MTBGRDgwMDBBREJBMEU5NThGNDNGNkUwQzJDODdBOEEzQUVGQjNBN0IwCi06MTBGRDkwMDBCMzgwQTUyRjc0QTZDQTk5N0E1MkUzNDIzRjJDOTcyQkMxCi06MTBGREEwMDAyQTlDRDU3OUFBRjBFQUVDMjVCRTU1NkE3QzUxQjcxRThCCi06MTBGREIwMDAyOTUwODY5N0UzMUYxOUNFRUUzNzRBMUQ5NzYwODg5NTI0Ci06MTBGREMwMDBENEI4MERFQjlERUQ3QTU0NzlEQkRCQkE1NDM5NkI1QzFBCi06MTBGREQwMDA5RjJBNkZENTc1QUE3MjU3NURFRjM4MkE0ODUwMUVDMjA4Ci06MTBGREUwMDA1QjBGMDJEODBCMzUzQUZEQjcxNDZFMjg2OENGN0RBQzk3Ci06MTBGREYwMDBCN0U4RjJFMzlEQkZEM0Q1QkYzODc1QTFBRUZDMTI3OTQ5Ci06MTBGRTAwMDA5OUFFRkMzMkQ3MkE1REZFMzdFRTNGMThGNEY4NzVCQThBCi06MTBGRTEwMDBGMjJBRTUzMTVENzk0OTMwNTAwRTdBRjZERjlCMkEzMUJFCi06MTBGRTIwMDA3RUZCQzJDM0REQUY0MkRFREZFNEM0RkM4RUE2NTQ0Q0QxCi06MTBGRTMwMDA3NzM2QzlDOERGQkI5QjVDOThFRTY5NzJFM0Y3RkY2ODUxCi06MTBGRTQwMDAyQUM2RjQ4RDI2MDVEMzQwOTMwNzUzQTM1Qzk4RjQ5N0Y0Ci06MTBGRTUwMDBBQjI0RDBEMzhCMDNFREE4RkY2NzhEQTgzOTA2RjI3MEQxCi06MTBGRTYwMDBBRkM5RDc2Q0E3NzAzQUVGM0RBNjhGMTM5RjcxM0ZGRUM1Ci06MTBGRTcwMDBFNjgzM0I2MTVGNzdCMjdCNEQyRDVENjMwNTM5ODIzRTQyCi06MTBGRTgwMDBFN0EwRkI5REEyQTExN0M3QzQyMDgxRjM2NDA3ODkxQ0NBCi06MTBGRTkwMDA2N0Y5QzU3MDc2OEU4QkYxNzk5NDM2QTc1QUQ5M0JCNjNGCi06MTBGRUEwMDA1M0E3MEExODhGMzg5NUIwRkIwOTM0RjVEN0QwRjI0OTFCCi06MTBGRUIwMDAxMkYxQzJGRTVGNjU5M0YwRkM4OUYwRkJDMjUzRDgzNEE3Ci06MTBGRUMwMDBFMTNENzU2RjE0RUNERjg5RkRGMDdFRDI2NEY4NDhFNzAwCi06MTBGRUQwMDAyQjJBMjJDNkIxNEUyOTdFMURFM0ZGQUVCMUIxQkY5M0RFCi06MTBGRUUwMDA3NUY1OUU0NUZGQkE5Mzk2OTMxNkVGNjg3NkZGNDE3REIwCi06MTBGRUYwMDAyN0U0NUREM0Q5RTgwRDVGQzA5RDAyMzgwRjEyRENFQzFBCi06MTBGRjAwMDBFRkE0QzQ0QjZFQURGRUFGQTZCQjg2MzNGRDdGNTIzMzZDCi06MTBGRjEwMDBCRjFGQjA4RkEwMUVBN0YyMjM1RDVGMkJDQzVGRTU4QkM4Ci06MTBGRjIwMDAyQUE3RTQxRkVDODBGRDdFNTUzOUQ0QUYzQjI4MjM1QzIzCi06MTBGRjMwMDA1NEJFNTBGOTQwQjVGRjU0M0UxODJGM0VEMTBDRjU0RjNBCi06MTBGRjQwMDAxQzYyRUY5MjlENzdBQ0U2RjA1RkU4MzhGRjAzRjIwN0EyCi06MTBGRjUwMDAyMzNFMDA4MDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMDBFCi06MTBGRjYwMDAwMDBCQjUzQTA5NzA1NDU1QjZFN0Y1RUIyREE0OTM3NDIwCi06MTBGRjcwMDA0MjgwODRDRDBFMTEwQzY0RUI3NEQyMTBCNkUxOTExMDY2Ci06MTBGRjgwMDBEQzEwMUJENDJGMjA0MjAzMzI2MTRENjJDMDJGOEVGRTQ1Ci06MTBGRjkwMDBFQUM2MzAxOEY4RDY5RjhDNUE3RUZEQTJENTMwODJDQ0E2Ci06MTBGRkEwMDA2ODE1MTk0ODMwMzM0M0IwNDE4RDMwRTM0ODU0NTA5MEMwCi06MTBGRkIwMDA4ODJEMzIyQ0RGODQ4RTJDMjIzMzU0RjlDRjM5RjczRDMzCi06MTBGRkMwMDBCQTVGMjc2MUIxQkU0OUE1NEVFRUYyRUUzREZCRjYxRUNCCi06MTBGRkQwMDA1Q0Y5NTE4MkJFMDAyQkFEMDBFMDAwMjhFRUFDMkI0RDQ5Ci06MTBGRkUwMDBDMjdGMEI4MkY1NjBBNDM5RkNGOTExRkYwQUY3MzU4MTU1Ci06MTBGRkYwMDAzMTJCMzIxRUYzNDNGREJCQjQ2RkI3Q0YwQjQ2MTNDMDlBCi06MDIwMDAwMDIxMDAwRUMKLToxMDAwMDAwMDJFREYwQzg2NDFERjIyMzAwRTA1RDhFQkFCRTJGMTdCMTAKLToxMDAwMTAwMEJFNTUzQzZFRjFGOTE5RUVGM0Q1MzJGQ0FCQUY4RUQ3N0QKLToxMDAwMjAwMDNGRjRCREM0RTM4RjdDMDE4NkFEQkVBRDNDRkY5NkQzRUIKLToxMDAwMzAwMDBFRDAwN0UwNDI2QjY5M0Y2RjBFNDA5QTNBMDZFQkM0NjAKLToxMDAwNDAwMDM0NEYwMjQyQTM4MDMzMDgyMTE3NDIyQjk4NTI1MzExOTgKLToxMDAwNTAwMENFOTA5QzM1QzBGMzdFNDg2MTE4RjRFMkZBQjJCNEJGOEEKLToxMDAwNjAwMDgwQjEzN0EzRUZCMTIyQkQwRjgwRkE5M0RBREIwODIzMEEKLToxMDAwNzAwMDAxRUUwNzQxRkYwM0M1N0ZCQjJDMjVEMkMwOUIyNTE1OTAKLToxMDAwODAwMDAxQ0M0QUVCMDVFQjI1ODA4N0MwOUYzQjBGRTE4Q0YyNEEKLToxMDAwOTAwMDNBRDM1ODg5RDYyN0Q5NEYyMjNGMjRGRjE3ODYxRkIzNUEKLToxMDAwQTAwMDkxMjdGNDMzQTEyQjQ0NDRFMUE0QzYzNzE5NjA4OTZEMkMKLToxMDAwQjAwMDhEMTk4NjAwMjA5NzhFODc5MEJGMDY5MEUwQzcwQzgwMzAKLToxMDAwQzAwMEM1MTAzNDAzQURCRjZFM0ExRThBRTJGMzUyODAwQ0M4RUQKLToxMDAwRDAwMDQ0RkNERjMyRjE3RTZEMUVFOEY5QTg3M0U1NTIxOThBRkYKLToxMDAwRTAwMDUzODg2RjBFRTZEMzcyMDhGMTc5MTZGOTUxNjc5NThEMzIKLToxMDAwRjAwMEVFQUIzM0QzMzlCMUY3MkVCMUJENjdDNjQxMzdGN0I2OTIKLToxMDAxMDAwMEYyRjNEN0JCNTc5MzUzMDVDMDNDREFCRjI2NERBOURCQUEKLToxMDAxMTAwMDgzRTcyRUVGRDUzNjQ3MzY3NEMzMEZCQkIxRjNFQTc5QzgKLToxMDAxMjAwMEM4ODdEQUUxRjhCQzFCRjE0Rjk4NjRGNTIyOUU2NUIyRUUKLToxMDAxMzAwMDBEMEMyOEM3NzA0MDBFNThGMDlDNDUxOTc1ODk3NDJFMTcKLToxMDAxNDAwMDJBNjYyMkUwRkNFMjY2OTlFNTAxNDZDNTk4OEU3MjJCOEMKLToxMDAxNTAwMDU3RTVENjBFQzFDRjQ4MkVFNUUzQ0FBNzAwQ0E2RkQxMzYKLToxMDAxNjAwMDA2M0QzRDRCNkMyNzk4RUYxNzYxNTdCN0Y0NTZDMEIzNjcKLToxMDAxNzAwMERGQzk4OTVERTlBRDE4NzdGQjI5M0FBRjQyRTUxQkNGQUUKLToxMDAxODAwMDIzNUVBQkRBQTQ2REVGNDVFRDVCRUE0QzQ4M0QxOThGNzkKLToxMDAxOTAwMEZGOEM4MjUxQzQxN0E0QzMxOTQ0RkQzOTc3NTA3NjVBOTUKLToxMDAxQTAwMEEwNjdGRDM4RUIwM0Q2Rjc0QjNFRDhGNjFFRUFGRkQ5MjEKLToxMDAxQjAwMDJCMzhEMTFGRUREMTU5RjI5MjdGRENDRjI3Mzc2M0ExQzUKLToxMDAxQzAwMDY3QjU5M0VDMDlGNTg0RUM0ODkzRTM1QUQ0MjE0MEJDMUQKLToxMDAxRDAwMEQ3OTY1ODAzN0VFNDY3RDg2RDM3RDJGRDYxMjk1MDkzRDYKLToxMDAxRTAwMDQ4NzJCOTBDQ0VENUM4RUY4OUJCM0UzODRDNzYzMkQxQjcKLToxMDAxRjAwMDZBMEIxMkRGOTA4OEY2NjhCOTRFNjgxN0QzRTM0RjA0OTQKLToxMDAyMDAwMDZBMTI3MEZGRDgzNkJGNEM2NjNCRkFBMEI3QzY4NkUzQzkKLToxMDAyMTAwMDUxMUYyQTI4NjlGNDMzRUY3OTY0OTJGQjc2NUYxM0YzNTgKLToxMDAyMjAwMEExREU1N0NGMzA2MjNGQjdCMjlENDEzQUNFNjVERUI4MEUKLToxMDAyMzAwMDlEQzEyMzU2MDNGOUI1MTUyQTRFMzVDOTUwNjc0MDg3MkQKLToxMDAyNDAwMDc1REUzNjU5NEU0MDNBQ0UwN0MxNDlGMzA1MDcxRDM1RDQKLToxMDAyNTAwMDg0NTc2MTlCMjIyNzIyNUVFRTEzREUxQUMyN0IyRDhBMTEKLToxMDAyNjAwMDQxNDFDMThENkFGN0NCNDkzODZGMzE0MkQwODI3RUM0OUIKLToxMDAyNzAwMDkyNjYwMDI1OEFBRkEzMkYwNDZBQzgwRjZBN0VFREVENEYKLToxMDAyODAwMDM4QzFDNzA5NTdFQTY1RjI1Qjc2QjM3N0VCNDZFNDI3RDYKLToxMDAyOTAwMEZDMzlDRUI5RDlEMTE1RUYxRDRFMDNFQkZGQjExNENGMDgKLToxMDAyQTAwMDBFOTY4N0NEMzFDQzkzNEJGQUQzQkVFNTE1RDI5Rjg2RkYKLToxMDAyQjAwMDc4QTcwNTlGODMxODNGQURGOTQ1RUQxQzhENkYxQTFGNzgKLToxMDAyQzAwMDJCRURFNzUxQzZBODA3QUJDRUIzREY4QkJEQjdEMjAwOEQKLToxMDAyRDAwMERFN0FFNEJCQUJENDUxNTg4REU3QjRBRjg2QjlEMzcwQTYKLToxMDAyRTAwMDVDNjc0Mjk4RDM3NUZGQkJBRTkyMTZDMkFGNEMxRUQ3NjcKLToxMDAyRjAwMEFBMTA1RTc2QzMzNUY1QkE3MkQ1Nzc3QzdGOEZFQkVBQUMKLToxMDAzMDAwMEZEOTVDRDZFRkI3QzVCNjRERTU4MjAwOTNGMEY0NkZCRkMKLToxMDAzMTAwMDQ5NkI0NDlFMzcyQUY3RjE5RDMzNzQ3MTZCQzIwRjVFQUYKLToxMDAzMjAwMDVEREM5QTg4OUUzNjdBQkRENEZBQTg2RTVDNjY3RjQyMDAKLToxMDAzMzAwMEI3RkZGNkI0RDVCQUY1M0IxREVCNzRFQjc3NjdGRDU2MDYKLToxMDAzNDAwMDM3QkVDN0Y5QjI2RUZGQkRDNTFCNzVFQkQzOTRERkVCQUIKLToxMDAzNTAwMEQ2QTdDQUEwNDg2ODczQjk1MkMwNDQ3NjM2MTNFQTE5QzIKLToxMDAzNjAwMENFODY1Njg2NzNBMDkzQTExNzM1ODlFMDdDNzAzMjdDQzcKLToxMDAzNzAwMDA0M0MwQ0U3QjhCQ0ZGMjJCOTg0NEQ5RDdEQzlFRTNCMUYKLToxMDAzODAwMDc2RkUyQjg3RjRBMkUzMTc2M0VEMTk4RTQ4NUNENkUyNjQKLToxMDAzOTAwMEY0Q0RDNkUzNUU2Njk0NTMzN0ZBOTA1ODYwNjAzOTY5Q0QKLToxMDAzQTAwMEZFQkU0N0Y5QzRGOEZCNzAwMUZBMTNDNDczQkRBMTczMTQKLToxMDAzQjAwMENFNUY1MDhGRkNCQjJERjZDRDUxRkUwNDM1RDI0MEYxRkYKLToxMDAzQzAwMDU4QjNEQjlFRkM0Qjk5MTE1MzAxQjRDN0FEMDZFNzgxQ0UKLToxMDAzRDAwMDE1NzRDRTQ3QkRBMTNCRkJEMkUwRDQxRjkwRDFBODhGQUUKLToxMDAzRTAwMDQ5QjM0M0M2MjFBODZGMTc1MzE0NDcwMUUyRUY3RjY2NTQKLToxMDAzRjAwMDVDRjJDOTZDRDVCRkRDODI3MkY4REFDMEZFMEYxNjRCMTYKLToxMDA0MDAwMDgxQTE0ODU3NTM4MzE4RTcyRTRDMEU0ODlDMDcwNDU5ODYKLToxMDA0MTAwMDFFMEY0M0M4NDQ3NENDMDU2MDdGM0IwRjFDMEMxNzgwMzMKLToxMDA0MjAwMEMyNzJDMTkzRTNGM0QwQ0YyQzZDMzBCQUQ2MjM1RUY5RkQKLToxMDA0MzAwMDI5OUQ0M0M4Q0U3MjQ3MUY0OTkxRjBGRTNDNzQyRkE0RkEKLToxMDA0NDAwMEZGRjkwNkE4QTUzQzQ1QzM3MzQxODFGMDA3NEYxNjI4NjQKLToxMDA0NTAwMDQ1MDU2RTdBQUU3NUZERjM3ODdGNjdBMzAxMzZFMTM5MDUKLToxMDA0NjAwMEE3NDYzRkYxNEI4ODhBQUIyRkJCNEE0NkQzQkU2RDEyREQKLToxMDA0NzAwMDI4MTQxRkZEQ0Q5NkMwRTYwQ0JBQkZCMzJGRjk3NTZERDkKLToxMDA0ODAwMERGMUM1N0U5MDREQTM3QjkwMEY4N0NBODdGMDc4OENGNkEKLToxMDA0OTAwMEQzRUM4MkE3MzBBOTBGRjMwMDlGMUI0Q0ZFQTdBQjlEQTYKLToxMDA0QTAwMEY5NTlERUY5MTQxRkZBODM5ODI4RTY3Qjc5RkM2MEMxQkMKLToxMDA0QjAwMEU2MTk2QjcyOTgxRTNGRTU2MzJGQkJCQzFFQzZERjhDMkUKLToxMDA0QzAwMDJFOERGMDdGRDUxMkQ4QzQ3OTUzRDU2MDA5RjEyQzdGRDkKLToxMDA0RDAwMENENjJBMDM4N0UwNEZEMkNEQzA2NzBENDY3NjVGOEE1REIKLToxMDA0RTAwMENGQ0VGMDJCNUYxQUMzQUY3RDBFODZERkY4QjIxODJFODkKLToxMDA0RjAwMEZDMDEwOTQwMzkxRTJFNTBFNjkyRkM3QUEyQTM2NzdGQzgKLToxMDA1MDAwMDIxRTgwODRCMzBBM0RFRDY3NTdEODZBQUQ3NzkwRDI3NjIKLToxMDA1MTAwMDlFOEUyNzNENjg5MjlENDMxMTg1REM0NjU0MzhDNEZCNkUKLToxMDA1MjAwMEVDQUU1MTAxMzkyMzlBQUZERTY1ODQ0NzVFRDNBN0NGODUKLToxMDA1MzAwMDhEMkRBMkU3OEM3NjA5Rjc5RjZEM0FERjk3RUMzMDE2ODgKLToxMDA1NDAwMEJGQUJGQzY4MzYwQjdFQThGODZFNEI2RTVENEZDRjZGNkQKLToxMDA1NTAwMDZCMUM0MjE4QTIzRjAwQTE4NzI0NEZBOTNCM0E1NkIzMTcKLToxMDA1NjAwMDFDRjMwQjQ0QkNCOUQ3RDI1OTY0Qjc0NUU4MDM0QTE1MEMKLToxMDA1NzAwMDMwNUU1NEFCRjFBMjRDQkU5MjE4NDI3Q0E2RDFCOUEzMTYKLToxMDA1ODAwMDQ5QUY2RjNENDBGN0Y5RjdDOTMwOTRGNTEzRTY3QUEyMDkKLToxMDA1OTAwMEVDRkM3NTk1MEYxQUNDNkQzNjdCMDI3OEZFQjZFNkNGNzMKLToxMDA1QTAwMEE2REY4RDdDOTgzQUU2NEVCNzFDNjU2RjJGMTAxMzY4NTYKLToxMDA1QjAwMERGRThDQkZGRjM3QzJBRUZCN0QzNTUzMzYxNjM5OTFEOTYKLToxMDA1QzAwMEY3M0Q2NERERjMzRUIxRTA2MUZCRDc2NUM5Mzg5RTlCMjIKLToxMDA1RDAwMDI2QjUxMDlDRTdDODk4OUNFMjIwNzQwMzRDQ0Y4MkFDRUYKLToxMDA1RTAwMDg5MkRBNDYyNTM5Q0QzQ0M5NDE3NEMyNEEzOEFGMjlGRTgKLToxMDA1RjAwMEE1NTY0Q0IyNzRGRUJBQjc2RTdDN0JEQTAwRERGRTNCQ0EKLToxMDA2MDAwMDFEOTlCQUY1QkJCM0IyNzVFQkRBQkQ1MzlDODVCQTdEQzMKLToxMDA2MTAwMDY0QUY5NDM3MjMxRDJDNzdEODJDMDc4NjRBQTQwNzE3N0MKLToxMDA2MjAwMEJFNThDQUY0Q0YyQzIyRkFDM0M4M0YzMzI2MDBBNzhCOEEKLToxMDA2MzAwMEQ3QkRGODNDQjk4REM2QkQ4OTY0OUZCMUY5RTlCMkU2NzIKLToxMDA2NDAwMERGQjUyODhFOUVGM0QzMEFGMDI0MDVBNTlFRjNEMjlFMzMKLToxMDA2NTAwMEYyQkExQkNENEZEMThGM0M0NzdFMjQ3RkU3RkRGNjFBQkYKLToxMDA2NjAwMEM0NjNEQkU4Q0JGRDFENDhERkRFMDJDQzVCQzlGRkM1MDAKLToxMDA2NzAwMEU0QUQ2MTM1NkY4REQ1QTNBQkZBMkEzOTg0RkVFQzk3RDIKLToxMDA2ODAwMEQ5RUY2QUY5NkJBQzFFMDEzQzJERkM4RDBBNkZENkRFRUEKLToxMDA2OTAwMEE3N0UyMkUyQ0YzRkM4RUU3QjQ3RUJCNzBBMDMwNUJBM0QKLToxMDA2QTAwMDc4OTE2RkM2Nzg4MEYyRTlGQ0JCMEM5QjY4RTIwQUUyQTUKLToxMDA2QjAwMEExQzkyMTMzQTJGRkYwQzhDNkY3RDM4Qjc4REU0RkY5NkEKLToxMDA2QzAwMDY5MDVDNTA3M0NGRjBBRTUxRjg0RUZCMjNERUZBN0E3MDgKLToxMDA2RDAwMDQ2RDY2MUU1RDdCQUZERjA5NEQ0QTIxQkFGQzlEMDhGM0UKLToxMDA2RTAwMDlGOUREODEyRkQ3QzRGRkVBODdDQzNBMzY2MkZGQUU5MUMKLToxMDA2RjAwMEYyMTcyNDI1RDA4RDNGRDJGMDI5REIxQkE3OTBERjM0RTEKLToxMDA3MDAwMEVFQjI3MDVENTQ2MTU3NDBCMTUxRjY4MzcxQTQ5QkY4MEQKLToxMDA3MTAwMEFDRjk4Nzk5MzI1NDc1RTdFNzJDMkU5MTY3NEREOTFCQjgKLToxMDA3MjAwMDA3RjI0RjM4RjcwOEVBMEFFMUUzN0Y1QkM0OUIyMzQ5RUQKLToxMDA3MzAwMDBBNzhBMkVFNDk3MTA5QkMzQjkyRUJGRUUzN0JEQ0Q3NjEKLToxMDA3NDAwMEYxMjc3MDEyRUIzQjkyODVERkNENkIzODY1MzA1MEZDQTIKLToxMDA3NTAwMEVCMjVGNDI1Q0YxRTMyQTQyMDBDMkY4QUY3MDNEQTUzQTEKLToxMDA3NjAwMEU1RTIwNEJGMjExRkQ3ODc3NDdFNjY0NUQxRjdERjlFN0YKLToxMDA3NzAwMEZDQjIxNUU1RjY4NUMxQTA4QjNGNjFGMjc5MzhDRTc0RTUKLToxMDA3ODAwMDI1Q0Y1QzgzRkZERkJEMzcyRTY4RjgwOUY0NjQ2MkNDQTcKLToxMDA3OTAwMDYyN0Y1QTIyRUM3RTBFRTk4REI4NDcwMTc0Mzk5NUJGMEQKLToxMDA3QTAwMDA2RUQ1RTg1RkMwNEQxNEZFM0Q5REI1MzhGQkM0MDc5NjUKLToxMDA3QjAwMEVDN0VFMTA3NzBEOTE2NUI5NzNFMTQ1NTk3QzIwNjYxMkYKLToxMDA3QzAwMEJGNTZGQ0E1M0NBNjAyMDI5MzZENTRGRjA3RDFGRUUxODMKLToxMDA3RDAwMEU3QjNGRjA5MkU1QkM0Q0U2RkVCNkFENzlBREQ1NzFFRDUKLToxMDA3RTAwMDEyNzY3RjZFRDdDNTRGQzhDRjlGQzNGODE3NkRGNzFBMjMKLToxMDA3RjAwMERGMzQ3QkFGN0M0OTY2QkJENEU2Q0ZFRTkyRUYwODc0NjIKLToxMDA4MDAwMEMzRTdFMUFBQkU4MUUyNjQ3QkFEQjY4QjdCQUJDNzVGNzkKLToxMDA4MTAwMDlBNEU3MUFFQkExOTI1MjQ3NUJENDc4Mzk1QjUzMjM4MDUKLToxMDA4MjAwMEEyRUVEOUI2REJCMjI4NjA4QkQwMTFENkUyNkJGM0M1NEQKLToxMDA4MzAwMDk0ODkzOTAyQUVBNkY4MEI3NUFBRkYxMTc5MERDNjU1MzkKLToxMDA4NDAwMDUzMkFDNUQ1Njk5MjczMzM4MjQzQ0RGRDRBODg3Rjg3ODkKLToxMDA4NTAwMDI0MDgzQTVDN0NDNEZENTZDNEVGM0U3MTFDQ0REQjI4RjUKLToxMDA4NjAwMDNGODNCNDJDMjNERDMzNUQ5NUVCN0Q2QTlGRTg4MUU2MDEKLToxMDA4NzAwMDA3ODY5MkJGRkZBQzYxRkUyMTA1OTc1NkI4MzI5OUNFMkMKLToxMDA4ODAwMDA3QzFDRkY5RTFBMTY0Q0ZBMDE1ODhFN0Q0MUFBMUU3ODkKLToxMDA4OTAwMDg3OTIzQkRCQTlBRjc0Njg3Q0JDNTQyM0YxRjk2QkEyNEYKLToxMDA4QTAwMEYzQkY0MzI2Q0ZBMDJBQTY0QkVEMkYyOTIzRTQxRkUzNTUKLToxMDA4QjAwMDZGQTJFRTU1RkQyMkNBRDMyRjg5M0E4REVEQzA5OEZFNjYKLToxMDA4QzAwMDJDRjcwQjE2NDNBMDQ1QzE3QjJCOUM0MUNFNTM5NzgyM0UKLToxMDA4RDAwMEE4RUY2M0YzRjQ4QTcxREY5QTI5M0VDNEQ2OTUxMzlCN0YKLToxMDA4RTAwMEY2MUM5NkYyQkFFOTQ3QzRFOEVERjVGQTBGQjFGNTZDREIKLToxMDA4RjAwMDRGNzlGRUM1MTRDRjhCQUVBODNFNjA2Q0JFN0UzNTJGRkYKLToxMDA5MDAwMEQ1RjJBQUNERjE4MTREODhDRkJCRTNGRkZCRUM1MjFDQTEKLToxMDA5MTAwMEFGREMxQzZGQTdGQUY5Q0M2QjE2M0ZGOUU3MzM5QjJDQzEKLToxMDA5MjAwMDAxMDlEN0NGQTQ3NEI2NTFERDcwNjY3QkFFMTM0RjgwM0EKLToxMDA5MzAwMDcyODNFM0NEQjcyOENFRkZDMUM0N0EwMUUwMTRGNjcxMEIKLToxMDA5NDAwMDU1NEYxRjNGNDZGRUFFN0E3MzgyMDQ5NDVGN0JDNUJBNTMKLToxMDA5NTAwMDU2Q0JDOTZGMjQ3MDlFQjA3ODQ3N0FDMDIyNDVFMjBDMEUKLToxMDA5NjAwMEQ5ODcwMzUzOEJEM0FGQzYyOTk0RjQ5RkQ5Nzc1RjEyRUQKLToxMDA5NzAwMEY1QTFEQTBEN0YxQ0NDN0QyREY5QTk2MzRGRTA3MzRCRjcKLToxMDA5ODAwMEI3MjRCODI4OUY4MDFDNjBCOTJEREEzNDdDMjNFNUM3RDIKLToxMDA5OTAwMDJGOUFCQzRENDQ3RkU5MUJGN0Y0Q0JBMEYzM0ZFRDAzNDYKLToxMDA5QTAwMDQ0NEY3OEQ3OEVCRTk0MUY0NUYyRjZFRUYzQkQ3M0JCNkQKLToxMDA5QjAwMDMyOTMyMDI3QzIyN0FEMkY1OEZCRkE2QTBGQzkzRDVFM0MKLToxMDA5QzAwMDcyRjBCQzExQUE5NDAxQTQxNzRERDM4MENFNzVDOTkyQzAKLToxMDA5RDAwMDQyNzZEOUI5MkU5RUYzRDQ1OEJEM0JFMDEyNzVDQTMyODcKLToxMDA5RTAwMEFEOEZEMDFCQUM2OTY0M0Y1RTYwM0U4NEQ3NjU2RjVBQTMKLToxMDA5RjAwMDhGN0MzQUU1NEE1MUUzNzVFN0IwRTlCOUQxRkFEOTU2QTcKLToxMDBBMDAwMDQxRjVERkI5MEQxNkVFNkZCNEM3RTlGMzA2MEQxRTc1OUIKLToxMDBBMTAwMDI1RjNGRTcyRUIwNTVEM0ZBMTYyRDU2NUZEMzgwNzE0MzUKLToxMDBBMjAwMEYyM0JBRTFBNDdFMUEzMDg1N0E4RkNFRjE4RTEzOUU2RkMKLToxMDBBMzAwMDQyM0M5N0Q0RkY3NkU3ODdDQzk3MERGRkZFMDVEREJCRTAKLToxMDBBNDAwMENGMjZGQTJBMUYwQUZFQzVENjAzRTU1NkQxQkYwMEQ4MjUKLToxMDBBNTAwMEM4Rjc2QkYzQTc1RUZEM0M4RkY0RjA1NDYzRjYzMDkyNTkKLToxMDBBNjAwMEUzN0NCOUY1RTQyQjQ4RTdEOTg0RDY2MzRGMjJEQ0JFOUEKLToxMDBBNzAwMEVGMTM5NjRCMkNCRUIxN0Q5ODc2NDk2MjdBOTcxMTFEODMKLToxMDBBODAwMDM4NUZFNkY2NUMyMDM5QTMyMEI4OEU5QkJGM0U5N0Y5MEQKLToxMDBBOTAwMDU3MjZFNzI0OTExQ0MzNjdCQUFGNTczNDNDQjVGMzM1RUEKLToxMDBBQTAwMEZDQjRGM0I1N0Q1MkExOTA1NzhCREFFN0VCMzBCNzlFREIKLToxMDBBQjAwMDI1Rjk3NkVDQ0M5NkE4Q0Y3Nzc1M0VBNTM1MkYzOTRBMjcKLToxMDBBQzAwMDVGN0VBRUZFRkEyQ0I1Q0Y3MUQ4QjBGQTMxMzNFQTYzNEYKLToxMDBBRDAwMDdCRkRGMzI2NkZCNERGQkJDOUJFRkFENTdDNTAwMTg3MUUKLToxMDBBRTAwMEJEQUYwODI1MUNCNzkwMzgyMzhFQzc2QjYzMzIwNjFDMzgKLToxMDBBRjAwMDhGNTNEMTkzMDgxRkI0Q0JGMTJBODQyNURFMzRFRTlCQUIKLToxMDBCMDAwMEQzNzkwOEUzMjBDMEUzOUE4OTRFMDdDMTA5OTI4N0ZCOTUKLToxMDBCMTAwMDE3NUFERDMwMTlBQTA2MTIxRDA2NkI4OEZCN0Q2QkE4REIKLToxMDBCMjAwMENGODg3OUNCMDNDOTZCRUZDOUMwRkJENkY0ODFCNTk0RUMKLToxMDBCMzAwMENGQUMzMTA5QkJGMENGOEJFNzdBNEVFMzkzMTY2N0MwOTkKLToxMDBCNDAwMDlFQTM4QjJGNkJFQ0UwMzBFMjM5MzM4QzUwNkI0QTExNTMKLToxMDBCNTAwMEZCNkU0MTNFMUZEQTM3RkY3REVBOUY3RTZFQUNFQTQzQjMKLToxMDBCNjAwMEY3MUVCMUJEOTAyQjE5MjhDRjBCMjQ1MENERjhDNTI3MDcKLToxMDBCNzAwMDdGNzBGRjFERjcxRTA1NjUzQ0U1MTVGNzdGNjA2NUJGQkIKLToxMDBCODAwMDFGREI5RjU4MDg1RTFFOTc0M0M4NzQwMTlGRkI2QUY0RTEKLToxMDBCOTAwMDNGMzdFRjg1MDg1RDVGOERGOUJFOTFFQTg0ODc5MjlGQUMKLToxMDBCQTAwMDc2RDNGM0ZFMTJDOEEyQjg3NDI5MkUzMThGRTg1OTY1QTYKLToxMDBCQjAwMDE1RjBGMTVFODk5QjA4OUVCMURCRkNENDVGQkQxNDM3NTQKLToxMDBCQzAwMDM4NDBGMUY0MTVDOTdCNkY2MTFGN0U4RUVCNThGRkIxODEKLToxMDBCRDAwMEY4MDBDNUJCQzc2NTZGMDVGNzkzOTNDRDIwRTFGRTcwQTQKLToxMDBCRTAwMDFGOTUyRjFEQzA3QzA5OUJENEZEREYzOTc4NUM1NEVBMkEKLToxMDBCRjAwMEUyN0UyMzVDNzJCMDVGMUUxQjEzNzc4QUIyMERBMjNFQTkKLToxMDBDMDAwMEZCNTFFQzFGREY2OUQ0QzU5REEyN0NCNTlGRjMyRjA3NzQKLToxMDBDMTAwMEU3QTkxMzdFMzA1RTMzMkU3NTE0OEE3QUI3QThCN0ExODAKLToxMDBDMjAwMEFBQkI3QzcxOERCQTVFMDM0MTU5RjQ3OTQ0QkUzMEY2OUIKLToxMDBDMzAwMEFBN0UyOTMyQzlCMTQyMUQ1NzUwNUM0M0JEMEEyNzVBQ0EKLToxMDBDNDAwMEZEMzJEMjNCNzY5N0QwQjNCMUM2RTAxRTgyRTg2NTYxMzMKLToxMDBDNTAwMDE1RTUxNzREMThGNzM0M0NEMEFGNDA1QTM2RUJDMzE4QTIKLToxMDBDNjAwMDRENEZGMUFDRDlCODZGQUQ1NEM1NzU4Qzk1RjIxQTg0NUYKLToxMDBDNzAwMEVCQTU1NkM2RTMxN0QwQzk1MDUxRTM3OTA5MzgxOTRFOTAKLToxMDBDODAwMDAyMEY0M0Q0NTM4Njc3NDAxREMzQkJBMDlFRTExNDY4NzYKLToxMDBDOTAwMDE1RjE3RjQ0QjA4NkUzMUEzQzY1RTdGNzE4Nzc5NjFCOTkKLToxMDBDQTAwMDI4RUYyODdBQjBGQkZBNjFDQjc1Rjk4MDg2MzdGMkU2MzcKLToxMDBDQjAwMEY5MzAxOUQwRkUzMkJCRTFDN0MwMkNGNjIzQjFGQzg4NTUKLToxMDBDQzAwMEI1RDNGMTEwOTJEOTRFQzk0MTY0NTJGRkMwQzFGNjVBNTIKLToxMDBDRDAwMDBBMEE4RkNCNkU5MDBGQzUyMUFGOTFGQjM3QjFGQzI4NkMKLToxMDBDRTAwMEVENUUyRkI2QTlGQzU4NDBCQUQ2MjcyMkE3MTM4NTBFNzEKLToxMDBDRjAwMDFFNkJGMjQyRkI0QUEzM0MzNDU2OEVEQTdDNTE3Q0M5MEYKLToxMDBEMDAwMDc5MDdCQUUyQkYxNTdFMzlEMzg4RjFBQkE4QjA2NDQ1NDQKLToxMDBEMTAwMDI2OEVCRkRDRDEyMUM2NjM0Qjc2MENDMUYxNTc4NUUxMkQKLToxMDBEMjAwMDk5QzY3NEQyRUY5MjQyOTMxM0FCMThBOTczRTYyNDFDQjAKLToxMDBEMzAwMDdCQzkzRUYzMDlBMjFEOTIzRkYzOEFGQTc4QTU5QUM3QjAKLToxMDBENDAwMDc4NTczRkU2QjRBM0JENzgwN0Q5OUM0NEE3MTU5M0ZEMTcKLToxMDBENTAwMDM4RTRBMzlDMjlERTFGMEVCRTIzQjhENzg0RkJCRTMyMjUKLToxMDBENjAwMDc5NUJDODdFOTc1QjgzODkwRUU0RkZDQUQ1NjVGREM4QjEKLToxMDBENzAwMDc1M0U2MzE2RkIyRDE2RDE3RkQ1RThDMzc5N0YxQzhFOTcKLToxMDBEODAwMEI3NkZDRjVFMjEwREI5M0UxRTc4RkU0MTNBREZCQjdBQzgKLToxMDBEOTAwMEE4OUZFQ0Q3REIyODM5ODU2NDRCRkFDRDQwMUVCNkI3NDcKLToxMDBEQTAwMDlBODBGQUE2REE3RDRGOERGMDFFQTFGREUwNzBCMkZGQTkKLToxMDBEQjAwMDFFQTBFNjM5RUREQkIzQjM0OTRFMjcwQUQ1RjdDM0E5MjgKLToxMDBEQzAwMDE5ODVDNEM3QTMyMzNDMjc2ODdGMzg0MUU4REIwOThBMUIKLToxMDBERDAwMEU1RUU5RUExQUQ0ODM5NUVEOENEN0NGODFGODgwMDNFNzcKLToxMDBERTAwMDdGQjFEMDdCOUFENjJCRTNBRjcwREMzRjVCRjBFOURBQzIKLToxMDBERjAwMDUwNDY0NDZGMjUxNERBNkNBNEJGNDY4MTgwOTlFM0MzNDIKLToxMDBFMDAwMDM4RkJENTNDOTVGQ0RENDIzQzA3Rjk1MUU0RjFENjkwMjYKLToxMDBFMTAwMDhCMUIzNUJCNzMyNEY5NTUzQ0Y3M0M5RjZCMEUwRDJFOTUKLToxMDBFMjAwMEMwRTc1RUI4RUY5ODU5RThERDQwQTE3N0FBNUY2QURFQjcKLToxMDBFMzAwMEJERkZDOTAxNjJFODgxMjgzQkFCREM3REY5RkJBM0M4OUIKLToxMDBFNDAwMEJGQ0E3MzM2Mjc2RDhGRDhEN0NCMkJCOERFMDQ5QkNFQTUKLToxMDBFNTAwMDhGNjg3NjM3QTZDOUMyRjlGNkQ4NURDMzE3RDJCRUYxM0UKLToxMDBFNjAwMDlGQjY2NTEyNUQxM0RBNDJGQzNFMkNEQ0ZDRjkwMDgxNzIKLToxMDBFNzAwMDg3NTY4NzVDOTI3RTRBM0MzRUE1QzY4OTUzNTYxMTE3MTkKLToxMDBFODAwMEU4RkQyRUQ3N0I4REUyRkQ2RUI1REFFN0FDNkU5NjAyRkIKLToxMDBFOTAwMDdFRjYzRkEyN0U1RUE0RDJCNzdDN0Y2MzBCRjU0RjE2MzEKLToxMDBFQTAwMDZENTgzMDg1RjUyODIwRUEwQTA3RkU5MjVGNTg3MjU4N0YKLToxMDBFQjAwMEQ0Q0Q0QkI3RUFFQjhENEFBQTlCNjkzRjA0Q0RBNDBGNzIKLToxMDBFQzAwMENCRUI2M0Q2Mzc5NDcyREQ1QzE5RURGRkJCQTk5Qjg3MzIKLToxMDBFRDAwMDE1QTlGREIxNDEzMDg4RTk5MjY3Mjc3OUJCRjE4N0IxNDcKLToxMDBFRTAwMDc1NzEwNTI4Qjk0NTlDRjc3QTY0QkFERjZERUNCRUZGRDEKLToxMDBFRjAwMDkwOTQyN0U5RkFCNUU1RUFEREM0MjcxQkYzQzVDQ0Y1RTQKLToxMDBGMDAwMDQ0RjVBQjJCOUM3NjFBQUI3NkJCMTE3NUE3OThGMkVEMjYKLToxMDBGMTAwMERBMDNEQzVGRDY5RUQzRUM3ODcxQURDNDc1MDc2Q0U4NUMKLToxMDBGMjAwMENEM0E5OEJGQzVBMjEwQkRGOTVCRkE3MTFEODJGNTEyQ0EKLToxMDBGMzAwMEU3ODcxQkI3NTg2QTY5NUNGM0VCNUU3RTM5OUZGQUQwOEUKLToxMDBGNDAwMDlERkRBOTBGNTMxMzg3RjlBNkU4RTc4M0U0RTIzRTBDNjEKLToxMDBGNTAwMEY3NDVFNjE3QTk3RTVGQ0QwMzIwNThBMEFCRTc2QkQ0MTkKLToxMDBGNjAwMEY4NUY5RDMwQUMxRjU2Q0U5MTdERkJEMjc1RjU0OThENTMKLToxMDBGNzAwMDlBNkYxNzExOUU5NDM3NkVFRDJGRDZFMzA0MUQ3QjNFQkEKLToxMDBGODAwMEZFQjc3OENBN0IxQjhEOUU3OEVBNkI5RjNCMzg4NEVCNUIKLToxMDBGOTAwMDk4OUVGOEVFQzYzMDA0RDc3OERGRThGRTdDNEFFNkI1QzYKLToxMDBGQTAwMEU0NTZGNDkyNTFGMDRCRDVEQjNGRkIxNEY4QzYxNDkxOTQKLToxMDBGQjAwMDhCNDY1Rjk5RkM1NkE5OTlGQTIyOEY4MDlERkEyNEQ1MTkKLToxMDBGQzAwMEZCN0Y1NzYzQTVCQTcwMUQ3MDA3RTIxQzA4N0QzRTc3NTIKLToxMDBGRDAwMERBQzBFRkNGNDc0MkQ2NkZDNkUxRDg3RERBRTgwQ0UwNDEKLToxMDBGRTAwMEYzMERBQTVGQTRGN0M4OEUyODNEQjNBOEZEREYzODQ3RUMKLToxMDBGRjAwMDJGNzA0NEQ1RDFGMTU5MjlCQTcxODJCM0JGRUVCOUE0OEIKLToxMDEwMDAwMEUyMjFCQTc1RTRGNzI2M0ExRkZDNEE2QkNFQzg0OERFRTcKLToxMDEwMTAwMDlCQUM4Q0QwM0RGNzRDRTJFNDdENkNGN0FEQkZFNEJFRjkKLToxMDEwMjAwMDU0RUYzQjVDN0E3Q0U0NUQzMkY5MDNCODIwRjJBNTYyQjAKLToxMDEwMzAwMEZDMjU3QjFCMDVGRTFBOTJDNzk4NzY3RDFFNTUxQ0FBQkYKLToxMDEwNDAwMEUzQkEzMUVFQTA1MUQ3MDdCMDVDQTcyRkY1OUM2NjVGREQKLToxMDEwNTAwMDAzNjFBMEYwMUJCMUZDRDY3RjQ3NTFCRDVGRTY3Q0FGQkEKLToxMDEwNjAwMDdBMTAyNkFBMTlEREYxRkI1NjFEQkYzNTdCRDRGOERFQjgKLToxMDEwNzAwMEM3QTNFNzdCQkYxOTdBN0VBNzdCRjVGQzFFQjA0OENGREMKLToxMDEwODAwMEVGNDE1NTdBN0VERkIyNEFDRkQ3MENCRjlFOEY5OUI1MUMKLToxMDEwOTAwMDYzNzRGQjg3RDY5NUU4QzZCN0JENzQ5NzZFRkZGMEMwNDIKLToxMDEwQTAwMDc0REQzODdCRUIyQ0RERkVEQ0ZBRjlCQUY1RkNBNjI1MDUKLToxMDEwQjAwMDM3MjRGRjgyNjBCNTZFNUZBQ0ZDMEJGN0ZERUE5QUYyNTUKLToxMDEwQzAwMEY3RTNBRjkwM0ZCMDNDOEE1MTFFNDFDN0ZGOUYxRTdDQTMKLToxMDEwRDAwMDFBQUIwNzM3RTg2N0RGMjQ5QjE1REYyNTg0RkNBNDA3REMKLToxMDEwRTAwMEM1RjFBQzI3NTNFMzg1REZGOTY4REZCOTgzMEE4RTBGQkEKLToxMDEwRjAwMDM4MEE0RDY5OTQ2N0E5Rjk4MzQ3RjU0MzVBM0QxMzVCNTQKLToxMDExMDAwMDM3REU1QjJDQzVCQ0I3OEZEM0JEQjdCRkRFRjc3MUVFNDIKLToxMDExMTAwMEQ2QTA2RTVDNzAxMEY4RkIxN0Q3NjFFN0JCMDRERDI3MjMKLToxMDExMjAwMDE0NkU3NzhEM0M1REY1MkVDMUQxMTczODZDNzdBOTU3QjkKLToxMDExMzAwMEI1RUZFQzYyRUIyRDcwMUU2NEJGM0Y1QjdCMkY0MzQ2MjcKLToxMDExNDAwMDMxQjI2QjdGNTJBQkM3QjQzQTM3QjZGRUQ1RUFERUFFRUEKLToxMDExNTAwMDc1OUFDODYzQkFENjFCQ0UzNDIzRTdEMTVFQ0VBQjNGQjcKLToxMDExNjAwMDkwQkNEQ0U3N0M2NUI4RDdFNjc2NTMxMTgwNzVCMjgxMTgKLToxMDExNzAwMEVBRTQ1MDhENjBBNjAyRjQxRTNBNENGRjczMTJGMkVDQzIKLToxMDExODAwMDJDRUFDNzg3OTM4MUZCRTdDQUVBREE1OTdFMUJBMzZGNzMKLToxMDExOTAwMDBGOEQxNEVEMjNGQUI5RDVFREVERUI0NkI5MUU5N0VDQTIKLToxMDExQTAwMDZCMEJGMUQ5OEZDNjdDM0I5OEYyOTE3NEI3Rjg1RUNDOEIKLToxMDExQjAwMDIyMjNBNzMwMkVGNTlCQUQwMENENUY0QzUxRkFEM0ZEMTUKLToxMDExQzAwMDVBQkZBNDI3QkQ4OUZEQ0VBOEMxMTc2NDY4QjQzQkY5RjYKLToxMDExRDAwMDNCQTREOEZFNjJDOEUwRTBGQ0Q0RkYyQjg5QkZERkY5NTYKLToxMDExRTAwMDk2OTAxQjFEQzk2M0NFRDU5QTM4OEYwMUI1OUU3RjU4NDYKLToxMDExRjAwMEU1QkZENkY3OThBREQyNzMxQzhGNTg4NDcxRjlFMUE2N0MKLToxMDEyMDAwMDBGNTgyRTRCRDNEQUQ1N0U0OTE1RTdFMzBCMDZEQTVDOEYKLToxMDEyMTAwMEZDNUQ5QjUyRTgxNDdEMzJBRDBGMzI0MEJFOTlCQ0VCQjEKLToxMDEyMjAwMDdBRjQyRjREM0JBM0VCNDNDMTVCQkQ2RkU4N0Q3OTg0MUUKLToxMDEyMzAwMDZFNzFGRUYxNzVBMjlGNzk3Q0REMjBFRTlGNDdDRTNGNTcKLToxMDEyNDAwMENCRkRBODg3QUIzRUQ2RDlDN0RDNTU0Nzc0RjYzMENGNjcKLToxMDEyNTAwMEZGQjU2RTNEOTREQTY5QTJGRTYzNjg2N0ZBRTQ4NzkwOTEKLToxMDEyNjAwMDdGMUQ4RDk2OTEyNDBGRDQ4MzA3REQ1MUZEQjdEMEJBMzEKLToxMDEyNzAwMEVDNDk3NEVGRjVFOUZDOTZGMTY4RjNCNUIyN0MzNTNBQzgKLToxMDEyODAwMDhGRjkwRUYzMzhFNDBCQzU3QzY3MjZFOEQ0RkExQzFBRjQKLToxMDEyOTAwMDM0RUY4NTJDMjNCRDRGOTQ3QTM5QTlBRkRDNTNGRjQzM0IKLToxMDEyQTAwMEIzQjNGM0VFMjFBQzlGOTcwQzhFOTNBMjRGNTQzNThBQzMKLToxMDEyQjAwMEYyQkZCNjg5N0Q0QjA4RUZCNjQxNjZBMzgwQzNDNDM4NDAKLToxMDEyQzAwMEJERDgyQUM2OTNFRjIwMTgzNkQ5NkFBOTJGRDIyNjg5MEQKLToxMDEyRDAwMEVGODI2NjRCQ0E2QkYzRjBERUM3ODY3QjU3OTE3RTU3NzEKLToxMDEyRTAwMDJFRTlDQzIzRkJBQkNDMEZDRDkxRjBGQ0IzN0RCQzRGRjIKLToxMDEyRjAwMDEyN0YyNDJDMkZEMjUzOTgwRUZFN0VFQ0I0QzE5RjI3NzAKLToxMDEzMDAwMEExQTlCQ0RENzg3NDE2RDU4REE3N0JGOUNGNTI4NkIyMjIKLToxMDEzMTAwMENERkRGOTJDQUExQjRGOUI4NTNEQkVEMzE4OUNFNUE3OUMKLToxMDEzMjAwMEZBMDkwRjIzM0FGRDdGOTI0NDdGQ0ExNjMyNEZDMzczRTYKLToxMDEzMzAwMDkyRkE3ODlGQTFGM0U5QkIzMDdBQkY0N0YzQTQ5RjVBOTIKLToxMDEzNDAwMEJGMzQ2QzEyNzk2MjU4Q0QxN0ZGQ0IyREYyRDlERkI4QkMKLToxMDEzNTAwMEM1RkIzRjBERkU5RURFQzFFMERGM0IwNEQ5NUYzRjNCOTYKLToxMDEzNjAwMDhDRkFFOUU3MzY1ODgwRjI1QkJDNUYzMTE0NDVCRTVGMEEKLToxMDEzNzAwMEU5OEJCNDUwMUVGQkJFNTlENDk5QUU3NzJDNDFGMjUzODEKLToxMDEzODAwMDVBNUY3NTkzM0I4M0NGNDlDRDE0RkREMkQ0RkY0NEJGNDAKLToxMDEzOTAwMDQ1NzYxODZBMUQzQzJEMjEwQURGODNDMDdERUMwRUVBREMKLToxMDEzQTAwMDQ3NDdGNUIxMzdCOTQ1M0YxNDFFMTE3RUFGNjNERDAwRTUKLToxMDEzQjAwMEVFQjcyRkRGN0ZGQzE4RjlBRjMyQjc3NzBCRDEzRERGRTcKLToxMDEzQzAwMEUwMTg0OTdFNkY3OUUyMUVFRTlCMzVCOTFEN0MyRkUyNTUKLToxMDEzRDAwMENCRjRBMjFGNUE0MzcyNUE2RTBENzE5RkVEN0E3REY1QzAKLToxMDEzRTAwMDlFRThFRjU4RDhGQTYyMEVGNzkxMUQ3OUE0MzdEQUJENUUKLToxMDEzRjAwMDg4NDc5MzNCQUFGRkFERTExMTM5RTdEQTc2QTBGNTg3N0MKLToxMDE0MDAwMEI1RjFBOTU3OUYxOUE2RjZGN0U3N0FCQTg5QUYwN0RDQjUKLToxMDE0MTAwMDIyQkY2RjMzNzVERjhGRkY1RjU1OUU1REU0NzMxQjAwNDYKLToxMDE0MjAwMEY1RkYyREJEMzBGNjIzNkMyMzNFRDFGQkRGOTk0ODBGMkQKLToxMDE0MzAwMEY3Mzc5NDAyOTJFRkYyRTkzNjI3RjE1OTNCMUZDRkYxQ0IKLToxMDE0NDAwMEZFRjExQUY3NzQ4Q0YwN0M0NjdBQkZBNDRBRjRFRkI1MkIKLToxMDE0NTAwMEY1QjAyNEU0RUE1RjI3RkFBOUNCNzcxRjM5RjYyNERFM0EKLToxMDE0NjAwMEIyRjg4RERDNDI4QTA3REFGM0IxN0M0NkZFMEVFM0VGNzgKLToxMDE0NzAwMEU4NjRGMUZFMEJGOUZCMEQ5RDFGREJCN0ZGQTk3QzBEQTYKLToxMDE0ODAwMDBGMTJFRjY5QzMxQjJGMEY3NkUwRjNDQkU5QkJCNjNDMUQKLToxMDE0OTAwMEQyMEZEMUZGODIwNjdENUYwQkY5RTVBN0ZFNDZEN0Y3OTUKLToxMDE0QTAwMDVBQzBFRkM3MkM2QTNDQjE2OENGMEYzNEVBOUU3RjMzMzUKLToxMDE0QjAwMEMxRjM0RkMyN0ZBN0VBMzc3MDdGQzA4MEY3MzdBOEZFMUQKLToxMDE0QzAwMEE5NDFBREJCNjNGQjJGMERBREEyNkZEQTkwNjZFNjNDODAKLToxMDE0RDAwMDlBRjIxRjVBRDdGMjlGOTUxRjhCQkVFOUNBMEM5MTY3RUIKLToxMDE0RTAwMDEzOUUyNDY3RTk3MDBCRTcwQjU3RkJFMjEyQzY3QkU0RkYKLToxMDE0RjAwMDYzODJEOTlCMzA5Mjc0RDJCQjgyRTM5OTdDMEJDQTk5RTgKLToxMDE1MDAwMERFODdGQ0Y1MkVCNThGMjBFMkEzNUI4RDg3NkUzQTg3RDAKLToxMDE1MTAwMEYwQ0E0OUUyMzg1OUE0REU4QkY1MDVGN0VGNDY4MzU3NDgKLToxMDE1MjAwMENEMUZENEZFREJCQTE2RUUzRkZDMUY1OTQ2QTk0QUIwQzgKLToxMDE1MzAwMDMwMDAwMDAwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwQzkKLToxMDE1NDAwMDAwMEJGQjUxQ0ZDMEYwMDMwOTQ3QjNBM0YyMEZBM0YxODcKLToxMDE1NTAwMEU3QjBBMUYyMzNCOUQwRDRCM0EwRjI4M0QwRjRBM0UzQkYKLToxMDE1NjAwMDc2MjYwNjA2NDYyNkZDNkFGMDYxMTE2NjA2MDYxOTIwRjQKLToxMDE1NzAwMDU2MDE2MjFENjZGMkNEMDE2MTIzNTEwNjg2NjIwOTA2OUQKLToxMDE1ODAwMDA2MkUyMEZENUY5QzgxQzEwQkM4MkUwMTYyNUYyMEJGMkIKLToxMDE1OTAwMDFEODg2NzAwQjExNDUwRkMwMjkwOTYxNTYzNjA3ODJFODgKLToxMDE1QTAwMDBBRDE2NzBENjQ3RjEzMjNDRjRFNEI1RUNBREMzQzhBQTEKLToxMDE1QjAwMDI5QzNFNkIyQTg3QzAxMzUwNjA2NEY3NTA2ODY4OTFBNEUKLToxMDE1QzAwMDEwQkUxRTkyRkMwQUEwOThBMDFBODQ3RDQ4MUU5OERFQzgKLToxMDE1RDAwMDgwN0M1NTU5RUNFNjFFMDZDQUVCMDJFNTc3NkFFMEI3NTcKLToxMDE1RTAwMDdGQkIwRTJBREZDMTBDOTU5RjhCMjZERkU4ODJDQUQ3MEUKLToxMDE1RjAwMDcwNDNFNUVCQjg0MzY4MDAzNTYwRDZBNEQ4MDMwMDAwMUIKLToxMDE2MDAwMDAwMDAwMDAwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwMjgKLToxMDE2MTAwMDAwMEJDRDdEMEI3QzU0RDU5OUY4Qjk4Rjk5QjkzMzk5Q0UKLToxMDE2MjAwMDk5REMyNDEzOThCQ0UwMjYwNDg4MUE2MDEyMTIxRThBRTIKLToxMDE2MzAwMDc4MTMwMjQ2MUJDMzA0RDFFMjJFREIxRDY4NkIyM0NGNTcKLToxMDE2NDAwMDAxQURDNkM3MzYxMzkyOTAyMDQ0ODI3NjVEMTYyRDFEREIKLToxMDE2NTAwMDdDMTUxNTZCNEFCMTRCQkI2QTI3NDAyQjU1QjcwRTE2NEMKLToxMDE2NjAwMDFGREREQTZFNjBGREI3NkE5NTVGNTBBOUY4NjhGOTlGRDMKLToxMDE2NzAwMEVGM0JFNzRFRUVCRDk5ODQ0N0JCRkJEQkY4QjgzOUY3OEIKLToxMDE2ODAwMDlFQzc3N0JFRjNCRENGNzc0RTlDQTQ4NEE4RTMwOTM5RUIKLToxMDE2OTAwMDAzM0Y1NzEwRjIxQUExM0ZCOTQzNEY0MjdBMDlBOTg2NzYKLToxMDE2QTAwMEU3ODAxQzlFMDJDRjE4N0ZDRjlFODFBNTdEMDJFRDAyQjAKLToxMDE2QjAwMDhBNDkzMjgzOTAyMkMyN0U4QTVBMzZBRTEzQTcxMjMyRUEKLToxMDE2QzAwMDk2ODQ3RTMxQjk5ODk2MDc5NjM1MTAzRjJEQkY3NUQ1MTMKLToxMDE2RDAwMEJCRjBEQ0I4QjhCNjdFQkU0NjQ4REU5MkJFMjM1N0QyMTkKLToxMDE2RTAwMDY3MjAxQzE3MjJFNTg0REM0NzQ0NDJGMkExQkZEMjU4OTAKLToxMDE2RjAwMDhEOTc5MDBFRThFQzUyNDJDNkM0RjJGNDU4MzkxNDc0MzcKLToxMDE3MDAwMDVBMjBFNDlCMEExRjg4ODg5QTRDQ0IzRUZDNzU2ODFFQzEKLToxMDE3MTAwMEM2OTMxMDI3NDk5NDYxNDVFMThDNkI3ODdCN0I3REUzMTAKLToxMDE3MjAwMEU5ODM3NjQ2OUQ2MkY4RkY3QTAyRjMzQjVCM0I3MjBCREUKLToxMDE3MzAwMDFCMkY0NkZGMzk0M0YxNTIzMDM0M0VGNjkzRDc2QzJBQzMKLToxMDE3NDAwMDEzQzA4RkY1QkI5RUMyRkJCQUZGOTVGMUYyNDlBNTVCQjIKLToxMDE3NTAwMEFCQTJGMzZEMTBENTM4RDQyNzdENTkzMjJEMDc1NkM5NjkKLToxMDE3NjAwMDI0MjFEMEVGNTVCRDgyNDMzQkZCQkE2QzI0QTRCRUNGRUQKLToxMDE3NzAwMDhCRjgxNTlBN0M0M0YwNUQ0NzA0OUNDRkI4M0JERURFQzYKLToxMDE3ODAwMEQ1MTUyMEU0RDQ1MjZGMDhFOTQzMjUyNDI3N0JGODdDNDMKLToxMDE3OTAwMEZFQjk5NTkwODRDQjU0NUU1QzJCNDQ3MEJDRDAyRjRBMkMKLToxMDE3QTAwMDY5RkJEODYyMzFGNDI4QzBEM0IwMjgwQkRFMUJGNTZFN0MKLToxMDE3QjAwMEUzRTMwQ0E3MEZBMkM5MTQ4RjMyQTcwRkI5NDFENEREMDAKLToxMDE3QzAwMDUzRkY3QUZBOTAyRjkwM0U3MjZGMzFCNTIzRTdCRjVFRDgKLToxMDE3RDAwMDg4RjdFQTczQTc4RkJGNzYzQzYzNUQ4N0YzNTUxQkMyMUEKLToxMDE3RTAwMDMxRUU4RTUyMzdBMUVCN0Y2RkZEQTJDQzQ4OUE3QTIzNUYKLToxMDE3RjAwMEFGNkIyNUYyN0JBMDgxRThGMTM0RUQzNkMxN0FFMjNDOTMKLToxMDE4MDAwMDYzMTY3OTgzNEZCQTNFNTI2QTc5NkZCNkFDOTczNDc2RDUKLToxMDE4MTAwMEM2OTI1REEzRTA0MzBBNThFNzZCRjRFQjZDOTFCNEI3NTIKLToxMDE4MjAwMDczNjg1MTU2NDVFODRGRTZGRDZENTQ5N0M3MDhEMDJEQjMKLToxMDE4MzAwMEQwMzZDNTg3RDQ1QjkxMjA5NDNGNDg5MDg0MUVFNTEwMzQKLToxMDE4NDAwMDg4QjRFQzU0RjVGOEREMDI5NEUyQjgyRTA2N0M0QUE5N0YKLToxMDE4NTAwMDY4MTlDRjUxRThCMUFDMDc1OTEyMTNDQ0YwM0I1QjlDMkYKLToxMDE4NjAwMDA4ODcwQzZDQzJFNTVEMTg4NTFCODMxQjg2MzgzMzAxMjUKLToxMDE4NzAwMENBNzc1QUQ2NUZGNjkyODQ5QkNBRDU0REE1OTVDNEJDNEIKLToxMDE4ODAwMDBFMDY5RDBBODI0MUE3Nzc5RTlCNUNCMThGQjdEODBBNEUKLToxMDE4OTAwMEU3MzlCN0YzQ0FEQUVGOEQzNjI1QTNCNTkzQzlFRjBENTMKLToxMDE4QTAwMDNDNTFFNEZEMEE3RTMxQUQ3Qjk3ODNFQzE3QTYxMUQyNDMKLToxMDE4QjAwMDVFQjgzMTA2NkZCQkUwN0ZCMzkxM0U0MTY4OTFBRUMyMjYKLToxMDE4QzAwMDRBMTVFODg5RUMxNjY0ODBEMzZEOTA0NzMwMUJFQkVEMjgKLToxMDE4RDAwMDIyMUFEMjUzNENCODk1NDAzREM5MUI0NjNDMTlERjQ3RUMKLToxMDE4RTAwMDg2OEJEMzVENENFRjJGQTVGRDVFQzNCQkJEODZFQjMzNkUKLToxMDE4RjAwMDUyRTU3ODdCQzA4MEJCMDRFNzMxNTRBNkYzRjhFMDc2NkMKLToxMDE5MDAwMEZBM0Y0QTFGQjEwQTIxRkVBODMwRkM3QjAzRTg0MzJBQjQKLToxMDE5MTAwMDhGMUFFMEJENDk5RUI4MDRBQjNDNkJFMERGMEUzRUYzOEUKLToxMDE5MjAwMEM2QTRFOTk0MUU5MzIxODk4MEI4REFGMDhDNEJBRkEzNEEKLToxMDE5MzAwMEZEMUZCOTVDODhCQjA0MEUyRkFEREZDOEUxN0M1OUNGMTkKLToxMDE5NDAwMDI5MDJGQTRDRDZCOTkwN0UxQkFGRkMyNDAwRTQ3QjYyREUKLToxMDE5NTAwMEZGQUZFNDc0RkNEQTM4QzczMTA0MDdGRDZGQUQ3OTdFNjAKLToxMDE5NjAwMEY0QkYzMTMwMDZGMjY1MUREMjkxMDFEN0VBNEEwOUUxOTAKLToxMDE5NzAwMDQ4Q0UxMUUyMzBDRUExREZGRUUxOUVDQjI4OUMyRjU3NEUKLToxMDE5ODAwMDA5MjE5Nzg2RjBGQTA4MUQyRkE5N0YxNDE4NEQ0RTEwRDMKLToxMDE5OTAwMDYzN0M4REE4ODA0RkZCRjhBOUY1NTA0MjRCODAyRjlCQUMKLToxMDE5QTAwMDU1QTc3NjM3MUQ2RkE1MTQzQTBDN0E4QzhDNjVGQUExNzEKLToxMDE5QjAwMDU5OUQ1NDA3RUIyMzA5OEMzRUU2MDk3OUQ4QUVEREJCNkYKLToxMDE5QzAwMDYxMENBRUJCQjQzNEFEQkM2QUE2OEE0MkFEODRFRjVCOTkKLToxMDE5RDAwMDI2OEQwQTY3REMzMTM4NjBBMkVCOTZCNzhBRUYzOTY0NEUKLToxMDE5RTAwMDgyNzM4QUUwMEJGQzNFODNGRTMyOTNDQzg0NzVGRUQwN0EKLToxMDE5RjAwMEJCMjgzMzQxNDZFRUVGQkQ1NkE1NEQ3NjEwRjI0OUFCRkMKLToxMDFBMDAwMDc2Q0YyMUM3RjBFRjJCMjUxMkVEMkIxRkZFRkU2QTQxOEEKLToxMDFBMTAwMEUxRjg4ODM5QzEzRTMzRTY5RDlBQTczNzgwRjRCRDEyQkMKLToxMDFBMjAwMEM0MkYyNUY1OTVCQkRENkRCMjU5RkVEOEU2OTFDMkVGMDYKLToxMDFBMzAwMDA1QjY1MzAyRUI2M0Y5MUFGMDVCNjRBMTAwRkRDOEY0MkMKLToxMDFBNDAwMDlGMTk0M0ZDQjg3MjRGMTNFMzNCMUJCQzlEODFCRjBEMzQKLToxMDFBNTAwMEJDNjdFM0UzMEZCRDFCMzY4MkJEREFFRTYwRjREMjkxQzIKLToxMDFBNjAwMDJCODYzNjkwRTFGNDYyQUM4NzgxQzc3MzVEOEYyRDgyM0YKLToxMDFBNzAwMDFCRjlDM0EwQTM2NjcxRTlBOEVCN0UzNjNBQkExNUU4NTQKLToxMDFBODAwMEU4OTJGRjc5M0FCQTBGRThBOEZBRkYyNDFENkRGRkJGNkMKLToxMDFBOTAwMDQ4NDc0M0U1MkJEMTVFNThDOEZCRUExRkY4RUY2RjgzMzgKLToxMDFBQTAwMDdDN0U1RDk3NTBFRUJEM0U4N0M5RkZENzIzNEMyRTI2MjYKLToxMDFBQjAwMDQ5QTRBNzFBRjRDMTUxMDlFNTU0NTI2RkY3MjFCQ0Q0QzcKLToxMDFBQzAwMDI0ODY3OTFDODFERkU4Rjg0N0I5QkRGNDZBQUI0MjEyN0QKLToxMDFBRDAwMDkzNzFGRTQ1OEJFOEY3NTdBRkZBQTQxMEY0RDdBQjc0QjcKLToxMDFBRTAwMDZEQzFGRTI2NjQ1MEQ3NjlGQjU3NTI2NTZBODA0M0Q5QTEKLToxMDFBRjAwMENEQ0E4MzZEQTc2MzYwOUYyNzA1NTZGRTY5REI2OTNERUMKLToxMDFCMDAwMDg2RTM2REQ5NzgyNUM1RTc0MkY4OTVDMjcxREQxQzIxQzEKLToxMDFCMTAwMEFEMURGNkEyRTA2NDc4QTkyMzE2QkQ0QUQ3RTU0NTgxM0MKLToxMDFCMjAwMEQyOEJCMjk4REFBMTg4QkYzMDQxRkZCMDk0REEwOTI2OEYKLToxMDFCMzAwMEZCQTIwNTE0MThDOEU1N0ExN0VBM0Y3QkZGQUZGMDc5REUKLToxMDFCNDAwMERBRURCOEVCRTZENDM4NDA1RkI4MTY5Rjk0MDcyOEZDNkUKLToxMDFCNTAwMDBCMTcwQjBFNjYwRkM1ODg2QTgyNUJENDA1MURGNDQwMTcKLToxMDFCNjAwMDc4OEVFQjIxRDA3RjYxOTkzOEQ0MzRGMzU4QThCQjJDMDAKLToxMDFCNzAwMDc2RDc0OUFFQzcyODVFOTYzMEJGNDUyQjZBOUEzMjU0NTUKLToxMDFCODAwMEZGQTRBMTdGNkRGMzE5ODkyRThDNzkxOEU1QzU3MzRFREEKLToxMDFCOTAwMDFFQ0FBMTcwOTEwNjIxMzQ1MTAzM0FENThBQkVFMjMzQTAKLToxMDFCQTAwMEY3OUY2MUQ4MzczRUMwREJFQjRCQUVDRDY0NzQxMDQxN0MKLToxMDFCQjAwMEJENkFEMEQzMkY4RTdEQzMzMTAwRUZFQjcyNTAyRTVEMDYKLToxMDFCQzAwMDE3OTYyQ0Y2RTRCNUY1MTk5Njc5NUQzRkU3REE1MUVERjUKLToxMDFCRDAwMDcwMTIzMUUxQzE0NEY3RkUwMjgyNzQ0QUZFOEJEQTI5QTkKLToxMDFCRTAwMDk0NEU2M0I1ODMxMUI0NUI4RTBCNUEzQjJENjdDRTZENUIKLToxMDFCRjAwMDE5MEZGRERFMjk2NjYzN0Q2MTZFQ0JFNDAxQjRCNzE2NzMKLToxMDFDMDAwMDIwRkQ2N0YwM0UzMzlERDEzRjk0ODA1QzlEMjg5Mjg3RjQKLToxMDFDMTAwMDM0QjA0NzQ3RjcwQjNBMDE2RjkzODdDQThFNDAyNDI2QUEKLToxMDFDMjAwMDUwQkM2OTMxQjU1MjFBMDVERjcxNURBQzRGNDdBRjEzMzcKLToxMDFDMzAwMDQ0QjY2RTlEQjE0NTZBMjkwMDc0QzgyQTM3QjJFQUEyM0IKLToxMDFDNDAwMDY4RkYxOUY1MjkxRDRGMTA3MzYxREMxOEJFNEZEMTcxNjMKLToxMDFDNTAwMDM3OUQxNzZERTc2MUI2MDhDOUJDNzg1MTI2MTk2NTFFMTYKLToxMDFDNjAwMDFEQjZGNUE3RTI1RjRGMjc2NzU3NzJGOEM4N0VENkJGNEIKLToxMDFDNzAwMDIxOTMzMkIzNjlGRjY5RUExQkNGMkVERUZGRTk5MDQ4NUEKLToxMDFDODAwMDkyMDBBNzFDNTYwMDFFNTI1NjRCQ0NGRDEwQkQwMkNCMzUKLToxMDFDOTAwMDRFNUU3NDA1QzM0QTMxQzVBN0FCNUM4NDY5OTBDRUYyMzEKLToxMDFDQTAwMDg3NzQ1OTAzM0NDNDcwQkQzN0QzQjUyRDM0RjFFNUU2RDQKLToxMDFDQjAwMDNGNEJFOEU3QUYxNDRCREE0MDZFNkNFRUJGODk2ODE0MTcKLToxMDFDQzAwMDFGOUU2MDlDNjA3OUNBOEQwQUUwNjkzMzc1QjI5MjMwQkMKLToxMDFDRDAwMEJFREM0NzAwOEU4QzQyRkEzQjFEMjc0MzI1NzE4REY2RjIKLToxMDFDRTAwMDI3NkI3RDA5OTE5NkU1N0ExMkQyRTkyNzlGMUExMjNDNUIKLToxMDFDRjAwMEQ0RkYzRTEwMkM2OTkzRTlGQjhFQTUwNEU1MjMwMUFGQzgKLToxMDFEMDAwMERDNDQzRjFEQzE1Nzc1MDlFODY3MDkwOTAxQzAxRDgxMDEKLToxMDFEMTAwMEU1MzhDRjhERTVDQkJCOEJFOUZCNTMwRDMyQzYwRkM4NDEKLToxMDFEMjAwMDE3MTQ1RUMzQUZBNzdFODZBNzhDRTgzMERFRTYzQzEyQjAKLToxMDFEMzAwMEY3QTIxREFDMjM3RTlEMkE1QjNGNkQ3QjI5NDk0Q0E3RjIKLToxMDFENDAwMERGQjM2NkY0QzNGOEIxN0YyMkExODk2QzQ4OTQ2QjMyOEIKLToxMDFENTAwMDk3Mjc0NEE2RjQwN0UzQjdBOEExQkJEM0QwOUY0MjIyOUMKLToxMDFENjAwMDM3ODlENUE2NzU1NkMzRThDN0RBRjE5NkU5MjQ1NzAzMzMKLToxMDFENzAwMDdFM0IyQTI4MUZBNDkxN0JCNzhBMjJEMjQxM0NCNDY4QkIKLToxMDFEODAwMDYxNDk5QTcxRUUxNDM1OTQ0RjQ2NTkzQkVENDRGODQ3M0EKLToxMDFEOTAwMEFBM0Y1NDRGMjY4OTFDRTg1QTE3MDAyRjI0MUNDMEY5NkIKLToxMDFEQTAwMDY1OTNENDhGMEVFNTFDM0VERjMxMjQ4QUY1ODJCMzdBMjkKLToxMDFEQjAwMEZCODFERkYyRjVCRTFBQzBDNTNGRkJBRTNGODJFQjQ2QUEKLToxMDFEQzAwMDFFNTRDMThFQTVEMDk2OUVDOTE5OTIxN0EwNzM2MDdFMkQKLToxMDFERDAwMDFGODY0NEY0M0I3QzYyNDJENTY5MDczRTc3MzI4OENFNDkKLToxMDFERTAwMEFGNDYzMDJFOTcwOTREMjhDMDc3QjcyQTFENjA5N0Y4NjcKLToxMDFERjAwMDQ5NDg4MEVGQkU5MDFDMzNEQkY1OTk4NDk2MkRGMTE0OTEKLToxMDFFMDAwMDcyQjQ3NDA2OTIxNkUzMEZBMkY2MDNFQkE4NjVEMTY5Q0IKLToxMDFFMTAwMDAwQ0M3RDdFRkRFN0UwMzc2REYxNDVEMDBGRkJDNEVERDIKLToxMDFFMjAwMDlGMEE4M0RERTZGMTNGMDRDRjRGRENFM0UyRTg5Rjg1QzQKLToxMDFFMzAwMDk4QkZBNUQwN0Y0MERFNjVDRTkyMkRGRTREOTY2RTJEQ0IKLToxMDFFNDAwMEU3RDhGQ0IwMDU5MjE3RTc5OTc1MERFMUZFOTVERTMwRjUKLToxMDFFNTAwMDcxQ0MxMDVDMTRBMjI2QTA5NzZENzUzMjAxRkZERkVCRTgKLToxMDFFNjAwMDY1RjAxOEYwRTU0ODc3Q0QwNDc4MjkxQ0M3MDEwRThBODMKLToxMDFFNzAwMDE2ODRFMzE0RjkyMjAxNEJFQzJGMjMxODNGQTU3MDFEQTMKLToxMDFFODAwMEI3QzE3NURDMDZENzcxMzM1QzJEMEE5QkFGREQ1RThDNjQKLToxMDFFOTAwMEQ1OTJCMjI4MDVFRTM5OTFGQjFGRDQ2RTAyQkJGMTE0MjYKLToxMDFFQTAwMDc5NUZBRjA3QzIwOTVGOEQ3QUQ2QUZCMjM2NUUyNTg5RkEKLToxMDFFQjAwMEMxMEE5NUE4NDgwNzc2QkI5MUFFRDM4NzE2RkY2QjE2NkIKLToxMDFFQzAwMDJGNkI0NDgwNzk1MDM4QURERjQ5MjFEMjBCOTYyNTkyOTMKLToxMDFFRDAwMDhBMEIyRjlGNjVFMDRCRkJGMjZGMjhGRkRENzREODQxMjIKLToxMDFFRTAwMDgwQkYyODFGNEJGMEREQzFCRkRFQzRFM0MzQ0JDMUJGNDEKLToxMDFFRjAwMEE2RjhGQjFBMDlGQjAxQkUwRjg4ODg3MUE4MEZDOEFCQjIKLToxMDFGMDAwMEZFRTkyNjM5Nzk0MkU0RjYwOTJDQjE5OThGNDkyODA4NkYKLToxMDFGMTAwMDcyNUNGNjZFNEM0QTdFNDQ4MzQxNkZDMjE5NUNDNzEwRjYKLToxMDFGMjAwMDkzRjM1RTQ2NzczMUEyQjRBMTNFRUM2NkZFQTcxMTRGNTMKLToxMDFGMzAwMEZEN0FBRkQ1MUZGRUM2NzY2QkY5NDZCMjY4MENDNDRCNkUKLToxMDFGNDAwMDZGRkNCNjgzQzQ2OUJGMzc5OUZEN0JCQTRFQUY4OTJBNEYKLToxMDFGNTAwMEMyRjcwRDEyREQwODc2NDk5NzgzRDkxQkNCNTUyMjQzNzIKLToxMDFGNjAwMEZDNzNGNUJGN0Q2N0M2MzIzQTlGNTMyMDBGQUFDMTdFMkUKLToxMDFGNzAwMEE3RTA5QkY0Qzg4QTQwRENBOTk3MEY5RjVGQkIxMDZBNUIKLToxMDFGODAwMEJDNEMxODc5N0U1RDhFNjQyM0Y4REZCMTFFMDdEQTk5QTgKLToxMDFGOTAwMEM0MUUwN0REMjc2MTFDRDRENDBFRTFGRDZBQjc3NTdFMkYKLToxMDFGQTAwMDY3OUJCRjdEQkU4NERDOEJGMzVEQjE3QjE5REFFNzIzRDEKLToxMDFGQjAwMENEQzdCOTlCREE5QjY5RjQ5RDU3MTIyQzcxMUY4M0FGNzMKLToxMDFGQzAwMDBEN0FCN0YzNzc5NUE0QjFCODBFNTU4MzY4QUZGQzJFQTAKLToxMDFGRDAwMDIzREU4RUVCMUI5RDA5RUI3QkI2RjZCM0ExN0RFRTg1NzAKLToxMDFGRTAwMEI3OUZGQjU3OEUzRkVGMkNFRDU3MkI4MzBCNjBCRDM3MTAKLToxMDFGRjAwMDA1N0FDM0MwOUY0NjFDNkIwRDg5RTkwNUY0NTdDN0IzMkEKLToxMDIwMDAwMEVCNjI2MEJBQTVFQTA1Q0ZCMTVFMjFBRDI3OUQ0M0JENjUKLToxMDIwMTAwMEQyRDFGQjNCQzFFRDkyMTdGNjNDRUMwNDNCRjU4MzI3OTQKLToxMDIwMjAwMDhFMzU4MjFEQjBGMkRGMjVBMjUwN0EzOEIxQzc0NzEyMzMKLToxMDIwMzAwMDY4QUZDNDlENjBERkFDQTA3NDE3Qzc3MjYyQzZCNTI2RDYKLToxMDIwNDAwMDdCOTg1MjM0QUVDM0NBQTc3RDY4NDdBQ0Q4RUI4QTM3QjkKLToxMDIwNTAwMEQwRjYyQjdFRjRERjUzMDlDNUMzODkwRDgzM0YyRjAwRDMKLToxMDIwNjAwMDdBN0U0MjYwNzFEN0Q4QzBENDZCRTlGQjE1MzJGOUM3Q0MKLToxMDIwNzAwMDcwMUEzQTVBMjYzMTdFN0FGRkM3MTk0QkMwNEUxNDc2MzEKLToxMDIwODAwMEY3N0YwNUZCRURGQkIyQzM2NUQyQzc0QjI0MDc4RTRCMzAKLToxMDIwOTAwMEVCQTExRjExN0I1Qzg4NEYxNDE4N0M2NjdGQzA4ODc3OEEKLToxMDIwQTAwMEJGRkZCOEMwRTBEQkVGODhCQjAxQkVEREJCOUMxMTVBQUYKLToxMDIwQjAwMDZGRURFRTkzNDhEN0YzOUU3RUNBMEY3ODU4QkJERjZBNjgKLToxMDIwQzAwMEE3QUZERDJEMjU1QzUzRjE3OTBDOUVBMDQxODUxOTgwQzkKLToxMDIwRDAwMDRGQzZDRjZCRjZBRDQ2QkRCMUE2NkZGMzQ5RTBFN0I1OEQKLToxMDIwRTAwMEZCMUQxNkY5NEZGMTEyNEEwMDVFREY5MDQyMEQ1MEZFQzMKLToxMDIwRjAwMEUxRjdGQzFBNDVENTdCQzk0N0ZEODA1N0RBRUYzMjI3NTcKLToxMDIxMDAwMEE1QUI4NUIzQUNFREEwRkZEM0Q5QzNGQkEzOUUyMUZBNDkKLToxMDIxMTAwMENENkJGQjM2QjFGMUY2NURGMzA3OTBCNzZCMDlEMzUzODYKLToxMDIxMjAwMDA2M0ZCRjA3QkZFNDBERDczMzlCMjQ2QjdDRUIxNDc5Q0MKLToxMDIxMzAwMDc5MDZGQTgxQkI3M0QyRkFDRjg2NUUzMUY4N0FFNTUzMUQKLToxMDIxNDAwMEE3NzZDNkU4RjhFRkVGRkRFM0NFMTg5REM3QUFCRjdDREYKLToxMDIxNTAwMEI0RjM0RUYwOTc5RTc3QUIyMEFGRDYzRUYxOUE5Rjk4OUUKLToxMDIxNjAwMEYwRkY4OEM0RjYwMzRFM0NGRUJEQzc3NjUwM0UzOUYxMDEKLToxMDIxNzAwMDZCMTdEQTgxMjc5RUZCQzMzODhEQ0VGRkM0MEYzRTFEM0YKLToxMDIxODAwMDAzNzZFQTJEQ0ZDRDFGMEJGOEI4RTU5OTc5NjM0N0IzRjUKLToxMDIxOTAwMEQ3ODE2RUUzMkVGM0ZBQzZCMTdGNkRCRjAwOUIyMDg0MUEKLToxMDIxQTAwMDNDQ0I5RkI2NzUzQUI4NEY0QTQwODhFMDgzMzc1RDcxQTMKLToxMDIxQjAwMDE3QzVDRjVBRkFBRUE1MTJENjZEMzVFQTJCMjhERjQ1RTIKLToxMDIxQzAwMEYxQkQ2NjRGRDc0OTY5NkEzQUJDQzcwQUM0MjAzQzEzQkYKLToxMDIxRDAwMDA1MjQwOEVCN0VFREMyQ0JBQkUwRTkwODY5NDAyNzY0M0IKLToxMDIxRTAwMDEwRjU4NEJEREREQUEzNzQ3REE3OERCQzlFRDQ5RTcwRUUKLToxMDIxRjAwMDAyRkVEN0VFRDlDNEM2RURBM0VCRTkxRkJFOUUxRkMwRjkKLToxMDIyMDAwMDJGQjM4N0FGRTc0MUM5MUE2NzNBNDU1NjdENzcwNzdDRjgKLToxMDIyMTAwMERDQzdGQ0NFOTFENjczRjUzM0Q3OERFQURGMTlGMkUxMzYKLToxMDIyMjAwMDZDNzg2RTE2MTg1QzVCMjVGRDU3MTJGMEUzREUyNzFGRjUKLToxMDIyMzAwMERCMTE2MEVCREM0MDExNzNFMkE5NTNFMzYwOTNGNzFERkYKLToxMDIyNDAwMEM3RTA1NzQwNEUwRTNFRTc1MkMxQUU1RUYxREMxQkM4MDAKLToxMDIyNTAwMDc3Mjc5RTM5RTJENDcwN0Y5QTc4MDVBQTI3NEY5MEQ0QzkKLToxMDIyNjAwMDRGMTJGNEU2MUE4MTE1RDYzRUUyNEJCOEZDNDNFQkI1QUIKLToxMDIyNzAwMDI2REU1NEFGRjlGMUZEMzE3QzFGNjdGQ0IwMjZERUJGQ0UKLToxMDIyODAwMDU4NDhCMzdFNUVCOTg0RTlBNzc4MkVFMjY1QjU5Njc0QTYKLToxMDIyOTAwMEFBNUVFQkJBMEFCMzYwM0Q4RjJEMDBGQTFCNjkzRDhEMzMKLToxMDIyQTAwMEY5QUIzMEZGOTlBNjc1N0Q4NEYxRjE0OEZDN0E2Mjk3MEQKLToxMDIyQjAwMDRCMTYzMjg3QUZGMzA5NkU1N0FDOEQwQjZGQTQ1Qjc3NkIKLToxMDIyQzAwMDQyMzZCMEY4REUwODcxNkZFMzY5QTcwQkE3NkNFNTczQkYKLToxMDIyRDAwMEEzQkQzMUZGQjNGMUY5RDlFNzc1N0U3ODNCQzVGNUI1RkMKLToxMDIyRTAwMDFEN0ZFRjdGOTE1RTBGOTRDODAyRDc1QkJERjVGOTI2ODUKLToxMDIyRjAwMDdERTc3NjUwM0Q1NjBDNzY2NzM0NTY1MDNDMDRFRkM2NjkKLToxMDIzMDAwMDNFMDlFNUZCRkJCQjI1QjRGN0VENzI2MkNEMDg3RTdEOEYKLToxMDIzMTAwMEM4MTg2NzdGRkY1NDkwNjdFRjFGRjgzMUE3NDc0NkVGNTMKLToxMDIzMjAwMDZCRjYxQzczQzZCODVFODg5QkY1MDJGNDk3NjYzRDJFNkIKLToxMDIzMzAwMEU1RkRBRDdEMzY3RDdGNkJGNzlDNENEQkRGN0JCMkZFMzAKLToxMDIzNDAwMDY1ODBGRkJEQTQ4M0M0NjgxN0VGRjU0OTY5RTMyNEE1NDAKLToxMDIzNTAwMEIyQzM2MjY3NkRGNENENzgzMzkzQjY5M0ZDMUUwREU2N0QKLToxMDIzNjAwMEREQkU0MTdGMjMwNkY2QzhBQjBFODJGNkEzMUM3QUM3RkEKLToxMDIzNzAwMDQ1QkZCN0ZCM0NCOERGRDJFRUJGOTE2ODI2RkRERDYxRkIKLToxMDIzODAwMEMzOTMxQzBDQTMxRjJEMDdDMjU1NkMyRjM0NkVGMTY3MkQKLToxMDIzOTAwMDFEQUE2ODgxOUJDOEIxNDJEOEU3RkM2NUYxMUY2NEU4QkIKLToxMDIzQTAwMDE3RTI2OTlBMjkyRUY0OEE0QzNBNzM2ODdGQUZFODQyQTMKLToxMDIzQjAwMEE4OERBNDg5NkJEOUZBMEZDRjkxODg2NkE2MzM3REJDMEUKLToxMDIzQzAwMDY4OEUyRkZBMEZEQzhFNzE4RDE2MTI0RDQwQkM4OTE0NjkKLToxMDIzRDAwMDkyQkU0NzRERkQzRUQ4QUFCMUI4NkI3OEJDNjg4RUZGNUYKLToxMDIzRTAwMEI5QTI1MURENDVFMTI4QkM0NTJEMDFGRjZEQTRGMThCNUIKLToxMDIzRjAwMEEyRDY3RDVGNjNGQ0Y1M0MxRTQxNzYzRkYxQzQxM0I0NjkKLToxMDI0MDAwMDNDMUVCRTYxNkE0NUJDQ0QwOUYxMzc5NUQ5MzdGM0I4OUEKLToxMDI0MTAwMDNDRkMyOUI3OUYwRjA4RTE0MzYwODdFOTc3QzU2NDkwQ0EKLToxMDI0MjAwMDc3ODJENjI2ODM5RDUxRkY0NTRDNUU2RUEyQzc3QUVEMUEKLToxMDI0MzAwMDY0MUVFOEQ1RUZGRTU5NUE5MjhFNEVGNzczQkE2QUZCQzYKLToxMDI0NDAwMEE3MUZFNTQxRkNFRTAxRjc2RDg1Q0M5OTBEMjM3Qzg1MzYKLToxMDI0NTAwMDdDOUU4NzhBQkVFMTg1RUZGREFCNkZGNDRFQTZGODI5MUUKLToxMDI0NjAwMDA4NEEwNEUyMzUwNTgxNjU1QjJBNjBGRTQ3QTU5MDVCNUEKLToxMDI0NzAwMDFCREVCRkYxRENDOUUzN0EwRkI1QUEyOEZGMUY2OTBEODcKLToxMDI0ODAwMDYyRjkzMThFRDdEREFENjVGODdDQTIzNTg0REZGN0I0MTMKLToxMDI0OTAwMENFQzI3MjVGNkIzRDNFRjdCNjg2RjFCREZGOEUxNzA1NkIKLToxMDI0QTAwMEEwM0JGMjJERDIwN0YxOUE3REFENEJGMEZCOEY1QTIzNjIKLToxMDI0QjAwMEY4N0M5NENGQTcxRUYwRTJCNUNDMUZFMzMxRkIzQkFFMTYKLToxMDI0QzAwMEQ4MDBGMTE4MDM4Rjc2QkNEN0QxQTk2MkZGOUFBMDAxN0EKLToxMDI0RDAwMDlEREYyRTMzRjk2MkM3RUYzODU3NDIwOEQzNzI0Qjk0MTEKLToxMDI0RTAwMEU1MkJFQ0U0NzE2MzYzQkVGRjJBMzM3QjczMUY4N0U3NDAKLToxMDI0RjAwMEM3RUVDOEY3NjVEODZGQUEyRjJERTdGMUYxMTBDOEVGMjYKLToxMDI1MDAwMDlENDI3ODZCMDVFNTlGMTc4QTY2MDZDRDcyQjhDODE3OUQKLToxMDI1MTAwMEQ5Mjc5QkU4Njc1QzM3OEJGN0VDOTA5OUJDMUE0RjRFMzQKLToxMDI1MjAwMEY2Njc1MkJDRUI1RjEwMERFOENFOThFRjgxMUFBRDEwNDQKLToxMDI1MzAwMEU0RTQwMTQxQzBGNUQ2QkYxMDQ5OTk4OUVFOENGRUJFOTYKLToxMDI1NDAwMDIzOEI3QzdGMjNCRERDMUVBMjYzMjYwRkIyQUY5MkNCMTAKLToxMDI1NTAwMEMwQUYzRDQ1M0MyMTg5QzJEQjk5NDdGNjgxREZEMjA5RjYKLToxMDI1NjAwMDc0MDk3NkYyNkYzMzMwNEU2Q0Y4Mzc1QkY4N0E2N0JCREMKLToxMDI1NzAwMEQ5Rjc1MzZGRjlFMjIwN0Y0NkYyN0IzNkYyRkExRjcyRTkKLToxMDI1ODAwMEI4NTZDQkUxNUZDOUI4QUYxQzE3NThCRTQzMDJFMzk4RjkKLToxMDI1OTAwMDA1NkMyQTk0NEU5NzZFQTU2QjQ1RUVCOUY0QkQzNzIxQjQKLToxMDI1QTAwMDNFRjhDMTMzNkUwREUwRUFBOTNBRUUzN0UzOTFBQzkyMDIKLToxMDI1QjAwMERGMzdFRkVCMThFRkYzNEYxNzIwM0VGRjFGODkxQzMzNzcKLToxMDI1QzAwMEUzMzlCRjc5RDAwOUVEM0IwNTZENUIxRENDRUIzNTA5RDcKLToxMDI1RDAwMEY5QUY1Mzg4NUY4NEYxMzM5OUEwNUZEMDc5NTMzMDBFRkYKLToxMDI1RTAwMDcyQ0Y2OEU3MEI1OUY5M0JEQjFENUVCMjBDRTZEREVDMDAKLToxMDI1RjAwMDBDQzVEMkM4QTdERjY2NjgxNkY5RTAwQTVBREIwNzQxQTYKLToxMDI2MDAwMDY3NTZCM0IyNDZFOUIzODIzMDM5MTE5Mjc1MDlGQ0I0MEEKLToxMDI2MTAwMDZBMTJDMUU3NENBMkUxMzNDRjExRjkwQ0U2MzE5RDg0NzcKLToxMDI2MjAwMDM1ODA3MzQzQzZCOENCRDhGRUMxRkYxOERFMTRDN0ZGOTAKLToxMDI2MzAwMDQxQkMxOUY0MUFCQ0I0NkMxQkU0MUY5MDNCNDREQzZGMjIKLToxMDI2NDAwMDY5ODc0RjI2M0E1RkU4MTAzODdFMTU5NEU3MDUzQ0FFNUYKLToxMDI2NTAwMDRGRTVGRjBCNDUwMUVDODZDNTQ5RDQwQzk0ODMwNTdDRkUKLToxMDI2NjAwMEMzQTA2NUUwMjRDNjc3ODNFMzA4OEZCQkM3MzFERjY5NjkKLToxMDI2NzAwMEM3MkExMUZERjUwN0RFMTJFMjkwRUM3MjZBNTVDOTkxODYKLToxMDI2ODAwMDQ5QjQ3RDBERTU3MzU4OUZFQ0FCNEEzM0NERkIwQzA2ODYKLToxMDI2OTAwMDdGM0NBMDg0MzNENTUxRTJGQzA2NUYxOEU1N0YxOUZGMkIKLToxMDI2QTAwMEJDMDA3MjY4REJGOEU3RkI0MTNGRTQwRjA4MjExMDYzRDAKLToxMDI2QjAwMEY5REVFODY0OTA0NzM1QkY3QjNDMEZCRUZGQzYxMzk5MzcKLToxMDI2QzAwMDYzNUU5RjFEQUJBM0UzMDE0RUFGMkYzQzE3REU4NzBCNkMKLToxMDI2RDAwMEUzMzc4MEJDM0I1NTdGOEIwQjk3RDlDQkYyNUU1QUVFMkMKLToxMDI2RTAwMEQyQjY0REQ2NDY1RTlGOUQyREEzRUZERjE4RjNEQTc5NjMKLToxMDI2RjAwMDhFRjMzMkQ2RUI1NEZERTIyOEU4NzEzQjlFRUNGRDY2OEEKLToxMDI3MDAwMDVGQjU3OEQ0RjExRjA0QkRFMkMyRjkyRjM1Q0ZCRjMwRDkKLToxMDI3MTAwMEFBNjI3RThCRDFERTk4QUZCREJEN0RCRTQzRkJDMEU3MTQKLToxMDI3MjAwMDk2MTdENEU3MjAzOUIwREUzRkY4N0NEQzBGNUYyMTQwRkMKLToxMDI3MzAwMDEyNjEwOUU4OUZGMkU3MUE4MDY3MDY4OTRBOEMxRkMyNzYKLToxMDI3NDAwMDFBQzg3RjgzOUU3NzhDNzkyQzBGRjU4MjFDMkY0Njc5Q0YKLToxMDI3NTAwMDc3OEVFMzc1OTI3MEI4MDZFQ0IyOTAxODMyREIyQkM2MTgKLToxMDI3NjAwMEIzM0Q0NUU3MDk4Q0FCQkFCODFDMTEzM0VFMEFBNkMzREEKLToxMDI3NzAwMDczQUFGRjQyQ0FGRkE2M0NBNjJEODRCMDc4NTQ0MjQxRkEKLToxMDI3ODAwMDM5MEY4MTQyOTU5NjFEODc0OUU1RERCNEJGNjYwNzlCRTkKLToxMDI3OTAwMDQ3OERDQ0UyMjFEMzBGNkJCQjI0MTY1Nzk1OUE3QzI2MkMKLToxMDI3QTAwMDNDRjJGRDA2MjNCRURCNDlFRTIyQUEwNjdFNDU0NTNGRUMKLToxMDI3QjAwMDU0MzdGOEY0RTdDRUM4QjcxRDkwODcxN0Q0MzBERkQzNkQKLToxMDI3QzAwMDExODgwODZDM0Y4RUVEMEYxNTcxN0U5RDJGMkQ1NUMwMjEKLToxMDI3RDAwMDJFNjkyMUUxN0FCMDRCQzg1MTg5QjAzQzNDQzZENzJFNTYKLToxMDI3RTAwMDYzMUY4Q0YzQjFDQjRENzgzQzM4QzhGODlBRjc3MzkwREYKLToxMDI3RjAwMEZCQTUzRkU1RjZDOUIzREMzRUY5MDlEODI3QjQ1Q0Y0ODQKLToxMDI4MDAwMEYxRTAwMTgwNzMzRkQ4MjkyRUIwMzc0MkY4N0QxRkI3MjEKLToxMDI4MTAwMDUzRkNCNzc4MTJFMDFGRUU2REQ1QjFGQzcwNkIzMzNFMDAKLToxMDI4MjAwMEVGQjlGNTcwOUIxRkZBN0ZFRTQ3MDdGRDE0QkVFRkI0QkEKLToxMDI4MzAwMDEwRTRENzE2OTJGQ0M1NEE4MDM3MkE2MjdDNjM1NzZCMzYKLToxMDI4NDAwMDE0RkJDRERGOTIzQzAwN0IyNEJEMkQwNzc0ODVCRUVGQzkKLToxMDI4NTAwMDhBRDY4QTZFNUE2RjY3MTVDMUY4QzY0RTg1RTIxREU0QTYKLToxMDI4NjAwMDYzMUY0MUY5MDhFRTEyQ0EyRjJFOUYzMkQ3OTUyMkZGMUYKLToxMDI4NzAwMEY2NTRFREJEMEFGMDUxNzg4RDg4REIyRjA2QkZCOUJBNEEKLToxMDI4ODAwMDA3MDY1NkQyRjI4M0NEN0JERDQwODZEOUI5QzlGNTJGMzQKLToxMDI4OTAwMDgxNUU5RjQzRTVBRDA2RUI5MkVDNUU0MEQ3QjdBMDY4NDIKLToxMDI4QTAwMDkxMzI4Rjk2RkQ3RDFCRDc4MTdFRjZFRkJCRkY2NkYwRTAKLToxMDI4QjAwMDhGRkRDRjNFRjE0RDI4MTdEOEVDNTlGRkJFRkRCN0IxQzMKLToxMDI4QzAwMDdBMkZERTBFRjUwQTBFRDM3OUQwRjY1M0Q1NjNGRDMwOUMKLToxMDI4RDAwMDdGOEFCRjgxQ0RCNDlFQTNDQTlBRUZGODk0NjEzRjc0RkEKLToxMDI4RTAwMDEyQTRBQkVEM0ZEODJGQzJGQzAzMDNFMTFBRDhBRTE5RjYKLToxMDI4RjAwMEYzNjZCNDFGQzhBN0YwMUQ4NkZGNURBQjNBNzY0MTNGNzMKLToxMDI5MDAwMEVGM0E4QTkxOUUxRTY4MzkwMDExNzVGMjlENkZCRThFNTYKLToxMDI5MTAwMEY0N0M3MEQ1N0EwMkY0RTA1QTI1NjM1Q0IxNjBGNTJENDEKLToxMDI5MjAwMEU0MUIyNjc5RTE2QTkxRDNDNjk5REY3NUI4OTA3RTNCQTYKLToxMDI5MzAwMDU3MkQ0RTRFRTI2NDBBN0MzOEVFRjYzQTA1RTVDNUNCREIKLToxMDI5NDAwMEQ2N0MwNzYzN0Y3ODE3ODlCQ0VCNDBGRTYyRkJDNEIyN0MKLToxMDI5NTAwMENBRjY5MzJGQTE0ODA3N0I4OUFDMTU1OTlFNUZCOENGNjMKLToxMDI5NjAwMDZEOEUxRjE2QUUxNkMzRTlFMEY4RDQyMUUzQkMzQUEyN0YKLToxMDI5NzAwMDc1RUZCQzQ4RTcyQkNGQkMxNUVENTJEMjZCMURERjE4QUQKLToxMDI5ODAwMDhGOEVGRkE5QzM5NDdGMjJBQjBDMkU4RDg0NDQxRjFEMTQKLToxMDI5OTAwMDc3Q0Y1RTRGM0U5NDRGNDcwRDdEOTVDMEZERDNBNzJCNUIKLToxMDI5QTAwMEM0QzQ3ODBBREZCREJEMjJFNkExMUNBQzY3RkFBQkU3NjAKLToxMDI5QjAwMDE2QjZBRkQ1QzNDQjNCRkFBODAxNTYzQ0M0NEY4NjNGRjEKLToxMDI5QzAwMEIwMjNDQUY2QkZDOTE3NjdEMEJFRjA3MjNFQ0FBRTc4NTAKLToxMDI5RDAwMDU1QzFGRDg5OThFRUFEQTFFRkE3MTE4M0RGQzRBMTc1QTQKLToxMDI5RTAwMDA3RkI2NThCOTUwRUM0OEU2QzRCNTlBM0M2QkEzOUVGQTUKLToxMDI5RjAwMDE4MzYwRDUzNjVENEE3NDcxNUYwMjc0RkY1QzkwNEVDRDkKLToxMDJBMDAwMDk3Njk3QzdGQzg4RUNGMUQ5Q0FGNzc0MkRFMENGODFEODYKLToxMDJBMTAwMEFCRjZCQTM1MEFGN0NGMEMzQTY5ODlFQUEwMTc4QkVFMDQKLToxMDJBMjAwMDBBQzc5OERGNjNDREEzODY4QzEwQzA3MzExREY4NzIyOUQKLToxMDJBMzAwMEQyNUIxNTQ4MEZDRkIyM0M1QTYzMUZEMTUxNjhDREFCNjIKLToxMDJBNDAwMDJFQjdFNTgzMTdEOUYyQThDRjM3RUU1MkVEQjRDN0UzMUUKLToxMDJBNTAwMEI2NUM4NEZBNDJGM0EzMUNDQkU3NjMzRDMyOUJCQUY5MjAKLToxMDJBNjAwMEQzODZDNzVGNTJGREYyRjgwMkU5RjVFMzdBRTY3Mzc5OUYKLToxMDJBNzAwMDc4Q0YxRDUyMzNGODBCRkUxNTk1NTlFNjM4RTlENTRFM0YKLToxMDJBODAwMEU2QzcxQ0ZBQUQwQkU5Nzk2NzlEQzJGNzNENTlCRUE3QjEKLToxMDJBOTAwMDgzQUY3QjkzNTNDMzdBM0I3QjZGNTUwMDlGNUQ4MTEyNUQKLToxMDJBQTAwMDM3RjQ3M0YwRDI5RkI4MzE1Rjg1RTdBRDFBRjI3ODAzM0YKLToxMDJBQjAwMDdEN0YxM0VERUYzQkI5MjJFQUE0Q0VDMjU3RjM2MEJGOEUKLToxMDJBQzAwMEZFREUzQTA1RjM1MkZEMTkwMzdEMDc2OUQ5N0JBNzMzNzIKLToxMDJBRDAwMDA0NzkyMzNCNkIxMjRCQzIyNkI4NkU3NzMyQkRCNkQ0NTUKLToxMDJBRTAwMEM5Rjc4N0I2NThGMzNBMjg1RjJDNzU0MkRFOTgzNzhBQzMKLToxMDJBRjAwMEZCOTlBMkMyRjM3QjZEN0VCRjgxMEZGRjgxQUJDNEUyNjUKLToxMDJCMDAwMDI5RUM1OTMyMDVGQzU0MjYyRkUzM0NERjZBMjdENzBCMEEKLToxMDJCMTAwMDg2N0RCMTgzRkJBRDVCQjhERjZBRUZCN0I0NTkzRjgwMDgKLToxMDJCMjAwMEY2RDkyQUI1MTI0MjU0RjZGNTlERDA2RDk1OUZDNTMxNjAKLToxMDJCMzAwMDJCM0Y4QzZGQjFGMjQzNTEzNERGNTJCRkEwQjlDNEYyQzYKLToxMDJCNDAwMEREMTdCQUQ4NjZCNzI0OThCRTIzNkM3REJBRENERTA5REYKLToxMDJCNTAwMDIwNDcyQUE5M0VFNkY2MDdDQUI3OTFGNDdEQjM0M0RGQzIKLToxMDJCNjAwMEUwMDRCOTc2OEU3Njg4M0YyMzFDODU3ODlCRERDRUJFNDcKLToxMDJCNzAwMDg3QUZDRjNGQzhGQTE2RTg4RkZBNzVGNzYwQkY3MjVDNkYKLToxMDJCODAwMDYwRTc4N0FDNzZDOTMwMzhCOTlDMUIwNUNFN0Y3MTlFNTMKLToxMDJCOTAwMDg3N0Q3NkI2RkQzN0ZCQkVEQjZENTI3OEZCMkJGNDM5QjMKLToxMDJCQTAwMDM3OTNFNTQ5NzZGQTk4OUZERjA5RjE1NTVBN0U4RUNGMjMKLToxMDJCQjAwMEVGRkI0RTA5OUZGRkNFQ0I3MzMzNjhGRDM0RkM2REM0MzEKLToxMDJCQzAwMDVEN0YwQTA5Mzk1MDZGNkNGQUZDNEJCMDhDRjA3QjQxODkKLToxMDJCRDAwMEZBRUYzRjc1QjI3REVFQjlFMzQ3MUZBNzlGOEZCM0M1RUMKLToxMDJCRTAwMEExM0ZFQjM0QzVGN0JBOUNGQUYzRTZGMjQxMjdEQjk3MzUKLToxMDJCRjAwMDM2RThDMkM4QUYzNEVDQjQ1QjFERkEyMTczRkRBMUE3NUYKLToxMDJDMDAwMDVENUVCMkZEOTE1Q0JFOUUzRUMyRjhFRjY3NEI5NjZGNzMKLToxMDJDMTAwMDlBNDhGOUQ5NTlFODQ1RkIyNzc3NDlDNzNBRDEwRjc5M0UKLToxMDJDMjAwMDQ5NDkxNUZDODQ1QzJFQkZDOTYyMjYzNzhERkRGNkVDNDAKLToxMDJDMzAwMDA2QUI1Q0I1OUZDMzcyRjE3Qzc5OTdGREZDMEQ5N0FGMzUKLToxMDJDNDAwMDc2N0ExQzQ5QkUxRUIzQzlENzU0NUM3QjA0QkFCMkM3OUUKLToxMDJDNTAwMEI1NUJFMDU3NjY3RjcyRkIzODlDQjk2OENBQzhGNEY4NjgKLToxMDJDNjAwMENCRDZDMTlFNDMxMzg3Q0FBRkMwQjk5QUI0NzRDMEY2MUQKLToxMDJDNzAwMDE5RkQwN0RFNkQ1ODVDMDVGQjc5NTIwODY0NUNCMjM1QkUKLToxMDJDODAwMDMxRjdFRDg5NDNGMjJCM0MyN0VCNjcxMDBGMERENzY1MjkKLToxMDJDOTAwMEExQkM2OTBDRkVBOUU3NTAwRTk1Q0I3QUZGRENCNzREQkQKLToxMDJDQTAwMEYzNENBQTE0REEwOUEzRjA4OUVFRjhDQ0NDNUZERjAzNjkKLToxMDJDQjAwMDU5MEY3NjExMUY2RjJCQzdBN0REQkVFRTEyNjMyRUU4RUEKLToxMDJDQzAwMEY3NjMzMkEwMEJDNUEzQ0ZCQjAzRjEzNkUwMDUzQTFCNzcKLToxMDJDRDAwMDY5REVEMzVENENCRUZCNjc0NTQzMTBCRjczOUQ5MTkwODkKLToxMDJDRTAwMDBGNUNFMzBEM0IyNjg0NzZDQzBDNTcxNkEzNjc2RjA5NjcKLToxMDJDRjAwMEVFRUY1MUZGN0RCMDFGRDZDMUNCRjJGRTBERkRGODkxNzYKLToxMDJEMDAwMDExNjdFNTdBRUZFNjJDNTZERURDQ0FFMkNBQUU4M0IzODEKLToxMDJEMTAwMERGRDA2ODNCREZDQjBFMDI3MUNDNEQ1NEFFNDM3Q0IwQUMKLToxMDJEMjAwMDlCREFGOUYwREQ1RjM1NDAyMEJFREU0RUVCNDc0Q0ZFMEUKLToxMDJEMzAwMDc4N0JBODU2ODVGREM2OEVGMjRBMDVFQzBBNjk0QTE1Q0QKLToxMDJENDAwMDk2RTVFMjRBQjU5NjhFMzlBNUVCRkU3OUI5MTAxRjJGQUMKLToxMDJENTAwMDE1MzFERjc2MUEyREI3OTU1MkJBNzZBOTM4QkY1Rjk2MkUKLToxMDJENjAwMEJERUQwNUZCMkMxQjgyQTlENTQzRUJFOUE4OEFFODEyMkYKLToxMDJENzAwMDg1QzcxMTU0NkIyMTQ3MjNBNUI3Mzk5REQxRjcwRjQxNjIKLToxMDJEODAwMDdFRDFGNzg0Qzg2QzE3OURGRjJGRjlCOUFDMkU2N0I0QkMKLToxMDJEOTAwMDZDM0RGODQzNzJDQzA1NzFDMDE2ODVFRDRGMDAzRDc0NTMKLToxMDJEQTAwMDRDMUY4MkJCOTZFM0Q3Q0RDNzRERjk0NzdDM0QzRjk2N0MKLToxMDJEQjAwMDA3NjI5MEYyREEyNTkyRTY3NEVCRDNFMDYyNzJBRTQzREEKLToxMDJEQzAwMEQ1RDU1MUU5NDk5NTNGQjNFNDU1Q0Y2MUZDRTQwQzUwQUEKLToxMDJERDAwMDdBMzJGMUY1NDhGMjVBNzI4NTE3QkI3Mjg3RjI5OEU4OTkKLToxMDJERTAwMEMyQUFDOEE3ODREOTgxQzZCOTlGM0YzOEY1MjU1OENGNTQKLToxMDJERjAwMENCRjA0QTBBQjM5MTRFRTlGQkY5OUVFQTBCOTFGQkRBNUMKLToxMDJFMDAwMEQ2M0FCQTZFMDdFNjU0MURDMTc4NTZEMjgxNzEyNEZGQjYKLToxMDJFMTAwMDA0RjI4RjY2M0JFNDI1MTcwNkUzRTg5M0M1MkRFRkE2ODEKLToxMDJFMjAwMEY0MTE5RkNDRTIxNTA0RTgyNjgzMkE2MkQ4OUYyQzEyNjUKLToxMDJFMzAwMEUzMEYxNTAzQkNCQkVBMjdEMEZFQkFFNDg5RDQ1MjFGQzYKLToxMDJFNDAwMEVBQTdBNjg4RjkwMzNEQjU5RTY2QjM1RkYwQzcwQ0I2NDYKLToxMDJFNTAwMDJGNzM5QkI3RTYxOTE3MURBN0RDMUJBRjQ1RjMwQkIyMDkKLToxMDJFNjAwMDM2QzdCMDczNTU0MEM3OTdBODY0NDAxMDQxMEU4NjA5MTUKLToxMDJFNzAwMEQzOUIyMTg1QzU0REVCNTQzODQ3MjU5MDA4Mzk5MzMxQjQKLToxMDJFODAwMDlBN0VCNDlFQjc3QTQyOEU2RkYwMDAzRTAyMkMwRUU2MTgKLToxMDJFOTAwMERCMkU2MDkyQTBENEE3MjczQzIwMTJCQzhCQkE1Q0E4ODIKLToxMDJFQTAwMEM3QzM2NTMwNEVGRjBDMEZGMUQyRkE3RkVBNzdFMjNFREUKLToxMDJFQjAwMDc4OUZBRjQwMDZCQzNFMkYyRUZGQUU5M0NFNzdGMEQ3NjMKLToxMDJFQzAwMDJFQ0M3QkVDRkJGM0M1OTg5N0RGRTdCQjZDMDFDOEVEMUMKLToxMDJFRDAwMDNFODExQ0E2Q0E5RUQ0OUMyRUUwNDk4ODI0MDNGNkZGOUUKLToxMDJFRTAwMEZDRjM3NDAyRkIzMDgzM0YyMzY4RkYzOTgyMkZDRDdERDIKLToxMDJFRjAwMDdCM0E0RTNDNDM5QzQ1REJCOTQ5Qjc5QkI2MEI3REU2MUMKLToxMDJGMDAwMEY5RTgwQTRBNTc3QkJEOTVGNzREMjM0M0YxMTYyM0NFQzYKLToxMDJGMTAwMDUyOTcxMUQ5MDk3NEQxMzlFNjNGOUI4MTZGQkEyOTlDMjgKLToxMDJGMjAwMDEyRkExMzdBMTBFMEFFQ0MxNTMxMkU0OTcyQkRGMTg5MzgKLToxMDJGMzAwMEY0N0RDREUxNDAxREU0OTVENkM4MTU5ODMyRUI5RkM3Q0UKLToxMDJGNDAwMEQ2RkIzNzlFQzg2RTk4NkY5RERBNTQ5NzQ1RUI1NzFEOTgKLToxMDJGNTAwMEQ1NTBDRTJFMDhBRTNCMDRFNTE5NkZCMTcyQTc5M0YxQTAKLToxMDJGNjAwMDBCQzQ5MTg4NDlFRUQ2OUMxRTg3RjNGQjIxQTc5MzhFNTQKLToxMDJGNzAwMEEwOUVENDg1NTFGOUM2NzYxRUMxOUE0NzY3QTYwM0M4OUMKLToxMDJGODAwMDdGMzdEMTQxQzQ2MUE2ODM1OTk0MEVBNjk4RTk0MDE3QjIKLToxMDJGOTAwMENFODcwRURBNTA1OTVGMDhGRkU4NkZENDA5NDNGMUJDQzEKLToxMDJGQTAwMEUxN0NCMDRFQzkyRTFGQ0UyRjA2MUM3NzU3NjUwNzQwMTcKLToxMDJGQjAwMDhFMUE3Q0ExQ0VCQzBCRTVBQTZCOTkzMzBDRkIyRDA2QjcKLToxMDJGQzAwMDlGMThGQ0YxQTlEQjgxN0M0OEY5QTQxMUY4N0RCMTU3NjkKLToxMDJGRDAwMDlCOUY4RTRGQzAwRjMxRjNDM0I1MjNGMDREMjMxOTNDOTcKLToxMDJGRTAwMDE0QTA4RDFBNjUxMkNCQTRBMkU0OTdCM0RGMjkxRDY3NDQKLToxMDJGRjAwMEUyMDMzQkRFMUFFNzA4RTRCODQ1OUVCMUIyMDlBRjZBQzYKLToxMDMwMDAwMEVBRENBMzc0RUVGODdGNTVENjNBMDMyNjNFREM0OEZEOTEKLToxMDMwMTAwMDEwMzA5NkJCQzUxMDAxQkQ1MkVENURGRTI5RDBBNURDNzgKLToxMDMwMjAwMEYwODMyMEY4ODMwRTU3QjgxOUYzNjk2N0JFOUY3MTIzQTgKLToxMDMwMzAwMEE1Q0IzRjhEMTEzNTk4N0NBN0I2RkM2OUU0RTczNzMzMDMKLToxMDMwNDAwMDA4RDgyNzNEMzM1NjYwM0NGODRGMzc0NUM2ODM5RUQ4OTUKLToxMDMwNTAwMDQ0RjE3RjFDRjU3MjdDQUM4OEI5OTkwMzYzRDkzRUJDRkUKLToxMDMwNjAwMDE2NjRDRjQ4OTBCRDI3RkM3QjlDOTc3NTVFNkYwMEVCODQKLToxMDMwNzAwMEQxNzVCNkM4QzcxRTM3QTNGNzFFMzdEMzE3OUI5Q0JEQTMKLToxMDMwODAwMDBBRjBEQjYwQjFBMjlBRjNBMEFGOTA5ODFENUJBNUYwQTcKLToxMDMwOTAwMDdEQTkyRkRBMzU4ODFCNTYyOUFDREQ3REFEN0Q2ODdGOTMKLToxMDMwQTAwMDZDNkFERDhGQ0Y5Qzg2Mzg4MTNDMkI0RjU5NEM4M0ZENTkKLToxMDMwQjAwMDcwRTUyRkYzMDQwN0YwRjFDNTZDREYxNkRFQjc5OUVDNkQKLToxMDMwQzAwMEFGNzEwQUYzNjM5NUJGNDgxMUUwNEY2NTQzNENDQjM2QUYKLToxMDMwRDAwMEM5NTk0NTE0MjJFOUVDRThBRDZFOTlCNURCNDBGMEJCNjcKLToxMDMwRTAwMDcyRTA1RjcxOUYzQkE3MzQyNDdDMURDQTFCN0E0OTg4MUMKLToxMDMwRjAwMEY2RTM0RUIwRjc4MTUyNURGODlBQTlERjQwNDM5RjQ1NTEKLToxMDMxMDAwMENGMzVEMjI1QzhBQzQ0RUIwOUNGQzE3NDZBMUVEQzE3OTkKLToxMDMxMTAwMDZCMENENEJFMkI0RjFENEU0N0YwNzNEQzQ0MEYwNkZDRTYKLToxMDMxMjAwMEM2RkVFQzJERENGRkFFMkI1MTkwRkYzQTVCOUNCQjQwMDIKLToxMDMxMzAwMDM1MzcyQUNDMkVGQTM4NTAzQkVBMzkwMkQ4OTdBNTk2NzMKLToxMDMxNDAwMDFCRkFCOUYwODRGREQ5RDg2NEI2M0YwQjY1RDg5Rjg1Q0EKLToxMDMxNTAwMDI3RUNDRkMyMTNGNjY3RTEzQkVDQ0Y0MkY5RkJBRDNBNjcKLToxMDMxNjAwMDk2NjE5RjE2Q0FCMDRGMUI5QkNDRjY2NTYzMkVCNjJGOTcKLToxMDMxNzAwMDBCQ0ZGREFEQ0RGOEZDNDk2QjE0QkYzRkRCREE4MkU1MjgKLToxMDMxODAwMDJCNUNDQ0JGMjE2NUIxMjBEOENCRERCNzNCNzVDOEJGNjgKLToxMDMxOTAwMEU5RTQ3NDcwNTAyRkM5MDlEMTc1NzUwNzU4OUNDMEZEQkEKLToxMDMxQTAwMEYyQkQ3ODBFREExRDE0NzFERjc1NjNGMDVFRjI1NUZBMjgKLToxMDMxQjAwMEVDQUVGNjc1NDMxRThDRjJCNDE3OUY2RUY5M0VBMkUxOTkKLToxMDMxQzAwMEJFNkNBQzE5MjJBN0FCOTRFOTc1MzJCNTEzNEE4M0VCRjgKLToxMDMxRDAwMDZBQjM2OTc5QkQzMkJCMDNGMjExMjc2OTZEQTFFNUVBRDMKLToxMDMxRTAwMDUwNTlGMzU1QUVGODgxQTkzQ0JFN0M5N0VDQTFGNTZGMjAKLToxMDMxRjAwMEVCQkVBQzAzRTQwMUMwMDFGQkM4NkRDQURDM0FCMEUzMkUKLToxMDMyMDAwMDEyMjVENDUwMDFCOTU2RUM4QzAzM0Q3RjBERDY2QjIyQUMKLToxMDMyMTAwMEMwQ0ZGQ0E5MkY5MUY2MjBDNDM1QzY2QkNFNEFFMDQzM0YKLToxMDMyMjAwMDVBM0ZDMUU4RkZEQ0VBNzc0MjEwMzg3Nzc4QkJEMUVBMzEKLToxMDMyMzAwMDg5NTVFNzU0OEY0OEEzRjQwN0RGODVEMUZBMjFFRDZBNTkKLToxMDMyNDAwMDkyQzJCRTE5NjQwNkQ4NDc2RUI2RkZEQkVENjBGQ0RGQTQKLToxMDMyNTAwMEVENjZDRkI3MzlERkZGRDg1RDNCREY0REY5NjhCRTlCMjgKLToxMDMyNjAwMEYxNjFCNzNCNUMwRkU3NTAwNkE3ODhBMTg3MDhFRTlCOEEKLToxMDMyNzAwMEM0REM3MDI4QTFBNUY4NTc3MDVFRThENjE3NjUwMkZCN0MKLToxMDMyODAwMDBBMEY3MkJFOUQzOERFQzdGNEY0OUQwQUVBRTkyQkM3MjcKLToxMDMyOTAwMDNGRDU5MTREQ0IxMzFGMEU4NTQwRUY2RTI2MjEwRkQwRTkKLToxMDMyQTAwMDQ5NkM4Qjg4RjkyOTRGNTY0REM4NkVBMkQ1MkZBOTdFM0YKLToxMDMyQjAwMDI2MUJGNENGQTcwQUIzNzdFM0RDREY2OEVCQkM3MTNDRDUKLToxMDMyQzAwMEM0RkZGRTc0ODRDOUJGMjczOUJERUQ3MjI0QTNCODlFMjQKLToxMDMyRDAwMEQ1NUVCNDU3QThDMzgwRjY0ODVCNTBDNkJDMjIzMThGNzgKLToxMDMyRTAwMDNEOUQwRUY1RUZBMDlFOTMyQUZDMTg4NUM3RjlFNzk5M0UKLToxMDMyRjAwMDBBQzYzRjRFQkJGOEJEMTc0OUI0NTM5Q0VFODg5QTQ1QTkKLToxMDMzMDAwMERGRjdDNjQ0RTRGNzc2RDUxMzA3QkI3QUIzQjcxMkNGMUQKLToxMDMzMTAwMDlCQzZDQTY1M0M3N0IyQjk1QzY0RTc2NTdDRDdDN0MxMTgKLToxMDMzMjAwMDNFRDlEQUVGNjZGMkMxQUI2MDVFNjlCQzdDREZFMURBMDAKLToxMDMzMzAwMDAwM0M0NTE1RjgzREFFMkZBQTQ3QkNBQkEyOEFGOUE5QkYKLToxMDMzNDAwMEY0MzdGQ0RFMUNDMDczMkExMDIzQzdFRkNEMkNGRURDNDMKLToxMDMzNTAwMDM5RTZCMzk3QTY0MUJFQ0VEN0Q1MTBCRjhCMDBGM0JGRDkKLToxMDMzNjAwMEQxRTQxMjYxOUY2OEYwNDAwNkMwRjMwRkM2M0QwNjAzMkEKLToxMDMzNzAwMDFCMzI2OEZEOEVFNTZBMDhENjYxQUE1QTVCMEZGOTA1MTMKLToxMDMzODAwMDlENkEyREZBMzkxOTUzRUE5NDY1Mjg4NzUyRTczNEYwN0IKLToxMDMzOTAwMEJFOEM4RTcyMTlGMzhCRTAzQkYwMjVFOTIwODdFMDlDMTAKLToxMDMzQTAwMEJDQjFGRjlDOTE1NTI5ODA3REQ1RDk4MDYxM0UzOEM3M0QKLToxMDMzQjAwMDYwQzkzN0VGQzhCRTFBQ0YyNzQ5OEREOTA4NjcyN0QxMTIKLToxMDMzQzAwMDE1QTgxRjZCOTA1MUZGMTU3ODk1MDRFRTNGMThFN0VEOTcKLToxMDMzRDAwMEUxRTg4NTI5REU5MEIzQ0E3QTdFMjNBRjU5QjY5QzE3RkYKLToxMDMzRTAwMDFGMUJCMTk2NzM3OUZDMjBENzc2Q0VFMzRGOEFCMTZGNUQKLToxMDMzRjAwMDY2QzU5MzdEQkUzOTgxODdCMjAwREUxQzM4RTBBQjBEMTcKLToxMDM0MDAwMDlGQ0Y3RDgxQ0EyNjk4Njc4MUVBNDFCODgzRUE4NjFBRjAKLToxMDM0MTAwMDkwNUY2MzQ5QjQwREU4RUVCQ0UxQjVDMTM5QjVCQzIzOUEKLToxMDM0MjAwMDA5RUIzRTU1OTM4OUE2NDFCQzdENzAwM0Y0QkI5OUQzNEIKLToxMDM0MzAwMDc5NzdCMTU1MUYzRkE4NDgwNjNGNEU3NUU3NDI5QzUxMkEKLToxMDM0NDAwMDI0MzFEM0Y4MTA4NzhDOTlDNjlCRDA5RDZEMjk0RkVDMDEKLToxMDM0NTAwMENEQjdENDlGQkNCREM0RjJGREEyRjhDNTk2RUY5N0VDRTIKLToxMDM0NjAwMEFFQjQ5NEE3RjQ1RDZBQTkzRjZEN0ZBREE1NUM5MUI4MzkKLToxMDM0NzAwMERBNTI3RkZBRTE0NTk2NzI3NUYyRUYyQ0Y1NjdCRUI5MjQKLToxMDM0ODAwMERDRjI3REY2QzAwQUNCRjdDQkRFNTk2RjI5NUYzRTc4QzAKLToxMDM0OTAwMDg3QTVCRTYxQUZEQkY1NjI5OUZCQzJFQzc0MTdEQzFGMzgKLToxMDM0QTAwMDYxODlDQjVBRkQwMEJCMURBRkZDQTU1RERCMDA3MkNENzEKLToxMDM0QjAwMEVGNDRGQTk2NDE4RkQzRjJGQURCOTkxRkE1Q0MwRDY5NDAKLToxMDM0QzAwMDIwNTdDNjcxMzk1QUU0RDNBQjQxOEVENkY4MTVENDA3Q0MKLToxMDM0RDAwMEIyOTdENTkzQkQwQkQwRkUxOEI3OURDQUEzRTk2MDZEMTYKLToxMDM0RTAwMDkyRDRGNzBDOTBDQkFEQjFCOUE1QTY3ODkzNUJFREM1OUUKLToxMDM0RjAwMDMzNUIzNUZFN0EwMkYxNzlBM0JEQUNFQTI0MDJGRDQwQ0MKLToxMDM1MDAwMDEwMDRFMkU3RDQ0Qjg1N0E2RThEQjYzN0NERUI3OTUxNTYKLToxMDM1MTAwMEM0QTNEMTgzRDRERjdCQzhFNEVGOERFNERGRDlGREI5NDgKLToxMDM1MjAwMDczRjVERkM2ODlDNDgzRTcwRDg0NzAxNDlFRTVEMTIzNEIKLToxMDM1MzAwMEI1OTAyNjRDRkRCQTFCODA3RTdCOUNFMUU2NURCNERGMzYKLToxMDM1NDAwMDlFMTIwRkVFNUYxQTdFNUQ3NzcxMUZGMkM1NjBCMThDMUYKLToxMDM1NTAwMEZBODVDODVBQjkzOTFFRDdDMUQ3Mzc0Mzc5MTJGRDRBRkYKLToxMDM1NjAwMDhBNzc5NEI3MDZERTM3MEIwM0YxNzY5MDNCQjc3QjUwMzIKLToxMDM1NzAwMDFFOEVGQjJGRDdBQkMwNUY0QTg5NTJBMEQwRjdBMTgzMjQKLToxMDM1ODAwMDRFMURGNkI3RUZFMzc4MkQ1MTJCNkEyMUE0NTQxQTZDMjcKLToxMDM1OTAwMDNBMDBDRjQ5MUFCNTMzRThCM0FDNkNEQjAxNzhERUVBMDgKLToxMDM1QTAwMDY2NzlDMjE3ODc3RTUwMEJCMjQ0OTlDQkVDM0Y3OUFBNUIKLToxMDM1QjAwMDMzQkU4MUY2MjNBOTE0OEUzNDdFODVGMTk0RkNEQkQ5QzkKLToxMDM1QzAwMEZFNDVBOUZDN0JBMDM3QjBFQUNGRDAyOUQ0NjQyQjc4ODQKLToxMDM1RDAwMEZGOEMxQkU4NDBDMDI3RDI4RjNCRTA0NUJERTE4NjQzMEUKLToxMDM1RTAwMEFGNTA5Njg1Nzg4NkMwRUM1M0Q4OUZBQkM5REU4RUVCODIKLToxMDM1RjAwMDZFRDhBRDYwQ0Y0Njk4OUZEQjAxRjQxNTY4QjBBRTc3MEEKLToxMDM2MDAwMDg2RjI3REM0NTM4N0MwRTJERURENTlEQUNCQjU3NERDQzcKLToxMDM2MTAwMEVFREM5MjZDODhCMTQyNUNBNEM5MjQ2RjdBQjhERUZFRkQKLToxMDM2MjAwMDhBNDdFNEY5NkY0Q0RFRkMwNUZBQUMxRUIyNzcyOEZENDAKLToxMDM2MzAwMDZGMTcyNzAwN0NCRDA0RTQ5NkZCQUU1RTAyRjRFRTU2RTUKLToxMDM2NDAwMEU5NkFBMjVEMUZEM0MyQTg0Rjk5QkQ3QjMzODdBOUFFOUIKLToxMDM2NTAwMDY0MDlFRUZCN0YxNEE4NDRGQkQ2RERGMjdDNUFGQ0I5NkEKLToxMDM2NjAwMDA3MjRBMjRGMUYxOUFGRkU0OTNCNTBERjkzMTJBNzA2NTQKLToxMDM2NzAwMDc2NDU4QkU2RDQ3N0E1OTEwN0U1REMwRkQ5MzRDRTM4QjMKLToxMDM2ODAwMEU3Q0FDRURCNzY3MzdDMThGMUQwNTQ5QzkxQzdEMzhDRkIKLToxMDM2OTAwMDM4QTNEMUNGQ0RCOTk1NjM0N0IzQzdEREQ0QkY4Qzk4REMKLToxMDM2QTAwMEUwREQ0NEM3MDFCQzc0N0VEMTU0OEY3ODkwMDkzQkE3RkMKLToxMDM2QjAwMEZCRTdGMjVEOTA0NzY1Rjg0OUU1REM3RUE5RTJGODFEN0QKLToxMDM2QzAwMEU3MjRFODI3Q0M4M0I4NDkwRTc4QjU1RkFBMDdCRTM0NTMKLToxMDM2RDAwMEUyMkNCRjAzNjM4QkQ2MEJDNTg4QzRFMjZBMEU0MzZGMkUKLToxMDM2RTAwMDg5NjdBNjIxQ0M5QTczMDZCQkUyOEJFNUEzMzJCRDQ2NUYKLToxMDM2RjAwMEZGRUQ4N0YzNjQxM0JBQURFNzM1MjdGNjVBQ0I5M0I3REUKLToxMDM3MDAwMDVCQ0IxN0M1QUQ2NTZBMzUxRjA1QkIwMDZDMzQ4QzVCQTAKLToxMDM3MTAwMEVDQjY3RTZGMzJGNjAzRUFEOEY5MzI4NThFN0M4NkU5MDQKLToxMDM3MjAwMDVGQ0I3RDM5ODRFQkZGN0NERTRGNTE1RkEyMDZDNDZCMUIKLToxMDM3MzAwMEUxMkQ1NkJEOUFDRkY1N0NCRTREN0Y1NkZBMjQ4QzI3REQKLToxMDM3NDAwMEQ0MUMwRTFDMDJGQkQxODhGQkZDQzZBMzU5RUU3NTMwQkQKLToxMDM3NTAwMEUyMzc3Njc5RUU3OTZCMUJBMTVGRDAyRjhGQjg1ODFDQkEKLToxMDM3NjAwMDAzRTJDMzlGMTRGMTc4NDkyMThGOTc4Q0UzRjE5MjIyRjEKLToxMDM3NzAwMDE2MkY3MTQ4REEyQjRCMDVDQzBCM0RFOTQ2M0IyMzNBMUIKLToxMDM3ODAwMDhEQzU2OUQ4MzlBRjBGRUJFNTlGMDkxQTFCMkY2MjFBNTcKLToxMDM3OTAwMEVGQjZCMkQ4OTUwQzBERjEzQ0E4NjdDNDREOENCODgwM0IKLToxMDM3QTAwMEQ3QTdDRjA3M0VEQjFDN0EzNTdBOTBEMjQ5RURBRjVEQzMKLToxMDM3QjAwMDA0RkE5OTJGQkQ3Q0I4MTVFNDVCOTE4Q0Y5RENFQUNDNTYKLToxMDM3QzAwMDU1REZGNTQwMUMxMkJFRDM3MjZEQjEzNjE2RjlFMDE3MDUKLToxMDM3RDAwMDBFOEMwRjc0NzFCQTM2Q0UyNzFBNzExNkJGODdEOTQ1NzEKLToxMDM3RTAwMDFFOEY2MEVDMDM3OTc4QkVCRTA3RUNERDRCNzY1MzVBMzIKLToxMDM3RjAwMEI0RTgzQjE2Q0YzM0UyNzY1M0ZBQUNERkZCODg5MEEzRjQKLToxMDM4MDAwMEQyNzU5Q0I2MjQyRTMyRkI0QUY3RDY5OEYyMUQyRkU2Q0QKLToxMDM4MTAwMEVCMzY3NTY5RTJERUE1QjRCQzg3QzQyQkUxMUVCQTBBOUIKLToxMDM4MjAwMDRFMUZBMTQzRDY3M0IxNjM4ODgwRTdBMkM2MUM5NTQyQTAKLToxMDM4MzAwMDcxNUE3RkVBQjNENkVGRTVCNjczQjMxN0RCQ0ZEMURBQUYKLToxMDM4NDAwMEY2ODU3QzEyMzlCOThDOEVCNzQ1OEIwQTIwNDdCNzJDODgKLToxMDM4NTAwMEE1QjYzQzJENEZGNkYwRkRBMjQ5NjQxMkQwRTE3Q0M5MUIKLToxMDM4NjAwMDFCNEEwMDdFNUY5MzcwN0ZDQjc1NkNGMjFCOTBDNzQ4M0MKLToxMDM4NzAwMDhFQjA3QzI0NzUwMkNCOEI1NDVGOTI1MDRGQTkxOUE0NTMKLToxMDM4ODAwMEEyQzIzQkI0OEY3NEZGOTkxMDgxN0QxMTIzQUVGNTA0NjEKLToxMDM4OTAwMDVENTdEMDJCN0JBODVGNUVFQTAwM0Y1QkM1NzIxRkY1Q0EKLToxMDM4QTAwMENCQTFCQzk3RkFFNUYwREM0N0ZENzI3ODBGRjk0ODUwRTAKLToxMDM4QjAwMERFNEZGRDcyNzhGRTg0RkFFNUYwRkU1OUVBOTc0M0Y5OEYKLToxMDM4QzAwMDM2NkZDRDdDNEYyRUVDMUI5NTIxQkQ3ODJBRjYyOTEzM0YKLToxMDM4RDAwMDI4QkM1RDhBNDMwNUZBQjBDQkExOUE5QTlCOTVDNTk0MDIKLToxMDM4RTAwMEE0RkVDRUY1MTRFRTVGRDRDRTY3RjlEM0YzM0Q0RkNERjEKLToxMDM4RjAwMDZCOTNBREYxMzU3M0ZDNzEyOEJFMzYyMDE4RjEzNTA4OTUKLToxMDM5MDAwMDc5MUVFM0ZCMENBOTM4NUI4NEM1RDlDRURFOEY2RUY0M0IKLToxMDM5MTAwMDgzNzFDRDYxRkRGMEY4RTYwN0I3RkZFNzYzRURGNEQzRkYKLToxMDM5MjAwMEVBRUE3QkJCM0QyNTcwOUUyMzRBQ0NGQkM3QzYzOTBGMTQKLToxMDM5MzAwMDYzN0VBQkY3QjU2MTlFOEMzM0VGNjgxNEQ2NzU1Rjk1RTcKLToxMDM5NDAwMDE3RUZGQTcxM0EyMjJBQzg1QkJCM0Y2N0Y4NzE3NjdCQTIKLToxMDM5NTAwMERBNzhEQUY1OUI4RkRCMTU0NkRDQjRDNzQxMzA3RjNBNjUKLToxMDM5NjAwMDI2NTA3QjAyRUM4QkQ2RjhEQ0I3MUQyM0M3NTM1RkY3REMKLToxMDM5NzAwMEYwNzM0NTM2Qjk5MDNBMzdDMEUzM0UyRUIwNjZFOTNDNjUKLToxMDM5ODAwMDlEMDJDNzA3Q0Y2NzQ3RDE1OEMyRTI3QUU2QjhBQUE3MTcKLToxMDM5OTAwMDM0OEU4N0Q1M0Q1RTFERUQzQTgxREE3QjY4RkZBOTkxQjMKLToxMDM5QTAwMDIwQzREMTM2QzIzOTgxMzRGMzdCOThGMzdCNUI5RTEzRkMKLToxMDM5QjAwMEVEOEQ4RDc5MEFEQTQ5NzU4NUExMjBCNDZGQ0Y5QjExMDEKLToxMDM5QzAwMDM0OUYxQjMwQ0UzNTFDRjJDRDUwMDY0Q0ZEQURGNzk1MjMKLToxMDM5RDAwMDhDQUFGRjI0QUFBRkI1NTFGNEI1RTQ2MkU3N0FEQTBGRjYKLToxMDM5RTAwMENDNTZFMEJDNDZCNzc3NzkxMkZDRThFRTYwMDBFM0VGMTYKLToxMDM5RjAwMEZENzkzMzMwQUYyNzU1M0YzODBCQ0Y3NTQ4NUU2NjBGRTIKLToxMDNBMDAwMDRCNDEwNUVENjExOUU2NUYzRTU0REZBOEQ3RUE2MTc0Q0EKLToxMDNBMTAwMDQyRDkxOUUzOEI2RTZGMkZENjczQzk2MUJDNEZDMjE1QTMKLToxMDNBMjAwMDYwNzk3NzJFOTVFREM3Nzk0QTQ1QTI5OEU0ODUzMTZFODUKLToxMDNBMzAwMDhCODdDNUEzQkJDQjIzMkFDNDU5QkE4MzMyRTZFOTc3NjcKLToxMDNBNDAwMDZCOTU4OEU3NzY4RUU3RjYyMkMzOUUwOEExMURGMzZGN0IKLToxMDNBNTAwMDFDQ0Y0NjNGRUQzQzBFRDBERUVDNDQ3QjJFREM5MkE1MjUKLToxMDNBNjAwMEMyRDUyRjVFNUY3ODBGRjA3M0I3Nzc4MzAyRkI5MkNFREIKLToxMDNBNzAwMEJDQUE1MUZCM0RDMEU1RjZDOEZENTY4Q0E5OUI4RUZENDYKLToxMDNBODAwMEZFMUJGNEVCRjQyRDU3QTE1RkM3MDhFNzkxNUVFMTcwRDAKLToxMDNBOTAwMDVFQThERDZBREZDN0EzRDAwNkNERjkyOEY2QTc4RkRCQzUKLToxMDNBQTAwMDlGRjY3NkFCQ0IwNzlDQjBFRTlCMUVCMTlFNUY3NjEwNjcKLToxMDNBQjAwMDc2OUU2QkNERkU3NUM4RTczRDcyMTJFREE4OUUyRjg0RjEKLToxMDNBQzAwMEI0RTdDMkM2NjQxOEZBMkNFNURGNUJFQ0EwMDJDRTRGNjcKLToxMDNBRDAwMDA1RkMzQjkwMUFFODhCOEE4NEQ1NkU5OTdFRDg1QUFFNDUKLToxMDNBRTAwMDRFNUFDQjMzREZCNERCNDFGQTZCNjAwNzJERTY3MjJGMDEKLToxMDNBRjAwMDQ5RTUzRDRCODYxOTk0MDExRkUxNThCQzA2RTA2RTIyNTIKLToxMDNCMDAwMDdENkQ5MDI3RTFFMDcxRjJDNTVDRkYyREU0RkFEMTlCNTkKLToxMDNCMTAwMEMxRTJCRDA1Q0QxRThCRkY0OUY4RkQ3Rjg1QkNGRkEyMkMKLToxMDNCMjAwMEJBNDNFQjNBNDBDODg2MERCQjRBNDNCRkI1RThBQUJEQ0QKLToxMDNCMzAwMDM1MjgyRTZERjY1NTkzNkUzRERGQkZEMDY2M0ZEOUVEMkIKLToxMDNCNDAwMEFDMUE3OTE3RTZFOUU2REJFMjFBQzY3RTJFQ0MxM0VFNTQKLToxMDNCNTAwMDM5QjA4RjdGQkVFMzFBRkQ0MTFFMTZDODM3RTNGRTE3NEEKLToxMDNCNjAwMEJDNkY5OEI2MkY5MjEzNDI4OEUyMjkxRkNFRTc1MDc4OTcKLToxMDNCNzAwMDBBNkUyMUZBQUUzNDc0N0MzOTVGRjc2MTc4OEI1RDgxMEYKLToxMDNCODAwMDc4OUJDN0RGRTU3QkQ5QkQ1REY5NzU1MjVDMkI4NkYzNjkKLToxMDNCOTAwMDBFN0Q2ODBGMkM1QTQ1RTc4Mzc2RjgxOUNDODMzMUVBRkQKLToxMDNCQTAwMDY3NjdGNUY1QzNCRUU3OEUwNjgxRjlBNTMxODI3NjhEOEMKLToxMDNCQjAwMEIxQ0UzQkJDRUM1QzYxRDNFNTQyNUM4NEY2RDExMjFDMTcKLToxMDNCQzAwMDFGRTEyQTE5NUE1RjhBQTdFMzBDNEYyQ0NGRjBEQTdBNEIKLToxMDNCRDAwMEVCRjlDNzI2OUJGRDYyRDBDMzQyREJGQjAxMEZEQjE3NkQKLToxMDNCRTAwMDM3RjhFMDgzRDk2RjRFMUE0N0UxNTgyREY0RDY2NzRDNjkKLToxMDNCRjAwMDM4Nzc3RDY5RTIwRkM3MTlFMDQzRjg3RDBDNEI3RDAxRjIKLToxMDNDMDAwMEZFMzhBMEZDNTAwNTdFN0YzRTZCRTAwMTQyNDlCMjI5QTAKLToxMDNDMTAwMDgzQzRFQTI4RjFGREQ0MzM3ODg5NDBDQjRCMzYzRkREQUQKLToxMDNDMjAwMEQ5NUQwNEM3QkEwNzlGMDQyM0NGRDVCNTZGN0VCREE5NjAKLToxMDNDMzAwMEVDQjkzQjgxRTUwMDFGMDdCNjE2RDk3QTlCRUU4M0ExNEMKLToxMDNDNDAwMEE4REIwOTc5RjM2MEU3RUE2NDlCMDRCOUI2QTJCQTJENTAKLToxMDNDNTAwMDU0M0NENDJFMUJEQTA5QTNCNDBCOTM2RDcyOUE3NjVFOTIKLToxMDNDNjAwMEEzMUQ0NUQ3NDZCOEVGODlDRkNCQzNCRjhCMUMxRUYzMkUKLToxMDNDNzAwMEY4MzJFMDRERDVCQzc4QkU3MTgxQUM0MjVFQzY1RjBCQjgKLToxMDNDODAwMEM3OThCM0NEM0I0MkI2MzkyNjBDNkY0N0MxNkUzM0UwQkYKLToxMDNDOTAwMDE3RDNDMzFGODdFRkU2RjExREEzQzBGRkI3QzZDN0Q5NkYKLToxMDNDQTAwMEZBNzNGMkVGRTcwRDFGQURCRTYxQ0NDOEYzMDVCODFDODcKLToxMDNDQjAwMDc4MEY5MUU2MTU0REZENkNFREZGMTRFM0UyRjIwRDA0NzMKLToxMDNDQzAwMENGMkZDQTBFNUQ4NUZEQkM3MkY1REJFOERGQ0I1OTc1RTEKLToxMDNDRDAwMDJBRDgwMTlCNjgxOUVDODA0RDdEQkQxOEZGMkUyRkJEQTEKLToxMDNDRTAwMEI3MUI4OEJFM0NFMTIxMjAwRkE2MTAzNTZCMEZFRDc3ODYKLToxMDNDRjAwMDhBMkFDMzg5MkIyMjVGN0U0ODg0NzgzQUI5ODY2MERFOUYKLToxMDNEMDAwMDQ4NjZCRjg3REQxQjU0N0NFOUMzRTA2RjY1NjUyOUI4NTEKLToxMDNEMTAwMDlGOTE5MTM1RTM2MTY2RjRCMjM4QjMwMTdGNDZDREQxMEUKLToxMDNEMjAwMDVBODhCRkNCNEQyNDI0MDA1QzQyOUNENDAwOTM1RDQ0NTAKLToxMDNEMzAwMDcwN0ZDM0EzRUZCQjBEQ0UxQjEwOTlFOTI3QkMzQjA3RDcKLToxMDNENDAwMEY0MkE4RkI3OEY2NTI0NDNCQTlENkExM0U2QUZCQzI4NjcKLToxMDNENTAwMDYzMUM2QjJDNUMwRDQ2ODlCMkJDM0M3QjFCQzA1MzFFQTQKLToxMDNENjAwMEExMUQwODAwM0Y4Qjk3NEQ4OTg4QTEwNEVEQkZGMjI0NjcKLToxMDNENzAwMDZCNDdGRTgzOUQyQkExQkVDOTkyNjdCQzQzNzgzNUU0OTcKLToxMDNEODAwMENBNTgxRTg3MEYyRUI1QzZBOUM5MjA5RDMzNkQ1RkY5OEQKLToxMDNEOTAwMDFGOEIxRTg1MzhDNTk4NjFGMjlCRjlFRDFFMEU2N0U2RjQKLToxMDNEQTAwMDQ5MTI4NkZFMDMwRDU2QkRFMUUxNzlENzFFREJCRDMyMTcKLToxMDNEQjAwMDk1M0U4N0Y1M0U2OEJCRkZGMEFEMzBFQTAxMTcwOTI5NTMKLToxMDNEQzAwMDRFQjQyRjk2QTJERDYwRjgyNTNCQTAyMkQ4RTM0NTg0QUYKLToxMDNERDAwMEU1RTdEQkRCQ0Y2MEVENDk5MEY5MjkyRTBGNTE5NDRBREUKLToxMDNERTAwMEZBN0Q4NTQ3Qzc3QzQzMTcyRDUzM0MwQTRFQTJFNEQxODgKLToxMDNERjAwMEY3RjkyMjhCQjdCNDA5NDQ4NkYyRDA3ODA5Q0MzMzcwMzYKLToxMDNFMDAwMDI5NUZFQTAwRkJFNTgwMzIxREVGNEIzM0ZDRUE3NjM1OTMKLToxMDNFMTAwMDg0NzkxMEE0QUNENjYyMzcxQkY5NUVFQjJCNEFDNkMyN0MKLToxMDNFMjAwMEY3Q0MzMUE5Qjg5MzBBNzRCOTNFQjcxNEVENjg3RkNFQzgKLToxMDNFMzAwMEMwREY4MzlDRkQ2Q0IzN0Y4MTcyMzk5NUEzOTA4NzcxM0QKLToxMDNFNDAwMDI5RTUyM0FGN0I2MzZDMEUxREY3NzQwMUQxNENGNjk5MDUKLToxMDNFNTAwMDRCOEU2MjlDQ0Q3NTdBOUNFNTdEQTJENTdBQkU1QUY3RDEKLToxMDNFNjAwMDhBNzUzMDRFOTE5N0YxNjEwRDUxM0JBMDVEMERCMTlFNjkKLToxMDNFNzAwMEEzNzY5RENFQjNEOEVCNDNGRDE3NUFERTI3QTg1RDYzMkEKLToxMDNFODAwMEJFRjc2N0U0RkUzMzg4NTY2NkVFN0ZDMjA4RkQ0RkIyODgKLToxMDNFOTAwMEY1QUZBNkVEN0ZBOERGMUM0QkJGOUQzMjhCQkZDNjAyREUKLToxMDNFQTAwMDlFQjRGNzUwNTY3QjZCNEJCQ0Q1MjNFRjBGNTQ3OTU5MUEKLToxMDNFQjAwMDVDQjMyQjE4QzVGRDgxNUE0MjE5OUZEMkNCMTU1RjFDRUMKLToxMDNFQzAwMDk3RDhGOTVFODJGNjFCMjlCNEVFMEZENDcyM0ExNjI5MDAKLToxMDNFRDAwMDY1MDAxRDVGMjE1QkVGMzM5RTRCRUNGNzFCNUJFREEyOTIKLToxMDNFRTAwMDM3MjBCODQ1RjEyNUZBQUE5MkI4NEZGMEE5NTcwMzNGRjkKLToxMDNFRjAwMDZDMjRCQjM5RDk0QTMwM0UzRDM3NjNFMDY2RDgwN0JGRjIKLToxMDNGMDAwMDY2Q0I3ODY3RTcyQ0NDNjc0NjdGRkVFRkI3NTQyREUwOTEKLToxMDNGMTAwMEY3ODFCMkJDRTY4MDg4NzgwOUQ3OEVDNUYzNUI0NjNGNEYKLToxMDNGMjAwMDYxMjc5OTA4NzIzMTJDQjIzQzA4RkNBMUUzMjc3M0YzOTYKLToxMDNGMzAwMDMxMEZEMTNFQUVGREZDN0I5MzJFQ0MyRDM1Q0QyQjA5MjAKLToxMDNGNDAwMDc5ODVFNkYxRTYxNUVDOTI0Q0YzMDhCQjQ4MzU4RUM3NEYKLToxMDNGNTAwMEVERERENDc4NjMyRTZDQkMyMzNDOUU2NThDRDdCNEMwNTkKLToxMDNGNjAwMDNBQkYyNkE3OEFGMzZCRTI3QzZDOEM3NzA0RTY5NzA2NEYKLToxMDNGNzAwMEJGNjcxRDhGRTc0REE2QzZCQkQyM0FCRjI2OTc4QUYzMEYKLToxMDNGODAwMDZCRTJGN0VGQTZDNjFCNzM2MUUzMTk3MTlEMkU2NzM0RDAKLToxMDNGOTAwMDBBNzQzODUyN0NDNzg4RUI1Q0VGN0FEMjEyRDcyMUU0REUKLToxMDNGQTAwMEM5NzkzNUE1ODQ2QzEzOThGQ0Q4RTlBREQ5MDg3NEYxQUEKLToxMDNGQjAwMDUxQzNGQTMyRDQyQkRDQkVDNjdCNTZBOTNFNUUyODMzRjEKLToxMDNGQzAwMDc4MUIwQkJERjEzNjEzMUVFMUJDOEQzRTE5Q0U0OTI4N0UKLToxMDNGRDAwMDQ0NzdCMTczMTMzQTlFQTMwOEUyRjMyMTZBQUZFQjk4REEKLToxMDNGRTAwMDVGNTI4NkRGMUY2QjBENjE3OTc3RUIyQzdDMUFGRDk0OTUKLToxMDNGRjAwMENENjJGNzgxNUQzNDQ3NDg2QkI3QkZFRTY1RkVFQ0I2MjYKLToxMDQwMDAwMDNDRjU4NkFGODE3RUFCRjFCMDdDREY1OTk3MTFERDY0NjIKLToxMDQwMTAwMDQ3NTNDM0ZBMDA5QzlGRUJCOTlFNTQ4MDhFOUNCNDlEN0QKLToxMDQwMjAwMEMxMURBODFCMTM4N0Y1Rjc1NDFDNEFCNjQyMUM1NDc2RDEKLToxMDQwMzAwMDY4OThFRkFBQTVGRkZCMDY0N0JDNENERkI4NUNBQzNEMTcKLToxMDQwNDAwMEI5OENERDhCREE5ODNBMTdENDgwRjk0NzhEMEJCMzMwRjEKLToxMDQwNTAwMDFGNjFEMTYyRERBNzUyQkMyRDE2ODRENzRBQjlCRTgzMzkKLToxMDQwNjAwMEYzNTBEN0YxQTVCNkZCMEIwMUQwM0M3NEJEMDJCQTE0RDYKLToxMDQwNzAwMDg3N0JFM0FFMkI3Qzc5ODk0MEZCMERGQkFFNDUzRjIzNkMKLToxMDQwODAwMDRDMUI2NkQzN0VBRUUzRkFCNkU2OTg4QjQwM0M4MkNDRkUKLToxMDQwOTAwMDc3QTJGQzVBQkNEOEVBMTc2QzczMjc1NEIwNzNCNjU1OTQKLToxMDQwQTAwMDA0NDgxQjZEQjdBOEMxRkFEREU1NjI3QzE1QjZERDBCQ0YKLToxMDQwQjAwMEQzNzg5NjdCNjI4QzdDNUIzQjdFRUM3MUQzOTdCQ0ZDQTcKLToxMDQwQzAwMDlFMTgxRTFGM0Q0NUNBRjFEQ0I5OTE5NzZCNkY2RkM0RjYKLToxMDQwRDAwMDQxMzcwMEFGODM1Qzc1MzJGOTMwOUMwRjE4M0M3RkU0QTgKLToxMDQwRTAwMDcyNzA0N0VCOUIxODQ3MzNFMENCOTdFMzAyQzhGQjgyMjMKLToxMDQwRjAwMEU2MzcyRDc5RUYxNEIxNjg1NDFCRkIwNDQ0REE1MzgxODEKLToxMDQxMDAwMDdBRDgzNjlGMURDMjlFQkNEMUVFODlDQTI3RjJFRjA3MkUKLToxMDQxMTAwMENBRjhERjMzMTA4NkNGRkJCRDYxRjM5RUYzNEEyOTQ5MEQKLToxMDQxMjAwMEM3M0YyQzFFREM3ODU4MEFCNTY5NDM3ODMxRjBGMEJGRTAKLToxMDQxMzAwMENENDdGNzczQkNCRjMyRUZFMzJBRTYwNzE2NUFGRTZFOEYKLToxMDQxNDAwMDgwNzE3RUVCREE1NDU5MjZCMjg5OUUxN0FFNzBFQUNDQTQKLToxMDQxNTAwMDVGMUQyQzA3QkEzQzdBNzk0Njg4RkRGRDBCNkUwNzI1NUEKLToxMDQxNjAwMDdFMkQ4MjFERjREN0Y3QUYxNzU5RjI5QTc5QkYyM0FEOTAKLToxMDQxNzAwMDk3M0Q5RkQyNzQwRTk5QTRGNjhEMjBGRkE1MkQxNDQ0NkYKLToxMDQxODAwMDdCNjA5RDg4RkIxRkY5NTE5NjhGMDdERjhGNUJFRDU2OTMKLToxMDQxOTAwMDRCM0U1RTdCRkZFMzAyQzQwRDFGODBGQzQ0RDMzOUJCNjIKLToxMDQxQTAwMDgyRTYzRUExMTNFQ0JCQjYzODhCNDMyNDY4M0QwQTc3MDgKLToxMDQxQjAwMDYxNzM0MkU4MjgxRkNBRkJCMkNCRjVDMjU1RDY3Q0MxNTkKLToxMDQxQzAwMENFMzk4QkQ1M0QxQUU0RDVENEY2QzI4NTYwOUJCNkIzMDMKLToxMDQxRDAwMDM4OTc1MTNGMTVFRkUyRTc1MTFEMjQ0QUUwRkM4NUU0OTIKLToxMDQxRTAwMDY1RjFFNjIwQkZBRkUzNkNGOUJCOUY4ODMxQjVCODE4MjUKLToxMDQxRjAwMEYyNzZFMzRBMEQ1REI3MDc3MzIyNzUzRTg4NUYwNjJBQTMKLToxMDQyMDAwMEEzQkI4MDNFRTUxMEU2NzkyRjZEQjkzMzBDNzE0MjM1QzIKLToxMDQyMTAwMDI3N0QxQzdDMjlCNzBGMTZGQTU4NUNFNTJENDdBMjA4QUMKLToxMDQyMjAwMEUyRTZDOTlDREE4NUJFRUEzNEY1NUJCRTg1RkRDRDFEQUMKLToxMDQyMzAwMEUxMUVGQTY2REVDRjAzNjI3QTc5QjA4QzdGRkZGMjZBMDQKLToxMDQyNDAwMDExRUYxNzcyMTMxRjlFNTc3NTk3RjZDRTAyN0MzQ0IwODQKLToxMDQyNTAwMDY2NDcyOEREMzlDQjE5NkEyNDYyODZDNzVEQ0FFRTA3MzYKLToxMDQyNjAwMDIwQTQ2RjM2Q0M3M0QzRTcwRkY2M0Q0REU3OURGREI5MjMKLToxMDQyNzAwMDE3RTU2Q0I2QzRGQTM1QjU2RkY2RTUwRTZGRkZGQ0E3MEYKLToxMDQyODAwMEVDMUNGMkYzRkNCRTc1NDI0QUFGMDRCRkIxMjc1NTI2QzEKLToxMDQyOTAwMDMxQjg4RkJEMjc4Qjk3NjMwMkZCOUUyQUZGRkIwMkY4ODQKLToxMDQyQTAwMDdCNEEzRDQwQTM5NEY4RkVFOEZCRTU0Njg4QzNGNjA4NDgKLToxMDQyQjAwMDg0MTNFQjJCMEIyMDZFREZDM0VGNzczRjBDREY2OUZCMjIKLToxMDQyQzAwMEI5NTdCRkZGRjA1NkQwMDczMzlDRTg2RkY2NzA3QkM3MzUKLToxMDQyRDAwMDgwRUYwMzFGQ0JGQkY5QzBDN0Y4N0QyNDdDREVDREYxNTYKLToxMDQyRTAwMEU5MDU3QzA2Q0UwQjlGNzdBN0MzQzc1NTAxN0QzM0JDN0MKLToxMDQyRjAwMDc3NDMyNjA4MDVDMUZEQjk3MjBCRTQ1QkZGNkIyQjA5MDAKLToxMDQzMDAwMDdGOERDRUUxODFEMEJFQzdFMTRDMTE2RDdGNkZCQUY2RDMKLToxMDQzMTAwMDNGQ0VEMUVGODM3NUYyQUUzRThFRjNGMzk1N0E0MzgwQjQKLToxMDQzMjAwMDhBNEQzMzA5RjY5MzA2OEUwN0QyRjU2M0FDNkIyODhCNjIKLToxMDQzMzAwMEM5Mzk3NzI2N0I2NjczRkI1MjcyMjU4MzkwQkZBMDU2REUKLToxMDQzNDAwMEREN0ZCMzRBRjk3RTYzNzE3MjQ5QkEzOEYxRTM3RTY2NjQKLToxMDQzNTAwMEY3Njc4RDEwMTc0RjcwRkM1RTk5MUQ3RTEyRTBFRTUwQ0UKLToxMDQzNjAwMEVGNDU3RkNGMjk5MDMwRDRERjM0NkI4MDA4QTY3NkZGRUQKLToxMDQzNzAwMEU1NjdGOEE2NzBGRjEwRTA3NkNFNjZGNzU2RkIyOERFRkMKLToxMDQzODAwMDIxNDFDRTU3QzVFMERGQTQxRDI1OTBGRkVFMEIxRUM1RDEKLToxMDQzOTAwMEJDNTY1RkQ1MDBGMjNCOEFDMjdDNDY1N0UwMEYyQURDNTAKLToxMDQzQTAwMDdFNEJGOEZFN0IwMUQwNERCNjY0RDBERDM3QkI4MDZFMEUKLToxMDQzQjAwMEE0QTFGMjk1NTBERTk1Q0REQUZGM0ZGRjM3QkJDMDVGNzkKLToxMDQzQzAwMERDRTlBNDZENDAwRUU2M0JEMUJFQjFDRkVGMjUwRUFGQzgKLToxMDQzRDAwMEFDRUEzRjg3RjkwREMzQTc2QkUwRTFBREI0N0RDRjQ0RjQKLToxMDQzRTAwMDc2N0ZDQjVDMzFCOUU0QUI0MDk3NTc3QkQxM0VBM0VGRUUKLToxMDQzRjAwMDk3OThFRjFGM0JDREU5RUQzNEY3RTc3QjNFNTVGMEJCRDcKLToxMDQ0MDAwMDdEM0Q0NkEyRDc4MTBCQTdENzgxMTFFOEY1OTg4RDVFMzcKLToxMDQ0MTAwMDNGMjZFOUU5RjU5RDc0RjI4M0QyRUJCQkQwREU4RTE3MUYKLToxMDQ0MjAwMDdCNTkyMkZBNzZEODU3OTYzRjVCQjAxQkZBOTNCRjM0N0MKLToxMDQ0MzAwMDY3RkJEM0Y0Mjk3REI2MjU4NkFCMTkxMjJDRTc5OTg3NDMKLToxMDQ0NDAwMEU0N0RFNDEzNUZFRUQwM0QwM0M2REYyREZBMjcyMDg0MjAKLToxMDQ0NTAwMERDMzRGRENFOUNCMTFERTREODM5RjQyQkZBRDNGNDlCQTcKLToxMDQ0NjAwMEY0MzE3OEU3NUVFRDhEQTRCQjM3NkU4RjlGRTVDN0ZGMTMKLToxMDQ0NzAwMEM4Q0ZFQThEQzQzNzZGRjk1OTdFQ0E0ODdDNzNEMDlGODQKLToxMDQ0ODAwMEUyOUI2QzgwRTM2QzdDRjMxMUFGNEZENzIxREY3RjRFNTIKLToxMDQ0OTAwMDdDRjM2RDdDQkE0QjE5REZFMEZDMkYxRENFMzcyNEI2QzAKLToxMDQ0QTAwMEFDMEJFNEYxQzY2MkM2MTc5N0RDQjMwNkY5MjJDNTQ3MjgKLToxMDQ0QjAwMEIxNTZGQzJFMEQ5NTUxN0UxQjdDRjRFOTNEQUQ1OERGQzUKLToxMDQ0QzAwMERFREUzRkMyM0Q4MTk1MjlGRTBGNTdDMDNDRjQ0QkQ0NDAKLToxMDQ0RDAwMDBFNzYzRTY5MDBDRkUxRUUyMjgzRkQyRUNDMTM2Njc5ODUKLToxMDQ0RTAwMEI5OUU1ODRDNjdFNjQxOTJDMDdEMTI5NzcyM0NFQzA0MkQKLToxMDQ0RjAwMDFGMERGQ0EwMTkzQzlFMjUyN0M5MjJERjcwN0VGNjU1QjIKLToxMDQ1MDAwMDI1QUFDQ0Y3QkUxQ0UxRUQzRDk5RTExQTE4N0YxNzE5RDkKLToxMDQ1MTAwMEMwRkI5QTQ2NUFBNzA1MUNERTMzRDlGQTAyN0YxQTNBMjUKLToxMDQ1MjAwMDNGOUIxRTVBRTk2N0U3RTU1NkYyN0VCMjNGNTdBMjYwMEQKLToxMDQ1MzAwMDlGREFGOTdERUU5QTlGQkNGQkQ4MjhGRDM0RjNGNjExODMKLToxMDQ1NDAwMDBFRkYwNUYwN0ZDNDlGODY3RjI5RkYyRjgzRjcyNkZFOEQKLToxMDQ1NTAwMEFGMTI0QUQyRjI3RkIzM0ZCREJFQkFDOUZGQjdFNUY3OEIKLToxMDQ1NjAwMDZGQTZFM0NCNDYzRkUzRjdCM0UxN0JCRjlGRTlGREZERDkKLToxMDQ1NzAwMDFDNEYxNzhBRUZGQjc5RkI3QjJFMUNERkY3OEM4MEVGM0IKLToxMDQ1ODAwMEFERTc4OEVGRkJEM0I1QTdGOEZFMTczRkNBRkZCRDA4MUMKLToxMDQ1OTAwMEJGNEZGMzYyQkNCQzdCMjZEOTI3OTRBNDg1RTNCQkU2NUUKLToxMDQ1QTAwMDdFMTQ4REY1NDM3OUVBNjM4MUQyRkREQ0NGQkE0M0U5MEQKLToxMDQ1QjAwMEVFNDVBMkVEMUU0QkQ3NkU4MTVGMzU5MkNGRDdFMUZENjAKLToxMDQ1QzAwMDVGNUZGMkUyQkUwMkQ1OEY0RkZDOERFOUUwNDdFOUU4N0MKLToxMDQ1RDAwMDYwQUVDOEU0OTBFMkJGQUMwQkY0RkQ1RkQxRkY4MTc0MjQKLToxMDQ1RTAwMEZEREZDNUU1RkFEOUVDODJENzg2RUM4MjVGRjhBQjg3QjAKLToxMDQ1RjAwMENCQkY1REZDN0NCMkFDNDY5MjdFOENEQjBGNUMwNUYyREYKLToxMDQ2MDAwMDZBRTcxREQ5MDJDNEJCMEFGNTg0MDA3RUMyQ0ZCOTFFNzkKLToxMDQ2MTAwMEJCMDIyRTBEQUExRTZBQjc1MzRFMDhGMDc3M0E3NjQ2QjMKLToxMDQ2MjAwMDU1MDFDRTRCOTlGQUZCQ0ZEMUZBQjNDMzQxRTFGQkFEQjMKLToxMDQ2MzAwMDFGRTU5REZFM0I3ODJFRTBGMzNCNUYzQkE5M0Y1QkZGMTAKLToxMDQ2NDAwMEJEMUZGNTRGRjgxRDc4RUE5M0FENzJEQjk4ODcxOEVFMjEKLToxMDQ2NTAwMDY1NzlCNkIzRDJGRjVEQ0I5RkZCNjRBRUM3QzIyN0NERjEKLToxMDQ2NjAwMEYyRkZERDE0NURCMUZFQ0U1N0ZGNTBGODNFRjMzM0JEQ0YKLToxMDQ2NzAwMEYyNDUzQUY4RUM3ODM5MUI5QzE3Rjk2NTQzNEYzOTMzMEEKLToxMDQ2ODAwMEQzRTgyOTdCN0Y4NjlGNkRBQzEzNUM4QjYxOEVGQkU0NDYKLToxMDQ2OTAwMDY0QTZGNDc3MzZGNEU3RUQxNEYxMUM1NTIzOTcyNzhEQzMKLToxMDQ2QTAwMEIzQjJCOEREQUU3QUEwRkYwNzc4MUNGRTgxNTVGN0Q2MEQKLToxMDQ2QjAwMEMwQkVGQUFFQkJENDBBNDA0MTdFMzNEMzdCREFBQTcxQzYKLToxMDQ2QzAwMDE4NUYyRENBMTQyQ0Y5MzNDNjMzRDVERUQ5NzcxMUZDMDcKLToxMDQ2RDAwMEJEMDgzQTZFMzE4QzdCQzUxQzkyMDBCRjMxMTNFQzA2Q0QKLToxMDQ2RTAwMDhDNTdBOEY4Nzc4REIzNURCRDQxODhDRjZFMTI3QTk3NEQKLToxMDQ2RjAwMDJDMDdCRDdBOTU5NzlEOEIwOTJFM0VDQjdEOTkxQjJDNUYKLToxMDQ3MDAwMDc0NEI4MjU1NjdBOURGODZGNUQ1OEM1RUJDM0ZFNTlDNkUKLToxMDQ3MTAwMEVCQkI3QUQzREE1OUI1OTlBMkUxNEY1QzlFNTkzRDBBQjkKLToxMDQ3MjAwMDVFODMwMThDN0IxOUY4MUQzRTBFNUJCRjlBNzA1NDAwQUUKLToxMDQ3MzAwMDdDRkJBQTA0MTU1MkVGN0M5NDRFQzA1RTEyNEI5Mzk4RkEKLToxMDQ3NDAwMDM3NzU0RDE1QTMxNzQyRkQ5MkQxRUY1RkQ5NjhDMDE1OUIKLToxMDQ3NTAwMDFFNzVCRENGMTEyRUEzREVDOEUzRjE3QUI2RjMxNkE5RkMKLToxMDQ3NjAwMEJGM0ZFNjY1NzIwQzJCRDJGMjg3ODc3M0QyRUUyQjE4MEYKLToxMDQ3NzAwMENGQUU1NjU1ODcyQjkyM0Y1NEI1NENGQ0JCMURBOUJDMDAKLToxMDQ3ODAwMEVGNTA3MDkxRUY3RkJFREVEMEJDRTIyQzNFNkFBQjlGNTMKLToxMDQ3OTAwMEJBN0YyNEE4QTBGRDg3N0ZEN0MzNDQ0NzlCMzI5OURGMDcKLToxMDQ3QTAwMEVBQ0MwQTdGMkIxM0U1NjUwOEVGOUZBNUU1MThBQzA3NTcKLToxMDQ3QjAwMDUxNjhEOTg3RTUwREY4NUQ0RDk1M0JCMDFDNjRGNTg5Q0UKLToxMDQ3QzAwMEFBOUUxM0RFNjlCQkNERDg0RTRFRjVEMzgzNjU2RjZBQzIKLToxMDQ3RDAwMERDQUQzODZFMjA1NURFODZFNTQyNTZGRjVDQzcxOTc2QTMKLToxMDQ3RTAwMEZGNEE1MkMyRjk3RjJDRUI5OUIwNkY3QTdEQ0I1NzMxREIKLToxMDQ3RjAwMEJFNzQ0M0NCNERGOEVDNkU1NTZCMjA0RTY3REM0MzcyQjQKLToxMDQ4MDAwMEZEMEQ1RjU1QzE5RkJFRTFFQkY3RTFCRUJFRDFGRjQyOUEKLToxMDQ4MTAwMEYwM0I4MEZGMzVCOTFFRUMyNTY3QjExODdFQzQzQkM0NjAKLToxMDQ4MjAwMDdGNDM3MDc0NjBCOTUxNjZGN0ZDMkY5Qzc1QjJBN0MzQzMKLToxMDQ4MzAwMDE0QkY1M0UwRUZBNTQzN0U4RDY2QkEwNzgzMENDOUMzNEUKLToxMDQ4NDAwMEVGMDlGQUQzOTlFNzQxQ0ZDM0U3NDlDODIxNEFCRjFGMEYKLToxMDQ4NTAwMDdCNEJFMzMxQTRFNzVBMzUxRERGMThGMzFEQTk3RjYzQjUKLToxMDQ4NjAwMEJFMjNDOTFCMDM2RjI5N0EyQUU1N0Y1RkQ3MTZCRjc0NjEKLToxMDQ4NzAwMDRGQUNDM0ZDOUY4NTAyODdEM0M3RUY4QkU0RjUxQUU5RTEKLToxMDQ4ODAwMDM4N0JDQjkxMkUzNEEwREI0NkVFREZEOUY1ODMzMUVFQjkKLToxMDQ4OTAwMEY3ODRDOEVCODAxRjg4MTNERjU1MzkxQ0JGRTc4QTM3QzAKLToxMDQ4QTAwMEEzRkZCMTkxMTg4MTdCQjkzQ0U1MDRGN0M1MDIzRTYzRDMKLToxMDQ4QjAwMDVGOURDOUI1NkY3QjhENzIwQzkzNEJDMkE1QkQyOEU3NzgKLToxMDQ4QzAwMERDOUEyMUY3OTg5RTU0MzNGQTc0QjE4MjhFQjNGNUNDRkEKLToxMDQ4RDAwMDk1QzE4QjIwMEYzNDEyODQ4QjA4NjlGOTA1QjhFNzM5MkMKLToxMDQ4RTAwMDVCNjI2NTEyM0JGM0MyQTE0MkQwMDdFQUM1NDI4OEQyOUYKLToxMDQ4RjAwMDQzQzdFNzJGMUMyRTIyRUNFODIyRkVGREY0Q0Y1RjQwRDkKLToxMDQ5MDAwMEZCQzIyOEMzODVCRDY1QjRFQzQ5OTU3NTI1NDhDQjI1MDgKLToxMDQ5MTAwMEE5NzIwQ0NBM0JCOURENzc2NkVCRTcyRjc0QTAzRTBCOUEKLToxMDQ5MjAwMDdGNjY5NkFCMzU1Q0FFOUVBRjNDRkRGRkRBNDVENEU5QzEKLToxMDQ5MzAwMDAwODAwMDAwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwNDUKLToxMDQ5NDAwMDAwMEJFNTdEMEI3ODU0RDVCNUYwM0U3M0U2OTU2NDI2RjMKLToxMDQ5NTAwMDk5QkMyNzgxOTAxMzFFMTIxNTcwMTI0ODA4NDhEQjA5NzQKLToxMDQ5NjAwMEFGODYyQjhGQzEwNzQ2MDkzMDQ5Nzg4NDY3MDBBRDRFNkEKLToxMDQ5NzAwMDk1OTY4MTAwODI2MjhEQUQwRkJDMkEwRTE2QkRCNkQ1MEMKLToxMDQ5ODAwMERFNjhFOTJEN0Y4QkZDODNBMDQyNEIzMTU2QUI2ODQ1MzYKLToxMDQ5OTAwMEEzNTBBNTZBNEQwNEI5OEU1NkNCQkZENkRBN0I2N0NFM0QKLToxMDQ5QTAwMDM5OTkwOUExREFGRkVGRkY1REY4NzRCM0NGRDk2NzNGRkEKLToxMDQ5QjAwMEQ2N0JBRkI1RjY5RUIzNjdFMUNGQjcxODNCNkIyQTE5MkMKLToxMDQ5QzAwMDBCMzM5NkNCRDgwRTZEODM2N0ZDMjhBODc5QURCRTIxM0EKLToxMDQ5RDAwMDFBNjM1QkYwNTU0MUJDREQwNTFFM0I2MzE1OEMzRDk4QTkKLToxMDQ5RTAwMDE5NzQ3OUEwOUNCRUE2Q0JFQTg0NzZDRTkyMUM3N0QwQUYKLToxMDQ5RjAwMEM1NThCMUY3OTM3MDM1N0M1RjNDOEUzMTBEQkYxRDlDNUYKLToxMDRBMDAwMEM1RDgxOEU4RDc3QkJENjJDRjgxNzIxOEYzMjg4Q0RFMzkKLToxMDRBMTAwMEFERjc0MEZCMUMzNzYzRUQ1MDMyNkI4NEIxNjE4Q0REMjgKLToxMDRBMjAwMEU1OTI3NTk4MEY5NDgxRDIwOEVCODBFN0E5MUE3RjZGMDEKLToxMDRBMzAwMEMxM0EzQzU3MUQ2QzY1MUJENEQzNEE5OTNGMDI3NThGMTAKLToxMDRBNDAwMDgzQ0QwQkUwRjgxRTBCQUQ2Mzg0NDcxNUE1NDJGM0NENzMKLToxMDRBNTAwMEYwNkU2MDFBQjQ3N0Q2NThGQzExMjgzM0IwNzRFOUQ3RDkKLToxMDRBNjAwMEJGODFEQThERjA1OEE5OTRGMDk4OTIxM0JDQzg4MzcwNzYKLToxMDRBNzAwMDYxQUNBNjBERTdDNUEyODE1MjU4NDdFQTg1Mzk1OUI3RkUKLToxMDRBODAwMDQyQURCQUQ0N0EzRDgzMjExRjVBQ0IwMkYzNkQ4QzU1QzcKLToxMDRBOTAwMDdBMDIyOTA4MTc1NzU5NEU2QTcwMThENUNCRjA3QkQ3ODAKLToxMDRBQTAwMDQ2NEI5ODAxNUNBQTk5M0JBMjk0QzRFMTAyMzM0RjBEOTYKLToxMDRBQjAwMEI4OTNFM0UzOTVCNUMxQzA0NDVCQ0ZGN0IyOUM3NThENjUKLToxMDRBQzAwMDFBRDBBRjQzOTYxMzExMEUzMDhGOEY2QUZGN0MwRjJFRDIKLToxMDRBRDAwMDY3QjlCM0NCQ0UwNjAyM0UwN0RGMTk2MDJBQUU0N0EzMDMKLToxMDRBRTAwMEY3Q0U1RDMzQTNGREUwRkQ4QUREQUIxOENFNzc3RDVBQUUKLToxMDRBRjAwMEZBMzhDNEEzNzlEQzU3QkVCOEQ3MTM4MEY3Mjk5RjM5OTkKLToxMDRCMDAwMDAyNkQwOUM2NUIyMkUwRkNGMkRBNUFGQTBFQkFEN0FDQTMKLToxMDRCMTAwMDc5OENDREMzQTUwQzY0ODREMDBFMjc5NjRDMzlFQkEwQkMKLToxMDRCMjAwMEU1QkQzQzE4REVDRjY1OUMxOEFFMENENDRGNjMwMEQ3QjIKLToxMDRCMzAwMDg2NUE5NUE5MjVGODVENzc3Qjc2MTZFQTczM0JFQUE3MzYKLToxMDRCNDAwMEIyMTE1MDA5RDk0RUUwNzMyN0ZDM0QwQkZEMDY1OUU2MjIKLToxMDRCNTAwMDY0MEYzQ0FFMEZGM0U3RDQxRUZFNUJDMDdDOTM3M0UxQTEKLToxMDRCNjAwMEJCQzZDREE2RTc2RjRDRjkwQjRCQzdGN0Q2MTMxREE1RjcKLToxMDRCNzAwMEYxRkVBRkFFQUQwRjRDMTRFRDRFRDNGRjIzQjQ5RTJCMjAKLToxMDRCODAwMDM1RTY0N0JDNURFOTRCOEI4NDYxODk1NzA1QUUwOTRDMUUKLToxMDRCOTAwMDJDOERGN0Y3RUE5N0VBM0M4NDhCMTkxRUJGRUE4NjQ3MEIKLToxMDRCQTAwMDIwMzA3MTQ4NEY3ODM0MDQxNEJCNDczQjM3NUNGQTBBMTUKLToxMDRCQjAwMDg3N0E2QkQ5RTQ1Q0FEMjcxQ0NDRUIwNzg4REQ4RTcwNUYKLToxMDRCQzAwMDVFMDA3MEJFQjUyNDM5M0NBMDFERTFFM0Q1NkJBMDFEOEQKLToxMDRCRDAwMDJDNjVCMjNBRDU2NjAxMzgzNENFNTQ5ODQzMjFGOEE2RjQKLToxMDRCRTAwMEIzNDFEOENFM0Y3NTkyNkVCRTY2Mzg5QUUxRDVGODM0OUYKLToxMDRCRjAwMEYzNDVBMURGQzZCQkREM0VBMDcwRjYwNzA5OUYyODAwODQKLToxMDRDMDAwMEFEMTJFNDA5NkZBQTVGRTczQjM4N0YwRkZDQzU3NTVFMDQKLToxMDRDMTAwMDVFNTVGNjZDMEVDQzIzQjg0MUYxMzFCRURFNzdGNEVCNzUKLToxMDRDMjAwMDZCNjA4MThDQTg0MkVCN0UyNzA5REVERkQxQUZEMzNDREQKLToxMDRDMzAwMDNGRjNGQzUzNTA1ODgxRkMwQkJENTFGMjgzMDNCQTc2MEQKLToxMDRDNDAwMENDMUExRDE2MThDRUQ4RTMxRTc3Q0VCQjY5NTAxRkMxRjMKLToxMDRDNTAwMDdDNjc4MUFGQ0VCMDcxMTkyM0YxRkRFMDFDRTI2RjMzQTgKLToxMDRDNjAwMDVEN0NCQTU2RkJDMTAxOUI5RUNGMzk5RENEMEJDREVDMkYKLToxMDRDNzAwMDFFMTdGQjU3NThCMEJCRUUwMTM4MDdBRTUxNkZCRjBBODUKLToxMDRDODAwMEZFRkRDQUMxRUM4REY4NkNCNTU3RDU0RTY0MjNCQzYwRUYKLToxMDRDOTAwMEJEODQyRjNGNjM5MkJFMTg5NkUxN0QyQUMwNkYyNjczQjQKLToxMDRDQTAwMDZBMkVFOEU3NUIyMEE0Q0VDMjVBQTZGQjUzMzQ5NzZFNjcKLToxMDRDQjAwMDFEQTc1QTk1MUE5NEEzODBCQzhDMkI4N0M3RDc2QjlFQ0YKLToxMDRDQzAwMEY3NkFBRjlEQzYwMzdBRkM0NDRGOEY2NkI4QkM1MjNCNkYKLToxMDRDRDAwMDI4MDNFNUM4MEI3MUI4OEMzODFGQjg0QzQyNjYwNjc4QkIKLToxMDRDRTAwMDc4QjI1OTU0MDEzQzc3MjlDRUM4QzMzMEE3QkFEMENEODkKLToxMDRDRjAwMDgxODkyMzExMkUyQzZDMDdEMTc5QzI1MzQyRjI1MUFFMTcKLToxMDREMDAwMERCQzZFNDlGOTUwQ0U1Njk5RDlEMDU3MTVENkZEODU4RTQKLToxMDREMTAwMEVEOTMyRTJDQTM0NUU1M0FCOUY1NUU3NkY1MDk5NEQzQ0IKLToxMDREMjAwMEIyNUUxN0ZBM0VGNTBGODQ0ODc0MjhFOTc5QUVEMzE1QzAKLToxMDREMzAwMDU1MzkxRDdFRDg0RDM3MjRDRkVBM0NFRjVFNEM3ODYyNjIKLToxMDRENDAwMDY3NjE5RDZBQzYzMjBERDdBREE2QTU4RjYwMTk4QzZEQkYKLToxMDRENTAwMEM2MjZCMDRFN0I2NkEwMEJFNUJGOUEzNjIwODJGNDk3M0MKLToxMDRENjAwMDdBQ0Q4RjM3NzMzQ0ZFQTg2Njk2MEU4RjI5MEI3RTExODUKLToxMDRENzAwMEE2Q0VCNTJDMDNGQ0QzMDRGRUFBMDVGRTUyNEE5RDY2QkUKLToxMDREODAwMEZDMzFFNEQzNzAyOThCM0NBMjA4MTA0MEZERDQ2MDdGMzUKLToxMDREOTAwMDA0RjkzNjk5REU5MEY4NEMyOUI1N0VERUExQTc2QkQ2RDIKLToxMDREQTAwMDRBRjA5Nzc4NjQwNzQ2NzUyMUJGMDZCRDU2NzYyQkJEM0QKLToxMDREQjAwMDJGMjVGODA0M0QxMjNFNUQzNkQ0MjdGMzQyQjY1M0ZBNTAKLToxMDREQzAwMDdFODIwNUYzMjNFQkYwQkIyRDBFMUYzRTZCQjA2ODc5OUUKLToxMDRERDAwMEQ4MEVFMEU0NDEzRENFNEE3RDNFRTQxRjE2ODZFRjI0MjYKLToxMDRERTAwMDNEMjE1Q0QxOThEMEY1REYwMTZCMjgyOEM3RkU0MDdBQzEKLToxMDRERjAwMEUyNzc5Qjc1RTMwQ0VDMzk2RTM3NUY5OUZCMzU3REE3NDUKLToxMDRFMDAwMEFBNjAzRjkwMURFMUYzRjk3NEYyQkIyNDkzREIwRkE3NzYKLToxMDRFMTAwMEJDQTNEQTJDMDM5M0MzQUZDMTk5RURCNzY2QzdFQkVGMjAKLToxMDRFMjAwMDE0Mzg2QjIzMDlGNDgwRUM0RkVBRjMyQzM1RThCNUUwMzUKLToxMDRFMzAwMERBQzIzQjBGMUUxODg3N0FEODczMTE0ODMyNzY5QkVEODEKLToxMDRFNDAwMEExODMwNzhCMTg5MjA4NjM4NUY4QkY4NzBFRkE1RDY0MEIKLToxMDRFNTAwMDc3ODgzQTEwMjZDQzdGNDc2QTc3RERFRkY0NDI3RDYwOTEKLToxMDRFNjAwMDc3M0Q4Q0Y1RUQzMDFDMUIwQjc2NEJFNjQzMDczN0MwQzYKLToxMDRFNzAwMEY3OUYxRTczOTBGRTNBNTU5MzFBNDFFNkM5MEU0RDYwOTYKLToxMDRFODAwMEM3NjFERTU2MzA3MzMyODBENEEwMDg2M0U5MENGNUEzMDUKLToxMDRFOTAwMEY1Mjg1NjgwMUNDMDNCNUJGMzI5MDhFRkNCMzMzNUEyQzUKLToxMDRFQTAwMDA3QUJDNkEyNkU5ODVDQjZENUE3MjBCQzdFNjg2NzREREUKLToxMDRFQjAwMDQyNkU1QzM4NTM2N0JGNUM5RUM5RUQwRTM5OEVDM0M5MjQKLToxMDRFQzAwMEMyMjlFNUYxN0UxOUYzQUQ0MzNENjI5RENBNDhBRjAwQUEKLToxMDRFRDAwMDlGOTNERDI2Rjk1QkY2MzMzNzkzRUJDRjZFRkUzQzM3QkQKLToxMDRFRTAwMDNGQ0ZDRDRDQzBDRjg3MkQyQkRGRkExRURBQjNCRjU1OTUKLToxMDRFRjAwMEQ5MjNCMDk0MzlERUVGRDJGMzU5QTE0NjJBQUYwOTJENTgKLToxMDRGMDAwMEE2QjI0OThDRjc2NzE2NkNDMjdFREE2QjVGOUE3MzIzODAKLToxMDRGMTAwMEQwNkZGMzJFODcwRkQ1RjJGMjFCRkVGMjgzMEEwREUxNUMKLToxMDRGMjAwMDA0NzhDN0VGMTYzNERFNUQwMUVGRUQ0MzJDNjRDRjZFREQKLToxMDRGMzAwMDJFNjJCNTQ4NEZGNjc1MEFEOTQ3NUIzNDdCQ0QyRTI4RDMKLToxMDRGNDAwMEVGQ0RBOEJFMjczMzM3M0VBRjdCMzMyNjUyOURENTY4QzEKLToxMDRGNTAwMDE2QTRGM0Q1NEU0RUU3OUYxRUJCQzVEQjgwNzZBNUNCQ0UKLToxMDRGNjAwMDQ1RkM2MjVGNTc3Mjg3MDVFQUVDMTBDQzlCQTFGQzYwQTAKLToxMDRGNzAwMDY0NjdBODBFNUU2RUNFQjQxMjNENkQxNkY0MTUxNjcwMDEKLToxMDRGODAwMDc3QzYxMEM5OUNBRTU3QzJGODRFNkI5OEExOURFRDhDQTgKLToxMDRGOTAwMDU5RTlCOTVEODFGOTI1QTA1M0Q5OUYzMzA2NEMzQTEyREUKLToxMDRGQTAwMEM3MzM3RjZGQTdFN0I4MkVGQzVFQ0Q2NjA2QkJFN0NFQTIKLToxMDRGQjAwMDRDNkUzN0RGRDkzRDhGMzQzRThGNkM3MzNGRTlGQ0I5QkYKLToxMDRGQzAwMEUwM0ZGMzNDM0VGMDRDQjgxQkUxN0Y2Rjg2RkY5RTRDMDgKLToxMDRGRDAwMEIyQzMzQjZDMjhDRkU3QkE3RTdCNTQxOUQxMTc3OURDN0EKLToxMDRGRTAwMEExQTAzQzlFRkU4NTEyMkQwNkY4QTU1NEFCOTFGNTI1OTcKLToxMDRGRjAwMEE4RDczQ0QzNDYwMTFEQjA2QTlCMEZFMUQ5M0UzOEM3MDQKLToxMDUwMDAwMDNENTAzN0ZFNjMwMkZGMkY1QTNENkU5QzY3NjAxMkQ4RjkKLToxMDUwMTAwMEQ1NDRERjJDRjc0QUVDNjc1MjYzMjU5NzdGNjA3MEU5MkYKLToxMDUwMjAwMEY0RUM4QkRBQ0VDRDAzNTFGRTg2NkRCNDVGOUFFNzBDQkIKLToxMDUwMzAwMDQ3NzA3RTNBQkI0RDM5Q0JFNUIyNjZBRDhDREI3RkYzNzIKLToxMDUwNDAwMDI2QUFGRTk0RjQ5RUY2MUQ2QzQzMEU5MEZEMjc2NTc5MEEKLToxMDUwNTAwMDE4RUFGMEREOUJBMkZBRDZDNEQzNTdFMTMyM0E5OEM3REEKLToxMDUwNjAwMDNFNTA2RjBGRTI2RUE5MTJFRDFCRkU2NzVFQzg2OEY3MzcKLToxMDUwNzAwMDk5RURDMjg2QUFCMkU3MDAwRDAwOTc0OENEMjhBNEIzRTcKLToxMDUwODAwMDBCMkQ0NDY3N0RCNTk3MDFEMzlDNUUyNkI1Nzg3MDVGODQKLToxMDUwOTAwMEY1QTA5MDEzRDMyNzFFOUY4ODcyNjMwNjk4NTZEOEVGMDkKLToxMDUwQTAwMDhDODlBQTI3MEFBREI3ODYyQ0NDMEYxMzNGRTI1NzIzNzEKLToxMDUwQjAwMDBBQUNFRDQ4NjlDN0ExNkYyMURDQUE2QzFBRTlBRDUyQjAKLToxMDUwQzAwMDc2RkIxNTM5Rjg3RUE0MDdFMTFDMTA3NjA4QjRFN0ZBRTAKLToxMDUwRDAwMENERUI4QzBDODE2N0VERkVFM0FFNDYxREREMURBOTNBREMKLToxMDUwRTAwMDdFMjFFRTU3NDBFRTM1MjVBMjI3QzZENkQxQkMwRURDNzgKLToxMDUwRjAwMDk0NEFGREJDNzU5NzEyNzFDMEZDMjdBOTVGRkM3RTM0RjEKLToxMDUxMDAwMERBQjNERkIzRjkxQzFBMkRDQjgyNzg5REVBNjM2MkUzMzAKLToxMDUxMTAwMEVBNzc0REQyRDkwMUM3NTlBMDkyRUNDQUIyNjNENTBFMzUKLToxMDUxMjAwMEI0NUYzNzJBQzRBNzEyRkVGMzQyNDY3QjMzQjgxMkVDQjEKLToxMDUxMzAwMDMyQURBNzdEMEE5REQ5OTE5RUZCNkE5RjlBRURBQkNGQjgKLToxMDUxNDAwMDMzQzFBRTAyM0E2N0U1QUM1QzZGNTcyNUQzNTNEMkFFOUMKLToxMDUxNTAwMEIyMzJCRjkyNDU3QUE4QzM4QTdBNzczQTNDNDgyNDA3OEMKLToxMDUxNjAwMEFFQ0Q1MDA4QUY5M0Q0MEYwOTNGQTdBQTU0MERFMTc1RjcKLToxMDUxNzAwMDI0RjRCRTBCRjdFMzQ3QkU1MEY5M0VEODlGNkJCMEUzNzMKLToxMDUxODAwMEYyQjNCODVGNjBCQjFEMEMzMkY4NkU3QkExMzNCMjBFNzgKLToxMDUxOTAwMEJBREE3N0QzNDVGOTFEODQxRkVEREU3MTg4QzdERkRBRUYKLToxMDUxQTAwMDQ4MEUyNzlCQUYzQkE0QjJDMTQwOThEMzQyMEE5NTEyNDgKLToxMDUxQjAwMDdGQzVBMTE0NjZENUU5ODc2Mjk2NzhGRUE1NTk3Q0ZFNjUKLToxMDUxQzAwMEI5NkI5ODQ1ODM3MTMzQzNDQzlGNjg3RjJDREJDMUJFMUMKLToxMDUxRDAwMDc4QjI5NTUxRkI2ODI2Q0M2RkM1NjAwQkQxQTdEQzFGNTgKLToxMDUxRTAwMEE3RDhDMkZFN0VCMDdFREI5RTU1NjFEQzI3MTdDM0ZDQ0MKLToxMDUxRjAwMDcwMUUxQUNDMEZGNTY1NDkyODhERUEwMzQzRDk1NDBFNjkKLToxMDUyMDAwMDBBNjU1MjM5MzhENDhGREUwRjA5MERBMkYyODI1MDA5OTcKLToxMDUyMTAwMDNEMUYxQUJBOThFQUE1QTE5MTU0NUUxODJBQTNGMkEyREEKLToxMDUyMjAwMEQwQTU1NDVFMEM3QTEzREIwRDBCNTU1MzM5M0M3NDE5MjEKLToxMDUyMzAwMDNEMUYxMUJBODJDQTRCNDIzM0E5RjQ4NTY2RDNGQkIyMzMKLToxMDUyNDAwMDUwMjM5NUU1QTE3QTdBM0UzMkI0OTRFQUEzNDJENzUxMkQKLToxMDUyNTAwMEJEMjJCNDhBQ0FDQUQwQ0Q1NDhFMEVCNTUwNTkxNTVBNDMKLToxMDUyNjAwMDQ3RURDNjg0NkVBM0ZBRDhEMDhGQThCQzM0NzQyNzk1QjYKLToxMDUyNzAwMEUzNDJGN0QzN0I2OUI3QTQwQTdFQkM0RDlCRUY0MTdGMjUKLToxMDUyODAwMDA3NTBCODg2NzQ5QzhDRUYxNjY1NzEzREYwNDJBNjdGN0UKLToxMDUyOTAwMDQ2NTY0NUJDOURERDAyN0FEQ0Q1QjM1RDYzMTZENzYzMDcKLToxMDUyQTAwMDk5ODhENzA0RkRDRENERTJGMkY5MjNERjNCRjcwQzY1RjkKLToxMDUyQjAwMDcxQkM2REYxRjZFRUNGNjBBNTg5RjcxQjcxRjlDMEQ3MEYKLToxMDUyQzAwMDM3M0Q0QkEzNzJCQkI1RERBRjIyRkRBRTY0QkUzMDNDQjMKLToxMDUyRDAwMDlBMzZFQTQ1MDVFNUNCMEVDRDVBOTNDOEJFQkIzN0NCMEYKLToxMDUyRTAwMDQ2REYzRDk4MTk1QzgxRUI0QzJCMzk3MTAwRTVDOThDODgKLToxMDUyRjAwMEIwRTdGN0UzOTE1RTg2RTVGQzc2M0NGNDU3QkNDMTQyMkIKLToxMDUzMDAwMERCN0Q4RDc5RjZBMTdGNEQ5QkM4NDgyRTRBQkYxMkQ4MTAKLToxMDUzMTAwMDc1MDY3RDdBODc4MDBCNjM2RDA3MDcxMjNGMEQyRUU3QjgKLToxMDUzMjAwMEZBQTc2MzBBRjI5N0ZEQTY4MUI0N0ZERjZFOEYyQTU2MzMKLToxMDUzMzAwMEI0NkY1NjMzQTZCN0ZGQjc2RjZBNzgxNERGQzdGQkIzRjUKLToxMDUzNDAwMEQzM0M4QjM3QjM2N0QwQzQyRTY5RDVDNkE3NDAzOTY4MjQKLToxMDUzNTAwMDlCRkY5OTE0Rjg2NDQ4MjQzODNFMTVFQTQzMUYwQjNGMUQKLToxMDUzNjAwMDgzRTU4NTZEOTFGMTY5NTA1RUJDM0JGQTBDNkVFMzg2NzYKLToxMDUzNzAwMDQ3M0JDNkJCQTA3RUM5NDFCNjFGRDlCRkFDNUQ5QkUwMTEKLToxMDUzODAwMDg2RkFDOEEzRkVGRDQwMDZBQ0EyMjMzODIxNURDM0Y5MEUKLToxMDUzOTAwMDQ0NUFEMjYxM0VEQkRGMDQ0MzBGRUE1NTFGQjZBQUIwODAKLToxMDUzQTAwMDFEOEFFMzFGRUMzOEI0REYyNDVFRENBM0RBMjc2NkMzNzIKLToxMDUzQjAwMDNGRkI1RkVGMjk1M0YxN0I2QjQ3NEFFNkIwOUVGOEQ5N0MKLToxMDUzQzAwMDgxRUJDNjc1ODIxRTc5MDRENkQ1REYxRjU1M0MzQTNBNkIKLToxMDUzRDAwMEY5OERFMDY3QzBDMzQzMjhFN0E0NUY3MkM3ODYyQ0YyNEIKLToxMDUzRTAwMDRCRUU0OEY1NTRFMzkwNUQ5Mzk4RTc2MTBERTlEODRBOTgKLToxMDUzRjAwMDcwQjI2RjFDNDhGRTM4NDk3NzAwNUY4MzNEN0I4N0EwMDEKLToxMDU0MDAwMEJCRUREREY2NkU2MkY4RkU0NkM4QkY3RjE1RjhGRTVCQTkKLToxMDU0MTAwMDE2RTc4NzY0RjA3NTIyQUQ4QzM5MzcxRjFGMTY3QzA5OUIKLToxMDU0MjAwMDdDN0M1MENGQzdFNjc2MUYwQjM4OTlFMUJDQzNDMjBFMTcKLToxMDU0MzAwMDgyQUU4MjcxODE0RTM5NUYzMUY0QTM3RDI4RThGQjVDMzYKLToxMDU0NDAwMDcwN0RGNzVGOEM2RUY3MEIzOTkxMENBRTRDQ0IyMTM5MjgKLToxMDU0NTAwMDA5RjQ3QTIxRkFDNzkyQzkxQkJCRDhDRjk4REZGRkFERjgKLToxMDU0NjAwMEE3OUNFMzdFNUIwRkM4Qjk0MUM5RTVEQ0YzMDJERjQ5QzUKLToxMDU0NzAwMEU1OTc5MDMzNzY5MzdGQzc5OUNERjlBNkQyMTNCMDY3OUQKLToxMDU0ODAwMDU3MjRGMDUzN0I3MzBDN0VFQUE5QUFBNzFBRTUwRDFCREIKLToxMDU0OTAwMENBQzg4RTRFMUIxNjA5RTMzRUE1MzhBQzk1QUJEODBDOTYKLToxMDU0QTAwMDg1MzJDMkIxQjA5NEZDMEYyNTYwNjc1ODAxRkZEMDU1MUEKLToxMDU0QjAwMDE0NEJBN0U2QjEzNEEwRkY1REYyOUJBN0RFQUJFNzM3NDQKLToxMDU0QzAwMEE5RUZFM0ZDMjhFOTIyNkJDN0FEREMyRkE5Q0QwNEZCRDMKLToxMDU0RDAwMEU1REJEOUMyQUZERkREMEZGNzgzNkNGQTZFRTE4RTVCREYKLToxMDU0RTAwMDc1NzI3MDg3RDc0Qjc1RDkzRTE5RkQyRTEwRUY3NzZDMEEKLToxMDU0RjAwMDU4NEZGMDc0OEU0QjZDMzc1NDY3RjNCOEMyNzY3Qjk3NzUKLToxMDU1MDAwMDFGRTkzQ0ZDNERFNjQxN0IyNjczQzMzQjI0OUYzMjQxOUYKLToxMDU1MTAwMDNFMjkyNDlGRjhGOEZENDNBOThGODZBMUVFQ0ZDRTEzMzQKLToxMDU1MjAwMDdFMDA0RkVBMkNGN0ZGM0I3QUNFNDU5QjBBRTVENDM4NDQKLToxMDU1MzAwMENGM0UxNUUzMzRBMDg3MzRFNEQzNzEzMEY3NTEwODJGMDAKLToxMDU1NDAwMDNCRTE1RDYzMUM4RkRBMzgxNjQxQkIxN0UwMTZDNTdENjEKLToxMDU1NTAwMDdCRDhFMjI2M0Y5M0REREVFQTQ3N0U2NkY2NEM1QTdGMzMKLToxMDU1NjAwMEE1MjczODIzQkIxN0JFRjBBNDY5NjU4OEQ0NjA3NkRCMTUKLToxMDU1NzAwMDE0MTdEMERGQTYxMjRGMkFENkU3NDA3RDZCMTU4QzlCRkYKLToxMDU1ODAwMEQ1QzE0NDdEOEI2QkNDM0ZFRUY3MDhGRUU4RTc4NzM2NEMKLToxMDU1OTAwMEMwNzhGQkIyRkM3MzkxOUU4MUFFODM1OEZBODc3QUFDRDcKLToxMDU1QTAwMEU0QUZGNkY2Q0QxRTkwRkMxOUU3Mjc0Rjk5RTRBN0ZBNzEKLToxMDU1QjAwMDYxMjQwRjk3NjBCRkIyQkY2NEY2Q0RFMDZDMkVFNzZFM0EKLToxMDU1QzAwMDE2NjUzMkZCNDZEMkZENzlEQjM3NjJCRThCQjM3QkU3RDMKLToxMDU1RDAwMEZGNTcwRUZFNjhEQjRFQTZGMzM3MTZERUQzNkVENUQwMkUKLToxMDU1RTAwMDlGQzFGRDM0MTY2NzNCRjVFNzE2RkU0NjNGRkExQjgxNjcKLToxMDU1RjAwMDBFOUM4Mzc5MURGRjI0RjIxNzI3ODc2Mzg0RTYyM0ZEMjEKLToxMDU2MDAwMDhDRDI5Rjk4MkVFODhBNTk5NTA4RUFGMUY0MkE4RkI1MzIKLToxMDU2MTAwMDgxRkFFQjYwOTc0MzdGREJCMkI5QkU5MTdDOEQ3MkVCNzAKLToxMDU2MjAwMEE5NjEyODk3QjJBQ0I4NUY0NzdGOTIzQjJCREUzRkQ2OEIKLToxMDU2MzAwMDMzQ0FFM0YyODk4OTdEREM3NTYyQ0VBREVCN0QxOUU4NzIKLToxMDU2NDAwMDcyMEUxRkUxN0U5NEQ2RUY3M0JFOUNENjlGNDVENkEzMDMKLToxMDU2NTAwMDlDRjAzM0NEMDNFRDUzOThGQ0UzMzdGODkzQTc3RUFFNkYKLToxMDU2NjAwMDAwRUY4MjFFRkM1Q0E1NTIxOUNDQTI2RUQ4RUY0REYzNjAKLToxMDU2NzAwMDI5NTFEQzA3REEyRENFMDhFQUQyRUE0MjI3QzNGOEE2ODAKLToxMDU2ODAwMDNEREQxMkMxRjg4OEZEMUQ4NUQ2NjkyRjRGOEJBMEYwMzYKLToxMDU2OTAwMDlCNTg1ODk1ODE3MUNDRDM4N0Y3QkI4MjA5RjA3Rjc1RjEKLToxMDU2QTAwMEIwREVFMEZGMzJDM0IxQkJERDlDNjczRDA4QzdGQkNGNzYKLToxMDU2QjAwMDExQTc3RDNFQkIzQjRFQkIwRkY5NzJGQUZDQUUwRDc2RDcKLToxMDU2QzAwMDJEMUVBNzk1RjFDNzAyRUZBRTJERDVBOEIyOTY3MUZCOUUKLToxMDU2RDAwMEI0OTA0NUQ2RTlFRDJBNUQxQ0Y0NzdEOENGRkRGMTM4QkEKLToxMDU2RTAwMDY4RkIwNUZBMzg2ODczRTExRUI0NzdFRkVCOEU4MzA2MkEKLToxMDU2RjAwMEY3MTJERjY1Qjc5NTIxRkRERUVGREJGNTkzM0IxMDlFREEKLToxMDU3MDAwMDBFMTFBRjE4NzlDQ0E1QTE5RkJFNjI3RjJFQUVFN0Y3MzAKLToxMDU3MTAwMEE2RjlDQjUyRkFGMUNDRkJFMDNGNjUxQkUzMEJBNzdENkEKLToxMDU3MjAwMDU3NjQ0NDg5QjZCMjEzRjJCN0Y0MkZDQUZEMzBGQTBGQUEKLToxMDU3MzAwMDNEMDlGOUQwMDg2RjM5N0U5REMyRjdCNUNDQTY3MEY5NDYKLToxMDU3NDAwMDI3RjQyOEM4OTdCRjkyMUM4ODMwRDI5QjdFODdGMjMwRkUKLToxMDU3NTAwMEVBOUJEM0JFOTEzRThBN0IyNjkxMzc3MjNFMDBDNzIxRDkKLToxMDU3NjAwMDg5RTJCRjMwNUVDMjM4QUIyMzg3RUJBOTNBMUJGNzlCQjcKLToxMDU3NzAwMDJBQUIyQTU2RTJCQ0VBREMyRUM1QTFGM0Y3OUYxNkZBNDMKLToxMDU3ODAwMENDMUMxNzUyMzNCRUE4MDgwQUJGNzdBMkY1OUJFMzNCOTcKLToxMDU3OTAwMEE3NTE1RkU0NzI3OEU5RkRFNEU3ODJENzUxNUIyQkM1M0UKLToxMDU3QTAwMDBGOEYyRTUwRDkzQUVDMjczODNBOUYyNUY4NUU5NkFGRTYKLToxMDU3QjAwMDIzREQwQzYxRUMxOEMyQjg0Mjg3Q0YyNEYxQTJBMzZCQTEKLToxMDU3QzAwMDlCMjhDRTZDOEVBNzc1QkZBRjRGQTk0NUZENUQ4QjcwMzIKLToxMDU3RDAwMEQ0OEQ1QjI1RTAzNzUzOTRDQzExRDQzQ0YwREVERTcwRTEKLToxMDU3RTAwMEI3ODc2MUZDNkJDODI3MTU2MTM3RkFDNUJBN0U4OUYxQTYKLToxMDU3RjAwMDBCRjYzRDM3RjkyQjZBRUJDRjU0QUMxQkFFODM2NzE1MjQKLToxMDU4MDAwMEUzRjFEOUZERjc3OTM0Nzg1RTNCNjQ0MzZFRDg5NTFDOUIKLToxMDU4MTAwMDhFMzM3MzM4MUM2RkMzMDc2M0M4MUYzMzMyODdGQjM3NUYKLToxMDU4MjAwMEZCRTQ4RjYxQzM3ODVDODhFRDRGQTFGODY5Q0ExRjU1MEUKLToxMDU4MzAwMDFGREEwRDM4MkVENzAzREM5RjdDQkQ4ODlCOThFMzc4NTgKLToxMDU4NDAwMEI1QTExNTA2Rjk5MjE2NTM1ODQ0MTdCRjQ4QjNCNjkxM0YKLToxMDU4NTAwMDdGMzYyRDY2QTVFNzY2N0VDQkNEMzFGMjlCODQ3RjMyMDUKLToxMDU4NjAwMDdDNEFGODlCOUZGQjcyRjg3QThFRDYyRkQ2RDA2RjY4NTEKLToxMDU4NzAwMDRGNEQ2QzA3REYyMkRBQzlCQTM5MUYyMTU5REM3REJFRDIKLToxMDU4ODAwMEMwRUJFOUUwOTg3Q0Y0NTdENURBQzM0M0ZBQzJFNzEyREIKLToxMDU4OTAwMDNFRTdDQTczOTg5M0MzRjVCOEZCOUE5NzQ0MUM0RkRENTMKLToxMDU4QTAwMDgwQkQ0OUJEOUE2NkVEM0QxRUVCMzdDNTYzRDM0NkY1MTUKLToxMDU4QjAwMDg4RTdGRDUzRTJCMUVCNzI4NERGRjAzQ0UzQjE1MzA0QkYKLToxMDU4QzAwMEREOUUyQjBGRTU2QUJCRDFFRTkxRTUyQzgxQzdEM0MxREMKLToxMDU4RDAwMDE0MTYwNkY5Nzg1REI1NEE3MTI4QTAwRkQyOEY0N0VGRUMKLToxMDU4RTAwMDU2QzhERThDRDYzQjQ4MkYzN0Q2QTc5MDdGQjZCMTRDMzIKLToxMDU4RjAwMEE1Rjc4REI3QUJBNDNGQTMyMDFGOTY4MTdDRjhCRDkwODAKLToxMDU5MDAwMDEzNjZGRjZDMzU1MzBDRjFGM0U5QTM1MjBDRjU2QjE2REIKLToxMDU5MTAwMEZDRThGNzZCRDFCRjVDNjVEMzcwQkMyMzFBRjczNzg3RkYKLToxMDU5MjAwMEZEMkFEOUFGRDA4NzJGOEFGRUU5QkJCRUUxNDM3RDI2OTEKLToxMDU5MzAwMEU5RTE4ODVGMjU3RTBCQkZBQ0ZBNzBEODc2RTE4RjNFMzcKLToxMDU5NDAwMEIyQjkyQzgyNzkyQTRDODlDN0U5QjU0MUQ4N0YyM0M1RTEKLToxMDU5NTAwMDgxNUZGMzZFQTMzODY3Q0E5N0Y3MDYwMkI0N0YwQzZBQkIKLToxMDU5NjAwMDY1QTQzNzc5RkMzNDQ1RjBFOTg0QzJBQTU5QThDN0RGOTkKLToxMDU5NzAwMERBNkE2M0U4Mzc3QTZCQ0Q2OUUyRTc4RUI1MkIyOTJGQjcKLToxMDU5ODAwMDQyRkE5N0E1N0ZEOEVDNjczNkZCOTc3QkY4OTU0REZFREEKLToxMDU5OTAwMEU0NjRGOTBDQ0YyNkExMEYyOUFGOTJEMTA3ODhBREMzREIKLToxMDU5QTAwMEZGODgxQzkzRjJFMzc1QjFDRTA5ODVEQjZFNUYwNzcwNEIKLToxMDU5QjAwMDQ4OUJBRjEyMUMyNDVEQkVGNkM1MkQwRkEyMUM0RTAxRTQKLToxMDU5QzAwMEZBNThDRjEwOUVGRkYxMkNFRTQzRDg2MjI1QTExRkQ5QzMKLToxMDU5RDAwMDJERTUzQUU2NEY5NEM2RjE3MjRENzA3MTc3MUREOTdGNkYKLToxMDU5RTAwMDc2RDMyQTQzREU4NzU5QUYyNDk3NkJCRENCQUQzQjcyOEMKLToxMDU5RjAwMEI4QkZDMkFDNzdDQ0ZDRjA3NUVCOUREQUZBQkI0QkYxQ0IKLToxMDVBMDAwMEZCREFGQTA1MTEyQ0I3MTQzQTlCNTBGRTlBRTU4MzU5M0MKLToxMDVBMTAwMDRGQ0MzMkM5RDlCODdFNTA1OTY0QTQ3RURFMUFCNThCRkEKLToxMDVBMjAwMEVCMDkzQkJERkYzNDg1RTczQjg0OUNCQ0JDMzEzNUZEQjUKLToxMDVBMzAwMDYxMkMzRjRERTFGOTBFNjEzNDBBRDE0RTdEMzMyREQyRjgKLToxMDVBNDAwMDQyRkJGMjk1QTM5MTRFNDJDQ0Q3MTFDNjc1N0E1M0M5NDkKLToxMDVBNTAwMDhGRDBEQTlGQjc1M0E3QTQ3MkJCRkM0MDM1QUQ1Nzk1RTIKLToxMDVBNjAwMDg2Rjk4NjZBRTI5QjE2QjE5NjA3QjI4MzQ1Qjk4MEU3NEMKLToxMDVBNzAwMDE2QkYyNTA1RTMwQjEzRENENjQzRTg3QTY5MUQ2RjYxNzkKLToxMDVBODAwMDBFMTY4NzU3M0MyRjg0NzkxNEY4OUVERTI5QjhGRjJDMTgKLToxMDVBOTAwMDczREEwNzkxOUQzQTI0MTdGMUYxN0REODFGMDJERDFGQkIKLToxMDVBQTAwMDNFQUNFRURBMDE0QjNERUMxQjk5OTFDODRFRUZENjAzQUMKLToxMDVBQjAwMEE2MzhGMkIxRUZCQzNBMDBGOUY2Q0YyQ0U4Q0JBNUY4NDYKLToxMDVBQzAwMDcxRTNFRDE4MUY2RURFQUQ1MjdDNjlDRTBEQUY1RDQwMDcKLToxMDVBRDAwMDc2QjcyOTRFQTlBNjNCNEJEMTlGRDJBMkE0RkE1MDlFREQKLToxMDVBRTAwMDQ4MzhFRTczREI0OUNFQjQxQzRCQTNGRDQ0Q0JEQjhBQjQKLToxMDVBRjAwMEE4QkI0OTFFNEFCODFGODA3NjA1QTMzMDU3Qzk0RDcyMEUKLToxMDVCMDAwMDUzQzIxRkQ2RTVDNzc1NDkzQzU0QjNFOEUxNzEyNTVGMjAKLToxMDVCMTAwMDY5NUQ5N0Y1QkVBRUZFMUVCMjBGOTBDRUQ0RjgzQTU0MzIKLToxMDVCMjAwMEI3OTVENkQ3Qzk1MjdEMzhCRjkwRjAwRkIxMzdEMjY4M0MKLToxMDVCMzAwMEZGMjdGMURDMkNFODUxRTI3OTg1QzA3M0U3OUUzMzNGMDMKLToxMDVCNDAwMEI4MTREQUI3RkFCMzI4RUFBMDE2MzE4MjQzRTcxQjZFMUQKLToxMDVCNTAwMEEyMTMwOTA3Qjk2RUEwOEIyMENFNTNBRTdCRkY5RTkxOTYKLToxMDVCNjAwMDQ3ODNGODdEN0EyQUM1RjFBNUREMkRGMzBFQ0NFQkFGODYKLToxMDVCNzAwMDEzRkJGN0E1Qjk0QUI3REQ4QkZFOEJGNkVDRjE0QjczM0YKLToxMDVCODAwMDJCMTJCNDE3RjYyRUMwN0IwNUMyQkJEQUMzM0U4OUIwMTgKLToxMDVCOTAwMEY4M0UyRjU5N0VDMzREQjk0NkJFRUI0MzdFQzM0REI5ODcKLToxMDVCQTAwMEI5M0RDN0ZEMEFGOERDODhGREY1MTU5RkNENTZENzY2Q0YKLToxMDVCQjAwMDI1MjMwRTZGQjk2RjI2OTZENjdBRjJCRjk5RkYyNDNFNDEKLToxMDVCQzAwMDk0M0RGQjNFQzMzOEJFNTkyRURDQThBRTY0MEE4Q0IzQUMKLToxMDVCRDAwMDY5MzhFNzRCQjY4NjY5OTQxRjY0RTI5NzczQzkxQkMwQTYKLToxMDVCRTAwMDdGMDRGMTk0NENFRUY0MTVGRjNGRUI4OUZGOUZGNTg2OUYKLToxMDVCRjAwMEZGRDZFQ0MwMTMwODRGMUNBQTVGMzlFRDBCRkYxM0RCNzcKLToxMDVDMDAwMEEzM0NCMTBGQTRGMTg4NkVCQjMyMTlFNUIzQzlGQzE4RUYKLToxMDVDMTAwMDM5MUY5OTI3QjMxNzkzNTY3Mzc1NzkzOEE1M0UwNUY1NDMKLToxMDVDMjAwMDQ0MUZFODYzQUY3RTdFNUYwMzdEMUNFQTlEREZBM0M0NTMKLToxMDVDMzAwMEE3Q0IwNUZFOTdDQkJDOEM1REJERTc2NUY0MDE3RjQ3MjQKLToxMDVDNDAwMDEzRTFFRjQ2RDVENzE1MkNFOTNCRkU4RUY3QzRERkYxMDMKLToxMDVDNTAwMERFRjExNzdDMTdGMUQ3NjI2NzlGOTBGRDVFNTVFRjQ1MjcKLToxMDVDNjAwMDdBQTlGNEY4MkZDNzdDOURCREVCODREQzI5MDFGQzk1NTMKLToxMDVDNzAwMEEwQkRBNDkyNUNGQjIxQkI4OEU0RjYzNzJEMTY5QTZGNzkKLToxMDVDODAwMDI3QzhFQjg3OTUzRUFERjNCRjczQzk0RTA5NUJCM0EwNDAKLToxMDVDOTAwMERGMUJBRjYwMTRERkYzNkFFQjE0QUNFNzZCQTBBN0I1QjIKLToxMDVDQTAwMEJFQUY1N0M5RUJCMTVFMjVBRjc3Nzk2NUNEQ0IyNUZBOEQKLToxMDVDQjAwMEJDMUVFOUQzQTk3OUFDQkRDOTJCNEZERTc5Q0IyQjRGRTQKLToxMDVDQzAwMERFRDcyQkFGRkFFNTlEODc1RUVEMDNGQzg3RTBGQzkyMDMKLToxMDVDRDAwMEM5ODlCRUU2ODEwMjlGQjI3RTU5M0RDNzg3OUQyRUM1MDgKLToxMDVDRTAwMEQ1QUFEMzlENUM2RjNGQTkwODNENUUxNkE0QkFEQjQ5RDcKLToxMDVDRjAwMEMyRTI4MEQwRjNBNzc2RjFGN0VBRjhDNDc2RTU4OEJDNzMKLToxMDVEMDAwMDJDOUVBRkQwQjYyQTYwMzVFNDkzODRFOUY5MURGRTUzOEEKLToxMDVEMTAwMDlFQzEyQUU2NjlCQjY4M0REOUQzQjgxRjUyQUU1RkU2ODMKLToxMDVEMjAwMDY5QTc4QkY1NjQxN0YxNzU2NzFGRTM3OUVEMTI1RUU5REEKLToxMDVEMzAwMDYyQkY5MTUxNjUzNUVDMjMyNERDNkU1NDAzMEFGQUQxMUQKLToxMDVENDAwMDMzNzMxOEE2NDlDMDNFNjE5ODgyN0VBRTRDQkZCMUJEODgKLToxMDVENTAwMDg0NzcyRURCRkFCMThBMjk1RjM1QzZGN0I5Qjg5RjE5NjcKLToxMDVENjAwMDgxRUY3NUNGMTNFQzVGMDEzRkE1OTgzRjc2NEQ5RUYwMTQKLToxMDVENzAwMDNGRDg5OTE3RjUxMTUzRUI3QUE1MjNEREZFMjQ5ODQ3RjgKLToxMDVEODAwMDcxOTdERUY3MjcwQkYzNjRCQ0REQThGN0RBNTI1ODQyQUYKLToxMDVEOTAwMDNGQzMyNzgyMUZDMDVFMjE3RkIzMkFGNERDQzQ4RTEyNkEKLToxMDVEQTAwMENBNzc1OUVERDZDOEZGQTBBQTNFRTdENDkyOUVERjY3MTYKLToxMDVEQjAwMEZBODFCRDc1RjBDOEFFNDk2NTlBREVERjEyQzgzMkQ0RUIKLToxMDVEQzAwMEYzNkIwQjBERUQwQjgyMDMwREVGRkIzNTVENjQ3ODVGMUMKLToxMDVERDAwMEI0QjJEQzUwMkYwRThEMzVCNDJGMDFDMEVBRUI4MzM2MDAKLToxMDVERTAwMEZGOUJBMUZEOTBENkNCMERGNUExREJBRTM1QjRCRjMwNDYKLToxMDVERjAwMEQyNjA3ODdGRjE2MzRCMENFRjg3QjdBRDM2RDQyRkQ5RTMKLToxMDVFMDAwMDdEOTNBMTdEOEJGMDIzOUJFMUYyQUIzQ0JFN0Y2QkIxMTgKLToxMDVFMTAwMDcyMzlCNENFNTU0RUZFQ0QxNjk3RDFCRjc5QTc4MDdGOEIKLToxMDVFMjAwMDc1QzZCODUyRjRBQkI3QkM1MzU2OEFGMDNFOTAzRTk2NTYKLToxMDVFMzAwMEZDRUNDOUU4QzIyQ0Q3OTJDOTUzRjNGMzM2MzFERTQ3RTQKLToxMDVFNDAwMENGRDgyRDQ4RDcyQkY2MDNERjVFMDI3NUQ3RUI5QjcwQkEKLToxMDVFNTAwMDRENUI4NkYxRjhBQzhERjE3QzIxMTlBRjkxREY3N0M3RUUKLToxMDVFNjAwMDZCQUMzRUVFQUY0RDc3QjE1QjEzRDBDNTlENzk5QTUxQzcKLToxMDVFNzAwMENFMEFCOTI5RTkyODE5REMyNDNEOUUwQjZFQkIwNTdDQUUKLToxMDVFODAwMEJGMkFEQ0RFNTA3OEJFQUI1RTFGM0M5OTYwNUUxRkU3MjgKLToxMDVFOTAwMDU5NDQ3QzM5Rjg4NzNDNkUwRjhENEEyNTRCREU0M0ZDMTQKLToxMDVFQTAwMDc4QkVGQTQwQ0UwM0Y0QzEzMUFFMEY4Qzc5QkExRkQ1NUIKLToxMDVFQjAwMEJFQjRGMDVFMEREQjJGRTRFRDJEQkU1MkM0NEIzMjdGM0QKLToxMDVFQzAwMEZBQzcwMjZFM0E3RjdBMTNGN0E3QTcxQUUwRjY5NkU0QUMKLToxMDVFRDAwMDc3OTM1RkFGMjVGRDczRjJBN0I3RDg3REE1N0RGMUE3QjYKLToxMDVFRTAwMEJGMDVERjIyRkM3N0U3NzFGQUU4QzZBRkYwQzcyN0RCMTIKLToxMDVFRjAwMDQ3ODUxODNCODRFNzIxOThDQkFBRTlGNzREQzlGNkM3MzcKLToxMDVGMDAwMDUyOUVDM0ZFQjgxNEUzQjRBREI4RkY1MjEyRUE0MTQ3NDMKLToxMDVGMTAwMDdFMDVFRDlGNDkxRkI0ODIxRTc0OTA5RjgwMUREMkEwMDQKLToxMDVGMjAwMDdFRTMwNDBCQkI1NThCQUY1QkRBRjMwRUU2NzNEQTU1RjkKLToxMDVGMzAwMEMyQUIxQkJGNjdERjY3RDdBN0E4NUZDQjNFRDM5QkRGOTIKLToxMDVGNDAwMEVCQkVDNEFDNjdDRjE5RUYyMzNCNkQxQUFDN0ZCRDZFQkYKLToxMDVGNTAwMDdGMkRFMTYzOEVFRjQ5Rjg0Q0YzRjFGOERENDZEMDhGRTkKLToxMDVGNjAwMDE4REZEQjk3Q0JGNUY0NDZEODdGMjMxQzNERDkwMUVGMzIKLToxMDVGNzAwMDAwQjRFN0UxRjlDMzg4OEVEQzRBRTIxRjA5NTc3MzlDM0QKLToxMDVGODAwMEFGQUY3MjY3NkM3RTBGM0I2RTZDN0UyRjc2OUM1Q0ZGQjIKLToxMDVGOTAwMDZBQjE3RjlFQTQwRTZCNDMzRkU2QTk5ODlERTBBNjMyQUUKLToxMDVGQTAwMDlFNzdEOTdDRDBDNjIyODQ0NzlFQkYyQ0YxNjg4QjZEMkEKLToxMDVGQjAwMDZBNDdGRDZDNjNFNjdDNjUyRDAzRDc2RjNCQzhDRjg5Q0MKLToxMDVGQzAwMEIxMUNGRTNFQ0M5Q0VCRDBFRUM5QTgzMkVBQUY0Q0JGNzAKLToxMDVGRDAwMDUxN0Y2NUQ3NjQ5OUY0OTk1MTdGRTVENzFBRjU1NzQxRjgKLToxMDVGRTAwMEQwQThCRkZBMzU5NTlCRjQ5OTUxN0YxNTg3QzY5QkY0Q0QKLToxMDVGRjAwMDk5NTE3RjBEREE3Q0I5NDk5RjE5RjVEN0QwNkQ0NkZEQ0YKLToxMDYwMDAwMDc1NjFDNEE4QkYyRTdFNkNCNTQ5OUYxOUY1RDcyNUJCMTUKLToxMDYwMTAwMEQ3MUJERTk3NDU2RjM1QkMxRjc5RjA4Nzg2N0E0NUZCMjUKLToxMDYwMjAwMEJGMUJEQTJGM0FGNDBCQ0FFQjE5N0RGNDYxNDNCQjMxODUKLToxMDYwMzAwMDFEM0YzNUI0MDM4MEI3NjNGRUY3N0M0MjA5NjM5NzlFMkEKLToxMDYwNDAwMDdDQ0FGMDdFQkVCMEQ3QkVEMUY1NkI0MzNGQUM5NUU3QkUKLToxMDYwNTAwMDcxODdFMTJGRTJFQjNEMTZCNEEzOTE2MjY1NURDRkY1NDgKLToxMDYwNjAwMDAzQkNBRTg4MjhCRTI4MzQ1QkJDRkJDOTRBOUNDNzA3NkEKLToxMDYwNzAwMDZGNEUzOTg4RkQyQ0RBNjZDQ0ZGNUUxQzMxRDY5QkQ5NzkKLToxMDYwODAwMEMwMEM5NDBCQ0Q0MDE3MTFBMDkzQTU5ODE3QUU5MzZGMzkKLToxMDYwOTAwMDRCRDk0QTcxMkVCMDZGNzRCNkU4RDAxNThDRjI0OUMzNTMKLToxMDYwQTAwMEZFNzZDQzdCOTdFQjk0RjRFNjE3RjQyNkU3MjdEN0JCNzQKLToxMDYwQjAwMDE0RUNCRkE4MTY1RkE3MUZGRUYyRkQ2Njg3MURFOTc2RTgKLToxMDYwQzAwMEUxNkU4NUZEQkJEMjczM0Q0RDdCRUVEQ0Q0MkZDMUJBQjIKLToxMDYwRDAwMENDRUIzMERCQTEzRkM5MzdGQUM3MjdBOTJFOEExNzlDMjIKLToxMDYwRTAwMDdBNTlGNTcxN0ZBMzkxMEY1NzFGRTI3MTgyRDU0RjI4MUUKLToxMDYwRjAwMEU0QUYzM0MzNDNEQUE3QzlFMEEyODZGOUJFQTEzOTg3NkEKLToxMDYxMDAwMDQ1MjIzQUZFRDMwNDNDMUM1RTIzRkY5REMyN0ZFMDdDMDcKLToxMDYxMTAwMDFFNTAyMzk4NkY5NEEyQTU5QUU5QUQzMkNBN0FDMjM5NkIKLToxMDYxMjAwMEFERDRDOEE3NjYzOEJCN0Q4NTA5RTk0QTgzQkYzODhGREYKLToxMDYxMzAwMDg1RTJGQ0ExOTlBRUNDNzA1RkIxRkI0RTNCQ0FDM0YzQzQKLToxMDYxNDAwMDg1RkJEMUZDQzQ3MTA5RDA3NkEzRUMwOUYyRUIyNDVDODkKLToxMDYxNTAwMDYxREZGRTI2Q0FDRDY0RkJEOUY3RjM5NUYzM0Q1RkY0MEEKLToxMDYxNjAwMEJFNUUwRTdGMERGQkQ5MzNCREU5Qjk0RUY0Qjc4MTdEMUMKLToxMDYxNzAwMDY5RjZCMzk5RjVCMEIyNjdGRjY3NEEzQUY5QjUzQjFDQzcKLToxMDYxODAwMEM4Nzc0MTlGOTNFN0MxOThGNDY0NjlBOTQxNEY3NkVGQkUKLToxMDYxOTAwMDdCREY1MTY4REZCQjJCQzM2RkY1QzJGQTBFNjVGODZENkMKLToxMDYxQTAwMDVFQjQ4NzMyRkM3NkFGQ0UwRTZEMDFCOEQwQjkxRkQwODkKLToxMDYxQjAwMDUzNEYyNkIwMTNDNzdCQTU3RDE0MjBCRkM5QzY2QURFMjYKLToxMDYxQzAwMERFRENFRTIyMkYzRjI3QjQyRkI3RDI0QkY2RTdEQjY1OUMKLToxMDYxRDAwMDVFQjIzRkREOTVCRERBOUY3Nzg4MzhEMTZEMTg4NzFDOTgKLToxMDYxRTAwMDEyQ0YwRkJBNURDNDZCODBFREZDODhCNzhEQjY4MDU3QjcKLToxMDYxRjAwMDlGM0ZFQ0Y2NjZEMkJDRDJDNzNDRDU4RTc5RDQyRDFFMUIKLToxMDYyMDAwMDhCNDdEMUIwRTRGOURDMUI1Q0Q2OUE5REUyQkIxQ0MzODIKLToxMDYyMTAwMDc3N0M5RTJBQzIxQkUwNkE3NTU5M0ZEN0QzRUQ3ODJGNTEKLToxMDYyMjAwMEEzRjdDOUQ2MzlERUNCRUQ1RTFCMEJERThFRjY5MDhDNjQKLToxMDYyMzAwMDBGREJERUE5NzZBMkJDNkI2MTdFMEY5NzkzM0U4RjNFOEIKLToxMDYyNDAwMEZGQzNDNjc4M0M3OEJDODgwRkNCRTdBQUU3MUZDQkMzNTcKLToxMDYyNTAwMDNBOTIxMUFDNDYzQzlBRjNCMDZFQ0NGMDhGQzdFNzIxNkUKLToxMDYyNjAwMDZCRDg4MTc2NjdDODk5Nzg1RjVDMjNGMEFBOEFGNTgyM0IKLToxMDYyNzAwMDAxNEE3NDQ1RjM1MENGM0ZGRTAzRjZFNjE1MzhFRThEMjQKLToxMDYyODAwMDZBOThGMjI0NUJEQzk1QTU0MTU3REZGRDVDNzNCRDlDRTkKLToxMDYyOTAwMDZGNzVGNkQxNUMzRDlEOUFGOTEzRUNEM0NCRjExQzk5NDcKLToxMDYyQTAwMDNGQTNEMDRBREIwRUFCQUYxNEUxQkQxOUZGM0Q4NkZDMjYKLToxMDYyQjAwMEI0MEJGMEZCMUU3OUFGRTIxQzJFRUNFMzdBQ0RFMzk1MzQKLToxMDYyQzAwMEZERUNDQkYyMkZGM0YyN0NDMzE1NUU5RTZGQjg0MUQ1ODcKLToxMDYyRDAwMEY1OTM3RThFN0VBNDlGQTMwRjdFQUIzNURFQzRGRUQxRTgKLToxMDYyRTAwMDkzQThERkZCMEFDNzVCQkMzREVDQ0M1QkJDQkREODk5NzcKLToxMDYyRjAwMDlGMUUxQjlBODFGMTZDRTlFRjMyQjc5M0U3MjI2NTdEMEYKLToxMDYzMDAwMDczQTY3MUZDNERFNUJDRkU0MzgxQkYzRjhBN0IzQTFFRkMKLToxMDYzMTAwMDE1RjM3MDlBQ0U4QjNBQTczMkJBQTc0MzlFMzM5NUZERjgKLToxMDYzMjAwMDNDRUE3NTUzRkJCNUQ5RTMxRkM1Rjk2RTJBNTE2ODFGQzYKLToxMDYzMzAwMEJBMjk1MzMxRUM0N0VCQkRENThGMjI1RTIzQTJGRjQ3MkMKLToxMDYzNDAwMDA1RkRFRTE4QzhGRDM5RTYzQ0NDMjVEOEJFMDI0QkRFNzMKLToxMDYzNTAwMDJGOUU2QjQ1Mzk2NjU3RDU4NDcwRkM5OTk3RkI4QjJFMjEKLToxMDYzNjAwMDg3OEVCMDdGRTk3NzZCQkM1QjExRkIyN0UzQkQwOEMwNkMKLToxMDYzNzAwMEU3QUZBNDgxRkMzOUJFRDU0NkU3NUUxN0E4QUU0RDQ4MEQKLToxMDYzODAwMDhGQzlFRTM5QTgxRjE2QTBGQ0E3QUY3QTdFMENFMTk5NDEKLToxMDYzOTAwMDk2RDU1M0FGRUVGNzc2RUI1NURGNzk5RTIzRkJBREY3M0QKLToxMDYzQTAwMDNDRTJGRDFEQTk5QzRFQkJEQzJFRjI5QjlCREI5RDEwQUQKLToxMDYzQjAwMEY4RDkyQUZDMUEyOEQ3NTFCRjY0QTk2QzY1MjIzRDczMEQKLToxMDYzQzAwMDQyQzhENTdGRkM1QzMzQkZDRjIzREJFNUEyRUZDQ0U3MkYKLToxMDYzRDAwMDlBM0JFQzFEMUJGMzcxQkVERjUwN0M3ODdFMjFCRkNFNTMKLToxMDYzRTAwMEIzMkYzRjA3Q0YzMTZBRTRFM0RCNTRDMkQyQUJGMDdENzkKLToxMDYzRjAwMDk5ODVERTY3NUVFOUQ5NjRDM0JDNkY4RDYxRTYzRUIzMDMKLToxMDY0MDAwMEMxMzg2RTE4Qzc1NUMwRTMzODVCQzM1N0VDQ0I4Nzc2RUQKLToxMDY0MTAwMDE5NUExNzFCMzg4Q0NFN0I0RkY2MjJERkQ2RjJGQzc5NDcKLToxMDY0MjAwMEYzRkFCRTE0RkNFMURBMDhGQjBCODQ4Nzk2MzgwRkZEMDMKLToxMDY0MzAwMDRCNDE3RjIwNkZCRTQwM0FBRkQ2RDgyRTdFMkU4QkU3RTEKLToxMDY0NDAwMEMxMjI1OTUyQkVBMjhGRTc2QkE3NjFCRUQzMjAyRTZGMjcKLToxMDY0NTAwMDQ4REY2NDREQjAxNEU0QzZGOTRCMTVGMDM2OUZFNzc2N0IKLToxMDY0NjAwMDE1OUNERjc5RUUxOTc1ODlFNzNCQjQ4MEFGRUI0RjE5QzYKLToxMDY0NzAwMDgxMkMxQzc3QzZCODc1REMxRkY2QzVEOUIzNkEyNTFBRkUKLToxMDY0ODAwMEM3OUM0RkUwN0I4NkZFOEE5NDFDMkU4NzUzMzQ4REU0OTQKLToxMDY0OTAwMDMyRjMyODk0RTdFQUQ0N0M0RDU4NEY3MThERjVBODY4MDMKLToxMDY0QTAwMDI3M0I3ODVDOTJDREI3MzBCQzVGNjU4MkU4Qzc1RkNCOTUKLToxMDY0QjAwMDk0Nzc0QkI5NUY5NkNCNTkyQjdCNTdEMkJGMkE4MDUzMjkKLToxMDY0QzAwMDg5N0E5NkZGMDFGQjY5NkIxQUFDNjc4MkVCMzBDNTI3QUUKLToxMDY0RDAwMDUzMDZBRkFDQzY3MzBEQ0ZDRUUzN0RGQzMwQzlCOTAxMTYKLToxMDY0RTAwMDc5REVCREZCNUMzRjdCRjhCMEUxNUNGRkM2MDcwRTFCQUQKLToxMDY0RjAwMENFRjU4NzFGMzhGQzU1Q0VGNTRGQkNFRjgxQzNGRkNDREUKLToxMDY1MDAwMDczRkQ1MjlFMUQ1NTgzNDc2RjA2Rjg1RjA1NDQxNTJBOUIKLToxMDY1MTAwMEM3RDJDQUVBMDhERjVFODJEQjk1MDJDRUUxQ0YwMUNFQTgKLToxMDY1MjAwMENFMzg5Q0FGREE3Mzg4RTA3N0Q0MDZGMzg2RjE2REUzNUEKLToxMDY1MzAwMDM5QTg2RDM3NjU0NDVBNDgyRTQ2NjhEQzU5Q0VENjQ5OEQKLToxMDY1NDAwMEI4RUZFQ0I0Nzc4REMwNzEzQjlGN0VCNTI4MENGMkU0QjgKLToxMDY1NTAwMEQ4Rjc0RUJCMTlEMERGNUJENjJFMzczRTNGQjlFNjI1QzQKLToxMDY1NjAwMDM3QzJFQkQ4MUE5NUVDMzUzQTE3QURDQjQ3NUEyOEU4MjUKLToxMDY1NzAwMEVBRDk4MkMwMUNBNEFCNzk2QkJGQUNENERCRTMyQzk0MEEKLToxMDY1ODAwMDRCRkE3NzcxNDRBNUQ0MkIyOUZGOTYzRTk2MjY4ODhFMjgKLToxMDY1OTAwMEQ3OTdCNzY1MUJFQTUyMkYyRjc3MjQzRUE3RkU2MDAxREQKLToxMDY1QTAwMDk3NDM4QjFGREY2MUVGQTdFMUY4QzFFNjAyOThDNzQ5NjcKLToxMDY1QjAwMDkxREY3MDcyOTc5QkY2NjE3MjNFMEQ4Rjk3RDk3MURGRjQKLToxMDY1QzAwMEY5RDYxRTA3OEI5MjFGQjhEREM2Qzg5RkU1OUZBQUU0QzcKLToxMDY1RDAwMEUxM0Q0NkZDOEY3OTlFQ0ZFRDREQTNGRTE2RENBRDkyREEKLToxMDY1RTAwMERGQTkxRUM2MEEwMTVDODM3QjE2RjM3REIwNjkxRDBCMTMKLToxMDY1RjAwMDhFNjk5MzUxNUUyREQ4QTJCMEIwQzZEQkFGQzFGQjMzMUMKLToxMDY2MDAwMDQyQjc1MDFDQzZCQzRFQjM3RTU5OTRFNEZFOUM0NTdCRjkKLToxMDY2MTAwMDZFQTNFRkU3MzNGRjZENjhDRjJFNjgzNUJGOUZGMjFFODQKLToxMDY2MjAwMDEyRjlBMjczQzQ3MzdFNTgyMEY0NEUyNTFCN0Q3NjEwOTgKLToxMDY2MzAwMEM1OEYzMjg2NkJFN0Q2M0IyN0Q3NzIyNjdEN0ZBRDkzMTkKLToxMDY2NDAwMENBMEZENzdBQTg5QzUzQTAxMTFFOTZFRURFRjc1QzNGQzYKLToxMDY2NTAwMDYyRjNGNjRBRDQ0QkFGMUM2QzRDQkI1NjhCREJERDk1MUEKLToxMDY2NjAwMDNCQUVEQjdGM0Y5MUJDMzEzRkIzNEVDMDdEQjRDOENCNjYKLToxMDY2NzAwMDVDMjRDRTNENTQxQ0VEM0QyRkIzMEVFMTMxQTJFNzdDRUUKLToxMDY2ODAwMEE1OUQ1RDY3RjJGQjRBQkJEQjBDOEY1MzA3MjdBNDIxNTYKLToxMDY2OTAwMDdERkM1MkMyNjUzNEMwNDVGREVBNzA0OUY2REQ3Mjk1NTUKLToxMDY2QTAwMERGOUI2NjdFMkVGOTY4OEVBMEVCRjkzQjY3NkUyQTg0MkQKLToxMDY2QjAwMEYxNUI5RTdFNkY0MDA3RDEyOUY3NUY1NDA4Nzg1NUI4OEIKLToxMDY2QzAwMDM2QjVFM0ZBMkI5OEM5NkYxODY2MkYzMzFEM0QwMzNEOEQKLToxMDY2RDAwMEE5QTg3N0NDNzQyQkU5ODlCRENDQkY3NzBBQkY0NjM3MTAKLToxMDY2RTAwMEJERUVCOTlERTAyQkU5MEE0RjNBNThEMDg2NjM1MUFGMTEKLToxMDY2RjAwMEE1RUFEQ0Y3NUMyRDY4MzVENjNGQjI3NTBDNDA3OUIyNUYKLToxMDY3MDAwMEM4RTQ2RkY4NDg0OUJDN0Y3QkJFNjAyMDJENzZCRUU2QUEKLToxMDY3MTAwMDlGOENGOTE3MEI1ODYwMTNGN0NGRjNGQjcxNEU1QTVCNDAKLToxMDY3MjAwMDlGQkIxOUY5N0MyN0U3QjNFNUJGN0FFMkJGNTA3RTJEMDYKLToxMDY3MzAwMEY5Q0ZCQkQzNTE3RUZEQzVEQTlBODdFMzJEN0I2NDYzMjUKLToxMDY3NDAwMEJBMUZFNTk4MzU5QzhFREZGRjI1QTIyNjNDNDczQ0I4NTIKLToxMDY3NTAwMDUwOTFGOUZBMkVDQzUzNUI0MUE0MDZGRkNEMEY0RjQ3NjEKLToxMDY3NjAwMEY5RjlERjhGRDgzQ0U4ODc2RDdFQ0MxMTc1MDAzQzU2NzcKLToxMDY3NzAwMEVDRTI3MDg0RkFEQkJDN0UwQkMxQUI3OUI3OTEyRjk3NEEKLToxMDY3ODAwMEZDQzdERDc5MUFGOTAzQzJGRDA0RkNGQUExMDg1RkIxNjgKLToxMDY3OTAwMEQzNDY3OUFEMkI1RTU2N0QzODRDMzNFQkEyRjU5OUJGQ0QKLToxMDY3QTAwMEM3NzlDNDAwNkZDRDZENkFCRDNEQTNFNzdCQjA4NEVDQjMKLToxMDY3QjAwMEM4NkZDREJCMzgzRTlCNzc3MTdDMzU5QkVDRDAyNjIxRDIKLToxMDY3QzAwMEI3Q0RGNDlGNTMyOEUyQkE4MkVFMDEzRUU0NTc5M0Y5MjUKLToxMDY3RDAwMEI2MkNDMkU1NzdDQjRGRUUxREYxMzZDQ0VGQzM5REJGOTMKLToxMDY3RTAwMDRCNTc4NkM1RTk5RjYxNTYyOEMwRUQ1NDVCRTMzQzdCNUYKLToxMDY3RjAwMDJGRjdGNTdDMjRGOEE0NUIyRjA4M0RBNEVEODY4OUU1RUUKLToxMDY4MDAwMDQzNzUwRjJGOTdEOUEyRTk5NzAyNUM5NkVEQjBGOUMyQjQKLToxMDY4MTAwMEYwNzhEOTEzQUFERjg1NzZENDZCMEVCQTdGNjJFOTEzQkMKLToxMDY4MjAwMENGQkUzMjE2RTZCN0Y0NDk1QkNFNTRCRTBDMTdDQTZGMjIKLToxMDY4MzAwMDg5QUY2NkE0RjNGMjM4N0U5NkZDRTI1OTNCRTY2OUUyNDIKLToxMDY4NDAwMEYzMzU1OTcxM0MyRDdENzI5RjFERjMzRUNERjA5Q0QwRTgKLToxMDY4NTAwMEI2Q0ZDRUY5Q0Q4NEFGQjZCNzI3QTNERTZFRjlDOUE3MDAKLToxMDY4NjAwMDc2QTQ4N0JGRUM1NTU4N0U0OUNGRUY5Qjc2M0M5QjhFMzQKLToxMDY4NzAwMDcyMDZFMTg0RkE0NUUyQUQxQjhGM0RGMDE3OURGRUVCRjkKLToxMDY4ODAwMDUxRDRDRTgzNzE5RTczRTFGMTEzM0M4MzUwNDFGNEZFRTkKLToxMDY4OTAwMEYzNUZDMzNDOUE1RTc3RjgxMDBFNEQzRkJGMkUxREQ3QjUKLToxMDY4QTAwMEYzOUU3NTI1QTdGQjA3MzdFNkExREU2RUIyODVGMzNDQTQKLToxMDY4QjAwMDU0RjJFNzREREJCRjQzRjRCOEU4QzVFRkYwRkI5Qzk4MUEKLToxMDY4QzAwMEJGMDBGOTE5RDY1QjgwRUI1Q0YwQzA1NUI0Q0U4NTJDQzcKLToxMDY4RDAwMDQ4RjREOEY0MjBCRkRGRjA4Qzk1RDUyNERBMEYzQzI0OUYKLToxMDY4RTAwMEY4RTZCRDg3MURCNDc5NzhDRkNFRjg3RDIxN0Y1MEM1RkQKLToxMDY4RjAwMDdENThBQkM4NUVGOThFNTgzMzQ4NjhBQTlGNzE3MjdDODgKLToxMDY5MDAwMEFEMkU5NDcxN0YyRURGOUE0NUFCRTY5REI3OTA3QzdCRDAKLToxMDY5MTAwMEJGQzg5RjhGRkMwRjcwMzBGQTY3NUY5Qzk0MkZFNDIyRjIKLToxMDY5MjAwMERERUI0MkRGMDFGRDREQzBFN0Q4QkVEREU2NEYxOTYxNkEKLToxMDY5MzAwMEY4NEVFNERGRjJGMUFGMTdFM0MzQkM1M0QxQ0ZGNzVFRkIKLToxMDY5NDAwMDlFNzE5RjJCQ0IyMzg1RDJBRkM2REE5OTlFQ0U5MkM5N0EKLToxMDY5NTAwMDgxOUQ1Qjg4QkUzRTc5OTlDQjk5MTU5MTk5MzVGNEJFOUUKLToxMDY5NjAwMEREMTZDREM3Rjc5MTdENTcyQTI0MjdDMDBFNDlDNEU3MEQKLToxMDY5NzAwMDNCNkQ4MkNGOERFRjYxOUU1NjQ1MEZERkJERkNGQzlFQzcKLToxMDY5ODAwMEE0OTc4NTc3NDE3QjFENUZDN0U5QzcxRTdGNUUxMkU3MkQKLToxMDY5OTAwMDU3OTlCRkIxQzg2NENGQzlEMjJDMjdFRTMzQzkwOUY5QzIKLToxMDY5QTAwMDNEN0IyMDM3RTFGOTg4Qjg3QzA4MTNGQzk2RDkyMjhGMEIKLToxMDY5QjAwMEZFM0JGMkY1NkIwRTNBMTdCOUVDMDkxQkRERUZGM0MxQTQKLToxMDY5QzAwMEUzRkI1RkI5MTZFOEZGODMzNkM5Q0Y0NkY5NkJFNkU3MEMKLToxMDY5RDAwMEE2QTdBRTYyODlGOEY5ODM5QzAwNEJDOENGRjAzQzIxOTIKLToxMDY5RTAwMDNGRTdGMEYzMDZGRkI3RTRFRkEyMjRGMkY3NDA2MTRGNzAKLToxMDY5RjAwMEJCRTM1MkE4QkVGRkQzQTVDNUI0M0YzM0MxNTdDMkQ1MzAKLToxMDZBMDAwMDJDNEY2N0EzQjE5MERCNTM5RUMyOUY5Nzk5MEU5RTEyQTUKLToxMDZBMTAwMDhFOTI0RTk3RkM2QzM5OEREMzREQ0Y5MjVFMjUzRDc3OEIKLToxMDZBMjAwMEQzQUI3OURENDY3ODlBREZERjgyN0JBN0RDMzhGRTZENTkKLToxMDZBMzAwMEVCNjE1RjhFRjFEQUE3NTVDQUNGRUJENEJBRDJCMzYwNUYKLToxMDZBNDAwMERDOEQyMkJGQTdEMzIzRUE5OUJDREU5NTZCREY4NEYyRUQKLToxMDZBNTAwMDQ0M0VFRjRBRTFGOTBFOUQ4MUFFRjQ0Q0REN0VFMEVENUYKLToxMDZBNjAwMDNENkEzQTlFMDdFODg4MjRDRUNCQTA4QzBERjQ4MzI0OUYKLToxMDZBNzAwMEM5REI5MEU3N0UzQjUzQjlCRkFGMzM5NUZCRjkyNkE5M0QKLToxMDZBODAwMEFFMDEyMURDREZCNUYyRjhEMkZDNzU1N0E3RTNGRUJFRkMKLToxMDZBOTAwMDczQ0ZBMDE5QjVCODFGMzhBNEYyOUNBM0IwREY1QTAwNzkKLToxMDZBQTAwMEYwNkRFNDRCNjcyNzU5Rjg5RTcxNjhCRkVGNTkzQTE1QUUKLToxMDZBQjAwMEZCOTlCRkQ1MDg5Nzg1QUU5RDc2RUNFNzBDNUI0M0U1NjcKLToxMDZBQzAwMEMyQkI2QzcxM0E4MUZGOTY2MEJFMTZEMkY5MDNBNkU3OEQKLToxMDZBRDAwMDdCMkUyM0JBNUE2MkEyQUIyMEQyNTU4MkYzMjQxOUZEMzEKLToxMDZBRTAwMDA0NUQ5NUIxMzJCRURGMTZGMTMxMjFGNzI2QTlDMzY2RTgKLToxMDZBRjAwMEQ0NjIzRUU1NDE3RURFRTNENDFFOTU2REMyRjUzRTJFQTYKLToxMDZCMDAwMEUyNjVFMTVDQTJENzE1NDBERjdBQkZFOTg3NDg3NzQzQTkKLToxMDZCMTAwMDkzRUJGOTBGN0Y3OUFDRjI2NjY4QjJFQ0JGRkUzNEUyMUEKLToxMDZCMjAwMDdFMjgzRkZDQUZENzJFRjgwREQ2N0ZGNUVBODAzRkIxMjcKLToxMDZCMzAwMDlFRUQyN0VDRkQ2QzJFRTU3NUVFNzVEMEJEQTY5RDdCMTgKLToxMDZCNDAwMDlGMUY3MDMzRDY3RkVEQTBGQjQ1M0JEN0YzN0Q3Njc4NTIKLToxMDZCNTAwMEFGOUJGNDdGNjcxMUI3MTc1QjlFRkU3NDQ0MDdFOTJGNjQKLToxMDZCNjAwMDdFNkZGMEQ4N0VGQ0JDRURBOTNEN0Y3QjUzQzE3Q0JFMUYKLToxMDZCNzAwMDNEQjAyQTk0OEY2MkZGRDZGQ0VCMTREQUE3NzczRUZENzYKLToxMDZCODAwMEE5NjE3RkZBNTVEN0IzNDI5Q0JCRUE3NEIzNUEzQzI3M0MKLToxMDZCOTAwMEREOTlDOUNGQTkzNkZGNjZDQzhGRjFEQ0U1RjI1REZCNEMKLToxMDZCQTAwMEVDOERGMDdFQzJGRkZFNzIwNENBQTFDRUE3QjhERDAxNTMKLToxMDZCQjAwMEY2RjA3NkU2MDMzQ0Y0NkJCREREMDZGOEZCMDg2RDQ0QTkKLToxMDZCQzAwMEUwOTkzN0ZCQjU0RkMzRjMyNDNERTFDMkUxRDAwOTcwMzIKLToxMDZCRDAwMEMwNzUwMTVDOUE1MDdFMjY4MzQ3RERCRjJDM0MzRTlFRUIKLToxMDZCRTAwMDhCRTMyRkRCMzM5QUVFMTk4RUMzNDVGMUYzRTc2RUNBQzAKLToxMDZCRjAwMEY3ODBGNUYzRTc3QjNGMUQ4MTc2RDRCOUQ2N0I1MzNGMTEKLToxMDZDMDAwMDdFRUVFNzdGQ0E3QUI3RkRDQkFFOTdEM0JCODY0RTk5QUYKLToxMDZDMTAwMDhBOUU3NERGOTNBRTdGNzUwM0Q1N0ZFRUY2RDE3Q0ZCNDEKLToxMDZDMjAwMEM4RUZCQkZGODdEMUY3MkJGRkRGRTJGQjkwQzBCN0RCREMKLToxMDZDMzAwMDgzNzE5OUNFQTdCRjFDQzBDRTYzREQ2N0ZFNjVGMURDMTIKLToxMDZDNDAwMEZCQkFCQkVEMUU4QkNGMzkwQUU2RjczQThCNUM1NUFEMkMKLToxMDZDNTAwMDI0Q0YxRjFERDg1RkZBMUZGODNFNDNERUMzM0QzRDY3QkEKLToxMDZDNjAwMDIxRDkxMUQzRkREQzFGRDNDMkNBMEZFMjM5QkJCMDVGRkIKLToxMDZDNzAwMEE1RjgwNTI1RUYwMDFDREFBRjJDOEI1MDlFOTgzNTNDMEIKLToxMDZDODAwMEU0MUVDQzFCOUJCNURDQzdFRjJCMzNFRUJGQTZFN0Q1Q0MKLToxMDZDOTAwMEQ0QTAzRDc3NjQxRENDMEJEQTFENzE1QjNDMkRCMDg0MTQKLToxMDZDQTAwMDE5N0U5NUVDM0YyOEM5RUVGQkUzRjhDQjI4MEY2NTQ2MkIKLToxMDZDQjAwMDk1NzExRjcyQUQ2OTNGNzE3NUFERjFGRDJDRjY3MDJFQTcKLToxMDZDQzAwMEU2RkJDRDZBQjI1MTdFRDI1NUU2RkQ0NzdGMEZBREYzQUMKLToxMDZDRDAwMDZBQjY3MjIzRjdFNzlDMUY5QzJFRUZDRkY3NjMzREUxNjYKLToxMDZDRTAwMEQwM0JEQzdBQzA0OUVDMzcyOTc3NDhFQjA5Mzc0NzkwMkQKLToxMDZDRjAwMEVGM0YxREYwNDJEODVCMjIyRjZGNzU5RkUwQzlDNEJFRTUKLToxMDZEMDAwMEQ0MjE4Njk2RjA3NUY4RjlCREEzQkE3RTA5MkUxMkVFNEQKLToxMDZEMTAwMEU3MEI2Rjg5MjczM0RDMjU3QzI1RENDQzc4MTg4MkU3RUMKLToxMDZEMjAwMDNEMkJFMkYwOEY5N0M2N0JCNTk5QjAxQkE3NzdEQjhEMjMKLToxMDZEMzAwMDJFODJFMzBCM0JGOTc5ODkxN0FBMUFCNzk2NjFGRDcxODgKLToxMDZENDAwMDdFMUZGQzk5NzEyMzk5MTNENjdCQzRDNjc2NTM1Q0M4MDkKLToxMDZENTAwMEVGRDczQzk1RjFGQzE5QTVFQTc5OEE0RjYwRkVBMjdFMzcKLToxMDZENjAwMEJGOEFGOThCRkE3NTYxRkVBMkJFOEVGOThCRkFGNjk4OEUKLToxMDZENzAwMEJGQTg3RjhGRjk4QkZBRjc5OEJGQThBRjYzRkVBMkJFQkEKLToxMDZEODAwMDNERTYyRkVBRUI5OEJGQTg2RjhGRjk4QkZBM0FFNjJGMTIKLToxMDZEOTAwMEVBREI2M0ZFQTJGRTNERTYyRkVBREY2M0ZFQTJCRThFQzMKLToxMDZEQTAwMEY5OEJGQUY2OThCRkE4N0Y4RkY5OEJGQUY3OThCRkE4RUUKLToxMDZEQjAwMEFGNjNGRUEyQkUzREU2MkRFQURGNjNERUEyRkUzREU2NDYKLToxMDZEQzAwMDI5RUFFQjk4OUZBODZGRkZBREQ4MzM4NjdBMzVGQjlERjMKLToxMDZERDAwMEExRkQwNEU3NEI4NkZBMjRDRjlGMENFREJGRUQzRDZFN0QKLToxMDZERTAwMDc4M0Y0NUZCQzBGMDVFRTJGRkIyRDJEMzg2RTcxOEZCRTYKLToxMDZERjAwMDA4NTdFMjNFODZGRjk5RTZGQjlCQTExRjJCMEI1MDlDOTgKLToxMDZFMDAwMEQ0Q0U1NjUyRTk0NDdGMkY5NEE5QUM4RDRBMTdCMDM5OUQKLToxMDZFMTAwMDk2RUYwRDBEM0VERTFGRTk3NTdCNzgxMzEyRDc5MTMxODkKLToxMDZFMjAwMDlGMEU0MEY5RkZDMkI4MkJCODVGNDJDNDE3NjZFMDNGMUYKLToxMDZFMzAwMDM1MjBFMkI0MkZGQUUzM0U1N0M2NEZEMzYzMkE4QjhFMzgKLToxMDZFNDAwMDA0M0E4QzI5NTQ3QTYyNjkyQzlBMEQ3NDE4NEJBMTMyMzkKLToxMDZFNTAwMDJCOTY0RENGQjM2Mzk5NTRFNkM0RkFEMUYzREM1ODAxQjUKLToxMDZFNjAwMDk1NzlCMTQxNTRFNkM3NEFBOEY0QzYyRUE2QjIyMDc2NTkKLToxMDZFNzAwMDIxOTU4NUIxOTFGNDVEQkY1ODE5OTVGRDYzOTdEMkYzQzMKLToxMDZFODAwMEEyRDgxODJBMDdDNDI2RDBGM0UyNTgzNTk1NUFFQzMyMTYKLToxMDZFOTAwMDJBNEI2MjUzQTgxQzE4QkI4MkRBMEQ4QUNEQTQ3MjcwRUIKLToxMDZFQTAwMDZDMzYzRDFGMTJCQjg2Q0EwQjYyOEQ1NDBFOERENTUzQjYKLToxMDZFQjAwMDU5MUE1QjRBRTU4NUIxQzU1NDVFMTRCQjhFQkVCQjM4MUEKLToxMDZFQzAwMEI2OEFDQTYxQjE5QkU5RjlGMEQ4NzdBOTFDMTE2QkExMDgKLToxMDZFRDAwMEYyOTJEODNBMkE3REIxREJBODVENTk2QzBCOTVFNUIxRTkKLToxMDZFRTAwMDFGRDFGMzkxQjEzQkE5MUMxNUJCOUY5RTU3QzRFRUEzQzQKLToxMDZFRjAwMEIyMzJGNjYzMkE0N0M3NzY1MDU5MTVGQjE5OTU2MzYyN0IKLToxMDZGMDAwMDNGQTE3MjZDRUMxN0Y0RERBNUIxMjdBOTFDMTdGQjBEOEUKLToxMDZGMTAwMDNERkY0NkVDN0Y1MUY5Q0REODdFN0FGRUFERDgzRTJBQjIKLToxMDZGMjAwMEZEQjFERkQxRjNFQUQ4MjEyQUM3Qzc1RUEyRTcxMzYyMTkKLToxMDZGMzAwMDJGNTIzOTMxRjYyNzdBM0UyOUY2MUE5NTkzNjNDN0E5NUQKLToxMDZGNDAwMEZDNzZFQzZEMkE2QjYyMUY1MDM5MjVGNjE3MkFGRjJENEYKLToxMDZGNTAwMDc2OUFCRUJCMkNGNjMxOTU1MzYzN0ZBM0U3RDM2MjlGMkQKLToxMDZGNjAwMDUxRDlCREZGMUY5N0Y0NzcwNTJDNjc3MUZGRUNDQUVBNzIKLToxMDZGNzAwMEQzN0Q2NTc3QTZBNTkzNUM5Q0JFODZDQkM1N0JEMzNFQUYKLToxMDZGODAwMDNBNDA3MjcyOEM0MzczOTBGMERCNjY4ODc3RDE4RjQ4RjkKLToxMDZGOTAwMEMwQkU2RkRGOThGN0ZBQTNCREIzQTlGQUY4MUJEN0ExNUIKLToxMDZGQTAwMDNFNUJFNTYwNDI5Rjk5RTRFRTE3MkVFMUVGNjQ5ODhGMTcKLToxMDZGQjAwMDM4NDdEMEY1MEI1NUZCNzNEMThFREE1NERFQjEwQ0ZEOUEKLToxMDZGQzAwMDI2Qjc5Nzc0RDQ2MTU5NTBDNEVEMDk4RjI4RjM4Qjc4OTQKLToxMDZGRDAwMDVDRTlFRjQzQjlGRUFENUIzNTg0RkZCRTQwNEVERkQ2QzIKLToxMDZGRTAwMDM3NEJFOEVERUVGNjAzM0M1QzVGQjhCQTA2RDA3OUJERUUKLToxMDZGRjAwMDNFRjZEM0Q3NzZFN0NBQzNGQTVCRkZFMEYwQTIwNDc5ODYKLToxMDcwMDAwMDU4RjFGMzgzN0RFRUE3RjI2QkVBRTc1QjdERTlFNzJEQUMKLToxMDcwMTAwMDgxRjc4NzhBMDIxMzhBMTAxRTU2RkYwODdDM0Y3RTdEMDcKLToxMDcwMjAwMDgxOEFCRkFCNTJCRjU1RjEyMEJEMzQ2RTI4OUI4Qzc4NEUKLToxMDcwMzAwMDJENjc3RUYyNEJDRTQ5OTI0RkI2NThFMEI1NjFBNThERDMKLToxMDcwNDAwMEExN0ZCMjQxNjNFNDFGNkVEOEM1RjM5MEQxOUYzQTBEODIKLToxMDcwNTAwMEU4QTU0OUQwQ0JGMjJEMUY5M0RGQTk2OUU1MjI5RUY3NjEKLToxMDcwNjAwMDE0RTFGRTI5RjkzQjM2NEI1Qjc3M0M4NzZFQkQzM0VDNzAKLToxMDcwNzAwMDMwRTVDNzJGN0RDQ0U4QkY2QTE2RkVBOUU1NkRBNkU3MEYKLToxMDcwODAwMDJCQkY5REQwRUY2OUY2NEIzNTE0MDkzRkIyOEZFNzNEMUEKLToxMDcwOTAwMDMxQjUzRkFERkIwQ0FDMUJGMzQ5ODIzN0I4OURBODM3MjcKLToxMDcwQTAwMDAwMUUxNDg3OTE3MDkwN0U0RjA5MEZENkYzREMwNUU1MjIKLToxMDcwQjAwMEFGOUUzQTM4ODRGMkU0NEU2OTVBM0VCNjBCQTZGM0RGMkYKLToxMDcwQzAwMEIzNTJBQ0MxRDFGODFDRTA0OEY5MkM1REVCRDIyODFGQkIKLToxMDcwRDAwMEVBNkREMDAzMUEyNjVFNzk4MkEzRjFGRUI4OEVENzhCQjMKLToxMDcwRTAwMDk4QjhCRkQyMTg4RjcwNkVBNTNDRjE3QTk4MDNFNkE1QzgKLToxMDcwRjAwMEQ0M0Y5MjRERTczNkExQkYxMUJCRDFBRkY5ODg4REYyRDUKLToxMDcxMDAwMDkxQzI2Q0I1OTc1NUY1OEM1NzA0MzZEQTg4MkUxQTc2RUQKLToxMDcxMTAwMDY3RjJGQ0I0QjBGRjY1M0M1NzIwRjFGMkY2ODY0MTkzNkMKLToxMDcxMjAwMDMxQUZBOTYxNzM0OTE5QjlFQjc2REJDODNFOTQ3MTU5NDcKLToxMDcxMzAwMDg5QUY5RUY5REIzQzVGQTA5OTQ1MzY2MUVBMTJFMEVCMkUKLToxMDcxNDAwMDQ0NDI3Q0I1RUUyM0JDMDJERTRFMjRDMURCODlERUYwNzYKLToxMDcxNTAwMDc2NUY5MUYwMjdGQTY0QkVEQUIwOENBQkYxRTU5QTZDRjkKLToxMDcxNjAwMEUyRTdCQUY1RDEyMTJCNzVGNDY5RjZGRkIzRjk2M0U5Q0IKLToxMDcxNzAwMERFMTM5OUZGNUM1MzI4N0Y2N0NDOTc4N0Y4M0RCREI1MzgKLToxMDcxODAwMDgyRjA2NkM2NTdDRERGMUIwOTJGRUM3NTM3REQzQjNDMUYKLToxMDcxOTAwMDY3MTA5Qjc3MzkzQzlGMjdGQzlFNzM1QUE2OTBGREZEOTQKLToxMDcxQTAwMDU0MTFERjE3QkNCMDE2NzMzRjE5N0I3MUFEOTNGOUMxNTEKLToxMDcxQjAwMEY4N0U2OUFEODdFQTdGNUNFQkE1RkFBQjZCMzUyQTVGOTkKLToxMDcxQzAwMDVCNUI0QUU1MDkzQkNGMkI5MkZDMDU4NDQwRjk3REJCMTQKLToxMDcxRDAwMDA1NUZFRDJFOTJGMTlGRUJCREU4RTdBRUY5RkI0QjE1OTUKLToxMDcxRTAwMDE2MTI3REM3QTY0RjJBMjJCQkREOTAyRjUyN0JBNTMxRjgKLToxMDcxRjAwMDFGQTRDMzI2RjJDREI2MjgzRUJDNEZBNjIxNzBBOUExN0MKLToxMDcyMDAwMDNEMkIxRDE5QUZBM0ZFMTFGOTJCMEQ5QjMzRTkxRUJCQkUKLToxMDcyMTAwMDZCQTY2NjFCREFDRkRBRENDRjUwNkYyRkQyRjg3RDZBMEYKLToxMDcyMjAwMDM1ODMwQ0NGQUZBREJCRDg1MEFGMTdCRjFGQzFCNDJBNDkKLToxMDcyMzAwMEUyMUIxOUZGMDJDRENERjFFMkUxNkQzRjU5MzkzQUZGNzIKLToxMDcyNDAwMDQ2MThGRjkzQzMzNjdBNkZDNkM3MDk3Qjk4RjZGM0UxRjkKLToxMDcyNTAwMDg3MUQzRThDRUY5REM0RjM2RjUwM0ZGOTQ3OTVGMjhCMkQKLToxMDcyNjAwMDRFREE1OEQ4MDMyMkZFQTRDMjM2NjBDOUFDOUNBRkNFMTkKLToxMDcyNzAwMDFDRTU3QzU1RjM3Nzk1RTEzRTlFRkRENDQxRjFDMUM2RjYKLToxMDcyODAwMDZEMEEwQkUzREQwQzVEMDA3OTE4RjdGQTlGMzg2OEREQjUKLToxMDcyOTAwMEYzQjdBOTJDNDhFN0FCQjQzNjhDOTM1RkZGQzg1MDFGRjcKLToxMDcyQTAwMEM2NDdFNzBDOEExNkUxNzlDM0FFNUZBNkY4RjBEQzU3NTMKLToxMDcyQjAwMDYzMDdGRkZFMjRFQ0NGMzMzMTNGNEEyOUE3NzhDNDVGMzAKLToxMDcyQzAwMEE3QjUyRUI0NjBCRTlEN0EzODE3RjlGNUFGNEZGMURGNDAKLToxMDcyRDAwMDM1NUJCQ0VBOEY5NTFFODBGMzkyRTdEQTVFQTk4MjcxNzYKLToxMDcyRTAwMDRFQjRBQTM0RUUwNzhGMzk3NkE4QzRGN0ZFN0NCQ0RGMTMKLToxMDcyRjAwMDM2QkVFRTA4RjkyOUE2MTQwNjNFNDNGOUZFRkVDMkM4QzIKLToxMDczMDAwMDA4OTIzRjZCQjg3RkJDMjc3QzYwQkQ4ODZGQTQ1NzlERjcKLToxMDczMTAwMDNDOEJFQjM3MUU3RjAzMjE1NDgwNzJBMkQxRTZBM0I4QzkKLToxMDczMjAwMEVDODlBRDM2OEExNzgyM0VBMDdDODMxM0FERDkxNjJFMjgKLToxMDczMzAwMDg3OUUyMkJBNkJCMDZBNzZGREI4MEQ1QjU1M0ZGRjdEMjQKLToxMDczNDAwMDBDQ0Q4RUYzNjU3N0FBNDEzNjFBRUIzQzNGMjJCQzU5MkYKLToxMDczNTAwMDA5RjJGODhGMTFCRkQ3QUQxQTRERTdBMkNENzk1Q0IyMTMKLToxMDczNjAwMEZDMDg3ODJBQTg4QjJCMkQ3OTlBQzc3RkQ5QTgwRUFCNTkKLToxMDczNzAwMDNFQ0Y1REZBNjc1OEIwQ0E3MDlGRDFCMjgxRjdGRTYwMDgKLToxMDczODAwMDFDOTRBN0ZDRkNFQUM1MzMzQkREMjQyNzNGQjQzQzUzRTcKLToxMDczOTAwMDc5MjM5NDFGNEMwQkJGNkIwNUJDQkNBODA2ODcwQ0MwOUYKLToxMDczQTAwMEJDMjFDQkQ2RUQwQUM1NTU4RUZGMDBFM0ZFRUYzRjYxNTEKLToxMDczQjAwMEYzMTExQjhBQkNCMTI1M0Y1RDRDRjFBOUU0RjYwMkYzNDEKLToxMDczQzAwMEYyRjg3NTM0NEZGMUUyRURDNDhDRjI0NTY2QjMzNkUxNjQKLToxMDczRDAwMDVGODhGMDNDMDM5QzA0QzBDN0IzOENDN0M1OEU1N0I4MDgKLToxMDczRTAwMDZGQzVGM0MzOERBNkYzQzZDN0M1Mzk4QkFBMDFEQzZFODIKLToxMDczRjAwMDkyRkFGQUM2MDE1QzBFMzQ1QTM4N0ZCMkJERkMxRTRBQkUKLToxMDc0MDAwMEY5N0I3MTUyOEU0Qjc5MkJFNTc1Q0QwMDlFQzcyMkU1MzUKLToxMDc0MTAwMDJDNjM2RDI0NUYxNjhBRkI5Mjk3M0RFNkUwRTc4QjM0ODAKLToxMDc0MjAwMEU2NDEzODJFRTY2ODYyMUIwNzcwQkU1RTYyN0ZFMjFFOTAKLToxMDc0MzAwMDI0RUI0NUFDOURGNERFRkJCNkM4QzJGNjEyRkM3RUM3NTkKLToxMDc0NDAwMDg2MkNGQURFRTY4QjIwMUY0N0U0RUZEMTU5NDk4RTJDQkIKLToxMDc0NTAwMDYyN0M5RUNCNUI5NTQ4NTRFN0VGOTBCRjRGQzI1MDRGODQKLToxMDc0NjAwMEU4RTQ0RTBGQkQ2MEQyMDcwQjg0RkU1QkMwNENGOTQ2Q0EKLToxMDc0NzAwMEFENDYzRDE1NDg3M0QzQkE5NkI0OEEzQ0VDRUU3OUE5NzMKLToxMDc0ODAwMEVDMkNDNkJCODI5MUU3QTZEM0JDMTU1RjI0QzEzQzE2ODkKLToxMDc0OTAwMEIxQUUyOERFOEJCQ0ZDNzE3RThFQzkzQzJGRjMzQUZBNkMKLToxMDc0QTAwMDNBQ0Y4NUJFOTkxM0YxN0VFNUVFNzE0REYzOTZGMDY2MDUKLToxMDc0QjAwMDc4QjA0QTg3MDcwOUY3ODU2MTBFQ0Y4NTdCMTRDMkQ3NUMKLToxMDc0QzAwMDlGODVCRDI1Q0YwNzlBRjFCRjg4MDVBNkEzOUM1Qjc0NTUKLToxMDc0RDAwMDE3RUMzMzRCRTJGNDIwRTk2MEYxOTMxMTNBMEZGODAxMTUKLToxMDc0RTAwMDZCNEQ3NzAxM0YyQ0RCRjZFNEFDMzFGMEZEQTIwNzVFN0IKLToxMDc0RjAwMEI0MjNCREQ3NjU0NTg3NTgzMjYxRkYxOTlFNzA0NzRENEIKLToxMDc1MDAwMDUxMDJCRDZGRDJGMzVGMTc5Qzk4RjA1QkQxNzcwMDk3NjMKLToxMDc1MTAwMDA1M0I1NUNBQTNEMEI1MTM3OTA0NjFFMjg3QTYzMEZGQjUKLToxMDc1MjAwMDNEQzFBNjk3NTU1RjBCM0M2REMyOUYzOTJBM0ZGRkY5QkQKLToxMDc1MzAwMDRBQjhGREIzRTc2REI2NkI3NjBERThEREFFMzFDQjlCOTcKLToxMDc1NDAwMDFFNzY4RDQ5OUZFMjc5MEVENDlGNURCOTNDM0ZGRDEzQjUKLToxMDc1NTAwMEFCM0YyMzhCRTRCNDQ5MEVFNzk2RDM3REFDNTIwRTJGOUMKLToxMDc1NjAwMDE0N0E1MDhFQjMwMEY1MUZENERGRERGNjhCNzRGNDY3MDgKLToxMDc1NzAwMEZDRjlBRTVGRTQ1MUJFMDZFQTlCNjE3MTdENzM0MzIzNjMKLToxMDc1ODAwMDFGRUY4NjVGQTU1MEJFRDQ1RkE3QjU4RjQwN0JCMEVFREUKLToxMDc1OTAwMEMxRTdEM0Y1RjdCRDdFNTAxMEZDMDNDQTVCQTkxRjk3NjYKLToxMDc1QTAwMEFCM0IwNkUwRUYxQTRBMzk3QkNFN0Q1QkIyNzVCQUNGQjIKLToxMDc1QjAwMEIxNEVCNzcxOUQwREI4NEVERDM5OTU0NkIxQ0U3NzM2RDcKLToxMDc1QzAwMEYzRjUxRERGQ0FENzNCQkZDNzNBQzMxNDU3QjlFMUM3QUMKLToxMDc1RDAwMDBFNUY5OEVDOEUyOEU5RjU5MzRGQUEwQ0Y3NTlERDc2RUIKLToxMDc1RTAwMDg3QzkwRTM4QzM1QUI3MjMzQzk2QUY3RUY1NEQyQkQwRDIKLToxMDc1RjAwMEM1RTIwQjAwM0U0MDA3NzU3NzNBNDhFRjJGRkUyNThGMTYKLToxMDc2MDAwMEE3QkVBRjU0RTc1MzQwRkY0MDM0RkRCQkYwN0MwOUQ4MjAKLToxMDc2MTAwMDBCNjg2RkM0RTdEMTZEMDc3QzNFNDA2RjA3RjQxMTdFQTUKLToxMDc2MjAwMDJCODQ1RjZCQzU5RUU3RTk3N0I0MTQzRkNGQzc1QzIxMUQKLToxMDc2MzAwMEVGQjVEOTZEQkFENzQ2NDMxOUMwQ0ZGOTNCMTE0RkZEMEQKLToxMDc2NDAwMENERjc3MTcxRkZFQzdGMEZGOTc4RUU2QUEyRkZBRTBCRjgKLToxMDc2NTAwMEY0RTdEODlBNTNBMzM2Q0M0M0VFN0E1MjIxM0I2OUY5MkEKLToxMDc2NjAwMEY1RDVFOUQ1MENDRkI3NzFCRjVBN0UzMUQ3NkY4QURGMTgKLToxMDc2NzAwMDRGRjkzNTBFQzA2QjJBOEM1NzU4QUNGMUZCQUYzNDBGNjUKLToxMDc2ODAwMENGMzc3RjgwRDEzRDNBNzJCRUU2RTdFODZGNzdBMjNFMDIKLToxMDc2OTAwMDc0NTk0ODFGOUFENzNGQTU5OEVCQ0RFNUFBODVFQ0VCMjYKLToxMDc2QTAwMDY1NzY2RTY3Nzc4QUZCMkI4NjhBNzkwQzJERTY3OTYwODIKLToxMDc2QjAwMEMzOEJCOTlGQTExM0VENEE4Qzc3N0ZDMzQxQkY2M0M0Q0QKLToxMDc2QzAwMEQ4NDRGMkJCNUIxOUE3M0ZBQjg0OUJDN0ZBNTEzNzdGMDUKLToxMDc2RDAwMDkzRkREQ0Q1MUZFMTM0OTdCNUQzRUYyMjRFQUY5QUE5QzUKLToxMDc2RTAwMEUxNzk4NjM3RjM5Qzc0NEYxNEZDMDk2MDNGQjM0NTNGNDIKLToxMDc2RjAwMDQ3NkNGQ0ZDQzI5QjM4MDZBQzZCQjZGMDRGQkY4OUQ3MTkKLToxMDc3MDAwMEEzQzJGODZGMTZEOEM5QUUwRDNGRUQyMEJCRTE5NjU0NjkKLToxMDc3MTAwMEVFM0Y2NDM5MTk1NkU0ODc2Qjg1OUM5QTMzQ0VFMTQ3NzYKLToxMDc3MjAwMEI5M0U3QkRDMkQwMTJDQTFCRjMwMDM3OEQ1MzlCQjM2QTcKLToxMDc3MzAwMDk2QzEzOEVCMkM1Q0RGQUZDQjYyREMyRkIwQTFBMzAyOEIKLToxMDc3NDAwMEUxNzcwOTk4Qzk5OEJGMEZBQkRGNzUzNkJCMzczQTMyN0UKLToxMDc3NTAwMDlFOUY1ODg2N0U4NkIxOEMxMzU4MTVDMUQ3NTA1RjY2QTAKLToxMDc3NjAwMEU3RUZFNzNERjQxRjMzRUVFQUNGRDgxRjMwNkIwQUY1QTEKLToxMDc3NzAwMDBDQzIwOEU5QTIzRTgzRjZCRjMzRjA3QzQxMTY5NjU2NTAKLToxMDc3ODAwMEEyQjdDQkFEMkM2Q0UxRTU2NjE3RERBQkU0MzVGQzJFODIKLToxMDc3OTAwMEVDNTU1NTJDOUEwMUVCOEIxRTMyOUVFRkI4M0E2QTg5NTQKLToxMDc3QTAwMDBFQzU3ODkxMzVCQTBGRTE2NzcxNkEzNjBGOEMxM0E4NTAKLToxMDc3QjAwMDUxQ0ExMUVFQ0JENkY3NkRCRUFCMUY3QTZBQzY1REUzMzgKLToxMDc3QzAwMEEwOEVGNzc5RTEzQ0JGQUI1MEJFRDA2QzYwN0FBNEQzRjkKLToxMDc3RDAwMEI5NTY3NjQwMkRFN0Y4NDMzQTZDQ0VEMkMyRDQ2RTE1MzYKLToxMDc3RTAwMEE3NzM3OUFFNDRFMkE1MENCQUQ3QzM3N0I2OTgxRkY0NTUKLToxMDc3RjAwMEIzMzkxREJGQjcyN0Y2QUI3Q0JGNThDNkUzQjhCREI2REIKLToxMDc4MDAwMDU0RjBFRDUyNDk3NzhGMUJGOTM1ODI3QzgzRkM4NEY2NjYKLToxMDc4MTAwMDIxQzA2REI2Mjg5M0QxRkQ4MzgyMkYxRTJDRTZGQkNDQjAKLToxMDc4MjAwMDJEQzU3MjlGRDlCN0YxOTYzQjU4OTRENkZEQjQ4M0YwMUQKLToxMDc4MzAwMDI4Qzc5RDIxQ0FGQjhCQjlERDI5RTcyMUU5NzcyMTVCQTgKLToxMDc4NDAwMDQ5RjkzQzBCODU5RkM2MDI5Mjg0RjI4MzVCN0ZDQ0ZEOTUKLToxMDc4NTAwMDQyQTZCQzIzMzA5NDI4QkY2REM5NEVGMzczOUQ5RjQ3NDkKLToxMDc4NjAwMDM1QzgyNUYyOUIyQUY2QUVGOTM4M0ZFNTlCMjkzRUE0QTAKLToxMDc4NzAwMEY3RDlGNjM2RjIwRjk4REJEOUYwRjc1MzMxRUVCNjE5OTcKLToxMDc4ODAwMEVDMkE0NUM0Q0JBMEVFRDhBQUQwRUY1RUNDRUVERjM1MTMKLToxMDc4OTAwMDFDRjUzOTQ4RUJDOTc0MkU1NEQ4REIwQjA1N0UxREUyNkMKLToxMDc4QTAwMDdFQUI4NTY4NUY2MTVDMERFRDJCODRENzM2NkU1NzVBRDEKLToxMDc4QjAwMDg1M0REQ0IwRDU2ODZGQ0NERUEwQjMzQjc5NjFCODFGRTUKLToxMDc4QzAwMEMwNjFDQTUzQjcwOUJCRTMyRDdCRDc3MDk0RkJFNkZCQkQKLToxMDc4RDAwMDAyREVCMkYwNzU4NEYzMThCRjU3MzM4N0JGQjcwQUZCRDcKLToxMDc4RTAwMDUyRDJENTEzQzUzNjQzREM0RDlFM0JBRDQzNzlDNUVGMkYKLToxMDc4RjAwMDZEMzBFNTY5QjlFOEZFOTgzQTg1REZERjI5RkQ5MDZGQzQKLToxMDc5MDAwMDg4RjIxNEQ4QTE3NDVGQ0VCMTM0OEE4MzlCRkQ5MzlEMTUKLToxMDc5MTAwMEQ1RUVCMDQ1RTdBNzlDOTM3MUMzNzQ4NDRGNURCQUREODMKLToxMDc5MjAwMDhBRTUxQkRERjc4QTc1RDBGOEM3M0MwM0M5RkVEOTU0MzgKLToxMDc5MzAwMDNENzIxQkU2MjdGREY5QTE1MzMzOUM0NTE0NEQxMUU3MTkKLToxMDc5NDAwMEE3M0U3RDAxRjNFOUFGRkMwMkQ2NDNGNUQ4MEMzRjhFOEMKLToxMDc5NTAwMEYzNkNENzVDMjc4OEVFQkYxNTdGMzZDMzBBN0FCRUYzNzcKLToxMDc5NjAwMEVFQUVFRDU4Nzc2Qjk2MDBENTZGRUYxQTgwNzcyRUJCOTEKLToxMDc5NzAwMDIzNzY1RTVGMjdGQkIzMDczMDRGQjlGMzNFNUU3RkZGOTAKLToxMDc5ODAwMDIxN0IwMEYzOUZFQUM0QjlBNUJBQjEwQUM5REY1NEMxOEIKLToxMDc5OTAwMDVGRDJDRjU0Njc3OTg2OTdFM0Y5RUZBMjlDQUI1RDlFRTcKLToxMDc5QTAwMDE2NDgyRENFQzVGQjUwNEZEMEVGMkY5NDBDRjRBNzE2RTAKLToxMDc5QjAwMDQzQkJGNDAxQzEzMzU4MkU5OUE5ODRFRDc4REVGRkU1NkQKLToxMDc5QzAwMEM4MDU0MkFGMjVGQzlEOTA1NEExQTcwQTRBMDJGNEJEMDgKLToxMDc5RDAwMEY0QTM0MzNGN0ZDN0ZFQ0ZENUNGRkYwMTZCQ0VFOTBBQUIKLToxMDc5RTAwMDAwODAwMDAwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwNjUKLToxMDc5RjAwMDAwMEJENTdEMEQ1QzU0NTVEQUY4Qjk3M0U3MEI2NjA2QkMKLToxMDdBMDAwMDQ2NDAwM0Y5NzAwNjA0QjE0MDQ3MDU0NUE1MUEwMTExMjcKLToxMDdBMTAwMDNGRDA0MUNEMkNBRDQ2MzQ0NTQzNDFBQkNEREREQzc3ODUKLToxMDdBMjAwMDA2NTEzMzZCMEJBQkI3RENCMjc2MzI3M0FERDc1QTMyM0IKLToxMDdBMzAwMDQxMkMzRjA2QjVEMjZDNkI0QzZBQTlENEM1MzJCRkIyOUIKLToxMDdBNDAwMDIyRDM1REZBQUZCQkZFQ0ZGMzlDNzM5OTM5RDc0MTZENUEKLToxMDdBNTAwMDc3REZGREZENUVGQ0Y5M0IzQ0Y3OUM3QkVFNzM5RUVGMTAKLToxMDdBNjAwMEU3MzlFNzVFMkU1REEyM0YzNzEzMTJEOTRCNDM0ODJFMEMKLToxMDdBNzAwMDIxQkZCN0I5MjI3Qjc1Mjc2NEZBQzJGNDY4NzcxNjIxNTMKLToxMDdBODAwMDUxMjk2RTgzOERDMkYzQ0EyNEFGQkUzRjIxQTRDNTk3OEUKLToxMDdBOTAwMEUxQjIxMDMyOUUxMDY3QkQ5OTkwNEJGQ0ZFNEJBQTc5NjMKLToxMDdBQTAwMEVFQjM1RjM2OEZGNTlGOTlFNzRGQUE3OUVFOTRFOEJENjQKLToxMDdBQjAwMDQzRTk3RkUyQjBDMUZENzdBNDM5QjM2MERFN0JGRThCODIKLToxMDdBQzAwMEI4NjExRTUyMzQ1QzQzMDYxMzcyQUY5MUUwQ0Y4RkQ1N0MKLToxMDdBRDAwMDVCMzM4QzM5QjRERDY0ODgyNTc2M0FFRUY1NkQyOUIzRDUKLToxMDdBRTAwMEU5M0M2NDMxQkQyOTgxOTA2RjlBM0ZEM0RCRTgzQzBCQzAKLToxMDdBRjAwMDNBNjRFMjhDMjVBNEFBNDNDMjc2QzE5NjY2N0QzMTFEMDQKLToxMDdCMDAwMDU3NDVEQkMyMTBGQzJBMzlCRTg0QjQ2OTI3NUE4MkQ3OTQKLToxMDdCMTAwMDA3RDgyOEJFRERFMUZBNkE2Q0VGNzlGREI0RDY0REM3MEYKLToxMDdCMjAwMEREQTNBOTNGRjE2QzFDQkQzQzRDNzJCQzZDQkI3QzlEQzEKLToxMDdCMzAwMDA5RkNCRUEzODQ5NEQ0Njc1RERFM0ZDNDI2NjE3RjVERUIKLToxMDdCNDAwMEJBNzMzMEFDMzM5RUNFMDFCMEFDNjFFQjU1OEZGN0YyMTcKLToxMDdCNTAwMEY5QTY0NzkyQkI1Q0I0N0ZFNjYwOEJEMTQ2RTk5RERCMUEKLToxMDdCNjAwMEUyQUVCNTUwM0M2NkFGQjUwRjk0RTkxQzAzNTIwQTlDRDcKLToxMDdCNzAwMDMwMUY5OTM1NENBMDU3NDk0RjQyMDJCMDNFNkQ3QjBGRTQKLToxMDdCODAwMDQyREIxRkI3RTc0NjEzOEFEN0Y0OThDMDdENjQwMDIxMTMKLToxMDdCOTAwMDBGRkEzMkVBOENDOTg0OEM3RDg2OEVFOTg5QjczODA5NjAKLToxMDdCQTAwMEJEQjdDNEMwNjFFRjhEQUVBMjdDMEFGRjQzNDZGODRFNUMKLToxMDdCQjAwMERCOTAzQTJGOUQ2NzFGRTA0M0U3Qjk2MzQ4NzYyNEU5REQKLToxMDdCQzAwMDQ3QTk2NzM3NjlBQ0QxRjRFNkU0MTkwRjAyMUU3NzBDQjgKLToxMDdCRDAwMEI5QjExOEFFOEYzMDU4MzI2NjIwN0QwOUNBODczM0Q5QzMKLToxMDdCRTAwMDM1QzU5NkNCQzYxM0JBMEVCN0RFREZGRDU2QkEwRUY3MTMKLToxMDdCRjAwMEZCQjJDMzRCRDdFMUVFNjc3MkZCQzJEMDZEMzJBN0MzQjUKLToxMDdDMDAwMDgzMzYyQkNBRDEzRTBEQzU3MzYwMTAwRkU1Rjk4NDU4MzkKLToxMDdDMTAwMEVGMEJEMEY5OEUyRjREMThCMDhBQ0VGN0JCRTQxMUJGMTEKLToxMDdDMjAwMDgyRTcyOUNGRkY1REIyN0I0RUU4RjMyOTQ2RkRFMEZBRkIKLToxMDdDMzAwMEI1RTIzMThCRTNGMTJCRTAxQjlEQzc5NTRGRTU4Q0QzNkIKLToxMDdDNDAwMEZBMTJGRDNGQjFDODI0QzA5M0M3QzUxMjY3NjYxMDlFRTMKLToxMDdDNTAwMDMyMzk1MTgwQTc0RTRGMTNDNkRGM0VFQjA2QTFCRkQ0ODkKLToxMDdDNjAwMDEwQzhBOTM2MDdFNTVCOEQ4RkQyNTI0NjIxNUU1NTk2MjYKLToxMDdDNzAwMDhENTE4NEEyNzg2NEZCODU0RkE3NTEzREY5N0VCREVDMDAKLToxMDdDODAwMDkwMjhBRTczNzdCQ0ZDRTk3MDNBRUExQzVENzAyQ0E1QjUKLToxMDdDOTAwMERCMzkyNzA1RTg3QUNGNkQ5MTdENUUzQkM4ODc1MzVCNjIKLToxMDdDQTAwMERBODM5MDBBOTg4QThFOUZCRkZGNERGRDA4RkE2QjQ1RDQKLToxMDdDQjAwMEY1OUM3MUMwQzdCOTNFREQ5NzZEMjE3ODVFMjAxN0Y1NDAKLToxMDdDQzAwMDI0OTVFQUMzNDZGMTdBMTU3OUY0MDdCOTFGNDA3RUJEQzEKLToxMDdDRDAwMDJCOUJDRTUzQUZFQUFGMUU3NTkyNDRDMTM4RUQ5NzZEMjIKLToxMDdDRTAwMENBM0FFOUYzMTcxRkI2M0ZCNjM3NjRERENGRDkyQzcxMTYKLToxMDdDRjAwMDI3NkVBMEJGMEMyNDAzMkZDOUYwQkNCM0VGRDIxNTkyOUUKLToxMDdEMDAwMEMyQTY2NkU0NTNFRDdFRDkwMTIyNUE5QjJDMTE4OUFFOUUKLToxMDdEMTAwMDczRDQxNjgzMkY4MkFBRDZCN0RCOEVFOTZEOTQ1RTdGNkIKLToxMDdEMjAwMEY1RDgxRURCQUIwM0ZEQUYyMTI0MTZFRTNCQTY2RkEzRjcKLToxMDdEMzAwMEQ3ODdEQjZDNDhBNzA1REI3RkQwMTNDQUY3NTFEQjE3NjkKLToxMDdENDAwMEEyNUUxNzUzM0IxNjRERTUyN0QwNENCMkI3RDBGOUJEMTQKLToxMDdENTAwMDc2OEJFMzY1M0FGRjNEMkI0NzEzMzI4ODkwRTg4RTY5QjYKLToxMDdENjAwMEQ4NTZENjhEQzZGOUU2Nzc0QzQyNzg0MTg3MDlFMTdEMzEKLToxMDdENzAwMDkxODE2MjQyRjFEOEQ3RDg4REQ0NTIzQzNFOTJGRDE5MDAKLToxMDdEODAwMENGQzEzQzA2MEJEQTg5RDJDNDNCOTZDMkJBRjc0NTdBMUEKLToxMDdEOTAwMEIzRUVBNUNGMkJGREMzQTgxMkEwRUI4MjJEOTIxM0U0NjYKLToxMDdEQTAwMEFDNTQyNkZCQTQxOEMwMzcwMkU3MkI5NTNGQ0U1OTQ4QTgKLToxMDdEQjAwMEFGOEYyREI0NzgzNUQxRDg0RjA4RUQ5NzA3NUI1NjExQUEKLToxMDdEQzAwMDBBQ0I3QTZBMkZDMkM4RTc3QkRDQkVFOERBMThERTIzNkEKLToxMDdERDAwMDNCQ0E3MDNFQTVGRjhGQjY1NDk0NUIwNUQ2NzU1RkFGNjYKLToxMDdERTAwMDJEMzcwN0Q3QTM2QjkzQjAxREQzNzEwM0I2NTU1QkNBNkMKLToxMDdERjAwMEI0MzZGQTlDRjczMzVGOEEwMzNBRDFGMTY2Nzc1OEJCMDEKLToxMDdFMDAwMDNDMjQ5QTg0QjE1RjRBNkJFMEY2NzgxQUQ4NjMzQUVGNjMKLToxMDdFMTAwMERFNTRFNzU3QTA4N0UzOTdCNDY5OEQ2MDRGQ0Q0NkVCRkEKLToxMDdFMjAwMENCNTQwRUM2RTcwREIwQ0QwRTU5OTdCQ0ZCMzY2MkEzRkUKLToxMDdFMzAwMDcyNjQ4ODZCRDczOUU5RkNEMzY4MUI2QUJGRUZFQUMyNkEKLToxMDdFNDAwMERGOUNFRUI0REYzNUI4NUVDNTJGOTFDQzI1ODQ1MDM5NjgKLToxMDdFNTAwMEJGRDNDQUYwNTZGNEVBNTMzRTVFQjkzRjIwMzFGREYwN0QKLToxMDdFNjAwMDM2MTg3QzJGRDNERjhGQTRCQUZGMDZGODA2NDY5MEE5RjgKLToxMDdFNzAwMDlCRDE5RTA2NTJDQTJDRkYzRUZDMjk3RjhEQzBGRjI4NTUKLToxMDdFODAwMDZEMUI4OTAxN0Y2NjU3RjA2NzdBN0QzNUZDQkZCMzMxODIKLToxMDdFOTAwMEZGRkE5MTRDMTY4MzVDN0M3NEYzQ0QwMTI3QzVBQkY5RDYKLToxMDdFQTAwMEMxNDE4M0MwM0YyOENGRUI2NkQ3RTMzODYyNkRCRjA4N0UKLToxMDdFQjAwMEYyNUFCNUQzNjQ1QjQ1RDc1NzRBNzkwMzcwRkIwRTgzRkEKLToxMDdFQzAwMDZGOUQxREFGMTMyOTBFNUFDMzNBODlGNjU3NDVCNTY3MDIKLToxMDdFRDAwMDgwRkYyOURDMTVFMTA3Qjk2RERFMTVBMTA1M0ZGMjRFRTMKLToxMDdFRTAwMEJBQkI5QkJEM0I1Q0VGNTMyNDUxRjk3NjZFMzc2ODQxQkEKLToxMDdFRjAwMDBFN0FEODlDMzE3MEJEMkI3Q0FGNjZDNzE0N0Q1NENCRjUKLToxMDdGMDAwMDk5N0IyNUQzM0YzN0Q3QzMxOTVDNkVDQkI5MUVDRUQwMzIKLToxMDdGMTAwMDNBQTIxRkEwNzhERkY1ODE0Q0MwOEU5NzJGOTFCMkI3OUYKLToxMDdGMjAwMEU0ODA0REIzMzhEMjQzRjQ1MEQxMzcxREM4RTUyMDkwREEKLToxMDdGMzAwMDRGMjY5Nzk1MUREREI4N0VEQkY5QkM0QzBGNEFBOTgzMEYKLToxMDdGNDAwMDA2RkE5NERFRDBDRDA3RkFCREEwMjMxNkM3MjlGQUFBRjcKLToxMDdGNTAwMEU4Njk2MjlBN0IwNEFDQkJCNDk2RUEzNzdEOEU3QjY5OTQKLToxMDdGNjAwMDQyMEVFODRCNTA0RUY0NTY5MDI3MkEyN0YxQjM0M0U0RDMKLToxMDdGNzAwMEEwQjZGOTI3MkRDODg5MkU1RjQyMzkzMUQwQjYzMDQ0REEKLToxMDdGODAwMDhFNUM5RDcxOEFCNUI4MDdDNTYzRkMzMkJCNjYxNTA5NjYKLToxMDdGOTAwMEY2MTdEQjE5RkZBRjU1REUwNzcxRjkyQTM3RkJEMzM1MkEKLToxMDdGQTAwMDc0M0U1RDc1ODQ2MzI5QzVFQjVDOUMwREVERDhBMjg3OUEKLToxMDdGQjAwMDI5NDA0OUIwNDhFNzJBODQzODYzRDE2RjI1MDdEODVGNDQKLToxMDdGQzAwMDg4M0ZDMEZFMEM2RUFERDZCQjQzRjBCQkFEQTMxRkIxNjYKLToxMDdGRDAwMDUxM0E0REVBRTg4REVEODAxNEY3NjQ3QjJFRjA2NzBBODQKLToxMDdGRTAwMEE3NjMzRjZDODkyRDRGMDNGOERDNjc2NDdFRTY3Q0Y1NjAKLToxMDdGRjAwMDQzNzdDMkYzQ0VGQjBDMEU3ODFFMjE3OThDREYxQ0RGOTkKLToxMDgwMDAwMDVDQTdFM0JBMDcwMEJGMEY3NEU0NDUzQUZFNTQ4NDVCRjMKLToxMDgwMTAwMDA2QkQzQzk1NENBQzRGNTIxNDY3QUVBMTdDQTZGMzlFQjYKLToxMDgwMjAwMEQyMTFBRjk1RjI3MzE2ODVERDAwNzcyM0NFNkUwMzQxMzIKLToxMDgwMzAwMEVGRTgzQTQzRkNDQTA1NkQ1RDBBNDlBM0ZDNURGNEE3NkQKLToxMDgwNDAwMEEzNUE2QTBBRTc2NjA0RkFGOUU5NzNBNzhGNjBGRUZGOEMKLToxMDgwNTAwMEVDN0ExREZBRkZDQUU2OEYwNzZCNjhGRjE5QkJGMzNBOEIKLToxMDgwNjAwMDQyNkRFRkU4OUVFRTA1QzBENzc5MTM3REFGRUIyODdDMUIKLToxMDgwNzAwMENGNkZERThDMUE2QTBCRDJCMzVFRUI0RkQ3RDJGQkVCMUQKLToxMDgwODAwMDI5MURCRDE0QUZGQTQ3RTUxMjFGOEI3QjRDNjVEOTU3RUMKLToxMDgwOTAwMDk3RUI3OTFENjk0ODFGQzVERjI4RjY3QkFCMjc5RTJFMUQKLToxMDgwQTAwMDIyNjhDN0FGRTY4NzE0Rjk5RUNGRjU2MDNFRTgwMTA5NjQKLToxMDgwQjAwMEY1Mzc2NUFFMTEyMDg3OTk5MjIzOUQ4NEZBMUJBNjBGOTAKLToxMDgwQzAwMDhBOURBNkYyOEU3QTUzOUE5NkVDQTgyNTQxQkJBREY2MEUKLToxMDgwRDAwMDQ3N0JFNEZBMjc4N0QxRjUyRTRENzVGQjgwREYwNUZGM0UKLToxMDgwRTAwMEYzQjczNzNGQTc1RDk1OUI1RjI5MDIzRThEQjg0MTIyQ0MKLToxMDgwRjAwMEIyNzQyRDc2RjIyNzFEREFDOTI1NjUwNEVEMjQ2RDQzOEYKLToxMDgxMDAwMEVEQTRBRThCMzhGRDY1RkJDRkIzRjM0RkYyRjEzNEJFNzcKLToxMDgxMTAwMEM1QjgxMUVDNzhFODdDNDc1MjBCQjZDMjNBQjZEQjI1RkQKLToxMDgxMjAwMDM2REZCRjA5NkZCNTdEREZERUE5QUZENzY2REY1RkU1NUMKLToxMDgxMzAwMDc4NUZDREJFN0ZDNEVEQkJEQTlFMTMzQTFGRDhGM0VGNTQKLToxMDgxNDAwMDc3RjRGNTgxQkQzRjRBQThGRDA3RkZCNkRENjQ3Qjk5NTIKLToxMDgxNTAwMERCN0JGNDA3OTFEMUJFMkJEOUZCQkFGNDk5MUY3NTYxNzMKLToxMDgxNjAwMEVGMDM0MEI3N0ZENURFMkJGMkE1RDYwN0I1MUVBOEU1RjUKLToxMDgxNzAwMDdFRUMyMzM0RkUwMjNFNkQ5NTA4RDhENzYwQkM0NTUwOTYKLToxMDgxODAwMDhFRjdBNTMyMzk1NkY0MjYyNEZFNDIzRjRGRjVDMTk3QUIKLToxMDgxOTAwMDZFQkY1QzJGN0ZBQ0ZFNTM4RTBERjJDRDFDQ0IwMDIyNDgKLToxMDgxQTAwMDA1RTU1REQxMTc0NURFRDU3RTY0NEVBQTVCNEFDRDBENEYKLToxMDgxQjAwMEVBNDlFNTY2QjUxRkU4NEE5RUI2RTkyMDdGRDU1NUZFMzcKLToxMDgxQzAwMEMwRkMwMDZENDNGRDQwNTdGMThFM0VGNUU3RTlDMTc5RjMKLToxMDgxRDAwMEZCQjVDNTBCMDlBOTdBOUNGNzdGNTE5RTEyODA0RTYxQjEKLToxMDgxRTAwMEU0QTk2N0VBQkYyMDRGNTdFMDIzRkExOTQ1Q0VDNjFFMUYKLToxMDgxRjAwMDYwRjI0MUQyNThCQzRGRTUwNUYxREVBNzRGRjZENURBNjMKLToxMDgyMDAwMEMxRUUzMTdCMzhGNjEyQTkwNjdBREVDNUVCMDk4QUJDQ0QKLToxMDgyMTAwMDE2QTVCOTZGMEFFNTMzQzRGNzEwQjc1RjZCNUMzODJENEMKLToxMDgyMjAwMEFFOUEzOEU5RjVCQjY4MUI2QTM3MENDMEJGMzBGMTdERTgKLToxMDgyMzAwMDYxRUFDRkYzRjMwMzUyQUY4RENGOTMzOTlGRkY4RDcxNzYKLToxMDgyNDAwMEUxNURBOTYxRUMwNDcxMzJGRjFGRTQ4QjYxMTJDOENEQkUKLToxMDgyNTAwMDhGN0UyRDAxRkRFQThBQUZCQTM1OENFRTBBQkNEQ0FGMDkKLToxMDgyNjAwMDU1RkM2QjJDRjg1NzJBMkZFRUQ0N0YyMURFMkMyREFDMzkKLToxMDgyNzAwMDNGNkZBNEExREY3RkFEMUI1RUE2MUQ0QUYzRjQzQ0MyOTUKLToxMDgyODAwMEVCMUZGOUFCOUQ1QUIwMkZGNEY3NjEzODIzRDY0NzNFNjgKLToxMDgyOTAwMDkyMzlFQ0JERjE2MDExQzU2M0VDOTM5REZENUVFODFGNjIKLToxMDgyQTAwMDk5MUZERDU5NEY4MTU0NDIxOUZGRUI3NUMzMEUzRThBNjkKLToxMDgyQjAwMDc4RDczMTNFQkFEQkI0QUVFQzEwMzg4N0MyOTYxMDM4QUUKLToxMDgyQzAwMDRGMDVBRjY1RTNDMThGNTg3MTFFMUZCM0Y3NzQ3RTY5MDgKLToxMDgyRDAwMDIwQzBDQTdDNUMwRjQ4N0I3MTM3ODgxN0I3NDg1NkE4MDYKLToxMDgyRTAwMDg3REM5RUZGQkQxRUY4NTM1QUQ4RjY2RTIyNURFRkVBN0EKLToxMDgyRjAwMDc1NDU2NUU2QkVGNDNBRDg0MThBRUY4QkVCQzZBREY2MUMKLToxMDgzMDAwMDZBRjlGRDNEQjAzRTg2M0Y4NjdBQzkyOTUzM0U1NUU2NUYKLToxMDgzMTAwMDQ5QkU1NEZCRTU3NDdDMzE1NUY0NjdGMEEzMTVFRjI3OTMKLToxMDgzMjAwMEZBOUM5Rjc3M0ZFODJGREU5RjhBRjdGQjBEM0ZFM0Y5MkEKLToxMDgzMzAwMEI3RTYxM0E3MkY4QzlERkM4MzYyMjcyRjUyNTg5OTlGNzUKLToxMDgzNDAwMEQyNkU1MjNEQ0JDM0Q1RTNCN0YyRjEwMThENjYzRUExQUIKLToxMDgzNTAwMEY0REFCNUNFQkQxQUVBNjUyMzA5OTM4RkU2NzU3Nzk1RjEKLToxMDgzNjAwMDc5OTkxQzEyQTc2QUJENTdDMkY3RTU1NDMxQkY4MzFGMjQKLToxMDgzNzAwMDlCNzhCRkZGNEFGNEZBOUZDQkU4QzVFNUEzNDI5NDk3RTgKLToxMDgzODAwMDY4QUQ2QkVGOEYxNDhGRTgzOEM5MEE3MUVEMDI1N0M0REUKLToxMDgzOTAwMEEzMTBCRjk3MTYyQUYyM0RBRkNDOTk0NEQ3MTc0MTg0NUEKLToxMDgzQTAwMEZBNUY1MEJFRUYyOTJCQTI3NDU5NDA5NEYxRjM1NzgzMjIKLToxMDgzQjAwMDVGNzI2OTNBQzczMzc5REYyRTc1REU5RjQ5RTUwNzRCNTcKLToxMDgzQzAwMDcxRjRGRTJGRDY1NUFFRjY2NjIxM0ZCMDFGNjFFRDE1NTQKLToxMDgzRDAwMEU0QkQ1RTA1RTdBQkY0ODNDQjM3RUEyN0Q4NkQ0QTlGNEYKLToxMDgzRTAwMEY0MzA3NkEzODNEM0U3NUI4OTRDMDVCQjE3Mjg2MEYxOTMKLToxMDgzRjAwMDVFMjA5NUI1RjE2OTJDQkUyMzY5NkM5QzMxOERGMzM5RjMKLToxMDg0MDAwMDMyODQwRTQ5NDEzRUQzMUYzRkU0MTEyMUVCNDYzQURENTEKLToxMDg0MTAwMDE2QTdBQ0ZCRDFCMjcxNzQ1RDgxMTg5MjJENTEzOTg5QzgKLToxMDg0MjAwMDQ5NUJCOTdBNTk4ODlDQzRBNTNEOEE3MjEyOUM2RkQ1NjQKLToxMDg0MzAwMDQxQTBFMzZEOUM0RUYxNjk4RjFDRTQ3MjI0ODFERUNENzYKLToxMDg0NDAwMDQ3ODFBMDcyQjA0NUYyQ0E3NDlERjM0MTBFQzJBQ0YzRUQKLToxMDg0NTAwMENCQ0JFNUM4QUJCQURGQTlCQkMyRkRBNzJFQkZERkE5NTYKLToxMDg0NjAwMEJBOUZFOEUyN0VDRUZEOUM0RkUzNTQ3QzJDNTFGMUIxRTMKLToxMDg0NzAwMDQ4MDU0RjU3NjA5RjYwQ0YxNDNCNTdERUI0N0E3OThGMjEKLToxMDg0ODAwMDM4QTgzNzRBRTAyNkMwNUVFQkE1MDE4NDY0QkZGNERGNUMKLToxMDg0OTAwMDY1RTYwNDkwNTc5QjJFOTFEQUZDMDEyRjNENzNEMDQ4N0UKLToxMDg0QTAwMEVENTkxOUQ4MzM5NERGMzVBQjlEQkRBOTdFODNCRTIzMkEKLToxMDg0QjAwMEZDREIzMjY3N0Y5MDlGRUFFNUYxNzRGQzkwOTc5RTVENEMKLToxMDg0QzAwMDZEQTQ0MzZGNUZCNjVBMDczMUNERjA5N0Q2QUVENkQyQzIKLToxMDg0RDAwMDc5NkZDQkY5QzNCQjMwOUZCNkU2ODU4M0UzQTQyQkM4ODUKLToxMDg0RTAwMDZCOUQ2QTFENkI1NUIwNTczNUZFQTlBQkQ4Rjc2NUFBRDEKLToxMDg0RjAwMEZCOTdBOEZBMUY1NUMxNkI1NEYwNEFGMUZFMTlCMzI0M0IKLToxMDg1MDAwMEQ0OTMxOTk0N0Y0MEI4QUJFOTRENTk1QTY3OUVEMUU5OEQKLToxMDg1MTAwMENGMjQzM0M2NDk4MkRDOEZBRDY1RjBCNDk3MzY5NUFENzQKLToxMDg1MjAwMDM0ODdDMDY5QUY5NzgxQkUyQjcyQUMyM0VDNjc1QTFDQUQKLToxMDg1MzAwMEYxODJGRkQwNzU2MUNGNDZBNzc1MjE0Nzk5NkE3RkM3NDEKLToxMDg1NDAwMEZBRkYwQ0JGMjZFMDNFOEJFMDk3RjdDODIyREMyQzJCMEQKLToxMDg1NTAwMDc4NkYzRjc4NUYxNjVDNTRFMEI3Q0JBMDdFRDFFNUJFNjQKLToxMDg1NjAwMDA3RDk1NjA2RkIxRTYzMUZFN0IwQjdBOTBDRTIzNDY1QjYKLToxMDg1NzAwMDlEQ0FGOEUyQkY1RjkyRTE3OTBCRDM5QUNBRDZDM0JFMTcKLToxMDg1ODAwMDRBODEzRjFERUFGNUQzNjM1ODRCRkQ4QzBDN0VBQzhBQzMKLToxMDg1OTAwMEQ3M0I4QTc3QzgyRUYwMzNEMzIzRkRFOThCQjI0MkQ2N0UKLToxMDg1QTAwMDQ5RUEzMzYwOURDRDBGQ0FDODFGNkYyRENCNDdDQTg5REEKLToxMDg1QjAwMDQzMEZGNThBRTZFOEU4QzUxQkU4RjgzRDBGQ0E4QkMxMTIKLToxMDg1QzAwMEFGMUQ1RDFDREIwM0YyODlERDY5MkNERkRCMTNEREFCNDYKLToxMDg1RDAwMEM3REQxNDZFMzZEREE1ODc3QTZERjM0MzIzQjFERDJEM0IKLToxMDg1RTAwMDNCNTdCNDUzMzk3RUZDQTVGN0QwQ0YzNzlCQTI5MTNFQzEKLToxMDg1RjAwMDhGQTRFRDI5QUJBMTdBRjE1ODlBMERFRjc3Qzc1ODdCN0MKLToxMDg2MDAwMDM0NDFCQ0JBNEE0N0EwNUU0RDg4RTMwNTk0OUJERjE4MEQKLToxMDg2MTAwMDA2QUNBMjc4Q0NBOEI5MDFGNzhGQ0FGRkJCQUMzODgxRjEKLToxMDg2MjAwMDhFMkI1RkFFQzM3RDA1RkFEMzBGRjA3NkFGMUFBOTg3MDQKLToxMDg2MzAwMEZFNTlDQjc4RUIxRDg1RURBRTdGQkM3OUEwMUYxRERGMDkKLToxMDg2NDAwMEZFQjBFQzU4NDcwN0VGRUM0ODhEMkFBNzc4N0QxNUMxOUUKLToxMDg2NTAwMEVDRjA5NzY3N0I0NzAxOUU3RDdBQkI5RjREQTM3QzlEODUKLToxMDg2NjAwMDExNjU4OTk0QzA3OTU4NkQ1MTEzRTlCQ0JERDM5RENGNzQKLToxMDg2NzAwMEE1RTUwNkM3RUZGQTg3OENGQjYwNkY5RjJERUYwMUZDMjUKLToxMDg2ODAwMDdCOTlEQkVGOUQxREU1M0RDQTQzRkNGREVDNkZCNTQ4RDIKLToxMDg2OTAwMEU3NUQ3QURCN0QxMDVGRUU4QTRDOTZCQ0E4QzdGNUIxMkEKLToxMDg2QTAwMDUwQjc5REM1RTM2QjJBMkY4QkRGMENFM0Y3OUY0ODkzRjAKLToxMDg2QjAwMDcxREVFMzg2QzVFNDJCMkFDNENEOEY3NENGMDczQzk1QzkKLToxMDg2QzAwMEZCOTRGRDM3NUQ5MjZENjA2ODFDQkRBRTU3QzExQkIwNTkKLToxMDg2RDAwMDhFQTA5QzFEM0QwODcyODM3MTM0ODVCN0JGRjRGOTZBODIKLToxMDg2RTAwMDJGRjhDMjNEMzRGRTA3M0NFMjlDQzVFMDA3Qzg5MjU4MTMKLToxMDg2RjAwMEI2MEYxQTVGOUYxMTVBOEYwOEM2QTk0QkI5M0Q2MEUzQTgKLToxMDg3MDAwMDhFNzgyRDk4QjcxRUQ5MTRFMTgzN0NFNjg4RjcwQjRCNDEKLToxMDg3MTAwMDY4RkQ1REQxOTMzOTUxMTYyRjM4RTM5MzE2OEIxNkU4MTcKLToxMDg3MjAwMDdBNTRFQjM5RjE0QkQ4Mzc3QzVFODc3Njc0RjZGM0RERkIKLToxMDg3MzAwMDk3QjQ4MzNEQTBGQzg0N0E5MEZBQjkzRDdBRUI3MDlFQTEKLToxMDg3NDAwMEFFRjcwN0JGMTFGNTg0N0M1M0U2MzQ3N0FEMjc5RkJFQTMKLToxMDg3NTAwMDc0QTY2Q0JEQjk2QjNEOTlDM0UzRjZFMkU3NzUyRTkwNDQKLToxMDg3NjAwMEYzMzlCOTE2MkRFQ0QzMTUzQ0ZGQ0VDQjIwOEY3MzE2MDEKLToxMDg3NzAwMDQ2MEMzNDUwQzRFNzNDNkY0MEZFQjY1OTJDNUUyQkVDREYKLToxMDg3ODAwMDIzNDY1OUI0REQ2OEZCMEQ5Nzg3QjY5QTA4Q0M1M0U0QUQKLToxMDg3OTAwMDFFN0FCNDdCRjI4QTVDMUJEMEE3NTAyNjVBMjNGNTJCOTUKLToxMDg3QTAwMDcyOTRDM0U2NjJGMDMyQTgxQjJFQjdFNEQ5ODBCRkIxNDEKLToxMDg3QjAwMEJEOTkzRTc0RjY0NzRGMUQyM0Y1MEJFRTlCOUQ1RUZDNjUKLToxMDg3QzAwMEU0RDM0MzI4N0U2Nzg4NkZDQTEwRkJCRkJFOEY1NjQ1MkYKLToxMDg3RDAwMDVDRDE1MDdGRkNERkRBNDdEM0Y2QjZDNDlEQTBBOTc4MDAKLToxMDg3RTAwMDcwMUYyRDJCRkE1NjEwQkZDNTMyRTIyRDJGOERGMDAxRDAKLToxMDg3RjAwMDNERTUxNEU2Mjc0NjExMDlGN0QxODg5NUFFM0YzQkI4MTEKLToxMDg4MDAwMDhGMjZGRjZBMTBEMkU3Qjg4N0NBNTUxRjRBOTcyODIzRDgKLToxMDg4MTAwMDhFOTc3RjI1RkIwQ0Y0Qjk4NUIxQUNERTJBM0Y1RDQ2MEYKLToxMDg4MjAwMDYwNUY4REQyRDU2QkE1RjBBOEI4NkFEQzVGRjM4MjlEM0UKLToxMDg4MzAwMDAxRkQ5Njg4QUIxRUY1REY5MTAyNzlGMkVDRTcyMzkwRkIKLToxMDg4NDAwMDhGNzM1RTk4RkJFOTZGNzM4MDZGQTU3MUExRkFENDhCNkIKLToxMDg4NTAwMENCMUY5RDhGMTg2MzgyRjM5Q0FDRjk3NTBBRTA1M0Y4MjcKLToxMDg4NjAwMDNCOUE1RjQyREUyOUJCOUZCRTBERURBNjA5RjdEQjg4NzAKLToxMDg4NzAwMEI1RUQzNzQzNDA1RTZBNEMwM0EwNEUzRUU3Rjk4NDk0NjEKLToxMDg4ODAwMEQ0QUNFMEZENzM5NjNFOThDMUVFQTc3OTZCMTREOEFERDkKLToxMDg4OTAwMDA4NUM0RkU1MTYwM0NBQ0I4Qzg3NjUyN0ZBQzk2NDNEOEYKLToxMDg4QTAwMEZBQzkyRjk3NDUyMDVDOTk5NDg3RkEzNjQzQzNGNkRGQkYKLToxMDg4QjAwMDY4NEMxODhGRjY5RDkxOUM1NDlBODlGMzREMzNEOEZCRTAKLToxMDg4QzAwMDQ3MDMzMkUzOEY5N0YzNEQwRkZDMTlENjNCMTY5RjdGN0EKLToxMDg4RDAwMDE3RDA5OEZBQUZEQjdCNzNCQTY4OTgxQzkxOUQxMkVFQTMKLToxMDg4RTAwMDM3MTE1MjZEMDMzQjMwNUQyM0ExQkQ1M0VCRTVEOERFNUMKLToxMDg4RjAwMDZDOUY2RjQ2OEFFMzRFQjg2RkZFNjMwNkM3NTIzQkMzNTgKLToxMDg5MDAwMDQxNTZGMEExNzlEMzdDNEQ2MDM2RUM0MzkyNDYwM0Q2QjQKLToxMDg5MTAwMDM3QUFFODNBMjJBMkQ4Qjk4N0NEMTRGRjJBMkREMUVBODYKLToxMDg5MjAwMEExM0U2NTYzNzY0REMxQTdDQTU2MzYwQUU0OTVGNkI3RUYKLToxMDg5MzAwMDZBNjlGRjdDMEJCM0NCRjNCQkIxQkEwRkIxMTg3RDJGQzMKLToxMDg5NDAwMDg3M0UwRjcwNEU2M0Y3RDlBMjQwREY4NkEyQkM4MEZFM0YKLToxMDg5NTAwMDZCNjhGRkY3ODRGNTE3NDZFNUQ5REFCMjcwRkY3RTI1MUMKLToxMDg5NjAwMEQ0NEIwMDlGQkVGRDQyOUU0QkUxODQ3RTIwOEYwQkI1MTEKLToxMDg5NzAwMEE5MTZFMDQzRUM5NEE5RjBCQ0Q3NjRCNDRGNTRBOTFFRTcKLToxMDg5ODAwMENCODMzOEYwMzU3OTEwRTRCMzMzMUVERTUzQkMwNkUwRjgKLToxMDg5OTAwMDM3MDY1ODAxODUxOUFGMUY0MjNGNzUwRjk3QjMzNjg4QzgKLToxMDg5QTAwMEZGQzE2RjUxRjgwRERBREVEQjlCRDkwN0I3Q0NFQTM5OEUKLToxMDg5QjAwMEY3RjY5Njg0RkQ1MEE1N0ZGRUMzM0FFNEM3RkNFNTRDNkMKLToxMDg5QzAwMDFFRTZEN0ZDMDlFNzlENkYwOUY0MDA3RUNDNkZEMDBENDEKLToxMDg5RDAwMDA2Qjk1RUMyRUQ0NTc5NEQ3MjdFMkI5NThGNzI1REI0RkUKLToxMDg5RTAwMDU1QTI5NzJBQkRBNTdBODAyQkVCMjQ4NDk1RTdDRDdGRUQKLToxMDg5RjAwMEY4OTMxRTlBMkMzNjFGQjQwNjJFNDdDMTc5QkJBNzgwNjgKLToxMDhBMDAwMDVGRkI2NjUzNkNDQThDMTBCRTdGQjM2QzZCMTRFQzZCNEYKLToxMDhBMTAwMDdGMTVFMTRGQjc0MjNENjY2MTg0NjMxREVBMjlFM0M3RDQKLToxMDhBMjAwMDM3Q0JEMkQ3NDFCRDY2OTYzNTYwODFGREYwNTlGN0E1QTkKLToxMDhBMzAwMEM1ODBCRjNCNkFGNUVCQTFGRjY4QkQ1RDAzQjBEMzZBOUIKLToxMDhBNDAwMENEMDdEOEE5RUQ4RkYwMzdGQzlDMEFGRTUwM0UyRDkwNDMKLToxMDhBNTAwMDk4REM1NDZFREFBMzRGQTVDRjdCOTFEM0U3REJENzBFMUEKLToxMDhBNjAwMDY1NDBERDYwN0U0QTIwMDNGQzMwOTVBQjhDNDRFMENCNTIKLToxMDhBNzAwMEFCMTJDNjBCMEIzNkM5Q0U4ODdFNDFCOTVBMDA3MjQ1N0YKLToxMDhBODAwMEY1N0YxRTk3QUIwNTVCQjYzRTAwN0FCQTAwRTQ2OUUwNUQKLToxMDhBOTAwMEU1NzI0OUYzQ0JCRDc4N0RGMzhCQzU4NEREQkYxN0U0NjgKLToxMDhBQTAwMDRFRjFGQjE0NUVBNjgzRkE5QTlFQzNGNDM5MDBBRkUzM0QKLToxMDhBQjAwMEY0QTdGRDQ1QUNERjlCODVGRTg0QjRFOTIxMkVBRTkyODAKLToxMDhBQzAwMDU5QkM0MEY1MjkxRUUyODlBQTI2OURCNzJEQzQzRTJFMjkKLToxMDhBRDAwMDgwRkVBQzYwN0Y1NzcyQjNBNzM3REYyRkFCMzFBMDVGNEEKLToxMDhBRTAwMERBQzNGNUFGRURFMTg2Mjg5MDhCNkY1RkRCRjNFRTMwRjQKLToxMDhBRjAwMEM4QjMzNjRCNTZCMEZCOTdFOTIxQTc1QjE1RDAyOTBBQkUKLToxMDhCMDAwMEQ3ODlGMTUxMTVEMDI1MkE0OEE3NEU3REUzNzI1MTQ1RUEKLToxMDhCMTAwMDE4MUQxNEJBNTQ2OTM5OUQ5NDdFN0VGRjVFNEU4NzRBQjMKLToxMDhCMjAwMEMyRTlCQUE1MEZEMzc3QUVERjU0NjJEMDhGMjhFQjczQkEKLToxMDhCMzAwMEM3ODhFNzA3MkVGMEY1N0RDQ0RCNEEyQTM3OEUyQzk0QzgKLToxMDhCNDAwMDJGQTc3RTMwQ0ZGRjY5RDdCNzZGQkM4OEY1MjM4NTlGRUQKLToxMDhCNTAwMDBBREU5Njc0OUI2MkE3OURERDYyODI3QzZFRDM5MDhBNEEKLToxMDhCNjAwMDcwRjVFQTUzOUM3RTNBMzNCMzJCQzc2QTEyRUY1QzRDMjQKLToxMDhCNzAwMEU5Mzc2RjkzRUM0MEUyNDFFRTE1RjI1QzgzQTZDRDgyQkIKLToxMDhCODAwMEYxRTlBRjY0MkJBQ0FCRjA3RkNBQzZDMEJBMTVCOUQzNUMKLToxMDhCOTAwMDZEOTRCNDREQjA0RjQ4QkEyMUZEMTVGQzBBQUY3MzhERUEKLToxMDhCQTAwMEU5QzZFNENFMEZGODI4NzgxRTkzRkNDODJGRUYxQjkyN0QKLToxMDhCQjAwMDk1QzVCQjZEN0FBODIzMkE3QUFBQzZGNzAyQzc1NzhFMzUKLToxMDhCQzAwMDkyODY0OUZEMDExRjg3MERGNDlCNTAzRjg4Rjg5ODVCMDIKLToxMDhCRDAwMDFGQzRFNzc5OEYzQzY4RUYxNzdDQ0U1MUFGNDUwQkUzOUMKLToxMDhCRTAwMDhFMTI2NjA3MTRCOTNDQzZFQjEyQzc5NjZGQzU3ODU4NEIKLToxMDhCRjAwMDc5OEUyOUZEQjJFN0I4MTdDNzVERkUxQzY1QkM5Q0NFMTcKLToxMDhDMDAwMEY0NTNEMThCN0QzMTRDRkUwQjk3RkQwOUM3Mjk3NjE2QTUKLToxMDhDMTAwMDdFQTAxRUE3RDA1M0ExNUI4ODVFMEFGNDUxRjQ0QkQxMEQKLToxMDhDMjAwMDI3ODVBRkZGQUM1RTkxMjVERDMxNkU3RDg4QUYxQjc1NkEKLToxMDhDMzAwMEE0NDdEMDJGODA3QzgyQkYzM0U4RDkzOUI4MTBCRjg5RDAKLToxMDhDNDAwMDcxQ0RBOEE0MUZGNEVFMzBENzE1M0FBOUFGMDdGMzJBQzcKLToxMDhDNTAwMDZCMEFEMDdGOTQzOTFFRjdDQkM5QjJGOEJEQkQ0M0UyOTEKLToxMDhDNjAwMEIzQUZBMEVFMDVGNkY0MTVEOTg3RjY5NDUwQUQwQ0YxMkMKLToxMDhDNzAwMEU3NEFEQzU2QjM3MDk0NzUwNEM4RDcyNjA5Q0YxRDI5N0UKLToxMDhDODAwMEZFOUJGRTNDREEyOUE3NzRCRThBOUM4NTE5MTA0RkFDNjYKLToxMDhDOTAwMDRDNEY2NUZFMkNDRTc5MUFFRUFGM0MxNTI4OEVCMjA1RUUKLToxMDhDQTAwMEYzOTcxQkNGRkJFNTY4QTgwRjZFQjEwQkY5NDNFNUQ5MkQKLToxMDhDQjAwMEJEQThFN0YzNDk2MDA1RTRCQjMzMUUzRTU0M0EwNEY4MEYKLToxMDhDQzAwMEZGOEEwRUNGMkZDQ0FBQjNBM0ZGM0JCRDdFRTYyMDQ4ODAKLToxMDhDRDAwMDZENjcyQzRGNDc3OEVFQ0I3NzMzRjg2MTE2RDdDRDU4QjgKLToxMDhDRTAwMDlFQkIwMUVBRjM1RjQ1Mzg4QjQxQ0VEQjU3NEI1NkM4M0MKLToxMDhDRjAwMEJGODZCRjlDQkJFNDc2REEzRkRDRDJBQjFCRTA3QjY0NzMKLToxMDhEMDAwMEZENTdBNUMzMjA4RjU4MkNBM0RFMzhENzNGMzkwNUZBNkQKLToxMDhEMTAwMDlENERCMjAzOTYzODhCNTg5N0RDMEU3MkFFOEQ0NkJERDIKLToxMDhEMjAwMDUzQ0UzNUQ2RUE5OEJDQ0Q0QzY3RkU3MjVBM0FCMzFCODcKLToxMDhEMzAwMEQzQjhGQzE2RDZENjY2QzBCOTgyRjYxN0E5OUY4MkZEQjUKLToxMDhENDAwMDc1QkRBRERFMEY3OUUwOEVFQjFDRUJFODczQUE2OERBMzcKLToxMDhENTAwMDFBNEZFNUU5OTRDNEUyRjEwQTNEMzE4MjdDRURENzA1NzIKLToxMDhENjAwMEVFMDdGQ0Y3REY2RjE5NTAwMzA4QzgxNzA3OTdCM0JDNkQKLToxMDhENzAwMDFERUQwQ0NEQTNGMEI5MEFCRDk0RTc5N0YzRTcyQUYzRjQKLToxMDhEODAwMDI4RjdFRDgzQjgwQUZDMDhDN0Y3RjRCMjU3QTY0MEJDMzEKLToxMDhEOTAwMDcwN0E2MzdBMEMwOUExRkI2OTU4MTdBNUY3NUM2QTFGMDIKLToxMDhEQTAwMDM3ODdDOTA3QUJEMjk1N0FBQjBGREIwQTVFNDdEQ0FGREEKLToxMDhEQjAwMEFCNEI4MkZENUMxQUQ3MUYwRjhEQ0Y0RkJFMTg2MTA0REQKLToxMDhEQzAwMEI5QTQ3MUJENzg1REM3RkMwQThERTc4NUVCNTQ3RjA0QkIKLToxMDhERDAwMEI4MzNERjkzQTc0N0JCQzNEODIzQTU1NUM3RkI0QkQzRjUKLToxMDhERTAwMENEQUE3MzczMkNERTU3RjQ0RjdEQkYxMkRGNzdENjVEQUIKLToxMDhERjAwMDdBRkZCQzczNUQ2NzNEOTQzMTU0MjE4NjQxNzA0NkVGMjQKLToxMDhFMDAwMDJGMzJGREZENEQzODdGMzlCQkNFNjAzNTUwRkExRTA3M0QKLToxMDhFMTAwMEZEODI3REMxMDY5OUM1OEI0NkE2NkZDNzc3MENGMDQxRDAKLToxMDhFMjAwMDVENjFGNjYxRTJGMDUzNzg3NjhCRUNCMEQxRjE3QjU3NUYKLToxMDhFMzAwMDNGODRFNzNCRUU1RTJCOTFFQkE0OTBCQ0VCQTlENTUzQUUKLToxMDhFNDAwMDQwRERDRTM5REMyQjEyRThGODczMUJEOTc5MTREQTZEQ0EKLToxMDhFNTAwMDU2RTU1QkVGMjZEOEJBQ0VCN0ZFNUQ3OTk2NTI3RjUyQzMKLToxMDhFNjAwMEQzN0Y3MzNBQ0ZCNzFDQzQyMUQyOUZFNUVEQkJBODE4QkUKLToxMDhFNzAwMEU1MERCQzlDRkU2NzNENkVDQ0FCQkVGMzU0NjAzQkI0Q0QKLToxMDhFODAwMEZFQzVDMjQ0QkE4RUVGQTU2MzhGMEQwNzNEQjI0NDYzQTEKLToxMDhFOTAwMEZERTRBQ0E3MUEzNzA3QkY2QjFBNzQ3MTNDQTVEM0RCOEUKLToxMDhFQTAwMEU2NjgyQkQ4OEZFRjNDOEJGMTdBQTdEQzcwMzlCRDcxNjcKLToxMDhFQjAwMDRCQjM5QzQ4NzBGQ0Y2RTE3NEZDNEU3MzM0NkM3Nzg0QzEKLToxMDhFQzAwMEQ5ODc2MzdDNTY5RkJGQjk3N0UxOTBFQkUwQkFCMkRFRjkKLToxMDhFRDAwMDMzQkY2NEZDNTZGMDNGQjM3MTY2MTRDNEFCQ0RDRkM1NEQKLToxMDhFRTAwMDZFMUYwQTdDMzY0NTVCNDExNEU2RjA3MzM4MjdENjMwOTYKLToxMDhFRjAwMDdCNzRDQTE4QkQ2MTFDQTVEQkE5QjU5MzdBNDA3RTc4NDYKLToxMDhGMDAwMEI3QUU1REVGQTBGMzNBNzY5NDQ1NDE3REU0NkI2RDVCQkYKLToxMDhGMTAwMDk0MTU1QTNBREUwRjc4Njg3RDMyRDhDMTYxMjUwNEY3N0UKLToxMDhGMjAwMDA3ODdGOUI1QzQ2NkM3QUQ3Qjk0OUZBMTY3QjUzRUM4RjYKLToxMDhGMzAwMDlCQkY4MTdENDNGMEUzMTcyM0Q5RkUzRERGMEZCQzdCNTAKLToxMDhGNDAwMDFCQUJCMzc1RDY1NTc4N0Q2MTM4NUY2Rjc0NDY4Q0IyQjQKLToxMDhGNTAwMDBGODRENzBCRjNEOEY1OTM2QkRGMUMwRkYzOUQ1RUFGMzcKLToxMDhGNjAwMEIzMDJCRURGQUREN0UxRkNGMzY4N0VBRkExRjI3ODZBNTEKLToxMDhGNzAwMDIzM0IyRjMwNkYzQkNEOTNFRDYwNDcyNDk0REY3OTU0MzIKLToxMDhGODAwMDdFOEQyMDdGMEI3NTRFN0RGNEU1NzI1OUI4OTFFNUQ3NDMKLToxMDhGOTAwMEYzRUEyNUNDQjcxNUY5OUNFN0Y0MTUyM0REQjk5QzFBNDMKLToxMDhGQTAwMEU5QkY0QkQ0NzU3NDIzRjUyQjgwMUU1REM5RUIzRjVCODUKLToxMDhGQjAwMDBGRDA2Nzg0QUYwN0E4RTU0MUExOUIyMjE3NDEzOTI1NEYKLToxMDhGQzAwMDI4OUYwQUZGNjNFQTA3OEM0OEM0MUJCQzQ4NEY2RjAxMDcKLToxMDhGRDAwMEM5ODQ3OEExNTY0RjMyRTEzQzk0NTcxM0U5MDBCREZGOTQKLToxMDhGRTAwMDZCNDQ1NDNGQTg0MzJEMzZCMkY2ODFDOEE4NzVEMEZFMTUKLToxMDhGRjAwMDM1MjJDNTA3NzhGRjU1NjM3RDA3RjJBQzVGNjdEODcxRUUKLToxMDkwMDAwMDlFMDc2NDlCNEVBMkJGNEU4QTZCMkI0MjM3NTBBODcxQkQKLToxMDkwMTAwMDZBQzAwRkQ2MUFEMDhFQThFRDUwNUEwNkYzM0ZEQjMzNDQKLToxMDkwMjAwMDA4Q0FGRENEMTlFQzlDQjg4RTU0NjM3Q0ExQjQzNDFFRTMKLToxMDkwMzAwMDQ4ODZGOEE1Q0MxNDczMDE4RTkyM0IzNkY0OTgwNEZCNTUKLToxMDkwNDAwMEJENjVDMzYzRUU0RkEzOTE2N0RFODZBNDQ5NUEyQUU3NDQKLToxMDkwNTAwMDY1ODM2MjFBNTIyOTNDMkMyMzkxRjVGNzhGQzlENTUxQUIKLToxMDkwNjAwMEI4QTYyNjc5NTIxMTg1NkZDRDcwRjZDQjA4Nzk4RTMyNkQKLToxMDkwNzAwMDJGQkQzRTIwODNFMjMxMzJDMTlEMDNGRDU1N0FGMzRBNzQKLToxMDkwODAwMEYwMDNERjRCRUQwQjM0NzI3MEZDNDE4OTFDN0Q1QjBBRjEKLToxMDkwOTAwMEMyNkQzQTkyMDJGMUY2Q0Q4MDdGRjdBRURCMTUxOUNFQTQKLToxMDkwQTAwMDFCMzNDMjVDMkYyNzY0MzlENDI1Q0FCREVGQjU0QTY4OEIKLToxMDkwQjAwMENGODhDQjQ4RjkzOTgxQ0I1RkI5RDFFQzQ3M0JCNzUyNjgKLToxMDkwQzAwMDc3QjY1MzNFNTJDMTRFNDU2QjgxRUZFMzM5REIyNzY4REIKLToxMDkwRDAwMEZEQ0Q3MDdGNUZCMkNDN0FDMjg4QTFFMkRBNEJCMTVEODAKLToxMDkwRTAwMERCN0ZBQUE4RTQ4NDMyMUY1RERGRjczQUJBNUVDQTU3NzUKLToxMDkwRjAwMEM5NDk3OTRENTU0Q0EyNDQ5RTRFRUQ5REI0RkRCRDlGOEUKLToxMDkxMDAwMDYwREU1QTJGNjk4QjQwM0U0Q0I3ODI5RjkyODg1QjczMUEKLToxMDkxMTAwMDg5QjZGMzRENTQyRUZBNDM0QkU1ODE4RTVCRDRGMEVEQzYKLToxMDkxMjAwMDVFNTA4QkI5NEE5Q0U1Q0VDMzc4RjEzRTJCNUIwRjcxNDQKLToxMDkxMzAwMDBGNDM3OUJEOUZDQkVCNDkwRkE5ODY1MkQxODQ0MDIwQzQKLToxMDkxNDAwMDBBOEVDMjlFMURFRkNGMDBGQjUwMjJCQjY3MDNCRDRFQUYKLToxMDkxNTAwMEFFQUQ0RDVBNDRFNUU3REJDRDA2QzczODNBRkU5NEVGOTUKLToxMDkxNjAwMENEMjhGMEFCOTUzQ0RFMjcxNzY1RkZDREI0N0Y5RkJEQzIKLToxMDkxNzAwMEVGQkE1NTIxRjI1NTk1QzFGQ0ZFNTlCQjNGRTU0MUIwMTAKLToxMDkxODAwMDMzNzY5NkFGOTI4QjdCNTIxRUE0RTM0QjUyNDdFN0FFRTkKLToxMDkxOTAwMDQyMkEzODE3NjZFMEJFMDVEQkFGMThBRjBEN0Y3RTYzNEQKLToxMDkxQTAwMDcyMTI4QjUzQzg3QUU2OEYwRDVBRTJCNUM0NjA0QkEyOTcKLToxMDkxQjAwMDI4OUQ0NjUzNUNGMkUwNUMyQTg1NjVEQ0NGRjdFMUYzM0QKLToxMDkxQzAwMDYxNUMxNEM0MzVCNjk5RjE2Q0JGODdCOEMwNkUyOUZDRDgKLToxMDkxRDAwMDU1Rjg3NjE5M0YyOUNBMTBENzZCOEM0NDA3RUJFRDRCMzUKLToxMDkxRTAwMEQ2NUE0MUZGMTVCRTlFRTRGQTc4RDJDOEY0NzBBNDZDM0EKLToxMDkxRjAwMDQ2M0JCNUE4ODFENUY1MTY0OUNDREUyRURBMjFCMUZBNjkKLToxMDkyMDAwMEU2NjVGRUI2NjEwNUQ4RTQ4QUI1MzNEMTlFMjk3NkNDRjEKLToxMDkyMTAwMDQ2RkY4MTdDQ0RCM0JBQTJGREI2N0ZDMkVGQUUyREJDQjYKLToxMDkyMjAwMDI2N0JFNjUzRUNEOTAwMzIwMEU0RUY2QUYxOTI2MkM3ODQKLToxMDkyMzAwMDI4N0I3RTlGMTFCMjlGN0M1NTdFMDFDOUU4QkFFNzcwRkEKLToxMDkyNDAwMDFDNDdDQUQzNkQ1QUEwNEI3N0EzMDNFQ0Y5QTJFN0QzMEUKLToxMDkyNTAwMEQwNEY5MkYzNkJCMDhFQTI4QzIzNkI2MzUxN0U1N0Q4QTQKLToxMDkyNjAwMDY1RTQ2QjY5NTMyMkIxRDE0QjczOUIyNDNDMjczQkFFMjEKLToxMDkyNzAwMDI5MTZFMUE4OEUwNDg0NEI3RjdGNUQwMUFDQkI3MzFGNzAKLToxMDkyODAwMEY0Rjc3RDEwM0VCREUxNDA4RTlCRDU2OThDODA4NzhCQzUKLToxMDkyOTAwMDI4Nzg2NEQ1ODNGRjM5NjdBNjc4NTAzQUJCQ0MyQkIxQzgKLToxMDkyQTAwMEVFRTgyMjlERjk5MDc0NDkwMjk4NEEwREU4OUQ1M0U3MzMKLToxMDkyQjAwMDY1RkMzMUQ2QTBGRUYzNzUyREUyN0FCNTY4M0ZGM0Q3OTEKLToxMDkyQzAwMDhCNDZCMEZENDJBREI3NkYzNEYwNUZCNzRGMjYzRTBBMTQKLToxMDkyRDAwMERGQjI1RkNFRjVEM0ExQjVEQzlFMUJFMjM1QzQxNkMyNkEKLToxMDkyRTAwMEI3MDg1QjI0QjE4NUYwODc3ODlEMDFDOEI3QTY3Mjc5NkQKLToxMDkyRjAwMDc5Mjg4MkQ5N0Q1MzY2OEMzMDZFQUE3OTM2Q0E0RjIwODAKLToxMDkzMDAwMEE1NzgxRkFDRDdFMkU4MjlDQzRCREMyQzNFNTZFNDZBQUEKLToxMDkzMTAwMDBBQUY5QjhGMjdFRENCQzA0RkRFMzI5NUY2ODdDQ0E3RTcKLToxMDkzMjAwMENCRkYwMUZEODYyRTVGOENBQjI5NUQ4RTVGNDk5RUNFMDMKLToxMDkzMzAwMDY0RjBGNzRFRkE5MkJFMjg0RjJBRkE1MEZENDA3RjdGMjQKLToxMDkzNDAwMEFFODVCRDdGNDJBMzkyNjdGMjI5M0M2NTlGOEVGODY4ODcKLToxMDkzNTAwMEZGNzI0RTE3ODg1QjIxRkYzOUU3QjRBMERFMjg3MjE3MzEKLToxMDkzNjAwMDAwQkY0N0VENUM3NDlFNDhCNzZFNEU5MTZFQjEyNTIyRUEKLToxMDkzNzAwMDdEQkFCQjQ0N0E1QzM3MzU1NUU4NEY3MDVGMkZGNDI3RDAKLToxMDkzODAwMDU2MEMxNEUwRTRFQTYxQzJGODVFOEIwQjA0RDhFRTFEQzMKLToxMDkzOTAwMDIzOEM0RjVCMzk1MTgwRDNFQjZFMTdDNkY3NTk1MzJFOTAKLToxMDkzQTAwMEY0RjdGNUNEMTNGQTZGRDhCODQ4ODBCM0VCN0YyNThDNkUKLToxMDkzQjAwMEVGREZCNDU0RTgxRkUwNUYyNUY0MEZEQUY3ODQwMEU3MkQKLToxMDkzQzAwMDA2OUUxNUM2MEY2OTVEMjdGNDBGNkQ3QjU1RTgxRjdFNUQKLToxMDkzRDAwMDZBQjMwMERGRDhGRTk2MzBGRUU2OEVERDAyM0M4MjFDQ0EKLToxMDkzRTAwMDEwQzYxNzFBMEYwOUYwNDhFQjE3QzJGODUxRjE1RjA5QzAKLToxMDkzRjAwMEZEQTM2RERGMDhGRDYzMzM3RjE0RTBFNTNDQ0UyOTc1RTYKLToxMDk0MDAwMEZDNERCODJGNDA5NkE1ODMxQ0E3MjVCOTg3RjdDMUJBOTQKLToxMDk0MTAwMENGMjkyREU4NUZFQjFEMTI4OTg1RkM2N0RGMjQyQkVBM0QKLToxMDk0MjAwMEZEQ0ZDQzAzMEJGQjcwQkJDOEU1RjgwMjMxREYwOUU3QzkKLToxMDk0MzAwMEQ5QUY2NjE3RUQzQzlFMTgyOThGQzNGN0FBQ0VENUIzRDYKLToxMDk0NDAwMDdBODdEQUFGMkJGMTVDMzQ3NUNCREE5MEU3NzY3MzFBNTIKLToxMDk0NTAwMDY5NDIxRjg0NjM0QkFDMDJEQ0REMTUyRjhDQkY2RUFBMDIKLToxMDk0NjAwMDRERTg0RjcwNjcwQUZEODkxNTBFMDE0RUFFQ0UxM0M2NEEKLToxMDk0NzAwMEY3NUFFQzE0NjBCQkI3NDQxODlGQjZEMjI1QzBFOTc1MDMKLToxMDk0ODAwMDUzODVGMTdERDZCODg1RkVCRUJFMEFBMUZGODY4REQ1NzcKLToxMDk0OTAwMDAyOUM1REJGNTgxOERGQkZDOTJCRjQwRkYwQUYxNEZBNjAKLToxMDk0QTAwMDA3RURBQjEzRTBEQ0MwMUE2MUZDOTA1NjlGRDAzRkI0Q0YKLToxMDk0QjAwMDZEQTNEMDNGRkM1NEJEMDBERkQ4REUyNDhDQkZCOUMzMDAKLToxMDk0QzAwMDJGQzAyM0M4N0U2MTdDQTFGMUEwMDA4RkI0N0UyNjhDQzIKLToxMDk0RDAwMDFGMTU3RjRDRTgxRjZEM0IyREY0NTc3RUUzRjBFM0JFNzQKLToxMDk0RTAwMEQ0REJFQzdENTcyNTlFMUI5QkY5ODMzMDRFMTc0N0UzNTkKLToxMDk0RjAwMDdEQTg3RjkzNDgwNzlDRjdFRjJBQ0U1N0UyQzA1MkM3NUEKLToxMDk1MDAwMDRGQzI3M0ZGQUE2MUYxRjlBQjdERDhGQjY5MEZDODJDN0MKLToxMDk1MTAwMDRFQUNGNUJBRjA3QzVFMEMxQzc4QTU3QTEyRUQ5NTUwMzUKLToxMDk1MjAwMEZFMjBDNTlBOEVGNUM4MzhGNEI3RTgzMjZENzBERThEMkUKLToxMDk1MzAwMEM2NDExNDg4RDFEOEVEOTA4Nzk4ODI3MTZDRDJBNTQxMkMKLToxMDk1NDAwMEQ3MUVDNzM2RjUyMTg4QzdDOTNFRUVENzQwMkZFN0Q1Q0QKLToxMDk1NTAwMEJGNTEwQzc5Q0U1Q0UyNUQwMTc4NTBCRjFCMERGQjU4MEEKLToxMDk1NjAwMDFGNDY4OEY1MjhBNTFENkRBNDc0MEM3OURFRkU4OEJBMDcKLToxMDk1NzAwMEE0ODE1N0QwREZEMUM2QjMzOEJFNzM1RTVFQUY5MkU4MjgKLToxMDk1ODAwMEZBMTY4NUNDRkYxOENEQkZCNDU0NEZFQjNDNTRDRjY4Q0UKLToxMDk1OTAwMEEyRkQ4NEM3OEFGMDUzOUU3ODg0OUZGNkQ4QjA1REUzMUQKLToxMDk1QTAwMEM5QzRGNjU5OEYwM0ZCRDc3QUYyMTA3RUMxRTM0NEQ4QzEKLToxMDk1QjAwMEU3MjlDMTc2OURDNzg1RDdENzdCQTYyMkJDQzFFM0M2NjQKLToxMDk1QzAwMDc2QTNBNzAyREI1NzNERDVEOEJGQzlCMzE4RTFENzNENzUKLToxMDk1RDAwMDVFNkNFQjNEMkJGMUZBNjY0RjFEQzI1QjNDNkIxMDZFNkYKLToxMDk1RTAwMEY0RjhCMDZERjI2Q0M0RjYyRDRGM0RGNjZGRjczNDIxRjAKLToxMDk1RjAwMEJDRDNFMzQ3RDhFRkQ5ODdGMDZFNEYwMEUxQkQ5RTU2NEMKLToxMDk2MDAwMDg0REZGNUI0NjFCQkNGNzMwQURCRjczREVERDhGRjgxOTIKLToxMDk2MTAwMEE3MDNFMUIzN0MzRkUxRUIzRUUyQkU5RDAyMTM1Mjg0MUYKLToxMDk2MjAwMEYyQTBDNEJGRTMyMUVGMDFFMUM4RDM3RDI3RTQzREFBNDYKLToxMDk2MzAwMEZDNDNDRDhGMzNGQzM5QkEwMjFBRkU0MkZDRDMzMzYzQUMKLToxMDk2NDAwMDVENkQ0ODVFRjAwMzdGREU0MzkxQzQxQjQxRjVBMTQ2OEEKLToxMDk2NTAwMEMzRUEwMjM1MzEwNERGMEYyMzNDM0U5RkMzRTU5MkM0QzkKLToxMDk2NjAwMEIxQjg3QzM2Qzc2QjBFRDc4MzVDOTBDRjRDOTRDRjBGQ0MKLToxMDk2NzAwMDdFNEU5RUE1RTREQjUxMjk2RTI5OTNFMjMxMkY1OUUzRkEKLToxMDk2ODAwMEM1QkE4Mzk5QkQ4NzNGMjBDNUFEODVFQkU3QUFFRjdFQkMKLToxMDk2OTAwMDE3OUY2Nzc1NjRDMDQzNEEwREZFRUVCNzQyM0Q2OUJGMzAKLToxMDk2QTAwMDhDNzVEOEFFOUU1N0M1REY5M0U4QjI3RkU3RTkyNEYwMEEKLToxMDk2QjAwMDQ3MjVGRjkwQjE1RUZGQTFDRTMyMTVFQTJEM0QzMjE5NEMKLToxMDk2QzAwMDVEN0E2NDZBODRGNkFEMTQ1Nzc3QzBFNzY0N0FGNTg2RUMKLToxMDk2RDAwMDdCQTVFMEZCRkYxMzIwMzVBNzdBNUU0NjZDM0EzQzg3RkEKLToxMDk2RTAwMDRCOUNFRkMwQUIzN0I3RDA4MDBGRTA1Qjg5MTc1QjY3NEYKLToxMDk2RjAwMEIyM0IyNUIzM0I5Qzk3RjQyMUVDMUU2NjQ4MDlCNzFFOEMKLToxMDk3MDAwMDM1M0U5OTk5MkM3RUNGQ0NENDA4RUQ5RjUyNUM3RDAwREMKLToxMDk3MTAwMDlGRTNFOTRFMDExRjczMkYxQjNGNTdERkZFMDJFMEY1NjkKLToxMDk3MjAwMDk3MUQzRjlDOTBEMjgyRjQ1NkVBMUIyQjQ2RjA3MzVBNDkKLToxMDk3MzAwMDBCMjU2NTFGOUNDNTg5NDZBMkM0ODlEODNGRkQ3RTU2NkUKLToxMDk3NDAwMEVGNTFGQ0U1RTFDRTk2RDlDMzczRDUzQUI0OUJEM0E1Q0UKLToxMDk3NTAwMDQ4MDdDNERCRTdBQUVGRUYwRkZCODU3N0QwN0MwRkY2NTUKLToxMDk3NjAwMDRGMTUzQjNBOURDMjFBMEE0RjI3RUNEQ0M1RjRDMzE2Q0QKLToxMDk3NzAwMDk0MzNCNTdEQTVGNzExRDhFRjlCNEU0OTA2RjlFM0E1QzMKLToxMDk3ODAwMDE0M0JBRUU3NDNENzBGM0E5ODk3QzRCNUUzN0JBQjU0OEQKLToxMDk3OTAwMDZFNEE4MDlFRjM4NkNBRjhGRDg2MEYzNUJFMEM0OTQ2OTgKLToxMDk3QTAwMDc5RDE0QjE0RkYzOTcxNTQ1RUMyQzQwQjhBNUMyQ0UwMzIKLToxMDk3QjAwMEVGRTUyOEQ3QTlCQzREMDQ3QTdFQjc2RDQ4MjZFRUQzRDUKLToxMDk3QzAwMEVDMUM2QTAzN0FENjZBRDg3Qjc1REVGNzY1NzYyRTAzQzEKLToxMDk3RDAwMDRBRjk3MDZFMjQzQUVCNDU3Q0JGMDA4MjBCRTBERjUwMDMKLToxMDk3RTAwMDBCQkU1RkQwMkM5M0M1NkY4NEIxQTdGNzcyQjlGQTMwNjYKLToxMDk3RjAwMDVFNTdFMkMzNzlDNTdEQzU0QUNFRDc0QUNFRUZEMkRERUEKLToxMDk4MDAwMEZCOTNFMUJEQzEwNUZCNzQ5ODE3OTE5Q0I2MkM1Nzk4NEEKLToxMDk4MTAwMDczNTU1NThCMUZGOTQ1RUYxMDM5QUY2QTNBQzZDRTYzQzEKLToxMDk4MjAwMDkxQjZBQ0QwNzM1ODhGRjA3OTE1Rjk5MkY1MTZGNzhCODUKLToxMDk4MzAwMEU2NTBGQzNBRTU3QzExRDA5NUNBRjkwOTg4RkJDNzFCQjQKLToxMDk4NDAwMDZDRDFCN0QyNUJEQjI4NjlGQ0I0NzVGRkNFOEFFN0Y5MkYKLToxMDk4NTAwMDk0NzM3REIzODgwQkRCMzk5NEREMjBENzJFRUY2QTdDQkYKLToxMDk4NjAwMEFGN0UxRUE5QzdFQjBCRjI2NkE2MDA1QzQ1REE4QkUyNjEKLToxMDk4NzAwMEU5N0NCN0FDQUM3OTI3OUU2MjM3QTk2RUY1NDhBODczMkUKLToxMDk4ODAwMDRGRjRDRDc4MDdEQUIyRjVEMjA5QUYwREY1QTQxNkY4OEEKLToxMDk4OTAwMEQwMjY1NTJGRUY0OTlGNzdGQkE2MTFDQkExOEUzQzVFQkEKLToxMDk4QTAwMDY2N0MyMDA3MTgxRkE4M0MzOUU1OThDQkQ3NDdGNTYyOUUKLToxMDk4QjAwMDE1RTA0RkY1MDJGMTU3RjQ2MkZBNTJFMjk0RTI4MkVGQkEKLToxMDk4QzAwMDgxNzRFQTQ5REUzRDdGNEU4NDNEMTY2RDNCOUU0M0E5N0YKLToxMDk4RDAwMERBNjk4ODgxRkFDOTNDQzJGQzc2QjAwRUM0RkNCNUEyMzQKLToxMDk4RTAwMDA3Njc3NDhDRUY2NzVFOTNGMDNEOUIzMzEyQzFFRjM5Q0QKLToxMDk4RjAwMDc0MTUzNzI4RjEyN0Q1M0ZBNjc3NDc0RDRDRkU2NTVFOTYKLToxMDk5MDAwMEQ3NEI3MUM3MEY0QzBCRkFFNzMzMUFERkUwQTgzNEY0REEKLToxMDk5MTAwMERGMUI4MDFFQkEwMkY3QTMwM0UwQkNERUVCOTJBMzk2MjYKLToxMDk5MjAwMEUyNzJBNjlCMkY4NTlEMTNFOEY0MDNFNDkyMjk1ODI3NDEKLToxMDk5MzAwMDdDNENDN0VBNzZFQTc4NTc1OTQ3NTc3ODFBRjRDNDBCMzMKLToxMDk5NDAwMEZCNTk1MkRFQkIzRjQxMUM3MjM5QkVFRUY4QzE5NDJFNkEKLToxMDk5NTAwMEI1QzAyMkE4NEIxNkI4NkNFMUYwNThDNjlGQkZFRkVGMTgKLToxMDk5NjAwMDJDMUZGNzI2MTMzQzE3QTRBNkE3NjQ2NUNGRTlBQUJFNEYKLToxMDk5NzAwMDZBODg2NEY4Mjg3RTRBQzFGMzcyQkMxOEJGMEU2NjMyNEEKLToxMDk5ODAwMDdCQTFFMDQ3ODgzNUQzNEE5RkFGRDU0NjNBNDA1RkNCQUQKLToxMDk5OTAwMEI0RUUwMEM4ODc1MjdGNTNGMkUyN0RGNjkzRTgwRkM4MTkKLToxMDk5QTAwMEM1REEyNDc2RkVEOERGOTUxRjNFREI5OThGQTcwNkZEMkEKLToxMDk5QjAwMEE0NTJDNzIyRjlFMUVCOTEyRUEzMTVFREQ3NDRFMjQwNjIKLToxMDk5QzAwMDdGRDE5NzFDNTZFODg1NzUyQzE5NzYwOEIxQ0VFQkM2NjkKLToxMDk5RDAwMDc1MThDMDVFRDMzNjAyRUEyOEU4MkY3REI4MkUxM0UwNTIKLToxMDk5RTAwMDg1RUIwQTQwNDU4NEFDMzY0NTIxMUQ4NkI1MTJCNEQzQkIKLToxMDk5RjAwMEMzNjAwRDc0QkQzQjhFMTExRjlDQTc2QUJFMzBBNUQwRkQKLToxMDlBMDAwMDQyRkI3NzdDQUJDNTNDRTgxOUQzRUI4OUYwMUQ4OTFEN0YKLToxMDlBMTAwMEE3M0Y0RDg0N0E0RkNEODU0Njg0MDc5RjJEM0VDREVBRTIKLToxMDlBMjAwMDY3ODdBN0MxN0M2RjlGRDdEQjBDMTgwNzJDNDQzQTI4QTcKLToxMDlBMzAwMDc1Q0FCNzA5NzFDMDNFNjhERTY3NjY3Q0NGMzhCN0E1QzYKLToxMDlBNDAwMERFODQ3NEUzNzVCNTdDQkVFRUZDRjNBQzFFQjIxMzgwMEQKLToxMDlBNTAwMEExMzQwRjY4RDcxMzdGNDhCQ0FDQjM4QTcwMUUwOTgxNEMKLToxMDlBNjAwMEVERjA0ODBBODdENDM5N0U2RUZFNjhFQUNCRUIyMDQzREUKLToxMDlBNzAwMEM4OTBEMEJBMUFFOTg4MDlGQjNFOTU3QTFGMzE0NzYyMkYKLToxMDlBODAwMDc4OUZDODc0QzVGNUM1Qjg2Q0EyQ0NFOEZEMEYxOUU4N0QKLToxMDlBOTAwMDc1QjNEOTk3MDBGMTZERjNEQzBEMDkxMEVGM0U2M0ZBNTEKLToxMDlBQTAwMDA3RDJGMUQ5QkZFQjEzODBBRTc1MjNGRTgyN0VBNDhFNjAKLToxMDlBQjAwMERFMUI4MEZDNTdFQjhCMjA1OEZGOUE4Rjc1RTA5QkI5MUIKLToxMDlBQzAwMDlGN0RGNkUyOTcyNDlFRDJCMzJFOEZBMEZGMjREQzBGNTkKLToxMDlBRDAwMDJCRkQ3NTE3Q0Y1NTAwM0YyRkU0MUI2RDYwMTczMjc4QjMKLToxMDlBRTAwMDNEQjRFNkE2RkYxN0RGMTY0MjhGMUQzNEFFRjY1MzA2Q0YKLToxMDlBRjAwMEJGNERFMzZBM0Y4REZEQjdEMUI4MUE2MDc4RUYxNERBMzUKLToxMDlCMDAwMDA2MUE1NzQzRUJBMzcxMzVCNDJGRDBCODFBQzY0MTVDN0YKLToxMDlCMTAwMDBERURCMzM0QUU4Njc2MEQ4REFCQTE3RDlBQzZENTMwRjIKLToxMDlCMjAwMEVFMjkxQTU3NDNGQjA0OERBQkUxN0FEREM1RjI0MkM0M0UKLToxMDlCMzAwMEE3OTVFMEZCRjU0QjRENTExQUIwQUYxNEZGNDhBODBCQTkKLToxMDlCNDAwMDdERTQxQzE4MDlGNEI4RTlCQzQ2RTA2RkZFRDk0ODAxNzEKLToxMDlCNTAwMDFFNzYzQzI2Qzg1RkUwRkZFMTlFNDJGRkUwOTY1NEExREUKLToxMDlCNjAwMERGRUVCRDVFODA3QjJEMUUyOEMwNTAxRjBBQkQzRkIxQjkKLToxMDlCNzAwMEEyNDA4MDEzREM2Mzg0RjFENzREOUQyOEMwREQ1REI3MjIKLToxMDlCODAwMDBCRTM2MzRCQ0E4NUZFQzdBMzU0N0NGNDU1NkE0NDNFN0QKLToxMDlCOTAwMEIyRUYyQjVDQzgzN0UzRjlDQUFFRTRGNDA5Q0UxNzA1N0YKLToxMDlCQTAwMDdFRjI5N0YyRDQ3MDc1REJCOTdEMzU0MjNFRDA5M0UzRjcKLToxMDlCQjAwMEI2QjBBRjBEQUZFRjNEMzJFNDk1OEMxQ0UwODc4NjZERkIKLToxMDlCQzAwMDlCM0FEQjREQkQyOTVGMzI5RUQ0MTAzODU3ODgyNzBFNTMKLToxMDlCRDAwMDI4N0U1NjdFREY5MzA1RTc0QzIwOTc3QjRBRjUxMUMwMUYKLToxMDlCRTAwMDlGNURDRTgyNDg4MDk3OTZFQTEzNDJFNUE4Q0VFRTFFOEUKLToxMDlCRjAwMDg4RUYyOUI4RDlGQTk0RkIxRjJGOTg3OEM1N0RGNDI3RjAKLToxMDlDMDAwMDQwRkVGQTVDQTE3RkNDQkM1NEQwODdDQkU4NDgyQTcwRDgKLToxMDlDMTAwMEJGMzY0OEM3ODlGODdEMjdFMkFFMTBGMDU3RUIwNTgxQzMKLToxMDlDMjAwMDRERkEwNDc4QUU1MUE0QTczM0Y1NjFBMEMzQjM0RjY5RDAKLToxMDlDMzAwMEYxMUM1NkU3N0NGQzdFNjVCRTkxRjI0NTUzNUJENkU1OTAKLToxMDlDNDAwMEY4RUY3MkIyRjEzNEZFOEQwMEJBRDA2NzA5RjhDNTM4NkEKLToxMDlDNTAwMDZDMjM4MDNFQkZFNUZBRjZERjVDREY5RUUxN0M4NTNDNEQKLToxMDlDNjAwMDE2NjA2MjY1RjcyOTdDQUJBQjc4NjI3NDA2RTg0RDFFMUUKLToxMDlDNzAwMEMzNkJEREU0MjcyNDMwMzdCMUM0NTE2MzBEQTFFQjUzMkUKLToxMDlDODAwMDFDOEYxN0Y4QkFENkMyQkMxNEVFM0VEOTI5MDFGRDUyN0EKLToxMDlDOTAwMDE2QkIyNEQwQjc1RTRCREExMDdFOTZFQjc3NTI3NTNCM0QKLToxMDlDQTAwMDVFNEZCRUNGOEY2RENGOEEwMEY2OEY5NDM3RTEzQTNBODAKLToxMDlDQjAwMEU5RTAxMEU5QThFNjkzOEZBRjQ3OTkzNzc4RkZFNkZEMTIKLToxMDlDQzAwMDIwNkYxNzlDMENGRjI4QUZEOTA5RkUyMkNBNkI3NUIwMTQKLToxMDlDRDAwMEQ2QzY1Qjg3MDNFQzdFOTREN0M5RTFFQTJDODAxQkY4REIKLToxMDlDRTAwMEJBQTJCQzVFODQ3RDdDNUQ3NTE1NzFGQjM3RDg4MkNGQ0UKLToxMDlDRjAwMDIzQjYyQTREQThCRkU5NEE5RTlBMzhGRDFCMzk5REQ0NDgKLToxMDlEMDAwMEY3MzVFOEJDODNBQzYxRjQ0QTY5MTU3RjNBQjQ0RDIzNUEKLToxMDlEMTAwMEU4Rjk5MDU2RDE0RTdEMDRCRjMwM0ZGMDQ5NUY4ODFCNzMKLToxMDlEMjAwMEJDMkU5OUVGNUYyMTFEMjc3NUU2NEJEMzUxOUU1NjlCQTQKLToxMDlEMzAwMEVFM0MwMEY5RjZFNDE2OTkzMDdGM0JGRTFEQjA5Nzg3QTQKLToxMDlENDAwMDQ2MUJEMDlGMzY4RjFFOTUxQzJBNzdDQTNBQjY3MkJBMjgKLToxMDlENTAwMDBGRjUzQThGREM0N0M3OTdCOTBDODAyMTc1NUZDRUU0QzkKLToxMDlENjAwMEZCRTk3Q0FFNzFCMjAzRjZBMTVBM0FGRDg5Q0JDNENFQjEKLToxMDlENzAwMDNCMzA3RjMyOTFFM0JDN0JEQ0E0NDdFMEY5ODc1QUE4RjMKLToxMDlEODAwMDVEQjAwNUYxNTRGQTFCNEEyNjhEQ0QwNjNFMDYxODFGMUMKLToxMDlEOTAwMEJCQTJDRjdCOUM1RkVGNzBCQ0Y2NzA3RTM1NzNGOURFQTMKLToxMDlEQTAwMEM1RkRDOTBFRUU0RkRFMDY3RjYyMDBCRjkzQzdEN0MzNjUKLToxMDlEQjAwMEZDNDkwM0Y3Mjc3RjA0N0Y0MkRCMDNEQzlGRUMwNzdGMkUKLToxMDlEQzAwMDQyREI5Q0QxNjk0NTY4MzdFMTI1MzZGNDI3MzQ0MUMxMkYKLToxMDlERDAwMEYzMDQwQjg0NzUyOTc4OTUyNEM5MDI3RjhBRTM0QzAyMjkKLToxMDlERTAwMEZGOEFDQ0IxNDI3RjgxMzY1MTgwOUQxNzUzMDVGOEE2N0EKLToxMDlERjAwMEYzRDdBQkZDOTRFODU3ODYxRDFGQTZGMjUzMDUwMjNDMkYKLToxMDlFMDAwMEI4NjU4QzcwRkZGODlDNDkwMjNDMkU2QjlBMDA4RkU5NzQKLToxMDlFMTAwMDNENTM4MDA5REYwRkNCNjVCRjkzRENDOEI1MzJFNkI5OEYKLToxMDlFMjAwMDdDREY0OTg5QTcwRTk1QzhCODZGMzNGNDEzRDkxMUFBRkUKLToxMDlFMzAwMEI3QjlBNDczOUY0QzAzRkI2NDM0N0NCMTY5OTVGOTUyQTQKLToxMDlFNDAwMDg1N0U4Q0EzNUE3NEFFNDQzOEJGNTc1MzQ2RTU5MEI2MEUKLToxMDlFNTAwMEY5MkQzNDRFQzNFMjIzOTU2QjFBRjdFNkJBNDY2MTFDMUUKLToxMDlFNjAwMDQ4RTNBNTQxQzg4Nzc2QjZERkE0RUM1QjBENTVFRDNGMEUKLToxMDlFNzAwMEI5OEFDNEZEQTlEQ0FCRUM0RkRENzQ3RDE3NzE1OTdFNDYKLToxMDlFODAwMEVDMzVDNTY1NTRCRjMwRkU3QUM2NzRFNzFFOTA5QjZERjUKLToxMDlFOTAwMDlGRDEzODE1RTJEQ0NGN0U4MUYxRDcwNzMwOTRFQUVCMTEKLToxMDlFQTAwMEQ2QUY3RjgxRjFFREQ2NEU3RDcxMEJGQTkyQ0JGNUI2MzAKLToxMDlFQjAwMEIxMjVCNUE5OERFQTVCNEUzN0M5QzE0OThERkE5MkM3NjQKLToxMDlFQzAwMEQ3OTQ3MzZDRDEzNDhDNzc1QTM0MTg3RjkxOTIyQUVDRTIKLToxMDlFRDAwMDFGQ0NFRjZGNjg1RDZBMTJERjVCMEE4OTdCMzA2RThGODMKLToxMDlFRTAwMDBDQ0EwQkU0OTMyNDQ2RUNCNzg2Qzg2NzJBNjM1QUU4ODkKLToxMDlFRjAwMDc4NDJBRTU3Q0QzNzUwMDUwRjUzOEQyRjUwQzE2MzU0NjQKLToxMDlGMDAwMEUzMjdBQUUwREI1NUUzQ0I4NUZFQTZCNjg5NTc4Q0JCRDkKLToxMDlGMTAwMDE1QkJBRThDQ0JENUJBNjQ0NzE4QkIzQkI4NDU4QzA3OTQKLToxMDlGMjAwMDg5QUI0QTM4RkZEMDdDNjQzNkRBQ0ZDNkMzMkIzODlGNjIKLToxMDlGMzAwMDJBMDQzRUVENTY5RUQzNDJFOTlENzVGOUZEMDU1QUFGQzAKLToxMDlGNDAwMEE5MUY5NTg3ODIxNkFEQTNDNjE2RTRBM0MyMjcwMjc5N0UKLToxMDlGNTAwMDcxQzg3Qzg1NDY1OUQwRTNBNjU2RTYxRkJCNUFFNzRFMkEKLToxMDlGNjAwMDZFQTdCNzczN0ZGMzk2MkE4RTkzRkY3RUZFRDAwNDJBRTYKLToxMDlGNzAwMDI3OEQ2RDFBQ0NCMzFBNUIwQTYyRjFGREMxOEJCMzEwNDkKLToxMDlGODAwMERGQTY1NjBEQkU0RkI2RjFENUYxQjdENDY4ODNGODI5RDgKLToxMDlGOTAwMEY4RTQ3Q0IyRDQwNEU3ODMyRTUwN0YwNDcyOTZBMzczNTYKLToxMDlGQTAwMEM2NUFDM0QwNUQyRDVGNURDREFCQzgyRjI1NTQyQ0QwRDQKLToxMDlGQjAwMDY1MTdGNTQ3Nzg3RTk4REI1NTg1MkVCQjhGM0M4RDc0RjEKLToxMDlGQzAwMERGRDZDQUYwQkRCOTQzRjQ4NzM3QjY4QkZFNzBGOEE5NjcKLToxMDlGRDAwMDE4MDFDRTM5QzZFMjQyRUE3RjcxREUxQzdFRUVFRTZBREYKLToxMDlGRTAwMDc4QUJGNTAyNzY0ODQ0QjhBNzM4RkUxQUUzODI2RDVDNzgKLToxMDlGRjAwMDRFMUEzODlGQjY0NTM4QTY4NjdCRkZBOEUxQThCRTIyMzgKLToxMEEwMDAwMEY0RkIwQTI3QUY2N0Y1Qjk5M0Q3QjNCODNCRTc5ODA2RDcKLToxMEEwMTAwMEYzNUNBQUY3Njg2Rjg3NUFFQkU0RUEzMEYzMEMzQkFFQzcKLToxMEEwMjAwMDUxRTUyRDkxMDJGRDdFNkVERUZBRTVGNTdDREY1MzY1OEMKLToxMEEwMzAwMDFGQkJCQTVGQjE4RjA1Q0E3NzU0MUM5M0MyOUU5MzBEQTQKLToxMEEwNDAwMEYyODE5RkFGNTREMTkzMzhDMkRCREZDQkY5QTY5QzRCOTIKLToxMEEwNTAwMDU3RjFBRjhCRkI4M0YzNzhENTc5RjVBNUVCNjE5RUI2MEQKLToxMEEwNjAwMDMyRjQzQkFCNEQwQkI4NUQ1RjgwNzZGRDgzOUZCODVERUUKLToxMEEwNzAwMEZGQTkzMTA5QUUxRjE4QjAzNTA5RjRFODQwQUVGMjNEMzIKLToxMEEwODAwMDU4Q0FCRDkwN0M1QUQxQTNGNzVCM0UzNjg1QzZGQjYzQTgKLToxMEEwOTAwMDM4RUUzQjMyMEY4REVEMUZDMkNGQUVGMERDQzdFNUU3RTcKLToxMEEwQTAwMDVEMUVGN0VDRTU3QUJFOUJDNzNEN0U4ODdCRkE4MDNENUUKLToxMEEwQjAwMEM4RTRGNjgwRTVEMTZGRjFCOEE3ODlDNzNEOEQzQ0VFQzUKLToxMEEwQzAwMDM5QzhGM0U4OEYyMEVFQzEzODg4RTVEMTBEOTlGN0UyNjEKLToxMEEwRDAwMEY3QzUyRTI0Mjk3MUNGNzg2RDM4M0U4RkI2ODk3NjZBMDAKLToxMEEwRTAwMDU0QkM0OTkwQjc5MTU2MzFERTI5MzQyNjBBRTM0NzkwOTMKLToxMEEwRjAwMDM0QTFGRkU2OEVFQjU1RkEyREM2M0JDMzRGODk3OUY0QTgKLToxMEExMDAwMEQwMzYzMThGMUVEMjJBRTZEMTEzOEJDNDc4Qzc5NTJGNTMKLToxMEExMTAwMEM2M0JDQTNFQzIyRUFCODRFN0IxQzZFNzg4RjFDRjJFNUMKLToxMEExMjAwMEY4ODVGNjM3MThEOUY5QUM4NkNDNDk1N0I0QzM3RTZFOUEKLToxMEExMzAwMDg3RkZDOEY1RkIzRENFOUY3Nzc4RkVCMDkzRDM3RjA3QUUKLToxMEExNDAwMEQwMUZFMzUyMTY2N0U2OUU3N0VGODlCNjgxN0RBODYwM0YKLToxMEExNTAwMEY5NDI2NjE1RTZENTM3NzI1Q0I2N0FBQTU5N0M3QTQxMUYKLToxMEExNjAwMDYzNzY1MEJFRUMzMkIzMzg2QjU3RTZDQ0YzRjBERUZGQ0IKLToxMEExNzAwMDA1QUJDOTA2RjU5OTAzM0EzN0MyQkIzMjI1MUI3QzZGODQKLToxMEExODAwMDUwOEQ1RjZFQUJDQUNGRjE3ODQxOTFDRjVEMkQ1RkEyNEMKLToxMEExOTAwMDdGREJEOTcxNkQ3RTU1MTlGNzFFOTk4NDc1OTc5QjVBOEYKLToxMEExQTAwMDA4MzE4NEE5MkY1Q0NEQkY1RUVEMzlFQUYxRTBDN0MzNjkKLToxMEExQjAwMEY5MUZGNTczQzY3NEI4NjU0MkY1Nzc0NzZCRTA0OTQ4RjcKLToxMEExQzAwMDhCQzZGOEU3Q0FGMDVEQThDMUFERUU0MkUwRUJERTRDMEQKLToxMEExRDAwMEM5MEFGQkU5NzQ1QzIxRUM0QkJDNzdGMUUzQjE3MDdERkIKLToxMEExRTAwMEU3NzlBREM2ODBGQjRFNTZDMTFGN0Q3MDkxRDIxRkU0NEEKLToxMEExRjAwMDI1OTM5RDRGRjJCNzdFRjk0ODdGQThGMzFBNjU3QzdGQkYKLToxMEEyMDAwMDY0RDdDNTgxNzFBMTc0N0JGQzA2MTlFRDRBNDM5NjQxNjAKLToxMEEyMTAwMDAzRjVFNjg2RjM1QUUyMEY4OUY3MUEzQjUyQ0REMDM2QTIKLToxMEEyMjAwMDY0Q0FGQzdBMDBFREMzNzMzN0IwNzNBQjNCRTg3Q0NDRjcKLToxMEEyMzAwMDVFRDgxMDBGNDUxRUZDRTczNTI1RTFCRUJGRjMxQzdGM0QKLToxMEEyNDAwMDVFRUVDNTNGOUIyMEJGN0NGNzdDQjkwOUVDRDNDRTU2QjAKLToxMEEyNTAwMEY2OUNEQzI1NkQyNkEwREI4MThFNzU2NkI4QkUyQjczNUYKLToxMEEyNjAwMDEwQ0VERjlDRkQ5MDc5MjBDODREQUI4NkVERTdGMEY4NkQKLToxMEEyNzAwMDQ2NzlERUFFQUMzOThGMEU4MDc1QjdCMkJDNkNEN0Y5QkIKLToxMEEyODAwMENEN0JBMjQwMkZENjRCMEUxNkJGMzA3QkE2OEM2RjM4RUQKLToxMEEyOTAwMENGRUI0RDNFNzZDRTJEOTc3ODNGQ0QwNkZERTlGMTdCOTUKLToxMEEyQTAwMDNEQzgzOUYxNTY5MjUwRkI1NzY4MTVFRDQ4NDFBQkNBOEQKLToxMEEyQjAwMDRGQjkyQjUxMUYxNDNFOTQ2QTYzODVGRTAzOUY0RDlDM0EKLToxMEEyQzAwMDVDMDY3QzMzQjNGN0RCNzY5RTVGMUEzNzExRjRDMkFDQzEKLToxMEEyRDAwMDYzNzFCMzhGREQzRjJFNThBRkMxRjdCNTk0RUZCMEQ0QTMKLToxMEEyRTAwMDY0M0Y3MEE4MTRFRTZGNjA3Q0NEMzU4QkY4MUNFODVCODIKLToxMEEyRjAwMDlCQjg4MENFRDdCMEM1RTQxMEQ2Nzc5OEUwRkE3NjM5MEYKLToxMEEzMDAwMERFOUM4RTc1RUQyQzAzRUE2MUUxODVCREU2QjY5MDNBRTAKLToxMEEzMTAwMDUxNjc5Q0Q4QjJEQjNDMDhFODdDNTYyM0QwNERBMUMzRTIKLToxMEEzMjAwMEE4M0MzMTdGREM5MUI5MDdDNzVGMzhDQkU4OUU0QkFBQzgKLToxMEEzMzAwMDBGRjU2Nzc1NTg3M0U5RTA2MEZFOTVEQkMxRUFFMzczREEKLToxMEEzNDAwMDdEMjJERTQzMzc4QUY5RTc3QzU1N0NBNEFFOUZFNzY3MjAKLToxMEEzNTAwMENEMTkyN0U0NTczQzZFQ0FFMzcxOTNCQTRFNUVBQTM1MTUKLToxMEEzNjAwMDg4RjUwOTU1OUQzQzU3NUQyN0ZGNjdFMzI0OUQ3QjFBQkYKLToxMEEzNzAwMEJFMEYxNzk4N0M0REYxQzM1MDFBNkJDNkUzRjk1RUVGMjAKLToxMEEzODAwMDkzMjBENzZGRjFGODcyQThCRUVFREUwNEFBMjIwREIyQjgKLToxMEEzOTAwMDdCMzhFRTVCRjAzQTlENzJGRjU1RTMyNUFCOTdDNDBEMTkKLToxMEEzQTAwMDBFQzk4Nzg5RjYwNEU0OTcyQjYxOEYxM0Y5RTI2NUU3RkMKLToxMEEzQjAwMDU5NTVGMzc2MTU2RjI4RkIyM0Y5NDVDQ0ZGM0M2M0ZBMUEKLToxMEEzQzAwMDEwRTM4QkM2QUY1OTdDMDEzRjZEM0Q2MEJGOUVBMDFGNUYKLToxMEEzRDAwMDZFRkU1QThGRkIyNzZGOEY2NkZCREU0QUJDMzI4OTM4RDAKLToxMEEzRTAwMDcxREY2NjdDREU3OUVENkY2Q0IwOUY3MzY3RjY3Q0RBQTcKLToxMEEzRjAwMEJFRkQ1OTIzRTY5OTZGNzdFNjk5NzU0MjlFOTlDRkU1QTAKLToxMEE0MDAwMDcyNUJCQkM2MUIwQkY5NDFBQkMxNDc0MkY2REI5NUZFNDUKLToxMEE0MTAwMEM2RjZGMjQ3QjI0MTBFMDMxQTk0QzNFNjZGRjUwNEJFQzYKLToxMEE0MjAwMEJGRDdCOEREODA3ODM3OUVENTYzM0NCQTZEQkI4OUM5OEMKLToxMEE0MzAwMDM1QUYzRjJCRkFEQUNBRkRFMkE3OUM5RjA3Qjg1RkRDNzUKLToxMEE0NDAwMENGRkRFMjdCQkM1RUYzMEU4RjVCRjZGMDdBNEQzMzhGNkYKLToxMEE0NTAwMDVCNzY4MURGQTRFRDk2NzZBRTc3NEI0QzFDNEY1NjlGMTIKLToxMEE0NjAwMDU1RjBCQ0FCNEZEQjExMkRFNTZCRDU3NzgzRDc0MDNENjUKLToxMEE0NzAwMEVBMzZCN0E4MEZCNzRFMTVFMzkzNzE1OTYyN0MzMkE2M0UKLToxMEE0ODAwMEI3NTg4RjI5NDk0QTEzRUUyRjhFQkI0MUU4MkYzMjBGNjAKLToxMEE0OTAwMDEyRUQ5Njc2QjgwMDNCMkY4QUYxQzk4NEJDQjFBMjNDN0MKLToxMEE0QTAwMDM5NDNFMjEzQ0NBRkM1N0NGNzk2RDA3Q0Q3MEU3QzYyRTMKLToxMEE0QjAwMEY5Q0NCNkQ2MjdEMDRGNkMzQjlFMUExREZBOURFMEFENjUKLToxMEE0QzAwMDlDQ0VEQjhFMzNCRkJDRjVGMDM5NEI2OEJGRDI5RUUyMjkKLToxMEE0RDAwMEUzQ0U3MDdFOUNFNUZDOTg5NEUwQkMyMzhCQ0FDQTg1RDEKLToxMEE0RTAwMEUzRTdGNDcwRkVBMzJCMzk1NkVFNTdFRTNCRTVGQjJBNkIKLToxMEE0RjAwMDJBRDRFRjdEMERDQzA4MzkzRkY0NkRFMzE3MTk2ODRGNkUKLToxMEE1MDAwMEFFNTEyRjZBMkRFQ0JDNUI4MzE0ODlFRkUxNUZFREZENEEKLToxMEE1MTAwMDk2MjU1OUE5NUMyOUFCRkJCM0ZERDFFQTIxRDA2RUQwQjkKLToxMEE1MjAwMEI5MTJFMTNEQTgwNkM5MzU2RDNFRUNGM0ZFNTYxRkY2QTMKLToxMEE1MzAwMEVGNEFENDY2NDlDQTM5RjQyNkYwMEIzMkQ3NkZCMjQ5RDQKLToxMEE1NDAwMEQyODI3QzQ1NzBGMDQ1RTJBRUNERUEwRTQ1QjE2QTFDODAKLToxMEE1NTAwMDI0OUI1RDA0RDZCNTQ1NDc5QUMwQkYxMzI3QjE1OTdCRUMKLToxMEE1NjAwMDEwQjY1NTQ2OUZGMzk3NkNGN0MzNDA0RjI5QzBGNjkxM0MKLToxMEE1NzAwMEE5NUJDNUVGN0VDMDExMkRGOEZFMTZCNEIwNUY2NjMwNDIKLToxMEE1ODAwMEIyRjcwRjIyQjNEQzhGQzNGQ0YwNUREQkU4ODEzMDZGRTQKLToxMEE1OTAwMDQxMUFEQjRGRjVBMzlEOUVDNkU3RDU5OEI2MjdFM0I5RDAKLToxMEE1QTAwMDU1NzU5RUM0RURCNUEyNzc5RDc0QUQxNERGNEI1MURCOUMKLToxMEE1QjAwMDU5QTVCRUJCQ0RFRTlBMTYyRTFGN0QyNThCRTU5RjRENkUKLToxMEE1QzAwMDVGOEQ5N0UxQjkzOUM2MjgyN0ZCM0VBNDUzODZGN0MxQjIKLToxMEE1RDAwMEI2OUQxODYzOUExMTQ2Q0VGNkY2OUJGMTBBQUM0NzgxRjgKLToxMEE1RTAwMDczMDJGNTMyRkY3QjE1MUFCMUNFQTVGMTAzQkYyRjk4ODgKLToxMEE1RjAwMEY1QThENzQzNjFDMTMxOTdDRkE3QjZDRjc5ODc1NUY2NzQKLToxMEE2MDAwMEI5NzM5RkJGNEU4MjczNjc5REYyMDQwQzAxRkUxRjY0RjUKLToxMEE2MTAwMERGRDVCODlBM0NBOUY3RUZCRkM4NEFFNUVGNEQ1NTdGQTMKLToxMEE2MjAwMDAxRTc0Q0U0NjgzMzlFQjNEOTcyRDBCODRFQjY1RjlFNTIKLToxMEE2MzAwMDFGMzZGMEJBOUYxQUZGRTZDRjY2Mjc2MjFERTk5M0Q5NEQKLToxMEE2NDAwMEFDRkUwNzg2MURCRjlCNTYzRDA1REVEM0VCODQ2MUZENDYKLToxMEE2NTAwMEQwMEYxRkI0QzNFRjAwMkQ2MEZEQTMxNUI4NkEwQUM0NjQKLToxMEE2NjAwMEFCNUI0N0IwRjE5RjZGMEEzQzBEREYwNURCN0EwN0VGNkMKLToxMEE2NzAwMDI3OEZCMUYxMEFFQzVEMzg2NTA0QzAzQTU2OEZCOUU1MTEKLToxMEE2ODAwMDM1MzZGRUUyRjVDRTJGODAzRjkxNTlDRUMzMjBBN0FGREQKLToxMEE2OTAwMDgyRUVEMEI2RTg3QUU3NTFCOEZFMDVDODE4NkQzRkVFRjUKLToxMEE2QTAwMEVCNkM4MzdFMDVFRUQ2RDdGOTY1Njg3RjYzNjdERTJCOUEKLToxMEE2QjAwMEQ2RkQ4NzI4RjFFMEUxNzI3RTVEQ0Q3N0M1QUY1Q0I5NEMKLToxMEE2QzAwMERFRkYyMTk3RDMwRkI4OUNCRUNGRUJGREZCNzhERUZCRkUKLToxMEE2RDAwMDJFQ0Y3QkY3ODJGRkU4MDNGOUIwODNFN0MzNzkzQzFGRjUKLToxMEE2RTAwMDY2NzlENzc2OUVGN0JFQzVFQkZENEQzQ0VGNkRFNDc5RkMKLToxMEE2RjAwMDZGQ0UyNzEzNTlCRDFGQkUzQjI4NDFERURCMkY2Q0RFMUEKLToxMEE3MDAwMDNCMjE0RkY0MkJBNTBFRDFBRjhDQ0QxNEZEQ0E2ODVCNTUKLToxMEE3MTAwMEEyMkE0RjRFNTNFNUM5MzcwOEZEODVDNjQxQUEzQzc5QTgKLToxMEE3MjAwMEI4MkE0RjE2RkRDQThERUQ2MzU0NzlCMkI4N0ZGQzQ1NDcKLToxMEE3MzAwMDk2OERFRjI3RERBRUNBOTdDNTdERTQyMDFGQkJBQTQ3RTMKLToxMEE3NDAwMDJGMEFDQkM3QUQyRDhCMEU1Q0NCQkVDREJGQkI3RUYxMzAKLToxMEE3NTAwMDIxRTdFMzA3OUM4RkVGMkJGQjM2OUY3QzhDRjlERDg1OEYKLToxMEE3NjAwMEYzODRGM0YxNzVGOUZGNjJGRDYyNDJERUE0QjA3QzJDNDQKLToxMEE3NzAwMDc1NEM1M0M5REJDQzJFRjhGODRGRUFBM0Y5Q0E3NUE4N0IKLToxMEE3ODAwMEZGOTQzRUQ2QjZDNDMwN0RENDJBNzVBOEVGRTQ3MEYxQUMKLToxMEE3OTAwMENDRkYzNTdEQTQ3MUMxNjNEOUQ3QTA4RjZBRkZBRUJDNTEKLToxMEE3QTAwMEI3QThDNDBEOUQ3MTAyOEZDNzk0N0M2OTBCQTUxNTdDNTkKLToxMEE3QjAwMDc3QTIyMTQxQ0ZCRUJCQTE3NUY3ODRCODQzQTFEN0VGRTMKLToxMEE3QzAwMEIyNTlCQ0QzRjhDNTAyRDQ4QkMxRTBDRkMzRDBGNTU1ODQKLToxMEE3RDAwMDNFRUVENTZDMkJCNkYwOUU2NEU0NDAzODJERUQ2NUYxNkQKLToxMEE3RTAwMDRGRjQzODJCM0I1RjQ1MDJGMDFEQUEyQkM0NERBRjY2REEKLToxMEE3RjAwMDc3MEZDNjRCNUE2QjM1MDEzRUNBMDY4RDE3QkVDMzRCNDkKLToxMEE4MDAwMDY0MjM5RUJGNkI4MDM4MEFDRTU5QUJFMkE4MkZCM0VEMEMKLToxMEE4MTAwMENBRjc3ODI1OThGNzBCM0VBRkQ0RjIyRTlFRjNGRTRCODUKLToxMEE4MjAwMEI2NzMwQkNFNUZFODY4ODc3REM4QzYyMzdBREM2NzY5OUMKLToxMEE4MzAwMDhDNjBERjQzNTFDNzVCMUY2NjY3RjBGNzk3MTlGREUwMzcKLToxMEE4NDAwMDNEODA1RjgwM0Y4NTBGQzZBMkZGRkQ1MkY0OUYxMDQ4RjgKLToxMEE4NTAwMDUwNzg0MzI0RUIwRjY0N0YzNUM1OUIxNEY0RDc5RkJGMUEKLToxMEE4NjAwMDc2RkU2OUY4QkU2Qzg2QjlFNzRDMzgzRjIwQURGMUM2N0MKLToxMEE4NzAwMEIwN0Q0QjNGRUE5NzNBNkVFQjMyRkU1NUM1Njk3RkNFMEQKLToxMEE4ODAwMDc0N0UwNDcyNzIwRUZDNzI3NzNDNUZFNUQ0MEVFQ0ZBQjMKLToxMEE4OTAwMEZFMEQ5MUFFN0JEODc3NjE5QzMyM0M1N0ExNTNBN0ZENEEKLToxMEE4QTAwMENENjY3MURDODc3Q0JFNEVCQTI4NzIwNURGQTk4OTA5QTYKLToxMEE4QjAwMDc5MUY1Njg1QkY0MkFGMTUwN0Y3MDRFMDI4RTNDRjVENDcKLToxMEE4QzAwMDhGQjI4RTMwRjJFM0JBNEFEQzdEMEVFOEEwOTYxRjMyREEKLToxMEE4RDAwMENFQzFERkQ3MEQxRkY3RTk3ODFDMTlDQUZGNjFCODJFNkEKLToxMEE4RTAwMDlGQzI3RjMyNzIyMEJDMDdBM0JDQkZDRUVDQTFGMkVFQTgKLToxMEE4RjAwMDRDOENCNUNFNkFBNzdBNzQ2NzhCOENFRjFGMTJCRTFGODMKLToxMEE5MDAwMEFFRURFNDY3QkUwNEY2NDk1QjJDOTFEODkwNzg0RjVEQkMKLToxMEE5MTAwMDg3NTRDN0E5RUFGMzY1Rjk2NzdCMEFGMDRERTc1MzU1RjkKLToxMEE5MjAwMDc5RTRGNUFBM0M3MzkwMkEwRjE1RUQ1MTcxNUNBMTMwQzIKLToxMEE5MzAwMEJFMjQ2OUFDMkFDRkJERjIzOTAwMkREMTJBREYxQkUyM0IKLToxMEE5NDAwMEZCRjY5MjBEQkVDM0EzNjUxNDBBRURFN0RGMDM2MkY0QzQKLToxMEE5NTAwMDVFRDY0NTFFQTQ5Q0EzRkQ0QkI2MERDNzc1RUFDNzVBMkIKLToxMEE5NjAwMDYyNjNGQ0YzMEE3RjFGNEExRkNGRjhGQkY4NjBDNThGQjQKLToxMEE5NzAwMDM5QjBFRTZFRjBDRjY1N0ZFRkM5MjFCRTRGQkNDRTYzMUMKLToxMEE5ODAwMEZDQkM0ODA3RUZEOTkwQ0Y4QkQyRjFGQzBFQjYyRjc4RTQKLToxMEE5OTAwMEUyQjE1REVCQjE2MUZCQUMyNzEzQzdBREYxMzgxMDdFQkUKLToxMEE5QTAwMERBOTM4N0VENTMxRTI3NUU3RkMyNTM4MjcwOURDNzg1NjEKLToxMEE5QjAwMEYwQTM5RUE5RDhBRUYyQjhGMTdBNkZBRERCMEI3RjFGODIKLToxMEE5QzAwMEIxRjc0QTgyRTc0QkQzRUJFOEYzNDJFODlDQjY5MkUyNTgKLToxMEE5RDAwMDExNDI0N0JCRDcyQUMwQkQxNkM3MEJFMzkzQUI2RDQyRUMKLToxMEE5RTAwMDdGNjI0NUE2RDA5RkUwNzYwOEYwNzU1M0YzODRGMURERDEKLToxMEE5RjAwMDVENEUwMThFMkQyOTExQzY3NzczQkEwNEQ4RTI5ODJBQ0MKLToxMEFBMDAwMDhDMzc2NUJBODVGRUREMzcwRDhCNkVCQjgyM0UzRkUxMkMKLToxMEFBMTAwMDcxMUUwMTNBM0NFQTcxMUQyOUMyRjdBNDRBMTA1RUU1OTUKLToxMEFBMjAwMDk5OEFFRERDN0VERDUwQUY2MkI0MDFDQzhGNjI3MkFDRUUKLToxMEFBMzAwMDYwQjEyMUJGQzVGREJGNThBRDQzRUExNjMyN0Y2QzA5MzYKLToxMEFBNDAwMDlENEZDMDk3Q0UyN0Q0Mjc3RDM4OUZDNUUxM0EyMkUyOUIKLToxMEFBNTAwMDNENTVCODhGM0UwQkZERTQwNDNFNjZBNDlDNjQ4MTdDQUEKLToxMEFBNjAwMEVDNjA3RTJDN0VCN0Y1MTE5REI1MzQ4N0VBRjE0NzlGRTcKLToxMEFBNzAwMEIwRUZFNEMyMTYyNjA5NjM0N0JGRTY3MThEQTk5RjExQTYKLToxMEFBODAwMEYzQzUwOTRGNDk5OERGMTFDMkVFOUZERDkyRTYwOEZEM0MKLToxMEFBOTAwMEJCNTA0QUZCRDFBRkQ5Nzc4NzRDQkJCN0Q5NDAzRTI2RDQKLToxMEFBQTAwMEU0Q0Y4ODhEMDhEOTdGOTlFMEZGQTkyODAxRTcxQjMwMDIKLToxMEFBQjAwMDM4ODJDQUNEODQzNTMzRjQzM0IzODJFQjUzQzZDRDdFQUUKLToxMEFBQzAwMDRBQUNGRjA2RTVERjY3RTQ3MTFDQUVEM0MwQzdBQzRBRjEKLToxMEFBRDAwMDVBODdENzU3NjU1RTc5QkZFNjBDNUZENzI5MUVBRjlEQjEKLToxMEFBRTAwMEUwNzFGNzcxNUU3RkZCOTJDNzZCNkQzQzVFM0JDQUVCMUEKLToxMEFBRjAwMDZGODc3OURDRkQzOUFGQkZCNUYyN0RBQjRGNzlCQ0Q2M0UKLToxMEFCMDAwMEMyRTNCNThGNzlEQ0JEMkE3MzMzRkU5RDk4MEI5QkQ4QzkKLToxMEFCMTAwMERGMjVFQTBBOUY3QjM2OEFGMURBNUM5RjE4QUZDRDU5QjAKLToxMEFCMjAwMDIzQzY2Qjc3RDc4OUYxREFDQzk1NjJCQzM2QzMyQkM2QzYKLToxMEFCMzAwMDZCNzcyRDE2RTNCNTNCQUE0NUZCMzhBREEyNTA4MDZGNkQKLToxMEFCNDAwMDczOEI3NUI5NUJBNzhBNzFCN0MyQTc1QjVDQTI5RDlDMkEKLToxMEFCNTAwMDU0MjJDNkRENURBREY3NkRGRjY4REM3NzAyNjY3RTE1QjkKLToxMEFCNjAwMEUyMEY0M0JFMEIyRjlDN0JDQ0IxM0EwQjYxRkYyNjk3QzMKLToxMEFCNzAwMEI4NkE2MUJGRTY0NjRERTAxMEVDMzM5MTRGNjVGQzFFQUMKLToxMEFCODAwMDY0MTNEQzMxOTRFQUVCODVDMUUzMjZEODQyRkM4RTU3OEUKLToxMEFCOTAwMDk0OUZFOTg3QzVGMzExQjdERjI3RDJCNUFDNTJBQzc3RTQKLToxMEFCQTAwMEVBNEI0NEJBM0E5M0M0RjM2NzkzNTQ3RTg3NzA3RkE4MDQKLToxMEFCQjAwMDY3QkY5MzIyRDc5NUZEOTBDNjU0ODlFRjJERkQ1QzdGMkEKLToxMEFCQzAwMEE0MjdFQTczNjRDQzFGRTE3MzUzODU3RUY0NDdDNkZFNjUKLToxMEFCRDAwMEVDN0RBNUMxRkM3RDg1OUE4ODIxMUZDMEJFRERFRUNGMkUKLToxMEFCRTAwMEQ4N0IwNjk0RUM4MURFRjRGRTlCMDhBM0I3REUzODBBMUUKLToxMEFCRjAwMEJGMjNCNzQzQzdERTFGRDg5NTYwNzYyQ0E1NUQzNzVEQjAKLToxMEFDMDAwMDY0RUYwOTkwMEUyRDlFMjM3M0MzRkIyM0E5MzBBRjc4MDgKLToxMEFDMTAwMDhFMkMzN0EwMTVDRTk5RTk1NUZEODlFMDEzQUY4ODBGMkEKLToxMEFDMjAwMDNCNEZGNzlGQzM4NzlGRTNFODRGRkFFM0Y5ODhCNkYwRkQKLToxMEFDMzAwMEVGMUQ3NEM2NzEyQUZGMUNCQ0NFRTQ1NkIxNDczOTdFQTUKLToxMEFDNDAwMEVGMjEzQjVENTc4RTJBNUUzMkYwNzU2OTRDRDNGMUZCRTQKLToxMEFDNTAwMDYzODY0RjA5QkU3RjlGQTdGMUM2QzI3N0I2QzgzOTBEN0MKLToxMEFDNjAwMDdFRjc2NTA0MTFFREMyRTQ3MTU3Q0VDNzQ3QzU4Qjc2RjgKLToxMEFDNzAwMDYxQjQyRDREOTVGN0REQTBDQTBCNDVCQjYwMjBBQTM4MDUKLToxMEFDODAwMEE3OEQ5RDRGMzRCMDk1ODVGNjIzREQyNkY3OEY1MURFRDUKLToxMEFDOTAwMERGNDE3QUQ1MUM1QjgxRTdFRkI2MjVGM0Y3NTFCODVDNEQKLToxMEFDQTAwMDBERTdFQjFEOUVDNENFMkZFNkYxN0E3MURFMEY4QjY0QUIKLToxMEFDQjAwMDBCQkQ2RTM4NUVDQ0NGMzEyRTcxNjAxQzdCOTZGMTJCQjQKLToxMEFDQzAwMDhGRkUwMzdFRTY5MTEwRkUwMTNGMEY4QkZDMzRBOEZBNDUKLToxMEFDRDAwMEU3ODA3Q0U1ODZDMzg3QzlENTdGMUUxRjdFOEU1MjkxOTMKLToxMEFDRTAwMDJGNzNDQzU1RjZFREMyQ0JENzg4ODA1Mzg2Rjc4M0RFMjEKLToxMEFDRjAwMEIxNEFCODJGRkQ0RUEwM0EwMERGODlGQzMxOUVENTI3MUUKLToxMEFEMDAwMDFFNEE5QUE4NjVERjZENzE5QTQ3NTJCQTE3RjM3NUU2MjUKLToxMEFEMTAwMEYxN0RCMTQ2MEYwOTQwNUNCMkM1NjNDNDk2OTA2QTNDQjAKLToxMEFEMjAwMDFGQkQyMjdFNTEyQ0Y4Q0JDNjE0NzcyMjlDMDc2Q0VDRjkKLToxMEFEMzAwMERFNkQxOTlDMTM2OEQwNzU0QjBBRjcxRTQxQjM2RTA4N0YKLToxMEFENDAwMEZBRDdDNkU2MDQyRDdDNTc3RTg0RDZBQTg1RkI0NjI0MTYKLToxMEFENTAwMDk1Q0I5MDI3OEU4MkY3NERFMjAwMjZCODFGQjZDNUUzNEIKLToxMEFENjAwMDBGMTRFMUI5NTAzNzlFMUZBMkVCMjg4NEY4QjVDODNBRkEKLToxMEFENzAwMDAzRkZERTYzRjMyNzU0RkU2RDEwMTc3N0MzN0RFM0JEMzkKLToxMEFEODAwMERERDlGOTZCODM5NTlENkYyRDhFNjNGQkIwMzkwRUY2N0YKLToxMEFEOTAwMEZEQkU5QzI0QjNDMzA3RDNDNUIzRUZGODU0RDA3Rjk3NEYKLToxMEFEQTAwMDUyODNGRTgxRUFCQkYwN0Q5RjIxMjQwNEI2MjM3RjA0RjkKLToxMEFEQjAwMEY4MzkzNTdGNTRFNzExNTdCNEYyNzM3MzZERTFGNzZCQ0YKLToxMEFEQzAwMEZFQ0NFMzA5RTU3Q0ZCNjExRTRGN0NDRUVCM0YwNzc5QUYKLToxMEFERDAwMDNDQjE4MkM3MTM3RTFFNEYxQ0UyRjFDNDVFMUU0RkJDMDUKLToxMEFERTAwMENCRTM4OTdEM0M5RTc4OUZDNzEzMUZGMDc4NDI5MTBCN0YKLToxMEFERjAwMEMzNEE2MjMzQzA3QkI0QzkwNEVCRjJGMUNCMjQ1RjA5RDAKLToxMEFFMDAwMEVDQjNCQjE5NkM5OEM1RjY0RjdCMjVENUI5MEFFMkEwMDcKLToxMEFFMTAwMDVGRTcxODA1NzIzOUQ1M0IxMkQ2MTEzRkJEQkQwMkM2OUEKLToxMEFFMjAwMDI1MjRFOTZENEUzQkJDOUZCNDBBREYyQjUxREUwQjlCMDIKLToxMEFFMzAwMEM1RTVFNjM2NzczMURBREQ1OTVDNEY4OEJDMzYxN0YzNjUKLToxMEFFNDAwMEQzM0FGMUZCNzEwOTZFNURGMEJCNDlGNEZGMEMxNTdEM0YKLToxMEFFNTAwMDZGNTM3RDU3NDkyRjMxN0JGMUJFNjI3NzA3OTE0MUExMzYKLToxMEFFNjAwMDc0OEZFNzc0OEY5OEMxRTkwRTJGNUQ4NUQxOTczNTlDNUIKLToxMEFFNzAwMEVFMEE1RDlBNkYxQTY2NjFFQkE4MTBFMkMyNDNGOTYzQUQKLToxMEFFODAwMDJDMjA2RjJENDk3QzNFRkVCRThDOEIzRjY3MjJENzBGNTYKLToxMEFFOTAwMDY1NUU2NTdGRjZGMTgyMkI5RjZGRkE4ODhGRUI4NDgxNjgKLToxMEFFQTAwMDJGRDEyMUYzMTQzQ0E4ODNFRjkyREZFQUZGNjUzMkU4NEIKLToxMEFFQjAwMDQ5RjA3RDFBMDdDNkUxMjNFNUZDM0Y0MjNFMURFMEVGNjUKLToxMEFFQzAwMDFGMjhGNjcyMEFFMUI0NTIzREVGOTBFN0NBRUZFRDFDN0QKLToxMEFFRDAwMDJBMThBQjgzRUY3NjRGRjZGRjEyRkZERTgzNDE1QjFEMkUKLToxMEFFRTAwMDFGN0FCRUI3ODVFM0Y3NTBEOUJERjg3N0UwMDIyOUVEQTgKLToxMEFFRjAwMEY4QkU5QUMxNjVCMDQxN0NERTJCQzlCMTFDRTgxNzlGMzIKLToxMEFGMDAwMEQ0NTZDNEVCQTEyQTdGQjVCNjM5MEVFNEFCMUZGQjM2OEQKLToxMEFGMTAwMEUyRkYwNzJEOTc0Mjk2MDA4MDAwMDAwMDFGOEIwODAwN0IKLToxMEFGMjAwMDAwMDAwMDAwMDAwQkVEN0QwOTc4NTVENUI5RThEQUU3OUYKLToxMEFGMzAwMEVDMzM2NEU0ODRDOTgzMjZCODEzQTY1ODE5NEUyNjM4MjYKLToxMEFGNDAwMDA5ODdCMDAzQzE0NjBENzAwMjAxODI4NDcwOTIzMEM0M0IKLToxMEFGNTAwMDhBMzY3NjMyQkQ4RjM2M0IyNDI0NjExMEYwM0VFQjgzNzcKLToxMEFGNjAwMDRBRjA4MDQzNkIzRkVGMzU1QUVCRUI0MEZCNDU0NEU1M0QKLToxMEFGNzAwMEJFNjczMTI4QjREOERCNjI5ODJDQjdBRjAzNTY2QkM3RDUKLToxMEFGODAwMDdCN0RGRkZGQUZCNUNFRDk3QjczMTJBMDg1NTY3QjBCQkYKLToxMEFGOTAwMDlGMkVENjVFNkJBRkY1QUY3RjU4RUI5RkQ2M0U2REE1NkIKLToxMEFGQTAwMDI1NTkwM0E5OEMyRDBEQUZBQjY0NTMxOUZCMDBGRkNDQzEKLToxMEFGQjAwMDY2Q0NDMzU0NjMyMDk3RTExRkM3MDcwQUZDM0ZDQTM0MUQKLToxMEFGQzAwMDc1M0EzRUM3Mjc5Njc2RjY0MTM2RkVCRjk5ODVEM0UwOUYKLToxMEFGRDAwMDc5RTVDN0ZGODNBNTMzQjY5ODM1MDdGQUUwQkRGRUMyMTEKLToxMEFGRTAwMEMwMjgxRjhDQ0Y2QTVDNjdCMTdGMkVGQ0ZEMjAyNzNFRjYKLToxMEFGRjAwMDhGMkMxNzMzRjVBQzc5QkM5NDIwRjRGNzhBM0FBM0Y5NzcKLToxMEIwMDAwMEUyNzU2OEVGRUE2NjlBNjcxODU0RkUwNEQwOEQ4NkY3RjkKLToxMEIwMTAwMEIxNEQ4M0U3MkE0QkYzNEQ4Njc5MkIzRkVERDVBMUNDN0IKLToxMEIwMjAwMEM5NzRENDdCNjA1RDBCQjMzRUI1OTI4RDg0M0VGMzNEMTUKLToxMEIwMzAwMEJFMDkwMDU3NTdBOEU4MjcwNTUwRUZEMkQ3NjlCODNDOUEKLToxMEIwNDAwMEVDQjcwRUZBRkRCMEVDQkUyQzZENzIxQ0FFQUVDREFDMDIKLToxMEIwNTAwMDM0MDJGMzc0NjU3RENFQkYzNjBERkJCRERGMUFDMTdFQjEKLToxMEIwNjAwMDJFNTZEMzBCRUIzQTMxRTdGRjY1NjY5QkZBM0YzREFEQjkKLToxMEIwNzAwMEVDRTZDMDI4MThCMDAyRkUzNzg2QjE4OUVFNDg0RTYwNzMKLToxMEIwODAwMEYyQzVFQjY1Q0M2MDBDQkFCNDk1MjYzMzU2QzhEOEU5NDYKLToxMEIwOTAwMDdBMjVFQTAxNDA2QUJBMDE3RjUzQjFGRDQyMTMzRThGMUYKLToxMEIwQTAwMDc0N0JCNDJEMDgyMEQzNTNFN0MzM0FENzcwMTRCMEM4Q0IKLToxMEIwQjAwMDg0OEVBMjNFNThFRjlBNkU0RTM3RjZBMEVCMzRFMkNGNjQKLToxMEIwQzAwMDBCN0YxMUJGNTlDREVBNjkzM0ZFMjI0QzNENkRDNjZGMkYKLToxMEIwRDAwMDBEMzNCNTQzREQ4RDczMDBCQ0U1ODFCNDkxNkZERjBDOUEKLToxMEIwRTAwMEZGMkU2MDA1MUYzODM5RkQxMUJGMzVBMjZGNTJGREUyRkEKLToxMEIwRjAwMDYxMENENkMzRkM4MEJDRTI4QkQ3QjVGQzc3NEVENjM3NEIKLToxMEIxMDAwMDgyMTFDM0IwQTJGOEYzMzc1NzhGNEI4RUUwN0JDODM3NUMKLToxMEIxMTAwMDVFQzE1N0QzODg2NjlBMUJGODJBMTk5RkU0NjBDOURCODEKLToxMEIxMjAwMDYxNjkyRjEwNUZCNUI4RTI3Qzk2ODM2Q0U2MzI2MjcwN0QKLToxMEIxMzAwMEU3NThDNjYzMDhFRjUyNzMxRERGMzdGNEUzRTMwMUZFRkYKLToxMEIxNDAwMDk1OENGM0M3Q0E1MDUzMjVGMjI3RkIwQ0U3MkYyRjNDRjEKLToxMEIxNTAwMDE0RTNDNEY5MEZDNkE5MEFCQkUyNzUyNkU4MzU1QUMwNDQKLToxMEIxNjAwMDA5N0Y5Njk0M0ZENkZCNkYzMEZFNjMzQkYzRTcyMzVGODYKLToxMEIxNzAwMDJERjk4MjkzMzlBMTVFMEREREIwNUU1REEzNDRBMzgwRkQKLToxMEIxODAwMEQzQTVBMTVCODg5RTRCNkRGQzlENUM2RDFERkZBRDBEMzUKLToxMEIxOTAwMDA1MzRDRUFBNEExODA3NjlCMUMxRDQ0RUYwRUQyNDdDMUIKLToxMEIxQTAwMDU2MzFERjI2OTQyNzg5RDdCN0IzRDk3ODA2Nzg3QzYxRTIKLToxMEIxQjAwMEY3QkFCREM4MkZFNzFFRjAzMDBGQUUxQkRGMDVCQ0Q2QjcKLToxMEIxQzAwMDczMEFCMkUzNjkxQ0FFOUY2RTU2QTJGQjYxRkNCM0JCNkYKLToxMEIxRDAwMDNEQzQ3NzZGQUY1MUEyMENFOUNGN0M0RkEwQkM3NjA3N0UKLToxMEIxRTAwMDMyNjg5RTczNDk5MUJEOUY4N0Y2ODZBRTk0ODAwMTc4NDAKLToxMEIxRjAwMEVCMUVERTdDNEYxOEU2M0Q5NzExQTlDMzcxMUFCQTZFOUIKLToxMEIyMDAwMDc2MThEODNGRDlGMEU2RTBCODBEQ0VDMDdFOTg2MkI5ODYKLToxMEIyMTAwMDBBMzgxRDBFMjVGQ0ZCMDYyOEVCQkI0REY0ODJGRjhFODEKLToxMEIyMjAwMDA2MTRFMkZCMDUwRTE2RTk0REJEOTg3RjkyRjIxNDlBQzIKLToxMEIyMzAwMDFGMTFFRTMxQzFCRjIwQzc0MUYwOUU3OEQwNDNGMEE2NjgKLToxMEIyNDAwMEU0NjkzNDRFN0QzMDQ5NEY0QTQ3M0EzMjVEQ0QwNzc4NDQKLToxMEIyNTAwMDMyRjVCMTA4RTc1OTA1RTQxM0Y4RURDQzEyQzU0MEZDMEUKLToxMEIyNjAwMDMwODAwQkRGNzdERjcwRkQzRTk0QTcyN0M0M0FDRkRFMzYKLToxMEIyNzAwMDNGNjMyQ0YyRjM5OTBDREU3RURBOUYxQ0M1NzU5REQ2RDgKLToxMEIyODAwMDc4RERGMEE3NDYxRjQ3N0FBODkxRENBNTY5N0MxRDBBRTYKLToxMEIyOTAwMEYwNDE4MzgwQUI0MTczRTg0OTQwREY4NjA3OTdERDg1NDUKLToxMEIyQTAwMDc0NkVGMDZGQkIxN0NCRTM2OTQ2OUEwMkVGRkY3NEI3NzkKLToxMEIyQjAwMDkzMjFCRTExMUZERTdDNkMyRjU5ODdFRDc2QkNGQzNBQzIKLToxMEIyQzAwMDkwNDNFQjQxRkM4RDAwQkNCREJEQUIzRDJEODJGQkE2ODgKLToxMEIyRDAwMDhGNDVEQ0EzRTM3OEE4REZGOUJGRUY1M0YwN0RDNkY3MTUKLToxMEIyRTAwMDVGQUY5MDEzODU5OUY2NjNFMERGRTU5QURCQTg4MDcxODQKLToxMEIyRjAwMEQ4QTFGMUM0QjdDQjdEOUNGRkREQzU5QjQ2RTVGMDZFQzAKLToxMEIzMDAwMEE5MzFGRUQwQThCRTBERjdGNzA2NTFBRjQ3QkUwNUJDNjgKLToxMEIzMTAwMDJFNDc3OTk5OEFGODE4M0UxREY3OUI5QUQ1RDY3RDc5RTQKLToxMEIzMjAwMEQzQzg4REY3MkY4Njc1QUUwOUJBOTgxM0RBRDdGODU1QkEKLToxMEIzMzAwMDBCNUY1N0I1NThGOTFDRDY2REE5RkJGMjE4RDFBMTdCNEMKLToxMEIzNDAwMEI4RTBDRjRFQ0U5RjhDODVDNzg2QTdDNEY5RTJDQjAxNkIKLToxMEIzNTAwMDA3RTEwN0ExNzMwRDgxN0YzQjVFM0Y2QTc4Mzg4REZDNjIKLToxMEIzNjAwMDBBRTdDRDk5MkM2RDZGMzE4Qzc3QTYxRUY4ODdDM0M1N0YKLToxMEIzNzAwMDlDMjY3OUE4RUZGNjEwREZDM0NFRUU0NjNDMDE3RkJBREIKLToxMEIzODAwMEFCQTZDNEY5NDVFMkE3N0U1NzFCRjE2M0JERTBCQjg2QkYKLToxMEIzOTAwMDZEQzAzRkU5MjYzRUIyRTEwQkQ3QUNDQTc5QzZDNUY5MEMKLToxMEIzQTAwMDhDREExM0YwRDk3NzAyMUM2RTI5N0ZGNTJDNUNDNzlDRDAKLToxMEIzQjAwMDE3Q0JCNTJDODlDRTI1NDhDRkJCNkE4QzRDMUNDNTIwMzkKLToxMEIzQzAwMEJBRUUyODJEMTk0NkZDMkVFOEExQzZFOUUxNDVCQUE1M0EKLToxMEIzRDAwMENCQkFDMThFRTE3RTlFMjZFQTE5MkRDQTlCRTUwNUQwMjcKLToxMEIzRTAwMDVGRDBDOTUzM0UxMEVEODNBNkUxMkRDRTM3Q0I0NzUwMzkKLToxMEIzRjAwMDFGNEQ4NUZFMjMwNDNFRDg4MTE5NEY0RjFDMUQzRjZGMDIKLToxMEI0MDAwMEQyQzQ3OUEwM0EzM0M3NjA3QjNBQjNFQTNEMjM2Q0VCRjAKLToxMEI0MTAwMDY3ODVBQTM4MzdGODM5RkI4MENCMzcwNkY3RTM2NEIxODQKLToxMEI0MjAwMEJGQUY5QjM3NEVDMTdFMEYyODBBRUQzRjlFMEFENUMyQTMKLToxMEI0MzAwMDI3QUE0RDhGQzlDOTczODhGRENFOTBGQzRERTdBRDVCM0YKLToxMEI0NDAwMEU4MzM0OTYzMUMyNDE3QkZDOTg0MDM1NTg5RTNDM0NEN0UKLToxMEI0NTAwMDg3NjBDM0ZCQjRERTNFNjhBRkYzN0IwMzUxODZGMEYyMzYKLToxMEI0NjAwMEYzQTEwQzg4RDA2N0UyQUZFQUNBMTRENjY3ODI2MzlFNjQKLToxMEI0NzAwMDZGODRBNUZFNzFGRjBEOTZGRUI3NkFFMzJDRURCN0U3NkEKLToxMEI0ODAwMERFNkM2OTlGMUYyOEIwRDRERENDNzRBRTIzOUMwMzFDRjYKLToxMEI0OTAwMEVGNkU4MTY3NTNCQjNDOTdGQjkxOEU4QkM1M0E3NkI4QjQKLToxMEI0QTAwMDIzRkUzMEUwNkJCMTdGMkREMUEzQURGNDEzN0VENDRCREUKLToxMEI0QjAwMDNEN0U0RTU3QjdEMDI3OTMyNkFDRjY5MTFFNTFDOUU1NzUKLToxMEI0QzAwMDI3MDg3RjkxMEVFRDM4Qzg5ODM4OUZCOTZERTdBRDVEQkMKLToxMEI0RDAwMEZFRUNGQTY0NjMxRUU4M0QyOTUwRjkxOEZCMThFOTNEQkIKLToxMEI0RTAwMEE5QzMxM0VBMzc3NkZEMERDRTA4MDdGMjZCQjJBMEQ3RDkKLToxMEI0RjAwMDNDNjcyQTlEMUI1REQ1NUM5RkVCQ0E1REM0RjVBNURDNEUKLToxMEI1MDAwMDRGMTI1RDE3ODg3RUNDNzA5MERFQkE1NEFDNUZFQTVGNTQKLToxMEI1MTAwMEFGQjUzMkQ2MDc0N0YzOEUxMkFFNjcyRDBENUVBODM2NTMKLToxMEI1MjAwMEVCRTVCMkRDODJGRDI2QzVFQkM5QTE3REJBOUU0MENGMUEKLToxMEI1MzAwMDZDMTNGQzk1QTJGM0Y2QTU1RUE2RTIzOTI0REIzNzhBRUMKLToxMEI1NDAwMEYzNzZBOTM4QjcxNzgyMUMyM0RGODZCMTM0OURDRkRCOTEKLToxMEI1NTAwMEM1MzhEQjYzRkNDQUZBRjM2MURENEUwMTNGN0I0QTUxMUIKLToxMEI1NjAwMDExMEY0OUEyQkE4RjQ1QjZFNzE1MjE5RTBERUFFNDRDQUEKLToxMEI1NzAwMDBEMzM5MkVGM0YwMTc2QTFERjAyRDFBRjJDNkY3NUNGNzMKLToxMEI1ODAwMDY3ODE3RjNERDU2OTAxQjQyRDNDQzFGQUM3QkY1NDg4OUUKLToxMEI1OTAwMEZBNTE0QUMwQTFDNUY5OURFQzBFQTg4RkNDRTVGQzVFMUUKLToxMEI1QTAwMDkzRTkwRDUwQjNBMTFGMUIwRkUzNTU4QkY2NkEyMUNGMTIKLToxMEI1QjAwMEEzNTgzM0M5QzE0NTc2OEM5N0YzRTVFMDc2MENERjdGNUQKLToxMEI1QzAwMEU0N0MxRUIxQUYzMEU3ODYwMEYxNUQ5OEVGRkIwRUY4MkEKLToxMEI1RDAwMDhCN0NCN0E0QzZDQTU3Q0IyMjQzRjM1OTZGOUVEMEFGMUEKLToxMEI1RTAwMDY3QjAxOUM0Njc5MUY1QzQxNzFFRDE2N0M3RDg4MzYxQzYKLToxMEI1RjAwMDkyRjdBMDkzOTFCQzBCRkI0NkVBOUQ0NzgyMkYxMkZGNjYKLToxMEI2MDAwMDFGQzkxRDUwRjVENDM4QkY0ODdEN0M0MUM4QTk0N0IxM0EKLToxMEI2MTAwMEJEOTgyNUZCRTAxQzM5RTIxQUM4N0MwMEZBQjk1NEQ2NjMKLToxMEI2MjAwMEE3RTJERTJCRjRGMkY0RTBCMkRCN0NCMEFFRDc4QTVGQTcKLToxMEI2MzAwMEYxOUQ0QTY1ODNFQUYzNzY3RTlGMDhGRkMwN0Q3RUYzMjUKLToxMEI2NDAwMDg0QjdGRDA4Qzc2NjE3MzQ1RDhGQ0RCRkFBNDE3OEI2QjEKLToxMEI2NTAwMDYzQkQwNEZCOUZBRjI5ODNGNkVENDlCMkZFRUUyRTZDNkQKLToxMEI2NjAwMDdGMjI5OUQ3N0ZGNUNDMUY3NzE5MjFBMjA3RjE0RDhBNDgKLToxMEI2NzAwMEMwNzc4QUQ0Q0YyNzlCRjAwNjc4RjY4RUNDQTc3REM0RkUKLToxMEI2ODAwMDZCQzNBNzVENkY3NzBBN0REQjY5OTM3RkZCQkM2N0E1MDIKLToxMEI2OTAwMEJDMEIzQTBDQjZFRThCRTAwNUQ2RkJEOEQwN0NGRjhCMEEKLToxMEI2QTAwMDNDM0EwRjlCMkQ3QzdGRjEzODdEQTQ5RkFGMTBFQjc2NDkKLToxMEI2QjAwMEE0MUNDODhBMjQ5MERGMThGRUQ3QkI3RTZFQjYwNzAwOTQKLToxMEI2QzAwMENGREY1NDUwQUZENUUxRURFOTlDNTU3MDFDMjVGOEYyNjEKLToxMEI2RDAwMEVGRjE3QzU3NzYxOUMzMTE4RjRFRTg4MEU3QjgwQjJDMzkKLToxMEI2RTAwMDQwODQ0N0NBNjMxMkYyODExM0YxREU0N0VENzA5RTBFNkIKLToxMEI2RjAwMDI4RTM3MDkwNUExRkYyQTcwMkZEM0Y0MEZDNUNFRTNFMkIKLToxMEI3MDAwMDU4NjFCNTEzRERCODdFMThDRkREQ0RDQTNDRTk2ODM3ODYKLToxMEI3MTAwMDM2RUVERjVDODhFNzk4M0I0MEZBNTdGNzg1MzJBNDEzOTIKLToxMEI3MjAwMEI0RUIxRTJBMkZFODc0N0VGQjFEOTY3M0U1ODVEMjNGOEQKLToxMEI3MzAwMDlDN0YxNDU4QjNCM0RGMTlGMEMwN0IxREQ4MDBGMDc0QTAKLToxMEI3NDAwMDg2QkVDRDUwQkY3RTc3MzIwQkUwRTJFQjIyQkU3OTZFMzMKLToxMEI3NTAwMDBERTVBMUVGNDRDNzg0Mzg3QzI3NUE1OTdGQjkyQjVFODkKLToxMEI3NjAwMEVGM0Y5OEU0RDY2MEIxMTFFMzVFMkZEMkU1QUQwREVENjkKLToxMEI3NzAwMDUzOUU0MzNCM0JFOEYxQTFERUQ2QkZCMURFNDA2NDlDNjMKLToxMEI3ODAwMDE4NjNGNDIyNEVCQkQ0MDg0M0ZCRERCREUxN0ZDRUMzN0EKLToxMEI3OTAwMEZERjM4NENCMDgwQzg3QjI3QkUzQ0VCQkYxQkNEMkI1MDIKLToxMEI3QTAwMENBOEE2QzgwN0I3RkI3NUExMTRENjBDRjdDMjI5RkVGOTUKLToxMEI3QjAwMEFGNDc1RUI4NzNGRjY2RjQzNzhDNzEwNzkyNjA5RTAxRTUKLToxMEI3QzAwMEY0NUYwMEZEQkE1QzQ2MTY4RTdGQTJBRDNEMEJFNUEzOEIKLToxMEI3RDAwMEFCQkUyQjcwMTBGQkI1NzkwMjM0RkY2RTZGMEQ4RURCQTQKLToxMEI3RTAwMDk1QjVENkJGRDYzNEJFRjcwNjc3MzMzRUVGQkZERUVENTQKLToxMEI3RjAwMDFFNDdFQjc5MjdDRDBGRUJFOERFNTAzMDAyNzlCMzczQUIKLToxMEI4MDAwMDhDN0I2QzIzQjYzN0FDNjMxQUU4ODU2RUJGRTE0MkZFRDEKLToxMEI4MTAwMEYyQUE2QzE3RUUwMzM3RkEyRjdDN0YwNkRBNDM5QTYzOUQKLToxMEI4MjAwMEZBQzdBMUZGN0Q4MTQ4NzkzRUQwQjFBNkU1RDQzQ0Q4QzYKLToxMEI4MzAwMDAxOTlCQjNDNjMxMzlFM0Y5RDAyNEVCOTBGNDlGQTBFMUUKLToxMEI4NDAwMDhDNjlGMDYyQkZDRTQ4MjNGN0IzRjgxREY1NDhFNzg1NTEKLToxMEI4NTAwMDYzMUM2MURDN0YzQTQzNkJCQzEzQzVGMzc1RTkxN0UzRTYKLToxMEI4NjAwMEE1MTNGRDJBRDMxMDRFNThENzE0RUNGNzdFNkIwNEZBQkIKLToxMEI4NzAwMDBENjRCOTZCMTJFMTMxMjJGMEU4NkQ1Rjk3RDMwMjcwNkQKLToxMEI4ODAwMDc3RUVGNkZBMTAzRjlENEE2NDU3M0RFMENCQzg0RTBENjcKLToxMEI4OTAwMDNDQUU1REZDREU1M0UyM0RDOTFGNDAyNzkyQzM0RjNDRTYKLToxMEI4QTAwMDNCN0FCNzMxMUVGNTUxNEU0N0MwOEJENzY1M0ExNzlGOEIKLToxMEI4QjAwMDlFNTZCNjI2REZFNEJGQjg2OERFMzE5RDc0MUU3NDJBM0EKLToxMEI4QzAwMDVDQUU5RjdBNzZFQTZFMDNFQTgxNDBFNDZFN0NBRkFCQjEKLToxMEI4RDAwMDFCNzg3OTFBQUQ3MzJDRUFGMzgzQzlDRjgwNjhFRjZDQkIKLToxMEI4RTAwMEYzRDQ0NDEzQzhGRkMwNkEyNzlCMzQ4Qzk3RDc0MTM5REYKLToxMEI4RjAwMDcxQTM3M0FDOTIwMDNGMDM1OTBEMzlEOTc4MUU0MEJCMzgKLToxMEI5MDAwMDAzQzYxOUQ4RURFNTI1M0NDRjgxRTc2RjBFQzI5RjUzRTIKLToxMEI5MTAwMEYyRjk3OTNFNzk2QUI4MURFOUNGMjY0N0M4OEZGNzcyRTgKLToxMEI5MjAwMDVFNzgxM0Q1RDk0RTNGREExNzFGMDFGRURERjMyMUUxMTIKLToxMEI5MzAwMDVGM0EwRjIzRjkzNzEzN0YzMURGNzA4QjVFM0FEOEZFMDEKLToxMEI5NDAwMDE5MTZGQjcxNUJFOTFGOUFGMEZDREY1QUVDRDEzQzI2MUIKLToxMEI5NTAwMEJGOUZENDkzOTMyNzczN0QyNDNDRTFCMTAwRUNEQzZDNTIKLToxMEI5NjAwMDcxNzAxRDNGMkYyQkI5RkZDRjA3N0YxM0Y5RkZDMjM2MzAKLToxMEI5NzAwMEZGNUZCMkFEMkVGNUNGNDNGOTQyM0YxMTdBNzBBNkI2MDQKLToxMEI5ODAwMDMzM0MwN0VEOEI1NzlEODEyOEQwM0QwQjVGMTg4OUZFMTYKLToxMEI5OTAwMDMxMjVEQTk3NkQ4MkY3MjZCNzgwOTdFQjZCMEJDNTc5NjcKLToxMEI5QTAwMEY0QTM1NjJGMkI5RkMwNjI3NkRCNzJCMThFMDU0REVGNEMKLToxMEI5QjAwMDNDODY3NkY0MDJBMTY3MzIyNDNFQ0M1RjNEOTk5RkRGM0UKLToxMEI5QzAwMEQyNkU1Qjg0OUQ4MTQ1OTdFNzcyQkIwMDJDMkI3RURFOTcKLToxMEI5RDAwMDM4MkI4QjkwMUYxNjMyQUI3RUI3ODhEOUY0QjlENTVDNjMKLToxMEI5RTAwMDFGOTNGNkRBMEE5QkZFNjBCNzBCQUE2REVEM0I2MENFQTMKLToxMEI5RjAwMDdFRDRGQjU0QjA0NjAwQ0VGNzgyMDUzQjBBMDBFRUJBNzcKLToxMEJBMDAwMEUwQTE0RDAzMDlGNjlCRTM3OERFQzA3QURGNjhENURGNUQKLToxMEJBMTAwMEVDODA3MzY3NTNGNUQ3QkQwM0YwRkU1NkI1RDc4QjcyMzQKLToxMEJBMjAwMEIyQjVGMkQzNjkyODI3NUI2QjlEMjQ4RjQ3NUIyQkE4QTcKLToxMEJBMzAwMERGNkJBRDYxMkFGRjJCM0YyM0U2RkZFQTkzRjYwMUMwREYKLToxMEJBNDAwMEIxMjBBMEJGOEZGQjhBRDREM0FBMkJDQkRFRUMzMEQxQTAKLToxMEJBNTAwMDc3NTFGOUFEOTY3QTM4NTRGNTY2ODdERDdGODk3Q0U2QjMKLToxMEJBNjAwMDY0Q0Q4OUZDNkU1MzBCQTQ3RjQ1QjdGODM5OTlGM0E5Q0YKLToxMEJBNzAwMDQwMjQ0MTdGNTkwMjFGQkQ2N0M2NTc2QTgxNTVCRjNEQUIKLToxMEJBODAwMDEyOUMzQjZDMjhCRDQ2QUU1QkUyNEJFMjQzQjYwRjA2MTAKLToxMEJBOTAwMEVGNkZGMkE1MURGMjk3QzE5QjczODVGMERBRTE5NEYwODgKLToxMEJBQTAwMDBGRDYzRjhDOUI1OTA5QzJEQkI2REM0ODQ1M0E0NkYyQkIKLToxMEJBQjAwMDBCMDBDRkQ1MTUxOTJGQTE0RkUyMEQ5NUNCRDMxQjdBRDMKLToxMEJBQzAwMDVBRDQwMDc4NUU5QUNDRURGRDk0NUMxNjQ1M0ZBRTlENEQKLToxMEJBRDAwMENFMjkxNUY1RjM3MDVGQkIxNEJEOTM0MzBBRDlBMTRCNzIKLToxMEJBRTAwMDc0MjVBQUMzM0Y2RjExNzZFOTk2Qzk4Q0VDRDJCNkQyMDEKLToxMEJBRjAwMEFGMUQ0RTJCQzQ3ODg3OEI4OTdEQTY3MkJFQzk4RTRBMzYKLToxMEJCMDAwMEE5RTU3MTg4MUQ2RTE2RThDM0Y3QTZBNDA2MzZDMkYzMzAKLToxMEJCMTAwMDZBOTQ0Mzk0Q0ZCMEVCQjREOTBGMDI3NkQwNjlCMzFDQ0EKLToxMEJCMjAwMEQ5Rjc5QjE0NUJCQ0ExQUE0MEU4REZEMzAxRUZFM0UyQTUKLToxMEJCMzAwMDc4MUZDQzBFMTk4QzRGQzA3QTI4QzJGM0NBOEVBNzdCMEYKLToxMEJCNDAwMDZDRjhCMUM3MjNDMjA3QUFBQ0VEOTc2OUZGRUNFRjJFRTIKLToxMEJCNTAwMDdDNjkyNEVBMUJFNTRBNjAwMkUwRTM3NTZDODJGNzkyOTcKLToxMEJCNjAwMEY1NjcyOEVDQjFCOTQwRjBBNUIwRUJBQUE1NURCNzA4MjAKLToxMEJCNzAwMEVDNzkyMEMxMTFENDBCODY1MTVDNjkyQ0ZBQTVFM0VCNUEKLToxMEJCODAwMEUzNzY1QzIwQTA3RkJBQTA2ODcwMzg4RTg5RjdCQUFBRTUKLToxMEJCOTAwMDEyRUIwQkM3NTA1Rjk4QzZDQkVCQTA5Q0I4Njg2RTU2RjMKLToxMEJCQTAwMDIyN0RFMTU4NzEyM0Q3MTdBMDFERjU4NDYzQkIyQjc4NDQKLToxMEJCQjAwMDA5Q0ZDREZBMDJBQjI4QjgwNDVFREE2OEJENDkxMzBBOTIKLToxMEJCQzAwMDg3MjU5MkJCRDdBNzQ1NzYyMkJGQ0I3QTRBNkUzMzJCMDcKLToxMEJCRDAwMDM3RjE0OTUzOUVGRTQwMDFDNTM1QjhERjQxQ0UwN0U3MzYKLToxMEJCRTAwMEZDMjFCMzNFNjY5RkVGOTk3QzFGQzc3M0M1MDgzQTM3QTcKLToxMEJCRjAwMDY0NzkyOUZBQTlCRTY2ODY3Q0I2RDVBNUQ3NjA5Q0MwQjMKLToxMEJDMDAwMEVFMzc3QUE2ODBDNzI3QkE3M0Y0MjY2QzY3QTlGOTk3MkUKLToxMEJDMTAwMDE4Qjc0REVFRDdCOTc5QTM0RDdFNEI5QjVEMjhFREE4QTMKLToxMEJDMjAwMDdERDg2OEIyMEY1NTFGQjcwRjkzMzMyRjFDRjI0MUQzNDUKLToxMEJDMzAwMERBODJDOEYzODhBRjU5MTdBMjg2QTMxMEUzQTkwQUU5RUMKLToxMEJDNDAwMDUxOUU0Q0U2MjJGRkM5RTVEQTYzOTdEOUFGN0IyM0RGMkIKLToxMEJDNTAwMDdGQkExQUI4REZCRDJDNEZBNTdBNzJDNEI5OUZFMjQ4RUIKLToxMEJDNjAwMEMyNUYxMzE2Q0I0OEQ2REYyMTdCNkMwMUU4MDNDMjNGQ0QKLToxMEJDNzAwMDQzN0FENTA5RTFENzBBQjM2NjE3REE3REE5QUVBODk3NEEKLToxMEJDODAwMEUyQkUzNkZGNEM0REE2QTM2RjIyRUMxRjM1QzEwQkQ1OEIKLToxMEJDOTAwMDFBQzUzOUFERkU5RDFBMkRFN0QwMjhEMUVFODM3MjQxMjkKLToxMEJDQTAwMDk4RkI3Qjk2QTJCRjA3QzdBRjhFNzZFN0UwQkUxNjUwMjMKLToxMEJDQjAwMDAzM0FFM0Y2MUU5RUI3Q0IxQUVGOUJGMjkwNzZGNUZDQTMKLToxMEJDQzAwMDNERDI4RjI0RjU0NkU5QUY4MkYzQTU3QjA0RDI2NUFFNjEKLToxMEJDRDAwMEEyOTEwRkMwRTYwRkIyRkI3RkMyQzIxRjYzRjcxM0Q5NTgKLToxMEJDRTAwMEZENDJCRjJEQzgyNjdBNDgzRDRDRkE2QkRFMkZCMEVBRTQKLToxMEJDRjAwMDYzRkYwOUUyODFGREI2MTRDMzUxMDZGMkJEQzVDNUIyQUEKLToxMEJEMDAwMDc2QzJGOEU5RkFCMkRCNzA1RjdFQURFQzE1MUZFQTFCNzQKLToxMEJEMTAwMEZGNTk2MEYzNjc1RUU2RkVGNjYzRDg4N0NFQTBCRUY2RjUKLToxMEJEMjAwMEUyMTgxN0VBREQ1NUNERjVFNDM3QjRDQjg5QkY5MEVGQzMKLToxMEJEMzAwMDczQzk4NUE5OTY3ODcxN0Y2QjhCNzgzRkM5QzBGM0E2Q0MKLToxMEJENDAwMDZBQkMzQjlBMDQ2QkFBRDJGOTM4OTcyQjRGMTk3OUZBM0YKLToxMEJENTAwMEM4QzI1MTY0OTc4Q0M2OTIwNUMwMkU5OTgyNzY4OTkwOEMKLToxMEJENjAwMDdCQzFERkFDN0MxNDNCNjM4RTkzN0FDMTVFNDkzM0MzRTUKLToxMEJENzAwMDIxRDY3MTg1RjMyMzhEQ0RGMzVDMEE2RjNCNEE0QkJDMTIKLToxMEJEODAwMDZFRjQ0NzAwMkM0RUNFNTdCRTk4OUYzRTA3RkQzQkVCMEUKLToxMEJEOTAwMDM1QjM1RTUxODdGMTg5MDJENDNGMTU4QTUzQzhFNzI2MkYKLToxMEJEQTAwMDNGQjk4QUZDOUI5QzE5RDFDMzA5RjZENUU1ODUwRTRCOUEKLToxMEJEQjAwMDlDMzRFNjY3Q0Y2NTE0MTc5MkUzQThDQ0RGNDY3MjgwMDcKLToxMEJEQzAwMEIyMkFFMTcxMjZGMEM3MEI3ODFCMjU5RkIzODBENzgzNzkKLToxMEJERDAwMDcxREU2RDRFQzZGMzBGQjg5Q0M4Qjg4MzVBMUNBRUM4NEUKLToxMEJERTAwMEM2RjhGMDI2MjU2MDEwMTQzNTg3NTBCRjVGMkRFNEM4RDMKLToxMEJERjAwMDJERkM3MEY2NzhEMTZBMjk1N0NFRjVBNEE3MzVFRUI0OUMKLToxMEJFMDAwMEM2RDFFQzcxMzFCQjdFMkVGREZBMkE0QzgyNzA3RjVFNkEKLToxMEJFMTAwMEQyMDkwRTc4RTdEMDc4RDg0N0VCRkMzQkM1ODNFNEMzNjIKLToxMEJFMjAwMENBODJCQkZDOThCRkQyOTkxNEQ5NTU4RkYxRUIxRTJGNTMKLToxMEJFMzAwMEY5NDVCQUIwMEJDQTRCMUZGQzQ1N0Y3QjRGRjBEMTJEQTMKLToxMEJFNDAwMEYwNUU3N0ExOTNERUVCNTQ3ODNFQ0JBMTMxOUZBM0ZENEEKLToxMEJFNTAwMDQzRjI1OUI3RTBCMzlCMEEzNUVBRTdDNTdEMDk0NDg4NDgKLToxMEJFNjAwMDY1NzJCQjU2RTZBRkJDMzY4NkVCQUJFRTEwQ0ZGRjc5MDIKLToxMEJFNzAwMDJBRjNEMEVCNjUwNDJEQ0Y2M0M5MERDNUYzNThDQTAwNzIKLToxMEJFODAwMDNGNTMwNEZFNzIyN0FDMjYzQjc2NEE4OEU3QjE0QzdFQ0UKLToxMEJFOTAwMENFNkFCN0RFOUVFQkIyRDQ3M0VENzZBQkFEQkVBNzUwRTMKLToxMEJFQTAwMEVDN0JCNkZDOTU3ODNDNkQxMUU5NjExMjdFQkI1QzdENDQKLToxMEJFQjAwMEI1OTVDNzU1QkUwNjc2MkI5NjRGQjVGQUE4RkNENzU2NTIKLToxMEJFQzAwMDNGOTVCREFEMUFFOTY5Q0ZCNkU2NzJCRkJCQzBGQjU2NjAKLToxMEJFRDAwMEQ3MDUzQTE3Q0Y2NUI5MjkwRjQyRkEyOUE1QkZGQzNCMTAKLToxMEJFRTAwMDg1REMwRkM1NDIxQzlFODU2MjRERjM5Qzk5NjkxOEU3NUQKLToxMEJFRjAwMDNBMUFFMkZBRTE2MEZCQ0NFMjBBNkIzQzZGNDlEODFBQ0QKLToxMEJGMDAwMENGNUI1NjYzOERFNzdEN0FBQTdFQTAxMEY1QUFDOUJGRTQKLToxMEJGMTAwMDdCRjU1MUU0NzkxMTdGNUEyM0YwQjBFMzIxMUU1RjkyNDMKLToxMEJGMjAwMEUzMUZGRDAyQTdCRkFDOUYxMzc4RjgzRUYyMDdDNjhGNTAKLToxMEJGMzAwMDBFOEE3REY0QzFBQTVCNjgxRkY1RTU1Rjk2NUU3ODVDQUEKLToxMEJGNDAwMEM4NjdDQTQ2OUYyQjAwRTM1N0Y1MkQ3N0UzMzg2Qjc2MTkKLToxMEJGNTAwMEMxMzhBOTk3M0ZDRUU2MDlBM0IzQUNGMTg2NEZERTgxODUKLToxMEJGNjAwMEVGMUY4REM1MUJFRUI5MDNFMzBENDc0NUJDRTFGQzczMjQKLToxMEJGNzAwMENENUY0NjdCRUJBNjQyRkQyNzg4MDc0N0ExN0UxMkNCMEIKLToxMEJGODAwMEYzMDhDRjI4QUEwRkUwQjkyMkVCRjBFNzcwQzZFODIxNEEKLToxMEJGOTAwMEZERkFFNzBCMTNGOEY1OUQ3Mzk1ODRGNkU5M0I4NURDMTQKLToxMEJGQTAwMDlFODZGM0VCOTdGODFFRjNDNkZDNkExNzc4OUQ5RjUzQTUKLToxMEJGQjAwMDZBMTE5RkJGRkQ0N0FDMDlDNzY5RkYzNjZCN0EzNjgxQUUKLToxMEJGQzAwMDVFRkZDNzQyNDU4RUY3M0IzQTBGRkRGMjNDMENGRjIxNjYKLToxMEJGRDAwMEQxNzg0RTRGRDU1OEM0RjczOTE3Q0Y4M0IxOEZBNzE2RjQKLToxMEJGRTAwMEI5RTU3ODhFMjI3QzI3MzMwNjlGNUE2NDFBNkYwN0UwRTIKLToxMEJGRjAwMEEwMUZFOUE0RkFEMjI4OEVDOUVFQTY3OEE3RTRBMzk0REMKLToxMEMwMDAwMDNBREY3Q0NDNTMwMDAzOTNFMTNFOTNGMkJDNkY3RTIxNzgKLToxMEMwMTAwMEU2RDlGRDYwNUNFMDcxMzYzODVEN0YyNkY4RUJCQzkwQjgKLToxMEMwMjAwMEIzQjc1MUNFNDA5RUNFQTI5QzQxNzkxQUU1MEM5RTBGMkIKLToxMEMwMzAwMEEwOUM0MTc5QjIzNTQwQ0Y3RkRDMUFBNEYyNDdBRDNBREIKLToxMEMwNDAwMDk1Mjc1QTJCQThGQzQxNkI5OEZBMUQ2QkFEQTFGMkY1MTAKLToxMEMwNTAwMEQ2MDgzRDNGNUFGRUY1NUIyODlFRjY5NDQyNzk1NTgzRkIKLToxMEMwNjAwMEMxNzNENzU3QURGMjc1NjdENDJBNUZFQjc2NTlFNTZCOEMKLToxMEMwNzAwMENENEU2QkJDQkNCMURCMUEyRkFGMzdBQ0YxRjI1NTJERjYKLToxMEMwODAwMEQ2NzhGOUNBRTY5OTk2RkUyQjlBRTY1QUVBQ0IyM0I3RjgKLToxMEMwOTAwMDVCRkEyRkFCNTk2Q0E5RUI0NTVDNUY1QzEyNUU2MTc5NzIKLToxMEMwQTAwMDZGNzE0NUEzQTU1RkNBMjIxNjQ5NDRGRjhBMjJDRTlGMUQKLToxMEMwQjAwMDA3NDMwNUMzMDY4NkQ4NzdEQzJEQjdGRjA0RjU5NDU4RUYKLToxMEMwQzAwMDVEOEQzMEQ0RUJERDJEMEJFOEY5RDZBNDcwNUQzOEMxNjEKLToxMEMwRDAwMEY4NzU0NTdDQkZFQjJDNUYxRDlFQzNEMEZGN0I4QkQzRDcKLToxMEMwRTAwMEFDRkZBQzlGMTY1OTU0NjRCMjczREQ3RTZFOTdCRDNCQjYKLToxMEMwRjAwMEZFQkQxN0YxOTg1ODU0RkVDRTRCRDdFMTM5RDVDRjAyOEIKLToxMEMxMDAwMDBBRjA5NTBFNkE5RjFGQjZFQzIyQTNDRDc5MURENEFCMjEKLToxMEMxMTAwMDMzQzE4RTM0QURCQkY4MzNGQkRBNDdDM0YzOTlFQjVGMjEKLToxMEMxMjAwMDk4M0IxMkNBRkNCQzQ4NUQxMURBNTExNUE3REFGMUZENDMKLToxMEMxMzAwMDM5OTU3OTJBOEFDREQ2MEM0NjdBRTlCOTA5NkVCMjc3NTMKLToxMEMxNDAwMEVDNzA3RkFBNDhCMUM0QjNBRTc0OUZFRTZDQjVDNkU1N0YKLToxMEMxNTAwMDczRkMzQ0ZFOTVFM0U3RjEyRUE4NTNCQ0VCRTk2OTkxMzMKLToxMEMxNjAwMDRGMjE3Q0YwOUNFMjVFNUQ1OTZCNzM3MDNGMTkyQzhFMDEKLToxMEMxNzAwMEY0OTBBMDk3RjQyQjQ4Qjg3Njk0NzI3ODhFOEE3OEMzOUUKLToxMEMxODAwMDEwN0U4NTJGMTY4RDFBMUNFRTczMjIwRUQxRjUyNTRGQzkKLToxMEMxOTAwMEMyRjhDQjM5MTE4NzM4MjdFMzEwMEYyRDRFMTg4NzM4OTYKLToxMEMxQTAwMDM3NEZGODE1QTAxREZEMDlFNzc2RDdGMDcyNUVFMzkwRDIKLToxMEMxQjAwMDcxMDhCOTNFRDg4RjFFQTRGRDI3MTY4NzEwRkFCRUYwNkQKLToxMEMxQzAwMEEzQkYzRTRERkY1RkI4OEVBNjNDN0QxN0Y2N0I3RjhBRUUKLToxMEMxRDAwMEJFMUJFQjQ3NERGMTUwREY2ODUzM0NCNEZDMTU0QjNDQTQKLToxMEMxRTAwMEY0OTlGQ0M4M0U3QzZGMjI2RTY5MzA2NEJCQzEwNjkyMzQKLToxMEMxRjAwMEM2NjE3QzM2N0M0RjIyM0VGRTk3MjJBOTY3RjdGRDQ1M0IKLToxMEMyMDAwMEYxNUE1MzVDRDVGMUMxQ0RFQ0IyRTMwMjk3REQyRkM4RjIKLToxMEMyMTAwMEYzNTBFQzdBNEUwQTYyMDQ4NkU4QzZBRTcwQ0UzRTU5MDAKLToxMEMyMjAwMDE4Mzk4OEVCRUZDODc4NUVFM0Y5NTY4RUY4RkU4MTg3RkYKLToxMEMyMzAwMDlGNzY3OUYzMjUwQjNCMTVDRjJCM0NCNzhFODFDNEUwNUQKLToxMEMyNDAwMDNFQjMzREEzOTlGQzJBRkQwMjZGRjZGMjhEMjI0MTRGQzkKLToxMEMyNTAwMEU2MUI4OUY0N0RCMjMwRkMzQUQyOEYzREQ3QUI1MTFFM0MKLToxMEMyNjAwMDlCNzhDRTcyMkZDRjVFN0RDMjFERkUwOUVFRUY5RDczQ0YKLToxMEMyNzAwMDlDMUFDRjFCNjRFNEJGOTg5NEVCOEJBMjdFMkJGNUIwODUKLToxMEMyODAwMDVGRTI3RTQ5RjkyODAzRTNEREIwQ0U3NkZEQzU1NENDRUMKLToxMEMyOTAwMEZGN0U2QjhGOEExOTMwRUMyQjY5Q0M4NTcwODc3MzYxQjgKLToxMEMyQTAwMDdGODM3NUNDRjE0NzZFMUM2QTVGQzQwNDFFNDc5MEY4MEIKLToxMEMyQjAwMDQyNzFGOEE5MUNDMTRCNDNDMUU3RjZGRUFGRUQ3OTZGOUYKLToxMEMyQzAwMDE0RUFFNTVGRTlFMUYxQjA0OTNEQUJCRDBEQTZGMTczQkMKLToxMEMyRDAwMEE2RjM3REE3MzM5M0MzNUZBNzJCNTEyRDFCRTFCOUYwQzQKLToxMEMyRTAwMEZEMTkxODZGRDExQ0U0RUY3ODZCQzM2RjhFMkY0M0ZGREQKLToxMEMyRjAwMDYzQzgxOTk4NDBGNTc3QTlERUFGMzkwQTMwN0VGRDk2RkMKLToxMEMzMDAwMEZGRDdDN0IxRkZBNDJGQUMxOTREQjY4RUMwQzdBQTBENzkKLToxMEMzMTAwMDA1NEYyMDNFRUUwQjQ0OTRFOTMwNEY3RkU4RERCNDcxQzkKLToxMEMzMjAwMEE2NzhEQTJBODU4NTEzRTkzMTYzQTY3M0JBRERBNjM3QzQKLToxMEMzMzAwMERGODFGQkU2NkRCQTg3NjE1RTczN0Y5OTg3RjBGRTk1QkEKLToxMEMzNDAwMDU5OEE4NkY2RUU0MkU0NzU2ODBGRUY1MUM5OEYwREY4RjEKLToxMEMzNTAwMDU4OEZFREFGMDY1MjE4Q0UzQjQ3N0Y0NkM1RkFGQjUzQzgKLToxMEMzNjAwMDE0NzZERDEwRTdGMDE1RTMzNUY0RUUyODk0QzNCNzkwQUEKLToxMEMzNzAwMEZGMTJDMEZGNEJCOTZGMEEzOTlBQTg4MkRDRTcyM0ZFOEYKLToxMEMzODAwMDBGQTU5QUZEOTU5MjlGRkVBOTUwMUYzN0JEMDhGRDdGMEUKLToxMEMzOTAwMDkxQTYzMEU5Qjk4QjJFQzE4NzFCMDkzRjBCQkYxQUE1QTcKLToxMEMzQTAwMDE4ODRFN0IxRTZFQjU5ODJGQjBEQUYwOUY5QjAzRjJGRDYKLToxMEMzQjAwMDlDQ0VDRkM5NUYwQkI5OThENEYzREVBQkI3NjI5Qzc5NDIKLToxMEMzQzAwMDgzOEJGMjExNkUyQTBDNEY0Nzc4NjI3NkQ3NTVERTM3OTEKLToxMEMzRDAwMDY0QkU1QTdGNTAyMUZCMERENDY5OUFBNzFGMjQ1MDA1RDMKLToxMEMzRTAwMDdBMjUyOUM5MDE0RTRGRUVBN0YzOEFGRDBGRkFFOUMzNUEKLToxMEMzRjAwMEEwREYyQUQ2REI4N0ZFM0VBNkVBM0I5REQwN0Y3M0IxNDUKLToxMEM0MDAwMDhCRThCRDZDQTUyQjBERTkxMjhGOUYwNTJDRjY4NkJEMjAKLToxMEM0MTAwMDFDMTA3MUIzQ0U1NjJGRTU2QkY0NzczOEI5OUUwRjdGQTEKLToxMEM0MjAwMDQwMTM4NzQ2MUVCNzY3QzY5NDg3NzVGOEU3MTMyMjhGQjcKLToxMEM0MzAwMEY0OTNDMTVCMUZDNjdDOUFFMzBFNUU2RjA4REU3QUMzN0QKLToxMEM0NDAwMDQ2OEM3QjhGNkQzRUJFMDRFMzE2MEYyODgxMzYwRENCRTQKLToxMEM0NTAwMDdEQkIxQTMwQ0ZBMzQ1MDk1NDQwQkRBRUVGRjM3RTc0QzcKLToxMEM0NjAwMDg5MzU3NDc4NDhDNzNGQjU2OTEyRTk4OUVGRkE5OTBGQTEKLToxMEM0NzAwMEY1QzQ2NTYzQjhEQzM0RjZCM0E4MjMzQjZFRTc5RUNDMDUKLToxMEM0ODAwMEUyRjExM0I0NjNFNzREQzc2RDk3RTNFMzlGNUJGQjA4RUQKLToxMEM0OTAwMDdFNEYwQjhGOUIwQzBGRjBCODY5NzJCRjFBODg0Mjk3QzIKLToxMEM0QTAwMDhGNkY3Qjg3RUNFMEIwREZBRDIxOUU0NzMwMUU1Nzg5NTAKLToxMEM0QjAwMDY0QTYwNjMwMEUxQUY0RjNCODRBQjI3RUVGRjEyNUYwMDYKLToxMEM0QzAwMERFRjA3Mjk1RTdCNzBENzA3QkI4MDlGRUUyMzkxMjYxQjQKLToxMEM0RDAwMDgxMzZEQzlGNDY1NDU4RURFNDQyNUI3QzQ1OUU2RjFFREUKLToxMEM0RTAwMEZCNzMxNUVDNTE3OERFMzZERDdBQ0Y2MzMwRkZCRDJDNUYKLToxMEM0RjAwMDlGMDMzRDAyRDdGN0JDODhFNzdFMTNGNDc1QTREM0I3M0EKLToxMEM1MDAwMDQxNUZDN0YyMDBFOEVCRjhGQzdCQTBBRjYzRDkwN0ZBMDQKLToxMEM1MTAwMDNBOTYwNzQxNUZDN0YyMTBFOEVCNThCRTBDRkEzQTk2MUMKLToxMEM1MjAwMDg3NDE1RkM3RjdGRTBGRThFQjU4QkUwQUZBM0EzRTdGMzUKLToxMEM1MzAwMDZFMTZERjQ3M0FCM0RDRDE4RDgwNjdFRjlGODA4QjAxQTkKLToxMEM1NDAwMDJGOUQyRUY2NjNFNDJGQTNDQ0EzRjE3QzdDREVBRjJCRDIKLToxMEM1NTAwMDYzMjJFREYzRkQ0QUU0MTM4Q0U3ODE2ODhGNjMzREVEQzAKLToxMEM1NjAwMEMyMUY3Rjg1RjU0REQ5NjQ4NzMwNTVGQkU2MDBGNEVGOTcKLToxMEM1NzAwMEY4N0M3NjYwMEI1NEJCRERGQ0JDMUYzOENBN0NBODM3NDYKLToxMEM1ODAwMDlDNUVBMjRDNDVCREU5Q0M3Q0E1NTcwMUZEQTY3RkJFQjMKLToxMEM1OTAwMDQyRkFDNDQ0MTRCREZDRjgzRTVBRjI5RUI2MUZFNzZCNDMKLToxMEM1QTAwMDRGNjM4MjFGRjdGNUU4QzA3RkE3MTEyNkUyRDdCNDNBQTAKLToxMEM1QjAwMEI0OEY2NzdCNjQzREI5MEVEQkVCNUIxNDYxQTdBNkVGMUMKLToxMEM1QzAwMDQ1RkVFRDkyRkQ4REVCN0FCMDdGODdBRDdFQ0MyMUVCMDEKLToxMEM1RDAwMDREN0JCMDdFM0MzNjVGRkQwQTFDRUY3ODhFNkM2RkE4RjkKLToxMEM1RTAwMEQ1RTFDQzE4NDg5MkYzQ0Q1Qzg5RkRGQjE1RDkzRkFGNUUKLToxMEM1RjAwMDA3RURFNDMzNTlCMkZGREExNUQ4N0UyNjY2NDczRkI2MTkKLToxMEM2MDAwMDkyREE0N0YxRkU5M0JFM0JFMjExQjQ5QkFGRjY3OEVEQjAKLToxMEM2MTAwMDExQkUzRkMzM0VBNjlCRTMzQTJEMjVEQ0JGMTBGMzlGMUUKLToxMEM2MjAwMEVBOEFDNTdGMkFGREY2OEU5NERBRUIzMEVFRTZEOUM4QTkKLToxMEM2MzAwMEYzQjQwNkIyMDI3NTc4NUUwRkU2NDczNUY5RjlDOThGOTMKLToxMEM2NDAwMDNBQkIyNDc2N0ZDMEVBMkZENTE1OUU0N0VGNjMxMUNCMDYKLToxMEM2NTAwMEZEMzY5MTI3RUZDRTM0RjlFRDg0QUM1RjhFRkY1MEM2RTYKLToxMEM2NjAwMDRCQTRGRkIwNDYxRkRBN0Y1ODMzQ0JFQTNGOTQ3OTEyRDAKLToxMEM2NzAwMDgzRjkwRkU1N0QwNEU5M0YwQ0FGQjZGQTA3MTc0NkFFMjQKLToxMEM2ODAwMENDN0Y1OENCRkE1QzY4NkYzMTVEMjE3OUE5RjVGNUJFOTYKLToxMEM2OTAwMDM0MUFFREZBQjMxQUY5MEY5OTc2MzgxQUJCN0ZBMEQxODQKLToxMEM2QTAwMDMwOUE2MzNBREUyM0UzRjVEMzc3MkI3RUI0MUZCNkRDRjIKLToxMEM2QjAwMEFEOENDNkYyRTRERENBRjUyODQ3NjdFRjU2N0MyODU3RjMKLToxMEM2QzAwMEJGOThDMUVGQjcxNDlEMEYxQ0Q2NzA1RkY1M0IwMjFDREQKLToxMEM2RDAwMDFERTEyRkUwM0UxQzVFOURBMTZENDFCQURFQUQwQ0M3OTEKLToxMEM2RTAwMEZFMkIzRjkzRTFDNkYzMDNGNDRCMjEzNzFGM0M4QzdDQjgKLToxMEM2RjAwMEU1NEM1MTJDRjVDMkIxOTI0RkY3M0M4QzcyMzE3Qjg0RTIKLToxMEM3MDAwMEU0QzNDNTdCQjA1RUU2OTZFRjdGNzEwRkNBQzlGMjg4QkQKLToxMEM3MTAwMDIyRkFERkJCMDdFNUYwRjgxQ0Q5N0Y3ODJERjY1RjMyRUYKLToxMEM3MjAwMDRFOEVCNzc3MEY4RTNGM0I0NUQ2MUZBNEY2RUVEODc4RDYKLToxMEM3MzAwMDVGQTNGOTdFODgyNzIxRDVCN0VERDFDN0MzN0M1NUUyMjkKLToxMEM3NDAwMERDMzIzRTQ2RTM3N0Q2Q0FGN0VGRTkyOTgzRjE1Njg4MTMKLToxMEM3NTAwMDczOEExOTFGMjczOTI3M0YzM0JEMEY3QTNBRDRGRjVERkIKLToxMEM3NjAwMEVDMDMwRDMzN0VCRjAyRTVFNjhFNThGQkVGNjlCREI1RTUKLToxMEM3NzAwMEEyQkU3QUM2OTM3QjMwREZFQ0VGN0U3RDdGRTVGOUVDREQKLToxMEM3ODAwMEY1OTVBQzdGREU3NTg1NzFCOUIwOUY4QkNCOEJGOUJFMEIKLToxMEM3OTAwMDEyNkM3QTA2OEYyNzU2REJCQ0NGODlGMjg4N0UwMDExOTcKLToxMEM3QTAwMDdGQUEwRTIzN0Y3QjlEOTQzNzE3RjY4N0M5RUY2OTFGRjkKLToxMEM3QjAwMEU3RkQxOTVDQ0ZGRUNDMEM2QjNDQUREMzE2NEYwQjYzODEKLToxMEM3QzAwMDNDMkQ3QkYwNzFFQThBRjkzOERENzMxMkRCQjM0RjRGRjEKLToxMEM3RDAwMDlCRDMzQTYzNTQ1QzNGNDA1NUQwMEQ2NTI5OTQwRTI4OTUKLToxMEM3RTAwMEZGMzQyNUIyNjk0NjExNUVFNkUxRkUxNkU5QkY1RTIwMjAKLToxMEM3RjAwMEYyODhEQjRBQkYxQzlFODNGNzkyOEE1RDAxRTFGRUVFNjAKLToxMEM4MDAwMDM3Qzc3N0Q1NkREQ0ZGQkY2MkNFMDVDQTBCNUJEM0U5QjYKLToxMEM4MTAwMEQxRjY2MzFFNEI4N0M4NTM3M0E2NTJGQzQxQkRDMUJEMDAKLToxMEM4MjAwMDhGRjY3OTExM0Y4RDYwQkU3MTBFQ0UzM0Y0QkQwREZCRDYKLToxMEM4MzAwMEZEMTk0M0FDRjdEREQwMTYxN0VFREIzNUU1NkE5RjVCREIKLToxMEM4NDAwMEM0OEY3OUJFOTgzNUJFMkNFM0M1NjU3OUUzMjlBRURDOEIKLToxMEM4NTAwMDk4RTlBNUJDRTIyQUNDMEY0MUQ5MTBGMUVFM0FEMUJGM0MKLToxMEM4NjAwMEIxRTU4NTMwRTJCRDdFQTc5M0ExMUU3OEE1RjFFNUZBN0EKLToxMEM4NzAwMEIwOTFGNTM5Nzg3RjQxNzkxQUQ3RTc2Q0YxRTY5QTg2NUQKLToxMEM4ODAwMDI3NzUxN0I0MUYwNTVDOEZDMDBFMjI1RTJFRUY4NUM0N0UKLToxMEM4OTAwMEVFMUY4ODM4NzQ0NDNDNUYxQURCRkYyQkQzNzFGRkY0MjIKLToxMEM4QTAwMDc0ODExRDg2RUY4QjM4QjM4QzQ3NTdEOUNFODFGQUQwNkYKLToxMEM4QjAwMERDNzRGMkQ3MDY1NEIyMUZENTRCRENCM0NFMjlFMUY5QjQKLToxMEM4QzAwMDY4MzIxRTdENzg4NjM1MUVCREQ1QzVGRDdGREQzOTU2QTMKLToxMEM4RDAwMDdFMkIyOUUxRjZFQzI0NzFFRTFFMkM0REVFNEI0MkZEMzEKLToxMEM4RTAwMDlBNzlDOUNFRDg4MkZFOUE2MURDREU0MEZGODRERDZGODIKLToxMEM4RjAwMEEzQjZBQzIwRkYyMkI2MkJDMDdGNEFFRUNCQkZDN0ZCNEUKLToxMEM5MDAwMDZBNTgyRjgxRkUyQURFNTc4MTc1QThBOTBFQkFBRjI5NzEKLToxMEM5MTAwMEZEM0JBODg2Q0NDQjI3M0ZDRjQ5RTQ2M0I1QTU4RUM2QTcKLToxMEM5MjAwMDkxRjdEMzA3RjNGM0ZDNkM4NkQ0MEY3QTVERDg2Rjg1NEIKLToxMEM5MzAwMEZGRTUxMzM4REY1RkVDRTcxMTc2OTZFQzFGRDY3ODlFQTMKLToxMEM5NDAwMENCRjAxOTlBOEM1QkJBRjhGRDNERTY1QTM0ODVGQzIxOTAKLToxMEM5NTAwMEVGQTE3Q0IyQzlCRDFBQzIyMUY3QTM0NUM1Q0ZBRUMwQjUKLToxMEM5NjAwMEZEODhFOUEzRDgxOUQzQkQwOEZCQkUyMEY3OEJEODdDN0UKLToxMEM5NzAwMDdFRkU3RUREQjdCRUJCQzIxODM5NzhCQzIyMjcxNDhCODEKLToxMEM5ODAwMDJGQTg0MTlDN0ZBNDhDMkZFODJFQUNDN0NGNTk1ODUwQkMKLToxMEM5OTAwMEQwNzJDRUQ2MzZGRDM3Mzg2NzYzRkFCRDMxQjYxNkRCQjYKLToxMEM5QTAwMDNGNkFGMDAzNUZDRDBFNTJCRTE0RjdCMzdERDRFMDdGMzMKLToxMEM5QjAwMEE1NDg1RjhBN0M3OEFERTdGOTU2NTE3ODM1Q0VCMzU5RjIKLToxMEM5QzAwMEQxNkI1Mjc5MzAzMEEwMEMxRDE3QkMwQkZCREJFMzgyMUUKLToxMEM5RDAwMDk3RjI1N0ZDQzMzRjMxQjQ3RkUyNEI0MTZCMUNGRkMzNUUKLToxMEM5RTAwMEUyOUZGODY3QzAyOUVFOTMyMDRGNEY5MjNDODVCODNDRjgKLToxMEM5RjAwMEZEQkRFRjdGQjBERTU3Qjg1Q0Y0NDY5M0M3NUQ3REZGQTkKLToxMENBMDAwMEMwOTM4NTkxNjM4OENGODk1QTZBM0Q5RUUzMzA4Rjg2QjMKLToxMENBMTAwMEYyMTdGMzdCMjBEQzQxOEJERjYzNEZEMzM1RjA3QkMwMTMKLToxMENBMjAwMDNBQ0YxMjVEQ0IzOTVERkYwRUU4RjY1Rjc0OUVFQjVDOEEKLToxMENBMzAwMDlGRjgzQkU0Q0JFQjhCOTE1RUJEN0M3RDdGODNGOTNGMjAKLToxMENBNDAwMDQ2RjMzRkM1RjkyNThFMUZBRTI3OTlGMDUzREJGNEI3QTcKLToxMENBNTAwMEMxNEYyOUMxRjc0RDBFREY0NzgwOUVENTA0NkY4MEMzQkIKLToxMENBNjAwMDdCMjlGQkZCQ0UxOTNDN0UwMkVGQURBMEY3MEEzOTFGRjQKLToxMENBNzAwMERDODVGQTM1QjdDQkU3NjJCRTgwQjRDQjMzRjJGNDU1MzAKLToxMENBODAwMEQ4MEZGNERDN0EzRTRGNENDRjZEMjgxRTM1QTREREJDQTgKLToxMENBOTAwMEI2Nzg2OEJCNzk3REYxNDdDODZFREUyREYwMTY4RkNGNzIKLToxMENBQTAwMDQ0RTkzRTFDOUNFNDE0NDdBRTEzN0RCN0I0MkNCRUVEQTQKLToxMENBQjAwMDI2ODBGQjM3ODA3RkFDN0I3MDNENEVEMzdBQjI1NEIyNzgKLToxMENBQzAwMDlGRURGN0Q0OEU4ODNDMDhCOTJFRDU1OTNCMENGNTA4NUMKLToxMENBRDAwMDg5Q0YyM0U5OUExQkVGNDMzNUU4NEEyNzI2MDNDRTM1NTEKLToxMENBRTAwMERFQTE3NUJCNzUwRkU5MUYzN0ZBN0Q5RDE4N0Y1REFDMjAKLToxMENBRjAwMEYzRjVCQjlCN0M3NEVGNDVERTczOTNGNzRFMUFGQUM2RDEKLToxMENCMDAwMEJDRUM4NkY3QjY4MEZEMzIwNkM2NUY1ODZFQkQ4NzYyMDQKLToxMENCMTAwMEQ3MkY1NDVCQkRFNUM3RDlEQjBGOTlGQTNGNTY2Q0NCRDUKLToxMENCMjAwMDFGNzQzRTU1NDFGOTQzODY0MjdBMTcxM0Y5ODQwRDYyMEEKLToxMENCMzAwMDhDQjZEMjNCOTJGRDVDOEZEMzEwMEY3Mzc3M0VEMDhGQjMKLToxMENCNDAwMDcxMzNCN0UxQTRFRjMwRkRCNjU1REI3RTA4NDQyQTY5QTYKLToxMENCNTAwMEYzQkJCNEJFREZDMEZBQzhDOEFERTRGMUZBNDYxMUFGMEEKLToxMENCNjAwMDY3MzYzRjg1MjdGOUU3MkVGNDRGNEIzQzI2RERDRkYzQTAKLToxMENCNzAwMDNDRENDMTUzRTU3NEFGQjE3NjREN0YxMUVGNEJGRTA3M0UKLToxMENCODAwMDk1NDNDNkU0NzczNUFBQzQzODU1M0FDRkFCNUNFQTc3MEIKLToxMENCOTAwMDU4RjI4NEVDN0UwQzk1QTlCNkJDRjg4MTk3NDYyMEJGNkMKLToxMENCQTAwMDAxNUVCRjhDRUM5MUNCRkQxMEM5NENBN0VGNzAyNEI3OTAKLToxMENCQjAwMDJEMUVENjg3RERDQTVEOTZFRkExMkMwQ0REQ0JDQ0Y2MDEKLToxMENCQzAwMDcyQjI4RDJGM0QzNjdGODM5RDJGRURGNEY4ODE4RDFFM0YKLToxMENCRDAwMDhGQUI1QzJGRUQzQ0U2MjQ3Rjc5RTc4M0FCQkJEMTdGNDUKLToxMENCRTAwMDZFM0NFODIwN0ZDNjU5OTkwNzAyNDBBMjNGN0YxOThCMEYKLToxMENCRjAwMEUxOTdGNEU1Q0VFNjhDMjhGQUUxMjU1RDk2RURFNEY5QkYKLToxMENDMDAwMDIxRDRDQkU0Nzc2NzJDOTM5OUJGQ0ZCMTRDRjgxN0VFQzIKLToxMENDMTAwMDYwQkQ3NEJGNjEyNTFCNzBBMTFDQUM0MjU3QkExM0ZERTcKLToxMENDMjAwMEUyMUE5NThEQ0NEOEM0MDg3RjkxRUU2Qzk4RUZGMUU2QUUKLToxMENDMzAwMDExMDFGNDZCRjc1REVGQ0E3ODNCOTdEQjExODlGNEQ3RUMKLToxMENDNDAwMDc4NUM1NjY1NkY5QkZDRkNGRkYwNkI1REFFNUZDQjY5NUIKLToxMENDNTAwMEQwRjdGREZDRUUyODdFREZFRjUyN0VBRDk3NDUzQzQyREIKLToxMENDNjAwMEZBQjVDRUVFRTRERkQ1RTgxN0Y3MkFGQTVEREFEODlERkIKLToxMENDNzAwMEE5RDg0RkUzREZDQkU4NUU3NjFCQzJGQkRBRTY1NzdDMzAKLToxMENDODAwMDAzQjQ0RkIyMERBMzg3RkUwRUM0RDQ5MjA0NzZFMUY3MkQKLToxMENDOTAwMDY3MzA5RTE3OTczRDkwODVGOTk5Mjc1REQ2QkM1QjU5MDMKLToxMENDQTAwMENFMEZCOUM1QkRFQ0M4OEMxMjkzNUVDQzdDQjEzQ0NEMjcKLToxMENDQjAwMEUyMTJGMjU3RjFGQkQ5RDJDRkI0QjYyMDUyOEFDRjY3MzUKLToxMENDQzAwMDVENjA2NDBGN0EyQTk1QTg4MkY5MTlBOUNBNEI4QTE2NjEKLToxMENDRDAwMDlGOUZEOUYzRTVGRjExMDdFM0RGQjcxMkY4RTk0RkUyQjEKLToxMENDRTAwMDc5QjNGREQ5QUNFNkQ5MDRGNEM5OUVDNUNGQ0ZGRUJDNUIKLToxMENDRjAwMEM0RjQ5M0VEQTA5N0RDODNGNDQzQkIyOTlEMzNDQkNGRTEKLToxMENEMDAwMERENDNGQjEzM0U1QjkyMjBDRjU4RDJGN0M5RDlGQTdEQTEKLToxMENEMTAwMDlDRUVCQzlFOTQxRkY5MDJENkRCMjNFMTlGRDBGN0VCN0IKLToxMENEMjAwMEI2MzlCNTM2QzQ3RjlGNzYyNDg4RjJGOTQ1QTcwRkUzNUMKLToxMENEMzAwMERERDczQUJFMzc3QzQ2RjY2NUM1Rjc3RTgxRjgxRDQ1REUKLToxMENENDAwMDdDMkZGNEM2N0ZBQTQzM0Q3MDhCQjRDQjg0REVCODYyREYKLToxMENENTAwMEI4QTkwRTVCNzFDOTMxREVGRjFCMjVEM0Y3MUFFQUUwRDMKLToxMENENjAwMDdBRTZGQTAzNzdGNEEwMUUyOUY1NENBOEFGQzRCQTdDODIKLToxMENENzAwMDlGQjFEQkM3OTY4MTVFREJEODI0RTM4OEI3RUY0NTNERTIKLToxMENEODAwMDM3M0VERjkyQkRBODA3OUY3NTU5Qzc5NzdBRUEyQjI1RDIKLToxMENEOTAwMEU1N0I3MUJDNzA2Q0ZFRjJCRDA4RkY4MDBEN0VGQURFOTMKLToxMENEQTAwMDI0RDRERjI4RDFGN0EyREU1QkNGNjRCQjRFRjkwMTcxM0EKLToxMENEQjAwMDdGRTI3QUIyNUI4RkJCNjVGQjI3Mjg1RjYwN0IzNjFGMDMKLToxMENEQzAwMEZGRDUwM0VCN0JGMDNCNjkxRjM2NzhBRUY1Rjg1N0RBRjkKLToxMENERDAwMDdGMzA3REZGQTQ4QkU3MDcxQUEwOUY2MTVFNDg5MEY1MjYKLToxMENERTAwMDNBQjlGMEU5NkUyN0YwN0Y4OUFFRDA3RUY0RUIxMDk3NjgKLToxMENERjAwMEQ3NzBBQTQzQ0NEM0QyNDM3QzUxMkFGMTFBQTUzQzhGRDkKLToxMENFMDAwMEMxRjhFRUNFMDNERjc4MThENzFEODdGQjFCMkI5MDBFRTEKLToxMENFMTAwMDMxQjg4REY1NzVFODE3OTI3MDFGQzVGRTMwREU4QTdCM0MKLToxMENFMjAwMEVFRjQyMzlDMkI2MjdFOERCNjFFRUNENzk5MjFFQjkzRkEKLToxMENFMzAwMEY2NjI3REIwNzk1Nzg2QjZGNUUwQkMyQjYyRjg3OTgwNTIKLToxMENFNDAwMERFNUY5MTJDREZERjY1Q0Q0RjMxN0E1NjVBRTE1QTZEQTYKLToxMENFNTAwMEMxRTdGNzBFRjRGNDIwNUM2MTVGNzREMzY4RjIwNzMyMjcKLToxMENFNjAwMEZBRkVFNzFENEQ2RDk0QkYxRDk3QTNBRDU5MjQ0N0ZFRjMKLToxMENFNzAwMDU4QkRDNzJBNDc5RjI2QjhBRjM2NUNCMDlGRkE2N0UyMTUKLToxMENFODAwMEY5OTVDQkVEQzNBQkJGNkVEODI3NzFERERCMTQ1QUI3NzQKLToxMENFOTAwMEU0QTM1QTlGODlERkUxOUM2QkQ0NjRGRDlFQkFBNkM5QzYKLToxMENFQTAwMDU3NjM1RTZFRTc4NjdGQ0VFOEZDOTNGMkM0OEM4ODREQjQKLToxMENFQjAwMDdFMkU2RkJDRjZENDFDQ0E5RjAwRkI0QTRGOTQ2RjdEMzgKLToxMENFQzAwMEQ3MEM0NUZBMzFFNzEwM0U4M0QyNkU2NjUyRUZCODY1NTMKLToxMENFRDAwMEU2Mjg5M0RFQTFDNUY0OEUwQUVBNkZEMzNCM0E0NTFFREQKLToxMENFRTAwMDU1QTdCODZGQTI0MzhCREY5NEU3MzM3RTE2OEZEM0I2NzYKLToxMENFRjAwMDhCM0NDREMyOERFMUI1NjYzQkZCODlEOTFDOUVDNzY2RDQKLToxMENGMDAwMDczMzk5NERGQUIzREQzQTQ1MDFFNThGQkI2MTFFOTk4OUEKLToxMENGMTAwMDNGN0IyQUQzQjcwMENGQjVGRTZDNDcwMEFGMkU5RjE0REUKLToxMENGMjAwMERGQ0JFQ0ZGQkMyN0VCMzNGMEZDNDQ3NjJBRDlBOTI3RjIKLToxMENGMzAwMDMyNzZBNkUxM0Q4NTUzMDFBNzM4Njc5RTdCOEJGQzVENjkKLToxMENGNDAwMDcxN0ZBMjgxRTc4QUY0MTdBRTlFRDk0RUZFQkYzNzM1QjYKLToxMENGNTAwMDVFMEZDQzdFRkUyRDhBQjdFNURBRUY3MTg2NDg4RjcxQzEKLToxMENGNjAwMERGMjJCRUQzMkJCRUI3MjlGNUE1QUE0RDhGN0U4OTZDRDMKLToxMENGNzAwMDYwQTFCRkM4RjNEMzdFQUYxM0ZGQjhDQ0ZBNTc4NzkzMzUKLToxMENGODAwMEVCNUY3RURFQ0ZDRjA2REEzRTMwRTlERERFNDFCRUYzNzkKLToxMENGOTAwMDVBMjNFRjExREFGNDI5QkI3RUNDQzQ3NzREQTU3RTlFQ0YKLToxMENGQTAwMDNDQjI4MUZDRkFDOTRERDY3RUE3M0E1RUFDMENDMkZBRkYKLToxMENGQjAwMEJBMDI0RUNBQjNCQTNERDdBQTQ3NEIzREVDQjY4RTQ3MkMKLToxMENGQzAwMEM5MEUwNUJERDBEMjJFRjM2QjZGNjdCRDFENzRGRjVCMUMKLToxMENGRDAwMDNCN0NDODM5M0E2RTc3QjRGQkFBNDg0RjY5Qzg4NTFBQkEKLToxMENGRTAwMEFDRTdGOEZGMjg0QjJCNDJGRDYwOUIxM0JGRjBDQTczRTAKLToxMENGRjAwMEVCNERFQjgwN0UyRUM3NDhEQUE3MDM4QTYyQ0UwNzZBMjQKLToxMEQwMDAwMDdCMDRFNTIyOUUwRkM0RUI3MTNGRkM3RDhGRTA3RTEwMTgKLToxMEQwMTAwMEYzMTdCMzdCNTY1OUZDOUJDNjMyRUExRkYzODcxOTYxOUQKLToxMEQwMjAwMDZBM0ZBMzBBRkY5N0IxRUExMURDQ0ZFMkZFQjExRkY2MTcKLToxMEQwMzAwMDU4RkM2MzQ2RTUyM0M4NEYzMkJFQ0E4Q0ZCMjlBRjZGNEMKLToxMEQwNDAwMEE5NEZDMkYzQTMxRUFDQjdFQkZDM0NGOUU2NzczQzI3MzMKLToxMEQwNTAwMEYxN0I0MDU3REExRkU0RjM3OTk0NDMxNkU2RkI5REJENUMKLToxMEQwNjAwMEJERTQ1OEI0M0Q1REU4NzVGODNEMEFCQjlDMjc4NTc4NjIKLToxMEQwNzAwMDdFNURCOTlFRDczMTRBRTM3RTJCMEZEMDQ3NUZFOTVDRDYKLToxMEQwODAwMDg5RkMxQUNGNTMyOUE2RUZBMjM1MEU5MjU3MzIyRkM0MkUKLToxMEQwOTAwMEU1RjdGMENDNTQ4QjNENkVDRjRGNjkxNDcxRThDMUM2RjMKLToxMEQwQTAwMEE5MkZFNTcxRjY3RUM1NTdDRENGNjUyN0MzNzNCOUVDQkYKLToxMEQwQjAwMDgxNzFBOTc4M0Q1NUY2MkIyREU1RkJDMTlGQTZFOEM3RTgKLToxMEQwQzAwMDcxRkQ3NjNGREE1OUY0QTNBMUFDMEE3RkM3MjJDMTNCQjgKLToxMEQwRDAwMEVBNEVFQjc3NEJDRTY0RjBFRjk2MkNEQTI2QkU5MzVFRTkKLToxMEQwRTAwMEYxOTdGOUNEQ0VDRkI0REVBQjFGMkNGRkExQjg5NEVGRjIKLToxMEQwRjAwMDYzNzlBNTU3MjdGRkUxODk2NDVENDc3QzlEODNCRUU4N0UKLToxMEQxMDAwMDE3QkMyODFGNDJFNDM5QzgzQzA4NzcyODg3RTc2RDMwRjAKLToxMEQxMTAwMDlFMEZEMTZFRjBFRkYxNURGNTdCMkNEMjJFMjkwQ0E3N0UKLToxMEQxMjAwMDg0RjA1Q0E4RTFFNzg4RTRCM0JFOTkxQUU3QkZGMzAxOTUKLToxMEQxMzAwMEUyM0ZDOTc3RDAzRjIzODQ3QzVEQ0RGQjk3OUNFN0RGM0UKLToxMEQxNDAwMEI3OTBGQTQ1RDI4MTkzM0Q2REUzRTkxQ0JBMkU2NDNFNTcKLToxMEQxNTAwMDg3NTI2M0Y3MUVDNzg0MTI5QzQzNDdFN0VBMzdGMEU3MUMKLToxMEQxNjAwMDg2Qzg2Nzg4REMxODJBNEFGODdFNzYyODgxRkQzQzc5RDMKLToxMEQxNzAwMDZBNzgzQzNEOEZEREQ3RDQyNzg0RkU5MUZGMDBEMzI2MEIKLToxMEQxODAwMENFM0I2OTFDMjRFRjQ0RUE4NUY1REZGQkU5NEEwM0ZBNEMKLToxMEQxOTAwMDdEMzA0NzVGMTAzMkQ5QUQzMUZENzI4MEVCM0IzMUJENDAKLToxMEQxQTAwMEQyOTg0QUZCRTIzNUQwMUI1Nzg1NEM3OTM1RDc2MEZDQzUKLToxMEQxQjAwMEJCODhFRjI2NUJGNTI4QjRGRkNEQ0YzRjZDNzYxQ0MwNTMKLToxMEQxQzAwMEI3OTFGMDIyRTIyNjdGQzZGQjVCNDJBNjc4Q0Q1RjAxRDUKLToxMEQxRDAwMERFNUQyMTkzRkVGRjIxQzRFNzUzODRDRjBGMkY3QzdEQkEKLToxMEQxRTAwMDA0NUYyNUE3RjdDQzk5MzEzRTdEMzEzMTFGNUMzNkZGQjYKLToxMEQxRjAwMEZGREY5MDI5NkU2RTFBRjcwODNEQUYxQzNBMkUwN0ZEMkYKLToxMEQyMDAwMERFQjBGNjhCQkRGRjAzRjNCODQzQkNGRkVGMDQ3RkFDODkKLToxMEQyMTAwMDVGRUNGRDkzRjQ1Q0YwRTc1NTkwRjNGMzY2RkE1RTgzMDAKLToxMEQyMjAwMDdERTQzRDVBRUY3ODNFRkVFOTkyRDgzQTdFNkI3RUZFNzEKLToxMEQyMzAwMDBGN0ZEOTI1RjkzQzZCMTZFMkFCOTlGM0QzNjVFOEQ5OUEKLToxMEQyNDAwMEUzNjZGMUZDOTYwOEY3RDMxQTUyQUY5OTI4OUUwRkUwRDcKLToxMEQyNTAwMEJERDEwNUM4RDdBM0U4NUVERTREMzhCRUNFQjg5RDFCNTQKLToxMEQyNjAwMEIzNEI4Q0REN0JBRDc2MDkwQzM0RDk3MkRFRUYzNURCNDgKLToxMEQyNzAwMDFERkFBQzdEN0IxMTVFRTc1Q0RFQkZFOEJCRTlBQjcwRkQKLToxMEQyODAwMEZERjYzQUU4MjUzMzY2NTlGMzMyODMzOEZGQTVDNkM1NjMKLToxMEQyOTAwMEY4M0ZCRDY3OEJGRjlCREFFN0NDQjJFNDJGNzAzRDE2RjkKLToxMEQyQTAwMDhFNzBBRjA3NjhGQ0MzNUFFN0M4MDZBODU3Q0VFMjdBNkIKLToxMEQyQjAwMDJDRTgyMTA5RUY2RjU3Q0U4QUY5MTMyQTY5M0U5MThGMjYKLToxMEQyQzAwMDcxMkNFQ0E0N0I4MDMxN0Q4NTc5QzlBRThBRTk1M0M2ODcKLToxMEQyRDAwMEQ3Qzg0RjE0RDdBN0ZFODVGOEE5NTREMDc3RDU3NzdCNDgKLToxMEQyRTAwMEVCMDQ5Q0NCRjhGQUM1M0EyRUREN0YyNUY1RjdGM0ZFNkIKLToxMEQyRjAwMDA5REFFQkE5M0Q5M0MzQzk1MjBGOUY3NTVBRTIxNTZDMjkKLToxMEQzMDAwMEJDNjM3NEZDNzc0MENBNUM0QjY2OEQwNDdERTU2MDA3QTYKLToxMEQzMTAwMDhGNDdENTc3MEJGQTFBREZEQTZCQjUxM0I5RkMyRDE3RTcKLToxMEQzMjAwMEZDREVGQUREQkUzQUU0RkZFNUVGNDk3ODlEN0NGRDMxOTUKLToxMEQzMzAwMDdGNUYxRkFERkY0REUxOTc0OEZCNUU5Rjg0RUZCMzA0MTUKLToxMEQzNDAwMDlGQzZFMUJCMDZFM0I3MTFERDE5Qzc0RjBEMzM1Q0EzRTAKLToxMEQzNTAwMDg3QzhCM0Q4MkNFODBGRUY3NUQzN0I1RTBFNTc0RDQ0Q0EKLToxMEQzNjAwMDcxRjFCOENCMjkxN0YyNzlERDMxOTZEMERGQjQ3Mzk2MUQKLToxMEQzNzAwMDVCQkVCRjkzREU0RjE1RjY2QzIwRjFCREREODdFMkYxOTkKLToxMEQzODAwMDkzODdBOEJGOEZDRkU3ODBGMzFGRUJBMUM4RDFCOTQwMjcKLToxMEQzOTAwMDFFRkNERTFDRDkzNUUxNzI1NUM3RUYyQzg0ODMxNzE2QUQKLToxMEQzQTAwMDMxRDM3N0U1NjQxQ0JDRUNGRUYxQkQ2ODBGMjY5NzI3RUUKLToxMEQzQjAwMDcxQkJEMTZCRkQ3RDBBQ0ZEQ0ZCNzIxRkQ0NDg1QUU5RUIKLToxMEQzQzAwMDNCQjU0QjA0MTM1NDMxNkI1QzM0NDE5Q0NCRTI3NzkxRjkKLToxMEQzRDAwMEZFOTEyNUIxQjg1NDI2RDlCOUVFQURGQ0Y3QTE1OEI1RTgKLToxMEQzRTAwMDM1OEU5OURDQzJDOENGQjVDMDUwQTIxQThDRUZEMUFEMzIKLToxMEQzRjAwMEZFOTZDODA2NkQzQkZBQkI1NEQ1MTVEMEI1OEJFMzlBQTMKLToxMEQ0MDAwMEY2REZCOTk4RUQ2NTdBN0EzRUU1QTM3QzZGRDZBODc4MDkKLToxMEQ0MTAwMDFFQ0FFOUVFNzFBOTI4ODc3NjNCRkFGNDYwNzY3NEI3RTQKLToxMEQ0MjAwMEQ1OEVFRTk3NzZCNDdFNzVFQ0U4QTNCM0FDNzZGNERFRDkKLToxMEQ0MzAwMDgyRjAxQkM0RUZBQTRFRkJEQkMxRDI5MjQ1Njg1RkJDRjEKLToxMEQ0NDAwMDJCRjIyODA2MUU1NEQzMTEwRkM2MzY3RTZGRTE5NDg4NDYKLToxMEQ0NTAwMEYzQ0I3OEZGNDAzMTRCQzVERjNCMTg2OEYzMTAzRTA3MzQKLToxMEQ0NjAwMEQ2NjQ0NDUzRTBCRDc0NjM1RDI1RkVDRTgxQjRBNzExM0MKLToxMEQ0NzAwMEYzRTgwNzkzREYyN0I2REJEREM5NDFBMEU3MzQxMjMzQjkKLToxMEQ0ODAwMEIyQjcwNzdDM0VCQUNGQkNCMDQzN0M0NzQyRTQwQjQ4RkUKLToxMEQ0OTAwMDdCNUJERTdCNkYyQ0U3RjdBN0QxNzM2N0ZFN0Q4Qjg1MDcKLToxMEQ0QTAwMEMyMUU5Nzc2NzlERkJGMzFDNTlDMDdCMDg4MDUyODlGREIKLToxMEQ0QjAwMEEwOUE4NUE5NUMyQUJFOUY1OEUzNjM5QjEwQThGN0E3OTIKLToxMEQ0QzAwMDQ0N0U0N0ZDQkY4N0YzMDlEQkFFRDJFRjU3MEQ2QzdCODAKLToxMEQ0RDAwMDgwN0UxRjZBQjBGQjBDNkFBOUJDQ0Y2MDUwOUNGNjFBMTQKLToxMEQ0RTAwMEQ4RkI0OUE1QTZGREUzMzJGNjlCNjFENDVGRTU3MkRDNkIKLToxMEQ0RjAwMDg2Rjc3QzQ3QzVCRjFGRDEyRkZDQzJEQjMzQjgzRjY1MjEKLToxMEQ1MDAwMDdDMjlGNzM3RDk0QkY5N0Q4ODJCM0QzRkUwRkNCQ0IxMzYKLToxMEQ1MTAwMEQ0NkFENzZCQTU5Nzc3N0U0RUE0RjdDNEY3Mjk0NjYzRTQKLToxMEQ1MjAwMDNDODhFRjRCMzc5NTcyQkQ0MDRCMjdCRjBBNkNEMTQzMDcKLToxMEQ1MzAwMEU3MDMwNDRBODc4OEVCQjI0QkU3MTMwNDRCMTNFNDEzNjkKLToxMEQ1NDAwMEZDNDJFODIzNkIwQjIyQjM3MEZDNTkxNzE4RjFBRDNENzgKLToxMEQ1NTAwMEVFMkZGQjFENDczRjU1ODJGREI2NTlGOERCQ0E4MDQ1Q0IKLToxMEQ1NjAwMDFERjkxN0RGREJGRjYxQUI3RTEyNzVCQ0UzQUQxNTU0MEYKLToxMEQ1NzAwMDlFNTA4RDM0Q0NERjNBMjJFRUVEQzMwODk0Q0YyNEYzRDUKLToxMEQ1ODAwMEEyRTRCODM1QjU2NTI3Q0Y5QUY2QUI4NUYzMUVBMzNDNjgKLToxMEQ1OTAwMEIzRjZEQ0ZEODcxNTgwRjM5NEM4RjdFQTRGRjM2RDQ3QzcKLToxMEQ1QTAwMEJGQjM3MTk0N0Y0NzZBNjlGNUFEMjdDRjlBRjYwRjNCRjkKLToxMEQ1QjAwMEJDOTgxNzY1ODBBOERGNTlDQUJGNUZGNzYyOTlBNzZGNEIKLToxMEQ1QzAwMDM2QzhFMUVBNkQ1QzBFNTc2RjNCRTU0MjdGNjY1RDRCMDYKLToxMEQ1RDAwMDNEOEI0Q0ExQkMyOTE1RTk3QjZDMjZGRkNFQzJDMkEwQjUKLToxMEQ1RTAwMDkzMTkyNkI4MzJGMkY0ODY1MjhBN0I4NDU3MTNCREUzMkUKLToxMEQ1RjAwMDc5ODE2QkIwNUVFNkQyRDMzMUFGNURGQTI5NjVEQ0EwRUMKLToxMEQ2MDAwMEI0RjQ2N0E0M0ZGNzY3MzA5QTNGRUM2NzUxOENCRkNGMDMKLToxMEQ2MTAwMEQ1QjNERDAzMTg3RkYxRkJDOEFGNUE1N0FBRjFERkFCRDIKLToxMEQ2MjAwMEVCRDg0N0YwMjQ4N0RFMjE3OENBNTRDMEY3RjA4QkYxOUQKLToxMEQ2MzAwMDJERTVBMjUzRTBEQkI0NkVDMkY3NjBGMkJCNzA5RTlBOTgKLToxMEQ2NDAwMDg2RjgzRDgyRjQ4MjdFOUJDNDNFRjA5QTdBMjFENTk3N0IKLToxMEQ2NTAwMDgwRUVCMUY3ODI2NTE2N0M3QkZDMTUxNkJBQjVFQkUzNUMKLToxMEQ2NjAwMEQyNzEzRDkyQ0VGNUEyRUQ3NDg3RjNGQjQ4QzdGNzMwMzcKLToxMEQ2NzAwMEFGOERFODk4MzgxRkUyMjhEMjZCMTJCNDk3NzI3RkI0NEUKLToxMEQ2ODAwMEE0NTc5REMxRTk1NTY3OTQ3MTNDMDU2Rjc1OEZBMTc4Q0EKLToxMEQ2OTAwMDgwRDI4QkY3MjUxQkNCRUIxOURBMEI2RTNEODNCRUZGRDcKLToxMEQ2QTAwMDJGRTlCN0E4MUNFODY3ODIxN0U0RjFFMTUyOTNERUY5OEQKLToxMEQ2QjAwMDY3RjhEOTFGMkQzNUU5QzFENzNBMEUwMEYzM0Q0M0YzODIKLToxMEQ2QzAwMEQ5RjM3MkZGNEE3MTg4OEJCRkRCQzNGN0REMzcwNUJGMjMKLToxMEQ2RDAwMEQ4NEJCOUVGMEU5QURGNkM1NEFFNkFGQTMzRTA5MDcyMTEKLToxMEQ2RTAwMDgzNzJEQkE2NjBGRUE0RTI0MjNFMEJBM0ZDNEU0MTdEQUEKLToxMEQ2RjAwMEVFM0YzNjYxNUNCNEMxQ0Y3QTcxMkY3QzA4RTUwOEYwNEIKLToxMEQ3MDAwMEU2QUVDODcwQTNGQ0Q0Nzc2NzEzNUZBMEZENEZGODE0OTIKLToxMEQ3MTAwMEZCRjQ0QkE1NEM5RTUzMjdFOTc5MTNFNzhCQkY3NUZDQUYKLToxMEQ3MjAwMDA3RTBCOTQwRjBENDhBRkIwNTFGQjJGODU0NTY0NTU4QkIKLToxMEQ3MzAwMDlEOERGRTU5N0QxRjlEMkY3RDMzRTVGNzlBNTgxNkY3NzUKLToxMEQ3NDAwMDkzNUY1OTNDRDRBM0YzRkMzMTE5MTc0RDEwMDdENTk0QkUKLToxMEQ3NTAwMDNGMjMwRTZBOEZBRjBFMTYxNzREMTAwN0I1RThFQjgzMDcKLToxMEQ3NjAwMEM1NDE5OTJENUU2QThGODNERUQ2MzE4MkUyRDBCNzY1REUKLToxMEQ3NzAwMDNBMjhGRjUxRUFGRDMyRkVGOTZBQzdEN0U5N0I0N0FGODUKLToxMEQ3ODAwMDRFNTY1ODQ2RjZDNTcxRDI2REMyM0ZDNjUwQUIzM0FENEEKLToxMEQ3OTAwMEZGNDQxNkZGREVGNTk2MzE1RUZBOEUyOEZFNzE5QUYyOEUKLToxMEQ3QTAwMEYxRTA3Q0YwN0E2MERFOEU3OTRFRDI0QkFCQjJGN0RCRTMKLToxMEQ3QjAwMEYxRUExNjc2Qzk2NUUxNTVDNkQ5REQxRDNDQ0VFRUYxMUMKLToxMEQ3QzAwMDMzRkEzRDRENDlDN0Y4Rjc3NDlGQTdERjhCNjQyQUNGMjIKLToxMEQ3RDAwMEQzQUJDRkY1NTE1RUFCOUQwRTlFOEVCNjdCRTk3NzlDQTkKLToxMEQ3RTAwMDdDRDNENzUxMjlFOEVGRjE1RjlDM0ZBODRBRjgxMkU0QjcKLToxMEQ3RjAwMDBGRkVEOUY0QkMwNDFERERDRTBENUUxNEI5OEJFOEE5NzMKLToxMEQ4MDAwMDFENENDNUVGOEFERjE2NzBGQTM0MkQ0RTQ3NDlENzhCNzEKLToxMEQ4MTAwMEU5RTdBM0ZENDVDNkI5NkYyQTBDREY4NTcyMjNCRkQzQTQKLToxMEQ4MjAwMDI0RTk3QjIyOEJFM0Y3Q0M0RDJDMkFCRjRGNjZBNjI3MzkKLToxMEQ4MzAwMEUwNUZBNzdCNzdCOTZDMUZFMTFGRjMzMEE3NUVDQzE3QzEKLToxMEQ4NDAwMDlFNUM4MzdFQzdEMzlENUNFOTI3Qjk5MkY4RDUwRTEwMDQKLToxMEQ4NTAwMDVEREE5QjdEMEI1MDdGM0E1QUVFQTJCQzk1MDRGQzQwRUEKLToxMEQ4NjAwMEJGNUI3QjI5N0VCODg4RUVEQkY4RUY4NDVFMjlGREVFOTYKLToxMEQ4NzAwMDI4N0U1Q0NGNEVDMDFGRDc5MEFFMTVDMTQ0NzRDNTdDQzYKLToxMEQ4ODAwMDg2QkY4MEFFMjc4QUY0Qzc5MUFFOTI5RTM3MTVFQTVGQjUKLToxMEQ4OTAwMDk5NUQ2NDk2NUY4M0RCMzEyQ0YxRjc2RDlFMTY3OTJEQ0YKLToxMEQ4QTAwMDMwQ0VCRkUyN0JCRDY4NjM5MUZGNTBFRkM1RkFFMjFCNEIKLToxMEQ4QjAwMDU5NzNBMkVGODIzRDVCQzZDRkRENUFENkZCRDI2OEI0NjYKLToxMEQ4QzAwMEZCQ0UzMjkxQjcxOTM4QUNBMTlGQTY2NTVDQzJCQ0NEMjYKLToxMEQ4RDAwMEUzRjg2MTIxRThCRkQwQ0ZGNjM5QzRGRUVBMzBFMTY5NTAKLToxMEQ4RTAwMDQwRTQ2RkJFODlGOTlCNjBFN0JFM0MzQjlCRDZCMTA1MjcKLToxMEQ4RjAwMEYzMzhFMUY5Mjk5MUU3NTk4QjYzRTMzQ0EwQ0Y2MjdDQ0YKLToxMEQ5MDAwMDlFQTkxMTg2RjdEM0ZCNjNERjY3NjlBMzczMzc5RThGRTgKLToxMEQ5MTAwMEYxRUI0N0FDREY2N0UxRjU4NTk5QjIzRDM1NkE4OTgzNjQKLToxMEQ5MjAwMDMyN0YwNEVEQjZCOEZEMzUzNTZBMzlFRjU4MzA2MjhENzcKLToxMEQ5MzAwMDgzRjI3QzFENzlCRTZERDRFNzQ0MEM3MzFDOTQ1NUQwRTIKLToxMEQ5NDAwMEY4Mjc2QjY1RkYxREQxQjJDOUU2MzhFOEUyQTg2RThFRjQKLToxMEQ5NTAwMDczMUFGM0EzRTYzODI3OUNBRjU0OTc3RUU4QzdGQkVFMTMKLToxMEQ5NjAwMDhGQTA1RTNGNzk2QUU0M0NEMjVGREU5Qjg3MDM0OEM3QTUKLToxMEQ5NzAwMERGOUQ3M0ZCN0RGQkQxMEUwN0ZCMDBBRkU0MEZBQTU3QzEKLToxMEQ5ODAwMDdGRDhDQkZGMEYwMkMyQjA2OTAwODAwMDAwMDAwMDAwMEEKLToxMEQ5OTAwMDFGOEIwODAwMDAwMDAwMDAwMDBCRTUzQzBENzQ1NEQ1RkYKLToxMEQ5QTAwMDk5RjdDRDdCRjM5MzY0NDIyNjAxNzQ4MEEwMkYwMURDQUMKLToxMEQ5QjAwMDU4NDMxODdFMDIwMTA5QkNGOUM5NEYxNTc0ODBBMEIxMDMKLToxMEQ5QzAwMDIwN0Q4NDJDQTU1RDVBODM5NTk2NzZFREU2NDE2MjQ4Q0MKLToxMEQ5RDAwMDgyNDBFOEQyRURDRkU5Q0Y4OEQwM0RBRUVFNjlFODcxNjQKLToxMEQ5RTAwMDI5OTFEMjBFNjIyOTk2NEE2MzRCOEVCMTRCNzVCMDU5N0MKLToxMEQ5RjAwMDE2NUJEQkEyOTVEQUVFRjE5NEZEQkVFRkRFM0JGMzY2M0IKLToxMERBMDAwMDMyMzEyOEI0QzdFRThFQzc3MzczREZCREY3QkJERkY3QzMKLToxMERBMTAwMERERUZGRkREQzc5REM1OENCMTA1RjAzRkYzQzYwQzhENzIKLToxMERBMjAwMEIxODExMEZDMzkxMUZCN0VEMzgwQjE5NTUzNjRCRjIyQzQKLToxMERBMzAwMDY2OTQzM0I2Mzg0RkY2QUI0QzYzMjE2MzlEMkVCOTlFODYKLToxMERBNDAwMDU5MENFNkJGQzA5Q0Q0REY2Njg0NEM2QjJBNjNDMTY1NjkKLToxMERBNTAwMEFBOTg1RjRGRjA1RjVBMkRFN0VGOEUwNTAxREUyQTg3MDcKLToxMERBNjAwMEU4NUIyQjYyODY5N0IxMEYzMUQ5NUY0QUZERDVDOTdFM0QKLToxMERBNzAwMDk0RkFGNzMyQkVGRjgxRjg0RUQzODJGNThGQ0Q4OTRFRUUKLToxMERBODAwMDM0QzZDM0IzNDhBRjFFOURGRUI3ODdGRjM5NDVFMjMzQTYKLToxMERBOTAwMEM1QzRGMUY3M0JCRUMwRUY3QUEzMTJDMTczN0VGRjBEODAKLToxMERBQTAwMEUwQkI4NkU0RTMzMEM3Rjc3RDg4REZGREM0Q0YyNzM4Q0QKLToxMERBQjAwMDdFRUYwMzdDREEwOTlGNUVDMDI3RkYyRkJGREYwRjJCQUQKLToxMERBQzAwMDhEM0RCOERGNUY4MDhFQUZEMUI5OTc3MzNBQUU2MEZFRkYKLToxMERBRDAwMEEzNDQ3NzgwOUY0M0U2RjhDNEEwOEYzMTFDOUZDM0UxMjUKLToxMERBRTAwMEJERTgxNDcyNjQzNTlCMjhGNzA5RDlDNzczODNGRTgyOTkKLToxMERBRjAwMDMzNzJCRkNEN0E1MEIzRTNCRjk5RjQ2NDU1MTE5RkZGRTEKLToxMERCMDAwMEVCRjhBNzREQUIzOEQ1ODc5RjgxRTcyRUQ3RkYwNkM3MjcKLToxMERCMTAwMEQzRDY3RjhBRDY3NzY3RUNFNzEyRTNDQUIxQUQ4NDZGQkMKLToxMERCMjAwMDhBNUU4QkU2Rjc2N0NDNkYxNEY0MTUxQ0VCOEM1OTM2QzQKLToxMERCMzAwMDdFMzA2QjNCRjEyNzY5OTdBQzlENjQ5NzA2NUNCMkJGNjIKLToxMERCNDAwMDgzRjQ2NjU3MDk4NzNGRTFEOENFMThFMjBGRkMzQjQ1QzYKLToxMERCNTAwMEZDOUVDQUY5RjdGRjlEMUZCRjM1ODRCQzk0NzE3RTQ4QjcKLToxMERCNjAwMDM5N0M2QzhFRjEzQjk0QjNGNzFCQkU3MDdFNkE3MDdDN0YKLToxMERCNzAwMDRBRkVGRjBBRkIxNUQyN0U0MjlGREVFREZBQTQzRTBBNjIKLToxMERCODAwMEJGQ0Y5NjI0RjkzQjI5MDhDRjI3ODQ3NDFBQUZEQTcwRTcKLToxMERCOTAwMDMwN0MzREZDQjlCQUU1MTFENTQ0QjgzMDg3OEQ2MzJDOTMKLToxMERCQTAwMDlBNjBCMTZEQjBFN0FEMkNBNjMyRjA2MUQxODBDOTdDMkUKLToxMERCQjAwMEU1MzZCRDY2NUYyNDNDNUM1RTg3RTg3RjgzRUNERkFBQzgKLToxMERCQzAwMDQ1RTI1Q0Q4NjAwQ0UzOEIxNERFREVCNTc4NEU0OUJDRDAKLToxMERCRDAwMEQ5RDdEMkYwNUU3OENDRkI4OEEwM0IxMEI0RTlDOUI1QTgKLToxMERCRTAwMDg2RUYwRjAxNUY2Q0YxNTBCMjJGRjhCM0VBMTM1RjlFMUUKLToxMERCRjAwMDhDN0M1ODU1MkFFMTdFMzM4NjcwNUUyQzk0NzAwRkQyNEYKLToxMERDMDAwMEJFQUI5MkZCN0M4RkY3NzNFNUZDMUZEMUZDMTQ1RTAzNjcKLToxMERDMTAwMDY2MUE1RUQ2Q0YyOEVFOTI3ODNENzY2QzgwQ0VDQkU1NDQKLToxMERDMjAwMDhCM0Q3NEREMUM2ODlCOTU4MDA1RTdGMUExMEQ1QjU1NkMKLToxMERDMzAwMEQzNkUxNzU4QUYxRTA0RkY3NjBGNEJGNjQ5QUU1Mjc2REYKLToxMERDNDAwMEEwOTdGNkJERDY3ODZEMEEwQUZFMDgzRDRERTI5OTYwQjAKLToxMERDNTAwMDAxOEJEOUYxM0JDQ0NGRTcxQUVGNkZCMzBCRjdBM0RDMDUKLToxMERDNjAwMDVFN0JCRUM3OUREN0RCRjgyRUY1NjBCNTJGQTlERjA2MUEKLToxMERDNzAwMEYzMDBERjc1MDlFNzA3RTYwNkVGRDVFRjBCNzJCRUQzQjkKLToxMERDODAwMDZFNEZBRTlFOEVGRTFBQTJFMzM1N0UyRTI5RkJGMzEzNTUKLToxMERDOTAwMDMzRERGRTVDMzE3RThGMDQ2REZFRkNEREFFRkZCNzYwRDAKLToxMERDQTAwMEJBOUVEOUVDQ0ZFMzQ4Nzc5QkQ3RTE0MjNFOUI3RTY2OTQKLToxMERDQjAwMEM0MDBERTY1RkMyRDRFQjUxMzQyMEFEOUE3QTQ3RTU2REEKLToxMERDQzAwMEYxRjUyQjc2QjM5NkRFMkNGM0FGMEYzOTY4NUVEQjUzOUMKLToxMERDRDAwMDZDNDMyRkMwMERCQTJFMzY0NzZERjNFMjQxM0U3RTM0QzEKLToxMERDRTAwMEE4NTAwQkY0MUQyNUZFNkZFMUY4OUQwQUVBQjQ1RjkwODEKLToxMERDRjAwMDY5Q0MwMDlENkE1ODMxQjkxOEYxNkJGQjM5ODcwN0U5ODcKLToxMEREMDAwMDEyNUI5RTlGODI3NzQxQzA5M0ZCMUM1Qjk2REYxOEYzRUEKLToxMEREMTAwMEE2QzY5RjE1RkI5QzBBNzIzQUQwRkYxMzNGMUZFNDc0RkUKLToxMEREMjAwMEE4MDUxQkZEMDg1RkNENTM4NEZFRkM5QUY4REFFMTE0QzgKLToxMEREMzAwMDdERUIwREYyNkIwMzQ5M0JGNDNCOTJGNzk1NkUyOTk3MEYKLToxMERENDAwMDZGOTFGRUNCNzhGRDhERTBGRkM0QUM4NTg4M0Y2MzhFN0MKLToxMERENTAwMDU5RjY3NUJGMjUzQjM4REFCQTg0RjQxN0VERTJCQ0FDNEUKLToxMERENjAwMEU0Nzk5RDQzQkM0NzVCQUY4Njk1MTZFMjkzODdDNTE1NjIKLToxMERENzAwMEYwMUYyRUJGNkY1RjM3OTA1MjVFNjFCQzhBN0MzRTMxRDAKLToxMEREODAwMEQzRjgxNUI2QTNDMTAxM0U1REE0NzM3OTIwM0QxRkIxNDAKLToxMEREOTAwMDhEQkYxOTRDQ0IwNzJFNkU4QzIyMUNEOEQ5MERFN0Y2RkYKLToxMEREQTAwMEMyNkE3NTVDMTNGMEVEQ0Y3ODNFOTU5NDFGRDREQkNGM0IKLToxMEREQjAwMDQ1QjY3RjRFOURDQjlGODM2OUYxN0MzOEJGMTJGNDg4QjYKLToxMEREQzAwMDRENzAwNEE2RTlDM0Q3Nzk0MzhBOTQzMzcxNEVEQTIzQTAKLToxMERERDAwMDQ4NDc0NzUyREY3ODdGNTcyMTFGQ0Y3OURBQjk1NkU4OTUKLToxMERERTAwMDUzNUUwOEY3Nzk1MkYwOTdGOUM2RTE3RUFDRkM2NDVDQUIKLToxMERERjAwMDlEMEJGRTk1MjU3Rjg2MDNGQTZCRjEyRkQ4N0YyMDdDNDMKLToxMERFMDAwMENFODk3MkIwQTY1REI5MzIzREU5MTRGMDFGNEU5RURGOTcKLToxMERFMTAwMDg0RDA3ODgyNkJCMkI5QzI3RkMwNkZFMDIzNUIwOTZFOTkKLToxMERFMjAwMDYzMzNDMENEQTIyRjUzNDI5QzdGNTM0MjQ5M0U0RDIxQzQKLToxMERFMzAwMEZDMEQwRUQ3MzEyNzNBMERFMUMyNTRFNjlFOTU4MkJGMDQKLToxMERFNDAwMDQ2RTAxRDc0NDY4RjVFMEY3MkQwNjEyOTNBREE1NTczMzEKLToxMERFNTAwMENCREFDRTEyRTRBQkU2MEM0QzgzRTYyNkU0MTRBQ0VCNTIKLToxMERFNjAwMEYwOTc3QUQxQ0YzRDI3RjY0Mzc4MkUzODQ3RjQyNUZFMzgKLToxMERFNzAwMDIyOUFDNzM0NjhFN0Q2NkYzQTBFRTBEOERCRDNDRDRBOTIKLToxMERFODAwMEM0QTMyQUJBMjc4QzY0MkQ2ODNDNzgxQ0RCM0JDMDRDQTkKLToxMERFOTAwMDYzOUNCMjc1RDE1N0EyMjFEOEE3N0ZCRTMzODBBMjA2NUEKLToxMERFQTAwMEQxNTlGRjU0QzBBQjQxRTBBNTE5NzVBRkIyMzE5MDQ1Q0YKLToxMERFQjAwMEI5NTgyMDNFMDdGREJBMzdCMDBEOUUzNzM0N0Y2NDA5NEMKLToxMERFQzAwMEFCODAzOTUxRTc1MEMyODNDNDk4RUM3MjI5QzJENTg2MjEKLToxMERFRDAwMDEyNjU5QzY3OTdDMUM2MkREQkUyNENGNTExMzcxQ0Y3MjQKLToxMERFRTAwMEE0QzY1N0RDQzhFREQzQUExMEYwRDMyNjc3REYxN0Y0MDkKLToxMERFRjAwMDdENUZGMDczMzdFMEQwNUY0RTAwRjIxOUVBMEREQkUwOTIKLToxMERGMDAwMDQwRkU5OTFFOEU2N0JGQjVFMkI2OUI4MUUwNEI2NTJDNDMKLToxMERGMTAwMDgwQTM2RUE0NEY0REQxOTc5OEFDMDVEQzNBODk4Qjc3REUKLToxMERGMjAwMEU5NzVCMEFGMzhEN0QzQUQ2MEVCRkUwRUMwNUE5QzRFNEEKLToxMERGMzAwMDRENUQ1RDEwQjdDOUYxRTkzMTI2MEI2MERDNTY2NjNERDkKLToxMERGNDAwMEM0NDA0RUMyRTYxRTY3MDJGMEI4QjFGOUY1MEQxOEY3RUQKLToxMERGNTAwMEFEMzFERDdBMURBMDc4Q0YwNjVGMERDNkI1MkI0Q0MxNjMKLToxMERGNjAwMDk3MjVDRTU3OTA2RTBGRkM4NzdDNzFDNTVGRkQ4MTBCQTYKLToxMERGNzAwMEY5QkM1MDYxMTMwMEZFOUQxMTNFMkVGOUUyNjZEQTJCQ0EKLToxMERGODAwMDc2QkU2ODE5RkQyRDY3NEI3NjNENjM5QjdGNUYyODdGQ0EKLToxMERGOTAwMERDRjk1QkUwOEZEOTZDRjY2NUEwOTNBOURFQTU4OENGOEMKLToxMERGQTAwMEE1NzZDNUE3OTZEMDM0MDcwMzNBNUQ4MjNGMDdEQTM3RDYKLToxMERGQjAwMDNEODc3QUJBQzZBRjA1MUNDODg3MjU4Q0Y4RDcyOEY2RTYKLToxMERGQzAwMDc4QUI1NURGRjUwQ0M0QUFFMTJEN0I3QTRBMDBDRTNEMzMKLToxMERGRDAwMDY3NTQ4NkZDRUE1ODdEMDAyMUUxQ0Y4M0YwMzQyMTE3OTUKLToxMERGRTAwMDhFQkNBRkY2NkIzMDRGRkJBQ0NBNzAzRkM5NDdFMEI3OTEKLToxMERGRjAwMDZGMkUzQzNGMzcwMEVCNjFFQTNENTVDMDI3RDhGNzBFNDYKLToxMEUwMDAwMEMzQURFQjMwMkY3N0UxRUJFREM4QTc1Q0Q2MTIxRjBCNDkKLToxMEUwMTAwMEZEQkJGQzBFMTZGN0E0RTgwMkJBMkRDMTE3Qzc2NTg1MzMKLToxMEUwMjAwMEY2RDIzNUI5QUYyMzZEOUNGODkyRkI5OTMwNjM2OEJCOEIKLToxMEUwMzAwMDJEQTM3RjJBQ0M1QjI2RTVCNjFEQ0UxM0NFNjE5OUMxRjgKLToxMEUwNDAwMENGNDM5RTJCOEI3MDc5OTVFNzkyOUIyMUFGRUUyQTY3ODkKLToxMEUwNTAwMDRBM0VCM0M4NkJFNjM5QzQzMkNFRTE4MEM2RjUyNDcxQkUKLToxMEUwNjAwMDQ2QTVCODIyQjE1NzFCNTMwNTdENkJBRjgzRjQxOEYyNTgKLToxMEUwNzAwMEI0QzM0QTAxRkMxMTU3OTgwNkZDQkY1QkUwNEIzRkUwN0MKLToxMEUwODAwMERCODE5NkMyNTg3NzQ5RUEzQ0VFMkUzQkYxMjdBNTgyMDgKLToxMEUwOTAwMEYxNTlEN0E1RUMxMUMzMjQxNkZBNzc4OURFREQ1RkIyRkEKLToxMEUwQTAwMDhBNTA3RTNGQzQ3QTlEQThEN0Y3NjJDNjBDRjg3Qzk4NDgKLToxMEUwQjAwMEY5NUNEODZGNjIwMTZBRTFCQzVEQzhBRjAzN0I5RkNFOUIKLToxMEUwQzAwMDQ3M0IxMjlGRTgyQzNDNUY0NkFBQzJFQzc2MzJCMzQ1MzAKLToxMEUwRDAwMDRFOUM5Nzc0QzNFNEI4QjQ5RjFFRDM0Rjc2RDkwQjJERDIKLToxMEUwRTAwMEQ5Njk4MzYxQkZCMDI2RTIzMUIzRjg5MUY4NkNGMzg3NDgKLToxMEUwRjAwMDY4MDc2NTVGRjNCNTMwQzRFM0VCQjNBM0NGNzJCQkNCNjYKLToxMEUxMDAwMEQ3NEZBRDMwN0U4NEZEODNCMzhDNTNEODdFMTNFMzNENkYKLToxMEUxMTAwMEYwMEYxNzQzMEY1MjVFRjJGNjc0RTMzNERBQjU0QzNCNUUKLToxMEUxMjAwMDc2MEVFRDk4OUU5Mjg3RTUxOUYyMjBFREQ4MjBEQTMxMkYKLToxMEUxMzAwMDE4NUE4RUZBMEE3QzYzRjU1NzY3QzdDRTQ5MzlGODAwM0EKLToxMEUxNDAwMEZCMDBGMjA3RThGOTI1RDk3RjBERTgwMUJFQkM4NEU3QTIKLToxMEUxNTAwMDNFODM2MUY1MkRDRThBODg0Q0REMDdGODI5MDIzRjdDOEQKLToxMEUxNjAwMEFFODA3RDU3QjZGQ0YwNEZDQTE4REU1RjAwRjMxNDcxMjUKLToxMEUxNzAwMEFFOTg0NkQ2QTBERkY4N0FDMEUzOTk4MkY2QzIxQzQ0NzYKLToxMEUxODAwMEJBMzNGOTAyOEVEOTQ5Nzk5OUZGQzQyMENBOEQyM0VGOTkKLToxMEUxOTAwMEJCOTNDRDJDN0UzMDc5QUUxQjlEQUYyNUU5NDIzRDgyRUQKLToxMEUxQTAwMDQ4MUVFOTUwOThFOUI4OENGNEY4MDA4OTA5RUYyNDE3NjMKLToxMEUxQjAwMDE2Qzk0MUM3NTI4NUU4RUIyODYxOEQ2OENGREI3MTY4Q0QKLToxMEUxQzAwMDNFNjNEQjk3MkFCREY4RkNGMTcwMTE4Rjk3QTZGMkI4NzkKLToxMEUxRDAwMDcwN0I2MThCM0YwMEYzQjYzQjYxM0VEQUYzMzI5M0FENjcKLToxMEUxRTAwMDk4OUU4MkZCNzg1OEE1RjkzN0NGMzFGMkQwNzE0MURDODcKLToxMEUxRjAwMDQ3RjE5MjhDNTdFNTNDNUY5OEM3OTU2M0MzM0NDRTI4QTYKLToxMEUyMDAwMEFGODgxNjg1NzE5RjcxMjZGMTFERTJBOEIxRDRGN0M2QkIKLToxMEUyMTAwMDYzOEVFQjQ0NUQ4NEZGNzQ4NzJEOEUxODk4RDRDMkQwMzIKLToxMEUyMjAwMEJGQkIwREVFREYzM0U5QkMyMTlDRjRFQjM3MTBCQ0JENjYKLToxMEUyMzAwMEQyQUYxQjM3MjI3RThCQzdGQTFBRDBDRUI5MDBFRjdENDIKLToxMEUyNDAwMDI1Mjk3RjdENjhFOUU3NTREODk2REQxMjJFMjFGQ0FBQTYKLToxMEUyNTAwMDlBRjdCNDVEMDdFNzFEMEM0RUYxQTI3QjhGNTdCN0Y4MTQKLToxMEUyNjAwMEQxRUY2RDlGQzBGOTk2QjlFRjk2MzBGNzgzNzM2RTEwQkEKLToxMEUyNzAwMEYzMDRCRkE0REZGNzQwRjhFRDg0N0QzMENENzc2MDFDNTgKLToxMEUyODAwMDUwQ0NFMzgwN0JDM0E1QjQ0RUM2MDMzMERGNzJDMUJDNjMKLToxMEUyOTAwMEUwNERBMEE3MTgzNzRGRTM3MDMyRjdCQjU3RjAzM0U1RDYKLToxMEUyQTAwMDZGMDMwNTY4QUYxOTZCMjE3RjExMTVGRUU0ODU1NkUzRjYKLToxMEUyQjAwMEE1MjExMENBODFENjdBNkFDMUZFRjc0N0MwQzAwRDZBOEYKLToxMEUyQzAwMDU2N0UyMDBCMUQ3N0Q2M0NFMDQxMzg2REM1NEQxRUY0QkYKLToxMEUyRDAwMDlGMUQ0Njk4RTAzNkFFMEVCRTM0NjRCM0I3REI4QkQ5RDMKLToxMEUyRTAwMDY0QzRFRkFFODYwRkJFMzQ2NEQzQjdGRTdDOEUyRkZBQzMKLToxMEUyRjAwMDE5Q0I5RDgyQkIxMkU1MDRGMDNEMUU3NEM3MTcwMzQzODIKLToxMEUzMDAwMEREN0UxNjczOTc1MEVCRDQzMTRGMENFQjM0MUUzNUQ2QUYKLToxMEUzMTAwMDMyMTNGM0YxQUE3MzFBRDVCRjBBNTk3MkZFNTYzOERBQ0UKLToxMEUzMjAwMDcwMzEyM0JGMUVGNUI3MzA1Q0U3ODYzRUNFOEYyRTdDNjIKLToxMEUzMzAwMDlERTZERjU5QTUzMkNCODYyN0Q4OUYzNTE0NTA2NUM0OUEKLToxMEUzNDAwMDRCQkI1MUMwMDA2RUM3N0MyNUI2MERGMDY4RjBBRjI3RkYKLToxMEUzNTAwMEZGQjM3NTUxMkUzRDg3N0QwOUJGM0JBNjM1OTNERjkyRjQKLToxMEUzNjAwMEYxNTU0NzI0MTIyMEZGNzQ5NUYxNTQ3Qzc2RjQ3RUM0NTUKLToxMEUzNzAwMENCRTU0RkRBRDUwNzQ4NUU1Mzc2NzU3Mzk4REJENTRGRkEKLToxMEUzODAwMEUxNzM2OTNGRjYxRDdGODFFQ0M3NzY4NUNCRTE3NkUwQ0UKLToxMEUzOTAwMEY3QjdCM0M4Qzc1NkExMDdEQjBCQjNDQkNGOTc4NUJDODQKLToxMEUzQTAwMEJFM0QzRERBODZGMDBERjA2OUZFNTlFRjNEREVFQzkwQTIKLToxMEUzQjAwMEYxQTZFMEUzRDVGMjA3RjhGMTJGNjE5QjVEMDY3RTdDQzQKLToxMEUzQzAwMDMxM0M3RTM4MUZFMEQ3OEVGNjQyOTVENkUyMDk0NTQzQjAKLToxMEUzRDAwMEY5Q0YxMURENDc5ODE5NDMzODFFRDY0MjkzNTQ2Rjk0RjQKLToxMEUzRTAwMEExQkYxQjBFMjdDRTcwREQyQTQxREZCQkI1QzdERjgyODAKLToxMEUzRjAwMEYwODZEQjM1RTM4OTMwRTU4NTNBQjdBM0MyMkUzM0Q2MDQKLToxMEU0MDAwMDIzRkNFRTdCQjNEQjY3MUM2MDRGQjFERThEOEY2Q0YzQkEKLToxMEU0MTAwMDhGOEE3M0VFQUIzNDhGMjI5RDM3RTlERUI1NzgyRTVEOUYKLToxMEU0MjAwMDhBRTFGNzRFQzFCQUE3RDk4ODdBQ0FDQTY2OERCMkNGMzcKLToxMEU0MzAwMDU2ODIzMzUwNkE2RTg4OTI5RDVGM0VDQUZDNkQ2MjVGNjEKLToxMEU0NDAwMDQxNjc1OTExRjkxMUQ4Rjc0QkI5NkFBQTNGMUE1RDg3OEMKLToxMEU0NTAwMEMyQzY0RjExRUYzNjMzRkEwQkQ0QkJFRDY1MEVERDUyNTkKLToxMEU0NjAwMEE4MjUzREVDQUVDQTg5MjlEMENGOTk2NUJFODg3QzA1MjgKLToxMEU0NzAwMDExMzE5QzAwQkFCQkVDMEQ4QThCREM0QjE0OEFEM0RDQzcKLToxMEU0ODAwMDFFQzhFMEIyQzhGOTc5RTE2RjIwRDZBMDcxNzZENkYwNDcKLToxMEU0OTAwMERCRUIxRDg1MTE0NzdBREUwQjIyNjFEOEVCMTcxMTQ3QTQKLToxMEU0QTAwMDEzRDZFNUE1M0ZDM0JBQzlCN0IzQzhDNTQ1QTE0RkFBOUUKLToxMEU0QjAwMDdCNTM5QUJGQ0M5Q0Y3NDZEODQ1RjM5NDg4QTg0QjA4NjkKLToxMEU0QzAwMEZGQjdEMkNERjMyQkY2NjNDMENGRTY1RkZCMkE0MzdGQzUKLToxMEU0RDAwMDIwM0RCMDk4QTVEOEZDQTJGNDgzMzQ2MjdCRUVDNkJBODYKLToxMEU0RTAwMDEzRDI3OTI2MUQ4RUE0QjMyOEMyRDJGNjA1Nzk3NTQ0QkQKLToxMEU0RjAwMDc4MUQ0MzhENTRBNkM2NTdBQThDRDczREZBRDNGOTA1OEIKLToxMEU1MDAwMEY4NzgyMjY0QTdEOEQwMDhGOEVDQ0Y4QUNGNjAzQTNFREEKLToxMEU1MTAwMDQ1MTE3RTJFN0Q5NTQ2MTFDMjAzRkYzQzE2REJDRTEwQzEKLToxMEU1MjAwMEM4NUYxNkZFN0U2QjQ2RTg3QUM0NTM2MzU2Njc2OUM5QjYKLToxMEU1MzAwMDNCQzZBRDM3MjAxQ0Q5QjdDNUFEN0EyNEREQkU5NjQ0QTUKLToxMEU1NDAwMEI4N0QyRDhEOTA3RENEQkU2Rjg1RTBEQkQ1REE4N0Y3NjgKLToxMEU1NTAwMEFBRjczQkYwQ0YyQzdBRDQ5RDc4MzJBRjAyRjA3MEJCOTMKLToxMEU1NjAwMEFENEY5MkJFOTZDRjFBNDVERkI4N0U3RkY4ODZGRTQ5NDIKLToxMEU1NzAwMDQ4RTc1MTIxOUY2OERCMzFERTMwNzQxRThGN0MyMkMyNTgKLToxMEU1ODAwMEU1Mzg3ODUzOENFNjNEMzU0MkZDOTE5QzA3OENDMUJBNDYKLToxMEU1OTAwMERDNDg3MUM4RkNGNzE4ODc3NDJGMUNDOEEzMzhFNENENzkKLToxMEU1QTAwMDdENzlFOEVGOUYxQTBBNjU4RDQzOEUxNkY3NENDQTE2REYKLToxMEU1QjAwMDg3RjQ4RDEwODdBQzhGRjA3OEY1Rjg3RkI5MjhBRUE4NzYKLToxMEU1QzAwMEJFQzBGRDdDRjU4NTFFMTVFMzg5OEQxMTlERjgzRTdGNEIKLToxMEU1RDAwMEE4NUYzNTQxNEVBQTMxMEUwMTM4N0QyMjBFQzFGOTE0RDMKLToxMEU1RTAwMDg3QkNEOUEzMjI1RUYzMkZGNEQzQkE2QUU4NjMxQzMyNDYKLToxMEU1RjAwMDdGODQzODA0QjA1MDUxRUUwRTU3NzdGRjBDQ0YyRDkzMjcKLToxMEU2MDAwMERFNTMxNUU2NjZCQkRDNTYyNUZBRTkzRDg5NUNENzVEMkQKLToxMEU2MTAwMEI2MkRDRkE0NzM0RTk3OUJGODZDOEU2RjZBMUQ5N0Y3M0IKLToxMEU2MjAwMENDNzkyM0M5NTc4REVBMkRDM0ZBNDAxN0NCMEQyMDFGOTMKLToxMEU2MzAwMERFQ0ExOTUzQzEwQTc4NUU4MzcxNzExNzRFMDVCQUJCRTEKLToxMEU2NDAwMENFRTZDNTJDQ0NBQjNEN0NGQ0QzQjk2M0Y2NjEyQkVEOUIKLToxMEU2NTAwMDhGNDdFOEM1NUIzOTM3QzQ0NDFFNjQxNEMwRkE0RkFCMUEKLToxMEU2NjAwMDQ2N0MzMUY4QTFBRUE5OUZGNzcxN0EzNjkxMUU2RDE2REUKLToxMEU2NzAwMEJDMDlFREQxMjg5RkJFNTVDNDgzMzJGRTdBNkVBNTEyMjcKLToxMEU2ODAwMDczNTNEMjY1MkM1OTBBRjNFNzA5RjhBRTM5M0MzRkFDMTUKLToxMEU2OTAwMDU1QkQzNDZGNDcxOUEzNzlCNzVBMTdBOTdFMzEzRkUxQTkKLToxMEU2QTAwMEQyNzVFOENGNEJBQ0U3RjlBMkZBREQ5Mzc5MThFRkRGMkEKLToxMEU2QjAwMEEyMzExNTlFQUY2QzhGQjY5MTdDOUU3NTUxM0RDMzgwODMKLToxMEU2QzAwMEZGNTAzRjJCQ0ZGNDEyREZGMjg2NUM2OTc1OEU1Q0IwOTEKLToxMEU2RDAwMDY0NzE1QkRDRTJDQUU4MzM3NTc1NDEzNjNCMjREQkNDMDAKLToxMEU2RTAwMDNBQzRDMTg4QzgzRjJCRDg4Q0NCQzA5NzRCRUNDMTRFRTUKLToxMEU2RjAwMEE0Q0QzRDJENzRGQzUxMzY3Q0JEQUMyRjZDOUM2MTdDNEYKLToxMEU3MDAwMDA3RTU2M0FBMzNGMUVGREYwMTdFRjVCREU2QTJGNzNBMzQKLToxMEU3MTAwMDdEN0JGN0RFNUU4MTc1OEIxRThERUFCQTMyOUYwMUNBNjIKLToxMEU3MjAwMDhBOTY2MTNFOEIzQ0EwQkFGNEU5MjY5NENCMjNGOUIyRDkKLToxMEU3MzAwMDBGMDYwREYwM0U4MjA5MkJGOUJEOEYzNjE5QjZGRUE5RTIKLToxMEU3NDAwMEM4NDNBRkEwREYzQjMyNUVDRTdGOTVBRjk3N0QyQkQxMjQKLToxMEU3NTAwMDg0RjczNThFNENFMEZENEIxMUY1NTE4QkNFMzdBMTUxMkUKLToxMEU3NjAwMDFFQkRFNTk3REU2Q0Y2RjE3NDREQkFCQ0RFNTFCNTg5N0QKLToxMEU3NzAwMENCRUIyOEVCQzBBRUJGMThDOUIyMkU2N0E5Qjk2MzNBN0MKLToxMEU3ODAwMEYwRTNDODkwODNFQTM4OTA2N0M1MzEzRUQ4MzhDMzdDM0YKLToxMEU3OTAwMDE5RjlCNTdEOTBGM0Y1Qzg2QkY3RkJGMDlDREM2MzEzQkEKLToxMEU3QTAwMDBGNjRCM0YzQkYxMUZFMjg1RTFEQTNCQ0FCN0JBNkM4RUMKLToxMEU3QjAwMDc3RDk5MDg2N0U2QkY3QTJBNzRFNTVDMDNFQTdFNzRGNEMKLToxMEU3QzAwMDlCQTUwMjA5QzAwQjBGQzZDQjcyQkRCQjg2RTc3MTI5QTIKLToxMEU3RDAwMEZDOUU1NzlCRDBGRUJDRjY0QTQzMzY3REFGOEM5OEJGNUIKLToxMEU3RTAwMDhGQTRDREU3RUY0NURCN0EzNEUyN0ZEMTg5QkE3RDc4MUIKLToxMEU3RjAwMEVGMjc1RURERDNBRkMxRjlGNkZEQzZDMTMwNEZFOTlCMEYKLToxMEU4MDAwMENFRTNGRTExRjEwQTAwNUU0NTU3ODREN0RFNzk1OUU0NjQKLToxMEU4MTAwMDBERjA3MkQ1OEMxRjhFRDc0RjZBMTg3RkVGNTM2MTc4MzkKLToxMEU4MjAwMDZBMkE4N0UzQzk0NDFENzM4MUIwRjczOUFGN0U5RUVBMzcKLToxMEU4MzAwMDhFN0QwOTA3MTU0RjJFMERFRDUzNTFGNDY0RkRCQjdCMDIKLToxMEU4NDAwMEIwMTQyMzIwQjY3OEM5MzkxNTQ1Q0E3QzUwNEREM0JCQzYKLToxMEU4NTAwMDc5ODNCOTY5RkQ3QjVCQzZBNkY1NTc2RDk4OTREMjQzNjEKLToxMEU4NjAwMEY4N0Y3OTY0NEE1QURGRURGRjQwNUEzRkM4NjZBN0Y1NDIKLToxMEU4NzAwMDFCOTZEQzlBMDZBRkM2MTc0RUVCRDdGOTZGNEY5QkZGN0UKLToxMEU4ODAwMDQxN0Q0NTVBRkZGNkIyNTU2OUYzOTcwNkQ2QTU4RDU3RDcKLToxMEU4OTAwMEZCRjYzQzg0RTVBMzY4Rjk0QzZEMkMyMzc5OUM4OTdDQkMKLToxMEU4QTAwMENEM0I2MzkwM0M2RTFGQkNERjg3NzIxMUFGOEU1MjFFNTIKLToxMEU4QjAwMDNEOTBERjVGOENGNUVCRTc5Q0Q5RUIwQjBGRDZBOEQyMzAKLToxMEU4QzAwMDdGMTdBM0JGMzcxOENGRDdFNEZDNjA2OTIyQUQyRUJGRjYKLToxMEU4RDAwMEFFODZGQkU3MzUzNTRBRDYzQTQxQTYzRjk2N0U1OEZBRDIKLToxMEU4RTAwMEU1Q0NGRDMzRkQ2RUE2QkZCREYzRTY3RDFFNUVFRkU3MTIKLToxMEU4RjAwMDdFN0ZBNTkwODNCNkIyOUY3QTEzNDg1NzAzQUYyMzc0RTcKLToxMEU5MDAwMDE3MDNCRDVFQkE4RjQxRkE3NTdDRTVERDkzRjFCRDVBMDAKLToxMEU5MTAwMDZFOTkzOUQ2NUQ5MkYyRDdFMUIyMThGQjI1OENFN0ZBRjEKLToxMEU5MjAwMDYyNkNDQTc0MUM4RkIxNzVEM0E5MkVBRDg1Q0JGOUYzNzcKLToxMEU5MzAwMDlCQzRGM0Y1RDg4MjlGQUVCNUYxMkREM0ZGMDYzRDMzQ0UKLToxMEU5NDAwMDdGNTBDMDUyRjE0QUMzMUY4RDQ4MDFFMDc3NUJGMzQxMEQKLToxMEU5NTAwMDZEMUNCNDYxRUYzMUNENkU4NzRFNTdGRjZBREMwODdFQzcKLToxMEU5NjAwMEZBNjMzNTE5RkE4NEVCRkE4Njk2QkZBMzFGNzhCOTk1MzYKLToxMEU5NzAwMEQ3REQwRkI1N0E1ODFDRTgzQkRCRUFBM0Y2RTdBRDdFOUUKLToxMEU5ODAwMDdBRkU3Q0FCNEU2RDQ3NkIxOUI1RjFENjAwOERGRkFDQUUKLToxMEU5OTAwMEI1OEFEQTY3NUEwRDZBNEZCNEQ2NTM3QkIyMzU0QUYzNUIKLToxMEU5QTAwMDdFRDREQTQ4RUQ4RjVCNEQ3QUJFNEJFOEU5RkIwNTFGNUMKLToxMEU5QjAwMEEzNENENjE1QTJDNzFEMEFGMUI1MDFBRkVBMkVCODYwNjcKLToxMEU5QzAwMEE4NzYzQjBGN0NGRDQyMzZCRUJFNTc3RjEyQUZFRTlENTAKLToxMEU5RDAwMDg0NzIwNkZFMkFBQjNFRjVENkM4QjgzRTc5REU4NDk3MkYKLToxMEU5RTAwMDhDODczMTdGNDEzOTkxNzUzQUMwRUYzMUM0Q0Y4REY1QjUKLToxMEU5RjAwMEI5QTJBQkM3RUY4OEE4REYxQzI5NjQ4RERGMTY3MDk2MUIKLToxMEVBMDAwMEU1QTMzREZGNEEzNDQ0RjY3Q0ZDNENCMkU3N0VBNkE1NjQKLToxMEVBMTAwMERCRjM5MjYxRjY3QzJERTkxRDNCODk3NTUyQUMyRkQyNTgKLToxMEVBMjAwMDdCOEE4QzNBNDg0MUFENEVFQjY0MUQ2NEQxMUY3OTFENDEKLToxMEVBMzAwMDY0MzRGQTgxRUU5MzY4QjdBNEREQkU1MkJBODc5REM3RUQKLToxMEVBNDAwMDZDRTMyN0M4M0ZFOTlGODdGOTBGNzMyM0Y5OEYyQUExNDkKLToxMEVBNTAwMEIzNEM3QjkzRTJDNDNDNDFDRkVFNTc5NjE3QTA3RDcxMzcKLToxMEVBNjAwMDIzODIzQzRGMzc1ODE1OUUzMzkzRjcwMUY2NkQyODFFQ0QKLToxMEVBNzAwMDBFRjdFNUVBNUVGMkU3M0I5MjcxQ0VFQjE0QzcwQ0Y3QjYKLToxMEVBODAwMDVGRTk3Q0MwNThDOEVFREY4MTBGQUZBNkZCNDVDRTg3OUIKLToxMEVBOTAwMDFBRjVCQjg5NkRFMDlGOEYyNDE4QUY5M0NERTFFRkVCQTIKLToxMEVBQTAwMEE0MUYzQzcyODFENzMxMkU2OTRBOENDMUQxODU1ODRCNDUKLToxMEVBQjAwMENGM0M2ODBGN0Y4RThEOEJDMjM5NUI5MzFEODEwMzMwRjUKLToxMEVBQzAwMDM1RUZFOTNFREQwM0YzODIwOTczNkMwRThDNTdDNTczOTUKLToxMEVBRDAwMDY4NUQ2OEM5Q0MxOEY2MUJBMkFGOTM3RDBBNjlFOTdFMTAKLToxMEVBRTAwMDEyMjNENEE0REZBMTIyNTg1MTQ2N0Y2MjZBQkU4QUU3NkUKLToxMEVBRjAwMDVCOUFFQTAzRENGNUIzNERBRDE2Q0U2NUY5QzUxNkE2RjMKLToxMEVCMDAwMDk3OEI3QUFBMzdBQjdGREZBOEQ4RUE2QzFBMEI3NDIyRUUKLToxMEVCMTAwMDFEREE2Nzc2RjBGNzdBMTlGMjI2RjkyNEVCNkQzMjBGRDkKLToxMEVCMjAwMDdGODQxOUJFREEyQ0YxNDNCQjc4RUY5MkY5QkVFNTBGNzIKLToxMEVCMzAwMEQzNEQ3RjJERjA1REYxOURBMEY3MkQ2QzAzRTNGNzIzRkUKLToxMEVCNDAwMDFDOTA5RjIwRkZDNkI4NjIwNzRBODZDQkREQzE1OTFGQzMKLToxMEVCNTAwMDlDNUM0QkZBNkQyOUQ3MjY2RkVGNTEyODZGMTc3OTEzRkMKLToxMEVCNjAwMEQzRUY3M0Q4RjMxODk5Mzc2NUU2NDcwRjBCM0JCQjBCMTAKLToxMEVCNzAwMEVEMkNCNDBGM0IxOUU1NUIxRDRBNkU2MDlGOTJDQTk3NUUKLToxMEVCODAwMEMwNkZDRTQwQkExNkQ1OEFGNzJGQUM2NTFFQUYxNzdFODAKLToxMEVCOTAwMDJFMkQ1RjFBMTE2RjkxOTczODkzRTc1RUVDM0I5Rjk3OEMKLToxMEVCQTAwMDNBNzdBRkFCQzc4RkY3MUNCQjY2N0VCNUIxMDlGOTM2QjQKLToxMEVCQjAwMEQzNDNFRjM5OTkxNkQ3RDFFRTY0RDJDMzdDMTYxQjM3RjUKLToxMEVCQzAwMDM3NzVERTJBRDNDRTYzN0RCNjEzODIxOTdDREZCQjEzODMKLToxMEVCRDAwMEJGMDQwMDc4RjkwMTQ3NUFEQzUzNTA5NTFFQjdERDVEM0MKLToxMEVCRTAwMDJCRURFQ0I1QTEwMzA1ODBERTZGNEIzQzU5NTRENDU1OTkKLToxMEVCRjAwMDc5RkNFOTExQ0ZEQjc1NkUyRjE4REEzQkRCRkJGNTc2N0MKLToxMEVDMDAwMEFGRTFGMUQ5Q0U3RjNCOUU4RjdCNjQ3Q0Q0OTI3NjFGOUYKLToxMEVDMTAwMEQ2QzE3QkJDMEVEMkVGNEU1REVCQzJGQjFFOUQ1RThENUUKLToxMEVDMjAwMEM3MzdCQUEzM0VEQkZEOTVEREI1OEFBMDlCRTNFNTEzQUMKLToxMEVDMzAwMDc4QTlDMUU1MTQwNzhEQjQ1RkI3OTAxN0Q5Q0YyRDM3RTgKLToxMEVDNDAwMDBERDI0NzNEMTBDNTNDQjlDRDNCNEVDMUZBQTgxQ0ZGQzMKLToxMEVDNTAwMDY4QUQyMkU0ODVENzk3QkI0NDVDOTU1QkQ2MUI3N0EwNTMKLToxMEVDNjAwMDlDNEQ1ODNGMUJEOUU2ODEzOEU5M0MzQ0Y3OTRGNzUyNUMKLToxMEVDNzAwMDVDRTU5REU4MzJCM0UxRkRDRjAyNUU5NzMzNTA0Rjc5RkEKLToxMEVDODAwMDdGQkU4MzYxREVERjU1OTJERDhGRkU2MzJEOEYzM0RCMjgKLToxMEVDOTAwMEY0NTk1MTlDNkYwMTVGQTYyOUMzRTc3RDVDQzhDMTQzNEQKLToxMEVDQTAwMDRFOTA0M0Q4QkY2QkRBNUQ3NDRGQUM2QjMyMjNGQjVEODMKLToxMEVDQjAwMDVBMzdGREQxQURERTJDNzJBOERGNDdFN0U3RjQzMUY5MTIKLToxMEVDQzAwMEZFM0RFREJFNDQ5QkRFRDBCODE2RjZENTlFNjcwMUI0N0UKLToxMEVDRDAwMDE5OTlGQUU2OUNCMEJDNzEyRERFQjdBOENBMERFMEZDMEMKLToxMEVDRTAwMDFBRjVDNzE2RjJCMTIzQzBBOERFQTExNTM2N0JBOEVFMkYKLToxMEVDRjAwMDVDQUNEMUZEMDg4OTJGQzRFQjhGQTE5RDFBNERCRTMzQUEKLToxMEVEMDAwMEYxODFGRDQ4RUU0NjNBREY0Q0ZDMjg5NDlGRjUwRUYzNjYKLToxMEVEMTAwMDBCQ0RDNjY4MTY3ODNGNEZFQTU1QkE3QzM5NDc5MUFGOUMKLToxMEVEMjAwMEQxRTg0OUYzQUZDNTI5RkZGQTZDRURBNjc1Nzg0RjZEQjAKLToxMEVEMzAwMDI3RTNFM0E3NkE0Mzk0RUY2N0Y2QUY5NTlFQjc2OTNENzMKLToxMEVENDAwMDhENzgyRTZENTM1RDI0N0Y5OUVCQkI0QTM4NUVERDI3QUQKLToxMEVENTAwMEFBQzVCRTNFMDVFNTdGNTc1NTUxMEVEQTc3MkYxQTZBRDAKLToxMEVENjAwMDFCNUY5RkE5MzBDRkQ1REFFMkE2QzI0ODJGOEZEQjZCOUQKLToxMEVENzAwMDE5QzlBRjU3OEZGQUE2ODI1Qzc4Q0ZBODIwNTNDMDc3MDUKLToxMEVEODAwMEM3REI3RjNDQTdCRjc3M0VCMjFFODNFNDk2NEMzQjk3MjAKLToxMEVEOTAwMDVCRjYzNkYwQTU0MDg4RjUxOEY2NzAzRkJGMkZCMjk5QTQKLToxMEVEQTAwMEU2NDk3RUVEQkVGMUI3ODFGODNCRjA2RENDQzJGNEZBRDYKLToxMEVEQjAwMEQ0QkJBRDNGMjk3NUY5RTM4OENGMzkyQzA3Rjk3Qzg5OUQKLToxMEVEQzAwMDNEQTg5MEZGOEUxOEE0NzdCRUE0NURFNUY3NTZDNkM5OEUKLToxMEVERDAwMDJFOTA4MzdEMTIzOTI1NTU5NzYyRjhERTAzRjVDQjY0QkEKLToxMEVERTAwMDE0REZEMENDRUJDNDJCMkZBMkRCNDdFQjI2MDkzMDEzNkEKLToxMEVERjAwMEYxNDI4RDhBRjJDRkVERUUyNUY2MUFERjFGOTZFMUJEQzYKLToxMEVFMDAwMDE1QzU3MjkwOUZCRDExRTUxQUU2OTUzMEYzNEZFN0IyMzQKLToxMEVFMTAwMERDRTc5OUVDNkIzRUI4MEVEQTQ5NzVBMjlFMjZFODE5M0MKLToxMEVFMjAwMDhEMUYxMkVGQkY5NERDQ0FGODIwQjM4RTJBRUJBQzFEMDUKLToxMEVFMzAwMEEyQ0UzQTVBMUQ5NTY5MTc4OTZGMzJGRUNEQUNBQkQyN0UKLToxMEVFNDAwMDhEM0FEMDhGQjc2RUQyNTgzN0YxOURDNzBCQTkzQ0RGRjIKLToxMEVFNTAwMENBRTM3NTc4N0VGRjZFOUVBMEVCRjBEOUE0NUZBNEU3QUQKLToxMEVFNjAwMEQyNkU2NUQyRjlFNDI4N0VCMUZCNEM3QjFFQzI2OTRCQTEKLToxMEVFNzAwMDM0NTE3REZFOTA3RkRCMjkwNUUzREM4NDRCNjczNjdERDIKLToxMEVFODAwMDNEOUM5RkVFMzczQTg0RkREQjU2MjdFQUYwRTczRUE1MkUKLToxMEVFOTAwMDYyN0Q2MDlFREY1MkYxREU1RTU1MjI0MDdFQTE0REM5NEIKLToxMEVFQTAwMEZFREVBMUJCOEVGQjlCNjE3RTIyRTNGRENDN0ZFNjc4N0MKLToxMEVFQjAwMDYzQUU1Mjk2RjQxRkFBQTA1M0ZBNTdFMDhGNjJEN0JCRjUKLToxMEVFQzAwMDQzRjJCRTk3NjFFOEJFQjlBOUY4QjNGQkU5OEYzMjFERTIKLToxMEVFRDAwMEUzMjNCRkFERUU1QjlBNjVGRjYxNzE2M0JBNUY1MDA2RDUKLToxMEVFRTAwMEY5RkQzMEM5RDc2RTkxNzdCN0Y5Rjk3OUNDNDEwMkIyMDMKLToxMEVFRjAwMEY4MDE4ODdGM0Y1QjA3RjI1NEQ5OUY2RTZGRjJDQUQyNDgKLToxMEVGMDAwMEVENEQ2NjNDRUNGNjMwMkJENzA2MEZFMkUxRDYzQTUyRDcKLToxMEVGMTAwMERFRjQ3OEI2Qjg5RTkxQkMxRTJFQjQ1NEFDRkY4NDEzQjgKLToxMEVGMjAwMDA2QzNGM0QwOEE0RDg2RTdFMUYyQkZGMzc5MzRENkYxMTgKLToxMEVGMzAwMDc4QTFBM0FDMjk4QTc5OTNBQzNGRUY1RTc0MUJEOTU3QjMKLToxMEVGNDAwMEYwQTMzRDc1QjZCQzQ5REU3Nzc4QjdGNTI4MjlBRjVBRUUKLToxMEVGNTAwMDg2N0U2NkQ2QTVCQTE3RkUzREQ1QTFEQUZDNEQyN0IxNEYKLToxMEVGNjAwMEFFNzQwOEU0MTFGNUVENzBCRTk5ODdGNzI1QURFNzU1NEQKLToxMEVGNzAwMDc2NDAxRjVFQkZDQUE0NEJENkExQzZENzhCN0IyQkU3QkEKLToxMEVGODAwMDVDRjFDNTc4OEY3MjkwQkZBN0QwMDY0REJBN0YwMkY0QUUKLToxMEVGOTAwMEQwN0JBMjc5RTIzRDUxNjZEREM5RUQ2RUExRjc3M0YxMzgKLToxMEVGQTAwMEVBOTY1NUY2QkFCM0U0NUJBMzkwRTc5N0FCNERCQTM3NTAKLToxMEVGQjAwMEQ0MzE0MkZENEZDRTczMzNDMzFBODdFRkM3QUIzRjRCRkIKLToxMEVGQzAwMEZDQzZDRkNEMzAyRjk3NzUyRDdEODZGOUJEM0E5OEU3RDkKLToxMEVGRDAwMEJBNjhBQUUzNzVDQ0U3MkMzQTg3QkM3RjYyMjQ2NDJDMUMKLToxMEVGRTAwMDU3ODkxRDgwRjU0RjJGN0E4QUYyQ0RERjI3RDg1ODdDQkMKLToxMEVGRjAwMDdGOTJDQzM3MzU5RTZGQ0EzQzU2REE4RDFBRjU4OUNFOTIKLToxMEYwMDAwMDUyMTgzRjdDNDZBMzM4MzhFRkU5QUU1MzU4NzcwRjlFMkQKLToxMEYwMTAwMDU5NDczOTlGQTFBQ0NDQzM3REU0M0QyNjg5RjdENUU2OUQKLToxMEYwMjAwMEFCOTU5OEFGREFERUI3NDhCOERGNjlBREZGMDVDQUM1NjIKLToxMEYwMzAwMDkzQUQ1MTZBRkI1QTBENkFCQjVCMUJBOUFERDI4QzMwRjQKLToxMEYwNDAwMEZBQTVBQTdFQ0EwMEQ5ODIyMTE4QjdFMTUxNzUxNkQ2NTEKLToxMEYwNTAwMERCQ0U3RjU3ODVGOURGQzhCN0NBRkU2OERBQkNCQ0IyMjEKLToxMEYwNjAwMEM2QjQ3OTkwMkZGRjFBRTc2OTdFQ0U0RkQ3MTI4NUVFOEUKLToxMEYwNzAwMDI3REMzOUM4MUU1MkY0MkM3NkUxRkZBRTVEQ0FBRkJGNjMKLToxMEYwODAwMDM2NzZBOUE4OUVGMjk3OTFFQzEyMjNCREFCMUExNEVGMjUKLToxMEYwOTAwMDVEQTU3RDEyRkFGNzc4OUQ0RTdBOTFENDQzN0NGRjRBQTQKLToxMEYwQTAwMEZFQ0RBMkY1OURGOEU3N0NBMDY3Q0NDN0I4MUQ0QkRENkYKLToxMEYwQjAwMEYzQTBFRjFCODNFMkJCRUI5QjRGMkVEQThGRjc4MDNBNzYKLToxMEYwQzAwMDVFOTRFM0NCRjcxQkI2NzE2NkQ1MzRFM0Y3MjZDNzMwMDEKLToxMEYwRDAwMDU5ODZCODczQzdDOUYxQ0RGNDVEQjZGOEFFMjZEQzU4RDEKLToxMEYwRTAwMDU4M0NDMDUyRjcxRjMzRjlCNUFCOUVDN0VCRjI3RTREQ0IKLToxMEYwRjAwMDkwRjFGQTlBMUNGRjY0QkRDOEUzODAxQ0FDRTNDOUZCMjUKLToxMEYxMDAwMDEzQjkyMzdDNDdGNEYxN0E2RTBGM0UyM0Y4RDRFOUUyNzkKLToxMEYxMTAwMEY3MTcxNjY3N0MyRjEyMTJGQjhFRjRCREM4MzYzMTNFRUUKLToxMEYxMjAwMERBRjcyMUFCQzQ3RTRENjJCRkM3RTY0NDZGQTM3MzhCOTEKLToxMEYxMzAwMEYyRUYzMjlBQzVGMzA1Njc2MjZENjMzMDY4RjRCM0FDRTEKLToxMEYxNDAwMDcwOTYwQjdCRkE2QzNEQkY5N0VDRjIxQjFBOUUwQkMwQkUKLToxMEYxNTAwMDZCMjA3ODhERkNCRUE2MUM1RjcwMjEzOURFNDhFMzBENjQKLToxMEYxNjAwMDdDN0NDMTA1OTNFQTRBRjIzQkJERTVGNTY1RkJCNzRFRjEKLToxMEYxNzAwMDREREREM0U5QzBGQTg0MTdCRjU3RTFGNzlGQkUyNkYwRjMKLToxMEYxODAwMENGNkNFNUY3MkE3N0Y5QzQ3RDFGMzY3NUJGODE3MDBDMDcKLToxMEYxOTAwMEZFN0RFNkVERjVCNzBDRTE3N0M3QjBGRjA2REE1RjdDRTAKLToxMEYxQTAwMDlGQjMwMEU5QURBNEU3RkY0MENGMzNGRTlEODFGNUY1QTUKLToxMEYxQjAwMDkzRjc4QkVGN0FFRTQzM0Q2MTJEMUNFRkU0QkY5QjYwMkMKLToxMEYxQzAwMENERDk2RkZGNEU2ODQxRkRFQzY2MzE3RjMzQzFEQkMwQTYKLToxMEYxRDAwMEU3Njc5MTA3MjE4RjczRjc2MzRERjYwQUUwQjUxMkJDMUMKLToxMEYxRTAwMEQ1MUNCRjVCRUE3NTdFREUxOTcyOEJERkZGMTM5RUUyRDIKLToxMEYxRjAwMDdCQTEzM0QxNzUxRUI0RTdDOTdGMDdDMDlBNEVGQjVENzIKLToxMEYyMDAwMDAxOUY3NjEyMUM1M0VFQzdDNEJEMjhBRTE3NTJGRUE1NEYKLToxMEYyMTAwMDNDN0M0QkM4REZFQzdBNDVDQUQ1MTc2ODdERjMzNUEzMzMKLToxMEYyMjAwMEZGMUIwNDJGRTNGQkE0RDFFODI4QUY4ODdFOTNENkY5MTcKLToxMEYyMzAwMDkzRjc5M0ZGOTVGQTU3ODk4RkZDOUUyQzUzMkZCRTI3ODcKLToxMEYyNDAwMEU4ODc3REZGODNDRTBCRTIyRkM0MTNGNjNENzQyREY2QzUKLToxMEYyNTAwMDA1Qjg3MTgyRTM0OUMyM0Q3NjJERTAzMkZEQ0FFRTk5RDAKLToxMEYyNjAwMEZDMkZCQUEyNjg0MjcwNDYwMDAwMDAwMDAwMDAwMDAwQjcKLToxMEYyNzAwMDFGOEIwODAwMDAwMDAwMDAwMDBCOTNFMTY2NjBGODUxNEUKLToxMEYyODAwMDBGQzEyMTQ4NkM2MkYxN0E3NjA2ODY3ODE2MDY4NkI5MzcKLToxMEYyOTAwMEFDMEMwQzM1NDBBQ0M4NDk5QUZFNTU0MEZENEI4MTc4MEEKLToxMEYyQTAwMDAxMTBDRjA2RTI2OTQwM0MxMTg4N0I4MEI4MUQ4ODY1NUIKLToxMEYyQjAwMDgwRTY4OTAzQjExMDEwRjMwMjMxMDcxMDMzMDNGMTNGRTgKLToxMEYyQzAwMDBFMDY4NjlGMUMwODczNkUwM0M1MUU5MzY4MzcwOERCMDUKLToxMEYyRDAwMEYyMjBEOEU3ODFGRURGMDJDNDM3QzgwODg3NTEzQzNDRTIKLToxMEYyRTAwMDcwMTYzRjAzNDM5RDAwODIyRjJDODgyQTlGQ0Q4RjYwOEMKLToxMEYyRjAwMEYzOEE1MjY2OTcxQzUwM0YwMDhERkU5QzU4ODAwMzAwOTUKLToxMEYzMDAwMDAwMDAwMDAwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwNEIKLToxMEYzMTAwMDAwMEJFNTdEMEI3ODU0RDVCNUYwM0E3M0NFM0MzMzMzMTIKLToxMEYzMjAwMDM5MDk3OTRDMjBFMDQ5NDgzMDU1QzAyMTQwMDRBMUY1MDUKLToxMEYzMzAwMDEwMTA0MzJGRDc4RUQ0MkFGNUEyNzc0MDA0RTQ5NTU0QjkKLToxMEYzNDAwMEIxRDJBQjZENDYyNjQwNTBGNDA2MEIwQTBBM0E1MEE4REIKLToxMEYzNTAwMEQwODI0NkM0OTYyQTdBMDc0NTRCRkZCNjM2NUE2RjdENEYKLToxMEYzNjAwMEQ0RjZDNkRBRUJBQjE4RTI4MzYyRkJFQkVGREQ2QkVEQjQKLToxMEYzNzAwMEJEMzNFNzlDQ0MyNEEwQzVEQUZCODc0Rjc3RjZEOUFGMjUKLToxMEYzODAwMEI1RDc2QkFGQkRGNkRBM0IxRUE4ODRDMjczMDEzRUM2OEIKLToxMEYzOTAwMDFGOTZERUU2MDE4MEUyNEMzQUVBRkFBRjJFREEzMzg2QjcKLToxMEYzQTAwMEZERkU3RjNERDExRDQ2QTY5RTRDNEYwMzA1NjAyQzJCRDQKLToxMEYzQjAwMDA3MTNBMDA0RTA1QzFGRkI5NUQ1OUJGQ0QzMjNCRjNENDYKLToxMEYzQzAwMEFCMDhFMDIwQThFMDY1OUZEMkRBRTQwMUZGQ0NGQTM5NkYKLToxMEYzRDAwMEY4MjE0NEIxRENGNUQzNjA3OTY3MTBEQjI1QThERDk3MEYKLToxMEYzRTAwMDgwQjc0QjU3MThFNUZBNzBDQzgwMEJCRjlCM0VGQTlENTcKLToxMEYzRjAwMEY1MzM3NDczMTM2QjdGRUM4MzIwQjU3N0MyMjE1M0Y4MTgKLToxMEY0MDAwMEQwMDU2OUQxRTZFMzRBRUM1NzdCQkZCMzQ2RTQyQjgwRDUKLToxMEY0MTAwMDBEMEUwMkRFMjkwMDc1MTk3ODBGRkRFRTc1ODJGNzcxNjkKLToxMEY0MjAwMDhEQzE2QjY0MTlERkM3RTAyRkNBQzA3RjEwQkU5QTBGNzEKLToxMEY0MzAwMEMzMzlGQzY2NUQwNkZFOTM4NTg3RTZDRkYwOUM2QzM2OEIKLToxMEY0NDAwMDFFQTlBQTA2NThEQjBDOEY1NEI5MDFENjM0RkIyOEJGN0QKLToxMEY0NTAwMEJBNTlBN0ZDQ0FFNjA4QTU0OThEMzU2MTcwMjQ3NzQyRTAKLToxMEY0NjAwMDJBQzE1MDFGOEFCMkZBQjI3RkY2NUZBMENBNjdDQkZCRUYKLToxMEY0NzAwMENBNzU1QkRFNTNDNEZBQTlDOUU0QjVBMDYxQ0IyNzgzODIKLToxMEY0ODAwMEY1QkU3ODEwQzc2NzczRjdFMkY4M0U0QTE5OThDRjQ1ODIKLToxMEY0OTAwMDE4M0VDRUU0NTVDMTZGMjQ2NjAyQTM0Nzc1RDA2M0E0MUQKLToxMEY0QTAwMEQ4M0NDRTBDQ0U5QjBFNjFBQzc3MTlFMUNEMjNGMDdBMUYKLToxMEY0QjAwMDc1RDk4QTRFODRGNzdENTYwRjU4QkQzMzgyNTNERkM0MDkKLToxMEY0QzAwMDdBRkZBN0UyRkI3QzFFMUIwMTRBRDlGN0Q1REY2RUVBNjMKLToxMEY0RDAwMDU0NTg3RjJCQ0IzQ0M2MEEzNkFGN0JEOUY4QURBNzVCMUYKLToxMEY0RTAwMEYwQjg1QkZCMDNFMkNEQzdGRTIxMUU2QjM2RjM3QzY2RjIKLToxMEY0RjAwMERFRjZGQzE5QzBGMjcyREUxNTk5N0U0RUI2REY2MUVCQzYKLToxMEY1MDAwMEZCRUVCN0RBODhENTIzQkZDQTdFODc0MTdDODUxRUZDMTcKLToxMEY1MTAwMEZDRjY3QjI2QzNGOTgwREE0Q0JGNzI5QzdFRkI2NUVDNUYKLToxMEY1MjAwMDEwNjM2RDg3NkQ4NjU0NUFFOTNENEVCNTExNkQ0ODIwQzQKLToxMEY1MzAwMDNGNkNENjIwNTVDMUJGMTczMUI5QTgxNjcyRDFBMkNGRTIKLToxMEY1NDAwMDA4MjA1RjM5RTEwMUVCMzg5NTE5QkE1NDE3Nzk2NkJCODkKLToxMEY1NTAwMDE4OUY1NDQ3MkU1RUE0MjA1RkFEQjdCNEFCMDQ5MDcyRTEKLToxMEY1NjAwMEYzRUZDRDNBOTg2QzFFQjczNEQ3NTBCQUEzNTk2RjQ3MTIKLToxMEY1NzAwMEI5QjlFNTIzNzU2NkZCRjBERUYyRjhERjQyNUZEREVBM0MKLToxMEY1ODAwMDA2RTJCRkM0MkU0OEVENTBCMEJGQTYxNzY2QjNGQ0RBNDIKLToxMEY1OTAwMDUxMjVCNTM3MTk5ODlGRTk0MkZERTAxNzdDQkM1NjMxREIKLToxMEY1QTAwMDJFQTlDNEZBQ0ZBODgwN0FEMDI5MEZCN0I4NjM1RjQ2RDYKLToxMEY1QjAwMDc5NTgzM0NBQTVBQzQwM0M1NzcxNzlBODc2QTc3RDQzRUEKLToxMEY1QzAwMEQ5RjdCNUVCMkI0NzMxODg2MTZERjQ1OTkyODdFQUVBOTgKLToxMEY1RDAwMDYxODY4QUYyNTAyNUU0NjFFQ0VEM0VENDg3M0RGMzVGMEQKLToxMEY1RTAwMDVFRDI1RTM1MDAyMDFGRTkxM0NDRDA0QjNGNDEzRUQwQTgKLToxMEY1RjAwMDI3NUFGMEY1MTlDQUMzQTlFM0FGQjYzRUY5NkI2REI0NEIKLToxMEY2MDAwMEYyNEQyRjJCREY1MUU1MzE1NEE1Mzc1Qzg1QTdBNTIzOUIKLToxMEY2MTAwMEIxRTFCREY5QURCQTRBRjA1OUI0NkYzRTczQTYyQjlCNjgKLToxMEY2MjAwMDUzRjAyQTFCRkNGNkU2MDhGMURERkE2NjgzRDI5QjA1NEYKLToxMEY2MzAwMDFGN0E5MUE3QzZCM0JDRTA0MzI4MUY0M0Y5OUNFQjE2ODEKLToxMEY2NDAwMERDNDg3Q0U5MkU0QTAxQ0FDOUVEQzg5RkU3RTA3MDJCNkYKLToxMEY2NTAwMDRENzMyMkQzOTEzNTIyQ0Y5NjQ4MTc1QjAzRDY2M0Y5QjkKLToxMEY2NjAwMDQwQ0E5QjUwOEVGQzI5Q0JGNzI2NENENkJFQjg4Njk3NTUKLToxMEY2NzAwMDM3Mjg3QjEzQjg2NkRDRUVFN0U1NUY1NkJBQ0RDNDQ0QTUKLToxMEY2ODAwMDRCRkJDNENEQTY1OTlFQTlDRkYyRTk3QUNEREExRkVCODgKLToxMEY2OTAwMDdGQjgwNTFFMzg0NEY1NjU3RkYzOTQ1Nzc5N0Y3RURFODkKLToxMEY2QTAwMEZFMjZFNTI1MzM1MTdFRUFGQkJGNDk2OThCMzBEMzAyNDQKLToxMEY2QjAwMEQ2MzhGQUI5QTkyN0JGQ0UzNDg3NjdDNkE5QkNGMTdFNzAKLToxMEY2QzAwMDMzMTFCNDk2REY2RjIyOUU2NEY5Mzg2NTVEMjJDMUVBN0EKLToxMEY2RDAwMDZGODQ1ODk1QzJFODUwMzhCMzI5QzI0QzIzRjBDRjRBMDIKLToxMEY2RTAwMDk5NkVDMzBBMUZDNzc3NjY3RUI3MTNCQzgxMkE1RTNFMzgKLToxMEY2RjAwMEUyQzZFN0NDNjQ1NUE2N0NCMkYyQUIwNEMyRUYyRjhBMTcKLToxMEY3MDAwMDgzMjFFQzA1NUMxRkREOUNDNTk4MUQ1NDdFQ0QyRjE4MTAKLToxMEY3MTAwMERGQkI0QjNENTFCMjNCQ0E1OUE2OEM3RDhGQzRDMUFBRjkKLToxMEY3MjAwMDBGREMxMUVEMzVBQjNDNEIzRTY0RjA5RTQzRjBDNjlBQzYKLToxMEY3MzAwMDY2RTY4MDM3NjE4NTU3QzJEMzFGRkMxMjhFRENGQ0NBOTcKLToxMEY3NDAwMEM3NzdGMjU1RkRBNUUzN0UzNTkxQjFCQUJGQzMxRDQ1MUMKLToxMEY3NTAwMEIzMDE0RDI4Mjg2NEJGN0NGODVENTM2MTVEOTY1Q0NFOTMKLToxMEY3NjAwMDY4NjAxMEZENjZDMkQwREVGRDk2Q0UxQzA4Mjk4QkRDRDkKLToxMEY3NzAwMEZGQURFOTVCODU3OThFQjdEOTRBNzE4NkNFMkM3Rjg1M0UKLToxMEY3ODAwMDE1OEZFNzg4N0E0RTNFOTRGM0YzRjQ5QURGMTVCNkY5QjUKLToxMEY3OTAwMDgxRDYxNjg5ODVGQTlGREY3QTdGN0M2NjJDRDhCQkRFRkUKLToxMEY3QTAwMEQzOEE0MkUzRDdDRjE4RjcxNUUwRTM4MUI3ODI5NjJDQ0UKLToxMEY3QjAwMDEzNkEzM0UzMTU1RDJDQzc0QjY1MURBRjM4NzY2QUYxQ0MKLToxMEY3QzAwMEU5OTQ0QjA5QUZCRjE3QkNERkI1QzE3QjkzOUJDOTZGRjEKLToxMEY3RDAwMDE2RkE5RjZBNzgwMzRDQkY5RTk0MUNENjlDOTgxQzlFNzgKLToxMEY3RTAwMEFBN0U4QkYwNTdDNjVGRUY2OTkwM0U5N0UxNzVEOTg1ODkKLToxMEY3RjAwMDNFQjJGQkE1RkVGQkFDRjE1NzgyNDU4QzlFQ0I3RTc5RDkKLToxMEY4MDAwMEM1MkJFN0JBMzBDM0Y4N0M0NDY2RkMyNkM1MjBCODczMjQKLToxMEY4MTAwMEYxN0JBRUY5MDBBNDZDRkRGQ0JERTY5MzBCQUZBNzVBREIKLToxMEY4MjAwMDJGOURBOEJFNURGMTlCMDBBMDdDQURBRTgyMTREQTE4QkUKLToxMEY4MzAwMEFCMEY5Rjk3MEZBQ0JGRDVCRjk4NUM4QTcwNzg1QkNGM0EKLToxMEY4NDAwMDA0NzMzNEMwMDY2Q0MyRUM4REQ1RDJGRUI4QThGNjg0MjEKLToxMEY4NTAwMEVDOEY5QjlBQTFCRDg1RDkzNTBGODU5QkM4NUU1QUFEQUIKLToxMEY4NjAwMDAwQjU2N0ZCNTI0ODMxQkI2NkNDMzNEQjdEQjMxMUZFN0MKLToxMEY4NzAwMEU4NkQ5NEFFNzZCM0YyMjA3RTNGQTQ0RjY2NTMwODU0RjEKLToxMEY4ODAwMDE3OEU2MkU4ODNENTdFRjlGREI5ODZBMUVDRkJDRDU1RDQKLToxMEY4OTAwMEVDM0I2MzhERDUyMURFMUZGQjFFQzNGQTc5RDVGQzdCQzMKLToxMEY4QTAwMDJFQjhGMjZBMTgzQzE2QkNGQjNEQTk3ODM2N0Q1OUVGOUMKLToxMEY4QjAwMDcyMTFGQ0I3QTEzREU2QzVGRDgwNDFBOTNGRDAxNjQ3QjYKLToxMEY4QzAwMEE2MEIwQ0YxMThEQjJBN0FCNzlCRTVFMkZCODE3NUQ1MTQKLToxMEY4RDAwMDNGNEFFM0Q2N0E4REIwRUIxRTNGRUZGQkQwODlGQUEyMDgKLToxMEY4RTAwMEFBQ0Q3NDYxRkIyODc3MUREQ0U2QjBCQjgyQzM2NTdFQzAKLToxMEY4RjAwMEEwMzI5OTc1MTA3MEU0NkZFOUIxRTMyQTI3QTExRDE3QjIKLToxMEY5MDAwMDE2NzZEMDc5MkJDRTlEODRFQjZDNEYzOThDQjI5NUNGODcKLToxMEY5MTAwMDU5NzFGNjI0QjREQjBBN0Q0RDJGNEM2NEUzMTczMjdEMTgKLToxMEY5MjAwMDlBNDREMUQxMENBNTA5RURGRjhCMEFCM0YyQ0JCQTY5ODkKLToxMEY5MzAwMEJFOTkyOTU2QkVFRUJDNjExNTU3NjZEOUZGMzAyQUQyNTIKLToxMEY5NDAwMDdDNjU3RTQwODM5REFGNkYxMzc2RUMyREMyQUUyRDQ3NTQKLToxMEY5NTAwMDE5MUYyQkY4OEYwOThCOUY1N0VERDE2QkZFRDNCOTVFMjIKLToxMEY5NjAwMDBCRDQxODM3MjI1RjBFNjg4MDI4REFERkVCMThGRUUyMkUKLToxMEY5NzAwMDE2M0FGOTZCRUNGQUFENTBCM0NGRUI1NENENjcyMzk4NDAKLToxMEY5ODAwMDk3QjlDNkU2RUVERjI5NUYxQjIxN0UyNUQ2MkYxNEVCNDMKLToxMEY5OTAwMDU2QTAyNkFBQzQ4N0Y3M0Y3RkU3N0M3M0NERkIyQjAyRDYKLToxMEY5QTAwMDlGNkM5Q0FCQjM4REYzNTlFMUE1MzBDOEM2MTlGM0I3NzIKLToxMEY5QjAwMDFGMjc4MEUzNThEN0IxMTNDNDNCMkNERTZFRTI3RTFCQjkKLToxMEY5QzAwMDY1MTBGNzczN0U5ODEyNEREMzNFRUY3QUYyRDM1RDJCMUMKLToxMEY5RDAwMEZBODRGODI2MURFRDFDODIzOTRCQkY1QTk1MjdFMzZGMzgKLToxMEY5RTAwMEMzRkZBOUIzRjJCM0QxNDVBNkNCNUY3RUE3RTA5MEE1MzQKLToxMEY5RjAwMEZFNzY1N0E4RTgzNURDRDQ5RjBENjc3RkFDNjZEQTgzQzYKLToxMEZBMDAwMEYwMDc2QTEyOEU2MEExNEQ5RjFFNkZFRTJFMzhDNEY0NkYKLToxMEZBMTAwMEM2Q0RGQTBDRDJDN0I5QzZGQjIxRDNBMzY5MjY1N0JCMDIKLToxMEZBMjAwMDlBN0Q5NERFREJBQzQzREE4QjdFOEIwOEE1REY2M0YyMzQKLToxMEZBMzAwMDg3REZCN0IyN0QyNEE2RjczNDQ3RTlGQjk2RTY3MTk0RDkKLToxMEZBNDAwMERFRDU2QzUyQkFBOUI5ODFEMjNCOUE2MzU0NkY0M0YzQTUKLToxMEZBNTAwMDRDNEE3QkYwRjkyMTFCQUY0RUFDNkZDQ0NFM0E3MzY2QUIKLToxMEZBNjAwMDJBRTE0MjNGRUUzRTg4NTYzM0ZDQUVDNkVGMTZGOEQ3ODkKLToxMEZBNzAwMEI5MjYzRDRFNzIzMkQzNEY3RThGMDJFMUY3MDg0MENBNUQKLToxMEZBODAwMEFDQzI3NkNGQTlCMDAzNzJDRjJCMjlFNjc1ODFFQUUyMkEKLToxMEZBOTAwMEUzNkIzNTM0Nzg0MENBQ0I2RUEwNzVBQjY0MEE1QkI3QjQKLToxMEZBQTAwMDE4NURCNTgyRUQ4NTg4NTc5NkE3RUYwNTZDM0Q0M0ZGM0QKLToxMEZBQjAwMEEwN0YwQUE0RkQyM0E5ODk4NkVEOEI0NEZCRDZBMDhCRTkKLToxMEZBQzAwMEVBQURBQkQxNjhERDczRjJDNTA4RDBBNzU1NjFFNTk4MDIKLToxMEZBRDAwMDhGRkNENEJFOTBDNkVCNEZFNEUzMTU5Q0NGMTQzREIzMkUKLToxMEZBRTAwMEVCNUI3NTE3NzVCQTZFMEM1RjNGRkQzNThDNUYyQzcyNDIKLToxMEZBRjAwMDUxMzBGNTBGNDg2OTI4NTcyQjY5MUVFQkMyNTM1RTY0REQKLToxMEZCMDAwMEREMzE3RUQ0Q0IyQTU4M0Y3N0IwMkQzNUFFNkJCQkI2RjYKLToxMEZCMTAwMEJGQUJDRkI2RDAzOUE4NzI3QjdEQzRBQzc3M0IxMEJGRUEKLToxMEZCMjAwMDIzMzQyNkQ3NkMxQzc1N0IyMDg1RUIwRUEzODc4QUYwQzcKLToxMEZCMzAwMEU2MEIwNTMyQzJDN0U3QURCNjQwNkE5QjkyMjlENzBCRTgKLToxMEZCNDAwMDM4REU0N0U4NTExM0Q3Qjk5RUVGN0VGMURERTg0RUFCQzIKLToxMEZCNTAwMEQ4MkUwNUQxNkQ0NkE2M0MyNERCOTlGNjc2MjFEOTJFMDgKLToxMEZCNjAwMDAxOEE4NkVERDZCMzc2OTAyOTBGQ0I3NjMwQ0FENjJFOTEKLToxMEZCNzAwMDJDREJDMUIzMjY4REI3RDFERUNFNUYyMDcwMjZFNjFGMDkKLToxMEZCODAwMDFFMTc3NUM1MkRGQUMxNUY2NUJBQjhEQ0Q4RTk5NDhCMkMKLToxMEZCOTAwMDdGOEE0MEQwRTFGMTg0RjIzMUUyNjMwQUNGMkI4QUFGNTEKLToxMEZCQTAwMEY1NjMxN0ZBQjNFQzcyMUQxRTYzQTcxQjU0NTlGMjhDNTAKLToxMEZCQjAwMDc0MTdBMUVDMTY5MzFERDQ4MEY2QzZCNkQ2RUNGNERBMTEKLToxMEZCQzAwMEEwQzVBNjU1RTNGQzI2NkFCNkY5NDkzQTZERjAwOTNBOTQKLToxMEZCRDAwMEI2MDZCMkQyNjk4MzJFRThCODAwNkM3NDk2RjREQTIwQzcKLToxMEZCRTAwMEU5QjUyQzNCQkQzNkU0QTBENzA2NDlBRkU1RjY3NjkyRTEKLToxMEZCRjAwMDVFMUI3MkQwNkI4M0E0RDc2MjdCM0I0OTJGMjczREMyMkIKLToxMEZDMDAwMEUzRDI4QTlENkU2RDk0M0Y1NUY0NzBFQTg1MEU5NzQxNUMKLToxMEZDMTAwMERGNURCQjREN0QxMkVBODcxQjM0REE1NzQzOERBRUUwQzIKLToxMEZDMjAwMDdFMDBDQTRGNzBGRDgwMjZDMDc1NjEyREZFMkFFRDMzMUYKLToxMEZDMzAwMDM2OEY1RDc4OEVDNUVDQUIzOUM5NTcyN0ExMUQxRTU0OTAKLToxMEZDNDAwMDY0RjlBMTQ5Njg4NzZGRjNGMEZDNzVDOUUzOTNEMDBFOUUKLToxMEZDNTAwMDdGQzQxNTlCQUI5MkJEOTMwMjFBREY4MTJGNkYyQzA1RDkKLToxMEZDNjAwMDFCMTk0OEE3NkI0RDNGNDNCRTM5N0RCQjJCOUEzMDMyRTEKLToxMEZDNzAwMEYwNzg4MUUzMDVCN0VGMUY2NzU5QkY3MkNGNDNFMDE3RjQKLToxMEZDODAwMEVCMEMzRDIxMzhCRjQ1NzA2QTI5OUE3NzJGMzgyRjYyRDcKLToxMEZDOTAwMDcwMzJCQkMyNDBGRTY2RkM2QkI0OUUxQTM4NjEyRTVGQTgKLToxMEZDQTAwMDJGN0FENjY3QzdGRUQ3RDlGRThDRUQyRTFCREZENDZDMUEKLToxMEZDQjAwMDBFRDhGODY2RDhGQTQyNUJCRTZBRUQ0MDVCQkVCMkE1Q0MKLToxMEZDQzAwMEQyOTYzNzZFMzhDM0Q2REY5MDY1QjVCNjdDRjlFMjczNEQKLToxMEZDRDAwMDZDRjk4MTczRUI2REVEN0JGMTBCNzA3RUQ5QTlCRTdDNjUKLToxMEZDRTAwMDIzRTJCOTg3MEU4OTlBN0FBMjgzQThCRjNCNTk1MzZGNDIKLToxMEZDRjAwMEUzQTcxQ0U1NUZGOUI2NjZGQTE4RkVCNTIyMEZBRDQzMUYKLToxMEZEMDAwMDAwRDcxMDdFMjRCRUYyNzU0ODc4NTBCRjE0MDU1M0U3MjMKLToxMEZEMTAwMEIzRjI4MDZFMjZEMDJGQTBFQTI2QTAxREUxRDJFMzk0OTQKLToxMEZEMjAwMDc3NDdFQ0YyNzUyMTFBNEE4Q0ZFNUZEOUE1ODE2RjRDOUEKLToxMEZEMzAwMDlGRkQ5QjlGQTRGRkZFRTZFNUU0MTdCOUJFQUI0NTdDQTMKLToxMEZENDAwMDVEQkQ4MzZEOTdEMERGOTM2MEZBNzEwNzFCRDdDRENDNzMKLToxMEZENTAwMDFDN0YxOEY5NDJGMDBGRTM2N0Q0MkI0NTlBMjJGNjE3NUYKLToxMEZENjAwMDI3Mjc2N0Q1MjlCQkZFMTlCQUQxMEU3RjQ1OUI0MzFGQjQKLToxMEZENzAwMDlEMjA3RjdGNTZGMkRCMUZGRTM2NDAzNDgxN0FCQzNGRTgKLToxMEZEODAwMEZDOEREMTE0QTFGRjRFNEVGRTg3MkNCM0UzQTc3Q0IxQUUKLToxMEZEOTAwMEM3MjEyNzdGNUZGQ0I1QUEyMEY4QTJBOTFFRjExMkRBQkQKLToxMEZEQTAwMDBDNzA1MzA1REE1RENGRUFEOUVDMEFDOTJGNzdDQ0JBQ0IKLToxMEZEQjAwMDJENjBCNUY3NjE4Q0M3NzZGRTJFQzdBMUJDOUEyREZGQ0EKLToxMEZEQzAwMDc5RTMxM0E4NDdGQjIzOTRFMDNFQTQ2REFEMzlFNjJGRjkKLToxMEZERDAwMEU4QkRFMUEyQ0E4MDc1M0RGRkJDQ0YzRjQzRTc2RjlGRkUKLToxMEZERTAwMDU0RkI0ODBGQkNFNUZBNkI3OTE2RjgxREZCQjJERUVENEIKLToxMEZERjAwMDEzNUM1RUUyN0U5NzU1NEZCMjlGMUFCNEI3ODIxMDg4QUIKLToxMEZFMDAwMDIyOUU4RkZCQzMyMzIxOUZFRDBGN0QzQzNERDVGQkI2OEEKLToxMEZFMTAwMDVEQjNGOEZFMjZGMTcyNUVBQTFBRjE4OUZBMURDRjhENDQKLToxMEZFMjAwMDVGMUU5MTIyQkE1RkU0ODJEQkIxN0NCODhCQ0FBRjBCNTQKLToxMEZFMzAwMDg0QjcyMTVDNUY1N0UzRDc2QkM1MDhFRjkwMTRDNTVGQUIKLToxMEZFNDAwMDY4Njk3RDQ2QzgzMjRGNjExN0M5RjlFN0IyOEY1NkI1NjgKLToxMEZFNTAwMDVDNUI2RjVCRUZFMEUyN0FGNDYzNEE3RUJDQUI2NTREQkUKLToxMEZFNjAwMEJEQjAzQjVBQjVDRjk1N0Q5NDEzQ0UyRDFBRDk5QjlGMkIKLToxMEZFNzAwMDRGRkI0ODg1RUNGREZDQTNEODQ3QkZEMDk2QUVCMERCNjYKLToxMEZFODAwMDQ3MEY3MzNBODhGQTFEMkQwRkQ3OUY0OEI5QjQ4RjAyRDgKLToxMEZFOTAwMDQxOEZEOEQ3M0JFQzk3MUE2NjFGRTE3OTUyNTBEODJGODMKLToxMEZFQTAwMDM1MjlCMjU3RkMzNTI5NkVCRkQ0NDg3QkM2QkU3RTVENkUKLToxMEZFQjAwMDhCMDY2ODcxQzYzRUVBQTM3RkYzOTNGNERGREZCQzcyNjIKLToxMEZFQzAwMEFERUZGRUEwQjQ4RkRBQjg3REM0NzA4REYxMjc2QTBENTYKLToxMEZFRDAwMEY3N0JBODhFRjU3RDlDRkI3RkJCN0Q5NDVEN0VGQkMzOEQKLToxMEZFRTAwMERGMDY2OEUzRjY1MTNGRjg5Qjk5MEI3RkZGRTBGNkQxMDAKLToxMEZFRjAwMDZFMERBNDdFRkZGRkM0M0VDQUM1MjdGRkJCRURBMzBDNTkKLToxMEZGMDAwMDlERkYzNjc2OEVEM0FFOTE3NkM0QTlCNjZGQTQ3REMyMUUKLToxMEZGMTAwMEVDOTgxQTBERjUxRUIzQjNEMDhFMzlFRTZBRjdERENFMkMKLToxMEZGMjAwMEU2NzM5RENBQjAzNTE0RTM1NkY4N0VFNjA2MkRCNkMxRDkKLToxMEZGMzAwMDRERkU4REI0OEU3NkM2NjZENEU3NjM4NTlFNDVCOTBGQjcKLToxMEZGNDAwMDhBQjgzRDJEMEEzMzQ2NjBGREY4NjZCN0U1MUM0MjBEQzAKLToxMEZGNTAwMEE2RjU5RTczOUJDRjExMUU5ODlENjc5RkJGQzA4QkM0NTMKLToxMEZGNjAwMEMzN0U3NzgxRENGNzlDMURFM0YzRkEzMUUxMDFEMkRDM0IKLToxMEZGNzAwMERFRDJEMjNFNENGRjQzQUM2RkI0MUUxNzU5RjFDMUYxMzMKLToxMEZGODAwMEEzNDY4RDE0RUEwM0Q2RkUzRkRDQzUzNkJDRjg2Qzc4NzgKLToxMEZGOTAwMDYxRUIxMDFGMEY1NDZFQ0ZDOUVGM0MwRDhDRDExNUY0REYKLToxMEZGQTAwMDg3QjM2QzA3RjJFRjAwMkMzMjk4QkM0MTVCQzMzMEQ2QUMKLToxMEZGQjAwMEZGODBEOEFBNkY2MEZDNUNFOEU1Njk2RjAyRDNCRjAzREQKLToxMEZGQzAwMDNBNjc0RkM3QjQ2NTc4RURFMTdBNTYyRjNGQUE1RjM4OUMKLToxMEZGRDAwMEQ1QzA3NTE1QzhBRkI4MDYzQkEzRjM1MDU3NzJEMjcwQTEKLToxMEZGRTAwMDcxOEVDM0U0RjlEOTk1Qzc4NTNDOUI2MEI3Q0I1RDg2MUMKLToxMEZGRjAwMDI2RkQ0OTk1QjlFNTg1RkQyODFGN0I3QkI3Q0YyNTFGRDkKLTowMjAwMDAwMjIwMDBEQwotOjEwMDAwMDAwNkVBQjVDOTM3QzVFN0Q2MkYyMzk5RENCNzU4MkZENDM2NQotOjEwMDAxMDAwN0Q1MUUwRTgyN0RGQjRBRjEzMjFCMEU0NTlGOTg3ODJCRQotOjEwMDAyMDAwOEYwMUJFRjE5OThDQTdDMzZEM0UwM0UzNEZBQTVDM0FFMgotOjEwMDAzMDAwQzY0REU2ODM1RTgwRkMxNzk4QTIwMUM2NTlFQTQ1RERFRAotOjEwMDA0MDAwMDk3NEMxRjY0Nzk3MTZFMTQ3NDdCQkZGNDJDQjdFQTIzMgotOjEwMDA1MDAwQzBDM0U1QjU2OEM2OTQ4QTk1QUNERjYzNjM3ODdDRkU1RgotOjEwMDA2MDAwMDA5REM3ODEzQUU3NzMzM0NBOTdENzkyMUZCRThEQ0VFMgotOjEwMDA3MDAwNEQ5MzhDOUYyQUY5RkU4NkNFNkZENjU0RURENUFERUIwRAotOjEwMDA4MDAwRDQ2ODhGRjQ3MzM4Rjk4MzJERTE3NUMyOUU2NkY4NTFGOAotOjEwMDA5MDAwQUI1QzI2REEwMTlGOTYzRkQ0NEZDODFGNzlEMzFERTc4QQotOjEwMDBBMDAwNDkyNzQ5MkY1M0RDQkIzODUxRkVGOEI0RTM0OUJBRjY2RgotOjEwMDBCMDAwOTZBQjFCODk0RjhCNjZDQ0Y1QTFEREJGMkEzMkEzQ0Y0RgotOjEwMDBDMDAwNzNENERFNzRCRDhERTgxQUE4MDIzMzk1QTVGRkYzM0MwNgotOjEwMDBEMDAwNEEyNkFFQzAxOTVGNkJEOTFGMzlFRDc1QjVCNDZFRTYwRgotOjEwMDBFMDAwRDZCRUU4NTZFNEI0Q0I3OEJGRkVFNUFBRjE0NzU0NUUyRAotOjEwMDBGMDAwOUE0RUVCODA0RkY0QjdDNkI4MkQ4MUZBRjMxOERBMEM5QwotOjEwMDEwMDAwMEMxRjZBREJBODM0RUE0RkE4ODJFODBFNUU4NUUyM0Y0NgotOjEwMDExMDAwRkM4NjQ5RkI3MDNBRUZBRUNCQzBFNzI5NzdEOUM2RDM0RQotOjEwMDEyMDAwOEEwMkY2RjNFNzk5MDlDNTBBQkY3RkI5ODdFMEYwRTFEMwotOjEwMDEzMDAwNzhBOEE3NzVENkExODJGNzMwQjg3RkFGRDdGRUQxNjE3NgotOjEwMDE0MDAwMzdBQzJFQUZDRDFBNjdBMEZEQURGNkFCMTdEOUUxM0RBOAotOjEwMDE1MDAwRTE3NjQxQ0Q3OENENjI0N0U1NkVBN0MxNkIxNjdCQUFFQgotOjEwMDE2MDAwMERGOUREQzIwN0FCRENCMDVGNjFFQjcwMzI3MjMxQzRGOAotOjEwMDE3MDAwMEQ5NkM3QTIzMjgwNTY0Q0M3MjMxRkQ2RjI3NTdEQTdCNQotOjEwMDE4MDAwNDJFN0MzMjREMjA2RkVDN0NGODkyRUYzMThENDlGQ0JGMwotOjEwMDE5MDAwMTcyNzNDQTk0MTEzQThCRTcxNjJFNzQ4QzcwN0YzRjhDNwotOjEwMDFBMDAwQTQyMjA1NkNGNUVGRjc3OEE4NUYwRDYyNzQ5RTdFRkNDMwotOjEwMDFCMDAwNzdFNzQ3QTg1RjkzN0RBQUNCQzBFMUVDRjczMjRGRkMwRAotOjEwMDFDMDAwN0U0RjMxQjIxRDg3MDcxQjkwM0Y2MjFDRjcwQkQwRERCRAotOjEwMDFEMDAwMUNENkVFRjhCQTE5NzQ5RjI4MTc3QzlCMUNGMkI1NDlGRgotOjEwMDFFMDAwQzQ2NTQxNkM0QzNGRjNFMjcyN0M5QzhERDk4MUY1QjVCRQotOjEwMDFGMDAwNTg4MEVFMkRCNTcxN0I2OEIwMTg3RkM3QjIxOUY0N0RCOQotOjEwMDIwMDAwQzdGQUJFRTU3QzhCQjA4RkVFNDJGQjg4RUMxQzlERjJGQQotOjEwMDIxMDAwM0Q3MDg5NzhCMzNCMDU3Q0YyN0I4RDk3Qzc2NzFEMTVEMAotOjEwMDIyMDAwNzJCRkMzNjcwNkU4NUVDMDEzRDMwMjVGNjBGMjU1Rjk4MAotOjEwMDIzMDAwOUMxQUM1MjNDQ0IyMzU2RDA1N0Q4RDNGNzBBRUREM0Y3OAotOjEwMDI0MDAwNzJCMkYxMUQ5RDlFNTAxMUQ5RDE4RUY4OEU1Q0VENjU3NAotOjEwMDI1MDAwNUNDN0E3QzVDQjlENjIxRjUzRTM1RDkwQTRGMzkzRjRFNQotOjEwMDI2MDAwQjkyNDlGOTU0MjhGNTQyRTAzQjJFMzA2MkY4Njk0QzE4MgotOjEwMDI3MDAwRUExQUNCREE0N0E1OTFBRjNGRkMxOEFDN0MzMjE4QTI0MgotOjEwMDI4MDAwMkUyMEJENjAwNjY3RDdEMUJEMDk0RUJGMzYxNzlENTNERQotOjEwMDI5MDAwMEZCRUNBOTNDMjkwQjY2MUMyMEU4MzhERkMzRTgzQkM3MgotOjEwMDJBMDAwNzdCMUMzMTc1REUxNDU3REQ3NEE5NjFGNTQyNkVDRjcxOQotOjEwMDJCMDAwNDQwNjgzRTU3RTA0RDMyMzgzRDBBRTYzN0E2OTkwRTM1QQotOjEwMDJDMDAwRkJBN0E1NDM4MUY3RUY0Mzg3NEQ1QTlCNUZCN0I0MkYzOAotOjEwMDJEMDAwNTMyMDk2NkRGRDNCRERDQkY5QjRFQ0NBRjc3OUZDRDcyMgotOjEwMDJFMDAwMEQ0MTc4NTVDRUJGMTJFOUQ5NTY4MDc0Qjg2QkVFQjM4NAotOjEwMDJGMDAwOTNGMERFNDlBMjE1QTI3ODE3NjVDODcyN0IxQzQ0OUQ1NQotOjEwMDMwMDAwMzc4RkRGRUIwMDMzOERGNkYyQ0FEOTE3NzczRThBNzQ0OAotOjEwMDMxMDAwOUQwODM2RkQ5NTQ1NkZENDc5RTkzRTA4RDcxQjlCRTZDRAotOjEwMDMyMDAwQ0VFMEU5ODcyQUYxNDlENTMyNDhFMTNEQTMyOTZENEQ1OAotOjEwMDMzMDAwMDdERDJDNUZCRTFDRThEQ0JDQkMzNUExQTAzRkFCRjJFNgotOjEwMDM0MDAwMDY4OEUyMzA4M0QxODFDN0YyNTVCMzIwNjVEMkZBMDUyMQotOjEwMDM1MDAwQ0Y0NUVBNjhBOUEzOUYwQUU0MTM1Qzc3NUFFQ0Y3NzNDOAotOjEwMDM2MDAwODZEQzYwRTc4QkFBNTZGQjdEOUM1MkMxMTdBNTBFQkVBQQotOjEwMDM3MDAwNzBGNjUzNjlCNDRENDM3ODg3MkU3M0YxN0IzQjMzRURCMAotOjEwMDM4MDAwRjc2QkFBQTBGRENERUZFMzdDMEUwNUEzQzhFRjU1NkI3QwotOjEwMDM5MDAwRURFMzNBRkJENzIwRkU3NUM0Q0I0MzRCMzc0RjNCOUQ3MwotOjEwMDNBMDAwRDVERkIyQUM3RTAwRTI2NTg3MkY5NjRGRjdBMkYwMTI0MAotOjEwMDNCMDAwNTE5NjdENzEyRjdFOTVGNjQ2OEVGQTE5RkQ5OUIwQzUzRQotOjEwMDNDMDAwMzMzQkQzRDVENTI1RDdDQzYxQjVENjg0MTI0MEUzMjdBRQotOjEwMDNEMDAwQkU0RTdBREQyREU0RjU4OUMxRjNFODVFRDdBQUEyNUFCNAotOjEwMDNFMDAwOEEwQjNCODg3OUI0QTdDQTg3OTU1QUY1QkQxQkUzNzY3QgotOjEwMDNGMDAwMDc2NEYyMkI1MThGNjZFMUYzRTU4MjJGNUYwNzczMzlCMwotOjEwMDQwMDAwRTI2MTk0QjcyOTgyRTM3QUNBNEJERTlCQ0RDNjYzQ0IwNwotOjEwMDQxMDAwOUY5OUNBRDI2RUExMzdDMEU3QUI2QjdGQjVERjZGMEE3OQotOjEwMDQyMDAwRUFBRjg5NEI2QzI0ODc0NTI3RTY1N0I4RDIxQkJGMTkyMgotOjEwMDQzMDAwQzc0RkQ0QjM2RDA0RUUzRjBCMjE5NTQ0RkEzNkI1MDk4RQotOjEwMDQ0MDAwN0Y3QjRGQkQzNjUxMkY4MUY3M0I3QkVBQzVEQkMwQkFCRQotOjEwMDQ1MDAwREY2NEY1MzY4ODdBQTZBRDVFQUM1N0JEM0I0NTNEQjA0RQotOjEwMDQ2MDAwOEQ2QkY2MUFGNzFFMDkxRjU4RkI4QkY2RUE2RkJCQjdBOAotOjEwMDQ3MDAwOThDMzA3RDZGRThDNUVGREVEOTJGMEQ5RUFFOUJERUE5RAotOjEwMDQ4MDAwREQyN0ZBMDNEQkI4NjAxRkI3QTc3Q0E0NDc5NEM3MjgxMQotOjEwMDQ5MDAwRkVGREYxRTJBOUM0MUY4NzhBQTczNkUwN0RDNDZCN0UwQQotOjEwMDRBMDAwRTYxNjNBRTI3MjVBQUY1NUMxNTcwNzQ1QkQ5NjYwMkQyMAotOjEwMDRCMDAwRDkwREM5NjY2ODVEQ0NGNjk2QUQ3ODdGQjgxQUVGRjFCNAotOjEwMDRDMDAwQ0VBMTdEQkVGQzJFRTlDN0JFRUJEOUJGNUY0REY3N0U0NgotOjEwMDREMDAwRTU3N0FERDU0RjcxRTRFQzNCRURDMzVBM0U1Mjg1MUYzNQotOjEwMDRFMDAwNkVDMDE0M0NBNzZDOERCODg0RkZGQkI1QTQ1OUM1RTQ1RAotOjEwMDRGMDAwQkQ0Q0IzRTVENzk0RjNGMjUxQURBRjI1MTM3ODlGNDhDNwotOjEwMDUwMDAwOEJEMUZEMTQ2RjA0MUUxOTZFRDEyMzNERTM3RjY2RjA3RAotOjEwMDUxMDAwRjM3MzhDMENGQ0VGM0JFMDdGREYwNkJGQ0NGQjA3RjNGMwotOjEwMDUyMDAwRjJCMUJFNjM5MzEzRUNENzk1QTg0QkQ5N0U3OTk4QUZGRgotOjEwMDUzMDAwQjg4NUQ2RjNDRkVERkM1QzJEQTY2NjlEMUZDRjY3RTY5MAotOjEwMDU0MDAwQzdGMzcyN0U2N0ZCRDQyOUZGNThGM0QzMURGM0QzMUQ4NQotOjEwMDU1MDAwRjNEMzZERjMxQkVGMkI5ODgyRkM3OEEyRjM3M0Q2QkIxOQotOjEwMDU2MDAwRDkxRDhCQTBEREJBQjJGODQ3NjRGRkFGMUMwQ0Q0RUZFNQotOjEwMDU3MDAwMDRERjhCQzkxQkIxOUNDOTc2MDdGNTY3OTRBMkJFMUYyNwotOjEwMDU4MDAwMDVFNjA4NUY3MUZGRUQ5RUM2MjA3MkRDQTc4Njc4N0NDOQotOjEwMDU5MDAwMkExNDdCQzQzOTcwMkM4MkZFQ0RCN0JDQkE4ODlGRTM4NQotOjEwMDVBMDAwNzA3QTdDM0FERjM3ODk3Q0E1MjNDRjdFRjkyQkFFOUIwRQotOjEwMDVCMDAwMTg5RUM4Rjc5MTBFM0RERkRGQkE1NjUxMzIxQUQ3QjVGMwotOjEwMDVDMDAwRDY5MEE5NThENzM1NEZDRkJBNzYzMUFENkIyQjIzRDlGQQotOjEwMDVEMDAwRDczNURDMzZEM0JFNDhBQzM1NzczNEYzRjcwNDM2ODhFQwotOjEwMDVFMDAwRkJCMTJCQ0I2QkE5REUwNjc5M0YyNTMxOTVGNDlCNUNFMwotOjEwMDVGMDAwMzcxRkZGREFCQzg2MEFBNjFGREY3RDhFQkYxRjcxQzBDMgotOjEwMDYwMDAwQzdGRDNGQUI5QkExOURCRjg3RTBBM0Y0MzFENjZGOUM5NAotOjEwMDYxMDAwNTUzOEMwRUMzRDRDMUY2NkY2MUVBNkZCOUIyMzk0RkU4RQotOjEwMDYyMDAwQThEOUEwNzQyRjFCMTdEM0ZCOUJBMzk0RUU2OTFFNDc3OAotOjEwMDYzMDAwRTk1REMyNUVEQzI0RkNCRDVGMkE3N0QxRkFGOUJENjZCNAotOjEwMDY0MDAwNThBQjU1QTM5RkQ3NDdFOTNEQ0RGQTVBQ0Q4REY2NjVGNgotOjEwMDY1MDAwODREMjNGMkIzMzE2RkFDODVGRDE5OUNDNjdGNDdBRTg3RAotOjEwMDY2MDAwRDkyQUJBMzczRUIxNUMyMzdGMDc2ODY5MzU3RjRDRTZFQgotOjEwMDY3MDAwQkJDNEVCOUY5NUZBNDYxRkEzRDMzOTg2OEJEN0YzQTU0RQotOjEwMDY4MDAwOTJFMUVDRjU5NjYxQkQ3MTg2NDZGMDQwMzBBMTg2OEIxMwotOjEwMDY5MDAwQjJENkZCMTZDMjUxNTdDNEUxMDYzRDlFMEM2NUVGRUY4MgotOjEwMDZBMDAwM0JEODVGNkQ5MTgwQUZDODQ4MDZCM0Y3OTdDNEZFQ0VDNAotOjEwMDZCMDAwOEEwOEY4MjJERDhGRTc2NUFGRDc4QUZEOEQ4ODA4RjhCNAotOjEwMDZDMDAwQ0EzQkVBRjNCMjhGN0IwQkQ2MkIyRDZDQTM3QjNCRTdBNwotOjEwMDZEMDAwMkUwNkUyNkY2RkI5QjE5NTdDMTVBMkRFQjZDMTRERTA3MgotOjEwMDZFMDAwNjI3QzVCM0FBMEFEMDlFQjdEQjEyOTA2OTUyQ0FEMkM1RgotOjEwMDZGMDAwODk4MThCRjFCRkI3ODg5NTMzNzgyMkEyOUYwOTczNzlERQotOjEwMDcwMDAwRjkzNjJDMEY1OUNBNDVGQkYxMEI1ODM5Q0I1Nzk2REFGRAotOjEwMDcxMDAwQ0JFNTc4REUzNjkwRkEyNENEOEM1MEYwQUU4NTlFRkI4QQotOjEwMDcyMDAwRDU5ODJGNzFGMUZDMUVERkJGNEM0MUI5MkYxMUU3NEU1OAotOjEwMDczMDAwMUQyMkVGNkRCMUI3MkYwOUYwN0MxQUNCRDkzODI1NjE5NgotOjEwMDc0MDAwREVCRTUzRDQyRjJERTRGM0Y2NUZFQUEzMzhFMTdCQkU3RgotOjEwMDc1MDAwRkRDREIyMzlDMzMzRjMzREVEM0JDQkJGMzBDNzMyQkYyNAotOjEwMDc2MDAwN0JCRTczMTM5NUNCRjk5Q0Q2QkM5NkNBNzNDOTZCNjREOAotOjEwMDc3MDAwOTYwQjRDOEJERTJBNjkxQjRFRjZBNEI0MEY0NzlENzY3MAotOjEwMDc4MDAwNzE3QTM2QTM4QjNCQzZFMUVBNkVBRDZDNTk1MTQ1NzA2OAotOjEwMDc5MDAwMjVFODVDNTVDMEI1RTU1QTNCNUM4M0JGNjk4NzZCQ0JFOAotOjEwMDdBMDAwMzdFRDcwMERCRUFFNkZCODBFRjhCODVFQ0IwNTFGMUJFRgotOjEwMDdCMDAwREZCNDhFOUZCQUQxM0VCRUIxQzIzRTdFNkE4NTdEN0NEQgotOjEwMDdDMDAwMjNGOUE5Qzc0RjVCRTk3MkY3QjdFQ0UzMEZGOTM3RkJFMQotOjEwMDdEMDAwRjg3N0ZGOUI3REZDMjFENzdGQkFGMUZGNTZGNkI4RTk4OQotOjEwMDdFMDAwOEI3RkU0MTNGNkFFNkFCNTNCOUIxMjM2QkI5M0Q1NzM5MQotOjEwMDdGMDAwRjk4NUJEQUI1QUVERDg3OEMyNjZDN0IyN0E1RTUxQ0ZFMwotOjEwMDgwMDAwQjRENThCRjVBQTE3RjQwQjdCREMzNkFFRDk2QkRDMDJDMgotOjEwMDgxMDAwNTEyRkVEQjJGNjE3RURENTVGODk4NENGNjVFRENGRThBNgotOjEwMDgyMDAwRDVERjIwRDE5RjY5QUJBN0Y3QUE2Nzg4RkVDMDM2MkUxNwotOjEwMDgzMDAwRDhDNzA1MTFGRjc1OUQ4OEZGMkFGMDcwNzk1RDFFRTcwNgotOjEwMDg0MDAwRkJFQzUyODgyQkI4REZENzA3QzBBODQzQjgzRTBGRTVCMgotOjEwMDg1MDAwRUYyMTE1NEM1RDdFMUFEQTI3Q0FENEU1QTdFM0ZBRDc1MwotOjEwMDg2MDAwNUEwMEI2N0REQjM0M0ZERkFGOERGM0FCMzQ4RTlFMDc4RAotOjEwMDg3MDAwNEQ1ODBFQkU0NEQ5ODU5NkZCQUU1QjQ1QkQ5RUYyNjBEOQotOjEwMDg4MDAwQTJFQ0FCOTZGMjJGOEJGNkFERTJCRUUwRjk2QjNBNUFEMgotOjEwMDg5MDAwNTBDRkU4ODM1OEZEMkNGQzM3NURGNjI3Q0FBMTI4REEzMwotOjEwMDhBMDAwNjEzMkI4Mzc1RTM2NjNFQzRENjAxREQ3Q0RFMTNBNEQwRAotOjEwMDhCMDAwOEM1QjlFMURBRUQ2MEEzRTZFNEE4Q0JCRDUyRkVEOEQ0RAotOjEwMDhDMDAwNDQxOUUxNTFFN0E5RkM3RTdCRTg5QkNBMUYxOTdFNjBCMQotOjEwMDhEMDAwQkJDRkY2MUU1MDgxQTdFOURFMEEwNjQ3NzJCMDBCRjBDNwotOjEwMDhFMDAwN0VDMkVBRjJCRUZEMzkyRENENzZCRkE3QTZDN0U4MUVBRgotOjEwMDhGMDAwRjlDMDA1N0FBRDBBQjlEQkRERDlFMDZBQzg3NkVFMzAxOQotOjEwMDkwMDAwNUZDQ0E3NjU0MTdENUIxNUMyNzdDOEVFQkY2NTBDMEU1NQotOjEwMDkxMDAwRDY3QkM4OTc3OUUyRjM5MUNGN0FGOTZGNUI3Q0I2N0Q4RAotOjEwMDkyMDAwN0U0MTQ5REZGN0JFRTRGREE4OUU3OUIwOEVCMkQxRURERAotOjEwMDkzMDAwNTZCRjM4RTc3QThFRjcyRkVGOUIxNTE0QkE2OERGNzkyOAotOjEwMDk0MDAwNkMzODNGMkY4MDQ0MTk1OEVEQjE4MjgxRjUzRUVCRjhBOQotOjEwMDk1MDAwNkIxQ0UzRjk2MTg2ODlGNjI3MkU1MzI4MkY5RTJBNDhCRgotOjEwMDk2MDAwRTFGREJBNDA1MTlCNUU4MUVCNDJBNDgzQ0UwMTQxRENBNAotOjEwMDk3MDAwNzM5M0ZEQjY0NDY2RDA3RUZDOThCOEZGQUE0NURBMjY4QwotOjEwMDk4MDAwQjk0ODdFMDQ3Q0JBRDA1NTYyOUM4MTFCMzU0ODMzQkQ4MgotOjEwMDk5MDAwNzZDODFEQkZENTVGNkNBNTlCQTkyMEZFOEVCQjUzRTQxNgotOjEwMDlBMDAwMEY0QTU2MzBGQTJCQkRFN0JGQzlDRkVGOEZERDY5Q0NCOAotOjEwMDlCMDAwRjg1NTQ1MTZGQURFRUQzNzZDRjcwRDA3N0VFMDgxRjQ0OQotOjEwMDlDMDAwRThEQ0Y1MzNGNTM4NUMzRDdDMUI2MUZDM0E4MkY0MEFDNwotOjEwMDlEMDAwRjFFRDM2OEZCOUNEOUYyRENFNDJFQTA3NzFGRTNENjcwRQotOjEwMDlFMDAwMUM4ODFGRTM5MkRGQjI3OTVDNzVEODBEMjg0RkYyOUUwOAotOjEwMDlGMDAwOEQzQzE3QkE0QUY4QzdFNjA4M0ZFQzVDODg4NUIxRjAzMQotOjEwMEEwMDAwNkQ3MEQxRkRCMUI3RTFEOUYwNjgwQkZEMUZGM0YzRjNDMQotOjEwMEExMDAwMDUyNkUwRTRGRjkyRTdCRDU3QjZCOTZERkVCMEY5MUJCRAotOjEwMEEyMDAwRURGOTc5MzBBMzA0RjVENkJDRjU2RTQ4MzE3QzVFRTU2RQotOjEwMEEzMDAwRjA5N0REMjdFNjNCMUY5QTU2QTExREIwRDJDREZERjJGRgotOjEwMEE0MDAwNzM3NEQwMDZCMEE1NjVDOThGQjdENENENjZGOTI3MDVGNAotOjEwMEE1MDAwREVERjYyN0M2MzU4RTQ2RDYxMzBFNUMxQjg5QjU3RjcxNwotOjEwMEE2MDAwOERCRTc4MDI2MEZCRDRBQTgxQTg2RjBCMjBFQjdCNzA0RgotOjEwMEE3MDAwNTdCNERBRTFFQjBGN0UyN0JDMDAyQjA4REU1QzcwNjgxMAotOjEwMEE4MDAwM0I5NUFDRkVBRDVGRkJFREU3ODlCOUUyM0I2NEJDQzVDRAotOjEwMEE5MDAwMzFFNDIzQUIxRkU2Rjc3OUE5MjRGOTQ3NzlEQzQ1N0ZEOAotOjEwMEFBMDAwRURGRkRBNEZGQjI1QkU0RTBGQ0E0RkEzRDZENEEwQjgzOAotOjEwMEFCMDAwMzJFNzUyNUU3N0RDMUNDNEU2RTlERTNGMjkzRDA4NkM3NAotOjEwMEFDMDAwRjU1QUZCQUVENzNEMTU0ODVGMzJDMzU4Q0RENDVCMEEwQgotOjEwMEFEMDAwQUMxRUNBRTU4MTBCMTNCNjdBNTVBQ0RFRDBEQ0Y1QkE5NAotOjEwMEFFMDAwODQ1RUZERTlFRUVGNzk3MDFGRjdGNjBGNUVCOTAwRTU2MQotOjEwMEFGMDAwNzJEMTIzMkFGOEQ4Qjg1REJCNDM5MEE2N0Q0Q0NBODMzNwotOjEwMEIwMDAwRkJCNDg1RkJENEFDRTdCODE0MjlDMEYwQjBFOEZFMTAwNAotOjEwMEIxMDAwQUQ5NzBCRjc3QTUzRDM1OUZCODUzRjdBNzUyNDMwM0M1OAotOjEwMEIyMDAwNzRBREU4N0U2QTEwQUVCQjNGNTBGODc5NkFBMjczMjRCOAotOjEwMEIzMDAwQUU2QjBCMzVGOEQ3NTg5NkZFMjIwMUNFODc0NzdFOTJEMgotOjEwMEI0MDAwNDdGNzhFOTU5RDA3MkZBNzdFREIyRjcxN0IyREZBMjIwRAotOjEwMEI1MDAwM0ZFMEE2NzlCMTdBREMxRkI3NEI0OTU1NjdEMTI3RjI0MAotOjEwMEI2MDAwRkNFQkM4MkU4NUMzQjdERjlERjIyMzdDM0JCNzdBRTI0RQotOjEwMEI3MDAwMEM4RUM2OURFRjEwNUY0REJFN0Y0RjE4RjFEMEI4NUY1MQotOjEwMEI4MDAwQjU5REU3MzZFRTU0RDNERTkxOTRCRUUyQTU3QkE5NjYwRgotOjEwMEI5MDAwNTBBOTQzN0M3MkZEQjg3NERGMTJGMjlGMkY2REJGRjkyQwotOjEwMEJBMDAwMUQzNThDRURFREZDQ0RGMDEyNEQyMzVFOUY1N0EzRDM4OAotOjEwMEJCMDAwMzFGRkUwQkQ2MTgzQTFFQUFEOEUxRDYxQzQyQkVCNzdFRgotOjEwMEJDMDAwQjYyNzFGQ0Y3RkVEN0U2RkVDRkY4M0MyREVGRDMxQ0JGQQotOjEwMEJEMDAwREQ4M0ZDRDVEOEJFODY4RkI3RUY5RjVGNDdGREQyRTg5NwotOjEwMEJFMDAwOTBBM0I3RjA5N0IyREVFNzJFNjZDMDcxRUVCMjczQzA4NQotOjEwMEJGMDAwMDlEOTk3OEJGNjFDQkIzQkMxQzYzREIyRjc0Rjc3Mjc4RgotOjEwMEMwMDAwMThGQzhCRkZERjdCNzc1RjhGNzZEMDYzN0UxREY1NDAwRQotOjEwMEMxMDAwRTMwRkZFMzMwQzk2NzVGM0QyMDA1RkM3QkE3NkRERkJBNwotOjEwMEMyMDAwRkQzQjk5N0M3NEJERThBNUY1QTNFQkQxRDc4N0UwM0JFQwotOjEwMEMzMDAwMjk1RDBGRkNBNUM0NjBGNTk3M0Q3QTFFRjkwMTk2M0QyQwotOjEwMEM0MDAwMzRCOUI0QUZGNTEzRjkzNUU1QjVDMjk1MjJCQTFBRkIzQwotOjEwMEM1MDAwMTUzNENFOThBMTJENTIwNzdEOUVEOEE3ODI5RkMxRjk0OQotOjEwMEM2MDAwRjYwQjVFQkExRkQ1QzhCRTJEQUY0NTdBMkQyMUJEOENCRgotOjEwMEM3MDAwRjkxQjE4OUU5N0VFNUVGRDhFM0EzMjFCQkUxMzgzNUMwNQotOjEwMEM4MDAwNzhEOTAwOTgxODQ2OTBERTVGRkRDQTE3Qzc2MEVBQTZCQgotOjEwMEM5MDAwRjM5NTQ2RTgyNkJERUE2Q0Q3RjgxQ0EzRUI1OUI5RTlGMQotOjEwMENBMDAwNzgwQzNFRjRFMEUxNUZFM0VFMzU3Q0RDNzY0NkM3NzAxRAotOjEwMENCMDAwNkYzQUJFOERCRjhDRUY0REM3NkYzOUU4NzgwQzE2REZFOQotOjEwMENDMDAwNzMyNzE2RUUxQjkwRjUzQzU4OUU5RjJENzlFODZCN0Q5RgotOjEwMENEMDAwREE1QjUyMkZGNDg3RTcwNTBBODdFQkJDODBCOTI2ODBFMAotOjEwMENFMDAwRjJCQUY3ODdERkJGQjM4OEQzNzkzQTQzNENENzlFNjMxNAotOjEwMENGMDAwNDM4MEYxQzkxQkVFRUVDQjUxM0Y3NjNGRUFENTcxQkQ4MwotOjEwMEQwMDAwNUZGOEU4RjMyNDZGNUQwRjNERTMzMUM4NEU4N0EwQzI2MgotOjEwMEQxMDAwRUM4RDJFRThGOUU5NDBGQjYzMjkzRkFCODJDNkVEQTFEQgotOjEwMEQyMDAwQjQzNzlDQTFEN0QyRDQ4NTBENDY5OEJFQkY0MkRGNTNCRAotOjEwMEQzMDAwNUMwRTk2QTYwRTVFQTQ2NEExREZDMTAwQkZDNzBEQTkxQwotOjEwMEQ0MDAwNjJDMkNCOTJFREJGRjU0MEQwNEU1NzY1MUNEMkYzOTVGMQotOjEwMEQ1MDAwQTlGODNEMTczREU1RkM3NTlDRkZEOTE2QkE2RUU3RjI4MAotOjEwMEQ2MDAwOUI0QjRFQkJCNjdBMzU4QzY3NzBEMkI5NEJCQzlCRDJDRAotOjEwMEQ3MDAwOTg1MjlFQ0Y0Njc3QjkwRTlFRUNCOUVBMDFBNzdDOEJCQwotOjEwMEQ4MDAwNzlGNzI3REZGRENGRTdFNEYwRjVDMzgwNjFFMzFCODk0NgotOjEwMEQ5MDAwQjcyMzFGNjZEN0ZCQ0YwQjdEQjExNDlBMUEwNjBFRUQ1MQotOjEwMERBMDAwQkQwRTZBNkNFMzM5QTgyMjAzRUYxMThDNzM2NEZDNzZFNAotOjEwMERCMDAwRTQwNzZBMkFDMUJFQUY2QTdGODJGNEI3NTM0RjJDQ0RENQotOjEwMERDMDAwNjE2N0JGMjFDN0RCN0Y3MDI0RUFCMzIzOEZGRjg0RjhGQwotOjEwMEREMDAwNzFFOUVFNTczQ0U4QUY3OTZBRTc4MzlFQ0VFMTE5RkVGMAotOjEwMERFMDAwQzc3NUMxRkE3RUM2OTFGQjBFOEUyNEZEOERGRDY3QTFFRAotOjEwMERGMDAwQ0YzMUQxN0ZFMzAxN0JGRjhEQkJERkIxRjVCRjI4RDFDMAotOjEwMEUwMDAwRUUyMUZGNkEzRkUzQkNBNTk5OTdFMDdDREZFQTcwMDMxRgotOjEwMEUxMDAwQkU5N0Y0NTZCQkRBOTBDRDBFN0EyOUUwQjZDNTUzQUQzNQotOjEwMEUyMDAwMEFENUJEODBGRTQ5QjVEMDYzQTBGRTZCQjlEMTdDM0UyQQotOjEwMEUzMDAwODFFQkU1MzM2RUZFOEVBNTY2QkU4MEU3RDdDOTAyOEZEMwotOjEwMEU0MDAwODFGQkRFOTZEMEM1NjA1OEY0Nzg5QjAzOUY3QTkxM0U3MwotOjEwMEU1MDAwMDlGNzAzRkE5NEQ4MThFQkZFNEJDMjVGNjBCQTZDRjA0NgotOjEwMEU2MDAwMkYwQjM1OTQxQTQxQkU4RjMzRjA3RDBBMkQ0QUZFNjk0RgotOjEwMEU3MDAwMzUzQ0I1ODFFRUQ1RUIyRUREOUY3NURERTZGREI5ODMwMgotOjEwMEU4MDAwMzFEQTc3Qjk3NTE3MTgxNkZFMUEzNUY5RTIzM0QxMDUzQwotOjEwMEU5MDAwQTc4MTYxREIwRkFDOUJDMkNGODNFNUZDRDcwRDg2Q0Q2QwotOjEwMEVBMDAwQzBGNEYwM0FBNUZCMzBCRTQzOTQ5OEM2RTMwQkE1N0Q5MQotOjEwMEVCMDAwMDc2MkRGMUZDNjdEN0Y0NTZGN0IwRjRDRDM0MDdENDRBQgotOjEwMEVDMDAwRUFDOEUwRTM5Qjk2RkJDRDk5Rjg1RDMwNUMxNEM3MUM0MwotOjEwMEVEMDAwQTU0RDgwMDY3MThBMTNGMjYxOTRDNTUwREM3N0I1NTMzNQotOjEwMEVFMDAwMUE2NEVBMEREMzczRjNCODVFRjI0MjM3RTU2RjZCRjgxQwotOjEwMEVGMDAwMDM5RDczOTRFNkM1QzZFNDE1NjNCRTUwRTFGMzQ4RDM4MQotOjEwMEYwMDAwM0U0RjVFREY3N0U1OTU5N0Y1QTUwRjYwOEE3NkM0RUFEOAotOjEwMEYxMDAwNEZGMkMyNjZEQUNGQTAzQkYzRTMwMTE5QkNDODM4M0JGRAotOjEwMEYyMDAwRDlFRjNBRkY0NDdBMUYwM0U3MzkwOERGNkJDM0M3OEQ1NwotOjEwMEYzMDAwNEFGOEY5MDE5RkI3NDlGOTYyOTk3NzhDODMzNUY1M0FGOAotOjEwMEY0MDAwQjEwNDkzNjhDNjE1Rjc1MEJDQTdENzQ2N0U5MzgxRDBFRAotOjEwMEY1MDAwNEU2OTM5NzQ1MDVBRThEMzE1OERFMDdCOTlGQzVEMkVBQgotOjEwMEY2MDAwRjgwMzdDOUNFNzgwRUYwNEVDNzhBN0ZEN0Q5RDZBQkVDQQotOjEwMEY3MDAwMTg2Nzc0NEM4QTdEQ0VGQTAyN0IxQzUyM0M4RkVGMTNBQgotOjEwMEY4MDAwOTZFNUI5NjREQzczRENCQTZGNEJDMjYyQzI4MUJGODg3QwotOjEwMEY5MDAwM0Y0QjI2REI3RDM3MkZCRTIwQ0ZCMjlGNTU4MzFEM0NCNAotOjEwMEZBMDAwQUVDQ0IxNUYzRTRGQkQ4MUNFNDU1NjQ3RkE4RUU3NUE3MwotOjEwMEZCMDAwMjlFMkMyNzM5NUI3MTVGQjY2NkYwNTgyOUZGQkMxMTRDQQotOjEwMEZDMDAwMUY4RkVGMzZDMUQwQURGQzg4QjEzRDc1RDY3ODQ5RDNCRgotOjEwMEZEMDAwRjY4RThFMUJGOTUwNDUzQzI3MjhGNUEzNUNCMTM0MEZFMwotOjEwMEZFMDAwRjk4QUQxRTE1NkMxODcyMUU4MTQ5RDc0OTNGRjYzOUI3MAotOjEwMEZGMDAwMjdCRTBBRTcxQkE5NkE1MkY4RjdCOEMyRkQ2NUE2OEFBMAotOjEwMTAwMDAwRjMyRDExRkRCQkYyMTY5N0M1RkI5ODI3Q0M2NDdDNjJDQgotOjEwMTAxMDAwODk5QjU5MkZFOEEyNjlBMDA1NkExMTlFQ0Q4MkZFNEVEOAotOjEwMTAyMDAwRkVCNEM3QkY0QUJCMkUyODcyNUUxMTg3RjdFNDk4NjdFQgotOjEwMTAzMDAwRTk3RDMxQUQyODQ4RjEyRkMxMzEyRERGNzA4REM0RjkyNAotOjEwMTA0MDAwMzdFOUE4NTc4MzMyQkUyNUNBRTMxNUU1QkVEQUY5RUVDMwotOjEwMTA1MDAwOEJENzExMTdFQjE2RkJGNzVFNzFFMjYyM0RCRTE1M0ZCMQotOjEwMTA2MDAwNjRCMTlCOURFQkYxN0Q3OTM5REUxMzFBOTczRDFFNTFEQQotOjEwMTA3MDAwREE2OTlGOTRGRkU1RkU3M0IxQUZFMzI5MDI0MjM3Mjk5NQotOjEwMTA4MDAwOUU1MzEzN0U4QjQ5MTdFOUU0NkYzRkJBNUJFMUVGMTE4MgotOjEwMTA5MDAwM0FGOEU5RThERUZDOTFBODJGNTE5RUYxNURGMzNDRjFBRQotOjEwMTBBMDAwNUREOTdERjAyMERBNTcyRDYxMzAwQjBBNDlGRjE5MkFFRQotOjEwMTBCMDAwQzNGRjJBNjU5NDRGNjFFOTkyN0RFRjNDRkQwOEZBRjE4OAotOjEwMTBDMDAwMEZBODgwRUZCOTFEMERDQTczNTBCMzAwODk5NjA3NkI0NgotOjEwMTBEMDAwNkQ3NEZFQTRGM0VBN0Q4RUM5RTVFRjZBNURDQTVGOTA4OAotOjEwMTBFMDAwREFCREJCNUJBMTdCNjIyQTlDNzkwN0JFNzNENTc4RDgzOQotOjEwMTBGMDAwMEQyOTU2RkUyRUYwN0VERkREQ0NFRDg2RjkzRjdCQjA2QwotOjEwMTEwMDAwOEU0OTAyNkMxNEYwRTBGQTY1NUQ2NzA2MzQwNEMwQjBFNQotOjEwMTExMDAwRjA0OTQ0QUUwQjA5QjMwM0RGN0Y5RTJCRjA1MzFDMkIyOQotOjEwMTEyMDAwQjRENTkzRjNGQkQzOUM4NkMzRTRGRjg5Q0YyM0ZCMTU4RgotOjEwMTEzMDAwREYxMUI0RjYwRkMyM0Y2MkIwN0ZDODk3NEUzQzFDNzdGOAotOjEwMTE0MDAwQzUzRDQwRUI0QTJDM0Y0RDc2MTBEQjRGRTNGRTIzQTUxNwotOjEwMTE1MDAwNDQxMTZFQTczRjY1RTk3RTg1RDZCM0FCRDg3QTg2RUY5QQotOjEwMTE2MDAwNEI1Rjk1NzJFQzQ3MURFRjIyNEJGQzNCRjlENjFEMTRFQgotOjEwMTE3MDAwN0MxQjg0NjAwRTNDNDdEM0ZDN0M5NkU0RUVFQTlGRjEzNgotOjEwMTE4MDAwQjhCNEFCRjcyOEY0OEU5M0RBNzk3QTNFMTBERTU1RjJENAotOjEwMTE5MDAwNEJCRDBFNERCN0IzMTUyNkMzREYwRUZDNzkyMzc2QkNDRAotOjEwMTFBMDAwRkIwRDNCREVGMzZBRUNGODBENDVFRDc4NzRFMjM5N0YxOAotOjEwMTFCMDAwNUNBNUFERkUyMjc1QjE4Nzk4NEZFMEJCODZGRDQzN0NGMAotOjEwMTFDMDAwMzMzRDQ5RjM1OENBRTY5MTM2N0FFMzczQzE4MTc1QUI3MgotOjEwMTFEMDAwRDA1RkQyMkYxRTFERjgxQkUxQzBERjMxMzg3MDkwOTcxMQotOjEwMTFFMDAwNDJDQzU3NDJBMjRGRjMyRUQzRDIyNDU3NEUzOTk0Nzg5MwotOjEwMTFGMDAwMkFENzNCMjZEMUI3Njg4OEZDRDQxMUQxODkzMjk3Qjc1QQotOjEwMTIwMDAwMUJFODZCRTc0MjU1MUIyNTM5OTRGMUM5NzkzREVCRUFBMAotOjEwMTIxMDAwQUJGMDMxNEJBRkI5RjBEMDJCNzMyMEI3RENCNTM3RkI1NwotOjEwMTIyMDAwQTI3Mzk5NTBERkQ3MENEMUI5RDU3ODVFQUU1M0JBMTlGNQotOjEwMTIzMDAwRUI5RkQ1RTc3QTRCRTNCOTIxQUFEMzdBMjJDRTREOEUyNAotOjEwMTI0MDAwMEVFN0VGNUFCNUE3REYyRjQxRkJFRkQ2REFFRTBCRDA1MgotOjEwMTI1MDAwRUU2RkJDOTJDNzVCN0UyRkM0RDdERjFGOEJGNEZDOTA3MAotOjEwMTI2MDAwODdGNERENEQzMTE3OThFODJGMzhBMEE2MTRGNDQzRTkzMAotOjEwMTI3MDAwRTZDRkNFNDVCQkVEODBEQkEwRjU0RkVGN0VGQTVGQTg1MQotOjEwMTI4MDAwN0NCNDhFRTdDQzY1QUVCNjUxMzgyRUFCNEZGRUZFQTNENAotOjEwMTI5MDAwMDc1RTBENUY2MUIxOEZCQUY2N0ZGNzBCQjgzRTZENzJENgotOjEwMTJBMDAwQzE4MjZDRkI4MEY5NDEzRTdFNTdDRDFGNEE5MDJEOTczRAotOjEwMTJCMDAwRjhCQTY5NUZCRUJBRDNFRTY3RjNFQ0UzN0VCOEE1RkI3QwotOjEwMTJDMDAwMkYyNDdCRjREMDNDRkUwRUU3NDM0N0Y4N0RENEE5RUFGNwotOjEwMTJEMDAwQUM3RjFBQzFGMkUzRkY1M0UzN0ExNUNDRTlCMzRCQTgxNAotOjEwMTJFMDAwMEFEMTMzRTk2Nzc4NjY3ODVDOEZGMTlCMjgxNzdGNzRBMQotOjEwMTJGMDAwQTVGMEVGMUM4Q0ZGMjI3RkU3NjlGQzhCNzgxMkM2OEE3MQotOjEwMTMwMDAwOUFGOEJCRjE4Rjg0QTcxRUM2NzRDQTAxODVGQzQ3OEQ2RAotOjEwMTMxMDAwNDdGOEZBMzZCNkMzRUUyNzNBN0IwQUQzMEJBQ0ZGQkFDRQotOjEwMTMyMDAwMDNEQ0JGNTVEN0M5Q0YwN0NFN0VDMTVFNkY3Q0E3M0QxQQotOjEwMTMzMDAwM0ZBMTFGRkU1RDE5MTRGQkM4MzA5NDlDNEM3QzZFREFGMwotOjEwMTM0MDAwNkRBRTBENzJCQjhBRUU5MzQ1QjVFQ0ZCQUY1NzQzN0M5NwotOjEwMTM1MDAwN0ZDNEYwNDFGMzNGREEwREQxMTU2QzFFNDdFNzBFOUNCOAotOjEwMTM2MDAwODRGNzkzOEVCRUNGQ0YxQjhFN0VBODM2NjREQjVGNkQ3NQotOjEwMTM3MDAwMEQ3MjdFRDlFNEUxRTdDNzlCRTYwNTUzMzdCMjc5M0NBRAotOjEwMTM4MDAwM0U2RkUxNjlCOEFGRkFGM0I3RTJBN0U5N0REOTI1NEMyMgotOjEwMTM5MDAwNDVCODY4NEQzNEYzNjExQ0NBNDcwQkJGRTcwNjZENjU1RAotOjEwMTNBMDAwRDlERTUxOTY3MjIxRTU0NENBNDdEOUJDNDAzQzlCNUZDNwotOjEwMTNCMDAwQjQ1QUNDQUY3RTVFMERDNUUzNzYzREE2RDAxOTUzRDdBNwotOjEwMTNDMDAwMEEwNjU3MUY3ODRDQzA4QTQxMDg0RkUzRkVGN0M4NEYwMgotOjEwMTNEMDAwRTEzQjkwRERERjdEMzAxOEU2N0NCQjIyNzFFMzA0ODZDMwotOjEwMTNFMDAwQUY2RjMyRTE0RUEwM0M3OERBMkFCMkY1OUY4MEY1RTQ4NwotOjEwMTNGMDAwQkZEQTE5RTRGQ0RDRTVFM0ZCNzBEMERBQ0FGMEJEODhBMwotOjEwMTQwMDAwQUVGRDkzQTdBRDYyNzBERUM5RTQwRkQ3RUY0REVFMjhCNQotOjEwMTQxMDAwQzE5RDU4MDJGNEVFMUY4ODdCODVFNTE3QzBENjlCMkMzMgotOjEwMTQyMDAwRkJCNTlGMDcyNzNEMUY2NEYzN0MzRUM4RTM5MzA2QzRDQQotOjEwMTQzMDAwQTMwQUMyMURGREU4NzgxOEZCM0ZGQTgxOTdFODM3NTBGMAotOjEwMTQ0MDAwRjg4QjY0QkI3NzgzREMwRTVGMUQzMjlGMjE3RTU5NTA4MQotOjEwMTQ1MDAwNDQ0QTMxMUEwRjQ3RTc4RTA2Mzg2QjNGQzM3Nzk2MzhGOAotOjEwMTQ2MDAwMzM2OTE3MTVDNjk5MEUxQzgzRUY1OEJBRjg3OTE4REI0MwotOjEwMTQ3MDAwQTdFMUZFQTMxMUU0NEY4MjhDNTQyOTdGNzhEOTBERUZBOAotOjEwMTQ4MDAwODk0OUJEQUIxQzUwRDIyMUE2M0ZDN0Y4ODI2OUY0Q0I3NQotOjEwMTQ5MDAwMTQyRTcwRTFEQjNCQ0MxRUY1RjFGRTNBRUM3NjJCNkFBNAotOjEwMTRBMDAwNjBENEJGQTgwMzc4RDAzRURGMUY0OTdEMkNGNTc4NEI3MAotOjEwMTRCMDAwMDFENzdGMkRFQjM0RDI4RjlCQjU0RTNGRkFBNTJCNEMzNQotOjEwMTRDMDAwQTM1RTMzRThGRDU2OEFCNzE4QkM4MENCN0JERUQwMkRGNwotOjEwMTREMDAwMDUzRDc2RDEwNDgwMDczRTUyQjNGQTQ3Q0UxMEZDQjRFNgotOjEwMTRFMDAwM0ExNEZGMEJFMjdCRTRFMUVFQzdEMUJDOEFGQTYxMDA1QgotOjEwMTRGMDAwRDI3QkFBQjA3QkM2QkZDREY1OTFCQzVGRDAyOEY2MjVDNAotOjEwMTUwMDAwNEU3REI0QzkyRkVDMTg2OEZCMzU5RURCRkZFNDhGMUFDMwotOjEwMTUxMDAwREQ5RkVFRDEzRkYzQTZEMjdBMEFFQUYwMjc5MEJGMjZFQwotOjEwMTUyMDAwRkM1QzZDMEY4NEZFNjFCQjNEQzJDQkQ5QkY4ODI3MTEyOAotOjEwMTUzMDAwMEVBN0JFMTkwNzRDMkYyOUZERUIxRDI3OUQ5OTExREUyMwotOjEwMTU0MDAwOTNDNzEwQkVEMTg3OTk5QzU5REEzQkY1RDRDMDkwNTgwNwotOjEwMTU1MDAwNjc4NTlFM0EwNjEzNEJDRjMzMzJGQzU0QkIzQ0ZBODQ2QQotOjEwMTU2MDAwRDdDMjNGNTI0RjY1RjgyOTQ1N0NFODFDNDcwMTVGNEZDMQotOjEwMTU3MDAwNUUxRjhBRkFFNTE3MkFGQTUxOEU0RUUyN0ZGRkU3MDlDRAotOjEwMTU4MDAwOTQyMzQ2ODc4MkY3NTNEMzkwMUZENjFGMzhERjhGN0M3MgotOjEwMTU5MDAwQkZGN0YwNjQxRjhBRDVENTExN0VERjRDM0I3ODUxMDIyRQotOjEwMTVBMDAwMDRGQjU4Q0Y5NURERTAzMzgyMzU4ODBGMTdFMTQxRDUzNAotOjEwMTVCMDAwNTlERTMyRkVCQjZEOEFCODZGNjlFNDVGOTRFNTVENkNGRAotOjEwMTVDMDAwOTk1RTFERTFGN0M5RjYxRUFFQ0NFN0ZCRDEzNEQxQkQ2MwotOjEwMTVEMDAwODdFRjg1RkY0MkNBODVFNDc3Mjc3RjRCNzk0OEIyNTY2QgotOjEwMTVFMDAwMkU4QjFEQTEyQUVENjJGRjY4RjcyMzI0ODUxRDkxOTQ5RgotOjEwMTVGMDAwRUZDRTI0Q0FDODNFNUMyNkVDQzM2NDcwRDhDRDEzRDlBNAotOjEwMTYwMDAwQUYyREU5N0ExRENGM0Q5Njg1MkEyOUJFN0E1OTMxQzc3QgotOjEwMTYxMDAwOUYxMzFGMzI2REZDODBEOThCOTYzOEY4NDZBRDlCRkMyQQotOjEwMTYyMDAwNjM4RDFGNzg2Q0RGMjU3RTczRTE0NUUyRjcxQ0M0QUY0NAotOjEwMTYzMDAwRjJDOUYxN0I0RUM4MjBGRTcwRTJGOUQzQ0VCRkZDRUFCRQotOjEwMTY0MDAwNzE1OUVGRjFGREEzQ0M3RjAyQzQxRkU5MjQ3RjJDQkZBOQotOjEwMTY1MDAwNEYyMkY5NERFQThGQkE2QjVBOTM3OTQ2NDY1RkM4RkIyMQotOjEwMTY2MDAwMjA1MkVGNDhGRDcyRjZFMkI2MjdGMkIyRTgwRkE3REU4RAotOjEwMTY3MDAwODhCQUY1MkJENjMyRkM0NTlGMENEMjNCMUQ0RTNERjI2RAotOjEwMTY4MDAwM0VGRTUyNDY3RUI3QkI0MzRDMkUxRjc4RUEyRDE3RkExQQotOjEwMTY5MDAwNEQxRTdBOThDRDlEOTU0NzBGNEVFMTdFQzE4RTEzM0IyRQotOjEwMTZBMDAwRUY5Mjc2QUJCNDU3OURGNUE0QkQyQUQ3MUQ3OURFRDQ1MQotOjEwMTZCMDAwMTE4QUVGMDkzMTdDMjlGQjk5M0MzMTNDMjQ3NUJFNEZERQotOjEwMTZDMDAwRkU3OTMwREU4RTcwRTUzMTk4MDMxODBCNTg5M0FFRTA0QQotOjEwMTZEMDAwRkI1OUJCQkNFNjkyQ0YzQzg3RkNCNUE3MzU1QUZGMTIzRAotOjEwMTZFMDAwNkNGREFCNTY3QUMzMjFDNzlGMUYxMkVGMDkzMEFFNDM4MgotOjEwMTZGMDAwQkJBNkJDMEVGODYwNEJGOTdCMDFFNTIzMjE4RUVCMzNEMgotOjEwMTcwMDAwNUUyQkM1NzkzRTJERDY5OTVGODVGOEZBMkNEMzlGMDdCRAotOjEwMTcxMDAwNjMzRjQ1RjhERDFBMjRCQ0I1OUYxQzZFRTk1RkVDMDhGOQotOjEwMTcyMDAwOTk0RjIyOUU3QzBEMjZDRDYzOTAwRTUxQjRGNzA3NjkyOAotOjEwMTczMDAwRUQ0QTk0QzE1MUI4RDg1MDdBOUMzRDcyNUQ2N0ZEMEQ1OQotOjEwMTc0MDAwOUE2RTRDNDIzOTFBODQ3NzBBQjAzRURBNDc1OUU4RjM2OAotOjEwMTc1MDAwNEE4OEZCQzE5N0Y4M0E5RjQyMTNCRTcxN0E1MzQzQjg0NwotOjEwMTc2MDAwOEZGM0Y1Q0MzQjA4NTFFMUU3QjJDNzgxMUM3REY0Rjk1QQotOjEwMTc3MDAwQzE3OEZFRjlCQjZGQkYxN0MyNzNBREZGRDJCQTQzMDg4MQotOjEwMTc4MDAwRTcxQjM3RkMzQTg0RjcyMTdFNzcwM0RGN0Y1Q0VFQjBGRQotOjEwMTc5MDAwNzMzRTEwRjhCQzI0MUMzQjhBRjNGREQ3RTY4RkVBNkMzRAotOjEwMTdBMDAwRUZBRjJDRTdFNzMzNTdBNTU0REM5NEY2RjBGQkEyOUQ4RQotOjEwMTdCMDAwNzlFNERCOTNGOTI1RUQwMzZDNzlDOUE3NEJCQzNDNkU0QQotOjEwMTdDMDAwQ0IzOUZGQjNDMkZDMUNGREFBREQ1QjNEODMwQzFDM0Y4MwotOjEwMTdEMDAwQUU4NEQ5Rjg2RjA4M0JFRThEN0QyMUYyN0Y0ODc4RTYyNAotOjEwMTdFMDAwRUMxRUU1NDEzQ0ZDRDcwMUFGMzhGN0VGNzA3M0ZDOUI3MgotOjEwMTdGMDAwRDNGMTdDMkUyRTQ4RTE4NEYzQTlDN0YyQThCRjJCMzc4MgotOjEwMTgwMDAwQTg2NDc3Q0M2NjYzMkQ2N0ZDMUQzRjcwMTVFREMzOUQwMgotOjEwMTgxMDAwRjNCOEYyNzdDNkQ0NTI0NkJGMkJENzI4NjRBRjYyRkQyNwotOjEwMTgyMDAwMUIxODNGQzQ5N0FGQTY3MzNDRTczQzY3MjcxQ0YxMjMwNgotOjEwMTgzMDAwQzJBRTcwQzY5OUNDM0ZDMENGREZFNzgyNzFGM0M0OEFENQotOjEwMTg0MDAwMkM3MTI3MDdBNkQxQjlEQkZDN0VGNjNENTU2MUIxRUZCRgotOjEwMTg1MDAwQTk4M0IzMzE2RUZFMTgwQ0ZGRjdFMTQ2RkZGQjlFMzdGQwotOjEwMTg2MDAwOUE4MTgyQzhERTZBRjY1MTdBQTQ1OUE3RjQyOEVBNEYxMQotOjEwMTg3MDAwM0MzRkRGN0ZGMDI5RTIzM0FEQTMwRUU1N0VFRkUxNTc3OQotOjEwMTg4MDAwRjMyRTM1MzI3QUZDNEI1QkRGN0JFMjJFOTYxRjBERENBQwotOjEwMTg5MDAwQ0YyM0ZERURCMzA0REVDRjE1RkE3Q0JFQjAxNzQ2N0YzMwotOjEwMThBMDAwRDBCNzNFOUY4NUY4MThEOTFCNUVBOUM3NjdFMURGMjEzNQotOjEwMThCMDAwQjRFMDQxRUE3NTI3M0VERTNEM0MzNDBGRjlFM0ZDQjA2RAotOjEwMThDMDAwRjNCQ0Y5RDNFMTI1NTdCQjI1NkFGNjc4NDYyOTQ3NDc4QgotOjEwMThEMDAwNDM5Q0FGRTc2RUJGNzBENTQwMzY3RUYyRDFENzg3NzQ5OAotOjEwMThFMDAwNzIzREYxMUNFQTA5QzlBNzAwNEQxRTk0NjMyNzNGNEFDNwotOjEwMThGMDAwM0VFOUUxQkIwM0I3MTA5RTI0N0YzMEI5OEE4ODczQ0VERQotOjEwMTkwMDAwMDhFRTBGOURGQ0Q3NUY3QzUzOTdCQjczMDhFQTA1Mjc1MQotOjEwMTkxMDAwOUY3NTM5RUU0M0NCRjRFQjYxRUU3RjlGNkI5ODUzNzE2QgotOjEwMTkyMDAwQkZDQTk2OUI1NUZDM0M5MEVCQTMzN0I0QjZBN0FFNDcxNQotOjEwMTkzMDAwNzlERENFRTU2NUM5OEZGN0ZDMDhGNUQwQzJGQjM3ODRBOQotOjEwMTk0MDAwNTEwRkJEQTlCNTk1RTA3ODhCNzdBQzBDRTNCOUZBMUJDNAotOjEwMTk1MDAwNUEyMjhDRURERjRDQTk1OUUzMUZFRjBGMkJGMkVGNzVFNAotOjEwMTk2MDAwREFFMjI0QTAzNTcxMDFDQUYxOUY3N0I4NzUzQzA3NkJBNAotOjEwMTk3MDAwRENFOUU1RTdFRUZCMzhERTU4OUU5RkI3RUZDQjFFMjc4QwotOjEwMTk4MDAwQjFGMERFMEQyNTA2OEZBN0I1Qzc0QjZDNzc5M0ZGMDIyQwotOjEwMTk5MDAwRkQ2QjM4NENBRUYzRTI5RUYzRTdGNkJFQ0ZEMzFCRjdGOAotOjEwMTlBMDAwODkzODlCN0REM0IyQzY0QkM4QjgwNDI3MUZERkUzRTA1QwotOjEwMTlCMDAwNUY4NjFGRjJGQjI1MTg1Q0U0NkUxN0U3RTRDOTVENzdDQwotOjEwMTlDMDAwOEM3Qzg1QzE3NzY0RkJDRkMzQ0E3MEFCM0Y5RTlGQzczOQotOjEwMTlEMDAwQkZEQjdFQzUzRDNFNTc2RUZFRUQxMkZDOUVCMTI3NTIyOQotOjEwMTlFMDAwNTlFMzI3MTZCQkQzNjFEQzU3MkRERUVBQTY3REUwRTI4MgotOjEwMTlGMDAwM0QyQUUwM0I3OEYwQTI5N0Q2RjM0NTdCOUVGQ0NEMzk5QgotOjEwMUEwMDAwMENCRTQ1MEZCODhCQTZGMzY5NTA5Qzg0QTQ1NzRGMUM5RAotOjEwMUExMDAwOEJBMENGQzIwNzlGRTRFN0NCODY4ODY3MTE3NDVBRjQ4NgotOjEwMUEyMDAwQzA0MTBGQzZFNTM4RjEzOUI5RkRBMEE3RDMxMTA3NDE3MAotOjEwMUEzMDAwRjQ2QTdGNjUyQUREMjdEQzc1REM4M0VCRUM5QjhGMjk1QwotOjEwMUE0MDAwRjRGNzM5OURFRDE3NkM3RDMyOENGQTAyRjE0NDcxMDA4OAotOjEwMUE1MDAwODI2RUI5RTM5NkQyMTczQzNDODZFQTkxREZBRTNGM0FGQwotOjEwMUE2MDAwMzZBMzJDOEUyNTdFQkZFRjYxMDZDNzgyOTdCQzE0M0YzQwotOjEwMUE3MDAwQjVFMEJFNkIyOENFRTg3NUFEODlGM0ZEOTY5NTI1QjgyNwotOjEwMUE4MDAwRkUyRTcwMjc0QTc0NEFGOUY3MDU3NzVGNEJGQzM4RkY0MgotOjEwMUE5MDAwOTk2QjRCQzQ3REE0MzJFRUVGNDk5NEUxM0NBRkRDRkM4MgotOjEwMUFBMDAwMzU5QUU3M0M4ODEzM0YyRUQ4QTJDNkQwQ0Y3MjRDODMxQwotOjEwMUFCMDAwODYwN0IyQzhDRDE3RjJCOURDQkNCRUNEOEI4RkU4QzBBQgotOjEwMUFDMDAwRUJDMkNGOTk3ODU2MTU3RjNGRDI3OTVFQzVERjhCMzk0RgotOjEwMUFEMDAwMjZGNkRGMUY4OUY1MTg3MDc1QjNFQ0M3MUFCN0FGRUU5RAotOjEwMUFFMDAwNDAzQUJEMzVEODJDRDUyOTlFNDA0QjA4QkNEMUJCRUIyNAotOjEwMUFGMDAwRUEzM0U3OTUwQUZENDZFRkRDNDgzQjY4MzI3RUM3RkFEOQotOjEwMUIwMDAwMUQ2RTdBRUZDNkQyQ0VGNjVFQ0QzMjMxM0U4MzNCQTA1QgotOjEwMUIxMDAwOUNDNUQyOTJFQzdFRDA5OUY5NTIyRjg4RjgxQkM5NjdFOAotOjEwMUIyMDAwQjlGNEMwNzYxRUNGRjJGRTczNUNDRjYwNUMwRTk1Nzc4MQotOjEwMUIzMDAwQjhEM0E1QjY3ODFDQUZFRERFNzUyNkNFQzQyREU0REM5NwotOjEwMUI0MDAwNUVDRUUwQTQ3ODk5MUVGQzNFQTZBNEYwRkQ2M0M5MkZFQQotOjEwMUI1MDAwRjNENjdCRURGMTc5M0RGQ0UzN0NBRkM3MUUzRjMzREY2RAotOjEwMUI2MDAwNjE5N0M5QjREN0ZBOUZFRjM4QUZEQjdDNjJGMTMzOEI1MgotOjEwMUI3MDAwREQyOThBN0Y1QUZDQTI5N0Y2Mjc4QkY3Qjg2Mzg4OTdFRQotOjEwMUI4MDAwM0ZFRDdFRTIzNzk3MzJCRUZGNTNCQjk0NjNCQkRFNzVGOQotOjEwMUI5MDAwQ0FGMTgyQkQ2MzIxOUIxQ0ZGMjkxODg1QUM3MkNDQkVBMwotOjEwMUJBMDAwNjc5NUUzNjBFNjVDQzM4MDUzQUY3N0U3RTdEMEJCMTc4OAotOjEwMUJCMDAwMzhGMEM5RUM4NjdDOEMyMzdFRUIwNzhCNEUyMzdGODUyNwotOjEwMUJDMDAwMDNCRjUyREYzQUY1RTg2QjYxODNGMERDM0JERThGQUY5OQotOjEwMUJEMDAwRkI5OTc4NEM4RTQ3Qzk5RjBCN0ZCODg0QzZFOUUxNjNCNwotOjEwMUJFMDAwQzlBNzkyOEY3M0M0OEQzOUYxRTkyQzJGNDRERkQ5RDg1RQotOjEwMUJGMDAwREU3RTkxNDQzREQ0RTBERjY3NEE3QTgwQkZGM0U2MEE5NwotOjEwMUMwMDAwNDQ5MTdGRkIzQkVGN0MzNkJGNDJCRUZCNzYxNkRGMTc2RAotOjEwMUMxMDAwRjJGM0NFNjg1MEM3QkY1NDAxRUUyMjQzQ0Q3NkNFMUVGQwotOjEwMUMyMDAwOURFQ0NBNkFGRjI3RjJGOUI5NDYzRUZBMjMxOERFMUU3OAotOjEwMUMzMDAwQ0UzN0Y4QkQwNzM1MjYxQzc5RUQ3NDhGODFDRTU2MTE0RAotOjEwMUM0MDAwQ0U4MjMwQzk5OTVCQzRBOUIwOUVFOTNFN0EzNENGRjUwMwotOjEwMUM1MDAwOUVDMUZBRDg5MkZGRDRGOTFBQTM2Rjc0QjRFQjlBQTE3QgotOjEwMUM2MDAwMkNGRjUwRkU0QkU3NkJFOEFGOURFMDdBQjA5MkU1N0YyQQotOjEwMUM3MDAwOUNGRjVCOUUzRkNCMzVEQUNENTg3NTI3QkM3Q0ZFMTRBQwotOjEwMUM4MDAwNTY3RkE5OThGNzUyRTkyNzY5MTk2QkYzOTM2OEFFNTcwNQotOjEwMUM5MDAwNkVDN0YzMUNFRDYxMzcyNDU5RkU2NjI2RjdCRURBQ0MxOQotOjEwMUNBMDAwMzk3MzlFMTcxMjdFOTZDRkYzQjA5NEU1NTc1NUZDN0FBMAotOjEwMUNCMDAwMTU2RTIyOUYwRUM0RUZDQTI3N0NENTFCODhFNzIzQkE3NgotOjEwMUNDMDAwOEZFMjc3OTZGREU0M0M4QTIzN0QzODlGQzdCRDlGRjk1QwotOjEwMUNEMDAwRTAwNEZBRkI4RUE3MTA4RURERjlDNUI5RTE2ODcxRjM1NwotOjEwMUNFMDAwN0U4RUVDM0Q3MzMyRTJGOUNDRDNEMEE3OTZBMTQ3QURGRQotOjEwMUNGMDAwNjZEMDc3M0Y0MzdCODJEQkZEMTFCQ0RGOTIyQ0YwNTAzNgotOjEwMUQwMDAwM0YwRkU3NEJGQTlENTgyQUUzNUVENDNDQ0UxNzZBQkVEQwotOjEwMUQxMDAwQUJFOTAxOTYxRTE0RkNGMEI4QzAwQkZFRTBCRUZCRTg3OAotOjEwMUQyMDAwQTNBNURCRjhCQjU2REQ0MzkwREVBQUZBRUVFRkQxREVDOQotOjEwMUQzMDAwRUNCRTJDOEZGRTdFQzg0QjAxOEVCNzk3MDIxQzZGOTdBRQotOjEwMUQ0MDAwRTRBRjc1OUZDMUJFRDdGQTg2NUM4MzRDRkY5MkIyRkJBRAotOjEwMUQ1MDAwNUE0Q0I3RUJGMTVGNzIzQzQwMUFGQkJERjQ3Mjk1RjczOQotOjEwMUQ2MDAwMUI2QzBBRTE3QjcxOEFDOUVENzA4NTMxRDMyQzg2OEY5QgotOjEwMUQ3MDAwQTQwOTg2NjcyODhBQjAzREZFNDM1NTZCQkJEMzM0N0VFOQotOjEwMUQ4MDAwQzgzNjNFOTRCMzc1OTNDOUY5MjVFMzM5QkQxODZFNjkxOQotOjEwMUQ5MDAwMUQ3RDdFMUNDRjRCRjg2NkE2MkE5MzlEMDZDMUYzN0I2MgotOjEwMURBMDAwRTQ4RjUxREVENDYwREM0RjVEQ0FDQzJBQzhGMjVFNzg4NQotOjEwMURCMDAwNTc4MDlGNkY3NjYxRkI5MTk5Rjg4MUM2RkY3NkQxN0UzRgotOjEwMURDMDAwQjYxMUU3QzBGMjBGMUUwMUYxNzcwQUY5QkIzQkQyRUY2MwotOjEwMUREMDAwMzFGRTk3NTc5M0ZGN0JDQ0ZFNDUzQ0NFNDRGOEJCRTRFNQotOjEwMURFMDAwNzk3RUREMjE3RTNFRTdGNDZGNEQ4MEI1QTQ0RkM3M0I4MQotOjEwMURGMDAwRjRFODg0RkRGRjQ0RkFCNUJGRjNCOUJGNDhCRDNBMTAxQgotOjEwMUUwMDAwMDY5RUU0RjkxQ0U4OTZGM0I5RkYwMURCRTBDNkRGMDBBQgotOjEwMUUxMDAwODAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkI1NUE3NgotOjEwMUUyMDAwN0I3MDU0NTU5QUZGNkVERjdFMjVEREU5RjQ4QjEwMDgzOAotOjEwMUUzMDAwODY5QjA0NDg0MjFFMzY0OTgwMTA3MDZDREU0QzhDMTIyMgotOjEwMUU0MDAwNjA0MDY0MTg2OTUwMjFFNkQ1NkNENjQxNkE3NDhCMEVFNwotOjEwMUU1MDAwNDE0NTlEQjIzMjZBMjk1NTZCQ0Q1RTE4REM0NTQ5NjYxNQotOjEwMUU2MDAwMUI0OTM0QkE5RDRDMDcxMDEyMDQzNzA4MjgzMEFFNjY1RgotOjEwMUU3MDAwREMxRDQ0OTczQzY0NTY3MEQ0MkFGNkZCQ0UzOTk3N0UxRAotOjEwMUU4MDAwMjQyOEYzQzc5MEEyNEU5RjdCQ0YzREY3M0JCRkVGRjdDRgotOjEwMUU5MDAwQkRDRUI5MUUzRDc4ODNGOTAwRDdFOURGOUQ5MUI2MkEwMgotOjEwMUVBMDAwNTkwMjk4MEVGNDRGMDcyOTAwMEQ2NkZDQTUwMDVDMzkxNQotOjEwMUVCMDAwOTE5OTBDMzg1RUFGMDc5MDlEMDA0NjQ1ODY1MjY3RTRDNQotOjEwMUVDMDAwQjlCNjZEMzhDRTE0RTlCRjkzQUNCMDc5MEFDRUQ4MUYzRAotOjEwMUVEMDAwMDAxQkI1QjAwRTBBQTNFNkI1RjM3OTE3Q0E1NjgwMTJGNwotOjEwMUVFMDAwOUNGRjEyQThBNjBDODA2OUZEMzkyRkNGQzFCRUExQzdFNwotOjEwMUVGMDAwMDAyQUJEOTc5RUEwRkJFNzc0NkEwMDQ1OUJEMUZCQkJGRgotOjEwMUYwMDAwRTIzMDVFREE5MTYwMkI4NERCRjE5NUE5M0E1MENDNkMxQgotOjEwMUYxMDAwNUVCODhFRkYxMzk0NDQ1MDcyMjI3RDRCOEUzM0E2MkZGMQotOjEwMUYyMDAwMjdEQUY2NDAzMkZFMDg3OEZCNTI1MThFNjI3RTBCOTIyMQotOjEwMUYzMDAwM0NFMzYzRTY3OUM3QjZBNDg3RTQyRUI2NkZBQzIwQjk1QwotOjEwMUY0MDAwOTM0QjMzNjNFNjgxMTNGQUNGRkFCMTlGODM3RkQ3MzM4NAotOjEwMUY1MDAwNjlBOTk1Qzk2MTk0QkYwODJBQkQxMkNBRUJGOTE4M0M1QQotOjEwMUY2MDAwNjE5NDdGQzYxOTNFNEU3QkNFMTMwRUM4M0VDNEIxRjRCOQotOjEwMUY3MDAwRTNEOEVCNjUxMEQ1Qzc3OUI2N0VGQzk1RTM0ODk0M0M3MQotOjEwMUY4MDAwQTVGNjI0RjdDNTNDRkMzMTFFQzY1Rjk3NDdDNUQxMTNBMwotOjEwMUY5MDAwMjY5Q0NFQzgxRTU0MDMzNEY0RTIyMDM3QjY1RjgwMEE3NAotOjEwMUZBMDAwODhEQjM0Mjg0QzA2ODZBQjBDMkFGNkRGMDRERjBCNzM4MwotOjEwMUZCMDAwQjBCREI2NkREODcxNjQ3MjA0NEY4NzM3MTY0RkQ3OTI5MwotOjEwMUZDMDAwNTgzQ0M3NTRDNkUyMzk3Njc1MkM2RUUzN0NCMTM4QTUwRgotOjEwMUZEMDAwNTU0RDhEQjk3RkRCRTZBMjk4RkVDNEFENjUzMUUzMzM4NAotOjEwMUZFMDAwMDJGMzYyRkE1OTNCQ0I2M0M2NEY2RTVFMUVEM0NGREU1RgotOjEwMUZGMDAwQjUyNjY2N0NBRUJBMjFFNjdFREVCRUVBNUJEMjdGNDFDNAotOjEwMjAwMDAwQjAyMTY2NUNCQ0ZFNkZFRkY4NTVDQ0JDNjVGMjVBMTk4NgotOjEwMjAxMDAwMzIyMzNDMDhFMDFGRjFBMDg4NTQ0Q0ZBNDczRDg0NjEwQwotOjEwMjAyMDAwQTRGRTY3QkEwM0M0RjhCRjU5RkY1QjQ5RkY5NjI4RkRCOQotOjEwMjAzMDAwQ0I2QjkzN0RENjkxRjZBQkI1OUE1RUZGODlENjNBOUQ3MAotOjEwMjA0MDAwRjQ4QTczQTA3MEQ3NDhDRjc4NkRDODYwREQyOTYxRUI0MgotOjEwMjA1MDAwNDBFRUFDQzVFQjVCQ0RGQ0ZBQTMwMjlGNkIwOUU5MkEwRAotOjEwMjA2MDAwQURERjExM0FGNjU3MDk1QjU0MEJCM0MzQzAyNzE2QjU2MQotOjEwMjA3MDAwMDk3OUYzQThBQzM0MTJBRjVFOTQyQjI1NDA3OUQyNTA4NQotOjEwMjA4MDAwNzVCQTJDRTQ5MTBFQUFDOEFGM0NBN0QzQURBQjhDOTIyNQotOjEwMjA5MDAwRUY3OTNCMEUxRTQzQUQ4RUI1RkY2QzQ0NUJDNUY3QTZEMgotOjEwMjBBMDAwNTkyMDYwMkU2MkNGRDFEQUU4OUYxNzcwREQzNjE3MDMxMgotOjEwMjBCMDAwMDVGRjU1RUM1QzMwMDFFRjNCRkE3MzE0MDdFMDJERUNBMwotOjEwMjBDMDAwREYwNjcwMjE5MUNCN0IyMTkxQ0JCOUM2QTQzNEY1OTM2NwotOjEwMjBEMDAwRkY5MEQ1QzkyNENGNUVCQkVGNUZFQ0Y4OUUwQkQyRTMzNwotOjEwMjBFMDAwMDY3QzMzMThEQzAxMDNEOTVEOUExOTAyMzY3QzVGOTNCNAotOjEwMjBGMDAwMDFENjU1NjJERjAxNkVBOTAxREI2NDc4QzU0RUY2ODUxNQotOjEwMjEwMDAwNjIyOEQ3OTExNDg3QUJGMzkyRkJGMUZBRkIyNEMyMzgxMwotOjEwMjExMDAwQjIzMThGMEU2NjAwRENBN0Y5QzNBQTVDRTYwRkFGRTAxMAotOjEwMjEyMDAwMUFGQjQ4QTE3QTI1MTlCMEJERjI2MDE2QkI3RUZFN0U2RgotOjEwMjEzMDAwQjQ0MkI0QTdGMzQ2OEU4Nzg2QzMyNUUxMjdCRkRDNjY4OQotOjEwMjE0MDAwNjZFREU1NkRGNjE4QkY1OUI1RkI4NTI0MDVFNzM5OUZBNwotOjEwMjE1MDAwMDM0QjgyNTFGODc1MEJGQ0JBRUQzMkQzRTdBMEZBRTdENgotOjEwMjE2MDAwMTQ4MjY3RThBMUVGQTY5MEQwN0VBOUVGNDkyQjBFNzlFMwotOjEwMjE3MDAwNkFENzNGNTQwMkVBQzFEOEI2MkM4MDNBODE1RjE4MTU1RAotOjEwMjE4MDAwMzY1RTlCQzcxRjlBMEI4NDAzMzE5NkU2QkJGNzIzRDhCNAotOjEwMjE5MDAwNENGMkRERkIxREI2NTFFRkVCQjMxQkQ4NzM3REUyN0QzNgotOjEwMjFBMDAwQUJCMEIxMjM2RUFCNTAyRjBFNkE4RkNENTk0NDc2ODEwMAotOjEwMjFCMDAwRDdDMzEyRjY5N0Y2ODA4MUVDNjE5OTJGQzM0MEYyOUM0OQotOjEwMjFDMDAwMDZDRkQ5NzY5NEU3OEY3NkZFRkU5RjQxQTU4MUU0RkE4QgotOjEwMjFEMDAwRjBGRUJBMjQxQTc3NjMzRTZEMUUxNEQ2ODFGMUU0MjMxMwotOjEwMjFFMDAwNDdDMDkwODI3RTZCRjgwRUM5QjM0NzYxRUYzM0QzRjVEOQotOjEwMjFGMDAwQ0FCNTY5NEY1ODk1QzhGQjNFMDRERkMwNTlENEY3NzI4MQotOjEwMjIwMDAwRjBCMDc5QjVGOUQxRjI2MkZDRTIxQjU1MzU5RkJBMzJENAotOjEwMjIxMDAwQzkxRkVBQzA0Q0ZFQjBEM0M0RkNFMTUwRjVCNUQ2OTc1NwotOjEwMjIyMDAwRjBGRUJBQjRGRURCOENGOERDODVFQUVGQTYxMDJFRjdFMAotOjEwMjIzMDAwRUQ5MjQxNDFGREZGMzlDOUY3MzlGMTQ3QzNFM0ZDODMxMgotOjEwMjI0MDAwN0Y0OUEyRkI2QjRDRUFBQjJGQTExREMwN0U5M0U3NTVFMwotOjEwMjI1MDAwQTBFN0Y2QjNFN0I0NzE1RkQ5RTc1RUI2NTNGQzJDNDU0RgotOjEwMjI2MDAwQTA2NkREREMzRTM1RkNFN0JGOUUzQjk2NzhBNkYxRUIzMQotOjEwMjI3MDAwNjFDMUFGODZEN0IyQzcxMjlGMUE5MjZFRjA4QkY3NUYxQgotOjEwMjI4MDAwQ0QxQTRCRkM5QTIxNzE1RUM2Q0ZEQjg1RkM1MkIyNzEzMAotOjEwMjI5MDAwRERDODJCMDU3OUQ1RjVDRDNDMTdGOTg5ODMyNzlDQzU3OQotOjEwMjJBMDAwMjRBNzFFN0MzQTQ3MTQxRjBFQkVCRjI2OEZFRUMzMzlFQgotOjEwMjJCMDAwRjcyREM5NEJCNjE5NDAzOUVGMDUyRUU3NDk2MTFGQUIyMQotOjEwMjJDMDAwNDNBRTYyRDIzQkRBOURDRDgxRTNENkZDQzc2QjAzN0Y4MAotOjEwMjJEMDAwMjQ3QzNBRjdCRkZBMTg4RDI5QjkzNTNDMzRGRjc0MjBCNQotOjEwMjJFMDAwOTFDNzIzMTA3MUNFMjM3MEMxMzg5N0EzNDc1MTg3MjAxRgotOjEwMjJGMDAwRDE0M0Y5QzJDREZDRDYwMUYyMEJDOEFCNkIzQTc0N0M2QQotOjEwMjMwMDAwNTlFNEFGMkE4MUZDODIwNTNDMEFCNUU4NjVERTlCOEQ2NQotOjEwMjMxMDAwN0E2Q0VBRDZDMTMzRDhCNTkxNTNEM0ZDNEYyOUY2NjUxMAotOjEwMjMyMDAwOURGMDNGRTAzNUE3NjIxQzExRkUyOUU3MzdFQTkyMURCOAotOjEwMjMzMDAwQ0M3RUJDRDZGNTMzOTg0QjY0NzI5NTFDQTlBRUEwRjc0MQotOjEwMjM0MDAwNDIxRkZBNzE5NEI1MTJGRjI4MUVDQzg2Q0Q4NzEzNTAxOAotOjEwMjM1MDAwQ0UxOUJCMzAzRkMwNzEzM0NGRjFGQjlBNUY5RjE1RDZDQQotOjEwMjM2MDAwQUQzNzI2RDNCODVGN0YyNURCMDhBMkQ4MzgzMEZCNDhDRAotOjEwMjM3MDAwRjlFNzM0RUY2Qzg4N0E2RTk0RjgzMEM3MTE5NzFGREM1OAotOjEwMjM4MDAwNjI3QzU4NEMwMTAwNzEwRkU2NzBGRjFFMEMyN0FBODE3OQotOjEwMjM5MDAwMEMzNjZENzE2NTAxQkEyNkI0M0RCQUZGRUY2RTFFNDc2QgotOjEwMjNBMDAwOENEMjYwOEUxOUZERjA1REJGRDlCMzczRTcxQ0E0QzM1NgotOjEwMjNCMDAwMjQ4RTBCRjU5QkY0ODQ0NTMxRTNGMThEQkNGMUM4NTRCOAotOjEwMjNDMDAwRTYwRkUxN0I5NDhBRjBCMjBCOTlFM0U0Mjk0MUJCRTM4OQotOjEwMjNEMDAwQzFEODEzOTM3Nzg2OEY3RTZCRUJDNzc1QjQzQTk1RkZBMAotOjEwMjNFMDAwMjQ3RDBENjM1RTQzN0UyMTQxREY2Rjc0OENCMkJFMzc2NgotOjEwMjNGMDAwQzlCRjIyRkY5Rjc3RTg5OEJDRTYwRUM5QUJFMkZCQ0REMAotOjEwMjQwMDAwOEExNzI0NUM0MzgyREQzRTREOTYyMkUzMTczQTc4QkU1QwotOjEwMjQxMDAwNUI3N0Y0NDJCQTExRjUzNUEwM0I2MUNCQzdGOTZCREJCMgotOjEwMjQyMDAwREZCMEUxRjI2MThCQ0Q1NzQ1N0NBRTM5RkZDMTBDMEFCQwotOjEwMjQzMDAwNUQwMEJCRDMyQjkzMDhBN0NDNjRCMkE3MDIzRDA0RjQ4NAotOjEwMjQ0MDAwNDUyM0U1RjBFRkMyQzUyMEU1RUI3N0I5NTg5QkRCMjFDQQotOjEwMjQ1MDAwQjFGNUY5QzM3QzlEODMxRDREQ0U2OEJGNzFFM0I5M0ZEMwotOjEwMjQ2MDAwNzQ4RTI3QkRFRDFGMDNBQkM5MUYxNzg0OEEzNzExOEZFOAotOjEwMjQ3MDAwNDkxNjAzRUFFMkY1NkZGMkQ4N0NEQjFDMTk0QzJGRjgwMQotOjEwMjQ4MDAwN0UzRDVEMDc1MDc1Q0I3MUQwN0UwMzNFODdGMzBFN0U5NwotOjEwMjQ5MDAwMjNCMzcxREFCQzA1MUQ3MzY1M0JGMjI4M0ZEQzdDODhGMQotOjEwMjRBMDAwRjJDMjg0OTA0OTIxM0QyN0VDMDU4RTRCMjg4MUY5NDVFNQotOjEwMjRCMDAwN0ZENzYyQTBGQzc1QzgwMTFFMDlFRkI3MjYwRTdGNDJDOAotOjEwMjRDMDAwQkMxOEVFMzQyOTdCMjRDMkFGMTk5QzM4N0ZBQjkxQzc2RQotOjEwMjREMDAwQ0Y1QzM0ODQzN0FDOTFFQkRBRkIxMjQyMkYwM0Y5MkIzQgotOjEwMjRFMDAwRTQ4NzU3QTVGQkZBNjZCOEMzMUE4RDdCMTJDMzVENzVFNgotOjEwMjRGMDAwNzA1RUI1MjY4Njc1NTZGMkZCQzhDOTNENENBRTg4OUMwOQotOjEwMjUwMDAwQzBERUFCQzk5OUNCRUE4MDU2RTNGMEM1QzdEQzRDMkVFMAotOjEwMjUxMDAwM0JGMTIxMTdCODlDMTBDQTU2NUVBNUU3RUQ1RUI2OEU1QQotOjEwMjUyMDAwMDRCQkUyMDk0ODIzRTVGMjE3NjI1RThDNzZGN0RDNzY5RAotOjEwMjUzMDAwQjg2MUU3NjRGN0ZFQzQ0OERGOEMzNkQxOUFDOUY5MEQ1QgotOjEwMjU0MDAwODFCMzNCMTdDQzg5RUE5M0MzMkE4RDNDREZFRTM4QjdDMQotOjEwMjU1MDAwNzNDNzA0NTYxRjA1NjRFNDgzMDVEQjI0MjdBRDkzQzdDNgotOjEwMjU2MDAwM0YzNDBERUY5ODIyOEU4MzA3NzFCMjk4RjlGRDFCRTM3QgotOjEwMjU3MDAwOTFFRjU2RUE1QkY5Mzg0RkIyREQ1MjJFMzFCQjAxQjIxMgotOjEwMjU4MDAwOUI3QUUxNjcxRTkxQzIxN0VGNDRENTdFMUQzRTU0QTg4OQotOjEwMjU5MDAwQTAyQ0I1QzdERTYxQkNBREQxODU1RTJBMjBGRjk4RThDRQotOjEwMjVBMDAwRkIwM0Y5RjdCNzNFRDY4MTBERDdGRkU1NkIwOTZBMDU0NgotOjEwMjVCMDAwRTI5MUYzRjZFRTE0QUY3NUU0N0M0RjlEREJGRTdDMUFERQotOjEwMjVDMDAwRTlGQjZENDk0MUE0MzEyRjFDNEUyN0Y5RUE0MzlGMUJCQgotOjEwMjVEMDAwQkREODJFRUVGODkzOTFFMkQzMkY5Q0JFNUVCMjgzRDI4QgotOjEwMjVFMDAwOEVDNkY5ODRERjJDNjg2RUIyNUI5OTVGRjQxMTRGODM1RAotOjEwMjVGMDAwQTlEQzdGNUMzOTMzNjU0RjYzMTRERTQzQzJCRTYwRDgwQgotOjEwMjYwMDAwMzc5MUVDMjYyNEVDQjM4QkYyMUY2Q0RCNDUxRUQ2REUzMwotOjEwMjYxMDAwN0Q1Rjk2NTIxMDc5MkUwMDg3RDIwMEU3REMwRTQ3RDJGQwotOjEwMjYyMDAwMDhFNzFCRjNBOUZBMjVDNEE3QkMwRkNERUJCQzUxN0M2RQotOjEwMjYzMDAwRkI0MkQ4RkIxN0UyN0QwMUE3RUY1M0MyQTFBNkZCMzNGMwotOjEwMjY0MDAwQTMwREQ3RTVGRjlGNjAzQUM1QTcyMEU2NjlGNjFGRjAwNgotOjEwMjY1MDAwOEJGRTM4QkJGMUVCODc4RDM0REU3RjA5OTgxRjQxQkRCRgotOjEwMjY2MDAwRUU0ODQ2M0RFREZGQjA2M0VBN0EyQjkzMUY5MjcxREQ5MQotOjEwMjY3MDAwRURFNzREQ0M2RkI2Njc3MEZCNkIzQzdCQjU5MEZDRDYzRAotOjEwMjY4MDAwRDVDRTlBODk4NEQ3Mjk4NzQxRTNGOUJDNDRCMkE3MDMwMAotOjEwMjY5MDAwQzBGQzk4NjY4RkY5NjQ4RjI4N0EzRUYxQkM4NEZBQjk0MQotOjEwMjZBMDAwNkNCRTU2NjM1RjM5QjNCRjc2MUQ5MEZEMjFDRjE5RUYyNQotOjEwMjZCMDAwOTFFNzc2Q0EzRkYyRURDODdCRjY3QzM2QjNFN0Q2M0VBQgotOjEwMjZDMDAwMEM3OEQ4MEZBMDFGOUZDQ0ZBRjM1NjUwQkZCNTZGODE3RQotOjEwMjZEMDAwOUREOUIzMEVBMTJEMjJCQjBDMUY2MkYzMDRCMUE2MjIxQgotOjEwMjZFMDAwRDU0OTUwMTk5REE3MkU3NEQ4OThCQzlBN0Y1QzIxRUNDRgotOjEwMjZGMDAwMzQ5OEEzMjQ3QjcwM0QxNjU5OEVCMTgzQTg3OEM5RkIwQQotOjEwMjcwMDAwMjI5RUFFNzU5QTlFN0U3MTAyNTk5Mzg4MEIyMjJGRUIwMgotOjEwMjcxMDAwMTI3OTMwRjg4QTk5QkZGRjQ3MTFDQjFBREUyRDVCREFBOAotOjEwMjcyMDAwODJFQjZEMzgyOTczRkYyRjc4NzI0OEU0Qzk0N0I2QTU0QwotOjEwMjczMDAwQjIzRUM1MEIwNUY1MzQxRDVCMkZGQUQzMTlERUNERjM4MAotOjEwMjc0MDAwMjlGQzk0MkU2OTNFNEM2RDU5NjU3MEJFODFFMkUyRUEyNwotOjEwMjc1MDAwQkVDMzA2NkVDRTc5QzRCRkI2NDMzRkNERDMxM0RGQ0YyMQotOjEwMjc2MDAwOUIyMDAxNDU2Q0ZCNzZGODkzRDcxMTg3MkQ1RDg4RkY4MAotOjEwMjc3MDAwMjg3MTA5OTdDM0Y4ODcxMTlERjFGMTY2QkMxOTkyRkE4NwotOjEwMjc4MDAwRUY5OUVEQzFGQUNGMzlFRUE3RkEwNEI0MUYyMjA2RTJBMQotOjEwMjc5MDAwNzFCQjczRUNEMzAxMTRBOEMzRTkyRDcyMjI3RTlGQjhEQwotOjEwMjdBMDAwN0NBQzFEM0FGNTZEMEFGOUY0RjYzMzlGRDlDOERGQjc1MgotOjEwMjdCMDAwMTlCRDc5QzRCM0I2NENBQzE3NDZFMUU3NDRBNzgxRjkxQgotOjEwMjdDMDAwRkIxMjUzNkM5RUFFQjUyQjlEQkNBRTlBMTI4MDY3ODlFRQotOjEwMjdEMDAwM0ZGNTZEQjI1RDQ1N0QwRkI0Qzk1RTIzRTY1MTE3QkQ2RgotOjEwMjdFMDAwQkUxNDNENDI3QTA5MDJBQjY2NTM3QzE3RjVFRjQzMUNEOQotOjEwMjdGMDAwNzY3ODg4RjIxNzhDMzMxQjVGMzRDNEQ0QTVCNTYyNUYzQQotOjEwMjgwMDAwMjMxQkZBOUY0QzQzOUNGQzdCMjU1NkQ3NTZDNUU1MjNEQQotOjEwMjgxMDAwQjU5NEJGMTQ1MjdEQjFEQjQ4RUJBOURFMUIzNzBGRTU0MQotOjEwMjgyMDAwMzE4NTM0RUU4N0VCREM5NTRFOTFDNzY0NDExNkU1MzE3NgotOjEwMjgzMDAwQzgyMzU2NEYwRjlGOTUzRDdCMjgwNkVBQTFDNzg0RkMwRAotOjEwMjg0MDAwRERBRkUzMzhBMURGNjRGNkE4RTUzMzg5NkVFRjIyQjI4RAotOjEwMjg1MDAwRkI0NTBFOUVCN0I0OEFCQTc1Qjg1NTUyOTlGREVDNDM0NAotOjEwMjg2MDAwM0Y4RkZEQjI0QkNBNkVFMDM4OUM0OTlENDFFQkUxQkMwNQotOjEwMjg3MDAwMkNEM0YzRjE2NUExMEM2NjdGQTU1RUFDRTc3MUREMUI3RgotOjEwMjg4MDAwQjE5RTU3NjlERDVBOUVBNzFBRDhGQTMxRkNCMjNDNkY0NwotOjEwMjg5MDAwMTZBODREMzYxQ0I3Njk5RkM0RjY3RDZBRjYxOTYyRjIxOAotOjEwMjhBMDAwM0NCRkMwQTc3NkQ3QTlBMzU0NEVENjA1RTNFRTBCN0M1OAotOjEwMjhCMDAwRkM3MUY4QkM0MTNGNjY4REM0RTk1NzRFQjExRjkwMEVDNAotOjEwMjhDMDAwRTlEMUY5MUVGNDM4NDdBRDBCMzQ3Q0I0M0NGQjdGMERFNQotOjEwMjhEMDAwM0NCRkY4NDBDQ0FGOEREQkU1RTQ3RUI0REUwQjZDRkY5MwotOjEwMjhFMDAwQTg1Njk1NTU5NUU3ODNENkY1Qzg5NzA3MDQ1RjFFMTAzRgotOjEwMjhGMDAwN0NGMTAzMUY1N0I3NEY1MkMzMTRBRjdFQ0RGNTZFQzZBMAotOjEwMjkwMDAwM0ZDMkU1QTFFMEZBNDU2OUNBNDg1RTU1MEIzQ0FBNUFBOAotOjEwMjkxMDAwMEMyQ0ZGMDVEODZDMjRGQkFDN0EyNTZFOUNDMEE1M0EyNAotOjEwMjkyMDAwMEU5NzdBOUYxNDI3MUZDRkM3RkY1NkY5NkEwQzdDQkZGQQotOjEwMjkzMDAwQTYwNkY5MTU1MEZFN0VGMkM2RUJFRjBEOERFNzUzNjE0QQotOjEwMjk0MDAwNkE4Q0ZFOTZCODZFNDk3RkYxNzlGMjgxQTM1MzJERjQxQgotOjEwMjk1MDAwRkM5NTlFNENCNjBGQTFGMTI2N0U5RTQ1MjJDRjVFQkMxMwotOjEwMjk2MDAwOEJFN0EzMDMxREYzMkQwNTU0NEY5REQwN0IyNDlDQTcxQgotOjEwMjk3MDAwRjhFNEZGRDkwQTEwOEZBMjRFMTkyQTcwOEFBMTUwRjFFQgotOjEwMjk4MDAwQjMwMTVDRTdDMTlFNDkyQjE0OEMwRjQ1MjdGNTJDQkU4MwotOjEwMjk5MDAwMTQ5RjJDNTJBOUFFMjkzQTU5NjRDOTRBNjJDNkUzQTJDRgotOjEwMjlBMDAwN0EwMUU3NjFGMTc5RThDNEE0RDNGOUU0Njc3QjE2OTQ2RQotOjEwMjlCMDAwMTBFQzhEMjc4QTJDOTQ0NzFDMDRCRUFGMjE5RDJDNzFFRQotOjEwMjlDMDAwRjU0N0M1OUJGNzlDMzI1QkQ3OTNBOUZGRkQxQ0U1Rjk0MgotOjEwMjlEMDAwOEIwRjE4M0M5NDhGMkMzNjBDQkYzRkRCNERFRkQ3N0IxMQotOjEwMjlFMDAwMUFCMTVGN0I3MkMzRjYwNEQyRkI2QjkyODdEMkYxQTM1QwotOjEwMjlGMDAwN0QwREVFOUY5MzdFNDMwNkJCODlDOUZCQ0I0Mzc0M0Y5RAotOjEwMkEwMDAwRDAyMjc5MjZFMzc4N0ZFN0MyQkM1NkVDMTdFRDJFRjY4QwotOjEwMkExMDAwMTBDQ0RBRkI4QTFDQ0EwQjE1OTQyRjhFQjNCMDNBN0UwOQotOjEwMkEyMDAwRjE2RDA2MTY3NzJGOEZCN0ZDOEVGMkE1NkFFRkVFNDU5MwotOjEwMkEzMDAwRTQ4RjJGQkY3M0QwNDhGRTYwQTg1NTgyNTQ1Q0M4RDE4NAotOjEwMkE0MDAwRDRDM0JGMEZFMDNBMkZCRjc5Q0E0ODQ5RjlGQ0I2NTM0NwotOjEwMkE1MDAwQzZGRTFGQzgyNzA2NTQxOUMyQUM3RTZGMzY1MjFENTRERAotOjEwMkE2MDAwQjc1QkVCRjcxQjQ5NEY5NTIyQkZBQURGRkIyN0Q2QUYxOQotOjEwMkE3MDAwQTYzQTAxREY1N0ZEOEFBQzJBRjhGMzcwRTc1QjQ2QzIzRAotOjEwMkE4MDAwQkJCRTQ1ODJCMTE5NTFGN0Y3NEFFQ0JFQzZGQjBEQzA3QgotOjEwMkE5MDAwNzlCMDQxRjhBNzFBQjEwRjU5NDNGQjkwNzgxRDc2NzJBRgotOjEwMkFBMDAwN0ZBM0YxRkVDMTdEQ0I4RTUyRjg3RUE4MzlENjBGM0RCMwotOjEwMkFCMDAwMkM3OEJFODlFQTUyNTY3RkZCOENBNEQ3NERCQkUyQzY2OAotOjEwMkFDMDAwMDk5RTNGRkMyMzNDNEY3NjA5M0Y5NTBCQjlDNEYzQUJGRAotOjEwMkFEMDAwNzM3OTNDQjk3QTJBRDE5MjhGRUJCQURBMkI3QjAwN0VEQwotOjEwMkFFMDAwOTBFRjJDRkU5RTEwRjlDMjk1QjA4RUM1MzM2RERDNjA2MAotOjEwMkFGMDAwQzc1RjU4QkNGMTlGQjg2MkE0RkM3NjUxRTgyQkE2OEY0MwotOjEwMkIwMDAwOEE1MEY3MDJDMkZCNkVGMEQ1MTI3RTc3ODcyQzc2QjIyMAotOjEwMkIxMDAwRkY4QTdFRUUwRkNBNDMyNjk1RjZDMUVGODZFMDBFRDJGRAotOjEwMkIyMDAwRjM1MEQ3QkZFRDcwMTI2RkZFOTVGMzA2ODRCRkRCMjQyMAotOjEwMkIzMDAwNzBERDI0NzBERDg0MEVERjg1MkVCNjNBQkZGQjI1MkNCOAotOjEwMkI0MDAwMDdBMDFDQjgxRjJBMEYwQTNGRjQ0QTJDQ0UxODc5RUVCMgotOjEwMkI1MDAwMjc3REQ1ODc0Q0YwMENERUJGNEJGOEEzQkI1QUI4M0Y5RQotOjEwMkI2MDAwOEE4RjkzRjU2MjFGNjA2ODVDREU1MkI2REY4QUY1MkVBRAotOjEwMkI3MDAwRTU3MUI1MkRCMUY4RDc4QjdEODFGQUI4Mzg5Q0U5RTJDMwotOjEwMkI4MDAwNzlDMjhGRDVGRkYxN0E1QTEwQTdBNzhBNjFDRTlGNzJCQQotOjEwMkI5MDAwOEE3QkI4RkU5RUYwRjY3Q0RBQjdEM0YwOEFENzUzOEZFMwotOjEwMkJBMDAwOTI5NTNDNUEzREFCQjVFRjhCQkM1RkVCMkYwNTdFRkU5QgotOjEwMkJCMDAwMTRCNDM3NUJBM0VCRjhENzVEM0NGRTU0Q0Y5MjAzQTQ2QgotOjEwMkJDMDAwRTcxQkY1Q0VBNEMzODU4QTJFNTJFRjYwOURCM0Q2MzVBMAotOjEwMkJEMDAwOURENzNERDM3MEVBNjMxMzY0NzBCQjIzRjVDRTUzQTkzMAotOjEwMkJFMDAwMkY1NDE0NTFCRUQyQzJGREM4NjAyOUNFOTc0Q0Y5M0M3NwotOjEwMkJGMDAwMzBGRkU1NkYzMUE5NTRBN0Y4OTEzRkFDQ0UyMURFNjBEQwotOjEwMkMwMDAwNUIxOTkyMTYxMjZGQjA3RUE4NzIyMThFQ0I2OEVCMThGQQotOjEwMkMxMDAwNzE1OEQ2QzFGMzlFNjUwQkJFNjI3Q0VCOURDNEQ3N0IxOQotOjEwMkMyMDAwNDVBRjhDMURBRDlFRDBFQTg4RkE2Rjc4OUVBQTVEQUY0NQotOjEwMkMzMDAwNDdCQkE3RjFGNTIxODlENUM1NkQ4N0ZFOUE5RTgxRkUxOAotOjEwMkM0MDAwNzNBOEYzNUFGQTdBNkM1Rjc2RjEzQzRFQ0I1Mzg3MzExNgotOjEwMkM1MDAwNEZDRDE0NzkwQUU1Q0YxQkI5Q0E2MDEzQTZDMzVCOTFBNwotOjEwMkM2MDAwODcxQjQ1OUMwMzY5MDdCMzkzN0E0QTc2ODk2RkVEMTJGNwotOjEwMkM3MDAwREZDNzc5MUIyRkNDNDRGRkZCNDEyMkNCNjMwNjNGRTQyNwotOjEwMkM4MDAwRTc0M0Y0RkNFMzk4NDcwRDZFMDgxRTcxRTJGOEFCQUQyNAotOjEwMkM5MDAwMTI4QjdGMUIzMUM3RkQ0OUQxNDg3QkFGMTNCQzZDODRCRAotOjEwMkNBMDAwRURBMjJFREJDMURBRjI5QzAzOUYzRDQ2RkVBOEM1QUMyNwotOjEwMkNCMDAwOTA3RjFERUM2ODMyQjJGRDY1MzVFQUY5Q0M5MUY5NTA5MAotOjEwMkNDMDAwOURFMDZGREQ4RkVDNkJCRDFFQzc0QjVDMDdDQjZGODc0NAotOjEwMkNEMDAwN0E2NUJCNDk2MkY4RkQ3NjdDMzQ0RTIyRkY2OTNCOTRFRAotOjEwMkNFMDAwQzBGNDNDNzRDQUFBNTI5RUZGQTVFMERGNjVCMUVGREVENgotOjEwMkNGMDAwNTgyQTMzNUM3NEIzNzg5QkQ3RjU1NjI2RTk5NUY0RTBFRgotOjEwMkQwMDAwQTM3RDk0QUVCN0E2N0FEOTNFOUZDQUY4NThCMzRGQTYxMgotOjEwMkQxMDAwQzNCRTg4RkM0MTBCREIwQkQ1RkExQUJFN0U4MTJGQ0FERAotOjEwMkQyMDAwMzVDNUU4OEVDOEQ1QUVFRkI3Nzk0NkIxMUI0OTNBQzQ3MAotOjEwMkQzMDAwRjRBNjkzNjJFQjVDRkZEQjcyQTUxQTY1NEZCODlFNzUzMwotOjEwMkQ0MDAwRTRERjQyODIxRkEwMUY0RTIxQkYxQzc2Mjk0Q0JFQzY2NQotOjEwMkQ1MDAwMTBEN0IzQUU5M0I3RjhGRTU1N0NERkM2QzBERTNGRTJCNgotOjEwMkQ2MDAwRkVCQzQwMkREREJGOUE2MTAxQzY5MzZGMDIxNUQ0REYxMgotOjEwMkQ3MDAwOTIyOTMzM0ZCNUU1ODNFQTZDODg3QTNGNDhCQzFFRjc1OQotOjEwMkQ4MDAwMUI4NjUzNTgzRDdDNEFDN0U0RjM5RkJBOTIzMkM5NEEyNgotOjEwMkQ5MDAwN0U3MEY3MDI3QjNFRjkzN0VFMUY4RTY2NUFBQTg4REZGNwotOjEwMkRBMDAwMDE3QUVGRDhDODNDRTUyRTdFOUUwMEI0REU1NENBNjY5OAotOjEwMkRCMDAwNUVFNEYzOEFGNTZFODdFNTBDODdFRDgyNjdERDIyMUZGRQotOjEwMkRDMDAwQzVCQUU5M0NEOTYzN0NERDc0QjM3QzM3QUE3RTYzNzhFRAotOjEwMkREMDAwNUQ5REFCOUNGRTM5RjJBMEE4NTcxRkEwN0FGREUwMzk5QgotOjEwMkRFMDAwRUUyNzFBM0IzNzdENEE3NUIwRkY4MjA5Qzg0RjZDRTk2MAotOjEwMkRGMDAwREE5NDRENzExODdDQkVEQjI5QkZCQkRBRjVGMEVENkNCRgotOjEwMkUwMDAwRkY1MkRBQ0VFNDBBOTA3Q0E5OTQzNzlENERBMTdDQThBQwotOjEwMkUxMDAwQUVGMzZDMEE4QkVCRUREMzVGQTAzQzA5RjNBMkJCRThFOQotOjEwMkUyMDAwM0FFNjJCOEM3RjQ1Mjc0QjE4RkYwRTlFMjg3MTY1OTE0MwotOjEwMkUzMDAwRTBFMEIxRDBCQzc1QkRGQTRBQzJBN0FFQjdFNEJEMEFBNgotOjEwMkU0MDAwQ0E1RjRFQ0U2Mzc5OTI5NjE3MTU1MzNENEU3OTUyRUY3NQotOjEwMkU1MDAwQTQ5ODNDNjlEOEM1RjNBNEExRUUwNEI2RkYyMTQxMjY4RAotOjEwMkU2MDAwRTcwRjRDOEFFMTRGNkREQkJCMkM5RkE4RUQ5MEJERDFFNQotOjEwMkU3MDAwM0NEMjlFRDNCQkY1N0M3RkQ0MkRGODEzOTRCQzhDMUYyMQotOjEwMkU4MDAwMDc3ODVCREI3MTkwQURBRkM2MTA2NEZBNkU2QzMxRjAwMQotOjEwMkU5MDAwRkJBREJDMDU2OEU2RkIyQ0UwMEMxMDFFRUZEMTI1RDQ4MQotOjEwMkVBMDAwNDNCOTUxOUQ0MEZCRUJDNzMzNzg3RDExQUY4RjY3REQ5MAotOjEwMkVCMDAwRkMxQ0VCRjg3OURGNDRFMkNCRjFCOUJFNkNGQjI4NzE2NgotOjEwMkVDMDAwMjMwMEYzNzhERDJEMDlCQ0RCMEMyQ0FGOEMxRkY3QjQ4RAotOjEwMkVEMDAwOUJFRjRGRDg1QzEwNzNERUE4QjVCRjc0NzNGRTk0MUJENAotOjEwMkVFMDAwRjkzRTU1RkNGREI5NkU2MTRGMjg5QTBFNzk3MUJBQzI1MAotOjEwMkVGMDAwNjA3RjQ2RDQxM0UzRDBERkRFMjNGQ0VEOEFCQjBEMkNDQwotOjEwMkYwMDAwRUYzODJEQ0U5OUVFRDFGQzZFMjk4RkRGREE3RUZGQjIzRAotOjEwMkYxMDAwNTdFMDA5MkNGRkUxNkJDODY3RTc2MENCQkNCMTdFNkY1RgotOjEwMkYyMDAwQTVDOEFGNTYyQzg5QkIyRUYyQTk5NTNGOTI0RkNENzIwMgotOjEwMkYzMDAwOEJCQTYxMEE0Q0UxNzU4M0Q1NDJGQkEyNUZGNzE4RUNBRQotOjEwMkY0MDAwMzI5MzVCOUQ1NDU5MzA3MjlEOUFCRjM5MkFDRTg3N0E0RAotOjEwMkY1MDAwRDAwRjUyREI5OEZCMTFEQkE3M0FERTdERkVGNzBFRTZDMQotOjEwMkY2MDAwNDcxMzIwOTNFRjNCQjJGREZBQkE5QkVDRDczN0RFQjBBNAotOjEwMkY3MDAwRDM5RkM1RjA0RUQzRDMwMEU1RjlGOTIzRjVCNDUyRTA2MQotOjEwMkY4MDAwNUQ2N0JFNkM2NEU3OTZCMDc5QTc0RThFOUM1MzlBMEMzMQotOjEwMkY5MDAwM0U2RjFBQUVDM0QwMzEzNzRDRTc5NzhEQjkyNjk2MkZDNgotOjEwMkZBMDAwMEQyQzk0NTRGMkY3Mjg2N0JBMjlDQURGMEY4Q0UzRjk4NQotOjEwMkZCMDAwRDc5NjU1MTJEQjE3RUVDRUZEODhDNUYxQkE3MDlGOTFGQQotOjEwMkZDMDAwNzgzNUE1NkRGRDEzQ0M3RTAzNzA4NkVBMjU0RDlGNEJBOQotOjEwMkZEMDAwQ0QzQzdFREVEMEEzQjY1RUJBQTlEMEZBOUMwMUVFOTdCNgotOjEwMkZFMDAwRERBQ0E1RjExNDJGRUYxMUYxNzE2OTY5QUNGRUIyQTE0RQotOjEwMkZGMDAwNkYxMUVEOEZEQ0VCOTU1OEJFNzQzM0JEMkY1RjNERUQ0NwotOjEwMzAwMDAwNURBMkRCQURFQUJGRDlFRERCRUFBNkZEQTJCRTJCQUIyQwotOjEwMzAxMDAwNjg3RkY3NzhFRUU3RTkxNDVGRUI2RkMyRTcyNkMxNzdDOAotOjEwMzAyMDAwQkY4NTlGOEJGOTJERkMzQ0NDOTNBRDM0RjUyMzNFMjYxOAotOjEwMzAzMDAwODc2RkJCOUJGQzg3RUU3QkRCNTRBMDc5RkE3RkRCMjA5QwotOjEwMzA0MDAwOTE3RTgwRTlFNTY2NzZGNEI0OThGNzY5Qjc5REZCNkZFOQotOjEwMzA1MDAwMzczRjFGQjI1MjlGRUNEOUEwNEUyMDNGMDFGOUI3NzZGRgotOjEwMzA2MDAwQ0VEN0Y4RjZCMTQyRDJEMzYwNzc2RkExMzE0QTlGOTc5RAotOjEwMzA3MDAwMUJEMDFGNTA3Q0U5M0M5Q0EyNThBM0Y5QTYxMzdDRDMxQgotOjEwMzA4MDAwQjM1NjkyOTY4QkI4MTlDQkJGQ0JDNDNGRDJGRjgxQzM0NgotOjEwMzA5MDAwRjc1MDVEMzhEMEI2QzIyRDI5NTE3MUI1RkRCNDZENzJBRgotOjEwMzBBMDAwRDRCQzAzMjE5OThEQzc3QTZDQ0FDQUE0NjgzOTlGNjBDMQotOjEwMzBCMDAwNzIwRTA0Rjk3QzAwRkQ1MzU2MTQ0NERGNkYxMjNDRUU4RgotOjEwMzBDMDAwNjczQzdFMkE2NzMzM0I3N0Q3NzhBQzA3Q0VFM0ZBOEUyRQotOjEwMzBEMDAwNjVDMEUyOTQ1ODc3RDA4ODNGQThDRUU4MzJBOTc0NEVGNAotOjEwMzBFMDAwNDFGQkVEOEUyODNCMzkyRUVDNjMyNjE2MDdDNENGNTlFMQotOjEwMzBGMDAwMTA5MDY5REU5OTM4RTM1QUVBRUIyMUFDNzdEMjc5NjAxNwotOjEwMzEwMDAwNThFNkU3REQxMzgwNzgzRDQzRjA3QUE2M0VEQzJEMTVDNgotOjEwMzExMDAwQjI3MUVDNUNBQTBDRkFEOEI4OUZDMDMwNkJCRDYwRDcxNgotOjEwMzEyMDAwNTMzQjBGM0NBQzJEMzU4N0VGMjI3NzkyMUYwQ0IyRUY0QgotOjEwMzEzMDAwOTJDMjI5N0FDNzQ1MzMzQjJBODVEMUY0MTc1OUJGMUU1RAotOjEwMzE0MDAwMkU2QTNDQzVDMTk4RjRCMDdERkNGODcxNUYwQjdGRUYyRgotOjEwMzE1MDAwQTExQzhFRjQzQzAwNkMxRkVFMEVFODk3RTkyNUIzRjUzOAotOjEwMzE2MDAwQjA4NEJFMjdCQjQzMEZFNjQ0OTRGN0MwMTExREIzRTdGQwotOjEwMzE3MDAwQUU3RTQ1MjU3RkU2NzE4OUU3QkVDMEU3QjAzRkQzQ0I4MQotOjEwMzE4MDAwRUQ5NjQyMTA3REI3QTJBRDM3MUU4NzMyOUM4RkY2MDVCMwotOjEwMzE5MDAwNjdFQUIxRjI2NTM4ODZEOUZCRUUyNEMxNzFERDczNDE2RgotOjEwMzFBMDAwRDE1M0ZGOTIzQjQzN0NFRkM2RUJCNEY5QTI0RUQzOTlDNwotOjEwMzFCMDAwMDMwQzhGNDE4QThGNjNGODc5OEUwREU3Mjk2Qjk2RTBCNwotOjEwMzFDMDAwMUM5RENGNjRGMUY1NkFGMzk3NjEyODREQTY3QzVBQUMzQgotOjEwMzFEMDAwOTdCNkMyQ0YzOUY5Mzk4RjhEOURDRjJEQjAxMzVFNTI3RQotOjEwMzFFMDAwMzg0NTc3REQ3MkVCQjgwRUE1MDA5M0RCRjZDMEYwRTA1MgotOjEwMzFGMDAwNjMyNTkxRjMyRTRGRThEODM5RkEyRTQ3RjI3QUQ5NzcyMgotOjEwMzIwMDAwM0QxRUIzMzU0Q0Y5MzlCMkUzNzI3NERFQUQxQkIzMDEyOAotOjEwMzIxMDAwQzZFMEZBMjRDNUNFRjAwMjFGMjg5NDdGOEM4RDdDRUY4NwotOjEwMzIyMDAwMDJENzVEOTFFRjY5MDhDNjRCMjk5MUYzN0RFREZCOUFCQQotOjEwMzIzMDAwN0RFQTcyNDU4NzdBNTlFRDM2N0I0ODJGNDVFNkY0NjI4MAotOjEwMzI0MDAwQUEwN0Y3REE3RDMwODY3RDY3RDMzMjk5NERBNjU3QTc1NgotOjEwMzI1MDAwNTcyNjQ1Rjg2RTAxNkYyOUUxQUQ5REVCNEI0MjdGMzc1NAotOjEwMzI2MDAwM0JCNzI3NUIyNTlFNUJEMEVERDM3NzQxQ0ZBMkJEOThCRQotOjEwMzI3MDAwOURBMzdEN0ZDNENGRjNEMTBBMTVGQUVFMDgxRTlGQUY0MAotOjEwMzI4MDAwRDA3NzAxNEYzQUNDOUU2N0M4Q0ZEMUZBMkM5MUY1MzU1MwotOjEwMzI5MDAwOTlGOUY3MDQ0RDY2RkU1RDAwRUM5OENFRjZDRjFFMTE0RAotOjEwMzJBMDAwRTcxMTRENTY1RDBFRDU1QjREOTBFOEExOTI1RTkzRjcwOAotOjEwMzJCMDAwOTEyNENFQzc0N0ZFQ0JDMkNFNDdFM0U1RkUzRUQxOTc3MQotOjEwMzJDMDAwNEZGODZBRjIzRjJBN0JDRTYxRUUxMzgzRTcxQzBENEY2NQotOjEwMzJEMDAwNUQwNENGRDU2QTY2NTNCRkMyRjAyQkExRTdBNzk5RDQ4RQotOjEwMzJFMDAwREI2ODVGNjQ4RDg5N0ZCRkE0RTE4NjBBNjVBNEI2MEJBNQotOjEwMzJGMDAwN0Q2OEY4RDk0OURGQjQwRTJGRUE1QkUzNEI2NjA0QkY2MwotOjEwMzMwMDAwNjcxMzM5NkUwNkZBNzIyMjhCM0RBQkIwRjNGQzM4NUM2MgotOjEwMzMxMDAwMzRERUZEM0ZENDUzNjhCMTEwMkEwMDAwMDAwMDAwMDBFNQotOjEwMzMyMDAwMDAwMDAwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDBFQgotOjEwMzMzMDAwMDAwQjdCQ0ZDRkMwRjBBMzFFODFGREQxRjhFODM4OTEwMAotOjEwMzM0MDAwMEY1MzRDOTQxMTgyNTdCM0UwRDc4QjBENUIzMTIyRDhDOQotOjEwMzM1MDAwOUVEQzBDMENCMjlDMEMwQzcyNDBEQzAxQzQ5RDQwRkM0OQotOjEwMzM2MDAwMTI4OEI1QjgxODE4QjQ4MTM4MDFDODRFMDQ2MjRCMjBEMQotOjEwMzM3MDAwNzZFMDg2RThBOTY1Njc2MDY4MDVFMjVFMjA5RUNBNEUzMQotOjEwMzM4MDAwQkFGREJGMjUxODE4MUE2NDExRkMwQjQwMzZBRjAyRTlDQwotOjEwMzM5MDAwRTY4Q0UyQTE4OTdGMUJBMkYyNDVCNDUxRjlGNkJBQzBDRQotOjEwMzNBMDAwRjQ2MTg0RTA4QjZBOTM2NkZFMzZBMERFRUQ0NkI4RTVGNAotOjEwMzNCMDAwNzlDQzUxRjlDQzk2QThGQzZFMzM1NEJFQUEzQjg0MDY1NgotOjEwMzNDMDAwMDA5QjIxODVCOUI4MDMwMDAwMDAwMDAwMDAwMDAwMDA0OAotOjEwMzNEMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJDNTdEMEI3QzU0RDUzRQotOjEwMzNFMDAwOTlGOEI5NzdFRURDNzk0RjI2MEZDMjAwMjFCOTc5NDAwMAotOjEwMzNGMDAwMDIyNjcxODhFMUE1QTAxMzA0MEI4ODZDQzAxN0I0QUUzNwotOjEwMzQwMDAwMEVFMTExREU0NEI0OUFBRUI4Qjk5MDEwNDIwODYxQjQyRQotOjEwMzQxMDAwQThDMThEMzg0MTQwNTQ2ODgzMEQ0QTU3QUIwMzUyNEJDNQotOjEwMzQyMDAwNkRCNzFCMTUwNTc3MkQwRDY4ODM1OEEwMjk4QTRDRkZCMQotOjEwMzQzMDAwNkJFQkZGN0NERjM5Mzc3M0VGNjQyNkUwQkFGRkZEQTc0MwotOjEwMzQ0MDAwQkY3QTM4Rjc5QzdCRUUzOURGRjc5REVGN0RDRUM4MjQzRAotOjEwMzQ1MDAwODdBNERENDRDODM3RjA0NzRCQkY4OTEwMzIyMDVBOTIwOQotOjEwMzQ2MDAwNzI1NTIwNjMwOEY5QTE5NUUwOUZENjJGQjZBQ0FCMjEyOQotOjEwMzQ3MDAwMjQ2QzIxMjRCMjkwOTA0RTI3RUQyODU1NTk0OTIxMkRENgotOjEwMzQ4MDAwRUY5ODJFOTI3NDQyOTJFMDdEODU5MDdBQTFFQTY4NkU2MAotOjEwMzQ5MDAwMjkyMUVBNTA5MUVDQTI4RjM2NjRDQzRFMEEzODEzOEY2MgotOjEwMzRBMDAwQkI5NzhGRkI5MzFBMkI5NkVEMzUxRTJDNUZBRUYxNjIwNgotOjEwMzRCMDAwRDk1MUEzOTA3MDNFMjFBRkQ0MTQ2MDc5QjBDNjg3Q0ZBNAotOjEwMzRDMDAwRkZCNTY2MUM5NkFGRDdGOEIxN0NBMzY2MkE5NkUxOUE0MQotOjEwMzREMDAwNzIyQzBGRDdDQ0MxRjI0ODREMDBERjdCQkI2NjMxOTYxMgotOjEwMzRFMDAwNDc2QkFBRjBGOTNCMzVENTU4RkVCNjQ2QzVFN0JGQUJFQQotOjEwMzRGMDAwNjlDMEIyQjMyNjg4RTU3QjM1MkQ1ODFFQUIwOTYxQkY4NAotOjEwMzUwMDAwMEY2QkY2NjA3OUEyQTYxRDlGRkY0N0NENDEyQzNGQUUwMQotOjEwMzUxMDAwMDk2Mzc5Mzc0OTQ2NzhERTc5RTcyNUVCM0NCQURFRkM2QQotOjEwMzUyMDAwNjcxRTdDNkY1QTFBMjE1QjQ2OEIzRTAwNTdGRTMzOUYwNQotOjEwMzUzMDAwN0EwMzg1RDE3NTZGRjk5QjY5NEU3QjFDQjhEQzQ1MDQxNQotOjEwMzU0MDAwMUM2NzhCOEI2MEZCOTY0MzFGMTFBNTg4OTBFNkQxNURBRAotOjEwMzU1MDAwNUU5NUQ2QTdGMUVGOENEODc1Q0MzQUFGMzBEQTJGNzZERQotOjEwMzU2MDAwOUMzRjEyMTMxQkM3NENEQjY5QkZFMURCNTg3RkFEN0Q2RAotOjEwMzU3MDAwMUE3QzY3NzRCNDdENzdDQjdCRDZGOTRFN0QzQjdCRkY5RAotOjEwMzU4MDAwRjlENkY3QUM4MEJGQ0QxMTg5ODQxMUVGMkEyMUI0QjRFQwotOjEwMzU5MDAwMkIzRDJEMDMyODlFNkQyNzJDQzQ5MjRERjFBRkI0OTM4MwotOjEwMzVBMDAwMkUzQTRFRjNGODI3QzM2MjI5QUM5Qjc2NTM2MDlERUYwOQotOjEwMzVCMDAwMTM4MUMyNDE3NTExQTQwNzA1QzYxODFCRkRDRTU4MjIwMAotOjEwMzVDMDAwRTIzQ0YyOUYzOUM2QkU3M0M3MjUyQ0RGRjhBQjRDMDgyRQotOjEwMzVEMDAwN0RBRkY5NEUyMUU0QTBFMzM3NEZCQ0U4RjUwM0JEQTk2OAotOjEwMzVFMDAwMkY5ODgwREU5MDVDMTVGODRGOTdCNzlDOEVCRDY1RTJGMgotOjEwMzVGMDAwODc1RTk1QzI2OUYzREZERTlGMzMxRkU4NkYxNEYxQzE2OAotOjEwMzYwMDAwRjczNjFGRkEzOTUxQTBCREE4MDdFMTU3Q0JEN0JENzlDRQotOjEwMzYxMDAwRUVCQzJDNEY2MTYyQkFBNDk0NDRDNDcxNzRCOTRFRTJGQQotOjEwMzYyMDAwMEZDNTgxRUYzRjAyMTAyODdDNEM5RTEwQUVDOTRFRkJBNwotOjEwMzYzMDAwQzVDM0MzM0YxMjE5RkI2RDc2OTU3RjAwNzA1MUVGMzRGRgotOjEwMzY0MDAwRkI3NkQxNzlERkVDMEI5MzZFNjc3NERFNTBGRjg0RDY4NgotOjEwMzY1MDAwOUQ1Rjg2ODlDOTA1RjMzRUVCMzVEMUY1M0JDNkM5RDdEOQotOjEwMzY2MDAwRDlFODZDOUMzRDNEMjdFMDdERTc4NDQ1N0U1ODdCRjM5RgotOjEwMzY3MDAwQTgyRUVGMjJEQURGNUFEMDg5RUIyNTNFRTIxQjQ2Qzc5RgotOjEwMzY4MDAwQjUxN0E4NjQ3RTIxQzBDMTg0Nzg4RDlEQ0Y3QzgwRjc1QQotOjEwMzY5MDAwMDBDMEQzNTc1RUMwODk0Njg3MUZEQ0YxQkVCNTQyRDc1NAotOjEwMzZBMDAwRkY3OThEM0UwNDQ2NUZBNDI5NkM5REU1OEFCNjNGQTM1MQotOjEwMzZCMDAwQjVEQjE4RkQxMEFCQjE3RDVCMEMxRDkzOEMwNEVENjY4MgotOjEwMzZDMDAwMEE2OEM0OTcxOERBMjUyMERDQURCMzhCRkFDRUJCMjk4MwotOjEwMzZEMDAwRkM2QkRDMDc0RTVGRDgxQTg4QjMyRUJBNEZBQ0MwNzdBQwotOjEwMzZFMDAwOTI0QTQ1MUZDMEFCNzkyMkREMkY4NUQxNzU1RTY5REYxNwotOjEwMzZGMDAwMzU3MEI4NkMyRTlERUQ4MkYxQUZDNEI3OEFEQTQ1MTJGMQotOjEwMzcwMDAwMkVFMDNDOTNGRUZGREE4Mzc2M0FGMzY4N0Q1NDM4QzVBOQotOjEwMzcxMDAwNTBCRkVFRTg2MDQzRkZEMTlEMzk4NkY2QjEyNzQ2MUFDNwotOjEwMzcyMDAwREFDNzc3OTUxOEVBMzc3Qzc2QkRBMUZGQzQ5RTQ5ODYzMwotOjEwMzczMDAwRkE0RDkxRTk4NkZFNjVFNDc2NDNGRDY2RUIwRjBDRkREQwotOjEwMzc0MDAwQTc3OEU2MUJEQUJGRTc1RDY2Njg5RkE2M0M2MEE4REY0NgotOjEwMzc1MDAwNUFGMDg4QTFGRjZEQkU1QTQzRkIzRjhDREI2NDY4OUYyMwotOjEwMzc2MDAwRTVGRkIxQTE3RUZCRDQ3RjMxRjRCRkIzRkMzOTQzRkI0RAotOjEwMzc3MDAwREQ3MzVFMzJCNENGMERGQ0NDNTBBRkI0MDc0RTAyN0U4OQotOjEwMzc4MDAwN0VCMEY4MzVDMzdCRkY1OEY1OTZBMUZFMDEyMTUzRTNDNwotOjEwMzc5MDAwRTE5NzA4OENDRjUwMEFGMjc0NUZDM0ZCNTMxNkU3MDEyMAotOjEwMzdBMDAwOUEwMzNBMUVDMEU4QjRBMDJEMDE5RkU0RUQyRkVDN0NGMwotOjEwMzdCMDAwQ0ZCQUQwQzAyN0NEOEM4RTA3QjFGNjNEQTFGN0UyQkZCRQotOjEwMzdDMDAwM0Y5NEVGMTNEMjY5OURFREQyQjdCMzc5NURGMzU3Q0EzOQotOjEwMzdEMDAwNUZBMTVENTJCRjE1N0Y3NTc5N0NEODVGRTNBQjk0QkU2NgotOjEwMzdFMDAwMDlCOTlFQzI1NzFEQTJBQUY4M0QzQTFFRTU5NzI2QjYxMgotOjEwMzdGMDAwNjQ1MjREMTg5RjIyRTQwMTdDQUVDOTdEOTI0MUMyMjZERAotOjEwMzgwMDAwM0E2RUFEMkJBM0FEMTE2MDQyQzc5NkQyQTA1RUI4MDM0RAotOjEwMzgxMDAwRUFBMkUyMjc1RDcxRTA2QUYyQzgwNjNDQzVDMjk3MzhBOQotOjEwMzgyMDAwNTMyODMxRjdDNzY3NTU4NDlGM0E4NTE0NDhGMDdEQzEwNgotOjEwMzgzMDAwRUU1QjRCRDcyQjkxQzA2MDgxM0VCRjJDMDZCQzMwRjlBQwotOjEwMzg0MDAwODc0REVBQUYwMkQ5RDFGRTZCMjdEMjdGNDJGRjUzNDJBOAotOjEwMzg1MDAwNjgxREY2NTcxMDhFQjU0NUM0MEY3MjQzMUQyNDg3NzYzOAotOjEwMzg2MDAwNjUyMzNDMkRDMDRGQjRGN0U4MDNBNThCQ0Q1N0ZEMjY0QgotOjEwMzg3MDAwRDc1MDY3RjNCRDYyRkRFQjdDNjM1RDFCRjc5RjhDRjA1NwotOjEwMzg4MDAwQTQ3MDg2RkE3REJDRDI2N0REM0UzOTRBQjcyNkU4QzcwOAotOjEwMzg5MDAwRUE4QTI4OTA2RjkwMEYxQURCQjVFRjVDQjZCOThCNDlCNgotOjEwMzhBMDAwMTJDNUEzOTU5NTBGREJERDNCQTBCQzZDQ0IwQzExMzc4QgotOjEwMzhCMDAwMjFDNTYyNjA5MjQwRTFBMDRFNjJGMDUxNEYzQTQyQjU5QwotOjEwMzhDMDAwMzg1RUQ1RDhGMjIyODA2RjdDN0Q4MTkwNzU2QzdGN0NDQwotOjEwMzhEMDAwM0M0REQ0QUYyMzExREUzNjgyREU5NjFGQUREQjMyMjg5RAotOjEwMzhFMDAwNURDNUUxQ0I3NzA5NENGRTUxMUE5NTYwNUMwQjYxQjQ2NAotOjEwMzhGMDAwRTUzMDA1RUU4Mjc5Q0FBNERDMkYyMjVFN0QwNEU2NzdFRQotOjEwMzkwMDAwNjhEODkzNzMyQTI4RkU5QTI2QzgzRUVDMUJBNDBBMjc3RgotOjEwMzkxMDAwRDU0RkE1NUVCODRFQzVCQTk1RDdFNzA5MEE4RUJGMzExNwotOjEwMzkyMDAwRjlCMDM1ODdBRTc3QjM0RkU0N0E0MTEwQzc2QkM4RkU2NAotOjEwMzkzMDAwQ0EwQjdDREMyNjA1ODkwN0NBQkNGODcyN0FBNTIwNzJGRQotOjEwMzk0MDAwM0MzRTRBQUU0NjFGOEVDNUNGNDhGQTNBRTMyRjA0RTEwQgotOjEwMzk1MDAwQTdDRDZGQ0JEMEIwMzUwN0U4NzEzQ0QzODc5QkM3RjVCNwotOjEwMzk2MDAwMkY1N0Q2NzNCOEQ2NzI3RDc4QjMzMjNCODkzOEEzRUIyNAotOjEwMzk3MDAwOTYxMkNDNkIwM0Q3QTMwOUU5OTkwMzc4NkZDODRFMTc0OQotOjEwMzk4MDAwNjFERjZFMTAxOERGMzk5NEZEQjYxNUY4NDc5M0U3QjA4NAotOjEwMzk5MDAwMTVDNjBCMDhEOTZDQkQzMUYwNkQ0ODdFMEZGNUZBNUE4QgotOjEwMzlBMDAwOTc3RDRFMjgwRTNFMDM4MjFCRDdEOTAwMzg4Mzc1MjU5QwotOjEwMzlCMDAwMTMyRUI3NTUyRkUwQ0RBQTc4NEExQTk1QkU3NDM0RDk4NAotOjEwMzlDMDAwRjUyNUNFQ0I1OTRBMTQwQkVERUY0QzYzRUZEQjNFMTZEOQotOjEwMzlEMDAwNDIwQUJFRUY3NzBFQTJGMzcwNzBGQUIwMkI0NkY5QkEyNgotOjEwMzlFMDAwNzZFMjJEMkFFODkxMEZFNzEwMzIxMDlGREU2RkMwOTMyOAotOjEwMzlGMDAwQTMzNDMwMDNFOERGRjQ1NzEzOEU0QjA2QjE3OTQ5QTRBMgotOjEwM0EwMDAwRUEwRkYzNjFGQzQyQzZBNzNDRjQ3RkRGRDAzMUFDNzkwQQotOjEwM0ExMDAwMzE3Q0VCRDgzNERDQkZCMjg3N0Q5Rjk4MjY3NERFNDRCRQotOjEwM0EyMDAwRTcyQkU1OEIwMzRENzRBRDI2NzNBNzFGRjRCMThENURCNQotOjEwM0EzMDAwNkQzRTU1MDc3RjU5NEYwN0MwODczRTlFNzY5NjE0QzM0QgotOjEwM0E0MDAwNzc3NUUzQzNGQkMzNjY2RkM5RUQ4NzlFNEM1RDZFMTI0RAotOjEwM0E1MDAwQkUwRUJFN0I0RkJGRjRFMUZBQjhFRDlEMjMzQUI4QkM3MQotOjEwM0E2MDAwMjFCOEQyQkEwMTY4NjNDOTU4RTQxMzU3NzhGRjcyNEQ4MAotOjEwM0E3MDAwRTg5RDIzQzM3MEJERTJENUQwNzk3RENDM0VERjkwQ0RFQgotOjEwM0E4MDAwRjUzOThBRUY1OTNBM0RFREIyQzBGNDM5QTI5NjIxMUNCRQotOjEwM0E5MDAwMjU4RUM3MEQxMzQ5MEZDODk1Q0REOUIyQjIwRUYwNTE3RQotOjEwM0FBMDAwMkE4NzgxODQ5MDUyRTlGN0NERjAwRjgwOUI1MkRGQzlCRAotOjEwM0FCMDAwOUVGRkQwQzA0N0Q3MEY5OUU5MEIyQjg5RTcyN0E1QzVGMwotOjEwM0FDMDAwRTBGMTBBRUJBRjA2RjhFOUZBNzcwM0ZDQUU4OUMyQ0Y2MgotOjEwM0FEMDAwNENDQTkzQzI0MERCQzFBOTQ4QkY2RTZEMUUxM0VGNTJBMgotOjEwM0FFMDAwRjRGM0U4ODVFMzBENkM3RjlBRDM1NDEyNEYyRkFERTVDNAotOjEwM0FGMDAwRjBCQjUzRjQ1RjA0N0U2NzkyN0QyNzAyNDA5RjM5MzIwQQotOjEwM0IwMDAwREEyN0IxRkQ0NzhBOEMwRjQ1RTE2Qzk1MDA0Rjc2QzJFQwotOjEwM0IxMDAwRkY2Njg0MTBFRUY0QUZEQzlBQ0VFMTQ3RkZDQzE5NkY1QwotOjEwM0IyMDAwRkY1NTAwQkFBMzY2QjNBMzE4OUZENzQ5MjU3NDdGNzlDMAotOjEwM0IzMDAwODlFQUEwRjJDMTJFMTEwOUVBNTlDMDZDNDc2M0ZCNjRGRgotOjEwM0I0MDAwMzkwNUY2RjEyRDNFRDQ3N0NERkM3QjlFMzZBRjVFNEYyNgotOjEwM0I1MDAwQ0YxMjE5NUVBM0VEMjFFRjlEODY3NjMzOEVCN0MxQzVENgotOjEwM0I2MDAwRjUxQkNGNzMwNkJBRTg3RDNGMzlCRURDMTkyODMyRkQ1QwotOjEwM0I3MDAwMjc0QkY0NzBGQTc5MEVFRDM5RjNEMEJCMUEwRTUxNzg1OQotOjEwM0I4MDAwRDdFNUZCN0QxNUIwNDAwRjQxMzg2OEYyNDM5MzE3NTREOQotOjEwM0I5MDAwOEU2NDg5MDMwMEZFMDEwMjc4OTczQ0U1NThDNkNBRTNBQgotOjEwM0JBMDAwODQ3QzNDNDYwRTlCMEI2NDAzREYyMTdBRkQyNjA3RkVENgotOjEwM0JCMDAwOUJFMUMxRkQ0NjYyRTUzRjJGQ0JBNzVGRDVCRUFBOEQzNQotOjEwM0JDMDAwRDk1NzI2MTI1RjJFREQyRTMyRkQ5MUE4NjlCODdFNkQ4MQotOjEwM0JEMDAwNUYxMUFFNUY2OEY4QTdGMkMxNDBBRjMyQ0M4NzMyMUNFQwotOjEwM0JFMDAwMUIwOUUxRTAwRTZBNjY0MURENDVBQUIwN0U2OTVDNDlDOQotOjEwM0JGMDAwNThBMEUzNThBNEFFMDZFMENCOTY3MTIyNTFCM0UzRDhBNwotOjEwM0MwMDAwNTU1QzBFMjU1QUM3OTY4OUYxRTVDNENEQTI5QkQ5Qzc0QwotOjEwM0MxMDAwQ0UyQURDMTc4NERDODM3QUExQTAwNkM4MzdBODFGMDY0OQotOjEwM0MyMDAwQjlCQ0Y0NzkwMThGMUI2QkFBQzkyNzc0M0Y1OTBGQ0YxOAotOjEwM0MzMDAwNDU3QkREOUNBN0ZBQzFERTA3NTkwMUZBMjNDOTI4NjUzNwotOjEwM0M0MDAwQTVFNDUzRjRGNEQ5OEI0N0IyMTZDNzMzMzkxOUZFRTUwRQotOjEwM0M1MDAwMzRBQTE3RTcyMDdEMkMwMEZBMjA1NjIzRkRGNEQyNDkyMAotOjEwM0M2MDAwNDYxQUM4MEE5ODg3NTIxRTc3NUM4RTU3REUyRjIxMUQ5MAotOjEwM0M3MDAwRjVEMjgxQjYyRTQ1ODZGMTYyRTlDMzVFNEEyRDBFMTE1QQotOjEwM0M4MDAwQUI5RDMwOUY4MTFDN0IwMzAzRjVGNzhCQzU4MDlGRTBDNAotOjEwM0M5MDAwRDRFMTE0MEYwM0JCRTZBMTNDNzM3MTc5NTI1RjM4RkI4QQotOjEwM0NBMDAwMjhBODc0NDkzRUNGQUM1QjE0QjBGMzg5MDA3MEREMDhERQotOjEwM0NCMDAwODM1RDBGRTNDRDVENUI0NkVCRUI2MUIwQzFCNEJBNkVFMwotOjEwM0NDMDAwNjY5OUVBNjQ2NDYyRDQ0QjQ1NDVEMkY0MzBCMTVGQkQ3NQotOjEwM0NEMDAwNDZGOEM2RDJGN0ZENDRFQkI3QzRDODNCNDI1NjVGOUREOQotOjEwM0NFMDAwMUU3NTBGRkI5RTRBRkYwN0ZCMkIzOTQ2OUUyNkY5OEQ1QQotOjEwM0NGMDAwRkNERDE1RjM5RDE3MDE5NjA4REZGQkZGNTdCRUU3MjE5QQotOjEwM0QwMDAwOEY1QjE1NEEwQTk2M0NEMTEzQTJCNDk5NDQzQ0M5NjAxMgotOjEwM0QxMDAwMjdEOTI3NTNGQjhERDYzRDE5M0QyQTRDRTk0QTc4QTk2RQotOjEwM0QyMDAwRTc3NjJBQTFGQjUzNEZDRjZGNzI3RUU5QURBOENCQUVFOQotOjEwM0QzMDAwQTdFMzVFMkE3NUZBODA1RTA3NTJGNjk4OUFEMjc3M0QxRAotOjEwM0Q0MDAwOUJCOERFRDc1QjJGREM4MTc0QkQ5RUQyMTFFOEMzNkFCRAotOjEwM0Q1MDAwQTE4OEZFQTY4RDc5MkY3QkY0NzJGMTk0QzY1N0ZBRDAxNAotOjEwM0Q2MDAwMDc1MTI0NEQyRUU3QzAzRTE0RkRCNkUyRUY0RTFGRTY4QwotOjEwM0Q3MDAwMTgzODVGMkQ3RDM4RUUzMUUyRTNEQkUyRUJDMkI3QTQwOQotOjEwM0Q4MDAwOEZFRkZBQkRGQTQ0RkUwN0NFOUYyODVFNTFGRjZFNTBCQQotOjEwM0Q5MDAwRkFCNzAzRkFFMkY1NzFDNEFCOUREQTJGRjFGOEVEMTcyQgotOjEwM0RBMDAwQkRGODU0OERGMjg4REJGRjUxQjk2MUI0RkJBNUFDNUI2MwotOjEwM0RCMDAwNEVCNEY1MDMwRjI5NTY0RkU2RTNEQUFBNERDQUE3QTk3OAotOjEwM0RDMDAwMzA4MEM3NjBFRjZDNTQxRTU3NDFGRkJFMDQ3QTM0RTg2MAotOjEwM0REMDAwN0JDMTMyRjRGRjkyM0NFNjhGODUwMTQ0RDBGQjE1N0YxNgotOjEwM0RFMDAwMDhGRDBDMjA5Rjc0NzI0RENFMzBFQUZEQTYzNEJCNTEwNQotOjEwM0RGMDAwMUVDRjUxMDVGREZDNkRENTMyQ0VDMzBBREY0QjQzN0Y4QwotOjEwM0UwMDAwNkQwOEJFNkJGMjkwQjBDRDFEQTU1N0Y4MTRCM0Y3MUYyNwotOjEwM0UxMDAwQjkyQTNBMzA2OUVGMDkxQUJEMUFERkRCOTA1MTQyRTI0NAotOjEwM0UyMDAwRTFBRkNGRjdFRTMwQ0UzNzIxNUY4QTdEQ0YyOTI5REQ5NAotOjEwM0UzMDAwM0FCRDIzRjE3QjEyRTlENkU5MkYzNzZBNzExRDhFQTdBRgotOjEwM0U0MDAwN0EzMzM5Mjg1MEZEQUZENjdCMTcwOTI4NDg5RjI4QzdGOQotOjEwM0U1MDAwMUFBMEE0RjJCNERFNUJFMjQxRjlCQzQ3ODhCMUNGMTVFOQotOjEwM0U2MDAwNDY0RjRBMEFGNjE3QUQ0Q0JGRDJFQTg5RTdDM0JFMUJEQwotOjEwM0U3MDAwOEQxMzI5QTgxRjI3RUE1RjVCMzNFRTA5ODkzMjFCNzM3NAotOjEwM0U4MDAwRjU1QjVCMjU2QUZGRDRBREY1Q0YyOUE3RkQxQjZCOEVEMwotOjEwM0U5MDAwNkU5NTg2NDVGQjJEMzE2OUY2MzkxNTlGNjM0MEFGRTE3QwotOjEwM0VBMDAwRjQ0QjY4M0Y4NDlCNDhCRTAxRkI4OTcyNjg0NTI3RTc1NQotOjEwM0VCMDAwNkRBNDczQUI4NDc2OUZDMkYxNDg4NERFRkQ0MDg3REMzRAotOjEwM0VDMDAwQ0FENzY5MjEyN0IwMUYwQzg0NzYxQ0U5QzI3MUUxNDU2RAotOjEwM0VEMDAwQThBRjM3RkJGREU1MTQ0RThENTJDOEJBMUFGOEI5OEQ1QwotOjEwM0VFMDAwRDcxNTVFNEZFNjc1MEZBRjY3RjMzQUQ5ODE3NUIzNENCRQotOjEwM0VGMDAwRUJCMDdGQ0QyMTBGRDZFREJDOUVDREVCMjlCQzlFQ0M4NwotOjEwM0YwMDAwRUIzOUJDMkVFQ0MwRkE3QTk5OERCNzQ5NkE2N0UzREJDRQotOjEwM0YxMDAwNzk1REUxRjUxNDVFRjdGMDdBMEVBRjkzOTdEOUY3MkQzRQotOjEwM0YyMDAwQUNFRTMwQjdCM0YxMURCQzlFQ0RFQkE5QkM5RUNDRUI4MwotOjEwM0YzMDAwQjlCQzJFQkM4Q0Y1ODRGQ0IyODBDMTNGQ0ExRjE4QkMzMgotOjEwM0Y0MDAwMzU3QTI0MDA1NzgzMUZBQjJCQTY5REQxOEI0OTIwNUM2QgotOjEwM0Y1MDAwMEZBQjQyRkRGRkQwRDBCQkJDRTA2RjVDN0ZBQUQyMEJBMQotOjEwM0Y2MDAwRjQ1MzdGOUI0NjRGMDFFNDlGMjRFMzU2RTQ2MzY2MkRBMAotOjEwM0Y3MDAwRUU5OEI2N0EwRUVDRkZGQTBDMTlFRDQ5QzJGRDMwNUFGNAotOjEwM0Y4MDAwRkI4NkU0QzBENDZDRjA1NzdDNjAyMkYxRUMyRUFENkM2MwotOjEwM0Y5MDAwRTU3Q0Y3NjlEMDdCQTk3RURFQzJFMzkxNEZGMjc4RTQzRAotOjEwM0ZBMDAwNTY4ODQ3RDIzMjA4RjE0ODVBMzZGMzc4NjQxMzhGNDc1RgotOjEwM0ZCMDAwMzZGMjc4NjQwMzhGNDdGRTA0RTI5MUY5MTBFNzlDODNBMAotOjEwM0ZDMDAwRTU4QjEwOEZBNENGRjc0MDNDOTI5NkJCMjExRTQ5OUZGMgotOjEwM0ZEMDAwRUY4NDc4MjQyRDc3NDAzQzkyM0UwRjQxM0M5Mjk2REI1MwotOjEwM0ZFMDAwNzkzQ0IyM0VBREU0MjhFODFEOTdBQTQ1RDQwNzEyQ0QyRQotOjEwM0ZGMDAwN0Y2ODk1OTE3RjBFNTk2QzhDNEIwQzBBMThFMzEyMDM2NQotOjEwNDAwMDAwRTcxOEUzMTIwM0NBOEQ3MTg5NjRCRjMxMkU5MTM0Q0U1MwotOjEwNDAxMDAwMTg5NzcwRjk4QzcxMDk0NzgxMzEyRTYxNTM4QzcxODkyMQotOjEwNDAyMDAwNkIwRkNFMzZENDhCREFCRjZGRTg3RkNEOUUwQTQzRkI5MQotOjEwNDAzMDAwODhEMDUyNDM3QjdFQ0I2QTQzN0Q1OEYwOUYwQ0ZENzM0MgotOjEwNDA0MDAwMUJENjE5REE5RjMyRTUyMDdENjVBQjhEODY3RTU5RDU2QQotOjEwNDA1MDAwOEYxQkVBOTU3NjdGQjcwOUZEOTQ2OTU3RTVBRjI2NUYxOAotOjEwNDA2MDAwQUFFOTdBN0UxOTJCMUY0Qzk5QzRFRjQ3MzlDN0U0MTE4RQotOjEwNDA3MDAwRkE2MDgxRkU4NjMyQkY5NEY1RTNFRjFEMDU3QkREOTI4OQotOjEwNDA4MDAwQzdFNDk0NDU4OUIxM0I2M0M2OTM5REJCNEZBOEY0M0JGRAotOjEwNDA5MDAwNjVFRUEzREUyRUREN0UyNDVFREQ3QjYwRUY0ODhDNEY3NwotOjEwNDBBMDAwMzYzRUNBRUNGMTI2NUVGNjVENDczREY2NkJGQTVCN0M2OAotOjEwNDBCMDAwQkJEQzI2OTk2MkY0MDg2NkQ3MzQzRDJBNjBGRkVGM0FFQwotOjEwNDBDMDAwQkVENjFFM0I2RUY0N0IxNDE1NjNGNEY2NkQ0OEYzQUY1OQotOjEwNDBEMDAwOTIzQTlEQkU2MEVFNEE5RTRGNTBDRTMzRkJEN0M0Rjc1NgotOjEwNDBFMDAwN0I1OTgxRUY1NDFEODVGNzdBMEZGMTU5Njg3REJENzNCNwotOjEwNDBGMDAwOTI5RkU5MjVBMjgyNDI3NkNENkQ2OEE3NkJGREI1NzlDNgotOjEwNDEwMDAwRDUzOTY3MzNGRTQyRDk0N0Q4QzBBN0VDMDYzRkMxRkE3QwotOjEwNDExMDAwQjRGRUY1MzczOTYyMjI2MUFBOTc5ODIyMDJGQUY1NjQ1MwotOjEwNDEyMDAwQTk3QzZBMzZENUM3RTU2MzI2REY1QUMwNjcwMjdCOUY0NAotOjEwNDEzMDAwOTBDNzE5M0ZGNDhBMDYzQUFFNUJBMEYxM0YxRjlCMUY2MAotOjEwNDE0MDAwQ0ZCQkQwRjg1QjZEREEyNDdDNUVFN0U5N0Y1RTE2OTgyMgotOjEwNDE1MDAwMTdDQzg3Q0ZDQjFDNzE2MDY5OEFEODcwQkVFMzIzQTlDNgotOjEwNDE2MDAwNTgxRjE3NDlDNjcyNkM2NDA4OTY2MzIyODNCMDFDMURFMQotOjEwNDE3MDAwQzlDNUIyMzQ5MjhERTU3NTkxNkJGMEJEOTJDODA4MkMxQgotOjEwNDE4MDAwNDc0NUFFQzNFN0JFQzgyODJDQUY4RERDODBDRjhCMjM1QwotOjEwNDE5MDAwRTNCMTJDOEFEQzhDQ0YwQjIzNjU1ODVFMTNCOTE1OUZENQotOjEwNDFBMDAwOEY4QzRDQzM3MjQ0RTQ3NjdDNUUxMDk5ODU2NTdFRTQwNgotOjEwNDFCMDAwMDc1ODBFOEZDQ0M1NzI1ODY0M0U5Njc5OTE3OTU4RTZBRgotOjEwNDFDMDAwNDY5NkUxN0IzOTkxMjU1ODY2NDcxRUMwRTc0QUU0N0U1MgotOjEwNDFEMDAwMkNCMzIyOEY2MDk5MTlGOTExOTY0MzIzQjU1ODY2NDQ4MAotOjEwNDFFMDAwRDY2MjM5MjRCMjA5REYxQjFDRDk4OEU1QTBDODhGRjEzQgotOjEwNDFGMDAwQjkzN0YyMTg5NkU5OTE2RDU4MjY0NzlFQzM3NjRGQTRCOQotOjEwNDIwMDAwMERDQkE0Qzg0QkY4REMxRDc5MDE0QjU3RTQ2N0Y4RENGMwotOjEwNDIxMDAwMTlEOThGQTUyM0YyMUEzRUI3NDc3RThFQTUyREYyMTYyNwotOjEwNDIyMDAwM0VCNzQ2MEU2MTc5MjUzQzVENDkwRjFFRjdBOTkxOEY3NwotOjEwNDIzMDAwOEZGOUQ4QzhDNzRCOEYxOUY5NzhDOTZGOEQ3Q0RDNzc5NwotOjEwNDI0MDAwQzRDOEM3OEI1RjM3RjJGMUMyMEUyMzFGMUZCOUQ3Qzg4RQotOjEwNDI1MDAwQzcwQjc2MUFGOUY4RjA1NjIzMUZDRkRCNkFFNEUzMzk2RgotOjEwNDI2MDAwNEQ0NjNFQUVENDE5Rjk3OEU2MUEyMzFGQ0Y3OEQwQzg1MAotOjEwNDI3MDAwQzcwNzJGMzdGMjZGRUYwMjIzRkY0RTI3NEYxQkVERjRENgotOjEwNDI4MDAwQzkzQjBDRURFRTA5MkYxQUM2NzM5NkJFMUM2M0Q3ODQ4QQotOjEwNDI5MDAwOTBCRkQ4MEJGRkQ1RjA5RTM1RUY3MDBDNUY1NjE5N0Y5RAotOjEwNDJBMDAwOEFGMTlGMDM0ODIwN0VGOTMwQjFGQkMwQUU4OUM1NjcxMwotOjEwNDJCMDAwMEFFNzA3QTlCMEVGNjg5OUM2RjdERDAwRDg3N0I0NENENAotOjEwNDJDMDAwQjk3NTAyQzZBOTUyNjc4RTlCMDdGRUI4Q0JBNzA0MDUzNQotOjEwNDJEMDAwNzQyMjYxNjY3NTNFRTg0MTI5NDMwOEYzMjc5MEZDOUJGMAotOjEwNDJFMDAwRkRCNDVFM0I0OEFCMTM1NTgwRkE1MDgyRkUwNTg4RkM1NgotOjEwNDJGMDAwNjE3QjM2QUJGRkIyRUU5MTQ5MTAwN0FFMzVGMzc2QjU3MAotOjEwNDMwMDAwNzYxMkY4RDU2QTZEQUM3RUFDQUU2MjFERjgyMzUyOTI3RgotOjEwNDMxMDAwRkM4MzIxNTE2OUE3MzkzRTNGRkY1ODkyMTEzRTAzMjU4NgotOjEwNDMyMDAwRkY2RjI0NUFGRUI5QUNFQjIxRjAyN0ZFQ0ExQUY4NzdDQQotOjEwNDMzMDAwODlDMjYzQjkzNTkwMDUyMUI0RjNFNkMwRjMyMDNBNzIxRgotOjEwNDM0MDAwMDQ3RjI3RjQyQjEyRkNFRjRBQzhDRjhEN0VEMzVCNDA0RAotOjEwNDM1MDAwNzBEMkY2QTE1MkY5ODdEMDlFM0E3MzBGREExNzFBMUM2MQotOjEwNDM2MDAwNkE1REZEQ0ZFNzlENUVGOTQ0NTA0RTZBRkU4QUE3MUM0OAotOjEwNDM3MDAwNkVCNDNGMUI5RjkwNDMxMDM3MzcxN0E0QTM3Q0E4NEQwMgotOjEwNDM4MDAwMjYyQzFFMEE3MTIxOEMwQkIzRkFBRUExNEFBODkxRTkyMgotOjEwNDM5MDAwOEI0NkI5QjJCNUZFN0U4ODQ3NTg0MTNFRTVFQUZEQTc5NwotOjEwNDNBMDAwNURFODNGNEQwMjRCMjExN0ZDMDMzRDk5MTIyRDU3NUFGMgotOjEwNDNCMDAwQzJGNTIwNTdCRTRBRUUzQzI5OTgxMDJFMTc2MUZEMEYxQQotOjEwNDNDMDAwNEQwRjYxRkY3NThFOTlFMzYwNUQxNDJFNUZDMDdBMjlGMQotOjEwNDNEMDAwNUNCRTk0NDYyNzg2MEJGRDJCRjc4RUUxQUEwNUZDNjc5MQotOjEwNDNFMDAwQUY2MEYwNUYzQTRDODFCRkMzMzgzMjI5QzdGMTE1RDVCMQotOjEwNDNGMDAwODdGMDNCMkU3OUYwN0QwRDhFRjRFRkMxOTQzMUQxRjgyQQotOjEwNDQwMDAwM0Y3RDRGMzYwRkU4M0I5RTM2Q0VERjI1RkU3RDJFMUZDQgotOjEwNDQxMDAwMzVGQUFFNEUyMEFGQjQ3ODI1NTE2RkZCNTY3RUVGQzMxMAotOjEwNDQyMDAwQjIxOEY3M0I2NkE5MUNFM0I0N0RGODYxOUE1MTFFOUE1NQotOjEwNDQzMDAwRDI1OERFODM0OThBMUY3NzQ2QzczMThDREYzQUYzQUEwOAotOjEwNDQ0MDAwRTJEOTlBQkY4NUQ0REQ3NjU1RkQxQkI0RkVENDQwODRGNQotOjEwNDQ1MDAwRkVCOTFBOUU1QTZGNDM3QTFDQzZERkNGRTU3QURFNUIzRgotOjEwNDQ2MDAwQkY3RjU1NkQwMkJBQ0MyMzk4Q0YxMUFCREYzNTZFMTVFNwotOjEwNDQ3MDAwOTExRTczOTM5OUJFQThDMTVCRTJGQUExRjY1REE5QzkyQQotOjEwNDQ4MDAwQTgyN0JFMjY3M0JCNzhFQkQ1QzE3RjBGODc3RjJFQzVDQgotOjEwNDQ5MDAwRjNCRjk2RjQ5RDA3RDkzOTkzQURDN0MzQUEwNTQ1QzFBQgotOjEwNDRBMDAwNzcyMERGNjQ1ODBCQUI0QjVCRTk3QzhBMTNDRjg3RjAzNgotOjEwNDRCMDAwQjg4NEI2OEZBNDE2RDY5RkVDMzE4RURCRTdCQkE2MTk2NQotOjEwNDRDMDAwQkU3OEYxQjM4NERGRjk5NjcxQkVGOTY2NjM5QzRGN0JDOQotOjEwNDREMDAwOUZFMjBCRjE5REM3RjUyODUyNERGRkU4QkNGMjg5MTExMAotOjEwNDRFMDAwOEU1QUJDNEZBQkJGRjVGQkIxMTg0RkFGMEQ5NkIwNzhFRAotOjEwNDRGMDAwQjk5M0M5NzNGMjM1MUQ3RDBDQjhCQkUyRTM0MThCQTdCQwotOjEwNDUwMDAwRDY3MUZCQjJERUJCMDNGM0Q5Qzg1RTIzOURDQTgzMTYwNgotOjEwNDUxMDAwRTBGM0M2ODIwQTBGQ0I0NzYzRkQyQzQzMUZDNEZDQzhERgotOjEwNDUyMDAwQzY4MkQ1RThDRjk1NUJGRDU2QjA2QkU1MDJEMTA3MzA2QQotOjEwNDUzMDAwOTc5MjI3RjNGNjQ5RDg2RTY5NjU3QUE3MDVEQTE1RDAwMAotOjEwNDU0MDAwNUI3N0FFNDVEMTEwMEMzNTgwN0Y5OEE0NDkzRTA4NjM1NwotOjEwNDU1MDAwNEFBRDgxMDZFODI3MzUxMDFDODcwMEVCQTNGM0Q5QzFDQgotOjEwNDU2MDAwRjE5OEUxOTVENjk1RDE3RjY2MDRDQkMzMzY3QzhGRjg2MAotOjEwNDU3MDAwODdFOUZBODVGODdBMzMzMzFFMEY0M0JGQ0M2MDU1Njc1RAotOjEwNDU4MDAwMTlGOEZEQUEwODhFOUY5OUIxMDNDREYyQzE5RUQ5NjI5OAotOjEwNDU5MDAwOTlFRUJERUQ3Q0ZDQ0Q3QzNGRDk4MjdFMEZCRTE3NjBDRAotOjEwNDVBMDAwRjk4Q0IxRkI1NzdCQUY5NTU3ODZBNzU1OTRDMUI4RjZFOAotOjEwNDVCMDAwNjA3OTM5QkVEN0NBREZFM0ZEOUVFNkZEODY0MTdCMjlERgotOjEwNDVDMDAwNTIyN0NFQTc3N0JGRjM3RTJEN0MxRUY1RENERTFGMUVBMwotOjEwNDVEMDAwNjQ3OTlGNzVEQ0VFRDdGQTNEQzlDN0IzNTg5RjdCMDY1NwotOjEwNDVFMDAwRkM4RUY5NDFFNjhGRDVEQTgzQkM1RENCQkI5MDRCOEQ1OQotOjEwNDVGMDAwRjlBMzFENjZCNjVGM0Y5NzE5N0ZEMkU4MjYxMTFEOTM3OAotOjEwNDYwMDAwMDYxRERGODNGOEEzNkEzN0Q2QUI1MzBDRjYxRkE5MUEzMQotOjEwNDYxMDAwNkNBQzJGQ0UzMUY2MEY4QzM0RDZFNzk0MThGQkZCQUY4MQotOjEwNDYyMDAwMzdCNDVGRUVGNUJCODQ2Qzk4RUZDREZEMkVGOTdDQkZGRgotOjEwNDYzMDAwM0NERDVBODI3NjQ3RDRERkQ3NjVEM0RCMjcxOTdDQUNDMwotOjEwNDY0MDAwRUQ1NTE1NzY3ODdGNzcwQkRGMjdEQzNGNjNEM0VDOTc0QQotOjEwNDY1MDAwQkNENUQ4QUVBRDdCM0JERjI3MUJDMEZGNjEwMUJDQjQyRQotOjEwNDY2MDAwMzBCRkNBQThBQTc3NDY1MDNDRUVGOUMwRTREQkExMjRDQgotOjEwNDY3MDAwODY1QjIyM0ZDRTQ2QzAyN0VFM0Y5NjU3RkUyNEY3RTNFNwotOjEwNDY4MDAwMDRCOTFGQTcxOUZDMzhGOUUwQ0ZGMTczN0ZDRTU0QUMwMQotOjEwNDY5MDAwMUZFMDdFOUM5RkYxQkNGMkZEREM4RkYzNTM5RTU3QkU2MgotOjEwNDZBMDAwOEZFNzk1QkZDNEZEMzgyRkYwQkNGMjFEM0NBRkZDMjY1MAotOjEwNDZCMDAwQ0VBNzFCQTZGODA3ODM1RjZERTc5NEY4NzZGMTREMzIxRAotOjEwNDZDMDAwOEJGRjRDQTdFQTE2NDFGOURFMjNBMEZGN0MxQ0Q1NTVEMQotOjEwNDZEMDAwRTg3QUIzQUE3QUQ2Q0FCNDlFN0UwRjgzNUI1NkEwQTdBNwotOjEwNDZFMDAwMENGQ0U5OUVDOUFDM0U4M0NCNTU5MDFGMjA0Rjg4OTdBOAotOjEwNDZGMDAwRUIzQjE5NzRDNzUyNzg2RkUxNzQ5RTU5REQxMzg2N0NDOQotOjEwNDcwMDAwMTY1Qjg2NjcxNEI4NDA2REZDQkJCNENEOEJGOUZDOUM3RQotOjEwNDcxMDAwOEU2REQ1NTU2MTY4MjcyNkJGNUQxRTAwRTNCMzc5RTUzMAotOjEwNDcyMDAwMUNFOTk5MDRFMTREREY4OUNFQzM4MENFRTJDRTc2MTEzQgotOjEwNDczMDAwRkExNTk2MDZENzUxMEI5QjM4MEE0MzIyRjBBQjg2QjI4NgotOjEwNDc0MDAwNDBFMzg4QjQyOEJFRTgyQzBDNzQ0MUU3ODg3MjJCNTNGMAotOjEwNDc1MDAwRTNCRjEzOEM3NDIxNDdCNkEzN0U1QzVCMzUzQjA5RTk0QwotOjEwNDc2MDAwNEY2MUZEODcyNzkwNzMwM0U3MThFREE2NjRCRkQxRkY2MwotOjEwNDc3MDAwNTU1QjNEQkI1RjdGQjRFRjc1RTNGQkM1MUQ0NkJCQUIyRgotOjEwNDc4MDAwMzZBRkZGRjcwQkY3MUFERjFGQjkzM0U2RkQxNkI2OEUwQgotOjEwNDc5MDAwNDRFRkU3NDQ2NkEyN0RGMDdDNkI3Q0JFRjAwRkE2OEFGNgotOjEwNDdBMDAwODk4MDA3QURFRThFREM4OEZENjNGNTNFMDlGNEI5NUNDNwotOjEwNDdCMDAwNzBCRkNCN0VEMDdGMjVDNUUzQzdCQzI0NDVFMUE1OEY2NAotOjEwNDdDMDAwM0ZGN0YzN0EzOUQ2QTk3RTM4NUQxRThENzgzMUU4ODdCOAotOjEwNDdEMDAwMjZDQTkwMjExNkQyMzA4MjcwM0JFM0VCNzVGRTBDNUE0QwotOjEwNDdFMDAwQkY5M0EwMURFMjkwQUQzN0FCMTM4MDdGMkMzNEY4NTVGQQotOjEwNDdGMDAwNTJFNUFBMzMwQUVDRDdDNzQ0OTQyNTNCODNGREYzQkJBQgotOjEwNDgwMDAwM0U3OTExNEUzRkM2OEY3MjlCM0MyNUE2MzhGOEQ2Q0ExQQotOjEwNDgxMDAwQUQ0REUyRDQ3ODcxQjEyNTlDQUVENzM3Q0RGNkEwNUMxMgotOjEwNDgyMDAwMzgxMjNGOEY0NEVCNEZEN0JGNDRENkU1OTMwQ0I4ODM4MwotOjEwNDgzMDAwRTcwOTlDNjNGOTZDODMzOTJEQTUyRUVEOUYwRUFFMzZFQQotOjEwNDg0MDAwQkY2M0FGQjZFRjlDMkM2RjQ0QTNGQkQ0RTFGREQzODlDQgotOjEwNDg1MDAwQTY3RjQ2NDIyMkU5ODQ3RDIxNTVEOUYxNDhDMjFEM0VGQQotOjEwNDg2MDAwQ0M3NzA3MDFBQURGMjdCNTdGN0JBMDExRjhBNkZBMjMzMgotOjEwNDg3MDAwMTFGOUM4ODAzQkFBNDQzRDFFQjQ3OTBDNTZDMjY1QjBGQwotOjEwNDg4MDAwN0Y2QjBGMkQxMTIxREYzRUJGQTU0QUM0NzMxMzg3MDgyQwotOjEwNDg5MDAwRkYwRTk1NzBCNEI0MkQwRUY5OTk5RjhDRTU1OURBQUFFNAotOjEwNDhBMDAwMDJFQkUwRjlGMDE2MDYyRkIwNEY3OTdGOTQwRjFCQUJBNwotOjEwNDhCMDAwNjdGQjAxOEZCQjMzODg4RkU3QUYxOEZDNzVCQjlEQTJFOAotOjEwNDhDMDAwMEE3QUU2MjVDQUFGNTA1MUY4OUFDRTRCQjNFQjI4RjBERQotOjEwNDhEMDAwRjI1Qjk5NkJCNjc2MTgwOTM5QTFERDNGMTVFMUE1RTVDNAotOjEwNDhFMDAwRUJEOUI2NUQ1NDcxREUwMzFFMEFFMzc5OTM1MTRDMEY4OAotOjEwNDhGMDAwMzA5M0NFMzBDNjE2QTQ4MDJBRDBGMUQ3MDczQzNFQzhFQwotOjEwNDkwMDAwNEZDQzZEMjk2NjdFOTlCQzIwRTY1MUFDMTYwMzdCODBBNgotOjEwNDkxMDAwRUUzNTc4OThEM0RBMzE2RkE1MzZDMTc5ODEwRDlDOUYzOQotOjEwNDkyMDAwNEIyNEJFRkREMUM5Rjk3MEFBRUM5QjBFRjZFODlFMjc3OAotOjEwNDkzMDAwMjhGREM3RjEwQkJDQzNDNzc5NkVFQkVDQTQxMTRBNzQxOAotOjEwNDk0MDAwRkY2QUVEQzc0MTY5RDNDRDJCMzcyMkIzM0NDMTk2NkZDNwotOjEwNDk1MDAwQTdFRkRGNkMyNjNDQkZDQUY4OUU0OUYyMTlFQ0FEMjFFNwotOjEwNDk2MDAwNjYwNUZCNjk3NUM5NjlFNDY3NTczRjRGMDlGOTEyMjk2NAotOjEwNDk3MDAwOUM2RUMwNzNBQUJCN0ZCQUQ2RjZDREU1QTEzMTdBNDc0QgotOjEwNDk4MDAwNUUwMUQyNzM1NEVGMTA4OTlCQzJCNTM1OEZEMzBCQTc0QwotOjEwNDk5MDAwMjc0RDhFQzgwNTQxNEZCRUQwOTc0RTVBQUI0QkYwQkM0OQotOjEwNDlBMDAwQzlBNTA5OTQwRUU5OUZDNUQzRUUwN0JGODE2QjQyMThENAotOjEwNDlCMDAwRDIzNzgwMEVDRTAyMUQwQ0NBNTNENzBBNDgyNzYzMTA4NwotOjEwNDlDMDAwREVFRDVDRUU1OTNEQ0NCRjEyM0I2RjREQUYwM0JCQ0E3MQotOjEwNDlEMDAwOUIwMjIzQzdEODM3MjRGODFFRDA3N0VFMDg4ODE5MDIyNwotOjEwNDlFMDAwREREMENGNTFCQTk2MEFGQUI3RUZBRTM2NUVBREM1OEZCRAotOjEwNDlGMDAwMzNFOTFGRDgzNzFEODA2RkUwRTM5RkM1RjhBOTNDNTQwOQotOjEwNEEwMDAwNEYxREEzOTNFRjlGM0Q4MEZCMjMxNkZFQjFFRkQ1Nzk5OQotOjEwNEExMDAwMjY3OUUyRjE2RDYyMEE3ODJDQTMxM0QzNEJBQzNENEQ5RAotOjEwNEEyMDAwRkFFNEFEM0Q4OEZDQzMzMjYzMkFEQUM5QkQ3Njc1RUI4MgotOjEwNEEzMDAwNEM1Q0I3ODVEQjhCRTYzQzZFNDdGNkIxMUJFRkYxRjVCRQotOjEwNEE0MDAwMjc0RkNDMTlERjJEM0Y3NEE0MjVCRUREOThFOEZEREU4RAotOjEwNEE1MDAwQkNEMDZGRTk3N0Q4QzhGM0VDMzRGQkEzRDdFRTg4MTk0NAotOjEwNEE2MDAwNDcyQzZDOEY3QjBFQzM1OTY4ODRCQjNEQ0ZBODc3MTQ0RAotOjEwNEE3MDAwOUFEOUZFQjQ3ODhEN0U2M0IzNjc3MDdDRkYyNkNGNEZFMgotOjEwNEE4MDAwQUIxOEE3RTE0OUI5RkIzRkU5N0U1QjcyRDQ0QzFBQTE5MAotOjEwNEE5MDAwQ0FFRDVDQ0RBRkI0MDRGMkQ0MjgxRDU3NDBERTFBQzU3MAotOjEwNEFBMDAwRDMwMjUyRUU4NkM2RjM0NEM0N0M5OEYzRTQzREY3NzUxNgotOjEwNEFCMDAwQkE3RDFGQjBGMDczMDEwREU2RDM3MDlFNDJDQkM3NUE4QQotOjEwNEFDMDAwMTg2NDc1NkQzRTk1MkRDNkZBMjIzMjNCMURGQ0FDOEJFOQotOjEwNEFEMDAwQjY5QTA5RTQ1RjJEMjFEMkU5MkU2REZFOTQwRjk0NUIwNgotOjEwNEFFMDAwOTgxRTU0NDlBQUVBODFBRkFERTdGRUMzMEEwRjkxMjA5MAotOjEwNEFGMDAwN0Y2QUM1QUJDRjhDODFGMzM5OTUxNjZFODc1MUY4MkI0MQotOjEwNEIwMDAwQkEzQzlCQTVDRTkwMENGRUQxNEYzQUFFQkJFQjA2MDI1MQotOjEwNEIxMDAwRUY4N0VBMDc5NzYyOUUzQkU2NTFDNUMyN0Q3RTgzNzFBRgotOjEwNEIyMDAwN0U1NzlBN0ZFQzdDQjU3MzE3ODlFNjIxRUQxMUUyOUVFMgotOjEwNEIzMDAwM0ZGQ0ExNDUzMEM0RTdBRTc0MkVFNDE5MDg4MjBENDg0RAotOjEwNEI0MDAwN0MyRUU0NEFFRkVGRjg4RUVGM0ZGRjFEREZERjZCNjE1NQotOjEwNEI1MDAwRjQ5QkU4RkQxNUQ2OUU1QjMwQ0U5RjU2NTU4RUZFNUFDRgotOjEwNEI2MDAwOUVEN0IxOTIwNEZDRTAzQTM3QkQzRTRCMURBMkU4RkE1NQotOjEwNEI3MDAwNzlBRkIyNUYwNkVENjdCQThBN0U3OUZEOEY3NzgxRUZGNAotOjEwNEI4MDAwRjM1RkVEN0Q0RTg2RkQ3QkZFQzU1MzMzNDEyRjU4RjYxNgotOjEwNEI5MDAwOUE4OTU4MjE0RjZEQUY4QjlGRkYwQUM5MjBFRjk2NzZGNwotOjEwNEJBMDAwOTg5ODVGNDEwQThGQjk1RDk3MUYwODI3NTgwMThFQ0JFRgotOjEwNEJCMDAwN0VFQUMyNzhGMkQyOTcyREExMTlGNEZEQTVBRjdDNTJGRQotOjEwNEJDMDAwNEMyODFDMkVBQ0VCNzk3QjA4RTgzRjJGMEEyQ0RGNEFERgotOjEwNEJEMDAwRUQyQUJFOUQzRTVGMkE5MUZCQ0FFM0Y5RDEyRDRDNEZEMQotOjEwNEJFMDAwMzlGNzczQzcxQ0EwMzM2MUNGQTE3QjcxRENGNkJCQ0Q1NQotOjEwNEJGMDAwMTY5RDVDMzg2NDMxNkJGREQ4RjlBQTE3ODREMDMwODFEQQotOjEwNEMwMDAwQ0Q0RjlGRUZBREU1Qjk5RDdCNDE2MEYzM0I2ODBFRDk3OQotOjEwNEMxMDAwNjA3RTdCREFFNDAwRURCNzZBQ0Y1RjkwQUU2RkZFRTlBRAotOjEwNEMyMDAwM0UzN0MwNjFENTQxOTM4MUZGQUNEQTYzMEE1QjhBQjEzQwotOjEwNEMzMDAwM0M2NTQxN0VFRjc3MEE2MzAwOUUwNEU1RjdDQThFMTU1NgotOjEwNEM0MDAwOTgxN0JCQjI3REQzNUY0QzZFNzhERkI4QkYyODVDN0MxMQotOjEwNEM1MDAwNjE4MEVCNzE5MzZGMDZENDdGRjZCQzFCRjI4OTNGRUY0NgotOjEwNEM2MDAwRENFNTA2QjhEMjcxRTdDOTk0QUU2RUZDNTJCNzBGMDkwNQotOjEwNEM3MDAwMUIzRjkyRDI3NzNDNDI3QTY0QTBBRjU1RUQxQkQ5RjcyNwotOjEwNEM4MDAwM0E2RTNCMDNGQzZENTVDQzNFRkUxQ0ZFMzFBOEFGRkNEQQotOjEwNEM5MDAwQjgxODIzM0YyRTkxREY4RTAxN0Q4M0VDNDk4RDlCNjdGMQotOjEwNENBMDAwRDAyQjNGRjhCRTVFQjZFRkQyNzYzODFGN0NFRUU1M0ZFNAotOjEwNENCMDAwNkQwN0JEN0VGOURGQkZEOEZFMDhGODAzREVCMDc5ODA0RQotOjEwNENDMDAwMUZBRDdBRjEwMzM3RDFDMURGNjU2NTdDRTFDMjBCQ0YzRgotOjEwNENEMDAwRUY3RTlBRUU5MzBCMUY1OTUwQ0ZCOUYwOEIzMzk5MEFBMAotOjEwNENFMDAwNURGRjg1RkQ3RjREMDdCREZFQzE1RjRDMTkwOEYwNzg2MwotOjEwNENGMDAwRjBDMENEMDNGQkIzNjM4MDZFNDMxNjNEN0U0Mzg4NUZGNwotOjEwNEQwMDAwRTVBMEMwOTI5NzVGRTc2NTBDOUVERUVBNzgyQjEzRTY3QwotOjEwNEQxMDAwNzlGRTg0MDVDRjcxQURBMkNGQUE0QjAwNkYyQjUwM0UxOAotOjEwNEQyMDAwNDA3RDBEODVGN0NBQkQxQkZFNjIyQThFMDc3Nzc1ODgwOAotOjEwNEQzMDAwRTg4NTMyM0M4NDc4MDFFRkI3RkZDM0M0NTIyOENEM0VFQQotOjEwNEQ0MDAwMDVDNjIzM0RDOERGNjNERjVCNzU4Q0UyRjdEQUM0Rjg4NAotOjEwNEQ1MDAwQkM0NEJFOTYwMUZFQUJGNjZFNjRERjZEQTdGODc0RjczNwotOjEwNEQ2MDAwQzVFNzc5RjhDN0Y4QkVGODJDQjRDNkUyNzNGOUIzRTgyMgotOjEwNEQ3MDAwNjNFQzQ4OEQ5QjE3QTdFMTczQzU4MTNCRkJENTFCMzRDMgotOjEwNEQ4MDAwRkU3MDI1MzgyRjE2RDhCQzIyMTZGRjA0MkJFQ0IzOTdFMwotOjEwNEQ5MDAwMURBQTk3RTEzOTM0ODNCNjVERDg3NzI5OTM1MDNBRjk0MwotOjEwNERBMDAwQ0NEQzczMkZGMEM5OUU1RjU4M0M2MDc3MkNGREM1NzEzOQotOjEwNERCMDAwREM3NzE3MEVCQzJCMkJFQ0ZDODg1M0EwN0FDNTA1RDJGMAotOjEwNERDMDAwRkJENzA5N0FDNjRBODE1NTU2RUQ3NDg1MkRFRTI4QkU2QgotOjEwNEREMDAwNTY4NjY2NEQ1NURDRjhGQzE0M0UwRkIxRkRCMDMyNzRCQQotOjEwNERFMDAwRTgwRTIxMEVGRTFFQjJFNjMwRkQzMzM0MDBFMUIyODI0MQotOjEwNERGMDAwNUE0NDlFNDIyMzVFODU3MTgwQ0Y1M0I3MDBGRDI1QzI4MQotOjEwNEUwMDAwQTdCNjdFMEZBQzdGQUMwRUFGM0JEOTNFOEVFREJGOTIwNgotOjEwNEUxMDAwRUU1N0UwQzM3REYwMUIxMjhFNDM3OUExQ0QyMjQxM0VCNwotOjEwNEUyMDAwRTQwNTdFOUUyNTE2RUY1MUY4RjNGMzkwREY1MjVGQUM1OAotOjEwNEUzMDAwQjIyNjg4MzM3MDM4NUM2OUJGNUY2OTdEREYxNjdFRjcwNAotOjEwNEU0MDAwNUExNTFDMzcxNjhFRTdCRThFMkYwRjlBMzhGRjU4NDkxOQotOjEwNEU1MDAwQUFBNjBFRDZDOTMzOEI5OUNBQjM2Q0QwRjdDQUQ1MjE4RQotOjEwNEU2MDAwNDI3NEJFRjVFREVDQkNEREI5M0RBNjEwQzg4QjU4N0U5MgotOjEwNEU3MDAwQjEzMjgxN0RGQ0I0OTVGOUJGNTcxRTNDNTQwQzdDRUREQQotOjEwNEU4MDAwRENFMTlGNzNCQTY0NzRCRjcyRUYyOTU5RTVGMjIxQTQ4MwotOjEwNEU5MDAwOTcwRjA5RkMyODNCRjlCQzU3QkQxRTdGQkM1NTdCRkYxMwotOjEwNEVBMDAwMTI3N0JDQ0YyNUZGREQzMEZGQ0YzQkNENDRBNTQzN0MzRgotOjEwNEVCMDAwREU2RTlBMUE0RkRGNkFCNjlBOEQ3OUI1QUUzMTI3OTJCNwotOjEwNEVDMDAwRTg3QjI2QjcxRENGMzNENkFFRjMxRjU3NDEyRjc5Q0ZERQotOjEwNEVEMDAwOENGRTE1MjJGOTNFQjNFMEY5NjlCQjAyRjFFNTVBRjcwMQotOjEwNEVFMDAwMjIzQ0Q3QTI4RDU3MTcwMzI3Qzk1QjhFRkUwOTI5QUQzNwotOjEwNEVGMDAwQkM5NEU5RDQyMTgzM0Q2REY2ODg4Njc5NTNCOTlCMDEzMgotOjEwNEYwMDAwNzJFOUU0QTgzMzY2NThFNzFGNjJGNEM3M0Y0OEE0N0VGRAotOjEwNEYxMDAwMjAxREVGMEZBQUUwNUJBQkM0QjMxNzhERTMwN0Q2OTg1MwotOjEwNEYyMDAwODhBMjk3ODc5NjlFOTMzMDFGRjJBNjhENDBCRTlBRTk3RAotOjEwNEYzMDAwMEQ5QjBBRkM2NEQ1NzYxQkM2RDVERjNBNzA3OTM3QzA2NQotOjEwNEY0MDAwRURDMkIzMTYxRUNGNjQ3OUI1OTVEQzVFM0I3M0UwRjIxQgotOjEwNEY1MDAwRjZGRkEyRUQ2N0UwNjVGQUZEQ0FFREI0M0ZFOEVEN0IzMAotOjEwNEY2MDAwMUQ5OEU0RkNFNzk3OTM4QTA5RTVEMzk1NkYzRTMyMTNDOQotOjEwNEY3MDAwRjg0QjI1QzRDMDY5RkZDQTlGMEUwQzQxRUU0MkY3MDBGMgotOjEwNEY4MDAwNTZFRkRFMzczNDA0Nzg1OUZFQjM1RkFDMDQ3OUIyRUNFNwotOjEwNEY5MDAwMjcwRTAyMjRGOUQ2ODFFM0Y3NDJGREMyOUIyRUNDRUYwNwotOjEwNEZBMDAwQkFGMEU2OTkxQjYxMUY1MDdENUJEMUNCRjUyNUZBRjM3MgotOjEwNEZCMDAwREI3NERDNjU1MDY3RURDMjM3OUNENzgxMURCMzBDNEFBQQotOjEwNEZDMDAwNEFFRkNCMEUyNkUxNzkwNzVEM0Y3QzZGOTVBNUU3MjE3RgotOjEwNEZEMDAwQkNDODg1QTg4MzQ1QjQ4OUMyODM2MTFGMkVEQjYzRkNFRQotOjEwNEZFMDAwREU1OTJCQjMyQjU2QzkzRDhCNThGRkUwNjBCNjVGM0JCMwotOjEwNEZGMDAwRjFCREFGMzhERDZCRURCMUVGNkJGREJGRTRGQzMzM0FEMwotOjEwNTAwMDAwMEU3QjdGQTU4NTU0QzVBMzdGQzFDNkM2NURCNkU3NkY3RAotOjEwNTAxMDAwRjlDNkYxMThCREY2RkQwRTdCRkU0MzgxRTVFMzkzRkQ3NQotOjEwNTAyMDAwMzY4QzEzMkM5N0MzQzM1M0U4N0U3RDQ1MjY4QjYxREZGNgotOjEwNTAzMDAwMkU3Nzg3ODcyN0QzRUZCREM2RjlFNTcyM0JBREQzRTc1RgotOjEwNTA0MDAwODNGOTNDQTAzRkQ0ODlCNUVCMjc4MERGMTVBRkRBMDhBMAotOjEwNTA1MDAwRDBGQjhBMzc1REU4NTc1RUYxQ0FFNUVFN0ZBMUNGQ0Y3RQotOjEwNTA2MDAwMUQ3MEEwREY2RkM1OUIwRjIzQkU1NzU4QzJGNzgyOUZFQwotOjEwNTA3MDAwQUU2N0JGODVFQ0EwRkRDRkVERkY3NTI2RTgyM0U3Q0MzQQotOjEwNTA4MDAwRTFDQzk0N0VGQzQzMkJEQTJERkNGMjE3RTMzQUE4NURDOQotOjEwNTA5MDAwNTA1MDQ1RTdBMzNFQzZGMjcwQUEwOUJCNDdBMDlBRTc2NQotOjEwNTBBMDAwNzk5MDhGNkRFQzlDMzI4RjRCQURFNjdFQTI4QjBCOTQ4QQotOjEwNTBCMDAwMjQ5Q0ZGODQ1QkQ5NzNFRTI3NUE3RDlCMzIzMDU5Mzc4RAotOjEwNTBDMDAwMEZDODkzMjNENzUxQkI0NEFFQ0EwNzNFNkI4QURDNEE1NAotOjEwNTBEMDAwMTQ1QTk3MjJCOTU4NkFGRDRDNzAxRjQzMjFFNDI3QjAzNwotOjEwNTBFMDAwQjhBMDM5Q0Q0NzJBNjlGOTcwMEEwOUUwRjk0OEU3RjQxMAotOjEwNTBGMDAwREU3REY2RUYxNEM1QUJCNzI5MDM2MUJDOTEzNkM2NUYwMAotOjEwNTEwMDAwMkFFREZFQjEzNkU0MzNDNjdCMTRENDAzNkM1RDk3RjkwNwotOjEwNTExMDAwRkQwOEIxRjNCRDZDNTYyREMwQ0ZBM0YxM0E5NjI3NThDOAotOjEwNTEyMDAwMkQyOUM3QzFGRjRFOEU3MkJFRDQ2N0ZENkM5RjVERjQwMgotOjEwNTEzMDAwQTRFMDNFRDNENkIxQTlDNjgzRkMwNEUyNjU1MDZFQThCNAotOjEwNTE0MDAwMjkyMDRBM0VFNDdCRjhCMDZFRTJGMEIwMTRBQTA0Q0UwNwotOjEwNTE1MDAwRjdDMjFFODQzRjhCQjNEQzJGQjJGODMwMDFGRkFCQzkxRQotOjEwNTE2MDAwMTk0MEZBQjI3OEFCRDA1NzYwRTVGN0U5OTg5QzJBQTlDNAotOjEwNTE3MDAwQTRBNUQ5QzlFMDA0RTdGNjAwNEUzMkFGNEIyRDMzMTA5OQotOjEwNTE4MDAwQUVGNDdEN0M3RTkzM0Q3MDJGQzBDNTlBMzFEMkMwQTcwRQotOjEwNTE5MDAwRTRCNDEyNDNCRDBGREMzNEJBRDhGN0JGMEQzRjgyRjA0MAotOjEwNTFBMDAwMDJCRjhFODI3MUNDNzEwOEI3RjUzNTdFQUNGRjdGODA2RgotOjEwNTFCMDAwNUYzRDgzREZGNTQ0RDFFRDFGMzk2RDkyQTE5RTEwN0VENgotOjEwNTFDMDAwREIyOEZDRDJBMkZCMkExNjBFRDUzQzBGNDdEQjRGODkwOQotOjEwNTFEMDAwRjZFRjkzMzUwNDgzMkY4RkQ3QjQ2MEE5M0Q0RjQ5MjA1NAotOjEwNTFFMDAwRDdDRkQ4OTg1Q0FGMjY4MUI1NjZFMDUzMUVFNjg3MjFGRAotOjEwNTFGMDAwNjkyQUM5RDBGOTlGODg1N0M1NzMxRkU4RUI4N0Y2OENEOQotOjEwNTIwMDAwNUJEMTdGQTlFMUQ3RTQ5MUJBOERGQzRGMzkwRUVCNzlFMAotOjEwNTIxMDAwRjgxREIzMDhGQ0NBNTRGRDFDRjkyNDU1Qjc4RjY3OTREOAotOjEwNTIyMDAwREIxNDg0QjMwRkUzMDNCNTVDQkVBRUVGQzVBNzcxN0Y5QgotOjEwNTIzMDAwNkNBQTUxQjBEQ0NDRjdDOTE2QkU0RjFFMDNCQ0MzN0RBRgotOjEwNTI0MDAwMEU3MDJGMDVGRDVFRDM1NDgyRjJGMzA5NUE2N0Y2N0U4NQotOjEwNTI1MDAwOThFOEZERTFDOUJFRjZCMDk5RTIxRjc5OTI4MjI1RkE3RAotOjEwNTI2MDAwQUJDOTA5NEI2ODU4MzZDNDU1ODkxRkU4MjVGOUM0OEY2NgotOjEwNTI3MDAwNDJCODU2RDI4RUU3MjU5MkI1N0I1RDVFQ0Y0OTlFOEJCNAotOjEwNTI4MDAwRjExRjYyNjY3MjhBOTg1ODE5MzQ4MzFEMTUwQkRGNUExNAotOjEwNTI5MDAwREY2MTJCRDhFMTg5RTY1Mzc2NzI4OTAwREZCQjNDOTc0QQotOjEwNTJBMDAwQzVDQ0QyRUU2OTNGMDFGNzNDMzg5QjFDNjg1N0E2RkI4MgotOjEwNTJCMDAwQUFCMjMyOTFCRjVBOTA1RTlEQkU4MDUwQTlDMzYzN0E1NAotOjEwNTJDMDAwMDJGREVGMjFGQkI0MEY4MDFFM0Y4NDNDNDQ1QTNFREVCQQotOjEwNTJEMDAwOTI2QjAzMzg2RjMyQjc3QjgxMUY2RUUyRTdDNTk1Mzk1OQotOjEwNTJFMDAwMTQwQUJBRkJDMkRFRTQ3Q0QyNUQ2QUU0MDMxQTVGRjZGQwotOjEwNTJGMDAwNEMyODMxRDBCM0M2Nzc1MzI2MUJFOTVFRTNCQjJGRDhDOQotOjEwNTMwMDAwOTg1RkEzRDI1RTdFMDZFNjkzMUE2OUM1N0QxOUJCMEYyRQotOjEwNTMxMDAwNkFDREIyMkE1QzhCRjdDQjMwRkZEMzI5ODFDNUQ1RkI5MAotOjEwNTMyMDAwRjIwMzhDQkI1RkVDQ0FERTAxRTdBOUI1RkQxM0JCN0VCRgotOjEwNTMzMDAwQTk2MTFBN0VBNzU3MUYzNEM3Q0YwNzE4MjIzMEI5REVEQwotOjEwNTM0MDAwNDBFOThENjA1RTgyODI4ODY4QTY3NDQ2NzhERTAyREI2MgotOjEwNTM1MDAwNEZFM0IwRDRFODc4MUQ2MTNDNDRFRDEwRDkzQ0I5QkZBRgotOjEwNTM2MDAwNTYzQjdCQjNDRTVBRTIwNzNDQUU2RjY3N0I2OEEwOUQ4RAotOjEwNTM3MDAwQzc0OUQzNDQ5MDVENDRBMkY2QTQ5MzNFOTIwRThEQjdFNAotOjEwNTM4MDAwODI3RTI5OTk3RDQ3ODEwRkY2QjhDNDc2ODhFM0FFNzc4RgotOjEwNTM5MDAwQ0VCNjQyMUM0NDQ4MkU0NUZBRjlDQTU1OTFENTVGNUNGOQotOjEwNTNBMDAwMDdFRTUzMDNGQUYzMzg3REU0NzQyMTlFODc0NUJGQjBCRQotOjEwNTNCMDAwQzk1MzQyQzAyRURERTdFQ0I0NjMzRTkzNUQzNEM0OUYxNQotOjEwNTNDMDAwMkFFRDgxMENCQjRFNEYyRDgyQUY3M0JDQzNCMEZCMTJENAotOjEwNTNEMDAwOUNCNzJDRTBFQjIxMTkyQUM5RDNGMTg5REVGQjhGMTQ4RAotOjEwNTNFMDAwOTUxNEU4RjhDNUJBNjFCN0UwRkQ0QTdERjk0NDAyN0UzQwotOjEwNTNGMDAwQjhFQjdGODYxRkQ2NjY4NTEwQUZFNjU4RkU5M0U2QzdFQQotOjEwNTQwMDAwM0I5RDY4QTlDMkQ1MDgyNjMyNzRGRDBGOTI5MTRFMjdBNAotOjEwNTQxMDAwMDIzQzg4NzM0N0FGMUU3NDUzNEVERjc5QzZGMkJGQThCMwotOjEwNTQyMDAwNUM1M0QwMEY0NkU1REE1M0UzODA5RjI2OTQ2QjU1RjcyMwotOjEwNTQzMDAwMjExRDM3MEQ1MTgwOEUwRjM1M0ZGMjJDRDQzRjY5QjZCOAotOjEwNTQ0MDAwMjhDMEJGMTY0NTM2MTI4NUNFQjczMjMyMUVDQkM1MkRDOQotOjEwNTQ1MDAwM0ZDNkIyQTJBNThENkUyMjQyRDY2RUFFNkM5RTBCRkRFQgotOjEwNTQ2MDAwQjc5OUQwRkZEMzFEQkFFRTQyMzVBRDc3Mzc1OTUwN0Y4QgotOjEwNTQ3MDAwRUY2RTdEMjAwQkY0QkZFRTI2ODcwMkY3QUI3NEI3OEU3QwotOjEwNTQ4MDAwMzZCNjM3OTg3MDlGNzVCNzk4NDMyNjFFMEYzNjQxM0M0NQotOjEwNTQ5MDAwODI3MEZFMEU1RTIwREQ3QzQ5QTk4MjdBRkNDNTk4Nzg3OAotOjEwNTRBMDAwNEJDNTE2OEI1RjcwMjc4NjdGNDU0QjdDN0RCMjE2RkUwMQotOjEwNTRCMDAwQzlDRUEzRTUwMzdGMkQzQkY5QTMyQ0EwMEY4RENGM0NENAotOjEwNTRDMDAwOUM0MkY5MUVDMEVGQTQ4NUM0OEIwQkRDNjQ5RkIyQzQ2MAotOjEwNTREMDAwM0UwMDRBRkZGRDc2OENFRjVGREQzRDU4OUY4ODU0RUYxQwotOjEwNTRFMDAwNDYzQzA1RENCMzBDN0U1RkU2NTdGRDg0RUJFNUM0OUFEMQotOjEwNTRGMDAwQTBERENEREZGN0M0NkY1RkQxRjRBN0I3MUZBNUI1MEQ1MQotOjEwNTUwMDAwODU0NkJGQjYwOUZDRDUwMkQ4RTNCM0Y4RkQxOTZDM0U1OQotOjEwNTUxMDAwNzFFODlBRTlEMzREMTZFNDJCMEJCODNGNEFBM0YzMjg2MAotOjEwNTUyMDAwOUQwNURDRkM5QzlFODEwRTk3NDQxRTQzQkUyNzZDMkE4MQotOjEwNTUzMDAwN0E2QTNDODVERjE3OTRGRTgwM0U4NDREMTMwNzAyN0MxNwotOjEwNTU0MDAwRDczNkRFQjBFNTFFM0FGRTk3QkYzNUUxRjNDNTExMUIzNQotOjEwNTU1MDAwRjYzRkZCQThFRkE5N0JDMDVFRjgzNzMzRTY5MTdDNzk3NAotOjEwNTU2MDAwNzQwQUM2OTFDRjlBOEQ3RThDMUIxQzZDREYxRkU0RkJFNgotOjEwNTU3MDAwN0Y1MTY0OTM0MTNGNUZENDMwNUYwNjNGRThBMjQ4MzNEOAotOjEwNTU4MDAwM0U1RjA0NDEyNENDOEJCRkZCOTc2NTc5MTA1RjIyOTg2NgotOjEwNTU5MDAwQ0Y3MkQwN0VDNzk0NzUyODRGNEJEMDhGNTZCOUQ5MTI5MQotOjEwNTVBMDAwMzdBRkZGQTA1RDMxRjJBQkFFMjYxQzk3NTBGRDJDMkQxRQotOjEwNTVCMDAwOUQ4RkE3RTMzQjk1OTE1NERDMUZDNEEzMTJDOEVGNUVGNwotOjEwNTVDMDAwQzRGOTRGRUZGQzVBQ0QwNkZFNzNENjE2REY0RjczRDRFNQotOjEwNTVEMDAwQ0VFNEMyQTJDODBEQjhFRkZBQUVFRjQ2N0NCRTQ4RkJERgotOjEwNTVFMDAwNkUxN0RCQTdEMUY1M0MzNTNFREU3QUEyRUI5ODgwRkQ0NQotOjEwNTVGMDAwQ0YyNkM3RkZGRTlGRjlGN0JCNkIxNjEzM0ZFNTVGMTU3QwotOjEwNTYwMDAwMTZEQUNGMDlERjdGQTA3RTFDRDhGOUFEQzkyOTgyNkVEQQotOjEwNTYxMDAwNUQ5NTJEQ0I4ODVGQjdBRUNBRDY3OUIyRkVCRUM5MjhEQwotOjEwNTYyMDAwMUVFRUZGNjU5OTE0QzVDMzlGMUI5NzRGNTk1NzA4RkE4MwotOjEwNTYzMDAwNDJGOTdGQzIzRUFBRDgzNEIxMzg4MDc2RkU0Njg0RjM2MAotOjEwNTY0MDAwMjc2NjVGMjZGMEUzMzMyRDBGQjhFM0U1MEZGRkQ5QUVGMQotOjEwNTY1MDAwMThGQzFDOTUyRDFDM0Y1NEVGMkVENUUxNDdDMzRCRUM5NQotOjEwNTY2MDAwRkJEREJGQUZGQ0VBNTFFMDUzREI1QzA2QkUxMjVCRjYyQwotOjEwNTY3MDAwQzE1Qjc2N0NCOEQ5MUMxQURDMEE0ODAwRTFBNkJDNzI3MgotOjEwNTY4MDAwMDJFODdBQjNDMzA3NzQ5RDE4N0VENzkwNDA3RkYwNEIzMQotOjEwNTY5MDAwQTAzRjUzM0Q0Qjc0OEM4NkVGMTI2NjVGQjYzMDNBQjgyQwotOjEwNTZBMDAwMTJEQ0EyREZFNTc0NTAxNjdGM0Q2M0Y5N0VFQkFFQTlGNAotOjEwNTZCMDAwMjYyQUREQjBBN0U1MkJEMUMxMjM0NEI1RjZCMzhFNUUxMwotOjEwNTZDMDAwM0E3OEMyNDAwNzYzMUQ5QjkxMEUzRTAzRkQyN0JGMkYxMgotOjEwNTZEMDAwRkU0RkNCQUFGQjdBRDA3NzFBNEQxOEY3M0E2RDU3RDMwNQotOjEwNTZFMDAwQkZDRkVBQTM4MDNGOUY3NjA3Njc1RTVGMUFBRDJGRDlEMQotOjEwNTZGMDAwMzVDQ0FEQkZBN0YxNEMwMzg1NDMxQ0Y4OEQ3NUM0RUNDOAotOjEwNTcwMDAwNkY4RDdFRjI1NDUyMzhFNkZGMURGRDdDOTJFMERDQ0JCQgotOjEwNTcxMDAwNERGNkIyMUIwMDlGMjQxOERGOUZBQzk1QkRFN0FBOTNGRQotOjEwNTcyMDAwOUNCRDc2MkZDOEQxRDNDRTlDQUY0MkI0QjVDMTFFRjg3NAotOjEwNTczMDAwOUU4M0I2RDcyNTNGODQ3MkZFRjQ2OTAxRTVGMERBREY3NwotOjEwNTc0MDAwM0Y5QzBGN0NCODhGRkU1QjEzNzlGQUQzNjFFOEI3RkNGRQotOjEwNTc1MDAwOTc0RkNEQTg0RkUxQjg4NEVBM0YyMDA3MzA2NzFDRUQ5MgotOjEwNTc2MDAwODAyMUU4Njc0OTE0Q0Y1RDAxOTdGOThFOEVDNjc1QjUyMwotOjEwNTc3MDAwRjhFREZBOUFDRTFGQzNGOEM0QUExMjhGRkVGQzAwNjE5RQotOjEwNTc4MDAwRkFEOEZGODE3OUU4RkNGM0IyMzlFMEYxODFCRDJCOTBDMgotOjEwNTc5MDAwNzJBMDdCQjNDNEYyRDdDRERFQjQ1MUFBMEVDRUNCMUMxRgotOjEwNTdBMDAwNEM5RkI0MUQzOUQyOTA0RERGQjcyREZDNzcwRkY4RjkxRgotOjEwNTdCMDAwMkNGNDNCNTA1QTMzQTQ4QjdBN0ZCOTk2Rjc0NUYyNzQ5OAotOjEwNTdDMDAwQ0Y3MzIwQkY4MkQ2MEQ3RTA3M0FERjdFRUNFNkQ3MDQ4QQotOjEwNTdEMDAwRURCRTRGMTVFRjJCOUVBQjVENTgwMEEwQTM3NEYzOTE2NwotOjEwNTdFMDAwOTZCRjIyRDVCMUY2NjRBREI5OEVCNTczM0ZFQUFBMEE2OQotOjEwNTdGMDAwRTYyNzdENkI1RTEyQzI0RjVCRDdEQ0Q3MzdFMDdENjk1MQotOjEwNTgwMDAwNzM1RjFGMzQxRkZDNjk3MzlERjk3RjA0NzhCRTA2ODk5RQotOjEwNTgxMDAwMzU0MEY3Qzk0QzNFQzdEMkM1NjZDRTdGN0VEMDI2QUE5QQotOjEwNTgyMDAwNjYzQURFMTE3M0NGNjEwN0VDOEIxRjBBNjg1NzdGRkY2MgotOjEwNTgzMDAwODMyMzY2MjBGOUZGMzg3NkRBMENGNzIzREMwNzg5NDVFNQotOjEwNTg0MDAwNzQzREYzODgyMjMzMjUzQTg0RUZDRjI3RUQyRTU2NkYyRgotOjEwNTg1MDAwMUYwMEY3OTk0NkM3QTMyNjMzOEM3NzNGOEIzRjdGRkYwNgotOjEwNTg2MDAwODM2MzUzNDA4Q0QyRjFENjQzNzlERjZGODkwQ0UzQ0Y0OQotOjEwNTg3MDAwRUI1MEVBRDlCMTI3M0VERUVCNzQzQzMxM0E1RTJGRkNBNwotOjEwNTg4MDAwMjQyQkMyMjMwQTFGMkJDMkVCQTNERTczMjQyQUVBMTdBMAotOjEwNTg5MDAwM0FGOEEyQkVBMkMxQjcxNkUwNDZFMTM3Mzc2OUNFNzQyNgotOjEwNThBMDAwNTI5Qzc4QkZDQzc1MEVGRjIzMjk4RUNFMjcxNkJFNUY4MwotOjEwNThCMDAwNDJEMzIwMzg1RkU2N0YwOUY2Q0QzRjNCRkM3QkExNUNGRAotOjEwNThDMDAwNkVFREM5OTQ3MkYwQkM1NzNCRUNDQjk1QTY0MDU2M0FBRQotOjEwNThEMDAwQTVBQkYzNDMwM0Y5MDNFMDUwNTA2N0ZDMzg2RkVDM0U4RgotOjEwNThFMDAwM0QwOUZCRTU1QTI4RTlCRTgwNzlGMDczMjlGN0YyNzU4NgotOjEwNThGMDAwQkVGNUEzMzMyRUQ4OTdGNTA3OEU2NzQyQjlDMkQ0QjU0QgotOjEwNTkwMDAwRjk2RUQ4NkZCRjMxQTFGRTc5QjEyM0JGREZCQ0JBOTM2NgotOjEwNTkxMDAwRENFRjcyRDRBMUREQTNDMUQ2NzkxRkQ3RTdFRUVCNzAxRgotOjEwNTkyMDAwODRENjUyRDJCOEFGREFENDZCNUYwMTVEREY1N0NERjJDNwotOjEwNTkzMDAwNEY4OEQ0NTk3Qzg3NDE5RkFDRTNFN0Q0RkE4RTAzRjZCNQotOjEwNTk0MDAwNDJFQzM4REEzQTBGNjcwRUJFMDZFQ0NCNjc0N0NCNjhGRAotOjEwNTk1MDAwNDcxQ0ZBRURDNThGMkE2OUREM0VENDhBNzZDMkU2NjQxQgotOjEwNTk2MDAwNEVCRjY1Q0M2RTdEMzZEOUVGMjgwMkZGNTc2MzhBNEY1NAotOjEwNTk3MDAwQTVFQjZDRkMyNTY5MTcyOTlDMEU4Rjc4MjgzNEE5MTQ5NwotOjEwNTk4MDAwRUU3OTE2RDE3N0I2MjVGMjVDNzAxMkJDNTdDOEVFOTk0NQotOjEwNTk5MDAwRjE3MEJENzQ0QkU3RTkxNkEwQzczMzI3MkMxODc3RjhEMAotOjEwNTlBMDAwQzQ2NUMyRjkzNjlBQ0IzMzQxOEZGRjYzOUIxQ0Y3RkU2NwotOjEwNTlCMDAwQjI4RjVDMTJDRUI3NERFOEMyM0NCREY5MjQ2ODA1N0VCQgotOjEwNTlDMDAwRDFEMTM5N0IyMENDQzdFRDIzMUUyMEZGMzNBRDI2OTFFQQotOjEwNTlEMDAwREQ2RkE2Rjk1QkMyMTJGM0Y3QUIxMkFCRkI3OUU5QjE0RAotOjEwNTlFMDAwRTlFRjE3REIzODc1MzJFNjc5MkM2ODdBMTdDRkIxQjk1MQotOjEwNTlGMDAwNEJFM0RGRUI2MzczQjJGOUJBM0E1M0E2MDE3QzVEOTNENAotOjEwNUEwMDAwNDVDQ0MzNzZGOTdBMDQ3ODJGQUI3MzkyOENFRjA3ODU3NwotOjEwNUExMDAwN0VERkNGNUFFMzk5MDY3MDg1Rjc4MUNGNjc1REU1RkI5RQotOjEwNUEyMDAwODI5M0U1NjkzREM2RURFQzM2QjNBRjdFMzIxREE3NkRCRQotOjEwNUEzMDAwNzNCMjAwRjhEMEZBMEQ3NjMyQkU3MjY2QjJFNjQ3NjJGMwotOjEwNUE0MDAwNzlDMjk5NzkxRTVCMUU5RDc3QTYxRjM3Mzc3MTk1MDYxRgotOjEwNUE1MDAwRjExQ0QzMEVFOEM3RkNBQzA4ODdCNjExQUY4NDIxOEVDOQotOjEwNUE2MDAwREQwOEZFMTVDMEIzOTlEMTUzRTM2NjAxRkRBQTE0N0U4QgotOjEwNUE3MDAwODM0MTRFRkNGMTA5Q0JBREIwOEVBQzA2QzEwM0I2M0IwMQotOjEwNUE4MDAwMkRFM0NFN0JCNkNCQ0FFOEJDRTkyOUI0MEJDMTREMEJFNAotOjEwNUE5MDAwRTM2NkI2QkU4RkYzNzIyNTU4RUYxQTRFMUY3RkJDMDIyNQotOjEwNUFBMDAwN0Q5Qzc3MzAzRjU0NjY3NTI3QkZERjJFOENGN0Q4MDU3NQotOjEwNUFCMDAwMDE0RTUwRjc5N0YyRkJFQUZDOEEzRTNGMjZCQTdGRDZBQQotOjEwNUFDMDAwNzIzQTI0N0U4OEIzNTU4QzkzNDNFMDQ3MTAxQkRBRjA3QQotOjEwNUFEMDAwOUVENEY5NDEwQkY5MUU1RDVGOTNDMEVFMUQ1NTQ3OEJCNwotOjEwNUFFMDAwRkNGRTI0RkY0OTgwNTNGMzYzMDMzMTBGNkY4M0U4Q0YzQgotOjEwNUFGMDAwMDQzOUFDRkVCMzhDNzFCQUMzRkU4QkRCRTAzRUY4RUQyQgotOjEwNUIwMDAwRTM2NERDMTc4N0ZERUM1Q0UxQjM2QjcyREEyMDRFRTlFRAotOjEwNUIxMDAwQUE5RUQ0MzI5RjhFMTdGMjYwNDYyQ0E5MkQyNUVGRTQ2MQotOjEwNUIyMDAwNDM5QzcyOERFODExNjhGRjYwQjk5NkI3RURDMTdDRjJCNQotOjEwNUIzMDAwNTFBNjJGQTYxNTQwMUM2RjkwODgzRUE1MzMwMkJCQTcyNwotOjEwNUI0MDAwNjFGRDlBNDkxRUMwRUI3QTRGOUFBMEI3NUY2NjcxM0EyMQotOjEwNUI1MDAwMzg5MTUyM0VDQjQ5RTFFMzdERjQ3MTBGOUM4NURCMTIxNQotOjEwNUI2MDAwNDlCRDA2RkM4ODZBODNBQ0VDNjJGMTQyQkNERjIxOTUzQQotOjEwNUI3MDAwRTMyNUI1NTMwQzJGNzI2M0REQjk5ODlBQ0E1QjI2MzBDMgotOjEwNUI4MDAwN0ZFOThGQTcwNzk4OUYxMzYyQTM2M0QwQ0ZDOUZGQkM5QgotOjEwNUI5MDAwODhENzM0NUU2QjFDNjlDN0NBRDY3NThCQjAzRjhDOTNBRgotOjEwNUJBMDAwNEVDNzQ5MkQxNUMzNjMyMDdGMkREOUJGMURGRDc2NTNFOAotOjEwNUJCMDAwQUMwODI3MjI3NUI1MDA5QzQyNTMwNjYzM0VGOEUzRTMyOAotOjEwNUJDMDAwODdCRjBCRjlFM0E5NDc3QjY2ODMxQzBEMERCNUZGNDcyMwotOjEwNUJEMDAwMUJGMEE5RjVCMjAyRkIzQzc1NERGNzNERjAzQ0Q5RjczRgotOjEwNUJFMDAwRTQwMzUwQTZENjdERjgwOEYwRTlFNEFFQkZENEUwRjNCNAotOjEwNUJGMDAwQTlCMkMxQkY5OEZBRjFEOUJGNDE3QjZBQjk2Q0YwNTMyMQotOjEwNUMwMDAwN0U5NTUyRkVBMDkzQzI2NzdCNjEzMDU4QTFCMEU3RkUzQgotOjEwNUMxMDAwRjRFODNBRjZBREVEOUMwQUY3RDg5Rjk5MjVCMkYzMzIzNQotOjEwNUMyMDAwODRGMUMzQUQ1QjNEREEzOUU1NTI5MDBCMUFEQzM2ODg1RQotOjEwNUMzMDAwNEE3QjE4RDYzNUQzOEFGNDkxNDczQTkxNUYwRDgyNjgzMgotOjEwNUM0MDAwNzY2RTE0MkZBOTFGNkZCQzFGRjIzNTYyRTdEM0UwMTRFNAotOjEwNUM1MDAwN0FDRjUxQzNCRDgwNzg2RTMxMDdDRTFGNEVCNjAzNUQzQgotOjEwNUM2MDAwRUYyRkU5RjQ4MjNFQkYzOUMxRkQ5RDQ3NURFQzdEOEI4RQotOjEwNUM3MDAwQzhGQ0FDQjFFRDQ3NzgzQkIwQzQ5NjEyMkNGRDQ1NTA0MgotOjEwNUM4MDAwM0E4OTlBMDQ2NTg2RDUwRkY5Q0ZGQjQ1RTUzRjkxQ0U1OQotOjEwNUM5MDAwMUYzNzI5ODAxRkU4NkZBNkY4M0JGNENFRTdFODVGM0M4QQotOjEwNUNBMDAwMTQ3QzFGQ0JFNzVDMDVEQTc4RTE3NEZBN0U3M0U5Njk0RQotOjEwNUNCMDAwOENEMzM0N0IxODhENTQzNjMwN0U1MUU5RURCMjQyREMwMgotOjEwNUNDMDAwQTRCMjkwNzg3NjcwN0E1MzM1Mzg4M0JGOENDQkFCOEE4OAotOjEwNUNEMDAwM0IxODVDRDMwQTA5QzY3REMxMTcwNEY3NEJBNTQzM0ZBNwotOjEwNUNFMDAwMEFCRkI0ODZCNUY3MjMxRTQ5QTc5QTRCRkIzNUMzQjg0NAotOjEwNUNGMDAwODA5RjNBOTFCMDcxQkJBQ0I4N0Y4MzI2OEM3QkQyRkQ3QwotOjEwNUQwMDAwRkUzQkYwNkI1NTM0MERDNEI4M0YxQzBGODZGMTUyRjhDMgotOjEwNUQxMDAwNzc1M0Y4Nzg2RDc0MUNGMDFGOUU2OTMwRTFCOTAwNDgyNAotOjEwNUQyMDAwQkY4MUJBQjI4NkQyMzJEMjY3NEY1OTAxMUQ1NzI5RjVDOQotOjEwNUQzMDAwNzgxQTM1M0FEMEY4MThERDFBMEJBOEJDMDBCODJENTBFNwotOjEwNUQ0MDAwRDVGQjgxRkU0RTVCM0RFRkMwM0MxQzVCMkQwQUFDN0Y1QQotOjEwNUQ1MDAwQzFENjU3MUYwNkZEQzVFMUVENkEwMEZFNTAzOThFQ0Q1NAotOjEwNUQ2MDAwMzdBNTg5M0U0NzNENDdGOTFERjRBRjZDQjIyOEVDN0I1RgotOjEwNUQ3MDAwMUM3RUE1OUNDRTM4MUMxNkYyNzkyRjZDNjVGM0I2MEZFRAotOjEwNUQ4MDAwMEQwNTgxM0UyQkQ3NTBCODQyNUI4MEQxM0RCODQ0QkY1MgotOjEwNUQ5MDAwMTE3MTVGMUQ4NUY1QkJENDc0MUM3N0MwOUM5ODdEMTE3MwotOjEwNURBMDAwNDM3RkRBQkEyQUY4QkEyQUQ2QjA3NTExQkU5RkU4QjQ5MgotOjEwNURCMDAwQzIzMDZFNDUyOTVCRTcwMkMyREUxN0UxMzkxRDdGMjE0MwotOjEwNURDMDAwNUY0Rjg1RkEwQTk2MEIxQjJDODZGMUI3MTdFQ0VDODQxMwotOjEwNUREMDAwRjk2NDE3Q0E4QTgwNzA2NkY3MUI2NkYyNzU2NUQ2QjFEQQotOjEwNURFMDAwRUY2NTE2QkU4MkYwMjJENUJBRjlBMjVGNTU1N0E3RkIyMAotOjEwNURGMDAwRUFDQ0FGRTlDNjgyQzNGRjcwRDA4MDhFN0JGQTQ3RUM1NQotOjEwNUUwMDAwOUU4MUJDQURDNjc1OUREOTk4RkYxQzlDRjdGRUU0MDkyOAotOjEwNUUxMDAwMTlFM0RFRkI0NURGQzkyQ0I0NDc2NTg1RjExRkRGRkJDNQotOjEwNUUyMDAwMzM4MDRGMkZBQ0YzMDExRkRGNTdDNkUwN0ZFNjM2MTJGOQotOjEwNUUzMDAwMDI3QTE4NzZCNDNDMDVFMDNERUM2ODgwOTc1NTE4NEYxRgotOjEwNUU0MDAwQTcwMDExN0FGOTFFOUQxRjM1OTkxQTA0RTA5NzkxREM3RAotOjEwNUU1MDAwOTcxNjAzMUYxOEM3Q0VGNzBDRDVDRjlCQ0UyRkI1MjFCMQotOjEwNUU2MDAwN0QxMkU0NDNBNThENEI5OTI0RTMxNURFMzFFRDQ3OUY2OAotOjEwNUU3MDAwOUUwREY3OEZBNjFENzlGQTAxRjhDRTIwQTI1QjBGRDBGOAotOjEwNUU4MDAwODMzQjk3OUQ2NzM5NDI1QkExNUY3NUY3QTM4MDhGMjY5RgotOjEwNUU5MDAwN0U5RkZDMzA5ODU5MEE5NjQ3QTA0Q0E1RkI3QjUzMEE3RAotOjEwNUVBMDAwQ0M1MzIyOTM0QkEyRkM2MEQ3MTM2MzQ2MDE1RkMxOTQ4RAotOjEwNUVCMDAwQTcxMjJDQzNBNEE0MkZERkQwRjUxRkMxRkJBQjQyOUNCQgotOjEwNUVDMDAwN0UxNkI3NjJCMENGNzczRDcxQ0IwOEIwRTM5QjQxNEZGMAotOjEwNUVEMDAwNEM4MjdCMzgzRDVGNDA5RThFRUExMzExRUVDREU2QjBEQQotOjEwNUVFMDAwQjUzMDBERUVBNTE2MDlFODJGNUIwQTNFMTQ2MURGMzVDQgotOjEwNUVGMDAwNzcxMDFGRDA0NzZBRjlERjJEN0EzQzk2QjlEOEVGRURCRAotOjEwNUYwMDAwNDgzMkQ5MDRGQkZGRjA4OEVFQTk4MEE3RDAyMTExQUY1OQotOjEwNUYxMDAwMTg5OEY0MkJFN0QzMEVEMDg3M0U2Mjc5MzA2REJGQUU3MAotOjEwNUYyMDAwNDJGOUZENTBBNjFDRjczRTVENzIwNTNEMzFCNjdGQ0FCMQotOjEwNUYzMDAwQjBEOUU4Q0ZDQkRBRkExOERFRTc1OTM5NTVGMjdEOEZDMAotOjEwNUY0MDAwRjY0RURCNUE1NjA2N0E4QzUyNEVBOTZCMjA5RDc3RUJBMwotOjEwNUY1MDAwQThCNUY4M0IxMDMzNThCQzRDOTlDQTlFMkI5MzU5QjkzRAotOjEwNUY2MDAwQTlFNkU4OEZDMTZFMEZFRTkxNkM3OTc0QkUyMzM3QjI0QgotOjEwNUY3MDAwN0JDNDM2MTU1RUI0MDZBODVFNUE1QUY2QjJGNTM2RkFGOAotOjEwNUY4MDAwRkNEMzUyMkEwNUU5RjM0RjI3NUNCNDQxN0NFN0Q5RDIxMAotOjEwNUY5MDAwNDlBOTAwQ0Y4RTA2QTM1RTQ3RTA3MjJCNkEwRjE1NTkwMAotOjEwNUZBMDAwODI3RTE3OUQ1N0QzMDcwNEUxNjlCMjg0NUIyQTY4RERCRQotOjEwNUZCMDAwRjRBQTEzMzQ5QzNFNzZDRUM2QTZCNjM5NDBBNzBCMEE4NwotOjEwNUZDMDAwNjQ3NERCQzdBRUI3OTNDQjhCRjlENTNENTNFMURFRkNGMAotOjEwNUZEMDAwNkM5NTMwRkY3RUYwMjk2NENBMEIzOUNCQzg1NjNCOTFEMwotOjEwNUZFMDAwRTlCOEI2MzJGQjI0MjhGOURGMDZCRTFDMkMwQ0M4RjAzOQotOjEwNUZGMDAwOEFDNkNGOUE4NjU1RUMwNjdFNzZEQ0M1RUYwQkE5NUE4OQotOjEwNjAwMDAwOENFN0NBNzBGRjlCNDAxRkVBMjk4QjY3MzcxNTNCRUQ3MQotOjEwNjAxMDAwNEM5RjZEQkRGRDM4RjhBOTE3NTQzMzdEM0ZBQkY1MEI5MAotOjEwNjAyMDAwMDFGMTQxRjVCRTQxNzRGQ0FDNTJCQzVBOTAyQzU4MTM5RQotOjEwNjAzMDAwQjQxNjAxN0VGMjQ0QTIyODMwOUY3NjAyNzY0MjkwQ0FCRQotOjEwNjA0MDAwMUYzRDFDQjQ3MUZGQkJFRjJGNzM1OTcwMURDNUEwM0JFMgotOjEwNjA1MDAwOEY4RUFFQzdDOUQ3OTNFOUEzRUI4OTIzQTcwQkUxQkIwQQotOjEwNjA2MDAwOTBFRkYzQ0MxNzg3QzYwM0ZDRDczMDEzMjkyQjc4NEE1RgotOjEwNjA3MDAwQjBFQUU2OTFBNTVFREQzQzhBRjgzQUVBNUNFQ0JDODVDNAotOjEwNjA4MDAwQUJCNDRCQzBGQjZCNjJGODNCQThGM0IwNkZCNzNCMkVEMQotOjEwNjA5MDAwOEM2MkY2QkQ5MTlGRjZBOTczQkE4QTdEOUUxOUMzQUYzMwotOjEwNjBBMDAwOEEyQ0VERDMxMUJGRkJEOEJERDU4NEQwN0Q2QkM1RUI1OQotOjEwNjBCMDAwMUIxNTc2Q0Y2NzQ4QkI1RkJBMEFGQThENzQzOTNENDAyRAotOjEwNjBDMDAwMDc0RDIzM0UyQzAxRjg2Q0U2RkFDMkMyNDI4MkY2RUE4MgotOjEwNjBEMDAwQzI4QzRFRDQxN0U2RDc3MTdENDFGMkQ1MDM5Mzc1QjRDNwotOjEwNjBFMDAwMjYxM0VEN0UxOEQwMUY1MDU1MDIxM0JBOEVFQjBCOUE3MwotOjEwNjBGMDAwRkNFNzcyQkJEMkRCRDk4MDcyQjU4RTlERjdFQkQ1MzM0RQotOjEwNjEwMDAwNTQyNjU3QjNCQzRDQUU1NzM2RDBFRjI4OUM5OEM3RThGRQotOjEwNjExMDAwRjUxMjI2Qzc5NUFENUM3RkUwNzIzODk1N0YzN0FEODE2QgotOjEwNjEyMDAwQzlBQjU0RDAyM0RDOTAwNkExQTI1Q0M2MTg1NjdBNTRBMQotOjEwNjEzMDAwNkYxOTUwQzhFNDY1NkFEMzdFOTQ2QjJGM0ExOTlGNEM0RgotOjEwNjE0MDAwREJDQUU0RTVEMDc3OEZBOTAwMjYyRjdEREM0MkY5RjQ4NQotOjEwNjE1MDAwMTNCQ0RERUJBMUZBNTk0QTU0M0ZEQjIwRjI3ODEzNjFGRQotOjEwNjE2MDAwRkEyMUU2RkNEMzc5NkVFNkZEQjVFNzNCRjlGQ0Y2MUZCNAotOjEwNjE3MDAwNDlCOTE1RjhFQkFFNjAwRTlFMkJEN0Y2MkQ3QTNGNjkyNAotOjEwNjE4MDAwM0Q5M0RGODc5MDU5Q0RFMkU0MkVERkEyRERGQUYzNjc3RAotOjEwNjE5MDAwMTUyRTc2Q0Y1MDg1OEJERDA3RUZBQTBFN0I2MTVDQkM5OAotOjEwNjFBMDAwNTcwMUY5Qjg4Q0ZFQzU4RDU0NUY0MkZGMTNCN0FGNEE1MwotOjEwNjFCMDAwOURGQzNFMTk0RTNGODlFNDg5QzY4NzVDQzRFRjJFQTQzRQotOjEwNjFDMDAwRjBGRDM0QjQxQkY5QjU0QUVEMjU1OERCQTdDMURBQzE5RgotOjEwNjFEMDAwNEI2MUJGMDc2Nzk1QzJGQzlCQzc3Rjg1RjkxRjU5MDlCMwotOjEwNjFFMDAwRUNDNThGMzQzQkYzNUJGMjc1RDdENDYzQ0MwRUVEMTQ2MgotOjEwNjFGMDAwRTM5RUVGNDk3NzMzRkY0M0JCNDQxQzAwNEY1QjkwRERDOAotOjEwNjIwMDAwMUI2NzFCMjdDN0VENkY3MzMzQkJFQjUzQkUxRjlCQzdDOQotOjEwNjIxMDAwRUZDNkYzOTkwOUU1QjM0NDU0NTMxQzc5QUFDOURCMjZBOAotOjEwNjIyMDAwQzBGM0Y1NzREREFFNUZENUUzRUYwODQ5QTE3MjEzRjI1OAotOjEwNjIzMDAwNTc4Mjc2Njc5MDc0QTExREE5MTZDOEU4Mzc2QzMyMDc5QgotOjEwNjI0MDAwQUQ4MDhGMkRBNTFDQUYxRTZCMUI5Q0NCRkNENjc4QTFGRgotOjEwNjI1MDAwRjAwMDNDNkZGNDhCMjEyMTFCRjAxQ0YyMTQzMUJGMEVCNwotOjEwNjI2MDAwREVEQjc5ODZEQUVGRkE3ODQ1QUU1QkU0NzA1MkYwODdEMAotOjEwNjI3MDAwRjZCMjFBMTg3RDM1OEY5NzcxMUU4REEzRDJEQjRDRDlEQgotOjEwNjI4MDAwN0FGRTJCNzBGRUM5RThBQjcxRkNEQjQ4NUY1NzNCQkY2MQotOjEwNjI5MDAwNDVENTJGM0RGM0E5MkU5RUQ4QkRFREY5MUM4MDczRjQ5MgotOjEwNjJBMDAwRkUwQjdGQkZFNzI5MTY1NUZGNjVFQkNFMzg3MTgyREUwNgotOjEwNjJCMDAwNzZCMEEzOUM2MDA3ODZCRTZGODg2QkJBRDlCQzZGNzQzQQotOjEwNjJDMDAwMUJGRDc3QzA1RkNENjg1Qzg0MDY4MzdGNjlERkM0OTA2NwotOjEwNjJEMDAwMUJERTIzNkI1OERDNzYwOThGREI3RUJFRjM3NjNDQUY4QQotOjEwNjJFMDAwNUU0NEM5Q0ExQzA3RUY2NzZCOENFN0Q1Q0ZFRTdBN0U5OAotOjEwNjJGMDAwMzBGMzZCODQwQ0YxQjMyNUJCN0YzRUQyMTAxRkY2MTMzNQotOjEwNjMwMDAwMjU2RDBDQkJCNzE4RTVGNERCM0VENTYyOEFERTNGMjA3NQotOjEwNjMxMDAwQzNFRjBERTQ0NkVGRDFCMjkzNzYyQzlEQjA3RjY5RTlDRgotOjEwNjMyMDAwMjYzRDU4N0E0MDFDRTU4MjlERTRDMzMyOEQ5NDYzOTlFMgotOjEwNjMzMDAwNEVBQUIwRjQ5MjIwOTY4MzQ5M0I5NjE5NjBFN0U2ODIxNAotOjEwNjM0MDAwNUNFOEMxNTIyMTFFOTFFOEY4N0UwRUYxNjEzRDhGOTQwOAotOjEwNjM1MDAwNjMyOTAxREU1MkEzNzEwOTY5OEYxNUYzMzcyMDdFMDE4RAotOjEwNjM2MDAwRkIzRUQxQjlCMzkxRUU4QTY1NkU4NDc3RDVCNUU1OThEOQotOjEwNjM3MDAwNEZDRUUyMTUzM0RDRkVFNTZFOTQyRjYxRTRERkYzMzk5NgotOjEwNjM4MDAwMkIzRkZBOTM5MUVENzBGRTY4RjU2Njc2RUU0NUUzRUZFQwotOjEwNjM5MDAwNjhERkQwRUZCQzk0QzJFNDgxRkFCODgwN0M2QzlENjM2NgotOjEwNjNBMDAwRTY4RDA4Q0YyNkYzMzk3REJDODE1OEFENzlGMEZCMUUxMAotOjEwNjNCMDAwREFCOEYzQjk5RjYxM0U5NzgzRTBFRTY2RTcwNzdENzgzMAotOjEwNjNDMDAwM0U2OTNFRjgxQjc0RURBNEI3OURERDRCQTM4RDIzM0FDNwotOjEwNjNEMDAwMjYwQ0VGMkZERUE3N0IxRkYzQTMyQjYyRUQ4MDJCQzlDQQotOjEwNjNFMDAwRUY5OEZBODJEOEY3QkZBNjEzNEE4RkZBRTM1RUJBNTE0NAotOjEwNjNGMDAwQzk0NDdBRTVGMjlCMTI5NDgyRUYzNTU4NEVBMTNEMTZCRQotOjEwNjQwMDAwOUNFMkQ3QzNFNTM5Q0VFNzM0QjlCMjIwMjZERjIzQjYwNAotOjEwNjQxMDAwNUMyMEYxRkQxMTMzMEU5NTgwQzk3MEVGMUFERTI5QTFDMQotOjEwNjQyMDAwREJERkRBN0RBNERBRUY2NDJERjEwN0U0NDFFQzM1MkZGMAotOjEwNjQzMDAwRTBEMUMzRTcxRDI0QUQ5MzA2RDFGMjMzQThFQkZDRkJGQQotOjEwNjQ0MDAwQkY0QjBBRUM3N0VCRjY4QkM3Q0ZFRTU5MjAzQzJFQjE1MQotOjEwNjQ1MDAwOUNFRkM3MjlBNkE2MzJFMDczNjcwMkM0MDc3NkM0MTI3MAotOjEwNjQ2MDAwNTJFNUJFMDFGQ0Y5QzdEOEZEQzQ0M0U4QkNFNTEyQjA1MwotOjEwNjQ3MDAwRTM4ODJBQTY2MDVEODVERjZCMzk1RkMzQ0UwOTc1RjNCQgotOjEwNjQ4MDAwRkI2ODc2RjM3Qjg1RkZDNEVGMTEyRTZBNzk3ODI2RDBGRQotOjEwNjQ5MDAwQzFFN0ZDMUU5QTgyOEU4REU1RTBGNzI5NkE3N0NDMDM2RQotOjEwNjRBMDAwQjk1RkQ0M0VCMTEyREE4QkY2NThEOEVGRjA3MDNFQTE0NgotOjEwNjRCMDAwQ0QwQjhFQjlEQkU5NzczMkU4RjdBQzI5QzA0RjA4Q0FCQgotOjEwNjRDMDAwRERGMzRERjYxMEZDN0VDRkY5NzYxM0JCNDdCNTUwQzQxMwotOjEwNjREMDAwNzNGNzcwRURBMDg5Q0YyRjI5MDVCRUY3NUZGNzgyM0VENQotOjEwNjRFMDAwRjIzOUU3MjdEREVFNjQ4NjJGNDkxNUQ0MzQ0ODRCMjE3NQotOjEwNjRGMDAwM0VEMDZCMUU3M0FDQzQ3MzkwOEI5Q0ExREQ0RkE3NDE0MwotOjEwNjUwMDAwN0VCOEQ1Qjc4RTdFRkZEMEZFNTczM0UxRjk1MzhFOTUxNgotOjEwNjUxMDAwNThGRTY5REJGMTRDRTA1QkU3MEYxQzk3RTNEMUVEMEExNQotOjEwNjUyMDAwMjkyQzgzN0Y2QTU5ODcyMDQyRkNBNEFDN0Q5RTBDRjEwNAotOjEwNjUzMDAwOTE0NTdCMEZBMTVGNzk4NTI3ODBFRENCNUJGNjYzN0Q2RAotOjEwNjU0MDAwRjJERTc3MzE3RTMyMzQ0OTQxN0M5RjFGMTQ0MDNGNkYyOQotOjEwNjU1MDAwNUU4QjI1MEMzRjU5QjIyRjI3QjgzNDZFREMzRTg5RjE5MwotOjEwNjU2MDAwRERDNzFDNkZFMEY4NEYzOURFNzgxQkUxQjJDRDgyRTc2MgotOjEwNjU3MDAwM0YwRTZERkIxNThFN0JFRUMwQUI3Q0JFMDRGMzA1Q0ZFQQotOjEwNjU4MDAwREJEQTRGRkUxM0M4QUZGREZDM0NBNkI1RDNBREY3MDc3MQotOjEwNjU5MDAwRkY5REYzNzVBRDdFNUVGQjFEOUQ4QzJCRjREMzdFOEYyRQotOjEwNjVBMDAwQzdEOUU5NjY3Q0E5RDMwRDcxQjM0NUVEMEMwRTdGMzJENgotOjEwNjVCMDAwODc2NUQwMjM5N0I1MEIwQUZDM0U1RUQ5REUzNjNDMEZDQgotOjEwNjVDMDAwQjhBQ0MzOEFFNzI1OTYwMTNDMDA2RTE0NUUwODk3OTYyNgotOjEwNjVEMDAwNDMzOEZGMEM4MENCNjg1OEM3RkI5ODhGOUZENzQxRTFBOQotOjEwNjVFMDAwNTIxQzVERjczMjY3MDBGN0FCQjY1RTBBMDdCNkVFN0Q2OAotOjEwNjVGMDAwNTdDMjUzQzA4OEE3OTY3NzY1RjBDQjJDRUYxMDEwN0U1QQotOjEwNjYwMDAwQ0JGN0IyNzkyQ0VBNjBGMzlBQkM3NzFFRTJGRkRDMDE4QgotOjEwNjYxMDAwQTI4MEJGQTU3QkZGRjFDRjYxM0RFNzBGNThGMUZFNUU4MQotOjEwNjYyMDAwNkQ1RTk0NEU4OUJCMDRGNjBGQTM1M0QyQzFGOEFBQTY5RgotOjEwNjYzMDAwNzdBRjA4QTVFM0VGMENGNEI2RUY2NUJGMzMwQTIwQjNEQwotOjEwNjY0MDAwNTE3QTJERUE5ODg1NzFDMTYyMjA1RUEwNTM0RkZCNDhCNAotOjEwNjY1MDAwRjY3QjgxQzE0QzgwRUJCRTg5RTE0Qzk4RjczOUVENzczMAotOjEwNjY2MDAwNENBNTYwMjZFMDY1QTQzQjUwOUNBNERCRTc2NzRGQkRDQQotOjEwNjY3MDAwOEE3MkIxNDBBQ0ZBQzNBM0IwOEY1RjY2QkZCQkYxRjBDMgotOjEwNjY4MDAwQzc4Rjg5N0E3ODRDODQxRjRBMUUwRDcwRkI5RDFCRTFEMQotOjEwNjY5MDAwRDY3QjdGNEI5MEU1NEI5MTAwRUVDNzQ1N0MzRjlFNkZDQwotOjEwNjZBMDAwQTM3NjI3NURGRkQ5OTY5RjYxRkJGOTQxQzZGQ0FBM0ZGRgotOjEwNjZCMDAwQjVCQzk1MDI3MEFCRTBFNzMxNDhFODc2RTQ0NzE0MkVBQwotOjEwNjZDMDAwMERENjM4NzJCRUY3NUM1Qjg4OUQ1N0JDMjAxMEJDMkY3RQotOjEwNjZEMDAwNTM3RDQ2ODM1Qjk1M0NEQjEwRTc2M0ZDMzBBMzM1RkJDMQotOjEwNjZFMDAwMDhEQTE5QTFGOEU3MUM2M0Y1QTREOEZCNTExM0U1MDNGOAotOjEwNjZGMDAwOUNFNkZDRUM1MzdFNEY5NzI2Nzc2N0I4MDMzRjQ4MUExOQotOjEwNjcwMDAwOTBGOEJDNzdDNUE2MTU5OTAwRUYwQTM4MUI4OUY3MTFEOAotOjEwNjcxMDAwQkRGMTNEQzgyM0M1NzM0M0VDNUVENDMwQzBBNzVCQkI1RAotOjEwNjcyMDAwRjc5NDc0QjBGNjY0NTY1RjlERjQ2RjFCRTAzQzU4Qjc2NQotOjEwNjczMDAwNzY4RkFBN0E5OEI1NjdCM0Y2NjZERUJFQzc1REJFMzRCQgotOjEwNjc0MDAwMDlFNTNDMTFEOEVGRjk5ODkzRTE3NzE5MzRCOTkxMTgxQwotOjEwNjc1MDAwMEVDNkRGNjU2ODgzMEIzNzA2RTA3ODBGRTI3ODEyMURGRQotOjEwNjc2MDAwQUZFOEJCOEZBN0YxRTlFRjNDOEVGNTdGNzYxQzREN0UzRAotOjEwNjc3MDAwQzFGRTg0RDQ0N0UyRjM4REZDOUY4MERGN0ZGNzdEMTI1QQotOjEwNjc4MDAwNUM2OEQ4NTc5N0I3RTVENjQzMUNFRDkyOTdERjAzRDNFMwotOjEwNjc5MDAwQjQ5NjgwM0M1RkI4RjUzMUMzRUY3QUM0REVFMzU0Q0JFNgotOjEwNjdBMDAwRjM3MkU0NUNCQURGNzRGQkZBNzAxMkIzNzMwRTI3MDk1QwotOjEwNjdCMDAwQkRGNzk0NDM3QzZCMzgyMUZDOUUyOUFBRTJBNUYzN0JBQwotOjEwNjdDMDAwMjVBOUZFOTFDRkVGMkQyRjIwNDFENDRGNDc5Mjc2MkM1MwotOjEwNjdEMDAwMEI0OTI3OTZDNUE0MDc0QjBDMzNFNzgyQUJENDg3RTU1QQotOjEwNjdFMDAwOUZDQkJBQzZDMEUyOTc1QjAzQ0ZEQTQ0Q0MzQjc4MTNBOQotOjEwNjdGMDAwRjZDOUY5QTE4MUU3RTFERUQ5NzU4RTk1RDdDM0ZDOEY4MwotOjEwNjgwMDAwMjQ3OUY4M0NDMjg2REY1NzIxRkFERkJGNTA0MDFGOUMzNQotOjEwNjgxMDAwRTFFRDRGMUYyNDFFRTk1QzZGREU0QjBFREU1QkZCOUI0MAotOjEwNjgyMDAwMjRDNDQzQTJERjQxQkIzRkU2REUxQjc2MkU1QzgzQzM1QwotOjEwNjgzMDAwMEFCODQ5ODdGNkZGNjVFQjZBQkNDNzZGRTk1RTE3RUFERAotOjEwNjg0MDAwQzlDMzVCRUJGMEY3QUY5NjkyQ0U3NDM4MjczQzlDREY2MAotOjEwNjg1MDAwMjM0MjVBRDhGRDJEREFGRDIwMjM1QTJDODZGQjRCNTZCNQotOjEwNjg2MDAwQzRGQ0ZFQ0UzMkZFN0I1OUNCNjI3RjhGOEE5RkMzREQ5NAotOjEwNjg3MDAwMDQwRkUyRTQ2M0M0OUVFMzNEOUIxNEZGNzcxNTQ5NjE3NgotOjEwNjg4MDAwRkNERjNGODkzREM3QkJCNzVEQzRGQ0E4RDU5MDc3QTVBOQotOjEwNjg5MDAwQjMyRjQ2RUNBQ0IyMThFOTRCRjk0RDlFNTk1NzE3N0MxMwotOjEwNjhBMDAwQ0MxRkUxQjJGQjc3MDk3REJGNTM5NENDRjQ4MDdEODI4RAotOjEwNjhCMDAwMTAzNzFGRUY3NjBGQjdCNzQ5MUQ5OTRFQzdGOUJGRDRGMAotOjEwNjhDMDAwQUQyMjA5MDA4MDAwMDAwMDFGOEIwODAwMDAwMDAwMDBCRQotOjEwNjhEMDAwMDAwQkREN0QwQjc4OTRDNUQ1RjBCQ0JCRUY1RUIzNDlGMgotOjEwNjhFMDAwNzY5M0NENjY3M0RGNDA4MDIwMTczNzE4NTI0NEFDNkYyMwotOjEwNjhGMDAwNDJDNDg4NjgxN0E0OEFEQUUyMDYwNDAyRTQwNkE1OEE3QwotOjEwNjkwMDAwMkQyRDFCMTIyMTIwRDZGODM1MjJEMDg0MkU3ODI5NTgxRgotOjEwNjkxMDAwRjVEQkI0QTg0ODgzNUQzMDIyREVGQTg3RDZCNjU0QURFNQotOjEwNjkyMDAwREY4MjdDOEE4OEIwNkE0QkVEQzVGQTlGNzM2NjI2N0I0RQotOjEwNjkzMDAwMjExMTZDRkRCRkVGNzlGRUY0QjEyRkYzQ0VCQzMzNjdBQwotOjEwNjk0MDAwQ0U5Q0RCOUM3MzY2QjZCNTVFQjU2RjYwOENCNTA2QUQ0QwotOjEwNjk1MDAwOUFERTA5NEZCQjJFQTgxNDMzOTY5NzVBNjU1RTAyNjVERQotOjEwNjk2MDAwRTZEMEQ5NDc3ODE4OUJBNjlGNzJDODUzQ0U5OEIxNDFGQwotOjEwNjk3MDAwQkRDNDA0RTVCRTFENEJGQTBENTA2RTc1QUJDQ0E0NDBGMgotOjEwNjk4MDAwN0I4NzhFMzEyOEIzMUM1RDcwMDQ5NERCRUMzRjczQ0NBNQotOjEwNjk5MDAwMUZDQkQ4NDgxQkJDODc3RTBBRUMyQ0U4ODE3RUY3NkZBMgotOjEwNjlBMDAwQkY1RDg3RTVENjY2QzZCMjcxMUNDNURGRUZBMUVGNTRBNwotOjEwNjlCMDAwRjYzMEMzM0Y2RDQ2OTk4QkIxMjJGQzI3OENBM0IyOEQ3NAotOjEwNjlDMDAwMUZFQUQzMThBQjZFMzg2RTg5RDhFMDdEQTQ3NjA2MUIxQgotOjEwNjlEMDAwQ0ZEODY1NzZGODc4MjJENEJGNzlGNTdCNThERUI2RjI0OQotOjEwNjlFMDAwOThDMzBGRTNCREI4N0RFREFGQTc0MTdGODYyMEMwMDVGQQotOjEwNjlGMDAwNUQ5NDdFREFGQUZBMzQxODJGQkFEREM4NzY0MEY5MzM5RQotOjEwNkEwMDAwRkNCQjgyQjFDMjU1RUFCMTg4OTkwNjY0OUZDMTdGRjk4NwotOjEwNkExMDAwMkIxMkNCNDYwNkU1NTI1MTJFNDYzOEUyRUFBMTNDMEUzNwotOjEwNkEyMDAwQzdDRkMyRDIxQzE2NzY2MUJEODBEN0E5MzEwNjcwMzI5RAotOjEwNkEzMDAwQkJDREY5Q0UxOEM2MkVCNTJCRUNCMzYxQjFGMkM1NTg1QgotOjEwNkE0MDAwMDY5NEVDMzQ3NDU0NTkwMUNFOUQ3RjU0QkMyRDUwN0Q3NgotOjEwNkE1MDAwNjBGQkMyMjI5Q0RGRDk2N0ZDNDU3Njk4Qzc0QTczREE4RgotOjEwNkE2MDAwNzg5NjFFODM3N0UwOTlFRTExRTMwNjJDM0EzNzNFQzMwMQotOjEwNkE3MDAwMTZFNjhFQjUxRkZENTBCM0M5MEZGREI0QUQ2NkRFRTM1QgotOjEwNkE4MDAwMjMxODMzMDdGQkFDNjM3MDFEMEYxOUJDNTA2NDc3MjlDMgotOjEwNkE5MDAwNkM0RTA4RUE1NTFCRDM0MjMwQ0UzODg3NDJGRDI1M0Y2NQotOjEwNkFBMDAwRUY1QUVENzlCOUM0MTAxQkY3QUU0RkFGOUY4M0VCMUJDNAotOjEwNkFCMDAwNERCNTZBM0I5NDczRTE5MkRGQTk3NjRGMDBEN0Q3OTAyQQotOjEwNkFDMDAwQ0ZCQzI5MzA5RUMxRDk5RjZCODdFRkM2M0M2REY0REFFRAotOjEwNkFEMDAwMDA2NUQzRkU3MzZDN0EwNEM2MURGM0RDNERDQzkzQ0FGQgotOjEwNkFFMDAwRjE4NUYwQUEyQjhEREVFMzk5OEM5OTU2M0FCREVBMjUwMwotOjEwNkFGMDAwRDhDRTQ2RjRGODkxQ0QxODM0MjFGRTU3REVERDgxRjU2RAotOjEwNkIwMDAwQUREQjJCREM5RUIxQjE3MUQ3QUVCNjdCNTU4MEIzNkJEQwotOjEwNkIxMDAwQjVEOUFCQzIwNEQ3OEFGOTI1QzM1N0UwRDBGOTgyRjBDMgotOjEwNkIyMDAwOUQ1MUM3RkM1ODVGMEZFQjgwRjQ1MzZGNEZBMUU3NTJBNAotOjEwNkIzMDAwM0I4N0JGNUIwRENDNDJGOEJCODE3RTVBOTA1RTU3NzA5RAotOjEwNkI0MDAwRkE1RDlFNjMwRTIyOUQyRjdGNzE3ODM2MUIzQkM4QkE3QgotOjEwNkI1MDAwODhFNzIzQUJERERFMTI4MEEzNkJDNTNDMzc4MzRGMkI2OAotOjEwNkI2MDAwOTdGNTU5QUU4MkY5MkY0RjM1REI5MTFFRjU2OTIzMUYzQQotOjEwNkI3MDAwOTg4MkY0RkU5MjgxMjE1RkI1QTY1Njc4RTZDN0Y1QTcwNAotOjEwNkI4MDAwNEY5QkU0NDY3Q0U4NzU4MTVDNjY2N0FDQzU3RTRCOERBNwotOjEwNkI5MDAwOUE4M0Y0MTJEOENBQkM4Q0FERUZBOEFBNTEyRjg1NzI4MwotOjEwNkJBMDAwNkEyMDU3ODFGQUZCM0FBNkYxRkFBQ0MwNTYwNUVBQjc1QgotOjEwNkJCMDAwNzQ0Q0U3RjUwNTgxNUMxRDk0Qjc3NzVDQzdDQjIzMDI2NQotOjEwNkJDMDAwNUJCMUJDQUI2MzE2MkY4RjAzMTg3MjE5RUJFOUI4QTE0OAotOjEwNkJEMDAwMjYwMEUzQjcxQUJDNzNCQzMwRUUxMzAwRkY1ODgwM0ZBOQotOjEwNkJFMDAwMjQ5RTNGMTc3ODkxRjUzRkMzRjc4MEVGRERFMjk5NUM3MwotOjEwNkJGMDAwRkY5NEY4NkVDRjEwRjU3QjQ1N0RFRjEwRkQzRjJCQkU2NwotOjEwNkMwMDAwMEIwRkYxRkQwMUYxNURERjEwREYxRjE0REYxRDFBQTI3NAotOjEwNkMxMDAwRkUyNTUxRkZDQTEwRkRGRjRBN0NENzNGQzRGN0JGMTZCRgotOjEwNkMyMDAwREZCRDM2QzRGN0JGMTNERjFEMTlBMkZFNzU1MUZGNjYyNQotOjEwNkMzMDAwNTJGRjZGODlGNjExRjEzRTNGQjVGREY1MDBEMDVEM0U4NAotOjEwNkM0MDAwQzgyREZDMkI0RDZEQ0Y0MEJBRUI2QTJFMjdGQTZGOURGNQotOjEwNkM1MDAwMDg3NDNFMzY0NkVGRjkwQUYzNjFCOUQ0QTE1MjdGQTUxNAotOjEwNkM2MDAwMjg4RkUxRjlBQUU4QkY3MjU5QzlCRDQ4NzdDQjVGRDUzMwotOjEwNkM3MDAwN0I5MTBFNUIxNUVGMTEzRkY0MUY1OEE2RjNBMkRDNUQ2QwotOjEwNkM4MDAwRkVBMjlFRDNGOTMyMzVDOEUyRjhGQkQ1MjRGOEI3MDk0NQotOjEwNkM5MDAwRjhEQTA0QkNDRkRCODc1MTdERDE0QUI3Nzc4Njk0OTc2OQotOjEwNkNBMDAwQzhGN0Y2QzRCMjE5Rjg0OTgzRjFEQjlDNUNCRjk0MkU5NwotOjEwNkNCMDAwQUIzMjhGNDJGRDAxRkEwNUU1RTY1RDM2NjNEODA0RTNBOQotOjEwNkNDMDAwREY2NTU3QTlCRUNENTk2NUM3RkE4MDVEMjVGRDczOTc2RAotOjEwNkNEMDAwQjNDQTNDMUZFNUFBMEQ4NDVEMDU4QzY3RTc3REI3RDk3MwotOjEwNkNFMDAwRDU5QTIwQ0EwRjQ3MzVENTRGRkJDRjE5NzY5NEEzNkQ5RgotOjEwNkNGMDAwMkNFQUE4QzRGOUFEMDJCRDAyREZFRjZGQUVBMkY3NDVFMgotOjEwNkQwMDAwOEUzRjM5NTAzRUJGOUNDMUY5QkYyRkY1QTBBNTE4REFDMAotOjEwNkQxMDAwQTlERkQ2OTFCRTE4Njk1NzQ5OEYwRDVCQTUwQjdBQTBFNAotOjEwNkQyMDAwNDk5RjdEQjkwRUNCMEZCNjcxN0QwNTdGQTk2NTMwN0U3OQotOjEwNkQzMDAwMDkxRjlFRURCQ0JERTJBNTUyRDQ2N0Y3QTg1RThGODcwMAotOjEwNkQ0MDAwQkY1M0UzRjQ0MTA5RUEyQkQwNUYzOThFMEMyRTFGODUyNwotOjEwNkQ1MDAwQkVFQTJFNjcxQUY2MUI3MDlCODMwRjQzQkYyNTJBNzM2QQotOjEwNkQ2MDAwNjc2NkM0RjA5RUUzRDA3MzM5QUY5RkUxNDVCRDM2QkM4MgotOjEwNkQ3MDAwMjM1MTNGMTVCN0M3RTkyNzg2RkEzMjUxM0YyNUVCQUJDMAotOjEwNkQ4MDAwODI2NjkwOEY3MURGOUJEQ0Y2ODRCMkRFOTE0QUZBMDk0RAotOjEwNkQ5MDAwNjQ4Q0Y3MzMxODdBNzlDRkYyQUJBQzJDMjZBRjkzRjUyRAotOjEwNkRBMDAwNTFBQkQwMEY1MkVFQjY3RTdBNDk4MjdFOTA3MjM5NTkzRAotOjEwNkRCMDAwM0Y5QzVGQkVGRUU2RUE1MTQ0ODcyMEFEM0NFNzk3QjNCNwotOjEwNkRDMDAwQUYyMjFEQzAzQTFBRkMwQUU5MEZBNkZBRERCRUQ0RjNDMQotOjEwNkREMDAwRTNDQjYwRjBEOUVEQjZGM0UzQ0Q5MEY1MUFEOTE1MDYwMwotOjEwNkRFMDAwQkY0QUZEOUZBMzU3Q0U4MzU3RDlDRTY4N0VCMEZCMzhFQwotOjEwNkRGMDAwRThCNTNGQkQ3OTQ3MjkwMzk2NTkwQkI4QTFGNUNGRDIyNQotOjEwNkUwMDAwMDUxRjg2NzlFN0FGRkM2OTM3RjY5Rjc3RDBEQTg2Nzg3OQotOjEwNkUxMDAwMzZCQUU3NzdCN0UxN0MzQTFFNjAwQ0U4NDk2RkU2RjREMgotOjEwNkUyMDAwNjRDQ0E5QjJFM0Y3QUE0RTczNjcwQzg3RjJBRURGREQzQwotOjEwNkUzMDAwQUMwMDNERTkzMzlCQkQwQ0Q2RUREMDEzMkY2NTVDODNEMAotOjEwNkU0MDAwRjg3QkQ1NDA3QzZFRDJGOUVDNkMzODgxNDNGNEI2QUU1OQotOjEwNkU1MDAwQzBCQTdEMDNEMUIxREY4Qzc4Q0FERjY5MjYzREMwMDI5QwotOjEwNkU2MDAwREJENzZCNDBENEFEQjAxQzZDMzJENjdGN0RCRDA2Rjg0RAotOjEwNkU3MDAwRDlBOTBDOTRBRkM2NzIyODY4RTRFRDQxNDRFM0ZGRjU0QwotOjEwNkU4MDAwRTgxNDUxQ0YzNDE1NThGMzcxNDUxMUY1RkY1OTUzM0RBRQotOjEwNkU5MDAwMDVEQUFCRjYzMTJBRTg5REZBRkI3RUQ2NkVCODFDRUIxQwotOjEwNkVBMDAwNzVGMjdCOEQ0RDgyRjlFMjc4QTJBQ0MyRkFGQ0I0NEY0OAotOjEwNkVCMDAwRDQwN0MyRURENUMwNDQzRDQ2MzkzRTBCNjBGQjFFOUQ1NAotOjEwNkVDMDAwOEU5NzAzQ0ZCNDYzRkY4RjU3ODlFRjAzMEZBRUQ3RjJDRQotOjEwNkVEMDAwMDk5RTZCRjQwRUM2QkVFM0U4NkJCNzVEMUE4M0Y3RUU0RQotOjEwNkVFMDAwOEM5N0RBNUI2MDdFMUY3ODIyNjlCMDlDQUM2MUZCNzE4NQotOjEwNkVGMDAwMTdFQUU3NzU3MzlBN0Q4ODM3MjQ3QzFGRThDNDE0QkRCMAotOjEwNkYwMDAwODdFODY5NjBERDc2Q0YwQ0U0NDFFRDk5ODM3RjRCMUIwOAotOjEwNkYxMDAwMEI1NTRERkFDOEMxMTRDMDVGQzM5RTY2QjMwMUJFMzc5RQotOjEwNkYyMDAwMTk3QzgxQkNFMkQ4NzcwREJCNkJDOTlFNjlFQTJEQTNBMQotOjEwNkYzMDAwRTcyMERGMUQ1Mjg3RkQ0QkRGOTk4RDE3MzBERTA3RTExQgotOjEwNkY0MDAwNUYzNzNFMDY1NTBERkFFNjc2OUI5RURBMzNCRUZFODMyQQotOjEwNkY1MDAwQ0Y0RjdFRkZDMTYzQkZCRTAxQzczQkVEODlCOEE2NDNEQgotOjEwNkY2MDAwRUI3NTYxQzBDQjIwREZDOUY2OEQ3QjY2RDJGM0Q3MjlFNAotOjEwNkY3MDAwREE3QTA3RjA3NTJEQzgyRTkyNTc2QUIzMTdEQjg3Q0NFMwotOjEwNkY4MDAwMUQ3NjJGMjBEQTYyRThGMEExREUwMEQ0MDc3NTkzNjI0NwotOjEwNkY5MDAwQ0Y4RDhFMTI2QTlGRkMzRTk5QkY0MjY2OTYzOTAzRTVGQgotOjEwNkZBMDAwNzhCRDRBN0EyQTY0MEVBNDhDODdGMjQ2RDg4N0I0MDA0QQotOjEwNkZCMDAwNDg2QkNBN0UzNzYxMkM5NjlGQjQzMURDOTdCNEQ2RjcwNAotOjEwNkZDMDAwQjlDNzIyNUY3OThEMENFREREOEQ5Nzg2NzI5MENGREI4RQotOjEwNkZEMDAwMUE4QzczMUUwMjc4NDJFMUU1RUUwNTcxRjZENkREMTlEMgotOjEwNkZFMDAwMDY5QUQ3RkFFNzgxRUYyRTg2QTcyMUU0NTBGMEZCMTEyRAotOjEwNkZGMDAwQTAzNzgwOTQyRDBFQkYxOUY3Mzk5NjlDMEMxNjI4QzYyMQotOjEwNzAwMDAwNzZCNjhEQzg5RkVCMERGRTlBMkE2Qzk3QTMyM0ZENjI3RQotOjEwNzAxMDAwMTkzMUJCQTYwQUUwNzA2N0U5MTQzREMxNTE3RDY0MjFCNgotOjEwNzAyMDAwRUEzN0JCMTEzNTI4M0I5MjMxRUY2Nzg4QTc5RkFBREU2QwotOjEwNzAzMDAwNjZFNEMzOUZEQTZDRjYwMDU0ODA4Q0Q0NTBGRUE5MjMxQQotOjEwNzA0MDAwOUM0MTJDOUJGNEFDMTlGNTc4NUUxOUU4RjMzODNCRjZCQgotOjEwNzA1MDAwODg5MDlGNDcxQzQ2ODI3N0EzMjUzNEIzMTJGQUIxMkUzRAotOjEwNzA2MDAwRDdEOTAzMzBERUZBODY0REZERDM2MDlDMUYzNTNDNzVDMQotOjEwNzA3MDAwQjgwNURFNkY3MEE5MENFMUIwMzlENUIwMTFGNDhGRTExRAotOjEwNzA4MDAwNUE4MDExRTA3RUJDQzU2NzQ3RjkxQUNENTJEOTBFQThDNwotOjEwNzA5MDAwQjc5NjE4OTkyNzRFNUVEOUM2NDIzOTRFNEU2NjNBNTU3NAotOjEwNzBBMDAwQ0QwMkRGOUZDREYwQkZFODgwNzEyRjc5RjUzNTMzN0VCQgotOjEwNzBCMDAwRUY5RUE4RDMyMURCODQ1NEJFQ0U2OUU1ODlGREQ4QTcxNQotOjEwNzBDMDAwMjRGNjkzNTE5RDU4RUY5QzkxNThFRjlBOUQ1OEVGRkVFRQotOjEwNzBEMDAwNDY2MjM5RjdCNkM0RjIyQzQ5NkYyMDczNkNBMDhGQURBRAotOjEwNzBFMDAwQkM4QTU5MjMxRkFFNDY3RDBCRjhGOTAzRTJERjNBNTIwMgotOjEwNzBGMDAwRTc0NUZDNTgxQTFFM0FCMTEwRUFGMzUwOUVFMDdFNjg0QwotOjEwNzEwMDAwM0MyM0JEN0JBMEYwM0IxRUI0MEI0QzE5Q0QxRUM3RDg1MQotOjEwNzExMDAwNzNGMTkxNTc2MEJFMDZEN0NCNTZBMkRBMTlCNEI3QkQ0QQotOjEwNzEyMDAwRjlERUE3RDhCRjhEQzVCNTJCNDZGQzY4MjcxMTNGRjhGRgotOjEwNzEzMDAwRTcwNjc4NTJGMTFGMUVDNDc3RjM3RjdEMEZGNUUyNjFGOQotOjEwNzE0MDAwQkQxN0YxOUREN0EwRDJGOEY3Q0NGNjA0RjVEQzlFNzAwMAotOjEwNzE1MDAwQTMzRDkzMjZEQUE3OTkzN0Y2RUI0MTlFQTdCREI5N0VFQQotOjEwNzE2MDAwMTlFRTdCOTNGMUVBNjJDRDBBRjIyNUQwMDdERjZGRDdFMwotOjEwNzE3MDAwMzJEMjFGRUI3NEFDMEVFOTA2RjcwOEQ4MUY5OTQ3MjBFRQotOjEwNzE4MDAwMkZBRUNEMzQxMjlFMTQ2MUVGQTBFNkMwN0E5N0IwOUY2NwotOjEwNzE5MDAwOEMzOUI3NTk5MDhGRUYzQUM4RTlGRjJFMjNFRjY3QTBEQgotOjEwNzFBMDAwM0YwRjBEOEEyNENGNTA0RUE2NjZFODEyRkFEOTY0MTcxNQotOjEwNzFCMDAwNkQ0NDM5Q0JDMUNCM0Q3RDE5RDcyMDVGNkU5QTlEMzE4RgotOjEwNzFDMDAwMDFFOUM0ODRGQjJFRTgyRjNEREZBQzhEODZGOTU5NUVDMgotOjEwNzFEMDAwMzQwNjE0RTgzNDVENjU3RDA2NThDQjFFMkJCQkQ1MDdGRAotOjEwNzFFMDAwNzA2QzM5NjQwREU4RTFCRDY1QzE3RkQ4RDE0RTFCOUYzRAotOjEwNzFGMDAwQzFFOUJFNjc4REY3MzcyODA3QTJCNTJBRTFEMTkyRDUzQwotOjEwNzIwMDAwNjE5RjMwOTZDRjIxMDBGMDIxMzlBMDVFQUMxQ0QxNDk5RQotOjEwNzIxMDAwNzY5RUE1QjI4M0Y0QkJBNUFDQTMwM0YxQjQ2NTg2OEVCQwotOjEwNzIyMDAwRUM4RDhDREI3NDQ0Q0Y5NjgyRDBFMTEyRjQxMzJDRDAxOQotOjEwNzIzMDAwRDlCMUJGMEM1MEZDNDZFOEU0ODdGOTFEM0UxRkY2MEJBMAotOjEwNzI0MDAwMzhENzU1NzA1MkMxN0U2OTg2MzA0RUE2QzBBQkQzQjlDRgotOjEwNzI1MDAwRkIwRTA1RkFDOUM0RkVDNkYzRjY4ODI3ODdDMDUzNDU1RQotOjEwNzI2MDAwODY4N0UwNzY4QTdFMzM0QkEwRkQ3OERFNEY1QjQ1QUNBNwotOjEwNzI3MDAwMUZCOThFNUI2QTU4MTBFMTkzRTNDQTdFMDZGQTY3OUFEQgotOjEwNzI4MDAwODI3MkQ1RjAzMkUwMERENjQ5MjkzNDEzNzA3NzJENjEyMgotOjEwNzI5MDAwQjQzRkVFNTlFMzZCREU0RTdDNkQyMzNGNDdBRTMzQkYwOAotOjEwNzJBMDAwMEFFOTI4RjdEMEQ2NTlCQUYxRjg5RDk1QzYzMTJDNjA3NQotOjEwNzJCMDAwNDFBNEUzNUM5NTk5QkY5QTgxRjY4RDhGRjA5OENDQUY4RAotOjEwNzJDMDAwMzk3RDFERDdBMzlEMkFENzI1OTk3RjczNTRENkFFQ0Y3QwotOjEwNzJEMDAwMzg5NzhGNzM5Q0NFQUE5MUUzMDdFMUU3MjQ3RUM5MzlFMgotOjEwNzJFMDAwMTRGRDM2MTI3RDMyNUY2RjRCMzk1RDg2Nzg2MUYxRURBQQotOjEwNzJGMDAwRjVFNzJGRUJGNUExQzNFOEU3NjFEOUEwMjcwMEY1ODVGNQotOjEwNzMwMDAwNDlFMzMxRjY0RjEzOTYxNUE2RjM3QzM2MUNFNUJFNDNEMAotOjEwNzMxMDAwRDAzMUU4MkI2MEQ2OUUwOUY2QTkzNkU0RDM2NThDRTgxNwotOjEwNzMyMDAwQUJFQUU5OEQzN0JGMENGRDlEMUQ2MUI0QTM1RTI5MzgyMgotOjEwNzMzMDAwRDREMThGRkE5MUVERjE4RkMyNzVFODUyRkQzRjRFODFBNQotOjEwNzM0MDAwRkFBRTIzRDkwQ0U1RjY3QTBCREY4RkE5ODJDRTkzRjUzRQotOjEwNzM1MDAwQ0JERDE5N0MzRkU2NDEzREU3RkVENzlGRDIzRTBDOTU0MQotOjEwNzM2MDAwQjhDNkQ4ODFGN0VFRkU4RjJCNUYzNDY3RkQwRkRBNTk3MAotOjEwNzM3MDAwRUNEMUY1MUE5NEYzRkJGQTVCNkMzOEZFN0RDRkI3OUIyQQotOjEwNzM4MDAwMDFCRjk2NTc3OUZCMEQ1MDBFQTg4OEJGN0FGMjY3MUQ5MgotOjEwNzM5MDAwMjg1ODQ4Nzg1MjVGMzczMUE0RDM3MTdBMkQ4ODY1RjYyMgotOjEwNzNBMDAwODY4NUExRkNEREY5RTQzN0VBM0MyODdGNUNEMzNEMjhFMwotOjEwNzNCMDAwODdCQTA0QkY2RjE1Q0ZFNEY5QUI0NkNEOEZGNjQ0RjIyMAotOjEwNzNDMDAwRkJDRTAxQjlFNDNCNTEwQkVCMzhFRTQxMjNEQjAwOTVEQQotOjEwNzNEMDAwQTVCQTc5RURCOEJGOEJBRTA3RjkwQkI1RjNGNDlFQzYyRAotOjEwNzNFMDAwQkJFM0Y2QjdFREQ2Q0E0NzMzRTBCQkVFRDU2NkU2MDc5QQotOjEwNzNGMDAwODMzOUZGMTM4NUY5ODEzOTBCOUNCRkFFNDRGOTUzQzgxQgotOjEwNzQwMDAwQzIwQUVBRDlDMjY2MzA3ODkxQUU1NjU4OTkzRjhFREVFQwotOjEwNzQxMDAwRjMzRjUxQTk3REJCNTU3QjM0MjM4QkJGMzc4MzFDMzA5MQotOjEwNzQyMDAwRjA3RkIyOUY2NkY4NThBRDkzQ0IyOEI0NUYwQzhGNTlBQwotOjEwNzQzMDAwOEZBMkRDNjBDRTZBNkQ2MDNGMzIwQ0U5MTdGNDNFOEM5RgotOjEwNzQ0MDAwRjdCNDk4QjcwMTcwNjg5ODAwRkZEOTc0NjFEM0Y4NzNFNgotOjEwNzQ1MDAwREJGNzBBNzlBRTlBNkQ2MTk0OTdBQUVEOTUyMzI0NUZDNAotOjEwNzQ2MDAwRUNFQUE5Rjg3NkI4RUYyNjIxNTZDRkM4MkY4Qjc4QTE4MQotOjEwNzQ3MDAwRjJCN0VDNTRDRTAzRjk2QjlBNDA3NjdGMDBGN0RGODFDOAotOjEwNzQ4MDAwMzRCRTFGNjE5QUU2NzFCQTkwNUYxODIxMzlERkNDREFGOQotOjEwNzQ5MDAwQ0REMDhFQTgxREY4MkQ4N0Y1NUJDODZFRUU2MzFFRTQ3NwotOjEwNzRBMDAwMDdGNEIwQkQ5MzQyMjI4QjIxNUVCQjE4QUI4OUU3MDM4MgotOjEwNzRCMDAwRjk5NDdFMDk3NUE1OUVGNjUzNjM5RUIzMTAzQzg2NjZDQgotOjEwNzRDMDAwMTZCNEEwM0Q4NEIwMDFCRUQ1MTUyQ0E4MTZDN0ZDODIwOQotOjEwNzREMDAwQTUwRTBGN0Q2NzY0Q0Q2NENGM0VGRUU5NUJCOTI4QTc5QQotOjEwNzRFMDAwQUQwN0MxMUVCQjE4RDc1OTQ3NzJDQTZBNERFNDNGQzZFMwotOjEwNzRGMDAwNUEwODRGMjcwNTdENzRBRkI2RDMzQTBGRUNERkZDQUZDNwotOjEwNzUwMDAwODk3NThFQjRBMEJFMjg1QzkxOTFCMEJFQjI1REZFMjc5NQotOjEwNzUxMDAwNzlDQzdGNDk3Q0JGNDFFQTJGQkZBNDRGNDFCRjRDRkVDRAotOjEwNzUyMDAwMjc4NTU0REZCRERBNzM5RUZFODcwREQxN0YwRUQxRDE0MgotOjEwNzUzMDAwRDBGREU3NTM3RDc3RjgzNUM3NzU4MDhBQUU2ODlGQzM2NQotOjEwNzU0MDAwRTc4OUQ5RDdDOTc4Q0U1RjkxMjg5NzJGREU5MzU4OTZDRgotOjEwNzU1MDAwNzhCMTE4MzRFNzRDQzBCOUU1REIzQUVGNzZFOEVGMkJBOQotOjEwNzU2MDAwNDcxMkRCRDUxNEZGOTZGNkJGQjFGNjYxRTdGNUQ4MUVEQQotOjEwNzU3MDAwRjZFN0RCRTFFRDY1MjcxMkRCRkIyQTlGNzcyMDFGQzdDQgotOjEwNzU4MDAwREE3M0Y4QUVGODI0QjE1REYyRkEyNEMzMEI3MDY1N0RBRQotOjEwNzU5MDAwM0QwRUFFQTk2NjUzNDJGRDlDREE3M0UwQ0FCQTMxMEVDNQotOjEwNzVBMDAwQUVBQkRDODlFREZEMkQ4M0MzNzU0REE5RTk3M0UxOTI4NgotOjEwNzVCMDAwRURCRTM2RTlDMkRBMjVDRkUzRkExQUQzMTA3OEU3RUQ0QgotOjEwNzVDMDAwNkY5QzczNjFGRERFNTJGN0Y5RUQ2RTVEOTkzQzRFODA2NAotOjEwNzVEMDAwRjhBNTUxQTc1RDlFMDlDRjc5RjgwQUVENDU5Qjk1RUM3QQotOjEwNzVFMDAwREU2NDdBNzk1NEU4QTc2QTM0M0NBMEJGOEJEMkI0RUE0RgotOjEwNzVGMDAwNEM3ODU2NDlCRTEzN0U4NjQzNEY1Qzk0OEQ3MjNENEY0NgotOjEwNzYwMDAwRjhEMTk5RjAyQkY0RDRCQkM5QUY3MEIzNjgwRkZBQTRDQQotOjEwNzYxMDAwMERFNTQ1Q0Y0RUY4MkU4REMzMTU2RjNGNjVENkYzN0QzMgotOjEwNzYyMDAwODU5RDQ1ODk5RkE1QkQ5NEMxRUMwQURGOEY3MzdCNjc1QgotOjEwNzYzMDAwQTg3MTkyRkI1Rjk3QzFFMTlFQkY3MjJBN0IxQkY4RjA5NQotOjEwNzY0MDAwMjlBM0JENTJDNUZERDkzNjg1RUM4MUY5RDU5QTNFMTVFMQotOjEwNzY1MDAwRTg2MzcyQkI0MjdFQTVGOTc3RkVFNjg3RTg4RkI5RjQ0RQotOjEwNzY2MDAwQjg2NzRGMDRERUNGMEYzQUJDMzg2QzYzM0ZEMzMwNEU1RgotOjEwNzY3MDAwOTBBRDVGNTZGNjNENzhERTdGMDBFQzFGNTE1RTg2RjREQwotOjEwNzY4MDAwNjZEMzNDQjhERkE4NDU4OEEwOUY1Mzg2RTYzMjNCQ0E0NAotOjEwNzY5MDAwQ0Q2RkRBMzQ5NDlCQjVCM0I1M0ZEMDdDRkYwMTU2MDk2QQotOjEwNzZBMDAwQjQ1QkMwQTdDRTlFRUU5QzY5QzQ3ODQ3RUQzNzNDOTM4RgotOjEwNzZCMDAwRDBFRUE5MEQ1OTM0N0E5QTk5NkE4NTc5RDQ4MjNEODY5QgotOjEwNzZDMDAwQ0Y2QzIzNTMyREY4QjQzMjMzM0UyQkQ2NzBGQjJCNkQ4OQotOjEwNzZEMDAwOTJDRjU4MEJFM0Q3RjZGRUU0Q0ZGOEREMjIzNUJDOUZGRQotOjEwNzZFMDAwREI5MzQxOUE3NzZERUY4QjdGNDU3QjZEODFFNjMzQTIwQgotOjEwNzZGMDAwQkMxOEIzRDNDODZENTI0MTBGRTM0Mjg5NjU5NDA3RjFCQQotOjEwNzcwMDAwRTVCMjcwNjJGOTkyNDM4OUU1Rjc3MUUxNjA3RDI2MEI3RAotOjEwNzcxMDAwM0ZENjgxN0QyNjkyREI0QkRGQjc5MkZEQjkxNzE0MUU1MQotOjEwNzcyMDAwRUU5MzAzOEY5QjQ4N0Y0QzVENkFBM0Y1N0FGRkE0NzVBNwotOjEwNzczMDAwM0JGQUY1RjZCRjZFQTVGNjRCN0U2QUUxRUQ3NUExMjcyMwotOjEwNzc0MDAwQjAxQzc4MjI4NUY2RDk0QjMzNDMxNTE5MDBGNzJGM0UyQwotOjEwNzc1MDAwRDUxM0JFNzE1QTA2RUNGRjg5RDFEQjM3NjBGRDI1QTEzOAotOjEwNzc2MDAwMEE4QzhCM0Q3NTExNjNGRDU4QUYwNkM3RTMzQzlGRkE0OQotOjEwNzc3MDAwMjdGNzVCNDc3Nzk5ODIzQkEwREZGNzlGRjlDOTEzREZCMwotOjEwNzc4MDAwQzU3MTc3RTU2NTI4QjAzRTk3QTE1RTgwNzY5MzFGMzQ3QQotOjEwNzc5MDAwNUI3MUJGMzFGOUZEQzc4NkEzREM1OEJBRDM5NDMwQkYwMwotOjEwNzdBMDAwOUQ5OThBODhBQjc5RDI5MEVFODZGMjNCMUU1QkZGMTNERgotOjEwNzdCMDAwRkFCRUY0QzQxMUEyQkJCRDg2ODAwRUUzNzg4MUY1OUNBRAotOjEwNzdDMDAwQ0VGNjVBQjg5Rjc0QUZBNTMwODhFQkY0NzQyNkQ3M0IzOQotOjEwNzdEMDAwOTdFOTc2RkNBODExRURDQjU3QjkxRDMyNTRGRkE1RUUwMQotOjEwNzdFMDAwRjlEREQ1ODNGODE5MDdFQTYxREM2MjU4RTczM0VGNTkxMAotOjEwNzdGMDAwNkZENTAwOEU1MTlCMTNENzY5NzQzMEIxRkM0QjMxQUZGQwotOjEwNzgwMDAwNzkyQ0VFN0QzMUMyMzM2Q0FEMUJFMUQ5Q0UwODlFRDIwRQotOjEwNzgxMDAwMTM2RkRFNUM4Q0Y2Qjg4OURCMjFDOUUzMUVDQUU0RjI4MwotOjEwNzgyMDAwRTFEMTQ3QTExRjJFNjdGNERDMEUwNzhDMDE1RjJGMTVGNQotOjEwNzgzMDAwRkNGMDBCODVEQkMxRjBCNzIyMEZFODdGMjkxQTEwQzNEQgotOjEwNzg0MDAwNjJFRjk3MjZDMTIxRkJGRkFFQzBEM0M3RTZCNDFEQThFNwotOjEwNzg1MDAwQ0Y5RDQ2NEVGNzI3NTcxRkZBMjFDNjMxNjVCQjc3NTY5NQotOjEwNzg2MDAwNkI1QTc1OUM1Rjc5RTFFNjY1MDc3MzYwRkRFQjdCQjI0RgotOjEwNzg3MDAwNjg5RjI5REZEN0VGN0FDRTc1MEJCQzNGQjU1M0Y1QTJEMQotOjEwNzg4MDAwRTk1QjdGRDMyMzNGOTg4Q0VENzZFOTQzMDgyN0Q2QTNBNQotOjEwNzg5MDAwM0ZGMzU0RThGOTM0NkNCN0IwQ0IzMTAxRkQyNUYyRkI2RQotOjEwNzhBMDAwNDU5QkFGRDRBQUUzRTRFOTE3RTUyN0M5RkZGNTYyN0Y1QQotOjEwNzhCMDAwRkNGNEE0RkU2OTc5ODBFRkE1OUIxNTJGMzY1QjFBRkFCQwotOjEwNzhDMDAwRkFGNUQ3QTJBREQzQTVGNzYyN0NBMzQyNjUzRUZEMDRDRAotOjEwNzhEMDAwREFCQUNGQzY2NzdEQ0Y5MzA3NzNBMUJFNjlERkM0MEE0QQotOjEwNzhFMDAwOUNENzA2OURFRjlBNzFDODJGREIwQ0U0MDc0QjVFMUZGNwotOjEwNzhGMDAwRTZFNEVCMENERjg3NzVGMEZEODYxQjZDNzUxODE3ODFDRAotOjEwNzkwMDAwN0VGQkIwN0NBMDc0ODcxRUZERjg2OTI3NDBCRUYxRjdBRQotOjEwNzkxMDAwNDc3NDIwMzM0RkY0REUzNTFFRjYyQzQwQzdCNjc2RTRBQwotOjEwNzkyMDAwOEZCREU4QjhDMDcxMUVENzkzOUU2MDYxM0U4RkM5QzJGQgotOjEwNzkzMDAwRkZCQ0Y0OEY5RDQ2MTU5RTI3NEVBQzQ5QUJFNEZDNDczNwotOjEwNzk0MDAwRUI4NDQyREQwOUYzQUI3QjcwMUNGMUVCQTJDRDg5RkMyQgotOjEwNzk1MDAwMjVEQjQ5NzgxNzA3MTNFQjkzRTlDMkUzOTRGRTBBNTYzNwotOjEwNzk2MDAwMUE0RjVGQzlFRDMyNjcwNDhDQzg4RkY1MkI0MTlFQzc1MwotOjEwNzk3MDAwRjE0REZERjEwRTIzREE1REM5RTNBMDA1QzlFNEJBRUFEMQotOjEwNzk4MDAwODkyRTYxMkM5Q0FGODVDRjE3NEM1RTMzQ0NGNzI0RkUzQgotOjEwNzk5MDAwOEJGQkNEMTVEQ0Q3MkY1MTY4OEE2Q0U5NDVBQ0RBMDMzNwotOjEwNzlBMDAwRjg1QzNBOEJENUUwNTNDQUMzNTM5MzQyRTNCMUZENUUxMgotOjEwNzlCMDAwNDNFNDkxMUY5MTFDNEMyNTc5NzBDQTFFNEU0M0JGNTI1RgotOjEwNzlDMDAwQUVGMEVCOURGMjg0RDM1MENFOUQxMTcxM0JBQ0M3RjI2QgotOjEwNzlEMDAwOTI1RUQwMDdDMEQ3RUY3RjYwMjRCREQwMTI3QTJFMEQwMwotOjEwNzlFMDAwRDdFQkQ0MTMxNjlEMEVENkU1RkQ5RUNDMkFGNDA3OUQ0OQotOjEwNzlGMDAwMEFCRDlDODZGMzNBMTlDQUFDNDJCRkRFNTA3MjIyNTlDNgotOjEwN0EwMDAwQkU0OTdCRTAyOEZFRjM1MkM2QUU3NDZBOUExM0U1MURBOAotOjEwN0ExMDAwMDYxOTcyNDBERjY0MzY5NzM1MEZDMkY3RjIzQkE3QjEwMwotOjEwN0EyMDAwQjkwQ0YzMzRBMkRGQjQ3OTUxQ0U1RUVCRjREMEZCNUEzQgotOjEwN0EzMDAwODVGNzg3N0YxOERGRkJFODUwRTYwRTVDRkY0M0ZCNDdDNgotOjEwN0E0MDAwQTZBMzlERjAxMUYzQTRBM0RDOUVFQkYyRjk5Q0IwOUVEQgotOjEwN0E1MDAwRUVBQTdFOEFFQkJCQTczMzZGMkI3Q0YzQjZERTdCQkIzMwotOjEwN0E2MDAwMURGMDc2MUIwM0JEODVDRjcyQkY5MUZDMkQ2RDU5MDRBRgotOjEwN0E3MDAwRDc3Qzk1ODU1NUEwRDNGOUE4NTdDNzUzOTlFQzk4RjlBOQotOjEwN0E4MDAwNUQ0QUIwMTVFMEI4NkQ2M0UyM0MxNzc2OUE2MkVCMEI4NQotOjEwN0E5MDAwRkYyRDY2MjAxMDkxODFCQUUyREE0MUZGOEI1MTdGMDJGRgotOjEwN0FBMDAwRkU5Njk4NTkzODA1RkE1REYyNTBFMjc3NEI1OTk4RTAwNgotOjEwN0FCMDAwQTk3RkVDMzNEMzYwNzhGQ0IzQzBFMzVDOTdCNjE4RjFEMAotOjEwN0FDMDAwQThDQzMyMTM1Q0RGN0E1QzIxRkRFNjE0N0VDNkU4RkRBQgotOjEwN0FEMDAwRTk0MThDODcyRDE1RkE3QTgxNjkzRkMxRDM3NDY3QUQ2RQotOjEwN0FFMDAwNzYxQkQwQ0Q5OTk1RjNCNURCMzI3OUNBMDhFRENCMzY0QwotOjEwN0FGMDAwMkI0NDg3NEJBQjU5QjgwMEUwNUJEQUFCODRDN0ExM0RBMAotOjEwN0IwMDAwRjExQTVGMjdEOTJGREJDNkRCREQyQ0VDOUQwNTgwMTczMgotOjEwN0IxMDAwQjQxRjI2M0ZBNjA0NTI0MTdFMkUzMEMzNTYwRUU1ODg4MAotOjEwN0IyMDAwOTgxRkQ2QTc0M0I5OEU3NUQwQkMxQTU4ODRFMDU4OEJERAotOjEwN0IzMDAwRUJDOEZENzkwNEZGOUY1RkUzRUIzN0I5NkVCQjFFODE5NQotOjEwN0I0MDAwM0FCNEJGODJFMjdGMUYzMzJGQUQyM0Q4MjVDQzkyNzE4OAotOjEwN0I1MDAwMkU5RDIwREVCNTM4M0NENTc1MjU5NkQ5NDM3MUU1NjE1QgotOjEwN0I2MDAwODg1NzI4QzdFMUJCNzFGNzY3MjY2RDEwM0NERjNGQTAzRgotOjEwN0I3MDAwNEY4MkEzNjc4RTYzRTdEOEJENkY4OTc1QjhGRkVCMEJBMwotOjEwN0I4MDAwNzM1MDBFREM4QkY2NkJBRUU4NjAxMkNBNEQyNkZEMUEwMAotOjEwN0I5MDAwNjEzM0Y0NkZCRDg0MjVGODM5QzBCRUEyRjI4M0NFOTk1QgotOjEwN0JBMDAwRDMzN0U3MzNCNkM5RTBBNzc4QzE3Q0JERUYyMDg2QjZFRQotOjEwN0JCMDAwRkVFOUYyRkYwNEQ3NzdCRTRFMkI1NDQ5MUU2ODIzNjlCNQotOjEwN0JDMDAwQkZCQjkyQUZDNzAzMTM5QTQ3MzcwRkIyQ0Y5NUYwNkY4MQotOjEwN0JEMDAwNTI0MjYxMURDQTgzNjdCODdEOTA1QTFFMzVGOEUzRjg5QQotOjEwN0JFMDAwNkNCRjkwNzNFOTA3MjIwN0YzOTA1RTlFNTRDODJGQkZDNQotOjEwN0JGMDAwNDU2MTZEMEFFMEQ5MERDQjgyRkE2MDhCNzJGNDIwRUEwMAotOjEwN0MwMDAwOEYyRDU3N0I1ODJCRDQ5N0VGOUVCOUVDNzlEQTJCNUJFRAotOjEwN0MxMDAwMjlBRkE3NjE3N0E1QkVDMTQ2RjNFN0Y2NkE0QUYzNzZCNgotOjEwN0MyMDAwMURENDY3REY1QTNBMDFGOTA0RTY3REVCMkM3ODdGNTBDQQotOjEwN0MzMDAwRjA2RDhFOEREMzgzN0I0REEwNzgzOUZBNjUwRkY4OTY2MQotOjEwN0M0MDAwM0Q4RkZDM0RDRTRBRkVBRjZDMzNGQTdBRTlEOThFNzY5MQotOjEwN0M1MDAwQTg5QkI1MjhEOEVFRkUzNERFN0Y5NjRFN0ZFQjRDMkNFOQotOjEwN0M2MDAwNEZFMEU1OEM1NThBQjY4Mzg4RjgzRUVBM0ZEQkM0NkE2QwotOjEwN0M3MDAwMTA3RTdDOEZGNjM0NzRBN0Y1NTA3RDkwRTY5QjNEQjU2MQotOjEwN0M4MDAwQjkwQ0ZCQ0IxRUNFOUY0RTYzMzgxRkZCNzk2NTYwQkRFMAotOjEwN0M5MDAwRkQzQTk0QkIyQjg0RkU1Q0IxQkQyQTFCRTVFNDJCQTcwNwotOjEwN0NBMDAwQ0MyQUNBQzM1N0RDRDIwRTBDREJEMDBFNjQyNUE1QkM4RgotOjEwN0NCMDAwQkREMDUzMkJDQUE2NjYyM0ZEM0EwQjEzREI5RDMxNjg1QQotOjEwN0NDMDAwRTk5N0EwQkMzRkFDQTdCOENEOUY2QzVBQkEwM0RBNUQ2OAotOjEwN0NEMDAwNjZFNEYzNDg1RUM3QThEMEFCNEQ5RjI4MkMxOEI3RkZDOQotOjEwN0NFMDAwNkY5QTczOTZFQ0VDQTY0RkQ0ODRGN0E3NTY5QjU5MzA0NQotOjEwN0NGMDAwNkVGRjVGNUY3NzYwMUFCNjZCNjBGRDZCOTFBRTFBNDJFNAotOjEwN0QwMDAwMjkyQzE4NDdFNzk3NTkwNzFGNTdEMjc3RDMyNzdBMTY5OAotOjEwN0QxMDAwMTg3NDVDNjNFMkZCNEYzMjU5MjA3M0IwNzZBRUM0RjczRgotOjEwN0QyMDAwMzA4Rjg0RjI5RUJGMENDQzAzREZCMzQ5OTEzNEY0ODdDQgotOjEwN0QzMDAwQ0U0MEJEMDZFNTMzNDE1REMwMDBGMkU0MTUwM0Q3NTdFMAotOjEwN0Q0MDAwQTdFRDkxMDQ3RDc2REExM0UxRkEwQ0ZEM0QzNjZFNkZGNgotOjEwN0Q1MDAwQ0ZDNDc1NTZBMzY5QjM1MjYzRTNDODdBRkMzRTIzNkU2MQotOjEwN0Q2MDAwQkVBN0U3MTg1OTk4RDYyNzRBNzAyMEZFMDJBMzE4REI1MQotOjEwN0Q3MDAwREFGQkExMTFGMzVDRUE3QkY3MTNGRTI0RERDNEUzMzFFNwotOjEwN0Q4MDAwMTAxRjNGNkFFRDBGRUI4MEY3QzdEQ0RGQjk2MUVDNjhDRAotOjEwN0Q5MDAwNThCMjAzODJDRjAzOUIzNjYwNUNEOEE1RDcyNUYwN0QwRgotOjEwN0RBMDAwNEFGOTgwMUMyMEIxNzMzRjQ2QjNDODFGRkFDMDg2RUE2NwotOjEwN0RCMDAwRkNCOEIyNjgzRkYwN0Q2MEYzNzRBQzJGMUZDQkJGOUY1RgotOjEwN0RDMDAwNzhGRjk2OTdENjUwMzI0ODA3OTdBMzZBQjREMDk3MUE4RgotOjEwN0REMDAwNTczNjI3OTU2RDUwMUUxNzU3QjYyN0Q1M0I5M0VBRERDQQotOjEwN0RFMDAwNDlFNTdDREVGRTU0NkFCODUwRUYwNUUwRUZFRjlFOEU2OQotOjEwN0RGMDAwRjk1Q0E3NzJDMjczMzFGRjZCQTMzRTM4QkQxQUNBMEQ3RQotOjEwN0UwMDAwRTU1Q0NGMzZGNjJBNUVGMkUxMDlGQzM1N0FCOUZENjcwQQotOjEwN0UxMDAwRjM0NjhDOTg3Nzk2NTJERTdGMTBFNTQ0RkQxRUM1QUU4MgotOjEwN0UyMDAwMDAzRkQ4NDIzRDYxMkFFMzc3OUVCOEVGNDIwQTdENTc3MgotOjEwN0UzMDAwMUYzQTRBREYwREQ5N0ZBOThFRjg3RDQzRTkzMURFMkU0NgotOjEwN0U0MDAwRjQyRUU5RjM3NTZEQ0IyOENFMkVFM0M4N0FFNkQ3RjI4RgotOjEwN0U1MDAwOTQ1ODFDNTlDQUNCRDMzOURBNzMyNDJGRjcyOTc2RTQwNgotOjEwN0U2MDAwQ0YwMTNBQzU3RUUzRkMzN0IyRkQxQkUzN0E3RjhCRTY5OAotOjEwN0U3MDAwNDJDQThBMEY1QkQwMkVGRDYzQzNCQjEzRDE0RTdCNDMzNgotOjEwN0U4MDAwRTg4NTRENEE3MDM0OEVCQjk1Rjk0N0EzREVGQjY2QzM4NwotOjEwN0U5MDAwODhGRDNBNjhGNzk2MjFEMjhEQjFCMkQ1RjczRjQ5RjhGRgotOjEwN0VBMDAwN0IyQjM1NTI4MEY5NzQyRDU5RTFFOTk4NEZGNzU2NTZERQotOjEwN0VCMDAwQTQxQkYxRjlGQkFDRkRCQ0JFMjA1MjgwRjk3Mzc3REQ0OQotOjEwN0VDMDAwRkYzRUFGMUYxMUU5QzZGMkUzNTlCRkU3RjVFMzIyMDUxNAotOjEwN0VEMDAwN0EzQjZFNzU4RTRDQUY4NkZBODdFRDgzRjNGNUVENTlEQwotOjEwN0VFMDAwNUM5RTQ4Rjg4Njk3NjhDQkIyRDAwRUFCRTdGQUE0MUIyRAotOjEwN0VGMDAwRjYzNjY2OTA5QjczOTc5QzdDRkM2MUMwQzNEQ0VGQTQ1NAotOjEwN0YwMDAwOTAzQzdCRjhENEY1RDNCOTlEMURGMEE5MTVFODg3RTUyMQotOjEwN0YxMDAwN0ZBNEVGNDg2RUFCQjRGRkNENDExRDk3MTE1QjhGRDRBQQotOjEwN0YyMDAwQzI3RTBGRTk4MzhCOUE3QkQwNkVDODlFM0I5NkY0QzFDQwotOjEwN0YzMDAwNTc5RERBMTExQzU3M0VCRjlGMDc0RjY4N0YyNENCQ0U1OQotOjEwN0Y0MDAwRTVCMzVFNDc3MUU5RUNFRkE2OTI5RDc1QUY4NUNGMDc2QgotOjEwN0Y1MDAwRjg4NkQ2RDcyNkQ2RTNFRTJDQUVCRkVFQ0VFMkZCQjc0MAotOjEwN0Y2MDAwNDVDRTJCQTlCRjlCODU1RERDQjkzRUI4Q0IwMkY4N0YxRgotOjEwN0Y3MDAwNURFNkJCRENDN0VERUM1QkI2ODM1QzAxMzlERUU5RDBDNgotOjEwN0Y4MDAwNzI1MDlFREMyMkYyRDdBNEZDQzBGNzE5NzFGQjhCQ0U5NQotOjEwN0Y5MDAwMzIyOERCNjJGQkM4Q0U5OTVBOEVENTg5NEY5NzBFRTMwMwotOjEwN0ZBMDAwMkY1MjFFNzUxNkYzRUZBNDVFQ0E2RUU1RTM2NkRGM0I0MwotOjEwN0ZCMDAwN0EwN0NFMjM0NUU1N0VBNDA1NzM0NkVFNjgyMUZEM0U5MwotOjEwN0ZDMDAwOEJFNkNEMzQyRDQ3ODFGRThFMkYxRUE2NDNGRjkyNUM5QgotOjEwN0ZEMDAwOUZFQTEyRUQ2MUFDQkY1OUY4RTdFNTNBQzlGNTNDMjJEQQotOjEwN0ZFMDAwRTYzRDVGMEZGNjAxQ0NGMzc3MkUzRkNEMUZFQzg1RjExOAotOjEwN0ZGMDAwQzI4RjQ1RjZDMjExNUNFM0FDMTg3RTk5MUE5OTg4RUZERQotOjEwODAwMDAwRkYzRkMyRDM0QjVGMDY5RTFBNTY4MkJDRDA1RDgwQkMzOAotOjEwODAxMDAwMTBGOERCQTQ4NDBERDk1QzVFRDBCRTE4REZBM0RFNzkzNgotOjEwODAyMDAwQ0NFOTdGMEJGQjk3RTNDRkZENkUwM0Q5ODcxMkFFOTRBQgotOjEwODAzMDAwM0I5RUFFQjk5MTlEQ0I2N0M5RjZEQjA5QjE1RUQyQ0U0RQotOjEwODA0MDAwRjQ0QTdGQTQxOEU3QUREN0NEMTQ3Rjc4Q0IxODIyQjlCNgotOjEwODA1MDAwRjkxNkVDNkI1QTUwQkU4OEY4NzlDNTc3OTZCRTgyRkI0QwotOjEwODA2MDAwM0FEOUVGNzUyRTlFRDc2NzkxRUJBRUY4N0ExNjE2NjM2NAotOjEwODA3MDAwM0UwOTBCOTg3MTFFMzM4REI0RUU1MkVGNzYzQTc4N0UzRQotOjEwODA4MDAwNDhFNzlENzk5NDFGNzI4NjQ1MThGOTM1MjczMTkyOEZGQwotOjEwODA5MDAwNDAwNzU0MUZCREM5NDVGQzBGRUQwMzE2NkNCRkY4MjIwNQotOjEwODBBMDAwNkEwRjc0MTEyMEY5NzA5Mzk1RjYyMTlEMTg2RkM2RkEyNgotOjEwODBCMDAwOUI0QTgzOThDRjgyRkI1RkEyQjdDNTNBMUE3NzEwN0FBMgotOjEwODBDMDAwRTE3RUUzNTEzQzVGNDJEMjhEQUI5NUZCNjc5OEFBOEQ3MAotOjEwODBEMDAwOUYxOUE3RTcyRjcyNzEzRjUxNEE3OUU0QzlERkEzN0Q0OQotOjEwODBFMDAwQkFEMTQyRjYyOUVBNTg4QUVENzQ2NDUzM0ZCMEZFOTkzQQotOjEwODBGMDAwMkVCRUJGMjczQUJCRUQwN0E5MjIyRkNENUI4MTc4NUQ0RAotOjEwODEwMDAwOTdDQUU5QjJDQkMyRTM0RTVENjAwRjkzNUMxNEY0MkJDNwotOjEwODExMDAwRjNFMkZDQzJERThCRDRFOUQyRDA1RTI4NzYwREY4MERGNgotOjEwODEyMDAwMzREQ0M3OTNERjFCRUFFNzQ1OTRBM0I4RkY5QTE3RDA2NgotOjEwODEzMDAwODc0REI4OUY2QUJGNTI4QkM0RUQ0N0YwMEZFMzc2QjcwNwotOjEwODE0MDAwMEFCOUNBMzYzM0YyMDNERThBREZBNTYxRkZENjM0OEM2MgotOjEwODE1MDAwNTNERThBREZBM0RGNzVENTk1MDlGMUI4NEI1QzlDQkY3MAotOjEwODE2MDAwMjU3Q0M5NzJGRjEyMDk1N0M3MDM1QUZDMzhCMkZGRTRENQotOjEwODE3MDAwRkU2MDVGNTlFRUNBMjIzQzg3RDM3MTdENUJGNEI0N0UwQQotOjEwODE4MDAwQzk3MDQ2MzY3M0ZGNzU2NDczMTFEMTlERUM2RjI4Mzg0MgotOjEwODE5MDAwRkY0QjFGRkRCNjAyN0E3MEUxNTRCRURGOTZGQjk4MDVENwotOjEwODFBMDAwNjIzRkNDNTYyNUVFRDNEMDVGMzI1MEQ2OUY1QjRFREU3OQotOjEwODFCMDAwRjc2MTlDM0RCMTNEQjc1QjUyQzY0NjhEQzRCNzFFMjVFNQotOjEwODFDMDAwMDE3RTg5QUZBMUYwNzBGMzE3QzQ5QkQ0N0IwRjU4ODA1OAotOjEwODFEMDAwMEYzMjcwM0JBRDEwRkQ2RUJFMzM4NUY0OThEMzE4MUM4MgotOjEwODFFMDAwOEQ3NEI1QzBFNUExNzY1QjMxREY4NUY0MkFERkZGN0VCMwotOjEwODFGMDAwRkM4QUY0NUYyNEVFN0I5QkFDRDE2RDg4QUYyNjJCMjNFOQotOjEwODIwMDAwN0UzQUJEMkY5NUY4ODc5NTQ0RTY2MkJFRDg5OUJEMjY4MwotOjEwODIxMDAwODZGNERCQTg0NDQ2QTJEQzNBQUQ2OEI1RDRBRTI1QzVFOQotOjEwODIyMDAwODM3QzI0RkQwMzZGM0ZDNUZEMDM0RDg4NDk4MEFGMjk0MgotOjEwODIzMDAwRjA3N0NBNTc2QURBOTNCODFGM0UwREZGRDUwMUREOUY2QwotOjEwODI0MDAwRDY0NTJBQjAzRjI5MEZDMDhFRDZDODNFQUFFMzcxOUNGRQotOjEwODI1MDAwNDYxRDBCRTAzRUVCMzJEREJDQzU5Q0NGNzNEOTBFN0FEOAotOjEwODI2MDAwN0Y3NEU0RjIzODNCMUREQUY1MjkxOTlDN0M5MDZGRUFBMwotOjEwODI3MDAwMDUxRTFCNzVDN0E4NUQzREU2MUQyMTNFNzFCRjg1RkUyRAotOjEwODI4MDAwMkVBQzhDRjNDRjM2NkU3QzlGRjI5RTFBNzcyN0FFNzc5QQotOjEwODI5MDAwN0Q4QzFFOTRDRjE0RkMyRThFM0U4ODlGMDM0MjFFMzA5MAotOjEwODJBMDAwRUVCN0E4RTY3MUU4NTQ1MTRFQTlFOUE3M0NBODI2RTEyQgotOjEwODJCMDAwQzdDODNBMTA5OTg2NzIyNUI1M0NDNEU2QzFCM0U5MDQzMwotOjEwODJDMDAwQjczNzI2Rjc2RTdGMEVGN0M3OEU5QUZFMDI2NDgzMjZCNQotOjEwODJEMDAwRTFFRjkzRUIyREUxQkNCNEY3M0VGMjVCNDgzQjI1NkUzQQotOjEwODJFMDAwREYzOTdBNTY4MkZGNjAwRDdEODdGQjU4MUMyRjgyQUZFNQotOjEwODJGMDAwNzI5MDBDQjg3RURCMjRGNDFCRTg0MTkyQjcwQjNBNDYyRgotOjEwODMwMDAwOTExRTQ0M0Q4NUYyNDlFRTgzNTE1RUExOUNGOEE3QUJENgotOjEwODMxMDAwQUEwN0Y5NzU1Mzc2RDU2M0FFMkMzRTFFRDlGNUI4QTlEOAotOjEwODMyMDAwQkE3NDY4M0Y5REM0OEY2Qzg3RkJFMUNGRjNDM0Y1MjIxRAotOjEwODMzMDAwREQ2NkM1RkNFMzA0NTEzOUU2NEQ2NzQ5QkYxQkM1RTc1RgotOjEwODM0MDAwOTYyQjlFNkNBNERCNzdGNDdFRjJBRjJENjIwMUYyRjdFMAotOjEwODM1MDAwMkM0NkJGMTYzQ0VCMDVCRjJGMTQ3RUEyODVDMjNGODQ3RQotOjEwODM2MDAwN0VEQkY4MzgyMkZBNEZFM0NCNEI1ODNGOTcxQjNCNEQ0RgotOjEwODM3MDAwQjFGQzFBRjRFNzU0QjM3MDJBRjRENzgwRkUyNjdDODY0OQotOjEwODM4MDAwMTJCRjZCNjQ1MUZBQUU2OUNGNjdBNjg0Mzg2NTI3OUYyOAotOjEwODM5MDAwRjdBRDYyRkQxREQ1NDEzRENBODkyRDE2RUU2NzkyRjJGQgotOjEwODNBMDAwNjNGMjJBRUU4RjRBOUZBMDE1REY4NTc0RkVBMjgxRkMzRQotOjEwODNCMDAwMTRGRjJERDY2RDQwQ0ZCQkFBOUU0MkJENjJENUYzRjMwQwotOjEwODNDMDAwNjhEMUJCNEMyNDM3OEY4MzNFRUUxMUZFOTE1OUI4MEYxNAotOjEwODNEMDAwNURDRDM0Q0M1RjY3QUFCRDMwN0U5RjJBOUYxQkY2NUFDNQotOjEwODNFMDAwRUE5MDdFREU3NUU5MTJFOEVCNDcyRTlFQ0Y0MzdFMjNBRQotOjEwODNGMDAwOTJDQjI5QTQ3NzQxN0M4QzQ3RkFBQTE4MjZGNTIyMUIzOAotOjEwODQwMDAwOEZGRUFBQTM2MkRGREM3ODgzQ0Q4RkZENDU3NDVDREUyRQotOjEwODQxMDAwRkNDOUM1RjcwMTdGNzJGMTdDNEU1OTFFRDhFNzA5RkFGNQotOjEwODQyMDAwOTFGMTNGRjRERkM0RkJDRkZGM0VEMEZFM0U5MTc3Q0IwRQotOjEwODQzMDAwNjhCRTlCMTY4QkZDRUUwMTNBRDY5MTVDNEExOUVCMjM4MQotOjEwODQ0MDAwRjk3Qjk5QUU4QUU0NTJGNDNEOUIwN0YxNTJGMzdFRkQyRAotOjEwODQ1MDAwNjI5Q0M3NDc3M0FDNzQ4RUVGMzZFMUNGNERDOTc2NTAzRQotOjEwODQ2MDAwQkZEMjdGN0JCRUI4NThDRDg2RDEyNDJGNjVGQjM0RENDQwotOjEwODQ3MDAwQTA2NDlERUIwN0RFMkJFNEQ4NUVDNkUxMEQ5Q0IwRjI1NAotOjEwODQ4MDAwN0MxMzk1MDU1MEFFRUQwRDhEMEUyMkJDQjVDMkZGODA1QwotOjEwODQ5MDAwRjYwRENBRDdFODkzN0MxRDk5Q0FFREExQkRCREUzODI1NAotOjEwODRBMDAwNDhFRjQ3MERGRTJEMEJEMDlGRDM2MzIwRkYxQTUzODM1NwotOjEwODRCMDAwQkIxRUMxN0U5RUNERjE2MkZFQ0Y2OTVENzREQkFGQTBCNQotOjEwODRDMDAwRERERTEzOEZFNjYxQkM2N0FGRjBCQkQ3MUJDMzIzQzlFQQotOjEwODREMDAwNkUxNkY5OEVGNTY5RTE5MUU4MDdGQTg1NThBRjdBMkJBNwotOjEwODRFMDAwOTRFMTdEQUFDNTNGMkEzQjJCMTYxN0MzRUZGMEZEQjFERgotOjEwODRGMDAwMjBCN0NCOEYzMTRFMDc4MThEM0NFRTA5RjhDRDU5ODBFNgotOjEwODUwMDAwRjBBRUNGQTZCODFBQUUwQkFFQzNEQkZCQzZEMUJDMzZGRAotOjEwODUxMDAwMTk0NEZCNjcxNDZBQUZDQzJBOUQ0QjdBNjE4MzI5MTNGNwotOjEwODUyMDAwRjE3RkM2NjdBNDdDRERBNjdCQjlERDM4NUZFN0Q5QjZFRAotOjEwODUzMDAwMTI2NUU1QjMyOTM0QkYwNTlEODcyOURFRDFGNDgzNDU1MwotOjEwODU0MDAwNzQwRUIyNjlDOUFBRUJEOEU3QzQwMTUwQUZDNEZCQUYzRgotOjEwODU1MDAwNEZCMzY4MjFFRDg3RUI4Njg1QzIwMEM3RTlERUQxNUVBNwotOjEwODU2MDAwMUVDNkUzRTc2QTFBNDU1RUU4NzEwM0QzMTBFRUU4M0VFMwotOjEwODU3MDAwNDM3MEIwRjM3RTQzRjU4RkYzQzVGRDI5RUEzN0YyNzNGQwotOjEwODU4MDAwQzdDNzVCNDgxRjI0QzY1RkNFNTczRTZEODg4Q0JDMTM5RgotOjEwODU5MDAwQzY1RjlCRTlCRjI5M0JDRTVFNkM3QTM2ODdFNEREREJBNAotOjEwODVBMDAwRjdGQ0E1OTBFQzhBMEUxRTJGMzg2RUQwRTYyMjlGMzg3RAotOjEwODVCMDAwQUFDM0M2Nzk3MTc2RDhCMjZDNkU5N0NFMzcwOUZCMTExMwotOjEwODVDMDAwRTQ2MDNDREZDQkZBOEFBQTQ0M0U5M0NGRTY2QzZFODcyOAotOjEwODVEMDAwQTQ4QUZDODA3M0VCNjVGRUQ5RjUyNkQ0OUZEQ0I1ODRCNAotOjEwODVFMDAwRkQ3Mjc5NUQyNEUyNkU5MzRGNDRGNzYzOUU1NTdEQTgzQQotOjEwODVGMDAwOENFMjdBNDVBQkMyQzQ5NzgwRUYzMERBRkZDN0I3QTRFQwotOjEwODYwMDAwNzI3OTAyRDNDNDdFMTY0RTYyNjRCRjJFRDRGMzdDODc4NwotOjEwODYxMDAwODUyNkIwODdCOTFFQTdGNkVGNkNDOTI2M0M1NEFDRTE5RAotOjEwODYyMDAwNzY2MEY0NDk4NUU0QTI4QzNGRDYzMkZFRkREMzZENDdENwotOjEwODYzMDAwMDM3QTY4NUZCQjUzMjkwM0QxQ0E2QURCMkEyOTFGNjIwOAotOjEwODY0MDAwNDk1NzMxQURGRjY0MjE3RkU3OUJCNDkxNUI5MERFOUU3QgotOjEwODY1MDAwRTZGMTJCMTg4RkVDRUU3QUNDRjk5QTQwNzJDOTg4RkFDMQotOjEwODY2MDAwQjA2RUE3QzJGMERDQjA5QzdGNzJCQzhGMDUxM0UzMkQwNwotOjEwODY3MDAwOTM0MzVDN0VBM0RFNjA3MUY2OUFENDQzQTgyRjU4OTI5MAotOjEwODY4MDAwMUQ5OTQ4MTc4MTA0QkRENzhENzg5RDE4OTNGRjg0QjEzQgotOjEwODY5MDAwQ0ZEMTgzNjA0RjZGNDNGQUE5QThFMkZDMTdFRDUxMDhEMAotOjEwODZBMDAwQ0YwREFDOTlDNzg3ODQxRTFBODA0N0U4QjE3N0Y0NUM3OAotOjEwODZCMDAwNkYyRTM0REQ0N0NGOUZFMzIxQjAyQ0Q0ODMxMUFFMDc1QQotOjEwODZDMDAwNDFBRkExNUMxQzhBMkU3RTNFMDQ1RDQ4N0FEODJERTgxRAotOjEwODZEMDAwQTNGRTA0MEI1RjBFRTNENUFGNjJFMTg2RjFGQzk5M0E4RAotOjEwODZFMDAwOUVGNDMyRDdDRjY2QUU5RkYxNjlCRDAwM0Q5REFDOUYzMQotOjEwODZGMDAwOTNGNTcxQjIxRUNFMzY3MjdEMkJFOTIwREU0RjhGRjZEOAotOjEwODcwMDAwQzhFNDU1NDEzREY3QzNFNkRCMzFDRjRGQUVDQjIyQTdERQotOjEwODcxMDAwRDY5Nzk3MTVCM0I3OUE4RTk4Q0Q5RThCQjFFQzYzQzM1RAotOjEwODcyMDAwNkNFODVGQUFGNDE1QTBGRjVDRTVFNzhENTMwMDRGREIxMgotOjEwODczMDAwNzFGRDg0N0Q3RTc5MDE1RjQ3QjdDOEU3MzFBODNFNTY1OQotOjEwODc0MDAwNjZDMzc1RUFBN0ZENzQzNDhCNTE3RUI2QzQ2Rjc3MkE3MQotOjEwODc1MDAwN0MzNzAxQkZFM0ZDMzhGMEJEOTlCNTU5RTNCRUFGREExMQotOjEwODc2MDAwNkIyMUZENzJGNjk5NTQzQTU3QzY1NDdGOTEwM0ZBNzMwMAotOjEwODc3MDAwQkQwMTc2M0E5NDRGRUY0RDI1RkQ3RTVBQzg3QkE3RjQ5NAotOjEwODc4MDAwNUJCMEI1QjQxRUVGRTIzQTRGNDRBQUFCQ0E0M0ZGMkYyOQotOjEwODc5MDAwNTNBNkU3MzEzQTZGQ0RFREM2MDZDNzUwN0U3QjUxNUZEOQotOjEwODdBMDAwREM3RjAzQTczMzEzRTlEOUIzOEVDOEVENTgwNjc4MjhDOAotOjEwODdCMDAwNUZGOEJGMDRGRDM2RUQ5RTVBRjY1RDhDRjNGQjZDNUVGMAotOjEwODdDMDAwOEU1NTdGMTlEQTBEMjZGRDhBMUJDQzdBM0M3N0JGMkE5RAotOjEwODdEMDAwN0EyN0NDQTNBMUMwNDY3OUM4RDU0NTZGRkVFRTI2MjhERQotOjEwODdFMDAwQkZCN0RCNDBFNzE1MTczRjdDN0Q3QTE4M0Y1MzM1Rjc1RAotOjEwODdGMDAwNjBGQTc5NzFEMDkwNzAwRTZFRTlDRUM0NzI0MzI4QjFFMAotOjEwODgwMDAwREM5NDc0RUU3REU1OUJEQjVGRUE4QkFCMzdCQjUzOUQ1RAotOjEwODgxMDAwQjRGRTFFRTZDNTNDNkFBNkZGNDZCQTdGMTA3OTI5OUZDMgotOjEwODgyMDAwN0Y1OTFEN0NBOTZGMDRFNUExQTVCQjc5N0U4RDExRUQ1MwotOjEwODgzMDAwOUE3OTQ4MEY4MzdDNzczMDlCREIzNTI2NTNGMzA5Q0MzQwotOjEwODg0MDAwNjczN0ZEQzI0NEU3RTNERkM4RjZCQkRERTg1RkQ2NDUyNgotOjEwODg1MDAwMEZFMjdBOUE4QTRFOEQ0NzNENTg1NUY0MEY4QThCOURDOAotOjEwODg2MDAwRkQxRUYzMjI3RUNFNUEyQUM5QkUzOUJCQzVFMkMxRkQyOAotOjEwODg3MDAwNTk2N0ExOERFOEEwRjM1OTI1QTg3MEZCN0RDNkM0MEFFRAotOjEwODg4MDAwOEM4M0QyMUM1OEQzRTZBQkRGRTM4NzJGOTg5OTlGQTc0MAotOjEwODg5MDAwODdERDhCMUJFNThDNDZGQkE5Nzc2NjVBRUQ2QkUwQkI0OQotOjEwODhBMDAwQkFDRDVDREZENkIzRkUzNDk0MDNERjc0OEJGNUQzM0ZDRgotOjEwODhCMDAwNjYzNEMzM0Y4QkRCQjREMTJEMDBFRjUyOUY5NUNFRERFNAotOjEwODhDMDAwQTg5RkFBNzRERTdDMUQ3NjE5NjdGRjk3QkJCOTNDNjgyOAotOjEwODhEMDAwMzA0NzhDOTUzOEZFM0Y1NkQ0QTA2QjRDRkFCOTRDMDYwNQotOjEwODhFMDAwQkY4NkU3QkIwQzdCQ0FDMjc5RjA2QUQxQ0FFNzY4OUYzMgotOjEwODhGMDAwMzMxMDRGREVDN0U1RDZBMjNCRjdEMzdCNjU1NjBEQ0RDRgotOjEwODkwMDAwRjcxRDk4MkZFMkU1QjkyRDI2OUFFRjNCMDUzNkRBNjc3OQotOjEwODkxMDAwQkVEM0NERjdCRjhCRUNDNkEwOTlFQzhENEYzMkYxNUM4NgotOjEwODkyMDAwRUMzQkREMDYzQThGN0UyRTNFQUVBMkYzQTlFRjc2QkQ3QwotOjEwODkzMDAwNDA3RUI4NzcxOTFGMzdCMDVCNEZGNkNBQkJGNjY4NDU2MwotOjEwODk0MDAwMThGMUU4Njk0RTQzN0JCNzZFRjM2MjNBREZCQUE4NUI3MQotOjEwODk1MDAwRUY0Mzc5QjZBOEZCREJCRkJBMTRGRDQ3QjM2RTJFQzc1MQotOjEwODk2MDAwMjk1REUxNThFMUYyRDg2MkY1RDI0RTU1MzMyNjNEODJCOQotOjEwODk3MDAwN0M3OEM1QTc1M0ZCQUY0MDdCQTkxQkY4QTQ5OEU3Q0YzMQotOjEwODk4MDAwQTM5RERFRDc3RDE1RDlBNThCNjY1QTFEMzgyRjRGRDdFRAotOjEwODk5MDAwQzNEMzUwN0ZCQzNCMzM5N0NFRTMyRTdBNUM2MTc4MDUxRQotOjEwODlBMDAwQzMyMkM3NEExN0JFNUZBNEE4QkVDMUU4RTlFMzZDM0Q3NQotOjEwODlCMDAwRTFCNUIyQzhFNjBERTM3N0JGRDUxMzlEMDA1RkREODA1QQotOjEwODlDMDAwRkFCM0ExREI0MDc2NkZERkFDRDc3Rjc3OTMzM0M2NTcxRQotOjEwODlEMDAwQ0FBQ0NERDc0REM2RjYzRjMxNTBGQjAxN0JBN0VCNUE1MQotOjEwODlFMDAwNDkyRjJDNUM4MUZCMkE4RUI3NjQzRTMzMTVBRDFBODk2MgotOjEwODlGMDAwNzAyNUYzREJBMjM1Q0QyMzc5RkNFQThCRjExREVCRTI4OAotOjEwOEEwMDAwRTc3M0VGNzBGM0ZCMjNCRTAwREY3REZGOEJGMDFEQ0IyMAotOjEwOEExMDAwQ0Y0OEQ4NEY5RDJCREYwMkQ0NEVGQUZGQ0Q1RUE2M0Q0NgotOjEwOEEyMDAwNkNBMzc4QUZBNjgwRkNGRDA5MDZBQzI3RTI5MzlGM0JDMAotOjEwOEEzMDAwNTJGRkJBN0NFN0FCODA5RjMxNkU3RjA3RjI2RjExRDM5NAotOjEwOEE0MDAwQ0E1MDZGN0FBMkY2MkEzQzUzNjQxM0Y2MUNFQjMyQzk2MwotOjEwOEE1MDAwN0QwMEQ5Rjc5QkIyRDgyMzFCRTJGQzBGMEZCQUY5M0U3OQotOjEwOEE2MDAwMDlFNEMwMTZFQ0U3RjQxRkZFNzExMEQ3QTlCMUYwRDRFOQotOjEwOEE3MDAwNzhGNEZCMzY3REYyMjc4QTE3REE3QTc5QkNEOUU2OEQ0RAotOjEwOEE4MDAwNTIzQ0RERTBGNDExMUQ0QUY5REVFNEU1RkEyNzc5NUU5NwotOjEwOEE5MDAwMjdERDA2MUVFNzc1NDZBOTlGMTc3MjNDNTRFRTE0RjFCOAotOjEwOEFBMDAwOTVBRDJCQURFNDRGRERFQTBDNUFCODdGMjFDMDUwM0ZBNQotOjEwOEFCMDAwQ0Q5OEE0RTc3MTMyNjE2RjVEMkJGQzkxRTZGMkU3MTg2NwotOjEwOEFDMDAwQzZDN0Q4MTQ5RURGRjU2QUY5NzM2QTI2OTQ3RjM1RTkyNAotOjEwOEFEMDAwNEEyRjlEQ0IyQjdGQjA3RDE4Q0U3QjhBNDFENDBGQTcyOAotOjEwOEFFMDAwN0IzM0ZFOEY1NjQ5RjVDQkREN0EwRkYyRjc4QzcyOUUwMQotOjEwOEFGMDAwREZDOEVBRDJDODZGRjI2QUY5REJDRURCRTJFMEY3MzExOQotOjEwOEIwMDAwQjNDNzA2NzQzMzBCOTgzNTNFOUZFRUJBMjkxNjhGMkRFNgotOjEwOEIxMDAwOEU3RTNFRUE1MDZBQjhEREVCNDk5RjNEOEVGQjQ1NDhBQwotOjEwOEIyMDAwMUY5NzI3RTI2M0I5REI0OEUzNkVDQUFFRUM0M0JBQjlEQwotOjEwOEIzMDAwRTJBQjdDM0Q0RTNFNkUwQUEyMUMzQzI5Q0VCOTI0RTMzQQotOjEwOEI0MDAwRUYzNzZFRTFBNzUzNDcyN0M0RUQ5REM2NTAyMUVBQzkxMAotOjEwOEI1MDAwRjc5NUM0RUY5NkI0RUIyOTZFQkVCODVENjE0MTE4RUY4RQotOjEwOEI2MDAwRTRBRUE3MEI1MTlFQkZGN0YwRDM4NUYzRTJFMDQ5RkVEOAotOjEwOEI3MDAwNEUzRUZGRTgxNkY0MkFGQzgyQzk3RURFQTFGQ0JCQjJBMQotOjEwOEI4MDAwREQ5OUNEQ0M2RjFFMUU2QjdGQTZFRTZGRTRERjlERDcwNwotOjEwOEI5MDAwMkJGQ0MzOUE1NkUyQzRGRDkwNjg5RkRDOUYzOTk3RDNBMwotOjEwOEJBMDAwODdCMjQ3MjFCRjg3RjQ2RjFFM0JGNDIwNDY1MjA2RDY5QQotOjEwOEJCMDAwQ0ZEMjVCQUM4QkNGNEI5NENGQzk2MkREQUVDNzc1ODM5MAotOjEwOEJDMDAwQTk1OERBNzk3OUE4RjUxQThBMUY3NzA4M0QyNEQ3RURENAotOjEwOEJEMDAwNThGQkYwNzRDNEEzQjFEMUE2MzI3RURFQUMxNEVERjUxRgotOjEwOEJFMDAwNkU2NkY1MjIzRkZENDVFNEE3M0FBREYwMDQzQkNEOTgxMwotOjEwOEJGMDAwRUJCNkExM0M5M0U3RkJFRkIwQTZFREMwRTc1RjQ0RkUwOAotOjEwOEMwMDAwQUFEMzBBNEZFOEE3MjBCNzk0RkFGQjhCQ0U0N0ZCQkE0QQotOjEwOEMxMDAwM0JGNDFENzQwRTMxNDVGMDQ5MzYwQjJCMEE4NjM2OTYwRgotOjEwOEMyMDAwM0VBNTUwRkU1NjdCMjJCRTVEQUQ1QzhGNDQ2QjhEQTQ4RAotOjEwOEMzMDAwQkYyNERFMkY5Qjc3M0JFRDVGMDc1OUFGQ0Q0ODQ3Qjk4NwotOjEwOEM0MDAwOTNGOEJCRUE5QzYyRTFFRjg4NTAxQ0MxMzI4OUQ5NzE2QwotOjEwOEM1MDAwN0ZERjdBNjk4MEUwOTBFQkQ1QzQ5QjMzQTU1NzIxRkI3OQotOjEwOEM2MDAwMTlGMzU4NTIzMjI4NUUxQTEwNEY2NkNCNjAwM0YxODMxNQotOjEwOEM3MDAwMTRCMURGNjU0OUYxODI2Q0IwQkJCMTlEODQxM0NBOTQxNQotOjEwOEM4MDAwMEY3M0FGMjNENDMxOTJDNzVCQzkyRUM1N0VGMUZEQkNGMwotOjEwOEM5MDAwQjEyQUY5REJCMTlENzFDMkY5RTk2RjgwNEU0NTdFRTFFMQotOjEwOENBMDAwMENGOUJFQ0UzQTY4N0M2MjA2OUVGM0MxNzUwMEZEODg2MQotOjEwOENCMDAwNzYyMUYzMUExMkNFRjk3NDgxM0Q4REZCMzQxOUZGRDU1QwotOjEwOENDMDAwRUI0MjY1NkVEQTlGRjQ0N0QwN0Y2MkFDMzA3QjUwREZCOQotOjEwOENEMDAwQTZFODQzQTVCODdFQzlGMTYwNjg1N0NDRjMxMEYyMUQzMQotOjEwOENFMDAwQTg2N0U0Mzk5RUM2OTU1MzdEMThBNzAyRkIyMzYwQzY4QQotOjEwOENGMDAwRjU5QkM5RDdBRkYxQ0U0QTdBQUZDQzJBNkQ0MUZBNkE1QgotOjEwOEQwMDAwNUFDNUU4QkU4MUE5QkQzRDk0RUZENDU0QzNFREIxQTZDOAotOjEwOEQxMDAwM0Q0NzhEMENFODc3OUVGMEU3MzBFMTdGNzY4OTc1M0QyMQotOjEwOEQyMDAwMjZFQ0VGNThCQzJCQjIwREYzQjczQjE3RTdEM0I5RERGOAotOjEwOEQzMDAwRTRCQzkyMkYxQUVGM0M5MzBBMDhCOTM4MkU4RTk1NkUzOAotOjEwOEQ0MDAwRTY3QTQ2QUNCRkU0NkYxOUQ3NEExREVCMkI0NjRCRkNDNQotOjEwOEQ1MDAwQzUwN0RFN0JEOTlBRjU0NUYyNDY5RUJERTc3M0YzNDYxQgotOjEwOEQ2MDAwRDhGNEVCQjBERThDNTZCRUE4NDczMDQwOEYwRTlDQ0JCQgotOjEwOEQ3MDAwQjM3ODI4RUUzNTUwOEZGNzI5OThGNzI4MjJFRkU0RUNFNgotOjEwOEQ4MDAwQjU1Nzk2NTBERUE4RThBRjZGMjNFNjdGREY2QjYxMDkyOQotOjEwOEQ5MDAwRTNDNUMzQTcyNkY1NkY4MEZFNkQxRUQ5RkVGODM1NTdEMwotOjEwOERBMDAwQUExNEZGMTVGMDRGREQ4OEU3RkFFRTM1MjRGNjQ3MjRDNAotOjEwOERCMDAwMjhDRjExOUE2M0UzRjlCQTdFNzBDRkM2RkM5ODNFMDdCQwotOjEwOERDMDAwRkRCRTMxNjc2MjRDQUZBRjdCN0Q0NkM3QzUxRUU0QUZDOQotOjEwOEREMDAwOEYyOTBGNTdFQUU3MjYyN0NGMjM0OTk2NjMwRkU0NzBDMAotOjEwOERFMDAwNzkwRTc2RjEzNDU0QjlFQkU2MkNBM0ZCMDcwNkUyQkYwQgotOjEwOERGMDAwQkRCNTFBREFDMzMyRkVEQkI0Q0E0N0Y5Qjg2MDBGRkM1RQotOjEwOEUwMDAwMjg4N0VDODE1M0VGRUM2NzY4Nzc5RUE0N0Q0MUQzMjdEOAotOjEwOEUxMDAwMkFGNzEzODE1RDgxRjdDOTk4N0IyQkM5MUY4QTY5QTY0MAotOjEwOEUyMDAwMjNFMkQ2N0Y4OUQwNTM2OEMzMjMzRjM0NzVEREY4QjA4MQotOjEwOEUzMDAwMUVFQTNGQ0VEMTFFQTI3RTBEODNERjI3QjUyRjg3REIzMgotOjEwOEU0MDAwRjE0REE1NTU1QjUwMUVCMDg3MTRCQUNGNjk0M0U5NDc3MQotOjEwOEU1MDAwNjQ3NzM0M0U3M0U1QzRGODdDRjJDNTdCRUVFN0Y5Qzg2RAotOjEwOEU2MDAwM0IwRDgzQ0U3RjVGMEU4RjBCMzczRUYzMjRGOTNCNEZENAotOjEwOEU3MDAwMDZGOTMxOTgzQTM1QjgxRUVERDBCQTNBMUQ1QTVFQUNCMwotOjEwOEU4MDAwM0M1ODdCMTNEOTAzNzM2MDFFMzBBRjA3NzMzODdFOUE0QQotOjEwOEU5MDAwNzY1RTFGQzBGQ0Y2MjZGODRGODE1NzVCN0QwQjY5NUYzRAotOjEwOEVBMDAwQjA3NThFRDk4NjcxOUNBNkQyNzlDQjg4RkVFRDU2MEQxMQotOjEwOEVCMDAwRTc5RjBDNjcyQ0NFNkNBNTczQzgxQkY2MTg2QUQwOEU4MgotOjEwOEVDMDAwQUEwMEJCRTlFNzAwNkY0MUM2RjQxQTJGQzhBNTNDN0Q5NAotOjEwOEVEMDAwNEZEOUI3NkMxODc3MUY1QzJGREY5MkM3RUQ4MDM2QzU2RQotOjEwOEVFMDAwMTdGODVBMzlGOTM5NTk3QzFFNEZEMTFFNkU5RkJEOTYxRAotOjEwOEVGMDAwQzNFRDQzRjlGRUI1MUM2RTM3NEUwOUY0NEY0NTlBN0IxRQotOjEwOEYwMDAwNTY4REE0QTA5RERDQzRCNDBGNzFGRkNCN0MzNjBGRjk0NQotOjEwOEYxMDAwNzcxOThGQjMzQjU3N0JDOEJGNkI3NjQ2RUVCRTk4RUM5NAotOjEwOEYyMDAwMjg5NUUyQ0M3MjdGNzFGQTE5RUUxN0JCMjJENzdGMTQxNQotOjEwOEYzMDAwRDdCMTQyMUZGOUUxRDcxMDZGNzdBQkMyNEZDQ0U1NENFOAotOjEwOEY0MDAwRTFGNUI2MDlFOEM3QjIzODIzM0ZBQ0YxNTBGRTBERjlBMAotOjEwOEY1MDAwMjVEMjJGNkZBMzc1NzhENkM5RUM4ODlGQTk4MTVBNTU2MQotOjEwOEY2MDAwODlEMzMzNTI2RTRDMUQzODg3RTMyNEZGNjkxNTE3NkI4NAotOjEwOEY3MDAwNkMwNEFDRDYzQjY2MjJEMUI2Q0YzMjYzNzZDMkExN0ZGOQotOjEwOEY4MDAwQ0M1NkYxQTVCNDFGNzQ2NjNGRUQ3M0FBRTdDMEJFMTFCRAotOjEwOEY5MDAwRTk3MjZERjRBMDBFRkRGNUNFN0VCMjFGMUI0MjBBOEQ2NAotOjEwOEZBMDAwRDM1MEZBMzNDQThGNUIyQUYyQjAwNkYyQTFENDA4RTU5NwotOjEwOEZCMDAwODdGRDNEMjc0NUU4QzczNjRFMEZBQzlGRjZDNUVDMzExRgotOjEwOEZDMDAwOEU3RkQwOUI5NDM3MTZCM0UzNUJGOEJENjdBMjNGQTNCNwotOjEwOEZEMDAwODgzMzM0MDgzRjBFMjA4QUVBOERCOUMyQUUxMzdFOERFNQotOjEwOEZFMDAwNTg5RTFCMUY5N0E5OUU4QTc4QkZDM0E2OTlBMDQ5MDhCRgotOjEwOEZGMDAwMkU0RjFBQzJEQjZFRjVBNUU3MDI1Q0M3RUE3NDg0QTJBNQotOjEwOTAwMDAwNjNFRDI5NzRCRkQ0MjZBNTVGNDM3RjY0QTA4Q0U3QzVCOAotOjEwOTAxMDAwMjZEMzUxODkxODM3RkQ0MDc0MUFFQTkzRTgzMzQzRTVBMwotOjEwOTAyMDAwQzVGMjNDRDgyRDEzMkZBMjdDRjJGMjNEMUY0RTQzRkExRAotOjEwOTAzMDAwNjAzNThDRjhCMTcxQ0Y4NUU1QzU4RTE2RUJGMUE1RTdFQgotOjEwOTA0MDAwQzU3QTE1NkQwNzNDMkZDOTc1MjRFNkM1N0EzOURFNjVFQQotOjEwOTA1MDAwN0MzMjM5MUZGNjc0NEU1OEU1Nzk2QjkxNkQwRkUzRkU0MwotOjEwOTA2MDAwN0I4Rjg5RjIzRDY2RUM3OUUxMDhGQTI3Njc5ODU5ODg4OQotOjEwOTA3MDAwRTJCNTQ5NzZDMDYxRTdGNTUzMTBERjY3M0U3ODY3REJGQwotOjEwOTA4MDAwNUQwQ0YzQTI5RkYyRjI3MzkyODk3QTdEMjhCQjlFNjJGNwotOjEwOTA5MDAwMTY3MUZCQkZFQkU0RkE3RjQ5NzZCRDk0QkI0RDYyOUYyRQotOjEwOTBBMDAwRjRCRTEyRkRDMTQ4OUNERjNFQkQ3REIwNzMyREI3RTQxOAotOjEwOTBCMDAwQ0EzOEQ3MTBGOTFDQkQ4M0U3NzNDODczNUYzNTkxRTJENgotOjEwOTBDMDAwODRGOEQzODIwMTdBRkU2MkYxQUMzQUQ0ODExM0NGOEQ1OQotOjEwOTBEMDAwNjdBOTIyM0Y0QjU1QjgwODYwMEU5RUJGMjNFMzU5NkEyQgotOjEwOTBFMDAwQ0Y2ODhBNTM5OTYyRjFBQzMwMUIyNDlFQTU4QUY4RDBEMAotOjEwOTBGMDAwM0E4MzU2NEJGRTk2N0QyNjBGREYwRkZCNDgwRUI1RjVFMwotOjEwOTEwMDAwNjQ3OTUxNEUzNTJEMzlGOTA0MUVDRDU3MUREM0RDQTg5NQotOjEwOTExMDAwRkZEQjA0RkVFQjJGM0M5RUQ1OTIzQkYxREM3OEQ2NzY0QwotOjEwOTEyMDAwNjE3RkJENURBQTBCMUIwMUFGREIxOTk3QTM4MTVFMTk5RgotOjEwOTEzMDAwRDdEMkQxRkUzNDdBNEYwMUMxQURDQzMyMTNEQzZGM0ZCMAotOjEwOTE0MDAwNkJEQTgxN0VBNkY5MzI1RUY1MkNGNzkzQ0QxNzcxQTkwMwotOjEwOTE1MDAwQjc2NzhEMjQzRkQyNTA3ODlFREY5RUU4RjdGRjIxRTI2QgotOjEwOTE2MDAwMzk4QkZDNzhFNDZGQkZGRDNGNjY5MjlGN0QyMUZBRTk2MQotOjEwOTE3MDAwODdDN0NFMkYzMEUxQUZGM0I0RjNGM0VEOUU5RDBBREQ0OAotOjEwOTE4MDAwMkY4QTY0QTIyM0RCRDI0RUY3OEMyRTA1NzFCODE1NDVDOQotOjEwOTE5MDAwNjgwMEE4RTYyQkYwNUFEMTI5NjhENzc4REFBMDBDQzY2NwotOjEwOTFBMDAwQkJCQTVFMERCOEExRERGNjIzMjlFNDFGNUNFN0Y0ODhBNQotOjEwOTFCMDAwRkMzMzFFM0YwRTZDNTQ4MjIzNzhCRjc0QUY1OEEwNEQxMQotOjEwOTFDMDAwQTc2MTNGM0ZDRkU1N0VBNTk3NzNCOTVGQzI5Mzc0MUYzOAotOjEwOTFEMDAwNDE5QjQxQzQ4MUM1NzgyRDBDRDYxRDlFM0E4NTNGRDc1MQotOjEwOTFFMDAwODk3QkVCOTJGMTIxRkI2QjMzMzQ5QkQxNEYxNzJERTA0MAotOjEwOTFGMDAwRjc5MzlDMzU2QTczQzg3RjlDMzE5MkVFMjE2QTRCNkQ2MAotOjEwOTIwMDAwNkVBRkUxRjVDNEIzNjcyRDUxMUZENTVGQUU3MkMzOTI0NwotOjEwOTIxMDAwNzkzMjEwREU1REI5MjJFRjJFMDlDRjBCM0ExMkNCQzk5RAotOjEwOTIyMDAwRjE5QkU0NzM1M0YzOTk3RjU0Q0VGMDczQ0YxNUVENDI2NQotOjEwOTIzMDAwQjkwOUZEOUZERDUwMkNENkM1NEJGMTkwMzY4M0U3RDc5OQotOjEwOTI0MDAwQzUxNDA3RTVGNzBDQjVFNDczQkNFOTBBRjg3Mzk4QTNGNQotOjEwOTI1MDAwOUFFRThCMDM3RUUxRjYxOEUzRjAwRkJCRENBOTIwQkY4QQotOjEwOTI2MDAwQjQzOTM4RERGRUJCNzAyN0MzRkI5QkRDOTE0NDVGNkRENgotOjEwOTI3MDAwMEVDRUFGNkRFQjk1MjBDNzE3ODdGQjQyRkQxRDFGNEEzMQotOjEwOTI4MDAwQjlGNDI1QzlDNUI3MTVFRjIzRTE2MkZBOEVFNDQzRTBDRQotOjEwOTI5MDAwMUUwM0YxREQ1RTBCM0YwRjI5RTUxNTI1RThFMDNFNTI4OAotOjEwOTJBMDAwRUM1QkZGMkVGNEQ2RkMxMzZCRTlCRUEwQUQ3NUMzRDIwOAotOjEwOTJCMDAwMzBFRTM5RjU3QTFCQ0RBM0YxNTk3RURFQjY2MTU1QTRBNwotOjEwOTJDMDAwMTBFOUJBQjEyQTMyQjI3OTEwQkNFMjAwQUE5NEFGRDA0OAotOjEwOTJEMDAwNkU5RTkzRjE3QjY3REExM0UzNzhDOUYxRDlCNTk5OUE1OQotOjEwOTJFMDAwMDVFMzNGRjdFQkRFRUU3OTAxRDdCQkM3NDI3QUIyNzFGNwotOjEwOTJGMDAwNTVGNDExRjQwM0RDOUNFOUI3RTcwMTdEOUNCQUYzRjU2MgotOjEwOTMwMDAwNjk4QTg3M0UyM0JCRkNDQ0JFNTE3NDRFNzA1RTVCRTIyMwotOjEwOTMxMDAwQjkyQkI2MzEzMTNFQzhEQTMzRjhGOUIyQ0VDNEY3Nzg5QQotOjEwOTMyMDAwQkUyOEUxQkI3M0UyODVEQzRFRDk2NEY0OEY0NjNCRjI4NAotOjEwOTMzMDAwOEFBRkYyN0M4ODBGMTZFQjE4QUVFQjA3MTZCRUZFODFFMwotOjEwOTM0MDAwN0I1Mjg1QkNGNjhFOENENzA3RTNGMjg2NUE1RjY4Mzc2RQotOjEwOTM1MDAwMTZFM0YyM0MwRjU0QjY2RkMwRjU4NTc1QUQxN0VCRkIwNQotOjEwOTM2MDAwQzE5MzVGMTk4OUVCN0JBQUU3MkIyMzcxN0QzNzE5M0FFQgotOjEwOTM3MDAwMzRFNDhGN0ZCQUZDNjU4OEFGRTM1N0ZBQzhDRTkzNzk5RgotOjEwOTM4MDAwQUYxNzRBNzc1QURFRkZBRTNFQkU1NkUyRTUwQkVBNjMwMAotOjEwOTM5MDAwRkM4QkY3N0YzQ0ZCMEY3REMwNDJGQTg1OUYzMzhERjkzNAotOjEwOTNBMDAwRTE0RUQyN0Q1QjY3M0VEMTI5Mjg4Rjg3RUFFRkJGODVFQQotOjEwOTNCMDAwREZDOTZENjYwMUY0Nzc1NDU0NDVFOEJCOEFCRkU5MThFQwotOjEwOTNDMDAwREE3NUQyOUU0RDg2REYyRkUwNUY5NkE3QkQ5QzgzRjNCMgotOjEwOTNEMDAwMTA3RURCM0FEMUI3MzlGODMxQjc5QjFGNTJDODJGNkJEQgotOjEwOTNFMDAwRjYwNEQyMjZEMzNFNjlDMTI1N0E5MjJGM0ZBNzczMEY4OAotOjEwOTNGMDAwQUM1N0IxRTM3RTYzRjE0MzJENTQ3RjdBQ0Y3Q0FBRDc3QgotOjEwOTQwMDAwOTlDMzYxREM1NzM1NDAzRDk2RDc0RDQ5Q0M2MzM2RUU2NAotOjEwOTQxMDAwRTY3MTFEQjk4RjA1Mzg1RTQwMzg1MjlDNTEyM0QyNjdFMgotOjEwOTQyMDAwMjNEQUM5MDA2MkEzQ0FGREQ3OEQ0RUU2MEQzMEI0NkJCNgotOjEwOTQzMDAwMTNGNzdEMzIzRUJCRDVDN0VGNzNEOURBQUJEMEJENEU0MwotOjEwOTQ0MDAwMkVBM0JGMzgxRkQ3MzUyOTRFRkJGRDNDQUQzQjJGMkUzOQotOjEwOTQ1MDAwNUUzRUQ3QTUwNUIwRUMzNEIyNDJDNEQzQkEzQzhFQ0Y0MQotOjEwOTQ2MDAwODg0MTlFQkY0QTNDMEY3ODY4RkYwRDY0MEZGRDk5Rjk1MwotOjEwOTQ3MDAwRDIwN0NGMkIwQjI2QzREMTE3OEE3MzlCMEJDNUI5NERDRQotOjEwOTQ4MDAwOTREM0UxMjQzOTFENUZBRThGQ0IyQjBCMEY5NjFGMTBBOQotOjEwOTQ5MDAwOTc1NzE2RkY1RDdDNUU1OTM4NDE5RTc1ODg3MzBDQ0JEQgotOjEwOTRBMDAwMjk3RUREMDQ3NEJFNzI0MjhDMEVFQjk5RjhEQjFDN0RDNAotOjEwOTRCMDAwOUJDRUIxRUMzNDkxN0ZBQzVFRTQ5NTM2RDUxREEzN0Q5NwotOjEwOTRDMDAwNDcxMzlFOEJFMUZDQThGMTczRDFEQzFFQUE4N0ZEMUMxQgotOjEwOTREMDAwRTVENzg2MTJGMzRGNzcwRjI5MzdGRURGRjhDMTdGMjlEMgotOjEwOTRFMDAwRTU4MUUwNDczOTJGMzk4RkZBNUU4NUYzNEYxMjlDQzkyOQotOjEwOTRGMDAwRkJEODY0N0ZCNkRDODc1RUIwRkZGRjdGNTkyRTQ1OTJCNAotOjEwOTUwMDAwRjBGMEFGQ0FBNTczRTIwMjI1RDEzNEVGOTcxMDE3NzhCNwotOjEwOTUxMDAwQ0ZEM0UxNDJEN0EwQ0MwMzZFREZDN0YzODBBN0U5NkRCQwotOjEwOTUyMDAwMUE4RjQzRUE3OTlFNDI3MjNDRDYzMzhERTI4RDMyRkUyOQotOjEwOTUzMDAwNkI3RTRBMUY1QzUzNENFREJEOThCRkQ1QjAyRjk1RjJBMgotOjEwOTU0MDAwMDZFQTNDNzU2NDc3MjdDNzIxOTdCMDlFNjlCODE0N0ZGNwotOjEwOTU1MDAwNjZBRkQwMzlBQzdGM0JGRTlGMkZFRTA5RjZCMEUyMkYwRAotOjEwOTU2MDAwMUFGRkNGRTdGQkFFMEI4QTQzM0U2N0ZCMzhEMzFGNDc5QQotOjEwOTU3MDAwMkY1NTYzQzE4MDFGM0I3NDdFNTY0MTNFNUZGRjE0OTE5RgotOjEwOTU4MDAwMjc2MjU2MDNDQzExRjdGRDUwREY4REM4RTc3OTVGQ0YxNgotOjEwOTU5MDAwODlCQ0EyN0I1MzUzRTgxQ0JFREJDOENGMURCODc1M0MwOQotOjEwOTVBMDAwRkZFOUUzMUNERjI4ODRERkVDRTFFQkY5RTM2NzZFNjQ5RAotOjEwOTVCMDAwNzg4RUVDQzc4NjEwOUQ4QjBGMzREOEJDQThDN0E0RkY0QgotOjEwOTVDMDAwNDhGNkRGOUVDM0UxQkE1MDNFOUE5MkZGRTVGMkQxRjkyOAotOjEwOTVEMDAwRTRDN0I0N0NFNThCQzVEMTM2MDMwRUUyRjgyQjk5MUZBNgotOjEwOTVFMDAwODZGQTZFMjhGOTcyNjNCRTZGMTZBNzBCNkQzQ0M1MUYxNQotOjEwOTVGMDAwMkU1MDJFQTU5NDgzREM0NjNEQkREQkU0QzFGRDAzRkE2RAotOjEwOTYwMDAwNTE0ODNGNkVDQzkxRkI2RjdFNEZDMEJEMDVBNEJGM0U1RAotOjEwOTYxMDAwQjBGMEZEODQzQ0M3MzM4MEJGMjFGMUZEQUZEOTc5QkZFNQotOjEwOTYyMDAwNzNGOUVBRjNEMUJFQUJENEU4MUNDMEJBNTRBRTVGQTI2MgotOjEwOTYzMDAwQkI3ODFFNTBGMjc5OTY2NEJEMjJDRjYzQzhGMUJFRkY5RAotOjEwOTY0MDAwMjVEM0MzMTc5NUFCNzdDQkYxRkY0REI5MEE3QTk2RjZDMAotOjEwOTY1MDAwMkY0M0M2NUJDRkY5M0UyMEYyMzFGQjM1OTFGNzQyRTc0RAotOjEwOTY2MDAwMUEyNDVDNERGRDNDN0ZFRTQ3ODI3RUU1RkJFRjA5RkQ1MQotOjEwOTY3MDAwMUJDOUQ3QkE5MEFFNEVGREMxNkNDNjc4NjY3OTM5OTdEMgotOjEwOTY4MDAwOUY4RDNFMUJDNTAzMUE0MzNDNEZBNjcxMTVBMzdEQkY5QQotOjEwOTY5MDAwM0NCNzNBQzZFRDdGMDRENzZGRERFQjM2QkE4N0I0NzFCRAotOjEwOTZBMDAwQ0ZGNkY2NjE5NDQ3RTAyN0ZCRUVGNDFGRjhGQjM3QjJFNAotOjEwOTZCMDAwRkQ4RjYyQkJBNjU1OTE4NEI4NDNDNTY3MUZBRkFEMjkyNgotOjEwOTZDMDAwMjc3ODY5REZFRTM0MjU5RTA3N0EyNTlGRUZDN0U1RjNGQgotOjEwOTZEMDAwQzUwMUZDQzJGRTA0QkUzQjU1QzdGM0I1OUI5QzlBQkRCOQotOjEwOTZFMDAwOTJGMjA3Qjg1RjNCQzVEMzRGN0VBMEM2RERBNDI0MTgxNQotOjEwOTZGMDAwMjU4RjYyRkQ3N0YzODk2RTFBNzc1Nzk2RDE3RDAwMjEwOQotOjEwOTcwMDAwNEIxOUREMjdGMzA2QkY3RkU5RDQ5REI5NDEzREY3ODNBRgotOjEwOTcxMDAwRUY0Nzc4NTNDQjgzNTdBMzlENTkwNEUzQTA0OTdBQUExNgotOjEwOTcyMDAwRTdFQTMyRjIwRjI2RjE5REU0Qjc4MTczQTBCNzk4ODM4MAotOjEwOTczMDAwQUQ0QThDMUYzNzE5Qjg5RTk0RkFBRDI3REZDM0ZEQ0UxMgotOjEwOTc0MDAwNEU5MTA3RDgzQjkzMkRCMEM1Q0EzNjY3NjI3RUU0QjIwRQotOjEwOTc1MDAwQkMyQjdCNzA3RDdBRjI1NTExQkZFNkYxRjI2MjMzRUNERgotOjEwOTc2MDAwM0U4NzlENEI4N0M1MjI1RTNFNTNFNDM5QjA4MDM5OTZEMwotOjEwOTc3MDAwREYzMEVDRkNGMTcyMDk5RjJDQ0I3ODc5Q0EyN0UyQkU2RQotOjEwOTc4MDAwN0ZCQjkxRTgyMkI1OURDQjBEMDY3NDgxNzZGNjk0Njg3NwotOjEwOTc5MDAwRkY1NDNDN0Y1NUQyMTk5RTgyRjg0QTQ3RjQ1M0JFNjk2NAotOjEwOTdBMDAwRTRFRThCMzEwRTkxQTk0RUMxMzhDNEI2OTUxMzBFNjAwQwotOjEwOTdCMDAwN0M1NDVEREY3RjM5MkU4REE3QzM1RTg1NUJDQzMxNkUxNwotOjEwOTdDMDAwREZFOTdDQjIwNzlCNEI5MUZFQUI3RTZCRTA3OTg5RUJDNgotOjEwOTdEMDAwNTM0OERGNzcxNkQ2NTM1RUUyRTlENzREMDlFNzZEOTIxRAotOjEwOTdFMDAwOUYwMUI2QzY4RDdFQTM2MUVEQkZBMTM4NDBFQTZFNjVDQwotOjEwOTdGMDAwRDA3Q0QzNzEwNTM2OTFCN0I4QzY4RDdFQThENEY2RkU1RAotOjEwOTgwMDAwQzAyNEY0QUJEQ0EzRjBCQjFDMDE3QUM1OERGQjdGNTVGMwotOjEwOTgxMDAwODc3NkM3RkMzREZDRkNGNkZDMEU0Nzk1OTlFNEE5QzI4RgotOjEwOTgyMDAwRTMyODUzOUMyNDI3RDVGNUQ3RTg3MDlGQTZCNjMwQkExNQotOjEwOTgzMDAwMzdBREE0ODBERjlCM0FBMkQzQUVDMzc1RkZFNUE3RkE4QwotOjEwOTg0MDAwNDFFMzYzOTkwNUIxM0MzNzQ0NTc4MzI5N0FEMDVEMUNDNQotOjEwOTg1MDAwOEJFQkM5RkNCNkExRUUyMzk3RkEyOEQ5OUUzREM3OEVBMwotOjEwOTg2MDAwMTVGQTY4QzA5RTRGQTJFM0ExQkU5M0Y0MkRFOUY5OTdDMwotOjEwOTg3MDAwMDY0Njc2RDgyRjE1MzM5REVCOTI3NEREMjZGM0Y1M0YxRgotOjEwOTg4MDAwRTU3RUREMjI5MTM3NzM2Q0MzREZDN0YzNzNFQjMyMkVCNQotOjEwOTg5MDAwMTJFNEY3NzExQTIyNkJGMzA4NUY5MUFGMDY3MERFQkIxQQotOjEwOThBMDAwMURCQUM2QjFFNDBGNkJBNDdFRDZGM0ZCQ0U4QURBODc2RAotOjEwOThCMDAwQUY5OTU0OEU0RjNCNTMwMDg0NjM3Qjk3MTYyMTVGMDYwQwotOjEwOThDMDAwODAwRTQ2MEM0MjA3MUZFNUYzNzMyN0VBRkExNDVBMzc1NQotOjEwOThEMDAwRjUzRUJBRTk5OUE5MEUxN0FEOUI3QTNGNUY5RjUzRjkwMAotOjEwOThFMDAwN0MzRTMyMkUyQkZEOTY5MTdDN0Y1NUMxQzRCODczNThCNwotOjEwOThGMDAwMkJBREZDMUM5NjM4RTc5QkJBRjJGNUM3RjE3Q0QzMzY0QQotOjEwOTkwMDAwRTEzRjNFRjBFQzE4RkE5RDg2QjNFQjU1MDVFREQ0QjM3QwotOjEwOTkxMDAwOEU1QUZBNURBMjZCMEJCOEJEOTRBQUY2MzNCQjJEOUU4RQotOjEwOTkyMDAwM0UwRjUwN0VFQ0IwN0QzQ0NGNEYxNUU3OThENUY1Q0U3RAotOjEwOTkzMDAwRUQ4OENGQUYzQUZEOTQwNzdDNzk1Qjk4N0VDQUUwNTlGOQotOjEwOTk0MDAwRkI3MThBQjc4MTVENDRFNzU1NEYzRUEzNDhCQjI4NDE3MAotOjEwOTk1MDAwMUZDQTdENUJGMjdFQUNCNkUwN0ZENjRFQUEyRjQ4RjREQwotOjEwOTk2MDAwN0I1Q0YwM0U4QjI1RUUzNzA3REFDQkZENjNGMjdFMjI3RgotOjEwOTk3MDAwRTlGQkExRUMxRkE2MDUxMkYyNUQ1NjhCM0M2OEE5REYzRQotOjEwOTk4MDAwNzM4NTZDOTQ3OTMwMDNFNzk2NTlEMDgyRTcxRUYyOTE4MwotOjEwOTk5MDAwMjkyN0M2RjI4MTk4QzgxM0RBQUM1OEJENjgyRjBEOTVGNwotOjEwOTlBMDAwMEYzNDkwQUZDMzlBMkZFNkZFQzhFNkFGRTA1M0U2MTMzQwotOjEwOTlCMDAwQzk3QzIxMEJFNjhENjQ5RTlCMzc2MkMxQkM5MTRDRkMzNwotOjEwOTlDMDAwM0QwQjdFRkU1OUU2N0RCNDFBM0M5NDQ3MTJGODFFQTM2NwotOjEwOTlEMDAwNzhBMDMyQUI4NkZDNzUxOTNFMjNEMURGMTkxNkRDODJFNAotOjEwOTlFMDAwRjdCOTA3NjZEQkU4OUMzNzlFMEI0MkJBOEYyQTZFRUEwRQotOjEwOTlGMDAwNzc2QThEMjZEQkVCQjBGREMwQkQ4MEI1OENFQTMzNEFCQgotOjEwOUEwMDAwQjQxQ0I0QzMyQzUwOEZGNzE1MEY5QzdCNUVDMEVGNEY3NgotOjEwOUExMDAwNEZDRTFCOTFGOTRCMzI5RTlCM0JFQTI5MDVGREEyRThGNAotOjEwOUEyMDAwRjZBNzNDODI2Rjg5RUY4QTc5M0Y5RERGRjQ5MERDNzA2NgotOjEwOUEzMDAwQjVGMkZDQTRFOEE1Q0M4RTdFRjkyQTI5N0ZDQzg5RUI2RgotOjEwOUE0MDAwQkE0OUYxMTcyMzdGNkVCMkYyNzNGRkREQ0NEQkFFODcyQwotOjEwOUE1MDAwRjIxRDA1QzNCODVGODc3OUY2RUI0ODYwNzdEMEVGMkYyQQotOjEwOUE2MDAwNzQzQUI1QTcwQUIyNjJGNDI0RTE2MjlCRjlCQ0NGRTA3NAotOjEwOUE3MDAwMzkyRjI1MzZERTk5QzU3RjJCNDRGQkFBQUFEN0M0RTkyNgotOjEwOUE4MDAwMzI2OUZDQUQwM0Y3QUUwNDJEQTg0RjVFMkU2MDQ0NjcyQgotOjEwOUE5MDAwREUyNDdCNTczRTVGOTZGQzI2RTRCMjFDN0ZBOEY5NDk4MgotOjEwOUFBMDAwRkEzQzlGMUQyRkU5NkYyODdBMEI1NDg5NzU3QTJCODUxNAotOjEwOUFCMDAwRUMwRjQ5NkYwNzU2RUZBNDdCMDFGQjU2ODdFODc5QzY4OAotOjEwOUFDMDAwQTI4NEY0NzgzRUQ2MTI5RDhCOTJCMTdGREI5RkFFQzMwOQotOjEwOUFEMDAwN0IzOUNFQTQ0NjBCRjE1RThGMzc3RkZDRDdBRkUxQkQ1QgotOjEwOUFFMDAwMUQ2N0IyQTI2RjYxRjk1NEUxMzgxRkQ1OEY4ODZFQzMyQwotOjEwOUFGMDAwN0IzRTc0M0ZFRUUxRjVCODlFQjk2MEJGMTczQ0YyQjUwRQotOjEwOUIwMDAwODA4REVFQzk1QURCOEY3QUFCM0MyOTFGMjVFOTNFODI1NgotOjEwOUIxMDAwMTRGMTdCM0VEOTM2MjNEOTkzRDkyMkFFQzdBQTg1NURFRAotOjEwOUIyMDAwQ0ZGOEVGQTJCNUU2OTQ1MTFDQ0ZDNjNDQkJGQkIxM0VDQgotOjEwOUIzMDAwREZDNEVGMkQ2MDQwRkY1ODNGQTI5OEU3MzUzMDNFNkZGRAotOjEwOUI0MDAwOTYyRkZDRDMyQzEyQTBERkU3MkI3NkQwRjcwMzcyN0M4NAotOjEwOUI1MDAwQjc0OUM0QTdGOEY4ODc5RkU0NzE0NDk5OUZDQjk4QkQ5MwotOjEwOUI2MDAwMDBFRDIxOUI4NzI1OTRFNTdEMUU0Q0I1MTdFMEY5RkQ5RQotOjEwOUI3MDAwNTZFOUY3MTNFNTI3NTNGQ0M2QzIzOEJEN0NGOENBM0I0QgotOjEwOUI4MDAwQzZEMkVGODQzQ0Y1REQxMjk0OUI1NzE5MTNFRjU5OTYxQQotOjEwOUI5MDAwQ0ZFNzhCMzg5RDlDMTFGNzA5MzZBNUY4RDMwQjYxREQxMwotOjEwOUJBMDAwOEZBNENDOUQ4NjU3QzNDRUM5QUMzNDNBQzg3RURCQTUwMgotOjEwOUJCMDAwNDczOTk1MjVFOEMzMzE5QkMzRTdBOEY2MjlGOEZCMUM3NAotOjEwOUJDMDAwRjIzRUJGMkNCRjRBN0UwMkU2RUZENEEzNUVDRDNBRUU1MgotOjEwOUJEMDAwQTNCQ0JGN0E3M0I0MTA3RjQ3RTUwNUIzM0YwRkUxM0NFOAotOjEwOUJFMDAwNUI3QkY0NzY4QTE3RTYxRTdFMEJGMzM0MEUxQjNBQTZENwotOjEwOUJGMDAwQTZBMTFFMjkxNkY3NDI2MDQwMTZDQTA3RjM4QTY4M0ZERAotOjEwOUMwMDAwMzgyMDFGNDYyODE0Q0Y5QzMxOUI5RjVGOURDRTQyMkE0RgotOjEwOUMxMDAwQUVGMzM0M0IzRjRGMzVBREJDRDhEQjBBRTNDRDEwNzkxMgotOjEwOUMyMDAwMUVEMzhFRjhEMjUwQkU0REJCMzFBMkYyN0IyQkEyNkE1RQotOjEwOUMzMDAwN0M1RTg1N0MzMkI3QzExM0NGMEY1NzdCRTJDQTBDRUYzNQotOjEwOUM0MDAwMUQ0RTJDNUZFQjREMkM3RjZERDJBN0EzRTJDQkUzMTQwRQotOjEwOUM1MDAwQUQwMkU3RjkwQjQ1RENGRjAwRjI4NUNGOEJFNzBGM0U0NQotOjEwOUM2MDAwMkFGNjczNjNEQ0NDNUM4NEY5OEQ0RTI1ODBGQjg1MzE0QwotOjEwOUM3MDAwNEZFNzUyOUNFNUU5NDk4Q0NBQUU5REU2MURFNkY4RjkyRQotOjEwOUM4MDAwREZBN0UzNzE2OEUxMDc5N0JGMzM4NDc1QTg2RjlGRkE3OAotOjEwOUM5MDAwODM4QkYwRTVCMjgxQkM3NTkyRjQyMTdBM0IyMEY4RjYxMwotOjEwOUNBMDAwODBFMEQzOEEzQ0IzMTVFNUZGMDE4M0E3OEJFODNDRDU2MAotOjEwOUNCMDAwRUM0MTNGRDVGRTU0MjNEREUzREFCQThDRkY0RTgxOTJBRQotOjEwOUNDMDAwNjY2NjQ2RTg1NzNGOEY5N0ExMUREODA2NTBBRTMwNTNDMQotOjEwOUNEMDAwNUVDODAxOTE2RkRERkEzRDk1RkM1QzU4OEZGN0VCRUFBOQotOjEwOUNFMDAwN0Y2MDI1RkY3Njc1NUFFOTM3QjA1RTlGNjZBNEYzMEU1NAotOjEwOUNGMDAwRkI1MzJCRkM2MjNDQkE1RkZFQTE1NDczMTg3RkVGMjAyQwotOjEwOUQwMDAwRjkzRUNEQzMwODE3RTIwREUwN0E5OEMzNDFGQ0E4QUYzNQotOjEwOUQxMDAwMzA5MjFEMkVDRjlGNDMzRjE0N0ZEM0U3OUE2OUJDMDMzNwotOjEwOUQyMDAwMEVGQjdFQTRCQkQ2RjdDOEQyODNGQTQ5MUVDQ0UzOTJDMQotOjEwOUQzMDAwRjQ1RDlEMzY4OTdFM0YwNEI4QUYyNEZFQkU3NEJEQ0I3MgotOjEwOUQ0MDAwRUJFMUU3NjZGOUVGNjI5NDBFRkM0RTA2MEMwQkVERjBDQQotOjEwOUQ1MDAwMzc4NTE4RjEyRDhGRTcxNTQ4QkMzMzU1QzNGNjM5NENCQwotOjEwOUQ2MDAwOTZGOUI5MzFENzQwQjk1MkE1RkI3RjE0NTk2RUExRjJDQgotOjEwOUQ3MDAwMDNBMjVFREVGRjc5QTg5MENCMjlBNUY3ODVCRjIyREQ3RgotOjEwOUQ4MDAwOTZBNDAxNUU2MDlEQkMyOTgzOUY1QjdBQTA5MEYzRUQ1MQotOjEwOUQ5MDAwQjlFQjU3RTE0NkJGQkY4MkYzMUMxQjlCRkYwMTg3RDc3RQotOjEwOURBMDAwRUQ4QjJCMEZCMjJFNDFBNEI3RTQ3NTM5NjBGMTdBRDA1OAotOjEwOURCMDAwQ0Y3NkZFRkUzODVFRTUzQ0Y0QjkxQzlGMDNGM0M4MUM2OQotOjEwOURDMDAwN0MxRTg3QzQzQzQyRTI5Qzc1NzJGREVFNDI2RUJGN0VGMwotOjEwOUREMDAwODlGMzFDOTRGRUZFRTU3OUJBMTJFN0Y5MjVDMjE5NTEwMAotOjEwOURFMDAwQkUwNDM4RjU4NTAwOUYyRDA2MUZGRDBDNTgwNUNBNEQ5MQotOjEwOURGMDAwNEU3RkQzNDU5RTMyMkI0RENDNEI2MjkzQkM2NjZFMkY2QgotOjEwOUUwMDAwMjZFNjIxNURBNTc0QjVBMTdFN0Q0MEM0Qjk1RjEwN0NCNgotOjEwOUUxMDAwNzUzMEU1RkIyNTY4NkZCRDMwNzc2NDFGQzlEQkY0OTZBQwotOjEwOUUyMDAwMzY2NDJFMjk5RkE1RkMzRjlCNzNCNDAyQ0JBMDA3REVBRQotOjEwOUUzMDAwNDQzRDczRkJCMEMzNzNCMUYzM0VDNzAzMjVBOEFGNDBFNQotOjEwOUU0MDAwNkVGRUIxNzBFMkI5NzA0QUZFMUQ4MDE3RjgxN0Y5NDgyRQotOjEwOUU1MDAwRjI2RjMyRkM5MjhGRDg3NTIxNEFDQ0VDNjY2MTdBQkFFNwotOjEwOUU2MDAwMTlDRjgzMDdCQjg0RUUyQjY3OUU4MkQ4RkM4MEM5QTdERAotOjEwOUU3MDAwOTk5QkY5M0M1QTAyMDRGNzU1OEUxRjUyRkVERjU5OEYwOQotOjEwOUU4MDAwRkYyMzg0NkJDRUM1MUZEMjdENDhDQzVEM0IwQUY1MDgwRAotOjEwOUU5MDAwQzBGQkYxRkYyNkJDMjA5RjcyRjBCREI0RjM5M0VERkEzNgotOjEwOUVBMDAwRjNFNTgzNEIzODkzRTVBMTg0NDc5OUI1OTNFQ0Y4MjYwNQotOjEwOUVCMDAwQjBFMzc5QkVCODQyRjJCRUE5NEVDN0U1RjAxRTg1RUMwQwotOjEwOUVDMDAwRkE0NkQwMzNBOEE3RTRGREJBNTc4Q0I0QjZFMUJEOEZFQgotOjEwOUVEMDAwN0IwRERDOUYxQTc4RDJFNDQ5QkMyNzI5Mzk2RjVDRUNGMgotOjEwOUVFMDAwMjc1NjMxQjk1RkUwRjc0MTM0RDhGOTNENDg0MkNGNzQ4NQotOjEwOUVGMDAwN0U3Qjk4QkMyNzg5RUI0M0QwNTMwOUY3MjRENTdBMTI4RgotOjEwOUYwMDAwRUY0OTFBNjJCRjAwRkIwMkIyQ0Y1OEJBNEVFQzBCQjg1MQotOjEwOUYxMDAwOUVFRUJDRDQ2MzBGMzBGMjNGRjNERjdCQkNDOTI4RUM2QwotOjEwOUYyMDAwNDFDMDg1MkI3NjhGMUJFQzAzRTg3RUJBQUYxNDE1OEJFRQotOjEwOUYzMDAwN0JCMjgyRkNGNzM1ODRGRDlGRUM4RkZFQTdDQjNGQjk0NwotOjEwOUY0MDAwMDhFODdEQzE1OEFEMTA3RkVBNjVCRTkxRkI5QjgxREVCQwotOjEwOUY1MDAwQkFGQTE5QTYzRjM2M0Y4NEY3OTU1RUNEOUE1RkQzMERDNgotOjEwOUY2MDAwMjc3QUQzQjBGRDlDMzExRkYyN0I0QzYzRjQ1NjU5OTQ5MQotOjEwOUY3MDAwQzVGNTEyMkE5OUYzRjFGMTYxQTc3RjdBRDE0NEM0NUY0NAotOjEwOUY4MDAwRTgwREJDQ0Y3QzZCQUY4OUYwMkRGMzRCOTNGOTNCMEUwMgotOjEwOUY5MDAwOUVFMzA2MEU4RjUzQUYyNzc4NjYwRDA2Q0Y4NUQwN0RFMgotOjEwOUZBMDAwM0M1RDY1MzM0RURGNDNEMTNGOUVFMzQ4OUQxMEEzRkZFOAotOjEwOUZCMDAwNzE4QUJGMTZDNzFERTA4M0I1N0NERjc1MEVEQzdBMUI4NgotOjEwOUZDMDAwQURGNzBEMzdGMUI4NUM1MzhBREMyNzZCMzM3MjVDRTg3MAotOjEwOUZEMDAwODdFNEUzREZCMDlFRDNDNTBEQjUzQzhGNjg2NjZGMDNBMQotOjEwOUZFMDAwQzVFMTU4MzU4RkFCNzlFMTdGMDhDRjAxMjFERjY2M0JCMgotOjEwOUZGMDAwQ0IwQzQ4N0E3RjY2REYzMEEwOUY3M0Y2OENDNEY4REIwOQotOjEwQTAwMDAwMUNGMzU1MTRFRkJCNjFCNjIxRTFGNzJBMjUxRUU2ODg0MwotOjEwQTAxMDAwREZDMzlFOTNGNDNCOTVDOTc4NDk4RURCMERDODAzMzFBRAotOjEwQTAyMDAwREYzQ0ZDRkQxNjc4RTYzMzdFN0UyNjQ3RkNBRTU4NUJBRgotOjEwQTAzMDAwRDFDMEY5REU1MTVGMzBCRTc3NzdEMTE3ODhFRkY1MTlCRgotOjEwQTA0MDAwQTI3NDRGQzNGMzU5OEJCQTk2MDFERjhDRkFEMTU4QkE3OAotOjEwQTA1MDAwN0ZGRDRBRDdFMjg3RUU4M0YyNEZCNjVFNDRFNUU3NURDNwotOjEwQTA2MDAwQjdBQzM4OENGNURCNDY1MkI5NUFGN0UxNUNFNDgzRDJFMQotOjEwQTA3MDAwOEE5QkE2RTM3REY1N0QxNkRFOEZEQkVBRUZDNERGMzEzOAotOjEwQTA4MDAwNzE4RjFGMzYwMUYzODBBQjhENTE2QTc3Q0RDNTBEOTc2NwotOjEwQTA5MDAwNjAzRTU0QjU5NTk3NUYyOUZCRkQwNDJBMEYxM0U1MDkyRgotOjEwQTBBMDAwQkZCODA4Q0I3RENBODc3MzA3OEIwRjhFMjk1NUMyRjhCRQotOjEwQTBCMDAwN0I2NUQ1MTlCQ0ZEOEMwOUJCNzJEMTVGNTQ1REM1Q0JFNgotOjEwQTBDMDAwNjNCQzk1RUI4NzYzQkRFRUEzQjk4M0Q5MjNDRjE0MDk5NQotOjEwQTBEMDAwQkY5MUIwQUY3RDgyREY5RkQ2OEVCNkUxNzk0MDlGNERCNAotOjEwQTBFMDAwRjFFMkI5MEZERkE0QTNGQzdFMzQzM0NGMkJGMTY5NjUxNQotOjEwQTBGMDAwMkFERTlGNTlBNTcxM0ZFRjU0NUI0QjBFQ0FDNUVCRkM5RQotOjEwQTEwMDAwQzY3MkY0RTdEQjZEQzU2RDY4MTdBNzRGQUE5Qzg4RUI5NAotOjEwQTExMDAwM0RENUNDODg5RTgwQUZGNkUxM0FDQ0Y5Q0E4Nzg1NjlGNwotOjEwQTEyMDAwNDhDQ0I2NDRCRTkyNzQzQjUzRjI1Mzc1MjJERjgwM0M1OAotOjEwQTEzMDAwNzg4RUNCODM0NDdFODA3RTBGMTFCRjVFOTZBOEFGMDZEQgotOjEwQTE0MDAwRTQ3RDEyREYyNkQzRTM5MDc2MDE0Qjk0ODMzMTNBMEQwMAotOjEwQTE1MDAwMjlGMUY0RDk4REZDQ0FGOUY3MEYwODg3NTFEN0VGQzE1RgotOjEwQTE2MDAwRjc0NThBRjcyMjRBQjQxOUMyQkU5MEYwQTFEQjkyNEQ5RQotOjEwQTE3MDAwMzgxNzJFRkM1M0E1M0RDRTIxQjBEQjVEMzgyRUFGODdCRQotOjEwQTE4MDAwRUYzNEZDNzEzOTA5MTc4Q0ZGMUVFMTY3MkQ4N0E3NUIzRgotOjEwQTE5MDAwNjkxNkJGNTdDMkY3NjFEMkRGRDEyOEU3QkIyNzcxQkU2RQotOjEwQTFBMDAwMTU1NjdFN0Y4MTFCRkQzRDE0QzMyOUJCRThGM0UwNkU4RAotOjEwQTFCMDAwMTJGQTc3QjZEOTc3OEYwOUU2RjA3NUM3N0M1QUU3MUI5NAotOjEwQTFDMDAwNDEwMzNBNjBGRUJCNTJGQzdGNDc3OEY0QkFDMEJFODhCOAotOjEwQTFEMDAwODJCRjM3QTI1MTNFMENBQ0UzM0ZGODNBRjI3NTkxNzA2MgotOjEwQTFFMDAwMjVFM0UzRkYwMjg2M0NFQzNFMDA4MDAwMDAwMDAwMDAxNwotOjEwQTFGMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJFNTdEMDk3QzU0RDU5MgotOjEwQTIwMDAwRDVGODdERjM2NjRCMzI0OTI2MDk4NDg0NDA5ODI0NjQ0RQotOjEwQTIxMDAwODMwNDI2NjExMTY0NzEyMDA0QTMwMjBFOEIwMjhBRjg2NAotOjEwQTIyMDAwQzIxQUIyMEI1RDYyNEI5QjgxQjBBOTY4NDM0NUE1MTY2QgotOjEwQTIzMDAwNzU0MDQwQjA0MDgzMDJBMjQ2M0EyQzJBNTZBREE5NEI0NQotOjEwQTI0MDAwRUJEMkYyMjU0ODY1ODcxOEFBRTI1NzZCRkZFNzlDN0JBMwotOjEwQTI1MDAwNkY2NkRFNEI1MkE0NUZCRkRGQUZERkVGMEZCNTk3RkIzQQotOjEwQTI2MDAwRUU3RUNFQjlFNzlFRURERUE5QjQzQjAyRUEwMEM2OThDOQotOjEwQTI3MDAwODdGNUVEMTZDRjk4MDJGRjY0MkVGOEVGODBFNTdDNzMyQQotOjEwQTI4MDAwMTZBMzNGRkY0ODY1QUNCNzA5NkFDNDQyNzlFM0VCNUZBOAotOjEwQTI5MDAwMkI1ODdGNTU4M0MyRDIxOEVCQzU5QTEyMzE0RDY0RDUyNQotOjEwQTJBMDAwOTQ0RjYwRUUzNUFBOEFBRDdBQzU3Q0Q2OUYzMUZDRTcyMwotOjEwQTJCMDAwM0Y2RTYwQUMyRTEyRkVEMThEQjFENjNDOUI3RjMzMEUyQgotOjEwQTJDMDAwNjI4NkZGMDYzM0Y2NTY3MTg2RkY3RUM4NUZCMjM4RDZDNwotOjEwQTJEMDAwMjhEMTkwNTc1ODk2MTlFQUY5OTQ3MEY3RDYxNEM2QkU0QgotOjEwQTJFMDAwMEE4QjFBQzBFMDdCQjc3MDQ4MDczMjM2NjJDRTBGMjY2MQotOjEwQTJGMDAwQjFBODhFRjNBREIxRjM3QTNGMEM4RkRBOENFOTBEMTk2QQotOjEwQTMwMDAwRTEyQjRDRDFEODNFRDk4RkY1QkI4NTQzM0EyMDM4RkY5RAotOjEwQTMxMDAwQUY0QzRDQjNDMzdDN0ZBOEMyM0E1NDVDNDdFQjMyMzM5QQotOjEwQTMyMDAwOENGNzA0QUJBN0ZDNjgxNzJDN0EwODYzM0REQUQ3RTNGNwotOjEwQTMzMDAwNTNCQ0I5OEM1OTREQ0FERDVFMDdBQzA5RkZEQzEwNEMyQgotOjEwQTM0MDAwNDdCQjRDOEM3NTI3NzAyOTBDRTY1NTI5RTFFODUyOThEQgotOjEwQTM1MDAwMURGMjczNDRCRTUyQzBCQjlCRDVENTBCRkIzMUMyNzlGNQotOjEwQTM2MDAwOEVEREQ2NDJGMDVENTNFODY5QjYwN0JGQjNGQUM3M0M0RAotOjEwQTM3MDAwQTFGRDc0NTU0RjAxQjgyNkM1NzY4NDNGQ0M5RkU2MzdDMgotOjEwQTM4MDAwQjFBNkMwN0IzMjBFQzcxN0Y4QjgzNzkyRjAzMUYxREVCNAotOjEwQTM5MDAwMzFGNDVEOTk5MkE1MzRDM0JDMEE4QTVDOTRDNjBFRkU2MgotOjEwQTNBMDAwQkQ5OUU1MTI1RTY2MzRFNDA0RjE3NEIyQkI3NkIzMEI3QQotOjEwQTNCMDAwRDc2QjZFMUUzMjE5NzBGQkY2OTA2N0YyMzQyODNGNkUzMQotOjEwQTNDMDAwNjIyNTU4Q0YwODlGREIxMTNFNDMzQUMyNDdDMkMzMDhGQgotOjEwQTNEMDAwODdBRUU2QkYyRkMyM0JDMzA1RkQ1QzUwOUE4NjYyQTFFMwotOjEwQTNFMDAwQkRBNzUzQzA1RDRCNDFGQ0M0Mzg1M0M2QzQyMERDQkY3RAotOjEwQTNGMDAwODE3MTg3MzIzNjBEOEIwMENGMEZDNjZCMUFCNjlCQ0U5QwotOjEwQTQwMDAwQkM4NTY2NTg2RjZDOTE2NkQxMUMzNDlDMDlFN0IzRDg0MwotOjEwQTQxMDAwQzlFNzUzQTgzQTg4MkVEQjc2MkE3RTFCRDQxQkU3QzlFRQotOjEwQTQyMDAwN0U2QzI0RTRBQjhFNTk5ODFGQ0FEQjE4QTdEQkI2OEQ2RgotOjEwQTQzMDAwQUFERjA3RjRCMkYwOERFNzg3MDZFMEQzQTc4MjRFMzM5OAotOjEwQTQ0MDAwMzc5ODk4NEJFMjAzRkVDQkY2ODczMzU3NTYzMERGN0ZDMQotOjEwQTQ1MDAwN0JBQzJFOUZEQkQwNTM1NzdGRTA4MTU0NUQ3OTVFQTBBQgotOjEwQTQ2MDAwOUZBRTdDRDBCMTdDNUQ3RTQ4RDNGNUJBRkFENzdEMzhGQgotOjEwQTQ3MDAwNTY5NzFGREU3Q0IzQUVGRTg4RDM1Mzc0Rjk1MUFENzc4NwotOjEwQTQ4MDAwRThFQUQ3ODVDMUZFMTk4OEUwRjYzNDY1MDE1Q0U2MDk4MwotOjEwQTQ5MDAwM0NERDcwNjU4RUFFRERCOUE4RjFDNzcwNUZDRDVCQkJFQQotOjEwQTRBMDAwNzAwMkVFQUIzMUFDNENENzBGQUJCNzlDNDBCQUFDODY2OAotOjEwQTRCMDAwQkY4OENGMDVDQzFCMUQwMDc4MTVCMkQ2RDc5MjAwN0U4MQotOjEwQTRDMDAwOTU3RUM1OEQ3MDVCQjg4MUQ3OTNFRDE2MURCODY3NkMwRQotOjEwQTREMDAwMENBNjdFRkRGNzMyNjYwRUU2QTE5RjlBM0Y2REZBRUQ1RgotOjEwQTRFMDAwRDE5MEYyNzFDRTYyMTNEMkRGNDY1NzY0QjdDRjIyMTBGQgotOjEwQTRGMDAwMTBFQ0JBN0ZBODlERTJENzFENDBGQ0JEQUZCQTZERjA0RAotOjEwQTUwMDAwNjlGMTFCMkFFRDgzQzVCQjE0M0Y4MzdFMzM1ODdBMzQyRgotOjEwQTUxMDAwRTZBQjhFQTlDQzBGRjgzRkM1QUExRjFEMDlFOTU3QjVCOAotOjEwQTUyMDAwRkVERjFFNEQwRkMyQzc5NkEwQzc3Mzk4NEI4RkU3ODhGQQotOjEwQTUzMDAwMkMzRDlFMjNERDdBM0M0NzBGRDNFMzM5QzZBM0M3NzM3NgotOjEwQTU0MDAwNUM5MTFFQ0ZEREJEN0EzQ0Y3OThBMUM3NzNBMkE2Qzc2OAotOjEwQTU1MDAwNzM1Mjg5MUVDRkJEQUJGNTc4RUU1M0EzQzc2NzhBQUZBMAotOjEwQTU2MDAwNTQ4RjNGMDNGRTI1RkY0RDVCQjM1ODU3QUY5RDBFQkM4NAotOjEwQTU3MDAwMjUxMzMwNERBRkZGOTFBRURGMzJCNURDMEExODY4QTc2NgotOjEwQTU4MDAwMDcxRkZDNDU3QUM4NjRDQzFEMDAzODU3MDIxRTAyQUU3NgotOjEwQTU5MDAwOEU3NDUwRDJCODZFNTVEMkJGNDAwNzdGNDJGQ0Y3MEY4MQotOjEwQTVBMDAwQzFCRjNBMkI1QUVCODQ1RkNCNTRFMjM1NTdGMTlDNDA0NAotOjEwQTVCMDAwN0VGNkE1NEJGQjBCQTYzMzMyM0Y0RjM2MDNERjYwREU0MgotOjEwQTVDMDAwRTI0QzZGNjQ5MEVGMzExNjYwNkM2ODkwN0ZGNUM2QjUxMQotOjEwQTVEMDAwRTUzMzNBOEZDQzQzODNFNzUxNTc3Q0FEQzMzOTNBNDlEMQotOjEwQTVFMDAwOUUzRjVEOUNBM0FFREU0MTNFMDgwMEY5ODhGOTVFNjk5RQotOjEwQTVGMDAwQTY0MUQ2OUE3MDFFMzMwNTVEMUYwRUU3NzQ3OTE5OEIzQwotOjEwQTYwMDAwODY0MzNEQTgzMzBDRTZGNTExQ0UxQkM2RjkyOEJDRkZFNgotOjEwQTYxMDAwNTFEQ0E3NzdCMDA2MEJGNjNGOEIzNTUxM0E5QkI1NTIwQwotOjEwQTYyMDAwQUEzMUE3MTVEMzM5Q0M0REU5M0NFNkE1RjQ3NUJCNjYzNAotOjEwQTYzMDAwNEIwMTc4OTREQjlCODczMjk4RkY5N0M1QkYzRkFFRTAxNAotOjEwQTY0MDAwNjRERThBQzNDOTc2MDk1N0M5QUZERkMzN0Y0MkJEOTFCMwotOjEwQTY1MDAwMjlERUU4MTRFMEJGRTNFQ0FFRUYzRDAyOUYwRUUzMzlFNAotOjEwQTY2MDAwODFGQzc3NDIxQ0NEOTc5OUJEQjk1MzcyM0JFQjY3Mzk5QQotOjEwQTY3MDAwOUQxQjJGMkI5QTg2N0NENzk3Njg3NzZGODVCNUY1NEZGMgotOjEwQTY4MDAwNjJGNjQ0M0NFNzEyRkNBOTUzMDAzRkM5MjlGQUYzQjcyQwotOjEwQTY5MDAwOUZBMDg5NUQzRDFCMTZDNzIwMUU5OTNGMTZDRjg3NkI3MwotOjEwQTZBMDAwMURCNzVGOEEyNzFERDcyRkVCNUY2REJENTY2QkMzM0Q2RQotOjEwQTZCMDAwMzhDRkQ2MEE4NzdCMzNEMEU3RkIwMjFGNEZERjZFMEIwNAotOjEwQTZDMDAwQTg1MTQxM0FGQTMwNjJGNjZCREQwMTZGNTUxMURBMjA3QwotOjEwQTZEMDAwRUM3RkM2RjQ5QjU2NjE1RTM5MUNFNzVBMENGM0JCNTQwMQotOjEwQTZFMDAwMENGMEU2RjBCRjhFQzM1RkVCMTMwRjRCQkNEMDVCQ0IxRgotOjEwQTZGMDAwOEM0NkY4N0IzOUZDRTExRkI5REU0RUU3Q0ZFNzUzQTA2QgotOjEwQTcwMDAwRjBGMUY3NDU2ODFFRUNFN0IwQTkyOUQ5OERGMDMwMzc5NAotOjEwQTcxMDAwMERDNTc2Q0NEMTlERkFCOTYwRTU3MEU5MEEwRTYzMjNDOAotOjEwQTcyMDAwN0FDRkMyNzVDREIzRDlEQzJBRjQzOTU2RTE3ODNEMTkxOAotOjEwQTczMDAwNzdGN0VDMkFGOEU3N0M5MzM3M0VBMEVBRTYzRDA5RjE4QgotOjEwQTc0MDAwNURFRTJDRUU5MzA4NzQ3M0MxMjJFNjZERUYyRUUwRUUwMQotOjEwQTc1MDAwQ0FDMTdERDVENUJDRUJCMDdGOTQwMzdGQTJGODUxMEU2MgotOjEwQTc2MDAwQTQzRjkwN0ZDMTE3RTNCRjFGRjIzNkQzRTVGN0E3QTIzRQotOjEwQTc3MDAwRkM5MjZCNzI2Rjg2QTI4REUxRDAzNUQwRkIzQjAyREU3RQotOjEwQTc4MDAwNEY1ODIwMUY0QkRGRDdFMEY3ODQ3MERFM0VFMTUxOTMzNgotOjEwQTc5MDAwQkYwRURBN0JDN0JFNDg3ODdBQkFEMjQxRUIyOTY2MkU2MwotOjEwQTdBMDAwMkI2RUIyQjlDQzQzNzRGRjk3MzE3RjdCQTUxOUYwNTE2MgotOjEwQTdCMDAwOUVBMjJENDRCOEREMUQ2NzRBN0U5RkU2QTFGNTQ3NzkyQwotOjEwQTdDMDAwODc4REZDNkVGNDJGRjdFOTE0Mjc1RkMyN0MwMUI3QTlDRgotOjEwQTdEMDAwQ0M0M0ZCRUUzNkE2NTk3MERDNzcyRjVBM0RDODNGREZERAotOjEwQTdFMDAwMTVGQzY0M0FGM0QxRjc5OUNDNEZFOTlEMkM0MEY1RUY3NQotOjEwQTdGMDAwNjJDRDk0RkY3REM0ODBERTM1MzBCRkM5OEY2NUE2MjM0RQotOjEwQTgwMDAwN0YwRDgxRkI0RjA4RUU3NkVERUU2RTlDNUU0RUY1NDBCRgotOjEwQTgxMDAwQjhBRkVGRkU5REU4NzdCMkEwMTdEOEFGMkI3MUREQjBDRgotOjEwQTgyMDAwNUYwN0U3QTU4NkVDOUI3MTlDNUU5OEQ5OTlGRUNGRjZGMQotOjEwQTgzMDAwNEQ1MzFCM0YyRjgwMzEzQTEyNjFGRDM3MEExNERFRTg3OQotOjEwQTg0MDAwMjlBMzczMDJFNUFDNkUwMEZGMjY5NzRBNzI1NkQxOTg5MQotOjEwQTg1MDAwMTYzM0NFN0ZEQkU3OUM4RkJEQkU4QzQ1RkFBMEZDRjU5RQotOjEwQTg2MDAwMzEyQTQzN0M0RERBMzBGRTBDQjY3QjhCMDVCQTBEODY1RgotOjEwQTg3MDAwRkE4NTU3QjRBM0QxQjBGRTQ5QzBERjgxMjNCM0EyNUVFRAotOjEwQTg4MDAwNzA0RTg0OUM0QjM3MjdBQzFCODc3MkM0Q0Q3REY1REY5RgotOjEwQTg5MDAwNkY2MUY1MkFDMjZGNDI4RUZFNUM5OTg0RTc4QUFDMDcyRAotOjEwQThBMDAwRTMxRDQyMzhDNDc2M0M1RkI2QTcwOEY5QTIxRkVCNzdEOAotOjEwQThCMDAwMkRFNzRCQTVDOUYzNkJFMjIzNDA2NzQ4Rjc3M0NDQ0M3NwotOjEwQThDMDAwRDNEOTdFNzM2NDJBOTI4RjkxREM3MkFCMThCQjZEQzJCMAotOjEwQThEMDAwNjVFQjI1NThFRkE5MTRFRDI1RUM2N0YxQzRCRkNDNDYxNAotOjEwQThFMDAwN0UwQzdBRDREQjgzRjAxQ0ZEOURDQUVFODdGMjEzQjU5MwotOjEwQThGMDAwMDA3MTM4NUM0RkQ2REE5OTA3MDQ5Q0NGNkE5RDk0M0Y2QgotOjEwQTkwMDAwNUQ5QjQwRTlEOTVBMTdBNUU3NkJCM0E4RkM2MkFEOUJFNAotOjEwQTkxMDAwRjI1MUE5REUyM0Q4RUY5QzM1OUY5QjUxOEU1QTFEMjZGQwotOjEwQTkyMDAwRjFDN0U3QjE0NEQwRUZFQTMwQUU0NzJEODk1Q0YyNjE2MAotOjEwQTkzMDAwMzE4Q0JCODQwRTQwMzhBRjFCRUFDNzIzNTg0QTBGMzQxMgotOjEwQTk0MDAwQkM4NjI5N0M1NzFENThCRTRFNzFFM0Y5MzRGRkE4QjY2QQotOjEwQTk1MDAwMEFDOTY3RTE1QkNEOTM5MEVEMENGOUUwNjQzQ0MyQURCMAotOjEwQTk2MDAwRTI4QUMyMzREODRBM0Y0OEY3QkM4QkUzOUZBQTFENDYwRgotOjEwQTk3MDAwRjMzQTUzRUJBMTc5NzkxQTVCNUU4QjgzRjZFNzZBOEIyNgotOjEwQTk4MDAwMjg5Rjk5RUFGRDEwRTlEQkMzM0VCNzYyRkI4OTNCNUI3OAotOjEwQTk5MDAwQ0M0OTUwNUVFODUxM0NCOEJGNDc3Qjk4REYwRkY4REJFRAotOjEwQTlBMDAwNjBFMUU3QzUwNjM4MkY5MDdFQzZFNDRFNzlFMjdCODhFOQotOjEwQTlCMDAwQjYxNEVEMDQ4RTczNUJFQ0RDQzIzOEE0QUI2MUM1NjZFMwotOjEwQTlDMDAwQUMzN0ZEMUI5MEI5NTI4MkY0N0RCNTdENzJFMUEwNDI5NwotOjEwQTlEMDAwRjBCOTcwMzA4NkUwMjFFMTU0MjFGMDc1NjE3RkZGNUJCMgotOjEwQTlFMDAwNDc0MEJGMDc0MThFNTQ2MTdFNkQ1NzRDMzRCRkI2MEY1MAotOjEwQTlGMDAwQzNGRDI4MjQxOERCMkZERTk3RDY4MzM5NzA5REQwRDg2RAotOjEwQUEwMDAwODZGOUZFM0QxOEUwMjFDMkZFRjQxM0E4OTc5RERCRjUwMAotOjEwQUExMDAwQzMwNEM0Q0JCOUQ4ODYyRjNGNDZCRUY3NjdDRUY3MTgxQwotOjEwQUEyMDAwNkJGOEVDNzFFNDhCQkQxMkRDRjc0M0VFQTIwNUY0MzQ1NQotOjEwQUEzMDAwRDI2QkFBMjNGMDVDQUNCNDMyOERFN0I1RkU5ODNGMTcxOQotOjEwQUE0MDAwQ0U0ODdGMURCQTNCNjkyQ0VFMjcxQ0NGOTUxOUU0NkJDRAotOjEwQUE1MDAwNTk4QThCRDUwMERENjdFQzdFMkNGNUM3MzBFRkVEMEQwNAotOjEwQUE2MDAwRjMzRjdFMUNEMjBCN0U5M0NGMDJFN0Q2MDVENjcwRjE2MgotOjEwQUE3MDAwMjVFNENCNUIxQ0VFQUQwQ0VCOUJDM0IxRkUwMzE2M0U5NQotOjEwQUE4MDAwMkZERjU2RDBEQjVERDg5RjlGRjgwMDk0NUJCMUJDRkNGNAotOjEwQUE5MDAwQjk1RkY0QzRGOUJGOEM3MjA5RTQ1RjVFMTc0MUZDRUU0NAotOjEwQUFBMDAwNjU4QkZCNzgwREI2N0I4MkY3RjdDQzQzRjc5RTM4ODAzOQotOjEwQUFCMDAwRTk4MzE1RjlGNzQyREEyNzM1OTZFMDNERUZFNzhCRkE5RgotOjEwQUFDMDAwNjE3QjM4Rjc1OTIyRjBDNzVGQkRBMDA0QzIwMDZFQjlBMAotOjEwQUFEMDAwRUIwRjJENEY4NEYxMDY2RTZDMzFGNTg0MzQ2RjhCNTI4MQotOjEwQUFFMDAwODc2OUZGREU0NUM3RjBCQzRENEY3NUQxM0MwNkVENEM4NAotOjEwQUFGMDAwNTE1MTlFRUNEN0QzRkZGMTBEMjQwRkU4RTU4NDlDRjU2RQotOjEwQUIwMDAwOUY4RkVEQzk4MkYyNDIzRkE1RTFFQzMyQTA4N0Q1QkQwRgotOjEwQUIxMDAwRkY5MENGRjVDNDdBRUE2NzVGRTNENEY3RUU2NEI4MEUyRQotOjEwQUIyMDAwOTA0NDcwREVDNTU2QjI1M0UwNzIyRDkwQkZCMDM3NkRDMQotOjEwQUIzMDAwMTNEQTMzRjY5QjdDOUJFOEZDOUFDM0U1OTUwQjVFREY0QQotOjEwQUI0MDAwMkY5MENFMkFBMEJFMEZGMjE1NzlCRUE4RUJBMUJDRTJEMQotOjEwQUI1MDAwQ0Y3RERENDA1MUFDRjc5MzM3MTYyMTNDMkFGNzNFMzJDQQotOjEwQUI2MDAwQkUyN0Q0QkIzMDkyQjkwMTE1QUM2NERGRTVGMUQ4OEVCNQotOjEwQUI3MDAwRjU4NkI1NjAzRjdCRUJFMkVGODA3NjBGRTQ4QzFEODJCQgotOjEwQUI4MDAwNzRFNTU1MUI2ODFDNTZDNUM3Nzk0QzlDN0JBQzE5ODA3NQotOjEwQUI5MDAwMTMyRjU4MDlENDdCMDAzRUUzRjdEOEM2OTg0MzQ5MkNCRAotOjEwQUJBMDAwODg5RkFBQzY2NTI5Njg2RjE5QUNEOUREMkFFRTlCMTQ2NwotOjEwQUJCMDAwNUY2MkI1MjM3ODhFQzJGOTc3NjMyQUQ0NEJCNDhBN0U1QwotOjEwQUJDMDAwOUQ1MzkzQkRENzcwRkU1OUM1NzkyNkZCN0JDQ0NBN0NCQgotOjEwQUJEMDAwNjFCMTVDNkU1NkYwN0NCNkYyNzM3QjJCRjA5NzlBRkNGOQotOjEwQUJFMDAwRTBCOTBERTM0RTRGRTVFRDQ5NUU0RTgyNDMzQTBGRTY4NAotOjEwQUJGMDAwOTlGNDk4Q0Q0RkIyQzE3NzFDNUZDQTVCNTU0MjdGOTFFMwotOjEwQUMwMDAwNzJDQjhDQjhCQTU3OUE2MUJEOEY0NTY4NzM3MTdERjM2QQotOjEwQUMxMDAwQzVCOUNGQ0M2RTE3Q0E0NTNGOERGMENDNEIyNUI5QUIyQgotOjEwQUMyMDAwMzUxOUQ3MDBFNzZBMDlFNjJCNTU5MEMzRDI0MkU0MzBDNAotOjEwQUMzMDAwRkI3NzNCNTc3NzQ0NzgyQUIxRkQ3N0FENkZFNEJCNEI4OAotOjEwQUM0MDAwQkUzMEIxM0NBMDgzMjU4RkQ4NDg0RkFEMTNGNjg2M0E2RAotOjEwQUM1MDAwNjFERkFBOEIxQzZBNDc3RUMxOEU5QUNBNUY4M0YzNzYzNgotOjEwQUM2MDAwMTRFRkExQkRERjI1OTFGOUM0NEZFQTE4RUIxNDZFMDc2QwotOjEwQUM3MDAwODEwRjY4QzA3NzAyNzA2RTY4QzAwRjQ2NUY2OTU1MzlGMgotOjEwQUM4MDAwREQzNzFEODkxRThDRkM5Njc5MjI1RDY4MDczMDMxMkREOQotOjEwQUM5MDAwRTQzQzM1RjYwMzc4N0IwOEUxMzk4NjQ1MzAyREU0REM2OQotOjEwQUNBMDAwRjRCMDE4MkJFRTVGRTY4OEZEOTdENjNGNTJFMDRGQUUyQQotOjEwQUNCMDAwNjNBNEIwRTc4RDZDRkIzMDAyRjlFNjkyMkZGMjg5N0YzNgotOjEwQUNDMDAwNzZCNUJFNTdDNEZBN0U4M0VCODNENDkyRTlERDg0Rjg2RgotOjEwQUNEMDAwMThGNTU3QTcxOUQ3MzlDQTNDMzkxOUU1MUM5OEZGMzMxRAotOjEwQUNFMDAwRjg3REY0NUY0REZBRjk3RjEzQUVDQjdGRDc3NTdDNUZBQgotOjEwQUNGMDAwNjEzRTEzRUVDRkNGQUQ3RURDOUY4RDQwREZCODlGMUI1MgotOjEwQUQwMDAwMTdFNUY4OTEwRkVDODdGRDYwNDdCRDY2OEE5NUU0REM5NgotOjEwQUQxMDAwNDY2MTI3NkRFQ0VFMjRGQkQyQ0IxNjlFRjdDRDE0RURFOQotOjEwQUQyMDAwQzMxODlEMjM4RDMzN0I1MkZCOUVCNkVBMzc3M0IxRkY2OAotOjEwQUQzMDAwQkEwOEUyOUY4RDE2RkY5QTU0RUNGRjI3NzE2RTFGRTA1MAotOjEwQUQ0MDAwNEJDNUYzNjMxMEU4MUI4MjdGRDc1OTAyNzdBQUQ4REY3RgotOjEwQUQ1MDAwRTc1Njg2RTNBRDhGMDkyNDU1NDFGREY1OEI3QTUyRkQwOAotOjEwQUQ2MDAwMEY0MTk0NDJGQkREMDg5M0U5RUVDOTBFMkNGNzI0QzY4RgotOjEwQUQ3MDAwNDI3RUZGQjcyQTlEMUJFQkYzMjBFRjIwM0U0RUY2QzAyQwotOjEwQUQ4MDAwRjU5MzNEODlFMUREMzA4RDM3RDE3QzU0NTY0RERGNTM0RAotOjEwQUQ5MDAwNzhCQjhGMkRCQ0RFMUQwMjdGMUYwOUZDQzAzRTI3M0UwNQotOjEwQURBMDAwQTA0RDhBMzAyMzFENUY0QzlERDM0MkZCODM3OTEyMTU0MQotOjEwQURCMDAwOThDRkUzRjNEMjE5RjJEMTNCNEE2RjRBMjFCQUE5N0Y2NwotOjEwQURDMDAwOENGOEQ5MEM4MTAzRDkxRjM2QjAwRjQ1Mzk5QUZGOTlGOQotOjEwQUREMDAwMzk3RjZCMThFMkYzQjY5MjMwQjI4RjdFNThCMjNDRDIxNAotOjEwQURFMDAwMDVFRDZGRDNENDgwMERFREM2RDMwQTNEQTFGQUY4QzVBOQotOjEwQURGMDAwNTQwRjhENUJEMTkwOUQ3NjMyODRBRUU3RDg4MDZGNDA0MgotOjEwQUUwMDAwRkY2QkMyQjVEMzQ4Q0ZFQzQwMUU5NTFGMDBFMUU2MUY5MwotOjEwQUUxMDAwQjBBRjRFQ0M0QkRGNEQ3NjhENzk1MjhGMENDQzQ1QkMwQwotOjEwQUUyMDAwMUU2Q0I1MzNENDRGQkFBMjg3M0FDNDAzRjREQjQ3OUNGNwotOjEwQUUzMDAwRUI0NEFGODhGRjE5RTE1Q0NGMzEwM0JENDBCRUFFMjFDQQotOjEwQUU0MDAwOUJGNDlDQTcyQ0NDQTMyMEJFRjZEOTA4RkY0NTUzRUM1RAotOjEwQUU1MDAwMUVCMjNGQ0UwOERGNjQ4M0YyQkIwNTNGQUI5QjExNEVCMQotOjEwQUU2MDAwREZFQjVFODlGNDlCMTREMjlGMjhFRkRCNjNBMTc2RTVDQwotOjEwQUU3MDAwNTZGRjhFNkREMDRGRjlDMTZDM0E2RkY2NUJDNUI4MkY5NwotOjEwQUU4MDAwNDVGMEYyMjg0RkNBQ0FDMTU4REU4M0U4RTA2NThCMkIzMwotOjEwQUU5MDAwOUFDQURGNTAxOTk1ODcwNzMyNjIwMDhFOTE2MTVBNTgxRAotOjEwQUVBMDAwREExMEE0M0JDMEIzMDNGQkU1REY4RjBCRkEzQTBFRERFQgotOjEwQUVCMDAwMjJGRTdDRDU5MUQ0MkY2RDdEQzg2Qjc1QkQzNzIzM0VBNgotOjEwQUVDMDAwMzUyQjJGNjczRjUyQTlGQ0I4RDM5MzM4MUZGMkM3QUI3RAotOjEwQUVEMDAwOTM2ODVFRDJDRTc0REM2QjI1QkEzRjVFQUU5MEJDRjQ1NAotOjEwQUVFMDAwQTcxQTM1NjAwREI1RTM0RkQ5N0U1RjA2QjRGQkY0QTAxOQotOjEwQUVGMDAwODVFQzc4QjM3RTU2RjYxNjdFOUZCNUJDODJFQzkxQjM5NgotOjEwQUYwMDAwNEE5NzkyOUZFMEUyRDI0Rjg3NkU4MEY1MzQyRkZGMjQ1QwotOjEwQUYxMDAwNTkwQkIxNEJDRjJBODc1NkExNzZENTM0NEY2QTFBRTAyOAotOjEwQUYyMDAwRTdENjM0MkQxREQ3NTc5NUQzQkMwMEU1RUI4QkQ2QTZCRAotOjEwQUYzMDAwMjc1MTVGNzA3NUQzQjJGMEZCQTUxNzRGNkRFMzcyNzdBMQotOjEwQUY0MDAwNkIwNjlFMTM5NTY2NEUyN0YyQkNBRDEyNzRGODVGNjlDRQotOjEwQUY1MDAwREEwMEVDMEZFMDM2MUJDRjk1ODg5QzI2Q0VGRjk2N0U1QwotOjEwQUY2MDAwMzdGRTdGQjY3MUVCN0UwNUM2MjkwQjZGQUNBNDU0RjU5NgotOjEwQUY3MDAwMEZDMDdFQ0UyOTgxMjgyNThERTBBOEUxQkUzQUVGMENENgotOjEwQUY4MDAwNDQyMUZDMzUxMzk3RjNDQUI2RUJENzg1N0ZDQ0YxNjgyMwotOjEwQUY5MDAwMzc2MzY0MDcyRjZCNTAzRDYxQjgwRjk4REY4QUYzMkYzQQotOjEwQUZBMDAwNjNENjYwRkQ5NDIwQkVBMDFGQzIxNzczRkM2OUY2OEZBNAotOjEwQUZCMDAwMDEwRkE1M0JCMkYzNTFCRjI4OEIzOUYwRDAwOEFBMDc4NwotOjEwQUZDMDAwRURFNDdFNTEzQkU2RTU3QTNBQ0U4N0FGRUZCQ0Q4MDc5OQotOjEwQUZEMDAwRTdFMThCMDVFOTY1QTc0REVBRjkzNEZFQzUxNzdCRDA5QgotOjEwQUZFMDAwRjhGMTYyOUY1QzU0MDRCREVFMDhFMzc0RTU4Njc1RTFGOAotOjEwQUZGMDAwM0M3RkNERTlFQTUxQzkyNzc3RjA3RUNBRTI3QzI2RTQ5RQotOjEwQjAwMDAwNEI2NUI1NEVBMjJCQzk5NzYwMkVCNEJGQ0VFRDRFQTJCNAotOjEwQjAxMDAwNzY5MjhGMzEyRjYzNTQ3Rjc3RTI2NjJFQkYwOTdEMTdCQQotOjEwQjAyMDAwMjcwQ0Y1NEI3RkM1QzdDMTNDRjJGM0IzQ0YyNkM5NzFERQotOjEwQjAzMDAwNDlERTM2OUVDN0M2NzUyRjQ5RTNGNjI5MzhBNzdCRkM0MwotOjEwQjA0MDAwMzM3RDMxMkI2MUVFMTNGMzA2ODVBQzI3RDIyQUY4ODJDQgotOjEwQjA1MDAwM0I2MTcyMkVGQTE3QUNCQTdFMkY0NjVBRUZGNjM4RDAwMwotOjEwQjA2MDAwQ0ZBMEZGMkVGQkFCNERFM0ZBNjQxRjAzOUU3QkFBQUQ3RQotOjEwQjA3MDAwODc2Q0I4MEY5RjY2NzQ2RTE4RTdCMTRBQjQ3QkY2RDkzNwotOjEwQjA4MDAwNzZCQ0FBQzI5RUNFNUM5MjlFNUM1QzlFMjdGQzdENjREMAotOjEwQjA5MDAwOTVGOEZCNUUxMkYwRTMzMjg0NTU2QTEwOEVGQkYzQjQzMAotOjEwQjBBMDAwMjQzQzM3MkUwQUZGRDBGRTE4QzhFN0EwM0NDNUYxMjI4OQotOjEwQjBCMDAwRjMxMjFGNDZCQTVDRkVEMTgyMjRGNDQ3M0QyRkUxNjhBQgotOjEwQjBDMDAwODBGNzMyODAyQjk2RDc1OTQwQkZDOTQxM0RGN0Q4QzM4RQotOjEwQjBEMDAwMjdEMzgzRUJGOUFDRDZFMzk5MTc5MjVGQjAyMUNGOEVEQgotOjEwQjBFMDAwRkI3MUUxQzYzQ0ZCOUMxMDdDRDQ2RDFGNzRDQzA1NzBEOQotOjEwQjBGMDAwM0ZCRkRERUM0NkY2NUU2N0Y2M0Y4NDcyN0FERDc2QjVEQgotOjEwQjEwMDAwMDFFOTA4Q0FFRDA4RUZGMzhFQzNCRkMzN0EwQjM2QzY1OAotOjEwQjExMDAwRTRBMzFDMkVEQjJGREM1MEU4OTkxNzgyODdGRURCRjVCOQotOjEwQjEyMDAwNzhDOTZERDBFNzA3MUVEMEU3NUY0MTE5QjRGQkI1QjcwQQotOjEwQjEzMDAwQ0IwQkU4RjM4MzhFRTlGM0FDMTVCMDM3MTRFNTAxOEU0MQotOjEwQjE0MDAwQjcxNzg2Qjk4RkI5MDA2RjdERkNBQTFCM0ZGNTcxNEMwQwotOjEwQjE1MDAwOTkzQTExRTU4ODhEQUEzQjFEQ0FGQjJDRjVERTgyNzI1NwotOjEwQjE2MDAwQzVFOThERjNERDg4RjYxMkQ1NTdGOTYzQzA2OUM5MjdBMwotOjEwQjE3MDAwRTM4RkUxQjk3QThFMzVGQzYxMjJFMDY1NDFFMzNBQUJCOQotOjEwQjE4MDAwRDk4NUVCRDZEM0ZCN0U5M0EwREY2N0I5RkQ2RTkxNUZDNwotOjEwQjE5MDAwNUZERTkxMkYyQzkzRkVDMUFDNTBGQTMyRDIwMThDN0IzMgotOjEwQjFBMDAwQkIwNzI2NTQ1RUYzREVDM0M4MTc0QTI2MDBFMTAzOURBMQotOjEwQjFCMDAwMEQ2RjU4Njc0NUY5RUZFQUUzRjhCODdDRTlGMEI4MTA4RAotOjEwQjFDMDAwMUVDNUMzNzhEOUY1MzUwNUVDNTNEODc3NkNFREVGQzdCQwotOjEwQjFEMDAwRTNCQzhCMUY1MDQ4RkUyODdFM0VGMzI4RDI1N0NCOUVGRgotOjEwQjFFMDAwOTkzNzUzN0E3QjExQUQ1RkRBMDkxNzM2MkE4MTQ4QzgzRgotOjEwQjFGMDAwM0I4N0I5MEUzNDQzQkJGOTdFNkVFRjk4QjNDMjE2RTRCOQotOjEwQjIwMDAwODcwQ0ZENjQ4Njc5QUMwRjI5ODdGOTJGM0M3MEU4NkJCOQotOjEwQjIxMDAwMDVGQTJGRDlBODZGQjcwOEY4MzQ5RTNGQTU1QkZFNjFFOQotOjEwQjIyMDAwMEJGRDJFRjVEMUVCMUIzN0E5QjhFRUY5NjJGRUYyRkM0RgotOjEwQjIzMDAwNjRCRUQxRTRBN0I4OUUzNzYxMjdGMUZGRTBEQzk5MUQxOQotOjEwQjI0MDAwQUYyOTdEQkIwN0NGRDFFQkQ3RjNGNkMwNzY4QjcxREQ4RAotOjEwQjI1MDAwMTUwRUFCMEJENzVENjE2NzgxMDg5OENGQjE0OEFCQzdCRQotOjEwQjI2MDAwMDlERjJGNkY4ODI0M0JERDAyMUJDOEFCRjk5NEIyMzA5NQotOjEwQjI3MDAwRjQ3QjMwMzdGOUNCM0U3QjQ3MjVCOUE3MjI4RUUzQkQ1RgotOjEwQjI4MDAwRTIyOTg1RjRCNDBBMzRBRTYyRkU2OTlFNUZDNDAyQjQ1QQotOjEwQjI5MDAwMUVBNDE3NEZFODNBRkRGQTNDQUJFN0ZBNURCOTM5NzBFNgotOjEwQjJBMDAwMDhFMTUyQ0E5QUI5N0UwNkY4RjQ4NEY4QkJDQjYxOURENgotOjEwQjJCMDAwMUZDNkEyRkM2NjY4Q0ZEQzFBRjlGMTFDNUMxRUFCM0ExMwotOjEwQjJDMDAwRjAwRjVCNjhCOUQ0MzNBNTFFMkNFREM3NEY2NTc4QzM2QQotOjEwQjJEMDAwNzExQzhCOTA5QkQ3REZFN0M5QzBGOUFFQjQ3ODMyMTBGMAotOjEwQjJFMDAwMEVCRTc1NjFBNEVGREZCMTg5OUY1RkVCNjM0MDhFRUQwOQotOjEwQjJGMDAwNDZGMjMzQzlFMzc3Mjg1QzNFNjczMzM5M0YxQzYxN0FGNQotOjEwQjMwMDAwMkU4MEU3NERFQjIzMzFFRUNEMkVBQTRGRTdEOEZBMDc3QQotOjEwQjMxMDAwQjNCOUZDRkZBRDRBRjI1MEVCM0ExRTE3QjEzRThGQzNGMgotOjEwQjMyMDAwNkZGRDgzQjk1Q0ZFOTdFNzVFNzc0NkZENzU5NEI3M0Q4OAotOjEwQjMzMDAwMTk2ODg3NjAwRkYzNzk3RDhDNEIwQTkxQUZCRjhERDc2OQotOjEwQjM0MDAwNkVFODFCQjIzRTI5OTdCMzkyRUZFNkNGRDgyQUUyMzREQgotOjEwQjM1MDAwNUFENzg1RjlEMTlGNzE1MkYxQkU2NjBBOTE2RkJEN0RCMgotOjEwQjM2MDAwRjkzOTMxNzRBQzY3OUJBODQ3N0U4Rjc5QTZDOUY3REY5RQotOjEwQjM3MDAwMDBGMzlBRjdBOEM5ODVGNkI3NzY3ODdCM0MxOTc4N0VGMgotOjEwQjM4MDAwOUU1QzE3OTY4Rjc0MzY3NDJDQjc0NzFEQ0ZFMzdDM0ZCNQotOjEwQjM5MDAwNjIzMEYzRjgyMTlEMjlGQTlERDlEN0E0NEIxM0MyODFCRAotOjEwQjNBMDAwRkVBMDlGOTM4NURDMUUxRTM5RDg0Qjc2QzBBRDJFQ0VGNQotOjEwQjNCMDAwRjc4REVCOTgyRkZBOTk2N0Y1RkU3NjU0MjdGMzkxNzA4NQotOjEwQjNDMDAwNjFFM0I4REM3MUYyMUU2NTMzOUYxN0UwMUJGMjQzN0YyNwotOjEwQjNEMDAwMUU0NkY2QzM5M0UyNUM5MkYwMDVCQUExQjgwN0M5Qjc1RQotOjEwQjNFMDAwNjJEQUU5QzVCRjIzMENFODY1OUQ4NUQzODFENERCNDJEMQotOjEwQjNGMDAwRTg0NUUwQkYzN0UxRjcwRTgxNUZGNjYwOThBMDE3MTNDQwotOjEwQjQwMDAwRkI2Rjg0NjNBMTkzRDNDMzM1RUE1RjgwRUY5RjIwQkVCNwotOjEwQjQxMDAwOEQ3QTk4QzQzNzMzRkI4N0ZDMzNCRjRCQzUwQkJCRjYyMwotOjEwQjQyMDAwRkI0MENFMjhGREY1MjM1MTBDRUE5RDMxRDdDN0JCQTFDNwotOjEwQjQzMDAwN0RGOUQ2OTU1MTFFNDg0RjlCN0Q1MTRFMThGRjhDNUY2QwotOjEwQjQ0MDAwMkRGMjc3MDJFRjk3RkI0QUZCQjVDN0ExODRGODQ5Q0ZFRAotOjEwQjQ1MDAwM0VGQkMwMjQ1Q0U3OTc1QjJENEU2NDA5NTVEQjZEQTQ3MQotOjEwQjQ2MDAwOEY1NUVFNUQ0NEYyM0FFNDVCNzg3RUY1RTdFODM3QUQ2MAotOjEwQjQ3MDAwM0FBMEI3Q0Y5NzNFRjM0OEJDOEJFMEVENEIzMjI1NjA0NgotOjEwQjQ4MDAwMUE0ODYyOTA1NjZFQjFCNEZCOTE2MTE4OTBCRjVCNTczOQotOjEwQjQ5MDAwRTFGQzhDRUQ3MTFFNTcwMERGNTUwRDZBQjEzNUJBNjNDMgotOjEwQjRBMDAwNzk5NUUwMkY1NTdCMUZGODFDRUQ4NjU1N0I2RjNBODUwQgotOjEwQjRCMDAwRkNCRUNBRTAxNzI4MTFGRTExQTM1RkUwNTc3REY1NzFBRAotOjEwQjRDMDAwMDcwMDFGOEEzM0YwQzFCQ0QyODk1Q0I4NURCOTZFQzc3MgotOjEwQjREMDAwNjMwMzVBNTA3RUQ4RjI2Njk0OTIxM0Y0MEY0OEJGNDkyMgotOjEwQjRFMDAwNUJDM0RDQTc1RTcyNzVCRDJGMkYwQUZCNzAxMDZGOUNDQgotOjEwQjRGMDAwN0ZCOTBFMjgxOEFDMDQ4QTNGNEZDQjJEODFBODExQTgyNAotOjEwQjUwMDAwRUY2REIyOTBGQzVCQkVFQkU5NkQ4RjIzOUQ3RDY0QTM3NAotOjEwQjUxMDAwRjNCRDZDRDdBQjdGQjgxRUU1RTczRDk2NkUxM0Y4MzJFRQotOjEwQjUyMDAwMUM0QTQ4NUM0RTk1OEJEQkUzMjQ3RTRBOUY3RkQ1RUExQwotOjEwQjUzMDAwQ0FFNURGOTdDNjA2RjE1NEI2RTc5MDE1RTM4MzhDRjBCMQotOjEwQjU0MDAwMkM2ODM4NjQ2RDc2NzQ4MkFGODY5NkYxNjQ4N0RBRjE4MAotOjEwQjU1MDAwOTUxNUY3Qzc5OTgzMEFFQjkxRDJCMTdEQzlBNjU3QTM3OAotOjEwQjU2MDAwNTAzRTQzMzhFMUY5MjRGMUQ2OEU0NzQzN0RFODdGRDIzRgotOjEwQjU3MDAwNEI4M0E5OUUxM0Y1OTRBQkUxRjE4MUJFOENFMDU2RjFBQgotOjEwQjU4MDAwNDIyNDhCODE3OTk0N0M2Q0YzNEY0MEZDRUU1RTEyODVGMwotOjEwQjU5MDAwRUIzOTY1QUVFNjc0RkZDNENBNzg5NEY3NEEyQ0JFNzhERQotOjEwQjVBMDAwMjdBNUZDN0JDOTkzREYyNzdBNUNBODU0QzczQjczODgyNwotOjEwQjVCMDAwREUxMzREMjQ0QkY4MTI3MTlERjMzN0RFNDZFQjVDQzA3MQotOjEwQjVDMDAwMzRBMkM3OTIyNzU0QUYxRkQyMkZDQ0FDNjg0RjI3RkJCMQotOjEwQjVEMDAwRTZCQTc0QkU2RjRFNkQwNkU0QzIzQTRGODlGODJDREZBRQotOjEwQjVFMDAwQkJBQUQwQTNFRkExRjNGQ0ZCNjJDRDhDMkRBNkZDMTc2OAotOjEwQjVGMDAwNDI5RTBCNEI2RjhGQUZCMjg3RUFBMTU1NUI1NjM3MjE0NgotOjEwQjYwMDAwOUVDRUY2RjZGNEMwNzkwMjFDN0MwMjZFQ0EzRkEwNUZBMwotOjEwQjYxMDAwRjVGNzg1M0QzODlFOTgwQkUzMTdBODFEOUNBQjA1RjgwMAotOjEwQjYyMDAwMURFQjM3NTkzQzY4NjcwRjY5MjdGNDQ0M0VGRUY3QzRBOQotOjEwQjYzMDAwRjgzMEVGNzBENDgzNEZDNTc3MUVGRkI1MDBEN0M3RTc0QQotOjEwQjY0MDAwRDcxNDFBRkZENTI1MUZEODcyMUZEMUQ3NUZERkU3N0MyQgotOjEwQjY1MDAwQTZEMjNGQjk4OENBOUIyQzgxMUU1OEVFM0YzNDREMjE5QgotOjEwQjY2MDAwM0U2MTYzODFDRUY2RjkxNjhCRDhFN0ZBNzI5OEE3NTkzNgotOjEwQjY3MDAwMDk4NUVGNDEyRTlGNEE3QTU5MDA3MjU5MjA0NDRFMDg5RAotOjEwQjY4MDAwRDI4RjM1Rjg5REQ2RkY3M0MxRTc5QUM5OUYyN0ZEODBGOQotOjEwQjY5MDAwMEIwNTdGMzBBRURGQzgyRkYyRDIzQjhGNTM2MTFCM0JDRgotOjEwQjZBMDAwRjczRjA1Rjk4NDhGQzYyRDg3RjMxREU1OTFGMjhGNkM2NgotOjEwQjZCMDAwMjQ0Nzk0RUZCMjc4MTE0RUU3NzYxRUY5QzMxREE4REYzOAotOjEwQjZDMDAwMzZDODdEQURFN0MzQzY3RDVERjJEQzkwNEVGN0Y1QjlCNwotOjEwQjZEMDAwQjU3OTlERUY2QkY4REVFOUJFNUVBQjEwQkZGQjlGRjI2NAotOjEwQjZFMDAwNjEzOEY5QzgyRTcxQjVGREJCQjAwQjNFM0MyQjVEQ0Y2OAotOjEwQjZGMDAwODdCRjYwMzlEMTIzQjBEMDU5REM4N0YwNjQ4MEFGODQzNAotOjEwQjcwMDAwQUI5MUFGQjZGNTc1NzVDQTU3MTk4Njc0ODRDMDUzQzIyQwotOjEwQjcxMDAwNTFEMjJCNjMxQThERDM0RUQ3OTI2RTI1NURCN0QzQUQyMAotOjEwQjcyMDAwNzFERDdBNzgxQUNCOTMxMUY3MzA3NUVGOEIxNjkyMTc3QgotOjEwQjczMDAwQ0ExQjc5N0MyMkI0QTM3OEJBMkFCNENGNTNFREZBRDdDNgotOjEwQjc0MDAwOTJCQTg1RTZGRDg2N0M4M0ExQkVDNzkwRjcxQUVBNkJBNAotOjEwQjc1MDAwODY3Q0I1QUU3RUY5ODEyMzU2QUUzRjA0NzRGNTZDMzUxOAotOjEwQjc2MDAwQjc5MDNFRDI1MUNFRjA3M0JGRDNERUNGQUQzRUE0OEZBMwotOjEwQjc3MDAwNUVBRDU2RTQ5Mzk2RTVDQzE3MDlFRDVCNUY1MTQ5RUU1QgotOjEwQjc4MDAwQjlFNDZBOEQ0MkI5NjU2NTE4OTdFQjJFMzk0NTNFODY1NgotOjEwQjc5MDAwRTc1QkJCNUI1NzIxOUY5NERGNUJDM0I4MURFNjkyQjdBNQotOjEwQjdBMDAwMzUyQTI2NDQ5RjZGNjk1NEEzRDBGRURCRUM2NzQ1OUQ4NAotOjEwQjdCMDAwQzdCN0Q0MTE1QzlCNTk1N0U1NUNCRUJCMTRDRUVEMERFOQotOjEwQjdDMDAwOTdDMkI5QkRBMTUwNzUyNEQ3QTAxREI2OUVDNzExQ0U5MgotOjEwQjdEMDAwNUIzNjNEOEFFMjMwMUFEMzZFOUQwMURGRTdCRjQxNjFERgotOjEwQjdFMDAwMDYxODQ3NjdDNkY4ODdCOTFDOTVFQzM0RjM1MTNDRTE1RAotOjEwQjdGMDAwREM0NjFFMDczMTZGQUQxRUNGMEIxQzVCMjg1RUVFMEJDNwotOjEwQjgwMDAwQjY5NEQyMDVFQkY1RjEwQkE1NkMyREQxNTlDOTQ2QzMwMQotOjEwQjgxMDAwRjdDNjVCNjg5Rjk0MUFGNjg5MjZFQ0MzQzY3RDcyNDgwQQotOjEwQjgyMDAwRjI5RjNDOTZBNzhCOTMxNEZDQkM1MENEQjk3NTA2RTBGMwotOjEwQjgzMDAwRTNEMjMxOTVEOTIwREZENkE4QjI1NTgzNzk1QzJDRkFCMgotOjEwQjg0MDAwOUY1MDIxQzFGRDU3MDlGQjE1RTUyNjA5QUZGM0I4OEZCRAotOjEwQjg1MDAwMzJCQjk2NUZDRUVGRkJGM0QwMUYyM0RERUNGRjY0QzA1RAotOjEwQjg2MDAwMkYyMTNEQkZGRkEzOEM5NzMxRkZDMjFGOTMzRjYxMUQ2NgotOjEwQjg3MDAwRUIxNzFDRkM3QTM2RjJFOTRCMDc2RDBDRTlGREQyQzFERgotOjEwQjg4MDAwRDc5M0QxMUU3OUU5MjUxQkU5RDk5Nzk2REJCODlERkJBMwotOjEwQjg5MDAwNjBBNDFGOEY5ODRCQkRCOTVDNUNGN0NBNTcwMzlBRTk0NwotOjEwQjhBMDAwNUM1RTQxRjgzQjlGNkVFNUYyNTVFM0RGOEVBMzNEQkQ0NAotOjEwQjhCMDAwQUQxMTU2ODU3Q0ZGNjAwNEVEQTdBQTk3QzJDOENFN0M2NwotOjEwQjhDMDAwRTk5NUFGODY4NkRBRTdGRUE3RUI5MUZFRjc0QjkxNkMyMAotOjEwQjhEMDAwQzY3MzQ4QzczMTVDMkZBODdBNzlGOEQzRTg1RkFFRDgzMQotOjEwQjhFMDAwN0JDODNBMTdDQTBCN0VGM0Y3MDFDODU3MkYzREM3RTU0RgotOjEwQjhGMDAwQTk4Qjk2RTYyN0QxQzZGOTU1RkE5OTlGNUI4NkEzOUQzOQotOjEwQjkwMDAwMEYzQUVCMDlCQjNCMjM3QkFBMkZBNzMzQjg3MDM4NUNGNwotOjEwQjkxMDAwMDIzOEUwQkEwMDJFMjU3ODFFNzQwNThGQTg4Q0ZGNTREQgotOjEwQjkyMDAwNzg3QzNFOUJGM0I3RUIxOEZBQTM4MzcwNTEzQ0ZDN0IwOQotOjEwQjkzMDAwQTRERkFFRDBGQUY5Rjc4MzVGMEQ0MEZFNzNCNUY1RTZFQwotOjEwQjk0MDAwRkM3RkI2REU5QkZGNjNEN0NCRTlGRDVENTQ0Mjg2NzQ3NgotOjEwQjk1MDAwQTRGQjhFNzRGREMyMEYyOEJGM0JEMjRERjNGRDhFRkJCRQotOjEwQjk2MDAwQkQxNEQ3REZGRDNGNzFGREZGM0JGODVFRjMxRkJCREU2QgotOjEwQjk3MDAwQUJFMUZCMEQ4MUVGNDgyN0ZBMzMyRkJERjJGNzY0NzY3OAotOjEwQjk4MDAwMERFQjdFRTZGRjI4OUQ0QjM5N0VBQ0VBM0U5NjA3RjUyRgotOjEwQjk5MDAwREY2NDBERUZCQjUzNDgxQUU5NTQwRTc5M0Y0M0FGM0ZDNAotOjEwQjlBMDAwMTUzMDdFNEUxN0Q4Q0I0OEZFMkNFOEY1MjBDOUNCNzU1NAotOjEwQjlCMDAwMkM5RkZDMTdCRTVFMkFGOTc1MjgwODA0RTBGMDdBNDIzNQotOjEwQjlDMDAwMUVEREIzNjJFNjQwQUYyNTkwMUY5QjU0NDFGMTYyNDZGNQotOjEwQjlEMDAwQkRCMjIwN0M2MjExQ0FBNzQ3OTZDMUJDQTA5RjIzOTEyQgotOjEwQjlFMDAwMjYyN0ZBQThDN0Y1NTIwM0I2MDE5NEI2NjBGQTVBRjJCMAotOjEwQjlGMDAwMkQxNEY3M0ZDRUExRDdBRjZFMzFFODQ5MzdCOUY0RTU0MgotOjEwQkEwMDAwNDVFQ0I5NkVFOEI3MkJDQUIxRDBGRDhBRjE1ODNGNDQ3NgotOjEwQkExMDAwQUY3QzJFQzM0OUVCQkM4OUQ1QUY3MDNBQUUxRDRFRTY2NAotOjEwQkEyMDAwNEMwRUE3OEU3MEY4RTc3MEVCMDAyN0ExNDc5QjQ1N0Q3MQotOjEwQkEzMDAwMjNEQ0NDOEVGQjlCQjA5RDk5ODE1RUNDRDc0QkZBQjRCNgotOjEwQkE0MDAwRDQ4QkFGMDY0RjI2RjQ2REIzMTg1QUMyRDdEQzhCRkJFQwotOjEwQkE1MDAwNjc0M0ZBMjVCODQ4Qjg1RjJCQkMyNTlFOEM3MDk3RjBEOQotOjEwQkE2MDAwOTU3MDMzRTJFMThGMTk0Q0U4QjcxQ0ZFQkRDQzc5NjZDNgotOjEwQkE3MDAwREM3N0EzODQ1QzNGQ0UxQ0MzRjNCRDlBNTQyRkVENDcwMwotOjEwQkE4MDAwM0ZBN0YzQkZCQUNEMjhENzhGNzFDNDUwMUNBOUYxRkVEMAotOjEwQkE5MDAwQzI5QzYxMzE0MzE1NTg2RjkyOTlGOTZDQTA4N0EyRUY0RgotOjEwQkFBMDAwOERFQ0FFRjc5OUZEQ0I1MzcwMUM2RURGRUQ2REU2RjZCNQotOjEwQkFCMDAwNkJEOEREQkVGMDdDQUFFRkIxNDJCRUY4RTE4NUNDMDNDNQotOjEwQkFDMDAwRjU4QjkzOTg1QkUxRjU1OTc0MkM4NUM3MzExNUUzQzQ2OAotOjEwQkFEMDAwMjBDNTc2QzVEMUJDREZFMjFFQ0NCRjlDRTM5M0YwODJDQgotOjEwQkFFMDAwNjYxRkI0NkY0MEJGMUU1MzJDNkYxRjk1NEZFRDdEMjYxMAotOjEwQkFGMDAwREVERTYzODZCNDRGMUE4RjUzNjg1REM5RURGMkM1QUJDNQotOjEwQkIwMDAwN0I2NzIwRkY5ODMwNTY2RjY3NUU5QUM5RUQyRTMyM0RGNQotOjEwQkIxMDAwOURFOTIyNzhBOTI2NzcwMkREQTc1ODkxNERGQTkxMUE1RQotOjEwQkIyMDAwRUVBREQ4ODc3NkZBREQzQzRFQTc3OEQ1NUQxMzg3RTA3OQotOjEwQkIzMDAwRkM3NkM3Qjk3MTdBNjcyN0VEMTlDQUVCQ0ZGQ0ZFMDcwRgotOjEwQkI0MDAwRjA1RERCMUU0NkRGMUQ1OURBNzU5OTE4MEZBMEI4NjY0NwotOjEwQkI1MDAwRUY4MzBGNzM2RTNCNjI0RDgwMjFCNDg2QzkxN0QwNEVDMAotOjEwQkI2MDAwMzhDOUI3RTc3N0U4OUY5QzM0NERBNUZBOTMxODhGQzM3RgotOjEwQkI3MDAwNjQyQjIyMjgwRTczQTJFRjczNzMwMkY0MzcxMTk0MEUxNAotOjEwQkI4MDAwMkM2RjA5NzMyNkRGMDNGMzJGMTZGNkUxMDJCMTVGRDRBMQotOjEwQkI5MDAwNzBBNjNERTdDMDc5RjVDRTQ4ODVFRjEzNTlFN0YxQzlBNgotOjEwQkJBMDAwQ0I0NDdDQjIzQTU2RDk4ODdFQTYzRTA1REM3RTJGRUI4QwotOjEwQkJCMDAwNjMzRkQ4RUZFQTRDNkVBRjlGMjQ1Mjk5MDdCODUyRkQwRAotOjEwQkJDMDAwNzk2QjZDMkQ2OUE4RkZBQ0IxMDQzMjIxM0Q5NDNENzZCMAotOjEwQkJEMDAwMEFBRTczNDIyQTFCQkYwMUUxN0VBRkNBMzZEMzdDNUIzQgotOjEwQkJFMDAwOEJDOUFGMTA5OUU1NDIzQzY4NDBEMkU0NUZBOTRGNzEyMAotOjEwQkJGMDAwQTE1REFDNjU0QzQzMDBGRDA5MkRCRjQ4NzFEN0I5MDg2NAotOjEwQkMwMDAwQ0IxNDBGMjRGNUFEOTYzMTgxQkU2OEM3NkZDREUzN0VBRQotOjEwQkMxMDAwODlFM0NFRTY0OEQ0MTdFNzNBRUNGQ0ZFQTQ4ODJCOUFEOQotOjEwQkMyMDAwMkZFRUQxRjRBOTZCN0VGMDNBRDQ0MzFGNTFDOTVGMzM5NAotOjEwQkMzMDAwRkYxMTdFM0ZFQzJGMEVCQjVGNDFCRDZEM0RERkE3NkM1QQotOjEwQkM0MDAwQUQzRThFODgzOURENjQwNzlBNUIzRkM2OEFGQUU2M0NEMgotOjEwQkM1MDAwODdDNzhBRUI1QzlCQTU1NTY3MjJERjE2RjcxMUZCMjE4RQotOjEwQkM2MDAwMTJBMENCRTJGQTYyOEE1NzUxQTM2MERGRTEzRTMxQkJGQQotOjEwQkM3MDAwQTI1MDBGMzZDNjIxNTU4OUI4MjM5OTVGMTNBRUREOEJDQwotOjEwQkM4MDAwNzA5QTEzRUREQThERjQ3MkEyMjY4REVDQTMwNzA0REQxMQotOjEwQkM5MDAwNERDMEI4NEFGNDY3OTg5QjEzNzEzRUZERjAzQjhDM0Y1MgotOjEwQkNBMDAwMjFENjk5RTEyMDdBMEU2MzA4ODcxNjhCMzMwM0U5QkIwRQotOjEwQkNCMDAwNjU2NTk4MDlGRDcyMTM5NjczQkE4NjdENjYzNzQzRkJGNgotOjEwQkNDMDAwRkJDQzJDMUNGRDBDMzc4QTdFNjcyRDMzN0IzNzQxQkVBNQotOjEwQkNEMDAwOTc5RDk5MjM2MzkxQUVGMjg4QUVDREZEQjQ0OUI4QkU2RAotOjEwQkNFMDAwRDMzRjYxQzM5MDFFRTZBRTVENDdGRTE4NDkxN0NDREMxQQotOjEwQkNGMDAwMzQyRTBFQzYzOUJEMzUyNTFGRjk2NjNCOUZFRTM3QjY4QgotOjEwQkQwMDAwMUVEQkI1RDNDMzM0ODVFODAwRDI0MzY5NDQwRjUzMUUwQwotOjEwQkQxMDAwMjE3QTE4MUJFOEJCMzgwN0Y1RDE3MkU2QzFGMzNEODFFMwotOjEwQkQyMDAwQjk1MTRFNjg2M0FERTRBRjZDNzM1ODVENjhGRjkyRkMyNwotOjEwQkQzMDAwNDRGMjBENzk1RjU2RDJDMTM2MzhFRkNEMTZDNkI2RDc2QwotOjEwQkQ0MDAwREEyOTdEQjZENkM5Q0NFOThDRURBQzREQTBGQ0VFNUExMwotOjEwQkQ1MDAwMTdBNTBEQjU1OUY0RkRCOTVBMzdFNUY3RDYwRUEzRkM3MgotOjEwQkQ2MDAwRkU1QTBGRTUwRkQ0MTY1MUZBNTJBRDk3QkU0QkJFMDRFMgotOjEwQkQ3MDAwNzAyMTNFMjRGOThBRTQ0NzczMURENjE2RjQ1RjRBQkU0QgotOjEwQkQ4MDAwNjRBNDlCRDkwMERFRDFGOUQ0OUVGODlFRTQ3N0I4MEU2NgotOjEwQkQ5MDAwNTM3RTkwMUY0OUZDQTYyQTVFNUY0MjBBRjJCMUU2OTlFMwotOjEwQkRBMDAwODhGRjQyRjVGQ0FFMTc1MDJGMkY3MUI4NDk0RjY3OUNBMgotOjEwQkRCMDAwRUZCNTAxQkQyMjVDOTJBREVDMDBEQTY1RUJFRUYxQjRCQgotOjEwQkRDMDAwQUM0RTA5QzJGRkNFMTI4NTk5NDNFOEVBQUVFQTMwNjY2RQotOjEwQkREMDAwMEUzOTM3RUVBRTg5RDFFNTY3RDVCQ0Y3NkEwRkU4N0YzQgotOjEwQkRFMDAwNDY3N0VEMERDNERCRjE5RjdFRjZDNDFGRTFGQjUzM0ZBOAotOjEwQkRGMDAwM0Q5QjhFRjg4Njc5NkM3RDBDQzc1RDFBREUzRThGNThCMAotOjEwQkUwMDAwQ0NBRkIwOTA5RkFCOEZCMDlGRjQxMUY2MTNGQzEzN0FCOAotOjEwQkUxMDAwOUZGOUE5OUZGRTM3RURGMzk2MUE5QjBCRTVFMjhGMTE3MAotOjEwQkUyMDAwNUYwMERGM0YwOTdDQ0RBOUIxMTExQzhCNTc3RUJBRUJCNwotOjEwQkUzMDAwMDVEQ0VGNEJBREM0RUZFNkFDMTBGQkQxNzAwRkZBNDQ1QwotOjEwQkU0MDAwMjIyM0JCMDQ0OEQ1MTRDRjdFRTIyN0Q2NDAwNEY0N0ZEQQotOjEwQkU1MDAwNDJFMUZCNTgwMUUxNjAxNkM2MUZBRTc5RkQ0M0U0MDNFMQotOjEwQkU2MDAwNEFDRDMxRjJCRjZCNzg2RjBGRTdFN0IzOUNEN0REQUJGQwotOjEwQkU3MDAwQUU3OThERUFCMUU2NUUzMTY4NUY5NEY3OTIyMzA2N0I3NgotOjEwQkU4MDAwQUMyRTU4M0ZEMjM2RTI2RjRFRDY2MTk2ODg3RTk2N0FCNwotOjEwQkU5MDAwQzU4OUEyREYzQ0YxN0RERTFBODVGQzlBMThDNzMzMERGNwotOjEwQkVBMDAwRTRCRkI2NEM5NUYwOTk5QjY5QTZGNDAxOENDMTI3RjlDMwotOjEwQkVCMDAwQUU5RUNFMjk0OUI3RjNENjQyM0JEQzFGRjU3OUQ2MDVCNQotOjEwQkVDMDAwMjFGQzc4OEVGODNFMzdDQjQ0QTlGQzZFQ0FFMkZERjYyMQotOjEwQkVEMDAwNUM5MzM3MDNFNThBOUU1ODlFODM2OUZFMEM4NDZGNEZGRQotOjEwQkVFMDAwQzc3OEIzMTI0MjA3REY4OEYxNzNDNUY4MEZFMEE2ODM2NQotOjEwQkVGMDAwRkZERDlGOTU2QTlEOUY0M0Y3MDFFOTFDOTNFM0NDQzk0MQotOjEwQkYwMDAwQ0E1Rjg1RjFBNTczRDY4RTQxMkVDQ0VBMkNFRTg0NkVFNQotOjEwQkYxMDAwNjhCRkNCOTJGRDg4RkJEODc2MUU0NzVEREVDNTM5MjIwRgotOjEwQkYyMDAwRUQ2QUE3RjE5RkMzNjlERDY0RjcyRERERkRBQkRENzgxOAotOjEwQkYzMDAwQkZBMEY0MTMxQkUxQjc3NEEwODhEQkNBRjEwRjlENEFDMAotOjEwQkY0MDAwMDY0OEJEM0Q3QkRDQUZGRTFDNDU3RThBQkQzQ0JFMTM3MgotOjEwQkY1MDAwNTI2RTY3NUQ1QUMyRURCMjZFRDg1RjlERjg4QjhFRUU2MQotOjEwQkY2MDAwRkUyNEFBNTMzQkY2NUVGNTNCRDlCMUFCOTQ2RkEyNTBDOQotOjEwQkY3MDAwOEU5MEVCMjk3Q0U1OEI3ODlBODc3Mjg1RkM0NDU1QUZDRgotOjEwQkY4MDAwQUM4Q0VGMkNDRUNCNjhDNzZFQjc3NzBCQkI1RUQ1RDIyRgotOjEwQkY5MDAwQTI0RUVEREQ0NkZCRERGMDJDODNGRkMwQ0NFODlFOTk4MAotOjEwQkZBMDAwQjRERjMxMzUyNzFBRkQwMDVGODhGQjI3NURFOTM5RDIwMAotOjEwQkZCMDAwRkU1REI1MDEzQTg5MDNCQTM0QkJBMkQxQkY3NUE5MEJBNgotOjEwQkZDMDAwRjk3QTU5MTYzRkZGMkYwODdCRjlBNTlEMkFFOTNEOTc3RAotOjEwQkZEMDAwNzY0NkQyQkVBQURDRjlGMDZCRTg3N0FDRENBMkQwMzRBRQotOjEwQkZFMDAwMkE1ODEzQzEwRkUwQ0FFQ0ExRTcxQUM2QjFDNTc1OUM2NwotOjEwQkZGMDAwNzc5QjNGM0QxQUNGOTVCMjVGNDU1NjIzQkQyRDZBNTBDMgotOjEwQzAwMDAwM0M1QjYxM0U2RDc2NTc3NEY3OTBGOURDODVGNDA2RjQ3RAotOjEwQzAxMDAwNTM2NjZCMTg0QUYwMTZGMzlGOUFDNUY5QTRBQ0I3QThGQgotOjEwQzAyMDAwRjE2MUIyMkY0M0JEOEIyNDE3RkQzQTgyRjFGQjI5QUQ5QwotOjEwQzAzMDAwQkZDMzc5OUVEQjM4Qzg4REZFQzI0NTBEN0IyQTQ5QUU1MQotOjEwQzA0MDAwRDgxOUUxNDRCQkMyNTkxMUI3RENERThGQTBFRjQ1NTlDNgotOjEwQzA1MDAwNUM4RTM5MjdGQzQ3RTc3NkYzNzcwMDcwOUVCOENGQ0UyOQotOjEwQzA2MDAwMkFEQzBFREQ4RTZGRDFBRTRBQzAyRDM2OEJFRjMzNTlGMAotOjEwQzA3MDAwN0Y1MTQzNEI1NDVGQTg3RkVBQzA3Qjk0REUyQkQ2QjUzQgotOjEwQzA4MDAwQzhEMTM0MDBDRkUzNTM3QjIzQzhGRjc1NkFFRjJGQzdCNQotOjEwQzA5MDAwQkYwQ0UzNUQ2ODE4RDMwREY3ODVFQzdGNzU5Njg1RUFENAotOjEwQzBBMDAwNUZEOEE4MTYyMUJDOTg5RkM3Q0Q1NDIwN0MwNzg1Q0VBOQotOjEwQzBCMDAwMzM2RTkzMkYyNTc0RkZGMUY4QTE3MzdCOUY4RjMyRTVDOAotOjEwQzBDMDAwMDRGMTU5NjFBRkI2Mjc5QTcwMUZEREUzNDVGQThFNDAzRgotOjEwQzBEMDAwRTI4MTdBRDZCRDkzN0Q3ODg2NTUzNUU2MzFBNDZCREE1OAotOjEwQzBFMDAwN0Y4OTU0N0Y4RDI5QTQ5RUNERTJBNjM4NTNDQjgxNjJFRgotOjEwQzBGMDAwMEZCRjY3MjJFRTQ1ODkzOEZFNDIzNTg3RkM4QUIzMDdCOQotOjEwQzEwMDAwQkFBNkRGODk3Q0YyNEQwQkUxNjM3MUI2NkIzQUYyQTdGOAotOjEwQzExMDAwQ0I0RDJBQzM3OTJFNEU2MTAxOTQ0Rjk2REMxQkI5MDk5MQotOjEwQzEyMDAwQ0YzMTM5RUZEOTgzMzgzRjI4NUZBMzMwMEZBQ0FGREM3NAotOjEwQzEzMDAwQUYzMjBERDI5RTgwN0YxRkQyNTM0MkYzMTA4QzkzNkM4RQotOjEwQzE0MDAwNDlFMTcyODU4QzFGN0RCQ0M0RTRCMUMyMzlCODI3MkI4QwotOjEwQzE1MDAwNTZGMDU5RUQxN0YzRDE3RjM2MjU4QkY0QjlFMzU2RTY0NwotOjEwQzE2MDAwNTNEMUFFRjQxQzhGMkYyRDRGRTU3MUNEOEY4Qjc4RjgwNgotOjEwQzE3MDAwRjJEODQwNDYxQ0Y0Nzc1RUUwQjc3QzRBMjAwM0UzMkVGOQotOjEwQzE4MDAwQ0E5RjRCQTRCODhCRjM1NkVFRjdDNEVGRTg2NzJEQ0ZFOAotOjEwQzE5MDAwODdGNjBFN0E2NzQzOTNFRDYzNDJFOEE5N0M4RURCODVEMAotOjEwQzFBMDAwRjVENDU4QjcyQkNGODFGMzc1NUUyNDM5Nzc1RjI0NDNEQwotOjEwQzFCMDAwMzlEN0Y0NDIyNDhGOUI3QTI2NkNCMzJEMDQ2RkFGMEFEMwotOjEwQzFDMDAwRkE5M0VGNzdCMDNCNzg5Q0QxQTMxNjFFOTdGQUU4RDY4NgotOjEwQzFEMDAwNDRCRjNGMDQ1RThGNUFCNDk5MDgwNzVDMDdDQUY3OEJDNwotOjEwQzFFMDAwQUNGNTE5MjhGRkNBRjkyRThBQUFBNzc5OUUxN0Y0QkVDMgotOjEwQzFGMDAwMjhCQzlFQzc3MzhCRkJDMDU4MUZGMzJEMjIwRUJENzU0NAotOjEwQzIwMDAwODc4REUyODBDRTI2MzZFREM3RjFDRkVFQzg2NkI4RkU0OAotOjEwQzIxMDAwOTYxNEZGODIwMzU0MEVGMjI1RTBCM0Y0NTk1QjAwRDc2NQotOjEwQzIyMDAwNzM2NjA3Qjc0NzlGQjE3MDc5RURDQ0U0MDQxN0UyQjdBNgotOjEwQzIzMDAwNjhDQTg2RDk2NEFGRDk2MjUzRDBDRTc3NDY2MUQ2MDQzNgotOjEwQzI0MDAwMkNERkRBOURFMkNGNEI2QjZCMjg3RUJCMTREODA2REU2OQotOjEwQzI1MDAwMUY4MkI0MDhFRjAxOUREOTlBNERGMTY2NjdGMEREMDZBMwotOjEwQzI2MDAwODVCRUFGQzFFRjFBQUI5RkZEMjM4NEM3NzZBRTVGOUQzRAotOjEwQzI3MDAwN0RGNjZGRDlBMUYxREUzMjJERERBMjhGQUY5Mzc0MjI0RQotOjEwQzI4MDAwQ0IzRkNCRTJGQUQwNjc1OTVDOUYzQjlCQzVFRDExMTVDNAotOjEwQzI5MDAwMTEwRDhGQTZEMjNBMzlEQzAxNEZGQzFEMUJENjFDRjlCQgotOjEwQzJBMDAwQ0JDMTE4NEY5MUFFMjAxRjc5OUMwNTMyN0U4OTc2ODdDRAotOjEwQzJCMDAwRUQ1Q0ZGM0FCQkQzNDI3MUVCQTUyRjQ0N0EyODhFNkQxQgotOjEwQzJDMDAwRjU3NTI2OEFBNzUwQjk5QzVFNkEwMkYwNDFBQUZDNzRGMwotOjEwQzJEMDAwM0JDNTk3NzU3QjM2MkNERjQ2RjIzOTIzM0RCNzc1QUJFRQotOjEwQzJFMDAwMkFDNjAxNUQxMEQ3QkQ4REM3MUQ0RjQwNTk5MkNBNzMzNAotOjEwQzJGMDAwQTlGQzhDQzg5RkQ5OUY0QjcyMUZGNEVGQzFGQjU1QTVCOQotOjEwQzMwMDAwM0ZGQTMxODdFM0Q0OTJCN0I4REM2NTI3N0U1QkRFRUU3NwotOjEwQzMxMDAwRTcxOTE5OERFNzYwQzVFQTExRDE3ODVGOTFCREEzMzJBNQotOjEwQzMyMDAwOTQ1QjhDNzBCQTZDNzZGNzQwM0UzQjNDNUJGMERERkQ3NQotOjEwQzMzMDAwNEY5MDdGQUE0Q0RDMjMyODdCNTZFMTdFNjhEODg3NzgxMwotOjEwQzM0MDAwOUZCMzZDRDU4OEM3ODgzRTdGNjc2MUU5QjA5RUYzMERDNwotOjEwQzM1MDAwMEY0Nzg1RTIyMzJEOUJGM0M1RjZGQTU2MzdENTJGODM3OQotOjEwQzM2MDAwRkFEODRGRDlBQTM3QTM2ODNFREIyQzE0QUY2MkM0RTNENgotOjEwQzM3MDAwNzc2RUZGQUNGQTlEREFCN0QzNDcwM0I3QjM3NDU4M0Y3MwotOjEwQzM4MDAwNkJGQUMxMjdEMEZGNUY3Nzg2Qjk3REY0QjU4MUVFQzEyNgotOjEwQzM5MDAwOURCMzM0MkNDMEY1OUZEQjE1NDY3Q0VCNUMwQ0U3MEY5RQotOjEwQzNBMDAwQTc4MDlGRkEzMjcxMUVCN0ZDOENFMkJCREU5RDRBRjc3NAotOjEwQzNCMDAwRjcxNkZBRjVGRENBNzFCM0IyMkQzQ0ZFMkFDRTFEOEREQgotOjEwQzNDMDAwRjE4MjE1RUY3MDNFMDg3OEI5OTVEQUJGNjNBMUY2QzYyMQotOjEwQzNEMDAwNzVEOEIyMzlGRjZGREY5RkJCMjI4ODFFQ0VGNUU0Nzg5NwotOjEwQzNFMDAwMzlCNzNCOTNDRUE3OTYxODRFRTczMERGNjRCQ0VGNzdBMgotOjEwQzNGMDAwNkU1NzY2MUVEREEzNDNBMTA3RThBMTU0RThCRkU3NjJCQwotOjEwQzQwMDAwMUE5MjlEMjFFNTJEMTZBMUM3MDVBMDI2RDIwREI2MDFEMQotOjEwQzQxMDAwRkU1RTVBQzNFNUFEMzJGQjVBOEEyRkMxNzhEREExRjkyMQotOjEwQzQyMDAwOTQwNjZDQjExREUzNkU4MTVFNDlCRkFDQ0RFNkU3MjA5QQotOjEwQzQzMDAwQzNGMUUyNDU5QzM4Qzk0MTBENTZFNERCOUE5MDE3Q0IxNQotOjEwQzQ0MDAwNzcxQUUzNzY3OUY5NkNEOTFFQUY2NEM4Mzg2MUE0NDNEMgotOjEwQzQ1MDAwOUY0MjcxMkE2NTJCRUU1OTQ0RjFGN0Q1RUJFRUM0N0Q2RQotOjEwQzQ2MDAwMjZFNzVGNjY2NjQ1QThBN0I1MjgyQUNEQTMyNThDRERGQgotOjEwQzQ3MDAwM0QwNUU1Q0FEMDcxNDJFNEI5NDVEOUVERjY1NkU2OENFMgotOjEwQzQ4MDAwMjczOTk2ODRGRThBNkMxN0E3MUIzQzQxRjE5RUUyMEE2RAotOjEwQzQ5MDAwNjUyRDhEOTMyMkY1NURCRTJFMDkyNzAwODcxNUUzMDRENwotOjEwQzRBMDAwNUJDNjg4RjIyRUQ2MkRFNzY5NUM3N0JCREM5NUNERjlBQgotOjEwQzRCMDAwNTE0QjhBRUI2NzIzMTFDRjZGQUI3NEZGRjdGMjM3ODNEMQotOjEwQzRDMDAwQTI2MzNCOTFEMzgyRTdCQzM1MTgyRjBCRjM3RjI4OUJFNwotOjEwQzREMDAwRDFGQ0E3NjQ3MzM5QkQwQ0UzNzE2MTlFMTkxQkY1RjFBMgotOjEwQzRFMDAwRTI1OTVCRjRGOTdFM0JGNUY5OUNCREZBRkM4MDQ2N0Q5MAotOjEwQzRGMDAwREU3RDU0OUZGRjAxOEUzQjg0RUJFMTc4REYxOEY1NzAwMQotOjEwQzUwMDAwNEM1MTBGNzdEOUI4MUU4RTc5RDRDMzMxNDUzRDFDQkYyRAotOjEwQzUxMDAwQTMxRThFNzlENEMzMzE4RjdBMzhFNjI1QkM1MTFGQzc0QwotOjEwQzUyMDAwM0NFQUUzNThGRTlCNkM3RTNFOTY4Qjc4NEJDNDAzRDI2QwotOjEwQzUzMDAwM0I3QjMxNEM3NzFGRTlEMjJCRkM3RTA5RDAwMURGMzdFMgotOjEwQzU0MDAwMzNBREI0NkYxRUM3MUFBNDhGNzBCQjUzQ0ZBOTc2MTczMwotOjEwQzU1MDAwQzYwRkFGOEFEMzc2NjQ3N0M3N0IyODREQUIxMjExNkZCNQotOjEwQzU2MDAwRTY2NjhBNjNBRDdBODlDN0IxOTZFNzg3MzlEMEZFRDE4RQotOjEwQzU3MDAwQkNGMkQ0MkEwQzBGQkQyMzRFREI4REY1MkY1OTVBQjdEMAotOjEwQzU4MDAwMjE3QzJCNkE4RUQwN0RGREU2NjVBRTc3NkVFMEY4MjNDOAotOjEwQzU5MDAwM0IwQzJCODkyNTM5QUExOENGQjlEOEFFRjE2ODhDMjc2NgotOjEwQzVBMDAwNjc2QkY1RjFFM0M2Nzg3MjYzMUNCOTkxMEVBNEZDRjdEMgotOjEwQzVCMDAwOTRBNTM1MTFGOUZBQTczQkVDNkI3MUZFOUY4Njg5RkJCOAotOjEwQzVDMDAwMzAzM0VDODY3ODAwMDdGMTkzQzUwRjJBOUJGMUJDN0VDRgotOjEwQzVEMDAwMjc5QkRGQ0I2RTNCMDZGMjdBMjdFN0FDNENFNzVFMTk3MAotOjEwQzVFMDAwNDQ3Mjc5N0I3RUFENjJBMkY4NzRDRDQzRTdEMDEyMzFGQwotOjEwQzVGMDAwQTc2NEE1QjU2NTM1RjJCOTQ1MjYzQTM3MkY4M0JDNDYwMQotOjEwQzYwMDAwRjJFMEZCMkFDOTBGRjhBRTU2RTg3QUYwNURBRDUwRkFCOQotOjEwQzYxMDAwQzI3N0I1RjRGNzI1N0FFQUVBRTNCQjVBRkFGQjEyRkREMgotOjEwQzYyMDAwRjRGMUY5RDM5NjFENDJCRDdGRUFEQTQxQkE3QUYzQkM0MAotOjEwQzYzMDAwMjMwQzcwMTRGMzE2RjJFQzNDMzgzRjNDMjg1RjJFRERERgotOjEwQzY0MDAwOTA4Q0Y4NURCMkE4QUQ2NTM1RTA3N0M5QkUzMDM3OTZGRAotOjEwQzY1MDAwOTdFMEZGMDE1RjJDODEzRUYxREU2NUM5NUU3MTdGQjkxNQotOjEwQzY2MDAwNDY3RjBFQ0YxNUU3NTA4OTk5Rjk5Q0IxNDEzQTJDNzE1QwotOjEwQzY3MDAwMzI0RjBDQjQ1RkQ0QUY2OTAwQkU5RkI1RTg4REY3ODYyQQotOjEwQzY4MDAwM0E1MzUxQ0YxOEQzMDNGOTUxQjJDNTQzNzFCNUU1N0I4NQotOjEwQzY5MDAwRDI2Mzk2NDFCRkNEN0RCNTZGOTFFRTRFRDYxRjc5NjhCRQotOjEwQzZBMDAwMTY5RTg3N0JCOEZFRjdFOURBRTdBMzI4QkU0Q0QwNUI3RAotOjEwQzZCMDAwQjJDNTE5OEU3OERGNTRDRkUzRUJEMDdFQTZDNjA2RTk2QgotOjEwQzZDMDAwNjI1MzdENUM3ODVGNDc3MEJENDEzQUY4ODZGMDA0RjhBQwotOjEwQzZEMDAwRTE3NjlFOTJDM0U0MTc2OTZCMTBFQjFEQTNGODUwQ0U3MAotOjEwQzZFMDAwOTZFQjkzRUY2RUIxMTVCQzlGRUY4OUZDNDlBMTZGQzgyMwotOjEwQzZGMDAwNzU5RUNGM0UzNEMwODVGNzNBNkEwRjI0QUJDOENGNEQ0NAotOjEwQzcwMDAwM0JCN0ExMUU3MkM1QTYyNUY2MUI4MkYxQTBFOTdGQzQyNgotOjEwQzcxMDAwNzdEODRBM0ZFMEVCRjlDQkZBODJBOEUxMjg3RkVFQjI2NgotOjEwQzcyMDAwQjgyNzQwN0U3NUZERDM1NkQ0MkI0QUNEN0UyQkM1NjdFNgotOjEwQzczMDAwRUVEODY0QzU3OEU1MUJCNzZGQTJFRjBCQjYxNzUzM0M3NAotOjEwQzc0MDAwRTY0MjU2NERGQUU4NjlGOTRFODI4MDQ3Qzk1ODY1QTMxQQotOjEwQzc1MDAwMTNFNjVEREI4RkYzOEY5MjcwRUVERjAzRjlFODU1N0MxMwotOjEwQzc2MDAwQTdFNEYyNzYyNTBGRTM3Q0E2NzlGNzU4OEJFMTdCQkUzMAotOjEwQzc3MDAwQTg2N0RDMjc2RDZGNEQyREVDNEVGMEUwRjc0MDNFNjA3MgotOjEwQzc4MDAwQTBEREE3NzVEQzE3NTNBRkE0RDBCRTk4NzZBNTNGRTkwRQotOjEwQzc5MDAwNjlCNzA1QjJCOTNFOUM2M0QwODdERjUyQjkzREFGOTEwRQotOjEwQzdBMDAwRUY4MzEyNkJBMERCNTREQzI3MDcyRDI0RTc1Njk4RjlBMgotOjEwQzdCMDAwM0I0RjE1RjBFRkVCMjFGNThFNTQ3NUY0NUEzNTJFNDJCMAotOjEwQzdDMDAwNDdDRjMzNThBQ0VFM0VDREVEMTg1NDEyOTI5RjM2MjEzMAotOjEwQzdEMDAwNEQ1NzdGRkFCNEZFMDZGQUNGMEY5NjEzMUZCOTVFNzc1NgotOjEwQzdFMDAwRUZBRjYyQTlDRkE1OTA5QzM5NTZGRjlERjFGODQyQzZFNAotOjEwQzdGMDAwNkVENkI1QUY2MDUzODJGNTkwQkVCNzI4NUNFRkQ5MUJGQgotOjEwQzgwMDAwQjMxOUVEODAyNTI2QUUzRkNERDBGOEY3Q0EwM0ZDM0IyNwotOjEwQzgxMDAwOUJDMTc0RkJCMDRGOUFGQjhGRkM1Q0I0OTBERjQwREE5NQotOjEwQzgyMDAwREI2N0UwQkYzQjgxM0Y2M0UxRURGN0Q4RjExRTNGREEwNAotOjEwQzgzMDAwMjc3NEY3QkI4NUJGMTBFNzhENzhBODEwRjZBNDhBMkM2MwotOjEwQzg0MDAwNkU0RkFBRjAzNTU5RjE5RDA0ODBCRjM5MkU5NkVBRDk3MgotOjEwQzg1MDAwRTMzMEFFQjI1RTIxN0IyM0E2NEIyOUNFNTIxRkE3ODVDMwotOjEwQzg2MDAwRkQ2MUZDNjNFNTMxQjUxOEY3ODlCMUJDMDRERjI5NDJFRAotOjEwQzg3MDAwRkNCRUM0RTM1MjJCRDEyRTE0RDVGMTdEQjQ0QUI0MTNCRgotOjEwQzg4MDAwQTE3RENCRjAxRURBQTE3RTJFMjExRkY5NTdGNTQ0Mzg4OQotOjEwQzg5MDAwNEU1MEYyRThERUU2Q0U0MzU2OENDRjlCMzYyRDI2MEY2NwotOjEwQzhBMDAwRjc4RjkxQ0UyNDdGODc3RDRENzE4NTZENkYxRDIxM0E2NQotOjEwQzhCMDAwNkIyQjMxMTMxRDVGMEQxRTk1MUU2RTY3MzVEMkRGMDI4NwotOjEwQzhDMDAwRDY2NEM1RkIyOTBCRjYyQTZFRDQ0QkIxMUVDMkE1MjczMAotOjEwQzhEMDAwRDJBNTAxMkU3MUIxMURFMTIxRTFENDBFMzc0M0Y5NDJGOQotOjEwQzhFMDAwQzZFMUI1RjA4MEUyNDdGRUQ4MDE0RTAyN0VDNkY5Nzc3OAotOjEwQzhGMDAwMDUzRkI5QUUwNTlBMzYxRUY5ODQ1Q0RGNDI1QzA3OEVBRgotOjEwQzkwMDAwMDNFQkMwNzFBNERGODIwRDMzRUVENzM0QjI1RjU1N0FFQQotOjEwQzkxMDAwNzk5Q0FEOTEzRUE2NUNFMTc2OTlEQkFGOTgyOTlEMzY3NgotOjEwQzkyMDAwNDFCRjNGQjExREVFOTNEQkFFQzQ1M0Y5QjVEMjRGMjVFNQotOjEwQzkzMDAwQ0MxM0NGODU2QkE1MUJCOTFFQzk4RjgzRkI4NERGNEIzRQotOjEwQzk0MDAwQjhEQTNCNDc0NkZCRTREQkZEODQ3RDcyMDgxQkEyOEIxMwotOjEwQzk1MDAwNkYxNkZDRDZEOERFMThERjJDRTUwM0UzQjk1MzFDNjk0QgotOjEwQzk2MDAwQTI3OENCMzY0NzJBQzkxRDkyRkY2QUUyNUNEMTU2N0U3NwotOjEwQzk3MDAwNDFGNTM0QThDNzY3RTNEMTlENDM5QUIwMTMyRThFNEM3RQotOjEwQzk4MDAwQTU3NzI0OTI5N0M1QzUyM0JFOEFDMzlDMTRENzVGQkNFNAotOjEwQzk5MDAwNENBNTM4RUE2MkE4RTcwQTkxNUI1NkFENDg0QkM2NzNDRQotOjEwQzlBMDAwRTRDNDdEOTk0RkZBNDA5RTNGNzE2RkI3Rjg2MTMwQ0U3NQotOjEwQzlCMDAwQTcyQjJERERFQ0FFNjBCRDEzMkIwQjkzMzFCRUUzRDM2MwotOjEwQzlDMDAwNzVCNjE5RkU0RUUwRjU5NTM4MzcyQTdFRkEyMTlENzMyQgotOjEwQzlEMDAwMTc0QzZGNDVDRDgwRjZFNTJCRjc0NUUxRjU4MUIyOTUxMwotOjEwQzlFMDAwRkM3QzVGREU1N0ZCQjIxRkY5N0QzNzZENzMyMkZDOUMyOAotOjEwQzlGMDAwOUIwNkEwOUREOEMyNjFEQTJFNTc5NEFFMkNFQzgxNzJCMgotOjEwQ0EwMDAwNDdGOUI3NDc5RTc0RTJCREYwNjU5Njc4OTQ0QkNGQkM2QQotOjEwQ0ExMDAwMEZFN0E0NDJFNzFDQzkxM0E3QzNBMDBCRjJDMzQ1RDI3QQotOjEwQ0EyMDAwRkI2N0E3MTVFNjQxN0ZENDc5RDNBMTJGNTdBM0JFOTgwMgotOjEwQ0EzMDAwRDc5MDExODBGNDdBQkI2NkU5OEY3QUMxQ0FBNzQ5OUU2NAotOjEwQ0E0MDAwMjlCRDdGNTkwNkJFNDNBODJENEI4RkVFQ0M5RTIyRDMyNQotOjEwQ0E1MDAwNkRFMjNDNDdCOTFFNTM5NEVCMzFCRTA2RTU3QUNDQTM5OAotOjEwQ0E2MDAwNUM4RjI5Q0FGNUY4QkQ2QTgzNUUyRThDMTI3RTRBNjlGNgotOjEwQ0E3MDAwNzdFRTUzRDc5QTg3N0UzRkRGNTg5NjU1NERFN0IwODNDMAotOjEwQ0E4MDAwREUwNTVFQTI4NEJCOTEzRjJENDExOTBBRjM3RjhFMjAwMwotOjEwQ0E5MDAwQkIwMzdCRkYyNjFEOUVFNUJCQzFGMjVERTA1MUFEMjBDRgotOjEwQ0FBMDAwQUI4NUVDOTMxQkFFRDg1OUU4M0RERDMxMkM0Njk3MkY3MgotOjEwQ0FCMDAwQjAyN0VBRUExNzNBNTM3NEU1MzcyNjY0RUJDQTZGNzI3NwotOjEwQ0FDMDAwRTVFOUYyQjc2NDBERDdENTlGRTgxRUEzQ0JERjNBRUNCQQotOjEwQ0FEMDAwMjY1REZEQzk5RUM5QkFGQ0Q0QTI5OUJBRkFCNzc5OEI3MgotOjEwQ0FFMDAwNzVFNUQzNjcyQ0QyOTVDRkQ0RUVEMUU1RUYyQ0I5NTdBRAotOjEwQ0FGMDAwNTdGRkFFRUE2NUJBNzJGOTRFNzIyM0VBNjMzNjdDRkZERAotOjEwQ0IwMDAwQzU0RUE5N0MyRkY5ODcyQUEzRjdEODQ2MTY5OEI4OUQ1OQotOjEwQ0IxMDAwRDFDNkNGQTMyNTZGQTczQjQyRTlFMEQ2RkU1QzJGREQ0RgotOjEwQ0IyMDAwOTVFM0I5QjlGRjkwRTA3Qjk4RjI5RENCQkJGQTczQkM1QgotOjEwQ0IzMDAwMjZCMTgwQzJGNUUxQTY0NEE0NjM2MzNENjNGOUM4ODhDOQotOjEwQ0I0MDAwQzM5NzVEODBDQkQ3RkExRkI5Q0Q4Q0VGNDc1RTc3Nzg1RQotOjEwQ0I1MDAwNTAxQUU0QTM3MkMyNkVBN0ZDODhDM0NGQTc0MjNFN0VFMAotOjEwQ0I2MDAwRTdBRDNDM0ZGMEYwNjUyQ0Y3RTc0NEYxRkM1NDQ2QTJGQQotOjEwQ0I3MDAwNDlFQUNFRERCNzYxM0NDQUM4MUI1MkQ3QkFCOTFEQTU3OAotOjEwQ0I4MDAwRDNGQkVFMzI0NTc4RTAzRDcxODQwN0E2MDFBMDYzNENFQgotOjEwQ0I5MDAwMEYwMzFENjM3QTE0RTg3ODlFMDVFNjA1NzQ4Q0U5MzE2RAotOjEwQ0JBMDAwRDA0RkYxRkI2RjQxM0ZDNUY0MkREMDRGMzFGRDFERTg1MwotOjEwQ0JCMDAwQTU5ODM2ODE1RThBRTlCQkI1MzMyODdEQkY1NkEzNzYzQQotOjEwQ0JDMDAwN0ZBODJEQTFGNEMzREE2QUZBRkU3MTZEMERBNTdGQUFDNAotOjEwQ0JEMDAwRjVEMUY3N0JGQjRCRkI0MzQwRjdERTY4NTdFRjhBNEEwMgotOjEwQ0JFMDAwM0ZBN0Y0NkJENjU1QjNFNjA4RTQxQkNERTY5OENGRUMyRgotOjEwQ0JGMDAwNDE3RjY1RDc3NjAyMzNGQjJDNDQ1RUNCNTUzQzJCRkE0NAotOjEwQ0MwMDAwRDNGOEJEOUM3NDlGNDI3Qzc3QTQ2OEY3MjE3RkY4MjBGRAotOjEwQ0MxMDAwNjU2QUZBMjAxNUNGQjFFQTU3MzFENEU2MDM1M0U3RUYzRQotOjEwQ0MyMDAwNDdERTI1RThDMzk3RTM3OTA4REI4REIyRjNGQkM5QTNBMAotOjEwQ0MzMDAwRUNGQ0ZFRjEyODczNTMxREQyNTdEREQ3Q0M4NUYxM0ZCNAotOjEwQ0M0MDAwODcyMkY5QkIxRjc1Rjc5OUZENjgwNzU1QUVGMDdEM0U0OQotOjEwQ0M1MDAwQkExQkEzN0NEREQ3Q0Q3NDVGNzk5NEQzOUQ4MEU3OTUxMwotOjEwQ0M2MDAwQ0NCN0ZCRkRGMTRGNDg5QzhGRjRDM0NCRjg5RTcxNTdCNgotOjEwQ0M3MDAwOUEwQTUwNUUxOEVEQjBCQTkwOEY4NEM2MERBMEJGRkQyMQotOjEwQ0M4MDAwNTBFNDY3NzIzRTBDQzc5M0ZFRkQyRDVGQjM4MDY5NDA5MAotOjEwQ0M5MDAwRDA4RjNGQ0FERTk0ODI3NjgzRDFERkIzQkI0M0UzOTY2NQotOjEwQ0NBMDAwQTRCRjVFQjlEMkFDQTI1RDU1QzYyN0M5NzFFNDdDMjM4RQotOjEwQ0NCMDAwQ0REMDVGN0UzMEZFNjg5NEIzMjEwRkZEMUQ3NTE1MEUzQgotOjEwQ0NDMDAwRUFBRjA3N0NCN0U2NTMzRDhGNEFFRDFBRjJEMDJFMzcxNAotOjEwQ0NEMDAwQkFEQzQxNzFCMDMyNEVBMDg3NTgzN0Q0QTM3NThFQkJGMQotOjEwQ0NFMDAwQTI1MTlDQzQ2ODExMjc4MUZERDg3OUI5MEZGQjE5RERDOQotOjEwQ0NGMDAwMkQ5MDg4NzE2MEEzQUJGOTNCNjQ0RjI4RDAzRTNGMTg1QwotOjEwQ0QwMDAwQjc4MEY1MjM0MkY2MkRDRTEzRkJFREZCREYzMDVGOTRBOQotOjEwQ0QxMDAwQTMzQzFFODJFRjU0QTlEN0I5NDQ1RUZBMURFRDYzQzk0NgotOjEwQ0QyMDAwQkU1NTIwNzhDREYyMTRFRDFEQTQyM0FGQ0RGOUU3MDg1MAotOjEwQ0QzMDAwREFERjY5QkREMTZFM0E1OUM4RjVGRjg0NUVERUZGRjdEMAotOjEwQ0Q0MDAwRDA4Qjg3RTNCQjE3MjM3QjlCOTE2RTI0NUUyNDlFQkIxNQotOjEwQ0Q1MDAwQTIyMzg5Rjc5MDM4MzNDMjczN0JEQzk4RThDNzQ4NUYxOQotOjEwQ0Q2MDAwNUREMTk1QTRBNzUxNzY4RTc3QzQyQkM2QTk0OTNBNTJCNgotOjEwQ0Q3MDAwQUVGMDc3REQ0Njk3REJFOUJDOTM3NDY0QTQ4MzhFNzREMAotOjEwQ0Q4MDAwQzRFOUIyRUVGQjc2RUFBRjIzMUQwNUYxOEZGMEY4RDdDOAotOjEwQ0Q5MDAwRTlBODU5NDVGRkQ1QjVEMkNGRERBRDZDN0MzNDE0MTU2QgotOjEwQ0RBMDAwQTQ2QTc3MjE1RDE0NUY3MUJEODZGOUI5NkNDQzc4MjREMwotOjEwQ0RCMDAwMjk1OTNFQTE4QjcyRURBRkFEOTZFODEwM0ExQjI1RThEQwotOjEwQ0RDMDAwNkM0OTE3RjU2NTNERjlFRTg1RUNGRjYxQUNERkJENjM5RAotOjEwQ0REMDAwRkQzNzg1RENGMDY2OTg4QzUzRjEzOEYyODYwNkUzNDYyMQotOjEwQ0RFMDAwOTcxNDcyRkEyQTRBNTE0OUVFMjhDOEUxRUY5RjMzMDc5NwotOjEwQ0RGMDAwOTdCMzVERjAxN0Y5RjFDRDRDM0IxQTlEODJFRjk0N0ExMQotOjEwQ0UwMDAwRTk3REQyRjFERDBDRUY5MzBBRjlCQ0M4RTBFN0JGMzk0OAotOjEwQ0UxMDAwRTc0NjkyQ0Y2RkJFQ0EzQkQ3QzM3M0M0M0RCNzE0OTZFMwotOjEwQ0UyMDAwNzI4REVGOTA3QTcyNDgzRkZDQUVFRjkwRjJGNzZCQzdDRAotOjEwQ0UzMDAwODlGRDlFMjRFODI5Q0RBNUIyOTFCMUY4OUVCQjY2QzZCNgotOjEwQ0U0MDAwQzNFNTI4QkU1RjNCMDBERjc5RjU1MUZFMjZFNkE3RjQ3NwotOjEwQ0U1MDAwMTYxNjIwMzk2MjIyMUM0NDk4QkYxNTQ0NThDQzFGODlFRAotOjEwQ0U2MDAwOTgzNDBCRUYxQzE2MEMyQUU4OEJERjQzREVEOUJCMEQ4MAotOjEwQ0U3MDAwRTc1N0E5NkFGRkU1MEM3OTY3RUZGMDM4MTdERDVGM0RFQQotOjEwQ0U4MDAwNkM0RjIzMzkxNEY3QUIyNUM0NUVGQTA2OUNDRjdENjE0NQotOjEwQ0U5MDAwN0Q0N0UwRkNDNkY0NTUzOEJGRkJDMjM5RkEzQTlDREY0NwotOjEwQ0VBMDAwOThCRjM5NkIxOUMzNzZFMzVERkFCODI3RDlGRTE2NjdDOAotOjEwQ0VCMDAwMDEyODZBNURDM0VGOTYwMTJGRjY0MkY4QkUxOTkzMzkzNwotOjEwQ0VDMDAwMEVFOUUyQ0Q5OEVCQzZFMTdBREY4Q0U5NjFFMkE5Q0QwQgotOjEwQ0VEMDAwNEE2OUVFMEI3RDNCOTM5M0U1N0UwODhFMzc5RUM2MzMwMQotOjEwQ0VFMDAwQzI1N0MyRDMwODQ3MDlERjdGMDE5RUI1Mzk0MzNBQzIxMgotOjEwQ0VGMDAwRjMyRUQ0MjNEMDdFNkI3RjJGMkEyMTE1RkQ5QjlDQ0Y1MAotOjEwQ0YwMDAwNTY0NDI0OEJGNzQ4REYxRUEwQTY2MkJDRUYwODlBRTdDMAotOjEwQ0YxMDAwRTg5QUUxQ0M4Q0ZFNzYzQjg3RDNBOTVBRTY0M0Y4OUU4QgotOjEwQ0YyMDAwQzEyNUEwQzFEQjYwREY2M0U2QjFBNkQwMzhFODNEMzY5RAotOjEwQ0YzMDAwNkQxREUyRjVENDQ2OTVFRUVCNUY3ODJFOENFQzc2QTc2RQotOjEwQ0Y0MDAwRkREQzJFNTk2OUQyMUVDNUYyNzJENUI1RDY4REYyRTYzQQotOjEwQ0Y1MDAwOUIyQTdGNDdGNDlCMjNDOTUzMjJBRjgxNUVCN0YwNzdBQQotOjEwQ0Y2MDAwMEVDQUVERTMzQkM1QTdENDJGNjdBNTdBRUVFMkYyMEQxQQotOjEwQ0Y3MDAwRDNGRDFFNDUyRjFCN0YwRjQyQkU0QkQ5OTVCQzM1MzRDOAotOjEwQ0Y4MDAwOUNGM0JENUUzNkNFQUYyNTdFMzc1QTg1MUMwMEZEMEM2NgotOjEwQ0Y5MDAwMDUzRTlCRjRCMzcwRDJCNzFFOENGN0VDNDYzQzgwMUU2NgotOjEwQ0ZBMDAwNDNFRjRGQjVGNThBQTRGM0U5QjA4ODhCMUIxREU4NEYxQQotOjEwQ0ZCMDAwRUZBRDE1ODlERjFENzg1REJDRTc3RTU4QzRDQjM1NjRDNQotOjEwQ0ZDMDAwNjgyRjYyRkJENzVEODc3QkExRkRFMTA2QzZGRDQwMzc3OAotOjEwQ0ZEMDAwMzlGOEZCRjlEN0FBOUYxRkNBMTFGQUY5MDAzNkUwOUE2RgotOjEwQ0ZFMDAwN0UyN0ExQkI0QUY3Mjk0NkIzMENGMkMzMTdFMDdDOTExOAotOjEwQ0ZGMDAwQ0ZCRDMxRDc4Q0U3NjRDOEVGMjREMEJBRkVBRkZENEU2OQotOjEwRDAwMDAwMDI2M0FEMkFBRTJCQzlBOUIwQzc1M0FFRkQ3NzEzNTQ0NgotOjEwRDAxMDAwQTE1N0M5REY0RjI4RTI0NTFEN0UzN0UxOTc1MTQ1M0NCNgotOjEwRDAyMDAwMkVERkIxQTBEM0RGNEQ0ODEyRUY1QTMzMTczRjM3RTQ1QwotOjEwRDAzMDAwRUYyNjE0MjZFOENGOTEwMkU3OThBMzRFNEFGNTc2OUU5NAotOjEwRDA0MDAwQTRBQkM0OEYyOUI5RTJGQ0I4NTZGQzU3MzBDMjdGN0IzMQotOjEwRDA1MDAwOUM2OTM3MUVGRjM0NUFFQkY3MzNCNENGMTc3NEIzQjg1QgotOjEwRDA2MDAwRkRBRThFNzRGMDlGRjZCQjI4NURFMUM5Rjg3QjI5NDZDMgotOjEwRDA3MDAwM0MxOTdGM0YyNTQ5MkQzN0QzM0I5MDAyNEYzM0UwMkY5QQotOjEwRDA4MDAwRTJFOTA2RjFGQjE2RTNGMEY3MkREOEJGMEY2RkMzMENGMgotOjEwRDA5MDAwNzhGQjgyQUQxRDgyRUY5NjVFMkFFNjdDQkRBQjczRkYwNgotOjEwRDBBMDAwNEI5NzY3NzQyRUYwQkQ5QjA1REY5N0Y2MTExOTk3NkJCMAotOjEwRDBCMDAwRkNGRDI0NjkwNzkwRjFCQUJFQjExQ0RGQkVFMzExRTRBOAotOjEwRDBDMDAwQkZGQUExREExQzg5RTdDQzcxMTNGRkJEQTRDNEVFREE2NAotOjEwRDBEMDAwMDRFQ0ZGRUU5QzZBMDVFMTkxQzBCQzdCMTZDMEZDNjdDNgotOjEwRDBFMDAwRkZDNjk2OENGOUQ5N0RGODdCOTEyQzg3RkY1RTkwOUNDQQotOjEwRDBGMDAwREZFQzI0MUVDRjM1MkQ1N0U4QkI2RTFFQkYzNTNEOTdBNAotOjEwRDEwMDAwRUIwMTkxNkUyN0M1OTkxN0U3MzAxMTNGQ0I5MjY3RTc4NgotOjEwRDExMDAwMjI3REJFMTU5Njg5RjRCNzlFREIwMzlCRjFCRENBNkVENgotOjEwRDEyMDAwQzFGNzJBNTE0RTQ3QjlCOEI3OTA0QkVCM0VCMkRCMzk0NQotOjEwRDEzMDAwMUQzMkRERjk5RkVEQjdFQkUyOUNGQjZGNzdFQUYyQjlBOAotOjEwRDE0MDAwMEQwOUJBRkEwMzBGQjg3NEU1Nzk4MTJDNURGOUEwNjM3MwotOjEwRDE1MDAwNkU1RDdFNDhEMzMwNURGREVCM0VGNEU4RjJDMzlCOEIwMQotOjEwRDE2MDAwNzRGNTQ3OUNGNkVBRjI0OUFDRjUxNzA4REY4NzcyNTM2RAotOjEwRDE3MDAwMDkxRTdEMTQ2MTI3NzE3MTdDQ0NGRTYxM0NERDU3OTJFNAotOjEwRDE4MDAwRkE4NzhDN0JENzA0M0QxQkY1OUEzRTU2MkVEN0Q3MjVDMAotOjEwRDE5MDAwMzJBRUI3REE4NTdFQ0FGNEZBOEQyNkUyRDZBNTVDQ0YyOAotOjEwRDFBMDAwN0NGQUI4NzUxOUFGREVBRTA3MDkzRDQ3RUExMzIxRjFFNQotOjEwRDFCMDAwRUExRTlDQkY4QzU3NkZDN0JCNzgzRkQ0NDhBRkJGMTRFMwotOjEwRDFDMDAwNzgzN0FFQTM4Rjk1REZBRkFCQkJENzRBRjc4NEU0RkNDQgotOjEwRDFEMDAwOENGMzNBMjBFMjk4QjdEQTNCN0YwRjZBNDcyRTk3MTMxOQotOjEwRDFFMDAwQkU0RUYzNkVDQTg1N0E0RjAyQkIyMjc4NzYxOENGREQyOQotOjEwRDFGMDAwOENCRjNGNTBGNzEzQUI3QkI5RUJFQUUzQ0QxRUM4RDcyQQotOjEwRDIwMDAwMzMwQkRGQ0RDREExRjc1N0U5NUVBMDFDRjc0NTQxREYxOQotOjEwRDIxMDAwOUIwNjBBMzlDNTMwREVFQzY4MUUxRkM3QTJBRDc0QUY4RAotOjEwRDIyMDAwQTVFQkYxMzg1QzEzQUM2QzA1QkQ1QjI1RUU3OURDQjU4NAotOjEwRDIzMDAwQjZFMTQxMkM5QTY1QURCN0YwODcwN0ZDMTZCNEEzNEQ1MwotOjEwRDI0MDAwMTgwQjcyNjIxRUU4ODZDRjJDN0FDNDAxNzJEMTkzMzUxNgotOjEwRDI1MDAwNjZCMjhCMDU3NjlEQjhEREQ3Mzc3ODZGQTcwRkU4Njk4MgotOjEwRDI2MDAwNDgyNzEzMTBGRkQwRUZEMDgxM0M4RUJDMjU5N0FGQUY3RAotOjEwRDI3MDAwNTBGREE2RkRCRTg1NERDN0ZGMTlGMUZGNEVFODhFRThCMwotOjEwRDI4MDAwNTFBRUUzN0ZFQkZFODVBNDVGMjM5Q0E0NUVDRUM0QjlDMAotOjEwRDI5MDAwRDY1N0NDNEJDMjRGRUUwQjA5M0Y3OUZGQzU3NThGQzVGMgotOjEwRDJBMDAwQkJEOTQxRjc2ODhBMzAyRTRGRTJFRkE2ODFEQzZFMUZCMgotOjEwRDJCMDAwODdCMjYwNzc1RTBGRjk1MTU3RjUwQUQ1OUM2OEY0MTc2RAotOjEwRDJDMDAwQjQzMTU3QjRGMzJBNzZGM0ZGQTU3QjI5MDRGRkFFRUUwMQotOjEwRDJEMDAwRDM3NUM1MjczQUYwODcyRUVFRDc3NTQ1OUZGNEU3MUEyOAotOjEwRDJFMDAwRUVEOTg1RjAwOTFFMkYyNUYwRTFFRjZCQTJCODg0RDVBOQotOjEwRDJGMDAwOTFGQTdENUMzMDgwRjM4NzUzNjIxRkMzRjlFREM4RDM4OAotOjEwRDMwMDAwRjMwOTg2RkU4RkJBOTVBQUUwMTMwQkRBN0Y2RjA0QkY4QwotOjEwRDMxMDAwQ0Y1RjY5MjFCOTlCMzFFRkEzMThBN0YxOTdGNTE2N0E3MgotOjEwRDMyMDAwRTc3MUI0ODc5MTdDMzM2N0EzRTJERkE0MDQ3RkU3QUJBNgotOjEwRDMzMDAwRDg2Nzc4QTc0NUZEODZFNEMzMkZENjJBNEVGQ0JEODg2MgotOjEwRDM0MDAwQjk2QkY0RTUwQjFERkM3NzRBRTYxQkRGQUI5MUZFQjgyOQotOjEwRDM1MDAwQUJFOEY1ODMwNzg4RjNERENEREMyNDk3ODkzODhBMTJBMgotOjEwRDM2MDAwNTFDNzI4OTdCNUY5QjlCRjExRjU3Mjk1REJCMTI4RkUwMQotOjEwRDM3MDAwNEU5RUZCMkVGNDc3ODVCQ0MzMDI3MDBEQ0ZDMjczN0MyQQotOjEwRDM4MDAwODVCOUQzQjhDODc2Qjg3NjExRjc3MURFMjFFMjNFMUNCNAotOjEwRDM5MDAwM0NDRUE1NkQ2RjE4RjcwRjRCM0Y5Q0E4N0ZERTc3OTlBOQotOjEwRDNBMDAwQ0FCMTNFRjY3NjIxOEZDN0FGNDhGRjlCRDFCRkQ3RTYwMwotOjEwRDNCMDAwMzA5MTdGQUE2RDZGMjRDNTM5QTBERjJCMUFFOEUxQUM0QwotOjEwRDNDMDAwNjk0RkZDQjA5NEUwRkNCNDY2NTVFNzM3MzJBNkRBQjI5OAotOjEwRDNEMDAwN0RBNDRGMkVFRkFCQ0QxRTgwNzFGQTY2QjdERDBERjkzRgotOjEwRDNFMDAwRkIxQzg3RTkxREFGMDlDMjBFNjY5QzZGRkJFRkZFOEQyQgotOjEwRDNGMDAwRTRFRkVBQjRGOUI4QkNEQjU2QzRERjNCMDFGRUM4NzAwOQotOjEwRDQwMDAwM0ZDOTc4OEVDOTBDQTQzQjQ4OEIwM0MzNjkzRUQ3RUE1OQotOjEwRDQxMDAwRkY5QTdBMjU4RkZCN0ZBRjhDQTBGNkRBOUFFMTk0RUYyMgotOjEwRDQyMDAwQjNFMkMxN0JGMDlFRDE2RDc1MEIyRDE4MEFEMEZDOEIzOQotOjEwRDQzMDAwQTU4NUUxRDBCNEI5Qjc3Rjc5MzhFMjZEOENEMkE5RkY2OAotOjEwRDQ0MDAwQTI3NjAwM0Y1RjlBMERGNzE2NjQ3QTQ5RUMxQkM3NDAzRAotOjEwRDQ1MDAwMjZGODkzODhFNzVBQTZEMDdFNThBQzMwMTlERjQ1RkNGMQotOjEwRDQ2MDAwNUNFNjJGRDc4QjdDMjFDRjJGNTlDOUYzQ0RFMjc3MTVGRQotOjEwRDQ3MDAwQjYwOTdCMEJBRTFCNTM1QzM3REEwNTc2MEE3QjBDQUUyNAotOjEwRDQ4MDAwMUI1MzVDMzc3RTQ3RkU4NTc5RTQ1Rjk4NDdGRTg1NzlCQwotOjEwRDQ5MDAwRTQ1Rjk4MjJGRkMyRUY3Mzk4MzczOTRGRTU3RUJCNzE4NgotOjEwRDRBMDAwMjFGQjAzRkQ3NkUzNDJFNDIzRjREQjg1RTZEMTZGMTcyRAotOjEwRDRCMDAwNUExRkZENzZBMUU1RThCNzBCMkQ0N0JGNUQ2ODFFRkQzRAotOjEwRDRDMDAwNzZBMUY1RDE2RjE3OUE2N0MzNkUwQUU2OTFERjc5MjZDOAotOjEwRDREMDAwRUJGMjUzNDFGRTFGMTdCMkJGRDE2RjE3REEzRkZBRURERgotOjEwRDRFMDAwNzRGRDY5RjdFOERBREZDOTZBNzRFREQxNkYxNzVBRkY4NgotOjEwRDRGMDAwRUUxQTQ1RTdEN0JCNUJCQzQzM0I3NzQzMUNEMTRGNzk2MgotOjEwRDUwMDAwOEFCNzExRTlGRUJGMjJCRUZEQkUwNUY1NDVCNTcxMTExMgotOjEwRDUxMDAwRDdEQkMyREQxQ0NGRjU0NTFDRUYyNjdFQ0Y0MjY5OURDRgotOjEwRDUyMDAwNDk3ODVFNkFFNUY5NDIxRUU3NkRBNDFGRjQ4QjhEQjM1RQotOjEwRDUzMDAwNzBCRjE4QTZFODE3QzMxNEZENjI5OEEyNUY2QzVDM0EyRQotOjEwRDU0MDAwRjc4QjYxOEE3RTMxRkM4RTdFMzE0Q0QxMkY4NjI5RkE5MQotOjEwRDU1MDAwQzUzMDQ1QkYxOEE2RTgxN0MzMTRGRDYyRDgwRUZENjI5QQotOjEwRDU2MDAwOThBMjVGMENCRkEzNUYwQzUzRjQ4QkUxRjdFM0U4OUYzNQotOjEwRDU3MDAwQjMwNEU3ODVGMjdDNUY5RDVFMDk3NEE4RDMyQjlEQkE0NgotOjEwRDU4MDAwM0NDQUYzQTFGNTUxOUUwRjJENDc3OTNFQjQxQ0U1RjkzNQotOjEwRDU5MDAwRDAzQ0NBRjNBMUY1NTE5RTBGQ0RGRjJERDc0NUZCMEMxMgotOjEwRDVBMDAwRTVGQUQwNzYyOEQ3ODdFNjczRUI3REFGQTJFRDZDRTI4MwotOjEwRDVCMDAwQzY4QjQ3MzE2RDhFNTQ5RTU0ODA2NUZDN0RGNzhGQTZENwotOjEwRDVDMDAwQTNGRkIyMzk0QzQ5OEUwMUNFNjk1MTdDRDNDNzQxNUU2RAotOjEwRDVEMDAwMTM3MTk0MDM1OEFCODk3RUFGMEY5NTQ3OEM3MzA4MzA1NQotOjEwRDVFMDAwOEE1QkNERkQzQTkxQ0FBMzMyOURFRDcxQ0I4OEY3QkMyMQotOjEwRDVGMDAwQkQ4QzdFOEY0NkZBRDc2NTdCMzc3M0FBOThDQUZBQzE2RAotOjEwRDYwMDAwN0NFN0Y1OENFM0NCN0FDNDNGNDNFNjgxMzdBRDMxREU2RQotOjEwRDYxMDAwMjc2RkE5MjMxRkUzNjZCNzg5REZDQkREQjY5Q0M3NUIwNQotOjEwRDYyMDAwMUJFOTJBNEZDODRCREI0QzdCMEVFMzdEOUFENjYyODUwMwotOjEwRDYzMDAwRUU1RDY3OThEOTMxNEIzRUMyQTkzQTFGRTU4OEM0ODE5NwotOjEwRDY0MDAwMzE2MjVERDVEN0UzRUY4RUM5Nzk0QjNCMjhGMDA5QkEzQgotOjEwRDY1MDAwOUYzOEIyQjVBOTIwMUFGQUQxN0M2M0U4Rjc3MTI2NTgzMQotOjEwRDY2MDAwQjlGQzgwRUQ1MEFGRUNFRjUzM0M5QjQzRTgzQjREQzgxOQotOjEwRDY3MDAwRTM5QThGOEZGRkNDNTM5Mzc4QkI3MERFRUU5OUE3QTIwRAotOjEwRDY4MDAwMDg4RTkzNTYyODE0NzczNjcyMjdGM0UwM0RFODFDMzE1NAotOjEwRDY5MDAwRUZGRTNCMDMyQThFNTdCQzgyOEYyN0ZCMkRERTk4NEM3MgotOjEwRDZBMDAwRjc0MjhCNTlGMzM4QkNEN0MyMDYyQjBDRjlCNjg0MUI1MgotOjEwRDZCMDAwQUNFRjI4QUUyRjAzQjYwQURBQjFCRkVCN0RBQTUxODNENwotOjEwRDZDMDAwNjMwQTMxMUU5MTM1MzI3QTU3NzRFMkUwREZFQkQ2NEJCNAotOjEwRDZEMDAwNjgxRjRBRkREMkI5OTZFOTUzRTgxREU3NDlCRTY1Q0JGQwotOjEwRDZFMDAwRjE1ODlGRThCQkU3RDVFRTU4N0YwQjczQTdCOEU4Mjg0MQotOjEwRDZGMDAwQTJGQkM3NzIzRUZEM0M3QjRDNzAyQ0IyMUNENjY0MEE2OAotOjEwRDcwMDAwNTMxMERGRUM0ODVDMDhGREMwQ0U5Rjg2RjhDRTczNUJGQgotOjEwRDcxMDAwRTg1REU1Qzk2NkE3ODVERUU5RTgyMjVFRTdCMjQzQzZCMwotOjEwRDcyMDAwRUIxOEU0MDU0MzVDNEVEREQyMEY5M0QxREVCQzM4RDI1QQotOjEwRDczMDAwNDQ3NjkzQzVGQjIyNDg2RUQwMzYyOEM0RDdBNDFDNTQyNwotOjEwRDc0MDAwMkNFMkZEMkVBRjc4QjVGQjc0ODRGQjFFMEJGNTI3RTNBRQotOjEwRDc1MDAwNzUyQUQyRkNDOTI2QkM5RkQwNzNEMzgwNTg5NUU0ODAyQgotOjEwRDc2MDAwQkIwN0EyMUNFMDdCRkVGNjYxNTg2RjI1N0Y1N0Y0RjJFMQotOjEwRDc3MDAwOEE3REZDNzc0OTg1N0Y0N0ZFQ0VFOTNDMTFGRjU1OUNBOQotOjEwRDc4MDAwRUI4REM2NzgxOEY5N0I2QUYyOUU4Q0ZDMUQ1MzY5RTcxNQotOjEwRDc5MDAwMjk3RTdCRDA2Qjg4REZFMjI3QzRCQkRGNkI4QUU5RkU4MgotOjEwRDdBMDAwQkIzMUVFQUE0Q0M4N0Y4QjU2NTgyODZFNkI5MTQxM0UxOAotOjEwRDdCMDAwMkMxMzcxNTk1N0ZCN0REMzlBODEwNkY5NTBGRTRFOEU3QQotOjEwRDdDMDAwQThDM0Q0NUU3RjQwQkJCMEJDRjczOUNCQzJGOUMwQUNCNAotOjEwRDdEMDAwM0Q4Q0ZDNTVCMzk2MTU5OEYwQkQ2QUI2OEZEM0NGQUM4RgotOjEwRDdFMDAwNjU1Q0NFOTlGNUEyODdFRTZGNEFCOUYxMUQyMUNGNEM0OQotOjEwRDdGMDAwQjk5MjQ0RjA3RjRGQzgyRkI3NjFCQzJBQzA3OTQyNzNGOQotOjEwRDgwMDAwOTg4ODYzNEJBNDc0RkExNTFFQkYzQUM1QzFGOTQxRjM1OQotOjEwRDgxMDAwMkJGQ0REOEQzNjlGOERDQjU1NDcxOTdGMzdDRTQwOUYzMgotOjEwRDgyMDAwOTNDRDdFMTM1RTY4NzQ4RjA0RkE4NEZDNDQ5NDg3QTBDMQotOjEwRDgzMDAwQkYxOTI4MUZDNTIxQkRBNzE0NTIzQzY0OTE0MkY3ODgyNwotOjEwRDg0MDAwOENGNDNFQzE1MkZEMkFDNkRCNEVEOENBREMzRTE2NEFENQotOjEwRDg1MDAwRUY0MEM3RDg5RjRGQTFGNzE4MzRBMUU3NEEzQTM2RDIxNAotOjEwRDg2MDAwRkRFQzA4NjE5RjcyNzBGQjUzQkI5RDAyNjU1NTdBNDRDNQotOjEwRDg3MDAwRkQ4M0U5MTg0RjNDMUI2RDg2M0Q2OTE5MUU4Q0RCOEJCRgotOjEwRDg4MDAwQ0NFMUU1Q0YwREZDNjBGQTBBQkNGQkQxODVERDQyRkRBMQotOjEwRDg5MDAwOTE5NUUwQTFDOTc3MjdCQUIwMjNBMEZEMDBGOUU1NUQxNQotOjEwRDhBMDAwREZDQkIzQ0UwOUUxOTdDQkYzQzZCRUVCRUUxRUM0RjdEOAotOjEwRDhCMDAwMUNDMzdEQ0FDNUY3QTVEM0VGMUY3NTI1MTdDRjA1QjhDMwotOjEwRDhDMDAwRTJGRTk4MUREREZDN0RBMDU0RjZGQjgxQ0MzMzJFMDFEOQotOjEwRDhEMDAwN0Y1RjUyQUU4RjA1MzAxRUYzMEU5MUZGRjZENzdGRkZBQwotOjEwRDhFMDAwRTMxQTA3QzE4NUYyNkYwRkZDNzQzQUJFM0I1NzYxNkZCNAotOjEwRDhGMDAwMUU4RjY0NTc5NTUzNUQ4NEYxRDk0MTNFQTU3OTkyNTJBQwotOjEwRDkwMDAwOTA0RkU1MDVGMEY3RjgwRUM4N0JFMDA2RkJDNEI3MDNCRgotOjEwRDkxMDAwNUREQ0ZGNjJCMDUzQ0NDREUxRkM5Qjg5RjdDNjRGRENFOAotOjEwRDkyMDAwRjdDMjZFM0NCN0U0RkM0RjU4RjRGNzZBNjVGQUU1NDA3RAotOjEwRDkzMDAwRDNCRkY1NUU4OUYxM0VDOTRGOTNCNDUzQzgzRjFFMzUzRQotOjEwRDk0MDAwRjFGNzEzN0FBQUY1NENEODhCQzhBRjJDRjkwNjEzRUY3MAotOjEwRDk1MDAwOEUwNEYxRUVCMUYyQjgwNEM1MTk2QUFGRDJENjI4RkMzNAotOjEwRDk2MDAwQkQ4MjJFRUMzQTJDQUJGNTE3NUJBMURERUM1QTJCRkRGQQotOjEwRDk3MDAwOUVFMzUzMTk5QzdFOUUwMkZBNDFGOTZDOTZCNUU5NTVENwotOjEwRDk4MDAwN0I0QTEwOEU5RkQ0RkNEQ0MyRjk1ODIwMURERjNCQkFDNQotOjEwRDk5MDAwQTMzQUNDOEQ3Qzc5Nzk5RUY3RUYzOEVGODgxQzM3RjE2QwotOjEwRDlBMDAwQTM3N0REOUNCRUFFRUJFRTY1NkVCQ0NGQjhGNkQwOTMzMAotOjEwRDlCMDAwRjg3RUMzRkYwMzdFREE4OUZDMDA4MDAwMDAwMDAwMDBDRgotOjEwRDlDMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJFRDdEMEI3NDU0RDU4OAotOjEwRDlEMDAwRDVGMEI5NzM2NzI2OTNDQzI0NEM0MjIwMEY0ODk4MDBBOQotOjEwRDlFMDAwOTExNDAxMjcwOTgxODAwODM3QzgyMzU4QzA4MTEwMDU4OAotOjEwRDlGMDAwNERDMjg0NjdCNDYwMjNENTFBMkQyRDAzNDkzMDIwREEzNwotOjEwREEwMDAwODBDMTIwRjUzMTUwQTU2ODUxNjNCNTZEQThEODBFRTJFQwotOjEwREExMDAwQkI2ODI5NDhGNUZCREI4NkUxOEQ4RkQ2MDhCNURBRkZCOAotOjEwREEyMDAwRTdBQkRGREVGQjlDOTNCOUY3NjYyNjgwREFGNTc1NzUwOAotOjEwREEzMDAwRkRFMzcyMURDRTNERTc5RUM3M0VGQkJERjdCOUY5RjY4QgotOjEwREE0MDAwOUUxQ0JCN0YxODYzRDVFREY5NkJEMzNEOENBREM5RjczOAotOjEwREE1MDAwREJCQzdEQTBFRTcyREI3RDJFQzY2RTY5NDhCNjdCQTA3NgotOjEwREE2MDAwQUM0QTYzQjU2REQwOEZCMUNFRUNEOTg5OEM3RDgxQkZDNgotOjEwREE3MDAwMDk4QzY1NzkxNUM2QTBGRjFGRjJBMUE5ODhCMThGNkQyOQotOjEwREE4MDAwNkMyRUVGRDc2QzlCNjVFODY3QTE3RUFDQjk1NTczRjQzQgotOjEwREE5MDAwNjVDQ0NGRjgyRkNCQ0EwMjk2MDJDNjA2RDhGRDRDNEJGOAotOjEwREFBMDAwNjVBQzNFODM3OUQ3RTQzMEQ2MEY5RUM3MTVGMEY2RjgwMwotOjEwREFCMDAwMTRFOEVGQjIxRjU1OTJFMDg1QzA2NDJEOUNDN0RGRkRDRQotOjEwREFDMDAwNjIyMDYzNzZDNjM0MEJCNEY3ODNEMjBFRkREQjg3NzgxMQotOjEwREFEMDAwNjg5RTJDNjg1N0UxQjkyREVGRDgzQzA2RkQyQUVDNkMwNgotOjEwREFFMDAwM0VFRTQ3QUU0Nzk2MzNDNUZBRDk1Qzg3ODVDMUJBMTY3NAotOjEwREFGMDAwM0JFMERGMzBDNDY0NzVEODk0QjQ5MThDQUREOEE4QjgzRAotOjEwREIwMDAwRTNFMEQxMjI5N0U3RkEzMTUwNUZGNEJBOERBRDgxRkFBNAotOjEwREIxMDAwRjQxNDhGM0QwM0VBOURFQjE0Rjc3NkE4MkZCODJEREZBMAotOjEwREIyMDAwRUU4MTdENTdDMDM2MTlBQzYzRDE5NjMxQ0NEMzFCQ0E3OAotOjEwREIzMDAwMjA5NDg1RERFNzk1RTU4RDFCRjc2NUVEODZGOTU4NDg1RQotOjEwREI0MDAwQjNGQjAwNUU4QkRDOUEzRDY1NThBNDdENjFCM0EyMDVGMgotOjEwREI1MDAwNUREREVCRTNCRDJBQURCQjgyQjE0OTA4QkZDQURCNzIxNAotOjEwREI2MDAwRUMwQjVDNTg3RkREQjY2MjE4RUU4QkMzNDFCRTA3RkQzRgotOjEwREI3MDAwNDJEODZGRkE0MEY2MkFDMzc1QzNCRUI2RTdGMEY5MEE3OQotOjEwREI4MDAwNzRFMzJGQzBGMTc1RjM0M0ZGRjkzRUE4OTc3QTEzNjk0OAotOjEwREI5MDAwQkM2QTM3RUMzQjA3NEIzN0FEMTNFMDQwNzBFQUJDMTc2QgotOjEwREJBMDAwQzZGM0QwM0M3NDFFMEI0MzQxOUIxN0Q3NjM4NTc5QTEwNAotOjEwREJCMDAwN0U4MzNCNjhDMzc5MTYzNEU0REIxOTk0RkUwRDdDMUUyQQotOjEwREJDMDAwN0Y1M0IyN0QzOEQ0QUJBRDZFN0IxNkMyMkYwMTYwOTEwRQotOjEwREJEMDAwNEFFQjBCNkU4N0EzNTkwNDcwNDk3MUUxM0M2Q0ZFNkNGMwotOjEwREJFMDAwNTc3N0Y4NTQ4QkY1MkU2QTRFQjYyRjM2M0NERjY4QzM1NAotOjEwREJGMDAwRjM5ODA3RUI2OThCNzJFRTc3RTFCOTE3RTE3QTRBRUM5QgotOjEwREMwMDAwMENERkI3NkE3NjJGQUU0N0MwRjdFNEFERjFFQjU5MkZDMgotOjEwREMxMDAwNzhCRkE1RDU5NjAzRjU5QjA1RkVERTg1NzAyRDQyQjgyRAotOjEwREMyMDAwODQ3MjE1RENGN0FERjE1RTVDRTczQzc3MzNFREFGMEI0QQotOjEwREMzMDAwQkU5QjAxMUVGMDdDQjFEQjQ3RjAwNUJDMDgzMDgwQzMwMQotOjEwREM0MDAwQTIxNkUzNzk0NkQ2OTM0OEUzMkU2QUE5MjY3QTVCNjI0OAotOjEwREM1MDAwRjVEQkRERkE3NTZDRDk5QkFCMDA1Q0U2RDVDNjdCMTVCMAotOjEwREM2MDAwODAzRjczRkJCMzExNUY0RTZEQkUzRTlCRjYwOUVCNDRFNAotOjEwREM3MDAwQjgyNjdBM0Q1M0QyNDcxMjlFMTAxRTRCN0NBOTJBRTQ0NwotOjEwREM4MDAwRjQyQkU3REJFNEI1RDI3QzlCNzA1RjQ1M0REMUE1RjY3NAotOjEwREM5MDAwNkEzQUQyMjU5Q0VGMUE0RjZDQkFCNDMzMTgwRkU2QjUyNgotOjEwRENBMDAwMkY1MjgyRjU0QTc3M0E5NUY0MjlFOTUyRDJBOUE0REY5NgotOjEwRENCMDAwNDc2Q0JFNTBCQTEyRTEzMzU1QkQ1OEVEQ0ZBMkMwRTk1MgotOjEwRENDMDAwQTAzODg3MUJDNEI5MDI1QzVGNDZCOENBRjYxNzA0M0Q4QQotOjEwRENEMDAwNTcwQzM0RDIzQjhFODdFM0ZFNDQ5QzdCQzVDNDUwRUU4OAotOjEwRENFMDAwQURDMzIyRkRFNUJDMTUyOUZDM0RDNDdCQzRCNzlGMDgyQwotOjEwRENGMDAwRjg2MEZGMTVENERGNjJFMDE3MEJCQkY4QzVBRUM2QkVGNwotOjEwREQwMDAwQzgyRjlFNTVCQ0M4MkY1NkRDQkIyRkVCMEU4MERCOEE3QwotOjEwREQxMDAwQTc5QzVFODRDMTg3Q0IxRUJGMjUwM0UwQzBBQzQxM0FGRgotOjEwREQyMDAwMzdCOUFFQzU5RkU3MTM5RjU4RjJGOTk1OUM1Rjg0QTI1RgotOjEwREQzMDAwRjMwQjU3OUVCRkRENUIxNEE5MkZCQUZGQTlDQkZDOUM0OAotOjEwREQ0MDAwREY4NDkwREZGQ0U5QTkxNzBFOEY0NTNFQzI4MjM2REZFMwotOjEwREQ1MDAwRjBDODdFMTYzNEZEREU1NkVERDJDMzhGRUY3NzdEREU0MAotOjEwREQ2MDAwRDk2QTNDQUY4NTJFQkI0Nzg1NDcwQjFCQUE4OUZGQjJGQQotOjEwREQ3MDAwNzRFNkNENTUyMkU3NkZDNjhCRUEwNjQ1QTNGN0VBNDY1RgotOjEwREQ4MDAwMDVENUFGOTE0RjJGREMzMDBCREU4RDlDMUI0Q0NDRDhEMgotOjEwREQ5MDAwMjhEODI3RTNGMDk1RUJGRkEzNTg3Rjg3RTA2RjM3MDg3QgotOjEwRERBMDAwRkNCRUExQTZDNDlFOTE4QUZCQUQyRTA0Q0VDOEU2ODkxNgotOjEwRERCMDAwRTdGMzE2MTk5Rjc3OUQ5QkJCOEJDRkFGNDU3QTM5REI3NQotOjEwRERDMDAwQzZDRkVERUMwNjFCRjE5RkIzQkIxMjgzMENGNkY3RTE1NwotOjEwREREMDAwOEE1RkJFN0QxREY0RkJFMDgxNkREOTRDMzU5RTFCMkIwNwotOjEwRERFMDAwRTRFNzg2RTU1MjM4MzdENjNCRUFCOTdERUNENUYxRTE3OAotOjEwRERGMDAwQTU4RkYyNzM1QkY4RjQ1QjdGRkU5NTg3RjZDQkY5RERCOAotOjEwREUwMDAwQkQ3MTQxRTRDNzBCREE5RUE1NzM5Q0Q3QjREMTk2ODM0QwotOjEwREUxMDAwRjRFQUNEMjFGQ0VCRTJGRkI1Rjk2RTA2RjBCREExNjk5NQotOjEwREUyMDAwOUIwREY5QzQxNzEyMEUyNjdBODA1MjYzM0EzQTQzQjkxMQotOjEwREUzMDAwQTRBNDIwRkU4NTMzMTBGRjY0N0ZFNDhGQ0ZDMjNDQjdEQgotOjEwREU0MDAwREQxQTlGQzRBRTg4Q0M5Mzk3Q0ZGMTdFNjE2RDcyMEFDNAotOjEwREU1MDAwQ0VCN0IwQjZGQTNFMzYyMjIyMEZDQ0ZCM0MxRUNGRTkzRAotOjEwREU2MDAwNjUwMThDODc3NDdCQkNDNDlCQkQ4MkYwRDMxMjU1RUVEOAotOjEwREU3MDAwMEVDOEU3RTdGODIzMDA3NzNDRTA0MzNGNjdEQjEzMDg3MQotOjEwREU4MDAwODc3RURGNEVGMDIyRkYxODNDMzgxQ0M0NzkxMUJGNzEyOQotOjEwREU5MDAwREQ3NkUwOUYwRUU4Mzc3ODU5RjgxMzVDQzc2MEMwMzAzNAotOjEwREVBMDAwN0MwRkNCQzQxNDJBNTk1RkE4NkY4NzY1MTc0MzM5NTA3QwotOjEwREVCMDAwRTVFNUU0N0NCRTdGNjgwRjYxM0I0QjBEMTdFMUZFMjU3NQotOjEwREVDMDAwN0U5QkYxRDdDRTFFNkIxQTg4N0MyQzk1NzlFQjNEMTE4OQotOjEwREVEMDAwN0M5NUUzNDg3Qzk1RjgxQzZCN0Y1NzVERTRGRThFRTdFQwotOjEwREVFMDAwNzA3OERBMTM2MDdGMjk5N0IwM0Y0MEQ2RTI5NEM4QkVCRAotOjEwREVGMDAwRTRGQTU4MUVBQzBCRTZBOUZBREVGMDZERUI2MTlFRTM4NgotOjEwREYwMDAwQUJCREQ5QjVBRTlFRjZEQjMyQjk2Rjk0RkQ5QUY3Mjk1OQotOjEwREYxMDAwRTk2NjkxODNEMzM0RDA0REFGMzBBQ0ZCNkNGM0EwNUU5NwotOjEwREYyMDAwMjg3NzhFMkIyMERGRTBCREUzQjdDNjVCNzBGRDcyNUYwNAotOjEwREYzMDAwM0I1NjQxNjc1OEVCQ0U1NTBFMkE5RjVDMDU4NDM3ODRDQgotOjEwREY0MDAwQjE1REFCRDJBOUZFRjQyQTBGOTU2REFCRjJFODc5NzVGRAotOjEwREY1MDAwN0UwQTk3NDcyQzlDODg3QTI2RTgwMzlDMUY4NDM4OUQ2QwotOjEwREY2MDAwNzRENDBEQTI3REM5RTc1MjJGRTg3MDg3MTM1Mzc0RkM1NwotOjEwREY3MDAwRkI0NEFEOTA5QjJDN0MyRkQyMzdBQjFCQzQxRTg3QTlEMgotOjEwREY4MDAwM0E5QThGMjc1QTg2MjE3RUYyRjVDOUY3NkVCMzc1MTIzOQotOjEwREY5MDAwM0Y2NDg5NzZDRkUzNDA3MkNFREI3RTNGMzkwREU2NUI4RQotOjEwREZBMDAwREM5MjkzQUZDMDdCOTU3NTg1MUQ3NUQwNUVEOTkwRTZFOAotOjEwREZCMDAwNDVCRUIxRDhFNTU5OEI3MjcxNzEyMEM3OEI3MkQxRDkyQQotOjEwREZDMDAwOTI3RjZBMEJCNDJGNkVCOERDOEJGRDZGNTM5ODBGRTkwQwotOjEwREZEMDAwMEJGODI3NDNCODJENjE1RDNGQ0QwMTdDNkRBOUUwNkI0NwotOjEwREZFMDAwNEI5MTVGMDJCQzk2RDRFRDFCRUM4NkY3OTc3OEUzRjM3OAotOjEwREZGMDAwNTFCRTJGRERBMjg0RTI5MERFMkNBQzQ5NDEzOTVDRUZBQQotOjEwRTAwMDAwOUI4MjdDQUNGMzQxQzU4QkZBMjY3QjA4RjhBQjIzQzIxQwotOjEwRTAxMDAwNUYzN0U0Rjk1NkU2RTNGOTlGMDdGQzgzRjE4N0EyMEMyQQotOjEwRTAyMDAwNTY3MTVGNkQxQUVFODM4MTNFRjIzOEMzNzVGQjQ4QUZCRgotOjEwRTAzMDAwRkY3RjQyOEZFOTY4Mzk5QUU4MTlDNkUxOERGQTNBRjMxMQotOjEwRTA0MDAwNkIxNkU0QkIyQjg0NUMxQjYwRUYzQzdBMzdFQTMzODlBOAotOjEwRTA1MDAwMTZFRjc2Q0UyRjdGRTdDMTdEQkVBMUIyMzg5MjM3QTJGMAotOjEwRTA2MDAwQkZFMEE3MDM3RTUwRUM0MEZFQjYyMjcxNjAxQUU5NTU2RQotOjEwRTA3MDAwNUI1NEUyOEYxMjdGNkFDNDlBMTc2RjJCRUI4Qjc4QjNENQotOjEwRTA4MDAwMThEQTUxREU2REM1ODdDMDQyRDdCNjVDREQxN0YxNkE3QwotOjEwRTA5MDAwRDFDNkM5MEYwNDQwOEU2NTBCMzg5RUIwODY2N0UxRjk4MgotOjEwRTBBMDAwOUNEOTk2OTZCMjFBRjVDMkU1RjU5NzMxNjg1RkI0RUQ0MgotOjEwRTBCMDAwRUU2QzJDQ0Y2QzhCOUY4QkZDN0U5MjdCRDZBNDY0RDhBRAotOjEwRTBDMDAwRUY5Mjg3OTJGMzU1OUREQ0Y4QTlBMEM3OUI5NzVGOURCRgotOjEwRTBEMDAwODZGNkMwQjI3RkVFN0JDNDNEMDhFNjA3NTgyM0RDM0ZERQotOjEwRTBFMDAwNkQ3MzA2MDNEMDY1RDlBQUY2NkMxNTY4RUNGMzM4RkY5QQotOjEwRTBGMDAwMEU4NEU3QjcyQzdCQUUxQjgzRkM1RjA5RUVDOEEwRkU0NQotOjEwRTEwMDAwOUUzNDc3MTQ3QTk3RTUyOUMwNzcwRkUwRjNGMjFGQkNBRAotOjEwRTExMDAwNDdFM0ZDQzVCMjdGRTYzQzc4N0ZEOUYyRTc5MjcwOUM3QQotOjEwRTEyMDAwNkY2RDNFMzRDQTBEQ0ZENzBDRjZGRjBDQzdGRjQwRDkzOAotOjEwRTEzMDAwQjZDMzhEODI2OUNCQjYxMTI4Qjc5RjEzNzZENEY0MTQ3OQotOjEwRTE0MDAwREY3NUYzMTBFRTZGQTgwNEY3NThGM0Q1QjQyQjA0NUYxNgotOjEwRTE1MDAwNTlBRjBDRjYyMjdERDYxRjYyNzYzNzk2NkU0NkZBRjJEQwotOjEwRTE2MDAwMTk5NUQ1QTEzRTIwRjUxQUY5RkNENTdDQUUwRjlERTk5NQotOjEwRTE3MDAwRDU5QzhENzg3MUQzOEVENjZDOTQyQkVGMjdGMjdBQzUwRgotOjEwRTE4MDAwOEVFQkRGNDQzRUU1N0YyQzhFRUJFRDU2NDY3QUYyQzJGNQotOjEwRTE5MDAwMDBEN0JCNTkwREQwNkI0NjY0RkUwM0Y5NEU4MkYzNEQ5OAotOjEwRTFBMDAwNUIwQTBERjIxMEY0MTI5QUU3N0QyQjJCQzU3NTBDQThCMwotOjEwRTFCMDAwRUZDQzQ3RkRFQjhGRDZEMDYyM0NENzNGODI1RTFCQzhDOQotOjEwRTFDMDAwQzE3M0UyN0NFQzhGQ0RFQTE0N0MxRTAwNDI0MjdERTRGOAotOjEwRTFEMDAwOEZDRENGMjUwRTc2NDVGNEI4QzQ5MTZEMjFFNDczQ0I3NQotOjEwRTFFMDAwOUY0RjJFNTAzOTRBMTE3RURERTI5NkZDQzkzNUE1NUY1RQotOjEwRTFGMDAwMkFFOTYzNkVDNEQzMTVCQjVGOTlDMjc4MUQwNDYxNkNCNAotOjEwRTIwMDAwNzhERTJDRjRCMEFFRkFGM0NGOTI1REI3NkMxN0Q3Mjc1NwotOjEwRTIxMDAwOTZCNTNERkI2QTI2OEM3MzRCQkJEMDI3ODQ5RUIyNUNCRgotOjEwRTIyMDAwRDBGMzJEQ0Y3M0I4MkM3RkZFQTg3REExREUxRUM5NEI4NQotOjEwRTIzMDAwNTlEQjBGMzRDMTczRjlCNkI5OUI1MThGQzI3MzFCQ0IzNQotOjEwRTI0MDAwNTg0MkRCRTc3MzU3ODNFQTlDRTA3NTczRkU2REVEMjQ1QgotOjEwRTI1MDAwRkQ3MDdEREU0MUIyQ0I5NzM3ODhGMUYyMEVBRTFENDhERQotOjEwRTI2MDAwRkI5REQ1NUJBRjBGRkQyRERGNDY3MDk1RUYwMzNDRThCRQotOjEwRTI3MDAwQkRDRkUyOTM0NjIwRkYwQjJENEY2ODQyQjlBRURERTJFMQotOjEwRTI4MDAwQjI2MjU5QkZEQzQ1NzJGRUExNUE0QjlFMTVFMEFCMjkyNAotOjEwRTI5MDAwMDk1RUQ0RTNFQTFDQkNGRjFEMDk0OURCQjFEQzkzQzA3NQotOjEwRTJBMDAwRUI5RkM1Njc5MzlDRkFDQ0UyN0I3NjA5RjRCQjQzM0RCOAotOjEwRTJCMDAwMTBDRjA2RTE5MTc3RUVCMzQwM0RBMzhGREY1OTAwRjMxNQotOjEwRTJDMDAwQTczMUEwMUUxNUU1NDc0OEMxRjY4RjVGM0M1RDg4RUI3RQotOjEwRTJEMDAwMTgzRjIwN0M4RUMxRDI2QzRBRENCQzQ5QTgyMjE1ODgyQwotOjEwRTJFMDAwN0QwRTBCMTcyMkJFRjc3OTg5RjNFQjg3NkRBQzA5RTUzQwotOjEwRTJGMDAwMURCM0ZBRDg2Qzc4MUU0MkZFODVFN0ZGMEY0QjEwRjk2QwotOjEwRTMwMDAwRjExRTI1RjQ2M0JERkU1NTVBQzBGMUQ2MTdFNzZBNTJENwotOjEwRTMxMDAwNjA5RDY1MzlGRUZFQjg4RTZCMTVEQjcwNTQ1RDk4NDdDNQotOjEwRTMyMDAwQ0RDNUYxM0ZCNkYxNzZBOUM3NEUxNDRDMzg0QkQ4NjMzMgotOjEwRTMzMDAwRjZDQzc0MTdFRUFGNUVDMDRCRDEzNDU2MDdFQjU4MzNCMgotOjEwRTM0MDAwRUNBNTg1ODgyRkY3NzQzQTU4MUNDQzNGQjEzMzgxRjQ4MwotOjEwRTM1MDAwREFBQ0NDNTI5MjZGRjUwMjJFOEEyNzE1NjUwRTdCNjlENgotOjEwRTM2MDAwOTgyNTEwMDdFQkJEODczOTgyRDg5RjM5NENGQUFGMjUyNQotOjEwRTM3MDAwNUVDM0Y3OTQzREFGRkQwM0Y5N0QzRkY1OTM3REJEQTBFRQotOjEwRTM4MDAwN0ZCRjNCMTQ2RjNERjRBOTNBN0JFQUUxREYzMUI0OUZENAotOjEwRTM5MDAwODNGOTA4QkZCOTdERkNBMzBBNTBDRjNENUI3QUQ0MEY0NwotOjEwRTNBMDAwRTc3RDhGQkJDREUxMURDNkM3RDNFRjYzQ0Y5REZGNDg4RgotOjEwRTNCMDAwNEFCMTQ0RDZGNzcxRTdBOUE3N0UzOTEyNEIwN0M5QTEyNAotOjEwRTNDMDAwODk3QjU0OTIyM0U2RjU3QzlDRUVCMUQyMzk3NTNBNDJCMgotOjEwRTNEMDAwMTZFQ0VGQjIwNDE1MDVGQkVGN0IwRkQ3MzdEMUUxMEEzRQotOjEwRTNFMDAwQTlBOEM3M0I2QzFGRTlFNTBDM0I5MDk1N0NFQTcyMTIyQgotOjEwRTNGMDAwMkRFQzBCNTAxNkZBRDZGM0YzMUJERkNCNjg1RkRFNTgxQgotOjEwRTQwMDAwQzBFREE0MUIwQjM4REY5NUYwOTU3MDYzMUU4REU5RTUxOAotOjEwRTQxMDAwQ0NBRjVEM0IyQTk5MjU0MkM3REYxNkNGQ0Y3RTNFOTAxOQotOjEwRTQyMDAwRjQ4QkIzN0I0MENGODhBMjc3Q0FGMjEwRUExOUE4NTdDMQotOjEwRTQzMDAwMENENDE2MTYxNDQ1RTQ2Q0I5OTRCQTQyMEVBQjYyRENFNwotOjEwRTQ0MDAwNzIwMUFGNzI5Nzg1QzM2NzhFMDkzRTAyNkZDQzc4NjEwNwotOjEwRTQ1MDAwM0U3Nzc5OUVFQ0FFMDNBRkY0Q0FBMTczMUNGRTQzNDYyRgotOjEwRTQ2MDAwRTc3NzBCQUVBM0UzMUZGQjFCODFEQzU4QTZBQTFERjVDMwotOjEwRTQ3MDAwRTdGQzNCOUU1RjI4N0UwOEVBMTU5QjJEQTQ1N0EwREU5MwotOjEwRTQ4MDAwODc3QUEyRTQxRjdFRTQwMzU3RDA3M0FFMDdFNjMxRTIzOQotOjEwRTQ5MDAwMUI1NTZBODI3NzdEMTRCRTIxRjk4NTNGMDFDQTExQzhEOAotOjEwRTRBMDAwMzc5QTg5MUZEQ0ExNzZCRTYyNTEyMjdDNjI0MDY5Nzg2RQotOjEwRTRCMDAwMzhDQUUxMEUzMEZEQjEzRDZDNjlBM0U3Q0YxNzBDMjREQgotOjEwRTRDMDAwN0NFOUNGMEU2NEUwNzNCMDU3OEE1MDBGNTQxRDNGN0UzNQotOjEwRTREMDAwRjgwNDg4OTQ5Njc1OUMzRUVBNkRDMTA3OTcyMDdGMjhDMgotOjEwRTRFMDAwNzc3OTUxQUZGQjM4NjgwOUQ4NjA5RDJEQzk5QzZGQjQwRQotOjEwRTRGMDAwREM5NDQ5RjJGQzYzMjZGOEM4NUMzQkYxOTEyQjJEOTYyNQotOjEwRTUwMDAwMDBEOTVCRjMzMkM5REVFQUVBOUZFQjA5QTJGQ0Y5QzU0OAotOjEwRTUxMDAwM0ZENUNCQjY2MEZCMkMwN0M5REQxNjk0Qzc1MDZGQjk0OQotOjEwRTUyMDAwNzczOEI1QkYyMEY5RDI0RDlDMkZCNUNDRDIzMjEyQjA3RQotOjEwRTUzMDAwN0Q1NjVGMEJDRUQ3OTJFQTdGMUFFOTM2NTMwRDNFMTExNgotOjEwRTU0MDAwOEZGQUU0QjcxMkQ4RTNGODNDNDdDQjQwNzlGQjgwRTI3RQotOjEwRTU1MDAwOUJCNzE4REYxRkNFRDcxRDlFOTdGMEY0MEU3RTNDMjE4RgotOjEwRTU2MDAwRjQyNzc1RDQyNTZFNUZBRjkzNEZFRDQzMzhCRjFDMTA3MQotOjEwRTU3MDAwMzhGQTIwQzIyQjMwOTFFNUExM0VERjgxRjg3OTQ1RTRERAotOjEwRTU4MDAwQkNDMDJBNjc3NTI5OTE3MzRCMzU5RDlCQzRENzgwMERGQwotOjEwRTU5MDAwQ0UyRjk1OUZERjFBMjVGNkY5QTU4QUYzNTNFQTAwQkYxRgotOjEwRTVBMDAwODlGRkYzRjNCOTQzRTVGQzlERkQxQTE0NDgyODRGRjRBNQotOjEwRTVCMDAwRjFFRjQ3M0NBRkJGMTVDRTg1MDQ2MkY4NzY4NEQ3QzMzMAotOjEwRTVDMDAwNzcyNjZBQjg4RjBFMEJBQjY5OEI0MkI3RUYxNjA4QkY4MAotOjEwRTVEMDAwMTM0QTYzQTA4N0Y5ODIxRUU2NEJCQzVENjlDMkRCNzBGQgotOjEwRTVFMDAwRkZFNDUzNEU4MUI3RjBGRUNGOURCRUZGQzI3OUZGQTI3QwotOjEwRTVGMDAwMUMxQTg1MEZGN0ZGQjczQTM3REEzQ0M3ODQ5Qzc4QzFGRAotOjEwRTYwMDAwRTEzRjRBN0NDMTNBRDFBMEFGRUVDRjNGOUQ4NTcyOEFFRgotOjEwRTYxMDAwOURERkQ3MUZFNUVFQUU1NERGMDkzQ0JGRjhDMTlENzYwNAotOjEwRTYyMDAwRjQ0Nzc0NjQ3NERBNzA5RjFERjMzRUM4NDJCRDY4N0U3RgotOjEwRTYzMDAwREQ2QjQ0NUYxN0JCQ0UzNUNFMTEzNjFDM0ZCOTM0REZERQotOjEwRTY0MDAwMTY4NkY3RDM0QUYzNUY0MUZDMzkzODIzQ0UxMzE3NDVCQQotOjEwRTY1MDAwMEZEOTNCNjM3NDE2RUFCRjg3QTY4RENFNDI3RTc3MDgzQQotOjEwRTY2MDAwMEVGMDAwREExMTU2NkYyMkYyNDFENjVFNDk3QzZDQjY4QwotOjEwRTY3MDAwOThGMzUwNjkyMTdGMkVGODY2RTQ3OTU5OEZGQ0YyNDNCNAotOjEwRTY4MDAwRTA5NzIxRDA1M0RGMDdCQjBDQ0JEMzYwOTc4NTgwN0YwOQotOjEwRTY5MDAwOUUwNEJCMENDQkUzNjA5N0UxRjNBMzYwOTc2MTc5NjRDMAotOjEwRTZBMDAwOTU5NzlFMUYyQTFERDQxRTQ2N0RCOTU5MjEzQjY4QTEwRQotOjEwRTZCMDAwRDU2QjhGQTYwRjJGREJBNUIyOTBFNDU3RjBGRkNEOEY1RgotOjEwRTZDMDAwMzkwREY1OUE4NzdBMUJFQTRCNUE0MDczNzA0NEVBOEJFRQotOjEwRTZEMDAwMzYwQzMyRDRBNUZFQjhBMEUxNzJDMzczRkZDQTQyNDMyMAotOjEwRTZFMDAwRkQzRjE2REU0RDFDREVFODI3RkY3NzgyMzdGRTM2MDA0MQotOjEwRTZGMDAwMUNDQUYwMUY4MEZGODc4QUE2REE1MDhFNUIxRDJDRTBCMwotOjEwRTcwMDAwMDQ3RTkyOEM3NDA2RUJCN0NFNTFCODVFMDRCRjY2QTA0RgotOjEwRTcxMDAwQkZEOUY4MEZBMDJCQUI4QkI3MzdDQzUzODJDODhGNTAyMwotOjEwRTcyMDAwMTc0MjdCMDJFMDFBNzIwMjdEOTVCOTJGM0I4OUZDRTgwMwotOjEwRTczMDAwN0FFNDVDMkFEQUYzNDEyQTZGNjQyMUEyQ0I0QTE2QTY1NgotOjEwRTc0MDAwRkE3Q0Q2OTk2RDg3RjIxNjM1QjQxNkZENzZBRjM5RkM5MgotOjEwRTc1MDAwNTU4NTQwQzc3RjlGRjZGQjBFMDU4OUQxNUIzRDA0RTlENwotOjEwRTc2MDAwOUJCOTUyQzhDRThDNzU0RUMwMjFCOTdFOEE1RDQ3ODk0RgotOjEwRTc3MDAwN0RDMTZGMEVGMjdENzhFRkEwNzNDNEVEQjdDMzM5N0MxNQotOjEwRTc4MDAwNUMxRDFFODVGMzJGNzNGODFGNERCNUQwN0NDQjBBOTEwRAotOjEwRTc5MDAwMUZEOUZDNDM3QUMzRjNCNzhBNDY2NzIxRkY2MEJFM0VBOAotOjEwRTdBMDAwMDZGQjI4RDY3QzFCNzFCMzAwODdFQTUyODA5MzgyRjE2NgotOjEwRTdCMDAwMzcwRTk3MTNFNTFDMkU3QjM3QzZEOUQxOEY3MTYyOUQxQQotOjEwRTdDMDAwOERGQzk0QURDRUVDNkNDNERCMTM4RDUzQjMxMUVGNTZCRQotOjEwRTdEMDAwNkYxQzkyOERGODNFQkI2OUVBRkJDOEI3MjdBQkQzQUI4MQotOjEwRTdFMDAwRjBGRDYzQ0QxQ0VGMTlCQjk1RjRBRERCQzVEOTFERjM2RQotOjEwRTdGMDAwMzA2RjA4REFDQkE3MjU3QTAzQjAxRjdGMjAyNzg5RDY5MAotOjEwRTgwMDAwQ0IzNDU3M0VGNDVCMjhGNkJEQjA3OUU5NzQxQzRGRUU2QgotOjEwRTgxMDAwN0ZDMTg2MzhDM0Y5NUY1QjZDQUM5NzMzN0IwNENGNzJFMgotOjEwRTgyMDAwRjA5Q0VEOTE3NjNDN0ZCNUEyOTdCRjA3RkJCOUVFNEYwOAotOjEwRTgzMDAwREJERTdDNTkzN0RFMDM4NTg5QTlBOEFGQjBEMTZDRjQ0MwotOjEwRTg0MDAwMTc2QUU0RkQ1ODcwRkQ2QzU1RjBDRDk3NzMyMzcwOTVGMQotOjEwRTg1MDAwRjg3NDZCQTFFRjUxM0MxRjc4NEM3MTM2QTAyNTkyMDNFMAotOjEwRTg2MDAwQjc3NEY5QjNGNjI0MjFGQzM2M0E3RjdEREY5NTA4OTcxQgotOjEwRTg3MDAwNzdCODdGQTNENTU5NDVGQ0UzQzM2OTAwNDc1OEZGREU0RAotOjEwRTg4MDAwNjlENzY3ODU3NTdDNDFCRTFGNDZGQTA2N0EzREZDRDQ4MAotOjEwRTg5MDAwRjVDNDQ3RjY5NUE3NTExQ0U2RTBGM0RDQUY3QzQ0RDAwNQotOjEwRThBMDAwRkRDMTM5RDc1N0RFMEVGMkYxRTAyRTk1RjRCQjgzRURCMgotOjEwRThCMDAwRTc1RTQxRkZDQ0MxMzZDNTJCNDA2RUQxOEY3QkIwN0Q2QQotOjEwRThDMDAwRDBCRDIzQTFGRDUzOUY4RERBRjdFRTdBOEVENjY5REU5NwotOjEwRThEMDAwRjdGQjYyRkVEMzM4MEZGMTE1MzdDRDc3NUNGMDk3QTNDNQotOjEwRThFMDAwQzg1Rjg2RTAzQUYyQTgzQzg4RkMwNURBRTdFQzA2RkU1MQotOjEwRThGMDAwODJFMzZGRTFGMzJGQjZGQTg4QkYzMEZGNUNDM0ZFQkE0NAotOjEwRTkwMDAwRUNFMUM3NTRDMzc5RDczQ0U0MzRGMTE1MjM5RjU5QjRFMwotOjEwRTkxMDAwQTE5RkExQkVBMDYxOTBBMUVFNUY2OUU0MkY2NUE1ODVDRQotOjEwRTkyMDAwODZGNkMzMzY4RUE3MDcwRkFCRTQ2NzYzMDFFRDQwNUU0MgotOjEwRTkzMDAwNUYxRDdFOTY3MkZDNUM1RDFFNDdGNDcyNzgxQUU3MzNBOQotOjEwRTk0MDAwQjNFNzAwMURBMDdFQ0YzQzQ1Njg0QjdFRDg1RUQ2MDc1RQotOjEwRTk1MDAwQ0Y4NTZEQjAxRDQzM0REQTBERkZBMUJDMzZDM0IxOUMyMAotOjEwRTk2MDAwNTk4Rjg1NzVGOEJCRUM3OUU4QUY1QkRGNkM2Q0Q3RTE0QwotOjEwRTk3MDAwQjMxOTVGM0Y0MjdDNzU0NkYwRjU1Mzc2M0VEQjNFOTAxRgotOjEwRTk4MDAwQjcxRkU4MUJFMTdCRjhEM0YzMTdDOUI3MjRGRTAyREZGQQotOjEwRTk5MDAwQUE0MkJFMDY3Q0U1MzNFNDYzREYyREM4NzkzMUFDRThEQQotOjEwRTlBMDAwRjhDQTQ1RjJCMThEQ0U3RjkyMUM2Qzc1RkU5M0YwRjhEQgotOjEwRTlCMDAwNTBCOUMwRTNGMjIxODRDNzA3NjcwQ0M5MjI3OTE2OUNCRAotOjEwRTlDMDAwNEJGNDMwNUZEODQ3MDc2REJFNDRGNDhGMUU1RUQ5M0JEMQotOjEwRTlEMDAwMDlEQjhGMzY5NDExREQ0OTdBMzJDRjc3NDRFMDlGRUMyMgotOjEwRTlFMDAwMzdERkRBNjlGMzQ2OTE4N0ZFOTU0NkZDNjEzQkU3MTIxMwotOjEwRTlGMDAwQkVERjZFQzJCMzU4RTM5QkZCQ0I3OUU2OUJFMkJDRTY3RAotOjEwRUEwMDAwNzk4NjhDMTRGQTY2NUJFNTQ1Q0Q4NzY0RDhGNTNFRTlENgotOjEwRUExMDAwQjUwOTExQkM1NDkxMEY3Qzk2MTgyNjdCOUNEMzQ5QjkzQgotOjEwRUEyMDAwODBEQjkxRDJEMTg5QTQ0N0NDMzk0NzI1MTNGNERDRDVCQQotOjEwRUEzMDAwM0VFN0RDNUJBMzkxREU0QTZEODJERTZCRThGRDMyRDFGRQotOjEwRUE0MDAwNkU1RUM3NjlBMTM3OUMxNEZDRTNCOEEwNkJEOUFFNkVBQgotOjEwRUE1MDAwNkJFQzdCMDNFMkZENEFENThCRkNFQUYwRjQ0MkMyRjM5NwotOjEwRUE2MDAwMzNDMTcyOUFGRkM4MUM5NUZDNENEMzQ2MEVCODAxRkQwOQotOjEwRUE3MDAwNEM3MjNENzJCRUIyMTlFNzEyRDE4RkY2MjlDMDBCRkQ2MAotOjEwRUE4MDAwNjI2NTM2NkY5RjY4RkE4NTE5MUVCMUM2OTVGOEIzNzcyRgotOjEwRUE5MDAwREE5MEMzQjhDRjQzQzg0N0IxRDU2Rjg0RDMyMTdDMUY2OAotOjEwRUFBMDAwREE2NzZGNTMyOUNFNjY4NkQzQkU2OTQzODgyRjFERDk5NgotOjEwRUFCMDAwMjlGODI3QzAxNUY1RUY5QTg3OENFN0JBQTRDNTY5RTI1MwotOjEwRUFDMDAwMzdCRDBERURCM0NCQjk1RTI2RjlCNTVDREZBMTk1ODNGQgotOjEwRUFEMDAwRkEzMEQ3QzU5RkI3MUNFNzYyRjFFNTY2RjEzRThBQ0RGMwotOjEwRUFFMDAwMkY0OEZFQTYxOEM2MDMwQkQxMzRERjQwNTNGQjUwNTMwQQotOjEwRUFGMDAwN0I4MUIxN0U5MTc4N0M1NEUwOEY5NDNGNDdFM0JEOTU1NAotOjEwRUIwMDAwRDFFMjc3NDdBRTg5QUJEMUU3MjU2QzFBQzlGRDM2OUJCOAotOjEwRUIxMDAwNDY4QTc4RjcyNUNBRUQ3QjQ3MUFGOUUwODVERTk3N0NBRgotOjEwRUIyMDAwNkY2MUExQUY2NTI0RDI2OUE4OENFMkQ4MTdDQkU3NzRENgotOjEwRUIzMDAwNzJGRUExOTFCOERFQjA2MkM3RjdBNTVFNTUyM0Y0Q0Y4RgotOjEwRUI0MDAwNTZFNzdEQUYyMkRFRkQ0NUQ4MDM3QjY3QzQxMTFFRkU2QwotOjEwRUI1MDAwRjUyOUFFNzdGREY1RTdBNzQ5OUZEQUI3RkI4RUE0QjA5QwotOjEwRUI2MDAwMEU2Rjk2MDlCQzM5REQzRTI0MDlGMUYwNTg1QjdEOTJBOQotOjEwRUI3MDAwOUVCRTY1RkIxOTc4M0U3NjY0NDQ1RUM3NUFGNzk3OTY0OQotOjEwRUI4MDAwRDdDRjBBN0I2MDI3OTdENzM3NTk5QkEzREEwM0ZGNkE1MQotOjEwRUI5MDAwMzkzRDU5NUQ0OTdBODg1OTVFOUZGNjc4OTJEQzA0MUZBOQotOjEwRUJBMDAwNDE3NzQyQUVDOEI4Q0Y1RjZEOUUyNEY0MTcxRTBCNzIzQQotOjEwRUJCMDAwQjkyMkY5RkE0MTEzMUM0RTIwMUNFMjIyRjIyNDE2MUM0MQotOjEwRUJDMDAwOEY4QkY3NjUxREVDNTExQkNFNUZFNkYwQkU5MjhBRkU3RgotOjEwRUJEMDAwOTcwRDhBMTdFMzVFOTg5RTUyMENFNzdDNjA0RUZFOEY3RAotOjEwRUJFMDAwRDE2RjI1RkJDRjJGNTI0OTJFQzg3OTNFREFBQ0I0QTFBNAotOjEwRUJGMDAwREZFRkI1OTVGQkIyQkYwN0ZEQUI3NzM5ODlBRkNBRkUzMgotOjEwRUMwMDAwOEJBNjFCRUQyQ0IzM0NGQUE4RjE5M0I3NDZDM0JDNjVBOQotOjEwRUMxMDAwQ0RBQUQ3MDFFRjk1NEQyRkU5QzNGNTZBQjcxMThGMDQzRgotOjEwRUMyMDAwNUQ5QURGNUY2QUFEOEQ3QTlFNjZCRTU3MzY3RDM1RTlBNwotOjEwRUMzMDAwRUI4N0M0N0EwRkVEMUQ2M0YzMjQ3NjdGQUZDQ0NBRTE3NgotOjEwRUM0MDAwQjAxNEY0Q0RENTMwRUZEMjg2NEY0OEZFMkM5REFFN0E2RAotOjEwRUM1MDAwNTEyRDc5QURBOTdFMjZFMkZGNTE5RkNEODJGNDcxQTQ5QQotOjEwRUM2MDAwQURGNzRDODQ1MzYwOEVFQUNEODVGRUZCOUIwNjExMURFQgotOjEwRUM3MDAwMUM2QkJBQkEyRkNFRDc0QkMwRUI3NDdCOUMwNUZENEZGMwotOjEwRUM4MDAwQTc3RDM2MTYyMjdCMzk0NEU3Rjk1MTQzMTlEOUM3QTcyNgotOjEwRUM5MDAwMTE0RTc4RkU1NjM3RDE0OUJGMjJFRUM3M0EwQUUzNzBDQgotOjEwRUNBMDAwRkJEOUMzRjRGMUMwMjM0MUI1MzQxODg1MkZGNTEzRjMxNAotOjEwRUNCMDAwMUQzRkZGNDNDMkFCNTc4M0ZCMDhFRjhFQjZGMTc5OEU0MQotOjEwRUNDMDAwQUY3NDI3NjE5Q0VCQjcwRDg1MjQ4RjhGNEQ4N0YxQTEyMQotOjEwRUNEMDAwRENCQjdCRTk3RDk4QUY3NzdBODM0QUYyRTM3NEZCRjU3RQotOjEwRUNFMDAwMzNCMTdFNjg4Mzk0QkI1QzFFNTU4QkY5NTdFRjFFM0Q5NAotOjEwRUNGMDAwQTMxOERBM0ZGQUI5OEM2QjcyQkE1RTIwREFBRjlFNzU1MAotOjEwRUQwMDAwRjhCRTYyQkQzQ0RCMzVEN0IwRkVDM0MxRTM2NDZGOUQ4NgotOjEwRUQxMDAwNkU4MEI3MDE4RUQ1MzMwNkQ5RDExRTVFQjRDQjc4NkUyNgotOjEwRUQyMDAwRTUxQjhDNzQwODNGNTc3RURGNDg5RUNCQTIwNkQwNjc1OAotOjEwRUQzMDAwODE2NTFEOUQ1RTQ2NzZGNEVDNDA2RjkzQkQ2REI0RTMzNgotOjEwRUQ0MDAwQ0FEQkI4QkRCN0UwRTFCMkEyMTBEMjY5RTAxMzFCOUVFNgotOjEwRUQ1MDAwNTM3NTczOUM2MTlFRDkyQjhENzZEQTAyOTM1RDY2QjZFRQotOjEwRUQ2MDAwREJDQ0YyNDVDMjYzQjlBQ0I3NTVEMjNBQ0M3QTRCMzc1QgotOjEwRUQ3MDAwNzk2M0FCQUQ4QTk2MUY1MTU1QzRGNUIxNkFBMENCNzRDNwotOjEwRUQ4MDAwRjQyQjMzRUYwQ0I0QkI4RTAxN0NEN0MzNzhENTc2Rjc2OAotOjEwRUQ5MDAwREY3MzQxNEYzRUEyQjJGMUU0NENGMzA2NThCMUY0MUJDRAotOjEwRURBMDAwRThFNjVCRDBBMDlBRkMxMzQ2Rjg4MkJFN0UwQUY1RjkyRAotOjEwRURCMDAwQTZERTQyMEUwNzQwQUUyNEEyOUNEMUZDNDUyODI3MkU5OQotOjEwRURDMDAwRDYxRjcwRDFGQTc2OTVEMEI3QUIwQ0ZBRjY0MUVDQTIwQgotOjEwRUREMDAwN0I3RjZGRjlGNUU0NzczQTNDRTM3QUQyQkYwRjc3Rjk5RQotOjEwRURFMDAwOUQ3QzA2QkY5Mzg0RUZFMUU5NjUwNjdENTJGN0JDMTc3MQotOjEwRURGMDAwRUI4MTNGQzZEMjFGOEYwQUZFN0E0NEY4OURENjBBMzlBRQotOjEwRUUwMDAwRDMyMEU0Q0NFMUU5QzIyRTRDNjU0NDJGNTZBQkM2MkU4QwotOjEwRUUxMDAwODYyRjVENDgxRjVCRDBEMENGNzQ1RTQ2MzlFMzJDRjE1RQotOjEwRUUyMDAwQjcxNjAxNUVDNEE1MEYzNTNDQjdCOTBCOEM3NDYzQzIyRAotOjEwRUUzMDAwQ0Y3RThDRkJDMUVGNDZEQjFFRTA1RTVGQ0VGMzQ3RjE3OQotOjEwRUU0MDAwMzlFNkIxNDhCQzY0RDAxRkU1NzNGOTg2QTFDMUY1QkNCMQotOjEwRUU1MDAwM0RBMDE2NjBEQTFCNDMxNThERkE1Qjc5NUQ1Mzc4M0Q1MgotOjEwRUU2MDAwRTAxMkVEQUFDODVGQjM0MUZENjg4RTc3MkVFQTUxOTg5MwotOjEwRUU3MDAwOUZFMzRDRTFFRDg4MjJGRDAwOUY5MzUyMjJGODhGRkUyNAotOjEwRUU4MDAwRjk3ODFFMjIwRjI0QzE3QkZERTdFNEJDOENGNDhENzk1OAotOjEwRUU5MDAwM0I5NzQxRkQ1NzQ1Mzk4NDM3RTlFODlBMkZBMEYxNDM2NAotOjEwRUVBMDAwOTg5RjEzQUU5RjQwNzQ1Q0U2NDhFMjcxNzY5MEIzM0Q0NAotOjEwRUVCMDAwRTNERjZBNkVERjk0RjZBNkM5RkE1QkY5N0E2MkUyQjMyMQotOjEwRUVDMDAwRTg3NzA5N0FENTZCNDQyRkNDNDJGRTkzOERDRTExMzY2QwotOjEwRUVEMDAwQzRERkQ5MkU1RjE2QzIwMUYwQkRGMjc2QjREMzVGQjRBMQotOjEwRUVFMDAwOTNCQ0RDNUJDRUZEQUEwN0E3OEQ3RUY4MzY3ODNFRTJBOAotOjEwRUVGMDAwMTkxNzkxRjFDMUM1ODBFNzI0MTczQTEzRjU3ODdCNjQ5RgotOjEwRUYwMDAwRTU3MTBCRTZEM0ZDQTE5RDc5MzExRkYxQzhBRThBNTc5QwotOjEwRUYxMDAwREU4NDcxRjZBRDVDNzg2RjExRDJEMTdFQ0VDN0NERkVBNgotOjEwRUYyMDAwRDg5MjY3QzY5MTNDQkI2RTg2NEE3OURBODc0QTU1QzY0NQotOjEwRUYzMDAwRjk3QzgyQzFBRTg4Rjg2OTU1QzI4RjRGRjc1OEE5MUQ3OAotOjEwRUY0MDAwRjNBQUYyMzA4RjBBRkQ5NTk4NkY1NTJBQ0U0NUU4MTU0MQotOjEwRUY1MDAwNkRFMjFDOUYxMEZFREExRDgyNkU1QTA0REQ2QzEyNzQ4NQotOjEwRUY2MDAwQjNDRUVDQUY3RDg4RDNDREExNzYzMDA0NDA0RUZFNkU5QgotOjEwRUY3MDAwRkFDMjg5RTQ4N0RFQzIyODlFOUMzMzRENUQzRjEyRjZCQgotOjEwRUY4MDAwNzc3OTlDRDc4NkYwMkI5OTlFQ0ZFMTM5NDdCMTYwMUNFOQotOjEwRUY5MDAwQTZBQzM0REY4NkY0N0U3OTZGOEZDRDQ3N0FENjJDQUE2MwotOjEwRUZBMDAwNEY5QTkzNDM3NkZCREU5NTY1ODk2NEJGMjc3QUIzOTBDOQotOjEwRUZCMDAwMkUwNzRGOEYwQjU5OTJEMDBFMkMyNDNFNzFFNTE5OEJFMgotOjEwRUZDMDAwODE1RUYyNDMwOTA2QkExQkZBNTg4QUExN0RDODk2NENBNQotOjEwRUZEMDAwNDNCRDhGNkZBMEExN0ZFRjUyMjMzRDI2MEMyRTMwQzk3OQotOjEwRUZFMDAwMjVBRUU3NDkzODRGNTZDNzkxREZFQTQ4NDQ1RTUyQkIyOQotOjEwRUZGMDAwQjRFRkE0RkY0REY2MDc2ODE5Rjg1QTkzRDAwNzQ3NDBCRAotOjEwRjAwMDAwMURGM0UyRDZDREE5Nzc2MEZFQzNBNzZENTYyRjFGQkZCMwotOjEwRjAxMDAwODJFNEJEMjNFNzc5MDdEMjA5ODY0ODMxNEZBQTQ5Q0E1RAotOjEwRjAyMDAwMUZFMThGNjcxQTMzQUQ2QjAzQzM3OEU5OTE1MjQ2RjgzRAotOjEwRjAzMDAwMTQzRjk4MjkxODJGNjgxMUU3N0RCRjk4MTdGODZBODkzRgotOjEwRjA0MDAwOERGQzZFRkMxQzdCNEZGNzUxM0ZFNjMzREFBOUU5NDg5MwotOjEwRjA1MDAwNjcwNTg4MjdGQ0ZEMjdDNEZCM0IwNEJFMUMyOUZERjE4NgotOjEwRjA2MDAwOUEwNEM0ODdCOThDRkNGNzkzRDU2NTZCMzAyRTc4NjQwRAotOjEwRjA3MDAwM0EyMzNBNjkwQkJEOTQ4MEVCQzc3MTMwQ0ZFRjU3QjE5QgotOjEwRjA4MDAwQzY5OUYzREMxRjZGQzFGNUVDQjREMzM4NjU4RjgxNUM5MgotOjEwRjA5MDAwMDQzQzE5N0FFREQxMEZERTQ2RjA2RDcxRUY4QjY3REQyMAotOjEwRjBBMDAwRjVFOTExOEY2OTVFMDQ0RURFMTkxNkIyNTExOUQyOTAzRQotOjEwRjBCMDAwRkZFNDlEMzlBMDYxNUM2RkU4NUY3NzdFRjAzNEMzNzkyRgotOjEwRjBDMDAwQjk1QzY4MTJGODZERTZBRjNGN0RGQzE3MEJENjYzQjlFQgotOjEwRjBEMDAwNjM2QkMxN0I1MDdFNjNDRDgzOTk3NTUwM0VCMUU2NUIxNwotOjEwRjBFMDAwNUI2RkYzNDRGQzlGM0I2NjJFRERERTAyRjUyMURGRkMwNwotOjEwRjBGMDAwRkU5M0NGMjM1RUNERkNGRUZGNzkxRUQ3M0JGMzFGN0YyRgotOjEwRjEwMDAwNzZDMUZBMkZBQjRGNjQ0OERGNzI3REU2NzlEMjU5OTMwRQotOjEwRjExMDAwODJGMTRERTRBM0M0OTdBRDAxQUE1NzA3OEM3QTc3NTlDMQotOjEwRjEyMDAwQTlEMzgwN0ZEOERGMEFGMDJCQUJGQjI5QzU4OUQzQzVEMwotOjEwRjEzMDAwRkI4NzY2RENBREE4MzBFRjdCRDU5Q0FGMUM1Q0Q1RDlENgotOjEwRjE0MDAwMzJDOTQ2RkQ0M0Q4MUZGODI0RTU1REY2RUIwRjZDMDU4OAotOjEwRjE1MDAwREZCNzA3MTQ4QzZGODM4MkU0QzVCODZEMDZCNDIzM0YxNAotOjEwRjE2MDAwNjcxRTBGRTkzQkQ5MTI3RjA1NUZDMUVCMEE4Q0ZDN0I2MAotOjEwRjE3MDAwNTZDMkIzM0MxMTU3NDRGRThCRkNCRTZFRDQ0MEUyQ0I2QQotOjEwRjE4MDAwRkQ1QzRDQzNGMzJEN0Q2MTgzODJGOTY2RUZGQTNENUUzMQotOjEwRjE5MDAwRDIwQjU2QjFDRDkzQzBFRTFEQUFGMkZDODlCQ0QyNzczQQotOjEwRjFBMDAwNkZDMDczODFBRDVBRkQwNTkxNzE3NzhBQkNBNkQyMTdFNQotOjEwRjFCMDAwNUM5NDdGRkRFRTRFRDczNkYyRUIxRjk4NjlEMUVCODM1RQotOjEwRjFDMDAwMTM3RkZBRDFDRjdFOEJGODU1MUQ0RkY4NjVENjVCMEVCNQotOjEwRjFEMDAwMEFGQUU4QUFEQjNDMEZERjg2RkFGRThCMEU2RTI3Njk3RgotOjEwRjFFMDAwOUUyQ0IyQkJCRDlFMkNDQ0MzRTlFQUY3N0QxOTFGRjM2MAotOjEwRjFGMDAwRkUxOUY5RjlFQzBBMjdDNTBENjQ5QzQ4MkRGREE0MTFGMAotOjEwRjIwMDAwRTk3MTdFNzE2RDExRUFFMzk5NzgwRUJEMjNGMUU4Rjc5QgotOjEwRjIxMDAwNkVCMjUzREU0MDQwNDlBMEZDRjI1ODcxRTc5REEzNzJFNAotOjEwRjIyMDAwNDRGQ0E1RjYwQTVBMDdBQjFEOERFNUI5QjlGNTBGREIwRAotOjEwRjIzMDAwM0RCMUU1NTU4MzM4RDc1OEVEMzYzQkYzNDc4QjBGRUY5QgotOjEwRjI0MDAwMUNDNUY1RDA3QTNDMDc5QkVFMUM1QzdGQjgwMUUzQkM4MwotOjEwRjI1MDAwQjFDRTgxNTk4MzA1OTQyRkU5NzAwQ0M2N0M4RTM0RjFCMAotOjEwRjI2MDAwQjhENUY5ODNCNzUwNUU3NTFDRTZGMjJBQURFRUIzNTVGQQotOjEwRjI3MDAwNDg3RkQyMEY1MTk1Q0VCQUUyNjAxQUJDNjcxM0VGQTU1MgotOjEwRjI4MDAwMDlGRDFCNjkxOEY1RUYyQTExRkZFOUE4NjQxNEZGNDk2RAotOjEwRjI5MDAwQUIzQkZEREYwODlGOEQ2MkZDQUE3N0Y4Rjg3NjZCNjhDMAotOjEwRjJBMDAwMkZFMjRCOTVDQjQzNzJBN0EzNEY5MjE3RUYyN0IxRjNGMQotOjEwRjJCMDAwM0NDRjI0OTM3MTdDNEMzM0VCRjdBODA5RTlENjlEOTY5QgotOjEwRjJDMDAwNTBGMTNCNTQxRkU2OEU2NzIxMjdFMjhGRTJBMDc5MzM4RAotOjEwRjJEMDAwNTdDNjUxN0VBQUQ0QUZEMkVBRUVCRTU1MUQ2MTE4NEY3MwotOjEwRjJFMDAwNDFCREZBREQwQTZFM0ZBMzk5REIzNTZFOEU0MUFGMjIzOAotOjEwRjJGMDAwM0RDQkJDMEVGOTVFODc4REI1QTMzREE5RDNCMzQ4MEZCNgotOjEwRjMwMDAwNjNGQTc5MDYxOUVBQzIyRjY2QUNEQkQyRUQwNjNFRjE0QwotOjEwRjMxMDAwRUVGOUIyNUVCNTVDMEU3ODUyNDc3MTdGMUNDMjQzRUFDQgotOjEwRjMyMDAwNjM1MjZGRUIzNkFFQTA3NzlEN0UxOTQwN0UyMUYzMjFBQwotOjEwRjMzMDAwQkFGNEE0MUE5RDFEMzVCMEZCN0IzMkVGNEM5RTgzODQzQQotOjEwRjM0MDAwNjdBQ0Y3OUQyNURBQjk1MTk0MTcxMUEyNzFGQzYyMThDOAotOjEwRjM1MDAwOEJEMzk1NERGMDM1RjE0QjYwNUIzQzJGNUVFOEExQTA1RgotOjEwRjM2MDAwNDUxQUYyMTFBNDVFMjlGOTczODdFMEJCRTE5QzMwRjlEQwotOjEwRjM3MDAwMDE2NUJFNzc3Rjc4MjcxQkRFOEYxRjlEREM5NTJGOEY2MQotOjEwRjM4MDAwN0FEMDkxNTUxRjUzM0NCRDBBRjU1MDk4M0ZCQ0U2NDNENwotOjEwRjM5MDAwQzM3RDkyQTY5MjkyRjhEMUU0NkYzM0U2M0RFOEUyQThFRAotOjEwRjNBMDAwQjQ1RUJGRTA5QjkzNTUxN0U1OUY3NEIwMDQyRkYyQUY5NgotOjEwRjNCMDAwOEU4MEQwQzdGRUU0MjQ3RDRDRjIwQjMzN0Y5OEUxMzU3QwotOjEwRjNDMDAwRjJGRjZCOEI4REZDN0Y5NkQ2REIxNDQ3MzJGQUIzQ0EwMwotOjEwRjNEMDAwN0RBNkY4RjYzQkQzMEM3QzUzRjI5RjNCNTQyRjZEQzJCNQotOjEwRjNFMDAwMEE4MjFFRTMzNEZCMDVCRjdDNUJFODgxNzY1NjRCQ0Y3NwotOjEwRjNGMDAwMUQ5OEY3MzkwOEY5N0YxQjk1MkU3NjgwQ0EyNEQ2NDlDNwotOjEwRjQwMDAwQTU5QkI5Mjk0RjI2ODU3OUE5NEM2NTNFMkFGQkIyNUE5RQotOjEwRjQxMDAwMkFEMzE5Q0Y4QkNBNjQ2RDU0RjY2NzA3QThDQzY2OURCMgotOjEwRjQyMDAwNTQ3QTk4REI4MkU1NDBFNkE1NzIzMEYzNTFFOTYzNkVDOQotOjEwRjQzMDAwOEE3QkJGOTMxOENFM0EwNEYwOUI3RTNEMjMzRjNDNjMwQQotOjEwRjQ0MDAwM0ZCOTUxODM3M0VBMjg5Nzc1NDAyMEE0QUJDOTRDMjA3QgotOjEwRjQ1MDAwREZFMzM3NkE1ODlGMjZFQjNCNzhCRDg0RjcyRkZERTU0NQotOjEwRjQ2MDAwNEY3RjE0MTg0NkZDNDZCNDNGQzFEQkJCRUEzQjZGMkMxMAotOjEwRjQ3MDAwMjEzQUI1NTA3RDBFRjY4N0ZBODMyM0I1NjlBMzAxNUY2MwotOjEwRjQ4MDAwMkI0NzMzRTJBM0U3MEJCNTZGRUFFQjBGMTU2QTMzRjRCMgotOjEwRjQ5MDAwRjU5NzhCQjQ2QkY1RjU4RjBBQjQ1OTg4M0ZCMjlFNTkzNgotOjEwRjRBMDAwQTg5NUU5RUIzNzE3NjlFNUJDM0ZGNzFGQkQ2M0QzNDg2MwotOjEwRjRCMDAwREZDNTA1MjlBMzM4QkVFMUNGQTlGQTJCMDkwRjc3MjlBQgotOjEwRjRDMDAwNTYzQ0Q3Mzg0MTZGNzYzQzQ3MTVFOUM4RUI4OEMzRDIyNAotOjEwRjREMDAwQzdGMzc3QzJGMUFFQjBEM0QyODNGRDYzQTJBMzMwRjJGQgotOjEwRjRFMDAwMjdDMEMzRTE4QUZGNjY1QzhGOTk5RjI4MDE5MTA3OTgyNgotOjEwRjRGMDAwNkE4QzgzMDBCRTkzRkYyQ0JDOTJEQkU5OEM0NTZGOTcyRQotOjEwRjUwMDAwRjM1RTA4Q0Y5OUE2RjNEQjBFOEM4QzFCNkIxRjY2RkM5OQotOjEwRjUxMDAwM0QyMEY0QkM4MzQyQ0Y3QjQ3Rjg5OUJCRjYxREI2MjY0RAotOjEwRjUyMDAwOUY3MjQ0RTgzOEI2N0Q2ODY1QTdGNEZDQjJEQkJFM0Y0NQotOjEwRjUzMDAwQUFCNDAxNUQ4N0VCRTJEQzI4RUYzQUUyRDlEQjY4QTdFOQotOjEwRjU0MDAwMDUwRUFCMENGNThDNEI1RDZGNjlFMTk0MDcwOEVFQUNEMgotOjEwRjU1MDAwQkY5QkUyMEE3MjVFQzE2NzNBRjA5RkEwRTc1Q0RFNEI5OAotOjEwRjU2MDAwREE5NzVFMDc4NzM3QjczQjkyQzVCQUVBMjdBNTVDOTM1RgotOjEwRjU3MDAwNDdGMTM3QUVENzBGQjMxRDk4MzUxNUQ2OTlCNjgxRkIzNQotOjEwRjU4MDAwNDc5MzkwQkUzMTE0RjZDQzlGREMxODE3NkI5RTZDNjFDQwotOjEwRjU5MDAwQzhBNzFBMDVGRjM0RkJERjM2NEU1QUUxRDZGQkE3MUI3RQotOjEwRjVBMDAwOTM4MjBBQzYyMzMzNDNGMURDMEY5MUNBODJGMTI4NDdDNAotOjEwRjVCMDAwNEJCREE1OTQwNzEzNTBEREE1NThBRjYwMzNGM0EwQkUzMwotOjEwRjVDMDAwQTA0NUY1OTRDMkJDRkI1QTlFNUI4MTdFRDg0NTE1NzY1QQotOjEwRjVEMDAwOEE0QkQ4QjQyOTE0QkY5NkY5MTgyOTAyQ0YxQkQ2QzU3NwotOjEwRjVFMDAwNzk0MzA4QzczRTJFRjJDRjBFNkIyQzI4NDU3QkI3REU0MQotOjEwRjVGMDAwOTU5MjgyQjg5ODUyQjE4NEZDODdGNTJFRUZFQjc4NEY0NAotOjEwRjYwMDAwMjNFMEI2NTA5RTIxNzM2QjhFMzJEMDU3QjZERDY2MkQ0NwotOjEwRjYxMDAwNDUzRTlFRjVFQ0M4MjQ1NUI3RUVFMzBENjdFMzMxQ0ZDOAotOjEwRjYyMDAwRkQ1MUI3ODVEQTFGNUQzOUQxQjFDNDg1RjcxMUMxNUVDRgotOjEwRjYzMDAwODA3MjlGRkI5ODg2RkFGQjU2RTg5MzA2RTNERDU3NzNDQQotOjEwRjY0MDAwQUNGOUIyMUVDRTMxQTlENDZFQzA1QkE3RDc1ODhGMzNBOAotOjEwRjY1MDAwRjkxRjZEMjZCREUwRjA2ODkxRjczMThBOERDMjczQkU0NwotOjEwRjY2MDAwRTJDOUYzNjRGRkNFNzc3OUM4M0YzRUIxNDlBMTdDOTdFOAotOjEwRjY3MDAwRjA1RTZGMzZFQTlCQzdFRjFENDJGRUYwODYyNjU1RjgxNgotOjEwRjY4MDAwQTNCREU0OEYwRTY3QjE2Q0JDQjc1M0REQUM5MEJFQUFDRQotOjEwRjY5MDAwMzY3Q0IyMUFERjFCOTBFN0M5QzA3MTA2NzgzQjMzRENCOQotOjEwRjZBMDAwM0FGQTdCRjRGQkRGOEQ0Nzc5RDc4MDE3Q0YwODhGMThBNAotOjEwRjZCMDAwOEQyM0VENTU3OTNGQkNEQTdEQjY5MkZDQkJDREJGRjcwQgotOjEwRjZDMDAwMjFGQzkzMzUwQkQxQ0MxMTVCMzAxRENGN0Y3REM5NkNGNAotOjEwRjZEMDAwQTI0QkJDNkY4NTdBNEMzNzdERjQ3MzU4QTdFRTlFNDFFMAotOjEwRjZFMDAwNjNFQUMwMDQ5QzM3ODJCRjFBRjlDRDRGMzQxNzkyN0U2QgotOjEwRjZGMDAwQjRCRDY5MjJFNUY1OUJDN0I5NjcxNTZCNDNCREI1NzEwQwotOjEwRjcwMDAwOTVBMzJEOUFGRTdCNEZCNjJGMUJFRjYxOUZEQzU4QjI1RAotOjEwRjcxMDAwOTZDMUY5OUZEQzdCNTMzQURFNUI1RkRDMUNDN0UyM0RBMAotOjEwRjcyMDAwRERGQjlGRDgzODlBRTY1QjhDRjdBMTcxREVFNjU5NzY0RgotOjEwRjczMDAwOTQyQjUzNUI0QUVDMDhCNzdCNTZDRDdENTYzRkNGQzcyMQotOjEwRjc0MDAwMjU3RTY3MzFEMDlGQjNGOTU5QzIxMzE3MEIwNTEwQUU1MAotOjEwRjc1MDAwQkZCOTRBQ0I0NkZERTI0NDJFOEI5QTk3RDlBNzk4QzdFQQotOjEwRjc2MDAwMTc3RjdCOTU4RkVFOTk5Q0NDOEFERTJGQTM5OEM3MUZCRAotOjEwRjc3MDAwRUYyQkY2NDg3RkYxREI0QjUzQzkxRTc0MjNCRDFFNkY4MAotOjEwRjc4MDAwMkE0QzQyQkNCNTYxMUMxREU0QTJBREZERkMyQUM0RkY5RAotOjEwRjc5MDAwNzMxNTBCREY1QjBBRUQ4REQzQUUzQjgzRTUxNUY2NUE4RgotOjEwRjdBMDAwRDI5QkQ5MUY1NEEyMDdEMDBCRTlCRUQ3REZFNjM4RENDNQotOjEwRjdCMDAwRjVCQUJDNDBENDFGMzU4MzVGQzNDN0QwRkVCMDM1QTlBRQotOjEwRjdDMDAwMjEzQkYwNzdEQjlFNTNBNDg3MjNCRTZBM0FGQ0E1REY3QQotOjEwRjdEMDAwMjhBMUNGOEI3QzhGRjQ1MTc0N0Y4RTdFOERENzVDMTdFMAotOjEwRjdFMDAwMEMzMThDQTMyQzc0NDQzQkM3RDhGM0VCQzY0NUZENzY5MwotOjEwRjdGMDAwMTJEM0UyNzVGMzgzNTQwQzkxNUZEQkNGRTdFQkVBMjc3QQotOjEwRjgwMDAwREFDMTBDRDU2ODdENDIyRjM3QjdDQkY1MEZEOTYyQTQ4QQotOjEwRjgxMDAwQ0Y2RkUyRjkxNDQ1RjRGMzU4RUJGRDQ2RDBGODVFNEQ5NgotOjEwRjgyMDAwMzExMzc5MTYzMzBERjQzMjU0NkQ1QjMxMDZDRThEQkQzNAotOjEwRjgzMDAwQ0JGOTNGRDg3NUNDMTcyNTVFMTVFMUIzQjBGNkJFMDIwMwotOjEwRjg0MDAwN0UwMENGQjVBOUIzQzkzRTg5QjUwRTdCRjA4MDk2MzM1MwotOjEwRjg1MDAwMjI2MkJGN0QyM0REQjgyRUQ5QUY0NkUwNUQ1QzkwODU4NgotOjEwRjg2MDAwNkM0OTU4ODZFODVFNDYxQ0JDOEZGMkZCRDM4QUVGQjgyMQotOjEwRjg3MDAwQUY4OTQyMTdCMjM0RjMyREZDNzlGMEJCMTFGMkFDNENENgotOjEwRjg4MDAwN0MwMkQxNjBCMEQ0NDcyQ0ZDN0Q0REM3RTcxMjM3NzNBMgotOjEwRjg5MDAwRkRGN0M0MTY4NUY0REZGNTFCNzk1RUM0QTc0MUE4OTM3NAotOjEwRjhBMDAwNzJDMUNGMDk1NThCMkY4NEIyRTNEMkREMUY1Q0YyNDJDNwotOjEwRjhCMDAwRDM3RDQzM0QwNkI4MkQ2MkJBNzhEMjk5MjdFRjdBMUJFMwotOjEwRjhDMDAwREI0RjNGN0Q5NzBGOTc3Qjc3RUFBMjI0Q0VCNzhFMkUzMgotOjEwRjhEMDAwQzA3OTRFNUU2RTI3N0YwQ0ZFMUMxMjNGQTBFM0QyNjAwMwotOjEwRjhFMDAwOUMwMTBGRDdFRjdFNzJDQjAyOTQzQkJCMUQ1RTRDQUZFOQotOjEwRjhGMDAwNUJCQ0M1RDgxRTk3QUVEQjE3RTNGODE1MzBDMDI5M0NCQQotOjEwRjkwMDAwNzAxNkQwRDE5MUVGRkY4NEVFNzkyNzIwRkY0NDdBNUMwNgotOjEwRjkxMDAwMTk0N0Y3QkJDQzcwRkU2MDc0RDdGNzQyOTgzRTBFQzcwQwotOjEwRjkyMDAwQzRCRDBFNDk1N0M3MzZENDlGNTQ2MTlDQjUyQkVEMUVGQwotOjEwRjkzMDAwRkEyRTgyQzlGRTNBRTI5OUE1QTVFQkUyQkRGNjk1RkM0NgotOjEwRjk0MDAwQkUyNUQzREI4OTAzMjNGQjk3RTMxRTA5MkM3NDc4NUM2NwotOjEwRjk1MDAwRERDN0VCODY3NzMxQzY1QjU4QTJFRDJBMDY4NDVENTY3QgotOjEwRjk2MDAwRTI3QjFBQ0JFMzFCMTZEMkJFRUJEQTU3MUU3OTEzRkFGMQotOjEwRjk3MDAwMzQyNUY4N0Y4NjdDRjNEODg2NDFBMzE0QkNGNzYyRjU2MgotOjEwRjk4MDAwRDBGREJGODYwNjRCM0NGMkZERTYzNjZCRkM2MDg0NzcwQgotOjEwRjk5MDAwODM4NUU0N0M3MzVCNkFDMjYwOTQ0QjJFMEJDNTQ5NTEyRQotOjEwRjlBMDAwQUVBODNBRkZGRTQ5QzEyNzIzRjJDMzk3QTRENzdGMTIxRQotOjEwRjlCMDAwMDQzRTlFQ0MxM0ZBQ0YyNEFFRkYyOENGRUMyMUJEQTM4QQotOjEwRjlDMDAwQTE5MUM3QTlBNEJFRTExNkY4RTMxNkYxQzg1OEZBMEYzMQotOjEwRjlEMDAwMzIxRTVDNzc2MkQxMjIzN0YyQjVDNjI0RkUxRDhENDVGQQotOjEwRjlFMDAwOTNCQzAxQkM5Nzc5QjU4QjkxREMxODgwOTcyMzUwQ0ZERAotOjEwRjlGMDAwNzJCMUUwNTQ5ODQ3NzU3M0ZEQzZERkNDNDg5RjQ5NzFEQQotOjEwRkEwMDAwQjlCQzA4RUFCNDk2NjA4MEQ2QUQ3MTNBNzNDMDdGMDg3RAotOjEwRkExMDAwQ0Y4NDNDOERFMUY4NTY5MzVFNjEzN0U5MERBQUE5REVFQgotOjEwRkEyMDAwNTEyQ0YyNTA4NDFFQzE4NEZFMkRCRkRCOTA3ODZGQ0YyNQotOjEwRkEzMDAwNzkzREQyQUZEQjJDRkMxM0EwM0YwNUU4RkU0NzMxMEIyQwotOjEwRkE0MDAwMjJERTMyNERGM0E0RjY4REQ4MDFFODc3QzRGNkY0NjJENQotOjEwRkE1MDAwQjZBRDVFMTc3RjUyQjQ1N0M5NkYyMEZEOTJEMkZGMjAxQQotOjEwRkE2MDAwRkQxQzIzOEFDMTVFNEJEMkY5MjM3RTBEQTZBNTRBRjE2NwotOjEwRkE3MDAwQjBDRjEwNEY3MjgwMUQ5MDNEMzk4QzI5RkM5QUM1OTdFQwotOjEwRkE4MDAwRDREM0VCMkUyRUVFRjNBMzk3RjgzRDlGMDY0QjgyNzc0RgotOjEwRkE5MDAwN0I0RUY3N0UxOUUzQjhERjJDNjExRkVDMERGNURBRUIzNgotOjEwRkFBMDAwMUQ3NDlGNjZCMkJBOEJFRUNGQjc4RUI0RjAzQzY1NzYwQwotOjEwRkFCMDAwQzA4REZBNDBGMjE4Q0U3NzZGMkZGMUI5QzcyMDIzNzdBNwotOjEwRkFDMDAwRjk3MjEwNkYwMDFFMDExQkRFQzMxMzdFREJBQ0RCMDc3NwotOjEwRkFEMDAwMjZBMDNFRkM1RUM2QTk4REE4OTcwNzFBMkRDNDZGMjRFOAotOjEwRkFFMDAwMUM3MzU2NUIzNjIxMUFFQUUyNzMyMTZCNDEyNENFQjZCMQotOjEwRkFGMDAwREU3NzM2ODBGNzdFQ0Y1RkM5RUYxMTI1Q0MzQUIxMTc5QwotOjEwRkIwMDAwRkRBMEVCMDY1QkM4Q0Y3RTc3QTI0NjcxM0JBMDFGODdBNgotOjEwRkIxMDAwQ0FFMzc1QUY2M0JDQURDOTkzOTI4MkRGQ0Y3OTNBOTlERQotOjEwRkIyMDAwQjczMzcxOEUwRjI0RjZEREE2Q0YxN0U5QkM5MkVGRkIzOQotOjEwRkIzMDAwMDEyNUJBQkVCMkY3NEFCRUNGOEVERDAwQzg1RUU0RDc1QgotOjEwRkI0MDAwRTJGNjc4NjA3Rjg1RTZEMkQ1OTFGNkUwRkQxRjA2QjgzMwotOjEwRkI1MDAwM0QzRDZBRjdGRThBQzA2MEIyOTM0NEZCRjkwQUIyRTcwMgotOjEwRkI2MDAwRDFDNzA4RUQxQjc3NkZBRTQwRkJGQzkxOUNFOEYzREUzQwotOjEwRkI3MDAwM0U4RUNCRUI0N0RFRjAwRjQwN0QzNkJDMUJGMEE3NTcyNwotOjEwRkI4MDAwQjRGMzBEMzE0QjMxOEQ5QjhENzFBOUYwOUQ3MTczQTMzMQotOjEwRkI5MDAwN0Q4RkU2Q0Q3MTlDOUZCNDQyNUI1Q0FGODgxRURCNUFDMwotOjEwRkJBMDAwNjFENjUzODNDNEFGQ0VENTFDN0I4NUQyQUU4MTdGMTQ4MgotOjEwRkJCMDAwMDEzRDI0QjNFOEZDRjJDMkZBQUEzNzFERjVDRUZBM0JBOAotOjEwRkJDMDAwOTVCNUM4M0ZFQTQxNUZDNUI4NjA5QURCNEVGQTZBNDMxMwotOjEwRkJEMDAwRjI3NzRCRjA1Q0NFRDUzMDM3REU1QkREMEU2QTFGRjI3QwotOjEwRkJFMDAwMkZGNEFCRTI3REQ0QTk3NTlDQ0ZGOERERENDRjBBNzY4QgotOjEwRkJGMDAwOUNFRjZBQzRDNzBDMkJFMUEzRDQ1RkFEMTU5Q0ZGNUNERQotOjEwRkMwMDAwMUVDN0YzOEIzQjkyNURFNDM3NERBRUUzRjlDNENFMDBFMwotOjEwRkMxMDAwRThCM0I4QkY0OTNDMUY1ODgzRkY5MDBGNDlGREQ2MzU2NAotOjEwRkMyMDAwQ0M2QUM4MEJCNjlCRjI4NkFEQTYzQ0UxNkY4RjMxREE4OQotOjEwRkMzMDAwMzM4OTQ1MjM3QkQ0QUI3RTBERjYyRkFFNzMwRkYwMUZCNwotOjEwRkM0MDAwMkM0MzYwMDc2M0Y5MTJEOEVENThCRTBDNzYzQkM2MEQwNQotOjEwRkM1MDAwNUU1RDk1NDdFNUVCQUJCQ0Y0RkNDRDU1QzU1NDRFQzg5NQotOjEwRkM2MDAwMEU1MzVDOTFGQ0M4RTRCRjYxMjE4NUZDNzgxMkJGNUUzNQotOjEwRkM3MDAwRUUzRjExRjFCRDg0Qjc2RkZGRDVDQzQ3MDNGREExM0QyOQotOjEwRkM4MDAwNTVGNDBGRTQ1NDIyRkU3NUQ1RDlCNTk1RDhCRjJBOURGOQotOjEwRkM5MDAwRDc5RDYzNjc1NDIyM0U0RTlBQUNBRDFCMDM3OEQyQzcwMgotOjEwRkNBMDAwRTJBQjZFQzRCRTc3QzU3OUEzRDlGNzdEQzdDQUZCNUU0OAotOjEwRkNCMDAwRDFFRDc3ODY5RjNBMzBGQTczNUE4OTRGQzRGMEU3M0MwQQotOjEwRkNDMDAwQTBGMDc1RUM3RDYxRjM0M0U4ODdFQTM1Q0JFQTQzM0M2RAotOjEwRkNEMDAwQ0UxRTY4RjRGMzdGM0U4NkQzQzVENEIxOUMyRUIzREYyRAotOjEwRkNFMDAwMDRGQUU4MDFFRTkyM0U2MkI1RDdFRjA2MTQ4ODQyNTc1NwotOjEwRkNGMDAwQjI2QzRENjRFM0U5OUU3NUE1N0Q2RUI0N0NBNjZEODIwMQotOjEwRkQwMDAwNkZDNjFDREZDNTNDNzE1NzQ0RThBRERFNjVBNkI3MzA1MQotOjEwRkQxMDAwQzU3N0NGRDU3RDY3MkZDQUNCQUY0RTZGOENFQ0MzNzA0NAotOjEwRkQyMDAwQTU0NkYyM0EwQ0Y0ODZGQzVDQURFMUY0QTY1QUY5M0QyNgotOjEwRkQzMDAwQ0JBQUZEREMzRkIyMURFOTBCQ0VEOThGRjQwNkZGOUNBOAotOjEwRkQ0MDAwMUFFMEY1MzQxM0JERDU5QkU5Q0Q2NUE0QjczMEQyMUJCRAotOjEwRkQ1MDAwOEM5NzFDRTBGQTg1QjNBMkVENkJBNUI3M0Y3RjQ1N0E3RgotOjEwRkQ2MDAwRkJDRDU1NjFDQTZCRThDOEE5Q0Q0MEY4QjQ4QUVGREE3QgotOjEwRkQ3MDAwNUQyQTFEREUzNUQ2Q0VFNUMxNzA4REZDMDIwRDM4OEVCNAotOjEwRkQ4MDAwOEJGNEY5MERGOEJEOTRBOUZENTc1QjUzMDA3RUQzNTM1NgotOjEwRkQ5MDAwRjNFOTdCMDIzOTYzRkIwQTdBMzhFMDQyN0ZDRDAyNERGQQotOjEwRkRBMDAwRkI5NEU4RUJCQTMzNzQ0RkIxOEY4NUQzNkZERkIxQUZGQgotOjEwRkRCMDAwOTEzQ0M4NkEzQzM4NkIyQUQyREQ5RDJBQzk0OUYzQkUwMgotOjEwRkRDMDAwNkUxQTJGRTI1QjBBOUYxNzRFMkU0MzFGRDc3MzA4QkE5NQotOjEwRkREMDAwRjREQzU5QUYzODUwMUZBRjY2REVEQzFDRkEzRTBDN0RGOAotOjEwRkRFMDAwQjdFNjg3MEQ3RjczRTNCODM3OEQ0RkExNzU3OTU2QkY5RQotOjEwRkRGMDAwOTNFQ0U3RkVCNTc0QjRERkU4NkE3MjQxNzc3QTg0NUYwQQotOjEwRkUwMDAwOUJBREFGODE5RTkzQzdGNkUwOUZCRDEwRkZCODRGRTg1MgotOjEwRkUxMDAwMEY3OEY0QTgzN0Y4QzUzRDRDMTkxNzg5NDlDRjI2M0YwQwotOjEwRkUyMDAwNkU0Q0ZGRTE3MDBFMUZGM0ZCNjc4NTVDQUQxN0ZFNUY0NAotOjEwRkUzMDAwQjNCRTI3RjczRkE0QzQzRjBDRjdBN0I4NUVFNTdFRTA0QQotOjEwRkU0MDAwM0RDQzgzRUI5NDcxQjNBRTNDMjNBOTFGMDY1OEIwMUU4MgotOjEwRkU1MDAwRjU2RDJCQTgzMjdEQjlCQTgxRTM3NUU1MUYwOTNERjEzNwotOjEwRkU2MDAwQzUxMkZGNjgxQzc3MUJGM0VDNDVGOUU2RjJGMjdDMDUzRQotOjEwRkU3MDAwNjc4OTU2NENGMEZDOTI3QUUwODYxMjREMUJEQjAzNUVEQwotOjEwRkU4MDAwQkQzODQ1OUIzNEI2Mjg3NjNCM0IwRkEzOEM4QUM0QjU1RQotOjEwRkU5MDAwNEE2NjU5Mzk1RkE4NTMwNDFGNzBBREI1NDNCRDM1MTk4MwotOjEwRkVBMDAwRjg5OTA3RjU3NkJFNkYzN0YwMEQwRkQ5MTk0NjNCNjIwQQotOjEwRkVCMDAwMEEzQTIzOTE2RjIwMUYyMUUwNkFEMzMxMkYzMjQ5OENGNwotOjEwRkVDMDAwMUY5MUQ3RTE1NzUwMkYwRDAzNkMzNzQxNTM1MjgwQ0IxMAotOjEwRkVEMDAwRUJGQUZEOUNBRkQ4ODFBRjUwNUNCQTk4REIwOUYyOUU3QgotOjEwRkVFMDAwOEY3Mzk4OTdFQzJGNTVFQkQ5N0VCMDlBRUNGQjI1NjM3NgotOjEwRkVGMDAwMDUxRjI5NjAyMzExNkVEOTE2Q0ZGRDYzRTA3OUUxODNEOAotOjEwRkYwMDAwOTMwRjhEODFDNzQ1MEYyRkVFOERFMjc0RjRCNkM2MzI4NAotOjEwRkYxMDAwRkM2RUQ3NEQ4RjlGREM4NjdFRDIzMUZGMTVDN0M0RjdBQwotOjEwRkYyMDAwRDEyOENGRTA1RjI4NjdFODVDQjZFRDc5QjcyMjYwNDU1RAotOjEwRkYzMDAwN0UxNTFEOEYwQkFGRTI3ODJDRTNBQzNERTA3MTIzRTEyMQotOjEwRkY0MDAwQjE4ODczNUUwMjFFQkIyRTgwQzdDRDg4NEY1MUYwNzhGQQotOjEwRkY1MDAwRTM1N0M0RTMwNzcxNUMwRDBGMDFFMzQ2NTNCNDFGRjU4QgotOjEwRkY2MDAwODRCNzVCMjc2QjhGRjZENEFFOEIxRkYwRkMyMTU2NDMxMgotOjEwRkY3MDAwRjZCMzhDNUY5QUQ3RDM4OEYyMzVCNzA3QkZENEJBRUQwMgotOjEwRkY4MDAwRjE2OENGRDZENzZDN0YwM0JGREY1ODVGQzdFREVDOEUyQgotOjEwRkY5MDAwNDRBRjAzRjM4RDAzQkY1N0U5QkI1NEIxREU0N0JCM0IwRQotOjEwRkZBMDAwMDBDQzcyRTg1NTNDMEY3QURGOUQ3MUExMDkzMDRFQTY1NgotOjEwRkZCMDAwOEJDQkRCNEM5N0M2MzBFRkRCRUEwRURCRkM4OUE4QUZCRQotOjEwRkZDMDAwRjkxOERBMTlGNjU0MEIwQkU4RkMzMTU3RDgwRTkwNUM4RgotOjEwRkZEMDAwRUUwMDM5OEVGNDAxRjRDOUU5MkQ5OThGMjNFNUYzODRGRAotOjEwRkZFMDAwM0JFRkM3NDgwRUJCQUExM0U0QTA4RTRFREVEODVENEM5MwotOjEwRkZGMDAwN0VCOEM0QTJFNzU3RTA3QjZBQTVERDgzRjgzREUxNzNENAotOjAyMDAwMDAyMzAwMENDCi06MTAwMDAwMDA5MDlCQkE3OTRBNDAxM0QxRDdBRjc2NjQxOEM2OTlFQzYxCi06MTAwMDEwMDBDRTMxQjQ0RjRERkY4NkExRkQxQUMwMTczQkM1QjFGOUQzCi06MTAwMDIwMDAzRDNGQTlENzRDRjNFNDFCRkEyNThCMzhDNzM3RjNDNkZECi06MTAwMDMwMDAxOEM2QjNBQUU3Mzc4RDQ2RkExNzdBQzQzOEY4MEZFOTFECi06MTAwMDQwMDA1RjM1RTkwQjY2N0RDMkFDM0Y5QzFDNkJCQ0JGMzJDMjA2Ci06MTAwMDUwMDAyQUYyRDBBQzNDM0ZBMjk1MzlFOEZCMTJDMDA3RTlGQjdECi06MTAwMDYwMDAwNTU1OTEzQzAxQTI5MzExRjZGMEY2N0JEMEFGMzJDRjRCCi06MTAwMDcwMDBFMTBEQzBCMzg2REREN0E0NTc4RjhDRjhDRjVBRUJCODBCCi06MTAwMDgwMDBERkFGQkVEREIxMERFOTYxQUJBMDRCNDk1RkMzMTI4RjlECi06MTAwMDkwMDBDRDYzMjREN0VEMENFNUIxOTk1RTY1QkU5M0Y0MTc0OEE2Ci06MTAwMEEwMDA3RjgyNTJDM0ZEMENBREUzNzM3OERFOTFFMDNGQUQxNTY2Ci06MTAwMEIwMDBEQ0ZFRkQ5MTEyOEE1NzA2NzFCQUY0QTQ0NEJFMzM5NzUwCi06MTAwMEMwMDBDRTk0QzAzNDRFREY1QThBMjg1NTkxOEYyQUYzNUU3MTQwCi06MTAwMEQwMDAxQ0I0QjNEM0Y5N0NFQzc1OUUzN0I5RkE3QkY4QkU5QkEwCi06MTAwMEUwMDAwNUZBMEI3RjQ2NTY0QUM0NEY4MUY5MDlDQkY4N0I4MTRDCi06MTAwMEYwMDA2OUUyQkQwMTIyREZCMjE3NUY3RjY4QjI5ODZGMDQ5NDk2Ci06MTAwMTAwMDA2QUFEMjZGQ0QzN0UyQUUzMzAxRTBFRTU0MEM1OUI4MEY3Ci06MTAwMTEwMDBGRThGNDFBQThGMDIyRDQ5MjJCRTlFMjlFMkU5NEUyNTdCCi06MTAwMTIwMDBDNDk5Qzc5N0U0MjM1NzAwMUJDNUJDMDQ5NkMyQkYxM0VDCi06MTAwMTMwMDAzMkYxQTcyRUE2MTI3REQ4QjdBMzNDQkFGQkE4Rjc3NzU5Ci06MTAwMTQwMDA5OEFBREI5MEY4RERCNzI2QzBGM0E2REZBQjVFRjQ5Mzg4Ci06MTAwMTUwMDBERTlEMTU3ODBGRTlEQTBBQzgxMDIwQkY5NkFGMUFDRkQ2Ci06MTAwMTYwMDA0RDlERTM3MDRGODVGN0Q0QzBCNkQ1MThERkJEQzIxRUQ0Ci06MTAwMTcwMDBEQzRCRTdCOTI2OEVFODNEMENFRjIxM0U2QzREMDQzQThFCi06MTAwMTgwMDA0NTdDNDU0RkQ3QTg0ODNFOTA4QzYzODRDNzc4MUQyODhFCi06MTAwMTkwMDA0N0MzRDg4RkZCOUIwREZFQ0YyOEY5MjZFNDJGQjU4QUU1Ci06MTAwMUEwMDA3QTgzNkIzQkU5RUY2QjUzRURGOEU1NENDQ0VGQzlBRUNFCi06MTAwMUIwMDA0M0JDRUM5M0MwRUZEMzMyMUUzNzE4ODBGRjE4QTRFMzgyCi06MTAwMUMwMDA1QkVFRTg3RTRERDBENzA4MEVFMUQ1NEJEMzdCRDJCQjlBCi06MTAwMUQwMDA2MkM2NTE1Qzk2OTAzREU5RTJFMzI4OEQzNzVGMTcwQ0NCCi06MTAwMUUwMDBFOUQ2MjlGN0JERDZCNTVENTlDMDJFNjU3RTY2OENBM0NDCi06MTAwMUYwMDBENDMwMkQ3RTQ0OTQzODRBMzhBOEUwM0EwN0Q0RjAzOEY5Ci06MTAwMjAwMDBDQjAwRTFBRkZGQjI3MTE0NzVGQzk3OEJBM0M4RkRDRTk0Ci06MTAwMjEwMDAxMEZGOUUwRTg4MkRFRTBENTMzQzgxQ0VDQjEyNTk5RkMwCi06MTAwMjIwMDAwRTdFOEYxMTNGMjJEQzEwMjgwMkY1NkI0NUZEQUQ1RDdGCi06MTAwMjMwMDAwNzNGN0ExMkZFQjk3RkU3NEJCQkIwOTQ3QURDMkNEMTMyCi06MTAwMjQwMDAzRTczQzg2NzdCMzA3NzZCRDZCQTE1MjI4RTY1OEMzRkJDCi06MTAwMjUwMDBDQzAwQUI0RUVGRTdDN0ZCRkZGQUZBMkNEMzdBMjY1QTU1Ci06MTAwMjYwMDA4RDcxODI0OTJFNjNGRjI5QTlDNkY2RDJGRTcxRERDRUJCCi06MTAwMjcwMDAwREZERjJCNDVGQTVGQjdFRUY3NkRFQzdGODc3QTM3NEMxCi06MTAwMjgwMDBFN0EwNUVCOEVFQzBCQzM5OENGQjc4QkFFMzg5M0UwRUJECi06MTAwMjkwMDBFMDdCRDFDQTUyNDYyMkJFNTg0ODJGREQxQTU4QkFCOTVGCi06MTAwMkEwMDAxQ0U4NjcyREM4NTFDRThCM0QwNkZBOEJDNDNENEEzNUZDCi06MTAwMkIwMDBDNDI3RTlFRjhGNDU0RkM3NUMwM0M5RkYzRkEwNkU2RkFFCi06MTAwMkMwMDBEQkE0REVBQzJCMEVEMDk0RTBGRkM1OTU4MDM3MDM1QzM5Ci06MTAwMkQwMDA2NzE1RDQ0MzA2RDRCRDRDRUREN0NEMkJFQTExOEY3MkYwCi06MTAwMkUwMDBFQkY2QjU0REQyN0QwRjMwRDdFQUIzQTBGRDlDNUJGNzlFCi06MTAwMkYwMDAyQTNEOEZBOUNGNzdFNzIzOTRCNzk2MkJGMDQyRTYwNUU2Ci06MTAwMzAwMDA2RUM1QkM0MDgwN0I2RThERjhDRTZGNEJDRkY5NkY1MkJGCi06MTAwMzEwMDAxRTM2RThGMkZCMjg5OUMxQTMzMEZERjg1MkVFNzVGM0MyCi06MTAwMzIwMDBBNzMzRUVGNzk1RjM3NUU1MDU5QUU2RUQ5MjdGNkUyRTBECi06MTAwMzMwMDBGRjlDMjVGRTBFODQ1RkQ3QkQwQzcxOEYwM0Y2MUQzNTIzCi06MTAwMzQwMDAwRkY0RTQ5NTIyREUxNDNCOEY4RERCOUQ3MzVFN0YwRkVGCi06MTAwMzUwMDBDN0JGNjRCQjMzQzZCODEzQjJDMzk1RDFFRTQ3RkQ0RERBCi06MTAwMzYwMDBGOEFEM0FFMkMzNTlFODM3RThCMDQ1RDdFQjNGOUUzNEUxCi06MTAwMzcwMDBFNTFGNTdGNjYwQzc2MURFMkNDMjMyRDYzQUJGNkNERThECi06MTAwMzgwMDA2Q0Y2MTgwRTJGMTk2Rjk1RjlCMzMyMkZGNjQyRjlCM0E4Ci06MTAwMzkwMDA1RkQ1MEYzRjQ0RjgwMzNBQUY2NERDQ0Y2RjhBNDM5OEQwCi06MTAwM0EwMDBENzlCMzNBRTJCRkVFMDE5RDc0M0ZDNDFGNjdGMkZDMzFBCi06MTAwM0IwMDAxRUQ1MkY1RTNGNUVFMDQ5RjdGQjQ3OTQxRjBBRUI0REM5Ci06MTAwM0MwMDBENURCNDFGMjNEOTk5NzZGMUUwRkVDQTJDMjcxM0E3RkM3Ci06MTAwM0QwMDBBMDdGNzUyRUY5RkI3NEY2OTZDQzg3MjVGQTY4MTU3RUZBCi06MTAwM0UwMDA4ODJFM0EzMEVCODUyMjFFNjJENjBCNjU3QzQ0QTlFMDRDCi06MTAwM0YwMDBGRTA5QTA4Rjg5RTNGQTcwQkQwQkYzRDJBNTlEMjdGMzA4Ci06MTAwNDAwMDA0OTY1REUyOEU2ODU1MjNDRUE0QkVBNTU1RkJCM0RCNUJGCi06MTAwNDEwMDA3QTMyRTU3NUQ1QkIyN0JFRkU1NUVDQTlFNUUzOERGNjJFCi06MTAwNDIwMDA5NERGQzVGRDBFN0VCNEE3ODY3N0I3QTc5QTRBRkMzNzNFCi06MTAwNDMwMDBFMTM5OTlFREFBMjMzRkY4OTBGMjYzQzEwRUJEOTlGMDFFCi06MTAwNDQwMDBFQUFCRjIwOTkzN0ZDQTMxODZFM0I3OTREM0QyOUZCNjYxCi06MTAwNDUwMDA3N0IwQzVFMDc3OURBMkFFREM0QkY5RTIzNURDREY5MkU4Ci06MTAwNDYwMDBBOUI1OTE5RDY2NzdEOTNERTg2RkIxNEVFMjc0NjQxQkUyCi06MTAwNDcwMDBDNjgyMUE4RkYzOTI3RjQ1RTY5NUE1QjhCODNENjVGNjFBCi06MTAwNDgwMDBDQjQ4M0IzMTJDRURDNDAwRkZBRTRBQzc3RTFFQjc3NThBCi06MTAwNDkwMDBBMkJGMDUzQjk2NzJCOTI2RkQyREI2NTRFMTZGMzFFNTNBCi06MTAwNEEwMDA2MzNCNERGRTE1QjNCRkE1NjU5Q0IwQkI4NEJGRTUxMTkyCi06MTAwNEIwMDBDNTczMEY5MkZBNzM1QjI2RkYxNjQxRjFGMzg3MTYzQjYzCi06MTAwNEMwMDBEMUQ0RkY2NUIwRjE5QkMyREZGMkEwMEJENkI3RkIzREU0Ci06MTAwNEQwMDBBM0JGQzUxQ0ZGOEExMkY3MjJFN0Q1OUJFM0I2NTNEQzA2Ci06MTAwNEUwMDA0REMyNTdEMkFERjQ2NzY1RDZGMUVGMDI0QzUxNzcyOTcyCi06MTAwNEYwMDBDODVGNUE1RDFDQkUyQUZBQjM1MjIzRkUyQ0U1OTk4RkMxCi06MTAwNTAwMDBCQUZDNTI5ODFGRDczRDRFNUVGQjA2QUVEMzBBMEM2NzZECi06MTAwNTEwMDA3RDM0RkY5NjgwQUIzOTFFOTU1NEM3RkRFMzVGOTczRjRFCi06MTAwNTIwMDAyQjM0Q0VFOENGMkE3OEIwRjA3RUZDM0VGMUM4ODdDQkUyCi06MTAwNTMwMDAwRTYxMzk2QURCNzc3QURGMDA2NUYxRTNGNzk3NjFGOURECi06MTAwNTQwMDBGNzM3QzIzOUE4Nzc5QUZENThDRkUwQzc4Q0ZCNzQ4NzdDCi06MTAwNTUwMDBBRjE5OEUxMjRGRkQzNTEyNEY1RDc2QTJEQjBBMEU0N0EyCi06MTAwNTYwMDAzMzlDRDIzNDhFQTdCOTgwQTdBMDIyNzRFMTVGNDczMkIyCi06MTAwNTcwMDBBN0NGQ0M0OURFRDdEMUJGMzY2MDk4OTU0NUMzNjM2QjEyCi06MTAwNTgwMDAxREJGMEYyREUxQjg1NUMwMzFBNTY2MDlGOTA5Q0Q3ODE5Ci06MTAwNTkwMDAzQUEwRTVEMkYwRjM4QzA5N0UzRkRCNTI3ODBGQzJFRDMyCi06MTAwNUEwMDBGOTg3Q0E3RThCRTUyRjgyREY3MTIyRENEQTFGQkJGRjYxCi06MTAwNUIwMDA5QjAyN0UxOUY0NUQ1QzEzRkMyNkM1ODBERjA0MkZCNzE3Ci06MTAwNUMwMDBBRjI3NEZGNEZGMURGOUYzMzVDMDIxRDAxRkIyQkRBOUVECi06MTAwNUQwMDBDMDYxOEMwMzE5Rjk2OURBRDdFNDlGMEE3N0YxNTNGNjAxCi06MTAwNUUwMDA3NkVFMjVGMEQzMkQyNkZGNTQ1QTgwRDM0RDVBRTAyOEJECi06MTAwNUYwMDBEMTY3MjZEMDY3M0NGQUFCNkFCODFFMDk2MjNGRTg1NDVGCi06MTAwNjAwMDBEMEU2RTZGQzU1Q0EzNTY0MzkxNjEwM0U1QkREM0NFRTlCCi06MTAwNjEwMDAxQ0M1NEYxOUEyRUZGNjlBRjgzMDNBNzBGNDc4MDc3MkI5Ci06MTAwNjIwMDAzNUZCQUEzRTExNzlCN0I1ODZDN0QxNUU5QkU0RjNFMEVFCi06MTAwNjMwMDA3MzE5NTc3Mzk2NjgzOTU3N0QzNUZGRTMzN0FFRDJGOTkyCi06MTAwNjQwMDAxRjAxNEY2OUZGMkFFMDNCN0VBN0ZDNkE5MDI3NjhGRkU1Ci06MTAwNjUwMDA1QjZCQzIzNjk0MkI1NTc1QjcyQTdFMjg1RjFDQ0JDRkI3Ci06MTAwNjYwMDAzRjJERERDRjMwQ0VEQURENUYxNzRFNDRCRDdEQzJFMEQ5Ci06MTAwNjcwMDAyRTdDMjhCRTRBODcwRjU3REM3OUVFN0VGNDczQzVDMjA0Ci06MTAwNjgwMDA4N0NDMThGOTRBMTdDNjg3ODkwNkY5REFEQTg1MEZCNUQzCi06MTAwNjkwMDBFQjJFNEJCRDc4N0M2ODQ3N0NFOEEzQzMwNzQxRkY2OTFDCi06MTAwNkEwMDAzNUUxMDc5MTdFQUQwMjFGQUM2RUUwNjMwMDBGMTVGMURFCi06MTAwNkIwMDA2MDU4MjRFRTI5RTkyMTJDRjIwRkNDRjAwOTA3MDZDNTc5Ci06MTAwNkMwMDBDODQzNThBMTE0RjdCMEJFOEJDRTNGMTBGMUQwN0ExMUI5Ci06MTAwNkQwMDAwRkY1RDdGMTdDRDk4RTNCRTNBNjE4RjMwRkJDQjRFRTJGCi06MTAwNkUwMDBBOUFFNUE0NTlGQzcxRjI1NEZCNjE2Q0Y0RkM2Mzk2NUNECi06MTAwNkYwMDA1QzczRjI0NERGMEFDNDlGMDk3OUZDOUNDM0IxRTM0Q0VDCi06MTAwNzAwMDAyMUJDREYwQUU4RTczNkUxRjlGNzA4Q0ZFNUZEMDNBMUYwCi06MTAwNzEwMDBDN0JEMzY0OTVCODlFMzhFQjAwNzI5Q0YxOUY0QkRENTMzCi06MTAwNzIwMDA1OERGQkFGQjQ5RkVERDVDRTE4Nzk0Nzk3OTVGRDk2RkM4Ci06MTAwNzMwMDA5NjY0MEZFMjdENDlFOTM3NkI0REI0NkZDN0YzQUU2NjNGCi06MTAwNzQwMDBFMUM5RjRCRDVFOEM1M0EwREZFOURFMzhDQTZCNUNBODVBCi06MTAwNzUwMDA4MEUxMERFRjdGN0JBMjdGMzNEMTFGRjM1MTNFQUU3RjRGCi06MTAwNzYwMDA4RUMzOEQ3QTdFNDNGMjk0NzRFNDFCNTU2QjU1OTJFQkU1Ci06MTAwNzcwMDBCMUVDMUI0OTZGNTVDMDZGODhERUVBMzhCRjQ5MDNGQ0Y2Ci06MTAwNzgwMDAyMjdDMEIyOEM0NkYzMjgxREY3MEZFQTMzMUQ0RUJBQzI2Ci06MTAwNzkwMDA0ODc3QUVFRUZDQTZCNTA3Rjg1RjI0REY3OTBBRTExQ0M2Ci06MTAwN0EwMDA4NUVGM0M4M0NGNzU3Q0E3MERFQjVGMTZFRTc5NTcxOTZCCi06MTAwN0IwMDBGOTBEQzYwMzY4RkY0ODVGRkFGRDlCRjVEOUFFN0QxQkI2Ci06MTAwN0MwMDBFOTRCRDJERDdGMDA5REZEMTlFMTFBODVDRThFMjA5RTdBCi06MTAwN0QwMDA3RDA1M0EzQjEzODNDRURFMzdEMUQ5NUZGRjRERTlDQzlGCi06MTAwN0UwMDAzMkJFRThDMjc0QjY1OUUwOTVDQ0RGOTY3QUM1NTBCNUYyCi06MTAwN0YwMDBFRDZDMkVDRUZGQkY5Q0JGRkQxRDkxNUY3N0ExRkM2RDAwCi06MTAwODAwMDBGQzVEOENGRkQ0OUNDRkZERkZGREE5RkZCMUZFNTRGRjIyCi06MTAwODEwMDBGODNFNUZERDlGRkFFQjJCM0RBNEU3OUFGREFBMEY4RTExCi06MTAwODIwMDBENjZFMUVERjgzMUY0RUYyNjlBQkU0RDNDMDhGOTFGNzAzCi06MTAwODMwMDA1NjAxM0Y0M0ZFOUM1NkQxRjk5NzVGNzI3QkQzRUJGNDkwCi06MTAwODQwMDA5MEJGRTEwRTFDMkY1M0YwNkIzMzVGMDZCREIzNkVGQ0ZGCi06MTAwODUwMDBEN0UxOTc4Q0UxNkZGODU3RjkwRDg3ODhCQ0QyMEJERDkzCi06MTAwODYwMDBCNzFGMzJDRTIzRkNBRUQxRUZEREQ3MEJGQkJFMUVDNkM5Ci06MTAwODcwMDBDMDdCN0E1QkVGQjQwNzFCNjBDMUZGMUNDQkNGNjc0NDIyCi06MTAwODgwMDBDRDc1RDcyMDkxRkRFRTI2N0I0MkI4MDdCQjQ5RkUzREQyCi06MTAwODkwMDA4OEU2NTVGRTE3NEVFNEVBRjdDN0EyQ0FBREFFRkQ5OTQ5Ci06MTAwOEEwMDBGNDY0QkREREU0QjkwNEJCRTlGRjhFMzdFQUM5RDYxQUFBCi06MTAwOEIwMDA2RUU3NUE0MURFNTE1QzVGMkIwRTIxQkZDRTBDMjg2REQ2Ci06MTAwOEMwMDA5ODFBRUM0RkFENTU1MDBFQTZENUY4MjgxRkZFNTJFM0VFCi06MTAwOEQwMDBGQTY2M0M4QTE1RTdGRkJBRTNGQUU2QkM4MTdGOTczOEVGCi06MTAwOEUwMDBGRkIxRjFEMUUzRkNEMkZGNkE4RUNCOEZCMDM3OTc5Mjg0Ci06MTAwOEYwMDA3Q0FEQjRFMDVGQjI2MDBEQkIzRkQ4N0UwRjlFRjczQzhECi06MTAwOTAwMDAwN0RERDMzMEU3MDNDNDhBREI4RjQ4QjE4NzlEMDM2M0RCCi06MTAwOTEwMDBDN0VGQTVCRkUwMTE1QkVEMUI2ODg3M0ZCMkRBNDJFNzg2Ci06MTAwOTIwMDA2QkNFMUIxODk2QzhGM0M3NUJDN0FGN0E5OEYyN0ZBNDRCCi06MTAwOTMwMDAzRTVDMjFGODRDOUQ2MjQ3RkNGNzU3MDQ4OUNGRjhCNTFGCi06MTAwOTQwMDA5REFCMzE5RTlDRTY2MjZEQTg2N0I1OEZFN0Y0QTJBNkM5Ci06MTAwOTUwMDA2QkM0NjdBQzE1N0VDMjJCMTk5RkE4Q0FFNkY3RTZFMjA2Ci06MTAwOTYwMDAwNTdFQTk4MzZCREZDMkYxOTMwRkE4NUU4QzZGREY4QkNFCi06MTAwOTcwMDA1RDgxNjcyNEEyQUM0NDNENjI4Qzg1RjIyMjVBOTQ1QTcwCi06MTAwOTgwMDBGMjdCMzQyQjFFRkEzQjFFQzlDM0RDQTQxRjNEOURFQzM5Ci06MTAwOTkwMDBGREMzNUNDQTBGRTU3RjZGNjRERkI0RUZBNkUzRkFFRTM4Ci06MTAwOUEwMDA1RUJEM0ExREY1QzA4QzA5M0MxRjcxRDNCNDUzOTUwODQ4Ci06MTAwOUIwMDA2NzVCMUVFODdGMEE5NTg2QkY0QjJCQ0I4RjI2RjAzOEVFCi06MTAwOUMwMDAwOUYwMDVDQTQ3ODQ3NTZGQTFGOEZCNjAzQkY5RDk1NDVCCi06MTAwOUQwMDBFRDgxRUYyMDFGNTAyRjlCNDI3OEREQUNCOEU3MkRDMDkyCi06MTAwOUUwMDBGM0NBQjU5MzFFRDM5MDNCNkFFRTIyRDhEN0JBM0VGRTI3Ci06MTAwOUYwMDBBNjFDM0NEN0U0QzFCNENGODZFNEJFNDlBODhGQUVDQkQ5Ci06MTAwQTAwMDAxQTQ4RkE2NzkzNTI0QkVEODEyQzBCQkRBNzhBRjhGQzZDCi06MTAwQTEwMDBCQURDRUZCRUJFMThGRDU5RDlGQ0ZFNjc0QkVFQTlENzc0Ci06MTAwQTIwMDBCMTVGQ0IxOEZFQzc2Q0NDRUI1NUREQzY3QjUyRjhFMTRECi06MTAwQTMwMDAyM0U0REY2QTdGMEJERDJGNTQ0NTVDNUMzNUM1OTUzN0I5Ci06MTAwQTQwMDBDODdEOEFGQjJCRjE4MjZGNTVFNUFFOTk0QkRGNEY0ODhECi06MTAwQTUwMDBCNUJCMTFDOTFBMTNDM0U1NTg2RkJDRDNDNjMwNEVDNzE2Ci06MTAwQTYwMDBBQ0NEMDYzREFEN0U5NTMxMEU2MTc1MTlEN0QzRDQ3NUU5Ci06MTAwQTcwMDAzRkUxRDVGOUM4NjcxQTE1NTEwRkZDODJEN0IxOUQ5Mjk1Ci06MTAwQTgwMDBGRURBRTYyM0JFMzRDNkYzRkEzNUJGNzk3MjNFQzUxMUVECi06MTAwQTkwMDBDNUZBNkM3MjdEN0RGOERGNUJGOTc0MzBBM0ZCNkQ1NTkwCi06MTAwQUEwMDBCNjcwRDRFRjBCNUY2ODVERERDN0REQTQ4OTcxRDlGRjM3Ci06MTAwQUIwMDBFNkI4NERCOTNDNEU2NDFFNTdGNjMzOUY5QjZFMUVBNjlBCi06MTAwQUMwMDA1Q0QyM0NBN0NBMDlGRjBFQUIwQ0Y5OEM3OTNFRjNGQjU0Ci06MTAwQUQwMDBGMkJEQUEzRUIzNDlERUZEQUJGQUM3ODJFQkYyMDk1RDc3Ci06MTAwQUUwMDA3RkRGODU3NUM1MkRDNDNEM0I4RjJFM0U1NjNGNjUxNDc3Ci06MTAwQUYwMDBERDhCNkQ1NTZBODk2RTAyQzk5NkE4RjlCRkIxRTk0N0M5Ci06MTAwQjAwMDAzNzNFMEY4RTEwQkZCNTcyODgzM0I1MkU5RUYyMzgyNDUzCi06MTAwQjEwMDAzREM5M0MwRjZCQkE4NTlFMzMzMTFFRjBFMTU3NDkxRjJBCi06MTAwQjIwMDBEMkJBQ0U4QkI5RkI0NkM2NTUyQkVDRDRERjdDOEZEODFFCi06MTAwQjMwMDA0Q0E3MzIzRjg0REVDQjg5QjQ1QkM1QkNFNkZDMTA5NzgyCi06MTAwQjQwMDBDNkJGQjdEMjVBRjkwMEY5RjMyRjM1NEZFNDM4RDIyNzkwCi06MTAwQjUwMDBDMThEOTE1REQ4RjA1RkNEOTQyRkM1REFGOUYzODY3QzE1Ci06MTAwQjYwMDAzNzdERTc3MEJERUM5N0M4MjhCRjQ5OUU4MzUzOUMwMzJGCi06MTAwQjcwMDAxMzc2OTFDQ0JCODk5Njk3ODNGNjVDQkE4NEI5ODcwREJFCi06MTAwQjgwMDBDNjdEMzZDQUY3M0QzRTBERjlFNTNENTc4Q0M4QzdFRjI3Ci06MTAwQjkwMDA3NzNFQjg3M0QzMTM2ODBGNkREOUI1RTY3RDJDRTM4NzI0Ci06MTAwQkEwMDA4REEwRUZBNzI2NzgyRDVFQkM5RkU1QkFCMUJEMUQzOTlCCi06MTAwQkIwMDBFNERBNjE4QjlCRTkzOEY1RTc0QUY3NTMxNUNEMERGRDczCi06MTAwQkMwMDAxRDJFRDc3NkU0QkZDQ0ExRDA3N0FGRDQxRkE2MDVEMTE4Ci06MTAwQkQwMDA2RTRENUY2NEM0ODM1NkM1REIxN0ZGM0U2NjYwQTM0MjVCCi06MTAwQkUwMDA3QTE3N0U2RjQwREY2RUY3MThFQkM3MjYyODQyQkYzNEI2Ci06MTAwQkYwMDBEQTMxQ0QzMUVFNzUwREQ1QjhERUFBOUFFRUI1NkVCMjBBCi06MTAwQzAwMDA3OUU4RkJCOTlCRDZBOUE0MEY2QzEyNzFBNUYxREFEREM2Ci06MTAwQzEwMDBGMzU3MDM2RERGREVDOEZGOUU3MDZCODkzRDg4Rjc1Mzg1Ci06MTAwQzIwMDA1QjEzREREN0NEQzVCQTkwN0YzMkJFRERGQzhEQ0I4MkE0Ci06MTAwQzMwMDBGQUJGRkI5NDM5QzE0Mzc4QjhCMUE0NkYwNkUzNzFGMEYxCi06MTAwQzQwMDAwQ0RGRjBEODc4RjE2NUNCRkYwMTMyREVGRTU5MDA4MDcxCi06MTAwQzUwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDAwMDBCQzU1QkI3Ci06MTAwQzYwMDAwRjcwMUNFNTc1N0Y3QkJCQjc3NzkyNEVBN0JERDNDOUNDCi06MTAwQzcwMDA5QzhDNkM1NkI2MTQ2NDkwRTVCNTZDOTk1M0IwQTNCRENBCi06MTAwQzgwMDBEM0JGOTM3MUU5QzVGQzMzMzNCNjdCQzZDNjIxNEQyNjZECi06MTAwQzkwMDAxMTRFNDk0QzQyQUEzMzNBNTlGMjFGODRBQzI0OTUzMzgxCi06MTAwQ0EwMDA2RDlBQjMwOTk5Q0M4NDAxMjU5REI2ODYwMDczMDI0QURBCi06MTAwQ0IwMDAyODgxNDQ0OTI5OTA2OTA2ODQwOTZFNDgzMzEzQTdDMUU1Ci06MTAwQ0MwMDA4OUQyQTFBNUVGQkQ2RjU3NzdCQjNBNTlCNkUzNEVDRjk2Ci06MTAwQ0QwMDAyMzdGRjdFRDdFN0ZERkJGRUZGN0RFRkI2RThEREFGRjYwCi06MTAwQ0UwMDA3MkRCN0EwMDc4NTUzNjFFRDZCMTA0MTU0QzNGRjBFNzFBCi06MTAwQ0YwMDAwMzE5RkZEM0YwNkYwOTAwN0Q4NTdBMkFDNTdCMDUyMDkzCi06MTAwRDAwMDBGRjgxMDQ3MEY1NzExNUYyNzY3QkZDRkI2RTQ3MThBMDJECi06MTAwRDEwMDA4RDZBNjM5MDVBOERDNUU0OEQxRUQ4MDBFMEI3REE1QzA5Ci06MTAwRDIwMDAyMzRGQjZBRUEwRjk1RTkzRTE2MTdFRDIwRkE5NEFFQ0UzCi06MTAwRDMwMDA0QjlGOEU0MjM5MzQ4MDEzNUMyREZBMjg0QjY4NTVGODRFCi06MTAwRDQwMDA1OTAxNzAzMEIyRjU0NzM0QkNCQkJENURBQUI5NjlCMzc3Ci06MTAwRDUwMDBCRTg1RTY4MUZFQzk2NjgwNTU1MUU3RkFFQzc2QTczQTcyCi06MTAwRDYwMDA3MEYxMzUwMEJFMUNFNEJENDEyQUYzMjZCNDUwMzk2RDQ0Ci06MTAwRDcwMDA0QTU4OUVEQkZFMTk2REIzQkVGMDNDM0UyODFBQjc5RTYyCi06MTAwRDgwMDBDNjAzREVCNzVDNEMzRjdDRUU4NTM0MTNFRkZFOEE5NkRCCi06MTAwRDkwMDBEQjAxRjczRDc0ODMwQUIyNTQ4MkNFOEJENDU1MjUzRkQ0Ci06MTAwREEwMDAyNUUxM0FDN0VGQkRGQTQ2ODgwMDY0MEVDOUQwODhFMzUyCi06MTAwREIwMDA3OEEzNDVFREYwMkZGNUQ0N0E5ODA5ODg3NTY0Rjg3OTExCi06MTAwREMwMDBEMjI0M0UwNTNCQkNCQzVGRkFGODk3MzBGRjAwODhERkI5Ci06MTAwREQwMDBGQTgxNzc2NDFDRUY0QjQ5NTUzRjhDRUJGRDUyNkFFRjZCCi06MTAwREUwMDA1NzZFQzE3QUY2MjVEOTkwRjgzREZFODdGQ0JCQzc5QUFECi06MTAwREYwMDAwM0M2MjY1ODFFQUFGQ0EyRkZGRTUzRjdCREY5MjJGMTM2Ci06MTAwRTAwMDAyOEE5QkU0NTc0MDNBRDg4MkUyQkI4MzBGRDFCMEFGMzBDCi06MTAwRTEwMDAzRDE4M0IzREIyMTJFOTkwMUQyOTNERkUxREQ1RkFBN0I0Ci06MTAwRTIwMDA4ODVFMzY5RDE3MUFENzdFMkZFRjlGOUFFQzVBNTdBOEU3Ci06MTAwRTMwMDA4Rjk0QTc3Nzk4Qzg4N0QxODAwMTQwNzREOEZGMUNCRkQyCi06MTAwRTQwMDA4N0Y1Mjg5N0I1MEJGMzEzMjlDQUY0Nzk5M0JFNjJCQkQzCi06MTAwRTUwMDBBRjc1OUE3QjRDQUNDQkE3NzBFOTZCMDBERUFFRDQ2RjVDCi06MTAwRTYwMDBEQzhBQUZCQTIzNkZFRDIwRkFFRjA5NzgzNEUyQTNERDE0Ci06MTAwRTcwMDA3RkYwQTgxN0YyMDEyMjA0Q0U4QjcyQjcwNTY2NzY2QzVDCi06MTAwRTgwMDBDNTc2RDBFMDY1Mzk5NzIzNkJGOUY5RUVDQTk0RTJDMUQzCi06MTAwRTkwMDBGMkYzRTYwQTk2MTdCQjdGMUY3QzU5RDk4N0NGRDc3ODI0Ci06MTAwRUEwMDBCNTU3NDk0RUIyMTE4OTU2ODRDRjkxODBCOEY0Q0QwQTE2Ci06MTAwRUIwMDA5ODQxMkM3QkY1QjhCRjFFQzc0RDNFNDkxMzAxNzQ4NDgxCi06MTAwRUMwMDBDNjIzRTAwMTY4NzlFMjc4NURCQTk5QjY2MTRFMzcyMUIwCi06MTAwRUQwMDA3RjQyMTZCQkFFRjU0REE3M0E3MUJDQzE5NzY1RTM3RTY0Ci06MTAwRUUwMDBBQzg3MDI3QkI3MDBDQTkxRjQxODJFOTY5RTg3MjBFNzQ0Ci06MTAwRUYwMDA0M0JFMkI4MTlFNzdFOUY5QTZCMzAwNUQ0NUYyRDQzMTVDCi06MTAwRjAwMDBFQjg3QUVBNjQyM0Q4RTIzMTdENzNCRkRCNThFRjZEREFGCi06MTAwRjEwMDA1QUJERTNCRDBDQTY5MTQ3M0FGNTQ2NTczOURBNTVCNkE2Ci06MTAwRjIwMDBBREQ3NjhCRDdERkE1QUM3RjMxQjlBREExREZEQTE0QkY4Ci06MTAwRjMwMDAzOTNEODNGNThERjg4RkY4MkU4M0E4RjM3QjVDNzdBMDdECi06MTAwRjQwMDAxOUVCNDVGRDE1MjhBQUUzRkJCRjM1MkIyMzY3QUVDNTdBCi06MTAwRjUwMDBDQTc1NzAxREU5MTFGMkU1RTQxMUIyM0ZEQkZDMDZGMTQwCi06MTAwRjYwMDA2NUQwMEJBN0E0MkEyMEQ1Q0Y0MDJCMTFEQkQ0MjM0ODcyCi06MTAwRjcwMDAzRkM5OTJENzU3Q0M3QTk2MEIyOUYwRkMxRjU4MEU5Rjg5Ci06MTAwRjgwMDA5Q0YxNDhDNEQ3MjdBMEY1MzAzNkZBMUI0RDlGRjI2MDdDCi06MTAwRjkwMDA5MzJCNjk0OEVDMUY0NTQxRDc5MTRGMEQzODVFNTkyQjczCi06MTAwRkEwMDAzRjM3NTc2MjNEMEE1MkE2MEZFQkNCQjA1RDU0ODgyMjAzCi06MTAwRkIwMDBCQzQwRURGQzcwRTAwQkEyMUQyQ0EzNzYxQTY0RUFCMEQ1Ci06MTAwRkMwMDBBRTE5NTA0RTdDQURDMzcxM0UxOUU2N0U5OTNFQUJERjQzCi06MTAwRkQwMDA1NUEyNUZBNjJBMkNDNjZGQTE3OUQxNUM3NjYzNzkwMkVGCi06MTAwRkUwMDAwQ0YwQzk0NDg3MTRDMDRBQjIyMkZENUM1RTQ1QUJDMjE2Ci06MTAwRkYwMDBFNzBGODFEMTRBRjU0Njk4NjFCQjg0RUM5N0E4N0UwNTNFCi06MTAxMDAwMDA0QzZBQzJDOEU3ODVERDlFNTE0MjY3RkNDMkVFOTdEMkFBCi06MTAxMDEwMDA5NzgyREUyODcwQzZFNjA3Q0REQjYxRkU4MEY0RUZENjRFCi06MTAxMDIwMDBEQkRCQUFEMjgxODVGQjI5RkI5Rjc1RThBRDFBRDc5OTM2Ci06MTAxMDMwMDBDRUNBRkU1RUQ2MTM2NUZGRjNGQ0ZFRUE3OEVBNTUxQUM3Ci06MTAxMDQwMDA4RjQ4RUY2RjlENEZFRjE2MzUwRjY0QkZCMjcxMzAzMjhFCi06MTAxMDUwMDAzODQ0RjZGMUNERDE1REM4REZDQ0UzN0VBMzExMkUxRjVECi06MTAxMDYwMDAzRjJFOTYwRjM5RDBDQTg5QUU3MkZGQTVGMjAxM0ZCODY0Ci06MTAxMDcwMDBBRkMwMjlGRjg5QzMyQzhDMjY5RjkzN0YwNDVGRkVFN0I2Ci06MTAxMDgwMDA1MkY4RTJFNjA3REM1NzBERDBCRUI4MURGRDZCMjk1RkI0Ci06MTAxMDkwMDAyNkFENjQ3QTk4RDFENjAyRkRCMTlFNTk2NUQxMkI2Q0VDCi06MTAxMEEwMDBGMTQzMTY2NTVFQjY5RTJCRTE4NUY5NDJFMzU1ODcwQjQ5Ci06MTAxMEIwMDBGQzU5OEMyRkQxMTRCRTZGMkRGMDQ3RUUzNzk5NzhGNjdFCi06MTAxMEMwMDBCOUVDODNCMzEyOTUyQjI0ODNGOUI1NTI0RTc5QTg1RUZGCi06MTAxMEQwMDAyMUU1MkREMDkzNjMzQjFEMDQ4REY5QjMxNEZBQjk4QzJGCi06MTAxMEUwMDA3ODY3NzYxMTdGQjJGQjcxMjI5NDQ3NzgxRjRGNTlDMkZGCi06MTAxMEYwMDA0OUQ2Qjk5ODBEMjRGQ0Y1NjQ1RjlCMTRDMzgzRjVFNkNCCi06MTAxMTAwMDA0QTRGMkE4Nzc0QkM1MjgxM0NFREFGNTY4MTBDRDk3MzhCCi06MTAxMTEwMDA0NDA2M0M3RUY2NzEzQ0FERjA5Q0M5RTIzMUVEQTE3RTA3Ci06MTAxMTIwMDBGN0ZBNzM1OUE5MzA3RjhCNjVCNzdGNTRGOTRENkRBNkQ3Ci06MTAxMTMwMDBCOTQwRTdEMzY0QkZENjA4N0E3OEQ4RkU0Q0U2QTk3RkQ5Ci06MTAxMTQwMDAzNDA5QzZBMDNFREY5RTYxQkI4QzZDRDkyOTJBNzdEMkI4Ci06MTAxMTUwMDA4Qjc2QTY1QjI2ODg3NTY5RTRGQjdGMjA5QzQxRTMyOTlBCi06MTAxMTYwMDA1OEFGODhBNzdCRTMzNTRDNzcwODg0RDkyRUNENTQ3OEM3Ci06MTAxMTcwMDBBMDE0MkUzMDA5NTdFQ0IyRTZEOUY2MTE3RDc5MEFEN0MyCi06MTAxMTgwMDBCOTZCQzRGNzE2OEQwNzU5OUYxMzE3QjhGQkVCMTIxNEYwCi06MTAxMTkwMDBGN0I3RkJDREM5OTVCQkZGMjVFQTAxRUNBRkI5MjAxQzIxCi06MTAxMUEwMDAxMDdGNkM2MzE1RDE3OTQxOUM0OTdBNTI1RERDNEZGMDE4Ci06MTAxMUIwMDA0OThEQTQxOTc3QThBNDJGRDU4QjhGRTM3NUUxMTc3QkYwCi06MTAxMUMwMDAxQzJGMEEyRThERTNCNUYwOEI3RDRFRUQ4NUIzNUU2NTQ5Ci06MTAxMUQwMDBBNUI1NEVBNEQ3NkVCMDNGMTFBNkU3NEU4QjdFN0Y0NkQ1Ci06MTAxMUUwMDBFNzU1OTBFOEE5QUI0NEE0M0Q5MDUyNDk2RTNGODYxMDY0Ci06MTAxMUYwMDA5QTcwRkM4QTQzN0I4MjhDMTdBMDRCMjNGQTQ4RjlFQjQ4Ci06MTAxMjAwMDBFNTBGQUVCRDA4M0E1QTc0REE5OTdGRDdBQjkzNUREQTMxCi06MTAxMjEwMDA1RjA5NkZEQkVGNTcxNERFRkY3NkZCNEQ4Q0RCRDEwMUVFCi06MTAxMjIwMDA2ODIwRkU1NjU4RUJBQjM4RjVGRTAwMTlGNUZCMkJGRTk3Ci06MTAxMjMwMDBGMkU1MEU1Q0ZBRDBCRkM4ODY1QzRGRUYxMUNGRTIzODAyCi06MTAxMjQwMDA2NTIwQ0VFRjBBRDI1MzVDNzdDNTkzNjdGRTlCREFEQjRECi06MTAxMjUwMDBFRkMxN0E0RjIzNDNEMUI4OUU4QUEzOEM2NzJCODJBQTExCi06MTAxMjYwMDBDRTM4REIyNTY3MzY4RTg2RjcwNTBFMEU1OEQ0MkIxQTNFCi06MTAxMjcwMDA1NzIyQkM2Q0ZCM0QzQ0FFMzQ3RkRFRDUxNjNFQzc1N0QzCi06MTAxMjgwMDBGMTBGMkUwMENGQkI3MTNBQ0NFMTczRjEzRTEwNTA4NUM3Ci06MTAxMjkwMDA5RTE4ODg3MzhCRTlCODgwOUVEOUVCQjZGQkQ1QThBOUI4Ci06MTAxMkEwMDA3QUEzQjk0NDdGOEIwRkNENjg1NzA4RUY1RDUxMDdCOTFBCi06MTAxMkIwMDAwM0I4REU5MTkxN0RGMTBBQUMxRkFCMDFERDg3QUY4NkVCCi06MTAxMkMwMDA3QjNFMkIxMURFNDg0NDg0Mjg4NTYyMDIxN0QyMTQzNEY5Ci06MTAxMkQwMDBCRkQ3OUEyRkY0MEJGRDcwMTNCRURGNUIxNzMwNzA2NTFDCi06MTAxMkUwMDA3MEM1QUY0QzJEOEVFM0RDNTlFNzM3NEM3QzkwMDVGMThGCi06MTAxMkYwMDAzRTEzRjMwODdGMzIwM0FGMTAxRURENjNGMUM3RkJBNDdBCi06MTAxMzAwMDBDMDk5Q0MxQkQ0QzM5OUI4QzA1NzdCNEU3RDcyMEJGMUVBCi06MTAxMzEwMDA3NzM0N0NCMzkxQzc3NjdCRDAzRTU1MTMxRTFCRjMzMkQ2Ci06MTAxMzIwMDA5RTQzNUNFN0MwRkRCRTU4MTEwRUM0QkYzQjhGN0IxREMyCi06MTAxMzMwMDA3NUFGMEIyN0JFMTk0NzFDNDhDQ0I0NzBFMDJGRTMyMEQzCi06MTAxMzQwMDBFNkM1ODJDRTkzQ0IzNTBGMDQyMjZDNEY1NzJCRDMxRUFDCi06MTAxMzUwMDBBREM0Mzk2QkYzQzNDNkRGNEZENTA4M0E3QkRGMTM3NEQ2Ci06MTAxMzYwMDA0MTg3NzkxRjNERjdCRDI3RkMzMTM0RTA4MUI2MjU3NEY0Ci06MTAxMzcwMDBGQTBCRkFGOURBOTAzRUY0RjQzRDcxMUU2MDRGNUVCNzU1Ci06MTAxMzgwMDA4OUZGNjhERDZFM0NFQzczRTE2MUY3N0E2RDNFQzgwOTU4Ci06MTAxMzkwMDAwQjI3NkY4MDBENDQxRkM0RTc4QzEzRUNGREI4RjdGMUU5Ci06MTAxM0EwMDAyNEZBRTc1RDI4MTQ0RjBGRjhCOUNDMEY2ODVDM0UzMzgwCi06MTAxM0IwMDAxMEU1RjJCOTAxMURCQTEwODAzRDNGRDBDNEU1MEIwMzIyCi06MTAxM0MwMDAwNjNGN0Y3MTIwQzZBNTREODdGOUY0NDEyOUM0RkQ1RTEzCi06MTAxM0QwMDA2NUFENTk2OTlFNEVEMTM5QkFCNENCQzNBQTcwRUMzRTAzCi06MTAxM0UwMDAwRkQzRUQxQ0NBMjcyOTVGMTBCRDIwMDU5Nzc4NTVEMjcxCi06MTAxM0YwMDA5MzMzNjkyRjk2RkY3Mzg1MjVBRkQ3RkFDRTRFRjlCMDk4Ci06MTAxNDAwMDBGRDY4MkQxOEY3NjNGRjJCNjI3QjU5Q0UzNjlERjUxNENFCi06MTAxNDEwMDBGNDA0QzhDRjI5NzdDNDA5RTI1MEVEQTg3N0ZBQUY3NDc1Ci06MTAxNDIwMDBCNEVGRDY1NjNBREU4N0UzMzM2Q0E3N0FBM0Q3M0FEQTFECi06MTAxNDMwMDBEOTdDRkUzQUY5NTlCOEJFNjM1REE3MzVBMjZCOUZCRTUxCi06MTAxNDQwMDBDRUQxNEVCOTBGRjlERjQyRkVDRkY1OEU3MTQxREU2MjhCCi06MTAxNDUwMDA5MDlEMEU2Rjc3Q0E2MUQwQzU1N0Y1QUVGM0ZCNDEzNjRDCi06MTAxNDYwMDA5RkNEODQ1MzBGMTZFMkFGNUI1RTZEQkE4NkU3RTgyQTI0Ci06MTAxNDcwMDBGQ0NBMkNGOTk1NDhEN0IwMjZFODZBRUY3N0Q0REFBRkUyCi06MTAxNDgwMDAzREFGMTIxM0ZCQkJEQ0ZFNjU5MEZDQ0JGQTUyRkVFNUQwCi06MTAxNDkwMDBDRjJEM0EyRkUyNUYyNjlERkVBNTlCQUU4QkY5OTc3RjVECi06MTAxNEEwMDA5RTcwRkE5NzE3NEFDRjlEQ0I0NURDMkRGQzkyQ0M3RURGCi06MTAxNEIwMDA4QjlDRUNFNzczQjA3QTVBMzY3QUM5MjQ1QUI4QUM5MjRFCi06MTAxNEMwMDA2QzAwQjZEQkQ5QTZFNjA4NjcxRTgzOTkyODlERTcwRjU2Ci06MTAxNEQwMDA0QTQ4NTU5NEI3RUE2NkEzOTZFQ0NDQTMyMUUzRDU2REIwCi06MTAxNEUwMDA4NDFCRkIzQ0M2NDlFQ0YyNkNGQ0Q2MjhFMThFQTEwM0MwCi06MTAxNEYwMDAyN0EyNzg1OEMxMDMwOTBGQ0YzQjE2M0ZDM0YxMEI0NTE0Ci06MTAxNTAwMDAwNzhFNUY2MDY5RTY0QUUwMTNCQkZEM0Q0MzVFM0UwRjE4Ci06MTAxNTEwMDAxRURDQTFFNjI0NkNGRjYwQTU3NkVCMzZBQTVCRjMyMDA3Ci06MTAxNTIwMDA0MTRDN0EzRkQxRjZBMTFDRjkyOUEzMDlERDhBMzM2NTI0Ci06MTAxNTMwMDBBMkU0QUY3QzY5Qzc4NjVBM0VBQzE0QUNBRkE2RTYwNkZGCi06MTAxNTQwMDBFQkM5RTEzMjJENDg3RTc0NzY4NzQ3QTM3REM5RUJGRjU2Ci06MTAxNTUwMDBFQTMzMjQxRjBGNDhGRDg3MUFDODdGQUJGMTAwOUQxRjk3Ci06MTAxNTYwMDBEOUQwODZEQTVERDg0RURFODkzMDg2RUEzQjM2QkM0RTZECi06MTAxNTcwMDAzNjdCQTI0NjNGRDQ0MEZENDMwRDRDQkZBMThEQjdGQTQ4Ci06MTAxNTgwMDA2OTlFRDFEMDkyM0U4QThGOEM3NjdCOTg0NzMyRTE4Q0NGCi06MTAxNTkwMDAyMDhGRDM3NDNFQkY0N0Q2OEFDRTc3RTBCODA1QUY1M0NECi06MTAxNUEwMDA4RTc4RjIyQTlENTc4NDNGODJGM0UzN0I4NzQzMkEzOTYyCi06MTAxNUIwMDAwNUYwOEY4OTVCNEU2NDFBRjgzMURCQUYyQjJDM0Y2MDRFCi06MTAxNUMwMDBFNzhFODRDOUY2OEFGMDA0RDI2N0E3NzdBNkE2RDRCOUI1Ci06MTAxNUQwMDA3MEQwOEE3N0NFOUQzQjUxRTc3QTRBQ0NDM0I4NDAxMTkwCi06MTAxNUUwMDAzM0YyNDdCN0UzQjRGOEM5REVEODkzQTM3Mzc0MUM1MjNGCi06MTAxNUYwMDA0OUIyOUY5OTgwODdFMzFEMEJFRDVGMDkzOEU3QjNDN0I4Ci06MTAxNjAwMDBFN0YxNjQ4QUEzOTU5OTY1NDVGQkQ3QUNGOEVGQ0IwOTYwCi06MTAxNjEwMDA4OUYxRUEwRjg5RUY2RDYyMTk5MTI1ODU3NTI5NDkwRkM2Ci06MTAxNjIwMDBGN0IzRkQ1Nzk0REI2RDkzMjQwRjE2QkREMUFGNzhCRTkxCi06MTAxNjMwMDBGOEJDN0QyRDIxRTJCMkFGQ0ZDOTExMzY1RDUyQjQ4RTE4Ci06MTAxNjQwMDA4REFBMzU5RUMxNzE4QTM1QUVGOEI1OUIzRjE3MUJCRjc5Ci06MTAxNjUwMDBGRUE1QjU5RkQ3QjZERjc0NUUzRjc5NTVDRUQ5Q0ZEN0ZCCi06MTAxNjYwMDAwOTYyRkY1NkJDREI2QkYxRkYxQTc5NzIxRkM5RTNGRkY5Ci06MTAxNjcwMDA3N0JDREJENzc5NzlFM0RENkY5MzdEMjI5Qzg3NzZGRTlCCi06MTAxNjgwMDA2MUZDOUVGRDY5OEVGNTA1NEU5RDdEOUJGNTdBRDUxMjE4Ci06MTAxNjkwMDAwQkJGNDBCNEMxQzY4RjJCQTg3NEU5MEYwMTdERTRERkY2Ci06MTAxNkEwMDBGODVBQzRBNTU4MUZCN0VBOTlENTYyNUMyOEQ2Q0IxNTVECi06MTAxNkIwMDBFNDE3ODgzOENBQjJDRTk1QzJERjIyN0I0MkNDNTU4QzYzCi06MTAxNkMwMDBFNTQ0RDc4MEYyOUQ4Qzg2RkIyODBGMUM4MzEwOTZCRUM0Ci06MTAxNkQwMDBDOEFFMEM5NTFEQ0JGNUQxMThBRTZCN0M5NTg3Q0ZBQjAyCi06MTAxNkUwMDBGMUNBRjQ4OTIxNUFGRkFBNDA0OUJENjhFRTE0RjY2Rjg5Ci06MTAxNkYwMDA4NEU0OTVGRDI0MzAzREE0NkY5MkFEMUM5MEY2MjA5RkFDCi06MTAxNzAwMDAyNjQwRjBEOUVDMENGMTdBMTQ2RDJDNzYwN0NBNERDQzNBCi06MTAxNzEwMDA5MjA3REMwRkY3Nzc4RkZGNjExQUJGQ0QzMUZFMzc0ODk0Ci06MTAxNzIwMDA0RUIzRDZFMDM0Q0UyRTFDMjdERTI5RDk3QTk1QTFGNzA4Ci06MTAxNzMwMDA3RTZCM0VCRjNFMTYyMzVDOTBFOEQ0QzQ3QjY1QUQ0MTEyCi06MTAxNzQwMDBGQTMwMUUyQTNENUZDMjlBMEYyODE0QjNBMTgwOEZBRUQzCi06MTAxNzUwMDBEODJFQzYwMUJGRThGRkEwNzQ3NkRCRTlGNUNDNTdENkRBCi06MTAxNzYwMDAyNzVBMDdCREFGMzA5Q0Y2QzEzRDdFNTk5M0QzQkY1MTc4Ci06MTAxNzcwMDBFQjlDRUQ1MzczRkI3MEZBNDUwRjQ4QTVENzdCQjdENUFCCi06MTAxNzgwMDBCRTYzQjk5MDMzOTI4RkZCNEJDODg3NUJERjU1OEE3QjcyCi06MTAxNzkwMDBFMkI4NjlFMjA3REIwRjYxNzcwMkNBNzQ4MkZDOUQ0MDAwCi06MTAxN0EwMDAzMzE4ODM0Q0UwMjlERTZGRUFBOTg2NTMzM0VCQzlDRUE4Ci06MTAxN0IwMDAwNzBERjI4MzE0M0Y5QUNBRDY4MjlGRThERUY3NjI3RTU1Ci06MTAxN0MwMDA5RUEyNDBDNkRCM0FERkRGQzM3MUNEQUE1NjcxQ0U2NDVDCi06MTAxN0QwMDA4QUM2RkI4QzI1Mjc3MkIxM0Y1ODRGRUU4ODdFMjNFREQ5Ci06MTAxN0UwMDA3M0VDOTBDQ0YxQTVCMTdCN0REQjRBOUREM0Y3MjZDRTdGCi06MTAxN0YwMDA5RkQ3Mzk5RTQyM0Y4MjlDRDRDNzhFMUVEQThERjVERjdCCi06MTAxODAwMDA2QTFFQ0RDNzZERjQ5Mjc5MURDREFBQ0ZFNTc1NTIxNzJBCi06MTAxODEwMDA5NkQ3MTlFQjBBRjczNTVDNEM1RTY3ODE3MUU3Q0VFMzJBCi06MTAxODIwMDBGOTc5OURFMzlENDhBNzYzMDE5MTVGOTlDQkVCREMxQzlGCi06MTAxODMwMDBCOUEwNzgwRTU4RTc3MkQ4QjJDQjk1N0Q5NjFGQjE1RkVDCi06MTAxODQwMDA2MjNGRTI5OUI2N0YzRkIyODZFNEFDQ0RDQjcyMDA0N0VGCi06MTAxODUwMDAyN0EwNTg0RkI2NkNEN0JGNUE0REU3Q0NFQjNFNjgxNDYzCi06MTAxODYwMDA3NkNEQTRGMTZDQkZEOEE2OUY2QThEOUZGOEY2NEIwQTdGCi06MTAxODcwMDBCNTFGQUZGNTZDRTBGMTIwRUZGMzQ0NzkzREFBNTVDQUVFCi06MTAxODgwMDA1NEFFNTFGMzcyMTU4RDFCMDY0MzlDMEY3OTg5OUVDNzg4Ci06MTAxODkwMDA5MTU4QzVGRUMxRThFQzRGM0FBQjI4NEUxMjAwODM0QzdDCi06MTAxOEEwMDBEMDY4NUMzQjUwNDU1RjI4MEI0NDc4QTc1RUNGOTFCRDY0Ci06MTAxOEIwMDBFREY0NTczOEVDRkY2ODlGMkFFQzZCMjNGQTRCQTQzRkZBCi06MTAxOEMwMDA1M0ZBNTdGNzYwRkJFMUZENjU4QzlCMUVBOEYzMDhGREZBCi06MTAxOEQwMDBDQTQ4MzlBOTlFRjBCNUQzRUYxOTlGNUMyMUYwRDg1MUMxCi06MTAxOEUwMDBBRkQxODhFRDFGOTkxNEVENzdDNzM3RTQ2NEM2REQ0RTlDCi06MTAxOEYwMDBCRkE4NEY3N0ZBNDVCQjZCNUI1RjI1QkMwODQzNUU4RTg0Ci06MTAxOTAwMDBDNzZCMTZBRUJEQTFDOUU5Mjc1NUQ2RjdCRjQwMzg2NUVDCi06MTAxOTEwMDBFNzkwQzBDMzA3QTNFMTI1QkJEMUZFQURFREQyMUQ3OTkxCi06MTAxOTIwMDBCMjVENDM3NzcyREU2ODQ4MDVDRUE3OEVFRTUwNTkzRjEwCi06MTAxOTMwMDA0NkJENkYxRERGQ0RCOEIxOUNFOTM4QjE0M0FENEQxNzQxCi06MTAxOTQwMDBFOUNCQzdCQTdDM0NDRUM0MEU4MTNGMTA1RUE2Mjc0QkM0Ci06MTAxOTUwMDBCQ0ZGNTg5NzY1QTcxNEUwNzNEQzk2OTczRkY5QjhBMEQxCi06MTAxOTYwMDA3M0IwMEU3MjNBRTFCOEJFN0Q3OUYyMkJDN0VCNzA0RkJGCi06MTAxOTcwMDBGODdFMjhEQUQwMzc0NUYzQkYyMjAzRUREMzJEODdGNzYxCi06MTAxOTgwMDA5MDEzNUNCNDBGNUZDQ0UzQTA5M0Q3OTdFQUE3RjFFMTgzCi06MTAxOTkwMDAwNkQwQzlBRTc1MjVCMTRFNzE4MEVEMkE1MDdDQzAxN0I2Ci06MTAxOUEwMDBGRDBCREU2RjE4RUI2NTU4RjcyN0M3MzIwQUQ2RkQwRDIxCi06MTAxOUIwMDBFOTc1ODQ4QjlGQkRGN0I2OTE3ODg0Q0UzQkExREZCRURECi06MTAxOUMwMDBFRDdCNTMzNzUxRkJGNTVFMjhBM0Y1ODEyRTQ1Njk3REVDCi06MTAxOUQwMDAxOTA5NDQ5RURGQTkwRjA3QjNGRkQ0NDU3QzNBNjg0ODM0Ci06MTAxOUUwMDBDQ0EyOUQ3RDVCRUZBMkY1OUM4Qjk0MzM2RTFBRjNBNjdGCi06MTAxOUYwMDA3NkIxM0RCQUM1QUY2NUY4MEM5QzYxM0ZDMkZCMDUxRkNGCi06MTAxQTAwMDA5MERDNEREQ0ZCNEUwREUxRUZBQkJBNTZCMEJFOTVFOTc0Ci06MTAxQTEwMDA0RUZGREEwRjYzN0M2RTZGMzRBN0I3NTNCRjhEMzE5NURECi06MTAxQTIwMDAzMjFFRjA0Q0ZCMTlFNkRCNDQ5QkNGRjBFMTNBMjZEQTlDCi06MTAxQTMwMDAyNUE2RjNFRkRBQkMzOTlBRTc2OTc1NUFBNjc5OUZGRUI1Ci06MTAxQTQwMDAxRENFNUQ1RjRBQkY0QkVCOTVBRDQ3RUVGNkEzQjFBRDQyCi06MTAxQTUwMDA3RTkyOEI4MzMwN0QzM0QxMjczMzJCRTI1NEVFNzZERkI5Ci06MTAxQTYwMDBCMEU0RTA2MEY2OTYyNjg1RTM1OTJBRTdEQjk1QjM4Njc1Ci06MTAxQTcwMDA1OTg1QTM4NzY2NTNERkEyRDhFQjJCOUQwQUI3QkJBNzc2Ci06MTAxQTgwMDBENjkzOTE3MEJDRTEzRTk1RjU2OEI4MzIzRDQyRjIzQzg4Ci06MTAxQTkwMDA4QzcyQ0Y3RTUyMDRFQkE0NjdCNTExRTM3MEQxN0NFMzY2Ci06MTAxQUEwMDBFREI3MzY5MTNEN0JCOUFEOENGMUZENkJDRkQ2REU5MUI0Ci06MTAxQUIwMDBDMTIxMTNGMkFGRkVFRTMxRjJBQkVBNTRFNkU3QjBCNzY0Ci06MTAxQUMwMDBGRjc1RjI4MzMyNkQ2NUJDREVFNzk2QTlFMDI3N0IxMEQ3Ci06MTAxQUQwMDBCOUUzMjFGMkIzRTE5MUVENTAyQ0FGMTM0OUExQTcxMzYzCi06MTAxQUUwMDA3NTQyRUZBNUM3QjZCMzFGMzAyRUM5NEM2N0IzRTZBNDQ1Ci06MTAxQUYwMDA0NDc4Q0M5N0I0RTM0RTIyQ0UxNEI3Q0NEOUM0RjZFRkQ5Ci06MTAxQjAwMDA3MjFDNkE2OTlGODhBM0M2OTM1NkJDNDkwRTY0NTgyRUZFCi06MTAxQjEwMDBBRjJCN0I4OEY0REY1NEJDMEVGRjc4RDM1OUE3QkZCQzMyCi06MTAxQjIwMDBENEU1MkZCQkUzNTE1QkJCQUM3ODg0MTU3N0IyRTUzMkNCCi06MTAxQjMwMDA2OEI1OTk4ODU5NzY3QUJEMkYyN0U0QjBCRjU2NkI5RTU5Ci06MTAxQjQwMDBBRkRGM0ZCNEYwRjNGNDgwMUYyNTAyRTAyNzAzMUFENzdDCi06MTAxQjUwMDA4M0U2NkYwRTU0MTM5RjA2QTJGQ0ZDNEYzNzlFOTA4QUJCCi06MTAxQjYwMDBGQjhEQUVCRkM1QUZCMzNEOTk4OUQyQjg2RTNCRTI5NjRGCi06MTAxQjcwMDA4QjM3M0FDQjFERTc4OUJEQ0VDQUY2MDQxMEVFM0Q3NzEwCi06MTAxQjgwMDA5NjJEMzI2QzBBQ0M3NEYyRDkwOEQzODE2MkJDOUZBNzFGCi06MTAxQjkwMDA3NUZBMjg0RTI2RDZGOTFDQUREMzQ3NzEzMkIxQkUxNzVGCi06MTAxQkEwMDAwNjc0MkU1RjFDNjhFMkYyM0I1RDIwRjIwMUI2N0RCODQwCi06MTAxQkIwMDAwQUVEMDNEMkExQUI0RUQ0QzkxRTEwRkZDMzkxM0IzODJFCi06MTAxQkMwMDA0RUU2OEIyQTFBRTlCQkJGNkUyQzJGMTVEOTg3ODlDQTFFCi06MTAxQkQwMDBGRTlGREU0OTc2QkYyNkMwRjJFOERFRDdCMUFFMzk3QzgzCi06MTAxQkUwMDBFOEQ4RDdDRUY2N0Q2Qzc3Q0VFMTNDNDQ3RkI0MzM3NzJFCi06MTAxQkYwMDBCMTFENDJCQkMwRjM2RTU3NkZFNzc1OTg2ODk3RDgyRTNBCi06MTAxQzAwMDBGNDdGRjUzNkI2MEI1RTIwMzk3N0RCODE3MDQ2RTg3N0Q2Ci06MTAxQzEwMDA1QTE3RjEzQkZCOUVEMDlDNURDMDc5NzIzOENGMzM2ODc4Ci06MTAxQzIwMDBEN0E5M0U4Qzc2ODBFNjE5NkU3RkVCMTMzNEVGRUZGRTdBCi06MTAxQzMwMDA1MDBFMzRDNEM0OEU1N0Q5MkVCQzdDMEVBMEZBMzJEQUIyCi06MTAxQzQwMDAwNTVCMEZENzNERjcxRjI3MzI0QTI5M0U2RkJERUQ5NDQ0Ci06MTAxQzUwMDBBMDg3MDY4MkFFREI1MjI1RkNDNDhCRTUzMzk4MTc4NjNECi06MTAxQzYwMDA2MzcyQ0FDQ0VEMjJFRkE4MzIxRDE2Q0MzQjY2M0MwNjRGCi06MTAxQzcwMDA4NTA1MDYyNzk1QTQ5NTc3MDRDQTNCREFGOUM3QTJCQzY3Ci06MTAxQzgwMDA2M0I5MzNFRkE4RTZCMjhDNkY3MjU2REVGMUQ2Q0QyMjdGCi06MTAxQzkwMDBFRkE4OTZDRjA0MEFFQkIwRjM4RDQzRjRBOEI2OTA5RjVCCi06MTAxQ0EwMDBGRjg3QUVGNENCNUQ2RDg1M0NBMzJFODkzQ0Y4RDU3MUUyCi06MTAxQ0IwMDBGMzg3RjQxQzIyNjEzRUZGREQ3OTRBM0IxRjg5RjA0RTE5Ci06MTAxQ0MwMDA0QTE3RTUzNzVCRjBCOTNGNUNDODdGQjlGMzk5RjZCREI5Ci06MTAxQ0QwMDA4QzE2NzVFNkU0MTFBNENCRTBFRDdFQzYwRkY2RkEwNjhECi06MTAxQ0UwMDAxRkZGRjBFQkU5NDhFMTNFODA5REVGQjRGMzk5NzZERTBCCi06MTAxQ0YwMDAxM0Q3RkQ0RUYxQkFFMTQ5NjBCQjAzNEZGODRGRDBGOTVECi06MTAxRDAwMDBFNjVFNkY0NTNDRkQ0QjZBM0Y2RkREMTc5ODVGREMwMjc2Ci06MTAxRDEwMDBENkY4ODhCQjQ4OUZERkI0RTgzOEQ3QkU0QkY4OUY2QjM2Ci06MTAxRDIwMDA1NDExREY4NkEwQ0FGRTRFRTJEQjAxOTAwOTY3NTdBQTc0Ci06MTAxRDMwMDAyNzQ5MkY3NkMxNEMzN0QxNzczMDI0NzA1RUY2MDEyRkJBCi06MTAxRDQwMDBEQjQ5RThENjk5N0YzNUFBQzlGNzIxNkEzRTVGNjYxQzUwCi06MTAxRDUwMDBDMEM3RDkyOTJENDhGMUE3QUY3NTlBRDBERDQ2RUIxODM5Ci06MTAxRDYwMDBCQjc5MkJBRDAzNzEzQkQ5QkIzNzFBQkYxMkUxN0MzRjY2Ci06MTAxRDcwMDBERDdCQUEyMkZGQ0Y1ODRFNzExMEJEQkJGNDdEQTU4RTJFCi06MTAxRDgwMDBFNTY3QjdGMkJDOTUxRTIwRkYyQzVCNjZCQ0EwMTNCREI3Ci06MTAxRDkwMDA5RjUyNzhCQzNFMUNDMjZDRTVGQjRCNUQ2QTk4QzYxMTM1Ci06MTAxREEwMDA3RUYyNjBFMDM0RjNBQkEzRDFCNzk2RTM3QTk1QTVGRDVDCi06MTAxREIwMDBDMEE1REQ4MjBFOUI3MTJDMTVDNzc5MkE5RUFFQTU3NTM0Ci06MTAxREMwMDA1M0FDMzRDQTcyMkNGQzNCQkQxQjZDRkI3NTlGNjc0MzQ0Ci06MTAxREQwMDAyMTBFNTYyMUE3RjU2RUIyRDc4RjQ4MEE5RDhGM0U0QjM0Ci06MTAxREUwMDA2RTZDM0ZCMTNCNjFENjc3MEI3RTk4MzRCRjdEMEZDOEQ4Ci06MTAxREYwMDA5RUZGRUE2RTYxMTc1RkU5MzIzRjQ0RUREQTY4MUU5MjlBCi06MTAxRTAwMDA0QjJEMTMyNzNENkM0OUEzM0M0OEFDM0ZBRTNDQkM5MEU2Ci06MTAxRTEwMDAwQkI3QkNEQUYyMzY5Nzg3QjdFNDUwRDI0NEJFMTZFNTZBCi06MTAxRTIwMDBBQThERjYwNzRGRUI1MzFFODlGMkVERTkxMzQ3QThFRjkxCi06MTAxRTMwMDAyNUU2QkIzRjlEMzAzN0QxQkE3N0M3NTMxRDU0QkU3MURECi06MTAxRTQwMDBFRjZEQzA3OTlEMEJCQ0M3RDFCMUJDM0Y0QTc5RkNFMUI1Ci06MTAxRTUwMDAzMjgxOUIxRjhEMUIwRTdCNzdCNzQ1OUZCQkJCMDU1RUY5Ci06MTAxRTYwMDBCQTE2NjU2NjlBRjQ0MDMxQUE4MEY1RjgyRUM2RDFCNjQ2Ci06MTAxRTcwMDA3RDFBMUI0ODdGRUZFNzhEODVGRUQ5MDE5OEE0N0NEMEExCi06MTAxRTgwMDA0MkVCRjAxRURBQzc3MUREQzFCQTg0OUZFQzBGREFCN0ZFCi06MTAxRTkwMDAyQUFBMEZENzk5RDFFMjc1NjQyQjg1OUM2Nzk2ODlCOEQ5Ci06MTAxRUEwMDAwNUM1RDMzMkJFQzJGQkJEREQzMkVGQTdCMzBFRjIyNEFGCi06MTAxRUIwMDAzQkJFODBDOEJCRjk1MDcxNzUzQzdGN0M2NjJDQ0ZCOEE3Ci06MTAxRUMwMDAyNjAwOTMxNDYyRjgxNEU5MEZEREZGOEIxODYwOTJCRkFGCi06MTAxRUQwMDA1OTk3MDJEMjZGOUY1NkU4NEY3OUQ0Q0VCQTdFQkU2RjIzCi06MTAxRUUwMDBCOUQwMzg3MkQ0RUU5RkU2RkVFM0REMUE4RkFCNDYzQ0U0Ci06MTAxRUYwMDA4RTM4QzA2Mjc0NzNEMzY1ODhFOEQ2QjgzMERERDQwQkYxCi06MTAxRjAwMDBBNjlCRDAzQjM3QkQwRTEzQkQ5MDlGQ0Y4NjNFQ0JGQjJCCi06MTAxRjEwMDA4M0Y3M0I1OUNGN0MxQUVFMTNDQjMxQ0JCRUM4MDExM0VDCi06MTAxRjIwMDBEMjk1NjRBMzUyODgyMDI5Q0VERTBGOTQ4N0I2RTkyQzdGCi06MTAxRjMwMDA2QjgyQ0VCMkQ2Q0ZGRDdDNzUwNkE0NTcxMzVERDI0QzEyCi06MTAxRjQwMDAxNzM3MUREMDRFMDBEOTg5N0Y3RUZDNzg4NEYwNjkwNzUxCi06MTAxRjUwMDBENkEzQzI3RTgwMEZDQjVGNUJGRUEwQURBNzVCRTBDN0MwCi06MTAxRjYwMDAwMTExRkY3NjlFMTdGM0VDQTk1NTNFNkFDNTlGRERDRkEwCi06MTAxRjcwMDA2RkU5MjkxM0I4NEUwNzA3REQyQjJCQjczMjNGNEU4RTgyCi06MTAxRjgwMDBCNDMyM0VDMEYzMzM0M0Y3NjI3QTZBMUJDQkE5N0VCOTAxCi06MTAxRjkwMDBGMzg4RUVGQ0ExM0I0RkU4Q0UwRjE2RTRDNkY0RDMzQTJCCi06MTAxRkEwMDA3RkFCOURDRTdDQjQ4NEJDRDhFNTExNEJERjg2MDZGQ0FDCi06MTAxRkIwMDAyNUY1RUUwOEVBM0JGMTZGQjhERENDNTBERUU4NjA2ODRECi06MTAxRkMwMDAyNkNBNzIzM0Y1MkVFMzYyRTUyNUQ5MjA3Q0E5Mjg4MjQyCi06MTAxRkQwMDBDRjNEQ0I2Njk4OEZCRDMxMTMyOERGNzQ2NDYwREI3NzBCCi06MTAxRkUwMDA4QUM3RkQ3NTNDRkQyM0IyNjcxNURBQTQ0OUUzMDQyMEQ2Ci06MTAxRkYwMDA5RkExRjM2NzczQjVEOTVGMEEzN0ZEOUI2NTQ3QkExMzk1Ci06MTAyMDAwMDBBOTdGMjU3QkQ1QTEwQkZFQzdFMkU2QUI2QzE3MkZEMENECi06MTAyMDEwMDA2RTJEQTQ0RjhBNERCQjhCRDZBN0QzNDI5RjYyRkI1ODJGCi06MTAyMDIwMDA5RjQ2RUJGQTE5Njc4REZFNTgyNjI0NTVDMDkxOTYzRUJGCi06MTAyMDMwMDA4REI2OUY2MTdEQjdGNUVBM0Q0QjlGM0E2MzQyMkYyOEVECi06MTAyMDQwMDA4RTQwRTc3N0IwQ0U2NEJCRjE1Rjk2M0UyOUE4MjdBNDA3Ci06MTAyMDUwMDA0RjNFNEI5RjgyNUFBMTNEQzVDNzNCODlDRUY4NUNBOTM0Ci06MTAyMDYwMDA5QkUxN0VDMTk4QTU3RkE0NEYwMUJBM0YwQzhDMDM4NkVCCi06MTAyMDcwMDA1MUVGMjgyRUUyRDZBRjhFMDY3MTZFNkE4OUI0QTc4NzFCCi06MTAyMDgwMDBGMEM1QjJBRDFDOTcxRkFFRkJDRjZBQzYyRjk2RkMxN0VBCi06MTAyMDkwMDBGMDZFMkI5RkU3RTc0NjNDMDZFOTQzMEIwMUU4RDY4MjRBCi06MTAyMEEwMDAxRUQ4RkJERTM4MkI0MzFFNTlCMzY5NTZFMkYyMjNCMzI4Ci06MTAyMEIwMDAxNTVDNzZDQzk2NzE2OUNFNTY3MzE5OUYwRDcxOTk5OEZGCi06MTAyMEMwMDBCRDkyQ0JDRUQ5NUEyRUJCNjY1MTBGRDYyMURGNjdFQjFFCi06MTAyMEQwMDBCOUVDOTlCRDk2Q0JERUQ5NTU1QzI2NjdENzcxQkJCRUVFCi06MTAyMEUwMDBEOUI1NUM2RTlFQkQ5RUNCMUI2NkRCQzUzQzRENjI1RjY5Ci06MTAyMEYwMDAyNUY0ODFEMjYwOTc0MTFGOEMwQzU0OTIxRTdDRkM3NTk0Ci06MTAyMTAwMDBCNkVGOUFDQTc3OTRCMkExMEQ5QzI3RjIyOTMzQUMwRjhGCi06MTAyMTEwMDAyNzYzQzJERUY3MDYwNDlGRENGQUQwOUQ0OEFGMjVCQURDCi06MTAyMTIwMDBCQkY1NjEwRURGMkFBMDExRkQ1NUIwM0UyRUZDODBGOEY0Ci06MTAyMTMwMDBBN0JEQTdFODNFQjIxQTM1NTlDRTEwOUY3Q0I4ODdGNEU4Ci06MTAyMTQwMDBFMzEyNzFDMjFDQ0U1Q0FFMzIxRUI1NzFFNkU4MzJDNDM5Ci06MTAyMTUwMDA5OUY1MDU5QzM5REMyRUZDQjJFQzAzM0VGNkRGNzY0QjlDCi06MTAyMTYwMDBFMjdFRDlBNzEzRTkxQjdCRDgyRjE2NzFBMkY0Q0Q3RThFCi06MTAyMTcwMDA4RDcwNzMzNkQ0MTMwRDUwNUNFRkEwMEMxNDJGNDAxQ0RGCi06MTAyMTgwMDA5MkUyNzY0QTRBREM2N0JENDA3RDhFQzU4NTdFRDhFREY5Ci06MTAyMTkwMDA1QkUwQjRBN0ZGMjI3MENDMUJGNEI1N0Q2MUJCMTBCRTIxCi06MTAyMUEwMDBENDczRDZEQjI5RUM4MjI2RUM0MkI2QUU3Rjg0RjNEMjIwCi06MTAyMUIwMDAyRUJCNjA5RkIzNDgwRjg3NURGODVDOEY4NTRCMkMzRDJECi06MTAyMUMwMDAwRkQ3ODlGMzMyNEM3NjAxRTlGM0M1MUVEQjJFMzhDRkU5Ci06MTAyMUQwMDA1OUM1QzYyMTQ5MUI4NzU4NzYyMTI5RkEyMTZFNzc5QzVCCi06MTAyMUUwMDBCM0M4NkUzRjE0RTE2Mjk0QTNDMTlFQjZGOUY2ODFDRkU1Ci06MTAyMUYwMDBGM0EyNzM2RUIwQTEzMTRFQkYyNTA4OUQ4NTM4ODk2NzYzCi06MTAyMjAwMDA3MDU2REY2Qzk0Mzg3N0IyNUEyQkVCQzE5NEQyMDlDNTYzCi06MTAyMjEwMDBGMTk1OEJENkIzOTA3REVFOTg3Q0VFQjhEQkQ5RkEzNjhCCi06MTAyMjIwMDAzQ0Q1MjdGNjY5OUQ0MzUzQjg3RkIzNDhERjdBMzU3MUIzCi06MTAyMjMwMDAxRUUxRjlGM0Y1OUUxMkU3NEZDNzcyMzM5RDJBQjFDRTI2Ci06MTAyMjQwMDA0NzdCODRCRkYxODM0RDE2RUU0NTVDNjkwNDE4REY5NzI4Ci06MTAyMjUwMDBDNDBEOEZGNjA4QkI0RUJGRDM3ODAyRUQ0Rjc3MzI5MzkzCi06MTAyMjYwMDA1NTc0RDZGMzQ3NDlDRTM3NzY0RENCMTQ0NkY4NDg2Q0IzCi06MTAyMjcwMDBFQzE1NEE4OUEwOUUzRUY2QzdFOEU5RDFCODk1RUZEQjk4Ci06MTAyMjgwMDA1RjJEMkUzQjVCRTU2MkYyNkZFMzIyNUIwRkU2RURBMzcxCi06MTAyMjkwMDBERURDNTY4QTFFNEI3QjA1QkUxRjFDRjFGNEQxODUzRjQ4Ci06MTAyMkEwMDA1QjJFQTY5NDk1OEM3RjRBRDg1QkQzQjgyQ0Y2RjZDMkU5Ci06MTAyMkIwMDBGMEM3MTQ5RTgzQzRGN0YzRTA4RjM3NEJEOURCODVGMDZBCi06MTAyMkMwMDBDNzk5MUU5MTI3NDdGQ0YxMEVGNUVCNjgxNkY4NjM2OTc0Ci06MTAyMkQwMDAyRkZDREZFMDhBRjg2OUE2REJBNUUyOEEwRjZDRkJCMTcwCi06MTAyMkUwMDAwMEFFRjBGNkVBRTI3NzE1REEwQ0RCOEZFMDI1RTIwQUMxCi06MTAyMkYwMDBCNzlENDBGQzUwREU0QkY0MzFDNEI5NkJGRkRFODQyRjM4Ci06MTAyMzAwMDA1MDE2OUQ1RjY4NjdBQTdBMDU1RUNGRDNFNUIxOTM4MUM5Ci06MTAyMzEwMDA0NDQ2NjIzRDQ4ODVFOEY5OThCOTgyRTVFODcyRTkwM0U4Ci06MTAyMzIwMDBFMkM0MkI3QjhCRUE4QkU5QzUwNUI3OUJEQ0MxNzE0MDBFCi06MTAyMzMwMDAzQjlGRjlGQkIyNjAwQkM1NDdGNkZCNDVGOUI5RjJFMEVDCi06MTAyMzQwMDA0OTJBQzcwNzQ0MUM3QTk0RTI3RTU4OEU3QjgxRjMwN0EyCi06MTAyMzUwMDA0MzUyQjk3MTUyQTI3RUNCNzMyMkRFREVCRjg2RTI5RTZCCi06MTAyMzYwMDBEN0Y3ODZBRDc4NzJGRjc1RkNCQjFCRjhBMjIzNkZCQTU2Ci06MTAyMzcwMDBGMEJBQzQzRDVGMUFFQTAzQkUwRjVFQTc3MTFDRERBMjZFCi06MTAyMzgwMDA0Qjk4MTg4MEYzMUU1RUU1NjcxQzc4QjhFRjkxRTM3N0YxCi06MTAyMzkwMDA1MDVDQTY0RkM0QzE0MEQxRUIzRjRBRTcyRkMyOUE1OEM4Ci06MTAyM0EwMDBEMUI5MjA4MzcyODZFMkYzMjM3NEI3OUQ0MUM3MzY3MTk5Ci06MTAyM0IwMDAwRkRBNUE0Rjc1MTJGREY3MjJGRkEzMkE3NkQ3Rjc3RTYwCi06MTAyM0MwMDBFRUJDMzdFNDI5Q0UyMzFGMzFCNzU2ODlDQkNBNzdGMTRCCi06MTAyM0QwMDAzOEI2OUUxQzA5NENGQUI1MjI3QjczNzRDMDc5RkZDOUNDCi06MTAyM0UwMDA1RENBNkRBRkYwN0RDMzYzNEQwQUU3MkYxRTU4MUYyOUVDCi06MTAyM0YwMDAyMzNEMzlENDIwODJCNEU1OEQ5RTU0QUU4NDNFMEZGNDQzCi06MTAyNDAwMDA0QThFQjg3NkM4M0FFN0NCQkFDNUJBMTY5QTZGNzg0MDAyCi06MTAyNDEwMDBDNDZGRURCQTRGNEY5OTI0QTdFNUY1NjMyOUEyNkI3OUY0Ci06MTAyNDIwMDA2MzQ0QTJGOEFCRkRGRUY2NUU2MTM3MEU0QjQ2QkUwMzc5Ci06MTAyNDMwMDA4OTc5Qjg1MjlDMTdCRUJBMEM3ODA4MEY4NEY2QUUyMzdGCi06MTAyNDQwMDAxQUZCRUJGQUUxNEM4MEVFNkY2NEUwNkQyQ0MzNjEzNTUyCi06MTAyNDUwMDA1RDZBREQ4M0Q2QkEwRjdCNzMyOUMyNTM4NzU3Mjk5Q0U3Ci06MTAyNDYwMDBFNzQ0NEM1NTMyNEVGNjA5Q0I0RTk3Mzc4RUYzRkFBMDFGCi06MTAyNDcwMDA1MUUxN0M5NUJCREQwRUJCOUQzQUM2Rjk4RTQzOERERkU1Ci06MTAyNDgwMDBENDY5NUY4N0U4MDczNzRCOTE0QkM5ODcxRjNBNDA3NjdECi06MTAyNDkwMDA2NjAwRjlFQTI1Nzk0RTczNTk3RUNEQjc5OEZFQTMyREQzCi06MTAyNEEwMDA4QTQ2RkJFODk2OUIwRkQwM0NDNzkyNjAxMDVFNzFDQkNBCi06MTAyNEIwMDBDNTMxRDBDQTY4N0NCNzdDNTRBQzdFOEZFMzRGRTU0MTEwCi06MTAyNEMwMDBDQThDOTAxQ0NFRjg4NTFEMTU3MjE2QjBGODMzNkE4ODM4Ci06MTAyNEQwMDBCQ0NGNjg0QUU0QUY2Q0ZFMTVERThCRkIwNkU3NTIwQTAwCi06MTAyNEUwMDBGQjI1NzZGRTZBMDk0MDQ5MUM2N0VCRTU5MDE1OEY5RjM2Ci06MTAyNEYwMDBGNzdFNzk5RUNGOURBMzlCRjI1MUJBMjcxMUQ0RkM0NjVCCi06MTAyNTAwMDA5MkM2N0RDNEI5QUU4Mzc4NzZGMkJBRkE0NEZFNjJDRTQyCi06MTAyNTEwMDAzRUFGMTVGRUUxRkM3NThBRjg4MUYyQ0NCQkMyQUU1QTIzCi06MTAyNTIwMDA3RTQyQjBGOTNEQjZBQkY2QkRBRkRFOEQ0MjVGQUJBQ0RGCi06MTAyNTMwMDA3QkY3NTU5MTk0MjlFODcyQjdDMzFFNDhEN0ZDMjI0MzE0Ci06MTAyNTQwMDA3OUE2MDc2QkM1REQ4NEYwNDY3MUFGQjY1QzA1MjM0RkY1Ci06MTAyNTUwMDBGNzAwRkEwMjdDQkY2OTQ5Q0NDQUQ3NkQxM0Y3MkJFQ0EwCi06MTAyNTYwMDBGQkUxNkE0NDc1QzQxMzIyNTA1NDI3RENFOUFBODNCQ0ZBCi06MTAyNTcwMDBGREJDRjdFMEY2RkZFQ0M0OEJDRjE1RjFGREE1NUVFN0RGCi06MTAyNTgwMDAzREYyQzVGQUZGN0UyMEY3RTI3MzY4OTA4RTE5RTdENzE3Ci06MTAyNTkwMDA0NzlCNkY1RjFFODg3MTY5Q0JBNTJEQTc2MURBNjJFQjNGCi06MTAyNUEwMDBDMkZEQzc0M0E5OTI3OTlBNjA1MkU4QzM2Mjc2MkRFMkQwCi06MTAyNUIwMDAzM0RCREY0MUJFN0JBQjgxRjM2NzVGRDlFNDFDRUYzN0QwCi06MTAyNUMwMDA5NkJFRkVDNkQyMkY3NTM5RDQxMjlFMUEwQjA5M0IzMDI3Ci06MTAyNUQwMDA1NjA2REJCRTVCNDI2Rjk3MjQ1NUI2MUIwNTdENzBFMjQ1Ci06MTAyNUUwMDAwQTVCOEVFNkQzNjMxMTVDQjFCQTRCRTAwQTJENUM0NjAwCi06MTAyNUYwMDBCOEU4OTg5MTc4ODFGMjgxRUY2OUFBNUUyQ0I3RUVCOEJECi06MTAyNjAwMDBCQjhEMkJEMjQ5M0JGRUE3NEE4NDBCQjRDMDBDRTNFRDMzCi06MTAyNjEwMDAzOTVDNjBFMTA4MzcyRTI4RjdFNkI2OTE3RTk0QUY1MjE4Ci06MTAyNjIwMDA2RDdCQzU3NkU1RjNERkZGRkI4NzMyQkNCRjhDNTQ3QzQ2Ci06MTAyNjMwMDA4RThFRTY2RkU3NzFDM0FFQjgzQjQ0OUNCRjYzNzk4QjY3Ci06MTAyNjQwMDBGMDE3QUUyN0FDNEY0RTI3MjhGRkI4NDUxMUJGNkYxQkMwCi06MTAyNjUwMDAzM0ExRjgxRUNFQjhFN0ZERDgzQkQ2RjdGNzZEMUM1Mjc0Ci06MTAyNjYwMDA0RkVGOEY0RUYzRUY2QkUwMUUyODlFRkZFMDREM0JGOURFCi06MTAyNjcwMDBGNzE0OEJGMURGNUUxN0RERUIyQUQ2OUY4QkQ1MEYyMzg2Ci06MTAyNjgwMDA2OUU5NDcxOTk0OTE3RTlDODNGQjM4MEYwRjYzNDlDNzEyCi06MTAyNjkwMDBGOUM0MTk4OTI1NkMxMkM0MDdCN0E5NkNCMEEwODI1NDdCCi06MTAyNkEwMDBEMDFCRThCNUYyRTNFOTM5M0JBOTUwM0ZDM0VBNTY0QkVBCi06MTAyNkIwMDBCNzJDNjRDQTM3RTRGOTc3OEJCNkJEMzkwNzNGRTM3OUE1Ci06MTAyNkMwMDAzM0NGNDhEMjFDRUVCQTEyREQ3RkZBM0RFNDRBNUE4MjdCCi06MTAyNkQwMDBFNkExRDJCREZFMTU2MEYwRjMwNjQ4NzFGOTIxRThFN0U2Ci06MTAyNkUwMDBCMjA5QzZCOEJDMDYyNkI5NkM4NjY5MkU1QkUwMkM5Nzg5Ci06MTAyNkYwMDA2QjQxOTc2OTkyNzU2MENBQzA1NzM3RDM1Q0JGMEUzMjgxCi06MTAyNzAwMDA1Q0I2NDNCQTlERUU5NzBGRDVFQzVENEJFN0QxMkQyRTBECi06MTAyNzEwMDAzQUQ5NzQyRUExRjc4QzJCNkQ3QUQ4NzQyRjI3RTM1REVDCi06MTAyNzIwMDBCMzM4NUZCMzIxNjE4RjNCNjM3OUY2MUYwMjAxODE5QjUwCi06MTAyNzMwMDA2RDdGREIxRTY3MjExQzdDQjlGMDlBOEQzM0ZGMTdDRkFDCi06MTAyNzQwMDBBNTg4MTY5MDQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDczCi06MTAyNzUwMDAwMDAwMDAxODAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDIxCi06MTAyNzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjgwMDAwMDAwMDQxCi06MTAyNzcwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDQ5Ci06MTAyNzgwMDAwMDAwMDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDE5Ci06MTAyNzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDMxCi06MTAyN0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5Ci06MTAyN0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE5Ci06MTAyN0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5Ci06MTAyN0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY5Ci06MTAyN0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU5Ci06MTAyN0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ5Ci06MTAyODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM4Ci06MTAyODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI4Ci06MTAyODIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE4Ci06MTAyODMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk4Ci06MTAyODQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg4Ci06MTAyODUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc4Ci06MTAyODYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY4Ci06MTAyODcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU4Ci06MTAyODgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ4Ci06MTAyODkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM4Ci06MTAyOEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI4Ci06MTAyOEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkwMDAwMDEwMDAwMDc4Ci06MTAyOEMwMDAwMDAwMDAwODAwMDA5MDA4MDAxMDAwMDAwMDAwMDAwMjU2Ci06MTAyOEQwMDAwMDAwOTAwMDAwMTAwMDAwMDAwMDAwMTAwMDAwOURBODAzCi06MTAyOEUwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMEUwCi06MTAyOEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ4Ci06MTAyOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTFBMDk2Ci06MTAyOTEwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDkzQzAwMDAxMDAwNDU3Ci06MTAyOTIwMDAwMDAwMDAwMTAwMDA5M0M4MDAwMDAwMDAwMDAwMDAwMjQ5Ci06MTAyOTMwMDAwMDAwOTNEMDAwMDAwMDAwMDAwMDAwMDgwMDAwOTNENEM1Ci06MTAyOTQwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDk0OTgwMDAwMDAwMDU5Ci06MTAyOTUwMDAwMDAwMDAwODAwMDA5M0Q4MDAwODAwMDAwMDAwMDAwOEY0Ci06MTAyOTYwMDAwMDAwOUIzODAwNDAwMDAwMDAwMDAwNDAwMDAwOTQxODY4Ci06MTAyOTcwMDAwMDA4MDAwMDAwMDAwMDA4MDAwMDk0NTgwMDA4MDAwMDUzCi06MTAyOTgwMDAwMDAwMDAwODAwMDA5NEE4MDBDODAwMDAwMDAwMDA5OEEzCi06MTAyOTkwMDAwMDAwOTYzODAwOTgwMDAwMDAwMDAwMjgwMDAwOTY3ODlCCi06MTAyOUEwMDAwMDk4MDAwMDAwMDAwMDI4MDAwMEMwMDAwNTQwMDAzMDMyCi06MTAyOUIwMDAwMDAwMDU0MDAwMDBDQjIwMDAwODAwMDAwMDAwMDAwMURFCi06MTAyOUMwMDAwMDAwQ0IyMTAwMDgwMDAwMDAwMDAwMDEwMDAwMjAwOEVBCi06MTAyOUQwMDAwMDEwMDAwMDAwMDAwMDEwMDAwMDIwMDAwMDAwMDAwMEI3Ci06MTAyOUUwMDAwMDAwMDAwODAwMDA5RDYwMDAwODAwMDAwMDAwMDAwMkQ4Ci06MTAyOUYwMDAwMDAwOURBMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDk5Ci06MTAyQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM2Ci06MTAyQTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI2Ci06MTAyQTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE2Ci06MTAyQTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk2Ci06MTAyQTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg2Ci06MTAyQTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc2Ci06MTAyQTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY2Ci06MTAyQTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU2Ci06MTAyQTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ2Ci06MTAyQTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM2Ci06MTAyQUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI2Ci06MTAyQUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE2Ci06MTAyQUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2Ci06MTAyQUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY2Ci06MTAyQUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU2Ci06MTAyQUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ2Ci06MTAyQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM1Ci06MTAyQjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI1Ci06MTAyQjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE1Ci06MTAyQjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk1Ci06MTAyQjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg1Ci06MTAyQjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc1Ci06MTAyQjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY1Ci06MTAyQjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU1Ci06MTAyQjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ1Ci06MTAyQjkwMDAwMDAwMDAwMDAwMDAxMkM4MDA4MDAwMDAwMDAwMDA4MDVCCi06MTAyQkEwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwQTAwMDg0Ci06MTAyQkIwMDAwNzEwMDAwMDAwMDAwNzEwMDAwMDFFQzgwMDAwMDAwMDAxCi06MTAyQkMwMDAwMDAwMDAwODAwMDBBRUMwMDAwODAwMDAwMDAwMDAwODdGCi06MTAyQkQwMDAwMDAwQUU0MDAwMDgwMDAwMDAwMDAwMDgwMDAwQUU4MEM5Ci06MTAyQkUwMDAwMDA4MDAwMDAwMDAwMDA4MDAwMDIwMDgwMDEwMDAwMDlECi06MTAyQkYwMDAwMDAwMDAxMDAwMDAyMDAwMDAwMDAwMDAwMDAwMDAwODlECi06MTAyQzAwMDAwMDAwQTAxMDA3MTAwMDQwMDAwMDAwNDAwMDAwQUY0MDhFCi06MTAyQzEwMDAwMDA4MDAwMDAwMDAwMDAxMDAwMEFGNDEwMDA4MDAwMEIzCi06MTAyQzIwMDAwMDAwMDAwMTAwMDAxRUQwMDAwMDAwMDAwMDAwMDAwMUI0Ci06MTAyQzMwMDAwMDAwMUVEODAwMDAwMDAwMDAwMDAwMDIwMDAwMUVEQUE0Ci06MTAyQzQwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDEyQjAwMDA4MDAwMEI4Ci06MTAyQzUwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZDCi06MTAyQzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY0Ci06MTAyQzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU0Ci06MTAyQzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ0Ci06MTAyQzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM0Ci06MTAyQ0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI0Ci06MTAyQ0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE0Ci06MTAyQ0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0Ci06MTAyQ0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY0Ci06MTAyQ0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU0Ci06MTAyQ0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ0Ci06MTAyRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMzCi06MTAyRDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIzCi06MTAyRDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEzCi06MTAyRDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkzCi06MTAyRDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgzCi06MTAyRDUwMDAwMDAwQjAwMDAwMTgwMDAwMDAwMDAwMTgwMDAwQjMwMEUwCi06MTAyRDYwMDAwMDQwMDAwMDAwMDAwMDQwMDAwMEIzMDAwMDQwMDAwMkVFCi06MTAyRDcwMDAwMDAwMDAwMTAwMDBCMzAxMDA0MDAwMDIwMDAwMDAwMDVDCi06MTAyRDgwMDAwMDAwODAwMDAwNDAwMDAwMDAwMDAwNDAwMDAwMDAwMDQzCi06MTAyRDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDA4MDA0MDZCCi06MTAyREEwMDAwMDAwMDAwNDAwMDA4MDA0MDAwODAwNDAwMDAwMDAwNDRGCi06MTAyREIwMDAwMDAwQkIwMDAwMjgwMDAwMDAwMDAwMjgwMDAwQkM0MDBDCi06MTAyREMwMDAwMDEwMDAwMDAwMDAwMDEwMDAwMDg4MDAwMDgwMDAwMERCCi06MTAyREQwMDAwMDAwMDA4MDAwMDA4ODAwMDAwODAwODAwMDAwMDAwMjYxCi06MTAyREUwMDAwMDAwOEMwMDAwMjAwMDAwMDAwMDAwMjAwMDAwMjAwOEVGCi06MTAyREYwMDAwMDEwMDAwMDAwMDAwMDEwMDAwMDIwMDAwMDAwMDAwMDkzCi06MTAyRTAwMDAwMDAwMDAwODAwMDAxMTA4MDAwODAwMDAwMDAwMDAwODkxCi06MTAyRTEwMDAwMDAwMTE2ODAwMDgwMDAwMDAwMDAwMDgwMDAwMTFBODcwCi06MTAyRTIwMDAwMDA4MDAwMDAwMDAwMDA4MDAwMDEyNzAwMDA4MDAwMDA4Ci06MTAyRTMwMDAwMDAwMDAwMTAwMDAxMjcxMDAwODAwMDAwMDAwMDAwMTA1Ci06MTAyRTQwMDAwMDAwOEQwMDAwMTAwMDA0MDAwMDAwMDQwMDAwMTMyMEFBCi06MTAyRTUwMDAwMDMwMDAxODAwMDAwMDEwMDAwMDEzMjgwMDMwMDAxODk3Ci06MTAyRTYwMDAwMDAwMDAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwCi06MTAyRTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTFFODU5Ci06MTAyRTgwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDQxCi06MTAyRTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMyCi06MTAyRUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIyCi06MTAyRUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyCi06MTAyRUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyCi06MTAyRUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYyCi06MTAyRUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUyCi06MTAyRUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQyCi06MTAyRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMxCi06MTAyRjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIxCi06MTAyRjIwMDAwMDAwMDAwMDAwMDA4MzA4MDA4MDAwMDAwMDAwMDA4MDE2Ci06MTAyRjMwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMjAwODY4Ci06MTAyRjQwMDAwMDEwMDAwMDAwMDAwMDEwMDAwMDIwMDAwMDAwMDAwMDQxCi06MTAyRjUwMDAwMDAwMDAwODAwMDA4RDEwMDAwODAwMDAwMDAwMDAwOEJDCi06MTAyRjYwMDAwMDAwOEQ3MDAwMDgwMDAwMDAwMDAwMDgwMDAwODQ1MDgwCi06MTAyRjcwMDAwNDYwMDAyODAwMDAwNDYwMDAwMDhFQTAwMDA4MDAwMDJCCi06MTAyRjgwMDAwMDAwMDAwMTAwMDA4RUExMDAwODAwMDAwMDAwMDAwMTA4Ci06MTAyRjkwMDAwMDAwODQwODAwMDgwMDAwMDAwMDAwMDgwMDAwODQ0OEM5Ci06MTAyRkEwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDhERjQwMDA4MDAwMDk3Ci06MTAyRkIwMDAwMDAwMDAwMjAwMDA4REY2MDAwODAwMDAwMDAwMDAwMjgyCi06MTAyRkMwMDAwMDAwOEUwNDAwMTAwMDAwMDAwMDAwMDQwMDAwMDAwMDVCCi06MTAyRkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYxCi06MTAyRkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUxCi06MTAyRkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQxCi06MTAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMwCi06MTAzMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIwCi06MTAzMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwCi06MTAzMDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkwCi06MTAzMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwCi06MTAzMDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcwCi06MTAzMDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwCi06MTAzMDcwMDAwMDAwMDAwMDAwMDAzMDAwMDA0MDAwMDAwMDAwMDAwOEQ4Ci06MTAzMDgwMDAwMDAwMzAwODAwNDAwMDAwMDAwMDAwMjgwMDAwMzM5MERECi06MTAzMDkwMDAwMUMwMDAxMDAwMDAwMDA4MDAwMDMyMDAwMDIwMDAwMDA1Ci06MTAzMEEwMDAwMDAwMDAyMDAwMDAzNzIwMDAwMDAwMDAwMDAwMDAwOEExCi06MTAzMEIwMDAwMDAwMTAyMDA2MjAwMDM4MDAwMDAwMDgwMDAwQTAwMERBCi06MTAzMEMwMDAwMDAwMDAwMDAwMDAyMDAwMDAwMDNFQTkwMDAwMDAwMEY5Ci06MTAzMEQwMDAwMDAwMDAwMTAwMDAzRUM4MDAwMDAwMDAwMDAwMDAwMkU3Ci06MTAzMEUwMDAwMDAwMUM0MDAwRTAwMDA4MDAwMDAwMDgwMDAwMDAwMDk0Ci06MTAzMEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwMDAwMDA4MDAwMDg4Ci06MTAzMTAwMDAwMDAwMDAwMTAwMDA0MDAxMDAwODAwMDAwMDAwMDAwMTc0Ci06MTAzMTEwMDAwMDAwNDA0MDAwMDgwMDA0MDAwMDAwMDIwMDAwNDA2MDgxCi06MTAzMTIwMDAwMDA4MDAwNDAwMDAwMDA0MDAwMDQwMDAwMDA4MDAwMDQ3Ci06MTAzMTMwMDAwMDAwMDAwNDAwMDA0MDA0MDAwODAwMDAwMDAwMDAwNDNCCi06MTAzMTQwMDAwMDAwNDA0MDAwMDAwMDAwMDAwMDAwMDgwMDAwNDA0ODZGCi06MTAzMTUwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDgwMDAwMDAwMDAwMEU3Ci06MTAzMTYwMDAwMDAwMDAxMDAwMDA1MDQwMDAwMTAwMDQwMDAwMDAwMUI5Ci06MTAzMTcwMDAwMDAwNTAwMDAwMDAwMDAwMDAwMDAwMjAwMDAwNTAwODg3Ci06MTAzMTgwMDAwMDEwMDAwMDAwMDAwMDA0MDAwMDUwMEMwMDEwMDAwMEJGCi06MTAzMTkwMDAwMDAwMDAwMTAwMDA1MkM3MDAwMDAwMDAwMDAwMDAwMTE0Ci06MTAzMUEwMDAwMDAwNTJDNjAwMDAwMDAwMDAwMDAwMDEwMDAwMzAwMEQ2Ci06MTAzMUIwMDAwMDMwMDAxODAwMDAwMDA0MDAwMDMwMDQwMDMwMDAxODQ3Ci06MTAzMUMwMDAwMDAwMDAwNDAwMDAzMDA4MDAzMDAwMTgwMDAwMDAwMjc5Ci06MTAzMUQwMDAwMDAwMzAwQTAwMzAwMDE4MDAwMDAwMDIwMDAwMzAwQzJGCi06MTAzMUUwMDAwMDMwMDAxODAwMDAwMDAxMDAwMDMwMEQwMDMwMDAxODExCi06MTAzMUYwMDAwMDAwMDAwMTAwMDAzMDBFMDAzMDAwMTgwMDAwMDAwMTQ3Ci06MTAzMjAwMDAwMDAwMzAxMDAwMzAwMDE4MDAwMDAwMDQwMDAwMzAxNEVFCi06MTAzMjEwMDAwMDMwMDAxODAwMDAwMDA0MDAwMDUwMDAwMTAwMDA4MDkxCi06MTAzMjIwMDAwMDA4MDAwNDAwMDA1MDA0MDEwMDAwODAwMDA4MDAwNEIxCi06MTAzMjMwMDAwMDAwMDAwQTAwMDAwMDAwMDAwMDAwMDAwMDAwNTA2OENDCi06MTAzMjQwMDAwMTAwMDA4MDAwMDAwMDAxMDAwMDUwNjkwMTAwMDA4MEMyCi06MTAzMjUwMDAwMDAwMDAwMTAwMDA1MDZDMDEwMDAwODAwMDAwMDAwMjJFCi06MTAzMjYwMDAwMDAwNTA2RTAxMDAwMDgwMDAwMDAwMDIwMDAwNTA3MDVECi06MTAzMjcwMDAwMTAwMDA4MDAwMDAwMDA0MDAwMDUwNzQwMTAwMDA4MDg0Ci06MTAzMjgwMDAwMDAwMDAwNDAwMDA1MDY2MDEwMDAwODAwMDAwMDAwMjAxCi06MTAzMjkwMDAwMDAwNTA2NDAxMDAwMDgwMDAwMDAwMDEwMDAwNTA2MDQ4Ci06MTAzMkEwMDAwMTAwMDA4MDAwMDAwMDAyMDAwMDUwNjIwMTAwMDA4MDY4Ci06MTAzMkIwMDAwMDAwMDAwMjAwMDA1MDUwMDEwMDAwODAwMDAwMDAwNEU3Ci06MTAzMkMwMDAwMDAwNTA1NDAxMDAwMDgwMDAwMDAwMDQwMDAwNTA1ODJECi06MTAzMkQwMDAwMTAwMDA4MDAwMDAwMDA0MDAwMDUwNUMwMTAwMDA4MDNDCi06MTAzMkUwMDAwMDAwMDAwNDAwMDA1MDdDMDEwMDAwODAwMDAwMDAwMThDCi06MTAzMkYwMDAwMDAwNTA3RDAxMDAwMDgwMDAwMDAwMDEwMDAwNDAxODI3Ci06MTAzMzAwMDAwMDEwMDAwMDAwMDAwMDA0MDAwMDQwOTAwMDEwMDAwMEM5Ci06MTAzMzEwMDAwMDAwMDAwNDAwMDA0MDk4MDAxMDAwMDAwMDAwMDAwNEJECi06MTAzMzIwMDAwMDAwNDExMDAwMDAwMDAwMDAwMDAwMDIwMDAwNDExMkY3Ci06MTAzMzMwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDQxMTQwMDAwMDAwMDM2Ci06MTAzMzQwMDAwMDAwMDAwMjAwMDA0MTE2MDAwMDAwMDAwMDAwMDAwMjIyCi06MTAzMzUwMDAwMDAwNjA0MDAwMDgwMDAwMDAwMDAwMDIwMDAwNjA0MjIxCi06MTAzMzYwMDAwMDA4MDAwMDAwMDAwMDAyMDAwMDYwNDQwMDA4MDAwMEE3Ci06MTAzMzcwMDAwMDAwMDAwNDAwMDA2MDgwMDAwODAwMDAwMDAwMDAwODU5Ci06MTAzMzgwMDAwMDAwNjBDMDAwNDAwMDA4MDAwMDAwMDgwMDAwNjAwMDZECi06MTAzMzkwMDAwMDA4MDAwMDAwMDAwMDAyMDAwMDYwMDIwMDA4MDAwMEI5Ci06MTAzM0EwMDAwMDAwMDAwMTAwMDA2MDA0MDAwODAwMDAwMDAwMDAwMkFFCi06MTAzM0IwMDAwMDAwNjM0MDAwMDgwMDAwMDAwMDAwMDgwMDAwNjM4MDc3Ci06MTAzM0MwMDAwMDA4MDAwMDAwMDAwMDA0MDAwMDYzODQwMDA4MDAwMDAyCi06MTAzM0QwMDAwMDAwMDAwMTAwMDA2M0MwMDAwODAwMDAwMDAwMDAwMkJGCi06MTAzM0UwMDAwMDAwNjNDNDAwMDgwMDAwMDAwMDAwMDIwMDAwNjQwMDQ4Ci06MTAzM0YwMDAwMDA4MDAwMDAwMDAwMDA0MDAwMDcwMDAwMDEwMDAwMDQxCi06MTAzNDAwMDAwMDAwMDAwNDAwMDA3MDA0MDAxMDAwMDAwMDAwMDAwNDMwCi06MTAzNDEwMDAwMDAwNzAwODAwMTAwMDAwMDAwMDAwMDQwMDAwNzAwMEIwCi06MTAzNDIwMDAwMDA4MDAwMDAwMDAwMDAyMDAwMDcwMDIwMDA4MDAwMDE4Ci06MTAzNDMwMDAwMDAwMDAwMTAwMDA3MDA0MDAwODAwMDAwMDAwMDAwMjBECi06MTAzNDQwMDAwMDAwNzA0MDAwMDgwMDAwMDAwMDAwMDIwMDAwNzA0NDBFCi06MTAzNDUwMDAwMDA4MDAwMDAwMDAwMDAyMDAwMDcwNDYwMDA4MDAwMEE0Ci06MTAzNDYwMDAwMDAwMDAwMjAwMDA3NjQ4MDAwODAwMDAwMDAwMDAwODhDCi06MTAzNDcwMDAwMDAwNzA4MDAwMDgwMDAwMDAwMDAwMDIwMDAwNzA4NDVFCi06MTAzNDgwMDAwMDA4MDAwMDAwMDAwMDAyMDAwMDc2ODgwMDA4MDAwMDJDCi06MTAzNDkwMDAwMDAwMDAwODAwMDA4MDQwMDAwODAwMDAwMDAwMDAwMTVCCi06MTAzNEEwMDAwMDAwODA0MTAwMDgwMDAwMDAwMDAwMDEwMDAwODA0MjkwCi06MTAzNEIwMDAwMDA4MDAwMDAwMDAwMDAxMDAwMDgwNDMwMDA4MDAwMDM4Ci06MTAzNEMwMDAwMDAwMDAwMTAwMDA4MDAwMDAwODAwMDAwMDAwMDAwMjcxCi06MTAzNEQwMDAwMDAwODAwMjAwMDgwMDAwMDAwMDAwMDEwMDAwODAwNERECi06MTAzNEUwMDAwMDA4MDAwMDAwMDAwMDAyMDAwMDgwQzAwMDA4MDAwMDhBCi06MTAzNEYwMDAwMDAwMDAwMjAwMDA4MEMyMDAwODAwMDAwMDAwMDAwMjdFCi06MTAzNTAwMDAwMDAwODBDNDAwMDgwMDAwMDAwMDAwMDIwMDAwODA4MDZECi06MTAzNTEwMDAwMDA4MDAwMDAwMDAwMDAxMDAwMDgwODEwMDA4MDAwMDk5Ci06MTAzNTIwMDAwMDAwMDAwMTAwMDA4MDgyMDAwODAwMDAwMDAwMDAwMThGCi06MTAzNTMwMDAwMDAwODA4MzAwMDgwMDAwMDAwMDAwMDEwMDAwODA4NDdCCi06MTAzNTQwMDAwMDA4MDAwMDAwMDAwMDAxMDAwMDgwODUwMDA4MDAwMDY1Ci06MTAzNTUwMDAwMDAwMDAwMTAwMDA4MDg2MDAwODAwMDAwMDAwMDAwMTVCCi06MTAzNTYwMDAwMDAwNjAwMDAwMDgwMDAwMDAwMDAwMDIwMDAwNjAwMjhGCi06MTAzNTcwMDAwMDA4MDAwMDAwMDAwMDAxMDAwMDYwMDQwMDA4MDAwMEQ2Ci06MTAzNTgwMDAwMDAwMDAwMjAwMDA2MDQyMDBDMDAwMTgwMDAwMDAwMkJECi06MTAzNTkwMDAwMDAwNjA0MDAwQzAwMDE4MDAwMDAwMDIwMDAwNjA0QzA1Ci06MTAzNUEwMDAwMEMwMDAxODAwMDAwMDA4MDAwMDYwNDQwMEMwMDAxOEJGCi06MTAzNUIwMDAwMDAwMDAwODAwMDA2MDU3MDBDMDAwMTgwMDAwMDAwMTczCi06MTAzNUMwMDAwMDAwNjA1NDAwQzAwMDE4MDAwMDAwMDIwMDAwNjA1NkI3Ci06MTAzNUQwMDAwMEMwMDAxODAwMDAwMDAxMDAwMDY2NDAwMDA4MDAwMDY0Ci06MTAzNUUwMDAwMDAwMDAwODAwMDA2NjgwMDAwODAwMDAwMDAwMDAwOERECi06MTAzNUYwMDAwMDAwNjZDMDAwMDgwMDAwMDAwMDAwMDgwMDAwRDk0MjdBCi06MTAzNjAwMDAwMDE4MDAwMDAwMDAwMDAyMDAwMERFNDAwMDAwMDAwMDgyCi06MTAzNjEwMDAwMDAwMDAwMDAwMDBFMDAwMDAwMDAwMDAwMDAwMDAwNEM2Ci06MTAzNjIwMDAwMDAwREQ0MDAwMDAwMDAwMDAwMDAwMDQwMDAwREQ0NDU4Ci06MTAzNjMwMDAwMDAwMDAwMDAwMDAwMDA0MDAwMERENDgwMDAwMDAwMDYxCi06MTAzNjQwMDAwMDAwMDAwNDAwMDBERDRDMDAwMDAwMDAwMDAwMDAwNDQ5Ci06MTAzNjUwMDAwMDAwREQ1MDAwMDAwMDAwMDAwMDAwMDQwMDAwREQ1NDA4Ci06MTAzNjYwMDAwMDAwMDAwMDAwMDAwMDA0MDAwMERENTgwMDAwMDAwMDIxCi06MTAzNjcwMDAwMDAwMDAwNDAwMDBERDQwMDAwMDAwMDAwMDAwMDAyMDA5Ci06MTAzNjgwMDAwMDAwREEwMDAwMDAwMDAwMDAwMDAwMDQwMDAwREEwMDgyCi06MTAzNjkwMDAwMDAwMDAwMDAwMDAwMDY4MDAwMEJCNjAwMDAwMDAwMEE3Ci06MTAzNkEwMDAwMDAwMDAwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwNDQ2Ci06MTAzNkIwMDAwMDAwQjBDMDAwMDAwMDAwMDAwMDAwMDQwMDAwQjBDNDIyCi06MTAzNkMwMDAwMDAwMDAwMDAwMDAwMDA0MDAwMEIwQzgwMDAwMDAwMDdFCi06MTAzNkQwMDAwMDAwMDAwNDAwMDBCMEMwMDAwMDAwMDAwMDAwMDAxMDY2Ci06MTAzNkUwMDAwMDAwRDZCMDAwMDAwMDAwMDAwMDAwMDQwMDAwRDZCNEM2Ci06MTAzNkYwMDAwMDAwMDAwMDAwMDAwMDA0MDAwMEQ2QjgwMDAwMDAwMDM4Ci06MTAzNzAwMDAwMDAwMDAwNDAwMDBENkJDMDAwMDAwMDAwMDAwMDAwNDFGCi06MTAzNzEwMDAwMDAwRDZCMDAwMDAwMDAwMDAwMDAwMTAwMDAwRDM0OEY4Ci06MTAzNzIwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMEQzNTgwMDAwMDAwMDY2Ci06MTAzNzMwMDAwMDAwMDA4MDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMEY5Ci06MTAzNzQwMDAwMDAwRDM1ODAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDQ2Ci06MDgzNzUwMDAwNjAwMjIwMDAwMDAwMDAwNDkKLTowMDAwMDAwMUZGCmRpZmYgLS1naXQgYS9maXJtd2FyZS9ibngyeC9ibngyeC1lMWgtNi4yLjUuMC5mdy5paGV4IGIvZmlybXdhcmUvYm54MngvYm54MngtZTFoLTYuMi41LjAuZncuaWhleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjA0ZGY2Ci0tLSAvZGV2L251bGwKKysrIGIvZmlybXdhcmUvYm54MngvYm54MngtZTFoLTYuMi41LjAuZncuaWhleApAQCAtMCwwICsxLDEzMTgxIEBACis6MTAwMDAwMDAwMDAwNEY0ODAwMDAwMDY4MDAwMDA3MEMwMDAwNEZCOEQ3Cis6MTAwMDEwMDAwMDAwMUVENDAwMDA1NkM4MDAwMDAwOTQwMDAwNzVBMDI3Cis6MTAwMDIwMDAwMDAwOUY0QzAwMDA3NjM4MDAwMDAwQ0MwMDAxMTU4OENECis6MTAwMDMwMDAwMDAwREM0QzAwMDExNjU4MDAwMDAwOTQwMDAxRjJBOEZBCis6MTAwMDQwMDAwMDAwNDAwMDAwMDFGMzQwMDAwMDAwQTQwMDAyMzM0ODFCCis6MTAwMDUwMDAwMDAwRjM4QzAwMDIzM0YwMDAwMDBGRkMwMDAzMjc4MDQ3Cis6MTAwMDYwMDAwMDAwMDAwNDAwMDMzNzgwMDIwNDAwNDgwMDAwMDAwRjc1Cis6MTAwMDcwMDAwMjA0MDA1NDAwMDAwMDQ1MDIwNDAwNUMwMDAwMDAwNjc5Cis6MTAwMDgwMDAwMjA0MDA3MDAwMDAwMDA0MDIwNDAwNzgwMDAwMDAwMDc4Cis6MTAwMDkwMDAwMjA0MDA3QzEyMTcwMDAwMDIwNDAwODAyMjE3MDAwMEY2Cis6MTAwMEEwMDAwMjA0MDA4NDMyMTcwMDAwMDYwNDAwODgwMDAwMDAwNUU2Cis6MTAwMEIwMDAwMjA0MDA5QzEyMTUwMDAwMDIwNDAwQTAyMjE1MDAwMDlBCis6MTAwMEMwMDAwMjA0MDBBNDMyMTUwMDAwMDYwNDAwQTgwMDAwMDAwNDg5Cis6MTAwMEQwMDAwMjA0MDBCODAyMTAwMDAwMDIwNDAwQkMwMDEwMDAwMDdFCis6MTAwMEUwMDAwMjA0MDBDMDEwMTAwMDAwMDIwNDAwQzQyMDEwMDAwMDMwCis6MTAwMEYwMDAwMjA0MDBDODMwMTAwMDAwMDIwNDAwQ0M0MDEwMDAwMEQwCis6MTAwMTAwMDAwNjA0MDBEMDAwMDAwMDAzMDIwNDAwREMwMDEwMDAwMDIwCis6MTAwMTEwMDAwMjA0MDBFMDEyMTQwMDAwMDIwNDAwRTQyMjE0MDAwMEIzCis6MTAwMTIwMDAwMjA0MDBFODMyMTQwMDAwMDIwNDAwRUM0MjE0MDAwMDUzCis6MTAwMTMwMDAwNjA0MDBGMDAwMDAwMDAzMDEwNDAxMjQwMDAwMDAwMDk4Cis6MTAwMTQwMDAwMTA0MDEyODAwMDAwMDAwMDEwNDAxMkMwMDAwMDAwMDRGCis6MTAwMTUwMDAwMTA0MDEzMDAwMDAwMDAwMDIwNDAxRDAwMDAwODkwNjAzCis6MTAwMTYwMDAwMjA0MDAwNDAwMDAwMEZGMDIwNDAwMDgwMDAwMDBGRjc5Cis6MTAwMTcwMDAwMjA0MDAwQzAwMDAwMEZGMDIwNDAwMTAwMDAwMDBGRjU5Cis6MTAwMTgwMDAwMjA0MDAxNDAwMDAwMDdGMDIwNDAwMTgwMDAwMDBGRkI5Cis6MTAwMTkwMDAwMjA0MDAxQzAwMDAwMEZGMDIwNDAwMjAwMDAwMDBGRjE5Cis6MTAwMUEwMDAwMjA0MDAyNDAwMDAwMDNFMDIwNDAwMjgwMDAwMDAwMEI5Cis6MTAwMUIwMDAwMjA0MDAyQzAwMDAwMDNGMDIwNDAwMzAwMDAwMDAzRjU5Cis6MTAwMUMwMDAwMjA0MDAzNDAwMDAwMDNGMDIwNDAwMzgwMDAwMDAzRjM5Cis6MTAwMUQwMDAwMjA0MDAzQzAwMDAwMDNGMDIwNDAwNDAwMDAwMDAzRjE5Cis6MTAwMUUwMDAwMjA0MDA0NDAwMDAwMDNGMDIwNDA0Q0MwMDAwMDAwMUFGCis6MTAwMUYwMDAwMjA0MjAwODAwMDAwMjExMDIwNDIwMEMwMDAwMDIwMDhBCis6MTAwMjAwMDAwMjA0MjAxMDAwMDAwMjA0MDIwNDIwMTQwMDAwMDIxOTVECis6MTAwMjEwMDAwMjA0MjAxQzAwMDBGRkZGMDIwNDIwMjAwMDAwRkZGRjVBCis6MTAwMjIwMDAwMjA0MjAyNDAwMDBGRkZGMDIwNDIwMjgwMDAwRkZGRjNBCis6MTAwMjMwMDAwMjA0MjAzODAwMDAwMDIwMDYwNDIwM0MwMDAwMDAxRkJCCis6MTAwMjQwMDAwMjA0MjBCODAwMDAwMDAxMDYwNDIwQkMwMDAwMDA1RjhBCis6MTAwMjUwMDAwMjA0MjIzODA3RkZGRkZGMDIwNDIyM0MwMDAwMDAzRjk3Cis6MTAwMjYwMDAwMjA0MjI0MDA3RkZGRkZGMDIwNDIyNDQwMDAwMDAwRkE3Cis6MTAwMjcwMDAwMTA0MjI0ODAwMDAwMDAwMDEwNDIyNEMwMDAwMDAwMDlDCis6MTAwMjgwMDAwMTA0MjI1MDAwMDAwMDAwMDEwNDIyNTQwMDAwMDAwMDdDCis6MTAwMjkwMDAwMTA0MjI1ODAwMDAwMDAwMDEwNDIyNUMwMDAwMDAwMDVDCis6MTAwMkEwMDAwMTA0MjI2MDAwMDAwMDAwMDEwNDIyNjQwMDAwMDAwMDNDCis6MTAwMkIwMDAwMTA0MjI2ODAwMDAwMDAwMDEwNDIyNkMwMDAwMDAwMDFDCis6MTAwMkMwMDAwMTA0MjI3MDAwMDAwMDAwMDEwNDIyNzQwMDAwMDAwMEZDCis6MTAwMkQwMDAwMTA0MjI3ODAwMDAwMDAwMDEwNDIyN0MwMDAwMDAwMERDCis6MTAwMkUwMDAwQzA0MjAwMDAwMDAwM0U4MEEwNDIwMDAwMDAwMDAwMUM0Cis6MTAwMkYwMDAwQjA0MjAwMDAwMDAwMDBBMDYwNTQwMDAwMDAwMEQwMDZECis6MTAwMzAwMDAwMjA1MDA0NDAwMDAwMDIwMDIwNTAwNDgwMDAwMDAzMjAxCis6MTAwMzEwMDAwMjA1MDA5MDAyMTUwMDIwMDIwNTAwOTQwMjE1MDAyMDNECis6MTAwMzIwMDAwMjA1MDA5ODAwMDAwMDMwMDIwNTAwOUMwODEwMDAwMDQzCis6MTAwMzMwMDAwMjA1MDBBMDAwMDAwMDMzMDIwNTAwQTQwMDAwMDAzMDA4Cis6MTAwMzQwMDAwMjA1MDBBODAwMDAwMDMxMDIwNTAwQUMwMDAwMDAwMjE4Cis6MTAwMzUwMDAwMjA1MDBCMDAwMDAwMDA1MDIwNTAwQjQwMDAwMDAwNjIwCis6MTAwMzYwMDAwMjA1MDBCODAwMDAwMDAyMDIwNTAwQkMwMDAwMDAwMjA3Cis6MTAwMzcwMDAwMjA1MDBDMDAwMDAwMDAwMDIwNTAwQzQwMDAwMDAwNUU2Cis6MTAwMzgwMDAwMjA1MDBDODAwMDAwMDAyMDIwNTAwQ0MwMDAwMDAwMkM3Cis6MTAwMzkwMDAwMjA1MDBEMDAwMDAwMDAyMDIwNTAwRDQwMDAwMDAwMUE4Cis6MTAwM0EwMDAwMjA1MDExNDAwMDAwMDAxMDIwNTAxMUMwMDAwMDAwMTBCCis6MTAwM0IwMDAwMjA1MDEyMDAwMDAwMDAyMDIwNTAyMDQwMDAwMDAwMTA1Cis6MTAwM0MwMDAwMjA1MDIwQzAwMDAwMDQwMDIwNTAyMTAwMDAwMDA0MDdGCis6MTAwM0QwMDAwMjA1MDIxQzAwMDAwMDIwMDIwNTAyMjAwMDAwMDAxMzlDCis6MTAwM0UwMDAwMjA1MDIyNDAwMDAwMDIwMDYwNTAyNDAwMDAwMDAwQTY5Cis6MTAwM0YwMDAwNDA1MDI4MDAwMjAwMDAwMDIwNTAwNTAwMDAwMDAwN0Y0Cis6MTAwNDAwMDAwMjA1MDA1NDAwMDAwMDA3MDIwNTAwNTgwMDAwMDAwMDJCCis6MTAwNDEwMDAwMjA1MDA1QzAwMDAwMDA4MDIwNTAwNjAwMDAwMDAwMTA5Cis6MTAwNDIwMDAwNjA1MDA2NDAwMDAwMDAzMDIwNTAwRDgwMDAwMDAwNjc1Cis6MTAwNDMwMDAwMjA1MDAwNDAwMDAwMDAxMDIwNTAwMDgwMDAwMDAwMUEwCis6MTAwNDQwMDAwMjA1MDAwQzAwMDAwMDAxMDIwNTAwMTAwMDAwMDAwMTgwCis6MTAwNDUwMDAwMjA1MDAxNDAwMDAwMDAxMDIwNTAwMTgwMDAwMDAwMTYwCis6MTAwNDYwMDAwMjA1MDAxQzAwMDAwMDAxMDIwNTAwMjAwMDAwMDAwMTQwCis6MTAwNDcwMDAwMjA1MDAyNDAwMDAwMDAxMDIwNTAwMjgwMDAwMDAwMTIwCis6MTAwNDgwMDAwMjA1MDAyQzAwMDAwMDAxMDIwNTAwMzAwMDAwMDAwMTAwCis6MTAwNDkwMDAwMjA1MDAzNDAwMDAwMDAxMDIwNTAwMzgwMDAwMDAwMUUwCis6MTAwNEEwMDAwMjA1MDAzQzAwMDAwMDAxMDIwNTAwNDAwMDAwMDAwMUMwCis6MTAwNEIwMDAwMjA1MDBFMDAwMDAwMDBEMDIwNTAwRTgwMDAwMDAwMDU5Cis6MTAwNEMwMDAwMjA1MDBGMDAwMDAwMDAwMDIwNTAwRjgwMDAwMDAwMDM2Cis6MTAwNEQwMDAwMjA1MDBFNDAwMDAwMDJEMDIwNTAwRUMwMDAwMDAyMEYxCis6MTAwNEUwMDAwMjA1MDBGNDAwMDAwMDIwMDIwNTAwRkMwMDAwMDAyMENFCis6MTAwNEYwMDAwMjA1MDBFMDAwMDAwMDFEMDIwNTAwRTgwMDAwMDAxMEY5Cis6MTAwNTAwMDAwMjA1MDBGMDAwMDAwMDEwMDIwNTAwRjgwMDAwMDAxMEQ1Cis6MTAwNTEwMDAwMjA1MDBFNDAwMDAwMDNEMDIwNTAwRUMwMDAwMDAzMDkwCis6MTAwNTIwMDAwMjA1MDBGNDAwMDAwMDMwMDIwNTAwRkMwMDAwMDAzMDZECis6MTAwNTMwMDAwMjA1MDBFMDAwMDAwMDREMDIwNTAwRTgwMDAwMDA0MDU4Cis6MTAwNTQwMDAwMjA1MDBGMDAwMDAwMDQwMDIwNTAwRjgwMDAwMDA0MDM1Cis6MTAwNTUwMDAwMjA1MDBFNDAwMDAwMDZEMDIwNTAwRUMwMDAwMDA2MEYwCis6MTAwNTYwMDAwMjA1MDBGNDAwMDAwMDYwMDIwNTAwRkMwMDAwMDA2MENECis6MTAwNTcwMDAwMjA1MDBFMDAwMDAwMDVEMDIwNTAwRTgwMDAwMDA1MEY4Cis6MTAwNTgwMDAwMjA1MDBGMDAwMDAwMDUwMDIwNTAwRjgwMDAwMDA1MEQ1Cis6MTAwNTkwMDAwMjA1MDBFNDAwMDAwMDdEMDIwNTAwRUMwMDAwMDA3MDkwCis6MTAwNUEwMDAwMjA1MDBGNDAwMDAwMDcwMDIwNTAwRkMwMDAwMDA3MDZECis6MTAwNUIwMDAwNDA2MTAwMDAyMDAwMDIwMDIwNjAwREMwMDAwMDAwMTFBCis6MTAwNUMwMDAwMTA2MDBEODAwMDAwMDAwMDQwNjAyMDAwMDAzMDIyMDFCCis6MTAwNUQwMDAwMjA2MDBEQzAwMDAwMDAwMDEwNjAwQjgwMDAwMDAwMDc4Cis6MTAwNUUwMDAwMTA2MDBDODAwMDAwMDAwMDIwNjAxNkMwMDAwMDAwMEM3Cis6MTAwNUYwMDAwMTA2MDBCQzAwMDAwMDAwMDEwNjAwQ0MwMDAwMDAwMDY1Cis6MTAwNjAwMDAwMjA2MDE3MDAwMDAwMDAwMDcxODA0MDAwMDkxMDAwMEJECis6MTAwNjEwMDAwODE4MDdEODAwMDUwMjIzMDcxQzAwMDAyQkY3MDAwMDZDCis6MTAwNjIwMDAwNzFDODAwMDJERDEwQUZFMDcxRDAwMDAyRjQ2MTY3M0ZGCis6MTAwNjMwMDAwNzFEODAwMDE2MzQyMjQ1MDgxREIxMzA0OURBMDIyNTE1Cis6MTAwNjQwMDAwMTE4MDAwMDAwMDAwMDAwMDExODAwMDQwMDAwMDAwMDc0Cis6MTAwNjUwMDAwMTE4MDAwODAwMDAwMDAwMDExODAwMEMwMDAwMDAwMDU0Cis6MTAwNjYwMDAwMTE4MDAxMDAwMDAwMDAwMDExODAwMTQwMDAwMDAwMDM0Cis6MTAwNjcwMDAwMjE4MDAyMDAwMDAwMDAxMDIxODAwMjQwMDAwMDAwMkZGCis6MTAwNjgwMDAwMjE4MDAyODAwMDAwMDAzMDIxODAwMkMwMDAwMDAwMERGCis6MTAwNjkwMDAwMjE4MDAzMDAwMDAwMDA0MDIxODAwMzQwMDAwMDAwMUJECis6MTAwNkEwMDAwMjE4MDAzODAwMDAwMDAwMDIxODAwM0MwMDAwMDAwMUExCis6MTAwNkIwMDAwMjE4MDA0MDAwMDAwMDA0MDIxODAwNDQwMDAwMDAwMDdFCis6MTAwNkMwMDAwMjE4MDA0ODAwMDAwMDAxMDIxODAwNEMwMDAwMDAwMzVFCis6MTAwNkQwMDAwMjE4MDA1MDAwMDAwMDAwMDIxODAwNTQwMDAwMDAwMTQxCis6MTAwNkUwMDAwMjE4MDA1ODAwMDAwMDA0MDIxODAwNUMwMDAwMDAwMDFFCis6MTAwNkYwMDAwMjE4MDA2MDAwMDAwMDAxMDIxODAwNjQwMDAwMDAwM0ZFCis6MTAwNzAwMDAwMjE4MDA2ODAwMDAwMDAwMDIxODAwNkMwMDAwMDAwMUUwCis6MTAwNzEwMDAwMjE4MDA3MDAwMDAwMDA0MDIxODAwNzQwMDAwMDAwMEJECis6MTAwNzIwMDAwMjE4MDA3ODAwMDAwMDA0MDIxODAwN0MwMDAwMDAwMzlBCis6MTAwNzMwMDAwNjE4MDA4MDAwMDAwMDAyMDIxODAwQTQwMDAwM0ZGRjFECis6MTAwNzQwMDAwMjE4MDBBODAwMDAwM0ZGMDIxODAyMjQwMDAwMDAwMEE1Cis6MTAwNzUwMDAwMjE4MDIzNDAwMDAwMDAwMDIxODAyNEMwMDAwMDAwMEUxCis6MTAwNzYwMDAwMjE4MDJFNDAwMDAwMEZGMDYxODEwMDAwMDAwMDQwMDU4Cis6MTAwNzcwMDAwMjFCOEJDMDAwMDAwMDAxMDIxQjgwMDAwMDAwMDAzNDNGCis6MTAwNzgwMDAwMjFCODA0MDAwMDAwMDE4MDIxQjgwODAwMDAwMDAwQzRCCis6MTAwNzkwMDAwMjFCODBDMDAwMDAwMDIwMEMxQjgzMDAwMDA3QTEyMDZBCis6MTAwN0EwMDAwQTFCODMwMDAwMDAwMTM4MEIxQjgzMDAwMDAwMTM4ODI0Cis6MTAwN0IwMDAwQTFCODM0MDAwMDAwMDAwMEMxQjgzNDAwMDAwMDFGNDcyCis6MTAwN0MwMDAwQjFCODM0MDAwMDAwMDA1MDIxQjgzODAwMDA3QTEyMDUzCis6MTAwN0QwMDAwMjFCODNDMDAwMDAwMUY0MDIxQjE0ODAwMDAwMDAwMTEyCis6MTAwN0UwMDAwQTFCMTQ4MDAwMDAwMDAwMDYxQTEwMDAwMDAwMDNCMzZBCis6MTAwN0YwMDAwNDFBMUVDQzAwMDEwMjI3MDYxQTFFRDAwMDAwMDAwOEIxCis6MTAwODAwMDAwNjFBMjAwODAwMDAwMEM4MDYxQTIwMDAwMDAwMDAwMjk2Cis6MTAwODEwMDAwNDFBQUY0MDAwMTAwMjI4MDYxQTM3MTgwMDAwMDAwNDFFCis6MTAwODIwMDAwNjFBMzcxMDAwMDAwMDAyMDYxQTUwMDAwMDAwMDAwMkVECis6MTAwODMwMDAwNjFBNTAwODAwMDAwMDA0MDYxQTUwMTgwMDAwMDAwNEIwCis6MTAwODQwMDAwNjFBNTAyODAwMDAwMDA0MDYxQTUwMzgwMDAwMDAwNDYwCis6MTAwODUwMDAwNjFBNTA0ODAwMDAwMDA0MDYxQTUwNTgwMDAwMDAwNDEwCis6MTAwODYwMDAwNjFBNTA2ODAwMDAwMDA0MDYxQTUwNzgwMDAwMDAwMkMyCis6MTAwODcwMDAwNDFBNTJDMDAwMDIwMjM4MDYxQTQwNTAwMDAwMDAwNjU2Cis6MTAwODgwMDAwNDFBNDA2ODAwMDIwMjNBMDQxQTQwNDAwMDA0MDIzQzg0Cis6MTAwODkwMDAwNDFBODAwMDAwMDEwMjQwMDYxQTgwMDQwMDAwMDAwM0QwCis6MTAwOEEwMDAwNDFBODAxMDAwMDEwMjQxMDYxQTgwMTQwMDAwMDAwMzlGCis6MTAwOEIwMDAwNDFBODAyMDAwMDEwMjQyMDYxQTgwMjQwMDAwMDAwMzZFCis6MTAwOEMwMDAwNDFBODAzMDAwMDEwMjQzMDYxQTgwMzQwMDAwMDAwMzNECis6MTAwOEQwMDAwNDFBODA0MDAwMDEwMjQ0MDYxQTgwNDQwMDAwMDAwMzBDCis6MTAwOEUwMDAwNDFBODA1MDAwMDEwMjQ1MDYxQTgwNTQwMDAwMDAwM0RCCis6MTAwOEYwMDAwNDFBODA2MDAwMDEwMjQ2MDYxQTgwNjQwMDAwMDAwM0FBCis6MTAwOTAwMDAwNDFBODA3MDAwMDEwMjQ3MDYxQTgwNzQwMDAwMDAwMzc4Cis6MTAwOTEwMDAwNDFBODA4MDAwMDEwMjQ4MDYxQTgwODQwMDAwMDAwMzQ3Cis6MTAwOTIwMDAwNDFBODA5MDAwMDEwMjQ5MDYxQTgwOTQwMDAwMDAwMzE2Cis6MTAwOTMwMDAwNDFBODBBMDAwMDEwMjRBMDYxQTgwQTQwMDAwMDAwM0U1Cis6MTAwOTQwMDAwNDFBODBCMDAwMDEwMjRCMDYxQTgwQjQwMDAwMDAwM0I0Cis6MTAwOTUwMDAwNDFBODBDMDAwMDEwMjRDMDYxQTgwQzQwMDAwMDAwMzgzCis6MTAwOTYwMDAwNDFBODBEMDAwMDEwMjREMDYxQTgwRDQwMDAwMDAwMzUyCis6MTAwOTcwMDAwNDFBODBFMDAwMDEwMjRFMDYxQTgwRTQwMDAwMDAwMzIxCis6MTAwOTgwMDAwNDFBODBGMDAwMDEwMjRGMDYxQTgwRjQwMDAwMDAwM0YwCis6MTAwOTkwMDAwNDFBODEwMDAwMDEwMjUwMDYxQTgxMDQwMDAwMDAwM0JECis6MTAwOUEwMDAwNDFBODExMDAwMDEwMjUxMDYxQTgxMTQwMDAwMDAwMzhDCis6MTAwOUIwMDAwNDFBODEyMDAwMDEwMjUyMDYxQTgxMjQwMDAwMDAwMzVCCis6MTAwOUMwMDAwNDFBODEzMDAwMDEwMjUzMDYxQTgxMzQwMDAwMDAwMzJBCis6MTAwOUQwMDAwNDFBODE0MDAwMDEwMjU0MDYxQTgxNDQwMDAwMDAwM0Y5Cis6MTAwOUUwMDAwNDFBODE1MDAwMDEwMjU1MDYxQTgxNTQwMDAwMDAwM0M4Cis6MTAwOUYwMDAwNDFBODE2MDAwMDEwMjU2MDYxQTgxNjQwMDAwMDAwMzk3Cis6MTAwQTAwMDAwNDFBODE3MDAwMDEwMjU3MDYxQTgxNzQwMDAwMDAwMzY1Cis6MTAwQTEwMDAwNDFBODE4MDAwMDEwMjU4MDYxQTgxODQwMDAwMDAwMzM0Cis6MTAwQTIwMDAwNDFBODE5MDAwMDEwMjU5MDYxQTgxOTQwMDAwMDAwMzAzCis6MTAwQTMwMDAwNDFBODFBMDAwMDEwMjVBMDYxQTgxQTQwMDAwMDAwM0QyCis6MTAwQTQwMDAwNDFBODFCMDAwMDEwMjVCMDYxQTgxQjQwMDAwMDAwM0ExCis6MTAwQTUwMDAwNDFBODFDMDAwMDEwMjVDMDYxQTgxQzQwMDAwMDAwMzcwCis6MTAwQTYwMDAwNDFBODFEMDAwMDEwMjVEMDYxQTgxRDQwMDAwMDAwMzNGCis6MTAwQTcwMDAwNDFBODFFMDAwMDEwMjVFMDYxQTgxRTQwMDAwMDAwMzBFCis6MTAwQTgwMDAwNDFBODFGMDAwMDEwMjVGMDYxQTgxRjQwMDAwMDAwM0RECis6MTAwQTkwMDAwNDFBODIwMDAwMDEwMjYwMDYxQTgyMDQwMDAwMDAwM0FBCis6MTAwQUEwMDAwNDFBODIxMDAwMDEwMjYxMDYxQTgyMTQwMDAwMDAwMzc5Cis6MTAwQUIwMDAwNDFBODIyMDAwMDEwMjYyMDYxQTgyMjQwMDAwMDAwMzQ4Cis6MTAwQUMwMDAwNDFBODIzMDAwMDEwMjYzMDYxQTgyMzQwMDAwMDAwMzE3Cis6MTAwQUQwMDAwNDFBODI0MDAwMDEwMjY0MDYxQTgyNDQwMDAwMDAwM0U2Cis6MTAwQUUwMDAwNDFBODI1MDAwMDEwMjY1MDYxQTgyNTQwMDAwMDAwM0I1Cis6MTAwQUYwMDAwNDFBODI2MDAwMDEwMjY2MDYxQTgyNjQwMDAwMDAwMzg0Cis6MTAwQjAwMDAwNDFBODI3MDAwMDEwMjY3MDYxQTgyNzQwMDAwMDAwMzUyCis6MTAwQjEwMDAwNDFBODI4MDAwMDEwMjY4MDYxQTgyODQwMDAwMDAwMzIxCis6MTAwQjIwMDAwNDFBODI5MDAwMDEwMjY5MDYxQTgyOTQwMDAwMDAwM0YwCis6MTAwQjMwMDAwNDFBODJBMDAwMDEwMjZBMDYxQTgyQTQwMDAwMDAwM0JGCis6MTAwQjQwMDAwNDFBODJCMDAwMDEwMjZCMDYxQTgyQjQwMDAwMDAwMzhFCis6MTAwQjUwMDAwNDFBODJDMDAwMDEwMjZDMDYxQTgyQzQwMDAwMDAwMzVECis6MTAwQjYwMDAwNDFBODJEMDAwMDEwMjZEMDYxQTgyRDQwMDAwMDAwMzJDCis6MTAwQjcwMDAwNDFBODJFMDAwMDEwMjZFMDYxQTgyRTQwMDAwMDAwM0ZCCis6MTAwQjgwMDAwNDFBODJGMDAwMDEwMjZGMDYxQTgyRjQwMDAwMDAwM0NBCis6MTAwQjkwMDAwNDFBODMwMDAwMDEwMjcwMDYxQTgzMDQwMDAwMDAwMzk3Cis6MTAwQkEwMDAwNDFBODMxMDAwMDEwMjcxMDYxQTgzMTQwMDAwMDAwMzY2Cis6MTAwQkIwMDAwNDFBODMyMDAwMDEwMjcyMDYxQTgzMjQwMDAwMDAwMzM1Cis6MTAwQkMwMDAwNDFBODMzMDAwMDEwMjczMDYxQTgzMzQwMDAwMDAwMzA0Cis6MTAwQkQwMDAwNDFBODM0MDAwMDEwMjc0MDYxQTgzNDQwMDAwMDAwM0QzCis6MTAwQkUwMDAwNDFBODM1MDAwMDEwMjc1MDYxQTgzNTQwMDAwMDAwM0EyCis6MTAwQkYwMDAwNDFBODM2MDAwMDEwMjc2MDYxQTgzNjQwMDAwMDAwMzcxCis6MTAwQzAwMDAwNDFBODM3MDAwMDEwMjc3MDYxQTgzNzQwMDAwMDAwMzNGCis6MTAwQzEwMDAwNDFBODM4MDAwMDEwMjc4MDYxQTgzODQwMDAwMDAwMzBFCis6MTAwQzIwMDAwNDFBODM5MDAwMDEwMjc5MDYxQTgzOTQwMDAwMDAwM0RECis6MTAwQzMwMDAwNDFBODNBMDAwMDEwMjdBMDYxQTgzQTQwMDAwMDAwM0FDCis6MTAwQzQwMDAwNDFBODNCMDAwMDEwMjdCMDYxQTgzQjQwMDAwMDAwMzdCCis6MTAwQzUwMDAwNDFBODNDMDAwMDEwMjdDMDYxQTgzQzQwMDAwMDAwMzRBCis6MTAwQzYwMDAwNDFBODNEMDAwMDEwMjdEMDYxQTgzRDQwMDAwMDAwMzE5Cis6MTAwQzcwMDAwNDFBODNFMDAwMDEwMjdFMDYxQTgzRTQwMDAwMDAwM0U4Cis6MTAwQzgwMDAwNDFBODNGMDAwMDEwMjdGMDYxQTgzRjQwMDAwMDAwM0I3Cis6MTAwQzkwMDAwNDFBODQwMDAwMDEwMjgwMDYxQTg0MDQwMDAwMDAwMzg0Cis6MTAwQ0EwMDAwNDFBODQxMDAwMDEwMjgxMDYxQTg0MTQwMDAwMDAwMzUzCis6MTAwQ0IwMDAwNDFBODQyMDAwMDEwMjgyMDYxQTg0MjQwMDAwMDAwMzIyCis6MTAwQ0MwMDAwNDFBODQzMDAwMDEwMjgzMDYxQTg0MzQwMDAwMDAwM0YxCis6MTAwQ0QwMDAwNDFBODQ0MDAwMDEwMjg0MDYxQTg0NDQwMDAwMDAwM0MwCis6MTAwQ0UwMDAwNDFBODQ1MDAwMDEwMjg1MDYxQTg0NTQwMDAwMDAwMzhGCis6MTAwQ0YwMDAwNDFBODQ2MDAwMDEwMjg2MDYxQTg0NjQwMDAwMDAwMzVFCis6MTAwRDAwMDAwNDFBODQ3MDAwMDEwMjg3MDYxQTg0NzQwMDAwMDAwMzJDCis6MTAwRDEwMDAwNDFBODQ4MDAwMDEwMjg4MDYxQTg0ODQwMDAwMDAwM0ZCCis6MTAwRDIwMDAwNDFBODQ5MDAwMDEwMjg5MDYxQTg0OTQwMDAwMDAwM0NBCis6MTAwRDMwMDAwNDFBODRBMDAwMDEwMjhBMDYxQTg0QTQwMDAwMDAwMzk5Cis6MTAwRDQwMDAwNDFBODRCMDAwMDEwMjhCMDYxQTg0QjQwMDAwMDAwMzY4Cis6MTAwRDUwMDAwNDFBODRDMDAwMDEwMjhDMDYxQTg0QzQwMDAwMDAwMzM3Cis6MTAwRDYwMDAwNDFBODREMDAwMDEwMjhEMDYxQTg0RDQwMDAwMDAwMzA2Cis6MTAwRDcwMDAwNDFBODRFMDAwMDEwMjhFMDYxQTg0RTQwMDAwMDAwM0Q1Cis6MTAwRDgwMDAwNDFBODRGMDAwMDEwMjhGMDYxQTg0RjQwMDAwMDAwM0E0Cis6MTAwRDkwMDAwNDFBODUwMDAwMDEwMjkwMDYxQTg1MDQwMDAwMDAwMzcxCis6MTAwREEwMDAwNDFBODUxMDAwMDEwMjkxMDYxQTg1MTQwMDAwMDAwMzQwCis6MTAwREIwMDAwNDFBODUyMDAwMDEwMjkyMDYxQTg1MjQwMDAwMDAwMzBGCis6MTAwREMwMDAwNDFBODUzMDAwMDEwMjkzMDYxQTg1MzQwMDAwMDAwM0RFCis6MTAwREQwMDAwNDFBODU0MDAwMDEwMjk0MDYxQTg1NDQwMDAwMDAwM0FECis6MTAwREUwMDAwNDFBODU1MDAwMDEwMjk1MDYxQTg1NTQwMDAwMDAwMzdDCis6MTAwREYwMDAwNDFBODU2MDAwMDEwMjk2MDYxQTg1NjQwMDAwMDAwMzRCCis6MTAwRTAwMDAwNDFBODU3MDAwMDEwMjk3MDYxQTg1NzQwMDAwMDAwMzE5Cis6MTAwRTEwMDAwNDFBODU4MDAwMDEwMjk4MDYxQTg1ODQwMDAwMDAwM0U4Cis6MTAwRTIwMDAwNDFBODU5MDAwMDEwMjk5MDYxQTg1OTQwMDAwMDAwM0I3Cis6MTAwRTMwMDAwNDFBODVBMDAwMDEwMjlBMDYxQTg1QTQwMDAwMDAwMzg2Cis6MTAwRTQwMDAwNDFBODVCMDAwMDEwMjlCMDYxQTg1QjQwMDAwMDAwMzU1Cis6MTAwRTUwMDAwNDFBODVDMDAwMDEwMjlDMDYxQTg1QzQwMDAwMDAwMzI0Cis6MTAwRTYwMDAwNDFBODVEMDAwMDEwMjlEMDYxQTg1RDQwMDAwMDAwM0YzCis6MTAwRTcwMDAwNDFBODVFMDAwMDEwMjlFMDYxQTg1RTQwMDAwMDAwM0MyCis6MTAwRTgwMDAwNDFBODVGMDAwMDEwMjlGMDYxQTg1RjQwMDAwMDAwMzkxCis6MTAwRTkwMDAwNDFBODYwMDAwMDEwMkEwMDYxQTg2MDQwMDAwMDAwMzVFCis6MTAwRUEwMDAwNDFBODYxMDAwMDEwMkExMDYxQTg2MTQwMDAwMDAwMzJECis6MTAwRUIwMDAwNDFBODYyMDAwMDEwMkEyMDYxQTg2MjQwMDAwMDAwM0ZDCis6MTAwRUMwMDAwNDFBODYzMDAwMDEwMkEzMDYxQTg2MzQwMDAwMDAwM0NCCis6MTAwRUQwMDAwNDFBODY0MDAwMDEwMkE0MDYxQTg2NDQwMDAwMDAwMzlBCis6MTAwRUUwMDAwNDFBODY1MDAwMDEwMkE1MDYxQTg2NTQwMDAwMDAwMzY5Cis6MTAwRUYwMDAwNDFBODY2MDAwMDEwMkE2MDYxQTg2NjQwMDAwMDAwMzM4Cis6MTAwRjAwMDAwNDFBODY3MDAwMDEwMkE3MDYxQTg2NzQwMDAwMDAwMzA2Cis6MTAwRjEwMDAwNDFBODY4MDAwMDEwMkE4MDYxQTg2ODQwMDAwMDAwM0Q1Cis6MTAwRjIwMDAwNDFBODY5MDAwMDEwMkE5MDYxQTg2OTQwMDAwMDAwM0E0Cis6MTAwRjMwMDAwNDFBODZBMDAwMDEwMkFBMDYxQTg2QTQwMDAwMDAwMzczCis6MTAwRjQwMDAwNDFBODZCMDAwMDEwMkFCMDYxQTg2QjQwMDAwMDAwMzQyCis6MTAwRjUwMDAwNDFBODZDMDAwMDEwMkFDMDYxQTg2QzQwMDAwMDAwMzExCis6MTAwRjYwMDAwNDFBODZEMDAwMDEwMkFEMDYxQTg2RDQwMDAwMDAwM0UwCis6MTAwRjcwMDAwNDFBODZFMDAwMDEwMkFFMDYxQTg2RTQwMDAwMDAwM0FGCis6MTAwRjgwMDAwNDFBODZGMDAwMDEwMkFGMDYxQTg2RjQwMDAwMDAwMzdFCis6MTAwRjkwMDAwNDFBODcwMDAwMDEwMkIwMDYxQTg3MDQwMDAwMDAwMzRCCis6MTAwRkEwMDAwNDFBODcxMDAwMDEwMkIxMDYxQTg3MTQwMDAwMDAwMzFBCis6MTAwRkIwMDAwNDFBODcyMDAwMDEwMkIyMDYxQTg3MjQwMDAwMDAwM0U5Cis6MTAwRkMwMDAwNDFBODczMDAwMDEwMkIzMDYxQTg3MzQwMDAwMDAwM0I4Cis6MTAwRkQwMDAwNDFBODc0MDAwMDEwMkI0MDYxQTg3NDQwMDAwMDAwMzg3Cis6MTAwRkUwMDAwNDFBODc1MDAwMDEwMkI1MDYxQTg3NTQwMDAwMDAwMzU2Cis6MTAwRkYwMDAwNDFBODc2MDAwMDEwMkI2MDYxQTg3NjQwMDAwMDAwMzI1Cis6MTAxMDAwMDAwNDFBODc3MDAwMDEwMkI3MDYxQTg3NzQwMDAwMDAwM0YzCis6MTAxMDEwMDAwNDFBODc4MDAwMDEwMkI4MDYxQTg3ODQwMDAwMDAwM0MyCis6MTAxMDIwMDAwNDFBODc5MDAwMDEwMkI5MDYxQTg3OTQwMDAwMDAwMzkxCis6MTAxMDMwMDAwNDFBODdBMDAwMDEwMkJBMDYxQTg3QTQwMDAwMDAwMzYwCis6MTAxMDQwMDAwNDFBODdCMDAwMDEwMkJCMDYxQTg3QjQwMDAwMDAwMzJGCis6MTAxMDUwMDAwNDFBODdDMDAwMDEwMkJDMDYxQTg3QzQwMDAwMDAwM0ZFCis6MTAxMDYwMDAwNDFBODdEMDAwMDEwMkJEMDYxQTg3RDQwMDAwMDAwM0NECis6MTAxMDcwMDAwNDFBODdFMDAwMDEwMkJFMDYxQTg3RTQwMDAwMDAwMzlDCis6MTAxMDgwMDAwNDFBODdGMDAwMDEwMkJGMDYxQTg3RjQwMDAwMDAwMzZCCis6MTAxMDkwMDAwNDFBODgwMDAwMDEwMkMwMDYxQTg4MDQwMDAwMDAwMzM4Cis6MTAxMEEwMDAwNDFBODgxMDAwMDEwMkMxMDYxQTg4MTQwMDAwMDAwMzA3Cis6MTAxMEIwMDAwNDFBODgyMDAwMDEwMkMyMDYxQTg4MjQwMDAwMDAwM0Q2Cis6MTAxMEMwMDAwNDFBODgzMDAwMDEwMkMzMDYxQTg4MzQwMDAwMDAwM0E1Cis6MTAxMEQwMDAwNDFBODg0MDAwMDEwMkM0MDYxQTg4NDQwMDAwMDAwMzc0Cis6MTAxMEUwMDAwNDFBODg1MDAwMDEwMkM1MDYxQTg4NTQwMDAwMDAwMzQzCis6MTAxMEYwMDAwNDFBODg2MDAwMDEwMkM2MDYxQTg4NjQwMDAwMDAwMzEyCis6MTAxMTAwMDAwNDFBODg3MDAwMDEwMkM3MDYxQTg4NzQwMDAwMDAwM0UwCis6MTAxMTEwMDAwNDFBODg4MDAwMDEwMkM4MDYxQTg4ODQwMDAwMDAwM0FGCis6MTAxMTIwMDAwNDFBODg5MDAwMDEwMkM5MDYxQTg4OTQwMDAwMDAwMzdFCis6MTAxMTMwMDAwNDFBODhBMDAwMDEwMkNBMDYxQTg4QTQwMDAwMDAwMzRECis6MTAxMTQwMDAwNDFBODhCMDAwMDEwMkNCMDYxQTg4QjQwMDAwMDAwMzFDCis6MTAxMTUwMDAwNDFBODhDMDAwMDEwMkNDMDYxQTg4QzQwMDAwMDAwM0VCCis6MTAxMTYwMDAwNDFBODhEMDAwMDEwMkNEMDYxQTg4RDQwMDAwMDAwM0JBCis6MTAxMTcwMDAwNDFBODhFMDAwMDEwMkNFMDYxQTg4RTQwMDAwMDAwMzg5Cis6MTAxMTgwMDAwNDFBODhGMDAwMDEwMkNGMDYxQTg4RjQwMDAwMDAwMzU4Cis6MTAxMTkwMDAwNDFBODkwMDAwMDEwMkQwMDYxQTg5MDQwMDAwMDAwMzI1Cis6MTAxMUEwMDAwNDFBODkxMDAwMDEwMkQxMDYxQTg5MTQwMDAwMDAwM0Y0Cis6MTAxMUIwMDAwNDFBODkyMDAwMDEwMkQyMDYxQTg5MjQwMDAwMDAwM0MzCis6MTAxMUMwMDAwNDFBODkzMDAwMDEwMkQzMDYxQTg5MzQwMDAwMDAwMzkyCis6MTAxMUQwMDAwNDFBODk0MDAwMDEwMkQ0MDYxQTg5NDQwMDAwMDAwMzYxCis6MTAxMUUwMDAwNDFBODk1MDAwMDEwMkQ1MDYxQTg5NTQwMDAwMDAwMzMwCis6MTAxMUYwMDAwNDFBODk2MDAwMDEwMkQ2MDYxQTg5NjQwMDAwMDAwM0ZGCis6MTAxMjAwMDAwNDFBODk3MDAwMDEwMkQ3MDYxQTg5NzQwMDAwMDAwM0NECis6MTAxMjEwMDAwNDFBODk4MDAwMDEwMkQ4MDYxQTg5ODQwMDAwMDAwMzlDCis6MTAxMjIwMDAwNDFBODk5MDAwMDEwMkQ5MDYxQTg5OTQwMDAwMDAwMzZCCis6MTAxMjMwMDAwNDFBODlBMDAwMDEwMkRBMDYxQTg5QTQwMDAwMDAwMzNBCis6MTAxMjQwMDAwNDFBODlCMDAwMDEwMkRCMDYxQTg5QjQwMDAwMDAwMzA5Cis6MTAxMjUwMDAwNDFBODlDMDAwMDEwMkRDMDYxQTg5QzQwMDAwMDAwM0Q4Cis6MTAxMjYwMDAwNDFBODlEMDAwMDEwMkREMDYxQTg5RDQwMDAwMDAwM0E3Cis6MTAxMjcwMDAwNDFBODlFMDAwMDEwMkRFMDYxQTg5RTQwMDAwMDAwMzc2Cis6MTAxMjgwMDAwNDFBODlGMDAwMDEwMkRGMDYxQTg5RjQwMDAwMDAwMzQ1Cis6MTAxMjkwMDAwNDFBOEEwMDAwMDEwMkUwMDYxQThBMDQwMDAwMDAwMzEyCis6MTAxMkEwMDAwNDFBOEExMDAwMDEwMkUxMDYxQThBMTQwMDAwMDAwM0UxCis6MTAxMkIwMDAwNDFBOEEyMDAwMDEwMkUyMDYxQThBMjQwMDAwMDAwM0IwCis6MTAxMkMwMDAwNDFBOEEzMDAwMDEwMkUzMDYxQThBMzQwMDAwMDAwMzdGCis6MTAxMkQwMDAwNDFBOEE0MDAwMDEwMkU0MDYxQThBNDQwMDAwMDAwMzRFCis6MTAxMkUwMDAwNDFBOEE1MDAwMDEwMkU1MDYxQThBNTQwMDAwMDAwMzFECis6MTAxMkYwMDAwNDFBOEE2MDAwMDEwMkU2MDYxQThBNjQwMDAwMDAwM0VDCis6MTAxMzAwMDAwNDFBOEE3MDAwMDEwMkU3MDYxQThBNzQwMDAwMDAwM0JBCis6MTAxMzEwMDAwNDFBOEE4MDAwMDEwMkU4MDYxQThBODQwMDAwMDAwMzg5Cis6MTAxMzIwMDAwNDFBOEE5MDAwMDEwMkU5MDYxQThBOTQwMDAwMDAwMzU4Cis6MTAxMzMwMDAwNDFBOEFBMDAwMDEwMkVBMDYxQThBQTQwMDAwMDAwMzI3Cis6MTAxMzQwMDAwNDFBOEFCMDAwMDEwMkVCMDYxQThBQjQwMDAwMDAwM0Y2Cis6MTAxMzUwMDAwNDFBOEFDMDAwMDEwMkVDMDYxQThBQzQwMDAwMDAwM0M1Cis6MTAxMzYwMDAwNDFBOEFEMDAwMDEwMkVEMDYxQThBRDQwMDAwMDAwMzk0Cis6MTAxMzcwMDAwNDFBOEFFMDAwMDEwMkVFMDYxQThBRTQwMDAwMDAwMzYzCis6MTAxMzgwMDAwNDFBOEFGMDAwMDEwMkVGMDYxQThBRjQwMDAwMDAwMzMyCis6MTAxMzkwMDAwNDFBOEIwMDAwMDEwMkYwMDYxQThCMDQwMDAwMDAwM0ZGCis6MTAxM0EwMDAwNDFBOEIxMDAwMDEwMkYxMDYxQThCMTQwMDAwMDAwM0NFCis6MTAxM0IwMDAwNDFBOEIyMDAwMDEwMkYyMDYxQThCMjQwMDAwMDAwMzlECis6MTAxM0MwMDAwNDFBOEIzMDAwMDEwMkYzMDYxQThCMzQwMDAwMDAwMzZDCis6MTAxM0QwMDAwNDFBOEI0MDAwMDEwMkY0MDYxQThCNDQwMDAwMDAwMzNCCis6MTAxM0UwMDAwNDFBOEI1MDAwMDEwMkY1MDYxQThCNTQwMDAwMDAwMzBBCis6MTAxM0YwMDAwNDFBOEI2MDAwMDEwMkY2MDYxQThCNjQwMDAwMDAwM0Q5Cis6MTAxNDAwMDAwNDFBOEI3MDAwMDEwMkY3MDYxQThCNzQwMDAwMDAwM0E3Cis6MTAxNDEwMDAwNDFBOEI4MDAwMDEwMkY4MDYxQThCODQwMDAwMDAwMzc2Cis6MTAxNDIwMDAwNDFBOEI5MDAwMDEwMkY5MDYxQThCOTQwMDAwMDAwMzQ1Cis6MTAxNDMwMDAwNDFBOEJBMDAwMDEwMkZBMDYxQThCQTQwMDAwMDAwMzE0Cis6MTAxNDQwMDAwNDFBOEJCMDAwMDEwMkZCMDYxQThCQjQwMDAwMDAwM0UzCis6MTAxNDUwMDAwNDFBOEJDMDAwMDEwMkZDMDYxQThCQzQwMDAwMDAwM0IyCis6MTAxNDYwMDAwNDFBOEJEMDAwMDEwMkZEMDYxQThCRDQwMDAwMDAwMzgxCis6MTAxNDcwMDAwNDFBOEJFMDAwMDEwMkZFMDYxQThCRTQwMDAwMDAwMzUwCis6MTAxNDgwMDAwNDFBOEJGMDAwMDEwMkZGMDYxQThCRjQwMDAwMDAwMzFGCis6MTAxNDkwMDAwNDFBOEMwMDAwMDEwMzAwMDYxQThDMDQwMDAwMDAwM0VCCis6MTAxNEEwMDAwNDFBOEMxMDAwMDEwMzAxMDYxQThDMTQwMDAwMDAwM0JBCis6MTAxNEIwMDAwNDFBOEMyMDAwMDEwMzAyMDYxQThDMjQwMDAwMDAwMzg5Cis6MTAxNEMwMDAwNDFBOEMzMDAwMDEwMzAzMDYxQThDMzQwMDAwMDAwMzU4Cis6MTAxNEQwMDAwNDFBOEM0MDAwMDEwMzA0MDYxQThDNDQwMDAwMDAwMzI3Cis6MTAxNEUwMDAwNDFBOEM1MDAwMDEwMzA1MDYxQThDNTQwMDAwMDAwM0Y2Cis6MTAxNEYwMDAwNDFBOEM2MDAwMDEwMzA2MDYxQThDNjQwMDAwMDAwM0M1Cis6MTAxNTAwMDAwNDFBOEM3MDAwMDEwMzA3MDYxQThDNzQwMDAwMDAwMzkzCis6MTAxNTEwMDAwNDFBOEM4MDAwMDEwMzA4MDYxQThDODQwMDAwMDAwMzYyCis6MTAxNTIwMDAwNDFBOEM5MDAwMDEwMzA5MDYxQThDOTQwMDAwMDAwMzMxCis6MTAxNTMwMDAwNDFBOENBMDAwMDEwMzBBMDYxQThDQTQwMDAwMDAwMzAwCis6MTAxNTQwMDAwNDFBOENCMDAwMDEwMzBCMDYxQThDQjQwMDAwMDAwM0NGCis6MTAxNTUwMDAwNDFBOENDMDAwMDEwMzBDMDYxQThDQzQwMDAwMDAwMzlFCis6MTAxNTYwMDAwNDFBOENEMDAwMDEwMzBEMDYxQThDRDQwMDAwMDAwMzZECis6MTAxNTcwMDAwNDFBOENFMDAwMDEwMzBFMDYxQThDRTQwMDAwMDAwMzNDCis6MTAxNTgwMDAwNDFBOENGMDAwMDEwMzBGMDYxQThDRjQwMDAwMDAwMzBCCis6MTAxNTkwMDAwNDFBOEQwMDAwMDEwMzEwMDYxQThEMDQwMDAwMDAwM0Q4Cis6MTAxNUEwMDAwNDFBOEQxMDAwMDEwMzExMDYxQThEMTQwMDAwMDAwM0E3Cis6MTAxNUIwMDAwNDFBOEQyMDAwMDEwMzEyMDYxQThEMjQwMDAwMDAwMzc2Cis6MTAxNUMwMDAwNDFBOEQzMDAwMDEwMzEzMDYxQThEMzQwMDAwMDAwMzQ1Cis6MTAxNUQwMDAwNDFBOEQ0MDAwMDEwMzE0MDYxQThENDQwMDAwMDAwMzE0Cis6MTAxNUUwMDAwNDFBOEQ1MDAwMDEwMzE1MDYxQThENTQwMDAwMDAwM0UzCis6MTAxNUYwMDAwNDFBOEQ2MDAwMDEwMzE2MDYxQThENjQwMDAwMDAwM0IyCis6MTAxNjAwMDAwNDFBOEQ3MDAwMDEwMzE3MDYxQThENzQwMDAwMDAwMzgwCis6MTAxNjEwMDAwNDFBOEQ4MDAwMDEwMzE4MDYxQThEODQwMDAwMDAwMzRGCis6MTAxNjIwMDAwNDFBOEQ5MDAwMDEwMzE5MDYxQThEOTQwMDAwMDAwMzFFCis6MTAxNjMwMDAwNDFBOERBMDAwMDEwMzFBMDYxQThEQTQwMDAwMDAwM0VECis6MTAxNjQwMDAwNDFBOERCMDAwMDEwMzFCMDYxQThEQjQwMDAwMDAwM0JDCis6MTAxNjUwMDAwNDFBOERDMDAwMDEwMzFDMDYxQThEQzQwMDAwMDAwMzhCCis6MTAxNjYwMDAwNDFBOEREMDAwMDEwMzFEMDYxQThERDQwMDAwMDAwMzVBCis6MTAxNjcwMDAwNDFBOERFMDAwMDEwMzFFMDYxQThERTQwMDAwMDAwMzI5Cis6MTAxNjgwMDAwNDFBOERGMDAwMDEwMzFGMDYxQThERjQwMDAwMDAwM0Y4Cis6MTAxNjkwMDAwNDFBOEUwMDAwMDEwMzIwMDYxQThFMDQwMDAwMDAwM0M1Cis6MTAxNkEwMDAwNDFBOEUxMDAwMDEwMzIxMDYxQThFMTQwMDAwMDAwMzk0Cis6MTAxNkIwMDAwNDFBOEUyMDAwMDEwMzIyMDYxQThFMjQwMDAwMDAwMzYzCis6MTAxNkMwMDAwNDFBOEUzMDAwMDEwMzIzMDYxQThFMzQwMDAwMDAwMzMyCis6MTAxNkQwMDAwNDFBOEU0MDAwMDEwMzI0MDYxQThFNDQwMDAwMDAwMzAxCis6MTAxNkUwMDAwNDFBOEU1MDAwMDEwMzI1MDYxQThFNTQwMDAwMDAwM0QwCis6MTAxNkYwMDAwNDFBOEU2MDAwMDEwMzI2MDYxQThFNjQwMDAwMDAwMzlGCis6MTAxNzAwMDAwNDFBOEU3MDAwMDEwMzI3MDYxQThFNzQwMDAwMDAwMzZECis6MTAxNzEwMDAwNDFBOEU4MDAwMDEwMzI4MDYxQThFODQwMDAwMDAwMzNDCis6MTAxNzIwMDAwNDFBOEU5MDAwMDEwMzI5MDYxQThFOTQwMDAwMDAwMzBCCis6MTAxNzMwMDAwNDFBOEVBMDAwMDEwMzJBMDYxQThFQTQwMDAwMDAwM0RBCis6MTAxNzQwMDAwNDFBOEVCMDAwMDEwMzJCMDYxQThFQjQwMDAwMDAwM0E5Cis6MTAxNzUwMDAwNDFBOEVDMDAwMDEwMzJDMDYxQThFQzQwMDAwMDAwMzc4Cis6MTAxNzYwMDAwNDFBOEVEMDAwMDEwMzJEMDYxQThFRDQwMDAwMDAwMzQ3Cis6MTAxNzcwMDAwNDFBOEVFMDAwMDEwMzJFMDYxQThFRTQwMDAwMDAwMzE2Cis6MTAxNzgwMDAwNDFBOEVGMDAwMDEwMzJGMDYxQThFRjQwMDAwMDAwM0U1Cis6MTAxNzkwMDAwNDFBOEYwMDAwMDEwMzMwMDYxQThGMDQwMDAwMDAwM0IyCis6MTAxN0EwMDAwNDFBOEYxMDAwMDEwMzMxMDYxQThGMTQwMDAwMDAwMzgxCis6MTAxN0IwMDAwNDFBOEYyMDAwMDEwMzMyMDYxQThGMjQwMDAwMDAwMzUwCis6MTAxN0MwMDAwNDFBOEYzMDAwMDEwMzMzMDYxQThGMzQwMDAwMDAwMzFGCis6MTAxN0QwMDAwNDFBOEY0MDAwMDEwMzM0MDYxQThGNDQwMDAwMDAwM0VFCis6MTAxN0UwMDAwNDFBOEY1MDAwMDEwMzM1MDYxQThGNTQwMDAwMDAwM0JECis6MTAxN0YwMDAwNDFBOEY2MDAwMDEwMzM2MDYxQThGNjQwMDAwMDAwMzhDCis6MTAxODAwMDAwNDFBOEY3MDAwMDEwMzM3MDYxQThGNzQwMDAwMDAwMzVBCis6MTAxODEwMDAwNDFBOEY4MDAwMDEwMzM4MDYxQThGODQwMDAwMDAwMzI5Cis6MTAxODIwMDAwNDFBOEY5MDAwMDEwMzM5MDYxQThGOTQwMDAwMDAwM0Y4Cis6MTAxODMwMDAwNDFBOEZBMDAwMDEwMzNBMDYxQThGQTQwMDAwMDAwM0M3Cis6MTAxODQwMDAwNDFBOEZCMDAwMDEwMzNCMDYxQThGQjQwMDAwMDAwMzk2Cis6MTAxODUwMDAwNDFBOEZDMDAwMDEwMzNDMDYxQThGQzQwMDAwMDAwMzY1Cis6MTAxODYwMDAwNDFBOEZEMDAwMDEwMzNEMDYxQThGRDQwMDAwMDAwMzM0Cis6MTAxODcwMDAwNDFBOEZFMDAwMDEwMzNFMDYxQThGRTQwMDAwMDAwN0ZGCis6MTAxODgwMDAwNDFBNjJDMDAwMjAwMzNGMDYxQUQwMDAwMDAwMDA3MjU0Cis6MTAxODkwMDAwNjFBRDI0ODAwMDAwMDEwMDYxQUQ2QjAwMDAwMDAyMDM4Cis6MTAxOEEwMDAwNjFBRDQ3MDAwMDAwMDkwMDYxQUQ0NjgwMDAwMDAwMkU2Cis6MTAxOEIwMDAwNjFBQTAwMDAwMDAwMUM0MDYxQTMwMDAwMDAwMDAxMDQzCis6MTAxOEMwMDAwNjFBMzA4MDAwMDAwMDEwMDYxQTMxMDAwMDAwMDAxMEQ3Cis6MTAxOEQwMDAwNjFBMzE4MDAwMDAwMDEwMDYxQTMzMDAwMDAwMDAxMkMyCis6MTAxOEUwMDAwNjFBMzM5MDAwMDAwMDcwMDYxQUQ0NTgwMDAwMDAwMjU3Cis6MTAxOEYwMDAwNjFBRDM0ODAwMDAwMDAyMDYxQUQzNTgwMDAwMDAyMDQwCis6MTAxOTAwMDAwNjFBQTcxMDAwMDAwMUM0MDYxQTMwNDAwMDAwMDAxMDlCCis6MTAxOTEwMDAwNjFBMzBDMDAwMDAwMDEwMDYxQTMxNDAwMDAwMDAxMDA2Cis6MTAxOTIwMDAwNjFBMzFDMDAwMDAwMDEwMDYxQTMzNDgwMDAwMDAxMkU5Cis6MTAxOTMwMDAwNjFBMzU1MDAwMDAwMDcwMDYxQUQ0NjAwMDAwMDAwMjNDCis6MTAxOTQwMDAwNjFBRDM1MDAwMDAwMDAyMDYxQUQzRDgwMDAwMDAyMDY3Cis6MTAxOTUwMDAwMjFBQUUyMDAwMDAwMDAwMDYxQTUwMDAwMDAwMDAwMjJCCis6MTAxOTYwMDAwNjFBNTA4MDAwMDAwMDEyMDQxQTQwMDAwMDAyMDM1RkIzCis6MTAxOTcwMDAwNDFBNjNDMDAwMDIwMzYxMDYxQTcwMDAwMDAwMDAwNDJDCis6MTAxOTgwMDAwNjFBMzIwMDAwMDAwMDA4MDIxQUFFMjQwMDAwMDAwMDBGCis6MTAxOTkwMDAwNjFBNTAxMDAwMDAwMDAyMDYxQTUwQzgwMDAwMDAxMjdCCis6MTAxOUEwMDAwNDFBNDAwODAwMDIwMzYzMDQxQTYzQzgwMDAyMDM2NUI2Cis6MTAxOUIwMDAwNjFBNzAxMDAwMDAwMDA0MDYxQTMyMjAwMDAwMDAwODA5Cis6MTAxOUMwMDAwMjFBQUUyODAwMDAwMDAwMDYxQTUwMjAwMDAwMDAwMjkzCis6MTAxOUQwMDAwNjFBNTExMDAwMDAwMDEyMDQxQTQwMTAwMDAyMDM2NzlBCis6MTAxOUUwMDAwNDFBNjNEMDAwMDIwMzY5MDYxQTcwMjAwMDAwMDAwNDg0Cis6MTAxOUYwMDAwNjFBMzI0MDAwMDAwMDA4MDIxQUFFMkMwMDAwMDAwMDU3Cis6MTAxQTAwMDAwNjFBNTAzMDAwMDAwMDAyMDYxQTUxNTgwMDAwMDAxMjU5Cis6MTAxQTEwMDAwNDFBNDAxODAwMDIwMzZCMDQxQTYzRDgwMDAyMDM2RDE1Cis6MTAxQTIwMDAwNjFBNzAzMDAwMDAwMDA0MDYxQTMyNjAwMDAwMDAwODM4Cis6MTAxQTMwMDAwMjFBQUUzMDAwMDAwMDAwMDYxQTUwNDAwMDAwMDAwMkZBCis6MTAxQTQwMDAwNjFBNTFBMDAwMDAwMDEyMDQxQTQwMjAwMDAyMDM2RjgxCis6MTAxQTUwMDAwNDFBNjNFMDAwMDIwMzcxMDYxQTcwNDAwMDAwMDAwNERCCis6MTAxQTYwMDAwNjFBMzI4MDAwMDAwMDA4MDIxQUFFMzQwMDAwMDAwMDlFCis6MTAxQTcwMDAwNjFBNTA1MDAwMDAwMDAyMDYxQTUxRTgwMDAwMDAxMjM5Cis6MTAxQTgwMDAwNDFBNDAyODAwMDIwMzczMDQxQTYzRTgwMDAyMDM3NTc1Cis6MTAxQTkwMDAwNjFBNzA1MDAwMDAwMDA0MDYxQTMyQTAwMDAwMDAwODY4Cis6MTAxQUEwMDAwMjFBQUUzODAwMDAwMDAwMDYxQTUwNjAwMDAwMDAwMjYyCis6MTAxQUIwMDAwNjFBNTIzMDAwMDAwMDEyMDQxQTQwMzAwMDAyMDM3NzY4Cis6MTAxQUMwMDAwNDFBNjNGMDAwMDIwMzc5MDYxQTcwNjAwMDAwMDAwNDMzCis6MTAxQUQwMDAwNjFBMzJDMDAwMDAwMDA4MDIxQUFFM0MwMDAwMDAwMEU2Cis6MTAxQUUwMDAwNjFBNTA3MDAwMDAwMDAyMDYxQTUyNzgwMDAwMDAxMjE4Cis6MTAxQUYwMDAwNDFBNDAzODAwMDIwMzdCMDQxQTYzRjgwMDAyMDM3REQ1Cis6MTAxQjAwMDAwNjFBNzA3MDAwMDAwMDA0MDYxQTMyRTAwMDAwMDAwODk3Cis6MTAxQjEwMDAwMjAwQTQ2ODAwMEIwMUM4MDIwMEEyOTQwNzFEMjkxMTRECis6MTAxQjIwMDAwMjAwQTI5ODAwMDAwMDAwMDIwMEEyOUMwMDlDMDQyNDc1Cis6MTAxQjMwMDAwMjAwQTJBMDAwMDAwMDAwMDIwMEEyQTQwMDAwMDIwOTBFCis6MTAxQjQwMDAwMjAwQTI3MDAwMDAwMDAwMDIwMEEyNzQwMDAwMDAwMDY5Cis6MTAxQjUwMDAwMjAwQTI3MDAwMDAwMDAwMDIwMEEyNzQwMDAwMDAwMDU5Cis6MTAxQjYwMDAwMjAwQTI3MDAwMDAwMDAwMDIwMEEyNzQwMDAwMDAwMDQ5Cis6MTAxQjcwMDAwMjAwQTI3MDAwMDAwMDAwMDIwMEEyNzQwMDAwMDAwMDM5Cis6MTAxQjgwMDAwMjAxNjBBMDAwMDAwMDAxMDIwMTYwQTQwMDAwMDI2MkU2Cis6MTAxQjkwMDAwMjAxNjBBODAwMDAwMDAyMDIwMTYwQUMwMDAwMDAxODExCis6MTAxQkEwMDAwMjAxNjIwNDAwMDAwMDAxMDIwMTAwQjQwMDAwMDAwMTEzCis6MTAxQkIwMDAwMjAxMDBCODAwMDAwMDAxMDIwMTAwREMwMDAwMDAwMTg5Cis6MTAxQkMwMDAwMjAxMDEwMDAwMDAwMDAxMDIwMTAxMDQwMDAwMDAwMTA3Cis6MTAxQkQwMDAwMjAxMDA3QzAwMzAwMDAwMDIwMTAwODQwMDAwMDAyOEE3Cis6MTAxQkUwMDAwMjAxMDA4QzAwMDAwMDAwMDIwMTAxMzAwMDAwMDAwNDJFCis6MTAxQkYwMDAwMjAxMDI1QzAwMDAwMDAxMDIwMTAzMjgwMDAwMDAwMDU1Cis6MTAxQzAwMDAwMjAxNjA1ODAwMDBGRkZGMDIwMTYwNzAwMDAwMDAwNzQxCis6MTAxQzEwMDAwMjAxNjA4MDAwMDAwMDAxMDIwMTA1NTQwMDAwMDAzMDU0Cis6MTAxQzIwMDAwMjAxMDBDNDAwMDAwMDAxMDIwMTAwQ0MwMDAwMDAwMTFDCis6MTAxQzMwMDAwMjAxMDBGODAwMDAwMDAxMDIwMTAwRjAwMDAwMDAwMUI0Cis6MTAxQzQwMDAwMjAxMDA4MDAwMzAwMDAwMDIwMTAwODgwMDAwMDAyODJFCis6MTAxQzUwMDAwMjAxMDA5MDAwMDAwMDAwMDIwMTAxMzQwMDAwMDAwNEI1Cis6MTAxQzYwMDAwMjAxMDJEQzAwMDAwMDAxMDIwMTAzMkMwMDAwMDAwMDYwCis6MTAxQzcwMDAwMjAxNjA1QzAwMDBGRkZGMDIwMTYwNzQwMDAwMDAwN0M5Cis6MTAxQzgwMDAwMjAxNjA4NDAwMDAwMDAxMDIwMTA1NjQwMDAwMDAzMEQwCis6MTAxQzkwMDAwMjAxMDBDODAwMDAwMDAxMDIwMTAwRDAwMDAwMDAwMUE0Cis6MTAxQ0EwMDAwMjAxMDBGQzAwMDAwMDAxMDIwMTAwRjQwMDAwMDAwMTNDCis6MTAxQ0IwMDAwMjBDMTAwMDAwMDAwMDI4MDIwQzIwMDgwMDAwMDIxMTk1Cis6MTAxQ0MwMDAwMjBDMjAwQzAwMDAwMjAwMDIwQzIwMTAwMDAwMDIwNDk0Cis6MTAxQ0QwMDAwMjBDMjAxQzAwMDBGRkZGMDIwQzIwMjAwMDAwRkZGRjcwCis6MTAxQ0UwMDAwMjBDMjAyNDAwMDBGRkZGMDIwQzIwMjgwMDAwRkZGRjUwCis6MTAxQ0YwMDAwMjBDMjAzODAwMDAwMDIwMDIwQzIwM0MwMDAwMDAyMUQzCis6MTAxRDAwMDAwMjBDMjA0MDAwMDAwMDIyMDIwQzIwNDQwMDAwMDAyM0FFCis6MTAxRDEwMDAwMjBDMjA0ODAwMDAwMDI0MDIwQzIwNEMwMDAwMDAyNThBCis6MTAxRDIwMDAwMjBDMjA1MDAwMDAwMDI2MDIwQzIwNTQwMDAwMDAyNzY2Cis6MTAxRDMwMDAwMjBDMjA1ODAwMDAwMDI4MDIwQzIwNUMwMDAwMDAyOTQyCis6MTAxRDQwMDAwMjBDMjA2MDAwMDAwMDJBMDIwQzIwNjQwMDAwMDAyQjFFCis6MTAxRDUwMDAwMjBDMjA2ODAwMDAwMDJDMDIwQzIwNkMwMDAwMDAyREZBCis6MTAxRDYwMDAwMjBDMjA3MDAwMDAwMDJFMDIwQzIwNzQwMDAwMDAyRkQ2Cis6MTAxRDcwMDAwMjBDMjA3ODAwMDAwMDEwMDYwQzIwN0MwMDAwMDAwN0Y4Cis6MTAxRDgwMDAwMjBDMjA5ODAwMDAwMDExMDIwQzIwOUMwMDAwMDAxMkEwCis6MTAxRDkwMDAwMjBDMjBBMDAwMDAwMDEzMDYwQzIwQTQwMDAwMDAxRDZGCis6MTAxREEwMDAwMjBDMjExODAwMDAwMDAxMDIwQzIxMUMwMDAwMDAwMTlGCis6MTAxREIwMDAwMjBDMjEyMDAwMDAwMDAxMDYwQzIxMjQwMDAwMDAxRDVGCis6MTAxREMwMDAwMjBDMjE5ODAwMDAwMDAxMDYwQzIxOUMwMDAwMDAwNzc1Cis6MTAxREQwMDAwMjBDMjFCODAwMDAwMDAxMDIwQzIxQkMwMDAwMDAwMTJGCis6MTAxREUwMDAwMjBDMjFDMDAwMDAwMDAxMDIwQzIxQzQwMDAwMDAwMTBGCis6MTAxREYwMDAwMjBDMjFDODAwMDAwMDAxMDIwQzIxQ0MwMDAwMDAwMUVGCis6MTAxRTAwMDAwMjBDMjFEMDAwMDAwMDAxMDIwQzIxRDQwMDAwMDAwMUNFCis6MTAxRTEwMDAwMjBDMjFEODAwMDAwMDAxMDIwQzIxREMwMDAwMDAwMUFFCis6MTAxRTIwMDAwMjBDMjFFMDAwMDAwMDAxMDIwQzIxRTQwMDAwMDAwMThFCis6MTAxRTMwMDAwMjBDMjFFODAwMDAwMDAxMDIwQzIxRUMwMDAwMDAwMTZFCis6MTAxRTQwMDAwMjBDMjFGMDAwMDAwMDAxMDIwQzIxRjQwMDAwMDAwMTRFCis6MTAxRTUwMDAwMjBDMjFGODAwMDAwMDAxMDYwQzIxRkMwMDAwMDAwNzI0Cis6MTAxRTYwMDAwMjBDMjIxODAwMDAwMDAxMDYwQzIyMUMwMDAwMDAwN0QyCis6MTAxRTcwMDAwMjBDMjIzODA3RkZGRkZGMDIwQzIyM0MwMDAwMDAzRjRCCis6MTAxRTgwMDAwMjBDMjI0MDA3RkZGRkZGMDIwQzIyNDQwMDAwMDAwRjVCCis6MTAxRTkwMDAwMTBDMjI0ODAwMDAwMDAwMDEwQzIyNEMwMDAwMDAwMDUwCis6MTAxRUEwMDAwMTBDMjI1MDAwMDAwMDAwMDEwQzIyNTQwMDAwMDAwMDMwCis6MTAxRUIwMDAwMTBDMjI1ODAwMDAwMDAwMDEwQzIyNUMwMDAwMDAwMDEwCis6MTAxRUMwMDAwMTBDMjI2MDAwMDAwMDAwMDEwQzIyNjQwMDAwMDAwMEYwCis6MTAxRUQwMDAwMTBDMjI2ODAwMDAwMDAwMDEwQzIyNkMwMDAwMDAwMEQwCis6MTAxRUUwMDAwMTBDMjI3MDAwMDAwMDAwMDEwQzIyNzQwMDAwMDAwMEIwCis6MTAxRUYwMDAwMTBDMjI3ODAwMDAwMDAwMDEwQzIyN0MwMDAwMDAwMDkwCis6MTAxRjAwMDAwQzBDMjAwMDAwMDAwM0U4MEEwQzIwMDAwMDAwMDAwMTc3Cis6MTAxRjEwMDAwQjBDMjAwMDAwMDAwMDBBMDIwQzQwMDgwMDAwMTAxMTA5Cis6MTAxRjIwMDAwMjBDNDAwQzAwMDAxMDAwMDIwQzQwMTAwMDAwMTAwNEQ1Cis6MTAxRjMwMDAwMjBDNDAxNDAwMDAxMDIxMDIwQzQwMUMwMDAwRkZGRkE2Cis6MTAxRjQwMDAwMjBDNDAyMDAwMDBGRkZGMDIwQzQwMjQwMDAwRkZGRkI1Cis6MTAxRjUwMDAwMjBDNDAyODAwMDBGRkZGMDIwQzQwMzgwMDAwMDA0NjQxCis6MTAxRjYwMDAwMjBDNDAzQzAwMDAwMDEwMDYwQzQwNDAwMDAwMDAwMjQzCis6MTAxRjcwMDAwMjBDNDA0ODAwMDAwMDE4MDIwQzQwNEMwMDAwMDBGMDI5Cis6MTAxRjgwMDAwNjBDNDA1MDAwMDAwMDFGMDIwQzQwQ0MwMDAwMDAwMTc1Cis6MTAxRjkwMDAwNjBDNDBEMDAwMDAwMDNBMDIwQzQxQjgwMDAwMDAwMURECis6MTAxRkEwMDAwNjBDNDFCQzAwMDAwMDAzMDIwQzQxQzgwMDAwMDAwMTA3Cis6MTAxRkIwMDAwMjBDNDFDQzAwMDAwMDAxMDYwQzQxRDAwMDAwMDAxQUM4Cis6MTAxRkMwMDAwMjBDNDIzODA3RkZGRkZGMDIwQzQyM0MwMDAwMDAzRkJBCis6MTAxRkQwMDAwMjBDNDI0MDA3RkZGRkZGMDIwQzQyNDQwMDAwMDAwRkNBCis6MTAxRkUwMDAwMTBDNDI0ODAwMDAwMDAwMDEwQzQyNEMwMDAwMDAwMEJGCis6MTAxRkYwMDAwMTBDNDI1MDAwMDAwMDAwMDEwQzQyNTQwMDAwMDAwMDlGCis6MTAyMDAwMDAwMTBDNDI1ODAwMDAwMDAwMDEwQzQyNUMwMDAwMDAwMDdFCis6MTAyMDEwMDAwMTBDNDI2MDAwMDAwMDAwMDEwQzQyNjQwMDAwMDAwMDVFCis6MTAyMDIwMDAwMTBDNDI2ODAwMDAwMDAwMDEwQzQyNkMwMDAwMDAwMDNFCis6MTAyMDMwMDAwMTBDNDI3MDAwMDAwMDAwMDEwQzQyNzQwMDAwMDAwMDFFCis6MTAyMDQwMDAwMTBDNDI3ODAwMDAwMDAwMDEwQzQyN0MwMDAwMDAwMEZFCis6MTAyMDUwMDAwMTBDNDI4MDAwMDAwMDAwMEMwQzQwMDAwMDAwMDNFODZFCis6MTAyMDYwMDAwQTBDNDAwMDAwMDAwMDAxMEIwQzQwMDAwMDAwMDAwQUI4Cis6MTAyMDcwMDAwNjBENDAwMDAwMDAwQTAwMDIwRDAwNDQwMDAwMDAzMjdFCis6MTAyMDgwMDAwMjBEMDA4QzAyMTUwMDIwMDIwRDAwOTAwMjE1MDAyMEE4Cis6MTAyMDkwMDAwMjBEMDA5NDA4MTAwMDAwMDIwRDAwOTgwMDAwMDAzM0FCCis6MTAyMEEwMDAwMjBEMDA5QzAwMDAwMDAyMDIwRDAwQTAwMDAwMDAwMEQ0Cis6MTAyMEIwMDAwMjBEMDBBNDAwMDAwMDA1MDIwRDAwQTgwMDAwMDAwNUFDCis6MTAyMEMwMDAwNjBEMDBBQzAwMDAwMDAyMDIwRDAwQjQwMDAwMDAwMjhBCis6MTAyMEQwMDAwMjBEMDBCODAwMDAwMDAzMDIwRDAwQkMwMDAwMDAwMjY5Cis6MTAyMEUwMDAwMjBEMDBDMDAwMDAwMDAxMDIwRDAwQzgwMDAwMDAwMjQ3Cis6MTAyMEYwMDAwMjBEMDBDQzAwMDAwMDAyMDIwRDAxNUMwMDAwMDAwMTk2Cis6MTAyMTAwMDAwMjBEMDE2NDAwMDAwMDAxMDIwRDAxNjgwMDAwMDAwMkUwCis6MTAyMTEwMDAwMjBEMDIwNDAwMDAwMDAxMDIwRDAyMEMwMDAwMDAyMDZDCis6MTAyMTIwMDAwMjBEMDIxMDAwMDAwMDQwMDIwRDAyMTQwMDAwMDA0MEU5Cis6MTAyMTMwMDAwMjBEMDIyMDAwMDAwMDAzMDIwRDAyMjQwMDAwMDAxODFFCis6MTAyMTQwMDAwNjBEMDI4MDAwMDAwMDEyMDQwRDAzMDAwMDE4MDM3RjNBCis6MTAyMTUwMDAwNjBEMDM2MDAwMDAwMDBDMDIwRDAwNEMwMDAwMDAwMUExCis6MTAyMTYwMDAwMjBEMDA1MDAwMDAwMDAyMDIwRDAwNTQwMDAwMDAwMEFCCis6MTAyMTcwMDAwMjBEMDA1ODAwMDAwMDA4MDYwRDAwNUMwMDAwMDAwNDdECis6MTAyMTgwMDAwMjBEMDBDNDAwMDAwMDA0MDIwRDAwMDQwMDAwMDAwMTY0Cis6MTAyMTkwMDAwMjBEMDAwODAwMDAwMDAxMDIwRDAwMEMwMDAwMDAwMTBCCis6MTAyMUEwMDAwMjBEMDAxMDAwMDAwMDAxMDIwRDAwMTQwMDAwMDAwMUVCCis6MTAyMUIwMDAwMjBEMDAxODAwMDAwMDAxMDIwRDAwMUMwMDAwMDAwMUNCCis6MTAyMUMwMDAwMjBEMDAyMDAwMDAwMDAxMDIwRDAwMjQwMDAwMDAwMUFCCis6MTAyMUQwMDAwMjBEMDAyODAwMDAwMDAxMDIwRDAwMkMwMDAwMDAwMThCCis6MTAyMUUwMDAwMjBEMDAzMDAwMDAwMDAxMDIwRDAwMzQwMDAwMDAwMTZCCis6MTAyMUYwMDAwMjBEMDAzODAwMDAwMDAxMDIwRDAwM0MwMDAwMDAwMTRCCis6MTAyMjAwMDAwMjBEMDExNDAwMDAwMDA5MDIwRDAxMUMwMDAwMDAwQTZCCis6MTAyMjEwMDAwMjBEMDEyNDAwMDAwMDAwMDIwRDAxMkMwMDAwMDAwMDRFCis6MTAyMjIwMDAwMjBEMDEzNDAwMDAwMDAwMDIwRDAxM0MwMDAwMDAwQjEzCis6MTAyMjMwMDAwMjBEMDE0NDAwMDAwMDAwMDIwRDAxMTgwMDAwMDAyOUY5Cis6MTAyMjQwMDAwMjBEMDEyMDAwMDAwMDJBMDIwRDAxMjgwMDAwMDAyMERDCis6MTAyMjUwMDAwMjBEMDEzMDAwMDAwMDIwMDIwRDAxMzgwMDAwMDAyMEI2Cis6MTAyMjYwMDAwMjBEMDE0MDAwMDAwMDJCMDIwRDAxNDgwMDAwMDAyMDdCCis6MTAyMjcwMDAwMjBEMDExNDAwMDAwMDE5MDIwRDAxMUMwMDAwMDAxQURCCis6MTAyMjgwMDAwMjBEMDEyNDAwMDAwMDEwMDIwRDAxMkMwMDAwMDAxMEJFCis6MTAyMjkwMDAwMjBEMDEzNDAwMDAwMDEwMDIwRDAxM0MwMDAwMDAxQjgzCis6MTAyMkEwMDAwMjBEMDE0NDAwMDAwMDEwMDIwRDAxMTgwMDAwMDAzOTY5Cis6MTAyMkIwMDAwMjBEMDEyMDAwMDAwMDNBMDIwRDAxMjgwMDAwMDAzMDRDCis6MTAyMkMwMDAwMjBEMDEzMDAwMDAwMDMwMDIwRDAxMzgwMDAwMDAzMDI2Cis6MTAyMkQwMDAwMjBEMDE0MDAwMDAwMDNCMDIwRDAxNDgwMDAwMDAzMEVCCis6MTAyMkUwMDAwMjBEMDExNDAwMDAwMDQ5MDIwRDAxMUMwMDAwMDA0QTBCCis6MTAyMkYwMDAwMjBEMDEyNDAwMDAwMDQwMDIwRDAxMkMwMDAwMDA0MEVFCis6MTAyMzAwMDAwMjBEMDEzNDAwMDAwMDQwMDIwRDAxM0MwMDAwMDA0QkIyCis6MTAyMzEwMDAwMjBEMDE0NDAwMDAwMDQwMDIwRDAxMTgwMDAwMDA2OTk4Cis6MTAyMzIwMDAwMjBEMDEyMDAwMDAwMDZBMDIwRDAxMjgwMDAwMDA2MDdCCis6MTAyMzMwMDAwMjBEMDEzMDAwMDAwMDYwMDIwRDAxMzgwMDAwMDA2MDU1Cis6MTAyMzQwMDAwMjBEMDE0MDAwMDAwMDZCMDIwRDAxNDgwMDAwMDA2MDFBCis6MTAyMzUwMDAwMjBEMDExNDAwMDAwMDU5MDIwRDAxMUMwMDAwMDA1QTdBCis6MTAyMzYwMDAwMjBEMDEyNDAwMDAwMDUwMDIwRDAxMkMwMDAwMDA1MDVECis6MTAyMzcwMDAwMjBEMDEzNDAwMDAwMDUwMDIwRDAxM0MwMDAwMDA1QjIyCis6MTAyMzgwMDAwMjBEMDE0NDAwMDAwMDUwMDIwRDAxMTgwMDAwMDA3OTA4Cis6MTAyMzkwMDAwMjBEMDEyMDAwMDAwMDdBMDIwRDAxMjgwMDAwMDA3MEVCCis6MTAyM0EwMDAwMjBEMDEzMDAwMDAwMDcwMDIwRDAxMzgwMDAwMDA3MEM1Cis6MTAyM0IwMDAwMjBEMDE0MDAwMDAwMDdCMDIwRDAxNDgwMDAwMDA3MDhBCis6MTAyM0MwMDAwNjBFMjAwMDAwMDAwODAwMDIwRTAwNEMwMDAwMDAzMjQzCis6MTAyM0QwMDAwMjBFMDA5NDAyMTUwMDIwMDIwRTAwOTgwMjE1MDAyMDQzCis6MTAyM0UwMDAwMjBFMDA5QzAwMDAwMDMwMDIwRTAwQTAwODEwMDAwMDQ5Cis6MTAyM0YwMDAwMjBFMDBBNDAwMDAwMDMzMDIwRTAwQTgwMDAwMDAzMDBFCis6MTAyNDAwMDAwMjBFMDBBQzAwMDAwMDMxMDIwRTAwQjAwMDAwMDAwMjFECis6MTAyNDEwMDAwMjBFMDBCNDAwMDAwMDA0MDIwRTAwQjgwMDAwMDAwMDJDCis6MTAyNDIwMDAwMjBFMDBCQzAwMDAwMDAyMDIwRTAwQzAwMDAwMDAwMjBDCis6MTAyNDMwMDAwMjBFMDBDNDAwMDAwMDAwMDIwRTAwQzgwMDAwMDAwMkVFCis6MTAyNDQwMDAwMjBFMDBDQzAwMDAwMDA3MDIwRTAwRDAwMDAwMDAwMkM3Cis6MTAyNDUwMDAwMjBFMDBENDAwMDAwMDAyMDIwRTAwRDgwMDAwMDAwMUFECis6MTAyNDYwMDAwMjBFMDE0NDAwMDAwMDAxMDIwRTAxNEMwMDAwMDAwMUI4Cis6MTAyNDcwMDAwMjBFMDE1MDAwMDAwMDAyMDIwRTAyMDQwMDAwMDAwMUUyCis6MTAyNDgwMDAwMjBFMDIwQzAwMDAwMDQwMDIwRTAyMTAwMDAwMDA0MDhDCis6MTAyNDkwMDAwMjBFMDIxQzAwMDAwMDA0MDIwRTAyMjAwMDAwMDAyMEI4Cis6MTAyNEEwMDAwMjBFMDIyNDAwMDAwMDBFMDIwRTAyMjgwMDAwMDAxQjkzCis6MTAyNEIwMDAwNjBFMDMwMDAwMDAwMDEyMDQwRTAyODAwMDFCMDM5N0FBCis6MTAyNEMwMDAwNjBFMDJFQzAwMDAwMDA1MDIwRTAwNTQwMDAwMDAwQzk1Cis6MTAyNEQwMDAwMjBFMDA1ODAwMDAwMDBDMDIwRTAwNUMwMDAwMDAwMDFDCis6MTAyNEUwMDAwMjBFMDA2MDAwMDAwMDEwMDIwRTAwNjQwMDAwMDAxMEU4Cis6MTAyNEYwMDAwNjBFMDA2ODAwMDAwMDAzMDIwRTAwREMwMDAwMDAwMzZFCis6MTAyNTAwMDAwMjBFMDAwNDAwMDAwMDAxMDIwRTAwMDgwMDAwMDAwMTlECis6MTAyNTEwMDAwMjBFMDAwQzAwMDAwMDAxMDIwRTAwMTAwMDAwMDAwMTdECis6MTAyNTIwMDAwMjBFMDAxNDAwMDAwMDAxMDIwRTAwMTgwMDAwMDAwMTVECis6MTAyNTMwMDAwMjBFMDAxQzAwMDAwMDAxMDIwRTAwMjAwMDAwMDAwMTNECis6MTAyNTQwMDAwMjBFMDAyNDAwMDAwMDAxMDIwRTAwMjgwMDAwMDAwMTFECis6MTAyNTUwMDAwMjBFMDAyQzAwMDAwMDAxMDIwRTAwMzAwMDAwMDAwMUZECis6MTAyNTYwMDAwMjBFMDAzNDAwMDAwMDAxMDIwRTAwMzgwMDAwMDAwMURECis6MTAyNTcwMDAwMjBFMDAzQzAwMDAwMDAxMDIwRTAwNDAwMDAwMDAwMUJECis6MTAyNTgwMDAwMjBFMDA0NDAwMDAwMDAxMDIwRTAxMTAwMDAwMDAwRkM2Cis6MTAyNTkwMDAwMjBFMDExODAwMDAwMDAwMDIwRTAxMjAwMDAwMDAwMEUxCis6MTAyNUEwMDAwMjBFMDEyODAwMDAwMDAwMDIwRTAxMTQwMDAwMDAyRjlFCis6MTAyNUIwMDAwMjBFMDExQzAwMDAwMDIwMDIwRTAxMjQwMDAwMDAwMDk5Cis6MTAyNUMwMDAwMjBFMDEyQzAwMDAwMDAwMDIwRTAxMTAwMDAwMDAxRjhFCis6MTAyNUQwMDAwMjBFMDExODAwMDAwMDEwMDIwRTAxMjAwMDAwMDAwMDkxCis6MTAyNUUwMDAwMjBFMDEyODAwMDAwMDAwMDIwRTAxMTQwMDAwMDAzRjRFCis6MTAyNUYwMDAwMjBFMDExQzAwMDAwMDMwMDIwRTAxMjQwMDAwMDAwMDQ5Cis6MTAyNjAwMDAwMjBFMDEyQzAwMDAwMDAwMDIwRTAxMTAwMDAwMDA0RjFECis6MTAyNjEwMDAwMjBFMDExODAwMDAwMDQwMDIwRTAxMjAwMDAwMDAwMDIwCis6MTAyNjIwMDAwMjBFMDEyODAwMDAwMDAwMDIwRTAxMTQwMDAwMDA2RkRECis6MTAyNjMwMDAwMjBFMDExQzAwMDAwMDYwMDIwRTAxMjQwMDAwMDAwMEQ4Cis6MTAyNjQwMDAwMjBFMDEyQzAwMDAwMDAwMDIwRTAxMTAwMDAwMDA1RkNECis6MTAyNjUwMDAwMjBFMDExODAwMDAwMDUwMDIwRTAxMjAwMDAwMDAwMEQwCis6MTAyNjYwMDAwMjBFMDEyODAwMDAwMDAwMDIwRTAxMTQwMDAwMDA3RjhECis6MTAyNjcwMDAwMjBFMDExQzAwMDAwMDcwMDIwRTAxMjQwMDAwMDAwMDg4Cis6MTAyNjgwMDAwMjBFMDEyQzAwMDAwMDAwMDczMDA0MDAwMEM5MDAwMDA5Cis6MTAyNjkwMDAwODMwMDdEODAwMDUwM0IyMDczNDAwMDAzMzMyMDAwMEM5Cis6MTAyNkEwMDAwNzM0ODAwMDMwQTcwQ0NEMDczNTAwMDAzNTM1MThGNzBBCis6MTAyNkIwMDAwNzM1ODAwMDJBNjIyNjQ1MDczNjAwMDAxOEQzMzBERTMxCis6MTAyNkMwMDAwODM2NDY2MDM3MzQwM0I0MDEzMDAwMDAwMDAwMDAwMEQzCis6MTAyNkQwMDAwMTMwMDAwNDAwMDAwMDAwMDEzMDAwMDgwMDAwMDAwMDhDCis6MTAyNkUwMDAwMTMwMDAwQzAwMDAwMDAwMDEzMDAwMTAwMDAwMDAwMDZDCis6MTAyNkYwMDAwMTMwMDAxNDAwMDAwMDAwMDIzMDAwMjAwMDAwMDAwMTQyCis6MTAyNzAwMDAwMjMwMDAyNDAwMDAwMDAyMDIzMDAwMjgwMDAwMDAwMzE0Cis6MTAyNzEwMDAwMjMwMDAyQzAwMDAwMDAwMDIzMDAwMzAwMDAwMDAwNEY1Cis6MTAyNzIwMDAwMjMwMDAzNDAwMDAwMDAxMDIzMDAwMzgwMDAwMDAwMEQ4Cis6MTAyNzMwMDAwMjMwMDAzQzAwMDAwMDAxMDIzMDAwNDAwMDAwMDAwNEI0Cis6MTAyNzQwMDAwMjMwMDA0NDAwMDAwMDAwMDIzMDAwNDgwMDAwMDAwMTk4Cis6MTAyNzUwMDAwMjMwMDA0QzAwMDAwMDAzMDIzMDAwNTAwMDAwMDAwMDc2Cis6MTAyNzYwMDAwMjMwMDA1NDAwMDAwMDAxMDIzMDAwNTgwMDAwMDAwNDU0Cis6MTAyNzcwMDAwMjMwMDA1QzAwMDAwMDAwMDIzMDAwNjAwMDAwMDAwMTM4Cis6MTAyNzgwMDAwMjMwMDA2NDAwMDAwMDAzMDIzMDAwNjgwMDAwMDAwMDE2Cis6MTAyNzkwMDAwMjMwMDA2QzAwMDAwMDAxMDIzMDAwNzAwMDAwMDAwNEY0Cis6MTAyN0EwMDAwMjMwMDA3NDAwMDAwMDAwMDIzMDAwNzgwMDAwMDAwNEQ1Cis6MTAyN0IwMDAwMjMwMDA3QzAwMDAwMDAzMDYzMDAwODAwMDAwMDAwMkIwCis6MTAyN0MwMDAwMjMwMDBBNDAwMDAzRkZGMDIzMDAwQTgwMDAwMDNGRjE5Cis6MTAyN0QwMDAwMjMwMDIyNDAwMDAwMDAwMDIzMDAyMzQwMDAwMDAwMDM5Cis6MTAyN0UwMDAwMjMwMDI0QzAwMDAwMDAwMDIzMDAyRTQwMDAwRkZGRjUzCis6MTAyN0YwMDAwNjMwMjAwMDAwMDAwODAwMDIzMzhCQzAwMDAwMDAwMUZBCis6MTAyODAwMDAwMjMzODAwMDAwMDAwMDFBMDIzMzgwNDAwMDAwMDA0RUI2Cis6MTAyODEwMDAwMjMzODA4MDAwMDAwMDEwMDIzMzgwQzAwMDAwMDAyMERFCis6MTAyODIwMDAwQzMzODMwMDAwMDdBMTIwMEEzMzgzMDAwMDAwMDEzODI1Cis6MTAyODMwMDAwQjMzODMwMDAwMDAxMzg4MEEzMzgzNDAwMDAwMDAwMDNDCis6MTAyODQwMDAwQzMzODM0MDAwMDAwMUY0MEIzMzgzNDAwMDAwMDAwNThCCis6MTAyODUwMDAwMjMzODM4MDAwMDdBMTIwMDIzMzgzQzAwMDAwMDFGNDBCCis6MTAyODYwMDAwMjMzMTQ4MDAwMDAwMDAxMEEzMzE0ODAwMDAwMDAwMENECis6MTAyODcwMDAwNjMyODAwMDAwMDAwMTAyMDYzMjIwMDgwMDAwMDBDODc1Cis6MTAyODgwMDAwNjMyMjAwMDAwMDAwMDAyMDQzMjhFQTAwMDEwMDNCNkMxCis6MTAyODkwMDAwNjMyM0VCMDAwMDAwMDA2MDYzMjNFRDgwMDAwMDAwMkJDCis6MTAyOEEwMDAwNjMyM0U4MDAwMDAwMDBBMDQzMjNFQTgwMDAyMDNDNjQxCis6MTAyOEIwMDAwNjMyM0UwMDAwMDAwMDIwMDYzMjUwMDAwMDAwMDQwMEY2Cis6MTAyOEMwMDAwNjMyNDAwMDAwMDAwMDA0MDQzMjc0QzAwMDAyMDNDODU1Cis6MTAyOEQwMDAwNjMyNDExMDAwMDAwMDAyMDYzMkQwMDAwMDAwMDAzMDM1Cis6MTAyOEUwMDAwNjMyREQ0MDAwMDAwMDQ0MDYzMkRBMDAwMDAwMDBEMDZECis6MTAyOEYwMDAwNjMyREVBMDAwMDAwMDAyMDYzMkUwMDAwMDAwMDgwMDAwCis6MTAyOTAwMDAwNjMyODQ1MDAwMDAwMTE4MDYzMjEwMDAwMDAwMDE4OEQxCis6MTAyOTEwMDAwNjMyNTAwMDAwMDAwMDIwMDYzMjUxMDAwMDAwMDAyMDY2Cis6MTAyOTIwMDAwNjMyNTIwMDAwMDAwMDIwMDYzMjUzMDAwMDAwMDAyMDUyCis6MTAyOTMwMDAwNjMyNTQwMDAwMDAwMDIwMDYzMjU1MDAwMDAwMDAyMDNFCis6MTAyOTQwMDAwNjMyNTYwMDAwMDAwMDIwMDYzMjU3MDAwMDAwMDAyMDJBCis6MTAyOTUwMDAwNjMyNTgwMDAwMDAwMDIwMDYzMjU5MDAwMDAwMDAyMDE2Cis6MTAyOTYwMDAwNjMyNUEwMDAwMDAwMDIwMDYzMjVCMDAwMDAwMDAyMDAyCis6MTAyOTcwMDAwNjMyNUMwMDAwMDAwMDIwMDYzMjVEMDAwMDAwMDAyMEVFCis6MTAyOTgwMDAwNjMyNUUwMDAwMDAwMDIwMDYzMjVGMDAwMDAwMDAyMERBCis6MTAyOTkwMDAwNjMyOERGMDAwMDAwMDAyMDQzMjhFMDAwMDAyMDNDQUVECis6MTAyOUEwMDAwNjMyOEUwODAwMDAwMDAyMDYzMkRFOTAwMDAwMDAwMkFGCis6MTAyOUIwMDAwNjMyMUM0MDAwMDAwMDM4MDYzMjg4QjAwMDAwMDExOEMyCis6MTAyOUMwMDAwNjMyMTYyMDAwMDAwMTg4MDYzMjUwODAwMDAwMDAyMEU4Cis6MTAyOUQwMDAwNjMyNTE4MDAwMDAwMDIwMDYzMjUyODAwMDAwMDAyMEE0Cis6MTAyOUUwMDAwNjMyNTM4MDAwMDAwMDIwMDYzMjU0ODAwMDAwMDAyMDkwCis6MTAyOUYwMDAwNjMyNTU4MDAwMDAwMDIwMDYzMjU2ODAwMDAwMDAyMDdDCis6MTAyQTAwMDAwNjMyNTc4MDAwMDAwMDIwMDYzMjU4ODAwMDAwMDAyMDY3Cis6MTAyQTEwMDAwNjMyNTk4MDAwMDAwMDIwMDYzMjVBODAwMDAwMDAyMDUzCis6MTAyQTIwMDAwNjMyNUI4MDAwMDAwMDIwMDYzMjVDODAwMDAwMDAyMDNGCis6MTAyQTMwMDAwNjMyNUQ4MDAwMDAwMDIwMDYzMjVFODAwMDAwMDAyMDJCCis6MTAyQTQwMDAwNjMyNUY4MDAwMDAwMDIwMDYzMjhERjgwMDAwMDAwMjkwCis6MTAyQTUwMDAwNDMyOEUxMDAwMDIwM0NDMDYzMjhFMTgwMDAwMDAwMkYxCis6MTAyQTYwMDAwNjMyREU5ODAwMDAwMDAyMDYzMjFEMjAwMDAwMDAzODA5Cis6MTAyQTcwMDAwMjMyOEQ1MDAwMDAwMDAwMDYzMjQwMTAwMDAwMDAwMkJCCis6MTAyQTgwMDAwMjMyOEQ1NDAwMDAwMDAwMDYzMjQwMjAwMDAwMDAwMjk3Cis6MTAyQTkwMDAwMjMyOEQ1ODAwMDAwMDAwMDYzMjQwMzAwMDAwMDAwMjczCis6MTAyQUEwMDAwMjMyOEQ1QzAwMDAwMDAwMDYzMjQwNDAwMDAwMDAwMjRGCis6MTAyQUIwMDAwMjMyOEQ2MDAwMDAwMDAwMDYzMjQwNTAwMDAwMDAwMjJCCis6MTAyQUMwMDAwMjMyOEQ2NDAwMDAwMDAwMDYzMjQwNjAwMDAwMDAwMjA3Cis6MTAyQUQwMDAwMjMyOEQ2ODAwMDAwMDAwMDYzMjQwNzAwMDAwMDAwMkUzCis6MTAyQUUwMDAwMjMyOEQ2QzAwMDAwMDAwMDYzMjQwODAwMDAwMDAwMkJGCis6MTAyQUYwMDAwNzIwMDQwMDAwOTEwMDAwMDgyMDA3ODAwMDEwMDNDRThBCis6MTAyQjAwMDAwNzI0MDAwMDJBRjMwMDAwMDcyNDgwMDAxNTA5MEFCREVECis6MTAyQjEwMDAwODI0QTlGMDY5MjgwM0QwMDEyMDAwMDAwMDAwMDAwMDZCCis6MTAyQjIwMDAwMTIwMDAwNDAwMDAwMDAwMDEyMDAwMDgwMDAwMDAwMDU3Cis6MTAyQjMwMDAwMTIwMDAwQzAwMDAwMDAwMDEyMDAwMTAwMDAwMDAwMDM3Cis6MTAyQjQwMDAwMTIwMDAxNDAwMDAwMDAwMDIyMDAwMjAwMDAwMDAwMTBECis6MTAyQjUwMDAwMjIwMDAyNDAwMDAwMDAyMDIyMDAwMjgwMDAwMDAwM0UwCis6MTAyQjYwMDAwMjIwMDAyQzAwMDAwMDAwMDIyMDAwMzAwMDAwMDAwNEMxCis6MTAyQjcwMDAwMjIwMDAzNDAwMDAwMDAxMDIyMDAwMzgwMDAwMDAwMEE0Cis6MTAyQjgwMDAwMjIwMDAzQzAwMDAwMDAxMDIyMDAwNDAwMDAwMDAwNDgwCis6MTAyQjkwMDAwMjIwMDA0NDAwMDAwMDAwMDIyMDAwNDgwMDAwMDAwMTY0Cis6MTAyQkEwMDAwMjIwMDA0QzAwMDAwMDAzMDIyMDAwNTAwMDAwMDAwMDQyCis6MTAyQkIwMDAwMjIwMDA1NDAwMDAwMDAxMDIyMDAwNTgwMDAwMDAwNDIwCis6MTAyQkMwMDAwMjIwMDA1QzAwMDAwMDAwMDIyMDAwNjAwMDAwMDAwMTA0Cis6MTAyQkQwMDAwMjIwMDA2NDAwMDAwMDAzMDIyMDAwNjgwMDAwMDAwMEUyCis6MTAyQkUwMDAwMjIwMDA2QzAwMDAwMDAxMDIyMDAwNzAwMDAwMDAwNEMwCis6MTAyQkYwMDAwMjIwMDA3NDAwMDAwMDAwMDIyMDAwNzgwMDAwMDAwNEExCis6MTAyQzAwMDAwMjIwMDA3QzAwMDAwMDAzMDYyMDAwODAwMDAwMDAwMjdCCis6MTAyQzEwMDAwMjIwMDBBNDAwMDAzRkZGMDIyMDAwQTgwMDAwMDNGRkU0Cis6MTAyQzIwMDAwMjIwMDIyNDAwMDAwMDAwMDIyMDAyMzQwMDAwMDAwMDA0Cis6MTAyQzMwMDAwMjIwMDI0QzAwMDAwMDAwMDIyMDAyRTQwMDAwRkZGRjFFCis6MTAyQzQwMDAwNjIwMjAwMDAwMDAwODAwMDIyMzhCQzAwMDAwMDAwMUM1Cis6MTAyQzUwMDAwMjIzODAwMDAwMDAwMDEwMDIyMzgwNDAwMDAwMDAxMkM4Cis6MTAyQzYwMDAwMjIzODA4MDAwMDAwMDMwMDIyMzgwQzAwMDAwMDAwRTlDCis6MTAyQzcwMDAwQzIzODMwMDAwMDdBMTIwMEEyMzgzMDAwMDAwMDEzOEYxCis6MTAyQzgwMDAwQjIzODMwMDAwMDAxMzg4MEEyMzgzNDAwMDAwMDAwMDA4Cis6MTAyQzkwMDAwQzIzODM0MDAwMDAwMUY0MEIyMzgzNDAwMDAwMDAwNTU3Cis6MTAyQ0EwMDAwMjIzODM4MDAwMDdBMTIwMDIyMzgzQzAwMDAwMDFGNEQ3Cis6MTAyQ0IwMDAwMjIzMTQ4MDAwMDAwMDAxMEEyMzE0ODAwMDAwMDAwMDk5Cis6MTAyQ0MwMDAwNjIyMTAwMDAwMDAwMDQyMDYyMjIwMDgwMDAwMDBDODcyCis6MTAyQ0QwMDAwNjIyMjAwMDAwMDAwMDAyMDYyMkIwMDAwMDAwMDBDNjBDCis6MTAyQ0UwMDAwNDIyQjMxODAwMDUwM0QyMDYyMkIzMkMwMDAwMDAwQjA3Cis6MTAyQ0YwMDAwNDIyQjM1ODAwMDUwM0Q3MDYyMkIzNkMwMDAwMDAwQjcyCis6MTAyRDAwMDAwNDIyQjM5ODAwMDUwM0RDMDYyMkIzQUMwMDAwMDAwQkRDCis6MTAyRDEwMDAwNDIyQjNEODAwMDUwM0UxMDYyMkIzRUMwMDAwMDAwQjQ3Cis6MTAyRDIwMDAwNDIyQjQxODAwMDUwM0U2MDYyMkI0MkMwMDAwMDAwQkIwCis6MTAyRDMwMDAwNDIyQjQ1ODAwMDUwM0VCMDYyMkI0NkMwMDAwMDAwQjFCCis6MTAyRDQwMDAwNDIyQjQ5ODAwMDUwM0YwMDYyMkI0QUMwMDAwMDAwQjg2Cis6MTAyRDUwMDAwNDIyQjREODAwMDUwM0Y1MDYyMkI0RUMwMDAwMDAwQkYxCis6MTAyRDYwMDAwNDIyQjUxODAwMDUwM0ZBMDYyMkI1MkMwMDAwMDAwQjVBCis6MTAyRDcwMDAwNDIyQjU1ODAwMDUwM0ZGMDYyMkI1NkMwMDAwMDAwQkM1Cis6MTAyRDgwMDAwNDIyQjU5ODAwMDUwNDA0MDYyMkI1QUMwMDAwMDAwQjJGCis6MTAyRDkwMDAwNDIyQjVEODAwMDUwNDA5MDYyMkI1RUMwMDAwMDAwQjlBCis6MTAyREEwMDAwNDIyQjYxODAwMDUwNDBFMDYyMkI2MkMwMDAwMDAwQjAzCis6MTAyREIwMDAwNDIyQjY1ODAwMDUwNDEzMDYyMkI2NkMwMDAwMDAwQjZFCis6MTAyREMwMDAwNDIyQjY5ODAwMDUwNDE4MDYyMkI2QUMwMDAwMDAwQkQ5Cis6MTAyREQwMDAwNDIyQjZEODAwMDUwNDFEMDYyMkI2RUMwMDAwMDAwQjQ0Cis6MTAyREUwMDAwNDIyQjcxODAwMDUwNDIyMDYyMkI3MkMwMDAwMDAwQkFECis6MTAyREYwMDAwNDIyQjc1ODAwMDUwNDI3MDYyMkI3NkMwMDAwMDAwQjE4Cis6MTAyRTAwMDAwNDIyQjc5ODAwMDUwNDJDMDYyMkI3QUMwMDAwMDAwQjgyCis6MTAyRTEwMDAwNDIyQjdEODAwMDUwNDMxMDYyMkI3RUMwMDAwMDAwQkVECis6MTAyRTIwMDAwNDIyQjgxODAwMDUwNDM2MDYyMkI4MkMwMDAwMDAwQjU2Cis6MTAyRTMwMDAwNDIyQjg1ODAwMDUwNDNCMDYyMkI4NkMwMDAwMDAwQkMxCis6MTAyRTQwMDAwNDIyQjg5ODAwMDUwNDQwMDYyMkI4QUMwMDAwMDAwQjJDCis6MTAyRTUwMDAwNDIyQjhEODAwMDUwNDQ1MDYyMkI4RUMwMDAwMDAwQjk3Cis6MTAyRTYwMDAwNDIyQjkxODAwMDUwNDRBMDYyMkI5MkMwMDAwMDAwQjAwCis6MTAyRTcwMDAwNDIyQjk1ODAwMDUwNDRGMDYyMkI5NkMwMDAwMDAwQjZCCis6MTAyRTgwMDAwNDIyQjk5ODAwMDUwNDU0MDYyMkI5QUMwMDAwMDAwQkQ2Cis6MTAyRTkwMDAwNDIyQjlEODAwMDUwNDU5MDYyMkI5RUMwMDAwMDAwQjQxCis6MTAyRUEwMDAwNDIyQkExODAwMDUwNDVFMDYyMkJBMkMwMDAwMDAwQkFBCis6MTAyRUIwMDAwNDIyQkE1ODAwMDUwNDYzMDYyMkJBNkMwMDAwMDAwQjE1Cis6MTAyRUMwMDAwNDIyQkE5ODAwMDUwNDY4MDYyMkJBQUMwMDAwMDAwQjgwCis6MTAyRUQwMDAwNDIyQkFEODAwMDUwNDZEMDYyMkJBRUMwMDAwMDAwNUYxCis6MTAyRUUwMDAwNjIyQkIwMDAwMDAwMDUzMDQyMkJDNEMwMDAxMDQ3MjA3Cis6MTAyRUYwMDAwNjIyQkM1MDAwMDAwMDAzMDQyMkJDNUMwMDAxMDQ3M0U1Cis6MTAyRjAwMDAwNjIyQkM2MDAwMDAwMDAzMDQyMkJDNkMwMDAxMDQ3NEIzCis6MTAyRjEwMDAwNjIyQkM3MDAwMDAwMDAzMDQyMkJDN0MwMDAxMDQ3NTgyCis6MTAyRjIwMDAwNjIyQkM4MDAwMDAwMDAzMDQyMkJDOEMwMDAxMDQ3NjUxCis6MTAyRjMwMDAwNjIyQkM5MDAwMDAwMDAzMDQyMkJDOUMwMDAxMDQ3NzIwCis6MTAyRjQwMDAwNjIyQkNBMDAwMDAwMDAzMDQyMkJDQUMwMDAxMDQ3OEVGCis6MTAyRjUwMDAwNjIyQkNCMDAwMDAwMDAzMDQyMkJDQkMwMDAxMDQ3OUJFCis6MTAyRjYwMDAwNjIyODgwMDAwMDAwMTAwMDYyMjgwMDAwMDAwMDIwMDA2Cis6MTAyRjcwMDAwNDIyMTI3MDAwMTAwNDdBMDYyMjMwMDAwMDAwMDBDMDAzCis6MTAyRjgwMDAwNjIyNjcwMDAwMDAwMTAwMDYyMjkwMDAwMDAwMDQwMEY1Cis6MTAyRjkwMDAwNDIyNkIwODAwMjAwNDhBMDIyMjEyQzBGRkZGRkZGRkY4Cis6MTAyRkEwMDAwNjIyMTFFODAwMDAwMDAyMDYyMjEyQzgwMDAwMDAwOUYzCis6MTAyRkIwMDAwNjIyMTJFQzAwMDAwMDA5MDYyMjhDMDAwMDAwMDAwODI2Cis6MTAyRkMwMDAwMjIyMTE0ODAwMDAwMDAwMDYyMjEzMjAwMDAwMDAwNjIzCis6MTAyRkQwMDAwNjIyMzMwMDAwMDAwMDAyMDYyMjYwNDAwMDAwMDAzMDlDCis6MTAyRkUwMDAwNjIyOEMyMDAwMDAwMDA4MDIyMjExNEMwMDAwMDAwMDg0Cis6MTAyRkYwMDAwNjIyMTMzODAwMDAwMDA2MDYyMjMzMDgwMDAwMDAwMkYzCis6MTAzMDAwMDAwNjIyNjEwMDAwMDAwMDMwMDYyMjhDNDAwMDAwMDAwODBCCis6MTAzMDEwMDAwMjIyMTE1MDAwMDAwMDAwMDYyMjEzNTAwMDAwMDAwNjlBCis6MTAzMDIwMDAwNjIyMzMxMDAwMDAwMDAyMDYyMjYxQzAwMDAwMDAzMEJBCis6MTAzMDMwMDAwNjIyOEM2MDAwMDAwMDA4MDIyMjExNTQwMDAwMDAwMEVCCis6MTAzMDQwMDAwNjIyMTM2ODAwMDAwMDA2MDYyMjMzMTgwMDAwMDAwMjYyCis6MTAzMDUwMDAwNjIyNjI4MDAwMDAwMDMwMDYyMjhDODAwMDAwMDAwOEZBCis6MTAzMDYwMDAwMjIyMTE1ODAwMDAwMDAwMDYyMjEzODAwMDAwMDAwNjEyCis6MTAzMDcwMDAwNjIyMzMyMDAwMDAwMDAyMDYyMjYzNDAwMDAwMDAzMEQ4Cis6MTAzMDgwMDAwNjIyOENBMDAwMDAwMDA4MDIyMjExNUMwMDAwMDAwMDUzCis6MTAzMDkwMDAwNjIyMTM5ODAwMDAwMDA2MDYyMjMzMjgwMDAwMDAwMkQyCis6MTAzMEEwMDAwNjIyNjQwMDAwMDAwMDMwMDYyMjhDQzAwMDAwMDAwOEU4Cis6MTAzMEIwMDAwMjIyMTE2MDAwMDAwMDAwMDYyMjEzQjAwMDAwMDAwNjhBCis6MTAzMEMwMDAwNjIyMzMzMDAwMDAwMDAyMDYyMjY0QzAwMDAwMDAzMEY3Cis6MTAzMEQwMDAwNjIyOENFMDAwMDAwMDA4MDIyMjExNjQwMDAwMDAwMEJCCis6MTAzMEUwMDAwNjIyMTNDODAwMDAwMDA2MDYyMjMzMzgwMDAwMDAwMjQyCis6MTAzMEYwMDAwNjIyNjU4MDAwMDAwMDMwMDIxNjEwMDAwMDAwMDAyODQzCis6MTAzMTAwMDAwMjE3MDAwODAwMDAwMDAyMDIxNzAwMkMwMDAwMDAwMzU0Cis6MTAzMTEwMDAwMjE3MDAzQzAwMDAwMDA0MDIxNzAwNDgwMDAwMDAwMkYzCis6MTAzMTIwMDAwMjE3MDA0QzAwMDAwMDkwMDIxNzAwNTAwMDAwMDA5MEIxCis6MTAzMTMwMDAwMjE3MDA1NDAwODAwMDkwMDIxNzAwNTgwODEwMDAwMDg5Cis6MTAzMTQwMDAwMjE3MDA2MDAwMDAwMDhBMDIxNzAwNjQwMDAwMDA4MDdGCis6MTAzMTUwMDAwMjE3MDA2ODAwMDAwMDgxMDIxNzAwNkMwMDAwMDA4MDY4Cis6MTAzMTYwMDAwMjE3MDA3MDAwMDAwMDA2MDIxNzAwNzgwMDAwMDdEMDY4Cis6MTAzMTcwMDAwMjE3MDA3QzAwMDAwNzZDMDIxNzAwMzgwMDdDMTAwNDY2Cis6MTAzMTgwMDAwMjE3MDAwNDAwMDAwMDBGMDYxNjQwMjQwMDAwMDAwMjkxCis6MTAzMTkwMDAwMjE2NDA3MDAwMDAwMDFDMDIxNjQyMDgwMDAwMDAwMUU4Cis6MTAzMUEwMDAwMjE2NDIxMDAwMDAwMDAxMDIxNjQyMjAwMDAwMDAwMTM5Cis6MTAzMUIwMDAwMjE2NDIyODAwMDAwMDAxMDIxNjQyMzAwMDAwMDAwMTAxCis6MTAzMUMwMDAwMjE2NDIzODAwMDAwMDAxMDIxNjQyNjAwMDAwMDAwMkIwCis6MTAzMUQwMDAwQzE2NDAxQzAwMDNEMDkwMEExNjQwMUMwMDAwMDA5Q0Y2Cis6MTAzMUUwMDAwQjE2NDAxQzAwMDAwOUM0MDIxNjQwMzAwMDAwMDAwODA1Cis6MTAzMUYwMDAwMjE2NDAzNDAwMDAwMDBDMDIxNjQwMzgwMDAwMDAxMDk3Cis6MTAzMjAwMDAwMjE2NDA0NDAwMDAwMDIwMDIxNjQwMDAwMDAwMDAwMUE5Cis6MTAzMjEwMDAwMjE2NDBEODAwMDAwMDAxMDIxNjQwMDgwMDAwMDAwMTFDCis6MTAzMjIwMDAwMjE2NDAwQzAwMDAwMDAxMDIxNjQwMTAwMDAwMDAwMUQwCis6MTAzMjMwMDAwMjE2NDI0MDAwMDAwMDAwMDIxNjQyNDgwMDAwMDAwMDUyCis6MTAzMjQwMDAwNjE2NDI3MDAwMDAwMDAyMDIxNjQyNTAwMDAwMDAwMDA0Cis6MTAzMjUwMDAwMjE2NDI1ODAwMDAwMDAwMDYxNjQyODAwMDAwMDAwMkRDCis6MTAzMjYwMDAwMjE2NjAwODAwMDAxMjI0MDIxNjYwMEMwMDAwMTIxMDAyCis6MTAzMjcwMDAwMjE2NjAxMDAwMDAxMjE0MDIxNjYwMUMwMDAwRkZGRjBFCis6MTAzMjgwMDAwMjE2NjAyMDAwMDBGRkZGMDIxNjYwMjQwMDAwRkZGRjBFCis6MTAzMjkwMDAwMjE2NjAyODAwMDBGRkZGMDIxNjYwMzgwMDAwMDAyMEMwCis6MTAzMkEwMDAwMjE2NjAzQzAwMDAwMDIwMDYxNjYwNDAwMDAwMDAwMjhDCis6MTAzMkIwMDAwMjE2NjA0ODAwMDAwMDIzMDIxNjYwNEMwMDAwMDAyNDQzCis6MTAzMkMwMDAwMjE2NjA1MDAwMDAwMDI1MDIxNjYwNTQwMDAwMDAyNjFGCis6MTAzMkQwMDAwMjE2NjA1ODAwMDAwMDI3MDIxNjYwNUMwMDAwMDAyOUZBCis6MTAzMkUwMDAwMjE2NjA2MDAwMDAwMDJBMDIxNjYwNjQwMDAwMDAyQkQ1Cis6MTAzMkYwMDAwMjE2NjA2ODAwMDAwMDJDMDIxNjYwNkMwMDAwMDAyREIxCis6MTAzMzAwMDAwMjE2NjA3MDAwMDAwMEVDMDIxNjYwNzQwMDAwMDAxMUVDCis6MTAzMzEwMDAwMjE2NjA3ODAwMDAwMDEyMDYxNjYwN0MwMDAwMDAwRkE0Cis6MTAzMzIwMDAwMjE2NjBCODAwMDAwMDAxMDIxNjYwQkMwMDAwMDAwMTM3Cis6MTAzMzMwMDAwNjE2NjBDMDAwMDAwMDBDMDIxNjYwRjAwMDAwMDAwMURDCis6MTAzMzQwMDAwNjE2NjBGNDAwMDAwMDMxMDIxNjYxQjgwMDAwMDAwMUFBCis6MTAzMzUwMDAwNjE2NjFCQzAwMDAwMDBEMDIxNjYxRjAwMDAwMDAwMUJECis6MTAzMzYwMDAwNjE2NjFGNDAwMDAwMDExMDIxNjYyMzgwN0ZGRkZGRjI1Cis6MTAzMzcwMDAwMjE2NjIzQzAwMDAwMDNGMDIxNjYyNDAwN0ZGRkZGRjlBCis6MTAzMzgwMDAwMjE2NjI0NDAwMDAwMDBGMDExNjYyNDgwMDAwMDAwMEFGCis6MTAzMzkwMDAwMTE2NjI0QzAwMDAwMDAwMDExNjYyNTAwMDAwMDAwMDlGCis6MTAzM0EwMDAwMTE2NjI1NDAwMDAwMDAwMDExNjYyNTgwMDAwMDAwMDdGCis6MTAzM0IwMDAwMTE2NjI1QzAwMDAwMDAwMDExNjYyNjAwMDAwMDAwMDVGCis6MTAzM0MwMDAwMTE2NjI2NDAwMDAwMDAwMDExNjYyNjgwMDAwMDAwMDNGCis6MTAzM0QwMDAwMTE2NjI2QzAwMDAwMDAwMDExNjYyNzAwMDAwMDAwMDFGCis6MTAzM0UwMDAwMTE2NjI3NDAwMDAwMDAwMDExNjYyNzgwMDAwMDAwMEZGCis6MTAzM0YwMDAwMTE2NjI3QzAwMDAwMDAwMEMxNjYwMDAwMDAwMDNFODZCCis6MTAzNDAwMDAwQTE2NjAwMDAwMDAwMDAxMEIxNjYwMDAwMDAwMDAwQUIwCis6MTAzNDEwMDAwMjE2ODA0MDAwMDAwMDA2MDIxNjgwNDQwMDAwMDAwNUVECis6MTAzNDIwMDAwMjE2ODA0ODAwMDAwMDBBMDIxNjgwNEMwMDAwMDAwNUM5Cis6MTAzNDMwMDAwMjE2ODA1NDAwMDAwMDAyMDIxNjgwQ0MwMDAwMDAwNDM2Cis6MTAzNDQwMDAwMjE2ODBEMDAwMDAwMDA0MDIxNjgwRDQwMDAwMDAwNEEwCis6MTAzNDUwMDAwMjE2ODBEODAwMDAwMDA0MDIxNjgwREMwMDAwMDAwNDgwCis6MTAzNDYwMDAwMjE2ODBFMDAwMDAwMDA0MDIxNjgwRTQwMDAwMDAwNDYwCis6MTAzNDcwMDAwMjE2ODBFODAwMDAwMDA0MDIxNjg4MDQwMDAwMDAwNDIwCis6MTAzNDgwMDAwMjE2ODAzMDAwMDAwMDdDMDIxNjgwMzQwMDAwMDAzREVGCis6MTAzNDkwMDAwMjE2ODAzODAwMDAwMDNGMDIxNjgwM0MwMDAwMDA5Q0FECis6MTAzNEEwMDAwMjE2ODBGMDAwMDAwMDA3MDYxNjgwRjQwMDAwMDAwNUY4Cis6MTAzNEIwMDAwMjE2ODgwQzAxMDEwMTAxMDIxNjgxMDgwMDAwMDAwMEJCCis6MTAzNEMwMDAwMjE2ODEwQzAwMDAwMDA0MDIxNjgxMTAwMDAwMDAwNEE2Cis6MTAzNEQwMDAwMjE2ODExNDAwMDAwMDAyMDIxNjg4MTAwODAxMjAwNDYwCis6MTAzNEUwMDAwMjE2ODExODAwMDAwMDA1MDIxNjgxMUMwMDAwMDAwNTZDCis6MTAzNEYwMDAwMjE2ODEyMDAwMDAwMDA1MDIxNjgxMjQwMDAwMDAwNTRDCis6MTAzNTAwMDAwMjE2ODgyQzIwMDgxMDAxMDIxNjgxMjgwMDAwMDAwOEVECis6MTAzNTEwMDAwMjE2ODEyQzAwMDAwMDA2MDIxNjgxMzAwMDAwMDAwNzEwCis6MTAzNTIwMDAwMjE2ODEzNDAwMDAwMDAwMDIxNjg4MzAwMTAxMDEyMERCCis6MTAzNTMwMDAwNjE2ODEzODAwMDAwMDA0MDIxNjg4MzQwMTAxMDEwMURBCis6MTAzNTQwMDAwMjE2ODE0ODAwMDAwMDAwMDIxNjgxNEMwMDAwMDAwNEIxCis6MTAzNTUwMDAwMjE2ODE1MDAwMDAwMDA0MDIxNjgxNTQwMDAwMDAwMjhGCis6MTAzNTYwMDAwMjE2ODgzODA4MDEyMDA0MDIxNjgxNTgwMDAwMDAwNTYwCis6MTAzNTcwMDAwMjE2ODE1QzAwMDAwMDA1MDIxNjgxNjAwMDAwMDAwNTUzCis6MTAzNTgwMDAwMjE2ODE2NDAwMDAwMDA1MDIxNjg4M0MyMDA4MTAwMTI0Cis6MTAzNTkwMDAwMjE2ODE2ODAwMDAwMDA4MDIxNjgxNkMwMDAwMDAwNjE3Cis6MTAzNUEwMDAwMjE2ODE3MDAwMDAwMDA3MDIxNjgxNzQwMDAwMDAwMUZECis6MTAzNUIwMDAwMjE2ODg0MDAxMDEwMTIwMDIxNjgxNzgwMDAwMDAwMUY2Cis6MTAzNUMwMDAwMjE2ODE3QzAwMDAwMDAxMDIxNjgxODAwMDAwMDAwMUNCCis6MTAzNUQwMDAwMjE2ODE4NDAwMDAwMDAxMDIxNjg4NDQwMTAxMDEwMUU1Cis6MTAzNUUwMDAwMjE2ODE4ODAwMDAwMDAxMDIxNjgxOEMwMDAwMDAwNDkwCis6MTAzNUYwMDAwMjE2ODE5MDAwMDAwMDA0MDIxNjgxOTQwMDAwMDAwMjZGCis6MTAzNjAwMDAwMjE2ODg0ODA4MDEyMDA0MDIxNjgxOTgwMDAwMDAwNTZGCis6MTAzNjEwMDAwMjE2ODE5QzAwMDAwMDA1MDIxNjgxQTAwMDAwMDAwNTMyCis6MTAzNjIwMDAwMjE2ODFBNDAwMDAwMDA1MDIxNjg4MTQyMDA4MTAwMTZCCis6MTAzNjMwMDAwMjE2ODFBODAwMDAwMDA4MDIxNjgxQUMwMDAwMDAwNkY2Cis6MTAzNjQwMDAwMjE2ODFCMDAwMDAwMDA3MDIxNjgxQjQwMDAwMDAwMURDCis6MTAzNjUwMDAwMjE2ODgxODAxMDEwMTIwMDIxNjgxQjgwMDAwMDAwMTNECis6MTAzNjYwMDAwMjE2ODFCQzAwMDAwMDAxMDIxNjgxQzAwMDAwMDAwMUFBCis6MTAzNjcwMDAwMjE2ODFDNDAwMDAwMDAxMDIxNjg4MUMwMTAxMDEwMTJDCis6MTAzNjgwMDAwMjE2ODFDODAwMDAwMDAxMDIxNjgxQ0MwMDAwMDAwNDZGCis6MTAzNjkwMDAwMjE2ODFEMDAwMDAwMDA0MDIxNjgxRDQwMDAwMDAwMjRFCis6MTAzNkEwMDAwMjE2ODgyMDA4MDEyMDA0MDIxNjgxRDgwMDAwMDAwNUI3Cis6MTAzNkIwMDAwMjE2ODFEQzAwMDAwMDA1MDIxNjgxRTAwMDAwMDAwNTEyCis6MTAzNkMwMDAwMjE2ODFFNDAwMDAwMDA1MDIxNjg4MjQyMDA4MTAwMTdCCis6MTAzNkQwMDAwMjE2ODFFODAwMDAwMDA4MDIxNjgxRUMwMDAwMDAwNkQ2Cis6MTAzNkUwMDAwMjE2ODFGMDAwMDAwMDA3MDIxNkU0MEMwMDAwMDAwMDQyCis6MTAzNkYwMDAwMjE2ODgyODAxMDEwMTIwMDYxNkU0MTAwMDAwMDAwNENCCis6MTAzNzAwMDAwMjE2RTAwMDAxMDEwMTAxMDIxNkU0MjAwMDAwMDAwMEExCis6MTAzNzEwMDAwMjE2RTQyNDAwMDAwMDA0MDIxNkU0MjgwMDAwMDAwNDVECis6MTAzNzIwMDAwMjE2RTQyQzAwMDAwMDAyMDIxNkUwMDQwODAxMjAwNDQ2Cis6MTAzNzMwMDAwMjE2RTQzMDAwMDAwMDA1MDIxNkU0MzQwMDAwMDAwNTIzCis6MTAzNzQwMDAwMjE2RTQzODAwMDAwMDA1MDIxNkU0M0MwMDAwMDAwNTAzCis6MTAzNzUwMDAwMjE2RTAwODIwMDgxMDAxMDIxNkU0NDAwMDAwMDAwOEVDCis6MTAzNzYwMDAwMjE2RTQ0NDAwMDAwMDA2MDIxNkU0NDgwMDAwMDAwN0M4Cis6MTAzNzcwMDAwMjE2RTQ0QzAwMDAwMDAwMDIxNkUwMEMwMTAxMDEyMERBCis6MTAzNzgwMDAwNjE2RTQ1MDAwMDAwMDA0MDIxNkUwMTAwMTAxMDEwMUQ5Cis6MTAzNzkwMDAwMjE2RTQ2MDAwMDAwMDAwMDIxNkU0NjQwMDAwMDAwNDY5Cis6MTAzN0EwMDAwMjE2RTQ2ODAwMDAwMDA0MDIxNkU0NkMwMDAwMDAwMjQ3Cis6MTAzN0IwMDAwMjE2RTAxNDA4MDEyMDA0MDIxNkU0NzAwMDAwMDAwNTVGCis6MTAzN0MwMDAwMjE2RTQ3NDAwMDAwMDA1MDIxNkU0NzgwMDAwMDAwNTBCCis6MTAzN0QwMDAwMjE2RTQ3QzAwMDAwMDA1MDIxNkUwMTgyMDA4MTAwMTIzCis6MTAzN0UwMDAwMjE2RTQ4MDAwMDAwMDA4MDIxNkU0ODQwMDAwMDAwNkNGCis6MTAzN0YwMDAwMjE2RTQ4ODAwMDAwMDA3MDIxNkU0OEMwMDAwMDAwMUI1Cis6MTAzODAwMDAwMjE2RTAxQzAxMDEwMTIwMDIxNkU0OTAwMDAwMDAwMUY0Cis6MTAzODEwMDAwMjE2RTQ5NDAwMDAwMDAxMDIxNkU0OTgwMDAwMDAwMTgyCis6MTAzODIwMDAwMjE2RTQ5QzAwMDAwMDAxMDIxNkUwMjAwMTAxMDEwMUUzCis6MTAzODMwMDAwMjE2RTRBMDAwMDAwMDAxMDIxNkU0QTQwMDAwMDAwNDQ3Cis6MTAzODQwMDAwMjE2RTRBODAwMDAwMDA0MDIxNkU0QUMwMDAwMDAwMjI2Cis6MTAzODUwMDAwMjE2RTAyNDA4MDEyMDA0MDIxNkU0QjAwMDAwMDAwNTZFCis6MTAzODYwMDAwMjE2RTRCNDAwMDAwMDA1MDIxNkU0QjgwMDAwMDAwNUVBCis6MTAzODcwMDAwMjE2RTRCQzAwMDAwMDA1MDIxNkUwMjgyMDA4MTAwMTMyCis6MTAzODgwMDAwMjE2RTRDMDAwMDAwMDA4MDIxNkU0QzQwMDAwMDAwNkFFCis6MTAzODkwMDAwMjE2RTRDODAwMDAwMDA3MDIxNkU0Q0MwMDAwMDAwMTk0Cis6MTAzOEEwMDAwMjE2RTAyQzAxMDEwMTIwMDIxNkU0RDAwMDAwMDAwMTA0Cis6MTAzOEIwMDAwMjE2RTRENDAwMDAwMDAxMDIxNkU0RDgwMDAwMDAwMTYyCis6MTAzOEMwMDAwMjE2RTREQzAwMDAwMDAxMDIxNkUwMzAwMTAxMDEwMUYzCis6MTAzOEQwMDAwMjE2RTRFMDAwMDAwMDAxMDIxNkU0RTQwMDAwMDAwNDI3Cis6MTAzOEUwMDAwMjE2RTRFODAwMDAwMDA0MDIxNkU0RUMwMDAwMDAwMjA2Cis6MTAzOEYwMDAwMjE2RTAzNDA4MDEyMDA0MDIxNkU0RjAwMDAwMDAwNTdFCis6MTAzOTAwMDAwMjE2RTRGNDAwMDAwMDA1MDIxNkU0RjgwMDAwMDAwNUM5Cis6MTAzOTEwMDAwMjE2RTRGQzAwMDAwMDA1MDIxNkUwMzgyMDA4MTAwMTQxCis6MTAzOTIwMDAwMjE2RTUwMDAwMDAwMDA4MDIxNkU1MDQwMDAwMDAwNjhCCis6MTAzOTMwMDAwMjE2RTUwODAwMDAwMDA3MDIxNkUwM0MwMTAxMDEyMDI0Cis6MTAzOTQwMDAwMjE2ODI0MDAwM0YwMDNGMDIxNjgyNDQwMDAwMDAwMDQxCis6MTAzOTUwMDAwMjE2RTUyNDAwM0YwMDNGMDIxNkU1MjgwMDAwMDAwMEEzCis6MTAzOTYwMDAwMjE2ODI0ODAwMDAwMDAwMDIxNjgyNEMwMDNGMDAzRjExCis6MTAzOTcwMDAwMjE2RTUyQzAwMDAwMDAwMDIxNkU1MzAwMDNGMDAzRjczCis6MTAzOTgwMDAwMjE2ODI1MDAxMDAwMTAwMDIxNjgyNTQwMTAwMDEwMDVCCis6MTAzOTkwMDAwMjE2RTUzNDAxMDAwMTAwMDIxNkU1MzgwMTAwMDEwMEJECis6MTAzOUEwMDAwNjE2ODI1ODAwMDAwMDAyMDIxNkU1M0MwMDAwMDAwMEU2Cis6MTAzOUIwMDAwMjE2RTU0MDAwMDAwMDAwMDIxNjgyNjAwMEMwMDBDMDUwCis6MTAzOUMwMDAwMjE2ODI2NDAwQzAwMEMwMDIxNkU1NDQwMEMwMDBDMEI4Cis6MTAzOUQwMDAwMjE2RTU0ODAwQzAwMEMwMDIxNjgyNjgxRTAwMUUwMEU0Cis6MTAzOUUwMDAwMjE2ODI2QzFFMDAxRTAwMDIxNkU1NEMxRTAwMUUwMDEwCis6MTAzOUYwMDAwMjE2RTU1MDFFMDAxRTAwMDIxNjgyNzA0MDAwNDAwMEI0Cis6MTAzQTAwMDAwMjE2ODI3NDQwMDA0MDAwMDIxNkU1NTQ0MDAwNDAwMDU3Cis6MTAzQTEwMDAwMjE2RTU1ODQwMDA0MDAwMDIxNjgyNzg4MDAwODAwMEJGCis6MTAzQTIwMDAwMjE2ODI3QzgwMDA4MDAwMDIxNkU1NUM4MDAwODAwMDI3Cis6MTAzQTMwMDAwMjE2RTU2MDgwMDA4MDAwMDIxNjgyODAyMDAwMjAwMENGCis6MTAzQTQwMDAwMjE2ODI4NDIwMDAyMDAwMDIxNkU1NjQyMDAwMjAwMDc3Cis6MTAzQTUwMDAwMjE2RTU2ODIwMDAyMDAwMDYxNjgyODgwMDAwMDAwMjk5Cis6MTAzQTYwMDAwMjE2RTU2QzAwMDAwMDAwMDIxNkU1NzAwMDAwMDAwMDgwCis6MTAzQTcwMDAwMjE2ODI5MDAwMDAwMDAwMDIxNjgyOTQwMDAwMDAwMEVFCis6MTAzQTgwMDAwMjE2RTU3NDAwMDAwMDAwMDIxNkU1NzgwMDAwMDAwMDUwCis6MTAzQTkwMDAwMjE2ODI5ODAwMDAwMDAwMDIxNjgyOUMwMDAwMDAwMEJFCis6MTAzQUEwMDAwMjE2RTU3QzAwMDAwMDAwMDIxNkU1ODAwMDAwMDAwMDIwCis6MTAzQUIwMDAwMjE2ODJBMDAwMDAwMDAwMDIxNjgyQTQwMDAwMDAwMThECis6MTAzQUMwMDAwNjE2ODJBODAwMDAwMDBBMDIxNjgxRjQwMDAwMEMwODA1Cis6MTAzQUQwMDAwMjE2ODFGODAwMDAwMDQwMDIxNjgxRkMwMDAwMDEwMDdGCis6MTAzQUUwMDAwMjE2ODIwMDAwMDAwMDIwMDIxNjgyMDQwMDAwMDAxNzY3Cis6MTAzQUYwMDAwMjE2ODIwODAwMDAwMDgwMDIxNjgyMEMwMDAwMDIwMEZDCis6MTAzQjAwMDAwMjE2ODIxMDAwMDAwMDAwMDIxNjgyMTgwMUZGMDFGRjU5Cis6MTAzQjEwMDAwMjE2ODIxNDAxRkYwMUZGMDIxNkU1MTAwMUZGMDFGRkVBCis6MTAzQjIwMDAwMjE2RTUwQzAxRkYwMUZGMDIxNjgyM0MwMDAwMDAxM0EzCis6MTAzQjMwMDAwMjE2ODA5MDAwMDAwMTNGMDIxNjgwNjAwMDAwMDE0MEU0Cis6MTAzQjQwMDAwMjE2ODA2NDAwMDAwMTQwMDYxNjgwNjgwMDAwMDAwMjMyCis6MTAzQjUwMDAwMjE2ODA3MDAwMDAwMEMwMDYxNjgwNzQwMDAwMDAwNzg2Cis6MTAzQjYwMDAwMjE2ODA5QzAwMDAwMDQ4MDIxNjgwQTAwMDAwMDA0ODU5Cis6MTAzQjcwMDAwNjE2ODBBNDAwMDAwMDAyMDIxNjgwQUMwMDAwMDA0ODc3Cis6MTAzQjgwMDAwNjE2ODBCMDAwMDAwMDA3MDIxNjgyMzgwMDAwODAwMDkwCis6MTAzQjkwMDAwMjE2ODIzNDAwMDAyNUU0MDIxNjgwOTQwMDAwN0ZGRkE0Cis6MTAzQkEwMDAwMjE2ODIyMDAwMEYwMDBGMDIxNjgyMUMwMDBGMDAwRjY5Cis6MTAzQkIwMDAwMjE2RTUxODAwMEYwMDBGMDIxNkU1MTQwMDBGMDAwRkEzCis6MTAzQkMwMDAwMjE2ODIyODAwMDAwMDAwMDIxNjgyMjRGRkZGRkZGRjc5Cis6MTAzQkQwMDAwMjE2RTUyMDAwMDAwMDAwMDIxNkU1MUNGRkZGRkZGRkIzCis6MTAzQkUwMDAwMjE2RTZCQzAwMDAwMDAwMDIxNkU2QzAwMDAwMDAwMjVCCis6MTAzQkYwMDAwMjE2RTZDNDAwMDAwMDAxMDIxNkU2QzgwMDAwMDAwMzM5Cis6MTAzQzAwMDAwMjE2RTZDQzAwMDAwMDA0MDIxNkU2RDAwMDAwMDAwNjEyCis6MTAzQzEwMDAwMjE2RTZENDAwMDAwMDA1MDIxNkU2RDgwMDAwMDAwN0YwCis6MTAzQzIwMDAwMjE2ODBFQzAwMDAwMEZGMDIxNDAwMDAwMDAwMDAwMUZBCis6MTAzQzMwMDAwMjE0MDAwQzAwMDAwMDAxMDIxNDAwNDAwMDAwMDAwMTBBCis6MTAzQzQwMDAwMjE0MDA0NDAwMDA3RkZGMDIxNDAwMEMwMDAwMDAwMDdBCis6MTAzQzUwMDAwMjE0MDAwMDAwMDAwMDAwMDIxNDAwNkMwMDAwMDAwMENDCis6MTAzQzYwMDAwMjE0MDAwNDAwMDAwMDAxMDIxNDAwMzAwMDAwMDAwMUYyCis6MTAzQzcwMDAwMjE0MDAwNDAwMDAwMDAwMDIxNDAwNUMwMDAwMDAwMEI4Cis6MTAzQzgwMDAwMjE0MDAwODAwMDAwMDAxMDIxNDAwMzQwMDAwMDAwMUNBCis6MTAzQzkwMDAwMjE0MDAwODAwMDAwMDAwMDIxNDAwNjAwMDAwMDAwMDkwCis6MTAzQ0EwMDAwNjAyODAwMDAwMDAyMDAwMDIwMjAwNTgwMDAwMDAzMkRFCis6MTAzQ0IwMDAwMjAyMDBBMDAzMTUwMDIwMDIwMjAwQTQwMzE1MDAyMDQ4Cis6MTAzQ0MwMDAwMjAyMDBBODAxMDAwMDMwMDIwMjAwQUMwODEwMDAwMDRGCis6MTAzQ0QwMDAwMjAyMDBCMDAwMDAwMDMzMDIwMjAwQjQwMDAwMDAzMDE1Cis6MTAzQ0UwMDAwMjAyMDBCODAwMDAwMDMxMDIwMjAwQkMwMDAwMDAwMzI0Cis6MTAzQ0YwMDAwMjAyMDBDMDAwMDAwMDA2MDIwMjAwQzQwMDAwMDAwMzJGCis6MTAzRDAwMDAwMjAyMDBDODAwMDAwMDAzMDIwMjAwQ0MwMDAwMDAwMjEyCis6MTAzRDEwMDAwMjAyMDBEMDAwMDAwMDAwMDIwMjAwRDQwMDAwMDAwMkY1Cis6MTAzRDIwMDAwMjAyMDBEQzAwMDAwMDAwMDIwMjAwRTAwMDAwMDAwNkM5Cis6MTAzRDMwMDAwMjAyMDBFNDAwMDAwMDA0MDIwMjAwRTgwMDAwMDAwMkE5Cis6MTAzRDQwMDAwMjAyMDBFQzAwMDAwMDAyMDIwMjAwRjAwMDAwMDAwMThDCis6MTAzRDUwMDAwMjAyMDBGQzAwMDAwMDA2MDIwMjAxMjAwMDAwMDAwMDM4Cis6MTAzRDYwMDAwMjAyMDEzNDAwMDAwMDAyMDIwMjAxQjAwMDAwMDAwMTYyCis6MTAzRDcwMDAwMjAyMDIwQzAwMDAwMDAxMDIwMjAyMTQwMDAwMDAwMTE1Cis6MTAzRDgwMDAwMjAyMDIxODAwMDAwMDAyMDIwMjA0MDQwMDAwMDAwMTA2Cis6MTAzRDkwMDAwMjAyMDQwQzAwMDAwMDQwMDIwMjA0MTAwMDAwMDA0MDc3Cis6MTAzREEwMDAwMjAyMDQxQzAwMDAwMDA0MDIwMjA0MjAwMDAwMDAyMEEzCis6MTAzREIwMDAwMjAyMDQyNDAwMDAwMDAyMDIwMjA0MjgwMDAwMDAyMDg1Cis6MTAzREMwMDAwNjAyMDUwMDAwMDAwMDEyMDQwMjA0ODAwMDIwMDRBQTdDCis6MTAzREQwMDAwMjAyMDA2MDAwMDAwMDBGMDIwMjAwNjQwMDAwMDAwNzAxCis6MTAzREUwMDAwMjAyMDA2ODAwMDAwMDAwMDIwMjAwNkMwMDAwMDAwRUU5Cis6MTAzREYwMDAwMjAyMDA3MDAwMDAwMDBFMDYwMjAwNzQwMDAwMDAwM0MyCis6MTAzRTAwMDAwMjAyMDBGNDAwMDAwMDA0MDIwMjAwMDQwMDAwMDAwMUFECis6MTAzRTEwMDAwMjAyMDAwODAwMDAwMDAxMDIwMjAwMEMwMDAwMDAwMTg0Cis6MTAzRTIwMDAwMjAyMDAxMDAwMDAwMDAxMDIwMjAwMTQwMDAwMDAwMTY0Cis6MTAzRTMwMDAwMjAyMDAxODAwMDAwMDAxMDIwMjAwMUMwMDAwMDAwMTQ0Cis6MTAzRTQwMDAwMjAyMDAyMDAwMDAwMDAxMDIwMjAwMjQwMDAwMDAwMTI0Cis6MTAzRTUwMDAwMjAyMDAyODAwMDAwMDAxMDIwMjAwMkMwMDAwMDAwMTA0Cis6MTAzRTYwMDAwMjAyMDAzMDAwMDAwMDAxMDIwMjAwMzQwMDAwMDAwMUU0Cis6MTAzRTcwMDAwMjAyMDAzODAwMDAwMDAxMDIwMjAwM0MwMDAwMDAwMUM0Cis6MTAzRTgwMDAwMjAyMDA0MDAwMDAwMDAxMDIwMjAwNDQwMDAwMDAwMUE0Cis6MTAzRTkwMDAwMjAyMDA0ODAwMDAwMDAxMDIwMjAwNEMwMDAwMDAwMTg0Cis6MTAzRUEwMDAwMjAyMDA1MDAwMDAwMDAxMDIwMjAxMDgwMDAwMDBDOEU4Cis6MTAzRUIwMDAwMjAyMDExODAwMDAwMDAyMDIwMjAxQzQwMDAwMDAwMDFBCis6MTAzRUMwMDAwMjAyMDFDQzAwMDAwMDAwMDIwMjAxRDQwMDAwMDAwMjQ2Cis6MTAzRUQwMDAwMjAyMDFEQzAwMDAwMDAyMDIwMjAxRTQwMDAwMDBGRjE3Cis6MTAzRUUwMDAwMjAyMDFFQzAwMDAwMEZGMDIwMjAxMDAwMDAwMDAwMERECis6MTAzRUYwMDAwMjAyMDEwQzAwMDAwMEM4MDIwMjAxMUMwMDAwMDAwMkM2Cis6MTAzRjAwMDAwMjAyMDFDODAwMDAwMDAwMDIwMjAxRDAwMDAwMDAwMDBGCis6MTAzRjEwMDAwMjAyMDFEODAwMDAwMDAyMDIwMjAxRTAwMDAwMDAwMkRCCis6MTAzRjIwMDAwMjAyMDFFODAwMDAwMEZGMDIwMjAxRjAwMDAwMDBGRkIxCis6MTAzRjMwMDAwMjAyMDEwNDAwMDAwMDAwMDIwMjAxMDgwMDAwMDBDOEEzCis6MTAzRjQwMDAwMjAyMDExODAwMDAwMDAyMDIwMjAxQzQwMDAwMDAwMDg5Cis6MTAzRjUwMDAwMjAyMDFDQzAwMDAwMDAwMDIwMjAxRDQwMDAwMDAwMkI1Cis6MTAzRjYwMDAwMjAyMDFEQzAwMDAwMDAyMDIwMjAxRTQwMDAwMDBGRjg2Cis6MTAzRjcwMDAwMjAyMDFFQzAwMDAwMEZGMDIwMjAxMDAwMDAwMDAwMDRDCis6MTAzRjgwMDAwMjAyMDEwQzAwMDAwMEM4MDIwMjAxMUMwMDAwMDAwMjM1Cis6MTAzRjkwMDAwMjAyMDFDODAwMDAwMDAwMDIwMjAxRDAwMDAwMDAwMDdGCis6MTAzRkEwMDAwMjAyMDFEODAwMDAwMDAyMDIwMjAxRTAwMDAwMDAwMjRCCis6MTAzRkIwMDAwMjAyMDFFODAwMDAwMEZGMDIwMjAxRjAwMDAwMDBGRjIxCis6MTAzRkMwMDAwMjAyMDEwNDAwMDAwMDAwMDIwMjAxMDgwMDAwMDBDODEzCis6MTAzRkQwMDAwMjAyMDExODAwMDAwMDAyMDIwMjAxQzQwMDAwMDAwMEY5Cis6MTAzRkUwMDAwMjAyMDFDQzAwMDAwMDAwMDIwMjAxRDQwMDAwMDAwMjI1Cis6MTAzRkYwMDAwMjAyMDFEQzAwMDAwMDAyMDIwMjAxRTQwMDAwMDBGRkY2Cis6MTA0MDAwMDAwMjAyMDFFQzAwMDAwMEZGMDIwMjAxMDAwMDAwMDAwMEJCCis6MTA0MDEwMDAwMjAyMDEwQzAwMDAwMEM4MDIwMjAxMUMwMDAwMDAwMkE0Cis6MTA0MDIwMDAwMjAyMDFDODAwMDAwMDAwMDIwMjAxRDAwMDAwMDAwMEVFCis6MTA0MDMwMDAwMjAyMDFEODAwMDAwMDAyMDIwMjAxRTAwMDAwMDAwMkJBCis6MTA0MDQwMDAwMjAyMDFFODAwMDAwMEZGMDIwMjAxRjAwMDAwMDBGRjkwCis6MTA0MDUwMDAwMjAyMDEwNDAwMDAwMDAwMDIwMjAxMDgwMDAwMDBDODgyCis6MTA0MDYwMDAwMjAyMDExODAwMDAwMDAyMDIwMjAxQzQwMDAwMDAwMDY4Cis6MTA0MDcwMDAwMjAyMDFDQzAwMDAwMDAwMDIwMjAxRDQwMDAwMDAwMjk0Cis6MTA0MDgwMDAwMjAyMDFEQzAwMDAwMDAyMDIwMjAxRTQwMDAwMDBGRjY1Cis6MTA0MDkwMDAwMjAyMDFFQzAwMDAwMEZGMDIwMjAxMDAwMDAwMDAwMDJCCis6MTA0MEEwMDAwMjAyMDEwQzAwMDAwMEM4MDIwMjAxMUMwMDAwMDAwMjE0Cis6MTA0MEIwMDAwMjAyMDFDODAwMDAwMDAwMDIwMjAxRDAwMDAwMDAwMDVFCis6MTA0MEMwMDAwMjAyMDFEODAwMDAwMDAyMDIwMjAxRTAwMDAwMDAwMjJBCis6MTA0MEQwMDAwMjAyMDFFODAwMDAwMEZGMDIwMjAxRjAwMDAwMDBGRjAwCis6MTA0MEUwMDAwMjAyMDEwNDAwMDAwMDAwMDcyODA0MDAwMEEwMDAwMEY0Cis6MTA0MEYwMDAwODI4MDdCODAwMDkwNENBMDcyQzAwMDAzNERBMDAwMEI5Cis6MTA0MTAwMDAwNzJDODAwMDM4RjgwRDM3MDcyRDAwMDAzN0I5MUI3NkQzCis6MTA0MTEwMDAwNzJEODAwMDMxNzgyOTY1MDcyRTAwMDAxQzdBMzVDNEYwCis6MTA0MTIwMDAwODJFNDhFMDM2RTQwNENDMDEyODAwMDAwMDAwMDAwMDFFCis6MTA0MTMwMDAwMTI4MDAwNDAwMDAwMDAwMDEyODAwMDgwMDAwMDAwMDIxCis6MTA0MTQwMDAwMTI4MDAwQzAwMDAwMDAwMDEyODAwMTAwMDAwMDAwMDAxCis6MTA0MTUwMDAwMTI4MDAxNDAwMDAwMDAwMDIyODAwMjAwMDAwMDAwMUQ3Cis6MTA0MTYwMDAwMjI4MDAyNDAwMDAwMDAyMDIyODAwMjgwMDAwMDAwM0FBCis6MTA0MTcwMDAwMjI4MDAyQzAwMDAwMDAwMDIyODAwMzAwMDAwMDAwNDhCCis6MTA0MTgwMDAwMjI4MDAzNDAwMDAwMDAxMDIyODAwMzgwMDAwMDAwMDZFCis6MTA0MTkwMDAwMjI4MDAzQzAwMDAwMDAxMDIyODAwNDAwMDAwMDAwNDRBCis6MTA0MUEwMDAwMjI4MDA0NDAwMDAwMDAwMDIyODAwNDgwMDAwMDAwMTJFCis6MTA0MUIwMDAwMjI4MDA0QzAwMDAwMDAzMDIyODAwNTAwMDAwMDAwMDBDCis6MTA0MUMwMDAwMjI4MDA1NDAwMDAwMDAxMDIyODAwNTgwMDAwMDAwNEVBCis6MTA0MUQwMDAwMjI4MDA1QzAwMDAwMDAwMDIyODAwNjAwMDAwMDAwMUNFCis6MTA0MUUwMDAwMjI4MDA2NDAwMDAwMDAzMDIyODAwNjgwMDAwMDAwMEFDCis6MTA0MUYwMDAwMjI4MDA2QzAwMDAwMDAxMDIyODAwNzAwMDAwMDAwNDhBCis6MTA0MjAwMDAwMjI4MDA3NDAwMDAwMDAwMDIyODAwNzgwMDAwMDAwNDZBCis6MTA0MjEwMDAwMjI4MDA3QzAwMDAwMDAzMDYyODAwODAwMDAwMDAwMjQ1Cis6MTA0MjIwMDAwMjI4MDBBNDAwMDAzRkZGMDIyODAwQTgwMDAwMDNGRkFFCis6MTA0MjMwMDAwMjI4MDIyNDAwMDAwMDAwMDIyODAyMzQwMDAwMDAwMENFCis6MTA0MjQwMDAwMjI4MDI0QzAwMDAwMDAwMDIyODAyRTQwMDAwRkZGRkU4Cis6MTA0MjUwMDAwNjI4MjAwMDAwMDAwODAwMDIyQjhCQzAwMDAwMDAwMThGCis6MTA0MjYwMDAwMjJCODAwMDAwMDAwMDAwMDIyQjgwNDAwMDAwMDAxODlDCis6MTA0MjcwMDAwMjJCODA4MDAwMDAwMDBDMDIyQjgwQzAwMDAwMDA2NjMyCis6MTA0MjgwMDAwQzJCODMwMDAwMDdBMTIwMEEyQjgzMDAwMDAwMDEzOEJCCis6MTA0MjkwMDAwQjJCODMwMDAwMDAxMzg4MEEyQjgzNDAwMDAwMDAwMEQyCis6MTA0MkEwMDAwQzJCODM0MDAwMDAwMUY0MEIyQjgzNDAwMDAwMDAwNTIxCis6MTA0MkIwMDAwMjJCODM4MDAwMDdBMTIwMDIyQjgzQzAwMDAwMDFGNEExCis6MTA0MkMwMDAwMjJCMTQ4MDAwMDAwMDAxMEEyQjE0ODAwMDAwMDAwMDYzCis6MTA0MkQwMDAwNjJBOUFGODAwMDAwMDA0MDQyQTlCMDgwMDAyMDRDRTczCis6MTA0MkUwMDAwNjJBOUIxMDAwMDAwMDA2MDYyQTkwODAwMDAwMDA0ODY1Cis6MTA0MkYwMDAwNjJBMjAwODAwMDAwMEM4MDYyQTIwMDAwMDAwMDAwMjRDCis6MTA0MzAwMDAwNjJBOTFBODAwMDAwMDg2MDYyQTkwMDAwMDAwMDAyMERFCis6MTA0MzEwMDAwNjJBOTNDODAwMDAwMDAzMDQyQTkzRDQwMDAxMDREMEE1Cis6MTA0MzIwMDAwNjJBOURBODAwMDAwMDAyMDQyQTk0OTgwMDA0MDREMUUzCis6MTA0MzMwMDAwNDJBOUQ1ODAwMDEwNEQ1MDYyQTlENUMwMDAwMDAxMTQ2Cis6MTA0MzQwMDAwNDJBQ0IyMDAwMTAwNEQ2MDQyQTMwMDAwMDAyMDRFNjIwCis6MTA0MzUwMDAwNjJBMzAwODAwMDAwMTAwMDYyQTQwNDAwMDAwMDAxMDM0Cis6MTA0MzYwMDAwNDJBNDAwMDAwMTAwNEU4MDQyQTg0MDgwMDAyMDRGODJCCis6MTA0MzcwMDAwNjJBOURBMDAwMDAwMDAyMDYyQUIwMDAwMDAwMDA1MDlFCis6MTA0MzgwMDAwNjJBQkI3MDAwMDAwMDcwMDYyQUIxNTAwMDAwMDAwMjJGCis6MTA0MzkwMDAwNjJBQkI2MDAwMDAwMDA0MDYyQUQwMDAwMDAwMDgwMEM2Cis6MTA0M0EwMDAwNjJBQzAwMDAwMDAwMTUwMDYyQTk0QTgwMDAwMDAzMjJFCis6MTA0M0IwMDAwNjJBNTAyMDAwMDAwMDAyMDYyQTUwMzAwMDAwMDAwMkE5Cis6MTA0M0MwMDAwNjJBNTAwMDAwMDAwMDAyMDYyQTUwMTAwMDAwMDAwMkQ5Cis6MTA0M0QwMDAwMjJBNTIwODAwMDAwMDAxMDQyQTlCMjgwMDAyMDRGQTY1Cis6MTA0M0UwMDAwNjJBOTYzODAwMDAwMDIyMDQyQTk2QzAwMDAxMDRGQzI4Cis6MTA0M0YwMDAwNjJBOTZDNDAwMDAwMDAzMDYyQTk3NjgwMDAwMDAyMkRGCis6MTA0NDAwMDAwNDJBOTdGMDAwMDEwNEZEMDYyQTk3RjQwMDAwMDAwMzM3Cis6MTA0NDEwMDAwNjJBOTg5ODAwMDAwMDIyMDQyQTk5MjAwMDAxMDRGRTMwCis6MTA0NDIwMDAwNjJBOTkyNDAwMDAwMDAzMDYyQTk5QzgwMDAwMDAyMkU5Cis6MTA0NDMwMDAwNDJBOUE1MDAwMDEwNEZGMDYyQTlBNTQwMDAwMDAwMzNGCis6MTA0NDQwMDAwNjJBQjE0MDAwMDAwMDAyMDYyQUM1NDAwMDAwMDE1MEMzCis6MTA0NDUwMDAwNjJBOTU3MDAwMDAwMDMyMDYyQTUwMjgwMDAwMDAwMjRCCis6MTA0NDYwMDAwNjJBNTAzODAwMDAwMDAyMDYyQTUwMDgwMDAwMDAwMjA4Cis6MTA0NDcwMDAwNjJBNTAxODAwMDAwMDAyMDIyQTUyMEMwMDAwMDAwMTE3Cis6MTA0NDgwMDAwNDJBOUIzMDAwMDIwNTAwMDYyQTk2RDAwMDAwMDAyMjc0Cis6MTA0NDkwMDAwNDJBOTc1ODAwMDEwNTAyMDYyQTk3NUMwMDAwMDAwM0QxCis6MTA0NEEwMDAwNjJBOTgwMDAwMDAwMDIyMDQyQTk4ODgwMDAxMDUwM0NCCis6MTA0NEIwMDAwNjJBOTg4QzAwMDAwMDAzMDYyQTk5MzAwMDAwMDAyMjhBCis6MTA0NEMwMDAwNDJBOTlCODAwMDEwNTA0MDYyQTk5QkMwMDAwMDAwM0RCCis6MTA0NEQwMDAwNjJBOUE2MDAwMDAwMDIyMDQyQTlBRTgwMDAxMDUwNUQ1Cis6MTA0NEUwMDAwNjJBOUFFQzAwMDAwMDAzMDYyQUIxNDgwMDAwMDAwMkU4Cis6MTA0NEYwMDAwMjJBQ0E4MDAwMDAwMDAwMDQyQTlCMzgwMDEwMDUwNjJBCis6MTA0NTAwMDAwNjJBNTA0ODAwMDAwMDBFMDIyQUNBODQwMDAwMDAwMDVCCis6MTA0NTEwMDAwNDJBOUI3ODAwMTAwNTE2MDYyQTUwODAwMDAwMDAwRTIxCis6MTA0NTIwMDAwMjJBQ0E4ODAwMDAwMDAwMDQyQTlCQjgwMDEwMDUyNjUxCis6MTA0NTMwMDAwNjJBNTBCODAwMDAwMDBFMDIyQUNBOEMwMDAwMDAwMEIzCis6MTA0NTQwMDAwNDJBOUJGODAwMTAwNTM2MDYyQTUwRjAwMDAwMDAwRUUxCis6MTA0NTUwMDAwMjJBQ0E5MDAwMDAwMDAwMDQyQTlDMzgwMDEwMDU0Njc4Cis6MTA0NTYwMDAwNjJBNTEyODAwMDAwMDBFMDIyQUNBOTQwMDAwMDAwMDBBCis6MTA0NTcwMDAwNDJBOUM3ODAwMTAwNTU2MDYyQTUxNjAwMDAwMDAwRTlGCis6MTA0NTgwMDAwMjJBQ0E5ODAwMDAwMDAwMDQyQTlDQjgwMDEwMDU2NkEwCis6MTA0NTkwMDAwNjJBNTE5ODAwMDAwMDBFMDIyQUNBOUMwMDAwMDAwMDYyCis6MTA0NUEwMDAwNDJBOUNGODAwMTAwNTc2MDYyQTUxRDAwMDAwMDAwRTVGCis6MTA0NUIwMDAwMjEwMTAwODAwMDAwMDAxMDIxMDEwNTAwMDAwMDAwMTVECis6MTA0NUMwMDAwMjEwMTAwMDAwMDNEMDAwMDIxMDEwMDQwMDAwMDAzRDkzCis6MTA0NUQwMDAwOTEwMTgwMDAyMDAwNTg2MDkxMDExMDAwMDEwMDc4NjU2Cis6MTA0NUUwMDAwNjEwMTE0MDAwMDAwMDA4MDkxMDExNjAwMDEwMDc5NjI1Cis6MTA0NUYwMDAwNjEwMTFBMDAwMDAwMDE4MDYxMDI0MDAwMDAwMDBFMEMyCis6MTA0NjAwMDAwMjEwMjAxQzAwMDAwMDAwMDIxMDIwMjAwMDAwMDAwMTA5Cis6MTA0NjEwMDAwMjEwMjBDMDAwMDAwMDAyMDIxMDIwMDQwMDAwMDAwMTZGCis6MTA0NjIwMDAwMjEwMjAwODAwMDAwMDAxMDkxMDNDMDAwMDA1MDdBNjQ4Cis6MTA0NjMwMDAwOTEwMzgwMDAwMDUwN0FCMDkxMDM4MjAwMDA1MDdCMDQ1Cis6MTA0NjQwMDAwNjEwNEMwMDAwMDAwMTAwMDIxMDQwMjgwMDAwMDAxMDdECis6MTA0NjUwMDAwMjEwNDA0NDAwMDAzRkZGMDIxMDQwNTgwMDI4MDAwMEI0Cis6MTA0NjYwMDAwMjEwNDA4NDAwODQ5MjRBMDIxMDQwNTgwMDAwMDAwMDZBCis6MTA0NjcwMDAwMjEwODAwMDAwMDAxMDgwMDIxMDgwQUMwMDAwMDAwMERBCis6MTA0NjgwMDAwMjEwODAzODAwMDAwMDEwMDIxMDgxMDAwMDAwMDAwMEJECis6MTA0NjkwMDAwNjEwODEyMDAwMDAwMDAyMDIxMDgwMDgwMDAwMDJCNTEwCis6MTA0NkEwMDAwMjEwODAxMDAwMDAwMDAwMDYxMDgyMDAwMDAwMDA0QTg2Cis6MTA0NkIwMDAwMjEwODEwODAwMDFGRkZGMDYxMDgxNDAwMDAwMDAwMjg3Cis6MTA0NkMwMDAwMjEwODAwMDAwMDAxQTgwMDYxMDkwMDAwMDAwMDAyNEY0Cis6MTA0NkQwMDAwNjEwOTEyMDAwMDAwMDRBMDYxMDkzNzAwMDAwMDA0QTY2Cis6MTA0NkUwMDAwNjEwOTVDMDAwMDAwMDRBMDIxMDgwMDQwMDAwMTA4MEVGCis6MTA0NkYwMDAwMjEwODBCMDAwMDAwMDAxMDIxMDgwM0MwMDAwMDAxMDk5Cis6MTA0NzAwMDAwMjEwODEwNDAwMDAwMDAwMDYxMDgxMjgwMDAwMDAwMjUxCis6MTA0NzEwMDAwMjEwODAwQzAwMDAwMkI1MDIxMDgwMTQwMDAwMDAwMDlFCis6MTA0NzIwMDAwNjEwODQwMDAwMDAwMDRBMDIxMDgxMEMwMDAxRkZGRjA3Cis6MTA0NzMwMDAwNjEwODE0ODAwMDAwMDAyMDIxMDgwMDQwMDAwMUE4MDY4Cis6MTA0NzQwMDAwNjEwOTA5MDAwMDAwMDI0MDYxMDkyNDgwMDAwMDA0QUQ1Cis6MTA0NzUwMDAwNjEwOTQ5ODAwMDAwMDRBMDYxMDk2RTgwMDAwMDA0QUVGCis6MTA0NzYwMDAwMjEwODAwMDAwMDAxMDgwMDIxMDgwQUMwMDAwMDAwMkU3Cis6MTA0NzcwMDAwMjEwODAzODAwMDAwMDEwMDIxMDgxMDAwMDAwMDAwMENDCis6MTA0NzgwMDAwNjEwODEyMDAwMDAwMDAyMDIxMDgwMDgwMDAwMDJCNTFGCis6MTA0NzkwMDAwMjEwODAxMDAwMDAwMDAwMDYxMDgyMDAwMDAwMDA0QTk1Cis6MTA0N0EwMDAwMjEwODEwODAwMDFGRkZGMDYxMDgxNDAwMDAwMDAwMjk2Cis6MTA0N0IwMDAwMjEwODAwMDAwMDAxQTgwMDYxMDkwMDAwMDAwMDAyNDAzCis6MTA0N0MwMDAwNjEwOTEyMDAwMDAwMDRBMDYxMDkzNzAwMDAwMDA0QTc1Cis6MTA0N0QwMDAwNjEwOTVDMDAwMDAwMDRBMDIxMDgwMDQwMDAwMTA4MEZFCis6MTA0N0UwMDAwMjEwODBCMDAwMDAwMDAzMDIxMDgwM0MwMDAwMDAxMEE2Cis6MTA0N0YwMDAwMjEwODEwNDAwMDAwMDAwMDYxMDgxMjgwMDAwMDAwMjYxCis6MTA0ODAwMDAwMjEwODAwQzAwMDAwMkI1MDIxMDgwMTQwMDAwMDAwMEFECis6MTA0ODEwMDAwNjEwODQwMDAwMDAwMDRBMDIxMDgxMEMwMDAxRkZGRjE2Cis6MTA0ODIwMDAwNjEwODE0ODAwMDAwMDAyMDIxMDgwMDQwMDAwMUE4MDc3Cis6MTA0ODMwMDAwNjEwOTA5MDAwMDAwMDI0MDYxMDkyNDgwMDAwMDA0QUU0Cis6MTA0ODQwMDAwNjEwOTQ5ODAwMDAwMDRBMDYxMDk2RTgwMDAwMDA0QUZFCis6MTA0ODUwMDAwMjEwODAwMDAwMDAxMDgwMDIxMDgwQUMwMDAwMDAwNEY0Cis6MTA0ODYwMDAwMjEwODAzODAwMDAwMDEwMDIxMDgxMDAwMDAwMDAwMERCCis6MTA0ODcwMDAwNjEwODEyMDAwMDAwMDAyMDIxMDgwMDgwMDAwMDJCNTJFCis6MTA0ODgwMDAwMjEwODAxMDAwMDAwMDAwMDYxMDgyMDAwMDAwMDA0QUE0Cis6MTA0ODkwMDAwMjEwODEwODAwMDFGRkZGMDYxMDgxNDAwMDAwMDAwMkE1Cis6MTA0OEEwMDAwMjEwODAwMDAwMDAxQTgwMDYxMDkwMDAwMDAwMDAyNDEyCis6MTA0OEIwMDAwNjEwOTEyMDAwMDAwMDRBMDYxMDkzNzAwMDAwMDA0QTg0Cis6MTA0OEMwMDAwNjEwOTVDMDAwMDAwMDRBMDIxMDgwMDQwMDAwMTA4MDBECis6MTA0OEQwMDAwMjEwODBCMDAwMDAwMDA1MDIxMDgwM0MwMDAwMDAxMEIzCis6MTA0OEUwMDAwMjEwODEwNDAwMDAwMDAwMDYxMDgxMjgwMDAwMDAwMjcwCis6MTA0OEYwMDAwMjEwODAwQzAwMDAwMkI1MDIxMDgwMTQwMDAwMDAwMEJECis6MTA0OTAwMDAwNjEwODQwMDAwMDAwMDRBMDIxMDgxMEMwMDAxRkZGRjI1Cis6MTA0OTEwMDAwNjEwODE0ODAwMDAwMDAyMDIxMDgwMDQwMDAwMUE4MDg2Cis6MTA0OTIwMDAwNjEwOTA5MDAwMDAwMDI0MDYxMDkyNDgwMDAwMDA0QUYzCis6MTA0OTMwMDAwNjEwOTQ5ODAwMDAwMDRBMDYxMDk2RTgwMDAwMDA0QTBECis6MTA0OTQwMDAwMjEwODAwMDAwMDAxMDgwMDIxMDgwQUMwMDAwMDAwNjAxCis6MTA0OTUwMDAwMjEwODAzODAwMDAwMDEwMDIxMDgxMDAwMDAwMDAwMEVBCis6MTA0OTYwMDAwNjEwODEyMDAwMDAwMDAyMDIxMDgwMDgwMDAwMDJCNTNECis6MTA0OTcwMDAwMjEwODAxMDAwMDAwMDAwMDYxMDgyMDAwMDAwMDA0QUIzCis6MTA0OTgwMDAwMjEwODEwODAwMDFGRkZGMDYxMDgxNDAwMDAwMDAwMkI0Cis6MTA0OTkwMDAwMjEwODAwMDAwMDAxQTgwMDYxMDkwMDAwMDAwMDAyNDIxCis6MTA0OUEwMDAwNjEwOTEyMDAwMDAwMDRBMDYxMDkzNzAwMDAwMDA0QTkzCis6MTA0OUIwMDAwNjEwOTVDMDAwMDAwMDRBMDIxMDgwMDQwMDAwMTA4MDFDCis6MTA0OUMwMDAwMjEwODBCMDAwMDAwMDA3MDIxMDgwM0MwMDAwMDAxMEMwCis6MTA0OUQwMDAwMjEwODEwNDAwMDAwMDAwMDYxMDgxMjgwMDAwMDAwMjdGCis6MTA0OUUwMDAwMjEwODAwQzAwMDAwMkI1MDIxMDgwMTQwMDAwMDAwMENDCis6MTA0OUYwMDAwNjEwODQwMDAwMDAwMDRBMDIxMDgxMEMwMDAxRkZGRjM1Cis6MTA0QTAwMDAwNjEwODE0ODAwMDAwMDAyMDIxMDgwMDQwMDAwMUE4MDk1Cis6MTA0QTEwMDAwNjEwOTA5MDAwMDAwMDI0MDYxMDkyNDgwMDAwMDA0QTAyCis6MTA0QTIwMDAwNjEwOTQ5ODAwMDAwMDRBMDYxMDk2RTgwMDAwMDA0QTFDCis6MTA0QTMwMDAwMjEyMDVCMDAwMDAwMDAxMDIxMjA0OTAwMEUzODM0MDVFCis6MTA0QTQwMDAwMjEyMDUxNDAwMDAzQzEwMDIxMjA2NkMwMDAwMDAwMTY2Cis6MTA0QTUwMDAwMjEyMDY3MDAwMDAwMDAwMDIxMjA0OTRGRkZGRkZGRjI0Cis6MTA0QTYwMDAwMjEyMDQ5OEZGRkZGRkZGMDIxMjA0OUNGRkZGRkZGRkVBCis6MTA0QTcwMDAwMjEyMDRBMEZGRkZGRkZGMDIxMjA0QTRGRkZGRkZGRkNBCis6MTA0QTgwMDAwMjEyMDRBOEZGRkZGRkZGMDIxMjA0QUNGRkZGRkZGRkFBCis6MTA0QTkwMDAwMjEyMDRCMEZGRkZGRkZGMDIxMjA0QkNGRkZGRkZGRjgyCis6MTA0QUEwMDAwMjEyMDRDMEZGRkZGRkZGMDIxMjA0QzRGRkZGRkZGRjVBCis6MTA0QUIwMDAwMjEyMDRDOEZGRkZGRkZGMDIxMjA0Q0NGRkZGRkZGRjNBCis6MTA0QUMwMDAwMjEyMDREMEZGRkZGRkZGMDIxMjA0RDhGRkZGRkZGRjE2Cis6MTA0QUQwMDAwMjEyMDREQ0ZGRkZGRkZGMDIxMjA0RTBGRkZGRkZGRkYyCis6MTA0QUUwMDAwMjEyMDRFNEZGRkZGRkZGMDIxMjA0RThGRkZGRkZGRkQyCis6MTA0QUYwMDAwMjEyMDRFQ0ZGRkZGRkZGMDIxMjA0RjBGRkZGRkZGRkIyCis6MTA0QjAwMDAwMjEyMDRGNEZGRkZGRkZGMDIxMjA0RjhGRkZGRkZGRjkxCis6MTA0QjEwMDAwMjEyMDRGQ0ZGRkZGRkZGMDIxMjA1MDBGRkZGRkZGRjcwCis6MTA0QjIwMDAwMjEyMDUwNEZGRkZGRkZGMDIxMjA1MDhGRkZGRkZGRjRGCis6MTA0QjMwMDAwMjEyMDUwQ0ZGRkZGRkZGMDIxMjA1MTBGRkZGRkZGRjJGCis6MTA0QjQwMDAwMjEyMDRENEZGODA5MDAwMDIxMjA0QjRGMDAwNTAwMDVFCis6MTA0QjUwMDAwMjEyMDRCOEYwMDAxMDAwMDIxMjAzOTAwMDAwMDAwOEQ2Cis6MTA0QjYwMDAwMjEyMDM5QzAwMDAwMDA4MDIxMjAzQTAwMDAwMDAwOENCCis6MTA0QjcwMDAwMjEyMDNBNDAwMDAwMDAyMDIxMjAzQkMwMDAwMDAwNEExCis6MTA0QjgwMDAwMjEyMDNDMDAwMDAwMDA1MDIxMjAzQzQwMDAwMDAwNDZBCis6MTA0QjkwMDAwMjEyMDNEMDAwMDAwMDAwMDIxMjAzNkMwMDAwMDAwMUFBCis6MTA0QkEwMDAwMjEyMDM2ODAwMDAwMDNGMDIxMjAxQkMwMDAwMDA0MDM2Cis6MTA0QkIwMDAwMjEyMDFDMDAwMDAxODA4MDIxMjAxQzQwMDAwMDgwMzFDCis6MTA0QkMwMDAwMjEyMDFDODAwMDAwODAzMDIxMjAxQ0MwMDAwMDA0MERDCis6MTA0QkQwMDAwMjEyMDFEMDAwMDAwMDAzMDIxMjAxRDQwMDAwMDgwM0Y5Cis6MTA0QkUwMDAwMjEyMDFEODAwMDAwODAzMDIxMjAxREMwMDAwMDgwM0QxCis6MTA0QkYwMDAwMjEyMDFFMDAwMDEwMDAzMDIxMjAxRTQwMDAwMDgwM0I4Cis6MTA0QzAwMDAwMjEyMDFFODAwMDAwODAzMDIxMjAxRUMwMDAwMDAwMzk4Cis6MTA0QzEwMDAwMjEyMDFGMDAwMDAwMDAzMDIxMjAxRjQwMDAwMDAwMzgwCis6MTA0QzIwMDAwMjEyMDFGODAwMDAwMDAzMDIxMjAxRkMwMDAwMDAwMzYwCis6MTA0QzMwMDAwMjEyMDIwMDAwMDAwMDAzMDIxMjAyMDQwMDAwMDAwMzNFCis6MTA0QzQwMDAwMjEyMDIwODAwMDAwMDAzMDIxMjAyMEMwMDAwMDAwMzFFCis6MTA0QzUwMDAwMjEyMDIxMDAwMDAwMDAzMDIxMjAyMTQwMDAwMDAwM0ZFCis6MTA0QzYwMDAwMjEyMDIxODAwMDAwMDAzMDIxMjAyMUMwMDAwMDAwM0RFCis6MTA0QzcwMDAwMjEyMDIyMDAwMDAwMDAzMDIxMjAyMjQwMDAwMDAwM0JFCis6MTA0QzgwMDAwMjEyMDIyODAwMDAyNDAzMDIxMjAyMkMwMDAwMDAyRjRFCis6MTA0QzkwMDAwMjEyMDIzMDAwMDAwMDA5MDIxMjAyMzQwMDAwMDAxOTYyCis6MTA0Q0EwMDAwMjEyMDIzODAwMDAwMTg0MDIxMjAyM0MwMDAwMDE4MzVCCis6MTA0Q0IwMDAwMjEyMDI0MDAwMDAwMzA2MDIxMjAyNDQwMDAwMDAxOTIyCis6MTA0Q0MwMDAwMjEyMDI0ODAwMDAwMDA2MDIxMjAyNEMwMDAwMDMwNjE1Cis6MTA0Q0QwMDAwMjEyMDI1MDAwMDAwMzA2MDIxMjAyNTQwMDAwMDMwNkYyCis6MTA0Q0UwMDAwMjEyMDI1ODAwMDAwQzg2MDIxMjAyNUMwMDAwMDMwNjQ5Cis6MTA0Q0YwMDAwMjEyMDI2MDAwMDAwMzA2MDIxMjAyNjQwMDAwMDAwNkI1Cis6MTA0RDAwMDAwMjEyMDI2ODAwMDAwMDA2MDIxMjAyNkMwMDAwMDAwNjk3Cis6MTA0RDEwMDAwMjEyMDI3MDAwMDAwMDA2MDIxMjAyNzQwMDAwMDAwNjc3Cis6MTA0RDIwMDAwMjEyMDI3ODAwMDAwMDA2MDIxMjAyN0MwMDAwMDAwNjU3Cis6MTA0RDMwMDAwMjEyMDI4MDAwMDAwMDA2MDIxMjAyODQwMDAwMDAwNjM3Cis6MTA0RDQwMDAwMjEyMDI4ODAwMDAwMDA2MDIxMjAyOEMwMDAwMDAwNjE3Cis6MTA0RDUwMDAwMjEyMDI5MDAwMDAwMDA2MDIxMjAyOTQwMDAwMDAwNkY3Cis6MTA0RDYwMDAwMjEyMDI5ODAwMDAwMDA2MDIxMjAyOUMwMDAwMDAwNkQ3Cis6MTA0RDcwMDAwMjEyMDJBMDAwMDAwMzA2MDIxMjAyQTQwMDAwMDAxM0E3Cis6MTA0RDgwMDAwMjEyMDJBODAwMDAwMDA2MDIxMjAyQjAwMDAwMTAwNDg1Cis6MTA0RDkwMDAwMjEyMDJCNDAwMDAxMDA0MDIxMjAzMjQwMDEwNjQ0MDQ2Cis6MTA0REEwMDAwMjEyMDMyODAwMTA2NDQwMDIxMjA1QjQwMDAwMDAwMTQyCis6MTA0REIwMDAwMjEyMDFCMDAwMDAwMDAxMDYwMEEwMDAwMDAwMDAwQzdCCis6MTA0REMwMDAwMjAwQTA1MDAwMDAwMDAwMDIwMEEwNTQwMDAwMDAwMEZCCis6MTA0REQwMDAwMjAwQTBFQzU1NTQwMDAwMDIwMEEwRjA1NTU1NTU1NUI2Cis6MTA0REUwMDAwMjAwQTBGNDAwMDA1NTU1MDIwMEEwRjhGMDAwMDAwMEY5Cis6MTA0REYwMDAwMjAwQTBGQzU1NTQwMDAwMDIwMEExMDA1NTU1NTU1NTc1Cis6MTA0RTAwMDAwMjAwQTEwNDAwMDA1NTU1MDIwMEExMDhGMDAwMDAwMEI2Cis6MTA0RTEwMDAwMjAwQTE4QzU1NTQwMDAwMDIwMEExOTA1NTU1NTU1NTMzCis6MTA0RTIwMDAwMjAwQTE5NDAwMDA1NTU1MDIwMEExOThGMDAwMDAwMDc2Cis6MTA0RTMwMDAwMjAwQTE5QzAwMDAwMDAwMDIwMEExQTAwMDAxMDAwMEVGCis6MTA0RTQwMDAwMjAwQTFBNDAwMDA1MDE0MDIwMEExQTgwMDAwMDAwMDZDCis6MTA0RTUwMDAwMjAwQTQ1QzAwMDAwQzAwMDIwMEE2MUMwMDAwMDAwMzdECis6MTA0RTYwMDAwMjAwQTA2Q0ZGNUMwMDAwMDIwMEEwNzBGRkY1NUZGRjc1Cis6MTA0RTcwMDAwMjAwQTA3NDAwMDBGRkZGMDIwMEEwNzhGMDAwMDNFMDMxCis6MTA0RTgwMDAwMjAwQTA3QzAwMDAwMDAwMDIwMEEwODAwMDAwQTAwMDQyCis6MTA0RTkwMDAwNjAwQTA4NDAwMDAwMDA1MDIwMEEwOTgwRkUwMDAwMEJBCis6MTA0RUEwMDAwNjAwQTA5QzAwMDAwMDA3MDIwMEEwQjgwMDAwMDQwMDVCCis6MTA0RUIwMDAwNjAwQTBCQzAwMDAwMDAzMDIwMEEwQzgwMDAwMTAwMDEzCis6MTA0RUMwMDAwNjAwQTBDQzAwMDAwMDAzMDIwMEEwRDgwMDAwNDAwMEIzCis6MTA0RUQwMDAwNjAwQTBEQzAwMDAwMDAzMDIwMEEwRTgwMDAxMDAwMEMyCis6MTA0RUUwMDAwNjAwQTIyQzAwMDAwMDA0MDIwMEExMENGRjVDMDAwMEUwCis6MTA0RUYwMDAwMjAwQTExMEZGRjU1RkZGMDIwMEExMTQwMDAwRkZGRkY4Cis6MTA0RjAwMDAwMjAwQTExOEYwMDAwM0UwMDIwMEExMUMwMDAwMDAwMDU0Cis6MTA0RjEwMDAwMjAwQTEyMDAwMDBBMDAwMDYwMEExMjQwMDAwMDAwNTVFCis6MTA0RjIwMDAwMjAwQTEzODBGRTAwMDAwMDYwMEExM0MwMDAwMDAwN0NECis6MTA0RjMwMDAwMjAwQTE1ODAwMDAwODAwMDYwMEExNUMwMDAwMDAwMzY4Cis6MTA0RjQwMDAwMjAwQTE2ODAwMDAyMDAwMDYwMEExNkMwMDAwMDAwMzIwCis6MTA0RjUwMDAwMjAwQTE3ODAwMDA4MDAwMDYwMEExN0MwMDAwMDAwMzkwCis6MTA0RjYwMDAwMjAwQTE4ODAwMDIwMDAwMDYwMEEyM0MwMDAwMDAwNDJDCis6MTA0RjcwMDAwMjAwQTAzMDAwMDAwMDAwMDIwMEEwMzQwMDAwMDAwMDg5Cis6MTA0RjgwMDAwMjAwQTAzODAwMDAwMDAwMDIwMEEwM0MwMDAwMDAwMDY5Cis6MTA0RjkwMDAwMjAwQTA0MDAwMDAwMDAwMDIwMEEwNDQwMDAwMDAwMDQ5Cis6MTA0RkEwMDAwMjAwQTA0ODAwMDAwMDAwMDIwMEEwNEMwMDAwMDAwMDI5Cis6MTA0RkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzAwMDAwMDAwMEMxCis6MTA0RkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUxCis6MTA0RkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTA0RkUwMDAwMDAwMDAwMDAwMzAwMDMxMDAwMDAwMDAwMDAwMDAwMDYwCis6MTA0RkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIxCis6MTA1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwCis6MTA1MDEwMDAwMDMxMDA1MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBECis6MTA1MDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwCis6MTA1MDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUyMDA4OTk1Cis6MTA1MDQwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OTAwOEQwMDhEMDA5MTJDCis6MTA1MDUwMDAwMDkxMDA5NTAwOTUwMDk5MDA5OTAwOUQwMDlEMDBBMTg4Cis6MTA1MDYwMDAwMEExMDBBNTAwQTUwMEE5MDBBOTAwQUUwMEFFMDBCMUY2Cis6MTA1MDcwMDAwMEIxMDBCNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENCCis6MTA1MDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwCis6MTA1MDkwMDAwMDAwMDAwMDAwQjQwMzA5MDMwOTAzMTMwMzEzMDMxREY4Cis6MTA1MEEwMDAwMzFEMDMyNDAzMjQwMzJCMDMyQjAzMzIwMzMyMDMzOTkwCis6MTA1MEIwMDAwMzM5MDM0MDAzNDAwMzQ3MDM0NzAzNEUwMzRFMDM1NUEwCis6MTA1MEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUwCis6MTA1MEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQwCis6MTA1MEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA1MEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MTA1MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlGCis6MTA1MTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGCis6MTA1MTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdGCis6MTA1MTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZGCis6MTA1MTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVGCis6MTA1MTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRGCis6MTA1MTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNGCis6MTA1MTcwMDAwMzU1MDM1QjAwMDAwMDAwMDAwMDAwMDAwMzVCMDM1Q0JDCis6MTA1MTgwMDAwMzVDMDM1RDAzNUQwMzVFMDM1RTAzNUYwMzVGMDM2MDE3Cis6MTA1MTkwMDAwMzYwMDM2MTAzNjEwMzYyMDM2MjAzNjMwMDAwMDAwMEI0Cis6MTA1MUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZGCis6MTA1MUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVGCis6MTA1MUMwMDAwMDAwMDAwMDAwMDAwMDAwMDM2MzAzNkQwMzZEMDM3QjFCCis6MTA1MUQwMDAwMzdCMDM4OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM1Cis6MTA1MUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJGCis6MTA1MUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA1MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA1MjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhFCis6MTA1MjIwMDAwMzg5MDM4QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY1Cis6MTA1MjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZFCis6MTA1MjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzhBMDNENkY4Cis6MTA1MjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRFCis6MTA1MjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNFCis6MTA1MjcwMDAwMDAwMDAwMDAwMDAwMDAwMDNENjA0MDEwMDAwMDAwMDUwCis6MTA1MjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFCis6MTA1MjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFCis6MTA1MkEwMDAwMDAwMDAwMDA0MDEwNDMzMDAwMDAwMDAwMDAwMDAwMEMyCis6MTA1MkIwMDAwNDMzMDQzQTA0M0EwNDQxMDQ0MTA0NDgwNDQ4MDQ0RkM2Cis6MTA1MkMwMDAwNDRGMDQ1NjA0NTYwNDVEMDQ1RDA0NjQwNDY0MDQ2QkQ2Cis6MTA1MkQwMDAwNDZCMDRBNDAwMDAwMDAwMDAwMDAwMDAwNEE0MDRBODYzCis6MTA1MkUwMDAwNEE4MDRBQzA0QUMwNEIwMDRCMDA0QjQwNEI0MDRCODFFCis6MTA1MkYwMDAwNEI4MDRCQzA0QkMwNEMwMDRDMDA0QzQwNEM0MDUxMzQyCis6MTA1MzAwMDAwNTEzMDUyQTA1MkEwNTQxMDU0MTA1NDMwNTQzMDU0NUMxCis6MTA1MzEwMDAwNTQ1MDU0NzA1NDcwNTQ5MDU0OTA1NEIwNTRCMDU0RDFECis6MTA1MzIwMDAwNTREMDU0RjA1NEYwNTUxMDU1MTA1RTgwNUU4MDVFOTBGCis6MTA1MzMwMDAwNUU5MDVFQTA1RUEwNUVGMDVFRjA1RjQwNUY0MDVGOUM5Cis6MTA1MzQwMDAwNUY5MDVGRTA1RkUwNjAzMDYwMzA2MDgwNjA4MDYwRDE4Cis6MTA1MzUwMDAwNjBEMDYxMjA2MTIwNjEzMDAwMDAwMDAwMDAwMDAwMEYxCis6MTA1MzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNECis6MTA1MzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJECis6MTA1MzgwMDAwNjEzMDYyNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERBCis6MTA1MzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBECis6MTA1M0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjI0MDYzOTk0Cis6MTA1M0IwMDAwNjM5MDYzQzA2M0MwNjNGMDAwMDAwMDAwMDAwMDAwMEU1Cis6MTA1M0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERECis6MTA1M0QwMDAwMDAwMDAwMDAwMDAwMDAwMDYzRjA2NzUwMDAwMDAwMDBECis6MTA1M0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJECis6MTA1M0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFECis6MTA1NDAwMDAwMDAwMDAwMDA2NzUwNzc4MDAwMDAwMDAwMDAwMDAwMEEyCis6MTA1NDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhDCis6MTA1NDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTA1NDMwMDAwNzc4MDc3RjA3N0YwNzgzMDc4MzA3ODcwMDAwMDAwMDNGCis6MTA1NDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVDCis6MTA1NDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzg3MDdDOEVGCis6MTA1NDYwMDAwMDAwMDAwMDAwMDAwMDAwMDdDODA3RDEwN0QxMDdEQURDCis6MTA1NDcwMDAwN0RBMDdFMzA3RTMwN0VDMDdFQzA3RjUwN0Y1MDdGRTk0Cis6MTA1NDgwMDAwN0ZFMDgwNzA4MDcwODEwMDgxMDA4NjcwODY3MDg3QzY3Cis6MTA1NDkwMDAwODdDMDg5MTA4OTEwODk0MDg5NDA4OTcwODk3MDg5QTNFCis6MTA1NEEwMDAwODlBMDg5RDA4OUQwOEEwMDhBMDA4QTMwOEEzMDhBNkJDCis6MTA1NEIwMDAwOEE2MDhBOTA4QTkwOEIyMDAwMDAwMDAwMDAwMDAwMDIyCis6MTA1NEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERDCis6MTA1NEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENDCis6MTA1NEUwMDAwOEIyMDhCODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQyCis6MTA1NEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFDCis6MTA1NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEI4MDhCQjE4Cis6MTA1NTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhCCis6MTA1NTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdCCis6MTA1NTMwMDAwMDAwMDAwMDAwMDAwMDAwMDhCQjA4QzEwMDAwMDAwMERGCis6MTA1NTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVCCis6MTA1NTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRCCis6MTA1NTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNCCis6MTA1NTcwMDAwOEMxMDhEMDA4RDAwOERGMDhERjA4RUUwOEVFMDhGREYzCis6MTA1NTgwMDAwOEZEMDkwQzA5MEMwOTFCMDkxQjA5MkEwOTJBMDkzOUZDCis6MTA1NTkwMDAwOTM5MDlBQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA1NUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZCCis6MTA1NUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUFBMDlCRjcwCis6MTA1NUMwMDAwOUJGMDlEMDA5RDAwOUUxMDlFMTA5RTIwOUUyMDlFM0NCCis6MTA1NUQwMDAwOUUzMDlFNDA5RTQwOUU1MDlFNTA5RTYwOUU2MDlFNzVCCis6MTA1NUUwMDAwOUU3MDlFODA5RTgwOUU5MDAwMDAwMDAwMDAwMDAwMEY3Cis6MTA1NUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFCCis6MTA1NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlBCis6MTA1NjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhBCis6MTA1NjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdBCis6MTA1NjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZBCis6MTA1NjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTA1NjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRBCis6MTA1NjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNBCis6MTA1NjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJBCis6MTA1NjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFBCis6MTA1NjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBCis6MTA1NkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZBCis6MTA1NkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVBCis6MTA1NkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAyMDRDMDEzCis6MTA1NkQwMDAwMDAzMDk4MDAwMDQwRTQwMDAwNTEzMDAwMDA2MTdDMEY3Cis6MTA1NkUwMDAwMDA3MUM4MDAwMDgyMTQwMDAwOTI2MDAwMDBBMkFDMDhCCis6MTA1NkYwMDAwMDBCMkY4MDAwMEMzNDQwMDAwRDM5MDAwMDBFM0RDMDFGCis6MTA1NzAwMDAwMDBGNDI4MDAwMTA0NzQwMDAxMTRDMDAwMDEyNTBDMEIyCis6MTA1NzEwMDAwMDEzNTU4MDAwMTQ1QTQwMDAxNTVGMDAwMDE2NjNDMDQ2Cis6MTA1NzIwMDAwMDE3Njg4MDAwMTg2RDQwMDAxOTcyMDAwMDFBNzZDMERBCis6MTA1NzMwMDAwMDFCN0I4MDAwMUM4MDQwMDAxRDg1MDAwMDFFODlDMDZFCis6MTA1NzQwMDAwMDFGOEU4MDAwMDA5MzQwMDAwMDIwMDAwMDAwNDAwMEY5Cis6MTA1NzUwMDAwMDAwNjAwMDAwMDA4MDAwMDAwMEEwMDAwMDAwQzAwMDA5Cis6MTA1NzYwMDAwMDAwRTAwMDAwMDEwMDAwMDAwMTIwMDAwMDAxNDAwMEY2Cis6MTA1NzcwMDAwMDAxNjAwMDAwMDE4MDAwMDAwMUEwMDAwMDAxQzAwMEU1Cis6MTA1NzgwMDAwMDAxRTAwMDAwMDIwMDAwMDAwMjIwMDAwMDAyNDAwMEQyCis6MTA1NzkwMDAwMDAyNjAwMDAwMDI4MDAwMDAwMkEwMDAwMDAyQzAwMEMxCis6MTA1N0EwMDAwMDAyRTAwMDAwMDMwMDAwMDAwMzIwMDAwMDAzNDAwMEFFCis6MTA1N0IwMDAwMDAzNjAwMDAwMDM4MDAwMDAwM0EwMDAwMDAzQzAwMDlECis6MTA1N0MwMDAwMDAzRTAwMDAwMDQwMDAwMDAwNDIwMDAwMDA0NDAwMDhBCis6MTA1N0QwMDAwMDA0NjAwMDAwMDQ4MDAwMDAwNEEwMDAwMDA0QzAwMDc5Cis6MTA1N0UwMDAwMDA0RTAwMDAwMDUwMDAwMDAwNTIwMDAwMDA1NDAwMDY2Cis6MTA1N0YwMDAwMDA1NjAwMDAwMDU4MDAwMDAwNUEwMDAwMDA1QzAwMDU1Cis6MTA1ODAwMDAwMDA1RTAwMDAwMDYwMDAwMDAwNjIwMDAwMDA2NDAwMDQxCis6MTA1ODEwMDAwMDA2NjAwMDAwMDY4MDAwMDAwNkEwMDAwMDA2QzAwMDMwCis6MTA1ODIwMDAwMDA2RTAwMDAwMDcwMDAwMDAwNzIwMDAwMDA3NDAwMDFECis6MTA1ODMwMDAwMDA3NjAwMDAwMDc4MDAwMDAwN0EwMDAwMDA3QzAwMDBDCis6MTA1ODQwMDAwMDA3RTAwMDAwMDgwMDAwMDAwODIwMDAwMDA4NDAwMEY5Cis6MTA1ODUwMDAwMDA4NjAwMDAwMDg4MDAwMDAwOEEwMDAwMDA4QzAwMEU4Cis6MTA1ODYwMDAwMDA4RTAwMDAwMDkwMDAwMDAwOTIwMDAwMDA5NDAwMEQ1Cis6MTA1ODcwMDAwMDA5NjAwMDAwMDk4MDAwMDAwOUEwMDAwMDA5QzAwMEM0Cis6MTA1ODgwMDAwMDA5RTAwMDAwMEEwMDAwMDAwQTIwMDAwMDBBNDAwMEIxCis6MTA1ODkwMDAwMDBBNjAwMDAwMEE4MDAwMDAwQUEwMDAwMDBBQzAwMEEwCis6MTA1OEEwMDAwMDBBRTAwMDAwMEIwMDAwMDAwQjIwMDAwMDBCNDAwMDhECis6MTA1OEIwMDAwMDBCNjAwMDAwMEI4MDAwMDAwQkEwMDAwMDBCQzAwMDdDCis6MTA1OEMwMDAwMDBCRTAwMDAwMEMwMDAwMDAwQzIwMDAwMDBDNDAwMDY5Cis6MTA1OEQwMDAwMDBDNjAwMDAwMEM4MDAwMDAwQ0EwMDAwMDBDQzAwMDU4Cis6MTA1OEUwMDAwMDBDRTAwMDAwMEQwMDAwMDAwRDIwMDAwMDBENDAwMDQ1Cis6MTA1OEYwMDAwMDBENjAwMDAwMEQ4MDAwMDAwREEwMDAwMDBEQzAwMDM0Cis6MTA1OTAwMDAwMDBERTAwMDAwMEUwMDAwMDAwRTIwMDAwMDBFNDAwMDIwCis6MTA1OTEwMDAwMDBFNjAwMDAwMEU4MDAwMDAwRUEwMDAwMDBFQzAwMDBGCis6MTA1OTIwMDAwMDBFRTAwMDAwMEYwMDAwMDAwRjIwMDAwMDBGNDAwMEZDCis6MTA1OTMwMDAwMDBGNjAwMDAwMEY4MDAwMDAwRkEwMDAwMDBGQzAwMEVCCis6MTA1OTQwMDAwMDBGRTAwMDAwMTAwMDAwMDAxMDIwMDAwMDEwNDAwMEQ4Cis6MTA1OTUwMDAwMDEwNjAwMDAwMTA4MDAwMDAxMEEwMDAwMDEwQzAwMEM3Cis6MTA1OTYwMDAwMDEwRTAwMDAwMTEwMDAwMDAxMTIwMDAwMDExNDAwMEI0Cis6MTA1OTcwMDAwMDExNjAwMDAwMTE4MDAwMDAxMUEwMDAwMDExQzAwMEEzCis6MTA1OTgwMDAwMDExRTAwMDAwMTIwMDAwMDAxMjIwMDAwMDEyNDAwMDkwCis6MTA1OTkwMDAwMDEyNjAwMDAwMTI4MDAwMDAxMkEwMDAwMDEyQzAwMDdGCis6MTA1OUEwMDAwMDEyRTAwMDAwMTMwMDAwMDAxMzIwMDAwMDEzNDAwMDZDCis6MTA1OUIwMDAwMDEzNjAwMDAwMTM4MDAwMDAxM0EwMDAwMDEzQzAwMDVCCis6MTA1OUMwMDAwMDEzRTAwMDAwMTQwMDAwMDAxNDIwMDAwMDE0NDAwMDQ4Cis6MTA1OUQwMDAwMDE0NjAwMDAwMTQ4MDAwMDAxNEEwMDAwMDE0QzAwMDM3Cis6MTA1OUUwMDAwMDE0RTAwMDAwMTUwMDAwMDAxNTIwMDAwMDE1NDAwMDI0Cis6MTA1OUYwMDAwMDE1NjAwMDAwMTU4MDAwMDAxNUEwMDAwMDE1QzAwMDEzCis6MTA1QTAwMDAwMDE1RTAwMDAwMTYwMDAwMDAxNjIwMDAwMDE2NDAwMEZGCis6MTA1QTEwMDAwMDE2NjAwMDAwMTY4MDAwMDAxNkEwMDAwMDE2QzAwMEVFCis6MTA1QTIwMDAwMDE2RTAwMDAwMTcwMDAwMDAxNzIwMDAwMDE3NDAwMERCCis6MTA1QTMwMDAwMDE3NjAwMDAwMTc4MDAwMDAxN0EwMDAwMDE3QzAwMENBCis6MTA1QTQwMDAwMDE3RTAwMDAwMTgwMDAwMDAxODIwMDAwMDE4NDAwMEI3Cis6MTA1QTUwMDAwMDE4NjAwMDAwMTg4MDAwMDAxOEEwMDAwMDE4QzAwMEE2Cis6MTA1QTYwMDAwMDE4RTAwMDAwMTkwMDAwMDAxOTIwMDAwMDE5NDAwMDkzCis6MTA1QTcwMDAwMDE5NjAwMDAwMTk4MDAwMDAxOUEwMDAwMDE5QzAwMDgyCis6MTA1QTgwMDAwMDE5RTAwMDAwMUEwMDAwMDAxQTIwMDAwMDFBNDAwMDZGCis6MTA1QTkwMDAwMDFBNjAwMDAwMUE4MDAwMDAxQUEwMDAwMDFBQzAwMDVFCis6MTA1QUEwMDAwMDFBRTAwMDAwMUIwMDAwMDAxQjIwMDAwMDFCNDAwMDRCCis6MTA1QUIwMDAwMDFCNjAwMDAwMUI4MDAwMDAxQkEwMDAwMDFCQzAwMDNBCis6MTA1QUMwMDAwMDFCRTAwMDAwMUMwMDAwMDAxQzIwMDAwMDFDNDAwMDI3Cis6MTA1QUQwMDAwMDFDNjAwMDAwMUM4MDAwMDAxQ0EwMDAwMDFDQzAwMDE2Cis6MTA1QUUwMDAwMDFDRTAwMDAwMUQwMDAwMDAxRDIwMDAwMDFENDAwMDAzCis6MTA1QUYwMDAwMDFENjAwMDAwMUQ4MDAwMDAxREEwMDAwMDFEQzAwMEYyCis6MTA1QjAwMDAwMDFERTAwMDAwMUUwMDAwMDAxRTIwMDAwMDFFNDAwMERFCis6MTA1QjEwMDAwMDFFNjAwMDAwMUU4MDAwMDAxRUEwMDAwMDFFQzAwMENECis6MTA1QjIwMDAwMDFFRTAwMDAwMUYwMDAwMDAxRjIwMDAwMDFGNDAwMEJBCis6MTA1QjMwMDAwMDFGNjAwMDAwMUY4MDAwMDAxRkEwMDAwMDFGQzAwMEE5Cis6MTA1QjQwMDAwMDFGRTAwMDAwMjAwMDAwMDAyMDIwMDAwMDIwNDAwMDk2Cis6MTA1QjUwMDAwMDIwNjAwMDAwMjA4MDAwMDAyMEEwMDAwMDIwQzAwMDg1Cis6MTA1QjYwMDAwMDIwRTAwMDAwMjEwMDAwMDAyMTIwMDAwMDIxNDAwMDcyCis6MTA1QjcwMDAwMDIxNjAwMDAwMjE4MDAwMDAyMUEwMDAwMDIxQzAwMDYxCis6MTA1QjgwMDAwMDIxRTAwMDAwMjIwMDAwMDAyMjIwMDAwMDIyNDAwMDRFCis6MTA1QjkwMDAwMDIyNjAwMDAwMjI4MDAwMDAyMkEwMDAwMDIyQzAwMDNECis6MTA1QkEwMDAwMDIyRTAwMDAwMjMwMDAwMDAyMzIwMDAwMDIzNDAwMDJBCis6MTA1QkIwMDAwMDIzNjAwMDAwMjM4MDAwMDAyM0EwMDAwMDIzQzAwMDE5Cis6MTA1QkMwMDAwMDIzRTAwMDAwMjQwMDAwMDAyNDIwMDAwMDI0NDAwMDA2Cis6MTA1QkQwMDAwMDI0NjAwMDAwMjQ4MDAwMDAyNEEwMDAwMDI0QzAwMEY1Cis6MTA1QkUwMDAwMDI0RTAwMDAwMjUwMDAwMDAyNTIwMDAwMDI1NDAwMEUyCis6MTA1QkYwMDAwMDI1NjAwMDAwMjU4MDAwMDAyNUEwMDAwMDI1QzAwMEQxCis6MTA1QzAwMDAwMDI1RTAwMDAwMjYwMDAwMDAyNjIwMDAwMDI2NDAwMEJECis6MTA1QzEwMDAwMDI2NjAwMDAwMjY4MDAwMDAyNkEwMDAwMDI2QzAwMEFDCis6MTA1QzIwMDAwMDI2RTAwMDAwMjcwMDAwMDAyNzIwMDAwMDI3NDAwMDk5Cis6MTA1QzMwMDAwMDI3NjAwMDAwMjc4MDAwMDAyN0EwMDAwMDI3QzAwMDg4Cis6MTA1QzQwMDAwMDI3RTAwMDAwMjgwMDAwMDAyODIwMDAwMDI4NDAwMDc1Cis6MTA1QzUwMDAwMDI4NjAwMDAwMjg4MDAwMDAyOEEwMDAwMDI4QzAwMDY0Cis6MTA1QzYwMDAwMDI4RTAwMDAwMjkwMDAwMDAyOTIwMDAwMDI5NDAwMDUxCis6MTA1QzcwMDAwMDI5NjAwMDAwMjk4MDAwMDAyOUEwMDAwMDI5QzAwMDQwCis6MTA1QzgwMDAwMDI5RTAwMDAwMkEwMDAwMDAyQTIwMDAwMDJBNDAwMDJECis6MTA1QzkwMDAwMDJBNjAwMDAwMkE4MDAwMDAyQUEwMDAwMDJBQzAwMDFDCis6MTA1Q0EwMDAwMDJBRTAwMDAwMkIwMDAwMDAyQjIwMDAwMDJCNDAwMDA5Cis6MTA1Q0IwMDAwMDJCNjAwMDAwMkI4MDAwMDAyQkEwMDAwMDJCQzAwMEY4Cis6MTA1Q0MwMDAwMDJCRTAwMDAwMkMwMDAwMDAyQzIwMDAwMDJDNDAwMEU1Cis6MTA1Q0QwMDAwMDJDNjAwMDAwMkM4MDAwMDAyQ0EwMDAwMDJDQzAwMEQ0Cis6MTA1Q0UwMDAwMDJDRTAwMDAwMkQwMDAwMDAyRDIwMDAwMDJENDAwMEMxCis6MTA1Q0YwMDAwMDJENjAwMDAwMkQ4MDAwMDAyREEwMDAwMDJEQzAwMEIwCis6MTA1RDAwMDAwMDJERTAwMDAwMkUwMDAwMDAyRTIwMDAwMDJFNDAwMDlDCis6MTA1RDEwMDAwMDJFNjAwMDAwMkU4MDAwMDAyRUEwMDAwMDJFQzAwMDhCCis6MTA1RDIwMDAwMDJFRTAwMDAwMkYwMDAwMDAyRjIwMDAwMDJGNDAwMDc4Cis6MTA1RDMwMDAwMDJGNjAwMDAwMkY4MDAwMDAyRkEwMDAwMDJGQzAwMDY3Cis6MTA1RDQwMDAwMDJGRTAwMDAwMzAwMDAwMDAzMDIwMDAwMDMwNDAwMDU0Cis6MTA1RDUwMDAwMDMwNjAwMDAwMzA4MDAwMDAzMEEwMDAwMDMwQzAwMDQzCis6MTA1RDYwMDAwMDMwRTAwMDAwMzEwMDAwMDAzMTIwMDAwMDMxNDAwMDMwCis6MTA1RDcwMDAwMDMxNjAwMDAwMzE4MDAwMDAzMUEwMDAwMDMxQzAwMDFGCis6MTA1RDgwMDAwMDMxRTAwMDAwMzIwMDAwMDAzMjIwMDAwMDMyNDAwMDBDCis6MTA1RDkwMDAwMDMyNjAwMDAwMzI4MDAwMDAzMkEwMDAwMDMyQzAwMEZCCis6MTA1REEwMDAwMDMyRTAwMDAwMzMwMDAwMDAzMzIwMDAwMDMzNDAwMEU4Cis6MTA1REIwMDAwMDMzNjAwMDAwMzM4MDAwMDAzM0EwMDAwMDMzQzAwMEQ3Cis6MTA1REMwMDAwMDMzRTAwMDAwMzQwMDAwMDAzNDIwMDAwMDM0NDAwMEM0Cis6MTA1REQwMDAwMDM0NjAwMDAwMzQ4MDAwMDAzNEEwMDAwMDM0QzAwMEIzCis6MTA1REUwMDAwMDM0RTAwMDAwMzUwMDAwMDAzNTIwMDAwMDM1NDAwMEEwCis6MTA1REYwMDAwMDM1NjAwMDAwMzU4MDAwMDAzNUEwMDAwMDM1QzAwMDhGCis6MTA1RTAwMDAwMDM1RTAwMDAwMzYwMDAwMDAzNjIwMDAwMDM2NDAwMDdCCis6MTA1RTEwMDAwMDM2NjAwMDAwMzY4MDAwMDAzNkEwMDAwMDM2QzAwMDZBCis6MTA1RTIwMDAwMDM2RTAwMDAwMzcwMDAwMDAzNzIwMDAwMDM3NDAwMDU3Cis6MTA1RTMwMDAwMDM3NjAwMDAwMzc4MDAwMDAzN0EwMDAwMDM3QzAwMDQ2Cis6MTA1RTQwMDAwMDM3RTAwMDAwMzgwMDAwMDAzODIwMDAwMDM4NDAwMDMzCis6MTA1RTUwMDAwMDM4NjAwMDAwMzg4MDAwMDAzOEEwMDAwMDM4QzAwMDIyCis6MTA1RTYwMDAwMDM4RTAwMDAwMzkwMDAwMDAzOTIwMDAwMDM5NDAwMDBGCis6MTA1RTcwMDAwMDM5NjAwMDAwMzk4MDAwMDAzOUEwMDAwMDM5QzAwMEZFCis6MTA1RTgwMDAwMDM5RTAwMDAwM0EwMDAwMDAzQTIwMDAwMDNBNDAwMEVCCis6MTA1RTkwMDAwMDNBNjAwMDAwM0E4MDAwMDAzQUEwMDAwMDNBQzAwMERBCis6MTA1RUEwMDAwMDNBRTAwMDAwM0IwMDAwMDAzQjIwMDAwMDNCNDAwMEM3Cis6MTA1RUIwMDAwMDNCNjAwMDAwM0I4MDAwMDAzQkEwMDAwMDNCQzAwMEI2Cis6MTA1RUMwMDAwMDNCRTAwMDAwM0MwMDAwMDAzQzIwMDAwMDNDNDAwMEEzCis6MTA1RUQwMDAwMDNDNjAwMDAwM0M4MDAwMDAzQ0EwMDAwMDNDQzAwMDkyCis6MTA1RUUwMDAwMDNDRTAwMDAwM0QwMDAwMDAzRDIwMDAwMDNENDAwMDdGCis6MTA1RUYwMDAwMDNENjAwMDAwM0Q4MDAwMDAzREEwMDAwMDNEQzAwMDZFCis6MTA1RjAwMDAwMDNERTAwMDAwM0UwMDAwMDAzRTIwMDAwMDNFNDAwMDVBCis6MTA1RjEwMDAwMDNFNjAwMDAwM0U4MDAwMDAzRUEwMDAwMDNFQzAwMDQ5Cis6MTA1RjIwMDAwMDNFRTAwMDAwM0YwMDAwMDAzRjIwMDAwMDNGNDAwMDM2Cis6MTA1RjMwMDAwMDNGNjAwMDAwM0Y4MDAwMDAzRkEwMDAwMDNGQzAwMDI1Cis6MTA1RjQwMDAwMDNGRTAwMDAwM0ZFMDAxMDAwMDAwMDAwMDAwMDFGRjEyCis6MTA1RjUwMDAwMDAwMDIwMDAwMDA3RkY4MDAwMDdGRjgwMDAwMDE0MDEwCis6MTA1RjYwMDAwMDAwMzUwMDAwMDAwMDAxMDAwMEZGMDAwMDAwMDAwMEZDCis6MTA1RjcwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDIzCis6MTA1RjgwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDEzCis6MTA1RjkwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAzCis6MTA1RkEwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMDAwMDAxNDBBRkYwMEQ1Cis6MTA1RkIwMDAwMDAwMDAwMTAwMDAwMDAwMDAyMDEwMDEwMDAwMDAwMEFGCis6MTA1RkMwMDAwMTAwOTAwMDAwMDAwMTAwMDAwMDkwMDIwMDAwOTAwNDE5Cis6MTA1RkQwMDAwMDAwOTAwNjAwMDA5MDA4MDAwMDkwMEEwMDAwOTAwQzVECis6MTA1RkUwMDAwMDAwOTAwRTAwMDA5MDEwMDAwMDkwMTIwMDAwOTAxNDJECis6MTA1RkYwMDAwMDAwOTAxNjAwMDA5MDE4MDAwMDkwMUEwMDAwOTAxQ0ZECis6MTA2MDAwMDAwMDAwOTAxRTAwMDA5MDIwMDAwMDkwMjIwMDAwOTAyNENDCis6MTA2MDEwMDAwMDAwOTAyNjAwMDA5MDI4MDAwMDkwMkEwMDAwOTAyQzlDCis6MTA2MDIwMDAwMDAwOTAyRTAwMDA5MDMwMDAwMDkwMzIwMDAwOTAzNDZDCis6MTA2MDMwMDAwMDAwOTAzNjAwMDA5MDM4MDAwMDkwM0EwMDAwOTAzQzNDCis6MTA2MDQwMDAwMDAwOTAzRTAwMDA5MDQwMDAwMDkwNDIwMDAwOTA0NDBDCis6MTA2MDUwMDAwMDAwOTA0NjAwMDA5MDQ4MDAwMDkwNEEwMDAwOTA0Q0RDCis6MTA2MDYwMDAwMDAwOTA0RTAwMDA5MDUwMDAwMDkwNTIwMDAwOTA1NEFDCis6MTA2MDcwMDAwMDAwOTA1NjAwMDA5MDU4MDAwMDkwNUEwMDAwOTA1QzdDCis6MTA2MDgwMDAwMDAwOTA1RTAwMDA5MDYwMDAwMDkwNjIwMDAwOTA2NDRDCis6MTA2MDkwMDAwMDAwOTA2NjAwMDA5MDY4MDAwMDkwNkEwMDAwOTA2QzFDCis6MTA2MEEwMDAwMDAwOTA2RTAwMDA5MDcwMDAwMDkwNzIwMDAwOTA3NEVDCis6MTA2MEIwMDAwMDAwOTA3NjAwMDA5MDc4MDAwMDkwN0EwMDAwOTA3Q0JDCis6MTA2MEMwMDAwMDAwOTA3RTAwMDA5MDgwMDAwMDkwODIwMDAwOTA4NDhDCis6MTA2MEQwMDAwMDAwOTA4NjAwMDA5MDg4MDAwMDkwOEEwMDAwOTA4QzVDCis6MTA2MEUwMDAwMDAwOTA4RTAwMDA5MDkwMDAwMDkwOTIwMDAwOTA5NDJDCis6MTA2MEYwMDAwMDAwOTA5NjAwMDA5MDk4MDAwMDkwOUEwMDAwOTA5Q0ZDCis6MTA2MTAwMDAwMDAwOTA5RTAwMDA5MEEwMDAwMDkwQTIwMDAwOTBBNENCCis6MTA2MTEwMDAwMDAwOTBBNjAwMDA5MEE4MDAwMDkwQUEwMDAwOTBBQzlCCis6MTA2MTIwMDAwMDAwOTBBRTAwMDA5MEIwMDAwMDkwQjIwMDAwOTBCNDZCCis6MTA2MTMwMDAwMDAwOTBCNjAwMDA5MEI4MDAwMDkwQkEwMDAwOTBCQzNCCis6MTA2MTQwMDAwMDAwOTBCRTAwMDA5MEMwMDAwMDkwQzIwMDAwOTBDNDBCCis6MTA2MTUwMDAwMDAwOTBDNjAwMDA5MEM4MDAwMDkwQ0EwMDAwOTBDQ0RCCis6MTA2MTYwMDAwMDAwOTBDRTAwMDA5MEQwMDAwMDkwRDIwMDAwOTBENEFCCis6MTA2MTcwMDAwMDAwOTBENjAwMDA5MEQ4MDAwMDkwREEwMDAwOTBEQzdCCis6MTA2MTgwMDAwMDAwOTBERTAwMDA5MEUwMDAwMDkwRTIwMDAwOTBFNDRCCis6MTA2MTkwMDAwMDAwOTBFNjAwMDA5MEU4MDAwMDkwRUEwMDAwOTBFQzFCCis6MTA2MUEwMDAwMDAwOTBFRTAwMDA5MEYwMDAwMDkwRjIwMDAwOTBGNEVCCis6MTA2MUIwMDAwMDAwOTBGNjAwMDA5MEY4MDAwMDkwRkEwMDAwOTBGQ0JCCis6MTA2MUMwMDAwMDAwOTBGRTAwMDA5MTAwMDAwMDkxMDIwMDAwOTEwNDg4Cis6MTA2MUQwMDAwMDAwOTEwNjAwMDA5MTA4MDAwMDkxMEEwMDAwOTEwQzU3Cis6MTA2MUUwMDAwMDAwOTEwRTAwMDA5MTEwMDAwMDkxMTIwMDAwOTExNDI3Cis6MTA2MUYwMDAwMDAwOTExNjAwMDA5MTE4MDAwMDkxMUEwMDAwOTExQ0Y3Cis6MTA2MjAwMDAwMDAwOTExRTAwMDA5MTIwMDAwMDkxMjIwMDAwOTEyNEM2Cis6MTA2MjEwMDAwMDAwOTEyNjAwMDA5MTI4MDAwMDkxMkEwMDAwOTEyQzk2Cis6MTA2MjIwMDAwMDAwOTEyRTAwMDA5MTMwMDAwMDkxMzIwMDAwOTEzNDY2Cis6MTA2MjMwMDAwMDAwOTEzNjAwMDA5MTM4MDAwMDkxM0EwMDAwOTEzQzM2Cis6MTA2MjQwMDAwMDAwOTEzRTAwMDA5MTQwMDAwMDkxNDIwMDAwOTE0NDA2Cis6MTA2MjUwMDAwMDAwOTE0NjAwMDA5MTQ4MDAwMDkxNEEwMDAwOTE0Q0Q2Cis6MTA2MjYwMDAwMDAwOTE0RTAwMDA5MTUwMDAwMDkxNTIwMDAwOTE1NEE2Cis6MTA2MjcwMDAwMDAwOTE1NjAwMDA5MTU4MDAwMDkxNUEwMDAwOTE1Qzc2Cis6MTA2MjgwMDAwMDAwOTE1RTAwMDA5MTYwMDAwMDkxNjIwMDAwOTE2NDQ2Cis6MTA2MjkwMDAwMDAwOTE2NjAwMDA5MTY4MDAwMDkxNkEwMDAwOTE2QzE2Cis6MTA2MkEwMDAwMDAwOTE2RTAwMDA5MTcwMDAwMDkxNzIwMDAwOTE3NEU2Cis6MTA2MkIwMDAwMDAwOTE3NjAwMDA5MTc4MDAwMDkxN0EwMDAwOTE3Q0I2Cis6MTA2MkMwMDAwMDAwOTE3RTAwMDA5MTgwMDAwMDkxODIwMDAwOTE4NDg2Cis6MTA2MkQwMDAwMDAwOTE4NjAwMDA5MTg4MDAwMDkxOEEwMDAwOTE4QzU2Cis6MTA2MkUwMDAwMDAwOTE4RTAwMDA5MTkwMDAwMDkxOTIwMDAwOTE5NDI2Cis6MTA2MkYwMDAwMDAwOTE5NjAwMDA5MTk4MDAwMDkxOUEwMDAwOTE5Q0Y2Cis6MTA2MzAwMDAwMDAwOTE5RTAwMDA5MUEwMDAwMDkxQTIwMDAwOTFBNEM1Cis6MTA2MzEwMDAwMDAwOTFBNjAwMDA5MUE4MDAwMDkxQUEwMDAwOTFBQzk1Cis6MTA2MzIwMDAwMDAwOTFBRTAwMDA5MUIwMDAwMDkxQjIwMDAwOTFCNDY1Cis6MTA2MzMwMDAwMDAwOTFCNjAwMDA5MUI4MDAwMDkxQkEwMDAwOTFCQzM1Cis6MTA2MzQwMDAwMDAwOTFCRTAwMDA5MUMwMDAwMDkxQzIwMDAwOTFDNDA1Cis6MTA2MzUwMDAwMDAwOTFDNjAwMDA5MUM4MDAwMDkxQ0EwMDAwOTFDQ0Q1Cis6MTA2MzYwMDAwMDAwOTFDRTAwMDA5MUQwMDAwMDkxRDIwMDAwOTFENEE1Cis6MTA2MzcwMDAwMDAwOTFENjAwMDA5MUQ4MDAwMDkxREEwMDAwOTFEQzc1Cis6MTA2MzgwMDAwMDAwOTFERTAwMDA5MUUwMDAwMDkxRTIwMDAwOTFFNDQ1Cis6MTA2MzkwMDAwMDAwOTFFNjAwMDA5MUU4MDAwMDkxRUEwMDAwOTFFQzE1Cis6MTA2M0EwMDAwMDAwOTFFRTAwMDA5MUYwMDAwMDkxRjIwMDAwOTFGNEU1Cis6MTA2M0IwMDAwMDAwOTFGNjAwMDA5MUY4MDAwMDkxRkEwMDAwOTFGQ0I1Cis6MTA2M0MwMDAwMDAwOTFGRUZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjRBCis6MTA2M0QwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkNECis6MTA2M0UwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkJECis6MTA2M0YwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkFECis6MTA2NDAwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjlDCis6MTA2NDEwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjhDCis6MTA2NDIwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjdDCis6MTA2NDMwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjZDCis6MTA2NDQwMDBGRkZGRkZGRjAwMDAwMDAzMDBCRUJDMjAwMDAwMDAwMEIzCis6MTA2NDUwMDAwMDAwMDAwNTAwMDAwMDAzMDBCRUJDMjAwMDAwMDAwMDlBCis6MTA2NDYwMDAwMDAwMDAwNTAwMDAwMDAzMDBCRUJDMjAwMDAwMDAwMDhBCis6MTA2NDcwMDAwMDAwMDAwNTAwMDAwMDAzMDBCRUJDMjAwMDAwMDAwMDdBCis6MTA2NDgwMDAwMDAwMDAwNTAwMDAwMDAzMDBCRUJDMjAwMDAwMDAwMDZBCis6MTA2NDkwMDAwMDAwMDAwNTAwMDAwMDAzMDBCRUJDMjAwMDAwMDAwMDVBCis6MTA2NEEwMDAwMDAwMDAwNTAwMDAwMDAzMDBCRUJDMjAwMDAwMDAwMDRBCis6MTA2NEIwMDAwMDAwMDAwNTAwMDAwMDAzMDBCRUJDMjAwMDAwMDAwMDNBCis6MTA2NEMwMDAwMDAwMDAwNTAwMDAyMDAwMDAwMDQwQzAwMDAwNjE4MEM2Cis6MTA2NEQwMDAwMDAwODI0MDAwMDBBMzAwMDAwMEMzQzAwMDAwRTQ4MDcwCis6MTA2NEUwMDAwMDAxMDU0MDAwMDEyNjAwMDAwMTQ2QzAwMDAxNjc4MDUwCis6MTA2NEYwMDAwMDAxODg0MDAwMDFBOTAwMDAwMUM5QzAwMDAxRUE4MDM0Cis6MTA2NTAwMDAwMDAyMEI0MDAwMDIyQzAwMDAwMjRDQzAwMDAyNkQ4MDEzCis6MTA2NTEwMDAwMDAyOEU0MDAwMDJBRjAwMDAwMkNGQzAwMDAyRjA4MEY3Cis6MTA2NTIwMDAwMDAwMTE0MDAwMDA4MDAwMDAwMTAzODAwMDAxODcwMDhFCis6MTA2NTMwMDAwMDAyMEE4MDAwMDI4RTAwMDAwMzExODAwMDAzOTUwMDEzCis6MTA2NTQwMDAwMDA0MTg4MDAwMDQ5QzAwMDAwNTFGODAwMDA1QTMwMEMzCis6MTA2NTUwMDAwMDA2MjY4MDAwMDZBQTAwMDAwNzJEODAwMDA3QjEwMDczCis6MTA2NTYwMDAwMDA4MzQ4MDAwMDhCODAwMDAwOTNCODAwMDA5QkYwMDIzCis6MTA2NTcwMDAwMDBBNDI4MDAwMEFDNjAwMDAwQjQ5ODAwMDBCQ0QwMEQzCis6MTA2NTgwMDAwMDBDNTA4MDAwMENENDAwMDAwRDU3ODAwMDAwNUIwMDEwCis6MTA2NTkwMDAwMDAwN0ZGODAwMDA3RkY4MDAwMDAwRDUwMDAwMTUwMDIzCis6MTA2NUEwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMEVECis6MTA2NUIwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMERECis6MTA2NUMwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMENECis6MTA2NUQwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMEJECis6MTA2NUUwMDAwMDAwMTkwMDAwMDAwMDAwMDAwMDAwMDBGRkZGRkZGRjk2Cis6MTA2NUYwMDAwMDAwMDAwMDAzOTM4NzAwMDAwMDAwMDAwMzkzODcwMDYxCis6MTA2NjAwMDAwMDAwN0ZGODAwMDA3RkY4MDAwMDA2OEUwMDAwMzUwMEQzCis6MTA2NjEwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjY0Cis6MTA2NjIwMDAwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDYxCis6MTA2NjMwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwRkZGRkZGRjQ0Cis6MTA2NjQwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDQxCis6MTA2NjUwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjI0Cis6MTA2NjYwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjE0Cis6MTA2NjcwMDAwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDExCis6MTA2NjgwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwRkZGRkZGRkY0Cis6MTA2NjkwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMEYxCis6MTA2NkEwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRkQ0Cis6MTA2NkIwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRkM0Cis6MTA2NkMwMDAwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMEMxCis6MTA2NkQwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwRkZGRkZGRkE0Cis6MTA2NkUwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMEExCis6MTA2NkYwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjg0Cis6MTA2NzAwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjczCis6MTA2NzEwMDAwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDcwCis6MTA2NzIwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwRkZGRkZGRjUzCis6MTA2NzMwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDUwCis6MTA2NzQwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjMzCis6MTA2NzUwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjIzCis6MTA2NzYwMDAwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDIwCis6MTA2NzcwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwRkZGRkZGRjAzCis6MTA2NzgwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwCis6MTA2NzkwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRkUzCis6MTA2N0EwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRkQzCis6MTA2N0IwMDAwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMEQwCis6MTA2N0MwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwRkZGRkZGRkIzCis6MTA2N0QwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMEIwCis6MTA2N0UwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjkzCis6MTA2N0YwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjgzCis6MTA2ODAwMDAwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDdGCis6MTA2ODEwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwRkZGRkZGRjYyCis6MTA2ODIwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDVGCis6MTA2ODMwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjQyCis6MTA2ODQwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjMyCis6MTA2ODUwMDAwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDJGCis6MTA2ODYwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwRkZGRkZGRjEyCis6MTA2ODcwMDAwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDBGCis6MTA2ODgwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRkYyCis6MTA2ODkwMDAwMDAwMDBGRjAwMDAwMEZGMDAwMDAwRkYwMDAwMDBGRkZDCis6MTA2OEEwMDAwMDAwMDBGRjAwMDAwMEZGMDAwMDAwRkYwMDAwMDBGRkVDCis6MTA2OEIwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMERBCis6MTA2OEMwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMENBCis6MTA2OEQwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMEJBCis6MTA2OEUwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMEFBCis6MTA2OEYwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkE4Cis6MTA2OTAwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjk3Cis6MTA2OTEwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjg3Cis6MTA2OTIwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjc3Cis6MTA2OTMwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjY3Cis6MTA2OTQwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjU3Cis6MTA2OTUwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjQ3Cis6MTA2OTYwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjM3Cis6MTA2OTcwMDAwMDAwMTAwMDAwMDAyMDgwMDAwMDMxMDAwMDAwNDE4MDc1Cis6MTA2OTgwMDAwMDAwNTIwMDAwMDA2MjgwMDAwMDczMDAwMDAwODM4MDVECis6MTA2OTkwMDAwMDAwOTQwMDAwMDBBNDgwMDAwMEI1MDAwMDAwQzU4MDQ1Cis6MTA2OUEwMDAwMDAwRDYwMDAwMDBFNjgwMDAwMEY3MDAwMDAxMDc4MDJDCis6MTA2OUIwMDAwMDAxMTgwMDAwMDEyODgwMDAwMTM5MDAwMDAxNDk4MDExCis6MTA2OUMwMDAwMDAxNUEwMDAwMDE2QTgwMDAwMTdCMDAwMDAxOEI4MEY5Cis6MTA2OUQwMDAwMDAxOUMwMDAwMDFBQzgwMDAwMUJEMDAwMDAxQ0Q4MEUxCis6MTA2OUUwMDAwMDAxREUwMDAwMDFFRTgwMDAwMUZGMDAwMDAwMEY4MENBCis6MTA2OUYwMDAwMDAwN0ZGODAwMDA3RkY4MDAwMDAzNDQwMDAwMzUwMDJECis6MTA2QTAwMDAxMDAwMDAwMDAwMDAyOEFEMDAwMTAwMDEwMDA1MDIwNjkyCis6MTA2QTEwMDBDQ0NDQ0NDNUZGRkZGRkZGRkZGRkZGRkY3MDU4MTAzQzQxCis6MTA2QTIwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDY4Cis6MTA2QTMwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDU4Cis6MTA2QTQwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDQ4Cis6MTA2QTUwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDM4Cis6MTA2QTYwMDAwMDAwMDAwMDAwMDAwMDAxQ0NDQzAyMDFDQ0NDQ0NDQzVBCis6MTA2QTcwMDBDQ0NDMDIwMUNDQ0NDQ0NDQ0NDQzAyMDFDQ0NDQ0NDQzgwCis6MTA2QTgwMDBDQ0NDMDIwMUNDQ0NDQ0NDQ0NDQzAyMDFDQ0NDQ0NDQzcwCis6MTA2QTkwMDBDQ0NDMDIwMUNDQ0NDQ0NDQ0NDQzAyMDFDQ0NDQ0NDQzYwCis6MTA2QUEwMDBDQ0NDMDIwMUNDQ0NDQ0NDMDAwMDAwMDBGRkZGRkZGRjFGCis6MTA2QUIwMDAwMDBFMDAwMDAxMTYwMEQ2MDAyNjI1QTAwMDI2MjVBMDA1Cis6MTA2QUMwMDAwMDI2MjVBMDAwMjYyNUEwMDA3MjAwMDAwMTIzMDBGMzY3Cis6MTA2QUQwMDAwMDI2MjVBMDAwMjYyNUEwMDAyNjI1QTAwMDI2MjVBMDBBCis6MTA2QUUwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEFBCis6MTA2QUYwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDlBCis6MTA2QjAwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDg5Cis6MTA2QjEwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDc5Cis6MTA2QjIwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDY5Cis6MTA2QjMwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDU5Cis6MTA2QjQwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDQ5Cis6MTA2QjUwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDM5Cis6MTA2QjYwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDI5Cis6MTA2QjcwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDE5Cis6MTA2QjgwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDA5Cis6MTA2QjkwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEY5Cis6MTA2QkEwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEU5Cis6MTA2QkIwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEQ5Cis6MTA2QkMwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEM5Cis6MTA2QkQwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEI5Cis6MTA2QkUwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEE5Cis6MTA2QkYwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDk5Cis6MTA2QzAwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDg4Cis6MTA2QzEwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDc4Cis6MTA2QzIwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDY4Cis6MTA2QzMwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDU4Cis6MTA2QzQwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDQ4Cis6MTA2QzUwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDM4Cis6MTA2QzYwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDI4Cis6MTA2QzcwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDE4Cis6MTA2QzgwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDA4Cis6MTA2QzkwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEY4Cis6MTA2Q0EwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEU4Cis6MTA2Q0IwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEQ4Cis6MTA2Q0MwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEM4Cis6MTA2Q0QwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEI4Cis6MTA2Q0UwMDBGRkZGRkZGMzMxOEZGRkZGMEMzMEMzMENDMzBDMzBDMzI5Cis6MTA2Q0YwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwMENGM0NDRENEQ0RDRDY2Cis6MTA2RDAwMDBGRkZGRkZGMTMwRUZGRkZGMEMzMEMzMENDMzBDMzBDM0FCCis6MTA2RDEwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwMUNGM0NDRENEQ0RDRDQ0Cis6MTA2RDIwMDBGRkZGRkZGNjMwNUZGRkZGMEMzMEMzMENDMzBDMzBDMzE2Cis6MTA2RDMwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwMkNGM0NDRENEQ0RDRDIzCis6MTA2RDQwMDBGRkZGRjQwNjFDQkZGRkZGMEMzMEMzMDVDMzBDMzBDM0FDCis6MTA2RDUwMDBDRjMwMDAxNEYzQ0YzQ0YzMDAwNENGM0NDRENEQ0RDREVDCis6MTA2RDYwMDBGRkZGRkZGMjMwNEZGRkZGMEMzMEMzMENDMzBDMzBDM0VBCis6MTA2RDcwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwOENGM0NDRENEQ0RDRERECis6MTA2RDgwMDBGRkZGRkZGQTMwMkZGRkZGMEMzMEMzMENDMzBDMzBDM0UyCis6MTA2RDkwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAxMENGM0NDRENEQ0RDREI1Cis6MTA2REEwMDBGRkZGRkZGNzMxRUZGRkZGMEMzMEMzMENDMzBDMzBDMzA0Cis6MTA2REIwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAyMENGM0NDRENEQ0RDRDg1Cis6MTA2REMwMDBGRkZGRkZGNTMwMkZGRkZGMEMzMEMzMENDMzBDMzBDM0E3Cis6MTA2REQwMDBDRjNDRjMwMEYzQ0YzQ0YzMDA0MENGM0NDRENEQ0RDRDQ1Cis6MTA2REUwMDBGRkZGRkZGMzMxOEZGRkZGMEMzMEMzMENDMzBDMzBDMzI4Cis6MTA2REYwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwMENGM0NDRENEQ0RDRDY1Cis6MTA2RTAwMDBGRkZGRkZGMTMxMEZGRkZGMEMzMEMzMENDMzBDMzBDMzg5Cis6MTA2RTEwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwMUNGM0NDRENEQ0RDRDQzCis6MTA2RTIwMDBGRkZGRkZGNjMwNUZGRkZGMEMzMEMzMENDMzBDMzBDMzE1Cis6MTA2RTMwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwMkNGM0NDRENEQ0RDRDIyCis6MTA2RTQwMDBGRkZGRjQwNjFDQkZGRkZGMEMzMEMzMDVDMzBDMzBDM0FCCis6MTA2RTUwMDBDRjMwMDAxNEYzQ0YzQ0YzMDAwNENGM0NDRENEQ0RDREVCCis6MTA2RTYwMDBGRkZGRkZGMjMwNEZGRkZGMEMzMEMzMENDMzBDMzBDM0U5Cis6MTA2RTcwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwOENGM0NDRENEQ0RDRERDCis6MTA2RTgwMDBGRkZGRkZGQTMwMkZGRkZGMEMzMEMzMENDMzBDMzBDM0UxCis6MTA2RTkwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAxMENGM0NDRENEQ0RDREI0Cis6MTA2RUEwMDBGRkZGRkZGNzMwRUZGRkZGMEMzMEMzMENDMzBDMzBDMzA0Cis6MTA2RUIwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAyMENGM0NDRENEQ0RDRDg0Cis6MTA2RUMwMDBGRkZGRkZGNTMwNEZGRkZGMEMzMEMzMENDMzBDMzBDMzg2Cis6MTA2RUQwMDBDRjNDRjMwMEYzQ0YzQ0YzMDA0MENGM0NDRENEQ0RDRDQ0Cis6MTA2RUUwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0RDCis6MTA2RUYwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwMENGM0NDRENEQ0RDRDk4Cis6MTA2RjAwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0JCCis6MTA2RjEwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwMUNGM0NDRENEQ0RDRDc2Cis6MTA2RjIwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzlCCis6MTA2RjMwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwMkNGM0NDRENEQ0RDRDU1Cis6MTA2RjQwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzdCCis6MTA2RjUwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwNENGM0NDRENEQ0RDRDMzCis6MTA2RjYwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzVCCis6MTA2RjcwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwOENGM0NDRENEQ0RDRDBGCis6MTA2RjgwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzNCCis6MTA2RjkwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAxMENGM0NDRENEQ0RDREU3Cis6MTA2RkEwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzFCCis6MTA2RkIwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAyMENGM0NDRENEQ0RDREI3Cis6MTA2RkMwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0ZCCis6MTA2RkQwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDA0MENGM0NDRENEQ0RDRDc3Cis6MTA2RkUwMDBGRkZGRkZGMzMyMEZGRkZGMEMzMEMzMENDMzBDMzBDM0E1Cis6MTA2RkYwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwMENGM0NDRENEQ0RDRDYzCis6MTA3MDAwMDBGRkZGRkZGMTMxMEZGRkZGMEMzMEMzMENDMzBDMzBDMzg3Cis6MTA3MDEwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwMUNGM0NDRENEQ0RDRDQxCis6MTA3MDIwMDBGRkZGRkZGNjMwNUZGRkZGMEMzMEMzMENDMzBDMzBDMzEzCis6MTA3MDMwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwMkNGM0NDRENEQ0RDRDIwCis6MTA3MDQwMDBGRkZGRjQwNjFDQkZGRkZGMEMzMEMzMDVDMzBDMzBDM0E5Cis6MTA3MDUwMDBDRjMwMDAxNEYzQ0YzQ0YzMDAwNENGM0NDRENEQ0RDREU5Cis6MTA3MDYwMDBGRkZGRkZGMjMwNEZGRkZGMEMzMEMzMENDMzBDMzBDM0U3Cis6MTA3MDcwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwOENGM0NDRENEQ0RDRERBCis6MTA3MDgwMDBGRkZGRkY4QTA0MkZGRkZGMEMzMEMzMENDMzBDMzBDMzdCCis6MTA3MDkwMDBDRjNDQzAwMEYzQ0YzQ0YzMDAxMENGM0NDRENEQ0RDREU1Cis6MTA3MEEwMDBGRkZGRkY5NzA1Q0ZGRkZGMEMzMEMzMENDMzBDMzBDM0FECis6MTA3MEIwMDBDRjNDQzAwMEYzQ0YzQ0YzMDAyMENGM0NDRENEQ0RDREI1Cis6MTA3MEMwMDBGRkZGRkZGNTMxMEZGRkZGMEMzMEMzMENDMzBDMzBDM0MzCis6MTA3MEQwMDBDRjNDRjMwMEYzQ0YzQ0YzMDA0MENGM0NDRENEQ0RDRDQyCis6MTA3MEUwMDBGRkZGRkZGMzMyMEZGRkZGMEMzMEMzMENDMzBDMzBDM0E0Cis6MTA3MEYwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwMENGM0NDRENEQ0RDRDYyCis6MTA3MTAwMDBGRkZGRkZGMTMwMkZGRkZGMEMzMEMzMENDMzBDMzBDMzY3Cis6MTA3MTEwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwMUNGM0NDRENEQ0RDRDQwCis6MTA3MTIwMDBGRkZGRkZGNjMwNUZGRkZGMEMzMEMzMENDMzBDMzBDMzEyCis6MTA3MTMwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwMkNGM0NDRENEQ0RDRDFGCis6MTA3MTQwMDBGRkZGRkYwNjFDQkZGRkZGMEMzMEMzMENDMzBDMzBDMzk2Cis6MTA3MTUwMDBDRjNDQzAxNEYzQ0YzQ0YzMDAwNENGM0NDRENEQ0RDRDFDCis6MTA3MTYwMDBGRkZGRkZGMjMwNEZGRkZGMEMzMEMzMENDMzBDMzBDM0U2Cis6MTA3MTcwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwOENGM0NDRENEQ0RDREQ5Cis6MTA3MTgwMDBGRkZGRkZGQTMwMkZGRkZGMEMzMEMzMENDMzBDMzBDM0RFCis6MTA3MTkwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAxMENGM0NDRENEQ0RDREIxCis6MTA3MUEwMDBGRkZGRkZGNzMxQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzIwCis6MTA3MUIwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAyMENGM0NDRENEQ0RDRDgxCis6MTA3MUMwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0Y5Cis6MTA3MUQwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDA0MENGM0NDRENEQ0RDRDc1Cis6MTA3MUUwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0Q5Cis6MTA3MUYwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwMENGM0NDRENEQ0RDRDk1Cis6MTA3MjAwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0I4Cis6MTA3MjEwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwMUNGM0NDRENEQ0RDRDczCis6MTA3MjIwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzk4Cis6MTA3MjMwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwMkNGM0NDRENEQ0RDRDUyCis6MTA3MjQwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzc4Cis6MTA3MjUwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwNENGM0NDRENEQ0RDRDMwCis6MTA3MjYwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzU4Cis6MTA3MjcwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwOENGM0NDRENEQ0RDRDBDCis6MTA3MjgwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzM4Cis6MTA3MjkwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAxMENGM0NDRENEQ0RDREU0Cis6MTA3MkEwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzE4Cis6MTA3MkIwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAyMENGM0NDRENEQ0RDREI0Cis6MTA3MkMwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0Y4Cis6MTA3MkQwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDA0MENGM0NDRENEQ0RDRDc0Cis6MTA3MkUwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0Q4Cis6MTA3MkYwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwMENGM0NDRENEQ0RDRDk0Cis6MTA3MzAwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0I3Cis6MTA3MzEwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwMUNGM0NDRENEQ0RDRDcyCis6MTA3MzIwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzk3Cis6MTA3MzMwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwMkNGM0NDRENEQ0RDRDUxCis6MTA3MzQwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzc3Cis6MTA3MzUwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwNENGM0NDRENEQ0RDRDJGCis6MTA3MzYwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzU3Cis6MTA3MzcwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwOENGM0NDRENEQ0RDRDBCCis6MTA3MzgwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzM3Cis6MTA3MzkwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAxMENGM0NDRENEQ0RDREUzCis6MTA3M0EwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzE3Cis6MTA3M0IwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAyMENGM0NDRENEQ0RDREIzCis6MTA3M0MwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0Y3Cis6MTA3M0QwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDA0MENGM0NDRENEQ0RDRDczCis6MTA3M0UwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0Q3Cis6MTA3M0YwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwMENGM0NDRENEQ0RDRDkzCis6MTA3NDAwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0I2Cis6MTA3NDEwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwMUNGM0NDRENEQ0RDRDcxCis6MTA3NDIwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzk2Cis6MTA3NDMwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwMkNGM0NDRENEQ0RDRDUwCis6MTA3NDQwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzc2Cis6MTA3NDUwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwNENGM0NDRENEQ0RDRDJFCis6MTA3NDYwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzU2Cis6MTA3NDcwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwOENGM0NDRENEQ0RDRDBBCis6MTA3NDgwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzM2Cis6MTA3NDkwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAxMENGM0NDRENEQ0RDREUyCis6MTA3NEEwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzE2Cis6MTA3NEIwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAyMENGM0NDRENEQ0RDREIyCis6MTA3NEMwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0Y2Cis6MTA3NEQwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDA0MENGM0NDRENEQ0RDRDcyCis6MTA3NEUwMDAwMDBDMDAwMDAwMDcwMEMwMDAwMjgxMzAwMDBCODE1ODMyCis6MTA3NEYwMDAwMDAyMDIxMDAwMDEwMjMwMDAwRjAyNDAwMDAxMDMzMEMwCis6MTA3NTAwMDAwMDBDMDAwMDAwMDgwMEMwMDAwMjgxNDAwMDBCODE2OEYwCis6MTA3NTEwMDAwMDAyMDIyMDAwMDEwMjQwMDAwNzAyNTAwMDAyMDJDMEU3Cis6MTA3NTIwMDAwMDEwMDAwMDAwMDgwMTAwMDAwMjgxODAwMDBCODFBODBCCis6MTA3NTMwMDAwMDAyMDI2MDAwMDE4MjgwMDAwRTgyOTgwMDA4MDM4MDMxCis6MTA3NTQwMDAwMDEwMDAwMDAwMDEwMTAwMDAwMjgxMTAwMDA5MDEzODU0Cis6MTA3NTUwMDAwMDAyMDFDODAwMDEwMUU4MDAwRTAxRjgwMDAwMDJEODk1Cis6MTA3NTYwMDBDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQzVCCis6MTA3NTcwMDAwMDAwMjAwMENDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQzVCCis6MTA3NTgwMDBDQ0NDQ0NDQzAwMDAyMDAwQ0NDQ0NDQ0NDQ0NDQ0NDQzRCCis6MTA3NTkwMDBDQ0NDQ0NDQ0NDQ0NDQ0NDMDQwMDIwMDAwMDAwMDAwMDY3Cis6MTA3NUEwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkZCNTFDRkMwRjAwMzUwCis6MTA3NUIwMDA4QUI3QjEzMTMwRUNFNjQ0RjBFOTgxNTkxODE4MThGODZGCis6MTA3NUMwMDA5OUM4RDdCRjExNjhDMDRFMjBCRTAxQzQwNzU5NDhENzFCCis6MTA3NUQwMDA3RjU1MUFDMTVFMjZDOUMwNzAwQTg4Mjc4ODMzMzBCNDI3Cis6MTA3NUUwMDA0QTIxQzRFRDY1MTgxOEVFMDFGOTJCQTE2MjcyNDAzREU1Cis6MTA3NUYwMDA3M0E0Qzk3N0YzMjgxRTNDQjhEMDE0OTUxRjYyMENBMTYwCis6MTA3NjAwMDA1Rjk4NDBFODIyMzRGOTUwQThCQ0I4MUU4NDJFMzZDNUQ1Cis6MTA3NjEwMDA2RUFFODQxRTcxRjZBN0E5QTBGMkJENTVGMEFCQ0ZENTEyCis6MTA3NjIwMDA0MEU1QzdBMkE5MEY4MUYyMDE3RUU5QjIzNEQ4MDMwMDc4Cis6MTA3NjMwMDAwMDAwMDAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMDk4Cis6MTA3NjQwMDAwMDBCRUQ3RDBCNzQ1NUQ1QjVFOERBOUZCM0NGRkY2NDIxCis6MTA3NjUwMDAyNzg0NzAxMjNFRUVDNDAwQzEwNjNDNDI4MEEwQTgzQkM1Cis6MTA3NjYwMDBGQzFBN0RENDFFMTAyNUU1QTExQzQ0NkIwMDQ5MjJBNkZFCis6MTA3NjcwMDBENzhDOTZENzZDQzg4NzA0NTBFM0U3NTFCRDQ1N0JBMEYzCis6MTA3NjgwMDBEODhCMEU1QkEzQTY4QUJEQjQzRDg4N0FBOUMzREIyMjQyCis6MTA3NjkwMDA1QUE1MkQ3QTgzRkEyQzU4QTBCMTU3MkFCRDRGQ0I1QjNGCis6MTA3NkEwMDA3M0FFQjU5MkJENzdDRUM5Qzc0RjQ3RUY3ODhENDM3NjlECis6MTA3NkIwMDBENkRFRUIzQkZGNkJDRUI5NTYzNEQ5NDNGMjJFMjdFNDJFCis6MTA3NkMwMDAxQ0ZDRDBBNzI5MTE0MkE2RjczREM5MkQ1OTMyQzkyMzY4Cis6MTA3NkQwMDBFNDFCM0U4MjNGMUZGOTIzNTM0ODE2MjEwRDNFRjZCQ0EyCis6MTA3NkUwMDAzRDEwRDkwNUNGMkQ4RDg0QTQyNkMyRjc3MTQ5MTIyMUYyCis6MTA3NkYwMDAyNDQ4NDg4OTlBMEIyRDAyQjE4NzBCRTE1OTc3NjE3Q0E4Cis6MTA3NzAwMDAzMjNFNjdDMjMzODdDODg0OEM4NEYyMThGREJEMjBFQkZCCis6MTA3NzEwMDBGQjlDNDJGRjM5OUFBODgwRjExNEY2OEFBOEE0M0M5NkYzCis6MTA3NzIwMDBDMkY2REYyMjY0NDZERjNDNDhERDU3RjU3OEI4NkZERUVECis6MTA3NzMwMDBFRUE3QTI2QjI0QzVFQjlFODM3Rjk0RTU1OTg5NTBFNkEyCis6MTA3NzQwMDBGQTBENDdBNUM3OUZCN0Q1MUY0RkMyQjkzODJGOTVBOEM3Cis6MTA3NzUwMDAzODJGREU5RTEwOEJEOEU3RTdFRUU3QTM0NkYyRjhGMzZBCis6MTA3NzYwMDBFM0ZCQzMyREQzQjgwMjZFNkQ4RDNFN0NCNjM2RUEyNEEyCis6MTA3NzcwMDBFNTI1ODQzNjMzM0I0QkU5MzM0NENDNURBNUZEREJDREI5Cis6MTA3NzgwMDAyMzEyODcxRjlGMEY4QzYzRDBGQUY0N0Y0MkUxREU5Q0E3Cis6MTA3NzkwMDA0QjkyNDFDMDIxNDkzOEUwRDYxQzVBRUMzM0QzRjQyNzMwCis6MTA3N0EwMDA5RTI0OTdDMkFEODRDRkI5QThGRjdBRkQzMDJGMEEwNzc3Cis6MTA3N0IwMDAzRkNDMkIwRDNDOTdDMkJDQTZGNzlGOTdCRkQ4M0RBRkRGCis6MTA3N0MwMDA2QTYyODdDRjcwRTcxNTk4NDRDODIxQzA4NzZBMTI4MjIxCis6MTA3N0QwMDA3OEI5Q0REMTlGQUM5QjU2Nzc5QUZFMDhBNzBCRDVFMDIwCis6MTA3N0UwMDBFQjFCMjI5RTgyMjU3MkRGRjgwMDA3MjNFMEEwMkY2RjlCCis6MTA3N0YwMDAzNEM3NDk2RjZFQkEwNjc4MjBCRTNBMzg3Q0UyMEFFMzk1Cis6MTA3ODAwMDAwN0FCMEY4RkY0MTk5QTFEOTM4MDM1NjhGMTEwRTAyREE2Cis6MTA3ODEwMDA5RjMwRjhFNTU3QjdERTJBNEYyMTk0RDUzQTBGNEVBMDk2Cis6MTA3ODIwMDBGMENCRUY1RUI5OTA0MEY5RTgxNTI3ODBERjlBQ0JBNjQwCis6MTA3ODMwMDA1NkNFQTVGNUIyQ0I2M0FGMkNBMDRENDIzMTQzMDI3QUIwCis6MTA3ODQwMDBERDBBOUQxNTQwN0Y1RkIzMkE2OEI5MDlGQUEzNjVDQkFECis6MTA3ODUwMDBCQUNBQjQxMDZFQTYwMzZFMTQ3Mjg2NEFDQjFFRjhCNTZGCis6MTA3ODYwMDAyODBERkM0ODJGMUVBNDczREVGRUVEMzNDMUNGNDM2QzAwCis6MTA3ODcwMDBGODQzN0U1RUVGQTBDQjhDNzhCRjkxRTFDQkEyRkYwMUY1Cis6MTA3ODgwMDBCRTQ2MTAxQjVGRDM3RUIyMkIzNTA3NUVCMjVDRTMzQzc1Cis6MTA3ODkwMDAwQUJGMjBCQzZGRkQ5QjhDOTc0MzlFRjQxOTk0Q0UzRDhDCis6MTA3OEEwMDBBNUIyOUVBNDc4Q0EyNkIxNkNCNThDRTI2M0ExNEE0MDA5Cis6MTA3OEIwMDA4RUU1RTRFQTEyOTBDMzYwNzg2OTI2QTQxMkY4OUY0QTI0Cis6MTA3OEMwMDAwN0IyQzgyNkU3N0VDRUY5QUI2MENERUU5REFENzQ5Q0M1Cis6MTA3OEQwMDAzM0IzNDMzMUE4OTVBRkQzQjk0RUVEQkY5RTNCNDBCRTA1Cis6MTA3OEUwMDA3ODZERTVCMkU3NDgwMkM3RUIzQzU4NDRFNzY1OTVDOUI3Cis6MTA3OEYwMDBCMTg3MjlERDZDMkQzREFDREJFNUUzQjE1RUY5RTJBNjk1Cis6MTA3OTAwMDAwRjYyQTgzM0I4M0NBMEYwNTE0QTY1RDMxRkY5RUNGNERDCis6MTA3OTEwMDBBMTdDNEFGQTA4REZFOEM0Qzc3MEYxNzU3QTk4RjRGMURGCis6MTA3OTIwMDA1OUM3MTM3OEVEQ0Y1NzFCMDU1RTdEODQ3RURGNTJCMkI5Cis6MTA3OTMwMDA3ODQwN0RENTFGQUY0RjkyMDQ2RDE3MkEyNTY2MzI0REQyCis6MTA3OTQwMDBCQkZGQjRFQjBCRjdEMzI2REZERDcyNTQxOTM1QTM2QTA2Cis6MTA3OTUwMDBFNzQwNzhDQjc1QUU1N0Y0RUI2RjUwOEM3NzQ3RDBBMkU5Cis6MTA3OTYwMDBBQUEzN0NENUI4MUU2ODhGREU2MzExNEE3NzY3NDBGNkZDCis6MTA3OTcwMDA1MDc4MjgxRDE3QTVBMDRDOEE0OUVDNjFENjRENEFBMjIzCis6MTA3OTgwMDA2NTdGRDQ0QzZFNDEzQTQ4MjI1RUM0RkNCQzg2RUM5MEM0Cis6MTA3OTkwMDBCMzZBQUU1MzBFOTMyQTRCQjJDRkRGREZBMEUxM0MzNDgzCis6MTA3OUEwMDAxODJGMTdFQzAyREEyMTA1ODUxQTIyMjlBMDVCNDFBRkI2Cis6MTA3OUIwMDBBMDkyQ0U5RDBGNjVBNzlERDE2NjRDMjVFOUYwQTA3MkRGCis6MTA3OUMwMDBCQzRCOTJBMEQ3NkYwRDREQkVCOEM3NUJFMjlDRUY5MDQ5Cis6MTA3OUQwMDBEQjg1NTRFMzNERDEyNjhEOUNFRTZCQTc5MkY3MDQ3RUE4Cis6MTA3OUUwMDAyODEwMkYxMzc2MURDN0QzNjYwRkQ5MkI1RDQ4RTVDMTJDCis6MTA3OUYwMDA5ODZCQzE1MjIwOUJFMUQzMkM2QTg3QzA5MzJBOUZDREZDCis6MTA3QTAwMDA2M0E2RUE0MDU3NjQ4RkE0QzIzQzcxNDg4QTQ3NDJGNTk2Cis6MTA3QTEwMDAxREQ0MEI0QTA2RjYyM0ZCRUE5MEZFOTQ5MDg5NEZGMUExCis6MTA3QTIwMDAzREYzQkNEOEY4QkQ2NTVGQTIwNkYwNTMxREQ1OEMyRDgzCis6MTA3QTMwMDA3NDhFNkIxNUQzRDgwODc0MzE4REM5QTdFQUU4ODQ3OUEwCis6MTA3QTQwMDBBMEVGM0MxMjlCRDdCN0E1N0M1Qzg3OUFEMzk2ODc3NjJDCis6MTA3QTUwMDA1OTA2RkJBRTVBQTUyQTdGMkE3Q0RGMzY2MTIwN0UyMjlBCis6MTA3QTYwMDA0OTRGNEZCNzBEOUU2RTdCRjA2Njg5REE4MzVGQTJCRkU4Cis6MTA3QTcwMDBDQzI0MzMwMThFN0Y4QTJEQ0U0QTBEODBBRkY3MUIwRkE5Cis6MTA3QTgwMDBFQUVBRjgzRTdCRDBGRDdEQUQ0MkVBRDJDOTgxNTZDOTEzCis6MTA3QTkwMDBDN0Y4RDI2NzY5NjAxRjg4NzVBRjA1NzZBNzIwREQxNjI1Cis6MTA3QUEwMDBEQkM0RDY5QjlCOEJGMDVEQkJFNzE3QkE2QUUzQkZCNTFGCis6MTA3QUIwMDA1NENENzhBN0Y2NUY4RjgwQjdFOEE3Qjc3REYyQTBBMzczCis6MTA3QUMwMDBCREJCNUQ2RjdGNDI1RTUwN0IxOEU4NUNEMDQxNTA0QTgxCis6MTA3QUQwMDA2Qzk1RTg3QjZGNkNCMTA1RUE2Q0VENjMxNTBDRkYxOUQyCis6MTA3QUUwMDBFNkRGOEJBRjRGMzk3RkQxNkUzMEJBRkFEM0VFQTY1NkIwCis6MTA3QUYwMDBEMDRGRUY2OTFENTc1RDRDRTlFOEY3NEYyOEIxNERGNEMxCis6MTA3QjAwMDA2QkY1OEU4OUYzQzA1RTdBOEZEM0I3QzBEMzg5REQ0RDE0Cis6MTA3QjEwMDA3OUU5RTgyMzEzOUU3RTIxRjk3MTFDNDE1RkQ1RjJGMkM5Cis6MTA3QjIwMDAwMUU5NjEzMEZBN0FDQTRENUY5RDU3N0YyMUY0NzVDODJCCis6MTA3QjMwMDA0RDVGMUMxRTI3M0JEOUZBQzlGRDIzMTg1RTM4QkVEQ0Y5Cis6MTA3QjQwMDBGOEM5ODg5NzRGREJBRTNGM0RGRDVBQTI3Q0VERURCQ0Y2Cis6MTA3QjUwMDAzQTNEM0RGMUY5MEE3QzdERDZGOTBFNDY0Nzc5ODY2OUIyCis6MTA3QjYwMDBFQTc0RkM1MUQ0OEU5MTQwN0Y5NDkxNTg4QUNFNTNBN0U5Cis6MTA3QjcwMDAwRkQ0NUIzMUE2Qjc4NDVDMTJFRDRGNEJDQzRFNTNDOThBCis6MTA3QjgwMDA2QkQ4NUUyMTI5NEI0NzdCREI2OTY3Q0M1N0U4NEJEQTIyCis6MTA3QjkwMDA0RjczMDk0OTdBNzE1RjY0RkE1MDRGOTVBODg0RTkzRkExCis6MTA3QkEwMDAzMzk0M0YwM0VDMDhGRUEzQ0M4RUMxQkFCM0MwRkUwN0VBCis6MTA3QkIwMDBGRDM1OUJFQjVGODlEQTVCNzQ3REExMzJFN0JFMzdFMDcwCis6MTA3QkMwMDBCMjNGMTRCRTVGRTg2NzZGMEQ3MzdGRUM5N0Y5RkUzODI0Cis6MTA3QkQwMDA0ODQyQTg4RkM0RkUzODAzN0ZGNkVFOEIzOTVDNDc2QUIzCis6MTA3QkUwMDBDNDk0RTlCQUI1ODM5RUU0MjYwOUI0MUI0MUZENEM4RUNBCis6MTA3QkYwMDA0QTQ5RTYyRjIwMjU2MDM3QUY5NzBBNjJBMDBGRTgzRTdBCis6MTA3QzAwMDBBRjI3OEI3RTdGRUYwNzBBRUE4Nzg2NjhERDhBMTY1OEUyCis6MTA3QzEwMDBGNkI1MEQxM0JCRTlCOEY3MzQ5MjY5QzU5RUJFRjFFRTE3Cis6MTA3QzIwMDA1MTNCN0MwMEVGRjZFMkY1MEVCQkY2QkI1MkEyNTBCNjFDCis6MTA3QzMwMDBFOTFEN0Y1NDlCNTYzQzBEODY1M0RGRUVBNkYwOTAyOTNDCis6MTA3QzQwMDAyMDgxRkYwMkExRkJBMjJGMTgwMDNGRjZCRTE3NEVGNkJGCis6MTA3QzUwMDBCMkQyQkY5QzBCMzY0RjAxMTY1M0IwMkY2REE3QjYzQjY3Cis6MTA3QzYwMDBCOTE4OEFBM0E1MEE0QTA3RUQxRUZFRERGQTREMDVFQ0Y4Cis6MTA3QzcwMDA3N0RCRkRBQ0JDNjNEM0FDOEQxNjk0NDdGMkZBNTYxNTk2Cis6MTA3QzgwMDBGQjlFQ0ZDQUI3NkRGQTQxMDVFQzBCREFCMkU5OUFBOUFGCis6MTA3QzkwMDBCRTZFRjMyNEFCRTI2OUY4RkIzNjU5NzZEODVGNERDNjY5Cis6MTA3Q0EwMDA4MkYyRkY0M0Q3RTFGNzk5MTdCRDQwRTE0OTgxMTJCMzUyCis6MTA3Q0IwMDAwQ0QyNkI5NzE1MEFCRjQxQzdERDk1MjUwMEZGRDcxNDdECis6MTA3Q0MwMDAwMkY0RUMzNzYyRjE5QjBDQTQzRkE0N0I3RkFFMTlEQjdFCis6MTA3Q0QwMDA0MjRCMERGNDg1MENGNTI4REUxRTk2NjA1RkM3RUMzMTMzCis6MTA3Q0UwMDBGMEU3OUM0M0ZBQTU3QzQxQkZBRkNGRDZCMTNFRDE2RDQyCis6MTA3Q0YwMDBGNjU5NTE5RjNERDY4QjI3MTdERUVFNTU3QkZDODBCNzlBCis6MTA3RDAwMDBFRjhERjlGMDE3MTM2OTNGRDY0MjM5MDY2NEYzQkQwREM0Cis6MTA3RDEwMDA0NUQ5MkI2RDc4N0NDQzM3QTcwQUYwNDg5QTczRDEyRUMxCis6MTA3RDIwMDA4OTkyREUxRjEzQ0E2MkRGNUM0MDNBMkJDMDc4MUM0Mzg1Cis6MTA3RDMwMDAyNTFGQTE3NDNBMkVERTUzMDEyODMwQUFGNEU3NzA4Rjc0Cis6MTA3RDQwMDA0QkU2RTlFRkExNURBNTQ4RTdCRTM0NzQzQkNBMEQwN0Q5Cis6MTA3RDUwMDBEQUUzQTg0NTU0M0U4RDkwNDgzQzlEREM1REE5RTZBMDQxCis6MTA3RDYwMDAzQzE4NTE0OUQ3M0I4MDlGRTA5QjU0OUYzMEZCMkNFMTRFCis6MTA3RDcwMDAwM0ZGNTZBNjcxMzJDREYzMzNDMDczOTM0Q0M3MUQ0RDJDCis6MTA3RDgwMDA5MjA4QTdDMUUwOUEwOTlFQUREMTI3QjM1MTVFN0ZDRTdDCis6MTA3RDkwMDA3MENERDRERTBEQ0YxMTEyRTM5Nzk1NkEzOUYyQ0I1MDM2Cis6MTA3REEwMDBGRDNCNkQ3QzNGRDUwMjdFMzhGQTZDRTI3RTM4Nzc3QkY2Cis6MTA3REIwMDBCRkRBNDE2MjY5RjBFQjM3OUNGRTIxMERGNjI1QjY3MjAxCis6MTA3REMwMDBCRDZDMzA3RDEwNzJGQjg5MTg5RUREN0E2MTAxRDcwQjg2Cis6MTA3REQwMDAyRDUxQUExNzk4M0M1QzA4N0EyMEM4RTFERjAyQkI3RUNGCis6MTA3REUwMDA5MDlGNjE5MkI0RThGNzIwRjcwNzkxNTIyNkZGN0RGNDQ3Cis6MTA3REYwMDAzRkUwQjc1MTU1NEU3REEwMEQ1MTFGQkMyQkM1NUY5MDg0Cis6MTA3RTAwMDA5MTBFODkwNEYzQkI1RkVBQjg2MjAyRDA0RjNFQjNDNzVDCis6MTA3RTEwMDBBMzM3QjQ0NTEzMzYzOEQ0Q0I0Q0RGMDk3RDk2MkMxNkU2Cis6MTA3RTIwMDBGQThDMjBGQ0NFRTM3MzQ4OTIwRTNGRThDMzA3MzYyQzUxCis6MTA3RTMwMDBDRTQyQkZERDhENDE4NzFDOEFCNjJFQzZGREFGOEQ5RTFBCis6MTA3RTQwMDBEMTJGREFDMUZEQTM5OUYwQTc2QkM5NDQzQTc5NThBODlDCis6MTA3RTUwMDAzMDc5MTgzMTdCNTJFMEYzNDM0MkNFRTMyRTQzNEVENkM1Cis6MTA3RTYwMDAwQ0ZFQzRCMTBGOEI0Q0VEMzk3ODNFNURFRkNFOEJFNDQ4Cis6MTA3RTcwMDBEODI2REE0RTlEQURBNjNDMTRCRTZBRjk4QjU1MTI3RDBDCis6MTA3RTgwMDBFRTJDNjRGMEI3NjYxMUE0RDM5MEIxRTA4NDAyRkE1OEU2Cis6MTA3RTkwMDBFRDQ2N0Y0REE4RDJCRDJGQjY5NTE1RThBN0U3N0FENDU5Cis6MTA3RUEwMDBERjc2M0ZGNTAwRkJCOEExM0U5QjI4QkNERUI2RjEzRjc0Cis6MTA3RUIwMDA4NTVDNEFBMUVCNTAzNzEwMDNFQzA5RDVBNDIyMzEwMkFFCis6MTA3RUMwMDA0RjNEMEZFODQ1MzU2MzIxN0M3NjU3NTRDMkYzQkNEOTRBCis6MTA3RUQwMDBGMTRBRDlBNjA3NTQzM0JFMDVFQThGRjhDQTdERURCMDQyCis6MTA3RUUwMDA1RUY1MjY1OTU2MjRDNjA3MzkzNjc4OUI0QUExNjMzRjZBCis6MTA3RUYwMDA5N0FEQkJGQ0E1ODlENjJBRDRFRjg2NDZDNjE3RjY5RjU4Cis6MTA3RjAwMDA3N0JEQUM3MkI5RTdBNDE3NDEyNzAzQzhCQkNGNDQxRkE0Cis6MTA3RjEwMDA2RkNBQzI1RkVEQzRCRjgzNEU4QUZBRjAyQkRBODVGQUNFCis6MTA3RjIwMDBGOUFCOUNGODc1OTczRjZGQkNGQTAxNEYxNDFGRTc1MUVFCis6MTA3RjMwMDAzQzAxN0Q5RTM3OUJEMTIzQjU0N0QxN0U3QUMwRDc2MTY2Cis6MTA3RjQwMDAwMkJDMUYyODM2NjQ0QkVBNkIxNzU2NzI5ODlGRjkyQ0I3Cis6MTA3RjUwMDBERDY4NTFCQkU3RkU5NURCNEQ2ODk3NUY0QzY1ODA4NDFCCis6MTA3RjYwMDBDRkI0RkVBMzdBNTlDMzc2NTQyRTU0MkFDQzZFOTdDMDUwCis6MTA3RjcwMDAxRTlGQUY2Q0FCODJGNjNCMjk1RTgxREY3NzAyN0Y0M0E5Cis6MTA3RjgwMDA3QzIwQTFBMTFDQUU5N0RCMkIzNkQyQkU1QjhGNEFCMjAwCis6MTA3RjkwMDAwMjQ2QUNCRTE0RjFFQkU3RkNGRTkxMjc1MTA5N0VDODA2Cis6MTA3RkEwMDAyREZGNEIyNkJCMENEMDRCMDNGQkJEOUEzOEJFNDUxOUE5Cis6MTA3RkIwMDBGQzBENjA5RjhDQTlEM0E3MDJEODMzQjVEQjVFMjc1NzkxCis6MTA3RkMwMDBBNjVCNTdCNUMyRjA3RjQ3RERFMTBFMzQ0RjlGNzdFRUQ5Cis6MTA3RkQwMDA0NzNDQ0I0REEwNDhEODk3NTQyQjM2RkEwRTk3MzE3RkFCCis6MTA3RkUwMDAwNzQ5RDBGNTQwN0Q0RTM3MUYxNTBFNENBRjBGQkFFNjRFCis6MTA3RkYwMDAzRjk2Qzc1M0RDRjU1RTU2QjhCRkNFNjBGMDMyNDRGRjAzCis6MTA4MDAwMDAxQjA3RUU1RkMwRTc2QzlCQzJFMzIzRDQwMDQzMjIxRTM0Cis6MTA4MDEwMDA0OUVDRkE1QkI5RjE1MDA1QkNBNzVDQjcwOUYwQjU1RDU2Cis6MTA4MDIwMDAyNkQ1Q0NERjFDNDczRDE0RTFFM0VEMkNDRkMxRjYwQjg4Cis6MTA4MDMwMDA1NTI2NDdDNzlBRkExNkMwRjdEODY2MTkyQzA1RjJCODI0Cis6MTA4MDQwMDA2MkUwRkI1MUNCRUJGNjdCMjgxRURBMEI0OTJDNjRFMDk3Cis6MTA4MDUwMDAxMEQ4RUY4QkUzMzVBNENCRkM1Q0E2QzdGMkVCMjkwOTYzCis6MTA4MDYwMDBEMDdBRjlBNTI0NjlEMEY2RURGQjFGQThEMDY4Mzk0MjczCis6MTA4MDcwMDAzNzU0NjAwQUZCQ0ExOTNFN0QyNTI0MDZBNjkwQzcyMjA0Cis6MTA4MDgwMDAyOTk5N0Q0RjQyNEM1MjI5RUZCMTQwOTUxRTE4M0YwMzZDCis6MTA4MDkwMDBGNzVGNzdFNjkyOThEN0U4OTMxQjgyQUVFRTZDQkVDNzg3Cis6MTA4MEEwMDAwRjdBRTQ4MUUyN0JBRTk4MDBGRUM2NTIxNUZERTRFNDRGCis6MTA4MEIwMDA2MzBBMjdFMTRGNTQyMDVFMTYzNzYxQkNGNjU5NkNERTI3Cis6MTA4MEMwMDBGNDBERTI1M0Q1RDlGQUM3REMzRjFCRjlBNDNERkMzNENCCis6MTA4MEQwMDBDRUMzNUE0NzYyRTNCMTVFOEM2MEZDODYwQTU0RjA1NzA3Cis6MTA4MEUwMDAzNjU1MzM3QkQ3OEQ4RkY1MjRGMUI4MzJERDRFQUY4NzBGCis6MTA4MEYwMDA5MDZFREEzRjUxRjhCRUUwQzU4RDYwRTc4RjgzNUY2OTBGCis6MTA4MTAwMDBGOTk3NEQ3RkRDMzgxQ0JCNDVDNDBGODVEREIyNDVFRENBCis6MTA4MTEwMDA0NEJFQjcyOENGODE1RTEyNzY4Q0JGQjgxM0M3RkRCRkFGCis6MTA4MTIwMDA5Q0RFODdEQUJGQkZDNEU5NkY3NURCMzU2RTdCQTY1RTY4Cis6MTA4MTMwMDBENjFERjZBQjdCNUQxRjc5NTI1N0MwRkNCNkU0NTM3RTZCCis6MTA4MTQwMDA0RkEzMDc3RTAzRkE5QUI2REYxMTVERkNBQjg5NDY1RjQ5Cis6MTA4MTUwMDAzRjdENzJDOEMwRUZBMjNDRTZBQzg2RjgxOTdBN0QyQTUyCis6MTA4MTYwMDBGNzYwOEY2NjMyQkUxQTJCRTREMDM3Mjg1RjBEMTA3RjgwCis6MTA4MTcwMDAxNDdDRjUxMTE1MTI4NzgwNEZENDBFQTQyRjYyOTYyMDFGCis6MTA4MTgwMDA1RjA5N0U1MUJBM0JEQUNGQTdGNDYwRDRDQkUwQjkwNkUxCis6MTA4MTkwMDBGRTIyMzlCNDVDNDhFOTNENjVCMzg3ODRCQzUwNEIzQjUzCis6MTA4MUEwMDBFMzEzQTVGRTc0RjdBMDIxMjMxRUNGOTQzMTdGNzU5NkFCCis6MTA4MUIwMDBENTZENDI5MzYwNjkyN0M2RjUyODVERkQxN0QwOTVBQTU1Cis6MTA4MUMwMDAyNzI1QzBFQjk4RkIxN0UwQkE3RUE5MzA1NkY3QUIyQ0Y5Cis6MTA4MUQwMDA3RUVDNUVDN0NGMzk3Qzg5QkUxQkVENzkzRjFCOEVCMjJBCis6MTA4MUUwMDBGODdEMzEzNjNGNTc5Q0JERkU1NzAzQzZEOUZEMzE5NzA4Cis6MTA4MUYwMDA5RDMzNEMzRjQyOEVDQUZEMDhEQ0VGMzU1OEZCRTFDNjhCCis6MTA4MjAwMDBENzk1QjMyMzkwM0U3QUNCMTlFNEVENEQyQUU3OEJBM0EzCis6MTA4MjEwMDBCQjFDNzBFOTA3MEY2NTQ3NkNBMEY5Rjk4NTlGRkU1M0Y5Cis6MTA4MjIwMDBDNjA1NTA4NzBEMDEwRTZFMzg1RUEyM0FGRDg3OUYzNzU2Cis6MTA4MjMwMDAxQ0RERjFFRjk3QjhEQzFGNEMxRTA0NEQzMzI1MkJFMEZECis6MTA4MjQwMDAzRjIzQ0NCRjEzMjJEQ0JGRTNBNEY3OURDRDMyREEyMTVDCis6MTA4MjUwMDBDMUIwQkMxMzRDQzlBQ0ZBNkVENEMxNjI3QzRBRUY1NUI0Cis6MTA4MjYwMDBBQThEREU0Nzk3MUU0QTQxM0JCNzNFQ0FBNDg3MDY5M0I0Cis6MTA4MjcwMDBCN0FCN0NFNjBEMkFDQUFERjRGQkYxQkU3QzAzQ0EyNTgwCis6MTA4MjgwMDA2OUYyMEQzMkUyQjVFRUYzQzkzNzE4MkFCQzdCRkQ5QkNCCis6MTA4MjkwMDAzQzdGRTA4NjcyNDFDN0M2RDJERjUxQjhBQzNFRTgyMUQwCis6MTA4MkEwMDBFODk3Rjk5OEFFQ0UxNjU3NUJDREY3ODEzN0YwN0RFNEFECis6MTA4MkIwMDA4RDI0MUU4MThGQTc4ODVDMDlGQzcyOEExQzhFNENCM0FBCis6MTA4MkMwMDBDOTkzRkI1NDhERjE0QjlCRTc2REYwQUY4QTc4Rjk0RDY0Cis6MTA4MkQwMDAxREFDMkNFNjczRjNGRENFRjJEN0M5RTIzQ0YwRUI3RDhBCis6MTA4MkUwMDBGRDNFMEZFMjZCQjVDQkJGRDZBQzMyRkQ3MTMzQTk2QjRGCis6MTA4MkYwMDAwNUJDQjU3ODQ4MTVDOEIxMUI3NEEyOEVBMEE2RUJCQTEwCis6MTA4MzAwMDA2NzFFOUNCMTkyOTZCRkNCRUQ5MUY3QTk1QzM2NkM3MTVDCis6MTA4MzEwMDBEMDM1QTFBNDA2Rjg3REE3NkJEQUI1OTcxMDY4OUY2Q0RECis6MTA4MzIwMDAyRDgwN0Q1QTM2QzE3REFCMUJDRUFCREE5Q0YzMUI2QzI2Cis6MTA4MzMwMDBGRUVFRjk1MkYyQzJGOTY2OUE4N0JBNDc0QTZCNEYzRjhFCis6MTA4MzQwMDAyMkU0MERDNzU3QTZCQzJBOTE0RkY1MEIyMDIwNUFERjE3Cis6MTA4MzUwMDA5QTQzRDhCRUYzQUQ2MEIyMDlFNTM1Q0JBNzFBQUNGREEwCis6MTA4MzYwMDAyRjU1NDYzRjlGQjZGREFCODNCNDVGRTdFQjU5MDBDQzdBCis6MTA4MzcwMDBENjk2NkJDNUMxMkYyNEUyODIzNUE0Q0UxQzREN0Y1NTA1Cis6MTA4MzgwMDBGNzJEQjI0NjEzNUJCREU4MTBFQjE1MEY1QzJGRDNCQzg1Cis6MTA4MzkwMDA0RkU4M0U0QkJFQjA2RkZFREY5NTEyQzdENDM0RjNCRjNCCis6MTA4M0EwMDA1RDQ5RDQ0MEZGNUVDMDgzMDI0RjE1RjE4RDdFNjA4QTI3Cis6MTA4M0IwMDBERjVBMzVENDI2NjU0MUJFNTMxN0VFMDNGRDg2RUFBMDg5Cis6MTA4M0MwMDA4NzVBRjgwNUU0NUEwOTkzNkJDMTEyRTc3N0I3N0ZGODJCCis6MTA4M0QwMDA0MzU1QzRFMTUzQzg3RjE4ODIzNkMwN0UwOEE1MTRGMDA3Cis6MTA4M0UwMDBERjk0QUIyNzdCRUJEM0YxNkE2MDVEMTc0MjI5OEU3Mjc1Cis6MTA4M0YwMDBBMzVFNjdGNTZCODg3MUQ3RUMzMkU0M0Y4QzNGRDRCNzRFCis6MTA4NDAwMDA5RjhGNzFGNUZBOTEwNkZBNzc1NTEyMzNCMTBGMTdERDg4Cis6MTA4NDEwMDBENTlFOTU0OEQyQTYwRjZCRDUxRTBERjhBQzk2REE0NUMxCis6MTA4NDIwMDBGNkY3RUJBMzhBQzM0RkVCN0U3QUE4RTUxQzJBODE3RDgxCis6MTA4NDMwMDA5MkNDRkM0ODNBMkREQkQ2RkRBNzBFODlFN0FGMTg1OTQwCis6MTA4NDQwMDA0QjA2RjBERkFEOEYzMjdGRjAwREVERTNCMzk4REZEMDU4Cis6MTA4NDUwMDAyOTdGNEYzNzMyQkZEQ0JGM0RGNjdEMERGQ0ZDQTcxRUU4Cis6MTA4NDYwMDAzRDc2MTVDMDdCRURCRjJBQzQwN0Y5MUI4Rjg1NDkwQUVECis6MTA4NDcwMDBFREIxQTQwNkY2RDg5QTJFQzU0Q0E2Q0RBRjY4NjJGMTMwCis6MTA4NDgwMDBDRkM3QzM4OEFGMzU0RjdBOTMwQjY5RkIzNTRGQkYzM0U2Cis6MTA4NDkwMDA4NUQwRjk5RERFRDRGM0UyNjhCMDlCMUY5NTU4MUU4MjBCCis6MTA4NEEwMDBENTNERTU2QUZBN0U4RDRBNTZBNEYzMUI0Q0Y2MzBGOUE5Cis6MTA4NEIwMDA3M0YyRDk2MDE1RjBCN0I0NjdGRkY1RDg2RkU3NTI4RjQ0Cis6MTA4NEMwMDBEN0I2REYyRUY2Nzg5MDZGNjkzRDY2OTczRjIyMjVDN0I1Cis6MTA4NEQwMDA0QkU5RTZDN0YyM0Y0RTNFMjJCMUY5RURGNTI0RkQzMEZGCis6MTA4NEUwMDBCRjNEM0JCNTA0OUQ0N0VEOUUwRjUwOUVDQzdERkM4NzY0Cis6MTA4NEYwMDAxMTgwNDNFRDVFQzVBMTA3NkFGNzI4MjlFRjE0N0MxRUExCis6MTA4NTAwMDA4MzI3QzQ4REE0MTk0MDI3OUM1RUJBRDY2MUJDQThBNjU3Cis6MTA4NTEwMDA3M0VCMDdFMEM3QThEREVCOTQ2QjE0MkVCMTE0QzBGNTI0Cis6MTA4NTIwMDAwRDI1QjYxMENBNEZGRDRCQzRBMEEwN0FGRkQwQzMxMUQxCis6MTA4NTMwMDA4MDJCRUQ3N0E1OTYwNUZBQzY0OURGRDBGRkQ5OUNGRUMyCis6MTA4NTQwMDBGRDExRDI4M0YxQkFEQUNFNzYzNjVFRDc1NzdFMEY3QTM2Cis6MTA4NTUwMDBBNUQ2MjUzRkRGODc1RkYyRkJEQjMzRDc3ODVDRjZDQzBGCis6MTA4NTYwMDA5RUExQzVFQkQ2RkVGMENDNDMxNjFERjdFNDkzN0Y3OEIxCis6MTA4NTcwMDBDOEEyRjNCRkU1QUZGRkY5RDBCNzgwM0Y3RkU2RDc0MTkwCis6MTA4NTgwMDBGRUQ3M0VGQUVCMDhCMUQxNjNBRDg3RjFFM0U5QjFDNEEwCis6MTA4NTkwMDBBMjdCNTQ3MkZBMzdERTI0Rjg0QjRFRkZGNEY3RTMwQzVCCis6MTA4NUEwMDBCQUVFRDM0RkZDMjVDRkEwRjVFQjdGM0E3RjE0QzBBMUU0Cis6MTA4NUIwMDBGRUM3NzM0NzBEQjRGRjA2N0E0RDdBRURGMzRBMjI1RThCCis6MTA4NUMwMDA4REJEMTIzMzgyRjZGMUE3MEIzRjA3QkEwRThDODM3OTZCCis6MTA4NUQwMDA5RTNBRTI4RDgxREJCOTk2QkU2Qjk4MEFGODVBODdGQTBCCis6MTA4NUUwMDAxOENBMUIyODlDNkIxRURCRkMwMUM4ODlGRUYwQjY0NjJFCis6MTA4NUYwMDBDQkU4QUM0RjhEMDZBNzdENERENzNCMEIxMDZGQTQwNzgyCis6MTA4NjAwMDBGNUE4QkI3RUVENkIxNDlGMTc2NkM2REYxOUYyQjEwNkE1Cis6MTA4NjEwMDBGMkFFRjZCMTc2MzY1RTI3QzU1RkE0M0ZGRTRFQzEyRjlGCis6MTA4NjIwMDBCM0ZBRTNFRjBFMTdGRUNFOTA1QkJFOTcwRjc5OEQ1RDI4Cis6MTA4NjMwMDAyMzFDNzE1MkYxRUM4QjBGQzZCM0UyMDNDODBCMjEwRjYwCis6MTA4NjQwMDAwNjgzNkZCNUM0RTZCNUNDNjMzRUU4MDFCRTdBMzJEODg2Cis6MTA4NjUwMDA4QkRGODU4MERGMUY5RTE5NDcyODdEMUNGN0Y0NUMwRjk4Cis6MTA4NjYwMDA3MkIzRTdBNzVFN0QxNzdEQkZFNkE3NkYyMDlGOURGRUQzCis6MTA4NjcwMDBGMTJCOUE4MUY5OTkyNDI0RTVGMTNDMzFGNjczMDhFNDUxCis6MTA4NjgwMDA3MDBEREJDQjkxREFEREUxOTQzN0QyODdBNzlBRTRBMkIzCis6MTA4NjkwMDA0QTIzODJFRjhGRTFGQjI0QTNGRjlBRTRGRTI1NTIxQUJFCis6MTA4NkEwMDBCQ0JERTEyOTYyNzY0MDcyMjRDMjY1RERFRURGNjlDQzkzCis6MTA4NkIwMDBCRUVDQzNBNzU0MEVGODNDQjYwMERFNjdDMkE3NThCRjk1Cis6MTA4NkMwMDAwRUVCOUY2OUMzRUI2RUM2QjdFRUZBMzU5NDNGNDFFRkYwCis6MTA4NkQwMDBGNUMzNkY1MjdBMDM5RUE3Nzc3QTU1RDA3QkE3QzFGRTY4Cis6MTA4NkUwMDAwQUY1Qzc3QjFGRkM5OUZEMzNEQ0ZEQ0EyQjZFRkUxNjE1Cis6MTA4NkYwMDBGMTYzMEU4N0NDRjQ2MTcxM0I2MEUwRjUwRDE3N0UzRkFFCis6MTA4NzAwMDBGNzE4MEUzQTEyNzAzQ0Y5NzE3QUY5N0Y4QUNCOEQxQUZDCis6MTA4NzEwMDA2MjU1MTZEOEVDMTM5Rjg3REEyNzkwNUY0NkUyRDZFOEI5Cis6MTA4NzIwMDBDMkJFRjk5RTg0N0QwNEE1QkY5MzhGMkExOEFGNjlFRDYwCis6MTA4NzMwMDAzQzgwNzJEQzJEMkY2QTQ4RkE3REZCNUYzRENDNUVBQzNECis6MTA4NzQwMDBEOUJCN0YwQUM4QjU5M0NGM0Q4QkY0NTlGM0Q4MzEwRDBGCis6MTA4NzUwMDBGNjJGMkZFRTc5NEFFQjJFRURFMzA3RDAwRjQ5OUI3RUUzCis6MTA4NzYwMDAzOEY5QTNGRDUzOTgzQzQ4QkZGRjBENkFBQ0ZGREE3RDkyCis6MTA4NzcwMDBDRUZFNkIxRkZCQzBEMUZGNUFBQjUzNjM3OTBDMDM4RjQ2Cis6MTA4NzgwMDBGM0JFNkEyRTg1RjVCRTdGQzg0MzQwOUVCRURGQTlBNDE2Cis6MTA4NzkwMDBGNUJGRjY3MEZEMjhFMEQ0RkFDQTgyREY0MTlDQkZFQzM5Cis6MTA4N0EwMDA3MEMwMDAzRERBQjVDOTFDNzUwN0Q4NkI4NzNEMDRFNDdECis6MTA4N0IwMDAzNzUxQ0QzRjc4NjlCOUVCOTUwMEM2MzNCQTBFNUZBQjQwCis6MTA4N0MwMDAxODM2RkZDNDMzMkU3OENFN0NDRDlBMUJBNkZEQ0RFQzk3Cis6MTA4N0QwMDA4RTk3QzExNkNBMkQzN0NBOEZEMjdEQTNERDdGRjU0QTg5Cis6MTA4N0UwMDBFNTI4OTBGQkNENjBDRjRGODRGMTYyNTFGMDdGMjg5MTU2Cis6MTA4N0YwMDAwNTk1MkM3RjUwRDZGRDY5RjUzN0VCQ0YxMzhBNjNCRTA0Cis6MTA4ODAwMDBBMDQ3OTc3QjdEQjY0ODhGNjJCRkM1RkQ0REFEQTFGNEYzCis6MTA4ODEwMDBGRUU4MDU5QUQ4MTdEMDcxNkQ3MjkwREFBQTU1RTlGMDgyCis6MTA4ODIwMDAzNjRCNjM3NjQ4QTZFRjk3NkFDQ0RGOTNFOTdCQzUyMDg5Cis6MTA4ODMwMDBFRDdCRjk5QkUzNDcwQkNCRjE3NEYzOUVDNkZCNzFGQjE5Cis6MTA4ODQwMDA1NzMzQzkwMzBGRUZBNzRDMzMxQ0VCMDU3ODJGQjJFNTY0Cis6MTA4ODUwMDBDNThGMjZDOThEOTAyNzRBNDIyMTc3M0MzQUVFQjNDNzhGCis6MTA4ODYwMDBBM0FCMEVFRDg3Rjg3M0VFRDVGQkYyMDFGRTExRDJBQzhGCis6MTA4ODcwMDBCRjg3NzYzQzg5OUQxQkMwOEU3NUM3OUZERDc5ODk5OTFFCis6MTA4ODgwMDBFMkQxQkU1MENEOTExNEU5REY1RkZGRjhCQjg5NzkyOEIyCis6MTA4ODkwMDBDRDYzRTZGOTBBNkRGMUY3NjZCRDVGRkM3REJENDZDN0E1Cis6MTA4OEEwMDA2REM5ODA4NzI1REE5QzdGRDI4MEJFNjQ5MjQ4Rjc3REFGCis6MTA4OEIwMDAwQkE3OUJDQjQ5Rjc1MzJCNjE5RTMxMTZCRjlGRUQ4MkNGCis6MTA4OEMwMDBEN0E1MUM1RTNGM0I5RjJFOUNBQTlFMEE2MkE4MUUwQTRCCis6MTA4OEQwMDBERkI5NEJDQzY2MTA4MUYzOTdGN0FDREQwRjdDMjZFMjU1Cis6MTA4OEUwMDBGN0Q2NDRGOTVDNzBFOEYwMUI2RTVFQzQyQURGRTI3QkM5Cis6MTA4OEYwMDBCNTIxRTQ0NTEwM0QyN0FENUVFODlCODdDNUY3NTU1MThFCis6MTA4OTAwMDBEQzI3NzkzODlGMUQ3OEYzNjYxRkM4MkQ5NTI0MkEwQjI0Cis6MTA4OTEwMDA2MUJGQzRFMzlBOTg2RjRGRkJDQjRCRjk4OTQ5RTdBQjMyCis6MTA4OTIwMDBFOTA2REFEQjc5QTlENTBGREMwNDcxNzU3RDBDQzYyMzY1Cis6MTA4OTMwMDA5NEIzOTdBMEZGRDBEREFGMTI4RDU5OTgwRjE2MzIyQTRECis6MTA4OTQwMDAxNERCMzhBREI5MkMzRUEzRUFGMUI0NzlDM0FCQjRDNDlGCis6MTA4OTUwMDAxM0IwNUVFNUVDNjVEOEFGRUM4QjYxM0QxMjFBNUFCRUUwCis6MTA4OTYwMDBFQzc3QUU4RTIwN0M3RDE0QkUyMDFGMTE2NEIwMkU5RTRECis6MTA4OTcwMDAzNzc1RjdENTExRDQzM0ZFODM5RTlERjBERDFGNjI3OUU0Cis6MTA4OTgwMDA1NEI3Q0I4MTE4RTQ1OUI5RjNBODJBREU2QTI3RDA1RjFGCis6MTA4OTkwMDBFQjMxMDlFMzI4ODI3RTVCMEJFQkNFMDMzOTNFNDAxRUIwCis6MTA4OUEwMDBENTRCOUFDREFGOUUyOThGQ0ExRkJBMTFGM0E4RkM5RjUxCis6MTA4OUIwMDAzNjhGQ0EyQTk4MDdGNjU4NkIzNjExNzk1NTk2NDRFN0QwCis6MTA4OUMwMDBEMUNBRjNBMkZFQTNGNUE1QjlBMDlGNUFGREUyRkJDQjQ1Cis6MTA4OUQwMDA3MzREN0JEOTVBN0YwMENCM0NFRjZBQjRCN0JEMDlFQTJGCis6MTA4OUUwMDBFNzhFMjY3NTlERThDRjMzQzkzNTM2MzkxQkYxQUEwOEM1Cis6MTA4OUYwMDBFNzdGRDZDQzc3MzU0NzlFN0NENDExNUYzQUYwRTY2NkE4Cis6MTA4QTAwMDAxRkU4NkZGQUFDMkMwMkY4NTFCQTAyQkIzRDJGRDU0RUNECis6MTA4QTEwMDBFQ0ZBNDgzQzA1MURCNTE2MEYxQ0JGNTNDRjVFODQ3RTkzCis6MTA4QTIwMDA3QzUxRjZFOTQ5RDM0QzUzN0ZCRThGRDkxRjgyN0U3RDlFCis6MTA4QTMwMDBCOTI0MDk3QUM5NjcyNDFFQjgwOUU4MzkzNzE0MEIzMkZBCis6MTA4QTQwMDBCQUM0Mzg1OTVCMDhERDUzRkRENkQxNTY3QzAzQzZEQjZBCis6MTA4QTUwMDBDRUU4MDRCOTVFRDA3MUZGRjk1RkM2RTc1RjY0NjE1QzgwCis6MTA4QTYwMDAyMjQ0MzA5RTk2NzkxRDY1Qjg4RTU1OUExOUY2REFFMDQzCis6MTA4QTcwMDA5ODdCNUVGQUJDRDRCQkJENkMzRDJERjFFNTJDRUZBQzEwCis6MTA4QTgwMDBEQTE5ODcxNTc5MUFBMjdFNTA0QTE0Nzg0MTFFRTZCMjg3Cis6MTA4QTkwMDAzOEFDRUM2M0ZDRDY4NzJGQUEyQTZDRkVDRDI2QjJEQzVDCis6MTA4QUEwMDAwMjEyNTA5Nzc3RTJEMTQ2NTU0RjYyRkQxMjdGRTI3QzY5Cis6MTA4QUIwMDBBRjIzM0VEN0NERTJCQUFFNzhFMjdDRTUxNkM2REY4M0JGCis6MTA4QUMwMDBFMDRGOUNDQkQ4MEE3MUI3ODkxMDlGOEJGMkYzN0QwNkRCCis6MTA4QUQwMDA4RkQzOTkyQ0FGMjgwMzNEQjUxNTBGMUM4N0VBNjg4Q0ZFCis6MTA4QUUwMDA2MUZCQkIxQUNCNTlCRTkyNDRCODVGM0JEOTA0NzQwMkY4Cis6MTA4QUYwMDA2RTA5NDZGNzNGNjgwMkJFMDkyQjgyMkY3RTg4RTUzQjUwCis6MTA4QjAwMDAyNTU2QkVDOUZCQ0M1Q0M4MzczQ0YwRTYxQjU1QUIyOEVDCis6MTA4QjEwMDA3REI0OUEwMUU0RkZDMUQ2QTcyNzY3MjA1RTg3M0I0RTRDCis6MTA4QjIwMDBGRkY1QjI3MURCQ0MxMEVFNzcwNzVCQjc5RTYyRTMwRTA4Cis6MTA4QjMwMDA3NTFDMTE1RkVCNUI5RjBGQzc2OTM1MDYxOUE3ODM4RDA1Cis6MTA4QjQwMDAzM0Y4RkMxOTlGRENCMTdGMzVFNjJGRjgyOEZGRkJFOUVECis6MTA4QjUwMDA3QkRGRUMxRTkyNDhEMzdGMTZFNzlGMDM2RjdBNTE1RTRFCis6MTA4QjYwMDBCN0U1QjJGQzI4NEY0OUM4NjQ0RTQwNjdGRjlFRDJCQ0FGCis6MTA4QjcwMDAzOTc4REVBMUVDMDJDQzlGQkY2MzdGM0JDQTE5MERDNkRBCis6MTA4QjgwMDBBMTU1M0NCMUQwNEFENjJFNjFDMjM5REJDODNDODJGMTM2Cis6MTA4QjkwMDA2NzRGNDlERTJBNzhERjQwM0FFMjczNDAwRjk3Q0IyQ0NCCis6MTA4QkEwMDAzRkI5QTRFNDI2RTgyNzFCRjg5MkNFQTNEQ0M3RjY5REM0Cis6MTA4QkIwMDA5RTkyOEI2Rjg2RkFGQkE3QkY5RTY4MDIzODk1MzMzQTY4Cis6MTA4QkMwMDAyMDA3RjMxRDcwNkMzNThBQzRCOTlEMDFGOURFNTNFRUEwCis6MTA4QkQwMDA4QzVCMTA5RjMzRkY5M0E4NEIzMDZFNEVFNTQyODdEN0Q2Cis6MTA4QkUwMDA2NjU3NTJCRDc4MUZGMjMzMjlCM0MwREVEQkZFQjU2QjhBCis6MTA4QkYwMDA2Mzc2N0VGRTY3MkRGRTFENTY1RkU0NkIwOTNFNEY5RjM4Cis6MTA4QzAwMDAzN0Q3OUEyQkYyRTYxMjNFQTUwQ0NFMjlGNUU2NTMyRjY0Cis6MTA4QzEwMDBDQ0I3RTc3RkYxN0NFQTkwQzhBN0U2RjFDQzBFRkE1RjBCCis6MTA4QzIwMDBCQUZDMzlGNzM5QzZDRjJCOUZGQTI5MkZERjBGMDdDOUI2Cis6MTA4QzMwMDA1OEM4QTdGRTg5ODdDNDUyOTAxN0YzNkIyNTA2NzkzMTZGCis6MTA4QzQwMDA2RUZBNzBGN0U3M0UwN0QwNkI4RjY0RTBFN0Y3MDEzODA0Cis6MTA4QzUwMDAzNkI5OTc5RjcwRTFFRDQ2M0ZDNkU3QzQ3OENGODM3Qzc1Cis6MTA4QzYwMDAyQTFEOUM0RjQ3NTczQkZCMTk1QkU3M0M5Rjc1NUU4MzcyCis6MTA4QzcwMDAzMzVFNTU2ODE1MzhFQTlGREY1NkU0RjgzRUJFRTMwMkRFCis6MTA4QzgwMDBDN0Y3ODlGNzRGNzU5NDI3MjUyRjc2RDRGRkQyOUUzOUUxCis6MTA4QzkwMDA4RUYyRTRDRTJCMURGNTJGRENCQkQ4NTFCRTI4QjVDQzBGCis6MTA4Q0EwMDA1MTdGREFDMTFCMUNERkE3MUY1QUUzRjgzRUYzQzg3QUQ1Cis6MTA4Q0IwMDA0Nzc5NTZGNzM3MURGNTFCQTg3OTAyRjkyQzcwNDAwMDRCCis6MTA4Q0MwMDBGN0FCREI0NkNCNzZGQTZDQ0ZBNjdBMjUwQkYzQjgzNTNCCis6MTA4Q0QwMDA5RUQ0OEZGMTY2OTY4QkRDOTc2N0UwNkVBNzE0NkJBNjI3Cis6MTA4Q0UwMDA0RUY5NTczMTI2Q0NEMzMxQ0ZGMDQ2RTQyM0E1Mzg2RjY3Cis6MTA4Q0YwMDA4RTgxRUY2NzJDMDBCRjEzMjk2M0U3QjQ0NEZDREE1MzdECis6MTA4RDAwMDA0QzUyN0VDOEVGMEJCOUYwRUI4QTRCN0I5NDZEMjlDMEI3Cis6MTA4RDEwMDBCMzc2RjRDQjA3QTU0ODdGQkM3QUEyRUU3Q0M2QTFDNThBCis6MTA4RDIwMDBCNTU1RTNCM0U1MDdFNEY5Mzg1RjhDQTU3QzgxN0VDNEQzCis6MTA4RDMwMDA4RjE1RDhCNzkwNzk2MUI0MEY2Q0ZCMUI4NEEzRDhERjczCis6MTA4RDQwMDA1Q0U2MjNDRDAwNTNDMTE3MTVDQjdCNDZCRjgwRDVDNDRECis6MTA4RDUwMDBCRUM2MkIwRjI3MkZCOUJGNUVGMUEyREQyNUU0Q0M2MDg0Cis6MTA4RDYwMDA3QTQ1NDk0RTczRTQyMUI4OUY1NEZFOTVGOTYwOUYxRUUxCis6MTA4RDcwMDA1OTg2RjJBODc3NUZEMDJCMUZFMzMzRTFCQjQ3OERBMTYzCis6MTA4RDgwMDA3Q0VDOTU3RjdCMEExQzcyNjFBOEY2OTk1QjRFREYwNTJGCis6MTA4RDkwMDA0MjFGQ0YwNUE1OTdENzExQzgwQkEzNzJFOUNFQUJBRjgxCis6MTA4REEwMDBDMjM4MThBOTI3OEVGMzgwNzk1NTcxMUZFODNENkE5NzVDCis6MTA4REIwMDA3REM1NjdEQjNGNDdDQTk5N0RGNkY3NjZBNzg2NjBCRDJDCis6MTA4REMwMDAzNkY5MjdFQzU1MDFENzExODU3NTcxOENFQjg1NjUwMjU1Cis6MTA4REQwMDBGQkFBQTZEOUIxMjhGODAxREJBMDhBNkQ5RkY2NURERjVBCis6MTA4REUwMDBGOTU4QkYzOUE0QzlFMDJGNkQzRTM4MUZFMzAzNUU3RkY5Cis6MTA4REYwMDBEQzA3NzlDRTREOUU3ODI1QUNBQjI5NUJENkQzRTUzQjFECis6MTA4RTAwMDA2REY2MzFGRjhDRDYxMDlDQjY3QjAwRkFEMDM0QkFFRkU5Cis6MTA4RTEwMDA0RkIzREU3RkYxMzFCRjRCQjNCRUY4MjBFOEI5OUNCMDUxCis6MTA4RTIwMDA2NjQwRkU0NEVCRkU1OThCMzA1Rjc3QTFBQUMzQkU5NjI1Cis6MTA4RTMwMDBEMDREREMzQkI2QjgyMjIxNzFGNDY3NjlCOTMyRUE0NUZFCis6MTA4RTQwMDBBRDIxODJFMzBGMzZERjVCN0RDQ0NGRTA2REYwMEYzOEQ0Cis6MTA4RTUwMDA1RkFGOTZERTRGOTE2OUJFOUI2MUJFQjk4M0NGRDcwQkUyCis6MTA4RTYwMDBGMzk1NjBGQzEwOEVCRkM5QzdGMEU4ODZCRjg3OTg2RDg4Cis6MTA4RTcwMDBGMzY4QkQ5NjYzNUZFRTI4NDY4QTYxRjk3QUY3MkU5QzA3Cis6MTA4RTgwMDA4QTc0NEEwNUI1ODM3RUM1M0U4MkQyRUZDMzQwQkY2Mjc1Cis6MTA4RTkwMDBGRjJFQ0VCM0RFRTI2Mzc5MDkwMkFGQzQ2MEZFODgxMTEzCis6MTA4RUEwMDAwOTE1RjdCRDM5MDlCNkZGRUQ5MzFGOEM4RTcyM0MzMTYxCis6MTA4RUIwMDA4MkU3QkZDNkE4MTg5NzA0Mzc4REREOEZBMUY4RDlCRTA5Cis6MTA4RUMwMDBDNzdCNjkwQ0YxRDVGRTE1OTU2QzAyN0EyQkE2RUI4MTU4Cis6MTA4RUQwMDA3M0I5MDc1OURDQTlERDEzQUI4QTg3RkFDNjEzRURERjM2Cis6MTA4RUUwMDBFMUZCNDA5NTJDQzlDMjdCNTI5NDg1RDE3NEY2NjcyRjYzCis6MTA4RUYwMDA5RDczQjhCOUU1RUMwMTFGQ0ZDM0NBMjdGOTRDQ0U5NkQ0Cis6MTA4RjAwMDAyRTg1QTM0NDk5RkE3MURCMUIwRERDQUYzQ0ZDRjMyOUUxCis6MTA4RjEwMDAxRDA4Q0ZGNjMxRjdBMTFEMkRGQzYzMjQ1QTM2ODhCRkZBCis6MTA4RjIwMDA4N0M1NEJGQkYwQkNENDQ4NTEzQ0FBNTc0QzQ1QTc1RkMyCis6MTA4RjMwMDA3QjMxQzc3MzlEMkI5Rjk3RTM1OUUwNTdGOEVENDkzNDc4Cis6MTA4RjQwMDAxN0Y5NUFFMDVCMDE3ODAyQUU5NEQ5RDE4MUY0OTVDMjQ5Cis6MTA4RjUwMDBGOUM2MERDRjUzRkY0REUxNzkwNEQ2MDA3NDNCOTZBRUIwCis6MTA4RjYwMDAxRkY4RTZDMDE1MDRFMzYwMkU3RTE0RUQwNEREQkJEN0M4Cis6MTA4RjcwMDAxRkY2RkZGNzVFQkZBMDg3Q0NGNUFEQjRGQjBGMTFENzhFCis6MTA4RjgwMDAwRDczN0FGMzcxQkRGOTQyRjlEQjZENzA5RTQ0Q0Q2NUM2Cis6MTA4RjkwMDBGQkRENzA3OUYzQUQzMjlDQzMyMDk2MEVGRUI1QjAzODgwCis6MTA4RkEwMDBCRjUzRTZCQzdGMjQ1MEVBREM3RkY4NUNGNzRENzhGOENECis6MTA4RkIwMDBGRUEzREZGRDJBRENDRTEyRTdGOURERjM3N0UzNkJBRTJCCis6MTA4RkMwMDAzRjdEMUUyNjE5OTNERUVGRUE4RUM3ODlGODg2Qzg4Mzk3Cis6MTA4RkQwMDAxNTcxMDA4NDAzNURCRjY3OTYxQzQ3Rjk1NzQ2Q0M5RDA5Cis6MTA4RkUwMDA2OUU0RDMzMjNGRDMwQjVEQ0ZGOTMxNEYyMjVDQTVBMUE5Cis6MTA4RkYwMDAzRkI2QTAyQzU1MDFFNTgyM0ExMjAzM0Q3MUYxRjE0M0QxCis6MTA5MDAwMDAyNDQxM0JCRDIwQzBFNDdFNDE1OTUyMDJCRjQ3QzE0OUMzCis6MTA5MDEwMDA5NjE3Qjg5REM3MkIwQkVBOTNEMjRBREIzODk2OUZFOTg3Cis6MTA5MDIwMDBBRDhGREVCQzFERTVFMzczNjM1OTVFRkE2RDE1Q0M3RTMyCis6MTA5MDMwMDAzQjE0QkRBMUEzMDJDNjJENjdGOUU0NjFCQTVGODRCQ0VECis6MTA5MDQwMDBCMUYwMTE2RjEyRURBREIyNkUwMjdFNTRBQTA1QUMzMEQ0Cis6MTA5MDUwMDBGRDdFQkM5MTRDQkQ3MTNDRTQ3REY5RjA3OUIyNTFDNzA1Cis6MTA5MDYwMDBFNzgxQjFEQUZFQ0I2OUJERjU4NTAxMDNGQTZEMjkwQTA2Cis6MTA5MDcwMDBCMEYzQkQ2MTFGRUVGN0ZGOUNGRDc1RjRBQjlFNkU4Q0U3Cis6MTA5MDgwMDA2MkZEQjY2RjlCNjg1NzM0RUYzRjgxN0VDM0EwMzkyREQ4Cis6MTA5MDkwMDBDNkZDQThBNjQyQ0E2MTNFODc0Q0YwNzMxMDM1NjYyQzA4Cis6MTA5MEEwMDA4NkVGMDc3RTgzRjUxNDJERjExQjBCRUM5MzY1MUFFRTBBCis6MTA5MEIwMDBFRjAxMEUxMDRGNjhGMkIzN0NCOUNERkVCQTY4MzYzQ0IyCis6MTA5MEMwMDAwQkM5OEE0NTY5RTBCRDgyRUIxRDRBNTE4QTk2RDc5NzQ0Cis6MTA5MEQwMDA4N0E0OTVBNzk0MkNGMDI3OTc5MTRFQzg3M0Y3QjQyNEQyCis6MTA5MEUwMDAyQjQwNEY5M0Q1QkEwMUUzOENGMTI1MkJDMDdGM0NBNkQyCis6MTA5MEYwMDA1QThGODEwRjVEMkI2N0U3NDUwNDNFM0M3RTEyN0YyMjJECis6MTA5MTAwMDAwNEY1NTJEMkFENzREQzg5MDExREM3MjkzODkyQzRCQzY0Cis6MTA5MTEwMDBFNThGREU5Qzk5RDZGRUJGRkQ2ODA1N0VERkQ2NTg3OUM3Cis6MTA5MTIwMDA3ODlFOEQ5RjQzMTlFMjk1MUI4QkU3M0NFMEE3RTNCRDNBCis6MTA5MTMwMDBFQTY3RkM5QUE5NUZGMTFDNkFCRkFGNzIzQTM5RjBFNkEwCis6MTA5MTQwMDBDNDUxNjA1RjM2NjRDOEEzNTY3NDhBQTcxMTRDM0U4MTJGCis6MTA5MTUwMDAzRjYyRkQ3ODYzNTQ3NkM4REUwRjgzODdGMkRDQjMwQzgwCis6MTA5MTYwMDBBRkE1OEMzRTlCN0UzQzMxMEJGQTdERkVDREE1M0FGODM3Cis6MTA5MTcwMDBGQkZFOTQ1QjhDRkI4NjUzNEY3QjREQjA1RjRFRTU5MEJFCis6MTA5MTgwMDA2QUNDQjc3QzdBRTY4QkIwM0ZGQzQzRTNDMTFDRDUyNkEyCis6MTA5MTkwMDAxNzRGRkRFODk1MTkxRURBREZBOTI3NUY5OUExMjI3MzAxCis6MTA5MUEwMDAyNTFENzZFQ0JBNzNBRkNFMDAzQkMxOUE0MzRBRUFFODdDCis6MTA5MUIwMDBCMzU2RDcwOEY0NUJFQjYzRUIxMDc5NzJEQkYzQjQ1NjZDCis6MTA5MUMwMDA3ODVFMTlDQ0M2RjY3OUEzRTQzQkExQUNGODVFMURGNzM2Cis6MTA5MUQwMDBFRTM0NUMzNzhCMkJGMDM4MEU1RDVGNTMwOEU5NUFBN0VECis6MTA5MUUwMDAxQjEwODgxNzVBREU3MTEwQ0Y3QUQzOEJGNEY3NTEyMUY4Cis6MTA5MUYwMDAyOTI5QkMxMEZDODIwQUI2RUI1OTREOTI5MDRGQTFBNUNCCis6MTA5MjAwMDBFQTgwM0Q4OUZGRTUyNDAxQkUwOUJFQTZFRjQ3NUFFMzg3Cis6MTA5MjEwMDBGN0MxRERFOUU3RjkwRjNDOEY3MEUzOUJCNzRGMDRGODI2Cis6MTA5MjIwMDAwOEI5QUVDRTI1MThDRkU4Rjk5QTJGMDlGNkU4M0RBQTdECis6MTA5MjMwMDBGMTlERTU2MDA3NUVBN0UyM0M2ODE5Q0YxQkI5RjFCMzY5Cis6MTA5MjQwMDAzQzU4RTQ4OEUzRTVGMEY4ODRDMDZCMjYzQUQ5REE0ODY0Cis6MTA5MjUwMDA2MkM1MTRERTNGNkJGNEM1NjBGQzdEOEQzQTk2N0ZEMjBCCis6MTA5MjYwMDAxOEM1RjJERTQ2MDM5RjRGMzc5NkUwQjNBQjMxODZERjc5Cis6MTA5MjcwMDBGNzM0OTZFMzUzRTRGNUUxRDY1RTQxN0IzQTVFMDE3QTNBCis6MTA5MjgwMDBFODFBRTY4N0QzMEREOTg0N0M4NTJDOTVGOEUwQkUyNkI0Cis6MTA5MjkwMDBGREU4QkY1NUMxN0UxQkU0NEE1NjBFRjJCRDA0RUQ3M0Q2Cis6MTA5MkEwMDA3OTlFREZDOEZDMzlFRDE1NDY5RjdDMTVGMkI0Qzk0M0ExCis6MTA5MkIwMDAyNDkwNDdENjJDRTY2NzA4NDM3RkI0N0RFRTEyNDJERTQ5Cis6MTA5MkMwMDBCNkM5RjU3M0Y0OUZCNzRCRjhGQUU4N0NCMjRDRTc3NzcwCis6MTA5MkQwMDA3N0ZEODg0QTE3OTBEM0JGMUQ5NThCNThFRUVCMzczRDJECis6MTA5MkUwMDBGQzg2RkIwNDdGRjlEQjM2RkFERTNFOURBRTlBRDJEMUQ2Cis6MTA5MkYwMDA3Njg5QzlCMTNCRjlGNzNCQTZDRkM4QkEwMUNBQjM2NkI0Cis6MTA5MzAwMDA2NDgxNUNERjNFOEIxODNBODVFMzVEODY2Qzc5QjJGQTQ2Cis6MTA5MzEwMDBFQUVGNjgzQzk4Mzc2RjNDRDc0MTIwQTdFQUY1OUQ1QkEwCis6MTA5MzIwMDA2Q0ZCOTgzMTE2NTkxMUI3RDFDQjVENzU2QUU1MkVCNDM3Cis6MTA5MzMwMDAzMzEyRjk4QjI3NjNCRTMxRjc2QkVGOUU2NzhFQzE3RUM4Cis6MTA5MzQwMDBCMTNDMjFGMEUyM0M4QkVCMTU5MDMzOTc5RDY1N0FBOEY4Cis6MTA5MzUwMDA1N0ZGN0NDQ0RFMEJCREE3NzFGQzZGOUJCRDQ5ODkwMDFDCis6MTA5MzYwMDA5RjgwM0MwNTc5NTk5NjIwNzNFODNDNDM5N0IyRjhGNzAzCis6MTA5MzcwMDBBQzc3NTMwNEYyRkJCNDE4N0QwRkY2QThDNkYyNEQwQTgxCis6MTA5MzgwMDBBMjQ5MDlDQTNGRjJDNzY3MDYyMEVGM0RFN0ZFRDQyRTg3Cis6MTA5MzkwMDA4QUVGMEZCQkJDMDZDNDFCQkI5RUZCMEJFNjY3Mjg1M0MyCis6MTA5M0EwMDAzNDFGRjA3N0MxQkU2Mzk4QjdBNEM4REQxQUVDNzg5Nzc0Cis6MTA5M0IwMDAwNTI2Q0Y1N0MxOUU4NTg5NjA3QzgwMkE2QThBNjcyNUU5Cis6MTA5M0MwMDA4RkFGOEYzQ0Q1MzIyRjA0RTdCRTEyMjdFQ0Y1QjcwN0RECis6MTA5M0QwMDAxMkI3QjIxRDMzMzE3RDUxQ0EwRjdFRDFGRTgyMTY4MDg1Cis6MTA5M0UwMDBDNzU2MEYyQjJGMEI0QzZBQjFCMDRDRUI2N0IzNzIzM0RGCis6MTA5M0YwMDA2REJGMzVCQjMzMkE2NzQzRDJENEM0OTY4Mzk3NDI1OTk1Cis6MTA5NDAwMDBENDlGRDg2MkNEMjZFNDFBQUUwRjQ4Mjg1MTA4RkNERTVFCis6MTA5NDEwMDA1QkQ2NjkzOTZDMkJBQkFDNEM3Q0VDMjlENkJCRUVDMDZGCis6MTA5NDIwMDA1RjVFMUM0REUxNTBCMzRGRUFDNDEwREZCRTlEMTJBQzJECis6MTA5NDMwMDBCQjYwRUY0RTk0QUYwNTQ5ODJGQkZFODJBNDk0ODRBM0U3Cis6MTA5NDQwMDA5RDdCMUEwRkVBQ0RDMkI5MjZGMDQyNDVDM0E0MjhCQkMyCis6MTA5NDUwMDA1RjQ4NEI3QTYyQjBCRDlDQzRFRjBGMTE3NEYxNzQ5MEY5Cis6MTA5NDYwMDBFOUM3NDk0OURBREUxRTk3NzZERDI3MzI4OURGNTc4MzVGCis6MTA5NDcwMDAyMDA1NzlCOThEOUQwNzc2RDM3OTI5RUZBRjgxNTg1QkE3Cis6MTA5NDgwMDBFMDNDMkU3OUNDQTM2MzdDOUNGQkQ5NEYwQUJCODlGQkMzCis6MTA5NDkwMDA3MzZFRTEwRTNDQ0YyNjJCNzAwMUM4QkY5NTJBRkE4MTZFCis6MTA5NEEwMDBENzE2MjYzNzUyMUI4QUFDN0RCNjMwNDYyRDU2RDJFMkVGCis6MTA5NEIwMDA2N0Y0QjIzNkJCMzM2RjJBQzU2NzRCQjZCM0RDQzRGMzZGCis6MTA5NEMwMDBFN0EzRDk1NjM2OUNEN0FERDk3QkY3MzhDOEVGQTkyMTg5Cis6MTA5NEQwMDAxREQ3N0YxM0U2RkIzMjhCODc5RkQ4M0YyQkVCMTI1QUE5Cis6MTA5NEUwMDA1RUY3MzI4QjYzQUNFQjdBNDUwM0ZBQkUyN0MwRjM4RThFCis6MTA5NEYwMDBCQTJFQkExMkQ2NTdCMzREMjY3MjIxRTM0QjczMjI5RDcyCis6MTA5NTAwMDBBRUQ5NzEwMTlDQUM3QjdFRUI1QkYzRkQ2MzA5NzlBNDYyCis6MTA5NTEwMDBDOEQ0RTU4QjA4RTkwRTlFNjhGMTUxRkMzRkEyRTk5MzlGCis6MTA5NTIwMDA4MDNFQkE4MzNEMkQ0MDVGNkI2N0M5OUM5RTdBNUUzMDVBCis6MTA5NTMwMDA1NTlFRkY1ODAwRTM1Q0RFMDI3MTk2RERDQjJBQUYwNDM2Cis6MTA5NTQwMDA3MzJCNEY2NkZDNEIwOTEyRTNEQTRBNzZCMzBGRUNGOTQyCis6MTA5NTUwMDAzRkI2Qzg2ODNGODM4Qjc0MDM4NTdCQjE0QTBFQUFGNDdCCis6MTA5NTYwMDBCOTVEQTNGODA0M0U2QjU1NTExRUQyRjc2RDFFQzQ0Qjc2Cis6MTA5NTcwMDAwN0RFMzM0MkRBRDgzRDJERTNGNzc5NTc4MjlENUQ1Q0YzCis6MTA5NTgwMDA2N0FFNDY3QjVCMkY0NTNGQzAzOEQyRkI4Mzc5MTJFNzNECis6MTA5NTkwMDAxMTI2N0YyN0VBQTQ0MkE1RjU2NjA1MEIxMTdGQzU1NTY0Cis6MTA5NUEwMDBEN0FFODU3NjRBNzg0OTAwRjgzRDRGNDk1QUQ4RkY3N0JCCis6MTA5NUIwMDA5OTFDREUyRTI3M0I3RDIwOTcyMzQ1ODhERkVEMTE0NjQxCis6MTA5NUMwMDAxN0Q2M0RBNTQ4MTdCQkU1MzkxNzgwNURENDIyQUREQzIxCis6MTA5NUQwMDBGMjBCQzA2Qjc2MTE5RTdCODVGN0VCNjFGRDFDOUY0REY2Cis6MTA5NUUwMDA3QUNDMDdGOERCQ0RGMUE5RUM5NDJEQzhENzE0RUZCN0VFCis6MTA5NUYwMDA0QTM3QUMwNkI4OUVEODUyM0ZERjQ3RTE5QUU3MzVEQkUxCis6MTA5NjAwMDA0NjUwM0MxQ0RGNTJERjEyOUQ4NTc4MjhGMkQxRUZDNzBGCis6MTA5NjEwMDAwM0Y1MkQzRThBOTdERDFCQ0QwMkRENTY5RUY4MDk5NTk4Cis6MTA5NjIwMDBFQTQ4QjRGNTJERTY2Q0YwOUZEQ0I3MDY5NDEwRkRGRTE5Cis6MTA5NjMwMDAwMkY4M0YxRUM5MTE3Q0NGQkUxNzE3RjVDQTExMTNFQ0YzCis6MTA5NjQwMDBEMjI2QUI0RkFFRjhBODVFMjhCNkQ1OUY0N0U1QzIwRjJECis6MTA5NjUwMDAxRTUyMTBBRkZGNEVDNzAzMzk0MUQ3NjEwMURERjc0Q0YxCis6MTA5NjYwMDA1MkQxMkUwOEQwQjkwNDY4MzkzMEI5MDhGMzZERTlCQTdGCis6MTA5NjcwMDA0OTAwRUM4NkM5MkFFQTc5MTFDN0QxMjZDOTY4Mzc0MzVGCis6MTA5NjgwMDA3REEwODc0MDdFMTFFNkNGNTE3OTFEODc3MzNFNEE5NEI1Cis6MTA5NjkwMDBDNTc1MTQ2NTg3NDk3OTk4MDQ3OUZFQkVBNDJGQzJGQjZECis6MTA5NkEwMDA0OEZDMjVCNkJDMDI5MEJGQUUzQzA0QzU1NTFFRUZFRDhDCis6MTA5NkIwMDBDRTk3QTk3RUNEM0RCQTQ4MUE0N0YxRjI1RTgwRUY4Qjc2Cis6MTA5NkMwMDA3MkU5M0U5NkJFN0YzRkMwRkM0MEI3QzdBRDJGNDNCRTk4Cis6MTA5NkQwMDAwQzMxQkFGMzU5M0MyQTNFMTU5RUEzQUUyQjFFMzU5MDkxCis6MTA5NkUwMDBGRkE1RkY3RTM1ODZGNkNCQkQ2M0Q0QjRGOTYwRkYxQUMzCis6MTA5NkYwMDA2NEZFNDFFRkQ4NjJCQzU3QTM4MTUwRkUwN0JFMDhGMTVCCis6MTA5NzAwMDBGQkYyQjhGQ0YwNzA3QkMxN0Q0RTQwQzgxMzRGMzY1QjU2Cis6MTA5NzEwMDA2MzdERkJEQzUxMzlBMUJFNzM3MDRBQzhGNDgxM0NEODJCCis6MTA5NzIwMDBBRjRGQ0QwMjdCNzQzQzk3NTNDREE5NTk1RjA1QkI0NTI0Cis6MTA5NzMwMDBFNUYyNjA4NzlGOURDQkVEQzkyNjlEQkIwOEQ4QkYzMTYwCis6MTA5NzQwMDA2MkNGNEIxMEYyNjA1QkEzMEY5RjBGNUYzNjAxRTM5NzcwCis6MTA5NzUwMDAwRjVGOTYzNzA3RTIxNTA3MkU3RTFGRjdCRjY3NzYzMDNCCis6MTA5NzYwMDBGRTNENzNFODA1Qjg0Qjg5OUNCMUE4QjYzMTE4NTlBMUU0Cis6MTA5NzcwMDA1RjNFNzUyRkRFMTdGMjdEMzU3RTE3RTZDQjQzQkUwRUJBCis6MTA5NzgwMDA5REQyNUREOUNFM0NDQzQ3Mzk1Q0NFMDU3OERFODA4NzUyCis6MTA5NzkwMDA3RDE3Rjc3OEE4NjdCRjg0N0VFMDZEN0MzREJFQzQzQzMyCis6MTA5N0EwMDBEQzU3ODIxQjBGQ0UxREZCNDkwN0RFQzcyNEUwRTBCRTVECis6MTA5N0IwMDBCRjQzM0QzQjg1RjlFQjAzNkM1RjJBRjI5N0RDNzk0QUE2Cis6MTA5N0MwMDA2MjNFRkI4MjE5RUUzMzc2RTE0M0Y4MzUwNDFFNDRGQjFBCis6MTA5N0QwMDA3QUM5MUNBNTBGNDAzN0I1NjcxNTkyQjRFNTg1RjQ5RDhECis6MTA5N0UwMDBEQkQwRjBGRDY5MzhFRjkyMDVGN0FGMjQzQTJFMjkwNDVCCis6MTA5N0YwMDAzRTQ4QTI5REU4MEYzNTNCRUU3MTI1NTFCNUM3N0VCRUIwCis6MTA5ODAwMDAyNEU4M0FFRkUyRTYxN0I4M0YxOEY0QjQ2NjBDN0NBRUYxCis6MTA5ODEwMDBFNTdEQkFDRDE1NzlCOTk4QTdBRTkyMDdDMEFFM0QxNUQyCis6MTA5ODIwMDA3QzZCMDZGOEUzNkFBOTk4MDA1NzM5NTEyRDNDNEY3QUIyCis6MTA5ODMwMDA5QUVGNEJENDdEQjdFMjc5MUUzMTNGRTE4RjEzRTU5QTYxCis6MTA5ODQwMDBCRDhCRDA0RjU3QkIzQjg0RTc3OTZBOTI0QzBFQUVGMzg5Cis6MTA5ODUwMDA1OTA3QkRCMjNERUZENjRDNDFCRUFENjcyRkVCNkYzQzEzCis6MTA5ODYwMDBFMDgwRDJDNzg3N0E3NTNFQUMzRkQ4NzBGRTRDMzg2NzJGCis6MTA5ODcwMDA5MjI3RDc5RDM3MEVFMEEzMzIzQ0MwN0VGOUM5MTA5RUQ3Cis6MTA5ODgwMDBEMzU1QkRCNkZCNTNERkUyRkJFMzY1REMxRTA5MTI0QjhCCis6MTA5ODkwMDAwNjc4MkE4MTU4Mzc2MTY3MTY0RDk1REE0NzRBQUZEQzVBCis6MTA5OEEwMDA5QkRDMDJGQ0IwREQ2NTZGNkQwRkIwNzI2QjcwNzI0QkFDCis6MTA5OEIwMDA3MzI5RUE2Nzk0OEJDQjAyM0Y0MzdCQThDNTJGQ0FDRjlECis6MTA5OEMwMDBBMjlDRENBRUIxRkIzQUFDQTdCRDA2RTgzRERBMUVDRkU4Cis6MTA5OEQwMDBBNzVCQ0I0QTUwN0YyODQ1QTQwMEUwMzYwRjFDMkQyMDAzCis6MTA5OEUwMDBGRjlFRjZFRTAyM0ZDMzhGRkM4OTZCMDIzNkI4OUQwQURECis6MTA5OEYwMDAxRjE5MDdGQkNBMzRGRDU5OEVGRUM2MERBRjNGM0E3RUQ1Cis6MTA5OTAwMDAxN0UwNDE3QzlGMTdCOTFGRkJBN0VERDBERjQxQzYxQ0I0Cis6MTA5OTEwMDA3QThCREFCQTI0RUY2OTJGOUUzM0RDRTE3MURBREJFMjZECis6MTA5OTIwMDBGOTIwRTdDQjM2RDdCRDFEQkU0NEIzMDk5QjczQzE5RjU5Cis6MTA5OTMwMDBFRTdCOTYwNUJGQUE2NzI3MzlGMkE0QzYwNzU5M0M1QkEwCis6MTA5OTQwMDA1NTRENzA1NUQyRUZBNUVDN0I4MEQxNDExQkNGQzdDOUQ3Cis6MTA5OTUwMDAzQzRFNEU4NjcxOUM3MUJCRkVFM0NDRTA3MjgyRjA3RDgyCis6MTA5OTYwMDBBQ0FBRjdERUNCMzk0MEZFQUIzQkJFRTg5NjZGQkQ0RkVECis6MTA5OTcwMDAyRURGRjIzOTNEQzdBNUM0QjM0MTVBNUU5M0VDNUMxMEFCCis6MTA5OTgwMDA2MEZDMzkwNUY4NzMzNUE3RDM5MjNENzczRjA3NkFGRDMwCis6MTA5OTkwMDAzMTlGRjk2N0Q4MzdBQ0YyOTkxNzA0QTcwRjlGN0ZCQUE4Cis6MTA5OUEwMDA4MzYyM0RGREU0MTdCM0NCQUE5OTlENUJERjNFRUQ0QTkwCis6MTA5OUIwMDAyOEQ3REY1MUE0NUI2OUUyNDVFMjU5N0QzNkU4OTA1RjI0Cis6MTA5OUMwMDBGNzcwN0Y1MUI1NkFBMTFDQUIzRTFCQzFFRjlGREY3OERBCis6MTA5OUQwMDA3RUM3NzlCNkZFRTM4NUYwQkIxOEVGMTY5NzdDM0U3MDI0Cis6MTA5OUUwMDBGMTRCREJDQjI5MURENzNGRTE5MUJEQjY3MUVBOUZFMDdBCis6MTA5OUYwMDBFNzgwRkM1NDVFM0JGOUREMDQ3RTU3MEI0OTZGOUUyMkU1Cis6MTA5QTAwMDBDODg3QkIzNDUxNTY1QUMxMkU3QUM0MkUxRkNBQzE2RUE0Cis6MTA5QTEwMDBFQjZCMEZGNzE2REUxNUUwRjVBRDYwRkFGQTQxNTdGRDc2Cis6MTA5QTIwMDAyMkQxN0YyRUQ2NzdDRjQ3QzgxRjI4ODM5REE2N0VFMkZFCis6MTA5QTMwMDAxNUYzNDNGOTc1QjdFQ0VBMkY0NzhDM0YwNkZCMTNGNjk1Cis6MTA5QTQwMDBGQUI3MDNFMzVGODQzQjI1RUVDQTRFNTY4QzY2RkUxREQzCis6MTA5QTUwMDAwM0VDODBFRkFCQjE4MEZEM0VBQzZGNzM3QUFEM0U3QjIzCis6MTA5QTYwMDBCRTAzREY3RDcwOUZFMDc4RkZGQkM2QTgyMzVGRkZFNkEzCis6MTA5QTcwMDA0NDNEOUVEM0Y4NzY4MEQxNjUzNUI1RThCMUREOEVEMTExCis6MTA5QTgwMDA4RTNDRkQ3RkNDRTNEM0NFRTM5MjBDRjNCOEVDNkYzQzdECis6MTA5QTkwMDA4RjQyMDc3RkY2Q0RBM0Q4RjFGRUQzQ0U2MzFGRjcwQjFECis6MTA5QUEwMDAzRkM3OUZGMzc1NzYyRkMwN0M0MzQyQkZGNTdDNUFEN0UyCis6MTA5QUIwMDA0RjY5RkRDQkY0RTlBM0NGRjkyQUIxNDI3OENGNkQ5MjdCCis6MTA5QUMwMDBERDYzNDZDQkUwMEZGOEVBMjdCN0JEN0IzOURFMEI2RENGCis6MTA5QUQwMDA2MjNFOEU1N0U0RTNGMDczMUU5QkM3MEM3QzVGOTFGQkU0Cis6MTA5QUUwMDBFRjNCQjhCRjA3MzNEQ0QzREExODYyRkJFRUJCMkZCQzA5Cis6MTA5QUYwMDA4QTYwRkU3QTI4ODE3MTgyRkRGOTBCQTI2MEE3N0ZFNzU4Cis6MTA5QjAwMDBDMjFBN0MzNkU3Q0Y4ODgyM0M2QTBBN0ZERDkxNkY0RUFECis6MTA5QjEwMDBGNzA4NjlDRkMxRkU5MUY3NEJDRTdFNTlCNjlGNDdEOTYyCis6MTA5QjIwMDAwQ0U3NTFEMkQ0MTc3MUIxQ0RCRTNBQ0MwM0ZGQTJENjA3Cis6MTA5QjMwMDBGQkUwMTdCNERFNEJDMzhDREUzNkZCMTIxODE3NkM4REJFCis6MTA5QjQwMDA3RTMxRjM3RjI2QzRDNkI5RkJDMkNCMDg5QkVGNjUyOUUzCis6MTA5QjUwMDAxNkY3RDEwQ0ZCNzk2MEYxREMxRjlFMTE4NTc1MzY2NTE3Cis6MTA5QjYwMDAyRjg4MDIzRDM3NjdDRjcwQUM0N0M5QjA5RTU1NjEwNjVDCis6MTA5QjcwMDBBN0NERkExN0JCOUVDMzlGNzkzRDBCRDJFNkMxQUFCOTA4Cis6MTA5QjgwMDBFOUVGMTc2QjE3Nzg4QTI2OTBDRUJFQTg3NTlERkExQjUxCis6MTA5QjkwMDBBRjZCMTRDNzU3NzU4OEY5MEQzNjFCOEM4RjgyNEFGQzQyCis6MTA5QkEwMDA1Nzg1RDJFMDdDMzhEOERGMUQyMUM1ODYzQzk0M0NCQzZCCis6MTA5QkIwMDBERjcyNzg2NUUyREY2NTlFRTQ0ODk4RDc5MTQ2QjY3RjBDCis6MTA5QkMwMDA3RTlEREYyN0Y1REJFQUE2MzBGQUI1NURFMzZDMUVCM0I4Cis6MTA5QkQwMDAyQjNDOTA5RkUzN0Y1NjNCQ0ZBNzBGMjYzNzVBNDIyQzUyCis6MTA5QkUwMDA1RUYzQjU4NEIzREREMkFBNjBEQUZCNEQyOEZDRUUyQTIxCis6MTA5QkYwMDAyQ0VDODM2NzNGRkM3RkNFNzBDQjQ0OEZDMzg1NUI2QkJGCis6MTA5QzAwMDA3NDc4NzAxQjhDMEZBQUUxOTI5QkU5ODNDMzRERDA1QkUzCis6MTA5QzEwMDBBNjdFRkU3RkExQjMwNzg3MEUyRkE0QUZCRjE1QkNGRUEzCis6MTA5QzIwMDA1RUU5RUIxOTgwRDcxMEY4RjIxRkYwM0FDN0Y1RTZEMERECis6MTA5QzMwMDBFMDI1RTREODFFOEREREJCRThFRUU3NDQ5OEREQUYzNEM3Cis6MTA5QzQwMDA1MUFBM0I3QzA1QzQxN0JFQTJBMEJGRjdGMDhFNzlFQkVBCis6MTA5QzUwMDA4ODZDQUZDN0Y0RDlFMUNBQjlFQjMwREYzNTFFQzQ3QkRECis6MTA5QzYwMDAzQzVGOTM2M0ZGNUUwNjcxODdDNUFDNURCRjc5NzJGODk4Cis6MTA5QzcwMDBCQzE0Q0VFNjdFNEI2MzI0RjgxMTVFOEI1RjNERTBGQUE4Cis6MTA5QzgwMDA0OEE1NkQ1RDk4OTc2OUJCOEY0QUU5MEZERkMzQzRCOERCCis6MTA5QzkwMDBBMzBDRkM0RDBCRDNDRjQzRTAzM0QzQjhDM0M1RTc2QjY0Cis6MTA5Q0EwMDBGMUVGMEYwQjlGODNBREY3RDk3MEQxOTBFNDg1RDgzN0QyCis6MTA5Q0IwMDBFNDkyREVCRjk3NzEwMUMwNzM4RkNDRjIzOThFQzJBQkQ0Cis6MTA5Q0MwMDA3Q0I4OUY4QzYwQTVBNTU1QTM3NjAyOUVDQTIyM0NFRjY2Cis6MTA5Q0QwMDA0OTMzRDY4MTlGQ0M3QkY1QzJBRDYxOEFCN0Q3QUVDOTc3Cis6MTA5Q0UwMDA5NkJDMzY3ODc5MjMwQ0NGMzM5NkE3QjcwQjczMjMzQ0Y5Cis6MTA5Q0YwMDAyRkI3QjdCRDQ0RTAzRTQ0NzczRDg1RDdCQjY2MzlCQjNGCis6MTA5RDAwMDA5NzhBQThFNkQ4QzVCNjczNzU1MzVDREZEREVEQzc0NjA0Cis6MTA5RDEwMDAyMkY4RkQzNTFFNkY3NzdGQ0ZFMkVEOTcyRTE5QjgzRDAzCis6MTA5RDIwMDBBOTYzRjdCOTUwQkExQjlCRUU3RTQxQzExRjlERTE0NDY4Cis6MTA5RDMwMDAzNDQyOUZBRjRCODkwN0JGMDE3NDM0MjlDNEUyMUUyQTA1Cis6MTA5RDQwMDAyOTg0NzhCREU4Mjc1NzI1Mjk4REMyRkQ1RDhGMzExNkZFCis6MTA5RDUwMDBGQ0I0NjlGQTI5MUNBODlGNEM3MDE1RUIxMUUzMDAyQjg5Cis6MTA5RDYwMDBDMkJEMkM3NEZGODhGQkM1MzI5MzkwRDlCMDRGRjRDNkE2Cis6MTA5RDcwMDA2RTY1ODcwRDE5MURFNEYwRkM5OTk5NzVDMUU0NDZCMDM0Cis6MTA5RDgwMDBGMzU0QkE0RURCN0NCQkZFNkJFRUZGODBFRjVEODc2NTY0Cis6MTA5RDkwMDA3RDUzNjE3RjM4MEMyNjFGMTY3MEJBQzk1NTEyOUJGQzgzCis6MTA5REEwMDBFMDFGNUIyMUE1QkRERkVDRjIwOEZCM0IyNTFGODQ3Qjk4Cis6MTA5REIwMDBFM0VBMzhDRTg0RkIxMjFFQjhFN0UwNUE5RURGNDQ0ODNGCis6MTA5REMwMDA2MkFDRkRFRjhDN0RDMEU1OEFCQjVEQUVDMkUyRDFFNDQyCis6MTA5REQwMDAwREM2Q0Y3Qjc2QUQxOTlCOEU3RjVFRTU3Q0ZBNDFCOEQwCis6MTA5REUwMDBDNDkxOUZCNDI0N0VBQjA3Rjg3M0M5QzI0NTFFMjMwNEY3Cis6MTA5REYwMDBERjk5QkNCQzg2Q0Y2MzhGOTYxODdCNTFBODBGNEUxOTk0Cis6MTA5RTAwMDBFNTEwODc0RkQ3OTE0NDEzRENFRkIwQTI0MUMyMzg1MjFFCis6MTA5RTEwMDBFOTA2NDY3NzJCMzZFQzk3RDdEMUU3NEVDRTdGOEIwMEZECis6MTA5RTIwMDAwN0I2RkU2RUU1NzhEREIzMkIzMDBFRTZCRkE3RDc0RjQxCis6MTA5RTMwMDA0NzNCQTZGM0I4RkU3RTgyN0VBRkQ1OTFBQjM2ODNERjdCCis6MTA5RTQwMDBBQjVCMjJGQ0VGMzJGQ0E0MTJGMjBEQkE3OTlFNDgwQkY4Cis6MTA5RTUwMDBGREJFMTFFNjNCNkYyNEYyRjc4NDBEMUZENDgzN0NFRTI4Cis6MTA5RTYwMDBEMjA4OUU5N0ZCOEY3NjJGRkU3RDBCNDEyRkJENzI2MjJECis6MTA5RTcwMDBDMzQ3OEQ5MDc0NzdBRjk2OUEwQzc0MzNCMkE5RUUxQkRBCis6MTA5RTgwMDBFOUZDRTQxNkU3RkIwRjQzRjFBQzc0NzZBRTc4MEE3OThGCis6MTA5RTkwMDAyRUVBMkQ1NjBENEZCQUZBNTc1NzNBRTU5ODk4RjcwODFCCis6MTA5RUEwMDA2RkVBNTRCQUZCMUE3QUU5MzAzOUIwREVGQjM1OTdFMzMyCis6MTA5RUIwMDAwMkVGQkRGODNFOTI3RTVGQjQyM0MyRTI3NzdCOTI3M0RECis6MTA5RUMwMDBENkEyREVCMkJDMDZDODQzMzExRjAxQUY1QzhCQzFFOTJDCis6MTA5RUQwMDBEQTI1OEE0M0RFQUU1ODE4NzQ5RDQ3NjI3MEZEQUFENzEyCis6MTA5RUUwMDA3ODA4RDY3MUVGQUU5NzI2RTNERjUxNzRFOTg3ODA5MjQ4Cis6MTA5RUYwMDBEMEUwRkJDRDI0RTUwMTM5NzE1QzMxRjBGOTdBQTNGM0IwCis6MTA5RjAwMDA1RUU2RDc0OUUyOEVFOUEwM0YxQjk0QjQ3Q0Y1MENBNzJFCis6MTA5RjEwMDA5RkQ3QUI1NjVEODNGMzZGNTY3NDk4RkZCMUU1MjNBRUMwCis6MTA5RjIwMDAyQTA3Rjk1MkU1QzE3QjgyOEYzNURGMTZCRUM5QjY3RTlFCis6MTA5RjMwMDBBMUVGRENGM0ZBNkRGNUFBMDFGNUQ2RDIyQTI3REVGNkY5Cis6MTA5RjQwMDA2OENDMkVCMEFFNjQ3Q0I4OUFDQTlCRDk0ODVGREQ3N0U2Cis6MTA5RjUwMDBDQ0E0RTMxRjRFRTY1Q0I0ODU1NTI3RjBGNzFDQUZFNkIyCis6MTA5RjYwMDBCRjFGOTcxMzc3Q0VBNEYyRTY4NENDRkM2MUQ2M0YzMUI1Cis6MTA5RjcwMDBCOUIxRTRCRTc4MEJDNDc5NEYzNDRDRkI2OTM3QURGNzA3Cis6MTA5RjgwMDAzMjVGREY1QjBEMDNFQjQ3MzczRDREQjhDRjc5M0ZFNURGCis6MTA5RjkwMDA4QzIzNDQ4M0Y2ODlGQUY0RkFFMEZBRUMyMDkzQUY2QTUyCis6MTA5RkEwMDA2QzFDQzg5N0VCMzZBNEFGQjcwOTkyMkI2OUJEMTM3RjIxCis6MTA5RkIwMDA1NUFBRDNFNTZEN0VBMjMzM0U1OTExNEZERkZFMTMzRDA2Cis6MTA5RkMwMDBDQ0JFODM1RTRBMDNFN0JENTk0MTJFRTdGNDcxMjBBNzVBCis6MTA5RkQwMDA1NzY0OTg2RjU3NTYwNEVCQkREMzcyRkI3NTEwRUYzQjc3Cis6MTA5RkUwMDAyRTNCRTVGMzBGQjI3OEZDM0M4QkM5RTcxM0JCOTY3OUE3Cis6MTA5RkYwMDA0NjAyOUU1QTI1MURFOEUxRURFQ0Q4MjRBMEI3OTVDRDg4Cis6MTBBMDAwMDBDN0QwOEZGMDJENUVGRkJBNTBGQzQzRDA0RjRCOEUyQzQzCis6MTBBMDEwMDA5RTNGOTJFMkE1NkIzOTg5NDk0NjY2RjlGRjMxRTc5Rjc5Cis6MTBBMDIwMDA1Qzg1REQ2MzQwRjVERkJCQTBGRjY4RDM3N0QxRkU1MEQwCis6MTBBMDMwMDBDRDcxNUY5QkNDQUU2Qzg0QkNDMjEzQjJCNTA2RjM1MDNECis6MTBBMDQwMDA3NjA1NThERTExODk0REI3REYyRjEzRTBGMzM4QjE3QjY5Cis6MTBBMDUwMDA3OEY4QkUyNjFFMUNEMDhFM0Y0QzNBNkE3MERDREQ0MTdCCis6MTBBMDYwMDAxREUyOEY4NzJCOTVENEU1NzQ5MkVGRUQwRUUyM0RBRkE0Cis6MTBBMDcwMDA2RUJFQzgzNEZFNzBFREMwMTNCQjg3NjcwNzBFQjZFRTI4Cis6MTBBMDgwMDA1ODU2RTE5MEVDQzAzMzk1RjdERTU5MDY3Q0E0NzU0QzI4Cis6MTBBMDkwMDA0OTI3N0Y4NTlDN0U4REZCQUREQ0Y0MjM5RUIzMzkzRTQyCis6MTBBMEEwMDA4RTI3MDc5RUQ3Q0RGNzNCRTc3MzVEOUQ3MzNFODI1RjlBCis6MTBBMEIwMDA4RTI3OUIwMjkwMUY0RTQ3OUY2Q0I3NEJDOUJDRTk4MzBDCis6MTBBMEMwMDBFODU5RTZGRkNEMzRDRjM4OUZBNzkwMTM0MDc5MTA0RjYxCis6MTBBMEQwMDA1QkNERTVDRDVCMERGNzQ2RUM3ODcwQUZGRjg0Q0NGNzM4Cis6MTBBMEUwMDAwNzBGQjFCQ0FERjFGMTk1NzM0NjFBN0RGNDc5NUQxNjk5Cis6MTBBMEYwMDA5MzQzOUYzNzVEMEEzREUzRUVFN0VGOUQwRTg1OUUxQjgwCis6MTBBMTAwMDA4QzBFODU1QzcwQjdGRjAwRTJGQzIzRTFFRkUzRTgxQUY4Cis6MTBBMTEwMDBDNDY1M0U4ODE4QUM0Q0Y0MDU3MDQ0ODY5NEYzNzNDQjQ4Cis6MTBBMTIwMDBDNDE4MDdFNzZFNEVFQzBBRTBGREY2RDYxNjZGMTJGRTc1Cis6MTBBMTMwMDA2RUM3RjE1RDk3NENCMkFGNjcwN0M3RkY4QTI1RDk3ODI0Cis6MTBBMTQwMDA1RENBNzEzOTc2QzUyOENDMkY1MEYwQkVBRUQ3OEZFNEVBCis6MTBBMTUwMDAyQzgwRjJCRDg3NjQ5MEQwRTRCQUZBOTUwQUFDRUY4MTA2Cis6MTBBMTYwMDAyQzk2NzdCRTYyQzMyQjY4MEYwRTk3Q0U1N0Q0MzlGNTY1Cis6MTBBMTcwMDBGRjI3N0MxREJENzY5NkRBNTMwNkY0OTMwOTBFRUQ1OTQwCis6MTBBMTgwMDAzRUI2Q0Y4OTJGOUEwRkYyNzlENTA2MDlFNUVEOTYyQ0M4Cis6MTBBMTkwMDAwM0RGQUY1MjREOTREQkE0OTlFOTQ3RTJBM0YwQTAyQTc0Cis6MTBBMUEwMDBFNDE4MkMwMkUwRjFCRkY5REYyOTUzRTM5QUZEN0NEMkQ5Cis6MTBBMUIwMDA0RERCNkU5RjBGRjZBMTlCNUY0NkVCOEM4RUUxNUUzMDEwCis6MTBBMUMwMDA3ODVFMTc0QTNDOTkzNUIyNEYzRUJGMkRENUVEMUY0NUZECis6MTBBMUQwMDBBQjVDOUVDNUVENkRDRUE3NjIzRDk3NjdCMUY1NTEzQjc3Cis6MTBBMUUwMDBFRDg3RjhGNzk5RjhGQTQ4Q0M0NTZGNzI0N0NENEYwMEU0Cis6MTBBMUYwMDBGRTczN0M2ODE3MDRCQzU0RUU0M0RFRENGNzAzM0FDQkY1Cis6MTBBMjAwMDA5QjYzN0MyNUVDMUQ3N0ZCNkJENTg0QzM2RTNDOTQ1NTFBCis6MTBBMjEwMDBFOEM4Qzc3MURCMjFGRkQwMTdFOUVCRkZGOTZGQUMyRjVFCis6MTBBMjIwMDA2NEZERDNFOThCRkYwNzc5QjIyMjA4MDA4MDAwMDAwMEFCCis6MTBBMjMwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkREM0QwQjc4NTRENTlCCis6MTBBMjQwMDA5OUU3Q0U5REI5OTk0OTY2OTI0OTMyOTMzNzM4OTMwMDgwCis6MTBBMjUwMDAwNjI1NzgwMzIxNDQ5RTM3MDk5MUEwQTgwMzA0MEMxQTBGCis6MTBBMjYwMDA3MDQ0RDQyODIxNDRDNTRBQkZEMkNEMEQ4OTMxMjBEQUFCCis6MTBBMjcwMDA1MDVEQjRENjc1ODc4ODVEQjZEMjM1NTg2QUQxRDI3NjJFCis6MTBBMjgwMDBCMDgyOEZFQTM2NUE0NURBOEQxQTFGQTU4MDBGQTJBRDJCCis6MTBBMjkwMDBBQkRCOEZBRDdCRkVGRjlDOTNCOUY3NjYyNjA0NkRGQkFECis6MTBBMkEwMDBGMTJEN0M3RUQ3MzNFN0ZEQkZGRkZGRkNFN0IwQTIyNTkxCis6MTBBMkIwMDA4NTQ0OUQwNEZGN0M0OUZGM0I5QzFBMjBDNDRGQzhGMTk0Cis6MTBBMkMwMDBCRkNBOERCRDZFNDI4RTQ1REE5M0FGODFBRjRENUQ5MEIyCis6MTBBMkQwMDBFRDIzNDRFRjk0QzlBM0I0REQzQjQ3M0VBRDgxRjJCRDBECis6MTBBMkUwMDA3RDM2QUY0NENCMkJENjVGMjM4NzY5QkI0QzI4RjlBMUMxCis6MTBBMkYwMDBERjkyMzQyODdGMDk3RkU2MEVGRkRFRjA4MDRDQTJDNTk2Cis6MTBBMzAwMDBCMTc5QUY4Njc1MThDQUM3N0E5MjM1MDJGM0NERjE0NDk4Cis6MTBBMzEwMDBDNjA3MDlEOUFCMTA5RDk0MTFGMkY2RTZFQ0M4MjY1QThGCis6MTBBMzIwMDBBRTcxMTJERDNEODU5MEI5Njk2Q0JEQkU4RDlGQjc3QTY3Cis6MTBBMzMwMDAyN0QzRjVGNEZDQkE4NDE0RDJGNUREN0RGQjhBRjBBNEIyCis6MTBBMzQwMDAzOEYzN0I2RDg0NENBMzEzMDQwMjM2OTI0NUM4NkQ3Q0IwCis6MTBBMzUwMDBFRkFCNTI4OTA2RTMxMzNBREZBMzg2RjE0NUJGQzNBREU1Cis6MTBBMzYwMDA4NDQ0Q0ZBNUY1RTM2OEJGRjI1ODNGRUJGOENCQUVCQzExCis6MTBBMzcwMDA3MDJDRUNGQkYwOTUzM0M3NUUzMzI5RDYyRjExMUM5NjU5Cis6MTBBMzgwMDA0OUUxN0Y1RTBBRjNCNkM5MkFDMDc1RDczRDQ5OEQzREM0Cis6MTBBMzkwMDA3MUUwQTY3M0I4NUFFNzg3M0Y3NkJBOEYyNUZDRkY5NzFFCis6MTBBM0EwMDA2RUFDQkNDMzQzNDFCMjI5NjVDRUVDNzA5Q0Y5MEY5M0VGCis6MTBBM0IwMDBGMERERDNFODdDRkE0NjM2OUY3NTlFQzU3QzlFQzNGNURBCis6MTBBM0MwMDBENzJFMDVGODdGQTZDQjVFOTlDMjYzQTA0MTRFQUQ4MDIzCis6MTBBM0QwMDA3RUY1MEU3NTNDMUQ3RjQwQkZENTczOUQ2MTlEQkY0RkJGCis6MTBBM0UwMDAwMDlGREYzNzVFRUI4OThCMDdGRUJEQTJERTRDMDc2RjU3Cis6MTBBM0YwMDA5M0MxOTdBN0MzM0MzQkUzQUZFRjE2NTgxRkM1REYzMUFFCis6MTBBNDAwMDAyNTdDQ0Y4NTc0N0RDNzJGOTY1NTlEQUVFN0I4OERGNjE4Cis6MTBBNDEwMDAwMzdBNzk5MEY2MEIwQ0VGNzczREVGRjdGNkM2OTFFOUVBCis6MTBBNDIwMDA3MjQ5QUQ3OTNENEI4RjI0OUJFOUQyNDYxQTdCRTNFQzEwCis6MTBBNDMwMDA2NzY4NUQ2NzQ4RjcyQjJDRkNCNzRCMTkxQ0UzQTVGRDNCCis6MTBBNDQwMDBERkRFNzFFQUNEREI2MTNGM0I5MjExREVENjcxMzJEM0E0Cis6MTBBNDUwMDA2NUM2QTdDMDI3MDBBRjJENDk5QzRGQkE5QjlGQTZGRDlDCis6MTBBNDYwMDBERUJFMzQ0RkRENDQ4NkYzMDcyMUREOTdDREEwRjVGRDM4Cis6MTBBNDcwMDAzREI2RDIyREI0NkE1NzRGNEE2MzI0Q0U3QTI3QTczMzBDCis6MTBBNDgwMDAzQUYwQzk3QUYyNzlCNDNENzk4M0UxMDNDODBERjg2NkYwCis6MTBBNDkwMDAyOUE3Mzc2RkNGMEY1Qjg4MkRENkVGMERBMDgzMjQ0MkZECis6MTBBNEEwMDA3RURCRUFDNEVGMzZBRjEzQzdBOTVCQjg0ODA5RDA3OUExCis6MTBBNEIwMDBBRUIzMTMwREUwODc3RkU4QjhERUYzMEE3NjZDQTE1M0U0Cis6MTBBNEMwMDBCRDZFNjM2NTdEMTVFNTNGNjlGODdBMUVFNjc0QjkyQkFDCis6MTBBNEQwMDBCMjc4NDRGOEQ2MzdDODI2NzhENjJEMzRDM0Q3NEE5RkU5Cis6MTBBNEUwMDA0NzIzQjZEQTc4RkIxN0Y0OUM2OEJFMkIxRDExM0ZFMEJBCis6MTBBNEYwMDBFOTA4REZFRjYxQkVERkRGMzdCNjdCQTBCRDc1OUU1RDhCCis6MTBBNTAwMDA5MTlFMTFGOUUwQUE0NjMzNUQ5QzZFOUY2RjdBODMwODk1Cis6MTBBNTEwMDA4RkU1NjE3M0JGMkJFQUNERkI1RDRBNUE2NjEzNEEyQTY5Cis6MTBBNTIwMDBDQjg4RUE4MDZGMUQ2OTI5Nzk5QTgyRjJFODAzNEI3MDIzCis6MTBBNTMwMDAzREFGMTM1MjBCNzI5RTlDQkFCNTY0NTE0OTZDRkMxNzI3Cis6MTBBNTQwMDAzOTNEN0Y1Njc3RUJBNTIwMkVERjUwNUE0QUJDNzFENjk1Cis6MTBBNTUwMDBGMzNBODc5M0MwRjdFQjA5RTAxOUU1NzJGNzBEQzAzM0MyCis6MTBBNTYwMDBEMEVCMzIzOTJFOUVGRjhCQ0ZGQjQ2QzNDODdDQjRBQ0Y4Cis6MTBBNTcwMDA2RTY0M0M5RkYwN0ExMTNFNkYzNEI0MjdDMzNFOEY4OURFCis6MTBBNTgwMDA3OTFGNjRGMzgyNUUzM0UyRTNDNDU3RDQ1QjU2RkUxRDQ5Cis6MTBBNTkwMDAyMEZBNEQ0OEM3OTE2NDJGRTgxMTFGOTA4NzQxOEY3NEFFCis6MTBBNUEwMDBBNERCOTgxQzJGMUU1OThGODhFRjZGODU1Q0I1QjRBRjY0Cis6MTBBNUIwMDBCMzZCMEUyMzNFQ0FCRDAxODQ5QjI4RDcyRDM0QUZGMzY1Cis6MTBBNUMwMDBCRDU0MDYwRkNBNzE2MzQzMUU4M0RDRTBGQTU1RThCQjM1Cis6MTBBNUQwMDA3QjdGNzBGRTVCQTAzRkM3QTczMzNDRDQ4NTNFNzEwMEY0Cis6MTBBNUUwMDAzQ0E4N0NCREMzMDNGQjdBRDVFNjA1Rjk1QTdFNDQ3M0NCCis6MTBBNUYwMDAxOEUxMzcyNzhEQjUzRkJFNzM2NEY4Q0Q0OTYzRUIzQzU2Cis6MTBBNjAwMDA5RDlDQjVFRUY3RUQ2RkRGMzkwNUM2N0RGQkRCOUYzQjBCCis6MTBBNjEwMDA4Q0UzMkZGQjIyOUY0NDMzNjNFNUFCRUIyNTJEMTI4N0EwCis6MTBBNjIwMDBDRjM2Nzg5NTUxQzE3RDgzMDU4RTU3N0YzMTE2QzdGNzk4Cis6MTBBNjMwMDBDOUE0QTUzN0NFQkVFQ0U5NEU2Q0JGMzQ1NEU5RjA1MzQzCis6MTBBNjQwMDA3ODVFQkI1MTUyMjUzQTg0MjM5REM5REQ2Qjg1QkNCMzJFCis6MTBBNjUwMDAwN0M2MkVBMjcwRjdCN0I3REMxNjhBMzNDRTZDMEVFRkEyCis6MTBBNjYwMDAzRkJCNDM2OUYxRjg0QzdDODUzRTE3RUQ5NkQ5QzM4RTBDCis6MTBBNjcwMDA3OEVEQUQ3QTc1ODBGM0I5QjU1REU4MENFOTcxQzgwRTc3Cis6MTBBNjgwMDBCMkI0MUZFRDNBRTZBNjMxM0FDQzRDOEE3RTA0RjI4ODg5Cis6MTBBNjkwMDA0QzMyREI2MUE3OUREN0QyREUzQUVGNjUxQ0VFODlFNjJFCis6MTBBNkEwMDAxNzc2QUQ3NTdDOURDMzNGMUNBMkY0MTNCN0RFODNGNTBFCis6MTBBNkIwMDBBRjEyQTY1RkY1NDgwQUVBQzM2MzNCQUZCRDA3Q0NCNzRDCis6MTBBNkMwMDBFQjE3REM3NjA4RDRFNENCQTk0MTZDRDcxMDdBQTUwNjQ5Cis6MTBBNkQwMDBEOUVERDRCRDkzMDFFRjlGRDVERTdCNEYxOTVEREE3MUMzCis6MTBBNkUwMDAyNURDRUVBMTFEOEU2RjkyRDA2RUIxQ0VGMzJBRDcyNzU2Cis6MTBBNkYwMDBBRjgxM0MzRDE3QzYyM0NDNUU5RDQ3NDdDQkE1NjA5N0Y1Cis6MTBBNzAwMDBCNTM1MjA1NEM4Qjc5MjAyNDYzQkQ1QjdFMUYzNTYzMjZGCis6MTBBNzEwMDAxOUVDODdEMDI2MEZGRDdEQzJDNjRGRDY4MzVFMjYyNDU2Cis6MTBBNzIwMDA4MkZEREY3NUE4MzcyMkJDMDlCMzczRkI3QkRDM0JCNjI3Cis6MTBBNzMwMDBEMDc2QUY4MjVDODBGMTg5M0EzNjU0NjI5MDEzNzYyRkRFCis6MTBBNzQwMDA5NjQ3OEI5RkRGMjZDMENGOTlDQTI5QjFDRjQ0RjM1MERCCis6MTBBNzUwMDBDOEUzRkExNjU3QjlCQkE0MzRCMDc3MDJEN0MxN0UwNjU2Cis6MTBBNzYwMDAxN0I4QkMzRDE0ODU4QjE1RUQxMjgwQ0ZBQkFGRDg2Q0ZDCis6MTBBNzcwMDA2RDQxMUMxNkVEMTU2MTFGMDcyRjBCREU3NTVFMTlDOEE0Cis6MTBBNzgwMDAxRjg3RTZBMjRCNTkwNENFQ0I4NTk0OEVBQURDM0E4QzY3Cis6MTBBNzkwMDA1N0Y2REI4NThGMDE3RUVFQUQ0RjBBQzgzMERFOUNDMEQ4Cis6MTBBN0EwMDA5QjMyMkQyRkJFMzgyOTAwN0U0Nzc5NUZFMTAxMUYxREE2Cis6MTBBN0IwMDA3RkU5NDJDOTRCNjhGRjc5MEJDNkZCMDdFOEZFNTIzNkJBCis6MTBBN0MwMDBEMDcxRjI2MDc5Qzc2QUFCQzcxMUYyNDM5ODZDMDY2MTI5Cis6MTBBN0QwMDAwQkE2QjA1ODJDRjFCMkVFREIzQzhGQjYzRkNGQkZENzAzCis6MTBBN0UwMDBFNkE2QTA5RUY4NURERjY2MjcxREY3OEVCNjUwOEUzNzcxCis6MTBBN0YwMDA5RERBMTNFOTFGNzQzOTY3MTM5Mjk1QTVGNUNENTUwOUI0Cis6MTBBODAwMDA3MTY3N0M1NDBCRTVCRDBGOEFGMTNFRUVEMjBBMDhGOTYwCis6MTBBODEwMDA5OTJEMUM5NDY4RkRENDhDQTQwNTc2MEEyRjVGOTE5ODFECis6MTBBODIwMDAzRjZGQjMzNjhCRUVFN0UyMUIxRjVENEZDNzVGRkVERDY4Cis6MTBBODMwMDA0OTBCRUNCMEVFMDYzMTdGRTkwMjU4REZEMjU5QTI1QzM5Cis6MTBBODQwMDBFRTgyQjIyRjg1Rjc4N0Y1NTY1MEY5NTUxODVCQkYzRDVDCis6MTBBODUwMDA4N0NFOUYyMURBQ0Y1ODMwOEZGNjNENUNEOTUyNkRBNzU1Cis6MTBBODYwMDBGM0ZGRThCQkRBRTY0OTEzMDk5OUJFQjBEMkFCRDFGMkU3Cis6MTBBODcwMDAxMzE5RjUwQjUyMjg3RUY2MTI0QUE3QjRGQzY0QzY5NTRDCis6MTBBODgwMDAwQjYwRkQzRUQ5QzZDN0JGNkEzM0FDQkZCQzQxM0YwRkFBCis6MTBBODkwMDBFQTI1N0RFNUU2NUFCQUVGQjVDRTgxNDM0MEFFRUIzNjA4Cis6MTBBOEEwMDBFOENFMkNGQTNGMjkxMkUzNjNBN0EzNDVDQkE3QjA3M0U4Cis6MTBBOEIwMDBFQ0FCOENFNkUzNzJCQTE5QkQxNjQ0NEI0MDhGMEQ5NTk0Cis6MTBBOEMwMDA4QjY5QjlDNDUwQ0U2MUU1QkQ5QkM4RDVGMUU0RUQ2RDhGCis6MTBBOEQwMDA5OTRDRUVFRDREOEU1RkFGNjQzMDdCODBDMjBERjU0OTMzCis6MTBBOEUwMDBEQTExQTJFRDhFQTM1NzNFNEE3N0UzN0MwNzkzODlFRUY3Cis6MTBBOEYwMDBDQzg4RjFEQkU1OTQ4NzJCMjg1RjEyMjc1QkE3MTg2N0NDCis6MTBBOTAwMDA5OEZFQzg2MDcyODdFODk3Njc4MDNDNUQwODQzRDBBREM5Cis6MTBBOTEwMDAxN0E5MTJGQUJCQTQyNTI1MzIxRTY4ODc0NEVENEI0MEM3Cis6MTBBOTIwMDA3RkM4MzY1Q0FGNUY5NkFFNUU0NEM3Q0I0QTI2RTEzRDNBCis6MTBBOTMwMDBGNEVCQ0YyNDU4QTZGREI1M0RFRUQ4NzgyRjcxQkFBRjExCis6MTBBOTQwMDAyOTBBRUQ4NEYxNkFCMjczNEJEQjgzQjE3MUU4QkEzQjNCCis6MTBBOTUwMDA5QzUzNENFQkI2NTc2NDQwRkRFMkQyOUIyNzE5RTAzOTdCCis6MTBBOTYwMDA4OUVEODNEMjAxRjZBM0QzM0MzNjk3RjJDMURFQkVGMzY0Cis6MTBBOTcwMDAwQUMxN0VGRkE5NDVFRTk2RjcyRDc2MTBEQUVFQ0E0Qzk1Cis6MTBBOTgwMDAyRTVGMDJBQ0JGQkY5QUM5OUZDMTlCNTMyMjNEQzA5RjlGCis6MTBBOTkwMDA0RUI1MzQ2NEIwM0IwMzFDMUVENTc3MkVCQzFGREEzNTkwCis6MTBBOUEwMDBGNTM5NDgxMjZEQjc3RTRGNjUzNjE5NDEyRjM2N0QzMTI2Cis6MTBBOUIwMDA5MzQ0QTYxQUNBRjZBODAyNzJBN0U5OEIzOUY4N0JGNTY4Cis6MTBBOUMwMDA5RDJGMjlDMEE3MzA0RTgwRUU2QkJENEJDQjU2MDE2RTNDCis6MTBBOUQwMDBFREYxRjE0RjFENzI1QzQ3RDMxN0U5NDQ5RjZBRkM5RDZFCis6MTBBOUUwMDBDMTI5MzZCRTBGRUI0RkI3QUZEODc4MzI4OTY0OEUzNEE5Cis6MTBBOUYwMDA5RTgyRjU0MzcwQjc3M0I4MkJGMUQ3Mzk1RkQwMjk4NUE0Cis6MTBBQTAwMDBCN0NENDA1RjRCMzlCRDUxRTk4NzcxOTRGRUNCMjZGNTM4Cis6MTBBQTEwMDA4MEJDOEZDREJCMDlDN0RGNkJBNzc4MDQzQkIwMkYzOTUzCis6MTBBQTIwMDAwMDc2NzFCOTlEQzlDRkYyQkUwQ0FGMkVDNUU4NDNEMEY4Cis6MTBBQTMwMDA4NUMwRUJERThDOTY0QURDRUYyMkM5REIxMzFDQkVBRTcwCis6MTBBQTQwMDBDQkM0QkFCODNFQ0Q2RTA4Q0JENzE4RDYyN0Y4ODE4RUM2Cis6MTBBQTUwMDBCRjk3OEY1RjU2ODFGQ0YzMkY0Q0ZGNTBCRTU5MDFGQzBFCis6MTBBQTYwMDAwQjc2MEJFQzQzOEQ5NjJDRjYwQzVGRkZDRkE4RUM4MDk5Cis6MTBBQTcwMDAyRkM1MjM4M0ZGQTVFRTA4RTgwMTAxQjdFMUYwQ0YzRjIyCis6MTBBQTgwMDAwRDNFQzc2MjdENzlERjMzMEFFQ0IzMjkwMURGODYzMkUwCis6MTBBQTkwMDA1M0IxNUZGNjkxNjgyQUY4QjVCRjRDNjc3QTZENkZFRkQ2Cis6MTBBQUEwMDA1NEQ3NENFMDhCODUzNjAyMjIwQ0Y2MERGNjZBQjk5MDJECis6MTBBQUIwMDBCNzY0RDcwQjU1NzZGQUZCNTA5OUNBREIwMEUwNjE0OEMyCis6MTBBQUMwMDBGRTQ2OURDRTU4RkJBQUNDNUQwQjNBNjg5RDJGODlFMkNECis6MTBBQUQwMDA3RjEyREFBMTRFNjJGMDI3QkU5REMxRTQ1ODQ1OThDNEFBCis6MTBBQUUwMDBCNTVCOTY2NTMyQkI0NUMwRkI3QjFCQUFDOTdCNzQ3RkY3Cis6MTBBQUYwMDBDRkE1MzNCRUFDMThEMDI1QzA4QkUwNkJBQjlDN0E4ODU5Cis6MTBBQjAwMDBFM0YxN0JGQ0ZCOEY5NzUzRDI2OUU0RDQyMjJFQTdEOEM0Cis6MTBBQjEwMDBFRjA3QTk5OTBGRURCMkIyQTIyNTEyRDU4OUFCNUU5OEM1Cis6MTBBQjIwMDAzQTFFRkM5OTVCNzJFNEMwRkI5NEFGOTY0OEVBOTgxRjBBCis6MTBBQjMwMDBEMTcxRUI5QzAxOEM5MzA5M0FBOTIzQ0U4MDFCRTA0RTg2Cis6MTBBQjQwMDA4REE2MkY0MUVGMkY3NDYxMTlGRTgwNURGMjY5QjdDNEE1Cis6MTBBQjUwMDBFODkwMDREMkVBNEExMkNCMjFCMThFNUI3MjE0OUM2RjRBCis6MTBBQjYwMDBENUU2RjE2OTYxRTNGQUI4OUVCODNDMjlGQTIzNTIzNDdDCis6MTBBQjcwMDA5Q0NGNDU5OUFFN0ZBRDREMzZENEJCOTkzRUZCRDBBMzVCCis6MTBBQjgwMDBGRDM0ODNFMkUxNTU4OUQ0RTM3QTJDRjZEMjZGNzhEQzg4Cis6MTBBQjkwMDBDNjZBMkZENTczM0JEMjBGRTYyNUYyQjEwRDlERDNFQ0RCCis6MTBBQkEwMDBBRUE0MDg2MTVENzRGMDUzQjM3QjA5RTdEN0E4QURDOUMzCis6MTBBQkIwMDA0MDA3QkZDRTI4NjA3NkVEMTVCNEYyMDJDQTk0Q0U2QTgzCis6MTBBQkMwMDBFRDdEODMxQzdCMUVENjgzN0EyMTNBMERGOEY0QTUwQzBCCis6MTBBQkQwMDA2MkIyRjMxQUU0NTA4MTA0NzY2Qjc2OTIwQTcyODZFMkNFCis6MTBBQkUwMDAwOUUxNzBEMDQ1RUMyRTNBRUY3M0Y0MEI3OEFCOTE2RjFFCis6MTBBQkYwMDAzRUUwRjAwMTFENDg2QTNCNDI3RjA3Rjc1QjQ5MTRGNEQxCis6MTBBQzAwMDBDREU1NzM1M0QwNkUyNUE3NkUxRDA3RjEwQTdGMEFBMzA5Cis6MTBBQzEwMDA1QjNBOEU5MzhGRTM0NDNBRTE3MkVGMzc2MzI3RjY4MDE1Cis6MTBBQzIwMDA3RTEyRjI1M0UwODE5QzkyNzEzQzUxN0Y1MDVBNTRFMDY1Cis6MTBBQzMwMDBBNUU1ODNGRTczNEJEQjI1QjNGRDAzRjY1MENDN0U1QUFFCis6MTBBQzQwMDBCRjc5M0VCNTk3QTZEN0Y2NDY2RDVFOTAyQUI3MkZCODY2Cis6MTBBQzUwMDA5REI2QUZBMUY2OTM4QkVFRTc4RjE5NEMwRjFFMENFQTUxCis6MTBBQzYwMDA3MjJBOEMzNzlFRUU4M0ZFNzQyODM5M0NBOUM1MURDMzE5Cis6MTBBQzcwMDAwN0I1NzFDMjgwQkYyQzg1N0VERDhDM0ZFMERCOTlDOUIyCis6MTBBQzgwMDA5MDkxRTE2M0RGMDZGRUNENEE2NUVEODdFOTNENUVBRjU5Cis6MTBBQzkwMDA0OTBDREU1QjJBOTk5Q0IwQjZCM0YxNzFENzNBRjVEQTZDCis6MTBBQ0EwMDBBQzQyQTM3RDE1MjI0MDg3NzZDMkVDMkMxOTc0OEYxRjBECis6MTBBQ0IwMDBGNTE5QzJBQkZBQ0U4NjM0RDA5QjlGRjUyRDREMjM5MzY4Cis6MTBBQ0MwMDA2MjcyRDRFMUZDRUREOEY3QTkxQzg5OTIyNURGMDE3RUUwCis6MTBBQ0QwMDA1NTVFOTcwOUQ4Q0I3NzM4MTg1RDJBRTk2MTZGMDZGRDc0Cis6MTBBQ0UwMDA2NkE2QzRGNzlCMjdGMkY1NjQ4MjVGNEREQkREQzNGREVBCis6MTBBQ0YwMDAxRUM3MTdFN0EzQkY5RDlGQzlFMjQ1QTkzOTc1MjhENzhECis6MTBBRDAwMDAwMTk2MDE4QUY3MzQzMkE4N0IwRDc4NENBQkIwOTlGQ0UwCis6MTBBRDEwMDAwN0M3MTc5M0IxRkY5OURCMEZBNTA5RUM4NzMyOTNGREE1Cis6MTBBRDIwMDAyMEU2QjVEQTExNkZCNkU2RTBGQTQ1RkYxNTM5QUZENTgyCis6MTBBRDMwMDAxMDQzRkI5NTY0RTAwRTE4NkZFNUZBN0M1M0JDMjg5MTM0Cis6MTBBRDQwMDBGRDMxMzc1MzFBQjIxN0Y0QjhFQjUyNENCRkJGNDlGRDZGCis6MTBBRDUwMDA0NUREMzhGRjMxMzY3RjZDREUxNENBNzBCMTc5RTU0Q0MxCis6MTBBRDYwMDA0RENCNDRCRjZGOTZGN0U4RjlGNEUzQTJCRkNCQTg3N0M5Cis6MTBBRDcwMDA1MEZFNTNGREE0RUQ3MEEzNUVBQTA1QjkyREZDMjRFMDlFCis6MTBBRDgwMDA3RjZGMUFGMDc3NjU2REE2REZBMDI3NzkzRkFCM0MzQTVECis6MTBBRDkwMDBDMEZERUEwMzVDREZBNDFEMTE3NjYzNzI0MDkyNjI3QTAzCis6MTBBREEwMDA2N0I4REVFMjc2QjE0NTNFOUVDRUNFQTY3NEFCMUJFRDEzCis6MTBBREIwMDA4MDYxNzhDRUZDQUFGNjY1NTEwMkZBOThGMDBGQjEyRkE3Cis6MTBBREMwMDBDQjY3ODVFNTEyOTA5RkI1MTIxOTRGM0ZEM0U3OTlGNUYwCis6MTBBREQwMDBCRDlFQzlGQzEwOUQzMjlDRDE2RjU5REM2MDZFRDcwMUJECis6MTBBREUwMDBFREZDRjA0RDE5OTVERjYyRDQ0NzkyMEM3MjhGOERENzMwCis6MTBBREYwMDBDQ0U5MjE3OEUyNTUyNTQwRTU3MDk0REI0M0JCN0NEQTUxCis6MTBBRTAwMDA1RDQwMTcxREM5QTk5MzQxNEY3NDI0OEY4RDQwNUM2MjJBCis6MTBBRTEwMDBDN0ZGNTYxN0VGQTBFQjFGN0NEOUExRjZDMEIwRkIxOEY3Cis6MTBBRTIwMDA5RDU0MkU1RkRGNkVBN0JGM0I3QTI1NkYxMjg5QUREMzhECis6MTBBRTMwMDBCRDQxRDI1NjUzM0VCRTlGQ0I4OTI2MUZEQjRGOTMyRjc5Cis6MTBBRTQwMDBBQThDQTNGM0U3MzVCMTc1MTRGNDFFOTBFQzA2Nzk1NzdDCis6MTBBRTUwMDBEMEM4REFFREM4NzQ5OEY0Q0ZBMzUwQTZFMzNDMjJGQzI2Cis6MTBBRTYwMDAxMTEyNjlBQjI5ODNGNjlBMURDRTQxRjI3QTI1OEMwRjE3Cis6MTBBRTcwMDBFN0I1NTA0MDUwN0FDODUzRDlGODZFMzUyMjVEM0IyOTZBCis6MTBBRTgwMDBCNkRGMkVEQkEyNDlBMDI3QkFCMjUyNTREMDEzMjc3REQ5Cis6MTBBRTkwMDBFMUM3NjBCRjRERkREMTI4ODA2QjdBN0Y5RjFERUMzRERGCis6MTBBRUEwMDA5NzVGREIwREJGOEI3RDA2NjQ2RjFFQzhEOTk0N0VCNjlECis6MTBBRUIwMDBCRTZFMEJERDEzNzIxNzVGNTcwRjkzQkYzMjc5OUUwMDgyCis6MTBBRUMwMDA1RTQwODZEMEY5QjIzNjE1QTM5RTEyRURCMzMyQjhERURECis6MTBBRUQwMDBDODIyRTEyN0QwQ0UyMjVEMDRGMTQ2NzAxRjU5OUIyNjdGCis6MTBBRUUwMDBBMEJEMkZGMDFBQjNBQjI2NEUwMUJCQUE2ODZCRDRCRTJGCis6MTBBRUYwMDA4QUY2N0JGQUExRjhGMUZBMTczOTlGRDA3RDFDMzRFRTVGCis6MTBBRjAwMDAyMzExN0YwOEJEMjZEQTM5MTJGOEQ1ODJFRTUzNkFFM0ExCis6MTBBRjEwMDBEQkFCNTQxMzYwN0RFNTcyREY5NUIwRUZBNjBFODUyNEEwCis6MTBBRjIwMDA0OTMxRjhCQkZDQTEyMzIwQjdGMjdBNzc0ODAwMUIyQkVDCis6MTBBRjMwMDA5RDc1NjRGQzUwQ0FBN0ZCQkNGNTQ2RTI5NTQ5RTI3NUQ1Cis6MTBBRjQwMDAzNzZEOTBCNUQ1NDY3RUVFNTAxOEREMjhFNkYzM0RFMTJECis6MTBBRjUwMDA2NzdDQzJFMzA1QjNGREExNjMwMDhGRTY3RERCMTRDMDBGCis6MTBBRjYwMDBGMzhEM0JERjUxNDYzQUQ3MTkyRERDQTQ0NkU2QkYzNEJBCis6MTBBRjcwMDBENTNCMjNCMERGQ0FFNTc2QzRFMzlBMEUyNTAyRjJBOUQ5Cis6MTBBRjgwMDA2OUY3OUVBODBERUNFQzhENDQwNUZFNkZFQURENzMyODkxCis6MTBBRjkwMDA4RkMyMjdCRjQ5OUIyNjA3NjJFM0U1Mzc0NTI0NTg0RkY4Cis6MTBBRkEwMDAxNjI1QzYzRUY0RkZBMjBBRTg2RDJCN0Q4MzlEMENGNkE0Cis6MTBBRkIwMDBDQTIxMTdFM0ZGMEYyQkREQkE0NEUxRjhBMTIzREMwNDFCCis6MTBBRkMwMDBFRDNFQ0M0RDUxRjU2MDBDRUVDRkVEOTlGRkJDNDQ1OUYwCis6MTBBRkQwMDBEQ0YzNDQ1MjE0QkU1REI2OUUxQzI3NkRENzc1OUVBMjRECis6MTBBRkUwMDAwMjNEQjlGQzYxOEY4RkMyMjlDMzFFREEwQkZERDM3REYwCis6MTBBRkYwMDAxRUI1OERGNjBEMjQ5MTI5QThBRjQ3MDk4N0U5MTZCQTI5Cis6MTBCMDAwMDA5OEJFOTFGMUNCNUM1RkFBQjAwM0E3ODA1QzNBRDdFNzBBCis6MTBCMDEwMDAxMTc2MTRDQUFCNDMwRUI2OEYwRUMyRDZEQjk5QTkxNUIyCis6MTBCMDIwMDBDMDdBODgzNzAzRTdDRDZCOEE0QUUwMDc1OEU3OEREMUFECis6MTBCMDMwMDA5NTU2ODhFRDQ3QkRDRTVFMDVFNEZDMUEyRTZGMkE5NzIzCis6MTBCMDQwMDBFRjk0REUzM0QwNDFBOThGOURDRkU2RURERTIxODE3RkU1Cis6MTBCMDUwMDA0OEVCREI2QTdDRDg5RTI0ODFCQ0Q5Q0RDRTI5RDZEMEUyCis6MTBCMDYwMDBGQUVCMENGMjQ1RUMyMzhFOUNBOTgwRjVCOUZCRkI5RTE0Cis6MTBCMDcwMDA2NTcyMjY4QUY0MjdENjZCQzVFNzNDMUZCM0VGMkVBMjc0Cis6MTBCMDgwMDA2NjAyRkVBRUU4QzUwMTNBREVBMUMyNjQxQzRGRjBCRDA3Cis6MTBCMDkwMDA5NTRGRTdGOTE4OURFN0Q1RUY5NDIwOUVFMDRCNjFGNkI4Cis6MTBCMEEwMDBBNDU4OUY2OEI3Q0I1NzU1RUI0MzM4RjQyMTFDRDZENjJDCis6MTBCMEIwMDBEQjExNkY2MjNEMzU0QTY4MUNGODY1Q0JGODc4Q0Y1Q0QwCis6MTBCMEMwMDBGMTk2MzI0MENCRjdGREY0MTVBNEM3QjVERDkyODZGRUFDCis6MTBCMEQwMDA0MkY3MkJDQTUyODhEQkU5RkYyRTQzOUNGNjEyNjZBMjg4Cis6MTBCMEUwMDA5MEVEM0Y3OTA1RjVDQTI1N0I1OUZDNjBFRERFM0RGNjE0Cis6MTBCMEYwMDA2QkREMzEzQTBEOUU3ODY2MjVEMEQ5REFERTI0RTI5MkY2Cis6MTBCMTAwMDAwMDdGMDFFNDUzMkI5RDUyMzk4Mzc0NEY3NDA1Q0ZCOUVFCis6MTBCMTEwMDBBODlDRDQ1MUFFOTI3MDEwRkMxNDIxODczQjM5N0YxMzQ4Cis6MTBCMTIwMDAzN0ZCRkQ0NkJFNkUzMTZFNEM3RUJBOTBERTgzMjdBNjlECis6MTBCMTMwMDAzQ0UzQTRGMDVDQUI0QUFBMEJGODkxQzM5QjhFMUY0NTdECis6MTBCMTQwMDAzOTRDNDgyMUY4NkI2MjdDMkJGQ0ZFOTlEQkVENzFGMEU5Cis6MTBCMTUwMDA3QzFCRTBEOUFBNEY4NDlFMEQzRTVDNDVFMDJCRjA2NzM2Cis6MTBCMTYwMDBFNzcwMUZEMkVGM0UwNUQ3REJFMUIzMzMzRDVGQzlFMkE1Cis6MTBCMTcwMDBEQTFEMEVBNjQ3M0FEQTlDMTFFMEVCRTdEMjJGN0E1RTkxCis6MTBCMTgwMDBBMkYyRDI5M0ExNDRFMTdCRDBCNkFBMDlFQTBGRTZCMUJDCis6MTBCMTkwMDA3NTc0RDkzNjE1QjczMDNENzY4NzBGRjE5NzRBOTg3QzhDCis6MTBCMUEwMDA2MkYyRThCRTFGMzM3OUQyQTRCQkQxN0Y2QzBBRDdBRDVGCis6MTBCMUIwMDBDNjczMDk5RjRCODU3MzA5MTI3RTU2NTlFQTg5RDE4MzVDCis6MTBCMUMwMDAxNUJGODEyNzBFMjgwMTVBN0Y0OTJGRTM4MzE4REM5ODg5Cis6MTBCMUQwMDBCRTEyNzQ0QkU1MUNFMkJEMzM1MzlDNUY4NjgzMDA1NzVGCis6MTBCMUUwMDBFQUQ3Qjc0MUZDNDFGOEY1QTkwRDIxREQxMzE4Q0VBRjIwCis6MTBCMUYwMDA5OURDQUY5RkM2RkQ3QTQ3ODVGMzZGRUFEN0FGRDlGMEU4Cis6MTBCMjAwMDA2QkY0ODM2RUNBNzkwMUJGODI1RkE4RkY2OEUyQUIyNzQ3Cis6MTBCMjEwMDAzOEJFRUZGNzMxQkRGQTk0OEZEMUQ1OUFCMjVFRTQ4NzhDCis6MTBCMjIwMDAzNUVGQjcyMDFGQjk2Qjk5M0M3MUY3OUJFNTIwMjE3NzZCCis6MTBCMjMwMDA3M0ZCNjAyQjhFNTM5M0QyN0I5MTBDN0VGMkJGNEFERTYwCis6MTBCMjQwMDA3NjkyNzhERDM3NDgyREZGMDk3OTMyNjQwRkNGREYzOEU5Cis6MTBCMjUwMDA0NUFERkM3MjBBNTcxNzg3MDE2RkY3NkIxRkYzQjczRUI2Cis6MTBCMjYwMDBEQzQ1MTEwMTdDNjk2RjUxNDZCMjg3NEYzNzJFODlCRThDCis6MTBCMjcwMDAyNjAxQkVENzcwNTg3RkI4QkJGQUMyM0Y0MDlDNzE1N0I5Cis6MTBCMjgwMDAxQUU2QjM3Q0IwN0JDOTM3RkY0MEZCN0ZCODczQUUwQUM4Cis6MTBCMjkwMDA3QURBRDcxRTQyRkExOUY0QkI1NDg4Mjc1MkYxNTkyQjk3Cis6MTBCMkEwMDA1MTdBNjhFQkZENTVFQTRDMzgyRjdCRUM4MjI5MjAzNzI4Cis6MTBCMkIwMDBERkU1N0M3OUUyQzdGMjA2ODBDRkE2N0Y3QjdDMEVENEU3Cis6MTBCMkMwMDBBRjg5NDg5OTYwM0Y3RUI4RUI1RkZGMEE3QUIxNzFFN0JBCis6MTBCMkQwMDAzQUNDNEI2QjdGRUM5NzY4OTdEQjIyM0JEOEVGQkJEMjI1Cis6MTBCMkUwMDBEMENFM0NGRUM4QjYzOTAwRjdGNkRFNzZBQzNGRjFDOEVBCis6MTBCMkYwMDAwRTJDM0ZGMzZGOEZGRkUyMkY2MDc3ODQ1MjU1Njg3N0YzCis6MTBCMzAwMDBFMkM3REJGRUU5MkY0MEU3NzVBOTJBRUNBMzI5NkM2N0E5Cis6MTBCMzEwMDBFN0I5ODJCRUFENzI2QkNGMDFFNDUzNDEyRjk3ODBERTU3Cis6MTBCMzIwMDAwNTM4RDUzM0Y5MjNFOEY5NUQ3RURFQjRBQURBREQwNTA4Cis6MTBCMzMwMDBGMkVDREQyRDlFQzY3ODcxNDZDNUNGRjAwMkIxMTg5NEFGCis6MTBCMzQwMDA2M0Y1MTJDNkQ5QkEyOEQ1NDBCQ0EzMkI5OTU0QzAzNzhGCis6MTBCMzUwMDA2NTUyNTRDOUE3RjM1Q0QxQjA2NzBFREEzREZBM0JENzBBCis6MTBCMzYwMDA0M0ZCMjVGQjVDNjQwQkM2RTUyMEE4NEJGRDAxMjQ3NTVGCis6MTBCMzcwMDA0MjRBQTgxODNDNEFGRDY2M0FGQUNFMkYyOUREMUVBNjlECis6MTBCMzgwMDBGMjAxRjU4RUM1MUY1OEQyRjVDMkZGODAxQ0FENzMwRUI5Cis6MTBCMzkwMDAxQzAwNTEyODdFRUZFMkYxMUJEQTFFRjU0RUY5RkFGODk3Cis6MTBCM0EwMDA3MUQyNTRCRjlCRDMyREQzOUI3OTdCMTcxNTA0NTA0RTdDCis6MTBCM0IwMDAyNEE5RTMwREY2RTk5ODIzMkQ1QjIwM0QyOUFGQjFFRkQ5Cis6MTBCM0MwMDAyMkQ4QzdDNUM1RDc0QzQ1QkE4MEY4MUZFODFGREQ4RDA4Cis6MTBCM0QwMDBFM0FGODVGODI1RTVCRjczRkMzQzJFRTIyNUJFMTk3NDZBCis6MTBCM0UwMDBGRTFBM0JGMUI5RTE0QkM4NkIwRTk0MjM4RkUyQjhENDNGCis6MTBCM0YwMDBGRTQwQkIyQUYwQ0IyQjFFMDU3QjY0QkIyMzlDM0IwRDgwCis6MTBCNDAwMDBDNkU5RTI3QTZCMjc1QjM3RURFRjg1NzM1NDNBOUU3Nzk2Cis6MTBCNDEwMDBDNjE0MUNBN0NGOTE4MUZENzVENjdGRkVDRTM2MjlCNjA2Cis6MTBCNDIwMDA1RTRBQTk2MzQxNkZDMTc4NjU2RUQwMzM3QTNERTIyN0U5Cis6MTBCNDMwMDBBMEUwQkU0RTQwOTM1Q0RDRjdFNDE1MjUzMUZFQjVDNkI2Cis6MTBCNDQwMDA3RDQwOUVDMUY5RjA2QzdGNjU4NTdGNUFFQzJCRTI0MTBGCis6MTBCNDUwMDA1Njc4NkVFNEY1M0ZGMzZCRjgyNUJCMzI0RDdBMjU5MUIzCis6MTBCNDYwMDBCREYyQ0MxNTFGMzNGREZCQjM3NzUwREUzNDAzMURDMzkzCis6MTBCNDcwMDBGQ0UxRjc0REZBRjc1QTQxQzc0RkJEODM3NDdDRUQzRUFFCis6MTBCNDgwMDBBNjdGOUJGNzk1MkE0MEI3MUZCNDZBRTQzRDZBODAzNkQxCis6MTBCNDkwMDBGM0YzRDdFREQyQzBGNTk4RUZGMjk0Q0IwQjcxQkQ4RkRCCis6MTBCNEEwMDBCOUJFNTlCM0Y1OURBMzcwNkU1QUI4MkYxN0ZERkM4RjI2Cis6MTBCNEIwMDA5RjcyRDVDMzM4MDc2RDM2ODRFN0MxOUVGMzc3QjQ0QkNFCis6MTBCNEMwMDBDNjc1MzJCRjgwREFDMTQ4QUFDREQ0NEU2NTc2RjBFQTlGCis6MTBCNEQwMDA2REUwQTdBRDZEMjQyQUYwN0ZCMzg1N0U5QUY3QkQ4MjFCCis6MTBCNEUwMDBGNDIyRUNFMEUwQzM4QjU3MzNGQkQzQTVCQUMwOEY5QkFCCis6MTBCNEYwMDBDN0VDNTE0MkVENTE2ODlGM0UyRkQyQTYyMDdEOTU5NjE0Cis6MTBCNTAwMDAwMzdEM0Q3M0M1MkYzQTQxOEYzN0NGMjM1RTE4N0ZGQkY0Cis6MTBCNTEwMDAxOEVEQTk3Q0RDOEY0NDIwQ0Y2NUJCQTNCQkNBNEVGQkQyCis6MTBCNTIwMDA2RkFGMDk3ODI5MjQyOURDNzZBMkRENEI4QTE1QUVFN0I2Cis6MTBCNTMwMDA1NkEzQkREQzlDNzM5NThBN0M2Njk1MDc0RkI1QTFERDRCCis6MTBCNTQwMDBENTFDNDhDNkY1NUNCMjRGQkE4NUQ5MjM2RUMyRDYyRjNBCis6MTBCNTUwMDAyMTdENUUxMjk5MTk4MUY4RDk0NzFDN0UwMjhFMUYzQjBFCis6MTBCNTYwMDBGQTU2MDIzQzNFRkUwOTI1NDQ1QTdGQzkzQzQ2QUZFOUUzCis6MTBCNTcwMDBGMzdBNTE4RTNDRjdENDdDRDRFMzgyMkUzRDRGMjZBMTQyCis6MTBCNTgwMDAzRUNGQjA3QjI1MTVGNURBOTIyNDIzNUVCQjFENEMyRkYwCis6MTBCNTkwMDBBNTczM0Q1M0I0OTVFMUI3OTNGMzUzQTdERkM2QkY4QUI0Cis6MTBCNUEwMDAzOUZFRTJENTI3ODNERUZEODhFMzFGQzUwOEM4NzcyRTY0Cis6MTBCNUIwMDA0RkQ2QUU4RTIyM0YzNUVENjZFM0Y5OTJCNEQyNUIwREU1Cis6MTBCNUMwMDBGNEVCQUI2NjdBNTE5QzA3QzBGOUMwQTIzOEYyRTIzMUM1Cis6MTBCNUQwMDBCRThFRTBDM0FCQjY4MUJEN0MzMUM1M0JBODk0QkM2MkQ2Cis6MTBCNUUwMDAyRTQ3Mjk1RDAwRENGMjFBNDM0ODA3MTdGQjZFNTAyMUY1Cis6MTBCNUYwMDAzRkQ1OUY0OUQwNUYxQzZDNTM0OEJDQjhDRkUzNUM4RUVECis6MTBCNjAwMDBGQTMzNDM2NTEwODdGNjY3N0JEMENFRjFDQjk1MzYxN0JBCis6MTBCNjEwMDBGNDJCOTVENDlFMDA5RTdCQTI5RDM3RThDRjU1N0I0Q0EyCis6MTBCNjIwMDBGQzFFMkFCM0QxNzZDN0IyM0MwQ0NGOTFERkQ4MTc5NzU2Cis6MTBCNjMwMDAwMDFGMDZEOEI4MTZCQjZGQjhERkNERUNDNjg1RERGQUEzCis6MTBCNjQwMDA2NEYwNDNDNEI5ODY4MDQzQTQyREI5REUyODNGN0ZDMjhECis6MTBCNjUwMDBFMTEwOTlDOEUyQTlENEJFNzc2MzVDREI0QkU3MDFGRjM4Cis6MTBCNjYwMDBCRTY3RTYyM0NDQkY2RkM3NzYwRkZCOTk3RDU0NDNGN0M3Cis6MTBCNjcwMDAwNzc2OUJCRjI4QjQ5RUU5NTM4RjFBMEYxRUIzRkRDMkY1Cis6MTBCNjgwMDAyRTVGNTkwQTdFNjU3MzlENUIwNTdFQkJFRjY3RDIyQUVDCis6MTBCNjkwMDBBNDY3MDgxNjgyREYxRDVFOEQ3ODIwMTQwRkMwMEYyNDZBCis6MTBCNkEwMDBDQ0ZDRDJFNjk2NTAyNDNFQkQyRjQyRkU2QjA2RkU5M0E0Cis6MTBCNkIwMDA5MERFMzEwRTRGRTkzREMyRTg5REU5M0ZFMUZGODM3QzFBCis6MTBCNkMwMDAzNEU2MUQwQTM5MjBFNDRCQjMzMjMwMDFFODU4RjA0MzI4Cis6MTBCNkQwMDBGMzlDODEwOTAwQjdEMUNBOTM4RjFEOTRGRjgxN0YyODA1Cis6MTBCNkUwMDAxQzgwN0YwNEJGNzg5RTY2N0NCMkE1MkQ1MDA5RjU1QjU3Cis6MTBCNkYwMDA2QTg4QjdEREEwOEZBQ0ZFMTJBQzEzRkM0RTIxRDc0Rjg5Cis6MTBCNzAwMDBGQTQyQzdGRDEwMDdCMDQ1M0IyMUJGNDJDOEUxRTZBNzlBCis6MTBCNzEwMDAzNzRGODg5N0ZGMjZFNEIwRDNDRUU0OUIzMzkyMTI2OTZCCis6MTBCNzIwMDAzN0QwMTc5Q0Y5NzlBNkUwMTdGMzc5NTIzNkM0OEY4RjdBCis6MTBCNzMwMDA5Q0YyQkI3OTFDN0Y3NEY5MTI1OUEwQ0I0MURFRjRBNEIyCis6MTBCNzQwMDA2MDVFQkI4ODE3NTlDN0ZERDgyRjk5RTIzMkMyNkY4MTVFCis6MTBCNzUwMDA3MzA3Njg5RjkzQzVGODI3MjU4QkYzNjc5Njg4Q0Y0NkI0Cis6MTBCNzYwMDA0Q0Y0MUZCMDg1REY4MTNDQTM0NEZBNEJGNEZCNUJDNTZFCis6MTBCNzcwMDBBRkM0M0M0MjhGNUFGMTJGQ0U0RDYwM0Y4QjI2MjU2RUQxCis6MTBCNzgwMDBENzdEODBDOTI3MkIzRDRFRTQ3QzcyMTQ3QzBGREFFRTA2Cis6MTBCNzkwMDAzRkY4MzlENzcwRkNCMjcxNDg3OEEyMjkyRkFFQ0JCNkVBCis6MTBCN0EwMDBBNzMxNUUxQzRDOUM3NzkwODcyNjhFMkFFRkVFNDAyQkFCCis6MTBCN0IwMDBDQkFGRkEwRjlFNjc0QjU2NEYzNEU1NTlCOUQ1NDAxQkI2Cis6MTBCN0MwMDBDNDUxQUI5Q0MxNTIxOUU3NjU3MTJDQ0YxQ0YyMDlFODNBCis6MTBCN0QwMDBFMUM5RkJCQThCMjE3RkM5MUYzMjlGOTc2NEQ3Mjc5QjkyCis6MTBCN0UwMDBDRTIzNzJDMzE5QTY3MjdFNjM5RUE5RkQ5ODk2NDI1MzFBCis6MTBCN0YwMDBGRDM5MUJDRTMzRDUwN0Y1MjlBNjcyNTFENzBDNTNGQjYzCis6MTBCODAwMDBGMURENTVBNkYyQjkwRjVDNkM2QTNGMzFCMkQ4NTRERTU3Cis6MTBCODEwMDBEMkQ2NUIwRjc4Mzk3RkQ3OTVBNjdFNTU3NkFGQkQ5NDhCCis6MTBCODIwMDBDMkI1QTQ3Nzk1Mzk3RkNDMDJDRkI0QkZDQTcxRTlCMDU1Cis6MTBCODMwMDAyOTJCODg3OEFEQjI5QkYzODgyRkQ4Njc4NjA3QTRDQkQ1Cis6MTBCODQwMDAwMTlDMjcxMzNFREU5QzYzNTM0NkNBNkY5RDRDRUM3RkUwCis6MTBCODUwMDAxRTEwRkQ4M0MzRTk4MTM4MDdENDUwMUMzRjUzRDBCOTczCis6MTBCODYwMDAyODVCQ0ZCNTg0RkMzODUzRkE0QkI0NEU0MTdGODlFQTRDCis6MTBCODcwMDAxM0MxRUQzQjlDRkYwNTVDMUM0MzcwQTk1NzQ3ODI4QkFECis6MTBCODgwMDBFMzc0NzAyMTE0MkU5RUFGMEUxN0VCNzg5QjUyOUEzMTAxCis6MTBCODkwMDA0RkY4MzUyODE4RUNFMzgxNTZGMzdEOTg2NTdBMUFEMzcyCis6MTBCOEEwMDA0M0ExMjVBN0IxQTM1OTFDMzg5Q0M0Q0UyQkFERjVGRkVECis6MTBCOEIwMDBDOUUxRjIyMTg1MDlFMjYxOTQ3Q0ZEMTZDNzQzN0YyMjJDCis6MTBCOEMwMDBCRURFRjBDOUMxNkM5MERGQjUwNEZENjY2RjRCREIyN0FGCis6MTBCOEQwMDBBMEI3QUVCNjQ3MDlEMEZGN0Q3QzNGREI3OUJFRTgwMzU5Cis6MTBCOEUwMDBBRDVFMUNFNzQxN0UxRUY5NTA2QjAwN0Y3RkI4QjUxODM2Cis6MTBCOEYwMDBCRjkxNTYxNTdGRUY2OUFEQzBFRjRFNkFDRkMxRjcwNzE0Cis6MTBCOTAwMDBBREI1RjhEREQ1MUFDMjc2M0Y2Q0FEQzdFRkVFRDYzMEQ3Cis6MTBCOTEwMDA1QkQ3MzA3QzkxNzJCNDczNDI5OTcxRTNBNUQ3RThGMjlBCis6MTBCOTIwMDBBOEYwNDRFNDgyQjhGQTMyRTEzODcyQzM4OEY5RTUxQjIyCis6MTBCOTMwMDBGQUE1Qzc5RjM1RjBFRjVCNTkxRURGNTFDODZEOUM0RUNECis6MTBCOTQwMDBBNkMzRjlFNkU5RkE3RkRFNEExRTdGNzZGQ0U4Rjk0OEVECis6MTBCOTUwMDBEMDEzMzk5NTM5MjExRTVGODc3OTVFRTU2M0RCNTdEREFBCis6MTBCOTYwMDBBNTRGNEEwQ0FGMTg5REM1ODc1MzlERjNFMzNDNzBENjk1Cis6MTBCOTcwMDAyNzgzQ0Q2MEU4MkZFRTlGODg3MjVEMzgyREFFREQ5MDc1Cis6MTBCOTgwMDA5N0NERjQ2RTdEMTIzQjhGNUY2RUUxRUY2RjY1MzNGQUZBCis6MTBCOTkwMDBGRDU2MzZEMzc3QkY0QjIwNjdEMjc5M0Q1REE3MDNDRkU1Cis6MTBCOUEwMDAwNzg3RjFERDNEQjNFM0MxRjdBRUVDODAyOTJGQzU3QUZGCis6MTBCOUIwMDA2RkM1M0FDRUVGMUNERDYzRDQzODdDNzZCQTcxQzRGRTE1Cis6MTBCOUMwMDBBQ0ZEQUVFMkZCRkY2NjM2NjFFQkZGN0ZDNjlGQkZCQkZGCis6MTBCOUQwMDBDRTgzRkUwM0MwQ0Q2RkQ4RkZFRkFFNEJBOThGMTc5Nzc0Cis6MTBCOUUwMDA2OUNGNjZFN0ExRDQzQTI3QzEwQzM0RjU3NTA1NkNDNTVCCis6MTBCOUYwMDA2MjEyNjBFN0JFRTNCQzEwMUYxMjc5MDE4OUU5RDU4RTlGCis6MTBCQTAwMDA3MTI0ODRBMTNDMUNBRTE0MUYwMUE1ODg4RTZGMUY5QTVGCis6MTBCQTEwMDAyNzZBODc3OTU0NUI0Q0NGNDJBRTBEMzFEQ0ZGOTA4N0FCCis6MTBCQTIwMDBEMzAzRURBRjJCOThENzMzOTAwN0VCM0I1MzdBMjJGMjM5Cis6MTBCQTMwMDA0M0UzNDczQUE3MUJENkZGMENFNUNDOUFFQ0JGQUY5QzdCCis6MTBCQTQwMDAxMTdDNEU0RUREM0IzRTlFOUVBQzg3Qjk2NzUwN0JFQzMxCis6MTBCQTUwMDBGRTg3OTg5QzM5Q0RCODY3MEFCRjdBNzkwMENGQUY0Nzg3Cis6MTBCQTYwMDAwREJGN0RCRTUxQzVBNTNFNzdBNTRFMjZENEFGREJFMDA4Cis6MTBCQTcwMDA2NERGREI5MzUzN0JFMEZCQjk2QjZDODRBNDUyN0U4MTYzCis6MTBCQTgwMDA3NTUyQkVENUFCMDhCQkJGRjU5NkYwOUI1QUE2ODNCQ0RBCis6MTBCQTkwMDBERDlFMUI3QTMwOUI4RUIzNEE2MUZFRTI5RkIyQjRFRjBCCis6MTBCQUEwMDA0MzM5OTk5RjBCMjdGMzczNjEyNTVCRTk4NDMyRDE4QTZGCis6MTBCQUIwMDA3MTVGMTdGMDdENzVEQTAyNjM2MTVGRUY0QkVBNDRGMDY2Cis6MTBCQUMwMDA1QkJDQjY4ODBBREY1NDEyMkQ2MUY5Nzk5MTMwRjg2QkFFCis6MTBCQUQwMDA5OUU3MjcwN0MwREY0RDlFNDA0ODFGQzZDNzU1MTdDNENBCis6MTBCQUUwMDBEMTk0OTRDMTE3QzcwMUZGRkZEMjg2RjdBMjFGRjdCMjA2Cis6MTBCQUYwMDA3NTNFRkU0MDNFOUVCMzUwODE4RkYyNjIzMkZDNEVCN0RGCis6MTBCQjAwMDBCMjA1RUM3MkRBRkZGQjUyRjg4OTZDQkFBRkUzNUVBN0JDCis6MTBCQjEwMDA2RUEzRUI5QUJDRjlCRDhDMENGQUZCRTNGQkFCRjA1Q0JCCis6MTBCQjIwMDAyMUJBNEJENjE1QjhERkQwRjdFMTc3MkZBMUUzNUREMDZFCis6MTBCQjMwMDBFN0MwRjhGMzA1NDQ0NkY5QkVDNjRFQjYwMjFGMjU4MjlCCis6MTBCQjQwMDBFRjA3REY4ODlGMDdFNkM4OTE0Q0Y5NURENkZBRjdCOTkxCis6MTBCQjUwMDAxRUY4MjA0MUJFRjE2QkJDNUVFNENGMzg0NEZFOEM1RjIyCis6MTBCQjYwMDAxQjMxN0ZDNjYxQzk5RjcxRDg0MzA0Q0U4NTFENDNGOTNGCis6MTBCQjcwMDAzMzBEMDRGMzY3RTgzOEM2RkM5OTBGQUFFMkFGQTM5RjIwCis6MTBCQjgwMDBDQjczQzcxNzI5MDlDNjREQzVERjNGMjgxQzc5OUY4RTg3Cis6MTBCQjkwMDAyRjVDQTY3Q0VDNTg3RjM3RkU5RTI4N0ZFNzMzMDFBN0Y5Cis6MTBCQkEwMDAwNEY5NEI5RjBDQUQyRjk3RTg5OUM2N0U4Q0VGNjJGMzlBCis6MTBCQkIwMDAxNDYwQkRDMzkyMDcxNEFCNjdGOTNGMURFOThDNEUwRUFDCis6MTBCQkMwMDBFNDc4N0REN0QwQTFBRjIxMDM3ODlGRjM2QUI3Q0YwMTg2Cis6MTBCQkQwMDBGMUE0MTA1MUY3RTBGRDFFQkI2MzcwNDBGMDYxMjFCNDg5Cis6MTBCQkUwMDBCM0JGMEI3NkI3OEQ0QTVFQjBCQkFGREVFMDc4NzdDMEVGCis6MTBCQkYwMDAyMEI3MTY2OUU2MzI4MUY2MDYzOUJDMTg2MkQ4NzQxRjgwCis6MTBCQzAwMDBDOUU3MTU2M0ZFREZBNzI0OTBFNjFENDE4RTM2MzhFNUFGCis6MTBCQzEwMDA5MEREQjA4RkZFMDQ3NkM0ODU5QzBFRkI3M0UzQzNBRjRBCis6MTBCQzIwMDAzMEM3NjZDQTYzMUFERTlGRTcwM0YwN0I2OEI3N0E0N0JFCis6MTBCQzMwMDA5NjlGMDBERjcwQTY3MTdDMkIxRTdDNTg3RjNBMzhGQkU0Cis6MTBCQzQwMDBFMUIwMERFMjZBOTUxMkNCRjNGRjlCQzMzQjlERTdCQkNFCis6MTBCQzUwMDBCMUZCMDMwRTRCQkVGQUUyNUNFQkJBNTlCRUZBRkRFOTRBCis6MTBCQzYwMDBBMTk5MzlEODJGMzBDMTc4NUY2MEFGNUQ0Qjk5NDJCRjQxCis6MTBCQzcwMDBGRDVDRUU1OEUxQjI4OUMzRDlCQUVGQkQzQ0VGM0U1OTQ1Cis6MTBCQzgwMDAyNjJEN0IwQ0YwQjdFRUY3MUIzOThDQ0U0NUZCMEUwNzRCCis6MTBCQzkwMDAzQkNGMDJDMUU3QTQ3MjZGMDU2MTcyNkY0NTRFMjFDRkExCis6MTBCQ0EwMDAxRjRGQjcwM0JFMUFEODEwNjQ4NUY3MTA5RTJGMDkzOEFFCis6MTBCQ0IwMDAwRjgzMUY4N0JCMTU4RTIxMTI1ODA5RjlEREE3ODNFNzczCis6MTBCQ0MwMDA4NjVDNkQ0NTBFOURGNzlBNTc5MjE1OTBGRjJCOUQ4M0NDCis6MTBCQ0QwMDAwN0MxNjcxREU4QjMxRDFFNDdCRkVGQjhDNzFEREQ0OThCCis6MTBCQ0UwMDBFMDNDQUVGOEM5NjdFODM3QjU0MjY1NzkxNTY0MUVEQUZECis6MTBCQ0YwMDAzRjkyOUUyRjdGNzlGRUU4RUQ5RkNFRDQ3MDMxRjBDNzQyCis6MTBCRDAwMDBGQjNDM0Y1QkU4QTVDRUJDMTMxMzIwQ0ZGRUJEOENDQTI1Cis6MTBCRDEwMDAyOUI5N0U4Q0MzNkI5OTQwNDczRjRGNjI3NEY0MDAxRDc0Cis6MTBCRDIwMDA4OTk2RDdGRDYyMjJERTg3QkYyQTM3QUM0MjNCOTFFNzc2Cis6MTBCRDMwMDA0N0I0QzEwOTkwOTc3MEE2NzBBMjdGMUM0MDQ3QTc4M0EzCis6MTBCRDQwMDBEMzlBMUNDMkY4MzEzNTNFOURGNEU0QjBGOERGRTlGODJGCis6MTBCRDUwMDAwM0VGQTE5NUZERkRGODQzQzA1MzlDNjM4OEY1QTlCOTk1Cis6MTBCRDYwMDA4QzBFQzU1N0MwQ0Q5QTRGQTRFNkRBNzgzQjk2QUY3OEQzCis6MTBCRDcwMDA1NTZFMDhFMTdDNzJDQzI3NDc1RDc0RURGRDRBRkNGN0Y3Cis6MTBCRDgwMDAxRDlFMUNFNUZFMDVCQ0ZGNUU3MkI4M0YzOUZFRkE1RUUzCis6MTBCRDkwMDA0Q0MwQzdGRkE4RjU0RENERTVGNDMzMzlGRUZBREUxRUUxCis6MTBCREEwMDAyNUZDNDI2NEYwQURGNEJGODMxRUEzNzg5RTBBNzgyNjdBCis6MTBCREIwMDAxRDgzMjgxRkZCMzNFMkFGRjNBRkEzNUU2N0Q4RjFGNzEzCis6MTBCREMwMDBEMEI3ODJCRTg5N0U0RDIzOUVERkU3MjRDNzNEQkY1RjhCCis6MTBCREQwMDA0NkZEMjlGMDg3QUNFN0Y4RTJCQzlFQ0EwRkRDNkY5REY4Cis6MTBCREUwMDA3MzcwNjUyNkUwN0QxRURGNzcxNjg5QTZDM0Y5RTYyRkZFCis6MTBCREYwMDA5MkYwM0M2MDk4OUVFNEZDNDFFMTk1OTIwQkZBNjRFMTdDCis6MTBCRTAwMDAyMEM2MzVGQTI3QzQ5NzBCMjlCOThDRUU4NkRBNzdCMUFDCis6MTBCRTEwMDA3OTEyREQ0M0M4Q0M5NTQ2NzUwRjgxOTQ4NTMxMUU1ODQzCis6MTBCRTIwMDBFOTc0NDc2NThBODc1QjM4M0U5NEZDOUI1NEIwMEYyQkJFCis6MTBCRTMwMDA3MzVFM0EwMkZCQTRGMEZGNzAwODlFODZGQ0JFMTNBRDUxCis6MTBCRTQwMDBDRjdCQzczOTEyQ0JFRDM1RjIxM0U1MkQ3MUY2MzMyMUQ3Cis6MTBCRTUwMDAyQjNDMjFENzEwNkY1Q0IzRUIwNUVGMzgwM0JFNEFDODBCCis6MTBCRTYwMDA4MDhERERBMzFFQjQ5OUZDRTQ2QzcyNDY3RUYyN0UxN0QxCis6MTBCRTcwMDBFMzk3RjczMjQyQTgwRjQwM0Y4MERFRTk3Q0ZBQzI1MkQ2Cis6MTBCRTgwMDA0MDI2RDgxOTkwREYzM0U4NDk0NjM5REE5RTM3QTMzODdGCis6MTBCRTkwMDA2MDgwNjc2REFFQjAyRkU1MDQ3NkUzRDdCQjFGMTBCM0FCCis6MTBCRUEwMDA5QjI0OTNGRDFBMUJERjhFQkYwQkZDNTRCQTVGOEM4QjU3Cis6MTBCRUIwMDA4RjA5NTlEQUE1MDBDRkJGNjQ2ODk3QzFENzBBM0ZGRDQzCis6MTBCRUMwMDBDRTU5RTk3OEZGMDBFMDM3MzczNkRFMTBGRTEzRTBGOThGCis6MTBCRUQwMDAxQjU5NUEzREMwNERDRDBDQjBCQzAxOTFENzM3MTRCRjkyCis6MTBCRUUwMDBCMDdCOEYzQTYzRjAxRTJENUU5Mjc5N0M4RERBMERBQkJDCis6MTBCRUYwMDA2MUJENEExMkU3NDdFMkM2N0JFNEMyNkUyMTE2RkI4NkFCCis6MTBCRjAwMDAxNDMzN0Y3NzQ1Q0U0QkZGMDNGMTlGQ0U1NEM2QjI5RENECis6MTBCRjEwMDBGRkU0NDIzRkYwNkFDOUFCQzBCRUE5RkRGMUU2Rjc2OTk0Cis6MTBCRjIwMDBGQjMwODlCRUY5MkRGNDBGODU5RDkxMjI3Rjk5MzJGQTVECis6MTBCRjMwMDA3NTBBRkZGOTc0NzlENkNGODAzRDQ2RDc1MzY1NzNFMzEwCis6MTBCRjQwMDA3OUU3MzM3NDdGQjk1NDZFNTQyOUVDNUIzOTlGNTIxNUVECis6MTBCRjUwMDAxREFGNEEyRUQ4M0Y0MEQ3RjUxOTM5OTUzQzlCN0VCRjdGCis6MTBCRjYwMDA0MzE4MUNENkJGRjI4NzBDRjA0N0FCRUM4RTEzNDZCOUQyCis6MTBCRjcwMDA2NThEN0ZEQzk1NkI4RTdGN0M0NjE2RkVFNjdDODBDQkU0Cis6MTBCRjgwMDBBQzBDODRDQkU0QTdFNjY1MUJFMzJGNDNGMTBGQkU4RjE3Cis6MTBCRjkwMDAyNUZBMzU0QzlFNUFFNDlDOTA2NzM2Mjc3QjZGODQ2ODVGCis6MTBCRkEwMDAyNEUwQ0RDMjM4MTI4M0JCMkVFMUZCNTdCMzQ1MTk5QzY4Cis6MTBCRkIwMDAxNDVBOUVDNTkxMjQ0MTdGQkFFRkQ5RkM0QjU2ODU3MzI0Cis6MTBCRkMwMDA0MENFNDA1QTBGQ0M0N0JEQkYxQ0Y4QjY1RkE4MDZFMDc0Cis6MTBCRkQwMDAzQjU3MEFEOUQ5M0EyMjJDMEY5MUI0MTQ0MDdCOUI3MzVBCis6MTBCRkUwMDA0MDg2Rjk0NUJDMDI1NzkyMDVFMzg4Nzk1OUQ5QzNDQkZECis6MTBCRkYwMDAxRDc1OUZBRUJDMkUzMDNDQUU0MURDMUVCNDdGMTVCRTFECis6MTBDMDAwMDBCRUUzNUVCNzZFMzNDNDNCOTJEQ0QxRTM5OEJGQ0FCRkQ4Cis6MTBDMDEwMDBENkI4QzdFREIyQUU0M0ZFNzYzMkU5NDU3OUU5NzY3RjEwCis6MTBDMDIwMDBBNDAzMzBCQ0M0MkI0MUY5RkI1MkY4RTdDMDE3NDc5NTc1Cis6MTBDMDMwMDA2RTEyQTRCRjlGRkNGOUU3MDRERjY1ODMxQjYyNDVGMDI1Cis6MTBDMDQwMDAzNUVCMjdCRjdCM0RFNjQ1RkI0Mzc2OEI1RTBBNEJDMDU1Cis6MTBDMDUwMDA0N0Q5RjVENkRGQ0RGQUNBNDlGQUYxRkU5MDE0MERFNUJECis6MTBDMDYwMDA3Qzk5NzlGQTc4NEVBMjM4OEVBMzhBQTE3RUYwNDY2NjMyCis6MTBDMDcwMDAwRjFGNEU2NkZEMEYyN0IzN0U2RjcxQkRENDlDQTExMEJDCis6MTBDMDgwMDBDQzhCQzk3MjNBQzE5RUZGRDg3MzBDQUU2QzgyM0VFOTZDCis6MTBDMDkwMDAwMjdERTI3NDY4ODg1N0ExNTdENkVFQkQ5OTAwREU5QUZBCis6MTBDMEEwMDBGNzJENDIzOEZDNUU2MkU3QTRGQTBBMDlGMzE5QzRCQjEzCis6MTBDMEIwMDAwRkY1OTNDOENCQjQyNzk5OTFDN0ZDOTRBNUNGODc1N0E4Cis6MTBDMEMwMDAzNEQxNzJERDRCQTQyNDRBREI5NUNFMERENUMwRkIyRUI2Cis6MTBDMEQwMDBFRDI1NDRERDQ0Q0JFREFFRjA4RjdFMDJGQjc4ODVCRENGCis6MTBDMEUwMDAzN0I2OEVERkFCQTU5ODU4QjM5QjhFQkZFM0NBMzFFQTUzCis6MTBDMEYwMDAxNkQ4NTJGNTYwMjdFNDBCMEQ2RTI2NUVDODJGMTk0NjQwCis6MTBDMTAwMDBCRkE3MjgzRjUwN0E3ODA0Q0E3NERERUI1Njg3RkZFNTU1Cis6MTBDMTEwMDAzNkRBM0VGNzI1QTI2MjFCNUUwRjNFMEFFMDRGRTI3NDVDCis6MTBDMTIwMDAwMUJGQ0ZBNUJGQUZFMzc0NTRCNDVGNjJFN0ZDM0VGNjM2Cis6MTBDMTMwMDAwRTE4MEUwRUVGNzQzOUQ5RkZBRURCNUY3OUY5MzRCQTAxCis6MTBDMTQwMDBBRUEyQkVBOTQ4REVFMzY4N0JDODgzODI0QzA0RDY5RUJCCis6MTBDMTUwMDBEOEUyQjUxRjA3RUQwMzcwQUVDRkYwNDNGMjE0N0MzRjc5Cis6MTBDMTYwMDA4OTcwRjkzN0REQzI4NzMzNjNGQzgwRjVBNUJDQkM4RUNFCis6MTBDMTcwMDBFQjI5MTNERkMwMzhENDZGRDdDQUQ5QjEzRkY2RjMzMUZBCis6MTBDMTgwMDBGRTUwODlGOEMzRjg3OTA2ODlGRDgxNzFBQjYzRjNBMDhECis6MTBDMTkwMDA1QzlFQzdFQjBFMkU1RjgwRjlERkQzRUREMTAzQzBFRkJECis6MTBDMUEwMDAzM0Y5Qjc5NDdGODFERjlEMTQ4RTU3RDg1QjBFRkFFOTdGCis6MTBDMUIwMDA3RUQyMzcxMEI1MEQ2NjY5MDhCNEMzNzg2NTI0MjQwM0IwCis6MTBDMUMwMDA5Q0NCQkQ5QkRCNjE3RDE3MzZCQzkyMDlGNDc1NzM1RTE5Cis6MTBDMUQwMDAxMUQyREYyQ0E3NUFFNEEyMjREMjVFQTFBQURFMjI3OEQzCis6MTBDMUUwMDA2RjRDNDJCODJDQUQ3NzQ2MjBDRjZERTlEMDdCM0ZFMTU0Cis6MTBDMUYwMDBFMDMyQ0EzRjU3ODQyNTdFMEYzRjFDNkMzMEM0NkQ0NTJBCis6MTBDMjAwMDBGRURGQjIyNEVBNUZDNzkxREYzN0U3MzFGRDJFRkFBRkQ4Cis6MTBDMjEwMDBFM0Y3NTM0NEZEREEzQzM3Q0JDRkNDQkI2ODQ2MUU5RUQ4Cis6MTBDMjIwMDBDN0IwQkM2OENBRkZCM0YzQTZDNUU0MEE5RDE3RjM1NkFFCis6MTBDMjMwMDA5NjEwQ0QwMUZCNUFDMkY5NTdGMEZGNTJFRDU2QjQ2Nzg0Cis6MTBDMjQwMDA5Nzg2Q0M3NkU5RUYyNTg2NkY3REI5ODQ3NkUyMTVGNTgxCis6MTBDMjUwMDAyM0RCQUQwQkYzQzRCOTcwODExN0Y1MDAxMTdBOEFEMUQ1Cis6MTBDMjYwMDA5NTkwRTc4QjQxQkY4MzFDQUVBNUZBREM2MDM3MzdEQ0M1Cis6MTBDMjcwMDA3RTJBMURGQjY1RkY2MEVEOTdFN0M0RUVDM0FDQjNEQzFGCis6MTBDMjgwMDA4NzY5RTZGNzYxRDZFRDZCNzM2NDAxQkRGM0ZCMzBFQkI0Cis6MTBDMjkwMDBGNkJGRDM2OUNDMDMxNDcwMUE3RTFGNjYxMEYzMUY5Nzg0Cis6MTBDMkEwMDAyOTkxMDM3MDRGNjhEOTRENzQ4RkI0RkRBRkY4RkQ4OUEzCis6MTBDMkIwMDA2N0UxRkVDNDk0MTgxRDc5QUU3NDQ1NTk3RTlEODY3OTU4Cis6MTBDMkMwMDA3RTA1REUxNDE1RjI1MkJBNkM1MzMwQUZBODJCRDVBM0ZECis6MTBDMkQwMDAxQUYzNzhCNkI0QjVENDQwM0I5MTRGMjRFRUJGMkM0QjQzCis6MTBDMkUwMDA3MDZFRkNDRDNDNjYzRjZGOTc1ODVFOTdCRURDODlGMDYwCis6MTBDMkYwMDBGNkNCRTQ4OEYxOUVCRkJGMjg4NEY5NzQzM0YyMDIzODhDCis6MTBDMzAwMDBDRjc2MUU1RjgwRkNEM0E5RjQxQkExNjYxQUMzMTdFQjdFCis6MTBDMzEwMDA2Rjk1MEY3NEJDMEUxOEFGQkE0OEM1M0M5QUVBMzQ5NkI0Cis6MTBDMzIwMDA4RkU2Q0YwQzk1REUzMjI5MzY2RUREN0U5NkJGNTcxNzJECis6MTBDMzMwMDBGQUU0MTBDQkMzNUQ1NDA2RjA0QzI0RDdBREZBOEJEMjhGCis6MTBDMzQwMDBERjNENDA4RkMzRjU1NkI4MTlFOENGNTExNTVBN0UxRDExCis6MTBDMzUwMDAxREY3RTRDQjBBRTZEQjkxOEQ5QUU0QTBFRDdFRkM4MjJBCis6MTBDMzYwMDA1Nzg1N0I3ODFEOTVBMTQ1MzU1ODZGQzc3QjgyNTlGNTU4Cis6MTBDMzcwMDAyNDlBNDRFQkNCNUU1MjdBMjBDRkFGOTE3NDJCMzA0RThGCis6MTBDMzgwMDBBMzQ1OEZEREU0N0U1NjAxM0VCRDY5QTcyMzQ2OTcwNDkxCis6MTBDMzkwMDBGMjEzRDUyMjEwNzg0REJCODdDNTQ1NTAwRTA5Rjk2NEJDCis6MTBDM0EwMDBBNTY3MzJDRTJDODc0QTg1RENBNUYyODFFNUY3MzUzMENBCis6MTBDM0IwMDBCRDQ3N0UyMDQxN0NFOEE0RTc5OENDRkQ2Qjk0N0JEM0ZECis6MTBDM0MwMDA4NEIwQjJDOEZCNjlGQjlGNDM3QjQ2QzA3MzBFOTUxN0QwCis6MTBDM0QwMDBFMEM3NDlGMEZCNjRFQzg3NjUyQTRGOEIyMUVGNzQyNjk4Cis6MTBDM0UwMDA0OTQ2N0ExQjY2NDdGMEY1OTUwREFEOUZEOTRENDI0RUYzCis6MTBDM0YwMDA1NjU2MTAwMkVGMjM1OEYxNDNFNzQzM0ExN0U3N0Q3MDkyCis6MTBDNDAwMDBCNDAyRTcwODMzRjlGQzlGREJCNDQ5RDEyMEUwOEI0NDQ4Cis6MTBDNDEwMDA2QzE0Q0U5RDUyMEJFQTFEMjdFNDgxRDJFRjE2Mjk4Q0I1Cis6MTBDNDIwMDA3MkYxQTdCQTJFMDM1QzJGMjQyRDRCMTYwNjExRUYyRkE1Cis6MTBDNDMwMDAwMURFNjczOUZCNTIwMDBGNDcxNUQ1MDlGNTM1OTAzMEZECis6MTBDNDQwMDA4ODVGMzNCRUU2QkJFRkIzMDNCQ0U2RTc1OEYxQTJEQjdGCis6MTBDNDUwMDAwMUJFMEIwMkMzRjA4NUY3MEJCNDA0RjhEMjg0NUMyMTUzCis6MTBDNDYwMDA2NkI5MTIyNEE3RDhGREU2Q0Q4NzZFMDNGRkY4NzRGNkVGCis6MTBDNDcwMDBDOUY3QjJDMjQ3RTNEMUFGQjA1MzEyRTVFNTlERTRGMjhDCis6MTBDNDgwMDA3OEI0Nzk3OTI3MURDQ0FGOTg0MTA2QUVERjJEMERBNzgyCis6MTBDNDkwMDA5MzhGMEY2RTkwNzMwQ0Y0MjRFOEY0Njk5RUE3MkZGRDIwCis6MTBDNEEwMDA5MkU3RkQ5Njc5NTBGRkM1RjQyNUEzODM3MjVFOUEwMTQ5Cis6MTBDNEIwMDBGNDY1QTA4M0Q5RkI1QzUxOTlFRUIzOTRGNzlGMDFGNDI2Cis6MTBDNEMwMDAzMDI1QTYyRkEzMzY3NzQwMjkwNEJDQUI1REIyM0NEQ0Y3Cis6MTBDNEQwMDA0RUNFQ0EwODIwRkVBN0RBMzRDNEZGMzRFQTgxNzFCQjBECis6MTBDNEUwMDBEMzlENEZGNzVGRTFFQzZEQjcwNzEwRkZERjA3RkZBNkE1Cis6MTBDNEYwMDA5MjA0MTBGRjk1MTZCRDUzRURBRUIzMDM5RDU0M0JBREIyCis6MTBDNTAwMDA3OEQ2MTBGRjM1REU2MUJGREJCRTBBRkVDRjAxRkMwQjIzCis6MTBDNTEwMDBCRDMyMEFGQjk0RTI3RjQyRkUwOEU3OEQ4OUYwN0Y0MTNECis6MTBDNTIwMDBCRUZCOENGMjMyMDVGRUFENzgxNzcyNjA4RkNCNUJFREVGCis6MTBDNTMwMDA4Njc4NzAyM0NCNEI5RUZBRjJCODc2Mjg2N0FEMERFMjcxCis6MTBDNTQwMDA3RDk5M0RFOUVBQUZCMEJFODVENTk3RjU2OTMyQkNDRjlDCis6MTBDNTUwMDA1OEI0OUVENkQzRjI5RTYwQTgxQUNBRUIzNjQ4Mjg0NzM0Cis6MTBDNTYwMDBBN0JEMTY2RTg3RjJCODhEQUNCRTc0NTNDQkFGRTA5REZECis6MTBDNTcwMDBCMzc1M0FFQkZGRjRGMTRFN0NBRjIyRDJDOUZCNTc3NjhDCis6MTBDNTgwMDA1NzQzNzk1RDE3RUJGRjQ3OEY1MzA3QkZCQ0ZDNDhBNEE3Cis6MTBDNTkwMDAxRDdFOUZCODk1QUQ0M0Q4N0Q3MzM5QkRFRDkxOUVGODUyCis6MTBDNUEwMDAxNUY2RUI2NkZENkUzOEU0NEM2NkZFMTJCM0UzRTZGMDdBCis6MTBDNUIwMDA3RENFN0Q4OEVERDNGN0RFQzVCNTAxMEFGN0VCMDY3NUI0Cis6MTBDNUMwMDAwN0NBMEQ1QjUzMzlDQUQxMDQ3RTVBQTVENDVEMDBERjdBCis6MTBDNUQwMDBGOTU0NEUxMEM0M0JBNUQzNDI5NkI3REE0M0E3NTg5M0ZCCis6MTBDNUUwMDBDRkVDMjY5MUVGMDk3OUU3OEIwQ0Y4NUE5M0NGRkMwODMyCis6MTBDNUYwMDBEMTJFMkI4M0IwRkNFNDA3RDlCQkIzMjIxRjM1N0EzRjgxCis6MTBDNjAwMDA5MTIwN0UwMDdCNDRGRDlCMjAzRjc1N0U1MTBCRUFEMzM5Cis6MTBDNjEwMDBGOUU3ODhCQ0Q0MDFGQjJBM0E2RkU5OTc3RkJBMjg5RUQ0Cis6MTBDNjIwMDA1RjdFNEIzRUIzOTM4RUYxM0M3QUYxN0I2MzI0NjgwM0NCCis6MTBDNjMwMDBGRjY0MEYxMDBGQkUwMzE0N0QxOUVDOTYzREYwQkU5MTAwCis6MTBDNjQwMDBFMTFEOTIzRDQxNTZENkYzRjdERkRENDU5RERDMUI2Q0M1Cis6MTBDNjUwMDAyRDc2MUQ5NEMwNTgwOURGNTVCOUFDOEY0NEQzNTI4NzRECis6MTBDNjYwMDBBRjdGQkU5RDQ0NTlGRTA0NUJGRkY1RUQ0QUNGMTY4M0I0Cis6MTBDNjcwMDAxREJGNTQ4ODhGNTlFMzUxQUZENDcxM0MwOUI5QjE5NEFGCis6MTBDNjgwMDBFMzhCRjJGOUU2N0NCQUZFNjVDRTE2QjQxQjk3MTNBNkNGCis6MTBDNjkwMDBENzZGMjQxMThDNkZEQzY4RTFGMzM1RUUzRkJGNjVCM0QzCis6MTBDNkEwMDA0MTFDQ0RDQ0NGNkJFOTcyRDhGOUZBRTBDM0JGQTNGMDNGCis6MTBDNkIwMDA2RjdDQzBFMzA1RkRCRkI2RDdEQ0FFRjE4MTk3OEYzMDRDCis6MTBDNkMwMDBGQkNCQ0NFRjhEODJERjIzNjY3RUE3MDYwNUUzRjdGQjZECis6MTBDNkQwMDBDRkMzNzMxQjcxM0ZEMEU1MUM3QzRCMjdCMUZEMEVFOTI2Cis6MTBDNkUwMDA3RDBCRkZCOUUwQkU2MDMxRjgzNTM2OTZBN0M4Q0I2MjQ2Cis6MTBDNkYwMDBERTRGQkI5OTVFRDZBOTVFRTY3RTEwOEFEQzRGRkIyRjJCCis6MTBDNzAwMDBDMTdDRjg1MkExNDdCOTlDMTFGQzVDQ0FGNUZDMzAzREQ0Cis6MTBDNzEwMDA1RTZCRjU3N0VFNDMzRTk5Q0E0QjU2RkQyREY0QjZCOEU1Cis6MTBDNzIwMDA4NzQ4Qzc0NUZENERGNUY1Q0IxQTVENkY5RkNEMUQwMUJGCis6MTBDNzMwMDA3OEM3RjQ3NjA0Rjk2ODhBOTNDQTZCMUJFMkVGMDBFMENECis6MTBDNzQwMDA2RjFBQzc1QjNCRDdFQjA5RkQwM0Y3RkFCOEZFMDFGNTlCCis6MTBDNzUwMDAzN0YwMUM2MUI4NUYxMDM1RDlGQkMzQ0UzMTEyRDhGRjVBCis6MTBDNzYwMDA0Mzc4NzM1MTdCMkEwNUZDN0RDMkVDRTIzQzMyQUEzQzQzCis6MTBDNzcwMDAxMTJBQjdERkNDMUY0MTZGMkJDRkIwREYwNzc3QjgzMDVFCis6MTBDNzgwMDBCRTIwRTJFQzgyRkY1RTJGNjA3NkY4QjY1Q0VEM0Q5MDU1Cis6MTBDNzkwMDBGRkZEN0NCRTdFM0U3RUZGQ0RGM0YxRkNGQkNGNDRDM0FDCis6MTBDN0EwMDBGMzZGQzg2N0NBOEY5MzdGMDFFN0RGMUQ4Njc4Njk3RkMzCis6MTBDN0IwMDA3QUZDMzhGODI3NUNGRTk0MTYxMEZDRkVDOUFGN0QwQTlGCis6MTBDN0MwMDBFQjNGQTZCMDM4RkJCMTY0RkU0RDY1RTcxNEZGM0JENEU4Cis6MTBDN0QwMDA5RUM5OEY0Q0ZFMTVFRjkxMUZDQjMwQzdFNzQ1M0IzRkZECis6MTBDN0UwMDBGRkJFREZFQTBDNzUxOEUyRTE4MUZCOTM1QTQwOEZGOTM2Cis6MTBDN0YwMDA4Qjc4NUVGQzdBNDZDNzI3OUY0QURGNjE3QzI3MkU1MEU0Cis6MTBDODAwMDA1MDU5NUEzMDBEREE2OTRBMkVDNDY3OUU2MkZBQTJEOThECis6MTBDODEwMDAzRUEwQzBGQjNFM0U3RjM4QTVDMDBGRjc5Qjg4RjYwNEM0Cis6MTBDODIwMDA4QzEzMTg1MDk2NTA3ODlGRTRFN0ZFMjdGOTdCNDAyNzM5Cis6MTBDODMwMDA1REVDMkJENjE1Mjg1ODU0MEFGRDRFREUzQzgwNzI2MzAxCis6MTBDODQwMDBBOEJDNjgwMEU1NDJBMDIwODRGMzlFNUMyQUVBNzlGOTNFCis6MTBDODUwMDA2RTU2MjZEQ0FGQUNFNDdDODI3MUUzMzg3MUUyRTE3MUE0Cis6MTBDODYwMDA2MUYzN0IzN0VCOTRGOEU3RDVBNEMwNjM4QUY3QUVEOEMxCis6MTBDODcwMDBDRkUyOTAyQjlEQTQzMzlGRDY1RkJEM0YxQkZEOERDNjlECis6MTBDODgwMDA1NDdEMDJEMEMzRDc4REUzOUUxQ0QzODdGQkRBNTIzOTg3Cis6MTBDODkwMDAzOEY2QzEzMjNDMTdDNjc4RDFEQUZEQ0ZBMUZDNUIyQjRDCis6MTBDOEEwMDBGODY2QUY5OTZGNjYxNzhDRUUzQ0M1MUE2NzFGMDUzRjk3Cis6MTBDOEIwMDBDRDJGMThDMTBFN0ExMkY0OTcyMzg2ODc1Qjc4N0U1M0FBCis6MTBDOEMwMDA4RERDNTQwRDcxQTU0RjU3MTNCQzY3N0JDQjBCMzJEMjU3Cis6MTBDOEQwMDBENTJEM0Y5MkYwREQwOTYxQzdBREU1NzA0RUI0MkZCODlDCis6MTBDOEUwMDBBNzEwMzBDODE1QjhBNzEwMzBGODc1NzA0RkMxNTg4NjFBCis6MTBDOEYwMDA3QjBBQzZGNjcwNEZDMTU4MEZGNzE0OENGNTcwNEZDMTA0Cis6MTBDOTAwMDA1ODJFMjVEN0I2NDM5QzZFNUQxN0YxNDYwMkVDREU4MkE5Cis6MTBDOTEwMDBCMTNGREM1QjMwOTZFMURFODJCMTNGREM1QjMwOTYzRkJECis6MTBDOTIwMDAyNTBDNkU5RjNFMjQ2M0ZDMUZFRTJGMThGQkRGRjBDMjI4Cis6MTBDOTMwMDA4RkNCQTNCMDZEMTdDQjUzNkI3NzUxRjgwMzFERUE1QTE5Cis6MTBDOTQwMDBERjI0MEE5RkQ1MUMzRTcwQkZDMTM4RUUwN0E5MTczREYyCis6MTBDOTUwMDAwRkY4NTlERDc3RkQ0MkY4NUVCMEVGMjZEM0I4QTQ5QkZGCis6MTBDOTYwMDBDOUUzMTZGQTE3RTA3ODNEMDlBNTgxM0YzNzg1MEMxRTBCCis6MTBDOTcwMDA4Mjc4NDc3MzQ0NTI2MURFMUIxRTMwQ0JFREExRjc0QzI5Cis6MTBDOTgwMDAyMkU2REZENzEwNDNGQzM3MzgzQ0VFQkZBNUMwRTM0M0I3Cis6MTBDOTkwMDBCQUNBMjM3OUM2Nzg0RjhDMUVEQzZBMTRFMEYwOUFBQ0QwCis6MTBDOUEwMDBDNkEzODc1MjcyNkUxQUM2Nzk5RTk3MjE4NjQxRkU0OEE5Cis6MTBDOUIwMDA1QUI2Q0Y5MjBDRTcwMzE2NzgyNEU1OThFOUMyMTUzMEYxCis6MTBDOUMwMDBEMzQ1NEFCMTk5MkUzQ0FBOTkyRUQyMkFDQzc0OTFBRTY1Cis6MTBDOUQwMDA5RDM3MjI3QzMzNkJDRDc0QjI0NjZFNDJCRTE3NzBBRTZCCis6MTBDOUUwMDBBMDdGMDFDRTUzRTA4NTRBODAyRkREMjdDNDhCQURGMEI4Cis6MTBDOUYwMDA2RERDQkZBRDEzRUNGRTMzODVFRjkzMTZGODdFNDY2NjEzCis6MTBDQTAwMDA1NUJCMDM1ODVERTcyQzhGRDkzMTY1Q0ZCN0UwMjFCMDE2Cis6MTBDQTEwMDAzNTdFMkFFMDI4RUMwODExMDdBNUZBMUZFREU5OTg1RjlBCis6MTBDQTIwMDBDRkZDM0Q2QTFGMUMyQ0MwRjMwM0U2RTcwMTI1ODFEQzI3Cis6MTBDQTMwMDBCQzhFODQ1MTNFNUQ2N0IxMEY2RTcwREZBNzgwN0QzMDg0Cis6MTBDQTQwMDA2Q0JGRDQzMjgzRjcwQkFERkIwNTdCOEIxOEUyNTI1NkRCCis6MTBDQTUwMDBGQjQwREEyRjQ1M0Q5MzYxQkJGQjg1OUMwRTdGODlDNjY5Cis6MTBDQTYwMDA5MDI2OEQ0NjZFRjQ3QUI0RkYwMkI5MDU4RUEyQjNEQzJGCis6MTBDQTcwMDAxNDM3OEU2QkY3ODk3NTA4Qjg4OEY5OTM0ODhCOUMwMzM3Cis6MTBDQTgwMDBGNDVDNkNCNUNGQ0NGRUI1RjBDNzQ1QkM1REM0QjU4NUQ0Cis6MTBDQTkwMDAzRjJERkMxODJCOUNFNTczODJFRDQwRkY1M0JEQzI4RkU4Cis6MTBDQUEwMDBFRUJCMEE3RTE3RkVCM0Q1NkYxREJBMTcwMDkwODU3QkNCCis6MTBDQUIwMDAzNzNDNEU3RkE3N0Y5NTkzQkRDQkM3Rjg0RUZDREVFOTkwCis6MTBDQUMwMDA1QjlDMzY1MjNFRTYxREFERTY3QjMwNzQxQkRBODhGNzgwCis6MTBDQUQwMDA4QTAwNjQ1OTcwRUU0NDIwQTg0MkI2NUU3QTY4MDBERThGCis6MTBDQUUwMDBEQUQ5N0FEOThCODNDRkQyRUY5NjkyMUYwQzZDODJCQUE3Cis6MTBDQUYwMDA1MzVGQ0EwMEQ3QTE3ODNFNjFGNzg0MTVERTRGMjlFODVECis6MTBDQjAwMDBCQzE5RjQ2OEIyNkEyN0VGMUFFOEMyNDkzNUQ1QkJDNTJCCis6MTBDQjEwMDA3QzVFRDAxMzM5NDNGNUJGMzE5RUVCRkZBM0JFNzc1MTQ2Cis6MTBDQjIwMDBGOEJDM0I3RTg0N0E0NTZEOEM2N0Q3NTlFMTI1OUVDMzVFCis6MTBDQjMwMDA3MDREQkFFODM4RDgyNzJFNjJEODM3RUE0MzQzNTk4RTY5Cis6MTBDQjQwMDBDMTBCNTVBQjhDRjdBNjQ0QkQwNkVGOTc3Q0REN0QwMThDCis6MTBDQjUwMDBERURGNzUxOENCRDE1N0RFNzcxOEQ3MUY2MTc5MDVGNjYwCis6MTBDQjYwMDAxMDgxRkM1QkM1NDdFQjhERkE2NTg4MEUyOTQzOTUxQjQ4Cis6MTBDQjcwMDBGNjM3OEE3RDAxRDM4MEZCQzlFQzEyODZFRkJGRDVCRUE0Cis6MTBDQjgwMDAzQTJDRjg4MjcxNDM1OTY3RjVGQUY0QjM3QzdERDFCMzNFCis6MTBDQjkwMDAxQ0JGNjREMUQ5MEQzRjZERDFEOTBEM0ZGRDJDNUY1RjE2Cis6MTBDQkEwMDBGNDJDQzcyRjU5N0M3NkFGNEY1QjdDNzZFMzU3M0ZDQjk1Cis6MTBDQkIwMDBENzE3M0RDQkYxNEI5NjlDRERGMEQzOTY5Q0RERjBEMzlGCis6MTBDQkMwMDBDRkYyRjU0NUNGNkVGQ0VBNjgwN0JBMkJBMjA0REU5N0Q4Cis6MTBDQkQwMDAwODc0MTAzNTE4QTAyNjJCRkQxOUZDRjkyMjk1NjA5RUNCCis6MTBDQkUwMDAwNkUxN0U0OTIxRjc0QkI2NkQ2REE5MDcxN0VBMTE1RDg1Cis6MTBDQkYwMDAwOTYwM0M4OEZBRjczOUI0N0UyMjYxRjU4Rjc0MkRDNjNFCis6MTBDQzAwMDAzODZCREI5ODA5NzlGMDVFOTVCQkVCQTJFMzcwN0Y2RjIwCis6MTBDQzEwMDBBMkNFRkM3MUVCQkYxQkI2NDgzM0ZGRkI2Qjk3NTc2NDhBCis6MTBDQzIwMDA5QUNBRDNGQUNDRUY1NzVDRDU1ODY0QUE1RjFFM0VERjkwCis6MTBDQzMwMDBGMkVGRTc0RDM1RkZCQjY0QTE5OTk2RjcyMDZFMjZDNjRCCis6MTBDQzQwMDA3QjkxODUyNEFBNDI3Q0E1RjA2RTVCMTU5QzlCRDlDMTgzCis6MTBDQzUwMDA2N0JFOTBGRUI3NTNDMTdFMUFGRDZCRjQ1RjBBQTkyNzI5Cis6MTBDQzYwMDAzNDM0N0UxMEUwQTY5OEM2Nzc1QkVBQ0ZGNDFFRUFGRTY1Cis6MTBDQzcwMDBCMUYxRUZBMTEyNzg2NDMyQ0VCRDczNkIxRTI2QjFERjI1Cis6MTBDQzgwMDA4OEYxMzk4MUFGM0IzN0RCRDBFNUZENkMyQkMxNzcxRUQ2Cis6MTBDQzkwMDBBQjIzMDExQkJFODNDRUYxNzYzRTI3M0RCMUVGNDhBQkZGCis6MTBDQ0EwMDBGOTNFN0FBMTRFQUEwMDlGNDUxREM0MDZGMUI1RTA0RTlCCis6MTBDQ0IwMDBBMjZBMDRFMzQyNDgyNzhGRThGMUU5RTQxMUUyQUQ4Mjc5Cis6MTBDQ0MwMDA3N0I5MUU4OTEwRkM3N0IyMDQ1RERDRTkwOEU0QzFCOUNDCis6MTBDQ0QwMDBEQUY5NUQ4QzFFMDQ5RDA0ODA0RTUyMjEyRkM4RkFFRUI1Cis6MTBDQ0UwMDA4MDE1NUY2NDRBOTRBRUY1OTFBRDg1MTlDNjdDNTRCMjQ3Cis6MTBDQ0YwMDA5QkMxREQ0OUZGOEU4NEFGRTI5RDY2N0MwNTg4QTFGQzY3Cis6MTBDRDAwMDAxNUYwRjVFOUQ3QzQ5N0UyMEI0NUQzN0MxMENGMjQwMTg5Cis6MTBDRDEwMDBDODkzM0EzODY2ODIwREUwMTFFQzUyRDFGRkFGQTVDRDMxCis6MTBDRDIwMDAwMENFQzEyRUY2OUU5QUMwOTMxODZGNkIyQjg5Q0UzMzFFCis6MTBDRDMwMDBGODdGNDEzNUFBMDE5QzZCRTQ0OTU1OTA3RkJFQTMwQzU2Cis6MTBDRDQwMDA0M0M2QzNGMEIzODM3ODkzMjFFRUJEQTNDQjk2OEM2RjFCCis6MTBDRDUwMDA1NEVGQTM3ODI5MjFFNEJGMzcyRjRCMkJBNkY1M0Q0MTkzCis6MTBDRDYwMDA5MjBDRUY2Q0Y1QjREOUYwRERCMjlFQTdBNDdBRjNCQkI4Cis6MTBDRDcwMDBDQUQxMjQ1QjBFRUUyM0M5NTY4MTVGM0JGQjZBRkM0Qjk0Cis6MTBDRDgwMDBFQ0FDM0UyQTQzNzlFQ0M2NjFFRjdFQzg1MDlGNUU2QkU3Cis6MTBDRDkwMDBGOTc3MDM4OTI2NDFGQkU0NzM1ODFFNjc5QTY2N0VDRkI0Cis6MTBDREEwMDBDNjUxNjE5NjA3MTQ4QzdEMzlFNTEwNkZFMUY0Q0VERjMyCis6MTBDREIwMDA0OThERDQ5MEM4MjZCQUVFNzNCOERDQjFEMjUxRkExREIxCis6MTBDREMwMDA4QjkxOThEQUM2N0MwM0U1NTk0RjlCODJGMDc3NzA3OTk2Cis6MTBDREQwMDA0NTM2MzJCQUQwRTk1RkEwQTc3NDBCMUQ3OTU0MzMxREQ0Cis6MTBDREUwMDAzOUU0MDJDQ0MzMTU3QzI1RDYyM0U2NkYxQjkzOTU2Q0UyCis6MTBDREYwMDBDNzc1RDlGMTNENkM4NzU1NEU1OEQ2RTc4NjYwMjBDNTdBCis6MTBDRTAwMDA5RERCNDcyMjExNUFFRkQwMTk3RjEwQjkxRjdGNzc0QzU1Cis6MTBDRTEwMDAyNzI0MzNGODE1RDZGOTM1RTU1M0U4OUNCRjhEN0NGMjBECis6MTBDRTIwMDBGMDMxRUY5Q0M2RjZGOTk5Q0FERUI1QUVFRTYwRjRFRUNECis6MTBDRTMwMDBEOUNBRTgxRDZFNzRCMzdDMkQ2RDYxQUVFMTVDNzUyRkFGCis6MTBDRTQwMDA5NzUzNTZCODc5RkFCNDZBQTBFNzhCRTQ5NzM0Qzg4RjQxCis6MTBDRTUwMDBCOEZCMzU0NkZGNkQ2MzBFM0YwRkU1QUQ3NzMzRjgwNzNFCis6MTBDRTYwMDA1NTg2Njc0QTJGNkE5NDJFRkRFRTNCREM5ODE3M0NCNTM5Cis6MTBDRTcwMDA4Q0UyMEJGMEZGOTI1OTlFNENFQjMzQzNCMUM4MjIzN0MyCis6MTBDRTgwMDA4MjA5RTA2QUU1RDc0NDcwRkQ5NjgwNkIzOTg1NkJEMUU1Cis6MTBDRTkwMDA5OUMzNTVEMTk5N0M0RTlGQzVERTU5M0MzODQ2NjFGRkY4Cis6MTBDRUEwMDAzRUFGQ0VFMDk4QUVBOTI4N0YyRjkyNEY0NUQzNjhCQjA2Cis6MTBDRUIwMDA2RDFBOTUzNzc0OURCNTFBODNCNzc3OTY5MEUzNjY3OEE3Cis6MTBDRUMwMDAwQUY5MjJFMDVGQzhFMUVGNTVCRDJGQzBCRkYzRTJENkZCCis6MTBDRUQwMDBFRDI0MjAwMTdDRkY1QjAzM0JBMjdCOUE5MDM3ODMwNDA3Cis6MTBDRUUwMDBGMDk2QTYzMUJBMTU3MEVFOUVDREUwNUNBODcxMzg3NzQ5Cis6MTBDRUYwMDA3MUI4NDk0NDAyMzg1QkU5RDUyQTlGRDNCRTI2OUM3Nzk2Cis6MTBDRjAwMDA5REMzRTNGMTU5QTRGQ0FCQzA3OTVCMEE3QjQ3RDkzMURGCis6MTBDRjEwMDA4RUMxRDVFMTFFOEM4MjlDRUQwQURBNzE1RjA3ODIwQTEwCis6MTBDRjIwMDBENjc3OTVCMEZBRkI1MzU2RTY4MEJFRURGMjc3RTYwMDcxCis6MTBDRjMwMDA1REI2MDVBRkNGMDFGOUVFQ0FFMTcyODY2OEVFRENGMkFDCis6MTBDRjQwMDBEOEJEODMxQTc5MkJCRTQzREExOTUwMTAzRjlFNDA3QzFFCis6MTBDRjUwMDBGOTk1MzYyQkVDQzQ3OTI2RDk4OThDNzA3ODQ4OEQwN0UxCis6MTBDRjYwMDAwNzY3OTk2MjkyOTdGOThENjZGOEE2NThFMEVCRkE5QUVFCis6MTBDRjcwMDBGMkUxQjVBRjI5MUZFRTIxNkNGRDc3OEUxN0VGMzQ3NDA3Cis6MTBDRjgwMDAzQjUxM0Y1NURDODQ3MUYzNEMzRUQ3RTY4NURGNjVCRkVFCis6MTBDRjkwMDA3M0JENjZGOEJEQjYxMEU0ODlEQkFFMDIzQzEzQURCQkQxCis6MTBDRkEwMDBBNzk1RjBGNzVBOUNGQ0ZEMTZGNkFFQ0IzNjc4RDc4NUUwCis6MTBDRkIwMDA5NkJGMDNFRkJBMjQwMUZEQjM3NzVEQjZDMEJCMkVGNDc0Cis6MTBDRkMwMDBEQjA1RUZCQTlDMEJGNkI0ODY1RkY5RDI0MjdDN0ZGMEFBCis6MTBDRkQwMDBCMzVBODJGMUYxNEQyOTdGMjVGMUUwNTVENDY1RDY3RjEyCis6MTBDRkUwMDA0MTNERDlGMjBFOUI1OUNGNjVDQ0NCMzM5NUJEQjNDQzI3Cis6MTBDRkYwMDBFRkI2Nzk1NEY2NkVEQkZGMDE2NDY4MDM0MDAwODAwMEYxCis6MTBEMDAwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDAwMDBCREQ3RDA5Cis6MTBEMDEwMDAwQjc4NTRDNUQ5RjA5QzNENjczN0JCQzk2NkIzQjk5MjRDCis6MTBEMDIwMDA0MDEyNEU0MjA4MUIwODYxODEwNDgzODI5RTg0NDA2MzQzCis6MTBEMDMwMDA0RDcxNDM1MTUxQTg4RDQwMzE0MjQ4Mjg1RTFBN0ZGNTA5Cis6MTBEMDQwMDBDOTQyODI4NDE4MzRBMDU4NUEyRjJDMzc4QkI1NkFCNDQxCis6MTBEMDUwMDA1MUE5MjJERDIwNTJGQUQ1OTY0NTUxRjE1MkJGRjU1MjIxCis6MTBEMDYwMDAyRjQwMjU4QTE3N0MzRTVCRkY3OURGOTlEOTNERTc2NDI1Cis6MTBEMDcwMDAxM0MwRTJGRkY4RkRGMUMxQzk5Qzk5MzM2N0U2QkRCRjVCCis6MTBEMDgwMDBFRkJDMzMyMTg0OTA2RkU4QkYwNENGMDQxMkY0MTBGQzhFCis6MTBEMDkwMDA4MUJBNDMzRDk3MDRFREQxRkEyM0MzRUIxQzZBM0EyMUQwCis6MTBEMEEwMDA1Njc3QTVFMTM5RjFGNzExNUYyMjU2MkQyNDgzOTA1NDZDCis6MTBEMEIwMDBERTM2NURCRUQ3MUUyRTI2NjQ0RENEQUMyNDUyMENGRDRGCis6MTBEMEMwMDBCNDUwMjY2RDRGODA0Njk1OTBENTU2NkY5NjhGM0U0RjQzCis6MTBEMEQwMDBBODU5NTQ0MzVDODRBQzZBMjEyNDM4OEE5MEY2MTYzQkU0Cis6MTBEMEUwMDA5NjJCNzI2Q0RFNjAxQTIxNzdCRTJDN0JFM0U4MkIzNjIwCis6MTBEMEYwMDBDREE3Qjk2OUZGREU5QzVCMDlBMUNGRDdCODA5MTk5MjBBCis6MTBEMTAwMDA0NzlGQkI5NzExOTI0Rjg4NDIzRjIwRDFCQTUyMzNFM0Q5Cis6MTBEMTEwMDAyMzUyNDI1Rjk4QjM4NDkwNDlEMUY5QUNBOUIxNzg4Mzg2Cis6MTBEMTIwMDBBNTg0QzQyNTNCQkRGMDdENTJBQ0JDMTNBNjZENkVGQTQwCis6MTBEMTMwMDBERjM3RjRGRDZGRTBFNzgyNjgxOTQ3NTgzQkFFMTNCRTU2Cis6MTBEMTQwMDBBM0VBRUEwNEJFNjc2QzZGN0U1MzdBNzRBRkFFN0RBQzFGCis6MTBEMTUwMDA5QTk4RjYzRTJDRjYxQzcyQ0UzNzMyMkRFNTc5NDk3NTM5Cis6MTBEMTYwMDA0RTVBOTZBNzEwOTJENUZGN0I1RkI2OTA0N0Y3OEU0NDM0Cis6MTBEMTcwMDA4MDEyOTIwRTY1M0QwMTc4MkE3Q0NDRDVDOUIzRUNDNEVGCis6MTBEMTgwMDAxOTg1QjM3OEJFQ0FDREUwMUIyN0QxQ0FFNEZFRTNCNjQ5Cis6MTBEMTkwMDAwMTVDRTNBMjc1ODUxMEFEMUJGMDkxNUQxQUIzQkYyODQ5Cis6MTBEMUEwMDAyOTA2MDgyOTIzQTRCMzI1NzhGMDNENkJGNEI5NzMwQTQ2Cis6MTBEMUIwMDA3RERGRDlCRkZGNEM1NUM2NzlDRjU1NTUyQzlENEE5MDgwCis6MTBEMUMwMDBCODY5QkY0NDJGN0Q1RjA3MTdBNzc2NjZERkE3M0ZBNTI1Cis6MTBEMUQwMDA2OTc0QkQyRTRFMzdFNDc3OTIwMjc4QjVGMzdBODI1NEEzCis6MTBEMUUwMDAzNzU3MkQwMzdDRjkwODE5NDFGQjk1NkJBNEFFOTg3RDQ4Cis6MTBEMUYwMDA0RjEzRUY0OTUwMkFFNDFENDFERjc5QUM3NEQzNzYwNjEyCis6MTBEMjAwMDA1MjI4NjlCQkRERDhBRTY2MjBCQzcwNUMyNUZBQkVGNjNDCis6MTBEMjEwMDA4RDM0RjBCQ0JGQUIxMkYwRjhDRUM4NDFEQTZEREU3QUM3Cis6MTBEMjIwMDBFMEE3N0VDRjU1OEI4MDYzNUYxQTg1OUJDQ0Q3MUIwMzBECis6MTBEMjMwMDA4RTZEQzBERjAyOEVCMjkzQzFCMTREQ0FEQjE5QTZGQzYwCis6MTBEMjQwMDA2NkQ1NUM1RThBMTE1MjkxQTY3NjAzNUZCNjY5NEVFNDlDCis6MTBEMjUwMDBDQkI2QjRFRTUwMjVBRDlGMjhCNTc4NjFBOEM0OTE5NUEyCis6MTBEMjYwMDBDODhGNkQ0M0Y3MUQ1RTA4NzA5REI5RkZDMzZEMDgzNTBCCis6MTBEMjcwMDAyRDU0MjVFMDRCREIxMzNERDVBMTJBOURCQzExRjg4QTI2Cis6MTBEMjgwMDBFN0JGNzc4QzdEMjBCQzkyOTZBOTE3Q0YyMzZFNEEyQUUwCis6MTBEMjkwMDBDRTIxMzYyMjUzQkMzODQ2NTZEOUVCOUM1MUZDRDhFMEZGCis6MTBEMkEwMDAxN0ZBM0MzRTZEQzY0NzMyRTVGQjc4QUYwRThGRjBFRkM0Cis6MTBEMkIwMDAxQjU2NDc3OEQwQzVEQkIyNkZGREI5MDQ0NDkxMTlFOTFDCis6MTBEMkMwMDA3NzAwRTZBM0E4QkVFOEZDQzhEOUM3MTdDOTRFNDNCRTdECis6MTBEMkQwMDAyNzhBMzcxM0U0NjU3RjdBRjczM0JFRTdGRDA2RTYwQjRFCis6MTBEMkUwMDBENjZGQkE1QzkzNzkxNTg1Q0I5QTE3OTg3QzI0MUUyNjQ1Cis6MTBEMkYwMDAxNzZDNzY4NkNGMzU0NDYzRUREOThBOTdCRTQxRDY2NEU0Cis6MTBEMzAwMDBBRTQ0RjlEMUFFQ0U2RjA3RjlGOTc5QTY4NUM4MTIzQ0MzCis6MTBEMzEwMDA1RjZGMDdGOUExOThFNDQ3QkFDRjYyRDAwNzQzRTZDNDJDCis6MTBEMzIwMDAxQkU0RkU5QTgyNTkyOENGMDY5QTY3NTY5REYxRkQ2MTRCCis6MTBEMzMwMDBGNUM2Rjc3Mzk2QTUxOEVBRTIzRDZCRTY0NTJGNTVBNUFECis6MTBEMzQwMDA0NkVCQUI5NDNBM0JDODkxNUIzM0Q3NEI3NTNBRkExRTI4Cis6MTBEMzUwMDA1MjU0RjczQUQwQUJBOERCMzI2N0UyN0I3MTM5QTUzMTgyCis6MTBEMzYwMDBFN0I1Q0ZBM0JEMDU3MkEyNUQ2NUYzMjZFRUQ4NzBCRTBBCis6MTBEMzcwMDA4QkVCQTFCQkI5MUUzQUQ1M0EzN0YyRkVCRkU2RkRFRjAzCis6MTBEMzgwMDA2RDcxNjMxOUMxNjdDMTM1MDZCQ0FDQ0VBMkYyOUE4RTJECis6MTBEMzkwMDAwN0IwRDc3RkZGMjlCNUVFNzM5ODVGMTRDRjk2Mjg3QzJFCis6MTBEM0EwMDA4MDY5OEIxNzVCODA1RkM1Mzg2RDU5RjkwRUMwREJGQTU5Cis6MTBEM0IwMDBFQUMxRTcyN0Y0QUFFODY3NTU3Q0M0NEJERkIzMTJBM0EwCis6MTBEM0MwMDAxQ0I3QTU1OTBDRjg5ODkwQzdFNUM2QjY2QjBDREZERDA1Cis6MTBEM0QwMDA5QjNDNjM2MzFFQTVBQkY1ODc2NDgyNzRGNzNCRTNGQTVECis6MTBEM0UwMDBGQUQzQUI3MTFERUIzM0Q5RkEwN0E2NkZEM0JBQTk0NEIwCis6MTBEM0YwMDA4OEQwMTFENjUzNENGNUExQTZGRUY5QTZGNkQxQTZGNjEzCis6MTBENDAwMDAwOUE2RkFCOUE2RkU5NUE2RkEwRjRERkQ2Nzk5RUE1NzQ3Cis6MTBENDEwMDA5OEZBQ0YzN0I1MkYzNkI1MkYzN0Q1RkY4RkIxN0YyOTgzCis6MTBENDIwMDBDM0YzRjVFMkQ5MjBGMjA1RjRCQUI5QkZBMjY4ODg1RjY4Cis6MTBENDMwMDBBMUU3MjM3Q0U1MzZGMkUzMEY3MjJBQjQzQzY2NjcxODU1Cis6MTBENDQwMDBGMDJCRThGMzc0RjFCMzlBQ0FCODEwRjA5M0EyM0E1MEYzCis6MTBENDUwMDA5OTk2MkYyNjdBN0E1ODlGOTk4RkZBQTM4RDRFMEJGNUJECis6MTBENDYwMDAzN0I3NUY1MjA0MUQ1NzczRkI3MENFMTIwMzFERjVFNkVDCis6MTBENDcwMDAxNDNBQzA3RTI0Q0UzNDk0NEJBN0EyMEI4OUE0MThEQkE3Cis6MTBENDgwMDBCNUExRDFGNjdDRjhGRkQ5QTU4QjUzRDM3MTgwRUJERDI0Cis6MTBENDkwMDBDMUU3MkRFNEMwMjNDMzdERDcyMjNFMDJENDlFMUUxQkNDCis6MTBENEEwMDA4NTkzMUFCMUE3RTlDNzI4REY2RDQ5MjM4MTM4QUFFRjEwCis6MTBENEIwMDBCNkY4MkQ1OEZGM0M5MzdFMDhFQzk1MkFDNjg3MjM3ODUyCis6MTBENEMwMDA3RjQyQzIxMjhDMjNFNkQzQ0VFOTY1MURDODI5NUFERUZECis6MTBENEQwMDAwMTcyOEE5NkI3QjU2NDYyQjk3QUFEMjU2QjIxOEM1NzEzCis6MTBENEUwMDA2MzQzM0NBNThFQkJENUFGNDA1OTU5NUUwNEZBRkJCNkU5Cis6MTBENEYwMDBCMTNCMzQwQkFEMjc5RTk0NDk3MDIyQjUxNzRBQUUyODM0Cis6MTBENTAwMDA4N0U1MjQ0QzlGOUZCOTE3M0VGNzM1RkRDRTI0RTA0RUFBCis6MTBENTEwMDA4MjQ2QzZFNjJBMTJCMDhFMjM2NEVEOUVBQzFGN0FFOERFCis6MTBENTIwMDBCODZBODFFMjc1NDA1QkIxNzc4NTkyODZGREZDRTAzNjkyCis6MTBENTMwMDBBODRBREZGRTExQjQzRUJDQzA4MkY2ODVCNUJDQUYwNTdCCis6MTBENTQwMDBFQzc3MzFFRkI1M0ZBNDg0NEIzQkU2NTU3QjJEN0UwQTRCCis6MTBENTUwMDA4MjE1QzNFQjdFMDU3MDFBREU0OTJDMUFBREFCN0U1NUUxCis6MTBENTYwMDAwMkI5RjY0NjlFOEFGMjc2RUIxRjI4NDM4RTgwMEZGNUFECis6MTBENTcwMDA2NTgxOUVGRDYyQUQ2RDI1Q0M3MzYwM0MxMUQ5NTJGRTc0Cis6MTBENTgwMDBFRDRCMzEwRURBOTk0M0YxQjkwNkY0QUMyQTQ4NDI3NEY2Cis6MTBENTkwMDA5NTFGNzZDMTNDOUQzMkFCM0Y5Nzc3Q0NCN0IyMzg1QUQ2Cis6MTBENUEwMDA3RjJDRUY5ODdCMjU2REVGOUM5ODZCODE3NUU0QTVCOTc2Cis6MTBENUIwMDBCNDQwMENCQTNBMENGMjE4RDZCNzc2RDE3MEJEMUUzNDBFCis6MTBENUMwMDA5NzZBMEQxRDc3MDgyRDhCNzkwOUI0NzYwRUMwOUY5NzQ5Cis6MTBENUQwMDAyQTdGOUVDOUVBMDczOERDRDQ2NkRFOUVDNkNBQjNGRDQwCis6MTBENUUwMDAxREYzRjhBRkU1Qjk4NTVEM0E5NEZCOEZDNUNFOEM0MTRDCis6MTBENUYwMDBFREQzQzM3OTY1RkRFRDUzMkFFODg2MDI5RDZGQjI3QUJCCis6MTBENjAwMDA4NzVBRThEODlCRDZEQTg4OUZGMkQ0QTYxQzgyN0VBMkRECis6MTBENjEwMDA3RjhEMkRCMDFERjg0MzUxODc1RUFBQjNCQjAyNkIzMkRDCis6MTBENjIwMDBBRUQwRThGQjAxODlDQ0QxQ0JDOTdCMzk5Q0VGQ0E5NzNFCis6MTBENjMwMDA3MDdFRDNFNTYzN0U5OUQyRUYyNjNGNDEzQjZCMTM3MTM5Cis6MTBENjQwMDAzQkMwMUU4OUUwREJGRkI5MEZFOTkwRTNCQjJBQkY2QTRDCis6MTBENjUwMDAxREQwMjk1OUM4RjQ2NjdFNTQ5RUFENTBFODM4OUI2MUIwCis6MTBENjYwMDAxQzVBREZEQzZFQzFGOTZEREE0NUY5OTc3RUVBRjM5QjRGCis6MTBENjcwMDBERkIxODBERDNDOTYwNDJEQjBCRTMxMjQ4MEE1ODcyQzFGCis6MTBENjgwMDBCMzAwNTBCQUI5MUVERkM2RjlCNzkwRjIzN0ZBM0IyMEEzCis6MTBENjkwMDBGQTY4RkJBNUMzRUJCRTA2QkU0ODIyMkFENjU1QkYxQkJGCis6MTBENkEwMDBFOUE5NzE1NzcyNjUyQ0ZCQzA5NjZGRTE3RTI2QTk1N0Q4Cis6MTBENkIwMDAyNjcxM0Y4N0MxRDk5NjVGRDYxRkZFNTZCMjBDRTE3RTE4Cis6MTBENkMwMDA5M0M3NjdDRjA3RkY2RUU3QzFFMDMwREFGNEM0QUI0NjFCCis6MTBENkQwMDBCQTA1QThDQ0QyQzk5RDFDRkU5RDI0QUY0RjkzRTkzODUyCis6MTBENkUwMDA3QjcyRUI5MkUxRkRDNkZBNEZGNjY1QzBEMDdFM0ZCRTdECis6MTBENkYwMDAzRjM5REY4REZEQUUwODc2NEY4NzYxQzY3OUMzOTU0MDBGCis6MTBENzAwMDAwQjYzQUI3QkY3MDBDOThDRDEzNjgzOUI0MTNDRTUzRjczCis6MTBENzEwMDBERjkzQUFDMjNDRUE4NkMyMzg4NUExNzAwNTkwOEZCMzE4Cis6MTBENzIwMDBGRTYwMzAwM0U3NzNCRTA1RTg2MjA0Q0M4N0QzNDcyRDYzCis6MTBENzMwMDBEMjk3OEE3NDIyRjAwREY0NTA0QkVCNTczNDMwRjg1MEU2Cis6MTBENzQwMDA4MzEwREI4OUUyMzZDQzdGQ0IyQTRBMjdDRUZFNzQ5MjQ3Cis6MTBENzUwMDA5QUNGRUMyMzZGMTQ4RUM0M0FCODdGRTVDRDhGNDFCRkNBCis6MTBENzYwMDAwMjJFQjM3QUJDNTYwODE3Rjg3RUU3NUUwNTNFRDBDQzkxCis6MTBENzcwMDA0MERGNUUwNzdEREU5RTVCNzcwRUFDQjM3NEEzQUYxNTEyCis6MTBENzgwMDBFOENGQjkyQkU0ODc3RTAyNEVDRTI5MjE0REMyN0VEQTQ2Cis6MTBENzkwMDBCOUQwNkZEM0NEOTU5NUE4MTdCQTA4RkE0QjQyN0Y5QUE2Cis6MTBEN0EwMDBGMTZGOUQ2MkI0RjcwOEU5QzJGNThDRUMzMkRBRTk5NEM2Cis6MTBEN0IwMDA4RTUxOUZGN0EzRTM5QjIzNzQxQ0FGOEY0QjA4RkQxMzdGCis6MTBEN0MwMDBFOEI0QzQ3QkMwQ0ZBMEZFMDc4RTM1ODAxQzc5ODBFQjA3Cis6MTBEN0QwMDAyNTQxRDdFMjc5MDE4OTFENjdCODMyM0ZFMkNGNjZDQTk5Cis6MTBEN0UwMDA4M0MzRkJDQUZDMThGRUFDMEJGODYzMDRGMkNCN0NDMDBECis6MTBEN0YwMDA4NzlCRjQ2MUZCRjA5QjhERkNEMkI4RjM5MzdEQzNFODZCCis6MTBEODAwMDBGQzlEQTVFQTA0QzA4RkY4N0UwM0M3MzdBNUUzQzU0ODkxCis6MTBEODEwMDBDNzFCRkJGNjgxNUUxQjdFMzNBM0UzNkJDMUQ2NDg4RjJCCis6MTBEODIwMDBEMkUzNEQxRTZEMjk3QzQ3RDA5OTc5M0Q0QkY4N0FEQUM5Cis6MTBEODMwMDA3MzdERDdDMjc4NTc2Q0VDN0VERTgxRUZGOUFFNDczRTQwCis6MTBEODQwMDBEQjE4MEEzQTQ4MTRCRUMzMzk3Q0UzNkU4OUUwRDkwRDZGCis6MTBEODUwMDBGMjYzNTY4REY3NzlEMENGM0U4RjdCM0E5NDMzRDVCRUE1Cis6MTBEODYwMDAzNjMwMkRFNkQ2Q0IwNkJCQ0Y4QzVGNEE1RkFENDg1RjI2Cis6MTBEODcwMDBDNDM3NEQ5MkMwOUFFREI2QTJGRTFDODA2RUEyN0FEMzM4Cis6MTBEODgwMDAyRkU4RkVFNjUzQzhFRDNCNjJFMUUxNzRDNzNGOTlFQjM4Cis6MTBEODkwMDBCQjFCREU0RkE5RjYxMUU0RDNEMzlERDc2OUY2MTM3MUY0Cis6MTBEOEEwMDBCM0E4MUQxQkIwRUJFRDU4NDFGNzFERURCM0QwNEYxNkRCCis6MTBEOEIwMDA3ODEwQ0Y1N0I1Q0ZBQUNFMDMzQTc3MkFERTU4RkU0RjVECis6MTBEOEMwMDA0NERGNzAzQUJGOUZEM0Y5N0E2RTdGNzU3MUZCRUJGNjM4Cis6MTBEOEQwMDAxNjE1RTU3QjY3OEIwN0NCOEUxNjJGOEY4Nzk2NjNCOTVFCis6MTBEOEUwMDBBQTQ1QzM3RUYyOUE0RjJCRDA3RkJGOTk2MDVDNkI2NUNGCis6MTBEOEYwMDA0Mjg5MTQ4QkFFRjJGQzQ2N0I3Rjc4QjMxMUVGQTlENTM5Cis6MTBEOTAwMDA0NkZGM0I1OTZGMkZEMzdGNDlFNUY5ODZGNjQ0RUY2ODEwCis6MTBEOTEwMDA0M0ZCNjlDNDhCMEYwMEREREJEMjJBMERGRDQ4RjgxM0YxCis6MTBEOTIwMDA4MzdEMkJFMDM4NUQ5RTg3RjE2MjBBNEZCNEFCODUzRDY1Cis6MTBEOTMwMDAyQkRBMDlBOUMzNzhBRUQ1RTQ2Nzc2OUFFQ0Q4MEU4MEM1Cis6MTBEOTQwMDAyM0MyOTdDMUIxMEJFMDg4RjAyREU3RjBBQzY2N0UxM0RGCis6MTBEOTUwMDBGNzdCRTI4NURGNTNCNDdFQ0U3QzhDOEIxMDk0NTcyQjAzCis6MTBEOTYwMDA3MjZDQTg5RjNCRjI5OEJEREQ4RjdFMzI3NUYyOTNGMjA4Cis6MTBEOTcwMDBGQ0VBMzU0QzlGMEI3QkZDRjk5QzU3QUFDMUFFREQ5MkFCCis6MTBEOTgwMDA2OTQxMzlCOTI1NkQ4RjY3MkJENkUzQkQ0QzlGRkFCQjMyCis6MTBEOTkwMDAzQzE0N0Y1NjBGOEY1NzUzOEFDREEyRUI0REU0N0NCM0Q2Cis6MTBEOUEwMDBEQTRBMzBGRUREOTFFRUY0NDIxQzJDRDFCM0E4MDZGQjFFCis6MTBEOUIwMDA5OUJFNEJDOENGODlERUZGMjNFRkQ1MUJFQzBFQTI1Q0NFCis6MTBEOUMwMDA2MzU4Njc2NEZFQTUzNjM2OEU0NDI0MTgyN0E1RDg2NkFBCis6MTBEOUQwMDBDMDlGOURFOEVBNzkzMDVGNUIxNDhGNzlCMDVFOEUyNzM3Cis6MTBEOUUwMDA5MzlEMjNFMjE0NjYzQ0I5NkI4Q0ZBNjY3NTExN0JCRjdDCis6MTBEOUYwMDAzN0U3MDFDNEJCMTlCRUFFMkEyM0ZENzY3MEJBNjg0QjY3Cis6MTBEQTAwMDBERjgyN0M2OEVFNkYxRTlGNEM4OTM3Rjg3RjFEOUVDMUI4Cis6MTBEQTEwMDBFMzI0QzI5RjE2RkRDMDhGNzZDN0U4NkZGNkEzQ0Y4NkJBCis6MTBEQTIwMDBCRkVFQzZFRjE5RjU1RDBDN0Y3REQyMDg1RDNDNDlDMEE1Cis6MTBEQTMwMDAzQjgyMDcxMTVGRTQ3RTk4ODg1QjhCRjExNEMyQzZDM0ZBCis6MTBEQTQwMDAzQUM2QjdGRDI4RkY3RTk5RTA0MjNGQjJDMDY5MEI4MDFECis6MTBEQTUwMDAyQzJDQTBGMzAwM0E2RUZCNTU0MjYwMjVBREFGNEI5OERECis6MTBEQTYwMDBEOTk3NDRFQjA1REI2NDE1REI5REJFQTExMDY3RUVEREE1Cis6MTBEQTcwMDAzMDYzNjg5ODdFRjcxRUE5RUVBMjExQkEzOERDQjZFNENFCis6MTBEQTgwMDAxQjMyOTkzREEwQkMxM0Y2MDA5MzRCRThFN0ZBRDc0RDQzCis6MTBEQTkwMDAwQzY5NjA4RjE3MTFFRjc2MDI1RTMwNkIxN0Y0NDRGNDU3Cis6MTBEQUEwMDA3NUI5N0ZGREIzMTE0Q0VGNjZDRTI1Q0JCQTYzRTA3RjJECis6MTBEQUIwMDAwRDZGOEZDQTcxNUYzQ0NBNkIyRUM3MEIzOEJDQjY3NzJGCis6MTBEQUMwMDBDRDhBRDdDQjcxRERGM0E0NTg3NDc1QjZFNDc3MUJDODQzCis6MTBEQUQwMDBFRjUxRjA5RDE3MzVENERCQTU4NENCRUY0N0M4Rjc1MTQ0Cis6MTBEQUUwMDA3RTJGQ0JBQjVCM0RBMjJDQzY3RTlGMTI0NkY5M0Q1MUVCCis6MTBEQUYwMDBENURBMDFFRkU5RTBFRjAxNUU3RTRBRjExMjYzMURDRjU2Cis6MTBEQjAwMDA4RTYwRjZDREY3MTUyRjQyQUY2RUVGN0E5Q0UxQTU1OEU3Cis6MTBEQjEwMDBFMEU1NzYxMkNCRkZGRDFFRTBFNTY5ODA3QjNGQkQ0QTY0Cis6MTBEQjIwMDBDMkI4MEZGQjQ1QjZGNjBDQjQzRkE1NkFCQjAwN0YxMTI3Cis6MTBEQjMwMDBGQzVDMTY5QjZGRkVGOTFERTNFNzdFRUVCN0FFRTdGOERGCis6MTBEQjQwMDBFOUUyRjFGMURCMzk3RTNBQjlCRUVFRTBGODY5RTdGQUQ1Cis6MTBEQjUwMDBGQTU2QzA0RkRDOTlGM0NERjA2NjIzN0U1MkFCRTM0RDBECis6MTBEQjYwMDBGODMwRTIyN0E5REM4ODlGNDRBRjExM0YwOTlFRDEyNkY3Cis6MTBEQjcwMDA3QzE4RjE5MzVFQTAyMkZDRTIzMjhENzhFQUM3MzdBN0M5Cis6MTBEQjgwMDBGMDU3RDI2MDlDMTg3NjcyNzY1REE4MDJGNkI4ODZDRTAxCis6MTBEQjkwMDBFOUVFQjVDMjIwQkVBRTBBMjhDNTdBRUYzNUY5QTVBMkQ2Cis6MTBEQkEwMDA0QzJGNjA3OENEOUMxNjFCRUYxNkRFMUVDOEQ3QTQwMjQyCis6MTBEQkIwMDAzRDlERkMyMDM2MUZEQjc5RkY2M0FBMTY2N0U4N0Y1MTg1Cis6MTBEQkMwMDBFQ0ZFMkVERUZGRjVFMTVBQTJCRTNGRkRCOTRCMUVDNEFFCis6MTBEQkQwMDA1RjMwQUYzRjQxRDJEMjBCNzAxREVBQ0UzMEM1RkRCNkVCCis6MTBEQkUwMDAxNTZDMUY3MjlCNDNFRDg2RkQ3Q0ZGMEFBNzc3QkI4QUVECis6MTBEQkYwMDAyM0Y5RUNFMDFGRjE3MTg4M0YwOUM3Q0RFNTlGMTlFRUNECis6MTBEQzAwMDBEQ0ZGMTVFQ0ZCRTUyREM4MUU3QTM1NkRDRjVCOUU3OUU4Cis6MTBEQzEwMDBBNDhFOTZBMzBCNDZFMDNDRjNFQkJEN0IwMENFQjI2QjJCCis6MTBEQzIwMDBDRTUwQjY3RjNDQ0ZGREZFMTg0QTZBQzE1NEU5MUI3MDQ2Cis6MTBEQzMwMDBCOEREQjFGN0VENDUyOUY0Mjk5NTgzNjgwN0QyODkwNDQ5Cis6MTBEQzQwMDBCNjUzM0E4RDUzODg5Mjk4MDJFQkQ1NzA1RDU2QjA2MzA3Cis6MTBEQzUwMDA2NTU4NkYxN0Q2RTM0OTM3OTY0RTEyNjJGQkQ3REMxRjIzCis6MTBEQzYwMDAzREFGMjAwRkM3NzMxMzM3RkFBQjI5QzQ4QkE1RTA2MzEwCis6MTBEQzcwMDA3QjFBNTFEMjI3RTBGODZENzExMzA4MkFGQ0YzQzA1RkJDCis6MTBEQzgwMDA3NTY2NkZFRTAwOUY0NkEzNTA5ODg0QUM4MkYwOTBFRUNDCis6MTBEQzkwMDBEQTg3RUIyNzFFQTJCMjc4REJDRDZFQ0M0RkY4MzM1RDZFCis6MTBEQ0EwMDBERjk4RDM1RkRGRTlGNkZCRDJFMTJBMjE0OTg0MzREQjM4Cis6MTBEQ0IwMDA1OUY5OEI3OEQ3MTYyOEJGNzRFNDA2MjA2OEE1OERBODdCCis6MTBEQ0MwMDBGQjMxRTBENTVGNDlEMEZFRjBCRjk1MTA2OEM1QzkyRTg1Cis6MTBEQ0QwMDAzQjg3RjkwN0E3M0RDRUJDQjMzNENFQ0ZDRUQyMzg4RDJCCis6MTBEQ0UwMDAwNUU5QTcxRUU3MzZGODc1MzJFQzYzRkE5NjQzRkZCNkVFCis6MTBEQ0YwMDBFNDQ5Njg3NzhBRDIwQ0Q3N0QxRUVEMDY5ODlGNjI3RjMzCis6MTBERDAwMDAyOUY3QkRENEE4RERFNjdDNTM0MkJCQUQ0RDBBMTI4ODhECis6MTBERDEwMDA1M0ZBREY5NkQwQkUyMkM1MEM0RjRFOTU3OEYyQzY0NTE5Cis6MTBERDIwMDBDNzcxN0E5NzBENjdGMTJFMTZFRjU5RjFGNzVGOEMwMkU0Cis6MTBERDMwMDBGQkZCOTcwOTMzQzM0OUY0RkRBRDA3QTk5RDA3NzkzNDZGCis6MTBERDQwMDBEM0JDQUZENzUzN0E0QTRGQjU3OUI3NTBGQTQ5RTU3RTdECis6MTBERDUwMDA3MkRDREE0OTA3RUFFOUFGOUY4QzYyRkNCREEzNjVCRkJDCis6MTBERDYwMDBCQjhEMEFBNDQ0QzU3QkUxMDRGQTlFOTNFRkRGMTJCOTkwCis6MTBERDcwMDAyNjBDNzY2M0UyMjQ0NTg1M0Q4RTIyMzk1ODBERjMyNTI1Cis6MTBERDgwMDA0RDE2MDI3QzcxNEY4MzcxM0ZCN0IzQjAwOEUxMjJFQUIwCis6MTBERDkwMDBDM0Y4N0UyRTI5NTVGQTIyNzkzNkQ0OEVERjU4QzBGMzg3Cis6MTBEREEwMDA2QTVDQzQwNTc2QTFGMjZGMkQyOTU2REU4MzI4QzVGQzc2Cis6MTBEREIwMDA0QUQzQThERTRBODJCODIwRTUxNDVBOTY3NjA2MzFGOThECis6MTBEREMwMDBBM0QyMUJCNDgzMURCQjIxNDBGQzM2MEFBNzA3RTdGQjg3Cis6MTBEREQwMDBBRTgxRjEzQUNCN0QwOTYwOTc2RjM4MzRFQkEyQjE3NDE0Cis6MTBEREUwMDBERUExQjBFMjA1MTAwNDQ3QTVFMEJBNDM5QUJDMzY4MTMzCis6MTBEREYwMDAzRURGRjlBNkM1MERFQkRCQ0FERkVGRjQ0OUM4RkZGNzNDCis6MTBERTAwMDBDQzIzMDEzRjg1QzdENjg2M0Q3NjE5RUNERTkwODU4QzA0Cis6MTBERTEwMDA0NDNCOTczQTVDOTNCODI4NTQyMTVFQ0JGOEZFOTY1MTY4Cis6MTBERTIwMDBFOUY4QjAyN0I0M0MxOUUwQjIyRUUxRkM5MDQ2QzdBRjQ4Cis6MTBERTMwMDBBRDY2NzFFNzE5NzJGNkYzMzA2RUE4RDM4NkY4NDlFNzNDCis6MTBERTQwMDBGOTQ3MTJBOTQ1RkIzOTY1OUVDRTVFQTZGRjEyM0I5OUE0Cis6MTBERTUwMDA1RjE5QkE4RTYwREU1MzUyOTlEM0VCQTdERjdCMjJDQ0Q5Cis6MTBERTYwMDBGNjhERUVBOTY2NzE2NzE3MDlFMkY3NjdDOEJCMUMxNjQ1Cis6MTBERTcwMDBGQUJDQTc1QTcxMDMzRDI1OTlFQzczMjc4QzQ3NDlBRTJDCis6MTBERTgwMDA2NzIzMUJDRjM1OUU4RDk3NjhDQTgzQjI4Qjc5QjlFOTFBCis6MTBERTkwMDBCQzI4RkVFNDQ0MDVGMUVDQUUzNkU2NEZCOTRDRUYzOTUwCis6MTBERUEwMDA0RERGN0I1OUUwMzk5QjE0MDI5RTRGRjg2RTk4RjgxMkIzCis6MTBERUIwMDBCNjdBRDU1OEY5MTM5RDJEMjQ1NEE1Q0JCNzcwMEUxMDAyCis6MTBERUMwMDAzRkZDQjI5MEY5MDlCNkFDQkQ3Njk4RDcwOURGMkI2OTUzCis6MTBERUQwMDAxMEVFN0FFMTVGRkJERUJCMDNDQTdGRkY1NzRGMTM1RDk1Cis6MTBERUUwMDBENzVGQkYzQUJDRUQ1MTgwNjNGMzZEMkYyMjFENzJCRjI3Cis6MTBERUYwMDA2QTA4NEM4MUNFRTdGOTVBMUJDMkIxNEM2M0YxMDE1MjVBCis6MTBERjAwMDBEQUJCRDc1QThBRURCOEFGQjU3NjhGMDNEQjg3OTU5MzI2Cis6MTBERjEwMDA4MDgzQzI3Mzk4QTI2NUZEMENGODM1MjQ3QjU3QTgzMDI2Cis6MTBERjIwMDA4OEU2Q0M5QTQ0RDg1NjE1QURBRkJEOTIxMjBFOTUwRjI3Cis6MTBERjMwMDBFOUYzMzREOTVGMENGMTkwMTc0ODIyQzVGNzA2NEQ1MjJBCis6MTBERjQwMDA1OUZFOUJGNDNDRjA1MzRFOTU4NDdFNThDRTIxOUYwMzlFCis6MTBERjUwMDBFOEUxQzQ2QzBCRTZCRkFDQThCREY0QzI5MTc0RkNGQjU1Cis6MTBERjYwMDAyQTE0OEMzNzU0NTc1NTVDMEVFREMzMEUzMTdBNzE1RDBGCis6MTBERjcwMDBDN0YwNDdFMTE0QUNBMkZDMzBFMjEwOEIyNzk0OTJCMEJBCis6MTBERjgwMDAzNzQ4REI4Nzc5ODkzNTBERjRDNzNDMEE2MDk4NUYyN0VECis6MTBERjkwMDBDNzBGOEYwRjk0OTY4NkZDMDBENDQ0QUYxMThGNkUxMzc5Cis6MTBERkEwMDAxRUNENzg3NThEQTQ3ODA0RkQ1MjQ0OEE5ODVGQzdFQzI1Cis6MTBERkIwMDBDNzVBREU2NzQzRDU0NEY0NUZFRjUxODlERjNBQUUzRjdECis6MTBERkMwMDBCRTVFQTRGNkEzNDZFREJGMTBCNTFGQTFGQzFCQjUxRjk2Cis6MTBERkQwMDBBMUVDQTFGNjIzOTQ4OTVBQzU0NUE1NzRCRUExNzQzQTUzCis6MTBERkUwMDAyRUYwNUY0REQ5NEFEODFGQjg2RkVBRDUzN0ZEOTM5NjBBCis6MTBERkYwMDA2NTdDOUY4RDcyNkE0QTI1RkRDRTJDRTA2MjU2NUZBRjJDCis6MTBFMDAwMDA1MTlCRTRBNTUyRDk1MDVGOUJBNjg4N0QzQzNGRThENDQ0Cis6MTBFMDEwMDBDNDJDMEJERkU3OTk3MUE3NDZFQjlEOTkwQURGRDc2MzA0Cis6MTBFMDIwMDBGNTExQzVDNDUwRUZBOUIxMThFQUU3RUREMThEM0YwNTUwCis6MTBFMDMwMDBGMDEzODdGNTA5MjM3N0FFRjcxNzQ0REJFRjI4QTQ3NUIzCis6MTBFMDQwMDBEQTdFODBEQjczQjU0QjJEQkUyRDMxRTg3N0Q5NDg0NjlCCis6MTBFMDUwMDBCRkNBQkY4OTVGQTJGOEZBQUM4MEEwOUYyRTVCMzQ5NDQwCis6MTBFMDYwMDBERkE0NTA1MTQxQkVGNkQ3Q0I1NDBFRUFGREVCMDIyQTk1Cis6MTBFMDcwMDA1Nzc1RjE5MUMzODUzQ0FFRUVBQjYwNzEzNjEyRkRGOTc4Cis6MTBFMDgwMDA3QTEyQ0ZCMzIyRjBCQzMzMDQ3NkM0QURBRjVFRTkwRDkzCis6MTBFMDkwMDA5MjgxRTVBRTM1NTMzOUEyQTc5MzhCMDUxRDhDMjQyM0JECis6MTBFMEEwMDBEMTlGMjc1MzBFNTQwMDlENzU0RDU0ODAxRTRBMzkxRjMxCis6MTBFMEIwMDAxMDZFQzc2MTg4OUZEMkNGNTM5RkRFRkQxNzREMDUzRjdECis6MTBFMEMwMDBBREREREQzNjEyRjM3RTJFMUZBOUNCOTM1OTk1QkU2OEM4Cis6MTBFMEQwMDAyMkU4MzM5MUY3NDM0ODk1RkI3REJBMkVDOTdGQTkwNTA1Cis6MTBFMEUwMDBFQ0I2ODFFRDE0ODVCQ0FGODM0NzZGRUQ4QzI0RDAwMzczCis6MTBFMEYwMDA0RTJFQzdDREZENTdCNUVDN0MwNUJFQkZCQUE1MUI0QjU4Cis6MTBFMTAwMDA2NzlBMEY4NThDNURGMTYzRkM2NjlGQTdBRTExRTY2NThCCis6MTBFMTEwMDBDRkE2RUQzQTM5NkM0QkEzRUYxOUZDODA2QzY2NzcwOUZBCis6MTBFMTIwMDAzQ0I4MDlDNjgzQzRCRUM5ODZDRTA5RjE3MTE0MTg5REQ2Cis6MTBFMTMwMDA1NDVGODA3Q0RFMTA5QTg1NzkxNTlEREUwOTgzQzZBRjE5Cis6MTBFMTQwMDA0RUM1Mjc1QkFCNUUyMjY5MTQ4RTRGQkUzQUYzMkZCM0U4Cis6MTBFMTUwMDA2OTc5MTBGODhERUFDMTI3MzhERkU0OTQzRkY2REFCNTIzCis6MTBFMTYwMDAwNjdFMzk2QUUyOTdBMzI2N0UzOTdBMEE3RUI5RTA0RUE2Cis6MTBFMTcwMDA2OEVGQzk1NDBDRjUxQ0UwMTc1RDdENkI4NDVGNTgzRDVBCis6MTBFMTgwMDBDQTJGNDc5MTVGRUU3OUQ5ODZGNThEMjM4RjFBRjg2NUVFCis6MTBFMTkwMDA0NTIxQUQ2N0VCRjg2NUJBRUNEQjEyQzMwRTc4RTUzQkMxCis6MTBFMUEwMDBFMjk3NUY5RjI5QkZCQzcxNjZGQ0YyQzREOUUzOTczRjM5Cis6MTBFMUIwMDA4RTRDRkZFRUY4QzU3NzlBRkNFMkVCQ0YyRjg3NjA1RUJFCis6MTBFMUMwMDA2N0NBMkY5REVFMjBFNjAzNzZDRUI2NTQwNzYyRTBGQkM5Cis6MTBFMUQwMDA3QThFNkYxMUY3MkVFMzcxOEE2OUYzQjRDQkM3ODIzRDUzCis6MTBFMUUwMDBDQkYzRDY0NDNFNERFNzNDQTZCRjU3RDRDRTQwN0RCOUQ1Cis6MTBFMUYwMDBGNTIwRDM5NzQyM0Y5NzcxM0NGRThEQzczMUNBNDI0QzAwCis6MTBFMjAwMDA2RkE2OTc0QkY4RkU0QzREMEFBOEY0RDc0RTZBMTJBNDlECis6MTBFMjEwMDA4MkJFOUUyMjkxMkUxNTk2QkFBQzc2QTQxNEI1OUJFOEM4Cis6MTBFMjIwMDBGN0QwNkVCQUNGQ0JGMjY2QzkyMTY2RUZEOEU5N0Y0MDRFCis6MTBFMjMwMDA0RjE3OTc1QjBEN0E3NTg4RDlGRTMyRDVDNTNFQTZEOEEzCis6MTBFMjQwMDBCRkJDMEZGMjEyMjgzQ0JFMUVDOUVEMjY5M0JFMTU3MDRFCis6MTBFMjUwMDBEODcwQTgxMkVEOTBDRkIzNkQ4M0VFNTc3NUYyRjU0NkU2Cis6MTBFMjYwMDBFQ0E5NTI1RjQ1QUM3ODU4N0RBMTg0RjBCRUM5QTNDNTI2Cis6MTBFMjcwMDAxNzk2ODEzRUJFMEFGNUFFRDBFNzY2QkREQzUzRjU5MjM3Cis6MTBFMjgwMDA1MUNFRjhDN0E3NTYxNkVCRTQ4QzdGM0NFQUNEODg5Q0FDCis6MTBFMjkwMDBFMUY1MDFFNTBDMzkwN0U1NDY0NDJGRjM3QTQ0MkZGMzA1Cis6MTBFMkEwMDA3QTQ0MkZGMzdBNDRDRUMwRjhEOTUxQkQzQ0YyODFGMUMzCis6MTBFMkIwMDA3N0ZBNzU3QTdCMTlENEIzNEZBRDk3MTc3MDc5NzBCNjJBCis6MTBFMkMwMDBFNUNDMUZCOEJERkE1REU5RTVDQTQyNEUyRkZGQjk5QzA3Cis6MTBFMkQwMDBBOTI5RkMwRUU1NEMyREM4OTlBNDUzQ0I5OTVBOTAzMzJCCis6MTBFMkUwMDBDNTA2Mzk3MzU1RTFCN0QwQ0I4OTBEQkQ3RUQ4QkZCRjA4Cis6MTBFMkYwMDA2MjAwQkE3NzcwN0MzNzE1NjhEN0MwRjhBNEU2RjRGMkVDCis6MTBFMzAwMDBCNkNENzRENTVCRkJDMEFBMENBMDE3MkZGM0YzMDY3QTI5Cis6MTBFMzEwMDAzRkIxRjlGN0FGQjRFOUYyQTIxMzk1MTAzQjVGRDFGQzFFCis6MTBFMzIwMDAyNDNFOUZEQjcwMTBFMzY1QTc5QTZGN0QyMUMxRDJBQ0JDCis6MTBFMzMwMDA0NzdCNkJGN0Q5OTE2RUJEMTZEQzEzRkZCNkYzRTg5Q0YzCis6MTBFMzQwMDBDREY4RjI4REVENEZBRjA3M0VCQThGQzdGRENDNzZBRTVDCis6MTBFMzUwMDBDMEVCRTlEQTNGRTZFRjVFM0Y1MkM1NzFDRERGM0YxNTE2Cis6MTBFMzYwMDBERDUyM0FERDBDNzQ3QTIyRkJCQTMxRTBFN0M5ODk3N0Q1Cis6MTBFMzcwMDAyNTAwQkNCRTA3RkFGMEM5NkY0M0E3QUY4QzY0RjgzQzE4Cis6MTBFMzgwMDA4RDc1MDc2MUZDRUY2QURERkYwMTdGQkVGQzZERDZCREI4Cis6MTBFMzkwMDBBMDkwRDFENTY5QUNGQkJGQkY0QjdDRkYwN0ZFQzI2NzI1Cis6MTBFM0EwMDBERjY2RERDQjA0QkUwOTNCMkZFMzg2NUYyODlGQUNGRjExCis6MTBFM0IwMDA1N0UxREIxMEJGNThGRkVGRDE4RkMxM0FCQkJFQjI2RjQwCis6MTBFM0MwMDA4NkY4MDVGOUZBMUJEOUFEM0YzRjQ1RDhCOTk5NDRGRTA3Cis6MTBFM0QwMDA1RUEyOEY5RDg3NzE1N0VCQ0U0NzkxRTg3OTI5NUMwRjNDCis6MTBFM0UwMDBDNjM3MjJFRDA3NjI5RDk3RkJBRTRCQjA0N0RFQjEwRUZDCis6MTBFM0YwMDBEMjZFNjM3MTNCRjNGM0ZGMkU5MEQ4MzkzNkE5RDYwMTY0Cis6MTBFNDAwMDA3OUYxQkRCM0Y3NjBCRTQxRTdFQzA5Qjg2RjY1QjY1MzZCCis6MTBFNDEwMDBDNDdCM0QyRDFBQzY5MzNBNUI3QzU4REVERTUyMUQ4MkNBCis6MTBFNDIwMDBCOEM5OTMyRkJEMjU0MTNFNThFOTRCMERBOERGRDY0RTA0Cis6MTBFNDMwMDBGQUUxMzBDQ0UzOUI1QTFBMEZGNURCNEQ3NjhBOEJEQjgxCis6MTBFNDQwMDAyOURFNTFBRkRGQTlGNzVGOUVGQzREMTNDQTQxMTE4NzRBCis6MTBFNDUwMDBCQTIzNjJCRkQwRjc1NDlEOUY0NEVCNDAwRTExM0YwOTkxCis6MTBFNDYwMDBFQTA2M0Y2OUQ5N0FCMDVGN0FDMDdFQTFGREE3OEU1QUNECis6MTBFNDcwMDBCNjNFRDY3N0Q2NUE0ODNERDgyRjZCMUIyQ0Q1QjFFQzdCCis6MTBFNDgwMDA5NzcwNDE2Q0ZCODVENjcxREZDRDkxNjgwRkFDQ0MwM0UyCis6MTBFNDkwMDA3Qjg2RDRFOUUzNkFBN0IyNUYxRTFFRjVEREZBNDk1NzExCis6MTBFNEEwMDA4QzNBM0I3RTUyODQ2RkI5REQzMkE0NDg1QjA4MjFEOTk3Cis6MTBFNEIwMDBCMzI1Mjc4NjlEQTY5QzE4RDY1RjRFREMzOEVBNUJGODBDCis6MTBFNEMwMDA0OUUxMDI5NjVGMkRFODZCQUJFQUM1Nzg3MjY3MzVDMTBBCis6MTBFNEQwMDBGODYzNjc2ODY1NkEwOUFEM0ZEMTYwMjExMkFENUZGRkRGCis6MTBFNEUwMDAzMjhCMEI2RjI4MjcwMTM4NDdCQjIxOUI2MDNERTQ2NUM5Cis6MTBFNEYwMDA3NDMwNDM3NkZFMDhFMkUwM0Q1NUQ0N0Y1MjIxNkVGNzNBCis6MTBFNTAwMDBFMzVBODBFREJBODQ5OUI3MzkyOEJERDQ5NjJCMDRGQzIwCis6MTBFNTEwMDBBNjE5RjIxNEZDNEU0ODYzRjlBMUI1NEVGMkEzMzhGMEU3Cis6MTBFNTIwMDBBQkE2MkE2NEU1MTlDNEFEMTNFNTYyODk3MjI0RTU0RkYwCis6MTBFNTMwMDAzNTE5Rjg3NkEwNzhCNDM5RkU0Q0U0MTdCQzgwMkY3M0Y3Cis6MTBFNTQwMDAxQ0ZBNENFM0NGREIwNTVEN0RGQkY4MzNGMkRGOTcwRjYwCis6MTBFNTUwMDAzNENEODI3OEVFQTlFODcxQzEyODE1RjU5OTU5NEY5OTAzCis6MTBFNTYwMDBGOTU4RDBEMzQwRjRFNzA0M0I2OUEyQUVDRUNGRTE4NkEwCis6MTBFNTcwMDBGOTNFQjUxM0VDQTQ4OTUxQkFFOEFEOUQ5NDE0MkJGRjc0Cis6MTBFNTgwMDA0QTk0MDlDRDdGNzg0NTdGMUUyRjQxRTlDNkYxMTI5QTQyCis6MTBFNTkwMDA3N0UxRjNCQjIwNkYwMEQ2QTc3ODUxOUUzRTU4NDlFNTNFCis6MTBFNUEwMDA3MDhDRjlFRDZFNTk3NjA4RTRFN0FFOTY2NjJDMkY1MDI0Cis6MTBFNUIwMDBGQUU0MTREQUZGRTkxNkZGMjE4MERCQ0U5Njc2MkM5RjcxCis6MTBFNUMwMDA2Q0U5QzJGNjlFOTY4RDU4REVEMTEyQzA3MjZEQ0IwRUVDCis6MTBFNUQwMDAyQzZGNkJFOUM2RjJDMTdDRjY5RDI5NEExMEM3QjlFMEUxCis6MTBFNUUwMDAyNDFENUY0NzQ3NTNGQkU4Nzc3NEY4M0VFRjQzQkZBMTE0Cis6MTBFNUYwMDA3RDcyQjhEREQwN0VDRUUxMkU0M0JEMkNCNEQxRDBERjBDCis6MTBFNjAwMDAzRDI1NjA2ODZGMkFBODNCMDY3Q0U5MkFERDYxNzhFRTJCCis6MTBFNjEwMDAyQ0VFMzZCQzc3QkE3RUMxRDlFRTk3NkI3RjA0QjZDOUIzCis6MTBFNjIwMDA0OTMyOUNCQkEwQUZDODcwNkU4OEYyRjE5MDY2MkE1RTNBCis6MTBFNjMwMDA2OUZERkU0NDFFRTdFODY2RkJFNDk5MjRGMjgzNzQwOTUxCis6MTBFNjQwMDBBOTY0NjAxRkY0MjZCMjNDQzhENjJDRjY3RUVCOERBQ0Q0Cis6MTBFNjUwMDA3RTdGMEVEQjNGMTI3OTlBQjIzRDQyRDc0NENBODhFRUU0Cis6MTBFNjYwMDBFN0RGOUZDOENGMjkxNUIwQkNDOERDRTIwMDQ0MjQ0OENFCis6MTBFNjcwMDAyRTI0QThDMTdFNDgyOURCMjcxM0ZCREVBRDNDRUU3MEJCCis6MTBFNjgwMDBCRjk1RUM5NEE4M0REOUFBQjBGOUI3NkEyNEIwODJGNjM4Cis6MTBFNjkwMDA2QjJENjZGNTdCQUE0OEMwMDJGM0Q3QTgxNENGRDBFRDQ2Cis6MTBFNkEwMDA3MzM3RUZGQjRBMkE4OUVFOTc5M0QxMUFFRUQ3Qzg3Q0NECis6MTBFNkIwMDA5RjNEQjJFRkVENzg5N0UwQkUzRTg3RDdDQTg0OEYzMTk5Cis6MTBFNkMwMDA4RjM2QjlCOTRGMDJGRTFBRDJEQ0Q3MEJGM0JCRkYxNjU3Cis6MTBFNkQwMDA5QjFBQ0IxRkVBQkRFNThCMkNFMDlCNEQzNzdFOTEwNTQ1Cis6MTBFNkUwMDBDQ0JFMjk5MjNGRDNFN0QwRTdDRkU0NzJCODZDNkFDRUI0Cis6MTBFNkYwMDBDN0ZDODU0REY1MkUyRjg3QjNDNUQ0OEVGOTBDOUZENzU3Cis6MTBFNzAwMDBGM0ZCMDk4ODgyN0VEMTMwNzcxNEFFMDE5MTNGMjI0MzFBCis6MTBFNzEwMDBERTFENURGRjg4RThGOUQzRkYzNEJGNjY1M0YzNzI5NkMwCis6MTBFNzIwMDA1RjkzNEQ3ODdFQ0Q0Q0Y0MjcwNTFFMzY0MTM5QUVGRjAwCis6MTBFNzMwMDBCOURFRUYzQUJGRTY5NDc5MzVBNjNDMDcwM0ZENDJERDJBCis6MTBFNzQwMDA2RkE2NkYxNUYxMTJDN0U5NUJCQTk5RTU0NTY0OTlFOEMwCis6MTBFNzUwMDA0NkU0NUQwOEJBMTRGOTE5MjI1RjQzRTQ2RkQ4Nzg1RTg1Cis6MTBFNzYwMDAwN0ZEMkNDRjZCOEU0RDVGQjYzREM0MDNFN0RFNjQ0QkQ3Cis6MTBFNzcwMDBCQzc3NEJERUE5RjMwODlBM0RGOTVDMzkyQzFCQzdDNjYwCis6MTBFNzgwMDA2NUY5MDNGRjMzNEFGQjg1QTcyQzNBNkU5RTQ3QkI1MUMwCis6MTBFNzkwMDA1RjE3RTU1NkY4NzUzMjFEQzIxQkFFMDI3QkI1QTg1QzRCCis6MTBFN0EwMDA2Qjg1RjM3QzI5QTUwNENGRTk5NDk2NEI1ODE2MUQ2MjFFCis6MTBFN0IwMDBGNURCM0MzMjdFQUZDREMzRTI0REEyN0VCMUE2M0QwNzc0Cis6MTBFN0MwMDBFRjI3OTlERUJCMzhGMjlFMTVGQkZEREU2M0UxQTVDMkEzCis6MTBFN0QwMDBFNkNERjM5MDY3NzJGQTVFM0Q1OTY2RjlEMTU1MTI5MzEyCis6MTBFN0UwMDAxQkIwQTEzQTg5RUI0MzBBQkY4Qjg5RkI5MjAyNUREQzI3Cis6MTBFN0YwMDBGNUM3MUM1QkI3QjdCMEZDM0U5MTBGRkRCNzk3NjVDQzcyCis6MTBFODAwMDA4Nzc2OTZGQkE2QzFEOUIzQjI1MDI4MDhGQkVCQTVEQkVGCis6MTBFODEwMDA4ODNCNDU4NUY5ODUzNUUwQzcxNTM5NzdFRjgxN0M4OEQ4Cis6MTBFODIwMDAyNzJFNjQ3QkI2MTcxRjYyRjZDMjhGQ0JBRkM2RkI0NjlFCis6MTBFODMwMDA1QzVGQ0IxODhGNzU0RjQ5RjQwNkUwNDMzNTU2QTZGRjUxCis6MTBFODQwMDA0NTNFNzRCOUQxNUVBODM1RDkwQjE3OUZFMkZFOEYxNEVGCis6MTBFODUwMDBEMkU3MDczREY5ODhDNzE0OEZFNUY3ODAwQzI0QkZBM0UyCis6MTBFODYwMDBGNzgwMzBGOTUwQ0FDNzc0OTZCQjFEMTBCRjJFM0E2NEFBCis6MTBFODcwMDBDMUUzOUVGMjM2NERDNkYzQjE5RDJDQ0ZFMzg5OTA2Rjc0Cis6MTBFODgwMDBEMEYzQTgyRjcyMzg4NkI4OUNGODFCQ0Y5M0VDRTE3MkI2Cis6MTBFODkwMDBFMjc1MkUyNzBFODM5Q0EwRTUyQjNDNEZGMjEwQ0Y5MzAwCis6MTBFOEEwMDAzNDlGOTdEOEQxNTJGRDkyREVERTMxOTc0NTkyN0YxNjg0Cis6MTBFOEIwMDBFNjQxNkQ1NjA4OUVCRjFCRTBCRThGQTIwMDFEQzc5MEFCCis6MTBFOEMwMDBDN0I4MDJFOTY3NkZGMkREMTU0MDFDRUIzNTBCREE5NTJFCis6MTBFOEQwMDA1RDUzNDg1NjJDRkZBRUVCQzJDQTQxRjMwRjNCNUJFNkRCCis6MTBFOEUwMDBCQ0Q0MzY4OERGRThCNDUxN0YyNkQ2RkIxRTcxQUVBQkIwCis6MTBFOEYwMDAwQkNGNUJBNDk1NUIwOEU0NTU2NUQ5RkJEOEZFNDNBRjBECis6MTBFOTAwMDAwM0U5Nzk4OEQ3OEVGQkZCNjQ5RTkzQkNBQkNCNTNCOUVDCis6MTBFOTEwMDBEREQ3MzUwQkU2RkZFMDM2MDVDRkU3ODg3MTEzQkQ3NDEwCis6MTBFOTIwMDAzRTNBM0E0OTlCQjIyNzEzRTZERjM5MzU5ODA5RjY0QzRGCis6MTBFOTMwMDBEN0Y4N0QxQjBCMjA1RkU0QTA0QzgwMENDQ0YzQjIxNjAzCis6MTBFOTQwMDA3MTdGOTZBRjJCNEREMUE0NTg3OUVBMDNBREVCMDM4RkJECis6MTBFOTUwMDA2NEI4NjdDMjBDRkYwMUVEMEVDODA4MThGQ0JDOTVCMzgzCis6MTBFOTYwMDAyODQ2RkVFMjY5Q0MxM0VEREI2Rjc2NUMzQjFCQ0Y0RDk2Cis6MTBFOTcwMDA5RUU2RkQxNzA5OUMwRUIzMTYxMjA3RkFERDQwOEY4MzQxCis6MTBFOTgwMDBFMEQ5NjUwRDIxREVENjJFQjQ1NEM3M0E1RjVCNTRDNDdFCis6MTBFOTkwMDBGMEJEQjZGNDUzQjQ4QjQ5NzFFQzc5MjQ5NTlCRTk5NTlECis6MTBFOUEwMDBDREU3MEU4NThFNEZERkVCMkE4RDNERkVFNTFDNkY5NDgzCis6MTBFOUIwMDBBRTVGMDM3OUQ1NTU2RDQxQkIyMjA5MkU2MkMwRkMxQ0E4Cis6MTBFOUMwMDA2QTA3NDk0OEVGMjg5NzNFMkJCNTMxM0JDMTI0MkZGQUZGCis6MTBFOUQwMDA3REJGNTQ0NzRGRjlGREU1RDBGOTQ1NEU0MzdDRkY0NEQ4Cis6MTBFOUUwMDBGNkVDQTQ2MDBDM0M4QjUyQzA1MUM4QTFGRTcwMjQ3ODk4Cis6MTBFOUYwMDBGRUI1OEJDMzkxMTRDN0U2RUIyOEJFNTY4ODc4NTVERDZCCis6MTBFQTAwMDAyOUNFRUJDRDJFMkE4QjcxNEU2QzAwM0M5OEU5RTE4RTFECis6MTBFQTEwMDA4NTNFNUMxNzc5RUUzNUEyODJCRTJDQTVGQ0E4OEI0M0ZGCis6MTBFQTIwMDAwQzA0M0YzM0JDMTY3RUM3RjAzMkI3RkZBODg4Qzc0NzM3Cis6MTBFQTMwMDA0RTczOURBN0REOEZEQTQ1NkU5RDVEMEM4N0EyMTU1QTNBCis6MTBFQTQwMDA5RkNBRUIzRkY2NEJFMTdCQTg1Qzk1NzZGRDA5RUQ5RUY2Cis6MTBFQTUwMDBBOUJDRkMzMTk0NTQzRkVFOTI4MkVGQkU0MTVGOUUyMkVFCis6MTBFQTYwMDBBOTM5ODBCNDU5NEY4RjgyMDgxOUI5NTU1QTY2QjA3RkI5Cis6MTBFQTcwMDAzQTI0RUZFMTY3MzAyRUQ0OTcwQUZEQTY5MzNBODUyMTE4Cis6MTBFQTgwMDAzOTgwRUJGQTkzMTQ2RTA1ODU3NTI5RDE1NjQxRDk0ODIyCis6MTBFQTkwMDBCQTZDRjA1RTYzQ0Y5RjBFQzM3NzFBN0IxQzQxMTk4MjVDCis6MTBFQUEwMDA5MzNCQURDN0Y0NzFBMzZCRjRFNzQ3RjJFMDE2OEQ2RUFDCis6MTBFQUIwMDA1QjFFOURDRjkyMURDNjdERDIwNjEyQzJGMTk2NzYxQkJCCis6MTBFQUMwMDA5RjlCQ0Y4RjQ4MzIwNTBDNUM0RTEwQzk3RjlEODJGOTA5Cis6MTBFQUQwMDBCREM0QzFEQUUzNDc4QkYzRTg3RDg1RkFGQkNDRUEzOUE0Cis6MTBFQUUwMDBCQ0VBRURDRTIwREMyRjQ0MDJDNjc5OEE3QjczOUVBNzU4Cis6MTBFQUYwMDA3MkNDM0UwMUNGQzMzQzBDNzRGQzkxREJFRUI3NTA3QjczCis6MTBFQjAwMDAzOTIzQTVBRTExRTA3MTE1NTE2REFDNjQ3NjgzNTg5NzI5Cis6MTBFQjEwMDBCODg3NjY4MTczQjYwREUwQkJBMEREQkMwRUNEMDZGM0YxCis6MTBFQjIwMDBGOTU5RDdFMEVCMTM3OEZGNDcxMUMxNzVEQzVFQTQ2Mjk5Cis6MTBFQjMwMDBCOTM0QkU2NkJGMDZDREE1QTE1Q0ZEN0QxMDRENUMzRjFFCis6MTBFQjQwMDA5MDY1QTkwNkZFN0Q1MUQwMjNEMUU0RDM1OTdGN0ZCOENCCis6MTBFQjUwMDAxNjYwOUM0Q0MwNzU2MDNBMzVDNkM5NzZDMTIxRDc3NDIxCis6MTBFQjYwMDA4NERGQ0I3QUY4MTFBNUFFMDRDNjE1RUJGOTY3NTlFODM2Cis6MTBFQjcwMDA4MTIwRUNBQjI2QjI3QkEwREU0REE5N0IwM0ZBRTcxQzFCCis6MTBFQjgwMDAwRUJGMkZEMUE5MTNBNzVBMDhFQkZDNzhFNzQ3QUZDOEVGCis6MTBFQjkwMDBGOUQxRjUxMTEyQkUxQkYyQTNFQjc3Q0FFRTBFNThDRkQ2Cis6MTBFQkEwMDBDRUU3MEUwM0JEMEZCNDJFOTExRjRCRTkwMUUxNDZFN0ZFCis6MTBFQkIwMDBGNTIxRTgzN0YzQkM4RURFNDA3RTBBNzZDOTc0QjlEOEY5Cis6MTBFQkMwMDAxMDQ3Nzk4NkMzRjE5RTYyREZDN0YwNUVFOTRCRDkyRTBDCis6MTBFQkQwMDBCQzdGMjdCRjdCREY1MDNBOEZCRUVCMjVDQ0FCNEQ5MzdDCis6MTBFQkUwMDA0OTE1QzA0RkU0MjM3Q0VBNTREMENGNEU0QkYwQ0IyRUQ2Cis6MTBFQkYwMDA1QUVGQkI4QTc4QjdDMDM0QkNDQkJDNDAyQTcyNEVCMTQ2Cis6MTBFQzAwMDBCNzgzRDI0REM2RjVCMjBGRTRDOURGQUY1QjkwQkM4MENECis6MTBFQzEwMDA5NjE5ODkwQjkzNDdEMEYyODIzOEUyNzdEMEYxMzIyNEVCCis6MTBFQzIwMDA4QkFGMUI4MzUwRjM5MzJGQTFGM0ZDNDkxQzlEMjdBREExCis6MTBFQzMwMDBFN0REOTAxMDFDNDFGOUVEOEYzNjYyMDc3QTRENEJBODQ1Cis6MTBFQzQwMDA1QjM3MURCRTkzMkNFMzdDOEU1MDNCNTFBMTcyQUNFMjJFCis6MTBFQzUwMDBGMkNGMjZEQUU5Rjc4NjdFRUQ5QzAwRjNDOTZBOUU0NjdDCis6MTBFQzYwMDBERUE1QTAzQzVDQzRGOEU0RThDMzVGNEU4NDczRTBGMjI4Cis6MTBFQzcwMDAzNzRFMkY5RTMzRTdGNDk3MzY4MkMxQzM4Q0VGREQxQ0VECis6MTBFQzgwMDAxRTZGQzYzMzdGQTczMURENzYyQkM0REIzRkU2RkUwRjU4Cis6MTBFQzkwMDBEMTNDRTgyRjVDQzdGRDg1MzdFMzk5MUZGNDY2QTE4ODU2Cis6MTBFQ0EwMDAyRjA1RDNGNUY2NkRBMzQzNEJCQTBDOUMwNzZBMjc0MTk5Cis6MTBFQ0IwMDBCRUYzNjc2RTJEMjkxOUZBMTExRkYyRUQ3NURDNkZGRTk4Cis6MTBFQ0MwMDA5ODkwNkFBMEYzRUJENjRDMUI5MjQyREY0RjZGNjU3MEIxCis6MTBFQ0QwMDAzMENGNkZFQzY4QTY5RjFCNEU1MjgyRDZDNUNGMUE5NEQ4Cis6MTBFQ0UwMDBBMDBERTQ3N0MzNDk5QkUxRjlERkE5MURFREQ3OUQ1NzNFCis6MTBFQ0YwMDBGRkM5ODc4N0E2QzNGQ0FFMjRFMTU1RDBGRkNBRUIxMjNCCis6MTBFRDAwMDA1OEUwOUVGMzZCMEY5RkM3NDA3MDY5NEM1Njg4NDJFMUY0Cis6MTBFRDEwMDBEMTI4MTFERjYwRkQ5RUY5QjcxQzEzQkVCMzQ3MzNGQjRBCis6MTBFRDIwMDAyNTdENUFFQ0Y1NURDNEQ3Mzc2RDc1Q0QyRjgxQ0UxQTkwCis6MTBFRDMwMDA0MzU2QjRFNUFGRkI0M0M1OTBDMUVDRTdDNjkzRTc5MUZBCis6MTBFRDQwMDA4MDJFRkVEN0E4ODQxMTFFOEQyN0NGQzdFN0QzNTYxRjZDCis6MTBFRDUwMDBCMzAxRERDMzM4MkE3RDdFOUQ0MzFCMDJGMURBODFFMEQ5Cis6MTBFRDYwMDBCQzlCREI0MThEMjc5Mzg5M0Y1NUZGOUNGMTc3NzRGQzU5Cis6MTBFRDcwMDAzNDZDRkYyRDg3REI2RkY3NUJBQTYzRTU3NzM1OEY2NjExCis6MTBFRDgwMDA3MDE5OURBRUY4MjAxRjY4NEM5MDY4OUI2MzdDNTdGNDA3Cis6MTBFRDkwMDBDQjQ4MzFFRTVGOThFN0Q1NTMxOUJFMTJFNjdENEUxNThDCis6MTBFREEwMDBEMTYyN0Q2RjMxODdBMzk4NkY0RjRBNzg5MTBGRTlCMzk1Cis6MTBFREIwMDBBRjEwRUU5OTg4RDRERDdEQjlGQTdCMjRCNjcyRkNGNUVDCis6MTBFREMwMDBGQzMwOUMwQkUzN0Y3QzYxRUM3MzNCMDJDRjkzOTQ2NTNBCis6MTBFREQwMDA2ODJGQkY5MDUyRjczNEM4Qjc3OTk3RDEwQUE1OEYyMTExCis6MTBFREUwMDBGMzgyMTY3NjNFQzUzRjI4QkVBMzcwOTY0OTYwRTI2MDY2Cis6MTBFREYwMDA3MEI2NjFCQjE4RUZBMzE3MzkzRjUyM0YxQ0YyRDRBRjc2Cis6MTBFRTAwMDBFMkYyRkZBQTZENEIzMEVGNDlDOEE5OEYzNkNBMjhBNzk2Cis6MTBFRTEwMDAzRTQyREQ0MkNCODA4NEY2RUJGQzNBMEE2QjJBNTcxNjYxCis6MTBFRTIwMDA2RDlGQjYwRkQ0QzE1NTk5RDQwNjRENjFDRjZGODZCMjkwCis6MTBFRTMwMDBDRDZBODhGNzhCRUYyRDM4Q0NFQ0I3ODU5RDQ2M0Q1N0QyCis6MTBFRTQwMDA0RjNBM0YwMUZCRTBBMzE3OTkzQ0EwRkM2RDAzNzlCQzRFCis6MTBFRTUwMDBFODJFRTMzOEY1REIyRUZBMDBFNjU3NkZGMkNCMzNCODM1Cis6MTBFRTYwMDA3RTM2REI3OTlCNDdGM0Y4RkUyNDMyRTk0Q0ZDRjI0NjEwCis6MTBFRTcwMDBBMkVEMTg4RDdBQzEyN0MzM0NDQTE0RTMzRDVCQTI0Q0I2Cis6MTBFRTgwMDAyRjYxRjA1RkJFRkQ4NENEQTUwRTNDRUUxMTJBNDcwQTJFCis6MTBFRTkwMDBFOEI4QzdBODNGMEVFNTFGNDc2QkJGMUY0REYxNzBGQ0Q4Cis6MTBFRUEwMDAyMDgzQ0I4MUQxNzU0RkMxRjc4RTFGNjRFQkZGQjRFMTk2Cis6MTBFRUIwMDBEMzQ1NzA0RjBDOTlDM0VDODYzODM4N0M0MDdGOEQ5QkNFCis6MTBFRUMwMDA2QjBGQjREMkY1QUVBNjYyQ0EwMUU3ODJFMjk4M0QyMjhBCis6MTBFRUQwMDBFQzMwNTlCRTU2NzZEMUY2QzlGRjU4OTgwQ0VCNEM3QkY2Cis6MTBFRUUwMDBFODA3RDUzMDVFRkE0MzA5MUFDMEFEQTM0MjFCMEZGMjAyCis6MTBFRUYwMDBCRUEzRDZFOTg1RjMyQTlCMjkxOTk2RDNGN0VENzQxQzk2Cis6MTBFRjAwMDBEMDI3ODFERjRFREUwM0RCOTEwNURERUIyQUUxREUxNzQyCis6MTBFRjEwMDBGN0FFREVFMDMwQkFBRTc2MEJCQjI3QTNGRDdDRTI2RDI4Cis6MTBFRjIwMDAyNUQxRUYzNUVEQUE3RDBDRTY5NTNCOUJFQTA3MDlDRThFCis6MTBFRjMwMDBEMTZCRTNEREJBRjEwOUI3QUYxQTM5NEU4RTNGM0JFQTI4Cis6MTBFRjQwMDA4RUYzRTA1Q0MyN0UxOUNEQzc0RjFCRjJEMUFGMUY0RENGCis6MTBFRjUwMDAxODNEODlGQzdCRjgzNkQ4OTEwMjdFQzdBOEJFMjJCQTNDCis6MTBFRjYwMDAzQ0I1RDFERDUyRDA0QUQ3QjVCNEU3MzFCQzhGQTM2MUVGCis6MTBFRjcwMDA2NTMwNjMyRUU4REIwNzE1QTY0N0Y5RkNEMkZFOTg1NUVECis6MTBFRjgwMDBBOUJBQTJGQTc3QUVFNDQ2M0I1MkQ4Qzk5NzEzRjE1MzE3Cis6MTBFRjkwMDA4Q0YxQzIzOTlDMEYyRUU3RjZGMURDMDQwNkU3RjlDNEM4Cis6MTBFRkEwMDA5QjBCRUY1RDYxMjcyRTBCODVEOURDNjlERDY1Q0I0MEJFCis6MTBFRkIwMDBFRjJFQjEyNjgzN0QwMzZCODk4NTc3NTE5QUVEMjBDMUIxCis6MTBFRkMwMDA4NzhEMEYyNEZBMjFFRUZBQjFENDU3MDg4MzFDQjEzMjkxCis6MTBFRkQwMDAzRUVCN0IzNjJFQjAyNUFGRkYzOEQ2MzFDQ0FGNkYyQzUxCis6MTBFRkUwMDBFNDc2NUQwMUQxRTBGQzQwRTNFRTUxNzgxRTJDMkU5RUNDCis6MTBFRkYwMDBFMjcxMDJDQTNGM0JFMEY1NzlEMEZGNzREREQ3M0NFMzE0Cis6MTBGMDAwMDAwOEUyQjkzMDcxNUY5OTlCRjgxM0U5Nzc5QTc2MEZEOUM2Cis6MTBGMDEwMDAwMjc2NDZEQTA4NkRGQzcyM0FERUM3RDY3MDJFQ0EwQjRECis6MTBGMDIwMDAyQURGMjRBQTVCNzNDN0FDQjk0NEExN0NENTM4OTREQTMzCis6MTBGMDMwMDA1REI0N0VEMTQzNzdCMzdBN0U3ODkxODVENkFGN0RFODkzCis6MTBGMDQwMDBEMTRCMTQ0QTlGOERBM0MzRUY0M0ZEOTY4NzlFNjZGNTZGCis6MTBGMDUwMDAwOUUxNDUzMkFENkY3QzY4M0ZFQjBGN0JEODk0QjBCNkM5Cis6MTBGMDYwMDAzRjc0RTAxMkYwRkY4RjI0MzNGQjgxNzhDMzU3MDJGRDE5Cis6MTBGMDcwMDAzNDNFM0RDQUQyQTE1QkVGQkEzMTRDM0UxRTcxQjA3RTI4Cis6MTBGMDgwMDA0N0YyQzg0RjY3MDFCQzNERTFDMjU5QkE3REI5RUJDNzMxCis6MTBGMDkwMDAwODNCOTZEOTcxNjI5REUyM0Q5MjE5N0JGQ0IxNjM5ODYxCis6MTBGMEEwMDAxRUJENjYxQUVCNzc0MTAyNjk3N0IwRjM3NTdFQjBDNzczCis6MTBGMEIwMDBGNkVFMUE4NTcwNDkxOTkzQzJFMTQ1QzcyOThEOEUyMzUyCis6MTBGMEMwMDBFMDI4QzYxM0RGNUQwQzdBMURFNEJFOTVDQTdEOUQ5Q0M5Cis6MTBGMEQwMDAzOTk3RTM4RDdFQTcwREJGNTNBQzhEODc3QkFDMUE2NzQ0Cis6MTBGMEUwMDA2NThGMDdCQzUxN0MyOTFDNUY4QTFEMkY1N0RCQ0NFNjNFCis6MTBGMEYwMDA0N0M3NEQyRTQxM0QzMzExRTJDQTdCQkZBNkZERjNBMkE3Cis6MTBGMTAwMDBGMzM2RDNDNzhDMzE0QzFFNUREM0NBQ0VGN0Y3MjU4RkFCCis6MTBGMTEwMDA0MDNBQkEyMDgxRDk4QkE0OTRDMjhGQ0FCMzhEMUM2RTk5Cis6MTBGMTIwMDBFQkM2MjQzMzNGMzI4Mjg3MjExMjhFREZDQUUxOTdDREFFCis6MTBGMTMwMDBGQTlGRTk3QUU3RjA3OTlDRURGNUVBRjBBNDQxN0M2NTY1Cis6MTBGMTQwMDBFRkNFMjJDNEQzQzYwODFEQUMzMzhDNzM2NDg1RTlCREYxCis6MTBGMTUwMDA3MkNBNzgzMDhGOTQxMUY4REU2QTA3QjFFMzczQjIyNTcyCis6MTBGMTYwMDBGMjVFMUU3REVGODI2OTdEMTM4MTFGOTY3MjdCOThGODk3Cis6MTBGMTcwMDBDRkM3QkM4NjA2MkUyRDk2QjY4NzZDMTA5NzVFREFDRDZCCis6MTBGMTgwMDBFMkU0QTQ4MEFFMEZFODYzNTY0RDI5NUY5RjlCQUZDRkFBCis6MTBGMTkwMDBDREQ2MTczMEQwMjczOUQ0OTczQjNCQjEzRkRENDZFMDgxCis6MTBGMUEwMDAxRTE5QUY3ODAyMUZDRkMwQ0ZCMUM2MDNCRTE4MDgxRjBCCis6MTBGMUIwMDAxRDY3MUIxRjYyOUUyNjc4NDZFMDZDOUE5RjgwMjdGMDkxCis6MTBGMUMwMDAzMUJFNTc2Q0U0MjczMUNGNUJDNjQ0RTJCMTQ2N0VDRUY4Cis6MTBGMUQwMDBGQjk2REZBQjYwRUYyREJEOTFFMjExRUMxRkQ1NDhDRjYwCis6MTBGMUUwMDA0QjdCRjIyQ0YzOEJBM0VGQjU3N0FGRjA4MTlDNEY5MDY0Cis6MTBGMUYwMDA1NDE2MDdFRkE5RjU4M0ZFNkJEQTU1ODE3MUFBQTU0RjY2Cis6MTBGMjAwMDAzREZDQTQ5RkJFQkZGOEQxMEQyRTQ4QUVGQTQ4RTlDQTE2Cis6MTBGMjEwMDAwMDNCQjg2MUZCMkExN0RDMzNGN0ExRTI3NzgxRkNGQ0U1Cis6MTBGMjIwMDAyODIwQzdDQzVCN0Y5QkNCMDE2MTc3MzU3MjdENzNFNDZGCis6MTBGMjMwMDBCN0I3Q0QwNDc4N0NCMUREOEFFNzBDOUI3NkM0MDVFM0QzCis6MTBGMjQwMDAzMDZFNzIwRERBNjNCNEZFMzZBQkFGRkUwNEZDRDhBNkE2Cis6MTBGMjUwMDA5RDQ2RkI2OUYxNkYzNjY0QTg0ODRGRkU2MTE2REMwNEQ5Cis6MTBGMjYwMDAwQjBFODNDREIwQzY2RDU2REM0RjY5M0MyNDdCRTk2NzNECis6MTBGMjcwMDA0ODEzRTlCQjE1RTY2NzdFMUZFNjcxOTJFMkJEQTk1QjA0Cis6MTBGMjgwMDBCRTBBRjJGQkNDRUQ1NDkyQTAzREQ2RDQ3MzFCREE2OUQyCis6MTBGMjkwMDA0RDNEMTc3RTAwNzY0NTkzMjk5RkEyN0UwMDNCRUNDNTJECis6MTBGMkEwMDAzMURDMEVFM0Y3QTQwQkY4OTA0MDNBREEzN0FEMEZGRUVECis6MTBGMkIwMDBCMkU0NkQzQUFGNjNEQkZFRTI5MjhBRjU3QTczMjVFMjNGCis6MTBGMkMwMDBFOUQzRUUwNTlCOUU1NjA3RDZBRjFGODM3RDEwQTc3RjFGCis6MTBGMkQwMDA4RkUxNTdERDI5QjE4REExNURBQzZDQjAwNjVEMTAxRkNCCis6MTBGMkUwMDA2OEQ4NkNGNTUyMEQ0QzFBMUVERUZBQzBBRkMxQkY3QzU3Cis6MTBGMkYwMDAyRENFMEJBOUE2NEIxRTdFRkU5NTczNjk3REM5NjNENkU0Cis6MTBGMzAwMDBCNDFBMzY3RDI3RUM3MzBCM0M0MUNFMDZEODI5MDIyRjY4Cis6MTBGMzEwMDA4QjdGRkZCQzBERTI5MEYwMUNFQzVFODE5RjI1OEZGNThBCis6MTBGMzIwMDBEQUUwOUM5RjE5OEVEM0JBN0I2RDk4MEY2QkM2NTNGN0FBCis6MTBGMzMwMDBEQjMzQzAwNDY5N0RGMDRCMUJEMEY3NDdCQjI1QkNGNzFFCis6MTBGMzQwMDBERUZDN0VGREU2RTc1RDQwODcwMDI3RjA0MzA1QkUyMjM4Cis6MTBGMzUwMDBGOEVCODdCN0UwQ0NBNzRCQjExRkM2NDM0RTg1QkZDN0JDCis6MTBGMzYwMDAwMTQ3NjU0OEU3OEYzQzBENzE5NEQ3RTNCQzAwODdGQUVECis6MTBGMzcwMDA0N0FFNzVDMTdBM0U1MDk2MzE3QUJGNkY1NTA2REM5NzFECis6MTBGMzgwMDA1NzZGRjU2N0I4QjE2NENGRUJFRkJGMUVFOUYwRUE4M0MyCis6MTBGMzkwMDBENzY3QjA3QjI0QjQyQzc2OEZBNjNGMEJENkY5QjM3QjBFCis6MTBGM0EwMDAyRkMxNzUyRTIyNzU0ODg3RjVGN0IxRjhDNkU3MEFBOTZGCis6MTBGM0IwMDA3RTJDMDZCRkNDMkQ2NkZDRjJDMTk2Mzg0ODBFMjIxRjZCCis6MTBGM0MwMDBDMDNFMDJFQzlCQkMyOEUzQjlGQjdFRjcyMjkxRTU1OEQ2Cis6MTBGM0QwMDBGRjlDQzcxN0M2MTU0N0VFRURCMzgzN0REN0M0N0IzNUI5Cis6MTBGM0UwMDA2RDVCMUQwMjNDMURDOUQxODY0MDNDOUZDMkMxQ0ZFMTZGCis6MTBGM0YwMDAyNkMxQkRFRkYyQzFFOTQzMTg5RTg4MEFGQjIxRjgxRTIxCis6MTBGNDAwMDBCNUM3QTdDMTczRTgxRkIyNkE4RTEyQzM3QkZDN0UxQjBGCis6MTBGNDEwMDBGNjdEMTFERkEwRjM4RTg3RkRGNDBGMzI1ODVFOUU3OUUyCis6MTBGNDIwMDA3RDFEQzU0MjFFOTAxMEQxRDNEOTQwRkNCRjZEMEREMkI5Cis6MTBGNDMwMDBENzY3ODcxOEZGMzQwNjZBQUJCMTNENjQwRDBFODFGNkJECis6MTBGNDQwMDA0MEVGNkMwOUU1NDM5QzYxRkYzQzQyMUZEQkFDOUNCRjc1Cis6MTBGNDUwMDA4REVENzQ5RThBQTQ4N0VGNkUwOUVGRDMxNEY0QjJFOEExCis6MTBGNDYwMDBBRTM4QzM3RTdEOTQ3RThDRjc0NTA5N0UxNTdFRDZENTU5Cis6MTBGNDcwMDA1QzFFOThENzZEOTYwRjk3MTY5QkZFOEVDMkJERTlBN0FFCis6MTBGNDgwMDAxNUZGNkVCMDA2MUVGODM1RjAzM0U1NUZCRjBBRkM2QzYxCis6MTBGNDkwMDBDNUY4QzBEMURGM0RGN0NBMTU5NEVFOEY3NjBCM0UzNjI2Cis6MTBGNEEwMDBDQTVCMzMxRkQ3M0Y1RTQ2NjJGMUYxNTFBNzk3QzRFNEIwCis6MTBGNEIwMDA2M0ZBM0MyNjFGM0JEOUI5RTlGRjU3RjJGNkVBMDFFNEFCCis6MTBGNEMwMDBBREJGRDgyODZGM0YyN0M1NDlFNzExRDAzMzRCRjBCRUY5Cis6MTBGNEQwMDA1NzMzN0M4NURGNkI5NkEzOTlDNTZBNEMzOTRBN0YwRUZBCis6MTBGNEUwMDAxMTFEM0MwNTFDMDU3RDJFN0U2ODI5N0UyNzQyQzc4MkEyCis6MTBGNEYwMDA0RTA1MUQ0N0U4RDRCQzZFMjMzQ0NERUQ1NTMwNzc1REZECis6MTBGNTAwMDBGRTgzNzUyNUY1NjNDMENFN0Q1NjBFNkNBMTUzM0I0RTMwCis6MTBGNTEwMDBFNzcyMkI4NUZGRjFERkU1NjFCRUQxMkFFRTA3MUM3NzhDCis6MTBGNTIwMDBGN0I5MjA3RjZDMTVGNzNCRkEyMDJFOTkxNDdEREVFN0EyCis6MTBGNTMwMDA2MEY2RDI3MTVGOUYyQjU5NjczN0JEQkQ0Qjc2ODE5REI5Cis6MTBGNTQwMDAxNzBFOTBFQTU4RjEyNDJBQjE3MTFFNjEzMjUwM0JEQjRDCis6MTBGNTUwMDAxNzNCQ0VFM0ExQzc3OUJDNzNCQUVDQ0M2RDg2Mzg3MDhCCis6MTBGNTYwMDAxN0JCRDc3RkUxOEFDQjVDQjAyRjcwN0NENzg4M0I4MEZDCis6MTBGNTcwMDBGRjdFRjY2Nzk5RERFQkU5RDcxNEM4OTM1OEMwNDA0MDg5Cis6MTBGNTgwMDAzRTI0RkVCQkE3RDA3NTJFRDhCNTA0RjMxQkNDNzE5NEQ2Cis6MTBGNTkwMDA0NUNFNkRCOEJGRjAzOUI5MTk0QjczRkM2NDMxQzQ1OTBECis6MTBGNUEwMDA4MERFRUYzNTNEREY3NTExRDJENzYyMTM3REQ1MDE3RDQ5Cis6MTBGNUIwMDA2NUY1QTdBRjE3MDRCRjhFMjdFM0Y1RTdDRjk2NzNCOUJDCis6MTBGNUMwMDAzNzVEMkVCRTAzRUM5OUUzRDRDRkM3NUMwMkI5RjgwMEQ3Cis6MTBGNUQwMDBFOEREQ0ZDMUVGMDdDNkYwQTcyM0REMkVBOUZCRDBDNjFCCis6MTBGNUUwMDBFRjcxNDY3QTE3NzQ2OEY2RjdDREU1QjEyN0ZFM0VFOTZDCis6MTBGNUYwMDAyNkRBQTVFMUM5Mzc0QUVFQTFFNUIxMjc1RjJCN0MwNkUzCis6MTBGNjAwMDBFQTRGQkQ5QUZCMDZFOURGN0ZEQUVFQUZEMEJGMzlCRTI1Cis6MTBGNjEwMDAzQjBFRTc3MzdDRjc5RjcyNkY4MkZBRDM3MTk4ODc3NTAwCis6MTBGNjIwMDA3QzY1MUNFNjQ1Rjk3NzI3MDZFMDNDREZGMTFDMTZCNzQwCis6MTBGNjMwMDA2QjdERjZDQjEyQ0NCRjIwNkQ4OEM3OTNDNTM2NjY4RjI1Cis6MTBGNjQwMDBFQ0ZBOUZCNzIwN0ZGQUQzNUQ3MTJBQzQyOTlBNzYyN0Y2Cis6MTBGNjUwMDBBMERGREVGNEI0MDNGMzVFOEUzRkZCRTUyNDdEOUNFOTdFCis6MTBGNjYwMDAzRjVENEZBMzhEQzUzMzhGMjc5MjM5OEYwMzNEMjczM0RECis6MTBGNjcwMDBGRkFFRTk5OUM5NUIyMTVGNkU2OTRGQUYwREY2MDdBNjMyCis6MTBGNjgwMDBGREYxNUYyNTIwOTc4RTNGQ0VFQzBGRUFDRkRGMEYzN0RECis6MTBGNjkwMDAxRENBNjM5QkVFQjY1Mjc4N0YwQzM2MjJGNUMzMzc4REI4Cis6MTBGNkEwMDBFREJFMTRGQ0YwRkU3MDYxNzAzODRFRTEwMEVCQTI3MDBDCis6MTBGNkIwMDBBOTA3NzkzQTEwM0M4NjhFQjUyMUZEN0ZGRkUwRjEwOTVDCis6MTBGNkMwMDBGQTE3MERCQkNFNDEzRThBQzI0NUQyRDhGM0M0ODA1RDQ1Cis6MTBGNkQwMDBDMkY1QjNFN0JCQkYyQzAxN0JFQTY4RjcwQUI0MEI0RTU3Cis6MTBGNkUwMDBCNUVFQzk2M0JGQUY3NEYwNkRENzJEMDU0RjY3REQ3M0ZECis6MTBGNkYwMDBCRUI3Rjg2NkY0RkYxNkQ3NTc2NjNFRTg0RkU3NEZERDEyCis6MTBGNzAwMDA4MEY1NDcxMkJEMzhERkQzRTRGRkU2RkZERkYwRkVCODM3Cis6MTBGNzEwMDA4NEZCRjJBN0MyRkIyRkZGRDdFMkZEQ0YxQ0VGODk2RTVGCis6MTBGNzIwMDBDODJGM0JGRUVDQkY3Mjg5NkVGREE3NUFGNzkzRkY0QkMzCis6MTBGNzMwMDBENzFEQjE4RjY0OUYxREFFQjhFRjI0QzExMDlDNUY1RkQxCis6MTBGNzQwMDAzNTgwOURGMkVFNTg0OUU0RUZBMDFGMjJGMjc3RTRCNDMxCis6MTBGNzUwMDBDNTY4NjdDODY5MUQ2ODM3QUMyMkVDMUU2NEJGNkFFMUUyCis6MTBGNzYwMDBGN0IxQjFCQ0VGRjY2QzZGMDBFM0EyOEFBRjdFMzNBREE4Cis6MTBGNzcwMDA1Qjg3Mzc3ODNCNzAwNEEzN0YyNjY3RDQ1NDQzOUNBNUVFCis6MTBGNzgwMDA3NTA1OUQxNzFEQTczNURERTI2RTU1RTE5QTc2NEIzMDY0Cis6MTBGNzkwMDBBRTA0Q0JCN0ExNUM5REYxQzNGREYwNURDNTY5QkNBRjA0Cis6MTBGN0EwMDBENjY5RjIzN0UyMEI2Q0M2QkM2MkIyQzcwREZCRDUwRTUwCis6MTBGN0IwMDBBRjAyNzdCOTUzNTNENjc4QkY2REVGNThCNkFGMUQ0RjMwCis6MTBGN0MwMDAwMjk4Qjc3OUE2NzA0QTJEMTkxQzRFNjZGODA4QjhGNTRDCis6MTBGN0QwMDA4MzEzRjc0N0M1N0RGQzRBNUE0NzA4Rjg1MDIxRDQ5RjQ4Cis6MTBGN0UwMDA2NEVCNDEzRjE0RkU4RTE0RUNENzU4OTMxNjc5M0JEODQ2Cis6MTBGN0YwMDA3RThBMUFCOUM3MUZGMjIwQjhCRjE5Qjk2NzU2QjVBMERCCis6MTBGODAwMDA1RjJBRTBBQzFCMEZENzZGODZGMzk5QzI1N0UwQzU0MTYyCis6MTBGODEwMDA2NjIxOUUxREQ5NEU2RjgwQ0U3Rjk1Q0FFMEJFOEFDMkZBCis6MTBGODIwMDAxREVFMTcxN0YwMTU3MDMzRTNFMTdEQTA1MTlEMUQxRkVDCis6MTBGODMwMDAyRDhERjkzQUZFNEFFMjgxN0Q5NkU5RjI5NEIwMUZFQ0YzCis6MTBGODQwMDBFNUYyMDRCNDk3OEY0OTI0Mjg1MUZGRUQ1ODQ1NDYyNTI5Cis6MTBGODUwMDBGODE1Qzc3MjZDMEE5NDUzRkJFODlBNzRGM0JERTBBNEUwCis6MTBGODYwMDAzREYyMzdGNEEwNUU0MTkyMERGNTYzMzk4NUY4RkUzNDIwCis6MTBGODcwMDA3Qjk2RTFCRDAzOTBCNzRERkRGNjYzNTlFNTc2REMwRjRECis6MTBGODgwMDA3NUU3MTlERTlCOTlFMERBMDJFRDA3MjA4RjFCQkYzRjc5Cis6MTBGODkwMDAwM0ZEOUIxRjY0MTYxOUM2OTlGOUNFQjE3QkFGQTJFNTkzCis6MTBGOEEwMDA0RUVFNTdGNzREQjU2MjNDRkVEODlGRTc1NTAyMUMyRjMwCis6MTBGOEIwMDA1NEM3MUJGQTFGMjRFRTc0MjAyQUJBQkUyQTU4REY0NTBCCis6MTBGOEMwMDA5RUM5ODZFRjM2QkNCREE3MTBFMjEwM0ZGMjU2MTg5RUM3Cis6MTBGOEQwMDA1RjVDN0VBMTYxMUM5RjNEMUMwNEYyQUVENTZBMERDRjFBCis6MTBGOEUwMDAxQjlBQkYyMDRBMkEyMUU3MzU3RjREOTQ4OUQ0N0MwRjhCCis6MTBGOEYwMDA3NjFCQzY5OUI4N0ZBN0ExQkYzN0U0OUUwNjI2RTM4NDhFCis6MTBGOTAwMDBDM0RFRTdBMDE0RjlFQ0I2NTRCQkRGNDJDQkIxNkY1N0FFCis6MTBGOTEwMDBDQUIwRUY1OUY2NUU1RDJCODRBMUNGM0I0NjNDNDAwNzUxCis6MTBGOTIwMDBFNzkwNzhEQzBGMUMyOEVGRkQ0QjRCQTAwRUQ2RjkwQkFGCis6MTBGOTMwMDAzOUUwODEzMjdFRDhBMjEyNThENzQ3OTk5RDMyNkM0QjVDCis6MTBGOTQwMDBERjIzRDU1RDVFMDI3NkQ2Njc4MTU2QTg1RkYwNzVCNzc2Cis6MTBGOTUwMDAwQ0ZFNjRFQjBFMTlDRkQ3NEQ5NzZCMTJGRTBBRjJCODZFCis6MTBGOTYwMDA1QkMyMUNGRjA2QTcwNUUzRjA0NzUzQkE0QkFFRDVEMUU3Cis6MTBGOTcwMDA5REM4REIzMUYzNzFEMUM0OEEyNTMwN0U1QkE2RDZENTE0Cis6MTBGOTgwMDAwQkYyQjRGMkVGNTdDQTMxQ0VCQjEyQjdGMTVFQkFBMjk2Cis6MTBGOTkwMDA4OUJFREI2MTlGNUVFNDI1QzU0RjkzNTk3MkZCMEZBQ0I2Cis6MTBGOUEwMDAxODJGQjlENUUyNzU3MEExODA3QUQ3M0RDM0JBMTlGODdFCis6MTBGOUIwMDBERDNBOEVDOThERjhCRjEwMTVFMjQxRjFBOTc1MzI5QzcwCis6MTBGOUMwMDBCMzIzNzc0ODk4RDcyMkJFQjdBMDlDRTVEQkRGNUUyMjQxCis6MTBGOUQwMDBFRTM3NzFBN0ZGNjQyQ0JDOUZDOEYyMDUyMDk2MDZFRjk2Cis6MTBGOUUwMDBENTU4RDA0RTcxMURGNkVFODNGQkM4RUVGNDFDNzI4MzIxCis6MTBGOUYwMDA3OEU4QTk3OUM3MEZGQjIyM0Q4NzQzNTMyNThBOTcyMUQxCis6MTBGQTAwMDA5RDE1MjcwQTU4N0YwMkYxQ0QxRTRGNTVDMjU4RDQ2RjVECis6MTBGQTEwMDBFNTk4ODdCMzlDRTdDRkY0NEVGRDhEMDdGNEM3RjJBMkJCCis6MTBGQTIwMDBEMTQzMDZDQjJGNzc5RDk0ODhBQUNCMzNCMDhFNTM3MUU4Cis6MTBGQTMwMDA1RTJFMjU4Q0U3QzU1QzI3MTU2QzI3RTFGMUNDMUZFNDExCis6MTBGQTQwMDBFM0JCRTZBOUFGNUUwQkYzRDg2RkM1N0M2N0EyNjg0QjNBCis6MTBGQTUwMDA2MDFEMURBM0RGNTQzQjcwMUQ4NEZGNUQ5MTMwRkVEREYyCis6MTBGQTYwMDAzQ0M4NEZDMjBCRDE5NDcwRTY0RjYyOUNDMzNCQjJBMzFCCis6MTBGQTcwMDAyQzE5RkNGMkQ0MEEyRjlFMUI0QzdENTg4RTlDOUIwNUEyCis6MTBGQTgwMDAzOERDMEVGRkMzNzNCNTk3QkU1QTQ1QzdERDAxQjI5MjhECis6MTBGQTkwMDBCNTA3MDlBNUVGMEU5QjY4QTdBMkM2QzNFRjNEQzRGNjQ0Cis6MTBGQUEwMDA0QjJGODMxODQzQkM2Q0VDM0YyRTNGRDI1RkIzNjc0NkFECis6MTBGQUIwMDBDN0ZGNDNDOUE1QUZCNkM1ODQ2NzFDRUFFQjhFMTk1NkNDCis6MTBGQUMwMDBDQzlGMzgzNTVDMTM0RTAxNTcxNzgzRUJENzU0MkI2NDBBCis6MTBGQUQwMDA0NEUzOEJFRjQ5NkEyRUQwREI5RDcwNUM4MEZBRDFCRjg2Cis6MTBGQUUwMDA0Q0FFMEI5NkE0QzNGQzgzNjNFMUY5N0M5NzM2NjQyQTgxCis6MTBGQUYwMDBBNUJGMUU5Qjk2N0IyM0M2NDkxQzk4RkY1NUZCRjNBMzBECis6MTBGQjAwMDAxQkUxQzg5ODZCRTYxMTRGMUJEMDhEQTIyNTRDODAzOEE1Cis6MTBGQjEwMDA5NUZCMEI5NDBCMjJDRjJEMEE0NzRBQ0ZGNDlCQjc1QjgyCis6MTBGQjIwMDBBMjc1OTAxM0FFMjg1QzM1QjgyQkI4NDMwNzY3M0JBRDgwCis6MTBGQjMwMDBENzcyQjhGRUNGMjNGNTk3QjUwMTdFMTdEQTkxMkVBRUI2Cis6MTBGQjQwMDBFNTNDRDU5NjRDQkEyMENGRUU4NEZCODE0QjgxMUU0RTBFCis6MTBGQjUwMDBFQ0IwNjIzMjZCMEYzNDgyMUVGNUQ4RDlERkY1NDkwQjU5Cis6MTBGQjYwMDA2N0MyREY3MTE5N0JEMDgyRjFCRDM3Mjk3RDY4NDAxRkU0Cis6MTBGQjcwMDBDMUYxMDg3NzMxREU4OTI5QUZBNkMwRjk4OTEzNjk0QTM2Cis6MTBGQjgwMDAwQUMwNjc3MUQ4ODY3MEZCODk0MjgyNzA3RjZBNEZEQTNCCis6MTBGQjkwMDBDMjY5MTVDODFGMkFCNjc3RjM3MTI2NEZENEZFNTE4MjY5Cis6MTBGQkEwMDA3QTlEOUZGRkQ1Q0U5NUUxQkVENDgxRjA2NURFQ0Y4N0VCCis6MTBGQkIwMDBGOEYwQjkyOTAzRDM0MTVCODUxREVGMUY2QTJBNUY1MTE1Cis6MTBGQkMwMDAwQzdBNjI3OTcyMjFFNjYzMzU1NTQ5QTg4NzlCOUEzRjgyCis6MTBGQkQwMDA0M0I4OEJGMTk1OTMzMjUxNzU3OTUzM0QxMDRENENENzA1Cis6MTBGQkUwMDBERDIzN0ZEMjg2RUQwRENEMjc1MDlFRDNFOUU0MDFERkUyCis6MTBGQkYwMDAxQ0UzRkI5RDVENTZGMkQzNUE1QTM2RkM1QkZFNjlBREExCis6MTBGQzAwMDAxM0Y3MkREQjQxOUYzNDkwM0RCNkU1M0E3OTQ4QkEzRjcyCis6MTBGQzEwMDA4OUM4RkY3MTE0Nzc3N0Q2QkMxODBGNzJCNjU2NzI1RjE5Cis6MTBGQzIwMDAwMjk3MEVDQ0VBREU3QjE5RUNFN0Q3M0FEQzk3QzBGRUYwCis6MTBGQzMwMDA3RjhFRjcxMTU2Q0Y3MTVGMDJGQkZENjMxRjREOUEwMzU0Cis6MTBGQzQwMDBGQkZCQjU1OUVFMERGMDk3NDFBRkYwMTZDREMxRjYzQzc4Cis6MTBGQzUwMDBGN0NCNTA5RjMxNkUwNkFCMjczMjNBNDg3OTM0N0Y4RTBFCis6MTBGQzYwMDAxRkY1QjkxM0UxRjI2OTdCNDI2MEIwN0I0OEFFNkU3RTRFCis6MTBGQzcwMDBDNjAwOTc3RUVEQjI4NDc5NTE5OEI4NDFFOUU3OUY2QjUxCis6MTBGQzgwMDA4NkIxN0I3MTBCNDI5OEE3MzU3MjFDOEJBRjY3QTRCMDBECis6MTBGQzkwMDAzRkM5MkJGMjc3RDM0NjEwMERGNjU3RDM5RTcyQjA3QjM3Cis6MTBGQ0EwMDA1QkRGMEJFNTAyRkNBRTdFQ0ExMTg0QjhFNEQyRkI5RTlBCis6MTBGQ0IwMDBCMzgxM0U5QTJGQUI4NUMwNTdCM0NCRUFDNjhDMkI4MzVBCis6MTBGQ0MwMDBGODQ5MDhFQjU3MzdFRkM2Nzk3NTRDNzBGM0ZCNzJGQkI4Cis6MTBGQ0QwMDA4QTIxN0U1NUNGRjM5RUVCNERGOUJGOEI5RDdCMzExRTY0Cis6MTBGQ0UwMDBCNzc4OUIzMUVFQjY4NDg0REYwMjNFNkRGOERERTA3OUIzCis6MTBGQ0YwMDBCRkVGNThEODNDMTQwRThGRjk3MkU4NEExQjlCRDdGOTE2Cis6MTBGRDAwMDBFM0U4Rjc5N0E2RjQ2MkRFQjFFMjBFNjVENDIxN0MxQjJFCis6MTBGRDEwMDAzQ0U4QUY2NEM2RTNCOTlBNUI4N0JFNUUxMkVCQkU5ODVGCis6MTBGRDIwMDBFRTE2QUFGRjI5Q0IzRERFQjIxMzRCRTc3ODgyRUIxOTIyCis6MTBGRDMwMDBBMjg0NkQ1RTNBNEUyMzk3Q0I5MzQyRUZEOEY0Rjk4M0I5Cis6MTBGRDQwMDA3MzM5NUM5Mzc2QjJGRDZGNzM1RUVDNUNEMDU3MDAxNzJECis6MTBGRDUwMDBCRUNGQkM3NEQ2MEI1MzAwMkYwMjlGMTcyNDkwNkVDQ0RECis6MTBGRDYwMDA1RjREMjE1RThFMTcyRkUwNDVDMDNGQkFERjRDREZDQkUxCis6MTBGRDcwMDA4QjQ1MTcwMkZFODRFNURCQzUzMzc5RDFGNzg0MDNFREFCCis6MTBGRDgwMDAyQkYzRkNBRkUzRkE1N0FDQTM5REQ3MDc5QTdGM0JENzgxCis6MTBGRDkwMDBCNzY3N0JGRUVENUNBRTlCRDcyMUY4NTgzQzE3N0M2Q0I3Cis6MTBGREEwMDA1RUI3OThGNzk5RDM1OUM4NzYzQTc0MjZFNDRDMjNBOURDCis6MTBGREIwMDBGMzYwNUM5NkNCMTUwMTY3MzE0RjAxQUY5RTAxRjI1RDk4Cis6MTBGREMwMDA5NUU2M0YxOEQ2QTM4NDJBRjFCMEZDNzY1MEE0MjBDNzRDCis6MTBGREQwMDBCQTJGQzQ5NDJCQTU3OTE3RjYzQkQzRjUwODc5M0JEMEZECis6MTBGREUwMDBCQTg0OUMzNUFGNEZDODVCQjE0RTIxNzdDNTdBQTc1MjE0Cis6MTBGREYwMDA0MTgyRjIxMEVFN0U5MEMwN0ZBODMzRDhDMzE1NzA2MkE2Cis6MTBGRTAwMDA0MUJGMEY2NEZGQjlBMTNFREQ3REEzQTFGRjBGMzI1N0IzCis6MTBGRTEwMDAxOERBMkY1NEQ3MThEQTJGRjJBQzMzRDQ3RkU0RkQ5NURCCis6MTBGRTIwMDBDOUFFREY2QzY4QUZENTFFMzRCNDRGMDk4N0E2ODFERDNCCis6MTBGRTMwMDBGREI3OTY2QUNDRTczRUZGQzNCRUU3QTAxRTZDNzE2M0I4Cis6MTBGRTQwMDA3RDRGNEIyNjk2N0I1QjU0RTRFRjdEMkQxRTJDRjdCNzQwCis6MTBGRTUwMDA3OEYxRjk3RkI1OTQ2M0Y5NDI4Qjg2NjVBOEM1ODdBNUNCCis6MTBGRTYwMDA1OTJFQ0NGQ0ZENjUwQUQ4RURFNUExMkVGNDA3QzY4RjBFCis6MTBGRTcwMDBBRkZCMENFNEUxMDE0QkEwMzU5MUMyRTk5QzM3OTk3REMxCis6MTBGRTgwMDA0RTAyNjY3REZDRTU1QjM3ODE1RTc3QjM3QkU4REE3QTBDCis6MTBGRTkwMDAyNzRCNkEwQzdCQ0U0NUY1OURBNkEzMTc1NzREOThDMEZFCis6MTBGRUEwMDBGRUIyOEJDNENFQkJGQzZBMUNDQkY3QzE3QzNENEE5QjI3Cis6MTBGRUIwMDA3M0VDRUM1RURCMzk3MzI0Q0M0RjlDNDNEODc5MDU1QTQ0Cis6MTBGRUMwMDAwNkVCNjhGQjRDODVGODQxRkZENzNBMTVEQzhGMjJGQzI2Cis6MTBGRUQwMDBGQ0YwMjU2QzlBNzBCRkJBM0YwRUY0Nzc1QTJBOUU1N0YxCis6MTBGRUUwMDA5QTBEMEZFOTdDNjU0REM2QkNENjRCQ0FGRjgyRjk4MERFCis6MTBGRUYwMDA1NzM4RDlERkNEQkE3Q0ZGQ0E3RkRFNDREQjQ5OUJCRkQwCis6MTBGRjAwMDA4QzlEODcxMEY3ODZCQzZFMzkxM0JCRTEyQjM4NjMwMERDCis6MTBGRjEwMDA3OUEwOTI5N0ZEREQ5NDY0QzVBQkY3MDc0NEY5RDc3MURBCis6MTBGRjIwMDBDQzFGOThEOUNBQ0YwQjFDMjQ2OEM3MDk3RUE0RUI2QkUxCis6MTBGRjMwMDA4N0Y5MEJCRUE4NzUyQkMxNTEyRUQwRjdFQkE2NDFGRjU4Cis6MTBGRjQwMDBGRjBCMjcwNDIwRTAwMDgwMDAwMDAwMDAxRjhCMDgwMDRBCis6MTBGRjUwMDAwMDAwMDAwMDAwMEJCNTVBMEI3NDE0NjU5NkJFRDVENTkxCis6MTBGRjYwMDBBRjkwNEVFODg0MDA0MTFFNzY4ODYwMjBBRjRFMjcxRDdBCis6MTBGRjcwMDBDMjZCMjgxMkMwMTc2MkEzQjIwMzhBNTJBMDE4OUU0OTBFCis6MTBGRjgwMDAwQ0NDOEFBMzdCQkFCMTE5MDRENkIzOUIxOTNEQUVBRTkzCis6MTBGRjkwMDBFODY5NzA1MDc2RDY3Mzg4OTBCODE5NEQ5ODA2OTVDNzYxCis6MTBGRkEwMDBBQ0EzNTE0MTQxQjNEODIwRjI1ODEzM0ExMjE0NzAzODFGCis6MTBGRkIwMDA4N0JERjdGRTU1NzQ1NzI3MDFGNEFDQzlDOUI5RjlBQjMxCis6MTBGRkMwMDBGRUZBRkZGRkJFRUZGREFBOTYxRDcwQjk4MzAwNTA1RERCCis6MTBGRkQwMDBCNjNBMEYwQTkwNEU5MThFREE5MDJFNUJGNTAzOThGQjlECis6MTBGRkUwMDBFMTc4RDUzOTMwMTcwMzRDOTVERjA4QTY5NjAwOUMzRDgzCis6MTBGRkYwMDAwNDZFMUJDRTFGRDNBRTlFREFFMUMyN0YyRTVEOTY2MEVCCis6MDIwMDAwMDIxMDAwRUMKKzoxMDAwMDAwMDAwQzA0QTNCRkU4RkUzQjJDRUJBOEFCRUY4NkY1MUI4NDkKKzoxMDAwMTAwMDFFQ0M3NDBEN0YyRUUzNUZGMUJFMjYzMEU3QzRDNkUzMkQKKzoxMDAwMjAwMDJFRDRCRjRCRjM3NkZBNTUzMDVCMDA5QUZEQjM5OTg2MTgKKzoxMDAwMzAwMEZEOEJDMDNDMDI2MEI3QkY4NkM3RUZGOTU3RjE3ODhGRTAKKzoxMDAwNDAwMDNGQzA3NDlGN0YxREQzQkZGQUVCRjhGRTA3RkUxNzc4MDEKKzoxMDAwNTAwMEZDQTEzRkM0QjRENUJGOTVBRjM3Qjg5RDAwRkQwMUNFMUMKKzoxMDAwNjAwMEI1NTYwQzU0RjNGMDY4MzRGNkUyODZGNkM5OTlCRTE0MUUKKzoxMDAwNzAwMEE0NjY0MTY3RDM4MTNDNDhFRDYwQzlDODQwM0E1QjYyRTEKKzoxMDAwODAwMDc5RTBGNTAwQTQzMzBEQUI3ODdGNTlFNjNCMkMwRkZDRUIKKzoxMDAwOTAwMEYxRDk5MURGNTlBMEZENjRGNDMzNDMyOUMwQkQyMEY4QTQKKzoxMDAwQTAwMDlGNTVGNkRGMTdBNTU0MUFBODM5MTJDQUVCQkVDQzNFRUQKKzoxMDAwQjAwMEIwNDEwMkI4MUYwMkY5RjM5MUNFQUVBQ0IzOEM5N0U4MTEKKzoxMDAwQzAwMEZFMTRFNzA5OTQ4NzE0RjhDMjc0MzkxNzY1NDIzRjkzMDgKKzoxMDAwRDAwMEJBNTMzQzI4OUNEMEU1MjYwMzJDNzFBQ0IxQzI3MDAwMDkKKzoxMDAwRTAwMDk0RDJCMTA4Q0FENzA0MTI1Q0NFMDI1ODBDNjEyQkQwNEUKKzoxMDAwRjAwMEZEM0Y1QThFNDVFMkU0QkMxNDIwMEJCMkYxRkM2RjU4NzAKKzoxMDAxMDAwMDc4QkU3RTFERThGOUI4NzVFNTBBMTlDQUQyNDk2RTJFODcKKzoxMDAxMTAwMDk2REI3Mjg4RjA3QTM2Rjk1MTc3OEQ4M0Y2QUJCM0QyREQKKzoxMDAxMjAwMDNBODlGQjJFNzFCQzY3QzU0MTBGRkJCNkYyRjNEN0RBRjMKKzoxMDAxMzAwMDU3RDc1MzE1QzA3QzlBQkYyNjUzQTlEQjg1RUIyRUVGMEEKKzoxMDAxNDAwMEQzRjZBMDZDRUE0MTFFNEU3M0U3OTVGNTUwMEVGRjMyRDAKKzoxMDAxNTAwMDRBRTg1NTRFOTk2MjU3MUQ2NEE3MEUzMEExMUVBMzIxOEYKKzoxMDAxNjAwMDM5NjRDMzc1MTY2NUQ1QTVEMkJBNjg5OEE5ODBENzE3MjIKKzoxMDAxNzAwMEI3QzhBQzBGMzAyQkU2NDFBOEI3NEE0RDZGRUQxMEZFNjMKKzoxMDAxODAwMDhDRjQ1MjM5QTE3MjNBQTBGRTE2NkQzNEYyQjNDNDcxRTgKKzoxMDAxOTAwMDlDRTVGRTNEMzRGN0M4NkYxNTNDRjM5RDlDREE5RERGNkUKKzoxMDAxQTAwMEFBMDlCNzlDQTRGNUFBMzRCOUYxNzUzQ0Q3QUEzNjY5NTcKKzoxMDAxQjAwMERCN0I3MUYzNTZCODUzMzI0RTI0OTM2M0MxMTg5MjBCMTQKKzoxMDAxQzAwMEYyRTEwRTkzQkYxRDkwRDlERjdBQjM4RjMzN0U2MDdCNEYKKzoxMDAxRDAwMDNGRUY4NzZERUZBMUZEOUZCOTg0MTc2RTAwNzhEMjNEODgKKzoxMDAxRTAwMEVEODVDMDg0NUY0RTZGRkQ4QTdERUJEREU0NEY2ODI3QUYKKzoxMDAxRjAwMEU0NDdCQTFFRDdBMjBEMDE5RTdCNkRCOTNEMTQ0MDc5MkMKKzoxMDAyMDAwMDQ2QkQ0RTMzRUQxRjk1NDJDMTU0RDJDQjQ1NzBBRjQ2MkIKKzoxMDAyMTAwMDc5NEY2RURFN0I4OEZDNjRCMkREMTEyNkI5MjExM0VEQzcKKzoxMDAyMjAwMEYxN0E5REQ0MkUyRTRGM0MxRTBBQTZFMEZDRjE2RDAxMDIKKzoxMDAyMzAwMDk5REM3NkVDMDEzNUU4QzBGMTk4MEYxNEQ0MzRDNjk5RjYKKzoxMDAyNDAwMEY3N0MzMkU5N0RCQkJGODlFNTUwRUZBRjY3MUFGMzlGQkEKKzoxMDAyNTAwMDlCRDhDRjYwMTA1RUNCQkU3RTNGODM4N0VEMjY4QTZCMzYKKzoxMDAyNjAwMDJCQjQzMzA1RDNBMENFODQwMUFCQ0IzMTRENEU0MTNFRjAKKzoxMDAyNzAwMEJBQzJFMEE2RUI0NTA3NUM0MTNBNTc3MTlCMjJBN0UyNjAKKzoxMDAyODAwMEI5QkNDN0Q1MjA5RDdCMkRBQTQxQjE1MTlDMENDODdEMUUKKzoxMDAyOTAwMEYxQkFDRDBDNjExQkM2MTE1QkE2MDk5NDM4Qjk4RTNEMkQKKzoxMDAyQTAwMDE3MEE1MjFDRDRFMzVBNzM5MkIwRTc0OTk3RUE2NThBNTkKKzoxMDAyQjAwMDVCNEVBQkJBNzUxM0NBMTNERTRFNzI2RjcxNzUzRkY3QTIKKzoxMDAyQzAwMDNCNkUxM0NCRkRFQjc0REYzQjZFQTRFMDcwOERGNEU1NjkKKzoxMDAyRDAwMDkzRkRCNEJGRjYxMkQ5NEY0M0IyREI4NkNGMjVDNjY5NzIKKzoxMDAyRTAwMDNEMkVFQUVCRTg3MkQzRTU1OEVERUNFMkI4QkY2QzU1NzEKKzoxMDAyRjAwMDE3QzdCREM0N0RBQjREQTBENkEzREMzRDE1QUVFMjVBRjkKKzoxMDAzMDAwMDVDQTc3RDM1Q0M5Qjg5RTMzQTBCRDJCQ0VFRjMzRkYxODEKKzoxMDAzMTAwMDk0N0Y0OEY2MzI1NTlFRDBBQUQwQjk5Q0E2QUJEQTc1MjgKKzoxMDAzMjAwMEY1QUFFRjc4RkY1RUVGNkJGQjU3Qjc3ODlEMEIxQ0IxMUEKKzoxMDAzMzAwMEVCOEUyMjQ5QzQ3OTMwM0I0RkQ4NjNGQUJDNUVCRDRGODcKKzoxMDAzNDAwMEVDOUM2REM4NUI5MzJFQTg4NkJDMzUxOTIzNkRGQ0ZEMTMKKzoxMDAzNTAwMDBBRkJBMzg2RjE1NEU3RTM4NkY5Qjc2NEFFMzZEQ0JGNDcKKzoxMDAzNjAwMENEQjVERTcwRkY4RTlDREYxQkM2NzdCQTVGMzRDQ0JGODUKKzoxMDAzNzAwMEFCNkM5M0UxRkU0Q0U1M0YwQ0Y3NjdDOEEwNDhFODczMEYKKzoxMDAzODAwMEY5NTJDODQyN0UzNjA3RUE5OUNFODU1NkE2MEY0MjI3MTMKKzoxMDAzOTAwMDUzMTUyRDg5RTgwMjcwMzM3RDE4N0M0Qzk3N0I1NEI5MzYKKzoxMDAzQTAwMDA4RUQyNjZBRTkxQzQwN0VERkYxRDZERkYzQzgyRTNBNUQKKzoxMDAzQjAwMDdFMzVERTk5RTU4QUU1NjUzRDRGRkZENDdDRENDNzhBNTIKKzoxMDAzQzAwMDdBRUFDMTFFMDYxNDA5QkJENUUzN0RBRkZBNDk4OEY3NjYKKzoxMDAzRDAwMEQxMjI4QzI3NzhDRTY4NjMzMkM3OTk2ODRBOUY5MDI0Q0YKKzoxMDAzRTAwMEM1RTIwOTVBQTQ4OUYyQjFFRUI3N0E3QzI5OUVFQkZFRTgKKzoxMDAzRjAwMDY4MDVGOUQxMDczMjhDNzA3NThGMzc1M0NENTgxQTc4NEMKKzoxMDA0MDAwMEU4QkEzQkU3ODFGQ0Q4RkU0MTEzMkMyMjNCREI4QUY0OUYKKzoxMDA0MTAwMDRERTRBM0VGREM4OEQ5MTVDNzRGMDFGMTgxRjYzNjc5OTkKKzoxMDA0MjAwMENFMTQ4OEUwRjUxOTRFNTA0MjM4N0Y4NjFEMzIyRTUwOEEKKzoxMDA0MzAwMDJDQkNENDk1MzcwQjAzQzQ4QzBCQTgyOEI0RTcxRkQzNkUKKzoxMDA0NDAwMDk1NDI5Mjc3RTBFOTA5NjkyNzcyQjVCODc0MjNFQUVGMUIKKzoxMDA0NTAwMEE4ODlGOTgxQzU1MjY4MDRDQUEzQTk0MThDRjMxN0E2REIKKzoxMDA0NjAwMDMxN0ZGNzQzOThGNUY4MDA0NDJDQzRGRjNDMDA4RUQzNEQKKzoxMDA0NzAwMEYzQzFDNUY0MjE1MDU4OUZCODcyNzIwMUM2QTc4NTBEMEIKKzoxMDA0ODAwMDY2Q0YwNkU0QjMzMEJENzMzOEY5NjdGRUQ4QzNFOTEyMEUKKzoxMDA0OTAwMDlFMEI0QjNCODVGODI5MzRDMTNBQUE2Rjc0M0U2QTM1RUUKKzoxMDA0QTAwMDNFMzYxNDI5MTU3NEJFQzJGNEQ2MERDRkUyRkU5RDhERTIKKzoxMDA0QjAwMDI2RDg4Q0VCOUMxQ0ZCRjgyMzEwOTc4RkI3N0FDQTZGNTkKKzoxMDA0QzAwMEE1NzlEQjI0NTAyOEFGMDY1QTZDQTEyRDU5QjQ3RkU3REIKKzoxMDA0RDAwMDAwQ0EwN0ZBQkNFNTlFOEExOTQ1QjhFRUFDMjI2MDdERDkKKzoxMDA0RTAwMDQzRUI1RjgwRjQzM0QzMjk2NDBGNTNGQUIzMENGMEI5QjQKKzoxMDA0RjAwMDYxQkVGQzlFRkMzM0MwQ0YxNTkyMkM2RjAwNzFBMThDQTUKKzoxMDA1MDAwMEY3RTVGMTIzNkZCRTMxN0I0RDFFRjMxM0EwM0E2RUFCQkUKKzoxMDA1MTAwMDQ3OURDN0U3Qjc2MjJDQTBGM0JGNkMwQjZERTY3QUFCQzMKKzoxMDA1MjAwMDY2OTg4NEU3QUM3Q0M1NjZBMkZDN0YxOEUzMzNEQzBDREMKKzoxMDA1MzAwMEYwQTVERkNFRjQ3RkZDNEVBNjVGRjkzMzk5MUVGNUJCMjQKKzoxMDA1NDAwMDk4N0VFRENGNjFCQUYwMDIzMjgwRkEzQjU5QTQ1NDExODMKKzoxMDA1NTAwMDNGQkRGMUQxN0I5QzExN0M0NDI1OTg1REVGRTg3RUJGQzcKKzoxMDA1NjAwMDUyRjM4NzgyODZFMzRGMjU5MzFEMzRDOTZFQjJEM0ZDQzQKKzoxMDA1NzAwMDQ2MzQ0QzNDRjc5OUU2MzEyMTM5MkI1RUFFRUExM0M0ODAKKzoxMDA1ODAwMDY3NDFEM0E3N0YxODVGNDJDRjk5OUQxMkNFM0ZEM0Q0NDYKKzoxMDA1OTAwMDM1ODBGQzM3RjE3QzU3RTREMTYyMTVGMkQwQ0VCQjJEMEIKKzoxMDA1QTAwMEFENzUwMzNEQkZBRDcxMzg5RDEwRTMwODA4M0IyNDdENTgKKzoxMDA1QjAwMDRBM0RGMUIxOUFFREU0NTc0NTIyREZERjY1RUIyQzcxM0UKKzoxMDA1QzAwMDNBNjJGQzAxOTUxODk4Njc2QUI1M0MzMzU1QkU5NDRBNjcKKzoxMDA1RDAwMDdFMzE5M0Q2MUQ0Qjc2N0REMzQ3QjQ1RjYwOUZGMDQzNDkKKzoxMDA1RTAwMEQ0RUIzQzVGOUMzRkVERDBFNEEwRDNGQzE2QUI4RkZDN0EKKzoxMDA1RjAwMDY5NUJDQjY3NzdERjgxNzI5ODMxRUUzNkFGRUM4QUNEREQKKzoxMDA2MDAwMDdGOTU4NEUwMjVGQkJFRjhFRkNGNjZGMDdDMjc2RDM1NDMKKzoxMDA2MTAwMDA3MzY0RDc1RTJCQ0ZCRURCQkRFMjcxMTNDRTAzQzNBRjIKKzoxMDA2MjAwMDM1MERDN0YzMzJBNTNENDRFN0JCQjJBNkE1NTMxQzgwRTgKKzoxMDA2MzAwMDEwM0ZGRjUwQ0VFNDNENjQ2MkQzREQzM0FENTQ0RjRDRTgKKzoxMDA2NDAwMDI2QTc4QThCQkIxNTc2OEMzNzg2MzhERkNGMzBCRTI1NDAKKzoxMDA2NTAwMDczQjA2MUZFNkRBRTZDQzNGRDNCNzI3MjBERjdGNTdEM0MKKzoxMDA2NjAwMEE3QkI4QjBERjNDODVGQTlERTQ2M0U1OEVGQjA0NTBFMjEKKzoxMDA2NzAwMDhEOTBDODBFQ0U3REIxOTRGOTlGNTM0MkZDNDc1MTdFQjgKKzoxMDA2ODAwMDU2MkMxQzRFOTVBRDdGRkU1OTBBMUI4REJCNTNDOTNGOUUKKzoxMDA2OTAwMDEzRUJEQTY1MkRBRkVFNTE1Q0JERDdCNTU1RTBFQjFCMjIKKzoxMDA2QTAwMDk2N0FBRjY3N0JBQjA3QUZCN0FFQzUzOEYyMDc4QTIzNDAKKzoxMDA2QjAwMDg1NkZEREVCMENFMjM5QjY4REJENzg4MzBCRjlGQkI4QTUKKzoxMDA2QzAwMEE4RTc3QTM3QUFENUJCODk3Njc0QzU1RTI1OTdCMDlGMEYKKzoxMDA2RDAwMEZEMzI1MDNEQTREN0JEODk3NjA0RjA5NDU2MDcwOEZBNDAKKzoxMDA2RTAwMDUzRkQ3REM2MjcyMjZGN0Q0MzdFREYyRkRFQkUzNTFBODgKKzoxMDA2RjAwMDJBMzJFNDk5NDIyQkU2MTdENDRGRTdERjY0RDg0QzE3MkYKKzoxMDA3MDAwMDJFRTEzOTc0M0Q2NEM3RUMxRjFFREVGNEZFQTAxMkJFNUMKKzoxMDA3MTAwMDFFQTBCQUI2OEFGMjAyQUU5RkVDOTFDNEJBQ0I3NkJERTcKKzoxMDA3MjAwMDNGMjgyMzc2MUY1NjFFMzVDQzg3MjdBNTNEODZGMTlBOTQKKzoxMDA3MzAwMDJDRTNGODk5Qzk3QkUyOUZFRjJEMUU1NTZFN0NENEFBNUQKKzoxMDA3NDAwMDYyOUNBRTdDNEVFMjdDOTU3ODVGM0ZDRkQ0REQ0OTBBNTcKKzoxMDA3NTAwMEM1NEQ3M0IzOERGQkE5MkFBNzAyOEE4M0FBMjZDQzIzOTEKKzoxMDA3NjAwMDNERTQ3NTNEM0VDQzkxQTFBNkE3MzgzNzQwNUI3N0ZBQjIKKzoxMDA3NzAwMEVFMjQ5MDdGQzZCQTg3RDE1NkU4M0M4MUZGMTJGOUU2OTUKKzoxMDA3ODAwMDcwNUYwNTdDNzFGQjY0Nzk0NEZERDc5MTU2Rjc0RjNGNEMKKzoxMDA3OTAwMEUwQkM4RTNGODM5QjQ0REY5MTI2RTI2RTQxQzM0OTkzQzgKKzoxMDA3QTAwMDg5RjI1RjFGNjEyRjA1Q0U4ODI5MUQ2OTc0NTE3MjAwN0YKKzoxMDA3QjAwMEQwOUZBQTE3QTcwNDRDODU3ODdGNzhFNzY3NzY1NEZEMDkKKzoxMDA3QzAwMDI4Q0ZBMDE3RURBOEI3MkY0QzI2NDNGRTg5NTJDQ0MzRTMKKzoxMDA3RDAwMEIxNjc3QkU2MUNDQTNGNzdFQzRFMEE5QjdFMDYzRjFFNDQKKzoxMDA3RTAwMEFBMzk5MDE2OTYwQkJGN0Y5MEVDNDZFQ0EzMDBGQTQ3MEYKKzoxMDA3RjAwMEY1RUY0MERGNTdBMTM4NDFGQ0QzNzhBOTY3QzhFMUU3OUUKKzoxMDA4MDAwMDcwRERFQUZEMjIwRUUwNkQ0NzYyM0Y3QjdGNUMzRjBCQUYKKzoxMDA4MTAwMDFCODVGRkRBRjE5N0VBOUQyQTA4NEQ3MzEwNkUxMDQ2OEEKKzoxMDA4MjAwMEZGODc1RkNFRkY2Nzc4MUMxOTVDRTc5MDlGREZEQ0RERjgKKzoxMDA4MzAwMEFGNzVCRkFGM0UyOEZDRkU2Q0YzRjc5RjUwOUMzRjhCMUIKKzoxMDA4NDAwMEY5MkZERUVGNzVCOUU5RkU1RUZEODJDQzdFQTk1RjNGMzAKKzoxMDA4NTAwMEQzMkNERjFBRUE0MUNFNjVCQTVGMjk2RUY2RDc1QUE3QzQKKzoxMDA4NjAwMEQ4Qjc3NkUyRjlCQjI5Q0ZENUI2QTA4NkE0RUVGQkU4Q0YKKzoxMDA4NzAwMEI0N0E5RDBDQUVCODdEQjZFREI0MkQwQTM5NjI3QzQ0RDUKKzoxMDA4ODAwMEY1RkNEQUYyN0RGQUU0M0M0MTU3NTNGRTg1M0EyREZFNDEKKzoxMDA4OTAwMDg4QkEwNkYzQUEyNTgzRjJFQTRDQzlCRDA1QzlDMTk2RjgKKzoxMDA4QTAwMDgxRTUyNEJGODMxMjg0NUQxRTVFRTI1RTNCOUVFRjFFRTcKKzoxMDA4QjAwMEIxMUM1RDc3NTA3RDA2OTkzOTY2REFFNzZFNERBRkY3NkEKKzoxMDA4QzAwMDY4RjhEMkFDOTY1OTIzMjhERTdGRDZCMEUwQTA0MjUxMUEKKzoxMDA4RDAwMENFOTNDREZCRkQxQTAyNUMxRjFFNENGMzBENUQ0MTc1REUKKzoxMDA4RTAwMDY4NTBEOEY5QzFCNENFNzZDMkEzMEU0RTRDOTY4MjEyOEYKKzoxMDA4RjAwMEFGQkYyNkJFRkUzQjY4RjEwREFENjFCRTM0NUM0QTE5NDgKKzoxMDA5MDAwMDJENUY0RUZFMDlGREIyMTYxNzUxOUYwMTQ5RjQ3N0VDOTkKKzoxMDA5MTAwMDA3RTY0MUNGMzBDRUIwMTg0MjdCMTREQ0I3Q0ExREU2RTMKKzoxMDA5MjAwMDNBNzUyOTA4NUMyMEIxQkVBRjlBRjBBRDk1RjI0MzYyRUEKKzoxMDA5MzAwMDNGM0FCOTY5RDcyMUE5QTAwNzFDMjNDMTZFQUY4NTVCRDcKKzoxMDA5NDAwMDI0RjZDMUJERTEwRjNGQTZGQkI2NzhFMkYwQzNDNDdBM0UKKzoxMDA5NTAwMEZENEE1REFBRDc1NTVCOTI0MzlCRjEzQ0VGNEVGQ0I3MzUKKzoxMDA5NjAwMDMzNEI3MUJDNzI0QkIyOTNGQUVFRDNBRkQ4MDIxNDlGRTMKKzoxMDA5NzAwMDRGNkZCNjg1MjRCQzdGM0FCREIzOERGQTkwRDNEQkYzQkQKKzoxMDA5ODAwMEREQjgwMjU0OUE1Q0ZGRjkwNkU1RjkzRjU5RDgyRTAwMEMKKzoxMDA5OTAwMERDQzIzRkFFRDhFOTYzNDcyOERFRDU2RTQ5OTE4MEVBRDQKKzoxMDA5QTAwMDZCNTVEQ0Q3N0I0MEY5RjUxNEFFMTMxNkVGMTgxNEIyNzMKKzoxMDA5QjAwMDQ5QjEzQzQzRkVFMUMyRDJFMkQ0Q0I0OTBBMTVGREE3QkUKKzoxMDA5QzAwMEY3REREMzk3RjBBQjc2RDM5QkMzMTgwRjkzOUYzQ0YyMjAKKzoxMDA5RDAwMDM4M0VCN0Y0QjUxNDBGRDUxMzkwMDdBQ0I3NDU5QjQ3MTUKKzoxMDA5RTAwMDZEQTJGQUY4MjU4QkJBOTdGOEFGNzhGRENFODE1OUI0OEQKKzoxMDA5RjAwMEZFQTdGRDgxRjg4OTM2RUYxODQwRjU1MUFDNkVFRkI5Q0UKKzoxMDBBMDAwMERFM0JEQjlDREQxN0YyNjI3MkQyRjFDNDc1N0Y1Q0VERDgKKzoxMDBBMTAwMDIzQkQyNzRCMkVCRTZFODYxQTY1MzBEOTQ1RDM0Q0EwMTgKKzoxMDBBMjAwMDc1M0RCMkE0OTA1Rjc2QUU0RkU2M0EzNUQxRUU4RTc4NDIKKzoxMDBBMzAwMDQ0OUZCMjRDQzcxRkZBODEzRDkzRkM0NzA1OTY0Mzc0MEYKKzoxMDBBNDAwMDdERUVFNjBEMjhBNzFGM0NFOTVBQkVFRTFDNzk3NzdFQTUKKzoxMDBBNTAwMEJDN0RCNjU1QkQ0M0Y2QjlEMUM2Qjg0ODdCOTJCMTZFRTAKKzoxMDBBNjAwMEQwRTlGRjdBRDI3ODlGNEFGQjM5MDMwRTUxQjVFQUEyNEEKKzoxMDBBNzAwMDcxOUM4N0ZEMUUzRUVGMDlCQThBMUY0NUJBNDI5MzdGREIKKzoxMDBBODAwMEQ3Njg1Rjg3MDc5RjVGNTJGRkZCQjczRTYwQjk2Q0ZDN0EKKzoxMDBBOTAwMEM3MkY2OERGN0QwRTgxQzc3QzIwRTQ5N0Q4MEY1NERBMUEKKzoxMDBBQTAwMDA1RUUwMUIwODlDRkFCNUYzRkY5RjJFNzA1NjQ4NzI3MTgKKzoxMDBBQjAwMDFCNzM0NzkyMUUxN0M4QUQyNzVFNDIzRUNGQTRCNDFFREIKKzoxMDBBQzAwMDc5MDJFOUY2N0Q5RkIwNUUxMkNGOUI4OERGQjQ0QjEyQUUKKzoxMDBBRDAwMEYzQkI4Q0Y4QzBFQkY3N0E3RDcyNzE3Rjc2NjdFRUUzM0IKKzoxMDBBRTAwMDE2NkNDODY3Rjk0RDk1RjNGQTkyMUVBM0E3N0JFOTU3RDgKKzoxMDBBRjAwMEI0NzNFQUVCRUJFN0QzRDdEN0U3Mzk4Qjg1QkUzRUQ0QTcKKzoxMDBCMDAwMEYwRjcwRTZCRUIxOUQyNkZDNzVCQjkxMkUxODM1N0FFRUEKKzoxMDBCMTAwMEE3QjcxNkE0QzVEOUNCMkY4NUNCREZBN0UxMjM4NzRDNzgKKzoxMDBCMjAwMEFCN0Y2MzQ1N0I2Q0FGN0ZENkEyQzZDN0JEOUY4OEM3MkUKKzoxMDBCMzAwMDVGQTkwNzE1NzAzOTA3ODg1NEMyNzkwQjk5MzNFMzc4OTgKKzoxMDBCNDAwMEEyM0UyNjY3QzBGMTA0RUQ3ODEyOUQwN0ZENzJBMjQ2MTEKKzoxMDBCNTAwMDYxODk5QUM5NzgzQkFEODczNDA5NDIzQzBFNEU3NkJCMTkKKzoxMDBCNjAwMDg4NEU5MjdDOEM3QkU4N0RDMzM0QTgxOTQyN0M5OEVDM0IKKzoxMDBCNzAwMDExQzYwOUQ3MTAzRTg5NzVDQkFDQjRCNTc3NjZFMTdFNTYKKzoxMDBCODAwMDZCRkFDMzVBQUE2N0Q2NTg4NDVGMDRFNjI3NzMzRkE3NTcKKzoxMDBCOTAwMENCNDlDRjMzRTBDQzMzRTQ5NzM1NEU3MDk5NzE5REQ5NzIKKzoxMDBCQTAwMDY2NTg2NzQ5MTdGMzZFNDQzOTFGRENCN0UwN0RDMjVEQjQKKzoxMDBCQjAwMDNGMzdEN0Y0QTc3RDBGM0I5RUNCOTc0QzU0RTc4NTUyMjgKKzoxMDBCQzAwMEE4NjdGQ0UyOTMzRjc5RkY4NjczQkYwNDY1MjJENTE1QzEKKzoxMDBCRDAwMEY3RUVCNTczREM0RkM0MjcxNjgyQ0FFMzRBODg1OENFQjUKKzoxMDBCRTAwMEUxNzM1RjhERkQ3MUNCNkU4OEYxRjVENUI4MUYxQUE5NDEKKzoxMDBCRjAwMDRGQjgzRkVEMjkyRjNEMUYyODg3MUNDQTRCRTc5MzUyNjIKKzoxMDBDMDAwMDBCODg5RjU1NzY0MTFGRUI5M0JBOTlFODY5QTcyMzQwNUIKKzoxMDBDMTAwMEI4RUNGOUE0NjEyMUNBQTcyRjQ5RUE4MzY0Q0ZGODFDNzQKKzoxMDBDMjAwMEY3QjE4MTIzQzkyMUNBNzc4RkM5NkExNUUzRDA2OTU2MDQKKzoxMDBDMzAwMDkwNzA3RUI0QkYyNjk3MEU2MEI5NDQyRERBRkNFRjVDNEQKKzoxMDBDNDAwMDNDMkVBOUYwMzA0RTA5RTc1RDFDOTdDNzI3RTQ5RDkyMjIKKzoxMDBDNTAwMDVDOTNFOENGMkU4QkY5MTMzQkNEODZCQzUzNTJBOEUxQjEKKzoxMDBDNjAwMDM5N0Y3NzcxOUQzQUU5ODJGOUFBNzlFOTUyQjFFODc3M0IKKzoxMDBDNzAwMDRCRkE5OTZBN0FBQTE3OUZENUVFMDcyMTJDMEI5QzQ3NEQKKzoxMDBDODAwMEQ0MEJFM0FGRDg5NzIyOTMxRUFCQjQ3MTE1RTUzNUI0RkUKKzoxMDBDOTAwMEFCNjhBQTNEMjAyM0JGRTM5Qjg1OUQ4RDM3ODc3NzExRTUKKzoxMDBDQTAwMEM1MjgwQkFCQThCRTY4QzJCQ0E3OUYwM0UzMEE2NEU2RDUKKzoxMDBDQjAwMEIyM0Q4Q0QzRUQxNEQ3OUE4QkYzRDY0QTM1RENDN0Q4MjYKKzoxMDBDQzAwMEE5QUU0MUJBNDE2QUU1NzNGQzBBM0E5OTJBNUEzRTJGMDUKKzoxMDBDRDAwMDA3MzdEMzI5RTA2MzhBNzZDQUY0NTZBODYzN0EzQkQ0RUYKKzoxMDBDRTAwMDMzOUQwRUFEMjJGRjhGMEUwNzM5QUZDMTkzNEVFRTA3MzUKKzoxMDBDRjAwMDZGQUIzNDUxREQ1MUYyRUI5RUZCODc0NjJEOUVGNDJFRjcKKzoxMDBEMDAwMDA3NzRCQ0QyOUYyRTg3Njk4MEZFOTdERDgzM0M4NkU0MDIKKzoxMDBEMTAwMDcwMUM0OTk0NDdBMjlGNEU4NDg4Q0M3RTRBMDEyMjlCMzYKKzoxMDBEMjAwMEYwMDMxN0ZCNkIwNTI4M0M5RTdBOUQ3MjI4OEJBODY2MDIKKzoxMDBEMzAwMEM2NkYxMkU1NTFEMUIzNURFQ0Q0RUNBMjk2NkNBRDdGRDkKKzoxMDBENDAwMDRDNEY1REM1MkUxRUVCRkE0MkZGQ0FBNDNBMzQ1MThGQjgKKzoxMDBENTAwMEZBRjU5MkU0RjIyRTE3ODZFMjJGNzYxQzlGNjNDNkJDNEEKKzoxMDBENjAwMDU0NTI1Q0JFMjIxQkM3RURDNURGQ0YzMTYzM0UyQjE5NDkKKzoxMDBENzAwMDVGQkU2MzM4OEVDRkVDRjg0MThDMEJDQjhCMkQ2RUVDQzUKKzoxMDBEODAwMDYyNTY5RjlGMzMwNUU3QUJFNDlGODU0NEQxMEYyOTlFQjAKKzoxMDBEOTAwMEE5QTIzRjVFQTlENTMxRUFFQURGQjg5REU4MkZFQTUwNjMKKzoxMDBEQTAwMDg3OUJGOEI0NjNCMTlGODQ3Mjk0QjNDNTdCQzc2MUI3NjYKKzoxMDBEQjAwMDg2Nzc1QjcwREU3MThCN0E5MEZDNzdCOTNEOUNFQTQyNTYKKzoxMDBEQzAwMEY5QUY1QzNENzUyMDg1Q0VBN0FENjJCRUNEMjY3MDVBQzkKKzoxMDBERDAwMDlEM0ZCQzFFNDhDMkYxRjZFREI5MkJBNEUxRDczRTA3RkEKKzoxMDBERTAwMEFFRkYzNUFEQUZBRTFFMTEyMEZGNTUxQjI1QjdEMDZDNDEKKzoxMDBERjAwMEY5QzBEOTI4QzNGNjU2MEIxMDZFQUFFRkY3RDQ2OEY1RTAKKzoxMDBFMDAwMDE0RTc0Nzk3OUJFM0Y3NjBBRENFNjlERjlFOUI0QjdBNzMKKzoxMDBFMTAwMEVBMkExNjM4MTg2NDY0MTU5MzFDOEY4RUY2NzVEMUZDNzcKKzoxMDBFMjAwMDY4OEFCMEI3MkVDQUU1REVERUU5RTAxMkU1M0I5QTlGOUMKKzoxMDBFMzAwMDc4M0RGQTBEMUUwMDlGMzc5N0E4RTdFOTdFNzVGMjI1RTkKKzoxMDBFNDAwMENFRkI2NzhBM0U1RDFCQzk4QUQ5QUQ4NDRBOUI4QkZDNjkKKzoxMDBFNTAwMDA3MTUwODU5MzkzRjRDNzA1RUE5NTMyOURFMkRDNDc1MUEKKzoxMDBFNjAwMDUwMUUyNTNFMzU0ODIxNkVDQ0RDQ0U1MjhBQUJCOEFFNDIKKzoxMDBFNzAwMEE5MDRGN0E5QjY0Njg2MTVFMTczQ0ZERDczQzQyQUVDNDEKKzoxMDBFODAwMDZFODhCMDNCMkQyRUI1RUNEQ0ZGQzQ2MDMxRjQ0MTlDODQKKzoxMDBFOTAwMDlGNTVFRkJDRjhDMzk3MjhCRkVBQjMwRTM3NEQ4RkY5QzMKKzoxMDBFQTAwMEQ3OEIyQkI4REYwNDg3MjE4RUU4N0UzN0FFQzlDNkY1MTUKKzoxMDBFQjAwMEY2RjhFNjUxMEI2OURFQzQ0RkRCQjI4OUFGNDk2RDExMUMKKzoxMDBFQzAwMDdFOEYxNjZERjk3Q0IwMzg4N0RFODc5Qzk3N0U0RTNFMEMKKzoxMDBFRDAwMDNFQTlFNTg5OTM3NjkxMTdFOEJEMzBGNzdCOERFMkJEOTkKKzoxMDBFRTAwMDcwQUQ4NjczRDZCNjQ4QTEwMEM3MUZEMTNGMkZEMkY4ODgKKzoxMDBFRjAwMDVCQkVCRjcxMEZFMTI3OEIzNjNFMzQ5REVEMjgyNEZBOEYKKzoxMDBGMDAwMDBBMTdGRTUyNUM1ODcyNDhGNENENEJCNzFBRkI4RDZBMzMKKzoxMDBGMTAwMEVBOUI2OTNFODRBRDY0MEZDQkVCMTNFRTZGQUNFMEJFOTEKKzoxMDBGMjAwMEI5M0EzRUZFRjdEMDM3N0I0QjM0N0M2QzI4MEM2NUJFNUIKKzoxMDBGMzAwMEU0Qjk3REQ1MUVFMjYxNjI1RjVDMDVDQTg0MTJBRTdCQjYKKzoxMDBGNDAwMDdEMzJFREVGMzVGNzhDM0ZGNDJGRDBERjkzODlGQUJEN0EKKzoxMDBGNTAwMDUyREI5QkU0RTQ2MEI5NThCOTlGQTg3RDc5ODVEQjQ5RjEKKzoxMDBGNjAwMDYzQ0Q2RjM3OTlBOEE3QzY4OUVGN0QwNEYxQ0ZFOTdFREQKKzoxMDBGNzAwMEJDNzg5REM0N0QwNzZDRUNDNzM2NThGODlBNEQyMTdFMkQKKzoxMDBGODAwMDBCNUYxQkM4N0QwOEY2NEI1QzFGNkU3QUNEQjY4RUM2MTQKKzoxMDBGOTAwMEMxREZGNTA5Qzg4NTg0NDM3N0RFNDAzODRDMzAwOUVCNjIKKzoxMDBGQTAwMDREODFFNzgzRTQ2MTFDODY3MTkxNDc0QkI0QjhBRkQ1OUUKKzoxMDBGQjAwMDAxMTAyRTMyRjRGMzQxMkRGRkQ3QTY4QzFDODg5RDczQUYKKzoxMDBGQzAwMDZDREVCRTQxODZGRTI0QThENURCMjU3NDRFQUExQkI3NzUKKzoxMDBGRDAwMERFMjBFRTI3MDkzRTc2N0RGQzBGQzk1NEY3MzY5QTdENTgKKzoxMDBGRTAwMEM5ODQ2QjlGM0QzMDlDRkI5OERFRTRFRUM1MzQwNDU3MEEKKzoxMDBGRjAwMDc5NEZFOUZEN0M3QUY2RDVGNDU2RjI4MjU5Qzg0QkIzQTUKKzoxMDEwMDAwMERCQjdGRDBBN0M2RDg5RTk0NUU3NkZBQUZDNDY4NTk1NEIKKzoxMDEwMTAwMDcwOTE4N0MxNDkzODQ5RURGRTU3ODM3NkVBMEJENzAzQjMKKzoxMDEwMjAwMDIzMTA2NzQxRDhGM0Q5NTMyNjdFRUY1RTBBMzlGRjNBODEKKzoxMDEwMzAwMDAxQzdERTUzNjY3NzA4OUY2RkQwRTIyMkJEN0Y3NkM1NzkKKzoxMDEwNDAwMEQ5OTk0REMzN0Y5MzVDN0RDMDE1RDc0NzI3RTdBNDFCNzMKKzoxMDEwNTAwMEM2MjlFRTFCMENDRkY1MkQxQjZFQjg4RkYyREU0Q0VCQzQKKzoxMDEwNjAwMDQzNDA2OUNEMkI4REQ1QkQ2OUNBNjhDMzczNEZBNzRFNjgKKzoxMDEwNzAwMERCQzc3RURGRkEwOEUzNTJGRDZFRjUxOENGMjMzN0NCQ0UKKzoxMDEwODAwMDE0MEZFMDlDQTg5N0NBRjA5N0ZDNkQwQzA0ODJBNDhGMDMKKzoxMDEwOTAwMDcxRURDNjNBQUEyQzUyQzc3RDYzRDIwMUIzMDEwN0IwRTUKKzoxMDEwQTAwMDVEMDM5N0RBNDRGRTQ1NzE3MjA4MEMxMTcxMjM1MURFMUQKKzoxMDEwQjAwMEM2RUYyRjZBRjdDQjVDRUZENTBFQzU0MjM1QUIyNzc5NkIKKzoxMDEwQzAwMERGNjQ5MEI3RUU4RkJBRENGQkZCOEM3MjFGMzhEQjI4MzUKKzoxMDEwRDAwMEVGNDFBQTUxREU4MzE3MTlFNTNEQjRDNjI4RUYxQjU3MkYKKzoxMDEwRTAwMDE5RTU5QTE1MzBDQTMxN0JERDM4QzNGQzExNzVFNTg2RTgKKzoxMDEwRjAwMEYxQ0QyRkRDNkU5ODNGMkE3NEI3NjE5Q0JCRjUzRUMzREYKKzoxMDExMDAwMEZDRkNGQTA1ODZGQjg1NEQ0QkFFNEJGRjQ1RTE1QUMzMEYKKzoxMDExMTAwMEJDNDRGRDE3RUZGQkVENTVGNTFGQzA1RkExN0Y2MDdENUYKKzoxMDExMjAwMDk0QTEzRUMyQUVGRjNGM0IzOEE2Qzc1OUREMEVBRTMzOTkKKzoxMDExMzAwMENFQkU0RDNFQ0I3OEMyODQ0ODgwRUNBMDJDOTlFRDY0QTUKKzoxMDExNDAwMDQ2QjI4ODNCMUZFRTNCN0I0MEMxRjE0N0FFNjI0QjI2NjcKKzoxMDExNTAwMEQ1NTk1QUZERTBEM0UyOTBERUNGMjRGNjhENzc5NTQ5M0MKKzoxMDExNjAwMDA5RUZGQjkzMENFRkZCQUZGNTVEOURCNzM1NkMxODE3REUKKzoxMDExNzAwMDFEMDBGRTZFQzY3M0M4RkQyRTUxRUY3MTg1RTFBRUQyMjMKKzoxMDExODAwMDUzMzVFRjEyMUQ3QjhFRDM3NkI3N0U1NUZGM0UyRkIxQzAKKzoxMDExOTAwMERGODI2NTA3RjhCREUyNUNGREJEMEMzOTQ1Njk3NzdDRUYKKzoxMDExQTAwMDUyRUZDN0Y0M0UzN0IxRkZENUZCREVFRTdEOUFBODYzNjAKKzoxMDExQjAwMEJBRjcxQkVFNEMzM0Q3RDEyQUQ3RDU3QjI1OTU3MUNFMDQKKzoxMDExQzAwMDREQTNENEMxNUUyRjM1MDFEODI3OUJBODRGOEUwNDg1MkYKKzoxMDExRDAwMDMwMTVBMEY3RDA1MUZBOUY4QTkwQzBCM0Y3MTExRTFGQTcKKzoxMDExRTAwMDREMDNDNkNGMTVBOUVFQkU0MDFFMUZERjE5MjkxNUYwMEQKKzoxMDExRjAwMDExRkQxNDdCRDUxMTVFRDRFQjMxQzlCOUI2OThGMDg5RDUKKzoxMDEyMDAwMDcxREYwRUEzN0EyNEM3MkJFQTNDOUI4QzkyQzJCQzM0QkMKKzoxMDEyMTAwMDcwQUUwMjc0RkRDNzc0NjU5NEQ3MUJDMzRCN0FCMzlCNDEKKzoxMDEyMjAwMEM0RUY5MzFBRkM2MUE2NjZBNzlCQkY1RjRBQzQxNzIzNEQKKzoxMDEyMzAwMDI2MTdEN0E3ODFERjRBRkNERENGQjc3NEI4QjFCMTNBMjIKKzoxMDEyNDAwMEU2RUMzQTBCRDczMUEwRjVGMzBGNjhGMkQ3NzE4RkI5RkUKKzoxMDEyNTAwMDFBM0ZDNzcwODk0NTk4OTcxRjY4REFDQjdBNTk5QUQ5OEYKKzoxMDEyNjAwMEFFRTEyNTM1NUM4RjNGMzRDNEUxRTFFRkUxOTQ2MkI3MzQKKzoxMDEyNzAwMEMwQzk3NDFDNjRCMEZDNTNFQUFFNkJGMUJGMzRGM0I0NjQKKzoxMDEyODAwMDAxODc4MjM3RkE1REQ3RkJGMjE4REY2MkZENjNFQjA1NTkKKzoxMDEyOTAwMDlFNzk2Q0ZENTBDNkNGNjNFQjlGNjEzQ0VBODE5QThGQ0IKKzoxMDEyQTAwMDBERkUzMTZGRDU2MTgzM0ZDQzBGMUMzNURDOEY2NDc0MkMKKzoxMDEyQjAwMDVBMDg3RjhDQkMzNTY4REFGRDI4QkY4RTQ2NUIyOUU5NjkKKzoxMDEyQzAwMDAzRURFMDExRDJBQkJFN0U2NDdERUUxNERBRjdEQTdDN0EKKzoxMDEyRDAwMDdFQ0JFNzY4RjNCN0IyN0U3NTNFOEZGODBGRjEzOEUyNDgKKzoxMDEyRTAwMDhGMjQ3QzlGMjZGOEQ0NzEwRTlENUE3NzQzOEU5OURFMDkKKzoxMDEyRjAwMDI3NEE3RERDODQyQkY3ODY3RkU4N0U2NjJBMURDRUVCQUQKKzoxMDEzMDAwMDlDMzdCOTRFMDg5Q0E4NjYwQ0Q1N0Y2RDkzMDc5NEQzODMKKzoxMDEzMTAwMEI5REI4NjVBQ0Q4MjhFMTRFMzQxNjU3NjMxOUU3NjJCRjkKKzoxMDEzMjAwMEQxQThDNUIxOEU3MDkxMzY0OTdDNEYzNDU3NTI1RTk5MjEKKzoxMDEzMzAwMDhGRkIzRTMxNEE3RDlBRkNBMTdBNDk2NzAxRjk1Rjc1QkUKKzoxMDEzNDAwMDYxRTQ0MTA5RDdFRkVBQUY2RTIwRjk0OEQ4NUUwQzRBNTQKKzoxMDEzNTAwMDY3M0VGOEJCQjM1M0E2NDA4MTg0QUVCMkM3RkJGNTdEQjAKKzoxMDEzNjAwMEQ0Mjc5RUVBMTMzODQzMTVDQUNFQzYyMzYyNkMxNUZFRjUKKzoxMDEzNzAwMEY4QTE3NzFGRkJERjcxNUM4Q0Y4MENGQzU5MTJGODk0MTQKKzoxMDEzODAwMDIzNjI5RDg5RUI2NEY0NTc5RkE3N0RFOTdCMzI3QUJGODYKKzoxMDEzOTAwMDQ3RDdDOTNFNzVCQzM0NkExMTc1NjI1NEFCMTc1RkY2MDYKKzoxMDEzQTAwMDhBN0FGNjk1MDREQTQ0MzUyRUUxOEY0NDM5NUUzRjMzNkMKKzoxMDEzQjAwMDkyRjBGNEIzMUI2RDQwRjUyREVFQUY5ODRBNjJERkFGQUIKKzoxMDEzQzAwMDBDNDA1RUE4OEU3RERGMkFGQTRDQ0Y1RjZDNjE4QTUzOTkKKzoxMDEzRDAwMDNBQUVGQUE2Mzc4QkQ3Q0JDODE2Nzg2OUM2M0Y2M0RDMUUKKzoxMDEzRTAwMDIyM0Y4Q0I0MEU5Qjk5MTI3N0RFMDNDMDM4NzYwN0UxNUEKKzoxMDEzRjAwMEQxNzEzOEY2OUI1RUQxQUZDM0MzMjJFRTc1QUMxRkNDNjIKKzoxMDE0MDAwMDc4RkJGMkZEQzc4RTUwRkNCQUQ3QUIzNjkyNUMxNzk4Q0EKKzoxMDE0MTAwMDVDQTVGQzdENTZFQTJFQzZDREY2N0E1REJDMkY5RTk3NjQKKzoxMDE0MjAwMEY5QzUzOEI0ODZGNEI0REMxRTYxOUNFRDVBQjg3QTZGMDUKKzoxMDE0MzAwMEZDNzcyQzZDN0QzRThGNzE2NDU3MDFEOThEQkUyRjlFMzkKKzoxMDE0NDAwMDYzQUYzNzBFRkZENkNGMTE1QkU3RUE3RUEwRTNDM0ZBQTYKKzoxMDE0NTAwMEY4RTRDQjRGOEZENEYwRkQ3OUJFMUVGMkVCMTE0RDJFODgKKzoxMDE0NjAwMDZEOTY5RUYxRjg4QjVFRjExRUFGOUI3RTZFMDYyMEZDQTIKKzoxMDE0NzAwMERGRDYwNzczM0ZEMjZGQkQ4MkZGOEUzOUM4MEZFMzFCRTMKKzoxMDE0ODAwMDRBMTFFOTc3RjlERDBFMzdDOTU5NUYxRkQ3NTFERkJDMjMKKzoxMDE0OTAwMENBM0U1REEzN0RERjEwRkY0QjZBMDQ3RUFGREY4RjRBM0IKKzoxMDE0QTAwMDQyQUY4MUY1MDI0RjVEQkVGM0YwOTEyNzcwOTdDNUFGNTMKKzoxMDE0QjAwMEU3MTc1MzNFRDA5RjRGOTQzM0NBNzcyNDdGN0YyNzhCMDMKKzoxMDE0QzAwMEY3NUYyOERGQjNCNDdFMjI2RUZGNzNFNTFBMUQyQURFQjQKKzoxMDE0RDAwMEQzNDYzNzVEMUM0NkRGQTcyREE3RUZFMTBBQzgzRTA0QkYKKzoxMDE0RTAwMEZFMDUwRDQ2NUMwQkU1MTUyMDdDQTNGQjdCMkRFMEY3OEMKKzoxMDE0RjAwMDYzMzYyRDlGRDhGNEU3ODc5ODBEQ0ZEN0E3Rjg5MjRBODcKKzoxMDE1MDAwMEYxRkM2RjY5NzEwM0U3ODc0Q0Y0M0RCNzE2OUYxQUI0N0QKKzoxMDE1MTAwMEJFM0IxMTdGNjk2ODE1Qjg2OTQzQTY5NUVCNjhBQTdGNDEKKzoxMDE1MjAwMEU4QkU1RUZGQUNGQzU4RTBBNjJCQjM0NDlENERFNzI0MUIKKzoxMDE1MzAwMDNENEI4N0Y2NzBCRDcwMDUxNzk3MzBERkEzMUNEM0FEMDgKKzoxMDE1NDAwMEVBOTA1MkYyMjc3NTA1RTczM0Y5NDZENDMzQkQwRkY5MTcKKzoxMDE1NTAwMEVCRUQxQThFMjBGMkEzNTdDQjg3NUU1QTg3Q0U5NUQ3MzQKKzoxMDE1NjAwMDk3RjM2NDg5QjYyRkY2MTc4Q0RGOEQwNTU1QUIxRjM0QzIKKzoxMDE1NzAwMEZDNkRGRDFFMDNGRUYwN0ZEREY1RUM0OTMwMzEwMDAwMEYKKzoxMDE1ODAwMDAwMDAwMDAwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwQTkKKzoxMDE1OTAwMDAwMEJGQjUxQ0ZDMEYwMDMwOTQ3QjBBM0YyMEZBMEYxM0QKKzoxMDE1QTAwMDY3QjJBMUYyRDNCODUwRjk4NzU5NTBGOUZFNjhGQUQxNjEKKzoxMDE1QjAwMDcxM0IxMzAzMDMyMzEzN0UzNUY4QjAwODMzMDM4MzBDMDgKKzoxMDE1QzAwMDEwQUIwMEIxMEUzM0Y5RTY4MEIwQkUyODAzNDM4MTA0QUUKKzoxMDE1RDAwMDAzMDMzQjkwRkUyM0NFQzBFMDBFNjQxNzAyQjExNzkwQzgKKzoxMDE1RTAwMERGMDJDNDUzODE1ODFDMjg3RTE2NDg0Qjg5MzEzMDNDOTkKKzoxMDE1RjAwMDExODVFOEIzMDBCMjNGOEI5MTY3QTcxOTJGNjU2RTFFNjYKKzoxMDE2MDAwMEM1OTQ2MTEzNTk1NDNFQUYxQTAzODM5QjNBMDM0MzlGMTkKKzoxMDE2MTAwMDA2ODRBRjhEMjRCRjE0MjhDNkE3MDY2MUVGOTc2NzYwQzQKKzoxMDE2MjAwMEQwMDRGMjk1NjRCMTlCN0IwMDI4QUYwNTk0REZBNjgxQkUKKzoxMDE2MzAwMERGRkVDRDNBQTg3QzA3MzM1NDdFMjY5QTdDQTMwQjJBODIKKzoxMDE2NDAwMDVGQzMwRDk1QUZFMzBFQTEwMUMwNjJCQUM0RDgwMzAwMTkKKzoxMDE2NTAwMDAwMDAwMDAwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwRDgKKzoxMDE2NjAwMDAwMEJDRDdEMEI3QzU0RDU5OUY4Qjk4Rjk5QjkzMzk5N0UKKzoxMDE2NzAwMDk5REMyNDEzOThCQ0UwMjYwNDA4MUE3MDEyQzI0M0M0RjMKKzoxMDE2ODAwMDcwMTMyMjQ2OEQ2MTgyNjg3MTk3QkEyM0FEMzZBMjQwRUQKKzoxMDE2OTAwMDQwRDZDNjQ3Q0RFNDFENUUxQUM0RUUyMkI4NzRFMjEzRUMKKzoxMDE2QTAwMDk0RDZENDYyRkZCNEFCNzQwMkI4RDI5NjZBNTRBQ0I0ODgKKzoxMDE2QjAwMEI1REQ0ODVENkJGRDJCQkZBMEEyRDREMkIyRTdGQkNFNTcKKzoxMDE2QzAwMEI5OTk3QjZGMjYwMUI0REQ1RkUzRTNFNkRDN0IxRURGQzcKKzoxMDE2RDAwMEY5Q0VGNzNFREYzOTcxOEEwRUEyQ0UyM0U0MENGQ0QwOUUKKzoxMDE2RTAwMEU3MUI4NEZFNjQyNjlFODQ3NDEzMzIwMzlFMDM3Mjc4ODMKKzoxMDE2RjAwMDJBM0NBM0ZDM0Q3QjA2OTZGNjBBQTQwMDhCRkQ2NDI2REIKKzoxMDE3MDAwMDIxNzk4NEZERTQzNTc2QUMxNkE3MTEzMjk2ODQ3RTNBQjEKKzoxMDE3MTAwMDM5OUY5NjA3NkVBQzIxN0U1QTdFRUI4QTNGQzJCMzYzMzcKKzoxMDE3MjAwMDcxNjVGNTY1MUEyMTU5NEI3QTVGQkQ5QzNFMDNFMTk4QkUKKzoxMDE3MzAwMDEwMjkyNjY0MEIxMTA5Qzk4NkZFMEFBMzE1NUU0MkRBMzgKKzoxMDE3NDAwMEEwQjMzOTg0OEM4OTY2RTlEMTYyMjhFOEI0NDBDOEJGNjcKKzoxMDE3NTAwMDJBN0MyMDIyNkEzMjJERkJGMEQ3QzQzQzhDMjcyMTRFRjQKKzoxMDE3NjAwMDEyMkZDMjhBQzIxOUQ3RjBGNkY2RkFDNkQzMDdFRDhDNEIKKzoxMDE3NzAwMDNBRjlGMEZGMzUwNEU2NzdCNjc2NjQyRDFCMkY0QUZGNjEKKzoxMDE3ODAwMDM5NDNGMTkyOTMxODFGRkJDOUFBMzc5NTA5RTBDN0ZBQUMKKzoxMDE3OTAwMDVEMUZDMkZCRUFGRjkzRjFCMjQ5QTk1QjJCQTNGM0FEMzYKKzoxMDE3QTAwMDExRDUxOEQ0MjdCRDY5MzIyRDA3NkU5MzQ5NUNBMERGOEYKKzoxMDE3QjAwMENCQkEwNTg3NzZGNjc1RTkyMEE0QkFENzhCRjgxNUVBNzcKKzoxMDE3QzAwMDdDMDlGOEFFMjUwMkNFNjdEQzVERUZGNDc0MDYwODM5QkIKKzoxMDE3RDAwMEI5RDQxQjQyRkE1MDA5Qzk0ODFGM0U5RjZGMzcxMTEyRjYKKzoxMDE3RTAwMDc3OTlDQThCMkI4NTA4OEUxN0ZBNjkyMTZEMUY1RDJDOUUKKzoxMDE3RjAwMDg2MUUwNzc4NkExNkE1QzE3QkEzREUzN0Y5MzhDM0U5RDAKKzoxMDE4MDAwMDgzNjgzMkM1QTNDQ0U5NDNBRTExNzVGN0I0MkY0RjFGREYKKzoxMDE4MTAwMEYyMTdBNDhGQ0NCNUE2NzZFNEZDRDcwQkYxM0VFM0RDM0YKKzoxMDE4MjAwMEU5RTNDQjhFNjdBQ0VCNzBCRTZBNDYzOEM2REQ1NUU4OUYKKzoxMDE4MzAwMDI2NzRGRDFGQTg1RTk0MUE0OTUyNkZFNDc1MkQ0NTdFRUIKKzoxMDE4NDAwMDBGRDQxMDNEOTZBNEREM0E1ODRGOUM2N0Q0MjI2RkYwMTgKKzoxMDE4NTAwMDQ5RDc0NzFBNUFERURCMkRFQjI1OEQ5REI5QTQ2NzE0QjUKKzoxMDE4NjAwMDdDNDgwMUVCN0M4RDdFOUQ4RDkyRjY0RTA2MkRDQUFBOUEKKzoxMDE4NzAwMDA4RkRDOUJDQkYwRTc1NTk5NDAwREQwMjZENTM3QzQ4NEMKKzoxMDE4ODAwMEREMjU3MTQyRjk4MzA0NDlFODcxMEU4MTQ4Q0I0RTU1M0MKKzoxMDE4OTAwMDhGQUQxN0EwMTRDMzc1MzFFMDUzMEE0NUNCNzg4RTVDMjkKKzoxMDE4QTAwMDhGNjUzREM4OTJBODYwODZERkQ5RTg0NDM4NjQ2MDEzMkMKKzoxMDE4QjAwMDJFRUZDMjI4REMxOERDMzBDNDk5MDk1MEJFREJCMkZFMjIKKzoxMDE4QzAwMEIyOTdDNERENTRBRUFFMkIyQzI1RTY3NTMwRTg1NDEwMkIKKzoxMDE4RDAwMDBDM0FCREZCRENFNDhBN0RCQ0M1NTYzOENGQjk5RDU3QjgKKzoxMDE4RTAwMEQ2REUzNURBMTQ4Q0Q2NEUyNkVGMUE3OEEyQzg3QjFEQzgKKzoxMDE4RjAwMDdFMzFBRDdCQTc4M0VDMTUyRTIyQTQzNUI3MjMwQTZGNkEKKzoxMDE5MDAwMDNCRTE3RjE3MjM3RDgyRDAyMjlEQjlBNTJBRDAxM0Q5MzAKKzoxMDE5MTAwMDI5QzgwMEE3REIyMDhGNjAzQUQ2RUIyMTFBRDI1MzU0OTYKKzoxMDE5MjAwMEI4ODM0MDNEQzkxQjQ2M0MxOURGNDc4NjhCRDM1RDU0QzUKKzoxMDE5MzAwMEVGMkJBNEZENUVDREJCQkQ5QUVCMzM1MkU2Nzg2N0MwQkEKKzoxMDE5NDAwMDgwQkIwMEU3OTEyOEQzNzk3Qzc4MjdGRDFGQTU4RjY4OUQKKzoxMDE5NTAwMDg5MTA3QjVDMThGRUJEMDZGNDIxOTU0NzM1RjBERTI0MjYKKzoxMDE5NjAwMDRGNUM4MjU1OUVENUYwNkYwNzlFN0I3M0QyNzQ0QThGNzEKKzoxMDE5NzAwMEZEMjE4OTgwQjg2QTc5Q0VBNTU3RDFGRTVGQkQ1NDg4MTQKKzoxMDE5ODAwMEI5MDQwRTJGQUQ1RkNCRTEzQ0FDNjdFNDAxN0RGNjU3QTcKKzoxMDE5OTAwMEI5OTA3RTZCMkZGRjJDMDBFNDdCN0NFRkVCNzIzMjdFRTQKKzoxMDE5QTAwMEFEOURFQjQ4QzA0MUZGNUI2NTlFMUZGRDZGMEM4QzgxQjgKKzoxMDE5QjAwMDdDNTk4NTc0NjRDMEI1QTI1NDQyMzhGQUU3MEEzMTE4REMKKzoxMDE5QzAwMEU3RTA2RkZGNzBERjI1MTRDRUMzNjU0MkM4QTUyMUJDRDgKKzoxMDE5RDAwMDNFNDJDN0VCRDczRjBFOEMyNjI3ODgzMUJFNDY1NEMwMDcKKzoxMDE5RTAwMEE3N0RGQ0ExRjU1MDQyNEI4MDJGRUI1NUE3QjY5RThFRUMKKzoxMDE5RjAwMDc3QUIxNDNBMDQ3QThDOEM2NUZBQTE1RTlENTQwNUVCQTIKKzoxMDFBMDAwMDIzMDk4QzNFRTYwQjU5RDhBRUQ1REIzMjA2RDc1RDVBOUEKKzoxMDFBMTAwMDlBNTQ1RUQ1NTM0NUExOTZDMkY3OEQ5MzQ2ODUzM0U2MTkKKzoxMDFBMjAwMDE4MUMzMEQxNzVFMzVCRjlGNzFEMzRDMTM5NTVGMDA1NDkKKzoxMDFBMzAwMERFNERBMUJGQ0MyMkIzNjA5RDNGRjIyRTRBOEQ5MzkxMjMKKzoxMDFBNDAwMEZCN0JCRjQ5Njk5NjFEODQ3Q0Q2QTRERDc3RDAzMUZDMzEKKzoxMDFBNTAwMEZCQUQxMjY5RTgyRDFFRkVGRTRBNDFFMUY4ODgzQUMxNEQKKzoxMDFBNjAwMDNFMzNFNjNEMzQ0RjZGMDBFOUZCNTYxMEJGOTRENDZGMTAKKzoxMDFBNzAwMERERTk2RTk2Q0RGMkM3MzY4RjIxRkM3RUMxNzY0QTYwRDUKKzoxMDFBODAwMDREMzQ1QjAzN0U4QjJDMTRBMDFGOTlGRTMzMzNDMThGMjIKKzoxMDFBOTAwMEI3RUVBRTYzN0M2NzgzQjczREYwQjc4MUY3NkM3Q0ZDMzMKKzoxMDFBQTAwMDkxQjdBNTAzRUNENTU2MDdBMzk3QjY0QzMxRDQ0Mjg2MUYKKzoxMDFBQjAwMEQzOEJCMTFFMDYxRUNGNzUzRDM2MEE2RUU0MEY4MzhFQTIKKzoxMDFBQzAwMEVBQzVBNUEzQUVGQkQ5RThFODBFQTBBMzBCRkZGRTc0MDAKKzoxMDFBRDAwMEI0MDVFODY4QzYzRjI0MUQ2REZENDdBNEEzNDRGOTcyMTAKKzoxMDFBRTAwMEI0MTcxNkYyQkVGQTA2N0VGRjIwQzhFNzVGRUExMkNBRjQKKzoxMDFBRjAwMEJENUZDRTY1RjJGRjk3MTEyNjE3RkI0OTY0RDMwQ0QwNkEKKzoxMDFCMDAwMDA3NDcyNDk0NTNGRDdBQUIwRkUxQTUyNjMxQ0MwM0ZEQTIKKzoxMDFCMTAwMDJFNEE3RkFGODNCRDM0OTlDQUY1MjYwNTlGNzRGNjc5QTYKKzoxMDFCMjAwMDhCRThGNzU3MkZGQjJDMTdGNEQ3QUI3NDZEQzFGRTI2NEIKKzoxMDFCMzAwMDY0NTBENzY5RkI1Nzg2Q0FENDAwODdCMjlCOTUwNzlCMzAKKzoxMDFCNDAwMDRGNDVDMTNFRUYxNzU4RjkyN0NEQTdGNDI4OEVCN0IxRkUKKzoxMDFCNTAwMEUzNzI4QUNGODVGMDJCODU2M0YxNUM0MThGMjVBMThCRTEKKzoxMDFCNjAwMDlGMDk0RTg2OTcyQTYyRDFBQjc0NUQ3RTI2NTA3QTUxQ0EKKzoxMDFCNzAwMEMyQUJEMUFFMjYyNDRDRDAzRjJDQTQ3NjgyQzlCRTY4MUQKKzoxMDFCODAwMDA0MDUwNjcyQjlDQTg1RkFDRkRFRkYyQkRDMkVCNERCNjIKKzoxMDFCOTAwMDcxOEJFNzk2Mzg0MDVGQjhDMjI3RTQwMUZBNUMxODE2RUIKKzoxMDFCQTAwMEIwMENGODU3NEQ3MDhCQkFBMDgzMUUwOENGNzUzRDAyNUMKKzoxMDFCQjAwMEZBMkYyQzEzODc5QTg0NUYxN0VBMkU4QkRENzU4MkVCNDAKKzoxMDFCQzAwMDMxOEE5NzI1Q0M2RjUxRjNFQUE2MjZFQTlGMzBGNEFGMEQKKzoxMDFCRDAwMDZEM0UyM0QxODUzMTBGQTM3Q0NEREMxMzA3MzM2MERFNEUKKzoxMDFCRTAwMEQ1NDI2ODIyMzQ1NEQ0QkMxQjdDRTZGRTUzMENGQkM2QTEKKzoxMDFCRjAwMDA3NzhGQkU1OTI2QjUyMTkxRDQ0NTBBRjFBRjRGNEQzRTkKKzoxMDFDMDAwMEI3QkZFMTgwRjk5M0M1MTk0ODk3OEI2QjI0OEIzREI5MTkKKzoxMDFDMTAwMEE4MkFDNTUyQkU2RUVFMzVBM0RBRTEyNDYyQzI4Mzg5REEKKzoxMDFDMjAwMEVFRkQzOTA0RTk5NEZDMzdCNTUzMjg5RDQ2MkIwNzIzNzQKKzoxMDFDMzAwMDY4QjcxQzEzQjQ1NjVBNEUyRDZGMUMwRkZEREUyREE2MkYKKzoxMDFDNDAwMDYzN0RBMUJDNzFGMjAwREE1QjBCOTBGRTUzNzg5RkE5MTMKKzoxMDFDNTAwMENFODYzRjE0ODA1QzlEMjg5MjQ3MzRCMDQ3NDdGNzBCRUYKKzoxMDFDNjAwMERBMzk5RDFCNjU0NzIwMTIxNUU4N0E2QTUxQjU1NDFBNzYKKzoxMDFDNzAwMDA1REYzMTVEQUM0RUU2Mzc0QzEwRDlCQUI1NDcxN0E5MzAKKzoxMDFDODAwMDg1MDBEMDQxQUJEQzQ4QUI2QTQwRkJDRkE4NEZFOTc4NzgKKzoxMDFDOTAwMDgyOTgwOUUzNDZGMUZEMTAxRDc3RDE3OUQxNzYxRTY2NTEKKzoxMDFDQTAwMDhCOTBENDBCMTZBNTkyNTFFNkQxNjY1QjdGMkFGRUY1ODgKKzoxMDFDQjAwMDY0NzJGNjU2MEUxRkQ5Q0JGQTM3NjQ1MjZBM0FFRDNGN0EKKzoxMDFDQzAwMDQ5N0RFM0Q5QzlGQjNGMTUxMjQ5M0ZDMDI5ODcxNUU0NzcKKzoxMDFDRDAwMDg3QTI0QTYyRUU4N0U4MjU1ODc2RjJBMjJCMTg1NkYyQzAKKzoxMDFDRTAwMDI5M0U1REM1MjI0QzgzQjQxNzNGQTJDQjFBRTAyMThBNUUKKzoxMDFDRjAwMEVCQkQ4MUFFNkRBRTg5MkYzN0ZDNDU0MjNGRkY1NkIxM0IKKzoxMDFEMDAwMEEwMTlFNEM2ODZCRTVCODg0NkYxRTEwOUM2MDg5NkE3MUQKKzoxMDFEMTAwMERFQUMwMDlFMzY1MDI3QUIxRkM2OTc3QjA5QzA5MTkyNjAKKzoxMDFEMjAwMDRCN0ZBN0UzQTRBODI0QTZEMUZFNjRBRDM3MkVEMkIyODAKKzoxMDFEMzAwMDVDNEQ0MjNBRkRFNDUzNDM4Mjg3Q0E4OUZEQzE4MjY2MDUKKzoxMDFENDAwMDk5QkU2RjVCNEE1MDNFMTI5MDFFMjZGQTY5MEJCRUE2RTIKKzoxMDFENTAwMDRCNDAzRjRCNDgwODAwNkUwQjJDQzM3OTc2MTQyRkVCOTkKKzoxMDFENjAwMENBQTdFRjRGRDZDODE4M0YyMEE3MjlCQzg2NUY0RkZERjIKKzoxMDFENzAwMDBDNEYxMUQxNjFCQzBENTkyNEU2NDUzQjU4NDdGQzNBNDQKKzoxMDFEODAwMDU1QjY3RURBRDY0MjEyOUY0RUJGQTdDREVDODNGMUEzQTMKKzoxMDFEOTAwMERGMjI4QzJGMDk5MzZCMzI5NzI3NDRBNkY0MDdFMzM3OTEKKzoxMDFEQTAwMEFBQTFGNTQ5RTg0RjIxOTE1QkM0MTlBNjc1NTZDM0U4NkQKKzoxMDFEQjAwMEM3REFGMTk2RUEyNDU3MDI3RURCNEEyODFGMjQ5MTdCN0EKKzoxMDFEQzAwMDc3ODgyMkQyNDEyQ0I0Njg2MTQxOTI3MUVFMTYzNTk0MjUKKzoxMDFERDAwMDRGNDY1OTNCRTU0NEY4NDdBQTlGQTgyNzkzNzgwNjc0RDUKKzoxMDFERTAwMEFEMEI4MDE3MTIwRUUwRkNEMkM5RDA4RjBFRTUwQzNFNzEKKzoxMDFERjAwMERGMzFBNDAxRUIwNTY3NzdGNzAxQkY2NUVCQkQxNTgwMDcKKzoxMDFFMDAwMDhCNkZGQkFFN0IxNUQ3OEQzQ0FDODIxRDRCQTEyRDNDNUYKKzoxMDFFMTAwMDkzOTE5MDE3QTA3MzYwN0UxRjg1NDRGNDNCN0M2MjVDQjUKKzoxMDFFMjAwMEQ1NjkwNzNFNzc3RjEwOUQ1RjhENjA1QzJFMTU5QTUwQjcKKzoxMDFFMzAwMDgwRDczNzI5NkQ2MDk3Rjg0OTQ4ODBFRkJFOTAxQzM1RjAKKzoxMDFFNDAwMERCRjVBOTg0OTYyREYxMTQ3MkE0NzAyNjYxMjIxRkJGQzAKKzoxMDFFNTAwMEFCN0RDMDNBNkE1MUMzNDUwMENDMTZCRkZFNUZFMDM3ODgKKzoxMDFFNjAwMDZERjQ0NUQwMEZGQkNDRUQ5RjA2ODM3REQzRTM3RjA0NUIKKzoxMDFFNzAwMDlFOUZCOUM3QzVEMDNGMEIzMTdGNEJBMUZGODBCQzRCQTQKKzoxMDFFODAwMDlEMkQ1QkZDOUIzNERENUFDRUIwRjk2MTBCMjQyRkNFMjcKKzoxMDFFOTAwMDMzRUQ2QUMyRkQyQkJENjZFMjk4MDQ1QzE0QTIzQUEwNDEKKzoxMDFFQTAwMDk3Q0Q1NTMyMDFGRkRGRUI2NUYwMThGMDY1NDhGN0NDQjAKKzoxMDFFQjAwMDQyRkQxODkyOEYwMTFDMTQyRDA4Qzc0OTcyM0EwRTRCMkYKKzoxMDFFQzAwMEVDMkYyMjE4M0ZBNTcwMURCM0MxNzVDQzA2RDczMTMzNTYKKzoxMDFFRDAwMDVDOEQwQTlCQUZERDVFOEM1NjkyQTIwNjBBREMwQjIyNUIKKzoxMDFFRTAwMEY3M0ZBOEREMDQ3NkUzNDlGMjgxNUUwRDg0MTNCRTEyNEMKKzoxMDFFRjAwMEY1QUM1RjY1NkRCQzRBM0YwNjJCNTRBMjIyMUREOEVEQTAKKzoxMDFGMDAwMDQ2QkE0RTFGNTlGQ0FGRDlCQ0FDMTEwMUU2NDFFMUI0NTEKKzoxMDFGMTAwMDdFMjdCOTQ4MkY1ODk2Qzg1MDVDNzhEOTZDMDM1RkRBOTEKKzoxMDFGMjAwMDU3N0U0M0Y5RUY5NjQzMEUwMkZDNDVGOTU4ODJFRjBFQjcKKzoxMDFGMzAwMEZFRjUxNjFFMUY1RTA2RkUzNUM1REZENzQ5RDgwRkYwMjkKKzoxMDFGNDAwMDdENDg0NDhDNDM3RDQ4NUVGMzRGMzdDOUM5RTMyMkI3Q0YKKzoxMDFGNTAwMDRGNjA4OUNEN0M0QzQyNDE5MEUzQjJCN0EzNUZGMjIzM0UKKzoxMDFGNjAwMDFBMEM3QTEzQ0VFMDNBODY5ODlDRjczMkJBOEIxMkE1RjcKKzoxMDFGNzAwMDE5RjU2MTE3RjMzRjhENzhFQTREREQ1NjdGRjgxQjVCNEQKKzoxMDFGODAwMEFERTU5QkM5QTIzMTEwMkZCREY5NDEwNzg5RDE3RTZGMDQKKzoxMDFGOTAwMDMxRkJGNzc0OURERTEwNTU4NEVGMUJBNEExMDNFQzkyNzYKKzoxMDFGQTAwMDRFMDdCMzM3OTZBOTQ0ODZGOEU3OEFGRkY3MUYzMzZGQzkKKzoxMDFGQjAwMEE0RjMzOTA5RjI2MDA2RDhFRjE0N0M5MzFFNTkxRTg4RTkKKzoxMDFGQzAwMDM5RjVFMkUxRjM2QjE1NDJCNTk3MDgyM0NGQUZEM0QxRDIKKzoxMDFGRDAwMDVGMEJGRTc3NzQ5MzAzRUQ0QzYyOEY4M0VFOTEzMDBFQUUKKzoxMDFGRTAwMDZBNkE4N0YwN0VBRENCM0FCRkIzQ0RERjNFNUY0MjFFNUIKKzoxMDFGRjAwMEMwRjkyRURGNzkyM0RBRTcyM0NEQzdCOTMzQjlCREU5QkMKKzoxMDIwMDAwMDk1MDQ0QkRDQzdFMDZCODNERUVERkM1RDI2NjkyQ0FFRUUKKzoxMDIwMTAwMDQzRDUyMERBMkJCRjRCODlCNUUyRkEzNkNDODJGNTNEQTkKKzoxMDIwMjAwMDVCRkI4QkExN0RFNjE3NkY1RkZFMjVDNzlGN0Y5NkY2NTIKKzoxMDIwMzAwMDJCOTRDMTA1QjBERUVCMDJERDYxRTA0RjIzOEVCNTkyM0IKKzoxMDIwNDAwMDQ0RjUxQ0ZBQUJFM0Y5RDU1MTMwREQ4NkVBMDVDRkIxOTIKKzoxMDIwNTAwMDVFMkVBRDI3OUQ0M0JEQzJEMUZCM0JDRUVEOTI5Nzc2NjAKKzoxMDIwNjAwMDNGRUEwNDNCRjVDM0E3REVBRTA1M0JFMEQ2RkY5NDg4MEMKKzoxMDIwNzAwMDQyRTlFMUY4NkUxRjg5QTNCRDEyNzM4MjdEQjM5Q0QyNDEKKzoxMDIwODAwMDVEMENDQkYxOTlENzk4RUM2MTRBRDFCODBFQjczRUUzMUQKKzoxMDIwOTAwMDQzM0I2MkY5QjNBRTU4MEQ2REJGRkM4N0JGOUY0NjI4MjYKKzoxMDIwQTAwMDFFOEVCNzBDRkU1NzBFRDBGMzUzMDI4QkJCNDYwN0E2MEQKKzoxMDIwQjAwMDVENDNERjJGOTdDOUJGODQ5M0QwRDE4RDEyRTNBNzBGNjMKKzoxMDIwQzAwMDdFOTRCMjA0RUM0NDYxNjdERjBERDg2RkVGNTcxQzJFOEQKKzoxMDIwRDAwMDkzM0U1RTIyMzk3MDVDNUEwRkZEODhFODJFMjEzNjUxRkUKKzoxMDIwRTAwMDYwRjA5OUZEMDEyM0RFRkRDMTJFODFDMUI3RDcxMTczQzgKKzoxMDIwRjAwMDAzN0MzQjdCOUMxMTVBNkZENUNFMTM0OEQ3RjM5RkY5RDUKKzoxMDIxMDAwMEFFMUZGMEIwNkFBRkQ1NEU1RkI1NTM4QUJCQTZFMUYzMDAKKzoxMDIxMTAwMDZENzg4MjA2MTU2NjAyM0UxOTNGQUZEQ0IzMDJGNUM2NDQKKzoxMDIxMjAwMENBREUwRDI3ODA5RjU3RUQ3NTU4RTQzRkM1NEIyODBFM0EKKzoxMDIxMzAwMDc4N0Q1MzBBRDU0MEY5MDc0RkZBMzU4QUFBRjdGQjFGNzUKKzoxMDIxNDAwMEY3MDM1RTY5QkYzNzNBMjk1RDJEOUM2RDZEMDdGRDlGRDIKKzoxMDIxNTAwMDRBMUZERTFGRjUwQ0QxNkY1RUQ1QkI4RThEQjdFN0VBNDcKKzoxMDIxNjAwMDNGODBCQzVENDU5ODlFMzJGOEY5N0RGODI1NkJCODlFOUUKKzoxMDIxNzAwMDU5Mjc1OUUzNUIyN0M5RTE5OUI4MEZCODMzMjNBOUZGNjEKKzoxMDIxODAwMDZDRTgxNTgzQUY2RkZERUVDOTFENTEzQUZFMDdDRkZFMTcKKzoxMDIxOTAwMEZGMUQ1MTNBOEZEQkZFRkFGMThFQkJFOUZDQzgzRUI3NUEKKzoxMDIxQTAwMDBBRjI2QUQ1NTM2RkY4ODkwOUZGOEY0OTZDM0ZFMEY4NEUKKzoxMDIxQjAwMEFFMjc5RkQ4NDZGOUU0RjhBRjVDNjgwNzFFN0ZFMTBGQjEKKzoxMDIxQzAwMEUzMzQzQUZGRTNERkZGRDMxOEIwNTNEN0JFNzBEOTU4REEKKzoxMDIxRDAwMEMwQzdEQUU3RTY4RjFEQ0Q1RTA3QkE4REI5Q0NFQjFCMjEKKzoxMDIxRTAwMEMzRkVCNUJEMDI2QzgyMTBGMjNDN0ZEQUQ2RTlDMDFFOTgKKzoxMDIxRjAwMDI5MEUyMTgyMEY4RkJBNjIyRThBOUY1NUY0NUQ2MzI5QzIKKzoxMDIyMDAwMEFDREIwQUQ0NTc1MEJFODdFMjdCRTVFRUNFMTNEMkI0RTYKKzoxMDIyMTAwMDY0Nzg4RkU2ODg0MTc4QzY3MzQ4MTBENkZEOUE4NTk3MTIKKzoxMDIyMjAwMDk2QzFEMzExRDI4MDRFQzgyMEVBMDk3QkJCNTU0N0U4M0UKKzoxMDIyMzAwMEZBNUUzNEYyN0E1MjdCQzIwOUY4NUZCNTdCMUQxQkI3OTgKKzoxMDIyNDAwMDk3QUVBNzdGRjg3QTdFMDhCRjVDM0M3QzNEMEY0OEQ2RUUKKzoxMDIyNTAwMDM4RDM0OTcyREI3N0I2QzFDNzNEMTlCOEZFMjNBREU3NjUKKzoxMDIyNjAwMDhBRTdBRTFERDVCRjMzRTRDM0Q5RjA1QzJGMzBCOEVFOUEKKzoxMDIyNzAwMDk3RjRENzI1RTBDNzY3OUY3RTYyNUI4MEFENzMwRDQ1RkQKKzoxMDIyODAwMENDRjFFRjlFMUMwNzlCQkNFRjM5MDY2RjAwMzkzOUY4ODMKKzoxMDIyOTAwMDgyNEIwNUJCN0FGOTBCNkYyMkRGMUQ3RkVFNTVBNzg2QjcKKzoxMDIyQTAwMEZCRDNDNDJCNTAzRDc5OUMwQ0ZERjQ4M0RFNUMyOUIwM0MKKzoxMDIyQjAwMEMyQUFDNzdDNzE5NzNGQjE1RTJCNjM3NUQ1OUExRkRGQTkKKzoxMDIyQzAwMEJGOERFRjYzOEMxRjU2QzZGQTE2MEI0OUQ2Q0YyQjE3NUUKKzoxMDIyRDAwMDMwRkQxNENCNDRCQ0FDRDBGQTlEQUFEN0JBQUVDMjZDQzgKKzoxMDIyRTAwMDU4Q0ZCNzE3MDBGRDhEQjQ5RUM2RkM1NTk4RkYyQ0QzNzAKKzoxMDIyRjAwMEJBM0VDNkY4NzgyNDdFM0RERUUzOTI4NUQ0RTFFQjdDREQKKzoxMDIzMDAwMDlDREIxNUFCNjJDMjlCQzlENjlEOTAxNjE2REYxQjIxQzQKKzoxMDIzMTAwMEVFNkQzQ0VENzRFMTk0QUQ3QzZFQjQzN0U2N0YzNjNFRjUKKzoxMDIzMjAwMDNGRkJCQ0NFMEY2RjI3QjlCRUI2RTNFRjgzRDNDOUY1MzEKKzoxMDIzMzAwMDQwODEyQzcwQkRENTVEOUQ2REQyNzc2RTA3RDU2M0Y5NTgKKzoxMDIzNDAwMDYwNzczNjQ0NzNGMjEzRjA3NkY0NEEyOERGM0ZEODI5RDkKKzoxMDIzNTAwMEExQkQ2Rjk3MTMyQjQ3RjBFQjQzQzYzODdCRkJBNjgxREIKKzoxMDIzNjAwMDNDRkI2MEZGOEYzODNEMzI3QTVGQjlGQjZENjc5NEVCQzEKKzoxMDIzNzAwMDg1OTg1OTJGNDA3RjQ5RDY2MzBFRUY2RkQ1RjNDOUZCN0YKKzoxMDIzODAwMDVCQjVGQjQ0RDJGRURFOTdGNUFGMDBGQ0VGRjczQjQ4QjAKKzoxMDIzOTAwMDk0NzZGMTdFQUY5NDM0NEU1MjI4M0IyQzc2NTY4NzZGNUMKKzoxMDIzQTAwMEU2RDE1NERBNEVGMjdCMzQ5ODc3NkI4QkZFNjYxNEVDRjAKKzoxMDIzQjAwMDkxRDcxQzA0RUQ0NzM5RjQ5RThCN0U2RkY1Nzk3MEJGODEKKzoxMDIzQzAwMEE1RDU3RjMzRDE0Q0ZBQkJDRDg2MjczOTE4NDYzRjVBNjUKKzoxMDIzRDAwMDBFODRDQkQ4NUU2OENDRTJDRjNBNTREMTAyMzc5MUEzQjkKKzoxMDIzRTAwMEI5QjBDRkY5NzJGRTFGNjRFODE3RTI2OTlBMjkyRUY0OUEKKzoxMDIzRjAwMDhBNENEQTIxOUVGNjhBMkU4NDlBNDk5MkI4OTZBREZGQ0QKKzoxMDI0MDAwMEYwNUM4OTY4NjYzQUQzQzc4QkU2RjhBMjdGRkY5RDE4MTcKKzoxMDI0MTAwMEQ3NjgyNDBENzE4ODM3OTE1Q0QyRkJCOEE5REY4NzlCMDAKKzoxMDI0MjAwMDM0MTY3NzBEOEYxN0NERjEzRjU3NDM4M0VFQTI3MEU0M0EKKzoxMDI0MzAwMEFFNTUwQkMwN0YxQjY5RkNCQzA2RUJCRUFGMzFGRTFBNkMKKzoxMDI0NDAwMDFFOEYyMDNCOUY3QUVBMjk1QTFFMEZERjQ0QTBDM0IwOUIKKzoxMDI0NTAwMDhFNzA5QzY2RkJDQUYzQjkzQzdDODlEQkNGRkIwNTcyQUUKKzoxMDI0NjAwMDEwRUNCMEVBN0IyMjMyQzgzQjIxNzgyM0M2NDUxN0U0NDIKKzoxMDI0NzAwMERFMjgyRjMzRDFFMzgyRTA4OTJDRDBBQkRGRjk4QkI0OTcKKzoxMDI0ODAwMDI0MTk5REVFRTU3NEQ1RkNBRDI3QjJBMEZEMzZGNzU3QjMKKzoxMDI0OTAwMDcyOTkzMzFCNDZGODcyNzhCQ0VCNjBFNkU1NUU4OEVGMTQKKzoxMDI0QTAwMEY1RERCMkUwRjAyNDNBREY2QzU1MjIxMEFGQzkyNjE1RjUKKzoxMDI0QjAwMERFMTIwQTY3Q0UxMTI5RTQ0RUIyMEVDNjczMDc4RkVCMDcKKzoxMDI0QzAwMDNERDJBNEEyRkM3RkFDMjk4OEU1MjczODVFNzczNjE1N0IKKzoxMDI0RDAwMEUxRjNBOUE2MTA3RURGREQzNDFCQ0JCRDRERDVGODdDMjIKKzoxMDI0RTAwMEI2Mjk4Q0VGRkQ3N0ZEQjhDRjA5NzhCOTk3RjQ0MkJDRDcKKzoxMDI0RjAwMDY2NEZEMzEyRkNGRUMzQTYwODNFMUZFN0YzNTkwMDc4Q0YKKzoxMDI1MDAwMEYxNUFFNjhGRjE5OEJENkRGMzVBMjAxRTYzRTBEMThFMkIKKzoxMDI1MTAwMEY3NzkyNDdBRDA4NUZCRjk4MjA2NzhCRjUzNjZGMkM1MzUKKzoxMDI1MjAwMDhFREY3MUFFNUUwMUU0NEJFMzZEMDRFREQ3MUQzQzZFQjIKKzoxMDI1MzAwMDZDQ0NGNzIxOTlEOTlCN0IzODNDM0Y3NDQ3QkUyN0MzQUQKKzoxMDI1NDAwMDdFNTM3NTYxMzFEQTQ1MjQxQzAyRjlCRDQzMDhBNzk2MTQKKzoxMDI1NTAwMEQwMkEyRjY2Q0UwQTlBRTU3MEI2MkZCMjQ3MzZFRDJCRjkKKzoxMDI1NjAwMDhDRUI2MkYxOUU2RDMyOTM1N0UzQjUxMzdENjkxNDBGQzYKKzoxMDI1NzAwMEQ1Qjk4MjA2RTEwNDYzQkVGQjJCQjQ1QzkwOTNGQjA1RTYKKzoxMDI1ODAwMDAxRDdCQjNBNTcyMjQ1MjZCQTM3RkFGQjBGNTlFNEZCNkQKKzoxMDI1OTAwMDFCQzlFNTc2ODI4RTk5M0M0OEJGNDIyRTAyQkZGNjI0QzUKKzoxMDI1QTAwMEYxODQyNENBRUZGQkIyQzgxRTQyRUQ4RjdENDA5NzIwMTQKKzoxMDI1QjAwMDE3N0U5QjgyNzE2MkMzQkZEOUM4RDczQjFEODgwMkYyQzgKKzoxMDI1QzAwMDI1REVGMkM1NDBGRThDRTRGNzc0RjBGQTFGNzFCODU2QjAKKzoxMDI1RDAwMEM4RTFENzY1REM1N0U2RjE1NzEyQzczODI2QTQxQzAxQkQKKzoxMDI1RTAwMDNENkU3MzJGQkRCRjhBM0VFRjlCRjNGRTUxODgwRjdFNzkKKzoxMDI1RjAwMEY4OUM1QjAzQjgzNjk1MURGMzlCRjE0OEVBRTUwRkNDRDgKKzoxMDI2MDAwMEZCRjE0M0YyRTY1NDBFQzZDNUZFODc0NERFOTZDRDcyNUEKKzoxMDI2MTAwMDI4MzBFODg0RjZGQjA0NkQzM0VDNUY0N0RGOTA5MEZGRDEKKzoxMDI2MjAwMEY2MDlCMTI5MThDNzkyMDlGQTA1RkI2RTA5NjI3RTg3N0YKKzoxMDI2MzAwMEQxQ0UxN0IyRjI3N0JBN0I2MEZCMkE5ODc3QkQzMzE0RkMKKzoxMDI2NDAwMDREQzIxN0JGNEVEMTJDRkI0NkFFQTBCNTdEMTA3NEU2MkYKKzoxMDI2NTAwMDBDNTZENjI4N0Q5NkYwNzk4NzY0NUQwMjM4NjY5MDA4MUUKKzoxMDI2NjAwMDNFNjcxMTBEOUY1OThFQzhFNzMwOEZFOUE0MzcwQkNBMUEKKzoxMDI2NzAwMDJEMjlFMzJFNjFGQjA3N0YzN0JDMjk4RTdGNDBCQzE5RDMKKzoxMDI2ODAwMEY0MUE5QzUzODQ3MDkwQkJDNEQwNDQwREJENDkwQjlEN0IKKzoxMDI2OTAwMDJGNzQwODFDQkYwQUNBRjNFQ0ExRkRBOTg2OTdGMjAyQTkKKzoxMDI2QTAwMEQ4MEQ4QjkzQTgyOTI4MDdCM0REMEM3RjhEMDMyNzMwMjUKKzoxMDI2QjAwMEJFMUIxQzQ3MkM3MUY3RjY3QTExRjk2MERCNUI2QzVGNkYKKzoxMDI2QzAwMEVGNjQ3REMxRTY0OUI0N0UwNUQxRUVBRkNBMUYzRTBGNkYKKzoxMDI2RDAwMDgzM0ZCNjI5RTFENDY0RkI1M0M2RDNFMDBCQTNCQzc5OTYKKzoxMDI2RTAwMEZDMEQwNEU0RDBCRjhGQkYwMUYzOEVCMkRGNzI2QkUwNEMKKzoxMDI2RjAwMDc3NTRGQzZFNTczM0M4QzVGNkI3NTk3RUM1NTE0RjY0NDEKKzoxMDI3MDAwMEFFNjM0NjQyQ0VCNERGRDIzMDFFRkMyMEI3MkY1QzBFNDMKKzoxMDI3MTAwMEVGQzNCOUIxRUI0MURFOURBQzVFRUJDMkE5N0I1OURFRTQKKzoxMDI3MjAwMDRCRTMzRERBRTZDOURBQzhFQkIzQTM3MUY0RkQxQjYzRjIKKzoxMDI3MzAwMDVFM0I2MDVFQTNFQzVGMThGMzMyRDZFQjY0RjVFMkMxNUEKKzoxMDI3NDAwMDlCMzU5MDMzODVBOTkxMjRFRDg2RTRDOTE1OEI0NzFERUYKKzoxMDI3NTAwMDdGMDdENzJCNzRGRTRCQ0RGNDM5QUU1MUM1RkMxNkEzQzEKKzoxMDI3NjAwMEJEMzE1RjdCN0JGQjdDMTNGQkMwRTc5NjE3RDRFQjIwNkUKKzoxMDI3NzAwMDE5NDBFRkRGRkZGM0I4MUZCQzgyQTIzMTJDODE5RUE2NjcKKzoxMDI3ODAwMEZDQjkxMkUwOTk0OTFBQjA0Q0U0REUyQ0IwNkYwQzdBMTcKKzoxMDI3OTAwMERFRDZGMTQ0MTZFQTA1Mzk5NjhGRjk1REU3Mzg1RTNCREYKKzoxMDI3QTAwMDA5ODcyQjgwREY0MjYyQzg2Q0FGMThDRkQ2MjEzQThGRTEKKzoxMDI3QjAwMDYzNUNENUM1RTU4MDk4NzI0RjMwMTk5RTg3RkFDRkI1MTYKKzoxMDI3QzAwMEYyRkY0NjQyOTg5QzhGMkIyOEU3MjE1MEE4RDI3MkZFMzgKKzoxMDI3RDAwMDIxNTJCQTlFRjY1NzBGNDlBMTc0OUMwQTk5QzU0M0E2ODcKKzoxMDI3RTAwMDFGRDI3QTI0MTY1Nzk1RUE3QzI2M0NGMkZEMDYyM0JFQkEKKzoxMDI3RjAwMERCNEVFRTIxQUEwNjdFNDU0OTFGNTQzN0Y4RjQ4MDMzOUMKKzoxMDI4MDAwMEYyQTAwM0YyRjA4MjFBRTY3QjNBMDIxMTgxRURDN0IxMjEKKzoxMDI4MTAwMEZEQTEyMjZFOTc1QzI2MkQ1NUMwMkU2OTI0NjFFNTAyMkMKKzoxMDI4MjAwMEUwREIyMzEyNjE3OTc4OENBRjVEQzYzRTE4RTc2MzE3NTEKKzoxMDI4MzAwMEU3NjNDQUMxNTg5RUM0QkYzRkNGRTk2QjJGRDgyNzY4NTIKKzoxMDI4NDAwMDRGMzAzQURBQzNFRDkzQUFDMUMxMDMzRURBQUVBOEJGNTYKKzoxMDI4NTAwMEJCMTJBNkYzMkNEODJCMkVCMDRGNDJGOEZEN0I2MEFGRjUKKzoxMDI4NjAwMEQwRjI4MUI0N0ZCRkYyMDI4QTk3OURCQTE4MDI1Q0VGNjIKKzoxMDI4NzAwMDZFRDIxOTNGMzRENUUzRjc0NjEyRjVBQzA2QjlGNEIwODEKKzoxMDI4ODAwMEE4MDI5QzlEMEZCNzQ4N0U1QURFQTUwODE4QkY3OEI4RUQKKzoxMDI4OTAwMEE5MDFFQkZCNEY3QkUyRTA2RkVFNTJFMjAyRDgyMzI3NjcKKzoxMDI4QTAwMDQzMjQxNDA1QjhBOTdCMDRGMzlBQzRFNzUxRjE0RTNGQzEKKzoxMDI4QjAwMDZFOTczRjExRkJFOEY3RjdEMzdBNUI2NjdCNzA5RkNDOEUKKzoxMDI4QzAwMEUwQUY0OThEODNFQTk1QzA1NzhGMUZEMzU2MDNGQzMzODEKKzoxMDI4RDAwMEQ2RTg1MDdGNjNBODAwRjcyOTlFQTRGODgyNzVEQUI5N0MKKzoxMDI4RTAwMEY1QTNBREZERjRCQjVGRUU1QzBEN0VGMEU0QkM0NTY4ODYKKzoxMDI4RjAwMDBGRjk5NTdGQkYxRENBN0VGNUU5N0ZDNUE3RjJBMzZGQ0IKKzoxMDI5MDAwMDgyQkU5RTFDMTMyREZCRTc3RUU1RTc3N0MyRjdDQTgxRTYKKzoxMDI5MTAwMDUwNTUyQUVENjdDQTkxRkVBRTJCRThCMzNEQjQ1NjA0N0MKKzoxMDI5MjAwMDEyNEY0REZGMjNFRTZCRUMxN0Q0QUY3NzQzNUNFRDQ2QUYKKzoxMDI5MzAwMDI3RDJBQjdFNTQ2RjA2NzY3NDk0NTlGMzIwMzMwRjQ3MzkKKzoxMDI5NDAwMDIwNkQ4MThDM0Q0OEYxNEUwMEVGQkEwQ0ZEQkVFN0M4MEEKKzoxMDI5NTAwMDQ3M0EwQkZBQjNBQUZDQjRGQ0M0NjNDNzdFN0EwNUZEMDAKKzoxMDI5NjAwMDdFNjBFQjFBOTQ4QkFFODc2NUI0QzcyNkZGQzc1QUYyMTgKKzoxMDI5NzAwMDBEOTM5QzcwM0QyNjI3Q0QyQjdEQ0ZFMTYyN0NGNEYwM0EKKzoxMDI5ODAwMEUyRUUyOTFBMjM0RkUwQkYyOThGNTcyOTI4MjcwRTVCMzMKKzoxMDI5OTAwMEYzMUM4QzdERTExRTEyNzlDRjgxRjRDQ0VDMTM1OTY1QzgKKzoxMDI5QTAwMEZCQzhCMEU3MDVGQjg5NjRCQkM4RjgyNDFDRjE5OEYzQTkKKzoxMDI5QjAwMDlGOEIxRTEyQzNDOUUyRENBNzFDMzJDRUFCMkQ1NjU1MkQKKzoxMDI5QzAwMDA0RUIyMDlGQjkwM0Y3Qzk0OEI3NzU3QzYzM0MzQUZFMTYKKzoxMDI5RDAwMDI5QjM3QzkzNTUwNjU3MUVBODdFQkE5RTdEQ0VERjY0MzAKKzoxMDI5RTAwMDAxRkNBNzFBMEMzRDE1NDczRDc1QjA0NDhDOEZBN0YwMkMKKzoxMDI5RjAwMDNERjBBMDE4ODNBNENDMDNENTRDNkY2RDkyNTlCRUUwNzYKKzoxMDJBMDAwMDI2NUU3RUVDMzQ4OTA5RjkwOTNFOUFDQ0Y5RURCMTg3NEUKKzoxMDJBMTAwMDQ1NjZDRkM1MDhFQTM5NzJGQTBDREExNzVFRkUzREJEOEQKKzoxMDJBMjAwMEU0MzUwNUY3MjdBMkJBQjc2MjI2NjYwNUYyMUYxM0JEODMKKzoxMDJBMzAwMDUwMUM1RDE0RjU1OEU0QUNEODk4NkU1OUZGM0M2QUIxNEYKKzoxMDJBNDAwMDU4RjNBOTBCMTJGNTI1OTBFMzQ3MTRBMERGOTNENDZGMzgKKzoxMDJBNTAwMDA1RkE5REM3Rjc4OUFBOEMzQzRDRTlGNDc0OThGRjc2NzcKKzoxMDJBNjAwMDQzQ0YxQTc5MzNCNjNDRTlDNzFCOTY3OTIwNUVGOEEyQUEKKzoxMDJBNzAwMDQxM0ZGNTBEM0FGQTNGQUEwQkM3MzNGNjA5OEI2RTBCQUYKKzoxMDJBODAwMDQ3NDE3RjNBNzJBREY5RDMxNUI2RkNFODc5QjZGMkY5NTEKKzoxMDJBOTAwMEM2NTc0QTlERjYzOEVBQzYyOTQ4MDc5QTFGRTU1NTIxQzgKKzoxMDJBQTAwMEM3RjNFMzE3NTM3NzNFNzU3ODlDNjVBODVGMUU0NzIwRjAKKzoxMDJBQjAwMEREN0U1Q0JGNDI0RTQwRjdERDI1RDU4MzVGRTA3RkEwMjEKKzoxMDJBQzAwMDM0Q0Q5QzVGNzBCOTkzRDlERDA3N0ZFQjIyNjBFN0VGQ0YKKzoxMDJBRDAwMEFBNTIzMDlFNjlFNDc1M0FGOEI4QjU0RTBERUJFRDdBMUUKKzoxMDJBRTAwMEYwMEUwNURBNzcwNjBBREM4MEFGMDM3Mzk2N0IzMEZGQzEKKzoxMDJBRjAwMDgzRTdBNzFBNzJCNzY1Q0VGMjJCNkYwMTc5OTgyOUEyRTYKKzoxMDJCMDAwMEVFNjlDRjZEQzk4NjdERjkwN0FBMTRDQzNGRjVBNzBDRjUKKzoxMDJCMTAwMEY0MUVBMDY1RUY5M0NFRDAyM0Y0RkJBRThBRjgxMjczQjcKKzoxMDJCMjAwMERDRTYwRTI3RDM1RkQ3M0JGOTNFRDA0NjZCRkUwNkU1QzkKKzoxMDJCMzAwMDgzRUI5RDkwMUZFNjZEQzA3RDRCNTFFMTc5QkMzNkZGNjQKKzoxMDJCNDAwMERFQzA4NzdGRkZGNTYyQkU4RjNEMEI3Q0UwOEYzMkZBREYKKzoxMDJCNTAwMDg4NzFGQUQ4QzFGREQzODc0MUZFQkI4MDZFOThGQ0RGMzcKKzoxMDJCNjAwMEM4RkQ1MzdCQkYxM0VCQzNGQjlENjA4N0REQTY5NjQyNzgKKzoxMDJCNzAwMDI4Q0FCRUJFMTNCQUFDRjY0NDdFRDQyQUU3QzZEQkU5NDcKKzoxMDJCODAwMEJFMjFEQjUyM0ZBN0JFQzBGMkREMTdCQUMwNjY5RkM0QUMKKzoxMDJCOTAwMDk5NUUyMzZDN0QzQUREREUwOTIwQjc0QkE5REU2NTc2QjAKKzoxMDJCQTAwMDg2MkE4NkNERkIyQTM2QkQ1RUVGRDA5QjlDRTc2MURGOEYKKzoxMDJCQjAwMEY4NTNDMjBEQjAzRTc2N0I3QTAzNUY5RkFGQ0FGQTNBRjQKKzoxMDJCQzAwMEU3MENGNERGMzZDMDkzREFDNzNDNUZERDZBN0YwQzgzMjUKKzoxMDJCRDAwMDkzNTAzOEE3OEUwQUU3ODNFNzAzRTdEOUY2RDlFQ0ZCRDEKKzoxMDJCRTAwMDZCREY5NEMyNUI1RkExQ0ZGMjU0OTYwRkQ5RUU2M0ZFMDgKKzoxMDJCRjAwMDdDM0JDNDUxNjlGOUM3OUMwRTlGNzY0QUQ4RkY1RTNFNjQKKzoxMDJDMDAwMERGRjIxNDVBM0YwOTdGMUJGMUQ1RTcyMUYxMDZFQThENjcKKzoxMDJDMTAwMDREOUU2NzA5MTYxMDdFQ0Y0OUZFRkQ3OTI3REJDRjJFMkEKKzoxMDJDMjAwMDFGM0ZGQTM4RkI2MDFDRkFEQ0U4RDA3RkU0MzRDNUYxQzIKKzoxMDJDMzAwMERBOUNGQTdGOUFDQjcxMjdEQjdGMUU1QTE3OUU0NzY5NzEKKzoxMDJDNDAwMEQ4NjM3NzM4RjQzRTczRkRDNEQzMkEzNzhEN0Q5MDRDMUEKKzoxMDJDNTAwMEJFOUUzRUMyRjhFRkM1MjVDQkQ2NERBNEZDRUNDQ0Y1MEMKKzoxMDJDNjAwMEEyRkQ5M0I5QTQ2REI1RTg4N0ZDQTM3RTE1RkM4MTRDNDkKKzoxMDJDNzAwMEJFOEY0RjE2MzMzOTZBRUNBQkE3RDc1OEU1QUFGREJDMTcKKzoxMDJDODAwMDk1OEJFN0M1QkJFQ0U3NkNCODdDQjVEM0UzNDhGMkY1QjAKKzoxMDJDOTAwMDc3NEVFQkJFQzY1MEZDN0EwNEJBQjJDN0FGMUJFMTU3MDEKKzoxMDJDQTAwMDY2Njc3MjNCMzg5Q0JBNjhFQUM4RjRGODcyRDNFMEE2NEIKKzoxMDJDQjAwMDgzMTMxM0U1NTdFMEZDNEM1MjNBNjBGQjg5RkVGRDdGMUQKKzoxMDJDQzAwMEFDNTk1QzA2RkI3NjJDOUVENkRGMTQyRjdGNjc2MjQyRTAKKzoxMDJDRDAwMDdFODVFN0E2QkQwODcxQ0Y3MDU1MUFDQTlCREFFMEE3QkEKKzoxMDJDRTAwMDlCMEU1MjdGQkM0RUVGMkI3RkM3MzRDRjdFOTU0MjNCNkQKKzoxMDJDRjAwMDYxMTQzRUQxMUQ5RjlCRjlFQjQ5ODFEMTRGM0IxRkVGRTIKKzoxMDJEMDAwMDdFOEU0RkJCMURERDI5NDY1REQwRUYyNzY0NDAxNzkyQjQKKzoxMDJEMTAwMEY4QjVFNjc5QjcyMURFMDZCQzQwNjcyM0NEM0JFNDYyMTcKKzoxMDJEMjAwMDdDRTU5RkREMTA4MjM4OURFQjhDODQ3Q0UwMUE2RkQ4QTcKKzoxMDJEMzAwMDJEMjFCNDVCQTZCQkQyRDhCOTBGNkYwMUVFRTM1MTNGOTIKKzoxMDJENDAwMDdEQjAwRkQ2QzFDQkYyRkIwREZERjhCMTExNEZFNTdBODYKKzoxMDJENTAwMEVGRjYzNDU2REVEMEM0RTJDN0FFMDMxN0JGQTlEMTc2NzIKKzoxMDJENjAwMEJFQzMwRUUyQTZFRkQ3NTFCOTBFNzFDMDJFNkFDN0MzMUIKKzoxMDJENzAwMDc3N0ZEOTAwODEzODdBMkJBRDFGMzFGOUREQURBMTRBQkIKKzoxMDJEODAwMDE1RUM4NEI2RTI1MjQ1QTNERkE1QTk2NTU4OTZGMzRCMkUKKzoxMDJEOTAwMEQ1NEEzQUU2MDVBRTZGQ0ZDRjg0Mzg3OEExODg3OUI1QTkKKzoxMDJEQTAwMEM1QjREQzRDNERCQTU0OTc4QUYzN0JCOUU4MUQyRkQ4RDMKKzoxMDJEQjAwMDY3QTlFMDlDQ0Y0OEFDQTdBMzJDQTI0QjE0MUU0NzUwOTgKKzoxMDJEQzAwMEFEODQ1QzhDMjFCRENERTk4Q0JFN0YwNEUyMjU0RjBBMjkKKzoxMDJERDAwMDkxOTkyRTNBRkY5N0Y5RjlBQjRFNjc0M0QxMUFGMDdCRTAKKzoxMDJERTAwMEU0QTgwQkUyMDc4RDBBREI4NzAwN0E2ODlCOUU4MDdCNTQKKzoxMDJERjAwMDFFQzdBRjkzOEYzQkU0MDdGMUY1RkM0NDFFODg0MjZBN0YKKzoxMDJFMDAwMDZCQTc0OEVBOTNBRENGMTUyRTI2RTdEQTU0NUQxRDk1RTIKKzoxMDJFMTAwMDlFNTRGOTczNEJGRUY0NUNDNjRGQ0UwMEE1QTcyNEYxNzcKKzoxMDJFMjAwMDQ3QkJCQzI2QUU3MDlEMkIzMzkxQUY0NDE3NTY0NTNFMzEKKzoxMDJFMzAwMDI1Q0NERTMzQ0VGN0JDRTNENEFGNzVEMTc5N0NDQkNCRDgKKzoxMDJFNDAwMEU1NTg2RTNBRDIyOTdENUZFOUY5NDI3MjlGQzU2N0Y2NkYKKzoxMDJFNTAwMENGMkQ3QkI1MEFGQzkyN0UwN0M2OEJGQzEzQzhCRjg0QkUKKzoxMDJFNjAwMDRERjJGNjkwMEI4MzZFRjRDOUVDQTRGNTk0M0U2MjkzOTgKKzoxMDJFNzAwMDU5NUM4MjAwRERBNDUwNDUwQ0ZCOTA3OTYyRUM5MTdDOUEKKzoxMDJFODAwMDgwQjdBNzdBMDJFREFGNTM5RTQ4MkRGMzQ0M0YxNTc5RTIKKzoxMDJFOTAwMENDRkVERjU0RTlBOTM3RkIwMUVGQTVCMEZEOTdCNURFMDUKKzoxMDJFQTAwMDhBNjcwMTBGQzVERTU4MjVCQUNGOTA5RDM5ODY5RDlGNTAKKzoxMDJFQjAwMDAyM0FCRTUwMjUwMzgyMDg3MjMwNEM5OERFMEMyOTRDMzEKKzoxMDJFQzAwMEJGNTZBOTcwNUU0QTIwMTE3MjI2NjUzNEZENjgzRDU3RDEKKzoxMDJFRDAwMEY1OTQxQzZCRjEwMDNFMDIyQ0RFRTVEQjJBNjAzMkEwOEIKKzoxMDJFRTAwMEQ0QUJDNzNEQjQ0RUE5Nzc1MTlCOEJFOThCMjIxOEE3NzEKKzoxMDJFRjAwMDZGQTY4Nzc4NjlGRDRGRkI5QzY4MUZGNkZBNzI2NEMwNjUKKzoxMDJGMDAwMEVCM0U3MUQ5NzcyMEZFMzRGODJCMTdFNjM3RjZGRUU1NTUKKzoxMDJGMTAwMDAyQ0NCRkVGRjU1REIyMDBFNDc2QUY0MDBFNTE2NTRGRDUKKzoxMDJGMjAwMDJBNEVFNUYwNjQ0MzkyMDJGQjdDRkVGOTNBODE3RDhFRTUKKzoxMDJGMzAwMEMxMTc0OTA4RjI4MzFEQzE5Rjk3QkYzMzFEMjc5RTIyRTkKKzoxMDJGNDAwMENFQTZFRERDQTRDQjREREI4NTNFRjc3QzNDOEZEMkQ1MDUKKzoxMDJGNTAwMEIzREVEMjJEMTc5MTQ0NUNDNTg4QTc1NEE0NDRCNjAzQjAKKzoxMDJGNjAwMDlDRUQ2MzdFNUQwRjdDRDM0NUUxOTREMDdFRDU4MzAwREMKKzoxMDJGNzAwMDc3NjlBNjg4RjE0NzkyRTk4RDREODQ3OEQ5QTE0MDE1RUIKKzoxMDJGODAwMEU0OEY1NkM4MjU5ODFBRUI5RkNGRDZGQkE4MjdGMjM4QjYKKzoxMDJGOTAwMEY0NTNBNUQ2NTU0MTdDQkRFQzg4ODY3Mjc2NDE3MEY1MTgKKzoxMDJGQTAwMDQxMjhDRjdDOEI5NURCOUQ4QzVGMjA1RTQ0NEM3MkI3QjMKKzoxMDJGQjAwMEUyRDQzODlDNUYyRkE3OTNCNkEwREVBRjBCQTNGMjhEQUYKKzoxMDJGQzAwMEVEREM4MTM1NUZDRTRDMDc5MEU3NkVBMjgzODhDMzRDNjEKKzoxMDJGRDAwMDA3QjMyOTFENEMzNUQzODEyRTlDMEYxRERDOEJDQUZBRkIKKzoxMDJGRTAwMDhCRjA4RkZFNjY5NTkwODhEQjBERTc4M0Q1NEE3QUYxRUEKKzoxMDJGRjAwMDcwN0UzMUUwNTg1Rjk2MUUwMDM5NkFGMDg1M0FFQjFFMEMKKzoxMDMwMDAwMDk0QUJBRTFCOUQ2MUYwRDcwRDNFMzFGOEUzNTNCNzAzOEYKKzoxMDMwMTAwMEY5OTBGMkM5NTUxRUZBNUNFQ0Q1MkU0QkM2MjdFMDg3MTUKKzoxMDMwMjAwMDk4RjlFMTlBMTFGOEE2OTYwQzFFMENEMDQ2QjUzMjg5OTMKKzoxMDMwMzAwMEE2NTI1MUYyRjJDNUVGMTU4RTMzRjE4MTFENkZCNTczQjMKKzoxMDMwNDAwMDA1NzJDQzIyQ0Y1OEQ5ODQ1Nzc1RTg3Q0EzNzRFRUY4NkEKKzoxMDMwNTAwMDdGNERENkRBMDMyNjNFRUNBMDdFMDgxOENCNUQ2Mjg4NTEKKzoxMDMwNjAwMDgwNUUyOUY1MkVGQjE0RTg1MkFFRjk3RTEwRkM0MTg3RjQKKzoxMDMwNzAwMDJCNUM4Rjc5QjNCMzNFNDhCOTk5RDJFNUE3NjM0NDBENzEKKzoxMDMwODAwMDI2REZBRTJEN0IwNkY5Rjk2ODBBMDFGQjY0RDNDQ0U1OTcKKzoxMDMwOTAwMDE4RjdGREY0OTZDODc4RDAxM0VCMjhGRThGQTE1RThFNEEKKzoxMDMwQTAwMDhEMTUzMTA3NzM2MDJDREI2RkQ3ODJFQzE5MDlCMkY3RUQKKzoxMDMwQjAwMDg0N0Y4RkYxQjJDRUVCMEQ2MDNEQkFDRTE2RjlCOERFNEIKKzoxMDMwQzAwMENERjZCQkQ2QkI5OUJFNTlFN0VDNTY4MERGMDZGMzE1QUIKKzoxMDMwRDAwMEQ1OUNFRjNDNEY2Mjc2NkM4OUMyRjc5RjRFQjc2QTEwNjEKKzoxMDMwRTAwMDFGMjk1MTk4OUVEOUQyRDQ4QkY2QzdCQUE2QkRGOENDNjkKKzoxMDMwRjAwMEE4ODkxMUM4QTdGMjE0NDUzNUQ4Rjc1NkZFM0E1RjcwNzMKKzoxMDMxMDAwMDAwMUY1RkMwRjY2N0UxN0RCM0M5RkVDQTUxMTgxQ0NBMzMKKzoxMDMxMTAwMDVGQTUwOEYwQTdEMjEyRDVEMjRENzI1NjExODU0ODMyNUMKKzoxMDMxMjAwMDNCN0FBMzlCQzU1Rjk0MTY4MkRGOTVGRDBGRTE3RTc2MDcKKzoxMDMxMzAwMDQ2NjE0OEI4MDlDQTJEREQyNDA0RjFGMzM4N0IxRjI4MDUKKzoxMDMxNDAwMEQ0ODVBRjlCRkEwREQ0RjQ1QUY0NUMyRDVEODJENDUyMzEKKzoxMDMxNTAwMEI0OUVGMEJDNEJCQkU2QzFGREFGREE0MEU1MUZFNTY5QUMKKzoxMDMxNjAwMEMzRTkwODdFOEU5OUU4QzE4MERGRDg4NzVEQ0JGREVGOEIKKzoxMDMxNzAwMEFBMDIwNUY5QUZCREQxRDkwM0FBRjkyQTg1RDk0NTlGN0QKKzoxMDMxODAwMDA0MkE0NzNEMkYwMEZCQUZENDcyNDMzRjE3OUVCMDBGNzgKKzoxMDMxOTAwMDFCOURDQ0Y2NjFBMTBDRkJCMEYwODQ3RDU4NzhDMjNFM0IKKzoxMDMxQTAwMDJDN0M4NzdENTgyODdGQUY0OUM3MzJFQ0M3NDIxOUY2N0YKKzoxMDMxQjAwMDYzQTM5M0Q5RkUyQjk0NjFGRjE1OUU3QjlCRUFGMUY5RTMKKzoxMDMxQzAwMEUzQTYwNkZDRkU3QzUzMjM5NkU3Qjk5ODdGNDM4QUEyQzgKKzoxMDMxRDAwMDQxQjA5N0JCRUU3NEVBOTA2N0QzQzJEN0VCODA1RTkwQTQKKzoxMDMxRTAwMDExQTJFQkVBMEVCMDM4ODFGQkYwMDM3OERFRDkxRDE0OTIKKzoxMDMxRjAwMDMxNkVENzExN0M4MDdDOEQzRUJCNjZGOEJBMjBFRUExODMKKzoxMDMyMDAwMDNDRTNDNUE3NUJERTQyQzAxRURCMjE0NEVCNDk4ODkwNEUKKzoxMDMyMTAwMDVCQkE0QUFBNjQ2QTI3MTQwNjU3NTdBNkQzRjJBQUFFMjUKKzoxMDMyMjAwMDU5NkQ5MDc3Mzg0OTZCMEUyRDUzMTM2NUNENTdCQUZDMDUKKzoxMDMyMzAwMEZCQTZGMkY4RTIxRUQ5MTMwMjNDQ0Y2OTAzNzkwMDcwQjUKKzoxMDMyNDAwMEMwQTZEOUJENUQ3M0FCOUEwQkE5REY1NDQwMEQxNTkwOTQKKzoxMDMyNTAwMDZCRjlDRTE4RDBGM0Q3NjFCRDI2MDJGQ0NDQkVCQjhBNzkKKzoxMDMyNjAwMEI0MDYyMUFFMzE1RTczOTYwMjFGRDJGQTcxNDZGRkU3QjMKKzoxMDMyNzAwMDU2QkY0NUQxRjBCREJEREQ2OEY1QzRCMjczQUE0N0E0MDEKKzoxMDMyODAwMDUxRkE4M0VGQzIyOEZEQjQ5MzU2QjU5RkMyQkUwMTY0QzQKKzoxMDMyOTAwMDA2RDg0NzZFQjZDRkRCRTU2MEZDREZFNTY2Q0ZCN0RENkQKKzoxMDMyQTAwMDhDN0Y3RkU4QUVBQzc0RDM2N0E1OUJGMTc3OTczQjVDQ0UKKzoxMDMyQjAwMDBERTc0RDA2QTc4QTE4REZFOTc1RDAyRUUwRjA0MTYzQ0YKKzoxMDMyQzAwMEZFRUI3MDJFRTg4RTlGQzkwNEY2MEYxRUUyNzQzMDcxN0IKKzoxMDMyRDAwMEJDOEZFOUU5QkIxNUQ0RDM5NzhGRkY2RTVCM0EyRDRGQjYKKzoxMDMyRTAwMDdDMzQxNDAyQkRCQjgxODQzQzQwMjdEMThEMjJFNkExRjEKKzoxMDMyRjAwMDNDNUQzNjIxQkQ4RTU2QkY3MEM2NzNFOUEwN0YzRTU1M0EKKzoxMDMzMDAwMDk4RkM4OTcxN0ZBM0I5RkRFNkYxMTA5N0ZBRjQ1NTI2NzAKKzoxMDMzMTAwMEZGNzY3MkI5RDNFM0U4NkZDMEY1OUNFMTQ1N0I4NTNBNEYKKzoxMDMzMjAwMDBDNjg4RjM0MDc2NUNDMUYxMkIzRDhEM0U5NTBGRjA5NUUKKzoxMDMzMzAwMEVBMzlBOUMyOEY1Mjc4OUM3Rjk5QTU2MEZDRTM5NDhCRUYKKzoxMDMzNDAwMERGNkZEMThGNzY4QUQzMUQ1MUQzRThGQkVFQTg4OEZDQkUKKzoxMDMzNTAwMERFQUE3QTYyNjA1NzZGRjA5NkUyQjlEMjY4QjE4Q0U3NjQKKzoxMDMzNjAwMDRCMzYxNEIzRjg2OThBRUZCQTE4RDgyN0Y3RjdCOTk5MkEKKzoxMDMzNzAwMDdDRjAyQTk4M0YxQTJCREU3M0E4MzIwMDRGNTEwNTdFNEQKKzoxMDMzODAwMDhGRTk4QkFBMTFFRkFBQTg2MjFFMkFGRDBEQkZENzA3RUQKKzoxMDMzOTAwMEYwM0NDQTA2QzJEN0E1NUVDNEYzNzRFRDYzM0VGRkY5RTQKKzoxMDMzQTAwMDQ1OTA5NzczOTMxQUUyNzcwRTYwOUUzNzlBNUMyMkVDRjEKKzoxMDMzQjAwMDA3MERFRTRGMDE3OEJFNkFEQzU3MzBEMDkyNDJFQkI3NzIKKzoxMDMzQzAwMDJENTM0M0IwMEVEM0Q0Q0E2QUM4MjM2ODU3MkJEMUNGMkMKKzoxMDMzRDAwMDQ5OTk1QUE1REM4ODcyNjhFODNDMDZERThCRDE1NjJDRTgKKzoxMDMzRTAwMDYzMUUxMTdDMDdCRTI0NkRFNDIwOUM4N0NGRTFCMjJDQzQKKzoxMDMzRjAwMDI1QUQ1NDAwRkJBQUJEMDZDMzdDNzA1RUMxOTI1N0RFQUEKKzoxMDM0MDAwMDk2N0UyNTlFNDM5MjZBRDMxMUNFNzZBMjJCNTAzRjVBQzgKKzoxMDM0MTAwMDIzQTNGRUNCRjEyQTcxQjAzNzcyOEM3ODJFMUNCMTMwMDkKKzoxMDM0MjAwMEM1MUIzMjZFQjM5RUQzQzhBQTk3MkRFN0MyQzc0NkFDNjAKKzoxMDM0MzAwMEU1NEMxRTNGQzhCNDlERTdGODU4MzFGNkM3QUM3OEIyRUEKKzoxMDM0NDAwMENGMzcyM0YwNDgxQUMwOUIwMTA3NzlCNUUxRjNEOTEyQjEKKzoxMDM0NTAwMDI4QUQ4Mzc5RTZBODFFODQzQkE4QjY1NDgwRkMxQTRCOUQKKzoxMDM0NjAwMDFBOUE4MUVFQ0UxQjVFMUI5Q0QzOEFEQkZBNjFEREE3MjQKKzoxMDM0NzAwMDY5MzJEMUU4RjgxNzkxQzExNkU4NzcwM0E3RjNBRTdDNUIKKzoxMDM0ODAwMEFCM0U3RTQ4OTEwQzdFQkMxMEY4NzE3Q0EzNDhBMkE2OEUKKzoxMDM0OTAwMEYxMjEwRTE5MzU4RDM3QTEyQkRENTI5RUQ4OUQ2REE5RDYKKzoxMDM0QTAwMDNGNzk2QjgxRTVGQjk0RDgwNTk2RUYxN0VFMkNCNTk0MjgKKzoxMDM0QjAwMEE3RjZDRUIxRDRCRjY4NkZBNUE1NUMxMkJGRDI1MjdGNkMKKzoxMDM0QzAwMEZBQTE0NTk2RjI4Q0ZFN0ZCMkQ0OUY3NTc0OTlFNUZCMDQKKzoxMDM0RDAwMEM1MDNDQjJEREYyRjc5NkY4REE1N0NFOUUwNUQ5NkZBRDIKKzoxMDM0RTAwMDg2QkQ2RUQ3OEIxM0I5REQ3MkJFNzZCQTBCRUU4OUIwOEUKKzoxMDM0RjAwMEM0NjVBRDdFODBERDhFNTdGRURBQUFCNTgwNUNGMzNCRjUKKzoxMDM1MDAwMDkxQkU2NUQwRTNCNEJDRTY0RUU2NDcyOUU1MjEwREU0NjMKKzoxMDM1MTAwMDRBMEU5N0EzRDkzRUJERDQwREZCQTk3RTA1RjU4MUVDREIKKzoxMDM1MjAwMDY1RjU2NEVGMDJCNDNGQzY2REE1RjI2ODNBNTg5QjY0MzYKKzoxMDM1MzAwMEU4N0IwQUM4RTVBNjY4NzlBMTI5REVFNDU2QkJGMTZDRjAKKzoxMDM1NDAwMDU2ODVCRjFBRjczNzhDRjZCMkFBOTM4ODBGQzZEM0Q4MjAKKzoxMDM1NTAwMEY5NkFFQUE1NDIzREI3NDZEQjlCRTZCNTRGMTRGMTA4OTAKKzoxMDM1NjAwMEY0MjBGNUY3MUUzMUY5N0IyM0Y5Nzc3NjdGRUU1Q0ZEQzkKKzoxMDM1NzAwMEI3NzEyMkYxRTBCOTAyMjFEQzAwQ0ZFMjg2NTcyQjIxOUUKKzoxMDM1ODAwMDFEOThGQTc1RDcwMUZENkU3Mjg2RUI3QjY4QkY5QjBBQUEKKzoxMDM1OTAwMDNDNkMxRjk0RkI3NTVERjlCREM4MTc4M0Y5MzJFQTE3QkYKKzoxMDM1QTAwMDIyNkJDNUU2Nzg1QzMzRDc0MzI5Q0FEM0U4NTc1MkJDQUYKKzoxMDM1QjAwMEEzQkMzNUYwQkU0MTE4ODhCNTgyRENCOUQzODNGMjcwNjQKKzoxMDM1QzAwMERDN0ZCQjVFMDNGRTUyMEE5NDFDODVCRTBGMUQ3MEVBQjEKKzoxMDM1RDAwMEIwQkZCNDg1RTNCNTQwMkRBOTg0OTA1MjYxQjA2RTNGNzEKKzoxMDM1RTAwMDNDMjc2OUQ0Q0VBMENGQTJBMkNERkJFMTc5QkI5QkU1NUQKKzoxMDM1RjAwMDAzNUYxMEZBN0UyNUM4MTJBNTlDRDk3RkYyMzQ2N0FDMTAKKzoxMDM2MDAwMDg1RjYyM0E5MTQ4RTI0N0U4NUYxOTRGQzVCRDlGRTQ1QjIKKzoxMDM2MTAwMEExRkMyRUQwMUI1OEY1NjdFODE0MkFEMjE1Q0NGNzcwMDAKKzoxMDM2MjAwMDAzMUQwOEY4NDRGQTcxMDdCQ0E4MzdEQzcwQjgxNUNBNDYKKzoxMDM2MzAwMEIyMTA4M0ZEM0ZCMDRGNjExRkFFMjI3RDJCQUVCQjYxNDgKKzoxMDM2NDAwMEI3ODIzRDFCNjE3RTZFMzNEMDU3QTBDNkJBREUyOUNBNTEKKzoxMDM2NTAwMEY3MTA0RjZEMDI4QjdCNzdBNTY5ODcyQkU5Qjg1RDk5RDEKKzoxMDM2NjAwMDA1RTkxMDYzODVCODQ4OUQ0OURFQUNFN0ZBRjQ5RjNENTMKKzoxMDM2NzAwMDIyQ0Y3MzYzRjJFNkNGRDBFNzhDODRCRDQzRTk3RkFCMDIKKzoxMDM2ODAwMDM4MDFFMEVCMjYyMEI3RENGNzc0MTNBMDc3Qjc0QTU3NzAKKzoxMDM2OTAwMDEzRURGQUE4MTY0NjdEQ0FFQ0REREIzOTRDNTUwNTRCMTcKKzoxMDM2QTAwMDcwN0ZGRkUzNDAyOURBQjdFRUM2N0Q0OUYxRTcxRTkwNEYKKzoxMDM2QjAwMDg4M0U3RDY0QkNGQTI3NkQ0MzdENEYwQTlDMUFEODE1NUQKKzoxMDM2QzAwMDhEOUE1M0VGNDkyMjBGQTY3MDNGNjRERDM4RTMzQzJCRkYKKzoxMDM2RDAwMENCRUZFOUUyRjgzMEUyQTE0MzcxNDYxRTRGMzNFMjhDQjIKKzoxMDM2RTAwMDQ2M0ZCNzY3OTY4RTFEQ0QxRTc3NTNGRjMyNjI4Mjc3QjUKKzoxMDM2RjAwMDFEMUQwN0YwRDI3RUJBQUUxQUYxMjAxMzc2MUVGNzJGRTkKKzoxMDM3MDAwMEM1M0RFQjcxOUY5NUY5NDk1MzM4QkU0QjM4N0VDNzM5OUIKKzoxMDM3MTAwMDA5RkEwOUYzMjE2RTkyMDE1RUVENTVENUMwOTc0NjlDREEKKzoxMDM3MjAwMEU1Mzc2MDZDRDE3QUExMjg5MTU4NUNDRDYxRTgyREYxMjQKKzoxMDM3MzAwMENDNDUwOEIzRTYzNEYyQzNEMEU0NjU3QThERkVEQjA3RUUKKzoxMDM3NDAwMEU3QzYyNjc0NTlDRjY1NEVFQ0I2OTYyNzZGQjU5NkE3OTcKKzoxMDM3NTAwMEM0QUM2NTZBMzUxRjAxQkIwMDZDMzQ4QzVCRUNCNDdFNzUKKzoxMDM3NjAwMEFGMzNGNjAzQUFEODM5MzI4NThFN0M4NkU5NUZDQkJEQUMKKzoxMDM3NzAwMDM4ODRFQjdGMjM4RjJEQUYzNzVFMDFFMjM1NzdBRDU1NkYKKzoxMDM3ODAwMEFGNjY3MzNEOUY2REQzOUZBNTNFMDlFMzA5MTU4NzAyODAKKzoxMDM3OTAwMDA3QzE3RTM0RTIzRTQ3M0Q5QTI1OUZDQzg4REZEOEU1QkQKKzoxMDM3QTAwMEI5RTdBRENEODQ3RTQxQkYzQ0UyNjI3MTBDODgwRjdGRUEKKzoxMDM3QjAwMDk2QzdFMzI1QjkzQzVFMzI4RUM3NEJGMjU4QkNDNDIxOTQKKzoxMDM3QzAwMDY5QUYyQzE1MzBGRkYzQjgxQjhEOTc4NjhCNTg5Qzg2RkMKKzoxMDM3RDAwMDlERTdGQUE4NUE3RTUxRDBEODc4MTFEMzc4REYyQzhBODkKKzoxMDM3RTAwMDVFQ0VEMDEwQ0I4MjdBNDZEQ0M0ODgwQkI4N0Q3QTI1QjkKKzoxMDM3RjAwMEYwRUY4NkQwNkIwRDA3Mjg5RDU0RkVDQTQ1QTA5RkNCRTUKKzoxMDM4MDAwMEE0QzM4NzlBNDBCRUU1Qzk5OEI3QURDRUJBRUQzQjFFQkEKKzoxMDM4MTAwMDg4NDNDMjc3NUFBRUNDRDdDNjIyMUZGQ0Q0ODFGMTgxMkYKKzoxMDM4MjAwMDRFNEVEN0M2Mzk0NDIzQ0U5MkUyNjE3NjkxQ0I2M0Q4MEYKKzoxMDM4MzAwMDQ3NTEwRkNGQ0JGNzgwQkQ3QkUxNEUyQUEzMkRGQThFRTcKKzoxMDM4NDAwMEM1RjM4Q0I4RERENDVFRUJGNzVFMjI2NEE4QjBFRkJGQTEKKzoxMDM4NTAwMDI0MjYzMkZCNEFGNzU2OThGMjFBMkZFMEVCMzY2RDY5QjAKKzoxMDM4NjAwMEZDODFBNUI0QkM5QkM0NEFFMUJFQjkxMjRFMUZBMTgzMjIKKzoxMDM4NzAwMEQ2RjNBRjYzODg4MEU3OUZDNjFDOTE0MjMxNUE3RkRBNDYKKzoxMDM4ODAwMEYzRDZFRkM1QjZGM0IxMTdEOENGQ0JEQUY2ODU3QzEyRjUKKzoxMDM4OTAwMDM5NzEyMzFENkZBM0Q2MjA4MDFDRERCODk0REFGMkI0RjEKKzoxMDM4QTAwMDVDRThFMUZCNDU5M0M4MjRBMEMzQ0IyNDZGMjgwRUY4NDUKKzoxMDM4QjAwMDdENDNDMkZEMkREN0RCOTNERkJDMTFGNEZBQUIyQ0VGQjcKKzoxMDM4QzAwMDQ4OURBMDZEODYzOEIyRkE3MzA5RjU5NDlBNDI0QTRBMjcKKzoxMDM4RDAwMEJDODk3REE0N0YzQjEzMjJCMDJGNjJDNEI1OUVBMkVCQUUKKzoxMDM4RTAwMDBBN0E2NTM3RjVDQjBCMURFMDY3QUI1OEVFQTU3RTM5M0MKKzoxMDM4RjAwMDk0OUZBNTdFMzkzQ0Y3NTBCRjFDREVGRjkwRkFFNTUwM0YKKzoxMDM5MDAwMERFNEJGRDcyNzhGRTk4RkFFNUYwRkU3OUVBOTc0Mzc5OEUKKzoxMDM5MTAwMEFEQjdBMjEyRTI2MkZEQjQzRUQwOEJBNzY0OEYzMjgxQjQKKzoxMDM5MjAwMEMyREJBOTM4NTRBMDBGQkIxQ0FBQThCODVENTk0QzQ5RUEKKzoxMDM5MzAwMEVBMkI5RDRGRTNGRTQ1RTU2NTJDNEZCQTcyRkREM0I4RTcKKzoxMDM5NDAwMDdGNjE4RUFGOTlFMzhGODlGOERBODA2MEM0RDcyMEU0NzUKKzoxMDM5NTAwMEY5M0JCRUNGMzAxNDY3OEJCMDM4REJEOUZCRDE4RDdFRkQKKzoxMDM5NjAwMDMwQUUzOUFDMUYxRURGRkNGMENFNUYzRkQxNEEzRkFEMTkKKzoxMDM5NzAwMDk4RjE0MDk3QTcwMENFNkQzNEYwNzg5RTkxMTdBMzU5MjcKKzoxMDM5ODAwMEYyRUU1N0VDNjlDNkJDMTg2N0Q2OTEwNjU4RDczRDY1NkMKKzoxMDM5OTAwMDVFQ0MxNzcxM0EyMjJBQzg1QkJCM0Y2N0Y4NzE3NjdCMTEKKzoxMDM5QTAwMERBNzhEQUY1OUI4RkRCMTU0NkRDNzQ5MzgzNjA5RTc0QkUKKzoxMDM5QjAwMDU0QTBGNjA0RDgxNzREQjFGMjc3MUMyM0M3NTM1RkY3MTQKKzoxMDM5QzAwMEYwRjM0MzM2QjkzMDc0M0U4MEM3N0Q1QzYwQ0REMjc5NjgKKzoxMDM5RDAwMDNBMDU4RTBGOUVCNzhFQTJCMTgwQzVGNUNDNzE1NTRGQkEKKzoxMDM5RTAwMDYxMEMwRkE1N0JCQzNBREE3NTAyQjVGN0QwRkU1MzIzMDQKKzoxMDM5RjAwMDQxODhBMzc1QzA3OTgwMjRGMzhCNzk5OEZFNkJDRTcyRDEKKzoxMDNBMDAwMEEyQkREMTkxQzVGMjQwQUE3MjQzNDE2OERGOUEzNTMzMTUKKzoxMDNBMTAwMDY4M0UxRjYwOUM1RjM4RTg5QkE5MEM5OEZBNUJFMzJCMUIKKzoxMDNBMjAwMDE4NTVGRjQ5NTQ1RjZCQTNFODZCQzlDNUNFRUZCNEVFRTAKKzoxMDNBMzAwMEJGNTg4MTczMTk1RERFNjVGREUwNDc3NzA1MDMxODdGODgKKzoxMDNBNDAwMEVGQ0I5QTQ5MDY0Q0ZENEJDMUQ5Nzg3RTQzRjIzMjdCQ0QKKzoxMDNBNTAwMDU4MEEyQTY4MEZDQjMwRkZFMjQ0N0RBM0RFM0QxRTQ2QTQKKzoxMDNBNjAwMDI3OTQ5RDMxQkVFOEY2NzY2MzNEOTcxQ0M2N0IyMzVDQTgKKzoxMDNBNzAwMDAxNTA5OUY0QTlCMkZEMzg0RkExNDgxNDkzQkMzMEM2NDcKKzoxMDNBODAwMEZENTcwRjkzOTc1REM1MTExNUUyMkM1RDQxNTk4MzczNjYKKzoxMDNBOTAwMDIwNUQ1QTI5RTJCOTk1RTNCOTM1Q0ZCMDI3NDI2OEM3MEUKKzoxMDNBQTAwMEVDRTE3ODM2RkE2OUU1NzE4MEQ2N0EyN0RBNzNFMUM2RjcKKzoxMDNBQjAwMDM0QjUyQTAzRjM3NTc3QzFCRTU2OTdCNzQ1ODE3RDQ5NjIKKzoxMDNBQzAwMDY3NTZEOUE4RkRGRTg0Q0JFQjkxRkIyRDE5NTMzNTFEMEMKKzoxMDNBRDAwMEZCREQwM0ZEM0E3RENCNTRFOEQ3MzFDMkI5QTNDMzFDNEIKKzoxMDNBRTAwMENFMkY2QUI3REFGN0YxMjhCNDQxNzMzRThBRkRFOUUzRDUKKzoxMDNBRjAwMEY2QTdCREREOEFFMjAxMjdBQ0ZCQkFDN0FDRTc5NDFEOEYKKzoxMDNCMDAwMDg0OUREQjVBQjk3NzM1RjJGOTI2QjkxRkVEQTg0REE3ODgKKzoxMDNCMTAwMDg1QTRFN0JGMzI1MjA0Q0U2RjQzRkVCREM1MEVDQUUxOTUKKzoxMDNCMjAwMEZDOTRDM0JGMDNBOTgxQkUyODg5NUJFRDk2RTk4N0FDRUQKKzoxMDNCMzAwMEU1MTlGREQ2RjJBQ0EzNzYzQjQ4N0YwM0VDQTBDNTVDNEIKKzoxMDNCNDAwMEVFRjU1Mzc5Q0Y5MjYxMDY2NUMwNDczODFBQUIwMEI4REQKKzoxMDNCNTAwMEVCNDg2RjMzRTQ0OTM4Nzg5QzdDMzFENzdGMEJCOTdFRDIKKzoxMDNCNjAwMDc0QTdCMDc4NkY0RUJEQzdFMjdGMTI3RUNGNUYyRUVGOTUKKzoxMDNCNzAwMDNGQUZFQUUwRUEzNjEwQjI2MUMzQUVEMkQwNkZDREJCNDAKKzoxMDNCODAwMEUyRDkwQTE0OTczNkZCQUE0RUI3OUVFMzVGNjhCMzlGNEIKKzoxMDNCOTAwMEVDNzY1Njg1REM4M0Y5QjhEOUI2Qjg4NkIxOUYwQkYzQkQKKzoxMDNCQTAwMDg0RkIwQ0VDRTM5RkVGQjg0NjdGOTA4NzA1RjJDREI4MUQKKzoxMDNCQjAwMEU3MDVFRjE1QTZFREYzRTRCODEwQTI3OENBNkU2MEU3NEEKKzoxMDNCQzAwMDcwNzJENjEyQkQyNzA5MURDRjQ5NjE3QzMxMEM2RkQxQUYKKzoxMDNCRDAwMDc5ODhCN0Y5RkM1REI2OTdERENGOTU1RDI1QzUzNDNBOTgKKzoxMDNCRTAwMDdFNzY3RDJGREEwMzhCNkVBM0YzNDEzQkZDMENFNkMxOUUKKzoxMDNCRjAwMDE4RjVEM0QzN0FGMTNDRDJCNjFBODFFN0U3MTJCNDZCNDkKKzoxMDNDMDAwMDhDNzVERUU2NjVFNzA3RUIyRTE1NjIyMkI0NkYyOEMwREYKKzoxMDNDMTAwMEYxMTFBRTgyQzRGQTUyM0MxRDYzNzg2MkY5ODZENzU0MjIKKzoxMDNDMjAwMDVCQ0YzOUQ2RDlFQzE3ODMxRTE2REFERUZGRDZDM0Y2ODIKKzoxMDNDMzAwMEM1MEQzRUY4RjBFMkEzOTNDNjUxMzg1NjA4RERENTI5RUMKKzoxMDNDNDAwMDEzQ0U1RDVGOUFGOEMzNzEwNkY4MTA3RTFGQzM1MjVGRjIKKzoxMDNDNTAwMDMwOEY1N0Y5ODE4QUU3M0REMjA2QjYxMzRBOTJCNTI5Q0IKKzoxMDNDNjAwMDI0NUEzNTE3RTRDRkUwODUwMjJENUY5QkYyQkRGNkFFRjYKKzoxMDNDNzAwMDRCRTFGOEY2RTBEMzYwRTRCOTVDM0ZCOEFDM0EyRjUxQzEKKzoxMDNDODAwMEY2Nzg3RTgyRTUwMDFGMDdCNjE2RDk3QTlCRUU3REExRjUKKzoxMDNDOTAwMEE4REJDRUYzRTMzN0U4NjRCMzA0QjlCNUEyQkEzOTk0MkMKKzoxMDNDQTAwMDlGNjg5NzBFRUQ4NDUxREE4NUM5NjYzOTQ5M0JBRkQxREIKKzoxMDNDQjAwMDhFQTJBQjAzRUU3NUUyRjNGMkYwRUYyMjg3QzczQ0JFQjMKKzoxMDNDQzAwMDBDNzg1MzM1MkY5RTYzNUMyMEFCOTA5N0YxNjVFMTE4MUIKKzoxMDNDRDAwMDczQjY3OTQ3Qzg2NkM3ODRFMUVEMjhEOENEMDZGQzYyODMKKzoxMDNDRTAwMDcyRjg2M0YwREQzQ0JFNjMxNEY4RkZENkY4Mzg1QjdGRjIKKzoxMDNDRjAwMDRFRkVGREJDRTFBM0Q1NUJDNjhDM0M1RjgwQ0I4MUY3NUIKKzoxMDNEMDAwMDBENjk1RUQxRDRDRkZEN0Q3RkMyQjhCODdDM0QwOTQxM0QKKzoxMDNEMTAwMEM4NEI3NkU4MkFFQ0U3MTVBQjBGQTI3RjJGQTc1NUE5NzEKKzoxMDNEMjAwMDYwMDdBQ0EzNjVCMDAzRDZGNTc2NjNGQ0JCQjhGMDgxNDEKKzoxMDNEMzAwMDJFMjBGQUUyQjg4NzgwM0M5ODRBRDRCNEREQjRERkE5REIKKzoxMDNENDAwMEFBMEMyN0FCODg3Q0U5NDExMUUyRTlFNDZBODI3OTIzNzUKKzoxMDNENTAwMEE5N0QxRTc2M0Y1MEZFOUM0N0MxREY0QTRCNTM3MDNGMDIKKzoxMDNENjAwMDIzMjU2REU2QTNDQ0U4NjU3MTY2MDNGRTk0OEEyMzk1NEUKKzoxMDNENzAwMDEwN0Y5N0VCNDg0ODAwQjg4NDE4QTkwMDI2OUI0MjcwMzIKKzoxMDNEODAwMDdGQzNBM0VGRjkyNjlDMDMyMDMyRDM0Rjc4NDcwRUU4NzgKKzoxMDNEOTAwMDU1MUU2RjFGQ0I0ODg2NzQzOUQ1M0FDQzVGRjk5OThDODQKKzoxMDNEQTAwMDcxQUNCMTcwMDUxODI1Q0FFMkUyRjRDRDAwNEY3MTg0MDAKKzoxMDNEQjAwMDc2MjAwMEZDMkM1RTM2MzUyMjg2RTJCNEZGRDIxM0FDQUUKKzoxMDNEQzAwMDFERjkwNTNCM0Y0MjdEOTMyNUNGNzkxMzc4MzVFNENBMzEKKzoxMDNERDAwMDU4MUU4NzBGMkVCNUM2QTlDOTIwOUQzMzZENUZGQThCN0IKKzoxMDNERTAwMDQ1OEY0MzlDNjJDQzMwRjlDREZDNzYwRjg3MzNGNTA0QzgKKzoxMDNERjAwMDA5NDNGRjgxMUFBQkRFRjBGMEZDNkQ4RkVERkU5ODhCNkUKKzoxMDNFMDAwMDdDMEVFQkJEQ0Y3NkZGRTFERTMwRUEwMTE3MDkyOTRFQ0IKKzoxMDNFMTAwMEI0MkY5NkEyREQ2MEY4MjVEQkEwMjJEOEUzNzk4NERERkIKKzoxMDNFMjAwMEI3NkI2RjNGOTNCNTI3NDFFNkE3QjgzQzQ0NTE0QUU5QzkKKzoxMDNFMzAwMEY3RTUxRTFERjMwRDVEQjQ0Q0YxMjgzODg5OTI0NURGN0UKKzoxMDNFNDAwMDY3OEIyQ0RFRDIyQzEwMTlDQTg5RjFFMjk4NjdFMDUyRjgKKzoxMDNFNTAwMEFFNkEwM0ZCNjVCRjMyMURFRjQ1MzNGQ0VBNTYzNTg0N0QKKzoxMDNFNjAwMDc5MTBBNEE4RDI2MjM3MUJGOTVFNkI0QTBBQzZDMkY3NjIKKzoxMDNFNzAwMEQ0MzE0MzcxMjcxNUU4NzI0RDY2MjFEQUQxRkU4QzgxNjkKKzoxMDNFODAwMDdGMDYzOUZCNTk4QTZGODEwMjcyMTVGMjMwRTZDMEI1QTAKKzoxMDNFOTAwMEI0QUU4RTI4OTVCQkFFNTMzOTQ0MzNEOTY3MkVCOTAxRTEKKzoxMDNFQTAwMEUzNkNBRTUzRTMyQ0VGRTM0REQ2NzNENEJBNTdBQzgyMzgKKzoxMDNFQjAwMDcxQjJCRDFBM0JCRjQzRDQzNjY4NTc0MUFDRTdBNTVEMkMKKzoxMDNFQzAwMEE3QjIyQ0Y2N0FBMkZGNUNDQkZCMzhCNTZCQ0NGN0ZCMjQKKzoxMDNFRDAwMDhDREM3RjBBRDE4QUNDRkQ0RjE4QTFGRjQ5QjZGRUQ1RjQKKzoxMDNFRTAwMEE0RkQyN0ZBQ0RCMEY0REIyRUIzRjg2QjM0RTA0OTdBQTkKKzoxMDNFRjAwMERGNjRBOUI3NzJCQzc3QzZDOEZCMDMyNTVFMTZEN0VDOTIKKzoxMDNGMDAwMDBDMzZFMEZFNDAyNUExOEM0RkU5NjVERUU5NjMxMjNCRUIKKzoxMDNGMTAwMEM3NEJEMDdFMjNCOUQ2RkQ4MTRBNEVDNzIyQTUwQzNDQTMKKzoxMDNGMjAwMDE3MjA1QkVGMkQyRTI3RjY3QjhDQUQ3NkQxMTEwODZFMTYKKzoxMDNGMzAwMDUxN0ExNzdENjVGREI4NEZGMDI3MkY5RUYzMUJDOTZFOTAKKzoxMDNGNDAwMEVFNkYyMjE4OUYyRTRGMTlCODFERjZDMUFGRjQ4RTczNzUKKzoxMDNGNTAwMEI2MDczMTlGMTlGREY5MjVERUU5MEJGOEJEOUYyQ0FGOUYKKzoxMDNGNjAwMDM5MjAyMjVFQzI5NTYzRjE5Qzk2RDE0RkQ4NDkyNjgyQjIKKzoxMDNGNzAwMDVDMEM4QjJDMEYwMjdGRThGOEZEOTlEOThGQUM0RjgyMzcKKzoxMDNGODAwMDNGRkIzOUY3M0E1RDI4MkYzNENEQUIxRkYyMEFDREUzNjIKKzoxMDNGOTAwMENEQ0ZFOTkxNENGMzA4QkJDODBDMUM4RkRCQkI0M0UzQ0UKKzoxMDNGQTAwMDhERjk2MkUzQkRDQUUzNTlDNjc4NzUwQkFDRjNBQjczMDgKKzoxMDNGQjAwMEFBMzhCRjNBQ0VDN0M2NzhBRkMyRkM5MkUwRjdBQ0UzRUUKKzoxMDNGQzAwMEYxQkNDOUExRjEyRUI3Q0VBRkNFQTVFMkZDRUFGODNEMTcKKzoxMDNGRDAwMEJCNDNFMzhERjk2MkUzMTk3MTlENEU2NzQzMDNEMEUxNjIKKzoxMDNGRTAwMDQ4RjExRDIzQUU3MzRERTcyRTRCNUM4NzQ0NzdDREFGNzAKKzoxMDNGRjAwMDI4MjQ2NEIzQzBFNEM3RjY4REYzM0FDMEZGRkJCODY2NkIKKzoxMDQwMDAwMDREMTFFQTE1NkU1RkUzN0RBQTU0MUYyRjk0MTlCQ0I1QkMKKzoxMDQwMTAwMEI5REU1OEIzMDk4RkRCQTgxQ0QxMjdDMzM5MDk4NUMwODUKKzoxMDQwMjAwMDgxMzIzODM3QTFFMzM5OEEyMDNFMUZBMUY2QkE4RUY5RDIKKzoxMDQwMzAwMDI1NDVGOEZEODlBNjEwOTY3NzM2Q0RDNkE3RDE0RkQxNzQKKzoxMDQwNDAwMDZDNzZFRkQ3OTRCOTQyNTJCQkZENzUyRkIzREIzNzY3NUYKKzoxMDQwNTAwMEE5RDc3RjFERjQ1Qjg1ODdFNUZCQ0VCRTg0RTgyNjNCQjAKKzoxMDQwNjAwMDlBMUFENkZCRERCMDNGNzQxRDI5MDExRDM5NjkyQjgzRDcKKzoxMDQwNzAwMDNCNTAzNTI2MDZFQkVGMjkzOUQ4REYwNDcxNTBEOUExMjIKKzoxMDQwODAwMDYxQkVBQjk2RkNFRjE4QkNFQzY1RkVCQ0NCQzVEQTkzMDkKKzoxMDQwOTAwMDRCRDhGREE3QjU1QzNGMTFBOTA2RjM4RjZBMTdBNjYxM0YKKzoxMDQwQTAwMDNFQzJBMkM1QkE0RkE1Nzg1QjJDMDg2RjE0NzI3RDA3N0IKKzoxMDQwQjAwMEU3OUVBRUU1NEI2REY3MTcwMkEwNzlFODdBMDU3NDI5MDMKKzoxMDQwQzAwMDA2RjdDMzVEOUI3Qjc4ODk0MEZCMERGQkFFNDEzRjIzMjgKKzoxMDQwRDAwMDRDMUJBNkQzN0VBRUU1RkFCNkUyNkQxNzgxNzgwNEI5MjMKKzoxMDQwRTAwMENDODlGMjZCRjE2MkFCNUZCMEQ5MUQ1N0MxQ0VEOTVDMDAKKzoxMDQwRjAwMDEyMjBDREI0RERBMjFBRUI3Nzk3OEJGMTU1RDg3NkZGNUQKKzoxMDQxMDAwMDRCRUQ1OUVFODMzMUYyNkRFREY4QjFDNzREMEY3OUY5RjIKKzoxMDQxMTAwMDc5MjUxRTFGM0Q0OThBRUZDNzMzNUYzQzJGRDdERURFNkUKKzoxMDQxMjAwMDg4ODMzNjc5OTk3Q0VCNzQzMkY5MzA5QzBGMTgzQ0VGMTgKKzoxMDQxMzAwMDcxMzlCOEFERTkyOEM2RDEwQ0Y4QjJFNTk4MDBGMjNFNjUKKzoxMDQxNDAwMEE3RkVBODI1RUY5RDIyMTY4RDZBNjM5RjgwNDhCQjRCNzIKKzoxMDQxNTAwMDUwMEZEQkU2QjM0REQ4OUQzNURBN0Q1MEQ5NDQ3RTc3REMKKzoxMDQxNjAwMEEwODhGRkREMDI2MUY4QkNGRkUwQjVDNjg1NEY5MkI5QkIKKzoxMDQxNzAwMEFGMTQ5MjY0RkNDM0UyQzFCNTg3QTQ1MEIzOTZDMDhCNjAKKzoxMDQxODAwMDgxODdGRjZCM0VEQTAyNzhBN0NGNTdFNjdGNTJDNkZDRTUKKzoxMDQxOTAwMEMwNUNDQkRGMDczMENFNkY1RDMzNTQ5Njg5NkNBMkU3RUQKKzoxMDQxQTAwMDg1Q0I5RDNBRjM1NzA3OEI4MTJFOEY1QzlBMTI2MjdGRTUKKzoxMDQxQjAwMEU3ODJEQjQxRjE1Rjg5NjAwNzdERjlGRUY1M0M0QjVFRUMKKzoxMDQxQzAwMDMzRUY3N0E0RjVCMkU3NTM5QUNFMUIyN0VFM0Y4MEZDN0UKKzoxMDQxRDAwMDk3RTY1MDEwRUQ4MTRDOTEwMDNGNjU0MzNFOUU5RjdERDgKKzoxMDQxRTAwMDNGNjZCNTVCMkRGOTc4QUQ3REJCMDQ4ODFCNkU4N0ZDRkYKKzoxMDQxRjAwMDQ0RDMzOUJCOUNGQTVFQTExREVDQkJFNjE4OEI0M0M0Q0IKKzoxMDQyMDAwMDY5M0QwQTc3NkU3RDVDNjgyQjRFRTQ3REQ5RTU3QUVFRDgKKzoxMDQyMTAwMDZERDY3Q0MxRjZCOThCRDVERDFBRTRENTU0NzZDM0M1MEQKKzoxMDQyMjAwMDVGRUJCNkIyMzg5NzUxN0YyOERFQzVDRjlGM0E0ODAzN0YKKzoxMDQyMzAwMDgxRjMxNzkyOTdDNTlCODNGQzVFOEVCM0U1RUY3RTI2RDQKKzoxMDQyNDAwMDQ2RDVGQzdDQzhEQjhEMjkxNTc0RkUwRjY1NDQyQTdDOUQKKzoxMDQyNTAwMEI0REZBRTQwNjk0MzBGRDBBNzFDQzIzQ0VGQTU4RDc3RjkKKzoxMDQyNjAwMDg3MjE0RUE4NjYyNDhGODMyRkU1RjY0MThEOEZDNUQzMTUKKzoxMDQyNzAwMERFNzJDNEYzMjA2RUZFOEI4Q0NBMUFERjhDMjRGNTFCMTEKKzoxMDQyODAwMEVGQzVGRUNBNDdCODZGRkUyNjFGQTNDRkVENjI3Mjc5NTUKKzoxMDQyOTAwMDcwMDMxRkU3MkIyQjQ0QkM0N0M4NEQ3Qzc4M0VENTVEOEYKKzoxMDQyQTAwMEQ4M0QxQkYwQjE3REU1QjY1MEIyNzM5NkQzRDVDODU3NTMKKzoxMDQyQjAwMDdEQTYzOEFCQkI5MEREMDM0MDQ4RUZDNTMwQ0Y3NTdGOUUKKzoxMDQyQzAwMDdFQjhGNzE5M0FFRkY0M0Y3QjUxQ0VBNjRCQUM1RjUzNjMKKzoxMDQyRDAwMEZCOUJDQ0YzMzFEQUVGRkJEMzJGRjFGQ0ZDM0U3RUFGM0UKKzoxMDQyRTAwMDNBODkxNjVDMEU3MUY2NEQ0NjE5QjYwMEEwOUMzNjU0RkMKKzoxMDQyRjAwMEJFMUNGQ0NBNDRGOUM3MEJFMEVGMjY2RDAyMUFBNUM0MjgKKzoxMDQzMDAwMEY3REVBNkMzQTg4NzM3MDk4NEVCRTk1RjJDQzBGRUY4NjcKKzoxMDQzMTAwMDNERUUyRkYyRUZFNTU3N0VGMEU4RkRBMDBGNjYzQUQxQjMKKzoxMDQzMjAwMERGRENDNEVEMUQwM0JFRjc3REVDOUNDMkZCMUM1RjIzRUMKKzoxMDQzMzAwMEUxQjM5M0UzREIwQkY4MEM5QzE3M0UzQjkzRTE2MzQxNDUKKzoxMDQzNDAwMDQwRUYwMjNDQkIyMTEzODQ4MkUwRkVCM0IyMTZGMkFEMTMKKzoxMDQzNTAwMDFGNkEyMkUxQUZEMzM5NkMwRkVERDkwNTY3OEE2OEZCN0MKKzoxMDQzNjAwMEZCOTNBREM3MEYzM0Y0NkUxRkMyNzMwQ0U3RTcyQkY0NUEKKzoxMDQzNzAwMDg2MDAxNUVCNjYxMUVDMjcwOTFDNUI0NzVCRDdBOTY5MjIKKzoxMDQzODAwMDRDQ0VDMTFENjNGMDRDRTdGNkE1RTRFQTBGNDJGRTgyNzUKKzoxMDQzOTAwMDVBRjY2RkI3QUI1NENFNzRFNEY3MkY0OTE2Mjc3RUMyOTYKKzoxMDQzQTAwMENGRUNGRUI0MTFFMkUyMkY3MEZDNTVBNTg3NzcwMkRDNUEKKzoxMDQzQjAwMDZERUEwM0U4RUYzOTA1MTI4NkZBRUI2NjBGMTBDMUQ0RjcKKzoxMDQzQzAwMEVFMkQzRjVCMEYwQTc3MkZDMEVEQkM5OERENEZFREEzQkMKKzoxMDQzRDAwMDc4ODcwNDM5NUYxOTgzN0Y5RDc2ODQ0MEZFQkIyRjc4RjAKKzoxMDQzRTAwMDA0RjM1QTdENjUwM0M4RUYyODBBQjMxOTVEODEzRkE4MUQKKzoxMDQzRjAwMDcwRkJFRDg1NEQ2RjJGMDBCQTQ4OTcwQzNBQkNCRDEzOEEKKzoxMDQ0MDAwMEU4NEM0QTk0OTFFRTdBRDI1OUZCNjNGN0REREUwOUZFNUYKKzoxMDQ0MTAwMEUyMEUyNzZEMDM3MjMwREI4OUY2OEQ3RDdFODczOEJDMTYKKzoxMDQ0MjAwMDgyQUExRjgwRjkwREMzQTc2QkUwNTFCODZGNjBEMzQ0MTcKKzoxMDQ0MzAwMDc2NEY0QkI5RDhCRkU0NkI0MDk3NTc3QUQxM0VBM0VGODQKKzoxMDQ0NDAwMDk3OThDRkRCOUZFNEY4M0FFOTYzRjZENUE2M0YyOUY4QzEKKzoxMDQ0NTAwMEREQkUxRTIzRDFFQjZGQkYzOEJERkU3NjA0N0FGRDlEMTUKKzoxMDQ0NjAwMDhENUUzRjIxQzlFOUY1N0Y0NkEwRDc3N0UxQkQxRDJGQkQKKzoxMDQ0NzAwMEY2QjI0NEY0QURCMEFGMkM3RkJFNjAyN0Y0Mjc1RjM1QjEKKzoxMDQ0ODAwMDc3RUIzM0Y0Mjk3REJFMzE4QUFCMTkxMjJDRTc5OTEzRUYKKzoxMDQ0OTAwMEYyM0VGMjA5RjQ2RkRDMkI2MEZDN0RBMkJCN0MyM0Y0QkUKKzoxMDQ0QTAwMDNCNkJFNjU2OTA2M0U3RDBFRjE5QzA4N0JEREY1RkYwNDYKKzoxMDQ0QjAwMDdFQ0JBRkY0NDY5MkREOTNCMENCQ0ZGMkUzN0ZFMDY3RTMKKzoxMDQ0QzAwMEY1NDZFMjlCNUZGOTU5N0VDQTQ4N0MxM0Y3MEZGMTREMjAKKzoxMDQ0RDAwMEFBM0ZGM0VDN0MzM0M4RUJEMzc1MThFQjlGNzEyRTdDQUQKKzoxMDQ0RTAwMEYzMjAzRUREODU4QzZGNzBGRTczODZGMzBEMjExMUU0QTEKKzoxMDQ0RjAwMDkzOEU3Q0M2MTc0NUZFMTU5REQxNUMxMzFGOTE3QkFEMzUKKzoxMDQ1MDAwMDdDNDRFRUI1RjBEMUE3RkU3QjkxOEZFQ0VERkQyM0RDNzIKKzoxMDQ1MTAwMDA3NzhEMTEwRkY4N0E3QzEzQ0Y0MEJENTM2NzYzRTY5RUEKKzoxMDQ1MjAwMDAwQ0ZFMUY2OTBDMTNFMTdFNjA5QjNCQzVDNEYzNEFBNTgKKzoxMDQ1MzAwMDMzRjNBMDlGQzBCREIzQjM3OEZCMURFMEEzODExRjM0NEMKKzoxMDQ1NDAwMDkzQzdCM0U0N0VCMkM4Mzc5QzlGN0Q2NUYxMzJGM0ZEMUIKKzoxMDQ1NTAwMDJFMkZGM0Y2QUVENDcwMzlFMEJEODcwQzRDMDFGQjZDMDYKKzoxMDQ1NjAwMEE0NzU5QUNGRUI5RjRFRDdFN0ZCOTNEMEY5RDlGNDUwQkYKKzoxMDQ1NzAwMEJEOUZFOUExN0FERTRGRkE5Rjk1MDZCMDRGRURGQzVFMzQKKzoxMDQ1ODAwMEJFRjJDNzdGN0M2Mjk0N0U2RUUyRUJGRjU1REVDRjE3RjIKKzoxMDQ1OTAwMEUwRkZBRkZBOTNGMDJGRTVGRjFCNjAxRDRDRkM1RjI2OTgKKzoxMDQ1QTAwMDE0MjRFNUZGOUJGQzQ5RTQwN0U1RkY5QkZEN0Y1QjdFNTAKKzoxMDQ1QjAwMDVGRTM0RkMyOTc1NzAxQkY2NTlFMURERkNGNzE3QzNGMDAKKzoxMDQ1QzAwMEY3MjVGMUJEODVFMzdCODNGRjBCQ0JEQjBEQzlGMDQ1MDAKKzoxMDQ1RDAwMEYxQkRGMTFDRjFCRDY1MDQ3QzNGRThDN0Y1N0YxNkUxMzQKKzoxMDQ1RTAwMEY3Njk1RThDOTc3N0NEMjI3QkEwOUYyNDcwM0M2Q0VFQTAKKzoxMDQ1RjAwMDQ3RDE1ODNGOTRBNzNFMTEyOEREOTc3RkRFMTU0QTc2QjQKKzoxMDQ2MDAwMEZGMTE2REY3NjhCMjc2RjNGREFBOTE3Q0JFMUFGQzg3QTQKKzoxMDQ2MTAwMEVENTc3OTcxNUY4MUVBQzcyNzkzRjFDNzk3QTA4MzFGOTAKKzoxMDQ2MjAwMEY4OTNDOEZENzI5MUM5MjFDNzdEMTc3NzQyMUNFRjRCRTMKKzoxMDQ2MzAwMEY0RkY5MzY0RkRERkM5RTVGQUQ5RUM4MkQ3Mzg1REQwODkKKzoxMDQ2NDAwMDc5RkY5NzdGQzY3MEY5RDdDM0NGMjcwQjZBRTQxNzdFMkYKKzoxMDQ2NTAwMDhDREIwRjVDMDFGMjZBQzc1REU5MDJDNEJCNzJGNUI4N0UKKzoxMDQ2NjAwMDAwN0UwMjVFRUE0M0UxOTgwQjk3RjhDQzQ4QjREQjIxNjgKKzoxMDQ2NzAwMEM3MDVCODNGNjc0NzgzMkFDMDc5Mjk1MzdGNkZGQTMzNEMKKzoxMDQ2ODAwMDQ3RUVDRjBFMDc4NUVGRDc3RTk0NzdGQTZGRTAzOTlGMUMKKzoxMDQ2OTAwMENGRUY3Q0VEQTQ3REU5RkFFRkZENEM2RUZGMEYzQ0Y1MEEKKzoxMDQ2QTAwMEM5NTZCOTZEQ0M0MzBDNzdCMzNDREJEOUM5RkY3RUU1NjUKKzoxMDQ2QjAwMDAxOUZDQ0Y1NThGOEI4NTlGRUJGM0I0NDU3QUNCRkYzNDcKKzoxMDQ2QzAwMEQ1M0YxNEJFQ0YzODdDN0ZDMjdFNkRGMEQ5RjE3MjM2RjMKKzoxMDQ2RDAwMDM4Mjc4MTlFNjdGRDQ5QTk5OUMzRjU5NEJEM0ZDM0NGOTMKKzoxMDQ2RTAwMDM2RDYwOUFFQzUzMEM3N0RENEQ0MjFGRDlEMEFGRDc5RUIKKzoxMDQ2RjAwMERCNDUzQzQ3NTVDQkU1NDlFREVDMzQ2RUI3QUIxRUU4RTYKKzoxMDQ3MDAwMDdGM0I4RkMzNkZCRkVEODEwQUQ4NTdFRkI5NDcyRDAxQUIKKzoxMDQ3MTAwMDE0NjRENzMzQkRBN0REMzYwRUUzQUJEOUJDNUYzQkZDRDkKKzoxMDQ3MjAwMDQzRUQ5REJENTNFMEVGNDJEMDcxQzdDMUI4RjNFNjkyQUYKKzoxMDQ3MzAwMDM4Rjg4REE5NjAzNzYwQkM0MkM1QkY1RjlDRUVFQTBFQjkKKzoxMDQ3NDAwMDQyN0M3NjlERDBCRDY0MTlFOEQ1MkJCQ0VDNUM0QzcwRTYKKzoxMDQ3NTAwMEYxNTlFRUM1NkNCMUQwMkQwOTk2OURBNTdFMzNENjU3ODMKKzoxMDQ3NjAwMDUzQkFGMUZFOTQ3M0FFRUZFQTRFNkE2N0NENEIxNTBENjYKKzoxMDQ3NzAwMDdGNjJDRUE4NzgwRDA2MzBFRTY1RTA3N0Y4Mzg2Q0ZERTQKKzoxMDQ3ODAwMDJBQzIwRDAyRTBEQjU3MjZBODkwN0FFN0EzNzQwMkY2NEUKKzoxMDQ3OTAwMDkyNThEODhGNzk1MzU3OTczMTdBMjFENDJGMTlGREZFMkIKKzoxMDQ3QTAwMDk1MEUwM0FFQUJGRjE2NzAxOUY1NDYxRThGRDdCMzlENUQKKzoxMDQ3QjAwMEI3MThGQTNCNjM1RTI2QzdCMDIyMkQ3Rjc0MjgyM0U5MjEKKzoxMDQ3QzAwMEJFODJGMUVDNkM1Mjc1QjgwQUY5MjM1NUMzN0IxOTNCRDQKKzoxMDQ3RDAwMDg3RjJCRTQzQzE0NUJFQkY3RkJEQzRCQzYyNkNERkM5QUEKKzoxMDQ3RTAwMDU2N0ZFOEZFOTFBMDgyRjYxRkZFRkQwRTEzMUQ3NUE0RjQKKzoxMDQ3RjAwMDMyQkY1NTRBMEJERjlEOEFGMjM3ODRGNzNGRDJGMkI3QkEKKzoxMDQ4MDAwMEIwQUNEMEIyMEZDQjREQjAzRTQ0MUQyQTM3RTNGNzIwRjkKKzoxMDQ4MTAwMEFCNEY1NEY1OUNGMDRFREI3NTYxM0I3OUE4OUZGNUQ4MDIKKzoxMDQ4MjAwMEFGNzc2OERDOEQ1ODBFMEM5NUVGQzNGQUI5QUNGRUI5QzIKKzoxMDQ4MzAwMDhFMzNFQ0ZFOTU3RTA5RTdGRjg5QUNBN0MyQkVFOTc1MTEKKzoxMDQ4NDAwMDhENUZDM0Y4RDJGNThEQjdFMEIzQUI0OUFEODAzODlEMkQKKzoxMDQ4NTAwMDcxMEZDOTc1RDc3RjREMDU3RkZBRkE5QkI2RTBCRUJFRDIKKzoxMDQ4NjAwMEQxRkY0MkYwM0I4MEZGMzVCOTFBRUMyNTY3QkUxODdFQjgKKzoxMDQ4NzAwMENDOUJFMEJGMDQxQzZENThBRTk1RDk3REZFMEI2NzlGQTUKKzoxMDQ4ODAwMEQ4RDQ2NjhBREYyOUYwNzdEMTIxQkY0NjMzREQ4MzQxNTIKKzoxMDQ4OTAwMDEyRjJGMDQ5NDFERjlEN0ExRUY0M0M3QzlFODQxQ0E0RjgKKzoxMDQ4QTAwMEY0RkI4OUI3MzAxNjQ1N0FBRTU0OTNGMThEMzFERjkxMjAKKzoxMDQ4QjAwMEZBMzdFNjNCOTJCQzMxRjA2NkJDNUY1N0M4RkY4RUFFNUMKKzoxMDQ4QzAwMDJEN0VFOTlFNTg4NUY5M0YwQjA1MEVBNzhGREYwQkM5OUEKKzoxMDQ4RDAwMEVCRDVEMjcxOUUyRDQ2QkFEMDgwNkU2QkI5N0Y2N0Q3NkIKKzoxMDQ4RTAwMDBGQzZCODRGMEE5MUQ3MDEzRjEwMjdCRUE3NzQzODdFNzQKKzoxMDQ4RjAwMENGMTU2RjQ2RkY2MzIzNTEwMkY3NzI3OThBMDlFRThCNTkKKzoxMDQ5MDAwMDA1N0NDNkJFM0E5MzZCMEY3QThENzIxNDkzNEJDMjg1QTkKKzoxMDQ5MTAwMEREMjhFN0RDOUEyMUY3OTg5RTU0NTM3QTc1QjE4NEZBMjIKKzoxMDQ5MjAwMDQxQTk3RkJEM0MzODA1RjI0MDIzNDFGODEzM0VCNEZDNTkKKzoxMDQ5MzAwMDEyRENDRjlDMkVCMTMyMjE3RjdERTkyMERBM0ZFQTA1REYKKzoxMDQ5NDAwMDcwOTNBMzIyN0ZGRUQyQTEzQ0MyOEUyRTYyRENFNkYzREUKKzoxMDQ5NTAwMDk3MjA5RUQ3MzM1NDI2NzEzODVGRDBFMzE5MkFFQjRBNEIKKzoxMDQ5NjAwMDkwOTYwQjg2Q0E1MTI4RUZFMDc2REZFOUQ0Q0Y1RjZBRDQKKzoxMDQ5NzAwMDQzN0QxNkZFMENGOEM3OTBBQjE1NUNBRUZFQURFNEU5QzYKKzoxMDQ5ODAwMEZGMDJDRUQxNzRCMjAwODAwMDAwMDAwMDFGOEIwODAwMkYKKzoxMDQ5OTAwMDAwMDAwMDAwMDAwQkU1N0QwQjc4NTRENUI1RjAzRTczQTgKKzoxMDQ5QTAwMEU2OTU2NDI2OTlCQzI3QkM3MjEyNDBBMjNDOUMwNDAyODYKKzoxMDQ5QjAwMDQxQjE0RTc4MzU1RTc5MENGNTE1MjRDODI0RTExMTlFN0QKKzoxMDQ5QzAwMDAxQTQzMkFEQjYwQzI0MjAyODY4QUMyRkVBODMzQjI4MjIKKzoxMDQ5RDAwMEY2NkFBRkY2ODJDNTVCRkUxNkY5MDc0MTBCMkQ2MkFDOTUKKzoxMDQ5RTAwMEE4Rjg0MEMzQTMxNTFGMjUxMUI0NENBRDJENzdBREI1NjQKKzoxMDQ5RjAwMEY3Q0U5QzczMzIwM0MxQjZGRkRGRkZGQkMzRDcyRUY3QTAKKzoxMDRBMDAwMDM5RkJFQ0M3NUE2QkFGQjVGNjVBNkJFRjYxMkNDQzU4M0IKKzoxMDRBMTAwMDJFNjM5QkI1NjZDRkU4NjE4Qzg1QkQ1NjVGN0Y4REIxRjcKKzoxMDRBMjAwMDc1MENGRTBBMTgzQjg3N0Y1NzMzRDZENzYzNjdBQzlDNUIKKzoxMDRBMzAwMEIxNDczMjgzMjkxRUE4M0ZFOThFMEVBQjEzRUEzOThCQUEKKzoxMDRBNDAwMDcyREM0MTE3NjM4NURFMkZDMjk1RjA3REUxMjhDNjM0MDQKKzoxMDRBNTAwMEZDQjY1RjE2NjMyM0ExNURFRjMyQzU5RTAzNzAxMEYzQjEKKzoxMDRBNjAwMDI4OENERUFERjI0MEZEMUMzNzYzQUQwMDk5MzVDMkQ4MEQKKzoxMDRBNzAwMDIwQzYxRTcwQzkzMjhDMDc2MEEwMjRDMkRBRTA3OUFBNzEKKzoxMDRBODAwMEM2REY1QkIwMENDRjU1MDc1QkJDMTVDQTY5MjVDQzFGRDAKKzoxMDRBOTAwMDgxQjJDN0MxNjYwNDAwRjZGMjU4NjgxRTAzM0RBQTgwQzEKKzoxMDRBQTAwMDBBOEQzN0MzREJDQzM0QThFRkFDQjJGODIzMDAzMzEwNDcKKzoxMDRBQjAwMEJBRTJGMzYyQUM5OUVBMERGNDU4MDkzMjgxOEZGMTM5MDgKKzoxMDRBQzAwMEMxMDExRTI4NkY2NkFDNkEyQjhFOEI0NTAzMjUzMDhGODMKKzoxMDRBRDAwMEQ0NEI3M0IyRUU4MjUyNjU4OTc1MTk4MzJFRkY3RDA1MjIKKzoxMDRBRTAwMDBCQ0NCNDMxMzZENDEzQjA2MzdENTc2OTRFNkE3MDEwNjUKKzoxMDRBRjAwMDk1ODc1MDc5QjUyNUNDMDAyRjk1Q0MxRDUxOEFFMjc4NDkKKzoxMDRCMDAwMDgxOTFBNzA2RENGMTcxQzRDN0MzRkI3RjZCNDUzMDMwRDAKKzoxMDRCMTAwMEQ2RDZGNUJEODQzNzRFNTUwM0ZBNzk0ODU4ODk3ODgwNDIKKzoxMDRCMjAwMDdFNEY1NUZGRkUyMTlDQ0U0MjY3ODc5RDE1MDMzREZCQkUKKzoxMDRCMzAwMEREMTc2MDJBQ0U0N0EzRjdDRUVENTNBMjNERTFGREEyREIKKzoxMDRCNDAwMDFENEIxODhFNzc1NTVBRkEyOEE0QTNCOURGQjdCRTdFM0QKKzoxMDRCNTAwMEQ4MTM4MEY3Mjk3Rjc2MDRCNjI2RTg2RjBFRTIxOUM2Q0YKKzoxMDRCNjAwMDdCNjg0NTM1N0QwN0NENkJENjNDQzY2NkUwNTQ4QTE5MTcKKzoxMDRCNzAwMDExQjRDRDg5OTAyOUU3MUMzNEJENDNGREUwRkQyRDhDOTcKKzoxMDRCODAwMDMzQzNGNTgxREE4OTBDRjA1QTU3QUQzMkI1MDhCRkVCNjMKKzoxMDRCOTAwMEFDQ0ZDRTQxRjk5NkI2REEwOTZDMDgxNDQyQjYxM0Y4RDgKKzoxMDRCQTAwMERDMDlGRkNFNDFCQjQxOTYzOURFMDM4RjZCQzNGQzM5NzQKKzoxMDRCQjAwMEQ1ODdGRkNENjJCRUYxQjlGMDVERkQ1QUQzRjNGN0FGRjMKKzoxMDRCQzAwMEY5OThBNUUzN0JFQjg5QjY5Mjc4RkIzNzU1RDcwNkM2RjMKKzoxMDRCRDAwMDhBN0E2N0U4RkYyMzg0OUZFQjM1RTY0N0JBNURFRjRCOUYKKzoxMDRCRTAwMDhCODQ2MThBMzcwNEE2MDZDNjk2QzREQjdCRkJBRkVBREEKKzoxMDRCRjAwMDBDQzQ4QjE5MUZEQjA1REYxRDVBMTEwODhDRURERjE1NjYKKzoxMDRDMDAwMDFGNzUwMUM1RUVEMTJFOEM5N0VFRTJBMUQ2NUEzQTNFMjEKKzoxMDRDMTAwMDU3RUI4QTA3RjNGQzAxNjMxQjEwQ0ZCMzAwQ0Y3NzE1NjYKKzoxMDRDMjAwMDI1QzcwN0Q0MjM3QUJDM0QxNUVBQzE1NEM2QUIxMzZDMjMKKzoxMDRDMzAwMDE2QzA0M0ZEMTQ4NTM5MTRDMjZGM0FFQjhCRjVGQzEzOTMKKzoxMDRDNDAwMEM2RTlDNjZCQzZBMzE5NUZGNTJGMzI1RjE0REFBRDdGRDQKKzoxMDRDNTAwMEQwRUQwMzBFNjdCRjkzRjg4OTAyRDI4NjgzM0NFMTU1RkQKKzoxMDRDNjAwMEY1RjMzQzg2RTNGN0MwM0Y5Q0U3NzcyQTRBNUZDRTgxQTUKKzoxMDRDNzAwMDcxMDQ5QjE1MUZFM0YzM0RBNjlGNUYxRDBCNjQ0NDE1NTQKKzoxMDRDODAwMDlBRjdCMTI0NzQzRkE2OUZBNzc5N0NFNkYxQTdBMEIwNUMKKzoxMDRDOTAwMDAyRjkxNzdBQkZFODlFQkRCQTdBQ0MxQTFEMTQxOENDNTcKKzoxMDRDQTAwMEQ4MzMxRTc3Q0UxRkQyQTAzQzg0RjlDRUMxQkFGQTkyNzcKKzoxMDRDQjAwMDhEQ0ExODhBRUZGQkU1RDBGQTM2RjNDNUQ5MTVEQTNENkYKKzoxMDRDQzAwMDdCNkRGQTc1Q0VGOTZDNDY2ODRBNjdCRkQ4QkVDMjgyNjIKKzoxMDRDRDAwMDlENjUwRkUwMzkzMDU1REQ3MDAzRkNGNzVCRkJCMjU3ODMKKzoxMDRDRTAwMEUzQjNBNTVFNTUzQjkxOERGODgyRjkxMkJERkM4QzQ5NkEKKzoxMDRDRjAwMEZFNjIwOEMzQkI1NUMwREYxNEU2RDQ1Q0QwQ0VENTIwMUQKKzoxMDREMDAwMEE0Q0VDMTVDMjZGOTUzMzQ5NzZFMUVBNzVCOTQyQTk0RjcKKzoxMDREMTAwMEEzNDBCQzhDRUIwN0M3RTc2QjFFRjc1MkFGOURGQTAzQUQKKzoxMDREMjAwMDdFRkM0MkNGOEY2NkJDQkM1NUREMzcwM0U1Qzg4MTM4QjkKKzoxMDREMzAwMDVFODY1QzBDNUU0NkUzNjIwNjM5RTJDOTY2NTEwNUU4QjAKKzoxMDRENDAwMERDQTEzODIzNEZDMDk4NkE0MkI3MDdDNjBFNDVCQ0IwRjUKKzoxMDRENTAwMEIwMUQ0NEU3NTE0RjExRDU5M0YzQjYzMUY5Qjc5OEExN0YKKzoxMDRENjAwMDNDQURCMUIzMjBDRUVCN0QxQkFCREVFNjQyMThFRDVENzIKKzoxMDRENzAwMEE2OTM1QjI3QjIyQjhGQTI1Qzk2RTU5QUQwMEZBOTdERjQKKzoxMDREODAwMDYwNDRFMjQzQzlDRkI3Mzg1RDUxOTVGM0UxNjc5RDdDM0MKKzoxMDREOTAwMDQzRjJBQ0M2RjM4NzgxNDQyNzc2MEVFNkE5NjYyQ0QwOTEKKzoxMDREQTAwMDcwREU2QTVBRkExMDk2QzFEODVBQUMwMkYzNTQzMzAzMzMKKzoxMDREQjAwMDdGNDQzREE5QTZGNTg5MjBGRkE1NEU3RDcyMkRBN0UzNkUKKzoxMDREQzAwMEZENTUzN0VBRTg5ODMyRUJFNzYxNkE1Q0NCMzJFMDNGQTkKKzoxMDRERDAwMDRERDBBRjUyRDAyRkE1QzQ2OUE2MUZDMzc1MUEyRTYxM0UKKzoxMDRERTAwMDkxQTcxNDgxMDIyODlGRUVFNzhGRTBCQTREQTYzNzI0RTEKKzoxMDRERjAwMDNENTM0QUFDNUZCNUU5Rjk5QUI1MTAzRjRBM0FCMkJEQTYKKzoxMDRFMDAwMEMzM0E3MEJEMDZCRDU2NzYxN0JEMkYyMUZDMDQzRDEyNzYKKzoxMDRFMTAwMDNGMUQzNkQ0MjczMzQyQjZEM0ZBNzY4MjA1MzMyMzJCOEYKKzoxMDRFMjAwMEYxQkI3NTBFMUYzRUFCQjM2ODc5NTgwRkYwRTQ0MTNERkUKKzoxMDRFMzAwMENFNEE3QzNFNUMzRjJDMENERjQ5N0U0MkJDQTIzMUExQjUKKzoxMDRFNDAwMDZCQkYwREU2NTA1MDg2RUQ4MUY0QzRFRkQ2RUFGQTI5MjcKKzoxMDRFNTAwMEVFREE2RkU3QkEzMkI3NkJGQTRFNTVDMTdFMjAzQkMyMkQKKzoxMDRFNjAwMEU3RjNFOUU0Nzc5RjRDNkUzRjlDRjYwRURCNkEyOTRFMzAKKzoxMDRFNzAwMDhFQkYzQTY3QjZERjlBMUQyRjFGMkI3MDU2NDcxMkU4NzgKKzoxMDRFODAwMDAxRDk5RUQ0RTc1OTZBRDA2QkMxQjlCMTI3RjdFRDFEOUUKKzoxMDRFOTAwMDg1N0FEODczMTk0ODMyNzZGN0VBQzdGN0VERUJDRDkwRUIKKzoxMDRFQTAwMDQ1MThFQjgxRDUxRkRGRTc3NzkxRERDMUNCQzg5ODMwN0UKKzoxMDRFQjAwMEZFQ0RBOTlENjVCRkQzMEJFNUUyQ0U3MjE4Q0I5QkEwQkEKKzoxMDRFQzAwMDNCNzYwNUM4RUJGQjFFREZENzBDREY5RjNERTIyMEZERTQKKzoxMDRFRDAwMDc1QkEyQTM1ODI4QjI3M0IzNDg2MUQ4NzcxNUJDMUNDMUUKKzoxMDRFRTAwMEM5MDA1NjAzMTA0NkU4MENGNUE0RjkyODU2QzAxQ0UwOEEKKzoxMDRFRjAwMDNCNUJGMzI5ODhFRkM5OTkxQUYxODM1NTYzNTEzNzBDNEQKKzoxMDRGMDAwMDJFREJFQTUzMTA1RjNGQjJCMzA2MjEzNzJFOURBMkIzQ0EKKzoxMDRGMTAwMDVGMjY2NzcyQkI0M0Y2RTM3MEIyNzA0QTU5QkM1REM2NDgKKzoxMDRGMjAwMDdDMkI1MThGNTgyNzMwRDIyQkIwQ0VDOTZFOTNFQjVCQzAKKzoxMDRGMzAwMEI2MzMyRDkzRUJDRkNFRjU3OUUxRjUzQzJEMzNDMTdBMjUKKzoxMDRGNDAwMDNFNjA1OUZDRTEwRkQwOUVGRDhEQ0E5RTgyQTk0Q0Y3QjAKKzoxMDRGNTAwMDdFOEY5RURGMThBQTI3MzgzNTM0OTdFMEFDNEM2RUJGQTEKKzoxMDRGNjAwMEZDOUUwNTY3NjUwMjZDQUQ3RTYzRkE3MkUwREZDNkVERkMKKzoxMDRGNzAwMDBFMUZBQUU1ODVCNzdEN0M0RkI5ODY3ODAyQkFFMzc3MjQKKzoxMDRGODAwMEIzRUExRjJDODdGN0Y2RkUxNkIyNjdEN0Y2NjZENUM4QzgKKzoxMDRGOTAwMDRGRjY5NTBBRDk0N0VCMzQ3QkQ1NzY4MDBGNjQ1NERFMDMKKzoxMDRGQTAwMDhGRURDOTcxM0Q5MDMxOTZDQUFDNEFCMzIwOUYyRjc1RTEKKzoxMDRGQjAwMDcyM0UzRjdCRTQ0RTZGMUREQTk1MkUxN0FEMTdGQkNBOEMKKzoxMDRGQzAwMEEyN0IyRDUwNjZGQjYxREMwQ0U1MDcyMzNCNDM3NTcwMkIKKzoxMDRGRDAwMEI4M0E5M0RCQTlBQjA1QkU3RjIwRjhDQzE5NDMyMjczMDYKKzoxMDRGRTAwMEJFNUUwQ0ZEM0JBRDYxODY3NkI2MzM2NkE1RTc3NjA1MDEKKzoxMDRGRjAwMEM2OTc4MDRGNjU3QkNFMTgyQ0QyQTFEODlGRjk3QjNCRkEKKzoxMDUwMDAwMDNEQzc3OUUxRjc2QTM2MzNEODNERjdFMEY3QjkwOEU1RUYKKzoxMDUwMTAwMDM4RDJGODM4QjJDREVEQTRGM0U3NjJGRDk5Qzc3MUQyNkEKKzoxMDUwMjAwMDMzRTY0Nzg4OUYwNzMyRkNGNzY3OTIxRERFNjY0Mzc5QjcKKzoxMDUwMzAwMDdFOEJFQjM3ODc5NTIxREQ5MUM3NkQwQUNBRTM0OTVGMDcKKzoxMDUwNDAwMDJCRDE0MkMwNUY0QUE1MUE1OTU1ODQ3QUNEMzM3MTE4QzUKKzoxMDUwNTAwMEYwMDFBQkI0RjkxMDlGQURGRDcyRENDNUJBRkU5RjEyMzIKKzoxMDUwNjAwMEY0N0ZEREVBNzFFMzM4MDNFM0MwQUUyNkZFNjZCOUQ3MEMKKzoxMDUwNzAwMDYzM0JFM0VBODc3M0Y5MDcwNjk3NEVDRkJFQUU2RDU5REYKKzoxMDUwODAwMDVCOENGMjM3NkNBM0ZERDIwQzY3Mzg4MkUzRDNEOTZEMDkKKzoxMDUwOTAwMENBMzkyRTk3MzVFQkYwQjhGRDM3NjNBQ0VBNEY0OUVGQ0MKKzoxMDUwQTAwMDZBREZDMTM2NjQyRkQ5N0Y1Mjk2ODdBMTBDREY3RDIwM0QKKzoxMDUwQjAwMDhBMUY4RTNENzMwMzRFQTM4RDc5RUNDNTdBN0IxMDc3RTIKKzoxMDUwQzAwMDRCQzNEMUJFRTE3RjMzNDI0NkJCQ0Y2QzE3RDY1NTk0NUMKKzoxMDUwRDAwMEJFMDI2NDAwQkM0NEFBODYyMTlGNUQ2QTIxM0VFQkFFRkQKKzoxMDUwRTAwMEJEQ0NEODdEOUNDRUUzOUEzQ0I4QUY3QTA0RTUwNEVFMDMKKzoxMDUwRjAwMDA3QzcxRTFGNEI3MjAzNEMyQjZDNzdGMjU4RDUxMzg1RDQKKzoxMDUxMDAwMERBRUI0MzE2RTY4NzgxMUZGNEFCMTEwNUU2NzZCMEE0MEYKKzoxMDUxMTAwMDZERkZENTg4QjcwQTlCNDY3QUFCODQ2REI4MkUwN0RGNDIKKzoxMDUxMjAwMDBGRjUyMDlFMDNDMjBFODFGQTVDQkY3OTlEOTFGRUYwQkYKKzoxMDUxMzAwMEFDRDU3RkRDNTVBRkUzQkI4MzE1QzcyRkM1RkQwQUM4Q0YKKzoxMDUxNDAwMEJEODY0NEZDQzREODRBRTJFQkJEREY0RkE1NzYzRTdDNjkKKzoxMDUxNTAwMDQwODkzODYwRkNFM0Q0QUY1RjFEODFGNkVDMEY2QzNFRjQKKzoxMDUxNjAwMDg3NDZEM0IyMjA1RDI3Rjg5OEQ4QjhGQTVERTM3NDc2MDUKKzoxMDUxNzAwMEMwNzExNjE4NEU3NjY1RTk5MTRBMDdEQUFGQUIxNTVBMzkKKzoxMDUxODAwMEE3MTJGRjMzNDI0NjdCMzNCODE4RUMzMkFEQUI3RDBBMzEKKzoxMDUxOTAwMDhERDk5MTlGQkI2QjlGOUFFREFCQjM5OUMyQUUyQTYzMzkKKzoxMDUxQTAwMDY1N0FCQjJBOTk5RTkyNzY5NTk1RjlGRjQ2NzI4N0I1RTYKKzoxMDUxQjAwMDU5NTFFRjRFODIwNzg5RTRDMDREMTk1Q0VFOEU1MzNGODIKKzoxMDUxQzAwMDIzRkE5Q0FFNTAzNUM0RDdDMUQwMjcyRURDOEYxRkZDRUMKKzoxMDUxRDAwMDVBRTVGQjYwN0ZBRUMxOEVDQkM5RTI3RTgxNEQ3NjMwNTEKKzoxMDUxRTAwMEM4RTBCQjREM0Q5QzkxOTVEMEQ0RUVFRjVGOTZERjQ2NzUKKzoxMDUxRjAwMEY0RDExRTFFODU3NEZDOEQ4REU0NzBCMkYxQkE0MzJBODEKKzoxMDUyMDAwMEVCMDc4QzM5MzFBNDEwOTRGNDJCMENBNTMwQUI0RTNGMzYKKzoxMDUyMTAwMDE0QjJDNEUzRUY5RkM1Qzc5RjdCMDdCMzY4RDA2RjY2MjYKKzoxMDUyMjAwMDk4RjkxM0VEOEY2NTNERDgxNzhGQjczMkFBMUZDRDg0M0IKKzoxMDUyMzAwMEYxMkRFQTY3MjFGRTk0RkJFMzE0NUJEOERGMTNFNjZGRTAKKzoxMDUyNDAwMERCQjkyNDhDRkJFNDQyMTgxRjhFNDM4M0YxQTFCRTJDRjIKKzoxMDUyNTAwMDBBQTU1MUI5Mzg5NDREQjA2RjI4OTM2MEJGNTA0RjdBNkEKKzoxMDUyNjAwMERGM0ZENDk3RTAyNUExMjI3QTNFMjAzNDkwQ0EyNUExQzEKKzoxMDUyNzAwMEExMDQyRjBEOTUxMkJDMkM3NDI1QzE4MUEwMzdCMURFN0QKKzoxMDUyODAwMEEwNTAyNUMxQzFBMTZCRTlGOTkwRDA3NTA0MkYwRjREMzUKKzoxMDUyOTAwMDIxRTgwQjREQTNGN0E1QTE3QTgyNjVBMTVBN0EzRTM0ODUKKzoxMDUyQTAwMDM0OUZDQUMzNDJCNzUyQjkzQ0I0ODRFMEYwRDBFRDA0OTUKKzoxMDUyQjAwMDQ3ODQ5QTA4NTY4NDU2NTJCRDkxQTFCQkE5N0M0NUU4MDMKKzoxMDUyQzAwMDdFODI1Nzg2RUUyMzM4MkFGNDI4QkQ5Nzc2NEJBQTU4NUIKKzoxMDUyRDAwMDhGNzc2QjMzM0RFOEVGMDAwRUQ3OTA4RjkzQURCQjk5N0UKKzoxMDUyRTAwMDU5NUMyRjFEQzhGNDRGQzgyQThGRDdCMzVCNDA4RkJCQzIKKzoxMDUyRjAwMEJBRDYwQjY2NzFCRDkxODk3NDRERDBERTM0NDFBRjUzN0YKKzoxMDUzMDAwMEJFNjMwRjBENjA3MUJBQURGMzlFREY5RkMxNEExMkVGMEQKKzoxMDUzMTAwMDM3RTJGMjgxQ0ZFRkRBMkMyRUJGMzY1OTVCRkQyQUYyNEQKKzoxMDUzMjAwMEVGNjJFNjBCQzNBMzg5QzM1RTU3NTBCRTZDRDZBQzU1ODMKKzoxMDUzMzAwMDg5RUNCQjA3QjI2Q0Y0REQyMzk5QzFGOTU5MDBEMzhBMUIKKzoxMDUzNDAwMDRFRUM0NTc5MzIzOUVDNzk3NTM0RjJDQkEwOUNERjhDODgKKzoxMDUzNTAwMDg2RjYwQTlCMkRCNERERDc5ODY3MzdGQUQ3QjRCMThDOUYKKzoxMDUzNjAwMEU0QTJGNDJCODE1RDY3RDBBN0VCMDU1RTE4REJCQUFGMzIKKzoxMDUzNzAwMDk4RDY1M0JGMzJBRTdGREFBRUMxRjU2NUZGN0UzMUVEMTAKKzoxMDUzODAwMERGMzdEOUEzOEExNUVEOUJBNUEwQzM3NEY2RkZBNjM1MTgKKzoxMDUzOTAwMDc1M0ZDMUY3RjFGNkVDMzRDRUMyQjVFQzI1MzRCMThCRDQKKzoxMDUzQTAwMDVBQjREMTI5MDBGQjZFRjRCRjk0MDI5RkY0OEYwNDQ3RDYKKzoxMDUzQjAwMEE3NDI3OUMwRDNFMTk3MTA1RUJBMzUzMjNBMERFMEMwMEEKKzoxMDUzQzAwMDFERDE5NzUwREMwQzhFQjY4RDc2NDFGOUYyN0Q2QzBGQjUKKzoxMDUzRDAwMDJFRkZEMjU2NkQ4QzFCQ0E0MzBGRkJGNzAwMUJCMEYyOTkKKzoxMDUzRTAwMEI2RTA5ODc0MERDNzEzNjk0QTg3RjE2Q0ZBMDAwQzNENUEKKzoxMDUzRjAwMDI4NTc3Q0Q2QTJDMjc2Mjg0RTdGQjBFM0QwN0U5Mzc0MjUKKzoxMDU0MDAwMDcxMEY2QjFEOUIwREZGRDk2Qjk5QTc1NEM1RUZBRDZENDcKKzoxMDU0MTAwMDI5OTk4M0JBRDI2NzMzQ0UxQkU3MDk3QUU0Mjk5ODU3RDIKKzoxMDU0MjAwMDJGN0Y1NEYxRThGODY0NDc5NjIyRTlGMDE4RjI5QkY0RDQKKzoxMDU0MzAwMDRCNkU2RUNFMjJCRkU0RTY1NDRGMjU3NkQ5MzE4RTc5N0QKKzoxMDU0NDAwMDlFRDA5MDhGQUQ4NDI3RkJFQTYyRjJDNzQ5QkUwM0ZDNzEKKzoxMDU0NTAwMDFBRUNEOUY1ODJFRjM2NzVEQUJCODlGMUJCNDNDOEJGQzgKKzoxMDU0NjAwMDdGMTVGQzdFNUJGMDczMzJGQzNBOTE1NzQ2NUU3ODFERTcKKzoxMDU0NzAwMEVGMTdFQjEyRDZGMUNCQzhERkM5RUE5RDEyRjgzN0UzN0MKKzoxMDU0ODAwMDc5QjM4NUVEMDM1RDA1RkQwMjlGRjI3NUM1RDA4RkY2RkEKKzoxMDU0OTAwMEIxRTBFRjBCRTFGNUY4QkYxOERGNDYyRjgwNTdBNkU1MjYKKzoxMDU0QTAwMDkwOUMwNDdFQkQxNEZENjNDOUU0OEQ1REVDNjdDQ0VGNzgKKzoxMDU0QjAwMDYzNURFNTFDRjdEQjdBNDBDRUY1NEQyRUU3RjY2NkYxMkQKKzoxMDU0QzAwMEU3NDlFNTk3OTAzMzc2OTM3RkM3OTZDREZCMUJFQTA5QjIKKzoxMDU0RDAwMEE4RDk4OUZDRDRERTFDODM5RjdBODJFQUE5NDQ3OUMzQzcKKzoxMDU0RTAwMDA2MzBCMkEzRDMwNjQ1QzJCODRGMjkwQzZCNjUyQTU2QzUKKzoxMDU0RjAwMDQzQTE4Qzc4RUM1MTQyRkU4NzIyQjAzM0FDNDA3RjY4RTgKKzoxMDU1MDAwMDJBOEFEMEE5NzkyQzc1RTg3Rjk3RUJDRDUzRUJENUFGREMKKzoxMDU1MTAwMDM3QTlFRkUzRUI1MUYyNDVENkU2QkJCODVGNTI5QjAyRTkKKzoxMDU1MjAwMEY2Q0I1ODMxRUU3ODNCREMwRkIyRTY3QjNEMzZERkE1OUIKKzoxMDU1MzAwMDkzODM5QkJENUUyQUNCRkFDOUY4QjcyRTVCRjA2RkYzNUQKKzoxMDU1NDAwMDJBQzJBNzczNTQ2MkJCRTE1QkQ5QUFFMERCMEUzRkYyMkIKKzoxMDU1NTAwMDc5Rjg1QkNDODNGNjRDNjZGMzMxOTI0Rjk5MjA5RjE0MTcKKzoxMDU1NjAwMDkyNEZCQ0ZGNUVBMUQ0OUY4NEExN0M1NTc2OUVGMDAzMzAKKzoxMDU1NzAwMDc4NTI2Rjc0RkZERkUzRTcyQ0I0QTk3MDNEOERGMkVDMzUKKzoxMDU1ODAwMDU2MzE0RTAzN0E0OEMzNzUzQTBBQzYzRTBDRjE2NTI3NzgKKzoxMDU1OTAwMEJBNkI4Q0QzNTExQkM1MjI2OEY3MDJERUEyQjg2RjBGMUQKKzoxMDU1QTAwMDVCRENFNDY3QjJEQjVCRkNCODlFOTkzRDkzRTYzRkQ0REQKKzoxMDU1QjAwMDEzOUM5MDdEOUU3NUUxNDlEMzRBOTFBOEQzRUZGRkQ5MDIKKzoxMDU1QzAwMDM1MkVFMEJGMzU0NTlFNTQyQ0RGMENFNUY1MTVEMDZGMjgKKzoxMDU1RDAwMDU2MUIxM0U1NzVBRTkxREZEQ0VGMzEzREZCQjlGRENEMTgKKzoxMDU1RTAwMEQwREZBRTJDRkYzNDFDMEZGMEY1NzQ4NEZFMDExRTJCQUYKKzoxMDU1RjAwMEY5QUJCREREQjMwN0U0RkE4Q0FGMjc0RkE5NUM0RkI1MUIKKzoxMDU2MDAwMDgzNDgxRUNFQzE3NjY1N0JDOUVDOUJBMjZDMkVFNzQyMTcKKzoxMDU2MTAwMDAyMjZCMzZGMjRERjVGQjQ3RDIzQzYzQjNCRkJGQ0VCNkMKKzoxMDU2MjAwMEZGQUQ3REY3NkZEQ0MyNzRGRUM2MUUwRkI1NUEzNUY0QjAKKzoxMDU2MzAwMDY3NzAzRjhEQzVEOTRBRURCOTg1QkZEMThGRkU0NkUwNzEKKzoxMDU2NDAwMDAzNjczRjVFQzZCRjQ0RkVFMkU0Nzg4Q0QwNzhBNDlGMzcKKzoxMDU2NTAwMDUxRkExM0QzMDU1RjMxQUIxMjQxM0Q5RTVFRTFCMUQ2RTUKKzoxMDU2NjAwMDUxN0I2REVDM0JEMERFODMwMjRGNzI1REEzREM3QTdFMTIKKzoxMDU2NzAwMDEwQ0FBNTJDMkJFRUQ3RDE5RkU0Q0U4QUI3OEZFNThDMkMKKzoxMDU2ODAwMEIyQjg3QzYyNjIxRjc3QUIxODczQ0IyQTVGMDZCQTlDRjQKKzoxMDU2OTAwMEMzMDdCOTFGQTVFNTg3N0M1RDRFRUNDNTIyQUI1MDRFMTQKKzoxMDU2QTAwMEY4OTlFNjgxRkEyOTRDRkVGOTBERkVFNDA5NUYyOUNDNTAKKzoxMDU2QjAwMDBGRTMzRkYwOTU0QTUwRTlDN0EyNkVEOEVGNERGNDI5QTkKKzoxMDU2QzAwMDUxREMwN0RBMkRDRTA4RUFEMkNBMUU0RTg2RjE0RDdCOTgKKzoxMDU2RDAwMEJBMjU4MkYxMTFGQjMxODVFNjY5MkY0QjhCQTBGMDFCQjcKKzoxMDU2RTAwMERCQTMyMjAzRTM5ODY3MEVFQzcxMDUxM0QwRkZBNjYwREQKKzoxMDU2RjAwMEFEQzFGRjY1QzY2MzY3QkRFOTJGN0IxMDhGOEY1RTIwNEMKKzoxMDU3MDAwMDRFQkIzN0JCMzM0RUJCMEJGOTc0RDJDQzhFNjZCQjE2ODcKKzoxMDU3MTAwMDhGRDNDQUY4NjM4MTc3RkJCQTRBNTQ1OTBCQjg3RERBNDQKKzoxMDU3MjAwMDgzNDU1NkVBRUQyQTVEMUM3NDFGQjZGMzY4M0MwRURBMTkKKzoxMDU3MzAwMDdBODkzRTBFREFEODYzMjdEQUJCM0ZFRThDODMwNjdGODgKKzoxMDU3NDAwMDg1RkFDNDlGQkRCNTE0RjlGNzUxREZGNjY3RUU0NTdDQzUKKzoxMDU3NTAwMDNBNDRCQzYyRTgxMTk3ODY3RUZBRjIzREI5Mzg5RjU3MDkKKzoxMDU3NjAwMDRERTM5NzUwRkFGMUNDRkJFMEMzRDlDNkY4QzIxOURGN0MKKzoxMDU3NzAwMDc1MTk1MUUyQURFQzg0RUI1QkZBMTdFNTdFMThGRDg3RjUKKzoxMDU3ODAwMDlFODRFQkQwODg2RkQ5N0Y4REMyRjdCNUNDQTY3MEY5MTcKKzoxMDU3OTAwMDI3RjQyOEM4OTc0RjQ4MEU0NDE4RTk0REJGNDM3OTAyQjMKKzoxMDU3QTAwMEY1Q0QxOURGNTAxRkM1M0Q5M0M4MUIzOTFFQzA2M0ZGREYKKzoxMDU3QjAwMDQ0RjE1RkU4MkY2MTlDRDU5QUMzRjU1ODhEOERGQjRENjAKKzoxMDU3QzAwMDk1MjVFNThCNzE1QzM1NkU5N0UyRDBGOUZCM0I4NEJFODUKKzoxMDU3RDAwMDMzQzc4NUQ0OENBRkNCODNDMkVGOUQ2OEZFRTZGODRFMEQKKzoxMDU3RTAwMDg3RDAxNzg4MkZCRDlGRkM0MkY4M0E2QzZCQTFGOEUxNzcKKzoxMDU3RjAwMEUxNTkyQTVCMDlFRDlDMDk4RUM4NjcwOUJFOTdGMDVERTcKKzoxMDU4MDAwMEU0OUJGRTAwNzM3ODdGOURGNDRDMTIyRjNBQkNBMjgxN0EKKzoxMDU4MTAwMEUyQ0NFNjc4NUFFN0ZCREE5NDZBRDRERkQ1ODg0NzVEQjQKKzoxMDU4MjAwMEJGRTUzOTVDQ0Y0RjEyOTAzOTgyOUEwN0RFREJFQjFFNjEKKzoxMDU4MzAwMEY0MzA4QzdGRjVGRkEyM0NFQzQ2QkY1OEM3MEIxOEJGNzUKKzoxMDU4NDAwMDYwM0Y3MDkzQkZBMkJBRjZDQkYyOTU4Mzc1RjhBQzYwNTcKKzoxMDU4NTAwMDNDM0VCQkU3QzcxRTBEOUU1N0Y3NkZDRTBEQkI5MkUzRDQKKzoxMDU4NjAwMDcxMTJCNjA1NzhCQTFCMUY4QzI0N0Y4QzJGODdGQjM3RUIKKzoxMDU4NzAwMEJCRTU4RjYxODM3ODVDODhFRDQ5QTFGODY5Q0E5QkFBNzIKKzoxMDU4ODAwMDBGRUQwNkVDOTdFQjAxRUU0RjVFMjZFMjI2RTYzODVFNjIKKzoxMDU4OTAwMDc1Njg5MTQxQkVBNEM1MTQxNkQxQzUyRkQyQUM1QkM5QTEKKzoxMDU4QTAwMDNGOUIxNkIzRDI3M0YzN0FDQkNBODFGNTM2MzBCRURFOTYKKzoxMDU4QjAwMDI0RkU5M0QxNTNFMkRGRkM3Q0IwQzBGQkUxREFCOTFBREQKKzoxMDU4QzAwMEZBMERFREE5ODlFREUwNjY1MTRGOTZDREY5MDhDOUUyRDAKKzoxMDU4RDAwMEVFQjU2MjdEOUMwOThFQ0M0NzdGNTVCNTNERENCRjNCNjQKKzoxMDU4RTAwMEVCNUNFMkU3NDI3OTBFMzdFN0YwRkQ5MDdCRUExQjIyQTIKKzoxMDU4RjAwMDhFQTczNjYzNkI1MkFGQTY1OUNGMUY4RkY1OUJFMkIxQ0YKKzoxMDU5MDAwMDY5QzNCQUM0RjNGRTI5RjFEODFGOUFFOEQ3REQ3OEVDNTEKKzoxMDU5MTAwMDc4QjExRTJGOTQ4NzcyOTNERDY4Rjc0ODc4OURBMEUzRDUKKzoxMDU5MjAwMDk5NjAwQTBCODM3Q0JDQjU1MkE1MzgxNEYwMDdFOUM3MEYKKzoxMDU5MzAwMEMzMEYyQTY0NkY0NjZCMURBNDk3RUI2QjUzQzgzRjVCODQKKzoxMDU5NDAwMDVGQUFEMkZCRkEwRDJBRTlDRjI4Qzg4NzA1MjAxRjVFN0YKKzoxMDU5NTAwMDE1NzJDMkVDOUZBRDY0OEEyMTdFM0U2OTU4OEFBMTNDRDMKKzoxMDU5NjAwMDc1RDZGREFGQUU0MEZGNzI4NTREQzNGRTBFNkFEQ0RGMUIKKzoxMDU5NzAwMDFDRjZBQjY0QkY0MjFCQkUyOEZBQTcxRkI4Q0E4N0ZBNDEKKzoxMDU5ODAwMDRDRjJDMzQxQkY0QUVCMkQ3QzQ4RjU2MUI3QURDMjFGNTUKKzoxMDU5OTAwMDdENzA2RDY5MDRGMzU0OTgxMjhGRDM2QjdEQjFGRDdBREQKKzoxMDU5QTAwMDhBMDNCRkUzREQ0ODcxQ0U5NEJGM0UxQzA4RDBGRTMxQjAKKzoxMDU5QjAwMEE4OTU5MkRFRTRGMUQzMTRCMTRFQzdGNEE4QjgxMUY1NUUKKzoxMDU5QzAwMEY4ODdFQjZEMENGRDQ2MUZERTcxODZENjczREI4QUM1NEEKKzoxMDU5RDAwMDk0MTcyMUZEQ0JEMjNGNkNGNjMzOUJGRENCNURGQ0NBMDcKKzoxMDU5RTAwMDI2N0Y3MkIyN0M4Njk3NzIxMkM3RUJBNUJDNEFDNjFGOEYKKzoxMDU5RjAwMDIwQjZGNjdGMTMzOTI2RTVDN0JCNjI5RTYzN0E2Q0RDNUUKKzoxMDVBMDAwMEIwMTJGMDkwMzY1MzI1M0M0OEJFN0NFN0VCM0IxRjQ3NzUKKzoxMDVBMTAwMDM5OUMwMkZDQjE4QTIxM0VGRkUzNjVEQzg3QjBCOTRBQkMKKzoxMDVBMjAwMDQyM0Y3MkFBOTRFQjk4M0Y1MTEyQTdDQkQ0RTBEQ0NFNTAKKzoxMDVBMzAwMDMyMkVGRjY5MEQ0QjBDNzkxRjY2QkQ5MjVDQUU5RDVGRTcKKzoxMDVBNDAwMDZFQURDRkUxRkUwQUIzREUzMUFGODc3RkI0REVBOUFFMjMKKzoxMDVBNTAwMDdEQjAwNEJGQUZBRTlEMTU0MUI4QUU4N0IzMDFFNUFGRDEKKzoxMDVBNjAwMDU5M0U5OEY1QzQ3NTI2MzkxQkQ3MEYyQThCMENENThGNTQKKzoxMDVBNzAwMDVCQTM3QTcxM0Q2MUE3Rjc2NzUzNzhCRTQzQzhDOUUxNUMKKzoxMDVBODAwMEYyRDRGNDI3MTA5RTRERTFGOTBFNjEzNDBBRDE0RUZEOTcKKzoxMDVBOTAwMDIwMkREMjQ0RkJGMkM1MjM5MDRGNDJDQ0Q3MTZDNjc5QjUKKzoxMDVBQTAwMDdBNTNDOThGRDBEMjhCRDc1M0FGNDlFNTc2RjlERTRBMDYKKzoxMDVBQjAwMDlBQUYyQTBERjNFNjRBNUEzNzRENjIyRTNGQ0UwRUY2QzQKKzoxMDVBQzAwMEM4ODVGMTM0RjkyRDI5MTg1RjE4RTNCNkVFNDdENzRCOTYKKzoxMDVBRDAwMENCNjgwQjczQjAzOEJFRTI3OTIxQ0NBM0MwRjdGNDRFOEIKKzoxMDVBRTAwMEMxRkQ2N0E5RDNERTk3RUNENEUyNUNFNENCMUZDMkZFMTQKKzoxMDVBRjAwMDEwRjhGRUMwMDE3NUZCNjY5OEVBMDFERkQwOEM0NDc2OTEKKzoxMDVCMDAwMEJBODRFNjM4RjI5MUVGQkVERDA3RDdFREVGNTk3MDMwNzkKKzoxMDVCMTAwMEI2RDc1QTVEQkYwMUUzQzM4RDNCNTQ4QTJGNERCRkVEMEQKKzoxMDVCMjAwMDlENEJDOEVFMzZDNTI5RDU3NDY3MDlGQTUzOUE5NDU0MkIKKzoxMDVCMzAwMDFGQ0ExMzg5QzdERDZFM0JDOTk5QTYyMzY5QjQ5RjY4NDQKKzoxMDVCNDAwMDNBQUE4OEIyOUJFNEExQzRGQjVFQTg1NzMwMEM3Mzk1QjcKKzoxMDVCNTAwMERDMjQzNzI1RkU2MTVFNTcyMTdFMjQxRDJBNTlGNEMwQkUKKzoxMDVCNjAwMEE4QTJCRjZCNUU1NUU3OUY1NzJGMEZDOTBGRTQzMzM1Q0YKKzoxMDVCNzAwMDNFMEZENTZEQTVGOUI1QjM1NDFGOEUyRjI0RkM0M0VDMTEKKzoxMDVCODAwMEZEMzREQUZGNDkzQTM3MEE3RTk0NzQ1RTI0RThEQ0JFQkQKKzoxMDVCOTAwMEYzQ0I3QkFFODRGQTJERkUyQzhBM0FBOEJEMTlFMUExODUKKzoxMDVCQTAwMEZEN0QzN0YxODlDNDgzOUMzN0YwQzU3NEZEQkNGN0VDRUIKKzoxMDVCQjAwMDFDN0EzODg4REZBN0E3NTIxQzVGREFERDMyRUZDMDNDQzEKKzoxMDVCQzAwMEZGMUFCMTdGNkZDODU1M0FFRDVFRjQ1RkJDOUEzREJBREIKKzoxMDVCRDAwMDIxQjczQzQxN0Q2MUVGMDJCRUU3NjNCRjk1MUVGNjQ1RUMKKzoxMDVCRTAwMDg0QzVGNzc5QzlGMjFCOTZFNzJBMTc5QkRGQjA1Q0RGMDMKKzoxMDVCRjAwMDdGNjc3RUMzMzdBN0U3QUE4QkExNjdBM0Q1QjU1NkM5MzAKKzoxMDVDMDAwMDg4RTM1QkVFOUI2OTQ5NkI1REQ3QkY3OUZENDk3QTI4RDQKKzoxMDVDMTAwMDNCNzdGRjE5RTNGODY2QjlCMDVDNURDQzE0RTg2N0NENUIKKzoxMDVDMjAwMDYwQkUyRUQ5MUQ0Q0EzRkMyMEQzN0FCOTkwQkMwMUZBREEKKzoxMDVDMzAwMDNGOEU3NDQ4MjY3N0JBNEJGRkE3QkJEMkZGRTlGM0QxNUEKKzoxMDVDNDAwMDdGNDM3NkUwQTdGODFFQkJFQTU5NDZGQkMyNjdCMThDREEKKzoxMDVDNTAwMEYyQzQ1RTRDRkQxMURGNzY2NDMyQ0E2NzkzRjkzMTcyOEIKKzoxMDVDNjAwMDNDMzI0RkU2NTc5OEI0OUFBQkNCQzMyOUYxMjlBODI3MDkKKzoxMDVDNzAwMEJBQzExRkJGRkEwN0YzQzcyQkU3RTc4RjI4QUREMzg1NUIKKzoxMDVDODAwMDgyRkUwQjY1NUVDNkY2RjNFNzY1NzQ4MzdFNkYyNkEyMUYKKzoxMDVDOTAwMERGNzJENUQ3MTEyQ0VBM0VGRERBQkFEMkFGRURGQ0Y0QjMKKzoxMDVDQTAwMDBCMUUyNzdENjI2NzVGOTBGRDVFNTFFQjQ1N0UxOUVBMTIKKzoxMDVDQjAwMEYxNEZDNkI4RjlBRTk1NDJFRTE0MDFGREUwRkRDQjM5QzcKKzoxMDVDQzAwMDJBQzlCNTFGQjFDQjQ4NkU3RkNCNjJBMUYxQjY4M0JDQTgKKzoxMDVDRDAwMDdFNDJFOUQ2M0NDRjkwREU2MTYxNkIxNkI0QkJGQzNBRTQKKzoxMDVDRTAwMDQ2RjEzREFGQjY1MkMxNzJCRTA2N0E1QUVCRkU3Q0ZGNUEKKzoxMDVDRjAwMEQ2NzVCRTdGQkI4MEJDNTJGMjcyODkzRjk3MjE3RjNBMzYKKzoxMDVEMDAwMDM1OEZGNTdDRjJDQTlENjdCNDEzQkFDMThGRUVCQ0RDNDcKKzoxMDVEMTAwMDdGMjgzRjdBRjMyRTQyQUY3NjAzRkZDNUQ4NUUzMjM5MzMKKzoxMDVEMjAwMEQxREQzQzUwNThBN0FDNjc1NkQ3RkUxOUYzNTE1Q0FEOTYKKzoxMDVEMzAwMDMyRERDOUY1RjYzNjQ1RThGMUQyMjA5NURENEUxMjE2NzIKKzoxMDVENDAwMDdCODU5RTNGQkQ5REJGNTc0NzI3QjYyQjA3RTY2NTExNTQKKzoxMDVENTAwMEZFMTc2RTVEMTJCMDFBRjI0OUMyRjRGQzVFRkY2OTRGODUKKzoxMDVENjAwMDNGMTVGM0I0NUQzNDlGRUM4OURDMEYyOUU3MkZGM0I0QzIKKzoxMDVENzAwMEQzQzU3Q0IyN0JGMzc5NjcxRkUxNzlFRDEyNUZFOTYyRUQKKzoxMDVEODAwMEJGOTE1MTYxMzVFQzIzMjRERTk2QUIwMTA1RkRFODk5MDYKKzoxMDVEOTAwMDM5MENEMzI0NjA5RjMwNDg0MTNGNTdBNkRGNTg1RkUyNUIKKzoxMDVEQTAwMDNCOTdBREZGNUNDNTk0QUYyQUUzRkI1Q0RDQ0YwQ0MxMzUKKzoxMDVEQjAwMEY3QkFFNzA5RjZBRjQwOUYxMkNDMUZCQjMxNEZFQzRGNEIKKzoxMDVEQzAwMEVDQ0M4QkZBODhBOTM1RTdFNTIzRERGRTY0N0E1RTM3RjMKKzoxMDVERDAwMEY2MjdGNTc5MzJERTZFRDQ3QjVCNTM1ODQyM0ZDM0U3M0EKKzoxMDVERTAwMDYyM0Q4MEJENDJGRTY2NTVFOEI5QjE2RDQ1OTRFRkIyQTMKKzoxMDVERjAwMEQ0QUQ5MUZGNDE1NTdEQ0UwOTQ1NURCRkNGRjRDM0YyQ0YKKzoxMDVFMDAwMEQ2RTEyM0JCMkE5NTY5QkE3OUU3MDZCMjBDRTVGQ0VBMkMKKzoxMDVFMTAwMDFFODZGQTA1QzE2MkMzRkI5RTBEOTcxOURFRjc1RTVDMTQKKzoxMDVFMjAwMDY2MjgxNzg2QUUzMEQ0MkYwMkM0RUFDQjdERDdGRTlCRkUKKzoxMDVFMzAwMEExN0VGRjk2RUYxOENBMDMzNkRFNkNBODdGNjlBNENFNTgKKzoxMDVFNDAwMEYwN0VFMEQzRjMwQ0VGMDc2RjVENkEyODVGQkVFM0ZCRTMKKzoxMDVFNTAwMDg2RkE0REMyOEY2Q0M2Q0JGNjNDNkUxNzM1NTlCOTFDMEQKKzoxMDVFNjAwMDVBRTkyQTIzRkY2NjkzQ0JFOERGQkM0N0Q0QUJDQzE4QjIKKzoxMDVFNzAwMDU1ODI3RUY1QTY2M0E1MjU4OEVGQkRFOTU3OTA5RjNEMjUKKzoxMDVFODAwMDE5NUY5OEU1NUEzMjc5NkE3RUZFOUNBMEY3QTk5N0VDRDMKKzoxMDVFOTAwMDE2RTRFQjQ1N0I2MERENUUwRTY1RDdCQjZCNzA0RUVCQTkKKzoxMDVFQTAwMDA2RjFGOEFDOERGMTdDMjExOUFGOTFERjc3QzY2QkFDQjAKKzoxMDVFQjAwMDNFRUVBRjRENzdCMUJCMTJGMEM1M0Q3OTVBNDI3RkFBOTUKKzoxMDVFQzAwMEU0QTM2NDc4OTNGQzc4MjFCQ0JEMjBFQUZEQkQ3ODdCMTcKKzoxMDVFRDAwMDVGRTFGOUFFN0E3REIwMkRDMUI4NEU4OTc1MDVGQUU2NUQKKzoxMDVFRTAwMEI1M0M2RTBGMEQ0QjI1NEJERTQzRUJGMTYyRjU4MTFDOEIKKzoxMDVFRjAwMDA3RTg4Mzc3NTFCRjk4RjM3NDRGNTVCRjMxRkI2MTBEQUQKKzoxMDVGMDAwMEVCQ0ZFNkY1MkRCRTEyQTQ0QjMyN0ZGQUE5QkMyRUZFRDQKKzoxMDVGMTAwMEY0MDZFRTRGNEYzNUUwRUQ3REI5REU0RDdFQkRBNkY0QzMKKzoxMDVGMjAwMEFGQzg5RkRFNjRGNzk1NzRDNzlGRkUzRTdDOEJGREJEQjYKKzoxMDVGMzAwMDgwNzRDRUQ1RDE1N0Y4RTM5M0VEQTM0MjhDRURDN0YzMkYKKzoxMDVGNDAwMDEwQ0M2NUQ1RjRGQkE2NjRGQjYzMjlDRjYxN0Y1QzgyMkUKKzoxMDVGNTAwMDcxREExNkRDN0YyOTA5RjVBMDM1QkY5Q0Y2Q0ZBNDBGQjYKKzoxMDVGNjAwMDVBNDAwRjNBQzg0RkMwRjY2QjUwNUUzRUM2QzJFRUQyRTIKKzoxMDVGNzAwMEUyRjM5NkY2QkM4M0Y5OUM3Njk1RTg5QTlBOEY3OEY5QzUKKzoxMDVGODAwMDIxNUI5NkEyRkU0M0Y2OTlCOUY5MTdBMUU3RDk4NUUzRkIKKzoxMDVGOTAwMDdENjRBNzREODRGOUFGRDJFREFGMjU3RUNDRjEzRDg5NkMKKzoxMDVGQTAwMDlGODkzRTFFQkY1QjBERkExMUUzN0JCQjczQjk5RTVFRkEKKzoxMDVGQjAwMDBERkI2RkM0QTMyNzNCRTBFRDgzRjYzQzNDN0YwMkM5OTkKKzoxMDVGQzAwMDkxM0I5Q0Q2OEZDNEFCMzlDRUQ3NURCOTMzMjI5RkYzQkEKKzoxMDVGRDAwMEEzQ0U4RTFCOTE5RkMwM0YxMzNGQUZDMkU3QkY1NEVDQ0YKKzoxMDVGRTAwMDlGQzdBOTgzQjZBMjFGRjM3NENDNEU3ODUzMTlDRkJCQjkKKzoxMDVGRjAwMDZDREM2NzYzMTFBMjIzQ0Y1Rjk2NzRCNEM1RDZCNEEyREMKKzoxMDYwMDAwMDdFQjYzMTczQkVCMjk2ODFGM0I3RURFM0U3QzQ1ODBFQTYKKzoxMDYwMTAwMDdGMUY2NkNFOTU2OEY3NjQ1NDE4RjU1N0E2REZBOEJGQjIKKzoxMDYwMjAwMEIyQUJCMjRDRkFDQ0E4QkZGMkFCOERGQUFCMjA2OEQ0QkQKKzoxMDYwMzAwMDVGM0QxQkNBNENGQUNDQThCRjBBNDNBMzRERkFDQ0E4QkIKKzoxMDYwNDAwMEJGRkFBRUZEOEU0OTlGMTlGNUQ3ODA4RDQ2RkQ3NTY5NjMKKzoxMDYwNTAwMEM0QThCRjA2M0VCREQ0QTRDRjhDRkFFQkYyMURBQjBDOTYKKzoxMDYwNjAwMEVGNEJBMzc3MTlERTBGRERGNzIzNDNCOUJDRjUxMTQzREUKKzoxMDYwNzAwMEZEMzlGQjdGNEU3OTNEMjMwRTNGNjFBODM3QjJFREE3NzYKKzoxMDYwODAwMDg2N0E4MEYwNTZDQ0ZGOUU0OTI0NjFFQ0NBOTNDRjFCRTAKKzoxMDYwOTAwMERFQ0YxNEY2REE1NTFEQkYzNEI0QzM1QTc4MUU3NzE4MTQKKzoxMDYwQTAwMEZFMjFCRDNFNjI0MTNCMUEyOTU2RDZGMTRBNEZBMEVCNzQKKzoxMDYwQjAwMEEyODhFMjhCNDJCNUI5M0JCNjBEQzc3MTdDRkFDMTM1RjcKKzoxMDYwQzAwMEZCQjA5RDM5MUI4REY5REY3MzIzQzY3MjIzMkJDRTQwQTUKKzoxMDYwRDAwMEI5RDAwODdDMTEwMTNFOTk4Rjc5RTEzQUY5MzY5RjJEQUMKKzoxMDYwRTAwMDE2RTcwMkJCQzc2NzczRjY1RkM3Mjg5RjM0RUM2RkM1MUUKKzoxMDYwRjAwMEJDNzczOTRGQzk2RjdFQzE2RjcyN0M3MkJFRjNDMUZFMkYKKzoxMDYxMDAwMDhCNkFGMTc5RkFFMTFGREY2RkI2RDk5MTZGNjdFRjUwQjMKKzoxMDYxMTAwMEQ4MjM0QUQ3RjkzNEVDQkM2RjREQ0YwNEYzMzJDRkMzNDgKKzoxMDYxMjAwMDZDODdGRTI0REYxODNGMTlBN0JBMjg1RTcwRkE5MEVBNDAKKzoxMDYxMzAwMEUzRkU0NkUzM0E1Q0JBOUZDNzA5OTYzRUE3OTBCRkNFRkUKKzoxMDYxNDAwMDhDMEY2OTlGMjZDMzhCMUFFNkZCODZDNjFDMTY4OUU4NEUKKzoxMDYxNTAwMEQ2OUYyNkYwRTFGMDFBRDdERjY5RkMwRjFDQ0Y2MzZBRTcKKzoxMDYxNjAwMDA0RjM4RDUyQjQ1NDMzQkYwRDhGQjJBRTc4NEUyQjMxNDEKKzoxMDYxNzAwMEFFNTMzMzlFRERCRTFFMDlGOTRBODM3RjM4OEVEOUUyQzUKKzoxMDYxODAwMEZDQTE5OUFGQ0M3ODVGQjRFMzNFM0JDQUMzOEJDNUZCOUYKKzoxMDYxOTAwMDlCRjk4OUUzMTJBMEVEODZEOTEzRTRENzQ5QkNDMkJFQUUKKzoxMDYxQTAwMEZEM0RENDIzQzlGNkIzMUZFNTVGRjQ3RUY2QTNGQzdGNjMKKzoxMDYxQjAwMEVDN0VGNkY0RjlGNDVDM0JGQURCQzBCRTM0RkJEOUNDRTAKKzoxMDYxQzAwMDdBNThEOUI5RTdDRjRBM0FGOUI1REIxQ0I4RUU4MjNFMjYKKzoxMDYxRDAwMDI3Q0Y4MzMxRTlDOTkyMTI4MzlFRUNEQ0Y3MUU1MzY4MDYKKzoxMDYxRTAwMERGQkIyREMzQUY3ODYxM0NBRjY0RjgyRDA4QTc2NkY4MUMKKzoxMDYxRjAwMDU1QUY2RUJFNEQ4MDE3M0FGNzAzN0E2QTVCMDIzQkYxRUEKKzoxMDYyMDAwMDZBQUZCNDhGMDJFNDM3NTk1REM5RUI5QkVCMERGMEYyMzYKKzoxMDYyMTAwMDczNDJCQjczODc3QkM5RkUzQzVBRUEyNUZCRDMzREZDMjYKKzoxMDYyMjAwMEJDRjZFN0JEMjI0RTc0MzdDNjIxRkJDN0YzODMzNjg4MjAKKzoxMDYyMzAwMDc4MEQyQzNCM0ZEMjZEQjUyREUwRDVFNzBGQTc3QTMzMTMKKzoxMDYyNDAwMDQ5OUZBNjhGN0NCRTE1RjNBODlCM0MxNjhGQTIyMUU0MjQKKzoxMDYyNTAwMEY5RENDRDJFNkJENTE2RjE1RDhFRTEzQjNFNEUxNUYxOEUKKzoxMDYyNjAwMDBENzhCNUJBQUM1RkU5RjlGNjZBMkZFM0U3QUY5MkNDRTcKKzoxMDYyNzAwMEYzNkEyRjhGMTNEQjU4NzAwM0RBNDMzMjNFNkMzQjU2QzAKKzoxMDYyODAwMEU5NDQ3OUQ3QzRGQzFFMkUyNzdEMUU3REZFODc4REYxNDMKKzoxMDYyOTAwMDc4RjA2ODExMUY5NkNGNTVDRjM3Q0JDM0ZBNkQ0NkYwMTMKKzoxMDYyQTAwMDVCREUwNDc5NThDQjMyRkM1NzIzN0Q0M0Q2QjAwM0VEMzcKKzoxMDYyQjAwMENFOTAzM0YxQkU3ODlDNTdDNEVEQzQ3Q0MxMDAyNUJFOUUKKzoxMDYyQzAwMEEyNzFBODE3MUZGRjAxN0IzMzgwRkQyRTU3QzM5NDI3QUYKKzoxMDYyRDAwMEQ5RTQxRTVFMTI3NDc1REZDRjM1Q0REQkM1M0U5QUU2N0MKKzoxMDYyRTAwMDNEOEY3RDA0RjZFOTY0M0M0N0U2Q0ZFODYxQTU2RDg3MDQKKzoxMDYyRjAwMEQ1NTc4MkY4NUU4QkZGM0Q5MkZDQjQ3NTg4OUYyRTc5NEUKKzoxMDYzMDAwMEFGRTIxQzJFRUNFM0NFOUJDNzJCREJEOTk1RTU5RkVCRDAKKzoxMDYzMTAwMEU1Rjk4NkYzQjEzREZGMDA0RkIzQUE2QjI3RkQwMkVEMEYKKzoxMDYzMjAwMDQ4M0Y0NzM3RkM1NkRGRjMyNkYwNUIyRDU3N0QyNzUxNUEKKzoxMDYzMzAwMEJGNzcxNzhGQ0RERTJFRkVDMjY2RUY3OUZDODU2NzhGQTMKKzoxMDYzNDAwMDBDQzhDMDc4QjZGNDc3OTlFQkM5NzM5MUIyQkMzNkQzNTgKKzoxMDYzNTAwMEQ4RkY5QTMyNUVCRTU3RDBFRjc3RTI3RThBMjdDNTM4RTMKKzoxMDYzNjAwMDlDQTZGM0EyQ0UwOThDRUVFOTkwRTc0QzY1M0I0RjdBRjAKKzoxMDYzNzAwMERENTRGRjhFRUNEMTRGRTI3OEQ3MTQyOUI0MEY1RDkzMzIKKzoxMDYzODAwMEE5MThGNkEzQjc3ODJCOUY0NDdBM0MyRUZBN0I1MkYwREIKKzoxMDYzOTAwMEVGRTY2MkVFQ0YzMUU3NjFDRTExRjVFNzc4NDcxM0M0M0YKKzoxMDYzQTAwMDczQUQyOEM3RUNBQTlBMTA4RjRGN0JGOUY4Mjc0MzQzQTcKKzoxMDYzQjAwMDk0MUYyN0ZDNkVGNTBGMkE2MkZGNjRCQzE3MDFENkY5MDMKKzoxMDYzQzAwMDVCNjkyMDdGOEVBRkI3RDFCOUQ3NTlBQTZCMERGMjYzNDUKKzoxMDYzRDAwMEIyN0IwRTZBMDcwNTI4RkZFOUVGM0QzRjg2Rjg0Q0NCRkMKKzoxMDYzRTAwMEVBQUE1N0EzREU0RTdCQzY3NzkxRTdDODdFQ0RGMUQzRUMKKzoxMDYzRjAwMEJENzg3RjVCMkFFN0QzMEVCNzhCRkNFNkU2N0E0NzA1Q0MKKzoxMDY0MDAwMEZERDcwQkJGMDZDQTc1RDQyRjU5MkE1QjlDNDhDRjFDRjkKKzoxMDY0MTAwMDE1NzJGNTlCOUY2QkU2Rjc3OTY0QkI1Q0Y0OURGOTVDQTQKKzoxMDY0MjAwMDczOUJCRDZENzUzRThFRjcyQUM1ODdFNzE3RjI2QjNDRUYKKzoxMDY0MzAwMEJCRjM3M0YwMUNBMzQ2M0VCRTM1NDUyQ0JEMDJERjk3NkYKKzoxMDY0NDAwMDVBRTg3REU2RjU5RTM1MzZDQ0ZCRDYxODY2RUUzMzFCNTIKKzoxMDY0NTAwMEY0RTM4NjdFNTIwQTc4MUM2NzdERjhCQURERjk1MDJGODYKKzoxMDY0NjAwMDQzRUI2MEM1ODNFOEJDRjc3ODJGQUVEQjZBOUUzRjZGRDUKKzoxMDY0NzAwMDlFREY1NzAyMUZBRUQ1QjBCRjQwN0M2ODg5RjNEMEJGMDYKKzoxMDY0ODAwMDEyNzgwMDc5RjM2N0E0NDdBNUM2QjZGMzczNTkzQzBGOTkKKzoxMDY0OTAwMDE2RDk5MkYyMTU3RDNDNUYzQjBERjM5REZBNzI3OTgzMUMKKzoxMDY0QTAwMEVGQkZDRTFBNzMwRUJGOTNFQjRCMTVGODM2OUZFNzRFMzYKKzoxMDY0QjAwMDI5QjhCOEYzREM5MzZCMTI4RkI3NUYwMUU3ODdDMzE5NzQKKzoxMDY0QzAwMDgxOEMwMkU4NzdGMkE4OTVEQzFGRjZGNUI5NzNFQTcwQzMKKzoxMDY0RDAwMDM0OEVGOTNBODFFRjE5RkEyQjUyNzJCODFDNEVEMTM0MkUKKzoxMDY0RTAwMDkyQ0JDQ0EzNTA5RUFCNTNGMzM1NjAzOUM1NzU4NTQ3MkQKKzoxMDY0RjAwMDQ1M0JEOUMxRTM5MjZDQTY4NUUxRkQyQTYzNDQzQkZFOEUKKzoxMDY1MDAwMDZBQTZGQ0ExODRGQjY1Qjk5Q0I1QjIzRjQ4RkU1NzA1NUQKKzoxMDY1MTAwMDcyODZBMzlFRTU3RjYwM0ZBRDRGODNGOThDNzExREEwMEQKKzoxMDY1MjAwMEY4NjQ0QUJGQzU5NTc4QUVFMUU1MTlCQzhEMUYyNTM5RTEKKzoxMDY1MzAwMDM3MjBDRkJCNzc5RUVCMEY0NzBFMThDRUY1REIxRTNEMDUKKzoxMDY1NDAwMDYwMzhEN0NGMUUzREYwRjc5Q0VCQUYyQzc4RjRDMDNGRkUKKzoxMDY1NTAwMEYzNUNCRjk0Njc4N0Q1RTBFMURCMDFGRjM3MDA1Mzg1MkIKKzoxMDY1NjAwMENBMTA1QTU5MEREMURCNEI3OEJCNUVFMDM5RkMxNUUwRkYKKzoxMDY1NzAwMEQ5MTlDN0YzMEQzQkY3MTNGRTBFREI2MERDRDBCRjZERkUKKzoxMDY1ODAwMDM0NDdCNUVERkIxOTkxMjY5MjhCMTFFQUY3NDY2N0NCOUMKKzoxMDY1OTAwMDM4REM3N0I2REIzQjg2NjBCRkVEMkZCRUREM0IwQ0YyMEYKKzoxMDY1QTAwMEU0QzgwRkNFQjgxOUYwREY4N0Q2MEUzNzNFM0Y3OUM3NjMKKzoxMDY1QjAwMDFCNkVDNEQ3OTEzQjU0QjJEN0U4NUNCNDJFMUZBOTVFQzIKKzoxMDY1QzAwMEYwRDU0QjA1ODE5QjkxQUY2NkFDRjhFQjcwQkQzRENFMkQKKzoxMDY1RDAwMDQyQjlBNDdGRTc0NjU0NEFCRDkyRjI2RkZFRDM2OTgyNjYKKzoxMDY1RTAwMEU5Nzg3OUUxRDY2QzQzNTlFQUU1ODU4RUM0RTdENDFGOTIKKzoxMDY1RjAwMDExRUI2MkVFQjM5QkVEM0QzNUVDM0ZCODAwRkIzRjI5NUMKKzoxMDY2MDAwMEYyMUI0RTZFNzdEMzNFNEM4RUE3RUVEOTUyM0JFRTNCM0IKKzoxMDY2MTAwMDNGRENFOTYwNTFGMjAzQjdEQTE4RjlCM0ZDMTM5NDNDOUMKKzoxMDY2MjAwMEJDQzc4OEZGOTlDN0Y5Q0FBRTM0NkE2RkQ2ODMyQUY5MDYKKzoxMDY2MzAwMDlENkFBMUFGMTBFMDM1Qjg3MzJFREYwNzlCRTYzMUVCMDIKKzoxMDY2NDAwMDg4MzYxRUU1RDVBQzc1MEEwQjZCQkNGRTFENzg3RjQ2RkYKKzoxMDY2NTAwMEU4NEU4QUMzOThFNzY5RDYyRjczOTJEQzlGMzM2N0U3QzkKKzoxMDY2NjAwMERERjRGRDRDRTZCRjFCRUREOTU5MkRFNkY3RDc3Qzg0NTAKKzoxMDY2NzAwMDRDM0VFNzAyRjE5QzdCMEI4NERFMTlDRTQ2OUNFQjRCMzMKKzoxMDY2ODAwMEYxQTM4Q0MxREE4NUY1Q0VDOTE1N0M5MTdFQjJDMjQ5RTEKKzoxMDY2OTAwMEYwQjMxNTFFODIzNzE3NzAzRTlFQkY2M0Y3MkIzRDY5MUUKKzoxMDY2QTAwMDk5QjcwRTQ3QkRGNEQ2QkVGQUI0OUJCNUI4REQzRDdDQjQKKzoxMDY2QjAwMEYzQUQ3QjFFQTVBQUM2RkNDQzFBODFGNzExMjIyRjczNUQKKzoxMDY2QzAwMDhFMzhGNzUwN0VGOEZDNzk5OTM1ODg4RjIxNURDNzJCN0QKKzoxMDY2RDAwMEVERUMxQTkzREY1N0RBREQ2NjdDOUNERTM3MjYwREY5ODgKKzoxMDY2RTAwMEUzRjkwMkIxQ0YxRDAxNzg1MUZGN0VCQzI0RkI2RUExRkUKKzoxMDY2RjAwMENBRUY0RDMzM0Y5N0VCRTg2NkMxRDczM0I3NEM1OUQzNTgKKzoxMDY3MDAwMDAzRkE2RjdBRjFBMzNFNkRDNEE3REM3RjUxMkVGMDU1REEKKzoxMDY3MTAwMEVFNUFEMzhBRjMyRjY3MjZCRjYxOTgxRDYyM0E3RTA2MzAKKzoxMDY3MjAwMDdFNTI1MUVGOThGOTU2RjIxMzNCQzRCRjc3MEFCRjQ2MjkKKzoxMDY3MzAwMDI3QkZFRURDNDBGODk1N0M4NTI3MUQyQzY4QzM4MUU1REEKKzoxMDY3NDAwMDYyQTlCOEYwM0Q1N0IzNUE4Q0U1NTNCNkI2M0UyODRGMTAKKzoxMDY3NTAwMEU2OThGQzBEQTc5NEM0RkJCN0JEMDVDNTFDMEY5QTdGMzYKKzoxMDY3NjAwMDNDRTY1RkNDNjI4MTM1REMzRkNGRUZDNzM5Njk2RDc5OUMKKzoxMDY3NzAwMEU1NzY1Q0U3NUJGODNBNUJGODhCRTdGRTFCRTVEN0JDOTgKKzoxMDY3ODAwMEZGN0EzMDFERTVEN0M3RDY5NjNDRUM2RkMxNTNBQkQzMkIKKzoxMDY3OTAwMEZEMjhDN0FDRTE3NEZDRkVFMzg4OUFGMDFDNzE1MTBGMzAKKzoxMDY3QTAwMDQ1RTZFQkJCMzA0RjZEMTFCMTFBRkM2RjY2NzgxMkNBMkIKKzoxMDY3QjAwMENGM0YzRDY1RjNBMDFGQjZGMTY5NDdENDAxRjg1OEI0NDcKKzoxMDY3QzAwMDlERTMxMUNBNDc3OUY5NEVDMjU3RTMwRUUzQkE5Q0Y3MkQKKzoxMDY3RDAwMDFGMEZFNjY5RTQwRjA4RjcxNEY4RUI4OTIyN0NEMTE2NDUKKzoxMDY3RTAwMDFCRTVCNTJFM0FBNEZBQjA5QjQ2RDY0MUYzMzM3RjhGMTIKKzoxMDY3RjAwMEUzODgwMUREMUFCN0FBQjVGNjhDQUVFRkMxMTJCMkUzOTkKKzoxMDY4MDAwMDdBNkJEQ0NFRTlEOUI4OUREM0FCRDE2NDg3MzYwOEI5QjEKKzoxMDY4MTAwMDZERTZGRkNDMUU0NkJFMDdGQzkwNUY0REU2REJCMjA4N0UKKzoxMDY4MjAwMDk3REY0RENGM0MzQ0U0Mjg4Q0VGQjMyREJGNEQ1NzA2OEUKKzoxMDY4MzAwMEM1Rjk5RjYxNTYyOEUwRURGNEQ2RkExOUY2RjNEQ0Q3RDYKKzoxMDY4NDAwMDczNEFBQzkzNEVCRDIwRjQ5MEI2MDMwNjk2MEZDNTlERDcKKzoxMDY4NTAwMDFDMkVCMDQ1RDNBRjA0QkMyQ0Q4NkNGMzg1RTFGMTgyN0IKKzoxMDY4NjAwMEU3NTRCRjBCRURBODc3MUM3NEZGQzRGQ0U3NUU3RUVCMUEKKzoxMDY4NzAwMDBBMThERkZDNkRCNjlDMDk3QzFBMkU5NERGOTI1RThEOUYKKzoxMDY4ODAwMEM4RTc2NTcxRkFDQ0ZCRjlDQjc2Q0NEM0M0RTc3NzY0NjMKKzoxMDY4OTAwMEM1RTkzNDdGREI2RTNCRTY3RDlBRjEzOTY2RUI2RTNCRjIKKzoxMDY4QTAwMDVGNkYyNjdBNkQzRDNBMUVGNTc2RDMzMzY3RURDODBGREMKKzoxMDY4QjAwMDFGRUY1MjU4N0U1MUQ3RUYxQjM2QkY5QzhFNzIwNkYxRTgKKzoxMDY4QzAwMDg0RkE0NUQyQUQ5MzhFNURFODE3OURGNENCNjE1NENGMjkKKzoxMDY4RDAwMDgzNzE5RTBCRDFGMTczM0M4MzUwNEVGQ0ZFQjM1RkMyQkIKKzoxMDY4RTAwMDM4MUFERTc1RjgxMDBGMEQzRkJCMzUxREU3RjM5MTc1QjMKKzoxMDY4RjAwMDMxRTdGQkM3NTdFN0ExREU2RUIwODVGMzNDMDRGOUYzM0YKKzoxMDY5MDAwMDg2NERERjI1N0U5Q0YzRkE3N0Y5N0Q0RUNDNUY4MEVCRDgKKzoxMDY5MTAwMDE5RTY1QjgwRjM5Q0Y1RDgwRDM0Q0ZEOTJDNDhGQ0Q4MTAKKzoxMDY5MjAwMEYwMzhCRkRGRjA0QjJCQUI0QUI0MUY3ODRDQUM5QjhGRDkKKzoxMDY5MzAwMDlFNzBEMEU2RTEyMzNCRTNGNzg1RkM0RTE1Rjc2MTJEMTEKKzoxMDY5NDAwMDIxN0JFNUJCNjJDRTIwQTFBOUZDQTU1M0QwQUI4NzhDRUYKKzoxMDY5NTAwMEZCNzNGOUQ2Mjg2QTM1NkVCOTkzRTREQjI3QkRGREY5RTAKKzoxMDY5NjAwMEI4RkUwMTBGNDZGRkVDRUJFM0YyODU1Q0E0N0I1REU4MkIKKzoxMDY5NzAwMDNCRTBCRjMxRjgxQ0VCQjdEQUZDMjk0MzBDREY4OUZDQTQKKzoxMDY5ODAwMDVCREVGRjMyRDEzRjhDM0IxNUZEN0MxRkU1MTlGN0I5NkIKKzoxMDY5OTAwMDEyRkVCNjg3RjRBQkIxNTZBNkU3QjM2NDcyNjBDQjNBODkKKzoxMDY5QTAwMEUyQUYyRjBFNzEzOUIzMjgzMkE1OEFERUI3REFBMkY5MjkKKzoxMDY5QjAwMEY4M0VCMkZCN0E4NUU0MDREODIxODlENkY5MTY5QjU4QjMKKzoxMDY5QzAwMEU3QzZGNzMwNEVBQkEyQzdFRjJFN0U3RTRGRjJDQkVDODAKKzoxMDY5RDAwMDA3QTBCRTZFNURDN0Y5QzcxRTdGNUUxNDVGQUYzMjdGMzIKKzoxMDY5RTAwMDYzOEVDOTlFOTNEMDJDMjcxRTMyQzkwOUY5M0Q3QjJDOUEKKzoxMDY5RjAwMDM3RTFGOTg4Qjg3QzA4MTNGRTE2RDgyMjNGNzkwNEQ3MEUKKzoxMDZBMDAwMEY1M0IwRTNBMTdCOUUwMzkxQkRERUZGM0U5QjM3QkRFNTYKKzoxMDZBMTAwMEJBMTlGOEZGRDNBRDcyM0QxQkU1QUY3OTNEMzczQzdGMjYKKzoxMDZBMjAwMDAzNEJCNDlFM0ZDRDA5QjA4NEVCMTk5RTI3NUNDRjM5NTAKKzoxMDZBMzAwMEZDQkNDMUZGMjlGOTNCMjc4OUZDRERERDQzRDg2MzNBNjMKKzoxMDZBNDAwMEJCRTM0QTI4N0VGMkQzRjk4NUI0M0YzM0UxNTdFMkQ1NjAKKzoxMDZBNTAwMDJDNEZBQkQxNThDOEVEMkE0RkUxRUYxMEQzRTE1M0UyRjAKKzoxMDZBNjAwMDUxRjJFOUJDRkY1QzQ4RkQ3NEYyQjNFNDU3QzlDRjlEMTUKKzoxMDZBNzAwMEZDNkE5RUI3MTE5RkU2RjdDREI4NzdDQThERDNERkI2MTMKKzoxMDZBODAwMDBBRjZFNTE4QUY3RDUxQTVGQ0JDNzZBRDIzM0QwQkZBQTcKKzoxMDZBOTAwMDVEMkRGMjdCREEzREEyOUNDOUNCMURCOUY2MzUyODRGOUUKKzoxMDZBQTAwMEU0RjM4RTE0OUVFRkQwMUVFODQ4Q0ZENEVEMDc4RUVFQUYKKzoxMDZBQjAwMDU0RDNGMTNDNDA1QjI0NzE1RTA2NjU2Q0U0RTJFOUQ2OTgKKzoxMDZBQzAwMDY0RUY1N0QyN0E2ODRGRTVGRUJFRjY1NEVFRTcxQkE3OTcKKzoxMDZBRDAwMEJBRkE4NDcwN0ZEN0MyRTM0QjMzNTdERTk0OEVGQkZCNDgKKzoxMDZBRTAwMEY2OUQ3RDI3NTdFMzdFNjBCRkNBNzM4RUMyN0U2QjAxMjEKKzoxMDZBRjAwMEUwQjc5RTRGOUQ5RDY0RTE4NzQ2QTFGREJFNzNGRTA0RjUKKzoxMDZCMDAwMDZDNjdFNjdBMjM1RTY2QkJCNkQ4QjE5RDJGRDkxRDA0QUIKKzoxMDZCMTAwMDY3M0Y2MDhCRjMwOUZDNkYxRUU2NkIyMTlGM0Y2NjdBMkYKKzoxMDZCMjAwMEJFRjM1QUUyQUI3OTI2QkUwQTIyNUYyNTM4NEZFMkVBNkQKKzoxMDZCMzAwMDI5RjhBQTk0OTVGMkZEQjY4ODhGMDlCOTM3NEUxRDM0MEQKKzoxMDZCNDAwMEI5MUFGMzI5RjdGMUYzMUVBNzc3QUE2QzBEQ0VGNzU5RkUKKzoxMDZCNTAwMDExMkYwQkU3MTJCRjJFMDJGRUQ2RkI0RDNGNDNCRTFCOEIKKzoxMDZCNjAwMDkwNUNDRjdGRjZDMjkxRTFCNzQzOTUwNUZGRkRERTkwQzMKKzoxMDZCNzAwMDQ3MDE3RUY2REZFRjVDRjIyQjJDRkZFMkVEM0VFRkIxM0EKKzoxMDZCODAwMEFFRjVDN0VDRkFGMzJEOTREN0I5Q0I0MUY3OUFCNkVGMkYKKzoxMDZCOTAwMEZBNzU5RkRCQjFGQzRCMDdERDJGREFCRThBRUZCM0MzN0EKKzoxMDZCQTAwMEJCRENBNEZGREI3QjczN0JCMUU5QzVCMzQzREE0ODdGNzEKKzoxMDZCQjAwMEYxN0I4MzQ3RjRFNEU3M0U0RUVGRkNDQjA3MEFFNkYzQjQKKzoxMDZCQzAwMEVEODQ1OUExN0MxNEZCQjdDNjVGQTZEMDNFQkRGREM1QzAKKzoxMDZCRDAwMEIzODZGREU5REYzQjlGNDVFMkRDNTVCQjlCNTVFMzM5QkUKKzoxMDZCRTAwMEU5RjY0QzdFNEVCNUYxNTcyMzlGQzQ3Mzk3MEJCN0VGNzAKKzoxMDZCRjAwMEI2RDdDM0ZCMzFGRkZCQUY0MzUwMEVCNTNGQ0ZFRDBFMTEKKzoxMDZDMDAwMEIwODczNzMxMUY2M0EzMUZCRDY3ODMwREU4NzcwQTZEMTcKKzoxMDZDMTAwMDQ0NTgzM0VGM0Q3QTcwNjI3ODUwMjJCQzcwM0NCNDAzMjQKKzoxMDZDMjAwMDFFNzA1RTgwOTcwNjk0OUZDOUYwMzFCNTI3M0Y3RkZDQTgKKzoxMDZDMzAwMEFGODc4RkNGNkZDMUZFMTdFQzFDNDFGNzBDQzdGMUEyRDUKKzoxMDZDNDAwMEY4Rjk3MzM3RTU3QkMwRkNGOUYzNUQ2Nzg3QTAxRDc1MjQKKzoxMDZDNTAwMEExRjkyRUZGRkY2Q0JFMEZGRUNCQ0U5N0YzN0JFRjlFMEMKKzoxMDZDNjAwMDVDMUY5OUY5QkUyQjVGRkZFMjM2MkFGRkNDRURBM0YxNDIKKzoxMDZDNzAwMDc2NzNCREJGRjAyRkJCREVGRjM5RjQ3RUUzNUY3NkJFRDcKKzoxMDZDODAwMDE3QTJGNzdFNDE2RkI3MDdFMzMyRUQyRkZFQjUwRkJCQkEKKzoxMDZDOTAwMDg4Nzk5RkZFN0Y3NERFOUQ3NjhGQzVFNzFDMDZFMzdCQjcKKzoxMDZDQTAwMDk3NDU2RUE4NTQ5MkU3OEYxNkY2MzJFRTMzRTQzRERDM0EKKzoxMDZDQjAwMDkzNzI2NjkzMUQzMUM5Q0ZGRDMxNERBQzZDMUY5RUIzRUQKKzoxMDZDQzAwMDBCRkI1NThBNUY1MEYyMEVFMEExRjVGQUQyMDhFNTg5NzgKKzoxMDZDRDAwMDU5QzNGRDFGQzJCQ0IxMUIxN0ZBRjg3RDY1QzZGREQ3QUQKKzoxMDZDRTAwMEE0QkNBQTJBQjRFNzBFQUU4NDcxNDFCRDgzNkU4QkE3MDMKKzoxMDZDRjAwMDA5QTYzMEQ5QUY5MkZEMDc5MEVDQkUzNzQ3NUY0Qjc5QkMKKzoxMDZEMDAwMDI4OTMyQjhDRkI5MDlCNERGQjg5OUJBQThERUY2RjY0ODYKKzoxMDZEMTAwMDRGRTQ2MkJFREY4RDBEMzZDQTRGQkFDMTU0RkZBRjNEOUUKKzoxMDZEMjAwMDNENDRENzlCRDhFMkQ1REM5RjczNzE3ODlBMkNGMEQ0ODAKKzoxMDZEMzAwMDE1MEZFN0M3NUIxNzNDODlGRDI2RTUwRTY5NURGMUU2OTcKKzoxMDZENDAwMDA4RjJGREE3MDM1RTA4N0I0QkU0RTUyREVEMTYzRTk5QTYKKzoxMDZENTAwMEQ4OTczQTQ0RDcxMkJGMEUzRkJGNzc1NEQ3MkVFMTQ1OUMKKzoxMDZENjAwMEUyRkQ2MkYxMkRFOTY0QzZCQkM0QUZDNDlCOTkwRUM1QjgKKzoxMDZENzAwMDc4REU1MzY3OUZDN0ExRjE1RTZEMjZFQ0M2NDk5RDc2MEMKKzoxMDZEODAwMEEzOEJGMEY4REExNjdFNUVFMkI1OEFGQUY1QTU1ODdFOTYKKzoxMDZEOTAwMDk2REYwN0ZGRTVBOEExQ0MwOUYzM0Q2ODYzM0IyODJFRTkKKzoxMDZEQTAwMEU0Rjc2QjlFRTFGMUZDMTlBNUUyRDcxNDlGQzBGQzQ1MDYKKzoxMDZEQjAwMEZEN0UxNUYzMTdGNUYzQzJGQzQ1N0QxOUYzMTdGNUY1QzQKKzoxMDZEQzAwMDMxN0Y1MUZGMUVGMzE3RjVFRjMxN0Y1MTVGQzZGQzQ1NTAKKzoxMDZERDAwMDdEN0RDQzVGRDQ5NzMxN0Y1MTVGMUZGMzE3RjU2NUNDNzQKKzoxMDZERTAwMDVGRDREN0M3RkM0NUZEN0JDQzVGRDRCRkM3RkM0NTdERDYKKzoxMDZERjAwMDE5RjMxN0Y1RjUzMTdGNTFGRjFFRjMxN0Y1RUYzMTdGQ0EKKzoxMDZFMDAwMDUxNUZDNkZDNDU3RDdEQ0M1QkQ0QkZDN0JDNDVGRDdCRDcKKzoxMDZFMTAwMENDNTNENDk3MzEzRjUxNUZGRkVBRDg0Qjg2NzIyNUZCQTQKKzoxMDZFMjAwMEFEQTFGRTE4RTcxQjg2RjIzOENGN0I4NkZBREZGNjFFOEYKKzoxMDZFMzAwMDM3QkNCRjQ2RkJENEYwNUVEMkZGREE5MjMzODZFNzE4NDgKKzoxMDZFNDAwMEZCMDgwRkM3N0QwQ0ZGOUJFOEZCOEJBMTFEMkIwQjUwOTQKKzoxMDZFNTAwMDlDRDRDRTE2MTM3NEEyQkYxNzYwMkFEQjRBRDAwNUNCOTAKKzoxMDZFNjAwMDFDRTE4OTAxQzE2NzdBMjFCRjZFMEFBRjQxRTYzQTM4NTkKKzoxMDZFNzAwMEYyNkMxRjk0RkZBRjhEQkE4RUZCMjU0NDdDNjEzMkZFMEQKKzoxMDZFODAwMEE3MDY0QzlDRjY3NTJGRENFN0NBRjg2OTdBNEM2NUQxRTkKKzoxMDZFOTAwMEExQzA4NzMxODVBMDI3OTZDNkEyRDlDMDg3QjExNDgyMjgKKzoxMDZFQTAwMDU5QjE2QzdBOUUxRENCMjQ5ODEzRUI0OUNGNzM2MzA1QkYKKzoxMDZFQjAwMDA0RjM2MjdEMDlFNkM3OEEwODdBNjMwMzA5MTZDNDJFQzMKKzoxMDZFQzAwMDI1RDgyMzM2OTRCRUVCMTkyQjI1RDgyQjc2MjUzREVGRkMKKzoxMDZFRDAwMDFEMUI0OUIwNEY2QzBDM0QyRjhDNTUxMkQ0NjJENzEyM0MKKzoxMDZFRTAwMDJDOEE1RDQzQjAzODc2MURENUVCMUI5QjQyQjA1RjZDOUUKKzoxMDZFRjAwMDFBM0RFRjFGOUI0QUYwOTI1ODNEQzEwMUIxNUE4MjI1QkQKKzoxMDZGMDAwMEIxRjkwNDJGOERDRDI1Nzg1OUVDNTZGQTZFNjA2QzA5RDUKKzoxMDZGMTAwMEMxNDFCMURCRTlGOUUwRDhGNzA4MEU4OTM1MTFCQzNDNzUKKzoxMDZGMjAwMEI2OTJBMDJGNzYzN0Q1MkI4REFEMjM1ODE2QkI5RjlFREEKKzoxMDZGMzAwMDBGOERERDQ3NzA1OEVDNTE3QTVFMUVGQjMxQzFFMUIxMTcKKzoxMDZGNDAwMDI3MDk4RTg4NkQyNjU4MTFGQjRGODIyMzYzQ0YxMEJDMTIKKzoxMDZGNTAwMDIyRjY3M0ZBRUVDQUQ4MzY4MkEzNjJCRkEyRTc1N0M1RkIKKzoxMDZGNjAwMEZFMTdDMTZGQzVGNkQwRjNBQjYzQkIwOUZBNjNCRkE1Q0IKKzoxMDZGNzAwMEU3OTVCMUZEMDQ0N0M3REVBMEU3NjM2MkFGMTMxQzFCQjIKKzoxMDZGODAwMDdCOEY5RThGOEJCRDQzNzA3Q0VDMzhDMTZGQzc4RTEyOTgKKzoxMDZGOTAwMEFDOEE3RDRBRjA5QUQ4QzcwNEZGMkQ3Njg2QkVCQjM2RjAKKzoxMDZGQTAwMEY2MzlDMTA5QjFCRkQwRjM4OUIxM0YxM0VDRENGRjhGRDMKKzoxMDZGQjAwMDRBRkFCQjAyOTY3M0I4N0Y3NjY1NzVFQkJFQjJGQkQyMTgKKzoxMDZGQzAwMEQyNDkyRTRFQkE4M0NCQzU4N0QzNEVFRDI1MzkzOUQyNUYKKzoxMDZGRDAwMEExMzk0OEY4NkQzNEM0QkJFODQ3MjQ2MERGQjc3QkU0Q0YKKzoxMDZGRTAwMDQ3QkREMERFNTk1Mzc5RkNGRDVCNTE5RjJENzEzMEExMTcKKzoxMDZGRjAwMENGNEM3MkY3NkI5N0YwNzczMkNDNDc5QzJFRjhGQUI1RUUKKzoxMDcwMDAwMDhBM0RCOTY4NDdBRDI5NkI1QjgwN0U5MzBENDU2RDM1MzAKKzoxMDcwMTAwMDA4RjM3QTczQkZBQzVCQzA5Q0RFM0M1RkUxMkYwM0I4MjIKKzoxMDcwMjAwMEZFQUQ1OUQyOUZGRkJFNDA0RUY3RTY3NzVEMkZGRTlEMjUKKzoxMDcwMzAwMEFDRkY3NTFGMEZENzE3QUU4RTNFNzQ1RUFGOUJFRDc0MUQKKzoxMDcwNDAwMEI3REU4NUYyQjA2MkJEODI5N0Y1Q0UzRERGRjlDMTZFNDUKKzoxMDcwNTAwMEI3MzNCNDc3ODI3Q0FFNkZEMENFQThFRUI0RjNBMUEwRTQKKzoxMDcwNjAwMEZCNjNCRDAzN0UxQzNGQjNGQTg3RTBGQkQxQUIwQTU0NDAKKzoxMDcwNzAwMEZDNUQ5NURBRjU4QTA3RjlBNUJFQjk3NDNDRDJCNThDRUEKKzoxMDcwODAwMEY5QzkyRjM5M0Q0OTNFRDk2QzQxRDdCQUM1MzY4NkZFN0MKKzoxMDcwOTAwMEM5M0E4RDkxN0ZCODZFM0JDRjQzNDY3RkVBNDRFMDk3NzMKKzoxMDcwQTAwMDA2QzEyRjBCRDc3RDRFN0VBNzg2QzU3Mzc4REU1Mzg0MkQKKzoxMDcwQjAwMEZCQTdFNEVGRDhDQzZGRDlGQzBBQkFGNUJFNjQwNzI4NjkKKzoxMDcwQzAwMDNGN0VGRUQzNDZGRjU1QTNGMDRGMkREQzZBN0FCRUY4MTMKKzoxMDcwRDAwMERCMDlGRDlFNjZCRkQ0OENERUMyMkZFNUUzNzk0RjRDMDEKKzoxMDcwRTAwMEVENDVGM0ZFMTJFNjhERjkyNEMxREJEQzRFRDQxQjgwQTYKKzoxMDcwRjAwMDBGOEFDMzQ4M0M0OEJGQTdDNDA3RUI3QUVFODJGMjU3MTkKKzoxMDcxMDAwMDRGRUZFQjRGNzk3MkE3MzUyRDFGRUIwNUQzRjlFRjU5RjAKKzoxMDcxMTAwMDI5RDZFMDA4N0MwRTc4QTQ3Qzk2OEU5NTY5OTQwRjc1MkMKKzoxMDcxMjAwMDE0RjQ4MDg2ODk1NzlFRTAwOEJDM0ZBRUVERERERTRDNEUKKzoxMDcxMzAwMERDNUY2OThDNDczOEQ3NTM5RTc4MkQ4QzAxRjM1MjZBRjcKKzoxMDcxNDAwMDlGQ0FBNjczOUJEMERFOTAxREU4RDc3Q0NBNDZGOTQ4M0IKKzoxMDcxNTAwMDYxQjZENENCMkFCQUM2MkIwMkFCNkRDNDE3NzUzQjMyQ0QKKzoxMDcxNjAwMDc5N0U1QUQ4N0YwOENGMTU0OEJBMUM2REVFM0IxRUYzQzYKKzoxMDcxNzAwMDlBRUFENjE2OTU5MkJCNkU4NzhERUM0MzE5OTc5NUY0RDMKKzoxMDcxODAwMEVBOUFCRkNERjMwNTFBNTk2NDBEQTYyRTAxQkQ0RTI0MEYKKzoxMDcxOTAwMEE0NTdDQjZFQTIyQkQwRUQ0NDEyQkE5RDM4MUZERDFFMzIKKzoxMDcxQTAwMDMyRDEwREZERDQzN0UxQ0IzQkIyNjkzREQ3QUM4QUY2ODUKKzoxMDcxQjAwMDVGQUNFMzRGQjNGRjlGQ0RCQzgyRUUzRDkxRjlDRjU1NUQKKzoxMDcxQzAwMDNERTRFRjhDRjlGMjkwQkU2N0Q2OTcxM0REQ0NGNEFBQkMKKzoxMDcxRDAwMEZBNUIzREQxODVCREVCQTY3Qjg3QTdGNzY1MzNCRTAzODAKKzoxMDcxRTAwMENGNjcwOEJGRTdGNEE2NkJDOEZFRkVBRkRFN0M1RkYwOUEKKzoxMDcxRjAwMERBMEFDQ0ZENjRFQ0Y1MTU0RUU2MDdFM0ZCOEQxNTFFQUYKKzoxMDcyMDAwMDJBQkZCOUMyNEJFNUI3NTc2ODA0REY1OTUxNDJGMDg0MzEKKzoxMDcyMTAwMDlERTcxNUM5RjUwNThDNDBGOTdEMkZGNEU2NzFBOTE3OTYKKzoxMDcyMjAwMDdBQ0JCOEYwMzIyRkZBQjlBQkZFRjY0NjM5RTYxOUU1NUIKKzoxMDcyMzAwMDg2REY5QjM0RUUyQUIyREIwREY5MjJENUQ3MUJGMzQxNTIKKzoxMDcyNDAwMERBNkMyMkRGNkM5REUyQzNGQjY0RUEwMjU3MUFFQUIzRjAKKzoxMDcyNTAwMDkyQTFGMTMyRUExRjkxQkY1MkI3MzY5M0VFQjE5QjNBMzkKKzoxMDcyNjAwMDIxREI1MEZGQzZCNTNEMERFNTU3N0I2QjM0QkUyOTU1N0MKKzoxMDcyNzAwMDdEMERDRjZGQUUxOTY4MjhENzhBREY4RjYwNUEwNUFEQjQKKzoxMDcyODAwMDFCMTlGRjAyQ0RDREU5RTJFMTc1QkY1ODNDMjI3RjM5RTEKKzoxMDcyOTAwMEY0RkZDNTAxMUJCRDM3RDNFMzg0M0Q0Q0ZCRjlGMDEzNkMKKzoxMDcyQTAwMDBFMUZDNkY3NEVFMkY5MzcyODlGN0M1M0E1RkNBMjkzMjgKKzoxMDcyQjAwMDM2MTZGNjgwODgzRkE5QjA2Njg0Q0NDQUQ3RDU5Nzg3QTIKKzoxMDcyQzAwMEY5QkFBQUZBOUJDQTcwMUZDRjdFRUFBMEY4NjBGRDQ2MDEKKzoxMDcyRDAwMDg1ODVGMTZFODYwRUMwM0NGNEJCRUMxOTA3Q0Q3QkU2Q0MKKzoxMDcyRTAwMDQ2OTUwNUU5N0M5NUI2MTVFM0U0Q0I5RTFBRTBDM0Y4MTQKKzoxMDcyRjAwMEU4RjRCRUQxREU3OERFQjBFMzg1MTQxRjlFRkJBQTZGRjIKKzoxMDczMDAwMEUzREY5Rjg0RkQ3OTI2RTY0NzI5NjUxNDhGRjhFM0M0RkYKKzoxMDczMTAwMDk2RDkxNkNDQjc1MzBGRTRFMjdBRkRFM0YzRkM3N0NEQjAKKzoxMDczMjAwMEU2MkU3OTczQjgwN0YwM0NFRjk1QUQ2RjU1NDAzRjI3RDcKKzoxMDczMzAwMDVBNTRFQUY3RDNBNzFEOUI1NTVBRjdGRTdDQkNERjM2OUIKKzoxMDczNDAwMDNFRUYwOEY5MjlDNkY3MDhGQzA5RTVGQjI3QjMyMzQzRkMKKzoxMDczNTAwMDQ4RkVEQ0MxRkRFMzVERjEwM0YzNDU3QTIzQkZFQUU0QjcKKzoxMDczNjAwMDU5NUNCRkYxRjgxQjA4QTEwMjk0MTNGNTM2MUZDNTY1REYKKzoxMDczNzAwMDRGQUNCNzUxQkMxMEY0MDFFNTFCOUM2OEM5QjY3MDM5MUQKKzoxMDczODAwMEY0M0NGMTVEOUQ1NUIzRUJGQkFENUJBRkZBRjlFRjYzRjgKKzoxMDczOTAwMDY4NzYxQzJGQkI0RjBEQjIxMTU4RTZGOTExRTFCNTRBQzIKKzoxMDczQTAwMDkwQzc3RjhDRjRCRDc1QzkwODNBMTc2RENFRTM5MkYwOTMKKzoxMDczQjAwMDE0QUNBOUEwMkVBRTM0RUY0NTFFRkY2NUMzREFBQ0ZBQkIKKzoxMDczQzAwMDNDNzdFOTlGNjFDMTBBQzM3RDQ2MEI4QTFGQkU2NzE0RTMKKzoxMDczRDAwMEMwRDM3RTdFRjVFMjk3NUJEQzI0MjczRkIzQkMzNDdDRDAKKzoxMDczRTAwMDM5QzA0RjI3ODZGRjYwMDVCQUJDQUUwNjhCRkI2MERFNTYKKzoxMDczRjAwMDkwNjVGRDI2ODVFMjJBQzdFRkMxQjhGRjI3Q0ZEOTdDNkIKKzoxMDc0MDAwMEI0MEM0NURFRDhCQzlGQ0VBNUY4NTQ3MjdCODE3OTc5NDcKKzoxMDc0MTAwMEZDM0E5QUE3NzhGMTc2NjI0NkY5MjJEM0Q4NTZFMTVGMTIKKzoxMDc0MjAwMDg4RjAzQzAzMUMwNEUwQzdCMzgwQzdDNThFOTdCQkVGNTAKKzoxMDc0MzAwMEMyRjNDM0Y1QTZGM0M2QzdDNTM5OEJGMjNFOEE0MTVGRDYKKzoxMDc0NDAwMDJGMTNFNTdBMEI1RjlGNkMxN0JGODc1MkZFNUU5Qzk0RUIKKzoxMDc0NTAwMEUzNTJERTRBNzkzREFFNEYzMTdEMjdFNTJDNjM1QjQ5MkYKKzoxMDc0NjAwMEJFQ0MxNkY3MjUyRjc4REFDMUNGMTc2OUNDODM3ODlDNkMKKzoxMDc0NzAwMENCQzlDNDU2RjVEMUU4QkI3OUY2RTcxRTQyQjY5RUMzMjgKKzoxMDc0ODAwMDVBNDlFRjdENjI4QkNDNkUyREMyRUYzNzM3NjdEMUY3NEIKKzoxMDc0OTAwMDM2NUYwNEQ3NzE0NEZFMUU5RDk1RTRDODFDQzZDN0I5NkIKKzoxMDc0QTAwMEIwNDU4OTQ0NzVGRTBFRjlGQjI0MENGNTg0NEVFRTc0NEMKKzoxMDc0QjAwMEQxMEIyNjdEMzA0QkU4QkY1OUNDOTQ2RkQ0NjJENDUzQTYKKzoxMDc0QzAwMDgxMzQzN0NENkI1RThCQzhDM0VFMUM5N0NBQ0U2MUJDQ0UKKzoxMDc0RDAwMDJCMTg3OTY1MTI4RDVCRjE0NTEyOEM2MzBFRUI4OEUyRjcKKzoxMDc0RTAwMEJEQzgwQjlGRTVFNzk4Q0NFMzMyQ0ZBM0JCRTM5Q0VEOEYKKzoxMDc0RjAwMDlCMzIxNkVGNTdFRUVDRDczNDZFODk2Rjg2MDdBQjc0NkMKKzoxMDc1MDAwMDc0OTA3ODlGMURFNkY4OUNCRDUzMjE3QUZENUVEODVCOTAKKzoxMDc1MTAwMEYyN0NBMDk5RkU3MzU4NjAxMkNBQjkzOTBGQzAzRUIzMEQKKzoxMDc1MjAwMDI4Q0UwRjkyMEZFNjZFOEJEMDc5QzA0RjU5NEJCQTBCMTUKKzoxMDc1MzAwMEQ2QzM4MjhEREI2RTFDMDlERkNGNzlFQzc1M0JGMjdCMDUKKzoxMDc1NDAwMDRENTZCNEJGMjUxMzdGQUE2N0Y0QkQ1NUJEMTNFODdEMjIKKzoxMDc1NTAwMDkzOUVGRjQ3RTE4OTA5QkYxNTdEMDc3ODk5QjU0NUE1MzkKKzoxMDc1NjAwMDNDMEE1RDNEOTE0NzEwMjY3QzM1ODRGOUVGMDkzNjFDQjUKKzoxMDc1NzAwMDUyN0Q0REYwQjQwMTdGRTZBOEVDRTJDNzJCRjFGNkNGQzcKKzoxMDc1ODAwMDFFQjdEOUFFRDlENkU3RkM3NjhENTlERTc0QjE2QjRDRjcKKzoxMDc1OTAwMEZBMTRDRjczQTBGRUVDQzhFNUY5RTk1RjU4RkQxOTU5NUMKKzoxMDc1QTAwMDI0QTc0RDcyMzhCNzhDRUU2Mzk1NzI3OEI2RDA4M0IyNEIKKzoxMDc1QjAwMDlGNTlBOEZGQTBGQzg3OEQzRjRGNDc3RkM2RUYxRkY4NUMKKzoxMDc1QzAwMDc5MUVFNTZCQTBCRTE5MTRENzM3QjdENUYzRkU2RUZCNTUKKzoxMDc1RDAwMDQ1MEFFNTRCRkQ3MTYyRUIxMEI0MDc2QjFFRkY3NUJBRUYKKzoxMDc1RTAwMEZFQkVENzkzMDVDMUQ3RkFFMDc4ODU3RTVDQTg2RUVFMjMKKzoxMDc1RjAwMDgzQkY2QjI4RTVFQzA1Rjc2REM5RTZFOUJFQzAzQ0RENEQKKzoxMDc2MDAwMEM2NzlENkUxM0M3NUU3NTRFQUM1M0M4RkFERTVGMzNCNUUKKzoxMDc2MTAwMEJFOUVDRjc3NjY5Nzc5ODYyOUFFNzJEQjkzMEU1Rjk4MTAKKzoxMDc2MjAwMEVDOEUyOEU5RjU5M0RCNTQ4NkZCQUM0RUJCQzM2NDA3QjQKKzoxMDc2MzAwMDdDQzk1QTM2MjEzRTE2MkU3REZCMDMyQkYwQzVEQzRCNTAKKzoxMDc2NDAwMDAwM0ZDMDA3MzVGNzM5NDhFRkNGN0Q4MUM3NTMzRjUxMjEKKzoxMDc2NTAwMDJBRjMyOUEwQkYzNzlBRkUzRDc4M0UwRkVDMDVCNDM3RDgKKzoxMDc2NjAwMEUyRTNFOEI0MDNDRTIyMUUzQkVEODA2RUUyNkY5MUYwQzAKKzoxMDc2NzAwMDZCMkREQUY5NkJGQTFEMkRDNUNGRjMzMTE3Qzk3QjZENzAKKzoxMDc2ODAwMDc2OThFRUI1RDE1MDA2RjA3M0ZFNEVBNDUzMkZGMzdEREQKKzoxMDc2OTAwMDVDREMzRkZCQTdGRTlGREZCMjk0RjhCRkUzMTJGRDM5MkQKKzoxMDc2QTAwMEI2QzZENEE4MERGMzkwM0JCNjI5NjQyNzJENUM1Njk5MzUKKzoxMDc2QjAwMDVFQzlGMDdDMUJGN0FCRTUxNDcyQkI1NkYxRkIyOUJGMkEKKzoxMDc2QzAwMEM2MDE3NDREODVGRUYyMEIzNUZFNUNGM0YwN0NGM0M3MEEKKzoxMDc2RDAwMDE4RERBMzIzQzc2QjdFOEVGRTc2MjdFQTQzOTc4NUY0RDkKKzoxMDc2RTAwMEExNzlGRUUzMEJCOURFNUNBODVBQzhCRTVFNjBFNzc2RkUKKzoxMDc2RjAwMDc2QkJCOEJGQTI5RjE4NDdCRjQyNkU2RjVGNTZDOEZERUEKKzoxMDc3MDAwMDBBRUQ2ODU3NjJCQ0ZCMkEwN0ZEOEUxMTYzNjNDOUVGNUYKKzoxMDc3MTAwMDZFNjU5Q0ZGQUMxMjZGMUVFQkE5Q0VGNTRERjY3MzQ3NUMKKzoxMDc3MjAwMDJGQzREMzJEQUM5NTdFMTc3MTUyQzUxNDBEQ0YzMzdDNjkKKzoxMDc3MzAwMDkwRTdBNDdCQTJFMDJGODBFRDRDMTNFRDFDQjRGMUYzOTUKKzoxMDc3NDAwMDBCMUY2MDFGMzBBRjY5QzIzRkZEMDE1RThGMEFGRDdGRDYKKzoxMDc3NTAwMDUwNjAyN0JCMzZGQ0EyODNFQzg2M0I1M0I5RkY5MEU1MTMKKzoxMDc3NjAwMDY0NTg3MTNEREMyQ0U0RDRGNDUxMEUzRkNBRjU2OUEzOTIKKzoxMDc3NzAwMEVFMEMyMDg0RjZDMjBDRjA1NUUzRUM1ODVEMEFGREFDMkIKKzoxMDc3ODAwMEI0NzA3REJGMzI4QjcxQkY0MDczNUIzOUUyRUY3MjMwRjIKKzoxMDc3OTAwMDkzMzE3RjFGNjZCRkZENUNGNkY5RjhDODc4N0U2MjAxMDEKKzoxMDc3QTAwMEZBMTlBRTYwOUNDMTJBMDhCRjg2RjIwMjNCN0Y1RjUzODQKKzoxMDc3QjAwMEY4OTNDOTBGRjQ2MkVDNzc5ODM1ODU3QTA2NzE4NDdDNkEKKzoxMDc3QzAwMDUxOUI0MUZCREZDOTc4QkUyMDBCQTE5NUY4RUQzQjU2REMKKzoxMDc3RDAwMDE2QjY3MEI4RDY0NUY3MkE3OTBEQkYwQjdCNDMwNThCREIKKzoxMDc3RTAwMDY2QzBGQ0EyRkI4REU3M0I2RThBNUFBMjAzMzA1RTY0NDIKKzoxMDc3RjAwMDhERUU0NkZDNTk5QzlBQ0QwM0ZEMDRBQTk0MzJDNEZCM0QKKzoxMDc4MDAwMDgyNTVERDFCNkY2M0UxMzYxQUVGMDJCQ0NGMEJDN0Y5NUYKKzoxMDc4MTAwMDNEODVGMjg1QTZDMUEyNDczRUJEQzVDQUY2QUE2NTlDQjQKKzoxMDc4MjAwMDdFQzg4NzhENTk1QTk4RUEyREUxN0MyRUNGOTU0OEJBQUIKKzoxMDc4MzAwMDk0NDJGMzdBRkM0RTEzRTM4Mzc2RDZBNkUzRjdGNkM0QkMKKzoxMDc4NDAwMDdFOTVEQjBCRTVCRThGREI2QkYzQzVCQTlEMkZGOUVFQTIKKzoxMDc4NTAwMDU5RTM3QTdEMUNENzBERjAyRERBQjI0OEY3NjkwMjI2N0MKKzoxMDc4NjAwMEUzRkI0NzQ0RkI4RjA4QkU1RjUzMjhFMzdGRERFQjZGRUMKKzoxMDc4NzAwMEExODM0NTY5REUyRjNBODg4RUIyREZDOTAyNkUyQ0U0RkYKKzoxMDc4ODAwMEY5RDM3MjFDOTI3RjY3QjNDNTk0Q0YzMzVCRjg2OTJDMzAKKzoxMDc4OTAwMDIwNDkyODNGQjhFNTQ5RUUxNzMyRTUxRDgxQTE0NEY5OUEKKzoxMDc4QTAwMDZERjNCNjk4OUZFQkZDM0NBQTQxMkU5MURGNTRCMTc3NjMKKzoxMDc4QjAwMENDQzRGMTI5REY0QUYxMjFCRjRGQjM2RjI1RkY4MEI5NTYKKzoxMDc4QzAwMDlFMEQ3RjNGMTVFMzZFNkJDMUFFNTI0NEJDMENDQThFNTkKKzoxMDc4RDAwMEY1MEFGREVFQzVCNDVFMUQ4MzUxOUY4M0I0MUU0RkU3Q0MKKzoxMDc4RTAwMDQyODVCRDNENUJEMEQ3MjFFRUI3OUE4REY2MTVDNkQ1NDIKKzoxMDc4RjAwMEQwQkU0MjdDNkRFNDc2QTU1NUQ4QzM3NUVCOERGNkM2MzcKKzoxMDc5MDAwMEI0NjY5REREQzk4MUUxN0UwMDg3Mjk0RkREMjZFQzhFQkUKKzoxMDc5MTAwMDBGRUQxRDgzNTFFRTlCRUYwQkY4RDBDMkU3MTFDRTYzNDQKKzoxMDc5MjAwMEZDNUVDRDFDRkVERTJBRUM0QkM5NTczRjJEQjQxOUUyOUMKKzoxMDc5MzAwMDZERjJEQzY5MERDQTJCN0U2RjgzMjk0RkNCNDVGN0M3RUIKKzoxMDc5NDAwMEQ0MjhGQ0ZFNEVFOTg3N0M1RkMwRDM2MDg3RDI3RDM5QTYKKzoxMDc5NTAwMDQ3RDIyODBFNkVGNjRGQjY1N0JBQzMxNjlEOUY3MjdBNUQKKzoxMDc5NjAwMEM2NkQ5MzEwM0YzNUU5NzYyQkMyRjczQkVGMTU2QkEzM0QKKzoxMDc5NzAwMEZFOEY3ODhBQzlGRTU5NTMzOTc0MjNFNjI3MUQyQkZDRTQKKzoxMDc5ODAwMDdDQjJCMzM3NDU1M0M0NzlBODNGQkQ4NkY5RjRENzdGOUQKKzoxMDc5OTAwMDBERjNBMUYyRDlDOTdFRDg0N0I1QkZEQzcxOEIxMzQ0NzIKKzoxMDc5QTAwMDc3RUNERkNGNEVCNjgyOUU2RjdGQjA2MzEzOTY1MzIzODIKKzoxMDc5QjAwMDJDNjAwNUZERDhCRUExQTMwRkRFQjk5Q0FBRDkwMkY0QTQKKzoxMDc5QzAwMDdFQTU2Q0NGMTZDMEY2REE3RkNDQ0IxRjE1REEwMjc4MTUKKzoxMDc5RDAwMDlGNkU4RDM4Qjc1NDczODU0MkYyRDcyMUQ2OTdGNDMzMTIKKzoxMDc5RTAwMEQ1NTg1RUUyNzAzNEZGNUQ5NDBCRDVDQkQ2MDI4RUMyQzMKKzoxMDc5RjAwMDcyQkMwRkY1MDRGREZFNDI5RjYyQkZBMzEwRUFBNUY1MUQKKzoxMDdBMDAwMDA5OUU0NjM4NkY4QTEyQjZFMzc5RkY0MzkxNEI4NDVFMzQKKzoxMDdBMTAwMDRCRjgzQjIxOEU0MkVFNkZDRDJCMEFEMEY3RDI4RjBFNjIKKzoxMDdBMjAwMEVERkNFNTlCQjRCMzQ1OENFQjdGMDA1M0RGRjdBQjAwNzcKKzoxMDdBMzAwMDgwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJFNTdEQTcKKzoxMDdBNDAwMDA5Nzg1NDQ1QjY3MEREQkVCRDY1NkZCMjYwNjIyMDc2QzAKKzoxMDdBNTAwMDEyMTIwMjA2NjgyMDgxMDA0MTlCODQyNTJDODEwRTI4ODkKKzoxMDdBNjAwMDQ2ODlEQTJDMDI2MjIwOTFEMTMxMzMzQTdGNzdEODQ0QUIKKzoxMDdBNzAwMDc0MzRBODRGMTkwNzlEMTY5MTYxRTZBOTJGQTMyQzQxRDQKKzoxMDdBODAwMEI2MEVBMDgyM0FEQTI4MkEzQUMwNDQ0NTA1OEQ0RTQ0MDMKKzoxMDdBOTAwMDc4MTNGRjg3RkE5RjczQUEyQURENzU0OTU4NjZFNkJERjkKKzoxMDdBQTAwMEVGN0RERjFGM0VCRUNBQjk1NUI3RUVBOUIzOUY1Mzc1MzAKKzoxMDdBQjAwMDZGQUE2RUNGNDlGMEU2MzMxNjkzRTEzNTNCNTMxODVCNUUKKzoxMDdBQzAwMDUwQTFGOUFEMDMxODYzODcwMkI5OUUzOEM2MjYzM0U2ODQKKzoxMDdBRDAwMDZFOEM2NUVDMjdGQ0I5M0FEQ0RBQUUzMDMxMDZFMzZGMjgKKzoxMDdBRTAwMENGRjREOEFFMjg2NEFDMkEzQzRGREMzRjMyQ0YyMUMzNjAKKzoxMDdBRjAwMDNDMzc2OTcwRUYzMEY4Q0Y1QzRFQkNGRjg2NkM3NzFGNjcKKzoxMDdCMDAwMDI3RjRERkY2N0Y5ODE3RTc2MUEzNDc5OEQ4MTBDNjdFNjEKKzoxMDdCMTAwMDY2NjdGNEYzNURFREQ2NUM3QjAxQjRDRkQ5OTI1ODI2NEQKKzoxMDdCMjAwMDhDN0I2MTVCQzY1Qzk4ODdENUMxRTQ2OThDN0RENUZDOTQKKzoxMDdCMzAwMEExRDUwOUYzMkM2QUQ3OTkzQjg5QjE5QTc2OEREQTQ1OUMKKzoxMDdCNDAwMDlCOUFBRDYzNjE1QzBEQjRBNTExRjg1NTBCN0MxOTZCNjQKKzoxMDdCNTAwMDMxNEY4RDBCNUZFRkVGMDQ3QzBCRjFGQTZBQzJGQkI2N0QKKzoxMDdCNjAwMDE3NEU5QUJEMzBFRTM2NTNFM0U3NEYyNEMzRTVFMTlBNTIKKzoxMDdCNzAwMEVCNTlFN0I5RUJFQ0VFRTRFQjNDQzY1ODU5NjNGRUI5QzAKKzoxMDdCODAwMEZEMDU0RThERkE3RjlERTMxRThDRjQ0QjgxMzlGMDM5NTMKKzoxMDdCOTAwMEJBODlBRkQ3MzhGRTU3MDI4RkFBNjg3NkIzMDdGQTY3NUIKKzoxMDdCQTAwMDBGODlCMzNCODFERTg1ODdCQzRCRTMwMDhGQjk2QjMzMTQKKzoxMDdCQjAwMDA3RTkzMDQ3RkY4QzkyOTE0ODM3MzY2N0I4NDJBRkIyMzkKKzoxMDdCQzAwMENCMTkwQkUxRkFDQzZEREQxOUI0REZFRDI4NEM2MDgwRTgKKzoxMDdCRDAwMDU3NTU2MkU4MEUzNjEwQzhFNkNDNjlCMDhGNjQ2Q0UyODcKKzoxMDdCRTAwMEUzMzBFNjcyQkFDNUNERTBERTMyOUI4NDhCM0RBMzhCRDkKKzoxMDdCRjAwMDAxRkU1MTI3Nzg0NkEwQjBDMTBGRjNFQzQ3N0M2MDlFOTAKKzoxMDdDMDAwMDFCODdGNjhCNjZGRDgxN0E5OTMxMjY0NzAyNjMyMzdCQjkKKzoxMDdDMTAwMENFQUNDMzc1REQzODc0RTQ1OEJDM0VDQTE2OTczQjkzQUUKKzoxMDdDMjAwMEU4Q0I0ODNFNDZGNkY0NEM0MzNDNzEzQzgzNzU3OEFENTYKKzoxMDdDMzAwMEMxOTRFQjYwMURERUQ3NzU5NzFGRDZFMUVEMUZFMzBERjQKKzoxMDdDNDAwMDc0NDJCNzBBNDFENzNBQTc4M0U4QjFERjA0NzgwRTBBMzUKKzoxMDdDNTAwMEUzMjE5RkNGOThFMzhFMTBDQzc3N0M0OURBQzA1NTMwNzIKKzoxMDdDNjAwMERGREE5RUEzRUU0MjdDRTRGM0Q3RjZGNENFODk3QzNFQzUKKzoxMDdDNzAwMDJDQjczRjVFQkY1ODNDNjYwQTNDRUU0MkJFNDFFQjI5NDIKKzoxMDdDODAwMDA2MzkxM0I0RkUwOUZFNEYxRDFEQTNDMEQ3NEM0QTYyMkUKKzoxMDdDOTAwMEVFQkMzMDNDRkQ5QTc0MDVBRUFDQ0E1NkM2REYzMEU3ODgKKzoxMDdDQTAwMDRBQTVCRkRDMTYyQUE4OEQwRENCQjcxMTFGRDkzMkU2MjUKKzoxMDdDQjAwMDI3N0M2QUUyMzZDNjMzNDBGMUU4OEUzM0VGQ0YwMDNERDEKKzoxMDdDQzAwMEY5REI3QUREQTUwMUFFQjdFRTdDRjZGRDExMzBFQTE0RTIKKzoxMDdDRDAwMDJDMzgwOUU4NzZDQTBEMDBBQ0Y3RDQyNjNERTBDRjQ0MzUKKzoxMDdDRTAwMEY5NzA5QkNCQkIzMzM2MUZBNzgyRjEwQjBGQkM2NDFEMTEKKzoxMDdDRjAwMDA1QkZDRUFGOUQzNzA5Rjk3ODZCQzBGMjQ5NEIwNDlFQTIKKzoxMDdEMDAwMDY3RDg1OTJCQ0IwMjdERDhBODVFQUY2MTBGN0NBQkY3NEIKKzoxMDdEMTAwMDQ3Mjg2OEY1RjQ4Mzc5MUEwREZEQjVFM0JFNjBGMTM4QTQKKzoxMDdEMjAwMENFRkM0OThCNUMyNzNDQkZFRTQ4RTY4M0ZCMjJENkJERTgKKzoxMDdEMzAwMEM2MTk5N0ZDRjk5NUYwQ0IyMDM2RTgyNzFEOUZEN0ZBOTYKKzoxMDdENDAwMDJBQUM5MDk1MzYzNTEzOUY5NjFFRDA1RDI4QTI0QjdCQUEKKzoxMDdENTAwMDZBNEM4Mzc1OEVEQjY0MEI0NDgxNkE3REJERUQ2M0FCMzkKKzoxMDdENjAwMDEzRThGNTc3OUZGM0MxN0QxNkQ0RkY3QUM2OTJGMEJFNzMKKzoxMDdENzAwMDhGQUQyRDcwQkRDOEU5MjQzQTJEREFGMUFEOTUwMURGNDQKKzoxMDdEODAwMEM3RURCODlERjQ3QTJDRDhCMTA0OTA5RjUwMzNFQkI3NkYKKzoxMDdEOTAwMDA5RTZGNzY3QzZCOTlFODVGOTZGNUIzOTlFQjFDMThDNUMKKzoxMDdEQTAwMDI1QjRDRkEwQjZCQTYxM0NDREI3QjA3RDFBQzE4QkRBOEQKKzoxMDdEQjAwMDYzMDhERTFGMUQxQUNCMDA4RkZENUJCQUIxQTU4MEM3MUIKKzoxMDdEQzAwMERCN0EzMEY3QjczODhGMkQ4RUVDNDQ3OUZBOEQ0QjcwMTMKKzoxMDdERDAwMERERkJBM0ZERjkzRjgzRTc5NUZGQzdCODMyQTRFQkEyMTMKKzoxMDdERTAwMDREOUExQkU1QUM1QzY3RkJCNTQ0QzQzNzhBRTYyQkQ3REMKKzoxMDdERjAwMERGMjlCODFEQUU0RjJDOERGMzlCMTJBODlGMzFFOEQ3MTkKKzoxMDdFMDAwMDg3QzRBRDYyMDBFQjU2QjAxNzlEQzhFNzNFNjE1RjJDOUEKKzoxMDdFMTAwMDJEMUNFRjMxRUQxNTM0OUZFQzdGREQ5OTQ1RkQxMkI2MzkKKzoxMDdFMjAwMEE0QUMzN0NGOEEwREFGQzdEMkEyNTEzQkExRkQ0QTZBOUQKKzoxMDdFMzAwMDZCMzY1NTk4OURGMDlDRDdGMzlFNDk0NjNBQzFGODU4NDkKKzoxMDdFNDAwMDZGQTc3Njc5NjgwMkVCQzQ3RTc1RDg3RjYxOEY2N0EwRDMKKzoxMDdFNTAwMDNEODY3OTlCQjNEQzJEQTg4NzkzRUY2OTMxREJEMTlFRkEKKzoxMDdFNjAwMEM2REExRENGODIxQzRDMkUxQUU4OUMxQkIxMkU3RENGOEEKKzoxMDdFNzAwMEY1Q0MwOTcyNjQ0QjZFQjNCODYxRkUxOUQwNDZEQUVGRTcKKzoxMDdFODAwMDlCQkJGMDM3OUYwQjNENjVBQzlFRUM4NUY0NEJBQ0M3QkMKKzoxMDdFOTAwMDNEMENGMUJFQzlDMUYxOTY3QUY1QUUxODJGRUYwRjY5MEUKKzoxMDdFQTAwMDVDM0ZGQzlCNkQ4MTY3RTFGNzhGQjJCQ0VENjg0NzQyOTgKKzoxMDdFQjAwMEEzNThFNThCNjQ0RjQzMTkxNTcxRkYzQUZDODFCRjc2RDcKKzoxMDdFQzAwMEU0N0ZCQ0I5ODUyNUMyRkQzRjc0RTBDRkY1RkE0MkY4RTYKKzoxMDdFRDAwMDdGMjVGQ0M0REIzQUFCNDNCOTc4RkJFQUFCNDM2RUMwMDkKKzoxMDdFRTAwMEFCRjlFRUMxODNEMTNGQzhFN0M1Njc1QUY5QkM4RUI2N0UKKzoxMDdFRjAwMEIzMjhBRjM1QkI2MjlDQUI2MDdERTVDMDFCODREQjc2RUQKKzoxMDdGMDAwMERBMDJFQjMyRTkzQUQzOTJCMUI1QUREM0EwQkYyNkJFQzcKKzoxMDdGMTAwMDJEMTdGRDRGRTlFRUE4MjBDQTZERjNFRTI4MzNGQTkxMzQKKzoxMDdGMjAwMDNEMzlERUY4Q0MxNEJDREU3QkI0MDZGMkVEREU2MTMzMDUKKzoxMDdGMzAwMEEzMUMyNDM5REQwOTc4QkQyQjdDMkY2NEM3QTQzRTFBMEQKKzoxMDdGNDAwMEU1Q0NCQjkyRUI5RjU3RThFMTRDMjFCN0IzODQxRUNFNDIKKzoxMDdGNTAwMDM0QkIxMkVFMDJCQzZGN0U1MzY3NjhDNzY3RERBM0Y1QzIKKzoxMDdGNjAwMERCNTQ4MDM2MkRDRTk1MTNBMTg3NTJERjJDMjg5NzgzQzIKKzoxMDdGNzAwMDUxM0VCOTVDNTZCNzc3MTNGQTlEMjlFNkU1N0E1MDBFNjMKKzoxMDdGODAwMDBFMUFFOTUzN0U2NUI3MDBFQUY3QTJGNjI0MUEyN0Y1MjAKKzoxMDdGOTAwMDU1RUE2OTZBQjZGN0FBNENFMDQzRjk1MkQwNkY3ODhFNzkKKzoxMDdGQTAwMDc3NDk1QTAxRUE0QjU4NEVBQzBFOTQyNzkwOTNENEI5QjYKKzoxMDdGQjAwMDExNzJCMEI0Rjk3QjMzQ0E4OUE1NTgyMzM5QjE0MTVCM0EKKzoxMDdGQzAwMDFBMjE0NzlFOEUzOEM1MzFCNjNCRTAzMTc5NTlBNjY5RjIKKzoxMDdGRDAwMDE1MEJGNzk3NjZDQTc4RTVFMkU0REQ5NUM5RTU2QjU2QkYKKzoxMDdGRTAwMDZDMzBDNzA0RjM1OTZBQTM1QzRCMDBBRjUzQzk0RUIyNUYKKzoxMDdGRjAwMDYzOEJFRjAzMDA0OEIwRDhFMjI5QzUzODYzRjE2RjM0RDIKKzoxMDgwMDAwMDE3REE1RjhDM0ZEMEZFMEMzOTVDNkJGNTQ2RTA3NzdENkMKKzoxMDgwMTAwMDdCN0ZFNjA0M0E0RDZCRUY0NTZERkYwQzZGMDVGMjdGRjkKKzoxMDgwMjAwMDY2RkI3NDQxQzdGRUQ0MzI2NzkxODk4MTlGQjlDM0NFODQKKzoxMDgwMzAwMEZEQ0NFOURBN0I2RkMyRTc5RDBFRDg1Q0Y4M0NCMEQwOEUKKzoxMDgwNDAwMDlDREYwMkRGNDJCN0VCQjJCQjEwQkYzNzJERUM2OTE4RTMKKzoxMDgwNTAwMDdGMjJDQUFCQTM1RTlFRThDOTFDOEYwMDhBQjNENzAwRkIKKzoxMDgwNjAwMDlGNjFERTEzMTZFNjc3MDAzRkU3MDBFQzQ1QjgxQjczMEYKKzoxMDgwNzAwMDc3MUI4NDdBMDdFQjhDRjAyQjY3Q0MwRDE5MkMxQkY4M0YKKzoxMDgwODAwMEJCRjg4MzYzNjYzMDg1QjdFNjg2RkEwN0UxQjk1NUEzODYKKzoxMDgwOTAwMEI4RkY2RjVENkYyMUZGNUZEREZDQ0UxMDEzRjQ3Rjk5OTkKKzoxMDgwQTAwMEU5QkU4QzgxRUQxRDdCQjlGNzM2NUNDRjgyQTk4MTE3QzMKKzoxMDgwQjAwMDJDMDBERkY2RUI5N0UyODczOUMzRjQ2QzM0MDc3M0NDRkUKKzoxMDgwQzAwMDcwN0YyM0QwRDEwRjc4MzUzRUEwOTcwNTc4REMxMzUzMEQKKzoxMDgwRDAwMEQxRUZDMjcyQkRBMDNEOUJFODIzRkQ4REI0REY1QjdENzcKKzoxMDgwRTAwMEE5QjA4OEIwMURCRjkwMUY5MkYyQkQ1MEU4QzE0MkQ0MjQKKzoxMDgwRjAwMDAzMTZFOTZGMkEzQ0EzNTAwRUYzMzQ1NzBFOEJGNDM3NjYKKzoxMDgxMDAwMDVDMUZBNDlEMDY3OTI3QkQyOUNGRUVFOTVBQ0FDMjc2MjUKKzoxMDgxMTAwMERCRTg4RkY2RUE4RDhGMEM4N0Y1RkFCMkJDNEZBMkRDNTQKKzoxMDgxMjAwMDk3RkNGQjdGQkRGNDExNzQ1NUJGRjg4N0QxQzhBNzUxRTgKKzoxMDgxMzAwMDU3NkE0Q0Q3MkVDNjRFN0U2RjIxM0I3OTRGMDUyMzNCQTUKKzoxMDgxNDAwMDA5NkRBNDlEQjQ3NDExQTdBRkJCNDRCOTZGMTA3MjBGMzEKKzoxMDgxNTAwMEYxMkRDNThENjhDNzIzRTdGQjI4QUI2NDEzRjI3OTVCNkIKKzoxMDgxNjAwMEE2QzZFN0ZCMTdFMTZEQjRFRkRCM0FGMEJFMzhGQkZFQzUKKzoxMDgxNzAwMEZCQ0M4QkIzRUY2RkEyN0QyRjNDRDc5RTMzOTgwRkVERDYKKzoxMDgxODAwMEY5REY3NkY2MDlBMEJEM0ZDNkMwRkVBMzdGREIxMUUzOTEKKzoxMDgxOTAwMDdDNTZEODdCRjIwN0QxMDk4MUYzRDlGQjVGRTdDQzdFMEYKKzoxMDgxQTAwMEIzMEI3QkZGNjdFNEZGM0Y2QkVGQTU3QzE5RjVDMUE4MUMKKzoxMDgxQjAwMDA3NDZCOTlGNzgzRkM0NUZDOEE3QUQxQTQzRkIxQThFMjQKKzoxMDgxQzAwMEI3MThDOUYxRkUyQzJFQzc1MjZGMjJFMjJGRjJGM0EwOEUKKzoxMDgxRDAwMDBGODE5Q0NDNzNGNUYyQkJEQTBGMEE5Qzk4NkYxNkM0MjIKKzoxMDgxRTAwMDBENjQ1QTU4REVBNUJFNDg3OTM3RkE5MTM5NTlERTFGMTkKKzoxMDgxRjAwMEM5MEYwODNEQTk3RUQxRTgwN0JBOTJBNzZEMTZDQzVGREEKKzoxMDgyMDAwMDJERDVERjcyM0YwMDZEQTQxRkU4MkFERUQxQjMyRTJEREQKKzoxMDgyMTAwMERFRjlGNjIyRTVBOTdCMTY4RjE3RkUxQkU1QTk3QjU2MzIKKzoxMDgyMjAwMDYxQTdGMjc0NTlENjNGMTEzRjlDODc4RkU0NjdBNDlDRTUKKzoxMDgyMzAwMDREN0M4M0NCMDdDQkU2RjEzRUM4MEJFMUJEREZEQTMzRTMKKzoxMDgyNDAwMEIwMzQxM0VEMUVCNzg3MTM3RjYyQjU0OENGOUI0NTNEMTEKKzoxMDgyNTAwMDQxQ0FFQkE4NkNFRjg4QUMwODNFNjM3QzhGNzFGQkM1MEMKKzoxMDgyNjAwMEM2ODUzMzkyNkI5OTFCQUVERjBDNkRBNEREQjAyMUZGODgKKzoxMDgyNzAwMDNBODlFRkRENTk5NzY2RUZGQTBCQjlCODEwOUYyQkIyMjgKKzoxMDgyODAwMEZFRTU3MTYxNTU2NzdDNjU2RUVFRkZDMzdDQjE0RDQzQzEKKzoxMDgyOTAwMEI5RjkyRTY4NjZBODVGNURGMUQ1QjI4NkQzNURDMkNCMTEKKzoxMDgyQTAwMDgzNjZFOTVGOTNEMEJGODJCQ0RDOThGNTRGRDg5RkYyMUMKKzoxMDgyQjAwMEQyQzZEMzc2MDhGREVFQ0UxQTVFNjExRTA2Nzk3QTExMUIKKzoxMDgyQzAwMDEzRjU4RjExQUJERDY2QjQyRkYwRUI3MDlBOTFFQTIzQjIKKzoxMDgyRDAwMDZGRUIxMjJFM0UzODFBRjA5OEY4NDg0N0JGMUZGQkM3QzUKKzoxMDgyRTAwMDE0Mjc3NEQ0NTMzMDk1OTBFMzdGOTkzNUVDRTAwMzg0RTAKKzoxMDgyRjAwMDc3MDNFN0EzQjdDNUVDRTkxNzAxMTcwMDFDMTcwMTE3QUYKKzoxMDgzMDAwMDE5RTBCNTdDM0NGQTExMDdDRDEzRTBGNjFFRTZENzA2NUUKKzoxMDgzMTAwMDIxMkNFNzEzN0FDMERBQzY3NkMzNzg3MTkzRTZDMDdBNjcKKzoxMDgzMjAwMEM4MERDNTdGQjMyMjdGQ0E0QjVCNUU0RDg3RjUzRTk4NzMKKzoxMDgzMzAwMDU1NUExMTBCMjFDMDBENjgwNzAxREZBN0IyMjZBRUY2MTIKKzoxMDgzNDAwMDlCQzVGREREQTkzRTQ2M0ZCNjQ2Q0RBRDAzOUZBQThCM0EKKzoxMDgzNTAwMEI0NDA1NkU2Qjk3NDdDMkE0QkY1NjdGODYzNTZFRjY3NkMKKzoxMDgzNjAwMEQ2ODI0QkJCMUZGOTQ4Rjc2N0QxRkQ0MURCMjUzQ0ZGQTcKKzoxMDgzNzAwMEJBNjJFNjBFNzQ2MjI3OUY5Mzc2RjIyQ0MwNzI3RUEwREEKKzoxMDgzODAwMEREQjQ0NjlFODcxQkM3NkYxMkUzNDMyNkQzNDIwNkY0MzMKKzoxMDgzOTAwMERBOTE3NUYzNkFBQzk3OEQ2MTVDM0U3NjY1REQ1NEUxRTgKKzoxMDgzQTAwMENGRTdFOEJBMERFQjNEMUZCRUVCM0E1OUFGNTNCRDNGRTcKKzoxMDgzQjAwMDc4M0U3QTZEM0NFNzdFMjExRkYzNTU3OTQ5MzA3QkY2OTQKKzoxMDgzQzAwMDdEMDc3ODI0MjQ2QjBFOEM2QjE3NzlBMjFFQzBGOEJEMzQKKzoxMDgzRDAwMEJDNTRDQUY3QUQxNUVFNjI1ODVGMTQ1M0VBN0Y2MUY5RDkKKzoxMDgzRTAwMDVFNTAzMTFBRDZCNzg4QzlGRUVBRDVFODk3M0NBNjhFMEEKKzoxMDgzRjAwMEYxNUNERTc3NjgxREY3RTc4MUZDNTAyOTBFRUUzRjlDQUIKKzoxMDg0MDAwMDc1REI2QUE0MEZGMDgzRkEwOTM2OUY0N0RFMUIwRDcwRjcKKzoxMDg0MTAwMEIxNDEzRjg0N0M5MzdFQTJERDA2RkFFNDc0NjIzN0NFREMKKzoxMDg0MjAwMDA4QkU3REFEQjE0QUI0N0JBMTEyMUVFRjg1QjI3ODlCMjgKKzoxMDg0MzAwMDkyQ0RFQjI0M0YwODNBNUFCMjc5MUI4QThFQTA0MzhGMjMKKzoxMDg0NDAwMDMwOUZFMTI3ODg3OTQ0QzRCQTg5NEVENzI3OEI3NUZCQzIKKzoxMDg0NTAwMDU3NTU0Q0VBMDVGNzI3QjI3RTFBQzg0OUMyMzMyQjU2NDYKKzoxMDg0NjAwMDJGRUIxOUJFQkZEQjMzQUI0ODRFM0FFNkYzQUYzQzg4ODcKKzoxMDg0NzAwMDc0QkM1RUQwMjlFNTk5RkIwRTBBMzlEMjUwRUYxNjkyRjIKKzoxMDg0ODAwMDQwODAxQzZDRDJGQzNBQUM3MzIxQ0E0MTI3RUJGQ0VCNTgKKzoxMDg0OTAwMEI5NzJFNDM3RENFRkI2OUNFN0ZFQ0ZDRUJEREY2REI4MzYKKzoxMDg0QTAwMDlGNTk5MjJGRTU3RUMxQTc0OTA2M0U5NjE5RjgzOERBMDIKKzoxMDg0QjAwMDAwNTc0OTM4QTBEODMzNjlFNzY2MzVBRDVFREUzRDE5MEYKKzoxMDg0QzAwMEVCOEQxQUJBMDlCNEQ3NTY2RDIwNjM3REIzMUZBRDg4MDIKKzoxMDg0RDAwMDFEODZGMkVBQjRBNDgzQ0RFRjlGRkREODQxM0JDODcyNUMKKzoxMDg0RTAwMDA1REEzMzkyREZDN0M5N0U0RjQzN0QyNzc4NEQ4NTdCMDAKKzoxMDg0RjAwMDAwQ0E0RkVERjI1NDE4NUY5MEZEOUJENTc2RDBBRjFCQUMKKzoxMDg1MDAwMDk2QURCNjYwNEM1Mzk0RkREQkQ1NjY5OEY3RkE4MkZGQzIKKzoxMDg1MTAwMDc4MTVFNzMzNkI0RjFFOUM5NDc5MUU3OTZEMzBBQzYzRjAKKzoxMDg1MjAwMEFEMDFGNjFCQzYzRjdBMDFGQkJFQ0M3MEZGM0Q4NkZFNTcKKzoxMDg1MzAwMDA3MENGMDFBMDNCQzUyQkQ3RkU2MUM4REY0NjQyNkYwRDQKKzoxMDg1NDAwMDBGMDk3NzIxQkQ5OTlDREQxMTE3NzZGODMzMkQ5NkUyM0UKKzoxMDg1NTAwMDI0NDVFRTI3MkVFNTcwNjVGNkJGNTdBQzhDOEQ4MDlGQzUKKzoxMDg1NjAwMDc5QUUyMjUyOEUyRDhDRkZDQzQ4NjY3RUY0MUY5NjJFNUIKKzoxMDg1NzAwMEVDRDlEODZDQjVERUQ1QjE5RTNDQTNCRkUzRkQ3RkM1NzkKKzoxMDg1ODAwMDVGRDM2ODlGNDVGMUNCN0I3NTE1NkVENkE1QkVCRDdDQ0MKKzoxMDg1OTAwMEYwOEU1OEJDMjhFMTZEMTU1OEJGRTg3MkRGQzNCRkI1MzcKKzoxMDg1QTAwMDAyRjczRDI2M0UyNEZCQjc1NkI4MjNENjI5Qzc4RkZERDgKKzoxMDg1QjAwMEUxMjcxRDlGQjdFODk5MkQxNUVCQTFCRkFBMjQ5ODgzNDkKKzoxMDg1QzAwMEY1RkFBQTQ0REU4MjlGRDFEMThGRDU4ODdBQzdEODlEOEIKKzoxMDg1RDAwMEJBMDdGRDRDNTU3NDMwNjc3MTdFQzQzQTU5NjMyRUFFQUMKKzoxMDg1RTAwMEIzRjk2RTlERjhFMzVGQ0FGMzkxNTlDQzY1QzU3QTQ1M0UKKzoxMDg1RjAwMDczNDI0MkREMDYxOEJGRjc2RUJEMEVGRERBQjFCQUE0QjQKKzoxMDg2MDAwMEVFOTg0RkVDQ0VFNkY5REVERTg0MkJCQURGMDI3MDczMTMKKzoxMDg2MTAwMENDQ0Q1NkFDRDczNkRGM0I4NkRBM0RCQTdCNDUxQkM4OUUKKzoxMDg2MjAwMEYxMDNEOUFGNTZDNEY2QzFGRTA0QTJDRkNBNjc5QTJCOTQKKzoxMDg2MzAwMEVBQzE1RUREOUZFREE0RkJCRDg5OEVFRTREMThBRkFFQTUKKzoxMDg2NDAwMEIyMzBBQzU3MzNFNjdBOEFFNEU2RDdCNjgxQUIwMDhGMTYKKzoxMDg2NTAwMDk5RjU1N0QyRkVEMUFDN0ZBQjE4OUIwNkUzNjYyREI3RDgKKzoxMDg2NjAwMEQwQkUwMkZDRjQ0N0JDQkRBQkM2NThCMTdGQ0UzMkQxMDAKKzoxMDg2NzAwMEZBQzc1MUJCRkJDNzk3REVFODBGRTNEQkVFRDM1REVCMzgKKzoxMDg2ODAwMDYwRjBBRUY2QUNGODU5ODBEN0E3NTFEQzBFN0ZEMkRBOTUKKzoxMDg2OTAwMDJCMUVGMUVDRDVDQkZCNzgzNkNBNkI3QzVDQjQ4NkNFNTYKKzoxMDg2QTAwMEMzRTE4QzlGMEFGMzY2RTZCOEQ3RTA3NTM5N0VGNzhGOTEKKzoxMDg2QjAwMDNBRUQ4MzZENkY5REQ1MURGOUI3NEVDOENEQUVGNjU5MTUKKzoxMDg2QzAwMERENjc0NUY4RkJCOTVGOUI4OUNFQkJBRENFM0IzMEJFQzUKKzoxMDg2RDAwMERDMURERDUzQzNCQTBDRDAzOTA5RUJCNjczNDQ3QzBERjUKKzoxMDg2RTAwMEYyNTJGNzUyMjc3RUZGQTE2QzlERTg3MkRDNTZDNzNFMUUKKzoxMDg2RjAwMDA1MjE2RUJFM0ZBNTE4RjE5NEY3QzlGRDM3NEIwRkU3NzIKKzoxMDg3MDAwMEEwQzgzOEZBNzc1Nzk0QkM5MDlEMTIyOTY3NDcwRTYyMkIKKzoxMDg3MTAwMDdDNEY3MTM0QzBEQkIyM0Y1Q0VEMDdCRkMyRjY0MkZDNTgKKzoxMDg3MjAwMDhGNzgyNEJCQzdBMjVDQjE3QjkyRjgzRTY4NkE2MzZFMDcKKzoxMDg3MzAwMDY0M0QyMjFDQTcyRTExRjY4MDhGM0JFQThGQTNCQ0Y1NjcKKzoxMDg3NDAwMEU4NzM1MTAxQ0M2NzhFRkFGRjEyMTc1OTdGOTc3QTMyN0UKKzoxMDg3NTAwMDJGM0VDRThGQ0VGODhCQjgzODMzRDJGNTk4RDlGN0Y5QjMKKzoxMDg3NjAwMDJGNzBERkYwNDkwQkQ5RDFCOTRGQTZEQ0QzODZGNjAwQzQKKzoxMDg3NzAwMEY4ODlGNTIwRTM3MzkzN0E1OTY4OUVBRUY3MDdCRjU0RTIKKzoxMDg3ODAwMEY1QzQ3RkYyQkM3QUYyNkVGNkM5OEFGNUY5NURFQkM5RTEKKzoxMDg3OTAwMDNDMTFCNzhGN0REMkUyNDEzOTlGNTcxODY3QzY3REJBMjkKKzoxMDg3QTAwMDkyMjc1Rjc5MTZFNTcxREVFRDUxODM2QzgwRjhCQzI3NjYKKzoxMDg3QjAwMDZEQzRERjk2QjgzOEJGMDNGNzExRTNFM0NDRERBMDNEMEQKKzoxMDg3QzAwMDIxRUM1NzRCN0QxNEU1Mjk3QTc3MkJEOTNEN0Q0NUExQzYKKzoxMDg3RDAwMDEzRTk1M0FBMzNCMzFERkM4QTFFRUY3MjdBMzhCQzBDMUUKKzoxMDg3RTAwMEVCODZDQkUzOEE5Q0M4NUY0NzJGQUUwRjFERkQwOTk1MzIKKzoxMDg3RjAwMDEzQjRGRUUxN0RCMzkzNzU4RjNDMzYxNDU3Q0QwMkQzOEQKKzoxMDg4MDAwMDg3NjZGRUYzRkI2ODM1Q0M5MzgwRjVDN0ZGQUU3RDM0RjkKKzoxMDg4MTAwMEFENTc1Q0YyRTc5MDhBODdGN0QxRjIxM0FFNDNGMUFCMjQKKzoxMDg4MjAwMEQzMDk2RjdENDk1NDAwRTlBOTY3NzAzRjMxOEU2OUI0NUYKKzoxMDg4MzAwMDhGQzYxQ0IwRkU3RUUxN0QzNEZEOTc4Mzg5M0VDNzdERTcKKzoxMDg4NDAwMDIwNTdCRDgxMkVGMTc2MUFBRkZGNTIwRkQ4RTBCOUE1OUYKKzoxMDg4NTAwMDQ5QkNERUFBM0Y1NkMxNzA1RjBERThFQTc3MDAzQzJFQTYKKzoxMDg4NjAwMEI5OTZGNkQ3N0UyNUVDQ0M0QzhENzkxQTQ5RkY1RDE5NjcKKzoxMDg4NzAwMDk4MjdDRjdEMzI4QUY4MzhFRkE5NUJERkZGNEQwMUYyRjAKKzoxMDg4ODAwMEFEM0MzOTUyOUY3QTA4Rjk4M0Y5OTgzRDMxM0NDRjE3QjYKKzoxMDg4OTAwMEY1QkZDQTQwN0M0QTdGMDdGOTI1RTY5REJBRjdCMUVCRTAKKzoxMDg4QTAwMEM5NkVDNkQwN0UxQjczQjRGQzdBMjhDQTRCN0RDQzQwRkYKKzoxMDg4QjAwMEFDOTNDRjdCMzIyRDIzMkIzRjdDRkZCQzI1NzdFN0YyOTcKKzoxMDg4QzAwMEZCMjE2RjhENDdCQjE1NDVFQkE5REU2NDIzNzk5OTc5QjAKKzoxMDg4RDAwMDlGRUUyNjNGRDlEMzRBN0VGMjkzNjU1MTA0NTdGNzI4N0QKKzoxMDg4RTAwMDIyN0Q5QjY5RTJGQjZGMTAxM0E2OTI3REU3MjQ2N0Q1N0EKKzoxMDg4RjAwMEIxQ0NGRDUyMkNEQUZCMDc0MjNBRTc4RjVGRjBDRDhBMEMKKzoxMDg5MDAwMEZDMTlEQTJCODk5RTdGMzNEMjE4RkNENzc1NDJERTY2QkMKKzoxMDg5MTAwMDlBQjgxQ0IxNUQxQUVEMzczMTU2RUI0NDNCNTA2NUQyMjUKKzoxMDg5MjAwMEM4REUxOUY1QjJBQzE3OEY1RjY3NjZCODZFQzJGQjE2NkEKKzoxMDg5MzAwMDNFNjg3MzJEQzlFNDM4RTgxMjFGQzg5QjE2OUE0MjczMkIKKzoxMDg5NDAwMDcxMUY5MjZEQjE1MTdEQTMwNkQ2MTExNUNGQ0YzREJDREQKKzoxMDg5NTAwMDA4RjhENzk4OTlEOThBRjUyOTI3Qjc2QjEyOUYxQTY3MTMKKzoxMDg5NjAwMEM1Mzg5NDU3RTgzRjZDODZGRTg1NzFEQzJFMkZFQ0M2MjcKKzoxMDg5NzAwMEVCM0UyQ0NFMUU3ODM2RjI3OTg4NzMzNkJGQ0YxOThGMzYKKzoxMDg5ODAwMEZBMzY4Q0U0MDVGNURGMDRGRDdGNjNCQ0JGMzRCRUM4NTYKKzoxMDg5OTAwMEQ5OTI0RkZCRjcyQkIxNUU4MkY4RjRFOTFGRjE1QzgwQUUKKzoxMDg5QTAwMEQzRkFBMzNDREU2RUNFOEE0MzNFMjQ0REFGQzRFNzNERUUKKzoxMDg5QjAwMEFGOTM3RDAyQTU3QUIwMDhFM0MwRTdGNUMxOThDRkNFQUEKKzoxMDg5QzAwMEJDNkZFRkQ4MzUwOEZGNjlBMDAzNTE5OEY5QzJCQkU0MkEKKzoxMDg5RDAwMEE3NkUxMzcyRDY4MkYxM0ZGQTJEODBGRjA0NkQ2RDJGQzIKKzoxMDg5RTAwMDZFMUZCQzNBQUZFN0Q0RjZFMjc1NUU0OTU3RDlCRkYwQzcKKzoxMDg5RjAwMDNFMEJGMTYzRTE3MjJFMEYwQkVCM0ZBMDc5MTdDNjg1OUEKKzoxMDhBMDAwMEJBMjMzRjE2NkVCNjBDNDFCOUZFODVDMDdCNTY3RENGQUEKKzoxMDhBMTAwMEUyQzMyMDFGQjMyQzA5MEUwRDJFNTVGQkNCQUQwODU3MUEKKzoxMDhBMjAwMDM3NjgwNENCRTcyREJDRUZCREVFQTY3QzNFMUZCNjM2MDMKKzoxMDhBMzAwMDIxNDdFMTc5NTMzMkQwQUY3REY1NUM1MkM2Q0MwOEJFRjgKKzoxMDhBNDAwMDdGQjU2QzZCM0NFRTZCN0YxQTE1Q0M3MTYwM0RFNkY2MjIKKzoxMDhBNTAwMDI4RDczQUQyNTNDRThGQUY5NkU1QUNDMzdBQ0QxQzQ3MTgKKzoxMDhBNjAwMDI4MEVGN0MzRTdEQzkxOUQ4OEZFRUU5ODIzNjhDNUZFQ0IKKzoxMDhBNzAwMDYzOEQ5OTI2ODRERDBFNDczMUMyNkVGMzAwODJCRjEyRUEKKzoxMDhBODAwMEU3NTRFODA3RjhCNDQ4RTM3MjUzRkREQzVFNkIxNjNDMkMKKzoxMDhBOTAwMEVGMjk0MTlGQUY5RjdGMzcxN0VCMDYwQjMzNDJCOUU4QjEKKzoxMDhBQTAwMDg3NDFBRTcyRDM5MTJGN0ZENDI4NUU1OEY0OUNFRThFMEUKKzoxMDhBQjAwMEVBMUY5NkFCNDUyODU3QTBGRjBCODQ1QzJEREFCNEY1NkUKKzoxMDhBQzAwMDJFRDREMzQ1Mjg0RjgzQ0U5NTRCQzgyRkY3RDFGNTE3MTkKKzoxMDhBRDAwMDlGMUVDQkY4RkRGQjUwRUVBNERGMDc3ODk5MDVFQjZCRUEKKzoxMDhBRTAwMDU2MDFDMzczMTBGRTFERDIzRjg1RkE0N0YzN0U3RjNFQzkKKzoxMDhBRjAwMEY5MTNENjYyQzVCOEI4NDZFN0YxMDI3MDM2MTVFMzg5QjYKKzoxMDhCMDAwMDlBMjY4QkJGMjVDMjNFMkVDMkZFRkM3MDdGNTc3MjEzODEKKzoxMDhCMTAwMEVDMjVGNkNCRUE2REU0OTc4MjQyRkY1QUVFREIxQzhGMjAKKzoxMDhCMjAwMDcyRjFGNUYzN0I1RjFEOEU3OUQ2OEI5QTAzRURGRTM5REEKKzoxMDhCMzAwMDdBMjhFODU2ODM3NDhBQTc3NTUyN0M1NDgzNzQ4OTBGMDcKKzoxMDhCNDAwMEQzQTk0M0RGODQ1Q0Q0MzA0RTA3NDk5NzFBQjNBMDkzNkUKKzoxMDhCNTAwMEVDMTdGNzM3MEIzOUFDNjY4MkFFOUI3QTczN0QxN0ZBNDgKKzoxMDhCNjAwMDBEMTI0MzdFNDRBRUNGOUJBODlFMUYzODI1RTRGRTZEQjgKKzoxMDhCNzAwMEIxQ0U2QTkwMUI1NzNFQzk5N0RCM0E0NEU0RkZEMEY1NkIKKzoxMDhCODAwMEY1OUY5RUE2RkE5MUU0QTdDNDNCM0E4NzNGMUZFQ0I0MzkKKzoxMDhCOTAwMEJCNUI2Mjk4Q0YyRDI2MzZCRkIzN0FGNTY3NDJBRTJDMDkKKzoxMDhCQTAwMEIxRENBRTdDNUM5RjdFNTMxREQwNkZDMTczQkE4Qjg4RTUKKzoxMDhCQjAwMDg3Qjk1N0M0NzM2REE2OTYzODhBNEY3RkE5M0I3MDVERkQKKzoxMDhCQzAwMEE1RkY1RTMxMDFENzJERTVDRUIyNTEzMzM3RTEzRTIxMEQKKzoxMDhCRDAwMEVCNDZGNDk3Rjg5NTVFRTY5OUQwOERDQjVEMTBGMTkxNTgKKzoxMDhCRTAwMDc4N0VBQzA1ODk1RkZFM0Y2OTBFMUVFRkI2NThCMThFRTgKKzoxMDhCRjAwMDI4RjVENDg4RUYyOTgxQUYxRUFGMERENzA2MjAzRTJFNzEKKzoxMDhDMDAwMDI3RUEzNzAzM0Y0OEY4QzQxRUJFOUI5RUU3M0Y3QTc3QUEKKzoxMDhDMTAwMDY2RkZGMDczOEVGOUUzQ0MzOEVFMThFMzc2NDBDQUU1RDAKKzoxMDhDMjAwMEM3QTIyRUYxRjFGMkFEMTQwRkNCRTdEODczQjg1QzQ1QjMKKzoxMDhDMzAwMDNDQzc1Qjk3N0NFRTczM0FFMkJDMUM4RTk3RDQ4QkZERUQKKzoxMDhDNDAwMDg5NUNGRTRCOTc3RDQwRTNBNDlEQzUxRkFDQzc0OTdBNjQKKzoxMDhDNTAwMDRBQkE0NUU4QTU0MjFGQTk1RjUyOUYyNDVGRkY1MUJENTQKKzoxMDhDNjAwMDYyRjdBNDUwREM3QUFGNTgzN0U5NDhGN0IwNUY0MEY5QjMKKzoxMDhDNzAwMDQ0N0Y2N0IzRjI3MzcwMTE3RTkzRTI5QTcxM0RCRUI1ODMKKzoxMDhDODAwMDdBM0JCOTJFRTk2NEJDMUVDRUFCMUMxOTQ4RkY3MUIxMEEKKzoxMDhDOTAwMEE5QjQ1RkNFOTZBNUVFRUIxNTExOUY3RDhBNzUyRkI0MTIKKzoxMDhDQTAwMEE3N0ZEMDAzNjQ0RjE5Njg2NTg0M0Y5NzcxNUJGREVEMjIKKzoxMDhDQjAwMEUzMUNBMzUwQkU5RUQzRThEQzkxRjRERkYwRjM0MDg3QzEKKzoxMDhDQzAwMDlDQzI3Q0YzMEI2RUNGQzU3ODYyNzk0RTE2Rjc2N0M5RUMKKzoxMDhDRDAwMEVFOTM3ODdGRjU4OUQwRDg3ODY3Mzg3RjE5NzkzQUE4RUMKKzoxMDhDRTAwMDI3NjA3RDcwNTNBNjkyM0Y1NEI3RUUyMzNENUZDODQyODQKKzoxMDhDRjAwMDJCMzBERjlENzlERkJCRTU0MzkxRkY3RkIwRDBGOTg1NTUKKzoxMDhEMDAwMDM5MEQ5OUU0RkY0RUFFOUYzRDE4NTNEQjk5Q0I3MzA4QTQKKzoxMDhEMTAwMEJFRjVEOTVCMzg3QzFGOEZFQjY2MkUyRkRDODBGNUY5MTIKKzoxMDhEMjAwMDRGQTNEQzYzNTFDRURCNTY2QjBFQ0NCRjQ2M0M1Qjc4NjkKKzoxMDhEMzAwMENGMEREMDNGMjJFRThBNkU4OEVGRDFGNTlGOTYwRkM3RjgKKzoxMDhENDAwMDNDQTI0RTI3QkQ3MUFGN0Y2NDNBRjZCQjlCNzQxNzJFRDEKKzoxMDhENTAwMDcxMEU3M0RDNzMwM0NBQjkzOTgxRjQ0RTlFNkI1QzZBODEKKzoxMDhENjAwMEUxRjJFNkNERTE3NkEzMzI4N0RCOEQ0QTIxQkZBNTRCNDgKKzoxMDhENzAwMDk3RTZFMkI5ODJCNkE3QzE0RkUxRkVCQUQ1RDkxOEM0QzkKKzoxMDhEODAwMDNDNzBFNzY1QUU3NUYwOUMxQTQ4NUI1MzQxOUU0RTY4OTcKKzoxMDhEOTAwMDNDMUU5RjZGNjU3Njk0QUYwMzk2RDA5RDg4RkY4MTNCMDQKKzoxMDhEQTAwMEUzMDZENjIzMDJGQUQ5MjFBODFGNkU5MTc3NDExRTQ1MEEKKzoxMDhEQjAwMENGOTVGNDkyQ0ZCRjU5RTg4MTlDNDdERUI3MUZFMzJBRDUKKzoxMDhEQzAwMEY0MjMwMkRGOTNDQkZFMzAxREUzODU5MzFCNzMxMjU5MEUKKzoxMDhERDAwMDA0REQ0RkUyQkE4MERFQjc4MjdEN0NCMTkzN0NCMDNBOEQKKzoxMDhERTAwMDQ3RDZCOTAyRkMzOUEyOEU3OEMwRDJEMDAzRjc3MzIxREUKKzoxMDhERjAwMEFFM0YxRTE5OUY3RkYxNzQ5NDFERTUxMkUyN0FGNUJBMTkKKzoxMDhFMDAwMDg1RkIxNTg4RTc5NUVCQTAzRjBBREM5MUVGRTk1NTA5NTIKKzoxMDhFMTAwMERFNEVFQzkxNkM4REYxQkUyRjI3QjZEMzc4NUZFQTlGQzIKKzoxMDhFMjAwMEYxN0UxOURGNzdENDVEN0E1RERBQjlBRTU2MUYzMDA2NzAKKzoxMDhFMzAwMDE0NjIyODA2Njc4MEVGRTg5ODFGNUVDMkYzOTc3MzFCRTEKKzoxMDhFNDAwMDZDMEUxQkQwRjczOEVBMTdFRTBCNkVENjc5QkM2OEU3Q0MKKzoxMDhFNTAwMEZBNzY3Q0U3QzAwMEQ2MTVFNjFFNjFBRTIwQzA3MzBGMUYKKzoxMDhFNjAwMEU5MkUyNzhDREZCN0ZBNUUzQURGNzFDQjVBOEQ1REE2MEIKKzoxMDhFNzAwMDQ1RTQ1RDhGQUU5RThFRUE3NkNBRTU1RDkxMDZFMzRGQ0UKKzoxMDhFODAwMDZERTRFNzUxQTAzQkQ2OTA2RkJEOUFFNkVDM0FERkZBNkQKKzoxMDhFOTAwMDU3RTU1OUIyRkU2NEE0RkY3RkU0ODg3Q0NCQzU1QzJBMDkKKzoxMDhFQTAwMEZENzlERUJFMUJDNEE4NjhEMEI5RjQ2RkY1NzkyOUFGOEYKKzoxMDhFQjAwMEZBQzYzNzlGREE2MThENEY5N0E2QzMzQUZFQTY3REZDQUUKKzoxMDhFQzAwMEUwMDhENEEzQjgwNEFBOUZCNEZBNkE2OTczRjA5QkE2MTkKKzoxMDhFRDAwMEMxNjcyNzAzOURCNkM3MjYzOEQwN0U3Q0UzQUJBM0VCRTIKKzoxMDhFRTAwMDFENzIyM0U0NzRFNEE2NjYzRDlERDFGODFEMjM2MEZDNDkKKzoxMDhFRjAwMEFFRDgwNERDRUVFODY0MUY4RUYzRDk3OEZFRTY2N0I3REYKKzoxMDhGMDAwMDBGQkQwQ0FGQ0JGNTdFRjkwQkNFNkY4OUZGOTcxQjY3QkEKKzoxMDhGMTAwMEM3NjNCQ0RBRkNEQkE0MURDMzkwQ0YzMTA5MEUxNDg1RjYKKzoxMDhGMjAwMDc5RTIxQ0NFRTc2QkI4M0QzQTYxNEZEODgwNzVENDEzMTcKKzoxMDhGMzAwMDZCQTc3NUM3RkNGMDE2NEI5QkQ1MDVGM0JBNzY1NkM0RTQKKzoxMDhGNDAwMDYzN0RFNDMzNzM0QkJDMDM1QjE4MUY0NDNDQ0MwMTFEQjEKKzoxMDhGNTAwMEVERTBGMDMyNDZGQjgzQzM4MzY2RTZDQ0E0QUQ3QjkyQTIKKzoxMDhGNjAwMDlGNjFBREU2MDBFNkNENUZFMUJFMjFGQUYxQjNEMTdDQjEKKzoxMDhGNzAwMEZGNUVFQzA3REVCMjhERDdEOTNBRUEyQUEyQkUzMDQyQjQKKzoxMDhGODAwMEFDMzczNjM3NTFFRTAzRDFGNUQyMjI3RUZEOEJCNTJGQUIKKzoxMDhGOTAwMDREQzZGOTRFQUVCNzM4MTBERjZGRDY1QjY4RkUwNTkwNTAKKzoxMDhGQTAwMERGOUI0MDFFNEY2Q0U0RTcwNTE2RUM4MDNDMzkxM0VENjcKKzoxMDhGQjAwMDg4NDZGMkJCMDBFNEQ3OEVGMjc3QkJDNTZENEQzODU3QkIKKzoxMDhGQzAwMDJFNEIzN0YyRkM3QTQxQTM0NkY5QjY5NENGMDVFRUMwOUEKKzoxMDhGRDAwMDU4QTJCQjkwNTMzQkZDRkIwOTVDNDczN0Q2QjgwMkU5NkIKKzoxMDhGRTAwMEQxOTVCQ0ZFQTNGNTAwM0RCN0YzN0E4MDUxMUUyNERENzgKKzoxMDhGRjAwMEE0NUM4NEU1OTQ5MTdDNEFGRTI3MzYwRTFDOTU0RTM3N0UKKzoxMDkwMDAwMEY4ODk5RUZFMTI5Njg3RjFDMjUyMkJDQkMzRjM1MDdFOTUKKzoxMDkwMTAwMDUzQjQwQkY1RkVFRjUxRjFGREIxMEU1NTY3RTdFRDVENzEKKzoxMDkwMjAwMEQxRjFFQkIwRkQ3QjU0NDYwMEYxRkVCQkM5RjEwQUU2N0QKKzoxMDkwMzAwMDU5QkZDQ0NEMjRCOUJENEI3NzVBMzRGODc1NUE3MkNCOTEKKzoxMDkwNDAwMDY4NzIwM0E1MjZCNzA5RkRFMDUyMUJEOTExQTMxRDcyNTIKKzoxMDkwNTAwMEU2NzJGRkIzMkQ5N0QxRkRDNUI5RkM5Q0I4ODVENTUyRkEKKzoxMDkwNjAwMDdDMjE1Qjg4MDc3QTYyRkM1MjExOTM3ODA2OEY5MkY3MTUKKzoxMDkwNzAwMENCNEQ5OTY2MDZCOUFFMTg5MTc4NjczNjQ0OUU4NUI5OEUKKzoxMDkwODAwMEU5RDM3MEZGQjc2MjcwRTJFNjJDODA4NzZFNDhFM0ZEOUIKKzoxMDkwOTAwMDAzMTIwQjJEMDBENzZCM0RBNjhEODZGRTZCNzJERDU3M0MKKzoxMDkwQTAwMEU2NDYzQzQ3Q0UwQkQ3RkJFM0Y1OTIzNEVGQzBEQzE0MjkKKzoxMDkwQjAwMEY0NzNCMTJCRDEwRkZDNEQ2QjVCNjREMkMzRTMwRjZBMjkKKzoxMDkwQzAwMEVDRDg3NjJEMENCNzU4NTgwNkM2REJDNTg4N0Y0QUQ3MzIKKzoxMDkwRDAwMEVERDI1Q0Y3NzBGRTVDRjVGQTJDMDgzOUIwMkUzMUNCN0UKKzoxMDkwRTAwMEZGREE2MThERUMxOUYzRDg4MTlGNTM4NEZDQ0RCMkM3QjAKKzoxMDkwRjAwMDA2QzlDRUFEQjRCNDc2Qzg0NzE2REFBOTA0MzNGMjdERkEKKzoxMDkxMDAwMEIyNjBGQjE0NzNCMDE5RUZFRkMzOTYzOTNFQjc1M0E4QTIKKzoxMDkxMTAwMEI4RjZBN0E0QUVFRDNGMjgyQUZCNUNDRTA3RUJGQjlCN0QKKzoxMDkxMjAwMDA1RDYwQjdDRDVEQ0MwNkI1MDMxMEQ4ODVDMDVGNjRFNDYKKzoxMDkxMzAwMERCRjFEQUY3MzhFRjUyM0Y2Qjg5MjIzRTU0MzlGMDdDOEQKKzoxMDkxNDAwMEI3QzZCQ0E2OUZBMDVEMTgwMzcyMzEwMDVCOTAwNzE4REMKKzoxMDkxNTAwMEI3NzhGM0Q3RkI1MDJENkU5NTcxOTZCNzg4RTJDNTNCNzMKKzoxMDkxNjAwMDFDN0MzRENDM0I5Q0U0RjU0RTIxQUY1RkY4MjA3NTA3OUQKKzoxMDkxNzAwMEY5OUMxMjBBQzVFMzUxRDhENkM5QzE1Q0I0MEY2NUJBQ0YKKzoxMDkxODAwMDc3MzZGMkUxOEJCNTRCN0IyQzA2RjlGOUZBNDU5QjZCRjAKKzoxMDkxOTAwMDEyOEMzRjExNzgyOTFFRkQ2QUI1ODhGN0Q5NTkzRDc4QTAKKzoxMDkxQTAwMDM1RjRFRkNGRUNCMzZFNTU4NDdDNTVFNzcyQkZERjlBOTAKKzoxMDkxQjAwMDE5Q0NCODFCRUQ0QzI2Q0Y1N0Q5RDlCRDE5NzdDM0Y4QjgKKzoxMDkxQzAwMEIyQUNGMTg1QUI4ODBBRUU0NUI5MTFGQjkzOTNDRDlEMDYKKzoxMDkxRDAwMDlGREZBOEU4QzFFMzIzQjY5RUZCNjM5Qjk5RjlFMzEyRTYKKzoxMDkxRTAwMEE5NjVGMTQwQTdGMTgwNEIxMTlFNEIwNTU4QTdGREZDRTYKKzoxMDkxRjAwMDAwM0QxRkM3QzU2MzVDRTM5QzlEQ0FGNzdCOTgwN0VERTQKKzoxMDkyMDAwMDk2RTRBRkU0REIzOUZDMDQ5NDMxQUUzN0Q5OTkwNUQ3NDUKKzoxMDkyMTAwMERCODdBRDc1QTBGRTRCQkU3RTIxRjRGMTBCM0JEN0MzQkYKKzoxMDkyMjAwMDMxN0EyQ0Q5QTlDNTlCNzk1RDZGQjFDNkVERURFMjlENzAKKzoxMDkyMzAwMDFBQUY2RjlFRTM2RjM3QUY0MDlCM0M3RkVENkNCMjY3MTgKKzoxMDkyNDAwMEQyOEUzOUUxMUZDQUQ3MDI4NzI3MjFFOEZDMDdGQ0VFM0UKKzoxMDkyNTAwMERBRDI4QkIyNjc0RkU2OEFGNzA0MDZCMjgxMjg3RjE3MEQKKzoxMDkyNjAwMDhBOTdBNDFEMDNGNkFDQkYyNDdFMjFDOTYwRERGMzA0RjgKKzoxMDkyNzAwMDhFNjNGNDJBQTcxOUU5OTI2Mjc3QTEzRDVGRkM2NDM2RjgKKzoxMDkyODAwMEY5NDk3NjYyMEQ4QjFDQzdENjI2OTFGQ0FFQzhENDg5RUQKKzoxMDkyOTAwMEFGRTU0REU5Q0MwOTk3NkU2REQyRTg5Q0VDQTRBNjI0MEQKKzoxMDkyQTAwMDgyRTNEQkQzMDgyRUZGRkQ2NTI1QjhFRThFN0REMERGOEYKKzoxMDkyQjAwMEY3MjZGOEU0ODYzNzBBQkNCQzRFNjNDN0Y5M0Q0Q0UyOUEKKzoxMDkyQzAwMDkxREY4OEZFRTc1NDJDRTAwMTc0RjZDNEFFQTRCQUEzODMKKzoxMDkyRDAwMDg3NzVFNDQzREE0RjFBQzIyMDM1QTg3NzZFOEI5RkYzNjcKKzoxMDkyRTAwMEM3NUU0RkZBMkZENkI1NThFOEQ1RTIwM0RDNUYyRjFFRDQKKzoxMDkyRjAwMEM1RjcwQkNERkUzRTA5Qzg3RkNCN0U5RDA1MDBCRUY2QUYKKzoxMDkzMDAwMDgwNUUxODg0QTE0Qjg1M0RCN0E1OUE5ODMzODI2RjUxMzIKKzoxMDkzMTAwMENFNjhFNjhDRTAwRkYzQkI0Mzk4NkY1NTBBNzlCOTM3RjYKKzoxMDkzMjAwMDhBREJGRDk4QkM0NDY1NUM2NUVDNUM5MjlGNTBDNkQ4QjYKKzoxMDkzMzAwMEZEQjhERTM4RDdFNUNBQkNDQ0NCRTM2MzI5NTdEMzQ1QUIKKzoxMDkzNDAwMEREN0MzMjZCNUI4NjdFRjJEQTRBRTg4Rjk4Q0Y1MkZDODYKKzoxMDkzNTAwMDJERjkwRDRCQjExQTU3MDM1RDhFOUY0RjlFQkU5MEZFQTcKKzoxMDkzNjAwMEIxMEZFQjQzRjI2NEEwMEZFODA3RjlGQjUzODdGOEZCNUEKKzoxMDkzNzAwMDI3MTA5NTNDNUUwQ0YwRjRGRDE2MTY4MEZFRTU4MjJFNUIKKzoxMDkzODAwMDE4Qjc2MkZFNzNDQTFENDc3QTIzRTUyRTg0N0UwRkVDNjAKKzoxMDkzOTAwMDVDNDI5MTRBQjc2RTZFOTU2RTQ5NjUyQTdENTIzQzJBQjEKKzoxMDkzQTAwMDNEMkVBQkNDNTJGQUQzQkM3RDk1RkVGNEY5ODMxNEI4QjQKKzoxMDkzQjAwMDY3RUQ3MDY1RkMxNTc1MjUwQTlDRTk5RkEwOENDRjVFNTIKKzoxMDkzQzAwMDM5NTU4MTczMUE2RTUwQzZGNzVFMzM0QkU5RUYxMzU4NjcKKzoxMDkzRDAwMEEwRjQ1RkI5NzFCMTAyRjc2QkZDQTUzMjdFNDBEMzEyRTUKKzoxMDkzRTAwMEE1N0Y2MDcwOTVEMjNGNzhGRkMzMEE1QzE4N0E0MjE5NTYKKzoxMDkzRjAwMDNGRjRGMDNBQTU3RjU4Q0IxRjk1RkUxMTI3NUU1NEUwNEQKKzoxMDk0MDAwMDkxNkQyRjJCRTNBRjZFREZBM0MwQTNEODFCQ0FGODUyMTgKKzoxMDk0MTAwMEZCQkIwQTNDQzZGMTE3NjVGQ0I4RDQ0Rjk1RkVGMUNFRjQKKzoxMDk0MjAwMEFGOTRGRTg5NzlERjI5RjA3MjExRTc5NEJCRkU0QkI5NDYKKzoxMDk0MzAwMDJGQzQ5NkU1QTAxQzNCN0I3ODhCN0E1M0RERTc4NDE5MUIKKzoxMDk0NDAwMEY1RUZGMDhEMUE0QkMyRkM2N0ZGMzQwN0U5RkQyNUU2MDYKKzoxMDk0NTAwMDgxRUVERUFBMUM5RjYxQjEzN0UxNzlGNjBCRDlDNTBDMEMKKzoxMDk0NjAwMDExNEY4Q0QxMjdEMTdCNTVBNzFBNzlCREMzRThENzY1OTkKKzoxMDk0NzAwMDNDOTcwMDZFRDkxQ0YxREM2RTZFM0IyNEY0NjEzOEE5NzgKKzoxMDk0ODAwMENDQTFDMDI5OUU1NDY1RkM2NTk1NEVBNTNGQ0Q5QkE3RjgKKzoxMDk0OTAwMEY0QTdDRjc3Mjk3MENGREEyMjY1RkMxNTc1NkUwNUNFNUIKKzoxMDk0QTAwMEY0OTcyOUUzQjM1NzdBMTQzOEE3QTE1MjE5REY3QjhEQkIKKzoxMDk0QjAwMDU3RTlFRjEzOThBRkY0NUZCOUIxNTY4MUZCMzVENjI5NjAKKzoxMDk0QzAwMEUzMDczNEY5OTVGRTgxQzE5NTRBRkZFMEZEMEQwQTVDODIKKzoxMDk0RDAwMDE4NUFBMzhDMUY3QTM4QTBGNDBGNkJEOUE4RjQ4RjM4RDAKKzoxMDk0RTAwMEQxQThDMDIzREI5QTk0RjE1N0I3MDcxNTc4MTQzQkEwOTUKKzoxMDk0RjAwMDhDMkZCNTFGNTRFMDMxOEUwRjk1RjFFMzUyM0Y1NkZBOTEKKzoxMDk1MDAwMEM3M0I0RjJBRkRENTVGQjk4MkI0MkZCNTlEQkZFRjJBNjcKKzoxMDk1MTAwMEUzQjk4OTc5REYyQUUzMkNDOTEwRUY2M0ZEOUI0NUJCRDIKKzoxMDk1MjAwMEYwQkM3RjU3NzFCRThDMDNDQjVEREYyQkNGRkRCQjg5QjkKKzoxMDk1MzAwMEM3RTdCRkVGQ0RERjRGQkI0QkU3NzFFMjUyQkY4N0NFMkUKKzoxMDk1NDAwMEU3MjVFMjgxNTdEMDkzMDRCRjQ2RjI4NzI5NTYxNUQ1MDcKKzoxMDk1NTAwMDIzOTM2OURGODI1Q0E2MTNDRkJCNDExQzA0NDBBMjI5ODAKKzoxMDk1NjAwMDMzMTNGMzkwOTg3MDFDREJFM0E3QzExNzFGQzc2RTg2RjcKKzoxMDk1NzAwMDFDMDdGMTM4REVEQkZCQzdERTg1OThCN0ZENjkyQ0U2RkEKKzoxMDk1ODAwMDM5QjczMkZGMEFDNDAzRkM2RTAyRUU2M0JEMTVBNUQ2REYKKzoxMDk1OTAwMEEzNjQzQkRFMEU3NDhDNzhERTgxQTg4NjFFODNDRUEzODYKKzoxMDk1QTAwMEJGRTNFREFEMzRCRTYzNUU1MUFGRDI2MDdEOEIyM0U2ODkKKzoxMDk1QjAwMDdGMTBGMjJGMzNFODY5ODMwRkY0MEMxMkVEODc3RDBFRDQKKzoxMDk1QzAwMDgyMUZGNUE1MTJGQzk4Q0Y0OUVEMUE1RjFFQjU0RkY4MjIKKzoxMDk1RDAwMDVDRDRCRkQ2NTc0NEYwNTMzRTM3QzEwMTVGMTlCNUVCOTkKKzoxMDk1RTAwMDdDMUVCQUJFREU1NzQ5RjAwNjlGOTdEQThEQkVGOUQ0Q0QKKzoxMDk1RjAwMEZFRDE1NzRCRkRDRkY5RUEwODdFQzFFN0E3QjZEMUI3MzgKKzoxMDk2MDAwMDkyQUVCRkU4NkIyMDc4OTM2RjBEQzE1QjdDMDE2QTlCQzMKKzoxMDk2MTAwMDdDMUJBOTdERDlENzQ4RkQzQjdDNEQwNEVGRjIwNTA5QTEKKzoxMDk2MjAwMDBFRkFGNjEzQkNDNzE3MjI3ODlGRUYzMEMxQUZGQTVBNzMKKzoxMDk2MzAwMEE4RERFRjNCNDFFREVCQkUzNkVBN0ZEM0Q3NEU3MEFCRjIKKzoxMDk2NDAwMEQ4NEZGOEE0QjdBNkJDQUYyNzYxQzY0NjkzM0NDOEY4NkMKKzoxMDk2NTAwMDc3MzJFNjNEMjgxQzQ1OTY2Rjk0QkNDNzkwN0YxOEY5NzkKKzoxMDk2NjAwMEYxQTU3ODhFQTUwNEMyNUY4QzdGMkVDRjVEQjczNDIyMjIKKzoxMDk2NzAwMDJGRjg0NjNDRUZERTY4RTY4RjAyN0RBODM3RjFCQTQwNEUKKzoxMDk2ODAwMDdEMjJBM0Y3QzM5ODg4Q0ZFNzA5Qjk2NEM5M0MyRTlGMTAKKzoxMDk2OTAwMDJCRjA5QTI3RjRBMDEwRTUzMzhGRTRGM0NENEJDOUIzMzgKKzoxMDk2QTAwMDY0QkUxRDkzRTFGRDkxRTRCM0E3Qzk0Rjc1ODc1OEZFRDEKKzoxMDk2QjAwMDFFN0VGRjBDQUY5NjA3RkRBNzZBNkY3OTk1OUVFNzcwMzcKKzoxMDk2QzAwMEU1RTI0M0NBNkRDMTk0RUJCMDlFNzQ0MEE3M0E2QzU3NzMKKzoxMDk2RDAwMENGQUIxMUVGNDk3NEQ5QkZFQjY0MEZGNDQ3NjUzRkVBOTQKKzoxMDk2RTAwMDU0QUY3RkNCMTI1Nzg5RjU5NkE0M0M1RTg3NERDQTMzQTEKKzoxMDk2RjAwMDI5RURENjBDNEY2MjFFRUVEQkU3RDQ2RUY4OTkxNjdFOEMKKzoxMDk3MDAwMEZGN0YwQUE2RTZBMEU3MTVDQzY5QTE3M0I4Q0NGRDBBRDUKKzoxMDk3MTAwMEJFN0E3MzJEMDQ3QzA4NUZDN0ZDRDQ4RUVDRTk0REM3N0MKKzoxMDk3MjAwMEY1NUMwRjA5MDZDMkRFRTFCNjhDQ0VENjYzQzQyNzQ3Q0UKKzoxMDk3MzAwMEUwOTMyM0YwOTBFREExMEM0RjJGQzRFNzc4OEU1QkMxMkUKKzoxMDk3NDAwMDI3RUEwQUE3Mzg1N0RGRjYxNEUyRjU5RjNCQkZGRDVDMTYKKzoxMDk3NTAwMENCMEVEMzVCRDYzNzU2OEMxMkU3QjQ2RUQ3RTQzRTM4QzcKKzoxMDk3NjAwMDhGMTNFRDRDQzY4OUQ0NUY3NTI3QUZGNzQ4N0Y3OUE0NzYKKzoxMDk3NzAwMEEzRTVGNkYwNTRBRDg1RUM2Njk1MTZFREMyNzhGQjU0ODIKKzoxMDk3ODAwMEVEOUQwMzcwQkZGMDQ2QzhGNzcwRkY1NERBRDEyQTgwMTAKKzoxMDk3OTAwMDREMDA1NzMxN0VFRUEyRUE0ODFDQzk5OUQxQkVDMjdENjgKKzoxMDk3QTAwMDBDRjdGQkFBMjAwNEMwRkNGMTZDMDZBRkE3QkNFNUY5REUKKzoxMDk3QjAwMEQ2ODJGM0IyRTQzNjdBNkYxNUU0NjYwQ0FFN0ZDMTMwMjAKKzoxMDk3QzAwMDlEQkVERkYwOTYyOTkwQUJFOTI0MkY1NjBERjA5Rjk3QjAKKzoxMDk3RDAwMDBDRjJEMjQ5QkMyMEU1NjI5MTc4MkY0NzVFMDc3OTlCNTUKKzoxMDk3RTAwMDgyRkNGOTY2REJEMDNDREFBN0Q5MzVDQzg5RjQ1QzZBMTcKKzoxMDk3RjAwMEUyRUZENUY5NUZEN0Y5QjkwQzJDRTVFM0I5OTE4NEZDMTgKKzoxMDk4MDAwMEE3RTlGRDAyMEMyRTkwN0ZDM0UyRThGRDgyNjY5REQ1OUMKKzoxMDk4MTAwMEZEQTkxMzdCNUEyQkY4Rjg1NkFBQTUyQzQwRjNBQUZCRjYKKzoxMDk4MjAwMDhBQjdFNkYxRkFDRkFENzk1QzJGQ0JGNzFDRTg4OUVGNjgKKzoxMDk4MzAwMDBEMkVEQTZGQTFCQzg4MTVCNEU0N0IzQTM5NTc1NTUzMjUKKzoxMDk4NDAwMDc3RkZDRjdCNDVDODc5NEREM0M3RkMzQzE2NkJDOThGREEKKzoxMDk4NTAwMDNDODdCNTUyQ0MyQkU1NEJCN0M2Nzk5RjhFOERDNEFGRjQKKzoxMDk4NjAwMDQzQ0U2Qjg0OUM3RjhFNzFGRjY0OUIzM0UxM0FCOEI1MjUKKzoxMDk4NzAwMDA1NDgxMzg0RDZGQjNCMDc5REU3OTNFN0ZBRTYzMDBGRDQKKzoxMDk4ODAwMEI1RjM4MEREMjhENzFFRkY2QTdBQUY3RTAxNkJBNEVCQUIKKzoxMDk4OTAwMDhCOEE2NjY3MjA1Q0MzREE0NkE3QzI3Q0Q3QUVBQzdGRjIKKzoxMDk4QTAwMDI1MTVCMDlCRDZCMDdBMENENkI5QTcwNjY2QkU4MjZERDgKKzoxMDk4QjAwMEM1N0FFRDczQkY5M0Y0QzQ4RkNGNkZEMTZBOTc1RjBFRjMKKzoxMDk4QzAwMENGQkJFMUI5NTFDQkIxOEUzQzU5RTc3QzYwNkY3MDNFQTQKKzoxMDk4RDAwMDgwM0NCOUY1QzQ3M0Q3MDc3QTcxQUZEMDBCQzI1RkVBODkKKzoxMDk4RTAwMDQ1RDUxMkU2RDY5MkMzRUY4MTc0RTg0OUQxNkQ3RjREMUMKKzoxMDk4RjAwMEM3M0QxNjczMUI5RDQzQTlEOTY1NEJDNEZBQzkwMkM2NUYKKzoxMDk5MDAwMEZENzZCODBFQzRGREI1RDQ4MzJGMkQ5Q0VGNUYzRUFGMUUKKzoxMDk5MTAwMEQxN0IzNjVGNkE4Q0JFRTdEMDU1REMyMEUzNEZEMDNGNjkKKzoxMDk5MjAwMEFFNzdDNzYyQjhGQ0VCQTJBRTk3RTE0RDFEOTQxREY2NzEKKzoxMDk5MzAwMENGNUY5QTAyNDNFMkIzQzk3RjNGODNFQkIxOTQ3ODFGQjQKKzoxMDk5NDAwMDE4ODhFN0Y1NUVEMDVDNEIwMTk3MkZCQjA1MzJGODM5REMKKzoxMDk5NTAwMDgxMEUzRkMwN0U4QTA5RDcwOTFGQjRGMEJBOUQzMURFNUYKKzoxMDk5NjAwMDk1RUJFODBBNEY5Qjk1Rjk3MTNGNEIyQjdBRjU3QjhDNzEKKzoxMDk5NzAwMDQzQ0VDNUQ3OUIzQTA0RThCMjE0NTk4NDc1QzkxMjhGRjcKKzoxMDk5ODAwMEIzMzMzQzk2ODlFN0VGRkY4MUU3RTNGRTlFOENDRTA1N0IKKzoxMDk5OTAwMDE5RTlBOTM5Rjg3M0JBQUFBRkRBQTIzOTNFRDI0RjQ5MDgKKzoxMDk5QTAwMDNDQ0ZDNThCRjNFQkFEQkM0QzVFNjcxNEY4MzFFNkM4MTkKKzoxMDk5QjAwMDczQzBGM0NERTY2ODE3RUE2Qjg1RDlGQjY3RDQ3MzU5OUEKKzoxMDk5QzAwMDdGOTM3OUYxRkVDQzJGQzgxRkIwQjM0QjdCRjBGM0M3NjgKKzoxMDk5RDAwMEMxQUVGQzcwNkI0NzNFOUUxNUY2OTNCMjhFQzU4QTNCQjYKKzoxMDk5RTAwMEFGNDc3QUVDMEVCMjVGNTM5OThCRkM0NTFGNzY0NEQyOTkKKzoxMDk5RjAwMDhCRUE1ODNBRUUxMDUyOURENzRCRUJCMEExQkQ4NjM2OUMKKzoxMDlBMDAwMDBBRUIyOEU0MkYwMzI0QUYzMTg4MTdBRDJCODQxNTExRkUKKzoxMDlBMTAwMEI2M0EyNjlFRTgzMEZDMzAyMzNCM0QxQ0Q3MDBFQkRERjgKKzoxMDlBMjAwMEY5MzEwQkUwNzlBQUU2MzNEMzRCRTNBMDdGRTdENzY2QTEKKzoxMDlBMzAwMENBODMxRThGNzkyMTFEQkYyM0IxRjNFNEZCRTk1OEVGRTAKKzoxMDlBNDAwMEE5M0ZCMzg1RTAyMUFENjM0RkYyRkFEOTkxMTkzOERGMTAKKzoxMDlBNTAwMEY2RDM1NkE3OERFMjgwREI4OTBFQjI0RUI5OUQzMTE3NDEKKzoxMDlBNjAwMEVFODMxNjdEMTg0QkVGMTkxNzFFNkE4QzIxQkE4OUJBM0UKKzoxMDlBNzAwMDVBQjE1ODc3RjE2OTVFMEZEOTg1QzAzMEM4MDNEQUFDQTYKKzoxMDlBODAwMDJDMTgxMTJGNUIxQzJBNUNDNDIyRTA0QzdDMjRDMDExRDIKKzoxMDlBOTAwMDc1OEU0QkNEMUZFRDdENDQ1RDZEMjgxQjFBNTk1NzYzQTQKKzoxMDlBQTAwMEVEODk5REJFNEY2NURDNDcyQ0QwMzhERTlGRTY3OUJBNDQKKzoxMDlBQjAwMEY1QTEzQURCNTQ5REQzRkI0NzFERTk3NTc1NkMyMDBENkMKKzoxMDlBQzAwMEUzREJFNjVCMzdBNDYxQkNGQjc4Q0M4RjQ0QzcyNzdFMjEKKzoxMDlBRDAwMEIwQTYyMTVEMUI0NkZEMjdGOTkxMDZCODM3ODRGOUFGODIKKzoxMDlBRTAwMDM5MTBDNUE4RkVCNTkwRUE2QjU3MEIzRkZCQzREOTRGQTAKKzoxMDlBRjAwMDU4MkFEMEIzQTE4ODkxRkY2NEMyMEZDQkZFODZCM0E3Q0EKKzoxMDlCMDAwMEU2MjMzRkNGMTREQjlENjgxNzcyNDUzREI0RkVBQUZGRTQKKzoxMDlCMTAwMDlCREExMjQxOEY5RDEwNTcwNzgxQzFEQjIxQUUwRTQyQTcKKzoxMDlCMjAwMEVDQkYwREUyNkE4NEYxQkQ1MzZDMzc0MzVDOEQ2RDAwNzAKKzoxMDlCMzAwMEUyNkE2QzlGODJCODFBQzc2MTVDOERFRDEzMTA1NzYzOUYKKzoxMDlCNDAwMEJCMDZFMjZBNkMxRjgzQjgxQUM3M0QwQTcxMzVCNjBGQUYKKzoxMDlCNTAwMDQzNUM4REQ3MUJDRUNFMkEyNTdDMEUzMzdBQkY3RTQ5M0YKKzoxMDlCNjAwMDRDQkMwOUVEMkJFMDFGOEQ3NUExQjdERDgzQTI5MTFFQzIKKzoxMDlCNzAwMDU3OUQzNjI5RkMyRDZFOEQ1NkUwRTFDNzEzQzNGQzQ1NzkKKzoxMDlCODAwMEZFMUZCOTVDRTkxRjcyMjg0QkU5Q0ZGNEY3NTVFMDJCQjMKKzoxMDlCOTAwMEVBMDYyOTMwRDY4NzIyRUY0RjlGNUZBMkMwNjlERTA5MEYKKzoxMDlCQTAwMENBRjhDQjJBQTcyQTcwOEFFNzA2NjU3QzUyRDkyQ0E1NjkKKzoxMDlCQjAwMEZGQTE3ODAzMUYwM0Q1MjY5NThGRkNGQjBBNjc4QTYzRjQKKzoxMDlCQzAwMEU5N0M2NTU3NzJGQUIwRTA4Qjg0MUZGOTg1NUVEOTU5M0MKKzoxMDlCRDAwMERENzY2RTFGQjk1RkNGRjM4MUNCMDU2RThCRkEzODQ5MDYKKzoxMDlCRTAwMDNFRjcxRDFERkE4N0RDMDJFNDg3ODk2RjlCQkFEQjYyQjIKKzoxMDlCRjAwMDdBMDE1RjcyMUYzMTMxM0M1NzQ4MjcwRTAwM0Y4N0I4MEEKKzoxMDlDMDAwMEVGOTE5MjUzMzEyODk3N0JDQkFENTFDODlGRERFRTkyRjcKKzoxMDlDMTAwMDY4ODQ5Nzk0NUJEMzIyRTVBODIxRDMzQjg4REU1M0YwNzgKKzoxMDlDMjAwMEYyRjVDOUZCMUYyQTk5N0FERTdERjQ4NzUxRkU3QTlGRUYKKzoxMDlDMzAwMEE3N0ZDMjgyMkNENDg3NzNFOEM4RTZEMzdFNkQ5ODhFNDYKKzoxMDlDNDAwMDUzRTlGQjRFQ0MzQjVGQzFERkE4MTcwQzM3RTlEM0YwREIKKzoxMDlDNTAwMEI5NzY5NTlFRUVBQ0ZCOTAwRTRGM0M2QUE2NzM1ODFERUMKKzoxMDlDNjAwMEYzODlGQkU1N0M2M0Y0QjMzMTJERjlFN0UyQkZEQkNEOEIKKzoxMDlDNzAwMEM3NDNGQzFCODU3NDgxNjcyOUY4MjVCQTlDQTM5MDNFRDUKKzoxMDlDODAwMEJGMTFGQUY2NkY0MkRGMUUxNzdDQzUzQzE2NjFFNkUwOTUKKzoxMDlDOTAwMEY3NDlCRTM1Q0M3Rjc4N0MyRUVBNEQxMUM3NkJERDM1OTgKKzoxMDlDQTAwMDBGNkI2ODZFOTI5OEFCREUxMTQxRDc0NzA1MUU0Rjg5NDYKKzoxMDlDQjAwMDc1QURDNTc5MDE0RUI5QzZBRDIxRkQzMkVBM0MxQUVBNEYKKzoxMDlDQzAwMERCMTVGN0I0MTBGQzg0RDBFRjFFQjU2RDc0QkRFNzFEMzUKKzoxMDlDRDAwMDQxNkEyRjlGMUZBMkZFMzFGQTczQjQ4RTBFM0FCODU0MTgKKzoxMDlDRTAwMDNBMUFGOTE0MTBFQjkxRjM4NkVGN0ZGMTAwQ0FEQjE5RjEKKzoxMDlDRjAwMDM3QzczRkRFMUZFQjQ2N0YxMUVGNzdCODc4RUIxNEFEMjcKKzoxMDlEMDAwMENCODU3NjNGREVFRjE2NzA2RDNFQzJEQkM0QkFFMkZENTYKKzoxMDlEMTAwMDdFODIwMzYyNUQwREYzOTMwRjZDNzA4NjlGQzc5QzM1NDYKKzoxMDlEMjAwMEE2NDg3RkQzOTUzQzZEMTVGNERGMkNFODY0QkM2RjlCOEYKKzoxMDlEMzAwMEE1NzZCMEEzMTNCRDkyQURGNEE3NDU0NzRDMDZCQjEzNUYKKzoxMDlENDAwMEFERThGRDAxRkM4NUZCODE3N0M4MEZGODNEQkFEOEJGQUYKKzoxMDlENTAwMDIyM0E0RUVCQzg5N0FBNDg5RTU2QzdEQ0Y0MDZFNkRCQ0IKKzoxMDlENjAwMEQ3MUNEMjE5RjdCNzkzNUY0MTdCRjlFRTc4MUJGOUQzNzMKKzoxMDlENzAwMEU2RjFFMzdBNDZDQTVEOTM1OEM3NTY0MUY3NjE3RUY3MkMKKzoxMDlEODAwMEQxM0I2MEZDNDQ4RjhERUFGMTQzOTlCQkU3OUQzMERGMDYKKzoxMDlEOTAwMDg0NDlCQTJCMDhGMzFERUFGMDI3OUUxODdFREU4MUZCNkEKKzoxMDlEQTAwMDkzQTk2MjBEN0IyNjREQkIxRjlGRkZFRTIxQjAwQkNFMEEKKzoxMDlEQjAwMDMwOUVCMjdGNzNEOUI0ODlGRDkwOEYyMUNFQzdBRUU4QjMKKzoxMDlEQzAwMEYzOUFFMEQ3MkIwMkFGQkQ4MjVGQ0Q0MkJFNzcwQjdGMDcKKzoxMDlERDAwMEIyNTNGODkzRURFODRGNkNDOEU3MjJCMTFFRUU0RjM2NTAKKzoxMDlERTAwMDBCN0YxMjQyN0YwMkVENUJDMjlGQkM4OUZFMDREQTgyQzgKKzoxMDlERjAwMEYxRDlBM0M5NkVEQTM1RTE0RjIwNDFBMUYzMDQ4Qjk0NjgKKzoxMDlFMDAwMDc1NDlCQ0NBN0FFODBBQkZDNjI2QzcyOEZDMUExRDlCM0EKKzoxMDlFMTAwMEE0RjQ5Nzk4RDMxNUQ4N0QzNjRCODFBRjNBREREN0UwQkYKKzoxMDlFMjAwMEE3NTRCRjMyRkNGODcwODM5RjJBNTFFMDIxODcyNjI4NkYKKzoxMDlFMzAwMEY3NTdCOEE3MjlGRDUzOEE2NjI4RkRFNUFFRDk0QTNGRjIKKzoxMDlFNDAwMDEzRkI2MTg1RkM3NzU2MThCRDU2QTczQzU3RUMzQkM5MDAKKzoxMDlFNTAwMDc4RUFERDMyOURGNjZEODZCREE3QkIyMkY1QjY5MDc1MUEKKzoxMDlFNjAwMEVDOTM5OTcwOUYwQ0MyMTdBNzU5Q0U5N0E1RjQ1MzFDNzkKKzoxMDlFNzAwMDc1QzhFMjQ5QzdGMzdCRjUxNTIwODdEMDE2MUY4MjM4RDUKKzoxMDlFODAwMDhEOEE4RjIwRDcxMEY3MTY3QUM2NTExQzA4RjFEMjYwNDAKKzoxMDlFOTAwMEUyNDMxQkRGNkY5MkZCNTZDMzBDRkI0RjEzRjJENUZENjEKKzoxMDlFQTAwMEE5QzIwQkVDNEY4REU4REI0NTVDRDYyQkU5QTJFMjMyNzAKKzoxMDlFQjAwMEQwMkY4QUJGMUU4RkI5NjkyRkNBQ0RCNjBGMjE0RUM1Q0MKKzoxMDlFQzAwMDM4RjdDMzlGNTNGQzI1RTNCNkFEOUZGRDlDRTJEQkFEQTUKKzoxMDlFRDAwMDFERkFFMjU1RjRBNTUwRThFRDk2NDM1OTREMkRBMDZGQkIKKzoxMDlFRTAwMDlCNTMzNTk3MjAzNUU5NEI5MUQ0OTcxNjYxMzdDQjZBNTAKKzoxMDlFRjAwMEU4RkExMDcxREY1NjhCMjcwNkUzQkZDRDg3OTc4ODc5ODQKKzoxMDlGMDAwMDIzRUMwOEM1RUIxMTc2MDRGMzQ4OTZBOEY2QTdBNjg3QkMKKzoxMDlGMTAwMEZCQjMzOEIzMjJDNzMzRDZENzMwREYyMDAzM0NEQzMwNjUKKzoxMDlGMjAwMEJFQzQwMDRGMzA4QzlGNkE4MDZGMzA4QzlGQTVGNDM3ODEKKzoxMDlGMzAwMEMxQkFDRjE3NkY2RjE2RjY0MThFMkIzNDdCNzQ1NzI3M0IKKzoxMDlGNDAwMEY2NzZDODIxRDVCRTMyNEY4RDcyRUVBMUY5RTg1Q0IyMkIKKzoxMDlGNTAwMDlCNUI4RUFDMTA3NDlDQUZGMDY3OEY3Q0NFMjFBMDczOUUKKzoxMDlGNjAwMEZFQjlGNzk3OThGRDMxRkQ0MTBFNEEwRTlCNURGNUNFODcKKzoxMDlGNzAwMDMwRkYyNDlGMThFNkMzMTFGMzk1REE3NTQ1RkY5QTBFNUEKKzoxMDlGODAwMDczRkU3NkI1Q0U1REMyM0VFRjEwN0VFNjY1NDNGQ0E2NUQKKzoxMDlGOTAwMEZGNzBGQUREMjkyMDNGNUI1QTRDOTQ1RjZEMzkzNDM1RjAKKzoxMDlGQTAwMDA5RTdEQjdENzYwRUUxREI3NEQ4NDRFRjkxQURGRkUzOEEKKzoxMDlGQjAwMEE0NkJGMTdENDU4OTlGQzRBN0YwQkQyNTMxQjhDRjdBNDgKKzoxMDlGQzAwMEE2QzU0NEY2QUZEMEUyNDk3Mjc0NDI3N0EzN0M3NTM1REEKKzoxMDlGRDAwMEFGOTQ1QjA4QTA5MjkwMkVCQkMxMEZEMUI5NjE2MTRGQzUKKzoxMDlGRTAwMDI1NURGNjFDN0Q4Q0U4QkVFREYwRTIyNEE0RkJENUVERUEKKzoxMDlGRjAwMDI2ODUyRTIzREJENDc4N0RDNDg5NDQwNTFFRkEzMThGNTMKKzoxMEEwMDAwMDA3QzFFRjJBRjRCRDEwREU0NkJEQzA5RDExMTVCRTVDMzAKKzoxMEEwMTAwMDFEN0Y5MUYxQzA3NkMxQTc2RDgyNEZEQkEzNUM5NTlEM0EKKzoxMEEwMjAwMEVENkI2QzNCNjY5RDFGRjk1RDg1NEZGQkYyQkFEMUE3QzYKKzoxMEEwMzAwMDdENzlGRDZEMzNGMDExRURFQzk5RTMyNkIyQjMyMzFDNkQKKzoxMEEwNDAwMDhEN0E2RDI3RkMyODZFMzUxOUZDODQxQTM3NUM2QUJFNDAKKzoxMEEwNTAwMDdBQUNBRkQ4RUYzNEQ4QzVBRUVFOTc3NkIxNDQ3RTNGMzgKKzoxMEEwNjAwMDI1NzQ0REE3RTc2M0MzN0MxMEU3MkEwREY0OTQ3MUY0QkYKKzoxMEEwNzAwMDg1RjkyNkNGQTMxQkY4RDdDNUZERTE3OUZDQzY3Q0ZBOEMKKzoxMEEwODAwMEJGRkE2MkZEQTVBNTgyRkNDREVBOThCNzg0M0Q3RjhCMUYKKzoxMEEwOTAwMEVDRjkzQkRGMEI3QkZFN0Q3NzhBOTMwRThFQkZBQzI3RkUKKzoxMEEwQTAwMEVBRDFDMTBFM0JDRUUyMjJFREI4M0MwRjE5NkE3RDI3MDIKKzoxMEEwQjAwMDI2MzJDRUY3MDg3OURDRTk3RTc3RTIwMEU0NjcyRkZERUYKKzoxMEEwQzAwMDdGMzRERTc5NEJDNDNCNkY2MkJDRDMxQkY3ODE3OEJDMTUKKzoxMEEwRDAwMDczQzAzRDlCQzczQkE5MUE3RDJGNjY0OUNDNTU2NjZGNUYKKzoxMEEwRTAwMDI3NzJGQUJGM0RDRTk5NTJBNEM2MzlFNTJFMzVDRTkxREUKKzoxMEEwRjAwMEZCMDdCQjFEMUE5REMzOUE5OEE3QzYzREJCRjExN0FDQzEKKzoxMEExMDAwMDMzRDlCNTAwQkVDN0I1REQzREVEQkM3NjM4MjhGNEZCQ0MKKzoxMEExMTAwMDgwRTBDRjZCQzIwRUJGMjJGMjg2MUQ0ODdGRTI0Qjk5RDIKKzoxMEExMjAwMEUwMEJBRjU3MTQ5Rjc2QzVCQTlDQzg5RkY5M0MyRkNCNjQKKzoxMEExMzAwMEFCQTE3QzdBQTRGNEVGQkU1QTFBN0ZGMENDQUNEM0Y4NzIKKzoxMEExNDAwMDdFRkY2RTQ3MENENTU5NzYyMzNFQjA4NDgzMTZFRjY5QTcKKzoxMEExNTAwMEZDN0VDNTZFQjdFNjVDRDI0OTVFM0ZBMjREQjUwMzMyQzgKKzoxMEExNjAwMDRFOTA3MkI5QkJGNTEzOTJDQjVERURFN0Y3QTdEMjdFQTcKKzoxMEExNzAwMEM5NzFBRkIxOTc0QTkxM0U1N0I1MzI4Njc5QzM4NUVDMjQKKzoxMEExODAwMDhGRDEyRjVFRTgzOUM2RjEyM0NDOEQ3QTY3N0VDN0Y4NzAKKzoxMEExOTAwMDFDNEY3QjUwQzdGM0NGM0JEQjQyNDlCODVERTcwOTFFM0MKKzoxMEExQTAwMEQwRjEzREYwRTJCNjIwRTFCQkNGQUQzOUY0NEMxQTU3MDcKKzoxMEExQjAwMDhBRTdBMjVGM0JGQkNFNDRCQ0JFRUJCNEQ5NjRBMzdENkYKKzoxMEExQzAwMDI2MDdFOTZEQjFEMENGMzdDRjlBNjI1RDQ0NUY5REY2MjcKKzoxMEExRDAwMDM5ODI2RDlGREM4RkZBRUFCN0VCRjRCRUM4RUVCMzgzMjkKKzoxMEExRTAwMDkyMjNFOUI2RUE0QTlERUNDOUY2RDEzNjEzRDY5N0I3NjEKKzoxMEExRjAwMDlGMzY4QkYzRDY0MThBMUY3NkI0NjdDNTYyQkJERDBERUYKKzoxMEEyMDAwMEZBNDNGNjIyNDRGNDdGRUM0QTA3RERCNzEzRTZFMzc2MUYKKzoxMEEyMTAwMEMyNDk3ODQ4MzkwODlFMzY5NTc1RjZCRDlEQzdBRUU0QUIKKzoxMEEyMjAwMEVGRDE4RjM4RkJENzE4QTRDRkFCQTdGN0M0QTBCRERBMDYKKzoxMEEyMzAwMEQ1QzY5RjMzRTI5RTk2MThDQzMzREY2ODM3QzVGMUJBOTYKKzoxMEEyNDAwMENBRTA2NEJDREUzQ0U2REVEODQxQjhBRTM2MTNERkJGMDAKKzoxMEEyNTAwMDExNzE4RDdDREVFRUQxRjNBODlFQkZCQjhERTc2MUJCOTMKKzoxMEEyNjAwMDRGRjNGQUQxRjYwMDNGQjdDNjg0MUQ5M0UzQjc5RjlFMjQKKzoxMEEyNzAwMDNBQjExRkQ2MEYwMjE2MUEzRjgyMDU1NkM0QzNCODU3MEIKKzoxMEEyODAwMDUyQjY1RTQ5RTc2QkZDRDUyQ0QyRUU5NTNBRDQzOEE3OEUKKzoxMEEyOTAwMEE0Q0RFMDlGQkNENUE0MDc5MjBGMDdCRjlEN0E0RDA1QzIKKzoxMEEyQTAwMDlEQUZFNzc2NzJCQzU5QjUyRkJCNEUyRjQ5OUU4QUNGMjIKKzoxMEEyQjAwMDhGRTVDRjY3MDE3RUJGQ0NDRkYwQzcxQ0YxREQ5NUZBRUIKKzoxMEEyQzAwMDMxRDc0RDJCQzdGOTM2RjM3MzY2MjM2MjU1N0I3NjcwMTEKKzoxMEEyRDAwMEQ0RUNERjJFQzRGM0ZGOUI2MkM4Q0Y2RUM3RjVFM0ZDNUUKKzoxMEEyRTAwMDg3MThENUNGNzY5NzNENTIxQThGNzVFQjU2RTZFMjcxRjcKKzoxMEEyRjAwMDlDNkFENzRCQ0Y2Q0RBMUIwRkUzREY1OUFGMTE3REM3RDgKKzoxMEEzMDAwMEU1QTlFQkRERTlDRUZFMzVFNkMxNjc1QTM5N0Q2NTNENEQKKzoxMEEzMTAwMDQ5RUFFNTlFRDZDNDFCQzkzRThEODZCQjgxOEVFRjk0NkIKKzoxMEEzMjAwMEJENDQ3NUVDNUIwM0VBM0M0MzM3QzYyODc4MkY2QzQ5ODMKKzoxMEEzMzAwMDM0RTQ2RjZBN0QxQ0UyNEQ1OTFGODgyRDFGMTJDRURGNTkKKzoxMEEzNDAwMDBBREI3OTdEN0RFODBGNTMwNzA3MDFERkUyRDFGQ0ZDRDIKKzoxMEEzNTAwMEJDQjEyRTNFREU2QzUzRTMyQzQzNURCQ0QwNTgxNzM3QTYKKzoxMEEzNjAwMEZBNzMxMThGMEQxMUZCMUFFN0M0M0ZDMkNGQzk3QUMzMkMKKzoxMEEzNzAwMDM2NEI3MDg2RTcxMkUyODc2MTY2NDg1REU4NUNBRjM3NkUKKzoxMEEzODAwMEE5MDBFOEZGQjI4ODJGODc1OTFCN0U5NjA2QUFCMjU1MEUKKzoxMEEzOTAwMEY3OEY2MDExNzEwMTczRjg1OUYyOTA3MDdFM0JGQ0I4MzEKKzoxMEEzQTAwMDlBMEYxNDFENTFFNTEyRjJDN0NGMzE5RjVDODk3QjlBMzkKKzoxMEEzQjAwMEE0MDc3RTdFMkVFMjIyRTM4Q0Q1MzFGRDlCNUE4MEFGMkUKKzoxMEEzQzAwMDQzMEYzMUIxREZGMTdGRjZBMjVDMzU3RDI2RjczMzIwRjQKKzoxMEEzRDAwMEY0RTg4RUZCRjM4Q0UyRURFNkNGQUMyNDc3NUJDNjcwM0QKKzoxMEEzRTAwMDNGMjVFMzE0Qjk0RjczMEQ2QjU5NTZBQUUxQjk2Q0ZCQzUKKzoxMEEzRjAwMEYyMTZBMEU3QTY4MzczRDMxN0MxRkNFRjdENDREQjlENjMKKzoxMEE0MDAwMDZDNEJBMUZDM0U3RDgzOTI1RjBFOTU3NUE4MjMyNjdGNDEKKzoxMEE0MTAwMDUyMDFDNkVCMzY0NUFGNjU3RkQzOTEyNTMxRjg3RDkxNkEKKzoxMEE0MjAwMDMzMjExM0M5NjlGMzg3NTY4NjdGMUZBMDY5ODc4REY2OEMKKzoxMEE0MzAwMDczOUEwRTVCNjlCRjY1REIwRUFFMjdCMkVFMkNFM0ZDQjAKKzoxMEE0NDAwMEQ3ODUzRERGMkZFMkRFNTc0NURDQjI0RkM0MkQ3QjQ0N0MKKzoxMEE0NTAwMERDMTIxNDcxQ0IyRTExQjdFQzEwNzFDQkNCQzI2RjZFMjYKKzoxMEE0NjAwMDNBMjJGNEVGOUU5ODAwRkY4RTJEQUZDQjRBM0M2RkVFNjAKKzoxMEE0NzAwMERENzJENDBDMEJBRUY5NjhDODlBMjA0MzdGQUVFQUM5RUUKKzoxMEE0ODAwMDc4QTdBQTI3RTM1MjU1RkIzMUM2OTFBRThDMkZCNTY3NEEKKzoxMEE0OTAwMDJCRkRBM0Q4OTU0QUZGRDVFRDgzMENGOUM4NzA0MzNFMzgKKzoxMEE0QTAwMDUyNjI4ODQ3MjZBQTdBNzkyODIyREZBNUZDNUFDRDc3RkUKKzoxMEE0QjAwMEFGOERDQzc3MzM5MTRGM0MwRkRDRDZGMjMwRjE3MURCQUUKKzoxMEE0QzAwMEYxQUM4NEM4QjhFQzY1QTEzN0RCOEU3M0ZGRkNGMjg5NzAKKzoxMEE0RDAwMDUzNzE5REM1NkQyNzA0M0ZCRTE0RkM2ODE1NzE4QTI3MTIKKzoxMEE0RTAwMENEN0Q3RDdFMEFFNjE1QTdBQzc4RUVBMzJCNzk5NkY3OTUKKzoxMEE0RjAwMENCRkI0RTA0M0U4RDhGRjQ3RjlGNTFEMjE4ODZCRkRFN0EKKzoxMEE1MDAwMEYyOTc1Q0FBOUY1Q0E0N0UyQzhERTNFN0RDMzY2QkQxQ0UKKzoxMEE1MTAwMEY0RkVGRDg1REU2QkE5Q0JDRjEyRTc5MjZBMDdGMDdERDIKKzoxMEE1MjAwMEQxREFBMUQ4NkVCMDc4RDJGMUZEQTdDRDlBNjcwNkRBNUMKKzoxMEE1MzAwMDcxRkY2RkFDOURGRTNEMDk1RkJFM0NEN0M0OUFEMDNGMTIKKzoxMEE1NDAwMEYwMjNDOUYwRjM5QzY2NDZGOThBMTJFMEQzQ0NFQjQzQzIKKzoxMEE1NTAwMEZBRDgzMTVGODc0MTdBQUM4N0UxQkEzNjU5NTgxM0ZBOTUKKzoxMEE1NjAwMDc5RTY2NjRFNDc3N0M2NTUwODlFNzNBQTlGNzczOThFNUYKKzoxMEE1NzAwMEQ3NDI3Q0ZGMThEQzJCN0RFRjAzOEY2NkUxNzdCN0IwMDUKKzoxMEE1ODAwMEM1N0QzMjlCOURCRjc3NjBDOUY3REU5RjVGQzhCRjY3RkYKKzoxMEE1OTAwMDlCMzAwOEU3MkRDOUU2RkJBODQxQjJERjMzQzRCQ0E2NTcKKzoxMEE1QTAwMDk4MUQzREM5OUY3NjY1NTcwRDc5MkVBQjU2REY0NzMxMTMKKzoxMEE1QjAwMENBNEI5M0IwQjMyRjY3N0E2Njc0RjYxRDhDNjdGM0Y5QjQKKzoxMEE1QzAwMEI5OTA2RDVGNENENkYxQjkwNUY2NzgzN0ZGMkVBNDVCRDQKKzoxMEE1RDAwMEM3RjdDMDVFRkU3MjQyQ0NDQzRFRTQyQ0Q4N0ZFNkIzMDcKKzoxMEE1RTAwMEY5MTE3MjUwMTBBQUQ1QzVERkE5MzBBOUY1MkQ1MzEwNjUKKzoxMEE1RjAwMEY5N0QyNkQ2NEE3QTNEMUMxNzlDNzhFRTdDMjM0RUE4MUUKKzoxMEE2MDAwMDcxREVCMDE2MzVGRjBGRUZFRjM3Njg3OERFQUM0MzlFOTIKKzoxMEE2MTAwMDkwMjFDOEZGODNGQzdCMUExNzkyMjdFM0JFRkQwN0Y5NDAKKzoxMEE2MjAwMEYyQkNBNEY3MkY3ODhFNTg0Rjg4QTVGMzM1OUIwRURBMkQKKzoxMEE2MzAwMEQ3NjExQzY5QUNGN0JERkQxRUI3RTM0NkZDOUJERjlCRjEKKzoxMEE2NDAwMDlFOEVGMUQ3RTY5MUQ3QTVBMzFFNkY0MTAzNEZERkYzOEUKKzoxMEE2NTAwMDU5MzRERDFEMDlFM0ZBNjNEMURFMzNGRTlEMkQ3RkY1MEMKKzoxMEE2NjAwMDc0M0MyRkIzNjVCQzg0MTdGMkYxQTNGOEY4Rjc5RjdCMTUKKzoxMEE2NzAwMEVCMzFGQzFFRDg5NjFCNDUzRjdCODA4Rjk3QjBCRjY2QTEKKzoxMEE2ODAwMEZBMjhFQ0I3OTgwOEFFNzgxRUM2NDM3RjdCNUZGNzA3QzEKKzoxMEE2OTAwMDI0NkZGOUVFQzMyOEE3MUI1MDc3MDAxRUQ1RDdGRDExRjQKKzoxMEE2QTAwMDVFRkYwMDY1MENBRUJGRERDNzdEMjQxMjhFRUZFMzNFN0EKKzoxMEE2QjAwMDE2MDk2RkVFRjAyRjZEQjE5MUZCQzc1MjBFREYzRTNDRDUKKzoxMEE2QzAwMDU1RjgxRENFRjcyOTMyQUYyOUJFQjgzQUZGOUY4NTlDQjkKKzoxMEE2RDAwMEJFMjFFQ0Q1MDFFMTNGNUUxM0ZFRTMxNUY0MUY5NDBGOUMKKzoxMEE2RTAwMDczRkZEMTJDRjY4RDc3MEJGRkIxNTNFNEJERTFCQ0NCRUEKKzoxMEE2RjAwMDIzRTI4QjRBOTEwRkYzM0NBQzYwNjQyOUNGN0IxREIyRkYKKzoxMEE3MDAwMENFOUY2MUVFMkMxRjlBNUNBMEM2ODk5M0YyNTVCRjMyOTIKKzoxMEE3MTAwMEExNTc5MjIyQTc2NTNERDIwRDc5NzJCNjIxNEY1NkZEMDEKKzoxMEE3MjAwMDRBODk3OUIwMjE0RjFFNkVDODkzRDVCQ0I3Qjg3NTgyREYKKzoxMEE3MzAwMDIxNEY5RUFBOENGRjIwREYyOUY2OTE2RTMwRTRDQkIzMjcKKzoxMEE3NDAwMDk0NzE2MTNFQUFGQjM2NjE3RUNERUU5NDhGNUI4QTY3ODEKKzoxMEE3NTAwMERGRkZCRjhCOEY5REVGRDdGQ0ZGQzdDNzdGNTAxRjYzMDUKKzoxMEE3NjAwMDREQ0FGRThEQjE3RDUzRjhGRkQ3ODVERkQ4MkZFMjgwMkIKKzoxMEE3NzAwMDU3NDU5RDYzOUY4OEU3RjYyMDFGN0I2MzVDRTcxMjcxNTYKKzoxMEE3ODAwMDFEM0ZDNzIxRUIyMDJGOEIzQTU0OTMzOEM3QjE0NUVDQkUKKzoxMEE3OTAwMEJCNkQxMjc1QThBNUM1REZGMTczMUM2Nzk5RTBFMzVCN0IKKzoxMEE3QTAwMDlERjJCMURDQTVDNjc5MTNGMzU0M0U4RTc3MjYxOUUyRUIKKzoxMEE3QjAwMDNFMzVDRTFCRTM1MEUzQkM1MkJCQ0FDNzUxNkNCMDIxM0YKKzoxMEE3QzAwMEVFNTNGOTM4QjJBREM0MTBGNzREMzBGODI5RjUxQzA3MzcKKzoxMEE3RDAwMEM0MDVBQkZBMTVFMjdCMDlFQTc5OEVDMjkwN0E5RUMzNzIKKzoxMEE3RTAwMEU4REZFNUZCOEEzMjZFRTg4ODEzN0NFQTNFRjMyNkY0NjQKKzoxMEE3RjAwMEExQjg1Rjk0NjZFNURGREIzMDdCMkZDN0I4NDNEMkVCQUYKKzoxMEE4MDAwMEI3RkRCODNGREZGMjk3OUI4ODlFODVFOENGM0JGMURGMkQKKzoxMEE4MTAwMDFCRkFGMUI4Njg0MzNGNUU5N0MwRjcyM0EzMDc2MTc5M0QKKzoxMEE4MjAwMEQzQ0ZFMzlGODQ0OTBFN0VBRThBODVGMEZCNTNFNzg5NDAKKzoxMEE4MzAwMDlCMzZGNDRCMDlDNzRCNjY0NzJEQzMzODQyQjc5OUZDOEEKKzoxMEE4NDAwMEY4RkQ1REE2REJFOURDREREQjVEQzQ1MUM3RkE2NUNBNTYKKzoxMEE4NTAwMEVGOUY2QTM4RUY1RkM0QkM1QUYxNkIxNDU3OURFQUU3NkIKKzoxMEE4NjAwMDZFQTRGOTRCNUQ2RDU4MTdERkZDQTFENTU1OEZGMjFDMTYKKzoxMEE4NzAwMEM1QkY4MzYyOENCNzVFRUY5N0NCRkY3RThGQTAxRjlFMTQKKzoxMEE4ODAwMEZGRkYzOUZBNEJGQzUwMkNGOURGMTZENTdGNjIyMDAxMEYKKzoxMEE4OTAwMEYzNkM4OEU2RjA5QkZEM0U5RThFREYxNzk0RkVGQUZEN0EKKzoxMEE4QTAwMEU3NEY5MTNGQ0Q4REJEN0MzNkU2Q0JEQTFBN0YyMkRGQjQKKzoxMEE4QjAwMEFGMEM5MjdFMTlFM0I2MkVFMzVGNDM5Qzc2MjRDRkZENjYKKzoxMEE4QzAwMDA2QUVFQjFCRTE5NzczRjE5MzUyODNCQUJFN0Y0M0I0OUMKKzoxMEE4RDAwMEU3MzZGRTNEMThCNzhFQ0Y5NTc0OTJGREZCMDRERjVGMUYKKzoxMEE4RTAwMDE3RjM3NUQwNDVDQTE1N0U5RjI2MzFFMjNENTgwM0ZFMDkKKzoxMEE4RjAwMDkyNUUyQjBFRUUwREUxMTFDNjRCNUQ4RjVDNDcyN0YyODkKKzoxMEE5MDAwMEUzQjk0MERDRkQ0RDY3RjJDMzI2QjlDNDdCQkE5REM3RUQKKzoxMEE5MTAwMDdEMTYxMTQ3NDZGMjdGMzhBRDJCMjBEN0NGQzYwQ0MyMkIKKzoxMEE5MjAwMEY3NUZFNDdCRUJEQzFFQ0E3NzY2MTIxRDBEOEU0Q0QwMDAKKzoxMEE5MzAwMEEzOUIwRUU5NzRDRTgxODk3RDcwNzMwNzNGOEIzNUY0M0MKKzoxMEE5NDAwMDMzRTZCMTFBNEI4QUE4QkIxQUY3MTM4REY1MDNFM0I5QTYKKzoxMEE5NTAwMEIyRTJENkNCMTVGOEFBRDNFQUI5MzJGN0Q5QkVFN0Y1RjkKKzoxMEE5NjAwMDJCQTM2MzQ3MThGQzUyQTlDMTZGNEQzNEY4QjU2OTA2OTMKKzoxMEE5NzAwMEJGQTdENkM1Q0RDQzJDQkYzMzI0RjZFQjM1Mjc3RTdGQzEKKzoxMEE5ODAwMEM3Q0MyOTE0RDkyRkJFMDNDNEU5QkRBQzBCRkQ5NUU3OTQKKzoxMEE5OTAwMDY3NEZGNTczMTJERDNCRjQ2MzJENzM3MkZFRjk5NUY3ODMKKzoxMEE5QTAwMDRDRjQ1ODJGRjFGOUExMjFEMjhGQjkyOEVGQjUwNjg3QzEKKzoxMEE5QjAwMEQxRjczQ0FEMkVGNUVGMzMwNDdDRjY4RjQ2RTdFMDdCMTQKKzoxMEE5QzAwMDM2OENEQUE3N0M4RThGNDZEM0ZCMzhBOUQ0M0VFMTczNTAKKzoxMEE5RDAwMEQyRjUzNUJFM0M2QTFGRjNCOUU4RkFBM0JFMjI2QTFGNUUKKzoxMEE5RTAwMEY2QjlBOTZERjA5NTUxRkI4MENGNDNFMzU2RjkyQTA5REEKKzoxMEE5RjAwMDVFRTlGMzUyOUIwNUUxMERGRUJEODEyQzNGNzMwMUM2NUMKKzoxMEFBMDAwMDJDN0IyNTNDMkY4MkNFOTk3RUMwMjM4MjhFNTdENDM5NTEKKzoxMEFBMTAwMDE0Qjg2NzZEQUEzMjNFN0RCRTUzRTk0RkYzRTYyOUZEQjcKKzoxMEFBMjAwMDk3NTVCQTE0MzhDNTUzQTQ4QzRGMkE3MzJCNzAzNzc3QjcKKzoxMEFBMzAwMDk5MzIzRUNFRTU1MUUwOThCQzRBNjU3Qzk0RDNBQkY0QTQKKzoxMEFBNDAwMEVGQjk2QTc4NDJDQjc5RjRCOUMxRTczRThBNzQ1OEU1MjgKKzoxMEFBNTAwMEYzMUNFNTc0MkEzQkNBRTk1MzQ5RUQyREZEQkIxMTdGNzgKKzoxMEFBNjAwMDFERTY0NjM3RkE2RDQ3QkU4M0UxRjk3NkFCOURCRkY3MjkKKzoxMEFBNzAwMEREQ0RFQ0QwQkE0NUNDREZDRDBERjMyOUY4QzI3QzRBNTAKKzoxMEFBODAwMDNFMTdFMEU3ODlGMzNDNDc1NUJDMkI5NUZCNDAwN0M5Q0YKKzoxMEFBOTAwMDRGQ0EzODY2OENERTIzMEVGM0IxRkIyRDhFM0YwRjA2QjYKKzoxMEFBQTAwMDNDRUUxQkEzMzM3QzZGRTVFMEU4Njk1NDE3QzEyRDRDRTUKKzoxMEFBQjAwMEQ2ODkxREZENENDNEE3MzFGREVEOTQyRjRFNzk1NEEzQ0EKKzoxMEFBQzAwMEZDMEU1NjUyOEU3NUM0Qjk4N0IyNUQ5MTdGMEY0QUI2OUYKKzoxMEFBRDAwMDZGRkY4QTdGNkYyODY2Q0YzNjI3RDZDNUE2MTRDRjRDNjYKKzoxMEFBRTAwMDhBOEFDOEZGQTYwNEJGMUY5RDQ2RjMwRDFDMTIwNTc4NzUKKzoxMEFBRjAwMDRDNTkzM0QzM0EzQjNGQkMzRTM5NkVFRUEzNkEzQzFBMDUKKzoxMEFCMDAwMDk2RkY4MDVEQzRFM0I0NEU2OTlGNTYzOUQ2RDFGNTU1QTIKKzoxMEFCMTAwMDc5RTdERkI3MzkyOUQ2RjU4NTg4RDczRTEzRjFEQUE3NkIKKzoxMEFCMjAwMDIyRUVGRTU4QzREREM3NDREQzdENDRDNEREMUY4OUI4NzUKKzoxMEFCMzAwMEZCQjA4OEJCREYxN0YxREEyMTExQUZCRDIzRTJFRTE1QzAKKzoxMEFCNDAwMDIyRUU1RTk1Qjc4RUZFQUVENTk5OEQxQUQzQ0Y3M0JFMjkKKzoxMEFCNTAwMDc0QzE3QTc1OURGM0Q3QUFGQjg2NzMxRjU1RTNFRTM5NEUKKzoxMEFCNjAwMDBGQThGMURBQUM2NTZBREM3RDczOUQxQUFGREQ1OEFCRDYKKzoxMEFCNzAwMEM2NkIzM0U2QUJGNkYxN0E2RkE5MDI1RjU3QTlENkU1NEIKKzoxMEFCODAwMEFFRjVBOEZCODY5MjRGRDNDQTU0M0I2OTRCNTVFM0I1NEIKKzoxMEFCOTAwMEFFRDZCQjM1Mzg1RUM3QkY0MzgyQ0NGQzM0QzIxRjQ2M0QKKzoxMEFCQTAwMDdDMEY1RTM5RUY1OEUwNzA5N0UyN0U0RDIxRjMyQ0M1QTMKKzoxMEFCQjAwMEZEOUM5MUE2RDBCQkI4REZDNERFRDdFOTNCOTA0RDc4QjEKKzoxMEFCQzAwMEM3MzBEMEQ3MzM0MzI2NEQ3MTQ2RjgxREJGNEFEN0FBQTgKKzoxMEFCRDAwMDIzNkE3REU0ODYzQkQ0MzhCOEEyNUFDRDY3QUM2NTZBNTcKKzoxMEFCRTAwMDFDRUNFRUExRUVDNzRFMzNGODFEMjZGQ0ExOTVGRkNFNUUKKzoxMEFCRjAwMDQ2N0JDRUVGODc0QzMxRDVGNEJFRDJBNUZBMjMyQjMzNUEKKzoxMEFDMDAwMDlFMUZFM0ZFODg5RTlCQTVGNDkzM0YzMjBGRTBFNzI0NEUKKzoxMEFDMTAwMDg2ODhGNzE0RUFBMzg2QkU4OUZCNzc3QjNFRTRFRjE3QUMKKzoxMEFDMjAwMDAwRDk0M0JERTBGRUFCMThBN0I3RDUzRThFQkUxRkI3MTcKKzoxMEFDMzAwMEQzQzJERjFCRDg5RDE2RUI1QTAyNUQ1NzlERTVFRjA3ODcKKzoxMEFDNDAwMEIwNzYzMzlEMUZGM0UyN0IyMzU5MzhBRjdBN0VBQzMwNjgKKzoxMEFDNTAwMDY0NTZDRTk3NTkwREZEOTdBMTRGM0MyRjNFRkMxQ0RENEQKKzoxMEFDNjAwMEZGMUMzRUUyMUNDNzAwMzY4MENFNDdCNDc0RkVCRTQxRDYKKzoxMEFDNzAwMDQ3MUM2NzkwNTM2OTdGMEE4MjNDM0UyQUU4MzIzRUFBMEQKKzoxMEFDODAwMEEyRUY4Qzk5REY2N0Y0OUVCRENERDQ3NkUyMTk3QzNGQUMKKzoxMEFDOTAwMEVBNzM1RTg3MURDNUQ0QkNFRDlBNDk2QURFMzZDNjcxN0IKKzoxMEFDQTAwMEZFQkM2REJDNTM5NUQ3ODk3OUFBMUQyODc3QTk3NkUwOUIKKzoxMEFDQjAwMDlDQjhBNjg1OUY0M0VDMkFBRUYxMENDODkyRUZFOTEwMzAKKzoxMEFDQzAwMDdEQTI3MkY2QzVGMDdENEMyRTNGMjNDNDNBMUZCMjdBQTYKKzoxMEFDRDAwMEU4RkQ5NTY1M0QxOUYxNjk4NDgzOUY1N0FDQzc3RDFCREQKKzoxMEFDRTAwMDNDRkZGNzFFN0ZFRkM1Q0MzQzQ5MDNCMDNEM0U1NjlDNzAKKzoxMEFDRjAwMDVGOUNFNEEyRjk1QTM5QkY4QUUwREY0RjU5RTc5RTRGQzMKKzoxMEFEMDAwMEI0ODVDQ0NBNzczN0NDMkM4MkJGRDAzRjA3RTVBQjMwQjcKKzoxMEFEMTAwMDJDNDdGRjdCRjAxMkU3MjhBNTlDQzUyNjVFNjBGRkNFN0UKKzoxMEFEMjAwMEFGQzQ4MUIyMUQxNTcyRUJCODhFNTcxQzdDMUZGNTk1MTAKKzoxMEFEMzAwMDUwNkQwOEJGMTNGOTVEMkFBRjUzRENEQjYzQUE5OTdGMUUKKzoxMEFENDAwMEI3QzUxRDNCMDZGODMyNTZBQ0JGNDhFQzkzNkRGMUIxNjgKKzoxMEFENTAwMDEwQzY3MzlCN0M3NjZBRTVGRUU3OEFENEM1NDlFODM3NUUKKzoxMEFENjAwMEI3NjQ3OEQzRjE1Q0UwOTY5NDZFQ0IxOEQ4RTlDRDk2QjEKKzoxMEFENzAwMDZFM0QzQTdCOEZBMEQ5MzI5NEZDRUM5NkU2MzQzM0M2MTQKKzoxMEFEODAwMEExQTNDQzBFMzNERTM3QUFDNzJDMURFQkIxRTNGMDdEQjcKKzoxMEFEOTAwMDkzNjQ4NDE5RUREMzZERjIwNTQzQTNFOTVDQTg5N0NFQzMKKzoxMEFEQTAwMDExQzEzQTRBMzE4RTFERUQ5ODQ5N0ZFRkIxRjkzREZDNTIKKzoxMEFEQjAwMDlCNEExODFGNzdBQkMyRkJGNkE1RjBGM0Q3MzYwNzNGQzcKKzoxMEFEQzAwMERGM0EzNjc5MUVGMUFCQzBDNUJGREY1N0QwMjNENjE1QTkKKzoxMEFERDAwMEMwRTk1MkY5Nzc3Q0U2QzMzRkNFMTdFRTI3NDBFRjk1RTYKKzoxMEFERTAwMEVGRkIwQzY1MTEzMEYyQ0IwMEFGMzFGMkM3NzAyRTcxNjIKKzoxMEFERjAwMEM1NjE3MTdFQUVBNUYzN0Q5QkJGOEFCODYyOEJBODNCMEYKKzoxMEFFMDAwMDFDMTE3MUM1NDcyMkFFMzgyOEUyOEExNTg2M0FEMEJCOUMKKzoxMEFFMTAwMDIyQUVEODI3RUE0MEFGOEE3QURFN0U1MUNGN0I1REM0NkUKKzoxMEFFMjAwMDE1RjJGQ0I1OTQ4QkQ0OTVDQzY5NEI2MEVDQUQ5OTlDMzQKKzoxMEFFMzAwMENFNjkyQkI1NDAxOUFDQTM3NDBFODc1M0VCRjhGRUU4MkUKKzoxMEFFNDAwMDE1REUwNjRGNDkwMUY2NUI1Q0UzNjAxREE5OTUwRDYzQjUKKzoxMEFFNTAwMDcwMUQ2OTU1NkRGNDlFNTJBNUQ3RUE3NDZCRjg3RUQyQzkKKzoxMEFFNjAwMDEzRjQ1RTk0N0MyRkVDMTY0RTFBNzZEMzlDQjE2NDdGNUIKKzoxMEFFNzAwMDZGRjE4QTczQzc3QTZCMjFDOUQ3QTMxNkZBNEU5MkZDNzkKKzoxMEFFODAwMDdFNUNFNTFDRjU3QjRBQjMwQ0Y0QkRDOTAwNUIzNTZFRjYKKzoxMEFFOTAwMDQ3NUU5Mzc0MUZDQzA2NDdEMjNENEQ4QzhEQkE0NTlDQkUKKzoxMEFFQTAwMEU3QzU5N0FFM0FEMTk3MzU4MkVFOTIyRUNENTc0RDg4QjEKKzoxMEFFQjAwMEUzRUJFMEZCQTEzNjMxQ0ZBMUUyMUJFMjcwOUVGNzdBMTMKKzoxMEFFQzAwMEYwRjlBNjBBN0QzMENFQjc0QUNFMjdERUE3ODkxNkZDNTgKKzoxMEFFRDAwMDdGQThFRkY5Q0Y5REJFRUQ2M0NBMzlEM0I3MDU3RjNBOUUKKzoxMEFFRTAwMEU2MkRCOURGODJERkQzQUUwQ0RFRDcxM0Y1MjVGQzVFOEQKKzoxMEFFRjAwMDhEM0I4RUJGQkYzMkU5Q0Y5OUMwQTc1NUUyM0QwNDY5QjMKKzoxMEFGMDAwMDU3QUYxM0ZBNkI3Q0RFN0JCRUYzQkZCRkYzNUVDOTBDOTkKKzoxMEFGMTAwMDBCN0UwRkZEREFFMDJGRjhERjAzMzZEN0E2NDY5RUY3NEIKKzoxMEFGMjAwMDdEMEZGMTAzNUI3OUVGQjUzRkEzQkYyMzE5Q0FFMEYyQjAKKzoxMEFGMzAwMDYwQkJDNkU2QzRFRjBDNUVEMUMzQkQxQ0U5OThEQUMzQTIKKzoxMEFGNDAwMDM1NDZENDQ3Qzk5RkQ5MDQzRUE2OThCNTVBMEE4RTFGRTQKKzoxMEFGNTAwMEFFOTFERUQ2NUYzNTgxQ0VGRjVENzcwRDNGMjdGMUZGRTUKKzoxMEFGNjAwMDAwMTA3ODU5NDEwMDgwMDAwMDAwMDAwMDFGOEIwODAwOEQKKzoxMEFGNzAwMDAwMDAwMDAwMDAwQkVEN0QwQjU4NTREN0I5RThEQTMzMjAKKzoxMEFGODAwMDdCMUVDMEEwODM4QTE5MTJCMDAzQTgxOTUzMUYyMzBGNzgKKzoxMEFGOTAwMDA1MUM3MEEzOTgxMjQzNjQxMDU0OEM4ODAzQTJEMEQ2NjkKKzoxMEFGQTAwMDE4OTJBNkI3RjRENDczMTgwNDExMDk1MUQzQTYzRERBNDgKKzoxMEFGQjAwMEY4MThDREEzQkRCOURFOTY5OERDQTY0RDczQ0UyMUM2OTgKKzoxMEFGQzAwMEE0Njk2RjEyQjE0NzFCRUQ2RDBEQkU5MkY0NkJCRjFFRUQKKzoxMEFGRDAwMDZERDIzNkE3RUQ3N0JDRkZGRkFGQjU2NkY2REUwQzY4MjUKKzoxMEFGRTAwMDUyRDMyNjNEODUyRkQ5QUVCRERFRkY2M0ZEQ0ZCNUI5NjcKKzoxMEFGRjAwMDcyMDU3RUU2MzNFNjYwNkE3OEM4QzdGMEM3NzI0NTgxOUQKKzoxMEIwMDAwMEZGNDc5ODU3OUQ4M0VGRjE4REExOUU1REM5QzRGRkI3OUYKKzoxMEIwMTAwMEIyNjAzMkJDMEY3RUVBMTc2QzI2NjMzNUFDRDUzRjAwQjgKKzoxMEIwMjAwMEVGN0JGM0I0NTRGNzc0QThBRUIzNUQxODcyMzJFNjgzQzUKKzoxMEIwMzAwMERGMkI1OUQwNDdDQzIzOUYzNTRDQTU3QTM5REU5MjBBQjUKKzoxMEIwNDAwMDY4MkZDNzY3MzQ5RkExN0U2QjBGRjMzQUM2NDJFMTRGNkEKKzoxMEIwNTAwMEIwQkE4OUQwNUZENDZENTUyMzRFOUNBRjM3RjgzOUE3NkQKKzoxMEIwNjAwMEU2NjIyQzJCREREMkUwODBGNTU0NjY2QzVFQ0QyNjQwODYKKzoxMEIwNzAwMDgzMkE4NzdCMEFGNjBGMkNGQTc5NkUxRTNDN0RFQkJEODYKKzoxMEIwODAwMEI4M0Q2Q0Q3MENFRDRFNERFQkNFRjA0RThGQUQ2QkVCNkIKKzoxMEIwOTAwMDM2NTYxMjgyNzlCNjY2RkMwRkNGRkE2NDZDRjdCQkY2QUYKKzoxMEIwQTAwMDEwQjZCM0IxREE3RTE4QkY3N0MxMkZEMzMzNURCMUY2RDYKKzoxMEIwQjAwMDg3NjY5NTRFRjNFN0MzODBFNUE5OENBNTMxMzZENTFFOEEKKzoxMEIwQzAwMENBRjI0RjFGQkU1RkM2QzI4QzQxOTM4RTkyNDRDNjYwQzcKKzoxMEIwRDAwMDFERTcxQjk0ODgwM0Q2NTVEQjA3RjAxQjgzRjU5NzVBQjEKKzoxMEIwRTAwMEYwN0Q0MzlGQzNEQjhCMEI2NDlBRUIwRUQ4RTc3QUJFRUYKKzoxMEIwRjAwMDRERDYzMEE1MkI3RjAwOUVFQkZCOUEyQkE4RkQyRURCQjcKKzoxMEIxMDAwMDM5ODQ5NzEzN0UxMUJFMTlBREVBQjkyOEJDQjAzREQzN0UKKzoxMEIxMTAwMDk1NzExRTUzRDk4RTczQzA3QTE3Rjg5MzI3QkNGOTQ5REQKKzoxMEIxMjAwMEY4NzcyRUNCQkQ2MkU1Rjg0N0Y4RDY4QUI2MDkwREQ1N0IKKzoxMEIxMzAwMDYzMTlFMkQzMDNDMDJDMUNCRUFGOTVFRjU5RDlDMDc4NzgKKzoxMEIxNDAwMDQ2MDRDM0YyNjNFRjRGMzc2NTI3ODZCMDFGRDI4RDUzOTUKKzoxMEIxNTAwMEQwRDUyQ0Y4QkY5Nzc5RUQ3MzEwRkY5Q0FFNkEwNDVERDMKKzoxMEIxNjAwMDc5MTk3QjlFRTgyQTZDMEI0N0Q3MDlGQjYyRjdEOTYyRjUKKzoxMEIxNzAwMDc0OTc2NTE4OEZFMTdBOTdFQkNCRDQ1RjNCMzkxOUQ2N0EKKzoxMEIxODAwMEJGOUFEMTVDNkM3NUEwODVDM0VCM0U0RThGNEU3ODI5N0IKKzoxMEIxOTAwMEM2ODlEMTFCOEMxMzM0RDExRkUxNkJBMjU4Mjc4Q0IzMDUKKzoxMEIxQTAwMEFDQUNFQ0ZGRkMxMDYwRjZFOENFQUMzQjEwNEZDQkZFMzUKKzoxMEIxQjAwMEQxQ0FBQzMwNUYzNTM0QzM3Mjc1QUQxMjg5NDA3OTc5MkMKKzoxMEIxQzAwMEUwNTZFMjg3RTVGQUYxRTE3RDREOERFRDgyMUUzRjZGOUQKKzoxMEIxRDAwMDZDQ0FBNjcxRDY5NEYzNzFEODI2RERGQ0I0QkU5RDA0NkEKKzoxMEIxRTAwMENGMjA2MzVCREMzQTdBN0IzMzkzNEQ2NjAwQzdFNzc3MDkKKzoxMEIxRjAwMDM3RUZDM0ZFMTcxRjc0MzBBNDIzODY3REU3MjBERTM5QTYKKzoxMEIyMDAwMDVDNEYwMkVEMjJGREJGQjU0RDg5MUM4NDc1NUZEOEVEMDIKKzoxMEIyMTAwMEEwNzVCRUI5NEU4OTMwQzQzRjczM0YzRTAwRUZCQkZEMDEKKzoxMEIyMjAwMDI5NDQ5NzE3MTM0MkZCQkUwOEY1OEQ1QjkzRkM2MUQ4NDgKKzoxMEIyMzAwMDZGQ0ZCOEQ2OEQ0MTk4Rjc2MjRBQTgxRUM3NjlEQ0ZBNkQKKzoxMEIyNDAwMDQ5NEIxOERBRjcyNDg2OUQ1OTM4NkVBM0Q1N0YxMEE2OEUKKzoxMEIyNTAwMDU4QTkwMjRDQzdDMTEzRkU3RDEzM0MxQjdBNzRGODgzQjYKKzoxMEIyNjAwMEZGOEVGOTE1MUE3Rjg5ODU4NUZBNURDM0U5QzczMTlCODEKKzoxMEIyNzAwMEQ3MjNDMDFEQkFGNTJGQzlCMkQwN0E0RjNERTRBMEY1NEYKKzoxMEIyODAwMDI2Q0NGNjEyM0MxQTBBMTJCNDg0MzE4ODQ3QTZBOTM5OTIKKzoxMEIyOTAwMEIwOUU3NDZEMTJBRUYzODIwMkZDMDlGNDc2N0U5OTEyQjAKKzoxMEIyQTAwMDQ2RjgzMDk1RTNDNTdFRDM4RDA3OTA5RjFFMTVGQkJDRjUKKzoxMEIyQjAwMEYwQzBEQzQ5NDhDRkU3NTM3OEZEMzk0RjYyMDRGNzc1OTkKKzoxMEIyQzAwMENFQ0JDQjYxOEYyQkYyMThGMjg2MUFGMjJENEZFNkZCMTQKKzoxMEIyRDAwMDUwODAwRTFBQzVCQTFBQkQxNjJEMDFGMERCRjhEMDhBQkYKKzoxMEIyRTAwMENGMjI5RTFCM0Q3REY3RTBGMzY0NzIzODU5ODFGRTZGREIKKzoxMEIyRjAwMEVEQjYzMjg0MzdDMkMzOTk4M0Y1NDVDRDU4NkY4NkNCRkUKKzoxMEIzMDAwMDI1N0YxNkVEMDdFMTM3MUVFMEY2RTZBRUNFRTQxMEVDNDEKKzoxMEIzMTAwMDgzQjk1OUM4M0UzMTA2ODc4NjlEQ0Y3QzQxOTk0OUZDNDcKKzoxMEIzMjAwMDFDRTZGQ0NFRjk0NDYxQkFGMzE4RTg3N0E1RDcxRTJFQzcKKzoxMEIzMzAwMDg3NzFEOEQxQzk0NEI3MkJERDlDNkVFRDg1NUI1MkIzQzQKKzoxMEIzNDAwMDc4MzM1Nzk0M0VCQzU0RUVDM0YzQkQ1MTk0MUI5MDZFQkEKKzoxMEIzNTAwMDAxQUUyQjkxNUY2NjIyM0NDNkNEMTk4MEY3QjU0RDQ2RjQKKzoxMEIzNjAwMEJBREQzMjYxRjMwM0Q1QjBDRjc1MDUzNjY2ODVGQTc1NUYKKzoxMEIzNzAwMDFFRDVDMDM3NTU2RDQ2M0U4MjdEMUJDQTYzNjYzM0RBRTMKKzoxMEIzODAwMDc3Q0YzODQxOUZERDlDM0U4MUQyMjcwNTY3QzRFODYyQjQKKzoxMEIzOTAwMDk3REY0MkVENzA3NUI2NTFFMDZGODZFQkM3MEQwRUU3OTMKKzoxMEIzQTAwMDkwNUU0MURFOUNDRkYwRUUyQjI0QjkwMEY0QzNEN0M1RUMKKzoxMEIzQjAwMEFDM0E3RTY4RTg3MTEwREQzMzIwMEY4NDEzRDBBN0JENEUKKzoxMEIzQzAwMDZBNDY4QzVFMjQ3QzFBNzY3NTEwM0QzNjA4QkE2QkVDQTIKKzoxMEIzRDAwMDAzRkExOUEzQTMyMzEzQkM3MENGQUE5QzI3M0I0NjY3OEIKKzoxMEIzRTAwMDU0MUY4N0NFQkVFNzY3QzQ0NzkyRkYxQTU4QjA5RTU5RDQKKzoxMEIzRjAwMDg3RjNCNTdDMTI5RThCMTA5RjlGQTkwREE3RTMyODYxNTAKKzoxMEI0MDAwMEVBQkZBM0E0NjgyQ0QxQkJDMDA3MTczREY0RTM0NEJDM0EKKzoxMEI0MTAwMDI1NEJGQzg0RDkwOTNDQ0Y1REEyRDJEREE2OUMyRTAzMkUKKzoxMEI0MjAwMDc5NjMxNUU3QUM1RDFCOEMwQ0MwRkI5NDM2MkJCRDQ3RDQKKzoxMEI0MzAwMEY5QTI0MjdCOUM5NjIxQzI5RjlCRkJFREE5NTA0RTEwMjYKKzoxMEI0NDAwMDY1OTdDMEFCRDVFQTRBNDM3ODI1MzNBM0RFMzM4RTk5OUUKKzoxMEI0NTAwMEU0ODk5RkUzNTVDQUQ5OUQzNjk2ODZFNzcxODIzOERGMjUKKzoxMEI0NjAwMDlCMTc2NTJCRDg2RUE3QTI5MDdFNjAyRjMzRDI4MUQ1MTMKKzoxMEI0NzAwMDI0MDdCQ0IzMkRFMkJDMEJDQjczOEZFNEFERERDOUY3NjEKKzoxMEI0ODAwMDlCOTA2NjIxQkVGODZEM0EwODU0MjUwNjBGQkJEOEZGODUKKzoxMEI0OTAwMEI4MDE2RkZGMDBENEQ3N0I5Q0ZFMDg5NEM3MzMzN0M5MkYKKzoxMEI0QTAwMDg3NTI5ODY5NDAzNzZGNEQ0NTEyMUJEMEUxNzk5MTdCRTcKKzoxMEI0QjAwMEJDQTFGQzI5Q0Y0RDg2RjZCNzc5QjMwREY1QjdGQjNFOUQKKzoxMEI0QzAwMDY5QThCRkMzOUY2QjI4REI5OTRFQUVFMzNBODczOERDOEYKKzoxMEI0RDAwMEVEMDJDRUJBN0EyOTk3MDcxMThGRDU2MjFGM0JFQzIxNzYKKzoxMEI0RTAwMDRGMTBDRUUxNkFDRjdBOTJDRjFEMjU5RkYxMENDMTNFNUQKKzoxMEI0RjAwMDFDMUVDRTdGNzZENDI3NjFEQzg0Mjk0RDZFRDIyMzg0MzYKKzoxMEI1MDAwMDdDMkU4MDVGQzQ0MzI3MEU5MjE2QTMzM0JCMDlDRTY2MDAKKzoxMEI1MTAwMEZFMzNFQjkzMERCMzg1REU3MzBCQkI4NUY0MUVEN0I4RkEKKzoxMEI1MjAwMEI4RkE4RDU5N0YwMzE5NjE0MTdBNEQxNEY4NUE2NDc1NDAKKzoxMEI1MzAwMDkxRENEODVBMDNGQTlDODJGQUU1NTJBRTJGRjlFRTI2MzYKKzoxMEI1NDAwMEJDMDY0NTNCMTZCNjkwREVCQTVDRUM1RkVBNUZBRkI1NzEKKzoxMEI1NTAwMDMzMzY3MDMzQzA2MzAxRDdCMzk2MTc1Q0FBNDFGQTM0MEYKKzoxMEI1NjAwMENGREYyQkRBQzk3MjYyQzEwMTREOEIyMzRGREIwNTdEMjIKKzoxMEI1NzAwMDI1MDU3OEZENzIyNzUzNTEwRUM5RkFCMDkwQjdDQjg1RDcKKzoxMEI1ODAwMERDNUUwMjdDOEM3NDVCODk0RjlEREVEQTI3QzZFOThCMUEKKzoxMEI1OTAwMEQyMkIxQkNDRDFGM0U5MjE0NTQ1MzgyNDg4RTIwMTE2OTIKKzoxMEI1QTAwMEVBOUI5RDhBNzAwRTUzMjNBQjJCQzg4OEJGRkYwNEQwNDMKKzoxMEI1QjAwMDlENDM3QTBDRkQ5NENFNkVEQUZCNzlBMDVGNDc0REIyQzUKKzoxMEI1QzAwMDFGNkQwQjg3RDZGMEQ4NTcwMTdFODkzNTQ5N0U4QjM3QTIKKzoxMEI1RDAwMDQ2RUY2NDc3NDA3OTgyOEZEMzdCNkRCQUQzNEZENTYxQzQKKzoxMEI1RTAwMEVEQzRFNDM5MzFCREFDNDZFODc3QTlBQzk1Rjg2MDk4NzQKKzoxMEI1RjAwMDFERTNFNDc0MzlCMjFEQzNDRjFGMzk5RjQzOUNGRkNDQjgKKzoxMEI2MDAwMEJBQzk0Rjc0MTdFNEU3QkUwNTdFOTFFRTk2RDUxQUU5RTQKKzoxMEI2MTAwMDZBNDU2ODc0M0FGQjk2QTRCM0I5NkMyRUQxNTk2ODAzOTUKKzoxMEI2MjAwMEQxODU0M0I0RDkzMTA5RTg4NUMzODlFODIzNTFDMjU3OEMKKzoxMEI2MzAwMEU4REIzNjk1MERBODgwQTc2Mzg4N0Y1OEE0Q0JDNjkyMTcKKzoxMEI2NDAwMDcxOUY4M0RBMEJDNDE3ODMzRTY2RDNEMzQxMzA2MEQ1MzQKKzoxMEI2NTAwMDIyM0EzQzBFMTZCMjQ0MzdDODk3NDExQkNCNzgxMERBMTkKKzoxMEI2NjAwMDhERDE1NjJDNzZDM0ZFMDY0QjFEQzkwRDc0QTg0NjBDMTEKKzoxMEI2NzAwMDdBRkIzMTE4RjdBQzhCOERBOEVGOUJGOTYxMkFGQzAzOUMKKzoxMEI2ODAwMEU1QzBENjhDMzczREI4OUVBRDM2NDZFNzNEMEI1RkFBODgKKzoxMEI2OTAwMEQ1QTBCQzVEOTZEOTJGNkE0QjYxRENFRDA5QjJGQ0VFRkEKKzoxMEI2QTAwMDJFQUM3RjNDOTE5NzJGM0ZGOUE3NUQyNDFGODA1RTExNDAKKzoxMEI2QjAwMDFGNDkwMjFGNDk1MjdGOUZBRTgzMkJFMEMxMzkyMTg3NkEKKzoxMEI2QzAwMENFMTlBNzA5REU2NkJENUVDQTA5RjMzOTZDOUVGNzREMzcKKzoxMEI2RDAwMDEzOUU0NkRBRjdCMEY1MDI2OURFMzIzQTVGRkNDNzZDQkEKKzoxMEI2RTAwMDkyOTdBRDA2QkUxODNFQ0UwMEU5RUZBQkM0QkUyRDQ5MjEKKzoxMEI2RjAwMENGNjU4NEUyRDg5MTUxRjg2RkIwRkQ0QTZGMkYwMDlDNUUKKzoxMEI3MDAwMEJGQUJBMERFQUI0MUVGMzk4QzhCMEUxODQ3Mjk3OEU5MkYKKzoxMEI3MTAwMDNGNTFGRTJCQkJDMkUzMTA4RTU2Njg4MDcyREVDNjQyREMKKzoxMEI3MjAwMEI0MUVDOUFGMDk0ODA3NTY4NEZCMDBENTgzRkMxRDUyREYKKzoxMEI3MzAwMEIyNzE5MDNBMzdDMjQ1ODFGNjU3MTAyOUQ3N0E0RTk2QTIKKzoxMEI3NDAwMDczQjlCNjUyOUM3Rjk1MzgyNThDNTdEOUMzNEFEMTNFRTAKKzoxMEI3NTAwMDRGNThCN0Y2RTAzNjk0NzM5QTAzMzUwQTc4N0ZBOTE0RTgKKzoxMEI3NjAwMEQ3MDdGNTlBODM5RTk3MzRDNDFCRDBCMzQxRUUzQzVGNTQKKzoxMEI3NzAwMEYyODdCNzFGODE3RUREODM1NkJGMDNDNkVEMEUzQ0NCM0IKKzoxMEI3ODAwMDUwRUY3RTY3M0FGM0UzQTZCQkIwMjFBQ0FGM0VFNDVFNzgKKzoxMEI3OTAwMDY0RjcyMkRGMEM5Q0VBOUFDMkQ4RDk3NjM2NTg2NjFCMjkKKzoxMEI3QTAwMEJFREVDMTIzMDk3NjJGNkMzNjE0NEU5OUY5MzQ4Q0QzNDIKKzoxMEI3QjAwMDUzRTA3MEEzM0VGN0M2MjZBQjFERjEzNEI4QjkyMThDMTcKKzoxMEI3QzAwMEMwMzg5RDE2RUU1N0UwN0Q4RjFBNjI2OERGREIzNzc1NTMKKzoxMEI3RDAwMDJFNDJCRTNCNkQwQkZCQzdDMUIzNjc3M0Y4MkVCNDQzNUIKKzoxMEI3RTAwMDM0NkY0NTc5MjZBQ0ZGNjA4RjVBMUU4OTczM0U2RkM4NEYKKzoxMEI3RjAwMDUxODhERjVFN0JGRUQzQjRGRjYzNjk3NjdGMDI4QzNCQUEKKzoxMEI4MDAwMDg0RkUwREMwREYzMURCQ0UwQzNGOEVEQkYxOTUwQzFDQ0UKKzoxMEI4MTAwMEZGRDhCQUFERkUyM0IwQUU2MzFEMEVCNEE0RDhCMUREMUYKKzoxMEI4MjAwMENFNUExQ0Y3NTg3MUIzNjdCRDZFN0NFNzRERjY1NjdDNTcKKzoxMEI4MzAwMDNGNzhBM0REOUU0REZCQjk5Q0VDQzFGRDZDQ0ExRDhGMEEKKzoxMEI4NDAwMEI0RDk5RDY2OUZCNDE2RUJENzM3MzNEQ0FGRERCM0QzRTUKKzoxMEI4NTAwMDg2RkI3M0FBNkMxNzlFMkY5RkYwNUM3QTc1MkVEQTRCQ0QKKzoxMEI4NjAwMDVFQ0I5QzRGNDFGQkNGRkI0M0I3RTYwMDFFNTdCNjlEMTYKKzoxMEI4NzAwMDVEODQ3MkM5NUU5NkIyMDU5RkRENjI5REYyQkM5MkY4NEUKKzoxMEI4ODAwMDFENEE2Qjc0RTIzOUQ2RERCNDk2RkI2MTNDOTYwNkMyNjQKKzoxMEI4OTAwMDYzOUEyNTg4RTc1MTc3NjA5RDczRUE3NEZFQkU3OUNDODAKKzoxMEI4QTAwMDcwQjg3NEEzREY2NTE2QUU3M0JENjdGRDBDNkNGN0JCOTMKKzoxMEI4QjAwMEY2MTBCNDFCMkE3NkQ0QzY4MzYzNjMwRTk3NjNDRUNFOEMKKzoxMEI4QzAwMEU2QUMzNjU4NzdGNzZFQTcxQkUxRDNBRDg0NzYzNTAwMkEKKzoxMEI4RDAwMDVDQzM5OTJFRkY2M0RFRTFGREJFMjVGQTQ5RkEwMDNDMDgKKzoxMEI4RTAwMDExMUY2RTM4N0NDM0VFQjA4QUZBMkFDNzIzQzBDNTY5MUYKKzoxMEI4RjAwMEQzQzlDRDQzQjM0QTlCMTExRTUxNzg5QkU3NERFQjI2MkMKKzoxMEI5MDAwMDc5RDFBRDcwQkVGRUQ2RTE1OUJCQzM1MDlFRTkwRkREQzMKKzoxMEI5MTAwMDhERkQ4RUY1MDBBRkNEQTI3RDRFNDI3RDdGMjRGRTE5QjgKKzoxMEI5MjAwMDEyRjVERDFEQjBFRjM4RkMzRkQ0NjQ2NTM3OEZFNUNGRUQKKzoxMEI5MzAwMDFCRTAzOTc1QjM3NTkyMTIwNzNFNDNDNTZCQjNEMDRGMDgKKzoxMEI5NDAwMDc1MENFQTJEMzBDRUQwNkUyNzdGQzJGQjJDQTRBRjExMzAKKzoxMEI5NTAwMEU4NzM1NjBFOTdGN0JFOTlDMTJEMzk2ODdGNERGNzkzNUUKKzoxMEI5NjAwMDlGRUZFNUQ5QzFBRDM5QTQwN0I0N0FCMEZDMzFBMERGQUYKKzoxMEI5NzAwMDdEMUYxMUZBNjVFQzQ2QTREN0U5QkJDMzYwOTIzMkY3OEMKKzoxMEI5ODAwMDM4ODNERTNBRDJGOTE5NjQ0MzJBOUVDNzFEMjU3RjY4QTEKKzoxMEI5OTAwMDQxN0JBMDc3ODZEREVCRDBGOTA1QTUxRUJEQzRDN0U1QzgKKzoxMEI5QTAwMDVCNzBDQTg1M0MzOEI5NTlGNUY0RjU2NERGODBCRTRDNEMKKzoxMEI5QjAwMEZFNDEzN0ZDQzZGMzBGMDZEMTFGQTg5Mzg3NEI0QzY1OTkKKzoxMEI5QzAwMEE5OUZCRTk0MDM3MjExQ0Y3REExMjdBNzdCNzcwNjE3OEQKKzoxMEI5RDAwMEEwRkRGMThBRDUxRjAxQjg2NTYwMDcyODU3NTUyODExQzkKKzoxMEI5RTAwMEQ0RDczQjRBOUUyMDNEOUUwOTNENkU4OTU4RTc0RkRCRTgKKzoxMEI5RjAwMDlEQUM2QzBBOEJEQTczMkJDNUZCQTQ5NkIzOEZBMjdEMkEKKzoxMEJBMDAwMDlEODRGRTRGRjREN0I2MzhCQ0U0N0Y0MUU0QzNGQ0Q1MzcKKzoxMEJBMTAwMDYyN0ZEMkFFMjMzRDEyRjZCM0IyNDVGODQxRDk4MzVDQzIKKzoxMEJBMjAwMERFNTgwM0Y5NDgwRkIwMEY4MzVEMTI2NDI2M0JBNEM5QUEKKzoxMEJBMzAwMDY2QjBFNzU2OTlGNDA3QjNERDUwNkREMjFCNzZBMEVFRTEKKzoxMEJBNDAwMDg0N0FBMURBRUY0NDdBN0E3NzdBQ0VCMTJDMkY1NTg3QUYKKzoxMEJBNTAwMDA3QTQ3RTBGRUQ0MjA1MjdCNjBDRTlDRTlGMTM0MkZFRTgKKzoxMEJBNjAwMEZDQjg1RDNCOERGMjY4NEJGMDExRTcxMEZBQURENTg4NUMKKzoxMEJBNzAwMDEzRTU0OTZGRjlFNzkyOTFFRTdBRUJBQ0U1NDg2RjgzRjUKKzoxMEJBODAwMEVERTVENEVFQjVGNjIwM0RBRjA4Qjk1MUUxRDc3RTRGRDQKKzoxMEJBOTAwMDdDMjlGNEIzRUFGMkQyRDM1RDNBQkM1NjY5Qjc5REVFODUKKzoxMEJBQTAwMEQyQURCRkIyQTBDQTUwOTZGNDU1Njk2NUFERkQ3MUNFNTYKKzoxMEJBQjAwMDk3NTlCOUQyRUZBMjMxODMzRTZBM0RFNDBGQzUzOTJGQzEKKzoxMEJBQzAwMEU0MzM5MUE5RUZFQUUxOTg5QzJCRTg0NkU4NTNGNzRGNUQKKzoxMEJBRDAwMDVGMzA3NjM0N0Q0NkVFNTNDMjQ3RUU1RkQ2OEZCNERFREMKKzoxMEJBRTAwMERGRTU1QzlGRjU2NkJGQ0ZGNTlBRDcxOUM1RDMwOEVEQTIKKzoxMEJBRjAwMDJCRjExMDgzNzNFMDc3ODczQjU2QTI1Q0E4RjA4NzcyMjYKKzoxMEJCMDAwMDczMDEwRkQ1NjVDQTk2RjE0MDI3M0YxNkZFQ0ExRjA3N0QKKzoxMEJCMTAwMDkyMjM2MTU4Q0Y4QjNFRUVGRjRDNkNFMTc2NjU2MjU5MDMKKzoxMEJCMjAwMEQ1MjIzQzlGREUyRkJFRUYyQzUwODgzRjZCMDI0QTQ0NEIKKzoxMEJCMzAwMDgzN0ZERTJBRUNENTlGRkExOEM1MUY4MDVGNUY0RDg2OTQKKzoxMEJCNDAwMEYyRUJDNTM2RUU0NzY2NUFDNTFENzM2Mjc2NkE2MjFEMTIKKzoxMEJCNTAwMDhGNEZFQ0IwMzNGRjAwRjY5QkU2RjI2Rjg2RjdDQjI1RjQKKzoxMEJCNjAwMEZGRDUxQUUzMTAzNTM1MzZDMzM5NTM2OThBM0IyNDlBMTkKKzoxMEJCNzAwMENFOTlBNTEyRUU3MzAwRUVEOTMxQjg4RjY0N0Y4QzQ0NTQKKzoxMEJCODAwMDI3NENCRDk0ODc3RTMxMzM3QzM2OUFFMDYzQjY3NzJBQTIKKzoxMEJCOTAwMDlGMzNGMUM3MzVEQTNEMDc3QkYyNUU5QzgwN0E0Njk5ODgKKzoxMEJCQTAwMEUyOUY4MkY4QzMyQUU4OTdBODNENDlFMTkwNUVDOTQ3MjEKKzoxMEJCQjAwMEMyREU5M0YxQUExRDRCQUJDOURFN0IwREY1ODFCMTE0M0EKKzoxMEJCQzAwMDZGOUE4NEZFNkEzOUJFQjRGMzY2RkFCNUZCNzI1MzQ3QzYKKzoxMEJCRDAwMDVFQzcwOUQxNkY2QjU1N0MzREUxMDRFQTA5QjNGOEYzMDgKKzoxMEJCRTAwMDA2Nzg0RTVEQkEzMDIzOUU5RTcwQTI1MEU4MDk1MDhGQjEKKzoxMEJCRjAwMEZBQzE4OURERTVGQzU5NjhENDEzNTg3OUVFNTVFMEQyRDUKKzoxMEJDMDAwMDQxRkI0RDk4OTIzNzM2MUVERjFEOUIxNTdBMzA1NzA3NDIKKzoxMEJDMTAwMEY3MjQ1RjJCMkJEM0MxN0RGRDZDRURDQkI4REYyQUUxODAKKzoxMEJDMjAwMDg3OTBGMzgxN0MzRkFBRDdDM0NDRjMzRDk1RTMxNkY2MEEKKzoxMEJDMzAwMEM2Nzg5MjE3RjI3OTM1RkNBOUVFNTY4Njc0NzZCRjREMTgKKzoxMEJDNDAwMEFCNDU3RENGRUM0RjNBOUNDQkY1QzQ5RTJDQUQwNUVCQkMKKzoxMEJDNTAwMDk5MkJFNzJBRTM3NjQ4N0ZCNTZGRjY0NDFFN0UyMEJGMTYKKzoxMEJDNjAwMDhGQzkxRTk0RjZEMzAxQUNDQzhGRDk4NUFBOUJEQjg1RjYKKzoxMEJDNzAwMDg5RTk5NzhFQkFBMUFBMzkzN0Y0MENDMkEzRjg1MjI0RTUKKzoxMEJDODAwMDZDMDFCRTczNTQyOEE0M0YzOUQyMTlFOTNERDc2Qzg3QTMKKzoxMEJDOTAwMDVENjNCQjFFNjQ2QUEwRTdBRDhEREMxRjVGM0E1QkE1RTgKKzoxMEJDQTAwMDcyNjJDODdBOTBDRTA1OTMxRjI3NTFCQjRDNzZEODEyOEEKKzoxMEJDQjAwMEQwMDM4NERGODZGNEE5NTM0MjlGMEFCMjU2QjJGNzVDRTAKKzoxMEJDQzAwMEI2ODgxM0ZEMTU2NkJGNEQ2REJBNjU2MDJBQzhGNURBRjIKKzoxMEJDRDAwMDgyNEIzNURFOTlENERGRTBGN0E5RjU2NjFENEQxNUY1RTkKKzoxMEJDRTAwMDZFNzgyRTA5NzIzRkQwNzJGNDAzRTFGODM1OTE5RTJDRTQKKzoxMEJDRjAwMDhDQzNGOTU1QkZDNkI4OUQ4N0ZBQzU4QUI1NUY5OEYxNjAKKzoxMEJEMDAwMDM1RUZGNUYzMDM0OUZGOTJENDE3QTUzRTAzRjJBNTY3N0IKKzoxMEJEMTAwMDNDRTI2NUExRTIyNURCREZFNDI3MzJGQjg1QTQ1RkM2QjgKKzoxMEJEMjAwMEVDM0YzMkZCOEJERUNCQ0QyNDdDNDhGRDRCRkE3RjdFOTMKKzoxMEJEMzAwMDlGNkJENEMzRkUwQkQ4MDNEQkY1MTZDMjkxMEFGQ0RENjIKKzoxMEJENDAwMDZCNjMxOTNCQTc3M0ZGMEVFQTRCQzc0QTdGRTA0NkZEQzIKKzoxMEJENTAwMEUyQkY0Q0ZEQUVGNTdDRUI4NjczRTgzQzlFQUIyRjI0MzYKKzoxMEJENjAwMEQ4NTBERjBFN0E0MkU0NEY1Q0EyMThGOTI0MkQ0RkY4MjgKKzoxMEJENzAwMDFCRjM1QzdDMUUxMTQ3RUU2RTZGOTNGREMzMjg2RjgyMzAKKzoxMEJEODAwMEU5RjY0ODgyMTIxQjg3MTVFNDVGMTMzRjhEOURBREE1MzAKKzoxMEJEOTAwMEU2RTU5MzNENzI0MzFFRDJCMzFGRUM5MTE5Njg4RjA4RkMKKzoxMEJEQTAwMEJFMkY0OEE1RkQzMDJEOTU5REQ3Qzc4REM1QkFBM0VCRjUKKzoxMEJEQjAwMDcwODJERDMyRTNGRENGM0YyMThGMTlFNkI5MUFEQzc2QzAKKzoxMEJEQzAwMDk0MTQzOUVERTg4RjAwMUM1QjM5NURCOUEzRkVGQjJDQTAKKzoxMEJERDAwMEY0RUI2Q0YwRUFGNThBN0E4QzVCRTRBMkRFQzlFMzFBMzQKKzoxMEJERTAwMEYyQkRDRTdGQUUyMkZEMjZBNjg3QjQ2MDlDNzNGNUNFNTEKKzoxMEJERjAwMEJDNjg5QzhDRTJBNzUxRkZCQjhGNTFCQzQ4OEVBMzMyMUMKKzoxMEJFMDAwMDRGMDdGMTAxRjJBQTVDOEYzNThFOUY1RUFDQjc0OUYwMDcKKzoxMEJFMTAwMDAxMDBEQ0U5MDA5MjU5QkJEM0NBNzg1RTAyRTcxMzE5MkUKKzoxMEJFMjAwMDhGNTAwQjgzRTU5OUIwREZCNURCMTQ4QTFCQjM3MEVEM0YKKzoxMEJFMzAwMDUxRDRFRkQ3ODk3QUJCRjBCRjk5RTM0OEVCNDQxQzg2MTUKKzoxMEJFNDAwMDU5Mzc5MDlFRDZGNDkwMzFCRUQ2RDg2NzJDOUJGNTcyQTgKKzoxMEJFNTAwMEU5RUY1NzYxOTFCOEVFN0Y0MDNDNzEzODQ0QUNBM0MzMjEKKzoxMEJFNjAwMEUxMDBFREYzNkYxNDBFOTIwRTJCNzIzRkVCQzFCQzk2MDYKKzoxMEJFNzAwMEVFODREMEFFMDY4QzZCRUY3NTkyM0Y4NDZDNDhFNDk3RUQKKzoxMEJFODAwMDAxRjg4NUZENkNEQjUzRjAwOEVFNjc1QjlFOTVFMEQ3MEIKKzoxMEJFOTAwMEFERjAzQzk3QTM2OTVGNzMwRUU5RTg2RDlCRTBGMzVCM0YKKzoxMEJFQTAwMEYyQkNEQ0VGODJFNzEyODg0NDk2M0U4MUY4NDhFNkI1QTIKKzoxMEJFQjAwMDFDNEJFMzdBQTUzREMwRjVDNjQzOTM4RjJDRTU3MTU3MjMKKzoxMEJFQzAwMDlFREZFMjBCQzRGMjVCNEEwMTNFMzMwNDdDN0M1MzlBNTIKKzoxMEJFRDAwMEZDMDNGMDlDMTE2ODI2Nzg0QzdGREE2OEFGREVFRTMzMDUKKzoxMEJFRTAwMEVBOTUzRUIzQkQ2QTJBRUZDRDhCOUZENzEyOEJCMzA5N0IKKzoxMEJFRjAwMEJGQkI1OEJGOTlBRkJFRDlDRUUzMkQ0RjgwREQ4QUNGRUYKKzoxMEJGMDAwMDQzRUQ2RTdBN0VBQkRENDNDRkZFNzYyRkU5Njk4N0RCQUEKKzoxMEJGMTAwMDdERjQ5NDcwQkZERjE2QUNDN0I4OTZGNDQzNEFGRkY4QkYKKzoxMEJGMjAwMEY3RjNCOEZEQzYwMjdDMUQ5NTYyMkY4QkFDRTlDOTA4RkEKKzoxMEJGMzAwMEU3RTMwMUFFMTc4RTc0QkU1NDk3MUJGREEwQ0I4MkM2RkIKKzoxMEJGNDAwMEY4REU4QTVBNjM3Q0VGRUU5OURBNzM3ODVFMjZDREY0RDgKKzoxMEJGNTAwMEQ4NDJCQTc4RDQzQUIxRkYxRDVGRTNGMTI2MzlGRUYxMzkKKzoxMEJGNjAwMDdGRTQ3ODk3RTU4QjYyRkZBRjBBQkE0ODNBOTI2NkYzQUUKKzoxMEJGNzAwMDAyQjJBQTFFQUFCQTE1RkRGNkNDOUQ3MzRERkFFMDQ5OEQKKzoxMEJGODAwMEMxOTc0OTlCREQzNkY0MEI1NTBEQUNCNEUzMzhFQjc2MjUKKzoxMEJGOTAwMEMxMzhBRTZCMUY2NzZCQzZDNDBDNjM3Q0UxRUUzQkIxNkUKKzoxMEJGQTAwMEZGRjE2ODdDNjFFMzlEQTU1MDdGNUNDNDE3REU3RUJBMUIKKzoxMEJGQjAwMEY1RUI2MTE3RDJBQkY2NzM5NDFGRDYzQ0VEMENDMkUzRTAKKzoxMEJGQzAwMDZENzE5RTQzNzkwOERGQ0IzMkZDQkM5QzMyNzE1NDNGQ0IKKzoxMEJGRDAwMEZFREI3OUY5QzNGREY4RDY4NTRBNkJCQ0JDOTZDQjc5RkMKKzoxMEJGRTAwMDUxM0ZEQUFGNDk2RTM5QTM3RUI0NEJCQ0NDRTU5MTlBOTAKKzoxMEJGRjAwMENGRTdFRkZDMjk2QkMxNzEzQTlGNjUyRDg3RTNFOEYzMkEKKzoxMEMwMDAwMDdGQ0M1M0U0NzhFRkU1OTFGRDJGRTU2MEYwMEZGMUM2QUEKKzoxMEMwMTAwMEIzM0FBQTI2MjFCQzJGREE3ODVFOEM3OTNDMzVERjJFMjQKKzoxMEMwMjAwMEM3QjNFNDYzRkZGNEU4RkFENDdDREQ3ODNCMDAwNjgzMTEKKzoxMEMwMzAwMDg4MjdENTlENEM3MTRENzYxN0M1M0YyNTFEMjVENUJCNEQKKzoxMEMwNDAwMEVGQzBCQzA1MzAyQzE5OUUyRjQ5REY3MURGOTE4NzdFMzAKKzoxMEMwNTAwMDlDOUY2NEZCMUY2MzIzRTNGNTE3ODJCRURFMTJGQzc1MTEKKzoxMEMwNjAwMDExRjkwQkY4RThCQ0UwQUZCM0M4NUZGMDNDMjNGOEVCODQKKzoxMEMwNzAwMDY3RUQ3RTJBRkZCNEJEODBDQUE3REEzNTJBRkZBNEJEQ0EKKzoxMEMwODAwMDlDOUUyN0RBODNGNEZFQzdFREI1NTRFRTZFMEZEMUYzMTQKKzoxMEMwOTAwMDc4RDkyM0I3RTJCOUYzREI2RjJBMjQ4RjQ3NUFDRjY3RTkKKzoxMEMwQTAwMDFFQjUxQUY4QTc2NTRGOTI4MURGRDYzRjM0REU1MDZFNzkKKzoxMEMwQjAwMEVBMzNDNkNGMUJCQkIyMERFNTM1NkRDNkY4RjlFQTU2QkIKKzoxMEMwQzAwMDYzRkM3QzU1Q0IzQ0MzN0MyQjQzMEI0REZDN0NCQjg5NzgKKzoxMEMwRDAwMERGQUIwRDY1MkQ5RkVCODlENUU1QUIwQ0ZEMUM5RTQ2QjYKKzoxMEMwRTAwMDQzQkJBNEE1MkMxNDBGRkZFNUY5OUMzRThGOTQxNDhEM0YKKzoxMEMwRjAwMDFEMUFDNUNGNjE2RkJCRkRFN0E4OUY0NENCNkE4OEExMUQKKzoxMEMxMDAwMDNFNkY2RjVCNDJFRkVGNEZFMEU3OURCOTVGN0QzRTNGRDMKKzoxMEMxMTAwMEVGQkFDQjlBODIwQjE4RUE0NThCQUQ3QUJERTdEM0IzNjEKKzoxMEMxMjAwMDQyNEJGMzc1RjZBMEREQzNFREIxNzcyNkQ3NTgzRDQwRkQKKzoxMEMxMzAwMDQ3NEJDQjJFQkY3ODAzRDA1MTY4OTA5MUREQTM4MUJBRDUKKzoxMEMxNDAwMEU3MDEzREI4QTBGNUMxODUzNzQwQjkyNjdDOEZDMTdFOTcKKzoxMEMxNTAwMDJDNkE3OUYyMDU2MDVGMTYyODNCREUzOTAxRkFGQjY3MkQKKzoxMEMxNjAwMDg3RUE3MUZDMTJDRkE1MTdCMEZGODI4QUQ5MkE5MkY1MEYKKzoxMEMxNzAwMEZEMjk4Q0Y0RDE4QjE5RjZDOEMxMzhGNDcwNkZCRTYyRkEKKzoxMEMxODAwMDg4NUZCRERGNzNEQTFDQTdDRkYyQjE1MkY0MjM2N0Y5RTEKKzoxMEMxOTAwMDJFOTVBMjVDODNCMjg2RjFBRjQzQjM0MkY3MjI5RkMxRDIKKzoxMEMxQTAwMDdCMERFNUU0RkQzM0Q2NjdFMTc5MzI1MkRDRTg2QjAyQzIKKzoxMEMxQjAwMDVGRDI5RjIwRDdCNUEzODRBRkU3Qjg4ODJGMEM5OUUyNTAKKzoxMEMxQzAwMDBCM0E3RkMyM0ZFNThGRTI0RkI4MjhGQTBEN0QzNUJFQUUKKzoxMEMxRDAwMDNGRTFBMjg4M0I1Qzk0NzE4N0FGNTVDNzhEM0I1QzVDQTcKKzoxMEMxRTAwMDI0RkMwOTUwOEY3RTg0OEJCQjZCRjk3M0QxRTg3MTA3RjcKKzoxMEMxRjAwMEI5M0YzODhGMUVBMkYzMjcxQTc3MTA3QUJFRjA5QjFGMjMKKzoxMEMyMDAwMDlCQTVGRDMzRDZBRjlGQURFREMyRTc2RjY2NjhCQjExNEUKKzoxMEMyMTAwMENGQzc3NUYxNEZGNzQ0NURGQ0IzRUMwNzg2RjhFNzUzRTEKKzoxMEMyMjAwMDM5QTEwM0Y5M0M2RUNERDBBRUVBMENCM0ExODQ2QzhDN0QKKzoxMEMyMzAwMEM3MDYzN0M2QTNFM0ZGOUQyRkY1RUI4MTNGMkIzRUFCMkYKKzoxMEMyNDAwMDhCQTM1QUFFN0M5MjVENzMxQ0UwOUFEQjE1RjBCQzE0OTQKKzoxMEMyNTAwMEIzN0U5Mzg0MTAxOTE3RDNGQjlFQzgwQjFENDE3ODc1Q0MKKzoxMEMyNjAwMEE1N0NDN0NCRjNBRjJDQjFGMzAzODVERjA4RkE5MDc5MzcKKzoxMEMyNzAwMDNFMzkxRUNBMkI5NDVCMjc4MDYzRjA5Q0Q5OUU3MkE5MUQKKzoxMEMyODAwMDBFRUQ5NDQxMDEzN0YzRjNERkYzREQwMjlFRUUwOTg4RjIKKzoxMEMyOTAwMERGMjdGMjgyM0YyNjdDM0ZEREVGQTVCQzM2RjFGRTVBNTgKKzoxMEMyQTAwMEQ3RjFCODNERjg3M0Q0NjNCQjFCQURERTgzNUM2RjI3NTkKKzoxMEMyQjAwMEJGQzVDRDgxOTQ0OEFGMkUxRUZDNkIzQzJGRjNEMUZGNDAKKzoxMEMyQzAwMDM4MzREOTBFRjhFRTBDQkRFMEMyN0NGMDM3RjZBODk4RjEKKzoxMEMyRDAwMDExQzNCRTkxMUNCNjIxRkU2QjdERkM3QzVCRTAwOTdEMjkKKzoxMEMyRTAwMDYyNjgxNDNFMDc3QTE4NkZGMUQwM0EyQzk2MDIzRTJCMDIKKzoxMEMyRjAwMDdGODYxNTdDOUFEQjBGRUU3OTM3RDUwQkUzN0Q2MzJGQjQKKzoxMEMzMDAwMDhGN0ZEREJDQjdDOUQ5QTgxQjNGNkIwRTNGNzdCQTkxQjEKKzoxMEMzMTAwMDY2RjIzMDNFQTk0NDMwNTFCRDM2NzBGOUQ1QjkxODVGODgKKzoxMEMzMjAwMEYxNUFDOENGRjFDNkE2REY5RTVDODE3RTQ3Q0Q0QTdFMUEKKzoxMEMzMzAwMEM3MzczNkJENDNFNTUzNUU0QjJFQTJFRjBEQ0Y2RjRFOTAKKzoxMEMzNDAwMDYyRkI5QkZGNzFERDQ0NkVCNzcwNzhBQ0Q5OTRGQjc4Q0IKKzoxMEMzNTAwMDZGMjZDNUM1OTQzOTAwODc1M0RBM0JDOUQ5RDM2M0YxMzkKKzoxMEMzNjAwMEIzMzUwQTBCQzZEMzYzRDJFNjcwQkMyREQ2NUFFRkM0RTAKKzoxMEMzNzAwMDc1MkQwRTM5MThFNjM5OUY2QUQ4RkE3MzJDN0ZBMzU0QUQKKzoxMEMzODAwMEYxNUFEMUFFRjdGMTc5NkFGN0E4OTQ0RjBCRjBEOTgwNDIKKzoxMEMzOTAwMEU1NTdGQzQ5MENFNzVEMTA3QTUyQzVGNkJGOUJBMUIwOEEKKzoxMEMzQTAwMDFCOTRFQjA4NTdFRDlENTRFNEMzMzc5MEZFRTJBQ0ZGQkQKKzoxMEMzQjAwMEQ3RjJEQzE0N0MzNDU1MDVCRUNGNDFGODFGNzVFOUZEN0EKKzoxMEMzQzAwMDk0OTI5RUJFOTRBNzY1Q0YyMUJGNUZBODI1NDg3QUVFQzAKKzoxMEMzRDAwMEQyQUJFOEE3OUI3OTlFRjYzNzJGQTkxODdCNDg3Q0I0OEYKKzoxMEMzRTAwMEY1NDZGNDJGMEQ1QkU3MDhFQkNCOUJDM0U1RTQ2RjA0NDgKKzoxMEMzRjAwMDVGRENCQzU3N0RGNTM2QTRFNzREMzZDQTQzQjgyNTJGMjAKKzoxMEM0MDAwMDM4MDdGMTE1QjVCN0FFRjNCOTIxRjNENzA2MEJGODdEQjAKKzoxMEM0MTAwMDA0NTBBNzY5MUU1OEFGNEY4NTc1MjQyODg5RkUzMEU3NjAKKzoxMEM0MjAwMDJCRjJDRjM5QzVGOTA3RURCNEIxRDA2RTBERUIxRjQwM0IKKzoxMEM0MzAwMDNGMUY1M0I1OUQ1NkY0MUYxNkRBQzgzRTVFQjFEQTk2MUIKKzoxMEM0NDAwMDhDNzg4OUM1Q0JGQzA2N0JDM0ZDM0M4RkYxMzFDQUQzMDkKKzoxMEM0NTAwMDcwRDI3MzEwRUM2QzhDOTdFMDBGNjhFMjUwQTkwQUJEQTMKKzoxMEM0NjAwMDdGQzZDMzFBRkNGMzcxOTE1NzdBNkZDMTZEMEY4NzAzQjIKKzoxMEM0NzAwMDYwNjc1ODc4Nzk1REMxNkQzNzZEODYyRDlEOUZENDdBNDAKKzoxMEM0ODAwMDcyMTlFQ0FCRjc0MUM1REZFMUM1RTc4MTVEOEQ3OEJGN0YKKzoxMEM0OTAwMEEyNERGMTk3NDNEM0ZBODE2OUY1MTg2MjZDRUU3MTkwNjEKKzoxMEM0QTAwMDhFN0Y2RURCMTc2RTQ1N0E3REM3QzNEQzQ4Q0YyQkQyRkIKKzoxMEM0QjAwMDM4M0RBRjNEQzEyMjE2Mjg3RkFBRUY0MThBN0IwNjRGNDcKKzoxMEM0QzAwMEE4OTRCNzI2RTNCMjY3RDI3ODVDRjZDQkVEMDNCNDZFREUKKzoxMEM0RDAwMEI0NkIxN0NERTEyNjM2RkU4Q0YzQzMzQUQwOEY1QUE2NDMKKzoxMEM0RTAwMDUyQkM3NDNDNzM3N0UzRjk5MkE4NjU5NjcyN0REQTZENUQKKzoxMEM0RjAwMEE3Mzg0RjA1NjM1RjQ3M0Y0RjFCQjc5QjBCNDU1RUE0QjMKKzoxMEM1MDAwMDhDNjNCMTBCRENCRTZEODE1Rjk0MjdFM0NCOERGNjcxM0MKKzoxMEM1MTAwMEJFQzlGRTk1RjJDRDFDNkYwMUZBMEZFM0ZCOEUzOTQ2QzIKKzoxMEM1MjAwMEZCNzgyNEJGQkQ3QzNFMEQ3QTA0RUVFRjNCMjI4RUZCRjAKKzoxMEM1MzAwMDVERDBENzMxOUVGOTJDRThFQkY4N0MwRUY0NzU3Q0ZGQ0EKKzoxMEM1NDAwMEFGQTBBRkUzNzMwMEY0NzU3QzFFMDE3RDFEOUY0NzQxRDIKKzoxMEM1NTAwMDVGQzdFNzRCQTBBRkUzRjM2NUQwRDdCMURGOEY0MDVGOTQKKzoxMEM1NjAwMEM3RTcyQkEwQUZFM0ZCQTc4QkY5RjlENzNEQzUxRUQ5RDEKKzoxMEM1NzAwMDBDRUJFREI2QjE5RjIxNUQ4NTRCNDU1QzU4QzRDOUI2NDcKKzoxMEM1ODAwMEE1NENBNUYzRERGOTI3QTA3MkQwQTcwNjk1RDA2NzEwQkEKKzoxMEM1OTAwMDFGRTEwQzI3QjUxQjRDQkVGNEM3RkZDMEYyQjY0Q0IyNkUKKzoxMEM1QTAwMDQzOThFQUZERUUxMEY0RUJGQTYyQTZCRjE3OEEzRDc2RDcKKzoxMEM1QjAwMDQ2RjJGRUVDNzFFNjU2NDA5Rjc5NkI5OTMyMTNGREE4NjYKKzoxMEM1QzAwMEU3RUY1MEZBQjEzQzc4ODc0MkZBQzQ1NDY0QkQ5Q0Q4NzYKKzoxMEM1RDAwMDM5NUFGNEFFRjcyMDlFNjc5REM5NENEMEUzMjM3QkI1NTIKKzoxMEM1RTAwMDc0RTg4RjZCMjM3QTFENUI4Rjc2RTk3Qzg3MkNCQkVBMUUKKzoxMEM1RjAwMDM1QTBDRkM2MzY0NUQ4QTlFRTdENDhCRkRCMTREOTNGNUMKKzoxMEM2MDAwMDZEMkZCNkVGOTJGRDQ1Rjk4NDQ1RjZGRkNDMUVCNEI3MDkKKzoxMEM2MTAwMDRGNDZFNzZCNTg4NUUzOURDQzkyRjU0RDc1NTgzRTFCMTAKKzoxMEM2MjAwMENEQUIyQjVFOERFRDA3QTNFM0U3RUVDNUYyRjkwQzM5MzgKKzoxMEM2MzAwMEZFRkE1NTU0QjZDOUYyRTNENEZFN0MyQTZGN0Y0QjcxRTMKKzoxMEM2NDAwMEVBN0VCNDlCQUZGNzc4OUQyMTdFRkVDMTM5QTZFOUUzNkYKKzoxMEM2NTAwMDM5OUI4QUFDRTY3QzcwRjJCQkM5MzhCRjI1QzkzNUU1ODkKKzoxMEM2NjAwMDVBRkNBNUJBMzgzRkY5NEI2MTNFMUJGMkQ5RTc0QjUzNTAKKzoxMEM2NzAwMDI2QTFEQzNEOUJFMThGNkJBNzJDMkMxQUMxN0ZBQTI5MzgKKzoxMEM2ODAwMDNDREZERUNENDI5ODFGOUYyOERFMjdGNkYxM0M3QUJCQzcKKzoxMEM2OTAwMDRGMUQ5NjQ3N0YyREZFNDQ5OUY3MjBGRDg5QjU0REEzODgKKzoxMEM2QTAwMEZCMTM2QjRCOERGRUM0MzVBMjdFMjQ3RkUyMUE5MzNGQjEKKzoxMEM2QjAwMDcxRTUyNjUzMUMyMkY0RkVGQzg5NzU2Q0MwODY3NjE4NDEKKzoxMEM2QzAwMEQzMTRFMkEzM0E3N0ZGOEIxM0QxREVCRkUwMjU3RjIyOUMKKzoxMEM2RDAwMEYzQkU0Q0ZFNTY3OTdGMDJGRjZGOTk4M0Y3Q0Q3OEY5NTAKKzoxMEM2RTAwMEFEQkIxNDBGREExNUJENzcyOTEzRjE3OUU2MkVFNTQ2QjcKKzoxMEM2RjAwMEU0QUYwQjc3Mjk2RUU0QjdDQjczRjkzRDk4RkNCN0ZEMzcKKzoxMEM3MDAwMDJGN0JGMUJDRjU1OEZDMUMxQ0MxN0ZDMTUwNDVCMDI5RTIKKzoxMEM3MTAwMEM1REIwQkUzOUNCRDRCMTk4N0ZENTdERjk3Njk0NzdBNTMKKzoxMEM3MjAwMDAwQkQ1M0QwMjNEQjgzRkM2MjRENTIwQ0U1QkM0OTkyMjMKKzoxMEM3MzAwMDFFRjczRThDRkMzMTdGQkNFNDk3NjU3QjkwNUY0QkVEMzAKKzoxMEM3NDAwMEIyN0YzQjk1NTc4NjE0RDFGRURFM0REQTY0RTBBRjA1M0IKKzoxMEM3NTAwMEIyRkQ4NDNBQUM1Rjk2MkRDN0RCNEZFM0NGNEY5MkU1MzUKKzoxMEM3NjAwMEFGMTJGRkY1NDRDN0ZCNUYzNERGRUIyODIxQTlGQzAwQzMKKzoxMEM3NzAwMDhENTc1QTI1RTVEOTc0MkE3N0Q3QzlGMTVCRjc2MjVFRTAKKzoxMEM3ODAwMEVDMkE4QkVDN0YxQkYxRkY1QTI2Q0FBOEJGQzM3RUZGQTEKKzoxMEM3OTAwMDlGMzgxRkQ2Q0RGREUzMkFFNEE3M0JBM0Y1N0Y3QzE4ODUKKzoxMEM3QTAwMEY5QUQ0RTk0OUI5Rjc5NjIwRkQ2RkZDREVGRUYyRjNDRjIKKzoxMEM3QjAwMDlGQjlCQzlBMEQyRUJBMjEyRkM2MTdFNjczQTVBRTkwNkQKKzoxMEM3QzAwMEVCOUQwNTJENEZBMkY4NjI3NUFEMDdBQ0M4OEZCMUI4Q0YKKzoxMEM3RDAwMDVBNUE0RDEwRTlEQjY5QTVGQ0I5QTA4N0REMUEyRjlGRDUKKzoxMEM3RTAwMEZGMEY3M0Y5RjlGNDg1QjkyRTgzQkMxRTM5QkUxNjdGOEQKKzoxMEM3RjAwMDlDODY0MjNFNEVDRjAyMTZEN0NFM0QzNDZCQzFFNkI5ODEKKzoxMEM4MDAwMEY5MzFCRDAxNTU0NDNCM0M0QkUwNjk4MUU3N0IzMzQyNDQKKzoxMEM4MTAwMDNENTg4RkIyMEJGRDMwRDJBRkJENDRFNDEzNzc5NDdDMEEKKzoxMEM4MjAwMDNEQjgwMEVGMkYxNURBRkNDMjFEM0VBODhGRjdBQUUyMzMKKzoxMEM4MzAwMDlFRUJBQTA1M0NDRjJCRDRFQjIwN0JBREE2NDdFNDkxMjEKKzoxMEM4NDAwMDU4NUQxNDhGNTA2RkIyMUZBMEI4OTk4OEE3ODYzMEVGM0IKKzoxMEM4NTAwMDM4OEJGMkJBNDZCRERGQTE5QUUyQTg5RDYyQkZBNUIzQUMKKzoxMEM4NjAwMERGQTUzOEY1REE1Nzc4QkVCMDhDNjNENzhCNzVBRDQ1NDgKKzoxMEM4NzAwMEI5MENFQjZFNkM1MjIyMTZFOEQ3ODg4MjA3RTNCQTNFRjkKKzoxMEM4ODAwMDE2RjE2NkM2RTJDQTJCQ0JENDAxM0JERTBCMTNGNzMzOUQKKzoxMEM4OTAwMDk4RDA4N0EzRjFGMDFBNkYzRkU2QzdBODVBODI1RkMzMEEKKzoxMEM4QTAwMDc5RDg0MDkwRjJFMjMwNUU5NEM5QTJGMTY3Mjk0N0FBOTQKKzoxMEM4QjAwMDlBNkZCODBCRTNENDNBQjk0NTcxRUE0NDM2NEM2RTkwOUUKKzoxMEM4QzAwMDVDODhFNjM1ODkzODdBMzQzRjQ3QzgwMTE5OUY2RTEwNzUKKzoxMEM4RDAwMEZCNUExRTk1MDMxNTRCNTBDRjREQkM1RkM0QTk0NUZDQjgKKzoxMEM4RTAwMDU5QzZBOUFCNENGN0RBMUEwMzBCQzc5MDNGRDdBRkZBN0EKKzoxMEM4RjAwMDI5QUQyNkRENzg5RjI5RDE4NDg3QTk0NUZDNUVBNThDQ0EKKzoxMEM5MDAwMDUzQkYzMkQ3MTg2RkJFREZDNjQ4RUVGNjY0MTlFOUFFRTIKKzoxMEM5MTAwMEE0ODhEQjNEOUYyQzkyN0VDOEM0ODEwNEQ0QkY5OTkzMjgKKzoxMEM5MjAwMEVDOTA1RUY0RTc4Q0U1RjYwODVERTYzMkY5NzVENEI2NzYKKzoxMEM5MzAwMDU1RTQ3RkM0N0EwNUU4NTBGMUJERjQ5RjI4OTdCMTVDQjcKKzoxMEM5NDAwMDA0RUQ1NUJDREY4MkY4NzA1OUM4MUU5NUZFMUY1NDUzODQKKzoxMEM5NTAwMDE2RTU5MDFGRThEQzVDQ0MwMzY5QUJBNzcxRTQ3REY2QkIKKzoxMEM5NjAwMEM3MTNFM0YzQzdBRkU3NEEzREExREY4NkVENTY3OTVFMTMKKzoxMEM5NzAwMDNBODVGM0ZERDk3RTIwNjE4NzQ1RjUxODJGQ0Y3RjQ5OTEKKzoxMEM5ODAwMDlERUI5NTcxMDkxQkJGRUZDNzZDNEI2NzkwQkZFNEJENzIKKzoxMEM5OTAwMEI5RTQxRkVCRjdFMjNBRTRCOUI0RUM3QjRGRDEzOTc2NTYKKzoxMEM5QTAwMEVENzE3MERFQUZBMUYwREY1Njg1Mjc4QzFDQzc5ODFBOTkKKzoxMEM5QjAwMEUwNzhGMkNEMEMzQTMwNjRDRTI2QzhCODgzRTZDNDkwNTUKKzoxMEM5QzAwMDc4NTRDRUUyNDYwQTBDNzJCNkFFRTVCRjgxOUM4REU5ODIKKzoxMEM5RDAwMEZEREUzQTFDRUZFM0I2N0VBMEE3MDU4NEQ3NzJFRTdGOUEKKzoxMEM5RTAwMEZCQjhBREZGMDdGOURBNEFBNEMzMEY3QjlFRUZFNTA3NUEKKzoxMEM5RjAwMDlCNzE5RUFEOEE1NkVCQTI3QjMxQ0NBRjhDMUUyRkRDOTcKKzoxMENBMDAwMDg4RURDREYxQzJBQkY5MzFGRUVFQjcxOERENkZCMUFCRjkKKzoxMENBMTAwMEUwQTNFOUI3RjgzMkMwMEVDRjZCRTBBNzQzQzQ0RjAxRTMKKzoxMENBMjAwMENFNEY3RkVCRTcxRkVDRjc0N0I4REZBRDRBN0YyNEQxNEQKKzoxMENBMzAwMDdBRkRGRDA2NEZFNDg1NUVDN0YxQTdBNjNCMUI1MDlGMUMKKzoxMENBNDAwMDgxNzlCQ0M4N0Y1MTdGMDhBRUJCQzBFMDBGRDlEM0YyNUIKKzoxMENBNTAwMDIxRjg0MzYwOUY2RjExNUVDQjM4NUVGRjA2RjBBNjE0OEQKKzoxMENBNjAwMEUyN0UzNEFFNDdGQzBERDI2NTQ2MjFFMkIwOUZFRkVGODcKKzoxMENBNzAwMEFGMzBGRjBDOUFGRjEwQTc5NzI4N0M4NDlFQTQ4MzRGQTkKKzoxMENBODAwMDVEQ0I1RjA3M0VBNUI0QkVFRkYyRjU3RDBDRjBCOTgyMzkKKzoxMENBOTAwMEU4RDVDRkQ3N0IzNUZCN0JDMzVDQUVCNzQyQkY3QUVBMjQKKzoxMENBQTAwMDk3QzdFOTYwQTNEMEFCQzEyRTVGNzg4MzM3NjY5NzhGQjUKKzoxMENBQjAwMDlEQUQzNTE2RjJGODczNTNBMTIxQ0Y1NDVCODdFNTUxMzQKKzoxMENBQzAwMEVDRTY0RjE3QTY4RTZBMzdERjhERjUxRjE3QkI3OThGRkYKKzoxMENBRDAwMDgwNUIyQzZFMTNBMTdCNzEyMEMxMjlCRTVDMkZEQUY2MUUKKzoxMENBRTAwMEI2NTUyRjlFODY3OTM1MDA3RjJDM0I3MDNGNTZERDdFRjQKKzoxMENBRjAwMDMyNTQ2RTZGOUJFRUFCQzlFRjFEQzg3REE5RDZCQUIxOUIKKzoxMENCMDAwMDAzREUxODNDNUYxQkQzNkFDN0ZCNTBDRDVBNEEzN0RFQTEKKzoxMENCMTAwMEJCNUREODc1OTlGMjA2RUQ5QUMzOEI3NkUxMjczQ0RFQjIKKzoxMENCMjAwMDZFOENDQjU2NkI3Q0ZGRjYxNjM3RERFRjkzRjdEREU0QUEKKzoxMENCMzAwMDNEOTRFNjgxNjkyRkQ5RjFERTFDRDgyRjY5MzA3RTY1REUKKzoxMENCNDAwMDk5RUQ5QzdFREYwRUQzQkQxNEQ1NTQ2RUZCNTlFNkY2RUQKKzoxMENCNTAwMEEzQkFGNkRGMjg0QzM2RTQzNzgzN0U1MzRFREZFOUU4OEMKKzoxMENCNjAwMDUyREMyMkNGOTdGMjMyOUFDNTE4MUQyNTc3MkU0NkZGNDgKKzoxMENCNzAwMDI1RTg3MTVFODRDM0MyOUQwRjBFNjIzQ0NEREU2NUE1QzMKKzoxMENCODAwMEQ4RjlFRkRCQkREQjhGMDI0QjI1RUNCNTkyQkZFMUI3RTcKKzoxMENCOTAwMDZEMEFGRkRFNDcwNThGRTNBRjE1NzE3QzY2RjIzMzQ4RkYKKzoxMENCQTAwMDdGQjg4NDYzQzIwMzNDRkZDMzVFNzBCNjhDRUUzN0Q2OTkKKzoxMENCQjAwMEFEMUJDQ0U3QjQ0M0ZFMDY5NUFGOENDOUVGNkY1NDA5QUIKKzoxMENCQzAwMEJBQUEwRjVDRUVDMjdFQ0IzRDE2NDNGRTkwRDkxRkExRTAKKzoxMENCRDAwMDMyNzM5RTNDQ0ZFMzU0MzU5RUM3QTlGQTc4OUU3QzIyREYKKzoxMENCRTAwMEQzRTg3QjFEODk1QkFBMDk5RjU1MUFDRkUzMDQyNTQ5MjkKKzoxMENCRjAwMDdDNzc4QkUzQTUzMjcwMEZFNUY5OThGRDA4OEUwMkEzRDAKKzoxMENDMDAwMDFGQzI0Qzk3NjY3QzlDMzZFMUUzMzE5NURGNEZFQTNFQ0MKKzoxMENDMTAwMDYxRjU4N0UxNzVGNzQzNEQzREU4M0YwRjNGNjQyMTNGRTQKKzoxMENDMjAwMEM2MDU5OTFGMDI4QjQ0N0ZGRTBBMTY4NTJGRTlDQkREQ0UKKzoxMENDMzAwMEFEM0M1RjQwRTI2NUM1NEU5RTM3NDJBRDBDN0VGQjc0NTUKKzoxMENDNDAwMEE2RkY4RUM3MEFFMTU3Qjg5M0Y1RDM3RDg3RDU2Q0M4ODgKKzoxMENDNTAwMDg2N0NCMDA2NURFOTU2RjRDNzc4RTlCOTk2ODVCNzMwQTkKKzoxMENDNjAwMDgyNUZBODI3MTNFNjdCQUM3NUJDMUZGRERBMDMzN0RBQjkKKzoxMENDNzAwMDUyREVGNDcxM0IyMjlFRkUxQThCRDdBQUVDNEQ5RDlGOEIKKzoxMENDODAwMEZGRUY3RUFERjdFQkQ3QjI4NkU5N0VBOUM3MUU5OUEyNkEKKzoxMENDOTAwMDVDRERBRkY1MjM4QzRCRThGQzVBMTc3NjhBRUY2RDg4ODQKKzoxMENDQTAwMEZCMTY4M0I2RDY0OTNCNUREOENFNEJFN0U1OTgzRDJCQzYKKzoxMENDQjAwMDE2MjMxRDFDREJGQjAzQjdCOEZGQkE2OUUyRThERjg1NkEKKzoxMENDQzAwMEM4Mjk4QTkzNEY3QTdDMkVFMzc5MjA5OTQzNzQ4RkZBOEUKKzoxMENDRDAwMDhDQ0Q5ODk3MUJGNTEzMDVFQ0MyMkYxMzlBNTc5NDFBMTUKKzoxMENDRTAwMEQzOEY5OTNCOUFDNzU5NUM0NEZFMjM3RTVGNUJGQTk5QzgKKzoxMENDRjAwMDlBNzM0MzBCRjA3REYxMjU0MTBGMTU0QTQ0ODFGRDU2OEYKKzoxMENEMDAwMEJBOTQxNzE1NkY2QzdFNjZDRUEzRkY3QjNDOENDQjA5NjMKKzoxMENEMTAwMDg0MEZFNjMzMjVGMEJDREFDMTRDNTY3QjM4MEU3RTI2RjQKKzoxMENEMjAwMDE3NzMzOTNBMzgzQjNFRkU2NDNERTgyN0Y3MTZBNTcyODMKKzoxMENEMzAwMEZCNjkwQ0Y3MkJGQ0NBM0VCQTVGRTE4QkYxRTg0NkUyRDcKKzoxMENENDAwMEY3RDA3Q0VENEIxQ0VGQkM5Qzk0MTNFQUMwRjY5REExODAKKzoxMENENTAwMDIwRTVFQkJDRDU2N0Y1NzYyMEZDMDc1QTVGMkI4MEYyMDcKKzoxMENENjAwMDkyN0ZCMkJBMzExRUZFNjFDN0Y5NTJFNzY2NUU1MzlDRUMKKzoxMENENzAwMEVGQjI4MEVGOTk2ODVFRjdBNjdBRDQwNzdCQTU3RDI2OEYKKzoxMENEODAwMEY0Qzc1NUUzNzQ2NTM4OTI4QjRFRjBGNkRGN0I3NkVFOTAKKzoxMENEOTAwMEJFQjAzQUIyQkU3OUY3NzM3NTdCRjFGRUFERDQzN0ExNjAKKzoxMENEQTAwMEJDMUFDQkIyM0YwQjU3NEMyQTA1N0Q3NjZEOEI4QzI3NzYKKzoxMENEQjAwMDU2RUM0M0ZEMzYzQTVGNzhGOTNFQjQ4NzJFRDg4Q0UzQzMKKzoxMENEQzAwMDRCN0RGNUZGM0VCQjY4MUY4RTE3OTRGMzg3MTdFRDQzMkQKKzoxMENERDAwMEZERjdBQ0E5M0Q3RDlGMTJDNjdCRkREOTUyNkFERkM4MjUKKzoxMENERTAwMEU0RjhBNUI0REZBODVGMzFCQzcxMzVGNjNGNjk5N0U1N0IKKzoxMENERjAwMENGNTIzRUMxRjY0QzNFREVCMUU3MzZFRTQ1QkZEMTQ3REQKKzoxMENFMDAwMDZEM0QxRkY2RjhFRkI3RkQ0ODdBRkYxOTFCQ0YxRjBDRDkKKzoxMENFMTAwMDgzOUVGNjU4MjZBNjUxRjY1QjM5RjM2OTc2MkJEMDdGQjAKKzoxMENFMjAwMDkxQTZEMDc5RjQ1QkY0ODM0M0ZGQTBDQjIyRThFRTFGRjgKKzoxMENFMzAwMEY2QTI0RUJGQUE0NEVFRjMyMEU1ODE4QzQ0NzcxQjAyOTQKKzoxMENFNDAwMENGM0M2Q0Y0MTczRkIzQ0FCMDZFQjZCMTFFRkJDQjc1QzYKKzoxMENFNTAwMDlGQzBGNkIwRUU1NTFCM0ZFREMxNzVBRTkyRkU4RDcwRDIKKzoxMENFNjAwMEU3NUVEQzVGNzc4QUVDMzc2RERGNjhGMzg2MDJEQkY3MUQKKzoxMENFNzAwMEUyQkNBQkEyRjM3Qzg1RkFBRjRBOTRFMzdEREQ5OEJGQjgKKzoxMENFODAwMDEyREU0RkZFOEZEOEJBRDYxQkUwRjlGQzczRkIwOTlFNjkKKzoxMENFOTAwMDQxNzc2NDBCOUUwRjQxMEZBM0YzRjhDRTk2MEVDQUVGQjUKKzoxMENFQTAwMDhFRjIxMTdCMjA4M0Y4QzgxMzJERUYzNUYyRDE3REI0QkIKKzoxMENFQjAwMEVFRUJCRDJFMzg0RkQzRTdFMUY5RTdFMzc2RTJGNURGOUQKKzoxMENFQzAwMDM3OUM5M0I4RUYzRTJFODcyNDFERDVCOTY1M0Y4MDNGMzAKKzoxMENFRDAwMEM4OTNCNTVFMzlFRURERjUyREQzQUZDN0JDRENERTBERjIKKzoxMENFRTAwMEZFOEE5MTdFMkJGOTA5MzhDOUM0M0ZENzM2NUVBN0VCN0QKKzoxMENFRjAwMDVFQ0FBMzY4MDZCOTFFMkYxRjdCRTM1QzQ1RkEzMzZGMzkKKzoxMENGMDAwMDI1NzgxNjQ4RkI5OTQ5QkQ2M0YxM0M5RDVGOEU3OUEzNTYKKzoxMENGMTAwMDdBNDdDNTNDMzI0MDhDN0E0NzM3RTY1OUNEQTI3QzJFMDEKKzoxMENGMjAwMDkyOUIxQUQ0Nzg3NDc5NDAzNzE3RjNGODVBQTdDODkzQUMKKzoxMENGMzAwMENDREJDQ0Q2RUJFREVERkYzOTlGQUZFNzFCRjNCOURDRDMKKzoxMENGNDAwMDk0REZCNzNEQkY0MUExM0NCMUNFQkVFQzMxNzhERkVERkYKKzoxMENGNTAwMDVDQkE3NzNCQ0FCNUMxNEMwQjdEQTdFMDhDRjhCRUU2NDYKKzoxMENGNjAwMEUwMTcxRDE5RjdDMUZCNTMxOTRFM0ZDQUFCNTMyOTNCQkMKKzoxMENGNzAwMEU5M0I2QUU3RkM1NjQxOUZERjc5MDNGOTU5RTc1NzBDMTMKKzoxMENGODAwMEEzNUM5MTdFQzM5NkVGNzc5MTFGRjBCNDk3OTc3M0ZGRTAKKzoxMENGOTAwMEVEOTkzN0YwMUM2MzNFRjNGRENFMDBFOTMxRjY1QkUxMUQKKzoxMENGQTAwMDE4QzFCRUUyRkI5QzQ1QTJCRTZBREI1MzVGQURDNjMxMzEKKzoxMENGQjAwMDg0RkUyMkU1QTdGOUJFMjdGRUQ4RjRGQTU3OEY5NUVCMzkKKzoxMENGQzAwMDVGMUVERUNFQzM4NjNBQUU1ODcwNUM1RTc2OEVGMDVEMzQKKzoxMENGRDAwMEQ4NUE3OTdGRDlBNDRGNTU5OUVFMjczM0YxMUQ1NEE5MUEKKzoxMENGRTAwMDhGMTc0RDY4RjRBMzFENTdCNEMxQTgxRjlERUI3OUExRkQKKzoxMENGRjAwMEFGMDBFRDVBQkZENThEQzdFNEVEM0U2M0JERDRDMzE2NzcKKzoxMEQwMDAwMEY3M0M0MkY2MjhFODg1ODY3OTY0RkVFREVEQUNCRjhCRUYKKzoxMEQwMTAwMEVFODU3QjVGM0U2QTlEMThCMzVCM0FERDU1QTRBNzM0NkQKKzoxMEQwMjAwMEZCQTAwNEZCMzlGOUE1RDJFNDdDRDQwRkZBQUNGODQ1OTcKKzoxMEQwMzAwMDU4OUU3QkFGREIwN0I0QjM1OTI2RDAzOUVENTcxNDdEMkEKKzoxMEQwNDAwMDVFRDBFNkZEQzZCQzIwNUU4RUY5RTNEQkY2MUJGMkU4OUYKKzoxMEQwNTAwMEMyNzdBRkMxNzJENENGQzk1NkVFNDczRThBRkFDNUQ4NUYKKzoxMEQwNjAwMDUyQUEzRkFGMEEzRjE4NkJEODhGRTc1OUNDQUY3NzlBRDcKKzoxMEQwNzAwMEY4M0FFQTI3NjM0QkY2MjMzRDA1QTNFN0RGMEVDQUZCMjgKKzoxMEQwODAwMDVCRUUxNkVCNjEzRjIzRjlEMUE5NzE3OUYyRENGNzEzNUUKKzoxMEQwOTAwMENFRTBGNzgxREU2RjdCRTBDRjY3ODkzRjgzRkNCQzMzNTYKKzoxMEQwQTAwMEQ3MTc5RDg4NzQ4RTExN0ExREU2OEI5QkY5M0MzOUMwODkKKzoxMEQwQjAwMEYzRUZDQUI0RDk1REE5NUVFRUJGNzIwMDdFQjRENUQ2RDcKKzoxMEQwQzAwMEQ1RTgzNzg4RTVBQjE0RDI3N0QyRDY4RTkwNUY3MjVCMDUKKzoxMEQwRDAwMDgwRjNFRjJCRjM0NkNGNTM1OTJCRjI1NDQ2MUFBN0E5RUUKKzoxMEQwRTAwMDg0RTcwMzBDMkFFRTFBMkU5N0FEMENFNTcyRTk4M0Q5N0EKKzoxMEQwRjAwMDJFOEM0REM5NzZBNTI1RkMxQzc4NkY4Njc2MUFDRjFCMjEKKzoxMEQxMDAwMEIzM0ZFRDAyRkFEMzg4Q0ZCOERGNjNBOUEwMUQ3NTI3MUUKKzoxMEQxMTAwMEZGNUVCREZDOUVDOUY5MTQ5NzdGMzNCQzVGREEyN0ZDMjQKKzoxMEQxMjAwMDE1RTU3RjlFRkZFQzU3RjM4Q0RGMTUxRDI5RkYyMTIwQUQKKzoxMEQxMzAwMEQ2OUY1NzcyN0RGMjFGMUU0RkQ0MzQ4NEQ3MTBCNDQ1NEEKKzoxMEQxNDAwMEZGRTBCMDdDMDg5MUU3MjBGMzIwMTIwMzNDRUY0RUU2QUQKKzoxMEQxNTAwMDQzNzQ4NjVCMDk3RUQ3RkQ5RThCMzhGRjgxNEVDNzA2RTAKKzoxMEQxNjAwMDkwNEU2QkI5MUM5MTc0NzY3NDlFOTdEM0RGREI3RUEyRDAKKzoxMEQxNzAwMDNGNDk3N0QwM0UzNTgwNzJBNDg2QjcyRjdBOUI3RkY3RTAKKzoxMEQxODAwMDQyRUExN0M5Q0YwREVERUQ5ODRDNzJFOEE2ODA1RTBFMEQKKzoxMEQxOTAwMEI5QTJGNzIyMzMwMjcxRTREMEYxODVEQTI3MDIzQUZCMTMKKzoxMEQxQTAwMDA4RkE2NzA3NTJFM0Y2OUYxMjg4NjMzRkZCNjYwNjdEMjUKKzoxMEQxQjAwMDM0NkVGNDNFQTczNjBEQ0JGRkRERjMyMDU4OUYzOUVGRDgKKzoxMEQxQzAwMDg0OUYxN0U2QkMxM0E5MEYzNkZERUIyRjU2NjNERUM5MEIKKzoxMEQxRDAwMDk1MDU1QTE1QzcxMzg3NkY1NEFGMUNFMjdBNEU0QzlGQzIKKzoxMEQxRTAwMEY0NzMzQkVDRkFFQjhCOEQzNEJGQzhBN0Y5MTBDNkRGQTQKKzoxMEQxRjAwMEE4MUY1RkVBNEZGMEZFOUU4MDJFOEZFN0EzNjZCRkMxOTcKKzoxMEQyMDAwMEZBQjYwNDc0NzE5MzBGRDBGRjAxREE5Rjg4RDdGQzA1M0EKKzoxMEQyMTAwMEQ2RkIzMEFENTdFOEZEMUY0MTc4N0UzQjkwRkE5MTVFMUEKKzoxMEQyMjAwMERGMEJCNEJFMEE3MTNFQ0Y2M0YyREM3RTg5REUwRkEzNTIKKzoxMEQyMzAwMDgzNkJBNkZGRDcwMkJBQjhCOTZFRENFM0ZBRjk0NkIyM0YKKzoxMEQyNDAwMENGQTFERDRGQTg3RkM1MzBGRTM5QUQxRjc3OTRGRTY3QjMKKzoxMEQyNTAwMDY4OUU2OEJCNjhGRkIzN0FGQUJDMEU3Q0ZFNEIzRDdFQ0QKKzoxMEQyNjAwMDNGODQ3M0U0RjdCNERGQzk3Q0ZDMzc4QkEyNzBGQzAzMDYKKzoxMEQyNzAwMENEMkJERUZGREQ0Rjc2NTUzQUY3MTYyM0JDNUEzOTNERUMKKzoxMEQyODAwMDVEODM3RTNEQjU5OEZCNjc0M0RDM0YxQjk2NzA5RjI2MTAKKzoxMEQyOTAwMERFMEZFMTdERDJBNUYzMzg1REREOTIxNzlDNUU5QzFGMDkKKzoxMEQyQTAwMEIzNkZBM0Y2MDg3Qjc4MUZBRTM3NkE4RkUwNDBEMzBEQ0IKKzoxMEQyQjAwMDcyN0U5RkRFREU1OEY4MkYwN0Y3RTE3QUFEMEI3OUZCMUYKKzoxMEQyQzAwMDgyNjJGNzFBOTRCM0U2MzJFODIzNDVCNDlGNTg1RUU2Q0IKKzoxMEQyRDAwMDNDMkM1RjZENUM4Q0ZGRTMzQUNERjE3RjVERkRBMjYyN0IKKzoxMEQyRTAwMDYzRkUwMkU5QUZBMEI3MzkxRDgwRTNEN0VCQUMxMzFBOTgKKzoxMEQyRjAwMEExNUM1OUNDRjU1N0QwM0ZFMkRFRUJBRTJDOEVGQTExOTMKKzoxMEQzMDAwMDJBOEI3NUY5MTgyNzgyNTZCQTFGMThENTUzQzIwOTY0OUIKKzoxMEQzMTAwMDRGQzVGNEE4NDNGQjhDRjczNkJFNERFNTEyODFERkM2M0UKKzoxMEQzMjAwMEUyQzNGNTYyOUQ3N0QyM0UyNjg4N0Q1Q0JEN0Q4OERBQkEKKzoxMEQzMzAwMDdCNzhGQjM4RjU0REI0Q0U3NEJFNEVFNjdBRjk4MjU1NTMKKzoxMEQzNDAwMDE3MEY0MzRFQjM2MDlDMTdGRjA1RTc0Q0E5NkQ1OTMxODkKKzoxMEQzNTAwMDdFMjNFQTQ4OEZFMkI1NDJCOTcxOEZDNEVGRjdGNzE5MUYKKzoxMEQzNjAwMEVENDNDRTdGMkIwNUJENkYyRTNFNTI4RkY4NUJGOUFFOUQKKzoxMEQzNzAwMDVDQUY4REVDQzVCQzY4MUVEMzExRTI5RkQzQzIxRkUxMjgKKzoxMEQzODAwMDJFODFGNkU5QjRCRTM2NUFCRjk3QUZFRjQzMThCRjhCNzQKKzoxMEQzOTAwMEM2NjcxQzNFQjUyQzZDOUIzODRBOUU0NTlGQzAzRkY0MjcKKzoxMEQzQTAwMEJCOUZGQTM5RjlCQTZBNDMwQUU5RUJDMTI2RTA2OEMwQzMKKzoxMEQzQjAwMDczRkQwOTE2RDdDRkY0OTU2MkJCRUNGRjE1RUFFRjEyQTcKKzoxMEQzQzAwMDc2QUMzRkZFN0REOUREQjFCOEM5NkU2QUVGRTZGMzU5QTAKKzoxMEQzRDAwMDQxRkUyM0RFMDJBMUUzMEJGMTNCMTBCNUUyN0JFM0I1OTYKKzoxMEQzRTAwMDY1MkE3RDZGQTFCNkUwRDI1MkUxMDdBMUY4QTY4QzgzMzEKKzoxMEQzRjAwMDk3M0UzMDk5RTI5Qjg5NjUwOURDNUU3NDFBRkY4RTQ1ODEKKzoxMEQ0MDAwMDcwQUQ4M0JFMjcyN0JGNUIyQkYzMzJBQTk4RjFGQjcyNjYKKzoxMEQ0MTAwMDcxRTI1QjA2N0Y4QkY0OEI0NEJGMjc2NzREMjdGQkQ2RjkKKzoxMEQ0MjAwMEJFNUZGQ0ZEMjdEM0Y3RTMxMkRCMThGOUI3MUM1REZDRTgKKzoxMEQ0MzAwMDFFQjgzOTRFRDVCMEE5RjVCNTQyQ0NGQjUwNkQxNDk3NDYKKzoxMEQ0NDAwMDM1QzczM0NEN0YwRjYzQkU5MzY5NjM3MjI4MUZFNUY5M0IKKzoxMEQ0NTAwMEUyRDQ1ODFFQ0E1QjdCQjI1REM4ODc2NkZCRjlBRDkxMEEKKzoxMEQ0NjAwMEVDRTczRDQ2RkI3OTUwREFDRkRBRjVCMTlGNEYxNDFCNUMKKzoxMEQ0NzAwMEVGMEZFQ0NGMERGRTg0RjBBQzZBNzRCRTFEMjkyOTVBNjMKKzoxMEQ0ODAwMDhBN0U4NDc3NDQxRUM1RDk4NzI2MkM0MTdGNTRCODhGNjUKKzoxMEQ0OTAwMERGNTczODI3RTJGQzMyREU3RkI2OTBCOURDRjhEQ0UyRjkKKzoxMEQ0QTAwMDIwNzg5RTVEOTcxMkMxMjM3ODRDNTc3MzA1N0U1NzUwQTQKKzoxMEQ0QjAwMERBRDEwODc5RjQ3RjU1OEE3RDlBRURFREM0MDJDMEU3OTAKKzoxMEQ0QzAwMDJDNjIzM0IyQjNDRkJBREQxNDE3QThFQzExREY5NzEwN0EKKzoxMEQ0RDAwMEY5MDJEMkNFQUUxNEY3RjhENzk2RjE3QkQ1RThCMTQzNzYKKzoxMEQ0RTAwMDdBOTBERjBGQUMxNDc2QjhCNEM3MDc3RUM4MTQ3RDFFREYKKzoxMEQ0RjAwMEMwNTJFNjI3RkFBRDAxQzJDMEU3NzJGMTNEQzU1QTM3MDYKKzoxMEQ1MDAwMERCODI4QkZBQ0Q4Q0QwMUZFOTlDREFDM0U5ODQ2RDU3OUUKKzoxMEQ1MTAwMEU5RUY1QzlERUQ3QjkwQ0VENTkxRUUzMTM4ODRCRjgxRjMKKzoxMEQ1MjAwMEU0RDhDNDBGQzVDRTc3OTVFOENFOEY2QjM4NkZDNjUxNUYKKzoxMEQ1MzAwMDdCOTVGMzcxMTdERUZGNEQ4RDdENTc0MkRFOUJERjlFOUQKKzoxMEQ1NDAwMEMyRkQyODM3OTc3MDNGOTNGOTI5QkYxQkYxN0VFNTA3OEQKKzoxMEQ1NTAwMEM4Q0ZBQzEyODQ0N0NDOUVDRjJFQjkzNkY5Mzk4REZBOUMKKzoxMEQ1NjAwMDg5RUY1NkE0NjExQzg4OUY0QkQzNEJCODVFRTAxREMzNjYKKzoxMEQ1NzAwMDgzQjgzREY2RDFGMzAwNzI0QjQ2ODlFN0IyQUJFNzExQjEKKzoxMEQ1ODAwMENDQzNGOUNDRkQyRjBCN0RBNDM5MzdBNDk1RjA3ODNGOUYKKzoxMEQ1OTAwMEQxQUQzOURFMkZEQjlENDRGRjU0OUNGM0Y2NzMyNTVDM0YKKzoxMEQ1QTAwMDdFOTcwMjg5NUE3Mjg2REZFNzdGQkQ1RDNCODMzQURFNTQKKzoxMEQ1QjAwMEM5RjY3MjdBOUU1MkMzQzk5OEJGRjU5QUI4Q0YwRjhBM0UKKzoxMEQ1QzAwMDE2RTUzM0M5QkMyODM5NkU2RDVERTk5OTBCQkFGM0FDMjkKKzoxMEQ1RDAwMDcyRDFBMzk0NjdENkU5M0JGOEIyMDJFQjNDMjdGMkJEQzcKKzoxMEQ1RTAwMDA2OTNCRDc0Q0U4NThGRjNFRjRCMkRBRkI5RURDQzA1MEYKKzoxMEQ1RjAwMERERjk2MTVFMkZFNjQ1ODU4MUQ1Mzc5NDcwQkZFNjBCNzYKKzoxMEQ2MDAwMEE1OEU4MUY5NzlGOEJEMjZDRTg3NEQ3RDY3RTkzRTRDMjAKKzoxMEQ2MTAwMDdENUIwMzBCQ0RBMEJDMjkxNUYxN0I2QTFFRkZGRTQyOEEKKzoxMEQ2MjAwMDY1ODE5NTg1NzVFQjFBM0I1QjVCNTdDMkZEM0VDRDQ0MkEKKzoxMEQ2MzAwMEE3QjFCQ0MwMTY3QzVGNkFEM0M2RTBERjlGOTRGRTQ5RTkKKzoxMEQ2NDAwMDE5MkYyODJERjkxNUM1REQwNjUzMThDRDFGRjRCMDA4ODQKKzoxMEQ2NTAwMEM2REQxNzZBRjdEODg3MzBFRUUyRjE5MjdGQTRBMUM0NDUKKzoxMEQ2NjAwMDRCRUI2Q0VDMzk0MEVCNDkwQzVDQTZGNTk0QUEwMEVGNEYKKzoxMEQ2NzAwMDcxQzNFMTJERjlBMjVCQzA1QkI3NkY4MkY3NDhGQzVCMTkKKzoxMEQ2ODAwMEI5NDg0RDQ2RjhCRTg2Rjg4Mjc2M0Q4MjZGOEVBOTk3REUKKzoxMEQ2OTAwMDVDRUUzODc4OEZGNjJCMjgzNUMwREJFMTI5MzdFMEFEMUEKKzoxMEQ2QTAwMDUzRkJEQzE4REM4RkM0NzNBM0E4N0JBQkM3RkEyQUUyNTgKKzoxMEQ2QjAwMEYxNURDMDIzMjMzQ0M2Q0Y4MzM4OEVGOEJBOTlCMTdGODEKKzoxMEQ2QzAwMDJGRTFERjk5OTNGOEFBRUZFMkRGQkRBRUVGMkFBNUVGRDUKKzoxMEQ2RDAwMEM1RDUxN0RDNjY0RkEzMzg4MEQyOEZGNzI1RDc5NjM1OEUKKzoxMEQ2RTAwMDMwRDRGN0VENUEwQTdEREY0RUUyNkY2OTE5RTA0RkI3OEIKKzoxMEQ2RjAwMDVFRTBDNzdEMjUzQUJERjMwM0Y4RDcxRjI3QkMwQjNEN0QKKzoxMEQ3MDAwMEY4QzNGNkZGQzM3QzRGOTdDNEQxQ0JGRjUyRjE4N0UxM0EKKzoxMEQ3MTAwMERGRjNFMUU3RUVDRjg0REMzMDNGRTVCOTNCNjI3RTMzRjcKKzoxMEQ3MjAwMDVCQjJBNkU1MDNBQzQzRjIwREYyNkQ4NzgyRjk5MzhBRjIKKzoxMEQ3MzAwMDBERTkyQzg4RkM4QkY3RDcwQTdFQjEwNUUzQTFDRDFFM0QKKzoxMEQ3NDAwMEQ2OEY2N0UxNkVFNDIzODA5QkJEM0NEMzhFRkNEM0I4QkIKKzoxMEQ3NTAwMDI3OTNFODAyRUQ3RjgyQTczOEE3NUY4RTlERDM2N0U5MDQKKzoxMEQ3NjAwMDdEMEJBNzhCQkY3NkRDMDdENkYzMEVBREE3NEVEQzJGNjMKKzoxMEQ3NzAwMEY4ODhDNUE1NkUyQTBGM0FFNkEzN0Y1NjNCNDBGMkU1MkUKKzoxMEQ3ODAwMEU4M0NCNzk0NEYxOUZDQkI0REVGMkYwRTVBQTRGMUJDRTcKKzoxMEQ3OTAwMDMxMTkwRjhEMTNGRkY0MkExRjIwRkU2OThFQUI4RTE0RjIKKzoxMEQ3QTAwMDBGOEQxM0ZGMzRFOEVCMjNDNTNGOTkyOTRFNkE4RTdGMTYKKzoxMEQ3QjAwMDJFRUVDOUE2RjhGMzYyOUY4NUJFNTMyREY1N0UxOUY3QUMKKzoxMEQ3QzAwMDdDQTVFNzI5OTVCRThCMzQ1RDYxMjk5OUMzRTNBMzNCMTIKKzoxMEQ3RDAwMDg1N0Y4Q0ExNTZBN0RCRkZBOTBDRkVGREVCREUzNDI3NkQKKzoxMEQ3RTAwMEZEREQ1NUZDQzE3QzJDMDk0RjkwMEY0RTA3Q0NEQkI1RkQKKzoxMEQ3RjAwMDg4RTc2NTU2NjUxRTM2QzNENTJFRUM5MjZCODJBQjhDREUKKzoxMEQ4MDAwMEFGREI3Qjk0Qzg2NjI0MEQwRjhCRTZGRkQ5NzU3OEI2MjUKKzoxMEQ4MTAwMEZCQkU0Mzc4NjRFQTgwMEJCRkM3RERFODFGNEZGOTY0QTUKKzoxMEQ4MjAwMDY2M0MxNEY1RjBCRjRCNTlFNDlFNDM3Rjk3NTJFMkJGMkMKKzoxMEQ4MzAwMEM4MzMzQzZGNTA5NUVCOEI5MzM3RjgxN0M3QTc3N0IzNzYKKzoxMEQ4NDAwMDMzNkIxNDdDQ0EzOEY2NDg3OEJDMjUyRkI4MTFGOTQ2REEKKzoxMEQ4NTAwMDdFQkY0OUJFM0Y5NUMxRTE3QjdFMUExMzdGRkZENDg4MEUKKzoxMEQ4NjAwMDRGODBCRjQ2RjdGQTdERUNDMDY2NjUzODNEMTQ4OTdDNzEKKzoxMEQ4NzAwMENDMjI1RkY4MUVDQTgzNEZBQ0YwNjBEQzJDMEFERkY0QzgKKzoxMEQ4ODAwMEVGMTI3QzNCNUJCRERCRDEzRTNBNUU2NkEzN0M5NTM4RjQKKzoxMEQ4OTAwMEY0NDA3RkRGRjY2QUY0MzAwQ0VGN0QxRjBDN0ZBQjBBOUIKKzoxMEQ4QTAwMDFGNUI5ODE5ODczRTNFMzA1RUFGODI0RkJCRjU1MDRGRUQKKzoxMEQ4QjAwMDgxMzcxRTlGQkVEMDQ3N0NFQUI3QkExMUFGMTI5RjEyQzQKKzoxMEQ4QzAwMEJGQzNGMUM5RjUwQjg5RUY1M0Y5REEzN0U3RTdFQkYxOUQKKzoxMEQ4RDAwMEFDM0Q4MTc4OEVGMTZGOThEQjMxMkNGRTc3NkYwRThCMkIKKzoxMEQ4RTAwMDdDMTYxOEU3NDlFQ0Y3RDRGQ0U4Mzg0RkUxQjhENTlGMkYKKzoxMEQ4RjAwMDg4RkZGNzRFMEU5NzcyQjk1QkM3RkE1RjlDODg3NkRGOTgKKzoxMEQ5MDAwMDA1MjZGMjM1RkQyRjdCRDE0RkQzOTYxRDM3NUZGM0U0MEIKKzoxMEQ5MTAwMEZEMEFGRjNCM0QxRTc2QzAyMkNFNTc4QkNFREUzRDhCRUYKKzoxMEQ5MjAwMDc5OUI2MERGOUVDNkJDNEQ3OEZFNzA3RTI2RURCNzE3RjIKKzoxMEQ5MzAwMEYzMzdDNzgyM0UyRUYyM0JFQjcwNkM5QzA3RjQ1OThDOTgKKzoxMEQ5NDAwMENCMzMzNUM0RjA1RUZBMjA3RTlGNjUxNjdFOUZBNTgzOUIKKzoxMEQ5NTAwMEU0NkUyQzBGRTMxRDUzMUUwNjJGNTcwNUE0QkM3MTQ1MjIKKzoxMEQ5NjAwMDI4RUYyNjFBRkZGNDg0MENGMTRGMzYzMzYyOTQ3NzA1QzIKKzoxMEQ5NzAwMDIxNDNGQzUzRTRFOTQ4RjlCNjU5NUIxMDBBMUJFMjlGQzYKKzoxMEQ5ODAwMEU1MzRGRTk5M0FEOTdFNDdBNDc0QkEzRUZFNTkxREQxQkEKKzoxMEQ5OTAwMEY0RjFDREYwMUQ1NEFFOEI5NjgzNTQ5NjdFRThDNzA2MDUKKzoxMEQ5QTAwMDFFMDhBMTFGREEzNzMzRjQ0QkM0OTNCQzM3MEYwMjQ4NkIKKzoxMEQ5QjAwMEMzQkY0MzY3NzVCOTBGQTIxRDBFRjYwMUQzRjI0N0Q2NTgKKzoxMEQ5QzAwMEFCM0YyQUNGRkYwRjUyNkJBNTdEMDA4MDAwMDAwMDAwMDcKKzoxMEQ5RDAwMDFGOEIwODAwMDAwMDAwMDAwMDBCRTUzQzBENzQ1NEQ1QkYKKzoxMEQ5RTAwMDk5RjdDRDdCRjM5MzY0NDIyNjIxRTIwMDQxNUYwMkU4ODAKKzoxMEQ5RjAwMEQ0NDIxODdFMDIwMTA5QkNGOTQ5MzJCNjIwMDMwNDhERDUKKzoxMERBMDAwMDA1RTkwMzcyMkM3NDZEMUI2Q0E5QjRBQjlCODFDNDk4OUYKKzoxMERBMTAwMDA0ODVEMEIyREI5RjZEQjcyMzQyQ0ZCMURBQjM3MUVCOEYKKzoxMERBMjAwMEE5NDRBNDFEQTQ1NTVBMkFDNjM2Mzk2Mjk3NkFBMDI5NkEKKzoxMERBMzAwMDA3NUFEQkEyOTVENUVFRTkyOUZCN0RERkJENzdFNkNENjAKKzoxMERBNDAwMENCODRBMEQwM0RGNjc0Mzg5RTk3RkJFRTc3RUZGREJFRjkKKzoxMERBNTAwMEVGN0VGRkY3M0U5NzJGNTQxODVCQzBFMEU3NEQxQTFBOTAKKzoxMERBNjAwMDYzMDM2MUY4NzMwMkI2RkRBNjUxQzZEOEFBQzlCMjVEQjgKKzoxMERBNzAwMDk5MzRBNjMxQjZCODQwQjZBQjRENjMyMTYzMUQyRTI2NEUKKzoxMERBODAwMEM2QjMwNDAzRjg1Nzk4OTNEQURCOERCMDk5OThDMjU4NUYKKzoxMERBOTAwMDY4QjkyQUUwNjMzNEZGNkI2QjI0RkNBRTY0MDhFNjVCNzQKKzoxMERBQTAwMEVEMTBFREM0Q0FBNEUxNjVFQzYzNENCNjk3NTI3QjREMTIKKzoxMERBQjAwMEJBMURBN0Y2OUQ4Q0FGQkYzRkY1QjA5OTgwRjFERjk5RjUKKzoxMERBQzAwMDEzOUY2MDVDMDNFRkEyM0Q3QTdDRkFERjFGRkVBNzE1NkYKKzoxMERBRDAwMDg5Q0Y2NDEzRkIzRkU4RjgwMkJGNjM0NjE1NEVDRkY5QzgKKzoxMERBRTAwMEZENzc4MEVGNUE5MjhGMDMxQ0RGMEYyMDdFRjcxMDNGRTcKKzoxMERBRjAwMDlGRTBGODdEMDBGMDY5MjM3QzdBMDA5RkMyQkZGRDdBMjkKKzoxMERCMDAwMDJGNTQxOUJCNzFCREJGMDExRERGQTQ3RDlGQzZFOUI4QUQKKzoxMERCMTAwMDBDRjg0Nzg5RUUyMERGMDc3QkZGODQ5MDhGMzFFQzlGNjQKKzoxMERCMjAwMEMzRTc3QkQ1MjlFNDI4RDE2NEEyREM5RjcyNUFGNjBEQTUKKzoxMERCMzAwMERBMEJGQUU1N0E1QkY0OTA2NkM1N0YwQkU5QzlFQTEyNjUKKzoxMERCNDAwMDNFRkU3N0E5N0JDRDQ0NTlBNjBEM0YwM0Y3NUQ4RUZGQkUKKzoxMERCNTAwMDNERjY2NzhERkYzQzhERUY3MkE2RTE2OTNEOTdFODU3NzIKKzoxMERCNjAwMDBFNkYyMzdDMzNGNDI2MDhCRUNGMDZERjI4RTgyQjNBNUQKKzoxMERCNzAwMERDOTE0QzU4RjhDMTEyMEYxMjdGRDI3NjI5RjEzMEQ5QkUKKzoxMERCODAwMEE1MDE5NzZDRUYyMEJERDk1OUNFRTcxRjdGRjhFMTI0OUUKKzoxMERCOTAwMEUyMEZGQzNCNDZGQzlFQzJGOUY3OEZDRThGM0YxODQyNDYKKzoxMERCQTAwMDVFMDI5QzFGNTIwRUJGMzNDN0Y4MjNDQUQ5MDcwRDVGMTAKKzoxMERCQjAwMEQ4M0YzNTc0NEQ0NkZFRkYxRkQ2MkJBNkY1ODQzRUJEREIKKzoxMERCQzAwMEQ3RjE2OTdEMTQ3RTlGMkQ0OUYzNzc2MjA4REU4RjBGQjAKKzoxMERCRDAwMEVCRDQ1RkJERjFDOUM4QjVGMEU3OUFFNjQ3NTQxM0U3NDcKKzoxMERCRTAwMDA1MTg1NkNBNTg3QzkwMjVCN0MzOUEzN0IzQTRDQUMwNDMKKzoxMERCRjAwMDg3QzU4MzI2RjM0REIzRTgzNUZCMEFFMUUxRjIzQTQ0RTkKKzoxMERDMDAwMEZCNUI2NEZGNTYyRjkyNzI3RDIyODlGMTQ1MDY2RkVGMTAKKzoxMERDMTAwMDNBRENBNzM0REVFQzlCNTk3ODJGM0NFQzdENDREMDFERDgKKzoxMERDMjAwMDBDNTlGNEU0NkFDRkVGMEYwMzVGMkNGMTUwQkEyREY4RDIKKzoxMERDMzAwMEIzRkFEMzVGOUI4NDdDNTg1RDIxRTdGRDc2MTJFNzc5QzgKKzoxMERDNDAwMEI1NThDRUZCMjRBREJCM0FCRENFMEY3ODNCNUZDMkZGQ0IKKzoxMERDNTAwMDk0RTAzMzc4MEQ5ODU5NzgyNTdFNDE3MTk3QzRFQkIxRTMKKzoxMERDNjAwMEMzMDNCNDVGMkU1RkYyODE3MTczRTBEOUE0MDQxM0IwRDMKKzoxMERDNzAwMDFGMUZEQkI4NEQzNUFENzY4MUY1RTgyMUYwNkY3N0IwMjkKKzoxMERDODAwMDc0OUJFNDJBNjMwNzdBNjhEREFCOEREN0U2OTBFMDhGNUEKKzoxMERDOTAwMEQwRDMzNDlFODMyQzk4NjA1NkZDMEVGMEZEQjlDQUVCQUQKKzoxMERDQTAwMDVCRUNDMjNEMjhCNzU3OUZFRjI5RTdCNTE2QkU0QjNENDkKKzoxMERDQjAwMDU4RTM0QkVCQjdDMTNDQzA3NzVEQ0VGMzYzNzNBM0Y3N0EKKzoxMERDQzAwMENBRDcwNTM5N0ZEODZBNEZBRTlDOEVCRTVBQTJFMzBERTMKKzoxMERDRDAwMEJFMkYxOUZCRjM5Mjk5NkQ3RjJFMUJCRjQ3NDIxNjdGMTMKKzoxMERDRTAwMEZFOUVDNzg3QjJGNUNDNjI3RjFFNDdCQTVCQkQyNTJFNkMKKzoxMERDRjAwMDk0RUY3NTdFNjYyNDAxQkY4QkY4NUI5Qzc5OEUwRjJCQTkKKzoxMEREMDAwMDY0OUZEMkZBNTlDREM3QUZEQ0M1OUE3QkE2MEQ4N0JGRjkKKzoxMEREMTAwMDM2RUMyMEI4RDY2N0Q4QzYxRTk4MkZFNDNBREYxNEI3ODEKKzoxMEREMjAwMEMwQTU0MkJDRkY1MDQ4QTEyN0QwNzc4OEY4QkY5NUUzMzMKKzoxMEREMzAwMDc3MkNBNEQzN0EyMUE2MzEwMzc0QUE2MUU1QTQzMjk0ODYKKzoxMERENDAwMDgzRDY1RkYyRjk5ODNGQzg1NjE0NjZFNjNCMkJFNjkzRkMKKzoxMERENTAwMEVCMUM1RTVFRDg2OEE1RTMyNzYyOUQ2MzIxNEUwN0ZBM0YKKzoxMERENjAwMDdGRTJFNzdEOUMwRUI1RTg2RTNGQ0VBRjE2QzhGQ0YyQjEKKzoxMERENzAwMDc3QzRENzc2QTc2ODI3REUyMkJGMzY5MEI2NDM3RjI0QzQKKzoxMEREODAwMDc5NUZFNTk2NzJGOTBFRTlCRjhDRDdERjBBRkQ2RjMyMzUKKzoxMEREOTAwMEIxMTBGMTY3Q0MzMUNCM0FFRTBGNjQwNzQ3MUIzNzI4M0YKKzoxMEREQTAwMEZENDU5QkQ4QUY0NDdBQkY0RTIxREVBMzhENTcyMzRBNTEKKzoxMEREQjAwMDMzRjFDOUMzNTIwQUY4MEZENUVCREJEQjA1QTQwNDJBMDMKKzoxMEREQzAwMDhENzMzOEZFRTg0Q0UzQjc5NzMzMEZGMEU5M0NFRENCQTkKKzoxMERERDAwMEU3QjJGMzExNEJGRkRCQTFBQzdDRTBGQ0RENzE5QzA3RUIKKzoxMERERTAwMDU2NzZDM0JFQkRCMjQ2MkQ1RDBGN0NGQjJCRUU0RjE1QTQKKzoxMERERjAwMEU1MDdCMTVDRjJGNUQ3Q0NCRUZDMzU5NDE1Q0Y0NzBBRTgKKzoxMERFMDAwMEFCNDA4RkQ4Nzg0NzcwQUEzRTdDOUMzN0FDNDgzOTEzMUEKKzoxMERFMTAwMEZCQTQzRDgyNzRCNEE3RjU4REI3NzcxNkYzRkVCQ0U3N0IKKzoxMERFMjAwMDlDRUI4NDNFMTU4NDcxOURBNzA0N0Y5OUFGMTRENzYzNDIKKzoxMERFMzAwMEQzOEVBNkQ0QjlFMDVGNTlGQTY3MzhBMEJEMUVGRjgyMjEKKzoxMERFNDAwMEY1MDcyMkE3OUMyODA3NkIzQjE0MjM5OTQzRUU4N0U5MkIKKzoxMERFNTAwMDQ5ODc5OEZGQTFGNEZFOEQwRjVGNDNGMzlBNkNBRUYwRjMKKzoxMERFNjAwMDFGRjAxQkY4QzQzNjlBQjdCMTQ5MjFGREIzRUJDQkU0RTAKKzoxMERFNzAwMDMwRTdERkU0NzA5QTRGOTMwOTdGNDNDOEVGOUNGODU0NzIKKzoxMERFODAwMDZDMDMyODczQ0ZDQUNDQkY1NkUwMUQ3MkM2MEY1RDBCNjIKKzoxMERFOTAwMDcyRDBERUE2RTg2ODhGRDY2RDVERDc1MTBFNkRBNjM5QkIKKzoxMERFQTAwMDgzNTNFMTcxMDM3MjBBQzZCNUZCMkJCQzY4MDc1RTE0OEQKKzoxMERFQjAwMEVCRTE3QzJFRDg0N0Y0MjVGRTEyODI2MzFBM0NFN0M2QkMKKzoxMERFQzAwMDM2MUZDMUUxRUY0RTM3QUI5MDlFRUFGOEVFMDg5MkI1RUYKKzoxMERFRDAwMEEwRjFDOTIzRjhCQzE1Q0MzNEM2MjlEQjE2N0QzRDFFNDQKKzoxMERFRTAwMDg2RkRFQjlCRUYwQ0EyQTg0MTc0RDYzNzA1RjA2QTEwQjMKKzoxMERFRjAwMDc4Njk0NkZEMzkzNjA2QjIyODE3MEJBNkU2QTA1RkY3MEIKKzoxMERGMDAwMDA2QjdDM0ZCODZBNjRGMkM2MTk1MDAxMzc3MEUwRDdBREEKKzoxMERGMTAwMDkwMTg5MzVEQUNDMDc5QjVBMUMxMDBFN0Q5NDVCMDcxNDcKKzoxMERGMjAwMENCQjczQTMzNkRDNDBERkIzRDk5RkU5NUQ3NzNGQkI0NjcKKzoxMERGMzAwMDNBMENGQ0I0QzhERDBGMDU3RDNGMTRGQ0RDMDUzOEY0NTkKKzoxMERGNDAwMDREQTMwOTBBMTlFQTBEREJFODQwRkVBRDEzNzNGNUI1RTAKKzoxMERGNTAwMEFERkNDODg3MDBCRjBCMDExNkM0QjYxQkU5NTMzM0Y0RjAKKzoxMERGNjAwMDlEOUFBNDcxRkE5OEUxNUQzQTBFRDYxNUZCN0FCQzA1MkMKKzoxMERGNzAwMDZDREQ4RDMwNkQxQkQwMDlGNDY4RUE5QUEyOTQ0NThFNTEKKzoxMERGODAwMDhGOEYzMTU5MTBFM0I2NDBFMjAxMDY3MjEyMzE3NzNCQjAKKzoxMERGOTAwMDA3MDE4RkVCOUJERURDODg3MURGNUFEM0FERDcwMzhBOTQKKzoxMERGQTAwMDc3NkNGNEQ1NjI1Q0JCRDIxNDdDNTlFMjNDOEQ3NDdCRjcKKzoxMERGQjAwMEUwMUZGMkM1OTUzQUY3NjMxN0YyNzlBMUMyQzZDM0ZDMTgKKzoxMERGQzAwMENCQTJCQzVGRjJDNUNEQjREMzU2QkU2OEI2RjZENjkzMkQKKzoxMERGRDAwMEU1M0I3RjY0ODFGRjRDQjhCMEY0Q0M4N0UxOEZEOTZDMEUKKzoxMERGRTAwMEY2NDVBMDEzMENDODUyQzRFNzQyODdFMjUzQ0IwOUNDRDQKKzoxMERGRjAwMEMxODA0RTk3ODdFRkUzRkU4RUNEMkZBMjlFQUVGNTZCQ0MKKzoxMEUwMDAwMDQxODc4RUY4MzFFMjVGQTM1OEUzOUQxNjdERTc4RjIwQUMKKzoxMEUwMTAwMDU2OEQ2Q0REREQ4RDcyNzc0N0JGQ0FEQzAwRDdCRTY2REEKKzoxMEUwMjAwMDNGQ0U4NDNGMEZDRUE3MDlCOTcwMTQ3Q0EzNEYwMzM4QUQKKzoxMEUwMzAwMEVEOEIyQUMzRjUyNDFGODFERkJFQjlGMEZFRjQwMDhDRkUKKzoxMEUwNDAwMDA3RDAzQkFBODE0RkIwRUVBRDg2NUJENzAxMkU3RkUxQjIKKzoxMEUwNTAwMDlCNkRDOEE3N0NENjlDMUEwQkVEREJGQzBFOTZGMjY0NzgKKzoxMEUwNjAwMEU4MDJCQTEzODIyRjhFOEIwQUFEQTU2QjcyNUQ0NzU2RkMKKzoxMEUwNzAwMDNGRjEyNUZGMEIxMUM2RDA3NjI3OENCRTI5MDBCNzVDNzcKKzoxMEUwODAwMENBNkQwN0RGQ0ZFNTA2REYwRkI5QUYyQ0NBRTU1NUVFNDUKKzoxMEUwOTAwMDRCQkU0RDVFRERENUNFOEM3Q0U2OTA1N0ZCM0UyNDZEQUQKKzoxMEUwQTAwMEZCQjA1RkUzN0E3MkFBNUZBNUY4RThENDlFRDI1QkFCQkYKKzoxMEUwQjAwMDgxMUY4OTNEMEVEMjYzQzhEMzBFMjg0NUYwNDc0QTYxQkYKKzoxMEUwQzAwMDFBRjBGRjc2ODEyRkZEMDA2RTdGNzM3MUIyQUIzQ0IzMDcKKzoxMEUwRDAwMDFGQjcwNzlFRkZCMzUyQzkzOEQ0Qjg4QzNENjI5OEM0QUQKKzoxMEUwRTAwMDQyRkIzNkQxQkFGREFCODkxMkQ0RDM4RkIxMUUyN0VBRDkKKzoxMEUwRjAwMEY1OUQ2Q0QwODlGMkZGNzE0QzA1NTVCNDhGNDExN0JFNjgKKzoxMEUxMDAwMDZGRjRGODVDQzhDN0ZEN0I5RTJCNDQzQjkyOUFFMDJDRDEKKzoxMEUxMTAwMDNFMTMyMDU1NjE1NjNCNjk3RjIyMjdDRTQ4QkEwMTM4MEQKKzoxMEUxMjAwMDI1RURBN0M3RjQ5MzVERjZDMjkzRUNCNEMxQjA1RDVDNzYKKzoxMEUxMzAwMDFCRjU5ODM5RkNDOEUxRDlFNjBCNjgwNzY1NUJGMzM1MzgKKzoxMEUxNDAwMDMzQzRFMzVCQjNFMzNGMjE3QjI5QzZFQjk1QzY0RkIxRjQKKzoxMEUxNTAwMEZEQkQ1OUM2MzE3QzdFMUJFMzNERjAwRkU3QzNGNzUxOEYKKzoxMEUxNjAwMDVFRjJFRTc0RTMzOERBMzVCQjFEM0I4RDc2NENDRkM4REEKKzoxMEUxNzAwMEMzMEE5QjNDNDgzQjc2MDJFRDE4NzRBRDQwN0QwNUJFNUEKKzoxMEUxODAwMEIxRDg5NUQ5QjE1MzUyMEU2RTYyMzcyMTdGODA5RTVGMTAKKzoxMEUxOTAwMDkzMUZEMTgwMUVFMENCNkJCOEVGMzMxODU2REY1MkFDMjMKKzoxMEUxQTAwMDg0QzhENDdEODA5RjIyRjBDM0Y3MEFEODc3NjVFQjBCMzMKKzoxMEUxQjAwMDdGNTZDNkYwRjYwMjgwNTNDNEJFNjIxQTU5OEI3RUUzQzYKKzoxMEUxQzAwMDNGODIxRUNGNjRCNDE3RTYwOUE0REJDRTE3NzBDQzRFOTUKKzoxMEUxRDAwMENBQ0JGQ0NGOUY0MEI5NzExNDNDM0JDOUNDRTEwN0QzRkIKKzoxMEUxRTAwMEZCN0FCN0YzOEQzNDVEQTg0NzEwQzkyMzFEMEEzMzFEOTAKKzoxMEUxRjAwMDE3OTExRTFGMjAzMUZFNTI3MjkxMjAzOTY4NUZBQTEwQkMKKzoxMEUyMDAwMDdERURFNUFDMTFFRDc5MUI3NkNEMDc3OTVGQUFGNEEwMjEKKzoxMEUyMTAwMEJDM0YxRTI5RTFGMUQyMTQxRTE3NzYxNTI3RkQ0MTVFODEKKzoxMEUyMjAwMDY3MjE3ODE2MDhCMjk1RDMzM0YzM0UxRTUxMDlGRUE2MzYKKzoxMEUyMzAwMDM5NDYwMTNBMkU4OEZCMjg1RTkyRjFBQTg0RjM0NTc4OEMKKzoxMEUyNDAwMDVDMzkzNkMyRTM4QzQwNjVCQzg0MUM1RDY5OTBGODBFNzUKKzoxMEUyNTAwMDcxRDQ1ODZBN0I1MzQ5QzczODUxMTdFMTNGREQ2MTg5NTIKKzoxMEUyNjAwMDIzMDYyNjI2MTlDNjIxRjk0NkVFQjhFMUJBNDhEQUFGRTgKKzoxMEUyNzAwMDVGMTc0MTNBRjY0OEJGNkU1QzhGRURDNTYzN0QwRDY4NTAKKzoxMEUyODAwMEU3NUM4MEY3REVGMjhDQkZGRUZFRDJGQjU1NTg5NjdEMzAKKzoxMEUyOTAwMDM4NTI0RUY4NTUzN0VENkUxRDA3RkIxRDBBNERGNjYyREMKKzoxMEUyQTAwMEQ4OTRBQTQ5RkEzMThFRTgxQTBGN0NDOEExMkY1QjIzQjMKKzoxMEUyQjAwMERDMEZDRUI5NEVDMDA5N0U0OUJGRUY4MUYwREIwOUVCMjAKKzoxMEUyQzAwMDYwOUFFRkMwMzhBMDhDQzcwMTc3NDYyQTY4OUM4QzA3RkIKKzoxMEUyRDAwMDAwM0VFMTAyQjhEMDBEMjZDREQzM0UzNUY3N0E3NzBBNUQKKzoxMEUyRTAwMDdFNjZGQzZEQjAwOEVEMzU2M0NERTQyRkUyQzI5RkJDQzUKKzoxMEUyRjAwMEQyNjJCQzM2MDQ0MjM5RDAxMkEzMjdEOEZGQkUyODE4RjgKKzoxMEUzMDAwMEI4MTM1QUEyMzA5ODgzN0ZDQjZBRjc3OUQwNkZCNzA2REIKKzoxMEUzMTAwMEQ2N0IwNjMxRkUzMzIyMzQ2RkUzOUFEMDZCNDMxNjdCRjMKKzoxMEUzMjAwMERCNTVDNjI2NjExQzcwNUJDMzJEQUYwRDU5RjRBREFGMzQKKzoxMEUzMzAwMDkwRTM4QjdFMjZFMUNFQ0NCQjBBRTUwNEYwM0QxMjcyNjEKKzoxMEUzNDAwMEE3MTYwMzQzRjNGRDJDRTk1NkU4RTlENDUxMEYyMjNBMEUKKzoxMEUzNTAwMEY1Qzc4RDc1Q0NDNDdDQkNGQTk0NDZGNUFGNjI5Njg2NDEKKzoxMEUzNjAwMERGMDY1QjEzMDkzMDI3RTIxNUY3MjcxOThFQ0I4NzM2QjYKKzoxMEUzNzAwMEMyQzcxN0JFNDlGMENCQUE1NTk2QjBFMDA5RjY2NzJEODMKKzoxMEUzODAwMEM5ODEyRDVFREE4NTAyMDZGM0I2Q0Y1NzkyREI2MURFRDYKKzoxMEUzOTAwMDA2RkY1REU0N0ZCNjJEQ0FBN0Y3QjA2RUQyMERFRjZGMTIKKzoxMEUzQTAwMDlEREE0NDdFNEJDNjU3RUREMTY4OTBGQ0QzMTVDNjUzMTkKKzoxMEUzQjAwMDg3NjdDN0VGNDFCQzVDRkVCNDVERkQxQ0M5N0ZDNkFFN0MKKzoxMEUzQzAwMDZFODk3MEJCRkE3OTdDMkZFREM3REUyM0FGOTBGRDgwOUMKKzoxMEUzRDAwMDFDODRGOERDMDVGQ0ZFQUYxQ0ZCQjg0REU4NDE1NzMxNEUKKzoxMEUzRTAwMDk3NDM3QkZGRDc4NEJDQkUzQjNEREU4QUYzMUJFMEQzNjMKKzoxMEUzRjAwMEZDQjNERTdGQkNEOTJFRTM0REMxQzcyQkU1MEZGMEUzQTQKKzoxMEU0MDAwMERGMjIxNkJCMENGQ0Y4NEFBNDZBMzgxRkUwRDc4NkY2NTgKKzoxMEU0MTAwMDQyOTVENkUyMDk0NTQzRjlDRjEzQ0Q0Nzk4OTlDNDcxODcKKzoxMEU0MjAwMDFFRDY0QzQwQUEzN0NFRDBERjBEOUYyN0M1NzBEQzZBQzAKKzoxMEU0MzAwMDQxREY3QkI1QzdGRjA5RTEwREI3NkJDNjEzMTFDQTBCRUUKKzoxMEU0NDAwMEI5M0M0QkJCMEM3QUM5RkRFRkZCQjREQkZEMEVCMEE3QUEKKzoxMEU0NTAwMDgwNEYwN0JFOUE5RkU5M0YyNEY2QjlCN0NBM0M4NEVCQzgKKzoxMEU0NjAwMERFNTBFNjU5ODdGQzdGNTAzMUZDNUUxNUVCOUU2NjIzM0IKKzoxMEU0NzAwMERBMTFBNkNGQ0ExQTM3N0M5RDZEMzRDRjQwODVCOTExMDkKKzoxMEU0ODAwMEY1OUFFOTJCNDY4MURGMkVENkQ1QjlCRkQwMzkxREIwMUMKKzoxMEU0OTAwMEVFNTdGMzI3NjdEQUEzRDFGNUZEODhGMTczQzRCQkQ1MzYKKzoxMEU0QTAwMDhDRkYwQUY1RUVBNTgwNDM0RjI4RjQyNDNERUNBQUNFNUMKKzoxMEU0QjAwMDRCMkFEMDJFOTg2NUJFQ0FGNzExRUMyODRDREQxNTc4OTIKKzoxMEU0QzAwMDhCRTJBMjY1NEIxNDhBRDM5Njc5MjA4M0NCNjEyN0NGNDgKKzoxMEU0RDAwMDA4N0ZCMzRDRTdGREVDQTRFMUI3RDYzQjhBQTM4RUVDRjIKKzoxMEU0RTAwMEJDMTc0NEMyQjBENjJGQTI4RUY1NTg5Nzk3RkUwQ0VCRkUKKzoxMEU0RjAwMDI2QjlGNEVEQkNEMDI3RDVGRDY2MTlEQUQ1OTc5Q0I5QkQKKzoxMEU1MDAwMEVERjY1QjExMTdDMTI5NTE1MTk3MTBGRTZGOTU5QkU3RUUKKzoxMEU1MTAwMDU3RUM2NzgwOUZDNUJGRjY1Njg1RkY0N0Q4QUY4NDYyMkEKKzoxMEU1MjAwMEYxOEIwMzEzQ0Y5M0JEQTMxRUNCRkI2NUEyRUVDNEZBMDAKKzoxMEU1MzAwMEIzRTc5MTc0OTY0NDU5RDZCQTIwQUY4RTI4QUY2M0E4M0EKKzoxMEU1NDAwMDUxNEJGRjJBOTVGMUJBNDc1RjM2QkYwMDFGNEY5NEUyNDcKKzoxMEU1NTAwMDNGMzYzNDAyM0VGQjcyRTI3MzIyMUI5RjkyMjhERjk3MDQKKzoxMEU1NjAwMERFMkFBMzA0RTcwM0ZGM0MxNkQ3RUYwODgzRkNFNUUwQUYKKzoxMEU1NzAwMEVGMTMzM0MyRDc2MkJGQzYxMjFEMTVFNTk3OEM1QkFGOTAKKzoxMEU1ODAwMDQzMzhEOUI2QzRBRDdBMzREQkJFOTY0N0I5N0RBRDg4ODEKKzoxMEU1OTAwMDkyN0RDREJENkVBNUUwREI5NURBODdGN0FCRjczQjZDREUKKzoxMEU1QTAwMEZBMkU5RjVEODM0RjE1NTQwMjFFNkU3N0UyQjNBNEFGMUYKKzoxMEU1QjAwMEQzMkU0RkJGM0Y3RTVEREY0NEE0RjM5MDkwNEZCNEVENjgKKzoxMEU1QzAwMDE4NkYxODNBOEY0NzNFMURFNTcyMUNCQTIxNDk3MENGNkIKKzoxMEU1RDAwMDhDMTA3RkE0RTE4MDMxNTg5NzFCMjkwRTk5RkYzRUUzRjAKKzoxMEU1RTAwMDkwQUU4NTAzMDUzODRGRUJEQjdCMEIzMDhGN0Y2NjI4QzEKKzoxMEU1RjAwMDlDMzMwRTM5NTRENjRENzhEQUUzOTBERTExRTI5MEJCQUQKKzoxMEU2MDAwMEEyM0M1RTNERjIxQjE3QzUxNTM1NjdCOTlGQUYzOURCREMKKzoxMEU2MTAwMEFERUEyMDlGNzc0N0I5REQ5RTNGRDRBNzlBMjAyNzM1RTIKKzoxMEU2MjAwMDE4ODdDMDNDQkQyMjBFNDFGODZEMjBCQTkxQjdCQjU1OEEKKzoxMEU2MzAwMEM0NkJGRUQ5M0UxQTU3MDM2RDhDNDNFNjhGMTA4NzAwREEKKzoxMEU2NDAwMDE2MkFDQUREODE5QUFFNUZFMEJFRDlFOTdEQTFEMkRDOEYKKzoxMEU2NTAwMDEyQjVFNDVCRDU4MzdENzQ0RTIyQzc3NTA1QjYxNzk4NTUKKzoxMEU2NjAwMEI0Q0ZEOTcyNzM3ODM2QjdCRjk5NzE1Q0RFRUQ3MDIzODEKKzoxMEU2NzAwMEM5NTdBREVBMEQ2MDdEQTA5M0U1MDc5MTBGRUZFNDhEREEKKzoxMEU2ODAwMEE5NjQ0NTNDQUZDMUI4QjgxMzQxODFFRUNFOTMwNUM5MkEKKzoxMEU2OTAwMDA0RTZENTFFREU3RjZGRkU5OEJERjg5NEY2QzcyM0Y0MUUKKzoxMEU2QTAwMEUyOURCQ0VCOTIyMjBGMzI4QTYwRkNCREFBOTE1QTBDMEIKKzoxMEU2QjAwMEZFQTA3M0NBOTc3QzlDOUVDREE0NDc1QjA0NkZDMkJCMkYKKzoxMEU2QzAwMDM1Q0FBNzZGRjZGMzdEOTBGMUQ3OEJBQjE0OEEwRjYxMzMKKzoxMEU2RDAwMDlBMjU0QjAxN0U5RTk4REYzNTg3RTc4Nzc1QUE5N0UwREMKKzoxMEU2RTAwMDc2MDQ3ODFDNzk3M0UyM0NENTJGRTYwRkJBNzQxRERBRjQKKzoxMEU2RjAwMEYzMDZFRkUyRjlBMkZBRUNEMTAyOENGNzNGQUMzMTE1NDgKKzoxMEU3MDAwMERFQUY2QThCQjc5MjdDOUU3NDUxM0RDMzgwN0ZBODlGMTkKKzoxMEU3MTAwMDU1RkQzREM0Qjc4MjIxNTc1NjlEMjMxRjJDNTlDQTEyNUYKKzoxMEU3MjAwMEI3Qjg2QzZEQTZBRTI5Q0E2NTg3RTREMzVFODc3ODMyMjgKKzoxMEU3MzAwMDJBRjJDRjRBMzZFMzIyRjBFNTAyQkJBRjAzNjk3MzRGRkEKKzoxMEU3NDAwMDBEMUY3OTk0MEQxRjJGRUIwQjlCNjYxODRGQTM3QzRDNkMKKzoxMEU3NTAwMDcxMEU3RUY3NjlFMDU3RUYxQjJFQUE1QkY0RUVEOUYzM0EKKzoxMEU3NjAwMEQxNEFBMDJGRDFBRDUxNUQ1N0U2MzM0MDU5Qzk3MkNDODMKKzoxMEU3NzAwMDY3OTEwNzU0OTczRUJFMUVFNUYyNjBBMTZDODM0MTAzOEEKKzoxMEU3ODAwMEJDMEZBNkNGRUIzN0FEMzcyQ0VENjNEMTA3NEVBM0RGMUYKKzoxMEU3OTAwMDNCNzg4RDg0M0ZDN0M3Q0I3NjYyNzAzRERFRDczODM4NzMKKzoxMEU3QTAwMDlFQjcyRjQ0RDU0NzEzQjRCRjgzMUFFNUQxNUI3RkVERTUKKzoxMEU3QjAwMENENjUxRjhGRDc3MkZEOTJFRDVCQUIzNzczNzkxRDY1MDkKKzoxMEU3QzAwMDFDRDhGNTU3QURGQTIxQzdFNTJEMzU3NzRDMDc3RTFDQ0YKKzoxMEU3RDAwMDFDNzJEMEY5MTBFNDU5Mjk4QzBGMzZDRDMwNUY0N0Y4MDAKKzoxMEU3RTAwMDA3NEY3MEJFMUU3Q0UzMUUxRkVFOTM3QkVDRTBFNzcyQ0EKKzoxMEU3RjAwMEQ5RjlERjBCN0Y5NENFRjM2NjcyRkIwMTZFNEU0M0JGRjcKKzoxMEU4MDAwMEI1NkJEMTMzQzcyQTYxOURFM0YzQTdDRTUyODEwNEUwRjMKKzoxMEU4MTAwMDg1MDdFMzY1MzlERTVENUI5MUE1ODdCNzU2QkZBQ0FFNzIKKzoxMEU4MjAwMDQ3RkJGM0M2RTk4NjVDRkE1RTE1MzVGRjk0NEQwRjNGNTIKKzoxMEU4MzAwMDE3NkRFREQ2ODhGRjI1Q0ZEN0VGQzU3QjNGQTk5QUVFQTAKKzoxMEU4NDAwMDNFMERGNkI3RjdGNzBFODY3OTRBRUY3NDkxODc4Rjg0RkQKKzoxMEU4NTAwMDU3MTBGMDJBQjkyQ0JDRjZDQ0NCMjE2RjgwOTdBQkY2QzEKKzoxMEU4NjAwMDlBRTE3OEJENTRDQjg4M0YyRjU0MUE5RURBQUFFMTc4RkEKKzoxMEU4NzAwMDMyNTFDNzVDMjBFQzdEREVCOTJGNTFEREIxNzdEMDQxM0MKKzoxMEU4ODAwMEM1OTMwQjQzN0I1NTE0M0Q1OUZGRUUzQTUxODExMTEwNEUKKzoxMEU4OTAwMDVCQkNFNDk0OEEyMjY1REVBNzY2RTlEREJDMTNGOTU5MDYKKzoxMEU4QTAwMEVEM0I5QkM3NjZCNTU3NkY5Qzk4RDE0M0Y4NkY0NTc0OTUKKzoxMEU4QjAwMDcyNTZEQkVEQkYyOUFCMUQ2MkIzQjNEQTBENEI2RUNFRTIKKzoxMEU4QzAwMDlBQUZENjE3Qzk2QUQ3RkIzRjlBMDU3RjhCQkUzMkFCOEEKKzoxMEU4RDAwMEZERDFDMEVBMkNGOEE1QzEwRDU5RkQzNUJFREQwRjYwOTQKKzoxMEU4RTAwMEY5MjgzRTZEQTYzNjk2OTEzQ0NFNDRCRTE2RjQxQjI0MDQKKzoxMEU4RjAwMDhGMEY5RUI4Qzc4NzcyOTFBQTg5NEY0Mjc5MUIyOEVDNjcKKzoxMEU5MDAwMDJCQzNGQUY1OEJDRURDRjlEQTdEQjVBQUY0REY2NUU4MjYKKzoxMEU5MTAwMEVGMERDNkYzMzUwOTFGQUExOENDQUFDQjZGQThFNUZFRTgKKzoxMEU5MjAwMDc5NkRBRDkyQjM0RTYwRjdDN0QyMEY0QkJGNkM1RkRGMEUKKzoxMEU5MzAwMEVFNzdFREZFNzZEOTg3RjY3QTc4QkQ5RkZCRkQ1NTQyREUKKzoxMEU5NDAwMDBFNUEwMzNGRjc2MkJFRkU2MjAzQUYyMzc0OTVDNUE5NUEKKzoxMEU5NTAwMDZFMzAyMEZDRjM5MTU1Qjc0RkMyNzNCNUZDODAzOUQ2QTkKKzoxMEU5NjAwMDVEOUVGMUQ3OTE0MDkyRkQxQUVCM0NCRTI0OUIzQzFENkQKKzoxMEU5NzAwMEZCOTM2Q0MzNzRBQTRCNkI5MTY5RkNGRDBERTJGRDVEQ0EKKzoxMEU5ODAwMEY4MDQzRjVENjdFMTlCRERGRjg2M0MzMzdGNUNDNDMyNkEKKzoxMEU5OTAwMEYxNEFDM0JCNDZCNDA4RjBGQjQ4RDM5MzVBMjkzQzIzNDEKKzoxMEU5QTAwMERFQzM5QUQ1MEUxREFGRjk2REU5MDg3RUZBOTNCNTM2MzAKKzoxMEU5QjAwMDdEQzI3MUJENDMyQjJFRTkwNzVFNkZFMTc1RjdFRkI3OUUKKzoxMEU5QzAwMDc4NTgwQUU4M0JEOUUyQTNFNzJGNUJGQ0Y0RkVFNTE2OTIKKzoxMEU5RDAwMDlEOUVFRDJEMDE3QUE2NUE4MkQ0RkY4Qjk2NkE3QUZFMEYKKzoxMEU5RTAwMEE4QzVBMEU3RjMyRDMxN0ExRTZEODkxM0RDNEY1QjFBQTEKKzoxMEU5RjAwMEU5RjlCMzE2OTNERUVGMTQ3QUZBNDFDMUM3MDhDOEJBMzEKKzoxMEVBMDAwMDQyRkM4ODQzMjFCRTM2RTA1NUREMDU2NzBERDU2QUU3MzcKKzoxMEVBMTAwMDgxQUZGRjlBOEJBRkVGRDc5RkE0NkE3QTI2QTI5QzgxMjEKKzoxMEVBMjAwMEJGQ0FBOTRGM0RCNTMyQUU0RkVGMzdFMTI1RTM2MUNDMDgKKzoxMEVBMzAwMDVGNTA0RTY0OUQwRUYwN0IwQ0YxNzM2MzdEQUVFNENBQjMKKzoxMEVBNDAwMEYxM0JBODcwQkMwRTE2RjNGQTBEQ0VCM0JDMTBFREY5NzUKKzoxMEVBNTAwMEQ3RTM2MUIyRTdEN0NDMjQ3QkVFNjc1QUI2M0QyRjFGRDAKKzoxMEVBNjAwMDY2Q0ZENzkxREVCMUEzNTgyN0M1RkEyMjlENTNEOEVBQzUKKzoxMEVBNzAwMDIwNDU3NTNBOEQ5Mzc1OTA0NUVGRjIzQUM4NjhGNDAzRDYKKzoxMEVBODAwMERENDdEMTZFNDlCQjdEQjk3NERCRTkzRDNDREI3ODA5REMKKzoxMEVBOTAwMEU3OTFGRTc5OThGRjMwRUYyNkZGNTEyRDc0OTY2OTZGNEMKKzoxMEVBQTAwMDUzOUM1ODIwRThEOTc1N0E0NTExREExNzM3MjJDOEYzRjQKKzoxMEVBQjAwMDc0ODM1NUUzM0UzMzc5MUY2MEVGQzZCMkUxRjNCRTVFNjcKKzoxMEVBQzAwMEQzNDNGRTdDNDczQUNFNzk5M0UyOThFMUZFMkI5QjBGMkQKKzoxMEVBRDAwMDE4MEI1OUZEM0JGMEUxNUNCNjVGRTQ3Q0E4NTU5RjFEMjcKKzoxMEVBRTAwMERDMEVGRUY5RTAyMEUzNzVCMjM5RkNCQzRFRkFDMTgzQkUKKzoxMEVBRjAwMDY3NzkxREUzODJBNjI0MTk2QzVEOTgzNTc3Q0Y4M0U3OEIKKzoxMEVCMDAwMDgxRkI1OTY5MUNDRjlCMjYzOTgyRkIwMUI0RTBCOTVFQjkKKzoxMEVCMTAwMEREMDM3MEExNDE3MzZDMUVGNDU3QTdGMjY4NUM3OEM5REQKKzoxMEVCMjAwMENDMjRCNjFCRTI2RjkyN0QwQTZCRDk3RTEyMjNENEI0M0IKKzoxMEVCMzAwMERGQTEyMjU4ODlBRDNEMjEwM0FGRTJGRTU2NjREQTMwRjEKKzoxMEVCNDAwMEVGMjc2NjlCNUExREQwQjVFMjdDMzNEMzYxN0U3NzE5REYKKzoxMEVCNTAwMDczRDJGRDkwRTFGRUZENkVDNTUyNjdEMzU4QjAwM0U5NTQKKzoxMEVCNjAwMEQwQkVCMDgzOUZFQkQ5RTQ0REYyNDlENkRCNjQxRUZFRTQKKzoxMEVCNzAwMDA4MzM3Qzc1MzlFMjg3MzY3MUVFNjIzRjZGNzk2QkJBODQKKzoxMEVCODAwMEU5NDc3OEM1RjczQzlEQjdCMDhEOENERjhGNzA0MDdFMkMKKzoxMEVCOTAwMDgyRkMxQkUzNEFFRTJGMUYyRTc3REY5Qjc1Q0JBNDNBMzYKKzoxMEVCQTAwMEFBNTMyNDk0QUI5M0I3NzcyQjk0Qjc4QkJDODlFOTlGNzYKKzoxMEVCQjAwMDcxNThGMzE4OTkzN0Q5RjNBMzg3ODQ5REREODk3NjE2QTgKKzoxMEVCQzAwMDlFMEYzOTE5RTU1QkVENEE3RTcwQUY5MkM5OTdDMDZGMTEKKzoxMEVCRDAwMENFNDBCQTE2RDU4OUYzMTdENjNDOEY5RkQzREQ5Rjk1Q0IKKzoxMEVCRTAwMDJGOEQ4OEI3Qzg0QjlDRTk3RDJGRjM5RDI5QzhFQ0JCQkUKKzoxMEVCRjAwMEQ3RDVFREM3N0I4RTlEMzNCRkQxQjgxRUY5MzZEMzQzMzEKKzoxMEVDMDAwMEU3OUM0QzRCRTk2ODc3RUNGNDMwNUY4Mjk1Q0VDREVDMTUKKzoxMEVDMTAwMEI3Q0FCNDMzNTg5RkVEODA2MDA2Q0Y3QjFGQzYyRjAxNjMKKzoxMEVDMjAwMDYwQkVDMkEwMjMyQkVFMjlBQUNFOEVEQjZFQUY5Mzc2RjgKKzoxMEVDMzAwMEY2RUFEMDgxMDI0MEU3REIxMjRGMTYxN0U3OTkzQ0ZFNTcKKzoxMEVDNDAwMEY0ODhGNzZEM0FCNzE3MENFRDlERTU3Q0JEQ0Q2Qjc4NzgKKzoxMEVDNTAwMDdDOTZGRDdGMTBGN0M3M0QzMjNFNkE3OTlCMEZFQkUwNTMKKzoxMEVDNjAwMERENUUwN0U5Nzc4N0FFNzU5NjQzQkJDM0FCRjFGODQ2MjcKKzoxMEVDNzAwMDc3QzQ3MjlENDNFREFBNTMwNEREMUMyRjlGQzA0QjBEM0EKKzoxMEVDODAwMEFEQTAzODY4QTRGNUJBODRCQ0M4NzZGRTM0RDMyMDdEMjQKKzoxMEVDOTAwMEQ0ODM3MUNDOTM1QkJEQTUwQUQ2NDc2NUZGQTYzQTQ1RTAKKzoxMEVDQTAwMEM4NEIzN0YxQTE1M0M0NTVGOTgxOUU5NDAzRTU2Q0ZDMjAKKzoxMEVDQjAwMDVEQjM5MTZEMUU4ODkzQ0VDMDdCQ0ZCNDFFOEFBQkJDNzIKKzoxMEVDQzAwMDEzNUM2NjJFQkNCRjJDRTZFQjc0MDY2Mzk0RjcxNzNBMTAKKzoxMEVDRDAwMDE4RTZGRDlERTVCOUZERTgzRkQ3RjEzOEIzNTU5RjE1MUUKKzoxMEVDRTAwMDQ3RjgwNEYwNjVBQTMyMUNFRTUzNDIwRTFFNzA4MjFDRDcKKzoxMEVDRjAwMEMyRkE5RDUzNkZBMzdCNjI5RDkzMThEOUVGOEFGQUU5RkMKKzoxMEVEMDAwMDhGNkVGM0U2OTA0M0ZEMzNCNDdGNEUxRjkzRTdFRjU5QzgKKzoxMEVEMTAwMEY3MjU1QUY1ODZDNjc1QjBBRUY2MzIwQkEyQ0RCMEVCMkMKKzoxMEVEMjAwMDlCNzNGQzhBQzY3NTc4REZBMjNBM0Y4OEYwQjVFQUNGQkMKKzoxMEVEMzAwMDEyQzhDN0Y2MjBBMzdBODc1NkRDRTQ0MUJDMUYyQ0QzNDcKKzoxMEVENDAwMEU4N0U0NDlBQUYzM0NDQzdEMDdFOEMyNkRGNzY3QzYwRDkKKzoxMEVENTAwMDNEOTJCQjkxRjZENzhFMUY4NUYyQjMyRTAxNUY2QzM2QzQKKzoxMEVENjAwMEM2NzNDQ0Y3Q0JCNDVFNjVDQjk3NzMxNEY5MUE4RDlFM0UKKzoxMEVENzAwMDJDRkY1QTk2RjFBRjNGQTlEQkJDMDFFRkE5M0RDQzc4M0YKKzoxMEVEODAwMEZGQjFCQTMwRTVGQkY2RjZENUQyRjM1NkFEQkIxMUY3QkQKKzoxMEVEOTAwMEE1NzU4QThCRTRDRjNFQkVCMzlDRTNENUY1N0M4RDU4MzgKKzoxMEVEQTAwMEQ3QTdBMEZDRUZBQzJFQzk0M0ZCRUU0NTQzNkRFMTZCNEEKKzoxMEVEQjAwMEFBRDIzQzU1NjdGMURGQzVEMTY2MUVCN0Q3MzE5MjVGNDUKKzoxMEVEQzAwMEFGMUVGNzREMDFCOUYwRjZBQjIwNTNDMDc3Qzc1RkRFMzkKKzoxMEVERDAwMDNEQTVCRjdGM0VCMjZFODNFNDk2NEMzQjk3NUJGNjE3MzIKKzoxMEVERTAwMEUwNEI5MTEwRUIzMUVDQTEzRTdFNUY2NDBCQzE0OTdFOUMKKzoxMEVERjAwMEVEQkFGRTBGQzFENDI1RjgzNjY2NjE3NjdERUFCREQ2NDAKKzoxMEVFMDAwMDlGOTRGQUMyNTJFMjczMUVDQjQzM0U1RjYwRjcyOUU0M0YKKzoxMEVFMTAwMEJGQTMwNkU5OUQyRjZENTdGOUJEOTU1MkQ5MDQ3MkIwNzUKKzoxMEVFMjAwMDREMjJBNzY0RUE1MjBDQ0YzRDUwQkY0QzQ2RjEwRDQxMzQKKzoxMEVFMzAwMDhFMTM0NzVFNDRCNzhGQzY0RDE0RDM0Q0MwMEIzNTJBOTIKKzoxMEVFNDAwMENBM0ZCN0JCMTdEODFCN0M3RDE4ODZGNzU2OTQ4NDgzQkUKKzoxMEVFNTAwMEZDRUNGNTI4RDcwMDU3Q0VDQzNGOUZDQTcxOUY2NzkyMzQKKzoxMEVFNjAwMEFGRTlDOTBERjA5QzU4MkZFQTY5ODI5RUQxRjgyMUYxRDMKKzoxMEVFNzAwMEZFNUJDOUFEOEMwRkVDNzU1NDU5Njc3RDFBRUJBQ0NBQkIKKzoxMEVFODAwMEU4NzU1NEE2OUQyN0JFQzlGOEQ3NUU1NzA1QkY1NjgwQzIKKzoxMEVFOTAwMDdDN0ZFNzA2OEQ3NTExREY3OUJDOTBDOUYzNEQ4RkY1NDYKKzoxMEVFQTAwMEZFOURGNDk3RURCRTE1NTlGNUY5NzkyM0QwRkJENDI4RDIKKzoxMEVFQjAwMDdFQjFBQjFGRUMyNkM2RDFGRUVENTQ5RjNGNzA3MkZEQjQKKzoxMEVFQzAwMDUxQ0NFMzJGRjg1RDNBQjNEOEZGRjZDMkVDRjMwMzM5MjcKKzoxMEVFRDAwMEVGRjY3QTUxODcxRjVGQzc3MEJDRDY2NzMyQkNCN0U3QzEKKzoxMEVFRTAwMEYyMDdDOTJGQjQyQUI5Q0YxREJBRUExREUyQkNEMUU2OTgKKzoxMEVFRjAwMDI3NkNFNzMzRkY5REU3NERCQTJBNThEQTdGQThDMjNFNTgKKzoxMEVGMDAwMDRCRkZDQTM0RjBBMkUzQUNFM0I5MUQ5NUZDMzgyMEUyMTQKKzoxMEVGMTAwMEQxQUVFNzM2RDEzRDAzRTZCN0Q0N0QyQjcyQUM2RjhGMEYKKzoxMEVGMjAwMDFCMEQ0M0Y3Q0RDREM0QjFDQTIwOEY1RkU1RkFFRDIyQUEKKzoxMEVGMzAwMEVGNkUzREM5RjcyMzVGREMzN0IyRDMwQkYxRUYxN0VCNzAKKzoxMEVGNDAwMDgxREU4MjgwQzM1NkRGQ0FCNjM3RjY3OEQ4RUQ2MTg5OTQKKzoxMEVGNTAwMDdDOEJGRDgzNzhCOEE1OUVFMjg0RUM3ODc2NDI4Q0YxQjgKKzoxMEVGNjAwMDdCNDFDNTI2QzNGQTRGQzQ2RkFBNThBRjk5REJERkFDMEIKKzoxMEVGNzAwMDMyQTA3QkRFQzk0QkVGNDc2MzNEOEYxN0RBMDNFQkUzMkIKKzoxMEVGODAwMDk4MzdDOUZBRjNBRTQ1MUYyMUZCMEE3RUI0QkJERTYyOTcKKzoxMEVGOTAwMDc3RTU3RDg3Rjc1QThGOTJGMjNBNTdFQzYzN0E3REZCREIKKzoxMEVGQTAwMEJEOTQ4NTVCRjhCOUQxQzk3QjhFQTEzQzFFMDA3OTQ0MjQKKzoxMEVGQjAwMDNGREY1RTk4RDgzMTFERTM5Mzk3NTVCNjVGMUY1RUJGNjQKKzoxMEVGQzAwMEIyRDMyNUVCNTA2MzYzRkNERThBQ0JERjdFNjRCMUMzMzIKKzoxMEVGRDAwMEMyOUZDMTY2NTUyN0ZFMTgwQ0NGODkzNDcxNEU2NEFGQUQKKzoxMEVGRTAwMDNCQjlERDQ2MzNGQUVGNTQ4REQxNjhBRDNCNEJCRTM1QUUKKzoxMEVGRjAwMDBBNzk3RUJEQTY5OUNFQjE5RTFFRTFEQzU4QzJFMUU3M0EKKzoxMEYwMDAwMDY1OTg4N0NCM0E1NkQ5MENGMzU5RTRFRkRDRDg2NjE1RUUKKzoxMEYwMTAwMENENDg3NTdDMzNEREJGMkNGODE3NDZGOTIzQ0I1NzkyQ0EKKzoxMEYwMjAwMEZCNjFBOUU3MTYzRDQzRjlFNTlGRkM4Q0VBNkMyRUNDMDkKKzoxMEYwMzAwMDJGNEIzMTlGRTRGOUE1Q0M1QkE1OURBODU1OUZFOEE4NkYKKzoxMEYwNDAwMEMwN0IxREZEMUFEREQzMkI3ODZFOTMwN0UzREU1MEZGRTYKKzoxMEYwNTAwMDA2Q0FGMTBDNjU1NTAxRUVBM0JDQjcyNEYxQkNEMkZDODUKKzoxMEYwNjAwMEI0MEFGMzUzQ0JGOTRBQzY2RUM0N0U4NTcyRDBENTEyNkEKKzoxMEYwNzAwMEZGNTUxNEU0QTNCN0M1QTA3NjdCNEIyMzNEQUJCNEE0RTYKKzoxMEYwODAwMDgxRjQ1NDA1MjhFMzYzMEI4NkEwREY4MjQ3NTU1RjJDOEIKKzoxMEYwOTAwMEFCREQ1NTY5RkU4NkVCNTUzQ0VCQkREQjBGRjM1OUU0NjgKKzoxMEYwQTAwMDAyRjJFMzczMDgzN0Y3MjRFN0E3NkI4OTQyRjcxMTk2NUEKKzoxMEYwQjAwMDBEQjIwN0I4NkVGRkMzRDhBMTgyRDhENUIxNDNCRUQ4NzAKKzoxMEYwQzAwMDI1RUQxMDNGNjc3NTBEOEE3MzU2OUJCRTNENUVBRjkzNkQKKzoxMEYwRDAwMDFFQTRGNTBFQ0Y1QkM5Q0YyNTY4M0M5RDE5Q0UwNzdBREIKKzoxMEYwRTAwMEM2N0M5MkRCQURDQ0JEMEVGQTlFMzEyNEJFQjNCRUYxMjAKKzoxMEYwRjAwMDY4Q0QzRThDNjdEQjVGOTVGRENCRjcxOTk2N0U5Njg4RDEKKzoxMEYxMDAwMDM2NjFFREVGMzAyNkM3MTA2Nzc2MUUyRDZEQTJFRkIwODkKKzoxMEYxMTAwMEM1NzczNDkxQzZFMkIyMDE5NkI5RUY2OEU3RDc0MzMxQkIKKzoxMEYxMjAwMDQ3RDY3RDlBMTBFM0Y1MzREOUJGMzkyNkYyNDMyMDA3M0MKKzoxMEYxMzAwMEVCNzZGMkJFNDQzRURFOTdDODExQkZGRjkzOThFRjVFQjgKKzoxMEYxNDAwMEU0NTMxNTdFMUZDMkVGMkIyQ0I2N0QxRjYyQzQyRUZEMkIKKzoxMEYxNTAwMDdENDg0MkY0OEZGNjNEQzgxRDMxOUU1Rjk4NjIzREZDQUMKKzoxMEYxNjAwMEZFM0Y4NkY4QzZGOTc3MThFQkM1N0UyREU4NEZCNjhFQzAKKzoxMEYxNzAwMEMxMjBEMUNGNzJDRTEzOEY3MTNGRkY0MjhDREY3NzcxRTgKKzoxMEYxODAwMEY5MEQwREY3MDVFNjVCNDE3MkQwQzhFRjY3Q0FGRTA1QzEKKzoxMEYxOTAwMDY3RDNGREI3RDE3QTBEQkM3RkMxNTk5M0VBNDhGMkJCNjIKKzoxMEYxQTAwMEJDNzhFQ0M2N0REQkI0Q0NCRDlDNzZBQzQ3NzhGMUZCN0IKKzoxMEYxQjAwMDE0N0VERkU5REYwNTlERjZBN0ZDM0VFNTM2OUZCOERGNEMKKzoxMEYxQzAwMEMzMjZFRkMzREE2NkFCQzFCRkM3QkMyNTc2RDM1MDQyQjYKKzoxMEYxRDAwMEEzRjVFRkEyRjVDNUY3MzhENTgyNUU3OEJGODlERURCRUYKKzoxMEYxRTAwMEZFQkYwMjREQjFCMjdERTIzQjlFNEYxMTVEQ0QxQ0VGRTMKKzoxMEYxRjAwMEY0RkYyNzIxMzE5QkU0NEJDMjU3Qzc2NjM1MDlGOENGOEUKKzoxMEYyMDAwMDEyRkM0NjBFOUY0MzFFODQzQzU2MTE5RTk3MzFERkZEMzMKKzoxMEYyMTAwMDg0REYxQThFREY4NzYyN0FENkY3NUY1MjZFMDE2RTNCMEIKKzoxMEYyMjAwMEMxODlFRjgzRkFFMzFCM0M2OENGRDNERkZEMjdBNkVENEUKKzoxMEYyMzAwMDMzQTY1QzE2OUY3NkQwM0NBNjVDOEZGMzQ5NzU3M0JERjAKKzoxMEYyNDAwMDkwRjIyRkU1RTFCQjYyMUY2NkM2MTQyOTU3NUZBNkYxNTUKKzoxMEYyNTAwMDRENTc4REZFNkYxMjNGNkRERjIzOEQ0NjQ3QTAzMkJFQTYKKzoxMEYyNjAwMDhGRjBGMEE3RUYyM0VGOEZFNUQ2Q0ZGNzg0OEZGQzdFRUEKKzoxMEYyNzAwMENDQUUxN0NGMEFGQTYxRERFRkQxM0E2NTQxQkE5NzA0RjcKKzoxMEYyODAwMEVCM0U3NTM1RDY4NTc5N0Y0MDdDRjBBNEU3RkQyMUI1NEUKKzoxMEYyOTAwMEFGNzA1RTU2NTY3QTU5Rjc0QUZFMEZFRDkxM0I2RjYwOUMKKzoxMEYyQTAwMDQ2MDAwMDAwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwNjYKKzoxMEYyQjAwMDAwMEI5M0U0NjY2MEY4NTEwRkMxODE0ODZDNjJGMTFBNEIKKzoxMEYyQzAwMDc2MDY4NjY4MTYwNjg2OTlBQzBDMEMxNTQwMkNDNzQ5NDQKKzoxMEYyRDAwMDlBRkVFNTQwRkQ4QjgwNzgyRTEwQ0YwMEUyQzk0MERDMUQKKzoxMEYyRTAwMDA3QzQ5RDQwREMwMkM0OTI0MEYzNDQ4MDk4MUY4OEI5NTMKKzoxMEYyRjAwMDgwOTgxNTg4MTk4MEY4MzcwNzAzQzMzNzBFODQzOTM3OEIKKzoxMEYzMDAwMDgwNjIwRjQ4QjQxQjg0QUQ3ODEwRUMzMzQwRkY2RjA0NkIKKzoxMEYzMTAwMEUyQUI2NDg0QzMyODFFMUUzODlEOUY4MUExNUEwMEMxQTAKKzoxMEYzMjAwMDE3MTA0NDk1Q0ZFMDQ3QjBCOTQ0MjlCMzRCMUFBODFGMzIKKzoxMEYzMzAwMDAwNjU2RDQwQjQ4MDAzMDAwMDAwMDAwMDAwMDAwMDAwODQKKzoxMEYzNDAwMDFGOEIwODAwMDAwMDAwMDAwMDBCRTU3RDBCNzg1NEQ1RjIKKzoxMEYzNTAwMEI1RjAzQThGNzk2NjY2NzIxMjQyOTg4NDIwMjcxMDMwOTEKKzoxMEYzNjAwMDY4MEE0MzgwMDg4QUY1MTAyMjYyNEJFRDQ4QTk2MjJGOTMKKzoxMEYzNzAwMEI1MDM4RDgwMTA0ODU0QUNEQzRBQkYwQzRDODAyMDI4NkIKKzoxMEYzODAwMDQxNTE0MTkxMEUwODE2MTU2RDQ0QUM1OEQxM0IyMEI1NDIKKzoxMEYzOTAwMEI0QjU2RDZDQjlENTVBRUQwREI1QUQyRjBDODg1MkZERDUKKzoxMEYzQTAwMEZCRUJFNUVFQjVGNjNFOTk3M0NFQ0MyNEUwRUJCN0Y3NzgKKzoxMEYzQjAwMDBGOUZFRUVDQjM1RjZCQUZENzVFN0JFREI1NzdEQ0IyNDIKKzoxMEYzQzAwMDBCMEEwNzAyOUNDNDlGMEIwMDZFNzEwM0MwOTg3NDNBMkQKKzoxMEYzRDAwMEYyQzY2RkNDN0Y2ODM0RkJGREZGQkEyM0RCRjU3NDNEQ0EKKzoxMEYzRTAwMDMzMUQwODEyRDUwMzMwMDA4QTAxMkVGMEIyNUY1OUJEREIKKzoxMEYzRjAwMDg5M0YzRkYyQTcxMTQ1MDBGQjQwMDEwRkZCOTQ1MjI3QzQKKzoxMEY0MDAwMEY2RjkxQUVCNjdERjg3MTBDMTcyRjlFNzgxQjJDRTAwMTcKKzoxMEY0MTAwMEI2OEI1M0JCMkYwMzZGOTcyQUQ3Q0JCNDJBQ0M4MDhDRTMKKzoxMEY0MjAwMERGMEQyRkZEQ0VGQTE5QkNBOTg5QjUzRkYxNDE4MERBNzUKKzoxMEY0MzAwMDNCRTEzMDUzRjg1MDg2OTQ2ODczNzIxMEY2QUJCRUQ3MzgKKzoxMEY0NDAwMDU5MjlGMkU1QzAwNjA3MDE2RjFENDA0RDFBREUwM0FGRDIKKzoxMEY0NTAwMEJDNDZGMEVFNTcxOUJDN0E5NkYxQkQwQ0ZFQTIzNEZDMDYKKzoxMEY0NjAwMEZCRTAxQkY5NTBDNUUxMzc2QUQyRjA5RjJFM0MzNEZGMTgKKzoxMEY0NzAwMEJFMDAyQjlCRjUyNzJCNUMwMDM3MzdDMzkzMTU0MzAwNDkKKzoxMEY0ODAwMDU2Mzc3QjI5QkZCQzU5QTM3Q0EyMzk0Q0Y5OTUyQTZCMEUKKzoxMEY0OTAwMEMyRjBCMDcyMUIyNEUzQUM3RDY4MzRBQjZGRjZDN0ZFREMKKzoxMEY0QTAwMDBCNTQ3OTZENzk3NzExNkJFRjRERTdENTQwRDg5NkY3MEUKKzoxMEY0QjAwMDk2RTlCNjNDMDNFNzUwOThDREZCMkMzMTlGRTVDRDBDODcKKzoxMEY0QzAwMDA3MUUxQ0RGMEJDNjk5NThGRTZEQzI4QjRGRTAyRDExMzUKKzoxMEY0RDAwMDFDN0FGOTIwODY5N0Q2RTcxNTQ2NjkwMDk3NkU0QzQ3NDcKKzoxMEY0RTAwMEY4MkEwMjZFM0RDOTU4RTNBQ0MwRUMyOTMwOUM4RDFCNTQKKzoxMEY0RjAwMDhBMDFCMDdBODlEQjAxNkU2NTcwMEYwQjRDN0EwMzQyOEEKKzoxMEY1MDAwMDAwRjdCMUZFNUI1OUZGNEFBOEY1NDUwRjJCNUY1NUVFOUEKKzoxMEY1MTAwMEQ2MTVDNENCMEVGNTJGOUQ2QzBDMkZGQjg3NzgzQjczNTMKKzoxMEY1MjAwMDAzQ0ZBN0U3QzVGMjk2NzkwRTAzNEIzOTZCRkZDQjgyNjkKKzoxMEY1MzAwMDNCNUU5NDE4MUM4OTBBQjdFRTkxRDJFMzc0RDNBNTk3NjkKKzoxMEY1NDAwMEZFODdCNEQ5RjNDRUZFMkI3NEEzMTZGOUQ0RUM3NzA4NUEKKzoxMEY1NTAwMDQ0OTc2OTgxMkY2RUJGNjczMURDRjYyOTRDRjc2QjhFQkIKKzoxMEY1NjAwMEQzNkJCRjhDRkM1MUQ2NzZDODA2NDhBNkNBMzNDN0E5NTAKKzoxMEY1NzAwMEQwMjM5M0UzQUNCQzYyODMwQUM5NzJGRUJEODhDOTQzNDEKKzoxMEY1ODAwMDA1RkYxNTU2OTZENUZBNjM1NTk5RjA4MDc1OUM0MTY5MkIKKzoxMEY1OTAwMEJBNTRFOEVFOTkzMkUzOEI4QThBQ0JFNjRCOEM2RkEwQTMKKzoxMEY1QTAwMENENDJFNzQxOUM0MTUxNUVENjM2NkJDNDhGMzczNzU3MDkKKzoxMEY1QjAwMDUyQkFBRDU5NkIyN0Y5Rjk0ODk5REU1RTk1Mjk4NzdGRDQKKzoxMEY1QzAwMDQ1M0RDNURBRERFMjAyRTJDM0Y4NzY0ODZFOTdCMEJGOEEKKzoxMEY1RDAwMEU4RjQ5OTJDQkY2NjY0NzFGNTREM0FFNkE3Q0JBODE3RkQKKzoxMEY1RTAwMDRDRkU1RTIzRTlDNERGNzFDNkRGQThGRjlDRjI3MUIzNTUKKzoxMEY1RjAwMENCRjgwQUY2Qjc2QUE0MkMyRDQzM0M1NzcwN0VBRjcwNDcKKzoxMEY2MDAwMEE1QkM4M0IxREZCNjQxMjNFM0Q4NEZFNDc3OUQ1OEFGNjMKKzoxMEY2MTAwMDYyQzg1MDVENjFFMzBFQUJFMEZDRkZDQjMxNzc3ODUxRkYKKzoxMEY2MjAwMDBGNzZDRjdGNzE3MTdCQzUyODgwN0MwNzFGNjhBN0M4QzQKKzoxMEY2MzAwMDA3REFGODlFRjlDMDFDRTdEMzk2ODdDRjhFQkZEQTdBMzcKKzoxMEY2NDAwMEU0QUYzNTkxNUJERjQwQkRCMUFEODJFQjBEMjc1QzI1QUEKKzoxMEY2NTAwMDAzNTNFMTY4MjA5M0RGMkEyQTE4OUYyMTlEMjIzREYzNUUKKzoxMEY2NjAwMDk5MzNCREJEMzkwOUFGMzIxRUJBQUQzOTRDN0NCN0FFNDYKKzoxMEY2NzAwMDU5QTc3NEI1RTA0MzE3RjI1NDA5Q0IwQjNFODRBMkQxQ0QKKzoxMEY2ODAwMDk0Q0ZCOTVFQzE1MjVBOEZGQTRFNEI0MjhDQzE3OTFCNEUKKzoxMEY2OTAwMEYyRTdCOUY4N0RCOTYxOTRCMUU2OTU2NjFFNTIzMkQzQUUKKzoxMEY2QTAwMEZERUJCMEJDOTRGMjA2OTQyMTdGOUFFNThGQzQwREQ2OTEKKzoxMEY2QjAwMEJFNTBENDlGMjQzRDEyNEYzMDI0RERFNkUzRjlDOTUyRjkKKzoxMEY2QzAwMDk3MTEyRkIzQjY1RjZEMThFM0QzRjU1OTNFNTU1QjYxQzMKKzoxMEY2RDAwMEVEOEZGNTVGNjU4NUU3MTlBQTZGRjY1NzJGMUQzNkUyQTYKKzoxMEY2RTAwMDJDQkZDRUM3RkI2Qjk1NUVGQzVDRkFCRjQ5NkEwQkUzOEYKKzoxMEY2RjAwMDQyQjNDQUQxQ0Y0RDY2M0VERTY2MTg1NUU5NzFDQTk3NEUKKzoxMEY3MDAwMDNFNkNDNEFERTVGMEIwQURCQzY2Njk1QjNDQ0VGMDc2NTYKKzoxMEY3MTAwMDI3NDQwNzRCOENCRTI1NTNBMjYxNjBGNEY3NDU5MzcxRDMKKzoxMEY3MjAwMDVDNkFEM0YwNzE3Q0E3RTc3NzA3QzFFQkFGRTBFNTU1RTIKKzoxMEY3MzAwMEQyRUY4RDg0ODUzRTEzQTRERkM0MTE3RUQzQkU1MTA0NjUKKzoxMEY3NDAwMEJGQ0EzRjJGQkJFRTM5QzZBRjRBQkUzQjQyNzY0NjExMTkKKzoxMEY3NTAwMENCOEM2M0UzNEQ4QjgxQ0VFMDkwQzMzMTQwN0RBMDg0QTAKKzoxMEY3NjAwMEQ1QkY1QkU1QzBFNDNGMDZFNzU4ODJCMzJFM0EzRDA3QkMKKzoxMEY3NzAwMDlDNzEyQjlDMjYxQ0JEQzE2REMyOTE5QjRGRjlGODRFMEMKKzoxMEY3ODAwMDdFQUFCRDY0RUM2RkM3MzMxNkY3NzVCODIyNjhFN0Y1M0IKKzoxMEY3OTAwMDQxM0MzMTNEMDAxRkRFNjZCOEQ4RjczRTUzMTlFRTc1ODcKKzoxMEY3QTAwMEEyREI3NDE4OUNEOTZGRDE5NDUyNDg1QUQ2RjE0RjlCNjIKKzoxMEY3QjAwMEFFODMzMTNGODZGMEY2MUQ2OTRDOUFCRTJDM0ZEMzhBNEEKKzoxMEY3QzAwMEM3QjFBMjlFOTNGRkNDRjlCOTMzRTZGNzVEREJGQzQwRUQKKzoxMEY3RDAwMDZEMEI0NzgzQkRDRjZGOUQyRjMyM0QxQUM4QUNGNzRCRTEKKzoxMEY3RTAwMDg5REJEMUI1OTNDNjdFMURGODc4RTA2MUZBQUIwMEM3MUUKKzoxMEY3RjAwMEFCNEU4RjU3RjAxNTM2MUU3NkE2MjZCMzhFNTc1OEM3RDgKKzoxMEY4MDAwMEM2RjM3RTc2Rjg3NENBQTMwOUFGMkYwM0RFREI2Q0YwNzMKKzoxMEY4MTAwMERFRTQ2MjcyOUI4NUZFOUYzNUJDQTcyQTdGN0VBNjdGQjEKKzoxMEY4MjAwMDQ5RkUyQTdCOTZCRjRGQkJCRjAyRkM5NUYxRDNCQjJBOTIKKzoxMEY4MzAwMEE0MkU2MEY4NUE3NEExMzcxOTk3RDI3QUVFRjNDNjU3RkUKKzoxMEY4NDAwMDFGMkM2MkY0NUJGNEVCNTE4NzJGOTAzMUMzRjhGQTRCMTUKKzoxMEY4NTAwMEU5RjExNzRBM0FDMTlEOEJCRjczQ0QwNzIwNjlFQkU3RTkKKzoxMEY4NjAwMEZGRDU3QzcyRTFGNUIzRDY0M0E3QUE1Rjk3RkRDMTRGRTAKKzoxMEY4NzAwMEZCQkJFNTE1OTA0NDc5NUE3RUYwNDJEQTY3MkU3RjZFMjUKKzoxMEY4ODAwMDYyM0Y2MEZEQjg1QUNGMDY4MzREQUE0MEQ4MTlDQkQxNEMKKzoxMEY4OTAwMENFQzBGRUVCNEVDRENFQjhBOTE5REE1Qjk4RDFGNTU4QTMKKzoxMEY4QTAwMDI4NEE3NkQxNzIwOUE4RkQxQTY2QjcyNTk5RkQzMkZBNjEKKzoxMEY4QjAwMEY5NkRERTk5MDFCMkFCMjg1REVFMDJCMjYzNDYzRjdGN0YKKzoxMEY4QzAwMDQwOUJDOEE2RTAxRjUyMzgxMjc5N0ZCOUNGRkM3RTY4RjIKKzoxMEY4RDAwMDMyREFCOUFCMkJEODc3QzYxQUNCODNCQzNGRjYzRDhBNTgKKzoxMEY4RTAwMEY1RjM4NkYwRUZCOUUwQ0FBQjY0RjA1OEYwRUU3MzI3OTkKKzoxMEY4RjAwMDYzRDlGNEUzOTc2NTk5RjBCMzUxRDg1RDM3QTNEREM1QkIKKzoxMEY5MDAwMDE0QjJDRkRGMTY0M0JCREE1RkVDRDZCNzRBOTlFREE2NDcKKzoxMEY5MTAwMENCRENFRTVGM0ZFNDI3NzE3NDY5QUM0MkZCOERDRDdGOTkKKzoxMEY5MjAwMEZGQTVGNzQxNjcxNUFFODM2RDg2OENFRDIzREMzNUIwRkUKKzoxMEY5MzAwMEQxQjFERTA3RDA4NkEzNzUzMzJDNEQ2NDZCQTZERjkxNjEKKzoxMEY5NDAwMEJGRDlBQzFGRDcyN0EwQkQxNkFBRTRFNTEzOTY5RDNGRUIKKzoxMEY5NTAwMDIxNjEyRDg3MTExMzcwREQzNUNCQUY1QzM2ODZDQTRCMjQKKzoxMEY5NjAwMEJDRDExN0M3QjNGMTRCOThGRTRDMzAzQzk1QTg2RDUyRjMKKzoxMEY5NzAwMDEzRDEzMzNCQkZBQ0JGQ0EzQjNEQzk2MDU4N0ZFOTFEQzMKKzoxMEY5ODAwMEU1NTc2NUMxMTNBMzIyRDFEOUNDOTdENkRCRTU2QkEzOEMKKzoxMEY5OTAwMEMwREJDRDAyOEY2MTk0NzE4QjVFRjNGMUFBREQ3QUNENkQKKzoxMEY5QTAwMDc3MjZENzZCRkVDQUI2QTU4OEU3RDI3QTg4QTA5REJEMTgKKzoxMEY5QjAwMDlFRTEyRjY2MTlERjU3NjlENzZGMjVBQTdENUU5RkQ1MTcKKzoxMEY5QzAwMDdDRUUwNEUzMEFCOTZGRUVGRTlERjI3NTI3QzQ2NjYyMTEKKzoxMEY5RDAwMEZEMTJCMThFRkIyQjkzNTJBQ0FBRjdGOTNCRTc5QjZCNjAKKzoxMEY5RTAwMERFNUYxNUY4NjRFMzJDQ0MzNkNFRTc4NTk3OTIwMDFCREEKKzoxMEY5RjAwMDY3RjRBNzNGOEVCRkRFQUUyNzRGMTVFRkQwQjBDREMwNjYKKzoxMEZBMDAwMDdEMzU5QTlBQjg2RkY2NDE1RDI0NDVGQkI5MUJDOTBGNDUKKzoxMEZBMTAwMDc3QkQ4MDFENjIxQjM1QjQ2QjEyMDA1OUY1OTk1QUUxMTAKKzoxMEZBMjAwMDRFRkJEM0YwN0ZDQThDRkM2Qzc0MzFEM0M1MkZCRjUzMEYKKzoxMEZBMzAwMDcwQzA1MjNGMjkwNzhCRkU5RUM3N0UzOTA3Q0UzOUE5NzkKKzoxMEZBNDAwMEE0REI4M0YwRjdBOTI2MUM4MTQyREJCQ0RFNkYzRTU2QTcKKzoxMEZBNTAwMDcwMDBGRDcyREFENDdDRTg2MUJDRUQ0QzhGQTY5ODdDMTYKKzoxMEZBNjAwMEREREJFQzg1MTQ5M0FGMkRDRDFBRTU3RkM4RTQwREQzMTMKKzoxMEZBNzAwMDdCOThGQzYxN0EzN0RCMkY2MkY5QzZFNjA4RTVFRjZDMEMKKzoxMEZBODAwMDFFNEJFOUVEQ0QwNjdEQkZBRDc5MzJFNUQ3MzU0NzI5NkYKKzoxMEZBOTAwMEJGQjY3OTNBRTVCQkYxRjkyMTFCQUY0NkYwMkI5QkM3MDYKKzoxMEZBQTAwMDkwOEE2NDVDNDYzRkVENjg4ODMwMzA2MTI1N0VCN0MwM0YKKzoxMEZBQjAwMDdGQjMzQ0UxNjkxOUZEOUVEMzdERTRERjA4MDhGRjg2MzIKKzoxMEZBQzAwMDlGRDE3NzMwQjYzQkE0QzA3NkM4M0RBRjA0Q0U4QkMxODIKKzoxMEZBRDAwMEYxMTU0NUU2RkU1M0I1OTJFNEM1NkZDQUNCN0EyMEJGNTcKKzoxMEZBRTAwMDhBMkZDMkQ2MkRBNjcyRDU4MkJBNDJFNDc3NUY4NDdGNzAKKzoxMEZBRjAwMDBGNTRBQTQ5NzRDMTA0ODE2MEM0MEQ3QzcyN0IzOTk1OEUKKzoxMEZCMDAwMEE3N0NDM0E5MEIxNUZCMUIyMUY4QTMzNTIwNTNCRDM1REEKKzoxMEZCMTAwMDNCNzg3RjRFM0UxOTUxQkQ0QjY2MTQwMzZGNTBFNUY1OUYKKzoxMEZCMjAwMDkyN0NCREFDMUE3NTJCN0Q2RkQ1NjQxQTc3Q0QwNkRFM0QKKzoxMEZCMzAwMERFNTdDOUY4QzZDMkI3NjE2NTEwQ0Q2MzY3RTg0MDY5OTIKKzoxMEZCNDAwMDM5MUJFRkM3QzFGRDgzMDZCMzc0MUREQkRBRTBGQTc1MUMKKzoxMEZCNTAwMEVGOUFBRDg1MzMyRDdFMjRBRkMyRURGMzYwRERENkE5REIKKzoxMEZCNjAwMDE1QUMxRTFCRDZDMDcxOTUzNUZFRTRENjcyQTI4NzgyRjUKKzoxMEZCNzAwMEYwOURFNUUzRjAwN0JEN0NERTRBMDMyNDcxNUQzMkNCRTYKKzoxMEZCODAwMENGMkVFMDMwMDRCNTg4MTFBREIyN0MxNzhBMjdBODI3QTQKKzoxMEZCOTAwMDk3RjlCMTVEMkI0NEI2RUFFOUYyNEFCMzlENjE2RjU3MUMKKzoxMEZCQTAwMDY5QjY4QkI3RUZBNzc2NEI1ODNCNDg5NzBGMkIxMEYwRjEKKzoxMEZCQjAwMEMwNDg1QkJCNjEyNjlDQjA0Q0E2NzY3MTdCQkJBMUEyMDIKKzoxMEZCQzAwMDlEMzlGRjYxREIzQTI0QUI5QzBEREREMDI5NzFCOUIxQzEKKzoxMEZCRDAwMEQzMjUxN0ZGOEMwMDIxQjdGQkUzRDI0OUM0NDczQkNGQTUKKzoxMEZCRTAwMDRCOTJCN0Y1MjQyM0Q1RDkzQkVDNzIzRDJDRTk5MEYzMjkKKzoxMEZCRjAwMDBENkU5QjFGM0Q4QUIyQ0JFOEIxNTZEMDZCNTM1Mzc2NDYKKzoxMEZDMDAwMDdBQUQ1NThGMUQ0NEZCNDREOUExREFGMDY5RDI2OUFEQjQKKzoxMEZDMTAwMDU3RDBCMUM5NEU0NzkzNEU2QjM1NDFDN0E4ODM4RTAyNkEKKzoxMEZDMjAwMEVGNkI0RDdBQ0RDODRFQUZCNTM5RThCNUQ2QTQ1N0NDRjkKKzoxMEZDMzAwMERFQ0VBNEQ3REExQ0Y0NUE2QkQyNkI1QTc2N0EzOUU5NDUKKzoxMEZDNDAwMDMxNkM1QjhDRDY5RDM0REQyMjk0RkZBQ0U4RTFENDBCQTMKKzoxMEZDNTAwMENGQzkzQTdEOTdENzFCREEwNEQ0MEZGNTJBREYyNzU1OTEKKzoxMEZDNjAwMEE2MDBGNzAzNTA1NkQ4OEJERDFBMTdGNjQ5MTNFMEJBRjEKKzoxMEZDNzAwMDcwMEJGRTZBQjFDQkVGNzVGM0ZDOTU4OUMzMTNEMDBFMDAKKzoxMEZDODAwMDBGNzVEQkUxRkIyN0EwM0Y2QzkzMjhCRjJFNzE4MkNBNjIKKzoxMEZDOTAwMDFGOTdBMzMxODVGQTRCRjJGMTFERjhGMjQ0OTNCMDgxMUUKKzoxMEZDQTAwMDgxNTRBRTZBMTc1NzMwQkUyODVGMjM0N0UyMTYzOUYwRjkKKzoxMEZDQjAwMDgwODkyNzEwRTczN0E3QzZGRjAwNUNGRjIwNzgyNzA3NTkKKzoxMEZDQzAwMDlGMTI5Q0Q3MkI4NENGMjRDRDNCMDM0RUI2QkZEQ0MwMDQKKzoxMEZDRDAwMEY2MzVBNTgyQkY0QjlCMTg5Q0YwRTlDMzA5RjU3Q0JEQTYKKzoxMEZDRTAwMEU4NUU5Rjg1OURFNDgyRUNGRDU0QUM5MTZEN0E3NjUwODAKKzoxMEZDRjAwMDhCREY5NkQ3OTcxNERBRjI2NzJDMkFCNUYxNTU1OUMzRTIKKzoxMEZEMDAwMDIwNUJCRUI0RkUyQzVCM0UzQ0EzREE5NjJGOUU3NkFFMDMKKzoxMEZEMTAwMEFEQkZBMjI5QjVCNkYyMEM3RTExRjk2RENBNEI0QjZEODEKKzoxMEZEMjAwMEZDMTIxRjVBOEJGQkI2NERBMjdDNDc2MjY4MkRFRURCOUUKKzoxMEZEMzAwMDdBMkJGRkZBNTVBQUUxNjVGODU3OEJEQ0I0RkUzMDBBM0UKKzoxMEZENDAwMDEyN0U0QzdDRTU2QjEwNzdBM0JDMTYwNTkyMTdCMTcyM0UKKzoxMEZENTAwMEJGNjZDNEM5MUZBMDE5ODA3Njg0QUNDNTI4RUYwQURCMzIKKzoxMEZENjAwMEQ3QTdBRkExQTFDNEY4RjRFQkVCNTRFOEE1N0ZFM0UzNzgKKzoxMEZENzAwMEY0REZEQkJDOUNGQzYyQUVFRjRBMTE1RjRGRDdCMUVEMDQKKzoxMEZEODAwMDkyODRFNzIyNEMzRkUyM0FFRTYyNjY4RTJGODQ3QzIxMTkKKzoxMEZEOTAwMEY4ODdGMTMzRUExNTREOTU4NEZDOUU5RTlDMEQ2Q0I1NTkKKzoxMEZEQTAwMEVCOUIwMTcxN0JCRUZGNjJGQjdDNEU5NUJGM0YyRkY5NDEKKzoxMEZEQjAwMEVEMEQ3RjZCMjExMjU3NEUwMTdGMTE1NTEyRTdENUE3MkMKKzoxMEZEQzAwMDI3RkZFMTE5NzZGQzE0NEY3MzNCRTRDNEExQ0YzRjY3RDIKKzoxMEZERDAwMEZDQjU5OEVCMDU2OEI1QjhGRTA2NUFCODBGRTVERTM1RjgKKzoxMEZERTAwMEZCQjU1ODE2RkM5OUZDQjJBRUFFREE2RkI1NDMyMDYyOTMKKzoxMEZERjAwMDk5RDdBMEY0Mzg5NDU3QjJFNUJGNjg3QzkyOUM0MEY2M0UKKzoxMEZFMDAwMEYxNUMzNkZGNzJCNDYzNzJDQzVGRDA3QkVERjhGREJFNUYKKzoxMEZFMTAwMDdGQTVGOUE3RTlGQzgzRDM2QTFGRUU4NkI3NENBM0ZENDMKKzoxMEZFMjAwMDlBOTk3N0VDQ0IzMkRCQzdCOUJFODlGOTY0QUI5RTY0OTMKKzoxMEZFMzAwMDNGOTUyQUUzQjMxMEY4MjM4OEU3Rjc3REExRTE5MENGM0YKKzoxMEZFNDAwMEY2ODc1RTlFN0VENkZCQjY3QkVCRjg3RTI2RkU3MjVFNjQKKzoxMEZFNTAwMDcyMDhFMjUzQzQ3MURDRjJGMjk3OTI0NEY3RjEzMkRDOUIKKzoxMEZFNjAwMDgxRTU1NTMyOTVERkUwMEY2RDQ1QjhCRUE5QzQ2RTUwRUYKKzoxMEZFNzAwMEZCMjJCQzY3MjRGMUJDMThENDRFNkRFQTk3MkNGMzE0MTYKKzoxMEZFODAwMDc2OTEzOUZGNUNGNkQxQjI5NkVCRUNFQjE5NENBQkI1NDEKKzoxMEZFOTAwMEYyRTM5RDJEMkJBOTlDRDkxRDJEMkFEMUVCOEI2MjFGM0UKKzoxMEZFQTAwMEU1ODQ3M0EzRkEwNUI2OEZDQ0YzMDE2N0ZCN0YxNUZCREUKKzoxMEZFQjAwMEU4QTBEQUIwQ0M2RTFGRURFMTc0MTBFNUNGQjVFQ0E5ODcKKzoxMEZFQzAwMDNEOTU3MkQzM0VGMjA3REM2MjFGRUZCMDVGMkE5OTdENDkKKzoxMEZFRDAwMDg0RTc0NzAxNjFCRjU0MjZDOTVFRjE1NTI2QjlGRDUyM0EKKzoxMEZFRTAwMDY5REEzM0Y2RjVFQTFBMzQ0MEM3QTRFREEzMUVGQTM3RUYKKzoxMEZFRjAwMDNFNEVGRkJEQ0QyQkQ3RkFFRTBCOThGNjUxMUJCNzhGQjgKKzoxMEZGMDAwMDE4RUUzMUNFNDRBOUU0N0UwRUM1QjFCRThGNzZFNTU4MTkKKzoxMEZGMTAwMERGRkZEN0Q4NDdEOUU1QjczN0ZDQUQ4NTM2NkUxRkY1N0IKKzoxMEZGMjAwMDgyQkY2OUI5RjBGNzJGNkUxRkVENTBFMUZGMzNGQjI4NTgKKzoxMEZGMzAwMDE3OUZGQ0VGQjY4RkQyNzRGRTc0RUMxQ0E3NUQ2M0RBREEKKzoxMEZGNDAwMDExOUZCNTdENjNEQTI3Q0M4RUE5NTQ1MTZFOTk5RDg1OUEKKzoxMEZGNTAwMDc2Q0NGQjcyQkJGNzBFMzY5RjFCOTQ0RTJGMkU4QUI3QzIKKzoxMEZGNjAwMDBBNzk1REFDNDZEN0I5NjhGREVFMjQ3RkZGMDZENEU3NzkKKzoxMEZGNzAwMDdEODU5RUM1RjYwMTExOUZBNzQ2MDBFRDlEQzU2QTZDNjMKKzoxMEZGODAwMDgzQ0I3MjBFQTEwNDNBQjU1OEUwOEI4NzA3NjZFN0Q5OTgKKzoxMEZGOTAwMEU3MkZGMDYyRTI2MUI3QUI0MEQwQkJFOTlDMjg5RkQ3NjYKKzoxMEZGQTAwMEEzODQwN0U4RTQ3NjhDREFFOUM1RjQ0OUIxQkVERDlCQTkKKzoxMEZGQjAwMDgxMEYyMEJCNTExOUFCMjc1MTFGQjBGNjRGQkFGQURBQTcKKzoxMEZGQzAwMEYwRTJCNUUxODVBRDQzN0MzQzUwQTIzNkJCOTFBN0ZFODMKKzoxMEZGRDAwMEQxOUE4NEZFNzI5NkVENDBGRUE1RjM3MjFERkRDMjZEQUUKKzoxMEZGRTAwMDkzODczMkY4RkJDNDU2NUM4M0YxOThDMTk3MkY3RTAzNDgKKzoxMEZGRjAwMEUzMUFGQjc0Q0VBNEY4QzY5NkFBRUE4M0I1QUM1RTdFN0IKKzowMjAwMDAwMjIwMDBEQworOjEwMDAwMDAwNDRCQjc0OTI4RUVCMkE5MDVGNzExNTc2NDZFQjI2MjRFMgorOjEwMDAxMDAwMjYwNEM0Mzk0RTI5QzA2Rjk2OUYxMEVCQTYwMTc2QkIwQgorOjEwMDAyMDAwNUNENjU1RDM5RjM0MjhCN0JDQjAxRkU5QTQyN0IzN0Q1NQorOjEwMDAzMDAwMkVGOTcwNTlFNTlBRTRGM0RBNTM5MzRGQTFGN0UzRUMwNAorOjEwMDA0MDAwMUZFQThCMDI0NzNGRjk4NjdENUQwODgyMjVDRkNBM0ZCNAorOjEwMDA1MDAwMTA3Q0NDMkM5NENGNjUzQzBENkVGNUVBOEMzRjVDMTU4MgorOjEwMDA2MDAwQjI4NkYxOTFGOUEwMTUyMEZGRjlFQjU0NDhBMUZGQTU0NAorOjEwMDA3MDAwRTg1ODFDNURCMEJERDFBNTA1RkRFODdDM0YwQTk3NUE0NAorOjEwMDA4MDAwRjYxMzQxMzc5N0Q3RjBBQzk2RjIxNUFDREYxM0EzNzk4RQorOjEwMDA5MDAwRkM3RDFGOERGRDU3OUQzOTlGRDU0MkJFQkFGMzU1NUI0MAorOjEwMDBBMDAwRTlEQzM0QzFGODY5MTBERkRGRDAzRDgyNTUxNUJCMzQ3RgorOjEwMDBCMDAwQUI5RTFFRTE5NjZDRjcwODJDRkIzNjVEQUQxMUY2MzQ1NQorOjEwMDBDMDAwQzM4RjUyMjExQjY4MDc3QzUyRkU1MDNFMjY3RkU0NERCMQorOjEwMDBEMDAwQjFEQjA5QTc0QkFGRjFFMjVFQzVBOUYyQzcyNzFEQ0Y3RgorOjEwMDBFMDAwQTQ2QkE2NUMyRDE1NzRBREY3QTJEREJGMjIzQ0I1Qzc4RAorOjEwMDBGMDAwNzNENDRDQkFERTRBNzRGNTU3ODA5MUNDRDJGRjA0Qjc2MgorOjEwMDEwMDAwOTQzNTdFRDZCOTNGNzJEQUVCNEFCRjlBRTk1QjdBQTJBMAorOjEwMDExMDAwNUI5MUQzQUVFNUZERkExNjJCRkE1RjUxNzlBOTFBQURDMgorOjEwMDEyMDAwMDM1RUQxREYyQUZERDYzOEVBQ0YxM0E4MTMxOTNFOTQxNworOjEwMDEzMDAwQjY5MTI5NzFGRTE4RDlDRUFCNTBGQzg3NEYzNzQ4OUYzNgorOjEwMDE0MDAwRDI3OTc3NEQxQTNFNzc5OTdEQkZBNjE2RjlFRDc2RTEwMworOjEwMDE1MDAwRjRCODY0ODVERkI3RDg0RDcwNzg3MTNDRDREMzFBRDAyOQorOjEwMDE2MDAwQjlBNzFBRTBGRUJEOENGREEzQzM2RTU4NTk1NjlEMzU0NAorOjEwMDE3MDAwQ0U0MEZEQjRGNkFCRDNFQ0YwOUU3MkJCODBBQUZGREQ5RgorOjEwMDE4MDAwNkM5MzQ1NEZBN0RCQTlGMDc3OEIzREI1MDZGOURENDJBRgorOjEwMDE5MDAwRkYxNTJFRDgyM0IxNzUzODExQkUwQzYyM0FDQjYzNTFDRQorOjEwMDFBMDAwMDk0MDJCQTZFMzkwMEZBQkI5N0RCNzQzQTJGMzYwMTJEMQorOjEwMDFCMDAwNjkxREZGRTNFNzQ0NTdCODc1RUE0N0Y2QzYwODRGNEE5QQorOjEwMDFDMDAwQzAwMEFBQUY5RkRBMzlEMkZCMDM3OERDRDIyMDA5NkNEOQorOjEwMDFEMDAwRjUxRjc0QkJBOTVDODUyODYwOUNFMkZCQUY1QzE0QTY4QworOjEwMDFFMDAwN0UwREY2QTkyNjBEODdCM0RGMkJEQ0IxMDdEREQ4NEVENworOjEwMDFGMDAwRTNGMDYwMDM1QUM3Qzc3MkJGNDBEOENCREJCRDNGNzM4MworOjEwMDIwMDAwMkFDNTcxRTU4MjZGNDMzMzNGNUZFRkNFOEJCODJDNjgxMAorOjEwMDIxMDAwM0RCNUI4QUVGN0Q5OTgxRDU1QzRGRjdFRENENzQyMUI1QgorOjEwMDIyMDAwQjc4NzA2MEE5QTZENTk1MjQ4REZCN0I0RjQyQ0U3NzdCRQorOjEwMDIzMDAwMDkzOURGOENGNjkxODdFRTU1RDhFNDdFOUI4ODM3REI1MQorOjEwMDI0MDAwMkU4MUVEOUVDNTEwMEY4RkNGN0E0QkM4RkQxNjZGREM0NworOjEwMDI1MDAwNDdGNzE1OUU1OUU1MUI4QUYxMkU4Nzk0ODg4RkUxQTFGNworOjEwMDI2MDAwRTIyQUEzMzBENjAzMUU4NkI0RDlFNUVENzRFMzNCNUVFMworOjEwMDI3MDAwNzY2NzhGRUZDOEQ1REU4Q0VCRjhBNDc4MjFEQkFDMTQ2MQorOjEwMDI4MDAwRjEzMDNCNDFGQjk2RDQwNTI0OUYyNTgyNkY0QUQ4RkU2RQorOjEwMDI5MDAwMDVGNUQwQzAzODI0NzVBQ0ZCRTE0OUIwRjIwN0ZCRDlCNQorOjEwMDJBMDAwOEY3RThBRDI3QTM2MTZEMjJCMjZEM0I5NzRFOUVERUUzOAorOjEwMDJCMDAwQTQ0Q0YyQUVERDg0RURDMzg3MTQxRTZCMDg0NjYwNjY2NQorOjEwMDJDMDAwMERCMTJBQjUwRjJCQ0Y0RDQwNTExQjJDRUMzMzU4NjM4OQorOjEwMDJEMDAwQkY3NzUxQjZDNDdFNUZBQUQ0NzE0RjIyOENGNjVEMDhGOQorOjEwMDJFMDAwRkRBRTk2N0FFNTlGOUMxRTIxMEZBM0M3RDk5RjNGM0Q4NworOjEwMDJGMDAwQjZBOTg2NUZCM0I0QUY5MDIwREE5RUE1QkYwQTBGQjc0OAorOjEwMDMwMDAwM0IyQUQ2QURFNzcxNjBGNTAxNzhENUIyNUZEQzJFMTlENgorOjEwMDMxMDAwODVCODE4NkM2RURCQkExNENGRDlFMkY1MTAxOUMyRjBBQgorOjEwMDMyMDAwRERCRjAxNjQyQjFGOEZGMkU0NTEzRjJFMzBFMjY3MzJCNAorOjEwMDMzMDAwQkMyREZGRjY2NTlENEYyMTVEQzc4MzREOEY2NUQxMUY5NQorOjEwMDM0MDAwQTMzQzRDNUU1QzQ1NUM3RjZDNkI5QkNBRDMwRjE1NUExQgorOjEwMDM1MDAwM0ZDMjRCMjBCOThDODE1ODE3OEIyRDc1MjFGREU3MDJDOAorOjEwMDM2MDAwQzVBMTg3RUI5QkY2NjE3Qzc1NDkwMzQ0NzAxOEM2NTc5RAorOjEwMDM3MDAwQzQ1RkUxRTk5MDM0ODg1RkUwNTA5OEYxQzcwMDNFMTUxMgorOjEwMDM4MDAwMTg4MDdDODFFQkNGMjI0RTVGOTMyRjRBMUJFQ0Y3NkREOAorOjEwMDM5MDAwQzJGNUY2N0NCMUIwRkI4QjlERjdCNzFDRkQ5NEU4RkM3MQorOjEwMDNBMDAwMUU5NEJFNDQwNkJDRjcwN0QzRUNGNzZEQzJEMDc5RkZBQworOjEwMDNCMDAwOEYxMEJFMDM4MTQ4MEFGOTM1RUUxOEM3RDFCRjBBQjFDNAorOjEwMDNDMDAwQ0IzQzBDOUY4RjdEN0ZDQTJGQ0Y2NEY1N0ZCOEE0QjYzRQorOjEwMDNEMDAwMEZFMjY1OEIzNzlBNEZGNzhBNUFCM0M3OUQ2NUYwQUIyQQorOjEwMDNFMDAwNjk3N0U0QTg5RkQ2QTM3MTVCNUNCMzMzNUQzMUE0Rjg1MQorOjEwMDNGMDAwQkE1OTBDOEU1NTQxMDM0OEFGQzVBRjIwRkRBRTA4Rjk4MAorOjEwMDQwMDAwN0RBNkU0MzIyRkM2OTMyRTBGNTQ1MzdDRDgzRUNDQjMzNgorOjEwMDQxMDAwNzQ3OTc4NjgzRjZCQkM5ODIyRTI3N0NEN0M0MkU4NTNEMAorOjEwMDQyMDAwRTc3OEQ3N0JCODFFRkQzQjE4RDcyMzFFNDY3QTYyNjE1QQorOjEwMDQzMDAwOUNCNzJCNUNGQ0U4NEM5RENFMEI4RDY0OTY3NjczM0M5MAorOjEwMDQ0MDAwN0U2RTVGRUFFQTNGQURGODY3MEJCODQ2NzIwODcwNUFGNQorOjEwMDQ1MDAwRkU4NTU5OUU1ODJCRjI2N0JDOTY2RDI3OTBGRjA3NDE4OQorOjEwMDQ2MDAwMzI4MUY0NkY2QTEzN0VGN0VFN0EzNzhCN0E3MUJDNzczQworOjEwMDQ3MDAwRDk1RDJGRDYwNkQ2N0QyN0FCNzcyQkNFODdENTMzNkNBQgorOjEwMDQ4MDAwRjVBMjE5RjVFRTE0RjVDMDM2QUU5MTMxRUUyNjEzM0UwNQorOjEwMDQ5MDAwQjBGNjE3QzlFODZGOEJFODhGRUNDMUVFN0E3QTQ2N0YyOQorOjEwMDRBMDAwRjc4OUZFMEM1QjNEMkRBM0RFODMyNjdDQjY3MUMxM0UzMQorOjEwMDRCMDAwNkU3N0Y5NTlFRTY0ODJGNDM2OEZBN0RGM0Y2NDEyRjE0QworOjEwMDRDMDAwQ0I4MTIxOTMyNkNGNjJFMzVDRjcwQjk3RDAxMTU3RDJGMworOjEwMDREMDAwQkE2REYyRDUzRTUxQUYwNUY5QUE4QUUyRjA1QTFCRjA4NworOjEwMDRFMDAwMUVCMEI4Mjc5QzA4NENGNUM2MkNERkJCRjkyQTMwNTU0NgorOjEwMDRGMDAwQ0JGRTdEOTZBREJFREFFQTAzNjMxNDdEQTdGQTJEMUYwRAorOjEwMDUwMDAwMjkzQ0JFMzk1RTUwODdGRUI4OTU0NUIyODg3N0ZFNUJDMAorOjEwMDUxMDAwQzI1MDk5MUVFQkFCREFGMkFENjE1RTNFRENGQkI3NDQzNAorOjEwMDUyMDAwMUNFRjE0ODk3QjMwNEM1NzNFNTk2NTkxRUZFRUYxM0YzQgorOjEwMDUzMDAwMkZGOEM1Nzk0NjFBRkU3NzEzNDY4NTE1N0U5RTM3RTE1QQorOjEwMDU0MDAwMzdGM0RFMTI1RTVFRERGQUVFNDRCQzU4NjVERTAzMTg1QQorOjEwMDU1MDAwRENEQUE3ODVGQzE3NUZEOEY5NDkyREY2RjlGMTdDN0EyQQorOjEwMDU2MDAwN0UzQzZGQ0U2Rjc0QUI1NEY3QUYzNUJGRkMxNjNCRkZDQworOjEwMDU3MDAwRjE3QzdBN0UzQzZGQ0VBRkE2MzVGRkI0RTZFN0FDODc2MAorOjEwMDU4MDAwRjc5NTUwQ0ZBRjFBNzI1RjE4RDc5RDU1Qjg5MEIyN0VDRAorOjEwMDU5MDAwQzdCNkJFOTA1OENBRjIzN0Y1MzVFRDZEOURGNEZCNDhFRAorOjEwMDVBMDAwMzBDRUYyOEVFOUJERERBRjMwRjhBRDJGQzZBREYyRjMzRgorOjEwMDVCMDAwNjAxOEUyMTZFN0MxNkQ2MUY0NzNCRUU2RDE0NDFDMURGQworOjEwMDVDMDAwODc1M0YxREFGMzAzMzFERjM3OUQ2N0JGRkMxM0Q3NjEzRgorOjEwMDVEMDAwMEM1M0U0RkI0OTg3OUVFRjY1NUQ1QjVFQzJENzkzMTVDNAorOjEwMDVFMDAwQzE4ODZDNUREN0NDMzhFODY3RkFENjkwRkU0OTY4NUM2NAorOjEwMDVGMDAwRkZFQ0VCMkJGNDUxMTE1QkQ3QjgzRjhGRUFCQjg0QkUwNQorOjEwMDYwMDAwQkFCNTk5QkYxN0QwMjZFRUMzMjY4QUFBMDkzRjZERTY3MAorOjEwMDYxMDAwN0REOEY4MjQ5QjdFREIzRjYxRDI0MUY0NUYxRDNGQzQ0RgorOjEwMDYyMDAwREY4OTc4QzJDQkQ3QkRFNUNERDBDRURGM0RGMEQyQkRERQorOjEwMDYzMDAwRUVBNzU5QkYzMTU2NjEyRkIzRjczMEZEMjlCM0Y3MzAxQworOjEwMDY0MDAwREREMzFDQTZGNDI3Q0QzQUE1QkJEOEI4OTgzRURDMUM1OAorOjEwMDY1MDAwODExODFCN0Y2N0YzNTg0QUVGMTRGQkFCREI4NURGRjc4QworOjEwMDY2MDAwQ0I0NTMyRjkyREI2MzQzMzRCRDk4NUZFNUYyRkE1RjczNAorOjEwMDY3MDAwMzQ2QjZCRDQyMUU4RkYwRDUzRkVCODM0NzU4RTk3RjZCQQorOjEwMDY4MDAwQUY5RDg5N0MwNkU3NjNCRkFCQTA3QkUyRTM4QjU0NUE0NgorOjEwMDY5MDAwN0Y0MTREMjlGOUEzRDNERjREQkMxRTk3NkExQkIwREQwNgorOjEwMDZBMDAwQjk2MTk5RDdGMzI2MTNBMUVDRjVBRUMxN0E2M0MzMkFEOQorOjEwMDZCMDAwQzEwMzgxQjgxMjJBQ0E1QUVGN0JDODVGMzUwMUQxOUZBNgorOjEwMDZDMDAwMTY0QjA0QjNGNzc3MjNGNjU3MUQxMEZEMTVFOTg5NDA0MworOjEwMDZEMDAwRjZGRUUyRDhERjcwOERFMzAxQzI5RENCRjJCMkQ3NUJBQworOjEwMDZFMDAwOEVGNUFBMzQzMURGQjI5NDlDOTc3RERDOUJCMDVFNjFCRAorOjEwMDZGMDAwNjExQkREREZCOTYwMDY5MDNERUEyQUQyQjc5MENGNDI5OAorOjEwMDcwMDAwRDQ0QkY2OEQ4MkNDRjhCQ0IwNEY1QjEzRDYzQjNGMTY3MgorOjEwMDcxMDAwODE0MTZDN0MzRDE0MDE5OUYxQjMyQkMwQ0FBQkYwMkUyMgorOjEwMDcyMDAwMzlFQjg3QTVFNzRENjNFNUFDNUUxMkNCQkY2NDI5QzcwMworOjEwMDczMDAwRjYyQzFEMzc1REI0Q0ZCNzk3OUJFM0I5NUFBMUZCRkVFQQorOjEwMDc0MDAwMzQ1RTFBNzdCNUQ4RjMwNTMyOTdDRjA3NUFBRkE4NDM2RQorOjEwMDc1MDAwQjkyRjEwRTc0RkJGQzYzQzFCRDdCNTA0NEM3REM0RUI4NworOjEwMDc2MDAwRkI3OUY5NTM2NkZEMTAyRjdGNDVFNDBCMEJGOUJDN0QzNworOjEwMDc3MDAwOTNCQzE0MkY3Q0NGRjU0MzRCNjY1NUE1RTczQkUwN0IzQworOjEwMDc4MDAwOTVDMzY2NTlFNjc3Q0ZGN0NFMkQ5OTE1NDhDRjY3QzA0OAorOjEwMDc5MDAwMERFMzg3Q0RFQTYxREZEMzY3QjJEQ0ZEMjYwOUVBQUQ2MAorOjEwMDdBMDAwODJCNjJBRDI5RjIzM0Q1MUIyMEY0N0Y2QUIzMTUwOUVGRAorOjEwMDdCMDAwOTUzNTFDQUVCN0JERTUyRENCNTQ4MjJCNEVGNzM0MDVENQorOjEwMDdDMDAwNUM3NzJGQjBDM0Q1N0ZBMTFEQUVCQjE3REFFMUVBREY5RQorOjEwMDdEMDAwRDgzMzVDNEY3OEI5NUVDQjA1MUYxQkRGQjA4RUJGRjlGNQorOjEwMDdFMDAwREZFREUzOUZGMTdERkJGODlCQkY2RjFGRkY4QzFCM0Y4RAorOjEwMDdGMDAwRjFGODI5MkI1RDM2NUQ2MzFGQkZFQzVBRkJGODlCQUUwOQorOjEwMDgwMDAwQjU4RjVGNzZERDI3MUJGRkQzQjJDN0NGRjdDNkZFRTlGMgorOjEwMDgxMDAwMTVGNkFFNjJCNTNCOUI2MjM2RkI5NEQ1M0IyOUVBRjFGNworOjEwMDgyMDAwNzNGNDZFN0IzQzY2QjM0RjU5M0RENTI3RUM1RDVCQkRFMQorOjEwMDgzMDAwNjg0NjNEOUY0RkQ4QkJCNjcxOEQ4QzcxNDNBMkJGOTQ2MworOjEwMDg0MDAwNkNFRDJGOTJEMTVGMUY1MThGRUVBREE0RURGMThDRkVCOAorOjEwMDg1MDAwQzI2MjVDQzM1NjRGQ0JBODM3QzA4NENGMzYyRUQ4QzdGMAorOjEwMDg2MDAwMDUxMTA3NzYwM0M2ODE0OTQyREU1OUZEQzUzM0Q4M0VERQorOjEwMDg3MDAwQkIxQ0Y3QTE1MTA5RjdGQjVBMUYxODc5ODA3RDg3QzE2RQorOjEwMDg4MDAwRkNEREEzODI0OThCMDdFMjdBMkU0RDVBN0MyNkFFN0Y4RgorOjEwMDg5MDAwQUQwNTYwREJCNzRERjI3MTNGQzIxODlGNDJBOTk2MDdDNAorOjEwMDhBMDAwNERFNEJGRjMzNjk1NUM2QUI5RjdCQTU5RDRFQjJFMEYxNQorOjEwMDhCMDAwMzQ5NTdDQzM1MjdFOTE2OERGMkFFRTBERDZGOTdFNEJDQgorOjEwMDhDMDAwRjY4OEQ2OUZENUNGRTIzN0JCRDhFQzRGOTQ0MzUxQTRERQorOjEwMDhEMDAwQzM2MDcwREY3OUM1RDQzMTU2RkRCQ0Q5RTdBMkY5NkI4RQorOjEwMDhFMDAwMDNDNUI4NjVEOUUxNkEyREU3RTNERTgzRTMwNkYwQkIxMworOjEwMDhGMDAwNjk3RjM0OTUxMEJFMzU5RTlBREY2RjBGQ0U5NkZFOEFDMworOjEwMDkwMDAwNThEREU2QTU3NUREMkRENkY1MDI3N0QzOEZDQTE5MUMwMworOjEwMDkxMDAwODkwMTMyRTBGRDg2OTU2NTNERkI3MzVBOUFFREU3MEI0MAorOjEwMDkyMDAwQUExNjM1NzBERjU3M0E1N0FCNDZGMUM4RDVFRUFFQzlCNworOjEwMDkzMDAwRjJFNDZDRTcwRkY1NjIzRTJENzM2QkRCRjBCRTBFMUMyQworOjEwMDk0MDAwQjBGQjcxMTk4MzgzRjUzRUYyMTVFRTU4QkQyRjlCMUY0NgorOjEwMDk1MDAwQjdDNTZCQjM2RjBBOEE3QkJFRkY2NURFOTNFQTlFMDc1RAorOjEwMDk2MDAwRUIyODFCREQ1NkZCQzRGOUM4MjFBRkNEREUyQTI4OTQ0NQorOjEwMDk3MDAwNjlERjc5QTI4QTlGMUI0MEJDODRGQzg0REQ3ODJEQURBMQorOjEwMDk4MDAwRjU1QUM3NUZFNTE4Q0YwNzUzMEQ1QzA3NzA5OTQyNzk5OAorOjEwMDk5MDAwNzE1N0YwNzc1NUZDNDU2RDVBQjk4RUZFODMwRTNBMEZBQworOjEwMDlBMDAwMDQ3MURGQ0RFQ0I3MjUzQzk1RjZFMzI3QzQzRDU4MzVGRgorOjEwMDlCMDAwREMzNjgxRkIxRDA1N0M5QUQwNTU2MjlDRDIwRDJBQTRBMQorOjEwMDlDMDAwRkFCMEIxNURCMUQ1QkUzMTU2QkFDNUU5NUVEMEZCQUU2NQorOjEwMDlEMDAwRTRDNUY0REU1MzM5QTNCRjk0MzlGRjNCN0NEQzVGN0M3NAorOjEwMDlFMDAwOTczRUY1QjdFNTU5RTg3QjM3M0E4QjJERkQ5NjdFRTBDQgorOjEwMDlGMDAwODZENEE4RENGNUQzRjUzODVDREQ3QzFCNjZGQzhBRjI3NgorOjEwMEEwMDAwQUYwQkJFNzUxQjNGRjQ2NThCQjczMEY1ODMzODA3OUY3RQorOjEwMEExMDAwMzUxNkM0OEY3RUY5OUZEODNDQUUzRUU4RTJFRjJFODhCMworOjEwMEEyMDAwRkIzNkU2RjlEMEQ1QzI2RjNBNEJGODVERUIyMTFBQzIxRQorOjEwMEEzMDAwQzJCNzQxQTY3QjQ5NkZDM0VGNDJBMzJDRjQ3RkQyRTczNAorOjEwMEE0MDAwRTY3MEI1QkFDOERGNjU5RUZCNUVENUU2QjJGOUMzRTZDRgorOjEwMEE1MDAwNkNCMEU3NjdDM0Q0NjJENDVCQjNEN0JCQzhCRjc2QjUwRAorOjEwMEE2MDAwQzM0RkZCQTA5OEVGMUM2ODVBODE3NkJDNzk2RjdCOTZDOAorOjEwMEE3MDAwMDYyQUJFQ0JCM0UwRjE3QjZBRjA3RUQ0N0UxRkJGQkZGNworOjEwMEE4MDAwRjcyNkUzMUJERDIyNkZGMzAyNDkzN0RFMDM3ODc1RjdBMworOjEwMEE5MDAwQThDQkNFMDM2QzlGNUM1MThBRkFCNjAwQjJCRUZCRjZCRgorOjEwMEFBMDAwREQ1NjNCN0NCREMxRUY4NDE3NjA1OThGNzBBODNCQTQxNQorOjEwMEFCMDAwQUNGRUFEMEU5Rjc5NEVDQ0U5OTUyQkNFQzM4Q0JCMzhFNgorOjEwMEFDMDAwMkVGOEE4REIwRkYzRTczQ0UxODdFMUYxMTdCREI1N0YxNgorOjEwMEFEMDAwQkY5N0Y2MEJCQzlENkU5NDlGNDZCNTY5QjIyNEE3Q0YxNQorOjEwMEFFMDAwQTczQ0FFOThEMTlGQ0REM0I1Njc0MkFBM0ZEOEVBQjUwRgorOjEwMEFGMDAwRjY1Q0VGRDgyNDIwN0REOTE0NDUzRTMyRUIyRDA0NTYwOAorOjEwMEIwMDAwMEZFNTcyRUZBNTcxNUJCRDBBNTY2RjcwRUU3QTVENDIxQworOjEwMEIxMDAwQUZGRTdDRTdCRDZFRjQ0N0JFRkRDMEUxNEI1MDJFRTc1MworOjEwMEIyMDAwM0ZBOTgwOTc4RERCQjUzMzA4MjlEQUM3MjZEREI4OUY0QQorOjEwMEIzMDAwOUJCNzVCQzk3QTlFNEIxMTAzQUNGRkY5M0YwRUQyN0E4QgorOjEwMEI0MDAwMzk2Rjk3MjczOTg1QjU5RkY3OTM1Nzg3MDNDMzQzRDdFNQorOjEwMEI1MDAwQjI2M0NGRjZDNzc1RjcwMTg5OUZBQkM2M0I4N0UzQkE4RgorOjEwMEI2MDAwMzY0Rjg1RUY0NEIzRjREN0Q3Q0ZGOUYwQzgxMzc5RDMxNAorOjEwMEI3MDAwOTFDRUQyOEU3RDU3NTJCRkVEOTdCQjNDMTY3RDExRjBDMgorOjEwMEI4MDAwQkJDQzdBREMxRjc3QkY5NDFDOTI0NTlGOThFNzYwNDdFNworOjEwMEI5MDAwRUU5NzM4N0M3QjVDNDkxRkMyQjc2MzhCM0JDNkUwNjgyRAorOjEwMEJBMDAwRENGMTBFRjFENUM0MUYzRjE0NDIzQzM0RUU1MTZDN0U5MworOjEwMEJCMDAwRTJDNjFENEFDQTMzOUNEMkMzMUVCQThGNkEwNEE0MUE2NQorOjEwMEJDMDAwQzQyN0Q3OEYwQjc3MkYyMEZGRjlDMkY2RDVFRjI4MjE0NgorOjEwMEJEMDAwNkM2RkU3NkY4Njk3NDgwQUYxRkE4MjEyOTk4MkY5NDc5QgorOjEwMEJFMDAwN0YxNEQyMTlBQURFRUNEODFFNDJCQ0IyN0U2N0JBRjNEQgorOjEwMEJGMDAwRjExQ0Q4RUVGN0M2RkUzRjI4Q0NFQzBGRTA5ODFCRjlBRAorOjEwMEMwMDAwQUJCMTdEMTUxRjZGRjdENzVFNDNGREQyRTg5MEEzMzdEOAorOjEwMEMxMDAwRjE5NzkyQ0M3Mzk3RjNGRDhFNzNCMDFEN0Q0RUM5QkVENAorOjEwMEMyMDAwOUNGRkQwODlDRDcxMzZFRTkxNUQ2RjZEOEUzM0Y4MUJEMAorOjEwMEMzMDAwRkVGQkREQ0QzN0EyMURGNEI0NEY0MzNERDBGOEMwN0Y5RAorOjEwMEM0MDAwODZDMEIyNkU1RUVFRTdGMkQ4NzVGRjhGRUVCQjhCQzk0MQorOjEwMEM1MDAwNDdENzFGM0RCNDdFNzQzREY1REExOTNBOUI3N0Q3MjMwOQorOjEwMEM2MDAwRkZBNzU4NjdGNTE3M0Q3NTIxRjkwQjE2M0QzNkIxNUZBMworOjEwMEM3MDAwNEZFQjI3RjI2QkQyRkEyRTk5Qjg3RkFFRUY2MUUzRjQxNworOjEwMEM4MDAwNjNEOUJEMjI3NUQwRTc5OUREMEFGODE4OUM2RkJGRThEQgorOjEwMEM5MDAwQTE3QjUyOERFQ0RCRTI2QUE0RDcwMkQyQ0I5ODVGQzI3MworOjEwMENBMDAwRjBCQzcwRTdDQTc3OTRFMUQ5RjAxREVGMkZFM0E1MDNGQworOjEwMENCMDAwNjA2MjE4NDY3QTdGRTNFQkU3OEZDNkQ0NDVFNzJCOEQ1OQorOjEwMENDMDAwNzA4Q0Y0QUFCMzVERTMyMTQ2RDcxMUI5RTk3ODAyM0VFRQorOjEwMENEMDAwNzQ2M0RDNEFFM0NFNTU3Q0RDNzY0NkM3NTAyNjFEREZDNAorOjEwMENFMDAwQzY1RkM2NjVEMkYxN0IwRTNBOUU4MDg2MUZFMkY5MjA3MAorOjEwMENGMDAwRUNFRTkzRjU1Q0Q4M0MzRjVCRjBEODM3N0JCNEI3NEM1NworOjEwMEQwMDAwQkREMDFCOUVFNzRBMUNBRTVBQkZCMUMyOEZGMkI1RUJGNQorOjEwMEQxMDAwQzFGQkVFMkFFMjc0OUVDMjEwRDNGNUQwODkzM0YwNTJBMworOjEwMEQyMDAwRjdFQkFFNjM1N0EyN0UzQ0Y2OTQ0N0MzRjU3RURFNTNFNQorOjEwMEQzMDAwMkY5MEJDNzUzREY2QkM1QjI3RkIxQjAyMTJCMzM3QkE4NAorOjEwMEQ0MDAwQTBGQkE3MDNFRDhGODUxMkNGMzQ2RTBCQTYzQ0ExMzQxOAorOjEwMEQ1MDAwQkQxNjI2MkY5REFDODdFOEZCNjFGQTlFRTQ3MkIwMzA4OQorOjEwMEQ2MDAwQjk2RjlBOTQ4NTdFNEZGQkY5N0Q2RTQ4RjYyNUJDMkNCMQorOjEwMEQ3MDAwRDhGNjI3Mzc5RDgzNUJFODJBOEQ0NTdBMUU5RTg0REY0RgorOjEwMEQ4MDAwNzNEMUQzOUNCRjg2RjMzRkM3NDJENzZENUM3RTczQzlENgorOjEwMEQ5MDAwNjlENzE2OEY4QTcxMEQ0RTNBNzdCOUY4M0VBMTMxMjk3RAorOjEwMERBMDAwQkQ5MDhERUVFNjNBNzhCQUU3QUE0RjM4RTU1QkNDQkI0QQorOjEwMERCMDAwMzdGOUVFN0QzRUE3ODdBRjFEN0VEREM2MzcyNkRFOEU3NgorOjEwMERDMDAwN0M5ODVERUYxRkYyNEIwMjhFQTZDOUE1ODMzM0Q3NDFGNQorOjEwMEREMDAwMTVBMkYxRkVFNTY5Nzg4RkQwREI2NDJDN0Q0MEExRjc4OAorOjEwMERFMDAwNEU1N0I0M0Y0M0ZBREJBOTI3MTZFNkIwQjNGRjI2RjQwQgorOjEwMERGMDAwRDNDMjNERkI4NkEzM0UzQkIyRkYwOUUyQzc4NTNCMEY1MgorOjEwMEUwMDAwQkI3MTdGRjNFQzhFNDdERDlENTU2OUZFQzc3NUMxRkE1NgorOjEwMEUxMDAwQkVDNTkxODdGNzBEMjdGRDhERkQ2N0ExQ0Y3MUQxN0ZFRAorOjEwMEUyMDAwRTM1RTdCRkY4RDNCREZCMUY1M0YzRkRFRUUyNkZGNkFFMQorOjEwMEUzMDAwMkZFM0JDQTkxQTk3RTM3Q0RGRUM3MDAxQkU5QkY0NjYzQworOjEwMEU0MDAwQkIzMjM5OUIxREY0ODI1ODE3QkJFMzZBODIzNTJGQTI0RgorOjEwMEU1MDAwN0Y1MjI5NzRFQkE4RkY1QTk2MUEyRkUwQkI4OUYxRTc1RAorOjEwMEU2MDAwNURGQ0RENEFENTc4RDFDM0U0MzM1MUUwRDY3MURGREJEOAorOjEwMEU3MDAwMTJCQzBDNzQ4QjFFNkY3M0UwNTMyQkQyMjZFMDdFNDBBNQorOjEwMEU4MDAwQUI4QjhFQjZFRUJGNENGODBCMENEOTA2RkZBMkUwRTQ5QworOjEwMEU5MDAwN0VGOERFMTVFRUUzNzQ3QzI3NTY4RDcwRkY3NTY4RDIwMAorOjEwMEVBMDAwNjRCQUY3QThDOTlBMkZFQkJBQ0RGQjQzQkYxREYyQkZCNgorOjEwMEVCMDAwNEI5MzQxQjdGMEQ3Qzg4OTk3OUQ4RDJFM0IxNTc0REJCNgorOjEwMEVDMDAwN0U2MDVEMUQzRjBGMzZFN0JGNkUwMDZDQzJDNzIzRDY0NAorOjEwMEVEMDAwNDkzQ0RFM0Y3RTMxOEYzMzM0RUQzQjcwRENGRjcyREEwQworOjEwMEVFMDAwN0I2MDE4M0FFQTIzNTI0NzNBMUZERkIwREM3MzRFQzdFMworOjEwMEVGMDAwRjE4MjJFNTMzQzczODQzNjAxMkFDNDI4MDhDMzhCNzFCNworOjEwMEYwMDAwQjY4MzcxREZENTRFNjk4MEE5Mzc0Q0M3RTcwREUyRkM4NworOjEwMEYxMDAwMERDNzI4N0ZFQkU0QkY1MERDNjM1MTVFNzQ2NDVFNUZGNQorOjEwMEYyMDAwQ0MxNzhBNzcxNDUyQjRDRjEzQ0YwNjgwOUM1NzU2RDI3MQorOjEwMEYzMDAwOTMzRTgwM0FGNTg4RDU5RkU0ODE0REI0OUY0MTc3RTY5MgorOjEwMEY0MDAwQzkzRTY5QkM5OEYxNzY2NkJGRUI3Q0UzMjU1QzhGNzA4NworOjEwMEY1MDAwOUVGREYxOUQzNjdDRTRBODk4OUYxRkYwNzkxQjk0RUZDRAorOjEwMEY2MDAwNkJFNjFERTM2MDREQUQ0NjJDQzEyNDlBMzFDOTM1MTg5RQorOjEwMEY3MDAwQ0ZGN0RCMjQ5QzVGMjlCNDUzNUEwNjFEOTQxNjdBMzVBQgorOjEwMEY4MDAwNDkyNUY4NUUyNjdGOTcwQzdGODE5Mzc5MEVGODRFQzEzNAorOjEwMEY5MDAwOEU3N0RBREYzNzI4RkE0QjMxNDZDNzg0RDhFNzZDMkRENQorOjEwMEZBMDAwQjBDNzIzN0QzQjhGRUI5OTZCRjI2NDMzRkUzOTY2REQ2RQorOjEwMEZCMDAwQjcyNUEwODE3MEUwMkJFMkNGOTM3NUNCNDE1RUVDQUEwMAorOjEwMEZDMDAwM0MwQjlGMjk4MTBFMUU1RkU2RDgyRjVGQTgyQ0ExRjM1MgorOjEwMEZEMDAwRkQ5NUUxOUVFM0JBOTY4QkY4RjA1Q0U1NkQ3REJEMzMzRgorOjEwMEZFMDAwQjcwMEMxQ0ZGRDYwOTI5N0M3NzkxQkEwNkI1NjdFQzQzNgorOjEwMEZGMDAwNTg5RTFBNkJEQ0E0NjE3QjRGQzc4NTdDQTgyMDlFRTNCQQorOjEwMTAwMDAwOTRGQTUwQUU1ODlBODc3Q0M1RThCMDVBRjA2MTEwM0EwRAorOjEwMTAxMDAwNDUyN0M3QzhGRkIxRDkxRDRCMjAxRkY2QUI4ODQ5M0NGNworOjEwMTAyMDAwOTgyODJBNzFCRjlBQTE1OEY5NDBDRTlCNTFEMjUzREMxRgorOjEwMTAzMDAwMTY0QzYzN0M2Mjg5OUJEOTJBRThBMkFBQTBGQUFCMTE1QworOjEwMTA0MDAwOUU0RDgyRkU0RUZFQjRDN0MxOUE3NjVENDBFNDNDMjJCRQorOjEwMTA1MDAwMUVFRjY3QTM3RjQ3RUY4Q0E5NDUwMThBN0YwOThDNkUzRAorOjEwMTA2MDAwQjkwNkRGNkY1NUExNDk0M0JEMUEzMEUzNUJDNDdEMEY1QworOjEwMTA3MDAwNzM1RkVEN0NGN0M1RTM4ODhGNzU4OUZEN0I0NkJDQjg0RgorOjEwMTA4MDAwNTg4RkU5N0U1QzE2QkJEOUI5MUUzRjk4OTczRENFMDlCMworOjEwMTA5MDAwQzY2NjhGNEIzNEVEQjQ4RkNCRkZFNkZFQjNDMURCRjFGOAorOjEwMTBBMDAwMkMwMUExMTkxNEQ3QTkwQUJGQzU4NDY5MUFGOURCOEZDRAorOjEwMTBCMDAwRUU5NEY4N0IxQjBFN0UzQUJBMkI3RjM4N0Y2QzQ3QTNFOQorOjEwMTBDMDAwRjdDQkYzQzQ3NzY5RTdCRTdENjg1RkI1ODRDMDI4Mjg5NQorOjEwMTBEMDAwMjRGREE3MkIwQ0ZGMkJBNDkxNUU4OUE1MEI3NkJGRjNGMworOjEwMTBFMDAwOUIyN0QxOEZCRjU3MDE3Q0Q3RUQyODlCNjMwN0NFNTMzOQorOjEwMTBGMDAwMzUwQTkwNjg3OUIwQzY0NkU3OEYzQkFGQ0M3MzRDMkU2QgorOjEwMTEwMDAwN0ZENzZBQTZGQzA1QThEREYxOUQxMkREMTc1M0UwRUM0MAorOjEwMTExMDAwM0JGMUJEQUJDNjgzMkU0OEIyRjJFM0MwRkIzREJFODlCNgorOjEwMTEyMDAwREIwRDczN0VGMTY4MEQ5MzA0RDgyMEUwQzFGNUNCQkFENgorOjEwMTEzMDAwQ0VGNDk5RUMwN0REQzIyNzYxNzM1RDg4MUIxREY4REVENAorOjEwMTE0MDAwNzNCREMwNEZERjY4QTFBRDlFMzlCRkI3NjY0RDNFNDg0NQorOjEwMTE1MDAwRkU5RjE4N0ZGRkI5REZGNDUyNUJGRjIwRkMyMzNBRkJCMAorOjEwMTE2MDAwODc3Qzk5RTE2NzkwNjM2RUEwNzUyNTlBOUYyMjNCODhFMgorOjEwMTE3MDAwRURBNzcxRkY5MTk0MjIwOEI3RDM5RkIyNzA4RjQ0RUIxMworOjEwMTE4MDAwRDlENTZDM0RDM0Y3RDhBRTRFM0FGNkEzOEU3ODJBMTM2NAorOjEwMTE5MDAwRkY0RUJFOTUwM0MyOEUwQzQwMjAwNzlFMjNBOUQxNzQzQQorOjEwMTFBMDAwM0U0QjcyNzdFRDJGMTRCMkM3QUU3RDQ4NEE1MjNDNzU2NAorOjEwMTFCMDAwRTc5OUY5NDA3ODU3QzgyRkY1MUEzNEREQzE1Njk4MzRBRAorOjEwMTFDMDAwN0YzQkYwRTcwOURCRjFFRUQzRUQ3OENGQUJCNEUzMzc0QgorOjEwMTFEMDAwMThCMUUzRDE4OUU3RkNCMTgzNkNGNUU3MkIwRDZFNjJBMgorOjEwMTFFMDAwM0U4MUVGNEFGNjBGRjFDREY0MjRDRDYzMjE5QjQ3NEFBRgorOjEwMTFGMDAwQ0ZDNEU3RENCREVCNTZBMEJGQTQ1NzNDM0FGMDc3OTZDRQorOjEwMTIwMDAwMDM3RjI3NjBFRjNFNUUwQTUxNkZCMTI1RkU1MzREOTE3QgorOjEwMTIxMDAwNUMzOUU1RDBDNDUzOTlENjMxODFCRTQ1ODJFNEE3MEUyRQorOjEwMTIyMDAwOEI0RUE0N0FERUFFRDREQkNFODVBQTNBNDI3MjY4QzY3MworOjEwMTIzMDAwMjlFNzc1QUZBQkFGQzI0OTk2NUU3N0U5ODFDM0IzMjBBQQorOjEwMTI0MDAwQjdEQ0I1Mzc3QjIzRjUyRTNDMUY4NzQ4RkQxMDNDMkZCQworOjEwMTI1MDAwRDcyOEREODRGNTQ3RjRCNERFMUEzNDlFMEIyMjFBQTY5MworOjEwMTI2MDAwQjc4ODczOTNBMzU1RkM1REE0RjZENDdCQzU2OEZGRERGNgorOjEwMTI3MDAwNTI3REVDMTJCNEZCMUJBRjgyMjhFQUZGNjQ5MEFGQkYzMworOjEwMTI4MDAwQkI0NTVBMTdFNDcxRDYzNzQ1NjUzMEQwNUZCMDU3NDkzMgorOjEwMTI5MDAwNEFFODg3RDI4QzVGNUM4MDc2REI1RTk3NEVFQjlGNzY2OAorOjEwMTJBMDAwRUMzN0ZGNDZFNUEzMzQzQ0M3Mjg5MURCNDZFMkI4QUNGNworOjEwMTJCMDAwM0VGOUZCOEZFRTdEMzVGNDVEOEI3REQ0QjVFN0I2NjFFRAorOjEwMTJDMDAwQjgzRTZEOTQ2MTZFQjY3RDQwN0Q4MDhGREY1NUY5OTc5NQorOjEwMTJEMDAwNjI2NENCMDVERTYzQjQyRjVGRDk2OUY3QjNCOTc3NzM2NgorOjEwMTJFMDAwM0ZEQ0MyM0Q5NzkyM0Q3QTYwMzY3RjhGRjNCMTIzRkM5RAorOjEwMTJGMDAwNUVFQTI0NjVDNjU3QkZDNEYyRTNGRTUzQkM2MzA0QzY2RQorOjEwMTMwMDAwOTQ5OUM1M0M5NDAzRTk5OUYwMzEzQzMzM0NBRTE3RjExNAorOjEwMTMxMDAwOUI4RDdGOTUyOTdFNzNEQ0Y5MjBBMUJDOEVGQjIzRDBBOQorOjEwMTMyMDAwM0RENEQxNERCMzY5QkQ3QTMyMzRFOTIwQTY3NTdCMjUxMQorOjEwMTMzMDAwRjIxRjM1MUVFMUVCREI5ODBFQkI5RkU4OUMzQUE2MTcyNworOjEwMTM0MDAwNThGRjM1N0JCOTdGQUJBNjkzOUYwRjlDRjNBMkJEREUwMAorOjEwMTM1MDAwQjg0RTdCRkVCQzVFRjg3NzU5NDBBQzVCMjEyODNFOURDMQorOjEwMTM2MDAwRjhEQ0JEMkU2MzU1ODA5RkE3RDFCREIyODg5QTdERkY2MgorOjEwMTM3MDAwRDUxOUU0NzYxOEMzMDdDREZGRTgzMTg4MkM2M0YzMzgxQworOjEwMTM4MDAwNUE1RjNBMDFFRjI5MUQ3RDhGOUYzNzFDRkQ1MDk5OUNCNAorOjEwMTM5MDAwNkQ3RkI1MzlDMEY5NjVBMzlCOUYxRjZGOUMxRDQ4MkVCQgorOjEwMTNBMDAwNjVGM0Q4M0Y3QkRFNDBEQzU3RkRFM0RGNjMwM0I1OUU4QQorOjEwMTNCMDAwRUMxMkE2MjI2NDVBMTM4RDdDMTg4QkYyRDFDMkVGQkJCQgorOjEwMTNDMDAwNDE1QjQ5QjZGNzkzNERCOTMwRTVDNDk0OEY5MkQ5RkU4RAorOjEwMTNEMDAwNTgzNkJGRThBMDIwREZGRkQ1Q0VBRTk0MzA3RUJCRUIwMQorOjEwMTNFMDAwNjk4OUNFOThCQTk2MzFCODdBQzA2MzFDOTZGNTQ3Nzg2OQorOjEwMTNGMDAwMUFGN0JDNEI3RTBBRUZERUVDRkVFRUE3MDMyMTlBN0ZDNAorOjEwMTQwMDAwRDdCMkY4RDJGMzE4QkVCRUM3ODQzQjhFRjJFMDZFMkI4MworOjEwMTQxMDAwQ0ZENjdGMUNENjkzRkY2QTdCODBGMzczOTc5N0VGQzM3OQorOjEwMTQyMDAwNDE2RDJCOTkxQTQ0Mzk5OTc4RjEwQTA2RTc1RDRDRkUxMworOjEwMTQzMDAwNzBGRERFRTg4QTEwRENGMTA1NDBFRkZGODFCODVGNThFRgorOjEwMTQ0MDAwNzYwOTZDQjlDOUIyNUYzQjE4OTg3MDA4RTk3RDI4QzA2RAorOjEwMTQ1MDAwRTM4RkZBQzQyMjEyQzIxREY5RThGRDEwRjY3RkY0MDNFRgorOjEwMTQ2MDAwMEZEMUFGNTRGODhCQ0M3NjQ3MDNFMjFDMkU2OEZDODY3NAorOjEwMTQ3MDAwRjg2NTZFMTEyOUM1NDgyQzE0QTkxRjA1MzA2MjBGQzNFOQorOjEwMTQ4MDAwQjc0NTdGQTdFOTE2QTc3MTBBNjM0QzA3MzI3ODBBMDNBQworOjEwMTQ5MDAwMzIzRjBGNjNGQjM0REM3RjM0ODJGOTEzQTdGRDhBMjlDNgorOjEwMTRBMDAwN0Y3OEU5NERCNUM0REQ0QjdCQTU1NDkwRTlDRkQxREUwMworOjEwMTRCMDAwNDAwQUZEMzI4NTczNjU3QzgzODdEOUEzNUVERTVGODczMgorOjEwMTRDMDAwREQ2RTQ1MEQ4Q0ZBMTc3NTAwNTA5RUVGOEY0QzdENkNDQworOjEwMTREMDAwRUFGMTk2MDJBRUZGNUFENkE5QTQxRjM3QTk5RDNFRjRBMQorOjEwMTRFMDAwNEI5NzFCN0FBRENBQzYyRDU0NzU4QUI3MTgzMDk3Q0I2NworOjEwMTRGMDAwN0JERUUwN0IwQUJBRURBMkYzMDAxRUY5NDhDOUVBMUZDMQorOjEwMTUwMDAwMzkzMzY4RTIyQkY2MEZDNEQ3RjA4M0M3RjZBMzc5MTVGOQorOjEwMTUxMDAwRjE0MTFGQTRGNzI0NjFGNzhDN0I1QkJDOEIyOEVFMTk4QgorOjEwMTUyMDAwMzQ3NkRGMjNCMEVCQTM4RDNFNjFDNzQwREJFRkYxREMwNworOjEwMTUzMDAwRkU4OUJGQUE3NDdGQTA1QkZGQ0M5RTQ0RUIyOTI4NTU4RgorOjEwMTU0MDAwQ0YyMDdGOURGNzJCQjEzRDEwRkE4N0VERjYwODJGRTdFRQorOjEwMTU1MDAwM0MxNzRCMjAxQzRFN0QzMzE2OTg1RTkyN0FENzNCNEUzQgorOjEwMTU2MDAwM0EzMzIzQkMzQjVGQzY5MDMyRUEyMDkzMzM0QjdCQTdEMAorOjEwMTU3MDAwOUVFQTE3MTRFQkFDRDA1MzI3NjA3Q0JGMEJGNTM0M0ZDOQorOjEwMTU4MDAwNTUyRjhFM0NFM0IxRjA4RkE5QTdEMkZDOTQyNEJDM0EyRQorOjEwMTU5MDAwQzc5MUMwREI5REQ3MDZBMzdFNzk0RTQxM0ZDQUQxMDlEMgorOjEwMTVBMDAwRkNFRkZDQTQ4NDFDMTVCQzk3QkMxOEY5NjFGRERFOEIxNAorOjEwMTVCMDAwN0NDOEY3QkIwRTRFRjRBMjU4NUQxQkU2RjdDRUQ0N0Q3NworOjEwMTVDMDAwRDNFMjIwRDhDNzdBQUVFQzAyQUYxRUE4NDQ3Q0M4ODQxMAorOjEwMTVEMDAwMDc0NTYzNzlDQkY4QzdEQjI0NzFFRjUyQ0Y5Rjk2RTVCRgorOjEwMTVFMDAwN0Q2QzMzQkQzNkNDRUY5NUVEM0EzODI4OUZFRjQ3NTNFRAorOjEwMTVGMDAwNDRGNzZFQkUxN0ZFMEI1MzJFNEM3RTc3RjJCNzI5MEZDMQorOjEwMTYwMDAwMDlENjRBQjZEODExOEFENDJFRjY4Rjc2M0Y0MjQyRDhGMAorOjEwMTYxMDAwMTEwOUYzRkQ5OTc4MDlEOTg3OEI4NDdEOTgwODBDNURCMQorOjEwMTYyMDAwOEQ3RkU2QTAyNTU1QUJFMUI5QzdBMkUwMjA4QUFGNUU2OQorOjEwMTYzMDAwRDQ5N0UzQ0Y4OTBGMzM2REZDODBEOThCOTYzOEY4NDY2OQorOjEwMTY0MDAwRjUxOEY5QzcxQTNGNzBEQkJFOUJGOENEODUxNzEzQkY5RAorOjEwMTY1MDAwRTcyMjdFQTU4RjhGREY3MzgyOUNDRTRFM0M3RkQyRjkyRQorOjEwMTY2MDAwOTc1RDNCMzZFQjdEQkU3Rjk1Rjk5RjA3QjEyNzNCQzk2MAorOjEwMTY3MDAwMUZDQkVGOTM5OEZDNjZFQThGOUFFQjVBMTM3OTdBNUE0QworOjEwMTY4MDAwNUY5OEY3NDE0Q0JENjNFQTk3NzMxQURBOUVDOUNCQTIwMworOjEwMTY5MDAwM0Y5QzdBMjNFMkQyQkVCQjg2RTEyRkYyQjMwMEJENzczNgorOjEwMTZBMDAwRTJENDIzRUZFMTJGMjVFNDc3QkIzQkM4RTA3REU0RDkwQQorOjEwMTZCMDAwMzc2NUY0OUIzQ0Y2NTMzNjc3NTYxRUQ5NTdDN0ZEODJFMworOjEwMTZDMDAwMURBNzc2REU2NURBQURBNkJERUFBQzY3REFBQkU2QkE5MQorOjEwMTZEMDAwNjM5RTM3RkQzQTE4N0IwMEM3OTdGNjMwNzkwQTYxN0MyNAorOjEwMTZFMDAwMkNERjI3MUYwQ0M0MUVDMkVGNzkwQzY2M0ZDNjAyNTZDMgorOjEwMTZGMDAwQTZDQUY5N0VENjJFQUZCOUU0MzNDRjIxN0ZFRDI5OTU2NgorOjEwMTcwMDAwRDZCRjM4NUJGRjg2NDg5OTcwOThFM0Q3MDdDNUJCMDIwMAorOjEwMTcxMDAwOENFQkQwQUUyOUFCMDEzRUQ4NDJGRTZFNDBEOTcwODgyQQorOjEwMTcyMDAwRTFGQThDRDc0QjcxOUVCRjEyNzZEOTczNjJCRDMxRDM2QgorOjEwMTczMDAwODM4MUU4MDE4NERGQTU0MkRDNTNGREYxRTEzNkZEOEJCNgorOjEwMTc0MDAwQkYwRTFBRkJCMTNGRUY2NDgzRTZEMTVGODMwOERBRkI3QgorOjEwMTc1MDAwRkRENTc2MjlDMkUwMjg2Q0QwQTU2RTY3OEZCOUFFQjNFRgorOjEwMTc2MDAwRkVGQTRGRDFFOUREOEZGRTc4QTcwMEVCQTM3RDk0ODVDQgorOjEwMTc3MDAwM0U3RjBFRjJCOEE2MDVERUNFNjdEMTg0NkY5Q0QyMzREMAorOjEwMTc4MDAwMzlENEMzRjk3QUZBM0Q4NDg4RjA3M0Q5RTM0MDhFM0VBOAorOjEwMTc5MDAwRjVDMjAwM0NGRjdDRTUwN0VGMDZGMTVDRUJCRkQ0NjNDQworOjEwMTdBMDAwNDE4NEYzRjUyNUJGMEZFMjdEODg1Nzk2RjBGREM3OTU3QworOjEwMTdCMDAwMEUzQkU3ODRDMERGQjQ1MEY0NDg5MEE1REY2OUZFQTg3MworOjEwMTdDMDAwQzZGNjBFQzk2MjdFM0U3Mzc1NTJDMTRENjkzN0JGQ0ZGMgorOjEwMTdEMDAwREY5MTQ3QkUzRDMzQkZBMEJEOEYyRDZGRjJFOTAyMEZGMQorOjEwMTdFMDAwOEZEQjcyQ0VCRjJBQzRFMzY4QUVERUI5QzVERDVGQzc0QQorOjEwMTdGMDAwRjE2M0ZGOERFM0JGMkVFQ0I4RDc3NzA3QzlGRjYxQzI1NQorOjEwMTgwMDAwMzM2QkU3NDgzN0UyRTFCRkY2N0FDNEI5N0Y4NzhCRTNGMQorOjEwMTgxMDAwREY5ODgyRTc3MzMxNDEwQTI3OUNDRjNFOUQ0N0ZENURFQgorOjEwMTgyMDAwNzVCQjQyNzZDNzRDMzZENjYyQzZERkIxQkQ1N0QzM0VENAorOjEwMTgzMDAwREMzOThGQUI1RUQxMjdGNTYzRjRCQjZBOTU0NEY2MkE5OQorOjEwMTg0MDAwRDY1RkMyRjgyMUI2NzgyNTlERTMzOUU3MzkzM0VFODhCMworOjEwMTg1MDAwMUYxMTc2ODUzM0NFNjRDRTVFN0VGRTVFMEZGQUVBRjEwRQorOjEwMTg2MDAwRTU1OUUyNEVGNjVFNENFNzZFNzM3QUQ5Rjc5NDg3ODRCOQorOjEwMTg3MDAwM0Q1MTAzRTc2MERDRkMwOUE4NUE1QkE1RjdCRUVGNzk5MAorOjEwMTg4MDAwQkQxOTI4ODhFQ0NENjYyRkE1NDc5QTM1OUUwQUZEMzlFQgorOjEwMTg5MDAwN0ZDRkJFNjc4OUNGRDQ4RTFBOTRGQjVEMDc1RkNERkJFNworOjEwMThBMDAwOTY5RUQ2RTM1RkRFRjJFRTMzNzdCM0ZDMjhFMDdFMUUzMQorOjEwMThCMDAwRDNERjNFNDNFMEZEMDJBMUNGRTcwODdCNjFENDA3M0RDMworOjEwMThDMDAwRUJGMzE5ODg4RkUxOTlGMDlBN0E3QzA2RkVCRDQxMEIwMworOjEwMThEMDAwMUU0Q0JERUVDNEM3RjE4MzgzRjM5MDNGRUE0MkNFRjNDMgorOjEwMThFMDAwRTY0Rjg2OTc1Q0VEMTYyOEQ5RTMxOTREMzkzQTEyRTQ5NAorOjEwMThGMDAwN0M1REJGRUREMjE1QTU2Q0ZDQzQ1M0FGOUREMUM5RjU3RAorOjEwMTkwMDAwQzQyMUQ0MTMyNjlGMDIzNEI5NTE4RTlERkM2OEYyNDkzQworOjEwMTkxMDAwMzdERkVEQkQ5OUYwNjRGMjA3OTNBQkIwMzhFNzBDRTMyNQorOjEwMTkyMDAwRkVEMEM5N0ZCREM1Mzc3NUI5M0FDRjQwQkRFMEU0QjMzRAorOjEwMTkzMDAwMkVDN0JENjgzM0JEMkNDNEZERUZGNUJBMzEwOUY3QUIzNgorOjEwMTk0MDAwNkNCOTU5QzFDRjAzQjkzRTdBNUQ2RDdCRjY0Njk0RDcyOQorOjEwMTk1MDAwNkQ1QzVFMTYzQ0ZFRDA0RjUwMEZDREZCRjFFRDIxRDRGNworOjEwMTk2MDAwNDM2RkE4NkRDNTM4NUVDM0Y2RTUyMTNDNTc3RjVEOEQ5QQorOjEwMTk3MDAwODdCMEZEMUI0OTI1NkJGQ0UzQ0U5MDY0QkVBNzYxOEI0RAorOjEwMTk4MDAwOTM4MEQ2RjgyNTI4QzdGRkQ4RUVEMkYwMUNBQzcxODcxQgorOjEwMTk5MDAwODc5RkJCRUZFNjc4NjM3OTdFREVCRTNCN0I5Q0M0QkM1MQorOjEwMTlBMDAwMUZERDVFQUNGM0I4NUI3QkJDQzQzNjE3RjkyRkQwQkYyQworOjEwMTlCMDAwODZDM0U0M0EyRkVFM0U3RjZFRUZGOTNDQkQ3MUI3ODhFNworOjEwMTlDMDAwQjNEOTdENzFENjc4MDkzMzJFQzFDOUM3OUIxQ0ZDQ0IxNgorOjEwMTlEMDAwRjA0MzdFQkYzODgzOEJEQ0VERTI5QzNDNzFGRjlEQzNGRQorOjEwMTlFMDAwMEYzM0Y4OEU2Q0ZCNTU0OEFBQjJGQUUzRjk3OUZDRjE5MworOjEwMTlGMDAwRjZFRkZFRDAyQkU3RTZERjJFQzFFRjY5N0IyMjk5MzVBQgorOjEwMUEwMDAwN0VBMkMxOTUwQUUxQkVBQTYxOEI4QkY2ODEwRDBGMjlEQQorOjEwMUExMDAwRjQ1RTFERkNEMTQzRUJGOUZDODc3RUY2ODc3MzE5N0NERAorOjEwMUEyMDAwRjMxRjcxMTU0REUxRDNBMDM4MDk5MzVFREQ3MTJDODI0RgorOjEwMUEzMDAwM0VGMzFFRkQxOTNGNUZENjQ1M0M4QkEwRDNGQzQ3RjYxNQorOjEwMUE0MDAwQjkzMTJFQzc4OUNGODlFREZCREM5RDhFMzgwOEEyNTdBRQorOjEwMUE1MDAwRkJFMTQ5NzQ5RkYwRkVGN0REQjhDRUJFRjFCNDA0RkRBMgorOjEwMUE2MDAwQ0EzM0RCQ0ZEREYyQjMxMEVBMEJDNDEzQzUwMTA4QkFFOQorOjEwMUE3MDAwRTU4RTVCNEE1REYyRDNEMTU0OEZGQzc2QkREMTcxMDlGRQorOjEwMUE4MDAwQ0FFMjE4RTJGNzg3N0ZDQUUwOThGQjkyODdFMkE3RTZFRQorOjEwMUE5MDAwM0U3QzFEQzUxOUJEQTYzNjcxQkVCRjY3NzkzMUFFQkY4QworOjEwMUFBMDAwNzM1REYxNjI4RDUyRkU3REVFRTZFQjg5MUZFNzNDN0ZCMAorOjEwMUFCMDAwN0RCMUI4OEY1NEMyRkQzREYxMTI5Q0U3NTU5QkJFNDlFNAorOjEwMUFDMDAwRjM5QzBEMzFFMkM3QjlGNzI4NTFGNEIzOUM1MDYxRjI5MQorOjEwMUFEMDAwMjM1OUU0NjY2ODNFOTc5QkQ3QjY3QUYwMzExRDc4NEQ1RQorOjEwMUFFMDAwRjgzOUUzQkY1M0M0REY4Qjc0OUU1N0YxNzc2MzRFODg5OAorOjEwMUFGMDAwRkRGNzNGNDNEREU3OEQ1RUVCN0VBQzcxREJDQTBFQTRFNAorOjEwMUIwMDAwRDM5QjAzOEM3RTFBQzUxM0E4NzE4MTM3N0E3RjVENzlDOAorOjEwMUIxMDAwRkVDMjdFNDJCRkQxN0IzN0E2MUQzNDExQkY2M0ZEMEVDRQorOjEwMUIyMDAwMTdCRDdCNjM2OTY3N0JCNzY2OTExODlGQzFFRDk3NDZDOAorOjEwMUIzMDAwQjBCNDM4QkIxRkY0OUJGOTkyMTkwN0NGRTM2RjRDM0U0QQorOjEwMUI0MDAwQ0JBNTA3QjZGMTc4OTZGNzBFNzEzRDgzNzEzOTU0REU1NworOjEwMUI1MDAwRTE0QUY1QjNDNUUzNzg2Q0VGQTJBNEUzNEM1QzQyQ0U1NgorOjEwMUI2MDAwRURFNTBDNEU4QTk3RTlDNkVGRDMxMkZEM0QwODkzNUY3MQorOjEwMUI3MDAwNjZBRkY3RDhFM0YzQkFGOUM3Rjk2RThGM0Q3RTY2OEU4QworOjEwMUI4MDAwQzMyRTMzRDM4Q0Y1M0ZERjcxNUVCN0U5RDRFMjY3MUExOQorOjEwMUI5MDAwNUM0OThBN0Y2QUY4QTM4N0Y2MjcwRDBGQjlBMjg4OTc1OAorOjEwMUJBMDAwQjc3NjNFRjM4NzZGMzFCRTdGQUJERDk0NjNCQkRFNzVFNgorOjEwMUJCMDAwQ0FGMURDNUQ2MzIwOUIxQ0JGMTU4ODQwNTYzOTY2REY4NworOjEwMUJDMDAwQjNDQTcxMjA3REFFQTFDMzY3QUY3N0U3RTREMEJCNUYzNgorOjEwMUJEMDAwNzVFMDkzRDkwREY5MTg0N0ZDRTYwM0YzMDc5MkJGQzJFRAorOjEwMUJFMDAwODE1RjUzREYzQUY1RThBQjIxOURGMDlDMTlFRkM3RDczMQorOjEwMUJGMDAwRkQ3NDNDMjZDN0EzQzk5RkYzMUU1QzQwRTM3NEYzQjE5OAorOjEwMUMwMDAwQzlBNzI2MUZFNzg4MUI3M0UyRDM1OTlFOEZCRUIzMzE0NQorOjEwMUMxMDAwOTk3RTkxNzgyRDU0RTJERjY5NEFCODgxQkZGNzI2RkI5RgorOjEwMUMyMDAwMjNDOEJGQkQ5RDc3RkUzNkJGREM3Q0ZGNkQwNERGMTc4OAorOjEwMUMzMDAwRjJGM0NFNDg0MEMzQkY1ODgxRjdFNTk0NkNFN0VDOTFDRQorOjEwMUM0MDAwODk3MjU2RkJGRjA3RjlEQzRFNDJCNzJDQTY4RkU3NzM2QgorOjEwMUM1MDAwRkNCNTI4NTFFMUM4NkJBNzdCMEM3NEI2OEE3MDE2ODQ1QQorOjEwMUM2MDAwNDhDRTVDMjI0RTg1RjU0Q0Y3RDEyMzc5RjJCQjNBRUI5NgorOjEwMUM3MDAwRTNBRUI1MDcyRTUyRDEzRjNCNEFCRTZFMzBDQkVGNUE5MgorOjEwMUM4MDAwRkJFMjQ1MkFBMzc3RTQzQ0Y5RDE0MTJDQkY3QkVEMUY1MQorOjEwMUM5MDAwNzlGOTA4Nzk5NDhCQjFFQThFRjg0QjE3RDVCMUZDNDJFQgorOjEwMUNBMDAwMzFFRjg1QTY5RkE0NjU4Q0NENEZBMkNBODdFRkMwRjMwNAorOjEwMUNCMDAwMUNGNUE3RkNFRjExQUQ2NjcyRUZBRDRFOUYzM0U3NzlDRgorOjEwMUNDMDAwMjBFRTYzRjkzQzM3NEI1OTdFNDVGOUVGNTdFMDI2RjI5OQorOjEwMUNEMDAwNTdGRUQ4ODY3Q0MyNTdBRDhFNzgzRUEyNzkyOTdFNjdBMgorOjEwMUNFMDAwRDExMzE3NTIxQ0U5RTNGOURDMUY3REY2QTNFN0QxREYxRQorOjEwMUNGMDAwNzVGQzBDRTFCODNGQkY2RjZFMzg1QTVDQkM5RjIzQkJDQworOjEwMUQwMDAwQ0U5RTg4NzgzRTdCMjBGQUQ0RDJGNEE4NTY3NUZBRUU5RgorOjEwMUQxMDAwNjM2ODhGNzNCQjNGOENGNzVCMTIwNTZFRUFFNzcxQzE5NgorOjEwMUQyMDAwNjdBNzlBOUE3MTJGNEExRUU3MEIyNTVGNkU3QTg0QTVFMgorOjEwMUQzMDAwNEYwQjdFRjg4RjdDQ0Q1Qzg3NjhERjdERjRBOTdFNUJERQorOjEwMUQ0MDAwRjlCQjMxQzdDRTQwN0EyQkNBRjEzRkEzQkQ3OUVDREI5QQorOjEwMUQ1MDAwNzlGNEY3NDc1RUYyNzNCQ0JERTRFNzc4QkIzQzdGOEQ1NgorOjEwMUQ2MDAwRUIyQ0Y2QkREQTdCQzY3NUM4RjQyRjQ5M0JBRkM3NzRDMAorOjEwMUQ3MDAwOEIxNkZCMjVBNzA3QTRCMERGNkY1REE5RjA3RTAzNEQ4RQorOjEwMUQ4MDAwNDE3QzM3NEUzMkI4MUQyRTMxNjY5QUMxRjA5MTMwNDBGOQorOjEwMUQ5MDAwNzcwRjQ2MTFCNkM3N0YyODRBRjVCMTE0OEQxRkI0OEQ1MQorOjEwMURBMDAwMEY2NTZDREQ2NDcyN0VGOTM4NEUyRjg2NUI1QTQ3NUY5MworOjEwMURCMDAwMThDQkYzMjY3Q0QzOTM4MzEyOUQzQUMxRjMyNzg0NjcxMworOjEwMURDMDAwQTQyNzM5MDBGNzUzREY2MjY2MTVFNzdCRkJCRUJFQ0I2NQorOjEwMUREMDAwQ0ZDRjM3QkJCMEZERjA3NEZDNDBFM0RGNjREQUNGMzYyMQorOjEwMURFMDAwRTIxQzU4RkVEMTIzMjBGRTVFMjE3RjVGQzdGNDdCOEM2RQorOjEwMURGMDAwRkJGNUI1RTRGRjFFQkQ2NzNFOEYzMzExRkUyRUYzM0NBRAorOjEwMUUwMDAwQkZFNjAwM0Y5RjczRkFCN0NFODMzNUE0NEZDNzM5RjRCRQorOjEwMUUxMDAwRTg3OTdCQkU0QUZBQjVCN0YzQjk3Rjk4N0FCNTE0NEEyOAorOjEwMUUyMDAwNEZGMzdDRUVBM0ZDNTMzODlGRkIxRjc2MjJCMjZFMDA2QgorOjEwMUUzMDAwODAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkI1NUE1NgorOjEwMUU0MDAwMDk3NDU0NTU5QUZFNUZCRERBOTJBQTU0QUEyQTQ1MDgyRAorOjEwMUU1MDAwMDRFMzRCMDIyNDIxMEI0NTEyMjAwNEQ0MjIyMEQwMzE2QworOjEwMUU2MDAwNEE4MDE2ODFGNjQ4ODFCMjk4QUQ5OEI0REI2OTlENDNFQgorOjEwMUU3MDAwODUyMEQyREFBMzE5NzU2Q0NFNjlCQUU3ODVENjExMjUwQgorOjEwMUU4MDAwRTkyOTI0RDFFMDU0MzJDNTIyMDQyNTRFOTA0NUEwMURGNQorOjEwMUU5MDAwM0JFRDc0MjNEQTY0MzEzRDgyNEJGNzYxRkVGRkRFRkJEQworOjEwMUVBMDAwQTgyNTQxRTkzRTY3QzhFMURDQkFFRkRENzdERjdGQkZGNworOjEwMUVCMDAwRkZGQkI3N0JERkJBNDQwOTYwMENEMDNGMUQyNDAzRDQ3RAorOjEwMUVDMDAwOUJGMTk3MDIzMDdDM0MyMzExRjIwMEY0N0EwMEQ5MDk4RgorOjEwMUVEMDAwNjA1NDY0MjhDMUY2MkFGREJCMERBMDZEMzM4RTMzODU5NgorOjEwMUVFMDAwRkI2RjI1MkE2QzlFRkM1M0Y2RkJDMTQ2MkRBQzg2ODIwNworOjEwMUVGMDAwODg3OUVEN0NERURCNjUyQjQwMzFDRTdGMTE1NDUzM0E3RgorOjEwMUYwMDAwQzBCNEJFRUM5RkNGQzFCRUExREIwMDJBQkQ5NzlFQTA4RQorOjEwMUYxMDAwRkI2Nzc1QUExRjQ1OUI3MUVDRDc0NTIxQkNCNDM1Q0UzNAorOjEwMUYyMDAwNTYwMDUzRjE5NTI5M0E1MENDNkM1RUI4OEFGRkUzOTQ4MQorOjEwMUYzMDAwNzg1MEIyQzM3RDRCQjYzM0FBMkZDN0RCNzY0MTIyRkU2MQorOjEwMUY0MDAwRjA3QjdBNTM1MDhFMjI3RTBCMTJEQ0UzQTNFNjc5REIyMgorOjEwMUY1MDAwQjZBODlCRTQyRUIyQUZBRjIwQjkxMzRCMzJBMkU2ODFGNAorOjEwMUY2MDAwRTNGQTRGRkFCMDlGOEQ3RjU3MzMwMEE2NDM2NTYyMDhBRQorOjEwMUY3MDAwRTUyRjg0NEE4Rjg0RjJCQTNGMDI3NzA4RTU5RjcxOEE4MQorOjEwMUY4MDAwOEZEMzlFNzM4N0ZDQjIxNzcxMkNGOTI4RkE3QTI5NDRGMworOjEwMUY5MDAwRjQ3MTlFQzczRUZBQzI3MTM4NDI5RUU5RjYwNEQ3MDUzNQorOjEwMUZBMDAwMEJGRTE4MEZFM0FGQ0FBM0UyRTgwRTExNEVBNzY0Mzc4OQorOjEwMUZCMDAwQUEwMUVBOEZFMTIwMTdCNjlGODEwQTg4REIzNDI4NDhGRQorOjEwMUZDMDAwMDQ4NkFCMEMyQUY2REYwNEVGMEI3M0IwQkRCMjc5QzgwMAorOjEwMUZEMDAwNzE3ODUyMTg0Rjg3MjcxQUNGQTQ0NUQxNzg4RUE5OENEMworOjEwMUZFMDAwQzY3M0VDOEE2OERDQzY3OUEzNzE0QUREMzgyNUVBRkUzRgorOjEwMUZGMDAwNEQ5QjBBQTNGQTM3M0Y1NjFBMzUzRURENUYxNkQ1Q0YwMworOjEwMjAwMDAwREM1RTFFMzU3RTUyRDNEMkE4N0VENjhFNTU1MUUzNzM0OAorOjEwMjAxMDAwRDRCNTUxRjc3Mzc3NTdERDkwRkVGMzAzRjU1MUUzNjJDMgorOjEwMjAyMDAwRjUzRkI1RTMyNzUxRjM5NkNBRjdDQTkwMTFFNjgxMUYzMQorOjEwMjAzMDAwRkY4ODA3ODVBNDYyRDIzRkVBMjEwNDIzRjUzRkQzRTU1OAorOjEwMjA0MDAwMjdDNkZGQ0RGQTdGOThGNDlGMUJBMTdGRjlERTQ0QUYyRQorOjEwMjA1MDAwMzU2QzZGQjFBREE2RDc5RkQwNUFDNzkwNUU3MTRFMTQ0NAorOjEwMjA2MDAwRUUwQUU5MTlBRjBEMUFBQ0RCMjU2QzFEQzg5RDdCRjE5QQorOjEwMjA3MDAwRkE2MzY2N0VGRDUxODFDRjk1QjgzNDk1RDZFRjA4MUU4MAorOjEwMjA4MDAwRkQ1QUMyMTZENUMyRUNEMEZGQjE0NTZENDRERTNDMkFFNAorOjEwMjA5MDAwMkIwREM0QUIxN0U1NEEwOTUwOUU1NDU0OUQyRTEzNzk1RAorOjEwMjBBMDAwQTQ4MzhEMDFFNEY3QjMzQURERUFDQTA4Rjk5RUIzNzM1RAorOjEwMjBCMDAwQkZGMjlDNURDN0RBNUYxOEQxNTZGMUJEQTkxNkYwOUIzRgorOjEwMjBDMDAwMEJEOTczQjQzNkZBRTcwMTVDQjcyRDg5ODE4MjJGMkNDNgorOjEwMjBEMDAwREYzRTdGMEVERTc3RjQ2NTJCMEUwMDMzRjU2RjAxMzg5RgorOjEwMjBFMDAwMUZDRkU1M0QxRkNGRTU1QzY1NTIxQUZCQzg3RkM4RUFFQworOjEwMjBGMDAwMjQ5MkE3RDlFRURENjlDN0Y3OUM5NzlFMzBFMDlCQzE3QgorOjEwMjEwMDAwRTBGMjFCQzhFRTUyQ0RFMEI3RTFGQjFBMERCMEJBMTJGNworOjEwMjExMDAwRkIwRTcwNDlGNUQ4MjZDMjRFM0JFMThCNjIyODU3OTFFMQorOjEwMjEyMDAwMTQ4N0FBNzIxM0ZCRjBGQUZCMjREMTM4QjIzMUI3MEUzMAorOjEwMjEzMDAwNjYwMEFDRDRGQ0UxQzYxQ0U2MEY4NzcxOERCREE0NTBDRgorOjEwMjE0MDAwQkQ5MjA4RDgwRTNGOTBDOUFFOUZCQjBGQUQxMEVERTkxMAorOjEwMjE1MDAwOUM5MUUzQTFFMTcwNTFGOEM5Q0YzNzlCNTk3QjY5QjNEQQorOjEwMjE2MDAwM0RDQTZGNkU2QzdFMjE0MUMxNzlDRTY1QzNBMjQwMDQyOQorOjEwMjE3MDAwN0U1RDg0REY3NDZBNjU4NkRGODBGQUM3NjQ4MjY3NzA3QgorOjEwMjE4MDAwRERCNzkzNDk2ODlGRDRCQkNEOEE0MzlFREFGMTBGOTVBMgorOjEwMjE5MDAwODA3QTMwQjYyREYxQTM0RTYwQTU1MTYxRTNCNTc5N0MwQworOjEwMjFBMDAwQzFCOTQwMzgxMDYzRTlGQTNEMUZDMjI2OTJFRjlFNkYxNQorOjEwMjFCMDAwQjE4RDc4NUY4RkREQzBERUQ3NDNFRkMzNzYzOTM2NzZEOQorOjEwMjFDMDAwQzQ2RDM5RUFDNTQxRUREMTM5MEJDODJFRjA3QTQ4QzI0OQorOjEwMjFEMDAwRkVFMjZFMzA5MDNEMkNGMUE2MUI0ODlFOTNFMDNFREQ2MgorOjEwMjFFMDAwOEVGMjlDQjUyQkVDRjkxRjQyQTU4MUU0M0E3MzVGNkQyQQorOjEwMjFGMDAwMDI4REJCMzY5RjM2MEYwQUVCQzA3OEYyQTFDMzZGNDg0MQorOjEwMjIwMDAwNDZCRjM1NzQ4QkU0REVBNUIwRjc5OUU5N0FFNUJEQTk0MAorOjEwMjIxMDAwNEY1QTk1RjBGQkNFODBCN0ZGMzRFQTdCMjlCOEQ5QkM4MgorOjEwMjIyMDAwREFGQzY4Nzk1MTdFRjE4RDhERDVCRjRCQ0EyMDdGQTgyRAorOjEwMjIzMDAwMDMzM0Y5QzM0RTEzRjM4NzgzNTU1NzVBNUZDMkZCQUI4MQorOjEwMjI0MDAwNTNGQjZFMzJFMjczRTdBQkJFOUQ0Q0I4QUNEQzIxODMyRQorOjEwMjI1MDAwODJGQUZGMjRDMUZCMDdGQkY0MzAxRUU3MUVGODczMDI2RAorOjEwMjI2MDAwREQ1RjY1NTI1Rjc5MDlFRDAwRjY5OERDQUYwMDNEQjdBMAorOjEwMjI3MDAwODczREE3OEQxQkIwQ0ZGRDhDNzgwNzI1MDhENEFDRUIyQworOjEwMjI4MDAwREJBNzg2RkZCQ0Q3NzNDNjEyQ0YzNDdFM0QyOEY4NTUzNgorOjEwMjI5MDAwRkY1QUQ2NThFMjUzN0RDMjM1N0VGMUZFMkI5OTYzODlGMQorOjEwMjJBMDAwNUYzMzI0Q0VDQkQ4NzlCQjkwNUY0QTE2QUUxQjc5QTU5RAorOjEwMjJCMDAwMjBBRkJBQkUyQTRCMjIzRkIxRUZCOEIzODhFNEQ0ODMzMworOjEwMjJDMDAwRjc2QUU0QkFGNkJEQkYyQTk3RUVDMzU5RDcwREM5NEJEQQorOjEwMjJEMDAwQjZFOTQ3MzlFRjAxMkU2NzhGQjA4RjE1QzFBNDIyRDIxRQorOjEwMjJFMDAwM0JEQTlEQzU4MUUzNTZGREM3NkJGREJGMjU3QzNBRjcwMAorOjEwMjJGMDAwQkNGMjM4OEQyOUJFMzEzQzM0RkZCNDM3OUVDNzIzMTA2MQorOjEwMjMwMDAwNzFDRTJENzBDMTM4OTdBRDQ3NTEwNzIxREU0REY5QzIwRQorOjEwMjMxMDAwRjVGQ0Q2NUVGMjBCQzhBQjJCM0E3NDdDOTlFNEFGMkE3RAorOjEwMjMyMDAwODFGQzgyMDVEQzBBQjVFODY1REU5QjhEN0E2QzNDQTBGOQorOjEwMjMzMDAwODNBN0IxNkIyM0E3QTZGOTlGMTJFQ0NCM0FFRTdGQjAyRgorOjEwMjM0MDAwNkY0RUMxMzgyMkZDRDMyNEM3QkYyRURBQ0FFQ0M3NjM1NAorOjEwMjM1MDAwNUQzMzgzQjk0NDI2NTdGMUUxQUEwQTdBMkZGNEEyMUYwQworOjEwMjM2MDAwNDc1OTJCRjE4RkUyQzE2Q0Q4NzQyODBFRTU5Q0IxMDM1QworOjEwMjM3MDAwRjMwMzFDMzdGMzJDQkZBRkY5RjU1OTIxREQxQTYzMjJBMworOjEwMjM4MDAwOERGQkQ5MTdCMjhEMjA4QThFMDNCMzBGOTc3RjRBRjM0NgorOjEwMjM5MDAwQ0U4Njg4RTc0Njg5MEZCMzFDN0Y1RjdDOThFRkUwRkUwRQorOjEwMjNBMDAwMjE5MENERkQ3QjIwMTRBRkZBRDNEOUI0NDU5NUY5Qzg1RgorOjEwMjNCMDAwMTcyNzhGMUYyRDg4MzlEOUIxNTExQUM4MzZBMzFGNUUzMAorOjEwMjNDMDAwRTQ2OERFQkU3RDAyRDI2MTIyQzc4NUZBOERGNDVCMjkwNgorOjEwMjNEMDAwNjIzQ0JFOTYzNzFFOUVDMkZDMjFGQzA1QTUyMkJDRUNDOQorOjEwMjNFMDAwNDJFNjE4Nzk4QUQxRUU3ODMwNzY0N0U1OURBMTIzREY2MQorOjEwMjNGMDAwRDhGQTcwMURBRDRFRTVCRjQ4NUY0Mzk4RDc5MDVGODgwRgorOjEwMjQwMDAwRDNGNzE5MURBM0FDRUY0REYyQUZDOEZGRTcxQzNBMjY3NgorOjEwMjQxMDAwQUZCOTQzRjJBOEY4N0VCM0UyMDEwOUQ3MTA2N0I3NEYwRQorOjEwMjQyMDAwOTNBNUYwRjgzMjA3OEY0QkI1NDdDRUE3MTk1MTVGRkQ0MgorOjEwMjQzMDAwQkFFM0I2M0M5Q0JGQTZGRDBEMUIyRTFGN0U2Q0YzQUUwRgorOjEwMjQ0MDAwNzNFMDNDRDVFNzNFOTg0MUExMEIxOTlFNTY5OTQwMzg2MAorOjEwMjQ1MDAwNjUyNDkyM0RFNUVCQzFBRjJGMUMyOTg3NkYwNzJFMDYzRgorOjEwMjQ2MDAwMjk1RkI3MjM4OUI1MzkxRDEyNUI5RjJGQzRENzM5RDA5NworOjEwMjQ3MDAwRDFFODhDRjQxQkQ3OUVGQkNGQ0VGMUE0QjczRDYzNjBBRgorOjEwMjQ4MDAwMDVGOUUzRkM2MEQxMDZFMjMxQzk2MjQwNURCQ0ZFNTU0RQorOjEwMjQ5MDAwMkU5QkVGMDk0NzNBQ0ZBRkY1QTBBN0VCMDBBQTZFMjkxNAorOjEwMjRBMDAwMEVEQTYzQzBFNzcwREU4MUFGNjQzNjRFOUIzN0JGNjNFMAorOjEwMjRCMDAwQUU2QzQ3MUVFNTg1OUEwRTUyNUUxODE3MzQyOUE0RTdDNAorOjEwMjRDMDAwQjg5NzgxRTMxMjhDNjM3RUQxRDdCNTEwMjg3RjFENzQzNQorOjEwMjREMDAwODA1QkMyRkJBREYxNDMxRjEzMkY4NjNBNERDQTJFODk5NAorOjEwMjRFMDAwRjA2QjAyMjdDRURGNkFFNEYxMzMwNzBERTEwRDZCRjhFNAorOjEwMjRGMDAwQkFGNkJFQjhFMENGODFGQzE1RjJDM0EzRDI3RDdEMTMzRQorOjEwMjUwMDAwREM2MjhEQzQzRDgxQzlGRjRCMDdFNzU3NkI3QzQ4Njc5MAorOjEwMjUxMDAwMjVCRjhGOUNEQ0M1RTQwQUNCMDlFQ0JEOUE5QzM5QUM4NQorOjEwMjUyMDAwMEU2ODM1MEU1RDc4RENDNUU0QjIxMzFGNzI4MENCMDlFRQorOjEwMjUzMDAwQzEyQ0U1MTU3QURFRUU2MUVCODhCMzJCNkVCRjM0NTIwOQorOjEwMjU0MDAwMkU1RjAxRTZDNTY4NzdDRjZFODE2Qjc2NEU3NkVGOEI5NgorOjEwMjU1MDAwMEZGN0NENjgxM0FEMTkyMEZDQzIyOTk2ODc4NEZCRThEQworOjEwMjU2MDAwQjA0QUMyQ0ZCRkYxQ0Y2N0I2NkY5REMzRUEyM0JGOEMxRAorOjEwMjU3MDAwN0NCMDYwOUJFMEE0NzU3MkZCQzJCMkM5MzNBNjkwRTM0NQorOjEwMjU4MDAwRTA0NjlDMkM2NjdFRkZEQTc4RTRCQjk1RkE1NjNFQ0U5OAorOjEwMjU5MDAwOUQ2OEI3OTQ0QkNDNkU4MEVDQTY0RUY4OTk4N0E0RDA3QQorOjEwMjVBMDAwODVEQjUwQjU1Rjg2MEUxNjI4Mjg0QkNERDFCNzE5NkY0NQorOjEwMjVCMDAwQUI3NUMxOTdGMkYxN0U1OUJDMzc0OEZFRjdBRDhGNzQwOQorOjEwMjVDMDAwNjBDM0Y1N0ZGRTVBOUM1QTgxNzg2NEVGNkY0RUY2NThDRgorOjEwMjVEMDAwNDdDRUY3RDREOTJEQ0ZBNzkyQkVGNzRCMEEyMjhENzlEQgorOjEwMjVFMDAwRTE1MDFBQzk1NzE3RkNENEU4QzE3NjYxQzdFRjhEMTRDMgorOjEwMjVGMDAwOUY1NjM5QkQ0N0M4MEU0QTNBMUFFNjExN0VCM0EwQTlDNAorOjEwMjYwMDAwRDE2RTY1N0VEMTRCM0MwREE0NzBGRjMxN0M2QUYyQUU3OQorOjEwMjYxMDAwODYwOEJDMkYzOTc4REUwMjQzREU5QkM5NkU4MkMyM0UzQgorOjEwMjYyMDAwQkIyOEZGQzFCNjVERTQ2MUVEMDc1NjY2MkFGOUUxRTcxNAorOjEwMjYzMDAwRkM3MDMwMTU3MENFMkQ3MDM4OTU3MEQ2QUUwRkFBRkE5QQorOjEwMjY0MDAwNDVDNEE3REMzM0U2RDU5RTA4QkU1RDEwRjY3RTQxQkNDRQorOjEwMjY1MDAwRUYxRjlEREU4RjA4ODdFQTAzOUYxODZEQjgyRURGMUZERQorOjEwMjY2MDAwMDI2OTE0OUYwMjk4QTdEOUJGQzMyRkZBNjJFQ0M2QTdDQworOjEwMjY3MDAwMUYzMkQyNzhERjQ1NjA3RTA0RjVCQTM1MTFGNUI0RTczNAorOjEwMjY4MDAwNENDNzk0MzU1NjI2M0YyNEUyQkFEQkNGOTk5OERGNkNDRAorOjEwMjY5MDAwNEZFN0Y2RDc3MEZBNzIwMUY5QURDQjlERDUzNzEzNUVDRgorOjEwMjZBMDAwRUYzQjBDMUFDRkNCRTJDOTlFRjYwMkYzNjM5QTNERTZFQworOjEwMjZCMDAwOTEzREEyRTg3OUM0RjM2MkVBRTdCMEY5NUE4REJERTUyRAorOjEwMjZDMDAwQ0NGRURBNzU0MEY2ODczQzY3QkM0NzlFREIyOUZGQzgyNQorOjEwMjZEMDAwQjMyM0VGRDlGMzU5Q0M5RTVCN0IzMUUwNjFERjhGN0U3MgorOjEwMjZFMDAwN0MxMkVCOTcyREEzN0U2QkVGN0MzQkIzNjcxRDQyNUJBNworOjEwMjZGMDAwNDg3NjE5M0FDOEU2MDk2MDRDMjNENTQ5NTAxOTk5QTc3QworOjEwMjcwMDAwOTYzOTZDNEM1RUNEM0Y1NjNBQjhGRjBGNjQyQjg5NkVGQworOjEwMjcxMDAwNUM4RjQ1OTZBM0VDMjAyMjVFRjJCRTg4QTcyQjlGMzdFNAorOjEwMjcyMDAwRkNGNEM1MDk2NDREMjIyRTg4QkNBQzRCRTRDMUUwMkRGRAorOjEwMjczMDAwNjJGRUZFQzcyMjk2RDVCRjUzQkFCODA1RDc1QkRGMjMyQQorOjEwMjc0MDAwNzNGRjJGNzg3MjUwRTRDOTg3MzdBN0IwM0VDNTBCMDVEOQorOjEwMjc1MDAwRjUzNDFENUIwRkZBRDMxOTlFNERGM0QwQzZBMDY0NTExQQorOjEwMjc2MDAwRDMyMTZBNEIyQjAzRjMxMDcxOThCM0EyRjc5MDgxOUI4RQorOjEwMjc3MDAwNzMyRUYxQUZFREUwMEY3MkY1QzRGNzczMjY4ODQzMTFBNQorOjEwMjc4MDAwREJCRTE5RkFGODc1QzRFMTkxMkVDNDdGOTRCODg0Q0JFRQorOjEwMjc5MDAwNjFGQzQzMDQxODFGQUZDNzlCNDFBOUVGQUVEOTZFNEMzMworOjEwMjdBMDAwRjk5RjFGRkIwMzdEMUNEQTBGMTEwM0YxQzg3QjdFQ0M2MAorOjEwMjdCMDAwNEZGRDI4NTBCQkQzMzNENTg5MzhGRTM2QzkzQkQ1ODk2OAorOjEwMjdDMDAwMzgwRTlFRjgyNjk5N0M3QUZCQTk0RjZDRTRFRkRCOENERgorOjEwMjdEMDAwOUU1Q0UyNTk1QjA2RDYwQkEzRjA3MzgyOTNGM0E3RDhGNQorOjEwMjdFMDAwMTQ5REE3NkJFRDUyMjdFN0ZGNjQzRjNDNDNGQ0E5NkJBOAorOjEwMjdGMDAwOTNFRDJBRUFCQkJGNERGNjE4MzE4RkJBRTBGMTI2RUIxNAorOjEwMjgwMDAwMTFEMjhCRTA1RjNFOUJFMkJCQTg3RkQ3NzFEODYxMURFMAorOjEwMjgxMDAwRTUyRjE4NjdENkJGNjg4OEFBNEI2QkM0QkU0NjE2RjQ2RQorOjEwMjgyMDAwNkQ0QjQ1OUM3QzJGNEJBQ0FFREQxODkzOEZENDUwRkU4NgorOjEwMjgzMDAwNTI0MEY1NDVCMzkxRDY1M0Y1NzJDQzNDOTRDNzE0RDBCMQorOjEwMjg0MDAwQjhFRkFFNzM5NzNBQzUzRTQ3MjY2NDUyMUU4MzNDNjI4QQorOjEwMjg1MDAwRjVGNEQwNjlEOUJEOEI2MkEwMUVCQTREQzhERjNEM0FGMAorOjEwMjg2MDAwOEUxM0ZBNEQ2NjhGNUEzRTYzNzI3OUU2OTFERENGRDNBRgorOjEwMjg3MDAwRTI4QUE4NUI4NzVBMjU5NUQ5Q0Y2RUY0RjNEODJGQkQ4RAorOjEwMjg4MDAwQTgzNDAzQzdFMTU0Q0EwQzVBMEZFNzY1QTk5RThGMkZERAorOjEwMjg5MDAwMERBNjMzRkIyQkYxNjAzRDhGRUI1RThGRjVCQzRBRUI1MQorOjEwMjhBMDAwRDZGMjNDRDVDMEQ2OEZFMTk3RTU3OUIzNDA2REI0RTE1RgorOjEwMjhCMDAwQjgwREJCMjVCNkVGNTNCRERCMTA5NUU3RjkwNDNFMzVFNworOjEwMjhDMDAwM0I0RTFDQTE3MkIyMzYxMDczNUZFMEUzOEJDMUU3MEQ4MworOjEwMjhEMDAwRkEzMTZCMjQ0RThGM0E0NUJFOTcwNjY5OTFGOTFFNzQwMgorOjEwMjhFMDAwM0I0N0FEMEIzNDdDQjQzQ0ZCNEYwNjlFNUY3QzIwRTYzRgorOjEwMjhGMDAwRDdDNkZEOEI5M0Q3RTc3NTFFNjBGQjQ3MzVBQUFDQUFGOAorOjEwMjkwMDAwM0MxRkI0QUU0MUJFREMyRkY4NzJCRkUwOEIwRkY4QjhBRAorOjEwMjkxMDAwREFERDkyMUFBMjc4RjUzM0FFNzczM0ZFMTEyRUVCMDI5MAorOjEwMjkyMDAwNkIxNkE0MkEyMzc5NTUyNUYwRDhEODYyNjBGOTJGQzBGOAorOjEwMjkzMDAwMjYyM0Q5RTdDNjlEMzFFMzA0MkU1NTMxQjhENDc5QTVCNQorOjEwMjk0MDAwMThGOTc4M0VGRUI3Q0E1NzZERTBGQjM1RDVDODJGQkZFMgorOjEwMjk1MDAwRjJGRjI3NkZBQ0ZFRkU1REQzREYxNDk4MTJBNUJGNDVEMgorOjEwMjk2MDAwNDkzN0E0QkZEODNDNzlFRjkxMjkxNjdBN0VCODNCODNDQQorOjEwMjk3MDAwRUQ0MzY4QkM4OTlENjc4MUM4QjMxN0VFRTBGOTY4N0ZCNQorOjEwMjk4MDAwQzczQzRCM0VENTUzQzdGNTZFMDlFNzI5RUFGOTVGNUJCMworOjEwMjk5MDAwM0VFMjUxRDgyOTQzMDU0RTMxMTgyQzdBQzY4RkVCREMyNAorOjEwMjlBMDAwRDczRDcxOTk4MkYxQTFCMDQ3Q0ZFMjRCNTE0RkExNEE3NworOjEwMjlCMDAwNzU0RDYxNEZBMTI1MzM4MTE5NEYxMkQ1MEIzODBGOEJGRgorOjEwMjlDMDAwQ0Y4M0M3Mjc5RUNDMjMzRkRCM0RCRjk4NjA2RjM4NUUyNworOjEwMjlEMDAwNjhBMTNDNjIxRkYwN0QwREE5QTczOEE5MkYyMkRFNzRFMworOjEwMjlFMDAwM0JGOUJFQzZCNjk0RkY3OTk2RjJGQzg1N0IwRDZFQ0FBNAorOjEwMjlGMDAwNDcxNjFBODZERTlGRURBMkY3RUJERDBERDhBRkU5NTkzOQorOjEwMkEwMDAwQkIyNThFRjRGRTlBRTRBNjc0RkM0ODZGQkRFQjQ3QTQ4OAorOjEwMkExMDAwREZBMEMxNkU2MkYyM0U3QzkwRUVGQjVCMjRGNzI0MUNDQgorOjEwMkEyMDAwRUZFQkJDM0RCNzE1RkI4NUNENDU2RTgyNTk3QjVGQTFCMQorOjEwMkEzMDAwNDM3OUExODJGMkM1NzExNjU2QzcyRkJDQzlDMEUyRUUxOAorOjEwMkE0MDAwQTVGMTk2NUY1M0JFNTRFNTY5NUU0MEZFRjhEMkRCRkIwQworOjEwMkE1MDAwOENFNDBGMDY1QjI1NDhDMTg1MUM0OTM5RjQxQjNGQUU0OQorOjEwMkE2MDAwRjNEMjlCMjc4Qzk0OTRDRjZCM0I2MUVDRkI4RTdDQTJDMgorOjEwMkE3MDAwNUY5NTIxQzRFQUY3MjYyM0Q1NDFCNUNENUFCRkNGNDg4QgorOjEwMkE4MDAwN0FBQTE0Rjk1NUREQ0JCRjY3RkQyQUFBMTNGMDdENTU0QworOjEwMkE5MDAwM0I2NTU1QzE5Rjg3M0FERjMyMTJERTc1MkQxMjhDNEQ5MgorOjEwMkFBMDAwOEZCOEZGQjJDNEVFNkJCQzVGMEI5QzA3NkI4NTdGQUEyRgorOjEwMkFCMDAwMTZGQjkwRDVCNDBGODlENzYxM0JGNzM3MUFFRjFGRDhCMworOjEwMkFDMDAwQkRFNDA4ODVFRjc1NEREMTdFRTg0MUMxRjMwRDU0OTcwMworOjEwMkFEMDAwQjJGQURCNkIyNEJENkVEODExMzM0RUYwRkNDMUVGRTFDRQorOjEwMkFFMDAwQjkzNTQ5RjhGMzFDQzgyMTlFNUY5RUNCRTNDOUU1MTNCNQorOjEwMkFGMDAwRjE5NjNDNUNEN0U1NjNCMjFCRTAzQkY5Q0VFMkVGNzFBNworOjEwMkIwMDAwOTEyRjBDODc3NDJDOUU2OUUzMDYzQUZFQ0NFMjhERUY4MAorOjEwMkIxMDAwRjhCMDkxRjJEQjA1QzEyRjk4M0UyQTgyMDdFNjEzREU1QQorOjEwMkIyMDAwNzc4MkI3ODZGMEJCMzM2OEIxOTNGRDU3RjQ3MTdGNTA1RAorOjEwMkIzMDAwMUUzNEE5QjQwRjdFMjcwNEI2OTI5RTA3QkI1RURERUE2MQorOjEwMkI0MDAwMjRERUZDMUJFNzBEMDg3RkI3NDFFMEJBNDFFMEJBMDE4MworOjEwMkI1MDAwMUQ3RTEyQkFEOEFBQkMwMzJGNjFCQTBGRTVDMEZENTA4MgorOjEwMkI2MDAwNzk0MEY4QTE5REQxMzg2M0U0Qjk4RkY0NTUxNzM0QzE4OQorOjEwMkI3MDAwRDM3OEZGMEVFMThGRUU2OEUxRkUyODM2NEVENjg5N0REMAorOjEwMkI4MDAwODBDMTcxQjk4QkQ5N0UyQkQ2QkI5NEM3RDVCNDQ0RTMzMQorOjEwMkI5MDAwNUYyN0Y2MDVFQTYyRTJGMENENDk3Q0RGRUVGQkVBRkY1MworOjEwMkJBMDAwNTgzRENEOEREMTUzQzUxMEU3NEYzOUM1M0Q1QzdGNzc3QQorOjEwMkJCMDAwNjg0QjFFRUREQjY5NzhDNUVBQTk1QkM5NEMxQ0FEOUU2QworOjEwMkJDMDAwRDVEQUY3NDVERUFGRjUxNzIzNzEyOURGMENEODlCQUNCQQorOjEwMkJEMDAwOTE3NUZDQUI0OTNDRkU1NENEOTJGREE0RTc2QkY1Q0U1QworOjEwMkJFMDAwQzQ0MzA1OEEyRTVDRUY2MDlEQjMzMjY5MENBRjdCQTZBRgorOjEwMkJGMDAwRTFENDQ3MjdDOEUwNzI4NUVCOURBNzUyNUVBODI4QTRDMAorOjEwMkMwMDAwN0NBNTg1RkI5MTgxMTI5QzJGOTFGMjc5NjBGRUNCRDczOAorOjEwMkMxMDAwNjI1MkE5NEVGMTIxN0Y1ODlENDNCQ0MxQjYzMjI4RERENgorOjEwMkMyMDAwNEVCQ0MxRkE2MTFEQ0RCRjg0QjY4RTExODcyNTFEM0NGNworOjEwMkMzMDAwRUY1OTMyRkYwQkM2Qjc2MzEzRjk3QTg3RjVDQUQ4RDFCQgorOjEwMkM0MDAwRUEwOUFEOEVBOEZCOEFFN0E5REFGNTNBQjQ3QjFBNUZFOAorOjEwMkM1MDAwMTc5NDU4NUREQzc2RjBFQkI0NzRGNDlGODM5RDU3RDJFMworOjEwMkM2MDAwRDY2MEZCQTI1OEJGOTZBNzBFNjE5RTlBMjFGMjE0Q0FBNQorOjEwMkM3MDAwOUZENzczOTVDMTA2NEM4NzFGNDMxRUFFMTc3MTBFQTRENAorOjEwMkM4MDAwQURDQzRFRUEyOEQ5MjVCRUI1NEI3QzFGNjczRjVFOTg3OAorOjEwMkM5MDAwODlGRUY3ODM3ODk2QzcwQzlDRTFFNzQzRjRGQzEzOTgxMAorOjEwMkNBMDAwNDcwREFDMEQxQzc2RTJGOENCQUQxMjhCN0ZFQjMxQzczNAorOjEwMkNCMDAwQkRCNTcwQTRCREQ3MEE1RTM2QzAxNjUxOTc2RDY1NkQ1RgorOjEwMkNDMDAwNzlGNkRFNEYxRTI3N0ZENDYyNTZDOEJGMEU3NDM0MUFDMQorOjEwMkNEMDAwRDlGRUIyMUFGMTdDQzZDODdDQTg1NkYwQjdGNjdCRjZDRQorOjEwMkNFMDAwQjU1RTREMTI3MTUyRjAxMkQ3QzFGMkRCQzE2M0IyREQ5NQorOjEwMkNGMDAwMjQzMUZDN0UzNTNFMTIyNzkxRkZCNDFEOEM2MzdBMUU3MQorOjEwMkQwMDAwM0M2MTU1MjlDRkZGNUNGMEVGOTJEODc3NkYyODkxMTk3RAorOjEwMkQxMDAwMkVCQTU5QkNDREVEN0EyQjgzRjQ0QTdBRjBEMjNFNEFEMgorOjEwMkQyMDAwRDc1QjUzM0M2QzlGNEY2NUY2NTRCRDVCQTZDM0JFQjBFQQorOjEwMkQzMDAwRkMwMTBCREIwQkQ1RkExQUJFM0U4MTJGQ0EzNUQ5RTg1MAorOjEwMkQ0MDAwMEFDQkQ1QUVFRkIzQjk0N0IxMUI0OTNBQzhGNEE2OTM0NQorOjEwMkQ1MDAwQTJFQjVDREY3RUI5NTI4REIwMjc1Q0NGNkFGMjZGRkJDRAorOjEwMkQ2MDAwMDUzRjQwM0Y5NDRDN0VCOTMzNDk2MUYyMzUwNEI5OUUyQQorOjEwMkQ3MDAwNzU5REJDQzVGNzJGRTdGQjM2MDZGNkZFMTFGN0NCRkNCOQorOjEwMkQ4MDAwMzU3NEZGNzJCQTA1MTg0RkJFRjI1NzUwRkY5MTBDOTk3NworOjEwMkQ5MDAwRjlBOTQ3M0VBOENBODI4OEY3ODNDNEVCNzE5RjYxMjhDRQorOjEwMkRBMDAwOTlENUMzMjc3NDRDM0VERjg5RTFFNDg5NTZGMjgzQ0Q3RgorOjEwMkRCMDAwRjNFRDc5RTRERkI4N0YzODkyNjFEOTQ4RkNGNkQzN0IzNAorOjEwMkRDMDAwQzc4NkU3NTk5OEM0RTMzQ0QwN0E1MzI4OUI3OTkxQ0ZDMgorOjEwMkREMDAwMkJENkJCMDU5NjMyMUNCNjA4OUU3NTg5N0MxNEVCQTZEMworOjEwMkRFMDAwMzM2NDhGQjE3NUQzRjVGMkREODhGQThEM0Q3Rjc5QUUwRQorOjEwMkRGMDAwNzJGMjQ3Qzg4M0MyNjM3QTNGRDVFQkZCQ0U3MjNGRDFGNAorOjEwMkUwMDAwRDBCOUUxNzc1NDA3RkJDRTlCODBGQ0M0MjM1RDFCQjI5NQorOjEwMkUxMDAwMjgwRTgzRDczQjk1RjJCQkNCNUQwRjRFNjVGQjk3RDI1NworOjEwMkUyMDAwMTYyNjk3OUZFNDRCQTFCQ0U5NzQzMkU1NDNCNTlEQTdGNAorOjEwMkUzMDAwOTM1OTVDNkY5RkZFMDJFNTQ5OTgxN0RENDFENzMxNUZEQQorOjEwMkU0MDAwNjFGQzJCRUMyOTY2RkNEQjc3QkMzODI5OTMwNDA3QjdCRgorOjEwMkU1MDAwODVFNkFEM0RBNkFGMjQ3QzZBOEYxNUJGNTc0MUY5NEI3RgorOjEwMkU2MDAwNEYxOUNCOTNCNEJDQTg4OEVBNzFDQTkzOEU0RDhDQ0ExMworOjEwMkU3MDAwOTNGQTA1N0U4MzA3RTJEOEZFODcwNDE5OUMzRjMwMzEyMAorOjEwMkU4MDAwOEEzRjM1NkRFRkIwN0NBMkE2NDNGNjQ0RjJFOERBNzNEMAorOjEwMkU5MDAwMkUzREUzOERDMUE1QjBGOTFBMDI5Mjg3RjE2MzJGNkYyMQorOjEwMkVBMDAwNkIzQUY2QjFGNTU1MUIwMjRDREYwRDJEMDY3RUJGOTUzMgorOjEwMkVCMDAwQjcwMDRERUM3OTNGMzhGRDg0Qzc3Qjc0MDlGNTUwNkUzRgorOjEwMkVDMDAwNTQyN0QwRkVGQUJCRTlCQ0JFODhENUM3NzYxN0RGNEZDMgorOjEwMkVEMDAwNzhGNzlDRjc2NkUyQ0JCQjczQkQ1OUY2NTFFMjg2MUZDQgorOjEwMkVFMDAwQ0E3OEREMkQwOUJDREIwQzJDQUY4QzFEQjdDREM1RjcyNgorOjEwMkVGMDAwN0I2QzQ5MTA3NURFQThCNUY1MkVDRTlGNzIyM0RGQTczNworOjEwMkYwMDAwOEFCRDdGQUI4QkQ3Q0RGOEVGMTkxREYyRTI2NDg1QzE4NgorOjEwMkYxMDAwRkVCNEE4MjdDNkExQkZCRDRCRjhEQjY1NzcxQTU4REUwMworOjEwMkYyMDAwNzE1MjlDMzNEREE1RjlERDEyMUVCRkI1RkRGRTI1M0JCOAorOjEwMkYzMDAwRTE0OTJDRkZFMTRCQzg2M0U3NjA0QjNDRDE3RUVGNkU2QgorOjEwMkY0MDAwOTE1RjJENUIxNDczNURFNDUzNzc3RjRGM0UzNUMzMjU0RQorOjEwMkY1MDAwRkNFMTY0OThDQ0VCMDZBQjg1RjY0NUJGRUMzNkQ4NjU1MgorOjEwMkY2MDAwMjZCNzNBQjEzMjdGRTQzQTM1N0Y3MzQ0OUMwRjc1QTM5QworOjEwMkY3MDAwMUZBNEI2MjFFNzQzQjY0RkY1RUU4MTczQkY3MTMwM0YxMgorOjEwMkY4MDAwMUEwNzE5N0NERjkxRUREN0Q3NUU2N0JGQkVFMTlBOUQyNgorOjEwMkY5MDAwRkUzMDhBNzc5QTlFRkEyOUNGQ0YxQkE5QTdBNTAyRUYwOAorOjEwMkZBMDAwNUFGMzI1MjMzQkI3ODQ0RERCNzU3MkY4OUNEMjY0RjA0RAorOjEwMkZCMDAwN0E1MjcxMUQ4NjhFQjkyMTNBQkY2Q0M4MzFCMTdDQTk5NQorOjEwMkZDMDAwRkY3NjQ5MjU3RjhGNzJBNjk5MjJGQzdERkYzODlFN0Y3MAorOjEwMkZEMDAwM0RCMjVDNjJGQkMyMDc3MjNFNjQ3MUJDMzZENDZCMjRBNgorOjEwMkZFMDAwNUU0RDZFNUJGMzI0QjM1RjNGOUNBMjdBNDlEM0U3NjJFOAorOjEwMkZGMDAwMzM4RjlGRDdGNEE4QUQ5NzZFMkFCNDNFQTc5RkZCNjU4OQorOjEwMzAwMDAwMTc2QjY5M0NDNUNCQkI0NDdDNUM1QzEyQURCRjJDRTg0NAorOjEwMzAxMDAwNUQ0MEZCMjNGNzc4MjQ5NjJGNUQ0RkVGNEI1NzRDN0I5OQorOjEwMzAyMDAwODdEQ0RGOERFQUZGOUY1Q0RFODc1RDY0RUZCREMzQ0I4RAorOjEwMzAzMDAwNjk3RkY3REQ5QzRGRDMyOEJFRDY1RDg3Q0Y3RTgxQUZGOQorOjEwMzA0MDAwQ0ZDMkNGQzU3QzE2N0UxRUU2Q0U1MjFBRkIxMDFGQkQyNgorOjEwMzA1MDAwQzNCQkQ5NDVGQjRGQkFCRkQ4QTYwMENERDNGN0FCN0FENworOjEwMzA2MDAwODlGNDAzMENGRkVCRDlEMTM2MzFFRjM2OTc5RERCOEIxQQorOjEwMzA3MDAwOEI5RjBGQzU1MTlGRUNEOUEwNEUyMDNGMDE3OTM3NzYyOQorOjEwMzA4MDAwQ0VEN0IwRkY2ODAxRTk2OUUwQzBCMTAyNjM4NDNFMkY4QQorOjEwMzA5MDAwRDVBMzNGQTBGOEQyNzkyODU5QjE0NkYyNEQyN0Y4QTYxQQorOjEwMzBBMDAwNjdBRDI0MkQxNTcxMzM5QTdGOTc4ODdGQTRGRkJEODc2NAorOjEwMzBCMDAwRUVBMkJBQjBCRjZEOTk0QjUyMjJFMjZBRkI0OURCQTQ4MworOjEwMzBDMDAwODg3OUZCODMzMjFCOEZGNUQ4RTRCQjEzMjJFNTdDOTIxMQorOjEwMzBEMDAwQzlEOTFGRTBGMzAxRjQ0RDVFOTYxRjc5QkY5MTlGMUI4NAorOjEwMzBFMDAwOTlGQjE4OEY5RkNBREVDNENFREQzNTFFRUI4MUYzQjg4NQorOjEwMzBGMDAwQUU2MzA5QjAzODI1RDYxRDMwRTIwRkFBMzNCQTRDMkE4OAorOjEwMzEwMDAwOUQ1M0QwN0VCQjIzQzI0RThFMEE5QzY3NjI3MTQwRkNFOQorOjEwMzExMDAwOUMwNTdFOTlFNjlEODkzM0RFNEI3RDNEODRFODRDNkVBRgorOjEwMzEyMDAwMzY4NDY0N0VERTNEMDE4OEQ3MzMwNEFGNjdFQTQzMDcwNworOjEwMzEzMDAwQTQwMjM2OEU5RDRCOTU0MjJGMUI3NzJCMENCMUQ2MDNFNAorOjEwMzE0MDAwNzYzREI1NjVFMDY2NkQ4OTM5NzQwN0I5OTNCQzQwODBGQQorOjEwMzE1MDAwN0Q5NzE0NEFENjNCMkU5OEQ5NTEyOThDQTZCRkYwRkFGOAorOjEwMzE2MDAwRjU3MDQxRTMyOTBFQzZBNDg3RURFM0M3OEUxQjE2NzZFMgorOjEwMzE3MDAwRUZBNkRBODJGNERDMEY2QzFGRUUxNkU4OTNFOTI1QjNCNAorOjEwMzE4MDAwRjVCMDg4QkUyN0JCNDUwRkU2Nzg5NDc3RUY2MTFEQjM5NQorOjEwMzE5MDAwRTdBRTNFNDUyNTdGRTY0RTEyQ0Y3RDg2Q0Y2MTdGQTYwNgorOjEwMzFBMDAwODdEQjJEODUyMEZBNkU0NTVCNkYyQzBFQTUzODFGRUQ1MQorOjEwMzFCMDAwMEJDRUQ0NjNFNUNCNzAwQ0IxRjdERDQ2ODJFM0JBRTcwMgorOjEwMzFDMDAwODJBMkE3RkUxRjVERTk2MjNGODVENzY5RjM0NDlEQTZGMQorOjEwMzFEMDAwMzNGQjE5MUU3RjEyRjE5MUNFNzM2QzM4NEY2OTkzMDQ0MworOjEwMzFFMDAwNjdFOTdDMjY5M0FGNTc5QkJGMTRCM0MxQzQ0MjFBQ0Y4MworOjEwMzFGMDAwRTMxQjZEODU5Rjc1RjI3MzFFMUIzQjlGOUI2RjI3QkM2NgorOjEwMzIwMDAwQTQ1MEIyRUVBQUU1QzY3MTFENEMwNjI2QjdFREZFQTE4QworOjEwMzIxMDAwODFDNzhCQzNFNzVERUVFMEQxQjNGNDVEOEVFNEYxQjAxRQorOjEwMzIyMDAwRUY3QURDNjY2Qjg4RjI3MzY0QzdBNUM4QkNGQkFBNkIzNworOjEwMzIzMDAwRUQ1RkM5REUyNUM1Q0VGMDAyMkYyODk0N0Y4QzBEN0Y2RgorOjEwMzI0MDAwRUYwMjU3OTNDMkRGRDMxMDhDMTc5M0MzRTdGQkRBRjc3MworOjEwMzI1MDAwMzVCQkQ1QTU4QTBFRjVCMkMyNjU3NjkzNUUwQUNENjlGNworOjEwMzI2MDAwNDU1NDBGMzZEQkJEN0Y3NUIxRUY2QzVBMjZCMUM5RjRGQQorOjEwMzI3MDAwRUFGNENBODQzMERGMkRFMDI5MjFCQ0I1NzM3RDQ5RTgyQQorOjEwMzI4MDAwRUY3QUU3RjY2NEFCQzQ3MzBCQkE3REZBMkVFODE5QjQ5MworOjEwMzI5MDAwMTdCMzczQjRFRjhGRjg3OTNFNUFBMTQyREYxREMxMTMwMworOjEwMzJBMDAwRjMxNEZBMkU2MDlCQzNFQzdFNUFBMjE0MUZENzY3MDk1MQorOjEwMzJCMDAwQUZBRkQxQ0NCRjI3NjgzNEYzRUYwMjYwRUI3NEI2N0ZCOQorOjEwMzJDMDAwRjY5MDM4OEY2OEI0RUFCMkE5REU2QTg0NzgzNzk1RjQ0QworOjEwMzJEMDAwOUFCQzBGMjU3MDNFM0VGNERGMTY3NjNFMUEyQkY3RDdDOAorOjEwMzJFMDAwRjFERTlDMzFEM0MzRjIzRjJBQkJDRjYyRUUxMzg1RTdGOAorOjEwMzJGMDAwMUMwRDRGNUQxOENGMTU2QTQ2NjM5RkMyRjA5QjQ2Q0ZFOQorOjEwMzMwMDAwNEYzM0E5MzdEMUJFQzgyQTEzRkY3RTQ5QzMwRDE1Q0E1MgorOjEwMzMxMDAwNDg2RDE3RkFEMEYwQjM5M0JFNjkxRDFFRDRCN0M2OTc5NworOjEwMzMyMDAwOEMzMDdFQ0ZDNDczREMwQ0Y0RTU0NDI2N0I1NjIxN0ZDMQorOjEwMzMzMDAwMUQ4QkNCRkYwMUFGNkI3RjhFRjAyOTAwMDAwMDAwMDBEQQorOjEwMzM0MDAwMDAwMDAwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDBDQgorOjEwMzM1MDAwMDAwQkZCQ0FDRkMwRjBBMzFFODE0M0QxRjhFODM4OUQxMworOjEwMzM2MDAwMEY1MzRDOTQxMTgyRDdCM0UwRDc4QjBENUIzMTIyRDgyOQorOjEwMzM3MDAwRkVEQzBDMENDQTlDMEMwQzJBNDBEQzA3QzRGRDQwRkM5MworOjEwMzM4MDAwMUU4ODBEQjgxODE4MEM4MTM4MERDODRFMDc2MjdCMjBCNgorOjEwMzM5MDAwNzZFMzg2RTg2OTY2Njc2MEU4MDZFMkM5NDAzQzlCOUQ4MworOjEwMzNBMDAwNzRGQjM5MjQxOTE4QTZDODIyRjg0RjgwNkM0NTA1RDI0MQorOjEwMzNCMDAwQ0QxOUM1NDMxM0YzMUJBMUYyMzVCNDUxRjlDMUJBQzBGRAorOjEwMzNDMDAwRjQ4MUE0NDY1MzlCMzRGMzRGMDFGNTlFMzZDMjJEQUZEMgorOjEwMzNEMDAwNkU4RUNBOTdCMzQ0RTUyRjMzNDNFNTVGNzQ4N0QwMDAwMAorOjEwMzNFMDAwOTNEREUxMzRCODAzMDAwMDAwMDAwMDAwMDAwMDAwMDA5RAorOjEwMzNGMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJDNTdEMEQ3QzU0QzUyQworOjEwMzQwMDAwQjVGOERDQkI3N0VGN0U2RjM2MUY4NDBEMjRFMTI2MDQxMAorOjEwMzQxMDAwMTIzMEMxMjUwNjBDNTZEQTREMDQwNTQ1MUE1MDJCQTg2QQorOjEwMzQyMDAwNEY5NzAwMDlDODU3NTAyQTY5QzU3RjJFNDkwODAxMDJFNQorOjEwMzQzMDAwMkMxODZCNTBDNEU1NTNBQ0QwMDYwNTNGNUVBRDVEMTA1MworOjEwMzQ0MDAwMkRGQTdDMzYyQTJBRURCMzE4MTA0MTI5RDAxNEE1NkMyOAorOjEwMzQ1MDAwREZEM0YyOUY3MzY2NkVGNkRFQ0Q2RUMwRTdGQkJGN0ZGMworOjEwMzQ2MDAwRkFBQkMzREM5OTNCNzdFNjdDQ0YzOTY3NjY2NUQxNEMxNAorOjEwMzQ3MDAwRDIwNjEwNzIwOUZFN0U0NEM4MTgxMzIxNjQ0NEI0MjQ5NQorOjEwMzQ4MDAwMTVBQTQwNDYxMkYyNTMyQkMxM0ZBRDVGNkNEOTU4NDc4NQorOjEwMzQ5MDAwNDhEODQyNDg2NDI2MjExRDRFREE1MUFBQjE5MjQyNUFCOAorOjEwMzRBMDAwREU3RUIzNDhEMjA5NDk4MkY3MTU0MjlBODQ5QTQzMDNEMworOjEwMzRCMDAwNEIwODUxQjM0NEIyOUQzRTVBOUUzOTM5MjlFMDRDM0NFOQorOjEwMzRDMDAwRUUyRTNFRUVBRkVBQUM1OEI2RDc3OUIwN0NCRUNFOEJDRQorOjEwMzREMDAwRTVERTNBODU4NEYzMDk3OUIxQUUwMENCOTdFQjdDRjg1MQorOjEwMzRFMDAwRkM1RkVCNEFCMTdDQjVDRThGRTU2Qjc1RTNCMDBDRDdEMgorOjEwMzRGMDAwNTU2MDc5QTA2RTBBOTYwN0VCMDJGOERFOUI3NUIzQjBCMworOjEwMzUwMDAwM0M1NDU3ODNDRkRGQUVBQkM1RjI5RDNBMTU5RkJGNUJFRQorOjEwMzUxMDAwRDc4QzY1NDc1RDEwQ0JGN0VCREFCMDNDNUMxN0MyN0UwOQorOjEwMzUyMDAwMUZENUVEQzRGMjQ4NUQzQjNFRkY1M0REQ0I1ODdFNTJDNAorOjEwMzUzMDAwMTdDNkYyNEU5MjRDNDgxRjQyRUVCOEUzODI3NTFBNURGMAorOjEwMzU0MDAwNkZGRTUzOEJERTFGOUY0NkM4REExMUEyMEZDMDk1RkY5NgorOjEwMzU1MDAwRDQwOTZGQTAzMEJBRUVCNURGOUFBNkI0Qzc4MUNCNEZCRAorOjEwMzU2MDAwODg4MEUzQUM3NTExNkM1RkJCRkY4RjQ0MjkyMjY0Q0Q2QQorOjEwMzU3MDAwODg0RUFGNEFFQkUzRjk3Nzg2NkMzRjZDOUQ1NjE4RURBOQorOjEwMzU4MDAwMTczQkNFRTdDNEM0QzYzMUQzNzZEQTZGRjAwNkQ2NUZGOAorOjEwMzU5MDAwNkIxRjBGREYxOTExNkRERkQxRjZCRTc1QkE1M0RGQ0U4OQorOjEwMzVBMDAwREU3RjY2RTNGQjU2QzBERkVBODg0NEMyODg3Nzk1MTA2OQorOjEwMzVCMDAwNUFEQTk1QUVCNjNFMTRDRkI2MjMxNjYyQzlBMUY4NTdCMworOjEwMzVDMDAwREE0OTI3MUQ2N0NEQTg1Rjg0QzUxMjU4MzdFREE2QzAxQworOjEwMzVEMDAwM0EzRjIwMDI4NTgzRUEyMjQ4MEYwQThDNzE2REY0M0I0MgorOjEwMzVFMDAwRDcxMjExRTc5MUZGRDQ2MUY2OUREQjJGNjBGOURBM0YyNgorOjEwMzVGMDAwNjQ0MkU4N0I2QkVFMTA0MjBFM0FGRTlBRDFFN0JEN0U0NAorOjEwMzYwMDAwQTAzN0Y1NTkxM0QwMUI5MkFCMDJGRkU5RjQ1NkQwQjFBNQorOjEwMzYxMDAwRDc4RUZFQzhBQjUyMzhBREZFRjY4MzI5RDM4MUZFODYyNQorOjEwMzYyMDAwMTMxRjdDNkZGNUZFNTc4ODAyRUQ0NTVEMDhCRjA2QkU4RgorOjEwMzYzMDAwRUVENTUzQTcwREYwMTQyNkE2NEI0QTQ5NDQyQ0E1Q0IzMgorOjEwMzY0MDAwNzUxMjdGMjgwRTdDRkYwNTgwNDBFMTYzRjI4NDcwNEQ4NworOjEwMzY1MDAwNzZEQTJGMUUxRUZFODVDOEQ4NkZCNUFCRTI0MzgwOEI4RAorOjEwMzY2MDAwN0E4N0Q5Qjc5RENFRkIwNjVGOTg5Qzc0NDZFNzBERjUyNworOjEwMzY3MDAwQ0Y2OERERjk3NTk4OTg1QzMwRUYyRkJEMjZCQTdFNDc4QworOjEwMzY4MDAwQTk3QzhEOERDRUM2RDlENTc1MDRERTc3NUU1RkU1ODdDMgorOjEwMzY5MDAwQjVBRjE5REVFOUFEQTJGREFEMDUxREI4NUVFMjIzQkVGMgorOjEwMzZBMDAwNDE3NDVDN0I4MTRBQTYxNzAyMUM0Qzg4RDdEOEY5NEMyMAorOjEwMzZCMDAwMDc3OEY3MDEzQ0ZEREQwQjM4RDFFOEYwQzNEQjNGQjAwNAorOjEwMzZDMDAwNTZFQUZBM0ZBM0QxODdDMEU4OEJCNDg0QUQ5MzVDRDFBRQorOjEwMzZEMDAwRjZBN0I0NzYxQkEzMUY2MjM1QjY2Rjg4QTE2MzkyOTlEMworOjEwMzZFMDAwQTBERDRDMDE4REY4MTI0M0RCMDU4NEJCNzU3MjUxQ0YxMAorOjEwMzZGMDAwNzlCNzg0REY0MjNFNzBGQUMyRDY0MDlDNzU1MTNFQjEyNAorOjEwMzcwMDAwODJEQzQ5MkExMTdEMDBBRjM1QTMyOUJGMTQ0NkQ3Nzk0MQorOjEwMzcxMDAwMzlCRTZCRTY3MDU5NUQzMkQ5MDVFMzVGNEU2RTE1QjU2MworOjEwMzcyMDAwOEIyNDVDQzA2NTI2RkRGRkQ1MkZEQkU5Q0NBM0Y1RTEzQQorOjEwMzczMDAwRTExNDQzRkQ5QTQzRkQwQ0ZENDc3NEU0MUFEQUFGM0RGMgorOjEwMzc0MDAwMzJENEQwM0VBQUIzRDg1MEZGQzExN0Q3MTlGQThGRUVBMgorOjEwMzc1MDAwMkEzN0Q0N0YxNEI5RDlEMEJGOENEQzY2QThERjYwQkQwRQorOjEwMzc2MDAwREJEMDdGQUM2N0JBQTFGRDI2RUYxQzQzRkI3OEU1NDFCNworOjEwMzc3MDAwNDNGRDk2ODI4NzBERkQ2RkY1MzUxOERBN0Y1Q0JBQ0E3NgorOjEwMzc4MDAwRDAzRUM5RkZBOEExN0VEQkI4MjcwREZERUZBOEQ4NkFGRgorOjEwMzc5MDAwNjhCRjczQ0E3Mzg2RjZBOTgxMTcwQ0Y1NzlGNkMwNTExNAorOjEwMzdBMDAwQzBDRkREQjM3RTYzNzhFRjVGNkE1RTM3RDQzRjI0NjRCOQorOjEwMzdCMDAwNUMzQ0ZDMTI4MUM5MTk0QTQxOUU5MzU3RjFGRTU0QzRFNgorOjEwMzdDMDAwNzk4MEU2ODA4RUZCMzAzQTJERDg5QzQwNEVGMkY2NjcyOQorOjEwMzdEMDAwQjdCRDZGOUQ2OTkwOTM2NjQ2QzcxOUFDN0Q2N0U4RkREQworOjEwMzdFMDAwRjhFRjY3NzEzRTIxMURENkM5MkU3RDNCOUJENzU1RkY1MworOjEwMzdGMDAwQTBGMjE1REEyNUY1M0JDOTU3OTdDNzg3RkQzNUI5NEFCOQorOjEwMzgwMDAwRTk5QjkwRUIyODdDRDVGRUFBOEFERkEzRTM1MTc5Njk3NgorOjEwMzgxMDAwNjI0QjI2QjU4NEM5Mjk0MjFFQzRFNzlBREUyNzk5MjQ0MworOjEwMzgyMDAwNkNBMkUzMzZCODMyMzdBRjA0OThEMEIxQTUzNEE4MTdFQworOjEwMzgzMDAwNkU4MUJBQThGODQ5NjcxQ0I4OUEzQ0IyMDE0RkIxRjA0MgorOjEwMzg0MDAwMjVDRTE0NEFDQ0JEQzk1OTE1RTFBNzhFMjUwNTEyN0M5OQorOjEwMzg1MDAwNUZCMEZCOTZEMkY1NEEyNEQwNEZBMENGMkY4QTAxMkYxQworOjEwMzg2MDAwNEM3RUIxNDlGRDdEMjAyN0RBN0ZFOTY4RkE0RkU4N0Y3OQorOjEwMzg3MDAwNEMwOEQ1NjM3RjA1RTFEODUwNDRGQ0EwMzdENDBDMzlGRgorOjEwMzg4MDAwQjQzRDA3RTE2OTAxNzlBMkJENDcxRjI4OUQ2Q0JFRUFERQorOjEwMzg5MDAwQTU4MTg2M0E5QkVGNjVFQkRGRTQxQkVCREFCODNGMzc5NworOjEwMzhBMDAwQzI5M0MyMTlFQUY3RjE0QThGNzVGQkU0MjhERDlBQTBBQQorOjEwMzhCMDAwMUZBQjJCQTI0MDJFQTExQzM0QjY2QkRGQjk2ODczMEY2RgorOjEwMzhDMDAwMjM0OTE0OEY1NjU2MkVCNkJCQjc0MDc5RDE5NjFEMjI4OAorOjEwMzhEMDAwNkU0MjBBQzU0MDM5QzA0RDJENjdGMDUxOEYzQTQyMERGNgorOjEwMzhFMDAwMzg1RUNEQjUxNTQ1MDBERkY4RjYwMjIxRjU4QzNGM0U3OAorOjEwMzhGMDAwMTkyRkVBRDc5MTA4NkYwRDYwQjdFNUVCRTgyMEQzODc2MQorOjEwMzkwMDAwNzI5Q0FFMUFGNTVCNkNGRjNCMDU5OThERUZBNEE4QTJFMworOjEwMzkxMDAwRTM1QjA4QTNCMTI0NTNFMDRFNjEwNEFDQjY4MjQ4Mzg5RgorOjEwMzkyMDAwNEYxRkE5NDA3QzhEMjM2MDk3NUEzNTc4MDY2NzYyREQ2QQorOjEwMzkzMDAwQzlFRENDRkRBRTkxNDcwMjE0Q0ZBQkZEQjIwRkM2QUFDNAorOjEwMzk0MDAwMTQxNDhFMDc5RjE3RjQ4MEE1NTQyNDJCNjk2REI1RjJDQgorOjEwMzk1MDAwQkUxNUY4QTMzOTQ3Q0UwMEI5NkU5MTZBODg4N0Q2MkQ3NworOjEwMzk2MDAwNzk5NDBGRTJFODkxMDVERDcyRTIxMTcyMjU3NjcxMkNFRgorOjEwMzk3MDAwOUUwQUU4RUI2QzFFMDRFMUE4Q0QzRjk4RDU2MUNEMDUwOQorOjEwMzk4MDAwQkExQzRERUQ2MjNBRDVCNUQ3RjdBRTVGOTY3MUY4QUU3OQorOjEwMzk5MDAwMDJCQjk4OTY2Qjk0Qzk0OTA0Rjk5NjRDMDVGQTZFQ0UxMQorOjEwMzlBMDAwNDkxNzkxNEYzOTlDQkFFMTkyRjM5MTE1Rjg3NDA1N0Y0QworOjEwMzlCMDAwN0ZCNUVGN0RCNEQzNTc2ODdBM0MwNjhFQ0RDMzhGMjM5NQorOjEwMzlDMDAwN0NBNjA5NEMxRkFGMkFCMjRGMDlDNTgxQ0IzNEMxOERFQgorOjEwMzlEMDAwRURDREMwNTM2OTY4NUYzMUZFOEFBMTE3REFFMkFEQTQ2QworOjEwMzlFMDAwRUQ1NkM1NTNCQzkyOEUzRkE2NDg5QTBBNzRFMTJBMjUyQgorOjEwMzlGMDAwOEEwNUY5RDdFRkNDQTBERkI3RjNERTkyMjIxQUU0ODc2RAorOjEwM0EwMDAwMkI4REQxQURGNTEzMjFBNEQwRkU0RTJGRkI5RUM1NDlDMQorOjEwM0ExMDAwNDI3RTdDN0ZBMTAxMkZGNkQyQzAwNDMyOENEQTQ5RkZBRQorOjEwM0EyMDAwMzBFMTdCNzQ4RUNDOEUzODNDMUVGOUQxRUM2MUVCMjRGNgorOjEwM0EzMDAwMDUwQzRGMUVGQUJGNEJCOTc0M0M0NTM2RTg4REE1NjVBMQorOjEwM0E0MDAwQjIyRjRDQkZCM0Q4RUQ0NDdBMzJFQkYxNEFCRkVCRjg1QQorOjEwM0E1MDAwRjY4NTBBMTg3Rjc5RTYwM0Y2QTU3NEZDOEI2NTREQ0JENQorOjEwM0E2MDAwODEyRDREOUY4Q0ZGMTJGOENFMTREQjNGNkJGMjFGMDZBOQorOjEwM0E3MDAwQzZFMTAzQUQ3NDc0QkE0OTM4MTUwNkI4QTc1NzNBNzA1MQorOjEwM0E4MDAwN0ZCMkY5RUQ4M0JBNzlCRTJBQjhEMjUwQkU1RTRCQUU5MgorOjEwM0E5MDAwNDVCOTcwOTlGNzJGRDY4NURFM0UzODA4RTEyMTVFMDlEOQorOjEwM0FBMDAwM0QyRjhCRTFFQkE2MUM0RDZGQTlERTQ5M0FCQkVDODJBMgorOjEwM0FCMDAwQzBGNDFBNTFDQjEwQ0UxMkU3RTdBNkQxQTQwQkVDRDY3NgorOjEwM0FDMDAwMzUzOUIyNTI0RkJCNDhBNTcyMTg0ODA3RkVCQUU4RjcxRAorOjEwM0FEMDAwQzEzNjIzMjBBRjk1QTYwRUY2RkNBNzA2QjlCOUEyRUYxMgorOjEwM0FFMDAwNDQ1RkI4MTdCODQ5NzkzMUZBRTYzMkVCQUYwNUY4RTkyNworOjEwM0FGMDAwRkE5RjAwRjgzOUEyRjBCMzkwOEFBNDMwRDA0QjcwOUNBMgorOjEwM0IwMDAwNjExRkJCQkNFQzIxMjU0Q0ZGQjlCQ0RGMkZGQ0M3ODg3MworOjEwM0IxMDAwMEU4RTNGQTI3Q0E4RTMwRjRCNjY4OEU4QkZBRkM5QzVGNQorOjEwM0IyMDAwREI0NDdGMTdDODYxOTNFQzQzMzk0NTcyNjVEQzhGQzQ3MQorOjEwM0IzMDAwQ0VBRjQwNjRGMjI2MEE2N0FCNDQ3NEZDNDEyNjg0MTA4MQorOjEwM0I0MDAwRUVGNEFGQzI5QUNFRTE0N0ZGNkNERTM3RkYwMUYwQTM3RgorOjEwM0I1MDAwM0EzQUVDMTg4NkNGMUJBNTYyM0E5RjM0QTIzQUFFQTYzOQorOjEwM0I2MDAwRUY0QjQ0ODI3QTk2OTg4MzdDNEJEQkM3QzgyOUMwQkY1MQorOjEwM0I3MDAwMzdGQTQwMEUzNkYxN0QxRkYxNkNGNkVBRURGMjJDOTEyQQorOjEwM0I4MDAwRTEzNURBMUVGMkRFNjE2ODY3RjY0RTkzNjZENzdCQjZFMgorOjEwM0I5MDAwMUFFOEEyRkJGRDY0MTI3N0ZGRDE0NzY0NzY3Njk2RThCNworOjEwM0JBMDAwRTFGNEIzMTVGNzZGMkJEMjI2NDQwMDBEQjY4QzFCN0RDNAorOjEwM0JCMDAwOTVDMEFGMUU4MjcwRDBGNDg0QTYxN0E4QkVDODEyRkJCMQorOjEwM0JDMDAwNDRDNzkzRjMyQTg4ODBFRDQ2RkQ5QjUwNUVDN0U4NURBRAorOjEwM0JEMDAwNUI4MTUxMEUxMEJEM0Q5MzBCRkZDREY0MjBCRDkwNTg3RAorOjEwM0JFMDAwN0RDRkNCOEE5QkFGODhBRjdBRTg0QjEyN0ZCRjM4NDkzNQorOjEwM0JGMDAwNjQ3Mjk4QTg2OUI4N0U4REFGMDhCNzI3Q0MxQTVEMTA5QgorOjEwM0MwMDAwNDZBRjZFRkU1RDE5RTYzMzEwRjAxQ0MyQzExRDc0NUIzOQorOjEwM0MxMDAwMDU3NTE3QTlDMUZBODVEMkUyMzBDMEM5MjI3NTM2MTNERAorOjEwM0MyMDAwQUUxRkQ1OUMzOEZCMjhFRTg3NDlCNDhFQjVBM0UzRUJENQorOjEwM0MzMDAwODczMkQxOERGODM0Mzk2QjQ4MDBFOUY4MUVCNDAzMDU5QQorOjEwM0M0MDAwMzU0MDJFQTEzRDE4RTQ3QUQ1RTcwNTNDMkVBRkFCMjVEMworOjEwM0M1MDAwOUZEMUM1RDgwRjhDQzdGREI5OTRFOUY3QzNGRURFMDQyOAorOjEwM0M2MDAwNDQ5MDQxRkZFRjJDNjFBNUU0NTNGNEY0RDk4RDQ3QjJBMQorOjEwM0M3MDAwMTRDNzMzNTNCMEMwM0FDRDRFRUIzNEQwMDM2NkE3NjdCOAorOjEwM0M4MDAwMTI5NjA1NDM2NzBBNTAyNkRENTgyQjIyNUJDNUE3MjdFRAorOjEwM0M5MDAwNkQzQzRBNTdCMzQ0MTgyRjJEODBGQzJDNzkyQUIwMjQ1MAorOjEwM0NBMDAwQ0UzNEI0NUY2OTdGQTUyMkVFM0MzODFERjA3RTA5RTk3MQorOjEwM0NCMDAwQUU5QjZFMzQzODI4MzI4QzE3NEI0RjM2MUZERDMwODg2MAorOjEwM0NDMDAwNThFRDgwRjlBNkYzRjlBNkRGRDNCNDEwNDBFQzI0QUE4RQorOjEwM0NEMDAwNzUzMDg1NTE3QUU3MzRENDdCNEVBRTdGMUEwQjhBOUJDMAorOjEwM0NFMDAwQ0I2OTNGNzcyMTQ5QkU5MTk2QjZCQzJFOUMzRkVFNkJDNworOjEwM0NGMDAwRkJDMTc4NzcyRjJENDNGRjA3QzE3QTYzN0Q0NTE5REIyMAorOjEwM0QwMDAwMUZGODYzRUM1NjUxOTEzNDNBQ0JFREQ1REUxMTJFNTlBNAorOjEwM0QxMDAwN0FCRTlGNjhGREIxRkE5NDkwMDdBRUNDQkU5QUMyRjgwNQorOjEwM0QyMDAwNTFBNUZGMDM3RUY0MTAxRDdGRDI3MURDRDcxQkY1ODFGNgorOjEwM0QzMDAwMzNFNjNCQkYwMjU4MjJCQzE3RkVBRjdDMkY4OUQ0NUIxMQorOjEwM0Q0MDAwMTU0QTBBNjY0NUY0ODQyODlFMjg2QTkyNjExRjY1RjMyNQorOjEwM0Q1MDAwRDNGRDFEQjRBNzc1RkE0NUU1RjI3ODY5ODQ3RDZDMjEyMQorOjEwM0Q2MDAwQTMxNzNERkRCRkNFRTU2QkRGN0IxNzFENUI0NkM3QkRDRgorOjEwM0Q3MDAwRTA3M0ZBQTA1NzNBMTVBN0E5QzUzREQ3QjMzMjQ2RUU2RQorOjEwM0Q4MDAwQUMyQzU4OEY3NEQxNDBFOTI4MTdGNjA3MDUyMkVBQTUxNAorOjEwM0Q5MDAwNjY2NThCNDdFRjU3Rjk1QzkzNDMzREU4ODMyOEQyNDgyQgorOjEwM0RBMDAwQkU5RkE0RjAzMTI5QTJERkU2RkVGRUY0MTE2QjNGNUQ1OQorOjEwM0RCMDAwMjk3REQ4QTcxOEYxRjE1REYxNzVGRTNCRDJDN0Y3RkQ1QgorOjEwM0RDMDAwOUU4NkQ3NDRGMjhDRTIxNUVERjFDQkY5OUY3QUUyQjVFRAorOjEwM0REMDAwMUVFNUFFNEQ4OUVGQUZCQ0Q4OEQ0RkI1Njc2OUYwQTczMgorOjEwM0RFMDAwMUFGRDAyRDZCQjlCREFFMkQ5MkQ1QTY5QkQyNzc2RkZCMAorOjEwM0RGMDAwQ0ZDNkI1RDU5QTk0MTM2MERGNEExRUMzM0U2ODg1QjIxQworOjEwM0UwMDAwNUUwNTdCRkUwMkQ4RTU2MDFGMDZDQkQwM0Y0Q0YyOThFMgorOjEwM0UxMDAwQkYxNjA2MTA4MTVGMTQ3Rjg4RUQ2RjQyNDRBRjA3RTUzRgorOjEwM0UyMDAwNENBM0RGQ0Q5NDY2MzdFQUVGMjlBQUEwOUZCRkFENTYxOQorOjEwM0UzMDAwQzY3OTU4RTE3QjY5RThDRjBEQzE3NzREMUUxMkI2QjkzRQorOjEwM0U0MDAwQTNGNDBBOUY2MkZFODA4N0FGODgwRTM0N0EwNTMzOTgwOAorOjEwM0U1MDAwRDFBQkYxQkRFNTk5QzUyNDFFRkU3QTdDRUY3NkUzN0NGQgorOjEwM0U2MDAwMTNDQUE1RDhGNzlDOTI3MjUyNjdBNzI0N0U0RjIyMjdDNworOjEwM0U3MDAwNzVGNjRFQjkxNkY3RTE3OEEyNzZERUNCNDIxMjk1MDdCOQorOjEwM0U4MDAwREU5RjkwMDA4NTZGMTMzNDY1ODA3QzIyQThDRjlBQkM5QQorOjEwM0U5MDAwQzUyODE3Qzg0RTIxNjZERkFFMzBGQTUxNTJCMEJGNjg1MAorOjEwM0VBMDAwNjU3QTUzQUIyNzlFMEZGQjZFMzQ4RUE0RTBCRTM2NTE2RAorOjEwM0VCMDAwRkY4NkJBRDJDNzI0QUE4QzFDQjVBRkI3NEExNDhGOEQxRgorOjEwM0VDMDAwNEJGRDUzMkE3MDdGN0JBODU1MUExNEVEMzdDRkE0RUQxNAorOjEwM0VEMDAwREJBOUZBMUMxOUE1Njc4OUQwN0UwODM3OTE1Q0JBMDY2MAorOjEwM0VFMDAwMUU3QTg4MzIxMkEwQzlFOTlCNzQ2MDNCN0RDQUYxNDhGMgorOjEwM0VGMDAwODRFRUZEMEMxREIyMERENjg5RkU4OTIzRDgwRjA2QkFCQgorOjEwM0YwMDAwODRGRUE2NEU1NkE3MkY0MjdEOTVEOUVGQzc3OTQ5NDEyOQorOjEwM0YxMDAwRUIwMzE0NUVBQjZDQkNBRUYwN0EzMkFGN0I3ODNEODdCRQorOjEwM0YyMDAwRDdDOTdBQUMzQjY0NUEwN0ZFMzUwNzNENThCN0YzN0FEOAorOjEwM0YzMDAwMEVBRkE3RjA3QTMyQUZFN0YyQkFCMDFFRUJBQjY0MzY0MQorOjEwM0Y0MDAwREU0QTI5QzRDNkI3RjNCQUMyRUIyOUJDRUVFMUY1NUM4MAorOjEwM0Y1MDAwNUUyNzVCRDhGNzJEQUM2RTM3ODdEOEY4MEU1RUNGRTFDMQorOjEwM0Y2MDAwRjU1NDVFNEZFNkY1ODFCQzJFNkNDMTdBNDI3OTk5NDdEMworOjEwM0Y3MDAwRTE2RjkwMEYxREQxM0EyQTExMEVEN0VFN0E2NzRDM0JCNAorOjEwM0Y4MDAwQTM5NzU0ODE3MDNCMkM5NDAxNzZEM0ZFRDlCRkM4MDAwRgorOjEwM0Y5MDAwN0ZFODg2NjNENzdBNjEzRkQ2NzBBQjQ2NEYzRTk0OUZFOQorOjEwM0ZBMDAwMjRGMzE2OTQ2MzE5N0NBQzg2MTk1QkQwMEZEMTMwNEI4NworOjEwM0ZCMDAwQzZGRDI3RTFGRTk5Njg3QkYxMjE4NUI2NUYwODg4M0U0MgorOjEwM0ZDMDAwQTA5QjI3OTJFM0ZCQzk3RTUxQzdFMjk1QUREQzRFNUUxNAorOjEwM0ZEMDAwQzdFMzk1NkIyMTVFMDlGRTE2MUVBRjVDMDVGMTRBMEIyNworOjEwM0ZFMDAwRDBBOTBGRUJDQjIxNUU5OTBGRkI2QjE2QUY2QzgwNzhERAorOjEwM0ZGMDAwMjVBRDNGMDdGMTRBNUEzRTBCRjE0QTVBM0VDM0UzOTVCRAorOjEwNDAwMDAwREI3OUJDNzIyQkM0MkI2OUI5MTlFMjk1QjQ3QzlBQzdEMQorOjEwNDAxMDAwMkI5RkUyRjFDQTI3NzlCQ0IyNkQ0NkYxNUI3OTMwRkY4NAorOjEwNDAyMDAwQjk2Q0ZFODlGMEQxNzc4QTUxN0VGNkE5MzBDNjJENTIzRgorOjEwNDAzMDAwQzZBNDE4REEzREQ3MUJFMzE2RUU5MjVDNDNERDU5NjgzRgorOjEwNDA0MDAwOEM1QkQ4RjM4QTBERTM1OTMzQUYzM0I0Q0I2OUU1ODY4MworOjEwNDA1MDAwQkFFNDM0QzYyRDBBNzc0RDM2RDQ4NzZFQkJDQjUwMkZDOQorOjEwNDA2MDAwRDg1ODY5MTg3RjcwRUJGRDg2RjZCQzk2MDcwQ0VEQjk0MQorOjEwNDA3MDAwOEQzRjM3RDQ5NTI1RjU4NkZFNEY5QTcyOTFCRUIyMTdDMworOjEwNDA4MDAwQUQzNEY0Q0I5Q0JCREVEMDZGOUVERDdGREEwNEYyNkVFNAorOjEwNDA5MDAwNDJEQTE1QzkzN0YyQjU5QUFFOTc5N0IxRkFDMTk0NEQ4NQorOjEwNDBBMDAwRkM3RUQ0NzM0QzFGQTE4RjE2RkM2QTU5Q0M3RjY1RkQzMgorOjEwNDBCMDAwRTRBNjQzQjA3RkIxRTQzMTNEMTVFQkFGOEExRDRGNzZFNgorOjEwNDBDMDAwRUUzOEEyRDJFRjk0QjkwRjc5M0I3NUZDNDhCQ0JBRjczMQorOjEwNDBEMDAwRTg1MjkzMjQyNjI3NTczRUMyRjZFNzJEOEZDNERGQTc2OAorOjEwNDBFMDAwQTMyNkEwRUI2OEY5MzYzRTFGQjgyNDkzNDE4RjY4RkJFNgorOjEwNDBGMDAwOUE5NjQ3MDRFQ0ZGN0RDN0Q3REE2M0M3OEQ3RThGRDJDRgorOjEwNDEwMDAwREU0OEZEN0UzOEM0RTc0Mzc1ODRDRTVFMzA3NzI2NEZBNworOjEwNDExMDAwMjdBOEU3RDk3RUQ5QzRGRDNCNjUxMzRCOEYzNTUyN0U2NgorOjEwNDEyMDAwNTlFNjIxM0UwQkFEMkY3Mzk2RkI5OTVENDJBRDczQzBFRQorOjEwNDEzMDAwQzU5MjVCNzE1RkFGRjVEN0U2RDVFODlDQ0NFNDBCRDFCNworOjEwNDE0MDAwRjkyRDUxNEVEOTBEN0U4NTY1NjlCRERCNkY3MkM0ODQzMgorOjEwNDE1MDAwRkUzRjUzNDQyMDYxQUE5NzY0QTk2MjVDMEU5RDhGN0M0OAorOjEwNDE2MDAwRDhFNDVCNEE1MDNGQzVGNTBGMTBCMjlFQzU5REJENDZEMQorOjEwNDE3MDAwQkY2OUUzOEMxOEY5QzdGMzMyQ0M3Q0ZFMEQ2OUU1RjgxMgorOjEwNDE4MDAwQkNEMUQzRkJCQzJDMzAyRjk4MEY5Rjk3MzlFMkMwRDIwMworOjEwNDE5MDAwMTRCMUUxN0M0NzQ1NTJCMTVFMUE0OUM2RjJEQTQ4N0Y1NAorOjEwNDFBMDAwMkM0NzQ2MzJCMDFDMTExOTg4NjU0OTI0MDdDQjZCMjI3NQorOjEwNDFCMDAwNTdFMTdCQzU5MTIxNTgwRThGNUM4M0NGN0Q5MUUxNThFQgorOjEwNDFDMDAwNUUxREY5MDEzRTFGMTYxOTg1NjU1MUU0MDY3QzVFMThENworOjEwNDFEMDAwMjlDM0YyQUFDODJERjg3QzY4NjQzQzk2NDMyMkI3RTE1MworOjEwNDFFMDAwRjM4MkM4MjQyQ0YzMjM3NzYzMzkzODMyMTVDQjQxOTFGRAorOjEwNDFGMDAwRTk1OEU2NDVBNjYxMzkzMDMyMDdERkNCOERDQ0M2MzJBRgorOjEwNDIwMDAwMjdGMjIwM0U1NzIyMEJCMTFDMTA3OTE4Q0JFQ0M4Q0ZGNworOjEwNDIxMDAwQjBDQzhBMzQ2MDk5MTk1OThBNjVGRkM4MkE3Q0FGNUY4RgorOjEwNDIyMDAwNjQwNTk2MTk5MTQ3RjFCOTM3QjIwRUNCRjRDODA2MkM0NAorOjEwNDIzMDAwOTMyMzVCQjFERDEzRDk4QzY1NTJFNDM5N0NFRThFM0M1RgorOjEwNDI0MDAwOEJBNTJCRjIwMjNFNzc0NkY2NjBFOTg4RkMwNjlGREJFMQorOjEwNDI1MDAwMjNBRjYwNjk4QkJDOEVDRkFEOTFGRDU4NUUwRTRGOTczQQorOjEwNDI2MDAwQjM4MzRCNEYxOEUzQ0YyMzNGMzFDQUYxOTJDM0M2Rjg1MworOjEwNDI3MDAwNzNGMTNCNDYzOUVFM0I2ODhDM0YwRjdCRDUxODdGMkVBMAorOjEwNDI4MDAwREM2QjhDM0YwRkRENjU5NEUzMDVEQjhDNzI3Q0YwQzY0NAorOjEwNDI5MDAwQkIwQ0ZERjM1QTJCMERFREI5MkRGNzFCRTU3NEEzNTFBMworOjEwNDJBMDAwOEU2NzJGRjlCOUExN0ZFNkEyN0E0MzdCQkZCOTJCMERBOAorOjEwNDJCMDAwRURERTE5NDZGOTlENEU5RTMwRUNEMzNDNjNCNjE4RjUwMQorOjEwNDJDMDAwREFGNUJGMzRFRURCNEE5RThGRDlENzg0NTBCRUQ4MEJDNworOjEwNDJEMDAwRkZENUYwOUUzNUVGNDA4QzVDNTY5OTdDOEFGMUI3MDM5MAorOjEwNDJFMDAwNDgyMEJFQjk5OEQ4N0RCMEFGODlDNTY3MEE5NzA3QTk5RAorOjEwNDJGMDAwQzA3N0I0NENFMzdDRDcwN0Y4OEU5NjI5QjdDQ0Y1MDI4QgorOjEwNDMwMDAwM0RBNDRFMkM5RDA2NzZDQ0M1NjM4MjAyQkUzMjYxNjIwRQorOjEwNDMxMDAwNkQzRUM0N0I1MkZBMTM4Q0ZCMTI3NUM4MEQ3RTVBNkYyQQorOjEwNDMyMDAwQ0FFMDc1RkE0NDgwN0ExNjYxRkUwNkIyQjQxQ0ZDNkNEMQorOjEwNDMzMDAwNEQzOUFDRkU1NkUzOTI3MkM4OEI2OTMyRjM3NkI1QjE1MworOjEwNDM0MDAwMUNERkI3QjFGQTkxQzYxOUY1RDA5RTkyRTRFQkU3QTM1MgorOjEwNDM1MDAwRUY2RDM1Qzc5N0Q3OUY0QTJDQkVENzVGRjJGRjQxQTJCQQorOjEwNDM2MDAwRUJGRjZCNTlFNzQzRTA5N0ZCNzc2QkUwMDM4OTNFOUZEOAorOjEwNDM3MDAwNkIwRDBDODBEMERBNTk3M0UwMTk1MDFEQjk4MkZGMzBGMworOjEwNDM4MDAwRjQyQjEyRkMxRjRBMjhCNzhEN0VENjA5QTAzOEU5RjMxQQorOjEwNDM5MDAwMUNDOUZGNDc2OEQ3RDZERkU0RUE3RDFFRUY3MkJERDRBMworOjEwNDNBMDAwOTQ0QzcwOUZBOTNFMjZGM0JDMTI4MkZBNTJGMzZCM0RFNworOjEwNDNCMDAwRUU3MEEzQkM1RkZFOThCQzA1RTI1MkU2Q0NGNEU5RTBFNworOjEwNDNDMDAwNEY4MzNGODNGRTY4NkQ1QTA4N0U3NjJCRThBMTgxMjBEQgorOjEwNDNEMDAwRTVEQkIxNzQ5MjBFMkNEREE0MEI0QjBGNjQxMjBDOEMzOAorOjEwNDNFMDAwQUVCQjdCQkQ1OTZDQkQxNDBFNUY0QkI4OEZBOEMxRkUzMAorOjEwNDNGMDAwRjU4RTg5QTVCMDFFMEE4NzBCMUMwRTdGOTdGQTI0ODZCRQorOjEwNDQwMDAwMDNGREFCRjA4RTY0MkU1MUI0Mjc3NjA5MDY3RjY2OTJDOQorOjEwNDQxMDAwMjk0MENDM0M4RTBBQ0U5OThDMTkzRURDOEZGRDQ5RjJBNgorOjEwNDQyMDAwMjAzRDZBRjBBMzdGOEI1MjQ2NDZGMzAxRTg3QjU2NzMyQQorOjEwNDQzMDAwOUY5RUUzNjlFMzIwQzBFMEZCNUMxRjZBRjQ1QzlCNDA0NQorOjEwNDQ0MDAwM0Y2OTdFNkVBMkRFRkE5REUyNERCRjk3QzVCOERGMzFBRgorOjEwNDQ1MDAwNDkzRThDRDdDNkJFMjczOThERjJDRkVDMEM2MDFFODQ0NgorOjEwNDQ2MDAwMkNDNThGRUJDQTE2MUVBRkRBMzhGMThBRTJEQjNCQjhGNworOjEwNDQ3MDAwOUQ0RjFBNkZCREEyRkU1QkI0NzU1MzRBODBGRTU5MUE1OAorOjEwNDQ4MDAwRDc2RkJDMTVFOTZFMTA3RjNGMEJFQzNBNEE0RkFGRkY3OAorOjEwNDQ5MDAwQjlCQUJFMDVFODBGNjJEMkYxRkMwN0FEMjJEQTgzNTk0MgorOjEwNDRBMDAwMEJBOUUwQzk4OUMyM0JCMzkwREE4M0MzQTJERkNENUMxQworOjEwNDRCMDAwNjRGNEJGODQ2NTE2NUYyMUFENTcwNjdGMkRBRjMzOEI0MworOjEwNDRDMDAwMTJGQ0JGQTZGNDlDMDdEOTM2OTFBRDg3Qzc1MUE1MEQ0NAorOjEwNDREMDAwMTVDRDM2MkE3RjA2Mzk1OTNEQjNCNUY3RjkxMDFFQjcwOQorOjEwNDRFMDAwQzhFNDc0OTVFOUU0N0U5NzlEQzY3MTdCN0NEN0Y0Q0VEMQorOjEwNDRGMDAwRjA3ODc5NUUwOUJGRjMxREUzODAzM0NERjFFM0E4MTRCMgorOjEwNDUwMDAwNUY4OEVGODFEQTNDNkFFOTFGOURENzYwM0U3RjZEM0M5MgorOjEwNDUxMDAwMkQxRUE4RDUyOTNFQUQ2MDc3MzdCNTU0QTI5REQ1RTRCMAorOjEwNDUyMDAwNjVGQTlCN0M0MzQ3MUY4OTJDNEZFMkVEQ0I0MjFDRkU3MgorOjEwNDUzMDAwOUJGODdFMzJBNDk2NjNGRTIzRDk2NUE0NTM2NUE5NjREMworOjEwNDU0MDAwMEZBMEZEMjZBNjQwQjlCOTkxRjVDQjU5OTY2NjA3Mzg1QworOjEwNDU1MDAwMzU3QTUyNTJBMERDNTQyQkQ2REIyOEREMzRBQUM0MEZBNgorOjEwNDU2MDAwQ0JDQUZFRDkwOTFCNkIzRjlFMEM2NTRFNUJENzVCRjkyRQorOjEwNDU3MDAwMTQ3RjM5MUVEMTI3RDFGOTY0QThFN0RGQkEwOUNBMTYxQQorOjEwNDU4MDAwQkYzNTA3RkM3MDRCMjRDQzIzQ0M2RTIzRjYwMkRBMkYwOAorOjEwNDU5MDAwN0IyRUMxN0UwNDQ0MjA5RENGOTMxQTFFRDU1NjYxMUNFQworOjEwNDVBMDAwRkQ2NzY2NEJENzUyMUJCRTQ3RkM4Mzc0RkQzNjcwRjAyNworOjEwNDVCMDAwRTUzNTNFNTAwNjZDOUFEN0UyOTkzQzBFRTJGMzg1QzQ4RAorOjEwNDVDMDAwMzc4ODQ0RkIzRENFQzc3MzQwM0I4QzMzODZFNTMxNkE2OAorOjEwNDVEMDAwRURFQjc4QkJBNUY2QkM5QTBGNjU0QkU3QkE5QkEwNUZFNQorOjEwNDVFMDAwQUI3MTlDQjVCQ0RGMjBBREJEQzREOEJFNUEyM0FCMjU5MgorOjEwNDVGMDAwQ0Y4NzYxMUM1MzRCRDc3QjM3QzE3Q0RBNThCRjZFQjk2QworOjEwNDYwMDAwQzVGQkFGRTJGRDYzRTVDNTYwNzg4RkZCMkJGNUYzNUM3RQorOjEwNDYxMDAwMTE4MzVGNEQ3RTg0QzAzRjkwMEZGODY1RkUwMThCNzU1RQorOjEwNDYyMDAwRUI1M0UwOEZENEZBMkQxN0Q4RkU0ODg5QzkzMzdEQzVFNgorOjEwNDYzMDAwQ0NFNDYxOTdDQ0ZDQjYxQTNEMjVBMjZGMzI1N0I3MUY2OAorOjEwNDY0MDAwODBCOEU1MENCQkIxN0U0RjhBNjExRjQ4QzZGNDMzQjYxMworOjEwNDY1MDAwNUY5RjZCNkMyRjE5NkFBQzE3MTYxQkVCNzlENzE5RUFBMQorOjEwNDY2MDAwMTdCQkZEMkY0MTFCRTY4NTczRkZDQjYwRkU4RDBENkRFMworOjEwNDY3MDAwOTU5ODg3MTJGNUZCRjlFREZBN0Q0QTI2RUZCN0FEQTZCRQorOjEwNDY4MDAwMThGOUE3QzFDOUY5ODdGQjY5MUNCQ0JEQTlCMEQyQUU5NgorOjEwNDY5MDAwOEZCRjZCRkNEMzBDN0UxMDBCRjg1OTU4REVGNjhFQjYyQworOjEwNDZBMDAwREVFMUI1ODlFMzdCMjNDRkFGNzk4MkUzQTk4REUzRTkyRQorOjEwNDZCMDAwMTdEQzhGMTNFNDdFOUMzNTNDRUZCQzg1RTc5REFGRTRBRgorOjEwNDZDMDAwN0U5QzQ2OUU3N0ZFMDJGN0UzRUNFMTdFOUM2RERDOEZEQworOjEwNDZEMDAwRjM2QkVFQzdEOUNERjNDRTlGRTM3RTlDMTVDM0JCQTY4QgorOjEwNDZFMDAwODJGRkVDNTlFRUNGNzk4NkZCNzNDNjcwRjlCRDYyQUNFMAorOjEwNDZGMDAwQUYxRkY4RjdCNjhFOERCRjdGMUVDM0U5RTJDN0UwQzhEMworOjEwNDcwMDAwRUMwMzdBREI1MzZGMDZCQUY0QjEzQ0VCOUM1QThGNjgyQQorOjEwNDcxMDAwMjkwMTNCOTdEMTY1Q0UyQzhGMjg5NzgwOURDQkVBOTNCQQorOjEwNDcyMDAwQjhCRTA1QkQ4Mjc5MzM5OTNDNkYyNjkzNkE5RDc0RUVCRAorOjEwNDczMDAwRkY4NUFFQUE0QUMwMUZERjc3OEE2NzM4Qjg0MkREMzJFQworOjEwNDc0MDAwRDdBMzBBRjFFQUUzMDY3REQ1ODAwMDcxMkRDOUU0NEZCNQorOjEwNDc1MDAwOTI0N0MwRjg2QzVFRjlDMUFFMDM5MEE3RThFQkU4Mjg3OQorOjEwNDc2MDAwMDc3NDBFM0JENDVFMEZGRDBBMEI4MzEwOTEyMEU2QjQ1NAorOjEwNDc3MDAwOTAwODcyNjk0NTk5MEZGRDZGNEY3RjY4RjI2RDgxMzEyNgorOjEwNDc4MDAwRDM4ODgxMkVFODFDNTE5RkU1RjFGRDJDQjlERTQ4MTczNgorOjEwNDc5MDAwOTZDODI2QjQ5QjlCNkE1ODdFMDZFRDEzNzdGRkFFOTVBQworOjEwNDdBMDAwQzk3RUEzRkQ5MDU0NkFGNDgzMzUwNTI3RjdFQTk3RjY4RQorOjEwNDdCMDAwQkQ2QTdDN0ZEODVFRTNGRUFCQTlEMDk4MjcxMjVCMTY1QQorOjEwNDdDMDAwRUUxMjYzRkM1QzMxRUYzQjdCRkY3RTdFNjQyMkFFMzdGMgorOjEwNDdEMDAwMTE5RERGNjZBQTJDOTc3NTc5MTJDRUM4MEY3MTFGMTEzMworOjEwNDdFMDAwNkIwRjRBNjBFNzBEQzRCQzFBM0ZEOEJGNTI5RUM3MEY3QgorOjEwNDdGMDAwRkUxMjI5NEZFMUE1OEYzRkY3RjM3QTA1RDZBOURERjgyMAorOjEwNDgwMDAwNjMxODlGRTJDNTYwMzc5QTQ4MDA2MzIyMkI4NjEwQkU2QQorOjEwNDgxMDAwMUZGOTY3QkQ5RjJBRkYxNTc3MTBEQzRGNzg5QUVDMzc5OAorOjEwNDgyMDAwQTg0MDgzRkU5OTg4MUY5OUUzMjc1NUFFNzkwNkZDMUY5RgorOjEwNDgzMDAwNEZBRjE2MDlFMDdGNkI0QkVGRkNEQjIzOUZDMkU5Qzc0QworOjEwNDg0MDAwMzg1MkQ2MjI0RjMxRThCRDQ0RUZCNTJFMTJDN0M1OEI4MgorOjEwNDg1MDAwOEZDREU3NzRCRDZDRDE2NDBGRUE4RDgzOTdDRDE3OTgyNworOjEwNDg2MDAwMEZFQkQ3RjIwNUZBRENDRUYzMDVDRThDMzdGODk1NTM3MworOjEwNDg3MDAwQUI3QUM3RTMwNjJFQkZCNDdBMDY4OTZGQkZFRUUxRkNDMAorOjEwNDg4MDAwNEU5QzJDREY0NEEzRkJENDYxQkQ4RkRGN0Q2RTI3MjRCQgorOjEwNDg5MDAwOTIwRUUwMEIyOTgwRjJCM0NGRUQwMUNDOEIyNzE0NUY5MQorOjEwNDhBMDAwN0EzRTY5RkE3NkZBREJDMDg3RUEzQTk2QTc0OEZCODkyRQorOjEwNDhCMDAwN0EzQjRDOUI0Nzg2Mjc1QzI2NDBGRkZEQTMzMDdGNjNGNQorOjEwNDhDMDAwQjAzMzIwNDJEQ0JBNjkzRkUxREY2OTQ3N0JEQzMxQTNDQQorOjEwNDhEMDAwQzZDRkZDNjVFRDA0RkNGNjhFMUE5RjBBREYwNzdDNjFFQgorOjEwNDhFMDAwMUU1MjQ2Nzc3RkQ0MEZBQjgyMjJBNjdFMzQ5NDMwQkIxMworOjEwNDhGMDAwNTc5M0ZGMUE5RDM0Nzg4QjBGNDE3Q0ZENDI4OTg0NzE1OAorOjEwNDkwMDAwNkY2QTVGNURCQUE0RUQ2N0U4N0YwNkI3MzEzQTY4RUE3RgorOjEwNDkxMDAwNDNGMERDOEQ1NEEwODY4MTFFODk3RjFDQzIwREM4MUYwOAorOjEwNDkyMDAwRkU5QTVDM0ZGMUUzQjk5NDIyQTZGRjRENzBERTAzRkFENAorOjEwNDkzMDAwNDkxRDdFQ0M4MzBFNzg3QzkwQkY5OEQ1MzYwQ0Y5NENGRgorOjEwNDk0MDAwRjJENDA4ODBERjg3QzRDMDZFM0Q1Rjk5OUMyQ0ZGQUIxQQorOjEwNDk1MDAwMjlDMUI5ODIxNjJFNjdGQjI1QzBFQjg3QkMzRDU1RUVGOQorOjEwNDk2MDAwMTgwRjcyRjhFOUM3MjhGREM3QzlDQkY5MDNENzBCNEY1OQorOjEwNDk3MDAwQjU0RUZFNDM4MTEyRTU1RkFERkQ0RjYwQTRFOUU2OTVCQgorOjEwNDk4MDAwMTU5MTU5N0U2MURCNzdEQjA3OEMzNTEzOUU3RjY0N0M0NAorOjEwNDk5MDAwQ0YyQzU1MThGNjYxNTk2NkUzRjdFNDM0QTMzRkYyQ0EwOQorOjEwNDlBMDAwRTcyOUExNUMyMjg1MzcxQkYwOUNEQUFGNzdGOUE5RjFFMgorOjEwNDlCMDAwRkZDNUFDMThCQjIzQUYwMEU5Mzk2QTc3OTQyMzNENkM3RgorOjEwNDlDMDAwRjQxMjQ2MkY5QzlFMzQzREUyRUFGNEFCRTJDMDlFRjQyMgorOjEwNDlEMDAwQjEzMTc4QzAwNjc2QjI0NjY3MTY2N0M4MEY3RTAzODc4NgorOjEwNDlFMDAwMzc4Q0U5ODIzQTdBRjgyQkQwNDM1NkRCNDg4NEI3QUI1MAorOjEwNDlGMDAwNDRDNUU3RkJCOEZFQ0JBREVEMkFGM0M3NTk4NzY2REZBOAorOjEwNEEwMDAwQzFCRUNCNUIwQzVGODhEOUZGOTA4QTIwRDhENTU5NTk5RAorOjEwNEExMDAwMTBDMzAzQjVDQ0ZDMEI5OTk5OTdEQjZGNUQ1OUZDNUExOQorOjEwNEEyMDAwOEIyNzY3RDMzRkQ4RkZCQ0EyRTFGRDhCMThCRjk1ODdDQQorOjEwNEEzMDAwQUE3ODVEM0NCNUVGMTdEMzA1MzFBNzI3MUU2MkRGNkI1RgorOjEwNEE0MDAwRjQ5NDdCRTJDOTZGQzkxNDQ4QjdFOEYwMUZCQjhGOEY5RAorOjEwNEE1MDAwREQ2RjEzQkU3Rjk0QkJBQjhCNTAwRTVCMjY4Q0MzRjgwRgorOjEwNEE2MDAwNDhGN0JFN0JFMzQ0NUNCNzg1RTM0RjZFRDFFMkZCQjExMAorOjEwNEE3MDAwRkJDQUI5QkVERUZEQUFERjZGNUZFOUIzMThGMzRCQUYyNworOjEwNEE4MDAwMzgzRkY3M0JGQTI1QjY3MkJCMzU3NjdGMTEzQjhFRDg5RgorOjEwNEE5MDAwMTYxMEUzOUREQkM4NkYzM0MyM0RBRkM1NjhGRjBDRTM2MgorOjEwNEFBMDAwRkM5REEzMUFGREM4MDM2QUZCQzVGNzc3RjI3Q0I1Q0E2MworOjEwNEFCMDAwNTIwRDRGQ0E5REZGNDFFOTc3RjYyMTMzRTZFMTZCRkJDQQorOjEwNEFDMDAwNjBDREVGMzQ5QkU3QUQ1NUYyM0NCNjE5QTRDMjBEOEQxNQorOjEwNEFEMDAwNjc4OTg4RTc3N0NFOTJGN0RERDdFOEY4QTZDQUMyQ0UxNQorOjEwNEFFMDAwRDE5MTY2RjM3MTM4N0ZBMUU1NjdDRDBDQjJCQTM2OUZEQworOjEwNEFGMDAwRUEzNjYzQkQ4QTRDNEUwN0JGNkI1NUFCOTk0MDNFRDYzNAorOjEwNEIwMDAwNkMyMjFERUZENEU2NEZFOUY4MjcxNjk2ODc1QTRENkFCNgorOjEwNEIxMDAwOUE0MEJFMkRFMzc5QUY5NTFFMjJBNUE2MTAzMkVGQTVDRgorOjEwNEIyMDAwQTc0NkMyNzk5RTc5MTYyNjdGNEY1M0Y4MkIzQTdEN0Q5MgorOjEwNEIzMDAwQkYzMzI0MDM3RjdGQjZGNzlBOUZGQzgwQzBGQkExQTZGQQorOjEwNEI0MDAwN0VBMDNGOTNFMzlGODM5OERFNkM5Q0RGRTVFNjFGM0JFRQorOjEwNEI1MDAwNUZFRDlDNDZBMjc5NDgzQjg1QjhGOTNGMEY2QkZFQUZFRAorOjEwNEI2MDAwMkIzQzQ3QjIxNTgyNjIyMzEyOUYyM0I5RENGQjNCMkRGRAorOjEwNEI3MDAwOEM3RUZFQkJFRkVGRkU5RUVGM0Y3Rjk5RjlDRkIzNzZDMQorOjEwNEI4MDAwREQ4ODc5REU2OTM1MTUyMDU3QjU3Qzk2RjkyNEUwMDc3NAorOjEwNEI5MDAwNTdCQUU5RDU0OTZBN0Y0NUQ3Q0Y3Qjg1RkQzMjY5M0Y1MgorOjEwNEJBMDAwRDMxNUY0Q0JFQjdEQkM3MzlDQ0Y3RkJGNkJBQjBDRkMwMAorOjEwNEJCMDAwN0JGNjk3QzcyNjgyM0Y3MENFNkY0Q0M0NEFFOUUwREM5MworOjEwNEJDMDAwMkUxNzNGMkYxNjkyNDFFRkREQkZEN0U0MEY2MTNEM0MxQQorOjEwNEJEMDAwRjIzNjVEQkUyMDY2MTZEMkYxRTdGQ0RBODVGRUM0RkIzNAorOjEwNEJFMDAwOUZCNzg0MjZEMEY3RUY3RkYxQjM2MTg0QzJFMTVDN0Q4QgorOjEwNEJGMDAwRDc5QkZEQzEwRUZBQTVDMEYyQUZENENFNjFCN0QxRTcwNQorOjEwNEMwMDAwRjc0QkU0QkU4QTM4N0FBQjgzRjNDMTk5NTcxQzUzODBDMworOjEwNEMxMDAwQ0U4NDlERkJFRkM1NzFEQkVGMzQ1Qjc0NzE4RERGNUI4MAorOjEwNEMyMDAwQ0MwODdGREE4RjlEQzc3QTU2MDgwRDEyRDhGQ0Y0RjlBQworOjEwNEMzMDAwRTI1QURFREI5OTY3MDUzNkJGOTdDRDIxMUJDQzZGRTdDMworOjEwNEM0MDAwNjYzOTQwRkIyREQ4RjkzN0E0RUIxQjdFQkREQjBENzAxOAorOjEwNEM1MDAwNThGMEIyQzkyMDdGMTZFQzM0ODUyREMzQjAzQzY2NDFCNAorOjEwNEM2MDAwRkZCRERGMjk4QzA0NzgxMkQ0NTdGM0Y3Q0U5QjAwRjRGNAorOjEwNEM3MDAwMzBCRjdERDVERjRDNkU3OERGQzg1RjE0MkU3OEVFNjNEMQorOjEwNEM4MDAwQ0VDNzI2REYwNEE4QkZGMDhDMUJFQ0Q5RDMxRERCREQxQgorOjEwNEM5MDAwMDA1NzNBRUUzNDk5RDJENTBGQkZENkYxMjE2MUUzNDdFMAorOjEwNENBMDAwNTI3QThFMDcxRTFCQTBBRjA1RUQyQkQ4RjdGNkRFN0FFMQorOjEwNENCMDAwMEFFNERCODIxODNFM0UwREZGQzhFOEE5M0YyMjE2QTM5NgorOjEwNENDMDAwNUZGMjAyNzk2NzI0RDgxRDY0Njc2QURDRkNFMjZFRkQzRQorOjEwNENEMDAwQzFGOTdBQ0VFRTBCOUJFMDNDRjE5OUU3RkZCMjA5RUMwQgorOjEwNENFMDAwRkJCOUZGRkM2QUQzQzNFMDE3NzhDREU2MDE3OUI0RTBFNQorOjEwNENGMDAwOTcxRkJBODkwRUZFQTk1NjY2Q0Y5RjdCRjY5OTFENEY2NgorOjEwNEQwMDAwNTAzRTM5Rjc0NzBCREEzQkU3N0U3QjJBNUJBMUVCM0Y0RQorOjEwNEQxMDAwQjdFNzFGRTk3MEVFNzZEMTZGQzdGNjA1NzgyQ0RBNzcyMgorOjEwNEQyMDAwNDNERkRFRjYxQjQwQjcyMThCMUVCRjIxQzRBRkYyMzIzQQorOjEwNEQzMDAwRkQ0RTVGMDIwNzU4NTgxOTgzQTdEN0Y3QkU5RTBERjNBMworOjEwNEQ0MDAwM0M3QkM0ODJFNzZGMTZEMDY3QjVDNTgwQjc3OUE4MUZEMgorOjEwNEQ1MDAwQTBCRTg0QzI3QkZFQUVFNTdGMzMwRDhCMDc3N0I1QkY2NworOjEwNEQ2MDAwMDg2Nzg1NDhCODNGRjEwMkRFNkZGQkYxRTgxMjI4Q0RGNQorOjEwNEQ3MDAwM0UwNUM2MjM1RDI4REY2M0RGNUI3MDk4RTJGN0VBQzQ3NworOjEwNEQ4MDAwRjhCQzQwQkU5MTAxRkUwQjc2QUQ2MERGNkRBN0Y4NzRGNAorOjEwNEQ5MDAwRjdDNEU3NTlGOEM3QTg5RUY4MkNCNkM2RTI3M0VFRDM1RAorOjEwNERBMDAwNEY0MEUzREVENEI4NzkyNDFBM0VFN0VEQkJBMzU3QkJFRQorOjEwNERCMDAwNDE5MzBGOTc4M0YzMkM5RTM3RjU0RjhCQkZEQzBBN0MxMgorOjEwNERDMDAwRjZCQzQzRjUzMjNDODcyNkQwQjY3M0JCMkY2NDEzNEEzQQorOjEwNEREMDAwMjc1Rjk4QkJFRTA1MzlEOUY1NUI4QjY3MEI3RDdFRkZBRQorOjEwNERFMDAwNkYzRjQ2QkUzQkI3RUYzRDU5NjFFNzRGOUMwMkI1MkI4NQorOjEwNERGMDAwQ0U5MUVFQkYwRUIwMzNFNkYzRDhEQTgyNkRBRUIwQzUxOQorOjEwNEUwMDAwMURDNUQ3RkNEMEE0NzE4QTFCOUYxRkMzRTcyMUM2MEYwNQorOjEwNEUxMDAwRjM0M0ZCNkYxN0UyRTA2Rjg5MzU5N0U5QTc1MDFGODREMgorOjEwNEUyMDAwQ0IzQ0QyMjFDM0Y5N0MzRDVFODU1MkMwRTdCMTFCODFFQQorOjEwNEUzMDAwRkUxMkUxNTM1QkJGMDdENjdGQUQwRUFGREIxODFGQzc3NQorOjEwNEU0MDAwRjY5RjRGRjkxNUU0NzAwRkZDODY4NDhGQTEzQ0I3RDkwQgorOjEwNEU1MDAwMjI0MTdFRTQzOTFFNkY4Q0M1N0IxNEZFRkNGQ0U0Nzc5NgorOjEwNEU2MDAwQjQxNzFGQjIyNjg4NDM3MDM4NUM4RURGMkZCN0JFRUZCMQorOjEwNEU3MDAwMEFCRjE5NTYwNUM3OEQ4NUUzOTk2RkUyRUI4M0Y1NUM5MAorOjEwNEU4MDAwN0VDQzI3MzVFM0ZBRTlGNDk5QzU0Q0Y1NTkwRUQ4N0I2OQorOjEwNEU5MDAwMTU2QTdGMjEzQURGQTY3NjEzQ0FGOTMzM0I0RDIxRDAzQworOjEwNEVBMDAwMTdCMUYyNjI3RTgyN0Q3MkM4Q0FFQzk3RjkyRkVGMUZBQworOjEwNEVCMDAwMDY3MkVEQ0M4MTU3Mzg1RDMyQkE5RkJGRUI5OEFDNzI2OQorOjEwNEVDMDAwRkQxMEQyRUI4NzA0NzFDQTVGRjJGMTE2QkMxQTdGQkNFOQorOjEwNEVEMDAwMDVCQkZFMTY3N0JDRDM5MkZGNEU5OEZGRTkwRTMzNTEwNworOjEwNEVFMDAwRTkxMEE3REI0RDcxRkQ0OUFENTZCMzMxQ0ZENjM1RjI5MAorOjEwNEVGMDAwNDgxMjdEQ0ZFNEI2MkJCMEVFODY3QUZGQzcyQUQ4MjVCQworOjEwNEYwMDAwRUY5QkQxQ0Y0MjI0REYxNzE2M0M2RjZENTc1NjUyQjgzNgorOjEwNEYxMDAwMzVCOEFCRDBBRkEyOERENzE4MDMyN0M5NUJBMTBBMjUzRQorOjEwNEYyMDAwNzBGRUFCQTI4NEQ5RDQ2Q0RFNUFCQkQ5MjMxQUU2NERFRAorOjEwNEYzMDAwRjU2RTI2RThBNUEzQzM0Rjk5NjE5RDlGQzZEODhGOUZBNAorOjEwNEY0MDAwNEFBNEE5MkYxREVGNTM1NUYwMkQ1NUUyRUQxNzhERTMxRgorOjEwNEY1MDAwMDc5Njk4ODhBMkQ3ODc5NkFFQTMzMDFGRjIzQjFCMDExNQorOjEwNEY2MDAwM0ZCMkU5MzU5QjBBRjI2NEMxMjY1QjA4RTI5QkFGRUZEMgorOjEwNEY3MDAwQkJCODAzRTA3NkVFNjkwQjhGNzdCMjNDREI2QUJFNUZBRAorOjEwNEY4MDAwM0JCNUVGRTJBNkZGQTJFREE3RTA2NUZBRkRFQTREQjQ1RQorOjEwNEY5MDAwM0ZEOEVEQkIxQzk4RjRGQ0Q3RTc5Mzg2MTEyQUE3QUI0QQorOjEwNEZBMDAwN0ZGN0YwNDQ5MDJGRDVCMEM3QTJGREFCN0ZERDM3RDQ5QgorOjEwNEZCMDAwNDBDNzNCRDk4N0Q1NEZFRUNFMEEwMTVFRTZCRUYwREI5NworOjEwNEZDMDAwRjlBMDRGRTZGQ0NBNDE4MDI0NUZERkY3RjFCRDUwM0ZGNgorOjEwNEZEMDAwRjczQjE3RTY3QjlERkJEREE5MUYwMjFGNTA3QjVCRDFEMgorOjEwNEZFMDAwRUJGNUQ5RkFGM0RFNzREQzM5NTA2N0VEQzIyNTVEMUVBRQorOjEwNEZGMDAwQzExQzI4MjlCRENGNzkzOUM5MEZGQjcxNUQzRjdDNkY3QQorOjEwNTAwMDAwODFBNUVCMjE3NDQwMTFCNTlGODg3QkEyNzAzRkUwQzM1RQorOjEwNTAxMDAwMzkzQjhEREZGQkFCOTVEOTUzMEJFNEFFMkFENjNGRDg5NQorOjEwNTAyMDAwOEZGMTZCMDdCRUY3OEQ0NkE3QkMzREY2N0RBREZGN0ZDOAorOjEwNTAzMDAwNUE3MzYzQzY2MUVGQ0ZCNzkwOUE3OEY0NkZCMUIxNzFDQworOjEwNTA0MDAwRTdFQ0ZDMzZERjM4MUVBM0Q3OUVERjYxQ0Y3RjJBQjBBNgorOjEwNTA1MDAwRkM3Q0IyQzc4NkU3N0ZFN0NBRTFDMTI5OTQ1RjVGOTQxMQorOjEwNTA2MDAwQzkyQ0UwREJCOUVFRjBFMDY0RkFCRERGNzA3OTM5RDcyNgorOjEwNTA3MDAwNEVFQkY0NzkzRjNFMEZFODBGNzU2MkVERkMxNUUwNzdEQgorOjEwNTA4MDAwREU0QjM2MDJGNDNFRUY3NzJFRjQyQkNGN0JGMUUyQzlGNAorOjEwNTA5MDAwMjdFOUYzMzNGQjFDOThDNzNBRUY3NzhCMTFERkYzMkMyQQorOjEwNTBBMDAwRTE3QkMxOEZEM0I1Qzc4MkZFQjEzMzdCREVDQTA2N0JGRAorOjEwNTBCMDAwRTQ4QzM5OUM5REQyOEI5RjY4NUVCQjg1M0IyRjhDRUIyQgorOjEwNTBDMDAwQTBGQjgyODIxQTI3RjgzOTU5NUU0RTJENjFGNzBFRDQ2MworOjEwNTBEMDAwNDJFMjA3RDBGMTI3MzYxNjBGRTFGMUE5MDdCOEJGRTg4MQorOjEwNTBFMDAwRkMwQzI1MDlFNzdGRkQyREVDMzk4RjVGM0Y3MEFCRDJCQgorOjEwNTBGMDAwMzc1OTM3MEZDODlCMjNEN0QwN0Q4OTVDOTMwRjcyRDY2MQorOjEwNTEwMDAwMTRCOTg1MjhCNDJFNDUwNjYyQTlGNTMzQzFGRDBERTAxQQorOjEwNTExMDAwMEY0RDIzNjhCRjlCRDM3Q0E0OUE5NjhCNTM0ODAwQ0YzNgorOjEwNTEyMDAwRkYzODZGRUVFNkIzM0Y1MDE0M0ZCMDQxRTkwQkUzRjlBRgorOjEwNTEzMDAwNkM0Q0JFQ0NCM0ZCNDdEQjMwNkZDNDc4RUY4MkJBOEZDOAorOjEwNTE0MDAwQURFQjIyQkY0RjIxNzZCRTE3Q0RBQTA1RTQ3OTM0NkVCMAorOjEwNTE1MDAwQzdGMjA2NkIyNUU1NjNGMEZGOTI0MzVDMkVGNTU4M0ZERQorOjEwNTE2MDAwRTNCM0YzOUUxNEU0MzM2RDFEQUJFQTNDMjg0RjU2RDRGMQorOjEwNTE3MDAwNzlCMTVDNUU1NzQwMTRDQzc3RjY2MUREQzRFMTYxMjlGQQorOjEwNTE4MDAwNTQwOUY4NTc4MTA3RTFDRkUyQUNGMEMzN0QxNjMwMjYxMQorOjEwNTE5MDAwQzQ1MzREQ0UwMEQyOTdDNTVCODNCRTAyMkI4RjhCOUEzMgorOjEwNTFBMDAwOUMyQUE5NzY0MjlFMDc4MzkzQzk1OTgxNzA5Mjc5NURBMgorOjEwNTFCMDAwNkE5QjgwNzBBNUVGRTNGM0IxRjZDMDBDREIwOEM4M0YzMworOjEwNTFDMDAwMUU2QTkwNTM3MjVBQjFBMURFMDM2RTFBNURFQ0ZFREZDNworOjEwNTFEMDAwODYxRjQxNzhBREE4QjM2MjA5RjlFMjAwMzdDODE3ODc4NgorOjEwNTFFMDAwRkFGRjA3RjhCNTMwRjg1RDQ3MTQxREZGNDBGRUI2NjJDMAorOjEwNTFGMDAwRTBBNzA0RjBEQjQwRTE5NzE2RTVBQjU4MzhENEYyM0M2OQorOjEwNTIwMDAwMUQ4RDlGMTJGMTJGRTREQjQzMTA2NjdENUQxQjk2REE0NgorOjEwNTIxMDAwRjM5NDA0N0FGREFDOEREOTIzQjUyNEIwMTRFM0ExMUUxOAorOjEwNTIyMDAwRTY4NzIxNjkyQUM5RDRGOTlGODg1N0M1NzMyMDc4REU5QgorOjEwNTIzMDAwMTREQTMzNkY0MUZGQTU4NjVGOTM0NzNBNjk5NDdGQ0FCQQorOjEwNTI0MDAwQzdCMDlFQzU2RjlCNDU5MDU3QTZEQUFERTQzMzVEMUM5MQorOjEwNTI1MDAwREYzNEExQzJBNjIwOUM3RDAyQzQzNTFBQjg3RTVERDY3QgorOjEwNTI2MDAwOEQ0RjIzN0ZBQ0FBNTNCMDVDQ0RGOTY0MkRFNzkzNzVDNQorOjEwNTI3MDAwODA3NzVBNkZGMEIxRkM5Rjk2NzEwNEY1RTc2M0I0Q0U2NgorOjEwNTI4MDAwRjZGQjYxQTJGNzhCMjdGQkRBQzM2NjhBN0Y5NDQ5MEE5MworOjEwNTI5MDAwOTZFQzFFOEUyMzk2RDAyMEZBOUVBMzkwNjAzQzIzRjlCNAorOjEwNTJBMDAwQzhDRjQyQjg1NkQyOEVFN0FEOTNCNTdCNjA1RUNENEQ4OAorOjEwNTJCMDAwOUU4QTcxMjA2MjY2N0E4QTk4NTgxOTM0QzMzRTJBMTZFQgorOjEwNTJDMDAwQkUwREJFMDM3OEJGNDRBMkY5OTQxRDlEMkRDMEY3MkVEQworOjEwNTJEMDAwNEU2NUIxQjNCNDdCREE4RkMwN0QxMENFMTYwNzNCQTcwNQorOjEwNTJFMDAwRThBQjE5OTA4REYyRDU4MkY0RUFGNDA1ODQ2QTFEMUVBQworOjEwNTJGMDAwRDMxM0Q4N0Y0QkVDRTNGRjAzRThGMTEzQzg0QkE0RjhCQQorOjEwNTMwMDAwNURERjM2MTBGMzVBNTY5OURCQkQyMDBGNTdGMUYzMUFDMworOjEwNTMxMDAwQ0ExNDBBMDVEREZENjI2RjcwMzlFOTJFMzFDQTAxNERFQworOjEwNTMyMDAwMkU3QkFFMkYzNkQwQjMyNjc3NTNDNjE4RTk1RTkzQkJEQgorOjEwNTMzMDAwQkZFRTk2QkIxNTY3NDFFRUE2NDYzNjIyNUZDNkYyNDEyOAorOjEwNTM0MDAwODM1OTU2ODVBQkYxM0UxQUU2N0YzQTI2QjBGQjMyN0E5NgorOjEwNTM1MDAwQ0EwMzhDQkY5RkVGQ0NEOTAyRTdCMTM1RkU4OTVEQkY5MAorOjEwNTM2MDAwRDQzQzFFQkZEMzZEMEYyNkM4N0ZFQ0NGRUY2NTY4QTY3NworOjEwNTM3MDAwRjQ0NkYyMjE1RjQxNDE0NEFDQTE3NDA2NjU5MEQyMTkxNAorOjEwNTM4MDAwRTNBNzUyMkMzNTNBQUUyNzRDODZBODdCNDUzNjRGRUUyNAorOjEwNTM5MDAwQUZENUNFRTJENDVCOEJGRDgwQzc2NUVEOEM4N0IyRUNEOAorOjEwNTNBMDAwOENDRjk2QTU4OUEwQkI4ODQ0Rjc5MzRFRkE0OERBM0Y4NAorOjEwNTNCMDAwQ0EwQUY2QTU2NDY2RjFGQzJFOTdEODBFRjFEQzY1Q0UxQworOjEwNTNDMDAwQzk1NkM4MkIxNTkyNEI5MDdFRkVFRUFBMUNEMDVCN0M3MgorOjEwNTNEMDAwMDdFRTVGMDNGQUYzMzg3REU0MzhFREI3OENERkVCNjQ1QQorOjEwNTNFMDAwRjIxNDEzRDg5N0VFNzY3NjYwM0U5NEQzMkUxQUUyNDlFMworOjEwNTNGMDAwRjNFQzgxNUNCQkFFNUUwNDVGRTc3ODg3NjE3NzI3QjgyQQorOjEwNTQwMDAwMUY2QTE4NUYwRkM5NTQ0OTlFNEU0RTc0REY5N0E0QThCNworOjEwNTQxMDAwQTQ0MDI3MkZFQTA3REQ4OEY3MzFGNTk0MTMwOUU0RTE2QQorOjEwNTQyMDAwRjZGRjE5NzlEODMwMjA4NDc4MzVDN0NBOUYzNDNGREUxQgorOjEwNTQzMDAwMDE0NTRCMTVBRTU2QTBENkY5QjJCQjg3MjM5RERFNjA2MQorOjEwNTQ0MDAwODc3RDg4NzM0QkI3MURGNEEzREM5RUYzOEM5NTdGNTE0OQorOjEwNTQ1MDAwQkRBNkEwMUY4Q0VBQjVDNzRCNDE5RTI2RDQ2QjM1Rjc3RAorOjEwNTQ2MDAwMjExREI3RjQ1NzgwOEVGN0FGNzlGODY5QTg3RkI2QzZDQgorOjEwNTQ3MDAwODJGN0JFNTQ0NTU2MTA4NUNFQjczQTMyMEFDQjU5NkRFNQorOjEwNTQ4MDAwOEY2MjU5RDlCNjk5MzIxMTIxNEI1NzU3QUY5OTBBRkRGRQorOjEwNTQ5MDAwMzc5OEQwRkY3MzMyNzRDREI5NUE1QTNGRDk2MjQxRkI2NQorOjEwNTRBMDAwRkRFNEM2MDcwNzgwRkQ3N0IyQzVBMTk4QzBERURGMzhFRQorOjEwNTRCMDAwQzJEOERFQ0NFRTdGMzlEOTY2MEU5OTE4RkQ1RTMyNDEzNgorOjEwNTRDMDAwM0M4MjcwRjkwRTVFMjBERDdDNDk4OTgyNzZGQ0Y5OTg3OQorOjEwNTREMDAwNzg0QkU1NUE4QjVGNzAyNzg2N0Y2NTVCN0M3QjEyQ0ZBQworOjEwNTRFMDAwNkY2MzcyNkU0RDNFQzhEN0IyQTMzRjFCMDBGNEExQzlEMworOjEwNTRGMDAwOTlDNTI5NTRFRTAxRkM4RTVBNDhCQ0I4QzA1OEZCRDg1NworOjEwNTUwMDAwMDU4MEE3QjE3NkZGNjI4NkFGMkJCQjM3RUIzMzkxREEwQworOjEwNTUxMDAwREQ4OEE3ODA3QjkyQzFFRkNCRkNBQTlGNzFCQjlDNTgxMgorOjEwNTUyMDAwMTNCNEJCRjlGQjlFRjhFREYzNUFGRUYyRTYyMzA0RjI0NgorOjEwNTUzMDAwNTQ4RDdFNkQxM0Y4QUIwNUQ4OEY0RjYyNzkwRjVBMUNDRQorOjEwNTU0MDAwQTgyNzVEMzM3QkJBQzU4MjcyNjUwNkY3NDc2OTc0MUU2QQorOjEwNTU1MDAwQTVCMzgwOUI5RkRCMzNEMEUxRUNDODNBOTQ3QkMyQUExMQorOjEwNTU2MDAwQTJDNzQ3NTFGODdENDVFOTBGRTg0MzU4MzVCQTJGQzAyNworOjEwNTU3MDAwNzdFOUNBMUZBQ0JEODc4RUZGRjUzQjI2N0MzRTJCNjJDOAorOjEwNTU4MDAwQzNGRTVGM0VFMjdCRkMxRUQ4MkZGQ0JCMTlGMzQ5QkU3NQorOjEwNTU5MDAwM0UzNDE2RTNDOTVGOUE4RDdFOEMzMjA3OTM5N0FGNzFDNAorOjEwNTVBMDAwRkVBRjhBQUMzMkQ4RTc1NUNERDM2NUYwODM1NjQ1RDZFOQorOjEwNTVCMDAwRTBGMzJBMDgyMjYxOUVGQzVENkY5NDQ5MTA1RjIyOThGNworOjEwNTVDMDAwRTdGMjlBRkRDRUIxRjVBODRGOEJEMThGNTZCRERBMTIxNgorOjEwNTVEMDAwMzdDRkZGMzVCQjYyOTA1N0Q1OUQyRDM4MkVBMUY2NTk5OAorOjEwNTVFMDAwNUEzQTFGNEYyNzc3QUEyM0E5QzgxRkM0QTMxMkM4RkY3RQorOjEwNTVGMDAwQUVFMkYyQTc3QjdFMUJDRDA2RjlGM0E1MkRCRTlGRTY5QQorOjEwNTYwMDAwNUQzQjVCNjc1NUU0MDdDODc3M0REN0Y3NDM3QzVFQTVGNAorOjEwNTYxMDAwN0RCNzkzRjE2OTc0M0Q4RjhGOEFCNzlFRTgzQUFFQzcyNAorOjEwNTYyMDAwRkU1RjI2QzdGRkZFMDUwRURGOTM3NUIzODg5RkNBQUZFNgorOjEwNTYzMDAwNEEwQkVERTc4NEVGM0ZEODU0MEFGQkZDOERDOTI5ODI2MQorOjEwNTY0MDAwNkU1REQ1NkQ3Mzg4NUZCN0FFRUE4REQzNjRGREZEOTQ1MgorOjEwNTY1MDAwNTEzQzJDMzJFMEUxQzJDQTA1ODg4NzI1RjY4QTYzQTA1NgorOjEwNTY2MDAwMDcyQTU3OEQxRTE2QzA3REZFMEE4NEYzNjc2NjVGMzZEMworOjEwNTY3MDAwQzhFMzUzNkQwRkJBRTNFNTE3NUY4OEM1NEYxQkM3MEYyQgorOjEwNTY4MDAwQjVCQjRCNzRGOEQxRjAxMkZCRkVDOTNGNTdGRkZEMTFCQgorOjEwNTY5MDAwOTA1MzFCNUMwNkI5MTI1QkY2QzA1QjRFN0NCODI1NzE1QgorOjEwNTZBMDAwRkEzQzQ5RjU3NzAwRTFBNkJDNzgwNEU4N0FCNTAzRjM0MworOjEwNTZCMDAwRTQxMkMzRUYyQTEyRTgwRDdFMDlFQzY3NkE2NzU5MURGMAorOjEwNTZDMDAwMjNFMEJCMDRFMTUwRERDNkU4RTA3MjcwOEI3RTk3RDMyNworOjEwNTZEMDAwNDE1OUZDRjU4Qzc2Njg3NDUwNEI1NENBQjBDN0U1Q0I4MQorOjEwNTZFMDAwRDFDMUMzNDRCNUY2QjI4RTZFM0E2ODdCQTMyQzJGNEE2MworOjEwNTZGMDAwMDdBMzFEQzFCMUY1QjRERjE3NjBGRkU0RjdDNEZGNzE2NAorOjEwNTcwMDAwNTk3NTVGMDdGNkNFNEExM0M2QkQ4RURCRDVGNEJCNTg3QworOjEwNTcxMDAwN0QzOEM4RTdFM0VFRTBDNEVCNEFBMkY1RDlEQjA3Qjk3MAorOjEwNTcyMDAwRjVGNzNBOUU2QUE2NzA4ODAzQkZEMThFMDRGNDkzQTc1QQorOjEwNTczMDAwOTJDMjkxRkZFRkU4RTczMzczRkMzQ0QxQjFGNkIyMzI4RAorOjEwNTc0MDAwQzAyNzA5QzZGNzI3NkJBNTI2QkY0RDQ5Q0VFRTdEMkY5MgorOjEwNTc1MDAwRThEMUUzQ0VEQ0JGODc2OEVCMUE3QkUwNTYwNzZENkZCQworOjEwNTc2MDAwNEM3RTA4RjVGQ0YxRTMwMkVBRTFBNTdGNUU5QzBGNzIzNgorOjEwNTc3MDAwQjg4N0ZENUIxNzc5RTJDNDIwRjQ1QjNFNzlDMjhDRjZGMgorOjEwNTc4MDAwMTQ4RTRCQThGRDAzN0EwMENGRDdFMDNFQTAzRkZBNTkxNAorOjEwNTc5MDAwMTJDNTczMUY4NENCN0Y0NzQ0RTNCQTVBRkM3NjU5NUQyOAorOjEwNTdBMDAwQzdBMzMwM0VCMUFBQzRBMzlERDc1N0EwNjRGNkQ4N0Y0MworOjEwNTdCMDAwQzIzQzc0RkU3OUQ5MUNGMEMwQjkyMTU5MjAxNTQwRjdCQworOjEwNTdDMDAwNjYyOUQwMENGOTg2NjY2RkRBNzA1NTA3RTc4NTBFOTY2NAorOjEwNTdEMDAwOTc2MzNCNzhCMDM5ODdCRTZGOUJGOTA3MEZGOEY5MkNCOAorOjEwNTdFMDAwRjQzQjUwNUEzM0E1RjM3QTdGQjkzOUFEOURERDc3OTRGOAorOjEwNTdGMDAwQTc3QjlFMEJFN0EyNjlEREUwNzdBMEYzRUQ2NURGRkNGOAorOjEwNTgwMDAwMUJBMUZCOUUzNUJDREY3OEFBNzZEMTE3ODA4RUQyQ0Q0NgorOjEwNTgxMDAwMUZCNUZDMTVBOTkxQjUyNzZCQ0Q4REFDOURGQjUxMTcxQworOjEwNTgyMDAwNTQzMjNGRTlFQkQzOTIxMDdFREFCQUE2QkVCQTFDRUYyRgorOjEwNTgzMDAwNUI5QkZBNkEwNjlFNzM5QUVBQ0NGRjFDRTBGOTFCQzhEMAorOjEwNTg0MDAwRkIwMUJBNEY2NkZBMzk5NjJFMUVFNUYyRTdFRUNEQTJCRAorOjEwNTg1MDAwNkFBNkUzMUQzNDc3MUQ3MDAwNUZGQzU0QzA3REY1NURDMgorOjEwNTg2MDAwMUYxRTM0MDNDOUZGRTlGMDcxMzNEQzk3NzAxRkE0RUFFRgorOjEwNTg3MDAwRDBGNTRDMjM4QUNDOENFODEwQkUzRjlEQjRCQjU4QkRGQworOjEwNTg4MDAwQkQwRkRDN0YxQTFEOEY2RTk5NjFCQzg1MkNGRTdDRDcwNQorOjEwNTg5MDAwODc4N0M3ODIxQUE1RTMyRDgzRjJCRTc3ODgwQ0UzNEY3MgorOjEwNThBMDAwREJBQjM0QjE2MzUxN0NCQzU3RTk3ODYyNzRCQzZFRjhGMQorOjEwNThCMDAwNDk1Njg0NDcxNDNFNTY4NDk3MDYxRkI4NUUwNERCQTNGRQorOjEwNThDMDAwRjA0NTdCNDU4MzZGMDNDMDhEQzI2RjZBRDI5NDlCQzkzQworOjEwNThEMDAwQjBDNEZDMzJENTM5Rjg3Mzc2NUU4Q0NEMjcxNkJFNUYyNgorOjEwNThFMDAwNDMxM0U1QjdBNzFDRkUzREMwN0Y4RDBFRkZGM0MwM0ZGRAorOjEwNThGMDAwNzNBRDVERDk1MjJFOUUwNzdCMTE5RUNGMzcwNTA2QTQ0RQorOjEwNTkwMDAwMEZDNDczNjJGOTdEMjAwRkFEMjM3RTlDMzc5NjRGOEZCNQorOjEwNTkxMDAwMDJCRjVDMEQyNUU1MEI5ODA3M0ZCNzcyMkY1RkU3RUJFMQorOjEwNTkyMDAwM0YzQkU1QzJGMzI4RkIzRUNFODY3MjlFQTk3M0Y1OURGMAorOjEwNTkzMDAwQzA2RkZGNjY0MkZCRjNGQ0RFRkM1RUYzRUI4RTcyQkZEMgorOjEwNTk0MDAwQ0JCQjBFN0U5RTg4QUZGMzNFNkVDRkREQjdENzExODIwNAorOjEwNTk1MDAwN0IxMEVGQUIzNTc1RUZBRjgwQUVFRkFCNjVGOTI3NDQ0OQorOjEwNTk2MDAwRUExODc2QkJDMTlFNkNFNEYxOTA5RUUzQzA3RTIxNzY3RQorOjEwNTk3MDAwMUM2RDlEMDdCMkZCNUQwNUZCQ0JBNzQ3QzhCODhGRDg1MAorOjEwNTk4MDAwRkZDRUY5M0Y1NkQzQkEzRENCOEFGQjg0RDVDOTlDN0U2NgorOjEwNTk5MDAwQ0JEOEJFRjVFOTY0QkZBMzA4RkM1RjJCNTM3QzJBNUQxRQorOjEwNTlBMDAwRTdDQTM3NDhCQjQ4RTE3NDYwQzg0M0ExRjIxMkI4MTc5MAorOjEwNTlCMDAwNUE0NERGRDlEQUM4RDY2MDM5QkM1N0M4RUU5REYxNzBCOQorOjEwNTlDMDAwQkI3NDZEQzdGMTM2QTBDNzUzNDcyQzE4NzdGOEQyQzUwMgorOjEwNTlEMDAwQ0UxM0FFMzQ1NzY0ODMxREZGRjk2NjM5RUVGRDY3OUYyMQorOjEwNTlFMDAwQkEyNDlDRUY2NkExNTMwMDNBOUY0RTgyNTY5MDE3N0JEMworOjEwNTlGMDAwM0IyNkY3ODVGOUI4N0RDNDAzRTQ3RjZBQTM0OTY0RjdDMQorOjEwNUEwMDAwQTM2OUZFOTZCMEM0RkNGREFBQzRFQTdFNUU3QTZDRkE3NQorOjEwNUExMDAwRkJDNjU2OEMxQjgzNzkxRTMzNUFERUMzQkM1QTc3MDlFQQorOjEwNUEyMDAwRjNEQkM1Q0UyM0M5QzlFNkVCRUE0OEMxN0M1MkQ3MThERgorOjEwNUEzMDAwMTFGM0IxNURCRTJFMDFERTFCRDA1MTJFRTNGQjQxQTE1RgorOjEwNUE0MDAwRDdGNzA3MkNGMThDMDdCOEMyRkIyMEU3MDc1Q0UxRkIxNgorOjEwNUE1MDAwMTYyN0NCRDM1QUM3RjdEOTlCQ0RCRUE2MzE3NDlDQ0RBMAorOjEwNUE2MDAwQUI5MzA1QzA4N0Q2NEY3MTMyQjk3MjZBOENFNjQ3MEE4QworOjEwNUE3MDAwQTIxRjI5M0JDRjYzODM3QjJDQjJGREM4RENDNDU1MTIyNworOjEwNUE4MDAwQzRGQkJFQjc0MDNGRTY2NzQ1Mzg2QzFFRjI2MjE4RTJDMQorOjEwNUE5MDAwRDgyQkMxQkYwMjc4MzYzMzdBNUFCOTVBNDBCRjJBODUwQgorOjEwNUFBMDAwNUYzRkQwMTM5RjNGNjZCOTA1RDYzMUEwNTlGMEMwREVFNQorOjEwNUFCMDAwOUQ5NjcxRTczREM1NjU2NTc0REVGMjM4RUUwQkMxNEQwQworOjEwNUFDMDAwMEJFMzY2NkZGQzAwRTdFNTRBQjBERTdBMTdCQjI3RkYwMQorOjEwNUFEMDAwRjNDQkQwQzc1NzBFNzY2RjYyNzY2RDA3QkYxRjJGOEM0MgorOjEwNUFFMDAwRjdFMDA1QjU3QkJFRkMyNUVDN0UxM0M5QUZFOEYzNjM5OAorOjEwNUFGMDAwQTJGQ0IzOTREMzIxRjE0MzlDQURCMjU0MEU4MTFGNDE1QgorOjEwNUIwMDAwNkNERTNDMDVENjNEM0Q2ODIxMzdEMUY1QjUwODFEN0VEQworOjEwNUIxMDAwRTAxNzc1ODRDOEVGNTNGMjFGMDUzOEFENTlENzE3RjM1NgorOjEwNUIyMDAwRjA5NjhCRkU2Q0QwQzNFQUZGOTEzMTRFNzdDMDdGN0UzQQorOjEwNUIzMDAwMDNEQzFGQkZBOTU0NDZCRTM4MDA3MEE3RjVBNzk3RTQ0MQorOjEwNUI0MDAwNkU4NjM4QTVBQkI2QkM2RDNBMUQyRkU0OTE1MUIyMzRDOAorOjEwNUI1MDAwOTQ5MEI3RjMyMTRFQjk0NEY0MDhCNDdGQjA0MkNCREY0MAorOjEwNUI2MDAwRjZFMDc5OUVFMUE2QUZDNjE3NDAxQzJGNDM0NDlGRDJCMgorOjEwNUI3MDAwMjk4MUREREJCMDZDNDlCOTA3RjBCQUNDOTMyNkU4Rjc5MAorOjEwNUI4MDAwMkY3NzcyM0EzODlBNTI3MUE3OTNDMkM3RkJDODdBMEYxRgorOjEwNUI5MDAwMzVFMzI4N0ZBNjVFMDU3RTQ0QjU1OTU2QjZCMzc4MjExNQorOjEwNUJBMDAwREVGNzkwQ0FGMTkyREEyMTg2QUJEQzU4NzdDRTRBODFEMworOjEwNUJCMDAwRkI3NDk5QkZGNEQxOUIwM0NDQ0YwOUIxRDE5MUU4RTczNQorOjEwNUJDMDAwRTQ3RjVFQzQ2QjFBQUZBRDFDNkFDNzRBNkI3RDE1RjZFNQorOjEwNUJEMDAwODc3MUQyRTkzOEE5MjU2Mjc4MjQxRDc3NEJCMjdGMTNFQgorOjEwNUJFMDAwRkFFREM2NUExMTRFNDRFQTZDMDMzODg1QzZGNkMzQkNCQQorOjEwNUJGMDAwRjBGNUEzMDZCRjA3RTc1ODUyMEY3NTREMDYzRDFBQ0FDOAorOjEwNUMwMDAwQjJGRjY5MzNDOEE5NjVCMjAyN0M5RUJBRTRFNDNENzg2QworOjEwNUMxMDAwRjk5QkVGMTcwRjQyOTlEQUY4RDFDMzIwQTc5MzNCRkYwNgorOjEwNUMyMDAwNTY4N0NGQzdDOTA2RkY2MkVBMjc1RjdFMEJFREE5MTUyRAorOjEwNUMzMDAwQjJDMTRGRjk0RDRBQzVDRjAxMkU5QjBBODM0MUJDMTcxMworOjEwNUM0MDAwMTMzMDlBMUU1REM3RUVBNTFERTNFMEJFRTM1MzkzNDRGNworOjEwNUM1MDAwREYxNkRFOEVFQjZBRjU4NDU2MzJCODk1ODA1RUQwRTBCMgorOjEwNUM2MDAwQjY1QzU0REFDM0IwQUU4OTU2QTQ4RjNDRDI4MUYyMkExNgorOjEwNUM3MDAwMDNBMkQ5MDNBMzc4NDlGRDY0QzU0MkM4RDc4ODlEQ0Y0NAorOjEwNUM4MDAwMUFBN0QwN0RGRjA2REMxMzA4Qjg4MkZDMTgzOTYzMEMxNAorOjEwNUM5MDAwOUU0M0RDNTNEQ0UxMDU3QjdFNzU4MkZCNzNERTc1QjFEMAorOjEwNUNBMDAwRjcyRDIyRjNCM0M2QjZCRkVENjJGNDAwMjJCMUFEMThGMgorOjEwNUNCMDAwNEI3RjExOTQ0RUEyMjY0MTk5NjlDNUZCRTZGNjg4Q0EyRQorOjEwNUNDMDAwN0YyMDlEQUYzNzI5ODAxRkU4NkZBNkY4REJGRkY2NjlCQworOjEwNUNEMDAwRjQyRkVFMEY3RTgwRTVCM0FFMDJGQzFFNkQwRkE3RDM0RQorOjEwNUNFMDAwRjdENzk0QjBGQjhFRDc3ODE4OEQ1NDM3MzM3OTUxRURCMAorOjEwNUNGMDAwRURCNDQyRENBNEJBOTA3OEI2NzA3QTUzMzUzODgzQkZERAorOjEwNUQwMDAwOENFQkFCQ0FEQjE5NUNEMzBBMDlDNjdEQzExNzA0Rjc1QgorOjEwNUQxMDAwNERBNTQzM0YwQUJGQjRFNkE1MEIxMThGQTQ0MzFENDgxMAorOjEwNUQyMDAwRkJBRDgxNzEwMTNGOEQyQ0FGOUY5MDRFMkJGMjZGRDA1OAorOjEwNUQzMDAwODQ3MTRGQ0FFRkVGODI1RkFCQjJBNTJGQzZGREUxRjhDOQorOjEwNUQ0MDAwMzA4Qzk3QzJCRjlCQzJDN0RCNENDNzAxRkZFMUE5NjY3RAorOjEwNUQ1MDAwMTNEOTgyRjJBRDAzRUY2NzU3OTY1MDVBNDZGQUVDMkFGMAorOjEwNUQ2MDAwODNGMzlBNEE4OUM3QjM1MkEzMDM0RDhFNTFENjk4NDEwMworOjEwNUQ3MDAwRjUwNUMwNkQ4NkFBMkUwNEZBM0I2RUY1QkMwREYzNzBENgorOjEwNUQ4MDAwQjQ1QTE0NThGRjhDRDY5NzE2ODNGREUyRjA3NjM2ODMwQQorOjEwNUQ5MDAwN0NBODJFNjVGMzRENjlBMUNGRDFDRTUxREU4NUZFRDUwRAorOjEwNURBMDAwMkQxNjg1N0Q4RkMzQUY4NEQzMTk4N0MzNEMzRUVGOTlFMQorOjEwNURCMDAwMUJEOUJDRUQ1OUExMjBEMDY3RjUxMjBBNTc2ODBCMzBFQQorOjEwNURDMDAwQkEwNzk3RTgyNTExRjlFQTEwQUNERkE1QTZFM0I4N0Q3QworOjEwNUREMDAwQTZDNEYwNDUwQ0ZENjlFQkFBRTRFQkFBNUNDMkQ2NDU2QgorOjEwNURFMDAwMzgzRkQxNjk4NTYxRENDQTEyQjZDRTE5ODRCRDJGQzI5NQorOjEwNURGMDAwNzMzQUZFNENCRTlFNEFGNTQ1MkM2NzM2NUIwQ0UzNkY0QQorOjEwNUUwMDAwMkFEOEQ2MDFGM0M5Mjk5NDE1M0MzNzQyRDg3RDg3RDlDMQorOjEwNUUxMDAwN0M1REQ5OERFQzdCRDk4NTJGMjJCQzQ4QUQ2RUJFRTg2OAorOjEwNUUyMDAwNTdENUQ1Mjk1RjlEN0E4QjMyMTZCNTczODU2QzJCMTJBOQorOjEwNUUzMDAwRDNGMTlGQzkxOENGQzk2QjM1QUVFQkQ0OEFGQ0FENzBENgorOjEwNUU0MDAwMUVGQ0IzQzc2NDhDN0JFRjExN0Q0NzA3RTA3RTU0NTY4MAorOjEwNUU1MDAwOThGQ0YxN0QzMDAxRTRGNENDNDYxRkM4RjFERDY1MENGRgorOjEwNUU2MDAwRkVBNzZFMjUyMUEwODc0MTg3MkE1MjAwREU4MzBFMDVGQQorOjEwNUU3MDAwNzg1OTgzRjE3NDBBMTBBMTVCRUVEMUY5RDEyRDUzQjM5NworOjEwNUU4MDAwMDBGMjMyMzJGMEI5NTkyMDA3NEFEOTM5OUYyQ0ZEQkNCMworOjEwNUU5MDAwRTlGQzUyOUJEM0NCMjExRjJBQUQzNEE1NUNDNkFCNUQ3OAorOjEwNUVBMDAwNjNEQTBGM0QzMTU5ODRGNjgzNEYzQzA4REZDOTIwQkFDRAorOjEwNUVCMDAwRjVEMDc2RDkzRDkwOUQ2QjM5NDg1QkExNUZFREM5NDcyMAorOjEwNUVDMDAwMDAxRjJERkMxRUYyNDEzMEIzMTQyQzBGNDI5OTRBRjlFOQorOjEwNUVEMDAwN0I1NTBBQ0M1MzIyNjM3NEY3NTg2RTdGNkMyNDlFMDM2MworOjEwNUVFMDAwQzc5NEE3NjIyQ0MzMjRDRTNEOTdCQUZFNDM3ODdGNTU1MgorOjEwNUVGMDAwODhEM0NGRTU1NjBDRkJGM0VEOEZERDM4MDRGNkYxNkI1QworOjEwNUYwMDAwQzA0RTRDODI3M0JDOUVBRjIwNEY0N0Y1ODkwOEY3MzVEMQorOjEwNUYxMDAwRTZCMEI1OTBENjk3NTNCQjExRUM5N0I1MDUxRjg5QzA3NQorOjEwNUYyMDAwNzc2QkY2MTIxRkQwNDc2QUM1M0YyRDdBM0NERUU0NjJEQworOjEwNUYzMDAwQkZDRjIzQzk2NDE1RjBGRjgxMjEyN0M3MDE5RTQyRkIxMworOjEwNUY0MDAwQTlERDQ5RkI5N0ZGREVGOTg0MDNFQ0ExM0ZCMjNDOTg0MQorOjEwNUY1MDAwQ0Q2RkQ1QTBGRTdFMjg1QjhFN0IxRjJGQjk4QzlEMTg0MAorOjEwNUY2MDAwREIzRjY1RDA2NEY0RTcwRDY4NUQzNzBFRUVGN0FDMUVERAorOjEwNUY3MDAwMjdGOTZFQTJCREQzNUFDQkNBQzA4RTUxMkEyODc1RjUxNworOjEwNUY4MDAwQTVGM0RFMzg3QzI5MzBBMTMyODFDNUNCOTQ3MUVDQjkwMAorOjEwNUY5MDAwMzI4Njk1QUJFQTBFM0QwQUZCRjZFMDRFQzk5NjQ3RTcxRQorOjEwNUZBMDAwM0I3NDA1QkI1NzZDNTVFMTc5NkI4MERBQTUyNTY1Q0Y0RAorOjEwNUZCMDAwNUI2RkE1Q0Y0Rjk0NTAyRDQ4OUY5RkI4RkVCQzBERTI1QworOjEwNUZDMDAwM0I0Rjk3OTRBNzAyM0NGNzM2MUJFRDNBMDI5NzVERDEwMQorOjEwNUZEMDAwRkQ1MDkxMjVFODc3RDE3OUI1N0M0ODEwOUUyNjRCQjhDNQorOjEwNUZFMDAwQUQ5MkQ2NEQyRjM5QzFDMkU5QjFDRjU5RDFCMjc5MEE5QworOjEwNUZGMDAwRDBFOThDMDIxOURERjZCMUVCRkQ4OEVCOTNFOUI1NURENAorOjEwNjAwMDAwRTNFMDdFRkQxQzk1MzBGRjdFRjA3MTE0Q0EzM0I5QzgwMQorOjEwNjAxMDAwQzg1MTNCNTBFOEI4NUFEOUZFMjQyOEY5REYwNEI5MUMwRQorOjEwNjAyMDAwMkMwQ0M4RjA4QTI2Q0Y1QTA2NTVFRTAwNzlGNjY3NkUxQQorOjEwNjAzMDAwRDc5MTlBNTk3OEJFMENGOURGMDRGNjUwNTc1OUJDN0RCOAorOjEwNjA0MDAwNTM4OUQzOEVGRDRGNkRCQ0VENjNGMDUzQ0ZBODY1RjYzOQorOjEwNjA1MDAwRkU4MDhENUYwOTg4MEY2QUY3NjVEMEYxMDc5NEUwNTVERgorOjEwNjA2MDAwODM2NEM2OTJBMEI1MDhGMDkzMjcxMjQ1ODFGOUI0MTM1MgorOjEwNjA3MDAwRDgyNzA0QTlGRUQxQzM0MTFCRjdCRkZCRkU0Mjk3MDVGOQorOjEwNjA4MDAwRjlCMDA0NkM2N0REN0E5QzdDM0REOTNFQkE5RTM4N0FDMworOjEwNjA5MDAwQkE5ODdGRjdBNzRGN0RCNTdGMTRDMDdGMDlEQjIyMEQyQgorOjEwNjBBMDAwMDgxRTEzQUNCQTc5MEM1MEFGNkMxRUQ3QzA3ODYwQkYxNQorOjEwNjBCMDAwQkFEOEY5NTM1NzQ5Mjc5RTkzOEE5NUVGNjBDRTAzREZFQworOjEwNjBDMDAwNkU3MjlDMUJDRUY2Rjc0Njc5REFBM0NFRTkyQUY2NzlGMgorOjEwNjBEMDAwNzY4Q0JDMkFCMkI0REY4Q0Y4RERDREVFQkQ4NjhDNTg1MAorOjEwNjBFMDAwNjgxNzg4QThCMDdCM0Y0M0RBRkRENDM1RDA2RkE4Q0JDMgorOjEwNjBGMDAwRTkwMTNBNjgxOUYyNTEzMUMwNjczNUI3MTc2NjE2MTJDRgorOjEwNjEwMDAwRENBRkNFQ0NFQzQwN0I2MTdBMjNCNzE3MjQ1RjEzMDg1OQorOjEwNjExMDAwNTlDN0M2NjRCMjUyNjczRkEwQTkwNDVCRTg0NjZFMkYxOAorOjEwNjEyMDAwNjhGQTlGRUJFRDZBNkY0NzMzRUE1NUIwMEY3NDdBQjVBMgorOjEwNjEzMDAwNTI2NTdBNzU4MDk3RTlGNUVBNjZGQTFEODUxM0YzNDg4QQorOjEwNjE0MDAwQkQ1REMyRjRCOEQyQ0FFRDA3QUU4NzUzRjk3N0QzOUFEMgorOjEwNjE1MDAwOTlCRTRBMDUzQkMyMEQ2OTEwMkFFQTY1OEM2MUE1NDdDNAorOjEwNjE2MDAwRUQ5NjNFODU0QzVGQTZCNkVDNDFCREQ2MEU4N0I2NDc5MAorOjEwNjE3MDAwODBEQzYwRkEzMkVCQkRDMzJBODBDOTRCMUZCNzUxMzlBRQorOjEwNjE4MDAwRkQyNDZGRjc3QUE4N0Q5NjEyQjVDRjk2OEIzQ0RFNDQzRQorOjEwNjE5MDAwOTg3RDg4MzlGRjc0OUU4RjQyN0Y5REREQjg4RENGNkZDQgorOjEwNjFBMDAwQ0ZDMTk0NUI0MEJFNkUwRkU2RTJGOTcyOEQ2RkQxRkJGQQorOjEwNjFCMDAwNDlFQkQ5MjUyQzdGMjVCQjk2QzVDOTVEQkVBQTFEMjZGNgorOjEwNjFDMDAwNUQxQzYyOTY4QkREM0IzNDRCQTNBQkRBQjAxN0M2MEQ3QQorOjEwNjFEMDAwQzJGQjI4QzdEOUZEM0YyQkUwQkUxRUEwMTdCRUJGQkEyOQorOjEwNjFFMDAwQ0VDOUZEMUE5QzdFMTJFOTEzNEQwRUI5ODhERjVENDhCOQorOjEwNjFGMDAwRTE3QjIyQjQwM0U1QjU0QUY3NEJCMEI2MTNDMTg2N0UwNgorOjEwNjIwMDAwRjcwM0JGMDcyNzk1QzBGQ0Q3OENGQTNCRTY3RjBDNDgwNQorOjEwNjIxMDAwQjA1RkZDNTREQjY3N0U0N0I5RUUxQTc3OThFRDQzM0JERAorOjEwNjIyMDAwQzRCOEU3N0IzMkREQ0NGRkQwMkUxMTA3QzBEMzE2NjQ5MworOjEwNjIzMDAwRjdDOEQ5NEFFNUI4RkQ5M0RDQ0NDRTNFQ0RFMUI2NjZEMQorOjEwNjI0MDAwRDQwRTNDQTc5OTUwM0Y0QjQ0MzVDNUQxQTc5QUJFNkQ5QgorOjEwNjI1MDAwMDEzQzVGNDdGQkJCREU2RTUyNzE5RjFFQUEzMEExN0NFMgorOjEwNjI2MDAwMjVCOEVGMEM5MjRFREM0N0FBMDUzMkZBMEQ1QkNDNDEwMworOjEwNjI3MDAwMkJFMDYzNkQwOUM3QUJDN0JBMTlDRUZCN0U2N0JDNTA3NAorOjEwNjI4MDAwNzgwMDlFNTdGOEM1OTA5MDAzNzgwRTc5OEE5ODVGMDczQQorOjEwNjI5MDAwRUY0MTM4NDVGN0VGRkE3OEM1MTBCN0M4RTFBNEUwMEYzMQorOjEwNjJBMDAwRjMwRDY4NjZGNEI1NjY5NDhDRjM1ODM5M0M3REIzMjlEOAorOjEwNjJCMDAwNDcyRjdGMDUyRTNGRDkzOUIxOTVBM0RFNDRGQUJBRDJENAorOjEwNjJDMDAwRjk1NUQ1M0VGN0Q0MDk1RDNDRjFFNDg2Njc3MjAxQ0VGRAorOjEwNjJEMDAwQkE3QjMwN0EzRDRGNTE1NUZCQjdENjZENzFFMjA0REQ4NAorOjEwNjJFMDAwRURCMDhGNzJDMjNFMzA3NDk3MjFBRUM5RjEzQkM2MkQxRQorOjEwNjJGMDAwMUFGQzZFMjA1RkNEQjhCOTA4RjUwM0ZGRDJFRUQxMjFBQworOjEwNjMwMDAwMzdCQzQ3OTZCMEI4RUQ2QzFFQjczREJERUQzNjNDNTc3NworOjEwNjMxMDAwNUU0NEM5Q0ExQzA3RUY1RkQ2MTlDRkRGN0ZCOUZEOTk2QworOjEwNjMyMDAwN0VDQ0FGMTEzMkU0MDlDRkRFRjFDQTUwNDM3Q0Q4NEZBNgorOjEwNjMzMDAwOTRCNDkxRUMxRTYzRDREMzZGRkE1NDhCMjk3QTBGODFGNQorOjEwNjM0MDAwNzYzRkQ2OTVERUI3OTU0MkNEMzBEQzc3OTEwQTJDRDNENworOjEwNjM1MDAwNDkwRDk2NUUxMkM0QjIxRjY5NjdFNzY2NjE5RjNCMTBFNAorOjEwNjM2MDAwRjQ0MjE3OTYwQUYxODg0NDI3Rjc3Mzg5MEZFQjc5QTQ1MgorOjEwNjM3MDAwMDI0QjA5RjA5NjFBOEQ0QjQ4M0JBRDk4QkYwMUYxMEJDQgorOjEwNjM4MDAwRTBGQjQ0RTdDRTdDRUVDQTg1NkVFNEVGOUFBQkQ5RUYzMgorOjEwNjM5MDAwMThCMTc4QzU2NEI3RkYwMTM3RTIyMThDRjI3QjNBMTc1OAorOjEwNjNBMDAwRTU4NzdFMzVCNDFEQ0UxRjNEQjA5QTlEN0JEMUU0M0I4MQorOjEwNjNCMDAwRUU2RkU4Nzc5RTRCNjFGQTQwNUQyRkEwMUNBQjc3NENFNworOjEwNjNDMDAwRkMyMUMyQjNDNTdDNDYxRjZGMjA1NjZCMUVGQzNFODg2NQorOjEwNjNEMDAwMzZFRTc0RUU2Nzk4Q0VGNTIwQjhCQkQ5Rjk0MTFGOUUxMgorOjEwNjNFMDAwNEY5QTBFRkUwNjVEM0JFOTZFNjdGN0Q5NjhFMzg4OEUyQgorOjEwNjNGMDAwRUIwN0Y3MTZFRkQzQkQ4RkY5RDE5NTMxRkI4MENCRUFEMAorOjEwNjQwMDAwRUY5OEZBOENEOEY3QkZBMTEzNEE4RkZBRTM5RUZCQTE0RAorOjEwNjQxMDAwOTI4REY0Q0FGNTM3MjUyODA1REY2QkI2MUNDM0ZENThFRAorOjEwNjQyMDAwNzBBQzVGMEY5NzY3MzkxRjY4N0E2NTQ2NENCRTQ3NkM0MgorOjEwNjQzMDAwMzk0M0UyRkMxMTMzMEVENTgwQzk3MEFFMTdFRjk2RDAwOAorOjEwNjQ0MDAwRjFCNzc2M0ZBOUY2QkI1QUIzRkQwMTM5ODNCREU2MDUyNgorOjEwNjQ1MDAwM0M3QUY4QkM4MzY0NjM3OTA2MkRCRjgwQkFDRUJGN0ZENworOjEwNjQ2MDAwMzgyOUYwOTI1QkI3MUZGMUY4NkI0NEZEQkQzNzczMzlFMworOjEwNjQ3MDAwM0Y4RTM1QjU5NDgxOUMzQjE1MjAzRUQ4NDdDQzI2MzVDMAorOjEwNjQ4MDAwRUUxRjgwM0ZGRkIwMDlFNTVDN0YzQTZGQjkxOEVGMUQ0MgorOjEwNjQ5MDAwNTNDNTE0QUNBQkYwN0IyRjY3RUJEODM5QTE5M0ZDN0VDRQorOjEwNjRBMDAwOUExREZDN0U5QUJGRjA3Qjg1OEJEQTE2NEYwNDNBMzgzMgorOjEwNjRCMDAwQ0RFRkE1MjlEOEJCQTIwMkZDM0U0NUVEOEU2OUEwRjcyMQorOjEwNjRDMDAwOEJEQTQ3NTc0MzdCRDE0RTBCRkIxRDFGMkUyN0I0NzkyOAorOjEwNjREMDAwQzFCOTZDM0JGRDRFMjZGRDlFMzUwNUU0MDk0MUJEN0JFRgorOjEwNjRFMDAwQjZDNTFFODJERkZGMzlEQjZFNjJGN0FBMTY4QTc4OUY3NworOjEwNjRGMDAwMDNEQzhCNjZFMkYzNEI0QTgxRUZGREQ3QkQ2MDhGOUNENgorOjEwNjUwMDAwRTZGMkU0OEMzQjk5RTE0QjUyMDUzNTBERDI1Mjg4MEZFRgorOjEwNjUxMDAwRUM5QTc1OEVGOTc4MEVCMkNBMTlEQUYxNDQxQUU0ODc0QQorOjEwNjUyMDAwNUI3REY1RjRGQkZCRjdCQzk0MERDRjFGNzdDQ0M3RjI3NgorOjEwNjUzMDAwMkYxQjNFQ0UwNkI5NzU3NkRGQzc3MjNDQkE5RDI3ODUwNAorOjEwNjU0MDAwNjVGMDRGQ0REOTJCODgxMDNGMjk2QjlGMjY0MzdDQTQ0MworOjEwNjU1MDAwNkFENzdFRjQyQkNGRjMwNEIwN0Q2RURCMUVBQzhGRDlFRgorOjEwNjU2MDAwRjUxRUM2NEYwNjI2MjkzOEFGQjMxOTAxRjRGM0U2QjU3OAorOjEwNjU3MDAwNTlDMkYwN0IxQ0JCNzM4M0Y3Qzc4RERCMjczMTNEQjM1QQorOjEwNjU4MDAwQ0VGMTFBOEVGRkI4RTNCNTM3MTEyRTFCMkM3OEZFNjNCRgorOjEwNjU5MDAwRkY4NkRGRTNCODY3RjZCREM0RTc0QjMwNUZGMEFDQUQxNAorOjEwNjVBMDAwRkRFOENGNDE3RkVERTFFNzMxQUQxRDZFQkQzRjU4NEFCQgorOjEwNjVCMDAwMTIwQ0YyRjVBQzhCQzdCRDMyMkZEMzhGRTcwQjEyNjdFRAorOjEwNjVDMDAwODc5QkM5QTUwRTM3QzRDREFBREExOTFDRkU2MjBFQ0I3MworOjEwNjVEMDAwNjA0N0NFNjkxNzE0RjgzREJEQjI1RDlCRjEzQ0UwOUM2RAorOjEwNjVFMDAwQkQ1NjNDMkYzMTA3RTAwMTcwQTNGMDQyQjhCNEVEQzdBRgorOjEwNjVGMDAwRjlFNzAyNUNGQUMwM0EzRUMwN0NGQ0JDQkQxNDJFQzM3NQorOjEwNjYwMDAwQTJFQjlFRTMwQzIwQkY2QUVCQTU3MDYwRUJERTdEMzk0OAorOjEwNjYxMDAwM0MwNThDNzg2QTdCNEYwNkJGQ0NEQ0JEMDJDMjZGRUVCNgorOjEwNjYyMDAwMkUzNjhGQUFCRDZDNUU2Mzc2NEQ0M0ZDOUZEOTQ3MTQwRQorOjEwNjYzMDAwRjBCNzlDRENGM0YxNjk1OENGRDk3RDU2QkNDRjU3OUI5RQorOjEwNjY0MDAwMTdBNTUzRTIyRTA2RkU2MTc0NEFGNjMyQjlBQUQ5RERDNworOjEwNjY1MDAwRjM0MkU5RjhCQjAzRERFREJCRDhFRjkyMDJDODZDOTRCRQorOjEwNjY2MDAwNUU4QkY2NEVDMkI4NjAwOTEwMkZGMEJGQTc3RDI4RkJFNQorOjEwNjY3MDAwN0RDMTYwMzZDMDc1RjdFODcwMzZDQ0ZCOENGNkZCNDgwMAorOjEwNjY4MDAwNTIzMDFCRjBFMjczMDc0QTkyNzRGOEY4RjJEODRCQTgyNAorOjEwNjY5MDAwMTcwQkM0OUE0RjFGMDEzRTdFNUU0NEJCNjhGMTI3RUI4NworOjEwNjZBMDAwMENGN0FEREMwMDNGNDgzNTAyRTBGNkFFMUJFMUQ2N0RDRAorOjEwNjZCMDAwOEY0QjkwRTU0QjkxMDBGMjYzMTVFN0M3QjM5QkU5QkVBMgorOjEwNjZDMDAwOTNBRUZGQ0JCNjE3QjBGRDZDODYzMUJGRUEyRjZEQUYyRQorOjEwNjZEMDAwQTcwMERDMkFGOTc5MEMxMkJBMERFNTExODU0QkIzMzUwOAorOjEwNjZFMDAwOEU5RUVGM0VENzE2NjJFNzE1Q0YwOUZDNUVDREE3MzQyQworOjEwNjZGMDAwQjhENUM4OTMwRDcxM0UyNjBGMzMzN0U2MUNDNDdENDZDRQorOjEwNjcwMDAwMjhGRTM5Qzc1ODNCMjlGNkJFRDQ0NEY5MDBDN0I5M0MyNgorOjEwNjcxMDAwM0JDMUVGM0ZEMEY0RUU2NDc3NjA1QTUyOUZDNEU3QkRBRgorOjEwNjcyMDAwMkI1N0NEQ0IwNjc4NTdDMkQ5NDhCQzA3NzVGRjRERTAzMworOjEwNjczMDAwQUZDMDczNDNFQzlFRDQzMEMwRTdBNDc2MEYyQTc5RTk0QQorOjEwNjc0MDAwMjZDODMzM0Q5OUNDRUFCNTQ5MURDQkMxQUUzREE5REQ4NAorOjEwNjc1MDAwQUJBQUJFQzFERUNGNjFFREFERDA0RUZCRkZDQTVENTEyRAorOjEwNjc2MDAwOTNDNEVDN0I4MUZEQkU4RjM5MTk3RUE3NDFEMzFCODk3MQorOjEwNjc3MDAwRTE2MEZDOUQ4NjY3RTg1QTAxMkU3NEJDOUZFMzc4MTJBNQorOjEwNjc4MDAwMURBRkU4RkI4RkE3QzlFOUVGM0Q4RUY1N0Y3NjFDNEQ2NQorOjEwNjc5MDAwN0YwMTdGNDJFQTIzRjFGOTg2RkU0RkMwRUZCRkZCM0U0NworOjEwNjdBMDAwMDlDRTM0RjBENUM1MEQwMzlCMjA4RTc2ODFERjIzNjM5RgorOjEwNjdCMDAwNjk1OTRBNDA5RkNGNkM1RDE3RjdGN0RGQkFFQjNDMkY2MgorOjEwNjdDMDAwNDcxRTQ4Rjk0REM3RDc4NzkyOTg1RDdFODhDQjY5RjhGOAorOjEwNjdEMDAwODNGODk2NzZDRjI0RkNCNUE0NjNFQTEyRUU5RkYzRjkxMgorOjEwNjdFMDAwM0RFNjA1MjQ4OEY2RTk1MEQyOEU2NTIxRTlDMDcyMTg4RAorOjEwNjdGMDAwRTlDMjEyQzNDQzAzQzE1NUVBMzNGMUZCNjg0N0MyRTJEOAorOjEwNjgwMDAwRTc1QTAzNEZEQjQ0Q0MzQjc4MDNFNDEwREM0QjJCOTg3NgorOjEwNjgxMDAwQzA5RTlDN0YxRENDRkZFRDI0MEY4NzU3RDhGMDdCMkJBQgorOjEwNjgyMDAwNDRGRjdCMTgwQUQ4ODMxM0JDQkREOTgzQzQyMzlERTlEOAorOjEwNjgzMDAwQ0U3QkM5QzU3QjZEREY0QkMyRjUyNUZBMURCNTg1MzExMQorOjEwNjg0MDAwRjdERUIwNzNFMTFBMUNFNjkxNzZDQzIzNzk2M0UzMDM5QgorOjEwNjg1MDAwNkYwRkExRjBCRjdGOTcwQkVERTRDMTFCMUIxNzgyM0NBQworOjEwNjg2MDAwQkY5Rjc0QTRDMzM5RTFDMUZDMUUxMUQyNjZGQ0ZEQTYxMgorOjEwNjg3MDAwMjE2RDE2RTNFRjA4QzdGQzVFQ0YxQ0I4ODcwNENGRUY4RAorOjEwNjg4MDAwMTk5RjZCRTc3MEYxMUVDODM4RjkxOEIxRTc3OEZGOUFDNQorOjEwNjg5MDAwMTRGRkRFMTc1MjE4RkZGNzUwNjJDRkYxRUU2QTE3MzE3RQorOjEwNjhBMDAwM0ZFQTAxQzhCQkQyRUQyRjg2NkNBQkIxMThFOTRCRjlCQQorOjEwNjhCMDAwQjczQ0IzQUUyRUY4OTgzRkMyNjVGNzZGMTc3QTdFRTcwNAorOjEwNjhDMDAwRkYwMjBGMjE5NEU2MDA4MDAwMDAwMDAwMUY4QjA4MDBFQgorOjEwNjhEMDAwMDAwMDAwMDAwMDBCREQ3RDBCNzg1NEQ1QjVGMDNFMzM5MQorOjEwNjhFMDAwNjc5RTk5ODQ5OTY0OTI0Q0RFMTMxRTIxMjhFMDA0NDMyQworOjEwNjhGMDAwOEM2OEVCNDk4ODE4MTFFREYwQTg0NURCRTIwNDA0MDIyRQorOjEwNjkwMDAwMjQ5OTQwRDFFMjJEMkQxMzEyMjAyMDZBRDA4ODQwMDkwRAorOjEwNjkxMDAwMEVGODI4RDY0NzI3QkRBODg4ODEzQjIwMjI1QUVEMERDNgorOjEwNjkyMDAwRDVCNkQ0NUEzQTIwNTU0NDg0RjE0NUI5QkRGNTdBRDc0NQorOjEwNjkzMDAwNUE3QkVGQ0M4M0E0NjBBRkRGQkRGRkY3QTc5RjNERUM5MAorOjEwNjk0MDAwQjNERjZCQUZGNzVBRkJDQ0U1MEU4NUIxNENDNjlFNTY1NAorOjEwNjk1MDAwOTREQkJDMjMxOUZCMTJGRkFFODkzRDZGQjFFQjE4MUIxMgorOjEwNjk2MDAwQ0JFMEFGOEQ0RDJDNjdBQ0I1NDFCNUFGODE1MjZCRDA0QworOjEwNjk3MDAwQUFFOTlERjBCNEVCODI0QTMxNjM3OUE5RDVFNkY5NTBEMgorOjEwNjk4MDAwNjYwRTlEN0Q5ODlCQjEwOUZBQUIwRkJBQTFCREIxNTFCRQorOjEwNjk5MDAwQkREQzA0RTVGRERCRTZGNzFBQjBCRjRCNjUyNjk4MzI5NworOjEwNjlBMDAwQ0YwMUUzNDI5OUU1RTg4MkMzQTBEQzY2RkZBNTYzMTY0OAorOjEwNjlCMDAwQ0M1RjYyODNGNzMwNEU4MTlEMDVERDMwRUVERUFENzczMgorOjEwNjlDMDAwRUFCMERDREFDQzU4MzZDRUEzRjg3QURERDQ0RjY1OEY0NgorOjEwNjlEMDAwRTFCMjk4MzZBOTJDOEJCMTIyRkMyN0NDQTNCMkI1MUYwQgorOjEwNjlFMDAwRUJEMzE4QUI2OTNDNkU4OUQ4RTA3REE0NkUxMjFCQ0Q0OQorOjEwNjlGMDAwNTg5NUJEOThGNkE5QkU3M0ZEMDc1OERFQjJFNDk4QzM1QQorOjEwNkEwMDAwMDdGM0JEQkE3NUU1NkYyNkMwNzg4NjIwQUMwQjg2MjhFMworOjEwNkExMDAwRkRBMkY1RUQwOTMwNUY3NEFCOTE2RDYzMzEzODE0MkUzMgorOjEwNkEyMDAwNTU4RjQ1Q0MzNDIxRkIxMkZFQ0I1RjlDNTgzNjMyMjg2MworOjEwNkEzMDAwOTc4QTcyMzFBRTIzQUUxRUNBOTc4QkY5MTk5QkNFQzJDQworOjEwNkE0MDAwNTk1ODJGRDZFQkQ0MTg4Mzc1MzJCQkNERjlERUE1OENGRgorOjEwNkE1MDAwNUQ2MzU3RDg5NzgzNjNFNUIxQTJCQ0RERDA1MTZEODVFNgorOjEwNkE2MDAwNzU2RUZGOTNFMjY5ODFFQTdENUJFNzE0RTFGRUNFQkVCRAorOjEwNkE3MDAwRTAyQkIyQzMzRTk2OThEMzQ2QjM0MUU3OUY5RkMxRUU0OQorOjEwNkE4MDAwMTZFNzE3QjBFODVDRjgwQzVCOTgyQkQ2N0VDNEEzQ0Q1NAorOjEwNkE5MDAwMjYxRjhDRDNCNjhDNzk4RTBGNjNDQzFDREM2RkJEMTQ5MworOjEwNkFBMDAwQ0ZGMUEwQzEwMzQ1QjY0MjYxRDM0MzUwQUZEQTk4MTY4NworOjEwNkFCMDAwODI3OTJFMTdGODkyRkM1Q0IxQ0NGREFCQTE4NkQ4QkNENAorOjEwNkFDMDAwMkJCRTk4M0ExRENGMzc5QTZBRDVCNjI5RTdBRjRCRjY1OQorOjEwNkFEMDAwNTNFREVFMDA5RUFGMjE5Rjc5NTI2MDNFODNCMzM3RDdDRQorOjEwNkFFMDAwMEVGRDJFN0RERUU4QjEwMUM4MjZGQzYyRTRBMDA4Q0NENAorOjEwNkFGMDAwN0JFOTRCQjczMDc3MkE4NzE3QUU1NzVENjJGNDFDQ0YxRQorOjEwNkIwMDAwNjBDQ0I0QzRFOTUxMkZDNzc2MzZDMkM3NEY2Q0M2QTA1QgorOjEwNkIxMDAwMDlFMUJGRTRFRTBFQUM2RkRENUFFMTcyQzdFMUY1Q0FFMAorOjEwNkIyMDAwNjU3NjhGMEFFQkRDQkNDQ0VDNTE2MTgzMkJDNUZFOTIwMQorOjEwNkIzMDAwRDc1N0UwRDA3OTgzRDBDRkE4NjMzRUFDNUYwNEU3ODAxRAorOjEwNkI0MDAwNzA1QzY0NEZBMUU3NDI1MUVFNTIwMzUzNzBGRDVEODBDQgorOjEwNkI1MDAwM0YyRDg4QUY4QjM5RkUyRUNBMzEwNzExQ0YxN0JEM0FCMgorOjEwNkI2MDAwMjQ5QkY1NDM1N0YyRjlGODMyOTc2NzI4QUM2M0YzRTJCOAorOjEwNkI3MDAwOTkyRTA2NURBQjE2RUVCNzVDMDdGQjVGOTQ2QUI2MjNGMQorOjEwNkI4MDAwM0VFQUQzNEExRUJBMUFGMUZEMzUwMzQzQkE2QTREQUQ0NworOjEwNkI5MDAwNzBDRjhBMUI0RjlGNTZFOTQyNzhFODc1ODE1QzY2NjcyMworOjEwNkJBMDAwNkM5NTdENDZBRDlBODNGODEyRDhDNDNDOENEREQ3NzFDNAorOjEwNkJCMDAwMkQyRkE3MDY3MjE1QTg3RkE4RTM3QTVFQ0UwQzZDNTIyMworOjEwNkJDMDAwQTBGRUUxOEUxQjc5QjkyMDkwQUI4M0YyQ0YzQTI2RjM3OQorOjEwNkJEMDAwRjJCMEMwMjYyQ0ZGQTJFM0RCQkMzQzBBRDY5MENCRDg5NworOjEwNkJFMDAwRjMxREI3RDQwNjYwRkU1NjgzNjdCQTA3RTY3RDA2RDY2NgorOjEwNkJGMDAwM0YxMkQ2MUYxMkNGMTdFQ0ZDNUM2NUZEMkZGMTNEQzA5NAorOjEwNkMwMDAwN0I4Nzc4MjZENzNGMjdGQUVEMUNBMDdFOTdBOEVGMTkzRgorOjEwNkMxMDAwNjBGQzNEQTI1Rjc4ODBGRUZCNDRCRkZEMDNGNDNGMjA5MworOjEwNkMyMDAwRkExRDFDQTBGRTM1NTFGRkZBMDBFM0ZGNUFGNEVCMUREQworOjEwNkMzMDAwQTBGRjZGNDRCRkI3MDZFOEZGM0JEMUVGRjAwMEY1NkY1MAorOjEwNkM0MDAwOEJGQTc3OTJDNjNGMjJEQTQ3QzRGQkZDRDRGNkI3MDMyRgorOjEwNkM1MDAwODA3N0Y5QzBCN0YwQUYzNEI1M0QxREYxNkU3MzczMzk2RAorOjEwNkM2MDAwRTE3RkVCNThDMEYzOTEzMTdDQ0Y1Nzk4MTdDQkEzMUQzMAorOjEwNkM3MDAwMkE4RDM3MUFGOTMxM0NERjE0RTM1NzJEMUM3QTFGRTJCNQorOjEwNkM4MDAwRERBMjM3RjQxRUM0QzM1NkM1NzNEODA3RTMwNzE2RUE1RQorOjEwNkM5MDAwM0NDODc3MTdCREFBRTc3OEJFNTAwREIyMzhGQTdFMzNFQworOjEwNkNBMDAwNjlGRDVCQzRGQURBQzQ3QTdGNjUxRjRDNzQ1M0I0QzRCRgorOjEwNkNCMDAwRTU5OTI0RjkyNUQyQkQzREIxNkMwNjdBRDI2MEZFMzY0NQorOjEwNkNDMDAwMjc5NzJGQTUwQkFCQ0RDMzUxN0U4MDdDNDFCRUI5QzJBNworOjEwNkNEMDAwNjYwQzlCNjBGRTE1NzY5NUVBREI5Q0Q1NzZBQzBGRDhFQQorOjEwNkNFMDAwNTU5MjNGMkI5Q0Q1RTY1OUM4NTc2REMwRUMyQTYwM0VBMworOjEwNkNGMDAwM0IxRkJCQ0RBRUQ2MDY5MTdGMzg2QUE4N0VDMjJGMjYzOQorOjEwNkQwMDAwRDk5MThGQjZCMUE4QTMwQUY3QjcxNEU0MEFGNERGREI3MAorOjEwNkQxMDAwNUM0REVGOEIxQzlGMzk5MDNGMUY0QUU3RkJEQTlGN0E0RgorOjEwNkQyMDAwQzA1MjBDRURENDNCNzQyNDJGNEFFQzJBQzlCMUMxNEI5QworOjEwNkQzMDAwNzU0MTM3MzREOTZGNUZBNEMzRjIyMzZENUM1RUMxNUZDOAorOjEwNkQ0MDAwNkExOUNDM0Y5NDRGQ0ZCNkRGNTlGMTVBMjlDQUIzN0JBOQorOjEwNkQ1MDAwNTQ4RkRCQ0RERkE5NzFGMjYwMjhDQUFCMzQ5QzM3M0Q3QworOjEwNkQ2MDAwNDE1RTc1OTUzMzBEQzcwREI4Q0NDMUM3NjBEQ0ExMkE1MworOjEwNkQ3MDAwNzM2NUE0QzdFMDVFRTREMDczRjlBMjlGRTQ0MUI5MzYxRAorOjEwNkQ4MDAwQTQyMzUxM0UxNUI3QzdDOTI3ODZGMjMyNTEzRTI1Q0IwMQorOjEwNkQ5MDAwQUI4MjY2RTA4RjcxRkQ0RDJFN0I0MkQ5RTI0ODI1RjkyQQorOjEwNkRBMDAwMDQzQ0M2RjMyNTRDQkRBODdCRDE3NTU2MTZFM0Q3Qzk2NAorOjEwNkRCMDAwRjJBODU1QzgwN0M5Nzc1QkJGQjgzQzQxM0U0OEJFOUNBNgorOjEwNkRDMDAwMkMxRjJFQ0M1RkRGQkM3RTM4RTEyMTcwMkJGNzg1RjlCQworOjEwNkREMDAwRUM5Qjg4MDc4MDdGMDY5RjQyRjI4M0E5M0U5NzM3RjU5OAorOjEwNkRFMDAwQzJGMDMyMThCQzc2QkJFREMyNzAzMzY0QkU0NTdBODUwMgorOjEwNkRGMDAwQzFBN0QyRjhFN0M5OTUwQkMwNTVCNjMzOUExRkU5M0EzNworOjEwNkUwMDAwMEU3MkVEQjM3NzdFNThDQTgwNjQ1NjAyNkNFOEZDMzM4QworOjEwNkUxMDAwNzVDMUM3NjBERkY5NEI5RUVDQzJGMUYzMEU1OERCMTA3MQorOjEwNkUyMDAwQ0U0NkQ3QUNBRTM2REM0RkM3NDM4QzAxM0VFOUNEMUMxNQorOjEwNkUzMDAwOUY4QzM5RDU3NkVDQUZFQTM0NTdGQTEwMjgzRkYxQkI3NgorOjEwNkU0MDAwNUIxNUMwMjc3RDQ2QjM4N0MxQjkxRDdDRTZCNUY0MUIzMQorOjEwNkU1MDAwMTA3RTZGMTg4OENFNEQzQUFGOUQwREExRTUxMEJFQURFNgorOjEwNkU2MDAwMkFCMDZFNUQ0Mzc4RUMzMzIzOUNGMkI3OUI0OTBFQjA5OQorOjEwNkU3MDAwQzBBM0FCMzU0MEVBNTYzODBFMzYwRUVCQTdBRkQ2NjA0RQorOjEwNkU4MDAwREZEQjk1QkVGMkY1NTgwRTA1OERCQzNEQjA2OEZDQkY0QQorOjEwNkU5MDAwNkU5RDIyRUE5OUE2QkE0OEVGMTRGNUJGQUNBREI5MUFCNworOjEwNkVBMDAwREFBQkY2NEI1NTkwM0I4QkQ2M0REQjZFMjhDMDdBOUQxNgorOjEwNkVCMDAwRUNBRkIxNEFEODJGQ0UyN0NBMkE5Q0NGOTNGQjQ1N0Q5MQorOjEwNkVDMDAwRTBBNUY2MUEyMEEyNkVBMzlDOUYwNUIwN0RCNzRFQzcyMQorOjEwNkVEMDAwQ0I4MTlFNzYxQ0ZGRTk2QUQxM0ZGMEY4NkEyRDlGRDZFMAorOjEwNkVFMDAwNzM4M0RFMDE0NUM3MkJFREI2MkI2M0VCNUQ5N0ZFNDY0MgorOjEwNkVGMDAwN0IwQkVDRUYyMzc3MjQwREI2QzExQUI3MUVDRjQyRjlGNgorOjEwNkYwMDAwQkM2QTdBQjMxN0UxODY4OEVGMDU5OTM4NDhFRjI2M0NDQQorOjEwNkYxMDAwRUQzQkI3MUQ5MzAzNzk1MDdCRTZDMERGRDI0NjQyOTUyNworOjEwNkYyMDAwNUYxRjM5OTAwMkYwNkJEQ0Q5NkMzNjQwN0Y5M0MxMUIzOAorOjEwNkYzMDAwQzgyQjhFRjU2QkRDNTE0N0ZBOENCRkE3OEM5RUZERjRGNQorOjEwNkY0MDAwM0JBODBFRkVBN0ZBOTk4RDE3MzFERjQ3RTFERjM0M0RFQworOjEwNkY1MDAwMDU1NThERkFFNjc2OUI5RURBMzM3RUZFRkRFRjRGRjYwMQorOjEwNkY2MDAwRkZFOEE5REZEQzhDRjM5RDc2NDdCMjI2NDJFQjU1NjE0MgorOjEwNkY3MDAwODA0QjNGRkQ2NEZCQTY5RDkzRTk3OTM4NDVCQkNGMDE2QgorOjEwNkY4MDAwRUZFNzAyRUYyMjdFQTUzNjdCQjA3REM4REM2MUY3MDAxQgorOjEwNkY5MDAwQTAyRDg2MEUyRkNBMEQwMDdENTA1NzE5N0JERUVGMThFRAorOjEwNkZBMDAwNEFFRDkzREYyN0QzNTdDOENDMzIyNjIxMUY2RjUwNDlCMworOjEwNkZCMDAwNEU4NUNDODE5NEQxNTA1RTBCNzY0ODBCMkM2OTc5RDlFMworOjEwNkZDMDAwRUZDNjhDQzRGMkIzMzY4Njc2NDk2QkMzN0VENzQ4QTQyRAorOjEwNkZEMDAwMkI4RjkxQTFCRUJCRjZDQTUwMEVEMjc5NUJBMzcxRkE3QQorOjEwNkZFMDAwQTM4OEJGRTE0NUFFRDk3MUZBRDZCQTc0MDNBRDYzRjU5MworOjEwNkZGMDAwQ0I0MDc3OTdDMUQzMTA3MjI4RDg3RjE4QzgwRDA1RjlGOAorOjEwNzAwMDAwQTJDRjhDNzY4RTI1Mjc5RDA1OEFCMTlENkQyREQyRTc2NgorOjEwNzAxMDAwNkE4M0FGQjYxQURCRTVFODQ4QkU1ODg2NERBQkFEODY0RAorOjEwNzAyMDAwNzVCODMyNzU4QTlFRDY1MTczNzgwRUNBMzdCQjExMjU1MgorOjEwNzAzMDAwMjgzQjkyM0U3MzI3QzJFOTQ5RDVEMzhDNzRGOEE0Q0Q3RQorOjEwNzA0MDAwNjYwRjQwMDVGMDQ4MERGOTlGM0FDQzE5QzRCMjQ5Q0ZGQworOjEwNzA1MDAwOUE1MThFRTc5NTgxM0M4RkQzNjM4RjA4RkU3OUM0NjE4NgorOjEwNzA2MDAwMjQ3RUI3RDYxMjlBNUMwNUUzNTgxN0U5RUMwMTk4NkZCNQorOjEwNzA3MDAwNzVFM0ZBREUwOTMwQ0Y0RjFCOUYzQkQ0MDJFRkQ3NjQ5NAorOjEwNzA4MDAwQTkwQ0Q3NjE3M0FBNjEyM0M4MUZDMzhEQjA0NjU4RjdGNgorOjEwNzA5MDAwRDMyRDVFM0JGMkQ3NjhBNkNBQjY0MUJENzVBODkxQjk5QgorOjEwNzBBMDAwRTNGODk1NkQyNDk0RTNGODY0ODY1M0Q1MkNEMEZGRUY3NAorOjEwNzBCMDAwRTlCRTdGNzdDMEJDOTdCRkYxOTYxOUZCQkJDNkVBNzRFNworOjEwNzBDMDAwNDgzNjIxOTU5RjczNUE3OUUyMzhGNkFCMTNDNzQ5QUYxQQorOjEwNzBEMDAwNDlBQzc3NEU0QUFDQ0Y5QTk2NThFRkZBNUU2MjM5RjdEMAorOjEwNzBFMDAwRjZDNEYyNzQ4OTZGQzA3MzZDMjA4RkFEQkM4QTU5MjNDQgorOjEwNzBGMDAwMUYyRjQzNzkwQkYwRjkwM0MyREY1QUEyRjMyMDdDMkMzNworOjEwNzEwMDAwOEQ4RjlFOTgwM0Y1NzlDODRGRDAxRTFBQ0Q0OEVFRUVBQworOjEwNzExMDAwMkJGQzE3MzdFQTA1QTZGNDY2Qjc2M0U0RjlGMEM4MkIzMQorOjEwNzEyMDAwMzBERjgwRTc2NTFCQUFEQTE5QjRCN0JERjNDMTE3MzhBMQorOjEwNzEzMDAwQkU4REM1QjUyQjQ2Rjg2ODUxNDcyNjJGQkI2MDNEQTlDQgorOjEwNzE0MDAwRjgwRjM3QzJCQkY5Q0YzRjQ2Qjk3ODQ4RUY0MTc4RTcyRgorOjEwNzE1MDAwMzVBQTM0RkYzREQzREM0MTNERDcyNzVDQThDRkE0ODlCNQorOjEwNzE2MDAwRjY2OUU2QjVCRDdBRTBFNzY5RUZBQzVFODg3NjZGMzIyNgorOjEwNzE3MDAwNUNCMzU4QjM4Mjc0MDlGOEMxRURFRDNBNDZGMjYzOTVGOQorOjEwNzE4MDAwOEVENTIzREVBMDhEODBFMzkxN0EwNEZDNjI2QTg2OTExRAorOjEwNzE5MDAwRTA2NDRBNTc4NEREQThFQUIwM0U0QkU4NEZDNjlDREI2QQorOjEwNzFBMDAwMkQ0OEM3MkIwRTcwRkM1RjYxRTRFM0Y0OERFN0E2NDkyMAorOjEwNzFCMDAwMTFFNTE5RjJDOThDNzQ1REMyMzhFQkVEQTI4RDI4NjcxOAorOjEwNzFDMDAwM0E3OEI5N0I3RkZBMEQ0ODk3RUJBN0E1OEY0MTNDMzEwMAorOjEwNzFEMDAwQTFERDA1RTMwRENBMzc2QjIzNjA3Rjk2NTc4RDAxMDU0RQorOjEwNzFFMDAwMDYxREE0QjJGRDA2MzhDQjZFMkJCQkNEMEJFQkQ4NzhCOQorOjEwNzFGMDAwRDAxQUQwQzM3QkNCRUNGQkVEQThBNzk1OEI3NTc3MkY2RQorOjEwNzIwMDAwRjdCQzg5N0MyMDVBQTcxMjFDMkQ5OTFERjYzMTIzRjk1MQorOjEwNzIxMDAwMUUwMkIwM0U0NDA3OTQ4QjU1QzMzQTQ5Q0ZCMzU0NzUxMAorOjEwNzIyMDAwOTA3Q0I3OTQ3NTc0MjA5QzM2NEVEMjkxQkU5MTdFQkJGMworOjEwNzIzMDAwOEVGMEQ5NTIxMDNBMzQxNEZEMDRCMzc1NzYxQzJGMUQwQworOjEwNzI0MDAwMDRCRjExMDY3OTIwQkZDMzhCN0UxMzA2MzBENzU1NzA1QgorOjEwNzI1MDAwNTRDMTcxNjk4NzMwNEY4NjgwQUJEM0I5RTM4NzBBOENGQworOjEwNzI2MDAwOTM4MUUzOERFNkVEMTE0RTBFMDFBN0FCRDNERDA0NzdEQworOjEwNzI3MDAwQTcxODM3NjMyOEI0MUZDREM3NjlBQjg4OEQyM0NGNzE5QQorOjEwNzI4MDAwNjMyRDBCRTJGQUU0QkM3MjlDQkVGMTk5QTYyMDVGMzUzNworOjEwNzI5MDAwRkMwQUUwMDZFN0E0MTQ5QTY5NzEyQkU2MzNCMjhGQkJBRgorOjEwNzJBMDAwOTc3QjlCQjcxMjVEREJDOENGOTFFQkNDQUY0NjNDQ0E1NgorOjEwNzJCMDAwM0RCODY5OEE2RTM0RjZCM0QyM0M4NkQ5MkM4ODc4OUM2NgorOjEwNzJDMDAwQUIzMkYzMzdEMzUxQkZGMTEyMUM5M0U5MzU2NzdGQzc1NworOjEwNzJEMDAwNTRENDUzRTVCOTI0RDM2RjhFQ0FEQUY1RTlFN0QzNzFGNAorOjEwNzJFMDAwOEVEMzU5NUQzMkJBMUY3QTRFQTI5NzlDODNEMTNCMTA0MAorOjEwNzJGMDAwRTk5M0U5N0E0QkNBRTkzMjg0MEI4QjZGQUZCRjcwNTlCRgorOjEwNzMwMDAwQUYwRjFENDIzRjBGQ0IwNjM5MDFBMDJGNEM5QThGQjExMgorOjEwNzMxMDAwRkYzMjYxNTk2MTNBRjc5NzQzOTBFRjNCODRGRjA2RTRFRgorOjEwNzMyMDAwMTUxMDZCRjcxOEZCNzgxQkQyRTk0MjQ2Rjg1NUZERkNBNworOjEwNzMzMDAwREE1QjdGMDVFMzlEMUQ2NkI0QTM1QzI5MzhEOEQxOEI0OQorOjEwNzM0MDAwRjI5MUVERjQwREM3NzNEOEFDRkExRTRFODFGQUNEODdEOQorOjEwNzM1MDAwQjMxOUYyRURENTE2NkU4RkE5MDJDRjkzRTVDQjNBNDE2MgorOjEwNzM2MDAwMzc2RTk0NzNBRTdGRkUyOUY1QzNEMEQwQUM0QkVENDBBMQorOjEwNzM3MDAwN0JFQkVFQUY3REQ1OUNGOUJGQTg2N0IxQTc0OUNGQ0ExQgorOjEwNzM4MDAwREZERkRCNjJDM0Y5RDcxRDZDMzcwMzdDMkQ2RkYwRjZBRQorOjEwNzM5MDAwMUQ1MDBFQTgwOEJGMDZGMjY3RUQyQjk4NDM3MDUyREYxMAorOjEwNzNBMDAwMzYzMUM0RDM1MTdBMkQ4ODY1RjY0NzBCNDNGRUJCRkRCOQorOjEwNzNCMDAwRDlFRkQ1QkI5MUZGNjQ0RDc0MjMxRkRBMjZFODNEMjgzMQorOjEwNzNDMDAwRUNCM0U0RkRBQjQ2Q0Q4N0ZBNDRGMkZCNERFOTNBNzFFQworOjEwNzNEMDAwOUVERTEzNzU3MDhFQTMxRTMxQjIzNTUwNTlBQTlCRDkwQgorOjEwNzNFMDAwOEVGNjVENzQzNUYwNUZBODlEQTk3NzM3REQxRDY3REZFOAorOjEwNzNGMDAwREU2QkFEMEFBNUEzNURCMkNDQ0M3Q0EwMzBFNzlGNTM3OQorOjEwNzQwMDAwOTgwRjg4QjNDMEY5OUIyQUU0M0Y4NTJDQUNBMDlDMkQzMworOjEwNzQxMDAwNkMwNjg1MTdGMTZBQjE5NUY5RTJGMDNERkY5QzRBRURFMworOjEwNzQyMDAwRUZCNTZBQTFGNEIxRkNCRDE5Rjg4MDgxRkY5MzNEOTlENQorOjEwNzQzMDAwRUU2NTc1NEVDRUEzNTA3RjMxM0M2NTNEOEE3QzgzMzkyNQorOjEwNzQ0MDAwNkJCNDNFN0I2NDMwRTIyRkM4N0Q5ODZGQjdEOEI3MDEyQworOjEwNzQ1MDAwNjA2ODE4MDNGRkQ5NzQ2MUQzRThGM0RCRUYxMzcwNTI0RgorOjEwNzQ2MDAwQ0RCNjMwRjI0QkQ1RjZGQTYxRTIyRjc2RjU1NDdDM0I3RgorOjEwNzQ3MDAwQjRCQjg5ODkzNTMwRjJDQjIyNUNBOEZDMDMzQjk1RjM4MQorOjEwNzQ4MDAwODBGRjlBQzY5MERFMUY0MEZCM0I5MEM2RUQxMUE2NjlCNworOjEwNzQ5MDAwNkU2NzE2RDIwQjIzMjBFNzlCNTlCQjE5REExMUI2MDM4RQorOjEwNzRBMDAwQkRFNUIwNUUwQkU5Q0RGQjk5MUJFOTAxM0Q2Q0VGQTU5NQorOjEwNzRCMDAwMTBDQjYyMDhEN0NEOENENUM2RDM4MTdDNEFCRjg0QkFBNQorOjEwNzRDMDAwNDQ0RkY2RDRBNTJGNTk2ODNEODY2NjE2QjRBMDNFODQ3NQorOjEwNzREMDAwNkIwMzc4QUI4QjU5NTAyRDhFRjkwNTQ3M0JEQ0Q0Q0YyRAorOjEwNzRFMDAwQzg5QTQ5OUY3REZBOEIyM0I5QzhBN0FEMDc0MDFGQkIzNworOjEwNzRGMDAwMENDRjU5NDc3Q0NBNkE0REE0M0ZDNjVBMDg0RTUxODFFOQorOjEwNzUwMDAwMUY1RENCRUM3NENFN0RGNjlCRUYyRDcxQ0U5MTE2OTQ2MgorOjEwNzUxMDAwMTc4NThCRDMxM0NFNTdCNkNCM0Y5N0M3N0M5N0M3OEZCMgorOjEwNzUyMDAwMUJBNDcxRjM4N0VFNTdEMDJGOTM3RkFFOTBFQUJCOTZFMgorOjEwNzUzMDAwQjkyRjMwRkVFMDAxQzZDRjIxM0MxQTc4RkM3Q0FBRUZCRgorOjEwNzU0MDAwMEFCRkU1QjgwOTQwQjEzOUJBREZFMTc1QzdGNEVCNjRBOQorOjEwNzU1MDAwMzhFNzJGNEVFNENCOTdFRDRDMkM0QkI4NTgwQzlBNzM3MAorOjEwNzU2MDAwMzJDMERDNzI4N0NFQjMxNUM2QkJFMjcwNjJCQkRBRTIxMgorOjEwNzU3MDAwREY5MkZEMUI2QjFGNzY0RUM1RjY2MDlGNkY4NUI3NTc3OAorOjEwNzU4MDAwOUQ0ODZDRUZBRDdBRDk4MTc0MUM2QkNGRDc3N0NEQjk5QworOjEwNzU5MDAwQzQ3NkM5RTc5M0JDNUU1ODU3RTZCN0UzRDYzNURFNkNEMAorOjEwNzVBMDAwNEFBODlGNUU3N0RFQkEzMkJGMTNCN0FFRUI1Qzg5RURCNworOjEwNzVCMDAwN0QyREZEQUZFQjg2NTJEMzNGNUM5NzZDRjdBRENBOEI0OAorOjEwNzVDMDAwNkI5N0JDOEZBOUI1QTYwMUUwQ0VEQjdGNjdGQUM1OERBRQorOjEwNzVEMDAwRkJEREZBN0ZEQ0VFQjYyNUM5RjMwNDA4REYxN0U5QjQ1QQorOjEwNzVFMDAwRjExOTUwM0YxMzVGQTFCRTY4QjM5MkRFN0I5RTlEMjVDQgorOjEwNzVGMDAwRTREMzQ0NTQzQ0EwOUYyNzREOUI4OEZENkEyNUREMDlCOAorOjEwNzYwMDAwM0ZDM0MxNjcyRUM5NDZCRTlFMjdGQ0U4NENGODE1QkE5OQorOjEwNzYxMDAwMUI1Q0U0NTdGMDg5RjYyMDRGREE5MDVGNzQ2Rjg3N0UyOQorOjEwNzYyMDAwNjk3QzVERjFGQTUzNDYwM0I3MkJFQzJDNEFGNDJDRjUzOAorOjEwNzYzMDAwQTU3NDY2NTdCODNEQ0VGNTlEODFFNjQ5MUVGRjFFNTRFMAorOjEwNzY0MDAwMDA2MUJEQjM5NjhDNjdFRjAyMUQzRTY3QjQ1N0E5NjgxMQorOjEwNzY1MDAwOUY2RDUxNDgxRjk4NTVBM0U5NTMwMTNGQzZCNTJCRTREMAorOjEwNzY2MDAwNTc5QTc1RDc5QjBGQTAzRkU2Q0FFM0VFOUQxMTc4M0Y2RQorOjEwNzY3MDAwMkJFOEYwRTBCNDREQkQ0Q0MzMzg0MUI2N0U2MUQ5OEZFNAorOjEwNzY4MDAwRTFGOUUwM0U0NjcxMzQyQzJGNDQ3Q0IzNjk2RUI0Mzc4NworOjEwNzY5MDAwRUE3MDQ1MzBDRTI5NDM3Mzk5MURGOUU2Rjc2RDFBRjI2OQorOjEwNzZBMDAwQ0RCQTY5REExRjY4QkY3RjA3QUQwNERBQ0RFNjVCNjc0NAorOjEwNzZCMDAwQ0Y3NzRFMzY2MkJDQTNFRTdCRUU0QUQ0N0JFQTQyMTYwRAorOjEwNzZDMDAwOEQ5RTY2QTY1QTYxMUY3NUEwOEZFMTMzREJDODU0MEJFRgorOjEwNzZEMDAwM0VBRENDOENDRjhBRTU1Q0ZGNEFBQkY0MUFFQjYwRkU4MgorOjEwNzZFMDAwQkE5RTlGN0Q4RUZERTZBQUUxQkQ1QzlGMENEMkJFRUJFQgorOjEwNzZGMDAwN0E1RUZEMEZENEQ3NjY2QjVFMjNGMjhCNEJCNzFCQjk1NgorOjEwNzcwMDAwNEUyQUYwNjE1NDI4QjE4Q0ZDMjBCRTVDMTY0RTJDNUZEMgorOjEwNzcxMDAwN0UzMEIxRkM3MTA2ODdFRjM4RTFDN0RBQjdEQjQ0N0MxNQorOjEwNzcyMDAwN0JDMTg3NTZEMjNGNzc4MUMwNDMzQjM5RjBCNDg5RTRBRgorOjEwNzczMDAwQzdGODA1MzYzQUFGMEY0RjVBQjdBMjVGNkZFRkRCNTY2NworOjEwNzc0MDAwNkEzRkZGNDkwQjZGQUYwQjNEODNFNUMwMzMyOTY0Njc4OAorOjEwNzc1MDAwMkZDODA4NTVBNEMzQkE1RkZDNDI0RkYwQzY2RDE5NzAxQworOjEwNzc2MDAwRkM2NzQ2NkM1RDgzRjU5Nzg3MkEzMDJFRjZEQzI1OEMwNgorOjEwNzc3MDAwRjU2MkJEMUExQzhERkI3Q0VFQkZCOERGM0FGQTg0Mjk5NgorOjEwNzc4MDAwQjgwREM2RkRGMDg1OUYzREYzMjM5Q0Y3ODlCQzc0MDVCOQorOjEwNzc5MDAwQ0VFNzJBOTQwQkQwNkVEQzIzNjYyQkRBMUJFMzNFN0MwQgorOjEwNzdBMDAwNkEwOEYyOEQwNURCNEQwOUZCN0IyNjQzMTFGQTgzM0IwQQorOjEwNzdCMDAwMERGMTZFMjBCRkUzQjFENTNGQTNGRUE1MjcwRTEzREU2QQorOjEwNzdDMDAwRUQzMjA0NzQxOEM3MEJBQ0U2NzhCNkNCQzJGREE0QkI4RgorOjEwNzdEMDAwMkM4NTQxM0NBN0REMTk5Q0FFQUVEMjZERkI2OTEzRUE0NgorOjEwNzdFMDAwOTc2RjcwM0Q2NEEwRjE0QjVEQjNCQTZBRkFGMTMzRjY1RQorOjEwNzdGMDAwRDVDM0JDQzU3MENFNjczRUIwREU4NkZFQjhFMTFCMTJCNQorOjEwNzgwMDAwQ0Y2OTQ0MzBCMUZDNzIwNkQ3MTM2NkIyQjhGN0M1Qjg3OQorOjEwNzgxMDAwOUVDMTJCNURCODlFQUQ4Q0Q2NTM3QUUyOUQ1QjhCNTE5OQorOjEwNzgyMDAwMUYzNzcxM0QyNDc5REU1RjY3NzBGOUY5RjM5RkMzMzgyNAorOjEwNzgzMDAwOUNDRkU4QjkxRTBFMTAwM0JBNUUyMEU4RTE0NTg1RUI0NworOjEwNzg0MDAwQzFGMEI3MzgwRkYwN0YwMTJBMTA4MzYzRUYxNzI0QUQyMgorOjEwNzg1MDAwNDM4RURGMjJFMEY0QTkzOTZEMUJDQTczQTc5MUUzRkRDMworOjEwNzg2MDAwQzk2NTA3MUZDMDM4QTY2Q0Y3REUzMjREQUI4OUYzMkIxNAorOjEwNzg3MDAwQ0ZEOUIwRjA0MDBFOUM3RjQzNzcyNkQ5OTlGMjdEQzNEMworOjEwNzg4MDAwMTMyRjY1N0QxN0RFOUZEQUFFN0E1MEY1NkRCOEU1RjFGRQorOjEwNzg5MDAwN0JDNzYxQkIyN0Y0MjE1QzI3RDY2QjMwRkVBOUQwQ0IxOAorOjEwNzhBMDAwNjlEODZFQ0U2NkM3MThGNDk3QzhGRTczMzc1Q0FCRDUzRgorOjEwNzhCMDAwQzRGMUQzQUY0QTRGOTJGRTFCODQ3REZDN0M2NUVGODRGQworOjEwNzhDMDAwM0M4MEY3ODIwRDhBMDc5QjJEMDg3RDdCRUE4REE4RUIxMworOjEwNzhEMDAwNkNENjdCMzBCRTUxQTEzMkFGN0UwQzk5RUVEM0YwRDk3RAorOjEwNzhFMDAwRDBGREVDODE1Q0E4RjdFRjFFNUI4MUZCNUFBM0YzREVCMQorOjEwNzhGMDAwMzAwQUU5NjU4QjgxRkM2MEM5RTc2Mzc0NzJGQzg1RkUyMAorOjEwNzkwMDAwNjExREY0NUY3M0IzQUQxRUUzMjIzMEVFN0UyQ0VGMkJDRQorOjEwNzkxMDAwRERBNjQ3M0Y3RURBMDlFMDZGRkNGRDYxMURGMENDMTM2OAorOjEwNzkyMDAwM0QyQjQ2ODNDRDAyNzg2QzZCNDdGQUQ4ODU4RTBCOUMzNQorOjEwNzkzMDAwRTc2OTNEQzkwOTE2RTZGQjE4MjdGQ0NGMEJGRUQ0NjlBMQorOjEwNzk0MDAwNTRFMTc5RTJDNEYyQjQyQTRFN0Y3NDRFQzhENDlEQjA5QgorOjEwNzk1MDAwQkZGQTQ3NDYxMUJEQ0VERDkwNDg1RkIyOUQ1Q0VGQkNEQgorOjEwNzk2MDAwNjA2MjdEMzI1RTk0MzhBNUJGODI5NUM2RTM1NzcyQkJENAorOjEwNzk3MDAwOEM0OTAxMjNEMjYzQzMxMkUwRTc3MTc0RDM3MEJDQzM5NgorOjEwNzk4MDAwODg3QTU3RjIzQ0E4NDEzMjc5QUU3QUMyNEJFNkE2RkQxRQorOjEwNzk5MDAwNUFGODdFNDFFNTM1QzM3RTRGRTJCRkI4REY1QzQxQkI5QworOjEwNzlBMDAwN0VCRTQyNUI2NDBCMkU2MTM1NkU4MEU3ODIyOUFDMTY4OQorOjEwNzlCMDAwOUY5MjFGOUVBQTBDOERDNkY2QkIwQzkxQzc3RjRBN0M3NgorOjEwNzlDMDAwMzA5NUY4QzEyOTdCMzgwREZENEFCOUMyQUY3N0NBMUQ4MQorOjEwNzlEMDAwNEU0MzNFNzc0NkM0RURCMDFFQ0JGMzdCNDAxRTAwNURBOAorOjEwNzlFMDAwN0ZGODkxOTFFNDQyNEJFOEE1MzQzQ0FGNTNDRjU4NzRGMworOjEwNzlGMDAwM0EzODk3MEZCQjMzQUFEMTFGNzQyQUY0QUIzNERDRDdDMworOjEwN0EwMDAwQzk1MDQ2MzVGQUY1MDZFMjEzQzlGQzRERUEwMzQ3RjFDMQorOjEwN0ExMDAwOUY1NzgyREVFM0Q0MjYzODExQkUxODY0QzgwMTc5OTNEQgorOjEwN0EyMDAwRDE1Q0Q2REMwRkREQ0I3RTRFNjM3MzE5RTY2OTQ0QkZCMworOjEwN0EzMDAwNkZGMzIwOUY5REVBNzREM0ZCM0E4NThGODc3RjE4REYxMQorOjEwN0E0MDAwRkJFNDYwQzYzNjNDRkY4MzdCNEIwNkExOUVGMDA5NzNDNgorOjEwN0E1MDAwMEY0MkJFQkQyMENCN0IzM0NFRTdBQUVFQTVCOEJFNkJFRQorOjEwN0E2MDAwMjJGM0I0NDI5Rjc3RjU5RTNCRUQwMEI3REIxOUM4MkQ5QQorOjEwN0E3MDAwN0M5NkZCOENFNDZGNjlDQkE0NzVDRDUyNTk1ODA1M0NCQworOjEwN0E4MDAwOUQ4NTcyNzUzNDk1NDk4Rjk5QjU1OTA5QjZDMjNBNkU3QworOjEwN0E5MDAwNUY5QkI4Q0YzOTlEQTZEOEY5QzI3RkYzMTgzMDQ0MjQzNAorOjEwN0FBMDAwQTBDRDcxRUQ2MEZDNzkyODNGMDE3RUYzQ0QyQzlDMDJDNgorOjEwN0FCMDAwRTNDRTdGMzRCMURGMDIxNkE2RjUzNDNDRjVBNUE5M0YyRAorOjEwN0FDMDAwMzg3RTJFRTBCODIwNEJGMzNCQTFBQzRDMzFEM0JBN0VDQworOjEwN0FEMDAwRjBCNDQyRjJDRDI5RkM4Q0QxMDcwNzA1MzExRUI2NDAyNworOjEwN0FFMDAwQzhFQkQ5QTZCREI0MUVGRjVENzVEQUVEODAzNzY3OTY4OQorOjEwN0FGMDAwQ0NEMjZFQ0ZFMDI5MjM2NDk3NkQ1MDA4MEYxN0Q0QjAxNQorOjEwN0IwMDAwNzAwMUFDNkY0MThGMTIxRTg1RkFDNDVCRkM5Q0U0QjgxNworOjEwN0IxMDAwNkMwQjZGNzdBQkQwNzc2NjAzNUM1MDdGMThGNzk0MTJDRAorOjEwN0IyMDAwNDgwNUZFMzlEQjBDQTYxQ0YyMTFCMTNGQUMxRjA0RTU4MQorOjEwN0IzMDAwN0FENjQxRkI2QTY0MTE1QUM3NUEzQzQ3RUVDRkEzRjU4NworOjEwN0I0MDAwN0ZGRTE2M0ZCRjcxRjU1QkY1QjhBODgzN0IyQjI4RkUzRgorOjEwN0I1MDAwRjcyOUYzRDAzOTgyNUVDMjJDRTlFN0UzMDlDMjVEOEJENQorOjEwN0I2MDAwODM1M0ZERTZDNDMyN0IzNEFFM0MxOEUxMEFFNTM4NzgzNQorOjEwN0I3MDAwMzdFREY4RDJBNEY1MDNFNzA3RkJFNDQ5NzBDNEU0NTFGQworOjEwN0I4MDAwRUMzQ0JERjc4ODM4ODcwN0JGM0QyNzA3RjlDMDdEQThDMworOjEwN0I5MDAwQkZFNjhBMDEyQTkxNkYzMkU5RDcwODlCNjE3Q0VCRTU0OQorOjEwN0JBMDAwMkNDMUNGMDFGQTE1OTU5RjcwNEU5QkI4MjE5RkIxRjU1RQorOjEwN0JCMDAwMDYxRkM1MEI2NkU5QkQwNzMwQjQ5NTkyRUQ3QjFBRjEzRgorOjEwN0JDMDAwNzY5NjRFMkI1NDg5MUY2ODI1NjRFRjJFRTFFN0YxRDA5RAorOjEwN0JEMDAwOThFNjExQ0RGREQ4Qjk3MkZERUI5NTUwNTg4N0ZDRTBDMQorOjEwN0JFMDAwMDVBRTFGQTQ5NjQ3MERCRTM4M0E3QjQ1RjBCOTQxRkI2MAorOjEwN0JGMDAwMjIwN0YyMTA1RjlFNTVDODJGQkY1MTYxNkQwQUMwRDk5MAorOjEwN0MwMDAwMDVDNzgyRjI2MEEzNzJGNDAwQ0E4RjhERDdCQjU5MkJDRgorOjEwN0MxMDAwRDQ5N0VGOThCQ0YwNjVCMjk1QUQ5NEQ3RDNCOEEzNEE4QQorOjEwN0MyMDAwREY2OEEzRkQ3MzdEMzVBNTc5QUIwRUVBQjM2RjJCMUQxRAorOjEwN0MzMDAwODM3NDAyRkJCRTZEMEFCQzdGNUREMDZEOEU4REUzODNDNQorOjEwN0M0MDAwNkI3OUEwNzgxMUZBNjVGNzc5MTdCRThDRjQzRENBNEFCMgorOjEwN0M1MDAwRkVBRjZDODA1NTZBM0EzRERCNTEwRjc1QjExNjA1REJGRQorOjEwN0M2MDAwQURDQzU0NzhERTQxMUQ5QkZFQ0I5MTg0MzVFQUEwNzRFNworOjEwN0M3MDAwRkUzQzBDNEY0NTY1NkRFOENGQ0Q1NjQxQUZFNUVGREJERgorOjEwN0M4MDAwNzA5RTA3RDNGOEJBMzI3NUZBREIyNkEzNUUzRDg2OTc1RAorOjEwN0M5MDAwRDM5NzJBREEzNjQyRkU3NUI0QUU2QzEzQUJDNTdERTNEQQorOjEwN0NBMDAwN0JENEMzNjExOTVBMzdENTA3MDk0RUQ5RTM5QkNCNzBGMgorOjEwN0NCMDAwMUREOTQzRjhEMzY5MENFN0UzMzhBRkY3RTE4OTRGODc2MworOjEwN0NDMDAwRkM3QUIxOTBCQjhCQjc1NjY3MjM3RjdERkQ5NDU5NDVGNQorOjEwN0NEMDAwM0VGQUJBNEJFQThGNjExQkVBOEY2QzY4Mjk2RjJGRTQ3QQorOjEwN0NFMDAwREJFMkIyRjFEOTg4RjdDRUMyQzQ3NjY3MENEQUEwQ0I1QQorOjEwN0NGMDAwNTE0RTFDRDI1M0JDRTczMzlCMzZDODAxRURBRTMyQjJCNQorOjEwN0QwMDAwN0VGM0VDQkUxMEU3RUEzRkE3QjA2MDlDREZDMDNGRkQwQQorOjEwN0QxMDAwMkNFOUU3RkU3MzZBQzJGQjUzQ0JDQzJDMThFNzM3NjgxQgorOjEwN0QyMDAwQThERjM3MDFEQjM1QjJERTk1ODg4RjhEQTExNDE2OEM2NAorOjEwN0QzMDAwQTM4RkFCQUNGRENGMkJFOUMyN0Y0RUNGMDJGRENFNkI0NAorOjEwN0Q0MDAwNEM3QzdGMkU4MzA1MzJGQTZCOTc5NUY4MUVGNjkxNTA4NgorOjEwN0Q1MDAwREVGOUQ3QkU3REUwN0I1NjE5NDk0MzNGRUEyNDk0ODc3QworOjEwN0Q2MDAwNTAzRTEzRDQwNTBDQzA4NzVFMzc3MDM5NzdEQTFFNDk1MAorOjEwN0Q3MDAwOTA4M0E3REQxMTJFMDdEMTRGNjRFMzdBRkE2NDNDNjc0NAorOjEwN0Q4MDAwMzU5QTM2MjUzNTM2OEZBQ0M3RkVFOTcxRkIzRDNERERCMgorOjEwN0Q5MDAwQzhDMjc0M0U1MTVBMDdDMjJGMzA5Q0IxNEQzRDFGMUJDMworOjEwN0RBMDAwMzEzRkE2QTE2NzJGQzE0RkUyNEQzQzFDMDNGMTcxQTdFMworOjEwN0RCMDAwRDZERUIwMEU3ODQ2NjVFNjRGRDc4QzFDMDEyOEI4NEY0QQorOjEwN0RDMDAwRjI4N0FFMzVFOEU3Q0NEMkVCMTJGODQ1NEE3OTFGRkZDRgorOjEwN0REMDAwMjA3NkY1MjA0NkMxODhERjZDNTk4MzdFRDI1ODk5Qjc0QQorOjEwN0RFMDAwOEZGNTdGNzg2MjBEOEM1NzNFOTJGN0FGQ0UwQ0JFQjYwMgorOjEwN0RGMDAwOUM5MjQ0M0EzOEZGNTVBMzg1REVENEI4QjIzOUE5NkNCOQorOjEwN0UwMDAwODNGMkE4QjhCMjNEQTlERTk5NTRFRjRBMkFFN0YzRjYwNworOjEwN0UxMDAwQTc1MkMzODU3QTBGNjMzNzY2M0UzQTUxMDVCRTc5MkE2OQorOjEwN0UyMDAwMjczQzAzRjNDNkQ2QjYzRTNFQjEwNkY4NTk2MzM5OTdGMAorOjEwN0UzMDAwQ0Y0RDNEOEE4NzdDN0YwMjdFNEQxRUFFMzdEQTNDMTFFNgorOjEwN0U0MDAwMjNFNkFCQTU5NEY3MUU0MEZFRDJCMDUzQjEyQjQwMEZGMgorOjEwN0U1MDAwQjY1MDc3OThDQUQ4Q0YxREQ3MkZBNDUwQkY4NkQwNTExRgorOjEwN0U2MDAwRUEzN0UwRjhBNTNBQTJGNzM1QTVDNzc4QkJEMEZCQTQ1RQorOjEwN0U3MDAwMDdBQzZBNUI0OEYxNzkxOTdGRDYzMzlGOTZBN0M0RTJCNQorOjEwN0U4MDAwQ0Y5MkNGOUVDRUQxNUUyMjNFQkI1QkIxMjM3REY2RTE4OQorOjEwN0U5MDAwMjk4RTFCRTdGNzkxRURGRjM4QUFFN0I3QTg2NkE0MkM1NworOjEwN0VBMDAwRkVCODA1RjVEOTNGMzVCRTNGMTZGNUJCM0YwQTc5QjI5RQorOjEwN0VCMDAwNUUwOThFQzA3OTM3MzFERjA4OTQ5N0RGNkYxQ0I2NTdBMworOjEwN0VDMDAwMDdFRDhFMTgyMjVEMTg2MzVCOUJEOTMzMTFGM0U4OEVBMgorOjEwN0VEMDAwQTQ0NjBBMzAwRkVGREUwNzBGMTAzQzhGNjQ0NkJBMTAzRAorOjEwN0VFMDAwOUVDNzFGN0M4NUQ3MTc0NDBBMzBFRkVFRkVDQzRGNzgzMworOjEwN0VGMDAwNzk1OEE0MEJDQkJCMUVGQzEzMkY4RjhBMTRFOEExRkY2QgorOjEwN0YwMDAwRTBDMDkxODkzNUQwRkYzMTdCRkY3NEREOUFDOUY1N0JFNAorOjEwN0YxMDAwQjlCRTJCODY2QTNGQzk0NDdCQjU4MUNCQTEyRUIwODlGRgorOjEwN0YyMDAwQ0NDMDM3NjdDQzNGRjlGNDYzMDA4NzE5RkY5MjQyRkM1RAorOjEwN0YzMDAwRUNCMTUzNTMyNzcyRkQzQ0UwNTUyQkQwN0ZDQkZGNDg2QgorOjEwN0Y0MDAwNEUxMkJGNTdDOTZFQ0U0MUQ5OTgxRTNCOEZENEMyNUUyOAorOjEwN0Y1MDAwMzdDOTkxNEI5QUJCNTFERkM4OUUzMTkyRTQ0ODhENTM4QgorOjEwN0Y2MDAwRkIwQkNFMkI5RkY3RTdDMTEzREFGRjI1RDNDRUY5Qjc3MgorOjEwN0Y3MDAwNUU0N0YxRUNFQzFGQTU5MjdFNzY5Rjg1RUYwN0U4ODZDMQorOjEwN0Y4MDAwQ0VENzI2Q0U2MzgzRDhDRjg2NEM2RTU3MzYzQUFGQTU3MAorOjEwN0Y5MDAwNzE2RTE1RkE3NEU3RUFFMDEzMTY4MEZGREIzMjRGNjY2NAorOjEwN0ZBMDAwMUREN0NGQkZCQjE1RjgwQUYwRjE0RTg3OTY4M0ZDRTRDRQorOjEwN0ZCMDAwQkIyMkVGNERGMjBGN0M5RjFFNjc5Nzc0OTY0MUQ5MTYzNgorOjEwN0ZDMDAwQjMzRjNCMjc2QjM5NTYyNzNFQjM3NDE4Qjc5MUZDQThEMworOjEwN0ZEMDAwQjM5OEY3OTM3MjI5QkI5NUNGOUI3RERGODg2REI4OEZERgorOjEwN0ZFMDAwMTQ5NUZCOUY2NjRGMkZEOUQ2NDI3QUMxMTQ1QTJGRDNDRQorOjEwN0ZGMDAwQjQxQzA1QzYzQjNFNkZCMDBFRkQ1MkYyN0NBNjBGRDVGOQorOjEwODAwMDAwN0U4OUYwQjk1NUY4RjVFNTM5QzlGM0ZDOEJEOEY3MkMyMgorOjEwODAxMDAwM0RFODE1QjBDRjc3QjM3QzM0MUVFODE5QTM4NUZGOEJGQworOjEwODAyMDAwRjQ4Q0JGRTAxOUM3QzE5N0E5OTFCMUY4RkVGRjIzMzhCRQorOjEwODAzMDAwRkRGRUVCODA1M0UzMTJFMDE3QkE4QkUwMTcwMjdFRUJGNAorOjEwODA0MDAwOTVCMDIxOUJGMzBCQjJBN0YxM0RDQTlENUYzQTdEMUYwRQorOjEwODA1MDAwNjZDNkU1QzdDQ0Y4NTEyM0U5OTU3MjVEMjkzRjdDQkUyMQorOjEwODA2MDAwRjYzQkVDN0MzQTRCRDZGQjNFQzdGMzhBRDM0RjNERDI2RQorOjEwODA3MDAwOEYyOUU2MzlGMkI2OTlFMjE2NDc4QzIxRTI5QjQ3QzA3OAorOjEwODA4MDAwMUU2QTQxRkUyMkUyRUUxNUZGQjJFMDc1QjQwN0U1QjhDNAorOjEwODA5MDAwREZDREQyNzM3RkIwM0M3N0M1REIzREE3MThGMzUwNThENgorOjEwODBBMDAwQzA4Q0ZCOTg2Q0E0NzM5NzcyQjdEM0MxRjM0QTNBRUZCNAorOjEwODBCMDAwQ0FBM0JDOTIzMzJDQzJDODFGNUFDOTg4M0YwMjFFNTBBMworOjEwODBDMDAwN0RGNDk2MkNBMjdGNjgxRkIwNjBGQjc5OTc1MDdCQzAyRgorOjEwODBEMDAwOEIwMEYxODc1QkFDNjRCRjc0NjI5QzFBRUI2RjI5MEQ1NworOjEwODBFMDAwNjIxRTBDREFDRDg0NkZGMzc0MzQ2RjNGRjhDMkZEQ0Q5RAorOjEwODBGMDAwQzM3OTlFODVDNDlCQUM1NkVFRDc2MUFBMzY3QTcyOUMzMgorOjEwODEwMDAwOUNCRjIyOEI5RjczNEE3OUU0RDlERkEzNUVCQkQ2NDIyMgorOjEwODExMDAwN0EyRENBNTg4QTA5NzU2NEQzMzg3MEZFRUUyQ0VFMTc5MgorOjEwODEyMDAwMjAzQ0JCRkRERTU0OTFDRkU2QTk0MEI4QUU0QUU1NzhDRAorOjEwODEzMDAwQjlEOUMyRTM1NTlCNDE4RjI2QkUyOEYwNTdFNkQzRjk0MworOjEwODE0MDAwODRCRTE3QTlEN0E1QTFCRTMwM0FBQkNGREZBMEExRkQ1MQorOjEwODE1MDAwNEZGRTcyQTg5RjE5NTE4RUEyREQzNjMzQTAwRjlCRDAxRgorOjEwODE2MDAwMEU2QkJGNTY4QkM0RDkzMUY4ODdGMUJFREIwNDVGNjU1NworOjEwODE3MDAwMUIxOEY5MEY2RkMzN0U2OTM4QkUzNTBERTM5QkI3NjFERAorOjEwODE4MDAwN0ZGNEQ3MkVCRDM2MjE4RUE3NjU3MUZBOTZFQjRCRTZBQworOjEwODE5MDAwRkI1QTk2RjA0Qjc2M0NBNEM1Q0YyM0M3NEYxRTBGRUM3RAorOjEwODFBMDAwRDEyQTg0MEZDMDM5M0MwOENGQjc0NTRGRTc5N0JDQ0VFMgorOjEwODFCMDAwQzgwNkVFRjc4RTZDMjgyMkJDOTNFMzBEQjRDRTNGRUJERAorOjEwODFDMDAwQTM3NzI4MjAwN0U3OENFNzc2QkFCNDdGNjYwQjNCOUE0MworOjEwODFEMDAwMkQ0REI0RUZEMENGRDI1N0Q2OUY1RjRFQjYxNzMxM0U1QworOjEwODFFMDAwOUZEODlFRUIyRDI5MjNBMzQ2QTI1QkI3OTJCMDdFMDlCMAorOjEwODFGMDAwQUY4MUUwMzBGNzJCQzI0RENBQkQ4NzJDNDAwN0U5NjgzQworOjEwODIwMDAwODYyQjg0QkYxQkVFNEEyMTM5RTYzNDA2NDcyMDVFMkRCQgorOjEwODIxMDAwQ0E3MjUzQkI0RDk4Mjc0MzcyOTVEQkNEOUZCRTJFRkQ4RQorOjEwODIyMDAwMUU4OUY2QjJERjFBREQ4MkYwRjI1QjE5RDFEM0U5RERFNworOjEwODIzMDAwQTk0NDNGNkM2ODY0MDZFNjk5OUREOTY1NjI4OEJGNEQ4NAorOjEwODI0MDAwNEFBNDA0RjlENjY5NDVBQkEzNzYyRDI5NkVBNDIzRTk4NworOjEwODI1MDAwNTc3OEY3MzlFRTU3RjAyMzI0NjE3REZFQzA3RjUyOUU5OAorOjEwODI2MDAwOTM3RjY3QTIxRDdEMUFGRUFCMDdCQzNGQUQ4QjU0RTAyOAorOjEwODI3MDAwNzg5MjFGODAxRUFEOTE3RTU0Q0ZFMzNGNEQzQTE2NDA1OQorOjEwODI4MDAwM0JFQjJBRERDQzc5OUNDRTczRDkzNjdBN0ZCNDY0NTEyRQorOjEwODI5MDAwOUM5RTBFRURGNjJCRTkxQzdEOTA2RTFBMDQxQzlCNzRCRgorOjEwODJBMDAwQzdBODVEMDNFNjJCMjEzQ0QxREU0MjNGMTk1NkM2RjkzMworOjEwODJCMDAwNzU5QkQ2N0U0OEY5NTI0RDNCMTJDRkJCMjE4NjBGQ0EyMworOjEwODJDMDAwOTcwQUY2OEJDMzBGQTJFNzgwRTAwNzhDRkIzQjZBNzgyNgorOjEwODJEMDAwRkMzQTU1OTQ1MzZBN0IyOTdGQ0EyRkZDMUY5OUZCMjJENQorOjEwODJFMDAwMTM5MEFGQTQ5Njg3RDg0Qzc4RkE0RjcwN0Q2MzVDQ0YxQgorOjEwODJGMDAwRDY5N0QwQUU3NkQ0RjYxNjIwMTlGODg1OUY1MDlFQjc0MworOjEwODMwMDAwNUNFNzk1M0RFQkM4REYyMUY1OTQzOEJCNzNDNDk0MDQ1QQorOjEwODMxMDAwQkZDMzcyRUE4Nzc2MkNDRTE3QzE1NzM5ODgwNjVDQkU3OAorOjEwODMyMDAwQUQxN0YyMkQwNTBENjI5NDgzMURDMzQ5MEVBMjlDNDIyOAorOjEwODMzMDAwRkUyNEVENjBFNDU3QzgyNzUyQjJBQkY3MjBCRDNFOTI1MQorOjEwODM0MDAwNURGRDAyRTc2QjgwNjdBOEQ3QTM1MTc1RTVDMEZFM0REMAorOjEwODM1MDAwMDkxRkQ5MEVFREUxN0ZFNEJGN0I1NUUwQURGNEFCRDM0RgorOjEwODM2MDAwOEFDQTMxREYzQTUzRkFFQjI4QUVCNzQ4NzE2NzIzREU4OQorOjEwODM3MDAwQkVBN0Y3OTE1RjZFMkUwQjkwOUY2ODFFRkFDM0UwRDlERgorOjEwODM4MDAwMjBFODdEOEVGMDJGQ0QxMTdFMjVGNEY3QzZDNzFGRDFEMgorOjEwODM5MDAwRUYxQTVGOUVDRjdBMzlERkQ4NkU4QUU1RTVBMDFGQTg3NQorOjEwODNBMDAwODY4NTUzNjFCQzQ2RjQ1M0UxMzM5NEQ4QUY4OTQ1QTkxRgorOjEwODNCMDAwOUY3RkU3OTdBNjg0Rjg2NjI3REZGNzZERTJGQzFEMzVGRgorOjEwODNDMDAwNDEzREYyODk4RDE2RUU5RjkyRkM2M0RDNTJFRUM3MUE5NgorOjEwODNEMDAwMzQ0NjJCNUU4MTc4RkVBQTgxRkMxQjdGMTFFN0Q2RTcyRAorOjEwODNFMDAwMkZDREFBN0UyOTBCRTA2NEQ1RjM3QjZDRDExNTI2RTI1NAorOjEwODNGMDAwOUJDNzQxMUU3NzBCQkZDQTE0QjQ0Mzk3MzEwREYzREUwMAorOjEwODQwMDAwOTk2QTJGOENCNzUzRTU3M0NEMkU0QjNERTJDRjY3NDI2RgorOjEwODQxMDAwOUVDOUY3REJCMzBDQjQxRUYyMzcxMTVGNEUyMUI5MEJDNgorOjEwODQyMDAwRUM2MzM0RTI1N0M1NjAyOTE3RDk2OEY0NzMxRDE1NzZEQgorOjEwODQzMDAwNzNEM0NEMzYxRjhFMTdEMTcxN0VBMzY0NzMzOUE1NjRCMworOjEwODQ0MDAwRjNCQzNFNTlFRUIzRjMwNEZFQzhCODIxRkE3REUyRkQ1OQorOjEwODQ1MDAwRUVFNkJFRjZFQjg0M0VDOTY4QkZFQkU3ODlCQ0YwM0VCMgorOjEwODQ2MDAwM0NENjExNUY0QTE5RTkyNUZFN0I5NUFFOUFGODUyRjQ4NQorOjEwODQ3MDAwMDM5QjFCRTE1MkZCNjFDMzNDRENDNzI3RDNBRDc0RkZGOAorOjEwODQ4MDAwRUY3NkUxMDc3NjY1M0I2ODdDRTlGN0JENTAzQ0FENzY1OQorOjEwODQ5MDAwQ0QwOEUyOTdCMjdEMUUxQTI4NjNDRkY3MUZFRjEyN0MzQQorOjEwODRBMDAwNkMxN0UzRUIwRDlDQjBGMjNDMTU5NTA1OTBBRkVEMEEwRgorOjEwODRCMDAwOEQwOEUyN0FFQjg0RkYwMUY1MUJFNEFGRDE2N0Y5Mzk0RgorOjEwODRDMDAwMzI5NUVCNDNCQjdBNDYwNTExREY4RjFBN0MxQjY3QTNGRAorOjEwODREMDAwM0ZBN0RCNDA3RTM5QTYwNjlGNzgxQ0M3RDk5M0UzQzEyRQorOjEwODRFMDAwQkNBMUQzQkFFODk2NUY0M0JCNUQyNzdFOUU4NzcxQTI4RAorOjEwODRGMDAwNURDMjVGREY2MDBDOTc5MERFMkNGMjI0MUJEMkMyMjU5OAorOjEwODUwMDAwRTgwNzdBNTE5QzU3ODMxNUNBRjAzRUMzRTIyQkNGMUU3MQorOjEwODUxMDAwMUI4QkE3NjEzRjdDN0YyQ0M4RjVGMjYzOENFMzQxNjAyNQorOjEwODUyMDAwMkQ4Rjk3MDI3QzczNjZFMzdBNTc2NzUzM0MwRUNGMDUxNQorOjEwODUzMDAwQ0ZFMURERERBMzY4NUZFQjBEQTJGRDBCMEFCNTU3QTYwOQorOjEwODU0MDAwOTRDRTIwQjlCMEM2OTQ4MUYwM0ZFMzM1NTI5RUFGRkY4MAorOjEwODU1MDAwM0VBRTM3Q0VEMkI5QjcyQzQxNUVCOTI3ODVGNjM3QkJEMAorOjEwODU2MDAwRjMxMEM1NDlGQ0Y3Q0VBNUZCOTNGRUY5NEI2RjYyRkZGNAorOjEwODU3MDAwMjA3RTgwNzIyNURFRUY3RDlBNDUwQkM5MUVBRTFGMUM0MgorOjEwODU4MDAwMEFDMzNBNEVGNzhDRjBGMEYwMUZCRjhGRDMyNEYyNDlBNAorOjEwODU5MDAwOEYxQjk4ODZFQjhFRUUzNjA0RkJCQjI3MzhEMEY4RTRCMQorOjEwODVBMDAwNDBBQ0UwRjI4REZDRTNGMTcxMUE5MjA3ODk3MTlCMEJFQworOjEwODVCMDAwOTU0RjFCMjIyNTc3QzFGQzZCMzM3QzczQjJFM0Y0NDVFNgorOjEwODVDMDAwRkY5RTFDRTI3N0VGREVGM0Q3NDJEMjJCM0E3ODlDRTE5NAorOjEwODVEMDAwQjg0MTlCODE3NEUyQTgwOTFCNjdDNkU5NjEzRkM5MTZDRgorOjEwODVFMDAwRjY4NzQ5RTg4RkMwMDdFM0U5NUVENjU3NTQyN0QyOTk0QQorOjEwODVGMDAwN0NGRTM4OUJFQjIxQTkyMkFGRTBGQzdBOTlCNzM2RDVGNworOjEwODYwMDAwODRGMjkzQkI5NjcwNUMzN0JEMkYxMkYxQkE3MTI3QTIyQQorOjEwODYxMDAwN0IzMTNGQUIyMTU0NDZGMUMwQTJBNTYxQTI0QjgwNzdDQworOjEwODYyMDAwMThGNUZGRTMxQjUzMzkzRjgxNkRFMjM4NzMyQTE5RTlDRQorOjEwODYzMDAwQUY3M0Y0M0M0RjYyOEUwOUY0NjEyRUM3QTlGRDdCMUIxQQorOjEwODY0MDAwQjMwOTBFMTVDQkI5MUUxODdENTYyMUJFMjhFMzk2NzVDOQorOjEwODY1MDAwOENGNzdGQkVFRDY4NDAwRkVERUJCNjJCNjVDMDVBNTkyNQorOjEwODY2MDAwNUQ1QjE1RTU1MUNDREY1QzRDRTczRjRFRjBERjU5MjZGMgorOjEwODY3MDAwQUQ2NDIzRTJEQkYzM0NFRTA1RjM5MURFREQ4MEI5NjIwRAorOjEwODY4MDAwNjM4ODJGMTk1MTFFRDY2RjU3MThERTM3OTZGQjRGOEUxMQorOjEwODY5MDAwMTNCMjYwNjI5QzY2NUM4OEYzNkY5NDFCMkM0RTVGOTNGMAorOjEwODZBMDAwNzIwOEU1MDU0QkQyMjMxM0YxMjIyMEUyNTdGQzdDN0VCMQorOjEwODZCMDAwMkVFMDJBRjkzRjQxRUMxRkM4NDFEMEE3OUY0NEZDQTlGNgorOjEwODZDMDAwQThFNkY0MTdFRDU2MDhDRThEQUM5OUM3OTU4NDFDRUE0MAorOjEwODZEMDAwNUI4RjkwNjNFRkU5QjlEQzlDNjM1QTQ3Q0YzMDVFMUUzNQorOjEwODZFMDAwMUI4QjcyMzBDMkU1MjBDODM1RTQ4QjAzRTE0NTc4MDA2RQorOjEwODZGMDAwQkM5MEY4QjAxN0Y3MDFFMzM1OUM2MEUxNkZDMDdDMERDQQorOjEwODcwMDAwNEI1OUI4NzEzNDdGQTY4RTI2QjlDQ0U1QjM5OUNCNjdBNworOjEwODcxMDAwN0M1QTJGNDI0RTI3Q0JFNzY0Nzk5QzJDODc1MTBDQTFDMQorOjEwODcyMDAwQkM5NTc4MTBFRkE3NDc3RDY0RENEMkEwOUVGQjYxRjM3NworOjEwODczMDAwRUQ5ODFGMjhDRkE1RDFBOTFEQ0UxQjFCRDNCN0ZDODc1MQorOjEwODc0MDAwQ0Q2NkY3NjU1OEY2QjJDMTM2RjQyRjU1REQ1RTAwRkJGNQorOjEwODc1MDAwRjdBQkZDOUU3MjBBQzA2OTJCQkNFRjEyRkFGOUU0MDI3NworOjEwODc2MDAwQkU3Rjk3QzgwMzMyQTg1RTU2NjZDMzczRUEyNTdCM0E3QworOjEwODc3MDAwOUFDOTI4QUY1QkMyQjcyQjE1RkE4REMxN0U1Q0ZFRjU5NgorOjEwODc4MDAwRjUzN0IzMzY2QjVDRkZFQTVEMTY5MjJGNjc1RjQ4QTUzRAorOjEwODc5MDAwRkI2ODRDRjUxNTM5NjBCQ0FDM0Y4MjlFMEVFNUQzQkIzRgorOjEwODdBMDAwNTI0OUJFOUYxNkZDREUyOUZEMTY2QzI1OURENzY3NzhDMQorOjEwODdCMDAwQ0U5OTg4NzVENTc5RThGRjY1Q0FDNDNDNDZGN0I0Qjk0NworOjEwODdDMDAwREVEOEU4MThDODZGMkZFQThCN0I2RkU2Nzg2NjIyMzkwRgorOjEwODdEMDAwN0JENjExQjkxM0NCQjAxRUNBMzMzRTI1Q0VEREJGNjNBNQorOjEwODdFMDAwN0NEOThGMzAzRkMwNkJGMzcwQThGQUNBNTA2RjMwRTk2NAorOjEwODdGMDAwMTdERjZDRDZFMzdERkRBNUQxQkI2MDFGOEQwNTM2Q0FBMgorOjEwODgwMDAwNUZBRTI5N0FFNzc3Qjc0MEY5ODMxRDA2QkFFNzM4RUZGQworOjEwODgxMDAwQjFBOTgzQzJEODRERDU1Q0ZEQzlFNzc5NDE0M0MyRkRGQQorOjEwODgyMDAwQjkwNURCMTNDQjhEQTFDNEIyM0ZFOUJFRkM5Mjc3QjY4QworOjEwODgzMDAwQkVCNjNGQUUzRUQzOTVFQUE0RjM3NzMzMEZFNjVGMzM3RgorOjEwODg0MDAwRkRGNzA2RjlGQUUxOTdGMkY5RDc2NUMxRDdGNjBGQTM1QworOjEwODg1MDAwRkNCNTdDMTdDRkNCMzFBMjVFMzMxM0YxQTE5RjdFNkZBNQorOjEwODg2MDAwMEFCREM2NjQ2QTNFODE3OUYwQTYxNzRENzRBRkZFNDQxNgorOjEwODg3MDAwQjY2RjE4RjY2RkQyNDUwRkUwNzk5QThBNEU4RDQ2Mzk1OQorOjEwODg4MDAwNTg1REY0Nzc4QUE3OURGRDMxRjMyMDdDQ0U1QUFBNDgyMworOjEwODg5MDAwQkYzOUJCRDFFMjQ2RkJBQ0IzRDA0Njc4RDBCOTQ3MDk2QgorOjEwODhBMDAwMkE1QzdGOUYzNEI2MDJFM0E3QjQwN0U2REY3MEZEMDdCQQorOjEwODhCMDAwRkNEMjA2MzNGMzdCRjg2MEJEQjg5MENGNjg2NDRGQkQzRgorOjEwODhDMDAwMzdEOTZBNUYwRUZERUEzNzcwNzlEQkMwN0FEMzkwMEYzMworOjEwODhEMDAwQ0M3NzcxRkVFM0Q3M0Y2NTM0QzMzRjhCREJCNDExMkRGQQorOjEwODhFMDAwQjBERTA1NUUyQkRERDc1MUJGNTBFOTlFRkEyQTFDMzI1RgorOjEwODhGMDAwNEVGRkFGNzIwOTNGQTkzOTYyQUNDMkY5RkZCRUI4MTY4QworOjEwODkwMDAwNUQ2M0QyQ0Y2NTMyRjgzNEJDMTc2NkQ4NTkxNkNFODM3MgorOjEwODkxMDAwNTc3Mzk3QkM0NDc2NEU1RjFDN0EzN0U3NUI3M0VGREE4OAorOjEwODkyMDAwNEJFRjk1MjlCNUI0REZGNzYwQkYwODk3OTczNjlBNjg4MworOjEwODkzMDAwQkZFRjE1RDhDOENFN0NBRjhCREJCRjczRURDNkEwOTk1NworOjEwODk0MDAwRjQ4RDczMTk3ODlGRjZCRDJFMDNERDYzM0YxRjFFRDc4QworOjEwODk1MDAwRDFCREQ2RjczN0JGNDI3RUI4RjcxOTlGMzdCMDQzNEYyNgorOjEwODk2MDAwRkFDQUZCRjY2ODQ1MThFMUU4NkU0RTQzN0RCNzdFQzM1MAorOjEwODk3MDAwM0NCQTE3M0JCNzRCRUY0NTdFMzZCN0VCOEU1RjVGODk0RQorOjEwODk4MDAwRkVBMzI5Qjc5NkUzOTZBRTcxMkNDRTcyREI2MkY1NTI0OAorOjEwODk5MDAwNEY1NUQzMkIxRjQ3M0FCQ0U2OEJGMUJERDdBMEJFRDRCMQorOjEwODlBMDAwMDU3NDUyQ0NGM0VFNTE0RkRGREY3NTFERTlBNTczMjczNworOjEwODlCMDAwNUIxREI4MkZGN0U2QzcyNkEwRkM3ODdGNzIyRURERTM5QgorOjEwODlDMDAwOURGQkI0QzJGMEQzMEQ3MzFENEJCMkYwRkQ1QzQ1RjVCOQorOjEwODlEMDAwRjY4NzRGQ0NDNUZENkQ1NTQ1MzY0RjE4RkJGRDU2NEZGQworOjEwODlFMDAwNzgwMjc0NzUzM0NBQ0ZDNjJFMDNFOUJERkJBN0JDRkQ2MAorOjEwODlGMDAwQkI1QjlDMzFCQTUyQTY2Q0I4NjkxQ0I2RkY5OTgxREE5MAorOjEwOEEwMDAwRjdFOTNCOUI2Rjk0RjhDMkMyMTU2ODU3NzFCODI1RDMzQworOjEwOEExMDAwOTlBOTY4NjkwOUFFMkI5OURFRTYyRTZGMkVFMUYxQUJCQworOjEwOEEyMDAwQUY0Njc3NkMzM0JGRDdEQkU2NTJEODk3QkFBRjQ0NzdGRgorOjEwOEEzMDAwNzdCQkM2NUUzQ0REQjFGQ0Y0MDQ3QkVBN0NGRTE2MjAwRAorOjEwOEE0MDAwM0M5NUZFN0ZCMzg3Njk4RkQ5MjhERUFCMjlDMDdGNzczRAorOjEwOEE1MDAwQjhGOEJERjUxRDJFN0VCRjRERkQ4RjQ1REJERjAwRjg1QworOjEwOEE2MDAwNTRCQTdDNURCODhFMjJBNjk1QTFEQzc0NDdFREQ1NzgwQQorOjEwOEE3MDAwMTdDOTI2RjQzOUI2RDkyNEVEMDBEMkVGRDc2N0IyQzdBQgorOjEwOEE4MDAwRDdDNEY5MUY0MjJFNkUyNzAxMUY3ODFDQzczOUZEODdGNgorOjEwOEE5MDAwQkYxRkMwNzM2QTJBM0MzNTFBRkRCRUZFNzM5RjUxQkNDRQorOjEwOEFBMDAwRDBENkMzRTNDRDM2NEY5NEUyRjAwNkE3OTdGMDUwRjI0QworOjEwOEFCMDAwNzdCRjg3Q0I5RkYzRTBFNUUyRjczQkZDQ0UyODhERjM1MQorOjEwOEFDMDAwNTYwRUU3Q0Y5RDIyQkVCMjY5ODk5NUZDQTk5QjlDNDFCOQorOjEwOEFEMDAwMEJGNzJGMDQxOENBQTc0OTk1N0ExRTI3MTNGQUQ2OERDQgorOjEwOEFFMDAwQzIxRjY5MkU3Rjg5NjE3QzhDNURDREYzQzJERTI4N0YzOQorOjEwOEFGMDAwNDlDRDgwRjJBRjJCQUZGNUQwN0RCRUYyNDdEQTA3RTM2OAorOjEwOEIwMDAwQkVBRjM2ODhGQTIxRjRCRDhEN0ZEN0FBQTg3RTkxNEJERgorOjEwOEIxMDAwRUY0NkZBOUU1NENFRjMyMjU5N0QxQUY5NERERTI4N0Y5NgorOjEwOEIyMDAwRDc3OTdCRENGQUJEQ0NFQ0I2MDFERTRDMDE2MjhEQ0Y4RgorOjEwOEIzMDAwQzNCQkU5NkE4QkRCMTY4NzNGOUY3NDI4QjU1Q0VGNzU3MgorOjEwOEI0MDAwMEY5QTM2OEFGQjQ1NDgxRTk3MjdDMjYzOTFDQjQ4RjM5QworOjEwOEI1MDAwM0U5MjVENzUwOEUxN0NDRDM3Rjk3OTlDN0NEQTE0NDQ0RQorOjEwOEI2MDAwM0U3ODUyREM4RjQ5ODY1RkM0MjVGMDQ3MUQ5MTEwQjdDRgorOjEwOEI3MDAwNzcxQTQzODUyODI3M0Y1NDEyRkJDRDZGRDc1M0RDN0NFRgorOjEwOEI4MDAwNUVCQkMyODIzMERGQzkyNzlFMkY0NDdFRkVDMTYzQ0YwOQorOjEwOEI5MDAwMTdDRThDNUI0RjcyM0ZGOTNDMjlFNzEzN0VDMTY0M0ZDRgorOjEwOEJBMDAwRUY0MEZFNUREOUVFQ0MwNkU2MzMwRjg5QjUzRjUzRkZBQgorOjEwOEJCMDAwMzdGMkVGQ0VFQzExRkU2MTREMUJFQTQ0N0I0OEI0NEYxNworOjEwOEJDMDAwMUUyRjMzOTdGMzZCNjVBNzQyN0UwRkU5REYzQzc2RjBFQgorOjEwOEJEMDAwMTE4Q0E0RjQ5RDlGQTVBNzU4MTc5RkNGMjg5RkUzQzQ4RAorOjEwOEJFMDAwQjk0REM1NzM4M0FENThEQTc5NzlBMEYzMUE4ODFFN0YyMQorOjEwOEJGMDAwMjFFNDkwM0NCNzYzRUQ0MzA2MjExQzhENEQzNjk1RjE4MQorOjEwOEMwMDAwN0I2QUE1QThBRjc3MzFBQjA3RTlFOUFGMjJBRkQ1Njk5OQorOjEwOEMxMDAwODUyN0U4NjlDNjVDOTcwREY5OTlGQzJFQzAwRkFENjlGMAorOjEwOEMyMDAwREJGMEY5NTc5MUY3RUFCNEMyMTNDNjI5QzgyREE1RjFCNAorOjEwOEMzMDAwRkVBQUYzOTI1REY3NDM3RDA3REQ1Rjc0MDkzQUM5NjZDQQorOjEwOEM0MDAwNjE0NUMxNEYxRDJDNzg0RUExQkNBRkY2NDQ3ODY3QjU4NQorOjEwOEM1MDAwNzIzOTEyQUQzMzkyRkM5MjcwQkY2QUU2OUQ2NEJGRjYyMgorOjEwOEM2MDAwNzM1RTFCMTA4RjcyMkJGOUJCQzkzOUM1QzJERjExQTEwRQorOjEwOEM3MDAwMzg4MkE1OTJEOUQxQkU2RkJEMzI0MEVCOTBFN0U1RTdDRgorOjEwOEM4MDAwQ0Q5OUQyQTM5MEZFOENGOTJGMjlFOTE0MkYwRDg4MjdCNgorOjEwOEM5MDAwQjNBNUIzQkVGODQxOEFCMDc3NTk1MkJDMjAxQkY0NkUxRAorOjEwOENBMDAwNkMyN0Q3MDk2NUNBQTNCOUNGMTFFQTI4RTFGMTU2RDJEQQorOjEwOENCMDAwNEI3MTVDN0MzRjczQTQ0QUZFNzY2QzY3MUM3MzYxRkM0RAorOjEwOENDMDAwRUJDMzUzOTE5NzM4NDlCRUFGQjdGNjFCOUY5ODg0RjcxMworOjEwOENEMDAwODNGMDFDNDAzRUEyNUVDODNDODY4NEZCNDE5QjQxOUZDMgorOjEwOENFMDAwNDYzQjREQzY3RkY1QkE1MDk5OEJFQzkzREUwOEZBNEZBMAorOjEwOENGMDAwOEMxNTY2MzdDQURCMTQ3REE4MTRDRjJGMzkxRTBDRURGNgorOjEwOEQwMDAwOEE3OTFFNDJCRTAzRTU4Q0JDRkZEM0I0NjRCQzE3RTM3MgorOjEwOEQxMDAwNTRBMDdGMDRDQzc4N0U5M0Y5RjkzNURENTU0NUVGOTU2NQorOjEwOEQyMDAwMjlBNTJEODg1RkZFQTU4Q0JFNTMzMEJFQTc5QkYyQTQ1QgorOjEwOEQzMDAwRkNCNTVDMUZGM0VGM0M2QTY0ODBCRjMzODUzRjg3MDk1NQorOjEwOEQ0MDAwRkY3Mzk2MzhENzYzNDJGRjhFQzVCQjIyNUIzMEVGQkIwMworOjEwOEQ1MDAwNzM1RTNFRERGNzREQ0UyQkY5QUFGMUNFMzNBOTAwOTAxQworOjEwOEQ2MDAwQ0JFMkUyNTg4M0NDNUNDRTg4RjM5N0Y0MkRFMzVBQTk4QQorOjEwOEQ3MDAwMjNCREM1QTg4OUZGMkUzQkZBMkJFQkQ4QUY5MDM3MTI0NQorOjEwOEQ4MDAwMzg3OENGM0ZDRTFCOTk3NjEzRTY4RDk4NTFDQjE3RjVFNworOjEwOEQ5MDAwQjgwQzkwQTM3REY3RjkyQzZFOEE3QkY1RDVFMzc3MTg5NAorOjEwOERBMDAwQ0MzQjE1NzE3RjhGREQ3NEVENTBDQTM3MTVFNUQ3RDZGMgorOjEwOERCMDAwNjJERUY4N0QxNjk2MzA1RkZDRkFENEE0RjEwRDMwQkU2OQorOjEwOERDMDAwQ0QyRERBMDc0RURFNzBBRDRBRjE1RjUxM0Y3MTJERTZEMQorOjEwOEREMDAwQzlEQzY3NDgxQzhGNTA1MERFM0YzNEM3RTZCQjdERjNDQgorOjEwOERFMDAwODY3QkQ2RTZDN0U0MzlDOEY3OEQzOTYzNjM3MjdERDVEMworOjEwOERGMDAwREI5MzNBMkU3MzIzN0Q3RDRBRjlCQjUyM0VGQjlEM0NBQgorOjEwOEUwMDAwOEYyNDk5OEYzRDlBQTM0OEJENzgwMjhBREM1NUQzMTdFOQorOjEwOEUxMDAwRDI3NzBCRkFFMkJGM0Q3NTFBRUFDMzMyRkVFQjVGRUE4NgorOjEwOEUyMDAwQTUzQzVFRDAwN0I2RTc5MDNFNzBFQUJEQkQwQ0Y1Q0UxRQorOjEwOEUzMDAwOTM2NDE3RjhDRkE5REM0RjA0N0EwNTdFODdDNkRDNTMwQworOjEwOEU0MDAwNDVGRTUwNEM0RjFEMTY3N0ZFRjM4NTlDNDIxRDFFRTlEMgorOjEwOEU1MDAwQzFCRkY5M0I4RkU5QjEzRTU3RUJDRUM5OENEOTg3Qzk2OQorOjEwOEU2MDAwRUI3RDJEODdFN0I5RkI0QkFCMzcyMjNGNjA4RjJBRjRCMAorOjEwOEU3MDAwMURBODM1QTU5RjkwREVEMUY0QzJCNTYzRTNGM0QwRTcxQQorOjEwOEU4MDAwRUQ3QzkwRTczMTZGMzdGNEJCRkZENzcyRjg3NzYyOUFDOQorOjEwOEU5MDAwNUU3ODk2RkM5RDI3ODNGQ0ZBNENCRDFBNUM4RDdBNjgzRgorOjEwOEVBMDAwN0RCRDBFMzUyRjU2MUVBQ0JCODVGNDgxRTlCMDBGRDhDMQorOjEwOEVCMDAwNTcyODg3QzNDN0JGN0Q2QTAwRjNFMkZERjA5RjAyQUY2QQorOjEwOEVDMDAwMzY3OUU3OTA1REIwNjlCQUQ5ODY3MTFDN0ZFOUNDODVBNworOjEwOEVEMDAwODRGRjc2QUI4NkZCNEY1RTY3MkNDRTZDQTVGQkNCNkIxRAorOjEwOEVFMDAwNzYxQTZBNTE4RkFBMDBCREU5NUY2MUJEMDVFOTEzNkI2RgorOjEwOEVGMDAwM0RDMDk3RjJGNERENjUzRkIwNjFEQ0JEN0ZCOUVDQ0ZEQQorOjEwOEYwMDAwRTNFN0Q4QTY3ODAzREYyQTI3M0YyNzhCQ0ZFMzI5REFDOAorOjEwOEYxMDAwQzlGNUIzQTMzOUM2MDRCRkZBRDExQzk1RTA3OTc1QTA5MQorOjEwOEYyMDAwNzczQ0UyREMxRTM1OTI4MjdBQjI5RjY5MUZBM0ZEQ0JBQgorOjEwOEYzMDAwQkMzNjM3Rjk3NzE5OEZCMzNCOTdCOUM5QkY2Qjc2NDYwMworOjEwOEY0MDAwRUVCRThDRjQyODk1RTJDQ0QyQkUzOEZEMDJGNzhCNERGNAorOjEwOEY1MDAwQ0RGNTlENDZGQ0E4RDA0NzFFRjgxNkMyRUQ2RTU1RjgxQgorOjEwOEY2MDAwODkzOTlGMjk5QzZBMUI4MzdFMkM4QjMzRjI0MEFEOUJGMQorOjEwOEY3MDAwRjI2RkM4MkYzMUU4MUI2RDc0MEU3QjlDQ0M4RUYwMTlGQworOjEwOEY4MDAwMUZBODUzOTUzODM5MjNGOUM2RjhCRUZCM0I0RUYyOUYxNAorOjEwOEY5MDAwNTY3M0I2QzY4NkMxNjlCRDY3MjYxNDZERkIzMjIzQTYxQgorOjEwOEZBMDAwMjcxQ0ZDRkIzNDE1NUY0QUZENDE2N0Y2OTE5RDUzMzM0NgorOjEwOEZCMDAwMURFQzQ2QzRCQjk1RDEwMzNBRjRENzNCN0I0OTdGNkM4QgorOjEwOEZDMDAwMEMyOTM0NEY2M0U5MkYyOTNGNkU4MUM4QzNFQUNCODc1MAorOjEwOEZEMDAwNTIyMzk0MUY2NkNFNEQxMTdFQTYzNjhFOTdBQzk3RUMyOQorOjEwOEZFMDAwNjJGNjE0ODczRkM4NERDQTFCOEJFOUYxMkRENDRFOEUxMworOjEwOEZGMDAwNjcxNDcxODY0NkUxQzcwMTQwNTE3RDQ2QUUyMkM2NURDOQorOjEwOTAwMDAwOUUxODlGMTBGMzMyRDU1RDExRUY3NzU4M0YxOTI0MDk1MAorOjEwOTAxMDAwQURDQjlEODZFQkJERDdFQUNEQ0Y4NUY2QzdFQTc1MDQwQgorOjEwOTAyMDAwQTI2M0VEMjlGNDVEQUFGNTRBQUY4NkZFQzg0MDE5Q0ZDOAorOjEwOTAzMDAwQTc0REM2QTMzMjMxRUZBMDdERDEwOTI4NEZBMjJGMEMzNgorOjEwOTA0MDAwOTQ0RkNCRjM2NzM3OEVCRDg0RjJEMENCNzc3RTNDMDE1MworOjEwOTA1MDAwRjE4M0Q1MzJBMkM3QTY5RDE3OTc0RjVCODFFNzMxRjYwMgorOjEwOTA2MDAwRkZBMTdDNUE4RkEyNkQ4M0U3NzVCOThFQzQ3QzVBMEYxRAorOjEwOTA3MDAwM0YyRjE5RDc0Q0NFQTMzRDlEMTM1Njc5QkU1QjY0Q0JEMQorOjEwOTA4MDAwNjM2OEI3RUYzNDUxOUVDOEE0OURBRjFDNDZCRkU2MjQ2OQorOjEwOTA5MDAwMzMwQjUxOUMzNzQ5N0YzOEUyOUNFQUNEODU3OUNFN0NGMQorOjEwOTBBMDAwRjRERTk2MTUwQ0YzQjA5RkYzRjA3Qjk5ODlGQUMwNDA3QgorOjEwOTBCMDAwRjYwMEM1M0FFMkVDQzY5OTEyNkZCRTI2N0I0MEYyNkIxMQorOjEwOTBDMDAwQkZCMEFGM0U1NEEyRjc5NkUwRkU3NkVCRURGREREQTMxOAorOjEwOTBEMDAwRjFFN0NBRjhEODAwNzkyMDNERkRFNzgxQzg3QjY2QjU4NQorOjEwOTBFMDAwOTFFMjg0QjhENTVEN0Q3NEYwRDVFMjYwNEI1MTc2RjY5RgorOjEwOTBGMDAwMTMwNzUzNDU1RTk3QUE3MEQ2QzExQzNDRUY0N0M2QzEwMworOjEwOTEwMDAwRDRFRTExMTRERjMyQzVFMjYwNjFENjRGMUM0QzE1NzFFQworOjEwOTExMDAwQTU1NTA2QUQ4RUZDMzRCQjRENkU2RTQ3N0I4OTdGQjU4MQorOjEwOTEyMDAwNzU2NzdBOTBCRkY5RTc5RjdDMDYzRjA1QTAzQTI2Qjg5RAorOjEwOTEzMDAwNTA2RjY4MTNGMDZGQjhGODM4RDg4M0I5RkRDNEMxQjY2MgorOjEwOTE0MDAwMEFCREVEREQ1MjVERDgwODcwRERDQTM4RkYwREY0QzhFOAorOjEwOTE1MDAwNzg5ODhFRUNEQUU4M0QwNUI0NkU2NThBOTlENkZERUUxNgorOjEwOTE2MDAwMUVEMzM2RjQ0RkNEOTI3MUFFM0REQ0JGMzY0QkM0QjM0NworOjEwOTE3MDAwREU5RDUyNDJGRUE3ODFFMDNDQUIzRDMxNUVGMDMzMDEwMworOjEwOTE4MDAwRTdCMzk2MkFGMkQzREY3OUZGNjRGMkNGQ0Y0MUZGRkUzNworOjEwOTE5MDAwOTBEODdEMDkyNkZDN0NFRTc2N0U5RkRFQkQ1REExRUYzQQorOjEwOTFBMDAwOTkyMjlBRTg0ODI3QjVEMzc3NEQxNzAwMUJERDg0QUM4OAorOjEwOTFCMDAwMzcwMDU4NzMwNUJDNTY3NDBBRUE0M0VFMzYyODgzRDI0QQorOjEwOTFDMDAwQUZBRTU2MDMyRTY4QjdGNTcwMEFGOTE1NTczOUREMjI5MAorOjEwOTFEMDAwNkY4REM3OUQwMzZCOTVFMDMwM0UyRTdEQzcyQ0QwQTZDQQorOjEwOTFFMDAwRDM3MDlDNTc3MkI5M0ZFQUNGQjlDNjdFQkYyM0QxNjYxMAorOjEwOTFGMDAwMTBGMTYzMzE1RjBCODM3Mzg3QTc0RUUxQ0Y1NUUyM0JEQworOjEwOTIwMDAwNzlDOUYwOTBFM0I1MTk5QUNERThERjhCMTZGMEVGQTE5QworOjEwOTIxMDAwOUMzNTZBRDNDOUVGOUM1RTQyREYzRDZBNEI2RDZFQUZGMQorOjEwOTIyMDAwRTVGNTQ0QjM2NzJENTEyRkQ1N0Y0M0U1MEEyOTczQTc5MAorOjEwOTIzMDAwRTM3QTc3RTc3MkZEMjYxOUNFQjMzQjEyQ0JDOTcxOUY1MworOjEwOTI0MDAwRTQ3QjVBQjM5ODZGNzhDRTkwRjNFRjMxRUQxNkZDRjZDRAorOjEwOTI1MDAwRUM5QTYyNzEyRTFFOEFBM0I0MTlEQ0JGMjlBNkY4MjlFNAorOjEwOTI2MDAwRkZBRTUxNEIzRTg3OUJBRTgwM0YwNzNCNkFFOEZCNzRFNQorOjEwOTI3MDAwNDAyRjVDOEY2MzdDRkQ4M0JGRTE1NDkwNUVEQTFDMUM0MQorOjEwOTI4MDAwNkZGRkE3RUI0RTVFRUZGQkI5MjUxQ0JFMEU0RUFGNkQxOAorOjEwOTI5MDAwQUI5NTIwODcxNzVGRjdDNUZBNDkwQzc5NUYyRjVGN0M4NAorOjEwOTJBMDAwNTdGMTNDMUUyRUE2N0VDNDFGMDJGNzE4ODhFRTc2NTk5MQorOjEwOTJCMDAwRjhGRDRCQzlBRjI4QjEwN0VENEY2MUVGMEU0MjY1MUFCQgorOjEwOTJDMDAwRTNBMTI3NTZEMkY3ODkzNkQ1MEY0RUMzNzhFOUY4QTkxRQorOjEwOTJEMDAwMzZEQTQ3RDMxRTdFQkZCNzcxNjlBNDEwRjFCQUE5M0EzNgorOjEwOTJFMDAwNTJEMkRDMEY1QzcxMDI1NUYyNTc2ODM3RDNDOUY4Nzc1OAorOjEwOTJGMDAwNkVEQTEzRTM3RkM5NzFEREI1MTk1QTQxNUUyNkRBNEI4OAorOjEwOTMwMDAwRUY3NkJGODJFN0RENkQyMUY5REFCNDM0RkEzOEZBMEY2RgorOjEwOTMxMDAwN0MxOUJFQTE1ODdGRUFBRUI3MjcyODZFRUE0NkZBRkM1MAorOjEwOTMyMDAwOTlEREMzRTk1RUUyQ0NCNkM0N0I1RTZDNkQ2MjVDOTE5NAorOjEwOTMzMDAwQjVBN0YzRkI2QzlEODlFRkYxM0U1MzQyQkZGM0UyOEM3RQorOjEwOTM0MDAwNUNCRjU5NkZGNDhENDBGREYzOUE2RkYyM0M4QThGRTY1MworOjEwOTM1MDAwRTkxODlFRUI0NzE2N0VGRTgxN0I1MjA1QkZGNjk0QzQ0QQorOjEwOTM2MDAwQ0I4M0FBMDFDRjE3REE4REM0NzgzRUNGMUY5NUVEMUJCMgorOjEwOTM3MDAwRjE3Q0UxNUMxQkM0Rjk3RUY0RUMxNTI1NzhCRUE3QkEzQworOjEwOTM4MDAwQUYyOEMxRjM1RDZGRThEMDkwM0U1MkIyN0RENzYyOUNBQQorOjEwOTM5MDAwRURGOEI1NUVEMjBGNjVCRUVDQzVFMkREQjRCQ0FGRDc2QgorOjEwOTNBMDAwM0ZGNzU1RTU3MTlEOUNGRjJCQ0E2M0ZDOEJGNzlCRUM0NworOjEwOTNCMDAwRjlCQjNFNjAyMUY5QzJFRkI1QzZGQzc3MjdFOUZCNUUzOQorOjEwOTNDMDAwNjdDRUU5MTRFNEM3MDM4REY3ODlCMDk3NUM2NjE2NDA1MQorOjEwOTNEMDAwM0RBQ0EyM0E0MkZEMkFGRUE2NjNBODBGNEEzRDM4Nzk2OQorOjEwOTNFMDAwRkQ4QkM1QjlBRUM4RDMwRUEzNUQyOEZEQkRGNTYyNkM3QgorOjEwOTNGMDAwNzNGMDUzQUU2RjNGQUE5MDNGRDdFQzBFQTQ4RDIzRkJDMgorOjEwOTQwMDAwNkFGNkU1N0FFMjJGRkY0QUY3MjU1ODhGNjI0NzNCNjVGNworOjEwOTQxMDAwREVBMzJENTQ3RjdBRTcyQ0FBRDc5OUMzNjFCNEM3MUE2QgorOjEwOTQyMDAwQTExRUNCQUJBRTRFQ0M3RjM2RUVFMEYxMjA2OUZGQzI4MQorOjEwOTQzMDAwM0FERUMyNzVBNDM4QTM0NkM0Q0YyNkQ0QUY2MTg5NERBNQorOjEwOTQ0MDAwMkFGNzdCMzczOTk5MjdDMDUwMUY0RUI0MTc2NTVDNzdEMAorOjEwOTQ1MDAwOTM5NzdGM0Y2NjUzOEY0MkRGOTFDQTMyRkE4QUYzRjFDNgorOjEwOTQ2MDAwNUM5M0UyQkJGN0U3NjlERDg4NzczMkNFQkUyMDRCRUIzOQorOjEwOTQ3MDAwQ0NFM0Y5Njc4NTA4QTc5RkUyQTJBMDFDMzFDODdCNUJGQgorOjEwOTQ4MDAwODlGNzBGMEZFRUJEOTlGNEExQ0Y5OTc3NTBGRkY5NjhENgorOjEwOTQ5MDAwQzE4NEY4RkIxQzcxNEY3NDhFQjgyNzhBN0MzQTlDQzQzNworOjEwOTRBMDAwQTdFM0NCMEQ3MUY5NjhFMUZFRjIwQUUyRjJEMUUyRkIyQgorOjEwOTRCMDAwQzVFN0EzODUxM0Y4MTlBN0ZGNkNGRDIyOEE3QkZCMDE4MgorOjEwOTRDMDAwQ0Y5NzhDODlFMTYxMDMxMzdGMUJBMkVGRDJGRDk3RUQ0QgorOjEwOTREMDAwMjZGMkFCMzU4ODdDNTQ3RkZEMzFCMjU3RkM3ODlGODZFRAorOjEwOTRFMDAwRDNBM0M2RUY2MTczN0RBODAxRUM0MENBQ0IwRDI1RTY3RQorOjEwOTRGMDAwQUQxRUZDOUFFOTUzQjYxQkM4N0ZGRTY2MTIzRENBN0RCRAorOjEwOTUwMDAwQzk3RDM0RjQyODlDN0U5MkQ2OTk2Q0ZGMjZGQkMxQTVCOAorOjEwOTUxMDAwRkQ3QUIxN0NFOUZEQUY1OTFFN0U1NUJFRjREOUQ3QzRBMgorOjEwOTUyMDAwOTdDRThCMjcwQzhEQTY3OUJFODY3OEMyMDdFRThFMkMzRgorOjEwOTUzMDAwNzQyOUNBRkNFMUY2REQzQzdGNzg4MkRFQTZGMUY4QTU0RAorOjEwOTU0MDAwOUVFNzM3MjRDNzcxREQxMzI4NEUyOUUzQzZFNkU3RjQwQQorOjEwOTU1MDAwQzFFNUM1RDRERTgzNzk1RjhEQkI1MzI5REZBMERFNUQxNQorOjEwOTU2MDAwNEY3QTc3NzJGQzcyM0VFQjlFODA0N0YxMzk3QjlERUUxRAorOjEwOTU3MDAwNkZGRDRGRjMwNkYyRjNDNTc3ODlEREFDRjgyQkU2MERFRQorOjEwOTU4MDAwMENDOUZGMEFGMUNCOTc2QzlGNjZGOEUyRjBBNTdBMjQyQworOjEwOTU5MDAwMjhGMDIzMDdDRUVCMkFDQkU3Rjg5NzIyRjI0QkNDNkFEMAorOjEwOTVBMDAwODAzOUUyRkEwRkQ0RUZDQTdDQUUxRkJGMjRGMjkxRUVFRAorOjEwOTVCMDAwNEI0REExN0JGRjJFMjNCRkFGRTBEMkYxQkMyOTk2RUIzMAorOjEwOTVDMDAwQkQyQTNGMTNFNTAxM0ZDRjg3NUZGODBFQzNGQjY3MEY0RQorOjEwOTVEMDAwMUI0Mjc0MEYzRkQwNjhGM0EwMUM5MzdFMjczOUZFODM5MworOjEwOTVFMDAwMzk3QzNGMTc0QjQ3REVGQ0ZGNURGRTcxQUI5Q0VGNjJBMQorOjEwOTVGMDAwRTM2RjFCMDAwNjcxRjQ5NTRDMEYwM0Y1MUI4OEJGMkMxRAorOjEwOTYwMDAwQzhGN0NFQzkyNzdCNUMxQjRENzE4QjhCRTQ0QjI5RTVEQQorOjEwOTYxMDAwQzBCNzUxNEVFRjMwQjlEMTdFNDAzRjBBQzlDN0I1MzkwNgorOjEwOTYyMDAwRDJGRUU2REYyNUI4QUY4MEU0RDc0NzE2NkU0RkM4RkIwMQorOjEwOTYzMDAwM0Y3MkZGM0YxOTEwREVGRjlDOUVGNzZFOTYzNzgwNzhEMQorOjEwOTY0MDAwN0VCQzRBQTNGQjAzQUI1MkI5N0M4OTNFQzFGMzg3OTIyRgorOjEwOTY1MDAwRUZDMTI0Q0IxNTc5OEY0M0NFNzc3RkZFRkYyRDVGN0Q0MQorOjEwOTY2MDAwNThDMkU3N0ZDODU3NDFDRTkyRkQzMjYwOUNGNkJDRkVERgorOjEwOTY3MDAwMDE5MUM3RDlBQjg5N0MxOUJBMEYyMUQ3RTVFRkU1NzlGQworOjEwOTY4MDAwNzdCRjEwRUI5M0VGRDcwOTM5RjA1OUJFMTY0MkJDM0FCOQorOjEwOTY5MDAwRjUwN0IzMTlFM0EwRTVFNTlDN0YzNjc5NkQxNDQ3NjhCQgorOjEwOTZBMDAwMEFGMUZDOUFBNkE1OENFQzdFNzlERkI1RDJFNURCODVDNAorOjEwOTZCMDAwRkQ1NkJENkRBM0VGOUUzNkVERENEQTNFOThGMjBGN0NEMQorOjEwOTZDMDAwQTRERjlERkUwMzdGN0YyMkRCQjcwN0RCRjk5NzQ2MTJGRAorOjEwOTZEMDAwRTIxNTE1NUY3RUJBQjJCNjlDRDY0Qjc2QkJEMzk0NzhCMgorOjEwOTZFMDAwOEYyODkyQ0ZGMzg2RTRGMzRGN0RGMDA1RkIwNEZBOURCQgorOjEwOTZGMDAwQUFFNzc5REU3RUE3NjZBRkEyQkMwM0VFMEY0RjcxRjczMworOjEwOTcwMDAwOTIxRkE4NjkwNzA5MDk0NjQ5QTc1OEZGQTM3Q0MyOUI3NQorOjEwOTcxMDAwQTYxRDU1NjVGNEZEODE5MEE1OENCRTVGRjM0N0ZFQkQ4NworOjEwOTcyMDAwQTc1Mzc3RTUwNkY1REM3RkZFNUI1QzZGNkE3OUYwN0ExQworOjEwOTczMDAwRDQzMzhCNjAxRTU0NDk0Rjc1NUY1RjQ2RkVDMTI0QkExNworOjEwOTc0MDAwOTNGNEQ2Nzc3RkY0QkJFNjYwQUIxMkEzQzdGNTA2MkU4MQorOjEwOTc1MDAwMjdBNTdDN0IzOURGQ0RGREQ1NEU5MTNGRDgzMzk5Q0QwMAorOjEwOTc2MDAwQjZDNUNBMzY2NzYyNUVFNThBQkM2QjVGQzZGNUJDOUM0RgorOjEwOTc3MDAwQ0ZFMzA1MzJDRTVFNkMwNkVCNzNGMEY5Nzg1ODJDRTIzRAorOjEwOTc4MDAwRUM5MzQ1N0UwNDBCOTg2Mzc5MTE4MzJGMUM2Nzk3RUI0QworOjEwOTc5MDAwOTM2NTE5Njc0RjM5Mjc3RTVGQzA2RTI0QkM0ODZERTcxQgorOjEwOTdBMDAwN0M4MzAxNUVBMDlFN0Q3NUI0NzczQ0RFREIxQURBMTlGRQorOjEwOTdCMDAwQkUxQUUxMzUwOEMxNEY3OUFBOTFCQjJGQzNGODQ1ODY3RgorOjEwOTdDMDAwN0EzNUM2MkZCNjJDMTlCMzBGRTNBQUVBRUFERTZGRTBBQQorOjEwOTdEMDAwRDFCODNCRUNENTY4NjI1NkJBQkNCQTAyRTIyRkNEQTUyRgorOjEwOTdFMDAwODhGRkQ1QkYzNUYwN0NDNkQ1MjkyNEVGM0IwQjFCMjg1RAorOjEwOTdGMDAwOUZGMUY0REJBNjg0N0IzQUM5Q0YwMDVCRUU0MkJGRDE3OAorOjEwOTgwMDAwRTBGNjM3Mjk3RTkwQkE0M0U5Mzc0RkI1QUFDMDQ2RkI0OAorOjEwOTgxMDAwQzRGNkU4ODc0QTZERUYwRDU0QTI1RkU1MUU4NTdGM0JENQorOjEwOTgyMDAwMTI1NkFGQjhEMEZFNTc3NUE4NzdDQ0RBQzlFRjdEQ0YwNgorOjEwOTgzMDAwRUE3MDU0OUI4OTlGMkEzQ0ZFNzJCNTkzRjhBNEJBRkE0OQorOjEwOTg0MDAwMDYxRERBNjk2QTBCQTNFRkI0NTUxNjcwM0ZGNkIwNEVFOQorOjEwOTg1MDAwQkIwRUNGRkRERkJFRDBGNzFCNTcxQjVFMTBDQjhGNDM3NworOjEwOTg2MDAwNzAzNTlBQTIwNzVDQzVCMTc4QTBDQzhCMUJFOEZCRTdFQQorOjEwOTg3MDAwNTIxRTI1RUJCM0U3RTlCMTQyMUVGNUU5RjM0OTc4M0MwNgorOjEwOTg4MDAwNTAzRjg5REYxMjlGRkZDREMwNDgwRkZCMzdDNTRDRjcxMworOjEwOTg5MDAwQzEyNDVFQjdDOTNDRkYyRkI4NUZCNzQ4RTREQjFDNUI0RgorOjEwOThBMDAwRjM5RkEzRjk3RDc3MTk0RjA5RjIzQzI5NDM2NDY1MUVBNAorOjEwOThCMDAwQzEyQkYyQ0QwMEVFN0I4NzQzRDczNDkyRkM2MTREMzQ0RgorOjEwOThDMDAwQ0U2QUZFN0RCNUEyRjYyMUNCMkJDQkYxNjk2NzBBMkNCRgorOjEwOThEMDAwRTFEOEFFMDU0NTQ4OTcwMUMwODM2MUZERTA4MUIxODBDNAorOjEwOThFMDAwREY1NzUxNTdBN0QwQjlBOUVCRThDQkQyNEM3NTY0RDE1QgorOjEwOThGMDAwQjlBOTBGRjJGMzYxMDU3QzNGMzI5RTJCRkQ5NjlGRTVERgorOjEwOTkwMDAwRkI2RTQ2M0NFQ0JCQkZCNUM0Q0FFRjZGODlGQkMxQTk3NworOjEwOTkxMDAwNEJERTdFMUFFRjQ1NkQxMUZFRTM3RDdCMkVBNURGODVDNAorOjEwOTkyMDAwMzhCQjVBNTU1MDRGM0RFQkE4QTNERjQxQUEyQkUwRkFCNAorOjEwOTkzMDAwNTJBQURBQ0JFQ0I2NzhGQ0RDNDc3OUI1ODM3N0YzRkMzNgorOjEwOTk0MDAwNDA1NURDN0Y1NjU3M0JCNzIyM0M2QjlDM0VDQTFGRkVGRQorOjEwOTk1MDAwNDY1Qjk4N0UzQTYxOEZGRDM4QzVFOTQwMkZBMjdCQUUwOQorOjEwOTk2MDAwMjc1RjUwQTQ1RTk0MjAwRkE1REQ5NjZDOEZERDUxRjAyQgorOjEwOTk3MDAwQkZBQjI3MDVFNDdDNUZENUNFNjI4OUY2NjY1RjdCNjk2NQorOjEwOTk4MDAwM0YyNkRCMTM0OUZEMDdEMjdGOTgxNjQ4Qzg5Mzc5NDBEQworOjEwOTk5MDAwOUNCQjk0RUZCOTgyMzdDQUZDOTlCRUZCQ0UyQzY4QzE0MAorOjEwOTlBMDAwRkIxMjIzOTAyOEM3QzZGMjg4OThDODJGREFBMDU4M0QyQQorOjEwOTlCMDAwQTgyRjBEOTQ0N0Q0OTdFN0MzOUEyRkUzRkVDOEU2MkI1MAorOjEwOTlDMDAwRjAyOUYzOTA2NDlFOTEwNUYzNEQzMkNFQ0YzN0IxNjAwQworOjEwOTlEMDAwQkU0OTA2RkU3RTA2QkYzNzJERjM0NTVBMEQ2RUNBM0ZCRgorOjEwOTlFMDAwMDlGQzk4NTExQzUxOTk1MjRCRkVCQTc0QUY5MUYwRUY5QgorOjEwOTlGMDAwMEMwQjZFQzRFRkM3MDdBNkQ5RTg3RTM4REUyNzQyQkM0MQorOjEwOUEwMDAwOEYyQTJFMUE3NzdDQUQyNkRCRUJCMDdEREY3NzA4RUI1MworOjEwOUExMDAwMThENUE3MEZENTcyNTAwRkIzNDAzRDdFMUZCOUVGQkVDQQorOjEwOUEyMDAwRjQ2Q0ZFQkRGNkU0N0MxMzk5RjcyNEUzQzBCOUMzOUY0MAorOjEwOUEzMDAwNTNEMDJGOEE2RTdGQ0EzRkY4ODFFODU3Q0NDN0U5RkMyNAorOjEwOUE0MDAwQkU5QkY4NDY1NjJCQ0Y2QjhBNUVDOUVDRTg5N0FGOTY2MworOjEwOUE1MDAwRkNDNzlDNzhBRUVCMTU1RjMxRDJFNzdBMkJGRjVFNDBGNgorOjEwOUE2MDAwMTdGM0I0RUJBMTdDNzdDMTYwRUVENzYxRUVCRDNBNjIyQgorOjEwOUE3MDAwRDgxREY0N0IwRjlCOUNEQTZCMDU5OTMxN0M5MkVCNjJDRAorOjEwOUE4MDAwMUJGOEJFQ0ZFMEZEMzAyNTM2REY5OTc5N0YyQjQ0RkRGMgorOjEwOUE5MDAwQUFCQUM3QzRGMTMyNjlGRTREN0RERjZCMDk1QTUwOUVFOAorOjEwOUFBMDAwRkNCOTgwRjFFRjhDMjZFOUJCRjJGOTY3ODlGRjgyMkZDMAorOjEwOUFCMDAwQ0JGOTA3REE5RkM0Q0YwQkU5RjExMkZGMDZDMkI3NDAxQQorOjEwOUFDMDAwQjUzOEE3MjMyOUE0N0Y0ODdDREJCNzZDM0I3RDg3NzAyMgorOjEwOUFEMDAwRkZCMjEwM0RDRjU4OTQ5MDFFRUZENTVBQTIzMzkwMzM2OQorOjEwOUFFMDAwMUVERkYyNUYzN0UxRjczQ0NFQTQ0NjBCRjE3QjIwRDFCRAorOjEwOUFGMDAwODdGNTVFMkE2NzQ2OEY2MDk5MTU1REMxQ0JDM0EyNUI2RgorOjEwOUIwMDAwRjBGQjIwNTkwRkJGRjgyRDJBRTM3OUU2MzI3NkFFMjAxQworOjEwOUIxMDAwRjRBRDgwOERCRUNCQjVCMjE3RTU1Njc5NTIxRTRCRDI0RgorOjEwOUIyMDAwNzcwQzUyQzRFRjA3NjVEQjhDQTQ0RjY2OEJCODFFQUI3NQorOjEwOUIzMDAwMTE3QTNENDZBMEEwREM5QTUzNDY3MTNDMUI3M0VGRThCNgorOjEwOUI0MDAwQzVGQTdDMTNGRkRFMDEwM0ZDQzdGQTYxQzUzQzFGODIyNgorOjEwOUI1MDAwRjE3REIzN0NFMTlGNjY5MTAwRkQxRTYwQjE4M0ZBRjc1MQorOjEwOUI2MDAwRjFGMTFEMjYxMTlGRTJGMzFGN0E5NkM3MTE2NTVFMkY1MgorOjEwOUI3MDAwNjNGNjAyRDQ4NzZDNkU5NjUwOTZERjAxNjFBQUJEMDAzMQorOjEwOUI4MDAwRUZGREI3NEFCRjlGMjhCRjk4RTJDQjJEOENEMzk3MEUyRAorOjEwOUI5MDAwNURGQkMzOTFGNEJCMjRDRkZENjgyOEYyQ0RFQjhDODkyQgorOjEwOUJBMDAwREY3NTk2Q0YzRjE0NzE3QkU1OENGODdFRTExRDI5QkVGMQorOjEwOUJCMDAwMjE4NTk5RjhCQjI0MzMyNkUwQTc2OEE3Njc1NDE5MURBRgorOjEwOUJDMDAwQTRCRjNEQTE0NzNFOTUyOUYwQzMzMThEQUZDRjUxRTNFRQorOjEwOUJEMDAwNTVGMEY3NDBFNEY3MDMzMzdEMkFGOTA5OThBRjUzOEYyNgorOjEwOUJFMDAwNzIzNUYzQjg5N0YyMDUxQkNDRDE0MkZDREQ5NjM3Q0MyOQorOjEwOUJGMDAwQkVDQjcwRkNCMzc1NDdFRkE0Nzg2MUVFQTEyMzk4REY2QworOjEwOUMwMDAwNzFDOEQwMzEzRTBERTU0OEIxRjg5RTA0MDY2NEExN0NEMAorOjEwOUMxMDAwMjBBRjg4RUNDMTNFRkUzMDRDQTE3OEU2QTQ2OUZDREVBMgorOjEwOUMyMDAwRUI0NDE2NTJGMTlDMjdEOEY5M0RBQzA5RTVDNTlFNTY4OAorOjEwOUMzMDAwOTg2RjkyQzgwRjk5NzBEODlCODZGQzZEQzI3NzIyMkFDNAorOjEwOUM0MDAwRkZERTQ1NTQ4RENGQzc5MDRGRTYzMkI4RTNFOUUxN0FBNQorOjEwOUM1MDAwNzc1Qzk5RTE3NzhFMTNDQjM3N0ExMkNCREZBQUZDNjI1RgorOjEwOUM2MDAwNzg3Qzc5OTRBMjREQzQ3REJFQTg4OEVGNDYwMDdGRTE0MAorOjEwOUM3MDAwRkJFMjc5ODczRjE3RjZEQ0E1MkU2NjJFNDI3Rjg1NTNERgorOjEwOUM4MDAwMDlBMEJENzBFOUYzQjkxNDY3NzlCRTkyNTEzOTZCQkI3NQorOjEwOUM5MDAwNzk5QjM5N0VGRkVCNzQzQzBFMkRGQ0UwRjI3NzhEQjBBMgorOjEwOUNBMDAwMEVFNUVENzM3RkM4MjI3ODY1RDk4MERGM0E4OUZCMTAxNQorOjEwOUNCMDAwQkVFRDEzNzRCQjRGRDA2OTQ1OUVEOThBRkM3RjlGQzEwRQorOjEwOUNDMDAwQkQ5OUYwM0NENUVDNDYzRkQ1REU1NDIzN0QzN0I2NzVDMworOjEwOUNEMDAwMjFGRjVEMDQyNUNEQ0M4QzMwQUU3RTI2MkY0MzNCRjY5NAorOjEwOUNFMDAwNERBOEQ3NTc5ODI5OUY2NDlGQzhEMzZFRkRCMTRBN0U2RgorOjEwOUNGMDAwMkVBQ0M3RUZGOUVBRUZCNTkyN0ZCQjI2QURGNDdCNThFNworOjEwOUQwMDAwQUY0RjMzRDIzRDg5QkRBOTE1M0UzMTFGN0RDRkZFRDE2NgorOjEwOUQxMDAwNTQ3MzE4N0Y1RjIxRjlGQjlEODc3MDVEMDgzNzU4RDcxMgorOjEwOUQyMDAwNjM3QzFENDQ4RkZBMEEyM0U5RTFGMkRFM0E4QzQzRjFBOQorOjEwOUQzMDAwMzc3REFFOTlFNkRCRTdCMEVGNDVCQzZCRkQ4MDM0M0Q4NworOjEwOUQ0MDAwQThBRjc0NjNGRTk3QzRFRjlBQjQ0QUZBQkQxMkEwQkVERQorOjEwOUQ1MDAwQTFGMURGNjdENzY3NzlEQ0ZDQkUyREZGMUQ4RUQyQkU3NworOjEwOUQ2MDAwREZFNTgwNjlBMTFERkU4NjExMjNCQUU1RjFCQzAyMDk3OQorOjEwOUQ3MDAwNzdBNjZBRDgzRTg3QzkzMkJGNkY5NkQ1NTdBRTUyRTlFQgorOjEwOUQ4MDAwQkI0MThBMkNCNzUwRjkyMTUxMkZCRjM3RkE0RUExOUIwNgorOjEwOUQ5MDAwREY0QkVFNzlFNTNGMTA2Rjg3QTYwMTVDRTA5QzNDMjkyNAorOjEwOURBMDAwRkRERjc3N0FCMjkwRjNGN0YzQ0ZBRkMyODU3RTdGMDUwMAorOjEwOURCMDAwRjczOTMyQjZGRjdEMEU4RkNCMUI1N0VFRTc1QzgyODhGQQorOjEwOURDMDAwNkZDOUU3QjJDRkUyNzFBMzlGRURDMkUzNzFCOENBN0Q1QworOjEwOUREMDAwRTg3MzM5M0NGQkY2OTFEMUZGM0VERTExRkIwODg5RkJBRAorOjEwOURFMDAwRDlDOUY1MDcwQjc1NUZGNzNFRkJDNUJGN0Y3QTlGNTk1MQorOjEwOURGMDAwODlGQkZDMUFENzE5NTFCRTg2NzVFQTBCNjE3REI2RDg2RQorOjEwOUUwMDAwRkFFODY3QzcyQTkwNkY3MkZDOUIyOEYyOUI1OTY5NjIzNworOjEwOUUxMDAwNUUxMkFCRjQ5OEI5QkU5ODk4ODc3NDlEQjJCOTBERTVGRgorOjEwOUUyMDAwRUI0MzIyQ0VGRDhBQTBBQjAzMjkzRjE5OEFGQUQ2MkIzOQorOjEwOUUzMDAwMzM0QUY2MTNCRjFERDREMjg2QzQyNUY5QjNFNEZGNjdCNQorOjEwOUU0MDAwNzM4RTU2NjAxOUU0NDAxNEU1RDU5RDgzMEZDREMwQzFEMworOjEwOUU1MDAwRjczQjFFMUE4QUYyMEFGOEU2Qzc4NTk5RTdBRjUzRDI5NAorOjEwOUU2MDAwNkZERjdBODE3RTkxOEUyNEZEMjZBRjVGRDIxMUJCMjlGMAorOjEwOUU3MDAwNDQwOTlENUQyQzRDNEYxN0UzRjlGM0EwOTdEMEY3RDExRgorOjEwOUU4MDAwOTlCQjIwQjYzRjIwRjIwOUU2NjZCRThGOTYwMEFERkI3NworOjEwOUU5MDAwM0FDNzAzOTQzNzY4MkRGNjE5OEI2MDVERDMyRkZCOTg3MgorOjEwOUVBMDAwQkVBM0M0NUM3NUMzNTE4RUMwN0E0RDQ1NjNGRkVGRDYyNworOjEwOUVCMDAwMEJGQzI5MDdERjRCM0QzRjU5QUZCRjUwMUVCOTVDNjcxNAorOjEwOUVDMDAwMzIzRjk0RUI1MUE2NkMyNzNEREUwRjdBM0NDRjMzNTdERgorOjEwOUVEMDAwODhERkZCRUI3NTlDMEZFRjU0NDhBRjZGMDIzOTgzNzIzQworOjEwOUVFMDAwNEE3RUNGRjc5QTEyNkIxQjdFMkY3Mjk3ODFGQjUzMDMyQQorOjEwOUVGMDAwQ0Y5QURDODlERjU3NEFDRTM3MTdGNkM0NTIyNkVEMDVENAorOjEwOUYwMDAwRkUxRDg5NDYzQkZGN0U5MjkwMzM5RDc3MEM5NkRGNTc2RQorOjEwOUYxMDAwRTJGMjEwRTQ1NEMyRjc5NUVBREM4OURGNTcxQUMwNUUxQQorOjEwOUYyMDAwMDBCQjgwRjQzMzM2NDgyN0VDMDIyRUE3M0JBRjc0REIyRQorOjEwOUYzMDAwMDM4Q0ZDQ0ZGQ0Y3MjU2RjMxMEE3RDEwNjA5MTE1RkI3NworOjEwOUY0MDAwRkUxQkQ4MDFGNDVEQkIxQjhBOEFDNUY3QjU4MkZDRjdGRQorOjEwOUY1MDAwM0M4NEZFOUZFQzhGNEVDOUY2REQ4NDc4MzI3QkE0NTY5QworOjEwOUY2MDAwODgzRjJEMzNDQkM4RkRDRDgwNkY5QjdCMTlBNjREMzYyNgorOjEwOUY3MDAwM0Y4QURGNDdCRDlFMzVCRkE1MUI0MkY4MzYwRERCNEYzQworOjEwOUY4MDAwQkZGNDYzRkVEREQ0MThCRTdEQkIyODkzQ0IyNTE0MzIwRAorOjEwOUY5MDAwMTdBMkUzMjM0RURGMEMxQ0E3RDMxMUZBMjM3RTNGN0RDQgorOjEwOUZBMDAwNTM4Rjg5RTAyREYzNTI5M0U5M0I2RTNEQzcwRDdDM0QwNQorOjEwOUZCMDAwNEVCRDlFRDYzMzg3RjAzRjY5M0QxNzgzRjdGMTc4OTUwNAorOjEwOUZDMDAwQ0QzODdFMEY4NEZGNzhGRjIzNzU0QzBDRkY0NzI5QkVFOAorOjEwOUZEMDAwM0I3MERFM0UzQTU4QzlFREFFRjNENkFEQjdEMTc5REY2RQorOjEwOUZFMDAwN0MwQjhGQ0JGOTUzQTQ5REFDNERDQUM5NDIzRjI0OUYzMworOjEwOUZGMDAwRkZFNkQ1MUMyRjZFQUVFMzc5NDQ5MzdCMUEyOTBFQzc3QQorOjEwQTAwMDAwNkE3ODVDQ0QwM0ZGQTNERjg3MTFGQzZEOUFCM0NDODAyNworOjEwQTAxMDAwQThGNzM5RkI5RTAxRkQ5Q0QzMjYyNUM2REZBNjlCQUY4MgorOjEwQTAyMDAwQTM3OERGQ0REMzBDMDlCRjhGMjlFMTMwNURGQ0ZFRjZBQworOjEwQTAzMDAwRjRBNERGQzU0Qzg2NEI3MkRDQUU4RjFGODhGREU2RTFEMQorOjEwQTA0MDAwRUZDNUMwMzM5RkYxN0IzNzM5RTI3N0NDMzYxNEY1QzVDNQorOjEwQTA1MDAwRjc4NjdGQzVGOERFQzMxQzhGMkUyRUJFQjdERjEwQTU5NgorOjEwQTA2MDAwRUYzQkJDOUMzOTc3RjM0MkEwOUJFMTNGMUQ0OURGN0I2RQorOjEwQTA3MDAwQkYzNjZCREVBM0VCQTBGQ0IzNEQ5NzUwRjlFNUFDRUYxOAorOjEwQTA4MDAwMkUzRTg0RjU1QjRBQTg1Q0EzRkI3ODA2RDI0MTY5QzVFNQorOjEwQTA5MDAwMkQxM0YxRkJGOEZCMkQ3QzFDOTdENUQ3ODlCRjlCRTJENAorOjEwQTBBMDAwMUEzRDc4MENFNjBGRDcxOEEzRDRFRTg2Q0IxQTJGQzcyQgorOjEwQTBCMDAwN0NBODFBMkIyRkJGNUVGNkZCMzE1NDFFMkNDQTYzNUVBMAorOjEwQTBDMDAwQkMwNENCRkI5NThGNjdGNDE3MUZCQ0I0NTQwOUUzRUZCNgorOjEwQTBEMDAwQTNENUE0RjNGNjkzQzYzQzkxOEJGRUEyOUE2QTVFQkUwQQorOjEwQTBFMDAwRDQ1M0I1N0EwOEQ2RUIzRTk5RDE5RjNFRjI4NkIwODcxRAorOjEwQTBGMDAwQTQ3RUVEMTVGNEZFQkM3NkI0MERFRjExN0E2RDhBMDdERgorOjEwQTEwMDAwRUY4Qjc4MkI4RkYyRUZBQTk5Nzk1RTg5NTcyQjUzRjE1OQorOjEwQTExMDAwQkI5QkQ1MUFGN0YzOEVCN0I1RTQyMDVGQkNDOTY3MkM5QgorOjEwQTEyMDAwNDc3RkJFREQ1NkRDODY3QUYxQTBDQUFBQjE3OERFRTNBRAorOjEwQTEzMDAwQ0Q4Q0YwMDlFOEVBMTBEMUQ1MTUxRjE3QTYyMTMyREIyNgorOjEwQTE0MDAwMTJFOTRBRTJFRDY0NDk0RjM1ODk3NDAzRkNFMEY3RkNGQgorOjEwQTE1MDAwMUMxM0U5MDFDNjdEODdGOEM3NTU4OUYyQUE4RkRGMjc0RQorOjEwQTE2MDAwRDE2RDMyM0UwRUE4MTdCMDQ0M0UxOEMzRDM5MDEyOEY2MworOjEwQTE3MDAwOUY1RDQ4QUY5QzdFM0ZDMjc1MTg3NUJENkU3QzVGQTQyNQorOjEwQTE4MDAwNzgyRUExNDQ5QjAxRjQwQkI5M0U3NDVCQjIzMUU3QUY2QQorOjEwQTE5MDAwMEJGRjU0QTk4RkYzMTVEOEVENTkzODJGQUY4NzdFMUFDRQorOjEwQTFBMDAwRkU5ODlENUMxN0NDRkYwNUMxNjcyNTVGNEY5N0QyMkNBOQorOjEwQTFCMDAwN0UxRjg1REI2MUQyREZEMTI0RjZGQkRGNzk4NDI5QzNFMgorOjEwQTFDMDAwMDA4MDAwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDA1RAorOjEwQTFEMDAwMDAwQkU1M0QwOTc4OTRENUI1Rjc5RjdGQjYyNDkzNjRDRAorOjEwQTFFMDAwOTI5MDkwMTAwODkzMDQ0MjgwMjQ0Q0MyMjJDQUUyQjA5QworOjEwQTFGMDAwMDRBMzJDMEU5QjgwMjJGRTA5NUJDODQyMDJFODMzQjYwMgorOjEwQTIwMDAwRDgwQzg0NEQ4QjZEQThBOEE4QTgwMzAyQTI0NTBDMEFGRgorOjEwQTIxMDAwODgxQUU4QjA4ODU4NTE2M0Q1RDZBNUQyNDRBREVDMTA2MQorOjEwQTIyMDAwODNCNkQ4RkFFQTNCRTdEQzdCMzNGM0ZGNDk4QUY0QkQxNworOjEwQTIzMDAwRjc3RDdEREY4M0RBQ0JGREVGN0VDRUI5RTc5QzdCQ0U2OQorOjEwQTI0MDAwQjk3N0Q4M0VDQkI5QzY0QzQ2N0Y3RTQ4NjM2QzUwMzg1MAorOjEwQTI1MDAwRjM4NUU1MzE5NkM4REM2QjU0MTUzRTc2Q0FFREUzQ0Q0NworOjEwQTI2MDAwQzZEMkFFMzE1RkY1NjUwQzNGRkQ3MDNENjMxNzJEOEU5NAorOjEwQTI3MDAwMzU0QTM0NjMxNUUxNTEzOUFDMUY2MzUzRUNERTA3NkM4QQorOjEwQTI4MDAwMjZDNkE2QzZDQ0I2MzBFODY3MUFGM0VEODk0OTY3RUM1NgorOjEwQTI5MDAwODUwODJEREEzNTEwREE5OTdDRkIxQjE1QzZFNjMyOEY1RQorOjEwQTJBMDAwOTVDMUY3NkNDNUUzQzRFRjhDMDU2MDUwQzYxNkUyM0Y1QworOjEwQTJCMDAwNURDMTdFQkI0MTVGMENFNkIxRDBFRTA4QTgzOUYwNkZGRQorOjEwQTJDMDAwMEZFQkQxMjk4MTMxNDVENDYzODY3OTQzN0QwRjhCODU4RQorOjEwQTJEMDAwRjJGQTM3QkU1M0IwRkVBQTNBMDVDN0U5Q0ExQTkyMzA1RAorOjEwQTJFMDAwNEQ2Mjk1OTQ2RjVEOTc2MTNEMzU5MUI4NTZDNjlBNzNFRQorOjEwQTJGMDAwNkRGRUNEMzg4ODE5RkUxQkMwRDhGMUMyMENGRkZENEE5NworOjEwQTMwMDAwNzA1RUM3MTU5NjY5ODY3QTNFMjVEQ0JEMzU5NUIxQkY2RQorOjEwQTMxMDAwODZDMUZBRTE3QjI3MDE4NzIxNDVGRjMxODE0NUI1OUQ0MworOjEwQTMyMDAwNkY5NTlERDdCQjNCM0M2QTMzQTZENzY3ODRBRjMwNDU1QQorOjEwQTMzMDAwNjNGQjE0M0ZENkVGMTQwRTY5NEU3MEZFN0YzNTMxQ0RBRQorOjEwQTM0MDAwMEVGM0JENUI4NTc1QThCODhFRTY2NTY2MThFRjA5NTZGNQorOjEwQTM1MDAwNEJGOTQ5MkU1ODM0QzBBRjczRUI3QTdDMEFFMkM5NkFENAorOjEwQTM2MDAwNTJFRUYwM0E2MDRERjhFN0ZBNjAzQUM5MDUwMDhEMjdFMQorOjEwQTM3MDAwNzAyOTJDMjEwODZGRTY1Mjk4MURGMjQ1MjIyRkUxREQ0RAorOjEwQTM4MDAwQzlFQUVBOEFGRDE4RTE1QzY0QjczNTExN0NEN0U0N0I0MQorOjEwQTM5MDAwMUFFREMxRUZBQ0Y2MTE0RjY4M0YxREQ1NTMwMEFFQzlBMQorOjEwQTNBMDAwQjE2REUxMEZGM0E3Rjk4REFGMUFFNUZEMzIwRUM3MTdCNgorOjEwQTNCMDAwRjhCODI3OTJGMDMxRkU5RTExRjQ1RDk5OTRBOTM0QzI0OQorOjEwQTNDMDAwQkM0NjE1QjgyODhEMURGMDlFOTk2NTEzNUVBNkQ3NjUwRAorOjEwQTNEMDAwMDVGMUY0NzVCQzM2OEJFOENCREMzODcwMjJFMEY2RUQ4NQorOjEwQTNFMDAwODFDRkU0NkE1MDdFQzJDNDhBQjE5RTExM0UyNTA4OUY4NworOjEwQTNGMDAwODE2REUxRDM0QTdGMDYzODc0MzRGRkQ3MjJCQzY1MzhCQgorOjEwQTQwMDAwRUU3OUE1NjExMDE2QzY3NzcxMEFCODZCQTk4ODlGMThGNgorOjEwQTQxMDAwNjdFQTg4MTg4NEZCRjczMDJFRDBGRDE0MkMwMjNDM0ZFRAorOjEwQTQyMDAwOTZBMEREODlFREE2MzE2RkJFMTlENjFCNUJBMDU5MzQwRAorOjEwQTQzMDAwMDcwRDY3QzJGOTJDNzZGMkY5RTRBQjBFQTJDQjk2MUQ5QworOjEwQTQ0MDAwOEFERjA2RjU0NjdCN0EzRjMyMTRGMjE1QzcyQ0NDMEYxMworOjEwQTQ1MDAwRTUyRDhDRDM2RENCNDZENUVGMDM3QTk5RkZFNjRCODM4MAorOjEwQTQ2MDAwNjA4N0IxMkYwNDlERjZEQTYwNjIyRTg5MEZGOEFGQjdDRQorOjEwQTQ3MDAwM0Y5Q0I5MzI4M0Y5QkVEQjYzNzVGOUVDQkEyRUJBRkFBOAorOjEwQTQ4MDAwRkRGNkE1RTlDQTczMDM3RDc0RTVGRDhGRTVFOUYyMDNFNgorOjEwQTQ5MDAwMUJBRUQzRDVCRkU2QTM5MUJBRkNCNThEMzdFOUVBMEY2MQorOjEwQTRBMDAwMzkzNTQ5OTcxRkQ2N0NBQkFFN0U0RDE4RUM5RjdFMDhBMAorOjEwQTRCMDAwNkU0RjQzMjZDMDY1OEVDMEQzRjU5NzhCNzRFRENFNDZBNAorOjEwQTRDMDAwOEQzOTg2RkI2QUNFREFGOUUzNzA1RjhENjBBNUJBN0VCRQorOjEwQTREMDAwNThBREU1NzNBNENCNEFGODhCRjg5Q0M3QkNEMTAxODA3QQorOjEwQTRFMDAwNTczRTZCM0U5QTBDRjA1QkU4NTdEQzA4QjdGOTFCNzhENworOjEwQTRGMDAwM0REOTZFQzFCRTQ1MjM2MzMwRjVFQkJGOTczMjczMzA1MworOjEwQTUwMDAwMEZGRDU0RkQ3MUQzNkY4Rjg0OTQ4Rjc2MTY5QTkwRkU1MQorOjEwQTUxMDAwRUE1QzkxOUQ5MDZFRDgzNUVDOUExRkQ0NzZGMUVCMEVFMworOjEwQTUyMDAwMjBGRTNFNTBERDM2RjhCNEY4NEQ5NUY2QzFFMkU3MTU1MQorOjEwQTUzMDAwM0Y4MzdFMzM1OENGNjhDQzU3MUM1Mzk5MUZGMDdGOTJDRQorOjEwQTU0MDAwNTUzRTNDMTREMkJGNTZGQjdGN0JBNDY3MTAzRUI2NDRGOQorOjEwQTU1MDAwM0Q5RUMzNUM3QTNDNDc2NEVBRjExQ0U5RDZFMzM5N0E1NAorOjEwQTU2MDAwQjAxRUNGMzExRTNEOUVFMzBBRjQ3ODhFRjdFQUYxREM4RgorOjEwQTU3MDAwNzlCQTFFQ0Y0OTlBMUVDRkM5QzU3QTNDNzdBQkQ0RTNDRQorOjEwQTU4MDAwQjk3Qjk1MUU5RkE5QkUxMjNERkUwQ0Y4OTdGQzM3N0Q0NgorOjEwQTU5MDAwQ0Q2MjVEQkQ1NjNBRjAxNjhGQzNCNDY3RUQ0Rjc0RkRDMgorOjEwQTVBMDAwOTZBQTY1NTY2NjBBRDI4MzBGRkUyMjNERjQ2MkNDMUQ0MAorOjEwQTVCMDAwMDAzODJGMDQzQzA0NUM2REU5QTBCODdFRERBQUU0N0Y3RQorOjEwQTVDMDAwODEwRTlBMTFGRjExMjFGODU3Njc0NjZCRURGMDZCOTlEOAorOjEwQTVEMDAwNEFCQzgyQkNGQzhCMEJGODQ4NzhBQUY2MURBNkQzN0IzQworOjEwQTVFMDAwN0Q5RDYyMDZCRUMxQkM4NUJEQkM5MTQxQkU2Nzk0QTc3RQorOjEwQTVGMDAwNTI4RUEyM0MzMjBGMEFDQUEzOEVGODVBMUIzOTNBNDEzNgorOjEwQTYwMDAwQ0E5RjBFRTRBOEFCNUI5MDBGMDI0MDNFNjY1Q0NFMzM1RgorOjEwQTYxMDAwQjZENjg0RjM5ODIxRThGQTUwMzhBN0NCNEI1ODc0MkQ1RQorOjEwQTYyMDAwRDQ4MzNBODM2MTVFMUZFM0JDNjE5QzhGQzNGQjFFQzE3MAorOjEwQTYzMDAwN0Q3QTJCQUJCMzYwRkYzMzU5MDNBNUIzNTgzM0E1MUEwQQorOjEwQTY0MDAwNzM5MkRFNTBDNERDOTRDRTYxNUU0QURGQjY2QkM5QTk1QQorOjEwQTY1MDAwQzAzN0NCRUM4RDgzNTBFRkY4NEJFMTdCMjcxNDlDQ0NCQgorOjEwQTY2MDAwRjEzODlDNkM4NzcwOTVGQ0ZBN0RGQzI3RDRGM0E2N0FCMAorOjEwQTY3MDAwRDM1MzIxM0ZEQUVFQkFGMzIxRjg3NDA4RTUwNEYyREY5MAorOjEwQTY4MDAwNzE3MTM0NUY2NkY2NjY0RkNBNkVBRjlGRTUyNDM3NUUyMAorOjEwQTY5MDAwNTMzNDBERjlBRTJGQzlFRURFMEE2QkVCOUJDQ0VDNDlCRgorOjEwQTZBMDAwMjhFNzEyRkQ2OTkzMDAzRjc5QTk3QUY5RDI0N0QwQzQwRgorOjEwQTZCMDAwRjM1REVBMTZBMzlFQzQ5ODNGMTZFNUMzRDU4RTNCM0NENgorOjEwQTZDMDAwRDU3MzJEQUU1RkQ2QkZEMjdBQURENkJBNDUzOENGRTZCOAorOjEwQTZEMDAwNzI4NzdCMzNEMEU3MDcwMjFGNEZERjYyMEJBODUxNDExRgorOjEwQTZFMDAwM0FGQTI4NjJENkQxNzhDMERCNUQxMURBMEREOEZGRjREMgorOjEwQTZGMDAwNjkzN0FFQzJCQzcyMjhDRUI1MThFNjc3QjExMEUwQ0Q4RQorOjEwQTcwMDAwRTEzRjk2QzM1RkVCOUUwMDRCM0NERjRERUIxNThERjBCOAorOjEwQTcxMDAwRjc3MkY4QzMzRkIyQkRFRENFOUZDRjY3OTRDMkM3N0YzQgorOjEwQTcyMDAwMkQ0MjlCODJGRDFDMzIzNUE0QjgxMTFFRTY4NjQxQTQ0MQorOjEwQTczMDAwNzczQUUyQTk5RkYzNTYwRTk3OEVFMDMwMzJBMkRCNENCNworOjEwQTc0MDAwNUNENzFDOUJDREFENDI5RjIzMTU4RUQ3MkZFM0VFOTg4RgorOjEwQTc1MDAwNTUwMUZGOUM2QkYyMjYwNDU0RERCQzhCMTBERjY1Q0VFNworOjEwQTc2MDAwQzJFRTQ5NDAzN0U3MkQ2MkRFRjY3ODAxNzc1NzE2RUVFNAorOjEwQTc3MDAwQUI4RUU2NUQ4M0ZEQTMxRTc4QUZFMjQ3M0Q5MEZFNDBDMQorOjEwQTc4MDAwRkU2NTVGOENGRjdFQzhEQjRDOTczRTk4OENGQTRCQjYxQgorOjEwQTc5MDAwQzlCRDE5OEEzNjg2NDNENzQwRUZFRjBBNzgzRjYxODFGOQorOjEwQTdBMDAwN0MyQzdENUY4M0RGMTNDMzc5RkJDNDg3NERGRTFBNjg2MQorOjEwQTdCMDAwRUYxREY5MEFFMUU5RTk4NTBFNUE0RjIxNzM1OTcxOTNBQQorOjEwQTdDMDAwQ0QxNkZBRjM5RjQ3RkM3RDdGMjNFMEMzOTdBQUZEMTRDMworOjEwQTdEMDAwRDc3MTQ3OUMyOUU1MDM5QTg3RDYxN0Y1MUQzNkY0QzcyQworOjEwQTdFMDAwRDFCRkRDQTc5MzlDN0MwOTczMDVEQzI2MzMwRkVEQkIzRQorOjEwQTdGMDAwQTk0Q0IzRTBCOEJGQkI2MEY1MjBGRkZDOURFMDI3QTBFQgorOjEwQTgwMDAwREZEM0Y3MTlDQzRGRTk2RDJDNDBGNTZGNjc4RDk0N0YzRQorOjEwQTgxMDAwMkYyMkE3NUIxNUNDNkZFMjIzQkQ3QTIyN0YwRDgxRkIyRgorOjEwQTgyMDAwM0E4MkJCNURCQkEzMTNBNzk3OTM5RDExRUVFQkUzN0YyOQorOjEwQTgzMDAwMTRGRDRFMTRGNDAyRkJGNTUxQTQxN0Q4QUYwMzcyRDNFNAorOjEwQTg0MDAwNDJGNkNENjg0RTJGQ0NFQ0VDRjlDRkY2NEQ0MzBCOTc4QQorOjEwQTg1MDAwMTdDMDE4MUQ0OUIwRkUxQjA0MEE2RkYwOTQ5MjlDNDA2QgorOjEwQTg2MDAwM0RBQjEzQzBCRkMxQTU5MjlFNTUzMEEyQzk4Q0YzREY4QQorOjEwQTg3MDAwRjYzNUU3NjM2RjJDNjM5MTNFMjg3RjYzODRDQTEwNUZDRgorOjEwQTg4MDAwMTMzNjhDMzk4REVEOEVCMzQwQTcwMTUwM0ZGRkIyNzY2MQorOjEwQTg5MDAwMjQxQUQ2M0YwMUY4M0I3MDY0NTZEMDE1RTQ0NDg4NUMxNgorOjEwQThBMDAwQkEyOTcxREQ2OEQ0MjM2RUVBQTFGRjNFOTZENUFBMDhDNQorOjEwQThCMDAwQkY3MTU5N0FCOTMyMDFFNThBQUMwN0UzMUQ0NDM4QzQ0NworOjEwQThDMDAwQjY5NTJGRjVBOTQyQkVGNDYxN0RBRTQ2QkUyQzM2NzkxMQorOjEwQThEMDAwMEUxMzFGMDEzQTQzQkEyRjMyMzM0RjdCRkJDREQ1NEJCQQorOjEwQThFMDAwOTE3QzhDRjQ5NjlCQzVEODJERTMyRTU5MkZDMjdBRkYwQworOjEwQThGMDAwOUVBQUJEODNGRDJDMUVGRkU3NTlDODhGRTExQ0Y1NzY4QgorOjEwQTkwMDAwN0Y5NEEzRUZBOEVDN0UyOEZGQkMxQTIwMEVDMkY1Q0JFMworOjEwQTkxMDAwNkEzQkYzODA4MkYzNTVCNTkzRjJBN0FBMTMyOTNENTNGRQorOjEwQTkyMDAwRURBMkY0NUM3NTI2OTU1RkE4NzY1MzNFMkRDREZCMDcwRQorOjEwQTkzMDAwRUNCNzY4Q0RENzY2RDRBMzU2ODc0OUZDRjE3OTJDMTFDMgorOjEwQTk0MDAwRjRCQjNBOEM5RkEzOTY0NDJFRjlBODEwQzY1RDQyMDIzMAorOjEwQTk1MDAwMTBFNDc1NURFRDE4MDQ0QkM5QkVCQUEzOThDMjc3RDU1MworOjEwQTk2MDAwODFFNUVCMTQzN0NBQTdCOTQ3QjQ1NTQ4M0VGMzhGMzc5MgorOjEwQTk3MDAwNEU0MEI2MzNGMEMzMkYxMzEwNkVFNTk3MTVBNkMxNTY5RgorOjEwQTk4MDAwQkFCRkE3RTcyQjFDRkY2NEY1NjA5QUQ3RTk2QTBGQ0QyMQorOjEwQTk5MDAwQ0I1M0RGNzQzNDBFREE5RkFEMkVBMEZDOTAzNEVGMzkyOAorOjEwQTlBMDAwQUNFNzYxNUY1QkIxRkRGODFENERFNjY0MjhDRkY3Mjg4OQorOjEwQTlCMDAwMUVEQ0RGQzMzRENDRUYwN0ZDNkRCMDcwNzlCMTAxRTQ2NAorOjEwQTlDMDAwMDVEMkNGODhFQzQ5NEZEQ0M5OTA5RjZCN0ZDMUZEMzEyOAorOjEwQTlEMDAwMzU3Njc2N0UxQ0QyRDVFMDQyMzNENjlCRjYzREU4NUNEOAorOjEwQTlFMDAwQTk0MUZBQkVEMjNFMzk3RjQwMjFGODlDM0YxMDQzRjA4NgorOjEwQTlGMDAwOTA3MDJBMTdGODNBQkZCN0VGQ0Q0M0EwREYwM0EwNDcwNgorOjEwQUEwMDAwQUEzMEJGOTZDQjI2OUE1RkNCNDdFMTdFNTQxMjhDRURERAorOjEwQUExMDAwMTdFRjQ5RUZDQzFDQjg0RTY4NkNDMzdDREZDRTBDRjA0RQorOjEwQUEyMDAwMTA2MTdGRkEwOTNDOTc5RDdERkVFRTQ0QzRDQkQ5RDhENgorOjEwQUEzMDAwQkFCRjdDODI3Q0VGMzNDRUY3NDBFM0ZERUEzMUU0OEI5MgorOjEwQUE0MDAwNUQxM0RERjc0M0VFODIwNUNFNjk3NEFFQTk4QzQwQjk4MworOjEwQUE1MDAwQjhEMENBMzQ5RUQ3RkE2MkZFNkMzOEEzRjNFQkEwOUQzRgorOjEwQUE2MDAwQzkyMzcxM0ZFMTc4QUU1RTQxQkU5NkE5Qjg1ODE1RDBCMgorOjEwQUE3MDAwN0RDNkNFNDdEMjdFMEFGM0RFNUUzN0Y3OTNDNzIwM0QxMAorOjEwQUE4MDAwRUYzN0Y5MkMyMEI3Q0VCM0JBMEJBRjIyNUZERUUyNzBGRQorOjEwQUE5MDAwNkY2NTU4REYxQzhFRjU3RjZFRTFGM0YyNkQ4NTczQkIzOQorOjEwQUFBMDAwMEJGQkYzMTMxRDQzQjkxNUNCQ0I1RTdDQjQwQkNFRkY3MAorOjEwQUFCMDAwMzVENDRCMjBGRkRBQkEwOEUyNzdBRjU5REMyN0FBQjBDOQorOjEwQUFDMDAwREQxM0JDQkY2NzdFNzFDRkU3RkIzMDdEQTAzQ0VGMUU3RQorOjEwQUFEMDAwNDhGQkE3QzU1MjNGNzM3RUI1QTAwRkI2MDdCOUNGOTIwQQorOjEwQUFFMDAwODAzRkZFRkE2NTI1MTAwNjcwQ0I1RTdGNzA3OTEyOEM3MAorOjEwQUFGMDAwRDc2RjYzOTNBOTBCQTRCOTVCOTQxQTRDRkI3NjJCMzhFMAorOjEwQUIwMDAwODZGMkY2REEzNDE3RTFBQkZGOEU1NDE1RjVDOTNFNURENworOjEwQUIxMDAwRkM5RjVDNEZGQTgwNUU0RkM4NUFGRkY1QzgyRTJDQThFOAorOjEwQUIyMDAwMkZGNDUxRUFDRTJDMDM3QTU4RERFREY3NzlGQzlDNThDRQorOjEwQUIzMDAwNEJGM0Q4NTMzRkY5RkREQjE4QUUwMzM0MTE5Qzc3QTFEQQorOjEwQUI0MDAwOTVFQzE0Qjg1QzBCRTRDRkVGNEVERjg0RjY4Q0JEMjY5OQorOjEwQUI1MDAwREYyNjkyNUY0NTVDNUYzOUVGRjUzRDhBNzQ1NjBFRjU0RQorOjEwQUI2MDAwN0Q5MDJGQ0ZGNTQ1NUQwN0U1RTU5RkY1NzAwMzQ1QjE3NQorOjEwQUI3MDAwNkU0RkRFNTA4MEYwNThCOEZCQTEzMTVEQTBERUY5QTEyOAorOjEwQUI4MDAwQ0MwREE4NjBDNTdCMkU4REMxNzZBQzFCRThENkQ4Q0Y4NgorOjEwQUI5MDAwRUU5QTg0NUJBMUREQ0ZCMzQ2MEU0NEJBRjJBQTc1MzRCNworOjEwQUJBMDAwMEVBQkUwRTMzQzIyRTQxRTZCMDRFMDI0MDgxMTA0RjU0NAorOjEwQUJCMDAwN0UwRTlGRjE3QjZDN0RDQ0MxNjQxNkM0NEY0NUZEQjIwNworOjEwQUJDMDAwNTRCNEI3MENEMEVDNkUxNUY3NERBQTJGQTlEMjExOTQzRQorOjEwQUJEMDAwQTMyMEZGNkU0QjgzN0E0OTU2RDFBRjczNzI4QUY3MkE0RQorOjEwQUJFMDAwRTQ5RjU1QzgzM0Q5REYyMzU2RTYwQjhCRTU3QUIzODI1MQorOjEwQUJGMDAwRjJEOUNBRTVGNjU2RTAyRjU1Nzk0MUI5MERFMzk2RTI1MAorOjEwQUMwMDAwQjg1NkExMkYyNzgzOTBDRTg1NzkyNjNGNjJGMzkzNkVBNQorOjEwQUMxMDAwRjAyM0M3MzdEQUQxQTRERTMyM0RBRTY2N0YyM0RBN0I3QworOjEwQUMyMDAwMjJCNEJCNzExQzY5Mzc2MzY2QjcwQkY1QTIxNTExOUU4MAorOjEwQUMzMDAwQUEzNEQyQkI5QTUzNzAwRDIwNTc5N0E2NDE3RjBCNTU2QgorOjEwQUM0MDAwRDBDM0QyNDNGNDMwRkI4RjkzQUIyRjQ0Nzg5NjYzN0YwRAorOjEwQUM1MDAwM0ZCNkJFOTFFRjJFRjlENkM0NzI4MTBFOTYzQzY0QTMyNgorOjEwQUM2MDAwNzM2QThEQjAzN0Q0MDhGQjU2NERFNDIwM0JGMjBCNzY2NworOjEwQUM3MDAwQzQ1NDc2MTRFNEVEMzBERTQzNkJCRjRCMjJGMzg4OUY1RgorOjEwQUM4MDAwRDQzMEQ2MkVEQzBFMDAxRkQwODBFRjA0NDA2RTY4QzA5QQorOjEwQUM5MDAwMEY4NjVGNkU1NjM5REQzNzFDOEUxRTgwRkM5Njc5MjIzQQorOjEwQUNBMDAwNUQ2ODA3MzAzMTJENDQ5RTFBRkIwMUJDNkRDNjc1OEU2MAorOjEwQUNCMDAwNjAxMTRDMEI5MTlCMUUxNjYzQzVGRENCMUNCMUZGRDJERQorOjEwQUNDMDAwRkE4NzBBRkNDOTc1MEMxNUY2QkNBMTJEMUY0NTIwREZCQgorOjEwQUNEMDAwNUNGMjZEMUVGMUNGOEVENkI3NUZBQ0VGMzdCODNFNDg1MQorOjEwQUNFMDAwOTM3QTc5RjdFMDNDODc3REUzMzRFMzNBODc5OTI3QTZBNgorOjEwQUNGMDAwQTA5RTAzRjM3RjBERjEzQ0ZDMUI5MzdFRkVERjg3RUJGMAorOjEwQUQwMDAwRjIzRjc2MUQ3NzI5Q0M2N0MyRkRGOUI1RDU4RkZCQjMyRAorOjEwQUQxMDAwMUVFODFCRjc3M0ZEODIyQzNGRjI4MUJEQjAxRkVDNzg1QgorOjEwQUQyMDAwQUU5OTY0MjUzREI3NUVEODQ5RUJFMzlENjQ1RjdBQ0Q2QgorOjEwQUQzMDAwQzJGM0JFMTlBMjdEMTgyMzM5NTIzRkEzMEJCNUVGNjJBRgorOjEwQUQ0MDAwQUI3QzJCMUJGQkFGODkyMEZFNTk2RkYxQUY0OUMzRkVEMworOjEwQUQ1MDAwRUY4RDczRkIwMDVGMkFDQThGRkU3MERFMTBGQ0JCQzY0RQorOjEwQUQ2MDAwMTJCODREQzVGRUJFQjYzMjFDNkY3RDRDMjBCOTAyRUE0QQorOjEwQUQ3MDAwQUY1RkQwODVFQTdGMDRBQTE0REFFRjg2OTg0Qzc3NEM0RgorOjEwQUQ4MDAwNzQ2MEI5MjcyOTE2RjI3QkZGQTE5MkRDNTg5RjBCNzlEQQorOjEwQUQ5MDAwMDdGMTcxQjIwN0FFOUZFODQ5MEFFRjg0Njk4Mjg5RTYzQworOjEwQURBMDAwQTNCMjRBRkE5RUNBREI3RDYyRTFGNTZFMTVGOEZCNTg0NAorOjEwQURCMDAwRTAwN0Y2MzlGMTAxNkQ0Mjg0MTlFOUQ4OTQ1RUY0NkQyQgorOjEwQURDMDAwMUFFMUREOTNBNEMwN0MxRTlCRDM5MzIxMUZCREI1RTQ4MworOjEwQUREMDAwQzY1NEEyOUJEQTQ3ODg5RjREMTczODkwRkQ2MTAzRkI0QworOjEwQURFMDAwMjBENEEzRjk5RjE5NzNCNzg2MjEzRUE3MTY4NzkxN0RCQQorOjEwQURGMDAwRjRBM0UyRTU5MTJFNjgzRjU1NTMwMzM2QjQxQjRGQzlDNworOjEwQUUwMDAwRjc4NDlFQzc0REU5MUUxQUI3QkNBRTc3RkE5NzIxNzQzNgorOjEwQUUxMDAwNUQ2NDAzQkUwMUZERkYyMjVDRkI5RUY2RURCRTVDMkE3NQorOjEwQUUyMDAwREYwN0NBQ0QwRkIwQUYzRTlGRDM3MzI3RDkzNUU2QzgzMQorOjEwQUUzMDAwNzM2NDYwMzZFMkY1NDBCMzlERTFGOUE0MjM3QUE4NDEzQQorOjEwQUU0MDAwM0M0MEJGREQ4NTVDMjc3QTQ1RkM0RjBGRTdFNzFDMzNBQworOjEwQUU1MDAwRDAwQkU0NkJFQTdBRDMzOUU3MjkwQkYzMjg4OEFGM0RBRQorOjEwQUU2MDAwMzZDMjdGQzEyNEJCODdFQzhGRDNDMzM3RDlBMEZDMEU3OQorOjEwQUU3MDAwQzFDRjZBQTY4N0QzRjc5QUZEOTE3RTkzNDJFNzI3Q0E4RQorOjEwQUU4MDAwRkI3NjU5QTg1RDk5RDVGRkVDMzZFOEE3RUM0MDZGOTJBOAorOjEwQUU5MDAwMzc3QkFENjJEQzU3MjM3ODc5OTQyNzc1RTUwMDJDRUY3QQorOjEwQUVBMDAwNEM3NEYwOUFDNTE1NERFNTZGQUE4Q0NBQzMwMzE5MzFDRAorOjEwQUVCMDAwMDBDN0I4MzBBRDVCRkE0MEE0M0JDMEIzMDNGQkU1REY4RAorOjEwQUVDMDAwNEYwOEZBM0EwMUREMjJGRTdDOTU5MUQ0MkY2RDdEQzhBMgorOjEwQUVEMDAwNkIzNUREMzYyMzNFMzUyQjJGNjczRjUxQTlGQzg0RDNEQworOjEwQUVFMDAwOTMzNDE3RjIyNzJBOTM2OTVFRDJDRTc0QzI2QjI1QkFDNworOjEwQUVGMDAwM0Y1MUE2OTBCRUY0QzcyQTM1NjAwREI1RTM0RkRBN0UwOAorOjEwQUYwMDAwNUYwNkI0RkJFMjgwODVFQzc4MzM3RjU5N0ExQ0JGQ0ZCMworOjEwQUYxMDAwNUM1RTRFRjZDODk5MjU0QkM5NEY3MDYxRTkxNzgzMzZDMAorOjEwQUYyMDAwQzA3QTFBOTc3RjlBQTI4NUQ4QTU2Nzk2NDFBQjkwRkQwMworOjEwQUYzMDAwN0M0M0JBNjc1MDNBRTA2Nzc2QkE3NjJEQUVBRjIyQUI2MworOjEwQUY0MDAwNzExRUVBRDcxN0FDMEQ0RkUyNzkyMUEzOTMzNjE0QkZENworOjEwQUY1MDAwNUY3Q0U1RTQzNkFFNzczNzY3QTA5QzU4NjhFNjc0MjJEQworOjEwQUY2MDAwRTU2RDg1QTBDMzRCRTlEQTQ4QUMwRjcwOUI4NTcyMjU2RgorOjEwQUY3MDAwMjJBQjgxRjNCRkE1M0Y4RUZGOUZBOURGQkE1NzgxNzEzNgorOjEwQUY4MDAwNEFDM0VCMTc1MkFBRkE3M0IwOUZCMzRBMjA0QTQ5MjcyMworOjEwQUY5MDAwMzg2QUI4QUZDRTM5MDM1MTA4N0ZDREM0RjVCQ0QyRURDNQorOjEwQUZBMDAwRkE3NUUxMUY3MzAyREFDRDE4RDlDMTRCRUI1NDRGMTg3MworOjEwQUZCMDAwRUUwM0U2QjdFMkZDNEI5OTM1NTgzRjM1ODgyRkU4ODcxQQorOjEwQUZDMDAwRjBDNTFDN0Y5Q0Y1NTNDMDQzQzlCM0JERjNGMDdDNTE2MQorOjEwQUZEMDAwMUFCM0VGMTc0M0E4MUVCNDkzRkI0NTZEOUI5N0VCNjkxQgorOjEwQUZFMDAwM0IxRkJFQkU3MzYyMUY5QzgzMkYxNkE0OTcxRDM2NzkyQworOjEwQUZGMDAwQ0VBN0YxMkZCQ0QyOTlDNjRGMTBGQkU0ODIyMkU4RjUxMAorOjEwQjAwMDAwRDkzMDRFNTc2RTU4MTdDRUYzMDU0RTU3MEY0QjNFRjlCOQorOjEwQjAxMDAwMkNFRkE3MzRDRTY3NDJCRTU0NUFFRDI0QkE5MjdDMDk3NQorOjEwQjAyMDAwRTY0MkZCRUJFQ0NFNjQ2QTI3RjkxOEYzMzI0NkY1Nzc3QgorOjEwQjAzMDAwMjY2REU2RkE5QjM4RUZFMjg0QTE3RUM5QUZGOTM4OTgxNQorOjEwQjA0MDAwNDc3RTdFRTZCOTY0MzkyRUU5REI0Njc5NkM1Q0Y3RUEyNworOjEwQjA1MDAwNzQ2RTlGMDIzOURERjk5RjlEMTczMzEzNjczRjMxQTc0NworOjEwQjA2MDAwN0ZDODdBMjJBRDgyMkZCODEzMjc2NkEzN0ZDMUFBRUJDRgorOjEwQjA3MDAwRjc0MkE0RjUwRThGMDNGRDBDRkFFRkIyQkYwN0QzRjkyOAorOjEwQjA4MDAwNzlCMkJCMDFDRjVERDRFNjgzMzZEQzg3NEYzMzkyMUJBOAorOjEwQjA5MDAwQzY3OTNDMjZEQTNERjc1QzJCNUU1NTYxNEY2NzJFNDkzOQorOjEwQjBBMDAwNEYyRUFFQ0YxM0ZFM0VCNjRBRkNERDk5MENGQ0I4MTQxMQorOjEwQjBCMDAwNjE5NTE2ODRFM0RFNUMyRDE5RTVDNjA1RTExRkRBMUJGOAorOjEwQjBDMDAwMDNGOTJDRDRBNzM4NUU2NDVFRTJDMzQ4OTdDQjNGOUU1OQorOjEwQjBEMDAwOTc4Q0ZFQTgzN0QyQjk5RkNEMDhFRjY1MDA1NzJDQUZFQgorOjEwQjBFMDAwQjFDMEY5MjYwQkNGQjlDNzFFRkNCMjY3NzAzRDVGNTVFMgorOjEwQjBGMDAwN0IzQzczNDJGMkYzMzZFNERBNzEzRkNFREY5ODZCMkY3QworOjEwQjEwMDAwMEFDMTQ3Q0RGNkZFQzc1QzAwRjc3M0RCQ0Q2RTY0RUY3NgorOjEwQjExMDAwMzU2NkZGMkY1MDRGQUZEOUFFRDYyMTFENDFCOTFERTE4NQorOjEwQjEyMDAwN0RDRTcxRTgxREFDMzc2RjYzNEMxRUVBRTFCMkZERkNDOQorOjEwQjEzMDAwMERGOTlFMzkyMTc4RThCQjVEOEY5N0VDM0E3REJFREYzMworOjEwQjE0MDAwM0U3REZFM0RENDQxRTNBRkJFNUQ2RTQwOUZFRjdGNEM0MAorOjEwQjE1MDAwOUY2N0NEODBCRDQxQTgwRjcwQkNCRDNDRDg3RENDMDU5QworOjEwQjE2MDAwNzhFQkVFNTdEREY4QTlCQjYzRDJFNEYxQTg0NzZDNTQ0NQorOjEwQjE3MDAwREQzREExQkNGQjUyRUY1OEQ0MkI0RTZEOUNFQjQ2QjQ4OQorOjEwQjE4MDAwMTdBQkJFODUzRjA1OUMxNjdGM0FFNjE4Q0FENUIzQUMwRgorOjEwQjE5MDAwRUVGN0UzMDEyRkYzRUFENzU5Q0QyRTVDQjc5RURFRjcyOQorOjEwQjFBMDAwOUEwNEZEM0VDN0VENzcwQkZDRkFGMkI2N0M2MTk5QjRDOAorOjEwQjFCMDAwN0I2NDg2RDI5NzkxMEU2MERDNUIzQzMwQTFCMkFBRjcyQgorOjEwQjFDMDAwMUY0NEJFNTAzQzBFMDgxRkU4RUNEQUJBNzU1NkQ0RkY5NworOjEwQjFEMDAwQUUzQzhFOEZFQjk3MEU4RjBCRTE1MTM4OTg5NzVENTdGMQorOjEwQjFFMDAwMzU4QTdEMDFGQjhFQUQ3RDZGMENDRUJCRjBFNzBBRTlBMQorOjEwQjFGMDAwMUY4NTJGRjUzQTgyRjRENUI0NkJDNjREOTRERTUyNDBDQworOjEwQjIwMDAwRUI5Nzc2QzJGOUY1NEEyMDEyRjJDRUMxQUU3RDhERDAxMQorOjEwQjIxMDAwNkVBRTlGREIzQjhBNTZEODgyRkM5MEExOUZDQzMwOEZDQworOjEwQjIyMDAwRjUyMUU1MzBGRkY5RkIwRTdFQTc0MEZGQzUxQkY1RURDQworOjEwQjIzMDAwMTYwMDlGNDZGOTUzQjJFNTA3NUJFODc3NzkxRUJEQUU2RAorOjEwQjI0MDAwN0U5MzhBRUI5RTJCRTYyRkU1MjdGMzBEMjczRkM1NzVFRQorOjEwQjI1MDAwQkMwOUZCMTJGRjBGRTQ0RTY5ODIxNkRGMjMzRTI4NDcyQworOjEwQjI2MDAwQUY1QkNGREIwM0RCMkRDNDc1OTczQkFDMkU1Qzc3QjlBRQorOjEwQjI3MDAwOUQwNTIyNjAzRUM3MjJBRDFFMjc3Q0JGQjQyMTkyRUMwMworOjEwQjI4MDAwNzRGMzZDQTBBRkU2NTFDQTMwOEUwMTE4MzFGOUNCQkUxMQorOjEwQjI5MDAwN0E1NzI1QkRBNzNDOEVFM0JERkMyOTg1Q0U2OUU1NjhCQworOjEwQjJBMDAwNUNDNUZDRDMzQ0JGODAwNTY4M0Q0ODJGOUVEMDc1RkEzNQorOjEwQjJCMDAwRjU3OTU2Q0JDRjc3NjVFNkMwNDE4NDRCMDk2QkU0RTc1RgorOjEwQjJDMDAwMzNDMEE3MjdDNERGNUQwNkVCRkMyODE2RjUzNzQzN0JBOAorOjEwQjJEMDAwRTZENkM4OEZFN0UwRkE1OEM1QkUxRjZDQTFFNUYyOUMyMAorOjEwQjJFMDAwMjlDRkMxRDI3RUZDNTQ4NjM3MUNDN0IxMDhCRDc5RkQ3OQorOjEwQjJGMDAwN0Q5RTBDOUNFRjRBOEIyNzAzRTFFMDVCMTc0NkU3RkQ0MAorOjEwQjMwMDAwNUIzNzcxRjlCNTNFMDZGNEQ4NEVBNDNGOTMzRTdFQUI1MQorOjEwQjMxMDAwQzJGNTczMzY4M0YzQzMyMUE2MTcwMzI4NkY5QTFGOEFEOQorOjEwQjMyMDAwNzE2Rjc2NTE3RDkyNjNFQjFGRThDREY1RkY3RkE4QTQ4NgorOjEwQjMzMDAwMEYzNUFGRTM3MTExRUI3MzM5RkNENjNGOTBDREY1N0YzQworOjEwQjM0MDAwMjlGN0UyMTlGNUQ3NTZERkY2NjRBMDFEODIzREM4RTc1QworOjEwQjM1MDAwRjUwOTJFMjk0NEJGOEVFOEFDNEQ0NjdDQ0JGNTQ5QkQ5RQorOjEwQjM2MDAwOUMxNUZGMzg3RkM2NTYxMUE3RDFCQzJFQ0M4RkZFOEMwMgorOjEwQjM3MDAwMkYxNUVGNTE1Mzg4N0UzQkE3MDc5NzEzODM0NjdBQjY2NAorOjEwQjM4MDAwODk3QUU0Rjc5ODYzOUE3OEZGRjUzMEFGMzkwRjlCNUNDMAorOjEwQjM5MDAwNjg3RjZCODVCN0M3OTM4MUYyRjNDQjc1NjE3OTQ4Njc5NgorOjEwQjNBMDAwODM0NjcyN0JENDg5NUNDRUY3MjMwNjMwOEYxRkQyNzIxRQorOjEwQjNCMDAwRDE2Rjc5MEY5MzJFNEQwQzA3RkE4MzdFQkVDQ0U3RjY0MgorOjEwQjNDMDAwRjBDODAxNUVCMjAzNkU3NTcxQkU2RjVDQzczREEyOUY4RgorOjEwQjNEMDAwMzk1NkVGNkY4N0I1MzMxRjA5MTczNjlBRUIxRDVGMkU2RAorOjEwQjNFMDAwNTIzNkYzNzkwMUJFMjEzRkU4NTc2MTY0M0ZGQzUyQzhGMQorOjEwQjNGMDAwMjUwOTVGQTAxQjhBN0I5MDdDMkJBNjk1NUVGQ0NGODZERgorOjEwQjQwMDAwMDFCREFDQjM3MDNBOTBFN0I2MTA3QTExRjhFRjQ2Rjg4OAorOjEwQjQxMDAwQkQ1NUUwOTczRDEwMjZFOEM1QzRGRTg2NzBDQzc3NzIxNgorOjEwQjQyMDAwN0FCOENBRjMxN0UwN0I1RDhGODE2RENGNjExMkRGQ0NGNAorOjEwQjQzMDAwRUMxRkY4Q0ZGQzJFRTUyRjNGQkZENzA3N0E0NkM5MEI4QworOjEwQjQ0MDAwMEY0NTMxQTg3N0RBNUM5QkUwODZGNjY1NUI1NzQ2Nzk1NQorOjEwQjQ1MDAwMjAzRDY1RjY0NTM5NjFGQ0QzN0VCNUMwREYwRUJDREYwQgorOjEwQjQ2MDAwNDU3OEYzNzM5QzQzMDlGMTkzOUU3OUVFRTcxMzcwOUQ0MQorOjEwQjQ3MDAwN0ZEOTZBNzEyMjRCQThEODZFQTNGM0Q4QzJERDBCNDhERQorOjEwQjQ4MDAwNUY4NzdDMTNDRkFGRkUxQUZEQTYxNUZCRjRGNkY5OTI4OQorOjEwQjQ5MDAwNjcxRTRBNzAxMUJDN0RDOUE2NDQ0QzAzQzkwQ0QyODVGNQorOjEwQjRBMDAwNUIyQ0FEN0U2NDE4MDZGNEVGRTY1NTM4M0Y2MzdCOUM1OQorOjEwQjRCMDAwQzc2NUMwNzc0NTlENUE2ODhENkU1QjVFMjFGODRCQzVBOAorOjEwQjRDMDAwRUU5RjdGOEQ3NkMzOEFERDM3OUU0NDdFNUY2MUYwMEJGMQorOjEwQjREMDAwMTQwQkZGODhEMTJGRjA5QjFFN0FCRjMzQzA4N0UyMEM3QworOjEwQjRFMDAwN0MzMEFGOUU0NDJFRENBRTVDRjNFQzIzMzk0REE4M0Y5QworOjEwQjRGMDAwNkM3OTJCNEFDOTBBRkEwN0E0REZBNEE1NkVGNjUzQUZFQworOjEwQjUwMDAwQkEzQURFOTcxNzg0N0QzODg4MzdDRUJGNUNGQjE0MENCRgorOjEwQjUxMDAwNTY4MjgzM0Y0RkNCMkM4MUE4MjE3OERFREI2NDIxRkQ0RQorOjEwQjUyMDAwQjdFQ0Y5QTdCNzNEODY3NEY2QjE4REU0N0JFOUYzQUZDQworOjEwQjUzMDAwRkZGRTNBRDQ5Rjc3NTkzQThERTNDQjcwMjgyMTcxMzlCOQorOjEwQjU0MDAwMTUyRTZFOEY5M0Y4Mjk3OUU5NzVBQjJCOUI3RjVGMUFDNworOjEwQjU1MDAwMUJDNDUzRTlBRTgzNTY4QzBGMzJDMjczNTRERDQxNkI2QQorOjEwQjU2MDAwQTNBMzFEN0NENTM1OEQyMTNCRDRCMzdGQjVFMkZFMzgzNgorOjEwQjU3MDAwN0Q0MDYxOUQ1M0RCQjYyRkRFRjQ3QTE0RUE2NzA4MjcxRAorOjEwQjU4MDAwOTQ0RjEyNkZBRDc4MzRENDg3RkUyN0JDM0E4MEVBMzlFNQorOjEwQjU5MDAwRjE5QzcyMjUzQzNFRDU4MzcxQkVGMjcyMjQ4QjgxNzk3OQorOjEwQjVBMDAwMTQ3RjYyRjM4RjQzRkNFRTVDMTI4NUVCMzk2OUFFRTRFNQorOjEwQjVCMDAwNzRGRkM0Q0EwNEQ0Rjc4QTJEQkUwNDI3QTVGQzdCRjEwRQorOjEwQjVDMDAwOTM3NzExM0RDRTU3MkExMzlDNTk0NEVGNDkyNkQyMjUzMworOjEwQjVEMDAwN0M0OUI4Q0VCOTFCQTdEMjNBRTczMThERThCMUY4MDk1QQorOjEwQjVFMDAwRDVFQjg3RjQ1QjMzMkJEOEQ1Q0VCRTE5REI5M0YzQTkwQgorOjEwQjVGMDAwOTM5QjAxQjlCMENFOTMyMjNFQ0JGNzNCNTU5Q0EzMTc0QQorOjEwQjYwMDAwOTEzQ0JGNEJBQzk5QjFDNTk0RkY1NkU4NzNERDdBQjY1NworOjEwQjYxMDAwRkFCRkVEQTFFN0QwOEEyREFCMUIxMDRGNjdCQTc5M0E3QworOjEwQjYyMDAwRTMzQzAxMEUzRTAxMzdFNTA3RTg1NzdEMkZCRjMzQzdFNgorOjEwQjYzMDAwMTM3MzYxRkMwMkI1MDNCOTNBMEFCRjYzRkQwNjhCMDdCOQorOjEwQjY0MDAwRURFQzIxRURDNDM5OTE4RjdGQTcxODFGRTYxRDhFRTcyMQorOjEwQjY1MDAwRTA5MzA5RURDNzdGRkRBNEE3RTQwQkFDMjEzNEZFQUI1QQorOjEwQjY2MDAwNDMzRUIwRTUzRUEyQUY2RjNFRTA3QzY2QTE3RjYyMDE0MworOjEwQjY3MDAwOTUzNzU4MDI5REIxREM3RjcwOEE0MjdDQzJDNjAyRURDQworOjEwQjY4MDAwRURGMzJEMTZCMUNGRjVFNTMwNEZCMzEyMEFERjAzNUNCMQorOjEwQjY5MDAwM0Y5NUY0MzIwRkY0QjI0MDg4OUUxMEE0MUY2QkYwM0IyQworOjEwQjZBMDAwQURGRjU3NjIzRDhERTRDRjkzN0VDMEY5ODIzRjE4RDczRQorOjEwQjZCMDAwNkZFNDE3RjkzRDBENzE0QUEyM0REQkQ4QkVGRjI5QzhFMgorOjEwQjZDMDAwMjc3QzM0NkUxOUM4NzdENDQ3Q0EzRUI2OTExRTUxRjYwRQorOjEwQjZEMDAwQkNDNThCNzAzQUJCRTNGMEVGNkZDNUYzNkQ5RERDRDc1MworOjEwQjZFMDAwN0EzRTZDRENEN0M1MkYwRTZDNzc1RjlGNUQ5QkRCRkVDRgorOjEwQjZGMDAwQkU4NkVGRURFRUVCQjUwQUYxQkJGRjJFMUYwNkM5NDc4NAorOjEwQjcwMDAwNzY4OTJCRURERkY5MURGMEUxNEEwMzVDQkY2NTU5RDE2NQorOjEwQjcxMDAwNDNCMEQwNTlEODlERjA2NDgwQUY4NEFCOTFBRjVBOTFCQgorOjEwQjcyMDAwNDlCNkMzNTcxOTg2NzQ4NEMwNTNDMjUxRDIyQjYzMUFDOQorOjEwQjczMDAwOEREMzRBRDc5MjZFMjU1REI3RDJBRDcxREQ3QTc4MUE3NgorOjEwQjc0MDAwQ0JGMzEwRjczMDFGRUYyQjE2RDIxN0NBRUE3OTdDMjIwMQorOjEwQjc1MDAwQjRBMzc4QkEwQUI0Q0Y1M0VEREFBM0M5OUQ0MkYzN0VGRAorOjEwQjc2MDAwNDNCRUNFNTBERjYzQzg3QjBERjUzNTQzQkU1MjU3QkY5NQorOjEwQjc3MDAwNkNERjYxMkIzRjNGMDQ3NEY1NkM1NTYzRTkzQ0QyNTY5NgorOjEwQjc4MDAwQ0ZGMDczQkZEM0VFQUZBRDNFQTQ4RkFFQ0Q1NkU0OTNGMgorOjEwQjc5MDAwOTZFNUNDMTcwOUVEOUJGN0FCQTRGNzVDNzQzNTQ3QTE5MAorOjEwQjdBMDAwREVCMjMyOENFQjc1MTc5RDIyMUZDM0YzQ0RGMUQ2NTU1NworOjEwQjdCMDAwQzgyN0U1RjdFNjMwNkU4N0I5RTg2RDhFOEEwOTM5Q0Y3QworOjEwQjdDMDAwMzdENUFCNTE2OEZGNkRGNEIzODJGNkUzNUI2QTY4M0YyRgorOjEwQjdEMDAwMzVCMjhFQ0FCOTdFNzczMTlDREIxQjJFODY3MzdCNDNENAorOjEwQjdFMDAwQkVFQTQ4QTk0MjNCNkMyRDhGMjM5Q0IzNkM1QTE0QzUwQQorOjEwQjdGMDAwNjFENEE3REYzQzFEQkVDRjdEOTNDMjBDMzA4RUNFOENCMgorOjEwQjgwMDAwRjEwRkIzMzkyQUQ5MjlFNkEzNzhDMkQ5RjUzQzBFNjJFMworOjEwQjgxMDAwQ0U1QTNEOUVFNzM5QjY1MEJDRENCNzZDMjlBNUYzRDZBRAorOjEwQjgyMDAwRUJFMzE3NEFEODVBQTJCM0UyOEQ4NkVGRjU2MzY5OUYxRQorOjEwQjgzMDAwOTQxOEY2ODkyNkVDQzNDNjdERjJBMURDMjdCOTJDNTdGMworOjEwQjg0MDAwMTcyNzI5Rjg3OUJFOUE3NUYzNzRDMEM3QzU2MzJBQjM2MAorOjEwQjg1MDAwNDFCRUE1NUU2NUFCMDZGMEI4NThGNDNGRTE4MTA0Rjc0MAorOjEwQjg2MDAwREY0MkQ4QUZBODM3NDk3ODlEQzM3REQ0QUI2M0ZERTVFRgorOjEwQjg3MDAwREM5RUNGMDZGRDE0RTk2NkVGQTczOThGNDM3QTZFRUZBMQorOjEwQjg4MDAwQzcxOUFGNjFGRUU1M0ZBNDdDQ0FEQUQ2MUY3NUUwQkJERAorOjEwQjg5MDAwNTlDOEE3MkYxRUIwMzFBNEY3OEIwN0RFNDg0MTdCRTRCRgorOjEwQjhBMDAwQzU1NzZENzRDRUJFQjhEQ0M2RUREQzA3MjJGRDI4NjIzQworOjEwQjhCMDAwMkU3NkUzN0E3MUNERkVCRkU2MzQ5MjVDNUVDMUU1NjIxRQorOjEwQjhDMDAwODY5NUYwREM1MkZGRjcxMzY4NEY2RkE5ODc1NTIxREY4QgorOjEwQjhEMDAwM0YxMDQxRkJBOUUyRDUzMEIyMzM1RkRDRkZENzQxQTE3NQorOjEwQjhFMDAwRjZCOUZGRUU3QUE0RkZGRDYyMjQ5QkZFMjJEMjcxMEMxMgorOjEwQjhGMDAwM0YxNzU0QkM3NkVERDNFODVGMkVERjdERDAzQTFCQ0FFQworOjEwQjkwMDAwNDdGREU2M0Y3MzkwQUY1RTdDOTFFQjUzMTcyQzhENEY1NAorOjEwQjkxMDAwQTI4RDMzMjJFM0QyQUYyQzQ5NjhFNzgzQ0VCQTMwQjY4QQorOjEwQjkyMDAwMjVBM0ZGNjQ1RjU2N0I3MEUxNzBCODA4NzBDMDc1MDE5NQorOjEwQjkzMDAwNUM4QTUxMUU3NDA0OEZCNDdGNUI3ODdDM0Q4QkYzQjdCNworOjEwQjk0MDAwNkIxOEZBQTM4MzcwNTEzQ0ZDN0JBNERGQUVEMEZBRjlFQworOjEwQjk1MDAwRjcwMzdGQ0Q0MUZFNzNBNUY1N0E3MEJEMDNGRkZGQUMwMQorOjEwQjk2MDAwNzdENkJGRUQ3QTM5QkQ3Rjg1RjIzNUJFMkREREI3QTUxRgorOjEwQjk3MDAwRUI5N0ZGODNGMjNCMjNERDM0REYxRkI5REY3RkY2RkY1OAorOjEwQjk4MDAwOENCRTM3RkVEQkFFRjc0QUY4N0U1M0UwM0JEMjg5RkUzMQorOjEwQjk5MDAwQ0M4QkZCRkYzMzg1NURDNUJBNUZGQjNGQkE2RUE5Qzc5MQorOjEwQjlBMDAwOEY1NEREQzc3MkExRkU1QkFDRUUwMzc3MkE2OTIzRURFRAorOjEwQjlCMDAwRUEyMUE3MzIxNDc5QkVBM0YzRDMyOEM2RTVGNDI4N0I4NQorOjEwQjlDMDAwMjlFOTlGQTNCQTNFNDBGQTcyMERDQjIzRkY4NUFGQUJBNgorOjEwQjlEMDAwNEE3RTFEMEEwMjAxMzhCQzkxOTg0QkY3QUM5ODM5RDBDOQorOjEwQjlFMDAwNzUwOUU0NDcyNjk3NTNCQzk4RjE1QzM5MkE3QzdDMDFBMQorOjEwQjlGMDAwRUFBNzg3OTdDMUJDQTA5RkMzOTEyNjI3RkFBODQ3NzdEQgorOjEwQkEwMDAwNTUwM0I2MUM0QTlCMzAzRDlBMzI5NkUyRkU0NzNCRjQwMgorOjEwQkExMDAwRTdBQkIxODY3M0QyOEQyRTdENzkwMTdCQjExM0ZBRUQ0MAorOjEwQkEyMDAwMEFCMjJDNzRCRjYyMENENjBGMzk1NzFFQ0Q3MEQyM0FCMQorOjEwQkEzMDAwNkY2NEI1MkI5QzhFQUI4NzUzNjIyRjdFQ0U2QzBCODdDOQorOjEwQkE0MDAwN0YwRUI3MzY3MDEyRTc2OEIzQTg2Rjg0OUJEOTcxN0ZGOQorOjEwQkE1MDAwMDNCNjMzMzMzODE3RjNGNUQyNzk1QTlFOEJBRjA0NEZDMAorOjEwQkE2MDAwMjZDRURCNjYzMUI0ODRBRkI5MkJGN0NGODZGNDRCNzBBQQorOjEwQkE3MDAwOTE3MEJGNUE3ODRCM0MxOUUxMkVFMTJCRTE2NkM0QzNBQgorOjEwQkE4MDAwRDkwQzI2Q0VCNzFDRkU1RENEQjk2NkRDNzdDMzg0NUVDQgorOjEwQkE5MDAwM0ZEQTFDQzNGMzVEMUI1NDJGRUQ0NzNGRTE2REQ0MzdGNAorOjEwQkFBMDAwNkUzM0VBRjUyMzFDMzExNDQ3NkFCQ0JGNTAzNDM4NjY0NAorOjEwQkFCMDAwOTAwMkVCNEQzNjMzOUYwRENFQTFFODdCMjNCQkVCN0Q4RgorOjEwQkFDMDAwNjZGRkYyNTQxQzg3REI3N0JCOTlCOUZEMUE3NkI3MkY1NgorOjEwQkFEMDAwM0M4RkVBN0JBQzkwMkY3QzcwM0VGMzQwRkRDMjY0RTY2NQorOjEwQkFFMDAwNTY3ODdEMTYxRDRCRTE3MTRDQzUzODMxNDhCMTVENjEwQQorOjEwQkFGMDAwMzRFRkI3QjAzM0YzMkZFN0Y4MjRCQ0EwRDkwN0VEMUIyMAorOjEwQkIwMDAwRDBBRkM3MTRDQkRCNDdFNTUxN0I5Rjg5QjdGNzk4MjFBRQorOjEwQkIxMDAwRUQ5RUNFRTMxNDlBNTc3MkJCN0NFMUVBNkUxOUM4M0ZFMgorOjEwQkIyMDAwQzY4REQ0REI5OTZCN0I3MTdGQTQ0Q0JGRUZDNUY3QkI4RgorOjEwQkIzMDAwNkE3MjI3RDI3RDhBMTVCREU5N0NBNDg2N0JDQkY3QTBFQgorOjEwQkI0MDAwOUQ3RTI3OEZEMzI5NUM3NUZCRjg4MTM4QkY5RDcxNkU3MAorOjEwQkI1MDAwOUNERTk5MDlCQjA2RjFGQTMzRUVGQTEwQkU2QkRCQzMyQgorOjEwQkI2MDAwRThCQjJCNTMxQkRCMEJFMzAxMTREN0FDM0RGMEExNjgwMgorOjEwQkI3MDAwRUE2MTZCMjIwQ0ExRDU0RDNDOEY3NkMyMDlCRTVERUYwOAorOjEwQkI4MDAwQTA3RjcyQzIxNDk1RUE0RjYwM0MwRTkzQUQ4OEEwMzgzNgorOjEwQkI5MDAwQ0NGMUJFQUZDRDg5RDBERjc4Mzg3NDYwNzk1Mzk4MzM1QgorOjEwQkJBMDAwNjUxMUNDQkY1MEQ4ODdBNzg5Nzg2MzM1OUM2OTJGM0EzNworOjEwQkJCMDAwNzA1RUREMzJEMkUwRkI3OEQ2N0U3Q0YyNDM2MjdGQTlGNAorOjEwQkJDMDAwMjM5NThERTg2N0VBM0U4QURCRUY2NTdERUMwN0ZCN0QxOAorOjEwQkJEMDAwQkMxN0I3NDcxNTg5NTRFNjAxQUU1NDdGQ0UxQTVCNTNBNAorOjEwQkJFMDAwM0E5RTdGRDY1ODAyQkQyMEZEQjBGN0M4NzlCREEwN0MzMworOjEwQkJGMDAwNUMxQTFCQjMwMUUxN0U4RkNBMzZEMzdDOUIwQkM5QUZBNQorOjEwQkMwMDAwMTA5OUU5NDIzQzY4NDBEMkU0NUZBOTRENzVBMTVEQUM1MgorOjEwQkMxMDAwNjk0NDVEMDBGRDA5NEQ4RkE2QkE2QjVDODQ2NThBMDc5NworOjEwQkMyMDAwOTJFN0FEQTYxMTgxMUU2OEM3NkZDRUU1N0U4OTEzQ0U1RgorOjEwQkMzMDAwQzY0ODNDMkZDRTc2RDhGOUZENDkxMTU3MzQ1N0RDQTNCRQorOjEwQkM0MDAwRTk1RUQzRjhDMDM1NzgwRTdENDgyNTdGQ0REQzg3RjhENgorOjEwQkM1MDAwRkRCMDNGM0JFQzdFMDVDRjZERUJGOTNFNjU2QkY1NzFCQQorOjEwQkM2MDAwNDRDQ0U5MjYzQkQwRUNEQTExNTYzQzZGQ0U3MTc4QUM2RgorOjEwQkM3MDAwQjg0RTdGQTZCNjAyRDcyNUVGMjNGNjQxMjQ0MDk3ODUxQworOjEwQkM4MDAwQjU4NTE0QUZBMjQ2QzFCRUMzN0Q2Mjc2NDVFMTM5RDgwMQorOjEwQkM5MDAwMTg4NzU0MjFFMjhFNjRGRTE3RTFEQTAzRDg1RjUxQjRBRAorOjEwQkNBMDAwNkIyN0QyQ0JFNzU1RTk2NDFGM0QyRUU4NkUxQ0M2NTVDNQorOjEwQkNCMDAwQTIzRkMzREM5ODg0RjMxOThFREYxMUFFQjFDRTBDMDcxRQorOjEwQkNDMDAwRDE3MzE4NDMzODM0NTk5QzE5NDhERjREMkJDMzRDRThDNQorOjEwQkNEMDAwOTcxQkI3OUNEMzM1RUMzM0JCMTlEQURGNjc2NkUxRTgxNQorOjEwQkNFMDAwNjdCODREQjQ5RkI5Q0NFQ0REMDRGOUFFNzY2NjhFOENBNgorOjEwQkNGMDAwNDVCQUNBMjVCQTRFRUNBMzE1RTE3QzRFRERDQjA2MjMyRQorOjEwQkQwMDAwM0RDQzVFQkI4RUZDMzE5MjJFOThCOTYxNzQxQzhDNzM1NQorOjEwQkQxMDAwNkE2QjZBMUVGMkNENTYzRURENjdFNDk2NUVBMUY0MzA5MgorOjEwQkQyMDAwNDUyMTNBODBGNDYwM0FEMUMzQTQ2NzkxRUVDNzhEMENFNworOjEwQkQzMDAwRjQ1ODlDODVFN0QxMzJFNjQxRjk5RUM4RENBODI3QjRDNworOjEwQkQ0MDAwQjA2NkYyNTdCNjM4QUMyRUI0N0Y0OTdFMjJGOTg2QkM3NQorOjEwQkQ1MDAwMkYyQkU5NjAxQkM4N0JCMzg1QjFFREQ1NzY0QTlGQUIyRAorOjEwQkQ2MDAwNzYzMjczNEZDNjc2NTQyNzUyN0U2N0I1OEJEMkJBRUFDNQorOjEwQkQ3MDAwNENGQUZFNjJCNTlCRjJCQkFCMDc1MzdFNkZCNTg3RjIwMAorOjEwQkQ4MDAwRkJBQTBCMjg3REI1REE0QkRGMjU1RjAyQjgxMDFGOTJBNgorOjEwQkQ5MDAwN0M0NUYyQTNEOTBFNkIxM0ZBMkYyNTVGMzJEMkNEMkMzRQorOjEwQkRBMDAwMDBFRkYwM0M2QTRGN0M0RkYyM0I1Qzg3MjkyRkM4OEYzNQorOjEwQkRCMDAwMjQ3RUQzMTRBRjJGMzExNUY5NThFMzBDQzQ3RkJFN0ExQgorOjEwQkRDMDAwRUVGOTk3RjE1QzVFRUM3MEQzMzk5RDcxQkVENzAyRjQ0OQorOjEwQkREMDAwOEE3MDQ5QjFCMjdENjg5N0FENTlFNDY5NUE5RDFBODQ1OQorOjEwQkRFMDAwRkY2REM1MEEzMzg3RDBENUVEOTU2MUNDMUMyMjM3RUVBNworOjEwQkRGMDAwQTg4QUQxRTU2NzU2QkRGRjdBNjdEQzBGRjFEQTY3ODg1QworOjEwQkUwMDAwOTcxMzNGRkJFQTg5M0ZDMEY3QTc3RTc2QTYyN0UyMUI4MAorOjEwQkUxMDAwRTZCMUY1MTExQzc3Njk3OEVCM0M2MjMxQkZDMjQyN0UxNgorOjEwQkUyMDAwQUVFRUMyN0VEMjVERDg0RkYwNEZFODdERTZBNzdFRjYzQgorOjEwQkUzMDAwMzdEQUU3NEQ1NTM2MTdFQUM1OUYyMEJFMDBCRTdGMTQ5RQorOjEwQkU0MDAwRjgyQUFBQjIxMTFDMEI1NzdFRjFGQ0NCQjhERjk3NUEyNworOjEwQkU1MDAwODlERjE1QUQxMEZCRDE3MDBGRkFGMzI0NDY3NjA5RDBCNworOjEwQkU2MDAwQUEyOTlFRkRGMzdCQUQ4MTA4RThGRjczODVFRjYzMDU4QQorOjEwQkU3MDAwOTQ4Mzk5MTg3RkI4RTY4RDhGOTAwRjI4NTVDN0M4RkYxNworOjEwQkU4MDAwQUVFMUJEM0Q5QzlGQ0Y3MjRFNzdBRkJBRUEyOEQ1NjMzNQorOjEwQkU5MDAwOEQ1RDYzRDBDRjIzRUYyNTQ3MENGMDU4NURCMDdFQTRCNQorOjEwQkVBMDAwNkRDNDVGNTFFNjIxOTY4NDdFOTY1QUM1ODlBQURGMUMyRgorOjEwQkVCMDAwRjE3RENFMUE4NUZDOUExOEM3MzMwNUVGOTE2N0FBQjRCNQorOjEwQkVDMDAwQUY0NkY0MzIxMzVFOUZDMjE4N0NEMkVGNkE0OTRFNDlFNgorOjEwQkVEMDAwQkE5REIzMTZEQUUxRkVBOENEQjVDRTBCRTFDNzQ1RTJCNworOjEwQkVFMDAwRkJFQzRDMTNBNUYyN0IwMkY2MEJGRDc1NTk5MzNCMUQ0MQorOjEwQkVGMDAwRjU4QTJFNTg5RTg1NjlERTc0ODQ2RjE3QzcxOEIzMTJCMQorOjEwQkYwMDAwNDIwN0NFNENCMzk4MDcxRkZGMjk0NDJFRkNFRkZFQ0MwRQorOjEwQkYxMDAwMzRFQkRDMkNCQTBGNDg3MjRDOEU1Mzk0OTlCNzBBRTM3OQorOjEwQkYyMDAwNEI4QkQ2OEU0MDJFQ0M2QTJDRUVDNDRFNTAyRkE5QjUyQQorOjEwQkYzMDAwMUY3MTFGREJDRUUzQThDQjNBOTAyM0QyQUU3NjBBRkY2NworOjEwQkY0MDAwNzkyREFEOUJFQ0JFMjUzQjdGQkQxM0VGMTc5NDdDNkEyQQorOjEwQkY1MDAwMjNGQzk2RjQxMzcxNUI1OUZFNDE5M0M5MDBBOUI3Njc5RQorOjEwQkY2MDAwOEZGRUY1Njc1MUU0QTdEOENERTMzQjIxRTU3NkQ2QTU1MgorOjEwQkY3MDAwQzVEQzJFRUI4NkZERDU4RUJGRThDOENFNEZBM0RBQjU2MworOjEwQkY4MDAwNjNFRjU2N0Y5NDFEQkI0MkY5M0UwQUY1MDhCOTlFRkM0QgorOjEwQkY5MDAwRkRERjI2RDAzQzk0Q0JFNDI3QUFEOEJGMzJBMUJEMzgyMAorOjEwQkZBMDAwMkZBMzFEQkJENURFMkRFQzdBMTU0QjBCREFCNTc3MUIxNQorOjEwQkZCMDAwRUQ3N0UzMzMwREZFMDMzM0EzN0I2NkQyN0VDN0Q0QUNBQgorOjEwQkZDMDAwNjhGNDAzN0MyQkVFOUY3NDc0Q0U5MUY2RUY4QTBERDA0QgorOjEwQkZEMDAwNDkxQ0VDNTdCMzJCMUFGRDVCMTczQkQwQUYxRkNBRTRDQgorOjEwQkZFMDAwRjJGRkJDQjA5NzVGRENBMUQyQjlFN0UyOEU0OERBNTcyNgorOjEwQkZGMDAwMEI3NzNDNzgxNEZEOEUwQkI3MjgzNDhENzJENjQwRjA0OQorOjEwQzAwMDAwMDNCODMyN0JBODVDQzMzOEI2QjhCNkYzNkVGMUY3OENEMAorOjEwQzAxMDAwNDZCOTUyRkFFQkM4NEFBNEI3MDU3NThBNjcyQkNDQTc3NAorOjEwQzAyMDAwQzVFRThBOEUwRjk5Q0ZBMjRDQkU2RjRBNkQ3NTgzMDhGQworOjEwQzAzMDAwREU2MkZFRjMzMzVENDQ1N0IyREU4MkZBMDdDOUJFMENGRQorOjEwQzA0MDAwRjUyRTkwNUVGNDQyMDRFM0Y3NTM5QURGQzE3OTlFREQ0QQorOjEwQzA1MDAwRDhERjhERkVDMjA1NzVCQjE2OTI1RUIxMjNDMjg5NzYwQworOjEwQzA2MDAwODUzMzIyNkU1OUY2NzNBRjE4RUZERTRDQUVFNzlEMTU5RgorOjEwQzA3MDAwRkVBM0IzM0JGOTNCMDAzODRGREM2NzY3MTQ2RTg3OTYyRAorOjEwQzA4MDAwRUQ2QUM0QkVBOEM5RTQ3QTU2MDZDMjIwM0U1ODdGNDE3NAorOjEwQzA5MDAwNUQ1MzU0MEZBODdGNzJERkZCOTQzRTIwQzY1OUUwNjhDMQorOjEwQzBBMDAwQzg0MTc5N0M3Mjc3MDRGOUJGNEVFRTdFN0NDQzZCMzA1MAorOjEwQzBCMDAwREVGOUJBMTE5RDcwNUZDOEZFMUZDRkI0NzA3QzZDNTQ1RQorOjEwQzBDMDAwMEIxMDVFQ0NDRkUzNjZDQTExQkVGRDQzRTcxOUI3QzlCQQorOjEwQzBEMDAwOTcxQUJBRkY3OEZDRDBEOUREMkY0NTk5QjI4MkY4MkM5NworOjEwQzBFMDAwQjc1N0RBOTM0Q0I4OEYxNjc5OTFCRUEzOTE3OEEwN0Y5OQorOjEwQzBGMDAwRUJFRTg5M0U5NDYxMTVGNUI5MENFOTlBRjY1RjEyRDUxRAorOjEwQzEwMDAwNUY2MzBBQTk2N0IzQjgyOUNFRDRCMkFGRDBDM0VGOTlBMQorOjEwQzExMDAwODg3QjUxMjI4RTNGNUZDRDIyQkZFMkFDN0VBRTY5QjdGNQorOjEwQzEyMDAwMjE5RjdDQ0I0MkY4NThEQ0RCMzUwREY5RDNBNTA2OTU3MQorOjEwQzEzMDAwRTEzQzE3QTdCMjAwRUEyNzRCRUU4OURDODQ3MjRDQ0VCMworOjEwQzE0MDAwN0I1NjdGQ0UwRkNBRDYyOENDMDNFQjJCRjNBQjRDODNBOAorOjEwQzE1MDAwQjQwQkUwREY4N0Y0OTREODM4MTBFMzI0OUI1MkI5NUUyNworOjEwQzE2MDAwMjFFMzQ3MUYyQjM2NzlBQzIwMDc1RkNGOEMxNTdDNTYxNworOjEwQzE3MDAwN0I3NDJFRkFDRjI2NjVEMjc5RUU4NDk1Rjk1NEI0MkJEMAorOjEwQzE4MDAwQkRDOEUzNEJDQkQyNzg1Q0YzNjMyMjFFQkUyQzM2OTA0NQorOjEwQzE5MDAwMTEwN0ZEOUQxM0Y4MkQ5QjE0QzhDMEI4OEJCMjE3OTNERgorOjEwQzFBMDAwMjhFRUUyOUM5NUZCM0RGMTNCRkE1OUNCRjJBMEJEODMxMgorOjEwQzFCMDAwREVEOUQwNjRGQjk4MTA3QTJBMkI3MkJCQjA5RTFBRUJBMgorOjEwQzFDMDAwNzZFNTNBNzBCRUNFMEJBNEU3RUU4OTY0QThFNzlBNUVFNgorOjEwQzFEMDAwOEVFNDcxNTNDRjg0NkRCNjg1RTBFREUzNENBRTQ3Q0I3MgorOjEwQzFFMDAwRjczQkQ4QUQzQ0NFRTg2MTBCOEY0QjdENzg2QjkyREY4RgorOjEwQzFGMDAwMUYwMkFGODcyRERBMEM4NDAzQUUwM0Y1RkIwNUQ2REFGOAorOjEwQzIwMDAwMENENDdGRTU3QzE3NDRENUQyM0NDRjA5N0E1RjEwNUUxMQorOjEwQzIxMDAwQ0JFM0I5QzU3RDYwQUM4RkY5MjYxMTg3REVGQ0FDOEQxMAorOjEwQzIyMDAwRTI4MENFMjQzNUVDQzVGMUNGM0NEQjlCRTFGQTlCNTI5QQorOjEwQzIzMDAwRkRGM0Y2NTEzOUU4OTc4MENGOTJFNzZDMDE1Q0NGRTlDNgorOjEwQzI0MDAwNjdCOTNERkFCNDg1RUI2QkE3MjcyNkJBMTBCRjA1OTNGMworOjEwQzI1MDAwMzZDQzIyN0JDRDE2OUI4Mjc2QkVEMzBBQjMyNjYyRjlGQQorOjEwQzI2MDAwRDY3ODhBM0YyRkE5QUVBMkY4RUQxMjYwMUI3ODdGMDgxRQorOjEwQzI3MDAwRDIwMkJDMDc3NDdBNkI2RjhBMzczQjhERUYzNjI4RjQ5NQorOjEwQzI4MDAwN0QwRDdFRDc1OEVEQUM5RjIwM0NCNkYzRjNENTk5RTdGMgorOjEwQzI5MDAwRkVERTNCMzRERTVCQTYyNTVCRjRGMTc1OTI0RTY0Rjk1RAorOjEwQzJBMDAwREYwNDdGRkI5QkQ4RTdGRkM4RTRGNjg4RjI4OEJBODdGMworOjEwQzJCMDAwRDM2ODlEMUNFRTgwMjdGRThFMEQ2QjhDN0M3QzAwQzZBNworOjEwQzJDMDAwNTNGNDU0OTA4RjNDQzYwMjE5OEZBM0RENjEzQjNGN0YyRQorOjEwQzJEMDAwOUREOTYxQTFCOEY1OTI5NzIzM0QxNEM3QjZGQTFBMTNGOAorOjEwQzJFMDAwQzU1M0E4NUM0RjJGMzEwMUY4MjA1NTdFQjY5REUyQ0I5NworOjEwQzJGMDAwM0EzRDE3OTY2NzIzRkQ5Q0QxMzlCNzc5QUIyQUM2NjFDMQorOjEwQzMwMDAwMENFRjUzOUVERUM2RTM4RUM3QTEyRTQ5RTVEOTU0N0VCRAorOjEwQzMxMDAwNUFFNDRGRUZDRDI2QkQwRkZBRjdFMEZEQUE5MjlGRkMzRAorOjEwQzMyMDAwOTRDMzcxNzJGMTcxQUU3N0Q5ODlERjk2QjVGQTc5ODZDNworOjEwQzMzMDAwNDZBMzFDMkM1RjNEMjQxQUVGMkJCMjc3NTU4NjdBOEJDRgorOjEwQzM0MDAwMTE0RTk3Q0NFRUNFQzg2N0M3RjdFNkZDQUM3NEVGMTM3RQorOjEwQzM1MDAwRTQ5RjJBMTVGNzA4NEE5RjUzQjgxRjFBRjYyMURFRTcxMworOjEwQzM2MDAwMkM1RDM1RTQxMUEyQ0Y3NzJDQUMyN0FDRTc1Q0REODNFNAorOjEwQzM3MDAwNTFBMUY4QjhBNjM3RTc3M0FERjVBRDZFQUE1RjBBRjUxRgorOjEwQzM4MDAwQjE5RkQyNTU2RjQ1RDE3Q0I2NTkyODVFQzU4OEM3MUY2RAorOjEwQzM5MDAwRERGRTM5RjU0N0I1NkZBNThGM0E2RTY3NjlCMzdFRDY3NgorOjEwQzNBMDAwRjAxRjlGNDJGRkRGRUMwODczRkJFODZCMURERDgzM0I1MgorOjEwQzNCMDAwNkJBOTlCODdFQjNGRkI3QzE4RjFBREIzMzE5QzNGOUM5NQorOjEwQzNDMDAwMDQ3RUVBRUI4NUYzMThGQjRCOEFFRkZBREQ2NEJBQkYxMworOjEwQzNEMDAwMzdERkFGRUY1NzhFM0JCNDM3RTdFM0U1NzFFRTY4OEM5QworOjEwQzNFMDAwMTcyQzdGOTdGMzQxQzBDQkNERDRGRTVEMEJCNTM3QUU5NAorOjEwQzNGMDAwMjM1OUI0NkJERDlGQ0Y0NzEwM0Q5Q0VEQzJGMTcyNzY5RgorOjEwQzQwMDAwNjcyRjkyNEY0RDMxOUNDRTYxQkUyOTc4REZFRkVDRjM2MAorOjEwQzQxMDAwQkQ3MkU5MUUxRDJBM0Q0MDBGMjVFMkZDN0IzNkE2MkU4QgorOjEwQzQyMDAwQzUxOTUyREU2NDExRTdCODAwRDQ0NEJBQzEzNkMwREY4MgorOjEwQzQzMDAwNEJBQUI4QkU1NTZBNUY0QkYxMjUxOEFGM0IyODhGRDI4NworOjEwQzQ0MDAwODAyREI2NkREQzJERDAyQjlEMkYxRkVDMkRFQzk4Mzg1OAorOjEwQzQ1MDAwNUU4Mjg4MTMyNzNEQThDRThBN0M1QjEzRkE2MkQ5MEVEMAorOjEwQzQ2MDAwNjNEQzJFMkY1RjJDREJDMzZDM0JDOTM4NjFBNDQzOUY3OAorOjEwQzQ3MDAwNDI3MTJBQTUyQjE2MkRBMEY4RkJDQTc1QjdFMTNFOTM5MQorOjEwQzQ4MDAwRjMyRjM1QjMwMjNDQTczNTI5MkFDREEzMjk4Q0REMzEwMgorOjEwQzQ5MDAwMDlGNUNBRDA3MTQyRjRCOTdCODNFMzMwNjcwMkU5QjE5MAorOjEwQzRBMDAwQTRGNDJGRUJFREEyRUY5OEFGQzU3QkFEMkI5NEI1MzQ4MAorOjEwQzRCMDAwNEVBQTNDRUZGMjc1NDkzODAxMzhBQzE4MjdEODM0NDJGRgorOjEwQzRDMDAwOTQ3N0IwNkUzOTRGRTNCQTVCRjVBRURFOUNFRjM3QTVEQgorOjEwQzREMDAwQkE3RTM5MTRGMUZDQjY0QUY3N0YyRjdEREYzRjNBQjZCQQorOjEwQzRFMDAwMUQzRDJEMjhFN0FEQzE3ODU5OThGRkU2REU4Q0ZBOTlGRAorOjEwQzRGMDAwRDc5QkYzQjU1MjhDQzc4NTc5NjY2Q0Q0Qzc4QjY3NkVCMgorOjEwQzUwMDAwRDFFN0ZCRUNEMEU3QjM3NkVCRjMzOUY1RkFCQ0ZCODg2NworOjEwQzUxMDAwM0U3RkJGMTgxN0NGRTE3OERGMThDRkUxOThFMjM5REMxMgorOjEwQzUyMDAwNjVFM0U3NzBDQ0UzMzkxQzUzM0M4N0UzNzczQzg3NjNEMgorOjEwQzUzMDAwMUVDRkUxOThDNzczMzhFNjI1QkNGMTNDOEU3OTNDOEY1RAorOjEwQzU0MDAwNjNGOUZCQkQzOURGMkUxM0YxOTY4ODA3QTQ3N0Y2NEEwRAorOjEwQzU1MDAwOThFRTNFRDJDNUZERkM3RTA5RDAwMURGMzczM0FDQjQ4NgorOjEwQzU2MDAwNkYxRUMzMUE3NDFFRTE3NkE3MkU5M0VEMkU4QzFGNUVFQworOjEwQzU3MDAwMUJBN0VERUYxRDhGRjc1MDFBNTYyNTIxREVDQzhEMTQyOQorOjEwQzU4MDAwQzc1QUYxMkE4RjYzMkRDQjBCNzNBMEZEQTM3MUU1QzlBOAorOjEwQzU5MDAwNTUxODFFQUFDNTY5ODdCMEZFNDU0QkYzMzY4NDZGNzlERQorOjEwQzVBMDAwRDU2MUJBQUZERkI4Q0NGNUVFRjUxQzdGNjQ4NzYxQzUwNQorOjEwQzVCMDAwQjFBNDQ3MTVBMjlDOEJFRDE4OEZDNjc4NzJCNjU2MUY5MgorOjEwQzVDMDAwM0Y2RThDMjczN0M2OTExQkU5NDBFQTdGNEY1OTlBOTNGQgorOjEwQzVEMDAwOTBBRjdGRjFBQzdEMkRDRUZGOEIzMDcxMUY2NkJBREQ0MQorOjEwQzVFMDAwMTAwRkUwMjA3RUIyRjgwMTY1MzNDQUVCMkY3QTczM0Q1RAorOjEwQzVGMDAwQUFFNTE4RThFQkVEQzg1OTk5Q0VCRURDOUZGNEYyRDY1NworOjEwQzYwMDAwRkM1QUM1NDRGMUU5OUE4N0U0RDAxMjMxQTcxNEE1QjlDMAorOjEwQzYxMDAwNjkzNUYyQjkwNTI2OTI5Qjk3NDA1RjIzN0RGMDAzOTUxQgorOjEwQzYyMDAwRjQwNzdDNTcyQjc0M0RGOEFFNTYyODdERTFCQjVBRkFDRgorOjEwQzYzMDAwRkIxMjVENzRGNUYxNUQyREZEN0Q4OTNFRkFGOEZDMjk1NAorOjEwQzY0MDAwQ0IwRUUyQjk3RkYyREFGRUJBN0E3M0JDNDMwQzcwMTRGNworOjEwQzY1MDAwRjMxNkZBRUMxQzkwMUYxRUQ0MkY5NzZFNDg0MUZDMkU0NworOjEwQzY2MDAwNTlEMEQyQjQxQUYwQkI2NDRGOTgxQkNCOEJGMUZGODAyQQorOjEwQzY3MDAwMkYxNjQzOUY3OEVGQjI3OEI3QjhCRjVDQTU5N0MzQjNDNgorOjEwQzY4MDAwODUxQzJBMzYzMzlGMzMzNjQ4ODdDNTRFRTY4OTgxRjZBNgorOjEwQzY5MDAwMEJGQTM0RTRFMEZCNTkwQkRFN0M3RjkwMzMwRENGMTlBRAorOjEwQzZBMDAwMjMzQTIzM0Y0QUIxNzgyOEFFQjY2QzU3Q0Y5ODY1RDA2RAorOjEwQzZCMDAwRUYzNzNEQjREODNFODA5NzJGNkIwRkZGNjIyNkNBQzM3OQorOjEwQzZDMDAwNURGQ0ZDRjdDNURBOTdBMjI4QkU0Q0QwNUI4QUM1MTk4MQorOjEwQzZEMDAwOEU3OERGNTRDQkUzRUJEMDdFQTZDNjA2RTk2MjUzNkRCRAorOjEwQzZFMDAwNUM3ODBGNDc3MEJENDEzQUY4OUVGMDA0RjhFMTc2OUUwMQorOjEwQzZGMDAwRTI0M0U0MTc2OUE5MTNFQjFEQTFGODUwQ0Y5NkVCOTMyMQorOjEwQzcwMDAwRUY2RUIxMTVCQzlGM0I0NUZFNEI3MURFOTBFQjNDRDcwNQorOjEwQzcxMDAwRkI2MDhFMEJFRjc1NTRFRjRCNTE5MTlGOUI3NjZDQzM3MgorOjEwQzcyMDAwNzNDODNGNkM1QTc2OUY3ODhDMDdFREY5MDc3Qzg3QUQwQworOjEwQzczMDAwRTQ0M0JFOUUzRkFGMUYxNTc1MkRFQTlGQ0Y1QkRDRTM0MAorOjEwQzc0MDAwMjBCRkJBRjY2OTJCOUUyQjRBQ0M3RTJCQzU2NzNFQkIxOQorOjEwQzc1MDAwQzk4QUYxQ0EzNzZDREY0NERGRTc2RDJGQTQ3OENDRjlDMgorOjEwQzc2MDAwQUM5MkNFQTNBN0U0M0IwOTAyMUVDNTIzOTU4RDRFOTgzQgorOjEwQzc3MDAwRjc4MzdEMzg5RjJEMEVFN0ZFM0REMDhGNUVDNzc3NEE0OQorOjEwQzc4MDAwMkU2RDU3NzIzMUNFNjc4QTc3OTdCNTEwQkU4RkU5QzM4OQorOjEwQzc5MDAwRjk4QzcxOUZCNDFDOUY5QzFGNEZGMEUwRjc0MDNFNjRFMgorOjEwQzdBMDAwNzBCQTRGNkZCQjJGMjY1RjRFQTU3RDMxRTU3MjVGM0FBMQorOjEwQzdCMDAwQTc0RDBERjRFNkU3RTEyQ0MzNzlGOEI4Q0FFRDc5RjU5OQorOjEwQzdDMDAwN0MxRjE0NUIwMzlEMjZFMzNFMzk2MDIxM0RCN0RDQ0MyMgorOjEwQzdEMDAwREY3OTJBODc3RjVGMDdBOTc3QThBQUEzRDc4QUQxMTExMworOjEwQzdFMDAwM0E3QTlFQ0U2Mjc1Rjc2OTZFQzFBMDkyOTBGQzk0NzEwMAorOjEwQzdGMDAwRTlCQUZBRDNBNkY0MzVEMDdGNUVCMDlDRjhDODc1QkExMgorOjEwQzgwMDAwN0I3RkU1NEI3RDJFODVGNENDOTFGQUVGOENDNzE3MzJGOAorOjEwQzgxMDAwNzY5M0FFN0QzOTlCMTRBQzg3RjRCRDQ1RTFFNzlFREQ5MAorOjEwQzgyMDAwMzE5QkQxMEU1ODZDRTJFN0E3RTkxQUZGQkU3MDFGRkZEQgorOjEwQzgzMDAwQ0VBNjMzREQzRUVDOUVFRUZFMDM5NzhCMTZGMjFCNDgzMAorOjEwQzg0MDAwN0JGQjc0RkM3NzNCRjA2NzJDQkNGNTFFM0JERUUzNDdCQgorOjEwQzg1MDAwRkI4NEVFN0VCN0YwMTdFMkJDMTEwRkU1QzI5RTU0OUUzQQorOjEwQzg2MDAwQzlFRDQ5RTVCRTA2MkJCRTkzMDBGMDM3QzdDNTUyM0Q2MgorOjEwQzg3MDAwN0IxQ0M2NTVENjJBNjQ2RkM0NzQyOUM1NTlFQUUzQjQzMworOjEwQzg4MDAwQjAzRjhDN0Y1Qzc4NEMyREM0N0Q2MjJDMkZDNjc3OEE5QworOjEwQzg5MDAwMTBCRkFGRjJCOEQ0ODU2ODE3OEE2QUZCM0VEQTQyQjQ5QgorOjEwQzhBMDAwMTNBMTdEQ0JGMDFFREE4NzdENUNDMjZGRTc1RkQ1MDVGMworOjEwQzhCMDAwRTEzODRFQzlBNTdCOUIzQjBFNUEzMTNFNkZDQTk0OTgxNgorOjEwQzhDMDAwNUNEQzNGNDYzQTkzRkMxREY2MzVDNTE1QjYxQzNGNEM2MworOjEwQzhEMDAwNzRENjUyNkMyNjNBQkUxMjNDMTY3QUI4OURENTQ4N0Y2MworOjEwQzhFMDAwRjM1ODgzMTVFRkE3Q0NEQkFEQjhGMTVDOEFGNTEwMkVCOQorOjEwQzhGMDAwNUQ5MDJFMEQ3MDg5OEI2RDBCMEYwOUE3NTZCODE5Q0E2NAorOjEwQzkwMDAwRTczMzBFQUZGOUZCMTQzRkYyQzczNjcwMTJGMDMzQ0VBNworOjEwQzkxMDAwQkYyM0Y4Qzk3NUNERDNCNDMxQzgyN0U0RkFFNkUzM0FBQQorOjEwQzkyMDAwNzAxQzU4MDc4RTIzRkQxNjZDQjA3MUJGQTY5M0ZENkE2QworOjEwQzkzMDAwQTE5N0M3RDkxQUU5NjNEMjY1NkU5N0I5RTVCMjk5RDJDMgorOjEwQzk0MDAwMjlFM0Y0RkIxM0RCRTEzRTk5N0EzOTgxQ0FBRjk2N0U4NQorOjEwQzk1MDAwMTZDMjNDNTEyRTVDMkREREM4RjU0ODdFMUNEQzI3RkM0MAorOjEwQzk2MDAwNUVDMjk1REUzOTMyREEyNzlCRkE4OEZCMTAwM0Q5NDA4NAorOjEwQzk3MDAwNUQ3Q0IzRTBCN0M2RjZDNkY4NjZBOTFGMThFNTRFNjE0MAorOjEwQzk4MDAwQTQ4OUUyMkQ1QjFDNjlBNDc3NDhGRUFCMDlCOUEyQUQ2RQorOjEwQzk5MDAwRkM5NkVBNjk1MDhGQ0ZDNkEzOTM0MzlBQjAxMzJFOEVBQworOjEwQzlBMDAwNENBMzc3MjQ1Mjk2QzUyNTIwQkUwQUMzOUMxNEQ3NUY5QQorOjEwQzlCMDAwQjg0Q0E1MzhFQTQyQThFNzBBRDE1QjU2QUQ0ODRGNDFDQQorOjEwQzlDMDAwMzlGMkY5N0RCRDlFRjQ4MTNFRkZGOTNEOUQxMjA2QzMwQgorOjEwQzlEMDAwMzg1RkFDQjQ3NEIyQkI4MkY1M0U1Rjk5OUY4MkYxMURBMworOjEwQzlFMDAwNUZBQ0IzNERGN0I3MDNBRjg4QkVFMjNFRDNDRjNFMjI3NAorOjEwQzlGMDAwMzk3N0RFNzQzQzZBM0FCNDJGNUJCOTI3MEFBRjBGOTREQgorOjEwQ0EwMDAwQUVFNEYyRkRFMTFFNUE3OERGODEyOEU3Mzc2RDczMjIyQworOjEwQ0ExMDAwRkM5QzlCNzJEMDRFOUM4NDM2REZGOEEwNUU1MUIyMzJGMworOjEwQ0EyMDAwQkYzM0VBMUQ2NUZGMzhGQ0E0MTNFRjg1MkZCMzI0QTBBNAorOjEwQ0EzMDAwNUU3QUZBMDM5MDkzMEFDOTM5RDIyNzRFODU0MTE3RTRFQQorOjEwQ0E0MDAwODc4QkE0RjdDRjRFMjlDQzgzRkVBODczQTY4MzdGNTk4QQorOjEwQ0E1MDAwOERFN0M1RENCQThDODA4MkNFNTMyREE5MkZEQTU1NTdDRAorOjEwQ0E2MDAwM0U0REZBNENDOUZEQ0IzMkYwMUQ0MjZENTlDRkU4RjY3MAorOjEwQ0E3MDAwRUMyOTMyREQyNkU0MzlFQUY1OThBMjVFOEZGMTM1QTg3QgorOjEwQ0E4MDAwRDc2MzFFRjU3QTRDNTFBRkM3RUYxNTFCRjQ3QTYxOUE0NAorOjEwQ0E5MDAwRjA2RjQ5QkI3M0Y3OUFFNjVDRjRGQkY5NDZCMkNDNEFGNworOjEwQ0FBMDAwOTJDMzBFN0ExNzc4ODkxMkVFNDZGRUI0MDQ3NTI4Q0MyQworOjEwQ0FCMDAwN0YxNjQxNzYwN0Y2QzE4RDNBM0NDQjc3ODNFNUJCQzA0NAorOjEwQ0FDMDAwQzM5QTQxNTcwQkQ5MjdENzVGQjZCM0QwN0JCQTIzNTg0NworOjEwQ0FEMDAwOEMyRTNGQ0E5RUE0QUI5RkVGNENENTk1REY5MEQ4NUJDMAorOjEwQ0FFMDAwNTc3RUEzMkI1Nzk3MUY5Qjc5QURBRUZFNzhGNzA4NUQ1NQorOjEwQ0FGMDAwRkVFNkMxMzdFQUVBNEZGNDRDRDRFNTI3MTdDQ0QwRDU4RgorOjEwQ0IwMDAwOUZFQTJERDQ5NTRGOUJCRTQwNTczRTQzNUJBNENCREY5RAorOjEwQ0IxMDAwNTY3QzhGQUVGRUVEOTVDQjc0RTVGMjlERTQ3QTNDOEZBQQorOjEwQ0IyMDAwRDlGMEZEMTczQkE1RjJCREU0QkI1NTQ2RUZCMTBEMUQ5NQorOjEwQ0IzMDAwNjVFMjc2NDYxQjk3NDc0QkRFRUVFOTA4QTU4M0Q5N0Q3MworOjEwQ0I0MDAwQjkxRTc0MzBDQjMzMEJFOTU1QkU4NzI5REZCOTVDRDRFRAorOjEwQ0I1MDAwOTdFMzM1OTkwNTE0N0UxRTZFNDg0MjNBMzZENjMzOTZEMQorOjEwQ0I2MDAwMEY4RDM4NzRDOTA1QjhGQ0E0RUZEQjUzQ0RDMDJGODZGOAorOjEwQ0I3MDAwNUU3M0E4N0YzQUU0RDNCMkUyNkVBMUZDOTA0MzJGQTU4NgorOjEwQ0I4MDAwMzlGMTVDM0FFMzE2MzNGMEFCQTFGRDBFNURDMkYyREQ4NAorOjEwQ0I5MDAwNTk4OTNDM0Y5OTkxNkEzMjY4QzdCRUE5MTgyRjNCRjQ2NgorOjEwQ0JBMDAwRkFCNEI1NkU2RTQ3NjlGN0JFQkI0QzExMUU3ODRGMUNDOAorOjEwQ0JCMDAwRTE4MTY5MDBFODE4RDM0MzQwQzc5ODFFMDEzQTlFNjM5QgorOjEwQ0JDMDAwNjFFQzI4RDAzMUE2QzdFMDdDOEFERjdGMEJFNzUzNENBRAorOjEwQ0JEMDAwOEZDM0Y5MTREMzc3RTA1QzhBNjkwMzlDNEIzMUZENUQwOAorOjEwQ0JFMDAwRjU3NDRBM0ZBOEQ2QThEREVGQUI4QjI5RkRBOEJBOTIxMQorOjEwQ0JGMDAwQkU3RjUyNUQ0NUU5MUZBQjdERjRGRDgxQkU4QTkwRTNBNworOjEwQ0MwMDAwMDFERDdCQTMxREJEMkIyQUZEOUNEMkFGNTk1M0M5MUE1MAorOjEwQ0MxMDAwMjM5MDZGMzQ5QTYzQkVCMjA3RkQ5NTFEREIwOUNDRUNGRgorOjEwQ0MyMDAwQUIxMDdEMkQ1QkYxNkNFODRCRTM3Nzc1MTIxRjE3REZCRQorOjEwQ0MzMDAwNURBOURBMTM4OEU3MEY1MzI3RjdFQ0FGQTIxQ0FCN0M5MgorOjEwQ0M0MDAwMUQ0MzZEM0UzNEI1RkY3RUU0MjI0MTFGRUJCMzNDOUI5OAorOjEwQ0M1MDAwQjFERDMwM0JCRjlGM0NDQ0NFRUYxRjBGMzMzN0Q0MjAyQworOjEwQ0M2MDAwN0RENTdDQzc1QzE4RkY3MzMwOTJCRkZCNTE3MzlGRDk5MQorOjEwQ0M3MDAwOEY3NjUwRTUzMkRGRTdDMzNCMzFDQUQ3N0NENzQ4RjcyMAorOjEwQ0M4MDAwOTU4NzM5REQ4OTI4QUY2NEJFRDVFRjhGN0Y0MkUyN0M3RQorOjEwQ0M5MDAwQTQxRjVFQzZGNzhDQkVEQzMwMEFGNTg1RTEwRUFCMEIzNworOjEwQ0NBMDAwRjk0ODY4REMwMEZBREIwRjQ2N0UyNUU3QzM3MDNDRTlGMworOjEwQ0NCMDAwREZERkYyMUQwQjk4NzI4MjdFRkM2MUY2ODY1NEI0MUI5NgorOjEwQ0NDMDAwMENCRkQzRUUwRThENUI5MkZFN0FFNTcyQTM4QTc2NTU4OQorOjEwQ0NEMDAwMTk5RjI0Qzc5MUYzOEQzNDQzN0Y3OUMxRjhBMzYxQ0VBNgorOjEwQ0NFMDAwQkE1Q0Y0NzdENDk0M0JBOEJGQ0VGMEREOUE0N0Y1M0MwQworOjEwQ0NGMDAwMkFCNUFCQ0I0NUJCRENGMDMyMDdDNUMxQ0EzODgxQ0UwMworOjEwQ0QwMDAwNjJERDUwOEZENjM5RkFCMjQ2NzExMkMzNDU5QzA0RjZFMworOjEwQ0QxMDAwNjNFN0U1M0VFQzY3NzhBNzQwMTJDNjgxMERBRkU0RUYwQworOjEwQ0QyMDAwOTAzREExRjBGN0U4NjVEQzAyRDY4RjA4RDlCNzM4NEZGRgorOjEwQ0QzMDAwRUNCN0M3REY2MEJFQTg0Nzc5M0MwNERGQzlGMjVDRTcwNworOjEwQ0Q0MDAwMTI3OUU5NzdCNDhGMjRGQkQ2MjhDMTZCMUU0RUQ1QkU2RAorOjEwQ0Q1MDAwNDAzQUYyREE5QzlGNDVEMEZFNEVFRjg2NzZEMzg5NDI2OAorOjEwQ0Q2MDAwQUZGRjI3RjQ3MjBBREJGREY3RTlDNUMzRjFERDk1OTE0QQorOjEwQ0Q3MDAwQkRDRDQ4MzcxMjJGMTJDRjFERDE5MUM0N0I0ODlDMTlDRAorOjEwQ0Q4MDAwRTFCOTM1NkU0Q0Y0NjNBNEFGOEVFODRBRDJEMzMwM0JBMAorOjEwQ0Q5MDAwQzczQkUyMTVFM0Q0MjQxRDI5OTdGOUJCNkVDM0NCRUM0NgorOjEwQ0RBMDAwMjRFRjI0MUQxOUU5QTAyRDFENzFCQUFDQjlDQjRFRkQ5RAorOjEwQ0RCMDAwQjVBNUEzMjBGRTExMUVGRjNBMUQzNUFBRThCRkJBNUEzOQorOjEwQ0RDMDAwRkFCOUEzOTk4RDg5ODZBMjY5NjlEQTIyQzQ2RkUxNjVFRgorOjEwQ0REMDAwRDc1MUNDQ0Y2NjIzQzYyMDQ5Qzk3MjBEQ0IwN0I2MkREQgorOjEwQ0RFMDAwRDdCRTY5QjY0NDg3RDBEOTMwNDE2N0FCM0JBODJGRUI5QgorOjEwQ0RGMDAwQzk3NzJGNjRGRkNGNzQzMEZFNUI0MjZGNzgyQjRDQzYyRgorOjEwQ0UwMDAwQTk3ODFDQjk4MzgyNzFBMzRCRjIzOTdEMTVBNEFBQTQxOQorOjEwQ0UxMDAwNzc4Q0NBRTJFRjlGMzMwN0Q3QjM1REYwMTdGOUYxNEQ3NgorOjEwQ0UyMDAwNEMzQjEyOUQ4QUVGOTQ3QUU5N0REMjMxOUQwQ0VGOTNCMQorOjEwQ0UzMDAwMEFGREJDQzBFMEU3QkYyOUVCMDZEMkNGNkZCQUMyM0IwOAorOjEwQ0U0MDAwRDdFM0IzODQ3RTlEQ0E1MkFGRjIxREQyMjk1OTY0RDc2RAorOjEwQ0U1MDAwRkVCMUVGOTBGMkY3NkI0NzhCRkQ5RTJDRTgyOUREQTUyNAorOjEwQ0U2MDAwQjJBMUIxRjg5RUJCNjY0NkUxNzIwNERGQUZDREMxNzdENworOjEwQ0U3MDAwNUU3RDk0QkY5MUY5MjkxRENCMDJBNDQ3OEMwNzQxODRBNAorOjEwQ0U4MDAwRjk5QjE5QTM3QkZCODcyMzI2Q0NDNDNCODdBM0ZBOEY4RQorOjEwQ0U5MDAwRUE4MURGNDNERUQ5NUI5MDE1NEZFRkVDRkRDOTE5RjI1MworOjEwQ0VBMDAwQ0VERUExRDEyRUJBQkY3QUM4OUU0RTdBMjhFRTU3NEI1RAorOjEwQ0VCMDAwODhCREY0NEQ5MENGM0Q2MDdEODc0MTdFNjNGQTNBQzhDRQorOjEwQ0VDMDAwRUYxRTIwNDdERjAwRjk4REY5OUIzMjk3MzE2QzM3QzY5MgorOjEwQ0VEMDAwQTU4RjdCOTJFREM3M0E0N0MxNDFBRDYzRjg4RENENzlGRgorOjEwQ0VFMDAwQTUyQkMyRjdBRDk4NUVBMzkxMkVERThBQjk2NjM0QUU0QgorOjEwQ0VGMDAwRjdBRDk4Q0UyNjlFREFBQzk0NjZCRkRDQTMzRDNENTlEMworOjEwQ0YwMDAwRUU4N0UwNzg2MzY4M0MyMzdDMjUzQzhENzA5NEYwRkRDRgorOjEwQ0YxMDAwMTdFMEY5NjA3QkYwNUM4NEU3MDhCNERGREFERjhGNEE2MgorOjEwQ0YyMDAwNEM0M0ZGMjZFN0IzRTUxMTI5RTIzREQyQjc3M0Q0MzQ3MQorOjEwQ0YzMDAwOENGNzFENDJGMzFDNUU3NTJEMzNBM0JGRERDRUUxNzQ2QgorOjEwQ0Y0MDAwQjI5QUY5MTBCRUE3NzEwOTY4RjAzNkQ4Rjc5ODc5QTQ5QgorOjEwQ0Y1MDAwMjkzNDBFRkE2NTlCQjYxNUU5RUVFNDQ2OTVFRUVCOUY5MworOjEwQ0Y2MDAwN0YzMThDRUM3NkE3RkNEQzJFQjlEOEE0M0Q4N0U1NjUzMworOjEwQ0Y3MDAwQUE2QkFEMUJGNUNEQjc1NEZFOEVFOEY3ODc1MzI2NDU1NworOjEwQ0Y4MDAwNUUwNUJENkVFMUVGMUM5NEQ5QzdCNDhCNEY3OUJFQUM4MgorOjEwQ0Y5MDAwNENGMzEwQkY2MDg2REZBM0U4NkFFM0VGNDFDODc3Mjk0RQorOjEwQ0ZBMDAwM0JEMkI3RTRFRkI4NzRCNTcxN0UyREYxQkJEMTJBRjQ1MgorOjEwQ0ZCMDAwMDBFODY3MTBGMEQ5RTQ1Rjg2RDM3OUVCQjEwNENGMjFBNAorOjEwQ0ZDMDAwNUMxRjlDNjNFOEZEQTk5NkFFOTEyNDlGMEU4OUI4QjhCQQorOjEwQ0ZEMDAwRTE4MUJFRjRERTVBODFGOEREODEzN0M0N0JFRTg3NDRGRgorOjEwQ0ZFMDAwQkNEQzkxMENFRDZENkNGRjg2RUI1MDU3QjQzRjVDQ0YxMQorOjEwQ0ZGMDAwQjgxRkU4NDYwNzdGM0ZGRjZBQ0ZFNzFGNjY4OUY4QTFBMQorOjEwRDAwMDAwMUM5NjczNTVCRjkzMTBBRkQyN0Q4QUUxMkM4M0ZDRjA0MAorOjEwRDAxMDAwQTM3MEJFQzhFN0RFOUM2RDQ2MzkxOUYyM0IwOUI0QUU3OQorOjEwRDAyMDAwRkY2QkJGOTNDMDU4QjM4QUVCNEE3NjJBRUNCMUQ0QUJGRQorOjEwRDAzMDAwRkZERDA0NTU5Q0FCRTRFRjI3MTRGMEEyMzZCRjlCRjA1NAorOjEwRDA0MDAwNzg1NDAxOEZDQjc3Q0M2QkY3NzcxMzkyQzVCQkQ2Q0NENgorOjEwRDA1MDAwQzVFNTg2RkNERDg0RkM0NEJEMUMxOUU1MUM3MUM0NDk5MgorOjEwRDA2MDAwQTlERUNFOTM3Qzg1RjhCMUY4NkMyMTNGQUUxNkZGRTVDMgorOjEwRDA3MDAwOENGMERGMUE2N0RBODlDNzNGMEREN0ZBRkMxMkVERjM5RgorOjEwRDA4MDAwQTMzQTU5REM3RTU3NUIzQUY4NzdGQjVEOTQ4RUYwNjRFNworOjEwRDA5MDAwRkNCRDE0MjM5RThDQkY5RjkyQUM5Njk5RTkxRDQ4ODFEQworOjEwRDBBMDAwQTdFOUYwMTdGMTc0QkRGODdEOEJEMUY4RkIxNkVDN0Y4MgorOjEwRDBCMDAwMEU2RkUzMEM3OEZCOTZBRDFEODhFRjk2NUUyQ0U0N0MzQQorOjEwRDBDMDAwQkQyM0I5MUY5RUVBOTk5NDBERkM2Mzk2QjAxRjQ5RkJERQorOjEwRDBEMDAwODg4Q0NCMzVGRTdFOTJCNDAzQzg3ODVEREY0ODhFNkZCNgorOjEwRDBFMDAwREY4OTA4RjI1RkREQUQzNjQ2QTI5QzM5NjFFMkJGOTc2OQorOjEwRDBGMDAwOTQxMUFGNjlEOEZGMUQ1OTk1MEFDMjIzOTE3OTc3Q0Q1NAorOjEwRDEwMDAwODNGOUNGRkE4RDJEMDVGM0IzQkFGM0Y3MjI1OTE2RkY0MQorOjEwRDExMDAwQkQyMDM5QkY1OUM5M0M5RUFCMzg1QkYwNkYzNzhGREZGQworOjEwRDEyMDAwMkFDREU2NzZCMjQ4Qjc5M0UyQ0MwQkIzOTg4ODlGNjVEOAorOjEwRDEzMDAwMjlCM0IyOTEzRThGODdGNTQyRkE1QkNGRUQ4MThERjgyRQorOjEwRDE0MDAwNUU2NUE3RTA3Qjk1QThBN0EzNUVEQzRERThBNTM1MUYyQgorOjEwRDE1MDAwREJFRDlDMEU5OTRFRkVGN0Y2REI3NTcxQ0U3REI3M0I4RAorOjEwRDE2MDAwNzVGOUVDQkE0NDVERkQ3RUZCNUNCQUYyREM0MEE2QUUxQworOjEwRDE3MDAwQkNGRjMxQjcyRTNGQjA2MUIwQUVGRTM1MUY3OTc0RjlGOAorOjEwRDE4MDAwNkIxQjBCNzRGNTg3OUNGMkVBRjJDOUFDRjk1MTg0RUY4MgorOjEwRDE5MDAwRTZFQzM0QzI1Qjc3NDVEODQ5NUMxQzFGQjNFRTRFQTA2OQorOjEwRDFBMDAwRkI0QUYyRkMyMUUzREUzNTQxQ0ZDNjczNEQ3NzJCRDcyNgorOjEwRDFCMDAwRUI2QjkyMTgzRkI3REFDNUY5OTRFOUNGMzc5QTg4NUJFMQorOjEwRDFDMDAwOTc3QTNERjNFOUUzRDY2NUJDN0FFQjM5NDg5QzczRTQ4MgorOjEwRDFEMDAwNzkyMjI0NUVERDgzRjM5N0YxRUFBRDc4MTdFRjg3MUFBMQorOjEwRDFFMDAwRTlGNTg1NkNFMTU3MzNBQ0EzQkI5NURGQUZBQkI5QzdBRAorOjEwRDFGMDAwNEFGNzg0RTRGQzhDRjMzQTJFRTI5OEI3REFEQjdGMEYyRgorOjEwRDIwMDAwNkE3RjM2QjdBQjQ0RjZGMEVFNDE3QTdEMTJEODE1QzE4RAorOjEwRDIxMDAwQjNDRDc4RUU0NkZDRkQ4MTlBN0JBREVFRTVBRTJCOEY2QgorOjEwRDIyMDAwMzdBQjFGNUZDRjRDN0MzNzM3OEJERTVGQTU3QjgxNzJCRQorOjEwRDIzMDAwRENCNzA1N0RFRkU5QTdCNEJCQkU1OUQxM0MzRThFNDVCNgorOjEwRDI0MDAwNUJFOTVFNEJDN0UzNzFCODI2NUFEOTBBN0FCNzRBREM2NAorOjEwRDI1MDAwRjNCODdENkRERDAzNTgzNEQzNUE2QkUxMEYwRkY4MkQxMQorOjEwRDI2MDAwNjg0NzFCMzcxMkY0QzQ1Q0MwQzMzMzRCMUU3MjgwNUUyOAorOjEwRDI3MDAwRjQ2NDk1OTlFQzYyMUYzQzdGRUUxNkQwMzA1QkVGRURDNQorOjEwRDI4MDAwNzQ4NzczMUFEMkM5MzhDNDNGRjQ3QjUzM0YxRTlGRkU4NAorOjEwRDI5MDAwNkQzNjVGNUZCRUZBN0RFQjdEMEI5QjhFRkYzM0UyRkY0OQorOjEwRDJBMDAwRUREMDFERDFBMzVDQzdGRkQ2RkQwQjQ5QkY0NjM4QzlFMQorOjEwRDJCMDAwNzMzOTEzNzJBRDg3OTg5Nzg0OUZEQzE3MTI3RUYyRkU0NAorOjEwRDJDMDAwOEI2QjkxQzVCQkQ5NDFGNzY4MEEzMDJFNEZFMkVGRjY2MAorOjEwRDJEMDAwN0U5QzJFN0JFNTcwNzg2MDNERTQ0NzFERDVDQjU3QjMyRgorOjEwRDJFMDAwQTJEMTVGRDBDMjVDRDFDRTJCRDhDREZGOTdFRUE1MTBENgorOjEwRDJGMDAwRkMzQkJBNEZENzExOUY2OEMzMUYzQUI4NUZENzExN0Q2NworOjEwRDMwMDAwRDI5RkFCQjg2NzE3QzIyNzc4QkM5NEMwODdCRjg3ODkwNAorOjEwRDMxMDAwRTIxMjU2NDdFQUY3RjFCNDFDMkUxN0ZFMkVFNTg1MEZGMAorOjEwRDMyMDAwQ0VFNzdBM0VDMUQwRkY1MUIzNTIxNTdDNjI1RUVCRUY3RgorOjEwRDMzMDAwOERFMEY3QjkyQjJEQTQ3NzMzRTY3RDE4RTMzNEZFQkNERQorOjEwRDM0MDAwREU0MkVGM0MwRUY3MzBEMjZGOEEzNjJBRkU0RDRBRjBBRAorOjEwRDM1MDAwNzdCRTBBN0Q4Njc3NUFENEVGNDkzRkZDNzZBREUyQzRBQQorOjEwRDM2MDAwREY4Qjk4QkQ0NjVGM0VERkMxN0ZBNzY0QUVGMUJEMUE3QgorOjEwRDM3MDAwRTk4RkJCQzJCOUJFMjA0N0U4RTU2RUU2MjZCRDRDQzRDNgorOjEwRDM4MDAwNTExNDhCM0E0NkJEQUNDNUNGRkQ4RDc4MkU1N0I5MUREMworOjEwRDM5MDAwOEJFMkVGQTREQzc3QTFCRjJCRTQxRDE2ODA2Qjc4MjYwRgorOjEwRDNBMDAwQ0FGMTE1RTY3NkUzMjI1QkUxREE0MURDQzczOTg3ODgwQQorOjEwRDNCMDAwRkI3MEYwMzg5Nzk2REQ2MURDM0YyQ0ZENzBBMkZFMzlFMgorOjEwRDNDMDAwREYyNTJBQzdGQUQ4REJGOTVDMUVCRjIyRkQ2RjQ2RkZCNgorOjEwRDNEMDAwNUU4QkMzNDRGRUE5OTZERDkxMTRFNzgwN0VBRjY4QTAwMgorOjEwRDNFMDAwODczM0E2NUQwOTgzNTM4M0YzRDMxQTU1OURERkM4OTgwRAorOjEwRDNGMDAwNkFDQkY2RDA3OUYyRTExRURBRTIxQzhDNkYzN0JCRUQxNgorOjEwRDQwMDAwNkVDOERGRTczODQ0RUY3ODhEMTM3NjMwRTM3QzVCN0ZCRQorOjEwRDQxMDAwRjc2RjI4N0Y1N0E3QzVDN0Y1REQ5NjAyRkVERTA5RjAzNgorOjEwRDQyMDAwNDc4NkZCNDlDNjczNEM2NEEwREQ0MTVBMThCODk2RTY5RQorOjEwRDQzMDAwNzNCNUZFQUZDOTk3NzNCOUZGRjdGMjEwNkFBRkFEQjkxNAorOjEwRDQ0MDAwOTZGMkRENTczQ0IwMDhFRjE5NERBRDk5NkZDMTUwODA5MQorOjEwRDQ1MDAwQzY0Nzk3RTY4NzQzRDNDNjZFRkVFNUUxODhCNzExNEExMworOjEwRDQ2MDAwQkJGRThCMDc3M0I4NUM2OTM0REM1QjkwQTlEQThGRUY4NQorOjEwRDQ3MDAwMUI1NzNGQzlDRjQ1M0NENzMyODVGNkMzNjI4NUM5RjhGMworOjEwRDQ4MDAwMkVFMkU3MzI3RkE5NTZFNEYzNzk3RUM5NEE5RTZGMTRGMworOjEwRDQ5MDAwQkZBQkIwNEREODVCNzBERDk4RTJCQUQxMkVCMDQzRDhBNworOjEwRDRBMDAwNjM3MEREOThFMkJBRjEzQkYyMkZDQzIzRkZDMjNDRjI2RAorOjEwRDRCMDAwMkZDQzIzRkZDMjE0RjkxNzdFMkY2MkRFOTQ1Qzk1RkJGQworOjEwRDRDMDAwRUQ0Njg3RUMwRkY0REI4RDBFRDE4RkQwNkYxNzlBNDdBNgorOjEwRDREMDAwQkY1RDY4N0RGNERCODU5NkEzREYyRUI0MUNGRDc2QTFDRAorOjEwRDRFMDAwNzlGNERCODVENjQ3QkY1RDY4OUUwREJFMzE5ODQ3N0VENworOjEwRDRGMDAwRTc5OUE4Q0I0RjA2RkQ3Rjc0QzhGRTQ2QkY1RDY4RkY2NQorOjEwRDUwMDAwRThCN0QzRjVBNzJERDJCNUJGOEQ1NUU5REFBM0RGMkU0NQorOjEwRDUxMDAwQjRGRTFENTU4QUNFQUY3Nzg3Nzg4Nzc2RjY4NjM4QTIxNworOjEwRDUyMDAwMUY1RkFBQjcwMUU5RkU0RjExRkZCOENCODJFNzQ1QjVFRgorOjEwRDUzMDAwN0UwMTNGQjc4NUJCMzk5RTZCMEIzOERFNERGQzlFODU2NworOjEwRDU0MDAwRDIzQzgzRjBCQ0Q0Q0FGM0Y5M0NDRURCNDgzRkU4MTdBOQorOjEwRDU1MDAwMUI2REUxN0UzMTRDRDEyRjg2MjlGQUM1MzA0NUJGRDhFRAorOjEwRDU2MDAwRTg5RURDMkY4NjI5RkFDNUYwM0JGQUM1MzA0NUJGMTg4NgorOjEwRDU3MDAwQTZFODE3QzMxNEZENjI5OEEyNUYwQzUzRjQ4QjYxM0JCRAorOjEwRDU4MDAwRjQ4QjYxOEE3RTMxRkM4RTdFMzE0Q0QxMkY4NkRGNEY0OQorOjEwRDU5MDAwQTA3RkNFMTI5QzE3RUFGMzNENzRFNzRBQTA0M0REQjlBMQorOjEwRDVBMDAwRDJBOUNCQTMzRTFGNUExRkY1RjlEMDcyRDRFNzQzQ0JDMworOjEwRDVCMDAwNTE5RjBGQ0RBMzNFMUY1QTFGRjVGOUQwN0M3NDhFOEI1RgorOjEwRDVDMDAwRjYyMUVBRjVBMUVENTBBRjBGQ0Q2N0Q3RkE1RTQ3REI0NAorOjEwRDVEMDAwRDlGODhEMTc4RTYwREExOEE5M0NBOTAwQ0I4ODc5NjEzQgorOjEwRDVFMDAwQzUzNEY0NUYzNjg2MjkyOTMxQzAzOTJEQ0FGREQzNDZBQQorOjEwRDVGMDAwMjcwMTk5ODgzOENBMUNENjZDQTJERkVCQzNDMzIzQzZBNworOjEwRDYwMDAwMzkwNDE4QzVBRDY2N0Y5NzQ0RTU2OUYyRkUxREZFMDEzOQorOjEwRDYxMDAwQkNFN0VFNjZGNDdCMzREMkJGMkVEQkJCOTk1M0M1NTQxNgorOjEwRDYyMDAwRDYwRkU2REJBRjY3MUM1RkQ2MjNGRTE5MzIwRkJDNjk0RAorOjEwRDYzMDAwOERGMTNFQjk0QjFENzkxODM3QkI0REZDNUVFRUI2RTU1QQorOjEwRDY0MDAwM0NERURBNDg1N0Y5NDI1RkRBNjZEQTc1MDhFRkQzMzQyMAorOjEwRDY1MDAwMTcyQTc0RUYzQUMzQ0M4RTU5RjIxMDRFOTU3OUE4NDcyOQorOjEwRDY2MDAwNjRGNzhCMTFFQkFBQkMwRTdGNzc0Q0NFNUJEQTQxODE1RAorOjEwRDY3MDAwNEZEMEZEQzRBMUNEMERBM0EyQTExRkNEMzc4MjdFMUYyNworOjEwRDY4MDAwNjc5Qzk1RUIwRkQ4MEVDRjk1N0Q3RDhBNjc3MzA4N0REQgorOjEwRDY5MDAwNUYyM0Y0NzFDREM3Qzc3RkU2QTkwOUJDNUQzODZGRjc3QQorOjEwRDZBMDAwQ0M1MzUxMDRDNzA5MkIxNDhBM0IxQkJBODM3OUYwMUU1MworOjEwRDZCMDAwQjQ0N0NDQkJFRjhFODA4QUUzMTVBRUUwRTNDOTdFMEJBNgorOjEwRDZDMDAwMzdBNkQwQkREMDQyRDYzODFBRUZCNUIwMDEwQTQzQkU1NgorOjEwRDZEMDAwMkRFMTA2RUIzQjgyRUJDQjgwQUQ4Mjc2RUMxRjdCOUY4RQorOjEwRDZFMDAwNkFEODgwOTg3QzhDNDc2NEY1OENERTE1MUQzRkUwM0Q0MAorOjEwRDZGMDAwREQ3QTA5RUQ4M0E4NUY5MjZCQkQ3QzBBQkRFMzNDQzE3NgorOjEwRDcwMDAwQjc2QzM5ODI2RkJDNkZEMUVCRjE1ODdGMEI3M0E3QkEzRQorOjEwRDcxMDAwNDgxNEQxRkQ2MzM5OUYzRTlFNUQyNjEwOEIyQzhCMzVCRQorOjEwRDcyMDAwOThDMjE0QzQzNzNCMUMxNzQyM0ZCMEYzQTcyMEJFNzMwNgorOjEwRDczMDAwREQxNjdBNTc3OUEyRDk2OUExNzczQTNBODhEN0I5RTQ0MAorOjEwRDc0MDAwOTBGMTNBMDY3REMxMTA5NzUzQjNGNEEzMTRCNDM3MkY2OAorOjEwRDc1MDAwOEUzNDkxREQ2NEYxOUUwOEQyMUJCNDBEMEFGMTM1QTkxNworOjEwRDc2MDAwMDcxNThBNzhCRjRCMkI1RThGOUY4NjcwREY2NUExRkUwMQorOjEwRDc3MDAwNjRCQzRFNzlCQTNGQzU4NEY3MTNCQTZDQ0E4OTU1NDk1RgorOjEwRDc4MDAwMEY1OEQyMEZGNTAwREY0QkI3MENDNjdBMkJGOUJCQTJBRQorOjEwRDc5MDAwOTc1NkVDRTFCRjRCMkFGQzNCRjI3NzRFRTc4OEY4QUY5NworOjEwRDdBMDAwQzI2QzZGMzRDNkMzQzhERjUzOTNGNzY0RTRFRjk4NEE4MgorOjEwRDdCMDAwM0I0RkUxREJGRDhGMjI3RTBCOUYxMEVGN0VBRjI5QTQ1NAorOjEwRDdDMDAwRkJFRkM2QjhBQjUyQTFGRjJENTg2MUExQjhBRDA1MDY1RAorOjEwRDdEMDAwRkRCMDU0QzQ2NTVERTlGNzRERDdGNjMzRTg4N0YyNzdCRAorOjEwRDdFMDAwNzI0NDFEQTY3NkZEM0REQTg1RTVCRENGOTkxNkNFMDdCQworOjEwRDdGMDAwNjZFRTYyRTRBRjlBQjk2Qzk0MDlERkFCNjY3QjM4RkRFNAorOjEwRDgwMDAwQ0M1Q0M2RjU5Qzk5QUY3OEU4RkVBNkQ0MUJERjE1RkE3MAorOjEwRDgxMDAwQ0NBNENCQzkwNEZGRjc4NUZFMzIxNUUzNTUwMUNFRTM1NgorOjEwRDgyMDAwMUFDMzQ0MUM1QjEyQTVEMzJFRjNGOEQ1NDkwRUNFMEZCNAorOjEwRDgzMDAwMUFGN0YzNzczNzVBN0MzNkFFNTcxRDYxRkNERDM4MDM5MworOjEwRDg0MDAwN0Q0RTM0RkI0RDc4QTFEMTNEMTRFODEzRjJFMzUxMUYxNgorOjEwRDg1MDAwODJGRUE2QTM3RTE0ODdGNDlFOUE0RkYxOTAwNTBBRERGRQorOjEwRDg2MDAwMjMzMkQyRkIzODRCRTVFQjE4NkYzQjZFMkI3M0ZCNTgyMgorOjEwRDg3MDAwMjhCRDAzMUQ2MzdGM0U4NURFNjNEMEM0Mzk1N0QyQjExNgorOjEwRDg4MDAwOTFFRTY3NDUwOEZCOTQ4M0RCOUY1QUVEMTRBOEFCRDI1OQorOjEwRDg5MDAwMjNFQTdGOUE4NkYxQzRCM0QwNjZEODg1OTZFMUMxQjhGMQorOjEwRDhBMDAwQkRDODJDNUU3RUI0REY5RkE2QURDMEJCMUYxREQ4MkRBQQorOjEwRDhCMDAwRDQ5RjU4MDkxRTlBN0M3N0EyMDMzQjAyREEwRjkwNUYyRgorOjEwRDhDMDAwREU3RTY3QUVCNTI4ODQ1RjNFOUMzQkYyMkJGN0MwMjAxRQorOjEwRDhEMDAwQkU4QjBDRjcyOTE3REZENzkzN0VGRkE4MjNCRDc4MzZDMAorOjEwRDhFMDAwQzAxNUY3QzdBQ0U4QzZCQjgwNTJEOTlGRkIzMUNGRTg2MworOjEwRDhGMDAwQzFGOEZCOTI3MjdEMkM4MEYxOThCNzhBN0M2QzlERUQwQgorOjEwRDkwMDAwQTMzNTBFODIwQkU1OUJGQTlEOUY4NjcxMzRFNUY2QzYyMgorOjEwRDkxMDAwMzE0ODc2MTU1OTk1MDUxODlGMURFNDUzOUEyNzM5MTVGNgorOjEwRDkyMDAwRjk1NDZFMDA3RjhGRUZCODk0NDMwNkZCNDRBQzlCRDc0RAorOjEwRDkzMDAwMzdEQTI5NjY2NzcxRkVDREM0N0JFMzlGREZGN0YyNEVDRAorOjEwRDk0MDAwOTQ1QjcyRkU5RjVCRjRGNzZBNjUxQUVFMTZGMkEzRkExNworOjEwRDk1MDAwN0ZFNjVFODlGMTNFQzlBRjkyQjVCRkY3ODNGRTFGMzYwMQorOjEwRDk2MDAwRjFGNzEzQkFBOEI1NENEODhCQzhBRjJDRjkwNjEzRUY1MgorOjEwRDk3MDAwOEUwNEYxRUVBMUY3OERGRjBCMjkwRTcwRDUwMDgwMDAwQgorOjEwRDk4MDAwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkVEN0Q3MAorOjEwRDk5MDAwMEI3ODU0RDVCNUYwM0U3M0U2OTU2NDEyMjYyMTIxMEYxRAorOjEwRDlBMDAwNDg5ODA0MDJBOTQ2OThCQzIwQkMwRjkxNDdCMDY4MDc2QworOjEwRDlCMDAwOTIyODY4MTIyNjg0NDdCMDY4MjM2QTBEMkQyRDEzOTI5MQorOjEwRDlDMDAwNjA0MEYwMDY4RDgyRDRDNzgwQ0E0NUE1MUE5NTVCNDE5OAorOjEwRDlEMDAwNjkzQjQ4QjU2QTUxMzE0OEY1RDZERTMwM0M3REI1MzVGNgorOjEwRDlFMDAwRTJGNUFBRkZFNzZERUY1QTZCRUY5RDk5NzMzMjEzRjBFMgorOjEwRDlGMDAwRDFGRkVGN0ZCRjhFOUZERjY2OUZCRENGN0VBQ0JEREVDOAorOjEwREEwMDAwNkJFRDkzOTYwRDhBNzM1RDM2NjM1RTg3RjU4NDkyMDBBNQorOjEwREExMDAwNjVCQjEyQjA4RDYxOENGOTY2NkFDMTNDNDZCRkJGRTUzQgorOjEwREEyMDAwMzA3Njc4QjQ4QkIxMTRBOEU0RjVERUYzNzAzMjYzQjVDOAorOjEwREEzMDAwNkJBRDZDMjMzQzdBNjAxNEQzMThENDFGRjg5MUQ1RUZFQQorOjEwREE0MDAwODM3MUFBQUQ0NzVFQjA0Mzk5RTRFNkZEREY2OUJBQzNDRQorOjEwREE1MDAwQzI0QzM4NEEyMEQ3MDVGREFFNkU4QzcxNkY4NEY2QkI4MAorOjEwREE2MDAwMEIzQzg5NkU2ODhGQ0I3NzVCQkQwRUM2Q0VCQTE5RjVCRAorOjEwREE3MDAwOUY5MUUyNDlDNkU3RDc2RDNBNzhGRjVCRjBFODA3MDc2OAorOjEwREE4MDAwQjJBRERFN0NDNkVBRjYxNUFDNEY3M0UxN0JERTc0Nzc4RgorOjEwREE5MDAwMDlENDFENEVBQjA3REVCQkJFMzVEMUVBODJCMjM2OTU0NgorOjEwREFBMDAwMzU3NkU1RTMzQ0JENTlGM0UzNjFDREY4OUJDNjU4ODE3QgorOjEwREFCMDAwNUI2MTBDRkE3RjUwQzBBOEZDQzhDMjE2RjA3RTFEOTZCMAorOjEwREFDMDAwNzlCQTdFMjY2QTY3MUQ1QjM1RkIxMDgwMDNERjNBQ0I4RgorOjEwREFEMDAwMzQzMzlGQTk5MEIxRTE1NjJGRDM2MEZEMkRFOUNDOEQ1MQorOjEwREFFMDAwRjAxQTBBQ0Y2RDg1QkMzRDI2MjkwNDNGMjNEQ0FDOEM5RgorOjEwREFGMDAwNjkyNjY4MUYwQUE1QjUzMDA0Qzc0QzY4NTdFMUI5MjVFNworOjEwREIwMDAwRUZFNDQyOTY4MzcwNjM4QjcwM0Y3MjNEQjI1QzJDRDYxQgorOjEwREIxMDAwQ0YxNkQ4NEQwQ0Q2QjVENDBFRkY4NjIxNjZBQUY5QjMyMAorOjEwREIyMDAwNTI4QjE5NUJCNTQ1NzFEQUUwRDExMjg3RUJBQTA5NTAyNworOjEwREIzMDAwNUZGMjkyODVBRDgzRkFEQzI0OTczNTFERUFCRDcwQkU5NQorOjEwREI0MDAwM0JBMUJFRjhBNjAyQUIwQkY2NUQ4RDY3MDFFQjU4QjJBOAorOjEwREI1MDAwNkQwMjczMEQ4NkQyMEY2NTUxRkY3OTY1NzlDRDk2NDNCRAorOjEwREI2MDAwOTlGQjVENzg3QzlBRDUwM0YwNUFFMkQ0QUM0OUY5QTFDRgorOjEwREI3MDAwRjZGQTBFNDVGMzNCRkFEN0U3QkI1NURBNjczNTFDMjlCMQorOjEwREI4MDAwQzJBRkU2QTY2Q0VCNjIwN0Q2NUZCMkFDQ0FDNzdEQjk3RQorOjEwREI5MDAwNjg1RkYyM0RFODE3QzA3RTczNzNEODhCMENENzBERkIxRQorOjEwREJBMDAwREE5OUNERTcyQjBDMUI3RjMxOEUxRjM2M0ZGNDVGRTRGMworOjEwREJCMDAwQzE3REI5RTM2OUJFM0EyN0VDM0IxQjRCMjdBRDEzRTBBRgorOjEwREJDMDAwNDA3MEVBREQwQ0UzQjk2ODFFM0E4RkZBODBERkUyQzZFNgorOjEwREJEMDAwRjU5ODYxNUVBODVGRURGNDVCNzA5RUM1QUQwNTU2MDZENQorOjEwREJFMDAwQTU3NzEzOUZDN0RCOUU2OEJEMDRFQTc1NjZBNzM1MTM0QQorOjEwREJGMDAwRTc4OTA1NTgyNEQzRkFGQzNCRTE2ODk2MDA1QzkyMUM0NworOjEwREMwMDAwMzgwRjVCMzRERkQxMUYzRTc1NjJCRDRCM0ExMkFENEIwRQorOjEwREMxMDAwNzVDRkI3NThGMDNDMTZDMjdBQkEyMjlDRkJFRDc4RUU2RAorOjEwREMyMDAwMjlCODlFRTk1Njg2RUY5QjM1QUIxQkQ3MjNFMDdCRTZGMAorOjEwREMzMDAwODY5ODhENkMxMEJDREZCOUQ1OTIwREY1OUYyMkZFQTY5QgorOjEwREM0MDAwRTA3QjFDQkZFNkU2MDQ3MjE1RENGNzBEMzE2RTVDRTc4NQorOjEwREM1MDAwNDI2NzA3RURBRjBGQkU3NzAxM0NFMEY5NTJBNzg3RTBCRQorOjEwREM2MDAwMEI3OEUxNjMwMDg3MjU5REZBRjMwQ0FEODdDMzc3NDlGNAorOjEwREM3MDAwNjcxREQxREIzMkIzRDdFQTBDNUZDN0I2ODNCOTBBQzBFMAorOjEwREM4MDAwNjUyMUQwQjcwMkYwNjc0RTZGMTZFMkNCRDlCQkFFQ0FBMgorOjEwREM5MDAwQTI3REMyM0ExMUFFRjE2RUQ3QUNCNDYyQzIxM0MyNjNCOAorOjEwRENBMDAwODkyRkI1NDU5QzdFRTU3Q0JCREM2NjlBNkY5N0Q4NTc3QgorOjEwRENCMDAwNzRCQUQ0NUU0QzQzQkE4NEYzNURFNzhBNEU5NzU2MDYzNQorOjEwRENDMDAwRTNDMUJDRDYyNThBQkY0NUU5NEZBNzkyM0UyNTVENEFGMAorOjEwRENEMDAwM0E5NUY0N0JCRkM1MTM0ODUzNDI3Q0E2NzYxMDZCN0MwMworOjEwRENFMDAwMkEwMjlDQ0UwQTNFNzJCNTM4NTc4MEVCNkYxMEFFQjI1NgorOjEwRENGMDAwRkQ3NTcxQUVENTM5N0E3QUM3RjE3MERDRTc2NDdCNTk2RQorOjEwREQwMDAwMjBGNzg2RkM1MDdGMzk2Rjc1MTI3RjBGRjExRUYxRUQwMQorOjEwREQxMDAwMzkwMTFGRUNCRjhBRkEwQjc4MDk3RTUxREZDNzJGRjY1NQorOjEwREQyMDAwQjQwRDQxN0VGMUE0RTI0NjdFQjE2QUYzQTFDQzVCMDA2MgorOjEwREQzMDAwNkVBQjdFMUU4NzlDOTc3REI4RjJFMUVCRDMwMTBFQ0NEMworOjEwREQ0MDAwRUNBNzczOTNFQjVBRkE3OTAxRjE4OTY1OUY0RkUyRkNENgorOjEwREQ1MDAwMjIxMDk5NUZCOEYyQkM4NzkxNkZDQkZBOTIzQjdGM0U1RAorOjEwREQ2MDAwQ0FDQkY5NEQwMEY5Q0QxRjdGRkVEQ0IxODlDODQ3OThCOQorOjEwREQ3MDAwREZFMkI5MjRCNDlGQzVFRDZGNThFQTFDRTFGMEUzRkM4MworOjEwREQ4MDAwNkU2M0RFQjkzQTNDQUY3QTg3RDVBNUMyQTNGQUQ2M0ExQworOjEwREQ5MDAwRTJCRjJDOERCOTczOTVEMEY5MUJGMUEyQUU1NUQxRTgzNQorOjEwRERBMDAwQkRBNjcxN0VGNTVCRTREM0Y1OUJFNjMxOTQ1M0YyRENCRQorOjEwRERCMDAwNjA2MkM2QzZDMTNFMTk4N0FGNUNGRjQ3NjJGREU3MDREQgorOjEwRERDMDAwN0ZCQjVBRTBGN0Q1MEREM0FERTlDOUI4REZCQTIyRTA4MQorOjEwREREMDAwOEM2Q0ExNzhCRTcwODlGRTc5REZCOTM5RkJGOEZDN0FDQQorOjEwRERFMDAwQTQ5NzczNURGQ0RDQ0U2REIyMTBGRjM5QjcyN0RFQ0Y5MAorOjEwRERGMDAwNjA3RjFGQUU3QUU2QjUyQkExREYwNzc3RUZDODYyQUE3NgorOjEwREUwMDAwRkVEQzU4MTEzRjM3MkM5N0MzQjlCMUMxMTFDRjREMkQ0RQorOjEwREUxMDAwMDhFM0MzQ0IxRkUwRTc1NkZGRjhBQkZGRjFBQzhCRjY4RQorOjEwREUyMDAwQ0JGOURENjY5QjFGRjlGMUUyQUUyN0U5MUMxN0I2NkY0RgorOjEwREUzMDAwQjE2NDQzQkZDMTA1RDkzQTNFNUVERjU4RTA2NDAwREZGQworOjEwREU0MDAwQUJEQjc3NTg5MDRGMEMyRUUwNzAzNEQyMDM5NDFBMEI1MgorOjEwREU1MDAwQTMzMzk0NEI0QTEyRTI1RjMwMURGMTRGRjY0N0ZFRjhCMAorOjEwREU2MDAwMjRDQzczRDMwRDMxMDk2QzZDNjg5RUM5MDU5Q0NFRUEzNQorOjEwREU3MDAwMUIxMzkzNzBCRUZBQzZCQURCRDk5ODkwM0MzMEVFRjMxMAorOjEwREU4MDAwNTQwQ0E3OTdDNTMwMUVEMkVEQTlFOUVFQUM1NTg0OUY3RQorOjEwREU5MDAwQTY4ODcyQjdBODgwOUZFM0NGMDBEQzMxODAwRjQzRTNGMAorOjEwREVBMDAwQkExRTQxMzgwQ0ZENDFBQzFCRjlDN0M4OTE0MTNGQ0VBOQorOjEwREVCMDAwOEJGODhERUJCNjAyRkZCNDQzQkY5MTJCODMxRkUzM0E3RgorOjEwREVDMDAwNDYwMjg2RTE3QjU4QzYyNzUxQzk4NjQwN0QyNzJDQkI3OAorOjEwREVEMDAwMTRDQTFDOTU5NzBCMEIzODlFNDA3QjAwREI1OTcyQjAxRgorOjEwREVFMDAwMDRGNzJGRjFEQjg4QkY1NkY2NTA3QjBFRjJCMTY0RTZFMworOjEwREVGMDAwNkU3MTg1RjA1NThFMjNGMTU1RTI3M0I0RkRDRDJCRTBBNAorOjEwREYwMDAwN0NFNTdDRkIzQjk1Q0RFMTY5OEQ4NUZEMjU3RDg1RkQxRgorOjEwREYxMDAwMDFCMjk2MjY4NUY2MjVEN0M3RjI2MDVEQTgzRkZFRjhDOAorOjEwREYyMDAwOTIxRDFCNjE5RTUzQ0RFRUFDNDZDNzQwRkJFRDlDMzk2NAorOjEwREYzMDAwMjRDMjdFOERGQjk0NzRCM0M0Q0U2OTFBRTg2NjUwMTA3NworOjEwREY0MDAwRDY3REFFNjNDNDIwOTQzQkE3MTQ5MDZGRjBERUE5MUI2RQorOjEwREY1MDAwNjI0Q0I4N0VCOUFGNUQ2QkExMzNBQzc1Rjc1QTNCOTU5NworOjEwREY2MDAwOEZBRTA1QzIxQkNERDg5RUI1Njk1NDdGN0NBRDhCQ0FFMAorOjEwREY3MDAwQUVCNTc5RjRGQ0U2ODIyNEJFMEYxNjhDNDczRDEzRjQ0RgorOjEwREY4MDAwMDFDRTBGMDI5QzRFN0E5QTQ2RDBCRUU0NzNBOTE3RjRENAorOjEwREY5MDAwMzg4M0YxNDk2MUZDRkI3NEEzOTA5QjJDQjgxOUU5OUI3MQorOjEwREZBMDAwMzU4RDYwMEZDMzU0M0QxREE3RTI0REY5ODg5RjdDN0RFMAorOjEwREZCMDAwRjJCRDlCMkNCREM0MEY1OUJDRDVGNTMwOTA1Q0RDNEQzNworOjEwREZDMDAwNkZDQzRDODVGOTk2NzY2NjE3MjhGMDVFNEQ1MzUxNEYwRAorOjEwREZEMDAwMTNCNEQ3QjRBNkJBOTE2RjJDNzVCOEQ2QTM1QzVDRUExQgorOjEwREZFMDAwQ0I3NkEzNUM4Q0VCMkMzOEJCMEREQTk3QjY1RUVDQzYxNworOjEwREZGMDAwRkUzNzI5Q0M4M0Y0MDVGQzkzMjFEQzk2QjFCRTlGNjZFNQorOjEwRTAwMDAwMDdCRUI2NUNGMEI1RTVDODJGMDE1RUNCOUEwRThENzRFNQorOjEwRTAxMDAwQzJGQkNCREMzMTA1MjhERjk3NkZFMzc2QzI1QzEzNkI2NAorOjEwRTAyMDAwNTc1MDBFQjc3ODY2MjExRkVCQkQ0NzcxQTNCRUM5RUVFRQorOjEwRTAzMDAwMDVGRTZBMEZGMTU3N0Y5RUE3QTMwMEU1RDI5NzgwN0Y2OAorOjEwRTA0MDAwMzBGRTQ1Mjg4MzU1REM1Nzk3ODZGQjYwQTA4RjNDQ0M3QgorOjEwRTA1MDAwNzBERDFFRDJFQjA3MDk3Q0U5RTkzQzExRUZDQUU3RjA1RAorOjEwRTA2MDAwNDY3RDlENzkzNTEzRjJERDU1NDJBRTBEQjdGNjlFQjg2QgorOjEwRTA3MDAwMTVGNTk5Nzg5MzdCMjdFNzk3QUZCQjcwOUYyRkFCQ0NCMworOjEwRTA4MDAwNDZGMjQ2RjQxN0ZDNzRGODRGNEJFREM4REY1NkM1RTc2RgorOjEwRTA5MDAwQTQ5MjVFQjU0RDI1RkUyOEYxQTc0MUFDNzlFOThFOEFBMAorOjEwRTBBMDAwMjE4ODM3NEJBMTFERTVERDc2N0MwODJDNzQ3REU3QTUyMgorOjEwRTBCMDAwNDMxMEFGOTY2Qzk5NzlCNzBGRTQ1ODk2ODBFMzY5NzM3MworOjEwRTBDMDAwNzAxRTlFQ0Y3QjNCNTI5MzlBNTEyRkJDQUU2NTE0ODMzQQorOjEwRTBEMDAwRjYyNTNCNkVDREMyRjJCRDFEMzEwQjkwREZDRjcwQ0U2OQorOjEwRTBFMDAwOUI5MTA4RkI1RDc2NkY2MjgxMUEyNjM3N0UyREU4RjFFMQorOjEwRTBGMDAwREFFQjJFNEQ0NTdCNjBFNTVGMEZEREVGMUMwMUYzMDM4RQorOjEwRTEwMDAwQUMxMUVFOUY3NkM1Rjk3REQwNjVFNURBN0Q1OTJBRDA1MAorOjEwRTExMDAwRDg1RjZEREU2NzkxNkY3RkRGNzRFMENBMDlDOEZGMTVCNQorOjEwRTEyMDAwRkZBRTc0RUFFRjRBNzU0NkEwRjczRUY5MEFGOEVFMDIzMAorOjEwRTEzMDAwN0NCRUVFQTc2RkQzMzg3RjM2MURCRTYyMjFCQ0JGRjIxNgorOjEwRTE0MDAwQkFBNzEzNzA5Q0VGREY3NTc0OUMxMzlFREYzREQyRkI2MgorOjEwRTE1MDAwMjI5RUQ3MDdDQThFNUQ0RTE0NENEQjc2OEM0MUI5RkRFQQorOjEwRTE2MDAwNUI2MTQ3Q0Q0REYyNUNCOTEwRTFGRUIyNEE3MDhGMzY2QgorOjEwRTE3MDAwNUZDMzNFODVFMDJCRUIzNUZFNDFBNENGN0EwM0NDRUFBQQorOjEwRTE4MDAwQzREMkM5NDg1RjdFNEY2NTREQTgwRjQ4QkQ0NjNFRkZDQgorOjEwRTE5MDAwODM4MENCN0I4MzNBQjIxMDJGNTZFQ0RBOUE4NTcyRTVGNgorOjEwRTFBMDAwRkQ3ODVFQUZERTc1RDUyQkM4QTdCQzBGRDlCOERFNkU4MworOjEwRTFCMDAwNjZBNDI3RDdGQkI4REVDRDFBODA1RUQzNDNGMzlGMkUyQgorOjEwRTFDMDAwODhBM0Y1QUZEODU2QTQ5Mzg3ODBBMUY0RkM3RDMzMkJBOAorOjEwRTFEMDAwQzc3NTBDNkZFOTJENDBGREVCMUQ3MzYwMjk5RUVCM0I2RAorOjEwRTFFMDAwQTBEN0EyN0RGQjZCMjFDRkRFRTk1MDY3RTE3MzFGMTA0MgorOjEwRTFGMDAwMTJFQTIzRUY3NDNDMUQzRkQyMTFEMkUzRTI4QkJCMDI0MworOjEwRTIwMDAwQzhFN0FFREI5QjU4QTg3Mjk0MjJGQ0JBREUyOUY5OTNDQQorOjEwRTIxMDAwNjNENkQwNjREMkM3OUM4OEE3QUJGNkJGMzA4QkYxM0FFNworOjEwRTIyMDAwMDhDMkU4RjBCQzU2RTg2MTdERjVCRDRGOTI1REI3NzI1QgorOjEwRTIzMDAwMEZENzI3NTY3NjNERjk2MjA2OEM3M0ZEM0VBMTRGMDgzNQorOjEwRTI0MDAwM0RFNTNBNDFDRkQ3RUZFNTcwQjk2RUVGMDk2QjdEQjg4OAorOjEwRTI1MDAwM0Q5Mjk3QjQ3RTI4Njg4MkI2QzI0MTBCRUU3MkExQkQ5MgorOjEwRTI2MDAwMEQ4Qjk4MDhGOERENjU1QUQ4MEM0QzNDQ0JFREU0N0E2MAorOjEwRTI3MDAwQTVCOTk3RjRDMzhENzlERDY0OTc1RkQ3MkFDNkNCRUIzOAorOjEwRTI4MDAwNUU5RjQzRkI5RDM3Mzg1QzFGQjIxNzVBMDhBRUYyN0Q4NAorOjEwRTI5MDAwODAwN0JERjc1OTRDQzIxOEU0N0Y4MUVCNjJEQjUxQUVCOQorOjEwRTJBMDAwNkJENzNCQ0M1OEI2NUNFNzIwMzk3RjZGQTMyOUNGMENFNgorOjEwRTJCMDAwRjBENTk0NTgzN0VBNzE0RDc2REVGRjk2RDg4NDlENTg5NAorOjEwRTJDMDAwMUU4OEU1RjVDRjYyQjI0ODRFN0Q2NkYyM0NCOTBDRkE4NQorOjEwRTJEMDAwRERBMjFFODk2MTIzRjBDODdCMEY5OUEwM0UyQUM1M0JCMQorOjEwRTJFMDAwQkMxMEU2NEY2NTQwM0QyQUNBOEY4MDgyRUQxRkZERjJDQgorOjEwRTJGMDAwREQyMjVDQzdENEUxQzE0RjE4MkNDREEyMjQyRTlDMDE5NQorOjEwRTMwMDAwNzgzMkJBRDBDOUY5N0I3RUIwMDhGMTNERTU3OUNFQUY1RAorOjEwRTMxMDAwRUZCM0IwNzY5NDc3Q0NFQzYxRjNFMTc5MDBGOTE3OUUxNgorOjEwRTMyMDAwRkYxNzI2M0ZGMkUzMDM0QUUwQzE3MEZEQUJCQTkwRUI2MgorOjEwRTMzMDAwMEYxRTlCQTM1RDgxNzUyRUNGRjZCQTcxMURERjUzMkM4NgorOjEwRTM0MDAwOTdBMEVBQzI1QzZBMkU4RUZGOTE4NUI3NEIzREI2NEMxMgorOjEwRTM1MDAwMzBFMTRDNjE4RjU5MzNEMjFDQjhCRjE2MDEyRjQ1RDMyMQorOjEwRTM2MDAwNTgxM0FDNjM1REZFRjNGNTg4MkZCN0Y1REE5OTBERTYyNworOjEwRTM3MDAwMkZFQjhEMjVCRDM2MzNBMzlDRTQ1QjhCODA4QkUyNEE2QgorOjEwRTM4MDAwNDY5OUMzOUVDRjM3Rjk2Q0IwREVEQjk4REQ4RkZEOTlERgorOjEwRTM5MDAwRERBMEZGOUE2MjM0N0M0RjM5RjBEQjJGOTBERjBGNTUwMAorOjEwRTNBMDAwM0YzRTM0MDhGQTBGQkQ0NTcxQjc0MDlGREE3MzY3RUZGRgorOjEwRTNCMDAwN0I5REExRkRFQzJGNDBGODJENERGMTVFNTYwOEU3RDk2RAorOjEwRTNDMDAwNzNBRUZDODQxN0NFRkIzNjY3OTdERDlEQ0ZDNzBCREY5RQorOjEwRTNEMDAwQzc4MUQ1NUYyNDI0OTk0MkVCRkJBOEY3RUNDRjlGMjk5NgorOjEwRTNFMDAwQzZEMjRFNzJBOEVDODBDQUZENEQ4NkY1N0M5NEU2MzIwQQorOjEwRTNGMDAwRDMzOUY1REEwMzI2RUNFRjMwRjkxNTA1RkIxRjdBMUI0QworOjEwRTQwMDAwRDc1NzY2NzcwNDU0RDRFM0VEOTYzRjg1Q0IxOTc2MjQyRAorOjEwRTQxMDAwMzNGMUVDQzUyNDVBRDhERjQwNTkxOEQyQzJDRjZGRUE4NQorOjEwRTQyMDAwMjBCRDdERjk4MzQyQUUzRkZFNDA5QzkzODRBRjg0MUJBOAorOjEwRTQzMDAwNzM2OTJDNUNDRUZDQ0FCMUFCODZGQkIxMzgxREZGNDBDMgorOjEwRTQ0MDAwM0MzRkY3NzkwRUU5MTdFNzBFODA5RTExNDFFRjk0RTUwNgorOjEwRTQ1MDAwNTFENDMzNDA3RjA4RTQ2OEI3MTQ5Njg0RTQ2Qzk1OTRGMworOjEwRTQ2MDAwQkE0MjBFQUI2MkRDMkEwMUFGMkE4Nzg5QzNBN0QyMDA2OQorOjEwRTQ3MDAwMUY4MTM3NDZCQzMwOUVCQjNDNEZGNkEzMjMyRjBDQ0FFRQorOjEwRTQ4MDAwQTY3M0JDRTQ1RjE4OURERjNBNUM0N0NGMTc4N0RCODAzQgorOjEwRTQ5MDAwREM1ODg2QUE5REYwNjZGRjIzOUU1RjIwNjYzNEVBMTU0RAorOjEwRTRBMDAwNzc5OTQ4QUY0MEJEMEZGNTQ0QzkzRkJDQzgwN0M2RDJGNQorOjEwRTRCMDAwNzNBRTA3RTYzMUUyMUJCNTZBMkNGOTE5OEQ3QzQzRjI4NQorOjEwRTRDMDAwMEI2RjJDOTQ2MzkwNkY3NDEwM0ZCODQ1RUQ3REMxQTQyMQorOjEwRTREMDAwODRGOEM0RjBGMkUwMjUyODg3N0JDMEY0QzdGNkEwQTkzMQorOjEwRTRFMDAwOEI5RUJGNTQ5ODQzRjgzMjhDMUQ0OUM3RTc2MEFGOTRBOAorOjEwRTRGMDAwQTAxRUE4REExRkJDRUYzNDg4OTRDRTBEOUMzRTVBMkM4NworOjEwRTUwMDAwRkU3Qjk2MjE3RkE4NzJCODUxQUZGQkM4NkZGMjU5NjBBRAorOjEwRTUxMDAwOUQ5RDg5OUM2Rjc0QUVDODIwNzlGRTExMTM3QzY0ODEyNworOjEwRTUyMDAwOTVGOEM4MjQ5M0M5NDdGNkQ2QzIwQ0IyQjdGQUZBRTdGMQorOjEwRTUzMDAwQkFDOEJGRkE4QkJGQUFBM0I2NjFGQjNDM0JDOURENEU4QworOjEwRTU0MDAwOTRDNzUwRUZEQzdDMDlCNTNGMjdGOUQyMEFDRTk3M0E0MQorOjEwRTU1MDAwRTc2OUU5QjFEODNFNkY4ODA5RTdEQjlFRUM3RDFFQ0YwNQorOjEwRTU2MDAwM0Q0M0Y1M0YxMjgzRkFFNEY3NjNEOUMzRjBCQzMzNUI1NAorOjEwRTU3MDAwNEI0Nzc5N0JCN0UyNTlCODE0REZCRjg0QUYzQkI4MzA2MworOjEwRTU4MDAwRjZGMTVERkM3ODAyRTg0RkVBNjk4QURGQjkzMTRDM0U2QQorOjEwRTU5MDAwMUQxRUNERjlGQTcwREY4OTdCMTA1RUJFMzI5Njg3RkFCOAorOjEwRTVBMDAwN0MwRkUyRTdEOEQwNzk4MTU1Q0U5QTkyNDJFNzk2NkNGQgorOjEwRTVCMDAwMzgzNzg5QUYzRTBCOUM1RjMyM0ZCRjc1NEFGNEYzNEI0RgorOjEwRTVDMDAwMTZFN0E3MzQwMTdFMTNGRkU3RTc3MzhCQ0FGOTNCRkIxRAorOjEwRTVEMDAwMTUxOEUwNTA3RTlDRTIwREUyN0U1QjZFODA3MzIxODExNworOjEwRTVFMDAwMThCQzE5RTE3NURGRUE3ODBERjdEMTYzNjIwRDVEMTE5MgorOjEwRTVGMDAwRThGNjQzQzExRjE4NEE2M0EwODc0NTgyMUUxNjQ5QkMyRQorOjEwRTYwMDAwNUQ2M0MwREJFMEIwQzRCMzcxMDI2RkUxRkRFN0UyM0NFMworOjEwRTYxMDAwN0ZDNjc5RkZBQzFDMUQ4NzBGMEZGRkI3QkEyMEQyM0MxNQorOjEwRTYyMDAwRkYyNUY4Q0Y0MUJCRjdEMzQyOTJBRjY1M0E3REY1NzAzNQorOjEwRTYzMDAwQzFCQjk5MjhBN0Q4OTc4Nzg2QTFEQzdEMkFEOUYzMzk1MQorOjEwRTY0MDAwOEUxQjMzQjI5N0ZDRTYzREU5QkQxNkRDNjdDRkMyMEZFNworOjEwRTY1MDAwMzI1MTJGNUFENEY0NUJBMkFGMEI1REU3QkFCODVBMEIxNAorOjEwRTY2MDAwOEU5MzU4OTk2RDA5NDI5OTVBOTlGRDAyRTJDRkIxMzlCQQorOjEwRTY3MDAwMzY5NzJEODIxRTcyNzBDRUU4NENENDdGQkJBQjQ2NjdCNgorOjEwRTY4MDAwMjJERkVCODYwMzNDODJFQjMzQkJFMjkxRkZCMTdEMzVBOQorOjEwRTY5MDAwQzRDN0FBMDQxRkVCQUUxQ0MxOUYwQkJFMTlGNjdDNzM0NgorOjEwRTZBMDAwMzFFQUI1MEU5MzNCNUM1RjMwOTZFRjAzREYwQzAwREY4MQorOjEwRTZCMDAwN0MxN0VDMzMyQ0NGODA3RDE2MDBGREY1MTREODY3NThGRAorOjEwRTZDMDAwM0YwMUY2MTk5NkM3QzEzRUMzQjI3QkFEOUJEQTVCMkEwOAorOjEwRTZEMDAwNDdFQzBCQzIzOTdGREFBRUQwRjhFOEJGOERBNDE3NUZFNAorOjEwRTZFMDAwRkI5MENBMDIxMjNFRjA3RkMzQkQ3MTJDOTAxN0FBMkY3NworOjEwRTZGMDAwRUIxQ0FDQUIyRkQ5MzQ1NDU3NUZEQzNBNDI1Nzk3N0FCNgorOjEwRTcwMDAwQTQ3N0NEQzVCQTcxMkJDQThCNzRGREQ2QzU4REIxRTA4NworOjEwRTcxMDAwQjkyNjk2MTc3MEI4OTcxNzEwRENCQjJGOEYwMkY3Q0I2RQorOjEwRTcyMDAwQzcxM0RDOEZDRTE5OUY4OUYwM0M4QTcwNDdGQkNERUM3NAorOjEwRTczMDAwOEVDNzczOTA3MDlGMkZFNjNDNUE1RUM0OUYwQkI4ODdCQworOjEwRTc0MDAwOUU1NzBDMjhBNzNFNDQ3OERCMTBFRTc2MkFERjQ1NzhFQQorOjEwRTc1MDAwMTNEQzM5QkM0RjIxQkM2RDA4RjczQzJBOEYyM0JDNDcyMgorOjEwRTc2MDAwRTNCODAwRUZFMkYzQzM3QkU1MUU1NTA3ODc2QjFGRDJDQQorOjEwRTc3MDAwQzNCQkUxREVDMTA2RjgwRkQ1QzE3MUM5QTYxMUJBQkE5MworOjEwRTc4MDAwODRGN0UyNTYzREJDQkQ2QjhBMENGRDE4REIwNDcwQTgxMworOjEwRTc5MDAwQzA3RjAwMUQxQzJEOTk0RDcxMjlCMzlERjlFMjgwQUZGQQorOjEwRTdBMDAwMjQyMkJEQzFGQUNEOTUwQUQ3OEZFMEQ3MDE3NDM4MUY1NgorOjEwRTdCMDAwRkYwMUY0NjU3NkYwRjZENjg1OEExRkY5MTJFQTQ0NjhGRgorOjEwRTdDMDAwNTcwMDVDMDM3MTQwNjcxNUNFNTE2NzkwMkY1RDg1MUMyMworOjEwRTdEMDAwNEM0NUJCREU0RkU1MzUyQzQwRjQ1OUMzODI1NDVGQzQzMQorOjEwRTdFMDAwN0FCM0FDNTA1RUFGMDZENkEzRkZFRTU1QkJGN0M2MjI5OAorOjEwRTdGMDAwQTBGQkZGOUFGMzQ2OEY4MjQ0RTlBRTFCOEQ3NENFMUNCQQorOjEwRTgwMDAwNDk2NDZGNDYzQjI3RTA5NDVDMUZDN0FFRTNDNEJFRTA5QgorOjEwRTgxMDAwNTc4OUZDMUZERUVCOEUxQjczRjNDRDcwMEUxRkQ1MDVFMQorOjEwRTgyMDAwQzdFMUZDMkJFRERFMDc5MjREMzQ1RjczMTFGMjI1OEJBRgorOjEwRTgzMDAwNzdGNDYwNzhGRTZBQzlGODRDQTQ3RkU2NDlEMUQ5NDlEQgorOjEwRTg0MDAwRDFFNkRCODI5QjA1MzhENDk1MDM5QzE0OENDMzcxQjg0OAorOjEwRTg1MDAwOUNBRUUyNzAzOUI4QzU2NjQ1N0ZDNkU5MEQxNkYyNTcyMQorOjEwRTg2MDAwNkU4RENCQ0E0MkJDM0RERDM2M0IwQkYxQUU3OUNCRThCOQorOjEwRTg3MDAwMkNDNEY3RjlFREIzREY0N0ZFM0Q1MzlENUI4QkVGOUY1MworOjEwRTg4MDAwRUNFMDc4Q0ZEODBEQTQ3N0REMkNDRUVFQTQ4QkI5MDNDNQorOjEwRTg5MDAwRDA1RTM1MjdERUVEODNGRDc4N0REOTA5QjQ1RUE2MzlEQgorOjEwRThBMDAwMEFBMDVGQkREODc3N0RDN0YyQjkzODlFRENGRkUyNEQ4NAorOjEwRThCMDAwMzZEREY5N0ZBRjU0NUZBRjYyRDYxMDlFNjVFMzM5NUJGQQorOjEwRThDMDAwNDNFRDc4RkU2QUY1MjBFRjAwNzY3NEQzMUY3N0JDRjIzMworOjEwRThEMDAwOUJCMEYxMUUyQjhBNEY0NkJFQ0FDNkIzRjE3RjUzNDM4RAorOjEwRThFMDAwRUY0NzgzRUI2NzZCRkRBRkZDMjYzNzA0NTc4OTRGRUI4RgorOjEwRThGMDAwOEIzQzdCMTExRkUwMzFDNURCODA5NjQ4MUU1Q0RGRTc1NworOjEwRTkwMDAwRDczQTkwODBGMERCMTJGN0FCREIyNzIxNUNERUU0N0VBOAorOjEwRTkxMDAwOEVBRDcxQjVDNDNGM0U0NEJFOUQ4RDdDRkFBQUNDNjBERAorOjEwRTkyMDAwMTg1RjkwRUYwNzA1M0YzREY2RjNBQjg4OEYxQ0FBNEFBRQorOjEwRTkzMDAwQTU3ODRDRjc1RUVFNUYzRTJFRThCRUJCRjJBQTlBOUIyRQorOjEwRTk0MDAwODE3Rjc2RUY1MTQ5Q0ZFQkRFRjdDOTBCRThBN0U5RUVGRgorOjEwRTk1MDAwNTJEQzAyRTRBNkYwNzFCQkY3MDEzRjQ3N0VFQkIxNTBGOQorOjEwRTk2MDAwRkJDMTNENEZEMzNBQkYyRDdFNUVCOTVGRjBGMzZEN0NBNgorOjEwRTk3MDAwRkVBNTY2MEZGMTE3RTY1REEwREJERkRGOEJBRjlGOEY5MworOjEwRTk4MDAwOUYxRkIzNzAzQ0VEM0VBNjkyQkY4REY5QjQyMzc5NDMyRgorOjEwRTk5MDAwQzJGMEIzOUNFMzY3NzM5NThENzFGOUNBRjlDQ0ZDNEE1OAorOjEwRTlBMDAwQTAwM0Q0RjM5OUFCMDQ2RENBMEZGNzU1QTQ5MEJDREM1NworOjEwRTlCMDAwNjQzOTg5RkFCNDEzRkU0M0I5NkQ4NDYzMTUzMzlGMEMyRgorOjEwRTlDMDAwODZFMUVGQ0FCREQwM0Y2QzdERjNCMTNEMEM5RjhERjg2MQorOjEwRTlEMDAwQUExNDAzQkU1RTFDQzJENzRGRDk5NzU5RDYxQ0RFN0UzRgorOjEwRTlFMDAwNjQ0ODg4RUZFMTJGOUNCRjQ4QkUyNUYxMTdGODU2MkRFQgorOjEwRTlGMDAwRjIzNUUwMkI4RTYyQzBEQjFGMTY2NkZGMzJBODg0RjE3MQorOjEwRUEwMDAwOTUwQkU0NjM1QkUyRkU0QTcyNzA2QkRDNUYwOThGOEZFQgorOjEwRUExMDAwNTYwOTNDMDYzRDAzOUY3NzVGQ0VGNTBERTY1RjQwRjQ1NworOjEwRUEyMDAwQjA0OEVBMTExNjRGM0NGQTQ5OEZBRDE5OUM4MEVEMjc4QQorOjEwRUEzMDAwNUEyQjg4RUUyNDNEMTlFNzNCMkVGMDRGRjY1QjY0RUUyRgorOjEwRUE0MDAwQjVCODIzQzg0M0VGMUEzREZFQjBERDBCMDhERjZGMzZDMworOjEwRUE1MDAwRTA1OUI0RjE4REZERTUzQzhCMENGMTVFRTMzQzkzOEIwQQorOjEwRUE2MDAwODVERUQ5NTU3MzQxRjMyMTE5RjZCRDRGRkE2RDZDMDg1NworOjEwRUE3MDAwMkY1NUU0MDM5RkM1MDc0OUZGNUFBMEQzQ0I4RTk3OEYyQworOjEwRUE4MDAwMjdCREVDNjhFNTI3MTFGNUIzRTM5NTlGQkMzQTFFRTk3NQorOjEwRUE5MDAwQUREQzIyRThCRDgxREVBRjEwRURDNjc1QkMyQkY0ODY3RgorOjEwRUFBMDAwMzM4MjdGOUMxMjc0MkREQkQ1MUQ2RDQzQUU0NkJDNUY1NworOjEwRUFCMDAwQTNCQTkxNUYxRDlCNUI0NDc4RkU5RUJGOEFFNjNGNUVEMgorOjEwRUFDMDAwQTk5MkJGQTk3NkVGNzdBRTQ2N0Y5MzVDOEY5Q0FGRTJBOQorOjEwRUFEMDAwRjI0RkUyRDE5RkY2MjlDMDBCRkQ2MzE1MTY3NzRBMjQ0OQorOjEwRUFFMDAwRkRDMjA4OEY2OEUzNEFGQzAxN0RGNjE4RUVGMzI4RjJCOAorOjEwRUFGMDAwNTE2Q0Y1RUFFMTc0MTRERjg3RjZGOTNCNTQ4QUI3MTlEMworOjEwRUIwMDAwRTE3NDY4Q0U2OEUyNEJDNzc3MEJGRTA5NzA0NTNEQkNFNworOjEwRUIxMDAwRTE1RUZEQjkyRUVCOEMzM0YwOUJDMUJBRjZGOTU1NUM4MgorOjEwRUIyMDAwMkY5M0ZDNUFBRUVGRTg5QTExMjlDQzcxRTFFNzJEQzc3QgorOjEwRUIzMDAwQjk1MDdDQjk1NkJDOEY2MkYzNkYyNDdGOTM3NEUzODEyNAorOjEwRUI0MDAwQTU2ODk4MkZDN0QwN0U5MUExQkQ1MDVGQkY0MDNDM0VDNQorOjEwRUI1MDAwMjFGMDQ3Q0E5RjEzMzFFRTlBNDg3MUJDRTM5N0Q5MUE0NgorOjEwRUI2MDAwQzJGMzEzRkVCNTk4RkI4N0ZGQjU1OEM0QkRCRkEyREM0NgorOjEwRUI3MDAwREU2OUUwODNFNzdCNUZGMkJEQTYyMkNGMjNDOEVGNThCMgorOjEwRUI4MDAwQTA4MkUyRDkxN0NBRTdDMkU0RkM5M0M1NDhFNzQxQzVCMQorOjEwRUI5MDAwOEFFRjRCQkRFQURBNzIyRTE3QjZDNjNENEU3OTFBN0Y2MAorOjEwRUJBMDAwNkVFNjdBRDFDMTY2MUJFMUUxNUYyRUU3RUQ3RkY5QjczMgorOjEwRUJCMDAwNzc0OTlGM0FCNDdGNkI0MkI4OUM5Nzc4RjlGRUJFRDlFQgorOjEwRUJDMDAwMDlFODE3M0U1REY5NjA0MkI4MUQyMERCM0ZBODdDRjBFNAorOjEwRUJEMDAwRjY4OTQ0REZBQTdCQTA3M0Y5QkFGNjQwNzdBNUIwMDc5RgorOjEwRUJFMDAwODRCRUYwN0Q3M0Q3RkYxNTdCQzA2ODA3Q0M1NEVGNEQxMgorOjEwRUJGMDAwNDBGRTY3QjQwN0RFNzc2OTA5NEU4MjhGQTAzQjIxNTczQworOjEwRUMwMDAwQUUxNUYwRjk4QjQ1NEJBMDM4RERFRTIyMkU1NzBDRjhFRgorOjEwRUMxMDAwMjlFMTcwNTZDMjYxNTNDNTgwNzg3MzQ2QzgwNTU5NUZCMworOjEwRUMyMDAwNkE2NjA0MEZBRjlEOTFCRUNDM0ExNTM3QzZCRjMwNEQxMgorOjEwRUMzMDAwQTUxNENFRTU0ODY1QzE4M0U4QkY5MkZEN0Y1NEMyRjNCOQorOjEwRUM0MDAwQTlFNDNDQzdFRTUzQkFEMEJGRjJEQkQ2OEE5QTlCMzExNworOjEwRUM1MDAwREY2MTZFMUNGMTU1RDk3Rjk5NkY2MEY5NzU2QzczRTJCNQorOjEwRUM2MDAwMTUzODhGNzc5QkVBQzY0NzVFREY4OTk0RjBGNTRCM0RGOAorOjEwRUM3MDAwQ0RGOERFMEE3M0M3MDVEOUQxNUVERjhFMDRCNDZGODM4OQorOjEwRUM4MDAwNjI5REMxODMzMTU2NTc3Q0ZGRjczMDVFODNGQjVGMzE1NQorOjEwRUM5MDAwNTc3NTM3QzNGQTU3NkNFMkVCQUFGMkE5RUUxQ0E4RkYyRQorOjEwRUNBMDAwQjZFM0MxMkI5MDBFNEUzNTU5NENEQzNFNzBFQUYwRkNCOQorOjEwRUNCMDAwNzA0N0QxNkJEOEZGNzQzOTk3MkIyNzJBMkY0REMwM0M1MgorOjEwRUNDMDAwMzhERjM2OEIzQkQ3RDU3RkJFRDEwODQ3OENGM0VDQjMwQQorOjEwRUNEMDAwOTlEMDdGRkE3RTkzODUwNUM4N0ZFMTIxN0JGOUQ4QTY3QworOjEwRUNFMDAwMTE1NEJFOEZGMEUzRjYzNTlEN0Y1MTA5Rjc3MzlERUEwRAorOjEwRUNGMDAwQTgxRkMyRTlDOTQ1RUI5MEY4NzI2MkI3NUFFRThGQzBGRgorOjEwRUQwMDAwQUY4QUM0N0M2N0JFN0M4MkYwRURDNUREMTUyNDhGNEZEMQorOjEwRUQxMDAwNTVGMjc5Q0VBQzcxMjcyMDNDN0ZCNzQ5MjUzQTNFRURCQworOjEwRUQyMDAwRTNFMzFGREM3RjZCQzI0NEQ4QzdGQjk1N0M1RkVGRUY0QQorOjEwRUQzMDAwQkJFNUI1MDlCMENGNjBBNTk0Qzc1QzRFQzlGQzlFRTBBOQorOjEwRUQ0MDAwQTYxMTE0RUZGRDczMkJCN0JGMjVCRENCNzhGOEE1QUI4QgorOjEwRUQ1MDAwOEYyNUQwRkI1MkNFRUQ1OUEwNUI3RkY3RUU1MzY0ODczMQorOjEwRUQ2MDAwQkRCRjA5NjZFMzcyQ0U1MTgwRjk4NkZDNzVCNjZDQUUwNAorOjEwRUQ3MDAwRkU3Q0U3NTdDNkU5RUE4QkRBRjVGMkFDNzkzRkU3NTc1NAorOjEwRUQ4MDAwNDYzRDc3RTkyNkQwODNEMTJGNjVCMEYzRUE5QjhCMTJGRAorOjEwRUQ5MDAwNEE5MTdFNTEwRkM2M0M5Mzg3MkI1RTQ4QzU3RDc0RDU0MgorOjEwRURBMDAwNTBCRjRBMTEzN0FCRUZCNEU5Rjg0MTU1QUJERUFFNUI2QgorOjEwRURCMDAwNkNCMEUzRkFEOTc1MDY3OTI0RTE3NDVEMTRGOTI0RjU5MQorOjEwRURDMDAwQjk2RTYxQUYxQ0I3Nzg2QTIyRTU1M0FDMkVFMTdBREJFRAorOjEwRUREMDAwMjJBMERGMzQ4QzEzMzFBRDZBOTI4MEY3NDY4NDhGQjU2MAorOjEwRURFMDAwRjdEMzVDRDBBN0JCNTVGNzE0RDRBQkZCRDE4MTQxMEY0RgorOjEwRURGMDAwQUMyOEQ3QzM5N0I5N0RBQzU0RkEyMzVDQTRERjlGNDVGOAorOjEwRUUwMDAwRkRCRjdEQjA5MERCM0U5MDQzRjEyODk3QjQxRjk3QTBFMworOjEwRUUxMDAwNUNCQTUwRkZDMTA1RUJFN0I1NDIzRkFGRDVFOUU3REQ4RQorOjEwRUUyMDAwRDgyNUVDRkQ4MzU1NTc5MTlGRUFEOEU1NTc5MUJFN0VEMgorOjEwRUUzMDAwQUNDRjRGRTVEMUY5QTlBNDVFNzc2QzZFODU0RUZGMEM3RgorOjEwRUU0MDAwN0IzRTg4MERDMDRGQTNFOTlCMjc5MDFGMTM5RkU2NzI1RQorOjEwRUU1MDAwNjlCREIwMjM1Qjg1MUQ3OTZDQUVCMDIzOTMxOUQxOTE0OAorOjEwRUU2MDAwRDlBQ0IxNDhGQ0VDQUJFQTZGOEI1QkY1NzJDOUJCNDYyMQorOjEwRUU3MDAwNkYzRjNFMzNEREZCNTQwOUUwODcyREVEMjJERDczOEJDMAorOjEwRUU4MDAwQjM1MEVGM0YzNEUwRTc1MEM2RkRFN0I3QTIyRjAwRTBGNAorOjEwRUU5MDAwREU1MkM1RjM0RUYxMzlFNkJGNDhCOUM0QTAzRkYyOEI0QworOjEwRUVBMDAwQUE0RDE3RjkzN0YyNzY5RjVBODhFOTcyMEM1NTNBRUE1QgorOjEwRUVCMDAwNkZFNjc1NERFMTc1OUY0M0I0QUIyMkVGQ0QwMkY1MTNCQworOjEwRUVDMDAwRDlFRTA1QTg3NzYxNUU0RjVDMTI2RjQ3MTQxOTBBNzg3NgorOjEwRUVEMDAwOUQ5MDE0OTI3RkU4RDc4RkUxQTE3NTVGMDJCQzM3QUM5QgorOjEwRUVFMDAwMzJGQjM3NDhENzk4RUYzMzBBRUFDNzRBQjIwOTZGRDJFNAorOjEwRUVGMDAwRDBBNTVGNDhFMzA3MzBBRjI3RDgzMjhERkNDRDE1RjY5QgorOjEwRUYwMDAwMDQxRTlGMDczQjdBNjBGQzZCRTZGNjUwRjk2MDlBNkMzMgorOjEwRUYxMDAwOTg5OUFGMjcyQTNFOEI3RUU3QzNFNzMwM0RFQzI0RDE5QQorOjEwRUYyMDAwMEIzMzkxQkY2NTRCREMxODBCRTJFRjdDODcyNzEzRTFCNQorOjEwRUYzMDAwMDBGODRFRjJCNUZCOTc1NkUyQzMwN0FCQjgxRkI2N0I5RAorOjEwRUY0MDAwQ0VGOEZCNkU4MkU3NjM5RTcwOTAyRkJEN0JBOUY0ODNBMQorOjEwRUY1MDAwRjdDNjg3RTNFREYxMzVBNzRDQzg5NzdGQkY4RkI5MzE2RQorOjEwRUY2MDAwOEZGMUY4OUVFQTE3NUU4MTcxMEVBREE5REY1QzgyNzRBNQorOjEwRUY3MDAwNzQ1ODI1QkJDMUU4QkY5REZFQzQ2NEIyQkZBRUJDNUM4MworOjEwRUY4MDAwQTVGQ0VFQTNFNTJBNDNCOTc2NzQ1M0FDQ0UwRTA5Rjk3RAorOjEwRUY5MDAwNzU1NUMyOEY0RjBGOThBOTFENEQ5RDNDQ0NCRjQyRkZBOAorOjEwRUZBMDAwMjZFNjY5OTVGMzczNzk1NkYwQjMyRTcxOEU4RjA4M0Q3RQorOjEwRUZCMDAwNjY5N0EwOUI0RTQxMzc3NzA4QkFEOTYwRjRFRkRFQ0I1NQorOjEwRUZDMDAwRTlFNkU4M0UzMDFDNDBBRUJGM0VCN0JFOENGQ0Q2REI2NworOjEwRUZEMDAwMThDNUExQjNFN0E4MUI4QjYxN0YxN0RCREMxNjg0REZBNAorOjEwRUZFMDAwRjRCOTA1MUM5RTk1OEEwOUUzMzcxNUU1MDUxNkE0RjdDMworOjEwRUZGMDAwOEIwN0JCMkNDODQ3MkJDQUU3NTE3RDQ2NjUzNkQ5RjkyQworOjEwRjAwMDAwMDdENzgwN0M0NDdCM0ZERTlEODk3NDM5NzJBRTJENjBDQQorOjEwRjAxMDAwNEE0MEJCQjE4OEY4QzRBNEY3NEMzQTdBMjkwOEM0RUEzQworOjEwRjAyMDAwRThFRUEyODc5Mjc0RURBM0I3NjVFOEVBMjk5RTFDNUQxRAorOjEwRjAzMDAwRkZDMUU1N0E3QThDMUQ1OUE4RTdCQjhDRUI4NTEyQ0UwRgorOjEwRjA0MDAwMzNENUM5RTRFNzNBMUU5MkEzRDQyRUY1MTFFOUFGOTM2NAorOjEwRjA1MDAwRkQwMTVBM0FCRUQ2MkVFNEM4MThBODYzM0VERDg2Q0EyMgorOjEwRjA2MDAwMTYzQkU2NEQ3Q0RBNjU3NkYzRjFBQjQ5M0ZCMDY3RUZDRQorOjEwRjA3MDAwQjUyMzlENjA2ODE1RjNBQkRBQTVGRTI5RkNGNzRDNjM1OAorOjEwRjA4MDAwODY3NTZENjIxODY3M0Q1RUNFMDg5RjYyNDYzMjA1RjU1MworOjEwRjA5MDAwQUY0RTcxREU3NzhBNzk4MUFGNEVCNzkwOUY4RTlGRTMzNgorOjEwRjBBMDAwRTBCOTFFRUFDNzNDN0FGQjIwMERFOUFDMTBGMTg0QkY0MQorOjEwRjBCMDAwRkY4ODc4N0Y5N0MwOTdFM0U1MEZBRThCNDU3QzU4QzBGQgorOjEwRjBDMDAwNDhERjk4QTlBRTVDODdGMUM0RTM3MzE5RDE0OTU3RTBEMgorOjEwRjBEMDAwRjk1ODVDM0Y4RTgzRjk4MUNGNDYxQkE3RjJFOTc3QUVFMgorOjEwRjBFMDAwQzdGNUVDQjZEMjM4MTUwRkIxQTk4ODI3MTc3REVGQzQ0NAorOjEwRjBGMDAwMDdBRjIxRjhCNjM5MEZDNUIwRkU3Mjc4Q0M0MzlBMUIyMgorOjEwRjEwMDAwODE5M0Y3MUUwQjU4QTgwQzY4Qzg3RkYyREUzQkEyNjEwMgorOjEwRjExMDAwM0NGMEEyQkZFQ0ZFRTA3MTg2RjM3MkI5RDAyRUYwREJCQQorOjEwRjEyMDAwQzg1RjFGN0JGODE3OEI1MTNFM0ZCNjZCN0JFMURCNTAwRQorOjEwRjEzMDAwN0U2N0REM0QxOTRENTAzRUIyRUVGQkRCNkY3Mjg1RkMwNAorOjEwRjE0MDAwQTVCQkFFNThCRUIzMTNFQUEzQkZGQjkzNDdGNzIyNUUzRAorOjEwRjE1MDAwNURGMTkzM0ZFQ0M1RjU1RUYxQzU3RjM4NjBGREEzNUFDNAorOjEwRjE2MDAwRTIxOUQyQjc1QzlGNzE5RTM0RDZBRTYwNUMxNEY5Mjg2OAorOjEwRjE3MDAwRjE2NUIzOEZFQTc1M0VCREZENjM5NEZCRDhERjBDRjBGQgorOjEwRjE4MDAwQUI2ODdBOENFMkNCNjlFMkZEQTM5N0RGQUFBODMwRUZFNworOjEwRjE5MDAwREI3NTlDQUY3NEFGRURFRDlDNjFBMUZFMDFFQzBGN0NDMworOjEwRjFBMDAwOTJGMjM1ODcwRTAzQjY4MkVGNUI3RDBBQzZDNTQxNDFGOAorOjEwRjFCMDAwNzI2M0JDMzcxRERBOTE5RjMzOTc4QkY0QUIyQzg5QkZGOAorOjEwRjFDMDAwODJBRkUwMzUwNzQ2RkU0MDMzRTE1OTlFODg0NzIyRkY3MworOjEwRjFEMDAwNDU3RTdGRTczODFFMDcxRkVBNjAxQTlFNkZGOTczOUIxMgorOjEwRjFFMDAwMTRDQzUzN0JDQkVCNzI5MzVFQjA5NkREMzUwM0VDRTQyRAorOjEwRjFGMDAwOEI1NDlFNzc5MTU3RkVENkQ1NzgyRUIwNTVCM0I3MzA0NQorOjEwRjIwMDAwMzRFRTZFQTFENzk1M0ZFN0EwQkNFREI3NzYzQjc2OTA4NAorOjEwRjIxMDAwOUU3RkU0MEE1M0I4N0U1OEY2RDg5RjlFRkExREUyNTdBNworOjEwRjIyMDAwNUQwQ0UxOTc1MTZGRTkxNkY0RDE1N0I3QjhFRUJCMDkwMQorOjEwRjIzMDAwRTBFM0ZCQTU5RERCNTU5QTJCOTNFQzc0QjcyQjEzRjNGRQorOjEwRjI0MDAwNzdGQUZBRkQ0NEM2RDNEQ0ZGODFGQzdDN0U3NTFDQzVEMQorOjEwRjI1MDAwMTk2NDVDNDkyREZGQjgwREU5NzE1MTY5NjMwOUVBRUY0MgorOjEwRjI2MDAwMTk3ODBFODM0MzcxRUNCNzU3NTgyOURGQzBBN0M0NTJGMQorOjEwRjI3MDAwNUU3QUI0NzhGNUExNzFEOTIyOUVEQzM4OTZENkMxMUE4RgorOjEwRjI4MDAwQzc2M0Y5Qzk4Mjk2RkJBQ0FFRThGMkFBNTU5QzZCQjQ5MQorOjEwRjI5MDAwNzY4Qjk1NzkyM0M1OTUwRjhERTNGRTkwMTYzQzA3NEIzMQorOjEwRjJBMDAwRDgzOTM4N0U3RjM1QzY4N0EzOUQwMzMzRkIwQjI5Q0YyMgorOjEwRjJCMDAwRDI2RTFGODk3OTIwQTlFMkYxRDZCODlGQkU4QUYyQUE0MAorOjEwRjJDMDAwRTcxODk3NTdBOTREOUZBRDQ1RkE5MzdFOEJEQTM0RDY1MAorOjEwRjJEMDAwMTczN0QzRTAzRDhCNzgyRjU1QzQ1OTkwODY1MUZGQUUzOAorOjEwRjJFMDAwMTVGMUEyOUUxQTQ2RjFBMkQ0QTY3N0ZGMUJFMUIzNDUwMQorOjEwRjJGMDAwOEM1RkZCMjYxRkRGNkEwRTFDNDQ3Q0E5NzVCODQ4RUVBNAorOjEwRjMwMDAwRjRBNDI0QjhGMTVFMTNGQjkyRTdBNzY0MzA4RThGNzJFOQorOjEwRjMxMDAwN0MyNkM2Qzc5NUIzQjA3NUE3QzY1NkJGNEVEN0E3QTY1RAorOjEwRjMyMDAwQjI0MDFDRTI4RjYyQTc3OTMzRDZEODI4QUY1NUVBNTc4RQorOjEwRjMzMDAwQTk0REI3REVBMDhFRDE4REE3QTA1RUZENTYzNUI3QjcxQgorOjEwRjM0MDAwRDFFQ0VDMUIzNzVCQTc1NzkxOUU2NTVDODc3Q0FGQzcwMAorOjEwRjM1MDAwQzJGNkExRkQxQkE2Njc5MTFFQzZDMkU3MTlBMUFCMEJBMQorOjEwRjM2MDAwM0Y5QUJFNkU0OUIzRUFGOEM0NUI1RjU2MEM2QUU0NzIxQQorOjEwRjM3MDAwQzA5NTNDOEVGQkVGMTAxRTUyMUY5MzdBNUJCRjcxMDU0OAorOjEwRjM4MDAwQkQ4N0U5OTczRUU0MTczMjhGQTI0RjRGNkEwOEIzOUJCRgorOjEwRjM5MDAwNzJGQUJGMjdGM0Q1RTQzOTQ4Nzg0NjdCRkY5OUU5NUFEQQorOjEwRjNBMDAwQzI3OEQyQjMwMjM0OEU1NzBDNjM4QTczNjQxMTdDMEQxOQorOjEwRjNCMDAwRkMxMkQ4MTZDRkE3MTc3QTI4Njg5MUJBM0MwNkE5NTcyRAorOjEwRjNDMDAwNEFGRURDMjNGODZFMzAzQjQ4N0U0Mzk5MjczRTBDREUzNAorOjEwRjNEMDAwQzk0MjNENjg3QzIyRDE4M0Q0NEY4RkFGRkQ4OEUyRUZENAorOjEwRjNFMDAwQjVBODg3QzJGQ0MxNzUxRkVBRUVBMTE0OTc0RDFGMzk1RAorOjEwRjNGMDAwOUVGQzczRkE3Qzg5QjBCODJCQURENzJCRjhFNjRDRDVDMAorOjEwRjQwMDAwNDE3OTJCM0QyQ0Q2OERGQ0FCQzcyN0Y0QjEzRkM2OTE3QgorOjEwRjQxMDAwM0UyNkY5ODU5MTNGNUNFRUQ2RjNGRkVGOTVFQUY5RkZDMgorOjEwRjQyMDAwM0M2REIwQzEyRUQ0QzdBOUFBM0M4Njc4Rjg5QjczNzRGMgorOjEwRjQzMDAwN0M1M0YyOUY1QkQwQ0RBN0EyN0JDOTQzNzE5REMzODI1MQorOjEwRjQ0MDAwNUZCRTI2RjQ0MDJCNkJBNEU3NzZDQzE3MUQ4MUZDQkY3MgorOjEwRjQ1MDAwOEI0QTA3M0I0MjY1MDJFQkE1RDJDOTlDOTQ1RjkzQzREQgorOjEwRjQ2MDAwREM1NDI2MzMwRjk1NDM1ODIzOTU2OThDRTc1MzY1QjBEOAorOjEwRjQ3MDAwMkUyQTg3QjEyMzU0NjZCMTVFMkE1RENDNjlDMjMyODdEOQorOjEwRjQ4MDAwQjlBOTFDQzkzQzU0N0E5ODkzRTJFNDZGQzYwNzMzOEYzQworOjEwRjQ5MDAwMDJGQ0U2NUVDNUM4NkZDRjdDN0JBRkQxRTA5QzdBQUE0OAorOjEwRjRBMDAwNDQxRDExMDhFOTZBMjZFM0M4RTc3QjhBQjdDRjkxRjVDNgorOjEwRjRCMDAwQTdBRkQxQjA3RDNBRUY1RjNGN0VGRkNGN0MwRUUyMzc0MgorOjEwRjRDMDAwQTJGRDE3QkNCREFGRkU2RkQ3NENDN0Y3MkQyNkFBRkYxNAorOjEwRjREMDAwNDBGNDdGQkM1ODVCODJGOERBMzQ5RUQxNzkyNzE2NkJGMgorOjEwRjRFMDAwQ0JDMkVCNEYxNjY5MERFMUY1RTMyNURBQjVFMTc1NTZCMAorOjEwRjRGMDAwQTRBRDQ0RkM5MUY1QjE0NURBRjVFMUY1QjYxMkFEOTE1NAorOjEwRjUwMDAwRDc3OUJFRTk5QjE2OERGNDVERjhFRDU2QzY3MTdDQzNDNAorOjEwRjUxMDAwREYyMEQ1REI0NDc0QjM0NzMxRTNCOURBMDRCRDU5RjFEOAorOjEwRjUyMDAwMUM1NUE0MjNCN0REODZBNTg3RTdGRDA0NjMxQ0MxMzhGRAorOjEwRjUzMDAwRDMwMEY2OEY4MThFODJDODlGMDAwRjJGNTFCQzZEMzQ4RgorOjEwRjU0MDAwOEY4MTlGMjgzRTkxM0Y5OEFDOEY5QjAwQkU5MzVGMzU4MworOjEwRjU1MDAwQjg4NkRCRTk4QzQ1NkU5N0YzOUUwRkNGOTkxNkU2RTdFOAorOjEwRjU2MDAwQ0QwOThEMUI2RDFGNDZGQzNEMjJGNEJDNkVBMUU3QkQ4RAorOjEwRjU3MDAwMjlFMkM4N0RGQjBFOUExM0NGREE0Mzc0MUNERDNFMzRCQQorOjEwRjU4MDAwQjNCM0UxRkNCMkRGQkVGRjU0NjMwMUJBMEUzNkQ5OUNCRgorOjEwRjU5MDAwMjhFRjdBNjJEODZCNjhBN0Y5OEVBOTBDRjU4Q0FGQkEwMAorOjEwRjVBMDAwREU5QUEyNTk0RjcyQkUzOENDNDlGOTAzNzI1RUMxNjcyOAorOjEwRjVCMDAwN0FGMDlGQTBFNzVDM0M0OERBOTc2RTNCODczN0I3M0IxMQorOjEwRjVDMDAwMTJDNUJBNUE2NjI0NUQ5NjQ3RkU3Q0FFRDdFNzVCOEVCRAorOjEwRjVEMDAwQ0M5QjBERUI0Q0REQzRGREFBMDk0OERGMTgzQTdCRTI1OQorOjEwRjVFMDAwOEY0RThDQTM3NUNDMzQzMUU0NTM2REQyQ0Y2QkYwQzcwMgorOjEwRjVGMDAwNkQ5OUIxQ0ExOUVFMEY2RTRCRjAyQjE4QkZDQzA4QzQzMQorOjEwRjYwMDAwNzAzRjQ0MzJGM0M3QTAxQzJENzc5NzUzREU4QzRGNzVBMworOjEwRjYxMDAwOTY2M0JEOUE1RDkxMDdGNUM1OURBQUFCMUNFNjNERDRFNgorOjEwRjYyMDAwRjlGNDJBRjQwMzJFQTlCNjUyMUNDM0EyQ0Q3QTlGRkI4QgorOjEwRjYzMDAwRkY3OEZFNDY5MkMwRjNENjBEMzY3NzAwRTE5OEUyMjBCRgorOjEwRjY0MDAwQkY2RDdFNUI2MTM5REFCQjJEOEVBNDI0QzRDNUE0RUFFQworOjEwRjY1MDAwNjVFNDM3NkM3MUI4NUZDMkZCMUQzRUE3ODlGMjEzOTk1MAorOjEwRjY2MDAwNTNCMzU3ODBCRUIyRTMyNjczMzlGMkYxQ0MyNzhCMTMyNAorOjEwRjY3MDAwRDRCMDc1OUY2QTNEMTc4MzcxOTAwNzlDMjY2QTdGNjA5RQorOjEwRjY4MDAwNEQ5OTdEOTkwM0VGMzE4MkJEMDBFNTIxRTc0OTBERjVFNAorOjEwRjY5MDAwRjdFREQwMDdGRDhEQjczNzlDRUMxODM1QzAzOTI2OTRBRgorOjEwRjZBMDAwNUI3NTc4MUJFN0Q2RDc2RDA2N0ZBM0M1QTAxN0Y0OEVEMAorOjEwRjZCMDAwMTc3OTIyRTNEODM4M0NFN0IxOEY3RTQ5RjZFRjIyODdFRAorOjEwRjZDMDAwOEJGQ0VBNjVFRDBBRTVDNzA0MEZCQUIzNTBERjNDQjUyMQorOjEwRjZEMDAwNzkzNEU1QkJCNEI2RUJGREQxQzE0Qzk2ODVGNzdERUEzNAorOjEwRjZFMDAwM0ExNEQyNTdENUQ2OEY5QkYxQkRFMTc5QUU3NDFDNjcyMQorOjEwRjZGMDAwQjhCQjM3REQxOTQ2N0YwRkZDRTQ4NzMxMjhFRjVBRjE5QworOjEwRjcwMDAwQzIxQUUxMTFFMzcxMjE2MUFGQ0E3QkU1NzVDRTczMzU5MQorOjEwRjcxMDAwQThGNzJGRTk3OEMzODNGMDRGRDQ0QzQ0MzNDNzJERkVBQworOjEwRjcyMDAwMzQzQ0ZGOEREM0U3MTM1REUyM0QyREQ0NjNGQUU5QTNBQQorOjEwRjczMDAwOUZDMzNBQzNFRTI3QjQyNUU3QzRFMkJDMjFGQ0Q1MTIyRgorOjEwRjc0MDAwNzBCRkE3M0I4QTQ4M0ZEQUQ5NUU0NkY3MDE4Q0UzRENGRAorOjEwRjc1MDAwQjY5Njc1QTFERURBQjZENkRFMTU0OUZGQkQyRENCOTM4MAorOjEwRjc2MDAwODVGN0I3Q0Y2Qzk5QkU5RUMxRjk5RjM5QjgyMjBERUZDRQorOjEwRjc3MDAwQkIyRkVEQjBCMTE4NTdGRkZFQTdCNzhDQTdGOTk2RTJFMworOjEwRjc4MDAwM0Q2QTlDQjc2MzlFMTVFNUM2RUNDRUU5NTY4NERCNkRGOQorOjEwRjc5MDAwNkIxNzNDMTkzRUNGQ0ZDQUJDQTM0QTgxRkVFMjNBOUUwQQorOjEwRjdBMDAwMjQzQzcxQjA4MDBGRTFGQUVCMjk1QTE2RUExN0E3NzNDRgorOjEwRjdCMDAwNTlDNDdDNEU3N0E5NDJGQ0ZDNzc1MzNDNzQzRkU1NEMxRQorOjEwRjdDMDAwNjZFNDdFQzVBNTVDM0Y3RkE0RDQ0NUZERUJDQ0VDQjVEQgorOjEwRjdEMDAwRTVDOTY0MEYzQTkxNUU0RkI1MTc1MUZDQ0U4MjcxNzczRgorOjEwRjdFMDAwOTA4Qjk2N0Q1RkFFNDVGQ0ZGQTRCQUZFRURFNUQwREVDMgorOjEwRjdGMDAwMzZFN0NBRjdCMDFDNkI2RDI0QkQ5OUZENUUyNTdBMDAxMworOjEwRjgwMDAwQkQ5MEVFODlGRDY3QTVEREQ5MTI5NjQ3ODhGQUEzQTZCQgorOjEwRjgxMDAwRjM2Qjc4MThEQTFGOTY3NjM1NjAwNUZFNkUzOTcwOTZCMAorOjEwRjgyMDAwRjQ3MEM0NTcyRDBDN0ZFOTM3NEVFOEYzMjIzRjI0NkQ2NgorOjEwRjgzMDAwMUNEREJCQTM1RkRCNjU1N0ZBMDM1MDlFNkNBRkI3NDc3NworOjEwRjg0MDAwM0FDN0U4RjM4NzhEOEJGQUVEMENBNkM1ODRDRDBGNTIyRAorOjEwRjg1MDAwMzE0MDdFNkQyRjlGQUZBRjlGNjgwNzMzNTRBM0Y1MDlFQQorOjEwRjg2MDAwQkREQ0Q4MkVENzNGN0E5QjlFM0U5Nzg5RjM5MUZBNzlEQgorOjEwRjg3MDAwQjRGNTdFQzdBRjdGQUYwNTgzMTM5NDk3NzE4NThFNUUxNQorOjEwRjg4MDAwMkU1MkJCNTY2MTVDODVCREM1RjkzRkQ4NzVDQzEzMjE5RQorOjEwRjg5MDAwQ0UxNUUyQjNCMEY2MjEwMjdFMDBDRkY1QzlGM0M5M0UyMgorOjEwRjhBMDAwODlCNjBFQUJGRjg4OTYzRDI2NjRCRjdEMjc0REJGMkVERgorOjEwRjhCMDAwRDlBRkE1OTRDN0MxNkQ3RTE2QjAyNDYwMTlBMEZCMUNGQQorOjEwRjhDMDAwMzY3ODFGRTVGN0E3RDUzNzNBMkY4QjQwMTdCMjM0RjJCOQorOjEwRjhEMDAwMkRGQ0I5QzJFMjNGNDYzRTgxNjgzMDUyRUEyMzI2RkU0MworOjEwRjhFMDAwQkUxNkM2RTdFMkVGRTJGQUVGRTk2RDBBRTlCRjFCQjcyMQorOjEwRjhGMDAwRjAzQzhBNEZGRDUwMjdFNTgyOUYxM0FBMTY3RjEzQ0E1QQorOjEwRjkwMDAwOEUyM0VDREVFMUIyRTdEQTZGQkZDOEE1ODNEQjEyOEE5MworOjEwRjkxMDAwNjc4OUY2RjcxRUZERDE2QkQ4RkVFRUUzM0ZGMkUwNzI4OQorOjEwRjkyMDAwNkY0RDVFOTJDMEY5RDY4OUM1MzhDRjk5OEJBREU0OEYwMworOjEwRjkzMDAwQzE5RjVERTIwNzc0NUNFRUI3RTlGMDcwRTNGRTQ3Qjc4NAorOjEwRjk0MDAwMkQ0NkI5QjNERkVFQzY3NEJDQTVEQkY0RURCNkI0QjA5QQorOjEwRjk1MDAwN0QzMThFNUYzRTFEOUM4MjM5RjM4MDhFOEVGRkU0NUY4OQorOjEwRjk2MDAwRTk3RTc4MkNGMjRGQTRDNzM1MzZCQTE3RDY4RjBFNEFFNworOjEwRjk3MDAwRkJCRTMzNDI3OEJCMzgxNDg3QTJGQjIwOTJBRTRFNkU5QQorOjEwRjk4MDAwNkEzOUEzQzIzOEVCRDc1ODVERjQzRDA1ODNGRDc1RENCOQorOjEwRjk5MDAwMzU0RjRCMEI4QjBGNUJEN0YwN0I5QTJDREM0RUNDMDk5MQorOjEwRjlBMDAwRUQ1RjhFN0JEQzU3NkY3NzM5RkE4RkQ3MEZFRkEyOEMyNAorOjEwRjlCMDAwMzdBODRDRkIyREYyQzVCNDMyQ0ZDQkE1MTQ4RkFFQTcyMAorOjEwRjlDMDAwN0QzN0VENUI3M0ZDMTVFODczN0JBQ0Y3RDVEMjEyNUMyOQorOjEwRjlEMDAwRkY4ODcxMEFERTk3MzFCQkU4REU2MDZCQUIyOTA2Rjk2MAorOjEwRjlFMDAwN0U0Nzk3Mzk2NjI0QzJCQkQ1NDQ3MkJFQTMyQjM5NzZCNQorOjEwRjlGMDAwMjRDQTI1ODc4OUUyQTcyODU3RDQzMEZGM0U5QkMwRjk0NworOjEwRkEwMDAwNjQ0ODdFNzgxMkMyRjU5RjU4ODE4RjY3RjI4NEZFMzM3NgorOjEwRkExMDAwODNFQjNGQ0ExMzA3NDhFRjY4NkRFMzcxMkFBOTZGMzg3QgorOjEwRkEyMDAwMDVGRTM4NUI3OTFDMzI5QUZFODM4QzA3RDcxRDVGQjJDNgorOjEwRkEzMDAwQzQ4OTdDQUQyRDgxN0Y3RjYzQzkwQ0I3MEZFRjczNUVFNgorOjEwRkE0MDAwRUE2MDI0Mzc4NkUzQTUwQUQ0QjMxQ0NDM0YxQkU2NTFGOQorOjEwRkE1MDAwOUQ1Q0JGRjE3NjMwRDI2NzkyMUMwRTM3ODIzQUI1RDNFNworOjEwRkE2MDAwRUZBMzc1NkI5Q0NFRUNGMDFGQzIzMzM2NEY2MzM4QkVFQworOjEwRkE3MDAwRDlBMDU3NTgwRDdBODM2QUE4N0Y1MUFBRDcyMzk4RDA2NgorOjEwRkE4MDAwQkY2NTNDMzg3RUYzQzA3OTQwRDJBRkRCMjFGQzEzQTBDOAorOjEwRkE5MDAwM0ZGOUU4REU0ODI5RjMyM0RFMzI0RDczMjUwRjA5RDlGQgorOjEwRkFBMDAwMDFFODc3QzRGNkI0NTJCNkEzMjUyQ0ZFQTQ2ODJGOTJDMQorOjEwRkFCMDAwREY0MEZBMjVBNUZGNDFGQTM5QzY5NDgyQkQ5NjEwRTZDQgorOjEwRkFDMDAwOEZGODE1OTg5NjJBQzVDMzkyMjYwMDlFNjQwMzNCMjBBMgorOjEwRkFEMDAwN0IzMjlGMjlGQzdBQzZEN0Q0RDM5QjJFMkNFRUYzQjM2RQorOjEwRkFFMDAwRTdGOUZEQTA1NjUzQUM3QjY3NzZGRjdFQzU5MzM5N0Q2MQorOjEwRkFGMDAwQzYxRUMyMUM0OTk4RTUyQTNCRERDMzk5QTlFRUExN0IyRAorOjEwRkIwMDAwRjc1QjhCNEQzQ0FGOTkxRDcxQTIzRTkwM0Y4MUNCOTMyQgorOjEwRkIxMDAwRUMzMkNGQzVCODFGRTZGMDY0MjNERTAwM0M3QzE2QkM5NworOjEwRkIyMDAwQkYyN0ZDQjY5OTM3RTdDNEEyM0VGQzc2RkFEOTJEQThDOAorOjEwRkIzMDAwOTdGQkRBNENDNDZGMjQxQ0IzOUI0RDc3MjAxQTg2QzUwMworOjEwRkI0MDAwRTcwMkU2QzI1MDlDNkRBM0U3OUMwRkVGMEJBNzRFRTZDMQorOjEwRkI1MDAwN0VEN0Q4NzlBNzBGQTIxRjc0QzM0ODEzRjlEOTZGOEQyOAorOjEwRkI2MDAwRDcyODZFMDdGNDYzNTc3OUJDRUUyNThDQjdCNUJCOTJFNgorOjEwRkI3MDAwOTJGMEJCM0I4RjI3RjI3NjI2Q0VGMUVFRjgyMTNCQzIwNgorOjEwRkI4MDAwRjM0QkUyQzRCRUVGNTYyMkVCMkI3RjlDQzRFNTRCQ0Y3OAorOjEwRkI5MDAwN0UwMEU0MjBGMjZCMDk3QkZDMEZENTlBMjNCQzBFNzAyQgorOjEwRkJBMDAwODNGN0ZGQzVDN0VERTk3OTEzRkU1MEVEMzM5MzlEMjQyQworOjEwRkJCMDAwRUNGOTk4MUFCMkQ3RDFDNzA4RUQ3QjI2M0M1OEVEODNGMworOjEwRkJDMDAwRkFGREQ5OTFFN0VEOThDQ0U3QkRGRjY1RUY3MEQ0NjdGQQorOjEwRkJEMDAwODNGQjAxN0YwNjQ1M0FERjAwMzM5NUQyQjg1OTE4OTc2OQorOjEwRkJFMDAwMEFBRUI2MkQ4OEY0MUQ5QjMzNjI5RjVCQTFDRDM2MjhFQgorOjEwRkJGMDAwQTRDNzZFQUQzNkVBQTk3RUUyNTc5RjM0OUM3QzgxRDJDMQorOjEwRkMwMDAwQjQ4MTdGOTQwMDNEMjRCMkM4RkNGMkZDRkFBQTNCMERGQgorOjEwRkMxMDAwRjVDRTk2RDVDQTdBRTQxRjJEQTBBRjYyNUMzMEQ1NjlDNworOjEwRkMyMDAwMjU3REI1MzVGMTg3RDNGMTVDM0U2OTYwNEVCQ0VGQkFGNgorOjEwRkMzMDAwMTNENDNFRTQ1RkU4NTdDNTdCQUNCMzlCMzg5RkYxM0FFMQorOjEwRkM0MDAwQjk5RjE1RUMzOENGQTU4ODhGRTk2NkMyNDdBOUJGOUEzRQorOjEwRkM1MDAwQUIzOUZGQjlEOEM2RjM5MTdCMTIxREU0Mzc0RDZDRTI4NgorOjEwRkM2MDAwRjlDNzcxM0VEMDY3NzE3RjMzNzhGRUIwMDZGRjIxMUY2MAorOjEwRkM3MDAwOTJGQUFEMjNERkFDQ0IyM0I2MUFGMjhDQ0Q4NkJDRTI3MAorOjEwRkM4MDAwOEQxM0Y0N0MyOEJFQTQ3ODQwQkRFQTU3NjBGRkUyM0FBOQorOjEwRkM5MDAwMEYwMEZGQzEzMjAwNzYzMDk2Q0Y4M0REOEVFNTZGQzA1NgorOjEwRkNBMDAwNkVDN0I4QzE4QjZCRjNBODdDNjlBRDlCOUVCRkIyQjYyMworOjEwRkNCMDAwOTRDQTY5NTk0MThBMkI5MjFGOTk5QzhGMkNBMDkwMUYzRQorOjEwRkNDMDAwNEZFMkQ3MUJDM0NBMTBERkE3RjNGNjVGNEVBQzdFQzA2RQorOjEwRkNEMDAwMzcwQ0RBOTM2NUZGQjE4NDdGN0Q3NTVGNzUwREY2QUZFNAorOjEwRkNFMDAwNERFM0Y1NTFDRjVFNUQ4M0ZFOUZERTk5REE0MzEzMDA0RAorOjEwRkNGMDAwRUY1MjRDOUVCQTM2RUNGQjIzOUIzQjkyN0Q1RjMwNTExQQorOjEwRkQwMDAwREUxMzhCNkNCRjMzRkM0NDgyREU5RkYzMTRGMTg5MjgzMQorOjEwRkQxMDAwRkU5Q0JCMTVCRThFM0Y0RTdBRjA1RUE0OEI0MUYzQ0NBOQorOjEwRkQyMDAwMUVDNEUzQUMxQ0JEOUY3RkYwNDRDRTc3MTY4QjMyRUIzNAorOjEwRkQzMDAwMTVBMDhGMDFFMDJFRTkyMzVBN0JDQjdFNDA4MTA4NzQwOQorOjEwRkQ0MDAwMjVDQkFERjE2QzJBRERDRkFFQjEyRTg4OTRFNzc0NDA5RgorOjEwRkQ1MDAwRDA1NUQ0RjExRENDNjUxQjFCQTJCNzE2ODc5MURFODI0RQorOjEwRkQ2MDAwMTRERkZEQTRFOUM2ODMyODJGQkYzOUJEMzFCMjBGODM0QworOjEwRkQ3MDAwMzUxQUM5RUIyMEQwMUJGMjczQjU4MUQzOUI2QUU2RjcyNQorOjEwRkQ4MDAwMzM2QjBGNzNGRkM4NEVBNDJGQ0M4NzQzN0E4MzdGQ0U4QgorOjEwRkQ5MDAwRjZGMTdBQUE4MURFNUE4Q0Y0RTZEMEQzNUIxMEU5MEQzNQorOjEwRkRBMDAwQzY0QkY0NzFGRDIyQUVCQUVCNUJBNUI3Q0ZCRjIxQkQ0OAorOjEwRkRCMDAwRkQ3QTRBOTBGMjFBN0FCMjFCRDMxMTNFNUJDNUY3RjA3NgorOjEwRkRDMDAwQkUyQTFEREUzNUQxQ0FCRkNGNzE4OTQ2N0U4MTU2MUM0MQorOjEwRkREMDAwQzc0MUZBRkMyNkZDQ0VDQUVDNjFDREU2MjQ4MERGREMwQworOjEwRkRFMDAwRTQwMkZBMEVDMUU0ODk0MzA0M0QxQzcxQTBCRjI2NjEwMAorOjEwRkRGMDAwQkFFNjlDODhGNDc1RTU3Qjc0QkYzMUM1QzRFOUI3RTAwOQorOjEwRkUwMDAwRDkzNzQ5MUU2NEI2NzVDRjlCOEQ3NEI3NUEyNTM5NjlBOQorOjEwRkUxMDAwREM1N0VCNTQ4RTZGMkQwQTlGMTc0RTJFM0QzQ0FFMzdBQworOjEwRkUyMDAwNDJEMEE1NkI3NThCNjI0NzdEQkM4RUI5NzNCM0U5QkJCRAorOjEwRkUzMDAwMzJGNEJEOUI3RjY5RkQ0RjI3OEVEQjNBMzU4OUQ2RTVDRAorOjEwRkU0MDAwNkE3RTMzRDFDQkZENkI2OTY4QkZEMTk1RTZDMkZFRjQwMworOjEwRkU1MDAwMDhCRjJFQ0IxMDFEM0RFNzRGMUNDMDNGN0IzRUZFRjE3RgorOjEwRkU2MDAwQzgwNDQ1RjIwOUNBMDNGNjhBRkI5QjMyMkUxMjk1OUVGRQorOjEwRkU3MDAwMEQ3RURDQThGRUMzNEIzODdDOENFRkM3NEZFMUYzQjY5OAorOjEwRkU4MDAwMDhGRkFGNTFERjkzRkIzRjNBREQzQjFCRjdBNzM4NUUxRQorOjEwRkU5MDAwRTQ3RUUwMDNDQzg1RUI5NDcxQjNCRTNDMjNBOTFGRkE0QQorOjEwRkVBMDAwOThCRjA1RjU2RDMzQTgzMjQzQjhCQTgxRTNGNUU1MUY3NQorOjEwRkVCMDAwMDkzRDcxNDU5OTc3M0U4RUJCODNCOTBFQTI3QzczQjgxQworOjEwRkVDMDAwNzlCRUMyMzNEM0I1MEE4MkU3RDdENDAzNEJDQkI0NkIyOAorOjEwRkVEMDAwMDZDMkFCMTVCM0I1NDUwM0I1QjMyRjYxOTQ3MUExQjg5NAorOjEwRkVFMDAwRDZGNDc5NjZDRTE3OUExNEMxMDcxQ0VCQUQ1MERGOUE5MQorOjEwRkVGMDAwMDhGQ0NDODU3QTNCREZCNzEzRjg4NjhCRUMwQ0JEMUQ3NAorOjEwRkYwMDAwMzEwQjlEOTFDODM3OTA4RjEwNzBCNUI5OTg1Nzk5MjBEMworOjEwRkYxMDAwQzYwRkM5RUJFMDBCQTg5NzA2MDFCNjc3NDA1MzgyOEY1NgorOjEwRkYyMDAwQ0JFQjk2QzM5Q0FGNTg4MUFGNTA1Q0JBOTREQjA5RjIxRgorOjEwRkYzMDAwNUU1MDVDQkU5QkVDMkY1NTFCRDg3RTMwMUJFQ0ZCRTY2NQorOjEwRkY0MDAwODkyMkVGQkQ5MDE1MjNEQ0IyNENBRTNCMjdDMEYzQTI1MworOjEwRkY1MDAwN0I2NjFFOUQwMDhGNEJFRTVCM0ExOEM1RTlGODFENkQ2MAorOjEwRkY2MDAwMTVGOEJEQUYxNTBGOUZEOTgxN0VEMjA5RkY2RTYzRTJGMAorOjEwRkY3MDAwQkI2QTk0NjdGMDc3OTQzMzc0MkUwNzI2OUZFMUZBNjM4NworOjEwRkY4MDAwNzY2NDNDQkU2MjBBOTc3RjMyQ0UzQTAwMUVGQjA5OEYzMAorOjEwRkY5MDAwNDU5Q0YzMkJFMEIxRTMzQzc4RkM1ODE0M0NERUYzMERCOAorOjEwRkZBMDAwRjE3OEVGNDREOEQ3MzU3ODA4MzA0RUNDNkNFRDE3NTgzRgorOjEwRkZCMDAwOEY4NkI3QjM2NjY5Q0YwRUQ0MUUxNjNGRTBGOTQzQUMwNworOjEwRkZDMDAwODFFQzY3MTlCRjM0QUVBNzBERTU2QkVFMDA3RUE5MEQ3RAorOjEwRkZEMDAwM0I2M0QwOUU2RDY5RDhGOTMyN0VGN0IxQTU4OURCRDkzNAorOjEwRkZFMDAwM0RGMTZFN0IyOURBMzc2RkE4RjQzREFCNjhFRkEzRERGNgorOjEwRkZGMDAwRUQwMzY2Mzk3MzBBQ0Y4RjNFQjREQTE2OTgwNkUzNjREMAorOjAyMDAwMDAyMzAwMENDCis6MTAwMDAwMDAzOEI4QkNDRDcwNjgwQ0YzQzVDRENFQTBDNTFCOEZGQTM3Cis6MTAwMDEwMDA5QTg3QTE5RDYxNEQzNjMxNUY5ODNGNjZBQ0U1MDhDOTZFCis6MTAwMDIwMDBFNTFFOTBFMzQ4MUY0MDlGOUNERTEyRjkzODUyM0U0Rjc4Cis6MTAwMDMwMDA1QjdEMjc0NjcyRDg5NDVFOTA4MzYxNzRGMkYyRkU1MjIzCis6MTAwMDQwMDBGMkMzQzU5N0VDNUQ4NUVGQTkzNTU2MTdFMkY3QjRDRjNCCis6MTAwMDUwMDA0MTZFODZDRDMzMUQzNDkxRjBGQUE1RjY3NEREMzgzMzQ4Cis6MTAwMDYwMDA5REQ5QkFGNkQ5NjlERkQxQjU1RjA2Rjg2MkE1MzgzNkYxCis6MTAwMDcwMDBCRjE3MjhGNTlBMzlBRTAyNURCRjQ0MTFFN0Y4NkVERTZFCis6MTAwMDgwMDAwNERENzg2NkY1Q0IzQkM2MjNGRDBCM0Q2MjMyRkM4NzcxCis6MTAwMDkwMDBGNEFGMUFGNDA1QTMzRTYxRDQxRkQ4MjRGRDNERDUzMTM5Cis6MTAwMEEwMDA2NjkxODc2NkU2RjkxMTVCOTk5REJFNEIwMTdDOTBCRTE3Cis6MTAwMEIwMDA3QjUwMUJDQTEzMjAzQTE5NjMwREVFQkMwREZEMkEwQkIxCis6MTAwMEMwMDBFRDZFMUYzQzZCREQ3RjU5NUE1RDcxQzg3RkI2QjU4OUY3Cis6MTAwMEQwMDBGQkZENUFGNkQ5NzcyMDNENkMxNzc0MjlFOTJCM0ZGRUJBCis6MTAwMEUwMDBFNDQyNDY3MkREQ0E1MDFFMUJFOTU1RTYzQjQ5N0Y4MTVBCis6MTAwMEYwMDBGNDI3MjgwRERDQ0ZGMEQ0RDQ2Q0EyMDdDOTdGQjY1NjA0Cis6MTAwMTAwMDA3M0ZCRjc2NzRBMjA0NjE5QzFFOUQyOTUxNEZBM0U1REEwCis6MTAwMTEwMDAxQTUzN0M3MzM4N0Q2QjQ5QTI1NDQ1M0VBQUNDN0JDNUVCCis6MTAwMTIwMDA3MUQwQ0U0RUUzRjNCMTk3NzhERTY0RjM4RkYxN0QyNzgzCis6MTAwMTMwMDBGMzBEMTNGRThDQ0NBNDkwOUYwMkYzMTM1NkYyRjc3Q0MwCis6MTAwMTQwMDA3M0M0N0JDMzQ1QkVFNTIwQkVGRUMwNEMzMURGMTgyODFBCis6MTAwMTUwMDBENTQ2NERGOEE3QkQ1NERBMzAxRTBFNjU4RUUyOEU0NUE5Cis6MTAwMTYwMDBGRkM3MDhENTQzODE5NjA0MTE1RkNGMTBGMUY0MzgyNUZECis6MTAwMTcwMDBDMDk5QzdEN0U0MjM2MzgxOEQ2MjVFMDI0QkUyREYxNzJCCis6MTAwMTgwMDAyOTdCQ0NDMTU0QTIwRkVCNEU5NDQ3Qjc5RTcwQkY4RTEzCis6MTAwMTkwMDBBOUJBQURGMTNGN0M3NTFBM0M2RjdGNDM3NUEzOUZGNEZDCis6MTAwMUEwMDBENjRDREZEQjQ4RDc2NjQwMDYxRkY5QjUzQzc1Nzg2RTQ0Cis6MTAwMUIwMDA2QUE1REQzOTFCREU1MzdEM0I5QTMxQkUzQkQ2RUEzRjUzCis6MTAwMUMwMDA0OEU3QjlDRTQ2RjQxRTg0RjcxMDFGQjZDNzAzOUQyMjM4Cis6MTAwMUQwMDBCRUEyQTc2QjVDMjgxRjQ4QzYzMTgyMTNEQzc2OTRBM0FECis6MTAwMUUwMDA0MUVDQzdGRENEM0FGRjY3ODQ3QzEzRjI5NzlBNDVCRDc5Cis6MTAwMUYwMDBENUIxOTNGNEY3RjVDOTU2RkNFMjI2RTZGNzY0MzUyMTRDCis6MTAwMjAwMDA1RUE2QzRGMkZCQjc4Q0M3MEQ4NkUzM0ZDMkYyRURBRDJDCis6MTAwMjEwMDBDRUM4N0U0REQwRDcwODBFQzFFNkU1NjkwM0U5NUQ1MTMxCis6MTAwMjIwMDBFMzI4MEU1M0MwOUE3MEUxNzE5NEI2NkJBRkY0MDdDMjI1Cis6MTAwMjMwMDBENjI5RjdCRERFQjE1MzU5Q0NCRUNBRkM0QzFGNDc2OTY1Cis6MTAwMjQwMDA2MDVBQ0M5ODA4NzE5NEEwNUZDMTc1MEU2RkUwNzE5NkVBCis6MTAwMjUwMDBFMUMyNUZGRjc1RTMyODU5NTNCRjVFMUM0NUVFRjc3MjlDCis6MTAwMjYwMDBGMUVGQjk4MEQ4RTI5RTMxQzUxM0U4QkM0Q0ExRjU4NTA5Cis6MTAwMjcwMDBDMUVGMjFFMjQ3ODQxQjAyNDVBMEZFM0Q1MTdGNzU0RjJGCis6MTAwMjgwMDBGNzlGMUU4NTdGMUVERUZERkMxRTJDQTUxRTM3NEZCNDdBCis6MTAwMjkwMDA1RjMxRkFCMzAzOThCQjM1NkZDMzJBMTFDN0QyQzcxRkFBCis6MTAwMkEwMDAyRTA3QUIyRURDQ0Y4RkRGMEIwOEFGQ0YzM0FDQTdDQzQ0Cis6MTAwMkIwMDBBQzhGMTNDQzcwRThGQkNGNEFENkI3OTcwRkIzRjUzQkEyCis6MTAwMkMwMDAzN0Y0Q0JEMzdFOTVGRUZCQkQzNUVFNzZDNkJGMzcxNTMyCis6MTAwMkQwMDA3NjBFRUFGOUVCNzZDQzlCQzNCODhGQUIzRjlFODRDNzEyCis6MTAwMkUwMDAwMTNDQkYzNEIzQTQ2MkM0MTcxM0U5QTVEQjdEQ0JFRjk3Cis6MTAwMkYwMDBBQTAyRkE1OTBGNzI5NEYzNjI5NzhFRkU0MjcxOEY3MkJFCis6MTAwMzAwMDAwREYxNDlGQUZCQTNEMUQzNDk0NzBFRjlGRjg3MzcxREY5Cis6MTAwMzEwMDBFQzlBMzE5OEY1QzUwMTZFOEZGNUJFMzEwOUJGMTdFNDJGCis6MTAwMzIwMDAzOEE3QTAxRTMyQkNFOTM3RDQ3RUU1QzI5MjAxRjEyODdECis6MTAwMzMwMDBCN0U5NTBENzhDQjBFRjA4RTY5QTNEMjZCNDlGNzM5QjdGCis6MTAwMzQwMDA1RUE0RTc1MUY1RjlGRTdDODRGMkQ2NzIwNTVFQzhCQzY2Cis6MTAwMzUwMDBDMEVEOTgxNzA4NzBDRjZEMTBERjA3RUUxQzM4RkY0RDA5Cis6MTAwMzYwMDBDQUMzRDZCMEZDM0U0QTY2NzAyOTJDN0M3QzI5RjdGQUI5Cis6MTAwMzcwMDBGOUQzMTlGN0ZCQ0FGOUZBRjIwMjBERjNGNkM5M0YyN0QwCis6MTAwMzgwMDA5NzdGQ0Y0Q0Y3N0UzMTI5MjVFQzVFODZCOEM3MDFGQkZECis6MTAwMzkwMDA4RTk4MDdDQTI2OEI3QkIxRDFGM0Q4QjhERDU5RjlEMjM0Cis6MTAwM0EwMDBEQjM4RkU1N0I2M0JBMzhDM0IyRDJCMThGMTlFRDRBMDE3Cis6MTAwM0IwMDA4OUMyOEYxQzEzQ0M0NEJGNDE4RjI1QjI1RUZGQjM5OTE1Cis6MTAwM0MwMDBCMzkyMjcwRjYwQTc2MURFMkNDMjMyREEzQUJGNkVERTJECis6MTAwM0QwMDBFQzA0MTE2RjkyRjE1Njk5M0YyQkYzNjJDRjk3M0ZGQkRDCis6MTAwM0UwMDA0REZERjA2NUMyMUYxMDM3OTk1MTY5OEM0MzE4RDczQkZBCis6MTAwM0YwMDA1OUY4QzdCM0NCM0M5MzI2RDM3REFFQzhGMTA3RDlGRkRDCis6MTAwNDAwMDBFRDc0NkI0NEJGRjhGRDUzMDU5RUY0QkY3RjQ0RjlBMTIyCis6MTAwNDEwMDBCMERFRTQ3MDNCNDhCRTI3RjNGMjhERTM4MTVENzRDNTI2Cis6MTAwNDIwMDBFNDMwN0ZBMEI3Mzk5N0ZDN0Q2MUY2OTZDQzg3MjVGQTNBCis6MTAwNDMwMDBEODJBRkMxMDdENzQ2MEQ0MEI0NTNDQzRBODE3Q0FGOEI4Cis6MTAwNDQwMDA4ODUyQ0RGRDEzNDAxRjM1MDgwN0Q0QkIzMDJGNUREQTJECis6MTAwNDUwMDA3OTMyOUY1NEU2OEQ2MjVFMjhDNUEzQkVBNjVFRjVBREQ3Cis6MTAwNDYwMDBEQjUzQ0QzMzI5QUZBQkM1NTlGNkQyMzdCMUE3REFBN0U1Cis6MTAwNDcwMDBGMjdCQzJEMjlFRjIzQUI4REZDMThCRjZENDI1RkRFREY1Cis6MTAwNDgwMDBBOUUyMzI2RjJCQzJDQjY4NTcxREZGRTk4Nzk0MUYwQjdGCis6MTAwNDkwMDA3NjY4REJFNDZGODM0RjE4RkM1MzIzMjY3MEZDOTY3MjVBCis6MTAwNEEwMDA1QUZBRDMwRThFMzRFOUZDQUVCM0Q0MzUwNzI5NUZCQ0JCCis6MTAwNEIwMDA4MUZCNUIzMkI0MkVCMkQzQUMwRUFCMEJGRDJERTYxOTMzCis6MTAwNEMwMDA5QzhFMkNGOUNDQUZGMTM4MkZGOTU3NjQ1RTU5OTI2M0FBCis6MTAwNEQwMDA1OUM0RkJBNkQyNEUwQzRBM0JEMUM3RUZBN0Y2MUNFNjg3Cis6MTAwNEUwMDA3MURCMzhGNEI3NjBDNzcyMkVEN0E0QkZDNTkyMkNGQzVECis6MTAwNEYwMDAyRDg2N0NFQzM4ODM3RkM1RTg2Rjc5NjJCMkRFREY3MkNGCis6MTAwNTAwMDBCRkUyQkEwRDQ5RkRFOTZEMzM3Rjg3QTBGOEI3N0I5NzRECis6MTAwNTEwMDBDNkExQTlGRjhDQkZFREJCQzJERjcyOEYwM0Q2QjdGRkE4Cis6MTAwNTIwMDA2REJEQkZDNTE4RkY4QTEwRjcyMkU3RDU5OTAzNEY5MDFDCis6MTAwNTMwMDBERjQ0QzI1N0QyQURGNDY3NjUzNEYxRUYzN0NENTJGN0RGCis6MTAwNTQwMDAyOEM4NUZCNjNBMzg3QzU1RjQ2NzI1ODdGQzU5Q0ExMzJBCis6MTAwNTUwMDA3RkVBRjM0QkQxN0REQzdFNzFGMkM2OTc3MTlENjY2MEI4Cis6MTAwNTYwMDAzODFCMjNGOUI3MDQ1QzhERjFBODg0MjY3MTBGRjg1QjYyCis6MTAwNTcwMDBGMjY3QkQ2MzgwNkZFMTNENDU3N0UyNzc4RDhCRUZBQjJFCis6MTAwNTgwMDAzODhBRTVCODFEMzcwRUJFMUFDQUQyODdFRkFDQzBGMjYyCis6MTAwNTkwMDBCRjVFMEU2NkEzREU2OUY0NjNCRDgyMUY0MTRFRTkwRkE0Cis6MTAwNUEwMDA1RjIzMUMyNTlFN0ExQjI0OUUzQUFDNDRCN0Q1MUM4RTMzCis6MTAwNUIwMDA0NjM4QTU2QTFDNEY3MzAxNEY0MTQ1RThDM0JGOUU0NEFFCis6MTAwNUMwMDA0RTlGMTkzM0RDMkZBMTdGNkQ3OEJFOTk0NUMyNjM3M0FFCis6MTAwNUQwMDAxM0ZGNUU5Njg0RTM3NjAxQzdBNDg2NjVFNDI3MzRFMkMwCis6MTAwNUUwMDBFOUYwQ0VBRjg2OUZFQTE0RTExNzEwRjA3QjZBNUJEMTg5Cis6MTAwNUYwMDA2RDA4QjdCREY3NTZGQzBFQ0I1RkY4NkY4QzQzQjhFREI2Cis6MTAwNjAwMDA3QkU4Q0VFRjBBRjhBNUQzRjc3NDBERjA1QjE0MDU3RUY2Cis6MTAwNjEwMDBEM0RDRENCRUZFQjhDQzlCMzgwNUU0QzI2NUMwMjFEMDdCCis6MTAwNjIwMDAxRkIyQjNCREQwQUU4RjAzRTlGOTY5RUFCN0U0OUYwQTAwCis6MTAwNjMwMDBGNkYxNTNGNjVBRUU1N0UwQTc0RjFCRkM1M0E5M0U0RTc2Cis6MTAwNjQwMDAzN0E5QkUxMzQ0OUYxOTQwOUYzMUU4QUY2QUUwN0EyNDZFCis6MTAwNjUwMDA4ODdEN0Y5QzgyMzYzN0U3QUY1MkFFMjFDQjMxODFGMDY3Cis6MTAwNjYwMDBEOUVFRTQ3MUU3MDg3RUNBMDA3REVGRDdDMDg3RDE4MTVCCis6MTAwNjcwMDAxMzhFNzcyMDU3Mjc0QzQ5MDlDOUJCRUQwRDNDOEU3NjY4Cis6MTAwNjgwMDBFMzRDQ0YyNDg0QUI4Q0FCM0QzMzVEOUIzQzg1RUUyRjlDCis6MTAwNjkwMDA3QzZERkZFMzBDOUM0N0ZBMUYwMTRGNjlGRjJBRTAzQjhBCis6MTAwNkEwMDA3RURGRkM1MjkwMjc2OEZGOUIxQjgyMTY5NDJCQjU0RDcyCis6MTAwNkIwMDAzNzI4NUUyOERGOUVDOENGM0YzNUNEQ0IzMENFREFERjdFCis6MTAwNkMwMDA1RjE3OEM0N0JEN0REQUM4M0U3Q0E4MDhDNzg3QjFBQkYxCis6MTAwNkQwMDAzRkI5MTNGRDVDRDFGMDIxMjM0QUJFRDJGOUYxQTE0QzAwCis6MTAwNkUwMDAyNzVGQjdGNkUxNDNFMzg2NTFDOTE3OEUwRjQ3OERGOEIwCis6MTAwNkYwMDAyMEU4M0ZCNTIxNzgwRkQyQUY1OUUwODNEOTA5N0MwQ0FGCis6MTAwNzAwMDBFMEExMjIxRUU0ODdFMjlFOTIxRTgyMjJGRkMwMDg5RjgzCis6MTAwNzEwMDBBMDZGNDQ5NDNDODQ1NTRBRTkwMEVCQkJFMEZDMDMxMTE0Cis6MTAwNzIwMDAwRjZEMTFGMTUwNkYxM0NGOTdFRDU5NkQ5QkE1Q0YzRjEyCis6MTAwNzMwMDA3MEQzQkE2NzNCMUE5NUYwM0NGRTA4NzlCMkI3RTFGOTdECis6MTAwNzQwMDBDOTM4QTc4QzZCN0U1Q0U2RDk4Q0NGQTdFNUYxNzMwRTE4Cis6MTAwNzUwMDA0NjhGMzMwNUYwN0UyQkEwOUZEMzgwRTc3NzEzOUVDQjg3Cis6MTAwNzYwMDBGQjA3NDI4RkJCNzFBNkI2MTU5RjhGQjFGQTI5Q0YxOTJGCis6MTAwNzcwMDBGNEJEN0JCMUJFN0RGRkEzRkM3QkJCQzIwRjI5RjNGMkFFCis6MTAwNzgwMDBCRUIxREYyQ0MxRUFDN0ZCOTJEMjZGQjYzNURFQkExMzE5Cis6MTAwNzkwMDBDRkJCOEUwNTY3RDI3NzdFMzE0RTgxN0VBN0NEMzZDQTFDCis6MTAwN0EwMDA2QkFDNTdDMEYwNDZCRTc4QTlCNzZCMEFFOTREMUVDQUJDCis6MTAwN0IwMDBDN0Y1NTZEQTlEQThFN0I3MjZDRTRBNDNCRTUxQkI1RUMxCis6MTAwN0MwMDAyNUI5MUVDREJFOTFGNDU2MEJGQzg2RThBRDg5RjM5QjhFCis6MTAwN0QwMDA1NEMwMkZDMjM3OUY0MkZDMjYwM0Y4MERFNzNGMUE0MzRGCis6MTAwN0UwMDBCRENFOEM3NEU3RThDRjZGQjYwRTAwRkYwQkU0M0IyRjU1Cis6MTAwN0YwMDBFMTc5NDZFMDNCQUZFMDNFQzNGOENFRUZBNjdDODNCODlDCis6MTAwODAwMDBDN0E1NTMxODhGRTc4OEZENjMzQzgwRjY4RkY0MTVCRUFCCis6MTAwODEwMDA3RkEzM0VEQkI3NkYzRDdENDlCQUZCNUY0MDY3OUYyM0Y3Cis6MTAwODIwMDA1QzIzRDBEOUZGRjk4Njc0QTY0RThENEM2N0U2QTk3QTcxCis6MTAwODMwMDAzQThCOTlGQThGNDk2Nzk5NTM0QkNFNEY2NzVEMDJBRjU4Cis6MTAwODQwMDA2NEZFQjZENDJCMkU1MkJCQ0VFNUUyRkNGRjhGRjNCNzhECis6MTAwODUwMDA2RjlGQzRGREE5RTdDQkRGQzZERjg1Rjg0RjhERjlEQ0JDCis6MTAwODYwMDBGRkY0QTdGRUFGRjVBN0ZFNzhFQUI3RTA0RkZERjc0OTIyCis6MTAwODcwMDAyRUQyREI4QzdFRDVCREUzQjVCNkE5MDNDNDk1MjU5RkVBCis6MTAwODgwMDAzNjRCM0UwREZDMTg3OTZGMkRGMDMzRTRDRkE5RDVCRDYyCis6MTAwODkwMDA3RjdFODZEQjlCRUUzODE3RjkxQkVFQzBGNTY2MDg3RTdGCis6MTAwOEEwMDA2REU0Q0JBMDc3REUzOUY1RUZFODZGRjg3QkY5MERDQjdGCis6MTAwOEIwMDAyNjVGRDg3REZCQjJDOTJFRTE3NzhEN0NFRkJFNDVEODhGCis6MTAwOEMwMDBGNzJEMzAwNkRFRDNEQkJFREFFQTZGODUwNUE3OEJGM0EyCis6MTAwOEQwMDAxOUQzNzBFNTY1NDg2NEFGQUZCMEM2MDYwN0IwOUJFNEI2Cis6MTAwOEUwMDBERjkxRTg1OEVCN0RFRTc0NkVGOEZFNTg0NEI5RDVCNzQ5Cis6MTAwOEYwMDAzRjgzOUUxQzZFMzdCOUJFODJERDk0MzI0REVGODczMjQ2Cis6MTAwOTAwMDAzNzcwM0JENzBDRjI4RUUyRkE1QTY5MDBGOTc1ODY0RkMwCis6MTAwOTEwMDBFOUMyRDQ2MDZGNzJBMzgyNzIzMEI1QzE0M0Y5RjA1RjRGCis6MTAwOTIwMDAzNUFFNkZDNEEzNjg3MUZFNkYzQkFFNkZDQzFCRjg0NzRBCis6MTAwOTMwMDA4OUYzRkZGNzU0RkQ3NzJENjU5QzVGRkE1RjhENzFGOUEwCis6MTAwOTQwMDAzMUQ2OEU3MjkyQUYzNTI2RkMwQjE4QUM3NUZGMDczQjgzCis6MTAwOTUwMDA2RkMzRjM1RTY4QTc3QjFBQzY3QzgwNjg3MUZCMzE0OTYwCis6MTAwOTYwMDBENjYwNUM0RUY0RjhCREY0MTdEQzZGNjk3QzE5RURGMENECis6MTAwOTcwMDBGQjlCNEQ3NEJFQzZCQzgxRkM3ODlFM0ZGRUQ0QUYzNjU3Cis6MTAwOTgwMDBERDQ3RjkzRjUyMUZBRTE2N0NBNjQ5QjFEMjc3MURBQkE5Cis6MTAwOTkwMDBGREM0NjdCQ0RBRUU2NjhDMjdBNzNBNTgxN0VBNTk0N0I4Cis6MTAwOUEwMDBBNzcyN0E1MUQzMzRFMjMzRTY2QTJGRTE5NThDNEZENEEzCis6MTAwOUIwMDA2NkYxN0I3MzMxMDJCRkQ0OTE4REFGRTJGODg5NDc1NDYxCis6MTAwOUMwMDAzN0M2QjczNzYzNTdFMDE5RjEyODJCNTE4Rjk4NjBBMkNCCis6MTAwOUQwMDBCQzg4NEVBNTkxRkMxRTFEOEE4QkZFRkU0NzYyQkU5MzBECis6MTAwOUUwMDBGNEEzQzcxM0REQkY1RjgwRUI0RkUxN0ZBN0U0RDA5QzhBCis6MTAwOUYwMDA2NTY5QzgwN0Q3MzczN0E3RTFGREM0RTI2OTNDMUZGMTM1Cis6MTAwQTAwMDA4RTM5Njc2QjI4OEU5RTA3RkE5RjQyQTVFRUVGRDlDQUYyCis6MTAwQTEwMDA3MkE3QTY4OEJGQjdFNEE3N0M0NDU4RjczNjdBNkZBNEJDCis6MTAwQTIwMDA5NUZDNkNBQTc2Rjc4REM4MDdENDUxQjMwOEFGM0IxNDc4Cis6MTAwQTMwMDBFN0MyQzU3ODVFQjk1NkQyNjM1QTczQzcyRDU4MDJGQjE4Cis6MTAwQTQwMDBEQTkwRTIyOUNGQzY3MzREMUM0OUZCNkM0RDFDOTI4MDk1Cis6MTAwQTUwMDBGQUU4ODZGNDFDOUFCRjVERjE5NjY3RTM3QkU5MjZBMjZCCis6MTAwQTYwMDA2QjU1QzRFNzM3RTQyRTdCMDlGRjBFNDg0Qjg2ODlFMUJFCis6MTAwQTcwMDBCRDgzQ0VEQ0IzRUREOEFGNzMwMkZGMjMzOEM2RjVBQTMxCis6MTAwQTgwMDA0RUZEM0QyOUZDRjAxMUYyNkYzNThEQzdDNTU1MTExNzhDCis6MTAwQTkwMDA1NzBENzFFNTMyNEQ5MTdGNjc4M0UyMEUzMTgyNkZENTNDCis6MTAwQUEwMDBFNkFFNUI0MERGNEY3MDU4OUQ4ODY0MkRGMUMxMkFDMkNECis6MTAwQUIwMDA4RkQ1MTY4NjcxM0E2NkVFRDBFOTY5QjdBREQ1N0ZGRjVFCis6MTAwQUMwMDBDNTkxQUY1RjRGN0JERkZEODQ2QzJGRjIxOUZBMUJCMDJECis6MTAwQUQwMDA5NDJGOUVFODQ1RkM0MDdFQ0I5M0ZFRTI3ODNENDZENEMxCis6MTAwQUUwMDAwMzE2QUYyRkMyRjlGQ0IzRkM2N0Y5Q0ZGMjlGRTVGRjA1Cis6MTAwQUYwMDBFRkU1RkYwMDgzNERFQUU4MDA4MDAwMDAwMDAwMDAwMDAxCis6MTAwQjAwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkM1NUIwRDc0MUNENTk2Cis6MTAwQjEwMDA3NUJFQjMzMzNCQkIyQkFEQTQ1OUZERDgyQjkwQ0RDOENDCis6MTAwQjIwMDA5Njg4MEM0MjFFMEJDQjQ4OEQ4RDY2QTU5NUI0MzIyRTRGCis6MTAwQjMwMDBEOTM4RkM5OEM0NzZENkQ4QjhFNDM0Mjc1NTlEMjZCMTY4Cis6MTAwQjQwMDAxMzVBQURBRDk1MjU0QkI2MkMwOTgyOUM0M0NGRTlEQUZCCis6MTAwQjUwMDAyNDM5NkRGMDAxMjVFOTY5MEMwMUNFMUExQzQyMDgzNEQ0Cis6MTAwQjYwMDAwQTEwNDI3QTkyMjA4Q0UzOTQ5NkU2OTg4Mjg5Njg2OTBBCis6MTAwQjcwMDBFOUJERjdDRDY4Nzc0NjJCRkZDNTNEMTE4N0YzRkM2NkNECis6MTAwQjgwMDBERURDRjdERUZEN0JERkJERjcyRDAwNzg2MDAxODBFQzU5Cis6MTAwQjkwMDAwNzAwMUQ2MDczOTEyNzA5RTUwMDY3NkIyMDBERDVEODBDCis6MTAwQkEwMDBGNzRFNTc2ODQxODAwRkU5QUYzNURCMEVGNzAyNjQ3Q0UyCis6MTAwQkIwMDBEOTdFQjA1RTA1QjMwRUY4RUY0M0QxQjhFODhFOUIxNjMwCis6MTAwQkMwMDA1REY4NjNEMjFEQUM1NTM3QTQ4MzczRTlEQUUzREE0Q0UwCis6MTAwQkQwMDAwOUEwMjlFRjNDMjA1REQ0M0NBNzdGQTZFM0Y4RTRDRjMxCis6MTAwQkUwMDA2NEE4RDVFN0NFRTdGRURFRkU2RTczRDFGQTEyQThGRjQ5Cis6MTAwQkYwMDBGRjFCM0YxRjVGOTc5QTFFODAwQUQxODc1NUI4NkY2QTA3Cis6MTAwQzAwMDA5Nzg4QUU4RTdDNTA0MEYwQTFBRjczNTUzQTgzRkY5QzFECis6MTAwQzEwMDA5MDEyODNENUI0QkY5MEM3RjgwNkNDRTU4M0REQ0FEQTVECis6MTAwQzIwMDAxQ0Y5NjVFOUNCODI3Q0I5NEQxRjk3MjBFRjBDOTg4MUE4Cis6MTAwQzMwMDA2MjdBODVERjIxRUYzNTVDRjY4NzI4MTJBNURDQzNDRjA5Cis6MTAwQzQwMDBDMUEyMTcwNjc4RTY0MzVDREZEMUFDQkM0MDVCOTBBNTNGCis6MTAwQzUwMDAyQjZGNTQ3OUZDNzJCNUU3ODVBNjk1RjhFQzE1RDlGODk5Cis6MTAwQzYwMDA4NjlFQTVDQkVCQTkwNjlFMDBFQ0VGQUFCM0VGMTU2QjExCis6MTAwQzcwMDBERThGMUM1MjIxNjM4RkM3RkY4Rjk5MjFFNkQzQzRBNjU0Cis6MTAwQzgwMDBGQjIxODFGQ0ZERjlDNjRGOTQyNEYyRTg4MUREMkU0QjU3Cis6MTAwQzkwMDAzQkJGN0YwMzY5MDJGMzBERDJERkMwN0ZBNzdFMzEyQUZECis6MTAwQ0EwMDBGMUU0QzdDNEYzRDQwQTJEM0Q4NENGODdBNEY0RDAzNTMyCis6MTAwQ0IwMDAzNEVFMkVDMTVGNUIwRTg1OTYxQ0YwMkY1QzgzN0NGNEI2Cis6MTAwQ0MwMDA1QTcyRjJCQUY3ODU3RkNBMDJFNjkzQzU5QzFDMzkyQzhBCis6MTAwQ0QwMDA2MTFBMzVCNEVGM0U5QjlFNkU2NDAwRjkzNEJDQkM2MTcyCis6MTAwQ0UwMDBDNTkwNEVGQjFGRkQ4NzZGRTEzQTBFMUREREYzRTZCN0ExCis6MTAwQ0YwMDBGMDc1QTBCRTYxQTQxOUQ3NTM2MDc4MEM5OUY0Rjk1MzJDCis6MTAwRDAwMDBDNzhFQTFCODYwQTBGRTBCQTM0NDc2REJBODY0NkFGODg2Cis6MTAwRDEwMDBERUFGMDU4RkM4QjQ0N0JGNjQxMjNERTVFMDQyREU0RjQ5Cis6MTAwRDIwMDA3ODlCNTMwRjI2MjQ2MzQxMjVFRDZGNEMwMjkyNEJBMTEzCis6MTAwRDMwMDBFMTdDRUZEMzczRjY4M0ZGMUYyMjM5QjM3RUU2M0M0Nzk1Cis6MTAwRDQwMDBCRTIxRjczNjRDRDZDRkU1RkIyQjk2M0UyQjM4M0U2OUJECis6MTAwRDUwMDBEMzQ1QkU4QzdCRjU5Qjg5Q0ZFM0ZCNjQ0ODIyQzlGMTY4Cis6MTAwRDYwMDA1RDY4MTQ1NzAwRkM1QkU2QkU0RkVGNDZEQkZFNDJCRkZBCis6MTAwRDcwMDA5N0U1MzAxMTUxRDMxMjhFOUYyOEQyNkVEQjQwRkQwQUM5Cis6MTAwRDgwMDA4RjcxODQ5OThBRkZFM0JFNDY5NzVEQ0RGQkIyRTc2QjE2Cis6MTAwRDkwMDA2QUQ1NzlCRUIxQzg4MjRBQjI0NzFDNTcxOUJGNkVBRTM4Cis6MTAwREEwMDBGRUI5RDc3RkIxRkE3N0I3NTk2QUU5RkIyODEwN0Q5ODY5Cis6MTAwREIwMDBCQ0Q5NDNGNkU0QjdDNjVDMjM0RjM2MkVBMUY5N0UyRThDCis6MTAwREMwMDA4M0QwOUIxRTg4MTdDREU1NEYzRkY5ODM4RjY0RjU0NDkwCis6MTAwREQwMDBCNUY0Njg2RkY5RkE5RjEwRjlGOUY0NTk0RDRGOTlENUE4Cis6MTAwREUwMDAwRDM0MEZGNDEwREY5Nzg1OURFQkIzQzc3RENFOTI5NzNFCis6MTAwREYwMDAyRjBEMTk2RjMxQjUxOTEzMUFBODlEMzIyNTZDQ0Y2RUJFCis6MTAwRTAwMDBGQ0JDQjY1NjlGN0YxRTFGRTREMEFEMjY3QUMwRkJGNjExCis6MTAwRTEwMDA0MjgyOTk0NTcyMzU3M0U0QkFBN0IwRTEwRTkyNEJGRjU2Cis6MTAwRTIwMDA0RDJBQjBGRUI5Rjk3QzlFQkVBQTY0OEU0QkM1QTQwRkI0Cis6MTAwRTMwMDAxRjYxRkQ0OEEyN0VENDIyMUQ2RkQ4QTk4N0YxMjc1NkQ1Cis6MTAwRTQwMDBDMjc0NTBDODI5QzlDRjYzMjZDOTY5NTlBQjc3RDY3RjA4Cis6MTAwRTUwMDBGQTczRkMyNUU4QkI3RjIzMjNCRDdCNjNBQTNFODRFQkFBCis6MTAwRTYwMDBCQzM3QkVGREFCQjc5MjlEM0YyRjFCMTJCRkQ3RDkxRjFBCis6MTAwRTcwMDA3RUMxOUEwMzQ2Mjc1ODFGNEFBQzczNjdFN0IxN0I1RTcxCis6MTAwRTgwMDA3QjhFNjQxNDUzNUYyN0JFOTExRENGRjI0NUY4NjdEMzY0Cis6MTAwRTkwMDBCRjJBM0JERkMxRTY5MzgzNEI5MTBGQTlDMUZDRjRFRjVFCis6MTAwRUEwMDAyQ0QzM0Y0N0ZDQjNGOTNDMUZERDU5RkZCREYzRjg2NDc5Cis6MTAwRUIwMDBGNEZBNkM3RkE0MjAxMTg4QTAxQzQ2ODIwNjNBMDE3QUJECis6MTAwRUMwMDA3RjgyREZDMzRBRDRDQkNBRjlFNTg5MUM2NUZFQkM0NkU0Cis6MTAwRUQwMDBGRkM0NzFERDUxNTM4QjYwNUYzRTg2NEI1RjhFN0VCMUU4Cis6MTAwRUUwMDA0OEJGNzkzREJFRUEyODdGN0QxM0YxN0Y1QkQwQTNDOTVGCis6MTAwRUYwMDAzOUY2RDVCN0RGMEI5OTIwMzEwMkU3NDVCRDVCMDdEMzQzCis6MTAwRjAwMDA5QkQ2RTMzOEE4RjFCMjlFQ0JFNTJCRjhGOUQ2QTJCODcwCis6MTAwRjEwMDBFMkMxRjZFQUM4MTI5RUNGRkVCRTFCRUU1Mzc2RTBGM0E2Cis6MTAwRjIwMDBFNTVFRUQxNUQyOTM1NEI5NDQyQkMyRTdDODQwNUNGQTk0Cis6MTAwRjMwMDA1QTA1Q0M2MjZDQkJGNDg4OUZDRUI1RDhFMzM0MTE0MDFGCis6MTAwRjQwMDA2QjY4QkM5Q0NFQTU4NkM3MEU1NTI1QzhBRTkzRTY1NEVCCis6MTAwRjUwMDAxRENBMjc2NDg5RUI1QURGNTRCQzFERTlGNUJEMjAxQjZGCis6MTAwRjYwMDA3QkIwMUYwQTZFNUYwN0E4NDdEMjIzNDFGNjEzN0RFOEM2Cis6MTAwRjcwMDBFNzdEMjg3NzI1RDhGOTI2M0Q1RjczMDYyMDlBQTM0RjkxCis6MTAwRjgwMDBBRDMzN0U4OEU2RjhCRDA4NTJDRUVEQjdGQjJCMURFM0VFCis6MTAwRjkwMDAzQkI0NkFDNzdCMTk0QzIzODM3Q0VBMEEyRjczOEMyQkUyCis6MTAwRkEwMDA2QTVBQTlEMTdBQkJGNTE1OEVFNzM3RDVCNTM4QkU4NzExCis6MTAwRkIwMDBBODcyNzIxQUZCQUJGMTNGOTJCQjBDQTJDRkVGQUIwOTQ4Cis6MTAwRkMwMDAyNzYwM0ZFNzdCMDU3MkZBRjg3RTZEQTRBOEZDMzQxRDBDCis6MTAwRkQwMDA0QTM3QzAwRDY0NDcyODk3MjNDM0U0N0YzNkY4RjlEQzBECis6MTAwRkUwMDBFQUYzQzIzMUE5MDRDOEY0OTNEMDQ4Q0MzNkY5QkM5N0NGCis6MTAwRkYwMDAyQzdENEQ0NkFBNTk0RTUyRjA5OUY3NTkwRjFGOUZGNjc2Cis6MTAxMDAwMDAxMENFODJDN0EwOTFGQ0VCREY2QUZBNzEwRjBFQjk5Mjg1Cis6MTAxMDEwMDA0OEUyRjc2MTU0NzQxREU1ODRBRTNBMTk2OEU0RTdFNkU2Cis6MTAxMDIwMDBEMjUyM0FFN0E0NjQzN0Y2MTdFMUI4QjA1MDQ1Nzg5NjQzCis6MTAxMDMwMDBDNkY5NjFGNzU3QzQzODU4NDRFMzM0NDg1NjYxNUYzMzAyCis6MTAxMDQwMDBBMDgwRTQ1QTg1NzQzRTVCQ0FERjI1QkJBREVGQUUxMkNCCis6MTAxMDUwMDBERjI1NEI0QTA1RkQ4NjQ2M0U0NzMzMUREODFFMDYwMzU1Cis6MTAxMDYwMDA3Q0VDN0ZFMjA4OUFDODhCRjQ3MDdCMTVBRDBBOUYzRjM5Cis6MTAxMDcwMDAwODQ2MjNGNTZCNjE5QUZEMTQ4QTVGQTJGRTQyOThENDVDCis6MTAxMDgwMDA4NDkzQ0YwOEJGM0RBRDg0NEVGQjg1REZDRjY3MkY1OURBCis6MTAxMDkwMDBCQjUxRTBCNDJEMEYxQzdDNTVBQkY5MjVCMkJGREJFRTg0Cis6MTAxMEEwMDA2ODNBMjdFRTUwNzYzRUVEQjBEQkVGNDQ3NDcxMUVFRUU5Cis6MTAxMEIwMDBFQzYyM0I1MTc2M0VDM0VGNUY4QUM0Rjc5MDFEMTJFQkEyCis6MTAxMEMwMDBGRDhENzNGOUREQTA2NjgwRkM1NzJBMDI0NjEyNDlBNDAzCis6MTAxMEQwMDAxRTVEMUJERTgyRjI0RDNFRUEzNzZBRTFGMkM5RTM2MjMxCis6MTAxMEUwMDBFNTkwMDZBRDgwRjgyQUY3NUNBQTFDODBDRkY5RTAzMUM0Cis6MTAxMEYwMDBGRkUxMjE1NjQ2OTNDRkM5M0Y0MDJFREZCQTE0QjlCODVECis6MTAxMTAwMDBFNTAxRjc5NDAxQjQ5Q0RGOEYzRTIwNjUwMkQyNTJFNkUwCis6MTAxMTEwMDA4NzE5NkVDQ0YyMUZGQkM5NjUxNkJGNEEyRDc5QzhBMjhDCis6MTAxMTIwMDBDREM4RDY3M0E1NzQ3RUI5MTBCREIyRDJBQzdDQ0UyNzIzCis6MTAxMTMwMDA5NzcwMUNERjM3NjZFNTIzRjc5OENDM0NGQjlDRjZDMTIzCis6MTAxMTQwMDAxOUM2Qjc0QjI0ODNFNUI1NTQ4RTdCQTg1RjI4NjUyQzYwCis6MTAxMTUwMDBEMDkzRTY3M0JEMTgzNDk2Q0YxNUQwQzM2REI5Nzc3QUE2Cis6MTAxMTYwMDAwQkUzRTE5RDM4MTFFMUQ5MEZGMDk0Q0Q4OUM3NTJDMTRECis6MTAxMTcwMDAzNjdGMzVGOUQ3M0FDNUYwNjBCRkJFQzgxMzRGMjMxRjdECis6MTAxMTgwMDBBRjU0MjA0M0ZCQUI1NDIwNDlGRTFDOTEwMUQzNEYzRDhCCis6MTAxMTkwMDA4QUE3MTU5RTMzMjkzQ0E2M0RGNEREMkU3RjNBMjU2NUFFCis6MTAxMUEwMDBFNzZGQjBGQ0Y2NEY4QUJFQTk0REQ3NjdGOTdDOTJGQzc5Cis6MTAxMUIwMDBENzcyQzEwRjBGRkI5RkM5MEM3RDFGOEU4MUQxQTdDRkE2Cis6MTAxMUMwMDBGNTY3MzgyRTI5NUI3RThBREFDREY0QTI4NUY5OTYyQzU0Cis6MTAxMUQwMDBDNkJFMzRGOEMzRjcwOTY3MTAzRDA1RkJERjhCMjRERTdDCis6MTAxMUUwMDAyMUJEMjE5QzFFMkM2NUJGMzQ1RDQ4QzA3QTJFMkUzMDU3Cis6MTAxMUYwMDAwOTU3NkNCMUU2RDk3MEEzQkUzODhFRUJEQzMyRTg3QkMwCis6MTAxMjAwMDA5REU4NDFDQUU3QzQwNUVFRUY3NTA5NzJCRkI3QkY5QjAxCis6MTAxMjEwMDBENTJCRjdGNzk3NjgwN0IwQjNFMjgyNzA0MEU0OTFENTE5Cis6MTAxMjIwMDAyNUQzNzk3MEZCMkNDRTI0M0IyOUNCRkQ0RUM4NDkyRDBDCis6MTAxMjMwMDA0RjMwRUU1MEM5NUVDQUNFNEZDN0VCQzIyRjM2MUQyRkJFCis6MTAxMjQwMDAyQTJFRDFGMTVBRjhDNTNFQTdCNkMzMTlBRkIyRDQ1QTY3Cis6MTAxMjUwMDAyN0YyNkIyQkQ4N0ZFNUNDQ0ZDRDE2RkYzRTRERTc1NTVGCis6MTAxMjYwMDAzMUYxMTMwMzE1RENGNzM2ODhBQkE0Qjc3Rjg2MTA5QUVCCis6MTAxMjcwMDA3MEZDOTI3RERCOEExOTJGNDA1NDIzRkU0ODk5OEZDQTU3Cis6MTAxMjgwMDAxRjVFN0IxMTdDQjRGOEI0MzlGM0E2NTcyN0JGQjRCMzAzCis6MTAxMjkwMDAwOERFQzg4RERGQUNGN0VGNkNGQzg0ODhEM0ZERkUxQTQ2Cis6MTAxMkEwMDA3RjRFN0M1ODc4RUM4MzVFNzJFQTdCMEFGRkU2ODU1NkI3Cis6MTAxMkIwMDA1QzdBRkY0QkIyMjE1N0QzN0I4MTlCMDMyMENFRUY0MjU4Cis6MTAxMkMwMDBCMjUzNUM3N0UxRTNBN0ZGODdDNjE3QkE3MDM1NTE4NjQyCis6MTAxMkQwMDAxQ0JBOUVDMkZEOEM2NzBCOEI1NTlENzFCNjRCQ0Y2Q0IzCis6MTAxMkUwMDAxQzBEMUYwODFDMUNCNEI4OTc0MzU3MjJCQzZDQzczRDhCCis6MTAxMkYwMDA0QzU3OUEzQkVGNzUxNjNFQzc1NzkxMEYyRjAwQ0ZCQjQ3Cis6MTAxMzAwMDA3MTNBQ0NFMjczRjEzRTE4NTQ4NTlENjA5Qzk5NzFDNDhBCis6MTAxMzEwMDBDMTdBNUUzQkIzRDc2RDdGNTdBMUM2QUI4REZBM0NERjc4Cis6MTAxMzIwMDA1QjcyQThBNzQwMUNGREMyQzIyQTQ4RUZDNkY1MEUwRThDCis6MTAxMzMwMDBFRTg4MTQ2MjdGQUMwMjc0OEMzMDYxQTBGMzhCMTJFMUYyCis6MTAxMzQwMDA4REI2NzJBMTRBQTE2NjgxMEI2OTBBQjBFMzc4RkMwQkU1Cis6MTAxMzUwMDBGREFCM0U1NDg3RUZCNzU3MDUwRDVDMTkyQzdDMEI3MTI0Cis6MTAxMzYwMDAzMkQyQjlBQkNBNkY5OEY4MjAwNUUyN0RCMkQ5MjNFMjM4Cis6MTAxMzcwMDBDOTI0QkM0Qzc4NzQ5QjI1MUZFRkUzMDI2N0IyNkNEMDg0Cis6MTAxMzgwMDAwRUY3QjcwOTdDQjVFREQ4NjdENzkxN0M0NzRBNkYzMTI2Cis6MTAxMzkwMDAzMjM4NkUxQkZBQTczMkMyNjNBMzVFQzY3Mzg4RUIxQzk5Cis6MTAxM0EwMDBCOERGRDc5QzgzMDNGMUZGQkIwRTc5MUQ3REFGMEIyNzAwCis6MTAxM0IwMDAwRUI3MjEwRTQ0RkRCNjcxRTBGRDZEQzA3NjQ2RUJBMjdFCis6MTAxM0MwMDBGM0U0NzJDRDAzQzE3MkY2QTdENzI5NTM5RTdDRjkzNzk3Cis6MTAxM0QwMDA1QjFFMzZGRTdFQTI0MkYwRDlGQkFFRTAwQjA2Q0MzQjk0Cis6MTAxM0UwMDBFOEI5RUY1RDExOEZBMTAzMEYzNjJEQTBEMzVGRjBDRkM5Cis6MTAxM0YwMDBENzg0RkNBMUE3RUY4QUYzMDBCRkU0NzU5QkY4MUZBRDZCCis6MTAxNDAwMDBEQjhEODc3RDJFM0NFQzVFQUYyRDg3NDc2Q0ZFQUM4MjdBCis6MTAxNDEwMDA1NUM0MUZDNEU3OEMxM0VDRkRCOEY3RjEzOEM2RTc1MThCCis6MTAxNDIwMDA1NDhBMjc3QkZEREM2NjdBMzU2RTlGRUEwRDczN0JBMkJBCis6MTAxNDMwMDA1Nzg3MjgwMkIwNjc3QUVCQjg3REI2RDdFMEU3Q0ZGNURCCis6MTAxNDQwMDAzNjczNkJGMzYxMkU3RjQ0NUVGMzJBNkJDRDRBRkQ1NEY1Cis6MTAxNDUwMDA5Q0NFRDEyQkEyMUUzNjg1QjE3QjNDQ0NCN0IzQTg5RkM2Cis6MTAxNDYwMDA2NDdDQzUwNkU1REU3MDdDQ0M5M0E2OTBERThFN0YxNjhDCis6MTAxNDcwMDA1QUZBN0FBREVGQ0M3MTFGOEUxRkE5MDQ2MzBGN0VCRjlECis6MTAxNDgwMDBCMDc5M0JFQkQ5OUEzMzlFQUM5RDAwQzUzOTA1OEUzQ0IzCis6MTAxNDkwMDA0MTA0Q0ExQ0ZENzZGRjk1OEVGMTFEREE1MkM3RkJEMkJFCis6MTAxNEEwMDBDODM0RkJBOUFFRjBCNThFNzFCNjlDRkY4RUUyMkM1QzAxCis6MTAxNEIwMDBERjU4RjRBNDQ2N0NFREQ2QUY3NzhDNTNFRTQxRjkzNzc0Cis6MTAxNEMwMDA1MEZDRjM1MTA3NUQ5MEQ3MTlFNEE3NEIzNzNBRjVCMEJDCis6MTAxNEQwMDBEODI1NTdGNUVFNzNDNzQxQjY5Q0RGNkE3M0M2NDNGMzUwCis6MTAxNEUwMDBDOUQ3QURBRjM2NUY0QjY3RjkyQUUyQ0ExNEM1OTVDOEI0Cis6MTAxNEYwMDBENzUyNERGMEQ1REVFRjg4QjU1RjdCNUVBNTU5RUNFRjk2Cis6MTAxNTAwMDA3MkM3OTdDNTE0NUY1NkU3OEIyRjRGNTk3QzNFNEY3Q0FGCis6MTAxNTEwMDAxOTczQzY5NzZFQkU5RTJGQkU1Q0QwRUVGNDJCMTdDQTExCis6MTAxNTIwMDBDRkNEOEI0NURFQURGNDc5OTlFMzE2MzlENkMzRTc2MEFDCis6MTAxNTMwMDBEOTk0NkM3NDkxNEJCNDcwNTkxMUY5MDAxQ0I3Qjk0OTI2Cis6MTAxNTQwMDA0RDEzQ0UxQzgzRTkzMDlERTcwNzI1RTQyQUVBNUI1OTU5Cis6MTAxNTUwMDBCRDUxNDk3RUU2RTE5MEYxQ0EwNkMyOERERDIyMEZGODQ5Cis6MTAxNTYwMDA3NEU0QjYzMEUxOEVGRUREODdDMzc4NTg0MTRCQkI4NzBCCis6MTAxNTcwMDBGRERENjhFNDM0RTcyRjE0MUQzODdGODFBRDk5Q0U4M0ZCCis6MTAxNTgwMDA0RkVDRjE3NkJFRjFFMDI2MzUyREUxRjg4MzU2QkVGMTQxCis6MTAxNTkwMDA2MEY3NkNCRTkxRUIxQjEzNEQyMkRGRjgyN0VEQkE5NTc3Cis6MTAxNUEwMDBGRjRCODYyOTVFQjk3N0QzQUE0QTNFQUMxNEVDNUY0NzVECis6MTAxNUIwMDBDMzBEQjY5M0ExODA1NjRDNzE3NDZBOTM0N0EzN0RDOTNECis6MTAxNUMwMDAyQkVGRkYzQ0U5QzcwMUE5Njc1RjBEQzU2RjE1MUVDRTY0Cis6MTAxNUQwMDBCQkE2NDJBQjJBQjdFMDM4NzkzM0MyMThFQTZGNUFGNTk2Cis6MTAxNUUwMDAyQUY5RUM4OTBBN0Q1RjBEN0QxRkFBNjFGRUY1QUZCRTY5Cis6MTAxNUYwMDBDRDRGRjM4Qzg0MTY3NDUzN0U2NEE0QzNDMzMyOTIwOTE2Cis6MTAxNjAwMDA2NzE0MzM5REJBNzNDNTNERUUzQTgwNEMxRTk3RTJCNzFFCis6MTAxNjEwMDA3MjRGNDZBNUYzOEFGMDQ3NEVERURGOTZGRjUwNDhFNTRECis6MTAxNjIwMDBGQ0VDRDZGNjg3MEUyNzZCRjgzMUZCQUY4NTc2NUQ2NjRFCis6MTAxNjMwMDA1MzFCRTc5OUNGMTI5RTkwRTZBRkNCRUNCNUYyOURCMzZBCis6MTAxNjQwMDBFNzRFRDhCOTlFM0NGMzMwMkVCMEVCMTJGNEE3REI3OTBECis6MTAxNjUwMDA1QUZDNEJERERDOTlBNjczNzQxQ0UyMzFGMjlGQzlFMEExCis6MTAxNjYwMDBCOUVCMjA0QUYwREM3NTkwRjlFQTFFQkJEQTQ1MUVGNUFECis6MTAxNjcwMDBDQjI0Nzc5MTVGNzRENDRCOTQ5ODU1MTdCMUUyRDc4M0ZDCis6MTAxNjgwMDA5NDBGMjc3RDcwRDU0OUVDNzVGNDU5RjQ1MkIzN0FFNDgwCis6MTAxNjkwMDBBQTlCQUM1NjJEN0EwNkU0Q0I1RkZGQTFGNTkzRkJEQjRBCis6MTAxNkEwMDA0NUJERTY2MkVCMjZERjZEMDdCMTVFMkJERkVEQjVFNEVECis6MTAxNkIwMDA3RjhEM0NCOTgzRjRGMThGOURFRkZFNkVGQkU1Q0Q3NzE2Cis6MTAxNkMwMDBDRkFEMTNBNUQ5NUVFMEQ4OTkzN0Q4QUU5NzJEQjBGMDNECis6MTAxNkQwMDBDQkI5RUI0MDQzMDRGNDUxN0VFMzJCMTA5NzUyRkRDMzhBCis6MTAxNkUwMDBFQTI3QUYxMzc0REQ3NUExODA5NTQ3Rjk1MUZCNTIxMUJDCis6MTAxNkYwMDA2RjkxM0YyMUUxMkFDNjYyRTI2QjUwRjk3NjUyQzM3REI5Cis6MTAxNzAwMDAxNDA0QzcyMDg0QURBRjdDNEI5MkRBRDZDNTNBRDc4Nzk0Cis6MTAxNzEwMDBDNjk3NzlGOEJDMUEyRjRBMUNFRUE3RjUyRjBCRTZCNTMxCis6MTAxNzIwMDA4QjU3MkRGRjM3NjhENTZGNDg4MTNENjQ2RjkyNkQxQ0Q0Cis6MTAxNzMwMDA5MEYwQTA5QzI2NDBDOEY5QURGNjEwOEY1N0I0RDFFNkMyCis6MTAxNzQwMDAzQjUxNkY0RTkxM0U1NEYwN0VGMkQ2N0Y0RUI3OEJGQUVFCis6MTAxNzUwMDA0RjBFRkRBRjkzOUVBNjJDRTI0NDY3MEJEMkY5MEY0QkMwCis6MTAxNzYwMDAxRjgxMEU4RTA1MTRFQzg4RjlGQ0ZBNjgzM0UxODJERkU0Cis6MTAxNzcwMDBCNTZCRTJCREIyQzIyMDdCMTgwRkU1OUZFRjc3RDY3RTM2Cis6MTAxNzgwMDA4MDUyMzFBQkIyRjg2OEUxNDY0MTA3RkNFMkZCODNEMkZDCis6MTAxNzkwMDA5OTBEMjc1N0IyNUNEOTlFNjgxREY0REU1REZGNzJEM0E4Cis6MTAxN0EwMDAwRkQ0MzlFMzFCQjVDQTM5RkU4M0Q5N0QzOEUzQTIwM0QwCis6MTAxN0IwMDBGM0Q0QzcxNjQ1ODVCRUI2MkUxNjdBNDZGQUIxMjc4RkUyCis6MTAxN0MwMDA3RUI4RUQ1REE1QkMyN0M1NTNEMTkwMzU5RkYwM0I0MTU4Cis6MTAxN0QwMDA2NUFBOERFMjlENjAzRDE4NUM1MzU0OEVGMzdFRTM0RjA1Cis6MTAxN0UwMDBENDFDOUI1RTQ5N0VCRUQ4QTAzODQ4RjFBM0FCNkNDQzFDCis6MTAxN0YwMDBDNjg5RUU3RDlGMkZDRTUzMTQ0ODdBMUJFN0M2N0I0OERGCis6MTAxODAwMDBENzJDNjkxNEU3NEMzMjg3REU1NTUxQTEyNzcyNkUzQzA0Cis6MTAxODEwMDA1ODRERTE4ODdFMzNEN0YxQTgwRTQ4RkQ1REJFMERGOTI1Cis6MTAxODIwMDBDRUU5REE3NkVGQUM5RkNDNTdENzM5MTRDNzM4ODI4MjJECis6MTAxODMwMDBENDQ3RjZFRkRCOEFGRDc3MzQ4RkU2RTMzMTdBREVCQTAwCis6MTAxODQwMDA4RTY2RjU2N0VCM0FGMTBCQUJFQjhDNDY0QkJCNkIyRTIwCis6MTAxODUwMDBBNkFFMzMwRkRERDlGMzc4NkU1RDI3MUFDNTdEOEUwNUYwCis6MTAxODYwMDA0NTdENjVCNkFFNzM0QkY5MDVFNTczQzAzQTk3NEIyREQwCis6MTAxODcwMDBCRjVDRDQ2REM1MTEzQjI1OEUyMzlFNkFGQUVERjA3MkQ0Cis6MTAxODgwMDBEMkIzMjYyRkVCMDFFQzlGODA1QzNCNTlCNzUxRkY1QTM2Cis6MTAxODkwMDAxOTlEMzNBRkZBQTA1NkY4MzU5M0U4RDk3MUIxQ0QzRjExCis6MTAxOEEwMDBENUEyREZGNkQwRjMwQThEMUZBRkY0QUM2MjdBOTBGMUM3Cis6MTAxOEIwMDA3OUI4RDg5RDU0QUQ1NkE2NzZCOTlBOTE0Qjg4NkUyOUMxCis6MTAxOEMwMDA1ODc1RjQ4QzQ0Q0YyM0M4QUNEQ0Y4NjA2NEU2QzVGNkU4Cis6MTAxOEQwMDAxMkNBOTMwNEMxMjAxNzM0MTJEMTc2OTdEMDNGQTgwQUI4Cis6MTAxOEUwMDA0NDc4QTc1QTRGOTNCRjZERjcxNzNBRkNGRjQ4QjcyQUMxCis6MTAxOEYwMDBGQzZCQURCODJGMzM3RTVDRkZEQTM2MUMzRkIwMzNDMEQzCis6MTAxOTAwMDBCOEU5NDA5NTQ3RDg1NzUyRTI3QTcyODdFNjhDN0JDNjkxCis6MTAxOTEwMDAyNzk3MDgzQ0I2REY2QkQwM0Q5MUEzOTM2MkZDRDZDOEY1Cis6MTAxOTIwMDBBQUI0Q0NCOERCMTkxNzc1RUJDRUI4Njg2QjY1RTMyQjlFCis6MTAxOTMwMDA4NDE3QTFERkNCRjk3OENEQzJCNTM3RDUzOUUzQTRBMjlFCis6MTAxOTQwMDBFQTlFNjcwOUE3NkNFRTE3Nzg3ODZGQjg3NEMxNTZGNEYxCis6MTAxOTUwMDA3RkJGOEFFQThFMzg3MTRCRkY1RDVDMzdFQTU3ODFFQkI3Cis6MTAxOTYwMDBBOTIzOUI1NEI2OEYxMUVGRUI4N0I2MzI2RTJDNjAzRUU1Cis6MTAxOTcwMDA0RTZDNTIyQjEzMzlGNjUyRDZFMUIzRUU0NTA4RkM4MTdBCis6MTAxOTgwMDBGMDMyMzE5OUU3N0Q1OTg3RjAzQkE4RDg3QzhFREJGQTlECis6MTAxOTkwMDBGMkE3OUYxMTdDMkVBRTgyQjQ0RTM4QUU3QjQ3ODZFMjEyCis6MTAxOUEwMDBDQUYxMkFEQzEzQkVFRjBGRDc3NDFGQTdGOTVGOTY4MTI3Cis6MTAxOUIwMDBGNkU5RDZDM0VBOEU1QUI2RDNEOUYzQjREOUUzRTA5M0E1Cis6MTAxOUMwMDBENzE3RUYyMUZBNzAxM0U4RTREN0EyMzFFQzUzMUU2MDY5Cis6MTAxOUQwMDBBMzBBOTQxRkYwODVGRjhBRjc1QjhBRkQwMEY2RkRCMTJDCis6MTAxOUUwMDBEMUE0ODI3RDdGNERFMjdBQzJDNTRGRUZCQTdEMzA1MkRECis6MTAxOUYwMDA0RUU3OURCMDZGREZDNkVERjE0RkQwRjg5NTVFMDhEMDkxCis6MTAxQTAwMDBGQTQwOTdDMkI0QkVBNEI4Q0ZFMEI2ODdCREE5MUY0NEMwCis6MTAxQTEwMDA0OTRFN0IwRDg5NDVCNEI5N0JGREREN0M2RkE5QkM4MDQ3Cis6MTAxQTIwMDA3MUQzQTgzN0JFODVGREQxQUQ3RTJEQzk2N0UwMzRDNzFGCis6MTAxQTMwMDAxMURFQUZGODgwRjQ2RTYyRDc2RjJBMDg3RkZGMzgyQTc0Cis6MTAxQTQwMDBFQTlBMDFERDE5NUZGQjYxOTRDRkVERDVFNkQ0NDZGQTQxCis6MTAxQTUwMDA2RTc1QjM0QTE1MEY3OEFBRTUzNENCNkRBMkM5NjdGODQ1Cis6MTAxQTYwMDA3MDFEMTMyRDEyRjNGOUJEMjY2RjlBRTY3OTUyOUQ5MkRGCis6MTAxQTcwMDA2OURFMjdERkMzQjlBQkYzRDk3NzdFQkJCMkVEQzgzREQyCis6MTAxQTgwMDA3RUE0NzlCRDlGRjQ2MjJGNENERDQyRkM0OUNFODgzQzk4Cis6MTAxQTkwMDA5NTdCNUNCQzQzOUM1NzdCNTNCN0Q2Mjk5Q0NGNTJCOUVFCis6MTAxQUEwMDBERUFFOUMzMUNDMTJBNDFFOUE4OUZGM0RFNTVFOTM1MUI3Cis6MTAxQUIwMDA0NUM0NDk5NTlFQTQ4NEY0MDZCQUM1QkQ4QzgxQTJDNEQwCis6MTAxQUMwMDAyMEU5RjMwMEVBM0RDNzQ5RTVFMjNFRDI3ODY1QjkzMTQ1Cis6MTAxQUQwMDA5NDMzREY3OENCNkQ3NUU0Q0Y1RTY4MEEzMEJFRUYzQkEwCis6MTAxQUUwMDBGMTE3NzcxMkJFNkY5M0RGRkFFRTIzMTQ1NzU1QTkyQzI2Cis6MTAxQUYwMDBDRjAxNkZDRkFCMTQwNzI1OUIwMkJDREUxMzhCNTRGMEQ0Cis6MTAxQjAwMDA5MzNGMjhCRkYzNDE4QUIzRTFFODQ2QzhENUQ3ODk5ODA3Cis6MTAxQjEwMDBCMEQzODkyQTYxRjdEMjIzMUIzOTBFMTg5NzY0RTZCMzM0Cis6MTAxQjIwMDA1OTcxNDQyMjNDRTY4QkQ5NzkyNzkxNjc4QTU4RUU2QzJCCis6MTAxQjMwMDA2MkUzNzczODBGNzU0NUI3QzhBMzQ2NjI1NkJFNDkwRUIzCis6MTAxQjQwMDAyNjU5MkY2RjA4M0M0OEY2NkYyQTVFNDc3Q0JDRTY4QzBFCis6MTAxQjUwMDAzMzVFQkVDMjE1MkZCQkYzNTFGRjFCQjVGMjExNTZERTJCCis6MTAxQjYwMDBDOUQ2Q0I2MjZCQ0M0NEIzRTVBNzU3RkFEMjQyMEY3QjAwCis6MTAxQjcwMDAyQUI1RkFCOUY2RkRDRjE2N0U5RUVBRjVGMzNEQjIxNzA3Cis6MTAxQjgwMDA3QjM1RUUxNzlCNkZFRjJFNDMzQTJGRjc4NkY5RjlDNzk3Cis6MTAxQjkwMDA1NjFGOTY3MkJGMUI1OTc5QUI1RjY3N0YzMjFEMjZCQUZECis6MTAxQkEwMDA2RTNGRTJENjhCQTE2ODgxRTMzQ0IxRDc1OUQ0RDIyNkVGCis6MTAxQkIwMDBFRURGOUQ2MThGMEM2QjgyRDNFRDdDMzZDMjU0MzAxNzAzCis6MTAxQkMwMDBFRjY3N0FDNTNEQjdBN0FDNzU5RUEwNzVGQTI4NEYyNjdBCis6MTAxQkQwMDBENkY3NkNBRkNFRUQ3M0JENzVEQzZFRUEwMDUxMEZCMDc5Cis6MTAxQkUwMDBGREMzNTVFODFGOTAwRkQxMkFEMTI3N0Y0MEYyMkYyRDNBCis6MTAxQkYwMDBCRjkzRjM2NEJFQjBBMjkxQkRGQkFCNDYzMzUyOEU3RjYwCis6MTAxQzAwMDA5ODI4RUFGOUM1NURFNEY3MkI4MkFDOEZFRTdEQURFOTRCCis6MTAxQzEwMDBGMEU0REREN0U2OTYxREVDNzdDRUUyM0NDNDdGRjQzM0VBCis6MTAxQzIwMDA3N0IzMUY0MkJGQzBGMzZFNTRFRkUwNzU5OEU4OTdEOEMyCis6MTAxQzMwMDAyRkY0N0NFRDc2RjYwQjVFMjAzRDc3RkI4MUQyQTRCMENECis6MTAxQzQwMDBFRjg0MkVGMjc3RjYzREExNTlCRjgwRjNBNDcxOUVBN0QxCis6MTAxQzUwMDBEMEFGNTM3RjAwRkQwMENEMzNEMEYyRkE5RkQzQkNFRjVECis6MTAxQzYwMDBCRDVGQzBGN0EyMjYzNkJEQzI3RUUxODVCM0U4QjMyRkMzCis6MTAxQzcwMDBBMzVGQjBFREYwQjUxMzkxMjNCOUYxN0M1NkNFRUI2RkI1Cis6MTAxQzgwMDAzRjI2RjhBMTgxRTBFQjg2Nzg5RTM4RjE2MkU1MENFNjBDCis6MTAxQzkwMDA4NUUxOThCNDMyN0Q4N0E4M0JBQUNDODc3OUVCOEU0OTQxCis6MTAxQ0EwMDA4RjQxNjk4MUJFNDkyNTY2RDUxRDgxRUE4RTc2RkQzMTU5Cis6MTAxQ0IwMDBBN0VFNThFMEFDM0JBQUU5MTRFMzlCQjQ1NTc3QkM2REEyCis6MTAxQ0MwMDBBREE4M0JBQTA1RDNDMUVDM0FFQzdBNjMzRjNEQUFDQzYwCis6MTAxQ0QwMDBENkU3RUZFQzQ4RUNFQTY4Q0FENjE5NzU0OUQ0QzE1RjdCCis6MTAxQ0UwMDA4QTk4NUZBNkU3NTA1RUNBRTdCRkJCNEU2OUQ3MjMxMTRCCis6MTAxQ0YwMDBERTQ5ODk5Q0ZBNjYwMzNFRjc5NzY2RUI1RkVFN0FBNkFCCis6MTAxRDAwMDA3RDJGQTM0MTlEM0UzMjhDN0NFOUJCQzNDRkY4QzE1RUUxCis6MTAxRDEwMDA1RkRGQTM3RkYyNkFBMjNDN0IxRkMwQUU3N0RBRjU0QzhGCis6MTAxRDIwMDBCQkVFODlFQjFFQ0I1RDM3M0MwRUVDNzdFMDMxRkY2MUZCCis6MTAxRDMwMDAzQURGRENFQkZENUUyNDcxN0Y0NzQ1OUU3NTVGNjA3RDc5Cis6MTAxRDQwMDA3MTFENThGNDExNzc5MTNEQkY2NkYxRDExRUY3OTA2NTcyCis6MTAxRDUwMDA4RkNCNTU5MURGODY2Mjk1RTM5REI2ODc4MjIwMTNDRUE3Cis6MTAxRDYwMDAyRTUyOEY5MDVENkM4MUU5MEVFMjZGNUY0OEUwQkNENDJCCis6MTAxRDcwMDAwMTJGRkJDOUEzMUQzQUNCQUY0MjM1RjkzRTQ0QzU5N0FECis6MTAxRDgwMDAwM0M2NkUyNDkzM0FBRTE1NTNGRUE5M0I2QTFFRURFMERFCis6MTAxRDkwMDA3NThDREVCMjlFRDY4MUI4OURGQ0REQUY2QkJGNUFDRThFCis6MTAxREEwMDBGNTdFQkFGNzU0NDJGMTlGQjE5OEYyMjBDRjc3RTRCRkE1Cis6MTAxREIwMDBBRkQ0QkFGOENDN0E5RUI3QzgwMzE0OUZBNTAyQzZCM0I1Cis6MTAxREMwMDA3Q0FGRjgwOTg1RTk3NTIzMDlCMzkxRUYyRjQ1RDU1MjBBCis6MTAxREQwMDBBMjIzRUVBN0Y2MDU0RkIyQkM1QTZCN0QyQjM4QUY1NzQ2Cis6MTAxREUwMDA5NDNGMEU3Q0E2NDNDNEFENkI5MTk2OEE3NDNFRDM5NjA1Cis6MTAxREYwMDBGODAxQUQ5QjcyQTU2MUQ2NjMxMURGM0Q0RjdFNTJGOEFECis6MTAxRTAwMDBBRjdCM0NBQkIyNzlCMDEyMzlGMTNDOEQ4N0EzOTI0MkUzCis6MTAxRTEwMDBFN0EzQ0ZEMjFCM0I0RTdDQkJDRDdDODFFNDhFRjIzMDVFCis6MTAxRTIwMDA2OTdFRkIxRTkwM0RGRjRCOTYxQzkyMURFNjhCMzRFRUE3Cis6MTAxRTMwMDA3NTZCOUUwNjJEMTkyMTNCNkM0OEEwM0U0ODZDM0ZBRTQ5Cis6MTAxRTQwMDAzQUJDRDAwQkI3QkVEQUZBMzY1Qjg3QjdGNDUwRDI0NDRGCis6MTAxRTUwMDBCRDE2RjVFQTc1NUVFRjkzRkE3MThGNDRGNUY2QzRFMUFECis6MTAxRTYwMDA2MUZBRjYxMkVCREQ1N0I2OUI2RkQyQkE0QkRBRTJGRjlFCis6MTAxRTcwMDA0RTc0N0ZCREVCNzZCRTE3N0NBMUY3Mzg1QTE3Rjc4NEY2Cis6MTAxRTgwMDBBOThFM0YxMDEwQjhGOUUxODhFMUYwNzc4QjNBODU3Qzk0Cis6MTAxRTkwMDAxNjc1MEFCQzc0MkRFQUNDMTRERjJGMzVGOERFMzdDMDc2Cis6MTAxRUEwMDBERDhDQTM2REZGMzREQTlCRjhGRUE5REFFQ0Y3QTk1RUFFCis6MTAxRUIwMDA5OEE0N0FEMDdDRUJGMEVFREJDMTc5RERCRUFBMzYzRjg4Cis6MTAxRUMwMDBGOTFGRjQ2RjI1RDQxRkE4MzJDM0I5RUI0ODE1MDkzRDlCCis6MTAxRUQwMDA0RjJFMTI3OTBCQ0FBNzI1NzNFRTkzOTc3NkNBQkM5RjMzCis6MTAxRUUwMDBGNjJBQzg5MEVFRjg4MkEyRUVFNjQzQzNENUYxRkNGMUUzCis6MTAxRUYwMDA5OUNEN0NCRjE4OUY0RjUyOEFFMThBNEU1REM0RTVFNUJCCis6MTAxRjAwMDAwNjk4MTQ2RjU2QzU4MUVDREJBNzY1QkZBNzNBNkE3QkJDCis6MTAxRjEwMDA1NTBGREZCNzlDOEY4RTFDQjZCRjRGRjBGNzM3NzY2QTMwCis6MTAxRjIwMDA0QzU3MkRGNzM4RjIwMEU3RTM5QjlCMkZGREM0QjdEQTNGCis6MTAxRjMwMDBGOUY5QTY1RTMwREY4NEREQjlGOUI1Q0FFMkQ3RDNBMURECis6MTAxRjQwMDAyRkYyRkVFMDgzNzZCNjMzOUY4NkZCQzQ3Njc1QTdGMDRBCis6MTAxRjUwMDAyRjcyRDA4NDQ0MTFGOUE4MzgyMjQ4Q0FCM0Y3MDBENUFCCis6MTAxRjYwMDBBMTZEM0VDQjlBRTBCM0FDRjVGMDc3QkUyQTAzMTJENzUxCis6MTAxRjcwMDAxMTVGMTJDQzE3MzcxRkQwNEYwMEY5ODkxRjNEN0FBODg3Cis6MTAxRjgwMDA5Q0YwNjkyQkY2QzNDMjdGODAwRkRCMDczQTg0NUM2QzQwCis6MTAxRjkwMDAzQjVEMDczRjBEOEFGQ0I3RjNCQzcwRkI1M0JCN0REODlDCis6MTAxRkEwMDBDQTNGQkI5RjRCNUQwMUUxM0Y3NDcwRjBCREM4RkFGREI1Cis6MTAxRkIwMDBDMjkxQzE0NkM2MDc3ODdFMjZFOTVFNEM2NzY1NkQwMTExCis6MTAxRkMwMDBGNTJGNzcxREQxNUQzRjc0RDcwOURERjVDMUFDREU5OEUzCis6MTAxRkQwMDA3RTVBRTczQkRBQzlFNEM3RjNFODhCREQwRTVCRjZENjQxCis6MTAxRkUwMDBERkVCQ0Y2Qjc3QzM2OEVGMjRCRjgxMTYzMzQ5NzVBMzRFCis6MTAxRkYwMDBCREExRTkzMEVCQ0RGMTM3MTkxNzJCQ0ZDQjA2RTE0QjYzCis6MTAyMDAwMDA0NTExNzJFRTVDMzRDRDcyRUM2QTM2ODFFQTREQzNCRDg3Cis6MTAyMDEwMDAxQkJFOUQ0QkY3ODFCNkM0NTczQTUxNEYwQUI1NDk5MzQxCis6MTAyMDIwMDBFODA0MjE5M0E0RjM2NzZEOTlEOTkzMEYzNzBENTg3RTc3Cis6MTAyMDMwMDBFNEVEQjZGODZFRkE4RUFFQUQ5M0ZDNEY0NUNDM0RENEQwCis6MTAyMDQwMDBCRjUwQkYzNTlGM0QyOTM2RUYyRURBOUU0RTBBN0I2QTgwCis6MTAyMDUwMDBERUMxRjYzNDUyRDVDMzM4NkJFNEE3MzIyMUE5MkM4RUU5Cis6MTAyMDYwMDBCNEVDNjlBNEU1MzREQkJCNkQ1NzY5REJGRjM0MEJCQjEzCis6MTAyMDcwMDBBMDNDMDI5RERGQzU1NTI2RkI4RDZGNUFGNkE0QTA5RDlFCis6MTAyMDgwMDA5MDNERjkyQzdCMkFENkIyRTMyOTNGREU0RTdDQzZFNzkxCis6MTAyMDkwMDA0QUQ1MzQ3RjU3REM2Q0Q5MUZEOTUzOTBFRTBGMDNFMzM4Cis6MTAyMEEwMDA4MDAxQjQzQkNBOEJCOEVEQUJCNTQ2OUM5QjhGQjcyNTdFCis6MTAyMEIwMDAxRUVFMjQ3Q0IxNjgzREU3RTUwN0FBRkVCMzhDRjE4QkU4Cis6MTAyMEMwMDBBNUZGNTlCQ0RCQzhFN0Y5RDk0MThGNDFGNkQwNDAwMEU0Cis6MTAyMEQwMDBCQTMxNkIwN0Y2QkU1N0NGQzg5MDQxRDFBQzk5OTFCOEQxCis6MTAyMEUwMDBCRDcxQTY5MERCRDY5OTAwQjdFNjRDMTlCNzkxOTkxMDRGCis6MTAyMEYwMDBCNzZEMzM1NzcyREIzRTUzQzk2RDc0MDZFREUwN0FCNEE5Cis6MTAyMTAwMDA4Nzk5NkE2RTNCNjdBRUU1QjY2QjY2MTlCN0IxOTlFQjE2Cis6MTAyMTEwMDA3OTVDRjdDQzBBNkVEN0NFN0M5NERCOUI2NjVBQzQzQ0M0Cis6MTAyMTIwMDA3NTYyNUY3OUVDODFDQTYwOTdDMTFFOEMyNDE0OTExRDgxCis6MTAyMTMwMDA3Q0U2NTVGNkVGOUFDQTc3OTQ1MkExNTU1QzI3RjIyOUFFCis6MTAyMTQwMDBEMzZDMEY0NzlBODVCRkVGMEEwQTM5QjlFREUxRURCNkI2Cis6MTAyMTUwMDBDNEFGRjJEOUMzMkNCRTU1NDAyM0ZFQUI2MEZEQjlGMDJECis6MTAyMTYwMDAwM0UyOUZERkQwRjczNkVFNTVDMzI2RUIxOUUyOTNEMzk3Cis6MTAyMTcwMDAyNENGNEJDNTA5QjMzODczQjFDQTc4RDRDNjk5MjM4QjIxCis6MTAyMTgwMDAxMDY3NTY2NzcxRTY0MDhCODhDQjUyMDc3QzFDQkY2RDg5Cis6MTAyMTkwMDA5NUM0RkRCMjJCREIxM0ZGQzVGNjA5MjI0Rjk0QjhDNUQ5Cis6MTAyMUEwMDBBRjExNkU0RTg1M0FDMzQxQ0FFQkVEOTU4MUYyMDU4OEI5Cis6MTAyMUIwMDA0MzNFRTA3NTJBNzE3MTlGRjUwMkVERjk1NDQ0Rjg3REI0Cis6MTAyMUMwMDA3QjdDMDM5Q0Y0RjQ1QzA0OEVGOTM1RkRCMzY1N0VCRjIzCis6MTAyMUQwMDA1MDdBQTlFN0FDQjc1REY4MDU0REY4ODU1NDU1Q0YyMDg2Cis6MTAyMUUwMDBEN0E1NUQ3RUMxM0U2NzkxMUYwRUJGQjBCNENCRjIwQjg5Cis6MTAyMUYwMDA5NjlEOTc1Njg5RjNCMjk0RkMwMkYyNjc1OTk3RUQxN0IyCis6MTAyMjAwMDA5Q0U3QUM2MkUzOTA5ODhENDMyQ0JGMTAxM0RGMjE2RUU2Cis6MTAyMjEwMDA3NzlDQjMyODZFM0ZFNEUwNjJENEEzRTU1RDc5NzAwODUzCis6MTAyMjIwMDA5RkU3MzlFNzVDNUY0RDZEODQ3RTRCMTAzQTAzMTE1Mjk2Cis6MTAyMjMwMDBDRkUyMTk3REFEOTFFN0RDNDk2OThENkMwN0M3OTU3NkQyCis6MTAyMjQwMDBDOENEQUY1Q0I0OUQ4NUVDNzNDN0U0NzNDNzNEQ0VCNjEzCis6MTAyMjUwMDBCNzgxRTNERDYyOUZENjM5NzQxQ0Y3NkZFNkQ4NUI5N0QwCis6MTAyMjYwMDAyNkNFMjMzQzdGNkVBMjdEQkFFREFENzVCMTk5ODhFNzhECis6MTAyMjcwMDA1OUU3MjdCQjA0REVGRkYxMUEwQkY3MjJBRTM0ODI4QzNDCis6MTAyMjgwMDBFRkYzRTI4NjRGOTJGQzlBQzRFRjM0MUU0M0ZGRDMxMTYyCis6MTAyMjkwMDA0QkE2MTQ5REVERkM5MzM0RUZFQUU4OTQ0Qzc5QTAxQjE3Cis6MTAyMkEwMDA5QjQ3NUZBNjkyMDhEQUU5QTdCQTlBMkVERDRFOUJEQjIwCis6MTAyMkIwMDBBQzdBREZDRTMyNzFEOUQ5NkFDRkE3RkYzNjJFQjJFRDE0Cis6MTAyMkMwMDBDMDNERUVFMTZBNzM0MzNFN0UzQzYzRjFBMzZGRDBEMzIxCis6MTAyMkQwMDA0RDE3RkU2Q0JEMzhBRTJDNjVGQzkzQzdERjlBQzY2NTAyCis6MTAyMkUwMDBGMUI3MTc4NjNGOEVFMzM5NDg3MjNGMDdGRTE4Q0UyN0I1Cis6MTAyMkYwMDBGRkY5RjBDNzc4RDcyQ0ZFMTgyMzM5QjVENjBCRkNGMUJGCis6MTAyMzAwMDA0QzE3OUMzM0JFQjk2NDVDMTEzOUM5N0NCQjU0NUNGMTc5Cis6MTAyMzEwMDA1MEQ3Qjk3MUM1QjdCQjg0REY1NEI0NjlGNjFGQzU5N0YwCis6MTAyMzIwMDA4ODJCREM3RTAyRjFDMzNGMzE3RjBDNzFFRURBQkYzN0MwCis6MTAyMzMwMDBFMTBCOTQzOUU3MTdGQTk5RUZEMzM4QzIwRDc0NzlFQ0IxCis6MTAyMzQwMDA0OEIwMkQyOUIxMURDNDlGQTBFN0EzRTYxMkQ2QTNDQkE4Cis6MTAyMzUwMDA2NTBGODgxMzdGRDg5NUQzM0Y5RjVENUNGMEI4Qzk0RDVBCis6MTAyMzYwMDA5QzA3QjRFQjk5QkYwRjE0Mzc1MDdFNjRBNzVGQjQ1RjJFCis6MTAyMzcwMDAyQTI4M0U0MkVENThBRkM4NDNFRkI3RjI3RTYzNUVFMEQ1Cis6MTAyMzgwMDBGQTQxQkY1NDYwMUM5MUU4QkJDNTY5OTE2RkVGNTk0RThCCis6MTAyMzkwMDA3OUNGREY3NkQ5QkY5N0VDQjk4MTdGNzcwMzdGRURBODNFCis6MTAyM0EwMDA5QkNFQkYyRTcxQ0Y5NzQ4N0RDOEY3QzFBQjM0Q0VBMzZCCis6MTAyM0IwMDA1QjdDQTE3NDEwOUREMzQzQ0JGQzhDMDM4NzNBOEUxRUFCCis6MTAyM0MwMDBCQTkzRjIzMjFEMjIwRjg2MEE1MUZENzEzQTdGMTFENjVGCis6MTAyM0QwMDAzNEU3OUMwQjMyMjhBNzI5M0YzRjQ4NzdEQjE5NzQ2QzAwCis6MTAyM0UwMDAxMEY3QTAzNUYxQkUzNDhBRjE3QjZFRERDRUI4REJEMUJCCis6MTAyM0YwMDAwNzJCNUY2QUZGM0VCMDcwQ0Q3QURCNEU5ODhFNkQyNzVCCis6MTAyNDAwMDA4NTQ1OTM5QTk2RTM2RjA2N0I5REJGRkY3NkI3NzJFRDg1Cis6MTAyNDEwMDA3RDcxQkE5QjNDNUFFRkUxRkFDNUJFMUEyNTQwRjU5NDhFCis6MTAyNDIwMDA3RDc1MjJDQjNFNUNFMzg5RTVBQjhGNUYxQjkzMUM3OTA2Cis6MTAyNDMwMDA2REJCQkU1RDEwMTFFQjlBNkZCRTAxRDc3QTdDN0FEQzYyCis6MTAyNDQwMDAyNDNEMURENkQzNzFGRTFENzI1REI5OTRDQ0M5M0I3QjcyCis6MTAyNDUwMDBBRDc5ODYyNDIzRDM4QUNDMUMyQTEyRTc4NUFGMkEwOUJBCis6MTAyNDYwMDAxRUMyMDNBMUVERDcxMzhGRkQ1NTNENzAzQTQ4RjczN0QzCis6MTAyNDcwMDA5MkYwMDZCNkExNTIzNTkxQ0VFMzg3OTZDNzg0MUYxQTEzCis6MTAyNDgwMDBGMjRFQzY1ODhFRDc3OTM4REY4Qjk4MkE2RjlFNkM2MUQyCis6MTAyNDkwMDA0Q0Y4RTlFMTlBMjNCQ0JFMjRGMjg1RUE1NUVFNzEwMUJECis6MTAyNEEwMDA2QjVDODEzQUNBRjU4RTdEQjVERkQ0Njk1RkZCRTgwN0M2Cis6MTAyNEIwMDAzNzU3QTA3Q0JCRkZGQkMxREQ0MUQyREZCQjM5NEYzM0I3Cis6MTAyNEMwMDA0NkY5MUFGNEE3MDVENzFDOEJCNTIxRERGRDM3MkExQTZBCis6MTAyNEQwMDBFREEzNDNBRURBNERFQjFBOEQ4MkMxNzUwMDk3NUU5NDgxCis6MTAyNEUwMDBBQzUxMDI1QzJGMzUzRDdDMDdENEFEMjcwNUM1NTQxOThFCis6MTAyNEYwMDAyMTNEOUNGMjBCRkQxMDdBMTZCNEY0RTY4MDIxRUEzRUYxCis6MTAyNTAwMDAwN0EyQTI3RTY1Q0IyRkU3N0Q4MEVBRDI2N0EzMEFDNzI4Cis6MTAyNTEwMDAyNTc2RkQ4QTZBM0RGOTcwREM3RUNCMkVGQjJEQkI0NDBGCis6MTAyNTIwMDA5Q0NBNzU4N0Q5Rjc4QjMzN0NFRUVDNkZDOTg0RTk5QzI0Cis6MTAyNTMwMDAyOUQyRkM0NjhDRTgxRTc1QUU2QjZGRDM5NDAzOTcxQ0IyCis6MTAyNTQwMDA1OEYxQTJERkJBOENFRjVBOUZEMDJGRTVBOTVGQjAzRkI4Cis6MTAyNTUwMDAyRDUyQTZGOEJDMkE1QTdEOEFGREU5N0RENjdBQkE5QTEwCis6MTAyNTYwMDA4MUY3NTlCQ0QyRjJEQjcxMzMyMkU4RkRBNUMzMEY0OEQ1Cis6MTAyNTcwMDBEN0JDNkE3QUU5NUNCODU1REM0OUYwMzY4QkJBNUQ4MTI0Cis6MTAyNTgwMDAwQTQ2MDZGOTdDQTAyMkM4Rjc5QUNBNTY1QTc1QkE3NTQ3Cis6MTAyNTkwMDBFMjVFODU3RDJGQkMyMkVFQkMxNzE2ODI5Q0RGMDk1NEJCCis6MTAyNUEwMDA4QjdCNTlCOTdEOTAzNzlFRjNGRURCQ0U1RjFFN0VFRUFFCis6MTAyNUIwMDA0NDBFQkQyRkM1OUNGN0M3Q0ZGN0ZERUY3QkQzQ0Y5RDUyCis6MTAyNUMwMDA0MEZEMUEzNUNFNkQ4N0I2QkNFRUVENkQ2NjdFRDlGQTRDCis6MTAyNUQwMDA2OEVCNjc4OEI2RDgzOEZGRjc2M0ExNzhERUZBQ0MzMUFDCis6MTAyNUUwMDBDQjBFQ0VFN0NGQ0E3Q0YxMUVDMjQ1RjdBRDg5M0JGMERBCis6MTAyNUYwMDBEMTAzOTY3RDNFMTAxM0Y5NEY3NUYxMTlDRUFCMURCNDgyCis6MTAyNjAwMDBFRTVGMUQwQ0MwODZFRkU0OTkzNzEzNTM3OTdDNTZGRkJCCis6MTAyNjEwMDA5RDM4QzJENjlGQjk3QzM4MEY4RTU4MTNCNUUyMTA0RjQzCis6MTAyNjIwMDA4MENFRjE1MUEzRUQ1OUFBNDdCRUFCQTkzQUU0RjgwMTE3Cis6MTAyNjMwMDA3NzlFRERDNjExMDVERDc2QkVFRjNEQzY1MTI1QzEyOTY5Cis6MTAyNjQwMDBBMUI3MkI5RDcxODcxQjA3MEMyQkU5MEQ2NEU3QzM3NUEwCis6MTAyNjUwMDBBQUVEOUZEODhGNUNGRDZDRTFENzkzOEM5MzkyNTJFRURDCis6MTAyNjYwMDBCOUI5M0Y3MzA3RDMwREI5RjJFQzUwRUVGQ0REQ0FGRUU5Cis6MTAyNjcwMDAxOEYwN0E0MkZBOTkyOUJBNjcxRThBMjlFMkRFRDZBOEFBCis6MTAyNjgwMDAwOUI5Rjc2RUM2M0NCRjlDMzk2NUZERkIwMzFCNzdCMEVCCis6MTAyNjkwMDAzRUVGOUZFMkRGRDNDMDE3MjA3N0ZFQkQxRkRCQ0NCRjJDCis6MTAyNkEwMDAyRjM5OUZEQzY3RkQ3QTU4NzVFNERGMkVENjJFRkUyNTg0Cis6MTAyNkIwMDA2NkQ1QjcwMzEwMjBCQjM4MEJGNzcwREQxRDQ2NjM4RTVGCis6MTAyNkMwMDBGMzg4MkIxMDBCRjhDODE2N0ZCODRENjU5NTc1NzQ0OUMzCis6MTAyNkQwMDA1OTdCODE3NjUxRDczRjlCOThGNThCMEE3RDY3NTg5RjMwCis6MTAyNkUwMDA1NUQyQUQwQThBQzcyMUMzQkY1M0I0RUY5NTlFODU1RjBCCis6MTAyNkYwMDBGMkJDQzlBNzI0NjkxNjY3NUQ4OUUxM0VGREZFNzEyOTE4Cis6MTAyNzAwMDBBOTlDRTZBMUQ2QkRGRTI1NjBGMEYzMUE4ODczN0IzNTNGCis6MTAyNzEwMDBGNDcwNUIwN0EzREM1RTAzOTNEQ0Q2QzMxNEI3MEQ3MEMzCis6MTAyNzIwMDA4NkRCMTVBMENCMzRDOUY1NjBDQUMwNTczNTEzRENCRkIyCis6MTAyNzMwMDAwMTkyRENCNjQwRTJGRDUzQjhGRUZFOEFFRDJCMzg1RTE2Cis6MTAyNzQwMDBCNEZEODdDNTI3OUJDRjc5RUM5RDcxQTRDRDBGOUJFRjdFCis6MTAyNzUwMDBGRjQ4Q0VGQTAyRUMzOTE1MTI3RUI4N0Q2NTg2RjUzQzRECis6MTAyNzYwMDAxODE0MzhEOThFQUY2RDNBRjNFMURFQ0I4NUNGNkM1Q0FGCis6MTAyNzcwMDBGOTdGRTdBREIxNDFFMDQ4MDAwMDAwMDAwMDAwMDAwMDMzCis6MTAyNzgwMDAwMDAwMDAxODAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MEYxCis6MTAyNzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjgwMDAwMDAwMDExCis6MTAyN0EwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDE5Cis6MTAyN0IwMDAwMDAwMDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMEU5Cis6MTAyN0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAxCis6MTAyN0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY5Cis6MTAyN0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU5Cis6MTAyN0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ5Cis6MTAyODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM4Cis6MTAyODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI4Cis6MTAyODIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE4Cis6MTAyODMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk4Cis6MTAyODQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg4Cis6MTAyODUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc4Cis6MTAyODYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY4Cis6MTAyODcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU4Cis6MTAyODgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTAyODkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTAyOEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI4Cis6MTAyOEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE4Cis6MTAyOEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4Cis6MTAyOEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY4Cis6MTAyOEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkwMDAwMDEwMDAwMDQ4Cis6MTAyOEYwMDAwMDAwMDAwODAwMDA5MDA4MDAxMDAwMDAwMDAwMDAwMjI2Cis6MTAyOTAwMDAwMDAwOTAwMDAwMTAwMDAwMDAwMDAwMTAwMDAwOURBOEQyCis6MTAyOTEwMDAwMDAwMDAwMDAwMDAwMDA4ODAwMDAwMDAwMDAwMDAwMDJGCis6MTAyOTIwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTAyOTMwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTFBMEU2Cis6MTAyOTQwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDkzQzAwMDAxMDAwNDI3Cis6MTAyOTUwMDAwMDAwMDAwMTAwMDA5M0M4MDAwMDAwMDAwMDAwMDAwMjE5Cis6MTAyOTYwMDAwMDAwOTNEMDAwMDAwMDAwMDAwMDAwMDgwMDAwOTNENDk1Cis6MTAyOTcwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDk0OTgwMDAwMDAwMDI5Cis6MTAyOTgwMDAwMDAwMDAwODAwMDA5M0Q4MDAwODAwMDAwMDAwMDAwOEM0Cis6MTAyOTkwMDAwMDAwOUIzODAwNDAwMDAwMDAwMDAwNDAwMDAwOTQxODM4Cis6MTAyOUEwMDAwMDA4MDAwMDAwMDAwMDA4MDAwMDk0NTgwMDA4MDAwMDIzCis6MTAyOUIwMDAwMDAwMDAwODAwMDA5NEE4MDBDODAwMDAwMDAwMDA5ODczCis6MTAyOUMwMDAwMDAwOTYzODAwOTgwMDAwMDAwMDAwMjgwMDAwOTY3ODZCCis6MTAyOUQwMDAwMDk4MDAwMDAwMDAwMDI4MDAwMEMwMDAwNTQwMDAzMDAyCis6MTAyOUUwMDAwMDAwMDU0MDAwMDBDQjIwMDAwODAwMDAwMDAwMDAwMUFFCis6MTAyOUYwMDAwMDAwQ0IyMTAwMDgwMDAwMDAwMDAwMDEwMDAwMjAwOEJBCis6MTAyQTAwMDAwMDEwMDAwMDAwMDAwMDEwMDAwMDIwMDAwMDAwMDAwMDg2Cis6MTAyQTEwMDAwMDAwMDAwODAwMDA5RDYwMDAwODAwMDAwMDAwMDAwMkE3Cis6MTAyQTIwMDAwMDAwOURBMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDY4Cis6MTAyQTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk2Cis6MTAyQTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg2Cis6MTAyQTUwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDc2Cis6MTAyQTYwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMEU2Cis6MTAyQTcwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ2Cis6MTAyQTgwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDQ2Cis6MTAyQTkwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMEI2Cis6MTAyQUEwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE2Cis6MTAyQUIwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDE2Cis6MTAyQUMwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDg2Cis6MTAyQUQwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc2Cis6MTAyQUUwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY2Cis6MTAyQUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ2Cis6MTAyQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM1Cis6MTAyQjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI1Cis6MTAyQjIwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDI1Cis6MTAyQjMwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTAyQjQwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTAyQjUwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMEY1Cis6MTAyQjYwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU1Cis6MTAyQjcwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ1Cis6MTAyQjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ1Cis6MTAyQjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM1Cis6MTAyQkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI1Cis6MTAyQkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTAyQkMwMDAwMDAwMDAwMDAwMDAxMkM4MDA4MDAwMDAwMDAwMDA4MDJCCis6MTAyQkQwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwQTAwMDU0Cis6MTAyQkUwMDAwNzEwMDAwMDAwMDAwNzEwMDAwMDFFQzgwMDAwMDAwMEQxCis6MTAyQkYwMDAwMDAwMDAwODAwMDBBRUMwMDAwODAwMDAwMDAwMDAwODRGCis6MTAyQzAwMDAwMDAwQUU0MDAwMDgwMDAwMDAwMDAwMDgwMDAwQUU4MDk4Cis6MTAyQzEwMDAwMDA4MDAwMDAwMDAwMDA4MDAwMDIwMDgwMDEwMDAwMDZDCis6MTAyQzIwMDAwMDAwMDAxMDAwMDAyMDAwMDAwMDAwMDAwMDAwMDAwODZDCis6MTAyQzMwMDAwMDAwQTAxMDA3MTAwMDQwMDAwMDAwNDAwMDAwQUY0MDVFCis6MTAyQzQwMDAwMDA4MDAwMDAwMDAwMDAxMDAwMEFGNDEwMDA4MDAwMDgzCis6MTAyQzUwMDAwMDAwMDAwMTAwMDAxRUQwMDAwMDAwMDAwMDAwMDAwMTg0Cis6MTAyQzYwMDAwMDAwMUVEODAwMDAwMDAwMDAwMDAwMDIwMDAwMUVEQTc0Cis6MTAyQzcwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDEyQjAwMDA4MDAwMDg4Cis6MTAyQzgwMDAwMDAwMDAwODgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJDCis6MTAyQzkwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDM0Cis6MTAyQ0EwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMEE0Cis6MTAyQ0IwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk0Cis6MTAyQ0MwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDA0Cis6MTAyQ0QwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDc0Cis6MTAyQ0UwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY0Cis6MTAyQ0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ0Cis6MTAyRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMzCis6MTAyRDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIzCis6MTAyRDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDIzCis6MTAyRDMwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDEzCis6MTAyRDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgzCis6MTAyRDUwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDczCis6MTAyRDYwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMEUzCis6MTAyRDcwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQzCis6MTAyRDgwMDAwMDAwQjAwMDAwMTgwMDAwMDAwMDAwMTgwMDAwQjMwMEIwCis6MTAyRDkwMDAwMDQwMDAwMDAwMDAwMDQwMDAwMEIzMDAwMDQwMDAwMkJFCis6MTAyREEwMDAwMDAwMDAwMTAwMDBCMzAxMDA0MDAwMDIwMDAwMDAwMDJDCis6MTAyREIwMDAwMDAwODAwMDAwNDAwMDAwMDAwMDAwNDA4MDAwMDAwMDkzCis6MTAyREMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDA4MDA0MDNCCis6MTAyREQwMDAwMDAwMDAwNDAwMDA4MDA0MDAwODAwNDAwMDAwMDAwNDFGCis6MTAyREUwMDAwMDAwQkIwMDAwMjgwMDAwMDAwMDAwMjgwMDAwQkM0MERDCis6MTAyREYwMDAwMDEwMDAwMDAwMDAwMDEwMDAwMDg4MDAwMDgwMDAwMEFCCis6MTAyRTAwMDAwMDAwMDA4MDAwMDA4ODAwMDAwODAwODAwMDAwMDAwMjMwCis6MTAyRTEwMDAwMDAwOEMwMDAwMjAwMDAwMDAwMDAwMjAwMDAwMjAwOEJFCis6MTAyRTIwMDAwMDEwMDAwMDAwMDAwMDEwMDAwMDIwMDAwMDAwMDAwMDYyCis6MTAyRTMwMDAwMDAwMDAwODAwMDAxMTA4MDAwODAwMDAwMDAwMDAwODYxCis6MTAyRTQwMDAwMDAwMTE2ODAwMDgwMDAwMDAwMDAwMDgwMDAwMTFBODQwCis6MTAyRTUwMDAwMDA4MDAwMDAwMDAwMDA4MDAwMDEyNzAwMDA4MDAwMEQ4Cis6MTAyRTYwMDAwMDAwMDAwMTAwMDAxMjcxMDAwODAwMDAwMDAwMDAwMUQ1Cis6MTAyRTcwMDAwMDAwOEQwMDAwMTAwMDA0MDAwMDAwMDQwMDAwMTMyMDdBCis6MTAyRTgwMDAwMDMwMDAxODAwMDAwMDEwMDAwMDEzMjgwMDMwMDAxODY3Cis6MTAyRTkwMDAwMDAwMDAwMjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MTAyRUEwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTFFOEE5Cis6MTAyRUIwMDAwMDAwMDAwMDAwMDAwMDAxODAwMDAwMDAwMDAwMDAwMDkxCis6MTAyRUMwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgyCis6MTAyRUQwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMEYyCis6MTAyRUUwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDYyCis6MTAyRUYwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUyCis6MTAyRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTAyRjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIxCis6MTAyRjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEExCis6MTAyRjMwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDkxCis6MTAyRjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgxCis6MTAyRjUwMDAwMDAwMDAwMDAwMDA4MzA4MDA4MDAwMDAwMDAwMDA4MEU2Cis6MTAyRjYwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMjAwODM4Cis6MTAyRjcwMDAwMDEwMDAwMDAwMDAwMDEwMDAwMDIwMDAwMDAwMDAwMDExCis6MTAyRjgwMDAwMDAwMDAwODAwMDA4RDEwMDAwODAwMDAwMDAwMDAwODhDCis6MTAyRjkwMDAwMDAwOEQ3MDAwMDgwMDAwMDAwMDAwMDgwMDAwODQ1MDUwCis6MTAyRkEwMDAwNDYwMDAyODAwMDAwNDYwMDAwMDhFQTAwMDA4MDAwMEZCCis6MTAyRkIwMDAwMDAwMDAwMTAwMDA4RUExMDAwODAwMDAwMDAwMDAwMUQ4Cis6MTAyRkMwMDAwMDAwODQwODAwMDgwMDAwMDAwMDAwMDgwMDAwODQ0ODk5Cis6MTAyRkQwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDhERjQwMDA4MDAwMDY3Cis6MTAyRkUwMDAwMDAwMDAwMjAwMDA4REY2MDAwODAwMDAwMDAwMDAwMjUyCis6MTAyRkYwMDAwMDAwOEUwNDAwMTAwMDAwMDAwMDAwMDQ4MDAwMDAwMEFCCis6MTAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDQwCis6MTAzMDEwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwCis6MTAzMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwCis6MTAzMDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkwCis6MTAzMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwCis6MTAzMDUwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDcwCis6MTAzMDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwCis6MTAzMDcwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQwCis6MTAzMDgwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDQwCis6MTAzMDkwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMEIwCis6MTAzMEEwMDAwMDAwMDAwMDAwMDAzMDAwMDA0MDAwMDAwMDAwMDAwOEE4Cis6MTAzMEIwMDAwMDAwMzAwODAwNDAwMDAwMDAwMDAwMjgwMDAwMzM5MEFECis6MTAzMEMwMDAwMUMwMDAxMDAwMDAwMDA4MDAwMDMyMDAwMDIwMDAwMEQ1Cis6MTAzMEQwMDAwMDAwMDAyMDAwMDAzNzIwMDAwMDAwMDAwMDAwMDAwODcxCis6MTAzMEUwMDAwMDAwMTAyMDA2MjAwMDM4MDAwMDAwMDgwMDAwQTAwMEFBCis6MTAzMEYwMDAwMDAwMDAwMDAwMDAyMDAwMDAwMDNFQTkwMDAwMDAwMEM5Cis6MTAzMTAwMDAwMDAwMDAwMTAwMDAzRUM4MDAwMDAwMDAwMDAwMDAwMkI2Cis6MTAzMTEwMDAwMDAwMUM0MDAwRTAwMDA4MDAwMDAwMDg4MDAwMDAwMEUzCis6MTAzMTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwMDAwMDA4MDAwMDU3Cis6MTAzMTMwMDAwMDAwMDAwMTAwMDA0MDAxMDAwODAwMDAwMDAwMDAwMTQ0Cis6MTAzMTQwMDAwMDAwNDA0MDAwMDgwMDA0MDAwMDAwMDIwMDAwNDA2MDUxCis6MTAzMTUwMDAwMDA4MDAwNDAwMDAwMDA0MDAwMDQwMDAwMDA4MDAwMDE3Cis6MTAzMTYwMDAwMDAwMDAwNDAwMDA0MDA0MDAwODAwMDAwMDAwMDAwNDBCCis6MTAzMTcwMDAwMDAwNDA0MDAwMDAwMDAwMDAwMDAwMDgwMDAwNDA0ODNGCis6MTAzMTgwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDgwMDAwMDAwMDAwMEI3Cis6MTAzMTkwMDAwMDAwMDAxMDAwMDA1MDQwMDAwMTAwMDQwMDAwMDAwMTg5Cis6MTAzMUEwMDAwMDAwNTAwMDAwMDAwMDAwMDAwMDAwMjAwMDAwNTAwODU3Cis6MTAzMUIwMDAwMDEwMDAwMDAwMDAwMDA0MDAwMDUwMEMwMDEwMDAwMDhGCis6MTAzMUMwMDAwMDAwMDAwMTAwMDA1MkM3MDAwMDAwMDAwMDAwMDAwMUU0Cis6MTAzMUQwMDAwMDAwNTJDNjAwMDAwMDAwMDAwMDAwMDEwMDAwMzAwMEE2Cis6MTAzMUUwMDAwMDMwMDAxODAwMDAwMDA0MDAwMDMwMDQwMDMwMDAxODE3Cis6MTAzMUYwMDAwMDAwMDAwNDAwMDAzMDA4MDAzMDAwMTgwMDAwMDAwMjQ5Cis6MTAzMjAwMDAwMDAwMzAwQTAwMzAwMDE4MDAwMDAwMDIwMDAwMzAwQ0ZFCis6MTAzMjEwMDAwMDMwMDAxODAwMDAwMDAxMDAwMDMwMEQwMDMwMDAxOEUwCis6MTAzMjIwMDAwMDAwMDAwMTAwMDAzMDBFMDAzMDAwMTgwMDAwMDAwMTE2Cis6MTAzMjMwMDAwMDAwMzAxMDAwMzAwMDE4MDAwMDAwMDQwMDAwMzAxNEJFCis6MTAzMjQwMDAwMDMwMDAxODAwMDAwMDA0MDAwMDUwMDAwMTAwMDA4MDYxCis6MTAzMjUwMDAwMDA4MDAwNDAwMDA1MDA0MDEwMDAwODAwMDA4MDAwNDgxCis6MTAzMjYwMDAwMDAwMDAwQTAwMDAwMDAwMDAwMDAwMDAwMDAwNTA2ODlDCis6MTAzMjcwMDAwMTAwMDA4MDAwMDAwMDAxMDAwMDUwNjkwMTAwMDA4MDkyCis6MTAzMjgwMDAwMDAwMDAwMTAwMDA1MDZDMDEwMDAwODAwMDAwMDAwMkZFCis6MTAzMjkwMDAwMDAwNTA2RTAxMDAwMDgwMDAwMDAwMDIwMDAwNTA3MDJECis6MTAzMkEwMDAwMTAwMDA4MDAwMDAwMDA0MDAwMDUwNzQwMTAwMDA4MDU0Cis6MTAzMkIwMDAwMDAwMDAwNDAwMDA1MDY2MDEwMDAwODAwMDAwMDAwMkQxCis6MTAzMkMwMDAwMDAwNTA2NDAxMDAwMDgwMDAwMDAwMDEwMDAwNTA2MDE4Cis6MTAzMkQwMDAwMTAwMDA4MDAwMDAwMDAyMDAwMDUwNjIwMTAwMDA4MDM4Cis6MTAzMkUwMDAwMDAwMDAwMjAwMDA1MDUwMDEwMDAwODAwMDAwMDAwNEI3Cis6MTAzMkYwMDAwMDAwNTA1NDAxMDAwMDgwMDAwMDAwMDQwMDAwNTA1OEZECis6MTAzMzAwMDAwMTAwMDA4MDAwMDAwMDA0MDAwMDUwNUMwMTAwMDA4MDBCCis6MTAzMzEwMDAwMDAwMDAwNDAwMDA1MDdDMDEwMDAwODAwMDAwMDAwMTVCCis6MTAzMzIwMDAwMDAwNTA3RDAxMDAwMDgwMDAwMDAwMDEwMDAwNDAxOEY2Cis6MTAzMzMwMDAwMDEwMDAwMDAwMDAwMDA0MDAwMDQwOTAwMDEwMDAwMDk5Cis6MTAzMzQwMDAwMDAwMDAwNDAwMDA0MDk4MDAxMDAwMDAwMDAwMDAwNDhECis6MTAzMzUwMDAwMDAwNDExMDAwMDAwMDAwMDAwMDAwMDIwMDAwNDExMkM3Cis6MTAzMzYwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDQxMTQwMDAwMDAwMDA2Cis6MTAzMzcwMDAwMDAwMDAwMjAwMDA0MTE2MDAwMDAwMDAwMDAwMDAwMkYyCis6MTAzMzgwMDAwMDAwNjA0MDAwMDgwMDAwMDAwMDAwMDIwMDAwNjA0MkYxCis6MTAzMzkwMDAwMDA4MDAwMDAwMDAwMDAyMDAwMDYwNDQwMDA4MDAwMDc3Cis6MTAzM0EwMDAwMDAwMDAwNDAwMDA2MDgwMDAwODAwMDAwMDAwMDAwODI5Cis6MTAzM0IwMDAwMDAwNjBDMDAwNDAwMDA4MDAwMDAwMDgwMDAwNjAwMDNECis6MTAzM0MwMDAwMDA4MDAwMDAwMDAwMDAyMDAwMDYwMDIwMDA4MDAwMDg5Cis6MTAzM0QwMDAwMDAwMDAwMTAwMDA2MDA0MDAwODAwMDAwMDAwMDAwMjdFCis6MTAzM0UwMDAwMDAwNjM0MDAwMDgwMDAwMDAwMDAwMDgwMDAwNjM4MDQ3Cis6MTAzM0YwMDAwMDA4MDAwMDAwMDAwMDA0MDAwMDYzODQwMDA4MDAwMEQyCis6MTAzNDAwMDAwMDAwMDAwMTAwMDA2M0MwMDAwODAwMDAwMDAwMDAwMjhFCis6MTAzNDEwMDAwMDAwNjNDNDAwMDgwMDAwMDAwMDAwMDIwMDAwNjQwMDE3Cis6MTAzNDIwMDAwMDA4MDAwMDAwMDAwMDA0MDAwMDcwMDAwMDEwMDAwMDEwCis6MTAzNDMwMDAwMDAwMDAwNDAwMDA3MDA0MDAxMDAwMDAwMDAwMDAwNDAwCis6MTAzNDQwMDAwMDAwNzAwODAwMTAwMDAwMDAwMDAwMDQwMDAwNzAwMDgwCis6MTAzNDUwMDAwMDA4MDAwMDAwMDAwMDAyMDAwMDcwMDIwMDA4MDAwMEU4Cis6MTAzNDYwMDAwMDAwMDAwMTAwMDA3MDA0MDAwODAwMDAwMDAwMDAwMkRECis6MTAzNDcwMDAwMDAwNzA0MDAwMDgwMDAwMDAwMDAwMDIwMDAwNzA0NERFCis6MTAzNDgwMDAwMDA4MDAwMDAwMDAwMDAyMDAwMDcwNDYwMDA4MDAwMDc0Cis6MTAzNDkwMDAwMDAwMDAwMjAwMDA3NjQ4MDAwODAwMDAwMDAwMDAwODVDCis6MTAzNEEwMDAwMDAwNzA4MDAwMDgwMDAwMDAwMDAwMDIwMDAwNzA4NDJFCis6MTAzNEIwMDAwMDA4MDAwMDAwMDAwMDAyMDAwMDc2ODgwMDA4MDAwMEZDCis6MTAzNEMwMDAwMDAwMDAwODAwMDA4MDQwMDAwODAwMDAwMDAwMDAwMTJCCis6MTAzNEQwMDAwMDAwODA0MTAwMDgwMDAwMDAwMDAwMDEwMDAwODA0MjYwCis6MTAzNEUwMDAwMDA4MDAwMDAwMDAwMDAxMDAwMDgwNDMwMDA4MDAwMDA4Cis6MTAzNEYwMDAwMDAwMDAwMTAwMDA4MDAwMDAwODAwMDAwMDAwMDAwMjQxCis6MTAzNTAwMDAwMDAwODAwMjAwMDgwMDAwMDAwMDAwMDEwMDAwODAwNEFDCis6MTAzNTEwMDAwMDA4MDAwMDAwMDAwMDAyMDAwMDgwQzAwMDA4MDAwMDU5Cis6MTAzNTIwMDAwMDAwMDAwMjAwMDA4MEMyMDAwODAwMDAwMDAwMDAwMjRECis6MTAzNTMwMDAwMDAwODBDNDAwMDgwMDAwMDAwMDAwMDIwMDAwODA4MDNECis6MTAzNTQwMDAwMDA4MDAwMDAwMDAwMDAxMDAwMDgwODEwMDA4MDAwMDY5Cis6MTAzNTUwMDAwMDAwMDAwMTAwMDA4MDgyMDAwODAwMDAwMDAwMDAwMTVGCis6MTAzNTYwMDAwMDAwODA4MzAwMDgwMDAwMDAwMDAwMDEwMDAwODA4NDRCCis6MTAzNTcwMDAwMDA4MDAwMDAwMDAwMDAxMDAwMDgwODUwMDA4MDAwMDM1Cis6MTAzNTgwMDAwMDAwMDAwMTAwMDA4MDg2MDAwODAwMDAwMDAwMDAwMTJCCis6MTAzNTkwMDAwMDAwNjAwMDAwMDgwMDAwMDAwMDAwMDIwMDAwNjAwMjVGCis6MTAzNUEwMDAwMDA4MDAwMDAwMDAwMDAxMDAwMDYwMDQwMDA4MDAwMEE2Cis6MTAzNUIwMDAwMDAwMDAwMjAwMDA2MDQyMDBDMDAwMTgwMDAwMDAwMjhECis6MTAzNUMwMDAwMDAwNjA0MDAwQzAwMDE4MDAwMDAwMDIwMDAwNjA0Q0Q1Cis6MTAzNUQwMDAwMEMwMDAxODAwMDAwMDA4MDAwMDYwNDQwMEMwMDAxODhGCis6MTAzNUUwMDAwMDAwMDAwODAwMDA2MDU3MDBDMDAwMTgwMDAwMDAwMTQzCis6MTAzNUYwMDAwMDAwNjA1NDAwQzAwMDE4MDAwMDAwMDIwMDAwNjA1Njg3Cis6MTAzNjAwMDAwMEMwMDAxODAwMDAwMDAxMDAwMDY2NDAwMDA4MDAwMDMzCis6MTAzNjEwMDAwMDAwMDAwODAwMDA2NjgwMDAwODAwMDAwMDAwMDAwOEFDCis6MTAzNjIwMDAwMDAwNjZDMDAwMDgwMDAwMDAwMDAwMDgwMDAwRDk0MjQ5Cis6MTAzNjMwMDAwMDE4MDAwMDAwMDAwMDAyMDAwMERFNDAwMDAwMDAwMDUyCis6MTAzNjQwMDAwMDAwMDAwMDAwMDBFMDAwMDAwMDAwMDAwMDAwMDAwNDk2Cis6MTAzNjUwMDAwMDAwREQ0MDAwMDAwMDAwMDAwMDAwMDQwMDAwREQ0NDI4Cis6MTAzNjYwMDAwMDAwMDAwMDAwMDAwMDA0MDAwMERENDgwMDAwMDAwMDMxCis6MTAzNjcwMDAwMDAwMDAwNDAwMDBERDRDMDAwMDAwMDAwMDAwMDAwNDE5Cis6MTAzNjgwMDAwMDAwREQ1MDAwMDAwMDAwMDAwMDAwMDQwMDAwREQ1NEQ4Cis6MTAzNjkwMDAwMDAwMDAwMDAwMDAwMDA0MDAwMERENTgwMDAwMDAwMEYxCis6MTAzNkEwMDAwMDAwMDAwNDAwMDBERDQwMDAwMDAwMDAwMDAwMDAyMEQ5Cis6MTAzNkIwMDAwMDAwREEwMDAwMDAwMDAwMDAwMDAwMDQwMDAwREEwMDUyCis6MTAzNkMwMDAwMDAwMDAwMDAwMDAwMDY4MDAwMEJCNjAwMDAwMDAwMDc3Cis6MTAzNkQwMDAwMDAwMDAwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwNDE2Cis6MTAzNkUwMDAwMDAwQjBDMDAwMDAwMDAwMDAwMDAwMDQwMDAwQjBDNEYyCis6MTAzNkYwMDAwMDAwMDAwMDAwMDAwMDA0MDAwMEIwQzgwMDAwMDAwMDRFCis6MTAzNzAwMDAwMDAwMDAwNDAwMDBCMEMwMDAwMDAwMDAwMDAwMDAxMDM1Cis6MTAzNzEwMDAwMDAwRDZCMDAwMDAwMDAwMDAwMDAwMDQwMDAwRDZCNDk1Cis6MTAzNzIwMDAwMDAwMDAwMDAwMDAwMDA0MDAwMEQ2QjgwMDAwMDAwMDA3Cis6MTAzNzMwMDAwMDAwMDAwNDAwMDBENkJDMDAwMDAwMDAwMDAwMDAwNEVGCis6MTAzNzQwMDAwMDAwRDZCMDAwMDAwMDAwMDAwMDAwMTAwMDAwRDM0OEM4Cis6MTAzNzUwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMEQzNTgwMDAwMDAwMDM2Cis6MTAzNzYwMDAwMDAwMDA4MDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMEM5Cis6MTAzNzcwMDAwMDAwRDM1ODAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDE2Cis6MDgzNzgwMDAwNjAyMDUwMDAwMDAwMDAwMzQKKzowMDAwMDAwMUZGCmRpZmYgLS1naXQgYS9maXJtd2FyZS9ibngyeC9ibngyeC1lMi02LjAuMzQuMC5mdy5paGV4IGIvZmlybXdhcmUvYm54MngvYm54MngtZTItNi4wLjM0LjAuZncuaWhleApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzhiNDE2MS4uMDAwMDAwMAotLS0gYS9maXJtd2FyZS9ibngyeC9ibngyeC1lMi02LjAuMzQuMC5mdy5paGV4CisrKyAvZGV2L251bGwKQEAgLTEsMTU0NDIgKzAsMCBAQAotOjEwMDAwMDAwMDAwMDUyRDgwMDAwMDA2ODAwMDAwNzBDMDAwMDUzNDhCMAotOjEwMDAxMDAwMDAwMDMxODAwMDAwNUE1ODAwMDAwMEIwMDAwMDhCRTA2MgotOjEwMDAyMDAwMDAwMEMxNEMwMDAwOEM5ODAwMDAwMEQ4MDAwMTRERTg5MQotOjEwMDAzMDAwMDAwMEYxNjQwMDAxNEVDODAwMDAwMDc0MDAwMjQwMzA2RQotOjEwMDA0MDAwMDAwMDUyNTAwMDAyNDBBODAwMDAwMEI4MDAwMjkzMDBENwotOjEwMDA1MDAwMDAwMTIxMTAwMDAyOTNDMDAwMDAwRkZDMDAwM0I0RDg3RgotOjEwMDA2MDAwMDAwMDAwMDQwMDAzQzREODAyMDQwMDQ4MDAwMDAwMEY5MAotOjEwMDA3MDAwMDIwNDAwNTQwMDAwMDA0NTAyMDQwMDVDMDAwMDAwMDY3OQotOjEwMDA4MDAwMDIwNDAwNzAwMDAwMDAwNDAyMDQwMDc4MDAwMDAwMDA3OAotOjEwMDA5MDAwMDIwNDAwN0MxMjE3MDAwMDAyMDQwMDgwMjIxNzAwMDBGNgotOjEwMDBBMDAwMDIwNDAwODQzMjE3MDAwMDA2MDQwMDg4MDAwMDAwMDVFNgotOjEwMDBCMDAwMDIwNDAwOUMxMjE1MDAwMDAyMDQwMEEwMjIxNTAwMDA5QQotOjEwMDBDMDAwMDIwNDAwQTQzMjE1MDAwMDA2MDQwMEE4MDAwMDAwMDQ4OQotOjEwMDBEMDAwMDIwNDAwQjgwMjEwMDAwMDAyMDQwMEJDMDAxMDAwMDA3RQotOjEwMDBFMDAwMDIwNDAwQzAxMDEwMDAwMDAyMDQwMEM0MjAxMDAwMDAzMAotOjEwMDBGMDAwMDIwNDAwQzgzMDEwMDAwMDAyMDQwMENDNDAxMDAwMDBEMAotOjEwMDEwMDAwMDYwNDAwRDAwMDAwMDAwMzAyMDQwMERDMDAxMDAwMDAyMAotOjEwMDExMDAwMDIwNDAwRTAxMjE0MDAwMDAyMDQwMEU0MjIxNDAwMDBCMwotOjEwMDEyMDAwMDIwNDAwRTgzMjE0MDAwMDAyMDQwMEVDNDIxNDAwMDA1MwotOjEwMDEzMDAwMDYwNDAwRjAwMDAwMDAwMzAxMDQwMTI0MDAwMDAwMDA5OAotOjEwMDE0MDAwMDEwNDAxMjgwMDAwMDAwMDAxMDQwMTJDMDAwMDAwMDA0RgotOjEwMDE1MDAwMDEwNDAxMzAwMDAwMDAwMDAyMDQwMUQwMDAwMDg5MDYwMwotOjEwMDE2MDAwMDIwNDAyNTgwMDAwMDAzNjAyMDQwMjVDMDAwMDAwMzY1RgotOjEwMDE3MDAwMDIwNDAyNjAwODEwMDAwMDAyMDQwMjY0MDgxMDAwMDA3QgotOjEwMDE4MDAwMDIwNDAwMDQwMDAwMDBGRjAyMDQwMDA4MDAwMDAwRkY1OQotOjEwMDE5MDAwMDIwNDAwMEMwMDAwMDBGRjAyMDQwMDEwMDAwMDAwRkYzOQotOjEwMDFBMDAwMDIwNDAwMTQwMDAwMDA3RjAyMDQwMDE4MDAwMDAwRkY5OQotOjEwMDFCMDAwMDIwNDAwMUMwMDAwMDBGRjAyMDQwMDIwMDAwMDAwRkZGOQotOjEwMDFDMDAwMDIwNDAwMjQwMDAwMDAzRTAyMDQwMDI4MDAwMDAwMDA5OQotOjEwMDFEMDAwMDIwNDAwMkMwMDAwMDAzRjAyMDQwMDMwMDAwMDAwM0YzOQotOjEwMDFFMDAwMDIwNDAwMzQwMDAwMDAzRjAyMDQwMDM4MDAwMDAwM0YxOQotOjEwMDFGMDAwMDIwNDAwM0MwMDAwMDAzRjAyMDQwMDQwMDAwMDAwM0ZGOQotOjEwMDIwMDAwMDIwNDAwNDQwMDAwMDAzRjAyMDQwNENDMDAwMDAwMDE4RQotOjEwMDIxMDAwMDIwNDIwMDgwMDAwMDIxMTAyMDQyMDBDMDAwMDAyMDA2OQotOjEwMDIyMDAwMDIwNDIwMTAwMDAwMDIwNDAyMDQyMDE0MDAwMDAyMTkzRAotOjEwMDIzMDAwMDIwNDIwMUMwMDAwRkZGRjAyMDQyMDIwMDAwMEZGRkYzQQotOjEwMDI0MDAwMDIwNDIwMjQwMDAwRkZGRjAyMDQyMDI4MDAwMEZGRkYxQQotOjEwMDI1MDAwMDIwNDIwMzgwMDAwMDAyMDA2MDQyMDNDMDAwMDAwMEZBQgotOjEwMDI2MDAwMDIwNDIwNzgwMDAwMDAyMTA2MDQyMDdDMDAwMDAwMEYxQQotOjEwMDI3MDAwMDIwNDIwQjgwMDAwMDAwMTA2MDQyMEJDMDAwMDAwMEZBQQotOjEwMDI4MDAwMDIwNDIwRjgwMDAwMDAwMTA2MDQyMEZDMDAwMDAwM0ZFQQotOjEwMDI5MDAwMDIwNDIxRjgwMDAwMDAwMTA2MDQyMUZDMDAwMDAwMEYwOAotOjEwMDJBMDAwMDIwNDIyMzgwN0ZGRkZGRjAyMDQyMjNDMDAwMDAwN0YwNwotOjEwMDJCMDAwMDIwNDIyNDAwN0ZGRkZGRjAyMDQyMjQ0MDAwMDAwM0YyNwotOjEwMDJDMDAwMDEwNDIyNDgwMDAwMDAwMDAxMDQyMjRDMDAwMDAwMDA0QwotOjEwMDJEMDAwMDEwNDIyNTAwMDAwMDAwMDAxMDQyMjU0MDAwMDAwMDAyQwotOjEwMDJFMDAwMDEwNDIyNTgwMDAwMDAwMDAxMDQyMjVDMDAwMDAwMDAwQwotOjEwMDJGMDAwMDEwNDIyNjAwMDAwMDAwMDAxMDQyMjY0MDAwMDAwMDBFQwotOjEwMDMwMDAwMDEwNDIyNjgwMDAwMDAwMDAxMDQyMjZDMDAwMDAwMDBDQgotOjEwMDMxMDAwMDEwNDIyNzAwMDAwMDAwMDAxMDQyMjc0MDAwMDAwMDBBQgotOjEwMDMyMDAwMDEwNDIyNzgwMDAwMDAwMDAxMDQyMjdDMDAwMDAwMDA4QgotOjEwMDMzMDAwMDIwNDIyQzAwMDAwRkZGRjAyMDQyMkM0MDAwMEZGRkZFRAotOjEwMDM0MDAwMDIwNDIyQzgwMDAwRkZGRjAyMDQyMkNDMDAwMEZGRkZDRAotOjEwMDM1MDAwMEMwNDIwMDAwMDAwMDNFODBBMDQyMDAwMDAwMDAwMDE1MwotOjEwMDM2MDAwMEIwNDIwMDAwMDAwMDAwMzA2MDU0MDAwMDAwMDBEMDAwMwotOjEwMDM3MDAwMDIwNTAwNDQwMDAwMDAyMDAyMDUwMDQ4MDAwMDAwMzI5MQotOjEwMDM4MDAwMDIwNTAwOTAwMjE1MDAyMDAyMDUwMDk0MDIxNTAwMjBDRAotOjEwMDM5MDAwMDIwNTAwOTgwMDAwMDAzMDAyMDUwMDlDMDgxMDAwMDBEMwotOjEwMDNBMDAwMDIwNTAwQTAwMDAwMDAzNjAyMDUwMEE0MDAwMDAwMzA5NQotOjEwMDNCMDAwMDIwNTAwQTgwMDAwMDAzMTAyMDUwMEIwMDAwMDAwMDRBMgotOjEwMDNDMDAwMDIwNTAwQjQwMDAwMDAwNTAyMDUwMEMwMDAwMDAwMDBBNgotOjEwMDNEMDAwMDIwNTAwQzQwMDAwMDAwNDAyMDUwMEQ0MDAwMDAwMDE3MgotOjEwMDNFMDAwMDIwNTAxMTQwMDAwMDAwMTAyMDUwMTFDMDAwMDAwMDFDQgotOjEwMDNGMDAwMDIwNTAxMjAwMDAwMDAwMjAyMDUwMjA0MDAwMDAwMDFDNQotOjEwMDQwMDAwMDIwNTAyMEMwMDAwMDA0MDAyMDUwMjEwMDAwMDAwNDAzRQotOjEwMDQxMDAwMDIwNTAyMUMwMDAwMDAyMDAyMDUwMjIwMDAwMDAwMUM1MgotOjEwMDQyMDAwMDIwNTAyMjQwMDAwMDAyMDA2MDUwMjQwMDAwMDAwMEEyOAotOjEwMDQzMDAwMDQwNTAyODAwMDIwMDAwMDAyMDUwMDUwMDAwMDAwMDdCMwotOjEwMDQ0MDAwMDIwNTAwNTQwMDAwMDAwNzAyMDUwMDU4MDAwMDAwMDBFQgotOjEwMDQ1MDAwMDIwNTAwNUMwMDAwMDAwODAyMDUwMDYwMDAwMDAwMDFDOQotOjEwMDQ2MDAwMDYwNTAwNjQwMDAwMDAwMzAyMDUwMEQ4MDAwMDAwMDYzNQotOjEwMDQ3MDAwMDIwNTAwMDQwMDAwMDAwMTAyMDUwMDA4MDAwMDAwMDE2MAotOjEwMDQ4MDAwMDIwNTAwMEMwMDAwMDAwMTAyMDUwMDEwMDAwMDAwMDE0MAotOjEwMDQ5MDAwMDIwNTAwMTQwMDAwMDAwMTAyMDUwMDE4MDAwMDAwMDEyMAotOjEwMDRBMDAwMDIwNTAwMUMwMDAwMDAwMTAyMDUwMDIwMDAwMDAwMDEwMAotOjEwMDRCMDAwMDIwNTAwMjQwMDAwMDAwMTAyMDUwMDI4MDAwMDAwMDFFMAotOjEwMDRDMDAwMDIwNTAwMkMwMDAwMDAwMTAyMDUwMDMwMDAwMDAwMDFDMAotOjEwMDREMDAwMDIwNTAwMzQwMDAwMDAwMTAyMDUwMDM4MDAwMDAwMDFBMAotOjEwMDRFMDAwMDIwNTAwM0MwMDAwMDAwMTAyMDUwMDQwMDAwMDAwMDE4MAotOjEwMDRGMDAwMDIwNTAwRTAwMDAwMDAwRDAyMDUwMEU4MDAwMDAwMDAxOQotOjEwMDUwMDAwMDIwNTAwRjAwMDAwMDAwMDAyMDUwMEY4MDAwMDAwMDBGNQotOjEwMDUxMDAwMDIwNTAwRTQwMDAwMDAyRDAyMDUwMEVDMDAwMDAwMjBCMAotOjEwMDUyMDAwMDIwNTAwRjQwMDAwMDAyMDAyMDUwMEZDMDAwMDAwMjA4RAotOjEwMDUzMDAwMDIwNTAwRTAwMDAwMDAxRDAyMDUwMEU4MDAwMDAwMTBCOAotOjEwMDU0MDAwMDIwNTAwRjAwMDAwMDAxMDAyMDUwMEY4MDAwMDAwMTA5NQotOjEwMDU1MDAwMDIwNTAwRTQwMDAwMDAzRDAyMDUwMEVDMDAwMDAwMzA1MAotOjEwMDU2MDAwMDIwNTAwRjQwMDAwMDAzMDAyMDUwMEZDMDAwMDAwMzAyRAotOjEwMDU3MDAwMDIwNTAwRTAwMDAwMDA0RDAyMDUwMEU4MDAwMDAwNDAxOAotOjEwMDU4MDAwMDIwNTAwRjAwMDAwMDA0MDAyMDUwMEY4MDAwMDAwNDBGNQotOjEwMDU5MDAwMDIwNTAwRTQwMDAwMDA2RDAyMDUwMEVDMDAwMDAwNjBCMAotOjEwMDVBMDAwMDIwNTAwRjQwMDAwMDA2MDAyMDUwMEZDMDAwMDAwNjA4RAotOjEwMDVCMDAwMDIwNTAwRTAwMDAwMDA1RDAyMDUwMEU4MDAwMDAwNTBCOAotOjEwMDVDMDAwMDIwNTAwRjAwMDAwMDA1MDAyMDUwMEY4MDAwMDAwNTA5NQotOjEwMDVEMDAwMDIwNTAwRTQwMDAwMDA3RDAyMDUwMEVDMDAwMDAwNzA1MAotOjEwMDVFMDAwMDIwNTAwRjQwMDAwMDA3MDAyMDUwMEZDMDAwMDAwNzAyRAotOjEwMDVGMDAwMDQwNjEwMDAwMjAwMDAyMDAyMDYwMERDMDAwMDAwMDFEQQotOjEwMDYwMDAwMDQwNjAyMDAwMDAzMDIyMDAyMDYwMERDMDAwMDAwMDBENQotOjEwMDYxMDAwMDcxODA0MDAwMEFDMDAwMDA4MTgwN0Q4MDAwNTAyMjNFMgotOjEwMDYyMDAwMDcxQzAwMDAyOUIzMDAwMDA3MUM4MDAwMzEyRTBBNkQ1MgotOjEwMDYzMDAwMDcxRDAwMDAzNEE4MTZCOTA3MUQ4MDAwMkU2QzIzRTRBNgotOjEwMDY0MDAwMDcxRTAwMDAwMzRCMkY4MDA4MUUwN0YwM0YwMjAyMjUwMwotOjEwMDY1MDAwMDExODAwMDAwMDAwMDAwMDAxMTgwMDA0MDAwMDAwMDA2NAotOjEwMDY2MDAwMDExODAwMDgwMDAwMDAwMDAxMTgwMDBDMDAwMDAwMDA0NAotOjEwMDY3MDAwMDExODAwMTAwMDAwMDAwMDAxMTgwMDE0MDAwMDAwMDAyNAotOjEwMDY4MDAwMDIxODAwMjAwMDAwMDAwMTAyMTgwMDI0MDAwMDAwMDJFRgotOjEwMDY5MDAwMDIxODAwMjgwMDAwMDAwMzAyMTgwMDJDMDAwMDAwMDBDRgotOjEwMDZBMDAwMDIxODAwMzAwMDAwMDAwNDAyMTgwMDM0MDAwMDAwMDFBRAotOjEwMDZCMDAwMDIxODAwMzgwMDAwMDAwMDAyMTgwMDNDMDAwMDAwMDE5MQotOjEwMDZDMDAwMDIxODAwNDAwMDAwMDAwNDAyMTgwMDQ0MDAwMDAwMDA2RQotOjEwMDZEMDAwMDIxODAwNDgwMDAwMDAwMTAyMTgwMDRDMDAwMDAwMDM0RQotOjEwMDZFMDAwMDIxODAwNTAwMDAwMDAwMDAyMTgwMDU0MDAwMDAwMDEzMQotOjEwMDZGMDAwMDIxODAwNTgwMDAwMDAwNDAyMTgwMDVDMDAwMDAwMDAwRQotOjEwMDcwMDAwMDIxODAwNjAwMDAwMDAwMTAyMTgwMDY0MDAwMDAwMDNFRAotOjEwMDcxMDAwMDIxODAwNjgwMDAwMDAwMDAyMTgwMDZDMDAwMDAwMDFEMAotOjEwMDcyMDAwMDIxODAwNzAwMDAwMDAwNDAyMTgwMDc0MDAwMDAwMDBBRAotOjEwMDczMDAwMDIxODAwNzgwMDAwMDAwNDAyMTgwMDdDMDAwMDAwMDM4QQotOjEwMDc0MDAwMDYxODAwODAwMDAwMDAwMjAyMTgwMEE0MDAwMDdGRkZDRAotOjEwMDc1MDAwMDIxODAwQTgwMDAwMDNGRjAyMTgwMjI0MDAwMDAwMDA5NQotOjEwMDc2MDAwMDIxODAyMzQwMDAwMDAwMDAyMTgwMjRDMDAwMDAwMDBEMQotOjEwMDc3MDAwMDIxODAyRTQwMDAwMDBGRjA2MTgxMDAwMDAwMDA0MDA0OAotOjEwMDc4MDAwMDIxQjhCQzAwMDAwMDAwMTAyMUI4MDAwMDAwMDAwMzQyRgotOjEwMDc5MDAwMDIxQjgwNDAwMDAwMDAxODAyMUI4MDgwMDAwMDAwMEMzQgotOjEwMDdBMDAwMDIxQjgwQzAwMDAwMDAyMDBDMUI4MzAwMDAwODY0NzA0NgotOjEwMDdCMDAwMEExQjgzMDAwMDAwMDE1NzBCMUI4MzAwMDAwMDA1NUYyQwotOjEwMDdDMDAwMEExQjgzNDAwMDAwMDAwMDBDMUI4MzQwMDAwMDAyMjYyRgotOjEwMDdEMDAwMEIxQjgzNDAwMDAwMDAwMTAyMUI4MzgwMDAwODY0NzAzMwotOjEwMDdFMDAwMDIxQjgzQzAwMDAwMDIyNjAyMUIxNDgwMDAwMDAwMDFDRgotOjEwMDdGMDAwMEExQjE0ODAwMDAwMDAwMDAyMUI5NDQwMDAwMDAwMDE0RQotOjEwMDgwMDAwMDYxQjk0NDgwMDAwMDAwMjA2MUExMDAwMDAwMDAyQjMwNAotOjEwMDgxMDAwMDQxQTFBQ0MwMDAxMDIyNzA2MUExQUQwMDAwMDAwMDg5OAotOjEwMDgyMDAwMDYxQTIwMDgwMDAwMDBDODA2MUEyMDAwMDAwMDAwMDI3NgotOjEwMDgzMDAwMDQxQTFCRjgwMDkwMDIyODA2MUEzNzE4MDAwMDAwMDQ1QQotOjEwMDg0MDAwMDYxQTM3MTAwMDAwMDAwMjA2MUE1MDAwMDAwMDAwMDJDRAotOjEwMDg1MDAwMDYxQTUwMDgwMDAwMDAwNDA2MUE1MDE4MDAwMDAwMDQ5MAotOjEwMDg2MDAwMDYxQTUwMjgwMDAwMDAwNDA2MUE1MDM4MDAwMDAwMDQ0MAotOjEwMDg3MDAwMDYxQTUwNDgwMDAwMDAwNDA2MUE1MDU4MDAwMDAwMDRGMAotOjEwMDg4MDAwMDYxQTUwNjgwMDAwMDAwNDA2MUE1MDc4MDAwMDAwMDJBMgotOjEwMDg5MDAwMDQxQTUyQzAwMDAyMDJCODA2MUE0MDUwMDAwMDAwMDZCNgotOjEwMDhBMDAwMDQxQTQwNjgwMDAyMDJCQTA0MUE0MDQwMDAwNDAyQkM2NAotOjEwMDhCMDAwMDQxQTgwMDAwMDAxMDJDMDA2MUE4MDA0MDAwMDAwMDMzMAotOjEwMDhDMDAwMDQxQTgwMTAwMDAxMDJDMTA2MUE4MDE0MDAwMDAwMDNGRgotOjEwMDhEMDAwMDQxQTgwMjAwMDAxMDJDMjA2MUE4MDI0MDAwMDAwMDNDRQotOjEwMDhFMDAwMDQxQTgwMzAwMDAxMDJDMzA2MUE4MDM0MDAwMDAwMDM5RAotOjEwMDhGMDAwMDQxQTgwNDAwMDAxMDJDNDA2MUE4MDQ0MDAwMDAwMDM2QwotOjEwMDkwMDAwMDQxQTgwNTAwMDAxMDJDNTA2MUE4MDU0MDAwMDAwMDMzQQotOjEwMDkxMDAwMDQxQTgwNjAwMDAxMDJDNjA2MUE4MDY0MDAwMDAwMDMwOQotOjEwMDkyMDAwMDQxQTgwNzAwMDAxMDJDNzA2MUE4MDc0MDAwMDAwMDNEOAotOjEwMDkzMDAwMDQxQTgwODAwMDAxMDJDODA2MUE4MDg0MDAwMDAwMDNBNwotOjEwMDk0MDAwMDQxQTgwOTAwMDAxMDJDOTA2MUE4MDk0MDAwMDAwMDM3NgotOjEwMDk1MDAwMDQxQTgwQTAwMDAxMDJDQTA2MUE4MEE0MDAwMDAwMDM0NQotOjEwMDk2MDAwMDQxQTgwQjAwMDAxMDJDQjA2MUE4MEI0MDAwMDAwMDMxNAotOjEwMDk3MDAwMDQxQTgwQzAwMDAxMDJDQzA2MUE4MEM0MDAwMDAwMDNFMwotOjEwMDk4MDAwMDQxQTgwRDAwMDAxMDJDRDA2MUE4MEQ0MDAwMDAwMDNCMgotOjEwMDk5MDAwMDQxQTgwRTAwMDAxMDJDRTA2MUE4MEU0MDAwMDAwMDM4MQotOjEwMDlBMDAwMDQxQTgwRjAwMDAxMDJDRjA2MUE4MEY0MDAwMDAwMDM1MAotOjEwMDlCMDAwMDQxQTgxMDAwMDAxMDJEMDA2MUE4MTA0MDAwMDAwMDMxRAotOjEwMDlDMDAwMDQxQTgxMTAwMDAxMDJEMTA2MUE4MTE0MDAwMDAwMDNFQwotOjEwMDlEMDAwMDQxQTgxMjAwMDAxMDJEMjA2MUE4MTI0MDAwMDAwMDNCQgotOjEwMDlFMDAwMDQxQTgxMzAwMDAxMDJEMzA2MUE4MTM0MDAwMDAwMDM4QQotOjEwMDlGMDAwMDQxQTgxNDAwMDAxMDJENDA2MUE4MTQ0MDAwMDAwMDM1OQotOjEwMEEwMDAwMDQxQTgxNTAwMDAxMDJENTA2MUE4MTU0MDAwMDAwMDMyNwotOjEwMEExMDAwMDQxQTgxNjAwMDAxMDJENjA2MUE4MTY0MDAwMDAwMDNGNgotOjEwMEEyMDAwMDQxQTgxNzAwMDAxMDJENzA2MUE4MTc0MDAwMDAwMDNDNQotOjEwMEEzMDAwMDQxQTgxODAwMDAxMDJEODA2MUE4MTg0MDAwMDAwMDM5NAotOjEwMEE0MDAwMDQxQTgxOTAwMDAxMDJEOTA2MUE4MTk0MDAwMDAwMDM2MwotOjEwMEE1MDAwMDQxQTgxQTAwMDAxMDJEQTA2MUE4MUE0MDAwMDAwMDMzMgotOjEwMEE2MDAwMDQxQTgxQjAwMDAxMDJEQjA2MUE4MUI0MDAwMDAwMDMwMQotOjEwMEE3MDAwMDQxQTgxQzAwMDAxMDJEQzA2MUE4MUM0MDAwMDAwMDNEMAotOjEwMEE4MDAwMDQxQTgxRDAwMDAxMDJERDA2MUE4MUQ0MDAwMDAwMDM5RgotOjEwMEE5MDAwMDQxQTgxRTAwMDAxMDJERTA2MUE4MUU0MDAwMDAwMDM2RQotOjEwMEFBMDAwMDQxQTgxRjAwMDAxMDJERjA2MUE4MUY0MDAwMDAwMDMzRAotOjEwMEFCMDAwMDQxQTgyMDAwMDAxMDJFMDA2MUE4MjA0MDAwMDAwMDMwQQotOjEwMEFDMDAwMDQxQTgyMTAwMDAxMDJFMTA2MUE4MjE0MDAwMDAwMDNEOQotOjEwMEFEMDAwMDQxQTgyMjAwMDAxMDJFMjA2MUE4MjI0MDAwMDAwMDNBOAotOjEwMEFFMDAwMDQxQTgyMzAwMDAxMDJFMzA2MUE4MjM0MDAwMDAwMDM3NwotOjEwMEFGMDAwMDQxQTgyNDAwMDAxMDJFNDA2MUE4MjQ0MDAwMDAwMDM0NgotOjEwMEIwMDAwMDQxQTgyNTAwMDAxMDJFNTA2MUE4MjU0MDAwMDAwMDMxNAotOjEwMEIxMDAwMDQxQTgyNjAwMDAxMDJFNjA2MUE4MjY0MDAwMDAwMDNFMwotOjEwMEIyMDAwMDQxQTgyNzAwMDAxMDJFNzA2MUE4Mjc0MDAwMDAwMDNCMgotOjEwMEIzMDAwMDQxQTgyODAwMDAxMDJFODA2MUE4Mjg0MDAwMDAwMDM4MQotOjEwMEI0MDAwMDQxQTgyOTAwMDAxMDJFOTA2MUE4Mjk0MDAwMDAwMDM1MAotOjEwMEI1MDAwMDQxQTgyQTAwMDAxMDJFQTA2MUE4MkE0MDAwMDAwMDMxRgotOjEwMEI2MDAwMDQxQTgyQjAwMDAxMDJFQjA2MUE4MkI0MDAwMDAwMDNFRQotOjEwMEI3MDAwMDQxQTgyQzAwMDAxMDJFQzA2MUE4MkM0MDAwMDAwMDNCRAotOjEwMEI4MDAwMDQxQTgyRDAwMDAxMDJFRDA2MUE4MkQ0MDAwMDAwMDM4QwotOjEwMEI5MDAwMDQxQTgyRTAwMDAxMDJFRTA2MUE4MkU0MDAwMDAwMDM1QgotOjEwMEJBMDAwMDQxQTgyRjAwMDAxMDJFRjA2MUE4MkY0MDAwMDAwMDMyQQotOjEwMEJCMDAwMDQxQTgzMDAwMDAxMDJGMDA2MUE4MzA0MDAwMDAwMDNGNwotOjEwMEJDMDAwMDQxQTgzMTAwMDAxMDJGMTA2MUE4MzE0MDAwMDAwMDNDNgotOjEwMEJEMDAwMDQxQTgzMjAwMDAxMDJGMjA2MUE4MzI0MDAwMDAwMDM5NQotOjEwMEJFMDAwMDQxQTgzMzAwMDAxMDJGMzA2MUE4MzM0MDAwMDAwMDM2NAotOjEwMEJGMDAwMDQxQTgzNDAwMDAxMDJGNDA2MUE4MzQ0MDAwMDAwMDMzMwotOjEwMEMwMDAwMDQxQTgzNTAwMDAxMDJGNTA2MUE4MzU0MDAwMDAwMDMwMQotOjEwMEMxMDAwMDQxQTgzNjAwMDAxMDJGNjA2MUE4MzY0MDAwMDAwMDNEMAotOjEwMEMyMDAwMDQxQTgzNzAwMDAxMDJGNzA2MUE4Mzc0MDAwMDAwMDM5RgotOjEwMEMzMDAwMDQxQTgzODAwMDAxMDJGODA2MUE4Mzg0MDAwMDAwMDM2RQotOjEwMEM0MDAwMDQxQTgzOTAwMDAxMDJGOTA2MUE4Mzk0MDAwMDAwMDMzRAotOjEwMEM1MDAwMDQxQTgzQTAwMDAxMDJGQTA2MUE4M0E0MDAwMDAwMDMwQwotOjEwMEM2MDAwMDQxQTgzQjAwMDAxMDJGQjA2MUE4M0I0MDAwMDAwMDNEQgotOjEwMEM3MDAwMDQxQTgzQzAwMDAxMDJGQzA2MUE4M0M0MDAwMDAwMDNBQQotOjEwMEM4MDAwMDQxQTgzRDAwMDAxMDJGRDA2MUE4M0Q0MDAwMDAwMDM3OQotOjEwMEM5MDAwMDQxQTgzRTAwMDAxMDJGRTA2MUE4M0U0MDAwMDAwMDM0OAotOjEwMENBMDAwMDQxQTgzRjAwMDAxMDJGRjA2MUE4M0Y0MDAwMDAwMDMxNwotOjEwMENCMDAwMDQxQTg0MDAwMDAxMDMwMDA2MUE4NDA0MDAwMDAwMDNFMwotOjEwMENDMDAwMDQxQTg0MTAwMDAxMDMwMTA2MUE4NDE0MDAwMDAwMDNCMgotOjEwMENEMDAwMDQxQTg0MjAwMDAxMDMwMjA2MUE4NDI0MDAwMDAwMDM4MQotOjEwMENFMDAwMDQxQTg0MzAwMDAxMDMwMzA2MUE4NDM0MDAwMDAwMDM1MAotOjEwMENGMDAwMDQxQTg0NDAwMDAxMDMwNDA2MUE4NDQ0MDAwMDAwMDMxRgotOjEwMEQwMDAwMDQxQTg0NTAwMDAxMDMwNTA2MUE4NDU0MDAwMDAwMDNFRAotOjEwMEQxMDAwMDQxQTg0NjAwMDAxMDMwNjA2MUE4NDY0MDAwMDAwMDNCQwotOjEwMEQyMDAwMDQxQTg0NzAwMDAxMDMwNzA2MUE4NDc0MDAwMDAwMDM4QgotOjEwMEQzMDAwMDQxQTg0ODAwMDAxMDMwODA2MUE4NDg0MDAwMDAwMDM1QQotOjEwMEQ0MDAwMDQxQTg0OTAwMDAxMDMwOTA2MUE4NDk0MDAwMDAwMDMyOQotOjEwMEQ1MDAwMDQxQTg0QTAwMDAxMDMwQTA2MUE4NEE0MDAwMDAwMDNGOAotOjEwMEQ2MDAwMDQxQTg0QjAwMDAxMDMwQjA2MUE4NEI0MDAwMDAwMDNDNwotOjEwMEQ3MDAwMDQxQTg0QzAwMDAxMDMwQzA2MUE4NEM0MDAwMDAwMDM5NgotOjEwMEQ4MDAwMDQxQTg0RDAwMDAxMDMwRDA2MUE4NEQ0MDAwMDAwMDM2NQotOjEwMEQ5MDAwMDQxQTg0RTAwMDAxMDMwRTA2MUE4NEU0MDAwMDAwMDMzNAotOjEwMERBMDAwMDQxQTg0RjAwMDAxMDMwRjA2MUE4NEY0MDAwMDAwMDMwMwotOjEwMERCMDAwMDQxQTg1MDAwMDAxMDMxMDA2MUE4NTA0MDAwMDAwMDNEMAotOjEwMERDMDAwMDQxQTg1MTAwMDAxMDMxMTA2MUE4NTE0MDAwMDAwMDM5RgotOjEwMEREMDAwMDQxQTg1MjAwMDAxMDMxMjA2MUE4NTI0MDAwMDAwMDM2RQotOjEwMERFMDAwMDQxQTg1MzAwMDAxMDMxMzA2MUE4NTM0MDAwMDAwMDMzRAotOjEwMERGMDAwMDQxQTg1NDAwMDAxMDMxNDA2MUE4NTQ0MDAwMDAwMDMwQwotOjEwMEUwMDAwMDQxQTg1NTAwMDAxMDMxNTA2MUE4NTU0MDAwMDAwMDNEQQotOjEwMEUxMDAwMDQxQTg1NjAwMDAxMDMxNjA2MUE4NTY0MDAwMDAwMDNBOQotOjEwMEUyMDAwMDQxQTg1NzAwMDAxMDMxNzA2MUE4NTc0MDAwMDAwMDM3OAotOjEwMEUzMDAwMDQxQTg1ODAwMDAxMDMxODA2MUE4NTg0MDAwMDAwMDM0NwotOjEwMEU0MDAwMDQxQTg1OTAwMDAxMDMxOTA2MUE4NTk0MDAwMDAwMDMxNgotOjEwMEU1MDAwMDQxQTg1QTAwMDAxMDMxQTA2MUE4NUE0MDAwMDAwMDNFNQotOjEwMEU2MDAwMDQxQTg1QjAwMDAxMDMxQjA2MUE4NUI0MDAwMDAwMDNCNAotOjEwMEU3MDAwMDQxQTg1QzAwMDAxMDMxQzA2MUE4NUM0MDAwMDAwMDM4MwotOjEwMEU4MDAwMDQxQTg1RDAwMDAxMDMxRDA2MUE4NUQ0MDAwMDAwMDM1MgotOjEwMEU5MDAwMDQxQTg1RTAwMDAxMDMxRTA2MUE4NUU0MDAwMDAwMDMyMQotOjEwMEVBMDAwMDQxQTg1RjAwMDAxMDMxRjA2MUE4NUY0MDAwMDAwMDNGMAotOjEwMEVCMDAwMDQxQTg2MDAwMDAxMDMyMDA2MUE4NjA0MDAwMDAwMDNCRAotOjEwMEVDMDAwMDQxQTg2MTAwMDAxMDMyMTA2MUE4NjE0MDAwMDAwMDM4QwotOjEwMEVEMDAwMDQxQTg2MjAwMDAxMDMyMjA2MUE4NjI0MDAwMDAwMDM1QgotOjEwMEVFMDAwMDQxQTg2MzAwMDAxMDMyMzA2MUE4NjM0MDAwMDAwMDMyQQotOjEwMEVGMDAwMDQxQTg2NDAwMDAxMDMyNDA2MUE4NjQ0MDAwMDAwMDNGOQotOjEwMEYwMDAwMDQxQTg2NTAwMDAxMDMyNTA2MUE4NjU0MDAwMDAwMDNDNwotOjEwMEYxMDAwMDQxQTg2NjAwMDAxMDMyNjA2MUE4NjY0MDAwMDAwMDM5NgotOjEwMEYyMDAwMDQxQTg2NzAwMDAxMDMyNzA2MUE4Njc0MDAwMDAwMDM2NQotOjEwMEYzMDAwMDQxQTg2ODAwMDAxMDMyODA2MUE4Njg0MDAwMDAwMDMzNAotOjEwMEY0MDAwMDQxQTg2OTAwMDAxMDMyOTA2MUE4Njk0MDAwMDAwMDMwMwotOjEwMEY1MDAwMDQxQTg2QTAwMDAxMDMyQTA2MUE4NkE0MDAwMDAwMDNEMgotOjEwMEY2MDAwMDQxQTg2QjAwMDAxMDMyQjA2MUE4NkI0MDAwMDAwMDNBMQotOjEwMEY3MDAwMDQxQTg2QzAwMDAxMDMyQzA2MUE4NkM0MDAwMDAwMDM3MAotOjEwMEY4MDAwMDQxQTg2RDAwMDAxMDMyRDA2MUE4NkQ0MDAwMDAwMDMzRgotOjEwMEY5MDAwMDQxQTg2RTAwMDAxMDMyRTA2MUE4NkU0MDAwMDAwMDMwRQotOjEwMEZBMDAwMDQxQTg2RjAwMDAxMDMyRjA2MUE4NkY0MDAwMDAwMDNERAotOjEwMEZCMDAwMDQxQTg3MDAwMDAxMDMzMDA2MUE4NzA0MDAwMDAwMDNBQQotOjEwMEZDMDAwMDQxQTg3MTAwMDAxMDMzMTA2MUE4NzE0MDAwMDAwMDM3OQotOjEwMEZEMDAwMDQxQTg3MjAwMDAxMDMzMjA2MUE4NzI0MDAwMDAwMDM0OAotOjEwMEZFMDAwMDQxQTg3MzAwMDAxMDMzMzA2MUE4NzM0MDAwMDAwMDMxNwotOjEwMEZGMDAwMDQxQTg3NDAwMDAxMDMzNDA2MUE4NzQ0MDAwMDAwMDNFNgotOjEwMTAwMDAwMDQxQTg3NTAwMDAxMDMzNTA2MUE4NzU0MDAwMDAwMDNCNAotOjEwMTAxMDAwMDQxQTg3NjAwMDAxMDMzNjA2MUE4NzY0MDAwMDAwMDM4MwotOjEwMTAyMDAwMDQxQTg3NzAwMDAxMDMzNzA2MUE4Nzc0MDAwMDAwMDM1MgotOjEwMTAzMDAwMDQxQTg3ODAwMDAxMDMzODA2MUE4Nzg0MDAwMDAwMDMyMQotOjEwMTA0MDAwMDQxQTg3OTAwMDAxMDMzOTA2MUE4Nzk0MDAwMDAwMDNGMAotOjEwMTA1MDAwMDQxQTg3QTAwMDAxMDMzQTA2MUE4N0E0MDAwMDAwMDNCRgotOjEwMTA2MDAwMDQxQTg3QjAwMDAxMDMzQjA2MUE4N0I0MDAwMDAwMDM4RQotOjEwMTA3MDAwMDQxQTg3QzAwMDAxMDMzQzA2MUE4N0M0MDAwMDAwMDM1RAotOjEwMTA4MDAwMDQxQTg3RDAwMDAxMDMzRDA2MUE4N0Q0MDAwMDAwMDMyQwotOjEwMTA5MDAwMDQxQTg3RTAwMDAxMDMzRTA2MUE4N0U0MDAwMDAwMDNGQgotOjEwMTBBMDAwMDQxQTg3RjAwMDAxMDMzRjA2MUE4N0Y0MDAwMDAwMDNDQQotOjEwMTBCMDAwMDQxQTg4MDAwMDAxMDM0MDA2MUE4ODA0MDAwMDAwMDM5NwotOjEwMTBDMDAwMDQxQTg4MTAwMDAxMDM0MTA2MUE4ODE0MDAwMDAwMDM2NgotOjEwMTBEMDAwMDQxQTg4MjAwMDAxMDM0MjA2MUE4ODI0MDAwMDAwMDMzNQotOjEwMTBFMDAwMDQxQTg4MzAwMDAxMDM0MzA2MUE4ODM0MDAwMDAwMDMwNAotOjEwMTBGMDAwMDQxQTg4NDAwMDAxMDM0NDA2MUE4ODQ0MDAwMDAwMDNEMwotOjEwMTEwMDAwMDQxQTg4NTAwMDAxMDM0NTA2MUE4ODU0MDAwMDAwMDNBMQotOjEwMTExMDAwMDQxQTg4NjAwMDAxMDM0NjA2MUE4ODY0MDAwMDAwMDM3MAotOjEwMTEyMDAwMDQxQTg4NzAwMDAxMDM0NzA2MUE4ODc0MDAwMDAwMDMzRgotOjEwMTEzMDAwMDQxQTg4ODAwMDAxMDM0ODA2MUE4ODg0MDAwMDAwMDMwRQotOjEwMTE0MDAwMDQxQTg4OTAwMDAxMDM0OTA2MUE4ODk0MDAwMDAwMDNERAotOjEwMTE1MDAwMDQxQTg4QTAwMDAxMDM0QTA2MUE4OEE0MDAwMDAwMDNBQwotOjEwMTE2MDAwMDQxQTg4QjAwMDAxMDM0QjA2MUE4OEI0MDAwMDAwMDM3QgotOjEwMTE3MDAwMDQxQTg4QzAwMDAxMDM0QzA2MUE4OEM0MDAwMDAwMDM0QQotOjEwMTE4MDAwMDQxQTg4RDAwMDAxMDM0RDA2MUE4OEQ0MDAwMDAwMDMxOQotOjEwMTE5MDAwMDQxQTg4RTAwMDAxMDM0RTA2MUE4OEU0MDAwMDAwMDNFOAotOjEwMTFBMDAwMDQxQTg4RjAwMDAxMDM0RjA2MUE4OEY0MDAwMDAwMDNCNwotOjEwMTFCMDAwMDQxQTg5MDAwMDAxMDM1MDA2MUE4OTA0MDAwMDAwMDM4NAotOjEwMTFDMDAwMDQxQTg5MTAwMDAxMDM1MTA2MUE4OTE0MDAwMDAwMDM1MwotOjEwMTFEMDAwMDQxQTg5MjAwMDAxMDM1MjA2MUE4OTI0MDAwMDAwMDMyMgotOjEwMTFFMDAwMDQxQTg5MzAwMDAxMDM1MzA2MUE4OTM0MDAwMDAwMDNGMQotOjEwMTFGMDAwMDQxQTg5NDAwMDAxMDM1NDA2MUE4OTQ0MDAwMDAwMDNDMAotOjEwMTIwMDAwMDQxQTg5NTAwMDAxMDM1NTA2MUE4OTU0MDAwMDAwMDM4RQotOjEwMTIxMDAwMDQxQTg5NjAwMDAxMDM1NjA2MUE4OTY0MDAwMDAwMDM1RAotOjEwMTIyMDAwMDQxQTg5NzAwMDAxMDM1NzA2MUE4OTc0MDAwMDAwMDMyQwotOjEwMTIzMDAwMDQxQTg5ODAwMDAxMDM1ODA2MUE4OTg0MDAwMDAwMDNGQgotOjEwMTI0MDAwMDQxQTg5OTAwMDAxMDM1OTA2MUE4OTk0MDAwMDAwMDNDQQotOjEwMTI1MDAwMDQxQTg5QTAwMDAxMDM1QTA2MUE4OUE0MDAwMDAwMDM5OQotOjEwMTI2MDAwMDQxQTg5QjAwMDAxMDM1QjA2MUE4OUI0MDAwMDAwMDM2OAotOjEwMTI3MDAwMDQxQTg5QzAwMDAxMDM1QzA2MUE4OUM0MDAwMDAwMDMzNwotOjEwMTI4MDAwMDQxQTg5RDAwMDAxMDM1RDA2MUE4OUQ0MDAwMDAwMDMwNgotOjEwMTI5MDAwMDQxQTg5RTAwMDAxMDM1RTA2MUE4OUU0MDAwMDAwMDNENQotOjEwMTJBMDAwMDQxQTg5RjAwMDAxMDM1RjA2MUE4OUY0MDAwMDAwMDNBNAotOjEwMTJCMDAwMDQxQThBMDAwMDAxMDM2MDA2MUE4QTA0MDAwMDAwMDM3MQotOjEwMTJDMDAwMDQxQThBMTAwMDAxMDM2MTA2MUE4QTE0MDAwMDAwMDM0MAotOjEwMTJEMDAwMDQxQThBMjAwMDAxMDM2MjA2MUE4QTI0MDAwMDAwMDMwRgotOjEwMTJFMDAwMDQxQThBMzAwMDAxMDM2MzA2MUE4QTM0MDAwMDAwMDNERQotOjEwMTJGMDAwMDQxQThBNDAwMDAxMDM2NDA2MUE4QTQ0MDAwMDAwMDNBRAotOjEwMTMwMDAwMDQxQThBNTAwMDAxMDM2NTA2MUE4QTU0MDAwMDAwMDM3QgotOjEwMTMxMDAwMDQxQThBNjAwMDAxMDM2NjA2MUE4QTY0MDAwMDAwMDM0QQotOjEwMTMyMDAwMDQxQThBNzAwMDAxMDM2NzA2MUE4QTc0MDAwMDAwMDMxOQotOjEwMTMzMDAwMDQxQThBODAwMDAxMDM2ODA2MUE4QTg0MDAwMDAwMDNFOAotOjEwMTM0MDAwMDQxQThBOTAwMDAxMDM2OTA2MUE4QTk0MDAwMDAwMDNCNwotOjEwMTM1MDAwMDQxQThBQTAwMDAxMDM2QTA2MUE4QUE0MDAwMDAwMDM4NgotOjEwMTM2MDAwMDQxQThBQjAwMDAxMDM2QjA2MUE4QUI0MDAwMDAwMDM1NQotOjEwMTM3MDAwMDQxQThBQzAwMDAxMDM2QzA2MUE4QUM0MDAwMDAwMDMyNAotOjEwMTM4MDAwMDQxQThBRDAwMDAxMDM2RDA2MUE4QUQ0MDAwMDAwMDNGMwotOjEwMTM5MDAwMDQxQThBRTAwMDAxMDM2RTA2MUE4QUU0MDAwMDAwMDNDMgotOjEwMTNBMDAwMDQxQThBRjAwMDAxMDM2RjA2MUE4QUY0MDAwMDAwMDM5MQotOjEwMTNCMDAwMDQxQThCMDAwMDAxMDM3MDA2MUE4QjA0MDAwMDAwMDM1RQotOjEwMTNDMDAwMDQxQThCMTAwMDAxMDM3MTA2MUE4QjE0MDAwMDAwMDMyRAotOjEwMTNEMDAwMDQxQThCMjAwMDAxMDM3MjA2MUE4QjI0MDAwMDAwMDNGQwotOjEwMTNFMDAwMDQxQThCMzAwMDAxMDM3MzA2MUE4QjM0MDAwMDAwMDNDQgotOjEwMTNGMDAwMDQxQThCNDAwMDAxMDM3NDA2MUE4QjQ0MDAwMDAwMDM5QQotOjEwMTQwMDAwMDQxQThCNTAwMDAxMDM3NTA2MUE4QjU0MDAwMDAwMDM2OAotOjEwMTQxMDAwMDQxQThCNjAwMDAxMDM3NjA2MUE4QjY0MDAwMDAwMDMzNwotOjEwMTQyMDAwMDQxQThCNzAwMDAxMDM3NzA2MUE4Qjc0MDAwMDAwMDMwNgotOjEwMTQzMDAwMDQxQThCODAwMDAxMDM3ODA2MUE4Qjg0MDAwMDAwMDNENQotOjEwMTQ0MDAwMDQxQThCOTAwMDAxMDM3OTA2MUE4Qjk0MDAwMDAwMDNBNAotOjEwMTQ1MDAwMDQxQThCQTAwMDAxMDM3QTA2MUE4QkE0MDAwMDAwMDM3MwotOjEwMTQ2MDAwMDQxQThCQjAwMDAxMDM3QjA2MUE4QkI0MDAwMDAwMDM0MgotOjEwMTQ3MDAwMDQxQThCQzAwMDAxMDM3QzA2MUE4QkM0MDAwMDAwMDMxMQotOjEwMTQ4MDAwMDQxQThCRDAwMDAxMDM3RDA2MUE4QkQ0MDAwMDAwMDNFMAotOjEwMTQ5MDAwMDQxQThCRTAwMDAxMDM3RTA2MUE4QkU0MDAwMDAwMDNBRgotOjEwMTRBMDAwMDQxQThCRjAwMDAxMDM3RjA2MUE4QkY0MDAwMDAwMDM3RQotOjEwMTRCMDAwMDQxQThDMDAwMDAxMDM4MDA2MUE4QzA0MDAwMDAwMDM0QgotOjEwMTRDMDAwMDQxQThDMTAwMDAxMDM4MTA2MUE4QzE0MDAwMDAwMDMxQQotOjEwMTREMDAwMDQxQThDMjAwMDAxMDM4MjA2MUE4QzI0MDAwMDAwMDNFOQotOjEwMTRFMDAwMDQxQThDMzAwMDAxMDM4MzA2MUE4QzM0MDAwMDAwMDNCOAotOjEwMTRGMDAwMDQxQThDNDAwMDAxMDM4NDA2MUE4QzQ0MDAwMDAwMDM4NwotOjEwMTUwMDAwMDQxQThDNTAwMDAxMDM4NTA2MUE4QzU0MDAwMDAwMDM1NQotOjEwMTUxMDAwMDQxQThDNjAwMDAxMDM4NjA2MUE4QzY0MDAwMDAwMDMyNAotOjEwMTUyMDAwMDQxQThDNzAwMDAxMDM4NzA2MUE4Qzc0MDAwMDAwMDNGMwotOjEwMTUzMDAwMDQxQThDODAwMDAxMDM4ODA2MUE4Qzg0MDAwMDAwMDNDMgotOjEwMTU0MDAwMDQxQThDOTAwMDAxMDM4OTA2MUE4Qzk0MDAwMDAwMDM5MQotOjEwMTU1MDAwMDQxQThDQTAwMDAxMDM4QTA2MUE4Q0E0MDAwMDAwMDM2MAotOjEwMTU2MDAwMDQxQThDQjAwMDAxMDM4QjA2MUE4Q0I0MDAwMDAwMDMyRgotOjEwMTU3MDAwMDQxQThDQzAwMDAxMDM4QzA2MUE4Q0M0MDAwMDAwMDNGRQotOjEwMTU4MDAwMDQxQThDRDAwMDAxMDM4RDA2MUE4Q0Q0MDAwMDAwMDNDRAotOjEwMTU5MDAwMDQxQThDRTAwMDAxMDM4RTA2MUE4Q0U0MDAwMDAwMDM5QwotOjEwMTVBMDAwMDQxQThDRjAwMDAxMDM4RjA2MUE4Q0Y0MDAwMDAwMDM2QgotOjEwMTVCMDAwMDQxQThEMDAwMDAxMDM5MDA2MUE4RDA0MDAwMDAwMDMzOAotOjEwMTVDMDAwMDQxQThEMTAwMDAxMDM5MTA2MUE4RDE0MDAwMDAwMDMwNwotOjEwMTVEMDAwMDQxQThEMjAwMDAxMDM5MjA2MUE4RDI0MDAwMDAwMDNENgotOjEwMTVFMDAwMDQxQThEMzAwMDAxMDM5MzA2MUE4RDM0MDAwMDAwMDNBNQotOjEwMTVGMDAwMDQxQThENDAwMDAxMDM5NDA2MUE4RDQ0MDAwMDAwMDM3NAotOjEwMTYwMDAwMDQxQThENTAwMDAxMDM5NTA2MUE4RDU0MDAwMDAwMDM0MgotOjEwMTYxMDAwMDQxQThENjAwMDAxMDM5NjA2MUE4RDY0MDAwMDAwMDMxMQotOjEwMTYyMDAwMDQxQThENzAwMDAxMDM5NzA2MUE4RDc0MDAwMDAwMDNFMAotOjEwMTYzMDAwMDQxQThEODAwMDAxMDM5ODA2MUE4RDg0MDAwMDAwMDNBRgotOjEwMTY0MDAwMDQxQThEOTAwMDAxMDM5OTA2MUE4RDk0MDAwMDAwMDM3RQotOjEwMTY1MDAwMDQxQThEQTAwMDAxMDM5QTA2MUE4REE0MDAwMDAwMDM0RAotOjEwMTY2MDAwMDQxQThEQjAwMDAxMDM5QjA2MUE4REI0MDAwMDAwMDMxQwotOjEwMTY3MDAwMDQxQThEQzAwMDAxMDM5QzA2MUE4REM0MDAwMDAwMDNFQgotOjEwMTY4MDAwMDQxQThERDAwMDAxMDM5RDA2MUE4REQ0MDAwMDAwMDNCQQotOjEwMTY5MDAwMDQxQThERTAwMDAxMDM5RTA2MUE4REU0MDAwMDAwMDM4OQotOjEwMTZBMDAwMDQxQThERjAwMDAxMDM5RjA2MUE4REY0MDAwMDAwMDM1OAotOjEwMTZCMDAwMDQxQThFMDAwMDAxMDNBMDA2MUE4RTA0MDAwMDAwMDMyNQotOjEwMTZDMDAwMDQxQThFMTAwMDAxMDNBMTA2MUE4RTE0MDAwMDAwMDNGNAotOjEwMTZEMDAwMDQxQThFMjAwMDAxMDNBMjA2MUE4RTI0MDAwMDAwMDNDMwotOjEwMTZFMDAwMDQxQThFMzAwMDAxMDNBMzA2MUE4RTM0MDAwMDAwMDM5MgotOjEwMTZGMDAwMDQxQThFNDAwMDAxMDNBNDA2MUE4RTQ0MDAwMDAwMDM2MQotOjEwMTcwMDAwMDQxQThFNTAwMDAxMDNBNTA2MUE4RTU0MDAwMDAwMDMyRgotOjEwMTcxMDAwMDQxQThFNjAwMDAxMDNBNjA2MUE4RTY0MDAwMDAwMDNGRQotOjEwMTcyMDAwMDQxQThFNzAwMDAxMDNBNzA2MUE4RTc0MDAwMDAwMDNDRAotOjEwMTczMDAwMDQxQThFODAwMDAxMDNBODA2MUE4RTg0MDAwMDAwMDM5QwotOjEwMTc0MDAwMDQxQThFOTAwMDAxMDNBOTA2MUE4RTk0MDAwMDAwMDM2QgotOjEwMTc1MDAwMDQxQThFQTAwMDAxMDNBQTA2MUE4RUE0MDAwMDAwMDMzQQotOjEwMTc2MDAwMDQxQThFQjAwMDAxMDNBQjA2MUE4RUI0MDAwMDAwMDMwOQotOjEwMTc3MDAwMDQxQThFQzAwMDAxMDNBQzA2MUE4RUM0MDAwMDAwMDNEOAotOjEwMTc4MDAwMDQxQThFRDAwMDAxMDNBRDA2MUE4RUQ0MDAwMDAwMDNBNwotOjEwMTc5MDAwMDQxQThFRTAwMDAxMDNBRTA2MUE4RUU0MDAwMDAwMDM3NgotOjEwMTdBMDAwMDQxQThFRjAwMDAxMDNBRjA2MUE4RUY0MDAwMDAwMDM0NQotOjEwMTdCMDAwMDQxQThGMDAwMDAxMDNCMDA2MUE4RjA0MDAwMDAwMDMxMgotOjEwMTdDMDAwMDQxQThGMTAwMDAxMDNCMTA2MUE4RjE0MDAwMDAwMDNFMQotOjEwMTdEMDAwMDQxQThGMjAwMDAxMDNCMjA2MUE4RjI0MDAwMDAwMDNCMAotOjEwMTdFMDAwMDQxQThGMzAwMDAxMDNCMzA2MUE4RjM0MDAwMDAwMDM3RgotOjEwMTdGMDAwMDQxQThGNDAwMDAxMDNCNDA2MUE4RjQ0MDAwMDAwMDM0RQotOjEwMTgwMDAwMDQxQThGNTAwMDAxMDNCNTA2MUE4RjU0MDAwMDAwMDMxQwotOjEwMTgxMDAwMDQxQThGNjAwMDAxMDNCNjA2MUE4RjY0MDAwMDAwMDNFQgotOjEwMTgyMDAwMDQxQThGNzAwMDAxMDNCNzA2MUE4Rjc0MDAwMDAwMDNCQQotOjEwMTgzMDAwMDQxQThGODAwMDAxMDNCODA2MUE4Rjg0MDAwMDAwMDM4OQotOjEwMTg0MDAwMDQxQThGOTAwMDAxMDNCOTA2MUE4Rjk0MDAwMDAwMDM1OAotOjEwMTg1MDAwMDQxQThGQTAwMDAxMDNCQTA2MUE4RkE0MDAwMDAwMDMyNwotOjEwMTg2MDAwMDQxQThGQjAwMDAxMDNCQjA2MUE4RkI0MDAwMDAwMDNGNgotOjEwMTg3MDAwMDQxQThGQzAwMDAxMDNCQzA2MUE4RkM0MDAwMDAwMDNDNQotOjEwMTg4MDAwMDQxQThGRDAwMDAxMDNCRDA2MUE4RkQ0MDAwMDAwMDM5NAotOjEwMTg5MDAwMDQxQThGRTAwMDAxMDNCRTA2MUE4RkU0MDAwMDAwMDc1RgotOjEwMThBMDAwMDQxQTYyQzAwMDIwMDNCRjA2MUExQUYwMDAwMDAwNDJBQQotOjEwMThCMDAwMDYxQUFGMDAwMDAwMDAwODA2MUFFMDAwMDAwMDA1NDAwQwotOjEwMThDMDAwMDYxQUQwMDAwMDAwMDA3MjA2MUFEMjQ4MDAwMDAwMTA2QwotOjEwMThEMDAwMDYxQUQ2QjAwMDAwMDAyMDA2MUFENDcwMDAwMDAwOTA0RQotOjEwMThFMDAwMDYxQUQ0NjgwMDAwMDAwMjA2MUFBMDAwMDAwMDAxQzQxNQotOjEwMThGMDAwMDYxQTMwMDAwMDAwMDAxMDA2MUEzMDgwMDAwMDAwMTBBOAotOjEwMTkwMDAwMDYxQTMxMDAwMDAwMDAxMDA2MUEzMTgwMDAwMDAwMTA5NQotOjEwMTkxMDAwMDYxQTMzMDAwMDAwMDAxMjA2MUEzMzkwMDAwMDAwNzAwRgotOjEwMTkyMDAwMDYxQUQ0NTgwMDAwMDAwMjA2MUFEMzQ4MDAwMDAwMDIyQwotOjEwMTkzMDAwMDYxQUQzNTgwMDAwMDAyMDA2MUFBNzEwMDAwMDAxQzRBMAotOjEwMTk0MDAwMDYxQTMwNDAwMDAwMDAxMDA2MUEzMEMwMDAwMDAwMTBENwotOjEwMTk1MDAwMDYxQTMxNDAwMDAwMDAxMDA2MUEzMUMwMDAwMDAwMTBDNQotOjEwMTk2MDAwMDYxQTMzNDgwMDAwMDAxMjA2MUEzNTUwMDAwMDAwNzBCNQotOjEwMTk3MDAwMDYxQUQ0NjAwMDAwMDAwMjA2MUFEMzUwMDAwMDAwMDJDQwotOjEwMTk4MDAwMDYxQUQzRDgwMDAwMDAyMDAyMUFBRTIwMDAwMDAwMDA4MgotOjEwMTk5MDAwMDYxQTUwMDAwMDAwMDAwMjA2MUE1MDgwMDAwMDAwMTJEMwotOjEwMTlBMDAwMDQxQTQwMDAwMDAyMDNERjA0MUE2M0MwMDAwMjAzRTFDRQotOjEwMTlCMDAwMDYxQTcwMDAwMDAwMDAwNDA2MUEzMjAwMDAwMDAwMDgzOQotOjEwMTlDMDAwMDIxQUFFMjQwMDAwMDAwMDA2MUE1MDEwMDAwMDAwMDJBNwotOjEwMTlEMDAwMDYxQTUwQzgwMDAwMDAxMjA0MUE0MDA4MDAwMjAzRTM2RgotOjEwMTlFMDAwMDQxQTYzQzgwMDAyMDNFNTA2MUE3MDEwMDAwMDAwMDQyMAotOjEwMTlGMDAwMDYxQTMyMjAwMDAwMDAwODAyMUFBRTI4MDAwMDAwMDA3QgotOjEwMUEwMDAwMDYxQTUwMjAwMDAwMDAwMjA2MUE1MTEwMDAwMDAwMTJCMQotOjEwMUExMDAwMDQxQTQwMTAwMDAyMDNFNzA0MUE2M0QwMDAwMjAzRTkyRAotOjEwMUEyMDAwMDYxQTcwMjAwMDAwMDAwNDA2MUEzMjQwMDAwMDAwMDg2OAotOjEwMUEzMDAwMDIxQUFFMkMwMDAwMDAwMDA2MUE1MDMwMDAwMDAwMDIwRQotOjEwMUE0MDAwMDYxQTUxNTgwMDAwMDAxMjA0MUE0MDE4MDAwMjAzRUI1NQotOjEwMUE1MDAwMDQxQTYzRDgwMDAyMDNFRDA2MUE3MDMwMDAwMDAwMDQ3NwotOjEwMUE2MDAwMDYxQTMyNjAwMDAwMDAwODAyMUFBRTMwMDAwMDAwMDBDMgotOjEwMUE3MDAwMDYxQTUwNDAwMDAwMDAwMjA2MUE1MUEwMDAwMDAwMTI5MQotOjEwMUE4MDAwMDQxQTQwMjAwMDAyMDNFRjA0MUE2M0UwMDAwMjAzRjE4RAotOjEwMUE5MDAwMDYxQTcwNDAwMDAwMDAwNDA2MUEzMjgwMDAwMDAwMDg5OAotOjEwMUFBMDAwMDIxQUFFMzQwMDAwMDAwMDA2MUE1MDUwMDAwMDAwMDI3NgotOjEwMUFCMDAwMDYxQTUxRTgwMDAwMDAxMjA0MUE0MDI4MDAwMjAzRjMzRAotOjEwMUFDMDAwMDQxQTYzRTgwMDAyMDNGNTA2MUE3MDUwMDAwMDAwMDRDRgotOjEwMUFEMDAwMDYxQTMyQTAwMDAwMDAwODAyMUFBRTM4MDAwMDAwMDAwQQotOjEwMUFFMDAwMDYxQTUwNjAwMDAwMDAwMjA2MUE1MjMwMDAwMDAwMTI3MAotOjEwMUFGMDAwMDQxQTQwMzAwMDAyMDNGNzA0MUE2M0YwMDAwMjAzRjlFRAotOjEwMUIwMDAwMDYxQTcwNjAwMDAwMDAwNDA2MUEzMkMwMDAwMDAwMDhDNwotOjEwMUIxMDAwMDIxQUFFM0MwMDAwMDAwMDA2MUE1MDcwMDAwMDAwMDJERAotOjEwMUIyMDAwMDYxQTUyNzgwMDAwMDAxMjA0MUE0MDM4MDAwMjAzRkIyMwotOjEwMUIzMDAwMDQxQTYzRjgwMDAyMDNGRDA2MUE3MDcwMDAwMDAwMDQyNgotOjEwMUI0MDAwMDYxQTMyRTAwMDAwMDAwODAyMDBBMkE0MDAwMDAyMDkwOAotOjEwMUI1MDAwMDIwMEEyNzAwMDAwMDAwMDAyMDBBMjc0MDAwMDAwMDA1OQotOjEwMUI2MDAwMDIwMEEyNzAwMDAwMDAwMDAyMDBBMjc0MDAwMDAwMDA0OQotOjEwMUI3MDAwMDIwMEEyNzAwMDAwMDAwMDAyMDBBMjc0MDAwMDAwMDAzOQotOjEwMUI4MDAwMDIwMEEyNzAwMDAwMDAwMDAyMDBBMjc0MDAwMDAwMDAyOQotOjEwMUI5MDAwMDIwMTAwQjQwMDAwMDAwMTAyMDEwMEI4MDAwMDAwMDFEMQotOjEwMUJBMDAwMDIwMTAwQ0MwMDAwMDAwMTAyMDEwMEQwMDAwMDAwMDE5MQotOjEwMUJCMDAwMDIwMTAwREMwMDAwMDAwMTAyMDEwMTAwMDAwMDAwMDE0MAotOjEwMUJDMDAwMDIwMTAxMDQwMDAwMDAwMTAyMDEwMDdDMDAzMDAwMDA1RAotOjEwMUJEMDAwMDIwMTAwODQwMDAwMDAyODAyMDEwMDhDMDAwMDAwMDBDNwotOjEwMUJFMDAwMDIwMTAxMzAwMDAwMDAwNDAyMDEwMjVDMDAwMDAwMDE1QgotOjEwMUJGMDAwMDIwMTAzMjgwMDAwMDAwMDAyMDE2MDU4MDAwMEZGRkZGRQotOjEwMUMwMDAwMDIwMTYwNzAwMDAwMDAwNzAyMDEwNTU0MDAwMDAwMzA2RQotOjEwMUMxMDAwMDIwMTAwQzQwMDAwMDAwMTAyMDEwMEY4MDAwMDAwMDEwMAotOjEwMUMyMDAwMDIwMTAwRjAwMDAwMDAwMTAyMDEwMDgwMDAzMDAwMDAwRAotOjEwMUMzMDAwMDIwMTAwODgwMDAwMDAyODAyMDEwMDkwMDAwMDAwMDA1RQotOjEwMUM0MDAwMDIwMTAxMzQwMDAwMDAwNDAyMDEwMkRDMDAwMDAwMDE3NgotOjEwMUM1MDAwMDIwMTAzMkMwMDAwMDAwMDAyMDE2MDVDMDAwMEZGRkY5NQotOjEwMUM2MDAwMDIwMTYwNzQwMDAwMDAwNzAyMDEwNTY0MDAwMDAwMzBGQQotOjEwMUM3MDAwMDIwMTAwQzgwMDAwMDAwMTAyMDEwMEZDMDAwMDAwMDE5OAotOjEwMUM4MDAwMDIwMTAwRjQwMDAwMDAwMTAyMEMxMDAwMDAwMDAwMjgxNgotOjEwMUM5MDAwMDIwQzIwMDgwMDAwMDIxMTAyMEMyMDBDMDAwMDAyMDBCRgotOjEwMUNBMDAwMDIwQzIwMTAwMDAwMDIwNDAyMEMyMDFDMDAwMEZGRkZBOAotOjEwMUNCMDAwMDIwQzIwMjAwMDAwRkZGRjAyMEMyMDI0MDAwMEZGRkY4OAotOjEwMUNDMDAwMDIwQzIwMjgwMDAwRkZGRjAyMEMyMDM4MDAwMDAwMDA1QQotOjEwMUNEMDAwMDIwQzIwM0MwMDAwMDAzNzAyMEMyMDQwMDAwMDAwMjFENAotOjEwMUNFMDAwMDIwQzIwNDQwMDAwMDAyMDA2MEMyMDQ4MDAwMDAwMURDQgotOjEwMUNGMDAwMDIwQzIwQkMwMDAwMDAwMTA2MEMyMEMwMDAwMDAwM0ZDOAotOjEwMUQwMDAwMDIwQzIxQkMwMDAwMDAwMTAyMEMyMUMwMDAwMDAwMDFGNwotOjEwMUQxMDAwMDIwQzIxQzQwMDAwMDAwMTA2MEMyMUM4MDAwMDAwMUNCOAotOjEwMUQyMDAwMDIwQzIyMzgwN0ZGRkZGRjAyMEMyMjNDMDAwMDAwN0Y1QwotOjEwMUQzMDAwMDIwQzIyNDAwN0ZGRkZGRjAyMEMyMjQ0MDAwMDAwM0Y3QwotOjEwMUQ0MDAwMDEwQzIyNDgwMDAwMDAwMDAxMEMyMjRDMDAwMDAwMDBBMQotOjEwMUQ1MDAwMDEwQzIyNTAwMDAwMDAwMDAxMEMyMjU0MDAwMDAwMDA4MQotOjEwMUQ2MDAwMDEwQzIyNTgwMDAwMDAwMDAxMEMyMjVDMDAwMDAwMDA2MQotOjEwMUQ3MDAwMDEwQzIyNjAwMDAwMDAwMDAxMEMyMjY0MDAwMDAwMDA0MQotOjEwMUQ4MDAwMDEwQzIyNjgwMDAwMDAwMDAxMEMyMjZDMDAwMDAwMDAyMQotOjEwMUQ5MDAwMDEwQzIyNzAwMDAwMDAwMDAxMEMyMjc0MDAwMDAwMDAwMQotOjEwMURBMDAwMDEwQzIyNzgwMDAwMDAwMDAxMEMyMjdDMDAwMDAwMDBFMQotOjEwMURCMDAwMDIwQzIyRDgwMDAwRkZGRjAyMEMyMkRDMDAwMEZGRkYxMwotOjEwMURDMDAwMDIwQzIyRTAwMDAwRkZGRjAyMEMyMkU0MDAwMEZGRkZGMwotOjEwMUREMDAwMEMwQzIwMDAwMDAwMDNFODBBMEMyMDAwMDAwMDAwMDFBOQotOjEwMURFMDAwMEIwQzIwMDAwMDAwMDAwMzAyMEM0MDA4MDAwMDEwMTE0MgotOjEwMURGMDAwMDIwQzQwMEMwMDAwMTAwMDAyMEM0MDEwMDAwMDEwMDQwNwotOjEwMUUwMDAwMDIwQzQwMTQwMDAwMTAyMTAyMEM0MDFDMDAwMEZGRkZENwotOjEwMUUxMDAwMDIwQzQwMjAwMDAwRkZGRjAyMEM0MDI0MDAwMEZGRkZFNgotOjEwMUUyMDAwMDIwQzQwMjgwMDAwRkZGRjAyMEM0MDM4MDAwMDAwNDY3MgotOjEwMUUzMDAwMDIwQzQwM0MwMDAwMDAwQzA2MEM0MDQwMDAwMDAwMDI3OAotOjEwMUU0MDAwMDIwQzQwNDgwMDAwMDAxODAyMEM0MDRDMDAwMDAwRjA1QQotOjEwMUU1MDAwMDYwQzQwNTAwMDAwMDAxRjAyMEM0MENDMDAwMDAwMDFBNgotOjEwMUU2MDAwMDYwQzQwRDAwMDAwMDAzQTAyMEM0MUI4MDAwMDAwMDEwRQotOjEwMUU3MDAwMDYwQzQxQkMwMDAwMDAwMzAyMEM0MUM4MDAwMDAwMDEzOAotOjEwMUU4MDAwMDIwQzQxQ0MwMDAwMDAwMTA2MEM0MUQwMDAwMDAwMUFGOQotOjEwMUU5MDAwMDIwQzQyMzgwN0ZGRkZGRjAyMEM0MjNDMDAwMDAwN0ZBQgotOjEwMUVBMDAwMDIwQzQyNDAwN0ZGRkZGRjAyMEM0MjQ0MDAwMDAwM0ZDQgotOjEwMUVCMDAwMDEwQzQyNDgwMDAwMDAwMDAxMEM0MjRDMDAwMDAwMDBGMAotOjEwMUVDMDAwMDEwQzQyNTAwMDAwMDAwMDAxMEM0MjU0MDAwMDAwMDBEMAotOjEwMUVEMDAwMDEwQzQyNTgwMDAwMDAwMDAxMEM0MjVDMDAwMDAwMDBCMAotOjEwMUVFMDAwMDEwQzQyNjAwMDAwMDAwMDAxMEM0MjY0MDAwMDAwMDA5MAotOjEwMUVGMDAwMDEwQzQyNjgwMDAwMDAwMDAxMEM0MjZDMDAwMDAwMDA3MAotOjEwMUYwMDAwMDEwQzQyNzAwMDAwMDAwMDAxMEM0Mjc0MDAwMDAwMDA0RgotOjEwMUYxMDAwMDEwQzQyNzgwMDAwMDAwMDAxMEM0MjdDMDAwMDAwMDAyRgotOjEwMUYyMDAwMDEwQzQyODAwMDAwMDAwMDAyMEM0MkQ4MDAwMEZGRkZCQwotOjEwMUYzMDAwMDIwQzQyREMwMDAwRkZGRjAyMEM0MkUwMDAwMEZGRkY0OQotOjEwMUY0MDAwMDIwQzQyRTQwMDAwRkZGRjBDMEM0MDAwMDAwMDAzRTgxQwotOjEwMUY1MDAwMEEwQzQwMDAwMDAwMDAwMTBCMEM0MDAwMDAwMDAwMDNEMAotOjEwMUY2MDAwMDYwRDQwMDAwMDAwMEEwMDAyMEQwMDQ0MDAwMDAwMzI4RgotOjEwMUY3MDAwMDIwRDAwOEMwMjE1MDAyMDAyMEQwMDkwMDIxNTAwMjBCOQotOjEwMUY4MDAwMDIwRDAwOTQwODEwMDAwMDAyMEQwMDk4MDAwMDAwMzZCOQotOjEwMUY5MDAwMDIwRDAwQTAwMDAwMDAwMDAyMEQwMEE0MDAwMDAwMDREQgotOjEwMUZBMDAwMDIwRDAwQTgwMDAwMDAwNDA2MEQwMEFDMDAwMDAwMDJCNQotOjEwMUZCMDAwMDIwRDAwQjgwMDAwMDAwMjAyMEQwMEMwMDAwMDAwMDE4OAotOjEwMUZDMDAwMDIwRDAwQzgwMDAwMDAwMjAyMEQwMENDMDAwMDAwMDI1QgotOjEwMUZEMDAwMDIwRDAxNUMwMDAwMDAwMTAyMEQwMTY0MDAwMDAwMDExRgotOjEwMUZFMDAwMDIwRDAxNjgwMDAwMDAwMjAyMEQwMjA0MDAwMDAwMDE2MQotOjEwMUZGMDAwMDIwRDAyMEMwMDAwMDAyMDAyMEQwMjEwMDAwMDAwNDA0MwotOjEwMjAwMDAwMDIwRDAyMTQwMDAwMDA0MDAyMEQwMjIwMDAwMDAwMDMzNwotOjEwMjAxMDAwMDIwRDAyMjQwMDAwMDAxODA2MEQwMjgwMDAwMDAwMTJDQwotOjEwMjAyMDAwMDQwRDAzMDAwMDE4MDNGRjA2MEQwMzYwMDAwMDAwMEMwMAotOjEwMjAzMDAwMDIwRDAwNEMwMDAwMDAwMTAyMEQwMDUwMDAwMDAwMDJFMwotOjEwMjA0MDAwMDIwRDAwNTQwMDAwMDAwMDAyMEQwMDU4MDAwMDAwMDhCRQotOjEwMjA1MDAwMDYwRDAwNUMwMDAwMDAwNDAyMEQwMEM0MDAwMDAwMDQzNgotOjEwMjA2MDAwMDIwRDAwMDQwMDAwMDAwMTAyMEQwMDA4MDAwMDAwMDE0NAotOjEwMjA3MDAwMDIwRDAwMEMwMDAwMDAwMTAyMEQwMDEwMDAwMDAwMDEyNAotOjEwMjA4MDAwMDIwRDAwMTQwMDAwMDAwMTAyMEQwMDE4MDAwMDAwMDEwNAotOjEwMjA5MDAwMDIwRDAwMUMwMDAwMDAwMTAyMEQwMDIwMDAwMDAwMDFFNAotOjEwMjBBMDAwMDIwRDAwMjQwMDAwMDAwMTAyMEQwMDI4MDAwMDAwMDFDNAotOjEwMjBCMDAwMDIwRDAwMkMwMDAwMDAwMTAyMEQwMDMwMDAwMDAwMDFBNAotOjEwMjBDMDAwMDIwRDAwMzQwMDAwMDAwMTAyMEQwMDM4MDAwMDAwMDE4NAotOjEwMjBEMDAwMDIwRDAwM0MwMDAwMDAwMTAyMEQwMTE0MDAwMDAwMDk4NwotOjEwMjBFMDAwMDIwRDAxMUMwMDAwMDAwQTAyMEQwMTI0MDAwMDAwMDA4NgotOjEwMjBGMDAwMDIwRDAxMkMwMDAwMDAwMDAyMEQwMTM0MDAwMDAwMDA2MAotOjEwMjEwMDAwMDIwRDAxM0MwMDAwMDAwQjAyMEQwMTQ0MDAwMDAwMDAyNAotOjEwMjExMDAwMDIwRDAxMTgwMDAwMDAyOTAyMEQwMTIwMDAwMDAwMkExNAotOjEwMjEyMDAwMDIwRDAxMjgwMDAwMDAyMDAyMEQwMTMwMDAwMDAwMjBGNwotOjEwMjEzMDAwMDIwRDAxMzgwMDAwMDAyMDAyMEQwMTQwMDAwMDAwMkJCQwotOjEwMjE0MDAwMDIwRDAxNDgwMDAwMDAyMDAyMEQwMTE0MDAwMDAwMTlEQQotOjEwMjE1MDAwMDIwRDAxMUMwMDAwMDAxQTAyMEQwMTI0MDAwMDAwMTBGNQotOjEwMjE2MDAwMDIwRDAxMkMwMDAwMDAxMDAyMEQwMTM0MDAwMDAwMTBDRgotOjEwMjE3MDAwMDIwRDAxM0MwMDAwMDAxQjAyMEQwMTQ0MDAwMDAwMTA5NAotOjEwMjE4MDAwMDIwRDAxMTgwMDAwMDAzOTAyMEQwMTIwMDAwMDAwM0E4NAotOjEwMjE5MDAwMDIwRDAxMjgwMDAwMDAzMDAyMEQwMTMwMDAwMDAwMzA2NwotOjEwMjFBMDAwMDIwRDAxMzgwMDAwMDAzMDAyMEQwMTQwMDAwMDAwM0IyQwotOjEwMjFCMDAwMDIwRDAxNDgwMDAwMDAzMDAyMEQwMTE0MDAwMDAwNDkyQQotOjEwMjFDMDAwMDIwRDAxMUMwMDAwMDA0QTAyMEQwMTI0MDAwMDAwNDAyNQotOjEwMjFEMDAwMDIwRDAxMkMwMDAwMDA0MDAyMEQwMTM0MDAwMDAwNDBGRgotOjEwMjFFMDAwMDIwRDAxM0MwMDAwMDA0QjAyMEQwMTQ0MDAwMDAwNDBDNAotOjEwMjFGMDAwMDIwRDAxMTgwMDAwMDA2OTAyMEQwMTIwMDAwMDAwNkFCNAotOjEwMjIwMDAwMDIwRDAxMjgwMDAwMDA2MDAyMEQwMTMwMDAwMDAwNjA5NgotOjEwMjIxMDAwMDIwRDAxMzgwMDAwMDA2MDAyMEQwMTQwMDAwMDAwNkI1QgotOjEwMjIyMDAwMDIwRDAxNDgwMDAwMDA2MDAyMEQwMTE0MDAwMDAwNTk3OQotOjEwMjIzMDAwMDIwRDAxMUMwMDAwMDA1QTAyMEQwMTI0MDAwMDAwNTA5NAotOjEwMjI0MDAwMDIwRDAxMkMwMDAwMDA1MDAyMEQwMTM0MDAwMDAwNTA2RQotOjEwMjI1MDAwMDIwRDAxM0MwMDAwMDA1QjAyMEQwMTQ0MDAwMDAwNTAzMwotOjEwMjI2MDAwMDIwRDAxMTgwMDAwMDA3OTAyMEQwMTIwMDAwMDAwN0EyMwotOjEwMjI3MDAwMDIwRDAxMjgwMDAwMDA3MDAyMEQwMTMwMDAwMDAwNzAwNgotOjEwMjI4MDAwMDIwRDAxMzgwMDAwMDA3MDAyMEQwMTQwMDAwMDAwN0JDQgotOjEwMjI5MDAwMDIwRDAxNDgwMDAwMDA3MDA2MEUyMDAwMDAwMDA4MDAzQQotOjEwMjJBMDAwMDIwRTAwNEMwMDAwMDAzMjAyMEUwMDk0MDIxNTAwMjBDNQotOjEwMjJCMDAwMDIwRTAwOTgwMjE1MDAyMDAyMEUwMDlDMDAwMDAwMzA2MwotOjEwMjJDMDAwMDIwRTAwQTAwODEwMDAwMDAyMEUwMEE0MDAwMDAwMzY1QwotOjEwMjJEMDAwMDIwRTAwQTgwMDAwMDAzMDAyMEUwMEFDMDAwMDAwMzEyOQotOjEwMjJFMDAwMDIwRTAwQjQwMDAwMDAwMzAyMEUwMEI4MDAwMDAwMDA1RgotOjEwMjJGMDAwMDIwRTAwQzQwMDAwMDAwMDAyMEUwMENDMDAwMDAwMDYyOAotOjEwMjMwMDAwMDIwRTAwRDgwMDAwMDAwMTAyMEUwMTQ0MDAwMDAwMDE4RQotOjEwMjMxMDAwMDIwRTAxNEMwMDAwMDAwMTAyMEUwMTUwMDAwMDAwMDJGQwotOjEwMjMyMDAwMDIwRTAyMDQwMDAwMDAwMTAyMEUwMjBDMDAwMDAwNDAzOAotOjEwMjMzMDAwMDIwRTAyMTAwMDAwMDA0MDAyMEUwMjFDMDAwMDAwMDQwOQotOjEwMjM0MDAwMDIwRTAyMjAwMDAwMDAyMDAyMEUwMjI0MDAwMDAwMEVGNwotOjEwMjM1MDAwMDIwRTAyMjgwMDAwMDAxQjA2MEUwMzAwMDAwMDAwMTJGRgotOjEwMjM2MDAwMDQwRTAyODAwMDFCMDQxNzA2MEUwMkVDMDAwMDAwMDU5QwotOjEwMjM3MDAwMDIwRTAwNTQwMDAwMDAwQzAyMEUwMDU4MDAwMDAwMEM3OQotOjEwMjM4MDAwMDIwRTAwNUMwMDAwMDAwMDAyMEUwMDYwMDAwMDAwMTA2MQotOjEwMjM5MDAwMDIwRTAwNjQwMDAwMDAxMDA2MEUwMDY4MDAwMDAwMDMzQQotOjEwMjNBMDAwMDIwRTAwREMwMDAwMDAwMzAyMEUwMDA0MDAwMDAwMDEyOQotOjEwMjNCMDAwMDIwRTAwMDgwMDAwMDAwMTAyMEUwMDBDMDAwMDAwMDFFNwotOjEwMjNDMDAwMDIwRTAwMTAwMDAwMDAwMTAyMEUwMDE0MDAwMDAwMDFDNwotOjEwMjNEMDAwMDIwRTAwMTgwMDAwMDAwMTAyMEUwMDFDMDAwMDAwMDFBNwotOjEwMjNFMDAwMDIwRTAwMjAwMDAwMDAwMTAyMEUwMDI0MDAwMDAwMDE4NwotOjEwMjNGMDAwMDIwRTAwMjgwMDAwMDAwMTAyMEUwMDJDMDAwMDAwMDE2NwotOjEwMjQwMDAwMDIwRTAwMzAwMDAwMDAwMTAyMEUwMDM0MDAwMDAwMDE0NgotOjEwMjQxMDAwMDIwRTAwMzgwMDAwMDAwMTAyMEUwMDNDMDAwMDAwMDEyNgotOjEwMjQyMDAwMDIwRTAwNDAwMDAwMDAwMTAyMEUwMDQ0MDAwMDAwMDEwNgotOjEwMjQzMDAwMDIwRTAxMTAwMDAwMDAwRjAyMEUwMTE4MDAwMDAwMDA0MwotOjEwMjQ0MDAwMDIwRTAxMjAwMDAwMDAwMDAyMEUwMTI4MDAwMDAwMDAyMgotOjEwMjQ1MDAwMDIwRTAxMTQwMDAwMDAyRjAyMEUwMTFDMDAwMDAwMjBEQgotOjEwMjQ2MDAwMDIwRTAxMjQwMDAwMDAyMDAyMEUwMTJDMDAwMDAwMjBCQQotOjEwMjQ3MDAwMDIwRTAxMTAwMDAwMDAxRjAyMEUwMTE4MDAwMDAwMTBFMwotOjEwMjQ4MDAwMDIwRTAxMjAwMDAwMDAxMDAyMEUwMTI4MDAwMDAwMTBDMgotOjEwMjQ5MDAwMDIwRTAxMTQwMDAwMDAzRjAyMEUwMTFDMDAwMDAwMzA3QgotOjEwMjRBMDAwMDIwRTAxMjQwMDAwMDAzMDAyMEUwMTJDMDAwMDAwMzA1QQotOjEwMjRCMDAwMDIwRTAxMTAwMDAwMDA0RjAyMEUwMTE4MDAwMDAwNDA0MwotOjEwMjRDMDAwMDIwRTAxMjAwMDAwMDA0MDAyMEUwMTI4MDAwMDAwNDAyMgotOjEwMjREMDAwMDIwRTAxMTQwMDAwMDA2RjAyMEUwMTFDMDAwMDAwNjBEQgotOjEwMjRFMDAwMDIwRTAxMjQwMDAwMDA2MDAyMEUwMTJDMDAwMDAwNjBCQQotOjEwMjRGMDAwMDIwRTAxMTAwMDAwMDA1RjAyMEUwMTE4MDAwMDAwNTBFMwotOjEwMjUwMDAwMDIwRTAxMjAwMDAwMDA1MDAyMEUwMTI4MDAwMDAwNTBDMQotOjEwMjUxMDAwMDIwRTAxMTQwMDAwMDA3RjAyMEUwMTFDMDAwMDAwNzA3QQotOjEwMjUyMDAwMDIwRTAxMjQwMDAwMDA3MDAyMEUwMTJDMDAwMDAwNzA1OQotOjEwMjUzMDAwMDczMDA0MDAwMEQ2MDAwMDA4MzAwN0Q4MDAwNTA0MzIzOAotOjEwMjU0MDAwMDczNDAwMDAzMjIyMDAwMDA3MzQ4MDAwMzEyQzBDODk0RgotOjEwMjU1MDAwMDczNTAwMDAzOEREMThENTA3MzU4MDAwMkYxNjI3MEQwOAotOjEwMjU2MDAwMDczNjAwMDAyNjE1MzJEMzA4MzY3MTEwMzFERTA0MzRFOAotOjEwMjU3MDAwMDEzMDAwMDAwMDAwMDAwMDAxMzAwMDA0MDAwMDAwMDBGNQotOjEwMjU4MDAwMDEzMDAwMDgwMDAwMDAwMDAxMzAwMDBDMDAwMDAwMDBENQotOjEwMjU5MDAwMDEzMDAwMTAwMDAwMDAwMDAxMzAwMDE0MDAwMDAwMDBCNQotOjEwMjVBMDAwMDIzMDAwMjAwMDAwMDAwMTAyMzAwMDI0MDAwMDAwMDI4MAotOjEwMjVCMDAwMDIzMDAwMjgwMDAwMDAwMzAyMzAwMDJDMDAwMDAwMDA2MAotOjEwMjVDMDAwMDIzMDAwMzAwMDAwMDAwNDAyMzAwMDM0MDAwMDAwMDEzRQotOjEwMjVEMDAwMDIzMDAwMzgwMDAwMDAwMDAyMzAwMDNDMDAwMDAwMDEyMgotOjEwMjVFMDAwMDIzMDAwNDAwMDAwMDAwNDAyMzAwMDQ0MDAwMDAwMDBGRgotOjEwMjVGMDAwMDIzMDAwNDgwMDAwMDAwMTAyMzAwMDRDMDAwMDAwMDNERgotOjEwMjYwMDAwMDIzMDAwNTAwMDAwMDAwMDAyMzAwMDU0MDAwMDAwMDFDMQotOjEwMjYxMDAwMDIzMDAwNTgwMDAwMDAwNDAyMzAwMDVDMDAwMDAwMDA5RQotOjEwMjYyMDAwMDIzMDAwNjAwMDAwMDAwMTAyMzAwMDY0MDAwMDAwMDM3RQotOjEwMjYzMDAwMDIzMDAwNjgwMDAwMDAwMDAyMzAwMDZDMDAwMDAwMDE2MQotOjEwMjY0MDAwMDIzMDAwNzAwMDAwMDAwNDAyMzAwMDc0MDAwMDAwMDAzRQotOjEwMjY1MDAwMDIzMDAwNzgwMDAwMDAwNDAyMzAwMDdDMDAwMDAwMDMxQgotOjEwMjY2MDAwMDYzMDAwODAwMDAwMDAwMjAyMzAwMEE0MDAwMDdGRkY1RQotOjEwMjY3MDAwMDIzMDAwQTgwMDAwMDNGRjAyMzAwMjI0MDAwMDAwMDAyNgotOjEwMjY4MDAwMDIzMDAyMzQwMDAwMDAwMDAyMzAwMjRDMDAwMDAwMDA2MgotOjEwMjY5MDAwMDIzMDAyRTQwMDAwRkZGRjA2MzAyMDAwMDAwMDA4MDBDNgotOjEwMjZBMDAwMDIzMzhCQzAwMDAwMDAwMTAyMzM4MDAwMDAwMDAwMUFEQQotOjEwMjZCMDAwMDIzMzgwNDAwMDAwMDA0RTAyMzM4MDgwMDAwMDAwMTA5MgotOjEwMjZDMDAwMDIzMzgwQzAwMDAwMDAyMDBDMzM4MzAwMDAwODY0NzBENwotOjEwMjZEMDAwMEEzMzgzMDAwMDAwMDE1NzBCMzM4MzAwMDAwMDA1NUZCRAotOjEwMjZFMDAwMEEzMzgzNDAwMDAwMDAwMDBDMzM4MzQwMDAwMDAyMjZDMAotOjEwMjZGMDAwMEIzMzgzNDAwMDAwMDAwMTAyMzM4MzgwMDAwODY0NzBDNAotOjEwMjcwMDAwMDIzMzgzQzAwMDAwMDIyNjAyMzMxNDgwMDAwMDAwMDE1RgotOjEwMjcxMDAwMEEzMzE0ODAwMDAwMDAwMDA2MzI4MDAwMDAwMDAxMDIyRAotOjEwMjcyMDAwMDYzMjIwMDgwMDAwMDBDODA2MzIyMDAwMDAwMDAwMDIyNwotOjEwMjczMDAwMDQzMjg1MjAwMDhGMDQzNjA2MzI4NzVDMDAwMDAwMDlEMQotOjEwMjc0MDAwMDYzMjNFQjAwMDAwMDAwNjA2MzIzRUQwMDAwMDAwMDIxNQotOjEwMjc1MDAwMDYzMjNFODAwMDAwMDAwQTA0MzIzRUE4MDAwMjA0QzU5MgotOjEwMjc2MDAwMDYzMjNFMDAwMDAwMDAyMDA2MzI1MDAwMDAwMDA5NDAwMgotOjEwMjc3MDAwMDYzMjQwMDAwMDAwMDAwNDA0MzI5NEMwMDAwMjA0Qzc4NgotOjEwMjc4MDAwMDYzMjQxMTAwMDAwMDAwMjA2MzJEMDAwMDAwMDAwNzA0NgotOjEwMjc5MDAwMDYzMkRCMDAwMDAwMDBENDA2MzJERUEwMDAwMDAwMDI5QQotOjEwMjdBMDAwMDYzMkUwMDAwMDAwMDgwMDA2MzMyNDAwMDAwMDAxMTg5MwotOjEwMjdCMDAwMDYzMjEwMDAwMDAwMDE4ODA2MzI1MDAwMDAwMDAwMjBBMAotOjEwMjdDMDAwMDYzMjUxMDAwMDAwMDAyMDA2MzI1MjAwMDAwMDAwMjBCNgotOjEwMjdEMDAwMDYzMjUzMDAwMDAwMDAyMDA2MzI1NDAwMDAwMDAwMjBBMgotOjEwMjdFMDAwMDYzMjU1MDAwMDAwMDAyMDA2MzI1NjAwMDAwMDAwMjA4RQotOjEwMjdGMDAwMDYzMjU3MDAwMDAwMDAyMDA2MzI1ODAwMDAwMDAwMjA3QQotOjEwMjgwMDAwMDYzMjU5MDAwMDAwMDAyMDA2MzI1QTAwMDAwMDAwMjA2NQotOjEwMjgxMDAwMDYzMjVCMDAwMDAwMDAyMDA2MzI1QzAwMDAwMDAwMjA1MQotOjEwMjgyMDAwMDYzMjVEMDAwMDAwMDAyMDA2MzI1RTAwMDAwMDAwMjAzRAotOjEwMjgzMDAwMDYzMjVGMDAwMDAwMDAyMDA2MzI4NEYwMDAwMDAwMDIzMwotOjEwMjg0MDAwMDQzMjg1MDAwMDAyMDRDOTA2MzI4NTA4MDAwMDAwMDIzNwotOjEwMjg1MDAwMDYzMkRFOTAwMDAwMDAwMjA2MzMyODYwMDAwMDAxMThGNgotOjEwMjg2MDAwMDYzMjE2MjAwMDAwMDE4ODA2MzI1MDgwMDAwMDAwMjA0OQotOjEwMjg3MDAwMDYzMjUxODAwMDAwMDAyMDA2MzI1MjgwMDAwMDAwMjAwNQotOjEwMjg4MDAwMDYzMjUzODAwMDAwMDAyMDA2MzI1NDgwMDAwMDAwMjBGMQotOjEwMjg5MDAwMDYzMjU1ODAwMDAwMDAyMDA2MzI1NjgwMDAwMDAwMjBERAotOjEwMjhBMDAwMDYzMjU3ODAwMDAwMDAyMDA2MzI1ODgwMDAwMDAwMjBDOQotOjEwMjhCMDAwMDYzMjU5ODAwMDAwMDAyMDA2MzI1QTgwMDAwMDAwMjBCNQotOjEwMjhDMDAwMDYzMjVCODAwMDAwMDAyMDA2MzI1QzgwMDAwMDAwMjBBMQotOjEwMjhEMDAwMDYzMjVEODAwMDAwMDAyMDA2MzI1RTgwMDAwMDAwMjA4RAotOjEwMjhFMDAwMDYzMjVGODAwMDAwMDAyMDA2MzI4NEY4MDAwMDAwMDJGQgotOjEwMjhGMDAwMDQzMjg1MTAwMDAyMDRDQjA2MzI4NTE4MDAwMDAwMDI2NQotOjEwMjkwMDAwMDYzMkRFOTgwMDAwMDAwMjAyMzI4NDUwMDAwMDAwMDAwRgotOjEwMjkxMDAwMDYzMjQwMTAwMDAwMDAwMjAyMzI4NDU0MDAwMDAwMDAyMQotOjEwMjkyMDAwMDYzMjQwMjAwMDAwMDAwMjAyMzI4NDU4MDAwMDAwMDBGRAotOjEwMjkzMDAwMDYzMjQwMzAwMDAwMDAwMjAyMzI4NDVDMDAwMDAwMDBEOQotOjEwMjk0MDAwMDYzMjQwNDAwMDAwMDAwMjAyMzI4NDYwMDAwMDAwMDBCNQotOjEwMjk1MDAwMDYzMjQwNTAwMDAwMDAwMjAyMzI4NDY0MDAwMDAwMDA5MQotOjEwMjk2MDAwMDYzMjQwNjAwMDAwMDAwMjAyMzI4NDY4MDAwMDAwMDA2RAotOjEwMjk3MDAwMDYzMjQwNzAwMDAwMDAwMjAyMzI4NDZDMDAwMDAwMDA0OQotOjEwMjk4MDAwMDYzMjQwODAwMDAwMDAwMjA3MjAwNDAwMDA3MzAwMDBBRgotOjEwMjk5MDAwMDgyMDA3ODAwMDEwMDRDRDA3MjQwMDAwMkFENTAwMDA3RAotOjEwMjlBMDAwMDcyNDgwMDAyNzc0MEFCNjA4MjREMzYwNjNGQTA0Q0Y5MgotOjEwMjlCMDAwMDEyMDAwMDAwMDAwMDAwMDAxMjAwMDA0MDAwMDAwMDBEMQotOjEwMjlDMDAwMDEyMDAwMDgwMDAwMDAwMDAxMjAwMDBDMDAwMDAwMDBCMQotOjEwMjlEMDAwMDEyMDAwMTAwMDAwMDAwMDAxMjAwMDE0MDAwMDAwMDA5MQotOjEwMjlFMDAwMDIyMDAwMjAwMDAwMDAwMTAyMjAwMDI0MDAwMDAwMDI1QwotOjEwMjlGMDAwMDIyMDAwMjgwMDAwMDAwMzAyMjAwMDJDMDAwMDAwMDAzQwotOjEwMkEwMDAwMDIyMDAwMzAwMDAwMDAwNDAyMjAwMDM0MDAwMDAwMDExOQotOjEwMkExMDAwMDIyMDAwMzgwMDAwMDAwMDAyMjAwMDNDMDAwMDAwMDFGRAotOjEwMkEyMDAwMDIyMDAwNDAwMDAwMDAwNDAyMjAwMDQ0MDAwMDAwMDBEQQotOjEwMkEzMDAwMDIyMDAwNDgwMDAwMDAwMTAyMjAwMDRDMDAwMDAwMDNCQQotOjEwMkE0MDAwMDIyMDAwNTAwMDAwMDAwMDAyMjAwMDU0MDAwMDAwMDE5RAotOjEwMkE1MDAwMDIyMDAwNTgwMDAwMDAwNDAyMjAwMDVDMDAwMDAwMDA3QQotOjEwMkE2MDAwMDIyMDAwNjAwMDAwMDAwMTAyMjAwMDY0MDAwMDAwMDM1QQotOjEwMkE3MDAwMDIyMDAwNjgwMDAwMDAwMDAyMjAwMDZDMDAwMDAwMDEzRAotOjEwMkE4MDAwMDIyMDAwNzAwMDAwMDAwNDAyMjAwMDc0MDAwMDAwMDAxQQotOjEwMkE5MDAwMDIyMDAwNzgwMDAwMDAwNDAyMjAwMDdDMDAwMDAwMDNGNwotOjEwMkFBMDAwMDYyMDAwODAwMDAwMDAwMjAyMjAwMEE0MDAwMDdGRkYzQQotOjEwMkFCMDAwMDIyMDAwQTgwMDAwMDNGRjAyMjAwMjI0MDAwMDAwMDAwMgotOjEwMkFDMDAwMDIyMDAyMzQwMDAwMDAwMDAyMjAwMjRDMDAwMDAwMDAzRQotOjEwMkFEMDAwMDIyMDAyRTQwMDAwRkZGRjA2MjAyMDAwMDAwMDA4MDBBMgotOjEwMkFFMDAwMDIyMzhCQzAwMDAwMDAwMTAyMjM4MDAwMDAwMDAwMTBDMAotOjEwMkFGMDAwMDIyMzgwNDAwMDAwMDAxMjAyMjM4MDgwMDAwMDAwMzA4QQotOjEwMkIwMDAwMDIyMzgwQzAwMDAwMDAwRTBDMjM4MzAwMDAwODY0NzBDNAotOjEwMkIxMDAwMEEyMzgzMDAwMDAwMDE1NzBCMjM4MzAwMDAwMDA1NUY5OAotOjEwMkIyMDAwMEEyMzgzNDAwMDAwMDAwMDBDMjM4MzQwMDAwMDAyMjY5QgotOjEwMkIzMDAwMEIyMzgzNDAwMDAwMDAwMTAyMjM4MzgwMDAwODY0NzA5RgotOjEwMkI0MDAwMDIyMzgzQzAwMDAwMDIyNjAyMjMxNDgwMDAwMDAwMDEzQgotOjEwMkI1MDAwMEEyMzE0ODAwMDAwMDAwMDA2MjIxMDAwMDAwMDAwNDIzQQotOjEwMkI2MDAwMDYyMjIwMDgwMDAwMDBDODA2MjIyMDAwMDAwMDAwMDIwMwotOjEwMkI3MDAwMDYyMkIwMDAwMDAwMDMzMDA2MjJGNDAwMDAwMDAwNTNEQgotOjEwMkI4MDAwMDQyMkY1NEMwMDAxMDREMTA2MjJGNTUwMDAwMDAwMDM5OAotOjEwMkI5MDAwMDQyMkY1NUMwMDAxMDREMjA2MjJGNTYwMDAwMDAwMDM2NwotOjEwMkJBMDAwMDQyMkY1NkMwMDAxMDREMzA2MjJGNTcwMDAwMDAwMDMzNgotOjEwMkJCMDAwMDQyMkY1N0MwMDAxMDRENDA2MjJGNTgwMDAwMDAwMDMwNQotOjEwMkJDMDAwMDQyMkY1OEMwMDAxMDRENTA2MjJGNTkwMDAwMDAwMDNENAotOjEwMkJEMDAwMDQyMkY1OUMwMDAxMDRENjA2MjJGNUEwMDAwMDAwMDNBMwotOjEwMkJFMDAwMDQyMkY1QUMwMDAxMDRENzA2MjJGNUIwMDAwMDAwMDM3MgotOjEwMkJGMDAwMDQyMkY1QkMwMDAxMDREODA2MjJGNUMwMDAwMDAwNDZGRQotOjEwMkMwMDAwMDYyMkUyMDAwMDAwMDQ0MDA0MjIxMjQwMDA5MDA0RDk5MQotOjEwMkMxMDAwMDYyMjMwMDAwMDAwMDBDMDA2MjI2NzAwMDAwMDAxMDAwQwotOjEwMkMyMDAwMDYyMjkwMDAwMDAwMDQwMDA0MjI2QjA4MDAyMDA1NjlDMQotOjEwMkMzMDAwMDYyMjExRjAwMDAwMDAwNjA0MjIxMjA4MDAwNjA1ODk5MQotOjEwMkM0MDAwMDYyMjEyMjAwMDAwMDAwMjA2MjI0MDAwMDAwMDA1QzBGQgotOjEwMkM1MDAwMDYyMkMwMDAwMDAwMDAwNjA0MjJDMDE4MDAwNjA1OEZFRQotOjEwMkM2MDAwMDYyMkMwMzAwMDAwMDAwQTA0MjJDMDU4MDAwNjA1OTU2NAotOjEwMkM3MDAwMDYyMkMwNzAwMDAwMDAwQTA0MjJDMDk4MDAwNjA1OUJDRQotOjEwMkM4MDAwMDYyMkMwQjAwMDAwMDAwQTA0MjJDMEQ4MDAwNjA1QTEzOAotOjEwMkM5MDAwMDYyMkMwRjAwMDAwMDAwQTA0MjJDMTE4MDAwNjA1QTdBMQotOjEwMkNBMDAwMDYyMkMxMzAwMDAwMDAwQTA0MjJDMTU4MDAwNjA1QUQwQQotOjEwMkNCMDAwMDYyMkMxNzAwMDAwMDAwQTA0MjJDMTk4MDAwNjA1QjM3NAotOjEwMkNDMDAwMDYyMkMxQjAwMDAwMDAwQTA0MjJDMUQ4MDAwNjA1QjlERQotOjEwMkNEMDAwMDYyMkMxRjAwMDAwMDAwQTA0MjJDMjE4MDAwNjA1QkY0NwotOjEwMkNFMDAwMDYyMkMyMzAwMDAwMDAwQTA0MjJDMjU4MDAwNjA1QzVCMAotOjEwMkNGMDAwMDYyMkMyNzAwMDAwMDAwQTA0MjJDMjk4MDAwNjA1Q0IxQQotOjEwMkQwMDAwMDYyMkMyQjAwMDAwMDAwQTA0MjJDMkQ4MDAwNjA1RDE4MwotOjEwMkQxMDAwMDYyMkMyRjAwMDAwMDAwQTA0MjJDMzE4MDAwNjA1RDdFQwotOjEwMkQyMDAwMDYyMkMzMzAwMDAwMDAwQTA0MjJDMzU4MDAwNjA1REQ1NQotOjEwMkQzMDAwMDYyMkMzNzAwMDAwMDAwQTA0MjJDMzk4MDAwNjA1RTNCRgotOjEwMkQ0MDAwMDYyMkMzQjAwMDAwMDAwQTA0MjJDM0Q4MDAwNjA1RTkyOQotOjEwMkQ1MDAwMDYyMkMzRjAwMDAwMDAwQTA0MjJDNDE4MDAwNjA1RUY5MgotOjEwMkQ2MDAwMDYyMkM0MzAwMDAwMDAwQTA0MjJDNDU4MDAwNjA1RjVGQgotOjEwMkQ3MDAwMDYyMkM0NzAwMDAwMDAwQTA0MjJDNDk4MDAwNjA1RkI2NQotOjEwMkQ4MDAwMDYyMkM0QjAwMDAwMDAwQTA0MjJDNEQ4MDAwNjA2MDFDRQotOjEwMkQ5MDAwMDYyMkM0RjAwMDAwMDAwQTA0MjJDNTE4MDAwNjA2MDczNwotOjEwMkRBMDAwMDYyMkM1MzAwMDAwMDAwQTA0MjJDNTU4MDAwNjA2MERBMAotOjEwMkRCMDAwMDYyMkM1NzAwMDAwMDAwQTA0MjJDNTk4MDAwNjA2MTMwQQotOjEwMkRDMDAwMDYyMkM1QjAwMDAwMDAwQTA0MjJDNUQ4MDAwNjA2MTk3NAotOjEwMkREMDAwMDYyMkM1RjAwMDAwMDAwQTA0MjJDNjE4MDAwNjA2MUZERAotOjEwMkRFMDAwMDYyMkM2MzAwMDAwMDAwQTA0MjJDNjU4MDAwNjA2MjU0NgotOjEwMkRGMDAwMDYyMkM2NzAwMDAwMDAwQTA0MjJDNjk4MDAwNjA2MkJCMAotOjEwMkUwMDAwMDYyMkM2QjAwMDAwMDAwQTA0MjJDNkQ4MDAwNjA2MzExOQotOjEwMkUxMDAwMDYyMkM2RjAwMDAwMDAwQTA0MjJDNzE4MDAwNjA2Mzc4MgotOjEwMkUyMDAwMDYyMkM3MzAwMDAwMDAwQTA0MjJDNzU4MDAwNjA2M0RFQgotOjEwMkUzMDAwMDYyMkM3NzAwMDAwMDAwQTA0MjJDNzk4MDAwNjA2NDM1NQotOjEwMkU0MDAwMDYyMkM3QjAwMDAwMDAwQTA0MjJDN0Q4MDAwNjA2NDlCRgotOjEwMkU1MDAwMDYyMkM3RjAwMDAwMDAwQTA0MjJDODE4MDAwNjA2NEYyOAotOjEwMkU2MDAwMDYyMkM4MzAwMDAwMDAwQTA0MjJDODU4MDAwNjA2NTU5MQotOjEwMkU3MDAwMDYyMkM4NzAwMDAwMDAwQTA0MjJDODk4MDAwNjA2NUJGQgotOjEwMkU4MDAwMDYyMkM4QjAwMDAwMDAwQTA0MjJDOEQ4MDAwNjA2NjE2NQotOjEwMkU5MDAwMDYyMkM4RjAwMDAwMDAwQTA0MjJDOTE4MDAwNjA2NjdDRQotOjEwMkVBMDAwMDYyMkM5MzAwMDAwMDAwQTA0MjJDOTU4MDAwNjA2NkQzNwotOjEwMkVCMDAwMDYyMkM5NzAwMDAwMDAwQTA0MjJDOTk4MDAwNjA2NzNBMQotOjEwMkVDMDAwMDYyMkM5QjAwMDAwMDAwQTA0MjJDOUQ4MDAwNjA2NzkwQgotOjEwMkVEMDAwMDYyMkM5RjAwMDAwMDAwQTA0MjJDQTE4MDAwNjA2N0Y3NAotOjEwMkVFMDAwMDYyMkNBMzAwMDAwMDAwQTA0MjJDQTU4MDAwNjA2ODVERAotOjEwMkVGMDAwMDYyMkNBNzAwMDAwMDAwQTA0MjJDQTk4MDAwNjA2OEI0NwotOjEwMkYwMDAwMDYyMkNBQjAwMDAwMDAwQTA0MjJDQUQ4MDAwNjA2OTFCMAotOjEwMkYxMDAwMDYyMkNBRjAwMDAwMDAwQTA0MjJDQjE4MDAwNjA2OTcxOQotOjEwMkYyMDAwMDYyMkNCMzAwMDAwMDAwQTA0MjJDQjU4MDAwNjA2OUQ4MgotOjEwMkYzMDAwMDYyMkNCNzAwMDAwMDAwQTA0MjJDQjk4MDAwNjA2QTNFQwotOjEwMkY0MDAwMDYyMkNCQjAwMDAwMDAwQTA0MjJDQkQ4MDAwNjA2QTk1NgotOjEwMkY1MDAwMDYyMkNCRjAwMDAwMDAwQTA0MjJDQzE4MDAwNjA2QUZCRgotOjEwMkY2MDAwMDYyMkNDMzAwMDAwMDAwQTA0MjJDQzU4MDAwNjA2QjUyOAotOjEwMkY3MDAwMDYyMkNDNzAwMDAwMDAwQTA0MjJDQzk4MDAwNjA2QkI5MgotOjEwMkY4MDAwMDYyMkNDQjAwMDAwMDAwQTA0MjJDQ0Q4MDAwNjA2QzFGQwotOjEwMkY5MDAwMDYyMkNDRjAwMDAwMDAwQTA0MjJDRDE4MDAwNjA2Qzc2NQotOjEwMkZBMDAwMDYyMkNEMzAwMDAwMDAwQTA0MjJDRDU4MDAwNjA2Q0RDRQotOjEwMkZCMDAwMDYyMkNENzAwMDAwMDAwQTA0MjJDRDk4MDAwNjA2RDMzOAotOjEwMkZDMDAwMDYyMkNEQjAwMDAwMDAwQTA0MjJDREQ4MDAwNjA2RDlBMgotOjEwMkZEMDAwMDYyMkNERjAwMDAwMDAwQTA0MjJDRTE4MDAwNjA2REYwQgotOjEwMkZFMDAwMDYyMkNFMzAwMDAwMDAwQTA0MjJDRTU4MDAwNjA2RTU3NAotOjEwMkZGMDAwMDYyMkNFNzAwMDAwMDAwQTA0MjJDRTk4MDAwNjA2RUJERQotOjEwMzAwMDAwMDYyMkNFQjAwMDAwMDAwQTA0MjJDRUQ4MDAwNjA2RjE0NwotOjEwMzAxMDAwMDYyMkNFRjAwMDAwMDAwQTA0MjJDRjE4MDAwNjA2RjdCMAotOjEwMzAyMDAwMDYyMkNGMzAwMDAwMDAwQTA0MjJDRjU4MDAwNjA2RkQxOQotOjEwMzAzMDAwMDYyMkNGNzAwMDAwMDAwQTA0MjJDRjk4MDAwNjA3MDM4MgotOjEwMzA0MDAwMDYyMkNGQjAwMDAwMDAwQTA0MjJDRkQ4MDAwNjA3MDlFQwotOjEwMzA1MDAwMDYyMkNGRjAwMDAwMDAwQTA0MjJEMDE4MDAwNjA3MEY1NQotOjEwMzA2MDAwMDYyMkQwMzAwMDAwMDAwQTA0MjJEMDU4MDAwNjA3MTVCRQotOjEwMzA3MDAwMDYyMkQwNzAwMDAwMDAwQTA0MjJEMDk4MDAwNjA3MUIyOAotOjEwMzA4MDAwMDYyMkQwQjAwMDAwMDAwQTA0MjJEMEQ4MDAwNjA3MjE5MgotOjEwMzA5MDAwMDYyMkQwRjAwMDAwMDAwQTA0MjJEMTE4MDAwNjA3MjdGQgotOjEwMzBBMDAwMDYyMkQxMzAwMDAwMDAwQTA0MjJEMTU4MDAwNjA3MkQ2NAotOjEwMzBCMDAwMDYyMkQxNzAwMDAwMDAwQTA0MjJEMTk4MDAwNjA3MzNDRQotOjEwMzBDMDAwMDYyMkQxQjAwMDAwMDAwQTA0MjJEMUQ4MDAwNjA3MzkzOAotOjEwMzBEMDAwMDYyMkQxRjAwMDAwMDAwQTA0MjJEMjE4MDAwNjA3M0ZBMQotOjEwMzBFMDAwMDYyMkQyMzAwMDAwMDAwQTA0MjJEMjU4MDAwNjA3NDUwQQotOjEwMzBGMDAwMDYyMkQyNzAwMDAwMDAwQTA0MjJEMjk4MDAwNjA3NEI3NAotOjEwMzEwMDAwMDYyMkQyQjAwMDAwMDAwQTA0MjJEMkQ4MDAwNjA3NTFERAotOjEwMzExMDAwMDYyMkQyRjAwMDAwMDAwQTA0MjJEMzE4MDAwNjA3NTc0NgotOjEwMzEyMDAwMDYyMkQzMzAwMDAwMDAwQTA0MjJEMzU4MDAwNjA3NURBRgotOjEwMzEzMDAwMDYyMkQzNzAwMDAwMDAwQTA0MjJEMzk4MDAwNjA3NjMxOQotOjEwMzE0MDAwMDYyMkQzQjAwMDAwMDAwQTA0MjJEM0Q4MDAwNjA3Njk4MwotOjEwMzE1MDAwMDYyMkQzRjAwMDAwMDAwQTA0MjJENDE4MDAwNjA3NkZFQwotOjEwMzE2MDAwMDYyMkQ0MzAwMDAwMDAwQTA0MjJENDU4MDAwNjA3NzU1NQotOjEwMzE3MDAwMDYyMkQ0NzAwMDAwMDAwQTA0MjJENDk4MDAwNjA3N0JCRgotOjEwMzE4MDAwMDYyMkQ0QjAwMDAwMDAwQTA0MjJENEQ4MDAwNjA3ODEyOQotOjEwMzE5MDAwMDYyMkQ0RjAwMDAwMDAwQTA0MjJENTE4MDAwNjA3ODc5MgotOjEwMzFBMDAwMDYyMkQ1MzAwMDAwMDAwQTA0MjJENTU4MDAwNjA3OERGQgotOjEwMzFCMDAwMDYyMkQ1NzAwMDAwMDAwQTA0MjJENTk4MDAwNjA3OTM2NQotOjEwMzFDMDAwMDYyMkQ1QjAwMDAwMDAwQTA0MjJENUQ4MDAwNjA3OTlDRgotOjEwMzFEMDAwMDYyMkQ1RjAwMDAwMDAwQTA0MjJENjE4MDAwNjA3OUYzOAotOjEwMzFFMDAwMDYyMkQ2MzAwMDAwMDAwQTA0MjJENjU4MDAwNjA3QTVBMQotOjEwMzFGMDAwMDYyMkQ2NzAwMDAwMDAwQTA0MjJENjk4MDAwNjA3QUIwQgotOjEwMzIwMDAwMDYyMkQ2QjAwMDAwMDAwQTA0MjJENkQ4MDAwNjA3QjE3NAotOjEwMzIxMDAwMDYyMkQ2RjAwMDAwMDAwQTA0MjJENzE4MDAwNjA3QjdERAotOjEwMzIyMDAwMDYyMkQ3MzAwMDAwMDAwQTA0MjJENzU4MDAwNjA3QkQ0NgotOjEwMzIzMDAwMDYyMkQ3NzAwMDAwMDAwQTA0MjJENzk4MDAwNjA3QzNCMAotOjEwMzI0MDAwMDYyMkQ3QjAwMDAwMDAwQTA0MjJEN0Q4MDAwNjA3QzkxQQotOjEwMzI1MDAwMDYyMkQ3RjAwMDAwMDAwQTA0MjJEODE4MDAwNjA3Q0Y4MwotOjEwMzI2MDAwMDYyMkQ4MzAwMDAwMDAwQTA0MjJEODU4MDAwNjA3RDVFQwotOjEwMzI3MDAwMDYyMkQ4NzAwMDAwMDAwQTA0MjJEODk4MDAwNjA3REI1NgotOjEwMzI4MDAwMDYyMkQ4QjAwMDAwMDAwQTA0MjJEOEQ4MDAwNjA3RTFDMAotOjEwMzI5MDAwMDYyMkQ4RjAwMDAwMDAwQTA0MjJEOTE4MDAwNjA3RTcyOQotOjEwMzJBMDAwMDYyMkQ5MzAwMDAwMDAwQTA0MjJEOTU4MDAwNjA3RUQ5MgotOjEwMzJCMDAwMDYyMkQ5NzAwMDAwMDAwQTA0MjJEOTk4MDAwNjA3RjNGQwotOjEwMzJDMDAwMDYyMkQ5QjAwMDAwMDAwQTA0MjJEOUQ4MDAwNjA3Rjk2NgotOjEwMzJEMDAwMDYyMkQ5RjAwMDAwMDAwQTA0MjJEQTE4MDAwNjA3RkZDRgotOjEwMzJFMDAwMDYyMkRBMzAwMDAwMDAwQTA0MjJEQTU4MDAwNjA4MDUzNwotOjEwMzJGMDAwMDYyMkRBNzAwMDAwMDAwQTA0MjJEQTk4MDAwNjA4MEJBMQotOjEwMzMwMDAwMDYyMkRBQjAwMDAwMDAwQTA0MjJEQUQ4MDAwNjA4MTEwQQotOjEwMzMxMDAwMDYyMkRBRjAwMDAwMDAwQTA0MjJEQjE4MDAwNjA4MTc3MwotOjEwMzMyMDAwMDYyMkRCMzAwMDAwMDAwQTA0MjJEQjU4MDAwNjA4MUREQwotOjEwMzMzMDAwMDYyMkRCNzAwMDAwMDAwQTA0MjJEQjk4MDAwNjA4MjM0NgotOjEwMzM0MDAwMDYyMkRCQjAwMDAwMDAwQTA0MjJEQkQ4MDAwNjA4MjlCMAotOjEwMzM1MDAwMDYyMkRCRjAwMDAwMDAwQTA0MjJEQzE4MDAwNjA4MkYxOQotOjEwMzM2MDAwMDYyMkRDMzAwMDAwMDAwQTA0MjJEQzU4MDAwNjA4MzU4MgotOjEwMzM3MDAwMDYyMkRDNzAwMDAwMDAwQTA0MjJEQzk4MDAwNjA4M0JFQwotOjEwMzM4MDAwMDYyMkRDQjAwMDAwMDAwQTA0MjJEQ0Q4MDAwNjA4NDE1NgotOjEwMzM5MDAwMDYyMkRDRjAwMDAwMDAwQTA0MjJERDE4MDAwNjA4NDdCRgotOjEwMzNBMDAwMDYyMkREMzAwMDAwMDAwQTA0MjJERDU4MDAwNjA4NEQyOAotOjEwMzNCMDAwMDYyMkRENzAwMDAwMDAwQTA0MjJERDk4MDAwNjA4NTM5MgotOjEwMzNDMDAwMDYyMkREQjAwMDAwMDAwQTA0MjJEREQ4MDAwNjA4NTlGQwotOjEwMzNEMDAwMDYyMkRERjAwMDAwMDAwQTA0MjJERTE4MDAwNjA4NUY2NQotOjEwMzNFMDAwMDYyMkRFMzAwMDAwMDAwQTA0MjJERTU4MDAwNjA4NjVDRQotOjEwMzNGMDAwMDYyMkRFNzAwMDAwMDAwQTA0MjJERTk4MDAwNjA4NkIzOAotOjEwMzQwMDAwMDYyMkRFQjAwMDAwMDAwQTA0MjJERUQ4MDAwNjA4NzFBMQotOjEwMzQxMDAwMDYyMkRFRjAwMDAwMDAwQTA0MjJERjE4MDAwNjA4NzcwQQotOjEwMzQyMDAwMDYyMkRGMzAwMDAwMDAwQTA0MjJERjU4MDAwNjA4N0Q3MwotOjEwMzQzMDAwMDYyMkRGNzAwMDAwMDAwQTA0MjJERjk4MDAwNjA4ODNERAotOjEwMzQ0MDAwMDYyMkRGQjAwMDAwMDAwQTA0MjJERkQ4MDAwNjA4ODk0NwotOjEwMzQ1MDAwMDYyMkRGRjAwMDAwMDAwQTA0MjJFMDE4MDAwNjA4OEZCMAotOjEwMzQ2MDAwMDYyMkUwMzAwMDAwMDAwQTA0MjJFMDU4MDAwNjA4OTUxOQotOjEwMzQ3MDAwMDYyMkUwNzAwMDAwMDAwQTA0MjJFMDk4MDAwNjA4OUI4MwotOjEwMzQ4MDAwMDYyMkUwQjAwMDAwMDAwQTA0MjJFMEQ4MDAwNjA4QTFFRAotOjEwMzQ5MDAwMDYyMkUwRjAwMDAwMDAwQTA0MjJFMTE4MDAwNjA4QTc1NgotOjEwMzRBMDAwMDYyMkUxMzAwMDAwMDAwQTA0MjJFMTU4MDAwNjA4QURCRgotOjEwMzRCMDAwMDYyMkUxNzAwMDAwMDAwQTA0MjJFMTk4MDAwNjA4QjMyOQotOjEwMzRDMDAwMDYyMkUxQjAwMDAwMDAwQTA0MjJFMUQ4MDAwNjA4Qjk5MwotOjEwMzREMDAwMDYyMkUxRjAwMDAwMDAwNDA2MjIxNTM4MDAwMDAwMDI3OAotOjEwMzRFMDAwMDYyMjExRTgwMDAwMDAwMjA2MjJGMzAwMDAwMDAwMDg5NgotOjEwMzRGMDAwMDIyMjExNDgwMDAwMDAwMDA2MjI1OTAwMDAwMDAwMDZDOAotOjEwMzUwMDAwMDYyMjMzMDAwMDAwMDAwMjA2MjI2MDQwMDAwMDAwMzA2NgotOjEwMzUxMDAwMDYyMkYzMjAwMDAwMDAwODAyMjIxMTRDMDAwMDAwMDBFNwotOjEwMzUyMDAwMDYyMjU5MTgwMDAwMDAwNjA2MjIzMzA4MDAwMDAwMDI5NwotOjEwMzUzMDAwMDYyMjYxMDAwMDAwMDAzMDA2MjJGMzQwMDAwMDAwMDg2RgotOjEwMzU0MDAwMDIyMjExNTAwMDAwMDAwMDA2MjI1OTMwMDAwMDAwMDYzRgotOjEwMzU1MDAwMDYyMjMzMTAwMDAwMDAwMjA2MjI2MUMwMDAwMDAwMzA4NQotOjEwMzU2MDAwMDYyMkYzNjAwMDAwMDAwODAyMjIxMTU0MDAwMDAwMDA0RgotOjEwMzU3MDAwMDYyMjU5NDgwMDAwMDAwNjA2MjIzMzE4MDAwMDAwMDIwNwotOjEwMzU4MDAwMDYyMjYyODAwMDAwMDAzMDA2MjJGMzgwMDAwMDAwMDg1RQotOjEwMzU5MDAwMDIyMjExNTgwMDAwMDAwMDA2MjI1OTYwMDAwMDAwMDZCNwotOjEwMzVBMDAwMDYyMjMzMjAwMDAwMDAwMjA2MjI2MzQwMDAwMDAwMzBBMwotOjEwMzVCMDAwMDYyMkYzQTAwMDAwMDAwODAyMjIxMTVDMDAwMDAwMDBCNwotOjEwMzVDMDAwMDYyMjU5NzgwMDAwMDAwNjA2MjIzMzI4MDAwMDAwMDI3NwotOjEwMzVEMDAwMDYyMjY0MDAwMDAwMDAzMDA2MjJGM0MwMDAwMDAwMDg0QwotOjEwMzVFMDAwMDIyMjExNjAwMDAwMDAwMDA2MjI1OTkwMDAwMDAwMDYyRgotOjEwMzVGMDAwMDYyMjMzMzAwMDAwMDAwMjA2MjI2NEMwMDAwMDAwMzBDMgotOjEwMzYwMDAwMDYyMkYzRTAwMDAwMDAwODAyMjIxMTY0MDAwMDAwMDAxRQotOjEwMzYxMDAwMDYyMjU5QTgwMDAwMDAwNjA2MjIzMzM4MDAwMDAwMDJFNgotOjEwMzYyMDAwMDYyMjY1ODAwMDAwMDAzMDAyMTYxMDAwMDAwMDAwMjgwRAotOjEwMzYzMDAwMDIxNzAwMDgwMDAwMDAwMjAyMTcwMDJDMDAwMDAwMDMxRgotOjEwMzY0MDAwMDIxNzAwM0MwMDAwMDAwNDAyMTcwMDQ0MDAwMDAwMDBDNAotOjEwMzY1MDAwMDIxNzAwNDgwMDAwMDAwMjAyMTcwMDRDMDAwMDAwOTAxMgotOjEwMzY2MDAwMDIxNzAwNTAwMDAwMDA5MDAyMTcwMDU0MDA4MDAwOTBFNAotOjEwMzY3MDAwMDIxNzAwNTgwODEwMDAwMDAyMTcwMDcwMDAwMDAwMDYzMgotOjEwMzY4MDAwMDIxNzAwNzgwMDAwMDlGRjAyMTcwMDdDMDAwMDA3NkM5OQotOjEwMzY5MDAwMDIxNzAxQzQwODEwMDAwMDAyMTcwMzQ0MDAwMDAwMDFEMwotOjEwMzZBMDAwMDIxNzA0MDAwMDAwMDA4QTAyMTcwNDA0MDAwMDAwODBEMgotOjEwMzZCMDAwMDIxNzA0MDgwMDAwMDA4MTAyMTcwNDBDMDAwMDAwODBCQgotOjEwMzZDMDAwMDIxNzA0MTAwMDAwMDA4QTAyMTcwNDE0MDAwMDAwODA5MgotOjEwMzZEMDAwMDIxNzA0MTgwMDAwMDA4MTAyMTcwNDFDMDAwMDAwODA3QgotOjEwMzZFMDAwMDIxNzA0MzAwMDAwMDA4QTAyMTcwNDM0MDAwMDAwODAzMgotOjEwMzZGMDAwMDIxNzA0MzgwMDAwMDA4MTAyMTcwNDNDMDAwMDAwODAxQgotOjEwMzcwMDAwMDIxNzA0NDAwMDAwMDA4QTAyMTcwNDQ0MDAwMDAwODBGMQotOjEwMzcxMDAwMDIxNzA0NDgwMDAwMDA4MTAyMTcwNDRDMDAwMDAwODBEQQotOjEwMzcyMDAwMDIxNzA0ODAwMDAwMDA4QTAyMTcwNDg0MDAwMDAwODA1MQotOjEwMzczMDAwMDIxNzA0ODgwMDAwMDA4MTAyMTcwNDhDMDAwMDAwODAzQQotOjEwMzc0MDAwMDIxNzAwMzgwMDdDMTAwNDAyMTcwMDA0MDAwMDAwMEY2QwotOjEwMzc1MDAwMDIxNzAxRUMwMDAwMDAwMjAyMTcwMUY0MDAwMDAwMDI1MQotOjEwMzc2MDAwMDIxNzAxRUMwMDAwMDAwMjAyMTcwMUY0MDAwMDAwMDI0MQotOjEwMzc3MDAwMDIxNzAxRUMwMDAwMDAwMjAyMTcwMUY0MDAwMDAwMDIzMQotOjEwMzc4MDAwMDIxNzAxRUMwMDAwMDAwMjAyMTcwMUY0MDAwMDAwMDIyMQotOjEwMzc5MDAwMDIxNzAxRUMwMDAwMDAwMjAyMTcwMUY0MDAwMDAwMDIxMQotOjEwMzdBMDAwMDIxNzAxRUMwMDAwMDAwMjAyMTcwMUY0MDAwMDAwMDIwMQotOjEwMzdCMDAwMDIxNzAxRUMwMDAwMDAwMjAyMTcwMUY0MDAwMDAwMDJGMQotOjEwMzdDMDAwMDIxNzAxRUMwMDAwMDAwMjAyMTcwMUY0MDAwMDAwMDJFMQotOjEwMzdEMDAwMDYxNjQwMjQwMDAwMDAwMjAyMTY0MDcwMDAwMDAwMUM4MwotOjEwMzdFMDAwMDIxNjQyMDgwMDAwMDAwMTAyMTY0MjEwMDAwMDAwMDEwQgotOjEwMzdGMDAwMDIxNjQyMjAwMDAwMDAwMTAyMTY0MjI4MDAwMDAwMDFDQgotOjEwMzgwMDAwMDIxNjQyMzAwMDAwMDAwMTAyMTY0MjM4MDAwMDAwMDE5QQotOjEwMzgxMDAwMDIxNjQyNjAwMDAwMDAwMjBDMTY0MDFDMDAwM0QwOTAwQgotOjEwMzgyMDAwMEExNjQwMUMwMDAwMDA5QzBCMTY0MDFDMDAwMDAyNzE5MAotOjEwMzgzMDAwMDIxNjQwMzAwMDAwMDAyODAyMTY0MDM0MDAwMDAwMkMyMAotOjEwMzg0MDAwMDIxNjQwMzgwMDAwMDAzMDAyMTY0MDQ0MDAwMDAwMjBGQwotOjEwMzg1MDAwMDIxNjQwMDAwMDAwMDAwMTAyMTY0MEQ4MDAwMDAwMDFERQotOjEwMzg2MDAwMDIxNjQwMDgwMDAwMDAwMTAyMTY0MDBDMDAwMDAwMDE5MgotOjEwMzg3MDAwMDIxNjQwMTAwMDAwMDAwMTAyMTY0MjQwMDAwMDAwMDA0NQotOjEwMzg4MDAwMDIxNjQyNDgwMDAwMDAwMDA2MTY0MjcwMDAwMDAwMDJDNgotOjEwMzg5MDAwMDIxNjQyNTAwMDAwMDAwMDAyMTY0MjU4MDAwMDAwMDBDQwotOjEwMzhBMDAwMDYxNjQyODAwMDAwMDAwMjAyMTY2MDA4MDAwMDEyMTQ5MgotOjEwMzhCMDAwMDIxNjYwMEMwMDAwMTIwMDAyMTY2MDEwMDAwMDEyMDRENAotOjEwMzhDMDAwMDIxNjYwMUMwMDAwRkZGRjAyMTY2MDIwMDAwMEZGRkZEMAotOjEwMzhEMDAwMDIxNjYwMjQwMDAwRkZGRjAyMTY2MDI4MDAwMEZGRkZCMAotOjEwMzhFMDAwMDIxNjYwMzgwMDAwMDAyMDAyMTY2MDNDMDAwMDAwMTA0NAotOjEwMzhGMDAwMDYxNjYwNDAwMDAwMDAwMjAyMTY2MDQ4MDAwMDAwMjMyNwotOjEwMzkwMDAwMDIxNjYwNEMwMDAwMDAyNDAyMTY2MDUwMDAwMDAwMjVFMgotOjEwMzkxMDAwMDIxNjYwNTQwMDAwMDAyNjAyMTY2MDU4MDAwMDAwMjdCRQotOjEwMzkyMDAwMDIxNjYwNUMwMDAwMDAxMTAyMTY2MDYwMDAwMDAwMDBEQQotOjEwMzkzMDAwMDIxNjYwNjQwMDAwMDAyQjAyMTY2MDY4MDAwMDAwMkM3NAotOjEwMzk0MDAwMDIxNjYwNkMwMDAwMDAyRDAyMTY2MDcwMDAwMDAwRUM5MgotOjEwMzk1MDAwMDIxNjYwNzQwMDAwMDAwMDAyMTY2MDc4MDAwMDAwMjk2MgotOjEwMzk2MDAwMDIxNjYwN0MwMDAwMDAyQTAyMTY2MDgwMDAwMDAwMkYxMgotOjEwMzk3MDAwMDYxNjYwODQwMDAwMDAwRDAyMTY2MEI4MDAwMDAwMDEwOQotOjEwMzk4MDAwMDYxNjYwQkMwMDAwMDAwODAyMTY2MERDMDAwMDAwMDFBMgotOjEwMzk5MDAwMDYxNjYwRTAwMDAwMDAwNDAyMTY2MEYwMDAwMDAwMDE1RQotOjEwMzlBMDAwMDYxNjYwRjQwMDAwMDAwMzAyMTY2MTAwMDAwMDAwMDEyQQotOjEwMzlCMDAwMDYxNjYxMDQwMDAwMDAyRDAyMTY2MUI4MDAwMDAwMDEyNwotOjEwMzlDMDAwMDYxNjYxQkMwMDAwMDAwODAyMTY2MURDMDAwMDAwMDE2MAotOjEwMzlEMDAwMDYxNjYxRTAwMDAwMDAwNDAyMTY2MUYwMDAwMDAwMDExQwotOjEwMzlFMDAwMDYxNjYxRjQwMDAwMDAwMzAyMTY2MjAwMDAwMDAwMDFFOAotOjEwMzlGMDAwMDYxNjYyMDQwMDAwMDAwRDAyMTY2MjM4MDdGRkZGRkY4MgotOjEwM0EwMDAwMDIxNjYyM0MwMDAwMDA3RjAyMTY2MjQwMDdGRkZGRkZDMwotOjEwM0ExMDAwMDIxNjYyNDQwMDAwMDAzRjAxMTY2MjQ4MDAwMDAwMDBFOAotOjEwM0EyMDAwMDExNjYyNEMwMDAwMDAwMDAxMTY2MjUwMDAwMDAwMDAwOAotOjEwM0EzMDAwMDExNjYyNTQwMDAwMDAwMDAxMTY2MjU4MDAwMDAwMDBFOAotOjEwM0E0MDAwMDExNjYyNUMwMDAwMDAwMDAxMTY2MjYwMDAwMDAwMDBDOAotOjEwM0E1MDAwMDExNjYyNjQwMDAwMDAwMDAxMTY2MjY4MDAwMDAwMDBBOAotOjEwM0E2MDAwMDExNjYyNkMwMDAwMDAwMDAxMTY2MjcwMDAwMDAwMDA4OAotOjEwM0E3MDAwMDExNjYyNzQwMDAwMDAwMDAxMTY2Mjc4MDAwMDAwMDA2OAotOjEwM0E4MDAwMDExNjYyN0MwMDAwMDAwMDAxMTY2MkQ0MDAwMDAwMDBGNAotOjEwM0E5MDAwMDIxNjYyRDgwMDAwRkZGRjAyMTY2MkRDMDAwMEZGRkY4MgotOjEwM0FBMDAwMDIxNjYyRTAwMDAwRkZGRjAyMTY2MkU0MDAwMEZGRkY2MgotOjEwM0FCMDAwMEMxNjYwMDAwMDAwMDNFODBBMTY2MDAwMDAwMDAwMDExOAotOjEwM0FDMDAwMEIxNjYwMDAwMDAwMDAwMzAyMTY4MDQwMDAwMDAwMDY5NAotOjEwM0FEMDAwMDIxNjgwNDQwMDAwMDAwNTAyMTY4MDQ4MDAwMDAwMEExQgotOjEwM0FFMDAwMDIxNjgwNEMwMDAwMDAwNTAyMTY4MDU0MDAwMDAwMDJGRgotOjEwM0FGMDAwMDIxNjgwQ0MwMDAwMDAwNDAyMTY4MEQwMDAwMDAwMDRGMgotOjEwM0IwMDAwMDIxNjgwRDQwMDAwMDAwNDAyMTY4MEQ4MDAwMDAwMDREMQotOjEwM0IxMDAwMDIxNjgwREMwMDAwMDAwNDAyMTY4MEUwMDAwMDAwMDRCMQotOjEwM0IyMDAwMDIxNjgwRTQwMDAwMDAwNDAyMTY4MEU4MDAwMDAwMDQ5MQotOjEwM0IzMDAwMDIxNjg4MDQwMDAwMDAwNjAyMTY4MDMwMDAwMDAwN0M5NwotOjEwM0I0MDAwMDIxNjgwMzQwMDAwMDAzRDAyMTY4MDM4MDAwMDAwM0Y1RAotOjEwM0I1MDAwMDIxNjgwM0MwMDAwMDA5QzAyMTZFNkU4MDAwMDYwMDBBRgotOjEwM0I2MDAwMDIxNkU2RUMwMDAwNjAwMDAyMTZFNkYwMDAwMDYwMDBCRAotOjEwM0I3MDAwMDIxNkU2RjQwMDAwNjAwMDAyMTY4MjM0MDAwMDI1RTQxQwotOjEwM0I4MDAwMDIxNjgyMzgwMDAwODAwMDAyMTY4MDk0MDAwMDI1RTNBRgotOjEwM0I5MDAwMDIxNjgxRjQwMDAwMEMwODAyMTY4MUY4MDAwMDAwNDBCMwotOjEwM0JBMDAwMDIxNjgxRkMwMDAwMDEwMDAyMTY4MjAwMDAwMDAwMjBDNQotOjEwM0JCMDAwMDIxNjgyMDQwMDAwMDAxNzAyMTY4MjA4MDAwMDAwODAyRQotOjEwM0JDMDAwMDIxNjgyMEMwMDAwMDIwMDAyMTY4MjEwMDAwMDAwMDBBMwotOjEwM0JEMDAwMDIxNjgyM0MwMDAwMDAxMzAyMTY4MjIwMDA4RjAwOEYyNAotOjEwM0JFMDAwMDIxNjgyMUMwMDhGMDA4RjAyMTY4MEYwMDAwMDAwMDc3MgotOjEwM0JGMDAwMDIxNjgyMTgwMUZGMDFGRjAyMTY4MjE0MDFGRjAxRkY2NQotOjEwM0MwMDAwMDYxNjgwRjQwMDAwMDAwMjAyMTY4MTFDMDAwMDAwMDU2OAotOjEwM0MxMDAwMDIxNjgxMjAwMDAwMDAwNTAyMTY4MTI0MDAwMDAwMDUyNAotOjEwM0MyMDAwMDIxNjgxMjgwMDAwMDAwODAyMTY4MTJDMDAwMDAwMDYwMAotOjEwM0MzMDAwMDIxNjgxMzAwMDAwMDAwNzA2MTY4MTM0MDAwMDAwMDRERgotOjEwM0M0MDAwMDIxNjgwRkMwMDAwMDAwMDA2MTY4MTQ0MDAwMDAwMDJGRAotOjEwM0M1MDAwMDIxNjgxNEMwMDAwMDAwNDAyMTY4MTUwMDAwMDAwMDE5MQotOjEwM0M2MDAwMDIxNjgxNTQwMDAwMDAwMjAyMTY4MTU4MDAwMDAwMDU2RgotOjEwM0M3MDAwMDIxNjgxNUMwMDAwMDAwNTAyMTY4MTYwMDAwMDAwMDU0QwotOjEwM0M4MDAwMDIxNjgxNjQwMDAwMDAwNTAyMTY4MTY4MDAwMDAwMDgyOQotOjEwM0M5MDAwMDIxNjgxMDAwMDAwMDAwMDAyMTY4MTZDMDAwMDAwMDY4MAotOjEwM0NBMDAwMDIxNjgxNzAwMDAwMDAwNzA2MTY4MTc0MDAwMDAwMDZFRAotOjEwM0NCMDAwMDIxNjgxOEMwMDAwMDAwNDAyMTY4MTkwMDAwMDAwMDFCMQotOjEwM0NDMDAwMDIxNjgxMDQwMDAwMDAwMDAyMTY4MTk0MDAwMDAwMDIyOAotOjEwM0NEMDAwMDIxNjgxOTgwMDAwMDAwNTAyMTY4MTlDMDAwMDAwMDU3NAotOjEwM0NFMDAwMDIxNjgxQTAwMDAwMDAwNTAyMTY4MUE0MDAwMDAwMDU1NAotOjEwM0NGMDAwMDIxNjgxQTgwMDAwMDAwODAyMTY4MUFDMDAwMDAwMDYzMAotOjEwM0QwMDAwMDIxNjgxQjAwMDAwMDAwNzA2MTY4MUI0MDAwMDAwMDIxMAotOjEwM0QxMDAwMDIxNjgxMDgwMDAwMDAwMDA2MTY4MUJDMDAwMDAwMDRBNQotOjEwM0QyMDAwMDIxNjgxQ0MwMDAwMDAwNDAyMTY4MUQwMDAwMDAwMDFDMAotOjEwM0QzMDAwMDIxNjgxRDQwMDAwMDAwMjAyMTY4MUQ4MDAwMDAwMDU5RQotOjEwM0Q0MDAwMDIxNjgxREMwMDAwMDAwNTAyMTY4MUUwMDAwMDAwMDU3QgotOjEwM0Q1MDAwMDIxNjgxMEMwMDAwMDAwNDAyMTY4MUU0MDAwMDAwMDUzOAotOjEwM0Q2MDAwMDIxNjgxRTgwMDAwMDAwODAyMTY4MUVDMDAwMDAwMDYzRgotOjEwM0Q3MDAwMDIxNjgxRjAwMDAwMDAwNzAyMTY4MTEwMDAwMDAwMDEwOQotOjEwM0Q4MDAwMDIxNjgxMTQwMDAwMDAwMjAyMTY4MTE4MDAwMDAwMDVDRQotOjEwM0Q5MDAwMDIxNjgwOUMwMDAwMDA0QzAyMTY4MEEwMDAwMDAwNEMxRgotOjEwM0RBMDAwMDYxNjgwQzQwMDAwMDAwMjAyMTY4MEE0MDAwMDAwMDA3NQotOjEwM0RCMDAwMDIxNjgwQTgwMDAwMDAwMDAyMTY4MEFDMDAwMDAwNEMzMwotOjEwM0RDMDAwMDYxNjgwQjAwMDAwMDAwNTAyMTZFNkY4MDAwMDAyMDRBNgotOjEwM0REMDAwMDIxNjgyNDAwMDNGMDAzRjAyMTY4MjQ0MDAzRjAwM0YyRgotOjEwM0RFMDAwMDYxNjgyOTAwMDAwMDAwNDAyMTY4MjQ4MDA4MDAwODBCRgotOjEwM0RGMDAwMDIxNjgyNEMwMDgwMDA4MDAyMTY4MjUwMDEwMDAxMDBGMQotOjEwM0UwMDAwMDIxNjgyNTQwMTAwMDEwMDA2MTY4MjU4MDAwMDAwMDJDQQotOjEwM0UxMDAwMDIxNjgyNjAwMDQwMDA0MDAyMTY4MjY0MDA0MDAwNDBBQQotOjEwM0UyMDAwMDIxNjgyNjgxRTAwMUUwMDAyMTY4MjZDMUUwMDFFMDAxMgotOjEwM0UzMDAwMDIxNjgyNzA0MDAwNDAwMDAyMTY4Mjc0NDAwMDQwMDA2QQotOjEwM0U0MDAwMDIxNjgyNzg4MDAwODAwMDAyMTY4MjdDODAwMDgwMDA0QQotOjEwM0U1MDAwMDIxNjgyODAyMDAwMjAwMDAyMTY4Mjg0MjAwMDIwMDBBQQotOjEwM0U2MDAwMDYxNjgyODgwMDAwMDAwMjAyMTY4MDkwMDAwMDAwNEJCNwotOjEwM0U3MDAwMDIxNjgwNjAwMDAwMDE0MDAyMTY4MDY0MDAwMDAxNDBDQwotOjEwM0U4MDAwMDYxNjgwODgwMDAwMDAwMjAyMTY4MDY4MDAwMDAwMDAwQwotOjEwM0U5MDAwMDIxNjgwNkMwMDAwMDAwMDAyMTY4MDcwMDAwMDAwQzA1NgotOjEwM0VBMDAwMDYxNjgwNzQwMDAwMDAwNTAyMTY4ODBDMDEwMTAxMDE0RAotOjEwM0VCMDAwMDIxNjg4MTAwMTAxMjAwNDAyMTY4ODE0MjAwODEwMDEzRgotOjEwM0VDMDAwMDIxNjg4MTgwMTAxMDEyMDAyMTY4ODFDMDEwMTAxMDE1NwotOjEwM0VEMDAwMDIxNjg4MjAwMTAxMjAwNDAyMTY4ODI0MjAwODEwMDFGRgotOjEwM0VFMDAwMDIxNjg4MjgwMTAxMDEyMDAyMTY4ODJDMjAwODEwMDFFMgotOjEwM0VGMDAwMDIxNjg4MzAwMTAxMDEyMDAyMTY4ODM0MDEwMTAxMDFGNwotOjEwM0YwMDAwMDIxNjg4MzgwMTAxMjAwNDAyMTY4ODNDMjAwODEwMDE5RQotOjEwM0YxMDAwMDIxNjg4NDAwMTAxMDEyMDAyMTY4ODQ0MDEwMTAxMDFCNgotOjEwM0YyMDAwMDIxNjg4NDgwMTAxMjAwNDAyMTZFNkJDMDAwMDAwMDBDOQotOjEwM0YzMDAwMDIxNkU2QzAwMDAwMDAwMjAyMTZFNkM0MDAwMDAwMDRGQgotOjEwM0Y0MDAwMDIxNkU2QzgwMDAwMDAwNjAyMTZFNzk0MDAwMDAwMDExMQotOjEwM0Y1MDAwMDIxNjgwRUMwMDAwMDBGRjAyMTQwMDAwMDAwMDAwMDFDNwotOjEwM0Y2MDAwMDIxNUMwMjQwMDAwMDAwMDAyMTVDMEVDMDAwMDAwMDE5MgotOjEwM0Y3MDAwMDIxNUMwRjAwMDAwMDAwMTA2MTVDMTAwMDAwMDAwMDI5QgotOjEwM0Y4MDAwMDIxNDAwMDQwMDAwMDAwMTAyMTQwMDA4MDAwMDAwMDFGNwotOjEwM0Y5MDAwMDIxNDAwMEMwMDAwMDAwMTAyMTQwMDMwMDAwMDAwMDFCNwotOjEwM0ZBMDAwMDIxNDAwMzQwMDAwMDAwMTAyMTQwMDQwMDAwMDAwMDE2RgotOjEwM0ZCMDAwMDIxNDAwNDQwMDAwRkZGRjA2MTQwMDA0MDAwMDAwMDM4OAotOjEwM0ZDMDAwMDIxNDAwMDAwMDAwMDAwMDA2MDI4MDAwMDAwMDIwMDAzMwotOjEwM0ZEMDAwMDIwMjAwNTgwMDAwMDAzMjAyMDIwMEEwMDMxNTAwMjA3NwotOjEwM0ZFMDAwMDIwMjAwQTQwMzE1MDAyMDAyMDIwMEE4MDEwMDAwMzAxNAotOjEwM0ZGMDAwMDIwMjAwQUMwODEwMDAwMDAyMDIwMEIwMDAwMDAwMzYwRgotOjEwNDAwMDAwMDIwMjAwQjQwMDAwMDAzMDAyMDIwMEI4MDAwMDAwMzFEQgotOjEwNDAxMDAwMDIwMjAwQkMwMDAwMDAwMjAyMDIwMEMwMDAwMDAwMDUxNQotOjEwNDAyMDAwMDIwMjAwQzQwMDAwMDAwMjAyMDIwMEM4MDAwMDAwMDJGOAotOjEwNDAzMDAwMDIwMjAwRDAwMDAwMDAwNzAyMDIwMERDMDAwMDAwMDBDNQotOjEwNDA0MDAwMDIwMjAwRTAwMDAwMDAwNTAyMDIwMEU0MDAwMDAwMDM5QwotOjEwNDA1MDAwMDIwMjAwRjAwMDAwMDAwMTAyMDIwMEZDMDAwMDAwMDY2NQotOjEwNDA2MDAwMDIwMjAxMjAwMDAwMDAwMDAyMDIwMTM0MDAwMDAwMDJGMAotOjEwNDA3MDAwMDIwMjAxQjAwMDAwMDAwMTAyMDIwMjBDMDAwMDAwMDE3NwotOjEwNDA4MDAwMDIwMjAyMTQwMDAwMDAwMTAyMDIwMjE4MDAwMDAwMDJGNQotOjEwNDA5MDAwMDIwMjA0MDQwMDAwMDAwMTAyMDIwNDBDMDAwMDAwNDBCRgotOjEwNDBBMDAwMDIwMjA0MTAwMDAwMDA0MDAyMDIwNDFDMDAwMDAwMDQ5MAotOjEwNDBCMDAwMDIwMjA0MjAwMDAwMDAyMDAyMDIwNDI0MDAwMDAwMDI4QQotOjEwNDBDMDAwMDIwMjA0MjgwMDAwMDAyMDA2MDIwNTAwMDAwMDAwMTI4MQotOjEwNDBEMDAwMDQwMjA0ODAwMDIwMDhCRjAyMDIwMDYwMDAwMDAwMEZGQwotOjEwNDBFMDAwMDIwMjAwNjQwMDAwMDAwNzAyMDIwMDY4MDAwMDAwMDBGNQotOjEwNDBGMDAwMDIwMjAwNkMwMDAwMDAwRTAyMDIwMDcwMDAwMDAwMEVDMAotOjEwNDEwMDAwMDYwMjAwNzQwMDAwMDAwMzAyMDIwMEY0MDAwMDAwMDQzNAotOjEwNDExMDAwMDIwMjAwMDQwMDAwMDAwMTAyMDIwMDA4MDAwMDAwMDE4OQotOjEwNDEyMDAwMDIwMjAwMEMwMDAwMDAwMTAyMDIwMDEwMDAwMDAwMDE2OQotOjEwNDEzMDAwMDIwMjAwMTQwMDAwMDAwMTAyMDIwMDE4MDAwMDAwMDE0OQotOjEwNDE0MDAwMDIwMjAwMUMwMDAwMDAwMTAyMDIwMDIwMDAwMDAwMDEyOQotOjEwNDE1MDAwMDIwMjAwMjQwMDAwMDAwMTAyMDIwMDI4MDAwMDAwMDEwOQotOjEwNDE2MDAwMDIwMjAwMkMwMDAwMDAwMTAyMDIwMDMwMDAwMDAwMDFFOQotOjEwNDE3MDAwMDIwMjAwMzQwMDAwMDAwMTAyMDIwMDM4MDAwMDAwMDFDOQotOjEwNDE4MDAwMDIwMjAwM0MwMDAwMDAwMTAyMDIwMDQwMDAwMDAwMDFBOQotOjEwNDE5MDAwMDIwMjAwNDQwMDAwMDAwMTAyMDIwMDQ4MDAwMDAwMDE4OQotOjEwNDFBMDAwMDIwMjAwNEMwMDAwMDAwMTAyMDIwMDUwMDAwMDAwMDE2OQotOjEwNDFCMDAwMDIwMjAxMDgwMDAwMDBDODAyMDIwMTE4MDAwMDAwMDIwQgotOjEwNDFDMDAwMDIwMjAxQzQwMDAwMDAwMDAyMDIwMUNDMDAwMDAwMDA1NQotOjEwNDFEMDAwMDIwMjAxRDQwMDAwMDAwMjAyMDIwMURDMDAwMDAwMDIyMQotOjEwNDFFMDAwMDIwMjAxRTQwMDAwMDBGRjAyMDIwMUVDMDAwMDAwRkZGNwotOjEwNDFGMDAwMDIwMjAxMDAwMDAwMDAwMDAyMDIwMTBDMDAwMDAwQzhFMQotOjEwNDIwMDAwMDIwMjAxMUMwMDAwMDAwMjAyMDIwMUM4MDAwMDAwMDBCRQotOjEwNDIxMDAwMDIwMjAxRDAwMDAwMDAwMDAyMDIwMUQ4MDAwMDAwMDJFQQotOjEwNDIyMDAwMDIwMjAxRTAwMDAwMDAwMjAyMDIwMUU4MDAwMDAwRkZCQgotOjEwNDIzMDAwMDIwMjAxRjAwMDAwMDBGRjAyMDIwMTA0MDAwMDAwMjA2MQotOjEwNDI0MDAwMDIwMjAxMDgwMDAwMDBDODAyMDIwMTE4MDAwMDAwMDI3QQotOjEwNDI1MDAwMDIwMjAxQzQwMDAwMDAwMDAyMDIwMUNDMDAwMDAwMDBDNAotOjEwNDI2MDAwMDIwMjAxRDQwMDAwMDAwMjAyMDIwMURDMDAwMDAwMDI5MAotOjEwNDI3MDAwMDIwMjAxRTQwMDAwMDBGRjAyMDIwMUVDMDAwMDAwRkY2NgotOjEwNDI4MDAwMDIwMjAxMDAwMDAwMDAxMDAyMDIwMTBDMDAwMDAwQzg0MAotOjEwNDI5MDAwMDIwMjAxMUMwMDAwMDAwMjAyMDIwMUM4MDAwMDAwMDAyRQotOjEwNDJBMDAwMDIwMjAxRDAwMDAwMDAwMDAyMDIwMUQ4MDAwMDAwMDI1QQotOjEwNDJCMDAwMDIwMjAxRTAwMDAwMDAwMjAyMDIwMUU4MDAwMDAwRkYyQgotOjEwNDJDMDAwMDIwMjAxRjAwMDAwMDBGRjAyMDIwMTA0MDAwMDAwMzBDMQotOjEwNDJEMDAwMDIwMjAxMDgwMDAwMDBDODAyMDIwMTE4MDAwMDAwMDJFQQotOjEwNDJFMDAwMDIwMjAxQzQwMDAwMDAwMDAyMDIwMUNDMDAwMDAwMDAzNAotOjEwNDJGMDAwMDIwMjAxRDQwMDAwMDAwMjAyMDIwMURDMDAwMDAwMDIwMAotOjEwNDMwMDAwMDIwMjAxRTQwMDAwMDBGRjAyMDIwMUVDMDAwMDAwRkZENQotOjEwNDMxMDAwMDIwMjAxMDAwMDAwMDA0MDAyMDIwMTBDMDAwMDAwQzg3RgotOjEwNDMyMDAwMDIwMjAxMUMwMDAwMDAwMjAyMDIwMUM4MDAwMDAwMDA5RAotOjEwNDMzMDAwMDIwMjAxRDAwMDAwMDAwMDAyMDIwMUQ4MDAwMDAwMDJDOQotOjEwNDM0MDAwMDIwMjAxRTAwMDAwMDAwMjAyMDIwMUU4MDAwMDAwRkY5QQotOjEwNDM1MDAwMDIwMjAxRjAwMDAwMDBGRjAyMDIwMTA0MDAwMDAwNjAwMAotOjEwNDM2MDAwMDIwMjAxMDgwMDAwMDBDODAyMDIwMTE4MDAwMDAwMDI1OQotOjEwNDM3MDAwMDIwMjAxQzQwMDAwMDAwMDAyMDIwMUNDMDAwMDAwMDBBMwotOjEwNDM4MDAwMDIwMjAxRDQwMDAwMDAwMjAyMDIwMURDMDAwMDAwMDI2RgotOjEwNDM5MDAwMDIwMjAxRTQwMDAwMDBGRjAyMDIwMUVDMDAwMDAwRkY0NQotOjEwNDNBMDAwMDIwMjAxMDAwMDAwMDA1MDAyMDIwMTBDMDAwMDAwQzhERgotOjEwNDNCMDAwMDIwMjAxMUMwMDAwMDAwMjAyMDIwMUM4MDAwMDAwMDAwRAotOjEwNDNDMDAwMDIwMjAxRDAwMDAwMDAwMDAyMDIwMUQ4MDAwMDAwMDIzOQotOjEwNDNEMDAwMDIwMjAxRTAwMDAwMDAwMjAyMDIwMUU4MDAwMDAwRkYwQQotOjEwNDNFMDAwMDIwMjAxRjAwMDAwMDBGRjAyMDIwMTA0MDAwMDAwNzA2MAotOjEwNDNGMDAwMDcyODA0MDAwMEI1MDAwMDA4MjgwN0I4MDAwOTA4REZGNgotOjEwNDQwMDAwMDcyQzAwMDAyOEMzMDAwMDA3MkM4MDAwMzY3MjBBMzFGOAotOjEwNDQxMDAwMDcyRDAwMDAzNUI2MTdDRTA3MkQ4MDAwM0IwMDI1M0M0OAotOjEwNDQyMDAwMDcyRTAwMDAzNjZEMzNGRDA3MkU4MDAwMUFBODQxOTkzMwotOjEwNDQzMDAwMDgyRUJGMjAyODFDMDhFMTAxMjgwMDAwMDAwMDAwMDAxMQotOjEwNDQ0MDAwMDEyODAwMDQwMDAwMDAwMDAxMjgwMDA4MDAwMDAwMDAwRQotOjEwNDQ1MDAwMDEyODAwMEMwMDAwMDAwMDAxMjgwMDEwMDAwMDAwMDBFRQotOjEwNDQ2MDAwMDEyODAwMTQwMDAwMDAwMDAyMjgwMDIwMDAwMDAwMDFDNAotOjEwNDQ3MDAwMDIyODAwMjQwMDAwMDAwMjAyMjgwMDI4MDAwMDAwMDM5NwotOjEwNDQ4MDAwMDIyODAwMkMwMDAwMDAwMDAyMjgwMDMwMDAwMDAwMDQ3OAotOjEwNDQ5MDAwMDIyODAwMzQwMDAwMDAwMTAyMjgwMDM4MDAwMDAwMDA1QgotOjEwNDRBMDAwMDIyODAwM0MwMDAwMDAwMTAyMjgwMDQwMDAwMDAwMDQzNwotOjEwNDRCMDAwMDIyODAwNDQwMDAwMDAwMDAyMjgwMDQ4MDAwMDAwMDExQgotOjEwNDRDMDAwMDIyODAwNEMwMDAwMDAwMzAyMjgwMDUwMDAwMDAwMDBGOQotOjEwNDREMDAwMDIyODAwNTQwMDAwMDAwMTAyMjgwMDU4MDAwMDAwMDRENwotOjEwNDRFMDAwMDIyODAwNUMwMDAwMDAwMDAyMjgwMDYwMDAwMDAwMDFCQgotOjEwNDRGMDAwMDIyODAwNjQwMDAwMDAwMzAyMjgwMDY4MDAwMDAwMDA5OQotOjEwNDUwMDAwMDIyODAwNkMwMDAwMDAwMTAyMjgwMDcwMDAwMDAwMDQ3NgotOjEwNDUxMDAwMDIyODAwNzQwMDAwMDAwMDAyMjgwMDc4MDAwMDAwMDQ1NwotOjEwNDUyMDAwMDIyODAwN0MwMDAwMDAwMzA2MjgwMDgwMDAwMDAwMDIzMgotOjEwNDUzMDAwMDIyODAwQTQwMDAwN0ZGRjAyMjgwMEE4MDAwMDAzRkY1QgotOjEwNDU0MDAwMDIyODAyMjQwMDAwMDAwMDAyMjgwMjM0MDAwMDAwMDBCQgotOjEwNDU1MDAwMDIyODAyNEMwMDAwMDAwMDAyMjgwMkU0MDAwMEZGRkZENQotOjEwNDU2MDAwMDYyODIwMDAwMDAwMDgwMDAyMkI4QkMwMDAwMDAwMDE3QwotOjEwNDU3MDAwMDIyQjgwMDAwMDAwMDAwMDAyMkI4MDQwMDAwMDAwMTg4OQotOjEwNDU4MDAwMDIyQjgwODAwMDAwMDAwQzAyMkI4MEMwMDAwMDAwNjYxRgotOjEwNDU5MDAwMEMyQjgzMDAwMDA4NjQ3MDBBMkI4MzAwMDAwMDAxNTc3NQotOjEwNDVBMDAwMEIyQjgzMDAwMDAwMDU1RjBBMkI4MzQwMDAwMDAwMDBGNgotOjEwNDVCMDAwMEMyQjgzNDAwMDAwMDIyNjBCMkI4MzQwMDAwMDAwMDFERgotOjEwNDVDMDAwMDIyQjgzODAwMDA4NjQ3MDAyMkI4M0MwMDAwMDAyMjY0NwotOjEwNDVEMDAwMDIyQjE0ODAwMDAwMDAwMTBBMkIxNDgwMDAwMDAwMDA1MAotOjEwNDVFMDAwMDIyQjk0NDAwMDAwMDAwMTA2MkI5NDQ4MDAwMDAwMDJCQQotOjEwNDVGMDAwMDYyQTlBNzAwMDAwMDAwNDA0MkE5QTgwMDAwNDA4RTM0NgotOjEwNDYwMDAwMDYyQTlBOTAwMDAwMDAwMjA0MkE5QTk4MDAwMjA4RTdGRAotOjEwNDYxMDAwMDYyQTkwMDAwMDAwMDA0ODA2MkEyMDA4MDAwMDAwQzg3MgotOjEwNDYyMDAwMDYyQTIwMDAwMDAwMDAwMjA2MkE5MTI4MDAwMDAwODZDOQotOjEwNDYzMDAwMDYyQUMwMDAwMDAwMDEyMDA2MkE5MzQ4MDAwMDAwMDM1QgotOjEwNDY0MDAwMDQyQTkzNTQwMDAxMDhFOTA2MkE5RkIwMDAwMDAwMDJFMgotOjEwNDY1MDAwMDQyQTk0MTgwMDAyMDhFQTA0MkE5Q0QwMDAwMTA4RUNGRAotOjEwNDY2MDAwMDYyQTlDRDQwMDAwMDAxMTA0MkE5RDIwMDA4RjA4RUQyQQotOjEwNDY3MDAwMDYyQTlGNUMwMDAwMDAwNTA0MkEzMDAwMDAwMjA5N0MyNQotOjEwNDY4MDAwMDYyQTMwMDgwMDAwMDEwMDA2MkE0MDQwMDAwMDAwMTAwMQotOjEwNDY5MDAwMDQyQTQwMDAwMDEwMDk3RTA0MkE4NDA4MDAwMjA5OEVDMgotOjEwNDZBMDAwMDQyQUNGNDAwMDA0MDk5MDA0MkFDRjYwMDAwMjA5OTQzNAotOjEwNDZCMDAwMDYyQTlGQTAwMDAwMDAwNDA2MkE2MDAwMDAwMDA1NDBCMgotOjEwNDZDMDAwMDYyQTlEMTgwMDAwMDAwMjA2MkFCMDAwMDAwMDAwNTBEMwotOjEwNDZEMDAwMDYyQUJCNzAwMDAwMDA3MDA2MkFCQjY4MDAwMDAwMDJCQQotOjEwNDZFMDAwMDYyQUI5NDgwMDAwMDAwNDA2MkFEMDAwMDAwMDA4MDA4RAotOjEwNDZGMDAwMDYyQUM0ODAwMDAwMDE1MDA2MkE5NDIwMDAwMDAwMzJERgotOjEwNDcwMDAwMDYyQTUwMjAwMDAwMDAwMjA2MkE1MDMwMDAwMDAwMDI1NQotOjEwNDcxMDAwMDYyQTUwMDAwMDAwMDAwMjA2MkE1MDEwMDAwMDAwMDI4NQotOjEwNDcyMDAwMDIyQTUyMDgwMDAwMDAwMTA0MkE5QUEwMDAwMjA5OTZGOQotOjEwNDczMDAwMDYyQTk1QjAwMDAwMDAyMjA0MkE5NjM4MDAwMTA5OTg0NAotOjEwNDc0MDAwMDYyQTk2M0MwMDAwMDAwMzA2MkE5NkUwMDAwMDAwMjI5QwotOjEwNDc1MDAwMDQyQTk3NjgwMDAxMDk5OTA2MkE5NzZDMDAwMDAwMDM1MwotOjEwNDc2MDAwMDYyQTk4MTAwMDAwMDAyMjA0MkE5ODk4MDAwMTA5OUE0RAotOjEwNDc3MDAwMDYyQTk4OUMwMDAwMDAwMzA2MkE5OTQwMDAwMDAwMjJBNwotOjEwNDc4MDAwMDQyQTk5QzgwMDAxMDk5QjA2MkE5OUNDMDAwMDAwMDM1RAotOjEwNDc5MDAwMDYyQUJCNTgwMDAwMDAwMjA2MkFDOUMwMDAwMDAxNTBDQQotOjEwNDdBMDAwMDYyQTk0RTgwMDAwMDAzMjA2MkE1MDI4MDAwMDAwMDI4MQotOjEwNDdCMDAwMDYyQTUwMzgwMDAwMDAwMjA2MkE1MDA4MDAwMDAwMDJCNQotOjEwNDdDMDAwMDYyQTUwMTgwMDAwMDAwMjAyMkE1MjBDMDAwMDAwMDFDNAotOjEwNDdEMDAwMDQyQTlBQTgwMDAyMDk5QzA2MkE5NjQ4MDAwMDAwMjI5MgotOjEwNDdFMDAwMDQyQTk2RDAwMDAxMDk5RTA2MkE5NkQ0MDAwMDAwMDNGMAotOjEwNDdGMDAwMDYyQTk3NzgwMDAwMDAyMjA0MkE5ODAwMDAwMTA5OUZFOQotOjEwNDgwMDAwMDYyQTk4MDQwMDAwMDAwMzA2MkE5OEE4MDAwMDAwMjI0NwotOjEwNDgxMDAwMDQyQTk5MzAwMDAxMDlBMDA2MkE5OTM0MDAwMDAwMDNGNwotOjEwNDgyMDAwMDYyQTk5RDgwMDAwMDAyMjA0MkE5QTYwMDAwMTA5QTFGMgotOjEwNDgzMDAwMDYyQTlBNjQwMDAwMDAwMzA2MkFCQjYwMDAwMDAwMDJGQQotOjEwNDg0MDAwMDIyQUNGMDAwMDAwMDAwMDA0MkE5QUIwMDAxMDA5QTIzQQotOjEwNDg1MDAwMDYyQTUwNDgwMDAwMDAwRTAyMkFDRjA0MDAwMDAwMDA4MwotOjEwNDg2MDAwMDQyQTlBRjAwMDEwMDlCMjA2MkE1MDgwMDAwMDAwMEVCNwotOjEwNDg3MDAwMDIyQUNGMDgwMDAwMDAwMDA0MkE5QjMwMDAxMDA5QzI2MQotOjEwNDg4MDAwMDYyQTUwQjgwMDAwMDAwRTAyMkFDRjBDMDAwMDAwMDBEQgotOjEwNDg5MDAwMDQyQTlCNzAwMDEwMDlEMjA2MkE1MEYwMDAwMDAwMEU3NgotOjEwNDhBMDAwMDIyQUNGMTAwMDAwMDAwMDA0MkE5QkIwMDAxMDA5RTI4OQotOjEwNDhCMDAwMDYyQTUxMjgwMDAwMDAwRTAyMkFDRjE0MDAwMDAwMDAzMgotOjEwNDhDMDAwMDQyQTlCRjAwMDEwMDlGMjA2MkE1MTYwMDAwMDAwMEUzNQotOjEwNDhEMDAwMDIyQUNGMTgwMDAwMDAwMDA0MkE5QzMwMDAxMDBBMDJBRgotOjEwNDhFMDAwMDYyQTUxOTgwMDAwMDAwRTAyMkFDRjFDMDAwMDAwMDA4QQotOjEwNDhGMDAwMDQyQTlDNzAwMDEwMEExMjA2MkE1MUQwMDAwMDAwMEVGMwotOjEwNDkwMDAwMDIxMDEwMDgwMDAwMDAwMTAyMTAxMDUwMDAwMDAwMDEwOQotOjEwNDkxMDAwMDIxMDEwMDAwMDAzRDAwMDAyMTAxMDA0MDAwMDAwM0QzRgotOjEwNDkyMDAwMDkxMDE4MDAwMjAwMEEyMjA5MTAxMTAwMDAxMDBDMjJDMAotOjEwNDkzMDAwMDYxMDExNDAwMDAwMDAwODA5MTAxMTYwMDAxMDBDMzIzMAotOjEwNDk0MDAwMDYxMDExQTAwMDAwMDAxODA2MTAyNDAwMDAwMDAwRTA2RQotOjEwNDk1MDAwMDIxMDIwMUMwMDAwMDAwMDAyMTAyMDIwMDAwMDAwMDFCNgotOjEwNDk2MDAwMDIxMDIwQzAwMDAwMDAwMjAyMTAyMDA0MDAwMDAwMDExQwotOjEwNDk3MDAwMDIxMDIwMDgwMDAwMDAwMTAyMTAzMEQ4MDAwMDAwMDFFMQotOjEwNDk4MDAwMDkxMDNDMDAwMDA1MEM0MjA5MTAzODAwMDAwNTBDNDdENgotOjEwNDk5MDAwMDkxMDM5MjAwMDA1MEM0QzA5MTAzQjAwMDAwNTBDNTE5MgotOjEwNDlBMDAwMDYxMDRDMDAwMDAwMDEwMDAyMTA0MDI4MDAwMDAwMTAxQQotOjEwNDlCMDAwMDIxMDQwNDQwMDAwM0ZGRjAyMTA0MDU4MDAyODAwMDA1MQotOjEwNDlDMDAwMDIxMDQwODQwMDg0OTI0QTAyMTA0MDU4MDAwMDAwMDAwNwotOjEwNDlEMDAwMDIxMDQxMzgwMDAwMDAwMTAyMTA0MTM4MDAwMDAwMDFCRgotOjEwNDlFMDAwMDIxMDQxMzgwMDAwMDAwMTAyMTA0MTM4MDAwMDAwMDFBRgotOjEwNDlGMDAwMDIxMDQxMzgwMDAwMDAwMTAyMTA0MTM4MDAwMDAwMDE5RgotOjEwNEEwMDAwMDIxMDQxMzgwMDAwMDAwMTAyMTA0MTM4MDAwMDAwMDE4RQotOjEwNEExMDAwMDIxMjA0OTAwMUY2ODA0MDAyMTIwNTE0MDAwMDNDMTBCRQotOjEwNEEyMDAwMDIxMjA0OTRGRkZGRkZGRjAyMTIwNDk4RkZGRkZGRkYzMgotOjEwNEEzMDAwMDIxMjA0OUNGRkZGRkZGRjAyMTIwNEEwRkZGRkZGRkYxMgotOjEwNEE0MDAwMDIxMjA0QTRGRkZGRkZGRjAyMTIwNEE4RkZGRkZGRkZGMgotOjEwNEE1MDAwMDIxMjA0QUNGRkZGRkZGRjAyMTIwNEIwRkZGRkZGRkZEMgotOjEwNEE2MDAwMDIxMjA0QjhGRkZGRkZGRjAyMTIwNEJDRkZGRkZGRkZBQQotOjEwNEE3MDAwMDIxMjA0QzBGRkZGRkZGRjAyMTIwNEM0RkZGRkZGRkY4QQotOjEwNEE4MDAwMDIxMjA0QzhGRkZGRkZGRjAyMTIwNENDRkZGRkZGRkY2QQotOjEwNEE5MDAwMDIxMjA0RDBGRkZGRkZGRjAyMTIwNEQ4RkZGRkZGRkY0NgotOjEwNEFBMDAwMDIxMjA0RENGRkZGRkZGRjAyMTIwNEUwRkZGRkZGRkYyMgotOjEwNEFCMDAwMDIxMjA0RTRGRkZGRkZGRjAyMTIwNEU4RkZGRkZGRkYwMgotOjEwNEFDMDAwMDIxMjA0RUNGRkZGRkZGRjAyMTIwNEYwRkZGRkZGRkZFMgotOjEwNEFEMDAwMDIxMjA0RjRGRkZGRkZGRjAyMTIwNEY4RkZGRkZGRkZDMgotOjEwNEFFMDAwMDIxMjA0RkNGRkZGRkZGRjAyMTIwNTAwRkZGRkZGRkZBMQotOjEwNEFGMDAwMDIxMjA1MDRGRkZGRkZGRjAyMTIwNTA4RkZGRkZGRkY4MAotOjEwNEIwMDAwMDIxMjA1MENGRkZGRkZGRjAyMTIwNTEwRkZGRkZGRkY1RgotOjEwNEIxMDAwMDIxMjA0RDRGODAwQzAwMDAyMTIwNEI0RjAwMDUwMDBFNQotOjEwNEIyMDAwMDIxMjAzOTAwMDAwMDAwODAyMTIwMzlDMDAwMDAwMDgxQgotOjEwNEIzMDAwMDIxMjAzQTAwMDAwMDAwODAyMTIwM0E0MDAwMDAwMDJGOQotOjEwNEI0MDAwMDIxMjAzQkMwMDAwMDAwNDAyMTIwM0MwMDAwMDAwMDVCMgotOjEwNEI1MDAwMDIxMjAzQzQwMDAwMDAwNDAyMTIwM0QwMDAwMDAwMDA4RgotOjEwNEI2MDAwMDIxMjAzNkMwMDAwMDAwMTAyMTIwMUJDMDAwMDAwNDBCMAotOjEwNEI3MDAwMDIxMjAxQzAwMDAwMTgwODAyMTIwMUM0MDAwMDA4MDM1QwotOjEwNEI4MDAwMDIxMjAxQzgwMDAwMDgwMzAyMTIwMUNDMDAwMDAwNDAxQwotOjEwNEI5MDAwMDIxMjAxRDAwMDAwMDAwMzAyMTIwMUQ0MDAwMDA4MDMzOQotOjEwNEJBMDAwMDIxMjAxRDgwMDAwMDgwMzAyMTIwMURDMDAwMDA4MDMxMQotOjEwNEJCMDAwMDIxMjAxRTAwMDAxMDAwMzAyMTIwMUU0MDAwMDA4MDNGOAotOjEwNEJDMDAwMDIxMjAxRTgwMDAwMDgwMzAyMTIwMUVDMDAwMDAwMDNEOQotOjEwNEJEMDAwMDIxMjAxRjAwMDAwMDAwMzAyMTIwMUY0MDAwMDAwMDNDMQotOjEwNEJFMDAwMDIxMjAxRjgwMDAwMDAwMzAyMTIwMUZDMDAwMDAwMDNBMQotOjEwNEJGMDAwMDIxMjAyMDAwMDAwMDAwMzAyMTIwMjA0MDAwMDAwMDM3RgotOjEwNEMwMDAwMDIxMjAyMDgwMDAwMDAwMzAyMTIwMjBDMDAwMDAwMDM1RQotOjEwNEMxMDAwMDIxMjAyMTAwMDAwMDAwMzAyMTIwMjE0MDAwMDAwMDMzRQotOjEwNEMyMDAwMDIxMjAyMTgwMDAwMDAwMzAyMTIwMjFDMDAwMDAwMDMxRQotOjEwNEMzMDAwMDIxMjAyMjAwMDAwMDAwMzAyMTIwMjI0MDAwMDAwMDNGRQotOjEwNEM0MDAwMDIxMjAyMjgwMDAwMjQwMzAyMTIwMjJDMDAwMDAwMkY4RQotOjEwNEM1MDAwMDIxMjAyMzAwMDAwMDAwOTAyMTIwMjM0MDAwMDAwMTlBMgotOjEwNEM2MDAwMDIxMjAyMzgwMDAwMDE4NDAyMTIwMjNDMDAwMDAxODM5QgotOjEwNEM3MDAwMDIxMjAyNDAwMDAwMDMwNjAyMTIwMjQ0MDAwMDAwMTk2MgotOjEwNEM4MDAwMDIxMjAyNDgwMDAwMDAwNjAyMTIwMjRDMDAwMDAzMDY1NQotOjEwNEM5MDAwMDIxMjAyNTAwMDAwMDMwNjAyMTIwMjU0MDAwMDAzMDYzMgotOjEwNENBMDAwMDIxMjAyNTgwMDAwMEM4NjAyMTIwMjVDMDAwMDAzMDY4OQotOjEwNENCMDAwMDIxMjAyNjAwMDAwMDMwNjAyMTIwMjY0MDAwMDAwMDZGNQotOjEwNENDMDAwMDIxMjAyNjgwMDAwMDAwNjAyMTIwMjZDMDAwMDAwMDZEOAotOjEwNENEMDAwMDIxMjAyNzAwMDAwMDAwNjAyMTIwMjc0MDAwMDAwMDZCOAotOjEwNENFMDAwMDIxMjAyNzgwMDAwMDAwNjAyMTIwMjdDMDAwMDAwMDY5OAotOjEwNENGMDAwMDIxMjAyODAwMDAwMDAwNjAyMTIwMjg0MDAwMDAwMDY3OAotOjEwNEQwMDAwMDIxMjAyODgwMDAwMDAwNjAyMTIwMjhDMDAwMDAwMDY1NwotOjEwNEQxMDAwMDIxMjAyOTAwMDAwMDAwNjAyMTIwMjk0MDAwMDAwMDYzNwotOjEwNEQyMDAwMDIxMjAyOTgwMDAwMDAwNjAyMTIwMjlDMDAwMDAwMDYxNwotOjEwNEQzMDAwMDIxMjAyQTAwMDAwMDMwNjAyMTIwMkE0MDAwMDAwMTNFNwotOjEwNEQ0MDAwMDIxMjAyQTgwMDAwMDAwNjAyMTIwMkIwMDAwMDEwMDRDNQotOjEwNEQ1MDAwMDIxMjAyQjQwMDAwMTAwNDAyMTIwMzI0MDAxMDY0NDA4NgotOjEwNEQ2MDAwMDIxMjAzMjgwMDEwNjQ0MDAyMTIwNUI0MDAwMDAwMDE4MgotOjEwNEQ3MDAwMDIxMjA1RjgwMDAwMDA0MDAyMTIwNUZDMDAwMDAwMTlCNAotOjEwNEQ4MDAwMDIxMjA2MDAwMDAwMDAwMTAyMTIwNjZDMDAwMDAwMDE4MQotOjEwNEQ5MDAwMDIxMjAxQjAwMDAwMDAwMTAyMTIwN0Q4MDAwMDAwMDM1NwotOjEwNERBMDAwMDIxMjA3RDgwMDAwMDAwMzAyMTIwN0Q4MDAwMDAwMDMxNwotOjEwNERCMDAwMDIxMjA3RDgwMDAwMDAwMzAyMTIwN0Q4MDAwMDAwMDMwNwotOjEwNERDMDAwMDIxMjA3RDgwMDAwMDAwMzAyMTIwN0Q4MDAwMDAwMDNGNwotOjEwNEREMDAwMDIxMjA3RDgwMDAwMDAwMzA2MDBBMDAwMDAwMDAwMEMyQgotOjEwNERFMDAwMDIwMEEwNTAwMDAwMDAwMDAyMDBBMDU0MDAwMDAwMDBEQgotOjEwNERGMDAwMDIwMEEwRUM1NTU0MDAwMDAyMDBBMEYwNTU1NTU1NTU5NgotOjEwNEUwMDAwMDIwMEEwRjQwMDAwNTU1NTAyMDBBMEY4RjAwMDAwMDBEOAotOjEwNEUxMDAwMDIwMEEwRkM1NTU0MDAwMDAyMDBBMTAwNTU1NTU1NTU1NAotOjEwNEUyMDAwMDIwMEExMDQwMDAwNTU1NTAyMDBBMTA4RjAwMDAwMDA5NgotOjEwNEUzMDAwMDIwMEExOUMwMDAwMDAwMDAyMDBBMUEwMDAwMTAwMDBFRgotOjEwNEU0MDAwMDIwMEExQTQwMDAwNTAxNDAyMDBBMUE4MDAwMDAwMDA2QwotOjEwNEU1MDAwMDIwMEE2QTgwMDAwMDAwMDAyMDBBNkFDMDAwMDAwMDBBRQotOjEwNEU2MDAwMDIwMEE2RDAwMDAwMDAwMDAyMDBBNDVDMDAwMDBDMDBCQwotOjEwNEU3MDAwMDIwMEE2MUMwMDAwMDAwMzAyMDBBMDcwRkZGNTVGRkYwNwotOjEwNEU4MDAwMDIwMEEwNzQwMDAwRkZGRjAyMDBBMDc4RjAwMDAzRTAyMQotOjEwNEU5MDAwMDIwMEEwN0MwMDAwMDAwMDAyMDBBMDgwMDAwMEEwMDAzMgotOjEwNEVBMDAwMDYwMEEwODQwMDAwMDAwNTAyMDBBMDk4MEZFMDAwMDBBQQotOjEwNEVCMDAwMDYwMEEwOUMwMDAwMDAwNzAyMDBBMEI4MDAwMDA0MDA0QgotOjEwNEVDMDAwMDYwMEEwQkMwMDAwMDAwMzAyMDBBMEM4MDAwMDEwMDAwMwotOjEwNEVEMDAwMDYwMEEwQ0MwMDAwMDAwMzAyMDBBMEQ4MDAwMDQwMDBBMwotOjEwNEVFMDAwMDYwMEEwREMwMDAwMDAwMzAyMDBBMEU4MDAwMTAwMDBCMgotOjEwNEVGMDAwMDYwMEEyMkMwMDAwMDAwNDAyMDBBNjg4MDAwMDAwRkNBRQotOjEwNEYwMDAwMDYwMEE2OEMwMDAwMDAwNzAyMDBBNkY0MDAwMDAwMDBDNgotOjEwNEYxMDAwMDIwMEExMENGRjVDMDAwMDAyMDBBMTEwRkZGNTVGRkY4MgotOjEwNEYyMDAwMDIwMEExMTQwMDAwRkZGRjAyMDBBMTE4RjAwMDAzRTAzRQotOjEwNEYzMDAwMDIwMEExMUMwMDAwMDAwMDAyMDBBMTIwMDAwMEEwMDA0RgotOjEwNEY0MDAwMDYwMEExMjQwMDAwMDAwNTAyMDBBMTM4MEZFMDAwMDBDNwotOjEwNEY1MDAwMDYwMEExM0MwMDAwMDAwNzAyMDBBMTU4MDAwMDA4MDA2NAotOjEwNEY2MDAwMDYwMEExNUMwMDAwMDAwMzAyMDBBMTY4MDAwMDIwMDAxMAotOjEwNEY3MDAwMDYwMEExNkMwMDAwMDAwMzAyMDBBMTc4MDAwMDgwMDA4MAotOjEwNEY4MDAwMDYwMEExN0MwMDAwMDAwMzAyMDBBMTg4MDAwMjAwMDBDRQotOjEwNEY5MDAwMDYwMEEyM0MwMDAwMDAwNDAyMDBBNkIwMDAwMDAwRkNENQotOjEwNEZBMDAwMDYwMEE2QjQwMDAwMDAwNzAyMDBBNkY4MDAwMDAwMDBGQQotOjEwNEZCMDAwMDIwMEEwMzAwMDAwMDAwMDAyMDBBMDM0MDAwMDAwMDA0OQotOjEwNEZDMDAwMDIwMEEwMzgwMDAwMDAwMDAyMDBBMDNDMDAwMDAwMDAyOQotOjEwNEZEMDAwMDIwMEEwNDAwMDAwMDAwMDAyMDBBMDQ0MDAwMDAwMDAwOQotOjEwNEZFMDAwMDIwMEEwNDgwMDAwMDAwMDAyMDBBMDRDMDAwMDAwMDBFOQotOjEwNEZGMDAwMDIwMDkwQzQwMDAwRTAwMDAyMDA5MENDMDAwMEYzMDAyQQotOjEwNTAwMDAwMDIwMDkwRDQwMDAwMDAwMzAyMDA5MUEwMDAwMDAwMDEwMwotOjEwNTAxMDAwMDYwMDkxNzAwMDAwMDAwMzAyMDA5MEVDMDAwMDYwMDBBOAotOjEwNTAyMDAwMDIwMDkwRjQwMDAwNzMwMDAyMDA5MEZDMDAwMDAwMDNGNgotOjEwNTAzMDAwMDIwMDkxQTgwMDAwMDAwMTA2MDA5MTg4MDAwMDAwMDMxMgotOjEwNTA0MDAwMDIwMDkxMDAwMDAwNDAwMDAyMDA5MTA4MDAwMDUzMDA5RgotOjEwNTA1MDAwMDIwMDkxMTAwMDAwMDAwNDAyMDA5MUFDMDAwMDAwMDE2OQotOjEwNTA2MDAwMDYwMDkxOTQwMDAwMDAwMjAyMDA5MTlDMDAwMDAwMDFFMwotOjEwNTA3MDAwMDIwMDkwRDgwMDAwNjAwMDAyMDA5MEUwMDAwMDczMDA4MQotOjEwNTA4MDAwMDIwMDkwRTgwMDAwMDAwMzAyMDA5MUE0MDAwMDAwMDE2QgotOjEwNTA5MDAwMDIwMDkxN0MwMDAwMDAwMTAyMDA5MTgwMDAwMDAwMDFFQwotOjEwNTBBMDAwMDIwMDkxODQwMDAwMDAwMDAyMDA5MTI4MDAwMDAzMDAyQgotOjEwNTBCMDAwMDIwMDkxNkMwMDAzRjAwODAyMDA5MTJDMDAwMDAzMDAzNAotOjEwNTBDMDAwMDIwMDkxMzAwMDAwMDMwMDAyMDA5MTM0MDAwMDAzMDA1MAotOjEwNTBEMDAwMDIwMDkxMzgwMDAwMDMwMDAyMDA5MTNDMDAwMDAzMDAzMAotOjEwNTBFMDAwMDIwMDkxNDAwMDAwMDMwMDAyMDA5NDJDMDAwMDAwMDEyNwotOjEwNTBGMDAwMDIwMDk0MzAwMDAwMDAwMTAyMDA5NDM0MDAwMDAwMDExRQotOjEwNTEwMDAwMDIwMDk0MkMwMDAwMDAwMTAyMDA5NDMwMDAwMDAwMDExNQotOjEwNTExMDAwMDIwMDk0MzQwMDAwMDAwMTAyMDA5NDJDMDAwMDAwMDEwMQotOjEwNTEyMDAwMDIwMDk0MzAwMDAwMDAwMTAyMDA5NDM0MDAwMDAwMDFFRAotOjEwNTEzMDAwMDIwMDk0MkMwMDAwMDAwMTAyMDA5NDMwMDAwMDAwMDFFNQotOjEwNTE0MDAwMDIwMDk0MzQwMDAwMDAwMTAyMDA5NDJDMDAwMDAwMDFEMQotOjEwNTE1MDAwMDIwMDk0MzAwMDAwMDAwMTAyMDA5NDM0MDAwMDAwMDFCRAotOjEwNTE2MDAwMDIwMDk0MkMwMDAwMDAwMTAyMDA5NDMwMDAwMDAwMDFCNQotOjEwNTE3MDAwMDIwMDk0MzQwMDAwMDAwMTAyMDA5NDJDMDAwMDAwMDFBMQotOjEwNTE4MDAwMDIwMDk0MzAwMDAwMDAwMTAyMDA5NDM0MDAwMDAwMDE4RAotOjEwNTE5MDAwMDIwMDk0MkMwMDAwMDAwMTAyMDA5NDMwMDAwMDAwMDE4NQotOjEwNTFBMDAwMDIwMDk0MzQwMDAwMDAwMTAyMTMwMDNDMDAwMDYxQThEQQotOjEwNTFCMDAwMDYxMzAxMDgwMDAwMDAwMzAyMTMwMTA0MDAwMDAwMDBCMAotOjEwNTFDMDAwMDIxMzAxMzQwMDAwMDAwMDA2MTMwMTA4MDAwMDAwMDM3MAotOjEwNTFEMDAwMDIxMzAxMDQwMDAwMDAwMDAyMTMwMTM0MDAwMDAwMDA2QgotOjEwNTFFMDAwMDYxMzAxMDgwMDAwMDAwMzAyMTMwMTA0MDAwMDAwMDA4MAotOjEwNTFGMDAwMDIxMzAxMzQwMDAwMDAwMDA2MTMwMTA4MDAwMDAwMDM0MAotOjEwNTIwMDAwMDIxMzAxMDQwMDAwMDAwMDAyMTMwMTM0MDAwMDAwMDAzQQotOjEwNTIxMDAwMDYxMzAxMDgwMDAwMDAwMzAyMTMwMTA0MDAwMDAwMDA0RgotOjEwNTIyMDAwMDIxMzAxMzQwMDAwMDAwMDA2MTMwMTA4MDAwMDAwMDMwRgotOjEwNTIzMDAwMDIxMzAxMDQwMDAwMDAwMDAyMTMwMTM0MDAwMDAwMDAwQQotOjEwNTI0MDAwMDYxMzAxMDgwMDAwMDAwMzAyMTMwMTA0MDAwMDAwMDAxRgotOjEwNTI1MDAwMDIxMzAxMzQwMDAwMDAwMDA2MTMwMTA4MDAwMDAwMDNERgotOjEwNTI2MDAwMDIxMzAxMDQwMDAwMDAwMDAyMTMwMTM0MDAwMDAwMDBEQQotOjEwNTI3MDAwMDIxMTAwQjgwMDAwMDAwMTAyMTZFNkU4MDAwMDIwMDA1QwotOjEwNTI4MDAwMDIxNkU2RUMwMDAwMjAwMDAyMTZFNkYwMDAwMDY1NTU2QwotOjEwNTI5MDAwMDIxNkU2RjQwMDAwNjU1NTAyMTY4MTUwMDAwMDAwMDA3OQotOjEwNTJBMDAwMDIxNjgxNzQwMDAwMDAwMTAyMTY4MTc4MDAwMDAwMDFERQotOjEwNTJCMDAwMDIxNjgxN0MwMDAwMDAwMTAyMTY4MTgwMDAwMDAwMDFCRQotOjEwNTJDMDAwMDIxNjgxODQwMDAwMDAwMTAyMTY4MTg4MDAwMDAwMDE5RQotOjEwNTJEMDAwMDIxNjgxQjQwMDAwMDAwMTAyMTY4MUI4MDAwMDAwMDEyRQotOjEwNTJFMDAwMDIxNjgxQkMwMDAwMDAwMTAyMTY4MUMwMDAwMDAwMDEwRQotOjEwNTJGMDAwMDIxNjgxQzQwMDAwMDAwMTAyMTY4MUM4MDAwMDAwMDFFRQotOjEwNTMwMDAwMDIxNjgxMTAwMDAwMDAwMDAyMTY4MjQwMDBCRjAwQkY5QwotOjEwNTMxMDAwMDYxNjgyNDQwMDAwMDAwMjAyMTY4MjRDMDBCRjAwQkY0NQotOjEwNTMyMDAwMDIxNkU2QzQwMDAwMDAwMTAyMTZFNkM4MDAwMDAwMDNGMQotOjEwNTMzMDAwMDIxNkU3OTQwMDAwMDAwMDA0MkFDRjQwMDAwQTBDNTYzMQotOjEwNTM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM0MDAwMDAwMDAyOQotOjEwNTM1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RAotOjEwNTM2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRAotOjEwNTM3MDAwMDAwMDAwMDAwMDM0MDAzNTAwMDAwMDAwMDAwMDAwMDBDNAotOjEwNTM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRAotOjEwNTM5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRAotOjEwNTNBMDAwMDAzNTAwNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2OAotOjEwNTNCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRAotOjEwNTNDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MDAwOTFFQwotOjEwNTNEMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTEwMDk1MDA5NTAwOTk3OQotOjEwNTNFMDAwMDA5OTAwOUQwMDlEMDBBMTAwQTEwMEE1MDBBNTAwQTlCNQotOjEwNTNGMDAwMDBBOTAwQUQwMEFEMDBCMTAwQjEwMEI1MDAwMDAwMDA5MwotOjEwNTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QwotOjEwNTQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QwotOjEwNTQyMDAwMDAwMDAwMDAwMEI1MDMxMDAzMTAwMzFBMDMxQTAzMjQ0MAotOjEwNTQzMDAwMDMyNDAzMkIwMzJCMDMzMjAzMzIwMzM5MDMzOTAzNDBDNAotOjEwNTQ0MDAwMDM0MDAzNDcwMzQ3MDM0RTAzNEUwMzU1MDM1NTAzNUNENAotOjEwNTQ1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QwotOjEwNTQ2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQwotOjEwNTQ3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQwotOjEwNTQ4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQwotOjEwNTQ5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQwotOjEwNTRBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQwotOjEwNTRCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQwotOjEwNTRDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQwotOjEwNTREMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQwotOjEwNTRFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQwotOjEwNTRGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQwotOjEwNTUwMDAwMDM1QzAzNUQwMDAwMDAwMDAwMDAwMDAwMDM1RDAzNUUxQgotOjEwNTUxMDAwMDM1RTAzNUYwMzVGMDM2MDAzNjAwMzYxMDM2MTAzNjI3MwotOjEwNTUyMDAwMDM2MjAzNjMwMzYzMDM2NDAzNjQwMzY1MDAwMDAwMDAxNAotOjEwNTUzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QgotOjEwNTU0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QgotOjEwNTU1MDAwMDAwMDAwMDAwMDAwMDAwMDAzNjUwMzZDMDM2QzAzNzg4QQotOjEwNTU2MDAwMDM3ODAzODQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOQotOjEwNTU3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQgotOjEwNTU4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQgotOjEwNTU5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQgotOjEwNTVBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQgotOjEwNTVCMDAwMDM4NDAzODUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQwotOjEwNTVDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQgotOjEwNTVEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM4NTAzQjA5MAotOjEwNTVFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQgotOjEwNTVGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQgotOjEwNTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQjAwM0RGMDAwMDAwMDAwNQotOjEwNTYxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QQotOjEwNTYyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QQotOjEwNTYzMDAwMDAwMDAwMDAwM0RGMDQwRTAwMDAwMDAwMDAwMDAwMDA3NgotOjEwNTY0MDAwMDQwRTA0MTUwNDE1MDQxQzA0MUMwNDIzMDQyMzA0MkE1QQotOjEwNTY1MDAwMDQyQTA0MzEwNDMxMDQzODA0MzgwNDNGMDQzRjA0NDY2QQotOjEwNTY2MDAwMDQ0NjA0NzkwMDAwMDAwMDAwMDAwMDAwMDQ3OTA0N0Q3NQotOjEwNTY3MDAwMDQ3RDA0ODEwNDgxMDQ4NTA0ODUwNDg5MDQ4OTA0OERFMgotOjEwNTY4MDAwMDQ4RDA0OTEwNDkxMDQ5NTA0OTUwNDk5MDQ5OTA0RTgwNwotOjEwNTY5MDAwMDRFODA0RkUwNEZFMDUxNDA1MTQwNTE2MDUxNjA1MTg5NQotOjEwNTZBMDAwMDUxODA1MUEwNTFBMDUxQzA1MUMwNTFFMDUxRTA1MjBGMgotOjEwNTZCMDAwMDUyMDA1MjIwNTIyMDUyNDA1MjQwNjkwMDAwMDAwMDA4RgotOjEwNTZDMDAwMDAwMDAwMDAwNjkwMDY5NTA2OTUwNjlBMDY5QTA2OUYyOQotOjEwNTZEMDAwMDY5RjA2QTQwNkE0MDZBOTA2QTkwNkFFMDZBRTA2QjM1MgotOjEwNTZFMDAwMDZCMzA2QjgwNkI4MDZCOTAwMDAwMDAwMDAwMDAwMDBDNgotOjEwNTZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQQotOjEwNTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5OQotOjEwNTcxMDAwMDZCOTA2REQwMDAwMDAwMDAwMDAwMDAwMDZERDA2REYxRgotOjEwNTcyMDAwMDZERjA2RTEwNkUxMDZFMzA2RTMwNkU1MDZFNTA2RTczMQotOjEwNTczMDAwMDZFNzA2RTkwNkU5MDZFQjA2RUIwNkVEMDZFRDA3MDJDRAotOjEwNTc0MDAwMDcwMjA3MDUwNzA1MDcwODAwMDAwMDAwMDAwMDAwMDAyOQotOjEwNTc1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OQotOjEwNTc2MDAwMDAwMDAwMDAwMDAwMDAwMDA3MDgwNzRDMDAwMDAwMDBENwotOjEwNTc3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOQotOjEwNTc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxOQotOjEwNTc5MDAwMDAwMDAwMDAwNzRDMDdERTAwMDAwMDAwMDAwMDAwMDBEMQotOjEwNTdBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGOQotOjEwNTdCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFOQotOjEwNTdDMDAwMDdERTA3RUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQotOjEwNTdEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDOQotOjEwNTdFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdFQzA4Mjk5NQotOjEwNTdGMDAwMDAwMDAwMDAwMDAwMDAwMDA4MjkwODMyMDgzMjA4M0JDMQotOjEwNTgwMDAwMDgzQjA4NDQwODQ0MDg0RDA4NEQwODU2MDg1NjA4NUZGMAotOjEwNTgxMDAwMDg1RjA4NjgwODY4MDg3MTA4NzEwOEQxMDhEMTA4RTZBRgotOjEwNTgyMDAwMDhFNjA4RkIwOEZCMDhGRTA4RkUwOTAxMDkwMTA5MDQ1NwotOjEwNTgzMDAwMDkwNDA5MDcwOTA3MDkwQTA5MEEwOTBEMDkwRDA5MTBEMAotOjEwNTg0MDAwMDkxMDA5MTMwOTEzMDkxQzAwMDAwMDAwMDAwMDAwMDBFMgotOjEwNTg1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OAotOjEwNTg2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOAotOjEwNTg3MDAwMDkxQzA5MjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEOAotOjEwNTg4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxOAotOjEwNTg5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkyMjA5MjdBRAotOjEwNThBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGOAotOjEwNThCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFOAotOjEwNThDMDAwMDAwMDAwMDAwMDAwMDAwMDA5MjcwOTJEMDAwMDAwMDA3MgotOjEwNThEMDAwMDAwMDAwMDAwOTJEMDkyRTA5MkUwOTJGMDkyRjA5MzA3QgotOjEwNThFMDAwMDkzMDA5MzEwOTMxMDkzMjA5MzIwOTMzMDkzMzA5MzRFMAotOjEwNThGMDAwMDkzNDA5MzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRAotOjEwNTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NwotOjEwNTkxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NwotOjEwNTkyMDAwMDkzNTA5QTYwMDAwMDAwMDAwMDAwMDAwMDlBNjA5QTcyQgotOjEwNTkzMDAwMDlBNzA5QTgwOUE4MDlBOTA5QTkwOUFBMDlBQTA5QUJENwotOjEwNTk0MDAwMDlBQjA5QUMwOUFDMDlBRDA5QUQwOUFFMDlBRTA5QzI5NAotOjEwNTk1MDAwMDlDMjA5RDUwOUQ1MDlFOTA5RTkwOUVBMDlFQTA5RUIwMgotOjEwNTk2MDAwMDlFQjA5RUMwOUVDMDlFRDA5RUQwOUVFMDlFRTA5RUY4NwotOjEwNTk3MDAwMDlFRjA5RjAwOUYwMDlGMTA5RjEwQTEwMDAwMDAwMDAyRgotOjEwNTk4MDAwMDAwMDAwMDAwQTEwMEExMzBBMTMwQTE2MEExNjBBMTk2MAotOjEwNTk5MDAwMEExOTBBMUMwQTFDMEExRjBBMUYwQTIyMEEyMjBBMjVCRgotOjEwNTlBMDAwMEEyNTBBMjgwQTI4MEEyOTAwMDAwMDAwMDAwMDAwMDAzMQotOjEwNTlCMDAwMEEyOTBBMkMwQTJDMEEyRjBBMkYwQTMyMEEzMjBBMzUxRgotOjEwNTlDMDAwMEEzNTBBMzgwQTM4MEEzQjBBM0IwQTNFMEEzRTBBNDFBRgotOjEwNTlEMDAwMEE0MTBBNDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMAotOjEwNTlFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNwotOjEwNTlGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE0MjBBNUFGNwotOjEwNUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NgotOjEwNUExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NgotOjEwNUEyMDAwMDAwMDAwMDAwMDAwMDAwMDBBNUEwQTVCMDAwMDAwMDBBRAotOjEwNUEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NgotOjEwNUE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NgotOjEwNUE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMjA3MDAzQwotOjEwNUE2MDAwMDAwMzBFMDAwMDA0MTUwMDAwMDUxQzAwMDAwNjIzMDBDMgotOjEwNUE3MDAwMDAwNzJBMDAwMDA4MzEwMDAwMDkzODAwMDAwQTNGMDAzMgotOjEwNUE4MDAwMDAwQjQ2MDAwMDBDNEQwMDAwMEQ1NDAwMDAwRTVCMDBBMgotOjEwNUE5MDAwMDAwRjYyMDAwMDEwNjkwMDAwMTE3MDAwMDAxMjc3MDAxMgotOjEwNUFBMDAwMDAxMzdFMDAwMDE0ODUwMDAwMTU4QzAwMDAxNjkzMDA4MgotOjEwNUFCMDAwMDAxNzlBMDAwMDE4QTEwMDAwMTlBODAwMDAxQUFGMDBGMgotOjEwNUFDMDAwMDAxQkI2MDAwMDFDQkQwMDAwMURDNDAwMDAxRUNCMDA2MgotOjEwNUFEMDAwMDAxRkQyMDAwMDAwRDkwMDAwMDAyMDAwMDAwMDQwMDA5QwotOjEwNUFFMDAwMDAwMDYwMDAwMDAwODAwMDAwMDBBMDAwMDAwMEMwMDA3NgotOjEwNUFGMDAwMDAwMEUwMDAwMDAxMDAwMDAwMDEyMDAwMDAwMTQwMDA2MwotOjEwNUIwMDAwMDAwMTYwMDAwMDAxODAwMDAwMDFBMDAwMDAwMUMwMDA1MQotOjEwNUIxMDAwMDAwMUUwMDAwMDAyMDAwMDAwMDIyMDAwMDAwMjQwMDAzRQotOjEwNUIyMDAwMDAwMjYwMDAwMDAyODAwMDAwMDJBMDAwMDAwMkMwMDAyRAotOjEwNUIzMDAwMDAwMkUwMDAwMDAzMDAwMDAwMDMyMDAwMDAwMzQwMDAxQQotOjEwNUI0MDAwMDAwMzYwMDAwMDAzODAwMDAwMDNBMDAwMDAwM0MwMDAwOQotOjEwNUI1MDAwMDAwM0UwMDAwMDA0MDAwMDAwMDQyMDAwMDAwNDQwMDBGNgotOjEwNUI2MDAwMDAwNDYwMDAwMDA0ODAwMDAwMDRBMDAwMDAwNEMwMDBFNQotOjEwNUI3MDAwMDAwNEUwMDAwMDA1MDAwMDAwMDUyMDAwMDAwNTQwMDBEMgotOjEwNUI4MDAwMDAwNTYwMDAwMDA1ODAwMDAwMDVBMDAwMDAwNUMwMDBDMQotOjEwNUI5MDAwMDAwNUUwMDAwMDA2MDAwMDAwMDYyMDAwMDAwNjQwMDBBRQotOjEwNUJBMDAwMDAwNjYwMDAwMDA2ODAwMDAwMDZBMDAwMDAwNkMwMDA5RAotOjEwNUJCMDAwMDAwNkUwMDAwMDA3MDAwMDAwMDcyMDAwMDAwNzQwMDA4QQotOjEwNUJDMDAwMDAwNzYwMDAwMDA3ODAwMDAwMDdBMDAwMDAwN0MwMDA3OQotOjEwNUJEMDAwMDAwN0UwMDAwMDA4MDAwMDAwMDgyMDAwMDAwODQwMDA2NgotOjEwNUJFMDAwMDAwODYwMDAwMDA4ODAwMDAwMDhBMDAwMDAwOEMwMDA1NQotOjEwNUJGMDAwMDAwOEUwMDAwMDA5MDAwMDAwMDkyMDAwMDAwOTQwMDA0MgotOjEwNUMwMDAwMDAwOTYwMDAwMDA5ODAwMDAwMDlBMDAwMDAwOUMwMDAzMAotOjEwNUMxMDAwMDAwOUUwMDAwMDBBMDAwMDAwMEEyMDAwMDAwQTQwMDAxRAotOjEwNUMyMDAwMDAwQTYwMDAwMDBBODAwMDAwMEFBMDAwMDAwQUMwMDAwQwotOjEwNUMzMDAwMDAwQUUwMDAwMDBCMDAwMDAwMEIyMDAwMDAwQjQwMDBGOQotOjEwNUM0MDAwMDAwQjYwMDAwMDBCODAwMDAwMEJBMDAwMDAwQkMwMDBFOAotOjEwNUM1MDAwMDAwQkUwMDAwMDBDMDAwMDAwMEMyMDAwMDAwQzQwMDBENQotOjEwNUM2MDAwMDAwQzYwMDAwMDBDODAwMDAwMENBMDAwMDAwQ0MwMDBDNAotOjEwNUM3MDAwMDAwQ0UwMDAwMDBEMDAwMDAwMEQyMDAwMDAwRDQwMDBCMQotOjEwNUM4MDAwMDAwRDYwMDAwMDBEODAwMDAwMERBMDAwMDAwREMwMDBBMAotOjEwNUM5MDAwMDAwREUwMDAwMDBFMDAwMDAwMEUyMDAwMDAwRTQwMDA4RAotOjEwNUNBMDAwMDAwRTYwMDAwMDBFODAwMDAwMEVBMDAwMDAwRUMwMDA3QwotOjEwNUNCMDAwMDAwRUUwMDAwMDBGMDAwMDAwMEYyMDAwMDAwRjQwMDA2OQotOjEwNUNDMDAwMDAwRjYwMDAwMDBGODAwMDAwMEZBMDAwMDAwRkMwMDA1OAotOjEwNUNEMDAwMDAwRkUwMDAwMDEwMDAwMDAwMTAyMDAwMDAxMDQwMDA0NQotOjEwNUNFMDAwMDAxMDYwMDAwMDEwODAwMDAwMTBBMDAwMDAxMEMwMDAzNAotOjEwNUNGMDAwMDAxMEUwMDAwMDExMDAwMDAwMTEyMDAwMDAxMTQwMDAyMQotOjEwNUQwMDAwMDAxMTYwMDAwMDExODAwMDAwMTFBMDAwMDAxMUMwMDAwRgotOjEwNUQxMDAwMDAxMUUwMDAwMDEyMDAwMDAwMTIyMDAwMDAxMjQwMDBGQwotOjEwNUQyMDAwMDAxMjYwMDAwMDEyODAwMDAwMTJBMDAwMDAxMkMwMDBFQgotOjEwNUQzMDAwMDAxMkUwMDAwMDEzMDAwMDAwMTMyMDAwMDAxMzQwMDBEOAotOjEwNUQ0MDAwMDAxMzYwMDAwMDEzODAwMDAwMTNBMDAwMDAxM0MwMDBDNwotOjEwNUQ1MDAwMDAxM0UwMDAwMDE0MDAwMDAwMTQyMDAwMDAxNDQwMDBCNAotOjEwNUQ2MDAwMDAxNDYwMDAwMDE0ODAwMDAwMTRBMDAwMDAxNEMwMDBBMwotOjEwNUQ3MDAwMDAxNEUwMDAwMDE1MDAwMDAwMTUyMDAwMDAxNTQwMDA5MAotOjEwNUQ4MDAwMDAxNTYwMDAwMDE1ODAwMDAwMTVBMDAwMDAxNUMwMDA3RgotOjEwNUQ5MDAwMDAxNUUwMDAwMDE2MDAwMDAwMTYyMDAwMDAxNjQwMDA2QwotOjEwNURBMDAwMDAxNjYwMDAwMDE2ODAwMDAwMTZBMDAwMDAxNkMwMDA1QgotOjEwNURCMDAwMDAxNkUwMDAwMDE3MDAwMDAwMTcyMDAwMDAxNzQwMDA0OAotOjEwNURDMDAwMDAxNzYwMDAwMDE3ODAwMDAwMTdBMDAwMDAxN0MwMDAzNwotOjEwNUREMDAwMDAxN0UwMDAwMDE4MDAwMDAwMTgyMDAwMDAxODQwMDAyNAotOjEwNURFMDAwMDAxODYwMDAwMDE4ODAwMDAwMThBMDAwMDAxOEMwMDAxMwotOjEwNURGMDAwMDAxOEUwMDAwMDE5MDAwMDAwMTkyMDAwMDAxOTQwMDAwMAotOjEwNUUwMDAwMDAxOTYwMDAwMDE5ODAwMDAwMTlBMDAwMDAxOUMwMDBFRQotOjEwNUUxMDAwMDAxOUUwMDAwMDFBMDAwMDAwMUEyMDAwMDAxQTQwMDBEQgotOjEwNUUyMDAwMDAxQTYwMDAwMDFBODAwMDAwMUFBMDAwMDAxQUMwMDBDQQotOjEwNUUzMDAwMDAxQUUwMDAwMDFCMDAwMDAwMUIyMDAwMDAxQjQwMDBCNwotOjEwNUU0MDAwMDAxQjYwMDAwMDFCODAwMDAwMUJBMDAwMDAxQkMwMDBBNgotOjEwNUU1MDAwMDAxQkUwMDAwMDFDMDAwMDAwMUMyMDAwMDAxQzQwMDA5MwotOjEwNUU2MDAwMDAxQzYwMDAwMDFDODAwMDAwMUNBMDAwMDAxQ0MwMDA4MgotOjEwNUU3MDAwMDAxQ0UwMDAwMDFEMDAwMDAwMUQyMDAwMDAxRDQwMDA2RgotOjEwNUU4MDAwMDAxRDYwMDAwMDFEODAwMDAwMURBMDAwMDAxREMwMDA1RQotOjEwNUU5MDAwMDAxREUwMDAwMDFFMDAwMDAwMUUyMDAwMDAxRTQwMDA0QgotOjEwNUVBMDAwMDAxRTYwMDAwMDFFODAwMDAwMUVBMDAwMDAxRUMwMDAzQQotOjEwNUVCMDAwMDAxRUUwMDAwMDFGMDAwMDAwMUYyMDAwMDAxRjQwMDAyNwotOjEwNUVDMDAwMDAxRjYwMDAwMDFGODAwMDAwMUZBMDAwMDAxRkMwMDAxNgotOjEwNUVEMDAwMDAxRkUwMDAwMDIwMDAwMDAwMjAyMDAwMDAyMDQwMDAwMwotOjEwNUVFMDAwMDAyMDYwMDAwMDIwODAwMDAwMjBBMDAwMDAyMEMwMDBGMgotOjEwNUVGMDAwMDAyMEUwMDAwMDIxMDAwMDAwMjEyMDAwMDAyMTQwMDBERgotOjEwNUYwMDAwMDAyMTYwMDAwMDIxODAwMDAwMjFBMDAwMDAyMUMwMDBDRAotOjEwNUYxMDAwMDAyMUUwMDAwMDIyMDAwMDAwMjIyMDAwMDAyMjQwMDBCQQotOjEwNUYyMDAwMDAyMjYwMDAwMDIyODAwMDAwMjJBMDAwMDAyMkMwMDBBOQotOjEwNUYzMDAwMDAyMkUwMDAwMDIzMDAwMDAwMjMyMDAwMDAyMzQwMDA5NgotOjEwNUY0MDAwMDAyMzYwMDAwMDIzODAwMDAwMjNBMDAwMDAyM0MwMDA4NQotOjEwNUY1MDAwMDAyM0UwMDAwMDI0MDAwMDAwMjQyMDAwMDAyNDQwMDA3MgotOjEwNUY2MDAwMDAyNDYwMDAwMDI0ODAwMDAwMjRBMDAwMDAyNEMwMDA2MQotOjEwNUY3MDAwMDAyNEUwMDAwMDI1MDAwMDAwMjUyMDAwMDAyNTQwMDA0RQotOjEwNUY4MDAwMDAyNTYwMDAwMDI1ODAwMDAwMjVBMDAwMDAyNUMwMDAzRAotOjEwNUY5MDAwMDAyNUUwMDAwMDI2MDAwMDAwMjYyMDAwMDAyNjQwMDAyQQotOjEwNUZBMDAwMDAyNjYwMDAwMDI2ODAwMDAwMjZBMDAwMDAyNkMwMDAxOQotOjEwNUZCMDAwMDAyNkUwMDAwMDI3MDAwMDAwMjcyMDAwMDAyNzQwMDAwNgotOjEwNUZDMDAwMDAyNzYwMDAwMDI3ODAwMDAwMjdBMDAwMDAyN0MwMDBGNQotOjEwNUZEMDAwMDAyN0UwMDAwMDI4MDAwMDAwMjgyMDAwMDAyODQwMDBFMgotOjEwNUZFMDAwMDAyODYwMDAwMDI4ODAwMDAwMjhBMDAwMDAyOEMwMDBEMQotOjEwNUZGMDAwMDAyOEUwMDAwMDI5MDAwMDAwMjkyMDAwMDAyOTQwMDBCRQotOjEwNjAwMDAwMDAyOTYwMDAwMDI5ODAwMDAwMjlBMDAwMDAyOUMwMDBBQwotOjEwNjAxMDAwMDAyOUUwMDAwMDJBMDAwMDAwMkEyMDAwMDAyQTQwMDA5OQotOjEwNjAyMDAwMDAyQTYwMDAwMDJBODAwMDAwMkFBMDAwMDAyQUMwMDA4OAotOjEwNjAzMDAwMDAyQUUwMDAwMDJCMDAwMDAwMkIyMDAwMDAyQjQwMDA3NQotOjEwNjA0MDAwMDAyQjYwMDAwMDJCODAwMDAwMkJBMDAwMDAyQkMwMDA2NAotOjEwNjA1MDAwMDAyQkUwMDAwMDJDMDAwMDAwMkMyMDAwMDAyQzQwMDA1MQotOjEwNjA2MDAwMDAyQzYwMDAwMDJDODAwMDAwMkNBMDAwMDAyQ0MwMDA0MAotOjEwNjA3MDAwMDAyQ0UwMDAwMDJEMDAwMDAwMkQyMDAwMDAyRDQwMDAyRAotOjEwNjA4MDAwMDAyRDYwMDAwMDJEODAwMDAwMkRBMDAwMDAyREMwMDAxQwotOjEwNjA5MDAwMDAyREUwMDAwMDJFMDAwMDAwMkUyMDAwMDAyRTQwMDAwOQotOjEwNjBBMDAwMDAyRTYwMDAwMDJFODAwMDAwMkVBMDAwMDAyRUMwMDBGOAotOjEwNjBCMDAwMDAyRUUwMDAwMDJGMDAwMDAwMkYyMDAwMDAyRjQwMDBFNQotOjEwNjBDMDAwMDAyRjYwMDAwMDJGODAwMDAwMkZBMDAwMDAyRkMwMDBENAotOjEwNjBEMDAwMDAyRkUwMDAwMDMwMDAwMDAwMzAyMDAwMDAzMDQwMDBDMQotOjEwNjBFMDAwMDAzMDYwMDAwMDMwODAwMDAwMzBBMDAwMDAzMEMwMDBCMAotOjEwNjBGMDAwMDAzMEUwMDAwMDMxMDAwMDAwMzEyMDAwMDAzMTQwMDA5RAotOjEwNjEwMDAwMDAzMTYwMDAwMDMxODAwMDAwMzFBMDAwMDAzMUMwMDA4QgotOjEwNjExMDAwMDAzMUUwMDAwMDMyMDAwMDAwMzIyMDAwMDAzMjQwMDA3OAotOjEwNjEyMDAwMDAzMjYwMDAwMDMyODAwMDAwMzJBMDAwMDAzMkMwMDA2NwotOjEwNjEzMDAwMDAzMkUwMDAwMDMzMDAwMDAwMzMyMDAwMDAzMzQwMDA1NAotOjEwNjE0MDAwMDAzMzYwMDAwMDMzODAwMDAwMzNBMDAwMDAzM0MwMDA0MwotOjEwNjE1MDAwMDAzM0UwMDAwMDM0MDAwMDAwMzQyMDAwMDAzNDQwMDAzMAotOjEwNjE2MDAwMDAzNDYwMDAwMDM0ODAwMDAwMzRBMDAwMDAzNEMwMDAxRgotOjEwNjE3MDAwMDAzNEUwMDAwMDM1MDAwMDAwMzUyMDAwMDAzNTQwMDAwQwotOjEwNjE4MDAwMDAzNTYwMDAwMDM1ODAwMDAwMzVBMDAwMDAzNUMwMDBGQgotOjEwNjE5MDAwMDAzNUUwMDAwMDM2MDAwMDAwMzYyMDAwMDAzNjQwMDBFOAotOjEwNjFBMDAwMDAzNjYwMDAwMDM2ODAwMDAwMzZBMDAwMDAzNkMwMDBENwotOjEwNjFCMDAwMDAzNkUwMDAwMDM3MDAwMDAwMzcyMDAwMDAzNzQwMDBDNAotOjEwNjFDMDAwMDAzNzYwMDAwMDM3ODAwMDAwMzdBMDAwMDAzN0MwMDBCMwotOjEwNjFEMDAwMDAzN0UwMDAwMDM4MDAwMDAwMzgyMDAwMDAzODQwMDBBMAotOjEwNjFFMDAwMDAzODYwMDAwMDM4ODAwMDAwMzhBMDAwMDAzOEMwMDA4RgotOjEwNjFGMDAwMDAzOEUwMDAwMDM5MDAwMDAwMzkyMDAwMDAzOTQwMDA3QwotOjEwNjIwMDAwMDAzOTYwMDAwMDM5ODAwMDAwMzlBMDAwMDAzOUMwMDA2QQotOjEwNjIxMDAwMDAzOUUwMDAwMDNBMDAwMDAwM0EyMDAwMDAzQTQwMDA1NwotOjEwNjIyMDAwMDAzQTYwMDAwMDNBODAwMDAwM0FBMDAwMDAzQUMwMDA0NgotOjEwNjIzMDAwMDAzQUUwMDAwMDNCMDAwMDAwM0IyMDAwMDAzQjQwMDAzMwotOjEwNjI0MDAwMDAzQjYwMDAwMDNCODAwMDAwM0JBMDAwMDAzQkMwMDAyMgotOjEwNjI1MDAwMDAzQkUwMDAwMDNDMDAwMDAwM0MyMDAwMDAzQzQwMDAwRgotOjEwNjI2MDAwMDAzQzYwMDAwMDNDODAwMDAwM0NBMDAwMDAzQ0MwMDBGRQotOjEwNjI3MDAwMDAzQ0UwMDAwMDNEMDAwMDAwM0QyMDAwMDAzRDQwMDBFQgotOjEwNjI4MDAwMDAzRDYwMDAwMDNEODAwMDAwM0RBMDAwMDAzREMwMDBEQQotOjEwNjI5MDAwMDAzREUwMDAwMDNFMDAwMDAwM0UyMDAwMDAzRTQwMDBDNwotOjEwNjJBMDAwMDAzRTYwMDAwMDNFODAwMDAwM0VBMDAwMDAzRUMwMDBCNgotOjEwNjJCMDAwMDAzRUUwMDAwMDNGMDAwMDAwM0YyMDAwMDAzRjQwMDBBMwotOjEwNjJDMDAwMDAzRjYwMDAwMDNGODAwMDAwM0ZBMDAwMDAzRkMwMDA5MgotOjEwNjJEMDAwMDAzRkUwMDAwMDNGRTAwMTAwMDAwMDAwMDAwMDAxRkY3RgotOjEwNjJFMDAwMDAwMDAyMDAwMDAwN0ZGODAwMDA3RkY4MDAwMDBBOTQyMAotOjEwNjJGMDAwMDAwMDE1MDAwMDAwMDAwMTAwMDBGRjAwMDAwMDAwMDA4OQotOjEwNjMwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDA4RgotOjEwNjMxMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDA3RgotOjEwNjMyMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDA2RgotOjEwNjMzMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDA1RgotOjEwNjM0MDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDA0RgotOjEwNjM1MDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAzRgotOjEwNjM2MDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAyRgotOjEwNjM3MDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAxRgotOjEwNjM4MDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwRgotOjEwNjM5MDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDBGRgotOjEwNjNBMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDBFRgotOjEwNjNCMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDBERgotOjEwNjNDMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDBDRgotOjEwNjNEMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDBCRgotOjEwNjNFMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDBBRgotOjEwNjNGMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDA5RgotOjEwNjQwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDA4RQotOjEwNjQxMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDA3RQotOjEwNjQyMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDA2RQotOjEwNjQzMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDA1RQotOjEwNjQ0MDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDA0RQotOjEwNjQ1MDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAzRQotOjEwNjQ2MDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAyRQotOjEwNjQ3MDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAxRQotOjEwNjQ4MDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwRQotOjEwNjQ5MDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDBGRQotOjEwNjRBMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDBFRQotOjEwNjRCMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDBERQotOjEwNjRDMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDBDRQotOjEwNjREMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDBCRQotOjEwNjRFMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDBBRQotOjEwNjRGMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDA5RQotOjEwNjUwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDA4RAotOjEwNjUxMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDA3RAotOjEwNjUyMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDA2RAotOjEwNjUzMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDAwMDAwMTQwQUZGMDAzRgotOjEwNjU0MDAwMDAwMDAwMDEwMDAwMDAwMDAwMjAxMDAxMDAwMDAwMDAxOQotOjEwNjU1MDAwMDEwMDkwMDAwMDAwMDEwMDAwMDA5MDAyMDAwMDkwMDQ4MwotOjEwNjU2MDAwMDAwMDkwMDYwMDAwOTAwODAwMDA5MDBBMDAwMDkwMENDNwotOjEwNjU3MDAwMDAwMDkwMEUwMDAwOTAxMDAwMDA5MDEyMDAwMDkwMTQ5NwotOjEwNjU4MDAwMDAwMDkwMTYwMDAwOTAxODAwMDA5MDFBMDAwMDkwMUM2NwotOjEwNjU5MDAwMDAwMDkwMUUwMDAwOTAyMDAwMDA5MDIyMDAwMDkwMjQzNwotOjEwNjVBMDAwMDAwMDkwMjYwMDAwOTAyODAwMDA5MDJBMDAwMDkwMkMwNwotOjEwNjVCMDAwMDAwMDkwMkUwMDAwOTAzMDAwMDA5MDMyMDAwMDkwMzRENwotOjEwNjVDMDAwMDAwMDkwMzYwMDAwOTAzODAwMDA5MDNBMDAwMDkwM0NBNwotOjEwNjVEMDAwMDAwMDkwM0UwMDAwOTA0MDAwMDA5MDQyMDAwMDkwNDQ3NwotOjEwNjVFMDAwMDAwMDkwNDYwMDAwOTA0ODAwMDA5MDRBMDAwMDkwNEM0NwotOjEwNjVGMDAwMDAwMDkwNEUwMDAwOTA1MDAwMDA5MDUyMDAwMDkwNTQxNwotOjEwNjYwMDAwMDAwMDkwNTYwMDAwOTA1ODAwMDA5MDVBMDAwMDkwNUNFNgotOjEwNjYxMDAwMDAwMDkwNUUwMDAwOTA2MDAwMDA5MDYyMDAwMDkwNjRCNgotOjEwNjYyMDAwMDAwMDkwNjYwMDAwOTA2ODAwMDA5MDZBMDAwMDkwNkM4NgotOjEwNjYzMDAwMDAwMDkwNkUwMDAwOTA3MDAwMDA5MDcyMDAwMDkwNzQ1NgotOjEwNjY0MDAwMDAwMDkwNzYwMDAwOTA3ODAwMDA5MDdBMDAwMDkwN0MyNgotOjEwNjY1MDAwMDAwMDkwN0UwMDAwOTA4MDAwMDA5MDgyMDAwMDkwODRGNgotOjEwNjY2MDAwMDAwMDkwODYwMDAwOTA4ODAwMDA5MDhBMDAwMDkwOENDNgotOjEwNjY3MDAwMDAwMDkwOEUwMDAwOTA5MDAwMDA5MDkyMDAwMDkwOTQ5NgotOjEwNjY4MDAwMDAwMDkwOTYwMDAwOTA5ODAwMDA5MDlBMDAwMDkwOUM2NgotOjEwNjY5MDAwMDAwMDkwOUUwMDAwOTBBMDAwMDA5MEEyMDAwMDkwQTQzNgotOjEwNjZBMDAwMDAwMDkwQTYwMDAwOTBBODAwMDA5MEFBMDAwMDkwQUMwNgotOjEwNjZCMDAwMDAwMDkwQUUwMDAwOTBCMDAwMDA5MEIyMDAwMDkwQjRENgotOjEwNjZDMDAwMDAwMDkwQjYwMDAwOTBCODAwMDA5MEJBMDAwMDkwQkNBNgotOjEwNjZEMDAwMDAwMDkwQkUwMDAwOTBDMDAwMDA5MEMyMDAwMDkwQzQ3NgotOjEwNjZFMDAwMDAwMDkwQzYwMDAwOTBDODAwMDA5MENBMDAwMDkwQ0M0NgotOjEwNjZGMDAwMDAwMDkwQ0UwMDAwOTBEMDAwMDA5MEQyMDAwMDkwRDQxNgotOjEwNjcwMDAwMDAwMDkwRDYwMDAwOTBEODAwMDA5MERBMDAwMDkwRENFNQotOjEwNjcxMDAwMDAwMDkwREUwMDAwOTBFMDAwMDA5MEUyMDAwMDkwRTRCNQotOjEwNjcyMDAwMDAwMDkwRTYwMDAwOTBFODAwMDA5MEVBMDAwMDkwRUM4NQotOjEwNjczMDAwMDAwMDkwRUUwMDAwOTBGMDAwMDA5MEYyMDAwMDkwRjQ1NQotOjEwNjc0MDAwMDAwMDkwRjYwMDAwOTBGODAwMDA5MEZBMDAwMDkwRkMyNQotOjEwNjc1MDAwMDAwMDkwRkUwMDAwOTEwMDAwMDA5MTAyMDAwMDkxMDRGMgotOjEwNjc2MDAwMDAwMDkxMDYwMDAwOTEwODAwMDA5MTBBMDAwMDkxMENDMQotOjEwNjc3MDAwMDAwMDkxMEUwMDAwOTExMDAwMDA5MTEyMDAwMDkxMTQ5MQotOjEwNjc4MDAwMDAwMDkxMTYwMDAwOTExODAwMDA5MTFBMDAwMDkxMUM2MQotOjEwNjc5MDAwMDAwMDkxMUUwMDAwOTEyMDAwMDA5MTIyMDAwMDkxMjQzMQotOjEwNjdBMDAwMDAwMDkxMjYwMDAwOTEyODAwMDA5MTJBMDAwMDkxMkMwMQotOjEwNjdCMDAwMDAwMDkxMkUwMDAwOTEzMDAwMDA5MTMyMDAwMDkxMzREMQotOjEwNjdDMDAwMDAwMDkxMzYwMDAwOTEzODAwMDA5MTNBMDAwMDkxM0NBMQotOjEwNjdEMDAwMDAwMDkxM0UwMDAwOTE0MDAwMDA5MTQyMDAwMDkxNDQ3MQotOjEwNjdFMDAwMDAwMDkxNDYwMDAwOTE0ODAwMDA5MTRBMDAwMDkxNEM0MQotOjEwNjdGMDAwMDAwMDkxNEUwMDAwOTE1MDAwMDA5MTUyMDAwMDkxNTQxMQotOjEwNjgwMDAwMDAwMDkxNTYwMDAwOTE1ODAwMDA5MTVBMDAwMDkxNUNFMAotOjEwNjgxMDAwMDAwMDkxNUUwMDAwOTE2MDAwMDA5MTYyMDAwMDkxNjRCMAotOjEwNjgyMDAwMDAwMDkxNjYwMDAwOTE2ODAwMDA5MTZBMDAwMDkxNkM4MAotOjEwNjgzMDAwMDAwMDkxNkUwMDAwOTE3MDAwMDA5MTcyMDAwMDkxNzQ1MAotOjEwNjg0MDAwMDAwMDkxNzYwMDAwOTE3ODAwMDA5MTdBMDAwMDkxN0MyMAotOjEwNjg1MDAwMDAwMDkxN0UwMDAwOTE4MDAwMDA5MTgyMDAwMDkxODRGMAotOjEwNjg2MDAwMDAwMDkxODYwMDAwOTE4ODAwMDA5MThBMDAwMDkxOENDMAotOjEwNjg3MDAwMDAwMDkxOEUwMDAwOTE5MDAwMDA5MTkyMDAwMDkxOTQ5MAotOjEwNjg4MDAwMDAwMDkxOTYwMDAwOTE5ODAwMDA5MTlBMDAwMDkxOUM2MAotOjEwNjg5MDAwMDAwMDkxOUUwMDAwOTFBMDAwMDA5MUEyMDAwMDkxQTQzMAotOjEwNjhBMDAwMDAwMDkxQTYwMDAwOTFBODAwMDA5MUFBMDAwMDkxQUMwMAotOjEwNjhCMDAwMDAwMDkxQUUwMDAwOTFCMDAwMDA5MUIyMDAwMDkxQjREMAotOjEwNjhDMDAwMDAwMDkxQjYwMDAwOTFCODAwMDA5MUJBMDAwMDkxQkNBMAotOjEwNjhEMDAwMDAwMDkxQkUwMDAwOTFDMDAwMDA5MUMyMDAwMDkxQzQ3MAotOjEwNjhFMDAwMDAwMDkxQzYwMDAwOTFDODAwMDA5MUNBMDAwMDkxQ0M0MAotOjEwNjhGMDAwMDAwMDkxQ0UwMDAwOTFEMDAwMDA5MUQyMDAwMDkxRDQxMAotOjEwNjkwMDAwMDAwMDkxRDYwMDAwOTFEODAwMDA5MURBMDAwMDkxRENERgotOjEwNjkxMDAwMDAwMDkxREUwMDAwOTFFMDAwMDA5MUUyMDAwMDkxRTRBRgotOjEwNjkyMDAwMDAwMDkxRTYwMDAwOTFFODAwMDA5MUVBMDAwMDkxRUM3RgotOjEwNjkzMDAwMDAwMDkxRUUwMDAwOTFGMDAwMDA5MUYyMDAwMDkxRjQ0RgotOjEwNjk0MDAwMDAwMDkxRjYwMDAwOTFGODAwMDA5MUZBMDAwMDkxRkMxRgotOjEwNjk1MDAwMDAwMDkxRkVGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZCNAotOjEwNjk2MDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYzNwotOjEwNjk3MDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYyNwotOjEwNjk4MDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYxNwotOjEwNjk5MDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYwNwotOjEwNjlBMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGNwotOjEwNjlCMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFNwotOjEwNjlDMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZENwotOjEwNjlEMDAwRkZGRkZGRkYwMDAwMDAwMzAwQkVCQzIwMDAwMDAwMDAxRQotOjEwNjlFMDAwMDAwMDAwMDUwMDAwMDAwMzAwQkVCQzIwMDAwMDAwMDAwNQotOjEwNjlGMDAwMDAwMDAwMDUwMDAwMDAwMzAwQkVCQzIwMDAwMDAwMDBGNQotOjEwNkEwMDAwMDAwMDAwMDUwMDAwMDAwMzAwQkVCQzIwMDAwMDAwMDBFNAotOjEwNkExMDAwMDAwMDAwMDUwMDAwMDAwMzAwQkVCQzIwMDAwMDAwMDBENAotOjEwNkEyMDAwMDAwMDAwMDUwMDAwMDAwMzAwQkVCQzIwMDAwMDAwMDBDNAotOjEwNkEzMDAwMDAwMDAwMDUwMDAwMDAwMzAwQkVCQzIwMDAwMDAwMDBCNAotOjEwNkE0MDAwMDAwMDAwMDUwMDAwMDAwMzAwQkVCQzIwMDAwMDAwMDBBNAotOjEwNkE1MDAwMDAwMDAwMDUwMDAwMjAwMDAwMDA0MEMwMDAwMDYxODAzMAotOjEwNkE2MDAwMDAwMDgyNDAwMDAwQTMwMDAwMDBDM0MwMDAwMEU0ODBEQQotOjEwNkE3MDAwMDAwMTA1NDAwMDAxMjYwMDAwMDE0NkMwMDAwMTY3ODBCQQotOjEwNkE4MDAwMDAwMTg4NDAwMDAxQTkwMDAwMDFDOUMwMDAwMUVBODA5RQotOjEwNkE5MDAwMDAwMjBCNDAwMDAyMkMwMDAwMDI0Q0MwMDAwMjZEODA3RQotOjEwNkFBMDAwMDAwMjhFNDAwMDAyQUYwMDAwMDJDRkMwMDAwMkYwODA2MgotOjEwNkFCMDAwMDAwMDExNDAwMDAwODAwMDAwMDEwMzgwMDAwMTg3MDBGOQotOjEwNkFDMDAwMDAwMjBBODAwMDAyOEUwMDAwMDMxMTgwMDAwMzk1MDA3RQotOjEwNkFEMDAwMDAwNDE4ODAwMDA0OUMwMDAwMDUxRjgwMDAwNUEzMDAyRQotOjEwNkFFMDAwMDAwNjI2ODAwMDA2QUEwMDAwMDcyRDgwMDAwN0IxMDBERQotOjEwNkFGMDAwMDAwODM0ODAwMDA4QjgwMDAwMDkzQjgwMDAwOUJGMDA4RQotOjEwNkIwMDAwMDAwQTQyODAwMDBBQzYwMDAwMEI0OTgwMDAwQkNEMDAzRAotOjEwNkIxMDAwMDAwQzUwODAwMDBDRDQwMDAwMEQ1NzgwMDAwMDVCMDA3QQotOjEwNkIyMDAwMDAwMDdGRjgwMDAwN0ZGODAwMDAwMjJBMDAwMDM1MDAxNgotOjEwNkIzMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDA1NwotOjEwNkI0MDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDA0NwotOjEwNkI1MDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAzNwotOjEwNkI2MDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAyNwotOjEwNkI3MDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAxNwotOjEwNkI4MDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwNwotOjEwNkI5MDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDBGNwotOjEwNkJBMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDBFNwotOjEwNkJCMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDBENwotOjEwNkJDMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDBDNwotOjEwNkJEMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDBCNwotOjEwNkJFMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDBBNwotOjEwNkJGMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDA5NwotOjEwNkMwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDA4NgotOjEwNkMxMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDA3NgotOjEwNkMyMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDA2NgotOjEwNkMzMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDA1NgotOjEwNkM0MDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDA0NgotOjEwNkM1MDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAzNgotOjEwNkM2MDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAyNgotOjEwNkM3MDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAxNgotOjEwNkM4MDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwNgotOjEwNkM5MDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDBGNgotOjEwNkNBMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDBFNgotOjEwNkNCMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDBENgotOjEwNkNDMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDBDNgotOjEwNkNEMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDBCNgotOjEwNkNFMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDBBNgotOjEwNkNGMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDA5NgotOjEwNkQwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDA4NQotOjEwNkQxMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDA3NQotOjEwNkQyMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDA2NQotOjEwNkQzMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDA1NQotOjEwNkQ0MDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDA0NQotOjEwNkQ1MDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAzNQotOjEwNkQ2MDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDE5MDAwQwotOjEwNkQ3MDAwMDAwMDAwMDAwMDAwMDAwMEZGRkZGRkZGMDAwMDAwMDAxNwotOjEwNkQ4MDAwMDM5Mzg3MDAwMDAwMDAwMDAzOTM4NzAwMDAwMDdGRjg1MgotOjEwNkQ5MDAwMDAwMDdGRjgwMDAwMEJBNzAwMDAzNTAwMDAwMDAwRkY5NgotOjEwNkRBMDAwMDAwMDAwRkYwMDAwMDBGRjAwMDAwMEZGMDAwMDAwRkZFNwotOjEwNkRCMDAwMDAwMDAwRkYwMDAwMDBGRjAwMDAwMEZGMDAwMEZGMDBENwotOjEwNkRDMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDBDNQotOjEwNkREMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDBCNQotOjEwNkRFMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDBBNQotOjEwNkRGMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDA5NQotOjEwNkUwMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDA4NAotOjEwNkUxMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDA3NAotOjEwNkUyMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDA2NAotOjEwNkUzMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDA1NAotOjEwNkU0MDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDA0NAotOjEwNkU1MDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAzNAotOjEwNkU2MDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAyNAotOjEwNkU3MDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAxNAotOjEwNkU4MDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwNAotOjEwNkU5MDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDBGNAotOjEwNkVBMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDBFNAotOjEwNkVCMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDBENAotOjEwNkVDMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDBDNAotOjEwNkVEMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDBCNAotOjEwNkVFMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDBBNAotOjEwNkVGMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDA5NAotOjEwNkYwMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDA4MwotOjEwNkYxMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDA3MwotOjEwNkYyMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDA2MwotOjEwNkYzMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDA1MwotOjEwNkY0MDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDA0MwotOjEwNkY1MDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAzMwotOjEwNkY2MDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAyMwotOjEwNkY3MDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAxMwotOjEwNkY4MDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMwotOjEwNkY5MDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDBGMwotOjEwNkZBMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDBFMwotOjEwNkZCMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDBEMwotOjEwNkZDMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDBDMwotOjEwNkZEMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDBCMwotOjEwNkZFMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDBBMwotOjEwNkZGMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwRkZGRkZGRkY5NgotOjEwNzAwMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY5MAotOjEwNzAxMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY4MAotOjEwNzAyMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY3MAotOjEwNzAzMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY2MAotOjEwNzA0MDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY1MAotOjEwNzA1MDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY0MAotOjEwNzA2MDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYzMAotOjEwNzA3MDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMDAwMDAwMDAxQwotOjEwNzA4MDAwMDAwMDI4QUQwMDAwMjkxODAwMDAyOTE5MDAwMDAwMDVBMwotOjEwNzA5MDAwMDAwMDAwMDcwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDBERgotOjEwNzBBMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDBENwotOjEwNzBCMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkZCQQotOjEwNzBDMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDBCNwotOjEwNzBEMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDBBNwotOjEwNzBFMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkY4QQotOjEwNzBGMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDA4NwotOjEwNzEwMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDA3NgotOjEwNzExMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkY1OQotOjEwNzEyMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDA1NgotOjEwNzEzMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDA0NgotOjEwNzE0MDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYyOQotOjEwNzE1MDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAyNgotOjEwNzE2MDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDAxNgotOjEwNzE3MDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkZGOQotOjEwNzE4MDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDBGNgotOjEwNzE5MDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDBFNgotOjEwNzFBMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkZDOQotOjEwNzFCMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDBDNgotOjEwNzFDMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDBCNgotOjEwNzFEMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkY5OQotOjEwNzFFMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDA5NgotOjEwNzFGMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDA4NgotOjEwNzIwMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkY2OAotOjEwNzIxMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDA2NQotOjEwNzIyMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDA1NQotOjEwNzIzMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYzOAotOjEwNzI0MDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAzNQotOjEwNzI1MDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDAyNQotOjEwNzI2MDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYwOAotOjEwNzI3MDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAwNQotOjEwNzI4MDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDBGNQotOjEwNzI5MDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkZEOAotOjEwNzJBMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDBENQotOjEwNzJCMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDBDNQotOjEwNzJDMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkZBOAotOjEwNzJEMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDBBNQotOjEwNzJFMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDA5NQotOjEwNzJGMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkY3OAotOjEwNzMwMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDA3NAotOjEwNzMxMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDA2NAotOjEwNzMyMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkY0NwotOjEwNzMzMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDA0NAotOjEwNzM0MDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDAzNAotOjEwNzM1MDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYxNwotOjEwNzM2MDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAxNAotOjEwNzM3MDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDAwNAotOjEwNzM4MDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkZFNwotOjEwNzM5MDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDBFNAotOjEwNzNBMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDBENAotOjEwNzNCMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkZCNwotOjEwNzNDMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDBCNAotOjEwNzNEMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDBBNAotOjEwNzNFMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkY4NwotOjEwNzNGMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDA4NAotOjEwNzQwMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDA3MwotOjEwNzQxMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkY1NgotOjEwNzQyMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDA1MwotOjEwNzQzMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDA0MwotOjEwNzQ0MDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYyNgotOjEwNzQ1MDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAyMwotOjEwNzQ2MDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDAxMwotOjEwNzQ3MDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkZGNgotOjEwNzQ4MDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDBGMwotOjEwNzQ5MDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDBFMwotOjEwNzRBMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkZDNgotOjEwNzRCMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDBDMwotOjEwNzRDMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDBCMwotOjEwNzREMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkY5NgotOjEwNzRFMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDA5MwotOjEwNzRGMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDA4MwotOjEwNzUwMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkY2NQotOjEwNzUxMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDA2MgotOjEwNzUyMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDA1MgotOjEwNzUzMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYzNQotOjEwNzU0MDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAzMgotOjEwNzU1MDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDAyMgotOjEwNzU2MDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYwNQotOjEwNzU3MDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAwMgotOjEwNzU4MDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDBGMgotOjEwNzU5MDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkZENQotOjEwNzVBMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDBEMgotOjEwNzVCMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDBDMgotOjEwNzVDMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkZBNQotOjEwNzVEMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDBBMgotOjEwNzVFMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDA5MgotOjEwNzVGMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkY3NQotOjEwNzYwMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDA3MQotOjEwNzYxMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDA2MQotOjEwNzYyMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkY0NAotOjEwNzYzMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDA0MQotOjEwNzY0MDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDAzMQotOjEwNzY1MDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYxNAotOjEwNzY2MDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAxMQotOjEwNzY3MDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDAwMQotOjEwNzY4MDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkZFNAotOjEwNzY5MDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDBFMQotOjEwNzZBMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDBEMQotOjEwNzZCMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkZCNAotOjEwNzZDMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDBCMQotOjEwNzZEMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDBBMQotOjEwNzZFMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkY4NAotOjEwNzZGMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDA4MQotOjEwNzcwMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDA3MAotOjEwNzcxMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkY1MwotOjEwNzcyMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDA1MAotOjEwNzczMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDA0MAotOjEwNzc0MDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYyMwotOjEwNzc1MDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAyMAotOjEwNzc2MDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDAxMAotOjEwNzc3MDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkZGMwotOjEwNzc4MDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDBGMAotOjEwNzc5MDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDBFMAotOjEwNzdBMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkZDMwotOjEwNzdCMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDBDMAotOjEwNzdDMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDBCMAotOjEwNzdEMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkY5MwotOjEwNzdFMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDA5MAotOjEwNzdGMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDA4MAotOjEwNzgwMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkY2MgotOjEwNzgxMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDA1RgotOjEwNzgyMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDA0RgotOjEwNzgzMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYzMgotOjEwNzg0MDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAyRgotOjEwNzg1MDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDAxRgotOjEwNzg2MDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYwMgotOjEwNzg3MDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDBGRgotOjEwNzg4MDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDBFRgotOjEwNzg5MDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkZEMgotOjEwNzhBMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDBDRgotOjEwNzhCMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDBCRgotOjEwNzhDMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkZBMgotOjEwNzhEMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDA5RgotOjEwNzhFMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDA4RgotOjEwNzhGMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkY3MgotOjEwNzkwMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDA2RQotOjEwNzkxMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDA1RQotOjEwNzkyMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkY0MQotOjEwNzkzMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAzRQotOjEwNzk0MDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDAyRQotOjEwNzk1MDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYxMQotOjEwNzk2MDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAwRQotOjEwNzk3MDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDBGRQotOjEwNzk4MDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkZFMQotOjEwNzk5MDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDBERQotOjEwNzlBMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDBDRQotOjEwNzlCMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkZCMQotOjEwNzlDMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDBBRQotOjEwNzlEMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDA5RQotOjEwNzlFMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkY4MQotOjEwNzlGMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDA3RQotOjEwN0EwMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDA2RAotOjEwN0ExMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkY1MAotOjEwN0EyMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDA0RAotOjEwN0EzMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDAzRAotOjEwN0E0MDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYyMAotOjEwN0E1MDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAxRAotOjEwN0E2MDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDAwRAotOjEwN0E3MDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkZGMAotOjEwN0E4MDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDBFRAotOjEwN0E5MDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDBERAotOjEwN0FBMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkZDMAotOjEwN0FCMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDBCRAotOjEwN0FDMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDBBRAotOjEwN0FEMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkY5MAotOjEwN0FFMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDA4RAotOjEwN0FGMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDA3RAotOjEwN0IwMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkY1RgotOjEwN0IxMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDA1QwotOjEwN0IyMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDA0QwotOjEwN0IzMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYyRgotOjEwN0I0MDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAyQwotOjEwN0I1MDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDAxQwotOjEwN0I2MDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkZGRgotOjEwN0I3MDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDBGQwotOjEwN0I4MDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDBFQwotOjEwN0I5MDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkZDRgotOjEwN0JBMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDBDQwotOjEwN0JCMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDBCQwotOjEwN0JDMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkY5RgotOjEwN0JEMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDA5QwotOjEwN0JFMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDA4QwotOjEwN0JGMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkY2RgotOjEwN0MwMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDA2QgotOjEwN0MxMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDA1QgotOjEwN0MyMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYzRQotOjEwN0MzMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAzQgotOjEwN0M0MDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDAyQgotOjEwN0M1MDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYwRQotOjEwN0M2MDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAwQgotOjEwN0M3MDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDBGQgotOjEwN0M4MDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkZERQotOjEwN0M5MDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDBEQgotOjEwN0NBMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDBDQgotOjEwN0NCMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkZBRQotOjEwN0NDMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDBBQgotOjEwN0NEMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDA5QgotOjEwN0NFMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkY3RQotOjEwN0NGMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDA3QgotOjEwN0QwMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDA2QQotOjEwN0QxMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkY0RAotOjEwN0QyMDAwMDAwMEZGMDAwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDA0QQotOjEwN0QzMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDAwMEZGMDAzQQotOjEwN0Q0MDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYxRAotOjEwN0Q1MDAwMDAwMEZGMDAwMDAwMTAwMDAwMDAyMDgwMDAwMDMxMDA0MwotOjEwN0Q2MDAwMDAwMDQxODAwMDAwNTIwMDAwMDA2MjgwMDAwMDczMDBBQgotOjEwN0Q3MDAwMDAwMDgzODAwMDAwOTQwMDAwMDBBNDgwMDAwMEI1MDA5MwotOjEwN0Q4MDAwMDAwMEM1ODAwMDAwRDYwMDAwMDBFNjgwMDAwMEY3MDA3QgotOjEwN0Q5MDAwMDAwMTA3ODAwMDAxMTgwMDAwMDEyODgwMDAwMTM5MDA1RgotOjEwN0RBMDAwMDAwMTQ5ODAwMDAxNUEwMDAwMDE2QTgwMDAwMTdCMDA0NwotOjEwN0RCMDAwMDAwMThCODAwMDAxOUMwMDAwMDFBQzgwMDAwMUJEMDAyRgotOjEwN0RDMDAwMDAwMUNEODAwMDAxREUwMDAwMDFFRTgwMDAwMUZGMDAxNwotOjEwN0REMDAwMDAwMDBGODAwMDAwN0ZGODAwMDA3RkY4MDAwMDA1RjkyOAotOjEwN0RFMDAwMDAwMDM1MDAxMDAwMDAwMDAwMDAyOEFEMDAwMDI5MTgzOAotOjEwN0RGMDAwMDAwMDI5MTkwMDAwMDAwNTAwMDAwMDA2MDAwMTAwMDEzNAotOjEwN0UwMDAwMDAyMjAwMDZDQ0NDQ0NDOTcwNTgxMDNDMDAwMEZGMDAwQQotOjEwN0UxMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDA2NAotOjEwN0UyMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDA1NAotOjEwN0UzMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDA0NAotOjEwN0U0MDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAzNAotOjEwN0U1MDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAyNAotOjEwN0U2MDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAxNAotOjEwN0U3MDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwNAotOjEwN0U4MDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDBGNAotOjEwN0U5MDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDBFNAotOjEwN0VBMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDBENAotOjEwN0VCMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDBDNAotOjEwN0VDMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDBCNAotOjEwN0VEMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDBBNAotOjEwN0VFMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDA5NAotOjEwN0VGMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDA4NAotOjEwN0YwMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDA3MwotOjEwN0YxMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDA2MwotOjEwN0YyMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDA1MwotOjEwN0YzMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDA0MwotOjEwN0Y0MDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAzMwotOjEwN0Y1MDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAyMwotOjEwN0Y2MDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAxMwotOjEwN0Y3MDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMwotOjEwN0Y4MDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDBGMwotOjEwN0Y5MDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDBFMwotOjEwN0ZBMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDBEMwotOjEwN0ZCMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDBDMwotOjEwN0ZDMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDBCMwotOjEwN0ZEMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDBBMwotOjEwN0ZFMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDA5MwotOjEwN0ZGMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDA4MwotOjEwODAwMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDA3MgotOjEwODAxMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDA2MgotOjEwODAyMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDA1MgotOjEwODAzMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDA0MgotOjEwODA0MDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMDAwMDEzMAotOjEwODA1MDAwQ0NDQzAyMDFDQ0NDQ0NDQ0NDQ0MwMjAxQ0NDQ0NDQ0M4QQotOjEwODA2MDAwQ0NDQzAyMDFDQ0NDQ0NDQ0NDQ0MwMjAxQ0NDQ0NDQ0M3QQotOjEwODA3MDAwQ0NDQzAyMDFDQ0NDQ0NDQ0NDQ0MwMjAxQ0NDQ0NDQ0M2QQotOjEwODA4MDAwQ0NDQzAyMDFDQ0NDQ0NDQ0NDQ0MwMjAxQ0NDQ0NDQ0M1QQotOjEwODA5MDAwMDAwMDAwMDBGRkZGRkZGRjAzMDMwMzAzMTM0MjAyMDI3RgotOjEwODBBMDAwNTA1MDUwMjA3MDYwODA1MDAyMDAwMjAwMDYwNDA2MDQwOAotOjEwODBCMDAwMDAwRTAwMDAwMTE2MDBENjAwMjYyNUEwMDAyNjI1QTBFRgotOjEwODBDMDAwMDAyNjI1QTAwMDI2MjVBMDAwNzIwMDAwMDEyMzAwRjM1MQotOjEwODBEMDAwMDAyNjI1QTAwMDI2MjVBMDAwMjYyNUEwMDAyNjI1QTBGNAotOjEwODBFMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA5NAotOjEwODBGMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA4NAotOjEwODEwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA3MwotOjEwODExMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA2MwotOjEwODEyMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA1MwotOjEwODEzMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA0MwotOjEwODE0MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAzMwotOjEwODE1MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAyMwotOjEwODE2MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAxMwotOjEwODE3MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAwMwotOjEwODE4MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBGMwotOjEwODE5MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBFMwotOjEwODFBMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBEMwotOjEwODFCMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBDMwotOjEwODFDMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBCMwotOjEwODFEMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBBMwotOjEwODFFMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA5MwotOjEwODFGMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA4MwotOjEwODIwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA3MgotOjEwODIxMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA2MgotOjEwODIyMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA1MgotOjEwODIzMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA0MgotOjEwODI0MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAzMgotOjEwODI1MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAyMgotOjEwODI2MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAxMgotOjEwODI3MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAwMgotOjEwODI4MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBGMgotOjEwODI5MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBFMgotOjEwODJBMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBEMgotOjEwODJCMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBDMgotOjEwODJDMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBCMgotOjEwODJEMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBBMgotOjEwODJFMDAwRkZGRkZGRjMzMThGRkZGRjBDMzBDMzBDQzMwQzMwQzMxMwotOjEwODJGMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMDBDRjNDQ0RDRENEQ0Q1MAotOjEwODMwMDAwRkZGRkZGRjEzMEVGRkZGRjBDMzBDMzBDQzMwQzMwQzM5NQotOjEwODMxMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMDFDRjNDQ0RDRENEQ0QyRQotOjEwODMyMDAwRkZGRkZGRjYzMDVGRkZGRjBDMzBDMzBDQzMwQzMwQzMwMAotOjEwODMzMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMDJDRjNDQ0RDRENEQ0QwRAotOjEwODM0MDAwRkZGRkY0MDYxQ0JGRkZGRjBDMzBDMzA1QzMwQzMwQzM5NgotOjEwODM1MDAwQ0YzMDAwMTRGM0NGM0NGMzAwMDRDRjNDQ0RDRENEQ0RENgotOjEwODM2MDAwRkZGRkZGRjIzMDRGRkZGRjBDMzBDMzBDQzMwQzMwQzNENAotOjEwODM3MDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMDhDRjNDQ0RDRENEQ0RDNwotOjEwODM4MDAwRkZGRkZGRkEzMDJGRkZGRjBDMzBDMzBDQzMwQzMwQzNDQwotOjEwODM5MDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMTBDRjNDQ0RDRENEQ0Q5RgotOjEwODNBMDAwRkZGRkZGRjczMUVGRkZGRjBDMzBDMzBDQzMwQzMwQzNFRQotOjEwODNCMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMjBDRjNDQ0RDRENEQ0Q2RgotOjEwODNDMDAwRkZGRkZGRjUzMDJGRkZGRjBDMzBDMzBDQzMwQzMwQzM5MQotOjEwODNEMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwNDBDRjNDQ0RDRENEQ0QyRgotOjEwODNFMDAwRkZGRkZGRjMzMThGRkZGRjBDMzBDMzBDQzMwQzMwQzMxMgotOjEwODNGMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMDBDRjNDQ0RDRENEQ0Q0RgotOjEwODQwMDAwRkZGRkZGRjEzMTBGRkZGRjBDMzBDMzBDQzMwQzMwQzM3MwotOjEwODQxMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMDFDRjNDQ0RDRENEQ0QyRAotOjEwODQyMDAwRkZGRkZGRjYzMDVGRkZGRjBDMzBDMzBDQzMwQzMwQzNGRgotOjEwODQzMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMDJDRjNDQ0RDRENEQ0QwQwotOjEwODQ0MDAwRkZGRkY0MDYxQ0JGRkZGRjBDMzBDMzA1QzMwQzMwQzM5NQotOjEwODQ1MDAwQ0YzMDAwMTRGM0NGM0NGMzAwMDRDRjNDQ0RDRENEQ0RENQotOjEwODQ2MDAwRkZGRkZGRjIzMDRGRkZGRjBDMzBDMzBDQzMwQzMwQzNEMwotOjEwODQ3MDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMDhDRjNDQ0RDRENEQ0RDNgotOjEwODQ4MDAwRkZGRkZGRkEzMDJGRkZGRjBDMzBDMzBDQzMwQzMwQzNDQgotOjEwODQ5MDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMTBDRjNDQ0RDRENEQ0Q5RQotOjEwODRBMDAwRkZGRkZGRjczMEVGRkZGRjBDMzBDMzBDQzMwQzMwQzNFRQotOjEwODRCMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMjBDRjNDQ0RDRENEQ0Q2RQotOjEwODRDMDAwRkZGRkZGRjUzMDRGRkZGRjBDMzBDMzBDQzMwQzMwQzM3MAotOjEwODREMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwNDBDRjNDQ0RDRENEQ0QyRQotOjEwODRFMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzNDNgotOjEwODRGMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDBDRjNDQ0RDRENEQ0Q4MgotOjEwODUwMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzNBNQotOjEwODUxMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDFDRjNDQ0RDRENEQ0Q2MAotOjEwODUyMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzM4NQotOjEwODUzMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDJDRjNDQ0RDRENEQ0QzRgotOjEwODU0MDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzM2NQotOjEwODU1MDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDRDRjNDQ0RDRENEQ0QxRAotOjEwODU2MDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzM0NQotOjEwODU3MDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDhDRjNDQ0RDRENEQ0RGOQotOjEwODU4MDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzMyNQotOjEwODU5MDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMTBDRjNDQ0RDRENEQ0REMQotOjEwODVBMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzMwNQotOjEwODVCMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMjBDRjNDQ0RDRENEQ0RBMQotOjEwODVDMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzNFNQotOjEwODVEMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwNDBDRjNDQ0RDRENEQ0Q2MQotOjEwODVFMDAwRkZGRkZGRjMzMjBGRkZGRjBDMzBDMzBDQzMwQzMwQzM4RgotOjEwODVGMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMDBDRjNDQ0RDRENEQ0Q0RAotOjEwODYwMDAwRkZGRkZGRjEzMTBGRkZGRjBDMzBDMzBDQzMwQzMwQzM3MQotOjEwODYxMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMDFDRjNDQ0RDRENEQ0QyQgotOjEwODYyMDAwRkZGRkZGRjYzMDVGRkZGRjBDMzBDMzBDQzMwQzMwQzNGRAotOjEwODYzMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMDJDRjNDQ0RDRENEQ0QwQQotOjEwODY0MDAwRkZGRkY0MDYxQ0JGRkZGRjBDMzBDMzA1QzMwQzMwQzM5MwotOjEwODY1MDAwQ0YzMDAwMTRGM0NGM0NGMzAwMDRDRjNDQ0RDRENEQ0REMwotOjEwODY2MDAwRkZGRkZGRjIzMDRGRkZGRjBDMzBDMzBDQzMwQzMwQzNEMQotOjEwODY3MDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMDhDRjNDQ0RDRENEQ0RDNAotOjEwODY4MDAwRkZGRkZGOEEwNDJGRkZGRjBDMzBDMzBDQzMwQzMwQzM2NQotOjEwODY5MDAwQ0YzQ0MwMDBGM0NGM0NGMzAwMTBDRjNDQ0RDRENEQ0RDRgotOjEwODZBMDAwRkZGRkZGOTcwNUNGRkZGRjBDMzBDMzBDQzMwQzMwQzM5NwotOjEwODZCMDAwQ0YzQ0MwMDBGM0NGM0NGMzAwMjBDRjNDQ0RDRENEQ0Q5RgotOjEwODZDMDAwRkZGRkZGRjUzMTBGRkZGRjBDMzBDMzBDQzMwQzMwQzNBRAotOjEwODZEMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwNDBDRjNDQ0RDRENEQ0QyQwotOjEwODZFMDAwRkZGRkZGRjMzMjBGRkZGRjBDMzBDMzBDQzMwQzMwQzM4RQotOjEwODZGMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMDBDRjNDQ0RDRENEQ0Q0QwotOjEwODcwMDAwRkZGRkZGRjEzMDJGRkZGRjBDMzBDMzBDQzMwQzMwQzM1MQotOjEwODcxMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMDFDRjNDQ0RDRENEQ0QyQQotOjEwODcyMDAwRkZGRkZGRjYzMDVGRkZGRjBDMzBDMzBDQzMwQzMwQzNGQwotOjEwODczMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMDJDRjNDQ0RDRENEQ0QwOQotOjEwODc0MDAwRkZGRkZGMDYxQ0JGRkZGRjBDMzBDMzBDQzMwQzMwQzM4MAotOjEwODc1MDAwQ0YzQ0MwMTRGM0NGM0NGMzAwMDRDRjNDQ0RDRENEQ0QwNgotOjEwODc2MDAwRkZGRkZGRjIzMDRGRkZGRjBDMzBDMzBDQzMwQzMwQzNEMAotOjEwODc3MDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMDhDRjNDQ0RDRENEQ0RDMwotOjEwODc4MDAwRkZGRkZGRkEzMDJGRkZGRjBDMzBDMzBDQzMwQzMwQzNDOAotOjEwODc5MDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMTBDRjNDQ0RDRENEQ0Q5QgotOjEwODdBMDAwRkZGRkZGRjczMUNGRkZGRjBDMzBDMzBDQzMwQzMwQzMwQQotOjEwODdCMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMjBDRjNDQ0RDRENEQ0Q2QgotOjEwODdDMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzNFMwotOjEwODdEMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwNDBDRjNDQ0RDRENEQ0Q1RgotOjEwODdFMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzNDMwotOjEwODdGMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDBDRjNDQ0RDRENEQ0Q3RgotOjEwODgwMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzNBMgotOjEwODgxMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDFDRjNDQ0RDRENEQ0Q1RAotOjEwODgyMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzM4MgotOjEwODgzMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDJDRjNDQ0RDRENEQ0QzQwotOjEwODg0MDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzM2MgotOjEwODg1MDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDRDRjNDQ0RDRENEQ0QxQQotOjEwODg2MDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzM0MgotOjEwODg3MDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDhDRjNDQ0RDRENEQ0RGNgotOjEwODg4MDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzMyMgotOjEwODg5MDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMTBDRjNDQ0RDRENEQ0RDRQotOjEwODhBMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzMwMgotOjEwODhCMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMjBDRjNDQ0RDRENEQ0Q5RQotOjEwODhDMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzNFMgotOjEwODhEMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwNDBDRjNDQ0RDRENEQ0Q1RQotOjEwODhFMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzNDMgotOjEwODhGMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDBDRjNDQ0RDRENEQ0Q3RQotOjEwODkwMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzNBMQotOjEwODkxMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDFDRjNDQ0RDRENEQ0Q1QwotOjEwODkyMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzM4MQotOjEwODkzMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDJDRjNDQ0RDRENEQ0QzQgotOjEwODk0MDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzM2MQotOjEwODk1MDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDRDRjNDQ0RDRENEQ0QxOQotOjEwODk2MDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzM0MQotOjEwODk3MDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDhDRjNDQ0RDRENEQ0RGNQotOjEwODk4MDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzMyMQotOjEwODk5MDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMTBDRjNDQ0RDRENEQ0RDRAotOjEwODlBMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzMwMQotOjEwODlCMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMjBDRjNDQ0RDRENEQ0Q5RAotOjEwODlDMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzNFMQotOjEwODlEMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwNDBDRjNDQ0RDRENEQ0Q1RAotOjEwODlFMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzNDMQotOjEwODlGMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDBDRjNDQ0RDRENEQ0Q3RAotOjEwOEEwMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzNBMAotOjEwOEExMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDFDRjNDQ0RDRENEQ0Q1QgotOjEwOEEyMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzM4MAotOjEwOEEzMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDJDRjNDQ0RDRENEQ0QzQQotOjEwOEE0MDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzM2MAotOjEwOEE1MDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDRDRjNDQ0RDRENEQ0QxOAotOjEwOEE2MDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzM0MAotOjEwOEE3MDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDhDRjNDQ0RDRENEQ0RGNAotOjEwOEE4MDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzMyMAotOjEwOEE5MDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMTBDRjNDQ0RDRENEQ0RDQwotOjEwOEFBMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzMwMAotOjEwOEFCMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMjBDRjNDQ0RDRENEQ0Q5QwotOjEwOEFDMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzNFMAotOjEwOEFEMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwNDBDRjNDQ0RDRENEQ0Q1QwotOjEwOEFFMDAwMDAwQzAwMDAwMDA3MDBDMDAwMDI4MTMwMDAwQjgxNTgxQwotOjEwOEFGMDAwMDAwMjAyMTAwMDAxMDIzMDAwMEYwMjQwMDAwMTAzMzBBQQotOjEwOEIwMDAwMDAwQzAwMDAwMDA4MDBDMDAwMDI4MTQwMDAwQjgxNjhEQQotOjEwOEIxMDAwMDAwMjAyMjAwMDAxMDI0MDAwMDcwMjUwMDAwMjAyQzBEMQotOjEwOEIyMDAwMDAxMDAwMDAwMDA4MDEwMDAwMDI4MTgwMDAwQjgxQThGNQotOjEwOEIzMDAwMDAwMjAyNjAwMDAxODI4MDAwMEU4Mjk4MDAwODAzODAxQgotOjEwOEI0MDAwMDAxMDAwMDAwMDAxMDEwMDAwMDI4MTEwMDAwOTAxMzgzRQotOjEwOEI1MDAwMDAwMjAxQzgwMDAxMDFFODAwMEUwMUY4MDAwMDAyRDg3RgotOjEwOEI2MDAwQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0M0NQotOjEwOEI3MDAwMDAwMDIwMDBDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0M0NQotOjEwOEI4MDAwQ0NDQ0NDQ0MwMDAwMjAwMENDQ0NDQ0NDQ0NDQ0NDQ0MzNQotOjEwOEI5MDAwQ0NDQ0NDQ0NDQ0NDQ0NDQzA0MDAyMDAwQ0NDQ0NDQ0MyMQotOjEwOEJBMDAwQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDNDEwMDIwMDBENAotOjEwOEJCMDAwMDMwMzAzMDMwMzQyMDIwMjUwNTA1MDIwNzA2MDgwNTBCMAotOjEwOEJDMDAwMTMxMzEzMTMxMzQyMTIxMjUwNTA1MDIwNzA2MDgwNTAzMAotOjEwOEJEMDAwMDMwMTAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RgotOjEwOEJFMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJGQjUxQ0ZDMEYwMDNGQQotOjEwOEJGMDAwOEFGNzA5MzIzMDI4ODkyMEY4QzRFMDQyNzYwNjg2NEQ4QgotOjEwOEMwMDAwMUMwQzBDNUJCODQ5RDMwN0MzMkMwQzBDMENEQTRDRTRERAotOjEwOEMxMDAwRTkwNUUxREJCQzBDMENDRjgwOTg4MTBGNTU1QzgwMTMxQgotOjEwOEMyMDAwNDJGRjA3NUEyMEM4MEFCNDgzMERCQkZFRTU2QTA4QjZBNgotOjEwOEMzMDAwQTcwQTAzNDMwMTEwMzMyODMxMzBFOEFCMjJDNDQ1RDRERQotOjEwOEM0MDAwMTkxODI2MDJGOTkxNTBCMUFCNDAzQTRDOEQ3QzM3OEYwMAotOjEwOEM1MDAwRTJDMTgzNEYxQUEzRjI5NzFBNDI2ODA3QThGODI5MzQ5MQotOjEwOEM2MDAwRjk2NTUwRjk2MjFEMDg3RERBMThCQkI5MjUzQUM0RDlGNwotOjEwOEM3MDAwQkZDQjFBOTUzRkNEMUFCRkZBOTNGNkE4RkM3NTY4RUFFOAotOjEwOEM4MDAwMTc0MUY5MDBCOUZBRDIxREQ4MDMwMDAwMDAwMDAwMDAxNgotOjEwOEM5MDAwMDAwMDAwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDAyMgotOjEwOENBMDAwMDAwQkVEN0Q3RjdDMTRENUI1Rjg5OTlERDlEOUQ5Q0QzMAotOjEwOENCMDAwRUU2NjA4MDk2QzIwRTAyNDg2MUFGQUEyNUQyMDYwOTAxNgotOjEwOENDMDAwQTg0MzQwMUFCRjhGREExNUE5QTYyREVENzdCNUQ0RTJENwotOjEwOENEMDAwMEY2MEVCRjMwOTdEQ0YzNjkzMTA5MjEwMTAxN0IxRDVDQQotOjEwOENFMDAwNTZBQjJCMEYyREY1NkIyNUI1RDREMkZBQTM4QjU4MUU5RQotOjEwOENGMDAwQjZFRkYzQkU0ODY5RUJENzYyMUI3RkUxOEYyMjhENUEzNgotOjEwOEQwMDAwODRCNjU4QkZGNzlDN0IyNzNCMzNEOTREMzY0MDdGRkM1OAotOjEwOEQxMDAwRjFDMjA3ODYzQjczRUVCREU3OUU3M0VFQjlFNzlDN0IxRAotOjEwOEQyMDAwRUU4RDBBMzVGMEExMzMwMDNFQzA5RjBCMDE2RTBGMDE5RQotOjEwOEQzMDAwNDA0NUVFNjk1QzdGN0U0RjdGMDNDMDUxODhBNDdCQ0JBQQotOjEwOEQ0MDAwMDFENjI4NjAwMjJCNUIwNzIzOTlGQjI1QzA5RjNBODUzQgotOjEwOEQ1MDAwOTU1N0M5MUY4RUY3NTYwM0RDNTFGMjk1N0IxMTdFQjVFRQotOjEwOEQ2MDAwQTU0MDgwM0Q3QkRCMDBCMjY3QjFFRkExRTgxNjI4MDU4NgotOjEwOEQ3MDAwMjg4MUQ0NzZGQ0NFN0UxMkY3QjNGNjhFMDUyNzY3MjBDNQotOjEwOEQ4MDAwOUFFQkJGMDI3QzAwMzNGMTczOTU3RUE4ODRFMEUwMDM4OAotOjEwOEQ5MDAwOTlGRDczMzAzOTE3QzYwMUM4NjBGRkFDODYzRUQ2OEU4OAotOjEwOERBMDAwNzI0MENFNjBCRkIyQkM1MEZGNTU0REFFMURFRjUzRDZFMgotOjEwOERCMDAwNTVDODZBQTIzREZDNDc1RTUyOUEwQzE3ODY1RjdEQjA4QgotOjEwOERDMDAwN0FGQkQzNzUzOUY4QjMyMDUyN0VFODlGRDg3RjE0NTBEMAotOjEwOEREMDAwMDgxRjc5MDMyMDFEOEU4NjIxMjM1NzE3NkVFNzU4OUJBNQotOjEwOERFMDAwQjFGRDY5M0ZEMkYxMzNBNTg5QjMwQkMzRDk3NEVBNjlFOAotOjEwOERGMDAwRDNFOEQ5RDVBNjQzMzYwMEMwNTAzNkZCRUFEOTMzMENBOAotOjEwOEUwMDAwRTY5NkZBQTFGNUU2ODE0NEY0RDIwQzhCRjBFOTBDRkI2RQotOjEwOEUxMDAwMzIyNUQ1ODg3NTEyODBEMUQ3OEZGNDkxRjBGRDIyQ0RGRgotOjEwOEUyMDAwQ0M1M0RGN0U0MjM5QTM4RjNENUU0NkM3MjBGMEY2ODBFQgotOjEwOEUzMDAwOERFRjdFRDY1RTEwRkJDRjQzQUZDQkIwN0YyNjI3QzEzMAotOjEwOEU0MDAwREFBMUZENUIwRDI3REY3RjY4MkFDMEJFMzBEMkRCNDQ4QwotOjEwOEU1MDAwMUNDMEE3QTcyMDJFRjhGRDUxNjk5ODc2MDQ5RjE1ODNBMgotOjEwOEU2MDAwQjczMzEyREQ0QkVBN0NCOTdFRDlERkEwMTE3MkM5NDk1NAotOjEwOEU3MDAwMjA1NkU2OTYxQkFGNUMyMjlEMkE5MDVGODZGNEYyOTQwMgotOjEwOEU4MDAwNUNCQjJBRjIyRDBGQkRBRTExRjQxQTk4OUI2ODREMzBEMQotOjEwOEU5MDAwN0FBQzZEMDNFQjI1NDczRDM5MDY2NjI2MEY5RDU2ODk1MgotOjEwOEVBMDAwN0E3NjdGNEEzOTgzQ0JEMzNFNDBCQjk4M0Y5NjBCQkU0MAotOjEwOEVCMDAwNThGQ0JFN0M5MkY4QURGRjFCRTFCNzQ5QzgzQjQwOUExNQotOjEwOEVDMDAwOUUwMzczOTM4NEE3QjdCRDdDRjM4QjRERTJDMTcyNDhCOAotOjEwOEVEMDAwQzk1ODNFOTRFRjcyODhERkNGMUU3RThEQ0YzM0ZCRkJFNwotOjEwOEVFMDAwQzNFMEE3NzY3NkEyQzY2MUZEQUMxMUY4MERDQ0U1RkExOQotOjEwOEVGMDAwNkZFRDM0MzVCMzQ1MjI3REU0QzJGMzIxRDQ1RkFDOUVERgotOjEwOEYwMDAwMjQwOTdBNjg3RDgwRjI1NzcyNUMwMTE4OEJGODk5OTA3OQotOjEwOEYxMDAwODgwMEFDQUI2REQ2ODZEMzNGQTAyQjdGRUFCN0U1QUUxOQotOjEwOEYyMDAwNjZBOERDN0Q5ODc1ODM3ODg1QzJGOUU5RjRGMEEwMUUwNwotOjEwOEYzMDAwNUQ2MkJEQzREQUQxODJFQ0ZEOTlEODZFNzlBQzZBMTY1NwotOjEwOEY0MDAwRTBFOEU4QzcyRkJFODNFNDkzM0ZDMDc5N0I4MkMxQ0RDMAotOjEwOEY1MDAwMTI3QTU2QTZGNjQ5OEY0MDE1OTBCRTk3MDUzQ0Y1QzM4OAotOjEwOEY2MDAwRTAwMzZDNThFNjc0RjZDNEY3NzVBMjFGNjk2OEJCREVBRgotOjEwOEY3MDAwN0FDN0EwOENEMzQ3RTA2M0VCNzUxOTFFQTc3NjA2RjE3QwotOjEwOEY4MDAwNTExMjQ0MkZFRjdCM0Y3QkFGODc0RkZERkRBOTk2RkQyQwotOjEwOEY5MDAwNDY4MUZFRDIxMkM5RDM0OEY1N0YyM0U0NjU4ODdDMTY0QQotOjEwOEZBMDAwRTBFQjdFMzFDRjE0RTgzM0UxQ0M5QzFDRDlGMjc1QjJGMgotOjEwOEZCMDAwNzI3NENBNzJDMkJBQTdGNUEyODA5QzU4OTBBMjc5QzNGMwotOjEwOEZDMDAwQzBBQ0RFNjlBMzk3OTczQzcyOTI3NUMyMkY5NEM2RjAyRAotOjEwOEZEMDAwNzEyODcxOTIxNzg2OEY0MjcyQUI3MzdDMkFBNjk3NTNDMQotOjEwOEZFMDAwN0IxMkNFRjFCM0IwMDU1MTQ2M0FCMEYxNUU2NUQ3ODczQQotOjEwOEZGMDAwMzhDREQ3MTBEQTM5OEVGQTZDNzA4NEFGMjQ0QjQyRUYzQgotOjEwOTAwMDAwNzNCODlCQzQzQzNGQkZCOThBRTMwRkEyN0QwRkJFQUNDRgotOjEwOTAxMDAwM0RDREQ5OUUwQzU1MUUzOUU3Nzg2Rjk0Qjg3RTYzRjAyQwotOjEwOTAyMDAwNTlBMkE3Qjc3RjQ1MjI3QzY1NDg1ODNFNTY2RjhCRTgwQQotOjEwOTAzMDAwREZBQkJGRUNFNzBFRDFERTA2MDk1QUZCQzI3QzNFMkQ0QQotOjEwOTA0MDAwNzJBQzg3Q0Q5MkQwMTMxQTlGNjc1RUZERTQ0N0I5OUE0MAotOjEwOTA1MDAwNzFGMjcyNTVBQzVFNUYyOEU1NUY3Nzk4NTUxNEJCMzRBQQotOjEwOTA2MDAwNTI3OEREMjlGNUQ5RUI0MTM2MjZGODM2MkFCRTlGMjlGQwotOjEwOTA3MDAwOTVCOUY4NUUyQ0JFNTc5RDI0QkUxMzg3RTI1Qjk0OUM4NQotOjEwOTA4MDAwNEQ5NTdDQTM1QTI3NkYzQTQ5RkM4MjFFRkM0RTk3NUM5MwotOjEwOTA5MDAwQ0YxMDcyNTYyQ0ZFRjYzQzE4MkRGRUYyNTBGQTE2MzUwMwotOjEwOTBBMDAwOEY2NjhGMTJCRjJEMjc0OURGMEE5RjZEMjcwOUZDMEFBMwotOjEwOTBCMDAwQ0NEQkYzMDVCRjJERTBGMkExMzAzQjFDRkQ5QzYyRjEzRgotOjEwOTBDMDAwN0I3NDY0RkMwMENFNjM3RkFEMTcyRDUzMjE3QjBENjA1NAotOjEwOTBEMDAwMDJDMEQzRUQyRjVBOTY5MkMzQ0YwNEFFRDc0N0RCRkYyMQotOjEwOTBFMDAwOUU5MUY5MjdGQTdGQzMzMjZCNzNGRDFGNjg3RkMzRDU0QQotOjEwOTBGMDAwQkZDMkU0MDc4NUFERDg3RTdGNTFFQ0I4RTE2REQ3QjgyQgotOjEwOTEwMDAwNUY5NkRFNzZGNTdCQjI3NDdGQjVFOEZFRkZFODFBRjc2RQotOjEwOTExMDAwQkJEMjFGRERFMzBFQjM3MTlGNTk3Q0JGN0YzODQ5NzkwNQotOjEwOTEyMDAwQUMxNkYzQTU1OUQyNURFQjQwMjFGQjdEODZFMEVCREQ2QgotOjEwOTEzMDAwMzZCQzhENkYwMUY4QTkwMkFGQ0UyMkUxMjc4QUY2M0YzNwotOjEwOTE0MDAwNTUyNDdDOUY2OEJGMEZFMTJCNDY4NjNGNTNDMEE3OEFGQQotOjEwOTE1MDAwODQ5NzdDN0MxRTE2NUEzRkU3NEEzNkZEQzBFNTdGQUNGQgotOjEwOTE2MDAwRDE3ODFDQzQ1Q0EzNDBGMDgyQTE3MTEzQUIzOUY1QUQ3QQotOjEwOTE3MDAwN0VDNjdCQUIyM0EwQUYyOUE3QjgwOUM1NDU1NjAzMjRGQgotOjEwOTE4MDAwMzA2RTcyMTcyNDFCN0QxODdGRDlGOUU1N0IxMUVFMUQxNwotOjEwOTE5MDAwNDVEMzdCNzVFMDEzOTI3RDBGMUU4QzZDRTlBRENFRjU0NwotOjEwOTFBMDAwQjc0QTRFQjY0QTI4NEI2QkEyRkFGRDE0NUY0OUI1NEEzRQotOjEwOTFCMDAwRUM1OTYxODU3NThDREIxQ0FCNDlCNDVGNTk4RUUzMzA4QgotOjEwOTFDMDAwNzQ4QkI1RjNGQ0IyQ0I3NjYxRjkzNjRERDI2NTI2NkE2NQotOjEwOTFEMDAwNUZCRDYwRUFBNkNCMEQwNkY3RkVBRUU3Q0U0MEI4NjlFQwotOjEwOTFFMDAwRTM2QTNBNDg1RkM2MjU5NDg3QjE3MUQ1OTRDRjYxQ0ZDMQotOjEwOTFGMDAwQzU4QkI5N0UwN0UxMEZCNzM4Q0FDQzBFRjg2NEVCMjdGMAotOjEwOTIwMDAwNUNERjNGOUQ3NDk3M0ZEMUYyODlEQzdBQzJGRTVFOTFBQwotOjEwOTIxMDAwNzA3RkNGOEQwN0I4REYzMTg3RUJFRDYzMzVBOURGNzI0MwotOjEwOTIyMDAwQkMzRTU0NkRGMUY4MDI4REI3RDQ4QUQyRjgzNkJDRkYzQgotOjEwOTIzMDAwNDUyQTZGNjhBRkQ3M0JEOEI4M0Y3NUNENTEwQkM3MTdEQwotOjEwOTI0MDAwOTY4MEM2MTc4REJGOTdDNTMyQjBGMUFBOEQwMEI3NUU2NAotOjEwOTI1MDAwRjA0Q0NGMkMyOEVDN0Y0NTlCMTZCQkYwODRCODdCOUM1MAotOjEwOTI2MDAwQUREN0U3Qzc1QkQ1REY5REYwMEFCMzk3OEVFRDBBOUFCRAotOjEwOTI3MDAwODg0Rjc0QUY5QzA5NTYyMzVGMDdCMjkzQjA3RkFCMzQxRAotOjEwOTI4MDAwQzlGOTMzMDBCNUM4NTc1MzA3RTQ2M0IzOTlDQ0M4RUNBOAotOjEwOTI5MDAwN0QzQUE2QzUwMzI4NjZEMEFGMjFERDM3MjE2ODI1N0IzRQotOjEwOTJBMDAwREZGODhFOTZBQ0M3RjZERkEzRjY3NUYxRkRENkM2OUE0OQotOjEwOTJCMDAwRjExODFGNzlCQzZERjU0NDg1Q0RGNzFGQjU1OTEzMTUwRAotOjEwOTJDMDAwNjZCNEVGNkNFQkExRTdBMzZENjk3QUJGQTNFRDRFN0FBQwotOjEwOTJEMDAwREFFMzQzNEQ2MkQ4RTM5M0IxMUZCMzAzRTVFRDk4OUYwMgotOjEwOTJFMDAwOTk0NjBDQUY4REU3RkJDOEJGREQyMEY0NDg5Nzc4MkE3QwotOjEwOTJGMDAwNEE1NjJFQzVFRjcxOThENjBCODhEN0ZFNzk1ODRFMzc0RgotOjEwOTMwMDAwQzAzNDY0NTlCQUU5MjlCOTk0OERFMzg2NEE5ODhFNkRDMAotOjEwOTMxMDAwRUY3QUUxNTdGQzdCMTU0QzBGMzBGOTdBQ0E2Q0E2NzlDRAotOjEwOTMyMDAwNzA2QkEzMkYxM0E4QTZFN0M1RDhERkFEQTYwRjk4QzkwOQotOjEwOTMzMDAwMDM5MTM4QzNDQjQxRDc0MENDNURENjIxQjkyNkQyNDA2QQotOjEwOTM0MDAwRkRDNzdCMERBQzdGQzM2RTJDREYzMDkzMTk0QTQwRUQxNwotOjEwOTM1MDAwQ0IxMUEyMjNDNEIxQkY5OTA3NENEMkUzODEyNjFGQzUwQwotOjEwOTM2MDAwRTlEMjREQkUyMEQyNzFBNDdFRDI0OEQ3NjFFMjU1NzNCNgotOjEwOTM3MDAwNUU3N0MzQ0ZFRTc3OTc5OUM2RkJDREEwN0M3MEZBM0U5RgotOjEwOTM4MDAwRUM2MzdBNjJGNzBCRTM3RDU2MzlFMTQxRTM2NzRGMUVFOAotOjEwOTM5MDAwNDc4Q0Y5MzI2ODk0REUyNkU4NkNEM0ZENTg4NEVCOUQ0NwotOjEwOTNBMDAwOERDQzNGQzQ3ODYwMjE3QzM2OUU3NzZENkNCODc4ODIxNgotOjEwOTNCMDAwREFEODk1ODA3M0YwOTk0RTYwQkM1NTZEQ0M4ODY3MUZFNAotOjEwOTNDMDAwQkRGN0MyM0Y4RjQ2RDFDQzVDQjkyQjM2N0RDQzk1RjUyRAotOjEwOTNEMDAwMzk3Q0JDRjAxMzY0OTVFNEZGNTgwNUZGREUxNTdCNEEyOQotOjEwOTNFMDAwQkYzMkVDNkM0RkYyN0VENzNFNUZFRkZDRUVBN0ZFOEVGNQotOjEwOTNGMDAwNTVEQURGRjc2QjU3RDZFN0E5M0Y4OTdEQ0ZDMzk3QTUyRAotOjEwOTQwMDAwMzJEN0MzNEZCRjEwNjhGRTFBQ0FBN0EwRUZFRTE3NUU4RgotOjEwOTQxMDAwREI3QjI2RDJGQjgwMEMyODBGRTk3RENEMjQwRjI4N0YzMwotOjEwOTQyMDAwQTg0NzlFNjJGMkQwQ0ZEQTFCREJCMkUxMzdDRUY5MUMzRgotOjEwOTQzMDAwODlCQkNCRTk0Njg2NDAwM0U3MUI3NkY1NUY4MjFGM0Y3OQotOjEwOTQ0MDAwMTVGMURBQkQyMjVFQkJBNzJENDZDRkE3REIwQzdBM0UxNQotOjEwOTQ1MDAwRDU1NjQ3REZCMzZENzEyQTNGRDlENjQ4RTVDN0RCNENGNwotOjEwOTQ2MDAwMkFGRkE4QUQ4NUNBM0JEQjEyNTQ3RUI0QUQ5NTlFM0I2NgotOjEwOTQ3MDAwREE5MkY0QkNBRDZEMTkzREQzNEQ3QzlFNkY2ODRCNTFCMwotOjEwOTQ4MDAwQjlBQjZEMzVENUIzQzdGRjMxQTYzNTlDRjJGN0NGNzVCMwotOjEwOTQ5MDAwRUVGMkM1QzY1OUI5RjlDRUZFN0UzNEU2MkU1RkE0N0Y0MgotOjEwOTRBMDAwRDQ1NTlFQTdCOUNCNzNFMTBCQUVGNjJFM0M3RUI1QUI3RgotOjEwOTRCMDAwN0NGRTQwOTcwQjdFQ0VFQkVFRjJFQ0ZFMDc1Q0YwRTcxNQotOjEwOTRDMDAwM0VFNzJFQ0ZEQ0I3Qzc1NTFFREJFMjJFNDdFMjg3NUNCNgotOjEwOTREMDAwRUQwNTYyRUVGMjU2NTQzRTVDN0Y5MTdDNzRDNTZBQzYxRgotOjEwOTRFMDAwRTQ5NUJGQzFFRkQzODM5RjczN0Q5NzhCOTQ5RkFCN0EzNQotOjEwOTRGMDAwQUE1MTdFNUE3QzcxQ0I0MEY5RTFGMjk0NDY3RDI2MEQ0QgotOjEwOTUwMDAwOTUxMzlCNkYyM0M5OTc4REM3REY1QUFFRkU0NzlFODY4MgotOjEwOTUxMDAwOTdBN0EyRTVBMTQxODk1QjMwNTQxRUJDN0NGN0NBQzc1RQotOjEwOTUyMDAwMTAzRDIzRTRFNTdGRTRFMDFGNDMwRTYwN0UxOUVCQTRDOQotOjEwOTUzMDAwRjBCQTlBQzdFRTIzQkIzNUIwMTVDOEVFRjNBMzBENURBNAotOjEwOTU0MDAwRTk1ODg3Mjc2NzkzRjlGNkMxQUVGNUNEN0Q0NDY2RURGRQotOjEwOTU1MDAwMDRDQUExMEJGNzQ5MDM0QTAxRkY1NkFDNzMwMThEN0Y4MgotOjEwOTU2MDAwMEZENkE2N0QyODRGMTEzMEE2Q0JEMzAwOTZGRkUwOTZFQwotOjEwOTU3MDAwMDk1N0IxRjZGNzA5QjhBRUZCQzE5MjNFMDIzMDZFODJEMAotOjEwOTU4MDAwOUE0NEZGMjY1MkVCRjY3M0Y2Q0EzQ0VFNjEzRkI3N0Q3NAotOjEwOTU5MDAwM0ZEMjlBQTE5ODdGODMwQkVGQTFFM0U2RkIzOEYyQzQ5OAotOjEwOTVBMDAwNTlBREJGNjZGMzQwREUzMjZCREI1QUY2MENENTI2NEQ2MwotOjEwOTVCMDAwRDlDMEZBRTU0NEI3QTUyMTgzRTBDQ0M2OENFNTYzQUZGQQotOjEwOTVDMDAwODI1NUNDNkU2MzlGRTVCMDA5Njg4N0NERjY5OUNGQ0EwNgotOjEwOTVEMDAwMzNDOTNFREE4RjRGREJFRUQ5MjY5RThGOEI3OTc4OTk4RgotOjEwOTVFMDAwQ0ZGQzI1RDI4N0MxRkQ2QTM4MzhCQkRGMTFGOTA1NDlBOAotOjEwOTVGMDAwNEJFMjcxQUJGOEZEMEM0NTdGNzlEQzY1M0ZEOUUzNTM1NQotOjEwOTYwMDAwOTQ4NDk5QzhDM0FGMjNCMkQ4RTdEMUUzQUQzQzNFQTI1RQotOjEwOTYxMDAwMDJFQTg3NDJGMEFGQ0JFRUZEMzFGQjU5Q0FGQzAyMTlEQQotOjEwOTYyMDAwRjE4OEYxN0QyODM4NzE5OTcxRTlEOTQzRjE1MDk1NDQ1OQotOjEwOTYzMDAwMTJGQkMxN0RFQzJEQUM5RkNFMzE5NzFCNDk0NzNGOTI2OQotOjEwOTY0MDAwMjJGMDg5OTk4NDhGQUE3MzdDNTQyNTZFMjZGMkM4RDFBMgotOjEwOTY1MDAwOUYwNDNFNzYzQkY2N0U5QTE0MUI4MEZFNzAwRUJGQjVDQgotOjEwOTY2MDAwQzE0NEVCOTVFOEI3OEU1MTg5NEU5RDExQjdGRDM1NEIzRQotOjEwOTY3MDAwRTE3Mjc2OTY3ODc2RkFGM0RCODcwMDFEREM0RjFFRDcxMQotOjEwOTY4MDAwQTg2MUZCNkIxQTlCMzVCNEFGMEQ4ODZCRTg3Rjc3ODZCQQotOjEwOTY5MDAwMTc5NTBFNjc2RjZGNjhFM0ZCRTNCREE4MEYwM0I4NEYyNAotOjEwOTZBMDAwQUU4QjdERjIxODNEM0JDMzhGQjRFMEJDM0I1QUNGRTg5NAotOjEwOTZCMDAwNTA1REI4OUQ0OERDQkRERjVCNTIxN0YyRUNFRjY2MDhFOQotOjEwOTZDMDAwQ0ZBMDUxRTZEOTA3OUVFMEFBRTcxRkE3RjhFQ0ZENkVGMAotOjEwOTZEMDAwOTA0NkM2QkY0QkUwNkZDMzc1MkIyOTREQ0Y0QkE3OEM2RgotOjEwOTZFMDAwQ0JFRTBFQzREQ0Y4RkVGNUU4QzdFQjk3RjhGQkY0N0M5NAotOjEwOTZGMDAwNzg5RDJFQkExNURBOUZCNTlGRUE1ODM1OTVFMTcxOTY5NwotOjEwOTcwMDAwOTg3MzFFMkMxMUYyQTU4RUQ1NTIxOEM3MDJBREQwRjc1MgotOjEwOTcxMDAwMTBBRjFGNEU1MERDNEIwQjI3MENBOEM5RUREMzZBMzg5NQotOjEwOTcyMDAwMUYxQzc0QkE1MUQ0N0I0MUIxRjc0QjUzMzFGNEFCMjVCNAotOjEwOTczMDAwMjNENThBRjJBNDU1QjE3OTI0MERBRDY3M0YzRjI3RUFCRQotOjEwOTc0MDAwNzdCRkZGMkZDRkQxM0NBOUQwNjg5RTQ4MDY5QjQ3NzlCMQotOjEwOTc1MDAwRkE1MTE0NzNBNTgyNzE1MUQ5NEMyOUI4NkZGMzE3Mzk5NgotOjEwOTc2MDAwOTk2RkJFQUMxMEYzNTk1Qjk4MzBCNDFBREFEQUUzNzkyQQotOjEwOTc3MDAwMjAxRTNDMzYyODdDMUVCRjIxRTBDMTRBNTEzQ0FCNTgxQwotOjEwOTc4MDAwRkNGRkJENDhGQ0VEN0UxOEZFREQwMkZGMUU3QzE2QzIwQwotOjEwOTc5MDAwQkY0QkUwNTMwNjQ2M0JDNTM4MERBRTY3MDEyRTM1OUNFNgotOjEwOTdBMDAwRjkxOEFGODlGRUNCODQ5RTAyRjgyMkYxQ0RGRUZFOTIxRAotOjEwOTdCMDAwRTA0QkIxRTNGOTZBOTFFMzc5MkRDNzhGRkI5MDBGNkMxMQotOjEwOTdDMDAwM0M1Qjg2RTM0NzQ2RTBGMTlBQzJENzE5MkQ5MTMwNjI5RgotOjEwOTdEMDAwMzVCNEQ0RTc5NUFCMUYwQjdBQkQ2QkNCOTVGNUM1NTE2RQotOjEwOTdFMDAwQzlENUMzQTJGRTQ4RTNGODcxOEUyRjNGMTJFMzc4NkMwRgotOjEwOTdGMDAwMzhCRUZDNTBGMDI1MkRDM0VDNTczMEZFNzhBNjU4NzdDNAotOjEwOTgwMDAwNjA5MThCMkZDNzQ1QkJFOTgwQ0Q5NzFCNUM3QzM5MzJCQgotOjEwOTgxMDAwNEFCRUVDMkQ3MjNDQzc3M0UzMzkyMEU0RUMxN0MzRjE2OAotOjEwOTgyMDAwQzUwMUZGQkMxOEZGQUZDNUY4MjlBRTdFQkNGMzlBMEU4OAotOjEwOTgzMDAwMkI0Q0VCRjI2Rjk1OTlCOUZFMTg1Q0JGNjg5N0UwNkUwMAotOjEwOTg0MDAwNTRDRUVEQjBFQTA5RUUxNTdDMkZCNUYwNzU5MEMxQkQ5MAotOjEwOTg1MDAwRUE4NDAzNDg3NEEwRkRCNjE2Rjc0QUNGMDNGODk2NzI1RgotOjEwOTg2MDAwNzNCMzY4RkY3NzU0NkZFMTYwRkI4NzlERjUzNjI4RjM4QgotOjEwOTg3MDAwNkMzQzA2RjA3REZCQkNCRkQ4NzA2RjNCRTE4RTc3NUUyMQotOjEwOTg4MDAwNkZDMzFEQTVGNjEyODM3OEJDRTcxQ0Q3OEYzQjk3MTBEQQotOjEwOTg5MDAwREM5MDdDQTQ1ODcxRjZBQUJGM0M0OTc5N0Q2NTEwNDlEQgotOjEwOThBMDAwNjNEQ0IxNEI0OTUxOUMxOTM3MjEzMDNFQjkyQTEwQTdDRQotOjEwOThCMDAwMTQ5NjkxRTJENDE1OEI3OTNENUREMTI4Q0UxQTgwMTQ4RgotOjEwOThDMDAwREM4OUYxQjk3Mjg1RjY0RDNFQUUyNDc1M0ZEQTExNTI0RQotOjEwOThEMDAwRDJBMjRENTdEMDk3QjQ2M0ZCNjMwRENBMEJCM0YxRDkzNQotOjEwOThFMDAwNTRGMkQ5MUU2QTg3RTE4M0VEREU1MTEyREQ4NTcyNzU2RgotOjEwOThGMDAwREIyNEQ1NDBCOURBMzVFOTI2OEFBNzZGNkFFNzc5ODU4RQotOjEwOTkwMDAwOUIyRTU2Mjk4RUI4Rjk4NTA4QURCRjZCOTVGODI3MTFBNwotOjEwOTkxMDAwREUzMjU1MDNFM0M1QUI0MjdGNzk2RTI5MkJGN0I3OTc0QgotOjEwOTkyMDAwRUFEMjA1MzQwRUMyREJGMjQxNjI0RDgzMjM0RjkxRTE0RQotOjEwOTkzMDAwMUQ4ODUzOUUxREM1RTEzNkI1RjBGRDFFRjY1Mzg5RjUxMQotOjEwOTk0MDAwNTdDRDMzMjhDRTY4QTAxRTYzREZCQjFCNTVCMjVGMzdFRgotOjEwOTk1MDAwNTVENUNDQzVGRTM2Mzc2QTY0NkY2QzVFNThEMzRFNzFGMAotOjEwOTk2MDAwQkNDNjEwQzUzMUNCQzI4Njg0RjFGN0U4QjkyQTMzQzAzMgotOjEwOTk3MDAwNTlCOURDNjg0NzdCMzMzMjJCMDQxODc3MkFBQkUyRkRGOAotOjEwOTk4MDAwNDVDRTAyOEE0M0Y5MjE5REE4NjVDRjY4OEYwQUQ5QjFENwotOjEwOTk5MDAwRDhERUEyRUNFN0QwOUU2OTBDRTgzMkM2RkQyRDczN0ZCRAotOjEwOTlBMDAwRkQzODRBODVFMzNGRjI3RjAxRTJFMzlGMjgwM0QyRERFMQotOjEwOTlCMDAwRTY2RjM0M0Q1ODdGRDhGQ0M2NjhBNjQ4Qjg2QzcxNzAxNQotOjEwOTlDMDAwOTExRTA1QjIzMzhBODA0QjE3MDk5NzI5MTIyRUNCRTFERAotOjEwOTlEMDAwMDI3MEU5QjA3OTdFMTBFN0Y5ODUxQUZCQzNGMzFCMUQwRAotOjEwOTlFMDAwRjk4NkQ1REM3RTc3REEyRDdFQ0ZGN0QxRTY4QjJFRjdBMAotOjEwOTlGMDAwNDdDQTY5NUU5RTBCRTdGMjdDRDFFMUVCREI3OUEyMjNEQgotOjEwOUEwMDAwOEQxN0MwOTdDMzUzMUUxOTdFQURCMEZCMEE3REY3OEYyQgotOjEwOUExMDAwQkIyOTg2RkFBQ0JCRTJERkM0RjM2NkZFQUMxNEVGMkJDNQotOjEwOUEyMDAwNTdDN0NDMzAzRUM1RjdDQTlCNUJDRDNDRkQ3REMzQ0Y0RAotOjEwOUEzMDAwRjU3MDFEMjQ4NkU1NDM5OUMwRkYxMEMzMURGMzdFRUEyRgotOjEwOUE0MDAwMTQwNjFGMjkwQ0FGOTZGQjg2Q0RCRkQ0MTRBQjk5RTY0NAotOjEwOUE1MDAwRUQ0MjFGQ0REQjAwMkEwMzlDMzc1NTdDMUVGQjIxOTU3MAotOjEwOUE2MDAwQTgyNTNENjM0NjJCMURGM0M3REZCNDg3RTZDRjdGNTc5QwotOjEwOUE3MDAwQ0EyMDM1MTI3RkUyNDg0N0FGOUM3OEU1MjIwMDhFNzJGQgotOjEwOUE4MDAwRjVBOUNCQzkyMzdFOTE1NzdDOUFFNUM0REYyMzE3MzUwRQotOjEwOUE5MDAwN0ZGQ0U5MjJFMTMyNDVDMjY1OEI4MzUzN0JBNEEyRjRBQgotOjEwOUFBMDAwOEE5QTJFMTIyRTUzMjQ1Qzk2QzNBRDlEQURGMkY1REMzRQotOjEwOUFCMDAwM0FENjgxNzkwMEZFRjMzNDU3NzlFRDc5MjFGN0Y3MzlGOQotOjEwOUFDMDAwNjE1N0I5NkJBNkJCQkUzQUNCNURCRjZCOTZCQkJFN0E4NgotOjEwOUFEMDAwMkVBRjFGNTY3REYzNzA5RkJGRDg3OUYyRUE0OUNFOTMxRgotOjEwOUFFMDAwM0E2RDc4Rjg0OEUzMDhGMzRBRDM4MzU4QkY0QzMxMjBFNQotOjEwOUFGMDAwNUI0RUVCNTU0NkFDNUI3OUY3Qzk2QjU0M0VGRkE3Rjg1QwotOjEwOUIwMDAwRjlCRUZEMjY0NTBGQTIxRkY5OEYzRTRFNDVFNUY4REE1NgotOjEwOUIxMDAwRTMxRDA5NUY1QkZGQkUyNjBCN0JBQjQwM0UzOEM0RjhGQwotOjEwOUIyMDAwQjkwODNGODRFMjY4RTcxOEYzQjVFNkRGMzAzQUZBOUZGOAotOjEwOUIzMDAwRTFGOUYwREU3NjVGNTQ5MzBEQUFDMzJGNjZGNjE5MjQ3RgotOjEwOUI0MDAwMUQ3MTk4OEIyQjE0OUU4N0MzRjg4MEY2OTAwQTg5MTY5NgotOjEwOUI1MDAwOEMzQkFGQTlGMjkxM0RBMjg0NDc1ODM3QUExQzdBMkJCRgotOjEwOUI2MDAwNEZCRTVFMkUyRTA1MjY5RUIzQTA0RjA2QzBEQ0Q3NzlEMQotOjEwOUI3MDAwQkZBMTM4MTBERTExRTgyNzY3QkExNDUzRThDRTA0MThFNQotOjEwOUI4MDAwMDM4NkM0OTNDMTc4OUUwMDQwOTM4RUZBQUMzQzc4QkFBOQotOjEwOUI5MDAwREI1RDQyRUQ0QUU2MjZGOEEwNjQxNEVEMkFGRDk0NDcwOQotOjEwOUJBMDAwNzNEQURCMUQwMURGMjBEQzRERUQzMjJGQTlGQzgzQjEyMAotOjEwOUJCMDAwQjk3NkZEQjExNEJEQzRGQzU5RDk5MTQ3ODdFNzI1Mjg3MgotOjEwOUJDMDAwMEZDNTE3Q0Y1MkRFQzM4NDI4Rjk2NTZCQ0I2RjcwRTVFNAotOjEwOUJEMDAwODk3RjQ1QUQ3MUM1ODc1NEJERUI4QjEyRUVFMzU2NURCMQotOjEwOUJFMDAwNkZGNjBGMjNFNzFENEM1RDUxN0NBNDZBQTlEOTVGNTcxRQotOjEwOUJGMDAwMTg2RTMwN0YxRkYzNDBGM0NDODMyRTM1OTk0MUZCREQ4NwotOjEwOUMwMDAwOUExQ0U2RkVCQzkyQTI3ODYzQjc1NDM2QkRCNzIxMDcxMgotOjEwOUMxMDAwQTc1NDMxNERDQkYwMEFDNzREMEJGREJERUVCMUJFMzg5OAotOjEwOUMyMDAwREFBOTBBNkNEODI3OURDM0VBQzkwQkUzQ0VGOEE1RjdEOQotOjEwOUMzMDAwQTk1NDI5NkYzQUM3NzM4N0VBQjZBN0Q2OEMyMEVGMjNCOQotOjEwOUM0MDAwREEzRDZBM0M5OTJGMkVGQUEwQ0FGRDYzN0YyOEZGRjcwMAotOjEwOUM1MDAwNTc0MkNEREY1MjJCODZEMkVENDc0ODVGRjQ2RkM3NDBBNQotOjEwOUM2MDAwMEZDNkRCRUQzQzVBQTU2QUNGNzM0ODg3QjUxNTBCNjI2QQotOjEwOUM3MDAwQzM4RDk3Mzk1MDg3MDdGOUMyNThCQzJGNjRFRTUwNjdERgotOjEwOUM4MDAwMEU4QkM3NEU3NTY2MUVGRTg1OEI4QjdGMDNGM0QzNzREOAotOjEwOUM5MDAwMDYyQThCRjMzOTY4MUY0OTRDREU0MzgzRjIxODg3NEUzRQotOjEwOUNBMDAwRDQ1N0NDRkZFODY1N0MwQkQ1Qzc2MTJCMkJDN0U2Njk4MQotOjEwOUNCMDAwMDk4NUQ5NEJCNzM0NkMwMThDNUJGQjk5RkQ0NEZFODk1NwotOjEwOUNDMDAwRENDNEVEQTczQTZFMEY5OUVDMEY4RTIzREEzNEJDNUQzRAotOjEwOUNEMDAwMkQ3QkNBMDc1NEI3M0RCNEE2NkQyNzM4RjNERkJDRTcyOAotOjEwOUNFMDAwMkRFQ0U3RDY1MEYzRjNGOUU5NTE5QzNGQkM5OUM5MEIzMQotOjEwOUNGMDAwMzNFRTYwNTM5QjQ2Q0Y1QkRCNzQ3QURFRDIxNkEzRTc2QwotOjEwOUQwMDAwRkEzNjgzRjJGMzNCREJFQUE4RkM1NUFDM0ExQkNGNDVBRAotOjEwOUQxMDAwQTU3QUFBMTlGRDdBNjI1QjlGNUJDQTVFNkQ0NkRBNTIyQwotOjEwOUQyMDAwOUMyMDMzMEZFREU0NUUyQzUzQkUxRjczMDNCMTNDODlCRQotOjEwOUQzMDAwN0Y3RkFGMkIzRDBGRTMwREJENDExQjdFRUQzQ0QzNTUyNwotOjEwOUQ0MDAwQkU3M0NENUM4NDE3NzE4NjQ4Rjc3REYzRDBERkRGM0NBRQotOjEwOUQ1MDAwQzlDRTQzMzNCNTRGMzhENkJEOUEwMDNGQUY0MkJFMkI3NAotOjEwOUQ2MDAwRDVFRjU4ODNGRDA3MTVCQkZDM0Q2QTNGNTcwNjEzRjEzRAotOjEwOUQ3MDAwMDk2QUJDRkNEMUMwMEVDMjg3NTQwMEVCRUZFMzgxRUY0RgotOjEwOUQ4MDAwNTM3OUYzMTQxRUVGODdDNThCNDZBMDIzOEZFRkFGNTE5NQotOjEwOUQ5MDAwMEQxRUVGNUE1QzQ2RkI0NzJBOTM5QjFBRjY2QUYzMTg4RQotOjEwOURBMDAwODE3NzkxRUQ4MDkyRTRFQjlEMzhERjU3NzhERThDQjBCRgotOjEwOURCMDAwQUUwOTNDNDY5RTBGMjZDNUQxRUQ3MzZCQ0EyRkYyQUY5QwotOjEwOURDMDAwRDNBN0JCREZDREZFRDFEMTQ1NkI0QTlBRDg3Q0I0QTVEMQotOjEwOUREMDAwMkY4QkFDRkVCMTlBOUMxM0MwN0RBNEY5RkI2ODU5NTEzRQotOjEwOURFMDAwNjM1OTZFMzcxNEQ5RkZCODgwOUQwNzk5MjRCRkM5QTY1RgotOjEwOURGMDAwQjdBMjczRkI2Mzg1ODc5RkZFNzJCRTZGMTcxNEU3NTM4QwotOjEwOUUwMDAwOEFDNUZCNzNBQUU4NDdCNDAzMEY0REFGMUNDRUNFMkExOAotOjEwOUUxMDAwNUZFODQzNjM2QzUwNkY5NENEMEZCOUNBN0E1Mzk5MDhDOQotOjEwOUUyMDAwREFGMDcyQjQ2MTgyQUIxQ0FFQUY3MTk1RkRGQTg3NUQ1QQotOjEwOUUzMDAwRjU0Rjk2NUZBREMyNUVCNEUxM0ZFNjE5NTdCMzc3OUMyQwotOjEwOUU0MDAwNDVCNkZCNjI2OUUyNUYwMjMzMzE0RTA1NzUyOTQ2RDc5QwotOjEwOUU1MDAwM0IzRUYzMDBEMTNGMzQzODVGMTc3NDlBNEQ5NDJGMkU1OAotOjEwOUU2MDAwRkM4QTBCNzk1OUI3QkY5RkQ3Njk1NkIxQjI2MTdGOUYwMgotOjEwOUU3MDAwQzlCRjlCRjZGN0U5QkM2Q0Q5REYzRkMyRTFEMTVGNjY5MQotOjEwOUU4MDAwRTU4RUVFQTk5RDE2N0U4NzBFOEFERjQyNTUwQTE2MzlBOQotOjEwOUU5MDAwRjQ0Qjc4N0M3MzE3RTIzNzdFNDkyNjY2QjFGN0JERUY0NQotOjEwOUVBMDAwQ0I1QzZFMjExRDczQzJEREE1NzEzRkUwMjc1M0JFMTY0QQotOjEwOUVCMDAwQzNCOEU1QkFBOTBGQzQ4MEY0OUU5NDc3NUZGMEQ5MDBDNwotOjEwOUVDMDAwQ0YxQkFCMEMyNTZFNDczOTY2N0E2RDAwRjMwNTBGM0Q0RAotOjEwOUVEMDAwMjAxQjdDNUQ1MjVFQzI3NUQxNjdGMTdDN0QxNUUyRkI3MwotOjEwOUVFMDAwNENCNDhGRUE3OERDM0EyNEJFMTMxRkFCNzNGMDgzN0M0QQotOjEwOUVGMDAwRjU5NDNGQTJGMUY1RkRGNzk4NjRDOUM2RjNFRDUyRjM2RQotOjEwOUYwMDAwM0VFQTE3MzI1MjBCOUJGNzU1MTYwQ0UwRjkyNDEwRjY3NwotOjEwOUYxMDAwREY0NDVFMTVDQTEzMTk4QUY3NEQ2MkY0QzQ3REY2Qzk5MQotOjEwOUYyMDAwOEIwN0RBRkQ4Q0Q2QzYxMkREODc1M0E0NjY2OURDMDc4MQotOjEwOUYzMDAwQTQwNzZDN0I3MkFDRjQwMTdCN0UxN0Y5ODU3QUY5Q0JCMAotOjEwOUY0MDAwMjlDMDc1N0NFREQ0MDc1QTkxMkU4MUVDOTdDMDYwNzRCRQotOjEwOUY1MDAwRkJENzQ5MjkzMDE4QkRERjBFNzBCQzAyNEJEMjQwN0FDNgotOjEwOUY2MDAwQkIzNjRENzRGNkQyNkJERDIwREQzMzJFQkFGRjRDRDRGOAotOjEwOUY3MDAwOEYyNTc5QkQ0MTM4ODVDMTlEM0QxNEFFMzc5ODlFQUI4NAotOjEwOUY4MDAwQTIxRDM3ODVEM0QxREJDRkQxMDBERjFGRjFFMjYxQjc0RQotOjEwOUY5MDAwRUI4NURGMTQxMEZCREI1QTg2RjYzOTdFMzJGNUE2MTgwNgotOjEwOUZBMDAwQzZCN0JCQTczMEZFRDcxN0U2RkZBNjAwQ0ZCQjMyNEUyMQotOjEwOUZCMDAwN0M5OUY0NkZFRkE0REI2ODVGNzM1REVEMTZCMjJCOEZCNQotOjEwOUZDMDAwMzI3QjAyRjMzNjdCQUJGM0Q3RUY2RUUzNzkzMjE3QzIwNQotOjEwOUZEMDAwREQyRDM1OEMzRkREMDc2NDhBRDc3QUUxQkUxMzcwREI1NwotOjEwOUZFMDAwQ0Q1QTk1REIyRjY0RjJGNzRBNjBFNkM4RjIyNzQ3QjZGMAotOjEwOUZGMDAwRjI3OTM5NEFCOTUzNjk4QUUyQkMxQkRGODlGQ0Y1OEJENwotOjEwQTAwMDAwMzI3M0U2M0E4NTFENDBFQjZDRTVEMjM0MzhGMzFFOEY4RgotOjEwQTAxMDAwMDk3RTNEMkRGNDc0QjA4QUNCNDdBRkRGOTI5Q0ZDOEI1OAotOjEwQTAyMDAwQjFGNzczMURGNTBBRjFBRDkwM0NGQzU4Q0M4Nzc3OTVEQwotOjEwQTAzMDAwNzgyQjE5MDE0QTRBQ0ZFNzU3MkJCMTdGRkVGOTdDQzcyRAotOjEwQTA0MDAwNzlCMDRFMjVBM0U5ODg3RkRENkQ5MkQzQkVGRDg2OTk1OAotOjEwQTA1MDAwOEM2QTBFN0YzNjE0QkJFNEU3RjNEMTBGNTJFMjc5RkQzMAotOjEwQTA2MDAwRjVGRjY1OUE2NURBNENCNEIzNjA0NjJEOUU1QjUwQUM0MwotOjEwQTA3MDAwMDBDMkFENTdCMjJERTQ1RkQ0RkEyODZFQkVBRUVBODZCOAotOjEwQTA4MDAwQkRENTM4RUU3QTVGMUNDMUQ2NTQzREQ1ODJGNkM1QkEyRgotOjEwQTA5MDAwREE0Nzc0QTREQjJCRkFBMjJBNkMyNzEwNTM2N0Q0OEVGQwotOjEwQTBBMDAwQTVGQ0VGMDQ4RTNCNUNDRkRBNzVGMERCRUUzNzIzRTRFMgotOjEwQTBCMDAwRkM1RUREQUM0MTdDOTkzRTM4NTNGQjFCRTg4Mzc3MjE4NQotOjEwQTBDMDAwMUVFM0M2MTZBMzczOUU3NTcwMjg5RDc5QkU0MDc3RDU5MgotOjEwQTBEMDAwMTAzQUNGNzFEMjM5ODA3NDlFODFFREM2RjNDNjMxMTgyMwotOjEwQTBFMDAwOUQyRjc0RDExOTE4OURDRkNFRDFCOUI3OEFEM0I5QkJFMgotOjEwQTBGMDAwNkU0QjRGOEQ5M0NFNzU0RkVEQUQzNkIwN0Y0RUU3MDc2QgotOjEwQTEwMDAwMzU3RTdFMzc4NDc0NzZFMEU5QTU3MzU4QjJENzlGQkE1RQotOjEwQTExMDAwNEVCNDNGQkQ3MkNGRTg3RTI5RTI2M0JGRjc2OUZCQzg0QQotOjEwQTEyMDAwRUUwQzhGNEY3QzgyRjhDMEZDNjU5NDgzM0JBNDgyRUJERAotOjEwQTEzMDAwRDIyNzExNkVBNDc1Njk3RDgwRUY1N0RFQTU3MTM5Njc0RQotOjEwQTE0MDAwRUQ1Rjg5RkQ0MkI5NjhERjVFNkZDNTdBNzg5OUI2NkJCRAotOjEwQTE1MDAwMUVBRTg3MENFRTZBQzI0MzRGOTEzRjNDMDg2N0MxQjAwOAotOjEwQTE2MDAwRUIyOEFCQjc5Q0RBMEY3QkRBMzc2MTU0RUIzMTZCRTc0NgotOjEwQTE3MDAwMjY2QTQ3RjNGNDZGQzAyOUFERjNBQ0RENzYxQTk3RTI5NwotOjEwQTE4MDAwNjlGNzM0REIxM0FDOUY4RDlBRjAzNzVENzRGODJCREJFNQotOjEwQTE5MDAwMzFCMUE0NDcxRTk0QjQ0QkVGRDlGMjUwQjlENDBENTc0NgotOjEwQTFBMDAwNzg1RDRCRjM3NTZEQTg1RDQzNzJGQjZDRjdERURERThGRgotOjEwQTFCMDAwOUZCREEyOUJGRjA3RjkzNURBNzk2MERCODE5NUExRTRBOQotOjEwQTFDMDAwQTM0ODJGNjYwNzUyMUVBOUY1OEQ5MkNDMUE1NjU3Rjk0RgotOjEwQTFEMDAwMjAxREU1RkJGMEVFRjU2OEJDNkQwRkQ1RjI3NTIwMzg1QgotOjEwQTFFMDAwQ0E3NUU5ODAyNkYyMDRDNzMwMUQ1NUNBOUVGRTQ0NkIyRAotOjEwQTFGMDAwQkU3OEMzMzMwMkNFNkIzN0ZGNTZDQzI3MDUxMjE0NjdFNwotOjEwQTIwMDAwRUI4QzVEQkVCMzlGRjFDRTZDNDk0MzNFM0RCRjM0OTRCMQotOjEwQTIxMDAwN0MxNkU5QTNFQTI5OTM5NjU3MTEyNzI5RDQ2RTc5QzJBRgotOjEwQTIyMDAwREFCNUI3ODFGNEVFODAzQzQ2NTQxOEM3NEQ2QjhDQ0I0MQotOjEwQTIzMDAwNDUxOUREMEU2OTE0NTI4QjYzOUNBRDYyQjEzNTE3RjU3QgotOjEwQTI0MDAwNTgxNTkzMTc4NDFGRDdCQTRGNEFFNkRCMjcxN0Y0MUUxOQotOjEwQTI1MDAwOEI0OEU0RjE1RkM2N0Q2QTU2OTJGMkUyMTYzNjhDRTBENgotOjEwQTI2MDAwREZGMEZDM0M2NjNGRkMwRUM3NzU0ODRENUYzMkM1NDFEMAotOjEwQTI3MDAwNzc5QjRGNUY5MzEyOTc1RTg0RkFGNDdDQ0VBN0QyNTFGRQotOjEwQTI4MDAwRjJFOUNGQzJBRTg2ODVFNTM0RjgwQjRGNUM0OEU3N0YzNAotOjEwQTI5MDAwODIxMTVGMDJFM0YxNDE3RjVBMkY3M0M4RDEzODFGMjQyNgotOjEwQTJBMDAwRkI0NjgxN0YxMzBDRUNGRTAwRkRCRkIwOEZGQ0RFREVCMQotOjEwQTJCMDAwRjA1NURGQzZGQjc5MkM1RDhENEYzMTcyRkRGNkIyRjU5RQotOjEwQTJDMDAwQkVDQ0IxRkU3OEUzNTY4M0ZFQjQ4MDJGREMyRjg3OUI5MwotOjEwQTJEMDAwNjI5RDRCRkJGRUI5RkI4NURDNzkwODRDQjBFQTMwN0YxMAotOjEwQTJFMDAwNjg5NUNDRTNFODc3OTQ3Qzg1RjIxMTU2NUIwMTNENTA4QwotOjEwQTJGMDAwNEVFQjE4RDk3RkVCNDQ1RTVCQjdDODZCNUIyQkYyREE5MQotOjEwQTMwMDAwRkNENkFBRUQwOEJGMTkyMDgxRjFDOUY2RjM1M0I0RUZDQQotOjEwQTMxMDAwMUY1NTM0QkQ4MzRFMENBNUNFQzU3NTIyNUE2RUNGQ0ZDNgotOjEwQTMyMDAwQzdFN0EzN0QzNTU4QjZFRUVFNkM2NkUzOERDNkVDRjI1QQotOjEwQTMzMDAwRUQzNDdGM0JEQkI5QkVGOTRDRjA1N0YzNTFERjE4RTI0NwotOjEwQTM0MDAwM0NENkU2QzY0NUE1MzA0QzVDMzI1Q0VGQ0VBMzBCRDVCRgotOjEwQTM1MDAwODY1QzY1QURBQUNDNTU1NkNCMjcwQ0JCN0ZCMTBGRTMwRAotOjEwQTM2MDAwNDUxNTM4OUU3RTg4MjM5RTA1RjI4NkE3MDY2NTgyOTM1MgotOjEwQTM3MDAwRTU2OTAzNTlDQzNCOThBM0M2QjcxODc4Q0VEQTlEQ0ZEMAotOjEwQTM4MDAwRDkxM0U0RjZFMDhGMzAzMDM0MTNERDJDMjExNzhEN0NBNwotOjEwQTM5MDAwN0ZCNTY0NzY0RDFGRUUwN0MxMTgyRTE3OTgyRkU4OTRFRAotOjEwQTNBMDAwODc0MjcyRjFGN0E2OEZBRkU0NzAwQ0YzMkY2RUU5ODg0NQotOjEwQTNCMDAwMDJFNkJCREMzMkZCOTdGMUFDODE3QUI1M0Y4Njc5MUFCNQotOjEwQTNDMDAwNkI5ODI2RTk2MERGMzdDRUZFQTU5MTJGQUVEQ0FGMjU3NgotOjEwQTNEMDAwOTcwNTkxN0VFMTA0RDk1RjkxODYyNDNERkZERUUzMUE2MwotOjEwQTNFMDAwODk5Rjc3MDVGOTNBMzc1NUYwNTM0MTdFMzZFNEY4QjkzRAotOjEwQTNGMDAwQUU5MUYxQjMyMTM3Q0ZENzI5NjlBRDE4N0U3RTBDRkIyMgotOjEwQTQwMDAwOUY4OTdBRThGN0U0QjdBRDZGRjRCNUEwMUUzMkEwOEY0QwotOjEwQTQxMDAwRjI3MDM3RDZGQjdDRDhGRURGOEIyRTM2NUVFMUQ5NEM0RQotOjEwQTQyMDAwM0YxMjlGQjIwOTVDMTczNkM2MTUxRkVBOTE3RjM4Mzk3MwotOjEwQTQzMDAwRkM0QjNGQkQyRjQyMEU3Rjk4NEYwRTk3RDlGMjUwQjI4MgotOjEwQTQ0MDAwQUYzNTVGRkVEREQ0QTBFNEUyRDcwNkU0MTdBNzRCMEJERgotOjEwQTQ1MDAwQTc4QkVGRUY0Mjk3QzFGNTQyNEJBRTQwQjk1OTE2NTM2NwotOjEwQTQ2MDAwQzlFRjU2Q0E3QUJBNjhERjg4QUQ3QkI4NkY3NDlENkM0NQotOjEwQTQ3MDAwMUFCOEVGMDRGRkUxRTdGNzM1RTFCQUVENTg1RkRFMEZGOAotOjEwQTQ4MDAwMDY3OTNCRjI4NjA1OTRGRkMxODY4NjdFMTkyQjdGNjg4QwotOjEwQTQ5MDAwRDg3REQxOEM3RkMwNzk4Rjg5MzczRkUzNTBEMEJERUYxNQotOjEwQTRBMDAwRjQ0RUQ1QTI1MkU0NTdBMUY2REU2Q0RCQUJFMzM5NUI4OAotOjEwQTRCMDAwM0I0RkMzRkJGRDNBMTk1MkY5Q0UyRkZBRDEyMDI2M0E3MQotOjEwQTRDMDAwRjRBOTQ0ODc5QkQ5NUEzQjBERTlGMUExRjk3ODNFQjMzMQotOjEwQTREMDAwQkJBQTYzMUNEOTMxRTI3Q0MzNzVEQjlFRDExNTA3OUVGNAotOjEwQTRFMDAwRDcyOTZDRjk5QjNFNzQzQzM2N0RBRkMzNjVCMkNDNTEyNQotOjEwQTRGMDAwM0ZCM0Q3NTVERjVCNkZCMDNENTE5RkQ5NkRDMTEwN0IyNgotOjEwQTUwMDAwOUE0QTZBMkZFRTNCREJFNzM4RDQ2RDczQjNCNDZDMTYwRQotOjEwQTUxMDAwQzA5QkYxRjE5NEYwMkVGNjNDQzczQjVCRDc3NEExQkYxMgotOjEwQTUyMDAwOERGNkQ3Nzk0QzRFNUVGQkFFMUNFRjYwNUY5N0REN0RGQwotOjEwQTUzMDAwRDY3QzNDRTc3QTA4QjhCQ0Q4RkM3OTYzRUI5QTcxRjkxMQotOjEwQTU0MDAwRTRBMjEwN0YyRTBFRkQ3NUU0NkI3QUM4MjM1RjdEOTcyMQotOjEwQTU1MDAwOTU2NkUxRjRDQjU3QTI5MDdDMDlGQTFDRUVFM0Y0ODBGNwotOjEwQTU2MDAwM0JDN0U2RTU1M0ExRjEwQ0YyQzlBRTI3RTRDQzVCQkZEMwotOjEwQTU3MDAwNTAzRDI2NTc4QjQzMzM1MUFFQjJEMTM5QzVDODk1QzAzMwotOjEwQTU4MDAwRDdFNkRGQTlFMjNCOTI1QzY5QUI2NTAzQ0Y3NTU1MkIzQgotOjEwQTU5MDAwMDlEMjlCM0RFNTFEOTZCOEY3OTFGMjNFRTVGNDM0N0U3NQotOjEwQTVBMDAwQkZDQzYwN0UzQjY0RDE5RUQwQ0E0REIyQTM0M0UyRkVENQotOjEwQTVCMDAwOUU0MEFENUI2RjJBMzFGN0Y5ODk1ODZCMjI2QkI3OEJFMAotOjEwQTVDMDAwRjE0QjZEQjU0QUZEMEVFRTIzODcyMTFCOEM2Mjk5RUY4RQotOjEwQTVEMDAwOTdBMkZBNDNCRjIyMDA3NzUxREM5M0Q1Q0IxQkY3QjQ4NwotOjEwQTVFMDAwOUY4QUM4NUJDMzlDNUVCQUI3MEQzRTNENDI5RThCQkI0MwotOjEwQTVGMDAwOUZEOEUyRTFGMzZDQkNGMDEwNTY4QzQzMEVCQTE3QUU1NAotOjEwQTYwMDAwQTdDMDIxODc5RjczOUJCODc3RDRBNkJGQjlFRDRBQ0E2QwotOjEwQTYxMDAwMkYwRjgyMkY0RUZFNDFFQzI2MEJGREJFMkUzMTlGN0I2RAotOjEwQTYyMDAwRjAzOTlCQ0VGM0VBRTRBRjE5N0NCRkM1OTJBRUE2MzhGMQotOjEwQTYzMDAwODM3REZFQ0NFRUNGM0U3NzY2QzM4REM0RkY1NTM4OUYzOQotOjEwQTY0MDAwRjJDQ0VGM0QyMUVFOEYxREZCNEFFQUY3RTg4NzU4N0ZGOQotOjEwQTY1MDAwMDIwM0VGQzk3Q0FDRUQzOEVENTc1RjkwN0Q0M0M2RjgzRgotOjEwQTY2MDAwRkUzM0ExNzEwNDc3QzE0MEJGM0NDRjMxMkYyRjEwRTdEQgotOjEwQTY3MDAwMzkwMEZBRTQ3Q0U3QkRGQzU2RTAyOTk0ODcyNzBGNzM4NAotOjEwQTY4MDAwN0ZFQ0M5QzNFRjkwMURGRUU0MUY3QzE5OTRCQjI3OEY5QwotOjEwQTY5MDAwMEY5RkZGRjA5OEYwOEI2Q0I4QzdGRUMwRURCM0M3OTQ2NgotOjEwQTZBMDAwQkU5MjdDRjY1REFFRkYwQ0Y3MDcwRkJCRTUxNTk0M0UzRQotOjEwQTZCMDAwMTlFNUU1RDg5N0Y3QzkxODFGNzhBQzREOTM1RTY2RkE4RgotOjEwQTZDMDAwRTc3QzMxQ0UwQjBFRjdDQkU4Mzc4RDM0QUVFRjc5Rjg1RgotOjEwQTZEMDAwNkI4RjczN0IxM0I3NDdCNzM3QkQxM0MyRjhGRkY2Qzc0RAotOjEwQTZFMDAwRjk3ODhGOEE3M0IyODVGMDdEQUE4REU3Nzk2QzdGM0MwQgotOjEwQTZGMDAwM0YzRDlBQ0ZFN0ZFNzFCM0RGMjhDRjZCRDc3QUNFNUJCMQotOjEwQTcwMDAwQ0REMzY0RjczOUFGRDM4Q0RGRUUyNjZFNzdFRDU2RTIwQQotOjEwQTcxMDAwRTE5M0MxQzc3RTVGRDIxNDk3NzBCRDJCODVDQ0RFMEY0RAotOjEwQTcyMDAwNTUxMzM5RjczQkUzMjJBNTA3QkZERTdFMzVFNkI3NUU1QQotOjEwQTczMDAwMTkzNkE1MTg5NkVGOTIyNkIzQjIzRTQxMDY3RjBDRjM2OAotOjEwQTc0MDAwMzdERUM5QkVDMEYwNUZEQjVBNDJGOTFCOUQwREU1RUQ1NwotOjEwQTc1MDAwNzg2RTczRUNGMkRBNURCODhGREM4QjExMTVDQTVCQjhEQQotOjEwQTc2MDAwNkIyREU2MjE3NEUyN0Y1OTM5QjAzRTdEMTE5RDkzMDAzNwotOjEwQTc3MDAwQUUwRjk4NDU2QjI4RTNDNEZFNDY5RTc5MEVCOUZDMEVEOQotOjEwQTc4MDAwRTk4MzQwQUU1RTIxN0FBOTlFN0M5MDAwMkMxQTVFNEYzMAotOjEwQTc5MDAwMkRFNTdBQ0Q2MjdGM0VBMDczNTJFRUZDREMzMTJEQUEwRQotOjEwQTdBMDAwOEI3RUE1OUVGNkNGMkVFMUYyMzg2MkZFRjgyOUY2NTM5NQotOjEwQTdCMDAwMDY1QjM0ODNEMTVGQURGM0U5MTk4NDg3RjgxOENDMEZCOQotOjEwQTdDMDAwMkM1OUM4MEMyMDNDMUYxMEQzNzdGOThDOTFFOUJFMTY4OAotOjEwQTdEMDAwQTA4NUM3QjdGQkMwMzlCRjlBNEJCODdEM0ZFMURBREIzNAotOjEwQTdFMDAwMjVGNDIzOEVDNjk5MTQ0Q0MzRjJGMTc4QkU3OTcxNEJDRgotOjEwQTdGMDAwOUJGQjNFOTE1QjFBMUUyMUJERDgwOTk5MUU1QzRGQUM5NAotOjEwQTgwMDAwMDYxRkFENjdCRDc1RkI3NTY3RkQyQjRCMjQ5MTFGNjY1OQotOjEwQTgxMDAwRjMxRjBDNjUxNkRERUI0ODQxMzhBNUNFNjcwNkEzMjc2QwotOjEwQTgyMDAwQ0Y3RkM1NDNENzkxRjgxRjU5RUFBNkZCNjhGOUIyMUM0MAotOjEwQTgzMDAwRjkzRjczNjRGRTlGNkEzRjM2REY4NkNFOEY3NkMxQjdERAotOjEwQTg0MDAwMUIzNUEwRkQ5REUxRjVGQTUwQkU2REExNzVBRUE0MkU5RAotOjEwQTg1MDAwN0Y1RUVFMEQyNTc2RENENjcyRTk1RDBENTIxMDc3RTQ1MQotOjEwQTg2MDAwN0ZDOUUzNjdCNURFMDc4NUZCOTVDQkRERTMxQjhDMzM0MgotOjEwQTg3MDAwMUE5Njg5RkI3RkUzNTkxOUNGNzczMzk5OEU2NzAxQ0ZGOQotOjEwQTg4MDAwRjE5ODgwNzYxMDMzN0ZDODVGOTMzREZFREE2RDQyOEU3QgotOjEwQTg5MDAwMzQzODQwRjVEOTJDQjA3NDVBMzc3ODVFOUE5RDg3NzI1NwotOjEwQThBMDAwOTExQzhFNjM3Q0EyNDcwRkQzQkQ0OEE4MUY3OTlFMEVEMgotOjEwQThCMDAwQ0ZFNzJGRTUyODMxM0I2MDAwMjZCMzdBQTE0QTE5MkM1NwotOjEwQThDMDAwOENFQjM1MDk3QzI1MjY3Nzk4Qzc3RkYwOEQ4M0U4OEY0MAotOjEwQThEMDAwODQxQkRDRjk2OENBQzE5MjE3N0RFN0EwOURFNjM5MEY5OQotOjEwQThFMDAwNzI3MEY5NzJGMjVGM0M3QzFFNkQ3RUZGQzMyNTIyOUY2MQotOjEwQThGMDAwQUQwNEMyNjQxNzg5RkE4NUYyRjQ2Q0JCREVBNkFGNzFCMQotOjEwQTkwMDAwMjI0Mjc5Mzk1RDA3MjVBMjQ3QzVFNEM0N0RFODdGQzFBRAotOjEwQTkxMDAwMkY2NUUwRjk5NzYwRTIzREM2QUI3RTM2OTNCRTBGREQ1MgotOjEwQTkyMDAwMzc0ODU0MjM1RkRFMzg1OEEyNzc1NDE3OTMxNzk5NDg1NQotOjEwQTkzMDAwQjYzM0Y4RUE4MzAxRjI5RkFBNDE2RkQ2QjBCRjdFODk5MQotOjEwQTk0MDAwRjgyODhERDMyODJGNkJENTRGRkRGNzA1ODZDOUNCQjJEQwotOjEwQTk1MDAwRjcxNzA3Q0I0QTlBRjY4OUQ3RDU0RUQ3OUNGQjk3OTUyMAotOjEwQTk2MDAwQTFFNENGNEIxQ0ZCOTc0MUIxOUYzODc0REZGRDc2OTI3OQotOjEwQTk3MDAwRjNEMUVFNkY5NDVGNzYzNzlERUIyRjFGMEY2MkZGRkREMwotOjEwQTk4MDAwRDMwQkQwNEU1OTU3MDFBRUJDQkM3NTk1QkNGQ0VBRkE0RQotOjEwQTk5MDAwMjkwQjcwMUY2NzlEQzhCQkQzMzdCQzczNTEzQkU5REJFNAotOjEwQTlBMDAwMDRDNUY5NTYzM0MxNDM3QUMyNUVCRkI4NEZEMjE4N0Y4RgotOjEwQTlCMDAwRTkzMDdBQzM0Qjg3MERDQTNFQ0E4QkZGNjY3OEZGQzU2NAotOjEwQTlDMDAwNjcyMTlGRTIzRThBQkI3REYzNDZCRUFGNkFDM0JEQTI0QwotOjEwQTlEMDAwMzdGRkExODRFNkFCREU4OUZCRDAxMzkzMjBGMjM0REQ5MAotOjEwQTlFMDAwRkIxRjEzNzBGNTYwRTM5Q0M0MThFNDY3RjQzODYzMzEwRgotOjEwQTlGMDAwNzRBMEY4NTQyRkU5QUJDNEY1Nzg2REY5MjM2M0Y4RjkyNgotOjEwQUEwMDAwRkVGOUZBMjFCMkNGNjVEQTg3MkU4NEFGRDcxRTJGMzQzNAotOjEwQUExMDAwNUU3QjVGREQ1QkZGRjYwOEJGNEZENUJCRkZFNThERkJCRgotOjEwQUEyMDAwREM4N0Y0NjU3MDNEQjhFRkY0MTFGNkY0NjdGMkM2QUQ1QgotOjEwQUEzMDAwNUUyREUxRjFFODRFNjM0MUUyRjMzODJFQzU5Q0ZEMkExQwotOjEwQUE0MDAwQTM0N0E2M0M0QTdFQTJGRkIyRkEyQkYwOEEzRTFCREU0OQotOjEwQUE1MDAwQ0U1QjUzODRERkU2MkY0RkQxQkFBNjY4QTY1NkM3QzY5MQotOjEwQUE2MDAwQTExRDkwNzE2NjgxOTY2RTI3N0Q2NURGRkY4MDY0NUQxNAotOjEwQUE3MDAwN0MzNjFGMkY4RTJCMDBEQ0ZFQzVGMzA5MUYzOEM2MEQ1OAotOjEwQUE4MDAwMzE0N0JDMEJGNThBRjBEMzRFMDNCRkE3ODc2NzBFRTVBRAotOjEwQUE5MDAwRUZEQzFFOUU3NzFFNUJDNkNGMzM0RDU0RjJGMzdCRkM3QQotOjEwQUFBMDAwMTJEREM3RjdCOTRFMkY5RjBCRDUyRkI0QkY3OUZCMkQwMQotOjEwQUFCMDAwRUEwMkI0NTNBNkU4QUJGNjRFNjI3ODc3NTlBNTQ5RENCMgotOjEwQUFDMDAwNzczOUU2NEZEMTNEMzlCREZGRUE4MzJEODBFMzFGN0UwNAotOjEwQUFEMDAwOURFQkY0QUM3MzhBOUVBMEZCRjRBQTUyRkE3NDlDRTYzOAotOjEwQUFFMDAwODVFQTdEMkRDNUZEMUNFRkZCQ0Y4N0Y5N0FCMzI5NTU4QgotOjEwQUFGMDAwQjYwOUYzMTlDQ0E3NTNCQkZDRTg1N0M2QjhERjZDRkIwQgotOjEwQUIwMDAwRDk0QjQzQzlDRjg3MURGQTY4Q0M3QzJFM0Y1MzkyNTc0RgotOjEwQUIxMDAwRDBGQzNGNTYzMUZDM0QwQkVCM0Q3ODk3NDBGRUZCNUQ5MgotOjEwQUIyMDAwNkY4QjcwN0NBNjE4QUI3OEJCOTM4NjhGQkJEQUY0MzgzQQotOjEwQUIzMDAwREUyMzhCREY4QjAwRTQ4N0Y4OTkwMDI3MTg3REVGMzU0MwotOjEwQUI0MDAwQjg3QzI4MDZGQzE0RTU2Q0IyRTUwM0MzQzBFRjAzRUQ0NgotOjEwQUI1MDAwQTg3N0JGRTY4MzY1RjlGMDY4OEJGMEY5MzVEOTY0QTY2QwotOjEwQUI2MDAwQTdBODg3RjY2OTNBNjJEMEZDMUNCRjg0RDM2OTVEMzUxQgotOjEwQUI3MDAwQzRDM0VDRDUxOUQ4MUVFQjdGQ0YxNDk1RTQ5MkY5QkU2RgotOjEwQUI4MDAwNzQyRjUyNjAzNUQwQkExREE4ODM4QzgxRkIwQUJCQkVERQotOjEwQUI5MDAwOTQ0NTdFQTlGNTEwMEZCMjdBQkJBNzc0RDE3RDJCREQ0OQotOjEwQUJBMDAwMDY5ODc4NkY5MkZGNjYzNkIxRjA3QkFEMkY2MzYyQkU3OAotOjEwQUJCMDAwODk3NTE1N0Q1RkFCRjM3QkZDRDZENjM2MDNEOUIxMzFGMQotOjEwQUJDMDAwNUVENjBDN0VERTY1REQ1NDg1RjBCMEVGMUYyN0JCOTNBQgotOjEwQUJEMDAwQUQwRkZFRkE4MTJDNUU1OTY3QzAzMjZBQzczRjlCRjMwNgotOjEwQUJFMDAwQjVFQUNFMjYzQThGQjY2RUNDMDM3NERGQkZCNTFDRjgzQgotOjEwQUJGMDAwN0VBNkJERUZBQzMwQjk2MkVGM0I5N0U5NzlFMzI3RUY3MgotOjEwQUMwMDAwODU5MkRGNzJDQTgzQTJFRjIzNzkyODk0MDdENzFERTZDNQotOjEwQUMxMDAwRjRCQzRERThCNzYzRkUyQ0RENkZEOEJCRDY0N0Y3QjY2MgotOjEwQUMyMDAwNzhFMTNGMkJFODdGNzdFN0EyOEZEM0Y1RDQ2MjlEQjExRgotOjEwQUMzMDAwQkYxRjJBMzE1Q0Y3NjU1NDFENTc2OTNDMEJFNDlCNDFFQgotOjEwQUM0MDAwNjc3OERGQzNFQzI0QkFFNzA1MkYwNjNEOTMxQUI4QTQ1MgotOjEwQUM1MDAwRDI3MTZFRTU5RTc4MUZEOTQ1QUE2RDE3RDU3MzdCQzY1NAotOjEwQUM2MDAwM0VERkM4RTg5MEZEMjZGQkFFNjM5RTNGRjMwM0M3QjcwNwotOjEwQUM3MDAwRTZCNzhGQkM3RTU5MjFGQkE4QTdDNEZDMTlEMkFCNEIwOQotOjEwQUM4MDAwRTRFRDdGN0RFOTIyN0U2RjY1ODFCQ0ZEM0JDNUY4RUY3OQotOjEwQUM5MDAwOTRBQ0VBMkVENDhGOTNGODNEMzM1RUI4NDNDMjVFNjQyMQotOjEwQUNBMDAwRjYyMEM5Q0QzQThCREZDN0I1OEVCOTNFOEZCMjcyQ0ZEMQotOjEwQUNCMDAwOERGQzNFQkYxRUNCQzdDRjdGRDYwMkM1NDk2MjM3NUQzNAotOjEwQUNDMDAwQTVFNTlCQUZCNjFEQkQ1RURDQUY1NTY4REU5NUE4OTlDNgotOjEwQUNEMDAwNjRCRTc1RTk5RjIyN0M1RjZENkNBMzQxN0UxQjUxNzIzRgotOjEwQUNFMDAwMUMyRTI3OUNFRUY0QzQ3ODVFMUQ1RkI3Q0YwMDdEMkUyRQotOjEwQUNGMDAwRTYzMTZFNUU1ODUzNERGNzdDQjI3NTAzNkRFMjdCQUE2OAotOjEwQUQwMDAwMzNEOUY5Mjg5NzEyRjRERDhGOTU5NDhDQjU5NDk1Q0ZBQgotOjEwQUQxMDAwODg4RjMzN0ExREU3QkFGNUFBMDdCMjc4RUVGREY2MjdEOQotOjEwQUQyMDAwMDMxMDY4NjRFNUY5OUVERjY3RTNFNDBGMkFDODNBRjc4OQotOjEwQUQzMDAwRUY1MzI5MzRCRTYyOUZCNzMyN0FCREU0ODgzNzAzMjRDQgotOjEwQUQ0MDAwNUI3MDNFODVEODdBOEFGMzI2RDg5NEM5RDJFRkQzQjAwNwotOjEwQUQ1MDAwODI4MEUzRThEMTU4MTlGOUQyMTkwMkJDNkYzNjU0MUYyQQotOjEwQUQ2MDAwMEY2M0RDMzZENDNGQjc4NTlFRjU4OTVFOTQ5RkU4RUM4RgotOjEwQUQ3MDAwQUQ3QUJFNzMzMTJEOTE2QTk3REM4N0VCRENGOTlBNDE4RAotOjEwQUQ4MDAwNzFFRTI4NThBNTUyQkU1QTMwQTlFNkJEREZGODUwODlBOQotOjEwQUQ5MDAwQzJFRDY4RDYyNUNFQUIxRTZCNzgzRDdCQUE3MkYxQkFBOAotOjEwQURBMDAwNTg2N0Y0OUM3RjRDNzJDMTQzMjVFQzU5QjVFMDBERDkyRQotOjEwQURCMDAwNzFERjY2QzRFQjVGNzhGOUU4Mjk5RjJBMUY3QjNEN0MzMQotOjEwQURDMDAwMEMzNjcxM0UwMkUzMjNCRjA3QzRFQUExNzMxNzg2MEY1NgotOjEwQUREMDAwOUNFNzJFQzY0NzZBNUNGQzUwOEUyQjc0OEVGNkNFQjk2QgotOjEwQURFMDAwRjlFRkUzMUMxRkUxNzlERDNEMjU4OTRCMjI5NDU3MEJEOAotOjEwQURGMDAwMTJFNUY3MEFCRDcwOTFCQzgxRUUzMTYyRDJDMUVGOEZDRQotOjEwQUUwMDAwNjdGREREOUY0NzNGOEU4RjcwRkY3NTZCQzhCQzNDNTI1RQotOjEwQUUxMDAwNTE3ODVDOEY0OTg1RjBFMEY1MEYwOTNGQkY3ODNEQ0I1NQotOjEwQUUyMDAwQzczN0M1N0MyRDQ4NzFDRjJGMERCRkVFREJFQkYzMzE1QgotOjEwQUUzMDAwMzZCNjdENjg2RjJCMjlEMjNCNEFCRjAxOUQzODlGNjM5MAotOjEwQUU0MDAwQkUwQ0FFQUJEREIxNDVBNDE3RUVCMTk4OEM0ODI0OTc4QgotOjEwQUU1MDAwNTA4NkZFQUREMDEzNTBERjFGQzRGODhCNUZDQ0FCN0JBOAotOjEwQUU2MDAwNTZGQkU4QkVEODUwODU0MkY3RDcwNjZFNEVCMkI1MTBGNQotOjEwQUU3MDAwQ0YzNTBFNjQzMTk2NUY3NUU3MDJDMjkzQUQ1MzM3MjMyOQotOjEwQUU4MDAwOURBM0IxQkU3NkQ0NDdGRUYyMENFRDBCREZBREU4MjFGOQotOjEwQUU5MDAwNUNGRjhGQTE5MUM4RUNCM0VGODZCNzc3NTE5RUJGOTk0NQotOjEwQUVBMDAwQzhFMjk1OTdFODE2MzlFRkVGQ0Y1OEVFRkVEODAwREFGMgotOjEwQUVCMDAwNTFFRjc0MzZFOTY0NkY5RjcxNzMzRjM4RTcyQkVCNzc3RQotOjEwQUVDMDAwM0RGMjY1NjI1RDY2QUU2NEU0RDY0N0FGM0Q1MUM4OEUyMwotOjEwQUVEMDAwNjBFQkE4RjBDQkU2NzVBMTVGNDYyNjJDMkIzRjE0N0VENQotOjEwQUVFMDAwQTQwQkZEQjA3Qjc1RjNBQjExRjI4M0YyRkIwRjRDMkU3QwotOjEwQUVGMDAwQkU3RTMyNzJGMUFDOThBN0I2NUMwQ0M2NDc0NDFDRjUxNgotOjEwQUYwMDAwQUE0NjEwM0ZDNjE1QkY2Njc4NUZCM0Q3MEYzOEZFMEI1MQotOjEwQUYxMDAwNEZEQ0JCRTc5QjhDMUVCMjM4MTdDNzM0Rjk5RTI3RDg4RAotOjEwQUYyMDAwRjdBNUE2OTZDMEYyMzUwN0NGNTYzMUNFRkFDQjA5MzIzNwotOjEwQUYzMDAwOUUwMTQ2Mzk4QkEyOUNCRDA1M0U4QUZGQkMwNUZCQTM0MgotOjEwQUY0MDAwMzMxQ0Y4M0MyMUU2MDk3MzgwNUVFQTc3QzQxNzNGOUYwMwotOjEwQUY1MDAwRTY2NTVCREY3REUxNEU3N0Y5NkE1ODM0MEVFMzg3NTc4QgotOjEwQUY2MDAwREZFRTg3OEM4NEJGNTdDQUVEMTc3RjI3QzJGM0M1QkZCQQotOjEwQUY3MDAwMDBBOTJFQTRGMzVBNzFFRkU5RjIxRjlDQURBMjdENzREMwotOjEwQUY4MDAwQ0QwQ0JEMUFGNzJGNkQzQzdFMjJENkIzMzc5OTFDMUIxMgotOjEwQUY5MDAwMEVGQkY1REE3MDQ2QzU3Q0E3OTc3N0NDQjg3QzBFNjBCRgotOjEwQUZBMDAwM0I5OUFFMDlCODVFOEQ4MUJDRUJGNEU3N0FEQzc4OEUxNAotOjEwQUZCMDAwMzQwRTJGREVGNjc5QTE0Mjc4MjhEQkE0QkM3MUFFOUY1NwotOjEwQUZDMDAwMEI3QkRBRTZFM0E5REVCRkZFNzY4NEVCMDNGQkY3RDM2NwotOjEwQUZEMDAwRDk3OTYyQTdEQUVFN0JDMkFFRjZCNkJCNUNDMzBCQTQyRQotOjEwQUZFMDAwMDE1NjJBRTkxNkE5MjZCNzZGMTVGNEE3Q0M4OTY4REZBMAotOjEwQUZGMDAwRUQ5QzlCQzVEQzczMDc1QzRGOTE3MDJEQkU2MUUwNDZGNAotOjEwQjAwMDAwMUFDRkFBRDAzRDUxOEMwN0Y1MzM3RjNGREYzRDNBOTVFQgotOjEwQjAxMDAwQTE2NDI0NUEzMUY0M0UxRDEwQkYwRkU4RDA2RkVDN0JDMQotOjEwQjAyMDAwRUEwNzE2NjAxQzJGMDBDQzZGQTdBNzQyNzI0MEYxMURFMwotOjEwQjAzMDAwMDlFREQxNzQxNkZEODBBMEExQjhFNEEzMDRGNzQzOThFQwotOjEwQjA0MDAwNURCQjUyRDg4RjI1NzVFRUVGREU3OENGMTk1MTJFMDdGNAotOjEwQjA1MDAwNEREMDRGRjY3RDU0MEI2NzcxQkQ4NTQ2NzdGRUQyMURFRQotOjEwQjA2MDAwMjU5RjI1M0I3MkM1M0UzRjFEMDE1ODAxQzZBRDREMERDNAotOjEwQjA3MDAwMzQwRjI5Q0U3NUUzQkEzMzY5OUZGN0M2MEE4M0VFRjkxOAotOjEwQjA4MDAwNTUyMDZFNTI1RDhGRENBRDNDMkU0MUM2RTFGRkFGNTRDMgotOjEwQjA5MDAwMDY1NDlDNkYyQkQ5RkFFMTdDN0Y0MzRDMzY1RUM5RjM5MgotOjEwQjBBMDAwRkI5OUVDQTc5RjY5RjU3MDFERDJDMUM3Q0ZDNUVBQUM2QgotOjEwQjBCMDAwRUMxOEU3M0I2OUE5ODVFRkFCMTlBNThCODdGMUNCNkYzRQotOjEwQjBDMDAwODhBOUQ0Q0Y1NUVCQTY5NEYyQjg4RjVCNkYxRTExRUIxNQotOjEwQjBEMDAwRDQ3RjNFRjQxRjJBQUVCRjZGM0RGOEUyMjU0ODg3RUJEMAotOjEwQjBFMDAwMUU5MzQxNjNGRDFFNzkyODAyNTk1QUJGMzIyQUFFNUY3MgotOjEwQjBGMDAwRDdFRTkwRjNEQTU1OThBOTQ0NzkyNURCNzk3Q0YyREExQQotOjEwQjEwMDAwNDcwMjk5ODVBQ0ZFQjU4RkJFN0MwRTMwRkM4RTc0MEM2OAotOjEwQjExMDAwRUM5OTg4RjNFMDQxMUUzNzA0QUJGRjlDQ0JEOEZCNkI2NgotOjEwQjEyMDAwMTVGOERGRjlFQ0E2MkJBMkRDMEYzOEZDQzMxMkJBN0ZBRQotOjEwQjEzMDAwNTREQUI2RUJCM0Q0NkVERjE1RkU4MDYzN0ZFRDkyQThEMAotOjEwQjE0MDAwREY4NkUzNzFDRTZGNEI5OTI5NzlGNkRGRUNCOEZBRTEyRgotOjEwQjE1MDAwNkY0QjFDQkY5RDdFQkE4RkY1REE2REY3QTk0OTg2Qzc4NAotOjEwQjE2MDAwQ0E2RDZGOTMzRTk5QjdGRDNCNTFBNEMzQ0E5REVFN0Q1NgotOjEwQjE3MDAwQjZFQkI2QkZERjg1NzkyNEQ3QzkzMEIwMTBFNTU5M0VBQwotOjEwQjE4MDAwNDFFNUEzQTYzNjIwOTNERUU3RTdBNTU3MTA0QjE4REM3MAotOjEwQjE5MDAwRjc1RTVCRjA2QkY2RkRDRDk4MEM0MUE2N0FERkRDRjcyRAotOjEwQjFBMDAwQUFGQTE4OTY5M0UxMTQ3QUIwMkI3N0JBRjVERUNBNkQzNQotOjEwQjFCMDAwMkY1MzVFODNFRTgzODFBQTM5QjhCRkVGOTY2QjJGM0M4NQotOjEwQjFDMDAwOUIzRjJBREEyMTJCRkJENkJEMkQzM0JEQjE3MkM3NUI2NQotOjEwQjFEMDAwQ0ZBM0ZFNThFOUQxOUY2RkUyN0YyQTg3QzZBMURCQTJFOQotOjEwQjFFMDAwOUU3QjY2QjYxNTk3RkY3MERENzc4RURFNjNCMTdFMEZBRQotOjEwQjFGMDAwM0ZGMkJCN0IzMDRGRkVGQUJGQkM3QkNGQkZBM0JERjA5RAotOjEwQjIwMDAwNjQ1MDQ3RkRCRkYyQzE1RjQ0QzEyMThGNUY4RjcyN0JFNQotOjEwQjIxMDAwRUJDODI0QjAyQTE5REM5MUZGMTdDOEUwRkQ1NzQ3OUUwMAotOjEwQjIyMDAwNzg2RDMyOUU3MzNCRjJERDNGOEUzMzE4RkM4RDRGNUNBMAotOjEwQjIzMDAwNDRGN0VCREZGOEZENzlFMzg3QjNDNzUxNUUzMzAxMjdBRAotOjEwQjI0MDAwNUUxOTdFNUU2Q0E3QzQ4RDk3QzdDNUQzQzM4RkMzREY1RAotOjEwQjI1MDAwM0RBNkEyNURGQjlFMDQwM0I4Q0VBREU4N0I1RjQ1N0ZCMwotOjEwQjI2MDAwNjQ4RjA5MDM0ODlGREQzQjVFREVGMzZGQUNGQzE2RTNBMQotOjEwQjI3MDAwNEYyMDBGN0ZEOEY4MjdGQTY4RkQ2NjZBOTIzRDU3RUM5OQotOjEwQjI4MDAwNzg3OTAxRTJCQjEyMDY2ODNEMURDMkNGMDM4QzlGMEQ4OQotOjEwQjI5MDAwMzk3RTdBQkYxRjg1MTMyQUM2NjM1NzNFQzRGODc3MEVERQotOjEwQjJBMDAwRjI5MUYxRUY5Q0ExRkM3QjBCRkYzMzdCMjhGRjdFMTAxQQotOjEwQjJCMDAwNzVFNzA5MUQ4NUVCRUZBREM0OEREQTFENjNGM0U2MzE0QgotOjEwQjJDMDAwRTRGNjExODZCRkNGQzRENjA3MjNEMTc3OTlDNEYxRUEzQgotOjEwQjJEMDAwOEM5QUZGMTlDNTc5RjU0OEM5MjA3RjE3MjI3RkJGNzM2MwotOjEwQjJFMDAwNzQzMjNBMzlBRkZCMDczRThCNzQxODc4MjJBMEUzRUYzMwotOjEwQjJGMDAwOEZCOEY2ODk1RkQxM0MzQkYyRkQ2NzU1ODNGNjZEMjAzMAotOjEwQjMwMDAwMkFDRDYyNjUxOEZDRDkwRkFDQkM4MkM3QjY2MUY5RDZFQwotOjEwQjMxMDAwM0YyRjc4OUVENTVGOEVCRjIwNDMyN0JFNTE3OTBGOUI2QwotOjEwQjMyMDAwNzdDNDg3Q0NBNTJEMDZBRTlCOTkwQTFBRjc4QTBDOUY4NQotOjEwQjMzMDAwMEYyQjMyQkIxNkUzQkQxMjVFQkE0QkE1RjZCRDlFMzk4QwotOjEwQjM0MDAwN0VFMjdENEYyQjc2QkNCODAwRTVBRTEwM0ZFREYxRUIxMQotOjEwQjM1MDAwMzhGRTczRDlGN0FERUVGOUVBODU1RkMxRTYyN0FENTM0NAotOjEwQjM2MDAwNUVGRTY2NzZGRDM3M0U4RkRDMTc1MEYwN0NDNTExNzFBRQotOjEwQjM3MDAwREVEQkNCRjcxQ0ZEQzVGOUY3NTFFRTMzRkREOTNCQkY0MgotOjEwQjM4MDAwRUQ3RDI2NDFBN0MyRjJDMUU3Rjk0OEUzMUIyREZEREVBMgotOjEwQjM5MDAwODgxQURDRUZGNkQwRjFGMDg5RkNGQTdGN0MyOTVGQjdFMAotOjEwQjNBMDAwNTc0MEJBMDU0RDY3QUZCREEyNDBEMjlBNTg5REMzRjcyQQotOjEwQjNCMDAwMzBEQTE3MENERkMzMEZDQTE0RjdFOUVBREI0RDdBREM4OQotOjEwQjNDMDAwQUIyRjU2MTQ4OEJGRDZEOUZERUREQzc1MEVFQUI1QzM5OAotOjEwQjNEMDAwNEZGRDkwRTQ3M0M1NDMyRkFBRTg3N0VDRDlGNjNEQjU0RAotOjEwQjNFMDAwQkYzRTM3MUY3MDdEQzgzOEU4N0RGOEUxNURFNzcwN0RBRQotOjEwQjNGMDAwOTAzRkFFMzU1M0I0QkZGMjcxNzdGQjJCMUY3QURCRDU4QwotOjEwQjQwMDAwRkU3NTU2MUZEOTBCMjNGNUYzQTY2MjVFODFFMzdENzNBQgotOjEwQjQxMDAwOUY5RkVFMTM3Q0IzNEZDRTFCRTc5RTUwRUE3N0Q5QzFCNgotOjEwQjQyMDAwNURDRjJFRjgzNTlFNjc2REQ4MUZBMjdCMTQ3Nzc0OTg3OAotOjEwQjQzMDAwRTM2RjQxRkI2REJGNUZFQzFGOUFCRjQzQkI3NEM3QjNBMwotOjEwQjQ0MDAwMjEwM0VEQjQxREZCMkZBNzdDMUVCQkJEMUY3OEU4NzkzRgotOjEwQjQ1MDAwRUUwMTZCNUU4NEI1Nzc2RTdGQTIwMUYzNDVCQzdBQTNFMwotOjEwQjQ2MDAwRjEyMEYzRjcxQzcyNzBFM0IzMkRFMzUxRUZBMzdGNkM2RgotOjEwQjQ3MDAwQTBFM0FEQzRFOTFDOTUxQzVENDA3OUUyQjJFRUQzODMzNAotOjEwQjQ4MDAwNzlENzZGREU5RTNGOUNBMEZEMUMzRjEzNENFN0JERUNCRgotOjEwQjQ5MDAwMTc5RUY4QkZFNEJGNzdDNUYzQzdGQkVGMkFCNUY3QkQyQQotOjEwQjRBMDAwRjlFRjc3QjJERjZGOTBCOERDNThDRkYwN0Q4RTQyRjNDMgotOjEwQjRCMDAwNkI1QjVCMkM1RUNCNDg3OTU3NUI2MzFDRjc3Mzk2OTc4RAotOjEwQjRDMDAwRjJGOEM3RDQ1NzJDMUY5RTBEOTlERDZGNENDN0YxNEY3MgotOjEwQjREMDAwODQzRUMwRjNGQTNCREE3NDgyMUZFNEZGNDI2NjUxOTc2MAotOjEwQjRFMDAwRTM3REYzMTA0NzM4RUMxN0ZEQjVEMUY2N0I3M0ExN0VGMQotOjEwQjRGMDAwRUJGQjg4MkVDNUY0QUI5RDQ0QkZFQjRCRjk3OUU5NTNDOAotOjEwQjUwMDAwRTkzNzdDMTI3NDA2REMxRDJBNjJCQ0RFM0MyOTZGRkYyMQotOjEwQjUxMDAwRUEzNDlFRjdFNUVENkY0OTI5QjczM0VERkQwMzlBN0FEQQotOjEwQjUyMDAwQzNDNEQ1RkNBMjlEQ0Y5NDFBMkU3OTAyMjU0QkY3NEZBOAotOjEwQjUzMDAwRTdGMjJBMzI1Mjc3MDNFRUNCMEQ5RTE3NEU2ODhFRjM1OAotOjEwQjU0MDAwQzJFQzNCOUQxNzVFNjNGMjNDNTY1NjhGRTY0MThGODhGNgotOjEwQjU1MDAwNEZFMDNFRTU1NTBFN0M5RjE1RkEyMzUwOTU4QUExRkREQwotOjEwQjU2MDAwRDU4REZCMEQ3OUY0RDhGMzQyQ0VCQjIzQ0Q5NDNGQjJGOQotOjEwQjU3MDAwNEI5RjVFREEzRkNDQkFBMUFDQkU2Qjg2RjM1Q0IxQTI0NgotOjEwQjU4MDAwNjcyNUQ3RkVCMEY5MzJERDgzNTVBOEJFNzdERkQwQzY3OAotOjEwQjU5MDAwQkY3QkQ3OTdBMDA2RjM1Q0NCMTNEMDkxMDdDRjNFMjE5QQotOjEwQjVBMDAwQzcwODU3OEQ3MEIxMjRCNDNCRTBENDE4MUZBNzVERUVENwotOjEwQjVCMDAwN0U5RkRGNzNGQkZDQUQwN0JCNTE1RjE2QTJEMzBFQzFBQwotOjEwQjVDMDAwQ0Y2NzMxMTE2NDI2Qjk2RjFBRTY2M0Y2NDQ3Q0E0Mjc2RAotOjEwQjVEMDAwN0I4MkY5RUZBM0ZGNDVDRTJFQTBGQTJBOUU1RkE0NzhDNgotOjEwQjVFMDAwRUIzRUYyMUI4RDEzMkY5ODc4QkZEMUFERjUyQUVEMEJGMgotOjEwQjVGMDAwNDU5QUY2NTNGOUE4RTkyM0VCQkYxMDdERUNGQjA4MDY0QQotOjEwQjYwMDAwQ0IwNUUyNEY4RDNBRTdFRjZFRjMxMUNBNkZCREUxNkNFNwotOjEwQjYxMDAwRDUxODJFOUYyMkI0N0E1QTFDQ0ZCMzZCQUJFN0M0MzEzNgotOjEwQjYyMDAwM0YyMjU0Qzc3RjlGQzJDNkYzNzkzQzZENjMwMUY5OThFRQotOjEwQjYzMDAwQTU3M0Y5NThGRjQ1M0IyRTk5MjUzOUQ5MzhDRDE3QzQ0NAotOjEwQjY0MDAwRTdGRjA3NTA5NEVDNUUwMDgwMDAwMDAwMUY4QjA4MDBBRAotOjEwQjY1MDAwMDAwMDAwMDAwMDBCRUQ3RDBCNUMxNEQ3QjlGODk5RERGQwotOjEwQjY2MDAwRDlEOTI3MzBDMDAyQ0JGMjFBMTAxNDBEMjY4QjIyNkFDQQotOjEwQjY3MDAwMzU2NjQxMzRGODg4NTkxNUEzMjYxODU3NjM1MjEyMDFDQwotOjEwQjY4MDAwMzdENjM2QjRCNTYxMTAxMEM0NDc0ODYzNDlEQURBNzY2NAotOjEwQjY5MDAwQTVEODkyMzY2RDMxQTU4RDQ5MUY3N0Q1RThCNThGREJEQQotOjEwQjZBMDAwQTIzMTg5Mzc1NzFCMzRERTVDNDk0RDJGN0RBNEY1REU2RQotOjEwQjZCMDAwNkJFQkZGN0NERjk5NjE2Nzk2NUQzMDY5REE1RkVGRkZDNgotOjEwQjZDMDAwNzdDOTJGOTk5QzM5RTc3Q0U3M0JERkY5REVFN0NDRDlENgotOjEwQjZEMDAwQTNERTY5MDk4MzBFNDI2RUMwREYxREEzOUZFNjg2MkY5RAotOjEwQjZFMDAwNEVBRjk4MUUyRUI3RTVDNDczRkUyMjQyNzZFNjNDNEU1RQotOjEwQjZGMDAwMDZFOUQzN0NCRDkxRjg2ODdGMzM0RkJDN0RGNDk5RThBRgotOjEwQjcwMDAwMjU0NzEzOUNCNEVDOUQ5ODZCQ0VBNTRGMDc0OTM3OTQwMQotOjEwQjcxMDAwRDA3RTY1MTNCOTFEQjlBM0UxMUZDREZBODRFQjEyRURGQwotOjEwQjcyMDAwOTdFNjI1RTlGMDZDMkIxM0QyMEQxQTdDM0EzRjEzMjBEMwotOjEwQjczMDAwM0UzQTRFNkI5OUIwMTZGMDM0ODczRTQ5QTQzODREQkQ2MQotOjEwQjc0MDAwNjgyMDY0MDY3RDVGRERFOUY1RDI3NkY0MkZERDQ3RUJGNgotOjEwQjc1MDAwMDk0RkQyNTc2OERCNzE2NDRENUZEMUU4RjFGNzhCMUM1QwotOjEwQjc2MDAwMjEyOTg0RUM1NkVBRjdDRDdFRkI5OTA3MjhGRUEyNTdFMwotOjEwQjc3MDAwMkEzNjUyMzBGQjhFMEU5MUJDQTlCNDFDMUFGMjcyMzBEQwotOjEwQjc4MDAwMkYyNzk5NjYyNUEzRTE0MEJCNUNEQTJFREVFNTI3MUI1NwotOjEwQjc5MDAwMDBDRkNDNDFFMkE3RTNDNzE3MEUxMjk4QkY0RDIyOTIwQgotOjEwQjdBMDAwNDE0MjM4ODg3RkMyQUM2MTIyRDM3NjA5NzMwNzVERjJDQgotOjEwQjdCMDAwNTQwRDlDM0YxQkEzRTI3OTIzQzE4MDc4REExQTRBM0NERQotOjEwQjdDMDAwRjlDOTg0NTgxQUU2NzlGMkU5QkFDNEYxMDM0NEE0NzBCRAotOjEwQjdEMDAwRTIyNDQ2RkZDODdFNkYyNTMwRkFBODc0RTkyQzlCOThCNgotOjEwQjdFMDAwRTA4RjA2NUY1RERGQzY1M0E5QkM0OTUzMkVFQjVDMDNCNwotOjEwQjdGMDAwRjQzNzM5RkQzMkNDM0Y3RTE2QTM4QjVBMUYyRjBEMTIyMgotOjEwQjgwMDAwMkYxRDM3OUVCMDc5OTIxMkUyM0Q0NDFGNzEyNTMyODE3RgotOjEwQjgxMDAwNzFFODkwNUVFRDdDMzYyQUY0REUyOEIyRjlDMDlGMzdERAotOjEwQjgyMDAwMTVEQjExNDI1RkM1NzkxNzBFMTk2Rjg1MzI0RjJFMTU0MgotOjEwQjgzMDAwQjJGQTFCQjkwNDE3RjQ5MjQ1MjkxQjQ3OTc2M0NENjdFOQotOjEwQjg0MDAwQkNFN0FFNDY0MjJFNjlFNjZCQzlBNEYzNTdFMUQyN0Y0RQotOjEwQjg1MDAwM0I0RDI0MURFOEZCNDFFOTI2QjgwNjkxMUZENEY3MDFCMgotOjEwQjg2MDAwNjVGRTI2RTcyMEQyNjcxNEZEOEExOEZERUM0NThDN0UyNAotOjEwQjg3MDAwRjYwOEZBRUQ1MkZBRUZGQTA3QTNERjA4OUQzOEMzMUE2QgotOjEwQjg4MDAwRTBDMzQ4M0FBQUVERTc4REUwMkRFMzkzRjYyM0U0MjNFNQotOjEwQjg5MDAwNTA1RTU2MDlGMkRCNjk2NUU1RkRFMjVEOTU3MjExOTMzNAotOjEwQjhBMDAwQUI3MUU0ODUxMDM3MjFBNTlEMzdEQUEwQkQ1QjE0MTE3QgotOjEwQjhCMDAwQUU3OTEzRDUwNzBFNEREOUFGRUEwNzM2QUUyM0Q3NTM2RAotOjEwQjhDMDAwNDkyODNGOTM1QzAzMzk0NDQ5REEzRTU3NzZDMTdBNzU3QgotOjEwQjhEMDAwQTBBNDg0RTFCRjJBNEVDMEY2NkQ5MjYwRTA2RUEzQ0ZCMwotOjEwQjhFMDAwNTMwQkQyMDg4NURCNkNFOUI0QzA3Q0RCNEQ5RDA4QTcwNwotOjEwQjhGMDAwMzlDQjIwNzY0N0QxNkZDNzk0RjkxQTFCRUNEMzdCQTZCRQotOjEwQjkwMDAwQzdBNkEzNTEyMEZFNjg3MkZGQTZEMkJGRjlFOEU3NEY5MQotOjEwQjkxMDAwMTkyOTdGRjA5MjIwNTkyOUJFMjBGNDZGQTlFQjlCNDc4QgotOjEwQjkyMDAwRkI5M0JFODFEQzVDMTgyNzFFQzc3MTI4NzgzOTBBMEM4RQotOjEwQjkzMDAwQTQyOTc3N0MzQ0JGQTVGMDE1REY2MDFEMTM0RjFFRjBENgotOjEwQjk0MDAwOENBMjY3NTQzQzVCMDA0RjY3NkMzQ0VENTlFNUM4QTc3RgotOjEwQjk1MDAwN0M4MzAzQzdGOTkxMjhBMTdFNzI5ODAyOTY4RDc0N0UyQwotOjEwQjk2MDAwOEVBNjA0QTk4OTNFNzdGMTgxRjY2QTc4MEU5ODg4NENGNAotOjEwQjk3MDAwOUI5ODg4Rjc1NDM5QzU5QjlGM0E4RDEwMEFBN0Y1RTIyQQotOjEwQjk4MDAwNENDQjA0RTBGRDg2NEVFMkQzRThGOTREMzZGRjA1OTEzRAotOjEwQjk5MDAwQzJFMzQ1M0ZGMTUzM0M3OTQ3QzAwQjY4RjQyQTdDQTBEMQotOjEwQjlBMDAwQUUxQjI5NEMyMjY0MzYxRENGQ0Y0RjA3N0Q2QUY3MEJBMwotOjEwQjlCMDAwRjg1NEUxQTg3QzYyMzc3OTg5NTgwNDcwMENERTIwN0Q0OAotOjEwQjlDMDAwNUEwMEQ4RUM3MEJCOEYyNDMyQkEzNUNGMERGOTA4RDhBNQotOjEwQjlEMDAwQjk2MjlFODA5RDZCMzM3OTRGNkRBMEU1MEUzQTlGNkVFNAotOjEwQjlFMDAwRkE2QzUxRjg0NkVERTc0RTRDNjQ3Q0E4OEM2RjIzNTVGOQotOjEwQjlGMDAwMDkyMTgwNkQ3Q0NFRTUxRkMzMUVEQjgwNkVCNDdEQzM0NAotOjEwQkEwMDAwRjlEQ0VGQkNBQ0QyOTVGRUZCM0Y2MjlDRjNFRDVCOTBBMgotOjEwQkExMDAwNzdEMzQxOUVERjIzNDVBQjBEODZEODcwRkVENDI4N0RCOQotOjEwQkEyMDAwRTc2NThEQkU2QTIwQ0M3RTEwMjJBNTJEOUYxQUJCREY1NAotOjEwQkEzMDAwRUU0NjMyM0RCRjIwNUNERUMzMDcyQzQwOUYzNkM3RDZBMgotOjEwQkE0MDAwNTNCOTc0OUVCMkM3RTAyOTkwMDA0Qzg5OEU0RTkxNEYzNQotOjEwQkE1MDAwNDI5QTcwREQ0REM0MDNDQzRCOUEzM0NCNEY5NTRCQjAxQgotOjEwQkE2MDAwQkUyQjVDOEY0M0I1RDFDMTUzNUI0QjRDMTM0OUQwMDhGRgotOjEwQkE3MDAwNzQ5MTlDM0FCOURDNjQ2MzdDMTNCOUNFRDYxMTNBMUUzQQotOjEwQkE4MDAwMTg5MzhFNTY0NTRFMjJFOTk4OUZGOEJGOTM4RTIyNjVGMwotOjEwQkE5MDAwMjdFNEQ3QjgxNTA5MjFFODc3OUNGQTQ5NzQ3QzkyQTk2NAotOjEwQkFBMDAwOTczRkI1OUZDQUVGOTFGM0FGRjg1RjNFRkY0ODNFMTk0RAotOjEwQkFCMDAwREQ1RTU2RUQyNjdGOTQzNkNERjA5MzYwMDc4NzY1OUY1NwotOjEwQkFDMDAwMjUxNUJCNTIxODU0M0UyREExMjYzMDRENTlENTdERTk4MAotOjEwQkFEMDAwMjcwOEQ4RTcxNkYxNkQwQkFBMkVDRjhERTRCMUUwRjM1RAotOjEwQkFFMDAwRTQ2RDk1OUVDNkYwNzg1QUZBMThDMEVFOUMzMjA1MEZBOAotOjEwQkFGMDAwNzE2MTNBQzU4OUY3QkI4RTkyMEY0RUE3QjZDQ0U3QzVFOAotOjEwQkIwMDAwMEQxQUZCNzE1OTJDREY5RTQ4RTlCMjEzRkNEQTI4NzIzQQotOjEwQkIxMDAwQjAzRUIxNUM0RUE0NzgwOTg2RThGQTdDM0ZFODM1RjQ4MwotOjEwQkIyMDAwMUI0NTdFMDExREU3OEU2MTNEOUQ2RTU3RTgzNDJGRUQ2QwotOjEwQkIzMDAwRUQ0RkMzMzRBOTk2RTQwOTU1QzhFNTNFNEYwNUQwQUQ5NQotOjEwQkI0MDAwNjI4RDBGRDg4MjA4MTlENzZGRjEyMzNGNTQ4ODQwMTdCMAotOjEwQkI1MDAwNEU5RTY0Qjg2MUJGNzlGQUM1QTI5NzgzMjNCRTY4NzgwOAotOjEwQkI2MDAwN0Y0NTVDRjEyNTk4OTdBMzg4RDI0REUzN0Y1MDQxMTAyMwotOjEwQkI3MDAwREZCNjZCRDZDNUUxMUM4N0FGRDhCQTFEQkY5MDY2OTAwMwotOjEwQkI4MDAwNjlEMzM2OTcyMTA4RjE4Qzg5MDREQTgxRUVFNEFDOTEwRgotOjEwQkI5MDAwODA5Rjk2MUE0QUM3N0FCMzJCMkYwOEY2MkUzNTY0MjU1NAotOjEwQkJBMDAwNUU4QzEzQzRBMDk1QjZFRjVBN0I4RjA3RjVEM0I1MzlEOQotOjEwQkJCMDAwMjQ0NEY5MDY3NTE5NjUzMjNFRDMxQjAyN0Y5QTE3QTVGNgotOjEwQkJDMDAwMzJBMzA0RTMzQzY2ODFGOEE2Q0RCNTIyODEzMDdGOUI4OQotOjEwQkJEMDAwNDREMzVGNzU4OUZFMTc2MTVERjk2QkYzMTA5RUMxRTI3NgotOjEwQkJFMDAwNDUzRkYxNjZFN0YzRjRDQTc4MDI3RTgwRjUzQzE3MzRFRQotOjEwQkJGMDAwNTM1QzlFNUMzOUFGN0Q5MENFQzc0MkUyM0FDREY0RDkxQQotOjEwQkMwMDAwQ0NDQjIxQjA2M0YyNzlBQjA0RjRERTVBMjBERjY5QTAxQgotOjEwQkMxMDAwQ0ZCMjVGNTkwQjc5RkFCRTlEQjM3OTgwMEVFRDA1NzRGMgotOjEwQkMyMDAwQzkyOTlDM0Y3RERFMUUyNEI0QkM3M0U1QjJFMTA0ODBDQgotOjEwQkMzMDAwRDM2Mzk0QTA3RUZGOERDMDZERTA0RjU5QUUzRjgxRjE3QwotOjEwQkM0MDAwQTE0NTg5MEYwOTFGOTgwOUVCNjdGRDgwN0E2MjM3REZFQwotOjEwQkM1MDAwODlGQ0JGMkI3RjlBNDVFQjhGQTdEQkZDRTc4MTJFNkExRgotOjEwQkM2MDAwRDlFQUEyRkE2RDNBRjJEM0E1NDFDQTRGMDY5OTIzMzcxMQotOjEwQkM3MDAwMjg3RjVBMUNEQjVDMjcyNDk4MkY3REFGRjI0NzZFQjhEMwotOjEwQkM4MDAwNUQ1ODZFRjU2NTI3QTUzNUY4OTk5NEMzMTY4MTVGRDk3RgotOjEwQkM5MDAwMDZGQTA2RkQ1NjIyNzM1MDRFNjdGNUJGN0RGMkVFNDU1QgotOjEwQkNBMDAwRTA4N0I2NTlENUZBRTU4QkJDREFCMkZDM0ZBN0IwQkY0NgotOjEwQkNCMDAwRTJGNzE2MjUyNUVEODJGNkNFMEMxMjYwRjRGMTkxNTVDRgotOjEwQkNDMDAwMUE3RjQ2NEFFMjUxMEU3QjEyQkQ3RjRDOUMzMTlBMkY1RgotOjEwQkNEMDAwREJGMzE5NUYxRUJGRDA1Njk5MDc3QzRBRjlEMjJDMDFCRAotOjEwQkNFMDAwMUZFRUQyQzVDOUVBNTNFNUMzQjY3Q0M2NjdCMUU4NkU5QwotOjEwQkNGMDAwQkE1NjRDNDIxQTNGRDBFNEVDNDQ3RUI0Mzg3REU4NDc1MwotOjEwQkQwMDAwNDdCNkJGMkI5OUU5MEI5NUZGMkQyRTgyRjI2MDkxRkM2RgotOjEwQkQxMDAwOUY3RjEwRTVDM0UxMDFGMTMzRTcwNzA4NDdGOUM0MjQyOQotOjEwQkQyMDAwQjI3ODc4QkM3OUM0QzI0RkU1RkZCNkZDM0MxOUY4RjU4RgotOjEwQkQzMDAwM0Q5MTNBMTI2M0I0Mzc1RDJCQzFGOUQ0MjU3QTczOTJFMQotOjEwQkQ0MDAwMzRGMTg3MzM4N0QyM0RDQTdDQkU5OEM0RTZEM0VBQUJEMAotOjEwQkQ1MDAwRjYzRDQ4RTE3QTZCMjQxOUU1QzY0NTNDMUQ2MDk3MjhGRAotOjEwQkQ2MDAwRkI4M0RGNDlGRENENUI5MjUyQjQ3NDBBMzA3OTU0RTAxNQotOjEwQkQ3MDAwQ0I1Q0UwQTgwOUU0REM0OUZCRDFCNzJERTQ4NzMyMkM4OQotOjEwQkQ4MDAwQkRDOTE5RDRDOUY3QkU2NDdGNDk5Mjg2N0Y3OTkxQzUzMAotOjEwQkQ5MDAwODcwQjhDMEUwM0Y5MDBGNDc5ODJDNjY1QTE0OTg0RUMwNwotOjEwQkRBMDAwNkQxNEYxQjlBN0QxODVDRkY2NDYwOTlGMUQ4RDVFMTI5RQotOjEwQkRCMDAwMzJEM0YwODc1QzNCRjcwMEY4RDkwRTFCRTIzNzFFNUZFOQotOjEwQkRDMDAwQjQzNjdBQjA3RjRCRTMyQzA2ODc1M0Y5QkM3MDE3RjA3QQotOjEwQkREMDAwQjVDREEwQ0FDOUFENTg0RTMwQUFGNTI1QkIzMEJFRTNEQgotOjEwQkRFMDAwNThGREQ2QTREQjUxNEVFODdDNTBFRkI1OEYzM0FFMzExMQotOjEwQkRGMDAwNTg4QUVCRjdGRUUxMkJGQTVCQTFERjEzQjc3RkEyMzI4MwotOjEwQkUwMDAwMEZGOEVGNzUyM0QxRTYzMTQ2RjE0Qjg4OEQ3N0IzRjAwQgotOjEwQkUxMDAwREIzMzBEQTg0RjlGQjg3REU3QTk1Q0YwNUI1RkEzRjAxMwotOjEwQkUyMDAwQzdFMkM3NEUwNjNGMjYzQzE1REZBM0JCMTA1RjMzNUQ1QwotOjEwQkUzMDAwNkYyQjg1NjcxNjk5QkU4RjI1MEY5MUYzQTU0RjgyRjI2MAotOjEwQkU0MDAwRTEyNEE4QTc5RjM4QkE5NjFDMDdGOUE0QzM1QTQ1OTBDNQotOjEwQkU1MDAwNTM5RjE3RjI1RDQyMEJBNUIxMDdFQ0FEMkZGNDU1QjAxRgotOjEwQkU2MDAwQjczNEQwMzk0NENCODIyMjM3RDRFQ0NCQzcyOTFDQzE5QwotOjEwQkU3MDAwNkIyMTFEQjRERkQxREJFRjIxRDBBRkVENjUwQkM1ODlBMAotOjEwQkU4MDAwREE4N0U0M0NFNDc3NkI0MTE1NjlBNkVENzY1NjVBODk2QQotOjEwQkU5MDAwOTFCRTRGOThCNzg2MDBCQzlEQkZCMDIyRkNEQzUzOTM4NwotOjEwQkVBMDAwNTE1RTc3ODk0QzhFQzZENTQzMkUwMzA5NjlFREI4QzUxRQotOjEwQkVCMDAwMTYyRUU3ODFCRURDNDQ3QzUzNTFBRUJGOTBBNEQxOEZENwotOjEwQkVDMDAwRDQ0RTdFMTlDQTAyQTk5MDA5MDc3NkY4MjEwRkYzNDNEMAotOjEwQkVEMDAwNTg3RDRGQTJFRjIwNkJFRkMzRkU2MUJGMzA0MDQ0OTAwRQotOjEwQkVFMDAwRDdCM0M2NjAwN0M0OUJDNjVBNzRGQTE2MUEwRjU4MDYxMQotOjEwQkVGMDAwNTFBRUJEQ0JEMjRCMDk3MTMwMTRDODJFNEY4ODY0MDNBQwotOjEwQkYwMDAwNUREMjhERDQxN0EzMkYzQzAyMDk1MUJCRDE0OUZGMDE0QgotOjEwQkYxMDAwRkNGOEYzNDNFN0M5QUQ4NEE0QUQxMTc0RjNFMENGREJDMwotOjEwQkYyMDAwMkYxQTZFMDVGQzU4N0JENTBFRjFFN0VCRUFBMDNENEZDQQotOjEwQkYzMDAwMzRFREMxM0UxOUFCMTNDNjhBNjcyMkZERjgxRjI1MjlDRgotOjEwQkY0MDAwN0VCQzlENjQ4MURENkI2OTNDNDJERTMyODVFMUYwMTE4RgotOjEwQkY1MDAwNzkyNUY1QTlGQUYzOUI5MzBEN0FGRjQ3NjJGQ0ZEMTI1MAotOjEwQkY2MDAwOEREMzgxMUY1QjVGMzU5MkVFMjhGQ0ZEODdBNDVDOUQxRAotOjEwQkY3MDAwQkY5QkVFMzc4NEU3NDdGRjdERjk4MkI5QkM0QkM3OUY3MwotOjEwQkY4MDAwNjNBRjdGNDY4REJFN0Y1NkMwQTZBMzYzNEU0MzkyQUU3RAotOjEwQkY5MDAwOUMyQkJCNzVFRDI3QjRFN0U5RUEwQjNBQTdFOEVBMjc0MwotOjEwQkZBMDAwM0QzMzRENTc5RTFDRkM4OEFFRkQyREJERTVCQUYyRDQ0NQotOjEwQkZCMDAwQkVDNUJBRjZCNzFENTlBMTJCMTc4N0VFRDVCNTlGN0UyMgotOjEwQkZDMDAwNkFBM0FFN0VDNkMwMjNCQUZBOTlFN0I2RUFDQUIzMDczNwotOjEwQkZEMDAwM0ZBNTZCRUZGMjhCQzc4RTgwN0M1MjdFMzQ1MjdBRUQ5OAotOjEwQkZFMDAwNEE5NzlGMDFGQjM5RDg0Q0ZEQjg3OUNDM0YwNjdCNEI3MwotOjEwQkZGMDAwMzI4OUUyMUY1M0MzOTQwQTdDQzVGRTVBQzAwRTgwOUU0QwotOjEwQzAwMDAwREZGM0U5RDA2N0QwNEUxQTNDMjBCRjdDRkU0MkVGNDZGQQotOjEwQzAxMDAwRThENzIyMUE4ODRCQTM0N0E0ODUwNERFOTdFRjQ5QzRDQQotOjEwQzAyMDAwRjdERTkyMjY5NDBGODE5QTBENkIzQ0Q4NkRGRDdBMTA0NQotOjEwQzAzMDAwRTM3NkQyMDdGOEJEQ0VGMEUzNDUzOUFBN0UxMjMyRjU5OQotOjEwQzA0MDAwRkM2RjI2RjcyNUY4QzZGMEZCNEM5MkJFRkRGQkU1RkYyMgotOjEwQzA1MDAwQUM2NENBRkZFMDcwNjQ1MUZFMzc4RURGNUZFNUZCNDdEQQotOjEwQzA2MDAwMENERTA5QzkyQzVGNUU3MUQ2QTk4QjdCOTBBRTIzNzE2MwotOjEwQzA3MDAwOEY4NUI0ODAzODk1NTUwRjY3OUM2MENEOTVGOEM2NkM1OAotOjEwQzA4MDAwQjg3MUNCQ0RDNzM3OTFGMjQ1OUY5NEU2NzQ5RDVDNEM1NwotOjEwQzA5MDAwNUZBQkZFRkQ2ODdCMzg1REU3OUY0NTNFOUJFMzFGNDEzQwotOjEwQzBBMDAwN0Q0N0Y1RTJFREM5M0FCREU4RjMyNjQzRENDNzdCNTE5NQotOjEwQzBCMDAwMkZBQUVGNzM3QkE3QTA1RTZFMTc5OTlGRDIyNjUxQjk2NgotOjEwQzBDMDAwMUM4MzVFOTE3QUY5RjM0OTEyRDM5RjMxRjRCMzQwRjVBMgotOjEwQzBEMDAwMkMxOERDOUQyQkVGNkYwN0JBNzlCNzExQjQ0QkQ0MDYzRgotOjEwQzBFMDAwQTE5RThEODQ0RkZEQUE3QjAwNkZDMUM1RkMyOTM1MUUyMgotOjEwQzBGMDAwNTJFMzJEMEJENTFGMTA1RjU5MjQ4MkY0MzI1MzdBRDlBNQotOjEwQzEwMDAwRDEzRjdBMENGRDRCM0EwRjA5RkMyM0IzOTNGQTlGNjBBMQotOjEwQzExMDAwRUZBOUZGQzlGQ0NEMEZEN0JGQ0M1NkU2M0Q0MjE3QzVFRQotOjEwQzEyMDAwNUVGNkQ4QkNCNUM5MjlCMUUxRkYyMEM2N0VENENCNDlBMwotOjEwQzEzMDAwNkFEQ0ZEQkY5M0ZGRTYyNjRCODg3RjI0MUZBQTdDNjYzRQotOjEwQzE0MDAwMDZBNkEzRTNCRDI3QjE3NUE3RDM4QUU3RDRGRDBCMDlFMwotOjEwQzE1MDAwRkVFMzQ3N0UzOTMxRUI4QzNDMUZENkNERUZGMDlBQTkzOAotOjEwQzE2MDAwNURERDM3NkIwNUY2MTMyNkYwMDRGNDRDRENFMDg2QTVBNAotOjEwQzE3MDAwNjAyNzQ5MDlEMzEzMzJGRDA3RjhDRDU2QTRENzFCOTY4MwotOjEwQzE4MDAwMDgzQjJBODAzRDhFMUY2RDc3NTVGREEwQzZFN0UzRTk4OQotOjEwQzE5MDAwOTc2NzU1RkQzMjkzQ0NENEVBOTc1ODcxQjhBQTVGNTQ4QgotOjEwQzFBMDAwM0FEQzcxQkQ1MTQ0QkZFMzNBQUQ1N0ZEMDkwQUM3OTQ2QgotOjEwQzFCMDAwQzVGQjIwQ0YyQzc4ODhGNzYwMTRGOUZCMjdDNTJFRUYzQwotOjEwQzFDMDAwM0Q2NkM1RjhEQkIxNDZDMDM4Q0JFRDA5OTUwMTlGQkE5NQotOjEwQzFEMDAwMDNDNDAzRjQ5OTM1MTgyMjdFMEFGRjA1MjdFMzRGQjdGRAotOjEwQzFFMDAwMjdDODgxRkZFQUJFMUNFNDAwQ0YyRTEzQ0IwQkI5QjdFMgotOjEwQzFGMDAwMDUzOTZEREVFOERGOTM1OTNFRkI0RjE3MUVGM0MwQkFEOQotOjEwQzIwMDAwOTdFNzM4NTA0RTNGRjYyMDQxN0IzREUwREFEODU5MDY5QgotOjEwQzIxMDAwRTNDRTIyMUUzMzRFOTcyNzZFMjg5RjMzMDc1MTlGNzgxNwotOjEwQzIyMDAwMDZCRDAyNEJDMUM5NzE3NEU4MkI4RDY0REEyNjFBQkZCMgotOjEwQzIzMDAwQkZEMzY4QzFFN0Q1NDYxMTlGRjM3MzBFMUNCRDgzQzJGRgotOjEwQzI0MDAwREQ5QTZCQzM3QzQxNkI5RTBEQzc2OUNCMTY5MDBGRkZDNwotOjEwQzI1MDAwOThGNTQ4MEVGODA1QkY2OTc0NjFGQkY2QzcwMzg1OTAzMQotOjEwQzI2MDAwNEY2ODNCQzZGNjgzMzJCQ0QzNzExRjE0QTlFNjAyN0MyQgotOjEwQzI3MDAwNDI2QzdGODcwRkI4NjBERjM3RTNGODRGQjA1RDlCQzkzMgotOjEwQzI4MDAwRkZBRjFCMjgzRUYyNUFDMTczNDg2Mjc0ODBGOUI2NTg1QQotOjEwQzI5MDAwRDlGQ0NERjY4MDI3OTE5NkNEMTNDOEZBRTVEMUU0NTFBQgotOjEwQzJBMDAwQTEwN0U1MjRBMzkwMEE3OTQwQzZBN0MyMkNBOTA5RjJFOAotOjEwQzJCMDAwMjE1NDJCRjQ1MUY0ODhBOTM1QzhDMUJFMDc3OTU4OTQ4QwotOjEwQzJDMDAwMjAyRjk0NjkwOTFFQTUzMTFGQzlBQzExM0RDRDA0REE5OAotOjEwQzJEMDAwMTM2RkQwMTE1RTBGOTM5NUY4MEUzQkEwNUQ4ODdCOTQ5MQotOjEwQzJFMDAwOEVEQkVGNjRGQjEzRUU3MzZDN0Q3RTdGRkVDRUEzNTk3NQotOjEwQzJGMDAwMjRCNjFDRUY2OUFDM0M1M0ExQzlCQjNBNDhGNEZEREYzRQotOjEwQzMwMDAwNzM3M0NBRkYwMjdBMDg3RDA0NUNENzk5NjNEQUMxOUIxNAotOjEwQzMxMDAwODVFQjc1MzIzRDc1RkNDMkE0MzRGMDhCMUJGOEU4RkU0QQotOjEwQzMyMDAwQTQ1MTU0RDc0OTRBODM3ODc5NkI4MTk0OTZFOEQwQzI1NgotOjEwQzMzMDAwNjFGQUMyNzhFQzQ1NUMyRjdCNTExMENGMTczNDdGRUY0OAotOjEwQzM0MDAwRjVGQTRGNTNGQUZFOEU3Njg0QkNENENCMTczRThBNzEzMQotOjEwQzM1MDAwRTJCQjQ5RDIxMzEwNUZDOTNGMzUxMjU4Q0Y3N0JGM0ZCOAotOjEwQzM2MDAwRjMyNDQ5MTgzREVFQUYxQjRGMjVGMTlBQkNEMUJCREYzQQotOjEwQzM3MDAwM0U1RDZBQTJGMERGN0RGRTc0Mjk4RkNBMjZBOEQzNTNFMgotOjEwQzM4MDAwNzUzNzVFMjk4NTNDOTVEMEYwN0JGNzY1OEFBRjVDNEVBQQotOjEwQzM5MDAwMEEwMzUwQTY4RTMyQzY5QjcyREQ5MkQwMTg3NEVCNEEwNwotOjEwQzNBMDAwN0RFODUxQzgwQjA2OUIxRDIyNDdGREIyQTdFRDdGMTEwQQotOjEwQzNCMDAwODBFRjFBMDA3RkZBREM2MjE5REVDOUQxMjVGRUVGQUVFQwotOjEwQzNDMDAwQjcxNzU3RDA3ODcyMkIyN0NCMEUwRUU4MjY5QjIxN0UwRAotOjEwQzNEMDAwMjBFN0NEMUVFMDlCQUQwNUNDMkU2RTdENTgwQ0NBQTA4QgotOjEwQzNFMDAwQUY0MjAxMkZBNjg1MkNBRkI4MkY1MzdENkJGRDc5MTA3RQotOjEwQzNGMDAwRjZGQTQ5MEJFNzlCMUYwNzc5QkFBOTA0Rjk3QUNFRDU1QgotOjEwQzQwMDAwNDAwRUVDMUYyNzEyMjEwRkY4RDA2NDMwMjI5Q0UxMEI2NAotOjEwQzQxMDAwRjY2MDM3RUFEOUMwNENEMDM3NEQxNzFFOUIwNEVCRjVCOAotOjEwQzQyMDAwRkI2NDc2MkU0MENEQUZBNTFBMDI0RjU2RTc0MjdFQ0Q3MwotOjEwQzQzMDAwODNGOUI1REQ3QzFGRUU5M0M1OUFBRkREQzVGNjBGRjgyNQotOjEwQzQ0MDAwRjk0NDg5OEY3RkRCMTE5QTFCRTYwNzU1QkUyMkZCRUQ2RAotOjEwQzQ1MDAwNkYyNDlFN0NDQTVGMkYzNTVBM0MzMEVFNjcxQjQ1N0NBQgotOjEwQzQ2MDAwMUU2OTc0RTFGMzg5NDYwOTlGREY2RjJDQzQ3NjdCMUIzQwotOjEwQzQ3MDAwM0Q1OERFREQzODBCQ0JBRDI2QjJERUE3RTFCMzRGMzgzOQotOjEwQzQ4MDAwRDkzQzU2Mjc5NDdEQzI0OTlGRkQxNEVFNjVEQUFFOTdEQwotOjEwQzQ5MDAwRjY4N0U3OUNCMzQxNjMxQ0E1Qzc5QzJCNTQyRjRBNTBEOQotOjEwQzRBMDAwREZFRUI5NENFMTdEOTFDMjgzRTdFODdBNEIzMUJDMkZENgotOjEwQzRCMDAwMERGNjg1MDQ0QUJGRDIyMkY2QkVCN0IxNTdFOTc3MDQxQwotOjEwQzRDMDAwRTFEMjdBQTQ3RkU5NTU1NjZGQUY2NTcwRUM1N0Q0RjY4OAotOjEwQzREMDAwODVDNUNBMzhDNUQwOUU4RTVCQUNGNDhCODQ4QkVGMjlBMgotOjEwQzRFMDAwRENFMjY4Rjg0NEI2QTdERUJDOTE5NDJBRkIxNDEwRDdBRQotOjEwQzRGMDAwOTlGQTM4RjA2NzY0OEU4NDBFQzE3RUM2RjlBN0NCQzA2NgotOjEwQzUwMDAwMkVFQzI5MjY3OTA2REFDODk0RDJDRjQxQjlCNzgxODhCMgotOjEwQzUxMDAwQzY0NDQyMEFEM0E3NzU5NDAxRkY5OEJDRjg1RURFQ0JFRgotOjEwQzUyMDAwMDcwRkU1QTIxRDQyQjhBQTFEQ0FBODBENzk4MTdGRTJCNgotOjEwQzUzMDAwM0QyNENGNTg0Q0Q3NDFCQTg0RjY4NkQwMzVCNkNGQTEyQQotOjEwQzU0MDAwNDM1M0YxQjlBNEIxQjMzN0U4N0ZFMEJDMDFBRTBCRURDMgotOjEwQzU1MDAwOUY1RUFCQUYxRkFGM0RCNTI3MTFGNUQxRjlFRTgzM0UxRQotOjEwQzU2MDAwQkZEOEE4M0ZFN0QxNTU0N0I1MzhENTFCNUQ4QTFGNzZBMAotOjEwQzU3MDAwMDBFQTYxQkRFQTRBMTMzNjQyRjlEMTg3RDI0MTZFN0ZBMwotOjEwQzU4MDAwNEY1QzFDRUNCQjhGRjQ4QkYwREIwRTM0OUU0QUFEMjg2NQotOjEwQzU5MDAwNjA3ODAzN0QzMkI3ODkwN0I1RkU2Q0E2NENGOTU1MjM0OAotOjEwQzVBMDAwMDc3QjAzN0M2NTM3RTYxMUZDRTkyQjM0RjE0RkFCQzlGRgotOjEwQzVCMDAwOUY0RTg1OTdGQ0Y2QTlENzE3ODE3RTAwQkIwQzdBRkFBRgotOjEwQzVDMDAwMjM1Nzk4MUQxRkIxREY1Nzk5N0U1NEZEMDY0MTU5QUY3RgotOjEwQzVEMDAwQ0Y5NUZDMkUwNDcyMkY4MzNEMDJGQkU0RjE5MzcyREFCNwotOjEwQzVFMDAwM0Y2NTg2ODEwMzNCNDQ4QUY1RUY5RDAyQzNDQkVEMEE4QwotOjEwQzVGMDAwNzI1MDRFNzZGQTVFMDZGOUUxOTM5RTIxQzA0NzdGRThCRAotOjEwQzYwMDAwMzc0QkMwNkY3QjhGQUQyRDA0RkY3OTBCODk5N0FDRjQ0RQotOjEwQzYxMDAwQkRGQjg3MTcwNUMwQTNENTMwMjgxMEFBQ0Y4NkY2NkZCQgotOjEwQzYyMDAwNUJDQzUzN0ZBNzU1NTBGNDI0MzgzODc0MUQ1QjUzMTVFOQotOjEwQzYzMDAwQkQyMEZGQjFBMzAyRkMwRDgzN0YwOEI2N0FENUY2NUQ1RAotOjEwQzY0MDAwMzZGRkEzNTBBNjdGNUUwQkI1REZGQkFEQUE5RTBENzQyRgotOjEwQzY1MDAwNzgyOThGRUQzN0IxRjJEMEZFMkQxRDMyOTY2OUZCNjIzRAotOjEwQzY2MDAwNTY2RTQ5ODdGRDI5NkZCQTgxRDIyQkJFQTlBRUUzNTQxRAotOjEwQzY3MDAwMTY5NEQ1RjY3NTFENzIyNjVENEJDNTlFMTI4NzNGMTcyMQotOjEwQzY4MDAwRjRERTQ4NTlBNEU1Mzg0RDk5Njc2NTYyNjFDRkJEQzdBRQotOjEwQzY5MDAwRkU0QjgwN0REM0Q2RDRFMTkzMTk0MENGMUY3MzdEQTA4QwotOjEwQzZBMDAwNUZFQjhFM0Y3QjE0Q0FGNTM1NDQ4MjNDOUNGQkM4NDE0RQotOjEwQzZCMDAwNUM4NzY3OEQ2NTQzQ0UxNDkwRTM1MzIyM0FFNEYwQTc3QwotOjEwQzZDMDAwQUUwQkY1NDcyN0JCMDhFNjhEODUyMDE3Q0MwMzNGQURBMQotOjEwQzZEMDAwQThEMzgwN0VEQTc2RUE1QjE3MDNCRERCNTM2MTlERTc2MgotOjEwQzZFMDAwQTQzMjNGNjM3MjkwQzJEMUM4QzE2NDlFODZFRkQzQzBBQQotOjEwQzZGMDAwNUM5OTg2MDdCNTcxMTVGMTE4MDA1RjI0MzlGRUU3RENGNwotOjEwQzcwMDAwRTIxMEM1QTc3Nzk2NkM5QjQyQzdEQkJDODFGNzM0NDkyMgotOjEwQzcxMDAwNjA3RjgyNERFMDhGOTEyMzFDREE4OURDNTNFOTNCQkVCOAotOjEwQzcyMDAwNDFDQjU3RkI5MkJCMjFBRTMwRUQ2MDdDQjAzOUI3MkZDNwotOjEwQzczMDAwNzUxQTdEQjY1QTk5N0VERDlDQTg5NDEzRjVFNTE2QzU0OQotOjEwQzc0MDAwNkY3NDI1Q0E4OTQ5RjQ3REZEOTEyN0IzNjU4QUM3RDBFNgotOjEwQzc1MDAwQTE5OTE4MkZENkFCRjhDODdCMTc4M0JEMUMzQTNBM0I3QQotOjEwQzc2MDAwNjEwRTlENkZERENGNTlGRUIyQUVCRjc4MzFDQ0JGNkU4QQotOjEwQzc3MDAwOEY4MTQwQkM1NkRGNEZGOTQ5MkIxRjU0MEVCRDkzRTgwMwotOjEwQzc4MDAwM0NCQzlENTM3OENBMUY4QjUyNzM5NzU4RTlGQTNFOUI2NQotOjEwQzc5MDAwRTcxNTgxNUUxQkJBQTZFQ0I2RDAyMEU4NTk0MTlDMEM4NwotOjEwQzdBMDAwRjJCMkExQ0JCMzFCRjg2OUYzOEM0QkM4OEY5NkNGNzk0QgotOjEwQzdCMDAwN0U1Njk5NDRFM0FGN0IyQjE3ODM1QTRCMzUzMEI5QTQ4RgotOjEwQzdDMDAwMEM4NzdBQ0U5OEI4MERFOUZGOUY2NTY0RDg5Qzg4RTQwMQotOjEwQzdEMDAwQzRGRENDMUNGODNGOEFERjI0RDE1QjBFRURDNUE1MzQyNwotOjEwQzdFMDAwRjQwMTNFMTU3Q0M3QzAwRjkxQ0IyRDk4MEYyRDE3OTdFNAotOjEwQzdGMDAwNjI3REY2MUE2MkU4QTBGODFDOTQ5MjkyOUE2ODU3NkJEMAotOjEwQzgwMDAwQkVENzAwN0U0QTlFQ0Y4Njc5NEU2MzVDQzUwRTkwOUI1NAotOjEwQzgxMDAwNDM2NzU5MzlCQzRFQkZDMjc1QjIxNTA2RkIyQzE0Q0UwNgotOjEwQzgyMDAwNDQwNzJGNDJDQzkxNkFGNDVBNjBEREE4MkMwRjFDMkFEMQotOjEwQzgzMDAwMDE3OTIxNjhCRkU1Q0YxNjYxNUVBNzJCOUVENDNDNEZERQotOjEwQzg0MDAwRTlENDYzRDhEOEYxMTNEQUFFMjdDOTQ5QzBBRjZDRTU5MwotOjEwQzg1MDAwQjhGNTJCRjA3REY5OTRBRDE0NkU4RkIyN0VDNjQ0OEY3RgotOjEwQzg2MDAwMDhFQkQ1OTNBODJGRUZFNzM2M0UwQzcyQjRFNTczMkY5MwotOjEwQzg3MDAwMkM4NkY5QTU5QUJEOURDOTE0QkZGQUNGQkREMEUxOUEwNwotOjEwQzg4MDAwOEQ3NENFQjM1MEJBRDRBN0JDRDA2MUExNzRFRjY5RjI1NQotOjEwQzg5MDAwQkE0NTRENzlEMjlGQTlCNkM2NzlCQzgwNzJDQTI3N0VBNwotOjEwQzhBMDAwRjYxMTkwNjM1QUZGNTMwQkU1REY2NzkzNTQ3RjgwRDVGMQotOjEwQzhCMDAwRTdFN0E5NjUxQUJGNTIxRDZGNkMxQTI5Q0IxNkFBRkZBQwotOjEwQzhDMDAwRjMzNUVEMkJBOERDN0VFRENCNDZBMkMyMEZEMUIyNkRDNQotOjEwQzhEMDAwNzY5RkM1NjZDNDc5MTAxQkY4MzM1Mzc5RjQ2NzZDODk2OQotOjEwQzhFMDAwNkM1RDZEOTNGM0QwNEZFQUIxMzI3QTBENjcxOUIwN0U2QgotOjEwQzhGMDAwQTFGMTM5MTFGMjAwRTZDOUJDQzE4Q0YxNzNDMDY3MkFGRAotOjEwQzkwMDAwODE3RDU3OUVCMEJDRUUwMUVGNjQwOUQyQTM2QzFGOTBFRAotOjEwQzkxMDAwRUI1QzhFNzFBMEI1NTBCM0VGNDcyMDVFRDVFRjEzRjJGQwotOjEwQzkyMDAwMTFFNTAyRjM2MEJBODFEQTYxRTdGOUU1NUMzNjg1NTcxMwotOjEwQzkzMDAwOUJBMkM0ODU0RTkyMEU3OUQ3NDAwQUQzMzM4RkY5RTQ3NwotOjEwQzk0MDAwM0I0RDEyRjBEODIwM0I5RjRBN0NEM0UwOTlCNjJFM0Y1NgotOjEwQzk1MDAwNkRBQzczODVBM0Y3RkY0M0U4OTdFRDcxMTgxNEJBNDlERQotOjEwQzk2MDAwQkI0M0Q0NDc2RDc2M0MyRjgyMUVBMTY2N0VDNzAxRjA4MwotOjEwQzk3MDAwMjc5RDNDRjI0RDAxQzgzRjJENkY0QjY0RjlGNkRDREU3QwotOjEwQzk4MDAwQzU0RkNGMDJGRkYwNzQ4MTAxRTQ5RjE3M0QyMjlDQTdBMQotOjEwQzk5MDAwMkI4QjJCNDkwMEJGOEQxRkUxRDM1NzUwN0U4RDQ3NjdFRQotOjEwQzlBMDAwREYwREYxOUUwMEYyNEJERjFFQjBCMjczQTBDM0U5QTQwRAotOjEwQzlCMDAwMEZGMkJGQkNDQjRCQjRGQjgxQUFGQ0VFNkNCNEUwNzNBRQotOjEwQzlDMDAwNkZDOThBNkZDMDNFQzFEN0RCMDlFRTA3MDgyRTFGOTZEQwotOjEwQzlEMDAwQTUxNkMyODE1QzFDMkZCRDE3QzdGRDJBRUY0QjU4MDc1NwotOjEwQzlFMDAwRkFGNjJDRjNFQjgxNUQzMDlGMTE3QThBODM3Q0M2N0I0QgotOjEwQzlGMDAwMTY1RjAyQ0M3QjVGQTJERTlFREU5NkNBRTI2MTM5ODVCRAotOjEwQ0EwMDAwRTlDRjM2MjVERjI5NUNCQjA1RjMzN0FEMjY1NTFGNTkyNQotOjEwQ0ExMDAwOTY4MDdGMkFGMDdFM0MyRjZCRjY2RkYzODJCRUIyMTBCOQotOjEwQ0EyMDAwNTkxNjM1Rjk3MDRCQTYzRUFGMjU1Q0JCMTVFMUM4MjlGOAotOjEwQ0EzMDAwNkM5Q0M4NzMwNTBFNEU4NTRGRDc2MTBDN0Y1OTdENDY5RgotOjEwQ0E0MDAwOUU0MzY4MjAzRUQ0NDc2NDgwOUQ2RkQ4QjY2QjdFNUE2MwotOjEwQ0E1MDAwOTIwNkNFMzZDRTlCMjY4RUMxMUY1QkFFMTk0OTUwNzMwRgotOjEwQ0E2MDAwMUU2NTBCM0YyQ0MwN0NCNjVDMTNGMDNENzEwREM2MzdDNAotOjEwQ0E3MDAwQzFGRTBCNjVCODBFNThDNzE3QkY4Qjc2Qzk0NjNBNDMzRgotOjEwQ0E4MDAwNzA2MENBMENGOTA4Q0RGOTRGRTJFMjg3NDdGODNGMkZGMgotOjEwQ0E5MDAwMkMxRkI4N0ZDRTQ1OTEwRjQ5NUY4RURDMzcwRjgwOERGQwotOjEwQ0FBMDAwQTU3RUM1MEVGQjZGMDQ5OEU3QkJGM0M5MzBGODkzODRFRAotOjEwQ0FCMDAwMEMyRTA0RjlBRDlCNkZDMzdDRjQxNkQyNjlCMTQwMUVGNQotOjEwQ0FDMDAwODVFRjE0QjU3OUUxQkFGRThCRjE3MDhFOEUyRUE5MDQzNAotOjEwQ0FEMDAwRkVDRDk2MUY5NkU5RjI1MUVBMzkzMEI1NUM3RjY0MDNDQQotOjEwQ0FFMDAwRTYwOUI3RjQ1QzE1QTY5NDIwMUEwMzI2MUE4RkQ1NTlDNwotOjEwQ0FGMDAwM0E0Rjk5RjNDMkVEQUQyNkJGOUMwMUZDRkZDMzQ3QkQ4MQotOjEwQ0IwMDAwMTlGNEQ1RDcwMDRGMzgzRkQ1MzA2MTI2QzQ3RjdGMTA0OAotOjEwQ0IxMDAwNkJEMjgxNEU3NjVFQjExRjZCMkM2ODNGNUFBQzM0NUU4RgotOjEwQ0IyMDAwMDMzRUJEMzAwOUVEMjlBREU2QzEzRUFCRTMyRjU2RTIzMQotOjEwQ0IzMDAwRTIyMUYwMkY2NjQwRDczRUY0RDM1QjZEQkUyQjYwOUZBMQotOjEwQ0I0MDAwODBCMTc5RUFFRkI0MjZBOTdDQjNBRDAzRTRBNzRCMDgyMgotOjEwQ0I1MDAwRUI0NUYwOUZCQTZDQUM2Q0VGREFENkQxQzJFQzMwRjM5NwotOjEwQ0I2MDAwNkY5Q0RDNkVGMDZGNUExNTdGNjk2OEZGNzVGNDhGQkFBMQotOjEwQ0I3MDAwODQ0RUU2RkY3RERGMkMwMTlFNUQzNjlGMDdFMjQxNzkwMgotOjEwQ0I4MDAwQzc2NDA5RUM0OTQ1OUEwM0U3NjE3QUMxREMwREZBMzBDNAotOjEwQ0I5MDAwRDlFOUJGMDQ3RTBCNzEzMkZGRThERDk0RjNEOTIwMEY5MQotOjEwQ0JBMDAwNTFFMDBDNzMzNzAzQzdBNTg3NjM5RENCQzY3Rjk3MzNDRQotOjEwQ0JCMDAwRkE3Njk0ODREQkQxRkUyMURDRkZCRkNGODI3OTFFQjVFQgotOjEwQ0JDMDAwRkQwMTkzNUVBRUQ1Njc1RTJBQTMyN0U4MTM5MDZCRjU0RgotOjEwQ0JEMDAwQkRFMERGODRGMjZCMjYwMTk0NUZCMzRCQkYyRkE0Q0E4NAotOjEwQ0JFMDAwQjM3MDZEQjIyRTRGRjlCNTE0QjYzRkE1RUEwMUUxNUEwNAotOjEwQ0JGMDAwMTFENkNCMEE5RkVFODRGREYyMzFDNzQ5OEEzMUNFNzQzQgotOjEwQ0MwMDAwRDQxM0IxQzcyOTU1RjQwODUxRjJCQjNDOUUyNzUzRTUxNAotOjEwQ0MxMDAwMjRCNkJFRDBFNzZCMjNGNTlGRkE1NEY1REYxNzE0M0UxOAotOjEwQ0MyMDAwM0U2REY1Q0Y0QkE1RTMzQzEyRUM1QjY4QzNERUZFNUJDQgotOjEwQ0MzMDAwNjE3REZFQTRGMDY1NjFFRjkzQzc4MEZEMkU4QkRFNEYxMgotOjEwQ0M0MDAwQTVDQzgwNzM1M0RFNkZBNEE0QkM3RkI5RDk5MENBRTY4QgotOjEwQ0M1MDAwMzM1QThGQjFGQ0MzQjY4NzI1QjRDRjVGRTUzRDM2NEY1RAotOjEwQ0M2MDAwMTQzRDU2NzNDREFFRDM1RjE5Mjk2QzlDMUE1RTQ2M0RCOAotOjEwQ0M3MDAwNTY3MzJEMUVFQjNGMzg3QzJCMDk0RTFGMEJCRTAzRUI2QQotOjEwQ0M4MDAwNDdFMEY3MzFGOEM3NEI3RkRBMzUwQkUwMUYzNjE5Q0M5OAotOjEwQ0M5MDAwOUE3ODZFREJFMTA1Njk5MDk3REM2NkE1N0FEOUExOTM1NQotOjEwQ0NBMDAwNUIyRkM4MkQ5RjRCNDZFMjIwOTBGMzdEMjNGNUYzNzc1MQotOjEwQ0NCMDAwODM3RkYzQUM1NkNFNjc4MUZGMTVFRUNGRDM3NURFQTcyOQotOjEwQ0NDMDAwQzgzRDkxOTc0NDZGNkY4RjY4M0ZFMjVGNTU2MUZCNDhBNQotOjEwQ0NEMDAwN0M1NDNEMDI2NUYwQjdGODNGOUI1NUZDNTAwRjNENjkxMQotOjEwQ0NFMDAwODg4MEE3RkE2MzcyMzVDMkRCM0M4M0Y5MTk5Njk0MDdGMgotOjEwQ0NGMDAwN0YyNkU3MDNGRjA1Q0IyMDBFMUE3RTk4NDhERDY0MzRCQgotOjEwQ0QwMDAwREQyRDBBMUZENjVDOUJBMDVCRDczMEJEMjdFQURFRkY3NgotOjEwQ0QxMDAwNDdBMzhCMDQzNUYyRjY1MUZGQjY4NTY4OTc2MTlEMDBGNQotOjEwQ0QyMDAwMEU5MTc3NjJCRjAzMTkyNEE4OTFCQkZGQzNFMzgzRTI4RQotOjEwQ0QzMDAwMzEyNzA2MUVGM0ZFQ0U3OEU0RUFFNDMyOEM0N0JFRUVERAotOjEwQ0Q0MDAwRkQwN0M1QzM2OEI5RTZCRUFDMjk5QjQ0OTJBMTJEMTc2NwotOjEwQ0Q1MDAwODcyQzE5OTczNTdFQ0JGNDUzQTJBRTNDNjNDMEE1NkJFQwotOjEwQ0Q2MDAwM0ZGMzlDQTRBQjlGM0Q1OEE4QUI5RjczQzVBMzJCREY5QgotOjEwQ0Q3MDAwM0UzQzRCRDdGRThFNkI1RTVEQjk4QzJDRDJCNTlGNkY1RgotOjEwQ0Q4MDAwNTlBRTJCMkYxMEQ3RUFEQTRGNTRGMkU0NzdCQTM2RThDRgotOjEwQ0Q5MDAwREEyRDkyMUVENkI1MTMxQTkyQkYwM0ZFQ0IxREQ3RUYyNAotOjEwQ0RBMDAwQjA0MDdDQjFEMzYxQTg4NDdEODc5REJDREY5MjE0NDVERgotOjEwQ0RCMDAwM0ZERUE2QzAxREIxNzdBRTU0RUNCRjQwMENCNDgwM0U0MAotOjEwQ0RDMDAwNUM0MDQzRTE2NkVBQUZBNTU1RkI1QUMwRUU1NzhBMkM5QQotOjEwQ0REMDAwOEZBOEU2Q0ZDOUY1OTUxNUYwRkVFRTQ1NDRFQzQ4MEM1QQotOjEwQ0RFMDAwOTdFRkZDMTQyMTUwMzY2NzdBRjFGQzlBQjVDODgwRTdCQQotOjEwQ0RGMDAwMDM3NjE3QUQxODczRkY2MTlGRTJCRkVGODlCMEY3RUFDMgotOjEwQ0UwMDAwMzNDMUM4Q0U0OTQ2QkUyRjQ4NjM3RUMyOTM3N0VDMjMxOAotOjEwQ0UxMDAwQjA0RjYwNzEwNEYxN0I5RUEzOTM3N0JBQTBGQ0Y0MUQyMAotOjEwQ0UyMDAwREY3NjQxOUNEMTNFRjkxMzJFRTA5RkI2QUNBRkU5Q0U0MAotOjEwQ0UzMDAwREZEOUYyMDk3RURGMTEwOTc3QkYwMjM3RkZEQTYzMTYwNwotOjEwQ0U0MDAwQjA5RkJCMzMxOTNEMjNEQkE5RTdEMDc3NUI1OERFRkNFRAotOjEwQ0U1MDAwNkYzNUNGRjIzNDI2M0YxRkY2M0MyRjI4NzA3NzVCODI2OAotOjEwQ0U2MDAwOThGRkVGMjhGQ0RCRTA1RjNEODJGRkUzODRFMUZCMzhDNQotOjEwQ0U3MDAwOUUzNzZFQ0YxMjI0QUQ5RDU1OUZGMDdEMjhDQ0E3MkRGNwotOjEwQ0U4MDAwNzdBNzBCRUM2RTdCRUUyNzc0RkVCRjM5OUZFREFCNDVBOQotOjEwQ0U5MDAwRjZFMzVDNkNERDc2OEI3RkRCRjkzQ0Y2NTdDRjY3Njc5QQotOjEwQ0VBMDAwRDRGRDc1NEI4Qzc5MTVBOEYzNzIwNTkxQ0ZGRTU2RjMxRQotOjEwQ0VCMDAwRkFFQzg4M0NGRDdERTZGNUEyMzI1RTdDMUFGMzRGNzdGMgotOjEwQ0VDMDAwNEI0QzhFMTI4Q0JFNUZFNkU1QzY5NkJGODQ1OUZBRjNEMgotOjEwQ0VEMDAwNDg3MTFFN0QxQzkwOTdFRjFCRjM5Q0QxMzk4NTNFQjFBNAotOjEwQ0VFMDAwRTQ3NThENDk0RTAxM0M1RTZCNjRFNzY5Q0YwMjFERTkzNAotOjEwQ0VGMDAwRjM5QzdGNDIzOTdDOTdGMDFBOUNDQkUyQTBGRjhFQjg1RQotOjEwQ0YwMDAwQjFENjYxQURERkE4QzM3MzNDRkQzMDI1OEQ5REE3NUMxNAotOjEwQ0YxMDAwQkQ0NkRGNkY5NUNGQUUzRjE3QTU5QzI3QTA3NDdBMDI2MAotOjEwQ0YyMDAwRjJDQjJBREQ0NkFERjM4NzQ0QTc1OEZDNzZCMzc0RUEwQQotOjEwQ0YzMDAwMjg3QzdGNzQxQThGQkZFM0QzOThGRDFBOEY0RTJBMUY2NwotOjEwQ0Y0MDAwQzU4MkYzRkYyQjFGOTUwMzdENkU4MjhGNTRGRUY5NUIyNAotOjEwQ0Y1MDAwRDNFNzFGOEQ3RkFBRkY4RjNFNjNEMkU3QjE5QkE0OEZEQgotOjEwQ0Y2MDAwQUE4NzdBMDU1MjEzRUQxQzQ4OTM0QjQwMzk5REM0MDU5RQotOjEwQ0Y3MDAwQ0UyQzgyMzhGQjJFMjM5RTc3Mzg3M0EwQTc4RUU0NjlDRgotOjEwQ0Y4MDAwREIzMTdCN0FBNkYyQUI3NTc4RUVBRUM2OEVFN0JEREVGRQotOjEwQ0Y5MDAwMzA3OEZFQTUwNEYyNTI4RjE4MzFFRjE2MDlGRjhDNDI0QgotOjEwQ0ZBMDAwQkY0REFFNDRFNUJDOEU5NDAyRjQ3RUEzNjZFNTk4RjNEMwotOjEwQ0ZCMDAwMjM5NTlBNzlFMUJFOUEyRDVDMzY1MkI4NDQ0MkZBQ0E1QQotOjEwQ0ZDMDAwOTRCRTkwMTczODUzMzkzRDJFOUE1RDUzRDcyRkQ2Nzg5QgotOjEwQ0ZEMDAwMzdCQjdFNkZENDM0QkZBRkY1MUI2RjdFMkI1RDc5MzdDNwotOjEwQ0ZFMDAwQTUxRkUxQzQzQUNCNEJCMTczMDFCRDhGMzNGRkJERDc1MQotOjEwQ0ZGMDAwNDBENzkzQzJCRjBGRjJEQ0IzMjEwRTIwOThGRjVCQkQ3OAotOjEwRDAwMDAwMjZFRDIwRTBGQjJGMkU3NkZFQTI1RjkwRUFGMDFFOTAyOAotOjEwRDAxMDAwOTU0Qjc3QzNCOTg4QjNBQjEyMzk0ODZEQTg3ODdDNDU3NgotOjEwRDAyMDAwNTlEN0QyRUFFOEZFRTc3MzRBN0RCODNGNDcyNjQ1NTkwQgotOjEwRDAzMDAwRTcyRjJBRkVDRkFBNkEwRUZEMDhDMjdCQjNCNEY3N0NBNQotOjEwRDA0MDAwRkM3MzQ0N0Q2NEZGRUZCQkUyQjFGRTZDOENGMzk3NUYzMQotOjEwRDA1MDAwNTdGQUFGQUUxQUJCM0ZBOTRENTEwRTYxODg1M0I1REZFOQotOjEwRDA2MDAwOUY4RkYwOTUyMjBGOEI1REZFM0UxNzZERkYxQUU3RkYzNQotOjEwRDA3MDAwRDJDNzgxOEYyNjNCOTBFRjA5NEY3MjYxRkY3RjA0MEU2QwotOjEwRDA4MDAwRUZDNTczMUI5N0VCMThERDIzRTE2QUUwQkQzNDE2QkNENgotOjEwRDA5MDAwNThGNDU1RTdBNThFNTc0MjdDMThERjkxNEEyMjNFMzE1RAotOjEwRDBBMDAwMUJDNzM3QzI3OUI2QkJFNzkzMDA4RUNGNEI4ODRGRjJEMAotOjEwRDBCMDAwOUIzNEFFQ0IwREYzQzc3OTgzNTg4NzFGQ0UyODcwRkEwNwotOjEwRDBDMDAwRkY3QkZFMTI4MEQzN0ZDNjIwRUVDODhEOEQ3NzJDQkRFRQotOjEwRDBEMDAwRjBBNkMyM0Y0RUEzN0YwNzlDMkYyMEVCQjlBOEYyN0Q5QwotOjEwRDBFMDAwQ0U2NUM1NzZCQjVDQ0MzRjI0QkMzRjBCQzY5OUI4REY5MAotOjEwRDBGMDAwNkY5MjI4REM3Qjk0RjM2Nzg0RjhCMzk2NkJDNkRGQTU0OAotOjEwRDEwMDAwQ0MzQkIyOUZEM0M4RjZDOUM5RUI0QzBGRjU3NjNGOTIyMgotOjEwRDExMDAwMTU0RDhFNUU1MUZDRTY1REFFNDJERDM5REYyQURGQTNBMAotOjEwRDEyMDAwMjZEMDAzNTU0Qjk3OUIyNDA3RDQ0QjhDRUYxNDNDN0FBNQotOjEwRDEzMDAwMDU3RjU2QjEyMzRDQTc5OEZBNDdBMTRGRkYzOTdGMzM5QgotOjEwRDE0MDAwOUNGQjU5REZDMEUxMzlFM0EyRUQ4Q0ZGRDY2RjNGNkE0QgotOjEwRDE1MDAwQThBM0NGODM4QTFDMkU1N0U0NTBFRDZGNEY2NzcyRDM3QwotOjEwRDE2MDAwREI2RENCMDZGQzdCQjVFNzMwMjgxRUY3M0Y0MzMwN0ZGNQotOjEwRDE3MDAwNjc0OEZGRTIxRTk5Mjc2NDkwMjM0QUJFRUZDNjVEQjA2MAotOjEwRDE4MDAwRUYzMEE4RUM4RkU1RDBGQTI2QzBCNzgyRTFCQjdFRkI3QQotOjEwRDE5MDAwNzI4Q0Y3Mjc1NkIyNzhCRjVGMjA3ODFFRThDRERCRTNBQwotOjEwRDFBMDAwODIzQjAwODZDNTdCRjQzMTVBQkVGNEU3MDREMkUxMDkyNAotOjEwRDFCMDAwRjNDNzUzNDI2ODJBRjA0NzRBQjNFRkUzQkUyOEVCRURDQQotOjEwRDFDMDAwNTZGMEZEODM4M0VERTdDNUEyOEJBQUNGRDU3NjJCNzhFOQotOjEwRDFEMDAwQzkxNEFERkRDQTRBQkQ1RTUzRjE0RjM2ODdERTI1NTFGNQotOjEwRDFFMDAwRjJFQTIzRkMxODFDREJFRUJEQUFFOEU5NTcyMkUyQTYwRQotOjEwRDFGMDAwQUE3M0QxRTM5N0QyNzRDNkM3QkRDMUYyQ0Q3OEJFNTkyOAotOjEwRDIwMDAwMzY0Qjc4OTY1OEMxQzcyOUFGNDY3QURFNTg0MjQ0MjgzMwotOjEwRDIxMDAwREY2RDk2QkUwQ0Y4REQ1MzY1OENEMEMzNDE4NEIzN0VDMAotOjEwRDIyMDAwQTk1RDM3QUZBN0JBN0YzQTE1QkU0M0NBQ0I2N0ZBRjdGNQotOjEwRDIzMDAwQkQ0MjA3OUUwQjdGODgwNDA0RDg1RkFBMjZGMjNDOTQ2NwotOjEwRDI0MDAwNEIyMjk5ODBCRkNGMkFGNDUzRjEzQjRCQkM3MTMzNDA0MgotOjEwRDI1MDAwNUYzNDQ0Qjc5RkJFNzQyNjI3Njc3REYzNTdBMURENkQwOQotOjEwRDI2MDAwMzFFMkI5ODQ4QjU1QzlDQjIwMEYyRUZCNEMxRTM4RTYxQQotOjEwRDI3MDAwNzRCMTY1NjVEQzgzOUE3NTU1RUQ5RUVBREY5Q0YzQ0Y0QQotOjEwRDI4MDAwMUZEMzdFQURGMkU5RDdBQjU3RThDNDdENDBCOTlDMDQwQgotOjEwRDI5MDAwMEU1MTNFOUJGNEE1Q0I3QjY3RDJGMjk5QTAwMUVGMTkwQQotOjEwRDJBMDAwQzIzRjJDNjdBOEU3RTAwOTlGNEFENzVEQTkxQTMyMEM1NAotOjEwRDJCMDAwNjI3QkY5MEI2QzVFRUJBQTgzMEI2MDZCRUNCRTY3M0E4QQotOjEwRDJDMDAwRjdDREE0RTU4N0QyOTkzRkIwQzMzRUVGNzY5MEQ3NUYwNAotOjEwRDJEMDAwMzU4QzYzMkYyM0Y4NjlFMjdFOUJBRTVDN0E4RTA4RDA5MgotOjEwRDJFMDAwREZCRjJEQkE3REY4OEYwQ0JCNzJBRUM4OTMwREVCQjBDQgotOjEwRDJGMDAwNkU3QkY0NzZGNjRDMDdEQjI3RkM4QkIxMjY1QUZDQkQxRgotOjEwRDMwMDAwM0I4M0M5QzlGQTFBMkVBQTNFREY5RDExQzdFQTZCQTM1NwotOjEwRDMxMDAwQzNCRkRCQURFMjIxNjZDM0JBQUM4RjgxRUYxMjM3QjM3NgotOjEwRDMyMDAwNjc2RkI1QUU1RTA3RkFFMDhBNDFBRkE3RTdCQTE5NUY0QgotOjEwRDMzMDAwQjhERDZDRkY3QkE4RkJBNUQ2NTRFMDg3OUQ5QzA4RTc3MQotOjEwRDM0MDAwQzkyRTI1N0EyNjAzRkY2RDY4Qjk4OEYxN0VBMkQyREU0OAotOjEwRDM1MDAwOThFNkRCOTc0RURCREY3QkVFRjkxM0QwQkVCRjlBNzgwMQotOjEwRDM2MDAwMzgyOUI2MURFODRBNTdFRDgwRkExREI0NkEwRjNCQUQ2NwotOjEwRDM3MDAwNjA4RkUwN0Y2MTlGMTVCNkZBMTM5MjYwRERFNTQ3RjA5QwotOjEwRDM4MDAwN0M0Q0I3NEQ2NERGM0Q3OTY2NjhGREVCMUU0NUNGMENFNAotOjEwRDM5MDAwRjVCQ0JGRjVCRUFGNDZFRjE3NDVGQTdGNDM4MkI0Qjc4MQotOjEwRDNBMDAwODQ4RTNCNDRGOUFEODlDRTg3NUM3RkVBNTZBREJENTE5MgotOjEwRDNCMDAwRTUyMUQ2QjgzN0VCMDcwRUY1QkMzRjNGNzBCQzc5OUUzMAotOjEwRDNDMDAwNEFDRkJEMjkzRkYwQkRDQUE3RjY5NTQ4MzBDRkNFNUIwNgotOjEwRDNEMDAwQTNFOTVCNTUyRkJGQTFFOEM1NDg3RTE5RDEzNzhBM0UyNgotOjEwRDNFMDAwQjkxMjFDMUJBRjhGM0VBM0M3Njc1RDQwOEY4RjJBMUZFQQotOjEwRDNGMDAwNTc4MkNEMzZCODQ3OEI4RTNFMTVENjU5RjU0QjQ5QzU2OQotOjEwRDQwMDAwOEM5QkJBMUYyNDE2OUU1NzE0M0M3RkQ1NjBFNDUxRUZDNQotOjEwRDQxMDAwRjU3MDk4QTdGRTU1QzM1M0YxRDFGQ0ZDQzhGOTBGMTk1QwotOjEwRDQyMDAwMjgzRjAwN0Y3Qzk5NDdGRDUzNTBCM0UxNThBQTE0RTY4QQotOjEwRDQzMDAwQzdGNzE0Rjg3RjJEMUZBQUZBNTVCNTI3OTFGREZGNTFBNAotOjEwRDQ0MDAwRjk0RUI1NjdFM0YxOUQzMzQ2MUU3Mjc3QkEwNUZCNkY1RgotOjEwRDQ1MDAwRTA0NTAxRjY5MTc2QTc0QkFDNENDNDg1MkVGMDVGNjc5MgotOjEwRDQ2MDAwQjFGM0VGRDRFRTY1QzMzRDEyNDNERDM2RkNGRTRCRUU2NwotOjEwRDQ3MDAwMzAwNzBCRTgzQTVFRTk5RTMzNTlCQjhFRDNEQzhBNUVGNwotOjEwRDQ4MDAwQUQ0RERDMDk1QkQ3NTcwQzlFNDU2OUIwN0UyQkQ4N0QyRQotOjEwRDQ5MDAwMUU2N0NGMjUyRDRDQTNGRDlGMUEzMEMwOEQ1ODY0REQyQgotOjEwRDRBMDAwQjYwRDQ2OThERjZERUU0NDY2OTdCNzlGNDZCRkVGRkQxOQotOjEwRDRCMDAwRjJGNUZBODBERTlFM0Y5REFFOUUzRjY1N0VGOERERDQ5QwotOjEwRDRDMDAwMkY4MEYzODRCMUU4OTBFM0I2NjBGQkZCNkEwRUEzM0VDNQotOjEwRDREMDAwN0Q2MDNCODdGQTU0NzI0QkY4RkUwMTNFODg3QTk5QjQxRQotOjEwRDRFMDAwMzBGRjk5NTgyODNEQTg1RUJBMDg5MzAwN0E3QzhFNjM3NQotOjEwRDRGMDAwRTdCQzc5OUZBMEJENkZFM0MxM0RBQjE3QzBGOUNCNDgzNgotOjEwRDUwMDAwRjlGODhFQTJDNzNGRUYzNjI4RkFEQ0JGQzg4REYxQTEyQgotOjEwRDUxMDAwOEYwMzc4OTczRUM5RjA1REJGRkQ1MTNDQTdGQzdBQkFGNgotOjEwRDUyMDAwRTI1RjJCRjJGOUJBQjI0RUVBRkM5Mjk1Rjk5REI3MEQ4MwotOjEwRDUzMDAwNkYwMzdCNDFFNUM2ODBFNzRDNUUzMzIyNUU0MzVGRkJCMQotOjEwRDU0MDAwNjYwMERBODk1MzFDMThFRkEzMUY0QkNCQkRDQkUyODJEOAotOjEwRDU1MDAwNEQ5QUJDOURFQUQ3RTQ3OTk4M0M1NEYxNUU5RDVGRjgwMgotOjEwRDU2MDAwOTAzQjU3RTdBNzQ3RkExQkZGNjcwRkQ4QjNDM0ZERjdGOAotOjEwRDU3MDAwQjUwNzVERUUwRkM3MUUwNEQyMTlCRjQ3REE4NTExMzkxMgotOjEwRDU4MDAwREVDOUU0RjhFMkI5REYyRDgwNzJBNDFDN0Y1RDkxRkY1MwotOjEwRDU5MDAwQkY1NjdFQUY3NERGOEI3QzJEMkYyNjYyODEyRTNFQ0E1NAotOjEwRDVBMDAwMEE0MjFDM0NDMkZGRTEzODg5ODM3MzZFNEY3NUZGNkNFMQotOjEwRDVCMDAwMkFFNEJCMkVFRTVEQkQyRURBRjg3QjMzOTg5RkI1MzFBMQotOjEwRDVDMDAwNUUzMkUwN0Q5MEFGMzEzRThCRDQxMzkxRkQ0NkU0MjI3NAotOjEwRDVEMDAwNDY5RUIxNkFDNTZDOEMwRkNGQUU5ODkzMERERkJGNDVFOAotOjEwRDVFMDAwQzYwN0EzREE3M0RFOTQ1NTEwMUYzNzI5RjFGMTNFNzM5NQotOjEwRDVGMDAwNEQ3NzE0N0M5MzE0M0YzNTJGN0ZGODA0RDBGQkJENUEzMAotOjEwRDYwMDAwMEVCRjFGODYzRkFEOUY3RUVGMzlDRjhGMDZBNUQxRjhBNQotOjEwRDYxMDAwOEU5NEQ1Rjg2NDNCMUIyRjcyOUNDQkVFODhGODQ0QTYwMQotOjEwRDYyMDAwRjEwOUE1RjM2MDk1MzExRUNFQjNBQUYxQzlBMEZDRTFDMgotOjEwRDYzMDAwQzYyNzZGOTJFMTdGOTkwOUVCREMxMzFEMkYzRTQzRTE3MgotOjEwRDY0MDAwNkJDMUJGNkYzNkM1NjM2OEIxRDEyMzgzQkMxODY4M0YxNwotOjEwRDY1MDAwNEQ1QzEyRDlFRjlBQzI4NzZGNkU3RjlGRkFFODlDM0VBRAotOjEwRDY2MDAwQUYxQzRCREU0NkYwRkEyQkU1QUQ1NzE4Q0UwMkI5N0Y2MgotOjEwRDY3MDAwRjNFMEY1MEI4RkMxN0MwRURBRjBCRUIxNDgzODA3MzMwQQotOjEwRDY4MDAwOEM0QTdDNjA0MzM5NTBFRDZGQkZEMDU5RkYxMkVERjdFMwotOjEwRDY5MDAwRTY1RDZFQ0YwRUEyOTEwQjQyRTU4MkJFM0ZGRjE3MkFEOAotOjEwRDZBMDAwMTcxRUQ0NkYyOEM3QkREREY2OUE2ODcxQ0EwRjE0M0VFNQotOjEwRDZCMDAwOEJDQ0RCODhERERGMDg0MDVDRUMyNTFFOTMzNkVGRjQ3NQotOjEwRDZDMDAwQkFCMkVFQUYyQTdBMjkyRjgzRDlDRjdCQUE5NjBCOTBENAotOjEwRDZEMDAwMkY3QTcwMjQ1RjQ0MzBCODEwQTc2NDFFODRGOEYyMTVDNgotOjEwRDZFMDAwRTU3QjAxNzk2MzFDQ0E1RDI0MUVCNzI5NzQxRDJGN0Y1OQotOjEwRDZGMDAwQjBBNjVBMUZEN0RGNTNBNUQ3MUY2RjA3RjM0NkVDNDhENAotOjEwRDcwMDAwQzExOEZCNTIyQUZGQzYxQUVGNjZFRDQ3NkZGMEZERUQxOAotOjEwRDcxMDAwMEI4QzM3QkZCQThDREM5QkRBMTc1ODQ1MDJCNzYzOUU3NwotOjEwRDcyMDAwODNBRTBGM0NBQjQ4NjBFQTRCMTQ5RkI3OUY1OTg5Nzk5MQotOjEwRDczMDAwRjQ1NzA5QTk0NDNGRkVGQUM3QTY2QUZEOTI3Qjk1RjUwNgotOjEwRDc0MDAwN0VBRkVBNjM3NzAxQkJCQzJFMDRBNjQ2QjMzRjkxNzk1NgotOjEwRDc1MDAwOUE1NzgzRDFDRjY3RjgxNEJERkFCQUZBNURDNTNEQzZCMgotOjEwRDc2MDAwQThFQkJCNTk1OURGRDdBQkM3OTY5QkM4QkM0REQ1NTI2OAotOjEwRDc3MDAwRkRCQzNGOTUyMTJBNzA5QTZEN0UxNjU3QjM3MUJGQzBDQwotOjEwRDc4MDAwQzYwNUJCQTVGNTRCM0ZGNTIxQzlFQjIwRTRFRjYxOUMzNQotOjEwRDc5MDAwRUQ4NDQwM0VBNTU3OTBBNzY4Q0Y1RkM1NjUzMjNBRTQ1NwotOjEwRDdBMDAwMTU4RUJEMUZGNThBNDI1N0I1NURBNDlGRjUxM0I3QTQyQQotOjEwRDdCMDAwM0IzNzU0QjU1NDhGRDc2NzQ2RkM0MTExRjMyMDQzNjA4MwotOjEwRDdDMDAwMkY5RDYxN0I3OUI3RDlGMzMwRjAwMTcxNDg1OEZGQkNDOAotOjEwRDdEMDAwQjJERUY3RDZGQ0Q2MDRGM0E3RkFCMzE1RjJBMUYyMTkxQwotOjEwRDdFMDAwODMwOEZBQjNGNDVDRDBBNEE1Q0I2QjM3MTlERkJGQTZDRQotOjEwRDdGMDAwRjgwQkUzRTlEMUJDQzI2MUQ0NkZFRjA1MURGODlEQzRGRAotOjEwRDgwMDAwOUI5RkY5OTMyOTFBRENBQTZCMTlCQUYzQzRFQjdERDE1QgotOjEwRDgxMDAwRjMyQUI2MENCNkRGMTU4QkNFQjYwQzQ5RTdBN0FFQkYyMAotOjEwRDgyMDAwOTY4REU3ODM2M0Y5RkY5RkNENjA3MUQwN0QzNTA3NUJFRgotOjEwRDgzMDAwQjVGRUZGNTMwQTlDMDc1NDdEQzYzM0JGM0Y1NkZFRjUyNQotOjEwRDg0MDAwQTcxOTM3OTc3RjU1RURCM0RBMkU3MkZERDU2N0E0QkRDMgotOjEwRDg1MDAwMUM1NEU0MzlCMkREQkY2NURDMUNERjhERjgzMTMxRjhEMgotOjEwRDg2MDAwMkVENkI4NkFGQ0ExRTY3REYzOEE2OEZGMjhGQjMyQTNCNgotOjEwRDg3MDAwQzY1MURBNDU4RUYzQUYxOTdBRkUxRTE1NDdDNEM4REJEMAotOjEwRDg4MDAwNTkzMzk5MUNGQjYzRTRFREFDOTk3MTU4N0Y4NjMwQkIyQQotOjEwRDg5MDAwMjgwN0VENjhDN0FFRjQzQ0IwMEZEQ0JEODcxNjdERkNGMQotOjEwRDhBMDAwMjQ5OEI3OEYyQUY5OUFFQTlBRDMyNzIwNEU1NUUzOEEwQgotOjEwRDhCMDAwQjAzRkVFNkY4NjdEQjJBMTFEMUNGQTFCOTFFMzQ0RkFDNgotOjEwRDhDMDAwRTUxRjg1M0QyNjkwNDcyNTdGNTA2OEY0NjI5RTlBN0MyRgotOjEwRDhEMDAwOUE5REYzNzczNkFDNDZGRjUyQ0Q0RkY3MEFCRTFENzFDNQotOjEwRDhFMDAwRjRGREM0RURCRkREMDZGNjU1OERFMzJGOTkzQzBGQjM3MwotOjEwRDhGMDAwM0MzM0YzNzdDRjc3M0JGMDdCRDdEQTExNzlGNzYwQkUxMwotOjEwRDkwMDAwNzE0NEZFOTVGQ0UzNzhFQjMxQTI2RjYyQUNDNzc4RkEwNAotOjEwRDkxMDAwMjY1NjVFNDQ3RDhFRUNCMzA4RTI4Qzk3RTE3QzJBMTc5NAotOjEwRDkyMDAwRUY4MTdCOTk5NzlCMDlFNjdEOTYyRkUxMzBDRTVDNkU2NwotOjEwRDkzMDAwRjZFMjdFRDZFOTMzMDYwMzk0NzMxN0U3RUUwNjdGNjNCQgotOjEwRDk0MDAwQzU1MkEzRDc0QTUxRjgzNzAwMzU5QkFBRjI1N0FBMEIwNAotOjEwRDk1MDAwMDBDRTUzNzRDMjEwQzdGNkJGMjFCRTA3Q0Y1NzE3QzRGRAotOjEwRDk2MDAwNDlFMEZGOUY5RTI3MzUzOTY5RjlGNDYyNEVEQzQxRkI5RgotOjEwRDk3MDAwQkRCQ0Y0MDFFMzU0NUE3RTg1ODZDRjcwRUY4Q0JEODEyNwotOjEwRDk4MDAwMjhERjdGRENCMjZDN0UzRTIxREYwMEI4OUFFRjNGNUU3RAotOjEwRDk5MDAwMjE2QUZEM0RGQjJBMjgxRjRENDlFOTM3MzgyODQ5QkYzOAotOjEwRDlBMDAwNzVFMDlFN0QxNjBBQkZCNUM5RTc4MkVGRjJFRUNGQkNFNwotOjEwRDlCMDAwNzUxRjdDMEY5OTlBRUExREI4ODNGQTUxOUQ5OTlFNjU0RgotOjEwRDlDMDAwRjA5RDVFRkYxNzU0NzhDNUZCRTAzQkJDMUYxOEZDQjkwNwotOjEwRDlEMDAwMUNBRDdGMjE3M0QxMzIxRUY2MjMyNkE4RjBBQkIxN0U5OQotOjEwRDlFMDAwRDVDMjc1MEZGNkQzRkEwQjA3RUE5N0MxMTlGNkQyNkFCQQotOjEwRDlGMDAwQTVCRkZDQjE2NUYzNzk0QUVGQjk2QUZCODY3ODI4M0I4RAotOjEwREEwMDAwRUQyNEJDQ0YzNDhCMTA1M0Y4M0IzRjNDRjdERTNGNzIyNAotOjEwREExMDAwOEU3Q0ZCQjIwQURBRjdENUIyQzA3Q0Y4OUVEM0YzQTVCMAotOjEwREEyMDAwMURGQjhBQUM4NENDQUMyQzEzQkQ3NDNFQTU1OTVGNTg0OQotOjEwREEzMDAwNjY4Nzc1MjE5NDFGNjlGRDQ3QjIwRTJDODNGOTM4OERENgotOjEwREE0MDAwMDYwNUZFOTcxMEJGRDI2QTc5MEFENDczNzI3MDVGNjVCQgotOjEwREE1MDAwMjI3Qzk3MzA3ODEyRDg3MjRCNDNBNzI1NTVGNzdENDIyOAotOjEwREE2MDAwQzAwQkFFODk3MEE0MkM5NDgxRTgyOEZCREE5OUExQTk5NwotOjEwREE3MDAwRUNCQjNCQTU1Q0M4RjIxNDIzNjUxNzJCRjdFRjg4RkVCRgotOjEwREE4MDAwN0RDNTdGNjUzMUZERDU2RjhCNUVERjkxQTlERkRGNEVGMAotOjEwREE5MDAwMzg0N0JDQ0Y0NTkxRkY4RjI5Nzk3RjU1OUU0RTQwM0UzOAotOjEwREFBMDAwQzQ4OTU3Q0MwNTlBNjAxRkQ2QzJGMDhDQjU4RkRCQUUwNwotOjEwREFCMDAwRTg5N0ZDQTYwNEJDOTc2ODY5QzA4RUY3RTg0Q0YwMzA4NAotOjEwREFDMDAwN0Q0M0E1ODg1RjA5RkFERjY4NDAzQzUzOEMxQ0RFNkIwMAotOjEwREFEMDAwOTI2QTIzRkVDM0Y0OTk5MkNDRUUzOTU5NEFFNTE3RUVDNwotOjEwREFFMDAwMUY1OTMwQzFENzgzRTc3Q0QzRDI4QjlCRTE5QzVERDM5OAotOjEwREFGMDAwMkY3OUYwQzNENEZFQTNGMTE0MUYwNTNDNTM4QzJCOEE1RAotOjEwREIwMDAwMUYyREQyRDBBRjg4RTE0REQ3NURFOUU3RkRFNjFEMjA5RQotOjEwREIxMDAwMTcwMzUzRjJDMEFGQkUzRDUzNkZFRjRBMDdDQTREQjA3MwotOjEwREIyMDAwM0ZGOUFCMkMyNTBGMjZCMUZFMjlGMzk5NUUxOTdFNTRERgotOjEwREIzMDAwQjlCN0MyRTIyOUQ2RTVGNTE1M0FDRjZGNUJGQTM0QjQyRQotOjEwREI0MDAwQUIxRDMwMTEzODhGQjhFRDcwOTlFRTdFRjVDODY3MkQ5QQotOjEwREI1MDAwOUM3QkQ3RDhFRDVBM0U4NEU3Q0Q2QkUxRENGQjc0ODAyQgotOjEwREI2MDAwRjc3MzAxQ0UzOTAyMUM4ODBGRTBGQjBFRjA5QjUyOUEyRQotOjEwREI3MDAwQTNBRkI3OUE1N0FFQkQ5NjQ4RTRFOURBRjc4QzVFNjE3OQotOjEwREI4MDAwRjg0RUFDMUY2RjVFNjE3OEZBRUZGOTQ2QzM1M0JFRUJGNwotOjEwREI5MDAwNTNFOUNFMkI3NDE3QTJFM0Y5MzM5NTJGMjlCREI1QkZGNgotOjEwREJBMDAwQUI1MjU1NEQ5NEYzMTNFQzFFREZGM0NCOEFCQUI1RjdBNQotOjEwREJCMDAwMTYxMEIyODM5REVCRTBFOTNBODIzRjM5NjBDM0ZCODBFNwotOjEwREJDMDAwNEI3OUFBMUY5RDAwMkY0OTk0QjlEMTdDQTFBRTZCN0ZFMAotOjEwREJEMDAwNTIwMEVGMjMxQUJFOEIxM0JCQTNGOEQ5NjcxNDNFMkU1NQotOjEwREJFMDAwNURDQUY4MzZBRERBNkZEQ0EwRTE3Nzk1RkZDM0YwMDdDOAotOjEwREJGMDAwM0VBM0NBQzczQTk0REJCRDBDM0ZGMDM3ODAwRjNEQTE2RQotOjEwREMwMDAwQTlEQTczMjAyQUZFNjU5OTA0RTc0RkQ3OTFEMUZGMkUzOAotOjEwREMxMDAwNDdCMDlCMEJEMzZEMzRGRDMzQzY1OUNGNkNBQzJGMUQ3MQotOjEwREMyMDAwMzgyNjAwQkZENUM2OTBEM0IzNTlGMTM4NkVEQUI5NTA1MwotOjEwREMzMDAwM0M5QzBGNThBMEYwN0Y3RkRGNzRFQjFDOTA4QkE1MDZGNwotOjEwREM0MDAwQzI0OTZDREVFMDY3OTZDRTU1RjVFNzNCQkYyOEE3RjZFNAotOjEwREM1MDAwMjA2REE0NENGNUFCMDRFQjMwQTI2RjQzMTY0QkI4RkQxRQotOjEwREM2MDAwQzlBQzc3OTZCNTgwM0UzNkIzRUZCQ0E5RkY2ODIxOUE2MAotOjEwREM3MDAwRUYxMUI5MkM5NkJGOURFNThGQkU2RkZENDYxNkYzNDc5OQotOjEwREM4MDAwNTQ3QTdGQkU2MTNFNzk4QkNFRUZBRTRDNjZCRjY3MEQ5NgotOjEwREM5MDAwQ0E3ODVGOTIyQUQ3OTE3QTI5Mjc4QkFENjM0NjE2RTMxQgotOjEwRENBMDAwQjNCRkJENUVFMkM2RDE0QkNCMTVCREM0RUE4OUQzNTcyNQotOjEwRENCMDAwMEJGNUE5MDZFNUZCMDQ5MUFERkJDNjlGNEMyRjgwM0NGQwotOjEwRENDMDAwREM1Njk3NTE4MkVGMUQ1NjcyOUVBQzZGRDE3MUFBMkMxMwotOjEwRENEMDAwNTI2QjlDMTRFNjhGMkE2MjkxMUM0MDZGM0EwMjdDRkZDMwotOjEwRENFMDAwQkE2MkE5MTVDQkYwMDc3RUM3RUYzQTM5QzY3RjQ0NEExRQotOjEwRENGMDAwQTgxQUMzQUY1NUYxRDlFQTEyNzBCQzhEQkIwQTEyRkM0OQotOjEwREQwMDAwNUEzQzc5REY3Mzk4REZCMzJCNzg1QTIyRUMxNUFGMkY4QQotOjEwREQxMDAwQTdBNjg2RUEwQzQ2NERCRDgzRDlBRjE2OTc3NzRFMTY1NwotOjEwREQyMDAwMkQ5RjU2RjI0MkE0MzY1OUU3MTdBRDUyRTQyRUQyMkY1QQotOjEwREQzMDAwRkFBRDhCMjg3QTYyMDVDNjhGNjkzNDdFODQ3QjAyRDI2NQotOjEwREQ0MDAwRkE3Qzc4MUUwQzJFMzIyQUMwRUY3NkQ5N0RDNjk3MEU0QgotOjEwREQ1MDAwOTNCOTEwMjdBOTcwN0M1OTQ1M0FGRDVFQkQxQTM2NEQxRQotOjEwREQ2MDAwQTg3MDVBRTY3QjJGNkJGNEQ5MjlFNTNFN0FDQTBGMzNBNwotOjEwREQ3MDAwNDA1RTk3NjcxMTdEM0ZBMzJGMTNCRTJGMjc2OTY2MEY2MwotOjEwREQ4MDAwRTg5QjEzODJFRjAwQUVBRjQ4MTI2MTdEMTcxODFGM0Q2QwotOjEwREQ5MDAwODA3QzYxMjQ4OUNENzg0RUVBMjBGNkFGQUMxRTJFNDFGRQotOjEwRERBMDAwM0ZGNUJBMzEwNDc2RTc5N0Q5RTk5OENGNDlCMTMzQkU0OAotOjEwRERCMDAwM0Q2MTBENjAzRjlFNDg0OUE4NDcxNEJERjdDQkVDQzlCMwotOjEwRERDMDAwNzgwRjg2QUEzRkMzREZCNUE4NzA1OEZEMDk2RTc5MjY4MwotOjEwREREMDAwREMwQjdCMjI2NTUyNzEzM0E3Rjc3N0MwRkYwOUZCNEI0MQotOjEwRERFMDAwREZERjc3NjczRUY4Mzc3RDIxOEEzM0Q1MkEyRjJFN0JGOAotOjEwRERGMDAwOENCNkRGOUMyNTMxN0VDREY1RjVDM0I4MjcxMjg5MDg5NgotOjEwREUwMDAwRjhDRjFBRjQzRjA3RTU0NTJFM0JERURCQTZBRTQ3QUE2NgotOjEwREUxMDAwODFGRDFFNENBQUYyN0IyQjIwMjdGMEI0NjUzMzM5RUIzMQotOjEwREUyMDAwNTI5RTgzRDk2QzNENTNFM0EzRkY3RUNDQjBEMjZFQkYyQwotOjEwREUzMDAwOEREMUI5QTM0QzdGN0Y5MkZBRENBOUM4NzE5REE1QjM5RgotOjEwREU0MDAwMTIzRUE5RDc3Q0VGODlERjg3RjM4NEZBNTUxQzdDNEZGQgotOjEwREU1MDAwNDJGMDNEQjU2NzQ4QUZGOTZERDVGOEZCNjFFRjBEQUMwOQotOjEwREU2MDAwQzI3QjVDNDc3RUQ3MDNFRUFCQTJFQjFFMjIyQjlGMDA0QQotOjEwREU3MDAwQkEwQkFGMUFGMTZFQkQ1NjEzM0I3NzI3MjRGQTQ1Rjg1QgotOjEwREU4MDAwMUUyOUQ5MUUzRERFRkQ5NjgyNEZCMjkxRERDRkFEN0VCQgotOjEwREU5MDAwQzc2MDUyQkVFQkZGOEFFMjhGQzVCQkFBRDgzRDQ1OTQ0RQotOjEwREVBMDAwODYxMkE1NUYwMjE5QzZFRjc0RDU3NThDM0M5NzZCNTIyQwotOjEwREVCMDAwQkVFNzdGRkZGRTQzNzEwQ0ZGQTE0NEU3M0ZBOEUzNDZBNgotOjEwREVDMDAwRkExMTE3RTBGRTZENERCRTdCOURFQkVDMDJBMjY5N0Y1RgotOjEwREVEMDAwM0YxOTZDMDU3OEY3NkZDQkQwRTUyNTYyRjkxRkM3MTVBMAotOjEwREVFMDAwN0QwQkZFODIxQzE1MkY0MUY3RkUwMjhEMDM2NUVERjhCOAotOjEwREVGMDAwNTdEOEY4RTE3MUVENDRENjhDREI5NkU1N0QzOTBCRkQwMgotOjEwREYwMDAwRDRCOTIyREUyMzRDN0Q3NjM4MEY0QkVEMEVCM0Q3NzM5OAotOjEwREYxMDAwRDlGRDg0RDQyRTU1ODJGRTU2RTMyMjkwN0IzMTAxRTQ1NAotOjEwREYyMDAwQkFFQ0U3NTkyOTFBM0JBOUY0OEJENDQ3NzcyQUZBRThDNwotOjEwREYzMDAwNEVDNURFMjQ5QzUzRkQ0NjlCQzQ3MTYxQkIzM0RBNkUzMwotOjEwREY0MDAwNzE4QTFGMURBOTFGMjNFRDgyREVBRkE2N0MyQjZCRkRGRQotOjEwREY1MDAwODA1MUYyOTJGNTQxRkRDQjA5MzFGODYzRTJERkM1QkY5NAotOjEwREY2MDAwMkM5REVCQzdGODkyNTQ3MjA0RjY0MTY2NTZFOEVEM0RERAotOjEwREY3MDAwOUZFREMwNzlGMUQ5NzY5REJENUY1MUFENkY2NzUxREFFNAotOjEwREY4MDAwNTk5NDc2RTNEMTUzNkI4RjM4MjNFODNEMDZBRjlFNjNGNwotOjEwREY5MDAwRkM5MEZCQ0UxOUJDNEZBOTIyOUJGOTQzQjdFNDc4MTM0MAotOjEwREZBMDAwQjI2OUZCODM3RjlFREYwQkJGM0IzMURDQzQ5MzZFMjdERQotOjEwREZCMDAwRjRGM0Y2MEUzQTYxNUUxNjExRTJENEIyQjUxNTg1MDc5OAotOjEwREZDMDAwNjlCREU5RTcyNjBGQzRDQkU0NDhGNEY4REVEMUMwNzk5NwotOjEwREZEMDAwMzc1MTk2Q0E1NEY0NjBBRDkzQ0RBQkQ2MTkxMkYyMjlERAotOjEwREZFMDAwMUVFRTVBODY0RjY2REY1MThFRDdFOEJEQ0MxQUQ2NkUyQwotOjEwREZGMDAwNjJCNjQ5Njc3RkE2MjhFNUMyNkMyNTJFMjFDMTI2RjhBNgotOjEwRTAwMDAwRkQ5M0NDMUEyRjBGRjZDRUREQzcxMUU1OUU0REJDMUYzOAotOjEwRTAxMDAwRDVFRDYxRjAxRDlFMjBGNzQwNTE3OERFRUQ4NkU1NDU5NwotOjEwRTAyMDAwNjAyRkRBNTNFRDFFQjAxNzVCNzJGQzlFNkM5MEQ3RjMzNQotOjEwRTAzMDAwQTExMDkwNkRFNkY5MDExRUZDQkU1RDM5REU2MkEwODc3RAotOjEwRTA0MDAwM0EzRkM5MjhCQTYxN0ZEQzdFOUVFMUQ3MTlDMUZGODRCRgotOjEwRTA1MDAwRUM1NkQ2QTU5QkUxRTdGMDE1MDMzRUE5RjExMkRFNDc4OQotOjEwRTA2MDAwNDRGRkYyQzBBRUE2MjYyOTc2MjM5NUY4RTFERTIwNjJCMQotOjEwRTA3MDAwQTFFREMwMEZCMkQxNzZEQUVGMzc4OUFGMDRGNjA5ODI4RAotOjEwRTA4MDAwMjk1M0E3ODE5RDVCNjBGMzFDQjM4MDdEOUQ5NjNCMEQ1QQotOjEwRTA5MDAwRUUxNzdBRTk0MEY0N0NGQTMyQzVBRTUwRkMxNzY5RjEwQwotOjEwRTBBMDAwOEYyNTFGMjNGN0FCMkJFRDRDMzFFMjY4OTVFRkVEOTVGMwotOjEwRTBCMDAwRDFGRDU1NkEwOTk4NUZCRkQ2NzkyRkNDQTdCNjQ1MjAwOAotOjEwRTBDMDAwNzA4Rjg0NEFGNzVEMzlCRTZBQzBDN0RENzc5MDAzNzlFNwotOjEwRTBEMDAwNzVGNzk1MjE1RkI5NjU5RTgwNUZEMTYyQ0IwRUMyQkQ5OQotOjEwRTBFMDAwQjEyRDQ5MUY0OTAzRkFDN0MyQkJCNkMxRThEREE0OTVFQgotOjEwRTBGMDAwRTcxNjAxRDdFMzYwQzRGOTM1MzVDRUY4NzgzNkYzQjNDNwotOjEwRTEwMDAwNDMzOUJFNUE1OEU3RkEyMzRGRTIzOUMxODc3QjJFMEFCQQotOjEwRTExMDAwNjNEREVGNzNCMzc0RTM2QTU4RkM1MkJCODZERDlCNTEzOQotOjEwRTEyMDAwQjY5NjQ3M0VEQ0RDMjJFMEJEQUNCNUNGMUQwRUUxN0VFRAotOjEwRTEzMDAwRjE3NjgyRkJBMEI1N0Q4NzRGQzJCREFDMTlCNURFMTk2MwotOjEwRTE0MDAwREFERjIxQzhBODY1RjdDN0E1NTIxRTE5Mjg0MkJEMjlFNAotOjEwRTE1MDAwODBERDc2RjcyREFGNDVCRTE2ODk0ODkwOEZGQ0U4NzdCNQotOjEwRTE2MDAwNjU1QTk4M0ZBQUQyRjdBNDEwQ0E3RTk5QjYzQjY5MjA5NwotOjEwRTE3MDAwOUU2NjVBN0ZENTI0MTdDMjRGMzQ1RENEQjU3OUUwMUUxNwotOjEwRTE4MDAwODY3RjNFRkNCQUY0NjlBMDMzRTRDNTVDQjAxRUZFMjc2RQotOjEwRTE5MDAwODExRTFENERFQzNDNzlDNzAyRUFGN0QwNzYwQkVDNjQ4QQotOjEwRTFBMDAwMkI5NDE3MzQzQjA4QzhDN0NERDI2MTY2MDQ1RkNDREMyMgotOjEwRTFCMDAwQ0VFNEU0QjhBMjVGRTgxRkRFQUJGNENENkMxNkQ3QTRDMgotOjEwRTFDMDAwMUFGQ0Q1RThCRkQyNzlCNENENDZCQzcwMUVCNjZDNkZEMAotOjEwRTFEMDAwMTBGMDIyNjIxMjhFRUJBRTBENzFEQUVGNTBENDY3OTgxOAotOjEwRTFFMDAwQUZCQzVGQ0I0RTc5M0Y3OEY2RTEzRUUzNjY0NUNGOTQxNgotOjEwRTFGMDAwQURFREUxREVEMkYwQzFGN0IyRDk3RUE5RkJCOTgzMUM0NwotOjEwRTIwMDAwQzQ4N0I0QkU2OTgxMTNEQjYzN0VEMEZEMUM4QjlCMzY1MwotOjEwRTIxMDAwRDNGQTA3NzU3QTY1MDNDRUE3RERDNkZDNDdBQTU3N0VGOQotOjEwRTIyMDAwMDhGQzdFQzJGMEU4NzFEODJGMzkzMThERTA3REIzNzdEQwotOjEwRTIzMDAwOUQwRjlENDRGNUFDRTA3QjQyNjBFQkM5NTMzQTM0RDE2RAotOjEwRTI0MDAwRjJBOTZDRTZERjlEMTRGQzlCNjBERDRGQkFEOTc3REU0NgotOjEwRTI1MDAwRUQ4NjFENzhFRkE5MkFGNzkxNzI3QTRBRTE3M0Y3OUE1MQotOjEwRTI2MDAwMUVDRTUwODQ3OTQwRjQyNzU1RkNENDc2QjdFNDk0RkY1MQotOjEwRTI3MDAwM0MxQkU5MzA4MDc0QTg1QkMzQjM3QzgzODJDRjAyQzFBRQotOjEwRTI4MDAwOTcwRjcxREExQjBBQkM2M0FCQkY2RDdDODZFMjU3NTdGMAotOjEwRTI5MDAwQzQyMTNGRUY3RkUxMzRGMjY1NUQyN0M3N0UyN0E4RjNGNQotOjEwRTJBMDAwQjRCMDRBMTM1Rjc1N0RFRjM0REE5NTI1RkQ2Q0ZGQTU5OAotOjEwRTJCMDAwQUVGRjMwRkY4MDAzRUNDRDMxRTRDRjNBQ0E3RkQ2MTJGNwotOjEwRTJDMDAwNTgzNzA5RTk3Q0Q1MTRDQTA2N0IxOUM5OUZGNjRBQTZCNgotOjEwRTJEMDAwMTcyMUU3NUFDMEVFODNDM0ZEREZFMDVBMEJGQUZEQUEwRgotOjEwRTJFMDAwRkVCNTY1MkJCRjVCRTlGMEU3ODI3RTdENTcyOUFCRjA3OQotOjEwRTJGMDAwQzNGMUFBRDUwM0ZDOURGQkNFQjQ2MzcwQkY1QjlEODdDMQotOjEwRTMwMDAwRjNDMDc5RTRFMTExN0JDMkY0QjU0NEQ5MTVGNEI1MEE0MAotOjEwRTMxMDAwM0Y5MjdFQUUxQzY2Q0ZBMkQ4OTFGRjhBNjY0NzU0M0JERgotOjEwRTMyMDAwOUJGQkU1NzJGQ0REMzc3NUZENzg4NUVFMjNGNjNEODdCNgotOjEwRTMzMDAwRUQ0QjU5NzI3ODA1MUZBRjBCRjJEODEyOTVFNzhFMTI4QwotOjEwRTM0MDAwQjhERkNGNTcwNDNGQTFENjkyNjJGNzQwN0VFNzlGMTMxNAotOjEwRTM1MDAwNUY5MzM2NjhFODc1NTJBMEYyNEVDQjI3RjM2Qzg4MEZCNgotOjEwRTM2MDAwOTUwQjZCOEU2NkZENkE4QkQ4RUY0QUVERkZFRTcyQTRCQgotOjEwRTM3MDAwNkIyREFDMURBNTZCQUQ3RkQzMjZBNEIzOEI4ODg3NDBENgotOjEwRTM4MDAwQkZGODk5RkVBQTVENzMwRkJCMDc1Q0I1N0ZDRjczNDhEQQotOjEwRTM5MDAwRkY1QUQ5ODFGNzVBMkZFOTVCOEVGQzQ5OUM1NjRGMDFGMQotOjEwRTNBMDAwODc3QTBERDc1OTk1MzNEQjA4NUREOUZENDMzNEFFNkZCRAotOjEwRTNCMDAwODI3Qzg5MUFEN0M3NTdGQkU0Mzg2OUI0OUMyNjJCNzEzNQotOjEwRTNDMDAwRkQwQzI1QUUzN0NEQjI3Q0E4NzFGREU2ODY5RjYxRkNDMQotOjEwRTNEMDAwRjM4OEVCMjdGODU0RTU4NEM2OEQzQTc5OUFBMUFDQjM1QgotOjEwRTNFMDAwM0I4N0Q5RDNCOTM5NEMyRTM3OTdGNDIxRkY2RkJFMUMyOAotOjEwRTNGMDAwNDBGOTcxNTQzMjNERTIzOEFGRDc3RjZBMUU4QzkwM0RCMAotOjEwRTQwMDAwOEMwRkVEN0QwQjYxMUY2MkMxNTczODExRjQ0MDJDQkM5RAotOjEwRTQxMDAwM0ZDQTA1N0UwMUU3NTVDODYxNzY4RUUyOEVFQkJGOEM2MAotOjEwRTQyMDAwRDdERTQ3QkEzNDg3RjFGN0Q1NUUyMzA5MDFCREY5ODBGRAotOjEwRTQzMDAwMzA5NkZGMUIwQjVFNTZBODYyRjZCRkQzRjVGQjc1NkZENwotOjEwRTQ0MDAwMDI5RTBCQkFGQURDQ0E0RjQyNTlFRTQ5QzA3MzI0NTlGNgotOjEwRTQ1MDAwQTEyQUU0OEJBQkNFRDkxRUUwMDM2NzMzQTNEM0Q1QkU4QwotOjEwRTQ2MDAwRjlDODNGRUZBNDQ5MDZCODJGQUNBOUVGQTk3OUYwRkI5MgotOjEwRTQ3MDAwRDAxQjE1QkNERUY5QUVCMTAxRThCMEUzRUJERjk5MDdDNAotOjEwRTQ4MDAwRjc0QjZFMEU3MkM5RjBCREQ5RDVERUFGRkMwNUVDNUU2MAotOjEwRTQ5MDAwNERDRjE2M0NGN0Q1RkNDRDdGNDJCRkRCMTAzQ0M4REUyQwotOjEwRTRBMDAwRjcyNjg4RDA2RUU4QUI0RkNFMDNGQTM2RjczNTYzRkQxQQotOjEwRTRCMDAwM0I1RjNEODhFNTYzNUZGRjhFRjE5OTkyMzAxRkJGRjNBQwotOjEwRTRDMDAwREQ4MzNGRkU2RjI4RkJFMkYxQkI5QzVBRkZGRUM3QTEzNAotOjEwRTREMDAwNENBQUUyRDk3NzU3RkU5NzA1RURFRjc1NzUxRDNFOEE3OAotOjEwRTRFMDAwNzJBOEYyQzU5MjNFNEVCOTNGNENDMDczMUUyQUZGNUUyMQotOjEwRTRGMDAwMkEyRjJBMDVCOTgzMUI3NjhERjM2OEI5MjNBRTI2NUFENQotOjEwRTUwMDAwMUU3MUE3MzJERjVBRTA0NTE4NzcwRDE3MDQzOTY4MTdENgotOjEwRTUxMDAwRTQ1RUQ0RTc2MjVGMzZFODczN0I1MTQ4ODA3QjU3NTZGMAotOjEwRTUyMDAwNTcxRjlFQzc3RTc2QjAwOUVCNTc1QUQ4NzlCMUE5NTRDOAotOjEwRTUzMDAwNUVFMDFFMjkwQUFERTcwNkY1NkI1NkI2M0ZCQzBFRTA1RAotOjEwRTU0MDAwMUQzMDEyRDE5ODFFQzZCNzVFOTAzMDNFQUE1RkMxNzlDOQotOjEwRTU1MDAwQTg4NDExOEU2QzNCOTEwMkZCNUYwRDQ0MzlEN0M1REE1QwotOjEwRTU2MDAwQjVEM0YwRDI5Mjg0NzY4ODU4RTlCMzc0NUJGNDNDRTg3MgotOjEwRTU3MDAwQkUxQzg3MjI5RjRDNUVEREZEQ0IzMzQxN0YxMEE3RDlBNwotOjEwRTU4MDAwNTM5MDFCODY5Nzc1MkVEMDAxRDdGOUJCNkIwNjE2QzIyOAotOjEwRTU5MDAwM0MxNjE3NkU5ODBFRjM3MDQyQkUwRkVDOEJFQzQwRjhGMQotOjEwRTVBMDAwNzU5MDlGQTRGMjE0NTRFNDI2NTVGNEUxN0QyMzE2QUYzMAotOjEwRTVCMDAwMkYwNTdFODM0RDMyRkI3MDNGNEY1QUVGMzMzNTgxOUVERQotOjEwRTVDMDAwRTE4N0IzNTdBMTIxM0NBNENCN0I3NTk5RkNFOTMzMDBDQgotOjEwRTVEMDAwNUVCQjYyOUY3QTE4RkVCNDNGQzI5M0U2N0I5REQwOUZEQwotOjEwRTVFMDAwQzI0Nzc4OTY2QTJGOEZCRkYxNjY2MUVCRjA5RjNGQkEwMgotOjEwRTVGMDAwRjM5MDNFNUYxRTFDMDVCRkM0MDFGNjQ1NUU4M0VCMjYwQgotOjEwRTYwMDAwMDkzOERGNzdBMDI5RDI1QkJFNTU5QkM3OEVDQ0Y3ODAzNwotOjEwRTYxMDAwM0U4M0ZEREU1MDRFRDkwRjcyNjY4NDlGNkExRTI4OTI5QgotOjEwRTYyMDAwQ0U3RjgxN0FEMDFGOTIxNzlGQTQzN0Y5QTY3RTBGNTAxNAotOjEwRTYzMDAwRDVEQkY1N0IxNEJCRkI4MzhCQTg3N0VBRkQzQ0IzQkIzMgotOjEwRTY0MDAwRkVDQjY4Nzc3RkRERTgyNTZGNTFDN0IyRUJDNThCQzg3RAotOjEwRTY1MDAwREYwRjFDNjE3NkI3RkU0OEIxMDBGQ0FDREU4QjVDNUY1RgotOjEwRTY2MDAwN0UxNUVEQUY2QzI0QzhEN0Y1NDJERjQ5MTdDMEVGMjAwNwotOjEwRTY3MDAwODlENEIzMjdGNUYzMDYyNzgyRkVGQkNEOEJENjM1RDBBMAotOjEwRTY4MDAwRkY4NEMxODBGQzc2QTJGQjk2ODNDRDlDMTYzRjE2MDdDMwotOjEwRTY5MDAwNzAzNTQxOTRDNzdBQzUyRjI4NUJCQkU5NDk4OEM3RUEyMgotOjEwRTZBMDAwNkEwOEM2ODVGNUZEOEE3Q0QxNzgwQ0U4NUI3RkU0MzQ4NgotOjEwRTZCMDAwRjI4RkVBRjdFNjdFNzkwNUYyNUIyMkU1MzdGQzlEODQ2RQotOjEwRTZDMDAwOEEwMUM0OEZGRTc5MEFFODMzQjE4MkREOEZCQkI4QjAwRQotOjEwRTZEMDAwQjgxNEY4RUREOEVBMUZFRjA0QkI1RDVGNDE0NDgwREY1QQotOjEwRTZFMDAwOTVFNTdEMTFFRjAxN0U5MUMzN0IyOUJCNEM5REU1RjA0MwotOjEwRTZGMDAwOUQ2NEQ3MDI0OTA0RjlBOEY3NTc4REQ4MjczQzVGRURGMAotOjEwRTcwMDAwQUZFQTQ3Rjk3MUFFRjM4MEZGRDBEMUU0NDdCRkJBMjMzNwotOjEwRTcxMDAwREQ4RTdFNDFENzhCNEQ2ODNGRUIyNTlCMDc3RUJGNjQyNgotOjEwRTcyMDAwQzkxMTZFMkJGNjk3MUQ4NEUxQ0ZBMTlGQkYyNDM4MDczNgotOjEwRTczMDAwQ0Y2REE5RjQ1ODUyMzE5OENERjQwNUMzRkIzN0E2ODFBQgotOjEwRTc0MDAwRkI2MURFQkZGOTlFMTlFRUZFMUVFMUJGQzQ4QUMwMDE2NwotOjEwRTc1MDAwQjhBRjc2ODkzOENEMDNGNzZCMjZGMTAzN0VGMDc3QTg0MgotOjEwRTc2MDAwMDlGNjM0QzFGRUIwQzk2N0Y2NDBEQ0JEOTdDMzdEQTg4OQotOjEwRTc3MDAwRkYwNzZCMjMzQkRFMDA4MDAwMDAwMDAwMUY4QjA4MDBCQQotOjEwRTc4MDAwMDAwMDAwMDAwMDBCREQ3RDBCNzg1NEQ1RDVFODNFNzMwQQotOjEwRTc5MDAwQ0UzQzkyNEMyNjI3NEYxMjA4RjE0QzEyMzA0MDEyNEVCQwotOjEwRTdBMDAwMjBCQzExNEY4ODQxNkNBOTBFQ0EyMzU0QzRFMTFEMjAxRQotOjEwRTdCMDAwMjQyMzYyQzU1RjZGMzMzODEwMjNCRkQ3MUJBQjE1NkFBNAotOjEwRTdDMDAwQTkxREYwNTE2QTQ1QTM4RDM1NEFFMDFGMTAxMDdCRDU3NQotOjEwRTdEMDAwNDY2QjExRkREMThFNEE3OTg5NjRFNDUxRTk1N0FBNzdENQotOjEwRTdFMDAwQURCNUNGNDlFNjRDMjYzQzVBN0IzRkJGMUYzRkQ5RUMyNQotOjEwRTdGMDAwQjNERjZCQUZGNzVFN0I0RkVBNjRBNjA1OEIxOTJCNzgwRQotOjEwRTgwMDAwNDBEMDgyNEVDNkVDOEFDMDU4MjZBNjE2M0RCNTMxMzY5OQotOjEwRTgxMDAwODJDMTlGNjY5RUNBRkU1MjRGMDk2MzVGMzQ2OEVDQjNBMwotOjEwRTgyMDAwMDE4Q0ZFMjg1OThDMkRBMzdGMzBCNjdDNDFDOEE2NDBCMAotOjEwRTgzMDAwN0ZCNUNGRjJGRTMyRUM1QUQ5RUQ5MDdFODM3RkFFODY2MwotOjEwRTg0MDAwN0MyNUJCRDUwM0U1OTlBMjcwRUI1NDRBMkQ5NDFBRTVCQgotOjEwRTg1MDAwNDY1QUFDQ0ZDM0ZERjhCQzg3QUEzMjE4RkI1RTBENTNGNQotOjEwRTg2MDAwMTM2MDg4QkU0NUYwMURGMkNDQzc4MjAzREM5MEFGRjE4NwotOjEwRTg3MDAwRTQyQTU4OUVCMTU4MTUyMTlGOTlDRTdFODhFNTkxRDVGRQotOjEwRTg4MDAwMzZCNjU5RThEOUFGOEFFQjFBODFGNTNDRTUwMkQ0Q0IwQwotOjEwRTg5MDAwRUM5M0FDMDY3MDI4QjFDMjkyODBFRENBMDQ3NUIzODJDNQotOjEwRThBMDAwRjkxQjlGNjRFNTkwQ0ZDQzUxQjExRkM2ODIzQTFDM0M0NgotOjEwRThCMDAwRTUxNkE4NzczNDJCNTk1RDg3REY4MzdGOTA2RTA0Nzg0NwotOjEwRThDMDAwOEM1NzY0QTNCQzBDREIyOTJFQzZENjk1NzVCN0FCMkEzMgotOjEwRThEMDAwRjA1MDdGNTU3RDEyRDQwMENDNzM0QUIzQkY5NEU1NzNEQQotOjEwRThFMDAwMzg3ODlDREQ3MDA4QUU0RUFDMEU0NkMxNjMyNEMyMDE4MAotOjEwRThGMDAwREEwNzA3QjFFQTk2NjI4NEJGQTcxNkZCQzlCMkE4RTk5NgotOjEwRTkwMDAwRUI1MjIxRUZGNDk3REU5NDhDRTMwNDA4NUU1N0UwM0M3MQotOjEwRTkxMDAwMjBBRDgyRjVGOUIwREYwMkNGNEE4MjQ3NjZCMjFBMEYwNgotOjEwRTkyMDAwMUVBMTJCMzgzQzc2Q0Q3QzRFREMwMEY1RUE4QTg1QTAxMgotOjEwRTkzMDAwMURFNkY3QzhCNkE5NjVCOENFQkE2OTRFOTU0MUJFQ0VGOAotOjEwRTk0MDAwMkJDREMzNzE5OURGQzE5RTgyM0NGMzJFNzhBODBBRjJDOQotOjEwRTk1MDAwNzUzNTFFNzU5RDQyRUI1RTgwRTVCOTE5MDlFQTNBMjhDNgotOjEwRTk2MDAwN0ZGNDE1NDFDMzdDOURERjE5NEM4MEZDRjdEQjM4M0VGQQotOjEwRTk3MDAwRDRCNUJEMjBDRDg3MzQwOUYxQ0U4OUVERkNBNTUzNEIyQwotOjEwRTk4MDAwQkFFN0MzRDg2QTlBNEZEREM0MTM3OUJCQTFCRDVGNjRFRgotOjEwRTk5MDAwQUEzODAxRjJCNkYwNDAxNUQ2NUYzNzIxM0MxMEUxNzU3OAotOjEwRTlBMDAwRjI5NTg0NkE2Q0JGQzc2MkYxRTMzODdCMzYwRkQ5MTRFNQotOjEwRTlCMDAwMTA3QUY2NzNEMkVBNjlDNUY1OUY4NEY1RkJBMUZDRjVFMAotOjEwRTlDMDAwNTdERTBGREUwREY5MzU4MDBBNjIzNkVDRDE2QUE1MDJGQQotOjEwRTlEMDAwQ0JENzU1MzExOUY3QzVEOEFGQkQzNjdGMTFFMkQ1REU5QgotOjEwRTlFMDAwRkM0NEMyMEY5Q0E3MDdFMDdDMUNGRjk5QzM1OEZEMTU4RgotOjEwRTlGMDAwOUUyNTBBQ0VEMzEyNkE5NEIwREQ5Njc0QzZDNjQwRkUzOAotOjEwRUEwMDAwRDVGQjA3N0E5RDNERTEwQ0VENjk1RjFDMTIyM0ZDNzU3NwotOjEwRUExMDAwMDQ5MzgyODEyOEJDNzIzODE4NEIxRTQ2QTlERjA5NjkwRAotOjEwRUEyMDAwRDIyQTBFOUZEODdFRUU1MTlDNTQ3RkI5MjNCQzE3NzYxNAotOjEwRUEzMDAwOEVENUFGNkE3NjY0MDExRTJENDg1NEU4N0I4MkQ1QTczNwotOjEwRUE0MDAwRjU4M0Y5RDhEQTJBNDJGREEwM0MyQjBERkVDMjdEREIwRQotOjEwRUE1MDAwOUMxNEM0N0RDQkNBNjJERTE3RTNGNDVCQTdEMzlCQjFFMQotOjEwRUE2MDAwMkZDRDY5OENGMDMyQ0JDNUVCRkY0Q0E3OUIwN0Y0N0ExNgotOjEwRUE3MDAwOUJGNTM0OEEyRUNDNzhFRkY0QkE5MTRGNjQyNTMyNkYyRgotOjEwRUE4MDAwNEI5Q0YxOENGNjMwM0YyQTM3RTZDNTFDRDA0RjA2QjZCQQotOjEwRUE5MDAwNTMyQzg0REYzMTc0MTdDQzJDMTk4Njc0NTc5NUE4RUU0QgotOjEwRUFBMDAwNzIyMDNEMEQ3MzBGMEJCMEVFNzEwMDMxREQ1MzkzN0I3RgotOjEwRUFCMDAwRTIwMUFFMDNFOTA3RDc4NTc0RDY1QkJERTY5RDlDM0ZCNgotOjEwRUFDMDAwQzVFMkU1QjMzQTlEMkM0MjVDODc3OTNGMjcwMDNEQzZGRAotOjEwRUFEMDAwREQ2N0RFNEY5M0M1NkQ3OTE0RTZGQjlGRkJDNUUwNjZFRAotOjEwRUFFMDAwNzdDRjdBNDZGQTYwMDNEMEEwOURCMUZDOERCMzUyM0MzQgotOjEwRUFGMDAwMjVCREQ3REI4OUY1QUU4NDcxMUIxQzU0REZBOTJBQUI3OQotOjEwRUIwMDAwMjVFODdGQTJDMzVEMjYzMjFDNEY5OTg4RTNGOTYxM0M1QQotOjEwRUIxMDAwRENFN0U0MDlFQzRCMTFFMDUzREFENjVDNzRBRjFCRjE4RgotOjEwRUIyMDAwQkNBNTFBRDczNTUxOTJBNTMyRTQwQjFFMEIwQjE1NzFGQgotOjEwRUIzMDAwRkVGRDBERkNERkE3M0E5MTg1MUNEREY5MUM2RjlBMjlCQgotOjEwRUI0MDAwREZBRkE2QUZBOTdFN0Y1RkJFQTlGQzhBNTU4MzRERTVFNgotOjEwRUI1MDAwNkVGRjMwNTNCRUEwNjlBQ0E5RkU4MEU2ODlBNkZDOTU4NQotOjEwRUI2MDAwMUJCRTY3QUEzRjI4NzhBMzI5M0Y2NENCMEY0REY1NEIwNgotOjEwRUI3MDAwNUFFNjk5Q0E1M0JFMkVEOEY1MzNDNDczNUM3RjFDM0U0NwotOjEwRUI4MDAwNjdBNEM3MTUzN0VEQ0Y0NDQ5MzRGNTM3QjRDREJDN0UwMwotOjEwRUI5MDAwODk4NTJENDhFRjI5MTM4RTBFOEI0N0NGNDY1QUNBQTQ3QwotOjEwRUJBMDAwMzM2MUEzMURGMjAxODc2Mjc5MTRFNkUxN0E1RjBDQUU0RQotOjEwRUJCMDAwOEJCM0VGMDYzRTFCRjk5NEQxRTY3RDMwRjhDNEM1RjA2NwotOjEwRUJDMDAwMkJERjdCNjE3QzMxRjBBQUI3RjI5NEFGQzVCODc0OTlBMgotOjEwRUJEMDAwRThFNjc0MjkzMTBGRTNFQkFGNTYyRkI0N0U2QkVDRkEwNQotOjEwRUJFMDAwOTk0Mjc4RkZBRkFFM0ZERjNCQTgyRDBDRkQ5Q0FEMTZFMAotOjEwRUJGMDAwNDhCRUJDODc0NTYzN0FGNkY3NTFDQzNBNjdBQzRDMjFFNgotOjEwRUMwMDAwN0Q4Njc5NkU4QTVCQkY3QjFFRjdEMjNDNkVCMTMzNUYyNwotOjEwRUMxMDAwM0MzODRDNzI3M0I5M0JDRkNERTlGRDYyRjRGOTg5M0VDMwotOjEwRUMyMDAwOEYzRjFCRjRCOUM2NERGNEM4REUxMzgzMDNBMEFCNzk0NAotOjEwRUMzMDAwNERDMkNFM0U4MDE3Njk1RUE3MkFBQTkwOTc0MkFDMkM5RgotOjEwRUM0MDAwNEFDRTNGQTJEM0Y3QTNEODFFRDIwRDBEMzJGNUYzNTgwQQotOjEwRUM1MDAwNDMzNkE1MUIxQjE0RkFGRTc4NDMxMUE1QzEwNjk1QkVDOQotOjEwRUM2MDAwNkY2RTE4NERFOTkzQTA4RjYxRkE3NEMzNjQ0QUI3MzQ4QwotOjEwRUM3MDAwNzhBOERFMzMwREQ1OTQzRURCRTBBNUVGQzZGRURDQTIxRQotOjEwRUM4MDAwRUYwRkYzQTQ5MzNDOEI1RENGOUM5NTY2RkEzMEY2ODUyRAotOjEwRUM5MDAwODlDNUQ0N0UwRUQwOTk3ODAxQkVENkEzQkQzODNCRTU5OAotOjEwRUNBMDAwNDI3OEI0RUFBMEZCRjlERDUxNzgzMEREOUQ5QzcxNzhBMwotOjEwRUNCMDAwMDhGQzYzMTQxQkY1OEQ3OEYxRjY1RjM1MjhDRkVGQjZBRAotOjEwRUNDMDAwNUU5QzJFMEM3QzYxRTczRjFCMTBBRkRFMkQ0OTUwMzY1OQotOjEwRUNEMDAwMTZGODkzRkI5N0NEN0U2N0VGRjBFOUM2QTMxODdDRjU5NQotOjEwRUNFMDAwMDBCRUMyRDc1Mjk0RUQzOTU4MUVFRTFCM0RDRTlGRjRBNAotOjEwRUNGMDAwN0QzNkYyRDNBNjcxN0M4REVERjc0MTlEMEVBNzIzN0U2NAotOjEwRUQwMDAwNDJGOThDMTg3QUZENDIyRkZGQzJDREY1RjRGREJERjAxQgotOjEwRUQxMDAwOEI0NkI3NDU5NzlGN0NERkE3MDMzRUEyRkNCQzM3NjlCMwotOjEwRUQyMDAwQ0U1NURFMzhFM0ZFRERBRDk4RTg3M0M2MzRGMzNFRUUzMwotOjEwRUQzMDAwQjc3MkZFQjZGRjRGNjI3MDc1OUNGREJGNTg3QjYzM0Q5NgotOjEwRUQ0MDAwQjFFREZFQTBBRkU3NzNDNEM5MTFGRjczRTg2REZGQUM2RQotOjEwRUQ1MDAwNjREMkU3Rjc1QkJERkQzM0EzRjY2N0ZGQUNBNEVBNzhBNgotOjEwRUQ2MDAwRkI3RUM2NkRFNTc0NTYyNDMzOTRFRjJDOEQ2OUE4MDc5RAotOjEwRUQ3MDAwQzE5MkZDMzZENEU1NThBMTdDMThFOTA0OEMyMUE0OEJGRgotOjEwRUQ4MDAwREVGMTUyNjI4NzBEN0ExMjExOUUwOUE0OEY5RjlEOTYyMwotOjEwRUQ5MDAwNENGQkNGQkNCMkM2QTJGQTY3OTI0QzdBRTk3MzNGMDAzMwotOjEwRURBMDAwNUQwMUM3OTM2MDNDRDA0Mzk5NkFFOURFQkY3Q0ZDM0JDMAotOjEwRURCMDAwQjE5QjVGOEJCREQzREJDNUYwQzBFMDIzMzM5MDhGNUM4QwotOjEwRURDMDAwNDA1RUY3NkM3Nzc5N0NFNEUzN0YxMzFGMzFFODk4OUQxMAotOjEwRUREMDAwOUYzRkMwOTNEQ0IzN0MzQUYyOTFCRThDM0RFQ0RFNEY5QQotOjEwRURFMDAwN0NFNDlGODY5MzQxQjdFRjczQkE4REU1MjdCREI2NkI4MAotOjEwRURGMDAwQ0JCODg4RkNEM0Y5QjlFNDZCMEEwMzVFREMyOTI2Mzc2QgotOjEwRUUwMDAwQUY4MzI2Rjc0OUJFNUY2MkRFRUY5N0Q4NTM5MERBNTc5QgotOjEwRUUxMDAwOURFRTdCNjgzODc1NUIyNDUxQkRDMTY0REZEOTI1REY2OQotOjEwRUUyMDAwQUZDMjY0MEZEQTY1QUNCNzNFRTlDN0NGNjM3RTE1NzAzOQotOjEwRUUzMDAwNEMzQkE0NUYyNUU0MDUxOUQ4MDI0M0YyMzk3RjEyMUQyQgotOjEwRUU0MDAwRTdGQTFFOEE5QTlGNTU2NkZEQTJGMzY1MjE0N0JGNDNFNAotOjEwRUU1MDAwNTFGQjM2N0M5RjZDQ0E4RkU4QzgzNkQ1MUY3NTQwMzE5MAotOjEwRUU2MDAwOTU4RjA5MTc5OUNBQzcxRDU1NERGOUFCMjJBMzRERjVDQQotOjEwRUU3MDAwQUYzRUE3OTlGMjE1RUMzQTUzRkQ0QUM3NTQ1M0JFNEEyOAotOjEwRUU4MDAwOUU2NUFBN0Y2REY2NUM1M0Y5NzVDQTEyNTNGOUQ4NDI5NAotOjEwRUU5MDAwNEY0OTNFRUEwRjM2Njc5MzkwQzJEODEyQjc1NjlBMEY4MQotOjEwRUVBMDAwNzA0ODRDQUNGM0NENDUzQjY5QjU0QjY2MTNCMDc2MzAzQQotOjEwRUVCMDAwODg3MDZCQjQzOUU0NzVDMEE3M0UxNUI0M0MwNjc4RkE4NwotOjEwRUVDMDAwQjAwNUFDRUUwMkE4MkY4NjE5QTYwNzJENkExOUE2Rjk3RgotOjEwRUVEMDAwREExNjJGRDI2OUU5QTA0NDA1RjEyMTcxMjA2MzFEMjhCQgotOjEwRUVFMDAwQTcyNDM1ODEwMTNGQjEyNTg1REYyRDQ0QkFERTA2RkIxRAotOjEwRUVGMDAwMDdBODU1OUEwQThBM0VEQTAxM0Y0ODBCQTJGRDlCOTM2OAotOjEwRUYwMDAwRThBREM0NzlBREIzMzRCQjU2RTMzRTVCOThFNzI5QUNCQQotOjEwRUYxMDAwQ0ZENEZCNDc0MzdBRjg3QThCMDVGN0I3QjVDM0Y5QzA2RQotOjEwRUYyMDAwNThDODBGODVFRTE5QTU5RkZERTRGQkI4REYxREEyOEEyNgotOjEwRUYzMDAwNkU5Rjg3QTdCQzM4MDlCRkFGQkM4RTg5NjI1OUVGNzgzNgotOjEwRUY0MDAwRjZGOThGQjgzRDE1RkI3RDdEM0VEN0FGMzIyQkI5OURDRAotOjEwRUY1MDAwMTk1QjdFODc1RUZFQjkyRDdFRjlDMjdDMkUyRjJBRUZDQgotOjEwRUY2MDAwOUJCMjFFRDc2N0VEQjAzMkY0NUJBQ0NDRDRGQUIwMEJEOQotOjEwRUY3MDAwRTlBQkU3MEE1ODcwNzg1NDVFRjIzMEQ5ODlERjA3RDJERQotOjEwRUY4MDAwRjdDQUZCNjZCM0IwOTNGNzgzN0VBQzk1MDk1QTFGRjRCQQotOjEwRUY5MDAwM0I3QzNFMzFGRTNDOTZFQkYzQjQ5RTRCRUFBNTVGMTdGQgotOjEwRUZBMDAwN0RGRjNDRkZDMkVCQjQ5RTRCNjBDMUY0NzhFRDlERjQ1NQotOjEwRUZCMDAwM0QzMzEwQkY3REEzMDFBN0I0RjhFNUY3RUE3MEIyOUUxOAotOjEwRUZDMDAwQ0I2MUZFRjRFODc2OUNFRjc0OEY5MzRCRTVENjczQTk4MgotOjEwRUZEMDAwQ0MxRjc3MUQxOUY0OUQ2NTZCRDk4ODM3M0I4MUNFOTE4NQotOjEwRUZFMDAwNUY1NEE0NjZEOTE4OTBGODFDMTZEOUEzMDFGQ0E3QTJGNwotOjEwRUZGMDAwNDkwMDc4Q0ExQzZBMTlGMjI5MjY1OTIzNjE4MzJFNDBEOAotOjEwRjAwMDAwN0VDQzY1RDJBNzY4MkY1ODAwMTlCRjgxQTlEREJBQ0E4NgotOjEwRjAxMDAwRkE2OTM4OEE4RUE2NkFFNjNDQzNGQTUxRjJFNjMwRjZGRgotOjEwRjAyMDAwMERGMzRFMUM1Qzk0ODJGODdFOEEyOTI5NzIxQ0ZDMzJGNgotOjEwRjAzMDAwRDJEOTBFRDEyMzQ1QURFNzYwMkY3QUQyRUY3NTM4MURCNgotOjEwRjA0MDAwQ0M4OTBGQzdERkU2NzMzRDZBRTQ2QzE2NTc1RkZCN0QyMgotOjEwRjA1MDAwQkU4QkVCODE0NTZBOUYwQkM5MEQ4NEFGMzczREJBREY4QwotOjEwRjA2MDAwRDg3REM4QTBGMjRCODUzM0UwMDVDOUY1QzgwRjlDNDE5NwotOjEwRjA3MDAwRjI1MzdFRUJGMDM2RjBBNzlGMDkyRjBFMTcyOEZDN0I4QQotOjEwRjA4MDAwRDdCQ0YzQTgzQzJGRDdGMzY2M0VDOTE1NjUyMENBQzU4NwotOjEwRjA5MDAwNTY5RDdFNUIyNTJENjk5ODEzRjkxOEFCODkwN0ZGOEM2NwotOjEwRjBBMDAwMDI1RDRGOEQ1OTc3MkJEM0IyRTdBMjVGNDNCMkFBNEZDRgotOjEwRjBCMDAwMzFFNDg3Q0NGNzQyMUNGOEM3QUVEQkExQ0YxQkRBNTc4RgotOjEwRjBDMDAwODdCMDNENzNBOTlDQ0YzMThGMjMwQkY0N0NGQzE3MkNBOAotOjEwRjBEMDAwQTFDMkZGOEUxNUZCOUZFRDczQTlFQjQwMDUzQUE5Q0JBQQotOjEwRjBFMDAwQUJCOTJDNkM0NTNFREMwMzdFQ0UwQzJCRkE2RDYzRTE5NAotOjEwRjBGMDAwRTg2MUNBMUNBMUUwRTJGMEI0MzhFNEFDQURCMEJFMzlCRQotOjEwRjEwMDAwN0UxNzQzRkZDQ0FEQjM5OUFCMDRFNkUxRkQ0MURBREJGQQotOjEwRjExMDAwMUFENDk5NzdGREUwRDIzNTk4MEUxOURGMjg1MkFCNkJERgotOjEwRjEyMDAwNDhERjEzRkNGREM0NkY4NjVDQkFCRUQ3RThGMjE2MjEzNwotOjEwRjEzMDAwNUQxQzEyOTQ0NUI0N0UwMUQ2OEY3MkE2RUZGMTgxNzNFNwotOjEwRjE0MDAwQTNFMEI3Qjg3RkM1REUwMkY0N0I1OTk5OTY4RTdFRTJDNAotOjEwRjE1MDAwRUQ3NkYyNTdCMTBEOENGNENGRkExRDgzMzZBMTlDRTkwMAotOjEwRjE2MDAwMkNGMEVFQzY3QUEzQUVEMUZEQjY1QTY0RTA4REM5OTdGNQotOjEwRjE3MDAwMEYyN0Y4NjM0NUZBQjgxODlDQ0VFNzczM0EzRkU4OEE0MAotOjEwRjE4MDAwOEYyRkU1MDU3QzlGMkU5NTRFMzIwQTM4MUMyMjAwODc3MgotOjEwRjE5MDAwQ0RFNURGM0U5RDAwRkM0QzdDNjNCNzhFN0Y0NjZBQzBBOAotOjEwRjFBMDAwNkRENDY0QjM1Rjc3QjdCRThFREQwNTlDN0Y3NDE2NzgyRgotOjEwRjFCMDAwMDhDRTlERkRCRjNDOUM4MDcyREYwNkVCOEY4M0VGRDdBRQotOjEwRjFDMDAwNURFNkZBN0JBMzkzNkY4QjFGMUY0QzhDM0ZDRjM5REYxQgotOjEwRjFEMDAwOTE3OUJFNkVDQ0IzMzRGRTNDNkZCRkNDNzlDMkZFMkNBRAotOjEwRjFFMDAwNzIxNDdDRkJGM0VDMkNEMDVFMkY0MDM5OTQxNjdGOUU3QQotOjEwRjFGMDAwM0ZCOUNDNzkwMjkzNUIxNDgyN0EzMzgwRkY2MUJENkY5MwotOjEwRjIwMDAwN0JCRUNDM0ZCNzBBRTVDRjRENUVFRUY3MkYwMTRFOEJBQwotOjEwRjIxMDAwN0MwOEE2RjJFNDM3QzM1MUFGNTVENzZFNDBCRUIzQzJFNwotOjEwRjIyMDAwQTVGQTY1RTIyM0FGMjM3RTAzMUY2NDFBQ0M2N0RBNjQ3NAotOjEwRjIzMDAwODFGQzQ4OUQyM0JFNUMyNDIxQkU2N0IxNTAyQUYyQUJGRAotOjEwRjI0MDAwMUQ3NkYyNjNDN0FFRkY2N0JBOUMwMDNBRjkyNUMyODkwMgotOjEwRjI1MDAwNEQ4OTBDNDQ3RTcyNzA2MDdDM0VGMUNCRDhGQTREMTEyMgotOjEwRjI2MDAwOTI0QkVCMkFFMkVCQTVCRkQyRTk3NUI5QTM3OTcyOTY2RQotOjEwRjI3MDAwMjVGQTVDMDUxNjI4MjI5N0Y1NjlGRDUwQ0U5NkNCNkJEMgotOjEwRjI4MDAwOTA5RkQ4NDAxRTIxNUM2REZEMDZGN0MxRkQ4MEJDNDdGNAotOjEwRjI5MDAwODBCNDIyRkJDRDAzODI4QkUwN0RBMjBCN0VGOURERTNGRgotOjEwRjJBMDAwMUM2RkQ4MjcxNzVBN0JFN0U3Q0JDNDE3NDdGQUUyQUNBNQotOjEwRjJCMDAwRTc1NzhBRjdENTgyMjg3QjcxRDk5NjM3RTRDMjY4QkZCMQotOjEwRjJDMDAwMzgwQjVCMTgwOThFMDhGOUFGQkJGQzA1N0REODY1RjlEMgotOjEwRjJEMDAwMEIwNjIyQUU2NEEyN0NGMDkwN0M0MEI5ODE3NjczRTM4OQotOjEwRjJFMDAwQUI2M0NBNzA3MzQxRUY2MDIyRjJEM0U0NDQ5MjE3ODE5QQotOjEwRjJGMDAwQkU2MzhCOTQyODc4MUVFQ0QyMUJDNDVFRjQ0OTlCRTk1NAotOjEwRjMwMDAwRkI0NzBEMEUzMDI1QkJGM0I3MUM3REFGMEFGNUY4Mzk2RQotOjEwRjMxMDAwMkNCQzE2RUJDRjU5OTk4NDQ3OEY1REVCRUNFQUVGOUM0MAotOjEwRjMyMDAwNjBEMjZCQkJGQjk3RTg3Qjg1QzMxOTEyQzE4OEE5NzBCQgotOjEwRjMzMDAwRkUzRUVFN0VGQzRBRDEzRUMxRjVGREI4QkZGNjI5QTZFMQotOjEwRjM0MDAwQjFGMEYzREYzNzNFOTVGQzA3MDhCRkFCN0JFRTdCNkY3OAotOjEwRjM1MDAwRkI3QzVBRDE0RTYwN0ZBREZENjVDMzlGQTNEMjM5NUM2MwotOjEwRjM2MDAwQTI3MTJFMkNDOTg3MUREREYwQkVENDdENzkxMEZGMDE1RQotOjEwRjM3MDAwNzY3RDUyQTE3NjBFRkJENzU4QUQwRkU3MzNEQkEwRUZCOQotOjEwRjM4MDAwMThGRDg2OEQ0RTIzM0Y2NEEzQUI2M0VEQ0UyODNBQkNCNwotOjEwRjM5MDAwRDUxMkM5RTQ3MjNCQkMxNjlENEI3RkRFOUU0MEZDQTM5OAotOjEwRjNBMDAwNzNGQkVCRkRCRDc0OEU2NkU4MUQ0OUUyMzc0OTk3M0U1RAotOjEwRjNCMDAwM0ZDM0FGNjA0RDhDQUY0NzFCRTcxN0JCQUNDNTg1QTRGRgotOjEwRjNDMDAwOTdFMEY5RUU2OEM4MEJDQTAyQjQyNzI1OTlBOTAxOThGRAotOjEwRjNEMDAwNkZDNUI1ODA0REQwREY0NDMxQjczRDBDRUIzOENCNEUxNwotOjEwRjNFMDAwQTQ1RDg1RTBEM0ZEQUEyQkRGMTk5MTgwRjM5QzI4NTlGOQotOjEwRjNGMDAwOEY0N0YzQTc1OEZGNEY1RUExRDlGRjczOEFDRDRFMDlGRgotOjEwRjQwMDAwMjE1QzhBQjg3RkE0RjQ5NTZCNTJEMDBGRkFGMDk0ODlFRQotOjEwRjQxMDAwN0QzMERERDlEMDI0NEJENjZFM0Y1MEVDRkMyQjdBQjEzOQotOjEwRjQyMDAwNDc4NzE0NzI3Q0VGNDhENDg2MTRDMkZBMkE3QTU5QkZFRgotOjEwRjQzMDAwQUFENzNCOTRBOEE5ODU5OURERkQ2MUZENzg3MTEwNkY2RAotOjEwRjQ0MDAwNUNBOUYzN0IxREFFMzdGOUU3OTJCRTY1NzEwMDVGNDU5RAotOjEwRjQ1MDAwRkUwOTdBQUIyOEEzN0ZCMEQwNEFGNEFFMzE0NUNFMjI2NAotOjEwRjQ2MDAwN0YyMURGN0ZFMEVCMTJFNEFGRDJGMzQyRDMwNzAxNkNFMAotOjEwRjQ3MDAwQjdGMTc2MTc5RDdGMzNBRkMyNTAzRTAwNjBFODNDQTBFNQotOjEwRjQ4MDAwNTFGMDkxQkZDMTgxRjExRTkwQUUxM0Q0MEQyMkE0QTIwMAotOjEwRjQ5MDAwMjU5MkNFRTkyMkM4RTMxOTk4NTdDMkZDRUI0MjM4ODA4NgotOjEwRjRBMDAwRjEwMTZCMUMzRkZFMjVGQUJGQjU4MEM0MTIyNjQwNUVGOQotOjEwRjRCMDAwNjJFNDVGRjQxRjRDQTZGMzM4OUExOUNDQzM2RUNDNEJCMAotOjEwRjRDMDAwQ0YyN0VCRjlDRUU5OTMyNjBGODBGNENFQzRDNzVEODgzMQotOjEwRjREMDAwQTc2MTAxRjgyOEY0RjM1NUUyOEY0MzQ0MzdCRTQ0RDVDMQotOjEwRjRFMDAwREExN0ZENEExRjUzNUU1ODkxQTgwQUQ5RTg3NzcyMTVCQQotOjEwRjRGMDAwQTE5RUJBOEEyNUFBNzYxODQ3NzM5NkY4NzE1QzlCQzJCQQotOjEwRjUwMDAwQzgwRjlGQzg1QTY4MUQ0RUU3MTc3RTA0OEFDQzY0MDE1NQotOjEwRjUxMDAwRjMzOTg5REVGOTg1NjRBNzMwM0ExRjNGRkM3MUYyNjY0MgotOjEwRjUyMDAwNUM3RjgyN0MyQTc0Mzc3QzRBNjcxQUQ1NEI4RjkxOEYxNwotOjEwRjUzMDAwOTlDRTk1MDJDNTZENzhBNDE4QjlFODE1MTBGRTdEQUE3QwotOjEwRjU0MDAwNjNCRjlCRTVBNTgzMUQ5NDExMUY4NTkwMjdGQjFCRTBERQotOjEwRjU1MDAwNEYxRDA4QjdGMjZFQjg3NTQ4REM5RTMzRTBFNjlGRThCMQotOjEwRjU2MDAwRkIxNUMyRDU3RkFGNUQwRTY0RjRFRTY3MDMwMDhENDJEQwotOjEwRjU3MDAwN0RCQzQzNUVCNDE1RUI4M0MxQzQyQ0Q4NUYzNjVGOUY1RQotOjEwRjU4MDAwQkZDNkNFRjc0MUYyNkVDNUY2MUY1QUIzNjVCNDc3MEMwRAotOjEwRjU5MDAwM0M2QjFFQThGQjIxN0FGMTczM0M1OEM4RjFCMDJFRURFQwotOjEwRjVBMDAwNzAxRENBMzkwNjgzNUFGMkMwNUU0QTNFM0ExMkY5MDYwNQotOjEwRjVCMDAwQzhDQjI2OTQ5NzA5NTY4REUwNkRDOENERTVBREI3MzExRgotOjEwRjVDMDAwQTRBQkJBQjZCOTBDRTlGNTQzQzEzQjYwMzdEOTIzOEM3QgotOjEwRjVEMDAwRUNCMTk5OTNGRDdCMkMwQUZBQjBBNkFENzU0MjdBQjhDRQotOjEwRjVFMDAwMzA5RjlGNjdFQzk5QjQ4N0Q4OTBFODJDQzE3NjY1NTcxNwotOjEwRjVGMDAwN0JBQTMyNjFEQzQwMDk1M0VGODU3QTgxMDRFRkQ2OTcwQwotOjEwRjYwMDAwNzA1REVGODgyQUZBQjlFQTU3NTVCMkNGODZFQkM4MDQ4NQotOjEwRjYxMDAwREYzN0NENDgyNzdGNjk0NjY1QTQxMUUzMDQyMkY3MzMxRAotOjEwRjYyMDAwMTlFMzdBN0FEMEM3Nzk1OERGNDhDNjlFQTBCMUEwOUY2NwotOjEwRjYzMDAwMDU3MjA4RjEyNzA3RjA0RDkwQkJDQjlGQzRGMjAyOUVFNAotOjEwRjY0MDAwQkYxQUYyRjU3QzRCNTk0MTdCQzUwRDIzQjg1RjhDQTFFNQotOjEwRjY1MDAwNUZBQ0JFNUQyMDdGNUJDMUI0RTFBNEQ3MTQ2Mjc5NDY4NAotOjEwRjY2MDAwNzQ3OUVBQjI2NzIxNUY1ODdEOTU4QUU0QTQ1OEJDQkZEQgotOjEwRjY3MDAwQjgwM0NCREY2NkI0MEVBNkYzRUY1MTMxRjQzQkFFOUI3QgotOjEwRjY4MDAwNkVBOEJDQUMyQkVGQUJDNEY5RUVCOThEOTFGRDVBQUZBRgotOjEwRjY5MDAwQ0I1QjEzQkRFMTYyQTE0QzFCODlGOEQ3RDUwRkMzN0VBQwotOjEwRjZBMDAwMkFGNUZDMzg0OUE2N0U3MjdENENFNzBCOUU4RDNGQTU1RQotOjEwRjZCMDAwRjMwMThCOEE3RUM5NDZBMTk5RTBDM0ZDM0VEMkY3MzBBNAotOjEwRjZDMDAwNUUwNkU5MjU2RkY2Q0U1RDU2MUMyQzgzRDM5REJBOEY1RQotOjEwRjZEMDAwRDM1RDM5RjM4ODA4QUY5MUYyRkQwMTFDN0ZFNjZDMzdFQQotOjEwRjZFMDAwRjE5OTMxNDcxOUMxODUyODBGRjI1N0E1MEFCNDRGQjlDRQotOjEwRjZGMDAwMDMwQTY4REZDNzNCRDQyNjExRjA0ODE0Q0IwQTEyNjAxNgotOjEwRjcwMDAwQkNFQUQ5MDI5RDRCNENBRjc2MDQwNUY4RTc3NEEwMEYxNAotOjEwRjcxMDAwOEE4MzkyQkNFRTE5ODBFRjMzQkQwMjNGRUY4NUZDRUM4QgotOjEwRjcyMDAwMjgzRjNDNjhDMzc0NUUzNkMzQ0U3QzJGQzRDMUU3REM3RgotOjEwRjczMDAwMDE5QzBGMUJFREVCRDdEODRDN0U5REVDMDE0RTJBRkZCMAotOjEwRjc0MDAwQkE3MEQyNjFFMjEzOENDN0IzRTQyNDdBOEUyMTdGNjc0QQotOjEwRjc1MDAwNTIzM0YxQTlDMzE2RDBCRjUxRkY2NTFBRTlEQjM3RTk2RgotOjEwRjc2MDAwRjQ2RUYwOEJFOURBRUQ2NDA3NEZGNzk4RjVFODBGNzE2NgotOjEwRjc3MDAwNEY5MDBFNjYwOUE0RTdDRUFDQkVCMDlFN0RBRTUwRDBEMQotOjEwRjc4MDAwQ0ZGMTcyRTVDMzQ5RERERjE1QTY5MDNEN0QyM0VBMzk0RgotOjEwRjc5MDAwQTVGMDcxMzJFODIxNTFGQUZERUMzQkNGQTc1MkZEM0VCNgotOjEwRjdBMDAwNEYyRkZGRTYwQTQwODUxQUNFNUZFQTAxOUVDODJGMkIzNQotOjEwRjdCMDAwNjY0OTQ0MkY3NTZCNkMxNEY3NTVERkI2REE5QTg1RjhGNQotOjEwRjdDMDAwN0MwRjUzMzlCRTdFRDJEODBGRTZEOUFGNTYxQjIxMkEwMwotOjEwRjdEMDAwRERGMEU5NTcxQjE0OTBBRUIzOTBFNzEwRkMyMzM2RjQyQwotOjEwRjdFMDAwQzdDREIwQTlCNUI4QUUxOTY5NENGNkE3MDI1RUNFQkFCRQotOjEwRjdGMDAwNkUyM0Y2QkZDNkMxNjQxMUU0NkRERkY2Nzc4Mjg4NTdDOQotOjEwRjgwMDAwQzBDQTU1QzQ0OUMwMUM4QTY3Q0I5NTkzRTg1Q0ExQzk5RQotOjEwRjgxMDAwMzI4Q0UyQjU5QTVDQzk2QTc0N0NENEJBRDVERDc4ODczQgotOjEwRjgyMDAwNzE1QThBOUQwRDkzRjVGRDhENjcyNzE1MENFMEZDRUE1MgotOjEwRjgzMDAwNTE4MTkxQkNGMENGNzIxMDlDMzMwQjc4OUM1MjY2OEEzOAotOjEwRjg0MDAwNkEwQkE0MjJCRkUxN0NFQTUxODFDN0Q3M0Q2QUY1RTY4NQotOjEwRjg1MDAwMENDNzM4M0M1MDJCRjlGRUYwNzZCMTc0OUY5OUFFRjc4NwotOjEwRjg2MDAwOTNBNDA4MDEyMEM2NjlFRDY1RTUxNjg0OUIzMzU5QzU0QwotOjEwRjg3MDAwQjg0NEEzREZDQTQ0Q0Q4QTdDQUI3MkIwMzAyMjQwRjBEQQotOjEwRjg4MDAwREMyNDJENDBGRDM0QzFDQ0Y3QUQ1NkJFMkZFQzIzQ0U4OQotOjEwRjg5MDAwRjc2M0U1MjBDODAxRTJGQkU4QUYwRjk0OTNGQzFBM0Y0MQotOjEwRjhBMDAwNjAwNEM5MDNFQTY3OTVFNDkwRUQyQUVCMjFDRjMyM0M2RQotOjEwRjhCMDAwMkMxOUZENUJDMzAwNjRBOEFGNzc2NDdCQTY2MkRDOUU1NQotOjEwRjhDMDAwRkY0RDg5RkM2OUU1RDVFQUNEMEJBM0Y2RjVFNzAzNzU5NQotOjEwRjhEMDAwQkQ3RDYyNjQwRUM1NDFEREEzRjZDMzM4QTgzNTE1RERENAotOjEwRjhFMDAwNzk4Qzc3QUM2MUNEMzZDNEY3OUExOEY5QjhENEI5OUI0NgotOjEwRjhGMDAwRjRDOEE1NEY1QUJCRjE5NzYxN0NBODVBODBGQ0EzRjZDNwotOjEwRjkwMDAwRDkxRUZFMjBFMjUzRERGQzJDQzZCRTY0RjI2QkI4OUUwRAotOjEwRjkxMDAwMTFDMDhGOTEwRjY5ODVDOTIyRjk5NUQ5NkMyRTQ3RDlFRAotOjEwRjkyMDAwRDMwMkZBQzU0NEQ3QUEyNjk0N0I5RDQyNzJCMzU4REUwRgotOjEwRjkzMDAwQ0QyNzQ3RThGQjc1OUZFNDc5RUQ2RTVDMzdFODRCNEZDOAotOjEwRjk0MDAwQzlBQ0E3MUM2MDNFRDI1RjI2ODBEQzQ0M0Q1QTY4OUY0QwotOjEwRjk1MDAwMjlFMkI4MUIxNzQzREY3ODhFMkY4NTJCMzE3RkU3NjJCMgotOjEwRjk2MDAwN0UzRUNBRkNCN0QxRjlENzM4QkY1RDQ2RkFGRjJBMzFDRgotOjEwRjk3MDAwNkY4RDNFQUVDRjBBQ0NGQTk4N0MwRkY1Qzc2MDVGNTAxMgotOjEwRjk4MDAwNkYxMTkwMUY0Mjc5REZDOUQwMTRFODYwNUNGQjExRUE2NwotOjEwRjk5MDAwNkY2MzNBQTc4QjU4M0Q2NkI3QzUxOUI0NTg5MEVGRkExNAotOjEwRjlBMDAwNDlFRTI0QjA2MDM2QzI0RjJCRTQ3Q0I2RkMwMEU3QjNDRQotOjEwRjlCMDAwMkZGQjQxODMxNjUxOTVGNUREMzRDNTREN0EyMDk1OEY4NwotOjEwRjlDMDAwOEQzMDhBOUJEOUNFQkM3NUJBQkVFMzFGOTA4OTUxQTJGNwotOjEwRjlEMDAwM0VDRUM3NzU3REMxRDBFM0FBNjJGNkYxNUFFNzIzMTI4NQotOjEwRjlFMDAwRjJBRDZCQjM3QkVDOTc4OEZENEY2NjAyRTk4QkQ3MjlBQwotOjEwRjlGMDAwMTdFNjVCOUFDMTk3OTg5OTJGQjlEOTc5REEzRjc2RkZDNAotOjEwRkEwMDAwREUzQkQwNEYxMDg4RDE4MzAyOTdBOTA3QTVCQkJEMUI1MQotOjEwRkExMDAwOTExRTYyRjVBMURFRTIyODlGRDJGOUZCQTVDNjUxODJCNAotOjEwRkEyMDAwMDYzMTA3RTVENzU4QzNDRThBQzE5RkJBQkRDN0U3M0NBOAotOjEwRkEzMDAwQzBCQUYxQUUwQjlGRkQ5QjZFQzY3NTgwM0M5N0QxRUVCMAotOjEwRkE0MDAwMTNGRTZCM0REMUY1MUFBODI3OEU0NzY4MUUwQ0ZDMUNDRgotOjEwRkE1MDAwRjIyMTBCRjM2MTlDMDJGM0NBQTcxMTRGMERCOTBCOUM2NQotOjEwRkE2MDAwODhGMEE0NzEyMUM3QkI1MTEyQ0ZFNzgyMjI4Qjc4MTk4RAotOjEwRkE3MDAwMTgxREFCQUY3QkRERTg4N0Q2Q0E0QjI4MkVENjkwQzdDMgotOjEwRkE4MDAwQzMyRDFBRTFDOTA4QTZBNjYzM0QwMzRGNDY4Njc5MzlGRQotOjEwRkE5MDAwRTBDNzZFQzQ4RjcxOTMwMTVGRjIzMUJFNzY1NDNGRDREQwotOjEwRkFBMDAwQkIyQTk4NDJGODUxMTEyM0Q3MkE5REQzMjRBNEYzNEFBNAotOjEwRkFCMDAwNDdFQ0ZFNkIxNkVDRjcxQTFEM0ZBQUU0N0YwRTNGQUUzMwotOjEwRkFDMDAwNDBGQzMwRTQxNkU4QzlGN0M1RDgxN0Y3QzVEODE3OTczMgotOjEwRkFEMDAwODAxRjYxNUNERkE1RTJDN0IxMDE5NzE3NjdEQjY5QkRENQotOjEwRkFFMDAwRTc2MzdGMzlEOUIzM0UzMUFGMjc3RTA4RUQ3NzJFN0FCMQotOjEwRkFGMDAwMDBFOTNEOTBDQzcwREY1RjQ4OTAyQjlEMzBDRkZBMUEyMwotOjEwRkIwMDAwMUU2RjNFRkNBREMyMDBFNkIzOTZCQjQ5MkY3QzIxNTU2QgotOjEwRkIxMDAwN0Q4RENBN0RCQ0JDQkM0MzEzOTMyMTVGQjAxMkNBMjE0QQotOjEwRkIyMDAwRkY4MkRCNTM4OUY5RkE1NTUwMEVGNTQ3QkNFNzBENjBBQgotOjEwRkIzMDAwQkVGMDFFNUU1RTc2QUZFRkI1NjQ5NEYzN0VERUZFRDU1QQotOjEwRkI0MDAwNjM4REEyMEJDQTgzOEQ3QUZCOEFFNjRBQ0NENzM3RjE0NAotOjEwRkI1MDAwRjYyMzBGMDQwMzk4MUZGNDAwMUZERkQwM0JBRkQ2Rjk0NAotOjEwRkI2MDAwRTcwQkMyQTlEN0VFQzJGRTgwN0Y2RTA2RkUzOUVFODQ5NwotOjEwRkI3MDAwNTZGNjFDRTQxN0M4MTYwQkUyRURDMjg4REY4QUY4NzA0RgotOjEwRkI4MDAwRDg1MjNCMTJGMTg3Q0RGMzY2MjM5RUQ5RDE2RTE1QkJCNwotOjEwRkI5MDAwRjk5NzA1OUQzQUQwNkU4MjY0MjVCREVGMERDMTI3NjFBRQotOjEwRkJBMDAwQkRDOTQ4MTIyODY3NDdBQjBFRTRFRjE4ODdCQzE5RTRCQgotOjEwRkJCMDAwQ0QwMDVEMUUxOTcxQkI3ODdGNjA2QUQ0N0UwRDE4QzhCOAotOjEwRkJDMDAwRTVCQzUxMkYyQjhERTMwNTdCOENFMzg1MTE1NzFDNUEyNwotOjEwRkJEMDAwQ0YwNEY0QjdFMERBQzgwRkQxMjNDRUQ4NDdGMjNCRDgzMAotOjEwRkJFMDAwQkY2NDE4RTJFREI1MTg1RjBDRTVENzhFRTVGMUM1NjU4OQotOjEwRkJGMDAwREY5QzlFMTRDRjJFMkFENkM3M0RBQURGODczMEJFRDcwMgotOjEwRkMwMDAwMDRERDE2QTQ5RjE3MTA3OUZBNjJGRkZERkY4OEZBRDI2RgotOjEwRkMxMDAwMEIzOEQ2NTgwMkE5OUY4REM2N0RFNEY5QjEwMzczMUUzNwotOjEwRkMyMDAwNkUwMkJDNTg2Q0YxNDk4ODQ3MkM0RjUwNzFGRUQ3Nzc1MwotOjEwRkMzMDAwRjhBRUExRjVENDMyNzY0MzRFOUM3NUU4RjI3RTUxQzAwMQotOjEwRkM0MDAwQjY5OUM3ODc3MEZFMzM1RERGQjc2M0YyRUMzRDc3OTFGRAotOjEwRkM1MDAwRkRFQzUyQUQzMENFQzRGMTAzODhFRUE3NTUwQjA2RERBNgotOjEwRkM2MDAwNTcwRTQ0M0QxODRGMzBDODlGRURBNTM4RjcyNTJDNjgzNgotOjEwRkM3MDAwQzM0MTk2QzREMEZEMzJFNzk5OEY1MTJFMkREQjYyQTY4OQotOjEwRkM4MDAwRUJFNTJDNjRFM0ZFRTZDOEUzMUY0MEZGMzUxQjkyNjVGRAotOjEwRkM5MDAwOTQzRkNCNUJDQ0Y1NkEzNkJDNzU0MDI4RURDOTA3NkE0QQotOjEwRkNBMDAwMEMzRTEwMzRGMzAxNTAzODM4MUY1ODNGOThDRUJGNTZFMQotOjEwRkNCMDAwNjQ4QkNBQTE3NEY0N0ZGODQ4REUyNzMwMkVFRkVGOTNFRgotOjEwRkNDMDAwRDQzMEQxNUZCQjlEREI1MUJBN0U3RUE3QzhGNUYzMDQ2QgotOjEwRkNEMDAwRTY1MDlDNDVDODg3MkQ3QTlDMkFDRjFCRTNCMzk4Rjg0MQotOjEwRkNFMDAwOTY1M0NEQjcxMUJGMzFFMjYwMDA4MDI0RUY0RkY5QUZEQQotOjEwRkNGMDAwOTVBM0ZENkM1RDdDM0U4NkRFQ0JEQUZCODRGMDlFODFCNQotOjEwRkQwMDAwRTE2NzAxRkQ4MEVDMkJCNjAwMzhERDM4RTI0M0I0NkZDQgotOjEwRkQxMDAwQzI1MkY4N0YwQ0FFQ0I0NkVCNUE5Rjk0NDdGQzdEMTU0MAotOjEwRkQyMDAwMTA4NEJEMENFRDYyQTkyNDg0N0QwRUU2RjRFNDQwM0ExMwotOjEwRkQzMDAwNDJGRTNFRDk2QzZGMjUzMEFFQzcwRkVGRTA3RTlDMTFCRQotOjEwRkQ0MDAwREQ3MkJGMDFGN0Q3Q0U1NDA3OTdGQkNEMENFOUFCNTc1NwotOjEwRkQ1MDAwN0JDNUI5MzJBRUJENDIxMjBBRkE5RjMxOTlGM0Y1OEJEOQotOjEwRkQ2MDAwRDkyQkJERDkyMzVERkI5OTAwN0ExQkE0RDNCQzA5Q0Y0NQotOjEwRkQ3MDAwRTNCQUFGM0U5RjkyMUMyRjhFNkE1QTg1RTg0MUJCNkM1NgotOjEwRkQ4MDAwOUE1NUNCNEM4QjE3Mjc4OTdBNzY2NjU0N0RBRjkzRkFCOAotOjEwRkQ5MDAwOTNCQ0U5Q0Y2M0RDMTJGNDFCNDJGRURGRjFBNjJENkVBQgotOjEwRkRBMDAwM0NCMkE0RjcyRjU5MzUzOTVFRkZEN0EyNTMyQUNBREZEOAotOjEwRkRCMDAwMkU3OUIzQThERjZGNDE1Rjc5NzE2MDFDN0RDNUI2MkJDQQotOjEwRkRDMDAwRTY5QzkyRjkwNzQ2QzcxMzNDQTNGQjAzNDcxNjZBNkRFRQotOjEwRkREMDAwRDhGRTYwNDIxRUYxM0JBNTBDRUNBOTdFOTRBN0ZFMEU1NgotOjEwRkRFMDAwREU3NjJEQzU0NzlDNjFEQTQ1RTMyM0Q2NDRGOUNGMEY3MwotOjEwRkRGMDAwQTZDNjNGMTc3OTVERTc3MzM2OEM3OTgzNzE2RjU3QjQ2OAotOjEwRkUwMDAwN0Q4ODU3NDc2REZDRENFNTY4QTI5RUJBRjhCOUQ1MUYxRQotOjEwRkUxMDAwQkJFQUYzRjQ5OEMxMjcyREJDRkM2ODlBRjlCQ0M2QThDQwotOjEwRkUyMDAwRjdCOUVFODczQUQ0RTBGMEFDODlGMkJGMkFFQkVEM0VBOQotOjEwRkUzMDAwOTREMzk5MDVGQUZEOEQ5NThDRUNFN0NFNTc1MjM3NDU1MgotOjEwRkU0MDAwRUZFQkQ5ODExNUI2MkIzM0IxOUU2NkNCNDEzOEJFQzJEQwotOjEwRkU1MDAwRTU1RjlEMTRCNkUxRkUzRTcyODVGNzEzOUM3NzlEQzI2NwotOjEwRkU2MDAwQjQxN0IxMUYyNTZDQkJBOTA0RUQwNjFFMTdEMjY5RTVCNgotOjEwRkU3MDAwNzY2MDY3MDI0RjhENzk5RDFEMzhENTc2MjU5RTIzRERFRQotOjEwRkU4MDAwMTYyNkJFRDg5NTlGMUEyNkJFNzc3NkEwODdDNkVEOUMwQgotOjEwRkU5MDAwNkU5NEVCRjlGRkNERjMwQTkzNTU5QzZGODU0M0I3MUYyMgotOjEwRkVBMDAwOEFFNDM1RTQ3NzA1QkQwRkZEMzZCMUU3MDc4QzhERTdCMQotOjEwRkVCMDAwRkFCMTFFRTdBOUU1RkU4M0NFRjE3QUYzRjM1QjFDMUREMAotOjEwRkVDMDAwN0I3RTBFREZFN0U4RkU2MDZGREI5NzdCRUU1NjA4N0ZGOAotOjEwRkVEMDAwMEVFM0I4NzM4MzA5OENFMkJERkY0NUJGN0U2N0ZGMEU1QQotOjEwRkVFMDAwNUFDRkJBOEE0OERFNjNFNTE0MkY0MDdFQjVFNUVEQUYwMAotOjEwRkVGMDAwMTM1RjVGNkVEMDdEQUI5OUVFRDNBRUJDQjQ3M0I1RDg1MwotOjEwRkYwMDAwRjM5NjZGODFDRUFFQjgzMjBFOURGRDBFRTUzNUUwNTcwQgotOjEwRkYxMDAwOTUzODg1RjhEQUE5NTY4MUZDMjEwQUVCNjg0NDM4QUY5OAotOjEwRkYyMDAwMTBGOEJFQUM3ODYzN0VBNTBERjMwQjk5NEM3Q0JFMzUwMgotOjEwRkYzMDAwOTY5Rjc5MDNBODI3MkM2QjYyMjRFRkNBNTg0MTBBQzIwNgotOjEwRkY0MDAwQkI3RTlGODgzRTA0QkE2N0EzNDRGMTQ5QkM2N0EzNDRDMwotOjEwRkY1MDAwRDlDNTc4Q0YyNjNBOEZGNzZDQTJFQkUzM0Q5QkU4NzJDOAotOjEwRkY2MDAwQkM2NzEzNUQ4RUY3NkNBMkYzNzhDRjI2QkEzRURFQjM4MgotOjEwRkY3MDAwODlDRUUzM0Q5QkU4RkE3OENGMjYzQThGRjc2Q0EyRUI2NwotOjEwRkY4MDAwMUY2MUJFNDdDNzBCMDhENzA5MUIxMEFFQURBQkVEMzJFMgotOjEwRkY5MDAwQzI5NUY5QjU3NzhCQjM0ODlDMTFGRUUxN0Q5Q0U4N0U1NAotOjEwRkZBMDAwOTZCOTI2RDk5NjAzMUNGNjY2OEI0QzE4OERGNzZCOTY3RQotOjEwRkZCMDAwOUFGQTVEMjZENjkyOUYwMEQ0MEU5MjIzM0VGODhGRTBFNwotOjEwRkZDMDAwMjkxNjkzOUQ3Q0I2NEQ4MEJEMDM3RDY4NDM4Q0ZFRDA4MQotOjEwRkZEMDAwRkU1MDIzRUFEQjRCODJFNkVGQ0I1ODk0REZERERERjMwNgotOjEwRkZFMDAwMUNFOEQ2MkJGNTczQTBCRUFDMkZFMjczOTVFODU0NzFENAotOjEwRkZGMDAwOUY0RkJEMjdBQTc2QTZCQjAwNzA5RkI3NzI3RjY0MTk3QQotOjAyMDAwMDAyMTAwMEVDCi06MTAwMDAwMDBCQjcyRkQ3OERBNDcyQjBCMkE3ODNDQzJDQjRGNkQxNEJDCi06MTAwMDEwMDA4MzdFNzdGN0Y5RDBBOTdEQkYzREVDODU3QThCNzM0NDU5Ci06MTAwMDIwMDAxOUU5Q0U5RTZEREVFRjA0QzVCQ0RGNDk0NUU2RkQ0RTA1Ci06MTAwMDMwMDA1NkNERkI5RDMyREFCQ0RGQjE3MDRFRDVDQ0ZCQ0ZDNEMwCi06MTAwMDQwMDAyOTA0RTc2NUZEQzBCQzgzRjFEMzI3OUJGMUMxODBFRjk0Ci06MTAwMDUwMDA2OEY4OEZFM0FCNDJGMDVEMDRGMDdENENDMDczQjUwN0U4Ci06MTAwMDYwMDBGNkY2NTM3QUMyQjlBRUVEMjExQkVBQUY5NzBCRTcwNzVDCi06MTAwMDcwMDAxMENFNDlERDcwM0VDQkM2NTczQTA5Qjg2QzlBNjM2NDFFCi06MTAwMDgwMDBCN0JFNTRCRUNGNDc0MTAyQzdFNERDNEFGRDNFMkYzRjE2Ci06MTAwMDkwMDBERkQxRTEwQUZBMEJEOTBCNTFFNzUwNERBMjQ4RkFDQzU3Ci06MTAwMEEwMDA2M0M4NTdCNThDNjRFMjAzRUE4NjI0REFBRjYxMEVERURBCi06MTAwMEIwMDBERjQyRTYyNUZFQjQzMDQ2QUY1OUVDN0NDNDg2N0E0RDZCCi06MTAwMEMwMDBFQzNBNzEzNkU4NzdBOTY5RTc3QTRERUM3QTdCRjhBM0M4Ci06MTAwMEQwMDA4QUU0NTAzRkNFQjc1QjFFNTM3MTk5RUQwNjlGRjZBMjlFCi06MTAwMEUwMDAxRjIzODM3NUQ4NTA4RkU5OEQwRjdFMkY1QjdCMUVGOTAwCi06MTAwMEYwMDAxMTcwMzE4NkYwRTBBNjAwRkQ4OUFCNEZENjc3MTU3M0ZECi06MTAwMTAwMDBGRkJDRERDN0ZERkNDQzlGNEFGMzE4QzVGODNDQTg1MUU1Ci06MTAwMTEwMDA5NEJGN0Y5NDE0MjRCRjQzMkVFM0ZFMjVDMzFFOEI4NTFBCi06MTAwMTIwMDAyN0NCMTVENkJDMEJGRDhBQUYzMTFEOEVBQTI4NThCQTM1Ci06MTAwMTMwMDBGREY3NjAwNTZBQTg1RjhGM0NDM0Y1QTdEMThFOTY4MDU2Ci06MTAwMTQwMDBBNEY0QjRDRjBGMTdFOEU3REM5MjFFRjc3OTkxNzM0ODU3Ci06MTAwMTUwMDA5QzNGRkEzOTZFRDJFM0VFQUU2QTFGQjUwN0YzNURFNzU2Ci06MTAwMTYwMDA5MjNCREVFODg3RkIzNTdFQzc1QkU5OThCRTJCMjg0RkM0Ci06MTAwMTcwMDBERDBERTNERjI4NzBCQzg4QjUyQjAzREJDNzI5QjhGRjkyCi06MTAwMTgwMDA1NzBCMUVGMjU3NEM2MkJFNUM2RThGMDQ0OUNFNEM3MDBBCi06MTAwMTkwMDA3ODQ5QUZCNTM4MzQyQjlENDdFOUZFNEJDNkMyOTM1MDIyCi06MTAwMUEwMDA0RjVGQUFEQTY4MUU2QkU0NEYyN0ExM0Y2NjE5RDNGREEzCi06MTAwMUIwMDAzMTZERTZGREVCNjEwRkM1RDg0MUI1QjBGRkQ4NkZBQzJFCi06MTAwMUMwMDBERDEzMDc4RjYyRTIwMUNDRjJGRTg3NDUzQTNDMTk4RkJFCi06MTAwMUQwMDA1NzUxMThCRkY3NURBM0ZCOTE2QTFDMUI1REZDMUMwRUY5Ci06MTAwMUUwMDBFNDVDMkVFQjYxMzc0OTA4RjgzMTc0NUVGMTM1RTI1QjZGCi06MTAwMUYwMDA1NjFBRDgwMzc0REVBRkQ4RTJDNUVCMzEzOTgzQ0VENUI5Ci06MTAwMjAwMDBFNzNCQTcxMTVGOUVERkQ0QzNBRjQzNzhCREIwRjkyMkFGCi06MTAwMjEwMDBFQkQyRjU4NDExRjgwREM2RkRGMzk1MEFGN0EzMjQ0RTMxCi06MTAwMjIwMDBEOUE3NjE3MTc5NDc1RUI0M0U1QjZGRTNGNzcyOTkyRjhFCi06MTAwMjMwMDBERDc0NUYyMUJGODhFQkI5RTVCQURFNTRFM0QwRTE1NDQ5Ci06MTAwMjQwMDBFNDZGNDRGREI4NEI2RkVBNjEyRkZFNzNGNzYzOEM3ODVGCi06MTAwMjUwMDAxNzgwRDc4MDIyRkQ3QzY3NzU0NkY3Rjk4RUIxOEUyRjA3Ci06MTAwMjYwMDA0Njc0M0MxRDAyNzg4OUM5RDczODkwM0YyRUVFRUYxREE5Ci06MTAwMjcwMDA1MjA0RURGQTFGMDgxRjQ2QkE2MTRFODVGNEY1OTM2RERFCi06MTAwMjgwMDBDN0Y2OEJGOURERUIwMjNDN0I3NDFDQUVBMzREOTRGOUYxCi06MTAwMjkwMDA3RDc5N0ZFMzM4RThCN0IzOENFMzVERUZGNkFGREY5OEE1Ci06MTAwMkEwMDBEN0U4NzhGMzMyRTJFQkFCQzRFMjk0NzA5NERFRUVENDlDCi06MTAwMkIwMDBFMTc3NzRCMDY3MDJCNjJCRkY2M0FFMEJFNzZCQ0Q2RkNGCi06MTAwMkMwMDBEOURCMTdGNUUyM0JCODVFMENGQjRBN0UxMEQxQ0EwNEJECi06MTAwMkQwMDBENDRCQUJDNEYzQjc2M0ZFNTQzNjkzRDFGRUNDNDhGMjkzCi06MTAwMkUwMDA4QjJFRDRGM0U2MzJGMjEzMzFENUE3MjJBQTg4RkQ4QkU4Ci06MTAwMkYwMDBDOTRFQ0VCQTAzRUMyN0U4RjdBMzk1RjM1M0YxNUU3RjFFCi06MTAwMzAwMDA1NkYyODJENDAyMjdDNjM3QzE1NDA3NDA1RUIwNzhGODRGCi06MTAwMzEwMDBCREVDMTczRkZFOEY3MjJDOUY0RDdFRTk1QkVDRkM5QzgxCi06MTAwMzIwMDBEOUZEQTNCRjJGMjMzQTYwNEE5QTdEMEM4RUU3QTU3N0FCCi06MTAwMzMwMDAwNTIyQTkyMkNEQUY2MkQ2OTlFMUE4NUZGNTNERUYxQzU5Ci06MTAwMzQwMDA4NkZBNTkwRTlFRjMwMjQ4OEI3NEZBQjhCQTMyMzJEQzQwCi06MTAwMzUwMDBFN0VDODY1MzQ2NDE3Q0ZCMjU0NTg3QzdDMUM0OTMzM0YwCi06MTAwMzYwMDBGMDNDQzRCODdGQjEzRUU5NkQzQTBGM0ZBOTlGOUZFNENFCi06MTAwMzcwMDA2QjkzNTMxMENGMEYwRTM0Q0VCNTQyOTlFOEIyQUE0QjBGCi06MTAwMzgwMDBEMDUyNjZFMjNDREYxMTE5OUU5QjlDOTFCNTk0NTQyODkzCi06MTAwMzkwMDAzRkM5RjhGRDBBN0Y4Nzk1Q0U4OTU2REU1RkQ5MjdDRDA0Ci06MTAwM0EwMDBEOTdCQkNGRTdGMTQ3MUZCQTYzNjI2MkVBQTU2MEFEOTJECi06MTAwM0IwMDBGMDNDQUJGNjVGOEM4QjZBMDU4QjNCREU3OTk4QjFGRTI3Ci06MTAwM0MwMDBCQTU0ODk0OTQzMjExNTk4RTc0MkY1QjY3RDJEQzY4NTczCi06MTAwM0QwMDBFM0E2MjJDQjA1RUY2RDZDRDBENzY3RENDQkE4QzM3QjNGCi06MTAwM0UwMDAxOUYwNjlFNTJCMTU3REQ4MDVFQ0QwQkE3M0UzNENGNzBECi06MTAwM0YwMDAxRkQwNUVDM0Y1RDU5RDlCNDBERjJCRUYzQjYxNDNGQ0Q3Ci06MTAwNDAwMDBDNjdFRjAwOTA0RTM1RTQ2NkY3MDRFMjlFMkY2NDYxRDkzCi06MTAwNDEwMDBERTY3NDg4RkZFQUVGMEVGNURGRDY3NTBGOTMzM0FEQ0UyCi06MTAwNDIwMDA5RUQ5Njc5OUJDMzlDRTNDRjdFODcwMTk5QzI5OTFCRkQ5Ci06MTAwNDMwMDA2MDQ4ODg2OTlCRTI4QzZCRDQzM0RFMzVFODZENUVBRDM1Ci06MTAwNDQwMDAxM0MzNzM3MERFMTgxNzFDNkZCQzk3RjU3QUM2N0M1QkZDCi06MTAwNDUwMDBEM0MyOEIzQ0ZDOUM3NTIwQkU1QkQwOTU5NzIzNzkzNzJCCi06MTAwNDYwMDA0NkYxRDNCM0JBN0ZBMEY1N0JFMTNDN0EyN0UzM0E2RTNECi06MTAwNDcwMDBDN0Y2QjZDRjUzRkI3QjkzOTAzRjhDOTQ0Mjc3RUNDOTgxCi06MTAwNDgwMDAyMEIzOEJBMTFGQURDRkVDOTAwNUU1QTQ0MTU3QkRFRDg2Ci06MTAwNDkwMDA3NzM3OUM0NUQzRkQ5NzlFNzBCNjUxNzlEN0JEMzNBNjZCCi06MTAwNEEwMDBCOTg0MkM5NDQzOENGNDgxRjU3RjJDQjVEOTYwRkM2MzFFCi06MTAwNEIwMDAxNjE2NDFCRTUzMjVFNjRFN0ExNUYzNjAzRjIwNUQxRUE5Ci06MTAwNEMwMDAyM0Q5MDFFOTA2OTFFRTMxMUQ3QkIyQzA4Njc2RDlBMjBGCi06MTAwNEQwMDAwQTE2MTE4MTZGMUQ3QjM3QUYxMUUzMkU5NUI5QTA0OTI0Ci06MTAwNEUwMDA4RTAzNzU2NzhERjlGQ0IxODY2OTdCOTNBMURERkMwM0YyCi06MTAwNEYwMDA5RTk0MTBFNDE3M0M2MDk2NjNDN0RFN0REMDg2RjY4MDNDCi06MTAwNTAwMDAzMENGRTlDM0I4MjI5OEU3QTQ1NzIxQkZCMENENDZGNzUyCi06MTAwNTEwMDBCMjE2M0QxMkRCOUY1OTBGQ0VEMkU1NkRBQzNFN0NCMkQ4Ci06MTAwNTIwMDA0OEI3M0I0NkIyOTEyODY3NUU2RDY4RTNFRkU2RThGN0FGCi06MTAwNTMwMDAxMDQxRkZEM0UyRTE4OUExMDczRjk5MzhGMUFGNDUwNEFCCi06MTAwNTQwMDBBRjE2MTFGOUQyMzgyOTdFRkQ1QjhCMzlEREFENzhFQTIzCi06MTAwNTUwMDBCNENEQTVGNDRFNjdDNzgxOUYxNEMyRjgyNzFBNjQ0QTI4Ci06MTAwNTYwMDA1RDgzMzQ2MTEwRjQ5RjM3Qzg2QjFCMDRFRDQ1MjU5MjAxCi06MTAwNTcwMDBGNzA1RjkzOUY5MzkyOEUwMUJFNUVCRjE3RTFBQ0FEQkZBCi06MTAwNTgwMDA2QUFFMjdEOEM1REI2QTQ4MUZFREM3RTQwMEU5MkYzRUY1Ci06MTAwNTkwMDAxRkY5RDMyREEwOUZBNDYyRkNDNkVEQTI4QkZDMERGQzFECi06MTAwNUEwMDBEREEwMzE3RjU5OTA4QUVCQ0RGOENEQ0MxNzEwQUU3ODE1Ci06MTAwNUIwMDBDNzgxRTFGQjJCMTU1QTE5RjJGNzc1NTM5RDc0REVCRjA1Ci06MTAwNUMwMDBDOUUyQTc3RTMwNTBFQjNFODA2N0YwOTkzMUJCRDA3RDA5Ci06MTAwNUQwMDA1RUQ4RjJEMDQ0QjRGQkU0RjY5RDIxQjQ1NzlBMkM1RjY4Ci06MTAwNUUwMDBFRUM1Qjg4NEE2MDk0QzBEMTBCNDgzMzQ0RTdERkJENEZGCi06MTAwNUYwMDAxN0IwN0RERTM0QTc4QUY3NEFEN0I5QjUzMjM5QUE3RjVBCi06MTAwNjAwMDA4NTQ1M0U0NjNERjM2NEFEODVGQ0E2QTdEQTlFQTBGMzgyCi06MTAwNjEwMDAyQUIwRUYyMkE4N0M5RkFBQ0QyN0JGOTkxMUY3NDM2Nzg0Ci06MTAwNjIwMDA3RjcxRkM4NjI3NDBCRUIxQTg3QkRDQ0I1QjM3NTk1MDdECi06MTAwNjMwMDAxRjFGODIxQjE1MTU1NzY1Q0NBQkY2REU1MEQ2Q0QyODkzCi06MTAwNjQwMDA3NzdGMkQ5MTFDQ0RGOEFGRUIyODdFQzAyRDI5MDJDMkZCCi06MTAwNjUwMDBGMzY2NDFFNkZBQThBRTI3Q0Y2MkM2OUZFNjNEQTg5RkEzCi06MTAwNjYwMDBDRTQzM0QxOUYwRjAzMzIxNDhGMTlBMTZENkZFMTJCNjZBCi06MTAwNjcwMDBBRkNFRTZGQTIwNTM1QTQ2QTBGRjNBNUNBQkJGNEJCNDZDCi06MTAwNjgwMDBDQzlBOEFGQThENzE0RUQwMUIzRUY0RTZFNzgxOUUxNjE1Ci06MTAwNjkwMDA3RDA4RTM5RTE0MThGOTlCRUEyRDkxM0M5Q0RGNzE2QjU5Ci06MTAwNkEwMDA3Q0Y5M0E3RDEwQzdCRkJBODFCRTIwQzlGMzM0MjYzRjFBCi06MTAwNkIwMDA4NUYzMkFGNEJBOTEyRUVCMkNDQTBBRjI3QkJERTdBMThFCi06MTAwNkMwMDBGODkwNEU0MTRFMzNCREVGMjIzN0ZGMEVGNUVFN0E4Qjk4Ci06MTAwNkQwMDBDQ0VEOUIwMzVBMTk5RUM3NzQ0RTJEQTZGNzVFNEU1QTU5Ci06MTAwNkUwMDBDMzc5QzQ0NzgwRUY2MTVDNTZEREEwMTdBNjQ5RjhERUU4Ci06MTAwNkYwMDA0RTVGRDBCQjIwRkZGMzQxM0I3ODNFM0ZCQ0M4MDJGOUMwCi06MTAwNzAwMDA1REJGN0U3RjlBMDQ3MEFEMUIxQzNFOENGOTM3MDc3RDYwCi06MTAwNzEwMDBDQUYzQzNDMjhCNzA3RjhFMEM4QUYwM0MxQTYwODA2MDczCi06MTAwNzIwMDA2NzA2N0QzNUNEMEZFQjNBQUVGQjNGOTkxQTlFODNGM0ZBCi06MTAwNzMwMDBBQzdCRjU0QTRCQjQ3RjMxM0M4OEYzQ0RFMzA5QkNERTlBCi06MTAwNzQwMDA3MTM3QkJGNTQ2RDQzRjhBQzI3NDFGQzZBOEI3N0I5MEU5Ci06MTAwNzUwMDAxMUI3QzlGMTdGQzlCNjg0MTBDNjA5MUJFRDU4NzZGQ0U0Ci06MTAwNzYwMDBGRUVGRDFEQjJERDFERkM5MDJGQUZCMkRENkRCOURBRDJCCi06MTAwNzcwMDBBNEQxM0UxRjA1MUU4NTcwNzk2NTEwOURGN0NDMUI5NDkyCi06MTAwNzgwMDBBNkJGNzMxNENFNEIyQkVFMzlERTUyOTRGMzI4MDdBQzgwCi06MTAwNzkwMDBFNjdCNkZGNzBGRTI3QzlCMTVGM0ZFRUJGQUNBQTlCODc0Ci06MTAwN0EwMDAxRjU5NjlEQ0NFODAwRDQ5QkQ4RkRFMkZEOEE0RUI1NUQzCi06MTAwN0IwMDA3QzdGMzI0NEI5MkMyMDkzREMxOThFNzZGM0VFRjNCOUFBCi06MTAwN0MwMDA2NTY0Mzc1N0M2Qzc4QjQ3NzVCQzU4MTJFMEUzNDQ3MjVGCi06MTAwN0QwMDAxNDc5MzNERDM3NjcxQUM2QTNFQzZFNEJBMDc1MThGNTk0Ci06MTAwN0UwMDA4RjBDRTJGQTQ1Nzg1MDJBQzc4QkFFN0RFODIzRDAzOENCCi06MTAwN0YwMDAwMTFEMkVCOTAwRUY5MjZFRkMzMURBNUY2Q0RENUJGRUZECi06MTAwODAwMDA0REVCRUVCMTRGRTU3QzdFQzY3QTE4N0I4OEVGMkJDQ0EyCi06MTAwODEwMDAyRjE1RjRGQ0UzQUJGNTc2QTM4RDc5Mjg0NDBGNEJCNjg2Ci06MTAwODIwMDBEREI1ODFGMzNGMjU4REVDNzZGNjEzM0U1Rjg3MzE2RUEzCi06MTAwODMwMDAzMTlENEYyRUQ3RjU2MEQxRkZCNjBERUQ4REU1NEQxREU1Ci06MTAwODQwMDBGNEVFREFGMjE2RkVDRTU2MzdERDY5MkJBM0U5MkNBM0JGCi06MTAwODUwMDA4MEFGMzM0M0Q0MzIwMjQ0OEZCMDNFQTI0NzREOEYzNzJFCi06MTAwODYwMDAzMEUzNEYxN0JDNjNFOUI4NDc3RjRBOUFCOTNGODVGQTJFCi06MTAwODcwMDBFQjZEMUYzRUY4QjZGNzIxMTAxRjlFNURGQzI1MDY3RTJFCi06MTAwODgwMDA1REY0RThENkRCMTUwMzlFOTVGN0E0QzczN0JCRjYyRkJBCi06MTAwODkwMDA4NjhFRERGRkU0NzhGQUJEOTNFNTc3RTlGMUFBOEExOTNGCi06MTAwOEEwMDA4Rjk3QjdCQTJERjM4QUJCRUJERkRGRjI5MDI3M0E5RTIyCi06MTAwOEIwMDBENkRFM0FENzhGRjJBRkJFQkQ4MkUyNkE5N0JGQkNGNUYzCi06MTAwOEMwMDA3NzdFNjhCRkY0Rjk5RkJBMzA5OEZBOThENDlDODU3QUZECi06MTAwOEQwMDA3MUVENTM2QjVEMUE5RUIzNDg3RTE3RjJDRDYzNDE3MTgzCi06MTAwOEUwMDA3MkJDN0JBQkVBNjA0MTVGMUZEN0M3RUFGMDlGRDBGRkM1Ci06MTAwOEYwMDBGMTY3RkVERUY4MUYzMEZGQkYwQUEwNUYyMUJGNkRGRDZDCi06MTAwOTAwMDA1QjIzREE2RjdCMzU0NzA0RTVGNjUxMjkzQzA5RTVFOEJFCi06MTAwOTEwMDA5MkI5NEVERjZBMTVFMzA2Q0RGQUQ0RDI1RkZEMzQ0QkFGCi06MTAwOTIwMDBBMUUwNkU3RjNGMEJFOTUzQTE3RUQ4QUVFRTQ5QUI4QUMyCi06MTAwOTMwMDBGNjdCREQ3QkEyMEFDM0IwN0ExNjY5QzRGOUM1QjZBRkVGCi06MTAwOTQwMDA2RkY5Q0M4NjcwOTU0MTFGQ0MxREQ3QjMxQzM4MDlFMUQ3Ci06MTAwOTUwMDA3RDdERUI3RjdFMjlCQTMwM0RGNjIxMkJDNUZFQTJGQ0MyCi06MTAwOTYwMDAxMTAwRjc5QTVFRjQzMkY3NjBERDRGQTlERjBCMzBFMDNCCi06MTAwOTcwMDBDMzgyOTlBNERGMDQ3RUJEQkVGNDEzOThENzg5MjdGRkY0Ci06MTAwOTgwMDBBRjRCMjg4RTk2OTdGNzEyQkM0RUI1Q0NGRkU1QUI0QTFECi06MTAwOTkwMDBFRjcyRjUyNEVBMDdGNjlFN0E4MEQyMjY3MDI1QkI5RDc5Ci06MTAwOUEwMDBBN0I1RDY5MDBCRkQwMkI1OUJBQ0FBMUYzRUQ3NkU3REI2Ci06MTAwOUIwMDBFMjY5M0M1NzYxMUZEODU1M0M3QUFDREQ3QURBODZFRkE0Ci06MTAwOUMwMDA5RUQ1MEE1QTQ0MjAzRDhCQjk4NDkxRERGQkI0NkNFQjczCi06MTAwOUQwMDA1RkI4QkYyQTQ3NjQ1MzYwOUY5NkZFRjYyQ0FGQUZCMTU1Ci06MTAwOUUwMDA0ODAyRDQ1RkY2QzIyN0U0REZBQUY1M0E3RDhFMzhGQkQxCi06MTAwOUYwMDA1NEQ5QjJEMzE2NzZDNkQ5QTc5NjRGMjZBMTFFMTRGODlECi06MTAwQTAwMDBGNTU3QjQwRkM3NzYwOEFDOEZCQjY3RkI5QTREN0ZCMTIzCi06MTAwQTEwMDAyMUREOUM4MDBENDk0RkU1RjA0MkZCQjRCRTQ1OUM2QjQ3Ci06MTAwQTIwMDA0Qjg5Qjc2RkExRUI1MUZGODM3MkYyODM1QzZDRkY4NDNCCi06MTAwQTMwMDBDMThDRDNDNUNCNUI5RjQzN0JBMEU2NDNCQjNBMDVDN0M0Ci06MTAwQTQwMDA3REVFNzYxNzQzRkUyQUY5MzhCRUZGNjI2RDk2MDZFMzA3Ci06MTAwQTUwMDBENjU4RkQ1OTMyQTVGQzdCQ0RFMzc3MTAxRTJFN0VFN0RDCi06MTAwQTYwMDA4RTJDRDJFQjk4OTY2MzE5NERFQkNEQzE3NTJFREMzOEU4Ci06MTAwQTcwMDA5REQ2Qjk4ODc5MDkwRjZCN0VDMUZEMTk2NzI1MzYzOTc2Ci06MTAwQTgwMDBERTNERTMyRDgzMzlERkIyQjNEQjRBOTEzRUNFNDI0RkU4Ci06MTAwQTkwMDBFODg3Mzk2MjYzM0M5RUY3NURGRUZFOTg5REREOTgxMjAzCi06MTAwQUEwMDBGREJFRENERDgzMzkxRkYxQjNFMEM3RjhFRTY0M0REODRECi06MTAwQUIwMDBDNUM4MTdDNDc3Q0U0RUMyN0U1NkJBMjU5RjVEQTZGNTJGCi06MTAwQUMwMDBGQjc1NzgwOURGRjA3ODBFNDUzMkUyNEVGMzYxQkZERTQ4Ci06MTAwQUQwMDBBOUVBODM3NkIwOUQ5REIyREQ1MjhFRTdCQjRDNDFGRjAzCi06MTAwQUUwMDA2RjU0M0I4MkRCOTFDREY2NDQwMUVDRkMyMzU5RjFFRkNFCi06MTAwQUYwMDAxMUJFREY0NUY3RUM1RDE2ODU0RkY1NUI4RTEwM0UzMTdDCi06MTAwQjAwMDBCMEJCNTJCMjc5RkUzMUE0NDNCMDhCNTIwMDZFNjdERUE3Ci06MTAwQjEwMDBGQkNDRDYxN0ZEMUQxOTE2MzYwMEU3REJGMTE3Q0EzM0RCCi06MTAwQjIwMDAzNTUzQzFGQTQ2RkZGNTZENzZEMzdCMjRGNTRGRkUyNThDCi06MTAwQjMwMDA4NjlFRUQzMUVGOUNGODA4OUVGNTJDNDU0MTdERjM4OEFCCi06MTAwQjQwMDAyRDMyNjkxQjhFMDNFMzYyQkNFNkEyNDdFQ0E2NzdDMjk2Ci06MTAwQjUwMDBCQUYxQzVENkZERERERDREOUY4NjdEQjU1OEE3RkZEODFFCi06MTAwQjYwMDBGNUM3RjI4MzI3NjJGODAxREI5ODc5NDlFRjNFRDU1QTQxCi06MTAwQjcwMDA4MzRGMjM3QzZBODE1RUZENDRBRjlDRkU0MDQ3OEYwQzBGCi06MTAwQjgwMDAwMDdBRjhGQ0Q5RDdGNkZGMTBGRDc0MkRENjhDMjkzNEU1Ci06MTAwQjkwMDA5QTk5Q0ZENkJDMDhGNDhCRkUzNDgwNzc4MjhBN0NGNjkzCi06MTAwQkEwMDAyQjFCRUFCREQ5OTU2MDA3QzNCQzNGNzdBQTc4MjlBRDU2Ci06MTAwQkIwMDAyN0REQzJGN0I4NzRFQjY0NzRBRUY1RkY4QkJGMkVFRTgxCi06MTAwQkMwMDA4NUJGQkUzNUQ4N0NFRkVBMkMyQjRFQzEzQjBDQzc5RkFFCi06MTAwQkQwMDA1OTc2MDVGOTE1NjJFMDZCRDhCQkIxN0M3M0YxNjA4NTdECi06MTAwQkUwMDBFMDFDQ0IzN0UxQ0Y3RTE2MDVDN0E1QkZGOTgyRjBGNjMyCi06MTAwQkYwMDBBRjM5RkMxQ0FDRUVDOUJGOTFGQzAyQjA0NkVDODBCNzJCCi06MTAwQzAwMDA3NUMxMkYyOUJGMTZFNTE3RTU3NzRFQzNGM0VBOUVFQkIyCi06MTAwQzEwMDAzNkMzMzNCNkZDMjE5RDFGNzVERDczQkI5N0Y5MzFFRUVBCi06MTAwQzIwMDAyRUIyNURBNEY3MTczQTYxMkU4REE4OUYzRkVCQTY3M0Y1Ci06MTAwQzMwMDBDMkI1QkFCRURGMjk0NzVDQTg5RkFGNEQzNUYyRUM1NjZFCi06MTAwQzQwMDA3QzA3QTZEMzVGMkFGQkIxN0Q4MjFFN0ZFMDg5Qjg1MjY0Ci06MTAwQzUwMDBBM0Y0QTQ0RkRBNDUxN0VBNzVFMTIwOUIxQ0ZGM0RDMEMxCi06MTAwQzYwMDAwMENEMjNDQzdBMkI1RkNERUY2Qjg5RTc5RjBCRUI3NjIyCi06MTAwQzcwMDBCRDFEQzYwQkFGRkVFQTM5M0MzNzNGMjQzOUU4REM3MkI0Ci06MTAwQzgwMDBDMUVBOTkyRUJBRkZENzVFRjA3RjEwMkYxNkJFMDE3MDExCi06MTAwQzkwMDA0NDdBRjI2QkI2MUM4MEYzN0MwRTAyMzAzRkZDNzQxRTZCCi06MTAwQ0EwMDAyQzI2OTdFRkREMDZGNTE2MDE4MEYxOUMyNEQ2OUZCMjI1Ci06MTAwQ0IwMDA5NDc5NTI0MkVFOUU3RTEzOTA4MzM2OTRGRjhCNDExRUIwCi06MTAwQ0MwMDA5MURGN0JBM0I5N0M2OUZCRTc4NDY3NEI2M0YwQ0M4QjM2Ci06MTAwQ0QwMDA3ODk2RDMxM0NGRkEwRUQxRTlCNjhDOTVFOUU3QkE2NENBCi06MTAwQ0UwMDBDRjc3RUUxM0U5M0NGRjk0ODM5MUJFODFFN0JDQjA2M0ZDCi06MTAwQ0YwMDBFQzU0QkI0OEZCNzNFQTU5MjE0OEYxODZGRTRDRkU2RTZBCi06MTAwRDAwMDAyQkUwM0JFQTU5MDYxRUM2REFGN0IxRTk4OTk3M0UxQThECi06MTAwRDEwMDA4OUY3QzQ2QTdGRjdERkE1M0Y4N0Y0QzRFRjNFMThCOEIwCi06MTAwRDIwMDAwREYzMkZCRjlGRjdERkFDNjdGRENBMUQ3RjIzM0JBNkU2Ci06MTAwRDMwMDA3Mzg3OURGQ0ExOUQzQjVFQ0Y0M0I5RENGOUFBNUQ0NTVECi06MTAwRDQwMDBGQ0VEQkNEN0NFRTMxQTc2MjREM0ZCNjU5REZEQjlERjVECi06MTAwRDUwMDAyRUIwRkRBQkQyMzBDOUFEMzU3QzFGODdEODY4QkY0RkYwCi06MTAwRDYwMDBCNUZGOURFNEM4QTk3NkJCODJFQkE4REY5MTQ0RkVCMTM0Ci06MTAwRDcwMDBGQTU3MTM4MkU4MUZFOERDRkVENUM4RTg3N0FFRkVENTQ3Ci06MTAwRDgwMDBGNUQ0RTlGNzY5M0E5MzU5MzVDNkNENzRBNkYyMzhDQjU0Ci06MTAwRDkwMDBGQTZENjM5RTU4OERGNjQ4RUI0RTFCRkFGRjJCRkZFQjY2Ci06MTAwREEwMDAxRkE1Qzg5NzNBNUZEQzY5NDNCRTA1NzZFOUUzMENGMEZFCi06MTAwREIwMDBDM0YzOUI5RkZFRDQ5QTgzRjdDNTE4RDlEQjI3N0VCMzc0Ci06MTAwREMwMDA3RjNBQkU4QkQ1MTMyRTFDMEU5RDAwMDc1QzE3QzBBNTY1Ci06MTAwREQwMDAwNkY1QjJERUUwQjFGODNCMEI4RjJGQzk5RUE4NkQxRjYwCi06MTAwREUwMDA0NTc0RDQwRDE3NDFFM0RGOTM4MzBFMDFEN0ZGOEEwQkJGCi06MTAwREYwMDBGRDQ2OURGOTIwRkY1NTVDRjc1N0E1QTgzRjVENkNERENBCi06MTAwRTAwMDA4REZGNTNENjZENjE5N0I1RUVBNzg2RjBGN0M4QkY3QjBGCi06MTAwRTEwMDBFQkU2RjgzRjY0MDg5NzU3QjE3NEQwMTNDRjVGRkUxMTJCCi06MTAwRTIwMDBFNTlGNEI1NjY5QkU5NzQ4RkY3QkJFQjNFQkJGRTQ3REExCi06MTAwRTMwMDAyRjQ1QkZFREU1RUVGQkExRUZFQ0JBMkZCNkVGNkZFODYzCi06MTAwRTQwMDBGQjlFMkNFM0ZEQkFDRUVERkZDOEEzRjU1RUUyQkFDNTZBCi06MTAwRTUwMDBFMkVGMkE5RDVGNzhERDVERkE5MUU4NzFFMEQzNUEwRkU5Ci06MTAwRTYwMDBCMDUwODcwMkU5REE1RUY0MTRCNUQ4NkM4Rjg4QkFCRTQ4Ci06MTAwRTcwMDBCMTk2MEREMzM2QTE1RDA1N0EwNkRBMDE2QjMzNzhCRUUzCi06MTAwRTgwMDAwOUY0MDc5MUVFMEY1MkIwMEE2QkNBNTVGOTdCQjY5MjdFCi06MTAwRTkwMDA4RkM5OTBCN0JFM0Y5RkUyNTlENjY2N0Q4RkU1OTdFMzM1Ci06MTAwRUEwMDA3OTA1Rjc2MzA0NTZBQkRFOUREMDNFOTA2QTUxMDIyQTY1Ci06MTAwRUIwMDAzRTUzQjVDMkJCMDlDQUU1QkVBMjhDRjZDRDVBRTU0NjgzCi06MTAwRUMwMDA0N0Y0M0IxNjkyRDM2NkIyNTM5QzMxRjY0NjYyQTFDREVECi06MTAwRUQwMDA2NDk3MjRCMDVEMzJGQUUxMTM1NDg5RTJGRkVDMkNBQTQ2Ci06MTAwRUUwMDAzREQ0NzcxNUYzNzNFQjQ0MTZGNENCQ0VDQjg3RDMyRERCCi06MTAwRUYwMDBDNUJBREZFQ0YyRTFFNEEwN0I5NUIyMEUyN0E2NjlCODkzCi06MTAwRjAwMDA2RUJCMjI5MTFFMjYzMUIwMUZGOTNBQjhERDA5NzA1NDJDCi06MTAwRjEwMDBBMkUwQzg3NDNCNTREMjQxMkUyOUMzMDg4RTYwNDAyOEY5Ci06MTAwRjIwMDAxMzQ3MjM1QzdEMDRDNzQwOEUyODEzNUNCQkZCQTM3NTZECi06MTAwRjMwMDBDN0VFQzM1QTY1MjJDQkQ3RjU3MTQxRkRGNkUxM0NCQzQzCi06MTAwRjQwMDA5OEZGMUU0MzJDOUM4REI0QzA1QkIxMUFGNURGOTVBQkE2Ci06MTAwRjUwMDBGOTM5RDc4QkJGRkYxRUU1NUJBREEwMEZDMzdDQzZBN0Q5Ci06MTAwRjYwMDA3ODE3MTVBM0RGRDFBMzA5NDhBNzJCQTdGMjc3MDVDQkU0Ci06MTAwRjcwMDBGMTFFNTgwNjlBRkEzQzBFMzdDMzkxQ0IyNEYyNTc4MkUxCi06MTAwRjgwMDA5RDQxRkU0QTk5QTFGRDI3NEU2NDJERTQwRkY0NDgzMTlFCi06MTAwRjkwMDA3MUJEMzJDNTNEMDU2RUUzNzE0RkFDODgyOUZDOUQxNkNECi06MTAwRkEwMDA3M0ZDOEY3RjIyMkJDMkI4ODYyQUIxQjYxOUU3NzU4QUU3Ci06MTAwRkIwMDAyNTM3NjNEQ0E1Q0QxQUNBMjNGRjcwN0Y5MDg1RTg2RkMzCi06MTAwRkMwMDBBOUY4RUI0NjJDNzc4MzVFQ0ZGMDNFOTkxNEZBMThFMzJDCi06MTAwRkQwMDAxQkVFMTQ1MzE4QzU1NTQ1RTA1MzE0RENBRTNFRTc2MEQ0Ci06MTAwRkUwMDA1MjE0OUMyQjU4QUEyOTdGQTJGRkUxNTZCNDEzRjJGRDlDCi06MTAwRkYwMDA3NjE5ODNDNzJBMUQzOUE2RjYyNzcyQ0VEMTc4MDFCQjkwCi06MTAxMDAwMDA0MzQ2RkJBODRBNzY5QkRBOEJBRTdEMUZBMzVERjM3NjQxCi06MTAxMDEwMDA5QTg1RUM4MjZCQjMwNzk5REE1RkZGRTk4OThENzM3NTY2Ci06MTAxMDIwMDA5Q0M1NzVEQ0YwMTFCRkE3MEFGNkQ2RTM2RjQyQkI3NzBCCi06MTAxMDMwMDAxRTYxMENGREM2RDcyOTY1QTY3NjZEQkE3RjI1NTI2NTVGCi06MTAxMDQwMDBBNUY3NjZCRTVGMzRDNjM0NkU1Qjc4MTdDMUE1MzY5M0NDCi06MTAxMDUwMDAwOTc4MUU1QzZCMDE5MjgwN0EzRjUwMkI0Q0Y1NkUxODFDCi06MTAxMDYwMDA3RDlEQTlERkE5REE1NDUzQkU3NkQ1NUY5OTk0Q0VEODc5Ci06MTAxMDcwMDBCODU1RTcxOUJFMUI1ODE2NkEzMUI1MUZCRUFGQ0Q1NDFGCi06MTAxMDgwMDBERkY1MjY5ODQyOTA5NkJEQTcwNDMwMUQ3NTkwREYyM0FBCi06MTAxMDkwMDAxRDBFRkI4MUU3MUI2REUxNzkyQUM2RUI5NEUwMDVEMEJDCi06MTAxMEEwMDA3MjNDMTZGMDU0NjIxOEYyQzhBM0JFRDczMEJENThGQzhCCi06MTAxMEIwMDAzMkQzREY2MzRERDRDRjVGRDc1OTgyMkQ3M0REMThGRjU0Ci06MTAxMEMwMDBEM0ZDRTA0RTgxRTIyMUI3MTU4RjQwMzc3NDczNjUwQTc3Ci06MTAxMEQwMDA1NDFGN0JBRUU1MzU0QzVCM0JDNjM3OEQyREE3NkI0MzZDCi06MTAxMEUwMDAxRDI0N0Y5RDE2M0ExN0E4MTJEQjRCMDVCMjdGOTI4NjBFCi06MTAxMEYwMDBEQkEzQ0U1RDdBN0JBN0YzRUVCMjhBQjc5MDBFRDY2NEZGCi06MTAxMTAwMDA2QkNEM0I5MUVGNEZGQzY4OEU5OERGQjMxRTkzQTU0OEUzCi06MTAxMTEwMDAzNDlFREY1REU2RjkzM0M2OUQxOTcxNTI4OTk1MjJGRjMxCi06MTAxMTIwMDAxRDhBNkI3OTlDNENBMzQ1NEREMDk5MTdFOTA3RjIyNDkxCi06MTAxMTMwMDAyQkM1RjFDRjJERTE3MjYwNjRDN0U2MTY2NzM5REE5REUxCi06MTAxMTQwMDAwRTA1RjczNTMxREQ3Q0NGN0JGRTY4N0U2RkVGOEI2MjVECi06MTAxMTUwMDBERDNGMkZDOTk5Qjc5NDYwRkI2NERFMUU3RDdDMzhERUNECi06MTAxMTYwMDAxNDBCRTk1MzNCQUYzQTQyNzY3QUUyMEQ5NkZFMjA0MUVBCi06MTAxMTcwMDA5OTZCQjQ2QTQxQkI3QkU0QkUzRkQxN0IwNEFENTNGMkIzCi06MTAxMTgwMDBEN0VGODJGQUFERkJGRUM0MDQyOEVGRjM0MEQ5NUUyQjAzCi06MTAxMTkwMDBEMkQ5Njg4QjhDQzdGNUFEQTMyNzlFMkVDNEYyMjlFRjU4Ci06MTAxMUEwMDA1MjRDQTMzMTBGRDczOTgxMjk1MTcxMEY3MzRCMTQxQTQ3Ci06MTAxMUIwMDBERjI1ODVFOTFEMjJENzM5ODlDQTVEQjM1NTRCMUVGNjU3Ci06MTAxMUMwMDBCN0NGNEFCRjVCQjNFMjJBQUVFRkFEMTg5NEI4MTVGMUMyCi06MTAxMUQwMDBENDc1NDBFMzcxNTA0NTRFNjUwMEQxNDMzODlCRjg4Mjg5Ci06MTAxMUUwMDAxNENFQkUyNTk5Qzc1MzI5MTc3OENGRkZGODk2MTFBOUI5Ci06MTAxMUYwMDAyOEI3RDIyQkQ0NTRGNDdCQTY2RjE1QkJFRTk5RTE3Q0IzCi06MTAxMjAwMDAxRkM0QkZGMDIwRERCRjc2RkYzNTUwQkUwNTYzRDU3ODIzCi06MTAxMjEwMDA3OTA4NzgxMDVCNjdEM0NCOTEwNTQxM0U1REQwQ0JGRDVCCi06MTAxMjIwMDA2QjY3NUNFM0E0NzcxNzRERjU4N0U2NzdENUQ3MUNEOUI0Ci06MTAxMjMwMDBEREZERjdEOUJBNzZGRjlBNjI4NEY3MjgwQkM2OTEyNEIwCi06MTAxMjQwMDBGRTVGMkJCRDJCQjA2MjkwOTNGNDg3MTU0MEJGNENFODM2Ci06MTAxMjUwMDA3RDFEQUU3MzQ5MTc4MUE3OEJDQTBGMDk0QUNDM0JCOUQ0Ci06MTAxMjYwMDBBMTEyQ0NFN0U1N0FGMzRBMDA1RkFGMzg5RjQyRjdGRTYwCi06MTAxMjcwMDBDRjM0MjU5MEJDQkJFMkZDMERGNDJFNjdBQjREQ0JCQjRECi06MTAxMjgwMDA4QkZDMzUwOTE0NUYzNkY1QjZDRjM3QUM0MjNBQkVGRTVCCi06MTAxMjkwMDA3ODExQzYyNDE4RUY1NEQ2Q0I3RjI1RkEzN0UyRUFCQTg0Ci06MTAxMkEwMDBFMDg3RjgwQTc4RkVBMEE1M0I4RkZDQzBENTBENEYwRDU2Ci06MTAxMkIwMDBERkUzNUExNzA1NUZGQzZEOTdBOTNBM0M2NzZFNUQzRjA3Ci06MTAxMkMwMDAwM0UxQTMyQzk4OUM4RDc0Nzg5QTM5Mjk4RUVGQjRGQzk1Ci06MTAxMkQwMDBGNDBDOUNFRkU5MkQ1NjBBOUE2REQ1RjlBM0JGNDg3RjBGCi06MTAxMkUwMDA3RjIwMjM5QzhERjdGMDRCREVCMTUwRkNEMTQxQzAwNzJECi06MTAxMkYwMDAwREYwQTEyMEY0NEU1QTA5QjZDQjkwRDIzMDlFRTFGNDA1Ci06MTAxMzAwMDBGOEY3RTk5RDg0RDNGNzMwMEEyNjVFMUFCNjExQkM1QTY1Ci06MTAxMzEwMDAzMzE2NTQ1NkEwN0MzQkEwQTRBMUJGQzE4MDZGOEJERUM2Ci06MTAxMzIwMDBDRkJBMzI2RDYyMDlDOTQ3RkQ3RTg4MzZGNkIyREU5QkMwCi06MTAxMzMwMDBEQzc5RDU1Nzc0MEVCMEM2MEQ3QTdEMkE4NjE4OUY2QjVFCi06MTAxMzQwMDBDNEY3MjQ1N0I4QUQyNDg3NTZBNEZFNzU1MjA2RTI3QjM1Ci06MTAxMzUwMDA4NTIzODJFRjNFRDRBRjNBNDNGMDg1NkVEQ0QxRjdCRUYxCi06MTAxMzYwMDBBNDczMjI1M0EyRTJCNUZBMENFNUZCMkY0OTFBRURCRjk0Ci06MTAxMzcwMDA3NENFNDZFNUI1QUI0RTEzOUYzNkRBOUZEMENGNTNGMTBFCi06MTAxMzgwMDAxRDQ2QkMxRjU0RkJCNTQ4Rjc0NDgxRkYzNTA5QzMzMEU3Ci06MTAxMzkwMDBERDY1NUIxMTdEOEVEM0YyNjUxNzVGMUY2QUMxRjc5RjE0Ci06MTAxM0EwMDBERTRENDRCRkU0NTQ0MTlFOEVGM0ZCNkRFOTk5MTkxODVDCi06MTAxM0IwMDAxRjMwMzU0MTlFOEVGMTA1RkZBQkY0MjM5RUVGMkY0RjdBCi06MTAxM0MwMDBDNzc4ODI3NTVCQUY5RTg5RjEwNjUzNzNFNDlGNUE0MERDCi06MTAxM0QwMDA1RTZEN0I2RUQ2NEMyQTc3Q0I3RkMyRkMxMzI1NzdGMkVECi06MTAxM0UwMDBGMjY0QkVFRjc1MjUzN0NEQzRGODgyMkE5MUQzQzFBOTI2Ci06MTAxM0YwMDBBNkE0QTBGRDAyNzRCMDc4RDUzNjE2RkQ2RTZEOEY3MjZFCi06MTAxNDAwMDBGRDc3QTM1ODM1RTc3MzVGRENERjhGREVFOTY0ODUxRDY4Ci06MTAxNDEwMDAxNDFGQjZCQTQ0RDBFM0QwOENGMzU0MjZFMzc5NkE0NjVECi06MTAxNDIwMDAwMUQzRDBCRjlDRjE3MjAyRkZGREExNDMxRDc5MDhCRjFCCi06MTAxNDMwMDAyMzFCNkZGRjExRkE0Rjk3MEI4Q0RFQ0JBRjY1Q0E0OEE5Ci06MTAxNDQwMDBBNEFCNzk5NkYwQzc5OEZFNjZCOEI3ODlFMzQ3MDdDNTlECi06MTAxNDUwMDBCNzJFNUVCNTgzRTZGNzg5QUFDNzI5Q0I5MTYyQ0YzRjQ1Ci06MTAxNDYwMDBGNTJFMDRGNDFGRjc1RDA4NzM1Q0YxQTcxNjY1MjBGNkVFCi06MTAxNDcwMDAyQkU5NzA5OTI3NzZDQ0IxRjE3OUZEQkMwNENGODdEMkU2Ci06MTAxNDgwMDA3NjUyNUNCMzI0Nzc2NDc5QjlERTU0NDRGNjUyNzYyMkZFCi06MTAxNDkwMDBCRDBCREREOEY3QzNEMjc4QkY3N0QwRDIwMEYyMUQ0ODlDCi06MTAxNEEwMDBFRUM1ODYzNjRBRUI4NzMyNUE0RjFGMjk2QzUzQTE5RkVGCi06MTAxNEIwMDBCQTAzNUNDRThDRUNGOEQ0MTYxREJGRjg4QTJFQTc1MjY2Ci06MTAxNEMwMDBGNERGQjU4QThEQkY3RDQ1OTc0M0M2RjlGNkYyQkVBMTFDCi06MTAxNEQwMDA1Q0Q0MDc4RDdERURERTk3NTBBRUJFMkYwQ0U3OUI5MTVGCi06MTAxNEUwMDBGRURBQjNGOEJFMDlDNkI1REU4M0U3MTcyRjI3ODREMDJFCi06MTAxNEYwMDA0RkREM0I5RTE4RkJDMDY4QkNENjQ0Q0UzNzIyMkYyNTVCCi06MTAxNTAwMDA5MDlFMTRCQjhFM0Y3NkM5NTdCRTlFMjMzQTlFRjRCNjdBCi06MTAxNTEwMDA4RTIzQjg4RUNDN0ZERjNBOEUyMDdGQ0ZFQ0I5MUU4MzJFCi06MTAxNTIwMDBCRThERUYwNjdERjc2Q0NGRTc3RkY5NzhDN0VGQjE1RDMxCi06MTAxNTMwMDAwQ0VGMENGRTUzQzdCQzQ1RkM3RTM0RTczNzA2QkM4RDcwCi06MTAxNTQwMDA3OTFBNzA2QkVEMjVGRTU2NUFGNThBNjkzRDUyQzc0NEVCCi06MTAxNTUwMDAzNDcyOThBRDM0OUZGM0I3OTZFQjE4RUU4N0I0QUE5RDFBCi06MTAxNTYwMDBFQUY1QjYxRTMxRjkwQzlEREIyQzU1OTgwRkY1RENEODQ5Ci06MTAxNTcwMDA3NUQ1QjIxNjZBRDc3MzVEMTFFMkM3Q0IxNUNFOEY3QkQ2Ci06MTAxNTgwMDBDNkVENDc4ODNGRDc4MTNEODZGQUI3QjFFRTJFM0UwREI2Ci06MTAxNTkwMDBFQjQ3RkFCRTBBMTgwRUYxNERCQzNCMjhBMDNERTEzNUUxCi06MTAxNUEwMDBFOUMzMTU3ODQzMjJGQTlDQ0E3MTlCMjk1RjI1REY2NTQwCi06MTAxNUIwMDBBQTdGNkRGNjZBNTNGOTc1Q0FGREE2RjJFRjE3M0Q2NDZFCi06MTAxNUMwMDBDQUZGNDBGRDU5OEMzRUJGMjk0NjlGRkZCNUE5N0M3Q0QwCi06MTAxNUQwMDBCODgzRjRFREI3MUIyNjUzM0NGQTg0QTMxMUQyQkI0MzY2Ci06MTAxNUUwMDAwRDMyRTU3NzM1NjQ1M0JBQkI0MTIxRkFERkRCNTA0NDU1Ci06MTAxNUYwMDBFOUJFMDY5NUJFRkZCRTYxMzRBNTZGMzY2ODk0NzYzNEE5Ci06MTAxNjAwMDA3ODI4OERFNTFCRTUxREUxNzJGNEU3OEZDRTQ4QTFGMzQ0Ci06MTAxNjEwMDBBNzA3ODY3QUE3OTVFMkQxQzI3QjkxNjJDNEJGQjEwN0MyCi06MTAxNjIwMDA1QTVFNDM1MTUwMTBGQ0YyNjNBQzc3NUFCNjUxRkNFMTVDCi06MTAxNjMwMDA5QTlENjNGRTcwM0JFNEQzREYxNDU5ODI3MjIxQkQ0ODRBCi06MTAxNjQwMDA2NDVBMTRGRUI4QTY4NDE5OUU3N0JCMTg3RjBGMkJCNjc4Ci06MTAxNjUwMDBGRUFDNTIxRTQ3NTZDREMyRkNGRDgwNTU3NEUyQ0RBQUE5Ci06MTAxNjYwMDAxREYyMUUyRDgzQzQ0NjA0RURGNDZBRTYyMzNERDRCMjc4Ci06MTAxNjcwMDA4QUJGNEI1M0NENTQ1NjhFRjZBQjk3RjkxRUEwRjgyMzc0Ci06MTAxNjgwMDBGMzdCMDIxRTZERUFEQURGNDJGOTBDQkM2NzBBRUQ3RkRDCi06MTAxNjkwMDBFODZDQTE3QkU0MkZFRTRCQkJBNjBDQkVDRkYyMDhGNEE2Ci06MTAxNkEwMDA3QjFFMDc3NkRDNzc4NzgzRUM1REUzQkVFOTg3OTZDQjBDCi06MTAxNkIwMDBEMTI3NjY5NTcyRkFFQTE0RDQwRTlDQUYzRjk1QkY1N0I2Ci06MTAxNkMwMDAxNERCQUU1NDVGRTdGNTgxMDhFOTFGMTFEMDNGMzBCRTRGCi06MTAxNkQwMDBDQ0EwQ0JBOUYyMjE3REZEOEEyNTY1MENEMkM3NkFCQUMwCi06MTAxNkUwMDBDRjUwREJBMUE4MDE4MEY3OTg0MzlDMkU0NjAwNURFMDE3Ci06MTAxNkYwMDBCRThEM0RDQUU5NjAyNEQwMDFDOTQxREQxRTM0RTgwMDM5Ci06MTAxNzAwMDBFQ0E3RDdCMEZEQTk4MzRDNDUzQkEyNzFDMjdGOEE2ODg0Ci06MTAxNzEwMDA2RjhEMzkxMzBDNjA3QUY1RjlDOENFNkZBMDdDNUMwNzI5Ci06MTAxNzIwMDBGRjdEQTQ4QkQ5OEY4NjVFREFERTUwNEQ3OEI0QTNDMURECi06MTAxNzMwMDA0QjY5QThBMTQ2Qzc0RjFGRTU3NzM3QUNBMkZDREUwNjcwCi06MTAxNzQwMDAzRkE1RkIxQTlBNzRGQzZDQTZGMjM3MUIzNjUwRkVFRENGCi06MTAxNzUwMDA4NkEwOEVBNzVCRTg3QjFGNUQ5RUY5NEI2NTNEMkVBOTk5Ci06MTAxNzYwMDA0MkI3MkI3OEVBRDE1NjVCRTk1RTNGN0M0MjdFNTI4REQwCi06MTAxNzcwMDA3MzQ1RkNBODExODJDOEJGMUJEM0ZDNTZDQzM3MjZFMkE4Ci06MTAxNzgwMDAxRUUwQUNGRDU0RkY2NjI3MEJBMTFDQThDRERFQzZGNUZDCi06MTAxNzkwMDBCMDE4M0NBOUM4Qjg4OUYwNjQ5QTFFQjc3QTIwQURGMTk4Ci06MTAxN0EwMDAwRTFCRTBDMzg5OTY4N0FERTZGNzQ1MkYwRjJGOTYzQUJCCi06MTAxN0IwMDBEN0QwM0RCRTU4QkVCODA0REY5RjEwN0JGMjQzQzY1NDVECi06MTAxN0MwMDBCNUJDOUNERkU3QzJCOEJDNEJFNUY3QjJBNTQzQkYxRjcxCi06MTAxN0QwMDBDNkVGQkJENEU1M0EyOUFFRjZERjI3Njc2NDVEQ0VCMDJECi06MTAxN0UwMDBCOTU4QkZDQkRFNEUzQzM4MDdERkMzRUIwMTk3MTg3QkZGCi06MTAxN0YwMDBGQkNGNTdGMkY2ODZCRDBEN0EyNkY5QTEzQTgzMjJEOTlFCi06MTAxODAwMDA1RjM1RUU2NjE3RDlEQkEzMjMyRURDQ0YyNURCNDU0NkZCCi06MTAxODEwMDBGQUEyQzRDRjc3MTc2MzQ3MEFDNkYxODRGNjhGMjMzOTNCCi06MTAxODIwMDBCMzcyMkZGMkE1QTVGQUY5NkVFQzM5NkQxRDlFRUYwQTgxCi06MTAxODMwMDBGMUUwMURBNjM4RkE2NUZBRjk2RUVDQkFFQkM2MUZBMTA1Ci06MTAxODQwMDBGM0REQkE4QkRDMjNGRDUzQTkzOTFFMjNGNkJFNkU2RjgwCi06MTAxODUwMDBGODgyRjEwM0QxRUZCNzlFM0NERjQwNzZEQUM3QTU3Nzc3Ci06MTAxODYwMDBBRUY3OEZGRkY3RURERkMyMzJDRkU3QTUzQzZFOUFFRTAxCi06MTAxODcwMDBDOTE5RkJEOUE4RkZGRTY2RTM0NDA3REQ1QkU4MUMyMTFDCi06MTAxODgwMDBEMzdCMzc5RDAyN0Y2RkE3RjM2RjRDNURBREUwN0IzQTUyCi06MTAxODkwMDBGMjZFOTQwQjU3QUIzNkUyQUJBM0MzRkM3RDgwRjE3OEJDCi06MTAxOEEwMDAwRjMxQ0VGQjAwNTcxRDBBMDY5MkIxREQ0MTNGRjk5RjczCi06MTAxOEIwMDBDNkJDRTcwREUwM0REQjUxNkY2QTIyOTI1N0Q5NkU4RkFGCi06MTAxOEMwMDA4ODc4NjBDODI3NDM1RTc1RDM5NTdFNEYwRTYzMzAwQUQzCi06MTAxOEQwMDAyRTlERkU5NDA1QTNCMzUxQkZFQkIyNUI5RDkzRTg1REQzCi06MTAxOEUwMDBBMkQzMjE0NkQxQTM4NjFGNkNGODQxNERDNDdCMDgyM0E3Ci06MTAxOEYwMDAwRTc5MDMyODZGMUI3NTNCNzNENDA5QkY5ODAyREZBRkM1Ci06MTAxOTAwMDAzQUUzMjMzQjY4MENEOEE5RjhGQjMxNzg2RjVBOEI4MkY1Ci06MTAxOTEwMDBBRkUxQzczMkY4OUNDMUQ3OEM3QjdBQjJDREJCMDVGRDU1Ci06MTAxOTIwMDBDREVDRDUwNDdBRUYyNTc2REU3OTQzQjk1RjY4NzE3RjE3Ci06MTAxOTMwMDA0RkRFNTBFNDdCRkFCREJDMkFGMUZDQ0U2RkQwMkVFODFFCi06MTAxOTQwMDBFMEYxMDE1NzlDRUY3QzFBRUQ5RTk1MkYyNUQxQkRCNDk3Ci06MTAxOTUwMDA4QkRBMDdGMkU5QjhGQUE5OTFENjVCRjhCOUM5QjA0QUFGCi06MTAxOTYwMDA2NTM4REE5QkE4QjdBMjFENkFEOEE1QjFGNTBCQ0IyNkJFCi06MTAxOTcwMDA5NjBEQ0RDNDc5OERFRkQwMTBCRjY1Q0IwNUYxQkI3RTQwCi06MTAxOTgwMDBENTk3MTdCNDBCOERGMUVCQjc4RjkwRTc0NTlEMUZENDFBCi06MTAxOTkwMDAwRjM1Q0U1N0ZFQjk3N0E3QUY4QTU0OUJFNEQ4Nzc1RDUxCi06MTAxOUEwMDBFRjAzM0EyQzQ3RkM0MjlCMTVFNUQ0MEY3MTA3NjAxREVECi06MTAxOUIwMDAzN0IzMTBFOTJCQjdFOEJGNUI3MTJCQThFMEQxRjc2MjEyCi06MTAxOUMwMDBFNzMzOERGOEMzMUVENUJCMDhGNzY1MjE4QkNDQzE3Q0VFCi06MTAxOUQwMDBCRDEwQTlERDA2MjBGQzYyQzIzOEQ5QURGNDk0RDc5N0JBCi06MTAxOUUwMDAyQjlGMTNGNTdCQUZCMTcwQkY2QjI4RDc2NzBDRkVERjYxCi06MTAxOUYwMDBFQkZFQzRGMEZGQ0UzMjk5RUUzRDc3QkUzNENFODJFN0U3Ci06MTAxQTAwMDAzNjlENkY4OUY0NUVFQTNBMEJFNzJCRkU2MTM2RjUyOUM1Ci06MTAxQTEwMDAxNURGMUY5OTdEOERFMTBGQzBGOEIyNThCRUIyQzVBMjg3Ci06MTAxQTIwMDBGRUUxNzYyOEY3QkY5RENFRTJEMTk1OTE1RThGRkEyODMwCi06MTAxQTMwMDBFMDYxQ0FFQ0IwOTRFRkE0RjdEM0Q3MjFCQ0JBREVFRkQzCi06MTAxQTQwMDA0MEJFNzIwNUMwRkYxMzdFM0VDNzk2MDhFNEY3NkM2QjdDCi06MTAxQTUwMDBFNUY5OTI4NUE5MzRCRjRCREQwRkU4MzlBOTE0RDZCMTU5Ci06MTAxQTYwMDBCMDU1MUE4Njc0M0EzNDJEOTI4RkY0NTUzMkU2ODMzNDg5Ci06MTAxQTcwMDBDMTg5QkZDM0NBRUY0NTAxRjg5QTU4NUFGNzNDREZEMjczCi06MTAxQTgwMDBFMUY5OTdBMURBRTMzOEJGQTE2OTFERUIxRTQ2M0RGMUVDCi06MTAxQTkwMDAyNTBCNDNGRkRGOTEzMTc3MkQ2MjUxRjJGNTZCNzVFMjMzCi06MTAxQUEwMDAxM0M4MkY5RTE3RjRGN0U1QjZGM0RGMjE4MDE2NTlEMTNFCi06MTAxQUIwMDA3RUFBM0Q2QUU1QUZCMTVFMEJFQTU3NDg1NzlFNTdFOEVDCi06MTAxQUMwMDBGRUZENTQ5OUMzOTI1RDkzQTlGRkZFNjMyNDJGREVFRkMwCi06MTAxQUQwMDAwMTE5RTc1MDQzNTEzRTcwM0YyMkJEMDdGNkJDRUU2NzQ3Ci06MTAxQUUwMDBEQzM5RjRDMzk5NkI5MDkxODcyMkY5Mzg4RjIzMDlGQzc0Ci06MTAxQUYwMDBGRUYzRDdBQUY3NTU1QTA3RkE2QjcxMURCRkUwNzZGRUMxCi06MTAxQjAwMDA5MTU0MUZEREZGRjgwMEY4MkM5RUZCRkU3NzgzODNEMkYzCi06MTAxQjEwMDA4RkMwQ0VDMUY0Q0Y2MEU3NjBGQTA5RDgzOTk4N0UwNjRECi06MTAxQjIwMDA3NjBFQTYwQkNGNDFBN0IwOEYxNUFBRjZDNkQwMEJBQzg4Ci06MTAxQjMwMDBBMzc3M0VDMUQ3RDFEOUNCRUYyQUVERDJFMTVGREE3QUQ0Ci06MTAxQjQwMDBFOERFMjRDNDgzMzY5MUUyOUE0QjVFOTI0OENGM0NEOUJBCi06MTAxQjUwMDAzRUNBRjQzQkEyNDA3N0ZCNzExRUE1NkQ3RkZDMDlERUY3Ci06MTAxQjYwMDA4RjJFNkQ5NTY0NDFDMUZCRDRBN0IzMjg2RTMwNjY3RTdECi06MTAxQjcwMDAwODA3M0MyNzg4NkNCN0YxREYzRkQyRTdGQjdDNkFDN0Q4Ci06MTAxQjgwMDAzQTZDRkZGQzRCRjkzODQzM0M3RkUxNzhCOEREMUVGNzM3Ci06MTAxQjkwMDBGNzgxOEQzOEI5OUZFOTcyRkIwNjdCQTQzQ0ZBREMzMEYzCi06MTAxQkEwMDAzNkFFOENGQ0I5NjMxMDlGMEJGRjgwRTNGOEY3ODk2Q0FECi06MTAxQkIwMDAwMEUxQTVEOTRGOTFBQzcyMzk2NEE0MjVEQjZEMTQ1RkE3Ci06MTAxQkMwMDBGQ0ZDRjZGRDM3N0UxRkZBQkI3RUVDNzVBNjc3NzVGRjMxCi06MTAxQkQwMDA4MTlCOUI4OTc4RkRCN0M3MUVDRUEwRkEzMjBFMzU4QjRDCi06MTAxQkUwMDA2REFBOTJBMURFQ0Q4RTlEN0I3MEU5QjdDODlGNTRBNUVBCi06MTAxQkYwMDA0MkZFRDY2QzYxMkZBNjczMTVGN0E0MzQwNUU3MUJBNDJCCi06MTAxQzAwMDA3MUU2MTc1NUVDNDVENDlBQTI0RUI1RjE3NzFDNDUzQ0M4Ci06MTAxQzEwMDA2QkVDRTI4Rjk1OEUyNDdBMENGQUZGMDFDOUNEQjZBQTNGCi06MTAxQzIwMDAwMDgwMDAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMDgyCi06MTAxQzMwMDAwMDBCRUQ3RDdCN0M1NEQ1QjVGMDlBMzlGMzRBMzI5Mzk1Ci06MTAxQzQwMDA0Q0MyMDQxMjIwNzA5MjAwMDYwODMwMjQ5MzkwOTAyMDE5Ci06MTAxQzUwMDAyNzIxRDA4ODk0NEUyMjVBNTRENDkxNUE0NEU1MzEyMkY3Ci06MTAxQzYwMDBBRDY5NEI5QjEzMTIyMDg0QTA0MTkxNjI0NTE4Mjg1QUZDCi06MTAxQzcwMDBFREY1QUJBOTA1MkZGNkFBNzc4MjRBRDU1QTFCMTQ5RjFBCi06MTAxQzgwMDBBNTc2QTRENjZBQUI5MjgyRDg3QTZCQ0I1RDZCRUQ3M0U2Ci06MTAxQzkwMDAzMjczMjY5M0YwMTBCRThGM0ZCRUYwRDM5RDdERjYzRThCCi06MTAxQ0EwMDBGQkIxREU4RjdENzYwMDAwNEVFMjdGMzNERDgzMDAxQ0NBCi06MTAxQ0IwMDBDMDNGNTRGRjRBRDYzMDgwODI2OEZEMTIzOURGRDA3RUEzCi06MTAxQ0MwMDA2OUMxNzg0MzNCNDAwOEEwMDQ2MDhFQjdEOEQwNkY1MkZBCi06MTAxQ0QwMDA0NjRGNUVEMDA5MzBFMUE5Q0ZFRUE4RjRFMDAzMTM4NEFCCi06MTAxQ0UwMDA0NzYzMzk2MUVGQTc2RkRGODJFNURDQTk1N0ZBMjQxOTUyCi06MTAxQ0YwMDBFMDQzRThCODYyQkMwOUUwODNCMkY1NUJFRUE2OTcyRDNECi06MTAxRDAwMDA4QTJEN0IzMEMwOERGNDNCQjY3RjA0RTFENzJCQjA1RENDCi06MTAxRDEwMDA3MkFEM0M3MDFCQkU3NzczOTYwNDkyMTc2MEYxMzZFQjgwCi06MTAxRDIwMDA5MTQ4Q0MzQTk2ODEzRjJEOENGRDZFREU2RDdDMEUxMDc1Ci06MTAxRDMwMDBCMTg1N0QwMEI3MDQ5Q0MxMzYzN0MwOTI0N0IwREQ2MUU0Ci06MTAxRDQwMDA2OEU3NzE5N0VFQjNCOUE5N0QxOTU4QTJFREI5MDAwREY2Ci06MTAxRDUwMDA4NzczMUY3RDM2NjZCQzQ5MTlERDc3REQ4REUzNEQ3QUNCCi06MTAxRDYwMDA3QzlFQkIxOUQ3Rjc2OEY5RTc0MzY1REM2N0ExRDdFNTI3Ci06MTAxRDcwMDA3OTNGMDUzQjRDODEyOTI3MjUyQzI1QTcxOUIwREY4OTAwCi06MTAxRDgwMDBFN0E1OTA4NEVCOUEyOTdEOTExQTI5QzRFNzM1OTkwMDNCCi06MTAxRDkwMDBEOUY4OUU0OUZFNkQwNUI2QUIyRjQ4RjAwMDhFRjNGN0RCCi06MTAxREEwMDA0NkY5RDE2N0FEMzQzRTVDRTdDNzdFMjdFOTY3M0FDRDk3Ci06MTAxREIwMDBCQTlBRTFBQjk3NkYzNUUyQUYxNzAxRkNBRUQxQzFFNTNFCi06MTAxREMwMDBFRjFCREQ1Q0ZFQTEzMThCQ0I3NzFCNjUyRUZGRDg1ODU2Ci06MTAxREQwMDBDMEU1REM1NzIwRDA4OUUzRkRFOTFGOTMwMTA2RDEzODI3Ci06MTAxREUwMDAyQTQwNjZCNDlDNjRGMzlBODdFMjNBN0E3RTIzODU3NjI5Ci06MTAxREYwMDBFMTdFOEY1NzRFNDkwMzVBRTcxNzM4N0ZBOTg2MDcyNDlCCi06MTAxRTAwMDA4MTNBREMwMzk0RTM3RjM3RUM3QzJFREJDN0NGNTUxNzk4Ci06MTAxRTEwMDA0RUI1RUMxRjEyMjgzOEVFMEQ1RTkzNThFNzkyQUVFN0YwCi06MTAxRTIwMDBCMjNERDE3NjU4RjlBRUExM0ZBQzMyMUQzMEQ0NUI3MkQxCi06MTAxRTMwMDA4REY1RjZBQTAzQjFFRkVCNzA4ODJGNkZEQzc2QUIyRDMyCi06MTAxRTQwMDBFMEMyNzJCMzQ5MDkzOUZCQjZFQkVCOTlCOTNGNDkzMUFFCi06MTAxRTUwMDBFMTc4OTYyN0VEMjEzQkVFNkY5OTVCMDEwNUZCNUIwMDc2Ci06MTAxRTYwMDA5NENFQzJCRUVGMDEzNEYxN0I1NzRBMTBFQzRDMzBFRUY5Ci06MTAxRTcwMDA3MjFBMTdFMTM2Njc3RjEyNDg2NzMxRUU1QjQ4MUJCNDcwCi06MTAxRTgwMDAxRUY1M0ZFREExMDdGMEJEQjdEMjE0RjBDN0NDRjM1RDRFCi06MTAxRTkwMDA2REREMUZBNzc3N0NGRjMzRUNGN0YxMTM0MDRGQjAwRUQ5Ci06MTAxRUEwMDBGMzY5M0QxM0Y3RkNEOTZDQzY3MjUyQjJBMDkzODlFRTY4Ci06MTAxRUIwMDA4ODM5MDNDQkEzOEJGRkI5RTU3NTBGOTNBOURGNzQzMTg0Ci06MTAxRUMwMDBCNkU3RjVCQ0VFNDA5NEFGRUU5Q0I5RDU4MTc4N0JEQkVDCi06MTAxRUQwMDA2QzA2MTgwQTAyRjE2NUQ4MUZDN0EwRkEwNkVGQ0NGOTA0Ci06MTAxRUUwMDAyREY4RkJBNUZCOTNDMkU2QjNEOENGMDZFNDQ1MkEyNzFECi06MTAxRUYwMDA1NTBCN0VCRjk2RTg0NkNDQTMwMEYyQzNGMjM1QTBDRkM3Ci06MTAxRjAwMDBBQjkwN0NBMEZENTNGRDk5Q0VEQTM3MzdEMzFBQTA2NzhBCi06MTAxRjEwMDAwQkM5ODc4RjAwQzI2REJDN0UyNTM1OTZGRjk3M0ZGNUI0Ci06MTAxRjIwMDAyREU2Q0YyNUQ5QzhGNzQ4RUFCMDRERjBBRjAzRkY5REE1Ci06MTAxRjMwMDBDQzIzN0UwRENENzJFMjdBNkYwQTIzRkZDM0Y5RTdGRjRGCi06MTAxRjQwMDA4N0JEQ0UyODlGNUY5NDkwQ0Y1RkI5MTRFQkNCOUY5MDU1Ci06MTAxRjUwMDBCQzc2NkMzRUY2RTQ2OEMxNEYxQURGRUI3Q0RFNEI0RjdCCi06MTAxRjYwMDA1QjI1RTY0QkJERkVDOTkzNTI2RDI4MDFCQzM3Njk3NEYxCi06MTAxRjcwMDA5MUFGRjRENEQzN0MyQjlFQjI0MDFCQUU2RkM1QjQ4QjEzCi06MTAxRjgwMDA4NkM0OEVERjg3NUU1QjI1OTA2M0M2N0ZGNDY5RkI2MjQzCi06MTAxRjkwMDBFMjE3MTk3QTA2RDcyMUZGNEM3QUVBNDQ0NjU1QTEyODYwCi06MTAxRkEwMDA5QjY4MUNFOEQwRTQ0RENGMDhGRjA0OTRENzI2RkZFRkQwCi06MTAxRkIwMDBCRjg3RjMwMUUyRjEwMTg0NEY3NUQ2RkMxQzlBQkZERUE2Ci06MTAxRkMwMDAwOTRBREI2NDA2Q0IzQzA3Q0E4OUNCMDQ4OEUwQjJCMjdECi06MTAxRkQwMDBBQjczMDBFMUI5MEREMTI1MjFERENENTNFQTVFQkIxQTBCCi06MTAxRkUwMDBGMTc4QjkzOUYwNTU5MkYzNkY3OUYzNzlGQzJCNUMyQkNBCi06MTAxRkYwMDBBRDYwNjY3MkNEMzFFMTc4RjNFN0Q5OEI2OTNGNzM5QkIxCi06MTAyMDAwMDAwNTVEQkY5NkRFRjMxMTNEN0Y2RDVBOEFBOTE5REY3QjBFCi06MTAyMDEwMDBDRDA0MkQ5MDExRERDNzZCNTY3RjRFOTBFOUE3QzZGRDBDCi06MTAyMDIwMDAzRUUyQzdBNDhDOTM0RUE2RjQyRjJGODg5MkRGRDdGMUZGCi06MTAyMDMwMDAyODQ1RTVERjRDQzlBOUQyM0NDN0RDNjZBNjdCNEI3NkI4Ci06MTAyMDQwMDBCQjhERDY3NTEzODQwRTI4MzhFRjMyNkZEODQ2RjJFRjY5Ci06MTAyMDUwMDAxNjcwNUJBOEM0QTJBNzk3M0U4OEZFMkFGRkQ5NzUxMjA2Ci06MTAyMDYwMDBERjVGRDYyRDg1NENEOEJGQjNCMTEzMkM4OERGQzcxQURDCi06MTAyMDcwMDBGNzcxMzlGMjhCOTEyREMzMTAxRTJCMjdEQkJDNkRBNDk5Ci06MTAyMDgwMDBCNzM0RkEzMkFCMjYzODk5NDA1RkY1QTU0RjRCQjQxREYzCi06MTAyMDkwMDBENzVERTU3MDg2QTU1NDdBNkNGRDI4NzYxRDNGQzg1MTQyCi06MTAyMEEwMDBGRUU5NDVCOEFBRUIyQUQzREY0NzE1Q0RCNDMwMzJCQUUyCi06MTAyMEIwMDBDRjQ5MzYwMDI3QzlGOTA3NTI1OENFN0ZGODc0QTk5OTNECi06MTAyMEMwMDBGMEY0RTE4QkQ2OTA4OUVBREIyRjdBRTMzNjFGRDc4MUQzCi06MTAyMEQwMDBFNENEODcxOTVFQjM4RERBMzNGMjQyMkFCNkRGNjgwNkEzCi06MTAyMEUwMDA5NUU0MzJFQzEyNzJFQjk5NjlCN0JGNDM3MjZDRTUwMzY5Ci06MTAyMEYwMDAyRTkzREQyNEU4NTg0NjEzNDBGQUM5QzY3N0VFQzU3MTIxCi06MTAyMTAwMDA2RTQyNjZCNTdCQTM3QTYzQzlGNDlGNkM3OTA0RTk2MDdCCi06MTAyMTEwMDA4OUI5RTM4RTRBN0M3NjAyQzIxM0REMDhDRkJGOUEzQUIyCi06MTAyMTIwMDBDNzkwREVGRUYzRkRGNkIwOTlERUZCRjFEODVEMTI4RUFFCi06MTAyMTMwMDBGRjVDNkEyMDdCMzJFOUE5MkM2NTQ4MkUzRTVGRkM0QTkxCi06MTAyMTQwMDAyNkI0RTFGQjMzN0VGMkFGOTc0OTZGREVGNDY4MjZGM0U1Ci06MTAyMTUwMDA5NzRFRjczMzg5MEY3MTNENDc5MTBGNjkzREM3OUVDQzZDCi06MTAyMTYwMDA2N0JFOEJFMjVGQzA2MTI5Q0EwMzQwMzhBRURGQkRDOURDCi06MTAyMTcwMDA0RkY4QkMyMTU5NjY3QUI0NDA1MDE5NDZGOERFNzczREQ1Ci06MTAyMTgwMDAwNDkwQUU4QTI0OTM0Mjc0REVCMzFFRTE2NUVBNEI0RjlECi06MTAyMTkwMDBERUM5NjY3RTZGODkxOUY1MkJEMTYxNDAyRTI2NzgxQzI5Ci06MTAyMUEwMDAzNUM5NDUxQTVGMDBBREU3QzhEMzYzNzdCNUUxRkJCNTI0Ci06MTAyMUIwMDA1QUZGMjhERDFENUVGNjVGNDQ3N0RCRUM1RTNCMkVFMUM3Ci06MTAyMUMwMDBBMzI0QTNERUQ3Q0JDQUM5RTlEQ0ZGNDZDN0E3NjAyOTkxCi06MTAyMUQwMDA4RTNFNUZENkYwQjlCMTVFMDgwQUM5OERBMjY2QjlGODI1Ci06MTAyMUUwMDA1NjJDNkZEM0UwM0U2M0FDN0YzQUMxRjFFNkNFNEQ4RjAzCi06MTAyMUYwMDBCRjI0RDNCQ0RCQkVGRDM2Q0RGQkJDOTNFNzg1OTcwNDgzCi06MTAyMjAwMDBGQzhFOUE4NDdFRTlENUFGOEVCRkYxRjgwMDNCNzk3RUQzCi06MTAyMjEwMDBGREY5OUZFRjdGNjM2MjAwQzdGRkYzREVGMTYzMDBFOTIyCi06MTAyMjIwMDA2RUExRDRGREZFN0Q4OEFGNEY1Q0RERUY3QzBGQ0JDNzg4Ci06MTAyMjMwMDA5RTdGNjUzMEMxMkY3RUJENEIxQThFODMyNTQ2MEU3RDU1Ci06MTAyMjQwMDA2NDMyRjE3RTk3RDAzRUYwRjk3RjE0RkIyRjlGNUNDMjgxCi06MTAyMjUwMDA2Q0FBMTBEQzE2QjY0REQ4NDVGMjYwQTY1NDk4NDY3NkE2Ci06MTAyMjYwMDBEM0QxMEY4REVCOEI1RkE3M0VCRUJFM0U3RDdDQkRERjI1Ci06MTAyMjcwMDA0MjgyM0ZFRTYzRjIyNDM3OTcxRkRCQkEzRjIxRkM3RTk4Ci06MTAyMjgwMDBGQ0Y4NzgxM0IyNjJGNDc5NDZGN0M0RjRDMjI4OUVGQ0Q1Ci06MTAyMjkwMDA0QTkzOTVGQTVENDFBMjFFNTEzMURGMjFGMDNBN0ZCMTk4Ci06MTAyMkEwMDAyOUQ0OUNDQkZEQjhGRDZBN0M0RTc4QUZGMjM0NzM3REE3Ci06MTAyMkIwMDA5RTEzRjUxOUY2NUY5MkY1NUZCQzJFMTI3NDBFRDQ2QjY3Ci06MTAyMkMwMDA5NzgzRkU1M0I3RTYxN0Q4RUZDRDE1QTkyQzE3RTZERjk1Ci06MTAyMkQwMDBEODYxMjUzQkI3NTc5RUE5NkY5QjRGOEUzRjczNzk4Njc4Ci06MTAyMkUwMDBEMDkzREQ4MzgxNzk5OEY0MjdFMEU2MkM1ODlGQTZENTFBCi06MTAyMkYwMDA0RDY1QkY2QkZFMDVDOUU3REI1MkJEMTI5QThDQjA1ODI1Ci06MTAyMzAwMDA4NjMwRjFGNTMxMDgxMUJDRDc5QTgyNkNFRjM5NDgwRjRECi06MTAyMzEwMDA2MEQ5NjZGMjY2NTlCMDk0Q0MzRDgzODBFNzA5MDlCQjY5Ci06MTAyMzIwMDAwQTAyMTZBQUZGQ0ExNDY5MDY3QzZGOERBNzNBOEJFOEM5Ci06MTAyMzMwMDBGRjRENzBGQUM5MkVCQTNDN0RFRDA0OTJBM0Q1RUUzOTVCCi06MTAyMzQwMDBGM0U5NzlCRDlBRUE2RUMzRkRCNjU4RTUwRDg1NjRGRkUxCi06MTAyMzUwMDA1QzJFNzlDOUVFRDVFMUEyRUI4RkY5MTZBRjk1RTAzQjgzCi06MTAyMzYwMDAzODI4N0I1NUE0REZFMjk3MTQ4Nzg5RTFFRjUwNjlEQ0I4Ci06MTAyMzcwMDAzNzJDQzE0QzVBRDc1QkNFQ0QxMzRDNjZCMkQzNDJBRThDCi06MTAyMzgwMDAwOUI4RDlCNzVGRjk2OUM5NkZGMEZEREY4MTMyOERFQzBCCi06MTAyMzkwMDA4MTc5QkY3MkIwMUNCRjFFNjRFNkY3NkY4MEMyNzJGQzA5Ci06MTAyM0EwMDA5QjEwRTBGQThEMTBCMTdFOEFFRkZEQTFGQzdGMUVEODU0Ci06MTAyM0IwMDAwRkQxN0RGRDYxRUE2NzdCQzlBRTlGMkY3NTY2RTY2MjJFCi06MTAyM0MwMDBCQjVBMEQwNUE0Njc3RUU5RjhDMThFMDhBRTQzNjlCNjE1Ci06MTAyM0QwMDA0MDEyREE1N0JGMjQzQTI1RkJGREIwMkJGNDAwRjZCQkMwCi06MTAyM0UwMDAzRDc5N0I2QTE3RDYyMzI2NjE3RkE5RDVDMTQ3QTlCRjRFCi06MTAyM0YwMDA2QTA2N0YzMzk2RDlDOTgxNUYxMDFGRkUzMDQ1OENEM0EyCi06MTAyNDAwMDA2MDcxQjg0OTNFOTI4MTQ1RTNCQ0ZGOEU4QkU5OURGNDMzCi06MTAyNDEwMDBFRUY1NThBRjQwNkMxMUJDOEU2NjBBN0E1M0ZGMDYyQzVECi06MTAyNDIwMDA3NzhGNUFCREREMEE4RDdCNDJGNjNFNDBBRkNFMzBGMzRBCi06MTAyNDMwMDBGQjcwNTJFNjc1NTRDNEU5MTdERjc4MzNCRjBGRkY5NDgxCi06MTAyNDQwMDBGOUZENjkzRDE2ODM3RUYxNEQzMjA3MUZDM0ZENERGRjM3Ci06MTAyNDUwMDA4NzY1NDBCRDczNzk5MTkwNUZCRTQxRTY2MDIyN0JGMDU1Ci06MTAyNDYwMDAyRjFBN0YyMTg0MjQ1QTRGRjMzRTUzQTg4RDg5NTBEOEM4Ci06MTAyNDcwMDAwNzE1M0EzRDQyNjQyREQxNUIyNTQwOTBFODFFRjZBMTM4Ci06MTAyNDgwMDAxRUQzRTdDOUUzRkQ3RkEyRkE4ODBFQjE5REVEQzFDRTUwCi06MTAyNDkwMDA2NzQ4NEVEQTgzODI0RkIwM0U4M0Y2RTMwODgyOTdFQ0JBCi06MTAyNEEwMDAzNTU0Qzg2MEMxN0ExMkJFMjhFNEFFMUJDODhFNkRBQjJECi06MTAyNEIwMDA4MjRFQUE0RjgzODg0NEY4OUU0RTkwNDZGQzU3ODFDQ0FBCi06MTAyNEMwMDA3NDNCMDMxNEFFRUI3NEZDMTU1MEI5QkMwNDQyNUM1RTYzCi06MTAyNEQwMDAwQTYxQTFFRjQxNkVGOTM5Q0VGRkQ1MEY0MEVDNjc1QzgwCi06MTAyNEUwMDA5OEU5MUQxRDE5MzdEQjgxOTdEQzY4MjZCQkMzRjdGNTFBCi06MTAyNEYwMDBDNEZFNDI2QTkxMEUxNzQ0ODhFN0Y0RTEzMjBCMDI1OTk4Ci06MTAyNTAwMDA2MjdFMDEwRjNCM0RGNzQ1RTFFMTg4ODM0NzEyQzFDMzdECi06MTAyNTEwMDAxQjg1MDdDRTIxRTBEMTA3QkUwMjNFRDMxNDg0MEZDQTJCCi06MTAyNTIwMDBBNzhCQTE0N0EyNzkxNENEQkVBOTA2MkY5NzM1RTBFNzY2Ci06MTAyNTMwMDA3MjAwQjgzQ0RCRTRFOTBCOTdCMjQ4QzAxMjI4NEMwMEFCCi06MTAyNTQwMDA5RjE5ODlFOTY2ODg0NjU3QkYyRTAyMkU3NUY5MzNCQjVECi06MTAyNTUwMDA0ODY2QjhFOTcyMDhGOTMzOEJFQ0QxNzhGOUE0M0ZGN0YzCi06MTAyNTYwMDBBNTU0MUY5NzkxMUU3QzQ1RTk1NzVBNTA5RkY5OEFBQjk1Ci06MTAyNTcwMDA2RkNCQzdGQThDQzc2NDUxQUZBOEZFNDUxRUQ2NjcxNjRECi06MTAyNTgwMDBFNTg5RkFBNEVBNjIyQkMyQUJDOTk0N0Y2NTBEQ0E5OUFBCi06MTAyNTkwMDBGQzgwNjkwQkYxRTVDQTI2QjRBQjcxNUY4MUE0M0I4Mjc0Ci06MTAyNUEwMDA0NEM3QTYwQzcwOUJCMDdGQTBBOUM0NUI4NEY1MDBEMjgxCi06MTAyNUIwMDAyNTIwRENFQzUyNkUxM0MxRDlGRTNERjAzNkUzMkE1MkUxCi06MTAyNUMwMDBEMzAyMTM4QjcwRkQ4NTBCQkFENzBBN0M1NjBGOTk4RkY3Ci06MTAyNUQwMDBGRDNGRUFCNkIyRERCMkNFMTYwQzEyOUU5MEREREQ0REE3Ci06MTAyNUUwMDBFNUQxRkQ3REY0RDhGNzE2RDNGM0M3ODY4MjlCRjQwQkIzCi06MTAyNUYwMDA3OEU0NjJCRkFCRUY3QUNDMEVFMEZBNTI5NDFCMTRGRjgyCi06MTAyNjAwMDBDMEY5MkE2OUJFMDBBQTI3OTlENkY1NzMyOTQ0RjA1RjVDCi06MTAyNjEwMDBEOTM0OTNGRDgxREYxNkY4QTcxN0M1OEU4RkZCOTAyNjVFCi06MTAyNjIwMDBEM0JDNDJDRjgxMjdCNzk4RTAzNjc5QUM3RjM2OEQ3MzIzCi06MTAyNjMwMDBENDg1RjIzNThEREEwNTFFRkEyQjU3MTYyOUI1MzQ2RTdFCi06MTAyNjQwMDBGQzczNzNDQTE3RDcyRUMzNzk5NjIzOEQ5MDlDQkVBNkIwCi06MTAyNjUwMDAyOEYwMzUxQTc3QjkzOTMyQTIxODlGQUQ0RTc5QzdDNjFFCi06MTAyNjYwMDA3NEExMjA3RDkyN0MyMDdFQTVGRDJFNDY3QTI0QkFERUMwCi06MTAyNjcwMDAyRkY4MTUzOUMwREQ2QkJGMjI3RTNERkU5RTZCMTdGOTJBCi06MTAyNjgwMDA4NDg4OTNGMDdGQTVGMzgzQ0ZBMDU5NERFMzVGQ0RFMzFBCi06MTAyNjkwMDA0QjNEOEI4ODJFM0Y0OTdGRDVGNjI3RTZDQkUxODJFRTc2Ci06MTAyNkEwMDAzNEI5QjVGQ0U5Q0Y5OTdGOUUzMjQzNTBEMkZDNjM4OEEwCi06MTAyNkIwMDBFMUJCRTU0RjI3NTlDODNGNUNGRTE3MDhBNUUwRkIxNUI1Ci06MTAyNkMwMDA0RjNFREM0Q0ZFNEUzOUZBRkZFNDI3MkZEREYzNzNFNjc0Ci06MTAyNkQwMDBCNzI3NDk1RjIyRTg5NkZGRjc1M0NGREM0NzdDN0E2OTNBCi06MTAyNkUwMDAxMkM3QTFBNkJEN0EzODlGRUNBMEU5ODcyM0NEODgzNjEyCi06MTAyNkYwMDAzOEZBRDQxQkMzMDRGREVCN0VDOURGNEQ2N0EzQzc2NzVGCi06MTAyNzAwMDA0QUFCRUUyMDdDQUY0MEZDREI3MUJFMTVBNkEwQTg1QkY3Ci06MTAyNzEwMDAxRDZFOTVFNTlFRjA5MzE3NkJGQkY4MThCQUI3MkM2MDA5Ci06MTAyNzIwMDBCOUEyMUUyOEE3RkQ2NDQ5QzBGMjMxMjRGQzA5MTlGRjkzCi06MTAyNzMwMDAxMUZGREY3MjM4QjQ5NkQ2MDlEMjE3MzY5MjM3MjdEMEY4Ci06MTAyNzQwMDAyRkE2N0REREYyNTBCQ0RGRDE3M0EwOUNGQzZFRjI4QjE2Ci06MTAyNzUwMDA3MTlGNEIzQjhERURDQjYzRjU0MzAyM0ZGOThFMjIyREVDCi06MTAyNzYwMDAxRTk2MDMzOUI0QUY1RkEyM0ZGNEM3RDEzNEVGODIzNDcxCi06MTAyNzcwMDBCMjBGQTc1MjVDMjE4MUJDRDRGREUzRERDOUQ1NUI4QUQxCi06MTAyNzgwMDBEODVFRUU5NDg4MUYyQTJDODlGQjVGNTdBOEM1NzkzNDQwCi06MTAyNzkwMDBGQjdGQzVGRDEyRkI3MTJCRUUxRjM0OEVGRDY0OEQ1RjM4Ci06MTAyN0EwMDAyMUVDNjVGRTdEOTRGNDBBRDE5OUZDMDIxQTE5NjQzRjZDCi06MTAyN0IwMDA4QTM1QzNCNjQxNEM3MzM3QjU5QUQ4OEZCMTRCQjc3QUM3Ci06MTAyN0MwMDA0OUVGNEY3QTcwQzhDRERGNjVCQTQ5NzU0MzE2RDVBNzcyCi06MTAyN0QwMDBDQzdGQzhDM0Y2NTU5MDg0MzVGQTU1NkM2NzNFOUFERUI3Ci06MTAyN0UwMDA5MzQ3RjMzRjlBMkU4MzhBRjMzNTI3RjVFNDkxOUM1NTVFCi06MTAyN0YwMDA5RjcyNzg0OUVGQzZBRkZCNDU0REVFRTU4NzI3NkY4RDk5Ci06MTAyODAwMDA3ODA0OUU4OUNGNzM5RjJGREY0QTc4M0U4NjdDNEVGOEVFCi06MTAyODEwMDA1QkUxMUEzMzA0OUM2NDM3NUM5QzE1QzFCMjU5QjNEMzk1Ci06MTAyODIwMDA3MzFGMUE5NzU2OEY3MEYxRDE3QTYzRUNFQUFFODM1NzEzCi06MTAyODMwMDBBNDkwQkRCQ0Q3RTI0RjcxNjNCRjYzODdGMjBDN0U1MDlBCi06MTAyODQwMDA3QzU5MTI0NkU0MTQwRkQwRkVDNjlDRkM0MDAyQjhFQjQzCi06MTAyODUwMDBBNTZGQUI4NUUxQTVEM0VEMkYxQjE1RjhBMzk1RjA1MTFFCi06MTAyODYwMDAyOUY2QTFEQURENzYxRkQxNUY2ODA2Rjk5MzJCQkUwOTQwCi06MTAyODcwMDBFRTM2RUNCREUyODUxRjM3M0JBOEJFMUU5ODlBOEZEMTdECi06MTAyODgwMDBGRkE4RkYwN0U2MTBEOUUzM0Y0Qzk5Nzg2NzI1RDZGN0Y0Ci06MTAyODkwMDA3QzY4MTE3RThBQUFCQzUyMTg2M0M3REFCM0NDMjAxQkFECi06MTAyOEEwMDBFOEI1NUI1QTRBRjI5OEU4MUVFOTM1NDk0RTA2Mzk4NjgyCi06MTAyOEIwMDAxRTUzMEEzMjBDNzU5Nzc3QThFMUZEQjRCMjNDNDM3QkY2Ci06MTAyOEMwMDBCQTMyQ0VEMDVFMEEwRDkxMDBBRUE3MjQ0QjcyODc3MDRCCi06MTAyOEQwMDBDNTgzNkE4QjBDRUQ3NkE0RUIzMEFERjM1MzYxNDc5NTVECi06MTAyOEUwMDBFMTNGQTE2RjgzNkMwRjU1NDQwMDdFODQ3NDMwRjUyMzYzCi06MTAyOEYwMDBBMzlENTUxNkU5NjA3RjMzRTk5MEM1MTAwN0IwOUYyMjZDCi06MTAyOTAwMDAwRUY1M0YzQTdGMEQ4N0UxQzQ1RjQ4RkY1RTkyNjNDN0QzCi06MTAyOTEwMDAwRTg5Qjg5M0FDQzE3MzQ1OEVEMENGMkI1RTkwRDgwRTg0Ci06MTAyOTIwMDA1Q0YxQTE5OUY1QzQzMUYwRjZFMjg3RTRBM0NFNzdGMTJBCi06MTAyOTMwMDA3MENGRjQxQkUxM0M2NEJFMTFBRUQ5MDEyMzVDODcyRDNFCi06MTAyOTQwMDAzNkMyMzUyNzY4ODRFQkM4MDYyMzVDNzM1NTIzMUNGMzE1Ci06MTAyOTUwMDA1QkE3MUFGQThGRUVBODM2RDQyRkRBM0FEQkQwN0Y2QzU5Ci06MTAyOTYwMDBBOERFNTAxRkZGRDA1NTg2RkUxMzNBMTcxQURBMjdFRDVFCi06MTAyOTcwMDBCQkQ5RDAxRTRGNTc5M0MzMkIwQ0VERjZENEQ3OTlBRUNECi06MTAyOTgwMDAwRTIwNUQ5OTUwMUYxNDNGRkZERDM4QkFCMDMwREM0QjhDCi06MTAyOTkwMDA4NjNCQkRBMTE4RkNBQkY4OEZGMDVGQTFFNTI1QTY4MEIyCi06MTAyOUEwMDBEQTRDRkM3OEFFRjAzRkI1MThGMTNGM0U4QTdGNURBRTYxCi06MTAyOUIwMDBGNkM3QTczQTdFMDc2OUZBMUFGOTMzNDI3ODNGNTY5NjY2Ci06MTAyOUMwMDBDMkY0RjJGMkYzQzcwRTI5NDBGODRGODUyMkRDRUZEQ0E3Ci06MTAyOUQwMDBFOTIyOEUyMkM5QzE1NkEyOTM2RTcwNzU5MEZEQjlDRUMwCi06MTAyOUUwMDAxMjY0RkY0NTQ1QjNGMDAxNTJDQTcxRkVFNkQ3Q0FEMDYyCi06MTAyOUYwMDBERjhDNTk2NzlEOTIwNDk2OThGRDRFMEU3NzFBRUFDNUIyCi06MTAyQTAwMDBDRkVGMzNGNDJGRTkwRTFCRUE5MzBGODE0NEZBQUFFOEMzCi06MTAyQTEwMDA0REVGMzM1NDk2QkNBNzcwRjhBQkY0ODNFMDMzNTQ5NjczCi06MTAyQTIwMDA3RjFBQkM5REY0NkZCQzlGN0I5OURBMjRBNUUxQTJBNjE2Ci06MTAyQTMwMDBGRUEzRjMxOTM0NkJEMDNGMUJBMTkyREYxQkI5MzVENTMwCi06MTAyQTQwMDA2QjFBOEFGMDQ4N0VBNzk5RkM2RjQwM0JEQThBQ0EwODY1Ci06MTAyQTUwMDBCQTdGNDNDODg0MDUwRUYxRkVERjkzMkU1RTQzRkQ0RDIxCi06MTAyQTYwMDBFODlGMTNERTExMkUwNTY0RUYzNTQwQjI5N0UwNDI3NjAxCi06MTAyQTcwMDAwQkY5NjEzMDVCRDhGMzZCNEQyQURCQTM0OTY4OEY5MjY5Ci06MTAyQTgwMDAzREQyNUNFNTY3N0I3OTE2MDQ4N0QzRjMyQjQwNTk0MzJECi06MTAyQTkwMDA3QzI3OTlEMTdFQzVFN0M3MkYwQUFDMkMyRTExOEIyNTM4Ci06MTAyQUEwMDBGQUI5RkRCOENDRkVGNzc0RjJBNzE5OTgwQTkwREUzQjhDCi06MTAyQUIwMDA0QUJGRDNGQTIwN0NBNTQyNzExMEQyNjVCOEZFQ0Q2RDE1Ci06MTAyQUMwMDA0RjVFQTk1MkRDQzkwM0VFMDhBRTNCMjA0MDA2RURDNUJGCi06MTAyQUQwMDA4MTFGMTRBMzFDM0U2MjcyQUYyREM2Nzc1RjlFRkFENzhBCi06MTAyQUUwMDAxMTY0OEYzNDE1MEJCQkNGMkUyMUE0OTAwNjg2MkM1MDc5Ci06MTAyQUYwMDA4MDlFRkYyMDQ3NTk1RDlDMTk4REIzRjQ0NzNGN0EzQzc3Ci06MTAyQjAwMDA1MzhGNkZFRTY5MEM3MzY5NzE3QjI1QTJCQkY4Qjg2M0I0Ci06MTAyQjEwMDBDNEVDQUU5OTRDRkE2Rjg1ODlGRENFQkZEMkUyQ0E3OTdBCi06MTAyQjIwMDA5RTU0OTZGMzBFRThCNkE3RjM5MkQ5RkZCRjQ2QzM5QjE3Ci06MTAyQjMwMDBEOUQxQkRFNjdCRjhERUI1NDE2MTZGMkQzNDc5RDk1RjFGCi06MTAyQjQwMDBCRjI1RUIyMzhFQTNEODI1MTNGOEM4MUY0QTJCREMyNUZECi06MTAyQjUwMDBFMjJGN0FCQzY0OTg3NDI2NzZENkE5RjY3QjRCRDY4NzhBCi06MTAyQjYwMDA4Njc4MTUzQzMyMjg2MTdDM0QzQUJFQ0FGMDhERDlFN0EzCi06MTAyQjcwMDBGNkFEMUVBMUQ3QzhDRjNGQjIzRUE3MUE1MjEzQ0RGMzcwCi06MTAyQjgwMDAwOUM3QUZBRTA5MUUzNEYwQzU3NTBENkYxOUY4RTA3QUFDCi06MTAyQjkwMDBGNTVENDM3QkM0RDM2M0E1Nzg2NUU0RjFFQzU5MTQ1RjFDCi06MTAyQkEwMDBGRjc4QUZCRDk0RjA4MEY4N0ZCQTM4MjY1RTE3NTkzRkEyCi06MTAyQkIwMDBCRTA2MjY5RUNFN0VGRkNBRUIzOERDRDhDRDc4RDVGNzkwCi06MTAyQkMwMDBGQjRFRTM5QjVDOEYzNDQ2Qjg4Q0RGQUYxRTFGRDE0QkFFCi06MTAyQkQwMDAxNDg3QUQ2NENGREMyRUExQkMyMDdGOTdFNDg1Mjc0NjA3Ci06MTAyQkUwMDA1RTAwMTQ5MEZEN0ZCQjM0Q0U0QkY0NkVEQjFGRkMwOUZFCi06MTAyQkYwMDBCNUY3MzREOUREQkI3QzFDMUZFMUI4NDkwM0QyMDVEOTM4Ci06MTAyQzAwMDAwREUwMTRFRjJGQjQzOUQ4MEVCRERFMjdGQ0U5QzM1NTEzCi06MTAyQzEwMDA5RjVENEJGNjZCMkVBNDdBNTEwNjEyN0ZGQzlFRTIyNjM2Ci06MTAyQzIwMDAwQjRDNjlBQ0ZGRDc2NjFGRTBGQTdCRUI0MUU0OEQxNkQ1Ci06MTAyQzMwMDA4N0VGMjc3Rjc1Nzk2QUFBQjA4QjE1RUM4RkY1QTMxOUZBCi06MTAyQzQwMDA2NkFFRkZGQUEyQzBGQkNDOEY4NTYxQ0U2RjJDMUYyMjJGCi06MTAyQzUwMDBFMjc5RTA4OThDMjAzRUJDNERGNjdGNThDQzdFQkMzQkFGCi06MTAyQzYwMDA0MEVEOEIzM0QwREY0NkZBRkRDMEFDNEUzNEUxRkJBMzIwCi06MTAyQzcwMDBGNzY0NUM2NTQxQkM3RjkwQUM3RTQyMTY0RDhFMkZGNUFCCi06MTAyQzgwMDAyQUYyMzMzRkIwMDlGRTlEQjBFN0VGQ0NBRkVGOTkyNEI1Ci06MTAyQzkwMDBGNkNGRDUyNzRDMUNBRjAxNjdDNDU2ODc3RUQ4RTY5MTg2Ci06MTAyQ0EwMDA4MTEzMzQ3Rjg3MTVFRDQ5QTc3ODVFM0YyMTFBOTczRDQwCi06MTAyQ0IwMDA2QUM1OTJGODNGNDk5NDVGMTQ4QjNDRTRCRjhBODVGRDU2Ci06MTAyQ0MwMDBBQjk3NDMwODY2Rjg3QzgyNTZDRTk0REFDNzUwRkNFRDg5Ci06MTAyQ0QwMDBEODM2M0I5MERDQzJGOTE1RjJCN0Q0QTc0NDFDN0Y3MEZDCi06MTAyQ0UwMDA4NjdGMDkwOEJDQjhEN0UxN0EzREY5RjI3MUUyM0Y4RkRGCi06MTAyQ0YwMDA4NDdFMkRFRUMzRURDQkU1NzFGNTc4MkUzOUIwQTlEOEUxCi06MTAyRDAwMDA3RUU0NzFGQjRFQzI1RkVGN0EwRjg5NzhEOEM3RUJDN0JDCi06MTAyRDEwMDA3M0JDNUJBNzEzQjc4NjJGQjgwMTQwQjQwRkRCNDlFRDM2Ci06MTAyRDIwMDA0QjVGMzhGMjBFQzVFN0ZFQTMzOEUwRjFFMUY4MEJDREJBCi06MTAyRDMwMDA3MjI5QzlDOUE1QTk1RDFDQTcxQkUzOTNGOTNENUMyRkE2Ci06MTAyRDQwMDBFRjE3RTU1NjBCRkFFMkIwRDQxMUUxQjhERUE5RTJGN0NECi06MTAyRDUwMDBGREVERkZFMzZGNzY2RjI5RTQ3OEI1M0M5MUU0OEEzRUEwCi06MTAyRDYwMDAyRkFFNjM4QzJGMjZDRUFFQUYyMzNBQ0VDMEZDQTNDN0M2Ci06MTAyRDcwMDBBMUY1RkE5RkVGNUYzNzQ2Q0IyMzVDRTc0RkEwOTdBN0ZCCi06MTAyRDgwMDBFOTc0NkM0RDFDRjc5RkVGMTNGODhEQzc0RkQxNDVDMTA3Ci06MTAyRDkwMDAxMEM3RjNEQ0UwNkVDNkZBNkMwRDRFMUY1Rjg5RkJFMUQ1Ci06MTAyREEwMDA3ODg4MzI5OUYwQkJCNERFRTkyNTM4RUJFMzBGQ0U4MEFBCi06MTAyREIwMDBDMENGMDc5ODY3QzY1ODdGMERFREZGRTZBMEM4MTNFODlGCi06MTAyREMwMDBFRDQ4N0YyMkNFQjkzRTg1RTk3NUU5RDM2RkJERjMzRDZECi06MTAyREQwMDA5Q0U1QTY5RjRDMjgyNkZEQTFCRjFGMEY2Nzg0RUYxODE2Ci06MTAyREUwMDA1QUNGNDI0OUU0Q0YxMEJFNzUzNDdFN0M3RUUwNkNFMTYwCi06MTAyREYwMDA3QTM0QTc5QkY1QzJEMTlEREYwOUQxRkE4RTY2ODNEQkI5Ci06MTAyRTAwMDA4NEZDQjhGNEM5NUZCRDY5OUE0ODc0RTIwQzRCNThDMjlGCi06MTAyRTEwMDAxRTYzRkMyQjVFNEZCOTIxNzAzNUM5MTEzQkNBMTFCMjNDCi06MTAyRTIwMDA2RkVDRkE3QkMzMkQ4NkY3NjY2NzI5MzdGQTU4NUYyQjVDCi06MTAyRTMwMDAxQjQ4MUVEOTU1RTFBRkU1MDdBQUI4QkVEMjJBRkNCNTlBCi06MTAyRTQwMDAzRERENjY5OUY4N0I4RjA1NDJBNEM3NTcxRUNDNTBDOTVCCi06MTAyRTUwMDA3RTVDODk3NjA3N0IzQTA1NDE1RTJGMjRBMzFGOTQ5RUYyCi06MTAyRTYwMDBDMDZFMzA3OTY1QUE1N0E2MDU2RTI3Nzg0OURGOTg3MTNDCi06MTAyRTcwMDBERjIzQjk1MTdGNTRENzk3MjU5QUJFNTcwQUFGNkJBNjY3Ci06MTAyRTgwMDBGMTdENUEzQzEwRUQ0QzhFNzc5NjQzNDBCMzIzQjQzODE1Ci06MTAyRTkwMDBEQ0ZBMDMxQzg3RDBFNUI2MERFNjNCMjhGRUIzMkU3M0EzCi06MTAyRUEwMDBBMTgzRkM0MzE5ODdFNUY4OUFBNzNFMEQwNkIwMjNENzA2Ci06MTAyRUIwMDAzNEEyQTRCRDI4NUFCN0Y2RTNDN0VCRTcwMzc4OEQ4M0E1Ci06MTAyRUMwMDA2OUJCNDBDMjFBREFCRjdBMjBEMjQyNzZDQURDMTc3QkNECi06MTAyRUQwMDA5RUM1QjI2REMyODM5MUQ1RDRGNkM1NDk4OUVDNDg4N0E5Ci06MTAyRUUwMDA2NjA3NzAzMTk4RDYyOURFQjMwRDVGN0JBQjA5RjU2N0I1Ci06MTAyRUYwMDBCMkQ3MDI0NzYyRjRBMDAzMzlGRjQ4ODEzNjJGRDkwM0M1Ci06MTAyRjAwMDA1OUJERURCRjI1QkNGNUI3OEZGMzU1NkU0MEY4MUMxOUMwCi06MTAyRjEwMDAzRDQwQkJDREJCMzgxMUJGQzdDMzJCNDlDMzZGNTJFMTg2Ci06MTAyRjIwMDBBQzBGQzlFMDREODI5ODdEQjNERDEzNTM5N0EyRjAyMjE4Ci06MTAyRjMwMDBENTRERjhCNzQ2REI5NTkzMDlGMjk3Njc1QTEyREU4RkE1Ci06MTAyRjQwMDA1ODYzRUJFMTgzRUYxOUVDODExMEFGREY2QUYxODMxNzZGCi06MTAyRjUwMDBGNzY3RjM2MEJCRTExQzg2QUFDNUMxOTE4MDRCMzU3QTQ3Ci06MTAyRjYwMDA2MDM2MzhGNUJFQzgyRUZGQkZCNTJGMUFENzNGRjg4MjlFCi06MTAyRjcwMDA1RTlGN0E4MUFGMkY3QzgxRTMxN0VBMkU2Q0Y4Mjk3NTZBCi06MTAyRjgwMDAxNzM2RkNENDBCN0M3REUxMEIxQ0JGNTA3RjYxQUY0RjJCCi06MTAyRjkwMDBBOUJGQjBGMUFCNUVFMEVCMEI1RkUwRjg4NUNCMkU2QzI4Ci06MTAyRkEwMDBGODI5OTc1REQ4RjA1MzJGRjBGNTg1MkY2Q0ZDQUE2Q0FCCi06MTAyRkIwMDAwNzNBMkI4MUNGQ0RBNkI3OTg0Mzc0Q0U0NkFBMDk3M0EyCi06MTAyRkMwMDBERTM4NEYwNThFNDdBN0FFMDdDRTU3RUNGMjBBM0Y0QUQwCi06MTAyRkQwMDA4RkQzOEZBNTIxNjRGNDVCQUNFRTZDRjJBQjc3QjVEQ0RDCi06MTAyRkUwMDA1NTdEMDM4RTczMjIwQjE3NEZGOUZDOUNENzE1MUE2NzdBCi06MTAyRkYwMDBFNzRDRTBGQzg1QjNFNUZEQzMxNEZGQ0E4NUIwMzc5QzAwCi06MTAzMDAwMDA0QjcxMzUwOUMyMzE3NkU5MzVDMTE0MDhDN0Y4MTM3NTFCCi06MTAzMDEwMDBDQTIwNDNCREE0N0JBOEExRkY4RDVCRjMwREVEREZFQ0JGCi06MTAzMDIwMDAxODZGNjhGRjQ2NkJCMUExN0VCRDVBNjFFODZGODdEQ0ZGCi06MTAzMDMwMDBCNjAyQ0FCQkI2NThCQzk0MDdCM0QwREVDQUZCQzIwREY5Ci06MTAzMDQwMDA3NkRCRjgzRDA1RkY5MTFGOTM4QjlFNTBFRkI4Qjg4RjRDCi06MTAzMDUwMDA3NEQ1NjYxOEQ3MTlENzdFQUE3QzQwN0MzRUExQTY1NEE5Ci06MTAzMDYwMDBDQjI3RjQ3RUJGMjBERTA3QjcyNzYxREM1M0NGMjdFOEVDCi06MTAzMDcwMDBGODFDNjM0OTYyN0M2RDUyNDVCRTY5REQ0Q0UxNDdDRTY4Ci06MTAzMDgwMDA2ODcxOUIyODZGQTlFMzZGM0NFODNGNkUzM0Y5OUIwRjkzCi06MTAzMDkwMDAzNTBBN0Y1Mjg3NDM3QTQ4QUQ2NjdGNzRCN0EwOEZCMUY3Ci06MTAzMEEwMDAzNUU2MTA5REMzOUQyOTM5OTM2OTlDMTA5MkI0MUJEQkIyCi06MTAzMEIwMDA0MzM1RjU5Q0Q3RDRFOTYwN0NDREEyMzkxNDVGNkRDQTQ1Ci06MTAzMEMwMDAxOTlDNERGMTg0REMxQTgxRjdFNUZCOENGOEE2QjQyRDMwCi06MTAzMEQwMDA2RDI5RkQ5MEM0RUI0QzZGQ0EyOEEyQkM1RDFGRjgzRjYwCi06MTAzMEUwMDAyMkUwQTk5RjMzNEY4RjgzRUZEODkwMTFGRUYxRjgzOTdBCi06MTAzMEYwMDA1M0Y4QUZGQzkyRjBCN0Q1Q0E1RDY5MTQwRjU1NDFBNkRECi06MTAzMTAwMDBGOENCNzMzOTYzQ0MwQzg3NTYyRkUzQTExNkJCMTEzQzY3Ci06MTAzMTEwMDA3MzVCODFGMzNBRjE3NEQ3REUwOEUxOUExODNFQ0RGNTdFCi06MTAzMTIwMDA4NjE1ODJFRjRDQTlCMDlBRjkwOURGMUQwMjdDMUE5NDJBCi06MTAzMTMwMDBGM0VDM0I1QjQ1OUUxNkNCNjQxQTFGRjZDOTQzMDk5RjBGCi06MTAzMTQwMDAyMUI1OUVEN0JENkJCRDJEOTlDRUVEN0RENjY0MDYzQUQ3Ci06MTAzMTUwMDAxN0JGMkI1NzFFNEFGOUFGNUQ0Rjk4RTZDNzlFMDM0MjMzCi06MTAzMTYwMDBFQ0RCQ0Q1OUJDMEZCQkI5OEM0QjhCMjgxNUFEMDQ4QjU4Ci06MTAzMTcwMDA2ODBGNEI1NDFGQjFDQTFDODc0RjU1QTJGNkY0REFFNDBFCi06MTAzMTgwMDBCOEU3OEE4OUZBNkYyOENENjNCRjM0NERDOTMwRTBDQkU4Ci06MTAzMTkwMDA1QTY2RTQ2QjA0RTMyQjg1MjgwNzQ3RDJFRjMyRDE5NUJBCi06MTAzMUEwMDBBMDkzRDA2QjUyNjgzNUM3NTE3QTRDOEI4OTZFQjQ3MzNCCi06MTAzMUIwMDAxNUU5NkJFQTgxRjI0RTREMzlERjlFQ0Y3MkFBQzlDNjdFCi06MTAzMUMwMDA3MDg3NTU4MjJFRjRGQzlGQjU1NUQwNjEzQ0ZEQjhCQzhDCi06MTAzMUQwMDA0NkZBQjE0QUMzNEQyMjhGMjVGODQ0NUZDNzRFNDU5QjNFCi06MTAzMUUwMDAzNzVCMDI5NUU1OUI2RDI4RjE4MTM1NkUzQzNCMDk0OUMzCi06MTAzMUYwMDA5MjJCMUVDMTdGNEVBODA3N0FDRjU5NjZFNzdDMzU0OENGCi06MTAzMjAwMDA4NzE5RkZENjI5MDA4MzYyQ0UyM0M0QUZGNzk0RUJGQzY1Ci06MTAzMjEwMDA5Mjc0N0VGMDFDQzk5OTlEMzVFMkJDRUFCQTM1RTI3QzE1Ci06MTAzMjIwMDBFMzg5RTc4NTlFOThEMUVBMzZCM0JDMDE5OUU1MEJEMkQ0Ci06MTAzMjMwMDBDMURDRUM1MjcxN0U4OEUwRDlBRUM5MUIzQkQ0QTU1MUVDCi06MTAzMjQwMDBCQjRFRTdCM0E0RTE1NUIxNzQ4RTcyRTQ0NTE3QzlCMzIwCi06MTAzMjUwMDAxNzJDMUNDRjVDNjc5NUFCNkZBMEY2NzJCQjdCMzVDMzk4Ci06MTAzMjYwMDBCM0IwODhENkVENkI0MUI5NDNGMUMyNkUwMTI3NUQ1RTA0Ci06MTAzMjcwMDBDNEMzQUQwODYyRUFCOTQ0M0E4OUUxRDg5RjNFRTg5M0Y1Ci06MTAzMjgwMDBGRkQ3RTE1ODhBNzBDQzNGNzMzOERBQkM0MkRGQTY5NzhCCi06MTAzMjkwMDAwOTdERkI1Q0NFQjdGOTU1RjcyMTcxN0UyNjVEMDEwNkVECi06MTAzMkEwMDBEQTcxNTVDMDc1OTZGNDUxOThFNENCMjYwNUU1MEJCNjU2Ci06MTAzMkIwMDBENzZBRURFRTMyMjE0Rjc0MzhFNzg5MjVGNkNBOTM0RDZGCi06MTAzMkMwMDAwQjIwODNGOERFNEQ3MDc2MTI1Q0RGNjdGRERDNTEyMjQ3Ci06MTAzMkQwMDBFMDBDMTBFMTNDNjdBQTIyRjg2NDlEMTVCQzE0OEZFRDQ4Ci06MTAzMkUwMDAyODc3N0EyOTJFOThBNzY4RjA2REQ1RTA2NTAyNTMyMkQ5Ci06MTAzMkYwMDBGOENBNzFGMDREOERBQjlGMjk3Q0M3NENEMUUwM0IxOENCCi06MTAzMzAwMDA0QUNGMDZCRTlCNTI1MjA1QkY4RDEyRjBCMTNBMjM3Q0M0Ci06MTAzMzEwMDA3RUI5MzVEN0UyNUQ4RDc0RDg5NThCRjBDNkY2RDZEN0Q5Ci06MTAzMzIwMDAwNEJDN0ZBOEY1NUYzMzAxQjhERTlBQjkzNjhCRTE5NTBFCi06MTAzMzMwMDBCQjI4OEJFNDc4QUJCNTQzQTU3QzU1MkJEMTFGOUZGM0ZECi06MTAzMzQwMDAxNEU3QkY1QzFBNURDRjQ0RkU1RTg4RUZBRjQ1Rjk0NEQ5Ci06MTAzMzUwMDBGOUM2RDRCMjgwODNDNjZCMkRCNDgwQzRGQkRGRTY0REMyCi06MTAzMzYwMDBCNDdGODdDRjY2OTA4M0MzMTYxQkUxOUExMjA3QzdBNDY4Ci06MTAzMzcwMDAyRkM5RkY3NTUzQkUxQ0ZGREY0OUJGNjJCRjc1QTM5MTA0Ci06MTAzMzgwMDBFNTM4REYxODcyMTA5QzZDNjU3RjcxMTAxREI1OTVFREU2Ci06MTAzMzkwMDBFMkJBMENBMUQ2M0NEQ0ZGMUQ0RTYxNjdCNTk1RDUwRjk2Ci06MTAzM0EwMDA3ODBFNkE5NzI2MTc0MjhEMEUyRUI3MzdCQTUxMzMwMTIxCi06MTAzM0IwMDBEQ0Q1OThDNUY1OEU0Njk5Q0JGNkM2MDIyRURCMUFCRDM0Ci06MTAzM0MwMDA1Q0I2MzY5NjcxQjlBNjUxRTFGRTUyNzk1MTE1N0YwRjYwCi06MTAzM0QwMDAzNjg3NjkxNURDOEU0RkMwNjFFRTNCNUY3RUFCNTE4RjQ3Ci06MTAzM0UwMDBFNUFBQzkwNkI4OEY2QzMwRUFBQjQxQjU0NjdEOTVBRTBCCi06MTAzM0YwMDBFNDE5REE1RERFNzE4NkY2OTQ4MjIyNDNCRDcwNEFBMDNDCi06MTAzNDAwMDA3OTRBMDk5RDhCOUE2QTc4Q0ZFNkE5MzZGNEQzQ0ZEMTUxCi06MTAzNDEwMDBCNTk1ODlFRkExNzRCOEU5N0FDOUE5RjFGNzNBNkIyNDk3Ci06MTAzNDIwMDA4QkUyRDhDRTMyQzE5RkVCMzVGOEI1NkFGMDRCNTY4MEFGCi06MTAzNDMwMDBDRkM1RDgwRTQ5REUxMDEwREZBRjY1RkFCRTAzNzEzODc0Ci06MTAzNDQwMDAwNEUxRDI5NTczODU0MkY2NDE5QjJDRUM3NDJCODg3MzcyCi06MTAzNDUwMDBCREI2MkNCRkZBMEQ3QzlFODQ3QThCRjJCNkI2RjkyOUU0Ci06MTAzNDYwMDAyQzBGRUVGMDM4QkQ3NDhFQjZBRDZDODU5QkQ3RTMxNThFCi06MTAzNDcwMDBFNzY1RENGODJGNTE5QzNGRkVGQzhDNjM5NEYxREM4REZBCi06MTAzNDgwMDBGNTE0RTcxNzFGOUMxMkZGM0RBRjQ2QTc5NTE5MDlFNUY0Ci06MTAzNDkwMDA0NzFGRjlEQTlCNUZEOTZGQzhBRkI0NkJGOTE1N0IzRjUzCi06MTAzNEEwMDA3MjQ4RDc0RjdBRERBOUU1NTc2MEI4MkY2MUZGQTgxRDk0Ci06MTAzNEIwMDAyNUYyMDcxQjI5MkUxRjkzN0Y3MDU1MjZGRTdFRjNCOTM4Ci06MTAzNEMwMDAyOTEyQUZGM0UwMTQ5OURGNzM1OUJBODFFNDc0QUFDRkRCCi06MTAzNEQwMDAxOEI3NzcyOTY3MzYzRkZFRjgzQzgzNDlGRTAyQ0JBNTMzCi06MTAzNEUwMDAxQjkyMDMwNzg5RUU5NDQ3ODQ3RDkyMzQ1Q0U4NkQxQjQwCi06MTAzNEYwMDAyODJBQ0IyNTEwRjkwRUVFNkZBMjUyRTQ3MzdBRTUwQjYxCi06MTAzNTAwMDA4OTg2MThCQTczRjZGMTY3NDVERTgzM0VBMzIwRkFCMUM3Ci06MTAzNTEwMDA0NERGM0YyN0ZFRUI5OTk2MkQ4RDAzRTc3RjVBRkFDOUNBCi06MTAzNTIwMDBGRjdDM0U0NUZGM0UwQzdBM0NBNTAwQkE2QjhFRjBGQjVCCi06MTAzNTMwMDBCQzFGRjg4NTA5NUUyREE2NERCNTc5NjRFN0Y5MkM1RUIwCi06MTAzNTQwMDBDNDAwNTQ3OUU1N0Q5NDhGNUNBM0E0QjI1RTVGRTM5NURCCi06MTAzNTUwMDAzQjg5MEY4RjJCNEUyRkUxNjM2MzYxMEQ1OUYwOTAzNDNGCi06MTAzNTYwMDBGQTU5RDYzRjJENzRCQzI2MDYwRjdBREUwOTE0QTVCQjg2Ci06MTAzNTcwMDA0Njg3MzNFOURCODJEQUVFOUExOEJBNTgzRjYxMEJFN0U3Ci06MTAzNTgwMDBFRERBQkVGQTIwRTdGM0RBRTZGRTk0RjM3OTZCQjM2NzdGCi06MTAzNTkwMDAxNTUwNUUzOEM5M0JFQjQzQ0VBMzQyNEM1RThBRjQ0N0RDCi06MTAzNUEwMDA4MTMxN0Y3N0YyQTRBODMzMUMyOEZFQTBFNUY5QzA2MzFGCi06MTAzNUIwMDBDQ0UzNTk2NDdGNzQzRDcwRUVGMTA0QzM4NUZFMDE4QjRBCi06MTAzNUMwMDBDMkRGMTNGNEE1NkZDMUQ3N0FCRkZFRjk0MEQ1QkYyQjc4Ci06MTAzNUQwMDA1RDRERTc3RjVCM0Q0MjhFQjY4MkY3Q0QwMEQ1NUY5MkIxCi06MTAzNUUwMDBCQ0FBNENDRjhCREVBNEYzQTQ2Qjg3NUIxODJGNkJCMzA0Ci06MTAzNUYwMDBFQTVCODVGRDJFRkNBNTU2Q0Y2QTk2MUJGMUZBOUFDRUEyCi06MTAzNjAwMDA2M0M2Q0E2QjNBOEYxOTJCQ0Y1QkU1RkEwMUY1NzE3NjY5Ci06MTAzNjEwMDBDMDFDQTdFRjhERUZFNzA0OEQ3QTQ3N0YyRjI5RUJEMkVGCi06MTAzNjIwMDA1NzZCNjJDRTQzQURCN0Y4MUQyNDJGRDY3OEVFMzIwNTI2Ci06MTAzNjMwMDA2MkU4Rjk0NzRBNjA2RTU5NDlCNDZFQ0Q5QUNCRUZEOTJBCi06MTAzNjQwMDA3MzdDMDlENzM1NUI1MUVBQ0IzMjc5RkYwM0RBMDE5QkYyCi06MTAzNjUwMDAzNUI5Qjg0NUQzMkZBN0RBRTc1NkFERkY4RkI0RkVEQkY3Ci06MTAzNjYwMDA0ODlGNUYxNEM1Q0Y5ODUxNjM5MzU4M0U1RjIyRTQzMTYxCi06MTAzNjcwMDBDMTNDNzZERUMyQjJDMEUyRDg3RDEwRDNGNEMyMDVFOTA3Ci06MTAzNjgwMDA3NDRDRTFCODI0QjIzNzlBMkYyOTRBMjIzQ0REM0Q2N0I5Ci06MTAzNjkwMDBFMEY1RTg3OTczQkQ5RjlFMjc4RENGOUZEQjNDNjYwM0U1Ci06MTAzNkEwMDBGQzc3OTU4OTczMjJDRkJBMTY1NUZGMDg0MTczNzdBRDIxCi06MTAzNkIwMDBBMEE3RTY0Qjg0NUUxRUYzODhEODQ3NUYzQTM0QUVGNzg2Ci06MTAzNkMwMDBFRURBODFFRDlGRjhGRTE0MzlFQ0E1MTNBRTY3QzRENTkwCi06MTAzNkQwMDA4N0M2RjVDRjhCNkIxRjE3RDc1RTE0NTc5RjFBRDdCRkJFCi06MTAzNkUwMDAzQUFFM0UzQkFFN0Y3RDVDRkRBQUI4RkUwQkUzREE2RkRGCi06MTAzNkYwMDA4RTZCNUYxMTU3RkZBRTExOUZCRUFCRDIxMkMxMzExRTUwCi06MTAzNzAwMDA3RjdBQkZEM0M1REY2RjdENTUzRjIzRkExRTAzMDU0QzdCCi06MTAzNzEwMDAyRjNBQkQ5RDJFMUVBMjc2QUU5N0U5Q0M1NjM2NkUxRjZGCi06MTAzNzIwMDA5RDhGQkIwQkVEMkJCMjg3RUVBRUFENzYwQkZCMjJCMEJGCi06MTAzNzMwMDA3QUFGNDYxRkE0MUYyQzVGMTVGMzc0RTU5NDI2QjEzRkEyCi06MTAzNzQwMDBFQ0Y0MThFNEM4QTlGMDZEODIwQzYzQkIxMjYzN0ZFNjQ5Ci06MTAzNzUwMDA5RDdCN0M5RjlBM0U0MzlBN0UxQzc4REQzQTFGMTc0RUQ0Ci06MTAzNzYwMDBGMUJGNDM3MDg3OTBGMDJGNzVCQjc2QTcyQUY4NjdBNzQzCi06MTAzNzcwMDBCQUIwN0EzM0M5REI1NkIzODgyRjZCRjc5RDY0RDA0MDVCCi06MTAzNzgwMDAxQzA3MEY2ODRBMzg2MjIyN0NCNzEyRkVFREU0MDcwODc2Ci06MTAzNzkwMDA3OUIyNTE5MzI3MUJDODNGQzBFNzQ5QTM4MjVCMjlBRThBCi06MTAzN0EwMDA5QjdDODg4RkRGQzA3QTVGRDFERjE2MTI3RUNBNEI3NzkxCi06MTAzN0IwMDBEMkY3NjExQjI2OTQzREZDNjNBQ0JCRkUyMTQxQjgxOEQ3Ci06MTAzN0MwMDBFREYzODk2RDBBRDkyQzFENEE0NjEyOUQxNzRBMzEzOUVECi06MTAzN0QwMDAzQUM5M0Y1QzUzRENFMTFGODVGRDM2RUVGRkIwRjMxOUJCCi06MTAzN0UwMDBDNEIzOUM2NUYzMjY2MTVEQjZGNDk4ODhERUEwRDBDQkE3Ci06MTAzN0YwMDBERjlERTEzQTU1RjJGREFDOTUzRDhEODlDRTk1NkU5Q0VECi06MTAzODAwMDBFRDM2OTE3Mzk4NUUyQjlCNTU3QTZGNEFDMDU0OEVGMEJCCi06MTAzODEwMDAxQkQ5MEE2NjNBNDc5Q0ExODZGOUFDNEQ3NUI5Q0NGMjIyCi06MTAzODIwMDA2NUQ3MTNDODUwQkNERjlFNkM4MkQ3NjdFQjZERkJBOUQwCi06MTAzODMwMDBEQTNGM0U0MEQyRTI3MzY3NTVFQUUzQTQwOUQyQTAxRjAzCi06MTAzODQwMDA4RUMzQzgxNkFEQUU2RURCNDZGNzhGMzgyNTUxMUZGRjBECi06MTAzODUwMDBDNDhFMDVBQjBCQTNGNUVDMjc3NjBDQTc3QTdCRjEwODk5Ci06MTAzODYwMDAxM0M5RDM3NDRGNkFDMjdCNjBBNjk3MEJGOUI5NkJGRDdECi06MTAzODcwMDBBMjkxODEwMUU4NEIyNjdGNkQwODk2ODU1QTQ5MzQzNTFGCi06MTAzODgwMDAwNUNCNTE1QTI5NkJDRkIzNDQ3RDBBQzEwREUxMjkzN0NECi06MTAzODkwMDA2OEVEMUU1MTlFRUI3OUUyQzc1N0NBRERCQTlEMzhENDU4Ci06MTAzOEEwMDBDRkNFM0YxNDNBMDcxQkVDQzVFOUU1OTlGRERCOEI2OEU5Ci06MTAzOEIwMDAxRTczOUM3Njg3NTUxRTRBRTcwNDc3QUNCNzAxRERFRjhGCi06MTAzOEMwMDBCMDIzMDdDNDc3QzY2QjZDN0MyRTE0MkNFRUExNTdCOEJFCi06MTAzOEQwMDBBMkVCMEVBRDE5Q0NFN0NGNDMyNjMwQzQ2RjJERTVDMjY1Ci06MTAzOEUwMDA2RTNENUU2RUQyRUM5RTJGQzJGNDlEREUwRTJEOEZCMzI4Ci06MTAzOEYwMDAwMzIyNkU4QUQ3NDdGMUZDRjAwMjI1MDZDRjBGOTU3RjkxCi06MTAzOTAwMDBCQThERThCMzJCNjc1MUY1MTY3QzZGNTM4Qjk5RTMyNTdECi06MTAzOTEwMDA5QjVBRjI5OENFNjkxQ0IyOEY0RUFDN0FDNTRDQzFBNUE5Ci06MTAzOTIwMDA0MkU4MzQ5MzlEM0Y4RUJFQUNDRUE3MkI4RTAyNUM3NkQwCi06MTAzOTMwMDA2QUYyRjk2N0M0OUYzOEYxNjg1MEY4RjkwOEU4NjFFMDY1Ci06MTAzOTQwMDBCQzUxMUFCODlFRTA5MjRGQTI0RDIyRkU5MUNEMEU5QzIyCi06MTAzOTUwMDA2N0Q5OTNFOTU1ODlGNEY2MkRFNUJERjZGODYyNEJBOUQwCi06MTAzOTYwMDBFNjVGQzgwQ0RGNUJDQTEzRDhFMzc0MDI5RkUzOEQ4QTVECi06MTAzOTcwMDA3RjI5QjUzQkY3MUQwQzBGQzNFQURFMzc4Q0Y0NDk3ODdECi06MTAzOTgwMDBBQjhGRDEzM0FCMzVGQTc0N0JGRDBBRTE3MDc2NjlFMDE5Ci06MTAzOTkwMDBEQkY0RkVCMkFEN0YzQjQwRTZBOEFDQkFDREY0RkVGRDUxCi06MTAzOUEwMDAxQURFMTc4NTgzQjM2ODk4MDlERTcwMzVGNTFGREZCMDFFCi06MTAzOUIwMDA3MzNGQzVEMTBBODJCNzU2MEZDMUY1OEQ1MUVBQUEzREIyCi06MTAzOUMwMDA0NDQzNEFBMDkxQzYxOUQ1MURBOTcyNjFEREI5RjU2MEJECi06MTAzOUQwMDAzODlCRDczMzkxQzdDQkQzRDc4M0Y0NTBDNzc0RTQxNjQxCi06MTAzOUUwMDBGMTdCMERCRjg0N0YzQTk3QkM2ODlCODAwRkI2NjdGMzZECi06MTAzOUYwMDBGRTJDRUVFQ0Q4RjVFRjlDODk3NEUxRUM0QjE3MEREQTU4Ci06MTAzQTAwMDBCRTM2NDdFMTA4NTZBMzVGQjMzOTExMUM3NTNBRDVFMUJDCi06MTAzQTEwMDA3MUVEMjMzRDZCMjg5N0I5MjBENEZEMUNDOTQxRkY1Njk5Ci06MTAzQTIwMDBGNzRDMkFEREE1ODFGQkU4N0Q1Rjg3QkY5OUYzN0M3QjlFCi06MTAzQTMwMDBCQUU5QkFBMTVFRjgzODk1NkU0QTFCNjEzRjY1M0JFMTcxCi06MTAzQTQwMDA3REM3QUEyM0Q1MUM5N0Q5MDdDMkRGODlEMzg3N0E2OTk2Ci06MTAzQTUwMDA1NUUyRjMwQkUyM0U5QzQ5RkI4Qzc2MzJEMkFCQjJDNTA5Ci06MTAzQTYwMDAxMzRCQUY2NkNFNTc4NTM0N0QxMjZBNDVGQUE1Rjk1NkQ5Ci06MTAzQTcwMDAwOUZBMERBOTJCREM4OUU4RUM0MTREQUZFQ0Q2RTg1NkVDCi06MTAzQTgwMDA3RjNFQUE5RjczOTU0Rjk3RUJERjkzNDM5NjY0ODRFNzNECi06MTAzQTkwMDBEMzAzRjE3RDFBNzg5OTFGOTAwRkY2NTNCRjBDRTIwMzAwCi06MTAzQUEwMDBBQzhGNUMyNTMzM0RFODdDQjA2Q0RGREYwRTBDNjM3RkIwCi06MTAzQUIwMDA1MjJFQTJGQkQ5RjQ3OTVGRDJFNjQ1RkE3QzkxREU1RjAzCi06MTAzQUMwMDBCNkI1RTcwMEY5OEEyMzU3MDlGQTdDOTVFRTA2Q0I4QzQ4Ci06MTAzQUQwMDBEMjE5RkE4RkJGQTE3RTNBRkRDNEVGRTNENzFBNURCOEMxCi06MTAzQUUwMDA0QkZEQUYxMjFFMTc2RDBERjI3OEM4M0ZBRjMxRkY2QzYyCi06MTAzQUYwMDBFRDBFMjczMUNCMjlENUI0OUYxRDFERTBBNkZERDhCRjAzCi06MTAzQjAwMDA1RkQ0NDU3MkUxNDQ4Mzg5RTE3QTVENjE3ODhEMTlDQjk4Ci06MTAzQjEwMDA2QjQ2ODE5NUFFMTNBQUNCNDJCMkM5QTMzQ0FEMzFFRjNGCi06MTAzQjIwMDAzN0JBQzM4ODNGQTQ5RjNGRDIzQzI1OUU4MDREMDRBRDQ5Ci06MTAzQjMwMDA4MzM2OTZBN0ZERDA0NTU0RUZBOTNBRkM1N0M1QzlERDk5Ci06MTAzQjQwMDA0RjA2OTRCQkE3MzlFRTc3NEI5NTRGNjk5Q0QzNUVDNzYwCi06MTAzQjUwMDA2OUY2RDNFMzREN0RFM0E2RTM5Mjg5QUZEQjVBRUJGNTNCCi06MTAzQjYwMDAzODU1MkREREI3QjM4QkUyQTYwOEQ3MzVBRDAzREJBQkY3Ci06MTAzQjcwMDAyMThEN0VCNzZCRjQ3Qjk3MTYzN0VERDBFQ0EyM0I0RUQwCi06MTAzQjgwMDAzNzZFQkFGRTU4MTVGQkJGQUI4MEUzNDBBQjUzMjY5QUE1Ci06MTAzQjkwMDAxMkQxNERBRTZBRTRDRjkxMERDOTcxNzE1MkEzRkY5QTUzCi06MTAzQkEwMDBBRTE4RTNBNkY0OURFNzk5QzQ0REUzRTNBNTg1NTMwMjVGCi06MTAzQkIwMDBFM0E3OTZGNDhEOUI0MkU0NUQ4MzlEQjlBNjU1QzgwNUE1Ci06MTAzQkMwMDAxRDdFNjM2QTZFRTJGOEU3MkU4RjM5MTRGQjdEODQ1RUZBCi06MTAzQkQwMDBCNjZCNzBEM0VEQzkzNjgyMUJDM0IzNDA4QjNGN0IzNUM4Ci06MTAzQkUwMDA3ODk2NjlGMEFCRTVGQTE4QjJFMjNDMUM0NzE1NzlGNzE0Ci06MTAzQkYwMDBCMTc3Q0Q1RjQ4NzBDQzAyQ0UxMjM0RTUzQzk4OTVFOEExCi06MTAzQzAwMDA3QzNENjRDNUQ4RDE0OEZGRUJENjZCNzlCNDJDRTBFRjhFCi06MTAzQzEwMDA0MzlGQ0I3OUJEMzY5RkYyOUE1OTY2OEVDRkVFRjJFQzc4Ci06MTAzQzIwMDAyRkY4MzFENzkzOTlFRkFDQTA3NjE0RTA3QzYzREU5QjNDCi06MTAzQzMwMDBBRkQyN0NCQkNBRUM2RTcxMUYwN0E0NTIxRTQ4Q0Y0QjlCCi06MTAzQzQwMDBFOEY5OUNCNjRDOTFDRjcxMTU2OEY5OUNCOEY5RUQ3MDA0Ci06MTAzQzUwMDA3RDc1MDdDRDVGMjBGQzk3N0VFOUQ5QTdFNTIzQjQzQ0FECi06MTAzQzYwMDA1MDQ2QTEzMTVGRTE4OENCNTdDNEU3MkJEN0FENUZCODkxCi06MTAzQzcwMDA3Rjk3ODhCM0IwOUMxRTczQzNEODY0QkZBQkVGM0NFRTk0Ci06MTAzQzgwMDAzOTQ2M0Y2RURENThERDlGN0FEMDkxMDg5RUE5MzU0NkIyCi06MTAzQzkwMDBCQTZDRDNGMERFOUMyOUYyMTFBNzFBMUYyQTkzMERGRUVECi06MTAzQ0EwMDA1NTVCQzFFOUM1MTNGNDdFRTQ4RkJBMTNGNDhGRjc0NzZGCi06MTAzQ0IwMDBDRkM2Q0Y3NUYzRjhDNjM4NzIwMjNGNzdDMzU0MTE1Nzk5Ci06MTAzQ0MwMDA2MTc5QjI2RUJERDg3RjZGNUM0REYzQUZGNDczNDZGQTg1Ci06MTAzQ0QwMDAzODU2Q0Q5RkUzN0E2RTU0NUVFOUY5QjA1MTZFMUJGQjA2Ci06MTAzQ0UwMDA2QkEzQjQ3QkExOUFFRjREMDlBRENFQTVGQ0RBREMxRTI3Ci06MTAzQ0YwMDBDQTQ3OEVEQTJENzFERTdEOTREMzNGOTRFMkFBNURGNzM4Ci06MTAzRDAwMDBDQ0UyRkM3ODc2NzI2MEM3RDQ5OEVGRTA3NkJCQkU5REJCCi06MTAzRDEwMDBDNTc5MDMyREVFQ0ZGN0UzQTBGRTUzMzcxNTc3MkI2NDVCCi06MTAzRDIwMDBGNzhFMDVCRTRGMjczOTJFMkYxMDdGMEY0RTlGRkJEOEUxCi06MTAzRDMwMDAyQTg0MUVDQkJBMUExMkRFNkZGMkJCQTk0MjZGNDZFNTg3Ci06MTAzRDQwMDBBRTNGNTlGOEYxQjMxOTRFMEY3NEQ0MjcwQkI5QUJFODU1Ci06MTAzRDUwMDBGNTAxRkRFMDczMjU2RjFGRTg3ODg1QkZFQjM5RTEwM0JFCi06MTAzRDYwMDA0RERFRkUwQzJFNDQ3OUZCQkJCMkMwNUIwOUU1QURBNTcwCi06MTAzRDcwMDA4N0U1RUQyMzUzOTRCNzA5Q0ZEN0QzODUxRTg0ODdFQjBFCi06MTAzRDgwMDAxMkRGQzNFM0FBQjg1MEYxRjA5OEMwNDNBMThFODczQjdECi06MTAzRDkwMDAyMDkxRkY3ODAxRTAyMUI5MjIxMTFFRDBCRjIyNzhBOTFECi06MTAzREEwMDAzRTI1QTUyMjkzRTJBNjhBOTNGQUY1RTJFM0VCODlGOTkwCi06MTAzREIwMDBBMkUyM0NFMzYzOTM4NjhGM0JCNUZDRUQ0NjBEMUYxQkVGCi06MTAzREMwMDAwODFGNzZDQTU3MEE3Q0FDRUI4MzhGMjMwMjFGNjUzQTIzCi06MTAzREQwMDAzRTlFM0UyQjdDNjRENDY0MThEQUREOTU0NjdDQTRGQUMyCi06MTAzREUwMDBGMjBDNzU2N0ExMTExRkM5QTM4QTBDRTM1RDVGMjE4QkRCCi06MTAzREYwMDBGQjkwODY0RjM1RjRFQjhCMEZBMzVGMTBBMEY3MDZGMDE2Ci06MTAzRTAwMDBCMzg2MDdCQUFCRTgxQkFCQTFGMzNCQkI0ODM2NjdGOUY3Ci06MTAzRTEwMDAzQkFBQThENEY3QjkyRENFQUZEM0NCRUIzNUZDNjVDREZCCi06MTAzRTIwMDA0ODhDREZBRjY5RURGRjJFNTdFNjU2QzRGMkU3NTcxMjE0Ci06MTAzRTMwMDBGM0U3RTU5QTFDMEQ5NDI5RjMwQ0Y0NzM2OUUyRkU1NzNECi06MTAzRTQwMDA2QkUzN0Y3RDhBNzI1NTZDN0ZGQ0Q5MkNDNUQ4RTVGRDZDCi06MTAzRTUwMDBFREZCODY2NEU1N0E3QTJGNkI4NkNDRjFENERENERBOTMzCi06MTAzRTYwMDA5QzNGREI5RDI0RjI2NTZBOTNEMzcwM0ZERDQ4RkEwREQ5Ci06MTAzRTcwMDBFQjU5REZGOEEyNEJBNTczNzY3NDFGMTA1QTU4M0I2RkFECi06MTAzRTgwMDAxRDlDQjcwRTlCNzY2NjhDNTk0RDcwRkM1NjQ1M0VBRjE3Ci06MTAzRTkwMDAyQjdGODlGRjZEQ0FGMzI4RUE1MTkzMzg4N0I0ODBFRkVFCi06MTAzRUEwMDAzNTMyODUwNzk5RTgzRTJDNzA2NzlDNTYxRTA5RTU5OUM2Ci06MTAzRUIwMDBCOEJGNkQyNDg4RUY4NTIxQzg3QTUwRjI0MzNBN0Q5RkMwCi06MTAzRUMwMDA2QzAxQkZDODlCNTM3RkYxMUQyMTZGM0UwNUMyNUM3NzFCCi06MTAzRUQwMDA0MTg0RUI2OTlBQkZCN0FFMjI5N0M3NEQwN0Q5MjQ4MEJBCi06MTAzRUUwMDBFNDM1OTExQ0Q1RjlENEUxMDkzMkZEN0IxQURDQTZENTY1Ci06MTAzRUYwMDBFNEQzNTk5MDU3QzkxRjc0MEVFN0VGNzZBMTFBNTRDQTNDCi06MTAzRjAwMDA2Qjk5QzBDMUY2QTY2OUYzODFDRjM5NUZBNzdGNjdGOEM3Ci06MTAzRjEwMDBDMjIwRjE5REUxNjlFRUVGNzRGQkI1RDBGRDdCOUVFODE4Ci06MTAzRjIwMDBGRDdCMkQ5QTNEQTBERkJGQTc1NjA3RjkzQjcyNzVCNTAzCi06MTAzRjMwMDBERERERUNFOUZCMURGOUU2QTk4MTlENDQ4NzdGNEYxQTgxCi06MTAzRjQwMDAxMTEyQzlFNkUwOTQ3QUQ3MzkxREZGRkY5Q0U3RjE5RjczCi06MTAzRjUwMDAzOENGRTMzRjQ3RkNEMERGRjgxQkU4RDc3MkNBRUZGOTUwCi06MTAzRjYwMDA1RkEwN0VDREFFNTJCNjNCRjUzMjFFNkZCM0QxRkZBNzM4Ci06MTAzRjcwMDBGNTRBOEU1Nzg3QkUzNzI4NkFDRjM5MEY5QkQ4MkY2QUVDCi06MTAzRjgwMDAzNjg5RjM2N0VBQkIyNkI2QkJBMDUwRDA4MTUzODY4MjQwCi06MTAzRjkwMDBEQzQ5RDE3MTlDREVFMDQ4MTE3RjEyNzE5OEE2REZERjA5Ci06MTAzRkEwMDA3RTExRDlERjNGNEM5OTFCNDlDM0YxNUUzRTI4RUMzRjlGCi06MTAzRkIwMDBDQjhDQzgzNkJBQzc3OTQ4OUFDREJCMEJGOUVFMEU2RERCCi06MTAzRkMwMDBCREY2RjIyOTc3REU4NkJGRDY0RjM3NkJFNzFDQkM5NzZDCi06MTAzRkQwMDAxNEYxQjlBNTM5MTFCMjFGNURBNTE2OTk3MjA2Q0VCOEI0Ci06MTAzRkUwMDBGQzY2QkJBNTgzQ0YxOUI3RUZCRUFCNkExQ0QwMzlFNTIxCi06MTAzRkYwMDBFN0REMkRENkJFRkI3NDZBRjlDREIxNTI2MjM5Rjg5NzcwCi06MTA0MDAwMDA2OTQ5NDIyRUY5OENGNzA2MUZBQkQwQ0U0MUE1NDIyQTUyCi06MTA0MDEwMDBEOTkxOTY3RjJCNjk4OUNFMDVFOEE1M0U3Rjg5Mjc1MkU1Ci06MTA0MDIwMDA0M0RGNTk0N0U4QjIzNkM0NzM0OTU5NUQ1MkIyODdDRjZFCi06MTA0MDMwMDA0Nzc0MTM3Q0FCQkQ2MTA3RDlCRjBGMkYwQ0RFMTRGQjk3Ci06MTA0MDQwMDBERDc5N0IxOUI4Qzg4RUNGOUQyRUNFQzNERUEzNDgyRTU2Ci06MTA0MDUwMDBCQTQ3RTNCRTg4ODVFRjE3QkY2RkM5NjNFQjUzQjBCRUE1Ci06MTA0MDYwMDBFRkIwRDk0REYwNjhGN0JGRUI0Q0M2RkFDMzM4MkVDOTk0Ci06MTA0MDcwMDBCQjk3Nzc4QjdCMjZENTA1MTAxQThERjA2QjI3RUYxMjM3Ci06MTA0MDgwMDBFQjdCMTVFMDczQzBFQzkwOTU2QTU3RjIyMUZDREZCOTI5Ci06MTA0MDkwMDAzODUzQzAxQjgyNzU3NDNGRTdBNjk0OEJGOURFQ0E5QzI3Ci06MTA0MEEwMDA3OTIyMkUzQzRCM0FEQzQ1RUZERjU3NjY2N0ZDRTU2QjI3Ci06MTA0MEIwMDBFNzc1NEM2QTFEREY1Qjk5QjlDMDc4NUVFN0JFOTVERDk4Ci06MTA0MEMwMDAyQUUxRDc1RDZFNzdEMzM5NTg5MDlDQUU4OUY4QkVFQjY0Ci06MTA0MEQwMDAyNzY2OTA1ODM1RjZGMEU0QjMyNEE3NTg5NzU3OUNBMzY5Ci06MTA0MEUwMDA3QjU4MEVBQjc0QUY3MTI2QkVEN0U0RTZEQjExMERFNzRCCi06MTA0MEYwMDA4MkY2NkUxNUZFNjlEQTY0QTcxNzI5MURENzFCNzc2RTQ1Ci06MTA0MTAwMDA0ODVGNTcwN0FFOEJFRTM3NzY4REUyQjg0NEM2M0NFMzg2Ci06MTA0MTEwMDBGQUQyRTJGQzA2Njc1Q0RENUJEOTdCNUZDRjE4QzJGN0ExCi06MTA0MTIwMDA3MUZGQjc4QjVGRTU1NkFGOUNDOEZGNkM2Rjg0RUU5QTRBCi06MTA0MTMwMDA5OEYzMDlDRTdFRTI4MTk3NUYyQ0U4REE5NkZEQUM4Mzk2Ci06MTA0MTQwMDBFQzk0RTNGRUQ3M0Q4NDgzOTdGRTc1RTAzRDNBMkJGNzcwCi06MTA0MTUwMDBEMkJGNUZEQ0IzMUNFMUYzOUJDRkRGRENGRDI4RURBRjBBCi06MTA0MTYwMDA2MUMzMkI0NEFGQkEzRkM2NjczMDcxM0RDRkQ1RDkxODc0Ci06MTA0MTcwMDA2RUZFNUFFRDNDQTdBRkVCNTlBQjhGREIzOUNGQjQ3MTc0Ci06MTA0MTgwMDA3RjEyQjc4RkFEODQ1MDEyQjY4RkI1MjhEOURGMjRCQTBECi06MTA0MTkwMDBFQjk2QkM0RDMyMEQyMkNFMjNFQUY4REY3OEFEREYwNDdBCi06MTA0MUEwMDAxMzA4OEY3RTg5RUVCRDk4MjlCREE0QjhGMEZEN0I5NkRCCi06MTA0MUIwMDA4MDRDRjhCNzJERTlFNEYzRUFCRTk1RTJCQ0JBNEZBOTBBCi06MTA0MUMwMDA0QkUyRjNBNkYzQ0M3QzRFQTRBOUVFOEE0QjQ2NjM3RDZBCi06MTA0MUQwMDBDRjI1RTIxRUFBREE5NUNBOTUzQ0JGMjJFODI1QURCQkUxCi06MTA0MUUwMDBENEJDOTJFODMyNUJEQ0NCQTQ5RjM3MkQ4MTFFRkVDRTdGCi06MTA0MUYwMDA2M0FDQjdCM0NCNDZGMjY2MDEwMjk4RDZEN0FFRTE0QkJCCi06MTA0MjAwMDA4QjFCOTRGOEJBNTVCMjI3NUQ1RTIzMUUzM0UyRjAxNjdECi06MTA0MjEwMDA4RkQ3OUI3NDNDOEU4NUIxODQ0NzE5M0E5MjQ5MUZERTMzCi06MTA0MjIwMDAwRkQwNDlGNzA3RENCM0YyQjEyQkU5NUNEQjcxMzU4REI4Ci06MTA0MjMwMDBFMUQ1MUYzRkJGODNGNkFBNzIxMUREQjdFMkUwQjIxQkUyCi06MTA0MjQwMDBFRDU1MkFGN0EwQkQ0QUE1MkI1ODc1RjU0QTVDRjdFMzUyCi06MTA0MjUwMDA2RkJDRkNGQ0Q3NzFCQUI5NEFEREE1N0M1NDRCQ0I3RjRGCi06MTA0MjYwMDAwMTJDMUE1MThENzBCRDk2Qjg1N0Q0QjcyQkEzMDBGRTAwCi06MTA0MjcwMDBFMDkzMENGNThEMUU0QkY0REU3RkZDRDU5NUFERkQxRDU2Ci06MTA0MjgwMDAwMEY1QzQ3NjRBNDBCNjY3NTlCNDdDOUJBOENGMjUzRjU5Ci06MTA0MjkwMDAyNEE2N0RFRjFDNjNGRjhBRkQzMUUzNTdFMjdBOTdEQUFCCi06MTA0MkEwMDBCODdENjNFNUEyRURFQUE4NjhGQkM3RDNCMDNFMUNFMDg5Ci06MTA0MkIwMDBBMDY2M0Y1RUYzODBEOUJGMkI4MTdDN0JBOTUyRDg3MTY5Ci06MTA0MkMwMDA5NjdGODM0QTcyRUQ1MzE5RDhCRjk3Q0MwQUNCNzdDODMzCi06MTA0MkQwMDBCM0M4ODlFRUNGMDM0MDc5MThFQjk3Q0I0NkY5NUFBQUI5Ci06MTA0MkUwMDBGMTg1QzU1RjA1NUE5RTBDQkVEMEUzMEZGOEYzRjhFRkQ5Ci06MTA0MkYwMDBFNkYyQkQ0QjZCRjIyRDdDQ0YxMEVBMDNFRjQwNzkzQjI5Ci06MTA0MzAwMDA4QkM3RjI5N0Q4RkJCOTdFQUFEM0MxNjgxODRERjM3RjRCCi06MTA0MzEwMDAwQTk1QkZBRDYyM0U4OEI5OUYwMUQ3M0RBM0UzOTk2MTdECi06MTA0MzIwMDBDQjcxMUVERkUxNjQ4RUE3NEFBRUNEMjkzNDRGNEI2M0JCCi06MTA0MzMwMDAyQkNCRjMxRjI5ODEzRDk1MzE3MThBOTZGNDQ1QzUyNDE1Ci06MTA0MzQwMDA1RkY0RjMzMkQxRkI4REFFMzA5RkM5RkRGNjVENzUwNzhBCi06MTA0MzUwMDA4MEY0QzJBNzQ4NUFGNjAxRThCMEE1NzFERkVCQjQ4RTJECi06MTA0MzYwMDBCNThEOUQ1QzNBREQwQTBCMUJCQjI1Qzg3MTlGRDk0QUYwCi06MTA0MzcwMDBFMEM1Q0ExMkJBNTcwRkRCNjNGOEM0RUFDNkY3MEM3RTcxCi06MTA0MzgwMDA4N0YxREU0REQ5MUQ3MTEyRENFRjI5RkJBMzkzRTY2Rjk3Ci06MTA0MzkwMDAzRjI0RjhGQTlFNDNGNTdDOEVBMURERkI0QTEyRjFDRDU1Ci06MTA0M0EwMDA3MUJBRTBGMTRCRjA4OTRGMzlDODMyNkNFRjFCQTlEN0Q1Ci06MTA0M0IwMDAxMEZEM0NERTlDQzY3NkM1Q0IyQkVGQkU4QUY4RTdCQTczCi06MTA0M0MwMDBFRjVGQ0VGMEVFRTUxQkY1REUxMUQ1ODUzMTdDQTNERTg3Ci06MTA0M0QwMDBDQjc0RERDQjM3NUFCRDdGQkVGOTQ0RjA0NTJGREY4ODYzCi06MTA0M0UwMDBCQUFGMTAwQ0Y1OTdFNzE4RkJGN0YyMEQ4RDhGN0NGMTQzCi06MTA0M0YwMDA3MDk1OUREQjNGN0RGMjVFMDNERkZDRTFBOTdCOEQ3QzQ4Ci06MTA0NDAwMDBGMzJERTQ5QjA0NzJCRjc4OUE0NkRGRTc5ODZGRkUzMTg0Ci06MTA0NDEwMDA0REUzQzdGM0M0MzdFOUQzQjQ3M0I1NUY5RTZGODY0REUwCi06MTA0NDIwMDAyQjM5MUY3Q0YzQjhFOTZDRjg2NjU4NUZCRTk5M0NFREY4Ci06MTA0NDMwMDAyQ0Y4QTZERDFERTY3Mzc1RURGM0NDMDlGRjBFNDg3NzY5Ci06MTA0NDQwMDBBNUMwRkI4QzA1ODFFQTBFQjI2QjE0NzE0RkRGNEM2OTdECi06MTA0NDUwMDA0RUI2Q0Y0MzdDMjZEMTVERDFBODNGODUzRTdGRjk5QUU5Ci06MTA0NDYwMDBERUVGMzM1ODNGRkIzNTNDNkUyNjg0OTI5REI0NTREMDJBCi06MTA0NDcwMDBDREFCOEQyMkVFM0I1MzcyQ0U1QzRBN0E5N0JFMjNBMDIxCi06MTA0NDgwMDAyQkUzRTY5OEI4REY2NUE4Rjc2NUIyMEJBMUQzOTQ4OTUyCi06MTA0NDkwMDBGM0RDODNFQUJENDNBNjJEMDdFQjQ2RjNGODYxQjZDRjA0Ci06MTA0NEEwMDBGMkI1M0M4MDUzMkExNERGMzMyOUUyRUY1QkU4REZDNTI1Ci06MTA0NEIwMDBDQzlCNjNCQzQ3NzZDODI5RUMyNjFDMjA4NUZDMTg3NzZBCi06MTA0NEMwMDA5OUY4N0IyNzU3RUFGNEQzQUI3RkQxMEVDMUY1NzUwRjZFCi06MTA0NEQwMDBCNzMxOUREQ0EzNUMzNjYwOUNBOENGRjk2QTVGMzA2MTgwCi06MTA0NEUwMDA3RUYyQzAzNDkzMjA0NjQ1NTkzNDJEOTNFNENCRjY2NEQ0Ci06MTA0NEYwMDAzQTJGRjFCODA0N0M0RTY3NDFGMEU3NTcxMkRGQjk1NDA4Ci06MTA0NTAwMDAyMTZGREE1N0ZEODlEMjkyQjA2N0U2RDc4RDdBNUE4RDNFCi06MTA0NTEwMDAxOEY1QjQxQTMxRUE2OUFEREVBRkJDODFGNzhEN0E1QTZECi06MTA0NTIwMDBBQkY3RUE2OUFEREVBQkE3QjU3QTU0REU0NDBDN0E3QTE0Ci06MTA0NTMwMDBGNTUzOTFFRDZBNENGQkNCNTRBRjNDQjU5RUVFOUE3NkE5Ci06MTA0NTQwMDA3RUY0RjQ5MEYzQUNBNzc3OUMzQjc5RjNGMEY5OTEzN0M0Ci06MTA0NTUwMDBBRjlGOTVCQ0M5RTkyQjZGRkVGQjZDRTQ4RDZCNUI5NzNECi06MTA0NTYwMDA0QUU5OTk0NUZERjBDMTM3MzUzRDczQTA0MkY5MTU4REYzCi06MTA0NTcwMDAwRjY1QTcxN0FGODlBN0FGQUVCQTQ1NkJFOUVGQzc3QzQ4Ci06MTA0NTgwMDBFQTE1RkU1RjdGRUZCQjFBN0VGMTdBNEI4QzFGQUU3RjgwCi06MTA0NTkwMDA5N0UwNkE3ODlDOUZERkI4RUQyMEM3NjM0RkI5NUVCQTk5Ci06MTA0NUEwMDAwODM0QjNBRjVFNDVCQkM4QzFGNEVCMzU3MzRFRkM2QzQ5Ci06MTA0NUIwMDBEN0QxM0U0RkYwNUJEOUI0QzVDQzRGN0ZEN0UyOEZGMTU2Ci06MTA0NUMwMDBGNjZGNTc5RENEQ0NGMzk1MDkzOUREOUYzREQ0REZCQzA3Ci06MTA0NUQwMDBERDk1QjJFMUZCMEM3REZFNzhGQTQ1RkFGQzM3QzkyOTdFCi06MTA0NUUwMDBBNDQ3MEJEREZGN0RCQzFCRjhFRjUxRkRFN0IxMkRCRkVDCi06MTA0NUYwMDA1NkU0MEI0QTJGN0EyODM0NzBBNjc0NUFBQ0UxMzNDMUMyCi06MTA0NjAwMDBCRTczMkUyRTM5OUZGQjNFNjdGQzU5N0MzNkZCRUU5QTFCCi06MTA0NjEwMDAwNjdBNUMzQjdFREY5NUU3NzdERkU3Q0M3RkE4QkZGOEMzCi06MTA0NjIwMDAyQ0U0RDI0Qjk1QkRGQkU2RUY1MjMyQjQ3RERGRjNBRjA1Ci06MTA0NjMwMDAyQkRFQTVCOEM2M0RGRkJFRUFFNzE0RDdCOEVCRjM4MjgwCi06MTA0NjQwMDA5RDE0RDdEMEVGOEY0QjgzRTg4RkFDN0YxRjg5NzA3MTlCCi06MTA0NjUwMDBGOUM1NzcyNTE5RjM2MkJFMkYwMkY2RUZBM0RGOUY5MDBECi06MTA0NjYwMDBCREUxRUI2REZGN0Y3MjdGMUNEOTI3NDcxMkM0MTk3QjE4Ci06MTA0NjcwMDBEQjZEQzZCODlFNUU0RUE1M0ZBQTg1RjRENTZFREFDNDQyCi06MTA0NjgwMDBGMTg4N0JEMEFGNkE0MkJDNzVDRDEzRjE4ODc2QjQ1MzA0Ci06MTA0NjkwMDA1OEVFQ0MyQjFBRDAzRURBRDNBODcwRENBOUJERDFDRjBFCi06MTA0NkEwMDBFNTlEOERCNTVDRUU3OTc1NTkwNUM5NURERkFCNEI1ODVECi06MTA0NkIwMDBFRkY5QkNGRUFCN0Y4QzQwNzI1N0JERTdBNEU3Nzc3QTc5Ci06MTA0NkMwMDA3NEZCNDREODJGNjk2NEJGNjBCREUzRTlCNjFEQjFGRTM5Ci06MTA0NkQwMDBDRDkwRTkzOUFDMEZGNDc4NTU0NzU2OENERDIzQzdGOEY3Ci06MTA0NkUwMDA1MTU4Mjc3MkU5RjVBM0E4M0UyQUQ2QUVDOTYxM0Y2QUEwCi06MTA0NkYwMDAyRkQ5MzU1OEJGRkZFOTFDODM1REEzQ0ZCM0QxMEM4QkY1Ci06MTA0NzAwMDBDOUFFRDlCOERCNUM5QkM4QUVBOUE4NENFQzQ3NjE5RDhCCi06MTA0NzEwMDBGMzIwMEU5NzgzQkZGRjk3QjRCRkYzMTVFNTk3ODFFREE0Ci06MTA0NzIwMDA5QUI0RTlFN0Q3OEZGQUU1QzVFNzI2RkVEMENCQzc5QTVBCi06MTA0NzMwMDAzREYzMjM0NTc5NTY5MzJCNUY1MjdFNkMzMTUzRkNGODQxCi06MTA0NzQwMDA0Q0U1Qzc1ODkyMUY4NTA2RjlGMUY2RDlDODhGOEE0QUY5Ci06MTA0NzUwMDBCNzIxMkVGQUIyQUMwRTlBNDg3NkZBNkUzMzM0Qzk5QTYzCi06MTA0NzYwMDBGRUY1OTA3RTA1RkVGQjc3REZBQTkyRDhDRkI5QzcwQjg2Ci06MTA0NzcwMDBGQzc3RkM2NjQ5MEI1RTIwN0FEOEJCQzRDQ0RGQkJERjdDCi06MTA0NzgwMDBBNzg4NzMyMkY3Q0YxM0U3QUE3RUJDQjJBODlFM0UyNzY0Ci06MTA0NzkwMDBEQTk0NzJFRDg2MjQ4QTZCNTc1QTgwRkFDRDkyMkEzOUMwCi06MTA0N0EwMDBDRTdENUZBREIwNzM3MjlDOUQ5N0QwRkU1RkFFQjIwMEMwCi06MTA0N0IwMDBEMUQ1QTlFMkRDMTQ2RUU3NzhCNTdFOUU0QURBQzY3RUQyCi06MTA0N0MwMDA4N0VCRUIxNjM3OUQ1QjhEOEY1RjNCQ0JGRUNDREZDRDUwCi06MTA0N0QwMDA4M0Y0MTI3RkRGN0RBQUY4RjU5OUM2QURFREQzN0JGRjk4Ci06MTA0N0UwMDBDRUMwRDlDNkFEOTkxRjJGQkYzOEU3NUFGRTBFMjE4RTE1Ci06MTA0N0YwMDAzRTlGQjk1OEU2NEE3RjdBMkM5RTlGQkJFQTY2QTU0NTQ0Ci06MTA0ODAwMDAwNjM4MTdFNTI0RkIyOUU2QkU1OEE3MjVDQzc0NTRBMTI5Ci06MTA0ODEwMDBEOTUxNEVCMjlGOEFBMzc0RDE1NTU3M0FFMEZEQjMyOUJFCi06MTA0ODIwMDAwRDRGQkMxRTlCMTc0QUIxNzRGMjc4MjkwRDRGRjJGMzVECi06MTA0ODMwMDBDRDc0N0U4MUY2NjVGMUIyNUM3REI4MUFFNTczODJGMUM0Ci06MTA0ODQwMDA5RTZDMEMxRTIyQjhGQ0IyQjFFMTEwQzVBOUE3NTlCQUUyCi06MTA0ODUwMDAyNUZBQkJBREZCMUE1NUFFM0ZERUQ4Q0FFNTlFQzYwRUEzCi06MTA0ODYwMDBFRUI3Qjk3MTJCOTc3NzM1ODZGOEY5OUQ4RDBGNzE3RDZECi06MTA0ODcwMDA0MzYzMjdENzFGQ0UxM0YzNENCNTg0Nzg5QzY5M0QzODJBCi06MTA0ODgwMDA3RTBDM0Y1NDdDODBGM0M0RTBCOTNDQTIxQURBQTdCQzhBCi06MTA0ODkwMDBEOTZBNjgyRkU5RUUzMEQ0MzNGRDVCMERGRDA3RDU4NjZDCi06MTA0OEEwMDAwQ0VEMDcyQTAyNUY5RDlFNDlFNzFBMUUzMkY0NzMxNjJCCi06MTA0OEIwMDA3NjFBRUFBN0VCMkY5Q0VCN0VBQjUzNTIyREZGNDQ3RTdBCi06MTA0OEMwMDAxRDExNDA3QTQyM0E0QjZGOTA1NUNFOUIyRjE2N0MzOTgyCi06MTA0OEQwMDBBNEMxMUJBNkZBNzY5NzhERjk1QkE3NEIzRUJCNkMxMjYxCi06MTA0OEUwMDBFQjM3QzVEQzQ3REJFNUIyQjFCQzY4Q0UxNEYxOTRFNjJBCi06MTA0OEYwMDBFRjg4RkFGNjZDNzE1RTcyNEM4REM4OEYzNDBGMTdFNzMzCi06MTA0OTAwMDAzMEY1M0NGQzc2OTdDODlCOURGMDg5N0IzNDQ2MTQ0Njc1Ci06MTA0OTEwMDBGODkyOEMxMURBREY3RDczNTY4QUZDOTkxQkRDOUM5RjIwCi06MTA0OTIwMDA2RjZFMDRFRDNCQzUwOEU3M0IzMkMwRUMxNUY3QTgyQkQyCi06MTA0OTMwMDAzMkZGREQyNDBCODQ5QTcwQkVFNjQyQjc3QTIzQzk5OTEwCi06MTA0OTQwMDA2MEFBRDdFQ0U1M0YyMTFCMzI1MzFFOTFDNDEzMjc2MUE3Ci06MTA0OTUwMDAzQTM1QkRBM0U1RTU5M0ZFMDg3Q0VFQTAxNzNFOUY4ODlGCi06MTA0OTYwMDBFRjEyMUE3QUY4N0VBNjIxMEQzRDlDOEZEQkZFN0Q3MTM5Ci06MTA0OTcwMDA4RjREM0M1Q0JCQkVGRjE5REZBQkI0RTMzQjlGNjUxM0JGCi06MTA0OTgwMDA1M0VGRTgzREI3RDM2M0Y4MkU2REZCRTI1NEJFNkY2MTgxCi06MTA0OTkwMDA0NzQzMUU5RkEzRDhCMTU4N0M3NzJDODNEOEVGRjYyNUM4Ci06MTA0OUEwMDAzNjNFODdCMUEzQzE2QzI2Mzk3OTYyODkyNUE0QzMzQjAxCi06MTA0OUIwMDBBNDlGNUJBMUZGMTU4MDQxQkVFOERGNzNERUE1OURFRkRDCi06MTA0OUMwMDBFOUQwQkVCRkJBNDMzQjZGRDVBRTlEOTc2REQzQ0U1QkVBCi06MTA0OUQwMDBCNTZBRTc2NUQ3RDJGOTFFM0JFOTE5ODU5RkVGNjg1ODlDCi06MTA0OUUwMDAyMUNFRjcwQzA3RUQ3Q0NGMjcwQzY3MEJDMjk5RTIzODdDCi06MTA0OUYwMDAzQkFDQjBDRjM0MDlFODBGMTczMkZDRTJCRjk3MUQ1NDJGCi06MTA0QTAwMDA5QjFDNzdDRUNBNzhFRTJBMkRFRTVFMjE5N0Q3NzhFRUUyCi06MTA0QTEwMDAyQUE1NjA1Q0RDMzkyQkUzQjkyQjdCOTZGMURDOTVENUJDCi06MTA0QTIwMDA1RDZEM0MyNzFBNEJBNzA4NTREM0FBMkQ0RDQ0MDdCREYyCi06MTA0QTMwMDA3RkNGOTExRTBFRTZCRjE3QzdGQjUzMjgwRjg1RkJDQTE5Ci06MTA0QTQwMDBBQTE1NzQzOTQ4RkJGRTI1OURDRTg1RTQ5M0ZDMEYzM0VGCi06MTA0QTUwMDBCQzVENDRBRkY5NzQ2RTQ0RTU3QTkyRjZGRDlCN0VCRTcwCi06MTA0QTYwMDBBNDNGM0EzQURCRkJGRUE1RDU4OUVGRkJEN0NGMUZCQ0FECi06MTA0QTcwMDBBMUQ5NEYwQkE2MkJBRjRGMkY4OUNFQTc0RTU3REU4QzU3Ci06MTA0QTgwMDBBREVCNjU3RkYyRTBGRjk3ODlDQkZGMDUzMkRFRDY3NzhECi06MTA0QTkwMDAwMDgwMDAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMEU0Ci06MTA0QUEwMDAwMDBCQjU1NUNGNkIxMzQxMTRGRTM2QkI2OTkyMzY2OUM2Ci06MTA0QUIwMDAxNjQ5QjUyMTE1MzZDNjY4MDMxMTIyQTZBNTk1ODhEM0Q3Ci06MTA0QUMwMDAxQTI0ODc1QUEyRjRFMEMxNDMwRTM5RjlFM0VFNkQ1MzdDCi06MTA0QUQwMDAxNThBOTJEMjE4QzE3Mzg0MEExNjBBRURBMTdGNDBBQUUyCi06MTA0QUUwMDBDMTczNkFBQjI4MTYwOUI1RjQyQ0E4NzgyOUM0MzdCMzZBCi06MTA0QUYwMDBEOTI2NEQzNkI1MTcwNzkyOTczNzMzRUZDREZCQkVGNzYyCi06MTA0QjAwMDAyM0NGNDFDQjBGNDQ2MkVDOUFBQzAxMjM4OTVBQzU0OUFCCi06MTA0QjEwMDAzMjE0MDcyQjQ1ODFFOTJBNDkzN0VEMkYxQTUyNjUzMkE1Ci06MTA0QjIwMDAyOTgwOEJEOTg0MzRGNTc0QUFBNjI4NjRBN0I2RDlBNUEwCi06MTA0QjMwMDAwRkVDRUNFMkRFMThCNzFCRTA1MjExRjJEQ0FFMTNGMDIyCi06MTA0QjQwMDAwMTZCNDlBOUY0MkMwOENDNkREMDc5MUNGODNEMjY5NTUxCi06MTA0QjUwMDAxMEU0QzFFREQ3RUJBM0MyMTQ5MEY5MTdFQkY3OUYwNDUzCi06MTA0QjYwMDA2NkY4NEY3QUFGN0ZEQzM3OTAyMUZGMEIzQTUwM0VDRjhCCi06MTA0QjcwMDBFRkRDRjE3MkREOUQyODRDNkExNDQ3NjRBQjBBODVGQ0JBCi06MTA0QjgwMDA4RDU0QTE5RTAwQzdGNzgzODFGNjY3NEY1Rjk3MTU3QTEyCi06MTA0QjkwMDA3NzY5MUUzODQ1RkI3M0Y2NUFGMjJFREQ1QjFCNzdBODRBCi06MTA0QkEwMDA4RjYyRENDRjk0RkQwMTlENEYwNzY0Qzg1QzRGREI3N0JCCi06MTA0QkIwMDA2QTE0MkEyNDQ4RjUzM0M0NEY0MjMxNzQ1QTc1RkFEQzFBCi06MTA0QkMwMDA0NDhCNEU3MTRGNzM3REI4QTk3QkY3NDMxMzJBQzVGNTBCCi06MTA0QkQwMDA3MDNCQjg1MjE5NkVEQTg1MjgxNEJFN0Y4OTc5N0M3QkM4Ci06MTA0QkUwMDA3REI0MTE0MUE0MkUzNzcxRDRGOUJBREEyOUZGRThEQTdECi06MTA0QkYwMDA0QUM1Q0U3MUMyQzZGOThBNkZEOTRBNDE3QUE3RkY2MzA2Ci06MTA0QzAwMDBCMTk3RTM5M0FCNjlCOTQ2RjY0ODEyRUE3MUMyQjk5NTE4Ci06MTA0QzEwMDBGNkUyMDg3RkRGMzg3RjBFNjA1Qjc3MEE1OUQ1NTUyMUIxCi06MTA0QzIwMDBEN0Y0NDEyMUY3NzQ0REM4NUQ3RDU4QzgxRDNEMjY2NEY5Ci06MTA0QzMwMDA0RDFGMTMxMkM4ODk3QzNBMjQ4OEY3REVFOEE5Q0Q2NDk5Ci06MTA0QzQwMDBCOEZCN0IxMTI5Nzc4QkU3MURBRjE0QkNFNjc5MUU4QTcwCi06MTA0QzUwMDAwQkJCOEU3QjI1RjJEM0MyMTdEMTI1OEFBMUUyNzkzOTBECi06MTA0QzYwMDBDMUVENUZBNDZDNzA5MDdEMzFBMUY5RDNEMTRFRkJFMjEwCi06MTA0QzcwMDA4RDQ5MkYyQ0Y2NEQ5OUQ3NkY2RjNFQjE3NzNGNzdGNzVGCi06MTA0QzgwMDAyMEIzNkE2MUZGQjg1MUM3NDA0MUM0MTE0OEQ4QzBFQjk2Ci06MTA0QzkwMDBEN0VGODQ0QkE1RkJGOTc1OTdBOEVCNTBDQzU5NzI3MUVGCi06MTA0Q0EwMDA3Qzc5MzdCRTlCMzhBODdFMTZFRTE3MDRGRUE1NDU0NUQ1Ci06MTA0Q0IwMDBBNTlBM0FGMEVCODk1MTNDMkQ3NTE1NjA2RjA3NzlERUE2Ci06MTA0Q0MwMDBGMjU3Q0E4MzY5OTJDNThCRUYzRjlGMjVCQkRDODY4QzY4Ci06MTA0Q0QwMDAzMDNBRTM3QUNBMjQxMTk3ODkyQkEwQUM0QUFBNDVERTYwCi06MTA0Q0UwMDBCQkUxQkFEN0IwQzc5MENGOTgwQjZERkNCN0RGMzdGM0Y1Ci06MTA0Q0YwMDBDRTExMkFBMzhEMTZBNTk1RURDRDJDMzBEQTY3Q0I5Mjc3Ci06MTA0RDAwMDBFMEMxMzUwNEQxREYzRDYwNjU4RUY3MThGMTAxOTc4OTY4Ci06MTA0RDEwMDBFN0YyNDgyNkU3NkVDNkQzMkQ0RjY2MUM3RDhERkFGMzY5Ci06MTA0RDIwMDA2NzM1NTc4NkU3RTExRjc1RThCNjFCRjkyQTY0NkRBOTU4Ci06MTA0RDMwMDA5MjQ1MUNDQjhEMzk1NzYwMUY5Q0JDMUYxMUI1OEVDMzhCCi06MTA0RDQwMDAxMzZCQUY1MzIzOUU3OTg1RkNGM0JDMzFGMjZGQzFGNzJGCi06MTA0RDUwMDA1N0NFQjc1MUNGNUY2NDZBODFFMjk0NERFMzNERTQyMUMxCi06MTA0RDYwMDA2RTE4M0RFNTk5NDAyOTE3MTQ3NTFFMkJEM0Y5MkZENkRGCi06MTA0RDcwMDAxMzEzRUVEQkU2NDNDN0ZCQUNBNThFQ0U3NENFOUQ3NTU4Ci06MTA0RDgwMDBFNjM2RTY0RDE4NjEzRTZGN0UwRUNENzhDQjE2Rjk2RDk2Ci06MTA0RDkwMDBGNjg5QzFBMzM5NzczQTc5RDQwQzlDNTkwMzI3QTJENjU2Ci06MTA0REEwMDBGRERDQ0NENzZDNjNBODIzMjMxRkFFOUI0RjQ3RDU0REFBCi06MTA0REIwMDAzN0ZFREJFQjYwM0U5QkY2OTZFOUZGMDFFRjVDOTI3NkY3Ci06MTA0REMwMDA4MUYzNzFCOEZGQkFGMUQ2Q0VEM0RFN0ZFNkE5RkRCQzgwCi06MTA0REQwMDA2QUNFOTU2M0UyM0NFRTNENTNGRjBCQzgxRDRFNjlGMDcxCi06MTA0REUwMDAwNzAwMDAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMDBBCi06MTA0REYwMDAwMDBCRkI1MUNGQzBGMDAzMDk3N0YzQTBGMkJGQTNGMTgyCi06MTA0RTAwMDA1N0YxQTNGMkNCQjg1MUY5OUU2OEZDMjYzNEZERTdEMUU3Ci06MTA0RTEwMDBFNDU5MTgyMEI0MDMzQkFBMzhCMTU4ODg4MzgxNDExNjVECi06MTA0RTIwMDA4ODM1Mzg1MEM1RjNBMUU2NTYwMTJERTgwNUUyNjVBQzlBCi06MTA0RTMwMDA4NENEN0EyN0M1QzBGMDVGOTY4MUUxMjg5MEFFMDZFMjY2Ci06MTA0RTQwMDA0QjQwMzY5MzFDMDMwM0FGMzQwMzgzMDcxMDQ3MDNGMTMxCi06MTA0RTUwMDAzQjE5MDY4NkE5NDBGQTI1MTA2RjkwODZFOEUzMDQ4QTdDCi06MTA0RTYwMDA5RDk0MjFDRkZENkQ0MkU0RTkxQkM1RDRDMUI3OTU1MDk3Ci06MTA0RTcwMDBGOTkzQjUxOTE4QUVFOTMwMzBBOEU5NDFGOEU3OTFFNEEzCi06MTA0RTgwMDA5RDgwNjI1M0I0MjFFQzcwNTUwNjg2QkRCQTBDMEM4NzI4Ci06MTA0RTkwMDA5NUIwOUIxQjAxOTRERjA3OTQ4RkQwQzM2RkJGODMxMTI0Ci06MTA0RUEwMDAyQTdGOEIzNTJBRkY4QjIxMkFGRjlBMjcyQUJGQzExQjE1Ci06MTA0RUIwMDA5NTVGRTEwM0ExMDE1N0Q1MDlEMEQ4MDMwMDAwMDAwMDk4Ci06MTA0RUMwMDAwMDAwMDAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMDMwCi06MTA0RUQwMDAwMDBCQ0Q3RDBCNzgxNUQ1QjVGMDlBQzc5OTMzRTc5OUJFCi06MTA0RUUwMDA0OTcyMDI4NzEwNjAxMjgzNDQwRDM4ODRGMDE0NzUxMkUxCi06MTA0RUYwMDA4MkM2MzY4NTAzQTJFNkI3QjYxRUE5NTU0NDkwMjNEMkQyCi06MTA0RjAwMDA5QUY2NTczMzc5MTI1RTZENDA2RkU1Rjc3OUEwREE1MjYxCi06MTA0RjEwMDBBQjM1N0FCMUY1QjY2QTkzNDBCRDc4NEIyMTUyNkI2REQzCi06MTA0RjIwMDA0QkRCQTA1RUI1NUVCNUQxOEFEQTVFOTQ3RkFGQjU2NzI0Ci06MTA0RjMwMDA5Mjk5QzM0OTg4QjVGRDZDQkNCRDlCM0RCMzY3RUZCNTg1Ci06MTA0RjQwMDBENzVFNkJFREY1REFGQjI4NTAwMkZBMjQ4MEUzRjg3N0EwCi06MTA0RjUwMDAyRUMwRTkyMjAwQ0MxQzJBQTM3M0EwNENBRTA0RDgyMDlBCi06MTA0RjYwMDAwNDhENzAzMTJCM0Y5NEVBQkJDMkVDMUQ1OEYxQTU1MzYwCi06MTA0RjcwMDA4N0JFQkIwNDA0NkFGRkIzRTJGNjc4M0Y3QkRGMzFGOUZBCi06MTA0RjgwMDA1QjcxMjg2N0VEMjcwOEQ0REU2OUU3OTQ1NzgyMDQ1MEU3Ci06MTA0RjkwMDAwMDUwREFCOTVDNERCMDdFMzY4QzZCNTZCMTdEODdCRTYxCi06MTA0RkEwMDBBRDFFRDg3ODQ3NEIxNTkwNzBCQ0UyRUNERkI3MzcwMkU2Ci06MTA0RkIwMDA3NDRGMDEzODE3MzZBQjI1MzE1NjdGNEUzMjM2NDJCNjI0Ci06MTA0RkMwMDA3MThBNjkxQ0E3RUU4RjhCRDA1RDA2RjQ3NzlDRkQ2RjBDCi06MTA0RkQwMDBDM0NENDk0OEIwNzFEQjI2N0ZBQjFFRTE1NkJBQUYwMUE1Ci06MTA0RkUwMDAzRDAyRjA5NTcxNDlEMEQ5RjNFOTIwRDJCQzk0MzkxNjJECi06MTA0RkYwMDA5OEFDQUVFQTU2REM5QTdBRTIzODFEODg5NzcyRUNCNTI2Ci06MTA1MDAwMDAzM0JFMzQzMkY0N0M4OTgzMTc4NjhGMENCQzAwQ0MwMzBBCi06MTA1MDEwMDBEMEEwQTJEQkMyN0EwMEU4RkJDQzdFNEQ3QjdDMkQzRThCCi06MTA1MDIwMDBCQUYxNEY5QzNGMUY3RjFBRTg4NDA3NTAzQkUzODlDOEMxCi06MTA1MDMwMDAxMDNDMUI3QzAzREQxMkMzQjc1NTBDQzZGREFDNDkwRUZBCi06MTA1MDQwMDAxQkE3Q0FENTRGRTY3ODgzRjM5NDNCM0RFQjNGMTVFMUIwCi06MTA1MDUwMDAyQ0EwNzkwOEIyQUJCRjRDNzg2NkQ5RUQ2NkIxOTk2M0U0Ci06MTA1MDYwMDBFOUNDMkI2NzNFMUZFNzY0RkQ3RjA2NTE1QzgwRUQzQjdBCi06MTA1MDcwMDBFMzU2QzQ0NThGQjJFNUMxN0JEMDZFQUY5OURFNzZDM0VGCi06MTA1MDgwMDBFMTI3ODRGODk5ODlGOEIxRTI0ODhGMEUxRDRCNjFCRDg0Ci06MTA1MDkwMDBBOTk2Q0RBN0MwODIwMTI5OTdDOEM2ODQzMTAwRjlGODI2Ci06MTA1MEEwMDAyRkY2ODlBQ0U5NTU0OEFGNjM0Q0Q2OTZCRDFGMUJCM0FDCi06MTA1MEIwMDA5QTI0RjY3Q0RDRkNCNDIwQjMzMjAyNzc2OUFGODQwMDFBCi06MTA1MEMwMDBBMTI5M0Q0RTFGNTk5Q0VFQkI2Njc0RjQzM0JBM0QwQUNDCi06MTA1MEQwMDA5MUNFOERBQzZDOTE1OUJGODhCN0MzOTFGNEZEMENBNEVGCi06MTA1MEUwMDBBNkIzNTNGN0Y2QjM3QUM0OTJBMUI5OTJDNjI1M0VCQ0QzCi06MTA1MEYwMDA1MTNBREREOEM4NDg3QUEzNERGRjFEOEQyQTk1RUQ4RDE0Ci06MTA1MTAwMDAxQTc0RkIwMTVBMUJFMzU0REUxRUJBRTVCQkQ4N0Y4MzM5Ci06MTA1MTEwMDBFNUQ3RkNBQzk0QkI2RTc4MThFQjJEMDAwOTFDMkYxMjYwCi06MTA1MTIwMDBFM0ZEODNBQzZBRjc2QjU4MDcxM0YxMUUyOUU1RTVCMzdECi06MTA1MTMwMDA4ODE3MDZFN0I3MTgyNjExMkYzRkI2RjFBNDQzMzdGMUI5Ci06MTA1MTQwMDA2QjhCQjEzNDA3QjJFMEQzMjk0MzY1NUUzRTBCRTg0MTc3Ci06MTA1MTUwMDBGNkU1NTBERDFGQ0ZGM0Q0N0Q1QUExQTczRDQwMTFFMTA0Ci06MTA1MTYwMDA4REVBNEM1NEFDMTBCODNDOEFDODdENjAyMDlDMEM1RjIyCi06MTA1MTcwMDA1OUU1ODIyRDU3MjQ2OUZBNDAzNzlCNUY3OEI2NjJFQzc3Ci06MTA1MTgwMDA2NDlGNkUxMUJDRkMzNTRFRTBGNDUxMkVBODU0QzY2MEVECi06MTA1MTkwMDA2MENGNzFDNDhCMjFBNjM3QjJCMTgyRDM0QkJBQkE2MzQ4Ci06MTA1MUEwMDAzOEE2NjI0QzY2RUIxOEY0QTVCNUJDMkNGQzA1OTVGMjRDCi06MTA1MUIwMDAxQkZEMEVEQzI1OUYzRTdFMjRBOTI3OTVDODMyRUVCQjQxCi06MTA1MUMwMDBGNkZBOUQ3QkVDQTA4QUZDQUY0RTE3MTNFOTcyODREN0U4Ci06MTA1MUQwMDA0QUIwQzlDMzY2NUQxNjcxREU5RjFFREMyM0FGRDcxMUNFCi06MTA1MUUwMDA5QjlGREI0MUE1RjYzMkFFNTdFNUQwN0E3NTE4NkNCREIyCi06MTA1MUYwMDA5MDdGMkFGOTdBNzVDODk2M0E5QUY1N0EwMEMwODM5NzEzCi06MTA1MjAwMDBEMDIwNUVCQTM4NUVDQTNGNjVCQ0I0RjRENjI3QjJDQ0IzCi06MTA1MjEwMDBBM0RENUU0RjE5MENBMzhDRjBBMEU4MDhFN0U2MjY0RTRDCi06MTA1MjIwMDBCNzE2QTNEQjZDRjI3NzM4M0M0ODM5ODdFM0M5RjIxMzMxCi06MTA1MjMwMDBGMTdFQjFDMEM3NTk2MEYzODk4M0E3MEQ4NjU4OUIwRUQ0Ci06MTA1MjQwMDAyMzlFM0E2QjUxNkU2RDJFMTU0NTk0NEI5RjE2OUUxQ0Y2Ci06MTA1MjUwMDBCODM2MEVDMjk1RTY3MDk1N0RCQTcwNDlBMUVFRkE2QzJCCi06MTA1MjYwMDBGQ0Q4OUVDMThGOUIxMDZFNEU3N0I1OUNFRUM0NEY5NUI3Ci06MTA1MjcwMDBFRTFDQjgwMkM4MEY3QzlEMTM3QzlERTU3Rjg5NzU2RTdFCi06MTA1MjgwMDAxRjVDRTcyNDVGRTdGOEE3QjNDRUNFN0UwRUFBNTE4RjRFCi06MTA1MjkwMDBFQkI2NDI2MzdDQzhFMEI4NTZCMjk0MkI3MDdGMEQwOTIwCi06MTA1MkEwMDA3MEJGQzFFODAwRTExRkM3RjRDQzcwRjNGM0JBMEU3MDExCi06MTA1MkIwMDA5QjEwRTBGQTg2NzQ1OTRFRDIwNUVGMEE5OUU5MkMxNTM1Ci06MTA1MkMwMDBGODdDRjNBOUM5MTFFNjAxNjlERjQwQkYwMzI3RTNERkRBCi06MTA1MkQwMDA4NkMzNERFQkY3QkFFMEJDNTk4OEM0MDhDRUQ5MzAxQjYxCi06MTA1MkUwMDBFMTdDMjdCQzM0QTcxQjg2RUZFRkY1NDZCNTQ5RjYwMUY0Ci06MTA1MkYwMDBCQ0RGNjhBRERGRUIzQkYxRkRCNTEyQTRCMkU5OTc3N0Y3Ci06MTA1MzAwMDBEQTcyMDFENDJFODVFNjdGMTNFM0MxRTk4ODg3NTM2QkY3Ci06MTA1MzEwMDAyMENBRDYyM0RDM0MwNkU3MDE2MUY2NzIyRUVCNjc1NzA0Ci06MTA1MzIwMDBBMDQ5NzZFMTc3QjhGOTBDRTJENUY5OEVBOTNCRkVCQzJECi06MTA1MzMwMDAxM0JGMUZFRUJCQkYwOUM5N0IwNTg2REZCNjk4NTg4MzM0Ci06MTA1MzQwMDA3MEE5QTU5MEM2MzVGMEVGNUFEMjVEMDhDM0MzREIxNjJECi06MTA1MzUwMDBGQkM3QzAzQkVDQkFEOUVEREUwOTM3QjczM0QzMEI1QUU0Ci06MTA1MzYwMDA3Q0M2M0U5REQxNDk2QjgxNjgzNEMzMTAxQzBFQkQzODhDCi06MTA1MzcwMDBFQkUyRTA3MUI0RUJGMkM3NDFGQURBN0MxRTkwOUUwOUQxCi06MTA1MzgwMDBCQTM0RkQ5M0QzRDUzRUE0QUIzM0ZFRjk3NEY1Q0FCRjRFCi06MTA1MzkwMDAyRTVEQkQyRTE0RkNFQkQyOTVEMjIwRTkyRjMzM0JBMzFBCi06MTA1M0EwMDA1ODM2Qjk5Q0Q0OTY1QkI0RkUzODM2OTM0QjUyRTdGNDJBCi06MTA1M0IwMDA2RTk0OTcxMDY3RjYxOTFGMDY0NDU2NTczNDkzRUJCRDQ5Ci06MTA1M0MwMDA2MDAwRUFBRjZBQTk1NzRFRkE4QUJDNzIzMjVFNkY3NjA1Ci06MTA1M0QwMDAzQkZENkVENDcxNUM4NUM2NDVGMzA4Qzc5NUMzRDAxREVGCi06MTA1M0UwMDA4ODYyNURBMTdFOTA5QzhGOUZDMkYwMDQ3N0Q2OTZGMDc0Ci06MTA1M0YwMDBFRjBDRkM2RUI4RjlDOEY4MUQxQjBGRDU4RkUzQzVGODhDCi06MTA1NDAwMDBEREU3NzMxMjU5RUNERUExRjk3QkM3ODkyRjRCRTQyNDQ5Ci06MTA1NDEwMDAyMkEzNkYwRjYxNTk3RkM1ODVGN0UxQkY5M0UxMTUwNzlGCi06MTA1NDIwMDAyRjhDRkVDQkQwNEY1MjMwODQ3RjczRDdGNUU0QkYwODZBCi06MTA1NDMwMDA4MDY4OTA1RDU3RDQ2RUUxREJGNUY4RkZFNkUyQkVDRjAxCi06MTA1NDQwMDBGOTdBN0Q1MTg1ODZGQTE2QjBGRDA2OUY1QkMyNTcwMTM5Ci06MTA1NDUwMDBFQjdGMTM3NEUyNUI2NzNDMjk5QzAwQTIxQkJCRERDOTk4Ci06MTA1NDYwMDBENkZGNDZFNEE3MkNGQzdEOTlDOEY1OERGNzZGNDlGRDYyCi06MTA1NDcwMDAxOUVENDE2QkEzQTBERkNGRjA3QUEwRjEwMzc4ODlGMTk5Ci06MTA1NDgwMDBFNUYyRUVEMzE0RjQ3QjVDMkU4RUExNzZDQkU3MTcyQkRFCi06MTA1NDkwMDAwQjVDRkQyQzA3NkUxNzAyRjRDQjRCMjJFRTcxOUJCODEwCi06MTA1NEEwMDAxRURBMjVGNUUyQkM1RjlDMjNBNTcxRkY3QjcxQ0U1RjAwCi06MTA1NEIwMDA0ODNGN0ZEMTk0RDI4OEU0MTczQjJFQ0MxOTQ5RUUxQzhCCi06MTA1NEMwMDA2OEU0RjZBQ0QzRUU4MDI5RDFGRTdFNDBFRTBGNjdEM0MwCi06MTA1NEQwMDBFMzg3QzY0RkQzRjg4QkU3NDhERTdENUFFRTk3NzFGRDIwCi06MTA1NEUwMDBERkJGMTk3Q0E4M0YxRjY4NTQ4NTk3MjYzM0UzMTdFNzcxCi06MTA1NEYwMDBDOUU4NjhGOTlDNjIwNUZEMEUyNzlCRDcwNUI2MUZDQzRECi06MTA1NTAwMDBDMUFGMzNDRkQ2QjA0OEYzNkMwRDU3OTNERkFBNTU3QkFDCi06MTA1NTEwMDA4N0VDQzdBM0VDMzlDQTgzRTFFMDc1RkM1NkFEREFEMjVCCi06MTA1NTIwMDBBQ0Y4NTAyMjVDREY1MjdDQzlFQ0Y2QTYzRDVGQTc5RTJBCi06MTA1NTMwMDBFOUNGRkFBNEYwQjU2NUMwRDcxRUU2N0E1NkJCOUNDQzdECi06MTA1NTQwMDA2RTRGNjVDMEEzQzQ0NDhGOUM4ODVERDYyNUUwM0UzNzZFCi06MTA1NTUwMDAxNjhDNjdBNjE0MTMxQTBGQTFGRjY0ODIyRDdCQzYxRTNBCi06MTA1NTYwMDBGRTRERDNENTBDREUwMzU3ODQ0RDIxOEVGNURGMDkxMzk0Ci06MTA1NTcwMDAxOTlDNUFBMTA0M0U1NkZGQjc2NTZCN0I3RThGRkVCRDFBCi06MTA1NTgwMDBGQTEwNDgxQTgzNkJEOTZENEQ4QzVDNjFGQ0NERjcwOTFDCi06MTA1NTkwMDA1OERFOEE3NjIxMEE1RUVCQ0I0REU4Qjc2QUM1NEVFNzQ2Ci06MTA1NUEwMDAwMURDMjU3RUJFMEFGRDZBMzI3MDM5QzBBNDlDMkU4RkI0Ci06MTA1NUIwMDA0MTdGMEM5MDMzNjYzODc5QzBGRTg0RTNGRUExRUY4NjBDCi06MTA1NUMwMDBDMzUzQzQ5NjRGMzQ0RjkyNEY0QjQ3OTY0RkVCNzhGRkRGCi06MTA1NUQwMDAxNkZCMEZFNUNCRjhBMUYxRThGQjcxMkIxNENGM0E4RTQ3Ci06MTA1NUUwMDBDRDc4REY2QkQzQTExRjk2RkM1M0M3Mjk4NDhBMDBFQUNDCi06MTA1NUYwMDAyMzkxM0E1MTRCNjM3QkU4Q0E0NUJGNTM2Qzk1MENERDUwCi06MTA1NjAwMDA4QzZFMEEyQjNCMDU5RjdFNzJCQzMzMzk1N0NCRkRDNDkxCi06MTA1NjEwMDBBNkUwRTZBQjVGREI3MjY4RTJENzlGMTMwNEY0RjMxQUVGCi06MTA1NjIwMDA0Qzg1OUY4RUY1ODZFOUQ5RjhFMURGOTAxRUZEQUVGQTM0Ci06MTA1NjMwMDBCMjZBMDFEQkI1MzI3QTJBNDUzOUI2NEMyNDNCRjdENjNCCi06MTA1NjQwMDBCQUE1QjlFRUVGREYxMzFERkJEODU5N0ZEMEU1NTk1ODQ1Ci06MTA1NjUwMDBFN0VCMkZENzg5NjY2MERBREZCRkZFRjJDNzVDRkY4MjE3Ci06MTA1NjYwMDA3NThBODcyRjNFRUVCQTg4Njg2QjE0OUM3Q0ZEM0ZFOUYzCi06MTA1NjcwMDAzOENFQkE5REM4MUY0REY2QkE5NTA2NTA5RTZDQUJDRDdDCi06MTA1NjgwMDAyRUJGODY1RkI3MEEwMUY3Qjc1ODFEOThFOTJDREZGOURFCi06MTA1NjkwMDAyNUMxMjM2NzlENTI4NTE0MTg2QzlEQTVFNzI0RDI0RjIwCi06MTA1NkEwMDBBNEIxQjNFQTc3QzBGMEUzNEEzMTI1QzM1RUIzRkJCM0RDCi06MTA1NkIwMDBDQzNEQTU2Q0ZEM0YwN0NFNUY5RjhDNzJBNjJFMkVDMTAwCi06MTA1NkMwMDA0NjY2OUY0MUE1RUY2NUI3M0Y4NEFERjA1MDlERTFGRTcyCi06MTA1NkQwMDBDREFGRUREOTdCMzdGQTk3RTZGQUM5NUY5QUY5QkUwRURFCi06MTA1NkUwMDBFQjJFN0FBODkxQjhGRkI0RjdCMTVGOUYyQUIwNzEwRTg0Ci06MTA1NkYwMDAxQTdFRERDRjFFRUQxN0ZBNUUyMTNGNkY5NTQ0RkIyRjFBCi06MTA1NzAwMDBDMkE3Q0VDMkVGODE5NDkxODNBNjY0RDZCMEY2N0Q5NUYwCi06MTA1NzEwMDAwMkVEOUI3RTc4RjY4QkZGOTdCRTBGNTE3Q0EzNkZGRTQ4Ci06MTA1NzIwMDA0QkRGMzg4QjdERkZCOUIzN0RDODM5MUMxM0Y4M0Q5MzJGCi06MTA1NzMwMDA5NTgwN0FDQ0IxRkU2RjlDQzVEQUVGM0YzQjdGNDRGRDhDCi06MTA1NzQwMDBBQTBFRTdFQkEyOTNDNTRGNzhFQjk3MjJCREIxRjVFODFGCi06MTA1NzUwMDBGREZEQUI3NTc3QjJGMTBFNDI0RUMyOEZFNTFDMEVERjM4Ci06MTA1NzYwMDA0MTg0MEZFOUJFRkZCN0FGQTAxRTc4QzAxNEM4RkY3NDE0Ci06MTA1NzcwMDA3MENFMkY2MzY4N0Y1Nzk5MDJFOTg3OEJFNjBCNjk3RkFDCi06MTA1NzgwMDA5Njc5MkU5QTdGRkRBNDg5QUNCRjg0MTFEMjAyRUNGRERDCi06MTA1NzkwMDBGRUFBQjczNzlGQzVFMDVERkMxRkQyMTYyQ0RGN0E1Q0VFCi06MTA1N0EwMDAyQTQ4OTYwRjBGQUZGMzdDQjFFOTdEM0VBODA3NDNEMjlDCi06MTA1N0IwMDA0MkJDODNDNkUzMTBCRTk4MTE3N0QzRUJBMERFMjIyNzRDCi06MTA1N0MwMDBDQzZDRkVCNTk1MTJGNzM3MEE5QTQxRkE5QzFDNTYwMDJDCi06MTA1N0QwMDBFNzMxNUNGQjJCODdBMURGMUMxOEU4OTYxMDBFNDdERjMyCi06MTA1N0UwMDAzRTc2QTFCRTY0RUE4OTcwMjg3MjIyODlFMzQ4OUEwMjUzCi06MTA1N0YwMDAzQjcxREZDRUJENTg3N0NGRkY2NjA3OUVCODQ5RjAyOEQyCi06MTA1ODAwMDAxQTg3NDc5MTBEMzM5QjdGRTlBQjM2M0M0RTNGMDA5RDk1Ci06MTA1ODEwMDA1NDE3RTIwM0QwMUYxRTgyQUYyRDkwQTg0NzNGODU5NUY1Ci06MTA1ODIwMDBDQkZEODVBRDExQUZGRkVGNTE5QjhFQkY2RDk3QUQzRUE4Ci06MTA1ODMwMDBDODFBNDcwMTY4QTZGRUFCQzdDQzUxQjFGRjk2Mzk1Q0M4Ci06MTA1ODQwMDBFRkQwQzEyMDdGNzgyQkIzMTM2MTA0M0Q2RUIzQUQ3N0U5Ci06MTA1ODUwMDA2Q0M0Nzg4NjFGRTMxQTlBMURENzg4NzM3RDI0RkMyOEIwCi06MTA1ODYwMDBGOUM1OEU5NjhCNjRDNzBDRDc0RkM0RjBFQTQzQTEzMkJBCi06MTA1ODcwMDBBRkRERTJFODJCMDEzRDJGQzNFRkUzRjVGM0Y4QzZDODM3Ci06MTA1ODgwMDBBMkEzNDcyMUJEOUUwQ0ZFNDFCRENFNkVCNzVFNEVBOUMwCi06MTA1ODkwMDA1QTU2M0NBNTQ3RDRERkZFNzlGOEUzREY4NzdDNUQ1QTkyCi06MTA1OEEwMDAzNkI4RkU1MTc4NzNFODJBQjM3RjI1NUY0OUE1Mjk0RUEzCi06MTA1OEIwMDA5Nzg4QkJFOUZGRDczNjVEMjlGOTZBMEFGRDlGQTAwRURDCi06MTA1OEMwMDBGNzNFQzhCRjBGQjNGNzE4QkYwODI3NzRENDJCMjVFMEU1Ci06MTA1OEQwMDA3MTIwMTVGOUMwODU5RjNGREJGNDVGMkY4QjM2M0ZBNjAzCi06MTA1OEUwMDAyOEVFMjlFODI5RjJEM0E5NDU4QzdGODQxM0JGNzNDQTE3Ci06MTA1OEYwMDAzRkQ4RTNBRUZGRjA4NjE3ODgzRjBBNTRFMjBGNDE2N0I2Ci06MTA1OTAwMDBGQzkzNjUxQzRCMzI1Rjk3NThGQjU1OTJGOTNGNThGQTUwCi06MTA1OTEwMDAzRTkyOTJEOUY4RTQ0RjEyOEZFN0FBNzUwOTVEMkRBMTQ2Ci06MTA1OTIwMDAzODIyRDkxRjk5NzBGODY1M0VGRTk1MEVGQzU2OEFFMjIyCi06MTA1OTMwMDA5MkEzODVGRkJENTFDMkVGOENDM0UwMTdFNTk5MDRCRjY4Ci06MTA1OTQwMDA4NEU1NzBGMDBCMzYzQzc5QTAzN0M5MjhENzc0MkU1RkY4Ci06MTA1OTUwMDAwMTk2RTg2RUJENjRCOURENkY5RTJEOUYwMEFFOEZCQkQyCi06MTA1OTYwMDBGNUMwMkZEOEZEOEM3NjNFOUEzQ0JBRjkyQzFGOUE0RjgxCi06MTA1OTcwMDA5MTNEOUYwOTIzQ0Q2N0JDQ0NENzYzQjlDQ0Y3M0JCNTJDCi06MTA1OTgwMDAyNkExQzdEOUJBRTQwRTQzNTdGMzY0QkVERUQ3MERBRUU1Ci06MTA1OTkwMDBDQkY1MUY4QkFFNEUxQkU1M0M5QzcxRDgzQzY2Q0E5Qzc4Ci06MTA1OUEwMDBBRTY2OEQzNDhGNEExQjlFNEUwOUU2QkU4QzdBRjEyOTc1Ci06MTA1OUIwMDA4RTdGNjdBOTY3NUQ2RUIwQzdFRkY0M0JFQkIyRDZCM0RECi06MTA1OUMwMDAyRUQ3RDhGODE4RUQ3QzE2OEM3MjNFMzcwQ0FEQ0I2MjEyCi06MTA1OUQwMDA3QjVEMTIyM0NEQzdENUZFMjI3QkZFMTdEQkVEQzlFRTIyCi06MTA1OUUwMDBCODQxOUVEMjhDNzY4NjI1MjUyRTk1NjcwRThEQzdEQTE2Ci06MTA1OUYwMDA3RDVFMkUxODZBRjdFNzk2Nzc5QkFDMzBCNUJCOUNEQUQ0Ci06MTA1QTAwMDBENUYyRkQ4RkI1NEJCQUZCMDMyQkQyOENGRTgwMzZCNDlBCi06MTA1QTEwMDAxNTk4MUQ1M0QyM0FCN0RBRUVGRjJBRkFBRTZFQjBGRkYwCi06MTA1QTIwMDBBQkRERkRGQjVCQTFEOUVFRkY1QTdDREVCNEUwMjNBNzIyCi06MTA1QTMwMDBERDJBMkZCQ0E3M0JFRDUyRDg0RUE4MTk4NEUzN0E3NzE0Ci06MTA1QTQwMDBCQjc5NzIyMUNERUI4NDM4QzMyOEZEM0ZCRTU4QjIwMzI5Ci06MTA1QTUwMDBFM0ZBNzkxMEU5QzRCQzhFNzYzOTc1MkZDNkZEMkQ0QjVCCi06MTA1QTYwMDA4NkZCMzE3RkMwNkYwOEU4NTM4QkNFNDk3RDE3REJFNTlECi06MTA1QTcwMDA1QTdFOERGMjNGQUE1MzBGNjNERDEyMjFEMTUyNDlGOUFDCi06MTA1QTgwMDAwMzk0MUZEMDIwQUI5QURGQzA3QzBCMDNCNkIzQkExNkM5Ci06MTA1QTkwMDA5M0QzOTg5N0QzMjYyNDJEREMxNzdGMkUyNTM3Q0IyNDNDCi06MTA1QUEwMDA1RkI1Q0I5QUIwRkY3QzlERUJFOUQwNEZGQjk2MDNENzU3Ci06MTA1QUIwMDBENkQwMTcyOURGMjE5N0MxODVGRUE3QjYwQ0I4NkUwRjg3Ci06MTA1QUMwMDA0REVDQzFGREY2RDYwMjg1RjQ2NDY2NjA5NUExN0NCOTAzCi06MTA1QUQwMDA1MTBBMUFEODVGNEZDMTU3MDlERTZENEQzQzlGNjFEQkZCCi06MTA1QUUwMDBFN0JFNEFGMERFMjYwMEM1Njk2RkYzRjE3Qzg2QUQzRTY1Ci06MTA1QUYwMDA1NTZCRDZCMEJGRThCODJGNTNGRTQzOEVFNkFGQjRFMTg2Ci06MTA1QjAwMDA0MEY4M0U1QjQyRjBFNTgzNTY3NUE1NDBFMkFCMDdFREY5Ci06MTA1QjEwMDBEQkI2MzkwQUU5Q0JEQjYyMTU1NUQ0REYxQzk1RjRENDJBCi06MTA1QjIwMDBEQjEyMTU0REE0NzdDQzA5OTI0RjNFM0Y2QzkwREQxQUU1Ci06MTA1QjMwMDA5REFEODA4NUY1OThEMTg0N0E2NjY0NTYxMDczNUUyMDk5Ci06MTA1QjQwMDBCRjA4MzA5OTAwMjI1MzIwOEQ3NTFGNzQ3Njk2QjIzMkFCCi06MTA1QjUwMDBEQUMxRUM5MjdDRUM2RjI5NUM4OTc2RUYxQzg2NzdCNDE1Ci06MTA1QjYwMDAyMzJDRjMxMERBMjU2MUIwRkZBNEZEMjZDRURCMzc1RUNGCi06MTA1QjcwMDAwMkM5MTg1QURGNjhFN0UwRjcyM0RBNUREMUY0MjhEQkMxCi06MTA1QjgwMDA3NThGQUU1REE0ODNEOUZEMzM0NkQxQUU3Mzk0RUREMjRCCi06MTA1QjkwMDBBMzZDRDdDRERCOURENERGNjE3MDdCNEY2NUZGQTFEREFBCi06MTA1QkEwMDAxNkM4QjA2NzUxNkZGN0M0RjMzMkRFNjdDNkRGMzJDQjc5Ci06MTA1QkIwMDBDQ0Y4Qzc2QkIyMzdBRTc2QjJFRjlEQjhDN0M5RTY4QkVCCi06MTA1QkMwMDA0RTg5NDEzOEE1OTNCNzc3RjRDREUxREUyQjg1MTdDNzExCi06MTA1QkQwMDA0REY2N0REQkI4NEJFMzI0RDdDNjVEQzZDQjA5RjZGM0EzCi06MTA1QkUwMDAwOUY1NzZGRDUyQkI3RTU5QkQ5OTQ1QkUxN0Y4RjgzRUMyCi06MTA1QkYwMDA1NDg2RkU5MDExRDYyMTFGQjhGRUY4MEE4M0ZEQjg4MEE2Ci06MTA1QzAwMDBDOTRBMjNGQjRGMzJGNURFNEM3OUE3Q0E1NjM1RjJFQjcxCi06MTA1QzEwMDBCNjA0Q0ZFRkYwMjMzMzIyMUYxNjAxRjkzNTdEOTBFQTQ5Ci06MTA1QzIwMDAyQzQ1MzkwMTY2NzRFMTk4MjFGRUYxOTk0RjlCQzhDRjRDCi06MTA1QzMwMDAwN0M2NDkyMENDQTFGNTMxQzg3RjlFNDEyNzk5NzRFMTYwCi06MTA1QzQwMDBDRkYwRTc3QzUyM0E5OUVBRjNDNkM5RkU1MTc0QTI3NEM4Ci06MTA1QzUwMDA0OEEzRTIxRkE1NzM5NEVERDJBMzZDRDczREJBNzZGRTlDCi06MTA1QzYwMDAwRTYxNzRFRDNBNDdEOTJFM0RDQTc2RERCQzVERkI1QzEyCi06MTA1QzcwMDA4NUVGRTdGMDU4QjM1OUNBRTA5RUE3N0FFQUVERjM4MkMwCi06MTA1QzgwMDBERUY3Njc4NTNERjVGNTMzMTVEQUZGOURCQTdGOTZFQUI1Ci06MTA1QzkwMDBBOUFGNjc3MkRFRjM3RTc2OThFQUVCREI3RTVBQ0RCNjZCCi06MTA1Q0EwMDBCMjUxRjNDOTdGRkY5RDdDNTJBNjlFQzQyRjNENDdDQ0M1Ci06MTA1Q0IwMDBCMERCMzJGODRBRDUwM0Y4N0RCRUFDMDNFNjRCRTVDNzRFCi06MTA1Q0MwMDBGODNFQzVDQUFDN0VCOUJCNkRGRTRGQ0IxQTk1REI2NEZFCi06MTA1Q0QwMDAzRDgwRjZFM0JGRkEzQzFCN0QxQzVFNjdCRTI3ODNENzgxCi06MTA1Q0UwMDA5MUJGQUY0QUI2QkUzNTVDOUU0NzBEQ0ZDMzk0MjE0OEU1Ci06MTA1Q0YwMDA3OTk4QTUzNTY2QjVDOUU0OTJGQzBDOEY3QjY1RjY3Qjc3Ci06MTA1RDAwMDA5OTkyN0NEOEU3QjJGNzY1MkRDOUUzNzk3NjdGMTcxNEFECi06MTA1RDEwMDBDOEE0OTdDODRDQUVBMURFQTM0MEEyQjY5OEUyODYyMkUyCi06MTA1RDIwMDBGOUZCRTRGMDQ5RjY4RDIyOTdEQzJBMTkwMTZFM0I2RkVFCi06MTA1RDMwMDA5NTVFRTkwMDU1QUZGMTcxODMwNjkwN0M4RDQwM0YxOTY3Ci06MTA1RDQwMDBEMzM5QThGNTlDODI3QTlBMkUwMDdENkYwOERDN0YzRUJECi06MTA1RDUwMDA1RjQzNzkxNjBCRkNBM0ZCQkQ4Q0ZBMTVDQ0FENzAzQ0YwCi06MTA1RDYwMDBGNDMxRkE5NUZCQzlERkY5MEZFRkY3MjRGMDA2MzA5RjA1Ci06MTA1RDcwMDBGNzBDMEEyMUM0RENGOUJDQkU3ODhBMUVDMkIxRTNDN0E1Ci06MTA1RDgwMDBBNTU5QzAzRkExQkYyNEM1RDM2NUQxMjA3RjI4MTQ0NkEzCi06MTA1RDkwMDBDOTJFNkI4QkFENTVEREVCRkE1NzVGODkzNzhFQTZCNUYzCi06MTA1REEwMDA1RjJGNDQ1OTU5QjRDQUVDMUY4MUNFM0ZDNDIwMThGQTYyCi06MTA1REIwMDA0NzhBQUUzNEZCNDdEODRGMDdFMzk3MTg5RkNGQzIwN0Y3Ci06MTA1REMwMDBFRDRBMzI4REZBQkIzNTMxQ0NFRDc5Mzk0NTdFQzZGNUQ5Ci06MTA1REQwMDA0MjVFQzVDNjRBMTdGRDE2MjlERDA4NTdEODMwMkRCNEQ2Ci06MTA1REUwMDBGN0Q2RTc4QjA2RUFBOTMyNkNFRTEzQTZCMUVGQTQzQTE4Ci06MTA1REYwMDAyMzk5NDU4RjE4RkE1RTdFREQzRDlGM0NDNUJCNEZCNkFCCi06MTA1RTAwMDA5Qzg0REU5REY4RTQ3MEVGN0Q4QTkxQ0NFNjBGOURBQzFBCi06MTA1RTEwMDA3MEJCRDYxN0NDRkVGRUVCNjI3NTg5MzJGMzQ0QkNFMTUxCi06MTA1RTIwMDA3NjgwREZBRENGODUwRUUxNEM0RTNFOTRERjUwRjRGNDJBCi06MTA1RTMwMDAwQjg4ODdCNjgyRjNFMjIzQ0QxNzM0NkY5RUU1NTVBMjE3Ci06MTA1RTQwMDA3OUE2NTIzMDIyMUMzM0IyQzEzMURBRkMwRjgwMTRCMzcwCi06MTA1RTUwMDBEMTg2RTIyNUE4MUYwOTYzMzBBRkMzRjkzM0EwMTVFRDQxCi06MTA1RTYwMDAwQjY2N0Y2MERDMjM1ODZFQzA3REFDMUU1RkEwMjY2NDhECi06MTA1RTcwMDBBNjJGNkRBOURDMDlFOEFGRjYzMUZEODlFQzEzNjkzRTY4Ci06MTA1RTgwMDBENzlGQ0FCODNFNjRCMkZGNzAxRUQxRjkyM0VCRDU1MjNBCi06MTA1RTkwMDA0NjdEQjFFMkQ1OUI1QjFBMUYwNzhDQzczQkYwM0I3RTZBCi06MTA1RUEwMDBCQ0NDNzlDRDEzQUIyRjUyMEFCMkUxNjM3NEY2RjBBRERFCi06MTA1RUIwMDA4QzVFOTg3MjA3NUIxQjU1MkFCRkQ5QTg1MUI5QTUzMUQyCi06MTA1RUMwMDA0RUU1QTY0NjQ2RUNFODFGNkQyQ0EzRkFCRkUxQTc3MzhBCi06MTA1RUQwMDA5MUNGNTMxREM1MEM3RjFERjFGQjVFQjgxMkQwMkUwNTZFCi06MTA1RUUwMDBEQjRGRjA4NTA1QTgyRjZGQzQzQUU5MDFDQzBDQzRGQTRBCi06MTA1RUYwMDAwNEZFRkU3QTY1RDEwMkI0RjMzNzA2OUNGNkQ1MEI1MDRBCi06MTA1RjAwMDBBRjFFQUE1RkQ0NTI4NUVGNkQzRjQzODc3MjM5QjVCRjhDCi06MTA1RjEwMDA3NTAyRDhFNzE4NENGNTIyRDdCRTc3QjdFMkEzNzlFMDJGCi06MTA1RjIwMDBERUMyQkYzRkI3MDVGQjBCQzg0RTNENDVGMDBDRDYzMTc2Ci06MTA1RjMwMDBFMDhBNzU5NUQ3N0JEQkFGQTdGRTQ5MDRCMEYxRkVBQkQ1Ci06MTA1RjQwMDA3REVEMDJGNDJGREMzQTk5RkJGOTYxRDlEMjkzRTA5MTBGCi06MTA1RjUwMDBGQkY1M0ZDMkEwMkZEMkU1QjIzQ0NBNUY1MTE4REQ5NEQ5Ci06MTA1RjYwMDBCMDQ3QjdFNkRBNzA4RkIyMUY5MDkzN0NCRjdCMkVGQkYxCi06MTA1RjcwMDA3RTM5QzQzNzI3RDlENzZDMzg0RUNFMEZBNkVEODc0ODY3Ci06MTA1RjgwMDA4Mjg1RTNGRThBRjNDNTNGN0JEQzVCN0QxRjBGMkZFQTMyCi06MTA1RjkwMDBGQ0E0ODlERDQ3NkJCQkJBNzFBOUU3MjlDOTFGMjJEREMzCi06MTA1RkEwMDBFN0Q0RjREMUI2QTJDNEJCQjlERTMwQ0FGMUI3MkE5QTlECi06MTA1RkIwMDAxRDhGNEE5MkRERTRFMERCRDEzRkZFOTRCMTlFQkU5ODk2Ci06MTA1RkMwMDA0OUY5NDc4MTMwRTdDM0QxQzJGRDA3MUYzRkM3RTNGNDVBCi06MTA1RkQwMDAwMzBGNTY4QzFCNDlDRjhBRDU4OUE4OEMwRENBOERCQzVFCi06MTA1RkUwMDA5QUEwQTdBRUNEQ0Y0MzIzNkRCMDFFQUQyQ0Y0RDRDMzgxCi06MTA1RkYwMDBFNTI1OUVCQTRGM0JEREYzRkRERkJCNUVCRkI0RjU0NTQzCi06MTA2MDAwMDBBN0ZEQkU4Q0ZBOTM5OUYzMUM2NUJGNEVCREE3N0Y4MTk3Ci06MTA2MDEwMDA1OEM2RDZFMUY5RjkxMkM1NDM5RjlGRkZEMjZEMzMxOEQ4Ci06MTA2MDIwMDAzRDNFNkZFMkVFQzlFQ0RBRkExNjFGQzYzM0ZBOTgwQTYzCi06MTA2MDMwMDA1Mjg5RkI3MDUyQjJGREVBMzAwMUYxRjkyQkZDMTcxQkJCCi06MTA2MDQwMDBFRjk3RjZGRUY3QUM3REVFODc2REJDMTNGMDlDRDRCM0YyCi06MTA2MDUwMDAwQkRGMkZDMkY1N0JENjA3QjY1Q0VBMjRCOTcwNzBCMEFGCi06MTA2MDYwMDBDRUU1QzJDMTAwQUY5RkU5REZERTgyNzJBMDRGRTA3NUNFCi06MTA2MDcwMDBEMUJGN0QwMUY3M0I2RTZFM0Y5RkU5MkY4QkYxOUY2Qzg3Ci06MTA2MDgwMDBGQzY1RjMwNTMzOUQ2NTdGMEJGQjE1MjcxRjMyRUM2NzFECi06MTA2MDkwMDA3ODMyNkI0QzVGMDFFNkJERTk0MDdBQUIxRjEyQTQ5RkRBCi06MTA2MEEwMDAzNTgwNTUyNUEyREVDM0U4OEZFMkREQjIzNjIxMUI3REE3Ci06MTA2MEIwMDAxQzZDRTRGOTAyN0VCODkwRjRGRTY1RjNBN0ZCRDBBODRGCi06MTA2MEMwMDBGNzI3REU5NkQxNEZCQTM4MjFGOEMwRDY5QjM1MTc3QzFBCi06MTA2MEQwMDBBMjI5OTg0OERGODlGOUZFOURBODNGMjc2NDQ2MTI1OUY2Ci06MTA2MEUwMDBGNjkxQzVBNkRGQjM1RjE5NkMyQzg0QkY0RkIwRjkxNENECi06MTA2MEYwMDBCNDA5RUVCODkzRTFFNzc2NEZCQzc0NjRCQkMxODFEQkIxCi06MTA2MTAwMDBBOTVGMzhGRkVEQkRGOUU4NkZBQzE1OENDOUQ4QURBQTExCi06MTA2MTEwMDA0REY4NjJDNERENkZDODg5MTM0N0IwREZFN0VCQkZDNDM5Ci06MTA2MTIwMDBGRDFBOEMyRUQwQUZGQUNDOTFBQjdEMTQ5RjVEOTZFRjBCCi06MTA2MTMwMDBFMUJGNjU3NURFRkNCNkE1MzUyMTRGRkRFMkY5MjNFNzI5Ci06MTA2MTQwMDBENzQxRDI5RjIxRDcyQ0ZCRkNBNTQ4RjI3OEUzNjE4MThGCi06MTA2MTUwMDBFNDQzQ0VDNDgxMzRFNjY3QzJGMzEyNzAzREQwRjFDMzhDCi06MTA2MTYwMDBDRTIzM0Y2Qzc0RkM4MDhFRjlBMkYwQzc5MDc2QkY0QkIzCi06MTA2MTcwMDA4RUI2NjZFMDIxQjM3Q0MyQ0ZGNTVCMzlBRjk2RTJEQzI4Ci06MTA2MTgwMDBFRjFGMTE3NEY0QTcwQTc5MEQ1MzcwQkVCMjYyMzZFM0EzCi06MTA2MTkwMDBCOEFEQzU2MjFBRTNERjM3OTY2QzUzNzFCRDM3OTQ3RTk0Ci06MTA2MUEwMDAzQzdERDAxN0UzNzE3RkRERDIyQTkwRkQ4N0ZCMkU2REY5Ci06MTA2MUIwMDBGMkJDQjZDQ0U3RDdGQTc5RENBMUNENUFBQTk1MjJEM0E2Ci06MTA2MUMwMDBFQ0Q1QUE3MEZFODEyMkM4N0FCRTk0RDFGRkI1N0VGMkNBCi06MTA2MUQwMDBCQjVCQzBFM0VDMDlEMkFGNEJENUU1OTQ3RjJCMTc4RUE4Ci06MTA2MUUwMDAxQ0I3Q0RDNDlCNkNDNzAzMzNEQjNENjhEMzYzRTk5QzBDCi06MTA2MUYwMDA5REQ0RUZGQkE3OEREQ0FGODM5NzBGMEMxMUZBMTAyRTA3Ci06MTA2MjAwMDBBNjU3NjA3QjE1RDg3QzE4RkUzNzk1RjFGQ0RCRDZGMkRCCi06MTA2MjEwMDA0NzA5Q0Y5MjU5NDU3QUFENEY0Qjk5RDg2RTUzRjk3MkQxCi06MTA2MjIwMDBBMkNCMzZENjI2OUYwRDlENUJEMzQ1RTczMzM3N0RDODdECi06MTA2MjMwMDBFMzE0MEZGQUY3QjZBMDVFQjFBOUU3MUFDMDdDQ0E2MEYyCi06MTA2MjQwMDAzQzBEMjgzRjM2NERCRDRBNDUzQzZDREFDMTc4OEJGNDk1Ci06MTA2MjUwMDA5OTJFNzJDRTg1NkNCRjc4NDg4MzM0QjNBODQwRDZCQkU0Ci06MTA2MjYwMDBCQTUxMkVDOEI1NjA5OEVDNTU2RkJDMUE3MEREMzY1NTIyCi06MTA2MjcwMDA3MkQ2Q0M0RkE3OUEzMDA0QjQyOTdFQzhDNEY4NDQ2QkI4Ci06MTA2MjgwMDAzRDUwQkU0QkIwQ0NBQzJENDZGOEM3ODkyNDBFNzQ0OEE3Ci06MTA2MjkwMDA3NjYwQkRCNTRFQTZGOUI0NkIxQzJGNjg4NzFENzdGMkVBCi06MTA2MkEwMDBCRDMwMkZBNjk0REI2MUE1RThFRjY3RTMyODM3RjNGOTRCCi06MTA2MkIwMDBFQkRCNEJDOTZGQjQyOTU3QTk0NzM5NjdEQUY2MTFEMzFECi06MTA2MkMwMDA1MzJDRjRGM0I3MzY2ODU5RDc3REIzOTg3Q0MwRUY5MjVFCi06MTA2MkQwMDBFRkIyOTZBMEZDQTY0Q0ZDQkNFRjgzQ0ZFMEJDNUJBNzYyCi06MTA2MkUwMDA4QkIwMzM4QkRFRjEyMzNGQjc0QkQyQzZEMkM1MjU1OUQ1Ci06MTA2MkYwMDBDNjc5QzJBRjdCRjYxMUZEMDM4NUUwMURBRUZENTAzQkI0Ci06MTA2MzAwMDA5OUZDRkI2ODgwNUNDMEU2NTE1MENCRkRBNjkwNzE3RTg1Ci06MTA2MzEwMDAzNTA2NDlCMjczQzc4MkQ1ODRGQ0U4OUM1QjFENUY5MzQ4Ci06MTA2MzIwMDBGODREOTI5NTUyNjQxOUU1RDUwRDc3OEVENUM5RTc1Qzg1Ci06MTA2MzMwMDAzRTA3RUMzRkZEOTJERkIxRjk1RUIzQ0YwNzg4Qjc3MzNDCi06MTA2MzQwMDA4RkRERkIzNEU2NEQzOUY2MDZEQjk3OUU3RTkyQkRCRkFFCi06MTA2MzUwMDA5MkE5NjU1OEJGRTZGMDU0MDVGMzgwOUUyRjk0MzA0NzBDCi06MTA2MzYwMDAwNkY5Mjc4QTc0RjgyNjg4OTQ4N0Y2MjYxQzhBQ0U3MDQ4Ci06MTA2MzcwMDBEMUY5RkZEOEZCMEU0QTU2OTQyMzJEQjk3QzVFNzJCODMyCi06MTA2MzgwMDBCRDRGOEFFMjdBQ0I1NkJGOTNDNzQ3RjYwRkNGNjc4N0Q4Ci06MTA2MzkwMDAzMDdCQUU1MjE2NTIxM0M5QkYwRTlFMzdFNEU0NDk3RURECi06MTA2M0EwMDBCOUQzOUI0Nzc0RjU3NjZGRkQyQTU4M0EwNkY5RTZBQUU5Ci06MTA2M0IwMDBEQjdDOTA2NkZENUVFM0NFRkY2MkUzRkZEMkNGRjU4MzI4Ci06MTA2M0MwMDBBQjIxRDU4RUZCQ0Y3QTVCRkY1QkZEQTNBOTBBRDJGNThCCi06MTA2M0QwMDAzNTMzQjQ2MjNDN0ZFMUNDRTMyRkY2QkFCRkNFRjg1NDNDCi06MTA2M0UwMDA3N0YxRkZDQTU4OUFGMjkyMzNFN0Y3RTZFRTA1REQ0OUY2Ci06MTA2M0YwMDA1NjdGNDk5NzUzRENERUY2Q0U3M0JEQUY2RjExRTY3RDU1Ci06MTA2NDAwMDA1OTVCN0M4RURFRTBDOTc3NUNCOUFCQ0FDNEJDMzE4NjBGCi06MTA2NDEwMDAzRDNEREZGQjNEQzFGRkE1MEVFRjdDNEY4NjhGQ0NGOUU0Ci06MTA2NDIwMDAzQkZBRTA3MEYzNTE3NjY1RDcyMzgyQUEzNzZGQUE0NTBECi06MTA2NDMwMDBFNTcxNDdCMzQ1ODZDMDM5Mjc5RThCQjZBQTUzNzRBRTIzCi06MTA2NDQwMDBEOTZBRjY2QjJEMzE4QTUzNTIxQ0IwODExMTBFQzZGOUYwCi06MTA2NDUwMDA2NkE4M0FDRjczMEY0QzRDMDM5RDNGNDhDREM2NzNFMUZECi06MTA2NDYwMDA5RkI0REYzOTJBRTdDMzdGNzRCRjY3MEZEM0VGNkFCNUU0Ci06MTA2NDcwMDA1RjQxRkU1QzIzNzdENjBBMjU0M0U3MDIwMjNFQ0IxQzMwCi06MTA2NDgwMDBDRkYwRUQ3RjdDNDlGNzc4RjBCNEVCMTg2NUJCN0Q3OEYxCi06MTA2NDkwMDBGNDc5MTRFRDZBQzUxMUZBN0JDQkRFQjdGRUYzQzE2RjU4Ci06MTA2NEEwMDAyQkI4N0ZCRkY5QzA5MTQ1MjhFN0FFRkQ4OTA0MkE2QjYwCi06MTA2NEIwMDBGN0Q2ODMxMUU4QTY3RDI3QURBMDNDNUVCOTVCQTJGNUI3Ci06MTA2NEMwMDAwN0I5N0JENjg1OUUzQ0ZCMTY5QUZGQjUwRjQ3Njg3RkMwCi06MTA2NEQwMDA1OEY5QTgzRjVEQzdCRTVGRjlDMzk3QTYwMUUzREJCN0Q0Ci06MTA2NEUwMDA5QTA3OUUxRThGRjg3QjQwRTBGOTBDNTZGRkI0MEJEOTNCCi06MTA2NEYwMDBGMzk1MzI1QzlFMkQxRjIxQTk3MkJFN0FFMzNGNDJGNUNGCi06MTA2NTAwMDBCOEJGMEJCQjdBQkU0OEZENzY1REUyRjNCQkU0RUYyNTc2Ci06MTA2NTEwMDBBQUNGNjk0N0ZBQTNGNTNEMjEzRDU5RTBGMDY1Q0JDRkZECi06MTA2NTIwMDA3QkUzN0IzQ0ZFQjRGMjcxNUYxQUYzMTU1N0VFREFBMTAwCi06MTA2NTMwMDAyNDU5QkIzNUJCREUyNkZBNUVGMEYwNDM1MUM0QzM5QTQyCi06MTA2NTQwMDBDN0JEN0FEQUI1MEY3RkQ4M0VBRjkyQ0UzOTBERDRBMTUwCi06MTA2NTUwMDBGQzkzOEU1MUZEQThBOTBFNzBDRDlGRkI2N0FFMjM4RUQ0Ci06MTA2NTYwMDA2NUVERkVGREQ1RjM3RUM3REVCRjFFOTcyMEMwNDRDQTkxCi06MTA2NTcwMDBFQjdERkZBREZDMDRFQkM5NzA4QTg5MzJENkJGRUY0NUQ1Ci06MTA2NTgwMDAzNzFGQUVEOUY1MTI5RDM3RDI0NDE4MjgzQTBCQ0Y0MUE4Ci06MTA2NTkwMDA2NEJDQ0Y2ODBGMzBBMEEwM0M1Q0QzQjVFMTZEOTQ5NzhDCi06MTA2NUEwMDA2Qjc2QkZGOTVCQTRCQjM1MjBCRkU4RTZFN0Q3RjExRkU4Ci06MTA2NUIwMDBFMzRFOEM2Qjc1QTg1RTNGQ0U1MUQ4M0YwQkVEMTZEOERECi06MTA2NUMwMDA5NTlGRDU1RTc0RTI1QTBFN0Y1RkZCRDBEMTdCNTA4RkQyCi06MTA2NUQwMDA3OEUzRDFGRkI5MDdFRjY1NThGNUQxNUZFRUMxRkM1NkZFCi06MTA2NUUwMDA3ODJBQTBBMURDNUFGM0MwQUZBMkUwQzJGRkI3NkRGOUQwCi06MTA2NUYwMDBGMEQ2RjdCRUZCOUQzQjE4MUVERUZBOEQ5RkIwRjZENjk3Ci06MTA2NjAwMDA5M0FGNEVDNEZCMzlERTdBRTRBRjYzNTBGRjU4RjdFNDMyCi06MTA2NjEwMDBDMkIxNDg2N0VCMUU1QjMwNzZBNEYzOUY0OEI3NjlCRkYxCi06MTA2NjIwMDA3QjdERDNGQzVFODNDNzA1REMwNEQ5ODY2Qjk3MTlFQkIxCi06MTA2NjMwMDAwMkZCMDcxNEQ0N0JERjEzNjA2MDYzMkU3QkRFRjVBMUMxCi06MTA2NjQwMDA4MkZBQ0JEMzI2MEMyMDlFRjZFQzdFRTlFOUFGQjNGQUIyCi06MTA2NjUwMDA5QjZDOURGQzU5RDY4OUNEN0ZCQzQ4RkIxQjYzMUY1NkE0Ci06MTA2NjYwMDA1RUI3RkJDMkM1Njc1NzYyRTkzM0IwRkIzNTMwNDBGQjBDCi06MTA2NjcwMDBDNjA5RUJGQjFDNUJERkNBQTFGNUNEN0M3RjE0OEUyOTFDCi06MTA2NjgwMDA4OEZGMzUwRkIyRjU5Qzg2RUJDQUQ2NzNEQTg5RUJGOTMxCi06MTA2NjkwMDAyNkZFNjNFRTg5RUJEOUFCN0FGREFGNDc2MUQ1QkQ3N0I2Ci06MTA2NkEwMDBFMENCRERGOTU5RUQ1QjY3M0Q1NzNGNzZEMTg4N0FCOThDCi06MTA2NkIwMDAyMzFGNEU4NjY3M0FEN0NCRTBGQTg2NkExRTUyMEI5MEFDCi06MTA2NkMwMDAyRUJFRkY5RDNCNjI3QzlERUIxODYyREU3QUU4RTg0NEJCCi06MTA2NkQwMDAzQ0I0RjE5QTZGRTA4Qjg4ODc4MTI3RkQxQUVBNTEyQjMxCi06MTA2NkUwMDA5RkZDMzVGMURENUI4RjNENEJFNzc5RDg1RjU0NjBGQjU0Ci06MTA2NkYwMDBERDVCMzBGODc3MDg1OEZEM0E4MTU3NTZFQjAzRTdGRDJDCi06MTA2NzAwMDA5NkY1QkI5QTc1NjExOUI0N0VFN0ZEQjYxMkQ3NEYxRDk5Ci06MTA2NzEwMDBBMEY1NDgyRkE5RDU1MUZFQTYwQjY4REVEN0E1Mzk3Rjc1Ci06MTA2NzIwMDA1Qzk3RUU1OTg2N0VFRDRDQkM4NzAzNEU1RUUxRDBCQTk1Ci06MTA2NzMwMDA2MkJDRjlCQURENDdDRTQzRkExQjZFM0Q5REY5NkIzODVBCi06MTA2NzQwMDBGRkQ5RUNGRDdENUVGRTFEOTY1RkVERjU3RDZCQzdGQjExCi06MTA2NzUwMDAwQUVBNTdERDNGNTEzNDkxRDlFRDZGRjkwNjk0NDJEQ0Q2Ci06MTA2NzYwMDA2RjFFOTEzNDNDNjc5Q0I5RUU0M0Y4NkZDRTdBREUzOEU5Ci06MTA2NzcwMDBCM0NDQTQwRjI1OTAzRDhFRURFMEU5NjRGQzdFRjJGOUU4Ci06MTA2NzgwMDA3RDNDRkNCRDZCRUY5Nzk5Nzg3Q0UzNThGNkZEQTAyNDI3Ci06MTA2NzkwMDBDMEVEQjlFQkEwQjMxNjU1Q0NDQ0ZEQ0MwNzI5NkI3QzcyCi06MTA2N0EwMDBGMTEwQkNFRDVEMTJDOUY5Mzc3NjQ5MTQ4RkNCOTQxN0ZGCi06MTA2N0IwMDBENzBENjM5RjE5Q0UzODhGRjc0QzQzQjlGNjQ2RUY3RjVDCi06MTA2N0MwMDBEODc0QzlFOUZFQkEwNzhGMjg5NkJEM0ZBNDVERjg1RDZECi06MTA2N0QwMDAzMzlDREZEQkVFNkZDRDEzRDlGQjVCRjNFMERCNTlGQkMyCi06MTA2N0UwMDA3QjVEMzYyRjQxRjg1RkVGRjM1MTdFRDJFQjVENTI1NjYxCi06MTA2N0YwMDAzQkI3MzRFMEYzRTg1REVEOTE1OTJGRTQ2MERDMjAxQUZCCi06MTA2ODAwMDBBNEZDQUI5NjY2RjNEN0U4MkZCNTBFRjk2QzNGODBGMTg4Ci06MTA2ODEwMDAxQUU2NURCNTQ0ODI3NEJFQkQyNTdBMTVERDkzRTRGNEI1Ci06MTA2ODIwMDBENzlBODEyNzM5OUUyMEZCNDk4RTI1MkE3OTJDMkNFRDc5Ci06MTA2ODMwMDA4OTZGRjkxODQxQjhFMTA2RDkyQTQyQkRGRjQwRjFBQjkyCi06MTA2ODQwMDAzMkY2OEI3RTE1REQ2NUQ3MUY5NEExMERGRDJBMDc0RDBECi06MTA2ODUwMDBDMTY4ODIyQ0ZFOEQ4Q0ZFMTNGMzI1RDBERDdFQzJFRTQ2Ci06MTA2ODYwMDA3MUUyQkJFQzdCRkY3MzUyMUE1MURCMDBBOTZFM0ExRjM5Ci06MTA2ODcwMDA1MDA0NURGNzY3RTlFRkFFNDY5REVDRTdFMkM0RTVFNDVFCi06MTA2ODgwMDBGRkYxQTc1MjI2RUE2QjQ1RUJCNDEyNTExRjdFREMwOURCCi06MTA2ODkwMDAyOTZGMUNCQjkwNTFGRUJCMzhDRTNFMUZFOTgzQjBFQjg1Ci06MTA2OEEwMDA4MTA3MUUxOEMzQjcxNEQ0Q0I5RkM2OTJDOUJGNzM1N0I0Ci06MTA2OEIwMDBFODQ1NThCRkNCOUUzN0UzMDEzQUJGMzhDMTRBQzgyOEU0Ci06MTA2OEMwMDBFNzg0RDgxMkYyODMyRDRDMjVFNEU1QUVGNTVDMTgxMzZECi06MTA2OEQwMDAwQTcxM0Y0RDBGNzNGRkQzMEYwMzdDRkY2QzZBQkE5OEE4Ci06MTA2OEUwMDBGMkQ5RUZCQzU5MjRCQUJFMzM3MDdFMTFGMkQ5REVEQzg2Ci06MTA2OEYwMDBEOTYxQ0M1N0VDNTkzRDZCRkYxNDA2RTdGOEIwMDQ2ODNBCi06MTA2OTAwMDA3MkVFMDk4RkVDNEZCQUM3RjYyRkVDQjRFRjFEQkFDRjc5Ci06MTA2OTEwMDBDRTMzRkY4RThEQjc1RDhENjU1NDNFRDA2OEQwRkIwN0JBCi06MTA2OTIwMDAxQkU3NTBCREFCQjE5NkNBNDcxQjEzRjQzQ0ZBRjU2MEE4Ci06MTA2OTMwMDAxMkU5NzM3NzYzM0QzRDFGMEY2RjBCQjhGRTNGNkM0QzQwCi06MTA2OTQwMDA1MkZEREI4MTVDODI3RkQyNEQyMDI2RDlGMzg1ODg4RjcyCi06MTA2OTUwMDBGMEQwQkMxRDc4RDJCNkRERkRDMzBENEZCNUEyMUY2MkNECi06MTA2OTYwMDAxMDhGMTlGODNFMTdGQTA0MTVGRDU3MzE0MUM3NzVCRjRFCi06MTA2OTcwMDAzMUMwRTU0OTI2N0UyN0ZBMDcwNDhDQ0YzNURDQzRGMzA1Ci06MTA2OTgwMDAyMkVFMTFCQ0U3MUVCRTY1Q0JGRjQ3NkQzRTdEM0I5QUY0Ci06MTA2OTkwMDA3QzMwQzBFMDdDQTc3NjU5MTlFOTQzQTA5NTIzREREQzYzCi06MTA2OUEwMDAyMzI0MEUxQUM1ODQ2N0NGRjk5Mzk1NzlDOTQ3MDMyRTFFCi06MTA2OUIwMDBCQTk5RDhDMUVERkFEQjAzNUMzRUU5RUI0MDQ0N0E5QjFGCi06MTA2OUMwMDA5MDAyMURFOUNEOTk3NzZGOTU1RTg0NzJCMTU3MTA2ODdBCi06MTA2OUQwMDBCRDkxREVDQTVDRjRFNkY0Nzc2NzgwRUJDMTEwQ0ZCRUYwCi06MTA2OUUwMDA4RjBGRDEyRkU3RkZGOEJDQjJBRDM1ODg5N0I1MjJGOUVDCi06MTA2OUYwMDAyRDVCRjA5NUVCQkJCRkRBRjM2NDc2OEI2ODIxM0RBRjdFCi06MTA2QTAwMDAxMEM5OUYzQkU5RjAxMTYxMjI4MzRGRDdCRTFGNDAzRjYxCi06MTA2QTEwMDA3NDdDMjJEOEZFQTZBRTAwRDJENzlEMkJCODdGRjFFRUIzCi06MTA2QTIwMDBDM0ZDM0NEM0QxNzUyNTRCQTZCMEY2OEIxODdFMzAyODFECi06MTA2QTMwMDA5NTc3NDE2OThFM0I3RUVBOUM2M0I4NUI0REU0NjgyM0ExCi06MTA2QTQwMDBGOEI3MzJGM0RGNkU5Rjc0Q0IwNzM5NkM5Q0YxODc0MzQ0Ci06MTA2QTUwMDAzQUZBRDdCNzRFN0FBQTQ3NjFGNUMyN0U4MUZDNDk4NURBCi06MTA2QTYwMDBFMUQ0MTQ1Q0NGQUEzRjdDNkY1Q0JGNkIxREVFNTg5REQ4Ci06MTA2QTcwMDA5QTg0N0E2M0ZCQTQxRjA4QzgwNzg1Qzc3RTJBRTAzRTc0Ci06MTA2QTgwMDAzMjQ5NEJCRTEyMjhDMEZDNzBGQjdDQjA5QzlBOEQ3NkJDCi06MTA2QTkwMDBDMUE1Nzk4OUQ3NzBERDEyNDVFOUZGODNGNDc0QjQ3NjE2Ci06MTA2QUEwMDBERDdGNjJGRjRFM0NCMkExNDFDRjlERTI5MjBGOTlFNzlDCi06MTA2QUIwMDAyQUVFNEE4REVDQ0Y3NEU2N0YxN0NFN0Y4NDc2Q0VGQzJCCi06MTA2QUMwMDA5REY1M0I1QTFCNUI4NTcyMzExMzlGOTlGREU2NURCMEM2Ci06MTA2QUQwMDA2Q0M0RjFFRkIyRUYwRjYzRjM1NzgyMkVGQTJDNEFGNTM0Ci06MTA2QUUwMDBDQkY4OURGM0ZENzBGMUQ3Q0NGOTBFRkE4OTQ2MTlBRkJBCi06MTA2QUYwMDBFREYyNDEzRUQyQzUyM0ZGM0JGMURGMEYwMjkyNEU0MjQxCi06MTA2QjAwMDA0MkZGNTQ0RjIwMTkwRjE2RTBCRDcxMjlBQTMzRTk0OEZFCi06MTA2QjEwMDA3OUVENjdFNDcyRkVCRDYzQ0M3N0M2MTFERkM5RTk2MjI3Ci06MTA2QjIwMDBDQUZGMThFNTc4NkQ5MDQ4NTRFMTNFNjc4ODQ2QjY3RDA3Ci06MTA2QjMwMDBBMDNDQzhFNUU3N0M0ODkxN0Y1NDBDREQzNDcyQkNCRkIzCi06MTA2QjQwMDBDODFCRUZERjBDMzQwOUIwQkE1NTNCRkUwMUIyODZGRTFDCi06MTA2QjUwMDBCMDdENTA4MUZFQzdCQzIwODdCRjRBRTZGNkU1OEM3RDNDCi06MTA2QjYwMDBGQTBFODlGQkFEQTQyNTExMTdGRTZDQkY5RDhGNzdDRDYyCi06MTA2QjcwMDBFMEJFMDkzNDFEQ0Y3RjRERUYxMTVDRkNGQTdFMjg3OTExCi06MTA2QjgwMDAzNkUyNDk4OUVCNzQ0RUQ2MTc0QjkyNUY3MkExMTQxNjA4Ci06MTA2QjkwMDBDOTlGREJDOUU1N0YwMzI0RDREMzc4NUMwNjcwREUzQTU1Ci06MTA2QkEwMDBDNDQ1RENFRkVGNUFDN0NGOERFQjVBODhFMEJFMkJBNjY5Ci06MTA2QkIwMDA1M0JEQzFENjUzMUVCMUY1RkE4NzZDQjlGRjdENUJFRUFDCi06MTA2QkMwMDA3RkNGOTZGQkE1NURBOTA1NjEwNkQ3Nzc2REY5N0ZCRkRECi06MTA2QkQwMDAyREZGNzdBMkZDNjdFNTY5RjdGNUMzRjcyQTQ5MUUxQjZECi06MTA2QkUwMDA5ODVGRjA4RDZERjE2NjQ0QzEzRDhEMjZCRDdGQTI3MTI5Ci06MTA2QkYwMDAwNTk1N0I3RUZGN0M3NTg4QzE3N0RGNzNEQzFGN0NERkFBCi06MTA2QzAwMDBFMTMxOUZDMUY4NTlEQTE0MEQ4MUI1QkZDQkNBMTMxRjBBCi06MTA2QzEwMDA2N0Y1MURFQkM0OUQyODU3N0VEQzk4QTJFRjc2QThEREIyCi06MTA2QzIwMDAxMkVBMzE0Nzk5QjU2QzIxMTlCQzY2QjY4NDU4RkJDODg1Ci06MTA2QzMwMDBCQjAzNUEyRDJCNzdCNDFFMEFFMEJDRjMzRTI3MDJERUJECi06MTA2QzQwMDBEM0U3RjA1MUY0MEY1RkVEOEVBMjFDOUIyOTA2OTFBREE2Ci06MTA2QzUwMDBGMjBBQkFENTUzRDA0RTVGMjc1MjNGREZGQ0Q1NjVFQTIyCi06MTA2QzYwMDAwMkMwN0IxQjVFODRENUVDRkIwOTU3ODQyOTNGQTJFODU4Ci06MTA2QzcwMDBGQTk3Q0RENUFDREQ5Njk3QzM5NEFGNURCMUFGQkZGQkFFCi06MTA2QzgwMDAyMUY2N0VENjhBMDhENUNCQkJGQUNEMkRBQzVFRkEwNkFFCi06MTA2QzkwMDBBRjRGQjBCQ0ZDNzFGQUFFN0VGMzIxRjY3RDcxMkE0QThCCi06MTA2Q0EwMDBFRjY3RUVFRTZCQzJGOUZBMkFCREU3QUY3MkZFRDAzMUE0Ci06MTA2Q0IwMDA2RTBCODM2RjIyMTg3QjgyNkMzRDFFMTM1MkJEMDFGNDU0Ci06MTA2Q0MwMDA1QjJDRTFFNzNDMEFEMkM5MkFEQzNBQzY2RUVGRUFBMUE2Ci06MTA2Q0QwMDBEMDdGMDc1NDIzNUVFM0JGN0QyMTdFMEQyQkI3RTE0N0I0Ci06MTA2Q0UwMDA4QzJFNjZFRkU1RjhCOEJCRjVDNTBCQ0U2N0VERjZBQ0JDCi06MTA2Q0YwMDA1QjRCRTcxNUZDRUJENjcxN0Q4OEUxMERFNUZGODRBRkJBCi06MTA2RDAwMDBFQzE1QUU3NkM5ODlBMjU2MzlBQkZGNkU1QkQwNEZGQzRECi06MTA2RDEwMDBEMUI2NkU1OTYyMEEwNzc3NkYxOEY1QkU1MkVFQjcyQ0RFCi06MTA2RDIwMDA2RUFCRjFFNDM5Mzk3MTkyQkYwOUM5NkQ0MUQyM0Y3OTM3Ci06MTA2RDMwMDBCQzQ0RDY1MkY0N0MwNkUzN0RGNEIzQzI4RDIyRDc5N0NGCi06MTA2RDQwMDAxMjdEMDFCNzNGNDZGRjBBQkY5RjJEMTM4RTlENDE5OUNCCi06MTA2RDUwMDA5Rjc3QjQ2QTVFREJDRkU2Qjc2NUE2MjIwNzEwOEUyOTVGCi06MTA2RDYwMDBGNkZEMkM3NjNDRDI2OUNGQzZERkU5OTY2RkIyQzZFMTVDCi06MTA2RDcwMDA5QUMwMEMyNTA1RTE1RUQ1MzdFRTIxRDZDRjA3Mjk2N0VECi06MTA2RDgwMDAzRjMzODNCODlGRkQ2OEFCNDhGQkRGRTY0QTdFMkU3MDM5Ci06MTA2RDkwMDA4RkYxNEUzN0RFNzNFMUYwNTU5QjIxMTIxRjZGRUI4M0FECi06MTA2REEwMDAzNDlFQjNEODU2NTk5MjdCMUFEMjUxMEM3NzcxOUFBRjUwCi06MTA2REIwMDA4QTc4MkVFRDkzQzFDRUNGRTk0NUZGQjgxRkZERTM4QzU1Ci06MTA2REMwMDA5RTRBMEY4NzhFODhFNDA3RjRFNjgzMTc1QjVFN0ExMDhECi06MTA2REQwMDAxQkJDRTdGMDI2MzBFNUM3OURCRkNDMkM5RjIxM0FBMzEyCi06MTA2REUwMDA3REI2QTYxN0VGNTEzODhBRjcyOEEwMDdDNTMyQTM1NUZDCi06MTA2REYwMDA2M0M4NzRFMkNBOTE3NDkzODQ3RUY4RDI4QzczMDc3NzY3Ci06MTA2RTAwMDBEOEZDN0U4RjdEQUUxMDhFNUQwRjI4QkZFRUIwRjM4QjY5Ci06MTA2RTEwMDBFRTU4MjUwNjc1ODY5NzlGNTk4NzY4RkY5Q0QwRDA1REYwCi06MTA2RTIwMDA0NTgxOTlDMzNDOEZDMkM5QjdGNkRGQTQzNUUzM0U1QjA5Ci06MTA2RTMwMDA5Q0YyRTYwRDU1NjZFNDVEOTc3RUMyQkNFQkMzNDFBRkE0Ci06MTA2RTQwMDA3RkFBRjdDNzQxMDNFRkMzNEIzRjI3MTlBOEQ3N0VFM0JCCi06MTA2RTUwMDBFQjMzNDgwRTVBMkJCOUZFOTI1RTkxNzcwN0M2OTdGMjM0Ci06MTA2RTYwMDAwNTMwRjBCOUQzQUY2M0M3QkUxM0NDMjNCRTQ5Q0Y2NTlECi06MTA2RTcwMDBFRjczOThGQzg4NzQ1REIwMDJENzBCNzJCNEU2MTg5RTZECi06MTA2RTgwMDA4RkJFMTE3RTgwRkRBRkUwRUI1RjU1MDQ3NEJGNEU1MUE1Ci06MTA2RTkwMDAwQzI4Q0VDRkNBOERBNzIyN0ZBRjEzMzEzNjBFQzc2RDE3Ci06MTA2RUEwMDA3OTBGNkFERjMzRjgzQ0Y3MzMyMkREOUY1M0RDNkE5REFDCi06MTA2RUIwMDA4NkYzRUM5RDU3NTg4OEY0QjEzOUNDQ0ZDMUI0MDgzQzY3Ci06MTA2RUMwMDA5RkNCMkFFMEZDQjAyM0QyNERGOUExNUI2QTQ1NjhDNjhFCi06MTA2RUQwMDA3NTYzQjgzM0IwOUZFNUMxOUQ5NEQ3ODJGMENFMjRCQUQ0Ci06MTA2RUUwMDAyM0ZEMEI2MzE1Qzg4RkQ2MTU0MUJFRkYxQ0IzNEU0MzVGCi06MTA2RUYwMDBGRjcyMzRENERGQjU4N0Y1MTM1RUFGMTgzQjUxMkU1NkMxCi06MTA2RjAwMDA3OUVGQTk5QjFDRTJGQTVFMjBDNEY3M0ZDNjJGODExMERGCi06MTA2RjEwMDBDNkY5MzcwM0U1MzFCMkI5MTA3RjMzQkVCMjgwRjYwNzQ4Ci06MTA2RjIwMDA4REVDMkIyN0NFMUZFREJENDAyQzlFQ0FDQjEyMTdGRjM4Ci06MTA2RjMwMDBFRUI0RTU2RERBQ0U1RkI4QzdERTQ3MUNCREUzMEU3QjZECi06MTA2RjQwMDAxRkQ5NkNFRjFGQzVFNkUyNjYwNUU5NzYwNTRDNDczQ0E0Ci06MTA2RjUwMDA5NUFFRUExMjk2NjdFMUZGNTMzQUJDNzIzNTkzNUYyNjBECi06MTA2RjYwMDA2NUYyNEJDQTdCNkU3NUZDOEExMkNGRkI4ODcxQkFFNzVCCi06MTA2RjcwMDAzRDg1NjQ3MERERDkzRThFNzg1RTFGMjg5NzUwRkY5QjVCCi06MTA2RjgwMDAwMTA5RDMyRDU3ODZEMzAzRjI4MkU2MzRDNERGNjhGNUI2Ci06MTA2RjkwMDA5MjY4Mjg5MTQyM0QzNDUzMEYzRkNCNUU5NzJGMDQxMkU1Ci06MTA2RkEwMDA3M0IxQkZFOEJDN0FDQUU3NTkxNTQ4OUM0NUZEQ0I2OTY3Ci06MTA2RkIwMDAwMUU1RTk3Q0ZDMkU5NjE1NUU0QTA2MUIwNUJDMzUxRkQzCi06MTA2RkMwMDAwNzVFOTAwRDNBREY3NUEzRTREQzY3RUIzRERGMDUxOTQyCi06MTA2RkQwMDBGN0Q3NjZERTRGN0JDRUZGREU0NEY3RDNCNjA5NENFMTMwCi06MTA2RkUwMDBDMzdBOEU3RDNGQUQ5RkRGNEZEQjE2RTFGNjU3OUI4RjU3Ci06MTA2RkYwMDBFN0FENUQ2N0UzRTFGMjEwQkZFRjc1OTU0REE3RTc4NDVDCi06MTA3MDAwMDBCMkRGN0ZFNEY4QkY1MjI4MUJCMERERDhFQ0Y3OEVBMUM5Ci06MTA3MDEwMDA2Njg1RkQ5RDMzM0VGQkZCNTQ0OEUxREY0RjFBNzk5Q0FBCi06MTA3MDIwMDBCNTM4MEVFQjY3NjZEMDVDMUQyQTE4QzJEMzhDOTBCOUI4Ci06MTA3MDMwMDBDNjVEQkYyMTY0RTcxNUM5MDlEMjJGNEQ5OUVGODc3QTQ0Ci06MTA3MDQwMDBEMDVDRTc2RUU3OTQ3OTE3NTREMkY5QkVBM0Y2RjkzRTA3Ci06MTA3MDUwMDBGNkRENzY4MUYwMkE2OUEzQzFCQjYzMDdCNDA5RkE1NjRECi06MTA3MDYwMDA5MjgzQkY2MkZBNUY5NkY1NzgzRjE4QjVDNDlDQTFCOEM5Ci06MTA3MDcwMDA5NEEzMjdFRDBBNzFCQjk3RDFEQjA2QTIwRjI2NjExMEZFCi06MTA3MDgwMDBFRTMwRTg1QkYxNUU4OEYxNzgwRkI3OEVGNkU3RTE3QkQyCi06MTA3MDkwMDBCRThERjJGNkVDQkU1QUQ0QTM1NkZGNThBMkZCRUQ0RUJECi06MTA3MEEwMDBDMEQ3MkE0Njc3QUVCQzE0RTc3OUUxMDdFM0M5MUU5RTM0Ci06MTA3MEIwMDAyMDI1NkYwRkI5RjZFOUMyMTUwMzBBRDIzQkMyNUZDM0EwCi06MTA3MEMwMDBFMUU3RjlENDQyRkEzNDZFMTcwMEM1NzNEQUFFODk3QjcyCi06MTA3MEQwMDBGMjBCMzNFRDkyM0NCQ0Y3ODBFNDhBNDJGQTVEMjY1QzA5Ci06MTA3MEUwMDA4RTVERTFENDMzQ0YyNzFDQjBFOTA4RkZGNDMxNzg0RjJGCi06MTA3MEYwMDAzODcwQTU1NjM2MjVFNEFGOTk5MEE0NzIzNkU4NTQzMjFDCi06MTA3MTAwMDBGQkE1MEJENzkzRjE5RjhFNzAzNjg3MjY5RTg1RjNGOEVCCi06MTA3MTEwMDAyN0UyRURBOTUwQzFCRjFFREUxQzNBMkU0RTlFM0I0ODExCi06MTA3MTIwMDBDN0Q5RUVCRkJFM0QxNDI1NzlEQjcwMzhCMkQzNEZGQjEzCi06MTA3MTMwMDBDOUQ3ODhBRTI1NDZEN0E4RjczQTc5MzMwRDYwRTdENTg5Ci06MTA3MTQwMDA4N0ExMEJGRDk0QzVDOTQ2M0EyNzdBOTREMTMxRjYyQjE1Ci06MTA3MTUwMDA2OUZDNUNBQjBDNUEwMkUzMzc1MjhDRjM4NzRGMkVEMzk5Ci06MTA3MTYwMDA0NDBERTNCMzk2MUZGNTFFQUIwNDBDOTRCNUU4OTc3NDc5Ci06MTA3MTcwMDBDMzVCMTk0RUJFRUFBNkJGMUIwRjZGMjU3OUZCODU0MDg2Ci06MTA3MTgwMDBGMjc1QzRFRjhEQTU5NjFGMzUzQjk3MUM3RUMzMkQ4N0U2Ci06MTA3MTkwMDAwNTA4RUJDODdGRTcxQ0UzRkI2NTU1NTI5NzkxMUUxNjY3Ci06MTA3MUEwMDAzMDRFNDdCQzJGODQyNEQ1Q0YwNzhCQ0EwQjIwNERFNTJBCi06MTA3MUIwMDA2N0YxOEEyM0QyRTNFQzczMENERDk3ODhFRTczMEM4M0JFCi06MTA3MUMwMDBFN0UxMkE5REJDMEUxRUFGMkFCMEU5MTA2QzdCRjU2NzgzCi06MTA3MUQwMDBGNTRCOUIxNkIyRjFEOUUyOUIxODk3RkE1NjNEQ0ZFQkNGCi06MTA3MUUwMDBGMUNGOTZFOTNDNkI0MUZGMTU3NTE4MkY4MjY1NUMwRjU2Ci06MTA3MUYwMDA3M0YyMjFGMkVBQkM3QURBMDlGNzVEMURGRUQzNjFGQzc1Ci06MTA3MjAwMDAyRUYzREM5Q0EzQUY2NUVFNUI0RTk5QTlBRkU1ODU4N0I1Ci06MTA3MjEwMDA4OTJGMENCM0VGNjRDNjE3MUFGMDlGREM4RUI1RURFQjI3Ci06MTA3MjIwMDA0NDhFRkJERUY4Q0NGMjQwRTM0MEVCNUU1N0RFRjk0MUUyCi06MTA3MjMwMDBCQ0VGMjhFQjNFQzBFM0JFRDFERTNGRDUyREFCQTRGQkI3Ci06MTA3MjQwMDBFNTBDNEM5REVDNkJFQzNFRTdFNUM5NDNGNjcwNjI3RUM1Ci06MTA3MjUwMDBFRUNGRDAyRjlEQThDOUFENDA3QjcyNTFGQ0JERDZCREVECi06MTA3MjYwMDBGOTAwNEJDQzlFNzM1RTc2Q0RCMzRGNjNEMDY2RDExM0RECi06MTA3MjcwMDAwNkM3MzM3RDdGNzNFRkJGNkZFMEI5MDNGNDRGRDhFM0U4Ci06MTA3MjgwMDA0NUVDMzhEOTdBRDFGMjEzQkZEQTdFQjg3NzhCQjhCRDI2Ci06MTA3MjkwMDBFRUQ4RjlEOUU2REI0QUY4RUEwRjIzM0QwQzM3REYyRkE5Ci06MTA3MkEwMDA4NUY5N0UzQUE2REVBMEZCRjI1QkVDRkJGMjVCMjYzOEFBCi06MTA3MkIwMDA3OTVDODY4NkZBRTQ1NTYxRUU4RjVEMUYyRUE1Mzg2QkVBCi06MTA3MkMwMDA0QkNGNUNGMjJCMTdFQ0Y3OTE1RjdEQ0NCMkE0NjBCOTg5Ci06MTA3MkQwMDBGNjQ1Q0NCRjQ3M0ZFQzM3OTk3RUE3NTNCRTdEMTlENTA1Ci06MTA3MkUwMDA3QkFCNjZBOTY4MkZEQzEwQTlBMEI4RURDNjQ2QzM5Mzk2Ci06MTA3MkYwMDAzN0UyOTQyREVDRkJBNENCQ0ZENzkyQThENjMwRUVEQkFGCi06MTA3MzAwMDA1QTU3QTFBMkREMjE3REFFOTJFQUYyNjkxNTlERDU4Qzc2Ci06MTA3MzEwMDA5RkJGQjA3OURBNzkwNTE4OUYyOEU3Rjc5MzVEQ0VFQTI5Ci06MTA3MzIwMDA0REE1MDBENTYxQkVDRjFFMzA1RTBFMjM5RUFBQzNCQTA2Ci06MTA3MzMwMDA0MzNGQjQ4RUJFNjU0OUQzODc3MjIxQUU1NTYzQ0U4QzcwCi06MTA3MzQwMDBGMzFDNkNGQTYyQ0Y0OUJGN0U0MzQ5NUUxM0M2N0VFQ0U0Ci06MTA3MzUwMDA3QkIyRDYyQkE5QjJCNUU1Nzg0RTlFMDkxQ0Y0MTdBQkNCCi06MTA3MzYwMDBEQzVGODg3NEQwM0E2MzA4RUVCNTM2N0VFN0Q5RTMzMjQ1Ci06MTA3MzcwMDA4MTI0M0VFMjVBM0YyNUNFRDc2RkJEMDgyQkIyQURDRjU4Ci06MTA3MzgwMDA0RDYxQUVERkI0NkFBNjM2MjIxRDY5RjJERjNDRjc4Nzk1Ci06MTA3MzkwMDA1NkM2NzhCRTdFOENEMTkxOEI5RjRGQTQ3N0NFNEY5NUU5Ci06MTA3M0EwMDBFMTQ0MkJDRUNGQUE4NkIyMTRDRDNGNENGMjg3QkU5M0Q4Ci06MTA3M0IwMDA4NkVFQjE4Qzg3Q0QwRTZDRjc4QjVDM0I0RkJBODhFN0JECi06MTA3M0MwMDA0M0IzRTdFRDM5MjRGRjUyMjRERjFEN0Q3MEJEQ0NGNUJBCi06MTA3M0QwMDBCOUQxRUE4Mzc5MTdBQzIzN0RGMDFEQzY1QTY0OUY3RDJECi06MTA3M0UwMDA2RTFEQzlFRDc1M0U1NTQzRkJCNDc3QkU0QzcxQURFOERCCi06MTA3M0YwMDAyOTcwQjlEQjZFOTEyMjVDMUY5NDIyRENGRjhEQkY5MzU0Ci06MTA3NDAwMDA5MDlFQzJGNTFFM0NFNzExMEQ0MTM3RUUwMzAzMTM3ODQxCi06MTA3NDEwMDA5RUU5N0FEODUxN0IwQUMxMzc1OTczRUY2NzU1MTNCODgzCi06MTA3NDIwMDA5RjYxNEI3NTcwODVEQkRGMzAzNzk3QzdDREY2RTY1NjI5Ci06MTA3NDMwMDBGRDI5Q0NDQUYyNzBCQTFBNTlGMzBDMERGQTMxQUYwNjE1Ci06MTA3NDQwMDBBQUY5NzkzMkExODg5RjI3RjM4MUExNzI3RUFERDFGMDhDCi06MTA3NDUwMDBERTUwMDE5Mjc0MUU2REQ4RjUwM0VGRkRBMjBGQzhFOTRFCi06MTA3NDYwMDBFNjIwRTIyREM2RUY1OTg5NkMxNzI4Nzk0RkVBMzJCQjI2Ci06MTA3NDcwMDBGMTRDNEY3M0VFRDIxRjg3MDlERjA5MDNGOUJCNjc1NjQyCi06MTA3NDgwMDA5MEVDQkRGNzdBMTRCMjNGREZCQjA2N0VENzg1NzU1RkZGCi06MTA3NDkwMDAwRTU4NkNBOTlFMTJDNURGM0RDQ0U2M0JDMDk4NzUyN0ZGCi06MTA3NEEwMDBFNjgxNjlGQ0ZERjRDRDAyRjlCMzlFRkE1QjcwM0NEMjMzCi06MTA3NEIwMDBCQjExMDUxMTdGQ0Y2MjExRDMyNzc4QjIyMDg0MzA0RUUzCi06MTA3NEMwMDAxQjVEMDBEREU3RTJGNzNENjFDMjlGMkZGRUYzNzM1RUI3Ci06MTA3NEQwMDA5RTQxRkI0RjQ4OUM4M0U3QjdDNDNCNzFGRThGQzYyMTlBCi06MTA3NEUwMDAwRkJGOUZGMUQ3NkEwOTRBODZGNEExQUQ1QUYyMTBDMkM0Ci06MTA3NEYwMDAzQjFCQUMxNTNERUNGQjJEMEFFN0FGMkQ3OTRBMUFFMzk3Ci06MTA3NTAwMDA5NTE1MDUyMkU5MjFFMDBCQTUyN0IzRjc4QkY2QkQ1Q0E1Ci06MTA3NTEwMDA4M0Y5OUQ4QkU2NENDNzk2MzgzRUFERjcyNDJENzkxODNDCi06MTA3NTIwMDBFOUFGNDY1QjUyOTNDQkRBNTczRUE3OTNGQzNEMkY3RUUzCi06MTA3NTMwMDBGRDVFQUNDRjNBQ0NFQjNFM0ZEN0UzNTE4RjcxOUYxMzRBCi06MTA3NTQwMDA1OEY0QzE0NDlBRDdBQjYxQUVDRkI2QzZDRDNFNTMxOEZFCi06MTA3NTUwMDA5MUFGMzJFRUU1RjU5RTMzNzBFODgwNkRFQjNBRTZBNzI5Ci06MTA3NTYwMDBEM0JGNzVBMjhCQTQ0RjFDRjIzRkMxMUNDMzNFOEZFMjU4Ci06MTA3NTcwMDBEMDgzMjk3QzFDN0FEODhEM0M4OUYyMTdGM0NFNjI0M0U0Ci06MTA3NTgwMDA3OTY3RUI2REZENkRCNDc5Njc5OUZDOTQ3NzgxNENFQjZECi06MTA3NTkwMDBGMDBFRDNCNzMwMEZGRDQ0M0VCOTlFRUVGRkNDRTQyNzhBCi06MTA3NUEwMDAwN0NFOEQ5NTc5MzE5NEMzMEVERjY4QjM2RjIyQjlFQ0E1Ci06MTA3NUIwMDBCRjQyQTFGQjRDMUQzRTcyRjg2NzU2Q0UyMDFGN0QxM0MzCi06MTA3NUMwMDBFNUM1QjJCMEJFOTBBNzZBOThFMEU2OTMwQjRGQzI1N0VDCi06MTA3NUQwMDA4QjYwNjA2RjhDRDUxN0M5NjBFNTMwMTE3NDYwRUU2QkZECi06MTA3NUUwMDBBNTEzNUQ3QzkyODlDRjQ1RjMwNTc4RDEyMzA3NzlERDFBCi06MTA3NUYwMDA4NTZGNkRGMDFFRTAyQzc2RjI3MEVCNzI0OEQ2REI2MjgwCi06MTA3NjAwMDAyRTNFNkRCN0NGOTk3NTg4MDZFMDdFRDQ5Q0JCREM4ODkyCi06MTA3NjEwMDBDQ0M0N0IyNzczNTcyMTNGNkMxMjEyMjlFNDg3QzhFQzM2Ci06MTA3NjIwMDAzNzQyNTczMUJDQkYzNzg2Njk5MUU4M0ZENDk3M0Y0QzBBCi06MTA3NjMwMDBGQ0ZFNDI4OEVDQjIyREIzNTY1MjdDRUFCRDZCOTI5M0FECi06MTA3NjQwMDA3MDdGRDlDMEYwRkUyMkVERTdFOUIxMjJFNURDRjY4RkNDCi06MTA3NjUwMDBFNUY5MTM3QTlDOTdDOTM4N0YwRUY2RkJCNDVEMzdFREQ4Ci06MTA3NjYwMDA3NkZERDQ4RUFEQUY0NzZFRUU4QjcyM0VEODE3RTVGQjNDCi06MTA3NjcwMDBENDA2QTU1MzQ1N0ExODI4NTYzNTc3REVGMkI5RjZGREJCCi06MTA3NjgwMDBDMkQ3NDZFQ0ZDOTc2MzJEM0FDNjI5QUU4RDA4RjY3OTMxCi06MTA3NjkwMDBCQjJFRDI1NzM2MzQzRTRFNjU3RTVEMUEzMDRGMkU1ODgzCi06MTA3NkEwMDA2NkU5QTg1N0E4MUYyRDEwNzA5Rjg1RDM3OURDMUQ5RjEwCi06MTA3NkIwMDAzN0I5RjRCNThCNkNCOUFERTJCRDQwNkNERTZBQjNBNUU5Ci06MTA3NkMwMDBCQkVGOUQ1NTQ1MjFFQjdENDFGRjE1RTVGRTVGQjUxOUVCCi06MTA3NkQwMDBFOEJEREFGQkZGMjgzRjIxQkZENDEwQkU4Q0Y1RTY0RTkzCi06MTA3NkUwMDBGQUREOTg0MDM3N0YxRTJCMzU4NTJCNURGREM2RUFCQTQzCi06MTA3NkYwMDAzQ0ZCQTMyQUY2Q0I2NDBGMzU4MDY2QTE3MTI3RjdENzMwCi06MTA3NzAwMDBBMERGQUQ2MzY5QjAxM0YzOTYzM0U5MDhGRjVFNzREMTZGCi06MTA3NzEwMDA4M0ZBRDE4NUE0MTdDMTIxQUU5N0Q2OTRBODQ0QkY2RDMyCi06MTA3NzIwMDAwRENBMEVGNEVCQkQxQkFCQTYzQ0Y1MTYxQjZGOTlGMzBGCi06MTA3NzMwMDBDMUY4M0FEM0Y0Qzg0RjY2Rjk3OTlDREQ5QUMyRTNFQ0ZDCi06MTA3NzQwMDA1OEM3MzgzQjk2MTg2N0M3MTJFM0VDRjgxRUUzRUM1OEFECi06MTA3NzUwMDBGRjQxQTM0OTc1OENCNzYzMURFM0VENThDNzM4M0JENjhECi06MTA3NzYwMDAzMUJFOEVFNUUzOEQyQkE4QzRGODA5QkU3RkEyQjE4MTlFCi06MTA3NzcwMDBFQUU3REE3MjEzQ0FGOEVGN0M3NTdDNEQzMTMxM0ZFQUUzCi06MTA3NzgwMDAyN0Y2RkFFQzMxOTdBRUY4MjVGQTAxMjE2QUUwN0UxRDYyCi06MTA3NzkwMDBEOERGRkNDMjdGRDk3NUJBRkYzQTVFOTI4RjdFNDk4OEU2Ci06MTA3N0EwMDA4OTgwRjE4NEY2RjgzNkE2NjMwRUNEMkYyMERGMEEzQUUxCi06MTA3N0IwMDBDNUQ1QUQxNTk4RDdCODMzNzJFMDNDOTlFOTBGQTVGMTVFCi06MTA3N0MwMDBFQkFCRjM1ODdENTdFNEI5NzZDQzIzM0Q1NTZGQUFERjc4Ci06MTA3N0QwMDBFMUFBRUI5MThBOTU4RjY4NDNGNTQ5RTUzQkU0MjA3QjZDCi06MTA3N0UwMDBGRkQwOTZFN0RCNTEwRTA0NjI1Q0VGRkI1MUU0MzdFNzE0Ci06MTA3N0YwMDAzNTMxOTJFODJFNjE4QTBEQ0FCMTYyMjU4RDc0OEM2NzhECi06MTA3ODAwMDAzOTVGOUM4Q0YzRTA3QUNCNjdBMTI1OEU3OTdDOTM3NEU5Ci06MTA3ODEwMDBBNTAyRjk4RkI1RUZFNjc0M0ZCQUY2M0Y4OUU4RjQzQzZDCi06MTA3ODIwMDBGM0JCOTFEQTg5OTVBMzZBNDdFNzcwODc2Qjg3RUY4NTg5Ci06MTA3ODMwMDAxMUZBNjk4MzE2QUQ4RkMxQkVDOUM3Rjc1N0FCODBGQjdDCi06MTA3ODQwMDA3RjNCN0M5Q0VGM0IwMkJDOUM5OEUzRTQyRjU0REYxMjBGCi06MTA3ODUwMDA2NUU1MkQ1MUJFQkUxRDAxN0UwRkMxQzA1NDkxN0U4RkM2Ci06MTA3ODYwMDAwNzFBODRDRjYzM0Y1RjJEMDQwREYzMUYyQkE2OTZFNDA4Ci06MTA3ODcwMDBBM0ZFN0ZDOEE2ODdDOTkzMjI3Q0RGRkVCRjJBRUREQjZCCi06MTA3ODgwMDBFNzRGN0FBODM1OEZENTI3N0ZEQjMwNzAxRkRFMDQ0NjlGCi06MTA3ODkwMDAxMEVGNzFCNTM2OEI5NDRGRjRGRENBNTNGMjk2QjBFNkYzCi06MTA3OEEwMDA2N0NDN0MyQzBGRjVERTBBNUJFRUE0NkRGQkE0QTlFRDgyCi06MTA3OEIwMDBBQTQ5NjgxRkJDRjcyQzk3N0I0N0VDNzE3NkY4RkE1MkZGCi06MTA3OEMwMDBCNDlFMzNDMzc0OUUwMkEwOTNGNDkyQTZCODRDQzEwQzJDCi06MTA3OEQwMDA3MTFDMkYxNTlGNzYyOUREOTNEOUE2RDBCRDRDQ0E4NzgwCi06MTA3OEUwMDBCMzU1RjJBNzdFRTBCN0VGMjVFRTIzN0Q0NTA5MjRCNTE5Ci06MTA3OEYwMDA1Q0Y2QkNEMzEyQzlGRkQwQTIwNTI5NkVCMzI5NUM0MTQ2Ci06MTA3OTAwMDBCRkNCNjA5NUNCMTQwRkRCNTRDRUUzM0FBMUM4QzU3NDRFCi06MTA3OTEwMDA0RUVCOUIzRDAxNkFERjE2NTYyOTFGMzg1REJFN0I1RjJCCi06MTA3OTIwMDA3NTBDNEI1MUMzN0QzRjZEMkVBNUZCMkEyRDRERDQyOEUwCi06MTA3OTMwMDBBRjk4RkQ4QkRFQUY4QTkxOUY2NzEzRDhFQkIyOEFDN0YxCi06MTA3OTQwMDAyMTdDNjNGNzUzQkRFNTIyOERGQTA3M0I3RjlGNTQyRkJGCi06MTA3OTUwMDAxMTdGMjcyMkQxRTNCRDdGNzZFMEU3NjdBMjFGNjQyNTcwCi06MTA3OTYwMDAzRjlGMzI0RDVCREFGMzI0N0JERjZBQUE4OTEyQzYwRjkwCi06MTA3OTcwMDA2RERBM0JCRDIxQUM1RjA2MTQyRjBENEQ3REI5MTlFM0M3Ci06MTA3OTgwMDBBOUFENTc2QTA2Q0ZDN0UyRTcyMUMwQkVFRkI4QjU3QzA0Ci06MTA3OTkwMDA1OUNGRUZCMUZGRkExMDRDMzZCMDdEOEQ4QUZDMEFBRDlECi06MTA3OUEwMDBGMDM0REU0RjU1NjRFQjMzQTFEQzBBMDFGNUIxQjYzQTkxCi06MTA3OUIwMDBCQTg2OTNDMUU3M0Q0N0QwOUFGNzE5MTVFOTQ2NUE5NDFDCi06MTA3OUMwMDA0N0UzQjQ4MUE5NjI3QkFCNEVBNjdEQjEyOEFDNzZBMzE4Ci06MTA3OUQwMDBERkEwQzhGNjNCMzhGMjIwM0ZFNTNBNEZDMEZFNTdCODZCCi06MTA3OUUwMDA0QUY2OUMzNzE4N0JBNUI3NUU5MDcxREZFRTk5MzZGRDlECi06MTA3OUYwMDA2NEUyMkQ3MzlFRjlCMTQ3NzMxMTlFRkM1NTc0MzJFMjE3Ci06MTA3QTAwMDAwNEY4NkY4RDU1MkNDMTc5OEREMzdBODUxRDk1NjREMjdDCi06MTA3QTEwMDA2OEJBODZBOTg2QTkyNjc3M0VDNjI3ODU3NzVBNzk2QkU0Ci06MTA3QTIwMDAxRkQyQzMzNDVEMDY5REUxRTU0QzE4NjhDNkZFMzdEOTA4Ci06MTA3QTMwMDBGNERGNTFFQ0REOUYwRkQ5NzYwREUzRDNBQkEzOTgwRkE0Ci06MTA3QTQwMDBENTIwODJFNUVBMUZFMzFEOTYwQjlFNTMzQUYyM0NGNUUyCi06MTA3QTUwMDBDOTlEODU5RUY2NTNCNjk3NzhERTlGOTYzRURERjNGRTcwCi06MTA3QTYwMDA4QzVEMTU5RUZBRDRBRTc5OUVGNjY3M0U1RUVEQTk0RjA5Ci06MTA3QTcwMDBFRkZFOENBN0ZEOEM3RDRCM0RGNTk5N0Q5NzdBREFDRjkzCi06MTA3QTgwMDA3RTYxQjlFN0ZERENGRTk1OUVGNzY3QkRCNkQ2NTMzRjM0Ci06MTA3QTkwMDA3QkUwRUI5RUY2OEU1RTlGQjk2RjVFMTFGREZCRjQ3OTg1Ci06MTA3QUEwMDBGQ0REMUZGN0I5RTI0QzdCRTE4NDdCNzQzRTZBRDEzMTg3Ci06MTA3QUIwMDBGRTA3NTE3RTZGQUU4Q0ZCM0JBQkFGRkQxQUI3QkJENDVDCi06MTA3QUMwMDA3MzBDMURFNUNEMjUzNjVEQUVDQzMzQUY0M0Y5NUExNUE5Ci06MTA3QUQwMDA1NTY5OUY5MEMzQkM5RDFDM0U4RkY0OTE4OURCOTk5Qzk2Ci06MTA3QUUwMDA5QTQxRjZEOEUwRkIxMENBRUI0NkVCOUM1Mjk3QkYyQUFFCi06MTA3QUYwMDBBMDc1MDJFNjgxNTU0NTZCRTlGRTQwRTc3QjU5MzMwMUVECi06MTA3QjAwMDBGM0UzMkVDMTI0ODYwMjNDNzY2QTUxQkI4MENFQkU3NzU5Ci06MTA3QjEwMDBDRDhCRDk3Rjc0OTVDNDAwQjMwRjUxQUYxRkI0RkZFNDcwCi06MTA3QjIwMDAxQzhBRkIzMkZCOEZFQzQzMjNDOEVENDEzODI2RDE3QjA2Ci06MTA3QjMwMDBFMzlCMDI2MDdDOUFEOTc3NjQxRjNFMUE2NkY2RTE3NDczCi06MTA3QjQwMDBCNEM3RkEzN0ExMUMxQUY4ODU0QzcxNDRGNjQ3RjY1RkEyCi06MTA3QjUwMDAyNUIzRkYzNkU2QkFGREUwRkRDNTU4QTY0MTJCMjQ3RkNDCi06MTA3QjYwMDBCOEQyMkQ4RTJEMjY3QkYwMzZBNEU3MkZBQzdCNzYwNTgwCi06MTA3QjcwMDBGNjNCQjU5MkRGQjNENzMxQTYyRThFN0E3MjQ3NzExN0Q2Ci06MTA3QjgwMDBGMUM5NDBCMUNDRjcyMTM5NTFFNkY2RUZGREQ0NUVFRkYzCi06MTA3QjkwMDA5MEZBN0RCMjQzRDkzQTkwNUM3NkQ2NjE5M0QwOUZDNjc1Ci06MTA3QkEwMDBGQjBDQURBRjA1QzlERjNERjE4RkZFNDNDODZGNkE4OTlECi06MTA3QkIwMDAzQTFFRjMwMDhEM0Q4QTg5RTNERDZBRTNCOTQ0OUI1RTlBCi06MTA3QkMwMDA4RDNGRjM1ODFBNUZEMjhCRTVBOTNBRDM0NzU4NTk1NkRGCi06MTA3QkQwMDBCNkI1MTdDQjQ3QTIyNTM0REVFOUM2MjNENTI4NjNENDMyCi06MTA3QkUwMDA3M0I4REY1QTlFQTZBNDlCMDVGNDM3MzMzOEIyRDgxRDZDCi06MTA3QkYwMDA4M0ZFODlFODc2N0U4RUJGNTQ3RTA1RTkwRkI1RkVFM0VECi06MTA3QzAwMDA2QzBBNTU3OTJBQzU4RDAzNDgxNzAyOTU0NDRGMDEzOUVFCi06MTA3QzEwMDA0NEZCNEIwMDBGQTM2MjdEOEU5MEM2NTAxN0VBQUY5OENECi06MTA3QzIwMDAxNzVBOTVCNzlERThDMEQxNkI1MURGNEQ3MkZCRjhBNzhECi06MTA3QzMwMDA4OEQ3NTg5RDc3RkQ0M0VBMEYwODRGQURGNkVGQkM3NTI2Ci06MTA3QzQwMDBFNEVBRkJBQkQ5QjgxRDA1MjU3OUU4QjM0NTdGQ0ExMjM0Ci06MTA3QzUwMDA5N0ZDRDk2M0VGQkJGN0U2ODgxRUY5MzMxQjczMTQ2NkY0Ci06MTA3QzYwMDAwRUU5NDU4QzFGQjY4QkE3MjBCQzA5OEFBRjA3RjY0QkRGCi06MTA3QzcwMDA2NENGMDc2RUVBQTRERjU3MEQ2ODk2MEVBNEZGNUIzQTQ3Ci06MTA3QzgwMDBGNjVCNTM1MjRGRkVCRkJGQzQyQTQ4MEYwRTM0M0M5NURCCi06MTA3QzkwMDAxNTZGODE3RTA5Q0MxOUMzRTMzMzdBRUExREE0MEZDMEE2Ci06MTA3Q0EwMDA5OEEwOEVGQjZDNDMyQzY4RUVDODYyMUY3QzI5QzJGRDM1Ci06MTA3Q0IwMDA2NzFCMjYzQUZFQ0MwNDlEN0I2RDQzN0Y1QjE4QjczNjZECi06MTA3Q0MwMDA1NTdDODRGNTczQzMyRjBBNzZCQUVGODdCOEExODBGQjgxCi06MTA3Q0QwMDAyNzg3MUIzRkMwRUNDQ0E0MEJCRTBEQUM1Rjk0RTM2REJCCi06MTA3Q0UwMDBDNzk2RDREMkZEQUFCOENENTRFMkI5RDBGMjFERTRBNzBDCi06MTA3Q0YwMDBCN0VEQTUyRkQ5NzhCRDM2QzJGMTM4NTE4MTA1M0I1MDdCCi06MTA3RDAwMDA5RUU0MzFGRDg4QTFCNENBRjZBQjM4RkU5Nzc4MEU4Rjk5Ci06MTA3RDEwMDBFQjFCMTY0OERDMkZFNzczRjYyREYxMzhERTRCQTM4M0ZGCi06MTA3RDIwMDBBRUNDQjJBRjAwMjExNTk4RUY2QkVDRkY3QUYwN0NFMDlGCi06MTA3RDMwMDAyOTFEQUU3RDBFNzAzRkYwRDZBNzZDRjdENjRGNEI3QjVBCi06MTA3RDQwMDBFQjRDOEI3RTFFRjU4MDY1MDBEQ0FGQjFDQkZCM0UwQ0FGCi06MTA3RDUwMDBBNjBGRTMyODg1Q0U3REZBMDk3RTVFNTA2NTEwMjA3RDUyCi06MTA3RDYwMDA5Nzc3QTU3QkVFNjZGMzRCMzhGNzVFNjZEQzlGM0Y3NTMxCi06MTA3RDcwMDA3NzlBRjQ5N0M1NEM3RkMxRjc5OUY3QkExNzFFNUVCRDg1Ci06MTA3RDgwMDAxQUY1ODVDMjhDN0RCNEMyMjc5MUJGMDFGRDQ0ODZDQjE0Ci06MTA3RDkwMDA0RjM0NDlEMzNENzY5NUUzRUZDOTk0RUJDMUMzNUI4MTgyCi06MTA3REEwMDBCRDIxN0IzREU5QzdGQjUxQjU3MkY0MkJCNDE3RERGMjYxCi06MTA3REIwMDBDNzIzOTU0M0ZFOTU3NjM5RjVFQTExRjI1RjMyRkQyQjI0Ci06MTA3REMwMDBDNkZEMUZFODk3QkVFMTE3NUZGOUYzMTE5NzlGRjJFRDJCCi06MTA3REQwMDA2ODcyMUFGQTMzNkU5RkM0QkY3N0VFNEY3NUNFRjVCRDQ5Ci06MTA3REUwMDA1MzJCRkY0Q0QwMzkxQzQ5MTcxQzM3OTY1OUU3NzM3NTM0Ci06MTA3REYwMDAyNTRERjc2NzM4RkUxNUM3OEY3MDY5OUU3OTBCRjJERDQ4Ci06MTA3RTAwMDAyNkUzNTA2QTBGRUJCN0ZBMzc3RUMwN0UxNjRBRkJGN0JGCi06MTA3RTEwMDAzNUEyQkM5QjIwNTNCRTg4MzY3QkQ1QkQ0MUY0NjdFMkJBCi06MTA3RTIwMDA3QjU2QUYyRUQ2QzcxMjdGM0NFMzIzN0ZDMjdBOUJFRkVGCi06MTA3RTMwMDA5REYzQTk4RTNGRTZCM0I2MUQ3MDdFOEVBMzQ3NTk0MUQwCi06MTA3RTQwMDBGQjVDNDYxMEY1RTQzMzc2QjEzNUY0RUM4N0RDMUZFOEQzCi06MTA3RTUwMDBGOEZEQTY3Njc5REY5RjhFNDdCREM5RUZCOTgzRjI5QjA3Ci06MTA3RTYwMDA4Q0I5M0NCRjY5NEM3REJBMTdEN0Y5NEM3QjlEMzE2RUZDCi06MTA3RTcwMDA1NTM1NkIyODdFM0FGNkIyNzQyRkVBQTFEM0VDM0NBNUI3Ci06MTA3RTgwMDBGMjY3N0U0NjNGRTUwQjUyMTFFNTI3OUQzRTlFREY0Qjk0Ci06MTA3RTkwMDA2NEVDOTUzREU3NDJDNjgwNDA3OTNFNjM5RTkzOEMzNDA2Ci06MTA3RUEwMDBFQjY3REExM0RFRjdFNUUwQUExNzIzN0NERTdBNjY1QzdGCi06MTA3RUIwMDA4QUE5NUI2RjVGMjFFMEVGQTJBNjA0OTQ2NzlCMkY2MzAyCi06MTA3RUMwMDAzNjAyQUJBRkM4QjFGMzhCNEU4NTUzOTE2RTE3NEE2MTQyCi06MTA3RUQwMDAwM0VGRDE1QkZCMkI4OUYyMTRGRDQ3QTZGQzFBRTNBMzQ5Ci06MTA3RUUwMDBGMDJDQ0ZBQkQ0NEVFMUYxNTZFREU3OTJDMTI0MjA2OERGCi06MTA3RUYwMDAyMTk4M0UzRDNDMTRDN0ZBRDY3MTAzRUZENDFGRjQ4RjhFCi06MTA3RjAwMDAzREMwRDYxREY3QTEwNzk5REQ1RkVBNDMzQjVFQTM3QTJBCi06MTA3RjEwMDAxN0IzRkJCMUZFMjhCM0ZCQjFEQ0NERUM3RTdDRkU0Mzk2Ci06MTA3RjIwMDA2NkY3NjNGRDcxNjZGNzYzRjk2MzY2RjdFM0YzMjc5ODE1Ci06MTA3RjMwMDBERDhGRjVCREI5NTVFNDhGRUZDM0ZCOERBNkUwRUZEQTE5Ci06MTA3RjQwMDBFRUE2QkNDNkY1QUE0RjQzRkFDOTk0Njc1NTU1MzdBOEEzCi06MTA3RjUwMDBDQjE4N0UzNzg2MTc1MjFDQTU3QTIxQ0ZBQjZGQ0Y1OTJECi06MTA3RjYwMDA0OEY2RjRBMDlGMkVDM0NGMzlFNEI3RUIxNzFDQkYxRDEyCi06MTA3RjcwMDAxRTcxOEVEQkY2RUNBMEZGMzM2OUQwRkQwNTI3RUZDNzNECi06MTA3RjgwMDA3NEZBMjFGRkU5MDlGREQ4N0VENDM3QkZGNkRCRUZCNEUwCi06MTA3RjkwMDBCMDU3QUI2NzZFRUIwODk2RTBCOTlFMTQ3RjZGRTcxNTlDCi06MTA3RkEwMDA2NkZFOUVENkVBREQ0RDk0RTdBNzhDN0IyRTg1RUJCQTY0Ci06MTA3RkIwMDBCQjMyNENGQTA2RkVERTEyQ0FFRDRDM0JEMUIxMEYzMzk4Ci06MTA3RkMwMDBGNTcxQTdDQ0RDMEYzM0YzNjAyMkI2NUU3MkIyQkM4Q0M1Ci06MTA3RkQwMDAyREJFMTRDNUFEQUQyNjI2NUY3MEJGNjg0QzlGRjNCMkIxCi06MTA3RkUwMDBFRjQ0QkY2REExOTY5NzcxQkU5OUU3NURGOUY3RjE3Q0ZCCi06MTA3RkYwMDBCQzBFNDg2QUVFRjkzQkU3MUZDOEU2MkJFMUZFNDNCNzJCCi06MTA4MDAwMDBERjM2NTg5QUE2RkIxOTgyNjE5M0Y0NDU4MUU5OTFBNDYxCi06MTA4MDEwMDA1NzZBNDk4QTAzQjYwRkYzQkJEOUFGREE3MkEyNjlEQzlCCi06MTA4MDIwMDBDNUI0REZCNzNGRTMyMzdEQUJDNkNFN0Y2QjE5QTc1MjQ0Ci06MTA4MDMwMDBCRDY1RENBQzM4OUQzMzg5Q0M1MkZCQjNGNEIzMzY1MjBBCi06MTA4MDQwMDAzMkUyRkUyQUIxRkQ1RjFGNjFGRjk3RkNGQ0RDNTc0QjVCCi06MTA4MDUwMDBFRjVDMTVDRjQ3NzU4NDk3RjdBMUREREUxMThGOTFGRjk3Ci06MTA4MDYwMDBCRjY3REMyQ0NGM0RFNDUyN0MwRURENTcyMTg1Qjk5RUU1Ci06MTA4MDcwMDAyREM1NTVEMkIzNjU5QzdGRjk1MDdCQTdERDlFMUNCRUY0Ci06MTA4MDgwMDA4RjMwMzYyNzNGNjYyMERDNDlFREZDNzJDMjQ0N0Y4QjdGCi06MTA4MDkwMDAzRkM2RjM4Q0ZEMUE4RjE3MDY0QjQ1NTBCMzlDQzc3ODJCCi06MTA4MEEwMDAyMjg3REZFM0Q1NTE5RUQ0RDBBRkQzMTE5N0U5NUM0NzQ3Ci06MTA4MEIwMDA4NzVFMzE1Q0JDOTVGNEEyRkZDRDExM0NGNERCNjJGQjIyCi06MTA4MEMwMDAxRDVBNTYyOEE0MTcyNjFBNzJCNTlBN0MzQTk3MzA4MDAyCi06MTA4MEQwMDA3Q0RFMTE2RTU2MzFGRUFBOENBQjFDQjE1RjQ1RTNGRDEwCi06MTA4MEUwMDBGRTdGQTNCMkY5NUQwMDgwMDAwMDAwMDAxRjhCMDgwMDM2Ci06MTA4MEYwMDAwMDAwMDAwMDAwMEJDRDdEMEQ2MDE0RDVCNUYwOUQ5REY2Ci06MTA4MTAwMDBEOTlGMjRCQkM5MjRCQjlCRUNFNjhGMDkyNDFBMzRFMDE5Ci06MTA4MTEwMDAyNjI0MDEzNEUyMjQwNDhBMTY3MTExRDBEMDUyRDk4MDY5Ci06MTA4MTIwMDAyODJBNDg0MDVCNTdBQkNEODYwNDg0MjAzNUY4NTNBOUY0Ci06MTA4MTMwMDA1OEJBQjE2MEVENTdBREQxRDI5NkQ3MjIyRjI4RjJGQ0I0Ci06MTA4MTQwMDA0MTRERDUyQTU4RDQwMEQ2NkE2QjZEMDQ2OUE5RkEzRTEwCi06MTA4MTUwMDBCRTczQ0U5RDQ5NzYyNkIzNDk1MEZCQkU4NzJEQzM5RDg1Ci06MTA4MTYwMDBCOTNGRTc5RTdCRkVFRkI5Nzc0RjlEODIzRjE3MzBENjMwCi06MTA4MTcwMDBCQTI3NDU2NTk1RjA1Q0VBODhBNzE0MzExNjhFOTY2Nzk0Ci06MTA4MTgwMDBENzRGNjBFQzFCNTlFMUNGMzJGQzhDMzkzQzhCRTQ5ODIzCi06MTA4MTkwMDA5QjMxM0I2MzZBMTczQzRGNjlFREY0QTc1NzE2MTg4MzcwCi06MTA4MUEwMDA3QUEyRkNGMzI5RUY3QTA3N0ZENzlGNjJGQTY2MTY4MURECi06MTA4MUIwMDBGNkFDNTg3QUFGRDdDNTk4NEQ2MUMyMjkxQjk0OTk1QjJDCi06MTA4MUMwMDA3RUVGNkM0NjdGNEU4OUY4Nzc0RjIwRUM0OURFOEZDN0YzCi06MTA4MUQwMDBGNThCMjlFRjRFMThEQzZFNzk1OUFGNDM1NDE4NUJCRjBECi06MTA4MUUwMDBBRDIzQ0NBMEZDQTkwMDg1MkE4NDNCQTZFNkMxQkNBRTg5Ci06MTA4MUYwMDBERkI5OTI0NUNBMThEQjI4RjVCODY0ODA2M0UzRTdDMkFCCi06MTA4MjAwMDBDMjcwRDlFMEZFMTdFMzdDQUFCMDU3Mjk4NjcwQzIxRjVFCi06MTA4MjEwMDBEQkE5NzNFMDZGODUyOThFNkFDNkYyRjBDRDY4N0NGMjI3Ci06MTA4MjIwMDBFRjMwQ0E5RTUzRDA3Rjc5Mzc5NDRCMzU3OEUwRkYxM0Y3Ci06MTA4MjMwMDA5RTM1OTZBQjdBOENFNTg5MDc4QzY1QzY0MkY2RjAzODk4Ci06MTA4MjQwMDBDNjVFNkI4NjRFQ0Y2NDZDQ0VBMTBGMEVCMTc0QzZFNkNGCi06MTA4MjUwMDBDNjQyQ0YzQ0U5NjMyQzU3NzU4NUUzMzI2M0YzNThFODk3Ci06MTA4MjYwMDA5OUI3QTA5Q0Q3OTBDNkJBNDMzMEI4OEQyREM1NzU4MUZCCi06MTA4MjcwMDA2OUJFNTEwQ0YwMzUzMDgyOTVFNTJENEQ2NUNDMzVEMDc5Ci06MTA4MjgwMDBGRjdDMzk5M0Q2QTlBMUI3NzEyNjFCQ0ZEOEY3NkY2OUE4Ci06MTA4MjkwMDA2NTBDRkE4OUQ1MDlGMUVEMDBGRkVDRkE2REIzQzdDMEEyCi06MTA4MkEwMDBGM0ZFNEE1QkMxNDNEODI4NjI3RjE3RTdFNzgyQ0U0RUQwCi06MTA4MkIwMDBDMTdDMzM2RDJCNDc4RDg2RkFFMUE5Njk0MjJCRDRGQjMzCi06MTA4MkMwMDBGRUI5NjdBRDJGODY3MkNGRjQ5MjEwRTIxREYwRjU2RTA1Ci06MTA4MkQwMDBGRjdDMDBGRkYzQzJCQ0JEM0VGRUNCOTVDN0U2OEU4MTlFCi06MTA4MkUwMDBFNzk2Q0EyNzY2RTM3MzRFNjI3REU4NkZENkE0Q0UxNjgyCi06MTA4MkYwMDAwN0Y0NzdDOTMyQTUwMkZCMEJENzFCREJFN0Q1MThDQkY4Ci06MTA4MzAwMDAwMDM5OUYwRkZDQ0I5QjM1MThERUUxRTAzMThGQUZGN0QyCi06MTA4MzEwMDA3NzdGQjM0MkY4Njc5RjAzM0QwMDNFQzNGODA5REE4N0QxCi06MTA4MzIwMDBBNTNFMjkwNDc4Q0VBRDExRDQzOEQwNEQ5RTJBQTg5RDAzCi06MTA4MzMwMDAxNkZDRDBBRUYxODMxOUZGNjIyQzgzMjE5RkQ1Q0QxMzlCCi06MTA4MzQwMDBFM0VENTAyNUQ3NjUyN0ZDRTdDRTE0RTIwQThDOUZCQkVFCi06MTA4MzUwMDBCNEFGRkIxNDk0MkY3M0Q5RTMyMjdDQ0ZDQUVDMTJGMDk0Ci06MTA4MzYwMDBGQkZEQ0IxOEVCMjgyMkYwRDI2QjEzRDZGNzdFRDcxQTgxCi06MTA4MzcwMDA3QjIxN0M5RjE3MTQ5OTBERTg4MEQ1OENBMUYxMDg4RTg0Ci06MTA4MzgwMDBEMTg0OEYyMzFDMUYyRUMyNDdERUIyRDAzMzNGODJGMTJGCi06MTA4MzkwMDAyRjlGRTQ5NDQ1QTg3Rjc5MDNGRkFFQzNCNzUxMDIzQUZCCi06MTA4M0EwMDA4M0VGMUI4MUNFNjI0NDY3RDI5MTQ0RkNDQzM5QjQ3QzBDCi06MTA4M0IwMDAzOUQyRTMxQ0QzRkI2MkE4OEJGM0ZEREJFNDAzNjcxNDIzCi06MTA4M0MwMDAwMjVDQ0I4NThFMTk2OTAwNEE4QUJEODkzMTVDNjhDMDIwCi06MTA4M0QwMDAyMEQyQjVDRThGM0E5RTk2RUY2ODIxN0U0Q0UwMzNGQkRCCi06MTA4M0UwMDAyOUU0NjdGQzc3MzZBMTg2RjhFQzI5RDcyRjY1OTQxQjIyCi06MTA4M0YwMDBCQjMzN0JCNzMwMjBFMUFEMzI4QkQ1RTczM0Y2OUZBOTk1Ci06MTA4NDAwMDA3RDY3MEI1MERFMkU1RkI2NkVEREY5RjAzREE1RUZFNzIwCi06MTA4NDEwMDBBQzlDMzFBN0YzOUIzMzY2MjQ5NDUzNTNBRkE2QjI0RjYxCi06MTA4NDIwMDAxQjA3QTYxMEUzRUJERDNGMkVEMUM3NUY2NTBFREYwNjBECi06MTA4NDMwMDA5NTZEMTJBMTJDRDlFNDREQTFBMjgxNzY1OUQ4NEUxODgwCi06MTA4NDQwMDBBMjVEOTg2RDkyMkNEQUI5RjU3NjgwQTdCNUIwN0VBOUI5Ci06MTA4NDUwMDBEQUJDNTJCNUVGMzYwRDlFQzRGMTI1QzQ5QkFDQjgwNTBECi06MTA4NDYwMDA1ODBGNjlCQTI0MjNCRDdDNTkzOEIyODc5Qjc3ODQ2RDM1Ci06MTA4NDcwMDBCMjhGMTlEQzBFQzA2RUQxRTFCNzU5QzMxRkM3RUY4OUE3Ci06MTA4NDgwMDBFM0RCODc4MEZGQUJDNkM3NzBGRDM5QjRFRkE3MEQxRkQ0Ci06MTA4NDkwMDA1NDVGOUQ5RDdDQkUwODk3MURGNTk1QTJCODZEMDlGREEyCi06MTA4NEEwMDBEQ0I5RTc1RjJGOUMwM0M0MkJDRDY3QTExNEU4NDNCMjZFCi06MTA4NEIwMDBBQjcyMDhFOEJDNENCRUM3ODU5RDRCOTlGNTcyMDRGOEI5Ci06MTA4NEMwMDA2MTNEOTQ1NTc4QkZCRUFCQzNBNUMwRkJCMkUyQkJENjNECi06MTA4NEQwMDAyMUQxOTc3NUE3MzI5NDA3RTM5ODlDRjkwOEY0M0I0RTk1Ci06MTA4NEUwMDA5NjU4MzdBRURBRjk3QjZENjk1MDY2MTdCMzUwMDlGNEM4Ci06MTA4NEYwMDA5QkIxMjc5NUU0NDk2NkQxQjkzRjExNjBEQ0NDNEM5NzFDCi06MTA4NTAwMDA4QUVERDMzMkFCN0ZDMjg4M0U5ODIyMjVFMDIzQURGNkI4Ci06MTA4NTEwMDBCNUJBMzQ4NDZCMzYwQjIxMkI0QTQyOUNENTIyOTM4REZECi06MTA4NTIwMDAwNTFFODI3MkU2QjQ2REFDMUVDQTE1N0ZGMzI4MjJGMkQ2Ci06MTA4NTMwMDBCNEM0RjU1RDNCQjY0NzNERERDNkY2QTE3RTA5NkFGMkRGCi06MTA4NTQwMDA2NzlENDNERTQ0RkFFMzVBODlBMUZFNDgxQjc3OEY4MDdBCi06MTA4NTUwMDBGMERDMEY1RDg5QzA5NzY1NjU1OUIzRUJBMTVDQjZERkIwCi06MTA4NTYwMDAxNjUyMTQ5QzRGODc1MDg4RjMwOTg4QTRCNzc0N0NFQThDCi06MTA4NTcwMDA3MkE0RTJFMzZFQ0VGNDYzNTk3QzNCQzBERjY2OEY3NzcyCi06MTA4NTgwMDBBM0JDOEE0REJFNUNERTBFRjBFNDVFOTkyMEFGRjFBRjc1Ci06MTA4NTkwMDAzRUMwMDFDMkZCRTJBNURCREI4QjkwQkVBNTc3MTNGQkRGCi06MTA4NUEwMDBDQkY4MzhERThERjI4Q0Q1MzY4NEIxQkQ2RkE2NjQ5MEUxCi06MTA4NUIwMDBGRkE5OUEzQzRCMzVFOTgxRTYyQzNCQzkzMzVEMUYzMDVFCi06MTA4NUMwMDA1NTUyNjQ5OEI3QTBDRDlCN0QyRjRDRkFDMEM5NDIyRTVFCi06MTA4NUQwMDAwN0Q5MkIwQkM4MEUxMTU4QUY3MDJBMERFNjhGMTUxMTU1Ci06MTA4NUUwMDBFRTAyM0U4RjQxRURBQjc5N0IxNjA4QjlEMENFNzFBNjc1Ci06MTA4NUYwMDAzNjM1NjE3REY4OThENTAyQzgxNUFFNEQ1NTUxM0YwQjAzCi06MTA4NjAwMDAwRUU2MEE1NkMwQkM2RDJDRDIwNTc0RDIyMjMwMDlDQkJFCi06MTA4NjEwMDAwM0UzNzUzMzFDQ0ZFOTRBNkI0M0JCRUIyOTU3QUIwRDIyCi06MTA4NjIwMDBGMUQ3RkEyQ0U4MEY5OEM3RUQ3NkQ2ODA3NjQxQUIxQ0NGCi06MTA4NjMwMDA3MjY1NDFGQkE4NjZCRkFEMkExRjlEODNFNTBDQTBFREM2Ci06MTA4NjQwMDAxRUI0MUJBNEIwOEM3NEI5Q0E1RjlDQzNFMDdEQkFCN0RBCi06MTA4NjUwMDBGNzlCMjg2N0JGOTZGOUFCMTlBRTAyOTBBMzc1NTBFNzU4Ci06MTA4NjYwMDA1QzkwRkI5QjFFNUIxN0FCODFGMTRFRTYzMTI1QzFDRUMyCi06MTA4NjcwMDA3MzRBNEQwQ0VEMjlFN0M5NDJDM0ZCRUU2Njk4RDE5OUM4Ci06MTA4NjgwMDAwMzY1RDU2REFCQzc3MUFFQ0Q1NDA4QUZCNTRDNkVDM0E1Ci06MTA4NjkwMDA3NkI1ODAwQzI1NjE1RDlDMjc4MzRDOTk2MEQ1N0ZCRUEzCi06MTA4NkEwMDBFMTdEMzdEODQ5OEE3MzI0RkRBNzMxQTUzNEIxRkYzMTY0Ci06MTA4NkIwMDA0OUZBM0ZDM0Q0QkY2Q0Q5RkY0MEJGNUU0M0JGNkIyNEIwCi06MTA4NkMwMDA0Njc2NzRDQ0U3QTY3NTM3REIwNUFCMzNFQjU2NjRBMjcwCi06MTA4NkQwMDAzREVBNjQ0RDVEMTY3NjY3NEJBNjhERTBCRTNERDBENDc1Ci06MTA4NkUwMDBBMzQyRkIzQTA2OEMwRjc0NzJDMUU3NDc0NDQ2RjYwQzZFCi06MTA4NkYwMDBBQzE0RDAwQkNCOTdGQUZBRTk3ODM0RDZFM0Y0NkI4QjUxCi06MTA4NzAwMDAwOTBDRTVEMjA1OTJEREMwMjc1Mzk4QjE2Q0I2OEI0QUFGCi06MTA4NzEwMDA2MEFENzE1QzlCQTdCMjA3RTk2Nzk1M0Y1NTcxNUFDMDgwCi06MTA4NzIwMDBBRjNGN0I5QUQ5OTRFMjEyOTg2RjZBNzgyOTAzM0VCRUQ0Ci06MTA4NzMwMDAzRjczOUY2QjREMDBDQUU5OUM0RTFFQ0VGQ0UzMENGNEM4Ci06MTA4NzQwMDAxNzdBMDQ0RTdGNkI3QzM2QzI0QkI4MkVBNzUzNENFODg5Ci06MTA4NzUwMDAzN0VDNjAyNTI4MTdDMzQ4REY2RTBFMEY4RURGRTNDRjlFCi06MTA4NzYwMDA3RkIwREQ2MjdDMTBCQjA2RkI2MUI2MkE0QzI5NEU5OEI3Ci06MTA4NzcwMDA1NzhGNjYwN0Y3OEYzNzM1QUYxM0Y5QTA3RjNDMjdBQkNDCi06MTA4NzgwMDBBMkYxNDRDMDdGRTI3OEQ5NUY2Q0JDREZFM0ZDQ0EwNjhCCi06MTA4NzkwMDBDNjlCM0RERDM4QkZEOTBFOTlFNjM3NUJFMzVGN0RCQ0Y0Ci06MTA4N0EwMDBERkUzRkM4QUJFQzA3ODM4QkZDNEYxQkU2NjlDREY2Q0Q0Ci06MTA4N0IwMDBBNzRDRjM5QjJENzJGQUVBMUYyRkZCOEI4REQ3RDM1QzRFCi06MTA4N0MwMDA0QTc2RjBFRDBFOTA0RjQwMjdBOUU1M0I1QzYzNjBEQ0Y0Ci06MTA4N0QwMDBEQjVENzY1OTUwMDZEQUQ1RDZERUUwOUE4QkJBRDczRDA2Ci06MTA4N0UwMDA3NUJBMUZDNkE5OUIwNjk1NzNCMTk3QTlEMzZCOEIxOTUwCi06MTA4N0YwMDBEQjI0NzBCQUY4RUJBNjNGQUY0M0JBMzgzRTczNTUyOTc1Ci06MTA4ODAwMDBFOTEzQ0RCRUJFMDRBQjgyM0VCRTQ0RTJGMENFQ0E3N0QxCi06MTA4ODEwMDBDNzVCMTJGMDc4M0ZDODExMTVFMDc4MDBGODVEMDU3RTVGCi06MTA4ODIwMDBEQzBBN0M4OUU1Nzg3MzgwOUUwRjgyQkQ4RUNGNkQwMDU3Ci06MTA4ODMwMDAyRjdFN0ZBODM5NDRFNTg3OUIyN0QxNTNFRkE3NzQxMjc5Ci06MTA4ODQwMDBCN0RCQzdENjU4REJFRDY3NjQ3MUJGNkY1MzUwOUU3RkFGCi06MTA4ODUwMDAyNUVBQjVEQUQ0MTBFQTQ1MzZFOTNDQTYyNkRBRDVBQ0U1Ci06MTA4ODYwMDBFOUE5MTRGOEJFRjEzMjU2OEVCQUYxOENDRDFDNkU1RkI4Ci06MTA4ODcwMDA3RDM2RDlFREE5RTU3QjdCOUFBMTdDQkI2NDU3NTAyRjRGCi06MTA4ODgwMDBERkFFQjAxOTU2N0U3MzExRUE5OTJBQjQ1Nzc5N0I3NjE4Ci06MTA4ODkwMDAxRUY3QzM3Q0UxREVCREE4RjdFNkEwOUQwRTc4RjVDRkZDCi06MTA4OEEwMDBFREREOEJGRURGQTU2MDk3OTM1RTY2ODdGN0JFMDVERjgzCi06MTA4OEIwMDA1RjAzRkZBRjFEQ0JBMjlCQzk1MDlFMzVDNzRGRTNDM0RCCi06MTA4OEMwMDA5RkY0REE2Q0I0REZGOTlGQkI2NzFFMjNCRjIyOUNDMjAyCi06MTA4OEQwMDBGNTgyOEZDRDdFNjYwRkMyMUI3MjI4NzFFQThGREQxQjc5Ci06MTA4OEUwMDA0NjNFNTBFRDRBM0I4OTgyQjAxREY1QjQxRkY1MzQ3Q0ZECi06MTA4OEYwMDBBRjNERUM2NDM2ODQ2RjlBODNFNERBRENCOTQ2QkY2MTNECi06MTA4OTAwMDA1MzRBQjc4Q0Y2Q0ZBNjcyMUY2QjgxRkUyRjlENjlGQzcwCi06MTA4OTEwMDBFRTc0NzI3RTBCOUJGQzg2NTlBNjMyNDg0OEVFNzc4QjJDCi06MTA4OTIwMDAwQjMyRDBERUJGMUQ1RjREMUU4Q0I3RThBMTk2REJGNzgyCi06MTA4OTMwMDAyNkQwNjk1RTk2Qzc0NzcxODAzM0Q4MTkyOENGNEVCMENDCi06MTA4OTQwMDBCMjNCRUJGMTYzN0UxNjE5MkJFNkY2RkY2QzhFRERCRUIzCi06MTA4OTUwMDAxNzUwRkYzMkNBQkQyQUE0NkYyRTM3MDZGMzA3ODc2NzY4Ci06MTA4OTYwMDBCMjU2RUZGRUU2OUUyOUVGOTYwQ0MwOTcyQkM1MDVENEI0Ci06MTA4OTcwMDAwMzc5NEJFMTdEQzI3QzI1NUY1QzQwN0Y4Nzg5OEY5NEMyCi06MTA4OTgwMDBBMzdGNjM5RUM3RkRDMjIzNDE2NjMxOUVGRUNDNjVEMkE0Ci06MTA4OTkwMDA3Qjg4MTc1QzRBOTRFN0U2Rjk0RTFFMzRERjlBOTc4QjgyCi06MTA4OUEwMDA5OTE1M0YyOTlCRDA5RTlCRjVBQzE4NkE1MTA2RjBBMTAyCi06MTA4OUIwMDBDRkZGN0Y5QUFGOEU2QTdBODZBOTNFRDYwREY0RjIzMjQ3Ci06MTA4OUMwMDBEMDdCM0JGNzYzMThEQUE5M0FCRDQyMDVCMjlGMkVCOUI2Ci06MTA4OUQwMDAwNEJFMjM1REE4NkEwMUUyRjNFNUQxN0REQkFFQzI3Njc5Ci06MTA4OUUwMDAyMDNCNUFEMURGRDVFREEwRUU4MzM2QjQ4M0JFNjhCRkZECi06MTA4OUYwMDA5NzVDRUIyMDdCOEJCMTdBRjlCREQyODFGRTkyQUQwRkYzCi06MTA4QTAwMDBGNkZCNUU4MkZFRUNCNzEzRjE0RkI1MjZGQTEwQzY5NjYwCi06MTA4QTEwMDA1MDgwRUM4MTlCQzEzRTQ2N0YzRjVBRkY4MTk0Q0VCRjgwCi06MTA4QTIwMDAxRjQ5QjA1M0YxQ0Y5MTg0RkU1QUY3RkM0QzUwMDBBRTcxCi06MTA4QTMwMDBDRUU2QUUyOUVGREExM0U0QzU1MkQ5QjYwNkVEQjk5NjAzCi06MTA4QTQwMDBCODQwNzE4ODZFQTgwN0Y2QzBFOEE1OEFBRDBERjA3RjIyCi06MTA4QTUwMDAyNUY2ODNGNDY5OTJFQkEzREJBMDlGNDQzQkE1NjZBRUE5Ci06MTA4QTYwMDBGQzA4RDA0MzVCNTk1RDQ3MDg5RUVCMzdGMzc4OTk1RTZECi06MTA4QTcwMDBCRjNGNkVFNjhCOTE3RjZFNjc0RDRDMDAzODFEMjlERjNFCi06MTA4QTgwMDBGQjcxMkZDQzQ3NkQ5NTU4Q0ExNDI4REJCOUJEQzNERUU2Ci06MTA4QTkwMDBGMjkwNUMxMERENEQzRkM1RUY4MTE4QzgyRDlDNzc1RENECi06MTA4QUEwMDBEMzYzNTg4RUQ5NThCODE1OUVGN0E1RjFGNjUxQzkyNTRDCi06MTA4QUIwMDAzQjQzMTgyNzY5OUI4MUQzQ0YwQzQ2RUVDRDAyRkNBRDFBCi06MTA4QUMwMDBDOTRFMjUzOUU4NzhEQkYzMjBDQTI5NDc2NkM1NTJCNDc4Ci06MTA4QUQwMDA3QjE2NDRCRjFCQzY3OEE0RUM2NTBCQzMxNkY0QjU0MEU3Ci06MTA4QUUwMDBCMzFGRTI1OTNDRUU3MkM4REU1RDkwMDk3MEQ3MDZFQjA5Ci06MTA4QUYwMDBFMkQ4RUZBMEZBRDFFRjUxN0Y1MzQ0NkIzQjZDQTdENjdECi06MTA4QjAwMDBDRjE2OUJCNTVDNzg1Q0ZCN0VGOUYyMjczRTc4MDhFNkQxCi06MTA4QjEwMDA5MzU2RUMwRTIxQjlBRDNGODdFRDEwNkM4M0VCRUZGMjZECi06MTA4QjIwMDA0N0JBMTJFMTQ4Mjk5NjI1OEE4M0IyQUVDOTY4Q0ZBRDBCCi06MTA4QjMwMDBGRkVDODFBRUM3MDBFNTU5OUZCOTQ5Q0U2Njg5OUVCODYyCi06MTA4QjQwMDA1MDY0NjhCRjMzQUI2QTcwRkJEREZGN0EzRDgwRUJCM0U2Ci06MTA4QjUwMDAzQjg1OTE3RTY1RUM4NTBCRDE5RkRDRDg1RjY2MzEwMTRBCi06MTA4QjYwMDBFMzlDOTk1QTM5RjZGMDg1QUFBMUJDRjhDMjVBMkMyMzg1Ci06MTA4QjcwMDBFRDAyNTE0RUJFRkJEQkVCNjNEODVFRTA2NTE2RkIwRUVCCi06MTA4QjgwMDBBRjZGRTdGNTczQjRFRjUzMkVGQUYwMjc3N0EyM0VBODQ0Ci06MTA4QjkwMDA3NjkwMUZCQTUxQjM4Mzc0RjhDRUYzOEE0NDNGRTc3OUQ1Ci06MTA4QkEwMDA4N0M2RTM0MTREMkVCODQ2OEVDNzgzNTY3OERDMUQ1NEU4Ci06MTA4QkIwMDBERkM0RjcyOUFDNEI0MDNBNEVGOUNDNzUyM0I2RkY2MUMwCi06MTA4QkMwMDAzMzBCNUYwOUIwNkY1MTc2RkNFQzRFODVEQTFGQjZDMkVECi06MTA4QkQwMDBFMzU5NDFGNTA4QjY3NzJEM0ZGMjkzM0IwMTBFOEYwRTE2Ci06MTA4QkUwMDBDNzQ0NzY2MzEyMzhGRTMyRDQ3QUVFQzhFNjcyNkU5RUJGCi06MTA4QkYwMDA4RkVCOEQyQ0NEREU3NDM4N0EwMkIzRTEyOTU3RkVFMDdECi06MTA4QzAwMDAwNjE5RTRDRERBQTJBRTA2QUJGOEYzMDlBRjhEREE2NTRBCi06MTA4QzEwMDAyNjg5Qjc2Nzc4MzlERTc2RTU4NDNGNDUzOERBRTQyNzc4Ci06MTA4QzIwMDA1QzM4N0VBQUMwQzI1ODdGQzNBNDVFMjYyNEY0N0JCNkZCCi06MTA4QzMwMDA4RkFGMDNDMDZERjM0MkJCRDRDOTRDNDUzQUYzMzA0RkZDCi06MTA4QzQwMDA5QzAxOUQ3OTJBMzlGQzFCMDJBRjMxMDVEQTc5NEFFMTkyCi06MTA4QzUwMDBFOUM2RjdCREM0RkZFODcyNzBBMTA2ODIwRUNBMEU4RDg4Ci06MTA4QzYwMDAzRTMyRUU2RUJGMTBFOTIxNEJENEU5MkRBRjFERTlDNUIwCi06MTA4QzcwMDA2MUQzRUJFNzVEODRFNUNFMkM1RTJFRjdFNUI1QzdGMjU4Ci06MTA4QzgwMDA0MUNGMzhBMDBEQ0E4NTVDMDdEOTNCRTZGOUU1NjhGMDBECi06MTA4QzkwMDBCNkZCNTVCRkQ3NkY4MTRGNjcyRkFERDNDNjcxOEU1MENFCi06MTA4Q0EwMDAwQ0Q2NzU4QUFEQTc2MTMxN0VCQkM4NERGNjFBQkM2Rjc0Ci06MTA4Q0IwMDA4ODI3Q0M3RkJBNDY4N0QzQkREQ0RFREFGODJGNTc0MzRFCi06MTA4Q0MwMDBEQzYyM0Q5MkQxRTk3OEVGNjlEM0U5NzhBRjM1OUQ5RUJBCi06MTA4Q0QwMDA4M0Y4NEZBMEQzNEY5ODM1OUQ1NjVCQjUwNzNBOUQ2OEYyCi06MTA4Q0UwMDA4NTBGNzM1OTY0RUFFNjQ2MDA1MEZBNzRGQUMzNzdBMjE2Ci06MTA4Q0YwMDBCNkZBN0FDREU2QzdFMDM5RTUzM0I3RTQ4NTNBRTIxOTRBCi06MTA4RDAwMDA4Q0VDNDQ5QjhCQ0JGNzAxQjkxRjk5ODZGRDRCNzIxM0ZBCi06MTA4RDEwMDBCRDE3REQ2MURBQUY3OTMxOEJGNzNGQThERjg5RDU5QkNECi06MTA4RDIwMDA1MTZFOERBMERGMzBDRURCRENFRjI4MkY4Nzc3Q0E0NTcwCi06MTA4RDMwMDBFRTQ4REMwMkVGMjdCRDEyRjc0QjdEN0NGQzY0RkM1MjUxCi06MTA4RDQwMDBFQUUzN0U3MzUyN0VEMUU5M0YyNzFDNDEzODg2RTM5N0UwCi06MTA4RDUwMDAwQjA2Rjg2NUU5QzhGODY1MDdGMTRCNUExOUU3OTdCNEFGCi06MTA4RDYwMDAyNEZDQzI2MjRFRTI4RkI1NDVCQzdDRjNERDNFRTI4NzU3Ci06MTA4RDcwMDA3RUZFODk5NTE4RjkyNzU2NjJFMDlGNjlGNzk0NTA3RDI5Ci06MTA4RDgwMDA3M0ZCNzQ5Q0I3MDU1RTYyNUU3RDFFRTE2NjlDODc3QTBDCi06MTA4RDkwMDBCNkRDMjY5MkJERDFDQjUwNEU3NUIyQkUzRDRFRTRDMzdCCi06MTA4REEwMDAxQTIxQjQxRERFQ0U4QUY1RDRCQjE0RkNERUMzNjY4MzYzCi06MTA4REIwMDBGREIxNEVBM0ZCQUQwODBGRkE0M0Q1NUEzQzRCRUE2MTE3Ci06MTA4REMwMDA5NzdBMDZGM0IxQTdCMkJCMzQ5MjgwRkYwMjBEOEY5NzVBCi06MTA4REQwMDBGOUMyNzdFMkY4OURBQzc3MkNEQUE1QzlENkU5MUUwRDY5Ci06MTA4REUwMDBERTFCMDNFQTNENTY3NDNFOUNERUQ5ODk3QUM3OEY0RjVECi06MTA4REYwMDAwRTc3RDY2N0FFMjY5NDAzNjYzRTlGNzJGRDZGM0Y3ODZFCi06MTA4RTAwMDA2ODg4N0U3RUE1QzFGMUE4RjYzQzBEQkU3RkQ0NkJBNTE3Ci06MTA4RTEwMDBBNzgzRUEyRjRDN0M1RjI5OENCNkU0RkI1RjU5QjUwNzJBCi06MTA4RTIwMDBCRUZGQjUxNTNFQkUwNDlGM0Y2NUM1RTcwRjc4NzlGRkNECi06MTA4RTMwMDBDM0UxNTlGMjcxM0M0QkJFMkY4N0U3MjNEQTNBQkQ3OTgzCi06MTA4RTQwMDBGQTc4N0UzMzA5OUVGRkU4RjU4RjA4Q0Y0NzkyQzhENzlFCi06MTA4RTUwMDBBMzVFODJDMzE2QzM3RDAxRTQ3N0Y0REZENzREOENGNUEyCi06MTA4RTYwMDBFMTdFQTgwNTFDN0Y0REVDQzdBNUYwN0VDMEI0RkY0NDkxCi06MTA4RTcwMDAwMDNBOUZGMkU5QkE1MEM0ODIyRkExRERCMTQ0RjhGNTVGCi06MTA4RTgwMDA3NkY3Nzg2NUNEOEY1MDU2QTI1REJERTVFQjZFREE0RjczCi06MTA4RTkwMDAwMDNERjgwRkVGNTcyQkU3NkQzRTBCNzkzQ0M1QzZFNTVCCi06MTA4RUEwMDBEMDY1NzcxRjVFOEY3MTlBMkZEMTdGQkE1NUZGQ0Y2OTNBCi06MTA4RUIwMDBGNDM1OUNGRTJGNEFEMEZGRDg4RjU5REU3NTMyMUU0RkY1Ci06MTA4RUMwMDA2OUY3NDdGMjdEODRBRkRFMEI1MTNFNkRCRDI1NEI0MDA3Ci06MTA4RUQwMDBCRjJFNUZFRDE2RDBGRUY3NkJGQTY1QTM5N0ZCMzM3QUQyCi06MTA4RUUwMDBCQkFENTJCNzIwNjFGRDI2NTk4ODA5ODZGRUNFMThBQTZGCi06MTA4RUYwMDAzRjMzMUMwMERGNTg4NEVGMzI5RjdBMTYzRUVGRjFGNkM1Ci06MTA4RjAwMDBEQjdCQTc2NTBGNTUwN0Q0MEE2QzBGNzJCQTEyQzc1N0RGCi06MTA4RjEwMDBDRjM0Q0E2OTdEMUVCNjcwMTdFQjQ1RkQwMkVFNzdEQ0QzCi06MTA4RjIwMDA4MkFFRkM5QUJFODQ3RUNFQTc3RTM0Nzk1RkU1RDNFOTFCCi06MTA4RjMwMDA4QUY3NzdCQUZBMDZFMDlCQUVDMTM3MDM5RjY2RjhDQzkyCi06MTA4RjQwMDA3ODE5MEVDRTlCMTA0RURFREZBNTg5NzAyNkVCNEZGNzA5Ci06MTA4RjUwMDBBRkY1NzUyMjdEOUExMEQ3NTkzOEEwQUZBRkMwRkU1QzJGCi06MTA4RjYwMDA2QjZDMzFFNjFCRTA1RjVENUY4MzY0NEFDNUZFQjczODFBCi06MTA4RjcwMDA3ODFDNzVDQkIyQkI2QTMxREZBMEYzNTZCOTFDNTE5Mjk1Ci06MTA4RjgwMDBCQjk0RUIzOTY1NTkyMUM1NTVBRkQxRkEzNUMzREZERjQ1Ci06MTA4RjkwMDBERUQxMzU3NjQyMTk4REJCMUNDN0JEQTA4Njc1QTNEQzFBCi06MTA4RkEwMDBDODQwM0I4MUUyMEZCMjg0RjE4NTJDNjc0NzAwRTNCMkYxCi06MTA4RkIwMDBFQjg1OEU4NjQ1QTg0NzJGNzQ5M0JFNjU4MUI5OTZGMURGCi06MTA4RkMwMDAyOUZEQTlDNzlGRjQ3OUIzNDBFNTMwRjU1QkE4QkU5Q0E1Ci06MTA4RkQwMDBENkQxODQ3NkQyODhFQjNCM0IyQ0VEQUFFRjZCNzYxNThECi06MTA4RkUwMDBDQzZGRkQ5MDc4MERGODI4QkVBNUUzNzdGMDM4N0NGREI2Ci06MTA4RkYwMDA2QUMzNEQwMkUyM0JCNTBDODYwNDk2NEMwRDc3RDA2NkYxCi06MTA5MDAwMDBBQkFEMzhDRTdBRDE3RTJBMDU3QUExRkU1RUIzOENGQjU5Ci06MTA5MDEwMDAwREY0Qjc1Njg3RUIwMUE0QzcyRjBCOTc1RTJGRjk3ODk1Ci06MTA5MDIwMDBCQzFFRUU5RjUxQkNDM0NERTUxNjdEODBGMkIxNjdCRDdECi06MTA5MDMwMDA5NkZCMDdGQUYzRjY2NjU5OTU0MEZGMUM5Mzk1MEM4QzQ2Ci06MTA5MDQwMDAxN0RFQUVFOTQxQzY0MjgxNEIzREZGRkU3QTAzRjM4ODRECi06MTA5MDUwMDBGMzc4QTdBOTdFOTQ3MUJBNjcwMTE3RDk3NzE4ODY0RjVDCi06MTA5MDYwMDBBNDlCNTc3RERDMUY2RENGMEUzRkNCRTU2MzI4ODQ3NDM2Ci06MTA5MDcwMDAwREU1RTcxMUZGQ0MwNTY1MEY5NUY3NTM1OUVFMkZCRkFFCi06MTA5MDgwMDA0NEY1MDNCQzNFOTNFNTExRTExOURBRkQ4MURBNDlGREFGCi06MTA5MDkwMDBGREJDNDFGREJBRkJDNzNENDhERjdERkRFNTNGRDJGNzkyCi06MTA5MEEwMDA3QzVFN0ZBNEUzMjRBQzJCOUY3RjhGNDhGM0ZGNDQ1MjY4Ci06MTA5MEIwMDAzMzcwN0ZGNEIyRTg2MjhBMTNDRDhGNUU0M0NGNzVDREYzCi06MTA5MEMwMDA3MjJEQzZFMzVFNkFFRTZCNkI4M0U3NjVGMzE3Q0I2OEMwCi06MTA5MEQwMDBGN0NGNUY3MjM3RURERkVCRkQ1RjgyN0UwNUYyQkIyMkRCCi06MTA5MEUwMDBDRDIwQkJBOEM4MTZERUU2MUVFMEI3MDEzOERBQjQzQ0Q2Ci06MTA5MEYwMDBCM0RFN0FBNDIzOTdDQUZBREFDQkExRkRBNDhGREJEQTE4Ci06MTA5MTAwMDAwQzc5NEUxRDk0M0Y5M0EyNDg5RjI2QzZENTc1MzlGODE5Ci06MTA5MTEwMDBBMTQzRkQ5NEU2M0Y3MjNBMzZDRDk3QjFCRDMwRkUyN0FDCi06MTA5MTIwMDBFRUUyNzg4Q0U4QkE0RUI2RTIxNzdEREVDOUZBRDdFN0YwCi06MTA5MTMwMDA5RDRDQ0VFOEY4RDNERkFGMkZBRTkwNzlGRTRGREM4MEE4Ci06MTA5MTQwMDA5Nzk0OTI3QUNBRjdCOTQ0RDBFMEY0QjgzNDdFRTNGNTQ0Ci06MTA5MTUwMDA2NkMxMzg0Rjk0MTE3RDI4NDhCRkIzMzQzRkNFQUMxNzU5Ci06MTA5MTYwMDBGNDcxM0Y3NDQ0OEFGQ0Q4MEVERURDNUE2MTgxREYxMTUxCi06MTA5MTcwMDBFMkVENDBGM0QyNzBCRDFERTU3MTU3MEFFRERGMzM5OTgyCi06MTA5MTgwMDBFMkZDN0FCRDg2MjRGMzNGREZDRkY1MDg3M0FBMzQ5RjUzCi06MTA5MTkwMDAwREI3NjVDNEQxRUVEOEQwRjgyQjE5ODMyQjY5RTMzRTA3Ci06MTA5MUEwMDBBOThBRTE1M0U4M0JCMTA4RTVDQjZEMUVDQUM3Njg2OEUwCi06MTA5MUIwMDAzQzUxRDU5MkQwRkZDMkE3RkZDMzg1RjFERTg2NzFBQkNCCi06MTA5MUMwMDBGRDE4Nzc1OUM4QTQ0RjEyRjMxRENDRTMzNjQ0QUYyN0RFCi06MTA5MUQwMDBCQThEQjUwODBENTZGRUQ2MUJEOTlDQUYxNzYyOEE4Qzg2Ci06MTA5MUUwMDA0OEZEMUQ0OURDNDc2RTU0MkExQzE4OUY2ODhDMTlGN0VFCi06MTA5MUYwMDA3MzQwNDMzQTkwM0UxNkFGMzNCRjRGRDhDRjExQjE3RjgzCi06MTA5MjAwMDA0NkYzOEVFMTY2MUVFQUJEMzUzNkEyQjcyRDgwMzdGNEVGCi06MTA5MjEwMDAwMzBCNDE1REUyRjM4REVDMkM4RDFGN0IwODlGRkY2RUVECi06MTA5MjIwMDA3OERFQzg5NkY5QkU5QjhCQzVEMkIyMDZFODI2MjdEMjU3Ci06MTA5MjMwMDBDMTUwM0Y3OTJBMDVEQURGRjQ3OUY0RkM4ODJFRDI1MzQ1Ci06MTA5MjQwMDBGN0I4RjUzMkU4MkRDMDdGQjg0Q0IzNzM4QUY5NzcxQkI1Ci06MTA5MjUwMDA5NkQxRkY0OUVCRDk2QjAzM0U1RTczRUY1MzE3MDVDNkZBCi06MTA5MjYwMDA0MjdGNjU5MTgwNERBNkYyRjM5MjFGRUQyRjVFNjZCMUFECi06MTA5MjcwMDBBNzlFREY0QkY2QUM3Qzk2MTAwMkZFNkZEQkZERkNCM0M1Ci06MTA5MjgwMDAwNUU0Q0Y2QkY2RDhFRUU3QzkxRUQzQ0I4Qzc1MzM5OEM3Ci06MTA5MjkwMDA0RjY3NkE3RjU5NzUwNUEwM0NCQUJGMUNDM0YyNTZDRDEzCi06MTA5MkEwMDA4RTVGNzNFRkVFRTdEQkM4M0UwOUM3RkMwOTdBQjI5NjIyCi06MTA5MkIwMDBGMUY4RjI1N0FEMUYzQjAzNTc3NjYwM0U1MUFDRDg0NkVDCi06MTA5MkMwMDBGRTVFQUE4OTFGMUZGMTNCQTg1RTUxNEVFNDJFRTJDNzQ1Ci06MTA5MkQwMDA1QkZCMjQ4QzM3Mzg4MkFGRjk1MDBFOEMyQTNFQTY4RTY5Ci06MTA5MkUwMDAwNkZBMUY1NUMzRDM2NDU4MjkxRkI3QjM3ODE1RDkwRDkzCi06MTA5MkYwMDA5RERBQkFDMEZGNTZBM0RFMUI1ODlGMUVEM0ZBRjBGNUM1Ci06MTA5MzAwMDAwODU3RjZEMEZBNzhDQTdBNjhCRDZDNThBNkI4MUZERjNECi06MTA5MzEwMDA4RkJGQjg5MkRCMUJCMjkzRUYyQjZDRjc3MzdFRDhFMTUzCi06MTA5MzIwMDBFN0ZFRUQwRTNGRjc0RjMzOEFFRkEyRjg0RUNBMEMxQjUzCi06MTA5MzMwMDBENUNGRDA5RTY2MzlCRUMzMkY2OUYyOUNFMzYzNzczMEU4Ci06MTA5MzQwMDBEMkU1NEZCMDVCRTE3REI4QjQxMkU1OUIyRjBCRjc1OTI2Ci06MTA5MzUwMDA2QjhCQTUxQjkxOUU3RkFDRjlBN0IwNEU3N0QyM0ExNUM3Ci06MTA5MzYwMDBGOTUyMjM3Q0REN0VFM0Y3NUJBQzVCRTlDOEQ2RURGNTEzCi06MTA5MzcwMDBFNjA4QzlBQjY0RUI3NkQ5N0MzMTZDMTU3NzdCNUVDM0FDCi06MTA5MzgwMDBDMzQ3MEQ3RkZBMDE0RTY3QjlBQkNGODFGQjMwRUI4QjQyCi06MTA5MzkwMDAzNzE5RjJBQTVEM0I2Njc3NjMyRUI0OUU1N0JEM0EyRDBFCi06MTA5M0EwMDBCRDA2RTVCNjc5RENENzNGRkYyRjFGRTI3N0U2QkY5QzBECi06MTA5M0IwMDA5NkYyRjE2MzREM0VCRUQ2REM0MEVENjA4MTE1Mjk5QkVGCi06MTA5M0MwMDBFNDAwRTM3OTJGRkQ3OTYyQzIyOTI3NERFRjc1Q0M0Mzg0Ci06MTA5M0QwMDBCQjgyNTg5RkIxQjlFMUMzQjQ1RkJEMjgyMDMyREMxRjA2Ci06MTA5M0UwMDA1RkM4OEM3OTY1MkNBQUU3MDVGMzNDRDhENzI1NzA0RDZBCi06MTA5M0YwMDAwMTg1QUZDNzg0MTA2MDhBMzU0QUIzNzVCOTYyQzgwRjVBCi06MTA5NDAwMDA5QjM3NzdGNjNFREM4NzVGQUNFREMzODM3QzMxN0M1RkI2Ci06MTA5NDEwMDA2MkNBMUJCQkJDQTEzMTVDQUY3RDNGNEU3RkM3MDk0RjA5Ci06MTA5NDIwMDA3MzE1NkUzN0NFNzVCQjQ5QkZDRTBCQ0YwRkQ3MjdFQzY4Ci06MTA5NDMwMDBDN0JERjFERkEyNjUxRUZBRjlEOTNBNUVDMkUxRkE5MjIwCi06MTA5NDQwMDBDMTc4NTkxNDE2MUNCMjMyM0M3RUNDRjhBODk1MzhCRUFGCi06MTA5NDUwMDAxQTM1N0M5OUYxNjNDNkMzRTJCOUIzNjlGRENERjM3RkQ4Ci06MTA5NDYwMDBERDE1MjZGQ0JDMEVGOEMxN0M2MTMzM0UxODhCNUM4QzhDCi06MTA5NDcwMDA3NEZCQzY3QzkxQTE3RDNDNUQ5QzY5QzczQzgxQzVCM0YyCi06MTA5NDgwMDAwNTg2Rjk0NTRCNTgyODlERTcwN0FCQjNBNjI1QzA2QjY5Ci06MTA5NDkwMDBDNkEzMTk1RjhCOUY2NEExNkVFODc3RjFCRDFFNUFCRjBBCi06MTA5NEEwMDA1NzM0RkM4OEREN0ZBNzc5ODU2MTVFRUQ3QzVFNDc3ODY3Ci06MTA5NEIwMDBGRUFBNENGM0JBNTQyRDdGQzYwN0RGMjM2RDIwNkQxNTJECi06MTA5NEMwMDAyQjNEQzJFN0IzMDhFNkQzMkUwRkQ2MjcyNzU4NEQxM0ZFCi06MTA5NEQwMDBEMkM5MTI1M0RFODIxOTNFMzNGQzMzNTEwRTRFMUVCQ0VDCi06MTA5NEUwMDA4RjVGOTFBREVERTM4RjY3MjE2RDFGM0Y4MzhFMzU4NEQ0Ci06MTA5NEYwMDBGQzQzRTYyRDBDRjAzOUE3QUY4NUQxRDlGREUzNjFCRjYwCi06MTA5NTAwMDAwMjhCRjQ5NzY1QzBFRkNDRTdCQzFCRTdDMUJGNTcwNUUyCi06MTA5NTEwMDA0NDA1RjMwNDY3Q0YxRkIzMDZFNzFGNjZFMThDRUUyMjE0Ci06MTA5NTIwMDBCNEY3RkJFQzI4NDcyRTY1NjBDNjQyQkIwQjYwOTJBOERGCi06MTA5NTMwMDA2RkMzRjUyOTU0RDZGQjNERDZGMUIxOURGNDc4ODQzNTNGCi06MTA5NTQwMDA2REE3RkQ3NzI1NjNFRUI4RTRGMjY1NTVDMDQxRTM5OTU4Ci06MTA5NTUwMDBFRDk0OTlFNTI1MTkyODJGQ0NGOEQwRjEzNDBGRjE5MjJDCi06MTA5NTYwMDA0Njc4MTk3RjNBNzg3OTAxNzUxNUZBQjMxODQ3ODM3NUVCCi06MTA5NTcwMDBFQ0JCODZCMTA3Q0IwN0Y2OEY1OUJFQ0FFREM5NkM0NjY2Ci06MTA5NTgwMDBGQkZGRDc2NDY3NkE3NjQ3MTNDNTFEMTY2ODdBRTE5MEJBCi06MTA5NTkwMDA5RDM1M0NFRUU2RkJDODE1MDlGMkYxMUJDMURBNkJCMjUyCi06MTA5NUEwMDAxM0VDNTQ3RDFGRDlDRDdBMDk3RjU3QjhEQ0RERTI3ODAyCi06MTA5NUIwMDBBMkJCMEZGQkU5ODNFNDk3OUVBRjE5QTE3QzREMzE2M0Y5Ci06MTA5NUMwMDA5OTQyNzFCMUI0RjRGMTJDMDNFQzYyQzZFNzBEN0VDQzg0Ci06MTA5NUQwMDA4REQ5N0U3QzVGMTg0NzIzNjBFNjczM0Y1OTM3NEYxOTVBCi06MTA5NUUwMDA1OEI3RjU1NzZFRUY0MDc5OUNCMkU0OTczMUVBNUNFMUU5Ci06MTA5NUYwMDBGOTFDNjlEQUJBRDU2QUVCRDY2RjQ3OTdDMkZCMDRGQzRGCi06MTA5NjAwMDAxRUVCRDBFQ0IwNTIyRDhFOEY3RkEwN0NBQzU4OEQwRjBFCi06MTA5NjEwMDBFNUJGRUFFQjk4NTIwQUZFODcyMThGQjA4M0YwQURBRjI5Ci06MTA5NjIwMDAyNzM4MTE3REM4OTc5MTgwNDQzOUMzMzZFNjIyRkYzODI4Ci06MTA5NjMwMDA3MjMzQ0ZDNzU4Qzg5NEFEOTgxRkI0MzA2QTNGOTZEOERDCi06MTA5NjQwMDA0RjI0MjgxMTFDOTFGNTI5NUFEQzI0NDRGRDJDMEFGMkUwCi06MTA5NjUwMDA3RTU4MjlGN0YzRkFFOTNFMDZFRDEzRjIxRjZEMkUzMDFFCi06MTA5NjYwMDAyNUIxN0QyNjBCQTFGRjA0RkQ2NUEzQkU2N0VCMTJDNkU1Ci06MTA5NjcwMDAxOTNENzhEQzY0RkQ5OURCODlEQUZFQURFODBDODU0MkEyCi06MTA5NjgwMDAwOTcyN0FCQjY2M0YxRjBCNTQ3NkQ5NDYyN0M3REYyMjgzCi06MTA5NjkwMDA5NzU3OTUxMkYyNjI4RjA0NUQwRDU2NzEzMUJEM0Y1RDkzCi06MTA5NkEwMDA3RkY3REI4OUVDRUExNzEyRUQ0NEI3QTNGMTg1NjdDRkFBCi06MTA5NkIwMDA0RkIwMTM1OUUzMEJCOEVGRkY0NUVEQzQ5N0IyMUI1RkYyCi06MTA5NkMwMDA2ODgzRjlGREYzQURBRjUxRkVGOEIxMjYxMDk4ODA0N0RECi06MTA5NkQwMDA2Rjc0MkEzQkVBNDVGOTIwOTNGRTJBNkMwMDhGMEE5M0E3Ci06MTA5NkUwMDBCRjI1NjUyQ0QyN0I0QTM0NEY5NTEyRjI2NURGQzg1NkYwCi06MTA5NkYwMDAwODdFNkZCMTRBRkI2NUQwQjQwQjVENzFBRjE0MTIxMEQ4Ci06MTA5NzAwMDA2Rjc3Njk3MTMzMjBEQ0IxQjMzRDg5RURGOEJDRjVGMUI5Ci06MTA5NzEwMDA5QzJFOTlFMDcwRThFM0IxNTAwQkU1RDdDRjY0QTQ0N0U1Ci06MTA5NzIwMDBGNDNDMTA5REFGRjU3RThFNjYxQkUzNzUyM0UwRTdBMzQ2Ci06MTA5NzMwMDBEOUZFQzFGQzJDOEE0REVGREM4NjcyRTIwNTkxRkNCMEFCCi06MTA5NzQwMDA2RjA1NkVBNkY3RTY3OEMwREZCMkI5N0Q1ODIwNDZGRUY5Ci06MTA5NzUwMDA4NkZERjQzNEJDRkFBRDlCQTBERDhBMURDRTEwQUFFMUQzCi06MTA5NzYwMDBFNURGRjlFMEZCNTUwQUUyODlBRkZGRkMyNThCRUZBREExCi06MTA5NzcwMDBDMjc5OTU0ODMyRUQ2RjE0RjAzODhDQTM0NTIwRkYzNTNGCi06MTA5NzgwMDBBNUM4MTFERTAxQ0ZDM0JFREFEQzlDMDRCODBFRkJFQTJCCi06MTA5NzkwMDBBOTNDN0EwNjg3RUIxOEY0RDlBRTYwQkI0RDBERTQyRkQ3Ci06MTA5N0EwMDA3QUY4QkVGNzMxNDVDOTYwMjQ1NzE4RDkxM0EyOTMzRjAwCi06MTA5N0IwMDBERDM5M0MyRUVDQ0VFMUYxM0MyOTg3RTNEQjc1NTJBMDhDCi06MTA5N0MwMDA0NTQyQkE2RUMyN0QwQjI5NDY3OUQwQUU5MzEyQkQ3NzYxCi06MTA5N0QwMDAwODgyQTVCREE2RjdFNzNBMDlDMjE5RjE5NTY2NkVFRkIyCi06MTA5N0UwMDBBMEY3MzgxRjZDMkY3QTk5QzFCRUYxRTc3MDNCRDlERjIzCi06MTA5N0YwMDAwRjQ3MUE4N0MzNkJFRTI3OURCRkQ3RjhDRjBDQzc4QUQ4Ci06MTA5ODAwMDBFQ0E5NDFDNENCNjE5RjlBOUJDM0UzMjg1QzBFQkI5RjJDCi06MTA5ODEwMDAzRjIwOEMxRjg5M0NFNkY5RkExNzA3MjUxN0M1RjU2RTFFCi06MTA5ODIwMDAxM0UyMjUyMDlGREE0QjhGQUQyMUI5NTVFNDZBQzI3MzRDCi06MTA5ODMwMDA1MjA5RjY5M0MwQ0ZEREYwNzMxNTAzRjY2OURGQjQzOTMyCi06MTA5ODQwMDA5NTE4QkQ2NkNBRkRBMUMxRjZENjNCOTUyN0U2Q0RDMUU4Ci06MTA5ODUwMDA4Mjc2N0VFMjBBNURGNkM2QTAwQ0Y2RENEQjVBQjE1MUQ4Ci06MTA5ODYwMDAxOUJEMTY0M0ZEOTdENDcwRkI2QzMxREE2NzIxOTI1QjBBCi06MTA5ODcwMDAwNkJCQ0I2QzlGQjk0MURGQ0YwMUJBNTgxMjkwNjRBNEVDCi06MTA5ODgwMDAwQkIzOURENjVFMzk4RkVDOUE3NkIwNkIzMDVGN0JCMEIwCi06MTA5ODkwMDA5REM2RTVDRDFENTExQjUzQTFERTRCMzUyMkY5MTkyRjc1Ci06MTA5OEEwMDA5NUY2M0U3NzAxRUE4QjQ5NzY4NUY0NDU2OURGMUQ3M0FECi06MTA5OEIwMDBFOEZCMDQxQUM3QURGOTc3NTA5RjlGNzcwOEE1QzU0QjAxCi06MTA5OEMwMDBFMEREQ0IzNTQ3REQ4QjEzRDZGQkE1NDk0N0M3QTI1RjRCCi06MTA5OEQwMDBCMDM1NDk3RTg1MUVBN0Q5N0IwQkNGRkY3QUU3MUUyMUM1Ci06MTA5OEUwMDBFRTQ0QkNERDJBREFCMERGODVFNTFFQ0E1QjlEMjZCQUYwCi06MTA5OEYwMDA2OTlDQzUxQkM1Qjg5MzcwQThBNjRGQ0IxRUIwMUI5OTE5Ci06MTA5OTAwMDA1ODkzRkQyQUUyRTE0RTNCQzNGMzgzMDUzN0Y2MUFFQzg4Ci06MTA5OTEwMDBEQzg1NTFBMzNEMTc2OTAyRkI0NzM5N0QzQkQwNkNGRkM1Ci06MTA5OTIwMDA5OUVEOThFNTM5OUFGRDUyQzEyQUQwN0U3OUE5NzkyNzE3Ci06MTA5OTMwMDAzQjVBMzI2MEM3Q0M0QUIyRkZBRERCMzFFN0RBRUFCRTUwCi06MTA5OTQwMDBBREQxMzNFRDFGQ0M5MkFDRjdGNzJGRDZGQzUzMTZFMjE2Ci06MTA5OTUwMDBGRUUwMzRGMTQzNUFBRjYzMjE0OTQxRkNCOTZGN0U5RTZBCi06MTA5OTYwMDBDRTc1QjhGRjVCMEM1QjhENzc0NzhFNDNERjhGMjM3OTE1Ci06MTA5OTcwMDBCQkI1MjI4REYyQUVGN0RDNzI1NjRFMkZBRDk3NzI1RkZCCi06MTA5OTgwMDAwREFFRkZGMzc2OTI4M0M5RjQ1QjRBNTQ2NEM1MzAzMTVGCi06MTA5OTkwMDA0RjU0QTBBN0JFOUVBM0EyMjkyQzUxM0Y4QzRBOTJBNzQ4Ci06MTA5OUEwMDBGMEEzMUMzRTBGRkZBRENDODY3RTc2NjY4Q0E5NTY3RTVBCi06MTA5OUIwMDBBOTVFMEZGQ0QxRTkxOEEzODZGQUREOTkwMERGRjVDNTkxCi06MTA5OUMwMDAzNjhBRkJFQjdFNjk4QTlEOUZGN0I1RUY1QTE5NDNGRkY0Ci06MTA5OUQwMDA3NDE0QzA4NzcwMjgwMDFGQ0FFMUEyNjgxQTk1NDc0NzBGCi06MTA5OUUwMDBCREY0MUMxM0NEQTQ2NzcxMzQ4RkJFOTc0NEM3RDBGMzY4Ci06MTA5OUYwMDA4QzY4MTFCRDNGMzM3QTM2OTU0QkEzMTNFODM5MzY1QTNDCi06MTA5QTAwMDA0RUNGQjNBMkU3RDFGMzZDRDA1QjU4QUYyQzVBNEJDRkZCCi06MTA5QTEwMDA3MUQxQUZEM0ZCRjFEMTM5RjQzQzI3M0E5QjlFQTFFODM5Ci06MTA5QTIwMDAzN0U5N0I3OTc0MzEzRDJCQTI4REY0N0U0MkY0M0EyQURBCi06MTA5QTMwMDA1NzQ2NkZBMDcyNTU3NDI1M0RBQkEzREZBNUU3QzQ2OEY4Ci06MTA5QTQwMDAyQjNEMjc0NTVCQThERUU0RTgwNjJBOUYxQkJEOUI5RUI1Ci06MTA5QTUwMDBFNzQ1MzdEMUIzMjZCQTg1QkVFQkZDOUNBNkQ5RDMyRkY4Ci06MTA5QTYwMDAwNkI2Qzk5NDZGQ0ZCQUNCNTAzRTI2RTNDMzQzOUEzQ0E3Ci06MTA5QTcwMDBBRUNCNTFGNzIyRkRFOUY1RjY2QkU3MEVDQ0Y1MEVFNDFGCi06MTA5QTgwMDAwQzlENzdGM0FBQjY1RTFGODU4RUZDMDA4RkQzRUFFQkEwCi06MTA5QTkwMDBCNjNFMzA3NDFDODE5NUY5ODZEOUI3RTJGMzdCM0E0NzFDCi06MTA5QUEwMDBFMUY0MkI3NTkwQkRCMUI1ODk1MTNFOThBN0IyNDc0MEZFCi06MTA5QUIwMDA3OUQzMTk5MDY2NThEMTkxM0JDMEYzQzA4QTcyMjI0NzdFCi06MTA5QUMwMDA1MTdGQjg4M0VGRUVDNUZEQTg0QjYyM0RCRUE5NDgyRjdDCi06MTA5QUQwMDAyMTVGRUE1NEU4NkY1NDlCOEREQzZCODVDOTAyOTY5NTMzCi06MTA5QUUwMDA3QTI2NzdCMzgxNzgwRUQ4NTcwNkJEMjYwNTc0RkJBRDZDCi06MTA5QUYwMDA2N0U2MDQ4NEU3QUNFMjBBQjI1RkI1RkRFNEZEQjc4QzJCCi06MTA5QjAwMDA2NkU4Nzc2Qzc1NzQwQjEyQ0FDQjU1OEMyNURBRTE1QjZECi06MTA5QjEwMDBENzJFN0EyOEYxOUM4NjE0RTBGQzM5NkExRDdCMEFFMzczCi06MTA5QjIwMDA2NDQ1MUQ0QTFEOUUyNzFDQjM1OTdEMEE1MzNDNEJFMkQ4Ci06MTA5QjMwMDA5MUJBNTQyODlGRjk3MEVDMjk3QzhFRUQ4QUQ3QTVDMTgzCi06MTA5QjQwMDBGM0VDOURERDRGQTFGODE5RDdERDVCRTc4NkYyMzlDRjQ1Ci06MTA5QjUwMDBCMkE3MzFGQzU0REVBMzRDRjU0MDc5QzIwMUY1NjlEQ0IzCi06MTA5QjYwMDAyNkE5RUE4RDRDNEQ1NzEwOUU3ODZCM0FDMEIzRjU2RDFGCi06MTA5QjcwMDAzMEI0QTAzQ0U5QzMwRTExREM5MjgxRjUwN0JCRURGMUQ2Ci06MTA5QjgwMDA4NDc1NDkyOUVFNTE0NUY4NjdGRThENzIzOUNBRDlBRDAxCi06MTA5QjkwMDA1MjZGNEE2NkQ5RTBGNUU5QzQ3OUUzM0M0MUFGNkNENzJFCi06MTA5QkEwMDBGNkQxRTU4NEY1MDgwNTA0M0QxRUU4MEIyNEM0MDMzQjBCCi06MTA5QkIwMDBEQjVFQTE3ODYwNjdBQTVDOEJBMUFFQkU2OTRDN0U1MDZCCi06MTA5QkMwMDA0MTNBRTY3RTQyRUE5QUQxQTQ5Rjc0QkEwM0ZDMUFFQ0E5Ci06MTA5QkQwMDA0OTI5QzBFOTZFNkJCRkJENjk4RERGMTBFMkI3RUE3RjJFCi06MTA5QkUwMDAwRjdFRkYzMzQ3OTM1RjQ5RjBGQjIyQ0UyMzM4M0MxRkEzCi06MTA5QkYwMDBENzA2Mzg1RjAyMUY5RjFGQTg0QTVFRUYyQTBERkY2NjM3Ci06MTA5QzAwMDAzQzZGOTVFNEIzMDg1RjZFNjY4Qjk1MEZBQzVCQTM0NjIzCi06MTA5QzEwMDBERkMzRTFGNTlCRkZDQkU4NzY1MjYwNjhCQ0IyNEEyRjA4Ci06MTA5QzIwMDA4RjMzNkJGOTY5QzlFNENERkUyNEU3NDQ5QTAyODNFNERCCi06MTA5QzMwMDAxQzhGOTdDQTIwRTdDNjI0OTc3MzM1ODE2MUU0NTc5MjM5Ci06MTA5QzQwMDA3Qzg3REIwMjdBQkU0M0Y4QkI4MTExQzRGNUVGQjBDOTUzCi06MTA5QzUwMDBCNTk4RUYxMjFCQ0ZDODRGMDBGQkIyMERGMzc3NDZDNTg2Ci06MTA5QzYwMDA5NDBBREFDNjQyQTE4Qzc4QUMzODlCRkNGNDIyQjAzNzU3Ci06MTA5QzcwMDBBNDBBODZBOThFRERGOEJDQjgzMkQzQjZBODBDRjMxQUI0Ci06MTA5QzgwMDAzNDdFOTMxQjAzODlGQ0E2RUJGQjAxN0VENEU5MjJBQjU3Ci06MTA5QzkwMDA5M0NFNTkwMEJENjIzRUUxMkUwRDRGMDNGREYwNzhDNDE2Ci06MTA5Q0EwMDBEQTlCNzMzQkRCMTNFNDYwNjcyODhGQ0E3QUZENjRGNEE4Ci06MTA5Q0IwMDBGQkE2RjYxREU0MDVFREY3NUY1QzYzOUQ2RkYyRUI4MDlDCi06MTA5Q0MwMDBBOEQ5Mzk3RDJBRDI3OTZDMEE5M0U5QkM3M0RCMTE5MjQ5Ci06MTA5Q0QwMDA0Rjk5MjA5Rjg0MjIxRTFFQzJGMUYzQTNBOTBGNjE5Q0ZECi06MTA5Q0UwMDBGNjU3ODE2QzREOUVDQkE5OTc3OUZFRkZEMTczM0JGODU3Ci06MTA5Q0YwMDBFQUM0NEYzNUYyMUUzQzU3MzEwQUY0OTA4MjcyQjIwNjI0Ci06MTA5RDAwMDA2MEFGNDQzREU3QTA3NTU3MTg1RjQ3QTU4NkM1QkIwNTAyCi06MTA5RDEwMDBDMjVCMzdGQUNEMzExQjNGOUZCMURGRDFBNTkyREU3MTE3Ci06MTA5RDIwMDA2NENBOTg3RkIyQ0IxRkQ5MUJGMDI3RTcwQjM5NEQyOUE2Ci06MTA5RDMwMDBDNzQ1RkRDM0U2NkI2N0JBODM5ODk3MjNBNzYyRjkxNUY5Ci06MTA5RDQwMDAyOERGMzEwOUYzODQ3QTk5NTZCRUMzM0RGOThCQzcxRkNBCi06MTA5RDUwMDBGRTEwQjg2NjNGRUU1MzU1MDdENDU3OTE5RTgxQUVGRjczCi06MTA5RDYwMDA4MDcwQTk2N0NBMTJDNTg3NDdCOEZGQTRGM0U3MDAzRjEwCi06MTA5RDcwMDBDOUU1M0EzRjM1OTY5MTNDN0MyNzkwQjA0RjlFQ0NCRUNBCi06MTA5RDgwMDBGOUExMjYzRkZCMDI0M0RCMzczQUREOUZCNjdEQTNDMTM1Ci06MTA5RDkwMDBGQkY2MzBGQzNGRjNCOTU3Mzc2RjYzMDNGMTNGNEZFRUVCCi06MTA5REEwMDBFQjNEOTI4MkY2RjY1NDc2NzQwMkM2QkQ3QTM4REQzMzA2Ci06MTA5REIwMDAxRUU3NTMzMUZFMDc3NDkwNTJFOTMyQzU2RDg1MTk1QTdBCi06MTA5REMwMDBEQzY1Qzg3OEFEMUU0RkQ2RTM3RDdBNUMyRjVEQTMyQjkyCi06MTA5REQwMDBCQzMwMDBGNTc4RkEyNDU5NUE0NEZERjVCMjRCQTEzRjQ2Ci06MTA5REUwMDA0RjkwRTM0OUU3NkI5NDVCQjgzRkVGNUE5MzI1OEQyRTc0Ci06MTA5REYwMDAxQkU4MTcyNDI1QzlBOUNFMDYyNkI3NjdGMkZERDcwQ0E0Ci06MTA5RTAwMDA5MDJGMURBQjE5Rjk3OUIxOTc0NEVBRkZCODZBRkJDMEVFCi06MTA5RTEwMDAwOUY1OEU1NzAyMDI1MTJFQTg0QzkxQjNCNTczMDg0NDMwCi06MTA5RTIwMDBFNDMyRDFBQjkzQjEyRUY0QjdEOUY3NDIyRTA3QzZCOUJECi06MTA5RTMwMDAzRjE1OTgwQTcwRUZGRjU0QTRBNzg0MTE2RTY4NzQ3MURGCi06MTA5RTQwMDBBODNDODQ4RDZCMzM2QTQyQjgxRjI4MUU4NTMyQzA1OUU2Ci06MTA5RTUwMDA5RjUxOTM4MUU1RkRGQjI3ODQ5ODQ1RkNFRUYyNDhBM0QyCi06MTA5RTYwMDAyMUJFNjRDNjUzN0ZCRDZGQURBMTdDODUyREMzRUM3RjQxCi06MTA5RTcwMDA0RTBBM0E3NEJCQjMyMjg4RjZDRTk1N0Q2RDBFNjU2MEFFCi06MTA5RTgwMDBGRjUzREZENzBCMTYzRjcxMjFERUIzMTM1Q0M2RURDRjU2Ci06MTA5RTkwMDA1QzE2NkY0OUI0OUIxMkY2MTc2QkIwOUYyRDAzRkI4QkJBCi06MTA5RUEwMDAzRDY3MjRFRTJGQUVDOEJEMTU4RkVFRkZCMDdGN0YzMTJBCi06MTA5RUIwMDA3MjBFRDY1N0JENURFNTQ4OUY3QTNFRUM3RTA3REYwNzAwCi06MTA5RUMwMDA2MDEzNUVGMDI5MTZGNEIxQTBGQzE5M0ZEMUEzRTY0RjUwCi06MTA5RUQwMDAwQ0ZBQUVDNUNEQ0M3RUYwQUNBMDMxOEU3RjNDMzQyN0UxCi06MTA5RUUwMDBBMzFCM0YyNjg5RTNFQkYxM0NERDBGQzY3ODlENkNDOUNGCi06MTA5RUYwMDA3NzQ2RkNFQkUzMkYxMEI4MUZDQkVDMDJDOTNCNUQ2RjNDCi06MTA5RjAwMDA4MjNDODkwNEZERDQ4Q0UyRDFBQTUzQTA3Q0FERTNBMUFDCi06MTA5RjEwMDBDNTBBRjk0NTQ5RTQ0QkZGQkUwMUVCMkVCMURBNjc1RDk2Ci06MTA5RjIwMDBBMEU1OUQ5OERGREYxQ0U0RkE3OTgxOURDNzI5ODU5NTFFCi06MTA5RjMwMDA0QjIyMzhFRTgyQTA0QjcwMjZEODQ5NTcwNUI5RkVEMjg1Ci06MTA5RjQwMDBGNzVGMUNCOTI3QUIxMENGMEU0NzQ0QjE5QUI3NzkxRjAyCi06MTA5RjUwMDBFNUFBMjBFQjNGRUYxNkIyRDA3QkM5RjA3NEMwREU0MTFBCi06MTA5RjYwMDBGQjcyMDc5Njg4NzQ1RUY3Nzg2NDIyRERGQjkwNEMyRUI2Ci06MTA5RjcwMDBCQzg5RjQ1M0MyNTgzODk3OEYzN0IwOEVENjc4RDNGMzU0Ci06MTA5RjgwMDA2NENDRkI1NUZEREYxQjUzRThGQzhEMzk1RkU2NTEwREJBCi06MTA5RjkwMDA2RkZCMzRCQ0ZDQkJGMzY1RjY2OUY4N0I1MThCQ0ZFOEYzCi06MTA5RkEwMDBGMUFDOEI5M0M4RkI3MzZENzUwRjEzMUQwRDEzOTczOUFGCi06MTA5RkIwMDA0M0NGRjdEMUYwQzM5RTFFNEJGNzcyNkNFOEIxQzc1Mzg1Ci06MTA5RkMwMDAwNDg0Qzc0NkZCOTcwRDdGMTA0MzY4N0ZFOUVEREMyNkNDCi06MTA5RkQwMDA3OUExRTdFRkU4RTVCNDkzMDI4QjI3RUMyM0E0NDk1RDcwCi06MTA5RkUwMDAxNDI3NEQzQjI5RDE3QjMzRkZERDZFRTIzRjdENUQ5MjJGCi06MTA5RkYwMDBBREIzQkUyRUU2Rjc5RERBQkExQzY4RkM4RjAwOUU3N0UzCi06MTBBMDAwMDBEOTkwQzIyQ0YzODkzRTBCMUFFM0VGRTYzQzgwNjRGQjQ3Ci06MTBBMDEwMDBEQzA3QjU3NkM3MjM5MzczNTAyRTM3Mzg2MjI1MjNFMUNBCi06MTBBMDIwMDA3QjFEM0ZBRjdGRkUxQjE3RjJEOTg2OTNDRTE5NTZFQkVGCi06MTBBMDMwMDBGMTRBOTBGQjJEQTA0RkQ3MjVFRTgzN0FFNkJGREE4NjUyCi06MTBBMDQwMDBCREE2NDlDNjdENTA1RDlGRUFGQkEwNjk5NUU2N0QzNEJCCi06MTBBMDUwMDBFQjdERDAwRENDNUEzRTI2REIwNzFEQjRGRkE5RTlEQjEyCi06MTBBMDYwMDAxM0MxMjRGQjlGNjU0MzlGNjdERkFERDFGMzcwNzkxRjU4Ci06MTBBMDcwMDA5NzNCRjg3OTU5RjNGQjE3RkFENzYxN0RDMTBGODBBRjkxCi06MTBBMDgwMDA2RTY4NzREMkVFNTM3N0EzOTNGODcwNzE2MzBBQzU2NTU2Ci06MTBBMDkwMDAxNzk3RjM3OEVGRTI3QjA1NkRCRkNFMTg4NzdEMTFFNDRCCi06MTBBMEEwMDBDNTMyM0M1RkFGRTk5REEzMkM1QzhERjZFOEFDNEFDMTlDCi06MTBBMEIwMDBCMDRGMUVBRTQ5MzE5NEU3MkZCOUZCNDVCQzM3RTFBNTNGCi06MTBBMEMwMDA0OTc2ODVFMkNGRDA1NzBDRUQ4MjFBOUVBN0M4OTRCRTgwCi06MTBBMEQwMDAzQjMwQ0VBREM3OUZGNUY1N0ZBOUU2MjhERDgzMTYwMzlCCi06MTBBMEUwMDAzQkJGMjQ4NEYxNjc5MUY4RUJBNUQ3MjZGMDdCRTk4NDg4Ci06MTBBMEYwMDA4MUZENzAwNUVDODQwREU3OEVBMTdDOEY4MzY1REZBMDY4Ci06MTBBMTAwMDAzOEVGMDY4QzhCQzM0QzM3N0NGRTlCMTk0NDQ3QTA5NEQ4Ci06MTBBMTEwMDA2M0M4QUZFM0IzRTIyODFGMTc4RkFCQzg0NkJBN0M3QTk3Ci06MTBBMTIwMDBGQ0E3MUU4QzhCQkU3M0VCNzEzRkFFNTM2RjczMTNFNUIwCi06MTBBMTMwMDAxRDk4RDdERDFDNjczNkM3OTc0RjM3OUUzQzMxQjczRjE4Ci06MTBBMTQwMDA0RjgwRThFMTQ1NTMzQzU5OTc1NzY2Rjk5MTEwNEZCRTRGCi06MTBBMTUwMDAyMDc3MDRGMTY0NUQ2RUU5NzI0Mjk3NUYwN0NCREFERjI2Ci06MTBBMTYwMDA3QTEwRkU3OTMwRTIyNDk4REVENEU2RERDRjk3MUE1RENFCi06MTBBMTcwMDAxRUQ0RjlGMDczMjdEOTIzNEY4RkZGMkRFNTVCRTlGNTQ2Ci06MTBBMTgwMDA5QTgzOTlDNDg3REYyODhCREI2OTdGMTZGMzE0NEEwNzBCCi06MTBBMTkwMDBENjY1N0VFNDlBRkUzMjc2RkJDREE1MkIwREY0RDEyRjQ5Ci06MTBBMUEwMDBBNzg2OTU2MzQzQ0IyOTMxOTdDNzI3OTJFNTZCRUE3QzU1Ci06MTBBMUIwMDAzMDU4RkY5NDkwOUQ5QUY2N0I3QkRDNTVGNEM1RjU1MEEyCi06MTBBMUMwMDA0M0UzQUYxNDZDMDdDRkNERDQ3RUJDMjMxMkI3RDA0RjdFCi06MTBBMUQwMDA2Njc4RDI0RThBMkMzRTIxRjFCREMyREZGN0VCMDEwNzMzCi06MTBBMUUwMDA3RDhGRDUyOUFCNTdGQkI4M0RERDRBRkMxOTczRDJGRUY0Ci06MTBBMUYwMDBCOTRGNkRDRTg1RkEzRUJGMUE0MzdBNzhDOEE3QjZFNDQ4Ci06MTBBMjAwMDAyNkM4RDM1NjNCREY4RjE0NkQyQ0YyQjgwNTVFOUVDQzZBCi06MTBBMjEwMDBENUY0MzIwQjA3QjBCRjM1QjVDNkYzNUNGQTczN0IyRUFECi06MTBBMjIwMDBERkRGREJFM0FGMEVBMDdEREQ3QUI4M0M4MEZDQjNENzg3Ci06MTBBMjMwMDA1MzRERjY3NkIyNzVCQjUzRTcyNzk0NUYyNTAzRkVDNEYyCi06MTBBMjQwMDA0NjZEQkQ4MTQ1NTVEQ0M3NUQ2MzBGMDcxMkUzOERFQjlECi06MTBBMjUwMDA3Mjc5MUU0N0ZBRTQyNzdBRDA2RTZFOTU2RDk0MjdEOEVFCi06MTBBMjYwMDAyQUYzRkNFQjM2QjczNDYzOUJENkNFNjc2ODI3RTlFNzYxCi06MTBBMjcwMDBBOEU4QkUwQ0M5NkRDQ0FGN0U1MkIzNzc5MkNERjNDOUJFCi06MTBBMjgwMDA1QzlCNzZCRjY4RjczRDM1QzI4MDVFQjExRkE5NzVEMTcyCi06MTBBMjkwMDBGRDBGNEM5NTc5N0U1M0M4OTA0RjZERDdGNDRCOUQyOTk3Ci06MTBBMkEwMDA1RjQzOTRCRjk4REYxNkY0NDc3NkU1NUFGODZEN0I3Q0UwCi06MTBBMkIwMDBFQTkzQjhERTUxMjlFNjQ0RkE4OEJBQUNGOUZFNjk2RDMyCi06MTBBMkMwMDA1REJGQTdDREQ3N0NBRkFBNjhCQUY3NDEzNERERkIxMERDCi06MTBBMkQwMDBBQjZCRkE2OTJGRDJEQjZBQTdEQ0VBQTM3QjFFRThERTUwCi06MTBBMkUwMDA4NzI4NUVCOTA0Q0Y3RkE2RjA3QzE2RjBGRjI2RjJGMzM0Ci06MTBBMkYwMDAwNkExNUU5NEFGMkNFMEEyNzg1NDQ3QkVBQUU2NDM1OTZCCi06MTBBMzAwMDBGNEQ4MUU1QzBERkRCNUFBNzUyQTFFNURFOTcwREIzQTE2Ci06MTBBMzEwMDA3MTlGMkYzMzE4Mzk4OEYzOThFQTkxNDhFRjc0NUM5NDUxCi06MTBBMzIwMDA0QTdBMDhCRUE3NzAzOUMyNjRBMTlBRkM0MUJBMzQwNUMyCi06MTBBMzMwMDA3RDcwM0M1RjY2MEYzODI4OUVENTFBNjFCRENFMzFGQzFBCi06MTBBMzQwMDBGQzNGRjY1M0NCQkFGN0Q3MTRBMUJERURBQTQ0M0NFREMwCi06MTBBMzUwMDAwRjREQzg4ODU4QzgwOUZENjlERUZGN0ZFQkRCNkYxNDFECi06MTBBMzYwMDA2MkJCMDIzMUYyMjFFMkJEQTc2MUYxNDZEQ0Q3NUZCMUU5Ci06MTBBMzcwMDA1MzBDRTEzRUMyQjdCRTczRjAwQzdFREVDOEI4Q0Y3QzkyCi06MTBBMzgwMDA1RkRBOTQ1RUQ0Njc1MUI3ODNFQUVERjE1NDc3MjA5RThCCi06MTBBMzkwMDA1QTA1NEYwN0ZBQkJBRDg3NTdGRTE4RjFEOERBQzJFMzZBCi06MTBBM0EwMDBEQzY2M0NFRkY1N0M4N0VFRDczODBFQ0I4OUY1Q0RGNzMwCi06MTBBM0IwMDA2QkIwOEU5NTdDOUQ5QzJFREFCNzg0RjlCMkJDMkFCRTE4Ci06MTBBM0MwMDA4RTE0MUYzQ0U0QTE3QkEwOEVFRjdGREE4REYwN0Q4OTk3Ci06MTBBM0QwMDA3OUE3RTVGOTg3OUE3N0JFNENGNjhCNDYzRjRDMEFBRkQyCi06MTBBM0UwMDBDMzc5REQyNDdBM0FEQTdENzg0RjFBQUMzN0MyQkRDQjE3Ci06MTBBM0YwMDA0RUZFRkU3RDY5RTlCNEFFNTE4MDBGRDc1NUY0RDRBQjYzCi06MTBBNDAwMDBFODkyRkQ3REE3NDhFQjFDOTU5QTY4NUUyQzI2QjFFRDdECi06MTBBNDEwMDBGODdFRDc4OUVGOUY4Nzc0QTA2NkQxQUU5NjU4RDA0NDU2Ci06MTBBNDIwMDA3OEY5M0JFMDY1QjUwNTVFODA3RThBMTBERUE3NzdEREIyCi06MTBBNDMwMDA0MEZENzQzODVDMzI1QTM2QUQ5RTZBM0FBRjNDRDJGQjZFCi06MTBBNDQwMDA0NUNBRjIzODlGMjREQzJGNTI5NjU3NjU1MTVGRjNCMzBCCi06MTBBNDUwMDBEMERGQzY3MTZCNjVGNjQ5OUMwREUwM0Q1OUZFQ0E3OUE3Ci06MTBBNDYwMDA1QUZGRkRGRDBDOUZCRjcyNUVFMkY4RkFCODVGNjI1REI1Ci06MTBBNDcwMDBBNzlGQ0VCQUI2QkFGRUVGNzRCNEIzNTQzMTNEOTQ1MjJFCi06MTBBNDgwMDAwODY1NUMyN0M0M0ZBRTEzQUU5NzE2QjcyMTE1QTQyMDBDCi06MTBBNDkwMDAxREM4REQ3OTQ4MDczN0E0ODc5MDNFODc5MzFCMTJFM0Q4Ci06MTBBNEEwMDBFQjZFOTc4MDlFQzFBRTczQ0E5MTAzNzQ3NjUxOEJGN0ExCi06MTBBNEIwMDBFOEYyQzRDQzY3QUQyRUEzQkM2QUQ1RUZFNTNCMzQzMkRECi06MTBBNEMwMDA3OTA1RjQ3MjE1RTJDMTJDQjc0NjRBMjcyQkYzMDRGMzQxCi06MTBBNEQwMDAzRDM0MkJGM0ZDQzlFOUM0MUUwQ0RGODBFQjg4NzhDQTNECi06MTBBNEUwMDBBQkEwNzhDNUI3QjFGRUZFRkRFMjBFQzc2ODFDOEZDN0YyCi06MTBBNEYwMDBDREZBODI0QzdFMzAyMTJGNEI4N0E3MEQzN0JCNzk5QzNDCi06MTBBNTAwMDA5QUUyMUY1MjAzNjM5ODA3RTcyRDBEMDk3MkQ5ODhFODc0Ci06MTBBNTEwMDBBODJEMTFCRUFGODA4RUVFMUM4QThFRENBQzg3Q0U2QjcwCi06MTBBNTIwMDAyQ0Q3RjM3Mzc2MEM5RDlGRjM2NUY1MEZBQzY3MjdFMjhDCi06MTBBNTMwMDBCN0Q1RjMxREEyQ0ZCNTc2OTdDQ0VGNTEzQkJENzU3RDU2Ci06MTBBNTQwMDA2NEYwQkEzRTMyRjRCQTQ2MUVDM0VGNkE1RTM1REQ2MzhDCi06MTBBNTUwMDBDNDI2MzU5MkREQjRDQkFGQkU4MTc5QTQ0QzBBMTlFNDkwCi06MTBBNTYwMDBFMjIwRkVEMUU0RjY0RDY3MkE5NEFGQkFCQjQ1OTM3MzVGCi06MTBBNTcwMDAyRDRFMTlFREYxNjc3QzM3M0M4NkY1RUY2MjRBMThFMzAyCi06MTBBNTgwMDBBMTUzNkNBQjA4NEY3Rjg3RjkzRDE4MjJCOTVBOEFGQjVCCi06MTBBNTkwMDAzRTUxOTYxQUQyRjRFODUzODg4NzE5NEE4QjkwMDVFRkZBCi06MTBBNUEwMDA3RDBCMTQxQjVENDNBQTZDNjJCNkIyOTFFM0UxQzVDMTk5Ci06MTBBNUIwMDA3MkYwQzU2MUU0NjA4RjQ2Q0YzNzIyM0RFQkU3RUQ5MzQzCi06MTBBNUMwMDBDOUMxNDNBNzJGMDcwRjdEQzU3MkYwQ0Y3OUE3QTFEN0M3Ci06MTBBNUQwMDBCRjAyNzlGMzA5OEU2Nzk2Mzc2RThEOUZBRjA4QjExMDcxCi06MTBBNUUwMDBDNkNCNDc5QUNGMDZGNkE2ODJGQzU1OUJFRTIyRkE2OUE3Ci06MTBBNUYwMDA3RDVDQTA3QzI5QjBDMzIzNTRGNkI4NDhEOEVDRjUzODZDCi06MTBBNjAwMDA3OEZFRUYwRUZFNURBQ0UzNzgzNkUzRTlGM0JDMkM5RUZBCi06MTBBNjEwMDA3N0QzQjUzMjJDMTlGMkE0NjJDNDBGNzdBQUM3RTQ2MkNCCi06MTBBNjIwMDAxMUYzRkI2Qjg4OUVCRDlBM0RBM0U3RjVBNzZCRjJCRkM0Ci06MTBBNjMwMDA1RkNGQ0ZCNEQxNzhERTAyMkVERkJENjBFRkEwNURDNDY2Ci06MTBBNjQwMDBBNDVFODY3RUZDNEQ3OTNDN0YxRkY4ODFFODFCNDYwOTlECi06MTBBNjUwMDAyMzNGNjQ0QzkyNEM3OTVBOUM1RkZDMTJCNzc3MzI3RDUxCi06MTBBNjYwMDA0QzIwNUQ4Mzc5NjJGMEZFMDREODEzNzgzRjQxQTY2QURFCi06MTBBNjcwMDA2Qzc3NTNFQTE1MDJFQUFEREU0Njc3OTM0MEU3RjRDMzAwCi06MTBBNjgwMDA3QjdFMDRFNTJDQ0NGNzAyQkVGMUNFMzBENkY3QjM4NDQ2Ci06MTBBNjkwMDBCMjg1N0YxRUFCNjNBNTk4Qjc1ODk2QUZGOUU5MEUxNjQxCi06MTBBNkEwMDAyMEZEQThGOUU5RkE3RDgxRTJGMDc5NUY5NUY5MjM4ODI4Ci06MTBBNkIwMDAyRjlFOUJBRkU3OTkxOEY1NzE1NzBBQjM4Q0FGRkQ1N0UyCi06MTBBNkMwMDAzRTk3NUJGNUJEQjU3NTY4NTdBRkYyMzBCMkFCNTZBMTlBCi06MTBBNkQwMDBFRUM0NzJBNjgzRUVCNTA5RURBOTc0NTlERDU3OTFBOUIwCi06MTBBNkUwMDBEQTBDRjdGMzdBNjdBNDFBRUVCREY1ODdCMzBDRTU5Qzk0Ci06MTBBNkYwMDA4NjVDNDNGRDYwNjRCNEUxN0JERUQyQjMwQ0RGMEI5QTcxCi06MTBBNzAwMDAyQTBDRTU1MUQxNzMwREY1OEIwMEMxODlFNTMxRUIyRTkzCi06MTBBNzEwMDAzMkQ0MkZFOUI4RDQ1MDNFNzNGMzM3MENGNUM3QzYxN0JGCi06MTBBNzIwMDAxOUJFOUZGREYwQjU4NkVGRTNCQTU2MTlDQUU3RUNCQzM3Ci06MTBBNzMwMDBDNTUwQkY5NTU5REZERkI5MjE5RkNCMjlFMDc3OTI2M0UwCi06MTBBNzQwMDAyREVFQkEwNkZBMUQwREQ5NjE4OEYzMkZEMUVBRURDOUI1Ci06MTBBNzUwMDBBQzJFQzU3ODQ4RUI5MUYyNTJGMjg3RDNDRjFERDIxRkIxCi06MTBBNzYwMDAzNkNCQzU2NEYyRDhGQ0JFNEQxQkVGQTNBN0RFQUI1RUIzCi06MTBBNzcwMDA4Njc0OEU0MjFFRTREMjQ3RUUzN0Q3RTI5Q0Q2OTdGMTFDCi06MTBBNzgwMDBCQzA0RkQ3NzMxQ0NGN0YyRjdFRjUzNEEyQUNENjc0MThECi06MTBBNzkwMDA5NjgzNTk5RDBGNTg5MkFGNThFRTJGQjQwOTIxMTdFRUFBCi06MTBBN0EwMDAxNTI1QzM5QjRFOEZDM0UxRUQwRUFEREU5N0M1REIyMUIyCi06MTBBN0IwMDBDMTE4MDc0MjdERjJCODA1NUM3QkYzRkJFRjNCNzgyOEJDCi06MTBBN0MwMDA5RkVCQUJDQTU0RjIzMEY4M0QwRUE3QUI0Rjc0Mzg0MDQ0Ci06MTBBN0QwMDA5RjNDOUVFRjFGOUMxRkZFNTFDM0FCNTdEREE3NjBGRDQyCi06MTBBN0UwMDBBQjc4N0Q1QkE4MTRENzI1RDlCRUQyREU3Q0YzQkU1MkYwCi06MTBBN0YwMDBENTUyOTQ3MzBCM0NBOTQyRTI3RENEQkZENEVBRTlGMTc2Ci06MTBBODAwMDBFQ0Q2RjQ0RjY5NUZBOUQ1MTEyQTFEQzlCRUQyMkZGMTJDCi06MTBBODEwMDBDRThEMkFDNEJGQzJDN0QzRDdENUFFMDY2NDRCRkZDRUY4Ci06MTBBODIwMDA2Q0M3QjBFN0YwMUU4Qzk4NUJBMkJDNjFCMzdGMTdENUY0Ci06MTBBODMwMDBFNEI2RUVDRjQ5N0I2QkM5REY2Rjc1OEZBNkJDOEY1NjMwCi06MTBBODQwMDA3NTE1RTlDQjhFMjQ3RTJFRThDQjNGRTY1NzYxM0NFMEMwCi06MTBBODUwMDA0NjgzM0YzNzEwMEY1MDY5M0M2ODRCNzY1MzZCODJGRjNECi06MTBBODYwMDA4RkVCQTBERUM3RUZENUZFMEFGQ0UwMEZGMzRGQzM0RTFGCi06MTBBODcwMDA1MDE4Rjc4MzhGMzM4RUE3RTNBQThERUM4NEUzNjAyNzBCCi06MTBBODgwMDBBMEZDNUQyMzMxREFGNzhFNTUwQThBOTU1RkRDQjE1QTU4Ci06MTBBODkwMDBCMzBGNTc3M0JDOTlGN0JCQ0Q3NkM2QzVBMTk1ODRCN0U2Ci06MTBBOEEwMDAzNTQwNEZBRTRBOENDNzcxRkI3NzhEOURERkJGMjk3QjRBCi06MTBBOEIwMDBDMzAxRDRCNzdEN0UwNzdCMTBBMERERUJFN0YxMzkxRDI2Ci06MTBBOEMwMDAyRjVGNTQxRTY1MTYwQ0IyOTMzMzBCODZCMDkzQTc4OTg1Ci06MTBBOEQwMDA2NTVENzg2RkVCQjE5MzNDMkVBMkUwNTE0NDFGREU0M0RGCi06MTBBOEUwMDBDRUQ3NkZENTczNzM2MjJCNTA0RjE1NDk0RDk4QkYyRTNECi06MTBBOEYwMDAzMjI1MDNGMUIyRTI1OTkxQzUwNTk0NjNDNkZDN0MzQjU1Ci06MTBBOTAwMDA2QkZBMDFDNkUzOTg4RkJGOEYzMTU3MEJEQTQ5MTk5MzYxCi06MTBBOTEwMDA4QzdBMkM1MzM1RUEzMUVGOEMyQzkzNUUzM0VBQjE5QzYwCi06MTBBOTIwMDAwNkEzMUUwQjQ2OEM3QTJDNkY2OTg1NDlBRjE5RjVEOEEyCi06MTBBOTMwMDBBODY4OUQ0OUFGMTlGNUQ4OTg3NTk3OUFGNDlBNTE4RkUwCi06MTBBOTQwMDA5REI5RDlBOEM3QzZDNjhEN0FFQ0VDODc1Nzk5RjQ5QUY5Ci06MTBBOTUwMDA1MThGOURCMzczQjVFMTdCNzk3N0JCRTFGQjg0NjdFRkUyCi06MTBBOTYwMDAzMjk0QUI3QUVFMzdENDlGNzhFMDQxQzNGN0M5QkRGRjhDCi06MTBBOTcwMDBDN0YwMUQxMEZEMEE5RTY3QzA3QjY4NzExMUNGN0JGRjc5Ci06MTBBOTgwMDAwOUUzNzdBNjNBMzAxRkZGM0EzQzlGMDlFQjc4N0VERjU4Ci06MTBBOTkwMDA2RjBERkRCMTBFN0U2RTIxMDZGRkUxN0FGRDk5NDVFODRGCi06MTBBOUEwMDAxRTAwOTA2M0ZCRjJBMERERjU3MTIxRDRDRDUwM0YzRDM4Ci06MTBBOUIwMDBGRTFFRUVEQjVDMTMxMEM5OEY1QjgxQzE1NkE0ODc0Nzc2Ci06MTBBOUMwMDAzQzcxQTQ4N0FCMzcxQkNGM0Y1QzEzMzc5NjYzNDAzRjg2Ci06MTBBOUQwMDAwQUM2MTU4MDdFOTBCRUFFMzNGRDZFMDREODgzNDQ2RkU4Ci06MTBBOUUwMDBENzI5NTIxM0RBOTU2NkZBRkFCMzRFNUYzMUY1MTUzQzYyCi06MTBBOUYwMDBDRkExQ0Y1NzlGOUY1RDNGN0ZBQUQxOUZBQUQxMUYxM0ExCi06MTBBQTAwMDA3NzExRENEN0U1ODlGNEZCM0JGQTdDNTVGODhGN0ZGRkEzCi06MTBBQTEwMDBEMDgxRjMzOEIxNTM2MDVFRENERjY3QjE3RDc5MTZGMzI2Ci06MTBBQTIwMDBCOTdFRTcyNjA3RjJBNzc5NUVFNjc5MENCMjUzMEI4QzY0Ci06MTBBQTMwMDBGQjhBRDM0NDc3ODhGOEVFMzU5MUY0MTE0RDAxRjlFQzk3Ci06MTBBQTQwMDA1MTdFNUU2RkQ1NzMyMjlEOEI0MTNFNDQ3RjQxOEMzNTk0Ci06MTBBQTUwMDAxMDVFNTYwMDVFRjBERTcwREQ2RTNEQTZCNTNCRjY4MDAyCi06MTBBQTYwMDA0OEU3OUI4N0UzNDc0NUMzODczMzYwRTRDNzE0MjVENTkwCi06MTBBQTcwMDA0NDRGNDZGQ0E2OTUxQUY5RjNCQUI3MkY3NEEwRkNEQTM2Ci06MTBBQTgwMDAwN0Y4MTYyNjMxRTYwOTE5RjlGNTNBNzExOUVERjNFOUQ3Ci06MTBBQTkwMDA3ODU2RTAzRjFDNTcwMjUzMTdFNzdEM0RDQ0JCNUIxOTRFCi06MTBBQUEwMDA4Q0RGQTVCQjM2QURDREIzQTA5QkUxRjBGQjQ4ODE3MTM3Ci06MTBBQUIwMDA5RjRFREY5RkFCMDVFQzM4MkNGMjRBNzVGQ0VERjJBQkY0Ci06MTBBQUMwMDA0RkEwN0M0Q0U2MEZFRjJFMzBFRUFCOEZDMDFGREU5RDBCCi06MTBBQUQwMDAyODZGQkYwMjdGRjhCOTgyMjFGNTVDREYyQ0Y0QTc5Q0I4Ci06MTBBQUUwMDAyQzNERDQ2RTExRjc5Mzk4REM4REYxNUE3QjEzOEZGQkJDCi06MTBBQUYwMDAwREM0RUZCRUYyMzhDRjNCMDhBNzI0NzMzRDk5MjJFOTdECi06MTBBQjAwMDA3MTlFRDA4MTA4REEyNzE5Njc4NTMwMkY2QUE0NzE4RTZCCi06MTBBQjEwMDBCRjE0MEM4QTczRkNBNTYwRTgzOEM3MUI3ODBFNTBDREIzCi06MTBBQjIwMDBDOEFEQjcyMTMzNDlBMTUyQkFERjE5NDFFMDc5NDgxRkI2Ci06MTBBQjMwMDBFM0JBMENDQUQ3MkRDRUQyRjI4Rjk1MjFGMzhGMkZENjQwCi06MTBBQjQwMDBGNjc3QUIwM0VBNDk4NDAzRkFGQjE0OUZGREY3QjE1NThFCi06MTBBQjUwMDBGQUE5OUZGNDYxRkE4OUQ1NzE3QjJENjZGMzc0QjQ3MkZBCi06MTBBQjYwMDA3QjhERjY5OUJFODIzODQ2N0EyMUZBQTU2RThFRkY1NjA1Ci06MTBBQjcwMDAwNzhGREI5RTZFOUMyRDU4MzgwOEVGQzFDMjIxRjBGRTc2Ci06MTBBQjgwMDBDRkI3NzJGOEI5RDUxMDU4MDdFNUM5RTk1QjNGODdBOTc3Ci06MTBBQjkwMDA5N0Q3NjcxQUZERTVCNTE1MUNBRTEyNkRGQzZGNjY3MzhECi06MTBBQkEwMDA3RjYwNzIyMUU3M0YzREVGMTJGMzE2NTMyQUEwM0M5M0RBCi06MTBBQkIwMDA5RjUzRDJDRkI1RUFGRDRDMkVGNDUwRkQ0RjAyNzU5MzUyCi06MTBBQkMwMDAwQkZEOTgzN0NCRUZERjU5OUI2OUJDODdFNzZGMDVCNTY1Ci06MTBBQkQwMDA5MzcxNUUxM0I0RkUyNzE3MzI5RUNGM0M5QUMzNjVDRUE1Ci06MTBBQkUwMDAzQkZEODc1NkZGMUYwNTc1RjRDNDczQjRFODk3Mzg0NERFCi06MTBBQkYwMDBEMTEyOUY1MzBBNzk5QzQwQkZGNzY2QkE3RTdFRUU1RTAzCi06MTBBQzAwMDA3RUJFQ0U3Q0VGMDJGMEM5RUJGOEZCNTA0N0VGQjA5MzZECi06MTBBQzEwMDBCRjA3RkE4OENFQ0YyREM5RTNFNzEwQ0RGNzI5NDQ0QTA0Ci06MTBBQzIwMDBFNTdEMjg1RTRGQjAzMkNCN0I3OTA2RTUzOTFDQkE5OUI5Ci06MTBBQzMwMDBGMkVGNUU5QUNDNjQyMTM4N0NERUMzNjU4NUM2RkIxMUQ5Ci06MTBBQzQwMDBCRUMwMzlCQTJCMEE0NzkwRjdCMDUwM0I0N0Q3OUJDQUQyCi06MTBBQzUwMDBGNTU4NUZEMDE1N0ZEMEMyREY4RDZBRUI3NDg3RTZEN0Q5Ci06MTBBQzYwMDBFMkZFMzRFRTkzRTNGRERFNTZGQkU1RDE0MjRFM0YyMzk4Ci06MTBBQzcwMDAzRDU3N0Q5NzIzMTI0MUJFMzU5RkFCNEU3NjlFQkFENzg2Ci06MTBBQzgwMDBEMUJCMjYwN0UxMURDQjQyNjhCRkU3MkM5MEY3RTQ0MDFCCi06MTBBQzkwMDBCREQ0N0E4NUNFM0ZBRTJENjJFOTkzRjA3QkI5MkQ4NDg5Ci06MTBBQ0EwMDBFNzNBMzJFN0NBNkJFREM4QTdDNTJDNEI4MDcyNkY2Q0QwCi06MTBBQ0IwMDAwRThEN0Y0NzAzOTM0NTgwQUJCMzkwRUZBMzJGQkNGNTc4Ci06MTBBQ0MwMDA2MzFBQ0Y1RjAzNTM1M0U4RENGOTc0RjRDRjYyMEQ4QzQxCi06MTBBQ0QwMDBFRTJEMzRDRkYzMkU4RDVGNUM2QkY4M0QzOTE5QzVENjYwCi06MTBBQ0UwMDA3OUY4Nzc2OUY0MDg3MjZCMTNGMjQ1NkQzMURCQzFDRkU3Ci06MTBBQ0YwMDBDRkYyNzMwQTc4MkQzREU1NkY4NjUyNjk1RkYwMTI1OEU2Ci06MTBBRDAwMDAzN0JFN0ZERTQzRUI3NzYzNjBFQTdEQjg5RTNBQkYzOTlBCi06MTBBRDEwMDBCNDNDMDVGMzc5RjJDRUMyRDMzQjRGOUVCQUMwMUFERUUzCi06MTBBRDIwMDBERjY5RUJEREU4MEZGRjE0RTE0RDJERURFMEJGNUZGQUM5Ci06MTBBRDMwMDBGOUE5NTM2MkI1RjZEMzhFMEFCNjhGNDQ1MEZGQTU4MEE5Ci06MTBBRDQwMDBGRTEzRjBBOUM4NzQ4RTk2QjkwNDNBMEZFQjUyOUE4ODk0Ci06MTBBRDUwMDBBRTUyMjY4NUJDRjhCQjY4RUM0QTFCQzM3QjVDQTY2QTc2Ci06MTBBRDYwMDBFREQ1MDYyNkUwRUY0OTUwMkUyMEM5NjlEM0VGNEJBODU4Ci06MTBBRDcwMDBBMUI2MTY2ODNGMERGN0NENDI5OEY3MUQ1QThBRkRENTRBCi06MTBBRDgwMDBCQjUzNjU4QzZGQTYxNDM3RDVFMjdBM0RCMzkwRjc3MTRCCi06MTBBRDkwMDA1NzkyRjMxMkZBMzlGQjgxRkJBNzk2QkRCQ0I3MjZFMUE3Ci06MTBBREEwMDA1RTgxQjU1N0JENkNCQzdGRUFBQTk3QkZDQ0ZENTMwNzQ3Ci06MTBBREIwMDBCNzVFRjVGMkZGQzRCRDAyQkE3QzAzMzU2NDQ3QkJGRTQzCi06MTBBREMwMDA4MEM4RUZEMUZCRkI5Mzk3REI3MTFERDZENkIyMkVDNEEyCi06MTBBREQwMDA3QkVDNTNDMEIzNkIwMENGRjZCQUYwMzM1QkQwMkU1OTg3Ci06MTBBREUwMDA5NTFFRTJCRjI3MTJGQjE2QzJGOTc2MUE5M0IxQkQ5RURCCi06MTBBREYwMDA2RjI4QjA1MkQyRDc3MzFCMDRCMjFGOThENDc3M0Q5NkY4Ci06MTBBRTAwMDBFN0VGNEE5M0QxN0ZGOEZCOTM2RjE0QzQ4MDNFREZCQTFCCi06MTBBRTEwMDBFREI4MDdGMzUzREY5MUZBM0MwOEQ3RkJCN0JFRUE0MTIwCi06MTBBRTIwMDBGQ0JENzVBQjQ4NzkyODc0RUUzQjIxNEZFQzczOERCRUE5Ci06MTBBRTMwMDAxNjhDMEExRjQ3RkE1QUQ4RkNERkQ1ODlGNjE5OEJGQTA3Ci06MTBBRTQwMDA0OURGNUYxMzA3ODgxM0VEREU4N0QzMENCRjJCQkFCQzM1Ci06MTBBRTUwMDBDQjZCMjhFQjdBN0VCOUQzRkFEQzdDRTUyODJFOTdBRTUzCi06MTBBRTYwMDA3OUE0RDM5MUE3RTBGODExRkIyODk4RTdGQkRBMzlBMDgxCi06MTBBRTcwMDBGNzc3NzhDODhFRDdFMTU5RjQ0OEI5MDNFREUxNzc3NkQyCi06MTBBRTgwMDAzOTU5MzdDNTA1N0JFQ0NDQ0RGNTA3RTY1RDQ0RjhEMEU0Ci06MTBBRTkwMDA4M0UwRENCNzNCQ0Y4MTdDQjY0NDYwN0Q0RTYyNkVCNjBBCi06MTBBRUEwMDAwRkYxRkQyN0NERkYzM0NGNjNDOTVCQjIwM0Q3Nzc0OURECi06MTBBRUIwMDAyREVCQzM3MzY3OEI2RTE0RDZERTA0RjUxNzQ1RENFNDA3Ci06MTBBRUMwMDBGNzlCRTc2OUQ2Mzc1N0UzN0QzNjgyRDUzRDcwNERGQjVBCi06MTBBRUQwMDA3RTA3RkQ1QzA5RkRBMEZEQjlBNEMzRjhGREQ4QjMzNzFBCi06MTBBRUUwMDBFQ0RCMDJFM0VFRDhFOTIwN0JGMUVBNjFFMkZENjM0N0E3Ci06MTBBRUYwMDA2OTdBQTk5QTREM0MzNTg2RjQ1RkM2MzgyNUI5RERBMTNCCi06MTBBRjAwMDBFQkEzRjc5QjE5MjVBOUZDMDU3RkRGMTc5RTFGMzZDQjA2Ci06MTBBRjEwMDBGNDNDNUVBOEQwN0E1Q0I3NzNDRjNFRkE2RDYxQTlBNzA2Ci06MTBBRjIwMDAxQUU1RERDQ0U3MTZBNzdEODMwREU0MTU1NTc3REVGMDM1Ci06MTBBRjMwMDBGNDE2NjIwNTNENUZCNTlCRTI3QjEzQjVGQjVGQUVENkIxCi06MTBBRjQwMDBDRTdGNTQxRDMwRTdBQkVFNzlFNjc3NjhCN0MxRkM0RjkyCi06MTBBRjUwMDBFN0RFOUUwNTIzQkNCN0U3RDhCMzUzRDNFODdDODA4RUU5Ci06MTBBRjYwMDA5Nzg5ODAxN0YxQ0JFMzI1NTlCQkU1NDk3RUI3NDVFN0MzCi06MTBBRjcwMDBBN0UzOUFERUJENzJEQkVDQjVCOTMwN0VFQjkzN0YyRTkyCi06MTBBRjgwMDBDNEY4NzE4QzcxRkFBRTdBODBGRkZFNEY5NTNCOUJFODU2Ci06MTBBRjkwMDBDRDg1RjQxOTQ0QkM5QUVFNzk4OEIxRDc1OTAyN0Q1RjBBCi06MTBBRkEwMDBCRDJCOERFODI0MDBGNjkwNzMxMkJFRTFGNDVBODVGN0FDCi06MTBBRkIwMDA3NjIyN0RCRkM2REJCQjM0RkYzNkIyRUIzNjVFRkY3NzUxCi06MTBBRkMwMDAwRUQ5MTkyMEJFMENEOEU4RDkxREIwNERCMkI4NjdDQjQ4Ci06MTBBRkQwMDA3Q0JGNTg4N0IxRkM5MUJEQjcxMEU1Q0FENTI2M0ZGNEI4Ci06MTBBRkUwMDAyM0MxM0EzRkVEOEE1MUEzNDk3RTVEQTlBOEQzMzEwRjExCi06MTBBRkYwMDA2MDA5MEJBRkU1RjE1QjdFNkZDRkZCNTJDN0JFRUYyMjVFCi06MTBCMDAwMDBCRjZGMTM1ODBDRjBCNEZDMzc4RkZFMUFFNUQ4QjU4RjFDCi06MTBCMDEwMDBERDlCOEU3MkVDMDNBOTIzMUJDNzVCQjY3RDREM0FERTI4Ci06MTBCMDIwMDAyRkYzQkUxNDRCQzdGNjFGQzRCOTNDMUJBNDJGNDcwOTBFCi06MTBCMDMwMDBEQUJFOTQ5QTJFODA0Q0JFOUU0ODBERkU3RjY1REZEQTA0Ci06MTBCMDQwMDA1QjYwOUM3RjAwOUU5MUVGQUZERkYxMkYyQUVGNTM1RDk1Ci06MTBCMDUwMDA3RDJDODBGREY2NEU0NzM4QUU2OTc0MzdCNTg0RDBCRjdECi06MTBCMDYwMDAzNEYyRTdCNTNGQkQzNzVCQTEzQzhGNTg5RTg2QkYzQ0FECi06MTBCMDcwMDA2Qzc3RkQzNjNCRTVGOUEyMUY4RkMzQUM2MDdEMzQzRjkyCi06MTBCMDgwMDA3M0ZCMTU1RDQ3MUQyOEFGNjUxQkVCQ0IzRjZGRjA3NzVBCi06MTBCMDkwMDBCMDkwMUNDODZGMkI3NjZDRjg1ODRDQzdFNzA3NkZFMjZFCi06MTBCMEEwMDBFRjQxQUQzMEQ5QTc0QjM1Rjk2REE2RkY5RjlCRTgxRTQ4Ci06MTBCMEIwMDBGMDQzRjE4NTE4QzBDNTdGOEU4OUNCRjFENjlGREQzNzZGCi06MTBCMEMwMDBGRTMwQzBGN0UxQjYxN0QyRjFGNzI2NzRGQUQ3RUY3OTYwCi06MTBCMEQwMDAzRUQ2QjU3OEExNjM4ODdCODQzRUQyRjhBNDVGM0Y2OEYyCi06MTBCMEUwMDBGQTQ5RDkwOTgwRTU0MDcxMTc3RjJFQjM3N0E3OUYwN0VBCi06MTBCMEYwMDBGMzVERDY2OTBGMjFDRDJGN0I1NDU0REQ2ODU3MUQ3NDQ1Ci06MTBCMTAwMDA5MjNEQjJFQ0QxRTM0NEI3Q0IwNEI1NEYyMDNEQzdEMjVBCi06MTBCMTEwMDA1MThFRUJFQjc1RERBMzdGOUE4RTcyRkFCQUEwQzg2NkVBCi06MTBCMTIwMDAwMjJCNUVGQkNCMTNCQzNFRDA3OTBBRDRCRkVFRjFDMzM5Ci06MTBCMTMwMDBEM0JGOEI2NTkwMjcyRThCRjU5QURBQjVDN0QxRUJCNkM2Ci06MTBCMTQwMDA1OEFGQUVDM0QzMzEzRURGRkFCMzdGRDI3QTdDQjA1QjY3Ci06MTBCMTUwMDA2MDM5NDU4M0RCMkZFREZDMTNDNUMxM0U4NDg1RjE2NjY0Ci06MTBCMTYwMDA3MjdDQTFCRTU5RDEyNTM2M0EzMkFDRDZBRjdCRDY2RkIwCi06MTBCMTcwMDAyQkU5M0JFNTg1MEZCNzhFMUI0NjMxQUUxRjdGRjNFODA5Ci06MTBCMTgwMDAyRjdFMEI3MDJDN0REMzE5OUE4OUUzRkVFMjg2NzQwNjFDCi06MTBCMTkwMDA3NEYwNjdBOTg5RDNGRDhGRDY2NEEzRkU1RTZBOEY2NUJDCi06MTBCMUEwMDBDQkY0RTRFRjk3NkVGRDM2RDFFM0Q1QkZGRjc2QjZCNkFDCi06MTBCMUIwMDBERjEwQjQ5MTNDODgwNTcxOUU0QjFFOTg0N0YzQkM4QTAyCi06MTBCMUMwMDA0NTg4MUU5N0ZFODhERkIzNzgwMkZDNkMyQjNGQTE1MkE2Ci06MTBCMUQwMDBFMTcyQ0JDOTU2OEVCRkM1ODc3MjEzRUY2QzAxMzgxQzY0Ci06MTBCMUUwMDA4Q0RGRDdGNTBBQ0Y3Rjc3QjI0QjMzMTJFRDVDODdDMjg1Ci06MTBCMUYwMDBFREI5MTg4QkJGOEQ3NkU3MEE1MENCMjhEN0M0REY5RkY3Ci06MTBCMjAwMDA5ODhFRkREQzU4MjQzNTM5MjkzRTZBN0Q3RkNERkYwM0I5Ci06MTBCMjEwMDA3NEM5MEZCQTAwODAwMDAwMDAwMDAwMDAxRjhCMDgwMEY2Ci06MTBCMjIwMDAwMDAwMDAwMDAwMEJFNTdEMEI3ODU0QzVGNUY4RENCRDhGCi06MTBCMjMwMDBGQjBBNzkyRDc5NDA0MjIwRENCQzEzMDk3MTgxMDQxMjhDCi06MTBCMjQwMDA0MEREMTBDMDIwQUYwRDQ0NDU4OUIwMDQwQzAxMTIxMjNFCi06MTBCMjUwMDA5MTE2QUNGRTlBMUIwMjA4OTQ2QTUwQUE1NEQwMkUwODhDCi06MTBCMjYwMDA4QUNGMDYwNEMxOEFCMDExNDVBOEZEMzAwQUI1RjhBMkZDCi06MTBCMjcwMDA4QjIwNkY2NDQxQThFQkJGNTRGRUU3OUNCOTM3N0JFRjhFCi06MTBCMjgwMDAyNjExNjhGRDdENUZGRkRGM0ZGREVBNzBFRUNDOUQzQjQwCi06MTBCMjkwMDA3M0RFNzM2NkU2NkMwRDgzQkY2NEM2OEEzRTFFRDZENTI4Ci06MTBCMkEwMDA5QkNEOTg4NTVEMzRERjk3Q0JEODI1QzZBNDY3RUM4QzAxCi06MTBCMkIwMDBENTMwQTNFQ0I1MzJGQUJCOUFDNEQ4ODk3NTk2NEVDMjg0Ci06MTBCMkMwMDBDRDUwNzY2MTk1NEREMEZFMkFGRUREMTYyOEE3NEEwMkE0Ci06MTBCMkQwMDA2Mzc5RDRGQzEzRDY5RkIxRDlGODJGMDlGQUQ5Nzg2MkQzCi06MTBCMkUwMDBGODZBRTg5N0M1ODkyQzMyOEVDM0NGQzQzMDY2MkIwRjFECi06MTBCMkYwMDBBQjhEQ0M4N0VGMUQzQzZBRUUwNkY1NzI4QzgxQTVEOTJCCi06MTBCMzAwMDBBMEJFRTUxQjgyOTkzRDU2QzJGNjZBRkYzNURCMkRDQzA3Ci06MTBCMzEwMDBBMzhFMDdGRTVGQjNGRTFCMzNDMzdFMENDQ0Q3N0Q1MERDCi06MTBCMzIwMDBEQjdBQzY2QTczN0UxNTgzRjM4ODk0OTY0MTc5QzJFQzAyCi06MTBCMzMwMDAxQkZFMzY3RTA3QkVCQjAxQkU1M0IxMTJEQTY3NkFGQTQ2Ci06MTBCMzQwMDBEQjcyRUE3Mzk2ODNFRENEODFFNzQ5RjhERjA1N0M1RTE5Ci06MTBCMzUwMDA2MjU5QTQyQjhDQjFFOTMwNEQ1NkQwNzZGRUYzQkZBQ0M4Ci06MTBCMzYwMDA3RkY0M0Q0RDdGMzk1Mjc4Q0NGMTUwRjhDNzAwMzZFMDdDCi06MTBCMzcwMDBBQTE4Nzg5RkFEODk2NTJDQkVFREZCREZEN0M5OEZCRUJCCi06MTBCMzgwMDA2N0MyQjc2NUM2QTA0OTk1QzlGRDAyRTJBOUVBMzM4QjM5Ci06MTBCMzkwMDA1RDA2M0M1NkJENzZEOTZDMDA5ODA5Q0M5N0Q2OTlCMTFDCi06MTBCM0EwMDAzM0FGRUVGRUY0NUU5OENGOTkyNjUzQ0MyOEZBQUEyMzQ5Ci06MTBCM0IwMDA0MkU4MTJDMDdCRTVFNjZGODZBRjg2RjYyNkMwN0IwOEMyCi06MTBCM0MwMDBEMDczRjY5NkVGQ0QwNjY4MUY1N0M0N0MxNjE4RkY5OTA4Ci06MTBCM0QwMDAxODI3NjNCRDExNkZBNkFGQkQxQUJDMTVDMTczNkYxOEQ2Ci06MTBCM0UwMDA4RDIzQzExMDg3QTUyNzgxNDEzOTNCODZEOTNERjBGRUM5Ci06MTBCM0YwMDBFQzgzQTI1RDQyN0MzMURGNjI1QjU4REJGNzZCOUE4RTk3Ci06MTBCNDAwMDAwNkQxNDU1RkNGOThDRkVDQzRFRjZFRjlDRDA1MzE0MjQwCi06MTBCNDEwMDA4Qjc3RTNENzVFMERERTU1M0MwN0UzRjU5RTIwQkM1RURGCi06MTBCNDIwMDA2NkQ5OTFGMDE5NzZGQUU1NTkzRDVERDk2REYxQUJFMjM3Ci06MTBCNDMwMDBGNURCM0E4NjRDREVGQUZDNjI0Rjg5RjAyQzZEODcwRjAzCi06MTBCNDQwMDA3NTg1QkExRDRBQzlEOEE3NEM4M0M3OTlBRjlDMjNGRUZFCi06MTBCNDUwMDBGRDQ3QkNDODQ0RTA5QkQ5RUI3RjU4OEM3QzA1NjhGNTYwCi06MTBCNDYwMDA1OTgwN0Y2N0JCMkYxMEJDQzg2MUY1MzE4MjlCNEI4NTJCCi06MTBCNDcwMDA5Q0Y2RTZBREM3Njc3MDdENzc0NDZBNUU4MEZFQTYwNUUwCi06MTBCNDgwMDA0QzBFODc3RTdERUY4OEVFNzUzMEI0RjM5MjJGMjIwQTQyCi06MTBCNDkwMDBFNkI3Mjg4NDRENzY0Mjc5REVBNkMwOUQ1NTk4NEQ5RTJDCi06MTBCNEEwMDAwMkUzM0MyRkU3RDg2NDdDMkY4NDRENjgwMkZBOUM3NzM2Ci06MTBCNEIwMDBGQTIyM0E4NzA1RTY3RDY0ODcxODIxNDE3QkFGOUIxNTA4Ci06MTBCNEMwMDAzNzg1QjVFNTQzQzYxQUU4RkI1RUQ2NTE3RDNEOEQ3M0UxCi06MTBCNEQwMDA5ODc4RTU3NTJGN0NFRkEyNkM2NDE2Rjg5RUI3RkVGQjlBCi06MTBCNEUwMDBEN0JENTAxRTMzNUE2RDg4QTc2OUY1Nzc0NzMwMDM3QzY2Ci06MTBCNEYwMDA3RjQ3Q0FEODA5RDBFRUZFN0Q4MDNGOUE5RUMzMUMwRkJECi06MTBCNTAwMDBGODlEQ0FBN0NFNEUzMkY5QTlDMTMwM0YzMTNDNzdDRjYyCi06MTBCNTEwMDBEQkYwN0UwNTIwNTYwNDdFOURCNjVDOEY5Rjk5Q0MxOThBCi06MTBCNTIwMDBFOTQ5NDJCOTM1MDVGODg0RkVFQjM2N0JFMEJERTlBRTZBCi06MTBCNTMwMDBCMERBNjVGMEREQ0EzNUZBRkE5OTNCQ0UxMDdGQ0QwQzUyCi06MTBCNTQwMDBFMjJGMTdGMjU3N0M1QkZFREFBMEYyNTcxRkQ2MDdGOUZECi06MTBCNTUwMDA2Qjk4MTg2NjQwN0UzRUJGNTc3NDVCRTA5RDhCMEI0RDI5Ci06MTBCNTYwMDA2QzMxQzAxNzVGMTVEQzBDRkFCOUI4MDMxQTIxQkM5RDA5Ci06MTBCNTcwMDBDMzRDOEUyNUJFNTVGOTVDQzVEQjU5RTRCRjhDQjZGOENCCi06MTBCNTgwMDA2Q0FEREZGQTU1RkY4N0ExNDlENTlCNUZFNEFDODZGMjJECi06MTBCNTkwMDBFQzlCOUZBNUJGOERGMEI2QkYyNTdFQzFEQUI2MkZEQTMyCi06MTBCNUEwMDBGOUMzMjQxQUQ3NEUwQkMzNzE5RERGRjk0MUUyQzMwOERBCi06MTBCNUIwMDBGRkM5NjI0N0JFM0RCRkMwRTI2MEE4RUY3Njg2QkJEMzNECi06MTBCNUMwMDBCMEJFMDdGMDAzRDBCREUxOURFRjczNTBERjMzQjY5MEZFCi06MTBCNUQwMDBFOEQ4MjI5OUE5QkNCOEUzOUY4NzA1OUNDNzBFOEI4NDQ1Ci06MTBCNUUwMDBGM0E4RDkwOTQ4ODBGNzZCRkUxNEUyNjZGOEZFM0JERjRBCi06MTBCNUYwMDBGNzc3ODVGRDdDRjM5OTZENjYyRUUyQ0Y3MDM2NjEzMzY3Ci06MTBCNjAwMDBGMjZGNjdFNkMwRjlENEJDNURGMDdDM0Q3Q0JGN0E0QjNECi06MTBCNjEwMDBCMzc5MkFENDE3RURGQTU3MEVFQUEzRjM5QjlCQ0RBODcyCi06MTBCNjIwMDBBRkJFMzU3OTlGNjNDMDFGNUY0ODEzMUI0RDgwRTc2RjI2Ci06MTBCNjMwMDBDM0ExQjM2RThDQ0Q0RDVBRUQ5NEMzREFDMzBCQzdDMzBGCi06MTBCNjQwMDA3OUMwMDNDRTBCRjA1MkU5Q0VFRTE4MUYxN0ZGNkJGMTU1Ci06MTBCNjUwMDA3MTYxMTI3RUJGNkFDNzAwMjYyNjY5RjEyMjM4RjhGM0FECi06MTBCNjYwMDA3MEI3NTVBMEY5RjNFNzNCQkZDRjYxNjFENzlFQUYyRDBGCi06MTBCNjcwMDBDOTRDRjJGRUZGQ0I3QzczOTJGRTVCRTlDQkY5RkQ0RDJBCi06MTBCNjgwMDA4OURCQTU2MEJFNkZDQkQ3REI3RTQ5RjBFQkUxNzYxQTk0Ci06MTBCNjkwMDBFRjc1Q0FGQjk4RkZEQUY5RkZFRkQwQkJFQUJGNzZCRUMxCi06MTBCNkEwMDBEN0EyRjczRTg1REVFMTM2MEJFQUFENzdGRTk1Qzg2RTkwCi06MTBCNkIwMDA2MERFQkZGOTdGNzRERUFERkU4RkMxNkVDRDg1RjE3RDlBCi06MTBCNkMwMDBDRURDNzcxNjBBRTQ5NUI0RUI4RjZDNEYxMkE4M0Q1MzhECi06MTBCNkQwMDBENjFENjMxNEJGQTI4MTdEM0Q3NDBBN0M1NzA2N0YwMjhDCi06MTBCNkUwMDBGREZEODZCMEFGOEQwNzAxNkUwMTNGMDFGRDBCODZDRURCCi06MTBCNkYwMDAwOUUwQTFBNUI0OEY3QjE5REE2RDYzMkRCMzAxNkNGQTUzCi06MTBCNzAwMDA3NDJBQzExM0NBN0YzMEU2NDJGQjNCQzFDRkMzRjZGQkFDCi06MTBCNzEwMDBFQkJERDNFQUExN0U3RjY3ODNENDAwRjA1OEM3RjhCNEFECi06MTBCNzIwMDAyRDAwREJCQTg5MzY1Q0M3MzQzOEZBNTkyNUNERjhDNjA2Ci06MTBCNzMwMDBFNkVCRDcyM0Y3MDZBRDJCRUU5RUEwQUZCRjhCQUQ4QjBDCi06MTBCNzQwMDAzNTQyN0Y3NzU1OUE5ODFCQTY3NDY3NTBGQkE3OTI2Qzc5Ci06MTBCNzUwMDAzNENGQkI1OUVEMjI1QkQ4OERFM0U5NzgxMjVGOUYzNTdBCi06MTBCNzYwMDBCMEJFN0IyNUM0OEI0M0I0NkY2MDZERjFDNjEwNkY4ODhCCi06MTBCNzcwMDA5N0I4N0U2Qzk5MURCRkUyMzUxRTA0RDhBMkY4NTdGMDI5Ci06MTBCNzgwMDA0N0YyNzg2NzhDRjUwNUM0OTM4NUNENjFCRjg0RkUyRUEyCi06MTBCNzkwMDA0QkM2NUE2QzZGNjFCMDZFRTRFMzE2QUUwQTZERjEwNkVCCi06MTBCN0EwMDA3RjkyQjEzRkI5RTI0NDgyQjE4RTA3MTlFMjE5OUZGNzQ3Ci06MTBCN0IwMDA4Q0QzQkQ0RkYzMEVDNkYzOERFMzc1NDFEQTUzODhEN0IyCi06MTBCN0MwMDBEMjcwQkIxQkY5QzJGMTdDQUMxMUJFRDcwMDc4MTY4NEQ1Ci06MTBCN0QwMDAwMDNFNTUzQzA1RTNGRDZERTQwRDhENUZBRTk2RDlDQzgyCi06MTBCN0UwMDAzNzA5RkRDRTA4MTY2MTVGMDZGRDQ3NThCQjMzMjM5RjFFCi06MTBCN0YwMDA4N0NGMTI4Rjg1OERFMTdBNEQxQ0MyOUE5NkMxN0E4REMyCi06MTBCODAwMDBFNTFCQ0ZCNkNFMkI5OUVBM0QwRkMzN0IwRDBGQzBGQkQ2Ci06MTBCODEwMDA4OEQ3RUU0QzcyMTJGRjk3RDk4RUY3QzI2NTlFOEI1RDZBCi06MTBCODIwMDAwRDBERjg5RjFGRTU4M0ZGOTk0NDI1RjFFRDQ3RUJCOTE2Ci06MTBCODMwMDBCRjc5NzlGMDFCOEJGQjgwMjgzMTk4QjNEQzFGRkQ1QzRFCi06MTBCODQwMDBFNTRGRjY5NkUxN0IyMjMzRDg3MUZEQ0IxQzBFQzlENkFECi06MTBCODUwMDAxRkZCNjVCNEFFODlDQzM3RThENkJGOUQxRDlENzQ3OEJCCi06MTBCODYwMDA4QjJFOEVEMkMxQjFDRTZFQkFGNjVEMjcyNEVCRUFFMzAxCi06MTBCODcwMDA1RDM3RTlFQTEzMkFGQkVBRTAxRUI1MDM3NUVEN0JDRURFCi06MTBCODgwMDAxRkEyODM5M0U0M0I3NEVENTM5NjhDRDNDMTY5OERGNzZCCi06MTBCODkwMDBFQURBNjdBQzJBRDdENTY3Qjk2N0VBRUE3QjZEOUNBMzc5Ci06MTBCOEEwMDA4MzdCMzdGRDRBRDdGRUU2RUQwQjc0RjU3RDNDQ0I3NDA4Ci06MTBCOEIwMDBGNUZERjYzRUExODNGMzVBOUVEMUI1MUY3MDY4OURBRThCCi06MTBCOEMwMDBCRUMwRkJCMkFFN0VEMEM5Q0QzQUY4MTZERjlGNzRFRDk0Ci06MTBCOEQwMDA2RkYzQkZBQjgzMEJEOTg3QkFGNjQ1RDYwMzNBNzg5ODk2Ci06MTBCOEUwMDBFRDBCNURGQkRCRTM4RTA2QzUzQjZDRjI4M0I5QThDNkFFCi06MTBCOEYwMDA4MDlGNDBDRTQ2NDg2Nzc0RUQ2MTg1NTY4NjdDNjM1MkQyCi06MTBCOTAwMDBGODYxNjRFNjc3QkFGQUQxRjY3RkVBRkEzM0IzNUEyMERGCi06MTBCOTEwMDAwMkIyNTUyMzk1OUQ1ODEzOTU2MUFDODVDQTg3N0FCQkIxCi06MTBCOTIwMDA0NjI2QTMzQzNDMjcyRjQ2QTZEQTVGRjA3RDIyREE5MTFCCi06MTBCOTMwMDA4RjA2M0YyODIzREY1RDhFNjMzNkIxMEY4Qzg3Rjk4QzJECi06MTBCOTQwMDBDOEQ3ODZEMDJCREQ1RDlBQjg1MTg0NUY2NDlFN0VDMEQ3Ci06MTBCOTUwMDA4NzdFODE0QTlCM0Y5NDc5QTI4MTBGRkQyMTU0NDZGOTRECi06MTBCOTYwMDBBM0U5NzlCNEJGMzM5NTMxRkUwNDdBMUVFQjhGQTdCMkY5Ci06MTBCOTcwMDA4QjNGODVDQUFFRkUyNDJBRTNGQ0JEQTg4Q0Y3Njc1MTM1Ci06MTBCOTgwMDBEOUNEREY4RkRFNEJGMEY3QTFCMkJCN0YxMDNERUZFMUU5Ci06MTBCOTkwMDAyRkEwMzJEMTVGNDRDRjdCRkEwQkE5OTRGQzIzQTk0QzkyCi06MTBCOUEwMDBGMjhGQTAzMkQ5M0Y5RURBQTVGODRCQTg0Q0Y1NEZBNEYwCi06MTBCOUIwMDBFNzY5RkU3QkE4NENGNzRGQTUzMkMzM0Y4NUNBNENGRjExCi06MTBCOUMwMDAyQzJBQjNGQzMzQThCQ0M5RkYyMEJERDdDQkZGMDA5NTAwCi06MTBCOUQwMDBEOUZFODdFOTc5NkZGRjQzNTRFNkY4MUJBOEJDRDk1RjBECi06MTBCOUUwMDA0RkE1RERGRjFCNkFEN0M3QkY5NENBQkVGRTI3RTk3OTAyCi06MTBCOUYwMDAzRkZGMEEyQTczRkRBQkU5Nzk5RUZGRjc1NEY2RjczRjQ0Ci06MTBCQTAwMDA0RkU1MDBGRjVBMkFGM0ZEQUY1MDU5RTA3Rjg5Q0E4MTA0Ci06MTBCQTEwMDBGRTM3RThCRDQxRkU0RDU0MEVGNkJGNERDRjZGRjFCRjZFCi06MTBCQTIwMDA0NUU1QURGRURERjRGQzM2N0YzMzk1MEVGRjg3RjRCQ0IzCi06MTBCQTMwMDBEMEJGOEZDQTIxRkUwM0Y0QkNDOEZGMzE5NTQzRkQ1RjIwCi06MTBCQTQwMDBEMEYzNjFGRUNGQTgxQ0VFM0Y0QUU1RURGRTIzNTQxNjZECi06MTBCQTUwMDBGQkNGNTAzOUMyN0Y4QUNBM0JGQ0RGRDE3QjIzRkQxNzY1Ci06MTBCQTYwMDBBODFDRTVGRjI3M0QxRkVERkY4MUNBRDY3OEMyNjA1M0IxCi06MTBCQTcwMDA5MDVFNkNENTdGODZBQjUwQjJCMEE4NzZFMzZEQURFRjJCCi06MTBCQTgwMDAyQkZBNzg0NUU4NzMwQ0UzMUU2MzZBMDU1QUE3M0YxRDNECi06MTBCQTkwMDBGQUVEN0JBNDI3MEIyQzEyQzI4QkIwNjkzQ0ZGOEVBRDU0Ci06MTBCQUEwMDAwQjYzRjdFMTNGMjRDNjlBMEIyQ0I0N0VERkZGM0ZGQzBCCi06MTBCQUIwMDBCREM1ODU0N0JGN0MxMEVERTMwMzE2ODZGNjMxNThGRjAwCi06MTBCQUMwMDBBQURGRkQyODdGNzcyQ0ZBNjE4QkZCN0FBQjMwRkVGMjgwCi06MTBCQUQwMDBEQjI0NkYxOTk2REI5MkI5M0ZGMjdBMzJCN0I3NUI5M0VBCi06MTBCQUUwMDAwRDU0M0VERURCNDY2NUQ5MDM2OTkxMTRBNzhBQjlCRUMxCi06MTBCQUYwMDA3OTVENTZFQ0JFREFGRUY3QTkwQTFDRTY0QjI0N0I3MTkxCi06MTBCQjAwMDA5REZENUM2RkJCNDVENjVGRkYwMUUzM0E4RTA2MjMwQkJDCi06MTBCQjEwMDBCOTE1NjAyM0I3RjdGMjk3RTFFRTBEMzAyNTc5NDhFREJFCi06MTBCQjIwMDA4QjE4RTc5MTE3NTg2QzBEMzE4OEU3NUZGRjExREJDRjU5Ci06MTBCQjMwMDA2N0NDNjk4MUYyOTk2NEQ3N0VENDBCREY4NzI0QkFDMUMwCi06MTBCQjQwMDAzOEMyNUZFRDgwNzFFMTNGNkJGRjlGRkYyRkY3N0ZGQ0Y1Ci06MTBCQjUwMDBBN0ZBRkZCQkMyNDdCN0E3Mzg0RjI3QTM1RjYwNzRFNEJCCi06MTBCQjYwMDAyMDFEODYyQzg4MTc2M0UwRkQyOUNCMDUxQkYyRDFENDVDCi06MTBCQjcwMDA4NTdEODYyMzdGRjQ2NTBFOEE5M0RFMTdDRDI2M0JEQjE5Ci06MTBCQjgwMDBGMUNCQTI1MjBDOEE3RjIxOTlFRjg2RjE5QzYzQ0M4MzgyCi06MTBCQjkwMDBGRTQ0QjlDNDg4MkZDQjc3MDg2RTk5RTJEMDhFODhEMTQ1Ci06MTBCQkEwMDA2MEJGMkIxNUJFMkQ1RjUyNkY5RTA3RURBQUUzNzlCQ0Q3Ci06MTBCQkIwMDA4Q0I5NzlCQ0NDMEFGRjQzMzk5QUQ1Qjg3NjBGODUxQjZFCi06MTBCQkMwMDBDNTJCMTQxRkJCOEM3RTJGQjBDRUFDOEQ2REUzQjFGM0IzCi06MTBCQkQwMDAzMENFQkNERDZDNDNCQjUxREQxNDE0Q0YwRDhBOUIwNTA4Ci06MTBCQkUwMDBDN0NCNDI1M0MyNjM1MDVFOTk5REQ5Nzk5QzNCQUNFMjZFCi06MTBCQkYwMDA2RkY4M0QxNjIxODkzMUQ3QzY4QjFBOUY5NTk4RDQxNUI5Ci06MTBCQzAwMDBGMTM4NENDQzhFQzQ3NUNDQzVCRDY5OTEwQzRCNDlFQTVBCi06MTBCQzEwMDA4QUVENUM0MDhCMTYyODA1QTM2QjAwM0UwNzdDQ0E0ODYyCi06MTBCQzIwMDA1NzVGN0RBODdCMUQ4Q0VCMDhEODEzQTkxRjBBQjc2QjQzCi06MTBCQzMwMDA4MDE5RTM5MTlGRjc2MENCMDRBMjFBRjk2MTM1RUI0NUI3Ci06MTBCQzQwMDBGMkVCQkQwQkZFQjkxOEUzRDgzMzkyOENCNDBFOTg4Mjk4Ci06MTBCQzUwMDAzMTc3MUNERjVCOUREREIyNDBGRDEyREU3REFGMDkxNDQ0Ci06MTBCQzYwMDA3Nzk1RDk5QzM4OENFQjZBRjY0M0M4QUY3NTJFOEExRDQwCi06MTBCQzcwMDA5MzhGNzQ1QUQyQjlBRjA1NjkyNTNCM0U0REVEQTJBMTExCi06MTBCQzgwMDBDRkMyMDZDMjZCNzk1QzM0QTdDRjc2MTNGOUI1NDA5RjVCCi06MTBCQzkwMDA3QUE0Q0YwQ0I3RTk5ODE2Q0Y5N0Q5MTUzM0VFQzc5NDhECi06MTBCQ0EwMDAyRkI5NDBGNDlBMTlBMDk3QUU1RDc1NjMzM0QxMTVFOEFBCi06MTBCQ0IwMDBBNDdCNUU1MzdCNDI4REEzMUZGQjI5N0ExNUE2MjhGMTM2Ci06MTBCQ0MwMDA0RDg1NUUxODNGQkYxQjJCMUY4OTI2RkQ1MEI2QzA5M0M0Ci06MTBCQ0QwMDA1NkFCRTFEM0UwN0Q4OUQ0NjkwMzIzOUQyMDBGQzVEREY4Ci06MTBCQ0UwMDAzODNEOThEMURFMDVFOUY5RERGMjNDQTI1NzMwOUQ4QTU2Ci06MTBCQ0YwMDA3RjlDNEFGNDYwOUY4N0IzMEQzMDlFRkI1MkQ4RTQ3MTVECi06MTBCRDAwMDBGMDdDQjIxMjdGQkRBRjYxNDQzMUM2Q0JFRjQ5RTFGQTlFCi06MTBCRDEwMDBGMjIzNTg3RjNBNjBGREY5NzE5RDk1Mzk0MDM1MUZBODhGCi06MTBCRDIwMDBCMzExRkNEN0JBMzg4MkZGNTYyNzUxRjk1OTVEMjY5NUQxCi06MTBCRDMwMDBDN0NDQUNCMjQ5MjM1RkMwMDA2NjFDREY2NDQ1QUUyNkE5Ci06MTBCRDQwMDBBN0E4RkI1MjczRTMzMEVFNUVGQ0UzODEzQzAzQUE1MEVDCi06MTBCRDUwMDBCOUE5NjREODJEQjhCRTAwMjQ2OEYwMzNBMTM0OTQ3QzBFCi06MTBCRDYwMDA2OTE1RjY5QTZDQzNFMzUwN0YyQzE1RUMxQjkwQUVDRTkwCi06MTBCRDcwMDA0MUJBRjYyQ0IzNUYwMDQ2RkI2NUU0RkMwNDdDQjEwRUNGCi06MTBCRDgwMDBGOUVGOUU1MUQxQkFGNjc3MkQ0OUQwQzFGMzUyMjQxQTVBCi06MTBCRDkwMDA1RjQ5NzE4QUVFRjlCRDY1QkQ3NEYwMTQzRkFDRTdFMTBGCi06MTBCREEwMDA1M0E5NTJCMTQxODZGRTJGRkRDNTQ0RkM3Q0E5NzY0MEMzCi06MTBCREIwMDBENzc5MUMyNkJFMEJDNkZGMzFCMzRDNzEwNDc5OURDNUUzCi06MTBCREMwMDA4RUZBRUY2NDA4RTdFRjkzN0YxNUREMERCNEVFOTUyOTQ5Ci06MTBCREQwMDBFRTcyRDk2QTkzNzA5REYyQ0JBOTcyMjJENkZGMzIxNDBCCi06MTBCREUwMDA1Q0YyM0U4ODJGOTE2MUZDODBCRDZDMjFGRDM5NzU5NTE4Ci06MTBCREYwMDBDMDY0OTQxMTFGQTNGNUYyREM5NzJDMzRDRjY5QUI0NEQ3Ci06MTBCRTAwMDBFNkVBNDc3QzkyODhFREU3QzY0QUQ0REY3RDI5NTIxM0UzCi06MTBCRTEwMDBGMkIzNkY4M0M1QkUwRTZBQTc3QTk1Rjc4NUJFQjQwRkRECi06MTBCRTIwMDA1MjNERTc2Rjg3OEQyODBGRTkyRDM5MThERjJGNEJGMjMwCi06MTBCRTMwMDBDNEEyMUUzQ0JCREU0NEZCNUVENUUyREE4QTMwMjBEMUQwCi06MTBCRTQwMDBBQ0RGQkUxMTUxMjA5MUY4MTE3RTRGN0YxQ0JCMTZFNzZECi06MTBCRTUwMDAxRjk4QUY5QkUyMjJERTlFQ0U2NzUzMDA5RkE3MkJEQzhDCi06MTBCRTYwMDAzOUI0NEU3RTg0QzdFM0RCRTI4NTkxOUU5MjBEMTFEMkY4Ci06MTBCRTcwMDAwNjlDRUY1NEQ3MDA1QkI2RDYxRUYyN0RCRkE5MjY3Qjg5Ci06MTBCRTgwMDAxNzdCMzY3MjdGNkUzQ0VBODE2M0NCNERDNTE4NzcwMTE0Ci06MTBCRTkwMDBCRDNGMDZGMTc0QUMzMURBQjA4QzE2NTU5Qjg5QkZDQTMwCi06MTBCRUEwMDA4RDkyNTlGQkRERjJFNUEyODNEQTgzN0UyRjQxN0JCREMzCi06MTBCRUIwMDA0Mjc0QjEwMTA4Mzc1MkZGRjIxMkMxODVGQjRFQTkyQzIyCi06MTBCRUMwMDBCRjJCRjJFRDgzMEYwQ0U4OEFGMzk4RDRDMTNFRTNCN0ExCi06MTBCRUQwMDAyMDMzMkVDRDNFRDZDQzc3NDRBNzFCQkY5N0VCMzU5NkFCCi06MTBCRUUwMDBGNkQ2OEU5RkM3ODE1MjVENEJCQUNGNDEzQTZEMEFCMUVCCi06MTBCRUYwMDAyRjkzNTBBRkE2NDRFMjNBRjVENDQxQjAxQkYwOEQxOTEwCi06MTBCRjAwMDAwRENEMzkxMkIwNUVENTgzREI4ODBFOTU2MzlBRDIzRDk0Ci06MTBCRjEwMDBGMEJDQzVFQUZBMDBGMTc4MzJCRUU5QTk0MTE4MjdEQTg3Ci06MTBCRjIwMDBGMTdDQTI4Qzc2NzAzRURGNUY5QkY5RjI4QzlFNUE3RjhCCi06MTBCRjMwMDBCRUFEM0ZDMUUyMENGOTU4NzhCQTA4ODAxNzk3QzQ4NkE1Ci06MTBCRjQwMDAyMzdFMjdCMjI2MjU3RUUxQTZGMTQ5QTg3NDAxMUZCNkZCCi06MTBCRjUwMDAyQUJFRkYzNkQ1NjA5Rjc0MjAxN0QxMUY2RTQzQkFBODQyCi06MTBCRjYwMDBGRDFEMzVGMTM4RDdFNzI5ODJDRTBFQzdBNjcyRjk5RTlFCi06MTBCRjcwMDA2QUUwNzJDNzc2MEFDNEE3NDBCMDRGNTMzNUY2QjI4NjVFCi06MTBCRjgwMDAyRDI3N0IxOTk3MjAzMkRDQjczQjk1MTJBNUU4MDU2RTZCCi06MTBCRjkwMDBGRjY2QTFGREMzN0Q2MTlCNDBGMjUxQjVEMUUyNzYwM0ZFCi06MTBCRkEwMDA3RkE1QTQ3MkY5OUM2OTdFRURBOUJFRDgzQ0E5RDY4QzY4Ci06MTBCRkIwMDBERjk5QjE0NTYwQ0Y0MEQzRDMyNjc3NDUwQkVFNEJEOUZGCi06MTBCRkMwMDBENjJFOENBMkY3NEM3NjM3RjJBOUEyREZBREEwMTA1MDg2Ci06MTBCRkQwMDAyRjRDQzc3RjQyN0RGNTRBQzFFRDIxN0U3MTkyMUQ5QTlCCi06MTBCRkUwMDA4NjcxMTM1Q0ZGQTM5RUQ3RTg5MTM2RkEzRDQ4QUZERjE4Ci06MTBCRkYwMDBDRkY0RjY4ODM1RUFFRDhCMzMzNERDOEFFMzlDQjk5MkQyCi06MTBDMDAwMDBGQkI1ODFGMTg4RUMyQUUwQUFDMkU1REUzMzg2QzYyQkI3Ci06MTBDMDEwMDA1MDVDMjRGOEZCRDM3MTdDMzg1RTE4OUZDNzdFRTNFMzQ1Ci06MTBDMDIwMDBBOUIwNzMzOUFENkExNERDRUU3NkM2QTdFMjM1NzIzMDdBCi06MTBDMDMwMDA5M0QwM0VDRjVBMkZCODkxMUY4N0M1M0M0MEY4OUQwOTM5Ci06MTBDMDQwMDBGODhENDZCQ0NBQ0U4OEJCMDFBRTAwNDY3MjUzN0M4NUQzCi06MTBDMDUwMDBFM0JGNjYwREM3M0ZEMEY5MTNBRERERkQyNkM2Njc0NkM5Ci06MTBDMDYwMDBCQzdFMDNGNjUzQzZGREMwREFFRjg5RUU3QjgwQkUyOEE2Ci06MTBDMDcwMDBCRjMzMzZCOUNEQjgxMTc5ODYzNTQ2ODQyMURGQUZGQUEyCi06MTBDMDgwMDA3ODBGMkUwQkJFNTlGOTQ2MTc1Q0JGOTY0NTc5RDIwQzM2Ci06MTBDMDkwMDBBMEI3QTJFNUE4Mjc4QTZGMDlGMDVGQjBCRDZFNjM5N0NECi06MTBDMEEwMDA4M0YwMjMzMzI3RDlBMTM2NzhCMjJFNkZDMTdERUYzNkM2Ci06MTBDMEIwMDBGNDUzRTI2MkY3RTNCRjAwM0ZGN0FGMTcxRDIxMzlCQTJGCi06MTBDMEMwMDA3NkNBNzkwNDk5RjhCRjUyRjY5MTlGNTAwOUYzNkNCMDgzCi06MTBDMEQwMDBFMTUzNzkzOEUyRTU3RTNCMjNCRDdCQTNFMzBEMUUyN0M4Ci06MTBDMEUwMDAxM0NCODgzRjMxQUU4NzdFQzhCRjNCREU2MEZGQTMyNDAxCi06MTBDMEYwMDBGNUE3RkQ4RjYwM0QxMkVDN0Y3QzY5NzIxODE2QTBERkZBCi06MTBDMTAwMDBGNzMxREYxN0JGNjRGNEY0NDBGOUJEMTQ5MzZDODcxNjYwCi06MTBDMTEwMDAwMTNEMUFEQkI3MkJFQTc5NTU4RjU2Mjg3NjRCRURGN0EwCi06MTBDMTIwMDA3RUI0NTcwMDFGNUZGNTQ2MDREMjVEQTVGRjc0QjQxM0JCCi06MTBDMTMwMDBEOTAxM0JGMUNCQTlEMDNGN0NFRjk3REI0MkE4RkY3MzNECi06MTBDMTQwMDBBM0MxNEU0MTlGNjVDRjdFMTBDMTM0RkE2RjQxNEY1NzU2Ci06MTBDMTUwMDA3NTJBRUExM0Q1QUU4OTZCMTM2REMwNUZBQUJFQkNENjMzCi06MTBDMTYwMDBCQUFCQzM3OTg1MDVDRDJCNUMzRkFGNzI5QzU3QkY0MEZFCi06MTBDMTcwMDA3RjUzOTU3OTdEQkQ4NENGRTdFODcyM0VCRjY5NkRFNjU4Ci06MTBDMTgwMDBDNUVERkUyRjlGQjdEODY1RjIwQjNDQjEyODg3MjczNzQ2Ci06MTBDMTkwMDA4OUFDODFFOENCRkQ4NkNCNTZFMEE3M0UxOEJGNTk0RTRGCi06MTBDMUEwMDA3NkZENTQyQzkzMzBBRUQzQTFGRDVFNjEyMUJGNjBDNkY1Ci06MTBDMUIwMDA1NkJFREY3QTVBMjhFQzRBMUJGRkVGNzkyMjFFNDJCOTlECi06MTBDMUMwMDBERTJDMzJCNDQzODFGMUI0REFFRDk1QTlCMTFBQkI3RDBFCi06MTBDMUQwMDA5RDc4QzMzODJCREFCM0Q5ODAzQUU0RkJEOTNCQkEzMjI1Ci06MTBDMUUwMDAzQ0U3QjJCQzkwMzU4OUI0MEZFRjI1M0QwNjJDNDRGMUY1Ci06MTBDMUYwMDA2OUYwQzM3NUYxMDYwQkIzNUJBRDQ4QTcwRUUyQUZGRjY0Ci06MTBDMjAwMDA0OEJCMzA2OTBFRTFDMzk3OEVGODU3QkY1RkQzQzk2MzRGCi06MTBDMjEwMDBFQThBN0VDRDI2ODFGQzlBRUFCOTg1MTE4NTBDQkZDM0Q2Ci06MTBDMjIwMDBFMzY2OUI1M0I5OUREQUFBRTgzOUMxNTE0QjcxMzFGMEVECi06MTBDMjMwMDA2OTZDOEZFM0I4RDZGMEY4MzA3Qjk3MzUyMTdFMTFBNjc0Ci06MTBDMjQwMDBGOEIxODFDRjQzOTA2Q0FDQUMyRjhGQ0I1QkQxQUU4NTc2Ci06MTBDMjUwMDAxOUM4QUUwNUUzRTE2QkU1M0JENUEyODFGQ0RGMkEzM0NCCi06MTBDMjYwMDBGNzgzQ0YwQkZDRkNDN0JCOEE3RDdDMzc5NUZCQzMxRkQ0Ci06MTBDMjcwMDBBNEYyMzhDNDc5RjQwM0ExREZGM0I3NThEQ0Y1MDJCQUFECi06MTBDMjgwMDBBRDQ2NUEyNzFCMDc1QkRDRThDRjE4QUQ2MTFFMzEwN0FFCi06MTBDMjkwMDBEMTZCRkNCNjU1OUUwMTVGOTM1ODhCMDlFOTM5MjZGRjk3Ci06MTBDMkEwMDA4MThEMzg5RkMzREQ5ODRERUM0Q0Q1NEVEQzQ3OTg0OEM2Ci06MTBDMkIwMDA5QTgxQjFGREE2MkZERkM3NzhBNDBDNkQ0NTU4MkI0QzkxCi06MTBDMkMwMDBDQzNGRDEwM0RCQUY0MTE4RTY3RjM4QTRFOTdEOENCM0M2Ci06MTBDMkQwMDAxQzRFMzIzMkRDMTc5MERGQjE5MEZEMzcwREYxRjZBMDI1Ci06MTBDMkUwMDAzODY1MjdDNjFBRkE2MDNDNjZGNzIyRTRBMzNENzFEMThGCi06MTBDMkYwMDA5OTM2NjgzRkQ5RDhDOTJFNzJGRDMzRjQwMjhFQjc1MkYxCi06MTBDMzAwMDBFMEZCMzcwQkJENzk0ODlGOUJEOTQyREI3MTJCNkQyRDJDCi06MTBDMzEwMDA2Q0I5MUFGRDUzRkM2MzY0Qzc1NTNFODAzMTU1MEQ4MURECi06MTBDMzIwMDA3RjBDNjQ5Q0IxRjIwOTlGM0ExOEYwNEFGMEY3QTk3M0E4Ci06MTBDMzMwMDBDN0FERUM4RTlCMjY1MjZGQTQ3MzU1QjJDRjg4RkIyOUY0Ci06MTBDMzQwMDAzRTgxRjlENjAxMUVFRUNDRjcxOTFENDgyRjA3NkIxQTU2Ci06MTBDMzUwMDAwQkZDRUJEOUM3MDRGQzBFOEEwMDdFRjc2RTRGRjIzMDVGCi06MTBDMzYwMDBDNDAzQ0I5NDU4MjRENDhGMzU0QTA0NzcyRjY2NTFBMjQ2Ci06MTBDMzcwMDBCMjZGODA3MUFDNDM4MzA0QTI4M0MxMkE5OTcwREVDRTcwCi06MTBDMzgwMDA2MkExMkZFRThCNTYyREI4QkU3MTg2NkNGOEY1Qjg5NTZDCi06MTBDMzkwMDA4MzAxMzYxOEY4N0FGNjIxQkU5RTlEMjgxRjE5NDY3RTI1Ci06MTBDM0EwMDBEMjYwMjYyMDFGRDY0NDM1OTk2ODFEMERGMjgyRTNFRjM2Ci06MTBDM0IwMDAwM0RENjhGMTM3RDFFOEU1RTNBQjg0RjExNUEwNUNBNEI3Ci06MTBDM0MwMDAxMjFGREY1QjJCOTAzRjU5NjM2RTNGQUUxMTlCQTZFRUIxCi06MTBDM0QwMDBDQkQ5MjQ2QzNGMEJGRTg1N0MzRDZCQzdCNjM0RkNERUFECi06MTBDM0UwMDA3MjgxRjNDMTJDOTVDRjVFRDVDQkU1ODAzNDQ2N0NEQUUzCi06MTBDM0YwMDAxMTVGRTcyQUZERTdBNjE5RjgzOUFFRDZFRjM1OTFEREQyCi06MTBDNDAwMDA5REI1RTM4MzQzQjhBRUVDQThGRjZBMEJGMzEwNUVERTg0Ci06MTBDNDEwMDBCMTUwRkM0MDMwRjg1Mjg5MkU4ODQ4QTBDMzQ0RjQyNzFDCi06MTBDNDIwMDBDMTQ1RUM5QkM2RkQ0NDk1M0YyQkQwRkY0OEMxOTJDNzQ4Ci06MTBDNDMwMDA0NTBDQTAzQ0QxMUU1NjM2M0U2RjQ2QTQwNTlGM0YwMkQ4Ci06MTBDNDQwMDBDNzg3Q0UwMUNENUMxRkZDNUMxMzU3MTE3NTdBODdFMjVDCi06MTBDNDUwMDA5RTgyRDkzNzBEQzcyM0RDMUE2MjQ3N0QzQ0QxREM0NDZDCi06MTBDNDYwMDBFQkYyRTA3NkE2NDZFRTY3OTk5NjcwM0Y4QkY2RDUwMDI0Ci06MTBDNDcwMDBCNjJDRTc3RUU2QzRFRUJFREU4Q0Y0OUM2REI4OTBDNEFDCi06MTBDNDgwMDA1QUZERTIwQUZFNjk3ODVFQTVGMzhCMkQxODQ3QzBCODA1Ci06MTBDNDkwMDBENzJBRUUwRjFBMTVGRkI1N0NCOURFNUY5OEI4NTBFM0M2Ci06MTBDNEEwMDAyRjUyQjdCRTZBMUNBRkU5OTE1MDhBQkI1OEQwOUZEMEJCCi06MTBDNEIwMDBGODAxN0YzNzk0QzhBODg3RTU2NDIzOURCRjM0QjE2MDM1Ci06MTBDNEMwMDA3RkMyQzk3ODNDOTMzRjM3MkE3RUUyRDAzNDkzNkVERjM3Ci06MTBDNEQwMDA0RDFFQzIzMjExMEY2NUE4ODc1MjUwRDUzODk3NjAzQzY3Ci06MTBDNEUwMDBFRjIyMEI2RkM0QjhEOTMwRjExMThBRkY5NUQ1RjM3M0UxCi06MTBDNEYwMDA2OUMxRjFCRjhCQjVFRjNGOEJFREIxMUU5RkNGRUJGNDYwCi06MTBDNTAwMDA2MzIyRUU2RkMyQjJENDI5REMwQUYyRERFOUYwNjUxN0NFCi06MTBDNTEwMDBDQTA3MjgyQTEzQ0E3QkM4RkU2RjEwMTYwQzkxNENDODk0Ci06MTBDNTIwMDBDN0VGN0I5RUM1RkU2NUIzRDU4NjdBRUJFOUQwMDhFQUY2Ci06MTBDNTMwMDA2N0ZFN0M4MUUyQzMwQjZENUNERUJFRkEzMjdDMURFQUQ1Ci06MTBDNTQwMDAyOTM1REVCQkI4QjBERjJBM0NCN0Y0RUJCNDVERTNBQzExCi06MTBDNTUwMDAzRDUwM0QzMDNBQjcwNDg2RjExMzA3Q0NBN0Y0MEFDODIyCi06MTBDNTYwMDAwREMxRUY4RjczNDQwMjlGQkZFRjlCNjQwNTNDQUREQ0IwCi06MTBDNTcwMDBGMEZFMzgyM0YwRTNGOURGRjk5RTQzRjg4NTBERkIzOTJGCi06MTBDNTgwMDBGQzVCNUY2MjA4QzI2OTA3QzYxOTQxOEVDRUQ3QUJGRDVFCi06MTBDNTkwMDAxRDE4RTdDMDdERjdERjczQjgwMUVBNjU4MENCNTBCRjk3Ci06MTBDNUEwMDBFMUJDMDcwQUI0RUVERjgwNzYyOTM2MTBFRjI5MzNCQ0YwCi06MTBDNUIwMDBDQkNCMjFDQzgzRjZGMzVBRURGRTk4RTZEQzgwRjY1QTFECi06MTBDNUMwMDAwQzNGMTY4RUZFQzU5NjBDMDdDMTlCNTM5QzhGQTVBMUYwCi06MTBDNUQwMDAxRjc0RDBERDI1MTZFMzU4MDZENjgyNzQwMTNCRTY2ODQ5Ci06MTBDNUUwMDA2RjVGN0E0MzJBOTdERjRERTlCQzNGMTU1RkQwQ0ZEMzA5Ci06MTBDNUYwMDA2OUIxMzdERUNGNkQ2REZCNzFGRjNCRTNFOTk0MDFGRDVGCi06MTBDNjAwMDBFNEU5RkE3OUU5REZFOUE3MkFBODFGRDU2RjAzMDc1OEZCCi06MTBDNjEwMDA0MjNENzUyNkQzRjExRUNFNzNENkFGMUQ0M0I2QTBGRUE0Ci06MTBDNjIwMDBEOTJGMTI5RjdFNTdCQjJEMURFREZFNzdBRjVBQTJEMTk5Ci06MTBDNjMwMDBGRUNEN0FGREFEQzQwQThDMjMyODdFRDE5OUU2Q0ZDQ0ZECi06MTBDNjQwMDAxMkJDM0ZEQjJGMzIwN0U4RTkxQUJGNDBFNUVDMkRDREU1Ci06MTBDNjUwMDBFNkUxRDk3OEFFQjZEOTVDQTQxOTU3OTUzMjRFRTA3NEFDCi06MTBDNjYwMDBFMzM4OEQxRkIzMkY0RDhEM0ZBRkEwRjFDRTdBRkQ5NEVGCi06MTBDNjcwMDAxMUU5MzlDQkQwNzQxQ0NGMUZCMzgxM0NFRTE1M0NCRjAwCi06MTBDNjgwMDBDRENBN0I4N0YxQkM0MTNCNzE4MDhGRDJCOERGMTFENzE3Ci06MTBDNjkwMDBDQkIxMUZFN0I3MDlGNTM5RjI4QjgxOUYwRjA5NkVERjI4Ci06MTBDNkEwMDAzNTlERjc1N0Q2ODlFQkY5QkM4M0Y2OEEwM0I0RUVDQkY4Ci06MTBDNkIwMDAzMTg4NTBGNjNGNTQ2QjJFODdFNzA3NTI4NjFDNEE2QjMxCi06MTBDNkMwMDAzNzBFRTlFMzcxQzgxRDNDMEU1OTE2RDUzMjE3OEMxOTg3Ci06MTBDNkQwMDA4QjRBQkZGODA0Q0FEQkM4QTc1NUY5MDBEMTAzRkQ1MjQ1Ci06MTBDNkUwMDA2QzUxRTE5MEYxNDMwN0YzMzgxN0MyOTczNzE4OUVDNDk1Ci06MTBDNkYwMDA3Mzg0N0IzQkI1RkNFMjAwREE4N0E1RTE2QzFEQzhEOUU5Ci06MTBDNzAwMDA3RDAzQzIxMzM3QzMzOEE2Q0E5MTAyRDg0RTU2NjgwOUIyCi06MTBDNzEwMDA0RjlGMDJFRDRFMjQxNzQ2QTVGM0YzMjdFNDFGOUU0OEQyCi06MTBDNzIwMDA3NjlFQzNGMTc5OTM0MjBERTA4QzMwOTc5OUM3QjM1QzQ0Ci06MTBDNzMwMDA3RjE2Mjk5RUU1Q0EwOTc1QjlEQkMxRDcxOTA1OUY1MTM2Ci06MTBDNzQwMDBFOURDM0ZEQjZCODA3MUY2QzU3MUYwRjNCREYwOTdCOEEzCi06MTBDNzUwMDAxOUUzNEQwQjdBMEFDODc3RUFGNzZGNEYyOUVDOUM5RUQ0Ci06MTBDNzYwMDAxN0Y4RkVFRDI5Q0UxRkQzNjJCNUVEMjMxOUI2QkZERTUzCi06MTBDNzcwMDA3MUZDNTNCMUE3OUREMzM5QkQ5QzgzODFCRjM0N0E3RkFGCi06MTBDNzgwMDBEQ0QwNTAxRDVDM0EyQTlBMzlCNEYxQ0REMjA0MUQzQzVDCi06MTBDNzkwMDBBMTJDNDVEN0ZFREU2OUJENzRGNUEzMkQyREI5QjUzN0EzCi06MTBDN0EwMDBFMEVGOEIxMTk5OTFCNEZFQ0ZFM0VCOTBBRjc2NUNGRTk2Ci06MTBDN0IwMDA3NDIyRkFCMUVCNDVCQjAwRjM5QUYxQ0U4NjRGMDc1MUQ0Ci06MTBDN0MwMDBFRjEyQzVCOTRFRUYxNUM5MUU4MTdCNkJENkVFOUY5QzRCCi06MTBDN0QwMDA2MzJENzRFRUQ4RDg3OTIxRDlCRjU5NzFGQzdDRjcwQzQwCi06MTBDN0UwMDBCNzdFRkY0MzhEQ0JCN0I3NkY4MkY2QUMwQUNGQzVCNDI3Ci06MTBDN0YwMDBCNzZGMTI4OEM3RkZFNEZFNDlCRjc0NjUzRERDOTdGNTRCCi06MTBDODAwMDBFNUVCRTFCMzdCNjBBNkFDNjg3QjMzRDFBQjYxOUY2ODlECi06MTBDODEwMDA0NzU2NkRFODIxMzAwMUM2NzlGQjE2OEIzQjA0QzY3RDc3Ci06MTBDODIwMDBFRUFEMjM2NjQ5QjM3RjUyRTMwNzAzMTA4REVGMUQzMTUwCi06MTBDODMwMDBFMzc5QUEwMzY5NUM2RkNGREU3MUMxQ0M5MDJGNzYzQzlGCi06MTBDODQwMDA0MDcyREREMkVDOEE4OTQ1RkIwNUZFRUFENjVDRTRBRjk2Ci06MTBDODUwMDBBNjVDQjQ3RjdCMEQzNjI3RUU4N0NENUEzMjgyRTJDQ0MwCi06MTBDODYwMDA5MUZFODk1NDU2MzU4RUEwN0VBQkZERTMwOTlFRUQwRkY3Ci06MTBDODcwMDAyNUY4MjNCMTY1Q0JDN0Q4Q0ZEMzkxMzZCNEU3RDU0NkQ5Ci06MTBDODgwMDBGOTU1QTQ0QkI1MTREQTBGRjdBQjY2NkZGOUY4RDJBRkQwCi06MTBDODkwMDBEMDhFREFGOEJEOEVEMUUyMjdCOTU4M0ZCQUE3Q0REMEY1Ci06MTBDOEEwMDBEMDE5QzcxQjQyRkRCNDBDRjkyMjE3RUQ1MjMxQUUwQjYzCi06MTBDOEIwMDBFMDc5RDVFNjAyMTdDQTdENjE0M0I4MERFNTVFQzRGM0ExCi06MTBDOEMwMDA2NEVERjBFOUU0NzRBRTVGNEM1RTNFREU2MUZFMTJFQUI4Ci06MTBDOEQwMDBBRjc1N0Q5RjlFNENGMzU3NjE1M0VDN0EyM0VBMEY3NTM5Ci06MTBDOEUwMDAxRTI2MzBGODU4REVFMUVGNDU2NUNEOTYxMjIzOUU4QjZCCi06MTBDOEYwMDBGRjczRTZGMzMxODgyNzY4MUY4NjY1RUFEMDQxQTQ2Nzk1Ci06MTBDOTAwMDBCRUFCMUQxMEM5REFEMTVCNkE2OTUxRjRGMDQ0RDRDM0RGCi06MTBDOTEwMDBEMDVGNjlBNkUzNTcyODk3NjMxRUYxMUFBREE4NDdDM0Y1Ci06MTBDOTIwMDBBQzM2RENGRjE4OTNERjQ3QUFEMENDNDc3Q0Y3MUU1Q0ZGCi06MTBDOTMwMDA0OTgwQUZFMjMzQTExRjMwMTE0QUFEREU5RURDODE3RDFDCi06MTBDOTQwMDA5MUQzMEQ4QTVGNTRDRkNGNzVBQUZBN0RFNTEzMENENzJBCi06MTBDOTUwMDA2MTkzRjg1OUFENTZCOUFBNTZEQUFCRUZCNzA4REMxRkE4Ci06MTBDOTYwMDA5MEI3RjJCODdFNzVBNkVCNDkxQzZGNEIyMTlCQjA5OTJFCi06MTBDOTcwMDBGNDY5NEI2MjQ5RjhDRjM3RkUwODYzMEJEMTM5QzIyNjAwCi06MTBDOTgwMDAxOTcwNUY0MUFENUZENTNBMEYyRURGRDc5QUM3MjJBNTQ4Ci06MTBDOTkwMDBGRDQ3MjI5QjhGN0NGMUQxNkRCN0I1MzhBMERGRTY4N0NDCi06MTBDOUEwMDBGQkY1MTMzNTc2RUFBNTc0N0VBRTk5RDk3QzU3NDg1RkJFCi06MTBDOUIwMDBFQzBDOTU1MDBGOENDNkJEODdEQzgwREY4RkU3MjEzMUYyCi06MTBDOUMwMDBBRTUxQjNEM0IyMEVDRjgzRDU0NEMwM0ExRkJFM0ZBQUY3Ci06MTBDOUQwMDA5N0VCMjVDNDQ3RjNBRTgyNEI3ODhGQzY4MTBCMzM5MDFCCi06MTBDOUUwMDA3M0M3OEUwMTk3RjA5Q0JEQzMwQURBQzY4RTdFOTBFM0IyCi06MTBDOUYwMDA2NUQyRkYxRDhDRjc1QUZBMkM3NUU4QUMxOEY0MjdCRUU3Ci06MTBDQTAwMDA4MzIxQTFCRDA1QkI5RjdCOTBDMzRFQzQ5NzZCMDk5NzQzCi06MTBDQTEwMDAzRjk3MjI4NzUzMTRGRTJENTdFNDcwOEE5MUNCRTFFNEFGCi06MTBDQTIwMDA5NTkxMzY4Qzc3OTYzRjIyRjRDNkYzNzI0QzBBQjdBM0UxCi06MTBDQTMwMDAwQTMwMjE1RkY2NDNGRUU0N0M1OUU1RUZBQ0M4NzM5MkZGCi06MTBDQTQwMDBEMjBGRTdGRjYwRjk5Q0VEOEZBNjc2QUE5Q0JFOUNFOTA5Ci06MTBDQTUwMDAzQUM0RUQ1QzRCRUU3QzE4RDcxRDIwRDdBOEY3NUMwQkQxCi06MTBDQTYwMDBFMjczNTE0RTAyN0M2MkI2MjEzRjAxOUZDNDU1NjhGOEMzCi06MTBDQTcwMDBBMEExRjkwNzIzRjI4OTY5QjA0MDdDNjI4MUIyNDhDMzYyCi06MTBDQTgwMDA0N0NFNTZGRkM0MzZCQzBCRkE1NTBCOTMwQ0NCNThBMEJGCi06MTBDQTkwMDBGRUFCNzRENTRGQjkzRTdFRkZCM0QyQkUzQzBDRkMwODUyCi06MTBDQUEwMDA4QUZGNDQzMDhDQUY1RDhDOTEyODRFM0E2NzI5MEMxMjc2Ci06MTBDQUIwMDA1MDMwQzdFNDQ5QzMzOENDOUMwNzQyMjgwRTU2NzFCMEE5Ci06MTBDQUMwMDA3NjcxQjhENDk2NUVGN0Y4NzM2ODdGNzlCQzNGOTVDQUUzCi06MTBDQUQwMDAwMzI5QUUzMzg4OEYyOUZFQkIxNDNDRTY1Q0Q3RkU1QzhECi06MTBDQUUwMDA5RTgzQzdERDRDNkU4QjdENkQxMkM2REQ1QzIyRURDNzZCCi06MTBDQUYwMDBGNTYwQjYyN0M5NEVBOUZCNzEzQ0VFODZGMTNDOENFRjgwCi06MTBDQjAwMDAwNUVGQUY2MTFDMEVEN0QzOTYxODgzNkU5RkIwNEQzQ0Q2Ci06MTBDQjEwMDBBRTUwQkY5RjU2RDVGQzQ5N0YwM0Q0OUY0RTcyNTA1Q0U4Ci06MTBDQjIwMDBDRURCRDM2NUNDODA3OUNDMUNFNzdFRERBNERENjc1M0ZBCi06MTBDQjMwMDBGMEQ4NjRGNEE0QTExRDZEQUFFNUY4Njk1QTJFMTZEM0E1Ci06MTBDQjQwMDA3RTEzNjNBMTI1OUFGM0JBRDdFMkUzOTlGRTE0QzI4RjRDCi06MTBDQjUwMDA2QTVGNTRCREJEQUQ4RTBFN0RCNkVBRUY2QkQ5OUQ2QTlFCi06MTBDQjYwMDA4NURGQUI5MURGRUQ2REVEOENDQUFGQzFGQ0FDRUE2NzQwCi06MTBDQjcwMDA1M0VDNDFEMjQzNzdDMDJCRTgzRkE4RkFCQUI4NjhEMDRCCi06MTBDQjgwMDA2MEI0RjM4MzVFNEFEOUYyMjc5ODdGNzRBNjJCMzcwM0VCCi06MTBDQjkwMDBGOEU3QjY1NzdBRTRBRTA2RjgwRUEzREI2ODBCQkIxRUM3Ci06MTBDQkEwMDA3REY4ODM4OUY0RTEyMzI1OENGNDIxOTQ1QTdENjhFQTg5Ci06MTBDQkIwMDBDMDBGMkZDOEI4MzE3RDlFQTFCNDA3M0Y5NkZCODdBMDU4Ci06MTBDQkMwMDBBRkI1RkQ1NTY3MEUxOTg1RTMyRkM5RTA3NkYyRTcxQTc4Ci06MTBDQkQwMDA3NzQ3N0FCQzI0NDM5NUNGRUJEM0UzQjcyQUVEQUZBNUQzCi06MTBDQkUwMDBDN0E3NjU3MDNEMUVBQ0I3NDExQjkzREUzRUZGNEUxNkQ2Ci06MTBDQkYwMDBDNUM5MEUzM0QwRjM2OENGNzY4NDRBMUI5MjM0RTdEQzg0Ci06MTBDQzAwMDAzQjQ1QkFCNTdBM0RBRUQ3RDQ2OUM4RUZEN0ExRDdFRkM3Ci06MTBDQzEwMDA0N0ZDRkRCQjdBN0Q3OEM5MjZGMkFCRTBDRjM5RjY1NkVBCi06MTBDQzIwMDA1ODdGRkMwNkQ2NzcwODdGMDRFQkJCQTRCNkYyMTAyQzI1Ci06MTBDQzMwMDAwN0MxN0MwRkVCOTEyRDFGQzNGOEY2M0VENTkzRTIwRTkyCi06MTBDQzQwMDAyMDA3QzRGN0Q1QzBGNzI4MDdBQUJDQ0NERUQyMjcxMjJDCi06MTBDQzUwMDBGNzBERDg1RjQ0ODZGQTNGNTgwRThBOEI1RTMxNjI5QzhFCi06MTBDQzYwMDAwQUY1MzhFMjZCMzdDODNDRUE5OTYwM0JFMUNGNzBBRDFBCi06MTBDQzcwMDBDNEY5QUJGMkEwQ0FDMUI1RjlFODJEMTNBRTRCNEQ1NUJFCi06MTBDQzgwMDAxN0I4OUU4NzUyQUJFNzNCRjI2NzdFN0Y4M0ZDRkY2ODU1Ci06MTBDQzkwMDBDNkY1RjkwMUFGNjZGMDdCMTAzRjIzRkZCQzlBNzE3REFBCi06MTBDQ0EwMDA3RUMxNkIxOUZGOTE1RkYwMzZGMTBGRUE0RjVDQkY4RENCCi06MTBDQ0IwMDBGQ0QwMUUzOThGRjMwRjlENEIwNDdFQzhDNUI4RjNERTQwCi06MTBDQ0MwMDBGRTNERUMxOEE3MTk3OTk1RkJGNUEwRDNDOUFGMEZGNjc3Ci06MTBDQ0QwMDBBQjI3MkFGQTZGQjIxMjI3Mzg5MEU5NkNDOUUwRjI0QTAyCi06MTBDQ0UwMDA3RTdCNjE0QTY4MUZCNDU3RDdFQkVGNEQ4Q0E5NjUxODVFCi06MTBDQ0YwMDA2NzlBMENBNTU2NEY1ODkwNkVFREY4RUI3RkNEQjgzMTgyCi06MTBDRDAwMDBGQkJERkIzQUU5N0IzQ0UzM0ZGNkYzN0NEN0EzMEY1MjM0Ci06MTBDRDEwMDAxREQ2RjE4OENGRUYzQzQ2ODY3OEJBRDY3QUMwQjQ4QTYxCi06MTBDRDIwMDBFMzU5ODUxNzc5OENBQUREOEM0NkJCMDlGQzcxRTEzRjdDCi06MTBDRDMwMDBFMThGRDE0NTREOTdBQzQwRDdDODRDNjMyOUM2MDNFRjZFCi06MTBDRDQwMDBDMkIzMTYxNENGMzBBRDc0QTRBMkJFNjFFQUJFMDBDNTUyCi06MTBDRDUwMDAzQjNFMTI1NUQ4N0M3MDI4OEM2M0U0OTMyQ0IwNkYwMDU2Ci06MTBDRDYwMDBGNUMzMDY0N0I2QzY0NzA0MTY2ODFGOTEyOTFFNUM0RUQ4Ci06MTBDRDcwMDBFM0U2RTc1NTk4Q0I2QkU0RkI2NDBBOUMwQjcwQjgwNkJFCi06MTBDRDgwMDBDRTBGODJEN0YwRjYxMTQ2MkZCMzY5RkI1MUY0Q0YxOEJFCi06MTBDRDkwMDAxQkRGMTcwOEVDRTdGOTg2Nzc0NkZGNkY4QjYwQzNGRDUyCi06MTBDREEwMDA4NTdCMDc5RjM3NjMzQzY3NzQ5MTc3NEYwMkI0NEJDQTBBCi06MTBDREIwMDAwQzJGMEQwMzEzN0ZFRjE2ODFDNkRCNjc2M0NDNEEzOTU2Ci06MTBDREMwMDA5NThFNkMzOUYwQkM2MTU1M0VERjM3QjEzNDM1MEY3NzQ1Ci06MTBDREQwMDBCNEMzODc3RDMyRjU3NjBBRkY4QzVEMjgzRTQ2N0Y5Njg4Ci06MTBDREUwMDAyNjgxOTk3Mzc5M0ZDOTQ5RDdGNzNFRDI4RkRFNEZBNjg2Ci06MTBDREYwMDBGNzNEOTY5OEVCN0ZGRkVFQzFDQ0UxNkU4NzhGNkVDQjRGCi06MTBDRTAwMDA1NEY0MjFDNjg1RDVGRTgxMjZFMzlCMDQ0NzdCNzE5QkE0Ci06MTBDRTEwMDBEQjk1RjYyRDA2NDMzNTAzM0M4REREOThCOTEyRTM1RUI0Ci06MTBDRTIwMDBDMzE4RTc4QjkyOEQxOUE1MzJFNzNGRTYwODlBRUY0RkJBCi06MTBDRTMwMDA4RDM3MkY1M0JGM0VDMzNGNDlGRkJFRTdBN0YwMzVBODRDCi06MTBDRTQwMDAwREJFMTRGQTU3RUFGOTI0RDJFODdDRUYzQjE4NDc2NDg4Ci06MTBDRTUwMDA4QzYwNDMzRjc1QjYzMzY0Mzk4QjQ0QkEyQjdDMkRGNzE1Ci06MTBDRTYwMDAyRDc1MEM4NkY5ODUzMDVEMUNBRjk1QUZFNTdFQTVDOEE0Ci06MTBDRTcwMDBEN0IzOTlEQTNFNkYyNUQyREY2OTY4NkRDRkY5N0M4NzI5Ci06MTBDRTgwMDBEMEZBN0VBNjkxRTEyN0U4RkQ1OTFCNzM1NzYyOUMxQ0RFCi06MTBDRTkwMDBFODQxRjUwNDFCN0Y4MkNGOUI4MkUwQzE0MTcyQzEzODFCCi06MTBDRUEwMDA0QzcyODk3QTE5RjA5M0Q2Q0VGRUVEMTIwNUJGRTcwNEQ1Ci06MTBDRUIwMDA3RUJFQTk2NTA4RjdFNzVBOTI3OUY5NjIyNkY3REYxRTY4Ci06MTBDRUMwMDA1N0YwRjhCNDUyQjY3NEQyRTBBMTdCODBDRUYwRTdDMTNGCi06MTBDRUQwMDBGNTgwNjZERTg0QTc3QjYyOTQ3OUNCRTM0QjQ3QzFCQ0M3Ci06MTBDRUUwMDA1QUEyNTg2RjAxRjg2NEVEQzZCMTJCMTc2QUY4RTRGOTNECi06MTBDRUYwMDA4REUzNEIxMTBGQURGREM5MjUwNzExOEZGNzI4Nzg3QTA3Ci06MTBDRjAwMDA3MUUzQjg4M0M4NDc3OEU0MDRFNUFEM0E5RkVGQkY1QUIwCi06MTBDRjEwMDBCNjdDRENBRUJDQ0Q2OUNCM0YzMkU2NTdBODI2NDZDMjE0Ci06MTBDRjIwMDBGNzA0ODcyOTk3Rjc5M0RDMEU3RUU2Qjc3RERGMTFGNENGCi06MTBDRjMwMDAzRTMzQzVEQ0M4RkIwQTdENDYwNUQxQUYzODg4N0U0MzQ5Ci06MTBDRjQwMDA4M0UwMzIzRDFDRjA4M0ExNjdGMDlGQ0FCN0FGNThENDhECi06MTBDRjUwMDAwNUUzNjcxQjA1QkE2MzA1RkFEOTJDQzBGMzFEOTlGN0UxCi06MTBDRjYwMDA5NTg2QzUyMzlGNEFBNjA0NjhFQkM5OUM3Q0QwOUEwNTg4Ci06MTBDRjcwMDBGMjg4RkE4QkY0QUY4QkY0RjU3ODk0NzM4MkE3OTQzQTI1Ci06MTBDRjgwMDA2RTQ2QkVBOTVEMTQwN0VERjc2NDk2QUZDNDdCQUZGNzlDCi06MTBDRjkwMDAyRTVDNjE0MkE0RkYzOTczREE0QTIzRjQ3QjRGRUUxRjAzCi06MTBDRkEwMDBGNzYwN0Y0NkExRTJFMDI4RTEyN0Y4QjQzMTY4MUU2QjA0Ci06MTBDRkIwMDA4MjYwMzlBOEZEQ0E2QkU4RjM4NTQxRUYzRjEyNTRCRjg4Ci06MTBDRkMwMDAzQzA4NUUxNTA0MkZEMUJGM0Y2NTFBREZCRjlDMDJGNEY5Ci06MTBDRkQwMDA0M0M0NUQ0QjVFQkM5OUFERUI4NjU2RkIyNUEwM0RGQjgzCi06MTBDRkUwMDA1MENGRUYyMzFCMzg3QzZBRTM4M0E1NEJDMjM0NzBFNjM1Ci06MTBDRkYwMDAyRjRBQjVGQzZCNTJFQ0M1QzQxOEE3QTMzREZFM0RENDI3Ci06MTBEMDAwMDAxMUZGNjQwNkRCMzU1OTc3MkVGMTMwNjMzQUZCQkI1QkM5Ci06MTBEMDEwMDBENEMzQ0RBMjJBNUYwQjBFQ0VDREQ2RUMwN0NBRjVBNUEwCi06MTBEMDIwMDAxODRGRTk3OEJGNDIyRUM1RkQ4QTkxOEZBQkVERUI0QUQwCi06MTBEMDMwMDAxRDlBRjlBOUVEODdGRkVCQUE4OERGQkI5QTU5NTdCQTY5Ci06MTBEMDQwMDA5RUY2RkY5NEZEQkIyODVFREU3NkU1NkEwNEQyNjUzODY1Ci06MTBEMDUwMDA5RTFGQzVGQTRFOUVCNDM5RDk5QUY5QjFBNjc0OUM1RjQ5Ci06MTBEMDYwMDBGM0MzRkNCRUExREMwMEY0MDAzOTJGNjc3NkRBRkY2RTUzCi06MTBEMDcwMDA4RThDOUNGRjAyQjRERkZEQjAzODFGRUREN0UxRjlEMUYzCi06MTBEMDgwMDA3NERFNjg2QzE2RjdCNzc3NDdGNkVDNzIzRkMwQ0RBMTM3Ci06MTBEMDkwMDA5M0NEMTg1NzZEN0U3NDE4OTVFRjhBOEVDNTNFNDA3RUVECi06MTBEMEEwMDBGN0FDQzc0QUMzQjJCMDNFOTJGMDEyRjdEMkQyRDI3QUVFCi06MTBEMEIwMDA5MDgzODQyQzg5REU3NzQ1RDlCQTZDNDczRjc0OTk4OTZGCi06MTBEMEMwMDBFMUZFMTM2M0Y2RTc4ODRGN0U2QjIxM0Y3NTRBN0QyRkEzCi06MTBEMEQwMDBEQUVGMjlGRjVEQzlGMDc4Njg1N0JFQzg0NEYxN0ZGOEUwCi06MTBEMEUwMDBBM0ZCMThBRTY1QzNDQzU4M0Y2REExNTJDQUI3NTNCOTY0Ci06MTBEMEYwMDBFQkM3MzczRUNDQTE3RDFEOTFDRUVERUNGNDQ3MUQwNzZCCi06MTBEMTAwMDA0OTY2NUZDQkJERTlCRUMyNTEyNUJGQ0E5NjJDNTc0NkMyCi06MTBEMTEwMDAxNjhDRTNFQkIzQTk5NDJGODVEOUE0ODg3MUU4QjdERDA5Ci06MTBEMTIwMDBFNEM4Q0M4QTBEQjREQkY1QTM0OEZCNTU2RjlGMkRFRjA3Ci06MTBEMTMwMDA4MkZCN0I3REIzMzhCRkVDRjQ5Nzc3MjlEN0Q4RjU4QThCCi06MTBEMTQwMDA3MzQ2QzJGMzJFQjMzNDE3RjVDNkFFNEUzRDA0OTlFNEQwCi06MTBEMTUwMDBCNjI5MUFFM0FDRDMxNEJGMTlGODY0RkUxQkVERjA2MUQ1Ci06MTBEMTYwMDBDRjJDOTFGMDcyQ0MzMjFGQ0ZDMkIyRTZERkM0MEVDNjE0Ci06MTBEMTcwMDA3MUE5RUZFNTFENzQzNTYwQkUxODUzNzdBOUFGRDYzRjhFCi06MTBEMTgwMDAyRTQ4MUI3MjJCOEUzN0MwNUZFQjQ5OUY5MzdGMENGMEFDCi06MTBEMTkwMDA4OEFDQjUyQjY1QjAxRjZDMzdGOEY1Mzg4RTE4Qzc3MEEyCi06MTBEMUEwMDBFNDI3RjUzQzFFOEI2QjRBRDdDNjE1MDI3RUU4MDI0NTg0Ci06MTBEMUIwMDBGRTc5QkJBRkYwNzAzMDdDRkZBQjU3NDNFOERDRDc1NzRDCi06MTBEMUMwMDBGMjE3RTE1QUZGNTg5NThGRTkxMUZGNzNCODg1RDZDNTVDCi06MTBEMUQwMDA5MTkyOTAwODdDNjNBQzNCRkUxMEJDNTdGMUFDODlGNDkzCi06MTBEMUUwMDA2NkM1QjNCMThGRjhCMDFFRTg4OTVCODZDMURGN0QzRUFFCi06MTBEMUYwMDA4QjlGMDdFODU4M0UzNjk3MEVFREFFOTU4RjREQTUzOEJDCi06MTBEMjAwMDBERjhFRTQ2MzZBRDZBNjBFRTRBM0FFMEJGMkQxRjA2NzFDCi06MTBEMjEwMDA0RDc0QkVCQUFDNTNFRDVEMTg0NzJDMzNEQ0NDMUE2MEFDCi06MTBEMjIwMDA3QzQzOUVGRDQ1MTdEQzY3OTlGRUFDODVFOEVBMEQwRjRGCi06MTBEMjMwMDAzRkNFRTdENTMzMDlFN0Q1NkE3RkIyQjhCRUYyRDYxNzNECi06MTBEMjQwMDA5MEJEMTAwREUwOUQ4MUZFMTYxNzlCNjgzRDIyNzYzMTQyCi06MTBEMjUwMDA5M0RFMTMyM0VDQkNCRTEzNEI1QTAwNzY3OTUxNzhCRTkzCi06MTBEMjYwMDA4NEY0NzUyQkYyMDBGNTEyRjI1OTUxRTQ4NDNCRjA1QzIyCi06MTBEMjcwMDBDQkUxRjkyOUI0MEY3NjJBOTdFRjgzQ0Q3OEU4RjkwODQ2Ci06MTBEMjgwMDBGNDNGQkY5QUNCQ0Y3N0NGQzQ3QzNCQjhDRUZEMzdGNzA2Ci06MTBEMjkwMDBCRDZBOTQ3QzNCRkY1QkZCNUU0RjY0MjlGNzg2NUFGN0JGCi06MTBEMkEwMDBCREY4MzlEMERERjNGQkU1NzJCQzMwQzk4Mjc4NEFFQ0I5Ci06MTBEMkIwMDA0Mzc4QjlERENBQTQxMEMwOEIxOEM1RDI1MUZGQThGQkIyCi06MTBEMkMwMDA1RUUyQUZCODdFMTIwRDAyQUREMzhGRDVDOTk0QkZBMDc4Ci06MTBEMkQwMDAyOEMyQ0E5RkZGOEFERkRCMTM5RjJBNjFCNDBGMTY1MzRGCi06MTBEMkUwMDA0QkZCNjBFMTg4NTc4Q0RGMEFDQzg5RjI3MzM0QzQ5RTEzCi06MTBEMkYwMDBGODQwMzZGMjVGMDhEMTczRkE3MzMzM0VGRDdEMkVEMkNCCi06MTBEMzAwMDA2RDc0OEMyRTlFQTBGMDlGRkFGRTg5RkE1QjY4N0MyN0Q0Ci06MTBEMzEwMDAwNDY2NDM3QjVGRjQ4NzhDQTE0ODlGNjZEMUY1RDQzREJBCi06MTBEMzIwMDBBNDM3NDM2OUZGOUNEOUJDQkYxRDAwRjBGNDdBNTg2NzRECi06MTBEMzMwMDAzM0U0OUJGOEM0RTRFQzQwM0ZEMzE3M0M5QzhFRjQyRUJFCi06MTBEMzQwMDBGQTQzODgwN0NGREY0QzVCMThCMjBBQ0Y2MTU0RURFMDk3Ci06MTBEMzUwMDBGN0JDQTcyQ0ZEOEVDRUUzQjIyNDYzMkRDNjM5QkY1RTg5Ci06MTBEMzYwMDAxOEMyQ0ZBOTZGMTk0MEZDMzNDNUMwQ0ZCOUIwNDQzMzQwCi06MTBEMzcwMDBDNTk3QUFDMjE0Qjg3QjNFQzE5QUZCNEI2NkE0ODc3QUI0Ci06MTBEMzgwMDBGRjY2MEZFQTE1RjhGRTcxMTUxRkU4MzdBMkRFNTVDRkNDCi06MTBEMzkwMDBEMUIzNUEwOUU1QkZDQzIwQjQ3QkNFRUI2RjU5REMzRjRCCi06MTBEM0EwMDA5RDkyNjhBN0YzQTJENThGNTlFQzBCOTIzODlEQzVGRUNDCi06MTBEM0IwMDBGODVENDZFQkEyNkE4MzZGRjgyQUVDRDdDMEE0QUQzNkJECi06MTBEM0MwMDA1QzNGQjQ1NEUwN0E5QjZEQzlBMDNDMDQzNTQ2NjYzNDlBCi06MTBEM0QwMDA0N0MxNzM4OUVCMzM3NTNDMzU1MkM5RURDNDRGNDY3NjZFCi06MTBEM0UwMDBDODE4ODU3ODZDRjlCNDA1Rjk2MzQxQjg4NDcxOTFFQTdECi06MTBEM0YwMDBDRTc2MTdGNTFCNkVCNTcxM0JBMTdDMTdDNzlFODI3QzVDCi06MTBENDAwMDBFMDM3NDcyMTFGN0MyQTE4MkMzQ0ZGODBDMzAwRjVFNzNBCi06MTBENDEwMDAxOUFGNkZGRENFQzJBNUQ5MzQ2RkFCQ0QzMDI0MUVGOTQ0Ci06MTBENDIwMDBFRUMyRjA1NUYwREVFRDRDNEE4RUM3N0I2MjRCQTNFRkE3Ci06MTBENDMwMDA5QTgwRjVBRjg5QTQ5NzQwOTgxRUNCNDc3RkVGMzVCMTBFCi06MTBENDQwMDAxRkFFNTNBNzJDREQ0REYzOUJCNUE5MEZERTIwNjA1MzEzCi06MTBENDUwMDA1RTNGNDBGNjY5OTZDMjVGNUVFNURDNUEzOUMwOUIxMEJDCi06MTBENDYwMDA4RjhBNUU3MDg5QUM5NkUyNjEwQTFFNUJGMUFCRDQ1NzdECi06MTBENDcwMDAyRjM1MTEzREFBMTc1OTg4Q0VENUY1N0ZBMzdFQUJDM0IyCi06MTBENDgwMDA1QkJBMjAzREFBQjc5QTI4N0Y4N0Y1MjYzRThGRjJGQTJECi06MTBENDkwMDAxRTgzMEZDMUI4Q0I0RDkxMzYwMTFFNTVDOUEzQ0QwOENGCi06MTBENEEwMDA1NzM1MEEwNEFCREZBQjVFRkFENzJFODY2Q0RFMUY5NkNCCi06MTBENEIwMDAxNjAzREY2NzBERjQxQjlCODhGNkVDQ0NBQkQxODk1M0M4Ci06MTBENEMwMDAzNDc0M0ZCMzcwNUIwNEVFM0IxRjBERjFBNEUxMzk1RjkwCi06MTBENEQwMDBERjAzMjE3NjNDNTdBOEM2RDNDRTJDNENFM0Y3ODE2Q0YyCi06MTBENEUwMDAyREUxQjg1RjNENkQ2RTRBMTREQUI5QzMzNjhGMTlFQjgyCi06MTBENEYwMDAwRjM3MjVFMTkxMzlFNkIwRDkwNjIzRUMzMERFNENGMDQ4Ci06MTBENTAwMDAxOUU1MUMwOUZENjFGRTQwODFGMzRERDVBQkJCQ0RDOUNBCi06MTBENTEwMDBGMEJEREUzNzcxRkM5QzdCRURFODlFODE4ODBGRTAyMzM3Ci06MTBENTIwMDAxQkVBOUZDNDk2NzRCNEMzRDU4Njk2RjQwNEE0Q0ZDQkVCCi06MTBENTMwMDAwMkY5MEJCMDNFNzU2MEZFOTFEOUM4NTc3RDQxMUYyQTk0Ci06MTBENTQwMDA3QzM1N0JDQkI2NzkyODlGRDU2RjlFMUE4RTc4M0QzNzc4Ci06MTBENTUwMDA5QTk5MzEzRTU2QURDQzFGRDY4RkVGMTlBMTdERjVFNkQ1Ci06MTBENTYwMDBCNUMzMTk3RkZGM0RFNDNCRDVERTAzQkNEMDA0RjA1RUJDCi06MTBENTcwMDAzMzg3NzM2RUUyRkE3OUFGRDk0Qjc5RUZGNkRFQzUxOENGCi06MTBENTgwMDBFRDlGMTlEOTUwNkMwNzk0RTdGNzAwNDQ1MUI5OUY1NkE1Ci06MTBENTkwMDAxQjM3OEVFN0REOTNCNUU3RTc2NjYzN0Q3NkEwQkUyMzk0Ci06MTBENUEwMDBCRTE5N0I5MzQxQTFCMzg1RUNEMjU4QzQwQkMwREVBNTU0Ci06MTBENUIwMDA1QjIzOTAyRkNFQkRCNjdCQ0Y0MDk0OEJDRDgyOEQ2OUZGCi06MTBENUMwMDBFNTQxOTVDMzQ0MUZBRjA3RkMzRDgxRjhEQjdDNjEzODIyCi06MTBENUQwMDBFNkExOTg3OTM2NUM0MjFBQUE3ODUyRTU0REM1NEIwRDAyCi06MTBENUUwMDBFMzc4NTBGMTUyNjM1NEYwQTRENDNCMTUzQzU0MzExRkZFCi06MTBENUYwMDBGNUM3Q0VGNjk2MzY2MEZGNkZGRTQwRkI2REU3QTYzMEFFCi06MTBENjAwMDA4MTlGMTNFNjc5RDFENEY5QjlBMkY0RkJGQkY1Mzc3MTA4Ci06MTBENjEwMDBCRTlGQTRDQ0IzQ0FDNkVENjI1NTBDOTNFQUZCMTA5RjIzCi06MTBENjIwMDAzOUNDNkE3RTQ5Njg3MjZFRDMxMURERjg1NzI5NzJEMDAxCi06MTBENjMwMDA0QTZGOUMwNzhDRDM2QkUwRjcwNDgzRjVENzVDODVBRjBBCi06MTBENjQwMDA4RUQ0NEZGNEEwNUU5OTI5NDMzRkI5MjgwRkI2NDlCODRDCi06MTBENjUwMDBDRkM5NUUxNzE1RkQwRDM2NTNGM0REQTI1NzhFMTAxRjhGCi06MTBENjYwMDA4MkVFOTJBMjYwQ0Q2MkRBMDhFMzQwRkZFQjZDMEY4QTkzCi06MTBENjcwMDAxNzE2NzVGNUQyQkMzNzhDQjIzMTAzRTg5MzIzODIzNzg1Ci06MTBENjgwMDA3QzNCREE4Mzg3NDREMjUzRUEzODFERjI4NzQ0MEY0NzQ0Ci06MTBENjkwMDAxMzk3NEZFNDE3OEMwRkI2RUE4NUEwRjFENjJCRTNCNUFDCi06MTBENkEwMDAxOEVDNUUzQzE3Q0MxNjA4NzQ3RjRENUM3MDJFRkMxMDk1Ci06MTBENkIwMDBCNzc3MTQ0OTBDRjQ3RkNCN0JCODFGRTlCODE0MjEwOTY0Ci06MTBENkMwMDA1NDYzMzc2MkJCRDk5NzIyOTJEMTdFMUY1MUUyMEU0NzM1Ci06MTBENkQwMDAxNjZEOEIyOEQ3RDBFMUE5OEVCRUIzNzg4MDg0RjQyRjQ1Ci06MTBENkUwMDAwQTNCRjQzMENBRDE2MzRBQkJCRDY2RkJEMEY5QTgwRjMwCi06MTBENkYwMDAyRTQ3NDg3ODVFNkE2Rjk0OUM4RDdFRDQ1RTAzNUJDMjMxCi06MTBENzAwMDBBMjM4MUYxQUJCMDRGMDA3RjI0MkY4ODM3QUU5NDk1QjlBCi06MTBENzEwMDA0MDJFRDU3MTAzREQzQzQ4Mzc2OEVGRTA3MjY0QTc3RDg5Ci06MTBENzIwMDA4Q0Q5MzE3QzVGRjREQUYyRDRDRjRCRkFBOTVFOTBENjczCi06MTBENzMwMDBFNTA2REFBOUY3RjIxRTU1RTY0RDMyRDIyNTYwMEY5MEM0Ci06MTBENzQwMDAzRkQxREU1OTk0M0M0NkMxNzk1MDZGRUZERTM5MTFGMTdCCi06MTBENzUwMDA1NzEzNjYzNUUwMTIyRUI4M0UxODBFQUNBNzZBOERFODU2Ci06MTBENzYwMDBFN0IzODU3MTdCQjRGN0QyOEU4NkM4NzRGRkNDMTcyRkQwCi06MTBENzcwMDBCMjc1NDA4RkZBMDczRUUwRTc3OTc3RjA3QjVCQUE5REIwCi06MTBENzgwMDA4NkJGRTVBREZDMDdFRjU1RTY1RTE4OEVGQUY1QzUwMkRCCi06MTBENzkwMDAwQkRENkJFQURDMkI5OUJFNzM5QTM1OTkwQkQxRkU5RjlBCi06MTBEN0EwMDA2QzE5MUUyMTA1RDYyN0I3NUNGMjg4OTFFNDJGMjRFOTc1Ci06MTBEN0IwMDBENjA3NTU2N0RGMjM3OUFFNjYyRDc0MUY3QkNBRDIwMzY3Ci06MTBEN0MwMDBBMzA3MjBCRDVGMzJEMUY5ODE2OThENDk2NEU3NEVBRDcxCi06MTBEN0QwMDA5RkRBMEZFNzNCNjU1MTFBQzEzMzM2RENDRkUxQTUzQzM4Ci06MTBEN0UwMDBGRkUxOTQ0NTc5MkZBMEZGNzUzNEM0MzExQ0Y5RDlCN0Y2Ci06MTBEN0YwMDA0MkIwRTFGQTZBRDA4NkJDNDdFRTg1RkE0MUUxM0QzQjkyCi06MTBEODAwMDBFM0I4QkY1QTdGNzQzNEQyRkRBQkY5MjJFOTI3QzdGQUQ3Ci06MTBEODEwMDAyN0VGQzI3QUM3NzYxMTZGOENDMTdBQzZGNjA4RTYzNTUzCi06MTBEODIwMDA2NUM2NDgxQkZBMDVFQUY5QzIwNjEzRDdCNzY3MTVCREU2Ci06MTBEODMwMDA3MDRDRDExM0M3MTRGRTJCNkE2ODQ4NDc3RkM5QjcxNkNFCi06MTBEODQwMDBFQzExRUU3QjlCN0QxNTc0QkU1QkIwRDlENzAxQkY5Q0ZDCi06MTBEODUwMDAxNDY0ODI5OUNEOTY1QzVGODBGNzU5RDY1MDdFOUNGMzE0Ci06MTBEODYwMDA2OTE2MUJGQUM5Rjc1OTk4MURGRERBRkI3NkY1RTg4QkE2Ci06MTBEODcwMDA0QjA1ODdCMkFFMUExRENEQkZBQkUyNEJGREZFMTlFNURECi06MTBEODgwMDBCQjRDNUM1RTQxRkIwRUQxNTIzMkVBQjdCRENBQjlGMTY2Ci06MTBEODkwMDBBM0NBNzg0RjJEN0NFOTJFRjQwQjRFNkQ0QzhCNjIxQTg3Ci06MTBEOEEwMDBCQzlGNTJGMjM0Q0QwMDNEQjhCOTlERjU5RUZGMjYzNUEwCi06MTBEOEIwMDBFRUUwQTZFRjU0MkFGMUMwN0RBNkM2RUU5OEY3MzNGODQ1Ci06MTBEOEMwMDA3RUQ3ODlCNTIxNTZDQ0NGMUI3Q0NGRUI4NDg5REI4RkVCCi06MTBEOEQwMDAzNkY3QkRCNkVCRTFFMDNDQjdDMUUzNjk1RENGMDRERkVECi06MTBEOEUwMDBGRkVGMTVENkFFMUZBRkNBNTlGMEZCNkRFRTkzQTc1RUUyCi06MTBEOEYwMDBERkY5MkFDQzRCODZGN0JENzdERkM0RThCREExQTFGRkQ1Ci06MTBEOTAwMDA3QTAzRjU3NTQ1QTNDNTg2RjdFRjhGODU0OEI0MUU5MjU3Ci06MTBEOTEwMDBGMzk4QjQwMUVEOEM1NThBQzRGNUZDQjE3REZERThGQ0FCCi06MTBEOTIwMDA1RkM1OTc4Q0U0QUE2MjhCRThDNjU0QzVFRkFEQzg3ODkyCi06MTBEOTMwMDA3QzMwQzBGNzZGMzFEOUYxRkQ1MzJCNTdEQ0M1QzU0Qzk2Ci06MTBEOTQwMDA5RjY3MjE5RjcxRjk5QzBFRUIyNDhGMkRCMDJFMEE1RUVDCi06MTBEOTUwMDAyRkNENUNCNTg5RUUxMUZFNUNFQjI1MzU4RTE0OENFRjc2Ci06MTBEOTYwMDA4MjVFRkE3QzBCQzFGN0U3NzYwMURCRTRGNzZEOEJFRkEzCi06MTBEOTcwMDBCMzc1MkU1QTE3N0Q1QjU3NDk2NTQxRDNEQUEyMDQwOTY2Ci06MTBEOTgwMDBFRjUzMUM3OTZDMTBDQTRENzgyNEM1NDNDRUQ2RDVEMjNFCi06MTBEOTkwMDAyNkRFQjdEQkZCNURDMUZCQTE2Rjg3NDVEQTUwNUY3Q0ZDCi06MTBEOUEwMDA1QjM3NUZCOTVDQTBGMDg5QzI5N0I3NkM2OTE2MTMxODMyCi06MTBEOUIwMDBCNURGMzEwOERBRUYwQzhCQTRCQjJFQTk4RUZDNDhCNDdFCi06MTBEOUMwMDBGMzJBNUQ4M0VGMzdBQkYzM0JGRDEwQTdBQjNBREVEMzExCi06MTBEOUQwMDAxQkE3NDZBMERGRDlCQzNBN0E0NzAxRjQyNzg3NDZEQTZECi06MTBEOUUwMDBEMERGOUVBRTlDN0YzOUJFOEFFQjlCOTNENkM4MTc0NjhDCi06MTBEOUYwMDBFMUY5OTkzNUUzQkJFMEJBRUU3RTkzQ0Y2Qzg3N0VFRDFCCi06MTBEQTAwMDBFRjk0NDRFMDdBRkYxQkEzMzcwMkVGMUI3RjAzRUQzRDQ5Ci06MTBEQTEwMDA2ODI3OEM2RTExRjVEQ0MwNjI0NkZCNzgwMzNENDYyNjE0Ci06MTBEQTIwMDAyNUQxOTYzOUYxNDVDMTU5QTMxQkU5N0FDNjczNjlGNzI3Ci06MTBEQTMwMDA1NUU0QTNCMzA2OEE3NzAxNjY3NjVGODVGNkY2RjA5RTE1Ci06MTBEQTQwMDAxNDI3QkNGRjJEQkVERTY0RkZFQUM0RUI4M0VFMkQzRTNGCi06MTBEQTUwMDBEMThCRUJBNTEzNkJERTE4NDNFQkYzRjUyNjFCOEVGMzhFCi06MTBEQTYwMDBEQkY1N0ZFRDgyRTc3MDY2MzI3RUJFRkVFNDQ2ODFFNjNFCi06MTBEQTcwMDAzMTEzRjgzMTI0MDlGNTAzOEY4M0NFMDRCRDZGMTVEQTE1Ci06MTBEQTgwMDBGMjYxRDFDNjdBRTJDMzk5QzA4NzE2RjREMzFDM0MxRjU5Ci06MTBEQTkwMDBGMzRDQ0NDNzJDQjEzNkY5M0YzQTJCN0MzNzBCRjgwRTQwCi06MTBEQUEwMDBFRkVGRkVEQzc5M0Y5NkY1MEEzRUI3Q0FGOTUwQTVCQjA5Ci06MTBEQUIwMDA4QTE3OTVGRTAxM0U2NEJBRkM4MjUxNEQ3RDBBMTM1OEM3Ci06MTBEQUMwMDA0MDFGQThGNzNCOThEMUJCMUNFRjY5Q0MxM0MzMUIzMTk3Ci06MTBEQUQwMDA1RkQ1N0U2M0VEMUYyODZGOEI2QzY0MUJDODlFQjM0Q0IzCi06MTBEQUUwMDBDQzk3Mzc0RkJDQzk4RUYxQzAwNjczNkQ2QjVFMTdBQzE3Ci06MTBEQUYwMDAwRkNFRUIyMjg2RjFGNzRCMzAzRjMxQ0MzNzJDM0I4OUYwCi06MTBEQjAwMDBCRTM3Q0U2NjFGODZFODM2QzU3ODI5MkUyMDE2MTkxQzJBCi06MTBEQjEwMDA3NDJGQUZDMTQyRUJFNjYwM0RGNDhBNDJERjNCRDA3NzIxCi06MTBEQjIwMDA0MEJGQTcxNzNGQUZBRERFRkI1MzRCMzAzNDNEOTBERjE2Ci06MTBEQjMwMDA0QjQyQTMyRTRCRDA2NEZCMkI5RkRGODlGQkI0MjU4Mzg0Ci06MTBEQjQwMDBBMjdFOTEwMkRGNkZFRTc1RTQ0RUJDQjc1MUQyMkY2QTEwCi06MTBEQjUwMDA2QjMyQzBCQjVGRjkzQkFGQkYzOTJBQ0Y4NDdFODBGMDA4Ci06MTBEQjYwMDBGNTlENDNEMTZGRUNFNTc4QjM5N0U2M0I2QUJGRjBGQ0Q3Ci06MTBEQjcwMDAyRDdDRkU3OUEyRUI5RDVFN0NERkI0MDJFOTdENUU4OEEwCi06MTBEQjgwMDBFMEY5REU1MjdEMTQwNzU1REZGQjU4NjA4N0RGMTYwMjhGCi06MTBEQjkwMDBCMEQ3QzQxMjMxQUZDMURFNUU1QzlGNzY1NEM2NjQzQjIxCi06MTBEQkEwMDBGNkYwRUZFQjlGMjM4NUJFQzM3NUE2QjJGRjYzQjA0QUM0Ci06MTBEQkIwMDA2NkY0RkY5Qzc2QjM5REU3NTc2NDRFMkJGODU1NjMxNUNBCi06MTBEQkMwMDBGRTJEQjc1RTE5NEFGNkI3OTZEOTJEOThDMDY0ODlGRTI2Ci06MTBEQkQwMDAzRTU2NTZFMERFREU5QTFCQjlCN0M3NjQ5RTg3QUY0MTVBCi06MTBEQkUwMDBDOUMzRDdEMTNENEE2MUM3MDczRkEwN0YxOTdDN0ZBQTJGCi06MTBEQkYwMDBERjVGNUFERTQ0M0UxOTAzN0M4NUY2MjJCNzg1QzM2Mzk2Ci06MTBEQzAwMDAxNTNFQTlERTM2OUFGMjNEQ0ZGOUQ4RTQ0NjNGNjE4NjRCCi06MTBEQzEwMDBFMjhGQTVCQTNBMzEwOURBNUQwNkY5NDVCRDcwNzY4QzE2Ci06MTBEQzIwMDAyNzFERjVDNzg5M0FENjk4OUE4NkYxMkE5NzBGRTlCMjQ3Ci06MTBEQzMwMDAzN0U5MDNDQThCNzY2MjRENDMwNEZBM0RFNzYwM0QzMTE0Ci06MTBEQzQwMDAwQUJBQTg1MkZDN0I3NjQ1RjREQzg2N0U3MDUyRDZCQUJFCi06MTBEQzUwMDA2NTFBN0VGQkExMTdCN0ZGNjc5MzNDODlCOEJFOTE5MzA1Ci06MTBEQzYwMDAyQzNDNUZFMzk1REQ5NEU3QjkzODc5NDQxRUM2OTFGNjA0Ci06MTBEQzcwMDBENzZENjc0N0QzMDJFRjc1NzQxRjY1QTA2MTA4Q0JENkQ3Ci06MTBEQzgwMDBFQzRCOEUzMUI2N0Y0RUUzQTQ5QTRGNzMzREI3REYxNjRGCi06MTBEQzkwMDA2MzIzRTVEMTAyNTJENkQ2MTNFQ0E0Qjg1MjFDRjIyODY1Ci06MTBEQ0EwMDBDNjg3QTUwNzA5NUUzQzgzRDlFODFFNkI2MDlGOEVFRTkwCi06MTBEQ0IwMDA4M0FBRjQ3N0Q4QUYwRUM1NzY2MzgwRkVBODZGMEM1NkEyCi06MTBEQ0MwMDA5RjExNjE2NzMxM0Y5RjkyMDU4NDQzN0RBMkQyN0Y5ODY3Ci06MTBEQ0QwMDBGOEM4NjM0ODg3MzlDQTNEQUUzOTQyMkQ4NzRENTYzQTU4Ci06MTBEQ0UwMDBFNzFBQUMxRjMxQUU1OTQ2N0E1M0RFNTM4MEZFMThFODZFCi06MTBEQ0YwMDA0OUNBQUJBMEU4NDUwOUZFNDc3OTkxRjJENzlBQTlEOTVDCi06MTBERDAwMDBCNUYzMjJFRDI5RjgwRkY0NjM0RUI2M0U4RkI4NEEyN0RCCi06MTBERDEwMDBENUJGRUE4ODRFQUE5RTA0N0FGNUJGMTE3QUE5NzlDQUJFCi06MTBERDIwMDBFNjNDQ0JFMzlENzM5RTlEMUFENzk3RjAwNjEyODdGRUMzCi06MTBERDMwMDA1MERDMUYyOUFFMzI1RDk5MDM1QjEzNEQ3QzZDMUFFMkY3Ci06MTBERDQwMDA5NDUwREY4RURFOUVDMDI0NzgzNDYzQkI0MEU3NUI0NzhGCi06MTBERDUwMDA2RDhGMjYzOEMyMUZDRkYzMkEyOUY2N0VGNDhCNUQ4NzlDCi06MTBERDYwMDA2MDdDRjJENDBCNUZDQ0M1QkNGN0EzN0VDMzI4N0U2QzZECi06MTBERDcwMDAwODBEQTM3QzEzRTIxMDI1OEY4MzE4RjYzRURFNjNCREU5Ci06MTBERDgwMDAyODE5NkJEMTVFMzk1OTlCRkMwMTA2QTJGRjVFN0U0RUJECi06MTBERDkwMDAxNjU2NzkzMkE3MTNCRkY3Mzc2NzFGQjdGMzczMEFGOTFGCi06MTBEREEwMDBCRUUwNDU3QzAzREE1RjJDMTUyOTRGRDNEM0ExMzlFNEJCCi06MTBEREIwMDBCRjM1REM2OUEyRkIxMTRDNzY3QzgyRUJBQTA5MEEzRkQ1Ci06MTBEREMwMDA1OEUyNjA2MUE5QTE1Nzg4MDRGMkFBQTFDRkEzMjE4RkNDCi06MTBEREQwMDBCREVGODJGRUJEQjBFRTEyQkE4MTFGOUIxOUE1QUIzNzE1Ci06MTBEREUwMDBDQTIxREY2MEZFNTg1MzlDNjg3M0MzRjhDM0VEREQ3NDJECi06MTBEREYwMDBGRDM5QzUyQTEzQzY1Mzk4OEJGQkQxMkE3RjMxRjFBQzZDCi06MTBERTAwMDA5MUVFQ0QwRkU2RjkyQkVFOUNBMEJGMjc2OTFBN0M2MTNECi06MTBERTEwMDAyOEQ5OUJDMTdBRkZEQjc5OERCQzRERjM1NTdFQ0E2MjUwCi06MTBERTIwMDA1OTRBNUU3QUIyRkYxNzBGRjJGQjIxMTI3M0FFNTJFNTI4Ci06MTBERTMwMDAwNUY1M0Y3ODM3NEYyMzdFRUVEQTZCNjI2RTg5RjBGNzk3Ci06MTBERTQwMDAxQUQ2NUY5NDJEMzY4QzA3QjRGQUUxQTlGMDVFMEMxQTRECi06MTBERTUwMDA0OTJCRjEzOUU2MDVENUNFMTNGMzgyNkFGMTgyNzk0MTc3Ci06MTBERTYwMDBCNTMwRTYwNUQ1QjZDN0JDQTBEQTdBQ0MwQkFBQURDN0VCCi06MTBERTcwMDBCQ0EwNUExOEYzODI2QURCNjM1RTUwMkQ4Qzc5NDFCNUUxCi06MTBERTgwMDBFRDMxMkZBODE2QzZCQ0EwREFGNjk4MTc1NDVCOEY3OTJGCi06MTBERTkwMDA0MUI1RjU5ODE3NTQwQjYzNUU1MDZEN0JDQzBCQUFBRDYyCi06MTBERUEwMDBDN0JDQTBEQTdBQ0MwQkFBODUzMTJGQThCNjNERTYwNTBGCi06MTBERUIwMDBENUQ2NjM1RTUwNkQzREU2MDVENUMyOTgxNzU0REIxRTdFCi06MTBERUMwMDBGMzgyNkE2MUNDMEJBQTZEOEY3OTQxQjUzMEU2MDVENTM2Ci06MTBERUQwMDBCNkM3QkNBMERBN0FDQzAzQUFBREM3QkM5RjVBMThGMzY4Ci06MTBERUUwMDA3RTZBREJCN0IwODU2OTY4QzdERTRBNzJFRENEOEVDNTQ0Ci06MTBERUYwMDA3REE3OTNDNENGODdFRTAzN0U0NjM5REMzQkRFNDZGOTJGCi06MTBERjAwMDAwQjZGNzA5REQ4OTJBREFDNUIxNEZFQkRDQ0MyMjZFMTA4Ci06MTBERjEwMDAzOUY0OEVERTU3RjlGMzI1N0MyNzhGRUNDMTEyRTI1RkNFCi06MTBERjIwMDAxNkRFODhGRURDQTM0NjA3REQ4NzkyOUJGOEZENDQ2NjdCCi06MTBERjMwMDBFNDdFQzAzQzUxRjE3Rjk0QkMxMEYzNDQ4OUZDMDBDQ0RBCi06MTBERjQwMDAxRDZDRDQ4Q0E3QjNDM0NBOEMxQTNDNDQxN0RCNzQ3MDA1Ci06MTBERjUwMDBBQzMzNEVEN0JFRUIwNDQ5NTcxRkVGQ0FENEQ1Mjc1NDc0Ci06MTBERjYwMDBEQTc1NzA4RkRBN0M1REZCOUVGMzFEM0EzODQ5MkVENjQ4Ci06MTBERjcwMDBCNTRGNTlFMkQ0QzE2OThEMTM3NEVEMzM1NkI5NzRGNUI4Ci06MTBERjgwMDA1OUVFNEE1RDdEQUY4REI1M0FCODc3RDM3QzVERkI5QjhBCi06MTBERjkwMDBCN0NCQkFGQTNFOUUyNUJBRkE3RTdCMUI3NTcwNUVDQjc0Ci06MTBERkEwMDAyQTVERkIwMTg3RENCQUZBMDJFRjQ2NURGREEwOTM0REM2Ci06MTBERkIwMDAzQUY4MTZERjc2NURGQkRCRkMxRTFENUNDOEY2RTlEQTdECi06MTBERkMwMDAxNzU5M0ZENkMxQzM2QzlGRTlEQURGMUU3NzQ0NTczRjJDCi06MTBERkQwMDA0MjNBQTVBQkFGM0FDM0ZEN0JENjAwRUIwMzhDNTM4NjI4Ci06MTBERkUwMDBGMUZDMUFCMzNEQUMwOUZEOEI5MTk5MTc3NEVENEQzMURECi06MTBERkYwMDBCMDVFMDBGRUE5MDY3RDg4N0VERkY3OUQxMjI5MUYzM0UzCi06MTBFMDAwMDBBQjhEQjBFM0JENkY3OTQ4RUQxRkI0RjdCQzQ3REI3RjQ0Ci06MTBFMDEwMDBEMDdERkZFOUQwMDg0RjA4QUQyRkFDNjQ2RjZGRTlDRDFDCi06MTBFMDIwMDBFRjlCQjVFNjEzNTFFRkIzMzMxRjhCOEJBMTkwOTAwRjhECi06MTBFMDMwMDBGRDIzMDE3RjYxMDlFMDA4MDdDRjBCMEQ3RTEwRjk0RjJBCi06MTBFMDQwMDAzNkYwOEJEMERGNkM1RDE3MTk5MjkyRDAyRTg3MDZGQ0NDCi06MTBFMDUwMDBFMkVFNTczNTc5NUVBRUU1MTc4RkM0NkZFNzUxOUU1RUVECi06MTBFMDYwMDA0NzZGMjg2NzM2NkQxQThFRUJBQzE5NEM1RThDRkI4OUI2Ci06MTBFMDcwMDA2QTlFQzVGRDIxRkFGODk2NUE4RUIwMDI3RTM1REZEQjI2Ci06MTBFMDgwMDAxN0QyRDhCREVGNEZDOEZCMDhFQjU5NkFERkRBQUYxMkUxCi06MTBFMDkwMDBGRjEyNjBCMjczMzRGRDNGMDZFQjNGMjNDODc1NjMxRDZBCi06MTBFMEEwMDBDODFGRjg0MzRGRDREOTA4NUU1OTE3NDdGMDUzNzUxMjZCCi06MTBFMEIwMDA5NUFCRUEzMkE5N0NBNkNFNEVGNTZCRUFGMjA5N0VBRUFDCi06MTBFMEMwMDBDRTQxQjBCQkFFOThDQTc1NzU0RTdBQkVCRTZFMDJDMTY3Ci06MTBFMEQwMDAyRkQ0QjlBOERDNTg1NzQ5RTVDQjc1QjU1NEZGNkFERDk0Ci06MTBFMEUwMDA3QzgyNUZBRjkzQTk2Q0FBNUI0MkNGMzdENzM1MTJCQzU1Ci06MTBFMEYwMDBBNTZFMTVDMTZGRDZCOUE5REM1RUI3OTFDQTNGRDUzNUZCCi06MTBFMTAwMDA1MUZEMEVGMERGMTBERTU5RTcyMUQ4NTNCNzk3RTA3N0M1Ci06MTBFMTEwMDBFQjVBMDg3RUFGRUUxMEMxN0JFQUJDNTRFRUFEM0I0OTMyCi06MTBFMTIwMDBFNTlGRUI3QzU0RkY5NzNBM0ZDMTY3OTU3RDg4NzlCREE5Ci06MTBFMTMwMDAwNUREN0QzQzE1MzZCMjYzRENERkMzQkMxNTk4ODcyMTU1Ci06MTBFMTQwMDBERkY0RUQ0RkU1QzcwREE2QzM2OUE1N0ZEMzEwNzA5NzI3Ci06MTBFMTUwMDAzMDhFREMyRDdENUQ4MzY2NUREMUQwOUJDNzJERUIwREIwCi06MTBFMTYwMDAzQzdGNEI3RDM3NjY2QjIwQkZEREMxRjgzOTJERUVCN0E0Ci06MTBFMTcwMDA0RkM3N0Y0OUYwMzRBNjZFMEZBRTM3MkE2QTc5OUVGMkY4Ci06MTBFMTgwMDAzQ0U0Qzc0Q0UyQzdCRkRDRDAzQTRENTkxNzZDNEU3MTI2Ci06MTBFMTkwMDAzRTgxRkNDOEMyREM5RjI2RTUwNkVFRDExRjQ4NzFGRDFBCi06MTBFMUEwMDAwRTlGNUZBQ0JEN0YwRkI2OUU2RUIzQTdFMzQ3NDY1Qjg1Ci06MTBFMUIwMDAzQ0IxOThGRkNCQjc0RkI0QUY5MzNBRkU1RThENzJGRjgwCi06MTBFMUMwMDBBMUMzRkE5REE3QkFBM0JEMkFGRTUxQTRCOEZFN0U1M0VGCi06MTBFMUQwMDBGODA0RENFNzdGNTFDMUM3OEJCRDBEQkFGMkVFNTRFN0ZFCi06MTBFMUUwMDAwQkJENzE3RjNGQURGNjg1MDc4NUMwRkRGREIxQjhDNDlECi06MTBFMUYwMDAwN0Y5MkU2MTEyRTVDMTE5Q0YxQ0VGQTMwQjdFMjczODVBCi06MTBFMjAwMDA4MjA4REZDRDY0MkE0RjI0QkJGRTg4RjNCOTA3MTYyMEFECi06MTBFMjEwMDAwOEJCMDY1QTEyREI5QjRGRjA3OERFNTJDNkYzOTYzMkVCCi06MTBFMjIwMDAwRUI1OUM5M0VBREM4RUZEMUQ0QjczRThDNkYzQTI5MkZCCi06MTBFMjMwMDA1RjY4MENGMzNEODdFM0ZBQzczQjE3OEUwQjI5MDE3QzFGCi06MTBFMjQwMDBCN0M2NTM1ODJERTVDOTI4NjMzQzlFRjIyOEU2QzU4ODE5Ci06MTBFMjUwMDAwOUU0QzU1MEQ3MEY2NUZCRjhFRjFDRDExRkRBQ0Y3OTYxCi06MTBFMjYwMDA0OUI0QkUwRENFOUJCMUI4NzAzN0NGODMwMUVCMzFCQzQyCi06MTBFMjcwMDBGRjVCRjZDMDJGNDhGRkUyRUY0MUUxQkRERDc5OUQwRTY3Ci06MTBFMjgwMDA1MzlFMTlFRjBDRTBENTA0Q0FBQkMxRjNERUI4MDA4MTkwCi06MTBFMjkwMDAwOTk0NTc4M0VBODU5QkUwRkZGMTM4MkU2QkE2OTFDNjVGCi06MTBFMkEwMDBENzg5RjI5RDNDMURCQTlGRjJEMjYwNENDMUQyMTlGM0JFCi06MTBFMkIwMDAxRTI3RDEzQ0Y3M0IyRjcwQkYzQkM2NDdGNzUzMzdBNzBDCi06MTBFMkMwMDBCOEJFRUFDREUzRTQ0RkY1QzMzODExRjIxMzdFQzdFNkRBCi06MTBFMkQwMDBBNkYzNkJDMDRGNjYwMTUwMzQzRDA2RjhBOTFEN0Y0MzdECi06MTBFMkUwMDBFNTlCRDlDQTNEMUNGNTM5RjBFMzA5QzRGN0I3NkYwREJBCi06MTBFMkYwMDBDODQ0QkVBOUQ5NTkyMDIxQkUxQjBDRkMzRTlERkM2NzE5Ci06MTBFMzAwMDA2NTVGNTBGOTNEMDQzMTMyN0IyREREM0I0MDY3MUNFOUYwCi06MTBFMzEwMDA1QjEwNEVGNzBFOUE0NTM2N0Y1MzNCRkFENTlBQzNFOTA4Ci06MTBFMzIwMDBCQzNGOEVFNzkzNkMwOERBOUYxNDcyMzhERDA1QTVERERCCi06MTBFMzMwMDBFODc3Rjc1MTFFQjJEOTdCNzlCQzlBRTU3QUIzOURFREE3Ci06MTBFMzQwMDA5Q0NCQUE5OUZGOUJBNzUyMzVGM0E4RDk3RTg0OUZFNzVGCi06MTBFMzUwMDA2MkRFNkNFRDM5MkU0OUU5NTdFNTNGRDExQ0VFNUExQkMwCi06MTBFMzYwMDBBNjFENUZBQjFDNTg3MkYyNDgwRThFRTNCREVFMzExNjRGCi06MTBFMzcwMDAyOUYyNkU4MTdFMUZFQzVCQ0MyRkUzRkE4MzhEQ0UwM0Y2Ci06MTBFMzgwMDBBQUU3MDJBNzMxMjc5NUQzQzE3MjIyREYzQkU1MTU3NEI2Ci06MTBFMzkwMDA3RjdFMjY2QkEyRTdCM0YzQTcyNjIyNUNDMzdDNDNFMzEwCi06MTBFM0EwMDA3MDdEQjRBNEZFN0QwQzA3OEQ2RjVDMzEyQzFFRTYzNUFDCi06MTBFM0IwMDBDRTNERTU3RDJDNEJENjBCQzc2NTg5RTQyODBFQkZFRjFCCi06MTBFM0MwMDAxNTZBMTc3NTgzRUZEREZCNkFFMTIyOEM1QjhGMTEzOUNCCi06MTBFM0QwMDAxREQ4ODc5QzBFNjVDMENGNjI1NERCRjk4MURDRjRDQzdDCi06MTBFM0UwMDA4OTI1QjlBMUYxQUI3MjUzQjY4MDM5RjBGQzgxN0EzRjJGCi06MTBFM0YwMDBBNDU1OEVGMjY3RkQzRDAxRjc3MEMwOUY0NDdFQUREOUY0Ci06MTBFNDAwMDA2OTg5QTJGNTI5RTY5OTQxN0RBNUM4Q0YyMjIzRjcyRjc2Ci06MTBFNDEwMDA2NTRDNkQ0QUZBOTNGQjFCMjY4NzkyQ0Y4QjcxN0Y2NDA0Ci06MTBFNDIwMDA5NkNDRDc2M0E3NEQ1Q0RFNEU3RjE1RUU0NkZFOUVENzk5Ci06MTBFNDMwMDBFOUY1NDQ5MjBGOTMyQTFGM0Y0RUEyRjMzRDBDRkM4RjQ3Ci06MTBFNDQwMDA1QkRCRkExRkFENzk2NkJBMzNGMjM3NThBMjJCQUU2Rjk5Ci06MTBFNDUwMDA0QUMwOUU5RjM2QjhGQjQ3RjBCQ0ZDMEVDNEQ3OUUzODFFCi06MTBFNDYwMDBCRTdFOUU4NTc5NjhCMEJFQjM1M0MyNzhFOUU5NTgyQjY5Ci06MTBFNDcwMDBERDE3MEFDRTczQzY5ODlERTY2NzUyRTYwNzIzOUI4MDk4Ci06MTBFNDgwMDBGRUI0NDU4OUFCMzUwNENERjdGQjkwNDQ5QUFGNTRDODMwCi06MTBFNDkwMDA5QTE4M0ExNjQ2OUIzQzE1RTVGRTQxNkUyN0U2NzVGQTNBCi06MTBFNEEwMDBCNTBCQkZFRjBENjEzNjYxMTBDRDg3RTJCMUIyODEzOTk2Ci06MTBFNEIwMDAxQjc4N0M5NkU2MzdERjY4QjVFMUI5OUNDNTUzNDRBRjVECi06MTBFNEMwMDA0MDc2MDJDNjg5RjFCQzE4QUI5REU3NTU1NUYzNkYwNzNFCi06MTBFNEQwMDA4RkQ3QTExRjlGMzU5MUUxRkMxQzIyRjM4NTBDRTJFMzRECi06MTBFNEUwMDBDNUYxQzk0MDBGQTIwRkMwNTMzNEUzODM3RUREOTRGRjEyCi06MTBFNEYwMDAyNzU0QjJBMTFGQjZGNzVGMEZGMkY4NzIzREY3MUY2MTA0Ci06MTBFNTAwMDBGQzFCODkzRUYxMzBGRTg0NkI4RkRGODQyQzBBRTM5Rjc1Ci06MTBFNTEwMDA5M0MzRjU1NDAzRUUyMDhBNjg2NzNCOTNGRTJEMDk3MTdGCi06MTBFNTIwMDAzRTgwN0M5OEVBNUFENjdEMEVDNjM1MEEyQzc2OENERjYyCi06MTBFNTMwMDBCMTJCMERERDUxNEY4NTMxODlGMjZBOEQ3MUYwQkM1QUQ2Ci06MTBFNTQwMDBEMERENDJFNDg3MTJDQzVCNjcyMzNGRTBBQzM2MEYxQjgzCi06MTBFNTUwMDAwQjhBQUYwMTU5MjhCRTNBMEVFMzZCRkMyRUQxN0IxODEzCi06MTBFNTYwMDA5RjFEQUY5QzZGQ0U2MjVGQUFGOEEzRjg5QTg4RTNBM0MxCi06MTBFNTcwMDA3OEI1OEJDNjY5NDFDQTQyMTk4MjcxMUVBMjgzOUJFNjk3Ci06MTBFNTgwMDAxMUNBM0M0QTNDQkI4NUZDODMxNTBBMUYwRTNBQzRGOUVDCi06MTBFNTkwMDA3MDUwMThENzc3M0I4RjMwMzc5RUZCNkFGRUUxQUVBMkYyCi06MTBFNUEwMDA3MDg0MkYxODQ5NEYwMTlFMjgxRkUwREI3RkU1NzFBOTc5Ci06MTBFNUIwMDA5REU3OEUyN0UwM0U0Q0ZEMEY3QjEyRDA0RkRDNjk3MjQ5Ci06MTBFNUMwMDA4OTM1MzBFRTlEMDUxNkRCMDI3QjIwQUVCMUUzNTAxODk1Ci06MTBFNUQwMDA4RkVCMjg3MUJFNUI5NDc5RUU2MDJEMEQzNTUwOUYxRjM3Ci06MTBFNUUwMDAyRjMyOEMwM0U2MURGNDg0QTIzQzBGNTRFMkIyQzFGQTMwCi06MTBFNUYwMDA3MEYwMjVCM0VFNzcyRDRDMzYzRDlDQ0YzNDcwMTI4NkVCCi06MTBFNjAwMDBDODgyN0VGRkYzMDZEN0I5QUZFNTc0RjBCQjlGMjc2M0RFCi06MTBFNjEwMDBBRTZCM0YxNDdGQ0I4N0NFMjdFNDM4REZDQzIxQkIzNkVGCi06MTBFNjIwMDA0RTU0RjAyRTIwQkU0MDBGMzQyMzlEOUZBOTM2RDNFRkM5Ci06MTBFNjMwMDAxQTM0NTc5QkUzQkQ5QUYxMzVDRUY4NDcwMjlENzNGRTFECi06MTBFNjQwMDBENzNGQzg2RUVEQ0E1M0YzRTMzNDg1RTA3M0IzMUM0RTc1Ci06MTBFNjUwMDA3MUI3NjdBRTE4MjhFRUI2QkFGMjZCNUE5RjM0RTYzMzNDCi06MTBFNjYwMDBGQTFEQjFDNjJCRTVFNDA3NUMyRTY2Qjg4OUM0RUE2RkQzCi06MTBFNjcwMDBGRDNGOTUwODNGN0U4Qjk1QkUxNzNDRkU2REUwQ0Y3QjNFCi06MTBFNjgwMDA4MDUwNUJDMTlGQzdEMjBERkVCQzI3MDNGREY0MzgyQTIyCi06MTBFNjkwMDBENzgwM0Y4RkU1MzNFMENGNjNGRDJBRjBFNzExN0UwQTk0Ci06MTBFNkEwMDBGQzc5MkM1NzgyM0Y4RkNGOUYwMDdGMUVFMTc3QzA5RjYwCi06MTBFNkIwMDA0N0Y4NkRGMEU3MTE3RTBCRkM3OTJDMUJBRjdDNTI0OEJDCi06MTBFNkMwMDBFMzlBQ0JFOERFRkU4MkQwODhBNUU4Njc3NDkzQzNDOURECi06MTBFNkQwMDBERkY4QzhEMUI3OTM1NzYzNjdGM0JGMzRFOEU4RENGRkNFCi06MTBFNkUwMDA2MDI3RERFRjlEMjRDOTUxNDFCRjQ3RDMyREU4Rjc2QTZDCi06MTBFNkYwMDBGNEJGNkY5MzUwQTlGRjdEOUI3ODU3REZBMERGQzMxOTRDCi06MTBFNzAwMDAxOEY0N0IzOTQzODI3RTRGNDdGRkZCMzZCNzVFMUFBNzZBCi06MTBFNzEwMDBBQjFGN0M1NkZGRkIzNjAzOEY5NUVCRTBDNzk1N0M5OUNBCi06MTBFNzIwMDAyQTFERDNBNUQ3NDI5MDJGNTY1NzhFOEI2NEVERjgxNzJDCi06MTBFNzMwMDA2QTg5RUIyQjhGNjY3RkY1Qzk4N0M0MDlFREM1OTEyM0U0Ci06MTBFNzQwMDA2RkU2RjZGRUREQUYyQ0ZCRDYwMzNFNzdCMTQ4MjdDNjU5Ci06MTBFNzUwMDBERDc3MzkwQ0E0OTc5RTU5MTU0NjcxNTg4Qjc3RTAyOUJGCi06MTBFNzYwMDBFNDlGNUQwRTI2MjFGRjNDNzM2NTQ4MjcxQzRGMjE5MEQ2Ci06MTBFNzcwMDAxMTlGMjc1NDcyQkREMEVENjY4OUY4MzlBMUQyMjdFMkU2Ci06MTBFNzgwMDA3REQxREJBRUY4RUNDODhGNEY0NkYwREZEOTgyN0VERDVECi06MTBFNzkwMDAwQkEwQkY3NzQ3RjdDRkMyMzhDRTMzNjFDMENGMjg2RjA5Ci06MTBFN0EwMDAxRTVGNjgyQUMwOTE1NzBEMENGNTIzRDg0QUNBRjMyRjczCi06MTBFN0IwMDBGRjNFNEMzOThGN0E5NUVFQzM0NUEyNEUwN0JEQjRBQkYwCi06MTBFN0MwMDA5MjdGM0ZERDdCMjU1NEVCMEYzREZFRTNCNUYwQzI4ODIxCi06MTBFN0QwMDBBRjNBQUNCRjYzNjYzMjhFMzc4MDc3NTA4RDUwQTZCM0E4Ci06MTBFN0UwMDA0QUY2MThFMkEzOEFDQjRGNjNBNTgxRTRFOTMyQzgxMzQ1Ci06MTBFN0YwMDBFMjA3NjY0RDc0NjE3ODM4MjE1RUZCM0RBQjlFMEU1NTk1Ci06MTBFODAwMDBDOTRCNzE5RUNGQUMzNEQyNkVEOTMwRjFENTdEMzdDM0IwCi06MTBFODEwMDAyQkFCMEY4QUI0Q0QyRUQ5N0NBMUVERjk3N0VBQjg1NzhFCi06MTBFODIwMDAzQkY4RkNBMkVDQ0M4MDc2MkUwQUYwRTlBNkZENkM3QkNFCi06MTBFODMwMDBCREY2RjdBQzdFQUZDOEU3RUZGMEZCRjBERUQzMEEzRkUyCi06MTBFODQwMDBBQzU0RTQ3Mzk4Qjg2NjQ0M0E4RTIzOUZFQjZCQTBBNzUwCi06MTBFODUwMDA4MEY3QjEyRTRGNjNGNDNCQTJCRjJCNERFRUQ0NUU5RUVBCi06MTBFODYwMDBFRjk1Q0EzODlFNTNFNkI1NDY5MUZCNjdCMDVGQkNDN0NCCi06MTBFODcwMDAyRTk2MTU2MjNGQUI5RDhDRjRGODZBQzdEN0Y1MThCNzkyCi06MTBFODgwMDBCQjVDQ0FGQkVERjk4ODU3NDBGQzc2QUZGNTA5RDg3RjMxCi06MTBFODkwMDA4RkI5MUUyQUREQ0EzOEJCNTVCNjUwQkREQTlGNjQ3N0UyCi06MTBFOEEwMDA3MzdFQUZGQTlBRUQ4NUY5RTIyMTVCOTFFQ0M1NTlDQTA2Ci06MTBFOEIwMDA4RkJBREE2ODY0Njg4NzUxOUYyMTdDRDk2QUM0MzMxMkExCi06MTBFOEMwMDBBQ0RCOEM2MzBDRUYzMzM3ODYxOTY5OUY2MkY1RUNEM0IwCi06MTBFOEQwMDAwNEFGQjA3MTM4NDJBRUNEQzZGMzE3NkYyOUYzODk5MEZCCi06MTBFOEUwMDA2NTgyREQ0MUYzNDk5NzI2NDc2QTdGQ0ZGNTVBN0FGMDcyCi06MTBFOEYwMDAyRDkzQ0I3MDExQzYzMUUwNkYyMkZEN0U0NzQ3RUZBOTAzCi06MTBFOTAwMDA3NkY2NUFGQUVBNEZGODhGNzhCMjBCMEZERDhDRUI2Nzg4Ci06MTBFOTEwMDBEOTQ5NzY0MTVEQjc2RDFEQzVENzZEMkI0MjI3N0Q4OERFCi06MTBFOTIwMDBFQkZFNTI4NThGOUUwRTFERjMzRUQ2MUYxOEMxN0YwNzRBCi06MTBFOTMwMDBBNzc5QzRFRDNEQjQ3QTcyQkIzMkVFNkQwQURFMEI4RTYwCi06MTBFOTQwMDAzOUJFOUEwQkVGOEY3NDVBMTg5RUZCMTgyOTNCN0FGQzNDCi06MTBFOTUwMDAwMkUxNTEyMkU1MzUxRkMwMUExQkYwNUNDNUMxM0M1NUQwCi06MTBFOTYwMDAyRTlDQTEyODdGRUY4RTlBQ0EwRUUxNzc4QUI5OURERjhGCi06MTBFOTcwMDA1QTNDOUU5RTRCQ0MzOUIyMzdCQ0ZGNDk4QjkxRkMxQTU2Ci06MTBFOTgwMDA3OEZFOTM3MkI5NEYxOUNGMDcwQTFFREY1N0U4QjA1QkM0Ci06MTBFOTkwMDBBMTQzMzNEQTEzMjg3N0ExM0QyMTdCNjE1N0VDMDVCN0ZBCi06MTBFOUEwMDAyN0RCRDA5RTY0MjAxREI4M0Q2OTQxN0I5MjgxRkI2RkJGCi06MTBFOUIwMDAxM0E4REQ1RkQwOUU0MDk5M0JBMjg4RjYyMzJGMjMyMzI2Ci06MTBFOUMwMDA5MTNEOTlDRDE2MDM1QzA4RTMxN0RCQTFENzFEQTlBMkUxCi06MTBFOUQwMDA4RTNFQzVERDQzNzVGNDE5MUUxM0FEODM4Nzg2MjVFODg5Ci06MTBFOUUwMDBFMDIxQzYxNDFERUNCODcyNTM5MDNERTgxQjY0MEZGNDhGCi06MTBFOUYwMDBGNjI0RkZDQjIxQkFGNkZEMEZERUExQUIyRjcxOENENzI5Ci06MTBFQTAwMDBENThGQ0Q5RkE4QUIxRjZEOUZBQUFCOTc1OTYzNTEwNEJCCi06MTBFQTEwMDBDQzM3RUY0QjQ2N0U2ODVFQTczNTIyQURBQjk1N0QzNDkzCi06MTBFQTIwMDBENURGMDI3QTkyM0Y1NkYwNTc5MUU0NTZDNTQ3MUU2QkU4Ci06MTBFQTMwMDBERENGMzNEMDdFOUVDQzI0M0NERjQ5NUI5NkM5QkE3QUM5Ci06MTBFQTQwMDBGMkEzMEU5QTlDMDk3ODBFQjFCRTA0RjgwRkNGMjMxRUQ0Ci06MTBFQTUwMDBBQzE4QzU2ODNGMUVGODE4RTQyQUNGNzlFMjRCQ0EzQkQwCi06MTBFQTYwMDAyQTk2RjUyMzdGRTk5MjUxQjdBRjU2MTBCNDNGMzYyMDZFCi06MTBFQTcwMDA1QkJGN0Y5Njc3OERGRDMzRUZDRENBRkU0MzFCQkZBQ0U2Ci06MTBFQTgwMDBGRERGNDUwQUY2Q0I0MEFFNDQxQ0Y3RDNBMTkzNzYyM0I1Ci06MTBFQTkwMDBERjdDRjgxOUI3NTdDRDlGM0RENTFEOUY3RjgyNERBMUQzCi06MTBFQUEwMDA5RjdEQkQ5RkVFOEU3Q0JGQUY1NTNFNUNBMTVBQkY2Qjc0Ci06MTBFQUIwMDA2QjI2RkYxRDlBMzcwRjI2NkZDN0Y1NDZBRTQ5MjBGRDFFCi06MTBFQUMwMDA5RjlCRjUyNDlENDdCQzdDRDA0MEJGRDM5OTVFNUMxM0NGCi06MTBFQUQwMDA4QTc4RDk3QTY4NUQ5OEZFMUU5NTQ2NEY5MDlGQUVEMTkwCi06MTBFQUUwMDAxMzIyRkFGNzUxRkE3QTYzNDIwMDRFRTZDNEMxRjZGRkU4Ci06MTBFQUYwMDAxNzEwNjAwQTJFMDA4MDAwMDAwMDAwMDAxRjhCMDgwMDI1Ci06MTBFQjAwMDAwMDAwMDAwMDAwMEJFRDdEMEI3QzE0RDVCREYwRDk5REZECi06MTBFQjEwMDA3RDI1OUJDMDg2MDRERDQwMDI5M0YwMzAyMjhGMEQ3OTY1Ci06MTBFQjIwMDA2RDQyMTIyNjIxRDBBMDNDMzY4MDEwMDRFMzg0QTBEMDkwCi06MTBFQjMwMDA1NjZERUExMzdCNjkzMzQ5MzA4OTAxNEI1NDZBQzFGQTM3Ci06MTBFQjQwMDA1OEIxREFDN0U3RkQ5QTVBMDk1MEIxNUQ5RTU1QTFCMjk2Ci06MTBFQjUwMDA0OEIwNTE1MTU3Nzk2ODVCREEwRjE1NUFFRkZERjE3REQ2Ci06MTBFQjYwMDA3RUZGRkZGRjlDNDk3Njg2NEQ4OEJEN0REOTdCOTM5RkI0Ci06MTBFQjcwMDA0RUNFQ0M5OTMzRTdGQ0RGQUY3MzYwOENCMUNGMjRGODc1Ci06MTBFQjgwMDAxRjlCQzA0MjJFNDYzRkJDM0RENUQ0MkU2MkExQUNFOEFGCi06MTBFQjkwMDA3NkI5QTk3REI1QTlGRjAyNTNGQjNBNTNGRjE1ODZFNzY1Ci06MTBFQkEwMDBBRjY0MkQxQ0FBMjZDMERGRjgzM0ZERTJFQkI2MDZDNjIzCi06MTBFQkIwMDA0MjU3RjRGNUNCQjMwNTI0REZDNDhCRkJFNTc3NUJGQjUxCi06MTBFQkMwMDBDNjg1RkY3NjhGNUI2NTNEOUZDMjU4NTdCNzE0NzQ2NjQ0Ci06MTBFQkQwMDBDMDc1RUMyQUE2RTVDMjM4RERENjIwQjNEMEQ1Q0FFMDkwCi06MTBFQkUwMDBGOTJCM0RCQ0VENjRDMTBENTNFMUY5QjY2RTlCQUY1REYxCi06MTBFQkYwMDA2NkVDNDVGQ0FFOTNCMUYxODExQjg2MDYxMjE5MkJCMTcwCi06MTBFQzAwMDA4NTYzN0VCN0Y0OUNGMUJCQUZGNDJDMThDQTYyRjREM0QxCi06MTBFQzEwMDBBRkJGMTBFM0JFRDBFMEEyNzVFRDZDRjA1MDVCN0YyRTZECi06MTBFQzIwMDBGRERGNzM0N0U3RTNCQ0IzMjQxRkRDODZGOTk3MjczMzg2Ci06MTBFQzMwMDA1OEY3MkYyRkFDNzRFM0I4MzA1RkM2NDYzMDM2QTMzMzk1Ci06MTBFQzQwMDBBREJBNzEyQzYzMzIwQjI2NThBMUZGQjYyQzg5QjVDMzFGCi06MTBFQzUwMDAzQTczOEZGMUVGRTdEQTk1NjQ0RjBDQjgzMjY2MzVDMjNDCi06MTBFQzYwMDBGRkEyRjFFMDA3RTE3NEMxMUFDNEYxRjY4QzVCRjJEMEE3Ci06MTBFQzcwMDA1NDE4RkY2MEI3QzQ3MDNFMEU3NUI1M0IzMDA5REEzRERECi06MTBFQzgwMDA3QzVFRkFCOEQzM0ZCNUY2RTExOUZFMkIzRTEzNkY4MEQ4Ci06MTBFQzkwMDA0QkQxQzk2MTg2RTdCOTU3MkUxQzhBRUYzQkU0RjlDOTBECi06MTBFQ0EwMDAwOERGNEJDRDkzQjE3ODEzMUQwRDMzQjU0NzE4RkE4RjlDCi06MTBFQ0IwMDA5NzAxNkY5M0ZBQzdDMzc2ODE4NzZEODgwN0I4NkU4RjA3Ci06MTBFQ0MwMDBGMzU1MDc2MkUwNkREQjc4RTdFQTYwRDQzQTFCN0M0MERECi06MTBFQ0QwMDAyQzc5NzhCNUQyMzVGNzRBQzkxNzAyRjg5Q0VGQjZGQTA1Ci06MTBFQ0UwMDAxMDc4MDU5RTdBQTkzRTA2RENGREM3OEQ3NDkyREYxRDYzCi06MTBFQ0YwMDA2RjgwMDc5Mzk2MEZDODA3NkI4RTM3QjZFRThCRUFGRkNGCi06MTBFRDAwMDAwRDVGNjJDQTY5MzdGQzUxQzAwQTY4RkQ5Nzc4RkZDRjcyCi06MTBFRDEwMDAwRDVBRUIzRTNCRDAzMTYzNEEyN0FDOTM1NTJFNjRBQzgxCi06MTBFRDIwMDBCMEZGRkU4QzM1RDFGQTc0MzhCMkNBNjRDNjUyMDc4MzdDCi06MTBFRDMwMDBBNzBFN0FFRjIyN0NGNUYzN0VERjM4MUE2M0MzMDE5RUJCCi06MTBFRDQwMDAwMDVFOUM1N0VCRTRDMEMzM0UxQzI3NTIyNUUxRjcxRjMxCi06MTBFRDUwMDA3MERGMkE0NTYwN0RERjc1REZCQTE3RTlGM0QwN0IwRURGCi06MTBFRDYwMDAxOUY5N0FGNzdCNUQ2OTc4RkY2MEY2RjYzNEE0RkI4M0M2Ci06MTBFRDcwMDBGMDRFMThEQUNDMDY1ODgzQjY0M0JCREU4REY0RjU0QTY0Ci06MTBFRDgwMDBGNzZEQzQzRjMyQUIzRjM4ODlDQjAxNUYzQjc0REI5RUVDCi06MTBFRDkwMDBDNUU5QjBCRjc5QkQyNEU0Q0YwMUMxQUZGQjA0QkZFRTJDCi06MTBFREEwMDA2OUYwNTIzQkQ0MjBEM0Y1MTcwRDU5NzQ3RjU3ODM4RkU4Ci06MTBFREIwMDBEQTNGNkZGMDUzN0I0NzgzNDJFREFFODY0QUJBMUU2OTU1Ci06MTBFREMwMDAwOEQwRkRDMzBERDVENEZFNzU4MzRBRDc2RDU5Qjc1NzBBCi06MTBFREQwMDBBMDNDM0E5RjA2MDA4MDc1MzVCOUU3RDk2MkUxNzNCNjY5Ci06MTBFREUwMDAyQzE5RThFNjRCNUVCNzgxQUU2NjdBOTIwREVEMTlBRTRFCi06MTBFREYwMDA5MTg2RkU2NTZDOENFMUY5RjQ0RjI3MTg5RTk3OUM5REQ3Ci06MTBFRTAwMDA2QTY4NEZGQkIwQzhEMEJGMzA1MjZFNjgxN0Y0NUM2REIzCi06MTBFRTEwMDBFOEJGQTA2MkExRTE3OUEwNzg5OTcxN0U1MjAyQzk5N0ZBCi06MTBFRTIwMDA5RDY3MTlDOUU1NzlCOTc1ODZFNzNCRjEwRjk0QzMxRjUyCi06MTBFRTMwMDBCMkEwOTY4MTcwNTkzOEEwM0NENUU1RjQ1RTgxOUZERDgzCi06MTBFRTQwMDAwMjNGQkYxNEY4RTk0MkY4MTM5RjU3MUFFMDlEN0ZCQ0I4Ci06MTBFRTUwMDBGMzlBMjlDMEFGQkY2QTU4NERDRjFENTk0M0NGNDlGMDJGCi06MTBFRTYwMDBEREVENjdFMzY1OTQ3QkZCMUJFQUE5REZDMUI3MUYyNEQ3Ci06MTBFRTcwMDBCQUQ5MjlFNjcxRDBDRUNFNDkyOUQ4QjZDODREOTY4QkRECi06MTBFRTgwMDBFNzkzRDc2M0U0RjNGMTk1Mzc5MEJDRENEOURERTQ0NjMyCi06MTBFRTkwMDAzQURCMTE1OTMwMjg3REE3RjdGQkQ1QjkwNTMzOTAyRTAxCi06MTBFRUEwMDBGQ0REQTBBMzMyMkVBREY3NzQ3RDc1QTlGMUY1N0VBODI3Ci06MTBFRUIwMDA0RjYzRTkwOUYzQjg1NzQ3NTQ4OUMxM0FCNkY3RDQzRkNECi06MTBFRUMwMDA5NDg4RUREMDk3MjUxOURBRjkzREVBMENDNEQ3QUUyQzE5Ci06MTBFRUQwMDA4QjQ3QjI1MEJGMTkwQUNFRkJFNDZERDdFMEZEMURDN0NBCi06MTBFRUUwMDA2RDU2OUNGNzIxOTBGRkI4OEU5REEwNkY5REE4N0ZDRjk3Ci06MTBFRUYwMDA2RDc1NEYwNkY4QkZEOEYzRTAzNTkzQTE5Rjc2QzZFNjRGCi06MTBFRjAwMDAxQkM3MkU5RUM3QTg2Qzg5RTRDMkI2ODk0RUFCNjUwQUEyCi06MTBFRjEwMDA1QzhGREI1ODA4RTU5NzREMjU3ODc2NDVCNkQyMTVGNTE4Ci06MTBFRjIwMDAxRkJGNUY0RkY4QkEzMkRCNDNFRjZEM0ZGOTVDMzJCNjdCCi06MTBFRjMwMDBBREFDOUVFNEMwOEJDN0FEOTVDMTE4RUJCRDEyQkYwMzRECi06MTBFRjQwMDBCMjIzRUY0MjgzREIwM0ZEMEYxQzVGRTE0NkI5QjJBMzlFCi06MTBFRjUwMDA4NzhGOUZCNzU2NzMyMzlDMEU0NkI2MjZFMEZEOUQ1OUJBCi06MTBFRjYwMDAzRkEzNzE3NzRGRTI3NkM1Q0VFMzU2QTJFNzlEMTNBRjdDCi06MTBFRjcwMDBEOEUwQ0JBNTc1RkExMDc2NzAzRjAxREJEQjdBNkNENDU0Ci06MTBFRjgwMDA5Njk5Q0FDMjI5Mjg3N0E0NjBCQjA1RDdCMzgyQkQwNjZCCi06MTBFRjkwMDBDRkNGRkJBNDIwRjI3RDFFRDMxQ0MwQTI2Q0RCRkY2Qjg1Ci06MTBFRkEwMDA1OTlDQ0RDMUNGNkM5NzMxNzYwQjdGOTk0RDNCNkJENDdCCi06MTBFRkIwMDBCMzQ1M0Q0NjNERTI4ODVDMzgzQTFGQzZFQjNBQzNFNUFGCi06MTBFRkMwMDBEQjhDNEY4RDdBRjdFMDFCOTk5QjAyODg5NzMzN0MzRTUwCi06MTBFRkQwMDAzQjhFMkY1ODU0ODU3MkU3Nzk4OURBOEQ5MzU2M0RGQTI2Ci06MTBFRkUwMDA3NTdDQkVDREVENzNDMkY3QkU5Q0ZCNjQ0QjMyN0Y3RDVBCi06MTBFRkYwMDBDODVDOTg0N0IxOTg1M0RFMTlFMzNDMEU1RTU5QzczRTkyCi06MTBGMDAwMDBDNjc1OUVCNEQxM0FCNjFERTdGNkQ1RjkyQ0JFQUU5REI1Ci06MTBGMDEwMDBCRTNBRjY2REU0MkY2MTdGQ0Q3OEZCRkJENzRDNEE0MUI5Ci06MTBGMDIwMDBCQUIwOTI1REYxODJFRjY3QzkzOTI4OUYzQzkyODFFRUI4Ci06MTBGMDMwMDAwMDRFNDQzN0U3QkIxOThEMDMxMjQ1QkExNUM2MjlGMEI3Ci06MTBGMDQwMDAzQjNERUQxRUU0QzcwRUEyOUY4MzZGREI3QzRERjg1ODVECi06MTBGMDUwMDAzQUI0RjczNkU4OUYzNzUyNjJCOEEyMkYwNzRERjJGMjYyCi06MTBGMDYwMDA4NzZFNDNGQjE2RDkyODJGOURBQzZBNDBCQjYxREE1OUU1Ci06MTBGMDcwMDA4NzUxQkU3RUVBMzA4QzU3QzBBMjlFMTMzRUEzOUU2Nzg2Ci06MTBGMDgwMDBGQzA1NzY4OTVENUQ4Njc2MDkwQjJGMUE5NEJFNjZBQzA5Ci06MTBGMDkwMDA5RUU0QzUwRUM2N0NFRDQwNDA4NTU3NEEwQUMxRUZCOEQ0Ci06MTBGMEEwMDA4QkUwNTdGMEREQUE2OThDRjRCNDNBMERGOTgxODgzMTEwCi06MTBGMEIwMDA0QTJGNUZEMjRFRjE2ODJDMjU1RjdDMEFFOTgwRDk0RTM5Ci06MTBGMEMwMDA0N0EwN0YxQjEwQzk2N0E4QkI4NTFFMzc4RkRCOUZCRTdCCi06MTBGMEQwMDA3RkMwM0Q4NEU0N0Q3MTg1ODVGOEU3QkJFRTU3NDlCRjZECi06MTBGMEUwMDA3NzlERTJGQTFEN0YyMjQwNzdEN0UyMUZBOEVGNEYzOUM0Ci06MTBGMEYwMDA4ODFFNUU5ODZEMjEzOUEyREIwQjBCOTk2MjQ3QkU5OTgxCi06MTBGMTAwMDBFNzNGNjdCQjFGRTgzNkUwQUE5OTc0MEI1QzVGNzhBMzAyCi06MTBGMTEwMDA2QjI0RjJFRjBCNjgxNzkwN0NFODIwN0U3NjY4ODk1QUEyCi06MTBGMTIwMDAzMjhDQjNBQkM3NDk3Q0I4MTNGOENBODVERkRERTUyNDYwCi06MTBGMTMwMDBGQTA0M0U1RDhGNzZDMkFFMzBFN0EzQUVCMzU2NkVFN0ZCCi06MTBGMTQwMDBFRDcyMTM5RkVDRkU4MzgzRTZEREI1RDZDREZEOEIzM0U4Ci06MTBGMTUwMDAwRTA1RURGMDlENkIxM0U5RkRGMTcyNjJDODg2NzZGQzM5Ci06MTBGMTYwMDAxQTNFN0U4RkMwRUJFQjAyQUYwNzg1OUU3QTE5RjU5NEFECi06MTBGMTcwMDAxM0Y1OTA0Q0Q3RkRDMjhFRDg4Qjc2ODQxM0Y1OTk1RjJBCi06MTBGMTgwMDBFODMzQUVDNzlFM0ZGQkRDNUI0OEZGRTc3N0M1OTFCRDI4Ci06MTBGMTkwMDAzOTlFNjU3NUUyQkM3NjI1Mzg2ODlFNjYzODJGNTU4RDk4Ci06MTBGMUEwMDBGNEJGQTREQTY4MkZDQzk5NjhBNEZGQUJDNzhFMzRCNDNGCi06MTBGMUIwMDAyQkQzQzYxOERFOUY5NTcyOTVFMTc5NDU0MjhFRTE3OTkxCi06MTBGMUMwMDBCOTZEOUFBMUFENUMzMERBMEJGM0ZERDcxOEU5NDk4OTI2Ci06MTBGMUQwMDBCMjE3MzJGMUZGNDY3RkYxREE2ODdGMTFFNUM4RDkwNTMxCi06MTBGMUUwMDA2NEFGRURFQzExN0FGOTY0RTY1MDc1RTJDNUZDQjNGMzU3Ci06MTBGMUYwMDAyNEQ3OUZEQjhGN0Y5Q0E4QzZCMDFGM0UxNEZEN0UyN0JGCi06MTBGMjAwMDBGMDcxNDZFMEUzQjdBMzk0OTNEOTQwOTdFNzRGN0VFQ0MzCi06MTBGMjEwMDAwMEE1RDEyRjFERUJFRkVCRUY3RDE4M0MzMTI0NUFBRjQ5Ci06MTBGMjIwMDBBNzRCMzJEMUI3REVGRTQzRDc1QkUzRjFGOTYwRjkwMkI5Ci06MTBGMjMwMDBGNDU4NUIwNEYwN0NCNzk0RDhEMTBFQUZCNERBRUE5RkVGCi06MTBGMjQwMDBDMEI2QTZEOUQ4RDNCOTA0OEUyQzFCM0Q5RkUwNDM3QjEyCi06MTBGMjUwMDBBNTM5QjFGRTA3Rjg3QzVCQTNEM0IzMzUwNUY5RTg1QkFDCi06MTBGMjYwMDAzRkMxRjYxQTYwMDUyNzVDRkYxQzM3MkFDODgwRDUxQ0YxCi06MTBGMjcwMDA1M0I5REZGMjhDM0QzMEQyODc3QUQzMTI1ODc2MEJGNDMzCi06MTBGMjgwMDBEN0I2Mzg3QzRGQ0IxN0NGMjc2MUFBNDU2N0Y2MURBOEE0Ci06MTBGMjkwMDA4NzI0QzFGN0ZGNjk1MTEzQTZDMjdERTU1OTBCRjE2M0JECi06MTBGMkEwMDAxQzM4QTIzODBGMjcwQjg0OTBGRUQ5NkE2NTE5RjIwNzIzCi06MTBGMkIwMDBCMzAyRkZDMEY1MUIzOUVBMzBFQ0NGMTQyNjdCNjAxQzhCCi06MTBGMkMwMDAxMjE1RjAzRDRCRjhDMDdGNTg2MDVFNzY1NkFGRTEzOEJFCi06MTBGMkQwMDBDRUQ1MjA2MTgwOUYxRkM4NTY1M0E5QkY2RDAxOERGRkY5Ci06MTBGMkUwMDBGQzVDQzZEQTQ5MjEwNkE4OUQ3QjE3RjNCNDI3QzFGQzU0Ci06MTBGMkYwMDA5ODZBRkQxOERBQ0JDMENGQzdFRjVCREQzNzkzMUU3QTczCi06MTBGMzAwMDBFQkI3RDZBMDE0QzM1RUVBODVGM0NERjYzMzExOURDRURDCi06MTBGMzEwMDAzMkZCRUVFRjEwNzhFRDEyNzRCMTIzMjNCMDJDOTY1RjIwCi06MTBGMzIwMDAzODE1RTE4MkY2QzVCQkYzMjRBNEFGNUNENzEwMDVFRDE4Ci06MTBGMzMwMDAwQTU4QTA1NDA1RjI3REM3RkI1N0JCNkI2M0JDMzczMzNCCi06MTBGMzQwMDBCNzc2RUFENDI4QkFDODBENzc0QUI1MDkwODBBNERDMjdCCi06MTBGMzUwMDA3NTZEODNCRjcxNUQzRkVGQjY4NjEwQkZFNzEzMUMyNDQ4Ci06MTBGMzYwMDBCN0ZCNUI0NzYxQzRBODg3MEI3QThDN0UzNzYzQ0IzREM0Ci06MTBGMzcwMDBBN0FGNDI3ODc3NTgzRUJCMkE5QUJFOTRGNUQxRjRGNUYwCi06MTBGMzgwMDBGQ0M1RjQ0NTcwQkVGQjY4MTZDMUI1RDlDMkU5NEIwMzk0Ci06MTBGMzkwMDBGQUMyRTc1QTc5M0REMTk3NjY2NTgxRTY1Q0EyMzc3QTcxCi06MTBGM0EwMDA3RjhEQ0RFNTcxODI4NDVDMzUzNTkzRThBNjJCNzFDRUQ3Ci06MTBGM0IwMDA1QjIxOTlCRTM3NjYwMUY5NzEzNUMyOEZBQjIxMzlGRkU4Ci06MTBGM0MwMDBGMjMxOTBGMzMxRUNFOEREQzcxNjhGOEMwMEZDQjY4RDdFCi06MTBGM0QwMDA1QjMyMTJGOUJDMEIxNUMwMDg5QzdFRkU1MkI0MkY3QjI5Ci06MTBGM0UwMDBEQjgwMkVCMjAzNjczMjBDNTVDMUYzRENBNTBBRjY5RjExCi06MTBGM0YwMDBBREI3RjM3OEZGMzJERUZGQTZBOTlCQjY2OEY4RkM3QUJBCi06MTBGNDAwMDBGMTlDMkRFNEZERjVCNjU2QjBCNDBDRkJEQkFERDQ3RTFCCi06MTBGNDEwMDA1QkY0N0ZDOEE3QUM0MkJDM0Q5MEFEQUNDNjZCMzYxQTVFCi06MTBGNDIwMDAyQjcwM0QzRDQ1RjkwQUQyRTlBQUE5OENENjdCRDcxNEE5Ci06MTBGNDMwMDBFNUU2RThGNkNGMjYyQkI3NDZCN0I3RjVGQUE3MURDMjIzCi06MTBGNDQwMDAzRkJEODVFQ0QyOTc3QjE2OTA1RTkyNTlFMDFBRDQzQjczCi06MTBGNDUwMDAyRjg3NzkxQzZBREJEODgxRkQ5RjVGMDk3QjdFQkZGMDE3Ci06MTBGNDYwMDA3RkY2QTIzQzIyM0Y4OEZCM0ZCRjE0N0FFNTQ1QTE1N0I3Ci06MTBGNDcwMDA1RTEwN0E2NUE3RDAyQkRCODU3RkFBRkI0N0FGQTI3RjAyCi06MTBGNDgwMDAwQUQ3NDNDMjNGN0QwNUZEMjVFODk3M0JFRTA0RDkxNTE5Ci06MTBGNDkwMDBFNzNGNjVDNEJDNERFRTVGNDhCMUU0NkE2NTlBRDE3RTMyCi06MTBGNEEwMDA5Qjk1NjJCNEI3MkExMjhDRkFBNkRDNjZENDM3Q0E4NTVCCi06MTBGNEIwMDA0QzQzQkJGNERDMDQ0M0JCRjg4Q0QxM0YyRDNBNTk2NDc4Ci06MTBGNEMwMDA2OEZCOEY5NzFCREFGOURENTc5QkY0Q0Y0MkMzRjM1NUU2Ci06MTBGNEQwMDA1MzY1QzJFMzVDOUZEMTRGQkQyNkFCQ0VEMEFGMEY2RjVCCi06MTBGNEUwMDAwMTYxM0YzQzk2ODA3NkRDQjZCMTc1MDI2RkRDNUVEMDgwCi06MTBGNEYwMDBGMUQ2RjU0RjgzQjdCREU0OUY5RDNGQ0I0NDVDRTE3MUVFCi06MTBGNTAwMDAyOTk2RkZGOUFGOEZCNzRCRjA1QjAyQjdGMzJFQzU2RkFCCi06MTBGNTEwMDAwNzg0N0VEODI3RjRDMzFFQTFGRjQzQzI4RUZCODU4OEQzCi06MTBGNTIwMDAwN0VENDJCQzUxMUM4OEM3ODM3NjIwREVBMkUyMTFDRkQyCi06MTBGNTMwMDAyM0RFOUNGREUzQUQ3OUVDNDM5Q0RGNEVFQTc4QkIzNURFCi06MTBGNTQwMDAyNkRFQkVFNDM1REE3NzMzM0Q0NkZCNkU4NkNCODhCN0UwCi06MTBGNTUwMDAzMjY2OEMwNzRERkZENDg4Qjc5MkIzQzY3OEQwQjQwRjBCCi06MTBGNTYwMDA4RDc4MkI4QzE4RTM0MTA1M0Q0NkZCMkUyRjZDOEMwN0M0Ci06MTBGNTcwMDA5OUYxMDY3NjQwNEFDRTIwRjAwNjdFOTI0Mjc0RUIxMzUzCi06MTBGNTgwMDA3QTNGQjg5MEY0NTFDQjVDQUUxRjgxMEZDOUZFN0VFNjg2Ci06MTBGNTkwMDA0RUIwMDNCMkZCRTBGMUJDQzk3RjdBQkUxRkZEM0QzRTE5Ci06MTBGNUEwMDA4N0RCMzU1RDZGRDUxMDVDRjM1MDdGQzdFODk3MkRGQTg4Ci06MTBGNUIwMDA2NUU3NzhFOEVBQjQzMTJEN0UyQTRENzNERjA4OTg4RjJECi06MTBGNUMwMDA2RDJDQjc3QjZDODkxQjE4RDk4QjQwNkVENkZDM0UzQkVCCi06MTBGNUQwMDA0OTRBMDgzMDFDMUZFQ0E1RUM5Q0JDQkU3MTZEOUU3QTlDCi06MTBGNUUwMDA4NkYyNTM3MjNFQjgxQ0Q3QzUyNEFCOEZGNEFFQzkzRTI5Ci06MTBGNUYwMDA2MkFCM0RDQTZENzhGRkI2MjFCRTc2ODBDNTREMzk0OUY0Ci06MTBGNjAwMDAzNDBGMkZFQkI0QTM5REYxOEQxQ0E1MDhDNzk1NjY3MDMwCi06MTBGNjEwMDA3ODZDNEIwNzFGMUVFMEIxMkQ4RUI3MzU4MEQ3RDNEMDQ1Ci06MTBGNjIwMDA5Njg2MkUyN0Y4NzUwMUJDQTQ2QzFDM0Y4NUREMDVGMzdBCi06MTBGNjMwMDA1QTk4RTNFMDcwNThDQTg0M0U3RERBQTgwRkQxNjA4MDAyCi06MTBGNjQwMDBGNjMzRjFCQzdENkRDRTMzNEJCNUI0M0VGRDVCRjNCMzA5Ci06MTBGNjUwMDBBRTJEMUE4QzMzM0U2MTQ0MUQ5QjBDRTM2RUQ2ODZBMTAxCi06MTBGNjYwMDA5RDM5MTFFNjg3RjJEMUVBREU5NTFFNEI0RkY0Njc4NzhDCi06MTBGNjcwMDA2OTkzOTU0NTQ4MUY3NzA5RkQzQTFFMjA2MjlCREFGRjgyCi06MTBGNjgwMDBGQkNGQzQwN0JFOEFGOENENDU3ODQ0QzVCREU2RTY3MDE5Ci06MTBGNjkwMDBGQjZDMjE4RTkzNDdGNkE1MTI2RDVGQjJGMDQyNkFCN0ZDCi06MTBGNkEwMDA2NDczRkE3QTZBQzMwMkEyQjcwNDgwOTc5NDg0RjNFNzdBCi06MTBGNkIwMDBGMDVCNzYwN0E3QUZDRkJCMEU3REZFMDNEMDQ5MjBEQTAzCi06MTBGNkMwMDA5RThFQTI5M0JCNjJEMTA5OUJFM0YzOTJCRkRFOUYzRDY2Ci06MTBGNkQwMDBBN0YxRjkzNjBCRkI1MUI3OTM5RDY5QkFERDFDMTQ3MDg1Ci06MTBGNkUwMDA2MEExQTI2MTc0NjUzMzAxQUVDMzNDOENFMjM0MzUxRTY3Ci06MTBGNkYwMDA2QjMwMDgyMDhCNEI5QTZBMjFCOTUzNjE2MTlFMEMxQ0I4Ci06MTBGNzAwMDA1RDYxMUM4RjczRTQ2OEY5NjM4RTBGRkE4RkM3OUJFNDA5Ci06MTBGNzEwMDBCQjMxRUU1NDdDNjY4NEExNUQ3QTJFRDNFNDI3NEUzMDUzCi06MTBGNzIwMDBGOTkxMzkyNjNGNzM5QTQ5M0ZDRDMwRjRBRjRDQkJDNkFGCi06MTBGNzMwMDBFNEM3MkUzNEY5Qjk0Njc5NjM2MzM2NERFMENCNEE3MTlDCi06MTBGNzQwMDAwQkNEMjJEQkYyRjEzRTIzRkM0NDNEMjdCRkIzMTdDRUE1Ci06MTBGNzUwMDA4RjJBRDVDNEFGQzJBRjMxRjNFQjM3NzI2NDgyQjNDNTIxCi06MTBGNzYwMDBDM0ZEMUE5RDFGRjRGNzc1RjgzOUJDMUFFMTc1NjNCRTI1Ci06MTBGNzcwMDBBRTlGN0NBNDc3NUNBMTJGMzM4Q0FCQkE3QzNDNEZBM0FCCi06MTBGNzgwMDBGN0RGREFFMDdBQUI2MjFDNjNERjZGNjA2RjU1MDBGMjdGCi06MTBGNzkwMDA4MjBEMUVCQTNFREVFMEE1RUJBMzBEMzI1RDFGNjlDOEU3Ci06MTBGN0EwMDBBMjdFOUIxQjdDRDQ3RUI4QzE0RkQ3NEQwRDBBREQ3RjU2Ci06MTBGN0IwMDBCMEExOTJEQTFEMEQwMTZBNkY2OEE4QTY2QjdCODM0QTFGCi06MTBGN0MwMDBGN0M3REE1NDBERTMyMDYzREI5ODRGODNBNThDRUI4MEY5Ci06MTBGN0QwMDBFRjQ1QzE2RDRDMUJDQzIzMEFFRTE5OUFDN0QwMUVCRDU0Ci06MTBGN0UwMDBDNjZCRTg5RjVFMkYxQjlFOEY1QzlENjU3ODlFQUFGQTc0Ci06MTBGN0YwMDAwQ0VEQ0JBQkZEODZGRUMzMDM4QUExOUQ1QzU5NjlFODg1Ci06MTBGODAwMDA5RkE0MDQwQ0VENDQ1RkI1QTFCRjNCNEIzNTNDREY1M0Q3Ci06MTBGODEwMDA1QTM0MzQzMjAwMUY3NzM0ODRDMjA4ODdGNjg2MzA1RDRDCi06MTBGODIwMDAzNzM0QkM0NEQ3OTY4NjlFMzBDMkU5MENDQTVGQzBBMzY5Ci06MTBGODMwMDBDN0Q2NDlGMkMzMzNEMUMzMzA0RkUxNzIwMUJFMDA4RjQ2Ci06MTBGODQwMDA0OTM2OEYyNTI5NkFGQzI0MDVDNkNCOEE5RTFGOEM2NzAyCi06MTBGODUwMDBGMENGODI0NDJGRUVBQ0IwRTFCRUQzREI2Mzc4NkZBNjZECi06MTBGODYwMDA5NDUwOEVGOTg5MjNDNTEyQzVCRDhFMTQyNzI3QTJGRDk5Ci06MTBGODcwMDBCMkRFRUU5OTlCMEJGMzM4N0M0Q0YyNkRDNUY1RTIwQkQyCi06MTBGODgwMDAzMUU0RTUyOTYxNkZCQTI3QkI0ODJFQ0NERjY0RDkyQTYxCi06MTBGODkwMDAxMTVERjNGNzZGRUExRTEzMzM3RTc0Rjg5QkFDMUFENzMxCi06MTBGOEEwMDBFNURFQjM1MzQ2QkE5ODVGNUM5QjFDMTdFNUFGQ0QwRkZFCi06MTBGOEIwMDBGRDQ3NDUyQThEOTc5RDFGMDdGNDMyN0Y3M0FEQTM2RUQ4Ci06MTBGOEMwMDA2MkRGQkFGNDdFMzc2RDMyREE5NzdENzQxRjc0RTEzQUU1Ci06MTBGOEQwMDBDNjZCREY3NEExN0M2QjRGREI0QUVERjZBQzgxRjMyNDgxCi06MTBGOEUwMDBCRjEzRUJGOTUwRDhDRkE3ODUxRDc2NTJEODYxRUYwQjI3Ci06MTBGOEYwMDAzQjJDMjJFQ0IwNzc4NEZEN0M1Q0Q4Q0Y2RjBBM0JBQzBDCi06MTBGOTAwMDA0N0Q4NjFBRjBCM0JBQzVCRDg2MUFGMDkzQkFDM0RFQjdCCi06MTBGOTEwMDBCOTU5MjQwRjlGQjUzMDI5ODY5RkFBNUZCRkZBNDNBMzI4Ci06MTBGOTIwMDAxREY2RTVBMEQxMEU1QkI1RDk2ODg3REREODYxQjRDM0ZCCi06MTBGOTMwMDBFQURBOEM3OUI5NUFFRDJBQzNGMzFCRDYxOEUzNkNEN0VGCi06MTBGOTQwMDBENzFCRTVFMUIyRDUzMzBDRURBNUFBMzFDRUI2QTREQUNBCi06MTBGOTUwMDA2ODg3RTlGOEI5MzY2MDk0OEIwQjJCOEQ3NjU4N0ZFQjZFCi06MTBGOTYwMDA3RDIxMzQ5QkYyM0Y4OEM0MTM1MTdBQUYzNzhGOEI3QTU1Ci06MTBGOTcwMDAwNUU4MjVGNzAyRTgxNThBODMwNzlBMzE3RkIyMDNCQkIxCi06MTBGOTgwMDA4MEZFMkRCMTg2OEY0RTQxRjlGOUJBQzQzMEVFQjRFNzRFCi06MTBGOTkwMDA3Q0ZFOUNGOUYyQzVERkM5RDc4Qzc0QjNGQ0I4MzFCRUNDCi06MTBGOUEwMDA3MUREMUQ0NkI4NTZERDZDRjQ0QjFDOTU0NkI4MkE2OUNFCi06MTBGOUIwMDA0NkJGNjRBMTU5Q0YwNDhDNzAwNTI5Q0Q5MDJFQ0RGQTk1Ci06MTBGOUMwMDBDNkVBQkU1OTQ2RjlGRDc5RjU4RTgzODE1RUUxNkQ4MzA1Ci06MTBGOUQwMDBERTcxRTA5RDRDQzM3M0QyM0I2REI5M0M1RTk3MEZGMzczCi06MTBGOUUwMDA0MDYzQTEzMUFFRTAxMEU2OTNGNkJDNjFBM0ZBMTA5ODMzCi06MTBGOUYwMDBFMDZCNjM0MUZGOTRFMkRGMDBCRjE3RURBQTU2MEZGNEZFCi06MTBGQTAwMDBGQUNCNDJBN0E3MDk0QzU2MjY5REQ5RkIzNUU4RUYxMDQzCi06MTBGQTEwMDBGOTEwRjZBOUVEMjQ4RUFGQzIyRkUyMkI5RjQxM0I0QThECi06MTBGQTIwMDBDRkU1ODVGOUYzQThGOTFBOUU3RjBGNzEzNkUwN0M5NDMzCi06MTBGQTMwMDBEN0M2RTZGRjNERTc5Mzk4ODJGNjEwOUJDMkE2NTA5RDdECi06MTBGQTQwMDA0MTY0RDhBMEUyQUJFNkZCQjkyMTZFMDdFNUE2NzEzQkE1Ci06MTBGQTUwMDBDODlGQkU0MDEyNzkyN0U2QzFCNjk1QjkyODlFMzk4QTVCCi06MTBGQTYwMDAwNTlGQzYzODY3RkMyMUY3M0M2ODM2RTM5MEE5RTg1NzQ0Ci06MTBGQTcwMDAxOUY5N0ZEMTlDODFGM0YyNUZGMjFBRjk3RkI2M0NDNjg3Ci06MTBGQTgwMDBFNDBGMTlGOTdGQUVDRkM4RkY0RTY2QjI1RjIyNEM0NjM1Ci06MTBGQTkwMDA3QjkyNzA2MDM1M0MyNzM4QkQyNkU4QThGMUJEOTY2NTlECi06MTBGQUEwMDA5NDg3NERFNzcxMzc5RDdFQTYwOTdDMzFENkI5QjcxNjhDCi06MTBGQUIwMDBGM0NERTA1N0EyQkZFMTY0NUFGMjE0QUMyQjBBRDcyQjY2Ci06MTBGQUMwMDA3QURFOERGMDI2QURGNTkxNUQ3QTg2RTNDNzBGQkY4OEFCCi06MTBGQUQwMDAzRjNGOEJDMjE3RTJFRkI4MTE3RjRFRDNGM0QzODI5RTI0Ci06MTBGQUUwMDAyRTlFMTdBN0EzN0ZEQ0JDNEM3NDk1MzBFQzEyRjlCNzlGCi06MTBGQUYwMDBEODc0NTUxNjU2QTQ0NDk4REY3RThGODVGMkE5RkJDM0FGCi06MTBGQjAwMDBGNUUxMzI2ODdGRTJFNUY1NDJBRDY5MEI2QzM0NUZBNjQyCi06MTBGQjEwMDAwQzk5MDk3ODk4MjVENkVCMTc3OUFEQUUwNjQ2NzZDN0NECi06MTBGQjIwMDBGMzBEMkVCQTMyNTYyRkExM0M2QUYxREU5NjhDRkFCMTUzCi06MTBGQjMwMDA2Qjk0M0ExMkVCRDJCQTg2MjdBREMzRkNGQzM2N0I1MkVCCi06MTBGQjQwMDA1QUFDN0E5NkRERjYwMkQyQTc1REJCNTM2RDMyQkM1RjJDCi06MTBGQjUwMDA2NkYzRDhGMEJEQjJCNDE1MTJGQTdCNUZFQTYxNjQxN0EwCi06MTBGQjYwMDA5NEE1RjFCQThDRTcxQjQyNDdGOEY3NTRBQUJGODE3NUY4Ci06MTBGQjcwMDBDQzQwRkJCNEMyNTMzQjIzMzEwNUUzQjM2MDhCQzk2ODZGCi06MTBGQjgwMDBFNzI2OTFGRkJBNkZCODkzRjBFNkY0QUNBQUMwRkNGMTk3Ci06MTBGQjkwMDBBQkE5MTJCM0Y4MDEzRjNFRTYwQkExMUU0ODRCRjAwNTlFCi06MTBGQkEwMDA3MTM4QUZGRDdEODRGMzZBRjhGRDJDQjM0RjJGMDA5RkIxCi06MTBGQkIwMDBCRjFGOEQ4RjAyMTZENUE2QkM4MkIxM0QyMjRGRDQzRjA4Ci06MTBGQkMwMDAwOUZDQzg0Q0E1M0E4Qjk2MUU5RTFGNjI5MUQ4Nzk5NjY3Ci06MTBGQkQwMDA3Nzg1RERBMEM3Rjc4RjBCQkJFMTREMTE3NzNCMjJFQzlBCi06MTBGQkUwMDA4NjE2NjEzNzg0ODRERDcwNTREODBERkI4NERENzA0MDQ3Ci06MTBGQkYwMDBEODBEMkYwOUJCRTExNTYxMzcxQzEyNzY0M0FGQkZDMDhBCi06MTBGQzAwMDBFQUM5OUVBRTY1QUUwOEM2RDk1RjA1RkYxQ0U1ODg3N0Q4Ci06MTBGQzEwMDBBNTI1NTgwOUVCOThBMTc2MDRDQUExRUQ1QzY3MjdGOUUwCi06MTBGQzIwMDAzOTNBNEQ2QkM0RjhCOEIzNUE5Qjg5RUJGMDJFM0ZCQjAxCi06MTBGQzMwMDAxQUZCQTdBNjM5NjQwNUZBMzc5NkI2QTc0Njc4OUU2MURGCi06MTBGQzQwMDBDODVDRTA4Rjk1ODI1RTk2QUFCMzBFMjA3RkU4NzA2NzRECi06MTBGQzUwMDBEMkEzNzk5NDZGRUFFMEYwNzZDMTJGQzIzQjU1ODU3NjQ2Ci06MTBGQzYwMDA5NDFDQTkzNUMxNzUyOUI2QTNFNDg2MDNFOTEwRTA1OEIwCi06MTBGQzcwMDA5OTI3RjgyMTg3RTU3MDc4NkI3MTA4RUZCODVBMDE2RjAyCi06MTBGQzgwMDA2RjRBNENGRUQ4MkNFMEFEQzM2Mzc3RTk1N0FDMUE3NEM5Ci06MTBGQzkwMDAzRDlBQzZFQjI1OEUxNjdGQzVGQTJBQUNBRjVCOTEyODNDCi06MTBGQ0EwMDA2RkRBOURDNkM3NUIyMEU4REYzQzlFOUU0N0RENTgzRTZECi06MTBGQ0IwMDA3MDlDRUVCMEU4RDdEQjZFNjNCMjczNjhENDM4RTVGRkIyCi06MTBGQ0MwMDA2Njk3RTFGRDI1QTE3QkQyOTExRjM2MEVEMUYzQzMzRThECi06MTBGQ0QwMDBCMkFCNjc0QUM1QkZDRTgwNzk4NjQ1RERBMzJFMjcxNzE0Ci06MTBGQ0UwMDAzMzAxMUJEM0Y3OEU4QTc1RjYzNzlGQTNFNUQ3RDg2NTA2Ci06MTBGQ0YwMDAxODc3NTFFODFFODZERjczREFFQUJERDFGNUE0REQ2MjFDCi06MTBGRDAwMDA3RUFENTVCNzMzRTRDN0YwMjhDMDNCRkFFRjAxQTc4Q0FFCi06MTBGRDEwMDBGNkY2RTgzNERGQkQ4ODc3NkY5QTZBQkYxM0VFQ0YwMzNCCi06MTBGRDIwMDAzOTI4N0I3MDVBMURCQjUzQjAxRkJDRjMwODQzRkE5OEE3Ci06MTBGRDMwMDBEMDg5RkM3NjM0REQ0NUYyQTZCRkY5NUNBNDNGODI4QzA1Ci06MTBGRDQwMDBFQzkwRkVGNDA3RDAzMUQ5NDFDRTM5MUYxQzQ3N0Y3NkE1Ci06MTBGRDUwMDAyMUFCRjc4NUUwQkQ3MEFFNkYzOEYyMkZBQkI2OTM1RTg2Ci06MTBGRDYwMDBDRTgyREZFODdDOUE3RTVENjhEMkRCNkVCRjdENDBGOTkzCi06MTBGRDcwMDAzQkZBNDI0MzFCRjJDRDUxQzEzN0FEMzY5Njg4NzUzOUY3Ci06MTBGRDgwMDBFMTM5QjdCQjEwM0VGM0QzMzNGNzIwN0U1ODk5MkIzMkJECi06MTBGRDkwMDAwRUUwRDA1QTdDRTdGNTA4QUZENjM5QUIzQzE2QTRBQkUxCi06MTBGREEwMDA5MjMxRjQzQzVDRTYzQThEOTUzOEJGMjlCQjNCNUQ4RUMxCi06MTBGREIwMDA4Mjc3RUI3REFDNTQ0NTc4QTdERkU1QkQwOUQ2OTU5OUYwCi06MTBGREMwMDBGNkE3MDY3NTMyRjRCMzczN0ZBN0E3RkNGNzY5MTk1MTNDCi06MTBGREQwMDBGRDI3RTU5NUZEMjAwRkY5Qjk3MjM4RjFDMzc4ODc5QUIwCi06MTBGREUwMDAxOUFCMUU1OEE3RjNDNkQyNzhFMkYzRjc2Qjc5OUQwMkUwCi06MTBGREYwMDBEQ0JGNzcwRENDNDdDNUJBMTU1RjFGRkZERTI4RTgyOUE5Ci06MTBGRTAwMDA2RURDMzlFMjczRjUzRUE3OEM3RTA2OTM5NkI3QUM4MTIzCi06MTBGRTEwMDA3NjM1REE0OTY4Mzc2REUyN0NBQkYzNzE3QUJENTE1RUI1Ci06MTBGRTIwMDBBQTI2QkVBRDM2RjFCNUNFQzdCQjc1QjlEOUM3Qzc4OTRECi06MTBGRTMwMDA4OEQ3Qjg1QUNFNEZGREYxRjFEMjRGQzFCRUExNDJBMDMyCi06MTBGRTQwMDBBMEMxQUY3QjYzRTU5ODc4QUVCRkEyRUNEQTI5MjQ5MzFBCi06MTBGRTUwMDA2NDQ3M0U1NjgxMzJCMjZCRTNDNTczMjBDOUREMzg5RkRCCi06MTBGRTYwMDBGMDNEMzk3MzExNUY1QTIzRDhGRjM4QjczNUY2M0U3QTIzCi06MTBGRTcwMDBDQkM0NzVCMjIxN0U1ODdGRkM1QTI5MUJGMzI5QUNERTE2Ci06MTBGRTgwMDBERTY3MTc2NzFBQkU0Nzc1MDI4QkEzREI0OEFGOUFGMjhECi06MTBGRTkwMDAxQkI0MUYzMDhDODkxRkZERjM3QjQ3RjYzN0MzRjdEQTlECi06MTBGRUEwMDA0NzI0QjM0Njg0RTcxRDlDRkU1Q0YwMTBDNzAzMzUzRDM0Ci06MTBGRUIwMDBDNDhGQ0ZCRjM1MkUxQjUzRjcyQzlBNUU2MUZDODhDNkNBCi06MTBGRUMwMDA5RkJGQjM2Njc4MzY5OTk5QTI1RDczQ0Y5OEE5RDhBRUQzCi06MTBGRUQwMDAwQUQ4NEY0NkNCNTU1NjYxMjNGQzVGQkJENkIyMTVFMzFCCi06MTBGRUUwMDA3RUUzQTU4RkNFRUU4NUZFRjE1NzM5N0NDRDMwRkVCNTkxCi06MTBGRUYwMDAwRkFDQjAyMzVDMTY2OUVBRkUzQUI4QkYwOEU4MjJFODA2Ci06MTBGRjAwMDBBMzc1MThGOEU0QThDRDYzQzc3MThFNTY1ODU4MDdCNDg2Ci06MTBGRjEwMDBFMzE3MTlCRjUzQjNENkM4NDc2NjNCRTQ1OEEyM0FDQUExCi06MTBGRjIwMDAwQUVGN0Y2MDcxQjJBRDcwRERCRDY1RDVFMzM4REVBOTQzCi06MTBGRjMwMDAwNzlDNTQ0RkM4NzBBQzdDRDQwMzRDQzQyNTk1QzdFRkM0Ci06MTBGRjQwMDA4MUU3MkIzNjNCMTlDNjAzOTYwQTNCM0YzMTNGODNDNkY4Ci06MTBGRjUwMDBCNUJBOTdEM0ZCQjVFRDg5RTQwRjlGREU3MkY5NjRDNDlGCi06MTBGRjYwMDA3RkRCQjBGQTVCMDNDMDM3QTc5MkQ0MUFDNEVCOEFENjAyCi06MTBGRjcwMDBBQkFDMUEzQzZGOEJFRjk4ODlGRDNGQjAzMkNGRDY2QzlCCi06MTBGRjgwMDA2OENCMEZEQTcxM0UzRDYwMTc2MDlDNTU5RjY3NkQ1QkQzCi06MTBGRjkwMDAxNDdFRTFCRkVBN0MxRTc3OUY2NzY1NkE2NzBDN0JBNkNCCi06MTBGRkEwMDAyM0RGQTJDNzU3MzU2N0Q0RkMxRkNBOTdFOUZFQkNDQzM0Ci06MTBGRkIwMDA2MTJEMEZFMTc3MDBGQjFFOUY4MDBCQUU3QjI2OEY4N0E0Ci06MTBGRkMwMDBCNkE1Rjk2QTg2NDNGQkE0ODU3OTlBNTJGMEFBQkM4MzQ4Ci06MTBGRkQwMDBGQ0E5RERFRjY0NEYxM0ZBMTlGNTc3OEMxQ0YxNjQ3QkYzCi06MTBGRkUwMDA5NERGM0Y0OTdDRjc0NDEyN0ZGRUJFMzczRTg4RUI3Q0FFCi06MTBGRkYwMDA1RkU2NkRDRDlCMTAyNDdBQjZBOTU5OEIxM0Y5N0EyQzQ0Ci06MDIwMDAwMDIyMDAwREMKLToxMDAwMDAwMDk3RTFBRTA3M0VCRjYzODlCMjIzOTNGMEMxRTRFNzYwOTYKLToxMDAwMTAwMDVFMkIzNjdEOTdGMEJCMERFMDgzRkNEOUUzOTE1Qjc2RDgKLToxMDAwMjAwMEMzM0M0RTgzRjJENkYwQjlGNzkxOTkwOENGREJBNzAyMTMKLToxMDAwMzAwMEExQTY1RTBDQTc3QkYyODdGMTNDRjRFNkU2NDREMkY3N0EKLToxMDAwNDAwMDFFQTYzQTJFRUI4MzQ3NkRDN0Y2QkIyRDkzNDlDRjZCQTcKLToxMDAwNTAwMDVDN0U3MEZFQjNCMDI4RjkwRUY4OUQ1N0Y4MURGQjBBQzAKLToxMDAwNjAwMDVDNkYxQ0VCNDBCQzU4RjdBRDczRTEzQzk3RDZEQTI5QzYKLToxMDAwNzAwMDJFOTRDMDAyOTUyODRGNkIzNzU5QTgwRDNGMUI1MDVGMzcKLToxMDAwODAwMEFDMTBGQ0Q1MjYwRjNCNTA4N0YwNDAzQjlDRkNCQzQ3OTYKLToxMDAwOTAwMEY3NjM1RDQwQUQ5MDVGRDUyQjhENzQ3QUEzRDc2NkEwRDIKLToxMDAwQTAwMEUzQUEzNTQ2QkE4Njc1MUFEQTlCRjM3OUZFQTVDNzdGQUYKLToxMDAwQjAwMDJBMDVGNTczMUIyQzFCRTFGMjQxOEIyNUI4OTVFNDZCRTcKLToxMDAwQzAwMDYwNTQ3NDVEOUQ5QzZGRDVFQjU2NjQ3QjE0RkM1NzAwQTcKLToxMDAwRDAwMEZEQUQ0MEJERTE2MjFERTVBOUI4RUU3MUIzOTBERTFEMzYKLToxMDAwRTAwMEM3RTI2OTlFNjZGOEZFQjNDM0UxNDRCQTVDMzMxQ0U2MUUKLToxMDAwRjAwMDczMDJFODE4RUI3RURFREZEMjRDRjYwQkZFNDgwNkJFM0MKLToxMDAxMDAwMEY2QjQyMDdEREYwNEIzN0NDNDQzRjRFOUMwRkM5MTRFMTcKLToxMDAxMTAwMDJGM0E3QzZBMzc2NzFDQzA3RURFRkY5MzI4ODNEM0M0RTYKLToxMDAxMjAwMDZBQkQ0NUFCMzBBRkQzNEI0NzI2RjhFMDlBNkRGQTc3RkUKLToxMDAxMzAwMEM2RjREMTE5M0Q4RjQxNjdFNUQwOTdFMzQ1MjM3RUE5RTkKLToxMDAxNDAwMEFERThDREU3OEQxQUE4NkU5OUYwNUQwNDlGRUI5QUJDREYKLToxMDAxNTAwMDRDMkIxNkVGMDNERDZGMkM3RDg1RThFMDEzMEYwQjRBNjcKLToxMDAxNjAwMERDOUY3RDFERTU3RUEyOTg5QkM2OTQxMENBRDcyMUEyNzQKLToxMDAxNzAwMDVFMTRGNTEyRkFDOUM5NjJCRDQ5NkIyQzZGNTZFNDMwQTIKLToxMDAxODAwMDM2NkM4REY0NjYwNURDNENBQTA4ODc1MDRGMzhCRDQyQUEKLToxMDAxOTAwMEVGRUUyQUY4QzlGOENCRkFGNEQ4OTBGODM5QkUxMEFERDIKLToxMDAxQTAwMEM2OTM0QUZCMTJFQzlFNTRCNDdGMUVCMDU4QUEzMTVFMkYKLToxMDAxQjAwMDNGODQxOUVEQUE2NDEzM0M1OEFFRUQ2NEI0M0QxRTJGODQKLToxMDAxQzAwMEU0RkRBQTk5NjMyQ0U0RTc1NDFBRkQ1MjlCQzkyRUZBNjgKLToxMDAxRDAwMDExRDJGNUYwQkVGNUNCRjgyN0MwQjEwNUZDMzY5NDUzMkIKLToxMDAxRTAwMEMzNDIxRDFENDg5RjM1NjBCNzA2NjlGRDNFQ0FFNzM4MEEKLToxMDAxRjAwMDQwN0YzQzYyRTk4QjVCRkRBM0UyMTYxN0M1QkY0NERDODAKLToxMDAyMDAwMEEyQkZGODk3MUUwNzU4Qzg2RkIxOEQwRUQ1OEJGOUJFRTcKLToxMDAyMTAwMDg1REU5QkU2QTAxRERBNThGQTE1MkZGOTRCREVEMzY0NzQKLToxMDAyMjAwMDk3M0E4NDVEMUEzNzZFQTU4N0U3Q0QzOEZGRTg3MTAwRUQKLToxMDAyMzAwMDMzNUQ5OUUzNDk2NkZFMzNEQkE1QkZDRDE3RjZEMzA0RTIKLToxMDAyNDAwMDM2RTFGM0M0MDVGNEY4N0Q2QjE2Rjc3QjVBQjM1NjM0RTgKLToxMDAyNTAwMDYxREREQTc5RTFGNzc4MzQyQkUxNzFGMTIyMEJFMTUxQkMKLToxMDAyNjAwMEI3RDcxNkZCQ0YyRTQyRkU3QjU1RjgxNzk3RjI3QkRBRjUKLToxMDAyNzAwMDREN0U0OEJDRkY0OTQ1ODlBMTNGRUQwNTVDM0VCQThCRTgKLToxMDAyODAwMEY5RjNDNTJFNjY3MzQ1RTUwRDFDMDU1Q0ZGMkUwNjNEOTIKLToxMDAyOTAwMEU4ODIyNUNFNjMzQ0JGMzE5RjE5RjM1MjQ5NjIxQ0ZEQjEKLToxMDAyQTAwMDBBM0ZFMUE5Rjk4NjNBQzFBNDAyN0U5RkYyQTA0RTkxQ0QKLToxMDAyQjAwMDA3NzU4OTNBQzFCMkVDNzM3QjNGQzNGQjBBQUZGRjc1ODgKLToxMDAyQzAwMDJBQjU4RkREODk3NkRGQTI0NDlGOTVFODU3N0RGQTNCRkEKLToxMDAyRDAwMEU4MUYyRjcyOTNCQzREQzk5MkE5REVCNTNBQ0RFNTIzMzQKLToxMDAyRTAwMERBRDc5NEQ3RDEyRjVCQzQ4OEI3MDFENDBBQzlEQjI1RUMKLToxMDAyRjAwMDU4MTdFMTE5QzBERjcxMEQxQzJGNEJEMEZEOUQ2MjRFQzgKLToxMDAzMDAwMDU3QkQ3MUE1MDA5N0RGNTZGODQ1N0FCQUI2REE0ODJGN0YKLToxMDAzMTAwMDRCRDQ4MUU5MjdCQjQwRjhEMTYyREZENkY4Qzg4NUREMzAKLToxMDAzMjAwMDlGMTE1RDcwRkVERDM4OEFFN0ExQ0ZDRjgxM0U5OEI3N0YKLToxMDAzMzAwMEVEQzcxRUQ3RkREQjA0M0JGODQ1MDk2OEJGRUUyNTdBMDMKLToxMDAzNDAwMDBGNjczMTdCMzRCRTAzQzU5MkExQUUyMTVDQzhFMjNEOEMKLToxMDAzNTAwMDQzNzEzNjQxQzI1N0Q4Q0VEMjFGODBGRTg3Q0IzRTYwNTQKLToxMDAzNjAwMDc3QzBBNzEyQkUzM0NDODJGNTdCRkQ3REQ3NENEN0Y3ODMKLToxMDAzNzAwMDhEQkI4OUUyRkNERjlFMEQyMDgyRjlERTg3ODk2NUFBQUMKLToxMDAzODAwMDIzRjhFOTMyOUNDN0I3QjE0RDc1NzUzRjVBODY3NTc1MkMKLToxMDAzOTAwMERGOEVEM0RCQ0Y3RjRGODlBQTJCRjg3QUMxQUVFRkExRDYKLToxMDAzQTAwMDVDNTc1REEwNUY2MTNDQjdDQ0E4OEU4QUIxNEU5MkM3MDYKLToxMDAzQjAwMDEyQzZGRDUwMUU0RjhDODIyN0Y5MDk0NkY4OUFFRDc2MzkKLToxMDAzQzAwMDA5RjEzNzE5RTlEMUM4RTdFNkVGQUUzMkUxQTVCRjc1MEIKLToxMDAzRDAwMDlCREY4MzlGRUEwOTQ2N0FGRjVBQzEwMDc1QjFFNkY3QjEKLToxMDAzRTAwMDEzQjA0RTIyRjFGM0Q3MTc4MEUwQTQzQ0I0QzRBQzNFNjYKLToxMDAzRjAwMEY0OEY1OTM5QTNFRjU5M0M5QzhFNTBBMkEwREVCM0Q3OUQKLToxMDA0MDAwMDBGRjExMURDQTAxRDg3N0EyMEU4RDZFM0E3MzRFOTM4ODQKLToxMDA0MTAwMEE0MDMwOUYzODYyMUQyREYzMDk1ODg2NTBDRjZEN0VCNkIKLToxMDA0MjAwMDBDNTRGNjk5N0JGMDcyMEVFNDJGOEQyMzU3RjIzQ0YyQjgKLToxMDA0MzAwMDFCMEE4QkUwRjdDNjNGQjIzOTkwOEZGRUY5MzFEMEFCODMKLToxMDA0NDAwMDMyRUFFREFGNjgyRTY4OUY1QkNCMjgwRkUwRjZBOEQ0QTgKLToxMDA0NTAwMDg2NEY0NTlBNjFCRTVFOTVCNzZCMDA0NkE4ODc5RDVFNDQKLToxMDA0NjAwMDYzOURFQkVFRDI0N0NBMUNGMEJDQTU4MkM3NTUwRjM3N0YKLToxMDA0NzAwMDg0REU1ODg3NzlEQUUyMjI5MjhGRUJCMDYzRDQ3Q0MzQjIKLToxMDA0ODAwMDdCRTIxQzE4Nzc1MUI1QUZCQkQwNEU3RTc3QURFNEMwOTAKLToxMDA0OTAwMDZCQjhBOTU2QzM0NUJGOTFBQTc1NUE2NDhDMzNBODBDOTIKLToxMDA0QTAwMEZEN0FDN0RBRTY5OTQ4QkY2RkQ4MzVERjMwQjhCRTg3MjYKLToxMDA0QjAwMDcxNTgxOEJGQUQ0OUJCMDVGRDFDNDU5RTUzOTkwMTcyOEIKLToxMDA0QzAwMDYxNkI5QjhERjYxM0JENTdGRUZCMzQzOThBRUY3RTVCNjMKLToxMDA0RDAwMEMwRkQ4NDU3NzdDNzdEMUJFMUQwNkE3MTQ1RTJGMDZBQTEKLToxMDA0RTAwMDU3QjdERTk3ODJERjczRjgxQTYxOEE2RjM0M0U5NDhFQjUKLToxMDA0RjAwMERGNjlCREIxRDVCNzA3OUYzNzNBNzE4NzI5NkJEREUyNTgKLToxMDA1MDAwMEFBQzY3MTVCRDM2RkYyREUxNDM1QUU2QkE0QTMxRUVGRTcKLToxMDA1MTAwMDg3NDdCNDUwRkU1OUFERjQzOUUyOTI3MDVEMUYyNTdBRDkKLToxMDA1MjAwMEUxRkRCNkI1MzlDOTQ4OEIyREE5OEU1MTc1RDhFRkE2MTYKLToxMDA1MzAwMDNGRkZCQTAwRjEyRTVCRjM5MUY1MUNERTBFM0JBRTdCNjQKLToxMDA1NDAwMEI0NTdENTMwMEY3RTIxNEZERDg3RjRCQTc0Q0Q3QjMzOUQKLToxMDA1NTAwMEE5M0VBRTIyRTk1RUJDOEVCRUYwQjUzNjg0RkYxQjIyRkEKLToxMDA1NjAwMEZFMTI0OTVENDE3OUQ5OTY5NTc1MkU5Q0VGRkNENENDNEQKLToxMDA1NzAwMEE2RThGODRCNEJGMThEQUVGMUYwNUVBNkQ3NUFCQjZBRjgKLToxMDA1ODAwMEM4QzVGNEQxODJGMTk2MjkzODJGNThDRjI0RUNGN0E3QUIKLToxMDA1OTAwMDA2MTVGQTQ1RDIxREQ1QjFGNjYzQkQyQkUwRTc2QTVFQkMKLToxMDA1QTAwMDk1ODk3MTkwOTYyRDJFNENDM0IwMTY4QkJBMTlFMzlDODkKLToxMDA1QjAwMDVBNDY0MkNDN0FGNTA5N0VGRTVFOERFQTk5RTk5MDA5QTkKLToxMDA1QzAwMDNGQzQ2RkJGRERGRUZBRjdCNEIxNjg0NzcyRkNCOTZDODcKLToxMDA1RDAwMENDNjU4RkQyNzc5M0YyQ0E0RTE2NDRGOUNEMTc3RDM3OEEKLToxMDA1RTAwMEI1ODVFNDdGOEI4NUYzRUYwNEZGMUZCRjg3NzU0RkNGODEKLToxMDA1RjAwMEU2MDVDRTIwRkM1QURCRDRDRDA4MkZBNkI5RDg5MEQyODAKLToxMDA2MDAwMEZFRjkyNDcyMUYxQkM1NDBGRUI2MzQzQUFCNjNENTlCN0UKLToxMDA2MTAwMDQ1NTY0QUYzOTA0RjgwODNERTFCMzIyQTRBREUzN0Q1OTcKLToxMDA2MjAwMDY1NjIzQzI0RDI3ODA1NzE3NzZGRkYyREFFNzcxMDBGOEQKLToxMDA2MzAwMDkxMkQ1OTQ5QThGRjIyRTkyQjMyMzM5MTZFMDU1RDlBMUQKLToxMDA2NDAwMEM3RkZGNzAyNkUzRkZFMjQyNzYwRjVBMzVFOUVDOEYzNDYKLToxMDA2NTAwMDlCQjMwQjAyMzY2QUIzMEUyRkRBQjU1RjAwQkExREU5MDEKLToxMDA2NjAwMDFGRkUwRkE1NUJEMjczRUY2RUZGMUREMTE1RjMwQzJFOEQKLToxMDA2NzAwMEVGMTgxMEYyQjZCMUY0M0YyOUJFQkJCRTkwRTc0REY0QkYKLToxMDA2ODAwMDc4QTA2RUU3QzY4REZCN0UwOEZERjE0MEExOUVENzJBQkIKLToxMDA2OTAwMEJFRjc3NjhDMUZFOTc5RDMzOTNDMUVFODgxREY1OEYxMkIKLToxMDA2QTAwMEMwODAyOTFFMThERjRGNUM3Rjg2NUZFODNENjFDRkE2QzIKLToxMDA2QjAwMEM5MUQ4MTcyOTRCQjg3MjQxRkZBMEY5OEFFQzA3OTU2NkEKLToxMDA2QzAwMDA1MkNDMTEwRTUxRkUyNUQzNEVGMTIxMUQ3MTRGRUQ2RTAKLToxMDA2RDAwMDUyMzFFRjM3MUI1QzBDRjM0NjFCMURDQTdFOUM3RkJCNUYKLToxMDA2RTAwMEM4RkI1RUI3RkE4MTdCRDFFRkM2QjgzNUNFN0YxRUUzN0IKLToxMDA2RjAwMDc2MUMyQjhFRjM1MUJDMDU4OTIwOTVGNUZBNjcwQkYwMUIKLToxMDA3MDAwMDFFRkFBREQyOUNCQzY4QkQwODMzMjBCQjY1M0UzM0RBMEYKLToxMDA3MTAwMDczMEI5OEM5Q0Y1QUM5RUQzMEREQ0Y1QTY2QjIxM0NDRUUKLToxMDA3MjAwMDc2RkUyMkQzRjNCRTdDMDA3ODE3NDAzN0U3RkMzOTFCRjYKLToxMDA3MzAwMEIxQjRBQkM2QkZFRkRFNDgwQ0I5NzM0Q0U0RTk4RTM2RkEKLToxMDA3NDAwMDI4NkZBMjFFQkE3N0QxQ0Y1QzQ4QTdFQjZEOUQyRUQ0M0YKLToxMDA3NTAwMDI3RUJFN0RDOUU4OEY0Qjc3RUI5NDQ3Qzc5QTRBMTkyQUMKLToxMDA3NjAwMEZBMUQ2RTA4RDBGNTVCRkVBNERFNzg1NjQ4Q0YzM0MwODQKLToxMDA3NzAwMDNDNUVDOTUzRUU0MjNBRDdFREIxNDU3M0NBREU1QzE3MTEKLToxMDA3ODAwMDg1RTcwNTE1QjMwREVENDA3MUQ1OUJFQkEyRTM5MDNBREIKLToxMDA3OTAwMERENDlBQzNFNTYxQ0VENTkzRkI3REI2RDQwOTc1NDVGQzkKLToxMDA3QTAwMDI4M0RFQjFCQThFRTA2RThFODVDMzQ5Q0Q2RkI4REU3MDEKLToxMDA3QjAwMDEwQkNFQTlGMzE3NDIwM0I0NjVGQUYwRTI3MUQwRUZBMzYKLToxMDA3QzAwMEYzRkVFNjc5QTc5RkNCQURCRjc0OUVDMUNGMzk0RkYzM0YKLToxMDA3RDAwMEZDRjQ3OUY3RDczRjIwNzFCRDcwQTdCRjZDMzlFRTE3RDUKLToxMDA3RTAwMDc5MjU0RkVENDQ3OUJBQTgzMjY5M0ZDNjFBOEVEQTM4QjYKLToxMDA3RjAwMDFGMUQ1NTEyNjk1RkZCRkU4OTU2NkFCQkIzNzhCRUQ1RDMKLToxMDA4MDAwMDhDNTc3NzY1MkRDOUI1NEJFMTM3QkVEOEMyRTNDQ0UwMzQKLToxMDA4MTAwMDNGMjlGMEU3MkNCMUJGQkU3RDIyMjNGRTZDMkNGREYxRjkKLToxMDA4MjAwMDRCOTg3RkZFNEQ5OTlEMDkzOTMzNkY2RTk0QkZCNEQxQkIKLToxMDA4MzAwMEQxMTlCQTMzOEE0RjgxREZFRTQ1QkU3NUVCNzk4NzgwRDcKLToxMDA4NDAwMDMxN0YwOEZFOEUyMTdGNjg5NjMzNkU1M0RFRTFCMDBFNTUKLToxMDA4NTAwMEY3N0M4MEZCOTgzRUI4RjdFRkQ3QzRBNjBGNDA3QzFFMEMKLToxMDA4NjAwMEUyREQwQ0E3NUI0REYwMzFFNzI3MDJCQkFBOENDRjA3NzYKLToxMDA4NzAwMEU5RDc2QzZEQ0JERDhGNzkzNTBERUNDQjcxMDBBN0Q3NDcKLToxMDA4ODAwMEYwMTFCQzE3QUZGQzk0RDIyMEFFNDJDRTM3RTMyMzY3MDEKLToxMDA4OTAwMDM2QTA5RUVDMDY5NTgwRkE2NkUzODJEQjM3NjNGQjNDNkMKLToxMDA4QTAwMEQ4MDE4OERGRkVGOTgwRkI2RkNGRTYyOTFGRkI2M0Q0RjgKLToxMDA4QjAwMDBERThENzZFQjQxN0E2NjA1RTMwQjZCREQwQkQ3MkM2NjcKLToxMDA4QzAwMERDOThGNkMyODJCQUNDM0M5QzU3OTVEMTVFRThERTUyRTkKLToxMDA4RDAwMEY5NTgwRURFNDc3QjAxN0VCQTBCRUIwQ0Y2MDJBQkNDNkYKLToxMDA4RTAwMEI5MDQ3Q0I4RkM4RDFCOTcxQkIzM0U2RjdFOUUzQUI0NTcKLToxMDA4RjAwMDMwNkEzREVFQUM3QTE2NURDN0Y4Qzc3Q0M1NTMwOEVGODkKLToxMDA5MDAwMDU3RjU5RTQzQzJCRjA3RjZEODNFN0I4Q0JBNDVGRDdCQTgKLToxMDA5MTAwMDUzRkM3QzNGQkY3RThFQzg2MENGMTNEMUVCQTdEN0RCRTMKLToxMDA5MjAwMDk1NkFCNEZCRjRCODk3REU2RjRBMjE4RjczQjQ2NTJBRDkKLToxMDA5MzAwMEFCRjEzOTRCOTg3QTg5NzExQkY1Mzg0NzU2RjY2NUEyQTkKLToxMDA5NDAwMDVFNTg2NkJERkVEMTdGNUE2NDdBMUVDM0ZGNjM5ODk3RDYKLToxMDA5NTAwMDhDNEYzQkJCQ0YwMzVENEVGQUQ1NUM4NDQzQzlEOUEwMTUKLToxMDA5NjAwMDg2RjkxMEU3MUMwQkQ5NEZDRTM0NDY3NkNFNjBGREFEMkMKLToxMDA5NzAwMEMxRjY2QjZCRTJGMkE3NzUwNThGOTc5NzY1REJBODFEMzMKLToxMDA5ODAwMEFGNEE1QjUxRkU0Q0JGMzBENDgyNzIyM0EwNEE0RkUyODMKLToxMDA5OTAwMDdDRTM5NThGM0U3QzBBRjUzNUQ4MDExODg3MDlCMDdBM0IKLToxMDA5QTAwMERBNUY5RDYwMEY1MDdDQTI3RDBFOEM5QzhENzE5ODI2MjUKLToxMDA5QjAwMDdCMjZDNUQzMzM3RTlBRThDNUFGMDVEQjMwNUVFRUY0MDcKLToxMDA5QzAwMEYxN0Q1MEQ1N0VFRDVFM0MyRjYzN0VDOTM4MEI4M0U3MDkKLToxMDA5RDAwMEYzMDI1Q0VGMkZDNkY4MEQ4RUJCRThFQzZFOENGRjVDNkIKLToxMDA5RTAwMEVCRTdGMjBCRkQzOEY0QjM5NkQ0REQzREU5NjFGOTJGNjYKLToxMDA5RjAwMDg5REIwNERCOTI3MzI5OUUyNDUzRkNDMDE0MUY3MjE2RkEKLToxMDBBMDAwMENGQTJGODkwNUUyNzExMjhFNkU3RjdCMEI0MDQzQTdGNEEKLToxMDBBMTAwMEMyMUNERjMxQzc3M0NDRjExRTczN0NBN0JFOTBFQjcxOTMKLToxMDBBMjAwMEREQkVGQTVBQTFEMUJFQkEwQkY3MUUwQzQ3NzkwQjJBQ0MKLToxMDBBMzAwMDBBRjhCQUREQ0VEMjNCMjY0NkM3NUZBQzBDRTMyRjc3NkYKLToxMDBBNDAwMDE1OUFFMjhDODM5NDVCNjE5MDJCMjc3MDIxN0I1RkI2QjMKLToxMDBBNTAwMEEzQkZCQjVDQTlBNUY4OUU5OUVFMUYxMEYyQUJCOTMwRkQKLToxMDBBNjAwMEMxNTBENzExNkU1ODIzREU4RkQzMTBDRkNCQzczQTgyMzcKLToxMDBBNzAwMDcxMTk3REUzMEM5NjNGQjZFNDJCRjcxNzcyM0Y2MzIzQTEKLToxMDBBODAwMDVFOTk0RkE1N0QwNEIzMEIzQzA2QkE2NUY1QzNEOTg5QzEKLToxMDBBOTAwMEU4QkNBRUU5QkJGQTdDRjRGMTNGRUYzQzM2MDg3ODBGRDYKLToxMDBBQTAwMDk2NEYzNjk2MTZCOTFDRjBGRDRGMDBDN0JDM0UxQTBDODcKLToxMDBBQjAwMEVDQThGOEI0MUUzRkQ3REZBQkMxQkM0MTBFREE5MzE2RTkKLToxMDBBQzAwMENBMUZFOEY3QTNFMkQ4MzZBNERCRjgzNDU1MDlDNDkwNkUKLToxMDBBRDAwMDk3RTFDMkRFQjgyOUU1MzFGNUVGMzA4QjRBNzJBMTRFQkQKLToxMDBBRTAwMEU0NkJGNEYxNkNDQ0RCNDg3QzgwQjRBRENGNEI4QTExNjUKLToxMDBBRjAwMDM3NjczRTk3MTM0ODY2QzUwNjg5NjEzQzI4ODEyOTFERTIKLToxMDBCMDAwMDE4N0Y3NkI0RDlBOUNEQjRFQTAzNjNBM0VBODcxQ0M1REMKLToxMDBCMTAwMEIzMEU2MDlDNERFNzBCNzNERUM2MjFBNUNEQzI2MUVCMjEKLToxMDBCMjAwMDNBOENGOTJCNzM3RUNBNkM1N0VCRjE3NTFCN0MwNEU3OEEKLToxMDBCMzAwMEY1MDdDNDA3NUY2RjUwMUFEQzdBOUZBNEY1N0M0MUQ3OTQKLToxMDBCNDAwMEFCRDNENTlDOUNBRjdBQjFGRUE0MjU0RURENUMwQkYzRjQKLToxMDBCNTAwMEQyMUU3MzUxRkNDMjhENzM0Mzk4ODRFMDE3RTVFNDYzQTEKLToxMDBCNjAwMEZFQTc1MEZFNUUyOEU0RTdEMUI0NTg3ODNEQ0FCRUQ0NTMKLToxMDBCNzAwMDNGQTU0NEVGNUJCODUwQzhFREUxQTcwQTY1MUUyN0IxNTkKLToxMDBCODAwMEIxMTBFRTkzNjIxMzUzODgyRkY0RkE5M0MzQTlEQ0JFMUQKLToxMDBCOTAwMDlDNUY3MjYzRTg3NjY4RkYyRjUxMjc3OTU1QzlEMzdBMzUKLToxMDBCQTAwMEJFN0Y0ODU5M0VBM0QyMEY2RTBGRjI3QUI0QzM1N0Y2RjgKLToxMDBCQjAwMDlFQTdCMjA3RkQ0RUJENUVGN0FBNEVBMzlGNzk0RDk2NDQKLToxMDBCQzAwMERERDBCRUM4Q0YzNEI1OTM4QUNDNzU2NEFBOEJFQUM4OTEKLToxMDBCRDAwMDUyNDUxRDk5OThCRjk5NEY3RUQ4QzBGMzFBM0YxNkY1MUMKLToxMDBCRTAwMEZFQ0Y4QUZEQjJGRjVCRDRFRDc1OEFGREIyQ0Y4OUZERTEKLToxMDBCRjAwMEIyM0FEQ0Q3REI1NThBNEY5RjlBMEQzNjVENzY1RjVDNDMKLToxMDBDMDAwMDcwNjNFOTM3QkNDOEM3OTM4QjJDN0E3RTY2MEZFQUE5NUMKLToxMDBDMTAwMEJFRkQxNTAzOUYwQkI2QjBEMjk4MzdCQjM2NjBDQzlCOTgKLToxMDBDMjAwMDJEQTkzNkU2Q0RGRTk0QTM0QzI5QzI3Q0NCRTRENTRENEMKLToxMDBDMzAwMDc4M0U0MUQ1MjY4OUNFMjdEOEY4RjAyNzFGM0U4NUY2ODUKLToxMDBDNDAwMDYyMzEzRjdGQzdGQzlEMjM2MkZGODVCRTdGNDNCRjVGNEMKLToxMDBDNTAwMDU2QzRFOUMzQkQyN0Q1OEU3NUY4NTU5QkFBNjY2MTNDN0QKLToxMDBDNjAwMDlENzlBNjBFQ0E3RTlCOEQzMTc4NThCN0JCQzk2M0M3RTQKLToxMDBDNzAwMDczMjBBQTQyNEIxRDM4Q0U4RDlCNjE5Qzg0QzE4RjczMUIKLToxMDBDODAwMERGQjhDQjI4NkVERDFCRjdEN0FFQkMxRURGM0ZBMkM3OTcKLToxMDBDOTAwMEZENTlENkY1NjVGMEZDODg4OEZCMkZGQkY5ODRDN0QwOTkKLToxMDBDQTAwMDNGN0FBQTUwQTk0Mjc4RkM1QkExQjIwMEFGQ0JDNDdDQ0EKLToxMDBDQjAwMEEwQkQyOEJBMEQzRjJGMjUxOUNGOUQ1ODU2MzQ0MDdDMzIKLToxMDBDQzAwMDVEOUE2MTg5RTkzRkFFMkNFMjcyMTZGNDUxNkQxMThFODYKLToxMDBDRDAwMEVCRUE4RDdCRDVFMTc4Q0NENTQxRkJFQkVFMkVFMkYyNTEKLToxMDBDRTAwMEE5Rjk0REI2MUFDNzY5RkUzOTVCRkQ1QzBDQkJGQkQ2OTIKLToxMDBDRjAwMDIyOEIzRURFNTc2OTNDQUZBRURGMDJCN0YwRjE4REUzRTkKLToxMDBEMDAwMDQ5Q0VBQTUxMDhFNzUzNTg1RjE2NjNCQ0JCOEIxQ0ZBNDcKLToxMDBEMTAwMDc4NzdEMkZCNjlCREYzQkIzQjdBN0U3REZCNjYzQzg5NkQKLToxMDBEMjAwMEM4QjRFRTFBRDVEQTAzRjRDMzFFOTZBODJFREREREU1QUQKLToxMDBEMzAwMDk5NUI4OEVENTk2M0E4OEVFNTQ4QzVDMEU3NkJGRUJEOTkKLToxMDBENDAwMEY2RDExQ0E5RjhEOUJGRTQzRTlBRTc4QTMyMDZCNThGREUKLToxMDBENTAwMEM2QkQ4MEE5QjFGMEZFNzM0MTk3N0I4QTczODY0NjA2QjMKLToxMDBENjAwMEMwOTM2M0NEQzEzMERBMTlCRDZEOUJDQTMwRUZFNzU4MkYKLToxMDBENzAwMEYzMkFERDVGMUYxN0E4ODlCNUNGMzkyQ0U4QjRBNTYyMjcKLToxMDBEODAwMDY1MDA1MzQ0QURFOUIzMENFNzM2RkMzRTU3REQ1NzE0MUMKLToxMDBEOTAwMEU1MkYzQkJDREM1RkZBNjRFQ0I5QkRBODlBMTY1NDU4NDkKLToxMDBEQTAwMDZDOTYxNEIyQjc3RDE2MzA2RDczRDc1NjQ5NUU5OTMxODMKLToxMDBEQjAwMDdGRkQwMzMzMkU4N0U3OEJEMkMwQkY4QjVBNzdEMUVBRjIKLToxMDBEQzAwMDlGRUUwNTc2NjVDNTE1NDc5QTUzQTBERkNFN0MzNThDMUUKLToxMDBERDAwMEUzOTc3QUU1N0REODVFMTRDOEE2N0FGN0Y1NDk4Q0VDREUKLToxMDBERTAwMEJDNTNFMzFDRTQ4Rjk4RTc3RDQyQ0MxQkU0NzI5M0VEODcKLToxMDBERjAwMDczQzhFNTE2OTM5QzZDNEQxRkRGODRGMzFGNUZDRTIyRjIKLToxMDBFMDAwMDI4NjEzM0JENjdDQjMwMUYzODI5NEYzRDgxN0M5NkU5N0YKLToxMDBFMTAwMDY1OEE3MzMyREQ1NzU4NTQzRUM3M0NBRTZCMUFEN0I3NUMKLToxMDBFMjAwMEUzMjM2OUY3NjM3Q0Y5QjBFRUVGOTc3RTZFN0ZGRjZDOEEKLToxMDBFMzAwMEQxMDBGRUZFMjk5MTFGNjhGRDhFMzM2NjVFRTRENENBQTAKLToxMDBFNDAwMDg1QjFGMzAzMEZEN0FENDBCRTNGRjUxREEzQkY3RjZBNDkKLToxMDBFNTAwMDRCNzUwREVFRUYzQjI1RjIwM0E3NjZENjBEOTgxRkQwMUMKLToxMDBFNjAwMEQ3MDk3MkM4MzEwREU1NTA2RjdFNDBEOEVEMjJDRTNERDYKLToxMDBFNzAwMDNGNEY4OUMzRTdFMENGQzc0RkNCQTM3REU4NkVCQzMyQkQKLToxMDBFODAwMENENzMzREVENDM2NkIxRjdDN0IyNDczRDBBRkEzOUZBNzMKLToxMDBFOTAwMDdFRjYyOTdFMzUwNUM3RDFGN0M5OEU0N0QxMzY4Q0Y2NDcKLToxMDBFQTAwMDc1REYxQThCOUU0NzhCRjlGREU1NzlEM0RFQkNBNjk1REQKLToxMDBFQjAwMEY2NEYwRjMyNkUzRkQ4N0VCMkJGOTNEN0UzRDg3ODlERkUKLToxMDBFQzAwMDYxNUM2QUI5MTdGMzU1RTcyN0JBNDhCRkI3RTFGRkEyREIKLToxMDBFRDAwMEY0NkE3QTkxOUEzNzZENzhGNDM4QTZGMzU0RTVDMTdEQjcKLToxMDBFRTAwMDM3NUVGODlCQThBRjUwNkY3NTMzNTY4OUYyRTZEQjQ5NDEKLToxMDBFRjAwMEY1MTRGNzk4MjFFMDY2QkVDRTlBMjZGMENBM0MyOTA4ODAKLToxMDBGMDAwMENGRjRBMkMwNENDMkUzRjM5RDMyOURGQjJBRUVCM0FDRkEKLToxMDBGMTAwMEMxRjk5RkNGMzgwMjZGRDNCRUZBNzI0OUU2NzU3OThDNUEKLToxMDBGMjAwMEY4RTI4QTJDMEZFOTY5RERGRUFBOURDNkU1QTY5MzQ1ODUKLToxMDBGMzAwMEM2M0E2MDlEQ0RDQURFODQxQ0U4RjdFRUEzQjY2QzdDOTEKLToxMDBGNDAwMEVEMDc4OUNDOEVGMzBFNjQ4MTlDODM3NTk0N0JENUQxOUIKLToxMDBGNTAwMDAzQzk0NzNDODlDODhBRkIxRTU4Qzg2MkY1RDIzNTk5MzcKLToxMDBGNjAwMDVGMzUwQkRFQkY4ODFGMUYzRDM3MUNFREYxMUYzQ0M2RjAKLToxMDBGNzAwMEYzNTU1NzNDQjZEMkI1MjI2QUZDODdBNzA5Qjk5OUM2ODIKLToxMDBGODAwMEU3NUZBMzU4ODI3MjA2Q0VFNzJDRTVBNUFBNjRBQjRGQjMKLToxMDBGOTAwMDYxOTg0NzNFN0Y2QzA5QzYwOUMxN0UxQjQ3RUQ0RkE4OEIKLToxMDBGQTAwMDFEOTZBRDM5OThFNzdFRDdGQkYxMzFFQzdGQzUzNzZGRTEKLToxMDBGQjAwMEJDOENFODVGQzBFMzg2QjUzOUNGOTA5RDlGQTdERTgxRUEKLToxMDBGQzAwMEY4MEYxNzdGOTIzODY2MjJEOUYxOUI5MUZFNkZCMEIwNkYKLToxMDBGRDAwMDQwMkMzQjY2ODNDMERCRDU0QUZENzU0ODY3NTcyQjRFRDYKLToxMDBGRTAwMDg2RkJENUMyNjU0RTgyRkIwRjRBMkMzMkRBOTVGMzkxMEYKLToxMDBGRjAwMEU2MzE5RUYzQTg4REUyQ0QwMDhGOUJGMUY5MjE5RjlCRjYKLToxMDEwMDAwMENFODkyRTU3N0U2QUMzRjY5RjI2NTlEOEU1MDNFOEUzQkEKLToxMDEwMTAwMENGMEREN0UyNEY4NjIzM0ZCRThCRjQxNzYzRkVCNTYyMzgKLToxMDEwMjAwMEZFM0EzRjAxRENDQjY5NUUwQUFGMUZFOThGQUVGRTU4ODYKLToxMDEwMzAwMEE4N0MxN0UxRDQ5NkE5QUVBNkYzMTAzRDBCMDY3NTFFNDkKLToxMDEwNDAwMEUyRkMxRjA2QTk3NkNGRjlGREZBMTEyQzQ2RkRENzYxMDcKLToxMDEwNTAwMEMxMjdFNkZCM0Y5Q0M2RkQ4MjFCQTdGMTdBQ0IyQjFFNjYKLToxMDEwNjAwMDNCNzc2ODM2RjJGNTVBQkIwN0YxRkE1NDYxRTBDN0QzMTMKLToxMDEwNzAwMEEyRkRBRUJGQjIxQzk5MjkyRDI3RkM4NUU3QzBEQ0Y5ODMKLToxMDEwODAwMDQxQTA4OUQ4OUUzN0Q2NDZGOEQzQ0FDNUY5MUU3NzMxMTQKLToxMDEwOTAwMDRGNzMxMkJENDU2REQ3NUEwQkYxOTkzQkExQTMxQThEMjEKLToxMDEwQTAwMDY2NUI2MUZEQjE2QkYxQkQzMjg5RjZGMzQ3RUQ3MzE5RjMKLToxMDEwQjAwMEIwOEUyQzIyRjI1OTJEQjhFRjBDNkNGOUYwM0E0OTNGNjIKLToxMDEwQzAwMDZGOEI1OTQwQjY4NTJCNkNDMkJFRkZFMDMxNjUyQ0YwQUEKLToxMDEwRDAwMEJEQThDRjNDRkVBMkY1NzFBQzZCMzk2NkU1RURGMDhCOTcKLToxMDEwRTAwMEQ2NTE0RDQwMDc5MTUxN0MxRUVEMEY1ODdDOEQzMjVFREMKLToxMDEwRjAwMDlGREM4Qzc5MDY3NThEQzU1NzA5RUQ5QUQwM0Q1RTBDNDUKLToxMDExMDAwMDcxQUQ1OEU3NjRFODJBQkM3N0VGMTU2NDJGN0VFMjY1N0QKLToxMDExMTAwMDc0QUVFQzkyNTRDRTM3NzU2MTE2QjQ2NkY0RjlCN0VGM0QKLToxMDExMjAwMEE0QjNBMDlFM0ZDNUZENzM3RUExNjcxRUM0RkQ2QjMwQjYKLToxMDExMzAwMEVGMkY2REY4QkE3NjM3QkMxNzAwQkYxN0UzNkFDMzdDOTAKLToxMDExNDAwMDNDQkYxOTFGQjZGOTgyMENGRDVENUUxRkQ5RDI2ODYxRTQKLToxMDExNTAwMDBGRTIzOEQyODY2NkY0Q0Y5RDIyRkYxMUFGRDQ5MkZGMDIKLToxMDExNjAwMDM4MENFODUzQzY4ODc5QzQ2NkQ4QkZBNjMyOTVFODM3RUMKLToxMDExNzAwMEI5MTIzODIzMUJBRjQ2RkYzOEY3MTJGQkQ4OTY1QzNGRjUKLToxMDExODAwMDNDMDlGOUU1REMzNEEzNUZEQzVGN0M1REJGRTIzOTM3MDUKLToxMDExOTAwMDg4OUYyRTkxNkZERDAxNzYzQkFFRjdFNzYwQjdFMzc1NzAKLToxMDExQTAwMDE3RDhFRDc4MUZDRkE1QzYyQkVFNjNDM0VCMUVCMERCQkYKLToxMDExQjAwMEYxOEFGQkQ4RjA4QUZCRDhGMDhBRkJEOEYwM0REQ0M3NzcKLToxMDExQzAwMDg2NTdEQ0M3NDZGQjBFNEJCNEQwNTA4NDRGNTkzQ0MzMDYKLToxMDExRDAwMEZDNTA4QjlERDM5OTk2RUVBMDNBRjc1MDA5QTM3QzdFRTQKLToxMDExRTAwMDM4RERCMUI1MDlFMzc1MTY4RTI3MkQ4OTNGMEYyN0FBODMKLToxMDExRjAwMDVGQTE3NkM2NDQ5OUQ3QzVCMzUxQjg3RjcwOUQ2NUEyRUIKLToxMDEyMDAwMDhDRjY1MzlCNDNBNjNBRkM1MzREMzZEQTlGNzA2MkFFODAKLToxMDEyMTAwMEU1NkRDQ0JCMzA4QkQ1Mjc4MTdERjNDQkNGNkUyNUY4MjgKLToxMDEyMjAwMEQ3MkFDQzhBRjJBMTA5Q0YwQjQ1NzlGQzIxMTNFNzE3MDUKLToxMDEyMzAwMDg0MjUzQzU3QUUzOTkxMDk3QUJDMkVBODgwQ0M3RTFGRkMKLToxMDEyNDAwMEJGNDVGNDdBNDA0NUJGNzhCQTUzNkZFRjU1RjE3OUVENTkKLToxMDEyNTAwMDFBOEJFOEZGQUIyMEQyNkZBQkRFNUYzQkY0MDRGQUFGMzIKLToxMDEyNjAwMEVCNENFRDZFQUJGRUZFNjg2QTFGRUJGRERFQzgxQTA1QTcKLToxMDEyNzAwMEU5M0Q1MzdGOUU3QTAzQjYyMzcxRkFGQjdGQkMwMUZCRTUKLToxMDEyODAwMDEzNUNBOEVFRURENDEzMzg5RjEzRTk3QTdGQjk4NkRBQTAKLToxMDEyOTAwMEJENzU3M0Q3QUJEOEZGQzQ3MERFN0ZDQjlFODM0RjYyMjIKLToxMDEyQTAwMDlEQzk1RjdCQkM2NjU1QTMzOEJFQjY4OEIxQTc5MzJFOTcKLToxMDEyQjAwMEE2QUY3N0E3NEJDNjc4QTg2MjMxQzQ0M0Y1RjhCQkQ1NzMKLToxMDEyQzAwMEJERkM3MkRBN0ZENkU0MjRCOTE4NDlGN0Q1QTBERUVFNkEKLToxMDEyRDAwMDJGMkUxQTE1QUZBN0I4RTg4RkE2RUJGNUNDQTZGODI3RTYKLToxMDEyRTAwMDcwMTY4RTVCOERGMTQwMUY3RDU1OERERTlGQzYyQ0Y1RUYKLToxMDEyRjAwMDIxQUM1MzBGOUM0OTk0RDE4RTc0QTQ0NUM1RUY4NDBDNDYKLToxMDEzMDAwMDE4Mjg1RUQ4NUNDRkUzODM2MUQ1NEVFNzc3RTg3NUZEOUEKLToxMDEzMTAwMDhFNjI1MUQ3MkZFMjg1N0E1RDgzQTNGODYxNDNERUMwRTgKLToxMDEzMjAwMDFDMkY2NEQyQ0Q5NDhGMEVBQzM0QzYwM0U3QUI5RjJGMzUKLToxMDEzMzAwMDVFQjg5Qzg1RUM5NzIzRkQyQjE2QUE4QjU4RUU5MURGQTcKLToxMDEzNDAwMEI5MENFRDY4MzY4MTlGQ0IyOEJGMTRFQ0FERUI5NzY5RTMKLToxMDEzNTAwMDE4MTlDRjlCQUExNkVERjY1QkRFN0IxQkZCMDc5QkUyMDEKLToxMDEzNjAwMDY0REM4NEJGRUNFNkIyNzcyRTIzRDMyRDgxNjE3QzZCRTUKLToxMDEzNzAwMDU5MDkzRjk3MzFFRjQzREY0QjMyQ0E1M0FGRDVDN0NENDEKLToxMDEzODAwMEI0QzAzNzUxRkUwNjU2MjY1MURFRTRGQTNCMkNGNEREOUMKLToxMDEzOTAwMDVBQ0RDRDEwNEU2MDU3MEE3QUVGN0ExQ0U5NEI3MjVCM0EKLToxMDEzQTAwMDBDRUREQzUxM0FCRDVERkIzOEQyRkZGNDY0QkQxREZGOEUKLToxMDEzQjAwMDA0RjI1Qjk5NDM3RjNGOEZEQTRCNTU4Qjc4OUVGNTg0MUYKLToxMDEzQzAwMDAyQUFFNDU4Qjk0RURGMkZEN0UwRjM2QkM3RjQ4RTQ3N0IKLToxMDEzRDAwMEY0M0REREFEQjdBRkI5MDE5RkI3RjU4RTU3NDdERkZCRTEKLToxMDEzRTAwMDBEOUU2ODQ0RUQxOTRGMjAzRjk3NTUwOTdEQTVCREY3MjcKLToxMDEzRjAwMDM4OEVERkIyNUMxRjdGN0MxMEVCNTA5NzU5RjVGNzU5QTAKLToxMDE0MDAwMDEwQzdBRjYzQkQ2RDA1RjVFMjVCODJGRkJCOEIzQjZCMjUKLToxMDE0MTAwMDMwNUU3NTVERUZGMzRFNUFFRjcyRDE3RUJENTg3RDAyOUUKLToxMDE0MjAwMEY5RTk1RjdFN0Q3RkU3RUY5OURCRDdCM0YwQ0NDQjczMzMKLToxMDE0MzAwMEZCRjhDMjJDQUY3RTU1Q0FFNTg4N0ZGNTRGOTFDQ0Q5MTkKLToxMDE0NDAwMEYyRkEyN0U5NUMzNzhDMDdGMDdDNTZFQUEyMDBEMkI3QTMKLToxMDE0NTAwMDRCRjIwMTY3QjA4MDM3MzAyQjU2NURGQ0NBMTIzRUNFOEUKLToxMDE0NjAwMEU5NjI2MzVFQUNDNTk0MTcwQjg4RkM1NDdGRTMxQzJBQzkKLToxMDE0NzAwMEU1NzE5REI2RjJEODdFRUNBNEJDRjI4RjhBMzE5RUMwOTUKLToxMDE0ODAwMENFNEEzODlFNDcwNTUwODIzRERCOThBM0ZFMTlFRjAzRjQKLToxMDE0OTAwMEVCNTY5MDNEQzc5ODBGRUY4MzVGQUNBMTlEMzkwRkMwMEQKLToxMDE0QTAwMDg5NzlEOEM2RDI0NzI4NEU3RkEyRDA2RTM4MDc0NENGNUMKLToxMDE0QjAwMDczNkU3NDI4MjQxRkRGQzNCQTBFOTA4RkNCQ0E5NTk5MjAKLToxMDE0QzAwMDU4Q0Y3OEUzMDg4OTZEQTU3QUIyMDRDQTM3RDg0NjNBNkUKLToxMDE0RDAwMDlFMjRCOTJFRjI5RUZBMzkxQ0YzMkVCMTJGQzJCQzJGRDYKLToxMDE0RTAwMEU1OEY2MkJEOUYxNEI3REI1MTNFNkI0QzlCNTk5MTRCMEUKLToxMDE0RjAwMEYyM0E4Q0Y1Qzc1NkY3MDZDQTAzM0I0QkVEOTQ0N0QwM0EKLToxMDE1MDAwMEYzQ0Y3NUUyREM2RjNERUYzQkZEQzI1MEFFREZCM0Y0Q0QKLToxMDE1MTAwMEI4RUVDMEY5REZCQTM1QkIwMzY0MUY3NDQ4Q0M5QTcxQ0EKLToxMDE1MjAwMDcxM0VCODM2QTBBNURGODVGNjZGNDUyMkVEMTdBODVFOUYKLToxMDE1MzAwMEYxMzI4RDdGNjQxNEEzRjg3QkZDQTI3QURBMUY2NDAzNzYKLToxMDE1NDAwMEZCNTBDMTdBMTc5MTJGRDZGNzc5OEZCRUYwMzVEQTM3NzUKLToxMDE1NTAwMEFBRUFGNUU3RDI5QzIxMjgyNzlEQURFMDY3RDE4MDFDM0YKLToxMDE1NjAwMDJFN0FCRUI4Q0EyNEVGNkI4QkY5Mzk3MzBDRUNGODcxODQKLToxMDE1NzAwMDQ5Rjg5RDgxRjczRERGM0Y5RDlGRUY3N0IyODNEN0YzMTkKLToxMDE1ODAwMDE3OTQxOEYzQzdFQkVEM0NDRUQ3OTY2OUE0QUJFRjRGOTkKLToxMDE1OTAwMEU3RkVFQTgzRDM0NTNDQjFGNEM3RDUwODk3NEY5OEQ1MDkKLToxMDE1QTAwMDg3NzkzMUY2MjgzRjBGMEU2MzJDQjRERkNBN0MwRTczQTcKLToxMDE1QjAwMEQ2NjJCMkVCMUUxRDBENEIwNDVCREJCNkU2MkQ4QTJCMEIKLToxMDE1QzAwMDVBMzZGM0Y3M0U5Q0NDRUFEMTZGQjFEOTc4MUIyRTFBNkMKLToxMDE1RDAwMEU2RkZBN0Y4RDUzOTI1NTgzRkI2RTYxREVBREZBQ0YxOUUKLToxMDE1RTAwMEZBRUZGRUUyMzdENTI1QkFCRUU3RjE5QjY1REUwMzNEOTMKLToxMDE1RjAwMEI4QUZFQ0JGMUNDNzMxRUQ3QjBEQzhCQ0JFNjQ1REIxOUMKLToxMDE2MDAwMEFDREIxNzc0MUUyMTEwQUUxREVEQzVGNEEyQzAwQTlDMDAKLToxMDE2MTAwMDM3OUJEODI5RTMzQzc0NzkxMzJBRkQ2QTBEQ0ExQkE2QUYKLToxMDE2MjAwMEM0Q0U0QkVCN0NERjYyQ0E0QjA3QkNGQ0ZENDNCRkI4QUEKLToxMDE2MzAwMEFCMDZGRjNEODhGRUYyMTA5QkNBN0FGMzA2Qjc5NUUwMzEKLToxMDE2NDAwMEJDNTJGNEJDODE3MjNCQjZGQkY0MjgyQ0M4NkZEMEEzMEIKLToxMDE2NTAwMDM3QUNGRTZGQTA0NzdCRUQ3NkVENTgwRENBRDUyRkRBN0IKLToxMDE2NjAwMEZDODFBRUZFOURFOEFBOTJDN0NGQkU2OEYzMkY5QUE2NzIKLToxMDE2NzAwMEVDQzNGOUZGQURCRjczRDVCNEMwNkJGODlERkIyQzRBMkEKLToxMDE2ODAwMDc1MDI0RkVFRjkyQ0M2M0M1RjRGQzkwMDc5QkU0QkM1QzEKLToxMDE2OTAwMDFGRkUyN0RFMzA3MEJDQzE1QUZBQ0YxOTZGQjBFMzlFMkYKLToxMDE2QTAwMEFBM0NFMkEzQ0I0QTkxOEY4QTM5MUZGREFCQ0IzRDU4QjAKLToxMDE2QjAwMDZGNkUyOUYxNDM2NzMwN0VDQzVGREZERjRGMkY1MkNCNTcKLToxMDE2QzAwMDRCNDkwRkFBRDYzRDQwM0ZGNzk1QjlCODNEMTNFMkYwMUMKLToxMDE2RDAwMEVEOEI2N0MwRkNGRDg2NzhDNjEzQUJGRjA2RjEwQzU4OTYKLToxMDE2RTAwMEVGMDJDMjZGODVGOEZFMTcxRjdGMzcxMzdDMTU2RTRGMTAKLToxMDE2RjAwMEZDMEJEMjY3MUJBREFGOTNBRkVGMUZGMEZEQ0Q0NDJGQjYKLToxMDE3MDAwMENGNzI3QUU5ODMwRkI3OTNBMkUwNzNDM0VBN0YwQzdDQjAKLToxMDE3MTAwMDlFMjVGOEVDRTBGM0ZCMDJFMDczMEZDMUQzQzdFNzdCMzMKLToxMDE3MjAwMDI5RkZGQUFENjI5RTBGODFGNzVFQTY3NUU2NzIzQTc4RTAKLToxMDE3MzAwMDVCRDhEN0UwNzdDRkI4NUNFRUYzQkJCN0U0MkJCRjJFMTYKLToxMDE3NDAwMEU1NzlFNEMzQTU4NkZBNEYyNThDRUQwMUZDRTJFRUQyRTMKLToxMDE3NTAwMEQ4N0VGMTlCMzhERjJGOUE1RkVDMkVFMTcwRUJDQkJCOEMKLToxMDE3NjAwMDA0Rjk3OUI3QUNGQUVBMkJFMTNCRUYwMEJDMzFERUQ2RTUKLToxMDE3NzAwMEJFNDYyMkZCRTI3QzFBQTNGMzAwNzQ3QkUzNDQxMkFGNjMKLToxMDE3ODAwMERGQkI3ODdGNTg0NTA4RTdFRDJDRTRFNzhDRThFNzAzRkEKLToxMDE3OTAwMEQ4QTRFNTQzNDNGMkM1NzA3RDc1ODhFQ0MwN0Q0ODJCMjUKLToxMDE3QTAwMDE0NEIwQjlFMTMzODQzRkI4OEY2OUYzOTE0MjdGRDNCREYKLToxMDE3QjAwMDVCQTNCRDNFRkIxREU4NDc4MzlGRkIyNUFDQkY1Q0VERjMKLToxMDE3QzAwMEExRkQyN0ZBM0UzMzdERkZDNzhBNTBFQTAxREM3N0RCQjMKLToxMDE3RDAwMDBFRjQ5MDBBREY5OTVGNjFEQzBGNjJCNjM3NkNBNkI2MzMKLToxMDE3RTAwMEY5REYzMTREOUU2RTNDOEYwQUUwNEZGNkNGRjkzNjVFNDEKLToxMDE3RjAwMDFGRDc2RTYzN0JCMEZFNDNERDIwMDVDMTY0NjI0RjZCNzMKLToxMDE4MDAwMDE2M0E4NzczMjVDMEM5MEFFRDE5MUQxOTU0NEZFRTQ4QzEKLToxMDE4MTAwMEUzRTc5REU5RkZDRTI5RDA0MTA3OURFNzc0NEM2Mjc4NEMKLToxMDE4MjAwMDlGODk3RDY1RkFGOURFNzE3M0Y5Qjk3QTExNTgzRjlFODcKLToxMDE4MzAwMERGQTM5RjMzNTEyNUU4NDQ4NzY3RENGREM5MDQ5N0YzOTQKLToxMDE4NDAwMDAwMTc4NjcxNjYzRkI3NDdFN0FERTFGOUUwOTZFNTM3RTcKLToxMDE4NTAwMDg2OTE4RDZBOEEzRjVBMTdBQjJFNjVCMUQ3Nzg0RUJBRkEKLToxMDE4NjAwMDM5OUU2MTNFNjdEQ0M2MDI0M0YxRkM4QUY5QzU2NTFBMDAKLToxMDE4NzAwMERBQUI0RTUxQUYxOUNGMTQzQUQ3MjJBMjNEQzVDRkI1M0UKLToxMDE4ODAwMEE4QjAxQkNFMTEzMTdGMzdERTQ0QTc0RTUzRENDMTRDQ0MKLToxMDE4OTAwMEE3NjZCQ0NDMzJFMUU1NjkxQjNGQzdCMUE1NUJGMjY5MjUKLToxMDE4QTAwMDcwQkI2NUQzQ0EzNkRDQTdBRjZEQjJGMkJBNzlBNkQwRTkKLToxMDE4QjAwMEI5NEYyRDYwRjFEMjdFNzQ5ODJDQzZFQjk3MDg3OEVBNjgKLToxMDE4QzAwMDc4QzE4M0JDRUU0OTQxMzkyMUY2QTU1QkVCRUZDNUZEM0MKLToxMDE4RDAwMEE1NEJDNUJFRjRFQjU4MjdFRDMzQjg5RTQ1RUNFODBDOUMKLToxMDE4RTAwMERDODAyMTcyMDlFM0REQjI4MzNCMDcxRTg2RjNBOEFCREYKLToxMDE4RjAwMEU2RTc2NDU4NzEwRDk4MjdEODY0MjU3RTZERjFFRUExNTYKLToxMDE5MDAwMDdGRUYyQjM0QzI5RTc0M0E4QkZCMTNCMUVDRDlERUI4NTcKLToxMDE5MTAwMDAyNDBFMjc0NTQxQ0ZGN0ZFMjU3RkZCNUY4NTU1RTA5QTAKLToxMDE5MjAwMDNGOEZBQTI1MkVFNDI5Q0NFMEU3NERFMDNFODdCQzEyOEMKLToxMDE5MzAwMDU5OUMzNzIxOEZFQTAwM0UzOTdDREYwNzFBQ0E2MTdENDYKLToxMDE5NDAwMEJGMDNGQ0FDQkRDQzc4OEVDMkU2RTkwM0Y4N0ZDNTI1QTkKLToxMDE5NTAwMDhDN0YyNzIzOTI4RTc1OTVFRjg4NzNGQkNDRjhGRDI1M0QKLToxMDE5NjAwMDNBMEU1QzBGM0QzOTlERjJFRjYwRkZFNkEyRENFM0Y2MzQKLToxMDE5NzAwMEVGRUM4MkMwNTNEM0E5MUU5REVGN0JENkUzNDgyN0ZEMzEKLToxMDE5ODAwMEVBMEZGMTdFMDlGRUJCMzlCOUI0M0YyNzg4RkI3N0U2NDEKLToxMDE5OTAwMDI3NThGNjVCRTRCRUVGMzM3MzFERkI3RkQzQkNENUVENTgKLToxMDE5QTAwMEM1MUMxRUUxMzg1RURGMUFDRTYwRDVDRkM1QzBDNzQzNjcKLToxMDE5QjAwMEU1NUMxRjg2QjM2M0UzNEI3RjBFNzZDNkVCODgyRkY0OUUKLToxMDE5QzAwMDg3ODY3MEEyMzhFMzMwQzYwNzhFMEY0NDFGM0ExRTkzRjUKLToxMDE5RDAwMDY3MkFFRjEwREVGNTdBRjAwMkY1MjRCNjlCRDVDMERCNUUKLToxMDE5RTAwMDc0N0VEQjA2NDk2RTQ0RkQxQTkyNUZDNUZERjVGM0JFQjkKLToxMDE5RjAwMDI1NzkxMDhFN0ZFQjNDRENCQUUyOEM0MUU1RTE5NjIxNDMKLToxMDFBMDAwMDlERTVGNTJGQkZGRUQyRUJGRjA3NDJFN0ZCQ0IwMDgwNDEKLToxMDFBMTAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJFRDdEOUYKLToxMDFBMjAwMDBCNzg1NUQ1OTVGMDNFRjc5Q0ZCQzg5MzFCMDhGNDIyMjQKLToxMDFBMzAwMDAxNEYwMjY4RDQ2MDJGRUYwNDA4OUU5QjlCMjcyNDcwRkYKLToxMDFBNDAwMDQxQzAyODBGNEYwODYyNkNEMTQ2NjUxNDI4OUQ5QzkwQjgKLToxMDFBNTAwMDEwNDI0NEMxMTlBQkFENzVGNDEyMENGRTdGQzdBRkE2OUUKLToxMDFBNjAwMEZEQUQxNUU5RTM4MjY4QTk4NTFBNkRBOEIxNTUxQTkwRjQKLToxMDFBNzAwMDVBRkE4RjlEQzEwQTYzRUJFODM4NkJBREJEQ0ZCREU3NjUKLToxMDFBODAwMERDRENDQkNCRDhBMURGNENGOEY0NjQ5RkZENUE3QkVEQjYKLToxMDFBOTAwMEI1RDY1RUFGN0Q3MkQ0QzkxODlCMDFGRjE5OTNFQkI0MjQKLToxMDFBQTAwMDAyQzYzQUIwN0MxOUMzMUY4RDQxNzlFOTUwNEIzOTA3MDIKLToxMDFBQjAwMDlBRjZGMkY2NTc2OEZGMTYzNkM2MzE1NkNGNDQ3RkQxRjQKLToxMDFBQzAwMEZFMzcxMjZGN0YzNDMwMkM2Q0E0MzM3NjkzQTg4N0IyMjQKLToxMDFBRDAwMDhFNjVCMzNGNjM0QTZFNDA4MUZFMEQ5MjU5REVBOTI5OUYKLToxMDFBRTAwMEQ2RjkzMjc3NkEzMERGMDlBNzdERkM2NTYyQkM0MkVEMkEKLToxMDFBRjAwMDEzMUEzRjE0OURGRjkzQjAwNkU1RkUzOEY4OTczMzVFNDYKLToxMDFCMDAwMDJFRDVGRTQyRURFQjk4NTlGRjE3MURENzdCNUMzMkNCRUIKLToxMDFCMTAwMEUzNzVFQzdGQzQ2NTk2QzdENkUxRkMwRkU0RjJGMTY3OEMKLToxMDFCMjAwMDk3OEMwRjFCOTcyMDNDOUZGN0Y4MTdEQUZFRUQ1OTJBODgKLToxMDFCMzAwMDYzQzMwMTFGMERERjBEN0UwMTdFNURENkI4NTNENkExQjQKLToxMDFCNDAwMERGNTE2N0U4NkQ5NjBENjRGNkEwQTQ3NjQxOUY0MkQ2RkEKLToxMDFCNTAwMDJEMzM5OUMwNzZDOTUzNjAwODRENjIxRDMwRDdBQTEyNDMKLToxMDFCNjAwMEY4REY1NEMwNjNCQTgzQ0Y2M0Y4QzMxQUQwRDlEMkQ5OEYKLToxMDFCNzAwMDI2OURENjg2NzFERTY0NzRGNzlCN0Q3NzNDOEVFQjhFNTYKLToxMDFCODAwMEMyNkREQ0IxQzIwNkI3MzFCRTRFOUIxNTgzM0JCODFGOTgKLToxMDFCOTAwMERBQzM3ODRCRUZCOENEODc3MDJFQ0QzM0Q3Mzc4M0U2RDUKLToxMDFCQTAwMDY5Q0IzMkZCRjU5Rjc1REU1N0Y3OTUxMkJFOTc0NkU3NzYKLToxMDFCQjAwMEE5QTJGNjRCNTNDREYxMTY4NDcxREUxODNFOTdEMDdFNjQKLToxMDFCQzAwMEM0RTAxQTZEQzNBN0JGNjQwOUUxMzNFNDBENkYxRTAxQzEKLToxMDFCRDAwMEY4MDlGOTk4REYwMDdDREVENEQwMkNFQjA1MTYzRTMyRjQKLToxMDFCRTAwMDgyMkFGMTkxMkY1QTBFREJGOUE4ODBGODY4QjBFMTFBMjkKLToxMDFCRjAwMDNEMjNCNDU1ODM3RDYyRjlERDZBNjhDMkU3QjFFRTg4QTIKLToxMDFDMDAwMEYzMEJCOEVFNkQxMkFEREJBNEEzNjU1RTBCQkQ3QjYwN0MKLToxMDFDMTAwMEREQUE1OUJFQjJBRTIxN0QzMEU2RUQyOUEzNzlERjAzRkUKLToxMDFDMjAwMDdDQjMxODNGMzE2MzY0OUQ5NjdFRTFFM0I1QTRFN0I5QzgKLToxMDFDMzAwMDcwQkY1NjZBOTIxNjg2RkU5RkUyQ0Y3NUIxRTdEQkIzOUUKLToxMDFDNDAwMDI0RTIxN0MwRTdGRjIzN0MxNjAyM0UzM0YwM0QyMzNFMUIKLToxMDFDNTAwMDc4NjY3MkU4MDcxQUQ0MzM1NTc3RUMwN0I4NUM5QTg3MzAKLToxMDFDNjAwMDc1MDAwRUFBQTY4N0Y2NTA3QkI2QzM4N0Y4MDcwMDY4RjIKLToxMDFDNzAwMDlDQjZENzk4ODI3QzA2QkNFNTc3Q0M4NEIyOTNENTc2QTcKLToxMDFDODAwMDE3MEM5Q0Y3RTExMjA3QjU2RjYxQUNCMjFCRTA5QUIyN0EKLToxMDFDOTAwMDI5QjQzQTY0NjlFNzJERTM3MDY1OEFFNzkxOENGRUU1MjMKLToxMDFDQTAwMEMzNjFGRTc3QTA2QTEzOENERkIyMEQ5ODE3OUVDNzFBMjYKLToxMDFDQjAwMEE0QjAwNDREOEVFNTc4RTcxNTQyN0Q0RkFFQzNCRjA5NTEKLToxMDFDQzAwMEE2RUY1OUVGMUVCRDE2Q0E3REI5RTk3RTg0QUUyRjZCMTMKLToxMDFDRDAwMDQ3ODYxN0U2MzlFNjk3MDU5RERFNzYxQ0Y5RkE0ODQ2RjEKLToxMDFDRTAwMDk0OUYwQzNDNUY3QTI0NUVGRTk1NTZENDg5RkNGNEE2NDIKLToxMDFDRjAwMENBQ0JERjJBRkRGMjcxQTMwMEU5OEQ3OUQ5MDhDMDAzQjAKLToxMDFEMDAwMEY2MDA1RTc1QTRDREYyQjgwMTBFNTczOTg4MTNFQ0VCREUKLToxMDFEMTAwMDY1QkEwQkVBREQ1ODBGNEI1Q0IwNzlEN0Q3QUZBN0QxQzYKLToxMDFEMjAwMDZCNUYxRTM3OERCMTVBRkM1REM1RkU4QUQxRUZBMTc5N0MKLToxMDFEMzAwMDk1NEYyNTdBMzJFN0I0RDhCOEFFRDY5Njk3NUExMDhGMTkKLToxMDFENDAwMDNFOTk5NTIwNkZGOTc4N0IxRkVCNkZGRUQ0ODFFMzQzQkEKLToxMDFENTAwMDM5OUYyMTA5RUVGQjE0RjY1QzEyNjVGQ0Y5MTQ5Njk4ODQKLToxMDFENjAwMENFNDI5NUI5MDg1NzNFRjM3N0MwN0MwQjc0RTc4OTY4N0IKLToxMDFENzAwMDNEN0Y2QzUzQTYwOTM4MTExRTc5NjM2NTIxRkM5QURBMDAKLToxMDFEODAwMDYwNkYzNzM3MUZDQTlFNTg3OTRFNkI3RDA5MDNCQ0NFRjIKLToxMDFEOTAwMEQxQTBEQjQ0QzYwRUI1RDY0N0VBNjE5RTQzODU2RUFGM0YKLToxMDFEQTAwMDA0OTg3NkU1MjhCNkY2NzM1OTc3MkJFMjlEQTkwNzBGQkMKLToxMDFEQjAwMEM4ODA5NzE1NjJCRTE2RUY4MkI3NzE5Qzk1Rjk1MDAyRTQKLToxMDFEQzAwMEY4OEY3QzM1OTAzMTM1MUJGOTRERjYzQjQ0MUI4Nzg5RTQKLToxMDFERDAwMDBGNDZFRDlDOEU2QzkyRDM3RURDRUY5NjE3Q0M3RDlCRUMKLToxMDFERTAwMERFODk3QzIwQTc0OUI2NzJDMDY1RDY0RkU4NDQzRTNDRTgKLToxMDFERjAwMDEyOTVBQkUzNTY2Mjc5RjE1ODkzNkYzMjNBOTFBRkFFRDgKLToxMDFFMDAwMDRCMzNDQkFFOTVDODQ3RUYyODRFNDEyN0MzM0I5MTRFOEQKLToxMDFFMTAwMERBQ0RGMThDRUQyNDVGREU2MDY2QkQ4M0VBNDM1MUY5RDMKLToxMDFFMjAwMDU3QkUxM0NCNEJCQzAyMUVFMzFGNDgxRUI2NjhGQzNDREEKLToxMDFFMzAwMEI5NkE1RkE0REZCODg4RjZDMDlGNTcwNjkwREY0MjVDOUUKLToxMDFFNDAwMERFQzVEN0NGRTgwREI3NjQyMkJEMDA3RUM2QUIwM0Y5NkYKLToxMDFFNTAwMDZENDM0MDI2M0UwQTY5RUZDQkM4MzdBNThEODAzM0Q4NDUKLToxMDFFNjAwMEJGNjBBREQ0M0IxNTY5NUM2MUEzOTFFRkRCOUE2MEVENzcKLToxMDFFNzAwMEUzQTFGQzYyOTE0QkNENDBCOTFFMkFENzEyQzg4RDFGMzkKLToxMDFFODAwMDA0MzhGRkNFMDhBNDY3QkY4QkI4OUJDQzI2MjNEREI1RjIKLToxMDFFOTAwMDM1QUQxM0ZENTMwQ0RDREZGQTcxQUU3MDRBNkVGMjcxOTIKLToxMDFFQTAwMDVFMEQzQTQ4Q0VGNDQ4REU0NUZDN0M5NjE5OUVDRjgxMDMKLToxMDFFQjAwMDA3QzdBNjE3QjE1OEJCQTc4M0ZDNUM2RTlFQUM1NTA0NDAKLToxMDFFQzAwMDYwREU3OTIwN0UxOUVDNjFGM0VDNDc0MzI1MzBDRjg5NDEKLToxMDFFRDAwMDIyQTdERjhERUIzMEI0RDc5MUNGMTYwQTFBREFFRUQyRjMKLToxMDFFRTAwMEQ4N0E5NDFCNDU2RUVGMjY5NERENzJDMTRCRUJBMEFDMDMKLToxMDFFRjAwMDhDMDI3RUM1NzIyNUE3NkYxREZFN0Q5QTg3RTMyQTMxNkQKLToxMDFGMDAwMEZBMDczODE2QUNCM0YzODNDMjJDRjQwREY1MzcwNTMyNUIKLToxMDFGMTAwMEIyREZCRDA2MEE1N0IzQUI3MUZERjczOTQzMkI1MDhFQzQKLToxMDFGMjAwMEI1RTc4NUVFQjBDQUIzQTc4MjVDOEU4NUM1N0FGN0NGRDgKLToxMDFGMzAwMEZFNzYyREUyRTcwM0U2RjBBM0ZDRDg5RDFBMjI3OUY2OUYKLToxMDFGNDAwMEJCNENDNjNBMjdFMjNFMzJENTNCMDJGOTlBQUY0M0NBQjAKLToxMDFGNTAwMDVGQzJCMEZENjM5N0MzMTI0NjAyMUNFQjdFRDM1MzNBQjcKLToxMDFGNjAwMDE5REU3RjgzRjczQjc5MkQ2QjY0Rjg1RUUxNjU3ODE4QTUKLToxMDFGNzAwMEM2NDQ2Qzc3OTREQUREMUJDOEEzNzlEOUUzN0U4RjA3NUEKLToxMDFGODAwMDY5MUY5QUUzN0VBN0IzNkUyNzNFMUQ2OTNGMUNBRDI3RUMKLToxMDFGOTAwMDkwRDNFNjkzQUQ3MUJFMTdDNTAzRjIxMjlDODRCODZFNjAKLToxMDFGQTAwMDg5RTk4RTRGNzFGRDQyRkUwMzlENkVDNEZEMDFBOTRGNkMKLToxMDFGQjAwMEU3Qzg4QzkzQTc2Q0Y0MzYyOUEwMTIxQ0YxNzQwN0ZEQjYKLToxMDFGQzAwMDVBQThERjIyQjMxRjczRUExNjdEN0Q0M0UwOTE3MEYzQjgKLToxMDFGRDAwMDM4M0E4RkI2NTJCQjc0Mzg4RkIyNkRFN0QxN0Q4MTA0MjkKLToxMDFGRTAwMEU3RDE5NTU1REFGREZDM0QyRjQzRkYwNzkzRjRGRkM3N0EKLToxMDFGRjAwMDQ0RkRBMUZEQzNGNERFQTMxM0JFQUFBNjZCOEY2MDc5RDYKLToxMDIwMDAwMENBMTg1MzlFNDA0MzEwOUNENzBEMzNDQkE5MzczN0U0RjEKLToxMDIwMTAwMDU4RTVDRkQ0Mjc1MDVFRENBODRCQTIzRUZGMDlFNEVGODEKLToxMDIwMjAwMDIzMjVBNkJDRjlEOTBBQUM4RkNBMjNCNkY4MDk5NDVGNTgKLToxMDIwMzAwMDUxNzlDNEU2REU4Q0Y1NTFGOUMzRUExRjQ3RjkxNTk1Q0QKLToxMDIwNDAwMDNGMkNGODA0Q0E4RkMwMDI1OThDNzdFQzcxMUNCRjZEMEQKLToxMDIwNTAwMDk5MzlGRTE1RTEwMEVBMjUwRUIzM0YwQkUzRjhDOUY0MDgKLToxMDIwNjAwMEM4REU1OUREMkJGMDlDQkIyOTVBREZGREI4NjZCMTMzQzEKLToxMDIwNzAwMDdFMzU0QjdGMDJDRjQ1QjY2RDM4N0JDN0U0ODNCQzgxOEMKLToxMDIwODAwMEZDNkVDQTAxOTM3RTRDRkRGMEQ1MTdDM0JBMDFFRDE2NjQKLToxMDIwOTAwMDU2NkExMUVCQkU0NEY1Q0M3RUFFRjdDNEY0Q0JERjczQzkKLToxMDIwQTAwMEZEN0JGMEY1QzdENzY4RkUwMjRFNkY5RkMzRjg2RjVCRUMKLToxMDIwQjAwMEM3MzdGNTI5NzhERjRGRjQyN0RFNUY2QUY2MUNDMDc3NTMKLToxMDIwQzAwMDlBRTA5QkMyRTFCQjg4RkUxRkQzQkFGREZDOUNGQTJCQjEKLToxMDIwRDAwMEMwOUI1QTYyQjEwMzJFNDE3QzhFQjlDNEUxOUI1NDgyRUQKLToxMDIwRTAwMEZCNURDREY3RkI2OThEOTk3MjdDMkFDMTNEODAwRUNFRDgKLToxMDIwRjAwMDlCRkU4QjY5REM1MkJFNkVDQkI4OUE3NUJFNjRGNjNBMTUKLToxMDIxMDAwMEI0MkJCM0I3OEJGMjRGMjVDMTI1QzYzRDRCRkYxQTdCQ0QKLToxMDIxMTAwMEJCNjhGRjUwODk4NTNFMDc4MUNGNkZCMkVFRUZFNzIwQTUKLToxMDIxMjAwMDQ3NTZEM0Y4RTNGOEY4RDdDN0YwNzg5QkY1RkRGRkZBRTgKLToxMDIxMzAwMENEQ0U0OUU3REI4OTlFMUEzOTNEOUQ4N0JFRkQ3NUM0MkEKLToxMDIxNDAwMEVGNTZBOTVCQ0YyNDNGOTE2MUUyRkQxQjM4MEVCQ0VGMzcKLToxMDIxNTAwMDc3QzFGQjg4RDg4RjVENDVBMTZGRTE3QjJDRkEyNjU5QUEKLToxMDIxNjAwMEVDMTM2M0UxNEU4NDJGNjY5RkMwNDAwNUQ2RjNGRTg2RDQKLToxMDIxNzAwMDlERDZGM0ZFN0IyNTM3RUQzNDgwNEVFNDIwNkZGRkQ0RUYKLToxMDIxODAwMEZFOTdFQjcwRkRGMTY1RDA0QkZFMkZFRDdGMzZFODI1MTUKLToxMDIxOTAwMDEzNDgyRkY5MzZDRTdGQUU3MTAxRkU2RUMyQzNGMzlDOTkKLToxMDIxQTAwMDZFMTJENDNGNEJFMzNFQ0RFQkRCNUQ1QzhGN0Q2M0Q5OUMKLToxMDIxQjAwMDA3QTRDNzY5NzdBQTBFRDRFM0NDNzNGRDI3MjU1QzlGREIKLToxMDIxQzAwMDA1N0RBNDMyOTE3RkUxMjdDMjlGMDZFM0ZFODRFNkVEMDAKLToxMDIxRDAwMEU2RjhFRjBEQzkxOUE4NkY0NkY1MTYxNjIxM0IyOEE2OUIKLToxMDIxRTAwMDU3QUQyMjNBOEFFOTU1Qjc1Mjc5QjZEOEU3RDc0QkJFRjAKLToxMDIxRjAwMDU0MjdFMDdEODVFMzQxQUNFN0RDRUQ3QjA4MEUxRjZGRTMKLToxMDIyMDAwMDlGQTBCRTk3QzZDQkUxNzBCMkY0ODMyN0QwNkUyNTdBMkIKLToxMDIyMTAwMEU1M0ZFMzFDNTA1RTg5QkZBOTAwQkY3MzcxNzEzNkU4Q0EKLToxMDIyMjAwMDJERkI1QjI1NTU4NjcyNURCQkI5Q0Y3NzEzNUZDNEY0NzgKLToxMDIyMzAwMDM2Q0U4NzM3MEFCQUZGNTNDOTA2REFDNzFCNEY5QkZDNTUKLToxMDIyNDAwMEJGOTdEQTRGODlEQUE5MUIwOEZFMzc4NTdGRTI2QkMxOTkKLToxMDIyNTAwMDBEMjY3QzI3MDkzRTk1QzNGNzM5OEM3RjlBRjBDMzM4NDkKLToxMDIyNjAwMDdFNkE5OUUxNDRCRDBDRURDQTJFMzY3MDdGM0YxNjdFMjIKLToxMDIyNzAwMDFDRThGNzFGRDRDRkMzRTFBQUQ1MjVEMkRGNDNBQjhFMkMKLToxMDIyODAwMDM5OTFERTU3RjRCMjg0RkUyNzM5RTgzMkZCQ0I0MUQyRDQKLToxMDIyOTAwMENCODU3REVCRTc3RUExRjhGNjI5QzEyODNEQTU1MDdCRDMKLToxMDIyQTAwMDJGOUZFRkFCNDVBMUI0MjBCQzlGQTVCRjE2MUNDMUY3NjMKLToxMDIyQjAwMEM5ODNGQTY4QTg1NDBBNzdFNEEyN0Q5MzVFNTYwQUU1QkEKLToxMDIyQzAwMDA1MEVENjRGNzYxRjYzOUJEMUVGRUJGRUExQzIzQUZDMDEKLToxMDIyRDAwMEQ0NUE1NTJDN0UxREUwRDI1RkExMURCOTU4NkNGQTAyNkMKLToxMDIyRTAwMDE2RjVBRjM4RDA1RjYzRjFERjkwMURFODBFREU5QkZGN0YKLToxMDIyRjAwMDkwNEE3RTk3OTc1QUQwNEZFNjkzQzlBRTA4RENCRjJBMjIKLToxMDIzMDAwMDUyMEZFNUQ0NDJCN0Q3OERGM0M4Mzk2NEU3QkFFRTAzNkMKLToxMDIzMTAwMEZCMTM2NUQ0MjI2RTVGM0FFMDFGRUFEMUE5RUIxOEQ5MEUKLToxMDIzMjAwMDZGRjMwQzI5QUNDMjNDNkVDREVFN0ZEMTM3OUU2QTIxOTMKLToxMDIzMzAwMEZCNkUxNUYzNkE1OUYwMkNCNEQ3QkJFMkVDRDdFNkM5QjMKLToxMDIzNDAwMEJBMUZGMTc0QkNCRERFODFGODA4NTQ3MTNCRUM3OEZCMTgKLToxMDIzNTAwMEQ4NzRFNEJGNzgzQkZBNzg3MjNCREE0MEJCQjkyNzY2QTEKLToxMDIzNjAwMDQ3M0JENzBFQTIxRDFEMENEQUVERThEMTQ1QTEzMkRDQUEKLToxMDIzNzAwMDRGQTY2ODI0REZGNkNGOUVCMTkwRUM2NTQzNjY2RTY4ODkKLToxMDIzODAwMERGRkY5MDkyODlGRTNFNjM5QkUyNDc3N0MzMzFBN0I2OTkKLToxMDIzOTAwMDgyRkMwNzYwNEZDQjYzNjg5QjE4RkFCN0U2MEJGOEZCMkIKLToxMDIzQTAwMDhCNEU5NTIyRkNEQURENjNGQzQ4RUZGRENENkVDMjczRTcKLToxMDIzQjAwMEZGMkQ1OUUxMzQxODJGRDNGOEIwMzUwNUVBNUYwRThGQTEKLToxMDIzQzAwMDQyMjc1QkQ0QkU4RUI3QzNDMTdDMzI5MDZFRkFEOTY4MDcKLToxMDIzRDAwMEQ2ODFGQkEwNzhEOTdBN0MzNjY2RkEwRDdGQ0NERTlFNUEKLToxMDIzRTAwMDlGRUYzNTcwQkNGQTcwMUFDMzdEOEZGQzhDNDlFRkU2MDUKLToxMDIzRjAwMDMzMEEzOTIwMUQyRjYwQUExMzBCRDczM0NEODlGODVGMUMKLToxMDI0MDAwMENDNzQyQURGMDBGQzI2OERDNUY5RjIwREEyMDNFMDNCNTcKLToxMDI0MTAwMEY0REY2RDk4QUNERjQ2Rjg3ODhDRDMwNzdCNDBEOTg5MjAKLToxMDI0MjAwMEYxOEFGRTZEMEY2NjIwOUZFRDRFQjVGQjFCQ0NFNzVBN0YKLToxMDI0MzAwMEUxNkZGMEEwOUQzRjYxNTBFREZDRjUwNDhGOTAxM0U3MzQKLToxMDI0NDAwMDIxNTc5QUY4N0U3MjdFM0Q4REY2RUY3MDNBMjcxQjkwRTkKLToxMDI0NTAwMENGN0I4NDFGRjg4MTJDRUUzRjc5MjhDOEU1NEFGQzEzMTYKLToxMDI0NjAwMDE4M0UxQkZCNUZFODM5MDFFN0U1RjZBMEREOEVERjgxNTIKLToxMDI0NzAwMEU1RjMzODJGMUYyNjM5RjMyQzVGNjc1QjkwOTlGMkU3NUQKLToxMDI0ODAwMDlCNDFBRTA3QTg5OUU0NEYwMTUxM0M4REVGMkZGRTdDOTQKLToxMDI0OTAwMDI0RTk0RkUwRjhEQUQzMTJFRDU3OEFDQTQ4MEVCOTU5NDkKLToxMDI0QTAwMDI4QzI4OUM5MTBFQjYxMUI0N0Q4RkJFRDNFNUJCRjlCN0YKLToxMDI0QjAwMDAzN0NGRTEzODVGQTNGRTNGQ0M1QTc4MDQyQTE5REJCQzgKLToxMDI0QzAwMDVBMEE0QkQwNkU3RUJBRjQ5MkE0QzZEQTFENDEzRjU0MkMKLToxMDI0RDAwMDAyMzk3QTU0Qzg1MTY4MTY3MTgwQkVCMjNEMTNGNjAwQjUKLToxMDI0RTAwMEZEREI4QTdGMDhDQUVCMzc5QUI0QTNBOEMzMUQ2OUFBOEIKLToxMDI0RjAwMEE0Njc5RkQyNDhGMkEzQUY1RDBFMzdDMzNDQkY2ODYyQUEKLToxMDI1MDAwMDNEQTVFMzA3OEU1QkJCMkM3MEY0ODQ0NTFFQ0QyRjdCNkQKLToxMDI1MTAwMEQyMDM0MjkxQjVFNDc3MUU5NEQwNUZBRkI5NTVFNERGQTIKLToxMDI1MjAwMDlFMENFRjAzODVDOEFGQUZDOUFDMEJFMDVEQjJBOEVBNjMKLToxMDI1MzAwMEU4MDk4QjdDODgxRjE3RTY2MzA2QjBFQzFCNDFFRUM3RTkKLToxMDI1NDAwMDdDMzFFMDhFNUMwN0YwQUNEQTI2ODU3MUJDNTVEQjhFMDEKLToxMDI1NTAwMDM5RDE1RkI5NjI1RDFERDM2MTlGNUM4NUM3MTREQ0NGNDMKLToxMDI1NjAwMEYyODA5N0Q2MzlCRjUwNjY4NjA1QUU2RjRFRDM3QTgyMTkKLToxMDI1NzAwMERDQkZGMzNBRURBRjNGQUE0N0ZEMTJDQjAxQTc5NkU5QzYKLToxMDI1ODAwMDJEODhGOTIxQ0RCOEMwRDNDMTVEQTQ4RkY2NjQzMTlBRUUKLToxMDI1OTAwMDNGRTQ2Mzg0OEZBMDk2RUJFQUM3Mzg4QkNGNEI3RUQzQTIKLToxMDI1QTAwMDQzNDE5NUU2QUQ2QkRENDlGMEE0Q0U3QTlGRTAwMUREQjUKLToxMDI1QjAwMDM5RTIxODNBMTBERjI2MUZCQzI2RjBERTI2RjA5RTBDMEEKLToxMDI1QzAwMENGN0YwQTcyN0Y5RTU5OUU1RkE2NjQyMDlFNUY1NzU0RkMKLToxMDI1RDAwMDhBNzMyNEUzRUY4NUE1RjZGRDcxRkIyQTZERTUxNkVEMDAKLToxMDI1RTAwMDZFMDdEMkQzRjE1NjM5RUM5NkU4NzkxOEY3RUQzNEVDNTIKLToxMDI1RjAwMDFCRkFFOUNENzE3QTMyNThBREY1N0MzNkY3Njc1NkE5RUEKLToxMDI2MDAwMDRDNzA5OUZCQjNDMkUwRkJCM0MyMDgxMDVFNTY5NDU2RkYKLToxMDI2MTAwMEI5NDZGMkI4NUEzN0QwMzZBQjJGQUM2Mzg4MTc5Nzc2RTUKLToxMDI2MjAwMDRDNDEzOTk2NkNCRjgwREZEQ0E1MTZGREYxMjJGQ0U3M0EKLToxMDI2MzAwMDQzNEEyRDdBRURFN0VEREY4N0Y5NDZEMzdDNzE3QUY2RDAKLToxMDI2NDAwMDVGMkJCRTYwRDI1MzJGQ0FENTgyOTg1QzJEMkJFNUU3NTUKLToxMDI2NTAwMDQxRkNEMzk0QUIxNjdEOTJGQzlBMTYzODU2MzY1QzA0MzYKLToxMDI2NjAwMDFDMjY5RjIwOUYzNjQzRDNFMDBFQzk4OTdDMTI0MjdFRjAKLToxMDI2NzAwMDlEODBGQUQ5MUYzNjdGMjExQkY5ODY3NUE3QzAzMDhFNDEKLToxMDI2ODAwMDUyQ0UzN0FFNTk1OTJFQTQ4QkJBRjZGNzE1M0NBRjAwOEYKLToxMDI2OTAwMDlGMTU4NDRGMjE4NzI3OTYzMkYzMUM5QTQzNzREMUMwMkIKLToxMDI2QTAwMEU5RTJCRjNCQUUwM0YwMkMyMzM4OTc3MTM4MkZCNUI4NjEKLToxMDI2QjAwMEQzRUQzNUExNDY4NDJGQTQ4MTVDNEE0NzdGQkM1N0VDRkIKLToxMDI2QzAwMDNGMUJDREZEREUxNzE2REYzQ0Q2N0EzNzQzM0Q3MEMxODgKLToxMDI2RDAwMDFGMzM1NEQ0MDM2RjJBRUFEMjcyRDU4NEYxNEQ1NUIyMTgKLToxMDI2RTAwMEM1MzdFQjRCNDg4RkQxMTgyQjE5QzlDRTE5REY4QzhGMEEKLToxMDI2RjAwMDlGMEU4Qzc3MUExNDJGMzVGNUVFRjg3ODY3N0M1QzkzNzMKLToxMDI3MDAwMDI1ODk3RjBFOEM3N0JFNTg4RDdBRTYxQ0JGRUM1NUQ1OTcKLToxMDI3MTAwMDU4M0NEMzM1RUJEREI3RDhCNTAzRTM5RDlGQzA3QTA0QjEKLToxMDI3MjAwMDNFQjM5OTY1QkQ3REEzRDVFRTA4QzBENzMxRDJFM0VGQTYKLToxMDI3MzAwMEU0Q0Q5OTNDMkQ4NjQ3MzgwNzNDNkU5OEE3QjUwQ0UwNTAKLToxMDI3NDAwMDQ3N0QzOUI3OTNFMkM2MTYzQ0JBMDgwRjE3ODg0NzhBMDcKLToxMDI3NTAwMDZGMjM1RTVBQTVGMDI2REMwN0E1RDE0MDc5NUVDN0JDODEKLToxMDI3NjAwMEVBQTNERUQ4N0U0NkM3Q0JCRjQ3RjM0MUZENTdFQkQzODQKLToxMDI3NzAwMDk5MDMxMEIyMzlGQjJFNTYwN0U1RDQ0MzI5NEMwNjNEODgKLToxMDI3ODAwMEY2OTA3QTE3RURGN0ExRjczMjU0OENGN0JBN0Q5NjdENjMKLToxMDI3OTAwMDEwQjg1NDRDRjhFNDgxNzZEMjVGNjExRjNENzk4OUY2MTgKLToxMDI3QTAwMDUxRUQyQ0M1NzNGNjdDRjc2RjU3NTFFODA4Q0ExNTBGMjkKLToxMDI3QjAwMDlDRDdDQUE0RDhGQkJFRDExQzlGRUY1Q0M1QzI5REQyREEKLToxMDI3QzAwMEMwN0QwNDdDNkI2NDc3RTZCMzlEODQ2RkQ2QzhEMDNGMzAKLToxMDI3RDAwMEQwMkEzMUY1NTFGRjQwQkE3MEE0NkQzNDFDNjgyRkFFNzkKLToxMDI3RTAwMDRDMjczQkFBQTVCMTkxRjBGRDFBRTBEQkYwNzJGRUMyQzYKLToxMDI3RjAwMDM4RDU1OUY4Q0JBNDBCMjY4RDM4N0ZCQTg4REY3NzhDNzMKLToxMDI4MDAwMEUzQUZDQkJFQTRGNzM1MDk3RkVFQkFBMDdEOUQzQjUzNjUKLToxMDI4MTAwMDFCNTIzNkRDQkFDRjVBNTZEOTU0MkJERjFBMjIyRkM1OTkKLToxMDI4MjAwMEEwN0QzNDE2MzFENjk1MzU1MDhGQkE0Q0U0QTVDMDc4Q0EKLToxMDI4MzAwMDIzQjFGRkE4MzIyNkZDODBEQTI4MkM1RjdGMzk2QjRDNEQKLToxMDI4NDAwMDk0RjdFMkFDRTA3NkNDMzI1MEMxQzlBRjYyQTRCMkFFMkMKLToxMDI4NTAwMDI5Njg2NUVENzg3QjA0RUU5NzcxOTU4QTY1QTYxRTBDNTQKLToxMDI4NjAwMDIzNURENTg5RjUxRkQ5QjJCMzBGREJDRjA3NEM2MjFFQUMKLToxMDI4NzAwMDA0QkU3NTU4RjBFMzJGQ0JBNTcxOEJENjFDM0JBQzUyMzAKLToxMDI4ODAwMEI1RjcyODhFRTcwMkUxOEY3NkVBMzI3Qzg5RTM4MkJFRDMKLToxMDI4OTAwMDhBRjE3NUE2RTg2QzIxQzhGQkU1NkJBNUI3NzFEQzVBMTcKLToxMDI4QTAwMDIzOERBMTVEMUJDQkFCNzgyQTJFQUY4Mjk3RTdFNzg4RkIKLToxMDI4QjAwMDdBRTNGQjc0RkVDNEUyOThGQkUyQ0VCNzM3M0E2RDcxNUYKLToxMDI4QzAwMDRDRTNEODRBN0IxQzkzRTdEQjk4RTdEOTkxOTdGRTY1RTgKLToxMDI4RDAwMEE1QTE1OEUzOThFRkQzRjg0Nzk3OTlGMzE1RUVCMkM3M0YKLToxMDI4RTAwMDMxM0ZBMUYxNEQzRjM1NjMxRjc2NUFFMzk0NjA0OUQxRTIKLToxMDI4RjAwMEY5NkFGQTkxRkY1QzM2QkQ5RUZCNERGNTg1QjgzRjcyRDMKLToxMDI5MDAwMDUwNkE0NEZEMDgwRTE4NEQyMjdGOERCNzEzRUQ2OUQwMzMKLToxMDI5MTAwMEZGQUZDN0ZBQkZGNTc1ODIxRTcyN0I5OTI1RkVGMUI3MkUKLToxMDI5MjAwMDA2RkYzMUQzQkY2RjFDNUFBOTE1NUNGQUYwMDJCRUJGNzcKLToxMDI5MzAwMDQ1RjhBRUU0RjhGRTFCODBGN0JCNjUwOUUyMDA5NzEwOEUKLToxMDI5NDAwMDdDMkYxMTdDRDEzOEM0N0YzQjNDNkY5NDU5RUNDRkNGQTYKLToxMDI5NTAwMDdCQkUxOTMzQjUxMzM4REZFN0IwOEU1MzY1OTZGQzgzMjEKLToxMDI5NjAwMEYzNjhGRkVGRDQ1RUM0NEJFM0VCNkYyRkY3NzIzRjk2MzMKLToxMDI5NzAwMDg4MTNCRjE5OERFMzY1RDZDN0M1RjUyOEVFMTU4QjIzREYKLToxMDI5ODAwMDVFM0UzNjMwQ0UwQUZGRTVCQkIwQkQxOTQ3OUM1RDlFNkEKLToxMDI5OTAwMDVCNEY3OUQxNDlFMjk4MUFENjJCRDZGRTJBRjVFRjg4RkIKLToxMDI5QTAwMDlCQ0YyNUVBMTc5NTVGNTM2RkQ4RjA3MzM1QjVFRjg5NDQKLToxMDI5QjAwMDZCNUYyQkQ2QjdCMjdDRDIyRUMzODIwRkIwMzhBOTdEMDUKLToxMDI5QzAwMDU0MkVCMUU5RjVGNkI4RTNENDdBNkJEQzcxNERGOUY0MjUKLToxMDI5RDAwMDVENjZGQ0JGMUNGMTMzNkU0MDNFQzRGRjQ4N0MwNENBRjgKLToxMDI5RTAwMDg1QkQyOUUyRTUyNjFEOEU5RUExOTU5NDRGQkRGNEUwOUMKLToxMDI5RjAwMDg1RkQ1QjUyNkVBMUZGQkZDMjdDQUJDQTJENzkxNzE3NTQKLToxMDJBMDAwMERBM0ZDQThGRTJEQzM3RjMyNzAwQkY3N0UwM0E2RUFGRDgKLToxMDJBMTAwMDUwMDlGRkYxRjkxMkE2OUQxOEVBNjc2NDI3Q0U2NDYxOTgKLToxMDJBMjAwMDE5RTMxMjIxQkZDRUQwMEYxQUU1NkI0M0FCMjc3RjVEQjAKLToxMDJBMzAwMEY0N0U0NEU1MkVGQkZEODhFNjVEQTg1RkM0Q0VFRkU3OUIKLToxMDJBNDAwMEVBRUQ3OTBFRTUzNkI4QjdCRkZDOUNCOUVFOTY3MjRCNEQKLToxMDJBNTAwMDNFQzM2MDhGQkZBNkMyOEU5NzY4NTlFMDY3RTkxRERGNEQKLToxMDJBNjAwMDFDNkRCRjdGMTFEQTQ1NzE4Q0U4RkQ4QjlCNjhERTU4QzkKLToxMDJBNzAwMDdFQzdBREJCRUNGOTFENkJBOTFDREJBRkE2QjhGREZBOTgKLToxMDJBODAwMDlBMERBRThGQ0I5QjA4MkU5N0M4N0I3M0FEOTI5MkRDQ0MKLToxMDJBOTAwMEFGQjg5MUU0ODIxOUQ3ODVCMjREMkU1MEY5NzM4MEVCMEYKLToxMDJBQTAwMDgwNDk0NzgyNEZBMzcwMEVDOENGQUJEQjg1N0VBNkMxOUQKLToxMDJBQjAwMDlFREYyMjE3NUU0MkJBMTg3Q0JDRjNGQjFEMjZERTkzMTQKLToxMDJBQzAwMERERUZCODUxMzVDQjVGQTk2RjI4RjhFQ0YzNjJGRTVGRkMKLToxMDJBRDAwMDc5QzJGQ0EzOEI1RDA3QkYyRkUyOEFCRjJGQzJENkQ3NzYKLToxMDJBRTAwMERCRTVDRjc5QzM3NzNBQjFGQzM5QkZGRTlGMjQ5NzNGMkUKLToxMDJBRjAwMEZGODlGMkE3MjVEREUxNDIzQ0VCM0VBNjg1MTNEOEM3NEUKLToxMDJCMDAwMEI3NTdGMEI4NTQ5NDNGQzU3RDk0RUJCNzI3QjZBN0JGMkQKLToxMDJCMTAwMDVDQzFGREQ3QTZCRjNCRTAzQUI1Q0ExQTA3MUQyNkVBM0QKLToxMDJCMjAwMEJEMTVEMUJDMDE2RjA1OEVCQjhFQzMzNzA2RTUyMUM2MkUKLToxMDJCMzAwMDdCOThDMjM0RTBBOTQ1RDc4RkNFNDFGODVBN0VDREM3RTUKLToxMDJCNDAwMDYzM0VCMDkzMzM2MkUzQ0QxNEUzOTlGM0VDNUI5MDUxQjEKLToxMDJCNTAwMDZCQ0Q2QkM4MTFGMzhDQTk5MDRDRkZGNDk4MEFDNEU3QjUKLToxMDJCNjAwMDQ2QkUwRTc5QzgxQUJBRTcxNUI1QUI4RDg3NDg3RUI1NTMKLToxMDJCNzAwMDM5NEQzQkZCQjE1RDI0Q0ZBMjcyRTg5QjQ0MTc4QkREM0UKLToxMDJCODAwMDI2RkQ4Nzc3NTlGREM2NjUzRkREQzVDRjU1Mjg2MjFDRjgKLToxMDJCOTAwMDJGRDZFRjFCRjU2NEU3OURBM0RGNjQxM0NGQUQ2MkJGQjMKLToxMDJCQTAwMDhDRTg3RTRENDFCOENGRDVERjYyNDc0N0E0RUM5ODFEMzUKLToxMDJCQjAwMEZEQ0M2NDZEMTZFMjE5RUNFOUUyRjMxOTA3RjAxNEE0RjgKLToxMDJCQzAwMDdENTk2QkI3NDcyQ0Y1MTUxNUI2QkNBNDUzNkIzMEFFQzkKLToxMDJCRDAwMDk5MkMyRjY5NjFDNUQ5RjM5MjE2QzZFODYxNjE4NTREQkMKLToxMDJCRTAwMEFGMEY2NjRDNDUzRkM5NDg0N0MyN0IxNEJBRDhENzU4ODcKLToxMDJCRjAwMDdFRDc3NzY4QkZEQTRDQkUxM0U1MDdCMjc4RkRGMjlGNDcKLToxMDJDMDAwMDNFNTMyRkUwQkZCOUMyMTJCRjMwRTMyREFDRTA2MDA0RTkKLToxMDJDMTAwMEZEM0M5NkZDMjJDRDYxRjVGQjA0OEYzOTcxQkMxNUFERUUKLToxMDJDMjAwMEQyRjlGMTRCQkIxODdGNUI3NDFGNkZBRkUwRkU2ODFEREMKLToxMDJDMzAwMEZEOEUzNzhBNDk4RURDREE0Q0UzRDZBRUUyRjdDMkUyOEIKLToxMDJDNDAwMEY5RTY1RUUxQTdCQTM3NDZDN0Y3RDIzODVBMzRERjY2RUQKLToxMDJDNTAwMDNERTIwRDUzMDZEQzkzNjJFMzlCRjc3QjAyQ0VEMDhGRkYKLToxMDJDNjAwMDMwQUVEMzY2NDgyQUNBNTc3RDVEMURDNTE1NTkyNTYzMDgKLToxMDJDNzAwMEUzNjE5RjAyMjNGM0I2QTFFODMwRTdCQkJDOTJFRjE3RjQKLToxMDJDODAwMEZDNUE4QUVEN0MyMDIxOEQ5MTk4Mjc1RTQ3NzFFNzY5NzcKLToxMDJDOTAwMDFBQ0Y1Qjk5NUVERDJDMEY1NzI5QUZBNTAzRTcyRjVBOUEKLToxMDJDQTAwMEI0QjMwNTk3N0RDM0IyRUZDQTg5RjI1OTdBMzA5RjA1NTQKLToxMDJDQjAwMDYxMzJEOEVCRTM0NjAwN0YwQkY4RjA1RUM4NUE5OEU3MjQKLToxMDJDQzAwMENENjgzRTRCNzVEOTNERDY3Qzk2RDA2N0NCNjczMUZEM0MKLToxMDJDRDAwMDdGNEI0QjAwQUYxNkZBQ0JBQUU0NzhDREFBRTQ3ODhERUYKLToxMDJDRTAwMEM1ODExOUM1NkZBRjYwQjU3M0FFQzJCQzE0QkNCNzA1NjIKLToxMDJDRjAwMEFGN0IwQzdFQ0ZFRDRDMEUwQjYzRkNCRjc5NzYyQUY5Q0YKLToxMDJEMDAwMEYxRkFCMzE4QzU1NTYxNDMzMjZCQTY2MTFFMDlGRjQ5M0MKLToxMDJEMTAwMDE5NUZDQTMwQ0ZDNTBERUJDMjc1NjA1QzM2NzIyNTBDRTkKLToxMDJEMjAwMDJGMkYxQjEyNDk0MENGQkZDOEQ0OTkzRjFERkRGRUM2QUYKLToxMDJEMzAwMDY2MDY3NDEzRDQxRkE0RjhEQ0U1QUJERTZGQzA3OTU3QzgKLToxMDJENDAwMEU4NkUxNTQ5RTBDNjA2NkYxOUU1NzFBREYxM0JFRjgxRkMKLToxMDJENTAwMEY3RjM3RDMyRDNEMDlGNURFRDNDQ0VFMzM0MUVDMkQzN0EKLToxMDJENjAwMEZDNTI1RTM2RjFFMjY2Q0E3MTJCNUU5NEI4RjJCQUI3RDUKLToxMDJENzAwMDlBQjcxQ0IwQjQ3NzQ1NTIzMjMwMkVGODUyODVDODA3NDYKLToxMDJEODAwMDEyRjc4QTk4OUM0RTc0NzBDNkU3MDg2MzFDQUE0NzYxQzQKLToxMDJEOTAwMEZCMTU4QzYzRTgzMkM1MTVCQjVBRUYzQzhDN0NCQkMyN0IKLToxMDJEQTAwMEE3RjgxREIwQ0VFMDNBODlGMkJGNkVGNDcyM0M3REQ4MzAKLToxMDJEQjAwMDY0NkMzOTAwM0E2Q0NBQzgzQzhBQzM5Q0YxN0FDODFCNUYKLToxMDJEQzAwMERGQjZBQzhCRkNGNjQwMkYzRDBBQjQzRkI2OUVFNzE3NEEKLToxMDJERDAwMDk5Rjk0RjBCMDRCRDk4Nzg0Q0E5RkI4MEYwNzIwNkUzN0IKLToxMDJERTAwMEUxODg5N0MyMkNDQTgzOUEwN0Y4NTBCRDE0RTc2RjQ1NTMKLToxMDJERjAwMDNDQTVCMkM2QzgzMDE4Njc4OUNGQzEyMjE2M0YzNEFDOTMKLToxMDJFMDAwMERGOTY0NzA2NjM1M0RFOTk0MjZGNkNGNTg0OUZENEY1RDUKLToxMDJFMTAwMDQxOUU4RjI2NTc2QkU4OUYzRjUzQzhGNzE1Q0E3RUE0ODMKLToxMDJFMjAwMDc3NTZDQUU5RDRDNDdGNkExQzlEQkFFM0YyQzNFMkU5Q0IKLToxMDJFMzAwMDM0MUVGRkE3MTFFRjk2RkI1QzVEMEFGMzQ3OTBERTdBMjQKLToxMDJFNDAwMDY1RDIyRkEyNzk1NzBGMzkyOEVGOEFCMTMwREQ2M0VBQjYKLToxMDJFNTAwMDYyNDNGRDFEMjgzNzIzMTJDNTA5NkUxMDc4MzNGMUNFNjkKLToxMDJFNjAwMDU4RTNFNjk1RThFNzZFQ0NGNEEzRkY5RjM5MUEzNzYzODEKLToxMDJFNzAwMDdFRDQ4REUxMzRDQUJGQkI4OTc1NTMxRUQ0NzJCNDkwMjEKLToxMDJFODAwMDYxREU5Qjk5RDc4NUU1OTVDQzRGNEY4OTE1RDBGRDkyOTIKLToxMDJFOTAwMDI1QkE0NDdDQTFCMzQ4Q0Q1NTgwQkZDODY1Q0UyQzZCMDQKLToxMDJFQTAwMDVFNTVEMkJDMjY1OEY5QkI5Njc4QzREMDRBMjEyRjNEMzYKLToxMDJFQjAwMEJBOEZFNzc5RUFFMkRFOEY0NkY5NDE1OTY1QTUxRTNERjIKLToxMDJFQzAwMEMxQjkzMUJCNDgxRjU5NjlDOUJCNTBCQzhEOENFMkQzMTUKLToxMDJFRDAwMDQ1QTE1MTk1NTM2M0ZEOUY5QUFDRTU1NEMyRjg1RjJDMTAKLToxMDJFRTAwMEQ0NDZFMzczMzdFQTc5NzAxRTA0MEY4RTdGMTJDRjgzQzYKLToxMDJFRjAwMEU2Qzk5QThBRURFM0U1RDVCMUU0Rjk3NzFBRjI3NTFGRDAKLToxMDJGMDAwMENBMkJDQTIzMkMyMDNFMUNBQ0ZDQkJDOTk1MDNGMkVGOTQKLToxMDJGMTAwMEE2NTY1QUYyRUY4RTNBRjlCRDMyQ0E0NTlFQzkwNkRFNzAKLToxMDJGMjAwMDRGNUI3NzAzRDU5QkY3RDNFMkVGQTVCMUM3NzgxOTE2QUUKLToxMDJGMzAwMDY0NzQ4MDFDNkYzMTFBNjlERDI2REVFM0YxQzNDNEJEMDEKLToxMDJGNDAwMEI0QTVCRTk3RkJBNDZCMDcyMTZGQ0QwQkNBRERDOEIzMzgKLToxMDJGNTAwMEQxODdDMUVGMkZEN0RDRDk4N0YxM0E4MzI5OTQ0N0Q4OUQKLToxMDJGNjAwMDk2Q0JFRjJGQ0ZDMzg1RTIzQUM2NzE3RDkwNTVGMUYzMzIKLToxMDJGNzAwMDZBNEI1NkEzQ0YwRkY1NUI5QzNDMUY4NkU1RUJFQ0ZBNDIKLToxMDJGODAwMDA5OTY3MUFCNjQzMzJFQjQwMkYxMDk3QTFGRTk0QkE2OUUKLToxMDJGOTAwMEJFNkFCNkFCMTdFN0MyNkE3MTJFM0MzMzM5NzQwQkUxRDcKLToxMDJGQTAwMDNGOTZERkJEMUFFOTg4QTU0N0MyMEUzMzZFQzc3RjI4NUEKLToxMDJGQjAwMDBFNjRFQTBGNDc0NjM1NTIzRThEM0JDOTdERUYzQjJCRjEKLToxMDJGQzAwMEEzRTdGOTlEMzRGRTQzRTY3OUFFREQ4NUUzNUYzN0NDQjgKLToxMDJGRDAwMEJCMDhGOUNDMTU5NDU5Mjc5RTYzRjM2RjI3QjlGQjFDRTYKLToxMDJGRTAwMEU2OEQ4MjRFMzM1RDZGMEU4RTgwRkQ2RUFBMTRGMUE2QzMKLToxMDJGRjAwMDg2MkM0NDE3RUJEMTc4M0U2OUE0QjhEMTg3RTdERDk2REIKLToxMDMwMDAwMDkxODlFRjdEQkYyQUQ2Mzk2NUNDMjkxOUM3REQwMjhBOUYKLToxMDMwMTAwMENFQTY4OTg4M0Y4M0YyRDg4Q0M1MjA0QkEwMENFNkZFNTMKLToxMDMwMjAwMDAxOENDQjc4NTAwRjI4QzI3MzkxQjdGNzM2NDAxQkQ4NkMKLToxMDMwMzAwMDg3NkVBMTJGMDRBRTAwRkE0MUZENkJCQzNEMUZDOTdDMTkKLToxMDMwNDAwMDlBRURFMkYzQUQ0MDk0NjdFMEJBRTNGM0RDQ0M3Q0FCRkQKLToxMDMwNTAwMDNFQzVDOEYwMjc4MDdGN0VEOTVBMEZFNTZCRTVBQ0Y0RkEKLToxMDMwNjAwMEUwMzlEOUE2MDU2OUJDRjhCQ0I3MkQzOTZDMzRDMjE1NTYKLToxMDMwNzAwMDlGRDc2NkU2NEQ5OUY5NTJFNkI4RkZBN0QyOUVEN0U2RUMKLToxMDMwODAwMEY2RjE3MzBCOUU5NDI3RjM5RDRBOTU3Rjk3NDJCM0U3MjEKLToxMDMwOTAwMEI3OTlGOTM1RDg5RUYyNkI3MjE4Q0ZBRkYxMzUzMkVDOTMKLToxMDMwQTAwMEU3ODYzMkI2MEY4OUZDQjNGOEJDMkE5MDQzREZDNTdEQjIKLToxMDMwQjAwMEJGNTBCREE5MkRBNjM3NkRBRTFCNDRCREU5M0NFNEVGNjIKLToxMDMwQzAwMENGMTBERTA0RjJGN0U3QzQxRjMxRjk3QjA4RTkxQkU0RjcKLToxMDMwRDAwMEVGNjE3QzlBRjJFNUNGOTU5QjQ4QkU2QzkxMzg3RDZFOEUKLToxMDMwRTAwMDgxRkRGODVFODI3OUZBMDQ5RjZDQzk0QTRDNTdBNzA0QTcKLToxMDMwRjAwMDFEMzc0RjBFRkQxQUU3RDVCMkY5QkQ4RjRCMDU4RjgwRjYKLToxMDMxMDAwMDhGM0Y1QUU1MzdFMEUzNUYxM0UxMDE3RTVBNTE5RTU4NDUKLToxMDMxMTAwMEYyNEZGRjlERDY5MzI0RkYzNEJFRkZDNURFMUY1NjQwRkQKLToxMDMxMjAwMDlFRjBFRjRCNjg1MjE1RDk4OUFBQjBGNzUxQTg2MDJCRDEKLToxMDMxMzAwMEYzMUU2RTlDMUMxN0Y1RTc5MkUzQkQwRTkwQUYwMDBGRDcKLToxMDMxNDAwMEVBMEE1NkI5M0ZBQzhBRUZFQjM1MzNGNTYxNTU0NDJGQTcKLToxMDMxNTAwMEZDMUVGMEQ2MDBCRjA3Q0MyMjFBRTkwMzQ3MzJGNDVBMEUKLToxMDMxNjAwMEU0NUY5NjNGRTkxQ0U3NDZCM0M4QjNENTFCNDIyNEZGOTIKLToxMDMxNzAwMDE3OUVBM0ZEMjY2QTdGQ0Q0QzU1RjhDMTg3RDI3QUI2M0IKLToxMDMxODAwMDRBREEzNzUyRTU1OEY5NUNFQjRCQUJEMkYyQUJEMEVGRjEKLToxMDMxOTAwMEExODdFODNCMEE1QkYyMURBQTAxNEJCQjZGQkE3RTJERUIKLToxMDMxQTAwMEJFREY5MkJGODlGNkFGMDMwODRFMDI3OTNBQ0Y3MUVBQ0IKLToxMDMxQjAwMEZFM0M4OUYyODQ5Rjk3ODZDMEQzMDM5NjVDMDJCQTlFMzgKLToxMDMxQzAwMDI5RjAwMzNBMDhENUIzQjczNDlGRDVGRkIxQkEyQUVBM0MKLToxMDMxRDAwMDZGMTFGNkVGQjc5RkI0RTYwOTJDRkVEOUQzQUIwQ0NCMzkKLToxMDMxRTAwMEY5ODY3RTk0RUYyNUEwOEJCMjJBQ0UzRkIyRkI0RURCNTAKLToxMDMxRjAwMEY5MTlERkFFQTI4QURGMEY1OTUyMjVFMjA2RTIzQzVDRTQKLToxMDMyMDAwMEVDRTZGNjE1M0IwNEYwNTlDRURCNkI2Njk2Q0NDNUY1QzMKLToxMDMyMTAwMDAzOUEwQ0M5NzI0RTlBRTcyMkQ1NThERUJCN0RGQzVFM0MKLToxMDMyMjAwMDBBRUJCNThGNjNBRUYzNTY0MUE3RTZCQzQwQUYzNzcwRUIKLToxMDMyMzAwMDdBRDU2QUYxNjlENjJGOTYxOUY3ODNGNEQ4RjEwNUYwOUIKLToxMDMyNDAwMDJDRTc3NEM2NEUyNDgxRTdDOTg0RjBGNEQ5RTFCOTM1N0UKLToxMDMyNTAwMDRBQjdEQUFEQjgzRTM4QUYxQjcwRENGNjEyQTBCQjA0M0IKLToxMDMyNjAwMEY4OUQzMEI1NjQwREQ2MkJDQzY4Q0ZDQjNEQUIzQ0JEQzMKLToxMDMyNzAwMEJCMkFCMTNDRkRCQjJBQkIzRTdCNEYxNTk3QTdGNzU2MzcKLToxMDMyODAwMDkxMUM0OTNDRUYyNjgxQjc0MUZCQUVDMDc5RUE2REY3NEUKLToxMDMyOTAwMEUxQUYwOUY4QTZBM0ZGRDlCNDZCODFENURDNkVFMzZFNkMKLToxMDMyQTAwMEUyQ0Y4MjQ5RTdFMDJGQ0VDRjM3OEY2OTI0M0JGQjQ3M0YKLToxMDMyQjAwMDQyM0ZGOTkxOTMyOTk4NzcwMzNDRTY0Rjk0MEZGNDYyQ0IKLToxMDMyQzAwMDk1QTk4Rjg0NDcyMTVFNUU0OEEyOEY0NERCMjVDOUJCNDgKLToxMDMyRDAwMEJGOTJFRDQ4QkIxOEJEQTQ2M0Q2OTEzNEQyNEI0RTc3NTQKLToxMDMyRTAwMEE2RTFGOUZGQzI4OTkyODQ3QUM5OEY3Mjc2OEM0QUE0Q0EKLToxMDMyRjAwMDk3RUM0OUEyOTdFQzE1RkFFQjhCQkY3MzkxOUU1MTdDMkEKLToxMDMzMDAwMDkyRUIyNUM1Mjc3N0M4QTg1RkVDQUJFMjcyQkJFODQ0MTcKLToxMDMzMTAwMDhGQUMwM0RDQzVBODk3QzAzODdCODQ1RTgyRUQ0OTJGNTMKLToxMDMzMjAwMDM5QkQ0MzQ2Qjg4QTRFRjY1MEJGNjIyOEEzNUU1Mjk0MTgKLToxMDMzMzAwMDQ0MkYwMTI4NjRDNEMzRjNDNTFEQkZDNEZEOEI1RjZGNTgKLToxMDMzNDAwMEY1MTRGRDE1MkJERDE2RjZGNzkwRkZDN0VDRDc5MUJGRUUKLToxMDMzNTAwMDI5NERBN0ZEQjZEM0NGRUMyMkQ1OTYzNzVGRDhDRkU5NUMKLToxMDMzNjAwMDNEQkU1RDMyM0EyQjkzQUJEQkZCNjE1RDVCNTlDNjBFMTQKLToxMDMzNzAwMENBRDc1NDFBOUZDMEIyNjEyODk0Qzc4NTFGREU0MEJBQ0QKLToxMDMzODAwMEI5NzczRUMwOTA4NUVEMUE5RkVBQzdGM0M1NzA3QkYxMEYKLToxMDMzOTAwMEJCMDcxRkE2QUVFMDc2RDA1QUU2NzVDRThDQzkyMzVBN0QKLToxMDMzQTAwMDNBODA2Njk0ODhGMTVDMUU2RjBCRDg3OThGQTQ2NTEyMDEKLToxMDMzQjAwMDFFRDc3OTREN0ZDRjhFQ0EzQ0U4N0ZFRjk1RTNFODVFNUMKLToxMDMzQzAwMDUwQzk4MzMwMTA5NDY3RjZDQTU0NkZGQTg3MEU4RjY0MjEKLToxMDMzRDAwMDk0QkYwRkZDM0JBRjA2QzY5RjJFQzY4N0YzNEVCQjFCQTgKLToxMDMzRTAwMERBMkYyRTc0N0JEMUVFMkU5N0QzQTlGRDdERjlCQ0ZEOEIKLToxMDMzRjAwMDRDRTM1NDAzOTY4QkZBNUQyQURFM0Y2M0YyNDZGOTBFRTYKLToxMDM0MDAwMEY0RUJBMjVFMDJFREVGRkI2MUE4Q0MwM0Y1QTk0NzAwNDcKLToxMDM0MTAwMDEyMUNFRjJEMTdGOTM3MzRGODg3RkMzQkI1Qjc5QkYwM0EKLToxMDM0MjAwMDk5NzZDMjY1RjM3QkE0ODI4NDhCNThGNDE3NTc1Qzk5MTQKLToxMDM0MzAwMEM5Q0I4NjI0OTI0RkU2MzNERTRGOTEzMjQ3RjgyOUFFNEUKLToxMDM0NDAwMDY1NUZGQzE0RjRBRDMzNkM2MzNCQUVEMTNEQkVFNEM1QTcKLToxMDM0NTAwMDVENkM2MDdGRDMwRkYxMkY1M0I0MjE3MzYwMUZDNzM5QTgKLToxMDM0NjAwMDc1QjI2QkY2NTQwMkFFNjE5RkY2M0NGNEQwREM2QjExODIKLToxMDM0NzAwMEVGM0IxNEYyRkIxRUREOTA0NkZCQjRGNzQxNjUyN0ZBRTMKLToxMDM0ODAwMDlCOEUwMjlGNzJGRkVFRkE1QjkwNUVGNzY2MzAzMzRFQzIKLToxMDM0OTAwMDE0NDFCRkREREVFODdERTdFMUI3Njg5NkYyRDg1NzI2MzQKLToxMDM0QTAwMEZFMEVDRkMzQkRDM0NERjYwRkYzRkU2NkQ5RDg3NjBCQTMKLToxMDM0QjAwMEU2NzVFQzFEQzlDQjM1QUYzQ0QzNjUxMDFERjcyQjY0MDkKLToxMDM0QzAwMDc3QUY3QjI3M0Q5MUZDQ0M5RkNCRjlDRTJDQ0YyQkJDOEIKLToxMDM0RDAwMDkzRDNGMTM5RkE4MUJDOUYzODI3NDFCRjk0MUE2RTdGOEMKLToxMDM0RTAwMEVENUQwNjIwNEQ0NDNDRTlEM0U2MDA5RkVDRTlCQkFCMjMKLToxMDM0RjAwMDdEMDI0QzM1NjVENjg2MUU5MkEzQzNGQUQ3MjY5MkZCNzEKLToxMDM1MDAwMDY1NzNGOEY5MTQyOTBFOTMzRDA2MzYzRUI3ODc5OTcyMTQKLToxMDM1MTAwMDAwRjM1QkU3MzE3NTEyREFGRERCNjdCRkYwRjM2QjYxMzcKLToxMDM1MjAwMDlFNUYxNDhEOUYyNDI3RTA2QjdENEU1RURDQkE1RTkzMTgKLToxMDM1MzAwMDU3QTI1QzdBRUZGOEEyNDQ3MjYwNkI5NTNFRDdCRTFFMkMKLToxMDM1NDAwMDFFM0Y2REQ5QTExMEZFQkYzQ0Y3RjQ5Mzk4RjcxRTI5REEKLToxMDM1NTAwMERFNDFGRUJEM0Q3Rjc0QjA0RDQwNkY3QjI2NzBGRDFGODgKLToxMDM1NjAwMDZGRjBDOUQ5ODMwMkRGNDNEMzEzRDAxREMwNzc3MzIyMTQKLToxMDM1NzAwMEY4QUU5QUNCNjg5Q0VBMjk1QTFERDZDN0MzQUJBMjFGRTYKLToxMDM1ODAwMDFDRTAwNTM1Q0I4RjcyMjRFNTBGRkZEMDgzRkVDRTNEQzYKLToxMDM1OTAwMEZEMEU3MkJBOUMzOUQxMjkyMzA5NzZGNEU1OTVBMkRBOTkKLToxMDM1QTAwMDdBNURGNTMxMTk0OUFBRDhGQkUwNjYwQzBERUIxQjY1NzUKLToxMDM1QjAwMDFCRkY0REVGNEJCNTk1OTczNzBFQjM5NTk3MzY4QzhBMTkKLToxMDM1QzAwMEYxMjNDMzdCNDI2MzZENjVCN0VGNkE1QjM5QzAyNkRCQ0QKLToxMDM1RDAwMENBOEJBQTY3REFDNjJCRjMwNjZERTUwQURGNUM1QkZCRDQKLToxMDM1RTAwMDJBRjU3QTVCNzk2RUZFNTI1QkZCMUE3RkJEQUQzRTU0QzUKLToxMDM1RjAwMDMwNTFDMTJCN0U0MDk3NUIxMTVGNjlCRDFBRjFGOTk2N0UKLToxMDM2MDAwMEJFQkJCQzQ4MTc5MUUyMTBEOURCNDczMjdBNzJEMDlGMUIKLToxMDM2MTAwMDdEMzhDOTc3RTc3RTM5NDcxNkU3M0JBODQ2MjgyN0UxN0EKLToxMDM2MjAwMDNDREY5NDE1NkIxRkM4RUJCN0Y5RUI1Rjk4QzNGNUQ0N0IKLToxMDM2MzAwMEVGQ0Y4OUY3RDcyN0JCMjdDN0NGRTdGM0JEMUYxNzdGOEEKLToxMDM2NDAwMDBFQ0ZCRkVBMkU5MjRCMUQ4QkU0MzBERUI3NkFDOTdGRTYKLToxMDM2NTAwMDNEQkQxRkQ3QjM4OEZCMTkzQTcyNjA5REU5OTRBRjQxMTUKLToxMDM2NjAwMEZDRjVFMkUyMUI0NjYzREMyRDM1NUYxRjg2RjJERjNDOTIKLToxMDM2NzAwMEJGODNGOTYxRjYwRUQ0QTc3QUMzNkMyQ0RFM0Y4MzcyNDgKLToxMDM2ODAwMEJEQjg4NzE2MkNFMEVGQUYxMEVGNTdFMzEzQ0VFRDcyMDUKLToxMDM2OTAwMDBCQkVFMkNGRTM4MDY3RTI0QjYwMzZCMEQ5N0ZGNkQyNTMKLToxMDM2QTAwMEY3RkQxNjE1NzA3RjUwRTlFOTcwMjlERUI3OUVBQkVEODYKLToxMDM2QjAwMDNCQzBBRjU1NzNGOUYzOEJFMkZGOUY5REU0RENERTM3MkYKLToxMDM2QzAwMDY3QUE5RDdGOTAxRkY2OUM1ODc4NTZGOUZGREIyNkVFN0YKLToxMDM2RDAwMDdGN0ZBRUM5QzMyMkIwQkVCNzlBQkNGNEZDNzU5MzhGOEUKLToxMDM2RTAwMERFQkZENkE0RDJCM0FEMjk5RjlFOTEyNjNGRDVGRkIyQUYKLToxMDM2RjAwMEE5OTA5RTA3OUEzNDdBQkVEQzU0NDlDRjgzNEQyMTZBNDMKLToxMDM3MDAwMEY3NEE1MzJEM0QwRjM1RTlGNEZFNzc3MzE4RDFDN0E1NUQKLToxMDM3MTAwMDAyOEY5NjZGRkExNTQyMkYzQTI0QzJFQjIyNENFNTlEOTgKLToxMDM3MjAwMDcxNTI5M0FERjIxREYwRkE1RTIyQkM1RUVDMzkxMjI5QTMKLToxMDM3MzAwMEVFMUUxNUUyRTc1NjQyM0VGMkNDMzVFRjhENzEzRDc5MzMKLToxMDM3NDAwMDlFNEUzMjNGMEE5RjBCRkQ3N0Q5MzFGRjlEMUI1NTlBNDQKLToxMDM3NTAwMEExMDRBNzM0NzdGOEUwQzFCOTU3Rjg3MUY2NjZCMURBNzkKLToxMDM3NjAwMEVGNzE3QkFBNTVBMkYzQzYzQjkxQ0JGMzQ3NDMyNTI0QzcKLToxMDM3NzAwMENGODc0RjRDMkNDRjczMDdDOEYzM0EzQUI3RDg0MUY0RjAKLToxMDM3ODAwMEFCNjJEQTExMEFFMzA2OUM3RjZBNDJCRjg4MzEyNEY3RjQKLToxMDM3OTAwMEFDNzhBMDc4QTY4OTA3Q0I3RUU1Q0RCRDg4RkQ4QTVGOTEKLToxMDM3QTAwMEZGRUMyMkVEMkFDNDI3REU1MzcxMEUxRDc4OEU1Q0QxMEEKLToxMDM3QjAwMEZGQjE4NkJFQTlFNzBCMzhCQ0RCOEYyRjFDODJGQThBQ0IKLToxMDM3QzAwMDFCOUQ1MkE0QUY4MEUyNTY4OEZCQ0Q4NDNFRjI2ODU3MjEKLToxMDM3RDAwMEMzQUM4MUUzRkNCNkI4OUJDRUY1RkJBMjdBQ0UzRjkxOTkKLToxMDM3RTAwMDlFMTNERjBFN0UwRTEwMUVGMERDQjJFMDIxODExQzI4M0QKLToxMDM3RjAwMDQ5QjRGRTMyRjk4N0ZEOUJBMEZGREU3RTQ2N0UzMzE1N0QKLToxMDM4MDAwMDc1NkE4MEZGMDU4NTdGQzc2MUVGNDkwN0UxRjk4QzQ3M0QKLToxMDM4MTAwMDIyRjlFODVFN0ZCNzA3N0RERkNGN0Y4REI3MzM2QTI0NUIKLToxMDM4MjAwMEJBREY5MEI2N0Y4RjhBN0E2QUEwNUYxRjg2REYyMzJCNkMKLToxMDM4MzAwMDhDNTQzOUYxRkJBMTI1QjMyNkZBNTMyQzc0NTBBMkQ4MkQKLToxMDM4NDAwMENGNDlENDU0QTNFNzBFMzlDNTg2QzY5NTJGOEJCNTk3QkIKLToxMDM4NTAwMDcxRkZGMzYyRTU1Q0JBOTdCRDFDRDdCNUYwNTQyMzUzRjIKLToxMDM4NjAwMDBCODRGRjM1MzE5RUQ2NDgxNkJGOUJDMkZDRUREMzczNDcKLToxMDM4NzAwMDQ5RUYzQzcwMTlDNjc1QzZCMzMwN0QxRjAyQ0M4MzkwRUEKLToxMDM4ODAwMEM1OUYyMEE3ODdFOERFOUU2OUE3N0YyNDY5QjdFMTdDRjIKLToxMDM4OTAwMDAzQzY2RkQwMjgyRUM3MUMwRThBQ0I2RDk4QUNERjg5NkIKLToxMDM4QTAwMDc0MzIyMDZFRTM3REY5MkYxMjlDNjlFRDBFMTY0MUZERjYKLToxMDM4QjAwMEMyQzg3NDExRkVFMkY3RUI4Qjg1NTVGN0UwM0NCRUNGMzIKLToxMDM4QzAwMDZDRDdFRjkwQUNERjExQjg0MkJEOEVFQ0E5MzM2MDRGREUKLToxMDM4RDAwMEUxM0Q5NTE2ODVERjlGMzJERUNBMDg3NzExOTAyQzFGRDcKLToxMDM4RTAwMEY1QjY3QkU1QUJGREI4RkY4RkE0RkQzREQ5NDdFQkMwMzYKLToxMDM4RjAwMERFNDJGQjZCOUI5MEMzMEZBMDFDODZFNzM2MjdCN0I3NTEKLToxMDM5MDAwMERBOUFERERFQ0U2Q0I0QjczMjBEMDcxQzVDMUZBNjhDRDQKLToxMDM5MTAwMDA5MzM1OEU3MjM0MjZFQjlEOUYyMjFBMTA5Njc4MTVGQzMKLToxMDM5MjAwMEQ4MjdDRUU4QkVFNzc4QzlERTEwRTU3NDk3RUVGODEzMjUKLToxMDM5MzAwMERBNzU0N0U0MzBGQUREQjY0RTdDQUM3NjI1RTI2RkEyNEMKLToxMDM5NDAwMDg3Qzc0NTk1ODhCQTAwMTUzNEFGQzFCMjJERjdGQjY1MUUKLToxMDM5NTAwMEE2QkM4QjdFREE3NjUwNjYzMEZFN0JCRkI4OUY5QkUxQkIKLToxMDM5NjAwMDc3RDhGNDlEMjE4NTc2N0RFRDNCODMwNEI3MEIyNTExMzcKLToxMDM5NzAwMERBQUREOUFFMzBFNkU5QTgyOEI3MDBFRTc2OUY4M0Y4MzUKLToxMDM5ODAwMEFCNTVFNUYyQTEzNTVERjM3ODEzRUNFRjE2QzRCNzNCMDgKLToxMDM5OTAwMEY5RkM3MjZFQUIxN0ZEREUzQkQyMURDNEJGRURBQUIyQkYKLToxMDM5QTAwMDM1MTdDQUVERTkwQUZGRUVBQkVBQTg0Qzk0QzdGMkNFOTAKLToxMDM5QjAwMDVDOUVDNzAyNEQ1MjI4NEYyQUIwOTBGNDlENjRGMzc0NjgKLToxMDM5QzAwMDg4N0QzN0NCQTkwNUJBNDY3Q0E2RkE0M0I4OUU5NkY0MDMKLToxMDM5RDAwMDZDMDlGN0M1QUNGRkYxNUM0OTdDNkY4MUZCOTVCNzBBQjgKLToxMDM5RTAwMEZEMjkzNUJGM0I4MjdFOURCNjkxQUIyNzIzQkEzQ0EwMTMKLToxMDM5RjAwMDBGQkQwQkVGM0QwNUREQTQzRkE1NUZFNkQyMTNDMUZCNzQKLToxMDNBMDAwMDdCMzFERTU2QTdCRjEyRjFCOTM1QzNDMTBDQzBERkQ2N0EKLToxMDNBMTAwMERDMjQ3MUFGQjk1QzhGNkM1MTI3ODU4OEJFMDExRkUzMzAKLToxMDNBMjAwMEE1ODFFREY2OEI3RERFRUNEQ0UxQzNGQjZDNUJDNzJGODMKLToxMDNBMzAwMEExN0NCMUFEQTNCOTdDRkU0QTc1NUY1NzczMDFGMkNEOEQKLToxMDNBNDAwMDU3RDg5RjkwNkZCMjE1REEzNzk1RjkzRDc4Q0VCNTc5OTIKLToxMDNBNTAwMDE1MkZGQTA1QTY2NERGRTMwOTU4RTQ1QzNDOUYzODQ3NUMKLToxMDNBNjAwMDJFQUNBREEzN0M4MjU0M0YyMkJENEMzRTQ0REYxQjY5OEIKLToxMDNBNzAwMEYzODNEQ0NEQzU3Q0E2NDZBRkY1M0IwMkEwNzc3Rjg0RkYKLToxMDNBODAwMEYyRTM1Qzc0QUEzMkREODNGODg1RjE4OThFOTJFRDVGRjIKLToxMDNBOTAwMDNDM0NFOTI4OTkyNjlEQTU3RDk2NUU5QkU4M0IxNkY5NUUKLToxMDNBQTAwMEQ1MEUxQkREMzhDRjQxMzdFNzgyREY3NjJFRTZDNENFNTgKLToxMDNBQjAwMDQ1REYyMURGNkE4Qzc3RENDRjc4RkQ2NUQ1RUY3NUExMTYKLToxMDNBQzAwMDVEMUY1RkZFQUNGQ0Q5QTJFQzIwQjlERDMyQ0U0NUY0MUYKLToxMDNBRDAwMDE0REY3RjZCMkU4N0U3RThDRjdGNEZGM0ExRkIwMUY3NjEKLToxMDNBRTAwMDJEQ0JDM0ZENEQwRjE0MEU0RDQ5MjQ5N0NCQTZFOEZFRjgKLToxMDNBRjAwMDZBOEI5RTkzNTVEQTRERTc2RDRBMzUyM0JBNEM1NzQzOEUKLToxMDNCMDAwMERFNzEzMDRFN0FBRjBDMzQwQUY4NzY3Q0ZDRTc2M0VBNUIKLToxMDNCMTAwMEM1RTM1MUQ5RDFDODQyMzA1RTY2QUY0Q0Y0ODkzRjFGMkUKLToxMDNCMjAwMDgzMUMxQzIyRTRFMDk2Q0JGRjk1NjE1RUM5RjZCMThBNDYKLToxMDNCMzAwMDlGRTdCM0JDRTczRkRCNzk5MjM5Q0JFRTRGQkE1MDdGQkEKLToxMDNCNDAwMEQxRkM2QTkxREY5MEMyNTI3ODNFNTE3NTg5NDI3OTNDMkUKLToxMDNCNTAwMDBFN0VDRTZBRjBERjA4MjEyMjI0QjFGRjIzNzhDODlGQjEKLToxMDNCNjAwMENFNDlDNkZENjREOUNCMThDOUNENjg1RTBCN0U5NzA2RDkKLToxMDNCNzAwMEM3RDExOUU5MjM3OEIxMTZEQjVEQjY4NkVCNUIzOUFDQUEKLToxMDNCODAwMDVGQzI3OEUwRTU5OEREMjMyM0JENzNGOTc5ODZFNTM4RDcKLToxMDNCOTAwMDI4QUYwN0E2QzFCQzE0Qzk3MEQwQjlGOEYwRTU0N0E1OTUKLToxMDNCQTAwMDAwQkM3REEwNjhGNTQ0QzQ0N0ZDM0ExQTA2QUNFM0VDQkYKLToxMDNCQjAwMDc4MzBFMTFDNkMzQTM1Q0ZFRjE2MEYzRjhGMzUzOEI4QUYKLToxMDNCQzAwMDUzNTA1OThFRjM3Rjk2QzkxQkY5Nzk2Q0I4QkQ3ODVFNTYKLToxMDNCRDAwMEI3Mjg4RENGNjAxOTdBODdDODVGMUFFN0ZGRkMzMDg1NTgKLToxMDNCRTAwMEZCNDdBNTdCOTg1NzJBMjJGRjY3M0VFRUQzM0E5NkVBMTkKLToxMDNCRjAwMDQ3RkZFNDEwNDVGNzYwN0REQTM4ODVGRTVFMDNFOEREQjcKLToxMDNDMDAwMEQzMzFERTEyQjNDQkQ1NzQ5RTQ3Qjc4RUYyMEQ3RjgyQ0YKLToxMDNDMTAwMEU3MUFCNERCRkZGMUQ5RTVEMUIzRTczOEQ3M0E3QUM3NzEKLToxMDNDMjAwMEE1OTM3RkRENTM5Rjg2RjZGODczQkVCQzQzNjhERjlDODcKLToxMDNDMzAwMEYxRjAzQzMwQjNEREZFQjhFRkEyQjQwOTM5Rjc2QUI1NTQKLToxMDNDNDAwMEYwQTNBNzdDMjg2M0ZGRUI3Q0FBODJGOTc2MjU5RTg5RTYKLToxMDNDNTAwMDI0REY1QkE0QzRGMTgyMzc4NDdDQkI0MjdEOTVEM0Q5MzkKLToxMDNDNjAwMDFBRjM3QjY2NkI0OEZFRkYyNjQzRDA2RjgzQkU5NEZDM0QKLToxMDNDNzAwMENBNDJERjYzOUFBNjdBQTdDNUY0M0NGM0JDRjQyOTVFNzYKLToxMDNDODAwMEUzNzYxQzQ3RTQ2MTBENThFN0ZFREIxODdFQTc4NUY5NTMKLToxMDNDOTAwMDJDRkVEOTNDOUM3RjQ4MzRGRjhFRjgzOTRFQkY0Qjg2QjIKLToxMDNDQTAwMENGMEU2MTFGQjdGODRBMjg3RkUzMENDQUFDMDRGMTEzQUEKLToxMDNDQjAwMEYzMDk3QUVBNEY1MTRFNERFREIxQ0I5N0I0N0NCQjdDMDIKLToxMDNDQzAwMDY5NzczNDUyM0U5ODcxMzVGMzYyQkUwOEFCRjZGQkFDQUYKLToxMDNDRDAwMDdBMzJFOEFCODdBQUM5M0VCNUVCOUQ2QjZBMThGRkZFNDYKLToxMDNDRTAwMDc2OTZBQUEwOUYyNkU4MDkzMDhDNEIyODM5M0FDM0ZENjYKLToxMDNDRjAwMDcwRjlGQzY3REQ4RkFFNkFBRUE3QjRFNUFGMENBMTVEQ0QKLToxMDNEMDAwMEIzN0RGNjk3MDgyRjUzMkE3OTdFQUFEOTBFQ0VDQkEzN0UKLToxMDNEMTAwMEQ1MTZGQkM2RTVFM0ZBRkE3OTdGNjdDOUVCQjhBMEVGRTEKLToxMDNEMjAwMDJDNzVDQ0JBODU3RjY3QzlCNzkyQkVCM0Y0MUNEMDI1NzkKLToxMDNEMzAwMEYyQ0JGRTBDM0QwREY1QUYwQkZEQ0VEMjJEMzVFMjNCQTcKLToxMDNENDAwMDNFMjkzQzFGNDVFOUUzRjEwN0E1NEZBN0JDMTI5N0VGQjkKLToxMDNENTAwMDE0QzU2RkFFMTM3OTI4RjFGRTIyQjdCQjkxRTI2RDkxQzUKLToxMDNENjAwMEUyQzZBNTU2N0ZCMTg5QkYyRTQxRDdCRjJERDYyOTVGQTgKLToxMDNENzAwMDI4RDlERjg5MzBEQjIxQzY3MDVENkVFMTBGREQ1MkJDRDIKLToxMDNEODAwMDgxRjBCRkIwMzI4QkZDNTE4QUYwNDdCOTRFRTk5NDFGRTUKLToxMDNEOTAwMDFDOUVBMjY3RDY1OEYwRUZDRTMxRThCQzRCRkI3QkM2MjkKLToxMDNEQTAwMEVGQzE3RkM0RUZDMUE3NkQ2MjI1NzhFRkJERTRFMzQ5QTEKLToxMDNEQjAwMDE0QTcyQTg5QTQxMDlGQ0QzRUVEQTdFRjU4OTdDOTRGQUQKLToxMDNEQzAwMEI3RTc0MUZERkU1RTg1RjJGMkY2Q0Y0RUNEQzY3M0VENEMKLToxMDNERDAwMDgzNUVBRURGQTZFREJGRUFEMDE3QTE1Q0RDNUI4RjNFNTEKLToxMDNERTAwMDAxOTAzQjAwQ0JEMDgxRUI5ODdEREFGMTk5RUNDQ0E5MjYKLToxMDNERjAwMDY4Njc1QUUyMjVFNkI4M0Y2ODNBNDhGNEYxNkM1MzBGMTkKLToxMDNFMDAwMDNERjczNDQ1RThEOUQxRDQ0N0NGNDI0NTBCRTI3QTBBOTEKLToxMDNFMTAwMDdCMjg3NkM5NjY5QzgwN0EwQjFDODU2RjQxN0YwQjNEQTEKLToxMDNFMjAwMDc4QTdFOEQzNkI4OEZGN0E2Q0VERDJGMkZCNkNFREMwMUIKLToxMDNFMzAwMENFOUQ4OUY4NTU3QzFDOUZBRTZBRkU3NzM4RTZGN0IxQjcKLToxMDNFNDAwMENEOTJGQTNGNEE1RTJENDczQzBDODJCQzVBNTk3MzU2QkMKLToxMDNFNTAwMDc5QzVFM0E5MjU3REUyN0I2M0E2REMxMkZDRjg5NzZBQUQKLToxMDNFNjAwMDk1N0YzN0M5RTQ0QjExNTczNUNGRTk3NkZDMTVDRUQzOTIKLToxMDNFNzAwMDk2Q0MyRjcxRjk2NkU2NkY4ODdCOENFNkY3RUFEN0Q3ODgKLToxMDNFODAwMDlDREM4RERGQkQ2QjdCRDNBQ0ZGNzhCNzY2QTk2N0M2QzIKLToxMDNFOTAwMEJGQURDNkZCMjhGQkQwQjgwNTNERjRCNzM1M0Y1RThERkUKLToxMDNFQTAwMEZFODYyNUI1NTk4QTA2RjAwNTMxMDA5QjE1QkI0NzYzOTAKLToxMDNFQjAwMEU2M0JDNkUzRUQ3ODBEQjc4NzhFRTQ3OUM5MEZERjA2RTAKLToxMDNFQzAwMDdCRDI5OTAwQ0YyRkQ3MDhCQjREQjVGRjNEOTBENDI0QUUKLToxMDNFRDAwMEY3ODcyMjYyREM0MzAyNkZFRDJFOUVBNzkwRUM5RUM4MEUKLToxMDNFRTAwMEQ3NDVGQjY0Rjc0NDdFNTUyM0UyRjVFN0I4MTdGMjFEOEEKLToxMDNFRjAwMEQxRUVGQjM4RUY3MENBQUZGQzI3RTQyM0YzRUY3NUZDN0IKLToxMDNGMDAwMDQwQzAxM0ZEM0IxRDNFOTY3MDlDMkUyMTc3NDdDRkUzQUEKLToxMDNGMTAwMEY5QzkyRTlGNDZERjQ1ODNGMTlFQTJGMUM0REY1NTMwREIKLToxMDNGMjAwMEVCNjc5QzhDRDZGRjMzRDU0N0ZGN0U4MjRFN0UyMkYzMTMKLToxMDNGMzAwMDlFNUVEN0UxRDc3NjM3MkJCMUJDOUNCNkU4RjcxNjc5RjEKLToxMDNGNDAwMDlFRDNGQjAyRkVGOEE3Nzk0RjI1RjY1REE5QzNCQjM1Q0EKLToxMDNGNTAwMENCNzdBNTFFM0ZEQ0ZCQUVGOEVFRDU1RUEyNUY3MTNGQ0UKLToxMDNGNjAwMDY3NUIwQzBGM0ZBNkY3NzFERjE5RDg1M0YzRjI2RUYxQzAKLToxMDNGNzAwMDdEQzVGRDA0Nzc2M0RDRjdCQkQ4RDFEREQ2RUYyNjZDQjkKLToxMDNGODAwMDNCRkNENjZBRDFGRTIwQjUxN0RGRkI0QTQwMTc4MjZFOTQKLToxMDNGOTAwMEZCNzdFM0JERDFGMzE4RUY3NTgyNEY3Q0FGNkI2MzBERjgKLToxMDNGQTAwMEU3QTM2NEY0MENFREZCQTg3REY0M0JDNkY1MUUzQzU3N0IKLToxMDNGQjAwMDYyREYzMTdFODNGMDczMUVGODNBNDZFM0U4RTZCQzRDREMKLToxMDNGQzAwMEU0NDM3MTdFMzFGM0M5NENCQTkwRTc3MTNBREQ1QzIzNkEKLToxMDNGRDAwMDk5Rjc5NkZFNDA3ODU4MzU2ODc4Rjg4MEUwODlCQjlGNUQKLToxMDNGRTAwMDc0QUU3NTNDMzMzOUY0MTFGNUYzNDVGMzk0RkY4M0NBOEQKLToxMDNGRjAwMDlGMTExRUYzNUU1OTNDN0YwQzlEMjc5OUY5RDEyOUYzM0YKLToxMDQwMDAwMDcwOUU5Q0U4RjczQzUzRTcyNTk2MTMxNzM0MkY4QzlCNDIKLToxMDQwMTAwMDRERTNDNkJFMTMzQTdDREUyMEFDODdBOUU3OTc1RkYyN0EKLToxMDQwMjAwMDVGQkMxMEZFMzUxMDcxMDAwMDAwMDAwMDAwMDAwMDAwQjEKLToxMDQwMzAwMDFGOEIwODAwMDAwMDAwMDAwMDBCMEIxNDYwNjBGODUxOUIKLToxMDQwNDAwMDhGQzBEQzY4N0M1QUUzQkY0QzBDMENGQUNDMEMwQzk3OEMKLToxMDQwNTAwMEQ4MTgxOERDMzgxOTE4NDRGOEM4MzNFNzMyOUFCRTg3RTQKLToxMDQwNjAwMDQwQjM2NkYxMzAzMDJDNjM2NTYwRDgwOUM0ODY1Q0Q4RjMKLToxMDQwNzAwMEY1RDkwOTIyRDhDNzgxN0U1RjA1QzQ5N0U5MUMwNkEzM0MKLToxMDQwODAwMDc4RjBFMDNBMTEwNjg2MjlBMjA4QkU4MTE4QUE3Q0JEMDQKLToxMDQwOTAwMDA4ODJBRDI3NDU5OTVEMkU0MEZEMDBDNUY2OTRFMjgwNkIKLToxMDQwQTAwMDAzMDAwMDAwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwNUIKLToxMDQwQjAwMDAwMEJENTdEMEQ3ODU0RDVCNUU4M0EzMzY3Q0U5Q0Y5MjEKLToxMDQwQzAwMDRCNEU5MjAxMjcyMUUwOTkxMDMxRDg0MDA3NEMxNDVBRTkKLToxMDQwRDAwMDVBMjcxMTZEMTRENDg4N0ZEMTdBN0IwN0RCMjI4QUNBRDQKLToxMDQwRTAwMEQ0N0E5NTZCQjE5OUZDNEY0MjgwMDA4QTE0MkQ4QzNGOTUKLToxMDQwRjAwMDU0QjBGQTlBMkE1QUFDQjU3N0EyMTQ2REY1NUREMTVBMkMKLToxMDQxMDAwMEFCQkRCNDJGNTY2QkFCNTUxQjVCMjlGNDE1RTVFREI1NzQKLToxMDQxMTAwMEY2M0U5OTczNEU2NjMyODM0OERCMTczRkJGQ0QzRUZCQjgKLToxMDQxMjAwMDZGRURGNUI3RDc1RTdCRUQzRDBBNTQ0MUQ1NjkwMDg3NDkKLToxMDQxMzAwMEYxOEZBNUY3RjkwMEEwM0U5M0NFRkFDNjA1Q0IxRUFDRDEKLToxMDQxNDAwMDYzRkZGNkI5MjNEQjU4MzJFQkU5Nzk5NUIxREE0Q0ZEMjAKLToxMDQxNTAwMDdBOTAwMDI2MDAzNDNFN0RGOTFGODFENUZCMkY3MEVBNEUKLToxMDQxNjAwMDZFRjZFOUM5QzA4ODJGQzJGMjA5QzkwOUQ4Q0UwRDBENzMKLToxMDQxNzAwMDY1RTcwNDU5Rjk0MTQ3QTQ4RkU1RDM4NzFDN0U2MEZEQUMKLToxMDQxODAwMENDMDQyNzhEQTM4M0U2NkY5RUMxQkVDQjE3MTQ4M0E5RjEKLToxMDQxOTAwMDdGN0JGQUY5NEQzMkE0Q0IwMDlFQkEwNUU0NjY1NkFGOTgKLToxMDQxQTAwMDJCNzBFQUU1QzM3RTgwRTc1QkQzN0Y3REUzMDQ4MDY4MDQKLToxMDQxQjAwMDdBQkFBQ0IzN0U3NkI3M0U0M0Y5MUZCN0VFRkRFQjFCODAKLToxMDQxQzAwMDJFODAxODk0RDAzODhERjNERTk3MTdCMzc2NEZCOUEwQjAKLToxMDQxRDAwMDY1OTBCNTZCOEM0QUFFQzVBNkYxNjI2MjNFNEY3OTQ0REMKLToxMDQxRTAwMEI5RDYyMDY3MkQwRkIwNzJGNkJEMzE3ODdFRDZGMjE4QTEKLToxMDQxRjAwMDlCMTFENTJCMTFGRDFDMUM3NjYyM0QxRDQ2N0MzNENGRDYKLToxMDQyMDAwMDQzOEJCMkNFRjMzOEQxQ0VDOEQ3MERGM0Y5M0VGOUVCREMKLToxMDQyMTAwMDAzMEI5MDBFNjkyODZFNzY2MzdBQTg2QTFGRTI3QjQ4Q0EKLToxMDQyMjAwMDk1NzQwODMzRkMwRTlGNERGODREMjM3RTU5MTcwNzVFOTkKLToxMDQyMzAwMEUzRjg3RUVBNDM0N0E0OERFMUJCNTFENUZDMTE5NjA3MTQKLToxMDQyNDAwMDk5RDE4Mzk1MzdGQTIxNEE3MEM5MkM2NTcwMkMxMDcwNkEKLToxMDQyNTAwMDVGMkFEMjQ1OTgxMjVENzRBMkNCOTBDQUU4RTJDRjBGRDQKLToxMDQyNjAwMEVGNjk5QjE0ODJENzk4RTcxMENFQjM4MDc2MDY1REQ5QUMKLToxMDQyNzAwMDU3N0Y3MzgwQjU4M0VDN0MzMDE2M0Y2Q0JDOTM4RjFDRUEKLToxMDQyODAwMDRFMDNBRkNERjM4NkZFRkE4NjBBRjQ3Nzk4RkQ3Rjg2NUIKLToxMDQyOTAwMEY2RDNCRkJFNTE5M0M5OUY3NjcwQUYyNUNGMzgxQUQ0REQKLToxMDQyQTAwMDUzMThCQ0Y4NEYxRDUzRjk4MzYxQTMzQ0NDQ0I3MTlDRDAKLToxMDQyQjAwMDY0QUJGRTQxMzVFM0JGODE1NkY4QTA5QUYxREY5QTU2MTAKLToxMDQyQzAwMDk1RjJGREFEMUFFNUZCNUE0Mzk0NEZDQUFDMDlBMzYzQkUKLToxMDQyRDAwMEIyMUY1MjA5RDZCRTI0Q0FFQTlCQzYyQjlFQzNEQTk5RTYKLToxMDQyRTAwMEUwMEI0NDM0NEJERTU3MTNCMkQ0RjdFOEJBQTUzQ0E5MkYKLToxMDQyRjAwMDVGRUY0ODMxQkFGN0Q2M0E1MjRFMDlFMTYwMzI3MjIyODYKLToxMDQzMDAwMEMyQTE1MkNBQzA3RDM5QzRFNjUzQ0Q5QkMwNkE5N0ZFOTQKLToxMDQzMTAwMENCMkE4NEU3MDUyN0I0QjM3QzkxMUU3NTVDQzFGMjUzQTgKLToxMDQzMjAwMDQyNEU0ODQ1RDhGODQ1MjMwMEFDQkZFNDJEMDBFQjU5NzgKLToxMDQzMzAwMDdGRkRCMzRFNzE1Q0MxRjI3RDczREQ5QTUzMDM0OEIxQ0EKLToxMDQzNDAwMEZFOTM2RUQ2Q0Y0NzY5QkQwM0ZCOTlBMTQ0QjAxRjE4RjkKLToxMDQzNTAwMDkwN0Y4Qjc4NTJEOTdGODdBQjAwQTZFQUNBNkI4RTIyRkEKLToxMDQzNjAwMDgwNzA4MjdEMzdDRkNGOUQwOEExNUMxN0NGQjE3RTlGMzMKLToxMDQzNzAwMEFBMkZCOTE2NThGREE5NjBGQTFFQ0VEMEQzMThEN0M4RjcKLToxMDQzODAwMERCQzdCMzhGNzNGQzBBNUJGRkI2N0VBN0U4QzMwRDVBODkKLToxMDQzOTAwMDZEQTZERkUzNjFBNDRERjNGRjJCRjcxQjZEOTQ5MDRFRTgKLToxMDQzQTAwMDExRDA1M0IzOEUxRERDRkUxNTdGMjk3OUUzRTQwQzlFRkEKLToxMDQzQjAwMEZCNUQ1QzBGREFFNTZEMTgxQ0E0M0Y0MDlFMDA1MTA2QzIKLToxMDQzQzAwMDk3QUUzQjUyN0RBQzlGQkVCMDgzRjg0N0VGODIxNEVBQjQKLToxMDQzRDAwMEFERDU5M0Y3QzYzMURGMTc1NkY0NzY5NjBGRDdFQzY5NTMKLToxMDQzRTAwMDkxNjYwMkFDOUFBQzExREZGNTNERTE4NkY2MDg4NzIzQjEKLToxMDQzRjAwMEM4Rjg3NDhBQzFBNzFGMEQzNzU0MjExRjRBMTA1OUNGMUUKLToxMDQ0MDAwMENBQzNGQTlCNkQ1ODVGN0JEOUFCQkJFNjhDOUQxRkFDRDIKLToxMDQ0MTAwMEUwRjNBNzNDOUJGRjA4RkVBMzdFNkNCRjNGQUI1N0EyMTcKLToxMDQ0MjAwMENEQzhCNzA5NDhCOTE5M0NCREQ1RUQ0RDA5MzZDRTk2NzIKLToxMDQ0MzAwMDg0MEMyODNGN0RCNzBDQkU4Mjc4NEU5RUMwRTFCNUNGN0MKLToxMDQ0NDAwMDdCOEFBRTJDNDZCRTA2RjNGODZDQkMyOUQ1MTcyRkMzNjkKLToxMDQ0NTAwMDc5RDlFMTMwRjRDNTlEQUQxQTQ0MTlCRDM2QjdENjkwNkYKLToxMDQ0NjAwMDVDNkU2OUQ1MDY1MTRGNkNGRUQwOTkxNUJGMEIyNEFFMUEKLToxMDQ0NzAwMDlGRUY3MDM1M0IxMkI4Q0U0RTc3QTRCNjQ5RDg1RjZDMkIKLToxMDQ0ODAwMEYzNTUwQ0RFRDVGNTEzNjdFMzNBNzBGRDc0OEVFRjBGMkMKLToxMDQ0OTAwMEZBMDVCRUE1RDRBNTQwRjUxNTlERUFEQkU0N0Y4QjFDOEIKLToxMDQ0QTAwMDZENDc3OTVFMUQyQTgzMDRDM0VCMTREN0RFQTZBOTk4NTUKLToxMDQ0QjAwMDVGNTEzNTJCODE3OEFGQkJGQjM1RUM2RkNBRjQ2OTNBOUQKLToxMDQ0QzAwMEUyNjM2QUNEOUJGQjUwMkUzNzdGOTQyMkI5OUQ1QUMzN0QKLToxMDQ0RDAwMEU0OUFDRDczQ0E4QTg5ODNENThDNEYyQUY1RDREN0E4OUMKLToxMDQ0RTAwMDdFOERBMkE3QTQwQzVGNEU4NjQ4M0JEMkVCRjgxNjFGMjgKLToxMDQ0RjAwMEE0QjVGQ0ZDMzkzOTNFM0U3RjFFM0IzREYwOEY5MUFCQUQKLToxMDQ1MDAwMDQ5MzZCOUJBMjM4NzVDMkQ5NDFDQzQyRkEzNzI1NUMzQjYKLToxMDQ1MTAwMEU0OEFFMTc1Qzc0OTU2QjlEQTNDMzlGNTU2MzFDQUNGNTQKLToxMDQ1MjAwMDBDQ0VBNzc2M0UwRkQ3QkNEOTgwNzRFRDY3RjI1MzFBMzQKLToxMDQ1MzAwMDAyQTg3MDBGRkM1OTQyMzk5Q0M1RUE0QjU0MkU3RDk5NTQKLToxMDQ1NDAwMEU1RkZGNDBCQUYwRTI4NEZCNTlDQUVGOUU0Q0FFMEU3RTcKLToxMDQ1NTAwMDRDNkExRDc3NEI5REEzQjE5OTgxRkFCM0FCMzZCRUVEODIKLToxMDQ1NjAwMEM2RjE2QTE1MURFNUFDNEZERUY0NjdDNEIzNUVBRkU4NzMKLToxMDQ1NzAwMDA5QzkyNDRGQjU1QzlFQTZENDMxRjlDOTIyNTdGOUM2QTIKLToxMDQ1ODAwMDRGQjZBNkUwNzUyNjQ3RUI1QTQzMjQ1RjZCNUI3NTkyRTYKLToxMDQ1OTAwMEFGNTU0MkNFRDY2MEQ1QjkyQzJGRTQwQ0U2Q0NBNjdDMjQKLToxMDQ1QTAwMDJFRkIxM0EwOERFNDRFRDVGNzAyREFDMUVCNThERjUwOTUKLToxMDQ1QjAwMDgxREZEM0QxRTgzQzgwRDIzQTIzMEY2OTA3NUJEQkQ3OTgKLToxMDQ1QzAwMDhFOTY0MzE0MkEwOURGMDA5RjQxRjBGRTk4ODhCMkY2QzgKLToxMDQ1RDAwMDVBMURDRjNGREVGNkM3NDQwNzEzQzI3NTFFNUVGRjA5QTIKLToxMDQ1RTAwMEE5QTYyMTMxQ0ZEQzdFMEZGNTZGRDQ2N0Y5NzQ2M0I1Q0UKLToxMDQ1RjAwMEE5M0ZFQ0RGMDI4RkEzMDFFQjFCRkRCRERBNTZEMTkwODIKLToxMDQ2MDAwMDYwRTNBRjE1NzlBNUJEODRFNzhGNzFGRjRDREY4NDE4OTcKLToxMDQ2MTAwMEQzNDM5RkFEOUZENTkyRTgyN0YxNkMzNEVBQ0Y4QzczREEKLToxMDQ2MjAwMEJCRjQ1NjM0NjEyOUZGNDMxNEYxNjQ5NDdGQjdFREQ5OEMKLToxMDQ2MzAwMDQ0ODJENTdGMUY5QUJGMjUzMTNBNEM5RjFGQUI2MDVCRTgKLToxMDQ2NDAwMDE4RjAzNkVEMDUzNEE1RDZEOUYwOUQ5OURGMEIzNEJGQUYKLToxMDQ2NTAwMDQwMERDRkRGRERGNjYxMTRGMTZEOTQzRjJBMDVEQTEwQ0QKLToxMDQ2NjAwMERGQzgzN0ZFODlDQ0FFQzI3RkIyMzE1N0ZERTQ0NzRCN0QKLToxMDQ2NzAwMDlGQzM3RkNGMjkwNTI4NjdFM0U4MDNDQ0QyNjRCM0FGOUIKLToxMDQ2ODAwMDRFMDFFRTNCN0MzNUYyOUJBM0ZDMDcxOUJFNjNGMDNENjcKLToxMDQ2OTAwMDI4QjE3NEZBQkNEODY1QjgxNDY2ODEyRjYxODZDRjE4MkEKLToxMDQ2QTAwMDNGMUZCQzA2MUNCOUY5OTM4RjZGRTdBM0M2MzNFNzNDRTUKLToxMDQ2QjAwMDNGOEZDOTlCNzdBRjJCQzJDNDgwQ0Q0MzkzNzAxRDI4MTkKLToxMDQ2QzAwMDQ1QTA5ODVFMkJGOUU4RTcyMURDOEE4MUNDRjQ3ODYwN0MKLToxMDQ2RDAwMDZDQkZBNUYzMkIyMDY1OTJGQjRGOUE5RURGQzIzQ0M3QUYKLToxMDQ2RTAwMERCNEI2NkJBQjJGQ0NCNjYzQzNFODhGNUVBQzdGMjlENkUKLToxMDQ2RjAwMDMxM0Y4Rjk4OUY2N0NDRkNFRTY5QzFGOUU1QzI5QjdEODUKLToxMDQ3MDAwMDdFNkIzRDAzMkRDRDU5RjYxMTlGNzc4OEZERUVFN0U3Q0YKLToxMDQ3MTAwMDlDODdGREIzRjEwMEY1OTc0NzFGMjEzQjVFQzNGMUQ4OUQKLToxMDQ3MjAwMDU2QjNGOEEzOUZCNzIwREZFNzFBNEY5QkM3QzZBQjM5MzQKLToxMDQ3MzAwMDc2RjhDQ0M3QzcwMUE2QkY4ODhGRUIxODFGRDdFNkU2NkYKLToxMDQ3NDAwMDYzQkIzQzFCRjNGNjhBNzk3QjczQ0M5QkFEOTQyMURDNzUKLToxMDQ3NTAwMDhGRkRGRjNBRUZCRkM4N0M1RTM3QjAzRTEyN0M1RTVDRDcKLToxMDQ3NjAwMDNFRkU0OUYzRkFDQjczNjUxMkFFRUYwODhGOTNGMzczRjUKLToxMDQ3NzAwMDI4MUI3RkJEMkVFOTk2N0RBRTlEQUY3M0NERUI5RkM1MDcKLToxMDQ3ODAwMEE3NjNFNzM1M0U5RThGQjUxRTJBNTRCRkI2QkZFQzI1MDIKLToxMDQ3OTAwMDNDRjZENUIyN0QwMkVFMEI5RTM5ODNGQzE1N0RDRjlEOTQKLToxMDQ3QTAwMDdFMUNGQTFGQkNDOTRGNDFCNDBDNjAxQUY2Q0ZFQzg5Q0QKLToxMDQ3QjAwMDNFQjQyRkIwRkY0RDc1MDVEOTE3RkRBRDMwRDg3OTAyNDUKLToxMDQ3QzAwMEMwMjM0NTBDMEY3RTlBMjdCNURGQ0NFQ0NGMTQ1MzcwNzUKLToxMDQ3RDAwMDc1MkZFQzU2MTc2MzdFRTk0MzJBRkE5NUZBODRCRDU4ODMKLToxMDQ3RTAwMEY3QzJCREVCQ0U2NEY4RjRDRjI4OURFNTY0QUNEMEU3MEEKLToxMDQ3RjAwMDMxQkVFRkZDRTkzNEI0RTM2QkQ5NzdDNDVCODBGN0M3MTMKLToxMDQ4MDAwMEJFQkY4MEY1MDMzM0Y4Rjc1QzcwRjk5NDU0MENFREZCRjAKLToxMDQ4MTAwMDQwODRDMTY1RTIwN0EzRkM2MTA3Qjc0Qjc3QTA5RDc1OTMKLToxMDQ4MjAwMDIyQzJBOTkzQkRFNUYzMEVDNjkwQkVERUNEOEE3RTc3ODcKLToxMDQ4MzAwMDk2RkREMkZGMTZGQTc0RkI4QzNEMDkyRkMyODVGNjFBM0QKLToxMDQ4NDAwMDlCRjc5Mzc3NzU1NzVDQ0REQUY5RUUwNEQyRTdCRTlBMDEKLToxMDQ4NTAwMDU0QzJDMTUwRTdBQjAzREEwREVFNzA5OUU4NUU0OTcwQkYKLToxMDQ4NjAwMDA5QkEyRTkyNEU2N0VCQTRDRjk2REYzQzVBRkY4QjY0QjkKLToxMDQ4NzAwMEI3NENBQUU1RTU4RkI2RkY0NzQzODc2QzJBNEY1Q0Q5NTIKLToxMDQ4ODAwMDEwQURDQzk0M0ZERjdFNkQwM0FFQkJEM0Q1RDhBRkU2ODEKLToxMDQ4OTAwMEIxRjFBNzMzQkREN0MxRjAzQTVEMUU3MEM0ODk5RUMxODYKLToxMDQ4QTAwMEFDRkNCMjdEOUJEQTkyNjI3RDZDQkY2QjYzRDU1N0IzNzMKLToxMDQ4QjAwMEFDMjM4QzhBNDQ2NzIzN0ZEMkJENTZCRURFMjFGMEI3N0QKLToxMDQ4QzAwMDU5RTBCMzlGQTExN0VCRkI2QTA3REExMTlGMjdERDBCQjUKLToxMDQ4RDAwMDExNjczOEI3QkVDQjQ5QzczQkFERkE2RUJBNkM5REQ3RUUKLToxMDQ4RTAwMEIxOUFDRkZCQTBGMUZEQjZFODlGQURFQjJGM0FGODdDNzMKLToxMDQ4RjAwMDFDMjg0NzI3MzExQTM4NEI4RTdFM0U2OUM0MTNCNzIzRDQKLToxMDQ5MDAwMDdFOTNBREZGN0ZENDdDQTdGQkQ5MzhDMTRGN0UxQzlGMUYKLToxMDQ5MTAwMDZEOUM1Q0ZEREFGNTU1QTIxMTI0MTlGN0ZEMTUxMDQxQzcKLToxMDQ5MjAwMDc4NEFFNkM3NjlGRkUyRjRFRjBEMjU5ODlFOTVCNTYxRDgKLToxMDQ5MzAwMDRBNURDMTkxNTA4MkQ5N0Y0QTQ4MkZDN0Q0NUQxOTI5NTkKLToxMDQ5NDAwMEM3RUZBQjNGNzQwQTc5RUE2OTQzQkRCQTY2MzRERkRCNkYKLToxMDQ5NTAwMDg2N0E3NDJERTY0OTdFNTY1MUY5RkFEMUZDNkFDQTZGRkYKLToxMDQ5NjAwMDk4Q0NFNUVCNzhFNzZENDNBODg3QUI1MDM5MzFCODU2NjIKLToxMDQ5NzAwMDBGQkREQUYyNjUwNjU3RDk2RTdGMDQ0RDhEMzI3RjA0ODQKLToxMDQ5ODAwMDUwMEYxQkU1NkI4NkRFMEFBOTY4QzdFREY2ODM4N0YxMzkKLToxMDQ5OTAwMDQzQTkxNjA1NzNGQkI1NDM3RjBCRTE5RUM1MkZDQUZERTYKLToxMDQ5QTAwMEMxNjY0QkY5RkFBMUU5RTUyMUQ0M0ZBMkRDMUI4QTUxOEIKLToxMDQ5QjAwMEY5ODZBMUI5RTUzQUVBOTNERDdFMERCRkZCMkFFMzM0MUYKLToxMDQ5QzAwMEVFRTk0RjVGNDNGQzkyNUNFODIwQkQ2RUUwMzFCOTcwQzgKLToxMDQ5RDAwMDM2Rjk5NTJGOTc2MkQzOUQ4QzFFMEQ0RkY3QUI2OEZGNkMKLToxMDQ5RTAwMDI3NzdENzkyQkVBNzM1OEJGQzQ5RjJGRjQ1N0UyNDVEMjEKLToxMDQ5RjAwMDRBRUI5ODVGN0JGMzUzODI1RUNFMEMzREZBRjFCQzgyQUEKLToxMDRBMDAwMEZDQzBGQzlDMjIyOUNFMjkxMjhERTkzNEY5Njc4QTM4MzIKLToxMDRBMTAwMDlEMTg0NzY3RkNDRkQ0RkU5OThDQkY5QUYyN0IyREY5ODUKLToxMDRBMjAwMDgwOTY4QUUyM0U1RTBFMzJGREMwREFGQkEyODkyOEQyNzEKLToxMDRBMzAwMDVEQTlFNDc5QTczRjkyNDZGRDcxQzc1NTEwRjFFQjQ4OTcKLToxMDRBNDAwMEY3Mjg2MEZEQjU3Mzc5REUxNTZDQTZGNkJERjUzQ0FGQjEKLToxMDRBNTAwMDg0NjIwOUNDMjc2N0YxQkNCQjMyOUVDNkZDQUFFOTNDNDQKLToxMDRBNjAwMDdGODc0MTY3RDg2MUU1MDNGODEzRDFCRDc3MzRFRjY5REIKLToxMDRBNzAwMEM3RjJBNEMxMzdFMDZCQzdGMjU1OUZFMzdBQjY0MjZFMjYKLToxMDRBODAwMDc4MTJGMTdGQzdEMDYzQUYyRTYxRkQxNzIzM0ZCMEZFRDAKLToxMDRBOTAwMDhCOTc0NjJDNzREOUFDNUJFOUIyNTlFNzc0OTk1NUNDMjUKLToxMDRBQTAwMDMwODE3NDkwNzVBMkM3QUNFM0FGNzc2ODc4REVGMTI5RTYKLToxMDRBQjAwMEVFMTc2QjdDRkE0NzFFQjRGN0VFQTg5OTRERTU1MzY0RTgKLToxMDRBQzAwMEE3RjAwRjcwN0ZGODM2RTEwRkE4NjJEMjg1RkI5RjZEQ0IKLToxMDRBRDAwMEMyMUZGMEU0NkREMzhBQjFERDkzOUI3RjQ4RjRGRTNDQTYKLToxMDRBRTAwMDJBMTFENjZFNTUwRDNGQkY3OTkwQUREM0U4QzdGRjZFNDIKLToxMDRBRjAwMEFCNEFGRUJBNURBQ0JGMThEM0RCOEZCNkFBOTQzRUQ0RTYKLToxMDRCMDAwMEFBNDE4Q0Y1RkIzREE2QzczMTNGQzBDQUQzNkUzQTBGMTAKLToxMDRCMTAwMDgwMzRGQkZFRDg0RTQ3NTM4QUY1QkJBOTk1OTk2NkFDMDUKLToxMDRCMjAwMDlGOERBRDJBQTVCN0I2NkE3RjkxNTk3RkVCNUI0Mzk0MDEKLToxMDRCMzAwMEJGRDJCMTY4ODU5M0ZDMUEwMzBCNjZCMjc5M0RGMjYyNkQKLToxMDRCNDAwMDM1RjlGN0U2M0VFODY4QzZGNkEwMEQ1QzcwNkU1REU2RTYKLToxMDRCNTAwMEJCODE5RjJCMUQ4REI3MjBCRkZFNjBBN0RDODQ3QTA2MkEKLToxMDRCNjAwMEU0RjhCMzMzQjJENzZCQzc3QUE3M0UyODM3NTNCRDYwOUEKLToxMDRCNzAwMEZDRTdFNzA0QjNENkVCQzE3QTBGRUZFMjcwODMxQTc5NTIKLToxMDRCODAwMEI2MzY3QjdGRkQwOEVGQzlERjc3RjBGRTQyOTE5RjJGOUQKLToxMDRCOTAwMENDREVERjNBQUMzN0I4NEJFNkZERjk5OUNBQ0U1RTZGOTIKLToxMDRCQTAwMDIzOEUxQkY5QkU4MEFGMTJDQTE2NjYxRkY3MEVFQzRGOUMKLToxMDRCQjAwMDJERTVGNkNBOUMyODkwNUY2Q0QyMzVGQTVEOTI4OTZGMUMKLToxMDRCQzAwMDZFQkY3NjUwNzIzMDNBQUI2NUE5MzhENjNCNjU3RTRBRTcKLToxMDRCRDAwMEFBNjJFOTcxNTdBNzI0MDdEMzc3OTM5NkIyNzIwNjhGMUEKLToxMDRCRTAwMDA3RkI2MUU5RUMzOUJDRkM3NjJDMEY5OENBQjEzRDRCNTAKLToxMDRCRjAwMDNGM0Q4Rjk1QjNGNEI4NjVENjcyNjNCQzQ5NUY4MTUxNzAKLToxMDRDMDAwMEJGMTAzQTVCMjdDNUMwQjA1RjI4M0ZDREMxRjM4RjNCRDMKLToxMDRDMTAwMDdGREI4MEZBNjk5QUMyRUJGRjE5RjNBQzlGNDkyREQ2NkUKLToxMDRDMjAwMEY2RDNCQzNDRkY1QkEzN0UxMTZGRUY5MDc5NUU2NTY2QTcKLToxMDRDMzAwMDJDRUREMzM2QUIyOUI0QkI2RTNEQkYzQjc0ODUzRjMzRkYKLToxMDRDNDAwMERGRTBBMjY0Q0QxNUE2RjlEREJBNjg3M0U4OEFEQUNDOTQKLToxMDRDNTAwMDdDODIxN0RDNTk4M0Y5NUNFQjhBNDc3NzQwRDRCNDBFMjkKLToxMDRDNjAwMDREMUJBODI1N0JGNzVGNURCRjVDNjQ1QTM3NzA1REE5NUIKLToxMDRDNzAwMEMwNzU4MUUxQTc4MjMxMEE5NjMzQkMyNUI4QkRDQUYxNUYKLToxMDRDODAwMEI2RkUyQzJCREU0QUNGQjZFMjZERkREOTU2QkM5NTJFNzIKLToxMDRDOTAwMDE4MUY2RjNGMTNFM0U3QzIxRjFCM0Y2QTFFRkZCNjhCNEYKLToxMDRDQTAwMEFDRTM0RkI4RDgzQUZFNkQxNzVCQzc5RjcwQzk1MThGMDAKLToxMDRDQjAwMDlGMzZGM0NEODY3M0FDRTM5NzlENkIxRDdGQzNCOUQ2NEEKLToxMDRDQzAwMEYxQ0JDRTNCQkFGMTBERkFGNDBFN0RDQkJBQUVENzM1QUYKLToxMDRDRDAwMDgzOTk3RUM5QTFERTkwNjU1RDhGRjA3NUREMjg1RjM1MTMKLToxMDRDRTAwMEY0NTgwOEQ3NzcwRkFFRUZFODlGQTlFMUVCRkJBQ0Q3RkMKLToxMDRDRjAwMERGMEZBMURGN0VFREU3RjY4NDYyOThCMkJBN0I2QjMzRkIKLToxMDREMDAwMEVCQzY5MzlGQkJEMTcxM0ZFQkY3RUJEMzFENzRGRTMzMjIKLToxMDREMTAwMEY0Qjk0NzU1RDRGRkFCNkE2NjkzQkU0RjhBRjNEQ0JFNDUKLToxMDREMjAwMEQ2RjRGRTZCNUM5OTc5MDU5MjFFODg5QUZDRjdBM0Y2N0YKLToxMDREMzAwMDEyRkNBRTAxRjkzMDU5RTMxMEY2NTI3OTdCOTREOUEyRjYKLToxMDRENDAwMEVBNzREOTkyRUZBREU1RTUzNzc3OTZCNzI3RDA5NzIyODkKLToxMDRENTAwMDBGOTZFMzNBRTRBQjgxMEY2QTRENzgzMkZBMzdDNjM3RTMKLToxMDRENjAwMEUwQzkzRDNFREYxNzY3QzY5RjZBMUI3RkFBNjU3QzIzQUIKLToxMDRENzAwMEVGOTlDMUNCMTM3Mjc1MjNDMjczODdEODI3REYyMEZGNDkKLToxMDREODAwMDhFRjRDQkIxODM2RjQ2N0JCNERBMEMxRkNGNjdFMEUzQzAKLToxMDREOTAwMDc5MDNCRTZGQ0EzMzFCMTNENUZGNDhGODRFQjVFMUVGNTgKLToxMDREQTAwMDU0MUJGRTRFQjVFMDZGODUzQ0U3ODhGMDY3QUZENzZGQzgKLToxMDREQjAwMEUzQ0Y2NTEwQkQ0OTlFODA3MjA0NjQ2RkM2NjU0RDlDNEIKLToxMDREQzAwMDA3RjFGRUVBNjQyMTVGMzgzRUZBRjJBRjU1NTIyNzg0QkMKLToxMDRERDAwMDc5RjkyMkI2QUU1RDJFOEI3RDk4QThERjY0Q0IxQkY2RTkKLToxMDRERTAwMDJCMkU0Nzg3Qzk4Rjk3REQ3RTU1ODBFQjZEQjZBRDhCMzcKLToxMDRERjAwMDZDMjNCRDFFMjE3OUNBRUMzQkI4MUY0Mzk2OUJBM0NEMDMKLToxMDRFMDAwMDU5RjRDMTQ2OTk5RjBGNEI1QUE0MDVFMTk0RkQwQUY5NDQKLToxMDRFMTAwMDEzNzNENTFGOTAyNTYxNUYyNzJDRTczQkM1MzA5Mjc2MzEKLToxMDRFMjAwMDIyMUMyMUEwRjgyNDM4NzQ4MTdFRkU4Q0IxNzAyODcyNzcKLToxMDRFMzAwMDczMENDNzcxNkEwQUEwNUVFQjJDQjk1ODM3QzczMUVEMDUKLToxMDRFNDAwMDMwRTAwOTQ1MDkxRTQ1RTNGMDI4NzIyNDlBQ0QwRjdDMTUKLToxMDRFNTAwMEI3Q0NGRDE2NDYzRjBDNDJEMTdFODRDRTA1MENGOEJBODUKLToxMDRFNjAwMDNDQ0QyRDhCRDE5RTJGNTEwODRGOUQwMUVCQjlERTZGQUMKLToxMDRFNzAwMEM0QkM5RTE3NjlBNzg4NEJCMjhGMDcxODhEODFGMTRCNzAKLToxMDRFODAwMDEzRTc5MDFEREEzMUE3NTE0NUJFRDQyMUEyQTI5RkFDRjEKLToxMDRFOTAwMEQzOUYzRDlFQzg0OEZCRDFFRTNDMTFGOTVFMjVGQjMzMDQKLToxMDRFQTAwMEM5RUM1MkNDNzczM0JCMTREMzRFRkY0MzREQjhFRUVDNzQKLToxMDRFQjAwMDQ3M0VDRUUyQTcxOUQ1NzMxMTA3QTQ0REZCNkQ1RjhENTgKLToxMDRFQzAwMDE3RDJFNkZEQThEOEFGN0FGNDUyQ0I3Nzc3QThDMkQyMzIKLToxMDRFRDAwMENFMzU1MTI2N0JCRUQzRUY0OEUxM0UzRjFGRkNERDAyQkQKLToxMDRFRTAwMDdFQTM1RThGMUM1N0I1MDJGNkNCRUU5MDE1REU2Mzg3NkUKLToxMDRFRjAwMDNGREVERUU3MUFENEIyQzFGNTQ5RTFDREUwMkI3QkZGRkUKLToxMDRGMDAwMDRBOTkxMjI3RkI1OTZFMEU5OUY5REZFOUUyN0NBQTk0QkYKLToxMDRGMTAwMEE5NzFCMjlCRDU1Q0U1NUVERURFQ0ZDQUQxMkVGNjM3MzUKLToxMDRGMjAwMEVCNzhGRUMyNDQ5RUUyQzQ1NDk0MDMxMzdFMjY4OTc2MzUKLToxMDRGMzAwMDlEMkU3MTFFMEQ3MTNBMzc5MkY0NzgwQkYyOTE1QUM5NzkKLToxMDRGNDAwMEU0NDcxQURCQ0U0OEJEQTI3RENGODc1RjdGODVFNDYzNEYKLToxMDRGNTAwMDgyNEFGMjIxRTkyM0U0OTdCNzhGRjM4MDFDOURFODYyMkYKLToxMDRGNjAwMEU5MjYzOTdBMUNBNkFFOEY5Q0IxNkM3MjMyQzFDNUU1QjgKLToxMDRGNzAwMDU4NkQ2RUQ2NTU3RTI0OUUxNUZFOTM0NUJGMDMwNkZDRTQKLToxMDRGODAwMDg5MzhGOTlCMEI4NUJGQUE0MEY4NEZDRUMwM0ZEMzU1NTcKLToxMDRGOTAwMDRGRjA3RjFBRDM1Q0YwQ0YxMEYwOTQ0MTY0MDhGN0VEMjYKLToxMDRGQTAwMEM4QTBEODJGQzBGOUJBRDkxRkJFNDZGNDVCMjZFMDAzQ0IKLToxMDRGQjAwMEY4MUFEMUNEMjhFRjE1NzgyODc0M0VGMzBBOUNDRjlBQzEKLToxMDRGQzAwMENDN0M5QUM0N0NDRTFBNkYzRTVGMTBGMzU5RTNFMkVCQkYKLToxMDRGRDAwMDk1REFENEFDODcxODVGOTVFNkEwQ0IxMkQxRkZFNjUxRTUKLToxMDRGRTAwMEJBN0NFRDg4RjhFQUEyMDJFN0IxMjQzMzhGQzU4MkFGMUMKLToxMDRGRjAwMEFFMTg2RjFFMzEwMUNGODAxM0U2QkUxMTQ0MzM0OUFDQTkKLToxMDUwMDAwMDM3QjBDODQyOTdBRDA2NUZCOUY5QkEwMTcwQkQ4NTJFQjkKLToxMDUwMTAwMEI3ODk3RTBBOURDRkYyMDJFN0IzMzUzMzlGNkYwOEJBOTYKLToxMDUwMjAwMEFDMUM2RjNFQTZGQTZEQTI3RUJCOTAyQkIyNUJCNkJBRUIKLToxMDUwMzAwMDlFNjg0N0ZCRTMwMUI5QjlEQjU1OUYxOThGRDVFQjMxNkEKLToxMDUwNDAwMEQ3OUJENEQ1NjdENDVCODVERkE1ODVBM0Y1RkFDNUY4RDIKLToxMDUwNTAwMEMyMkVCQTg3RjY2MzVENjg2MzMwRkJFNkRDQUVFNzFCMDEKLToxMDUwNjAwMEQxMUU2N0VERDY1M0ZGQ0Q3Q0RENjRFRDM2OThGQjNGNTYKLToxMDUwNzAwMEI5NkI2M0JCQTg3NzNCRDY2QjNCRkQyM0EzRkY0REU2MjMKLToxMDUwODAwMEZFQjdCQUQyMDYxQzc3MTIxQzREQTNGRDdEREI1QzZGMDgKLToxMDUwOTAwMDg5NkJCMDlEOUYxMzU2NkE2RkZBNEM3NjREQTgzNENGM0EKLToxMDUwQTAwMEI5MENEN0JCQUU2MDJDMzk4Q0ZFNEEwODBDQTBEREQxMDAKLToxMDUwQjAwMDJEQzdCNzBFMjMzRjMwMjM2RjFCRkI3RTkzM0IyQTQ5M0UKLToxMDUwQzAwMDZDRkRENEEyRjFGQkIwNUU2OUMyQUQzOTkxNkU4REYxNzkKLToxMDUwRDAwMEVGNjEzRUUxODA2NjhDOEJCQ0RERjdDREFEOTg1RjIxNDIKLToxMDUwRTAwMEFCOUEzQjgyRjY5NjRFNDc0MzZCODIzMkM1Qzk3NTQ5RUYKLToxMDUwRjAwMEIxMDRBRThCMDdFNEQ4MkUxN0Q5M0RBQzRCMzZDRTRENUMKLToxMDUxMDAwMDY1M0FDNUZCOTRDQzA3ODlEQjFEMUNBRTc1QkUyRjI1MDcKLToxMDUxMTAwMDExMEUzNzgzMEJFMzgzQkI2QzcwQjFGMTY4NUZERTNCMkMKLToxMDUxMjAwMDgxQzdEQjgwMEMzNTMyRjZFN0Y0NDZCMEJGQTEwOTM3MDIKLToxMDUxMzAwMDEyQkNDOTM2Qjc4NkVEOTMyN0RDNDhGMEIyQjI2NjhBNTYKLToxMDUxNDAwMENGNzNDNTA5REUxRTk3QUE2MTNDREVFREJFRUIzNjYxNkEKLToxMDUxNTAwMEZDRDY4QTQ0MzFENTI3Mzg3MEZFNTNBQjA4N0UwRkM0ODUKLToxMDUxNjAwMEQzOEJDM0E4QkUwNkEyNzg2RUQzQjU1MEExQjhFNDY0QjEKLToxMDUxNzAwMDcwM0RFRDZGRkIxNkFBRTRERkVGQUI1OTlGQzA3NkZCRTUKLToxMDUxODAwMDE3N0EyOUJFQ0VFMzFGMDA4QzAzMkE1QkEwMDBDNkMzOUEKLToxMDUxOTAwMDdBODIwMzY0Njc5NjlFRURFNUY5NEFBMDcxNEEzRkNCOTcKLToxMDUxQTAwMEUzNjU1RDMwQUM1NUIxQjQyQ0M5RTM4RUZCNkExNjI1QkUKLToxMDUxQjAwMDE2QTMxRDMzODdDN0EzNDIyMkZBMjJDNkI3OTU4MEY4RUIKLToxMDUxQzAwMDczNTYwRTYxRkZBRTQ5NEU3MDQ2MzJGNDJEMUIxODZEQkEKLToxMDUxRDAwMDVGMUNDQjIyMkZBM0Y1NTIwNUQ2NEIxNzU2QUYzNDI5QUYKLToxMDUxRTAwMDE3NTY2RkEwQzA3QUE5MDJFQkE1NzkzRDM3OUM1RjlDNEEKLToxMDUxRjAwMEVEOUM3NTk0RUZFNzJCNjQ3RjE4RjE2RDQ1Q0NGMjFGQTEKLToxMDUyMDAwMEI1NEZDMkRDNkUzN0RCMkIyRTUwMzJGNjBBRjI5OUYzMjMKLToxMDUyMTAwMEYyNzFFMTU4QjFBRjJEQjhEQjY0REYwNDk1NDA5MEY2MzAKLToxMDUyMjAwMDFCQTdDMkE5MjQ5Nzc5REExRjY4NEQwNDc3QkJGMkNGNzgKLToxMDUyMzAwMDE3MjUyQzZERjI5M0U3QUJCRkFBOTVGQjY5NzM5NUZCMUQKLToxMDUyNDAwMDY2NUUxQzIyN0QzNkUzMzI5MTVFQ0VEMzU5RUM3QjJEMTcKLToxMDUyNTAwMEE2MkQyMjdGOTlDODVGREUxMkNEMzI1RTgzQzJGNTcwMjMKLToxMDUyNjAwMDBEMzQ4RjRCMDc4RjgwRkY0RDNDQUI2NzRENkE2NDU2MDIKLToxMDUyNzAwMDNGNEI5QzhFOTFGQTZCMUQzNkJCRDFBQUVGNTQzOUQxQUUKLToxMDUyODAwMDQ4RTcxQzM1M0MyRUQ3OERDMjg4NzIxMzAxRDIyRjJFRDEKLToxMDUyOTAwMDQ4NkI1NUI4MTc4NTY4RDFFMjg5MTlGOTcxODUyNjkyNEUKLToxMDUyQTAwMEZDRkM3N0I5MTNBNDM5NDQ5RjA4RTJEMUNFMjc3NkJFMUYKLToxMDUyQjAwMEYwREJGOEUyNjhGOUU0RDI2M0M0MjdCRUE0QjMyMEY5QjYKLToxMDUyQzAwMEYxMEQxNDU4MkY1NTYwQkQ3NDYxRjVGQzQ5QTlCMDdBRjEKLToxMDUyRDAwMDAzMDVENjRCMTU1ODJGQ0RFQkFEM0E0NzExRkVENjA1MzkKLToxMDUyRTAwMDFERTg4N0YxOURBQjVBRjJBQkNFRjU1QUNCQ0ZGMzVCRkQKLToxMDUyRjAwMEYyRkQ2NzU5REJGQkNGQjZCNkVGM0ZEQkRBREVCRjgwRUUKLToxMDUzMDAwMEI3N0ZCOEZCQTJEM0QxQ0Y1M0E4OUNGQ0VFNjNDQTQ5QTgKLToxMDUzMTAwMDhEM0E3RUZERDI4NTc5RTQ0QTRERDA3RUQyMjNFQjkwNDIKLToxMDUzMjAwMDBFRTJGQUM1RDYyOTg5RDI2ODJBOEI3REY3NTMyMUZGNzAKLToxMDUzMzAwMENGQjlCODFGMjcyOTI3Njg1RkZCQUYzRUNGRUYyQURDMjQKLToxMDUzNDAwMDZGNjRDQzM3MUZCQzg2RkVGREJENTNEODVCNzZGQjZCMEMKLToxMDUzNTAwMEQ0QUY3M0U4RjBFMTUzNTA4RjAwMDY0QjgzQTZCM0E5OTYKLToxMDUzNjAwMEExMUYxN0JDMTEwQzE1RjE1NDBGRDBGOUI0QkRGRjVFOEQKLToxMDUzNzAwMDIzQkUwNjEyQTE0NTI2Mzg5RTczNzNCRkNBNEZDMkRERjUKLToxMDUzODAwMDIxM0FBRjNENjE2MzA4RjdFOUJEOTNBNUFDN0U5NjhGRTYKLToxMDUzOTAwMDE0N0UyRTU4MTVGMzkxOUREMUEzQUJBNDBGN0IyN0YzNTgKLToxMDUzQTAwMDdCNENCREFFMDFGMjFGRjc4NkFERUQ1NTYxM0Y3Q0E0OEQKLToxMDUzQjAwMEYwRjE3QTZGODkwM0RBRkY1RDI3NkM2Q0MxNzFEREU5NkEKLToxMDUzQzAwMEZGMDQ5REMxRkQxRjkzRTNBMEUzRjg2RUJFMEY3MDQ3N0QKLToxMDUzRDAwMDEzODBFQjgyQUEyN0U4RkNERDBFNEZEMjg4NEI4NjgxMzIKLToxMDUzRTAwMEQwMjJEM0JDMkYzMkU2QzVFNjUzQzhCQzVFNTcxNDFBOTAKLToxMDUzRjAwMDRGOEI3MkZDRTVDMjU3RkEwOEYxQjVENEFERjA3QjYyNzEKLToxMDU0MDAwMDIxMEZFMTZCRkYzQ0JFN0UyMDIxOUQ4QzhFRTQ1MkQ0QTcKLToxMDU0MTAwMDI5MkY5OUY5Q0RCRTFFMDM3ODA1QkYxREE2QkMyRTVGQUUKLToxMDU0MjAwMDNBMkUzRkFEMTJFN0E3QkRFODg3NjFFQkI0N0VFNzY1OTIKLToxMDU0MzAwMEUzRjI3MzhGNThDRkRERjA0NUVBRDdBREM3QTNBOEVGRUQKLToxMDU0NDAwMDdDQjU2OTQwM0JERTUzQURDRDc2NzI3MEEyMzA1MUYwMzEKLToxMDU0NTAwMDFGQzFERDE5NzUwNDI5MUUyNUIyOTlCMUJDNkY0MjZGQjkKLToxMDU0NjAwMDI0MkRFNTFFNDdBRDU1QUM3MjczODRFQjVBOUREQkJBMTMKLToxMDU0NzAwMEFFRUQ4NzdFNzJDNkFFNzZDMEQyNkNGNzAxOEM3NTRERUMKLToxMDU0ODAwMDBGNUUzQUVFRkM1N0Q5RTZFRkE4OEQwQjNGRTU0QTFFQkEKLToxMDU0OTAwMDU3QzU3NDJCREVDQjg0NTAyRkQ5RUIzRTg5Q0QzNzUyQzQKLToxMDU0QTAwMEY4M0M1Rjc1NzMzREE2ODdDNjg3NjM2RDJCRjdBM0FEODgKLToxMDU0QjAwMDE2RjRDQjU1NkYzNTNBQTAzMUJFRDdCREFEMDNGNzZCQUYKLToxMDU0QzAwMDI1RjNCOTdDOENDQTgzM0M2MEUxREI4MzBBRjc3N0Y0NkYKLToxMDU0RDAwMDdBRjQzNjhBNzMwOTczQkZDOTk4N0UwNTdGREJFNTJEQTAKLToxMDU0RTAwMDk5RTM5RThEMjFDRjdGNTM3NEFFOUZENDAxRjI0NzE4NkMKLToxMDU0RjAwMDcyQTdFQkZGNDlGQUFGNzc3MkJCOEFGQTIxQTlBRjI3RUYKLToxMDU1MDAwMEZGRjFGRTZBMDUzMDNFQ0JBRTI3OENCNDRGRTBFMTM0QUMKLToxMDU1MTAwMEU4NTdGMTFFNTNERjRCNEVCQTE3NkJBRkU3QzFDRDlBNzgKLToxMDU1MjAwMEM5REZFN0FCQjFFQUU1N0M3QTY2QjM5QkUzRTVFM0VBODIKLToxMDU1MzAwMDk5MUYwQUJBNjZEMTMzQjQyRTJGRURFOTdDMEFFOUQzNUMKLToxMDU1NDAwMDJCRTIwQzRCOUIxMkIwRDgzNERGQjU0MkNGRkRCQjVCRDYKLToxMDU1NTAwMEFDMTc5NTFDOEU1RTk3RDY2MEE2NTMwOUZCREU2MEQ2MEQKLToxMDU1NjAwMEE3MzlFODkzOEJFRTk3NjE5MEUwODQwQzFDRjZGOUVENzcKLToxMDU1NzAwMDEwNzgyOEM1RjE2QkYzRTM2MTJDMUQzODFGNzRCQkIzQTEKLToxMDU1ODAwMEYzQzEyNzM1OUYyRTgxQUY3QzdDQkM1NUNDNjdBQkMwNjcKLToxMDU1OTAwMEFCMzFBRjdDNzI2MkY0RkYzMEUyQUIxRUVCREJENjAzQzMKLToxMDU1QTAwMDM5NjFBMUJGRDNDMDVCOTNBRDlFNkFBRDY3RTA0Nzc2MUEKLToxMDU1QjAwMDczM0JDNjU4M0ZGMkY1RkY2Qjg1QzM2M0VGM0Y5NzFDMDMKLToxMDU1QzAwMEZFNjY1NDBFMTNFNEFGMzVDNjcxQzNFM0U0NTdEOENGN0IKLToxMDU1RDAwMEY0NzRERjJDODA2MjNGNDhFODM3NzA2QTNDRUUyOTEwOTMKLToxMDU1RTAwMDZDMDZGMzc5OEY1RDdGMTk3QTMxOTczRUIyRUY2N0YyREYKLToxMDU1RjAwMEQ1NTc4MkNBQjhGNjkzNjFFRjk0OEE3QjVGQUE4ODEzNjUKLToxMDU2MDAwMDVFMkY2NTNGRkZGOUJCQTAxQjUzRjQwNUM1RkI2MUY4OTYKLToxMDU2MTAwMDA4RTIwMzlBMjFCNThERTI0NEEzNDM2RDJDM0YzMUEyRTkKLToxMDU2MjAwMEU4N0RFODE3OTFDRjE4QkE4QkU1MjdGQ0M4MEQ3RDExRUUKLToxMDU2MzAwMDc0QzVDQzFGMUE2MkZDQjYyQUFBMzY2Mzc5ODUxQTFFNzUKLToxMDU2NDAwMEJEMUYzOTcwMEFGQUJCQjgzRDA2Q0U5NUFGRTBGREUwNEMKLToxMDU2NTAwMDg5OTdDODgwNzg3NUMzNUM4QURGREVCRjAyRUY4RThEQzQKLToxMDU2NjAwMDg1NjdBMjBDMzBBOTk0QTVDMjZGNDBFNzhBQjhENUJDNjMKLToxMDU2NzAwMEQwOEE0RjU4NjhDQUIzRkRFMzA0RDVCNkJGMkI3MERFOUQKLToxMDU2ODAwMDc2Nzg3MkI1Q0IwQjRGNjY3RkZBMDY4RUVGODZGMUQ3MzAKLToxMDU2OTAwMEI1MjM5RERGQThCRDVCRTBCQzY4NkQzNkQ1MEIxRjc0REMKLToxMDU2QTAwMDgyOEVGN0RFMEY0QTk0MUU3RkQwNDdFOTk0ODMxRTRBMEMKLToxMDU2QjAwMDI3MUYyQzAzOUQxMUFERjI2MDA5QTU5MzBFNEVBMkVGOUEKLToxMDU2QzAwMDE1MDdDQjI5MkQzRjM4OTVEMkQwQzEzMEE1MjUwNzNGRUUKLToxMDU2RDAwMDQ1QTk3NjcwM0FBNUVCODQxQzE2MUYzQzk5RjI1MDMzMEQKLToxMDU2RTAwMDlCQzYyRjNBMzg4QkYyODE4MzlGQTVENDdGNzAyRTJGRDMKLToxMDU2RjAwMDE3RTdBQ0VCNkU4OTAxRkFCMTE1NUM4Nzk4N0M3NDlENTUKLToxMDU3MDAwMEIxODRENjI1RkJCQzZFNTVGOUJBRDIyREUyRDZCQjZENUQKLToxMDU3MTAwMDdBRkI2MTUxRkVBMDQ4RDcwOUI5MDAzOTBFNjY3RjdBM0QKLToxMDU3MjAwMDRBRTU3QTYxNUQ1NThDRUNGMjZFNjMzRDJDNUY2MjU5RkYKLToxMDU3MzAwMDBGRURGNUJCNzNEQ0FGN0NDQzgwNEJDMDAzMzU4QkYyMzcKLToxMDU3NDAwMEQwODc5RkNCQkE4MzMxQkE0RjAwMTAyM0JEMDQ3MkNDRUYKLToxMDU3NTAwMEEyNzdCQjBERjgwNTFFNzNGNzI3RjA3OEM2QTNDNEM3NjAKLToxMDU3NjAwMDFFODVDNzJEN0JCRTcwNjdDQkJEQTg3N0NFQkM3MUU5MDcKLToxMDU3NzAwMDZFMjY3NzIzRUVEOENEMkFGMkZCMTdBRTI2QTZCQkUzMjIKLToxMDU3ODAwMEJBOUI0Mzc0MUZGMThDOEQ3NEVGMDlDRDcyQkM0RkQxNUQKLToxMDU3OTAwMDczRTZDQUY4QkRDNDc1OEMyRTMzQTg1RDlCNkEzQTFGQTgKLToxMDU3QTAwMEVENUQ3MjczQ0I3NzU4N0Y3QUE3MDM3NDEzQkY0RTU5QTAKLToxMDU3QjAwMEU5MDVEREFDQkYwRTk1OTU2M0ZCQ0ExQjRBMkRERjJCQjcKLToxMDU3QzAwMEFFQTlCMEI0ODMxQUVFNDcwRjdEQTVDQTUyNEY5QjdGOTYKLToxMDU3RDAwMDkyQTU1RUQxQkNEOUQ2NzZFMkZDREM1RkY3MTk0QjNCRDMKLToxMDU3RTAwMEI3REZDMDJCM0Y1RjY0RjRCN0FDMUYzRDUyNzYzQTdFMDMKLToxMDU3RjAwMDVENzU4Q0NCMzc5N0FBQzIyRUYyMTc0NkI3NUNGRDFCOUUKLToxMDU4MDAwMEYzQ0RBQjk3ODI3OUU3NDFGNkVFRDdENTczRTdFMzM5NkQKLToxMDU4MTAwMDg2NUI4QkQxRkQ5NTIzQUY3RjZDRTc1MTY4M0RCQkJFQTYKLToxMDU4MjAwMDJBNDI3RDU1ODZGQTQ0QTJENDhGRkFBQTBDRjU4ODg3QkQKLToxMDU4MzAwMDUyQTNERTZBQzM2RTI5NTA0RTU2QTNCRUYxOUJGNDREQUYKLToxMDU4NDAwMDNEOTNGQjJDRkM1MEVDMTk1RkRGQ0MxNEU1MzUyMjVENTkKLToxMDU4NTAwMDJERjhDQUNFMzc5MzhDNzJENDM3QjVGOUY1Q0QyNERCNDkKLToxMDU4NjAwMEI4NzZCOEVBM0M0MjFGRkQ5M0Y1NERFRkVDOERCMTJGQjEKLToxMDU4NzAwMEIzOUNFN0Q0M0I1QkVFNjE2OUNGQUMxQjI5Q0ZGNDg1QzkKLToxMDU4ODAwMERCQzNDQTdCNEU1OTE5QkZDN0E0NDdFMEQwQ0YzOTVGRUQKLToxMDU4OTAwMDBBN0UyODlFNjNENTFGNDZGRjgxODg0RDhGMThGMkYwM0YKLToxMDU4QTAwMDMxRTU1QUYyNzBCOUNENDU5RkRGMUZBNTVDMUJGRDdGMjYKLToxMDU4QjAwMEQyNzIyREY1QUUzQTIyQjkxRTVCRkZEOENFQTNEMDdBQjQKLToxMDU4QzAwMDg5NDY0ODlGODZGQjkyNjlERTU0MDdGQUUzMUMwMzExNjAKLToxMDU4RDAwMDdFREYzMzQ2RjEzQ0JEM0Y3NUQxNzkwMkFCNDFGQkUyM0YKLToxMDU4RTAwMDdBMzU3QTBFRjI0RkJEREE3QzFFQTZENzg3RjVFMzcwQzMKLToxMDU4RjAwMDlENjZGOUYzNkRGOTBCM0MxMzJDRjk4QjZDRjk0QjZDMkQKLToxMDU5MDAwMEY1MkZCNTk1N0ZEMTVDOUVENEY1RTNEMDhGOTE3Q0M2MDEKLToxMDU5MTAwMDQ1RTc4NjQ5REREMTk0RjUzRDA1ODFBNzY3RDVFNjJGOUEKLToxMDU5MjAwMDYzRkIxMzUzMjcxRDg3NzQ2MUY5QUY1MjdGMUVERTFGN0YKLToxMDU5MzAwMENCNUY0OUUzNjVGMjU3RDlDQTk3RDlDQUFGQjVFNTk3QTYKLToxMDU5NDAwMERCRUE3RkNEOUNFRkZENjhFQUVEQjhERTI3N0VFNjgyREMKLToxMDU5NTAwMDZENTlGQzRCQUYwODNERDI3M0MyQ0RCMTc2MkU5NzM3NEYKLToxMDU5NjAwMDkzNUM0RTVCMTlCRjAyODgyRjAwRTE3NkZBNkRGQjNGMTYKLToxMDU5NzAwMEM2Njc2NjdFNzk1NkU4OUI5RjRDQkU5MUY2NEQzRDZDOUUKLToxMDU5ODAwMEZGNDRGMThERThERkNCODI5RkRGNzhDNEZCNUNGQTU1RTIKLToxMDU5OTAwMDc0MkYyMjU5N0UzREY5Mzk3QTJBREIyOTdFNjFCRkFFMDgKLToxMDU5QTAwMEQwQjk2RDMyOUNCRDdENkYyQkY3NzNGNDU0NjYzRjVGQTkKLToxMDU5QjAwMEY4OEQyNzZDODlENzgyNkFFRTE3NDQzMTM4RUNDMDc3QUUKLToxMDU5QzAwMDg2Qjg3RUVGMEE3NzkzN0U1NUQyNTc3MUZGNDY3OThDNjEKLToxMDU5RDAwMEZDMUJEQjNDN0NGRDUyRkM3MUYyMkJCODJCRTM1OUY3MkUKLToxMDU5RTAwMEY1M0RBM0Y4QjBGQTNCN0YyMkYwNkFFQzIzNERGODIwOTYKLToxMDU5RjAwMDM5RUNGMkZDNjkzN0ZBMzc5MjlFRUM3MkI2NTM4Q0VGQjEKLToxMDVBMDAwMDBBMTUzNkZFRDhGOUYzRjFFRkM2Q0IyRTI4QUZCNjdERDYKLToxMDVBMTAwMDZERDJDNUUzRTcxMzkzQjkxRjQwNjZFMzk4RkQwQUY2MUMKLToxMDVBMjAwMEYxNDZFNzY5REI2N0RGMjVGODNDRTlFMUYxRjc0NjdGRkUKLToxMDVBMzAwMDc2NzhFRTE3RjNCOURGQTM1OUU2MjU2QjdDOUM3Q0ZERTUKLToxMDVBNDAwMEZGMTgyRjcxQTExRjQwQjNGQjIxQUM3QUFFNTVENDc3NUMKLToxMDVBNTAwMDA1QURGNTcyRTEyNzMxOEExRjFFQTc2NUYwNkYzRTdFMDYKLToxMDVBNjAwMDM3QzY3OTE2RTFBMkYzODVFQ0ZCNzBGREQwMUM4QUVCRkEKLToxMDVBNzAwMEQ4MEY4MTgxM0VEQzM3Q0JEQTJCRTgxN0JFODk2RDkzRDYKLToxMDVBODAwMEQwOUZERDIxMjdDOEJGOTBEMDQxRTNFRkVDRjA3Mzg5QjAKLToxMDVBOTAwMDlCOUMyNzQ1NTBERkE5MjJERTAyMzBERTIyNjg4QTU3MTAKLToxMDVBQTAwMDE0N0VDRURCN0RERkJDMEZDQjU3MjREQzFBQkU3QkYyMkQKLToxMDVBQjAwMDc3Q0Y1NDNFOUY0MzJCMjhDRUEyOTdFREQ0NzFEQzAzQzEKLToxMDVBQzAwMDlFMjkyOTdDNEZDNzU5REM0RkY2QkNEMzM5MkI5RTJEMUMKLToxMDVBRDAwMEZFRDRFREU1NzI3Q0RBQTFCNUE0NjdCQjk5N0VDM0YzNzEKLToxMDVBRTAwMEE1NkUzOUE2OTZENkEyRUIzQTQxRjJEQUFCOEYxRkQ3NTQKLToxMDVBRjAwMDY4OEY4Rjc0NjlGNkI4NDQyQkJFMjI1RTRFREZBNDU4QkYKLToxMDVCMDAwMDdGOTM5RTQ4OEIyNTJFRDBFQkExRjJCRjdCQUNGMEY1QTYKLToxMDVCMTAwMEU4RkNCRTkwMEU3MThBMzM0RDU2M0ExQzg4Qjc2MzA1NzcKLToxMDVCMjAwMDlGMzFBRTEyRTZGNzhGODIxMEEzMzgxNjM1MjREM0I4MTIKLToxMDVCMzAwMDBFMUZDNzZGQUU3MTQxOTdERjMxQkYyQjczQUNGMDM5QzkKLToxMDVCNDAwMEJBRkVDNjM4M0ZDOUUwMjU3RUQyRTdBQjhEREIzMUZGMTgKLToxMDVCNTAwMDUzMjdBREE3RjY3MTdFRUY4RDdEQzY2QkQyOUJCMjE2MzMKLToxMDVCNjAwMDAzM0E4NzE3RkQ5RDM1ODFDNzdGQ0I5NUZDN0VCQTAyMkUKLToxMDVCNzAwMENENEQ2MTM2RkY4RTRBRkVGRUEyRUNDRjEzMkY1MTY5NDgKLToxMDVCODAwMEY3NTdFNDNBQUZFM0U3MjU1NEM0NDRCNEUxMEY3QzVDMzMKLToxMDVCOTAwMEFGODgyMzA4QzAzMDA1OTExNkEzNEE5RjhBNzEwNEJBQzIKLToxMDVCQTAwMEM0RUZGNzQ3MjQxRTZGM0U4RkUyQ0I4MzlFNEZCQURGRDAKLToxMDVCQjAwMENCQTk1RjI5QkEwRTBFRkI4RUEwNUY3OTk4RkM1QzlGODMKLToxMDVCQzAwMDc4QkY3OUUwRjVDMDlERDQyRjg2QUMxRTJFQ0JGNDhCMjgKLToxMDVCRDAwMEZBOTc5QzRBODcwRTFGQzZGMzM0NzE0NjA1ODYxRDJFMjAKLToxMDVCRTAwMDNCRjg3RDJCQTgyOEEyNzhDNEFFRTBGNUFBOTlBRTlEMUIKLToxMDVCRjAwMERFMkFDQkZBQUE2OERENUZDMzc3OTQ5NENBNkJBMkMzOEUKLToxMDVDMDAwMEUzRjA2NTUyQzg5MTUyRjk5NUU4NzAwMTdFNEM5OTREQzgKLToxMDVDMTAwMDNGOUIzRkI0NUI4OUE1REFEMDVFOUNFMkU3NzFBQzcyMzIKLToxMDVDMjAwMDlDQ0U0NzdBQTREMkQ5N0Q3NTI2RkVBRDU0RDIwODk3NzIKLToxMDVDMzAwMDNGMTI0RDYwOUM2MzRGOTkyMzgyRjE1OTMyRjRFRkE1RDYKLToxMDVDNDAwMDc3RDM5QzBCMjNFM0M5QUI1QzI5QkY2RDlFQ0ZCN0JENTcKLToxMDVDNTAwMDgxMjBDMTI5RkM4NzFENzlGOEJENEJFOEVCNUNFNTJFNUUKLToxMDVDNjAwMDI1MTJDQkE2ODcwN0JENjIxREYzNjYyRjNGRTA2QjdDMzQKLToxMDVDNzAwMEQwOUI2NURENDkwQkZDRjY5NDMwNTVGQTY5Q0UzRUM4RTEKLToxMDVDODAwMDA3NzJFNTlFNTcxMDBGNUQxM0NFMUM1RjNGNjk1NkZERUUKLToxMDVDOTAwMEY0QkEyRkZBNDNFRkY4NzBGQ0Q4NUI5Rjg1N0VGRTYwNjQKLToxMDVDQTAwMDYxRkIwMzg4MDNERUE3NzVCRUU0MTRFN0JCRDEyMjY5NUMKLToxMDVDQjAwMDIyOUVEQTFBN0YxMUU4NjRFNUFFMzk2RTBERkRDOURFNjkKLToxMDVDQzAwMERBMDhEQ0NCRjJBMUQzRDU2Njc5MEVCRDFCNDdFN0FDNzEKLToxMDVDRDAwMEFFNzIyNzUwNUM5RTczMUU4RjFCQUFFMTdFRDYyOEZCRjYKLToxMDVDRTAwMDhGRTJDQkU2OEQxRjRGRTZCNEU1N0Y2NUE3NzNFQjJFMDEKLToxMDVDRjAwMDdBM0ZDMjgwREY4ODVGQjdDRkVCMDdCRUM2RTFFQ0Y4MjIKLToxMDVEMDAwMDI4NkMxRkI0ODFGMTBCQjhGMTVEMzE5NUQyQjVBRDFBOTUKLToxMDVEMTAwMEE1QUI1QjQzOTRBRTZBNjVDQzRFRUI3RjBERTU2RkMzREMKLToxMDVEMjAwMEE2NzMzMTJFMjQ5RTBDRTM3RTI0NzRFRjJCNzgyNTc0MDkKLToxMDVEMzAwMDAzRTI5NkVFMTlERDczMDZEQTU5N0Q5OEU3Rjc0MjEzMTAKLToxMDVENDAwMDEyRTYyN0YzRjI0MzdEMUJDRUMwRkQ2MDlGQzdBODlGREMKLToxMDVENTAwMEU0RjU0N0YzNzc3NEExNUREODI3RTI2QkNCNTZERDdCODIKLToxMDVENjAwMDA2REFBRDFCMjYxQkZFQUZBODdBOTFDOUZFQUFGMUI5Q0YKLToxMDVENzAwMEI4OUYyNjZDQjRFRkVBQzI3REFDNDczNkYyOEY5RTYxQzUKLToxMDVEODAwMENENDMxNEUxRjFBODNDN0Y4RUVGMDcwNDBGQTkwMDM2NDQKLToxMDVEOTAwMERFNDVCRTVEOTRERjcwODJEODk3NUZCODI4MEYxRUI5Q0MKLToxMDVEQTAwMDFGQTNEN0FCNzMzQkU4NDJGRUVFOEFDMkY4QTY4QTdERkEKLToxMDVEQjAwMERBMjBERUNEMkRCNDFGRENGRkQwN0FGNzUyRjZGNTMyQjMKLToxMDVEQzAwMDIzMzc3OUQ2QjUwQjBCN0JGRjg1QTE4M0VDMEJENEMzQUUKLToxMDVERDAwMEY4RkVBMkZDMEIyRTE3Qzc3QURDMERBRTIzQzM4QjNBNUMKLToxMDVERTAwMDJGMTZDNUVFOEI5QTA2RDM0OEVBOUY3ODYzMEQzRUQ2RjAKLToxMDVERjAwMDRGRjFGQ0JEQjRBQzI4QTEzNEI3MUIwQTFDQkZEMjI3OUQKLToxMDVFMDAwMEVFOUJCMTc5RTNCQTYzRTBEQkIwM0Y2RTQwN0E0RUM4RjcKLToxMDVFMTAwMEY0RTcwQTQ2RTlEQ0NEMjNERTFCMkUxNEVFQUJCQzlBNzgKLToxMDVFMjAwMEE1MUY3ODYwNzZGOTc4RTc2REMxODUwRTBDNDIxQUQ1MEEKLToxMDVFMzAwMDFCQTVGM0JEOTZCQzM2QUY1NDA0NzVGMDdDNTE1RDg1NEYKLToxMDVFNDAwMDI1RUZBRkFEQjJFNDVEREE0OTk2RjYxRjk3NUU1RkYyREIKLToxMDVFNTAwMDZBMTZGRUJFQzAzNkFGMjZGQjNDMEJFQ0Q3QjNDMkE5MTgKLToxMDVFNjAwMEJGQzFFQzg0QjA2Q0Q4QTVFQkU5REVGMjdFQzQzMUVBQTgKLToxMDVFNzAwMEM5ODE1OTc0OEYxN0FBOEQ3QjBBNDA3MTJDMUUzRDRBMjcKLToxMDVFODAwMDdDRUE2NUZBOUFFQ0UzNEFBQkJEMkEwN0FERjY2QUE4NEMKLToxMDVFOTAwMDI1OTEzNkZBQzVGODZEQ0YwQTg1QzYxRDVEQUZGQzkwMTkKLToxMDVFQTAwMEY2RTBERDczQTE5NzY5REYzRTE1NTVERTM3OUUwOUYzRjUKLToxMDVFQjAwMDc2MTFGM0ZEN0M3QjJBOEI3MzMzQkE5QjFGQ0U3RkFFQUEKLToxMDVFQzAwMDZBMUYyNzc0RTFGODcxNkNGNkZBRTA5N0Y1Mzc0RDcyQTYKLToxMDVFRDAwMDk4QkI5RDBDNkY5QURFREREODg2QjQ5RjkwQzE3Rjc0MEQKLToxMDVFRTAwMEZCNjJGMjdGQjg4MUQ5RDMwQ0NGMURBMThCMjFDNkU2MEUKLToxMDVFRjAwMEQ5OEQ1NTE4RkQ5Mjk4MzIzRUVGMEVDREQ2Mjg0RTVGQzMKLToxMDVGMDAwMEU3NzQ3NUE4NUM0RTZFRjJFOTE2QkJDQ0U5RTc3MjYyRTUKLToxMDVGMTAwMEQ0Q0I0N0ZGOUI5QzEwQ0ZCNkFFQkRFQUUzRkJFNTAzQjUKLToxMDVGMjAwMERGOENGRjA5Rjc5OTg5MTc0MUM3RjNERkMxRDY4M0Y0RTYKLToxMDVGMzAwMDBFNjY1REZBMkMyN0ZBNEZGNkY5MjY1MkJEQkFERDUxRUUKLToxMDVGNDAwMEU3RTlBNjdFRUE4MEJGMDdDRUZFOUM2NkJGQUFFMTI3RUUKLToxMDVGNTAwMDg2NDMyQUM1MERFRjRDRjNCOEUxOURFOTNGM0Y3NTE4MjQKLToxMDVGNjAwMEYzQ0YzOEU4REREMTlEN0JDN0I3QjMwNjg1OUQ2NUQ0RjcKLToxMDVGNzAwMDFCN0M4NkVGNUIwNzY1RjA5NThFNjdFRjg4RkI3MUIzM0UKLToxMDVGODAwMEQyQjZCODQ0MTk5QzQ4RkYwM0I3RTg0RUI0N0IwNjVCMTEKLToxMDVGOTAwMDU1MDlEN0ZGRDk2MjlFNzVFOUE4MTNEN0IxN0NGM0RBMEEKLToxMDVGQTAwMDYzQTNBRjMxNEZCQzlGODhGM0VDRjRGM0ZCODI5RDFBREYKLToxMDVGQjAwMDlCMkZGMTM1N0Y0RjNCMTdCQ0EzRkI3RjJEM0IzRTk0QkUKLToxMDVGQzAwMDAwN0ZCNzQzNzFDNUI0NkNGM0NFNzc4RkYxNjhFMUVCMTYKLToxMDVGRDAwMEIyQzFEN0VERTdGQjczQzM3RjkwMEYxRTI1RThCMEU4OTEKLToxMDVGRTAwMDA5NkY5RDI2RTE4MjEyODA4MUE2Njk2MTQyRTM4QkI4MjgKLToxMDVGRjAwMDFGMjI1NUMxNTgzREIwNkZBRUI0MDRFM0M2MTdGQkEzRDIKLToxMDYwMDAwMDUyMDhGMzlGOTVBNjMwMzhCNTBBMjdEQkUzMzA3QkE5MDkKLToxMDYwMTAwMEY2QzVGNEFGNzEzRTJEM0VCQTk3RDE1MUZCMDFDNTE3QkQKLToxMDYwMjAwMDk0N0M1NTZFQzM3NUFBMTczQjI3QkJBOEJBQkI4MUMxMjgKLToxMDYwMzAwMEQ3ODFGRjY0MkFCQ0JDQkZGQzRDQjQzQjY0RTA3QTgwQ0YKLToxMDYwNDAwMDQ5OTgyRTRGNDRCQjExRjAzMTk3OUNGQTgwRkQ0OTg3NDcKLToxMDYwNTAwMEREOTk3NkI5RjA2NEI3M0ZEREIwNjg3Q0ZEMjRDRUY5RjgKLToxMDYwNjAwMDEzRUMzRkQ0MkYyNUI2RjZDNTUxQUI3RDFCQjBEREE3OTEKLToxMDYwNzAwMDM4MERGNTc3N0QwMUY3MzI4RTcyMUMwREQ2QUIxODdBOEMKLToxMDYwODAwMEUwQUE3NjY4MjlBQzBGNUEwOURFMDdGMkNFOTcwMUUzNDEKLToxMDYwOTAwMDFCQjVFMDQ4QzJBMUU3Qzc3QjI3NUJDMkI4NUNBNTJDNTMKLToxMDYwQTAwMEU3MzAxN0ZBQjlGRjI3NzQ0NTFEQzVFMUVDOEYzMDJFOTQKLToxMDYwQjAwMDk4ODVGOTU3QjJFRUUzRUNGNzJENTZENURFNEQ3QUIyNUUKLToxMDYwQzAwMDgzRjExM0M2OUIyNDZBMURCNDdGRUNBRDdFNDgzM0NCQUQKLToxMDYwRDAwMEQzRDdDNTM4MTlGQTgzMkUxQkZCNjRCQ0JGNUFFRDg4OTEKLToxMDYwRTAwMDdBNjY3RTdDRkFEQkY3MUJGOUU4RUY1QjY4OERGQjM5OUIKLToxMDYwRjAwMDUyQkFCNEZBNDFDNEIxOEM0RkZGQTMxREM3QTBEQjU4RkMKLToxMDYxMDAwMEY5NjgxMzc0RkIwQUU5OTNFRUQwOTFERDkzNTk1NUJCRkUKLToxMDYxMTAwMDlFRThFNkFEQ0UxRUVGREVFOTk3QUM3QTU2QTQyQURCMDgKLToxMDYxMjAwMDVGNDY0Q0ZCNEJFNzcxQTdCNERDMDVFM0QwNjU0QzdDQzQKLToxMDYxMzAwMDE1RUZDN0U5RTc3RUI0RDU5MjM3ODI0M0FEQ0VFMTU3N0MKLToxMDYxNDAwMDlFMTYzMEUwMThFNjcxN0M3M0Y3ODRGMERDQjhCRkZFNzEKLToxMDYxNTAwMENEMTA5RTZGQUNGOTMwRkJGOUUzODIwMDhGMEZEN0EzMEYKLToxMDYxNjAwMEFGOTJGREJGQTY5RUZCMDNGMTBGRjVDRTRERkM5RjUwRjUKLToxMDYxNzAwMDk1Nzg2QjEzQkU2QkI2N0E5RkNGNjJGRjE4RUI0MkFFNzkKLToxMDYxODAwMDc5MjkxNTRCRTlCREM0MDNBRjQ5RjRCRUJBNTRCMUUyNTUKLToxMDYxOTAwMDQ0ODQ2QjY4RUUxMjdBODdBNEJCRUU0OTNBN0ZFOThGOUMKLToxMDYxQTAwMDhDNEYxNzIzQkVCNDVCREM1NzFGMUQzRkM3NzlFMURGNUYKLToxMDYxQjAwMDA0NURBQTEyQ0JDODlFNUM1M0ZFMjI4REIzQkE2RUZDNUUKLToxMDYxQzAwMDcxOTIzNkZBREI1M0Q1MDEzMUYyMTNEQkNFNzNGNzA5NDYKLToxMDYxRDAwMEI5RERFNzE3RTcxMkFFRTZGM0E2ODYzMThFMkE0RUZFNEEKLToxMDYxRTAwMEIxMDkzNUQxMjFENEZCMTcwNjYyQUZGODU5Rjk5QUI5MzQKLToxMDYxRjAwMDRCQ0E2OTFGQTE1QkQ3QzE1QjczQ0MyNzE0RTBGRDFBQTIKLToxMDYyMDAwMDc2RDI4MUFBRjhGRkI5QTUwRTdGQUY2MkRBQUM4NDg5OTUKLToxMDYyMTAwMDFFRkQzOUUyREE2QjAzQzZCOTk3ODdGNjM5REQ3ODBGRDAKLToxMDYyMjAwMDgwQzFENzVGNUUxOEZFMEQzQTlGMDZDRkE5RjhDRTdBREYKLToxMDYyMzAwMDc3OEVGODVFMjNCNUFGRUZGOUYwNkVDN0MzMUFENzMwOEIKLToxMDYyNDAwMEM1M0ZBRDkxQjJDRjY3NDE4MEUzN0JDRDJENjk3RTlFODYKLToxMDYyNTAwMDM2Rjc0RDNBNEZGM0E3NUZBNUI4ODlGRkE4REY0QkU3QTQKLToxMDYyNjAwMDY5N0E4MDlGRkYwNEZDQzMxNDRGNUEzNDg3QkYwRjk4OEMKLToxMDYyNzAwMDRCOEU1MjdFNUU1RkQ2QUNGNTQwMUVCNjlFMEZGOThERkEKLToxMDYyODAwMEYzOUVGMUZCMzNFMDA0NzU5ODlGRjM4Qzk1NEI1QTdGOTYKLToxMDYyOTAwMEVFRUJERkI2ODdERTUxODEzNDlEMjc3NEZGQzI0OTZGNzQKLToxMDYyQTAwMEMxMUE3ODE4MjM1NzQ5RkUzQjMxNkIyNDFFQjdCQzIwMTYKLToxMDYyQjAwMEQwREE4REZFOTEzNUM2RjlEQTJDQkU0RjkyRUJEMjc0NEUKLToxMDYyQzAwMEJFRTYwREU4MTY3QkM3MUYzMURFNDkyQzZDOUU0NUI4MzMKLToxMDYyRDAwMDE2RDU3M0I1ODBFQjJBRkFFMTExQkVDRTU5MTc5MzNGNUMKLToxMDYyRTAwMDM3MTc1RDZGRjJDNUVBMDNGNTY2N0YzRURGNjdGREFCRUEKLToxMDYyRjAwMEYxRTFERkZDQkEyNTJFRERDRThGNkVGOEI3MjNEQUM3QzkKLToxMDYzMDAwMEU1RjIyQjFGMTBGMjY5QkNBMzZCQjQ1RjFDNTBCMkUzMjMKLToxMDYzMTAwMEY3RDc5N0U0QzNFRkUyQzA4NDZDRjgzRENCNEJGQjg4MjIKLToxMDYzMjAwMDc1RTM5RkVGNkNCMkU5RUY0RDQ2OUM4RDc4RDc5N0Y1RkEKLToxMDYzMzAwMDU3N0U3RTE2N0JDMjU4NTcwRjA0OENGNzdDOUFCRDM4NjcKLToxMDYzNDAwMDRFNTVBMkQ2OEI3OERBOTY1QzQ0Rjk2REI3OEU0RjRGRDYKLToxMDYzNTAwMDYzRkMyRDQyQUY2RjE1RUY5MDE4RTU1QjA1NUZBNjZDRUYKLToxMDYzNjAwMEZBRjY2NTIxRDc1Qjg1N0M2RDUzQTM1RThDNUY4MkE3QUYKLToxMDYzNzAwMENFRjI0RTY3RjgwQjMzQkU0MDU3RTJGMTVEMjMyNUUzQzIKLToxMDYzODAwMDhEQUZBRkI0REFGRDQ3N0FCRjY1MjA2MEY1RDcxNjdBRDYKLToxMDYzOTAwMDZGRjM2OEYxOTIxMjcxMzUyRjA3RDIyNEY3Q0U3NDMxNjIKLToxMDYzQTAwMEM5NTM3ODI5OTAzQzg1NjMyMzY5REMzNzU1MEQzODUyRjEKLToxMDYzQjAwMDNBQzVBRjM0N0JBNzMzOTI4Njk2Q0EzQUM1QjI4OTdCNzkKLToxMDYzQzAwMEIwMjc4QUY1MUQ5QzJCMURCODdGMDk4OTdCRTQ4Qzg1M0QKLToxMDYzRDAwMDJGQTMzODk4M0JBREJGMDdCMjREOEQzNDJBNzhBRURDODEKLToxMDYzRTAwMDQ5MTE4RTEwNEU5QTdFQUY4MjQwQjJGRTFFNDg2OERGODEKLToxMDYzRjAwMDVCRjQ3QjJBMjEzMEQ1MEIxRjNEREVGRjJCRjBGMUVFNDUKLToxMDY0MDAwMENCMUUzNTNGQ0EyMzFFQjMzRTNFNUU4MkU2NkM3QUZGNEEKLToxMDY0MTAwMDE3QzIxRTNCRkU5NjlEMTJDOUU1MzU3RTc4RERFNEE3QzYKLToxMDY0MjAwMDQ5NDkyMzI1ODhERjJEMkJEQjI1QzQ2N0EyMTMyMjI3QUEKLToxMDY0MzAwMDY0RDE2MzZGMDQ3Qzg2NUVEODhERUYyRUI4MkEzOTdERDcKLToxMDY0NDAwMEJCRkVFREUyRTEyNzk4Q0FEQUIyQTIxMUIyRUQzRjk4QTUKLToxMDY0NTAwMDVFNzgyMzQwRUIxM0Q3MEI1QjU3MkVFMkU5MjEyN0YxM0YKLToxMDY0NjAwMDQ5NzUxMjUyRjgzQjJBRjMwNzYyNkQyRUE0RkI1MkZFQzcKLToxMDY0NzAwMDJFNzVBODMzM0U4NEY5RjAzNTEwRDE1OUZGNTVFOEQ0NzQKLToxMDY0ODAwMDY3RTM1NkI3NDAyQTRBN0MwNDJGODcyNkUyRUZEREYwMDcKLToxMDY0OTAwMEJGQzlDMzhCODdCRUNERUFFRjk5RTNENkYwNzc1NUUwNEQKLToxMDY0QTAwMDA2MkJCRjU0NUM2M0ZEN0Q5NUVBNEUyQkJGNENCNEYxQzcKLToxMDY0QjAwMDhCQkQ3RDU4MUYzOTBCRTE5RDlBNzQwMEVFRUI4MjE3NUUKLToxMDY0QzAwMERBRkE4M0UxMURGN0UxN0M3NkZCMjM2OTA2NkY3NUJGN0QKLToxMDY0RDAwMEI1RENERUJGMEMzMTc3MTFBM0NCMjMzNzFGRUFBRDYxRUEKLToxMDY0RTAwMEY1RUY0RTM2OTYyMTVFQjZBOUMwRUY1QjM0MkI3NEJGMzQKLToxMDY0RjAwMDM1RDczQkM0NjNGOEQ2QjBGQjBCN0NCN0Q4NThGNzdBRDYKLToxMDY1MDAwMEY2NDlGQ0REOEIyOURBNkI2MUY0NkJCRUNDN0ZDNzJFQkMKLToxMDY1MTAwMEYzOEVDNTY3RTgxRDhCRTMyMEM2RUQ0Nzg4NTJEQTI5NjQKLToxMDY1MjAwMEVDNTNFREY0Q0EzMEZBM0Y5M0JGRjY2OTc4MkY0QjJCNEEKLToxMDY1MzAwMEIzRkFDRkU0RDIyNjdBMUY2Q0Q0RUUyRTY1NzYzNzJCRDEKLToxMDY1NDAwMDRGOTY1OEVEQ0JEMzhCMzg5RkNFMkVFMkY2QTFFNkUzRTMKLToxMDY1NTAwMEZEODAxQTJGMzdCRkFCQjRCMTQ4QjI5NkZCRTNFNTE3MDUKLToxMDY1NjAwMDk4Q0FFNzE3ODlGNzY3QzVCQkUzMEQ0NTBCN0E1MDJGMkIKLToxMDY1NzAwMDY5OTM1OEZEMkNGQzc5QTYxOEQ3Mjg4NzYwNjQyRkJFMzQKLToxMDY1ODAwMDA3NzJGQkE1OEJFQUNERkI4QjhENDVGQzVDNDczQjVFMjAKLToxMDY1OTAwMDhDNUI5OTFEQUU2NDk4OEY3QjlCMTg3NzYzOTFGMTBFOEQKLToxMDY1QTAwMDVDOUNCRjAzQTdGMUQ0Rjg3RTVCNjA4OUY0MDZGQjdDOUEKLToxMDY1QjAwMEMwMDU4RDE4QTdEMjMxQzE0MUVGNDNERTM0RDE4ODA3MjEKLToxMDY1QzAwMDFCNUY0RjE4NzQxOEM1QjdDNkUzOTAyQTk2RjI3Qjk3RTUKLToxMDY1RDAwMEI5REE2RDZFRTJGRTQxRkJGNzk4OTg0N0U3RDJDNjgxQzMKLToxMDY1RTAwMDZBMzZGRkU4NkUyMDNFNzEwNzIxRUJGOTBGOTNFRjU4RjIKLToxMDY1RjAwMDUxMzZCQkFBQjM4OUY2NzEwNzRBQjJGRjRFQTE5MTc2MTQKLToxMDY2MDAwMEQ4RDY3RDU5RjgxM0M3RDQxMzc0RDI1RjBBMTE4Qjc3OEIKLToxMDY2MTAwMDg2Qjg3RkVFNDA4OTIzNEFGNzAyNkI4MURFM0IzQjUwMTAKLToxMDY2MjAwMENFRkQ3NUY2RjZCREI2NzEzQ0IwMjg4QUVCMzQ5RUIzNEMKLToxMDY2MzAwMDYyM0NBMzUyMEQyOTNDQzhGMTA2MDdCNEIwOEVGMTAxQUIKLToxMDY2NDAwMDdCQzk0RkEzMDNDMzI3MkJFRjhFMDBEOTc3OUQyMTZFMDMKLToxMDY2NTAwMEM3QzhBMTgxMDYwN0FFMUZEMEE0OTlFREIxMEFGMTdCOEUKLToxMDY2NjAwMDhCMUU3RkFDQTNDODEyNDc5MjIwRkQ3QkMwOTUyMjNEQjQKLToxMDY2NzAwMEQyMTE3NkMwREQ1OUZDODg2QjhBQjg5REJCNTk1RkY0OTYKLToxMDY2ODAwMDdDMzgwQkZEMzYxNEU5MTZGQkI5RTIyMEI3QkY3M0Q1OTEKLToxMDY2OTAwMENGRDRFMzcwOERGMjYzMjg0RUU3M0VBMDczN0VCQzMwMEEKLToxMDY2QTAwMDEwQkRCRDY4OUMzODJFQzNFRjc4QzUxQ0ExNzA0MUJGREEKLToxMDY2QjAwMEU0N0ZEODNDQUU3QUM2NDUzMUU5QTcxRERBQkFFN0RCRkMKLToxMDY2QzAwMDBDNEY0RTcxNEVDRDU2RTUzRDRGQjBGMkFGRTBCRDI3QjkKLToxMDY2RDAwMDk2QkY2QURGMEM2NTBBMkI3RkI5QzI4OThCMzBGQjZCRDIKLToxMDY2RTAwMDJFQzI3MURGMDU0NzEzQ0FEM0JCRjA2MkQxQzkyNkJBRTcKLToxMDY2RjAwMDNENTIyNEVDRDBBNDhCRjRBNkUxOEZGQkVBODBDQkEyMjAKLToxMDY3MDAwMDU3QUZEQzY0Q0QyRjgxNDUxM0QxNEZCMUU0NTYxN0Q5NzMKLToxMDY3MTAwMDI2NTdEOUQ2RkI2RDYyRkU1NzQyQkMxQkQ3Q0YyRTExMzAKLToxMDY3MjAwMDNGN0VFRDBGNjYyODI4Mzc1NzlEQUM4NTlEQTZGQjU2MEEKLToxMDY3MzAwMDRGMDg3QUJDQ0RGODQ3MzdDOUQ5RDVGRTk0ODJGQkI4NEIKLToxMDY3NDAwMEQ3Nzc5RTdDRjE2NzAxRkI0OTc1NTdFMEZBNTk5MjNENzYKLToxMDY3NTAwMEZFRUZDQjQ5MkI5Q0Y5RTY2MTg3REIzOEJGQ0IwNTg3ODEKLToxMDY3NjAwMEJDNUQ4QUE2QjJDOEQ5QjM0NTU2QkY1MDg3Q0FERjQ3QjkKLToxMDY3NzAwMDhBNzZDOEUwRjkzQ0M2REYwMUM5NEY2MjVGODBERUYzNkMKLToxMDY3ODAwMDRFMzRDNjI5OUUyRUQxRUVENjNBODIxNDVGNDc3MTc0REMKLToxMDY3OTAwMDJCMThDMUYwM0RBMjNGMDhGRTMzRTJFOTAwRTJBN0UyNzgKLToxMDY3QTAwMDNFRUQ1QTc1NTg0MTdGRjQ3MjM5REU4NDNGQTU2NjlDRjAKLToxMDY3QjAwMEMzQjg1REIxRTgyNDA2QkY2QjU3NDM3QTEyNThFQTI1ODcKLToxMDY3QzAwMDBCQUNGNzhDNTQ1NTUwQkQyNkM3MzhGREJEMjdGNEU0RkIKLToxMDY3RDAwMEQzMEZEQ0EzRTBGQUYzRUVGREFGOUQ4QjcyQjhFQzcxNDIKLToxMDY3RTAwMDI3RTA5NUJDRjcxRTA4NDA5QUY2MEYyOTA1RTVGQkVBNUQKLToxMDY3RjAwMDlEQ0VBQzdFMzZGMkQ0MzIzQzJFRkI1RTgwRjRFMkQ1RTgKLToxMDY4MDAwMDBGQjk1MzBCNTlGQkFCMUY3RDdEMjYzMDc5N0FBRjdERDUKLToxMDY4MTAwMDY0Q0YyNEM0REZGRDEyM0YxRjRDMENDRkM0RjVFOTZBREUKLToxMDY4MjAwMDE5RkUzRERCM0I2NEJFNjJDRTVGRUYzQ0U2NkI0MUZBOTYKLToxMDY4MzAwMDQ5REI4N0JFNDRGRDBFNUVFMjMyQkZDN0VFMjhFNkVCQzEKLToxMDY4NDAwMDBGQUJDN0UzMjU3NzQ4QTkxM0IyRTgwRjYzM0ZGNENFMzcKLToxMDY4NTAwMDBFODlDM0I3Q0I5NUMyNTBFMEFCQjdERkE1QzQxODFDRjcKLToxMDY4NjAwMENCQjdCRjRGRkM3MkZBRjcxRTJDNDIzQzJDREZFNUI0Q0QKLToxMDY4NzAwMEVDMkY5NzdERUZDM0VFQ0YzMDNBMkY3M0MyQzg0Mjk0MEUKLToxMDY4ODAwMDYzRTcyMUNBRUY4RkFBMjM0RTkyNkIxRTlGNzIxREE5NDgKLToxMDY4OTAwMDAwNTZFRkUxREY5RkY5M0ZBQ0ZDRUQ5MDEzMzBCNEY1MEIKLToxMDY4QTAwMEVEQkRCRjUzMUVDNzdDQ0MxRkM3NUYxNDU5QkVDQkNBRkEKLToxMDY4QjAwMEQ3Q0JCN0JGQUUyMDVDOUEwMzQ2MkEzRjhCRTc5QzU2RTYKLToxMDY4QzAwMDNCQzk1RTFGNjA0NDQxM0RCNTdDQjBGNzdEMjdFM0I3MEYKLToxMDY4RDAwMEU1M0JERkZEMTVGMkRENzI5QjdDQkM4REZGMjgxRjZCNTUKLToxMDY4RTAwMDlGOUY1QzZDQjNDRkI3OTcxNTE0ODdCMkVDQzFGRDVCNkIKLToxMDY4RjAwMEQwMUZGMUNFNDM3RkRDODJGNzY3QUZGOUU4MkY1QkJFOTQKLToxMDY5MDAwMDgxRjE2MDNGRjY2ODI4REZDQkVGRkY0NTExOThGNEZFNzgKLToxMDY5MTAwMDM5QzU1Q0NFREVEQjcxREY3NzM2QjNGOUJGRjdBQTlCRjIKLToxMDY5MjAwMEIwRjVERTEzQkY5RjgyRkU5RkY3QkVGRkI3ODlFODBGNjkKLToxMDY5MzAwMEJBRTE4OTMzOEU0M0ZFQkFFMTExRkU3QjM2QjlFMDQwRkQKLToxMDY5NDAwMDdFNEQ5OTdGNkY1MTlDMTNFOUJCQzgxODAzRjg5MTQ4OUQKLToxMDY5NTAwMDZERjQ4MDgxMTEwNUQ3QjNCRjRBMzBEMjU3QzJCRTBGNDQKLToxMDY5NjAwMDdFQThBMDdEQjYyNzBBMjM4ODlGQTc3NkJFQkVFNzY2Q0QKLToxMDY5NzAwMDk2N0Y5N0QxQzc5RDg1M0U2Q0ZFOTMxQ0E0OUY5OUQ4QTYKLToxMDY5ODAwMEIwRjRCQTlEMTc5Q0Y3QjkzQTRDNUQxMUVDN0UzOThDODYKLToxMDY5OTAwMDkwREUxQzQzRDc5NzE4NURFQjMyNzRCNTk3RUY4NzQzQjEKLToxMDY5QTAwMDBBOUUxQjJDN0Y4MEQxNzEyNkQyOTNEMTcxRTY1ODNBNzIKLToxMDY5QjAwMEJFOEJGRjk4M0I5NjhFRDcxNERCREY2RkI4NjZFQjY2MTUKLToxMDY5QzAwMDJDREM1OTk2RDVERTM1RjY1OUQ3M0U3MkQxQjhGNjkzMDAKLToxMDY5RDAwMEExMTdGMkUxNzlBOUYwOTNDQzI5OEVBRTJDNDYzOTdDMkYKLToxMDY5RTAwMEU4QkJERkQ5MUNFNDc0NUVDODEwRjNERTgzRkJBN0UwQ0MKLToxMDY5RjAwMEEzMUM3RjcwOEQ3QzA5RjEzMEYyODQ1QkMzRjVGREVBNDYKLToxMDZBMDAwMDI3N0U0OUYyRjZERTIzMkYyODNBQzVCNTQwOTE3NDBBNTUKLToxMDZBMTAwMENCQzNFOERGOEJDMEYyRDc0OTNDNzNFREJEN0YzRkYzQkEKLToxMDZBMjAwMDU3QUNGREI1Rjg1M0FBMUFEMThGRjI3Qjk4RkMxMTNERjMKLToxMDZBMzAwMDUyRTczN0U5QTg3NzUzMTM2OERFRDdBNUI4NUM1Qzk3QUYKLToxMDZBNDAwMDFBQkExMEUzRjlFQzc4N0Y0NEU4MTczMzVERjE3REE5QjkKLToxMDZBNTAwMEVCNzZCRTc2MjZGMjVGMkU3QTFBRjNENzcwRkVBN0IyRDcKLToxMDZBNjAwMEYyN0JBRDcyOUI1MzRFMDU3RERGQkJFQjgwODJGNjQxMUUKLToxMDZBNzAwMEZBNzE0NTczMzA3QkY4M0RENzg4NDJFQkUzRjc5RERBMzYKLToxMDZBODAwMEI2Qzg1OEJBNjdGMDJGRTI4RThFNzAxRjNFNTg2Q0YzNkUKLToxMDZBOTAwMDdGMDhGQ0U0OTNGM0ZDRjMzQTMyQkM2RDI5RDYyREZDNUQKLToxMDZBQTAwMDYzRTBFRjlENDNEOUY1RkZCM0M1RENERUJFMEVFMjREREEKLToxMDZBQjAwMDE1NTNDN0FFNUYzMjM0MjcyNjg1MzNGMEJFODM3MTYzMkEKLToxMDZBQzAwMDBDREU3N0VFNzdEMjNCN0RERDgzNEY5MTFFQjdFQjhCRUIKLToxMDZBRDAwMEVCNzJEOEQxRkI4Q0YxNzYwRENENDRCREY2Q0U5MzhGMDEKLToxMDZBRTAwMDExNUY1RUY3QzA2QjBBRUU1N0Y2NkM3RjU4MTlBRUNEOUEKLToxMDZBRjAwMEM4MDFBRTBGRTZERjI5N0JFNzdGMERDRDQ0RkRCNTNDMzUKLToxMDZCMDAwMDQ3RkNERjVCQTJGRkU1M0ZCMkY2QkZGQzgxRjcyREZEM0UKLToxMDZCMTAwMDJGNEIwQzJBRjQzQkFGNzlDNjc5NUI4RTVFODJGMzdERjYKLToxMDZCMjAwMDdCQUYwQjcwM0ZGQ0Y2QTBCMzI5OUI5REYzREY2MjdEMkEKLToxMDZCMzAwMDM0RjBENDFEMzhFNTk1NjIzQ0Y3MkFFNUVGMzI3NkI2OUQKLToxMDZCNDAwMDQ1N0Y4OUJGMzc5Qzc4QzEyNUY2QjdEMTU3RDA5RUU5REMKLToxMDZCNTAwMDI4NTFFODFFNDI2N0UwNjJGMkQ3MUJGRDBERDhGMEE5NkMKLToxMDZCNjAwMDA1QjUwNkRDMDc2OEYzOUJFQkNDRkIyQTAzRkU5MkE4NzUKLToxMDZCNzAwMEMzMDJGRkZGMDNDMjI4Q0Y0RDAwODAwMDAwMDAwMDAwQzkKLToxMDZCODAwMDFGOEIwODAwMDAwMDAwMDAwMDBCRDU3QzBCN0M1NEQ1NDcKLToxMDZCOTAwMEI1RjczQTczQ0UzQzQyMjY5MzkzRDdFNDY5M0M0OTc4RTMKLToxMDZCQTAwMDRBQzAyMTA5MTAxRUQ1ODEyMEE2OTg2QTUwQUE1Q0VCMjQKLToxMDZCQjAwMEQ1MDEyMTQ0NDgzMjI5MkE1QUVCNzc5OTkwODg1RUYwMTIKLToxMDZCQzAwMEIzQjFEMjgyOTZCNjAzMTdBQTk1QzQwRTEwMzRCNjgxMUIKLToxMDZCRDAwMDBFNjA2OTUwQjQwMTlGNzg1MUEzRDY4QTE1QzgxODA1NzQKLToxMDZCRTAwMDZEQUZENkJCRDZEQUU3MzAzMzI3ODNEMEVGRkVCRUVGRUEKLToxMDZCRjAwMEY3RkJDMkNGREY3NjlGQjNDRjNFN0JBRkY1NUZDRkJENTQKLToxMDZDMDAwMENFREM5MTUyOURBRDM5MDFEQTU2MDI2OEEzMDA0MEYxMDUKLToxMDZDMTAwMEU0RDRBNjAwQzhBRUQ5RDU5MDg5QUQ2QTUxOTMyNDgwM0EKLToxMDZDMjAwMEFGRTlFRkYyNjgwQjEwMDQ5ODA4NjA3NUQ2ODIwRjlGRTkKLToxMDZDMzAwMEI3QUExNkQwMUNDMDdGNUYwM0NGRDNERThGQ0ZERjI1NkUKLToxMDZDNDAwMEE3QjRBRkExNzlBQ0NEQkZBNDNFQjQyOEIwQjU4Mjg3QkMKLToxMDZDNTAwMDhENTYyQUU4RkUyNTlFMzU0NTAwRUI5M0ZGRUQ3MUJBNkYKLToxMDZDNjAwMDdGNzdDMEFFREFCMTZENEQ1OUYxMUJFQUZGNEE4MjVBMDcKLToxMDZDNzAwMDE5QzdCNUQyRjNEODA2QUMwRTc1QUI4QUQ3RDM2MDdFRjAKLToxMDZDODAwMEM4MTk1RDRGQkUyQUYxN0FDNkUzM0FBOEM1M0YxRjRDMkEKLToxMDZDOTAwMEMyRjc4QTI1NDEyQjM0MDA4RTgwQTRDQzYwODA1QUUzNTEKLToxMDZDQTAwMEI5N0Y1NzdEMjVFQUM0Njg1Rjc2RjY4MUFGMTRFMDBBQTQKLToxMDZDQjAwMEQ5NjlBMUZEREY5RjYzMDlEQThCQThCRDM2MTU0QTg3MjQKLToxMDZDQzAwMEQyQzE2OEVGNUI1OTBCRTE1MUU3QkVERjlFRTU1OEIwREEKLToxMDZDRDAwMDA5NzhERDAxMEJDRTFCOTAxQ0MxQURCNDEwMkY2OEFBNDIKLToxMDZDRTAwMDFCNzg2REEwRTE3RjQ4NDM0N0NDQkE3MTgwOTdGNkExMkQKLToxMDZDRjAwMEU4RjdBREI4MkRCQTY5ODcwMEI3NDlDNDA3NkM5MzIxOEUKLToxMDZEMDAwMDBDNTAwMjcwQTU1QTBDOTAwNTkwMDJGREZBMjQxMUE4QUYKLToxMDZEMTAwMDFEMDczMDJGQzVFN0E1N0Q2NjBGRjc0OTM0MkUwQkJDNDQKLToxMDZEMjAwMERDNTY0MEFENDRGNzJEQzkzN0U1RkFCRTYxN0YzMDRGRTAKLToxMDZEMzAwMDM5RDEzRjVBRTcyRkJFRTI1NzU2NDE3RjQ1MDE2NTU4OEEKLToxMDZENDAwMDE5QUQ2M0EzRkE5N0IxMzgwRkREQ0ZBMDUxMDE1RUM3MkIKLToxMDZENTAwMDg0QUFFQkM3QjYxMTFDNjhGMTMxNzQ3RTc4RDZDQzBDQ0UKLToxMDZENjAwMEMyOEQzMUFFRDU1MTc4NTQ0MkJBNzhFNTI0MzVBOTEwOTgKLToxMDZENzAwMEZCMEE1Mjg2Rjg3RDJDODVFOUY0QTNFOTM4MzNERUZGNUYKLToxMDZEODAwMEYxQjE5NENEMzJGMkUzNjE0OUUwMjk0MDc4MjI1QzQxQ0YKLToxMDZEOTAwMEYzRTM4NDBGMTdFMjY3MEQzRDM3QjNGOTM3OEMxNzBCMTgKLToxMDZEQTAwMEQ0QjY1NkU4OTQ3NDEzRkRDNDFGRTI4REYxNzRCN0UyQjMKLToxMDZEQjAwMDUwRUQxRUEyQUQ1NzUzNjgxRTFCMDRENzQ4QjQ1RTFGOEEKLToxMDZEQzAwMEQzRDMwMUVEREMwRTgzMTBCNzRFRThFMzc2MDVEMTc5MUQKLToxMDZERDAwMDIyRjFDMUMzRkQ1NEU4NkYxRjhFQ0ZENUE4QjUwRDJBOEYKLToxMDZERTAwMEVFRTdDN0Q1RTkxMkVEQ0YwOUFBNEVERjgyNUM5RkYzMkIKLToxMDZERjAwMDFCRTgzQjBCRTlFQjg4RDJENzRFRjQ0QzFFNEE0RjA3RjkKLToxMDZFMDAwMEE4NEM4NzM0MEY3OEQ2NENFMDc5MjE4Q0ZCNzg3ODA2MzMKLToxMDZFMTAwMDA0NjUwNjkxMEEyQUUyMjU1QkRGNjc4NkNFNjdDMjBGMEEKLToxMDZFMjAwMEVEMkY2QkJFRDg5RkY5N0QzOUQwQ0VFM0YyMjBDNDZEMzMKLToxMDZFMzAwMDAxRjQ3MTlCRUU1MDI1ODVENzczNENFN0VGN0JGMDc1MUQKLToxMDZFNDAwMDcyNzQzRDQ2NkIyNzA0RTNGQ0E3MEI3MEZFMjJBNkI2QzYKLToxMDZFNTAwMDRCNzJEM0ZFOERCRjVBQzZFMTFGMkFGNjc5QUI3MDlDRTgKLToxMDZFNjAwMEUyNzM3QUVEQjg5NUZGNUQzMTkzNDAwOEQ2OEIxNTIwMUIKLToxMDZFNzAwMEJFM0FGQjE3RDQ4MDBCODc3QjZDMTAxRTREQjMwNzc4OEUKLToxMDZFODAwMDdENDlBMzQ1REZEMDJGNzY2NDU0RDg1ODNGM0U2NzNERjcKLToxMDZFOTAwMEY2RDEzMTdBQ0UwQTMxRTM2ODFERjI0REE5NDRGNzg3NjUKLToxMDZFQTAwMEU4QzI5NEExNzRCRkZCNTg0QkU2NzMzMUYzNkU1MTUzQTMKLToxMDZFQjAwMDMyNjk5RjMwMTkyNjdGMkQ0NzlGODdDQTc0ODBEQ0ExRDUKLToxMDZFQzAwMENGN0ZCRTMyOTBGOTlDMzU0QTg3MzZDN0JGMzEyRUJEODEKLToxMDZFRDAwMDA4RTBBNENCQjA0RjM4Q0U4Q0UyMTg3MUM5N0EyRUIwM0UKLToxMDZFRTAwMENBQUVCNjY2MzIwRTE5QTc3NzIzODFFQ0Q4N0U5RTU0QkYKLToxMDZFRjAwMDE4RTRGRDQzRjNFNDZCNTEwRjVCMUM1RTQ5QzJFQjBEREMKLToxMDZGMDAwMEFBMkI0OEY0Njk3NDg2NjZCMzlFMzBFOThEMTlGM0Q0RDAKLToxMDZGMTAwMDcwMUU4RTFCNjgwNjBGRDE3NUZEQ0U2QjhFMTM1RDA3M0MKLToxMDZGMjAwMERDQTBEOUQzMDQyRUJDOTM0ODRGMTg3QTA0MzQxOUY5NDUKLToxMDZGMzAwMEJCNUE5QUUwOTBCMDZERUNGQUU0QTVERkUxRjhBNDFFMkMKLToxMDZGNDAwMDE5NjRCQzNGODA3QkVFQTM3RDJCREUzNDYyNjIzMjNDNTEKLToxMDZGNTAwMDE4MjdERkFEMEUyMTNGQzYzRUNERjJGQUNGRUUxMzM5MzIKLToxMDZGNjAwMENGRjMzMzFGNjREMkJGMEZGRTNCM0QzRjA4MjlFRDM0MDIKLToxMDZGNzAwMDdFODM4MkFGQTZGOTdCQURDMUFENDg4N0U1MDc2NUM2QzQKLToxMDZGODAwMERCRjI0RTI5MDhDNDY3NDU0QkE1RkU1RDJGQzgyMEYwRjMKLToxMDZGOTAwMDA3N0NGRkFFNUY5NjMwMUU2NTE4RkJBM0U5RjhCQzdGNDcKLToxMDZGQTAwMEEzRDU4MzFBMTNEMkJDRjFGNjJBQTM3QTE4NjgzMTM4MTQKLToxMDZGQjAwMDgwODBGNzQ4MEVEMjZCOTE0RUFGRjVDOTBGNkRBMkY1RTgKLToxMDZGQzAwMDZDNjgxMUY2MjlBQjM2M0Q2RUZDRTc0OTU3REJFQTcwNzkKLToxMDZGRDAwMDdFMkQxN0Q3MzU5NTcwRDMzMzcyMzVGNjk3RTVDQkFBNEEKLToxMDZGRTAwMDhDMkEyMjdCN0U1RUJDN0Q2Q0I3QkU0N0YyQTdFMTNGNTgKLToxMDZGRjAwMEMyQjdBMUJGRUE0ODdGOTExRTkyRUY2NUZCNzcxQUU5RkQKLToxMDcwMDAwMDI1OTNCQzgwQjA3RjREQThBRkMyMzhERjkyMERFMjc5RTYKLToxMDcwMTAwMDYzQkVGQTlFODc1N0U3NjM3QjVCMzBGRUZBMzI1MEEyNkQKLToxMDcwMjAwMDdEQjZCM0FFRDFBNDA3RUU4NjYxMUVCQjM0MTRGRjRBMTEKLToxMDcwMzAwMDFBRTI5RjQwRTIwNEE3RTA4M0QzNDNGQTY1RjAxNUQ5MzIKLToxMDcwNDAwMDYzMTdBNDYwNzkyNUJBOTMxRTkxRkI0N0FEOUY4RUYzMTkKLToxMDcwNTAwMEY5N0JBRDEwRDQ4ODVGRTJGRUUwNDYzOTE4Mjg4QUNBNzEKLToxMDcwNjAwMEM3NjBFRjRFQTZDNzkyNUNBNDA3RTJEMzlFMTM0RkZGMDIKLToxMDcwNzAwMDI0MkQ5RUZFQzlBM0QzQkY5MTFGMjkxRTEzM0RFNTFBREYKLToxMDcwODAwMEE2M0ZEMjFCNjhGRUQ0Q0FFMkY4RTc3NTdBOEZDNjdGQTYKLToxMDcwOTAwMDgyREU1RTVFNjc1REI3MDQ4RjQ5NDRFNzA3MEZFNDZCRUQKLToxMDcwQTAwMDQzRTlEQUQ0RkRCMDhERTRGRjdDNzQzNUQzNzE1QzlBOEEKLToxMDcwQjAwMEFFNDc3NDNBOUU4NjlFQkQzQTJBNkIxRDZFNTYyNUJDMUQKLToxMDcwQzAwMDBGNDU2RDlGNDEzODJENDBCOTI1OUM5OEU1REFBMDlGNkEKLToxMDcwRDAwMDM1NTNGNURBNzBEQzQ1MzQwRUY3OTdFNzA4MDk2MUY0QUIKLToxMDcwRTAwMDgwRjIzMkUxNjVBMUQwQkJBREFBOTdFRDkxQTE2RjkzN0IKLToxMDcwRjAwMENGRUFFREY3RTE2QjZDMzNFNzU2M0M0MDM4QkE1RDRBQjYKLToxMDcxMDAwMDY5NjdCRkNBMjRCNzZCQzdBRDYwRkQ1NUIwMEFGNTMxREEKLToxMDcxMTAwMERCRDU3ODNGMkRCNEQyRTE1OTg0RUI3OTZBMjU3ODE2MTYKLToxMDcxMjAwMDhEMDBEOEIxNTJFNUQ2RUNCRjE5RjJCRTExRkQzN0JCQzgKLToxMDcxMzAwMEIwQ0YzQ0FGODJGODVEQTM5MkZFRjFBOEI0Q0U4NzZDQ0QKLToxMDcxNDAwMEMwNzIzQTUwMEFDMUNERjhGRTUwRjgzMzM3RjlBMzBGOTgKLToxMDcxNTAwMDk1NDVBRUFFNDU3RkM0QkYxODZBNDNEODZFNERCN0IwRjMKLToxMDcxNjAwMDdFN0QzNjVERjg3N0Q1RTkzNjZFRDdENDVBQzA4QkVGODEKLToxMDcxNzAwMDM5RDUyMzA3MjU1Q0RGMjlENTdCRjA3MkQyM0IzRDU2RkMKLToxMDcxODAwMDhERkQyQjM1RjJEMkY3Rjg3RUI5QkEwNkU5OTk2QjY5MTUKLToxMDcxOTAwMDlGNDBFRkM1RjFENTQxOUM3N0EwRTc3REQ3QUQzMTc2MTMKLToxMDcxQTAwMEY5NTRGNzIzNjNDODBGN0FENDAyRjVBMTA0RkU1MDYzQTMKLToxMDcxQjAwMDlBNzhGRkE5RDFFRkI5NzFEQkQwRTg4OEQ4MDBGMTc0RDMKLToxMDcxQzAwMDdGN0Y3MzJERjk1Qjc3MjU2QjdDREZENjM1MjM5Q0NGRDIKLToxMDcxRDAwMEY4OTlDQkZFRjE3Mzc1QzMxODZGQkI0RTQwOTBFNDZFMDcKLToxMDcxRTAwMEI2N0NEMzU1RTNCMDNGRTU1NUM1NjM2N0ExRjI1RUJERkMKLToxMDcxRjAwMDYwMTIwRjYxQkVBRkZCQjI3QzAzRDFDRjhGRjQ1Q0M1RDAKLToxMDcyMDAwMDE3REI1RjI2N0UzREZCNjcwNTQ4RUUyQTlBOUY3RURGRUYKLToxMDcyMTAwMDg3RkIzQzkwODM2OEE4MDQ5OEU0MEQ5NTg3NzFENEFDRjMKLToxMDcyMjAwMDlFQjQxOTI0REZGRTYzQzBGMjNBQjE0Rjg5QzMyREM4NjIKLToxMDcyMzAwMDBERkJGMzQ5QUZCQzIxRENDM0M5NkY5OEVFNDM0MDI2NzgKLToxMDcyNDAwMEZGN0Y0QTdGRkNGNTY5RTdDMUZCNUEwM0VGMkU3MDEzRkQKLToxMDcyNTAwMERFMUY1QkQ5MERFRjkzNURENEVENjcxRTZFMzAxMTNEREYKLToxMDcyNjAwMDBEN0MzRjkzM0NGMzkxMzRGNjI3NDAyNkRDN0E5NEM0OUUKLToxMDcyNzAwMEUzRkY5QzJFMzEwRUQ2N0QyOTRCODRDQjgxMDg3ODU2QjYKLToxMDcyODAwMDIxQkQwNjE2RTVGMUJFMDczRTIzODcwQ0RCMkZFNUVBOUMKLToxMDcyOTAwMDUwMDI3RkVCODkzNDFCM0ZGRkE4NERFMEZFRDEzQTY3RDcKLToxMDcyQTAwMEIwMDVGN0IzQUY2RUU5QzVGREY4QkUzMzNGRjA1REFDOTYKLToxMDcyQjAwMDdFOTMxRjhDQUFDNTUyQzlGQzRBMjVCQURGM0VCNzRENDIKLToxMDcyQzAwMDYyMzk4NEY2NUNBMjlCNzlCQzIxMjc4NkRDMThGMjkyOTUKLToxMDcyRDAwMDVCMzdDQzE3NENGMDlFRDFGQUZFNjZENjhEOTY2Qzg0NDcKLToxMDcyRTAwMERCM0QxMjEwMUY0RkFEQzI3NTdEODNGRjE4ODA1NUY5MkQKLToxMDcyRjAwMEI0MUU3RkY3QTczNkIyRDc4RTFFQzkxQjRDMzBCRTM3REYKLToxMDczMDAwMENEMjVGMEJCMkFEMDMyMERFOUI1NjIyMTNFNEI3MjYxMkEKLToxMDczMTAwMDZCMkY0QTM0N0YwMEQ2RTVBMzczMDhCRjQ5RDM3ODVENEQKLToxMDczMjAwMEE3MUM3MDBCQzkyNTI4RURCOTY0Qjc0Rjc1NTc3RDlCMTUKLToxMDczMzAwMEY0RkE2MzI4ODdFNDM3M0M2QUY1RjBCQTAzOEQyOEIzODIKLToxMDczNDAwMDQ0MTY3MjNDQjE1RjcwMzU2QzVBMTMxMzQ3MUU0OTlCNEIKLToxMDczNTAwMEYxNzYxQUFFRTNFRDM0OTVFN0NERjA3OTI0NUFCN0U3MkMKLToxMDczNjAwMEFCQ0Y1RDM0RkZDMDE3NzZFNjVGMUVDOTcwOENERjc2NDkKLToxMDczNzAwMDI2NEREMEU3ODE3NEVGMUI4Qzk3RkE0QzU2QTYxRTlGQzIKLToxMDczODAwMENCQjNBODFDRTBEMjZFQTQ3NzBDMkVBMzdDMEJGMDczQjkKLToxMDczOTAwMEU5QkUwMEFGMjdCRDBGMDMyNzhFQkZCQzFBRjlDQjdFMTUKLToxMDczQTAwMDVEMzk0MzU4MDI2NTUyNTQzRjU3MzgwQUMyRjkyMjdFNkMKLToxMDczQjAwMDA4NjUyMzdERDNFQjdGQ0NGQTNBMDlGNTMwQjlFMkQwRUEKLToxMDczQzAwMDE3MUYxN0IxNDZDNkU3NDlGNjQ5MkZCNEFBQzJDRjZBQkMKLToxMDczRDAwMDRCMTM3QUFFRUQ2MTI1RDg4QUVGRERBOEY0Mjc4REMwNzYKLToxMDczRTAwMEI2QzhBQkNENTQzNEQyRjdBNTNDNkZDRTFEQzBGMjZERkMKLToxMDczRjAwMDcxMDQyNUQyNDNDOTI1M0Y0RjNCRUI3NzREMDNEOEZFOUYKLToxMDc0MDAwMDk1Q0NGNDM3RjM2OTVDQkE0MTE3REY1NzQ0OTdGMUJENjcKLToxMDc0MTAwMDkxN0RFNEJFNzk5MjIwODNGODNBNUI3NkYyQkVBNzlDMTgKLToxMDc0MjAwMDE0RkFDN0FDNkZFNEYwMkYxRjI1N0QzM0EwQzc0RjA5QjYKLToxMDc0MzAwMEY0Q0RBRDY0NUYwRDdEMDM3MkU5N0VDMkNGQjQxN0Y0NjUKLToxMDc0NDAwMDMwNTNENzMzMTg3RDMwMUQyNjFGRjJCNTNBMTNFODk3MTUKLToxMDc0NTAwMDRBQTg0RDQ1MTI5RjU3QkY5OEY5ODhDRUZFRDk3RTAxQTQKLToxMDc0NjAwMDEyQTNCQzE3RTUyOEU2NzlCMzNFQkEyODNENUUxRjlERkUKLToxMDc0NzAwMDg2RTlEOTU3Njg1MUJDOTREREVERDk2RjhGQzE4N0ExREEKLToxMDc0ODAwMDg3QTI3ODA5QjI5Qzk4REYyMzgxRTM2QzVGMkQyMUZERjAKLToxMDc0OTAwMDcxNDg0RTI1QkQzMzAzRjk4RUYzM0ZBRkNCNDlEQTY3MTAKLToxMDc0QTAwMEMxNkYxM0ZGRDdGNTVDOTk0NEI4REVEMTVCRTUyMEIxMUQKLToxMDc0QjAwMDU5OUUyMzZCN0Y0NkZGNTlEOTNCMkYwMDNBNUM0OERGMkEKLToxMDc0QzAwMDE5RUZCNTgyNDM3MzhFMjY3QTU4OTgwRUIyOEFGRDk4Q0EKLToxMDc0RDAwMEY3MEZCNjRCRDVBNDE3OTE2OUE5RjNDNjlENUIxRjJDNzYKLToxMDc0RTAwMENGQjFGMTdCNzZGNDE2QTcxMjhFOUM4MEYxMkRGMkFGMEUKLToxMDc0RjAwMEEyNDc2MjNGQzE4QzZCMzM4RTVCRjEwNTE2OEUxQjZCMEUKLToxMDc1MDAwMEQ5OUY5MEE1OTA5RTc3ODg4RjRCOEIwMjUzRDg0RURERTQKLToxMDc1MTAwMDgxNzEzOEY5QUQ4M0JENjhCN0IwREQ4MTc2OUVGQzk0OEEKLToxMDc1MjAwMDU2RTc2Q0RFQjdCMTVGNjM3RDc3QTRDQ0NDODZEMkExODEKLToxMDc1MzAwMEZCMzc1QUZGMTczMjA0MzM2MkZBNEFDNDQ2MzhGNjdGRTMKLToxMDc1NDAwMDYxOEJCQjZFRDBGMzVDNzQzMEU4Mzk5NUU4MjlGRDlGMDAKLToxMDc1NTAwMEQzRjM1QkU5MUFFM0MxNENEN0ZGRTlGRTBCOTY1NzQyMjAKLToxMDc1NjAwMEEyQkNDMEZGMkZGQjlGMDZCRURGRjU4Qjc4RUJCNTFDREUKLToxMDc1NzAwMDc3NTQ5RjE0MkNBRjk2OTcyMDFEMjY5MTNGRUU4OUVBRjEKLToxMDc1ODAwMDA3MDdGRTIzN0M4REVGNkU2NzdENTM4OUZBODZGQ0NDNUUKLToxMDc1OTAwMEZDODYxMEVCOTdDOTM5MjI1RTMyRUI4RDRCN0JFMDNBQ0IKLToxMDc1QTAwMEQyOEY1M0MyRTg5NzVFODBGRUY4OENGRTI3OTdGMzM4OUYKLToxMDc1QjAwMEMxNzRDQTQzRkQ3MUZFQjIwRUJDMzQ1RTgzOEMxQTdDNkEKLToxMDc1QzAwMENGRjgzRUM1NDM3NjBGRkEzMjEyRTYwNUNDNzZDM0YwMEIKLToxMDc1RDAwMDRCMEQ3RkQ0M0NDRUYwNDcwRDdCRDJBNEQzRTE3MEJBRTMKLToxMDc1RTAwMDJGNDRFRjA3NTUwRDkwQkNBMTVDODUxRUYzMzBFQzM1QTAKLToxMDc1RjAwMEYyMTc4RUE0RDVFRUU0RkJBMzQzMDE4RTAzOEE0MUE1QzYKLToxMDc2MDAwMEJDMEVDQTJCRkI2MTE1MEU2NzU4MUUzRjU0M0U5MzREQUUKLToxMDc2MTAwMDcyMTg0MkJBNTA5RTIwRTBCNDA0NDc0ODQzRDc4MUVFMjYKLToxMDc2MjAwMDc2ODBGQzNFN0M4MERGNUY5RjJFRjJBNTA1Mzg4Njk5MzAKLToxMDc2MzAwMEQ2MDRFQ0ZGMTc4QzA3MUZEOUREODIzMjZDNzE5RjdGNTcKLToxMDc2NDAwMEQyRUQ0QTlGM0VERTY4NzFERDA3RDMyOUZGQUI0MEMwMTMKLToxMDc2NTAwMDVFRjZDRkFGOTc5Njk4NUY0NkY0RjFGRTkxRTY3MTU0Q0YKLToxMDc2NjAwMDdCNzlGREY5MkE3OEM4OEZDRjU3NDI5MjA3REY5RkRFREEKLToxMDc2NzAwMEEwNDk2NzkzNDg4NjlEQzZGOUYyNkIzNEI2OTdGOUMzNjMKLToxMDc2ODAwMEIxNEZFM0M5REY0OUMwOTdGN0QyQURCQ0RFNDY0N0ZGMzMKLToxMDc2OTAwMDAxMUJEMkMxNUZEMzVDRURCMjQ0RkQ3NEJCRDVFN0NEMTUKLToxMDc2QTAwMEE3RkM1MUI3RjBENzgxRjI3RDlDM0ZGNjQ4QjQxRjY1MjcKLToxMDc2QjAwMEE2QTA4RjVGMTVGMTk1MTM1NEQ2OUIxNTNBMUYyQjFDNkUKLToxMDc2QzAwMDM1OUNERjIxOUI2ODlGMzI3NERGOTJFNkU1QzE3OUYzMzgKLToxMDc2RDAwMDQwMEI0Qzg5RUE1NTIzRkVDMTY5ODBERTYzRDZBQjAzQkIKLToxMDc2RTAwMEJCNUZCRjI4ODBGMkY4RDZGRkZBMzQwNUYwRkUzQjRBQjQKLToxMDc2RjAwMDI0ODVFODcxRkNERTk3NTNCQzQ4OEZCN0VFMTVGMUNCQkIKLToxMDc3MDAwMENEMjZGRkM4OTYyMUY4NTM5NzUxRkIxNUQxRjU5Njk1RDQKLToxMDc3MTAwMDVGNEQ4QUQ1MkY3MDc3MTZDQkM1NkQ0MTk5ODJFMUIzNDUKLToxMDc3MjAwMEYyQjNFQzg5NjRDRTNEMUJGREM2NTA0NjVDREY5MDgzMEUKLToxMDc3MzAwMDQ2M0IzNDI3RjJBQjJGQ0IxMEYxRDk2RDFEOUI2QzE0NTcKLToxMDc3NDAwMDQ3RDc2NUY4NTIzM0YwRkRDNzc1RkZFRjc4NTcwQUU3NjIKLToxMDc3NTAwMDAzOENGNTJDRUM5ODYwMjM3QUJGRDM2Mzg3MzAyQkM4NTkKLToxMDc3NjAwMDNFQUJFMEIzRjc2QTY5MTIyNUVGQzU5Rjc5OUQwN0Y2MzYKLToxMDc3NzAwMEU0REIyQzM4REY2MjA5MjIyMkFGMDUwNzdFODZGRDBGOEQKLToxMDc3ODAwMDcyNjQ1OEUzMTlCQThGQzU2RkE5MzZDQUI3MkY5RTAxMjQKLToxMDc3OTAwMDkxMDBDQUQ1QzIzQkE0RDU3N0UxRjg4NTNFMjc3OTcwMjAKLToxMDc3QTAwMDQzRjZCOTIwMTAxRkU3MkZEMUZEOTU1QjFGQjA5QUUyNzkKLToxMDc3QjAwMEE0RTYwMzk0MkY1Qjg0RjM1MDNDQkJCODNERkVGRTYwMEYKLToxMDc3QzAwMEVGRUQwNzdFNDY3NkEwREJDNjc2NjBDOTc5RTJBN0YyQzgKLToxMDc3RDAwMDBDM0RFRjMyMDkyNjdGNUQ0MkZFNEFFOThGNEFCNTczQzAKLToxMDc3RTAwMEVCMjVDMzVGMzlCRTEyMDgzQ0YwRDc5NTBFNkU0RkFDNDcKLToxMDc3RjAwMDU0QjlGRDRBRDdEN0NCQkFGNzFFNjA1QzJCN0Q5M0M4MkUKLToxMDc4MDAwMENFRUVFODdEM0ZGOTQ2MkQ2QTM3MkVEQkY0RTlGRTlGODgKLToxMDc4MTAwMDYxQkY5Q0Y2NTk0NEZBMzI2QzI1M0M1RUFFREI4RDI1ODcKLToxMDc4MjAwMEJBMUY1MkZFODVEOTZFRUNGREMzRUYyOENFQzZGRDZGQTAKLToxMDc4MzAwMEU1ODhFQkMyRkM5MTlCNDBGOTJDOTYwRTg2MUQzMUQzNTYKLToxMDc4NDAwMDYzQjBCNzI0OTk3MDcyQkQ0MTE3M0QxRkZCM0ZBNUNCQjQKLToxMDc4NTAwMEI5OUU2Qjk0MTFENzA5RjQ4NzIxNEY1RkU5Nzk4NzQ1NjkKLToxMDc4NjAwMDVCRTZBRUNFQzNGN0I3RUVGRUIwQjA1RkU4QTVEN0MwMUIKLToxMDc4NzAwMDFEQzUyQjJBN0FDNkRCMTI4MEM4MUFDNEE3QUZFNzA3M0EKLToxMDc4ODAwMDA3ODg0RTA3MDg2Rjk1RDRCRjg4RUZFNzU0MjE3RTUxRDMKLToxMDc4OTAwMDZFOTdGNDdDRjQyNjhDNjdGOUNBQjFFNDUwMUJDRUExMzQKLToxMDc4QTAwMEY4RDI4QzQzMzNGRUNDNzgzQjY1RUQyRjI0RkQ2MEM2QzcKLToxMDc4QjAwMEQ5MjkwOUU2MjdEQTU3N0Q4NjM4QkY1OEE0Nzk2NzUzNTYKLToxMDc4QzAwMEJDOEI2NjZEQjVDQUZCMTFGQUVGQjhEMjdFRTA4NzI0OTcKLToxMDc4RDAwMEI3NUIyNDhFMEYxQjlGRTk3QzlBRjREMUQyREZGQ0M0RTYKLToxMDc4RTAwMDQ1RkFFODIzQTVERDRERUY2QkQ4N0E5RkNCNEI3QTQ5NUIKLToxMDc4RjAwMDA5QjhFOEY5OEY4MjQyMkY5OURGQjc0N0E3QTM3MTJFMDUKLToxMDc5MDAwMDcwRDYyRTNEMTA1OTdEMEZEMkUzMENDQTMzQzk2RjUzODgKLToxMDc5MTAwMEQ3REY1NkRGNDM3MTg2RDcxMUExQjhGM0I4RDIzRjlCQUEKLToxMDc5MjAwMEQ2NzFEQjAyNjc3MzhCODdFMkRCRjg3RDJGN0RGQzI3NDYKLToxMDc5MzAwMDZFOERGM0M3ODE3QzlEN0UxQ0FGMzY2REIxN0FDMjM4RTcKLToxMDc5NDAwMDZGRDMyQkIyODc1RUUzODcwOEVGQ0ZGQ0JDM0ZGNEJFNUEKLToxMDc5NTAwMDhERjRCNzZBODE0OEMxQjRBMUY3OTE4RDM2OTIxQjdGMkYKLToxMDc5NjAwMEQ3REE0RjY0MTdCNTgyNUY3RUEyNzNDQzM5NDNCREFFQzAKLToxMDc5NzAwMDg3Q0QzODdFMkEyM0ZFM0MwMUU5QzNGOUQ0MDBBRThCQzMKLToxMDc5ODAwMEYyNDcxMDE0RkFCOEY1RDdFQkM3QkY4QkVCM0JCMUU1NjQKLToxMDc5OTAwMDA1OTc1NDFBN0JBRUIwOEFFOTM2MThCQUY1OTcwRUNCMjQKLToxMDc5QTAwMEI5RjE3QjRBQzc3QkQ0NkYwOUYyNzM1QUI3MjQwRTgzQUYKLToxMDc5QjAwMDdBNDREQjYwMERCQjI4NkU2QkQ4NjRGNTA0RjA3MjQzMkIKLToxMDc5QzAwMEE3MEMwRUIyNUY0N0VERUMzNzM0NzQ3RUNBRjg2QzkwQUEKLToxMDc5RDAwMEJDMTE2OTAyNkZDMzI1QzVGODExQ0IzQTNGOTg0REZBMjcKLToxMDc5RTAwMDc2NTlBRTBDMzUyODUyNEI3NzlFMTZFM0JEMTA0OUMyMkUKLToxMDc5RjAwMEYxQ0JCNkJGM0JGQjg3RDQ0N0JDM0IxMkYwQUIyQUI0RkMKLToxMDdBMDAwMEQ3MjZFNEM2QzRBRkQwQkJCM0M5MUY2RUZERjVFN0NDMjMKLToxMDdBMTAwMDhGOEZGNjQ4OTA1RDM0RjRGOUZBNEQxRkQ4Qzg5RTlDQkMKLToxMDdBMjAwMDQwQzY2NEE0MDk3QTkxRERGMDg3RTQwNUI2RDQ0NEZDMkQKLToxMDdBMzAwMDBCNUZGRERCMEFCRUNGRjlCRkYzRjFGMTIxM0E2QkNCNEYKLToxMDdBNDAwMDYyQkMzRkY1NUI1QzQ3RkQ5Qjc2NEYwREJERjdBOURCNDQKLToxMDdBNTAwMDVEODAzOEY4NTA2OTE2QjhGRkY5N0Q2RUIyQzNGNUQ2NkYKLToxMDdBNjAwMDgwNUJFNTU2NUNBRkZGQzU5RDhDQzcyNTg3RUY3NDhCQTcKLToxMDdBNzAwMEY4QzY5QjJCRjI0NTgxNUNEQUU3RTI4RERGRTU3REQ2MjcKLToxMDdBODAwMDgxOEZGMTU4RkY3M0I5OTZGMjM0QTcxNUE4REU5RTQwOTYKLToxMDdBOTAwMDZFMjY2NTRBRkFGOURBRjdDN0RGMjNDRTAzODBFMkYzRjAKLToxMDdBQTAwMDBGRjVCQzY5RTA4OENDN0U5QjFEQUU0RDlEMUI5MzdGN0UKLToxMDdBQjAwMDRBQ0ExNEY2MzgwMEMxQjdFOTVDRDU4RkU2OTVDRjQxQzQKLToxMDdBQzAwMDBFOUY5RTRERjNEQzUxQTQzNEQzMzkxMUVFM0ZBMEQzNjkKLToxMDdBRDAwMDRCRkE5QUYzMDJBMDI5MzE3RTU2RDVFMTJCQjIyOTJGMTkKLToxMDdBRTAwMDY2ODc0MURCQkY1NkIwNUZBRDkxREYxM0YzMUNEM0VENkEKLToxMDdBRjAwMEMzQ0RGNjYxRDJBNUQ4QkExM0U3NEQxN0VCRkJDMEJGRDMKLToxMDdCMDAwMDIzMTA4MzI3RkYxMzFGMzI5RTAwRUQ3NzZBOEVFODNGMTQKLToxMDdCMTAwMDQ2RjJCOEQwRDk5QzhBNzRGQkVDOTVGNzZENzRBRTE1MUIKLToxMDdCMjAwMEMwRkQ4Q0EwRjVGNjdEQzA3REYwNjQ2OTM0REU5OERGODEKLToxMDdCMzAwMERGNkQ4RjlFMDc5MjVDNkZGOUMwMjREN0YxRjdEMTdFN0QKLToxMDdCNDAwMDMzM0RGRDkwQUE1MURDRjZBMTJEMzI5QkVDNzkwMERGOEMKLToxMDdCNTAwMDRCRjUwNTc1RUJFQzcxRTc4RDUxQkM5OENFMTc3NUY5QjcKLToxMDdCNjAwMDM0RjI5QzRCNENGRTk4RDE5QUY1QzI4NENDNzhCQjA2N0IKLToxMDdCNzAwMDFCQjMxMjlFMkY5QUUzOTAwNjZCRjA1NzQ0OUY4NkEzODcKLToxMDdCODAwMDc2OEU1RjFBM0E4NUZDQTE0MzFEMTk4MUYyRjA3MUM3MDgKLToxMDdCOTAwMEZFRDc2RUM0N0Q3QzFDQjI2NkQ2RjBEQkUyRjU2REZEQ0YKLToxMDdCQTAwMDBFOTQ1RjFDMkYyM0JEOTM1OERGN0VDRUZFOTQ2MThGMTEKLToxMDdCQjAwMDNFNzZFMkM1NzEwOUU0MTZBRjI3OTQ1QjI3QjAzRUZCMjEKLToxMDdCQzAwMDdGQTU2Nzk3OUM0M0NGN0UyRjczODg5RjkwOEFBRjgxNTQKLToxMDdCRDAwMEJGM0VCOUVDNjJGMjJGQ0NGNDM1RjRBQjU5NkY5RUNFQjgKLToxMDdCRTAwMEQwMTJFQTRERDBFREJDNDFDN0E1REI0RTMyNkVDRkU0REEKLToxMDdCRjAwMDhBRjNBNkE2MkQ3RjYzM0I4NjY0OEREODExQjc0REMxNEQKLToxMDdDMDAwMDRGQjg3RjFGRDkzMUVFRUY5RDI3OEQ0RkI0RUY3ODdBQjMKLToxMDdDMTAwMDlBRUY1RjRDQkM2NUI5ODlEQzRDNzQ5NjJEMkU4RkM4RTkKLToxMDdDMjAwMENGQTk3QzlFREY0QTc2OTNGNEI0QTYwMkYxMTE2NjQyOTYKLToxMDdDMzAwMDg4RkMwRUE5RTc4RjdGQTNGNzk5RTM4QUMwNEMxOERENzMKLToxMDdDNDAwMENDRTdCQUIwMzZCNjNFMjdBNEU4RjUxNDgxQzRGNTM5QkUKLToxMDdDNTAwMEFEQjZFODc5MkVERDNGRDc3OUVFNzE1RENFM0Q0RTk1MUMKLToxMDdDNjAwMENCMTFBQzk5OUE5Q0E4QUVDNDUzNjU0OTE4NDdBQ0NGQzgKLToxMDdDNzAwMDE0N0VENjA4REEzM0I2N0ZDQUQ0QzRCOUJBNUNBQjI3NEYKLToxMDdDODAwMDFBNDVCQzQ0Mzk1NEQ2N0Y2OTJFM0UwRkI2RUFGNTE5MjEKLToxMDdDOTAwMDM4NzMwRTlGMUYyNDVCM0U0NTkyQzBDRTc1NzNFNzI4NTQKLToxMDdDQTAwMDk0MUYyRUI3REM1RTgyRkRFN0Q3MkQ5QUEzMjA3RTNDODEKLToxMDdDQjAwMEQzMkMzQjhCQjE3RjY4REQ2MjcxRkY1MjRCQjkxNUExQUMKLToxMDdDQzAwMEZGNzhBMDZFQ0UyQ0NBMUI1OERFRkQyOUVENEY1OUE1QkEKLToxMDdDRDAwMDAwRDU4Rjk0QjQ3REMwRkQzQkFDRTJGQ0FBRTlEOTVEMzAKLToxMDdDRTAwMEY1RjRGRTI2MDkxOTgxRjQ2RjczODU5QUI5OEUyMTA3ODAKLToxMDdDRjAwMEQ0NTU5NDNDRDY3NkZBRThGRUVBNUM4Q0U3OTExRkZCRkIKLToxMDdEMDAwMDUyN0REQjMzQzlBRTM4QzIyRUFEOThFMjRBRUZGQUVGQUUKLToxMDdEMTAwMEUxN0RFNTg4OTU2MjQyRENBN0M4ODM4RkREMzkyRDg3MzgKLToxMDdEMjAwMEY0RUVGRjg1RjdFRkNEOUM3OEVFRjc5RkQ4NzFENTdDMDgKLToxMDdEMzAwMDFBM0Y1NjA2NTVDNkY5Q0ExNEFEOEFGQTc2OENBRjI5OTEKLToxMDdENDAwMDZFMzNGODUwQTYwOEJBOTczQTZEMUNDRkI1QTU3OTczNzMKLToxMDdENTAwMDA4NEY3RkNBMzRGODc1NjE2REFCNTVGOEE1NzJCMkMwOTMKLToxMDdENjAwMDgxOUM2QTY5REU4RUVENkIzQUZGNUZEN0U5NDE3Rjk0QjMKLToxMDdENzAwMDE3MThEODlEQkQ5OUVCNTYyMDUyNDhGQzk1RTVDRDlEMkUKLToxMDdEODAwMDQ0OEY0ODhCMDI5QjI5RkZCQUZCRjE0RUMyRTdFQjM2Q0EKLToxMDdEOTAwMDA3RTc4RjZFNDg3REQwN0EwOTJFQjlDQzUxNzgzQjgxQTgKLToxMDdEQTAwMEZGNERBOUUzNEU2QTdGOUZFNTdCMkY1M0Q0ODc4NTY5RkEKLToxMDdEQjAwMERFMUI2Rjk2QzVCQ0NFRTYxNEIyOUZFMDQ1QjkxMjc5QzIKLToxMDdEQzAwMDFBRjZERkMxODc3MjQ1NkJERTg3NzIzNTgxNTQ0MTdDQkMKLToxMDdERDAwMDlEOTM3OTFENzI2QTA3QUZFMzA2QkI1OEM3RkM2MDcxQkIKLToxMDdERTAwMDZCM0ZBRTYzODIzRDc4MTFDNTU3RjhGRTQxQzJDMThEMkQKLToxMDdERjAwMEU4NkUxMTlFMDMwNUQwNEI3QzdCRkQ5NjRCMzc4OUZEQzkKLToxMDdFMDAwMDE1QjBCQ0IyRkNGM0Y5RkI4OUE3NjgzRTNGQ0U0RkU3NDMKLToxMDdFMTAwMEE4N0VBOTlGRkIzQjE1ODcxQTUwODU3RTVGMTA5Mzc3M0MKLToxMDdFMjAwMDdCMTZEQTVGMkUxNUY5RkQ1NjhBM0JBNkU5NzFCMTkxRjIKLToxMDdFMzAwMDdGMzNFQTBEMjZGN0ZBQUE5Q0E0QjBFNTFFOTlGNENBOEUKLToxMDdFNDAwMDY5RjRENzQ4OEY5OUYzNkU1MzRDRkE3NzVBRjdDN0FDNTkKLToxMDdFNTAwMDk3Q0Y3NzFFOTg5MkE1RkJCRDc5OTA0N0ZCMDhEMTc5MDMKLToxMDdFNjAwMDIwMzlCQ0JBOURGNEQwNzk2MDAyRjk4RjM5MEZDQ0NBQTEKLToxMDdFNzAwMEJBODBGM0MwM0IzMzQ1NUNBMTUxOUQxQ0VFNjMxMDI3RDMKLToxMDdFODAwMDI2QkUwRDFFNUEwODY1MTU1QzhGRDAwQzY5RTdCNkFCOEYKLToxMDdFOTAwMDVEMjZGRDZGRTA3Q0RDMkJFQUFEQTRDRkM2QkQwMkI3NEEKLToxMDdFQTAwMEQwN0VBRkQwQ0Y0RjA2OEYwM0Q3MDM0RUU4Nzc3MDdEREIKLToxMDdFQjAwMEEwQjVENzFBMEM0QTMxRjUyODQ3MkQ1QzhGMzIwODlFQTEKLToxMDdFQzAwMDIwRDdBRjA0RUM2QTgwRjVFNTc4QUUzRjY5M0JBQTlGMDYKLToxMDdFRDAwMEY3RUFGNTBDRTU4MjY0RkY3NDNEODRCOUZFNjFBQUFCNTQKLToxMDdFRTAwMDUyNUU1MEMxRTczMzIwNTUwRUFEN0Y5ODJBREYyNDkzQjAKLToxMDdFRjAwMDVFODE0MzgyOUY2N0VCMjBFNDUyOTlGNjc1M0EwQzQwMEQKLToxMDdGMDAwMDIxREFBNDU3NjJGODhERkY0RENFMENDODVDRkU3NDJDQUMKLToxMDdGMTAwMEZFRkE1NDEzMkVDQ0ZDRkY0RTk2NkU4Rjc1RkU5RkIzNjcKLToxMDdGMjAwMDhFRTQyMzkxNTc5QjAwRTNCOThFQzQ2QUFFMjM3OUMzRDQKLToxMDdGMzAwMEMyMDU5QkQxM0E5MkYyMjBDOURCQTQxNjkxMzczRTVGNkQKLToxMDdGNDAwMDFEOEZCOTRFQzc1Qzg3OTNFQjhCQTc1MzdFRkQyNTcxQzAKLToxMDdGNTAwMEY3MkY2QTJFOEJFQjVGN0NGN0Q0QjhGMTQ1Njg1MDYzM0UKLToxMDdGNjAwMEZCMjUwRkNDODkxQjNGQTJGRERBQjhGRUE4MEQzN0M2NTIKLToxMDdGNzAwMDhEMUYxMzVDMTg3NzdGRUMxMzRCMTNENkJEMTgzODE5N0YKLToxMDdGODAwMDE3NUExRTc3N0Y3REYyNTNFRjEzQkVEQTcyNjU5NUZDQTgKLToxMDdGOTAwMEY5NEJCQkVGMzFENUM1NEM2NzVDNEMzNUYyRjAzQUZGN0QKLToxMDdGQTAwMDhEQkEzQTJBMDMyMzNBNEY0NEZFM0Y1NjQ0N0VEM0JENEUKLToxMDdGQjAwMDU1OTIzNjE0MDc5RTcwODBFREY4M0Y4QjgzODc0QzM4QkUKLToxMDdGQzAwMDMwRTRGRjdDRjk5Qjc1QkFERjIzMjcxNTRBRTRFNzc4OTQKLToxMDdGRDAwMEQxQUY0QTlBNDY3NUM0RTJEQzFFREUxMkY1MkE5RjI3MEQKLToxMDdGRTAwMEZEODNGRDIyNEQ3Mjc5RTAzMjdBQUIyQTkxMUY3NDU3REUKLToxMDdGRjAwMDk1QzY3RUQwNURDMzBBRjc1MkZFQTBGRkZCMkU4Rjk0N0MKLToxMDgwMDAwMDM3QjQyRUQ0NUMwNzlBRUVGMDRFMDEyRUExMTU3NTkwNzAKLToxMDgwMTAwMDZEQThFOEI5NUU3N0E2ODNGRDhDODcyQzk2NUI2QTYzQjIKLToxMDgwMjAwMEQ2REY5MTI1RjQ0RjQ3OTZCMDVCM0ZCMzg1QjY5MzFFREMKLToxMDgwMzAwMDUwMUNBMEI2RTQ4QUU3QTlGODAxQThCMjA3RjlFMkNBODEKLToxMDgwNDAwMDAwNTExRjA2NDdEN0NDOUE0RUY2QjM3RkI0OTY0NkY1M0IKLToxMDgwNTAwMEIzRDhCRjA4MkYyQjQxQjYyNzM3QjYyQTFDRTdBRDRBNDUKLToxMDgwNjAwMDdFOEFFRDQ5OTkyMkVDQzkwNDU5RDgwREI0MjNCRkNEQkQKLToxMDgwNzAwMDlBNDg3NkVENUVBQkYwQjMwMjU2RTI0RkJFMDMwMkFFMTUKLToxMDgwODAwMDMyQjZBRjdDNEU5QzA2OTlEMkYyNTJBQTRGM0Q2QkI3RTYKLToxMDgwOTAwMEI0QUYxMTRDRkI5NzRFQjMxMDlEMDYxN0M5N0MxRUZDNjQKLToxMDgwQTAwMDEyMkQwOUQ3M0I1ODNGODZFQjlDMDdDRkQ2RkY2OUE5MTUKLToxMDgwQjAwMDE0NUYwRjJFN0FFNEU0OUQxNTUxQjkzQzZBNEIxQ0U3MUUKLToxMDgwQzAwMDlEMkZFRjU2QkZFOTkxMTQzQTQ3MzkzQTFBRTJFQTMzNDUKLToxMDgwRDAwMDhFNjUwOUJGRjE1ODk2MkNFQTEzODIxRkI4ODk0QzAzQUMKLToxMDgwRTAwMDhCRkY2QjI0MkREQTJGRjVBRDc2RTI5MEZCMzc3Q0JGNEEKLToxMDgwRjAwMDk2Rjg2MkVCOUExQkEwQkNBNjkxQzczRjFCMDdGNkNDNzMKLToxMDgxMDAwMEUwRkE2RDIzNUVCQUUxNzU5MUQ3QkJFMUJGRTJGM0Q2MjkKLToxMDgxMTAwMDI3QjNBQzdDRkYyNEJEOEZGQzlBNUVERjQ0RTJEQjM1RTUKLToxMDgxMjAwMDI0MTA5QzU3RjY0RDI0RkZBMDU2MDU4REVDRkU3Q0RGRjUKLToxMDgxMzAwMDgyM0IwRjYxN0ZFRTgzMTJGQkZCNzQ5RkM2NUY1QjgwMDcKLToxMDgxNDAwMEY2MDZFRkJGMEM5RTU3NzdFMUZBRkU5RTI1RDYzMzBGNTkKLToxMDgxNTAwMDZBQURCNENFRDc2RTZFNEMyMTNDQkQ5RTI2QzY0NzI0NzgKLToxMDgxNjAwMEQwMzZDN0NDNzc4RDNFREZFQjM3MkZEQjQ1NzEzQUJEN0MKLToxMDgxNzAwMDhGREU0RkVCQTFGN0NGNTVBMTk4RkFBRjgxRUZFNEFCQkIKLToxMDgxODAwMDQ1NDNERjdCMUQ3OEFEN0FCRDk3OTVFQzY0MDkwNDNCRDAKLToxMDgxOTAwMDlGMjZCRDdBRDBFMjU5MDNEQzg2MzNEODJFRDlEOTJFNUEKLToxMDgxQTAwMDBEQjQ0NDlFNUE4MUVCN0M2N0U5REY3NjQ5NDhEN0I3MjYKLToxMDgxQjAwMDE3NDQ3RUY1MzQ1RUZGOTcwRDMyNjg4ODhCNEZEMzdENzAKLToxMDgxQzAwMDU2Nzc1Njk0NEU0NzE3N0Q5QTQyRjQ0NDdGNjVFQjRGOUQKLToxMDgxRDAwMDQ5RUVCNkQ5M0Q1NEQ3RjFFNkQyNkQyMzYzRkRGQTU0OEEKLToxMDgxRTAwMEY3OEM2MTZFRjJBQjJBMkZFQzNDQURFQUM5Mjk4Q0JGNEIKLToxMDgxRjAwMEU1NUIwNUZFOTZGRjdBNTQzNkUxNkM3OUNBNTlEQzg5NTUKLToxMDgyMDAwMEZFRDYxMjNFMjc5RDI0NDFDMkY4NzhDRjRBRjFEREMyNDYKLToxMDgyMTAwMDBFQzQ5OTg2MzhEQkYzODVBODJCREY3OTI4QkQ5Q0Q2NjAKLToxMDgyMjAwMEE3ODBFRkUyRDhGREVDN0NFOUM2QjE1Q0NGRkI0NkU2NjcKLToxMDgyMzAwMDA1QUQ5MzY0MzY4MEZBRjcwNjU2OTUwMDJGRUE3MjMyNDAKLToxMDgyNDAwMEJGMjdBMzVDRjcyN0M3RDJGQzM3RkVFRUQ3MjdGRjkzRTMKLToxMDgyNTAwMEU4QjI3QkRCRDYxRkIyOEM1QzE4MUQ4NkQ2RDFBQURCQjgKLToxMDgyNjAwMDU4M0YxOTcxMThENUJENTI5Q0I2REZDMjc2RjIwQUY5OTMKLToxMDgyNzAwMDVFOEVDM0E4NEU4M0UzQUU2MTg1M0MxRTE1OEU2QTE1RTMKLToxMDgyODAwMEZBNEQ3QzI3ODE3RTcwQUI4N0VCM0Q1OTVFRUY1Njg1QkEKLToxMDgyOTAwMERGNjJDNDQ5QjJDNTkzQTM4ODhGMEM1RTk4QzZGMzE3RkEKLToxMDgyQTAwMDAzRTVDNzVDMTQ1ODE5RkEwQUZEMDg5NzZDRDFGNTE1NTcKLToxMDgyQjAwMDc4MUQxODlGOEVENUY1NTlCNTdCQzI1NTZERTJCQzI2NDkKLToxMDgyQzAwMENFRkZDNDdFNTU0NzAyQkZCMzE2RkZCMURGQjlEMUQ3ODkKLToxMDgyRDAwMDlBQzQ3NjY5QTM1QzRBN0U4N0Q3MTEyNjNCNkVGNjNCMkIKLToxMDgyRTAwMEE3QzE4MzlDMDcxOEUyN0YzRUY3RDcwQkYyM0ZGRkQ1NkIKLToxMDgyRjAwMDFERUY3RjVFQThEREE5Nzc2QkUyQkM3N0I0RDA3M0ExRDgKLToxMDgzMDAwMEYwMzA4RTczRjBBRjlDRTQ2QjY0QjZCMDRCN0QxNDYzQjkKLToxMDgzMTAwMDUxOUQ5Rjc0NkFCNDAzRTVCM0MxNURCRUY2MDE5NDQ5RjMKLToxMDgzMjAwMEM3NzA0MTFGRUFCN0UyRkY5NzY4OUZFRUZGOUFGQ0MwNTMKLToxMDgzMzAwMDNFODVGOTM3RjhEQzI1REZGODFENDkwNUNBMjExOUZCMTAKLToxMDgzNDAwMEYwODFBOTVDRUYzQ0QwMkJFNEEzMzM1REZCRDMzNDhBRUUKLToxMDgzNTAwMDMzRDBDRkRDOEM0QjRDNTJGQTZENjkwOUY2RjMzNEU5MUIKLToxMDgzNjAwMDVGOTIwN0I3QjA0NzhFNkU3MTJFRUFEMEJDNDBGQTI1RjcKLToxMDgzNzAwMDQ5NTUyNzUwNjA2RThDQUY3MzBCRkJENTc4RTBDRDQyMkEKLToxMDgzODAwMDFCRjJFN0E0RTU5MDhCQ0U1NzFBNzZFRDcwRTE3NkUxMEIKLToxMDgzOTAwMEJFMENERkZEODRFRjY1NDc4RjRDNTJCOUNFNkQ1MzIxODMKLToxMDgzQTAwMEM1REZBMUYwOTE5OUVDOUY1NTIzNjkyNzlDN0IzRkZFODcKLToxMDgzQjAwMDBERTVGNDExMDIzNDZEQzhFMDc2MENFNTU1RjA5MjNGRkUKLToxMDgzQzAwMDJDRjY3OUFBQkIzNTNENTE3RUMwRkZGQkI3RjZEMTdFQjYKLToxMDgzRDAwMEI3QkQ5OEM0N0VDQkI2QUMzRTk2ODNDMDVDODBBRDQ4M0EKLToxMDgzRTAwMEVGMjdCRjE4Q0JGMzIxMjc3ODFEOTdENDZBMTJEOUZCNEEKLToxMDgzRjAwMDVGRUFGQkQ5QTZDNzk3QTdCRTkwNzk5QzMxRUZCOEVFOEMKLToxMDg0MDAwMDE5QjI4QUI4MkEwREI3RUZFMzNBQUUxRUJCNDZGQzRENEYKLToxMDg0MTAwMERBMDI4MjNFM0Q0OTVDMTdFNkRGNzNBNTg4M0JEM0M0OTAKLToxMDg0MjAwMDc5NzRFN0IwQzhEQkY0OUVDODZFQkI0Njc1QUE0OTZBOEEKLToxMDg0MzAwMDNCQTRFM0ZDOUQzNjYxNjdDNzIwRjA3NzM4QTNENzhENTYKLToxMDg0NDAwMEY3MjVGNUFDRTc4RjIwMTAxNzVDOEY5N0E0QjRDM0I3NUUKLToxMDg0NTAwMDlDQjFGNDRGRTFGNTg2REQwMjU3OURDM0MyMTYyN0Q5QzIKLToxMDg0NjAwMDA5OEM5NTM2RjNCQUEyRUIwNDdFQUZCMUNFMzFFQzE3OEUKLToxMDg0NzAwMDc3REEyMjdGQTE3QzNCQUU0QjI1NUM4QzAxQjE0RUU4QzQKLToxMDg0ODAwMDE5QTU5MUJGOTJBNDhBNzNGNTI0NTVGMzA0QTRBMUVCMTYKLToxMDg0OTAwMEYyOEY4NzIwM0EwN0YwRDAyQTM4MkJFNzVDNDczODJDMzgKLToxMDg0QTAwMERBNzdBMDJDNzQxNkVCN0U0QzYwRjFEQTU5MDUzMTdEMzkKLToxMDg0QjAwMDUyNjQ5NUQxRTc1Rjc1RDdBRjZEMkJBMDdEMDkzQkE4QkUKLToxMDg0QzAwMDI4MjEzRTFGNzdDRDA3OTVDRUJGOTMxNDJGQzc0OTQ5NkEKLToxMDg0RDAwMEYzNDA2QjQxN0UyNTNCQkM3Q0RGOEQ3M0I0NENFMTdFNjkKLToxMDg0RTAwMDk4RDZBRkQyN0RDQUNCQTRBQUM5NzM3MEREQTk1RkE2MDYKLToxMDg0RjAwMEYyNzM0RDdENTZBRTNCNkZGOEM3NzVBOUE1QjhCRjEzOTMKLToxMDg1MDAwMDk2N0QyQjNBQjBGRDc4NDE2ODI0OUREMzU2QTZGQURFQkQKLToxMDg1MTAwMDIxQkMzRTczNkNFMURBNzEzOEZFQUY5RDU2NEYwREU5MTgKLToxMDg1MjAwMEE1RkVDMDhGRTlEQzdFRTk5MzU2OERFQ0UyRkQ2RjBDNzEKLToxMDg1MzAwMDg2QkYyNkZFM0UyQkIxNUUxQ0IwOEFGQkQ4RDc1QUYwMTAKLToxMDg1NDAwMDdFNTNDRjg3MzYzQUQ3QkFCMkZCNUQxQkU1QkZFRkM5ODIKLToxMDg1NTAwMEY2MUQyN0ZCNTZEOURENTI0NTc0OUIwMkVEQUQ5NEU3MUQKLToxMDg1NjAwMDQ0N0RDOEY1MTJBMTFDQTEyRjA2NUYxOUI5QjkyNTg2NTMKLToxMDg1NzAwMENFQUU2Q0ZEREMyQkUyQkI5OEU0QTY0Nzk3Q0YzREU0ODIKLToxMDg1ODAwMDFGNjFCQjRCRjdEMzc2RURGRDk3MTIyREU2RkMzNDAwNEYKLToxMDg1OTAwMEZCMzgxRkI4MEE5RUUzQkE0RUUzRkE0MDUwQTkyNjFDRTYKLToxMDg1QTAwMDhEN0RDRDcxOEIzNzA2Njc4RTZDNURERUY1RjdGRDNDRkEKLToxMDg1QjAwMERCRjcwRjk2REJCREVGRDk1Q0I4N0ZGRjlGNDM4NTY0ODcKLToxMDg1QzAwMEFGNDJFOENGN0Q1MzFEQTlERjI0MkY2N0VCOEU4RTAzQ0EKLToxMDg1RDAwMEVCOTE2REFGNzVCM0ZGQkRFRDFFMzU4REU0MUVENzBGNkEKLToxMDg1RTAwMEE5RDhERjg1RkUwNUM5RDFBRTIyMjE3NzJEQUY5RTE5MEUKLToxMDg1RjAwMDRGRjlFMjMzQkI5NzVENENGNDhBQjhBRDA2QkU2NzBFMDcKLToxMDg2MDAwMDIzMzlEQTBFQUNDNzBDMzkyQzI1MzlDNEE1OTdBQTIyMTgKLToxMDg2MTAwMERGNTM0QUY4MjZCOUIzRjVDRDYxQjlEQjY1MDE5MjNCNkEKLToxMDg2MjAwMEM0MzdFMzFERjFBRDkyMUY1MkFBMjJERUY5Rjk1MTJDOTUKLToxMDg2MzAwMEM3OUQ3RDQ3MkVFMTdBNzYyNEVGODgwOUQ0QjczMEJFRjYKLToxMDg2NDAwMDNBQzM3MzgyMTIzRTVGNjEwREVGQTNFNzJCRjBGRDJENUQKLToxMDg2NTAwMDVBNTQyRTJCQTRGOEJBOUUzQUI3QTg5MzM1RjRFM0VERkEKLToxMDg2NjAwMDZFQTFFRjQzQTNCNTU0MEY4RTRGOTZFNTM4RkNDN0Q4RTMKLToxMDg2NzAwMDQ5RDFEN0VERTgwRkQ2RkY3NEVEM0E5NDg3MTI2RkI5NjAKLToxMDg2ODAwMDY1MTJGOTNCMkZDQTZDMDdGNkU4N0VGMkYyM0Y0Q0JENEIKLToxMDg2OTAwMEE2NDM1QzY3RkIxOUQ2NzFCMTRGRjc5QjlGNUI5OUMzRUIKLToxMDg2QTAwMDdEQjIwQjFBRjI2NTIyQjZERTcyQUFGNzZFQUVBMjU0NDQKLToxMDg2QjAwMDVDNjU3NUZCN0U2QUE3RDY4NkFBRThCODcwRkFGQ0JFMzAKLToxMDg2QzAwMEZERTIxQjM3RUY1OEMyNUJEN0JFNkY4RkU1M0FFOUEzRDcKLToxMDg2RDAwMDc2QTBFRjM4QkJGRTFFNzlGQjQ5RENGRjhBM0Q0ODZGNzAKLToxMDg2RTAwMDQ4RTg5NzMwREVEMDYyMzNGRUNFODU5MzAxQTlGRkVBRDkKLToxMDg2RjAwMDY5QTg5N0FGNTlGRkY4NTUwQTFBRjQyNjAyMDJFRUJGOEYKLToxMDg3MDAwMDY2RkRENkI1RThCQUMwQUJEOURFNkJCMjkxREY1RkU1RTYKLToxMDg3MTAwMEY4QUVDOTQ2QkEwRDFDRkVCQjlCRUNDOUFFNTdERTczNjIKLToxMDg3MjAwMDkxMURFRUIyNzlDNzEyQUVCQThBMzE4RTQ4ODBDN0U5ODAKLToxMDg3MzAwMEQ5QTI2RUE3RTIxQ0Y1MjZDQkIzQzVGOUQ2QzgwMEFDMEEKLToxMDg3NDAwMDI1QkMzNDc1Qzk2QTkwRUNCNEI3RUY2QUIyMUI3RjQxOUYKLToxMDg3NTAwMDUyNTI1RUJCNkU0NkMwNDVGMTUyRkRBRUZENUNBNzZGNDYKLToxMDg3NjAwMEM0RDM4QjQxRkY5MzZGOUE0REY0M0Y5RDIzRTJFM0JBNEMKLToxMDg3NzAwMDc1RDZCOEY4NzYxNDg0NkQ3NDhFRUNGNzM5OUJDM0M4M0YKLToxMDg3ODAwMDkyN0E5M0RGNzE1QkY3MjZGRTZFNjRFOTk2RjhFNzFBM0EKLToxMDg3OTAwMEM4NEY0MTA4MzU5QzI3M0U1RTlFQURGQjI5MjU1MDQyQkYKLToxMDg3QTAwMDdFMEFFMjg2RjMyNDkxNTc2NUNGNjZFMEZBQUE1RUFBQjQKLToxMDg3QjAwMEFGREE2NjExNzQ0QTc2NDA1QjZBN0FENDVGMTk5M0VCM0MKLToxMDg3QzAwMDVENDI3MkJFNDRDNzY3QTc1RUFGMTRFOTk0Rjg3QjhBMjYKLToxMDg3RDAwMDMxNEY4ODc4NzlFQTcxNkQxMzdGMjcxNUYwNzI5RDVFQUQKLToxMDg3RTAwMDNEMkQwMEQ3M0Q1NTA5RjBGRUE3RTY5NDQwMDBGNzVGMDgKLToxMDg3RjAwMDg5RUE5OUU0QTVBRTQ3MEEzMjNERjVFRjVFMTRGQzI3RkQKLToxMDg4MDAwMEYyNDUxQjY1RkVDRTZGQTMwNDE5NDUzNDZGODRFOUIzQUUKLToxMDg4MTAwMDU0Q0YxRjJFN0IyMkZFRkNBMjYxQzNFMTAzRTQyQTM1NjQKLToxMDg4MjAwMDg2NENFNzQxM0E3RENDRTczQjNCRTg3RjEyOUNFRkFDQkUKLToxMDg4MzAwMENGRDZGMzA4ODU1MDE4Rjc1RDVFRUY4NTdEOTdGN0IxQzkKLToxMDg4NDAwMEZFQkRFQTExN0Q3RTYzREMyRTVENkYzNkU5RkI2RTA4QUUKLToxMDg4NTAwMENBNjJERkM4MEFBQThGQkU1NTg3ODkxRjNDNENBNzQ2NEIKLToxMDg4NjAwMEM0MDlFMTAwMUUxNEZDMzZFQTE5OTc0MkFEOERFQUM4MkUKLToxMDg4NzAwMDFBQkI1QTBFRDBGOTVCOURFRUQ3OUFGMTg0MDQ2NTdBNDMKLToxMDg4ODAwMDJERDFFQjg2RUEzN0M2REY1RkFBRDM2NUE5ODkyRTREQzUKLToxMDg4OTAwMDNFQzlCNDNFRTE3NzVGRThGQTUwNzM1RDRGMzg1OERBNkQKLToxMDg4QTAwMDYxRTU3QUVFRDM3MDEzRDc1RjM1NzY2REUyRjVENEU5RTIKLToxMDg4QjAwMEZDMUJCQURFMDBFRjY3MDlFRTg3RTRFOTQyRDc2QkU2RkUKLToxMDg4QzAwMERGOUYwQzlDNUYwMjk3QzRGMUFGM0FFMzgyRjg1NzAyMzYKLToxMDg4RDAwMEVBMzJEQURGNjBBRjg4NkIwNzdCOEIzOTJGNjFFMEM1NDYKLToxMDg4RTAwMEZDRkM2Q0REOEZCRTcyODNGMDM3NEY3NjU3MjU5MzNGQ0IKLToxMDg4RjAwMDMwNzA0OEYxNDg4OEZCRjIxNzNGNzNEMUY3Mzc2NUJCRkEKLToxMDg5MDAwMDY1QTA3M0QyODE5RUYyQjUwMUQ0OTczQjdCODc1RkE3QTgKLToxMDg5MTAwMEExMUQyODdCNTE2MUJCNTFGRTYyNTkzMEE5ODhGQTY1QkYKLToxMDg5MjAwMEM5MjU1QzY3QTI2NTUwMUM4MEYzQjAxRDFFMzgzNEZDNUQKLToxMDg5MzAwMEU1NTJGNkQzNjc1NTUwODhEQTcyQTgyQzk5RkM4NTlEQ0MKLToxMDg5NDAwMDIwRjIxQkQyOEIxNTE5RkQzMTc2RTVDMzZDOTFERjU4RUYKLToxMDg5NTAwMDlERjNGRTQzQTRBN0FFREM2RUU1N0NGMDk1RDZDODRCMzQKLToxMDg5NjAwMDE0ODdFREVDNTUzQzJERDg2Rjc4NzFFMUFBMjRFMkY3MUQKLToxMDg5NzAwMEFGMjUwRkI5REQwN0ZBOTY2N0QyNzk0RDYzOEY1NUI1RUMKLToxMDg5ODAwMEYzN0FFRkRDNDdGNzAzMUQ5MjY3MDQ4RUY3RUZCRTYyQzAKLToxMDg5OTAwMDZDMjdFNTg5MzY5NTdCODhCQ0M2RkJDQUQyQjQ0N0E4NEMKLToxMDg5QTAwMERFMTU3MjkzMzk2RUJGRjIyMjJCREJENzEzNzlDOUZGMjQKLToxMDg5QjAwMDUxODNGQjVBRUFERDM0OUJGNEYwODlERkVFRTRCQThBOTYKLToxMDg5QzAwMDgxNEUwOTcyMjRDQTIzRUY3RjhBRUE3RDRFM0M3REQ4MEUKLToxMDg5RDAwMDQ2RTdDMTU1NUQ4N0I5NkVFMzVDRjZFMDY0MTA3MUM3ODgKLToxMDg5RTAwMDcxN0JCQjhERTI5QkM2NEQ0NkJGOUZCRjQ3QTlENUZEOUUKLToxMDg5RjAwMEE4QTYyREVGNzI3RjI5QzUwMTg0Qzc4RDcyNTBDM0ZGRDEKLToxMDhBMDAwMEREQkZGQjE5M0UxRjZFRUExMDc1MUY2N0VGNkY5MUY4MEYKLToxMDhBMTAwMEJFODFGNzg1QkFERTVBMDYxQUUzN0Q5OTgxNzdCRDNFOUQKLToxMDhBMjAwMENBQzBGQjY5QThFMTNBQUQ2NTFEMEYzM0JFMTdFQkY4NkMKLToxMDhBMzAwMDM2RDc0RDAxMzREQjRBMzM4NUJDNTJCRUNERkNGRERGNTkKLToxMDhBNDAwMDZEM0FCRTZGM0IwRkJFQzdFNkU4RjgxRTAzNjMwOERGNTIKLToxMDhBNTAwMDY3NjY4ODdBQkEzMzg3ODcyNUQzRkM2NzBFNzJGNkY1ODYKLToxMDhBNjAwMDlCNzBDRTc2Rjc5MEVFMTcwQzg2MkQ1RURCQTVEMTcxNEMKLToxMDhBNzAwMEE3QkEzRkU1RUYxMEZEODcwNjZENTQ3NzMyQkJFNzEzQzkKLToxMDhBODAwMEU2NDc0RENGREU1OTQ0RUZFRjgwQUY4MUU4Rjc5RDlFN0EKLToxMDhBOTAwMDY0OTVGQ0UwOUE3RUExQ0ZFNkY0RDhGOTdDRTIzQjEwMjUKLToxMDhBQTAwMDZBMjMzRTBGRUM3OUJDMkQ5RDcwRjMyQjgxMUI0M0NGQzUKLToxMDhBQjAwMDJERDFFOTdBNTVFOUY3Njc1M0ZDQkU1NEI3ODc4M0JEREEKLToxMDhBQzAwMEI3Q0Y2NkJEMzMwMThBQzhERjlCQTM3RkU3M0QyN0E0RUMKLToxMDhBRDAwMEVCQTE4REYxNzRBNzczNkFFMjVCNTM4RjlERUI0REFFRjIKLToxMDhBRTAwMDgyN0UxQkQ5QjNBQjc0RkI2OUI2OTMwM0I5QzlDQ0U3REIKLToxMDhBRjAwMDAwREFBQjExMzhCRUExQzM1NDQ3QTlGNEYzN0EwNkJCMjAKLToxMDhCMDAwMDZEN0NERUQ1NjRCMkJGOTdFNTA4QkZGMjdDRjFCRDk5RkMKLToxMDhCMTAwMDVGMEI3Mjc0N0JBMkYzQUIyNjIyRUExOEU2QkMyMjdCQzEKLToxMDhCMjAwMEU4RkNBMTM3QkNBQTk0RkMwNTgzNkU2NjdFRjU2QTI1MzUKLToxMDhCMzAwMEE5REZGNDdCMDkyRkU5N0VCRUQxQkY0NkZGRkUyREE0M0QKLToxMDhCNDAwMEI2M0I2M0UzRjY4MzM5MTZGRDlDMzNGOEQzNzJEQ0U3NUEKLToxMDhCNTAwMDFEMTJGNDExMEUzMUJFQjlBNjRDNEExOERGREM5MzgzMDYKLToxMDhCNjAwMEZBRTM4RjA1QjczRTM4MjEzNkJFRjE2RTFBNDlGRURFQjQKLToxMDhCNzAwMEZEQTg1N0NBMkJCODdFQTc4RkNGMEI5NUY2MUEzQTA3RDgKLToxMDhCODAwMEYzNzc1ODNEMTREN0Y4QkI2NUY2MDdGQzFERjZBMDA1MzIKLToxMDhCOTAwMEU3QkQ5MjcwODRFQkFBRUQ5MUFFMjAxQzYxRENCMDlBMjcKLToxMDhCQTAwMEU2OUY0QjI5NjUxQzM3QjcxQkZEMTE3QzZFRUVBQzRGNjEKLToxMDhCQjAwMDE4N0YwNzg3OEI3RDBGMkE1QTc2QTIzOEMyODgxRjlBQTIKLToxMDhCQzAwMEJFMTBGRUFBNzFCRDA5RjUwMDhENkZEMkJGNEJFQkRBNjYKLToxMDhCRDAwMEY3QjdDMkEyMTQzQUI3RkRCQzcwMDFCNjRGRTcwODNCMjUKLToxMDhCRTAwMDZDRjhBQjExRjQ1NzhCNzU3Rjg1RUEyRUVBMDRFQkEwODUKLToxMDhCRjAwMEVFQjk3QjZDQTRCRjBFRDAwRjVCNTBGREE0RUE1QjREQjkKLToxMDhDMDAwMEYxQjBFQTgzRTYxRjkxQTMyMUI1QjExQzM1OTE0QzExNTcKLToxMDhDMTAwMDBFNzc0OTIyN0ZGM0FDOTU2QTQzQTBFNUM4MzBBRTBCQ0UKLToxMDhDMjAwMDNDRjU5QTM4ODczMkNCRkJBOTg1N0RBQzJGQ0UyQzcwRDIKLToxMDhDMzAwMDM2MTNERTk2OTU2RTVBOUQ0RUYyQkRFNzc1RDYzNzYzQjQKLToxMDhDNDAwMDdGNkI1MzJENkE3NDVGMkRGNEREMURDNzY5NkQ3MUZFNTYKLToxMDhDNTAwMEYyQTlFRTU2MUJFN0ExNjNCRjFCMkUxRUVBMUYzNTlFMkQKLToxMDhDNjAwMDI3OEY3NUQwQTQ1NzcwRkRFQ0VGMEUxQzk0NTVDQTBCREUKLToxMDhDNzAwMDIxMUQ3RjkxMTc0QjJGREQxRkVBREE5N0M0RjY2QkUwQjkKLToxMDhDODAwMEIwMzM0ODdFRkY1Rjc1M0M5RUQwRjNGMjJEOTUzMkQzMTIKLToxMDhDOTAwMEMzMzI0NUI0NjNGNzNDNTM0Q0ZDMjU3RUY4NTBERjZGN0MKLToxMDhDQTAwMERCRjNDQzI1NUVDRUEzMDc0NTFERjExM0YxNzVEODhERkUKLToxMDhDQjAwMEExRjgzQTZCODNBRTdFOURBRUI4QUU5MUY0QkRCMkIxNzEKLToxMDhDQzAwMEFFNUQ0QUJGQ0I5MzQwOEUyNDY5MUZGM0NCMjJDNUM3NEMKLToxMDhDRDAwMEI5RkU2N0U1REFEODNBNTJEQ0NGMkRBNEY3RkVEMzkwN0YKLToxMDhDRTAwMDE3MjVFMjI2M0JGQzRFOEVDNkVCNkJFOTExRkNCNUVDN0EKLToxMDhDRjAwMDE2MkRCRUZGN0E5MUFGQjFGMkZCODdEQzlGMTk2OEEwRjkKLToxMDhEMDAwMEZCNjc4QTkyQjlCRTAxQkUwOEQ0NTA3RjQ1QjFGOEZEMTkKLToxMDhEMTAwMDgwMTU0Nzk2OEU4QUNERDM4MTI0RTI3MUJGMzVDMkY1ODYKLToxMDhEMjAwMDdFRkVDMzE2NUU5RkZGRjBBMDdCQjg5M0Y0RTJBNjU5QzcKLToxMDhEMzAwMDU0NDc3Qjk1QUUyRjBFMTQyN0Q3MTNDRTAzRjRERUVDRTkKLToxMDhENDAwMEU4M0M0QjcyQzQ3OTAzRDA3RTczQTJERjU3MUFGQjVERjcKLToxMDhENTAwMDA1RDczMjFENTZFOUI4N0E0QjhGNzMzMDhFRkEyMjI3MjkKLToxMDhENjAwMDQxMUM3NTJFRkZGN0VDQkE3NUZGRTlDQzBDRURFNUVGNzEKLToxMDhENzAwMDIxMEVDQTBFMkEwMThBRDc3N0JFOTExNDI0RkJERkIyRDYKLToxMDhEODAwMDdCQzkzQjE0MEZGQkRGQjQwM0Y5MjEyQkY2MkMxOUM1NkIKLToxMDhEOTAwMDc1RjgzRURGQTVBNDRGQ0VFQ0I5RUQ1MkFFNjM5NEM0OTYKLToxMDhEQTAwMEY3QTUwMTVBNUYwRUY5NTNBRkJBQzk0RjZBRENGRDJBMjUKLToxMDhEQjAwMEQ3MzkzNkVFOUFGODA4Rjk0RkU4MkY1RDQ1RDdEMThGQUQKLToxMDhEQzAwMDYxRkM5NUJENThDMUY4REI3OUE4MjJBMzg0MTYwRTlFREMKLToxMDhERDAwMDY0OUFCN0YxQTBDMjc1OEY4RDA3MkI1RUE4MjFCRkU2RkMKLToxMDhERTAwMEM1OTlFQzNGMTlGRTUyMzlDNUUzRTQzRjFEMUMxRUU3NEYKLToxMDhERjAwMDNGQTVFNjBBRkEwREVDNERFMkZDODcwNEM1MDIzRjMwQzAKLToxMDhFMDAwMDNDMEUzRjBENUQ3RjYwM0ZBMzAxRjU1RDJDOEU4Q0U3MkUKLToxMDhFMTAwMDRBNzIxNTlFNjc1NEFFOEU5RjkwRTQ2NTdDNkMxNzZEMDgKLToxMDhFMjAwMDQzRjc0RURFREYzMjZCODhGOURERDI2MTE1RjczQjQ1NDMKLToxMDhFMzAwMDZCRDQ0OTA3MjAzRDQwRjQ3ODgxMkUyMTFGRTZEODgyNkIKLToxMDhFNDAwMDA1MTQ2RjNFNUYxNEZGRkI0NDQ2REI5MTJCRjIwOUNGMDQKLToxMDhFNTAwMDFGMTVERjE5M0YzRkMzMzcyQUQxRjdDNjAxOTgyOUUyMTIKLToxMDhFNjAwMDcwNDlBNzc3OTdCNTNBRDFGN0JDNEZFQUYzQjkzMjIwRUEKLToxMDhFNzAwMEVFNUNEMjY4N0Y5MjJCRjRFQTFDOUJDODUzOTlFRjJGQ0IKLToxMDhFODAwMENDMzVFQzBGQUNBNUYzOTg5NzZCQUNBQUYxRkIyREI5RTAKLToxMDhFOTAwMEE4NzdBRjA2RTNDRkYzRUFCQzRDM0FFNzEyNzEzNTQwNEUKLToxMDhFQTAwMEZGMkNEMjg3REZBNTNDM0ZGOTVGOTVDMkFFMUI3OUZFNTAKLToxMDhFQjAwMEI5MUJFMTNFOTFFN0JGQzk0QTdBQzFBODJGOTlFQjM1QUEKLToxMDhFQzAwMEZCNUZCNTU3RDAzQ0Q3QTI3REE3NzlBRUFCOEVCRkZGNzUKLToxMDhFRDAwMERERjNGODVEMzdFNkVBNzY3QzI0OEMxNDcxODUzMzk5RUUKLToxMDhFRTAwMEVDQzFFOTVFQUIyQUYzM0U4MkMzMTM3RDVGNjhFODlGNjUKLToxMDhFRjAwMDAzMkJDNUY5NTEyRkVBNDU2QTVCQzZCQ0NFNzlBQkU3QjcKLToxMDhGMDAwMEY3MUU3RDJBOERGNTZBMTIxNDIzODkyRkZGRjIxRDc3MzMKLToxMDhGMTAwMEEyNzk1QUNFQ0FFQkJDMzhGQzE5RkMzQTQ5NzE0MEU5MzcKLToxMDhGMjAwMDUwN0VEREE5RDNCREQxNzFDMkM2RTc5QkQwRkM4MDQ1ODAKLToxMDhGMzAwMDNFRjc3NzQ5MkQ2MzNFNkYyMzc5M0FBOTdGRjc4MkVCOUQKLToxMDhGNDAwMDJCQjRDN0U4RkQ5M0I5OUZGMEZEMTUzMzIxMTJDMEZCODgKLToxMDhGNTAwMDdCQzdEOEQ5RkUzNUNFOTJGOEZDQTAzMTJDRUM2MUUzNkEKLToxMDhGNjAwMDNDNjEwRjQ3NzZDRDY1QkU1QzhGN0NGMTdBNTg0REJDNzUKLToxMDhGNzAwMDQ2NzVCOTA2QkYyRkZGNzI2MDk2MTE0RkQyMzk0RTBCNUUKLToxMDhGODAwMEUxOUNGNTc0MjZCNzhENURFRkI2RjE3OTI1REE1REYyRDcKLToxMDhGOTAwMDBCQUZBOThDRTdEQjI4RjBERDk3ODVGNzZGQTg5NjNDMkYKLToxMDhGQTAwMDY4NDE4NkYwRkQ4NjlCRTYzMkRGQUZEM0JGOEYzOTFGNjUKLToxMDhGQjAwMERGQjdFN0ZBMzZFNDkyRENGNzBENUUzRjBFNDlGNEZDQ0EKLToxMDhGQzAwMDk4MEYwQkM5QkUzNjlEMDNENzVCMEM1QzBGOEYzQzRERDEKLToxMDhGRDAwMEU3NjU5RUIzRTdFOUZGNzgzQUY2M0M3REI4REJGNzFGMUIKLToxMDhGRTAwMEI5QTQ1NzJENUZCQTJFMDE5QUFGRkYxN0NCMjVFMjEzMTQKLToxMDhGRjAwMEYwRjNFNzkyQUIyNzc1Qjk3QTMyNTcxNUY5REQ0QzcxNkEKLToxMDkwMDAwMDNFMzQ1NkVGM0Y2RjBEMTZGMEY3MTRBNTE3NzYwRUQ4QzUKLToxMDkwMTAwMEYyRUMxRkM3OTM5RTNCQjVGN0UwNzg1QjBDNUY0RjJDREIKLToxMDkwMjAwMDQ3RkQ0MEY2NjZGNzdFRkVGRTMwOEEzQjhCOEUzQjg1MjEKLToxMDkwMzAwMDVCNDlCQTU2QjdBM0YxMzgzQzQxMzgyNEZEQkM3REZGRUIKLToxMDkwNDAwMEQ1MTQzRjlFRUNCQTJFNTNEMjYyRUNFQ0FFOTc1RDIzNjIKLToxMDkwNTAwMDYyRTYzREE5RkYyRTA2QzY2RDIzQkY5QjEyQkJDRUZCNjkKLToxMDkwNjAwMEM0Nzk3OTQ4Q0M4N0YyM0ZGMkJBNzFCMUY3NUI3NTNDQUQKLToxMDkwNzAwMEY3MzM5RUVGMUZERENDRTdGNDA2OUUxNTEwNzgzNjdFQTEKLToxMDkwODAwMDBGRTNFQzc3OTUzNkUwRUYxRTAzN0JFQzVDNUYzMTYwMUQKLToxMDkwOTAwMDhEMTRBNkM1QzhDQkM3M0E5RDMxNEU5MzBCMzI5OTk0MTcKLToxMDkwQTAwMDVDRUYzQTE5RDY1NUYxMzkwMTA2RUY2QkE3RDBFNzc3OTcKLToxMDkwQjAwMDIxNTlENDg3MzY3M0RERTJGNDY2RjAxMDZFMjVEOEM4RTYKLToxMDkwQzAwMEZENDlENUUyQkM3QzJBRjRDOUI0QUVDQjIwQzJBRDE3QjEKLToxMDkwRDAwMDU0ODVEQTk5NTQ2MTg2NkRBNTIzMjQ5MzNBRTlFQ0RBMzQKLToxMDkwRTAwMDk3NENGODBBQkI5NUI0QkYzODQ0RTk2OTIyRkU0NUY3QUUKLToxMDkwRjAwMEFGQzA1RjBDQkNFMjYwNzQ4MjEyN0VBN0VGQ0UxMzc1MjYKLToxMDkxMDAwMDBFOUU2NDIxOEY5MTkzRTI3NzRGQkUwNUZEQkNGRTY5RjAKLToxMDkxMTAwMDRBMUZBRjM3NDVEM0QyRTlCQzY0RkI3M0NCNjVBQTdGNDYKLToxMDkxMjAwMEQ5MDM1QTg0RTRDQzkzRDFDQ0Y5QjdDODBDMDg2RDRFNUUKLToxMDkxMzAwMDhCRUVCNzkyRjZBQjQ2RkI1M0U3ODM4NUY2MkI0MTg3NjAKLToxMDkxNDAwMEQ4N0YzM0E0RDNGOUQ4MTQwOEYzN0IyRUE3MDVFMzdFODgKLToxMDkxNTAwMDY3ODBBNjUwREY5MTU3QTREMzU5QzQ2RjU1N0FGQzY2MzcKLToxMDkxNjAwMDcxMDRCOEVFMjczNTRGRTAzQTU5MDlDQUI5MTU5Q0RBQUYKLToxMDkxNzAwMDBFM0Q0Q0U3MzMyNTYyOUY5M0YxM0E5RkUzMzQ4Qjc1QTQKLToxMDkxODAwMDlGQjVENzc5NDJERjREODUxMEYzMTlFQTQxN0Q4MTdGODQKLToxMDkxOTAwMDVDNjE5NjRBRjQ5MkMyNkUwQkZEOUVEODg1RDI3NUMwNzIKLToxMDkxQTAwMDBEQkM3RUQ3QUQ5MTUzM0ZBQzg4OUU3Qjc5N0FCMkI5MjYKLToxMDkxQjAwMDFFRkE0MUM5MTI5MTY5NUQ4RTAyNTEwRjFEODYxMDdGMDIKLToxMDkxQzAwMDk3MTk4RUZGQkRCMzkyQkM2QjhCRjI2OEJGM0VGMTFENDkKLToxMDkxRDAwMEFFQjlBRUYzODlFMDY2QUVCQjk5MUY0MEYyRDAzQzA1NTQKLToxMDkxRTAwMDAwQzdEREQxM0EwMDZCNzE5MEVGNUJFOTlDNURFNTNBMTkKLToxMDkxRjAwMEQzNzI4QTE3N0Y5RkU1MkJDQUNCRTI3QUQzMTEzQzk5QjEKLToxMDkyMDAwMDEyOUM1ODlCMTJDNTNCQUU4QzdGN0YyNzE5NTJEQTQ5QkUKLToxMDkyMTAwMDFGQjVFQUY1QjQwMUQ1QTVENzMzMTVGMjNFMzRENEYzMjIKLToxMDkyMjAwMEZDMjMxMjhBQThFQkJFQUI0QUQ0OUZERTM1NkMwRkQ3NjUKLToxMDkyMzAwMEY5RjY0QkEwNEFGOTc0RkVCRjg3RUI4MEU5ODdFMUFDRjEKLToxMDkyNDAwMEY5REY3MEZFOUZBOUZGRUU0M0IxRUY4REM5MjVCQTkyRjkKLToxMDkyNTAwMEM3RTc1QThGQTU3MEZEQUIzMkQzQUI1MTFEQUZCOTVFRDYKLToxMDkyNjAwMEJDQTQ2REUyMDNGRDFDOTcxQUVCMzVENTg5MkIxRUJFRkQKLToxMDkyNzAwMDdGOTdBRTVGNUIxREUyNzc4MEE0NTU3NjU1OUE0RURGRUYKLToxMDkyODAwMEJGMkZFN0RGQjE2QTI1RDdBMDgyQkU3QjVGQ0VDRjUzNjkKLToxMDkyOTAwMDFEMzMxNTgxNDY1MjdEREYyNTdBOTk3Rjk3MEFFMTM1ODYKLToxMDkyQTAwMEY4M0NDRDlCM0E5MkYzN0Q4OUY4MzFEREUwODc2NTY4MjMKLToxMDkyQjAwMDlEMTRGMkUxNjZFMkFGNTE3NzZCRDREQjEyMjA2OERGRDgKLToxMDkyQzAwMEM5NUVGMTNCNzgyQUUyODQ3RkY3MEY5NzYyMjc1QzdBQzgKLToxMDkyRDAwMENEQkZFNzIxRUE3RkRCNzRGQUUzQkE5RUUwQkE0Rjg3OUQKLToxMDkyRTAwMEY4NEVEQkY4OUVENzRDMzcwM0JGRkYwRDA0N0MwQkNFNDYKLToxMDkyRjAwMDYwNTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkIKLToxMDkzMDAwMDFGOEIwODAwMDAwMDAwMDAwMDBCOUIyOUMzQzBGMEEzQzYKLToxMDkzMTAwMDFFODE0NUE0NTFGOUU4RjgyQzlBM0MwQjAzMDNDMzRGNzYKLToxMDkzMjAwMDIwOUVDNzgzNUYxRjJFMUNDRDgyNjA3QjhBMzMzMDE4M0UKLToxMDkzMzAwMDg5MzIzMDE4MDNGMTRDMjA5RTA1QzQzRjgwRDg0MDhDMDAKLToxMDkzNDAwMDgxQzExMDg4OEI4MEVDNjIyMEY2MDE2MjA3QTBEQTJGQzEKLToxMDkzNTAwMDFDMEMwQzEzODQxOTE4NjYwM0YxMzI2MTU0NzM5RjMyOEMKLToxMDkzNjAwMDQyNjgyNTJFMDYwNjUzMjBGRUM3ODREREZFQzk2QTBDMUUKLToxMDkzNzAwMDBDREI3NTEwRkMzODVEMDY4NjM1RkFFNEY5NjUxNDBGRDAKLToxMDkzODAwMDNEQkNDRDExOTVCRkM3MEE5NUZGREM4NjgxQzFERTA5QzIKLToxMDkzOTAwMEMxREY2QjQ1OUFGOUQ1NDBCRDM1NEVCOEU1OEZCOUExMEYKLToxMDkzQTAwMEYyRjc3OUEwRjIyREQxRTQxNzg3NDE2ODAwRTY5NTVDQzkKLToxMDkzQjAwMENBQjgwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjgKLToxMDkzQzAwMDFGOEIwODAwMDAwMDAwMDAwMDBCRUQ3RDBEOTgxQzU1NjAKLToxMDkzRDAwMDk1RThBREFFRUFFQUVBRUVFQTlFOUE0OTRGRDI5M0NDMUUKLToxMDkzRTAwMDQwQ0RBNDQzMDY5ODg0Q0FGRjA0MjY1MDMzQzEzMEFDNTQKLToxMDkzRjAwMEE4NEQ5NEVDQTBBODlEMUYzMTJBQ0I2Qjc4MEEwMUMxMUYKLToxMDk0MDAwMEE5RjlFRjk5MjRBNEYzRjM0MkY4OTEzNEQxMkNBMEFFM0EKLToxMDk0MTAwMDBFQzg3MzIzQjJDRjRFODhCQ0UwREJBNzExRDEyRjZBRjAKLToxMDk0MjAwMEYwMUI2MjFFNEZENDVENjdEOTJGNEJCQjA2RjNFRTM5OUMKLToxMDk0MzAwMEY3RDY0QzU3NERGRjREMDJBQkRGN0VBRkYzRTFGNTU0NEQKLToxMDk0NDAwMEREOUY3M0NFM0RGN0RDNzNDRTNENzU0NzI2NEQyNDc2MDgKLToxMDk0NTAwMDBEMjFFN0UwNDdDQjNGNzgwOTIxQ0IyNjRCQUJDM0M4QjIKLToxMDk0NjAwMDkyQTVCNEZDMEEzMUZBRThBM0NCQjU2Qzg3NDBDQjA1RDIKLToxMDk0NzAwMEVBOTg0N0QwMDlCOTIyOTIyNkM0NDM0ODZDRjQzMUUyRjUKLToxMDk0ODAwMEExRjU1MkY1MzIxOTY5MjRDNEFGQUZBRDIyRUE2NEJGMjkKLToxMDk0OTAwMEVFQjJBRjlCOTBFQ0ZDRTJFRkM1MjNDMzUxM0Q0NEZCMjEKLToxMDk0QTAwMDdCNkE3OTk3NDlGQjQ5M0RERERBNjVCNjRDQkVBRjgzRUYKLToxMDk0QjAwMDQxMjk3RTREODQ2MjUzNEJDODQwQzM1RUUyODkxMDMyMUQKLToxMDk0QzAwMDQ0Qzc5RTRGRkY1M0VFNEI5MDM4NkQyNzY3ODc4OUJFODgKLToxMDk0RDAwMDAwRUE1NTYzN0RFNUQ5RTM5RUY1RjRGOTkwOTc3NDhEMjQKLToxMDk0RTAwMEQyNTIzOTY0NjU4MzE0RUY4NUNGNkI4QjQ1NEE4RjVGMDkKLToxMDk0RjAwMDMyM0RCRkE1QjAzRkVBQzk1ODQwNDc3NDE3RjY3Qjg2OTYKLToxMDk1MDAwMEQyMDU0M0JENUJGNDJDMDE3QTI4MUQ2RDE1RDJEMzU2Q0MKLToxMDk1MTAwMDhDOUVFNzJEMEJFOEI5RTI5MEJFMjg5RjFFQTU5RUQxMzgKLToxMDk1MjAwMEEzRDRGN0UyM0M5RDg5NTI3QTFBMkY4NDlFN0I5MDlFQTkKLToxMDk1MzAwMDIxNEVDRjkwOEI5RUY3NzE3QUQ2RDlGNEQ0MEQyMjNENkYKLToxMDk1NDAwMDgzMEQ5NDFFRkFDODc3OUY0NUUyQjRCRTAyRjQ4NEEwNEUKLToxMDk1NTAwMDlFOTM5RTQxQTBBN0E1MDAzRENBOUY4NzlFNEY3Mjc5MEEKLToxMDk1NjAwMDRCMDIzRENCQ0FEMzkzMDQ3QTZBMkJBMDQ3NEQxMzhEOEYKLToxMDk1NzAwMDNFRjcxM0MxMUM2RDk5OEE5NzlGRjM3MUMxQjNFOUE4OTcKLToxMDk1ODAwMDQ1RkIxRDdFNUJDNDc5QTYyQjMyQkE3NkMxNjRCRDMxMjIKLToxMDk1OTAwMDhFRDdGNzFBMDdBMzYzMjA1RkYzRjY0NjA5RUQ2RkI4N0QKLToxMDk1QTAwMDQxQzBGQUVFN0UxRjIyMzJENkFGQUQzNzdCQTBGRkNCOTMKLToxMDk1QjAwMDlFNzRGNjNGRENDMEYwQjVFQkZGMTM5RkM3N0YyMjIyRkQKLToxMDk1QzAwMEI2QUI1MUUzQzMwMDBGQ0ZGQjE2NDlDMDM4REU3NDU0NkQKLToxMDk1RDAwMDgzNzY4REFDRERDMEJDRTU1RDYzNkFBMUY2OEM5RUUxNEYKLToxMDk1RTAwMEZCMkQ5NDY3MjU3QjBGRjJFQjczMEQ2OUEyNTNEOEZGMTcKLToxMDk1RjAwMDY0ODIwMEZGRTUyOEMzQzc2RTRGRjEyMkU0NEEyMEZCRDYKLToxMDk2MDAwMDJFRDM2NEY4MTEzMjlCQ0U5Mzc1NTdENkEyRTNDNUQyMDAKLToxMDk2MTAwMEI3MkI3MUNBOEZFMUJBNUUwNUU4NEVFOUJCQkE0MDZGNUQKLToxMDk2MjAwMDlEODlDOTQ0NkMwNEJDMEFGM0MxOTY4QjZCQzgzNkE1RUUKLToxMDk2MzAwMDg5Q0U2N0RGMkJBMjMxNDJBNkQ2QjM0MEI4NkEyNzYxMzQKLToxMDk2NDAwMDQ5RjU5MDZDMzNDMURGMzkwMkY0MjQ3MEZFMDdFNkVENzIKLToxMDk2NTAwMDQ1QkE2NUEwNkIwMUQwOTUyNDNBN0RGRTFDOTcxRkRGQUIKLToxMDk2NjAwMEIzMTYwMUI5NTI3NDJCNkEyRDk4M0E0RTBBRjhERjAyRUMKLToxMDk2NzAwMEJEQTZBMzZCRjNFOEZGQjkzREJGNzQ1RTVERjM4QjdDQzEKLToxMDk2ODAwMDc5ODg5ODU5MEJGOEUyNzdDRTlCNURCRUM0Rjk3RTQ1ODgKLToxMDk2OTAwMEJEODVGQzJEMzdGRTU0RkFEOUY4N0Y0Rjc0RUM4NzI4MkUKLToxMDk2QTAwMEU5NjgzQzM0ODlDRkIwNzdBQzE3RTQ5QUFFNDlFMzIwM0YKLToxMDk2QjAwMEFEQjI5MDhFRDM5RUM3NkZGNzc4MTM3NDRBNjk4NzFDM0EKLToxMDk2QzAwMDdGOEJGMzY5RDgzRjdFMjRCRjNGMzczRURGRTVGNUJFOTEKLToxMDk2RDAwMDRCMzQyQzZEQkExNjFFNjJFMzk0RUJGRkM3QzBFMjVBRkUKLToxMDk2RTAwMEE4RUY1QTU3OTJFNUUwRkJCREJDRkUxNUNGM0JFQjE1NEEKLToxMDk2RjAwMEUzQ0ZFNzI3Rjg2MzQ1NDExRUVERjUwODNGNzMyNjIxQzgKLToxMDk3MDAwMDVDNjRGMEE3MkUyN0U0NTJGODNGQjRDOUVGRDc4RkREOTEKLToxMDk3MTAwMDA1NEJFQjE3OTFDNDE5RThFNzM2OTJCODM4MzA5N0FFOEQKLToxMDk3MjAwMDE3NkZFMjA5MjhBRjk1Q0M3RjgzRTdCNDk1RjZGQUU1ODkKLToxMDk3MzAwMDVDRUU0NEQ0MDM2QzNDREEzREExRkQ4Nzc4N0Y5MkQwODcKLToxMDk3NDAwMDQ5MDg5NTY3NUYyQkM5OEM1MEQ0REUyMzlFQ0MwQTk0QzAKLToxMDk3NTAwMDlGQkIwODMxNjY2OTc5RkJGQTI5QjZBRkFGRDQzMkFCNEIKLToxMDk3NjAwMDYxM0ZCRjRBQTI4NEQwRjFBQTg4RTY4NzEyRUE2NzY5RkUKLToxMDk3NzAwMEJERjAzMkQ1QTAyMzExMUZGOTQ4NTVCQzgwRENGODk3MDUKLToxMDk3ODAwMDEyQ0I1RjQ1Qzc2Rjk1MURFQkMyNkYyNjA4RTg4NTUwNjkKLToxMDk3OTAwMDk0NjRGRDYxNDIzNDIxMTQ0MUZDNTc5MDE1MEM3RjVEQTcKLToxMDk3QTAwMDgwRkU2QTI0QkQ0N0EyRTM4ODMxOEY3MTgwM0VBRDZBOTYKLToxMDk3QjAwMDIzMkIzN0U0QzlBMTJFMzBGOUVEODk3OTNDNDBENzIwMUQKLToxMDk3QzAwMEQ1RkYzRUJBMjRDMzBENzRCREMzN0E4ODUyN0JBMzgwRjMKLToxMDk3RDAwMERDNEVFOEY3OUM0OEIyMzM2OEJGMzk4MTY0OTc1MDU4MzMKLToxMDk3RTAwMDI1MkIxM0I0NUREQTQ3NTY5RUM2NzE4OTcxQTA4MDlDMDMKLToxMDk3RjAwMEFEMTNEOEJDMEFCMUYxNzNFN0QwMkUyMDk5RUJEMDJFNkYKLToxMDk4MDAwMDQ4RTMzQTk2NjM2OTEzRjYwMUM1MEMxQjNFOThGNkIzMUMKLToxMDk4MTAwMDNCOTg1RTkzODgwOTcyNTIxRDRCNjdBQkUwQkQ3RTQ5NTEKLToxMDk4MjAwMDIzRTAzQjJCOTYyNEFGQjVCMEYyNTQxRUJFOEE2QTQ1QTYKLToxMDk4MzAwMEQxN0U2QUJDNDRFOENEREJDNzBFNTNGOTM5OTUyNzZGNUEKLToxMDk4NDAwMEE5RkI5OTFEMzBEMDM4QzhGNUNDQTc1MDdGREFFRjNGN0YKLToxMDk4NTAwMEM2RjkyNDhGNTE2NDgwMkU1RENFMzQwOTUzRTUzQTI1MzQKLToxMDk4NjAwMDE0RDYxMzFCMzlCREYwQkI3NkI5NTM1RUE1OTk1QzVFNjcKLToxMDk4NzAwMEU5MTAzRTg5QTA3QzBEM0Q0NTMyODAyRkU1RTQ5MUY1NEQKLToxMDk4ODAwMDE0QkVGQ0E4NDI0NkE4N0NCNTkwRTMxRTkwOUY4NTY0NTgKLToxMDk4OTAwMDFDNEI4MzY4MjI5NDhCODk4MUU1NTIxMkM3RjJGN0VENDUKLToxMDk4QTAwMDU0RUU2OTc5OUI0OUU1QkQwOUU1RkYyNjAxRjY4OTg2RjUKLToxMDk4QjAwMEM0RkMzMDdERUU4RjU5NTdDMkZFNDJFNTdGMUQzQ0E3QTgKLToxMDk4QzAwMDcyMjI4MDNDRDU5OEE0RTA3RTU5MkRCMEY1QkE1M0QyQ0YKLToxMDk4RDAwMEZDNTA2RkE3NDk1MDNGRUUxMUZBMkNEODI3NTJEQzRFQUUKLToxMDk4RTAwMDRBRjk4OTYzMUQzRkMwRTk0RUYxQjIzQTk2MjA2MzMwRDAKLToxMDk4RjAwMEJGNzQ1RTQwQUYxRjZFQkMxNUQ3QjE0RjYyRjAyMDlEQTQKLToxMDk5MDAwMDE3OTRCQjU1NkMxRjczRTNBMUMwQkMyQzM4RkY3OTU4NkEKLToxMDk5MTAwMEY3RTc5Rjg3NDE2MTU5QzE3OTE4ODI3OTU4MjczMEZENEYKLToxMDk5MjAwMDI5RkY5QThENUY4MjNFRENBNzM3RjYzQzhFRkM5NzRGNkQKLToxMDk5MzAwMDRGQUZCRTRERkY3Mjk3REU1Q0MxRjVEQzU1NjRGQzIyNzMKLToxMDk5NDAwMDg5RUE5MURCN0Q1OTU5MTIxMEVGMkYwMkRFRkZGNkIzNDEKLToxMDk5NTAwMEUzMUYwMzdBQzg1ODYyM0VFQzUzMTRFRkM3MDRFNDY3NzAKLToxMDk5NjAwMDkyMUNBN0UzNEJBRjg4MTlGMDUzM0NDMTFCOTQ0NDA5RTgKLToxMDk5NzAwMDNGODU2ODU0OUYyOTVDOUYzNUMxRkZENjZCQUYwN0E3MTEKLToxMDk5ODAwMEVBREY0QjQ2M0Y3OTAyRUQwREEyMjQ0NjQwM0ZBRDRBNDcKLToxMDk5OTAwMDJBMjAxNzdERjU2QjE1OTBBM0ExN0EwQTgzREM0NDY1MTQKLToxMDk5QTAwMDQ1Qjg4Mjk2MkFFOTA0RjlCM0VEOEYxN0EyMUIxNEQwQUIKLToxMDk5QjAwMENGNzIzNDMxQzM5N0I3RkU1NzQ3MTNFNDU3QjBDRUI1RDMKLToxMDk5QzAwMDQ0NTRBNDc0Qzg5OUVCMTRBMDY3NDA1QkFCRTRGQjU3MDQKLToxMDk5RDAwMEIyOUE4OENBNTRERTg2QTA1RjE4Qzc5QjU0MDRENDkzRjkKLToxMDk5RTAwMDY0NDYyRkU1Q0JFQUZBMjRGNjczMzhEQTgxRjgwQzY4N0UKLToxMDk5RjAwMDFCQjBCRDRFRTI2ODM3QkQ1MEJGQTFCMzExRjY4QjU3MDcKLToxMDlBMDAwMDM2MTJEMDYzQzVGOEUxQjZBMzdENkE5MkM4NzlGQjgxQUUKLToxMDlBMTAwMDRGNEIxMjMxNkYzRTdENTIzMjBCNzg4OEQxQzJGQUY1MkUKLToxMDlBMjAwMDA0OTc3MzhGMUVDNzdEODVBNDFGMzQxNTJBREY1RTNFMDEKLToxMDlBMzAwMEQ3REUyOEY5OTlCMDMwNkYzRTIyNzlGQjBCOUQ4RjQxMUMKLToxMDlBNDAwMEJGRDE1NTY4RkREMTlEQzJEOUFGMjExMDY1NzlFNUZEMjMKLToxMDlBNTAwMDRFRUVBQjdDN0VEMzJCNTI2MzM4QkZBMTM0Q0M2RjFGNEMKLToxMDlBNjAwMEQ1RUZCODdGOUUwQzY1MEU1MjEyN0E1NjI1RjdDMzdCNTAKLToxMDlBNzAwMEFGMjU5MURFMDg3NkQzMENGQkQ5RERFMjY1MDZDOEQ5QTcKLToxMDlBODAwMDAzQzAzN0NBRDg2REREMEE5NjIzREQxQTk2QTlFRTI4RTEKLToxMDlBOTAwMDk2MEYwNkJGRjBDNDE4NkRCN0M1RjI2OTNFNUFDQUU5MDEKLToxMDlBQTAwMEJCQkYwMUZENTFFRjNBM0UwMkZENDY2OEZGRDBBRkE0QjcKLToxMDlBQjAwMDY4MDczNTgwRDlGRUUyOERCMUYyNjYwRkUzQTNFQTA5QUIKLToxMDlBQzAwMDIwQkU4QjNDQ0NERUQ2ODk4OUYyOTJENjRBRkJFMzU1ODgKLToxMDlBRDAwMEFENEU3QjM2NjQwNDI2RTU5RUZFMTc2Q0FFNzFDMDdFRUIKLToxMDlBRTAwMDdEQjZBM0JFN0I1REZDODBFQTI2QzBDNzJCQzU4OUQxQUQKLToxMDlBRjAwMDAyNjU2MTdEN0Q1NjEwMTE0RjUxNUMzNDBFNzY4NjM0QkYKLToxMDlCMDAwMDRCQzZGRDdGNDA3MEVBRTc0NzNDNkM1RkNCNzgxNEVDQjYKLToxMDlCMTAwMDM3NEFDNjVGMzg0N0Y5RTFENTNDNjhERjg0QUI5QjQ2REUKLToxMDlCMjAwMEIzQzA5RjVBRDk5ODQ3OEJCMDc3NENBQjI5MzAxRTg5NjgKLToxMDlCMzAwMDQ4QkYxQkNCNUJDRjRGMDk2NkEzRTcyRjgwNEY1M0U4OEQKLToxMDlCNDAwMEVGRTk3MEM4NzVDQUMzRjZCNUIzN0NCRDg4M0VCMzBCRTgKLToxMDlCNTAwMEY0NDk5NDhBMjE0MUY5RDAxRjA3M0U3ODgyNkQ0NjMzM0IKLToxMDlCNjAwMEU1QzM0MEI1QUM4M0RGRDNERkUzMjlCOEJGQjhGOTIwNDQKLToxMDlCNzAwMDU2REQxMjA1M0RFOEU2RkJGMzVDOEU5RUUyN0NCRkU2MTcKLToxMDlCODAwMEVDMDc1MDVGNkNENzNDOUQxOUQ0MUZDNzNCNDE5RkY3MzIKLToxMDlCOTAwMDJGRjU3ODQwQ0VGRjYyRjhFN0EyRTM3MzVDN0VDRTBBMzEKLToxMDlCQTAwMDEzNzQyMERGRkEyM0NDM0VERUE2NTFGOTgxRjUxQzYxNDcKLToxMDlCQjAwMEYyQTM5MzZDMjdCRTM3Mjg1REMyNTRCQURDRkM3QkI3OTYKLToxMDlCQzAwMEU5QjNGOTVFNTVFRDg5Njc1QTAwQkZGMTM4RTJENzI2NEYKLToxMDlCRDAwMDE1QzRFRjNGOEFFRjM2NUVFQTA0NUU1OTg2OTdGMTk3MjcKLToxMDlCRTAwMDgxRDc1MzQyNjJCRjg3QzIwRjcwNzk3RDQwMUE1MzQwQkMKLToxMDlCRjAwMDJGMzQ0MjNERDAzQjQxQjY4RUE2RUEyNUMxRERDRjkzM0UKLToxMDlDMDAwMEEwMjc3NjQwM0ZCNEZFMEU2OURDRDE4RjVEMkYwNDdDMjcKLToxMDlDMTAwMDYwRUIyMkNFRDY4NUY0Njc1RDE3MzY1RTIzMUM2RjlEMDAKLToxMDlDMjAwMDY0OTg1QzM3MTc5NkVCNzcxQjJGN0IzRkVEMEQ1RTRERUQKLToxMDlDMzAwMDQwREY1NEFCNzFCNEIzNjdBOUYxMkNGMEFCQUY1NkQ2OEIKLToxMDlDNDAwMEMxRkVBMTBFMTFFRUQ3RDg1NENGRjM4NzZBRDc0NUQxMDQKLToxMDlDNTAwMDdFMDlBRDQzRkI3QkMwMUI0NzdCRkM1OEVEQjdDQ0Y1QzEKLToxMDlDNjAwMDk0QUVCRUIzNTVDNDY3NTBCQjNGNzhGNTMxMURGNEUyRTYKLToxMDlDNzAwMDMxMTFGREIyQkVCMzczNjcyNTBCQ0M3MzEwRTI2MDE0RDMKLToxMDlDODAwMEZGMDBFMDg3RjZCMzNDNjE2QzAzQkU3RDJBNTU3Q0I0Q0YKLToxMDlDOTAwMDlGMzc1QjQ4MDZGNEE5NTczNUEzNjA1RkY3MkQ1MDhDQkEKLToxMDlDQTAwMDVFQUMxNTI3QzBERkRFRTBDNzVBMTMyRDUzREIwN0Q1QTYKLToxMDlDQjAwMEMxM0JDNDg1OTNFM0QwOUY3MDBFNkM1Q0JBODc4M0JGQjEKLToxMDlDQzAwMDhFRjQwOThFRjcwNUYxMjgwNzdCMjc2MTBERkJBN0IwRkQKLToxMDlDRDAwMEFFNDBENzgyNzk2RUVFMjRERjI5MkRDRDEyRUM5QjI0ODUKLToxMDlDRTAwMDYwQzBGQ0M3RTI5REJEN0YwNDNFQkQyNEEyMUU3NEYzOEMKLToxMDlDRjAwMEU3NTkzMUUxMTNGM0UyNUVERTQ4MDJFN0NERUVFRkZBMTkKLToxMDlEMDAwMDVBMDlGNUE4NTQ0RjMyM0UwMTQ2OERBMzFERDk1N0VGOEQKLToxMDlEMTAwMEMxMzg5QUE0QUVBRDJBNjk1RkQ3NTc2NjVGMTMxRURGQkMKLToxMDlEMjAwMEIwRTVBMUZERDc2Q0RDODBDMUY0Nzc4ODhDMTE4ODlGRTkKLToxMDlEMzAwMDU0MTExNkJGQTgyNkJBNDBCMEJEMjFDNDMxMjhEMjg2MUUKLToxMDlENDAwMDcxOTM4OEZGOURFRUY3MTZFQzU3MzA3NzkyNzNDMTY5RDcKLToxMDlENTAwMEY0MkJEMTdFRTdCRTBCRkQ5NkMxRDc0RjFFQzU3RUE5NjEKLToxMDlENjAwMDdBODg5QzlCMzFEOUFGMzc5QUM0ODdFNEVDQjk3M0UyMDcKLToxMDlENzAwMDcyQzI5QUUwMkY4MUYyMkQ3OTBDNUM5RjY0NzZEODM4RkMKLToxMDlEODAwMDQ4OEI4MUM4OUQwRUJGRTk0NkIxQzkxMTFGOTVCNUMxNjkKLToxMDlEOTAwMDNCODQzMDJERUI2RjMzQzdGMkY0ODM3QjdFNkY4MjgxN0YKLToxMDlEQTAwMDk2NDFCRDRERTY1ODA1N0EwM0NDRUU0MkYxQTc0MTM5MDQKLToxMDlEQjAwMDkxRTk4MUZERkIyMjE1RTM4NTQ0NEE2MkZDNzc0OEE4QkUKLToxMDlEQzAwMDU5MENGNkIzNUQ0RkFBOTdCMzgwOTc2QTk4MTZFODhCNDMKLToxMDlERDAwMEExMTkxRTQzMzRBMERGNkRDN0MxMUYyMEUyMEQ0NkEyQUEKLToxMDlERTAwMDQ0MUM0OUFBOTc3RTkzNEZDRkE3NDU2NzNDQUJBRjhDRTUKLToxMDlERjAwMEJDMEY3NDk3M0U4N0YwQ0E0NkEyOTAzRjczQkZDOEVDNzEKLToxMDlFMDAwMDE3NkZBMEYwRkJFQkU1OEU3QkM1NjU1M0Y5QjY5REYzQUMKLToxMDlFMTAwMDc3QTg5QUJBRDY1NzMwRjEwMTM5OTBFQTVGM0MwMTdDQjUKLToxMDlFMjAwMDE4QTg1RDEzMkQ0NTJGRDFBODlEOTNFNzE3MkQ5M0NEMkQKLToxMDlFMzAwMDIxQjEzNDFFNUJDNURBMDJGM0E3NTJFMTU5NTk2MjlDODUKLToxMDlFNDAwMDA5Rjk0RTEyMERGQ0M1NTc5ODNFQTJGODg2ODU5OTRDMkIKLToxMDlFNTAwMDNGQjM5RjAxMzYxQkYxQjZGQUI0MTEzQTZGODExNjgzRjYKLToxMDlFNjAwMDdDOTlDMkQxRDU0QTVDNkFBNUY0MkUzRDQwNDQ3ODVGMDYKLToxMDlFNzAwMDI3MTIxMTc0QUNEODY2QTBCRTZBNjZGRTlENDlGRjAxMjgKLToxMDlFODAwMDFERTEzNkQ5QjE2RjgxRkU5Q0Q4QjcxQTQxRkU5REYwMTUKLToxMDlFOTAwMDEzMzBDRkMxQkM3OUVFM0U0NDdFMzU2RjEyN0ZGQUM4RDUKLToxMDlFQTAwMDJDMTQxN0Y2Q0IxRDdGNTc5ODFGMzUxNUYxNjMzNzk1ODYKLToxMDlFQjAwMDE3NzBDODc3NTJCRjExQ0ExREQ0NkY4NDcyM0JGNTFCNEYKLToxMDlFQzAwMEExRENEQTREODU5RENBNTM3Rjc3MzNDMkZGMEQ5QUFFNzAKLToxMDlFRDAwMDg0NzNCMjY0QUFCMTExRTJBMjVGM0VCMTg5M0VEQTBEODkKLToxMDlFRTAwMDM4Q0M4NjZFRkQxRDEwMjcxRjAxRjg0QTQ0QzcxMjAwQUEKLToxMDlFRjAwMEU2RTcyOTJGODlGRkRFMEU3MTk3MTFCRjVERkY5RkRCMUIKLToxMDlGMDAwMEIxRkUwNDJDRjQ0MjVDN0YyNEM0REE4Rjg5QzEwRUE4MTAKLToxMDlGMTAwMEJGQkI4MUYwRjhCOUE5REM5NEU3RkY5RjExQkQyODdGOTIKLToxMDlGMjAwMDYwMDNCMUY2QkZFRDgxRkVGQzkyMERENzc3NDAxQzc1NDIKLToxMDlGMzAwMDAyQTY3QzA0N0NGQzBBODM2N0Y3Mzc3NEMwQjkwNkFBQzIKLToxMDlGNDAwMDAwM0E1RTUzRkY0NTZDQkM3OTJDNkU0NjNFQjRCNjBDQUQKLToxMDlGNTAwMDFGN0I3MUZDNzU3MEQ4MDYzNDdGQTgwNjBFOEY4OTRDNjQKLToxMDlGNjAwMEU1QTY4OTNFREE1RENERjFBRUIwMUYyMjI1RDg3RUM3QzkKLToxMDlGNzAwMEUzNDdDNUQ3NEQ5OTdEOERFMzUxN0UzRDk4NjhCRjgxRkMKLToxMDlGODAwMDFFQjY2MERDOUYxNERFQTdERkU5NzE3NzdCQTdDNzE3RDkKLToxMDlGOTAwMEE1MkQ2MTQyRjdFMUNFRDEyQzRDRjUyRTMxMTE5NjY4RkEKLToxMDlGQTAwMDNGNTVENzFFQzc2RDQ1OEU2Njk5REQ1MEUxRjg2Rjg4MjUKLToxMDlGQjAwMDFBOEY3RjI2MzA1RTY4RjM1QkQyOThGREQxRUU5QTRGMDAKLToxMDlGQzAwMDZGQzRDNDczNDhCRkNBRDY2MUE1NzgyRjg3NzFGMkZBRUYKLToxMDlGRDAwMDIxNUY1QjVDNTc2ODdGQjFDQkM4MEQ5RTQ5QkI4QkZFOTAKLToxMDlGRTAwMDU3NzM2REMwMDE2QjZEMzU5Mzc2MUNGMDYzRTk2QzA3OTgKLToxMDlGRjAwMEFDQjYzNDM5NjBBRjc2OTlBM0ZERjlDRUQ3RTUyRTNBRTkKLToxMEEwMDAwMDc0OUI3RjFDQUU3NUMxOTVDQjlGQTRGM0ZEQ0U2Mjc2ODkKLToxMEEwMTAwMEU0MDRDQ0Y3RTU3MkYwRDlGOTRFOThGNUVCMjMxRkFFQzYKLToxMEEwMjAwMDYyNzYwRUIzNjczRTRFNzgxRDM3MUU0NjlFMUUxNkExMDEKLToxMEEwMzAwMDFFODM3NThGNDA2QzNCMzdEQjNDQjVGRjNFRTUwQjE4NEMKLToxMEEwNDAwMDhGMzNGQjI0RTJCRjdBNkFCQ0NFRUE0ODYyQkNDREVBMTkKLToxMEEwNTAwMEY1Njk3RDExOENCRjYxQkM2RDBCMzVFODdEQjRCQ0RENEQKLToxMEEwNjAwMDlCQjg1NUEyRkM3QUNCN0Y1MTg2ODRBMURGRTQwQTg4OTUKLToxMEEwNzAwMDUzRjdCOUUyMEE2RTc5OEEzRDdBNzNDMUYzMzFCQkVDQ0EKLToxMEEwODAwMEVGNjY3MTQwMUI5NkVBMEI5RkZCNkY5MTY0QTRFMzI1N0EKLToxMEEwOTAwMDZGNjIwQkFDMjM0OTIzNDczMUNFNDNFRDZDMTFFRDZDNUQKLToxMEEwQTAwMDEzRURDN0MzRDU2QkEyNjBDN0E0NEMxOUZEMUMyOTdENTUKLToxMEEwQjAwMDNCQUU5NzA3REEzQ0I4NUU3QTI0MURGMUVBNUZEOTdCQTQKLToxMEEwQzAwMDZDMkVGOEEzQkE4NzczN0EwQ0VEODAxREFCRTQzQTU4NzYKLToxMEEwRDAwMDM3NjE2QThGQzI3OTQ5MzgyNjE0RENDN0I2NEJGQ0ZDNUQKLToxMEEwRTAwMDlBN0NCNDI0N0RFRUY5RjgzOENGMjM0QTM3MDg3ODZFOEQKLToxMEEwRjAwMDY3ODUzQ0M4RkY5NEVBNDEzREJBQkQ0RDdFMUNGQzlGN0MKLToxMEExMDAwMEVENEIzRDM3QzNGQjMzNkRCMjQ3MkNBMURGMDZCOUZERTQKLToxMEExMTAwMEI0MTVFMkE4QjBFRkE5MUJCMDlGMzM4NjI3NTM0OTdFNDAKLToxMEExMjAwMENFRTE1NTZCMzBGRUREMjc5OENBNUMzQzVGRjY5MDgzMkMKLToxMEExMzAwMEM4QjcxRjYwRkM2RkM3QTIwRUNDMUZCMDI0MTZGN0RBOTkKLToxMEExNDAwMEJBMjBEMDk1Mjk3NDFFMkU4NUYxRkQ4RUM2RjYyMzBGRjgKLToxMEExNTAwMDAxNUQ1NDJGMUY0NEJGNkRGQ0M0QzYwODlDNUY2QThCMTEKLToxMEExNjAwMDQ3NzRBMERCRjRCQzAxRTNBQ0Y0RTBGQjc0NjNGMjBBRDcKLToxMEExNzAwMDAzRTJCNjZEMUU4N0ZEOTE1RUM5RjhCMTIzNDI5MDhFNTEKLToxMEExODAwMDMzNkRBNzIwNjkwOUY2NTNGMzIxMzg3RjhEMkM5REIwREMKLToxMEExOTAwMDg3RUFGMkVDQTE3MDZCNzI0NTIyRUYxQ0MxQjY5RjhBNzAKLToxMEExQTAwMEVENEZBMjZDOEM1OUY0QkQ3QUQyODdGRUFCMTA3RTkyMzMKLToxMEExQjAwMDg4MTBBNzlFMkRBMkRGN0NFRDgyQTMwODhCNjM4MkUxMkQKLToxMEExQzAwMEQzMjE2RTZGOTkwNEZEM0Q5M0M1RjFFQjA5Nzk5ODNFNUIKLToxMEExRDAwMDBGRkU0MUM0NzM2MTEyRTJGNjM2QjdBRjM0RkEwRkY2RTAKLToxMEExRTAwMDFEOUZFRTNDMDc5RTYyNUY5RDdDRTMyNEFDMkJGMTY0RDcKLToxMEExRjAwMEYwMzUwRjk0QUQ4OUJGMjFFMDI3QkZGRDREOEMxRjNEODkKLToxMEEyMDAwMEQwN0E2N0EwNDc5ODZBODc5RDU5RkE0QzdBNkUwMTNEQ0IKLToxMEEyMTAwMDYxOTdDMUIxMzA5RUYzMTJGMTk2OTI3NkI4N0FGMjUzRkIKLToxMEEyMjAwMDNGM0M5QTg3REZBRjI0OTcxRENGRUQzQkJCOUY2MkY2ODMKLToxMEEyMzAwMERENUJERDlCN0Y3ODk0Q0FGODA2MkY4QjE3Rjk2NUYzRjkKLToxMEEyNDAwMEI3QTAzNzRFRjFGRDMzMERGOTM3NzlGMkIzQzFDQkQ2NTQKLToxMEEyNTAwMEQxMUZGOEZBODYxOTA2N0YxQ0ZDNjc5OERGRkVGNjc1OTkKLToxMEEyNjAwMDM4RUZDNUYwQTZGQUUwMEY0QzFGRDg3RTM4QjNFNzc3NzkKLToxMEEyNzAwMEI0OTVGNjNCMjZGMzVDQ0VBMjFFMjg5NkU3RjIwMTI5QTAKLToxMEEyODAwMDIxN0I5N0U1RTkyNzU3OUU4QkJEOUUwNzU3OTkyNDRBNjYKLToxMEEyOTAwMEU3Njk1QjM1QzlDMEY5MTJCOUM2MjQxQjQxN0UwNTYyNjYKLToxMEEyQTAwMEY0MUFBQ0ZFRjg3MkJFRDU0MTdFMTQ3OTRGMTZENkM1QUQKLToxMEEyQjAwMDE5NUQzMkUwNUMzMjM1RUJGREQ0QTEyQzhFQUZFNDkyMTcKLToxMEEyQzAwMDlGNzJGM0I5QzUzNTlGMEQ1RUU3N0M4QTI0NUUwNTg2RDMKLToxMEEyRDAwMDQ5MkNBRUQ0NkQwMkJEQTNDQTA2QUM0RkVBMUZFOEY5MDMKLToxMEEyRTAwMEZFOEYzRDlGNjQwNThCOEI4OTZBODYxNDFBNzc4OEVCRjUKLToxMEEyRjAwMEYxQTREN0JDRDQwQkZCOEQzNzc5MDJGNEIwQjU0QTQ2MzQKLToxMEEzMDAwMEZGRDg1REZGRTM1RUU2QkYwRDM2MTJDOTYyNzkyREE4NjYKLToxMEEzMTAwMDA3NDlBNzY5QzJCOTVGNEFEMDkyMEY2Qjg4N0UxQ0NFRUQKLToxMEEzMjAwMEJGNDA5NzgzN0ZFRjhCQkU2RUMyQkE3QjU0MjRDOTE5OUUKLToxMEEzMzAwMDZERDQ1RkY2MzYyMkZGNzdBQ0JBOEJEOUExRUYyNTgyQjgKLToxMEEzNDAwMDU4MERGNTJERENERkVBNEM0REIwRUEyNkYzQ0Q4OEQ2NkEKLToxMEEzNTAwMDEzQkQzMTRGNUZERkU0NjU3QTZERjJCRDE1QkRDOUYxMDQKLToxMEEzNjAwMDlFRDlFQjgzMjE2RUZGNjk3REQxMUI0MzA1REE1NzE3MTgKLToxMEEzNzAwMDNFQjc3RTFGQTdGMzI2MkZCNzQ3QUMzRUNDODM0OTQ1OTcKLToxMEEzODAwMDZFMzgwNDI2OUI3NENENjA3QTNEMkQ0RDJEODk3MjVCMEQKLToxMEEzOTAwMDQwQkU2RjAyRjlGMzUyRjk2NjNCMTU5MzZGREI1RTI4RkUKLToxMEEzQTAwMDM2RkY2RTNCQzFBRDdGMkEzREM3OERFREI5QjlFNDM4QUMKLToxMEEzQjAwMDZFRkY3RDkwRTdCQjUxNjk3N0YwQzlDN0Q3Rjk0MkJFMDAKLToxMEEzQzAwMDVFMjZFREE5MzQ4NzBERTQ4QjBGRkM3RDM4MTcwNzU5MDUKLToxMEEzRDAwMEM4QjNDNzc2NzMzRUZBMDJFQ0JEMUIwRkVBNjc2RjAxODQKLToxMEEzRTAwMEI5RjM4NTk5MUY4RThCMTFFQzNBQzk3MENDRjcwNDdGQjUKLToxMEEzRjAwMEY4NzlFODQxOEU0RjJDN0QzNThCMEI4N0VDN0NCOTRBODAKLToxMEE0MDAwMEY1NDdFOTNDMzlBQTNGMUUyOEE1M0Y0ODk0QzUwMTZDOTEKLToxMEE0MTAwMEZBQTdFMkM5RjgxNEU1RjMzRUQ0MzBFREY4QzQyMzMwQ0UKLToxMEE0MjAwMDdFMDlCRUVEM0YxRkJFOERGMDNDQkJFRTgxMUYxRkUxREMKLToxMEE0MzAwMDc5MDk0RUJEN0RFOTNBOEM5RjE1QzM5M0NBRjVBOEI3M0IKLToxMEE0NDAwMDgwREU3RTE3RTdFMUJCREVEQTBCOUYwN0JCNUU1MUZFQzUKLToxMEE0NTAwMEYzN0FGRTJEQTI3RTlBRUVCQjhEOTI4NTc2RDRCMEJFQTUKLToxMEE0NjAwMENCNDI3QjBFNjg4NUZEM0VCRDA4RjNDRDQ4OENBMDdFQjcKLToxMEE0NzAwMDg0ODY5MDM3RTVENzRERTQ1RjgwMTgxOEQ3OTNFQjlEMUQKLToxMEE0ODAwMDc4NEExMUU3Nzk0M0I0Q0JDQURBRkQ4MkZFRjY2RjkxQzAKLToxMEE0OTAwMDcxREM4OUI4OTZDQUYyQ0M2QzNCMTQ5NjE1RjgyRDNFNDcKLToxMEE0QTAwMEYyRjk2MzhEQUMxREVBRkQ2MkY0NDg4NEU5MDkzOEZFRDcKLToxMEE0QjAwMDAxN0JBMzU4QkVEQjI0RkRDRTcxQTIxRjhBOTdENjUzMjEKLToxMEE0QzAwMEFFRkE0NDk1RjRENzBCOUMyMzRFNkQyNzkxRDdGM0Y0NDUKLToxMEE0RDAwMERCNUJCMDhFRjNGMjEzQ0MyN0Q3Nzc2MUJFMUZGMTE4ODgKLToxMEE0RTAwMDEwRUZFQzhCQUUyMzA5NEFFNzIwNjE3QTI1MDVFNTRBOTcKLToxMEE0RjAwMEM4M0Y1OUFDRTEzOTg1Q0VGQzNGOEZDMkU0RjEyNUFGQUUKLToxMEE1MDAwMEVFODhERjhBMkFGM0E3RUQ3QUU1RTZGRjZFQkEzRjE1RkIKLToxMEE1MTAwMEIyOEYyRTk3RDk3RUYxRDYxNzkyQkY4N0JDMDY2QjQ0QjcKLToxMEE1MjAwMEQwQzEwRTNFREQ5RDQzRkI2QTQzRjY1MjE5RjJENzE2QTkKLToxMEE1MzAwMENBMzNCMURFODYzRDhERjJFQTdDN0I4OUIwQkMwMThBRUMKLToxMEE1NDAwMDg4OUNCRjNFRUQ3NTI5QTc3RDQ3ODBFRTUzNjkxNjE3OUQKLToxMEE1NTAwMDM5OTVGRTU3Q0MwQjM4QjU0RjQ0M0JGQTU0RUE4MzI1NjYKLToxMEE1NjAwMEQ3RDM2OUJFOEZEQkY1NEVFRjEzNERGNDUzNTI0MjY2REQKLToxMEE1NzAwMDFFNkQ3RjVBMzJDMzA1RjMwOEE4OTk0RUYyRjREQzI3MEEKLToxMEE1ODAwMEQyQTI0MzZFREZCQTNGMjE4M0ZFMzlEREFEMDhCRkEyMDAKLToxMEE1OTAwMDczNzUyQkQwNDlGMURGOTA2RTk0MjFGRTU1OEUyRTQ4QjUKLToxMEE1QTAwMDY3Q0ZERjM3NkMzQUZCNTVFNkQ3RjVBQkNDNEZFOUQ3MzEKLToxMEE1QjAwMERFNDQ3QUNGRDBFN0E1RkNBNjE0QTdCMzVGMkJBQzVGMkYKLToxMEE1QzAwMDk0MTAzQkJGNTVCQzU2RTFCQzA5MTdCRDdFRERCOTRFQUEKLToxMEE1RDAwMERGNjlGQzg2NTU3NjVFM0IyQ0E1OTVGM0MxMjc2NDVBNEUKLToxMEE1RTAwMDAyRDhEMTFBQzlBNjIwM0Y5RkIyRjE2NTg4MzM2MDg4OEUKLToxMEE1RjAwMDkxOEFCQTc2RjIyOUUxOTMxNEFGMUZBQzU3NEQyMTBBMjQKLToxMEE2MDAwMEYwNTc4NThCMjhBQzUxM0ZDODFCMDVGRkMzNzNGODU1MjUKLToxMEE2MTAwMEJBOEU4NkJCODIxODQ3MUU2Q0RENzQxOENDODRFODNENjgKLToxMEE2MjAwMDlGQzVEMEQzMzY1MEY2MTgzRjdENUY1RjdCMEI1RjY3QzkKLToxMEE2MzAwMEI0RjNDRjBDNzZBQzg2NzhBNTQ0RTIzQ0JFRTFEMTI1REMKLToxMEE2NDAwMERCNUYyQkIwQkVGM0ZDNjVFMTlDNkZCMjVEMzEzRTA1NzQKLToxMEE2NTAwMDVDRkU5MDhGQUMyREFEOUYzNjMzN0Q2NkQxN0ZBMDVGQzEKLToxMEE2NjAwMEEyQUVGNjMzNkY3MUM2QzEzNTkyMDdEM0Y3M0I2NUMyMTAKLToxMEE2NzAwMEUzMzUzN0JFQUJFM0NDMjI0NzE0MURDRkIxM0M1QTA2QkQKLToxMEE2ODAwMEVBMTNBQjFBRjJBNzQyMDk4OTgwREQzRUFCMzlEMTBFM0QKLToxMEE2OTAwMEZDMkZDN0Y3NjFDMkYyRUEwODM5NEVGMkQ3RDVERjcyNTQKLToxMEE2QTAwMDNENTQ3RkU3OTcwNUIwQTdDRjE4NTQwQTE2MDFBQzJDOEMKLToxMEE2QjAwMDJBNjQ1RkQ4Rjk1QTEzNzBFQkNCQTgwRjA3MjlENjE4NzQKLToxMEE2QzAwMDM3NjhGNUEwREZCQkNEMzhBNUU1QUZBN0VGRjE3MTI2NjAKLToxMEE2RDAwMEU3OUZFOEQyNzIzQ0FEQzVGOTk3MEQ4RkU5NUY3OEZFMzAKLToxMEE2RTAwMEYzMkY0RjczRkVDMzlCOUQ3NkYwNzRFN0U1NDc1QzBGMzUKLToxMEE2RjAwMDk1OUJGRjBCMURDNzlFQjdBOUVCODNFOUMzRkEzQjlGNTAKLToxMEE3MDAwMEM1N0NDNUFEMkRBNUVEQTNBOUYzNzYwNEY3Qjc5MDQxOUYKLToxMEE3MTAwMENDNEM4MTc2M0Y5NTA1OTc3RENFNEE4NTI0ODk5MTc3RUIKLToxMEE3MjAwMDBFMjU1RUJFN0MxRkU0MTUxNTFCNTc0Q0I4RkMwRERFRDQKLToxMEE3MzAwMDRGRUUxMzU0MTJGMTVDNDQyRkYzM0REQ0U4MUU4OUVFMUEKLToxMEE3NDAwMDg3QzEyRDU3RUQ5MTk2NDBERTk2ODlGOTVGQzNERDI2Q0UKLToxMEE3NTAwMDNFOUY5ODdGOUY4N0UzMkIxMDhGRUQ1RkVCNzgyRUJBOUIKLToxMEE3NjAwMDQ3NDJCQkMyNDNDRTJEMjFDODYxREQ5NjNCMDJGNTNBN0MKLToxMEE3NzAwMEY3NDgwQTNFRTVGOTA1QjRFQTRDNjg0N0QwNkU1RDA0MzcKLToxMEE3ODAwMEMxOUU1QTNDQkZDNzdFQTAyM0E4Mjc5MTJFMDZEMzg2MjAKLToxMEE3OTAwMDAwNkZGNTlBNjY5Q0VCRTUzQkU5N0FEOEVBRTdCMENFMjQKLToxMEE3QTAwMEUxNkEwRTZCMUM2RUU0MzBEOTg1NzA1MEE2MzBDNEU5QTYKLToxMEE3QjAwMEJENjkwREUxMDA4NzFCMzk1Q0MzRTE2QTBFMzc3MTU4MzIKLToxMEE3QzAwMEQ4ODVGMDU2OTlGNTM3MjI2NTU4RkYwMTBFRUIxQ0FFN0YKLToxMEE3RDAwMEUxQjBDNkUxMjYwRTkzMDM2QzdDMUY4MzAzREUwQ0VCMTUKLToxMEE3RTAwMDNGQzhFMTQ2MEVDRkUwNzAzNTg3RTc3MjU4Mzg4MDcwNzkKLToxMEE3RjAwMDUxQkQxQzMzOTFCRjkzRjNERkM5Rjg0NjA4RjcyRkUzMkYKLToxMEE4MDAwMDJFQjg2QkIyN0U5RUZGMzlEMEFEMEJGOUU3OEFERTIyRkYKLToxMEE4MTAwMDcxQTdDNTNFQTY2N0M2REJFMzk4QkY0NEZENTJFQjU0NjMKLToxMEE4MjAwMEZFNzkyNDc1QTAwQUM1MkQ0RERFNkVFMjNDM0Q1Mjc4QkUKLToxMEE4MzAwMDVERDhFQkNFQkQyRTJBQzU2RkNENzlFMkY3QTFGRjIwMDIKLToxMEE4NDAwMEZDM0VFQ0IzRDczREYzQzdDN0RCMERDNEQzREQ5RkJCRTQKLToxMEE4NTAwMEREMDhENTJGMjRDRkZGMEY0ODE5MEJCRURCQTBCNjBGQTQKLToxMEE4NjAwMEZBMzU1RUM1OTlFNzdBQjdDRkNCQkU1QkYxQjEzQ0Q3N0QKLToxMEE4NzAwMDNFOEVERjc4M0IzQjhGMTg5ODE3QzgxQzEwQTZDNjE3NzIKLToxMEE4ODAwMDNGRTc2M0ZFRkZGNzZEM0M5NTUxRjQ4RjgyMzlCQTYyNjIKLToxMEE4OTAwMEYzRkM5REUxNTg0Nzk5RkM3NUU5REZGM0YzMTRERDcxOTIKLToxMEE4QTAwMDhGN0Y4NTc3NzQ5QzgwNUE5ODRGNzc0RkU4OUI1QkFDN0QKLToxMEE4QjAwMDUzQjRBRUUyQTdDRkMxNkZEMTIyRDFGQUZDN0M2QUZFQkQKLToxMEE4QzAwMDlFMDgxRTExRjVDQjU5NUFDRkNFMjMxMUIxN0YzQzk3NkMKLToxMEE4RDAwMDIwRjUyQ0VFMjVGMkZBMzg0RTIzRkI4RUMxNUMwQ0ZCRTIKLToxMEE4RTAwMDBDN0RERUNDQzcxMUE2RjZFQjZFOTdGNUQ1QjBGOUUyN0MKLToxMEE4RjAwMEY4RDg3OTJCMjI3OTFFRkI5OUMwNDc4QTIzQkZEQ0NGNzkKLToxMEE5MDAwMDIxM0Y1OTUzMkZGQ0Y5ODVDMjVFQkRDODc4Njk3NjNFNTgKLToxMEE5MTAwMDU0QUVGRDEzNUM1RUE2Qzg2NzkxNzk3REM0NjdEQjI5RTAKLToxMEE5MjAwMEEzMjY5QzIzRDk3MjY0Q0JEN0Y5Q0FEMTA1Q0IwOTZDNzUKLToxMEE5MzAwMDQ4NEI4QkNCODk0NTkyQjg2RTI0NzAyNTE3NEQ1RjVFQ0UKLToxMEE5NDAwMDBBQzg0OTM2QkY3RUFENTJDRENGRjkwRDk0MTc4QThGMTQKLToxMEE5NTAwMDg0NzJBQjMxN0M2QTE3NDdCMDNGMDFENjM4OUVCNzcwMUUKLToxMEE5NjAwMDE4Rjg0MEU5QkQ1Q0E5RTY3QzYwRjE4QzAwOUMzQkU2RjAKLToxMEE5NzAwMEI1QTdDNDIxQkUwMjc1ODY5OERFNjdGNUFFNTFEODNBRjgKLToxMEE5ODAwMDVGRDU1MUNGRjAyN0JDN0YxN0JFQjQzRjI1QkYzRjkxQTUKLToxMEE5OTAwMEQ0QkJFNDlDRTFGREQ3MEE5QjVGNUE5RkM1NUREQ0UzMTUKLToxMEE5QTAwMDRCMDJFMjJCOTJCOEU1QTFFRDNFQzNFQkJCRjU5NzVEMDAKLToxMEE5QjAwMERFQ0ZGMTFCRjY5MENEMkNDRjIzNEVGMkJGQUIwQzJBOEQKLToxMEE5QzAwMDFFRkVERDIzNUI2NzZFRkRFNDA1Qjk1QTcyRkU3MjU1MEIKLToxMEE5RDAwMEE5NUVBRjU1MEFFRjNCNTRDRjM3NDM3Q0I2RDhCRTczNjAKLToxMEE5RTAwMDQyOTlEODBGOUFGOUJDNEQ2QkRFN0YwNzdBNjhEOUU0OUIKLToxMEE5RjAwMDdDNTY4QUVGRTU3Q0RDRTlFMjdCN0EyQUJFMTVDOUQ5NzAKLToxMEFBMDAwMDlCNUM0RjU0OEFERjM1RTc4OURGQ0IyRUZDREUyOUI5MEEKLToxMEFBMTAwMDNFQ0JGN0EzNEFGMUZGRUJGMzk0ODc3RjlDQ0FERjhBMTIKLToxMEFBMjAwMEQ2OTE0Nzk5MUU3RjNGNzM5RUY4RkREMjhENUY5MTc1MzkKLToxMEFBMzAwMDJCMkI4QzVGMTY2MUYyMjFBOTA0RTMzMzk1RTJENzVEREQKLToxMEFBNDAwMDFFM0ZFRThGQUZFOTM3NjM2OEFGQTEzRkJFNUQ1OUQzQkMKLToxMEFBNTAwMDZGNDk5M0Y4OTk4NEU5RjVFOThFQkZBM0UyRjFERkRGNEUKLToxMEFBNjAwMDZGNEE5M0UzN0Y1MTc5QkY2MzdDODlDQTBGMDg1QkE1NjYKLToxMEFBNzAwMEUzM0U1NkU5QjhENjREMEVCQUJGOTZCQUM5MzFFRUY5RTMKLToxMEFBODAwMEYyRkRFQjE1OEZGRjUxMDdERENGQTczRUVBQTQ1QjM1NDIKLToxMEFBOTAwMDMwNEZBNEQyNzFGRkUxM0NEN0ZCNkYzOEJFNDE0NTczMDQKLToxMEFBQTAwMEVDMDNDNUVDRjdCM0RDQUVGRDg0QTIzOUU0Qjg1OEZEODUKLToxMEFBQjAwMDM3QjlCREYyQkUwQUVCOUZFNkZEQ0ZCNUYxMjk1M0ZGRDIKLToxMEFBQzAwMDFFOEVGRjNEMTVENkZGMURDNzY3NjU4NUY4N0M5RkFGQkQKLToxMEFBRDAwMEMzNjJGQjY3ODBGMzNEMDgzQTMyQ0ZBRkI5RDAzQ0E2RTIKLToxMEFBRTAwMDREQkU4NEUwODc3M0NENjdCQkYxRkJDMTM3MjU0NTgzM0QKLToxMEFBRjAwMEYzNzdEMjQ5RDAxRUY3OUYwQzFEQzBEQzRDM0JDRTRDRTcKLToxMEFCMDAwMDEyOTZDMEY0MzBDNkI3QkMxMTIzOUFFRjVGRDg3RTk3NzcKLToxMEFCMTAwMDI0QzVDRDQyRTc2QkQ1N0VBNkZGMDRDREU4NjJFQjVEOTAKLToxMEFCMjAwMDI2RjAzRDQ3QjFGQTQxN0ZFMUY4NEIxNTE5Q0Y0MjFFOUYKLToxMEFCMzAwMDJGODlGMkYzQTJCMzFGRDQwQkM2RkZBNTc4MDJCRkFGRDMKLToxMEFCNDAwMEQ2NjQ3MjAwRTJDRUQ1RUIxQ0U3RjkzMTFCOUZBODg5RDEKLToxMEFCNTAwMEY4QzgxQUMzNDc5NjBDQjM1MEZFNzI4MzlGQ0RBQkREODUKLToxMEFCNjAwMDhGRUQxRjBBRDE3MUMyRUU3MTYwRjgwREY4RTM1RDc4QzgKLToxMEFCNzAwMERFNUYyRDIzOUZGQTQzQ0VGM0YwOUI3OTNGN0ZDNUU5M0IKLToxMEFCODAwMEVCRjc5NkNFMUJFQjk4RDlBQTQwRkY3REFEMkM2RUFFQUQKLToxMEFCOTAwMDEzMDNDRjA1RkJENUQyRjcxQTZDRUI2NkU3ODEyM0ZDRDQKLToxMEFCQTAwMEJCRDIxNDdDNTczQTFGRjJBNEEyM0MzRkVBMTlGQzNFRTgKLToxMEFCQjAwMEVGNEM4QkE3RTRGRDM4MjFDMzE5M0YwRjM2M0JDRkREQTcKLToxMEFCQzAwMEVDNzhCQjVGNzc3RUVGRTM4QjNBQkZGN0YxQ0U5NDNDMzYKLToxMEFCRDAwMEY4N0Q5MUNBRjJCMUNBRTE2RkU3NzNEOUY1ODZBNEE0RjIKLToxMEFCRTAwMEEyMTVFNDUzQzYxMUVGRjc0NTlERjhCRTdCRkM2M0VENUIKLToxMEFCRjAwMDgzREU1MUFEMTA1RUVGMTRERjhBQzUxQjI2RThBRDkyRUYKLToxMEFDMDAwMDkzMTlBNjM3MUNFN0Q0REQ1Q0JFN0M1NTRBMTJGNDMyOUEKLToxMEFDMTAwMEQ1QkI0NURFMDc1ODdCMzU4RTc5MEE0QTM0QUU2MzNDOTYKLToxMEFDMjAwMDlBRUYwMzBBQUM4NzNDM0UzRDY4QUZDQjgwQzdDRTQzNkEKLToxMEFDMzAwMEM2RkI1RTA0RERDNDczNDYwNUQ2OTEzMEI1RERDNEJDRTkKLToxMEFDNDAwMERBNzJGRkY2NkFDQzRGQjQ2QTE1NUMyNzgyM0U4RURGNUIKLToxMEFDNTAwMDdCQjlDNzk5RUYzNzc3Rjk2OTM5QzM2RkVFODZEMkZCQjUKLToxMEFDNjAwMDI3MzE1MTY4QkRFQ0Y0MzMzREFBREMxMEQ3OTUyNjc0MkEKLToxMEFDNzAwMDU1RDFFRTcxRTNGMTBEQkVGRTU0MUI3RkNCQzQ3M0VFRDQKLToxMEFDODAwMDRBRjE3RkFDNDJGQ0VENzEyOEZFNUYwMTNENEJGMUZGQzQKLToxMEFDOTAwMDJBOTRDNUYwN0Y4QUVCQTMxQUEyRjdFMDlFQUQzMzNENUMKLToxMEFDQTAwMDRCQzg4RDdBN0U3QzNEMTA2MEZERDY3MDNENDU0OEJCMUIKLToxMEFDQjAwMDIzQkZDNENCRTlBQTk0OUU0M0I2NUUyQjQzOEYzRDJFOUYKLToxMEFDQzAwMEE1RTcyODlGOEZFRjk1OUE4RjE3MzgzRDgxMDBEQkI3NTYKLToxMEFDRDAwMDk0N0Q3MTlEMkU0RDcyNDk5MTc5MzlDNUYxOTgxOUUwOTUKLToxMEFDRTAwMDcxMjVBQjdENUE3MkY1QTMwQUU5MzgzNTM5MkZBRkYyRDkKLToxMEFDRjAwMDc5Rjk2NTI5M0E0RTcyQjk0QThCNjRFNTY5RDg0RkU3MEMKLToxMEFEMDAwMERBNzkwQTZCMURGMzMyODdGMzI3RURCM0U3QTVDMzMxNzgKLToxMEFEMTAwMDJGRDVEMzlDOTdERjU2NDhDRjlDQzk3OTc5OEJDRjRCRTEKLToxMEFEMjAwMEFFOTQ5Q0U1RDU3RjlCRDdGRjEzQUY4Rjc2RTI5Q0MwOTYKLToxMEFEMzAwMDFGRkJFMUJDNkNCRTNGRUUwOUQ0NEVFRTZGQjQ5RTE4MTMKLToxMEFENDAwMDU4MzY1OUVGQzFFMTYzNzYzRDFGRDZFQjlDQThBNzA0QTYKLToxMEFENTAwMEYyRkEyM0Q2NkJGRDcwQUUzREMwQkYwQkY5RkU3MEU4NzIKLToxMEFENjAwMDNEQkM1RDE4REJEREMwRThBMUVEQUFGMkZCRkZDNkYwM0IKLToxMEFENzAwMDJCNzZGRjMzQTA1RUNGRUEzRkQ5RjUyMkY5RjVFNjA0NDIKLToxMEFEODAwMEZFNjRENzhCQzI3MzYxREY0NDdGNzVGOTc4OUNGMkZGNTQKLToxMEFEOTAwMDczM0ZDQkNGNzFFNTc3Njk5NUU1MzE3ODIzMDlCQ0U3M0YKLToxMEFEQTAwMEExODY4NEQyOTAwNzNCMjhCMTdCMTcyQzZBNTQxRjg0NUMKLToxMEFEQjAwMDNDNTk1RjIyNEIyQUIwQkIzQzBBNkJFN0EzRjYxNjdDREEKLToxMEFEQzAwMDVGMzY0MzIzODdGRDNBQjgyMDA2RDkwN0Y5QUQxMTA5NEMKLToxMEFERDAwMEZEODEzQkZEODlBNTgxNUE4NjI3QzhDQkMwQUJDQzFFMUYKLToxMEFERTAwMEVCNTE5N0YyMzgwQUMzNkI2N0YwNjMyOUU4NEZBMzc4RjkKLToxMEFERjAwMDQxRkYwRjA2QzM4N0ExRkVBRTA2NTkwN0Y5M0FEQzcwODIKLToxMEFFMDAwMDE3REE4OTNCN0IyNDAyRUY3NzVFMkZBMzlEQjhGQkQ1MzEKLToxMEFFMTAwMDEwRUVDMzAzOTI4MUY5RDU5NjI5RUI2MDM3REUxREY4NTkKLToxMEFFMjAwMEQzODk0RDE0MUVFQkE5RDI4NEFCOTExRUM0REZGMjkwREUKLToxMEFFMzAwMDc4MUZGNkNGRUNDRTJEMTQ3RkM4MEJDNkFEMEJGQUVEMDQKLToxMEFFNDAwMDY0N0UwQ0ZERDU0MUZCQkI1N0VCOTg0RkEzMTM3NjdGNzcKLToxMEFFNTAwMEQzNTBBQjhDRjk0ODNCRUI5QkRBNjFCQ0REQUQwQURBMzEKLToxMEFFNjAwMDFEQkI2RjY4RUFDMTNDRURENjAwODEzQzgwMUE1NTE3QzYKLToxMEFFNzAwMDIwRUYzMUJDNDIyNjE2QzAxMUJEMDdFQ0NFRDBGMjAwNDcKLToxMEFFODAwMEU0NDY5MjlBN0EzNjVFNjgzRUMxN0JGRUJDMjQxRDhGRjIKLToxMEFFOTAwMEQxMzI5QzkyMzFCRjc3RjcwRDZCNTkzRTY5QUI0RkMzRUUKLToxMEFFQTAwMEVGQkMyQ0YzRTVEODcyQzI1Mjk1RTEyN0ZFMjMwMTdDNUEKLToxMEFFQjAwMEJDNzM0NDAyRkNCN0U3Mzk5QzlFNjg1RkYyMUMzMTlDNkUKLToxMEFFQzAwMEE5QjA1RUI2QjI3QUExOTQ4NEY3NEU5NUFEOTdBRUIwQjQKLToxMEFFRDAwMDVFQTZDMjdBNTk1NkFGRUNGOTNEQ0Y5RjU0RTgzRjg4NDEKLToxMEFFRTAwMEMzRjk1REU3Qjc2MEM3OTdGQTVFNkVCQUY5QjkzQjAzN0QKLToxMEFFRjAwMENFRUZFOUNBQjVCN0YzNzJDQkQxMEI4Nzk5MTM3ODhBMzUKLToxMEFGMDAwMEU1RUI5N0ZEMUU3M0U2NUQ1MUY4M0U2REE4RjY1RTVFQkIKLToxMEFGMTAwMERFQzdDQTNBRkVCQzZFNEIxNEVGOEJBQ0UzRUZFQkVFMzAKLToxMEFGMjAwMEMzRkIyM0RERkRGQzBGQUU4RjlCNDlCQ0U0M0NENDcwMUEKLToxMEFGMzAwMEZDNUZBN0I4NDMzQ0JCNTkyQTkzMEYxMEYxQjhFQzREMDYKLToxMEFGNDAwMEE3REU1MzI0QUIwM0Q3RUQwRDJDMkZDNzA3Q0EwMEQ2QkQKLToxMEFGNTAwMDREM0Q1QkM3NUU5MjhDQzczMDlFNjU4NjE3Q0Q5QzVDNkQKLToxMEFGNjAwMDNGREVCNjE3NzFGREZDQTA0RTI0NDIyQkNFMEZGQjhFQTgKLToxMEFGNzAwMEQyMjUyNzZFQjlGMEI5Q0VGNTJGNTQ0RTdFRkEyRUM5RTAKLToxMEFGODAwMDg5MzcyNTU2QjQ3RUJDRTkwQUVCNjUyQUFDOTdBREFDOEYKLToxMEFGOTAwMDlFOUMxMjJBRDIyQjcyQkFDMjdBOTkwQUVCNjU1OUJEQ0QKLToxMEFGQTAwMDgxOTUzMkRGRDc4NzA3MjBCRUU1QkQ1MjcxQzAwMzU3QjgKLToxMEFGQjAwMDA2OUNFRkFGNTIxREYwRTAzMjY3N0I3OUI5QjNGREUwM0MKLToxMEFGQzAwMDcyNjc3Qjc5MDU2QjZGMDRGN0JDQzc4QTU1QkU0RUZFNkUKLToxMEFGRDAwMENGNzlBRTkzNjZBNTc0RkQ1MDZCOTk3NUE1Njg3RTY4QjAKLToxMEFGRTAwMDVGMjNFOTA0RUUxREEyRkI1NTg2RUY1QjA1RTMzRjZCOTMKLToxMEFGRjAwMDgyNkNGRDVGMUZEMDFDRjdEM0ZEQTVEM0Q5MUM2NEY4NkMKLToxMEIwMDAwMERBRjQ5NkMzRDdENkJGRkY1N0U0NzY1NzkxM0NGQjZBNzQKLToxMEIwMTAwMEQwMzk5MDc3NERCMjc1RDBFRkUxM0JCRTU1MDc3NkU1NUMKLToxMEIwMjAwMDIzQUZBREMwN0IzREZBREU2N0U3Q0QxODk4RjcyMzlEQ0YKLToxMEIwMzAwMEY4RkVDREEwQzcxRTQ5Q0EwNEYyNzExRUFEMzY4RTVENjIKLToxMEIwNDAwMDEyQzFFRkM5MDhEOENCRDQ4REMyRkIzRTFFRDkyQ0ExQUEKLToxMEIwNTAwMEZERDE3NzVCRTk3QjREQkVEMUNERjI4NEZFOEVGQkZENDkKLToxMEIwNjAwMDVGRTVGNzcxM0RDNUVGRTM3QUEyNUJDN0YyNjA3NzMzMjYKLToxMEIwNzAwMDk2NUZFQTM2QjA3Q0JDQkIxNUNCRkRERDI2RUUxQjVGRDAKLToxMEIwODAwMEVDRUVDNDcyNUY3NzFDQ0JCRERENUQ1OEVFRTg0RTYwMjAKLToxMEIwOTAwMEI5QkQ3QjMzRkY1RTJEODlFNTcwRjcxNjJDODdCQTJEN0QKLToxMEIwQTAwMDJDMDdCQTUzNThGNjc1QTdCMTlDRkQzNzA3ODYyRjU5NjAKLToxMEIwQjAwMDhBRjk5MjkwQTE1NjE0N0ZFMzc5NjdEQzYxRTFCMzAxQ0MKLToxMEIwQzAwMDA3RENGMjM1NjdCQ0UxQjIyRkNGNzZDQUM1QTM0RDhFM0YKLToxMEIwRDAwMEZBOTdFQ0I5Q0NGMTNFQjY2REIxRTM3RDUzRkY5NTBFMTYKLToxMEIwRTAwMDU4QkZBRkMzMDE1RkY0RDlCRjcyQjRBRjRCQUM3NUJDRUUKLToxMEIwRjAwMDlGRDVGNTYxNjdGRTU3REIwNkM3RkJGMEQyNEYzQjYwN0IKLToxMEIxMDAwMEI1RTU0RTQ3RkQ0MEVDNUUwNzBDRjczRUU3RDdCRjMxOTMKLToxMEIxMTAwMEQ4QzRFMjgxOTExMTQ3M0Q0OURERTVBOEY3QTk5OUU2MzgKLToxMEIxMjAwMEZFMjBDNDQzRDM2MUI0MkYxRjM5MjlFMDNFMzhFMzIyMDcKLToxMEIxMzAwMEUzMzU5MDI3RjI1MzExRTU4OTVDQ0JGMkRFNjczNDI1QzUKLToxMEIxNDAwMEFGODBGQkNCODg5NDVDRjFDMTUwRjk3QkE0RUQ3ODhGODQKLToxMEIxNTAwMDE4NkU0REMwM0VGQkQ2NkI4MjBFRjZBRTEwREUzMjNGNEYKLToxMEIxNjAwMERGOUZCM0NCQ0Q2NzkyNjQxNEUyOTIzQ0NGNEM5QjRERjIKLToxMEIxNzAwMDRDMTNGQzQ2QUE0RjA4REFEOUM5RUNGRDE4QjdGNEUwMjUKLToxMEIxODAwMDc3NTM2OTIxODFGNzRFNTM5QkQ5RjhFRjFBRTRDQkJCNzMKLToxMEIxOTAwMEY3REYyMERBRTU2NzM0ODJFQkEwQkQ0MzY5RUNBN0VENjkKLToxMEIxQTAwMEI3MkY5MEYxN0JCRTI5RjhCQUJFOEI3OTIzQzhGQ0Q3QTQKLToxMEIxQjAwMEFERjdCMzc4QTU3NkM0REZBODJDODVGQjMyMTIzM0MwNzcKLToxMEIxQzAwMDU1QjVEQkE5RDk5N0YwREU1MzM1NjYyQzg3QUIwMUQ0OTIKLToxMEIxRDAwMEU2MENEOUE4NDJCRDJDREVCRjQwRUI3RjEzOTZGRDQ0QTAKLToxMEIxRTAwMEZENEQ1OTRCQTZDRkVCMzYyN0U2QzI3NzNEREI3OUZGMDUKLToxMEIxRjAwMERCMEZGRjhDNUM0MkY5MUE1QTdBOUNEQzhBRkVDRTVFMjkKLToxMEIyMDAwMEU0NUZBODc1OENBQ0M5NUJCRkRCREYyRUZDQkREMTJGMjIKLToxMEIyMTAwMDgzMkNBRjY2N0I4Rjg1RjdDQzI5RDk2RkUzN0RBOEY2QTkKLToxMEIyMjAwMDNDMDQ1QjhFOTMwNEY0REYzNjhFRjcwMzZGQkY5RjdEODMKLToxMEIyMzAwMDhGQjc1REY4NTEzNENBRTlFQTcxRDI4NUY4MDAxREI3QkQKLToxMEIyNDAwMDUyM0RBN0RFOTIxNEQ2QjRCMEU3NzNGM0ZBODVGNzFCMkMKLToxMEIyNTAwMEUxN0RDMjEyMjA1RkJEMTI3RUM5RjA3QzEzRTUxNzlEMEYKLToxMEIyNjAwMDA3NzU3MzQ2MjhDOUFGNTg5NjdEMUZEMTVDODQ1Rjk0REIKLToxMEIyNzAwMDNGQjdBMjlGM0JFODg4MUJEQTdDREFERTczOUMyQzZGMTkKLToxMEIyODAwMDAxRkI5RkQ1OUZFMDJCRTVDM0FENzk3QzlDRTBDN0IyNjUKLToxMEIyOTAwMDlGNjI3RTZCQzhGQTExNTlBMkIyNzY0MDZGODhEMkI3MEUKLToxMEIyQTAwMEIxMDBERjI5RkZCMDdGOUIxRkY2MzgyMUNBMkY4Njk3OTgKLToxMEIyQjAwMDY1N0ZERjg4Rjc3NURBRjkxRjc2N0RGODc1MkVFN0Y5NzcKLToxMEIyQzAwMDg3OTQxRkRFQjFFQThERjAzRDY4N0I0QjAyQkYxMzFFRjEKLToxMEIyRDAwMDUwM0Q3ODlGRDA4MEZBNENENkMzRTUxOUVBNDk5MkQ5RkYKLToxMEIyRTAwMEZCNjM5RTY3REUyQjE0NUE3RjRFRkIxRjMyQTZGM0JGMTMKLToxMEIyRjAwMDBCRUI1N0Q5QkQ5OTAzOTEzMjc2MTBCRjJGNThFNEY3NjUKLToxMEIzMDAwMDA1Q0I1MkJDQjM5MUFENTNBMzg3NENDNjREQTc4RUJGOUUKLToxMEIzMTAwMDBCRTkxNkEzQ0U3REI1N0Y5MzczM0Y4QjY5MUZDNkY4RUIKLToxMEIzMjAwMDc0NUZBNDAzRTE2Mjc5Rjk3NkU5Q0IzMUJCNTFFNkY4QTkKLToxMEIzMzAwMDc4NzM0MTc2OEY3MUNFOEY3ODlBQjkxOTU4NUU5M0FCMzYKLToxMEIzNDAwMEM2RjJFQURDMUM3Q0JGMkE1Nzg3NzA1QjZFMkVDMjU3QTAKLToxMEIzNTAwMEU1MUFCMUJDMzI3NzM5M0U1Rjk5QkIxNEUxRDZEQzEyRjUKLToxMEIzNjAwMDJDNTdFNDE2RTFGM0U1QjlBQjEwNUU5NjVCODlGMEQyOTkKLToxMEIzNzAwMERDNkEyQzk3RTREQUIxNUM5QzdCMkZCRTVGOTRCQjFFMjkKLToxMEIzODAwMDYxMjNGNzQxMkMyRkNEREQ4ODY1NzNFRTIzRjg3RTdFOTcKLToxMEIzOTAwMEVFNjY4NDJGQzk2RDQ0Nzg1RTZFM0RDMkIxREM2NzEwRTUKLToxMEIzQTAwMDlFOUJGQjE0OTY0REI5RkY4QTY1NjNFRTBFN0NBRkU3NUEKLToxMEIzQjAwMDNFOEZGMEM1Qjk3QjEwQkUyOEQ3ODc3MDQzQUUwN0UxM0EKLToxMEIzQzAwMEZBREM1Njg0RTdFNDg2QjE5QzlEREI4RDY1NUQ2RTI3RDMKLToxMEIzRDAwMEJFOUY5NTdCMDhDQjk5QjkyRkUxRjNFQURDRTM1ODZBNkQKLToxMEIzRTAwMEI5QUZGMjdCQTA5RkMyMzI5Q0ZCMjY5NkExRENEM0Y4QkEKLToxMEIzRjAwMDVFQ0Q3RDA3RTE2MEVFREI1ODA2NzIyRjYwQTlFNDBFOUEKLToxMEI0MDAwMDYzNTk2RTlFRENERjJGODkxMUU3QkU3QzBEOTlFMTkwQjgKLToxMEI0MTAwMDhCNTUzOUU3QkU3Q0Q1Nzg5MzAzNUVGOTZCRTdCRUJDRUMKLToxMEI0MjAwMDYyNkNCMTAzNUU3NkMyQjkyRjJGMzlERUUxNzhCRkU4RDYKLToxMEI0MzAwMDk4NzM1RkJFMzRFQkRDOTdFNzY3M0VFQzgwRTdFRERCQUIKLToxMEI0NDAwMEUwQTgzRjM3RkQ2OTA3REM5OEJBRDM1MUZGNjJDQkI5NUEKLToxMEI0NTAwMDJGMzc2QzcxRUVDQjczOTIyMzBFQjg2RUYzMkU0N0ZEMkYKLToxMEI0NjAwMDU5RTQ2MTg3N0Y1OERENzVDMDUxQkZDQUZDOEFBMzdFNEQKLToxMEI0NzAwMEE4RjUxOUQ3Qjk0OTg2RTk3OUUzMzlDNzczQTVGOTQ4MTkKLToxMEI0ODAwMEMxRjM5NUQ4OUVFQjNENkY4MDNFRDEzREZDN0I3QTdFMkIKLToxMEI0OTAwMDRGMkJCRjBGQ0QzRDlGMzU1QzBGQ0NDODMxQkYyOEMyQUQKLToxMEI0QTAwMEQ3NUQyREFDQkJCQzdDMjY2QTNGMzQzNjQxN0UwOEI3RTUKLToxMEI0QjAwMDFGNjYzNEU5NEYxRkE1RjA1QjREQjJEMTQzNjFEQjdFQkYKLToxMEI0QzAwMEIwRUI5N0ZEN0IxNEZDM0I3RDFGN0NBN0FGQTNGRDgwRjkKLToxMEI0RDAwMEY3QjdERjdENEFDMDdCMUU2QUU2MTA3RUZFREZEOTA5MjIKLToxMEI0RTAwMEZCNUEwQTZDNjk3NjdGMEVERUU3OTM2QUUwRUZDOUZBRDEKLToxMEI0RjAwMEVCRjA3RDIzODM1RkQ4NzZFRjFBODhBM0E2QkM3NkZCOUEKLToxMEI1MDAwMEFGNUUwNzcxOEI5NDlGQzEyRjZGNUIzRjA4RUY2QkFBRjMKLToxMEI1MTAwMDEyNzVCMDlGRUUyRDcyNkVGOTczOTU3REJGQUVBQUU2REYKLToxMEI1MjAwMDRCNkFFREU0RkREMUJGODgyNEZFMzdDMEI3Mjk4OThCNzMKLToxMEI1MzAwMEUxMkE2RUI4QkYxRUVFNjdCRTU2MzI3RjAwQ0YzRjIwQjUKLToxMEI1NDAwMDk5M0Y1NDcxNUY3MEZBMDVFQjIwQTdCNTE2RkZBRUM0QTIKLToxMEI1NTAwMDJCMkFEQTRGODc3MDNGQUE3OUVGMzZGQ0ZFMzMxNUEyMEIKLToxMEI1NjAwMEY4QThDNUYxMzlBNjhBMTNGQjBEQjFGNzlCMjY4QzkzNzkKLToxMEI1NzAwMEEyOUQzN0Q4NDBGMEJFRjg1NDc1REM4MkZCRkJBQ0VGREYKLToxMEI1ODAwMDI5RTRBMDAxNzRBNzU5MTIxMkNGM0I0QzVEQUFEQjcyQ0IKLToxMEI1OTAwMEUxRDg5RkUwOUVCRjBERjQ3RDMwQTFFQTYwODdBOUU0NjkKLToxMEI1QTAwMDM4RTY1NTg0QzkzODk2MUFEMTA0QzczRERBMzZGRDBEMDAKLToxMEI1QjAwMDhDN0VDQTk3NzFBMDRCMjZFNkExMzE3RURFQ0VFRkE1MjgKLToxMEI1QzAwMEZFMTdDRTk3MzdENTY1QzVGOUYyMUVGMTNFQTJEMUYxMkYKLToxMEI1RDAwMEY3NTMzQjExRjZDNUZENTA4MUQyRjE3NDk0RkE5RDAyRTgKLToxMEI1RTAwMEUwOTk4OEI3NjBCRkVDN0UwOEZCN0UzOEU5RTRCN0YxRUMKLToxMEI1RjAwMERFMDYzQjhFMjM4OTZEOURCODNEQjczMEJCQUY5M0ZFMTEKLToxMEI2MDAwMDAzQkJBRjM2RUVCNDIzRERERjk5NDhBRUI4Q0U3NEUzQUEKLToxMEI2MTAwMDM4NTUyMTc3MUM0N0M1NzNFMjMzNUQxRUJDNTdCMTU4QkUKLToxMEI2MjAwMDNGNzYzQ0U3RTlBRUQyRkVEQ0Q3Rjk3QUZBMUFCRjE3Q0IKLToxMEI2MzAwMEU0MkJGQzFDRjc0OTdFOEVGQkI3RTBDRkQxRjJDQkUwQzgKLToxMEI2NDAwMENGRDFGMjAwRjg3M0I0Q0M4MDNGNDdDQkM3QzA5RkNCQkIKLToxMEI2NTAwMEZCNkVFNEIxMjJGN0JDNUM1MjZERTcyQjZDNDFCQjNENDUKLToxMEI2NjAwMEM4RUZEOTIwNjQxNEVENzQwOUVDNzQyQTU3NEYxRkVEMEMKLToxMEI2NzAwMDlEMTlBMzdDQTdCRTA2RDJCN0Y5RkEwRUZDOEU5RjBFQzkKLToxMEI2ODAwMDYxQzA3N0ZFQjdCRkYxRkFDQ0ZGMTI4MUFGNkZEOUY3NzcKLToxMEI2OTAwMEMzQjQzRUU2NDk0QTJERUVFRjQ4Q0E4QzIzOTlBODE3NTkKLToxMEI2QTAwMDgyRDQxRjQ4MUJDNUY5MzNFRDdFMTUxM0FGNkM5QjdFMEEKLToxMEI2QjAwMEJGRUMzRTlGQzk3NUQzODlGOTI0NDE0RUI3OEY3QzA3RjMKLToxMEI2QzAwMEM3MzlDM0ZEMTkyMkQ2RkYyRkNDOEZCQTQyMjJBNUJFOUYKLToxMEI2RDAwMDBGOUMzMkNFMzRFNUVGRTM2NUU0MEZFRUNBNDRCQjMzOTIKLToxMEI2RTAwMEM5RTY2M0UxNzNDN0VBMEFERDBCNjFDQjYxQ0Y2QjNFNEMKLToxMEI2RjAwMDhDQUIwRTdEOEZGRDFEOEFBMzBERjIxQzg4NUY4QzFFMDYKLToxMEI3MDAwMDdFQjExMUJGNUZFNEYyRDg3N0Q0OTk3RjUwOUYyNDQyNzUKLToxMEI3MTAwMDdFQkYwRjc1QjMzODQ0NUY4NEY1QUJBQjJDNkZDMTRENjIKLToxMEI3MjAwMDhGRkQ1RDUzQUE0QzNFQzM4MzdDRENBRjA3Q0RGQjQyNEIKLToxMEI3MzAwMEE4MEZCMzc4RUZFM0MyRTc5NDhGMDBCRThGREVBMTE0QTkKLToxMEI3NDAwMEU0RjNENzgzODlGRTUwRUQ1NDNDRjNEQkUzM0QxNEM1QUQKLToxMEI3NTAwMERCNkYwQjJEMkJERUJFRTUxOUU1MTdBNDc0RkIzREE1QjEKLToxMEI3NjAwMERBNUZGNjE1RTU5MTMyRjgzRjVBMTg3RjZCM0ZCNEFCQkMKLToxMEI3NzAwMDhGQjJCRjRCRDY1M0Y3RkE4MUFEMTRERTdCMDdGMzg3NDgKLToxMEI3ODAwMDhGREVCQzBFRkZBRUMzNDAyRDlCQjcwMkZEM0U1MTBBQkIKLToxMEI3OTAwMEFGODVDRjc1NzU5NUMxRUIxQkE1RjlEQUQ1NTU4NkFGODkKLToxMEI3QTAwMDdGNUZBQTdEQ0IzMzVEMjdDQUYwRjVCQkE1RjlEQUI1N0IKLToxMEI3QjAwMEFGMENGRUZGQjM3MDdCRUI2MkQwM0JGNTNBOEJDN0Y1NjUKLToxMEI3QzAwMDM0NTJCRTUyM0M4NjZDQkVCQUQ2NDM4MTdFNUYyRTI3NzEKLToxMEI3RDAwMDZGNjVGMEZBNzlFOTc5MjkyQkFGQTc0QUYzQjVBQ0JDQ0MKLToxMEI3RTAwMEZFRTYwMkU1RjVDRDIyN0NERDBGNzg1RjgwQkNCRTdERjQKLToxMEI3RjAwMDgxRjJFQTBENUY5OEJDODZDMjI1RjU0MDU5NzlBRDJEREUKLToxMEI4MDAwMEQ1QkUwMjc5NkQyODg0QkY4RjA0NERCMEE3Q0ZCNEIwRTgKLToxMEI4MTAwMDczQUZDREVEMUVGNkY3OTEzNEE2RUY4MzI3QUZDMzdENEUKLToxMEI4MjAwMEI0OUZFRTUzMzM1QTYxQkYzRUI1RjdGNkE1OTNGQkIzMTEKLToxMEI4MzAwMDdCRkY3MUY3RTdERTNGNkZGRjk3MzU0NEE1RjAyMkJFMkYKLToxMEI4NDAwMEVGRDlGODA0NjJFRTdFNEFERjJGMzFERDcxMjVGRTc3RjUKLToxMEI4NTAwMDk2RUNGNkIzMzdCREQzRTMzOUY3NzdFOTI4MUI5RkQwRDEKLToxMEI4NjAwMEYxNTdFMzM5MjFCQjNGQjdBQUQ1MUQ5NzlDRUVCOEE1ODgKLToxMEI4NzAwMEVCNDc2RkI5MzA3QjYwN0REODc5M0ZENDlDMkRERkRDRkUKLToxMEI4ODAwMDdGM0FFRkRFQjAzOUZDM0IyRjJGRjkxMERFQ0Y0NDZFNEMKLToxMEI4OTAwMDYzRjk0MEUyOTZBN0Y3OUY1RTkyNzc0RjE0MTkxNUYyNkQKLToxMEI4QTAwMEYzN0ZDNERCNDZGNzlGQ0VBMzNCMDc3MTFGOEMxRjVCNjIKLToxMEI4QjAwMDk4OTcxOEQzQUVDNEZEQkREQzNFRkUyOERGRUYxRkU2MkYKLToxMEI4QzAwMEY2RUMzRTdFM0VCMTk3OUY0RkE0QjkzREZCMDAzRjlGRjMKLToxMEI4RDAwMEQ4QzZFREQ5MTE3RTNFOTFFMkU3MTMwM0ZDN0NFMjc5RjQKLToxMEI4RTAwMDdFQkVGMDVDRjczRTdDN0ZBODNCODNFNUI3QkE5RkM0ODEKLToxMEI4RjAwMEYyRDlFRTUxN0NGRjRDRjcyMTg0NDdCQkIzQ0MyRUJFNkUKLToxMEI5MDAwMEU3NTZDQzgzOURBNEMzRTQ3NERDOEJGN0JDRjRENzk3RDMKLToxMEI5MTAwMEI2Q0IxQjkyQ0U3OEM4OUNDRDAxRDczOTgxRjM5QzYyRkYKLToxMEI5MjAwMDU2OTczMzJGQjJEQTc0QzY0M0FBNUEyRjczREQ0N0VGMDYKLToxMEI5MzAwMDNDQTcwODM2NUZFOUJBOEZERTE5MEY5MTIzQ0U3OEM4OEQKLToxMEI5NDAwMDE1ODc5Q0YxOTAwNUEzQ0U3MzhBQ0I5Rjc0OUU1MzVDQTAKLToxMEI5NTAwMDlBNzFDNjQzRTZFRjczOUU1M0NDNEJERkVCQTgzRjM3OUIKLToxMEI5NjAwMEQ1RUI4QzlGNThDRTc4QzhBQTcxRTdGOUM0NTVCRjdFMzUKLToxMEI5NzAwMEQ4MTlGRjE5NzNDNjQzNTY5QzcwQzY0Mzk2MUQ3RkM2REYKLToxMEI5ODAwMDAxMkYzOUU2OEM4MzdDMjA5OEM4ODIzRTVDOTQ3NUM3NzEKLToxMEI5OTAwMDQzMzJBODRGN0ZBMkIyRjMzRERCQ0ZBNkY1NUYwQ0EzRTUKLToxMEI5QTAwMEJGQTk2NkFGQTJFQkJFNkYzM0JCRDdCRDhGNjg3RTBENUMKLToxMEI5QjAwMEY1RjA2N0QxNkZGMDRFRENDRjFDQ0ZERTFGOTlENDNGN0UKLToxMEI5QzAwMDNCQUYzREY1NTNGMDZCQkMyMTc2NEZFNUVEQzI3NTU5QTkKLToxMEI5RDAwMDkyRUZGNzc4REYxMkYyQ0YyM0E1ODg1MzRGOTRFRDVGRjMKLToxMEI5RTAwMDYyRjcxMDdBQzEyRkQxOEFDQkRERDQ3RUREN0VDOUI1NTYKLToxMEI5RjAwMDU5Qzg5M0YyMDI1RTA2RUExQjFDMjdDRjJGMTk0NkJGRDcKLToxMEJBMDAwMDY0OTY0NDRBRjlBNzUzQzY5OUE2MUU3QUQzQTU4NzI2RjkKLToxMEJBMTAwMEZDOTIyOEJCMkY0NTk3NDgyRkUwQjFGN0E4QTdFMEJEQkYKLToxMEJBMjAwMEJGQjYxRURBMTkyREJEMEVFRDNDOTc5RDVEOTVFNTYzMDEKLToxMEJBMzAwMEVGM0M1QUJBOUUxREJGRDJGOTdERUM1RUFERjBCOUY3NkUKLToxMEJBNDAwMDhCNjE5NjU3RjlDMTJBQzJGREU2RkYyRjNGRUZBNEZDOTgKLToxMEJBNTAwMDVDNTlGNTlGNDY3RTc4RkM3MkUzMTA3Q0NGMjRCQjYwNzYKLToxMEJBNjAwMDkxQzNFMUFBNEZBRjgxRUY5QkI2MTA3NjBFNDQ1RTYxQTEKLToxMEJBNzAwMEY3QUU5NjFCMjdENkY2RDFDQUVFRjVEMzk4QkNDNjVBQjgKLToxMEJBODAwMDU3NjFGRTI0REUzMzU2MkEyRUUxQkE1N0NEQUI1QUYwNjkKLToxMEJBOTAwMDQ3RjcyNkZFRkVBM0JCRkVDRjZCNThGQzI4RDZGNUIxQjgKLToxMEJBQTAwMDkyRjZDRDQxQkVGRjdGODlFRkZGMzFCM0Y0QkRCQjhGNkUKLToxMEJBQjAwMDcxRkM1Rjc4NzUxNkRBQjU3QjZGNjM3QTVCRUFGQTg3OUIKLToxMEJBQzAwMEMzNjA5RjhENzJGOUY3OTFDRkY4NUI4MEFFREIyNDAyRTMKLToxMEJBRDAwMEU3QzM3MzQxOTY2OUZEOEI1NTkyODE3M0QwMkRDNDQwQTUKLToxMEJBRTAwMEI5QTYzRjNDNUZCNkZCMTc2RjczREE1QjdGQjBGOTE0MDIKLToxMEJBRjAwMDJGQ0Q1N0ZCOUU0Q0Y3NzMxRkY5NEUzQkYyNTcyN0M5Q0EKLToxMEJCMDAwMDg3QUJFMTVBRjUyRkM0RkQxNDlFNTM0QjEwQUZENDFFRTIKLToxMEJCMTAwMDAzRUQyRTk5RTJBMTE1NThBNzZFN0NFQ0Y1Njk3RjRGRDUKLToxMEJCMjAwMDJBNkRCQURBODJGNjczMDQzQkVFMTQzNDIwNEZFNzhDQTgKLToxMEJCMzAwMEFBOTZCQ0ZGNkQ0QUJGRDM1QzhGNUY5QkIyMUU2RkU4QjUKLToxMEJCNDAwMEZENDk2NEYyRkUyQkIyODVGRTk2NEZERUVGNTk2QzNENDcKLToxMEJCNTAwMERBRjAwQkFGMEVFMTc3MkQyOUQ1QkUxRkQwQkU0RjhCOEIKLToxMEJCNjAwMDk0OEM5QjZFRTU3QzFGRTZGOTJENUI1QjNBN0E1Rjg3RDAKLToxMEJCNzAwMDczNTNCQTVFRjJEQjA1MTczQzhCNzFDNzdFRUQxOUJDQkYKLToxMEJCODAwMEM3Njg5QkMxQkVENzU2MTcxRDU1QzAxRUU4RDc4RUUwQUIKLToxMEJCOTAwMDdENzFDMUZBNzQyN0RDMzcxOEE0NzIwNDNBRDAzRjZGNjQKLToxMEJCQTAwMDBGN0ZCRjBCREZBQkY1OTkxNDlDN0ZBOEYwOUVEMjM1QjkKLToxMEJCQjAwMEQyRkNDQTYxRjg5QzNCNTBGREU2RTEwRUE4NUYzRjdBREIKLToxMEJCQzAwMDBDREVGQjM1ODJFRDI1NzVGNDc4MDdDOEQ5NjY4MjdGRDcKLToxMEJCRDAwMDZGQ0JFMkY3MkEzNTY0MzVDQzVCQjg1ODY1MzA0OUQwNzUKLToxMEJCRTAwMEY3M0FCRUQ3NTY1Mzc4NzYxNzdCNkZBODE5RjRENzQ4MjMKLToxMEJCRjAwMDMzMzE1OTdCOEExRjg1QTM0NzM1OUNERjk5NkEzQThFN0EKLToxMEJDMDAwMEZENDc1OEZCOTlDNkIzMjZFMDMxMUM2MzdGQ0Y0N0VENTMKLToxMEJDMTAwMDIyOEYwMzFGMTZBOTBDNkZGOENFOEM4REMzRTk4OEIxNTMKLToxMEJDMjAwMDcxQkM2QTI2REQwMTdBQTZERUM2OTNDMjEwMzc4REIwREMKLToxMEJDMzAwMDcxNjQ5NTdEMEY0OUM3QzdGQkE2N0MyQURCMDcyN0Y0RjMKLToxMEJDNDAwMDRFNTcxOEM3M0IxMzIxOEY5N0ZBN0IwMUY2N0E3RjlDREEKLToxMEJDNTAwMERCRjlGQkI5OUQyRjI5NzNCRTc4M0FFRjNFODY3RUZFNTUKLToxMEJDNjAwMEY3NDIxQjU1RTc3Nzk4N0ZBQzYyRUJGMUM1MUE5NjY3RjAKLToxMEJDNzAwMDU2RUUxRTQ5RjI1OTc2M0VGREZGMDBEN0M2MkMwRTAwNDcKLToxMEJDODAwMDgwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJDNTNENzUKLToxMEJDOTAwMDBCNzg1NEQ1OTk2N0VFREM3OTY1MjZFMTI2OTkyNDkzRDMKLToxMEJDQTAwMEQ3RTQyNjI0MTAyMUUwMDAwMTQxQjE5RDQ0NTQ1NEQ0MkUKLToxMEJDQjAwMDg4QjYwNjlGNDM0MDlFMDEwMjZBODkxNjlCOUIxNzI0MDMKLToxMEJDQzAwMDIxQzBBMDJFNDQ1RTk5NjA1MTU0RDBDMTgyNTJBQkVFODcKLToxMEJDRDAwMDgwMjlDNUQ2QjZBOUY1NDE5NURBMDgxODE1MDE1MzJBNjkKLToxMEJDRTAwMENBRUVFQUJBRkZGRjlGN0I5M0I5OTM0OTgyQjVCQjlCMkIKLToxMEJDRjAwMEVGRDNDM0I5RTdGREJGQ0Y3RkZFNzM4NjMxQzZCRUNEOUMKLToxMEJEMDAwMDgxRkZDRDhCNjEyMTJCQTMzRkNBRkIxMjU4MjgzRjJDMEEKLToxMEJEMTAwMDVGOUFBNkNGN0I3MkY0Rjk4MjExRkE3Q0VFNTg3RDdGOTAKLToxMEJEMjAwMENFNEI3NUU1NUY1RENGNTg4NzAzMzJBMkQ3Q0EwQTIwOTQKLToxMEJEMzAwMDM5RjJBMEI1MjQ5NkIxQkE4QzFBMkI4M0VGRTdFRkQxNzQKLToxMEJENDAwMENBOTkxREYzQjk1MjhDQzA5QzhDQjU5NjBBODEyNjAzMDIKLToxMEJENTAwMDYzQzExNTM1MEQ3OTg1OENBRENDMTAxODkzMjE3NTREQzcKLToxMEJENjAwMDFGRTI4MzdBREZFMkRGMEZGQkE2REJBQjE4MEIwRDY3NjgKLToxMEJENzAwMEFDQTlDQTRGNjk2MzU1MEIwQjU5MTg1Qjk1MzE3MEJCNjEKLToxMEJEODAwMDAwQjY4MzdBREJBQUFDOTQ2RUE5OTJBOEZEQTYyQTE3MDYKLToxMEJEOTAwMEU1NUJBQTY0NEEzNzU0RTU1M0VBQUZGMjUwNUE1NzM1ODcKLToxMEJEQTAwMDkxRUFBREFERjI1MkRBNUMzNTk1RDJCRDU1MjU1NEZFMUYKLToxMEJEQjAwMDdDNTUyOUU1ODM1NTNFNEE5RkFEOUE0N0RGNzc1NTU1MTcKLToxMEJEQzAwMDUwRkVFOUFBNEFDQUFGMUUyM0RENUUwMkYwRDk1OUE1OEEKLToxMEJERDAwMDUwRkU4OUFBMDY0QUFCMjU1OEY3NzgyOEJGRDJFM0MyOUQKLToxMEJERTAwMEYyREEyQjU5NjkzMENBM0FBQTI1MDNENTVCMjMwMTJDMTQKLToxMEJERjAwMDkzMThCMzMxOEY2MDA2QjgzMUM4RUYwMEI4MEQ1NTNDQzkKLToxMEJFMDAwMDM1MTZDODI3REZDMTA4OEU0MzJCM0MzNTY2ODBCMzM0MTYKLToxMEJFMTAwMDg1RTdEN0UxMzhEMEFFOTIzMTJGQzM3NkI5MkNCMDIzNjUKLToxMEJFMjAwMDlCQjE5QzA2RjY5NjAxRjJBRTdDQTlDRDk4REQzQkRFNzcKLToxMEJFMzAwMEY1RUE3ODUwRUUxMkE4OUMwNUIwRkNCOEQ5N0I4Mzk0NDMKLToxMEJFNDAwMDg0RkQzMTJBMUYxNkVBMTQwMERERUNFMkI3NDIzNTBFRkMKLToxMEJFNTAwMDE4NjdENDFCODExQTIzRTQ0NzRFNTYwNDRDNjMwQkZEMkMKLToxMEJFNjAwMDgyQUYwMEYxMkExNEUzMzhFNzU2MDhENDhGNUNDODA0ODcKLToxMEJFNzAwMDAxRTYxNzc0NzEzQTU4NUQwNEYwMDk1QkI3RURGQzM2QzIKLToxMEJFODAwMDE2MUFDNzU4QzM4QUU5NDNEODAwNzg0RDI5MTU3QUU5QUMKLToxMEJFOTAwMDExRkU4QkY3ODZEMTNGRkNENzEwMTIwRTFBNjE5QzczRUUKLToxMEJFQTAwMDQwNkYyQ0JCRkY3RTJFREVBRkVGNjc1NDMwQTI5RkQyRDcKLToxMEJFQjAwMDgxRTczMTcyQTdCRUZENDU4MTg4RjY0MEQ3QzgxRkZERDYKLToxMEJFQzAwMEI1MUY3NkZFMDY1QTZGN0Y3NDdDQ0E1QzU2MjU4REVGQ0YKLToxMEJFRDAwMENEOEJFNzdGQzA0Mjg5OENCREVEOTAwODBGMDlENzM1MjcKLToxMEJFRTAwMEJCMTBDRUYwMzcwNUQ3MkI2NjMwODIyQkEwM0I1NDA2MTMKLToxMEJFRjAwMDc5MTNGQ0FCMDlBQThBMDU5Mjk3OERDNjU0NTY1MzhGQzUKLToxMEJGMDAwMDk3QzU2MUVBNTVGMzI1OTQ3RkRERTQ1QjgzNzgxNjI1QjgKLToxMEJGMTAwMDFGQzNGOTIwRDkyMDVGQUZCRTA4RkU5OTg2RjlBQzA2OTEKLToxMEJGMjAwMEVGNjRDOEZGMDhGRTc5Mjk2MzM3NEEyM0E2MkE5MEZGRTkKLToxMEJGMzAwMENBRTQxMzJBNjFCQzNERDk0MjYwM0JDMDdCNzlDRTU4MkMKLToxMEJGNDAwMDkyMDNCNThFODFGOUIzNEVFNUNGOUVGNTQ5MjU1RTAzODgKLToxMEJGNTAwMEY0OTM1RTJFOEQ0NTNBRUFBRkREQTNFNUNGQkYzRTBDRUMKLToxMEJGNjAwMEVBMjk0RUMxOTMyN0Y3MkRERkE1RDJGMUEzMjVDMjE0RUMKLToxMEJGNzAwMDA3QzIyMTkzRDNCMUI2OUVDOEZBQjBFRTVEQjg2RTkzRjYKLToxMEJGODAwMDkzQUYzQkU5OTYxMjRBNzM3NzVENjMyRDE5MDVFQjhCRUUKLToxMEJGOTAwMDFGOTgwRUI2NDRBQzIzMDMwNjBBNDZDMUZCNDk5QzE3MDIKLToxMEJGQTAwMDhDOTNGQkM2N0MxQkY1M0I2M0UwN0UxQjU1Qjk3NzNFNEIKLToxMEJGQjAwMDIwQjAwRUM0QjM1ODQxRjIzNkU5MTYxRkNCODU3NTM1NTMKLToxMEJGQzAwMEE0MEEwMTA3QUNBQkUxOUI3QjFCQjIxMTFFMDcwNDkyRDQKLToxMEJGRDAwMDBCNDlCNzU0MzA1RjQxREY3MUM1RENFRTZBMDFFOUYyMEQKLToxMEJGRTAwMEMwN0MyNkMzRjgxNjU3MDU1MzBBMzBBRkM5NkI5RjAxQjIKLToxMEJGRjAwMEU3OTMyQzQ5NTc1MENBMDI1RUVDM0Y3OTg1NEZDMTcxRDcKLToxMEMwMDAwMENEMkUzRkMxQTUyMUI1QTdCRTBEQkY2RjA4MDkyNERGMDYKLToxMEMwMTAwMDU3Q0FDMDZGMDY0QTk5MDNGOUJFODI1MTNFMjNGNTYxQTMKLToxMEMwMjAwMDFBOTc3RDBERjM5OTAwRkRFMEJGMDFDMTk2MENCRjE3NzMKLToxMEMwMzAwMEU1NDFDMzQ1Q0M4MzcyQzQ5NkNGOEFDQ0Q5MjhBNjBFREQKLToxMEMwNDAwMDFCNTBBRUQ5MUU2MDlFMjY5QzZGRUExMzBBQ0EyM0U1RDgKLToxMEMwNTAwMDcyNDZGODA2MDVDNzEwN0UzMEJFRjUyNkMwNjc3QUNCNUIKLToxMEMwNjAwMDY4RTIwQjVCNkVDODgwRUJCRURERUNFQjQyN0M2QUVCRkEKLToxMEMwNzAwMDM3QkIzQTA5MUUwRERGMTg0QkEzRTFFNTM3QUE5Q0NDNkMKLToxMEMwODAwMDQ0QkM0NUMxNDc2QzNDOTdENzVGOTk4MkQ3QTAxQ0RENjMKLToxMEMwOTAwMDkzMjRCMEVEODZCRUY1MkM2QUJEQ0RDRUU5N0Y5NEU1NDQKLToxMEMwQTAwMDVFRkVENENBREZDNjQ1ODZGMTczRkE3OTMzQ0QzQkY3MUQKLToxMEMwQjAwMDk2M0I4N0UwN0FGQUEzODM1NTJBN0RBRDFCQzJGNTQwRjMKLToxMEMwQzAwMEVFRTQzQkJEMDhFRjczRjA1RjUzOTQ3OTJDMTgyMjUzRDQKLToxMEMwRDAwMEJEOUVGNTNCMDU5RDVDQkFGMEY5ODkyNDlGNzI0RjM1RjIKLToxMEMwRTAwMDkyN0VGRjJBN0I2MDdBNkQ1MEU3Rjk1NUE2REUzRTEwRkUKLToxMEMwRjAwMDcyNUIwOENGQUI1QzgwNEYxOUVEMDQ4MUM1MDExQzVCRkUKLToxMEMxMDAwMDU1RkE4MDRGODRERjIwRThBNzI2QzA3RkVCOEFCM0I2QkMKLToxMEMxMTAwMDAyQzg2N0JDNkQ0NDMyMDE3QTk4QTdBMDFFQjE1REM0MDUKLToxMEMxMjAwMEU5NDE5MjNCQkQwQ0VDOTA5OEZDNkVBMkM3OEM4QTRFMDQKLToxMEMxMzAwMDAzQTY4MEY3QkNGOEYxNDgwRjEzNzRGNDcwNDZENTlGM0UKLToxMEMxNDAwMEYwNTdFNzlBQTA4QTMyOTlGOEJFMjAxRUJFN0I3N0MxQ0QKLToxMEMxNTAwMDI0OUNDODBGN0M3QzEzRjMyQTY2OTIxNzk1MkMwOEUzNjUKLToxMEMxNjAwMERBREYzMkQyNzc5ODYxRThBMTQyOTQ1MzgyQTdDOTAzRkIKLToxMEMxNzAwMDc0RDA1RTkzOEM3QzY4NEZFMkYyNjVERTM1QzUyNEJGRDcKLToxMEMxODAwMDAwMDQ5RTREMzBFNkUyNEZCQjkyOTc0MERFRTNFMjcyNDAKLToxMEMxOTAwMDE5RUE1QjcxOUU2MjgxNTlBNzM3MDYxRDQ3RjQ4NjcwQzQKLToxMEMxQTAwMEZENzYwM0YzRjgzREZEQzNGRjNCRjc2QkY1MzI5NDhGNEIKLToxMEMxQjAwMERGQkQ1RjEwQTRDOTY4REU3MTM4MzIzNjU1QzE3NURCNEEKLToxMEMxQzAwMEQ1NzU1QkQ4QUY2ODlDNzMzODBFQzJERTk4RjEzQjg0OUUKLToxMEMxRDAwMEFGNzhCMUM4OEM1MUU4QjVERjcxOEM3NzBDQTgzRjJBRDUKLToxMEMxRTAwMDhGQ0VGRjYzN0I1OEZERDlGMUIxQ0UyRTk4MDRCQjg0NkUKLToxMEMxRjAwMDVERjIyRDEyOEVEMTIxMjBCRkEyMUQ0MEY2MDdGMjAwNjQKLToxMEMyMDAwMENDQTNCRTgyRTM2M0Y0NEI4NzUzQzNFOUZGQUJBQTc5QTcKLToxMEMyMTAwMDdGNkMwN0E1Qjk0N0Q1RkJENTFGNUE4QUIxRkRBQTVGMjgKLToxMEMyMjAwMDBCMDEwQkI0NkZDRjM0QTc3N0MyRjdFMDgxNDNEOTM4NDUKLToxMEMyMzAwMDJGNEQzRUQ3QjZFQkY1N0M0NjA1MzM4NEY3RkI5OENBMDUKLToxMEMyNDAwMDE3QjU0RURFQUZFQ0YwNThBM0YxRkI1QUI1NUU4MzYzMzEKLToxMEMyNTAwMDYwQkI2MUEzM0FFRUIzNzY2Rjc1M0NEMTc1Qzg4MEZDQzQKLToxMEMyNjAwMDM5RkEyNUVCRUQzOERGMkQ0QkFENTFFMUZDQUNEREQ3RDQKLToxMEMyNzAwMDE4OUZENDc3OUVFMUVEMTE4RjAzQjQ1RjNGNTBGQjgyOEUKLToxMEMyODAwMEU3QURFRkIzODFEQjNGMTYzRkJFRkZGNjIzOUVCNjZFRjAKLToxMEMyOTAwMDFFNjRGRTZERDFDNzU3NUFCMTVEODZDQkNDOTBDRUFCMzQKLToxMEMyQTAwMDUzQkJCNkFGODZGQzg2QTU2NjhGMDVFOEIzN0RDNjhGMDcKLToxMEMyQjAwMDVEODhCN0ZBMjQ4RUI3MjhGREVFMUE2ODVFQTM1RjJBNjAKLToxMEMyQzAwMDJEMUQ2NDVFN0IwNzZCM0YwODVDNUYxRTE4QUVBNTQ3QTMKLToxMEMyRDAwMDA2ODE2QkZCNDBFRDQ3M0M1RERBMzJDOEZDREY4ODNFRUYKLToxMEMyRTAwMDdGMjUwQkU1NEU4NjZDMjYzRDUzOUQwRDcwNDUzOUFFN0UKLToxMEMyRjAwMEMxMzU4MjFGQTJGNEZCRUVDMDcwMTk5NDVFRkZGNjNEQkIKLToxMEMzMDAwMEU5RjVFMzgxQzZCRjAwN0FGRDdDNjBCODBFNEFBRjVGRjUKLToxMEMzMTAwMEY1NDdBRjM4RUZFRjQxQUY0MkMyODA3MDE5OTQ1RTYzQ0EKLToxMEMzMjAwMDEyQkUxRkJEMjYwQ0Q0RkUwMkU4MzU2REEwRjk1RjAwRDkKLToxMEMzMzAwMEJERTY0NDFCREZDMkVDNUUwNUVEQTIwMkFFQzdFNzE1MDkKLToxMEMzNDAwMDA5NUNBRjRCNUNERURCOEY1RTREN0FCNDBFRjQ1NEUyRDkKLToxMEMzNTAwMDQ0RDREN0M3MzYyQzJFRUNENUNGOTFGQTI3QjJCRjQ4OUMKLToxMEMzNjAwMEZEQjlGOEVGNTc5MTlEM0I0NkQ1N0JEQTdDNjI3MjIzOEQKLToxMEMzNzAwMEZCQjk3RDQwRkJFRUJCOEUyQkJBNThDODE2RDdEQjNFMEYKLToxMEMzODAwMDZERjZCRjdBM0NCRDdFMTdEQkY5RjgwQ0M2QkY2MjIyQTIKLToxMEMzOTAwMEVBRDU2OTFFODRGNzkwODk2NjlENURGOUREQzcxREI4RjEKLToxMEMzQTAwMEJFRUI4RUVGNjcwRkNDNDkwMDdCNjA2NEFGM0Q5MDVFQzMKLToxMEMzQjAwMEY5OEJENjEzODlCREZEQTQ4QjI1NEM3MkEwQkQ3NzhCNUMKLToxMEMzQzAwMDE3RTk4Mjk1MzNDRjBFMkNBRURDRDM3QTYyNUNBRjNEOTkKLToxMEMzRDAwMDAwRjAzN0RDMTRCNjZGMzQ5NjA3NUI0Rjg0QURGQkZDN0UKLToxMEMzRTAwMDZDQTZFRUNGMTRCMjc3NzNBNTRCNDlCRjBGQTZDN0I1QTUKLToxMEMzRjAwMDdERTMyNkY0NEYwRDQ3N0Y5NEE0RkFBMzVDQUEzRjRBM0QKLToxMEM0MDAwMDU2RkQ1MERDM0ZENThDRkUyOUYyODM0REU0NzY4MkVBNUUKLToxMEM0MTAwMDlGQUE1N0ZENTMyRkFCRkVCMTk3NTRGRkQ4RkVBQTAwMzkKLToxMEM0MjAwMEE1MkY1NEVEQTQ3NDZGNTU5MENBOUZBRkRBNEZGOTYwRjEKLToxMEM0MzAwMDU1ODhGMkRCMUU5ODIzMjMzRTdCRDdFMTU1RDdBMUY5MUYKLToxMEM0NDAwMEY1MDZCNkZCMzMyQkY0N0U5MEY0Nzk3QTNGNDgyQUZBNEUKLToxMEM0NTAwMDIzQzNGMjI5RTFGRTQ4ODZGRTlCMUM1REY5OTA4OTIzRTcKLToxMEM0NjAwMDc0RTVCMTlFQjFCQUJDM0RGRjUyNUQ3RDlCNUNBQ0NCMjcKLToxMEM0NzAwMDlCOUREN0VBRjIxN0VGOUYxRUUxRTdCOTRENTczRTcyMzkKLToxMEM0ODAwMDY3NTk4NDFGNjc4MUFFN0M3OENCMzI1RDNFQ0ZGRkEwQjkKLToxMEM0OTAwMEFFRkVEMDg2MUE1RDc5QjZEMkE0MkJCRkJDRkI2MTVEMUYKLToxMEM0QTAwMEZFQjI0RjM2RTlFQTRGRUFEQ0FFMkJCRkU0QzhEM0JBOUUKLToxMEM0QjAwMEYyRjExRENGRUJGMkUzMEVCRkE0QUI3RkEzRERGNzZCNzAKLToxMEM0QzAwMDk0ODc2MzQyMDcyM0VDRjQwMEM5RDMxMEM4MEFEQ0ZGNDkKLToxMEM0RDAwMEI4NTc0ODU3NzhBM0UwRjFCRjg2RjA3RDJCRDhFRDQ1REIKLToxMEM0RTAwMDY0MkY4MzNDNkIxQTgzRUQ5NTEyMUJFNEQzN0YwRDM0Q0MKLToxMEM0RjAwMDI3RTM5NkRENjc2MDQzMjE2REQ3Q0IxRjYzRjk3N0UzQjAKLToxMEM1MDAwMDZCRjQwMDYwN0QzN0ZDMjE1RkZFOTdCNkFGREQ2OTUzQTkKLToxMEM1MTAwMDdFODBFM0ZCQjgzQzU2QTQwMDhCRDY0RkFENkFGRkU2QTUKLToxMEM1MjAwMEVFOUMzMTg0RTg1MzJBOTZBMkM5ODVFMzY2REYyN0UxQjEKLToxMEM1MzAwMDdBNDY3NEU4RTkzNEQ3MUJDQkJDMzg1RUI5RTYzN0UzRkEKLToxMEM1NDAwMDcyQ0ZDOEFCQjBGNEEzNTcxRjM2QTA5RkFDRjRENTc4MTgKLToxMEM1NTAwMDlDQzczNjc1REMwNjk1NUY1NzIyOUYwRUM3RjU1RTE2QTEKLToxMEM1NjAwMEIyQTg3MERCMDRGMjk5MTkyNzdCMDY5MjUzOTFGMEZBNzYKLToxMEM1NzAwMEFFNzJDRDkwQTg5NzZCMjA4RjQzMUZBMUZDMkUxNzAzOUUKLToxMEM1ODAwMDAzRURBRjM0Nzk5NkZCRDZERDAzRTI0NzgzQUY4NjQ3RjAKLToxMEM1OTAwMEEzMjQ1RDgxRjJDMTk2QUJCMDMyNDc1RjM4MTk2NTRFNzYKLToxMEM1QTAwMDBGRkZEQkVCOTYyM0Q2N0Q4RUJENUNFNEM1RjMwOUU2NzkKLToxMEM1QjAwMDg5NEEyNzNERUIyREJEOEJENkExRTEzM0IyREUwRTU1NjYKLToxMEM1QzAwMDBFM0ZBRUUyQjU0RDk1QzM0MkIzNDc0MDNCQUM1NTk1RTcKLToxMEM1RDAwMEM3QzJBM0RFMUE4NDczMUVFQ0E3NzEzRjY4NkVBRTA4NTMKLToxMEM1RTAwMDU5MDFFRkE2MEM0NjdBRDJFODA0Mzg4Q0VFRUQ3N0Q4RTQKLToxMEM1RjAwMEEzN0FCRjRCNkVCMzVFMkVFNkQ0MjVFOEUwMjFBRjQ4QTgKLToxMEM2MDAwMEZCNEVGQUI0MkZERjVENDZGNjhENDY4NzgzRjExRjkyMEQKLToxMEM2MTAwMEZDQjc0M0ZGOTk3MTJFOENCRkRCNjcyNzUzRkYwRkFBMkUKLToxMEM2MjAwMEZDMEQxQ0NENTM4NUJEODlGNDUzMzY1MTI1MjAyNkRGRTIKLToxMEM2MzAwMEZBM0VDMDc1RkU2MTEzNDNGRkNFMEZCRjZFM0RCNDE1QzkKLToxMEM2NDAwMEQ2NjE5QzY4OTFEMERFMDE0RDc4RTgxNTI4OUZFREI1NDQKLToxMEM2NTAwMDk2NjA3RUZFRDE1MTY2Mzc5NEJGOTMwNjQ0RTBDMkYyRTUKLToxMEM2NjAwMDkyMzg5NDAzQTc5OTMwMTVGRDc3QTdEOTlCNzFFM0MyM0YKLToxMEM2NzAwMEY0RUVCMjQ0MzMxRkI3QzE3NEFDRDM4QUMzMkI3NDhFQUIKLToxMEM2ODAwMDc1OEY5RkU3QjU3NUNENkREMUU3RTdCMEU5QzkyMjhDMEQKLToxMEM2OTAwMDMzRTc1MTEzNDg1MjE4OTc4OUM3M0EzNTM4MDBGRUNCMTMKLToxMEM2QTAwMDEyMjVFQTc3MkVBQjU4ODk3NjQ0QkQ4OTkxN0Y3MUQxRTYKLToxMEM2QjAwMDhCQTNDQzY4M0ZDRjFGMjc2NTFCQzdGNENFRTNDMTQ0RDMKLToxMEM2QzAwMEVFNjczQzA5RjQyNjg3Rjk4QjE3MzgwMjY2MkZCNDNCRDYKLToxMEM2RDAwMEJFNzdEQzhGMkY2M0Q4NEY2MDY1MUFGQTNCRTNDMTFFMkIKLToxMEM2RTAwMDkxRkJDMjc3NTY4MzdFOUU4M0FEMjM3MkRFOENENTkwRkMKLToxMEM2RjAwMEJDRUY2RjFFRTI0RTgzMzcxMDg1MkYxQjEyQjk1RjVEQjIKLToxMEM3MDAwMEMzNjNBREY1NjdBRDlEMzA0RjZGQURDODZDM0Y4MEJDNjYKLToxMEM3MTAwMEM4Q0Y5OTk0QTNCMTgxMUQyOEJGOEIyQjlFRUM0NEJGMzkKLToxMEM3MjAwMDc0OEQ0NUFBODU3NEEzRkQ2N0NGNjFGRDRBNDAxOENBODAKLToxMEM3MzAwMENCM0Q4OTMyRjdBQkRBREMwMTNDN0Y2MEFDRTI5MkU5QjkKLToxMEM3NDAwMEIxREZCRkRGMTdCMERGQTQ3RjdEQkZCRkVBNjdCRThCNUQKLToxMEM3NTAwMEFDOUQ2NkU0RkYyNTYyQzU1NDgzODA3RTQ1M0VCRUM1MjAKLToxMEM3NjAwMEU0RjNBNkEzM0Y3MTdGNTEyODlERTlFQTM1NUM2MEJERTMKLToxMEM3NzAwMEMzODY5QzBCQUEzNzU1MThBMEJGMzNBQTdDRkJDREFFNEQKLToxMEM3ODAwMEM3Q0QyOENGNEUzRkZERTEwREI4MkY1QUY4MkIyM0IzNkMKLToxMEM3OTAwMDQyQkQzM0JCNjI1OTg4RUNCRTgwMTlFREJFMDU3QjhENkUKLToxMEM3QTAwMERFMDBFNTQzMTM2RThFMERFN0VCNUFFQTdGRTE3M0IxQ0QKLToxMEM3QjAwMEI0QUY1QUYwQkMyNTMwMEREQTJGNzhFMUY4NjgwNkYyRjQKLToxMEM3QzAwMEUwNEM0REY3QTE3NDg0REZEMzA2QjJBMzk5RDIzOUZBQjUKLToxMEM3RDAwMDY2RjhCRTQwNjQ3Nzk3NDRCMTgzM0Y0OEU0NzZDN0E5QzIKLToxMEM3RTAwMDVGREE0QjkxREUwQzNCMEZEQzQ1RkQwNjZGMzU1OUMyMUQKLToxMEM3RjAwMEY0RDhEQjg5MjZBRDFFRjlCRDk1QTcwQzgxM0MwMzlGQkIKLToxMEM4MDAwMERGNERBM0MyRTc1N0NERUIzREM1RkRCOTBCRjY5QjAyNEIKLToxMEM4MTAwMDM2OUNERkNFMzZCMzBGRUEyREQ5Rjk3N0EyRUYyQjlFRTcKLToxMEM4MjAwMERCMUQ4NzcwNThCMkRGQTg5MzZCMEI5RkZCNjZFNUE1RjUKLToxMEM4MzAwMDgwRTc4NTQ2RDYzRDhERjRGOEQ3OTQzRkU3QjU3NjFCNjMKLToxMEM4NDAwMDQ5MEU3OUUzMEMyMEI3MTY5M0M4ODI3QUJGRjhGOEFBOEMKLToxMEM4NTAwMEY3QTFGQ0E0Q0JDODZDMjAwQTRFNzY3QzY0RkUxNUU2REEKLToxMEM4NjAwMDdEOEUwQTUwNDlEMEJGOUUwRjk3RUMzQzZFQzY3OTQ5MjkKLToxMEM4NzAwMDAyRUJDRTAwNDZGRkMxMTc2MTdDQzlGQUQ2NjdBQ0RCN0MKLToxMEM4ODAwMDhDNzI3NjQ5QjBGMUVGNDZBMEI3MjU3QjRGQkY4Nzc0MTUKLToxMEM4OTAwMEI3MjQ4MjlGNEZFMjNGNTJGQkVBNEJCMzMzNTI1RkJFNTUKLToxMEM4QTAwMDMxMDFGREU2NkMyNzZDODIyNkY1QUYyRjM1RkU1RUI4QjAKLToxMEM4QjAwMEZCREMzNjA1QzYzRkY1RkM2N0RCMTQ0MDc5Rjk3RkZGRUEKLToxMEM4QzAwMDYzREI0RjYxRkVFQzU1OUI4NDcyNjlDOUQzNkZDN0IxQkUKLToxMEM4RDAwMDMwRjg2NzNCRjkzOUQzOTlBNzlFN0M2MjEzQzBFMUNDNEQKLToxMEM4RTAwMDVGMkMwNEI1MzNBRjdDRUM5NkQxMEZCRkU3M0Y5MkYxREMKLToxMEM4RjAwMERDRTlCRTU3QUU0QzQxM0FCQjZGREYxNTI5MDNFRDJCODcKLToxMEM5MDAwMDkwNkUwMzk2NzBGQzA2MDhCRkYyN0UxODI3MDVCMjJGQzIKLToxMEM5MTAwMEFCNjkwNDVFNEVFREY5Q0E4Q0U3MDk1RjFBNTgzN0NBNTUKLToxMEM5MjAwMERGQzVDMTZGQ0M3OEZFNzBDOENCQkExMTRFQUZFRDNERkMKLToxMEM5MzAwMDdFRTg0MUM4OUYwNjNDNTlBMkUwMDlENjlGMkU5MDVFMzIKLToxMEM5NDAwMDAxRjY4MTc0RjFERTlCNkZCQ0JDMTA1MzkzNDc0NjNDRUIKLToxMEM5NTAwMEIxNkU5MkY3N0RGMEZCMTZFMEI3QjAxN0JGOTFFNUU3MzcKLToxMEM5NjAwMEQ4RDc2Njg0RkY5MjVEODBDRkQxODg1N0MwRTdFOEJFRjQKLToxMEM5NzAwMEY4M0M4REZGOThENDE3OUY1RUE3REVCRjdEOEU5NUI3REMKLToxMEM5ODAwMDZFQzJDMkJEODk4NEZGRkVGMEI5NjhERjhGMDZCNEIzMDIKLToxMEM5OTAwMDM0RjkzMDE4OUNFNzE5RjhCQzFDNEU2Rjg5MzMwOUU5NEIKLToxMEM5QTAwMEMyQUVCODM4OUUwM0QzQTBFQ0NDRUU3MzZFMDY3NEYyMjAKLToxMEM5QjAwMDg5QTlGQjJFODQ0M0Y3MkIxNjA5Q0ZDOTE2QkNGMjJFOEEKLToxMEM5QzAwMEYxREQ5OTdEN0YzMjIzRkVFMTJGQ0UzMDAxRjJBQ0U3MUQKLToxMEM5RDAwMEVGNEQwNkY5QzVEQzA2Njc4QjU4Rjc1NUVGMTU2MkNBQUYKLToxMEM5RTAwMEJBMTUwRkUxOEZGMjg3ODAwRjA5MUY4MTlCQTZDQTI4MTUKLToxMEM5RjAwMDdGMDM0OUI0RUVDNTAxQ0UxRjhCMDMwNzZFMzE4Q0VFNjkKLToxMENBMDAwMDBCRjcyNkE3QTBFOUFEMUVCQzFBMjYyMjNFM0ZCQzBBQTIKLToxMENBMTAwMEU5QUYzRjdDNkFFQjk3NzBGRDk3NDBGOUNGRjVGQzFCQkYKLToxMENBMjAwMDU5N0YzMUYwMkJFRThGRkFFMDM3NzBFMDBGOTg5RTY5NTYKLToxMENBMzAwMEIzODgwNkIwODVDRTk4NzhCQzQ3MjRERTdCRTFDRkY1N0QKLToxMENBNDAwMEYzNzdCNThGRUI5QzkxRkIwMkRFNUU4M0QzNjBGQzNFRjcKLToxMENBNTAwMEQ4RkFCRTJCRkM5NjM5NjVFQTM3MTI4RUE3QkU4RUFFODkKLToxMENBNjAwMDBGMDJBQUZDNThDQzJBQTZBNjBERURBQkNGNDQ1NkEyQzUKLToxMENBNzAwMEE0NjdGN0NFNzc2NUQwNDg3MkZFRDQ0RUIwQzcwRDdENUYKLToxMENBODAwMEU1QzVFMjdFQ0VFMTlGNzU3MjNCNjZGMUZFMDNBMzUxRTAKLToxMENBOTAwMEFFOUQzQUY4NEI5NTJFMzlERDJGREVGNUExNTk1MUY1QjMKLToxMENBQTAwMDQzMjA1QzNFRjc3MzNFQkM1RjlERjc5Mjk3QTNGN0I3QjgKLToxMENBQjAwMDY0RDdERkEzRjY3NzUyRjRERThBRjMzRkQ5NjE2MjBBQzYKLToxMENBQzAwMDc0NzEzMjY4OUMxQUNERUVEQUVFMzRFOUVDRTc5NUIxNzgKLToxMENBRDAwMDEzOEUwQzgxNzZDNkI4MTgxOUQ3NUQ1QkUzN0Q1NzQxN0MKLToxMENBRTAwMDNCRTY0RDEzOURGRjMzRDFGMzg5MDVDQTZCNjM2MzY0NDUKLToxMENBRjAwMEY0RTdENUM2Q0Q2MTcyOTgxRUFGOEI4MDkzRTgyQUExNkEKLToxMENCMDAwMEYzNTVEMTU5NTJDOEY3NzQwMUREMzlCMDA5MDgyMjdDQjgKLToxMENCMTAwMERFQTA3NzMzNTAyRjdEMzBFNjYzMTNBRUYzNkYxMTc2Q0UKLToxMENCMjAwMEU0REY0NEI2MzIwNUZBRkI5QjYyRjA1NENCRDFGNjA3NDIKLToxMENCMzAwMEZBRkU3RDJCOEM0QzBFRUI3RkIxQTVGQjAzRjJDN0ZERkIKLToxMENCNDAwMEJCOERBMTVENjY3Q0Q1NjY0MDc5QjI2NDlCODlGNjVEM0MKLToxMENCNTAwMDRCNjAxQjg1NzBGQjc4QUIyREEwNDA3RUUzMkZBQUVFQzcKLToxMENCNjAwMDQyQkRGNEY5MzYwQjlFQkRCMkQ3RjYyREVGN0EwMEU1NDMKLToxMENCNzAwMEQyNjYwMzQzN0ZGQUU3QkZBQ0ZBMTJGNUYyRkMyRDQ2MEEKLToxMENCODAwMERDMkFCMkI5RjZFRTI3QjBGRERDRTdEMjU5MkRCNEZGQUUKLToxMENCOTAwMENDMTA5QzgwOUJEOUFFQTREMDA0REM4Nzc0RUQ0RUY1RkMKLToxMENCQTAwMDI4RDRDRjhCOEJCMURGMzNDRkQ5QTlERjMzRkZGRTJFNTMKLToxMENCQjAwMDhENzNFNkRGNjM0OUFGNjlGMzA3N0I1QjBFRDdFMzYwRjQKLToxMENCQzAwMDZGQ0IzRDdDNDBGNDFBOTY4NzcxMTY2MjlFRDczNzdDRjYKLToxMENCRDAwMEFCQ0EzQzk0N0YwQjMxMDVCQTVGQjg3Rjg4MTdGNzkxRDkKLToxMENCRTAwMDYxRjVBODlGMjU5NkVFOUY3ODY4RkZBREE0MDlCNDc3RkMKLToxMENCRjAwMDBBQTUyMTNGMkVEQ0E5MUZGRkJGNTU3OUI3QzREQzNEMzQKLToxMENDMDAwMDg3RDdGN0E3NzFCRUVEQTA3NkY2MjQ5NTVFRDVGMkM4NUEKLToxMENDMTAwMEY2NUE3RDVCNTI4RUFFOUVENjdFQjE4NTU1NDRFMzgzMzcKLToxMENDMjAwMDY0QjVERjg1M0JCRjE5QUVFRjRGNTFCRjQ3OEVDM0JGMjEKLToxMENDMzAwMERGNkY2MDBBRUE2N0I2Qzc0NkYxNjlFNUU2RDBCMDA0N0YKLToxMENDNDAwMEUwREIxN0NDNkMxRUYyNkY3OTVDNjg1ODNDOENGNzJCREMKLToxMENDNTAwMDU1NkU5NkM3NDAxRUJFQTdBOUYzQzBGQTk4NjdENkNFRjgKLToxMENDNjAwMDMzODhENzQ1MkZEQUU4NUM2NUQxMEJFRjdFODlGODNDMzUKLToxMENDNzAwMDg1MzAwNjhDOUQ0QUVBRjhGMkE3NDAwN0E3QjYxQTk5QjQKLToxMENDODAwMDAyRjZEQTIyNEJDOEJEMTlGNUQ0MUUwQkRCOEVGQ0ZENzMKLToxMENDOTAwMEVBRUJBNEI3NEUzRjZGMTFDMkUzRTIyMkQzNDU0MUEwQjUKLToxMENDQTAwMDA2NkJERjc1MjhDNTJDQkYwMkU2QTNBQ0Y3MEE2REI4OEEKLToxMENDQjAwMDZGMzg2QzBDNTRDM0Q4OTVBMkI3RTYzOTVDREY2MTEzQUEKLToxMENDQzAwMEVEMzNDRUNFNjZGOUI4QUYzQ0NCRDIzQzBBRTE1RjdFMDUKLToxMENDRDAwMDU3ODRGMkU1QkYzNTE5OUFBMjhDNkIzQTBGNEE3RjFDMzQKLToxMENDRTAwMEYwQzFGOUVCOTgzQzBFRTNDMDg2NTJCQURDNUMzMTFDMTMKLToxMENDRjAwMEU1QUU1MTgyQzUxNTkwRkY4MUVDNzY5M0QzQzNFNjQyMzEKLToxMENEMDAwMEJBM0M4MUY5MTA3RUNDNzE2RDBGN0ZGRDExNTBCQUVDRTkKLToxMENEMTAwMDMxMzkwNURCRkQyMDg5REJENUYzOTNCREQ3MjY5MTdFMjQKLToxMENEMjAwMDc0NDhBNDNGNTQzQTU1RjZGMTc5N0U2NTg4RjE1NDYzMEUKLToxMENEMzAwMDVDQ0VGOTA3RUY0NkY4MkVGQkQwMjA4N0M3OURGNEM2REUKLToxMENENDAwMDgzN0EyOEVFQUI1Mjk0REY5NTBCNjlCRDI0OEY3MkE1RDAKLToxMENENTAwMDE4ODY3MDNEMkIwOTc0QkU3MDc2QjYzQzI0M0U0QzJFNkUKLToxMENENjAwMEFGQUU5MjQ4N0UzNDU2QjkyODVENTU5NUNGNjRGMjZCQ0MKLToxMENENzAwMDdCMjg2RjU0RDc2RjI5NTA5ODExRkE0MTlFQzYzRjhCN0MKLToxMENEODAwMEEzQzQ4Qjc2MUVDRTA5RTM4MjhDMEUxRkQxMTFDNjM1NEIKLToxMENEOTAwMEExMUNCMzNBMThFRDYzOEQwRTg1Q0Q0NTNGQkY4M0MzMEIKLToxMENEQTAwMEM3RTgyODIxRjg5OEQ1QkNEODMyOERFMDA5RURFOUZCMTkKLToxMENEQjAwMDk0NjQ1RjQ1MTJFMEQzOUEzMTQyMjc5N0NDQ0VCMUJBNDIKLToxMENEQzAwMDdDMUY3ODY5RjhERkZEN0YwNTM3NDY3MDZBQUNCMjUyODgKLToxMENERDAwMEJBQUE2QTIyQzFBQkJFQ0E0QkY5RkYwN0I4NkRFNDcwQUMKLToxMENERTAwMEJCOTRDNzVBRjRDMEFENTg5N0VGMTc2RThGMDFERjM4NjgKLToxMENERjAwMEMzRjkwNkUwODg3Q0MzNjIzQzNCQTJBQzNGMzJERDUwMDUKLToxMENFMDAwMEM1MjhGOEU2RTFBQTE2NEFCNUVGMDlGREU4RUQyRjkzMkIKLToxMENFMTAwMEI4MUQ1MEM5N0NENTI2MUM0N0UyRkUxNkU2NTQ1OEM2RkMKLToxMENFMjAwMDg0NUVGRjI2NzMyOTRDQzYzQ0YyMkFFMkU1NDgwQ0MxMTkKLToxMENFMzAwMDZFRDk1RjZERTQzNzM2NEE2MjU3Qjg1QzVCNzZCRDlDNEQKLToxMENFNDAwMDgyRjJDQjU4RjkzODNCOUUxOEU2NDc5QjU2NjI5MzA5MEQKLToxMENFNTAwMEFFMUUzQUFGQUM1NUY1NjY3RDBGRkVGNDdDQjBCQTRBMTMKLToxMENFNjAwMEE2NzQ4RENBMEZFQjU0N0U1ODhGNzhDNkI4MTMwRjNGNDcKLToxMENFNzAwMERGNkM5RUNBNDgyRkZFMUJFNEY5M0UzRUM0QzJDRjlEMjQKLToxMENFODAwMEUyM0RDMTkwMDlGMDREMzI1MkE2MzQ0NEYxQzA0NzJDMjYKLToxMENFOTAwMDgxM0M2ODY3MkY2MDVFQTQ4RkY4MjMwRjkwRkYxODIzRjIKLToxMENFQTAwMDc0RDE5RjE2QUZDMjhEQkQ5QzEzM0YyMzk2OTY2N0UyNDcKLToxMENFQjAwMDdBODcxOTc5RUEzN0ExM0QxRTA5RDc1QUNGNDEyQkVFNUYKLToxMENFQzAwMEFGRkI5QjRGRDEwN0YzMEQzOERFNTczMzA4NERDQzc5QkMKLToxMENFRDAwMDQ3RjAwOEM2QUIzQTlBRURBNDU3OTMzRDE1NTlFOERGRTEKLToxMENFRTAwMDYzNDcyRDQ0OUYwRThGQ0YzMDM3MEM3RkM5RkREODc1MTcKLToxMENFRjAwMDk1QzlENzlDNDBGQUZCMDg2RDI1QzBFQkMzMkQ0MzZENDcKLToxMENGMDAwMDA4RTdENUE2QTAwQkU1RERFQTc4QUUzRkU0NTI4MEMyODMKLToxMENGMTAwMDI1QkRFREZFQTBDQUMxQjg0MjNEQkY2QkYyNTU5QTNDOUIKLToxMENGMjAwMDU2NDdCRjlBNUM0RDk4QTJBNzczNERBRUVFNEZFMkY2RkUKLToxMENGMzAwMERBRkNFNDkyMkY1MUFFMjY5RURGNDI3QzE4NDlGN0I5MDUKLToxMENGNDAwMEQyQTVBNTNFMjdFQTAxRTY2OTQyN0IwRDZENDZCNEUzMTIKLToxMENGNTAwMDNFMzQwNDM4QkQ3M0ZGRDREOUNFRUNFRDY4RTdDMEFFRTMKLToxMENGNjAwMDgwRTQ4QTgyRkM0MDc4RUE3RUVENUI2OEI3NUI5NTBGQ0YKLToxMENGNzAwMDM1RDZFOTU2OEE3MzA0M0E2MjE0QjcyRTEzODBGMUZDNTEKLToxMENGODAwMDkwQTlGMUVEOUMzRjI2NTJBQUQxNjc2NjcyQjYyRTVFM0IKLToxMENGOTAwMEQwOTg3QjQ4NDA3Q0Q1ODMxRDQxNzFDNUIwQkY3M0UwRkMKLToxMENGQTAwMEY5Rjg4MTQ5NTZCNEY3NDQ5M0U3MzBDQUE5RUU1ODIxRkQKLToxMENGQjAwMDg4N0FCM0RFMzFERDhBRTc0QTg2Rjg0MkMyRkI5N0IxNTAKLToxMENGQzAwMDY1NTkwMzlEN0I4MkRENDI3RTVCQzlFMTYxQzc3MDFDQjAKLToxMENGRDAwMEM2Qzg2RjZCOTRDNjMyREMyN0VFNzY3NEM0RTBCRUM1NUIKLToxMENGRTAwMDkxMkNFOEVDQzRGOUM5QkU5Q0U0QjBGQzI4MUM1REM1REEKLToxMENGRjAwMDE3NzZCQjVCRUQyNzcyQkNEMUM5QUFERjMyNDM2MURFNzUKLToxMEQwMDAwMEIwNzM4QjRBOERCRTY1ODU0RDA5RTNFRjlBQkNBQjU4NzIKLToxMEQwMTAwMDY3NDE1RkJFRUU1NzZFRURGODdFNzJBQjM2MkI0MEY4N0YKLToxMEQwMjAwMDMyNDVDQTBCMjdDODcxMDdBNThBMDAyODM1MkE1OUFCOTMKLToxMEQwMzAwMDZGMUY0Mzc0NTU4QzcwNjA4RUVEM0Q3NkM4MEY3M0EyRTAKLToxMEQwNDAwMEQwRDc5MTExMjkxNEI3RDlBMzY3NjBENzVDNDA3QTY2MEQKLToxMEQwNTAwMEUzNDQ2RThGQTg3QTg2RUJBN0IzQ0Q3NkQyNEY2NzY3OEQKLToxMEQwNjAwMDU3NTAzQ0Q1RDlFNjE0MTlFOUVFQzBEQUNCNDYyMzNDM0IKLToxMEQwNzAwMEU2OUM2RjY0MzJDQzZGRUVGOTQ5OTRDRTZCNzk4NEQyMjIKLToxMEQwODAwMEIyOTYzNjIwNzJDNkFBRDdDQzVEM0IwM0RBMUQ3RkNDQTAKLToxMEQwOTAwMEU4NDFCRUVFMEE4QzNCNTMwOUY5QUU2NjBCOUUxMUIxMTYKLToxMEQwQTAwMEFFMkRGNzY2QTE1RkJDMEJDNjQxRkJBQTZCNEIxRUQxMzAKLToxMEQwQjAwMDU3MTdDMDhERjIwREZBRkExODJGNkMwNEJDOTQzMUE2RTQKLToxMEQwQzAwMEM2MTlDQTVFQUMzRkU3NzU2MzVCMzQzQkE5NkM5REM1NkUKLToxMEQwRDAwMDFCRUQ3Q0E3QTdCQzI1QkFERDU2OEJGRjRDQzVGRjU1QzEKLToxMEQwRTAwMDBDNDc3ODE1N0RGMDQwMTZBRTU3RTNGRkU1MDkyMDhGMTkKLToxMEQwRjAwMDEwNUUxRjU4NTgzNDdGRkM5NEU0MkIxNzIyM0VBNjI0NjAKLToxMEQxMDAwMDdCRUZFNTc4NDk4OEVBNUZFQkE1N0YzRUVFNzEwMUVDQTUKLToxMEQxMTAwMDVCQzI4QjJGRUUyNjlEOUY5NUZCMzE4RkFCRjYyRkIzMTUKLToxMEQxMjAwMEY2NTMxRUE3QjY5N0EyOTcyRjZBRkVFQ0QwNDM5MDVCRUEKLToxMEQxMzAwMDU1NTA1MTgyNDRBRkVEQTc0NUM2RjdEMzhCRjdERkE0MTYKLToxMEQxNDAwMEM2RjlGM0Y5ODA5RDRBNzRDQzAwMUYyODVGNjZBQkZFRDgKLToxMEQxNTAwMDFFODBGQjhENzhBRkU0RjhFQjQ2MDNEMjQ3MkYzREY5RjQKLToxMEQxNjAwMEUyRDA2RTMxQUNCRUJFNjYzNzk0RkZFMzMwREY5RkNEQjgKLToxMEQxNzAwMDNGQkY5RUU0OUQ2MUY1QTg4RDkzRTBGQkJEQUY5QjQ4NEEKLToxMEQxODAwMENFNTczNzVEQjZFRTBFQzBFRjE3NkYxODI5M0ZFRkJDRDQKLToxMEQxOTAwMDhERUE3REZBOTA2N0UzMUQ1MEFGRkJGNzI2QjJDM0JGNUYKLToxMEQxQTAwMDM4N0MyNUM1NEQ3QzZBRDJGQjA5MkU0QkUxN0NCQzVGRTcKLToxMEQxQjAwMEU1RTczOUU3NTc5M0ZEQTE5NUNGNjk5ODY1OTY4OTRFQzQKLToxMEQxQzAwMEQ3RDJGNzM5Nzg2ODgzQzFCRUNBQURCRjJCMTJGMTNDMDQKLToxMEQxRDAwMDg3RDFCRDg1RkRDOUI3NUM1NzQzN0E2RDJDRDlGQjczRTgKLToxMEQxRTAwMEQ3NTgzQ0QxRTJBOEY3MjdDQjNBRjkzM0I3QjM5OUZBMkQKLToxMEQxRjAwMDY1NjAxNzM5OTNENUZFQzJFNEM4RENGMzg5QzQwNzRDRDcKLToxMEQyMDAwMDUyMThDNjE5Q0Y1MUU1NDlDRkZDQjY5ODc0RjJFNDUzRDEKLToxMEQyMTAwMDVCNzQzRkM4RTE2NEJFOEY5QTczRkUzMkUyQUZCRUVCMkYKLToxMEQyMjAwMEZCMDE3RDlGQTM4RERCQzlGOUIxNzczRDFCMjc0NTVCRDIKLToxMEQyMzAwMDRGRUYzQTI2NTNGRDRGRTNBMzhGRkZCOTNBN0U1N0Q1MDAKLToxMEQyNDAwMDNDRTYwNUI5NTQ2NjgxN0EwRTFDRkZERTk1MTMwQjcxMUUKLToxMEQyNTAwMDFERjEwOTg2QjA3NUNENkQ1OUM4QkM2MUVCOUFCQjY1RUYKLToxMEQyNjAwMEE2QjkyQ0FDREY1RTNDMkNGRDVENTE2RTJGMUUzRURGNUYKLToxMEQyNzAwMDUwN0U1RDBEQ0FBM0U0OTJGNzkxNkZDQTU2NUYzRTFBQzUKLToxMEQyODAwMEU5NzE2RTRCMjNDMUY5QjhDOUUzNDZGOUZBNzFDQkJEMTgKLToxMEQyOTAwMDcxQkVBOEYzOTQ3NTdBNkI2RThCOEExRkIwNzcwQkMzM0YKLToxMEQyQTAwMEYwQTNFMTI1QjI3REQ3NUZFNzdFRjkxMENBOUZDN0I4MkEKLToxMEQyQjAwMDcxRDMxRkJDRkFFMDJEM0IzQURDNkMyOTFBRENGMjk5RTEKLToxMEQyQzAwMDhGRTAyNkJGNzAwNEU5N0E4REREODM3NEREM0ZGQzQ2NzQKLToxMEQyRDAwMDMyREY0MEYwRUJDNzdFMDU3QjQ3NDg0OUMyNzExOUQxNjgKLToxMEQyRTAwMEU5REMxNjRFMDc4M0MxQUQ3NzVDOTUwRThBQTJBRkU3RTUKLToxMEQyRjAwMDEyOTVERkJBQUEyQTk5MDIwQzdCQ0MzQzE4MURGQzk0MkIKLToxMEQzMDAwMDI5RDYwMUQ2RDE0MzA3RkZBNkEzODM0QjUyRDYxMDFEQzEKLToxMEQzMTAwMDdDODJGNkNBRjBCRUY4M0Y2NjU2RTIyRUM1NzM5RjI2QTEKLToxMEQzMjAwMDIzOUQyQjFEOEI1MTkyNkZFM0Y5MzEyODhGOEZDNUY5MDcKLToxMEQzMzAwMDZGQzA3MzFBMkQzRjdGNDc1RURDQ0NCMDcxM0Y2RTAwMkIKLToxMEQzNDAwMDM4NDQ4MURGMjUyOTExRkNBREQxNEZBRUMyMEEyNkZDM0QKLToxMEQzNTAwMEVGRDFDRjcxRjU5QzM4QjJERTk0RTRBMkNCNTI1MDdGNkUKLToxMEQzNjAwMEY4QTNGQjZCQjU1NDkzRDdDNjIxOEU5RTdEMjZFQUNGREEKLToxMEQzNzAwMDYzOEU5QzJGMDM1MERBOTRFQ0JCMUFGQkE5OEJGRkM5NzgKLToxMEQzODAwMEREMjgwRjhFMUQzMzkwQkVBREZFRUJGMkUxQThENzIyNTMKLToxMEQzOTAwMEVEMDREODdGMzZFMEI5RTc3MjYzQUM5RkVDNTBCMUEyRTAKLToxMEQzQTAwMDk1Q0U0MTE1OTFFRDI4QzQ3RDRBQzVBNjEzNzlFODM3N0QKLToxMEQzQjAwMEFDQTQ5NEE5NzZFODcyRTMwODBGRUE2MTIzQUI3ODEyNzMKLToxMEQzQzAwMENGNDk4MTQ4MjRBQzJGQjIwQTNBMzcwNTQxNTg4MkY5MzcKLToxMEQzRDAwMDhENzY3RUVFNUEyOTVBMjU0QjU4NUNDMjUyOTU1RkVBRUIKLToxMEQzRTAwMEFCNEExRTM5ODE3RTY4QUJDMkE0RjBCODQzQzZFREFGMkMKLToxMEQzRjAwMEZGQzQ3OTg2RTk3QkIzQzkyNzc5NzAxRjZBNjAyNUM4QTUKLToxMEQ0MDAwMDE3MjZEMUQ3OTAwREZEOUI1Q0NFMzE0QTE4MUU5NkE0RUQKLToxMEQ0MTAwMEYwRjM3NjVCN0I3QjQzMzZCNEI3RERGMzdCODlFRTFEOUYKLToxMEQ0MjAwMEMxMzhFODY3QjM2Njg4NjdDM0ZERDUyNjY3OTBFRTA5MDMKLToxMEQ0MzAwMEIxRENCMEVGNjA1NzM5MEEyMEFGRjMwM0MwN0MwN0IwMEUKLToxMEQ0NDAwMDBCN0Y2NUYwQjhCRTQ0N0FBQ0U2RjA5ODg4MjA4MkY0OTEKLToxMEQ0NTAwMDJGQjM4N0I2QTE1QzlFMjhENjE5MzFFRTY4QzYzRDc5RjgKLToxMEQ0NjAwMDk0REYzOEVCREI2MTlENTFFODYxQzZDQkFCM0FEMDlFQ0YKLToxMEQ0NzAwMDk5RjE3MkVBMkMzQzNGOThFMTE4RjYxMUE2QjA1REIwMjQKLToxMEQ0ODAwMEM2NDBGQkQ3MEMyQ0Q4MDRFOTE0RUJFMzE0RDdGODlBNjgKLToxMEQ0OTAwMEVBMUY2QkM3N0M5ODVFNkM1N0U5MERFQzlDQTk3QjIwNUEKLToxMEQ0QTAwMDlENjFGNTlCOTYxNkY0RkFEMzIyQzdEREEwRTJBNUREQjcKLToxMEQ0QjAwMDE0NEMxQTgxNzQwMEUzRTAzQUVFN0MzOUYwMjM1MEZERkQKLToxMEQ0QzAwMEVDOEU2MEUwRkE1MTgwOUZCQjU4QjcwOUUxRTg2MzEyMjcKLToxMEQ0RDAwMDlEN0I2ODdFREQzMkU2NTFGMzhDRjZBN0VGOTc5QkI2MTUKLToxMEQ0RTAwMDIzOUQ0NEY2Nzc0Nzg4Rjc3NzY3M0JGNDA3RTk1RDg3MjQKLToxMEQ0RjAwMEJCN0Y4RDZBRDkxNzk0QUVCMkIzQjBGRUY2N0IwRUQ5NUUKLToxMEQ1MDAwMDU5REZGRTIyRTFFQzExQUQ0NjI1MENBRTgwMjIyMTFDMzQKLToxMEQ1MTAwMEVFN0RFMDNCQTRGNDVBMzZCQTdGM0VFQjg1Mzc5RjQ3NTkKLToxMEQ1MjAwMDI0M0VCRUMwMjJFMEQzNDA4QUY3Nzk5NEMzNTUyOURFNTkKLToxMEQ1MzAwMDVGNjA1QTZFRUQ3NjhCNDAzN0VGM0I3RDJGMjIxRjJFQkEKLToxMEQ1NDAwMDM2RkFCMjkyMDExRUE3MzM3REMzOTMxMDJFMUREMUNGQTAKLToxMEQ1NTAwMDVGMjNGOTNCQjdGNEY0NTZFNDlCQkJBQTQ1ODY3ODVFOUIKLToxMEQ1NjAwMEI5RUZFM0FEQzg5N0E3NERDMDQ3QjAxRjc4RUQ4MThGRTUKLToxMEQ1NzAwMDYzOTE2RTE2MDEwMzg2Q0I5MzBGMkFGM0M4N0UzQUJCRTQKLToxMEQ1ODAwMDc3Rjg4MEYxQTcxRkE4RkU5MjNGQUE3Q0EyQURGMzZFQTgKLToxMEQ1OTAwMDY0NDAxOEVGRUVCRDc2REFDRkRDNUQ2OUVDRDk2NzIxMjcKLToxMEQ1QTAwMEJEREY1REM5RTM0Mzk4RDgzMUZBMTY5RERENTlBNzlFQ0EKLToxMEQ1QjAwMEIzRjVFRDA3RjcxMTkxRkQ3NDU1Rjk1QTg5RUY0NURGODEKLToxMEQ1QzAwMDA0QjRCQjhGNTdDRDZCNDVGOTEyMzlDRjNDOTdFRjE4OTgKLToxMEQ1RDAwMEMyNzU2RUNCNEM1RERDRURFQ0U2RjlBREUxN0NBOEQ1MTcKLToxMEQ1RTAwMEFGRUQ0N0JFQkUzNDRDNURBNzk1OEZDN0U0OEI4QjFDNTcKLToxMEQ1RjAwMDEzRjA1RTM1RkZCMzg1QUMxRjFBQzJFODYxQjBGMTU4NzUKLToxMEQ2MDAwMEVFMTQ2RjhGNUNBMDdCRjcwMkVDNTlGQkY2MTc1OTRGQjUKLToxMEQ2MTAwMEVCREY1NTc5MDUzQjNFMEVEN0U3RkRDRjk0RjE4M0NGODUKLToxMEQ2MjAwMERGRTQ1MkU1OTlEQTRFRkI2RUYzRjkxOURBODVCNkFGMEQKLToxMEQ2MzAwMDg3OTA5REYwRDIzMEVFQ0ZGODBGRDUyRTYwMEU1ODJGODgKLToxMEQ2NDAwMDMyOTg3RkEzRjdGRjYzQkQzMDMwQzVFN0Q5QjY1OEEyNDMKLToxMEQ2NTAwMEM2MTVBNUI5NDQzRUNGRTBBMTIyNkI5NEY5RjVFOTJGOTgKLToxMEQ2NjAwMDI0QjIwQkE5RjdEMjMwQkU3RTc0OTM5MUJGNkI1ODBDRDUKLToxMEQ2NzAwMEVENkJDQTJBNkI2OTlGREQwOEYyMDNGNTQxRTQ3QzhFRUQKLToxMEQ2ODAwMDM1NkRBNjc4Njg5QkQ5MkZBMzVGQjQ3MTU4NzI3NjBENUIKLToxMEQ2OTAwMEI0MDNBOTQ2N0UxRjVCOEM1RjE2QzNCRkFCRkUyMDVCNDUKLToxMEQ2QTAwMDhENUZDNkZENkQ2MzVFMUE3REQ3RkE2QjM0NzAzOUFCNDIKLToxMEQ2QjAwMEYxNDUyM0VDRkI5RTI3QkY5OEM3MzUxREUwRDJGODU2RjUKLToxMEQ2QzAwMDYwNkEyQ0I0REJCRTkyODU4QzZFQzYwRUJBRDM0NkUyN0QKLToxMEQ2RDAwMDNFRDc1RjZGQTZGM0JEQzY3QzIxNzUzNkU0RTMzMkFENUQKLToxMEQ2RTAwMEU0MUY2QjhCMEZDREMwN0IwNzhBNDEyNEZERUE4Rjk3MjcKLToxMEQ2RjAwMEFGODk0NUZGNkU0RDRBMDdDQUJGODM0QkNEQjRERUQ1MTcKLToxMEQ3MDAwMDkzRjhCRDM1Q0JBNTI3RkM1NzYwRkZGNzMxMEZFQUQ1NUQKLToxMEQ3MTAwMEVERTc3RkQxODJGN0ZFOTQyM0IwOUY0NUJGMjE3NjBBQzMKLToxMEQ3MjAwMEYyNjhGQkQ0QjMzNkRDQ0ZBNTYwNUMxREQwRDkxNjUzQUMKLToxMEQ3MzAwMDkwRTZCNUE5REE0MkZENkU2QTMzOTc0NkMzREZDOTU0NTUKLToxMEQ3NDAwMDkxRUEwNzBDOUQxNDFGOUNDODgyMzY4NEVCQzM1M0E3MzMKLToxMEQ3NTAwMDZGQ0M4NTc2RDlCOTRDQzJGREZDRUE4MkIzREFCRDcyRDIKLToxMEQ3NjAwMDIzM0Y4RkQyRkM4OENDQTY5RTY3NTlENTczMkFEREZENTYKLToxMEQ3NzAwMEI4Q0RGRUJERTQzRkI0NEYwQkYyNzRBQTQwRkVFN0M4M0IKLToxMEQ3ODAwMDc5RENFQkUyN0UzN0ZCRTQ4RUE5QTgyN0VDODUwMjMzMzcKLToxMEQ3OTAwMEEwN0YzMzk3RDFCRDY2NjkyQTU4RTE5MDY2RTdCMzdFRDIKLToxMEQ3QTAwMERBRjM3NTRCNUU2ODVGQzhEQkEzNEY0OEJBQzBGNjBCNkYKLToxMEQ3QjAwMDVEM0NDRTcwMERGQUExQTAzQzYwRjIxOEFFODE3OTA0RjgKLToxMEQ3QzAwMEFFOTcwQzhBREM1QkFGQ0VDNUY1NkIyQkY0MUYyMjM5MEMKLToxMEQ3RDAwMDFBQTA3NUI5RjM4MzIxQTQzNzc3Qjk0MDc4NUEzM0YxODkKLToxMEQ3RTAwMDE4OUQwQjNDNUNBOEY5NTEzRDM0OEYyREQ1RUYxQzQwQTIKLToxMEQ3RjAwMEZCNkJDQkZEOENFQ0E0MkQyODQzQTFERDk2RUI1OTgwNkYKLToxMEQ4MDAwMDlGMjdCMTM0OTQ2RjlCRTY5QkFGQTNGM0ZDMDI4MEJGQ0MKLToxMEQ4MTAwMDgxRDJBOEYzRjZBNTVBODkyRUREMkIxRTBFRTEzREZFMUUKLToxMEQ4MjAwMDE4MEZBMzc3MTMyMDhENUFCRjIxOTVDMzY5OTMyOTkwQjAKLToxMEQ4MzAwMDhBRkU5MUZFRThFMjU2MTUxRkVFNEFENUFFNjI3RTE3Q0IKLToxMEQ4NDAwMEUyNzVBRDBBMUY3NkNCNThFRTVGMTBCRDcyNzgxQzU3OUIKLToxMEQ4NTAwMEFGM0VFMTdFMEM1ODFGRERBQjREQUMzMzkzM0UxMkE2QkMKLToxMEQ4NjAwMDg1NjZFMEJBMTJGMkNERUNFQTZDRTQyRjBFMzc2NTk0Q0YKLToxMEQ4NzAwMEMwRTNDRTU4QTAwNUY5QjNFREEyNjQ4QTI3NUQyNTA0NjQKLToxMEQ4ODAwMDVDRTg2RjU2OEFDRDc0OUU3QzcwQTIzMDYzMUU5NEFGQTQKLToxMEQ4OTAwMEFCMzM5MzFGMDJGMkM0MkY3RTZGNEUxQkYyOUI3RDcyM0YKLToxMEQ4QTAwMDcxRTkzQ0M4QUY5N0NDMTJDMkI3QjY0MEIyMjExREQ3QzAKLToxMEQ4QjAwMDdBMDVDOTAwRjlCNTI1REEzRDA5MTY4Mzc4MUI2MzM0NkEKLToxMEQ4QzAwMERBRjJBMUJDMzU1NTQwMUYyRDZCMzUxODg4REZFQkJENTIKLToxMEQ4RDAwMEM1RkVBMUYwQkQ1RTcyMUFDMkZEMDAyRkI5RjhCRUFBNDYKLToxMEQ4RTAwMDIyQUJFNDI1MTdGMjhERjc2MUZGNTA5OUUzNTI5QzQwN0IKLToxMEQ4RjAwMDI0NDY3RkIxMkMzNDBGNjM2RURBRUE5RkEwRkI1NDZCOTEKLToxMEQ5MDAwMEM2NTgxOURBRjE5OUY3RjlFOTdFNTdFQzQ1NjYxOUYxMkQKLToxMEQ5MTAwMEJBRkQ3Q0UyNDg1QTVGOUQ1OTQ2N0U1RTZGMDg1QzgzODMKLToxMEQ5MjAwMDdDQkY2NUU5MjEwNUZERUFCNjhGMUNDQzA4RjY4MkEzMTEKLToxMEQ5MzAwMEYzRUY1NTE4M0ZFNjI4MzQ0NzlDNjMzMTAxRTVCODM2Q0MKLToxMEQ5NDAwMEFFRTNBRDEwRDE1M0E3QzFGN0U3NThGMkZGMTQzNEU1QTkKLToxMEQ5NTAwMDNCRjExRTQ2Q0MwNDg0RTdEQTRCREZDQjlGMTM4NTJFQzgKLToxMEQ5NjAwMEM4NjUzQjE2RUQ2NTIxMzQ2MTM0Q0EyOUFFQzc5ODI4RDUKLToxMEQ5NzAwMEE1ODZFMzc3N0Q2NkRBNUZEMENGQjRBRDA4RTY4RkUzQTYKLToxMEQ5ODAwMDU1NzZERDQxRjNGMkJFRjM1M0I0QUIxQzQ3M0ZGRDI2QTEKLToxMEQ5OTAwMEZBM0NERjI0M0QxMjdCRDQxRTEyNDY2M0JBNjgxQUQ5QzIKLToxMEQ5QTAwMDY3RTFGNTQwRUVBRkNERjI5RTcwMDE3Qzc3NTc3M0I5MTkKLToxMEQ5QjAwMERGN0MwRkEzNzcyOUYwMkYzRjBDQkVDRDA1MjBBNUU5MTIKLToxMEQ5QzAwMDYxMDI4MDNDRDYyQjkwQzg4RkJFNEE5MDgzMjE4NEU3QTkKLToxMEQ5RDAwMDY4MkJEMTUzOEE3QUVGMjE3MkJERjZBMzhENEIzMUVFQkQKLToxMEQ5RTAwMEM4RUVEMUNGRjMyQjE1QkZGODI3MjZEMzc5MDU1QUEyNUQKLToxMEQ5RjAwMENDOUMzQURCODZGMjZGQ0Y1ODM5MTVGN0RCMEZDNzQ3NUYKLToxMERBMDAwMEQ3RjNFRkE1NzJGOUIwREIxMEREM0VGRjIyRDVDNkZCRTAKLToxMERBMTAwMDA3NTkxOTlBNDBBODYyMTRENzA3NzkyMTk5Q0U2REY4NTEKLToxMERBMjAwMEZCMEEwMjk3MEJFQzVBNDY3QTJGNkU0Q0E3Q0QxMzM2QTEKLToxMERBMzAwMDVFNTAxRDg3RkVBMDlGMjE2QTNCMjY3NTg3QUE2MUZENjcKLToxMERBNDAwMDZENDBCNTc4QUYyRDJFOTNDM0QxQTFGNEMyMTFFQjRCMkQKLToxMERBNTAwMEVBQkE4MDBGQUE4NzE3MjIxMDI1QUFDRjRBQ0M3NDJFQzMKLToxMERBNjAwMDAyRDI1MEY5NTZFODg1NDNBQzVBN0ZEMzQ0RDE2MDg1NDEKLToxMERBNzAwMDc5RTUwMDMwMEM1MDNGN0VBQTU5Nzc4RTIyRDVCREEzQTAKLToxMERBODAwMDYwRjk0RjhENEM0RTk4RDgzQkZFRDYzMTJDNTAwM0UzQjUKLToxMERBOTAwMDBGRjFFQUUxMUQ3QkRGMEJDQkQxMkU4RkE0MDM5QzQxNUMKLToxMERBQTAwMDRGQkYxODJBM0U1QkRGMkVGOThFM0U3QzQwRjBBNDc5RjIKLToxMERBQjAwMDAyNjg5QURGNjJEQkNEMDA5NEU2OURBMjE2MUY0QkYyNEUKLToxMERBQzAwMDc3QkNCMTQzNDE3RjI4QzBBQTY0MUZDQzdGQzQ1MzZGODkKLToxMERBRDAwMDc5Nzc0MUJFRDlDN0Y5MkMzNkZGODVFNTQ4OTc1MjFBQTgKLToxMERBRTAwMEM3RDMxMUY0MkQwMzlDMzczM0U5MUYxOEI3QTM1NDBBODkKLToxMERBRjAwMDMyRTI2MzVCMjg4N0Y0NzgyMzEzNEIxMDRGOEQxNUVGQzgKLToxMERCMDAwMDA4MjhENzU3RUY2NTFFODMwMUU5RkZCRjJERTFGMzlCN0UKLToxMERCMTAwMDkxQ0FDRjY5OTgyODkzRkMxM0RERkNGRUU4RUEwMkMxQTQKLToxMERCMjAwMDhFRjJGNUUwRDIxNzQ4RUY2RDNEMjAzMEU0RkZFMkRGRTIKLToxMERCMzAwMDFDN0RDQzhFNzRGRDE3MEJFNTlCNUZBRjIwQjlGMTEzRjQKLToxMERCNDAwMDY4QTc0NEYxOUYwRkE2OTcyM0VCRTcyRURBNkVDMEYzODgKLToxMERCNTAwMDg5QUM3OTQxN0E4RjI1RDEyRjdBQUU0NjdDQ0NFQkYwMTcKLToxMERCNjAwMEQyM0RGNzQyN0VDRUU2OTgxNjUyMjg4RjVBMEQ2QzUyNUYKLToxMERCNzAwMEQ5QUZBNkNEQkM5Q0REOTI0MEZCQTg1MTk2Q0U4NjZCNUEKLToxMERCODAwMDYxN0U5QjlGMTIxOUVBNEJBMzI1OTgzQTE3RkEzNUJFN0UKLToxMERCOTAwMEU4NDA0REQwNjc3RkI0Nzk1QTI4MTVFNTc4NEMwNTg1NjMKLToxMERCQTAwMDQxRjdCNUUzNTIzOTFGQkFBN0M5QkYxRDA2RkRDNjRGREQKLToxMERCQjAwMEU2QjBCNEY5NTMwRUEwQkM0NDlCMTlFRjM1RDkxNUFFQUQKLToxMERCQzAwMEU3RDY4QTAxMkZDNjc5QUZCRENGNjdDNkYxOTlCQTdGNzQKLToxMERCRDAwMDY5NUM1NEY2MDRDMkY5MTM1NUVGQjE4QTc5RjQ4RTg5NjEKLToxMERCRTAwMDVCRTUxNzdCMjUyQjhBQjZDRkRBRTg4QUUxRjEyRDBGQUEKLToxMERCRjAwMDA5MDc5MDNGREM1RTQ2RkE0M0FBMEM4Njg2QUI3QTE5ODkKLToxMERDMDAwMDI3MkVBRDc4QkUxMUY1OEJBMzVDQTA3NUFDMTUzQkFBOTEKLToxMERDMTAwMEYxNUQ4OUI1RjczMUE5NUFFRURCREYzRkRCN0U3OUFBRUEKLToxMERDMjAwMDg1RTBCMUQxQzU3NEVCQTBGNzMwNDBCRUI5RTc0NTVGRTAKLToxMERDMzAwMEM3QkZFMUI4RTM3QkQ3MTFBM0FEMjNCRjkzRjJEQTNDQjIKLToxMERDNDAwMDVBQkRDMTBCOUFDNzA2QjUzRjdGMkE3RkM3Qzg1RUMwQzEKLToxMERDNTAwMERGRUY4ODk0RjczNUY2MEZFODVEOTkwMEQ4RUE0NkJBMDkKLToxMERDNjAwMDhGMTZCQzE2RjNGMjczMDJFM0Y3QjVGNEZDREQyN0FGQjEKLToxMERDNzAwMEQyNTVFNDc3OTk4NThEOTM4RDc0QzdGMTBDNzRBN0RBMkEKLToxMERDODAwMDRGQzA3NzU2MTQwMTgyRkMyREY5MzFGQzM0Q0Y0ODdBMEQKLToxMERDOTAwMEZDNUY5NzhCRTFGMzg2RkU2MzFCOTg0MUJEQTcyQTE3QjMKLToxMERDQTAwMEE3RjY5NThCNEM5NThCNTZBNjg0NTBGRUZENUZDQjQ1MTEKLToxMERDQjAwMDkwODMyNDE3OUI2MUE1ODlCMDUzODk2RDZGNUE4QTdBMjYKLToxMERDQzAwMDVDOTM4N0UzMTEyNzk3NjIyN0Q2RUI4QjBCNjg1RjQ0NDEKLToxMERDRDAwMEY5MDlBOUJGNkZDNkY4Qzg1NTgyN0FERUE1QzIwNURENkQKLToxMERDRTAwMDUwMDg5N0FGNUQ3MjhGOUVDMkVGMUJGMDFGMzlGODlFRjAKLToxMERDRjAwMDRBQzI3NTA1MzBERUM2RDI5QzMxQjhCRkIwRjk1RjI0ODgKLToxMEREMDAwMEZCQzA1REMwRTM1N0RDOTVGQ0ZDREM5RTNCRTc4OUYwODMKLToxMEREMTAwMDdCNzE0QjUyQjk5REJFNDRBM0JGNEFCRjBCQzc1OThCMDEKLToxMEREMjAwMEZEQTI3Q0NFMzU5M0JFRENDQzgyNUMxRkFBRjZFOTU2MDAKLToxMEREMzAwMDk3MUE0N0FDRDI1NTI0OUY0NENBQTc3MUJGNzcxNkEzNDAKLToxMERENDAwMDdDNEYzNTU4MjREQ0NGQTE3RTNFOThBQ0Q3RDc0ODJGRTYKLToxMERENTAwMDlBQkU2RUU5QTg4OTQ3N0Y1OEI2RUFFRkNGQjZFQUUzRTQKLToxMERENjAwMDFDMjZBNDcxNzkyNkE2NzIzRkMwMkFBMTgyRjY5QjRBN0UKLToxMERENzAwMEIxNDBGQjM4OERGRTdBRjQ3ODA0MUMyM0UxODc4NEJBMjUKLToxMEREODAwMDcyMDJDNUM3NTAzRUFFQTg5QjIxRkY2RTAzOTI1RDhGMDUKLToxMEREOTAwMDdBMkM1NTgzQkI0NDcwNkVCQjUzMTg4QkYyNzI0RjdCNDkKLToxMEREQTAwMDk5MERGREVCMDZCN0Y1MUFEQzFGQUUzMzMwQkFGRkI4OUMKLToxMEREQjAwMEFFRTg0RDhBMkI2OUFBODQ5RTYxNTE4RTdDNjFBNjc5NUEKLToxMEREQzAwMDc0NUYzQzAzMUZEMzdFRDVBRTU4M0FEMEFGMTUwQzZEQUYKLToxMERERDAwMEE3Qjg4NUE2QzBBMTE5OENEQkIxMENFMzUyOUFGMjZCRUYKLToxMERERTAwMEQyMTZBMDdDQ0YyRjI5NDRGQ0I2RDU5QjI5NkU0NkNBRkIKLToxMERERjAwMDY3NTFGRDA4Mjc3MTFGNDNGM0ZENkU3QUNDQUVFRDJGRkUKLToxMERFMDAwMENCQTNFRjJCNkY0Q0UzRkJEQkEwMDhBMjBBRTY5MzkxQjgKLToxMERFMTAwMDJGNzg5MEZGMzNFQUNDNTFFNzUxQUNFMjI5MkQ4RERGMEEKLToxMERFMjAwMDBGNkJBQjNGNDRFRkNDMDBCRTAyNkMyMDdDQzFGNDZCQTcKLToxMERFMzAwMDkyQzNGMDMxQTkxRjdDQjgzNDdDODgxQTNFRTI2NzEyODUKLToxMERFNDAwMDFGNzY3NjA4NUNERTkyNUU1QkNCQTREQjUwM0YyQTE1MjIKLToxMERFNTAwMDY2QjI2MzFCNEQ3QzVGQkVCRDQwRTUwQkM5REE4NkM0NkMKLToxMERFNjAwMEY2NURFOTNBNkU5MTQwRjc3MDMyMjdGMkY3RjVFQ0U1OEUKLToxMERFNzAwMENGNTM1Q0QzNjZENkZEM0FDQTNCQTU4MERGQTM4RjZDMzcKLToxMERFODAwMDdGNjc5QUEwQzI1MTM2Nzg2ODNGQ0RGMTA4NzhBNUY5MkUKLToxMERFOTAwMDZDQzk0QjZFMEJFN0QzOERBQTFEQkREMUM1Rjk3NDRCNzAKLToxMERFQTAwMEZEMDZFMkQzMEI5REE3MjZCNzZCNTUzQjdBQkVENzY3MUQKLToxMERFQjAwMDQ2NzVBMDE4NEFBRTRBNDVGREY5NzNGRTFFMTUzMzNBNjEKLToxMERFQzAwMEM4MkVGRjA0OUI4NEY5NjUyQjMzN0M0QkQyQzJGQzcyQjUKLToxMERFRDAwMDkyQjc0MkMwN0E1N0UyQkI0MkQwRkVFMzIwQkYwN0ZBQjYKLToxMERFRTAwMDcxRjAxNzQ1RjQxRTk3OEYxMTMzQ0Y2NzFEMDY2MjcyQ0MKLToxMERFRjAwMDkwQTEzQjIwRUYxMjgzNTRFRTlBMDc3Mzg5QTdEQjkxMjAKLToxMERGMDAwMDk0Qjc1QTQxMkZDMjg0NEU1N0YxRkIxNzVERjhCRUU0MTcKLToxMERGMTAwMDcwN0MyNzkyQkYyRkY5OTlGQTlFRTRBODk2NTVDNTlCNkQKLToxMERGMjAwMDcxM0M1OUY0QTFDQzM4ODlFRjRCRTJGREU3ODlFRjUxMDAKLToxMERGMzAwMDVDRjQyOTkwQjU0REYxMTgwRkMzRUY2RjRCMEYzMjQ5QzgKLToxMERGNDAwMDk4ODRGOTM1QzUxOEY3N0NFRkFCMTZGNTlFNjQ0NzBEM0MKLToxMERGNTAwMERFN0I3OTVDNjBGNDhFQzQ2QTExRjRGRDUwMkM2QTMwNkIKLToxMERGNjAwMDU0ODREMUYxRUVDQjNCRTJGMDlDRUY3NEYwRTYwMUZEN0UKLToxMERGNzAwMEM3Nzg3RjEwRTdCMTQzQTVGN0Y1RjZDNTc0QkY2QzhFN0YKLToxMERGODAwMDIzRTRDNkY2MDdGNjNDRjlDNDI2MThFRkIzN0Q1NjdBQUIKLToxMERGOTAwMEQ3NjRBMzdEQjExQkNCM0Y3QkVDNUQzN0VBOEJEM0ZCMTIKLToxMERGQTAwMERFMzU0NzNCOUY1QzI0MDZBRkMyN0I2NEU1Q0ExMDU2NTIKLToxMERGQjAwMDAzRjMyRjBBQ0UzNDUzRkNDOUFFMDM3NDNGNkQ5MUU0RDIKLToxMERGQzAwMDMzNjNGRkU1MkQ3QjI4M0Y2NUQ3OUZEQzU4N0UzNDhEN0EKLToxMERGRDAwMEYzQzdFOTU0OUYxQkZEMTJCOTJEOTY5MDAwRkE2Nzc3OUQKLToxMERGRTAwMDhFN0Y0MUQ0NzM3Njk1MUVEN0RCNUZBNUZFMzdEQTVGNEYKLToxMERGRjAwMDNEODQ3ODM5RkQ5ODg1RkM2RTA3MUVGQjBERjU3QjZBMjQKLToxMEUwMDAwMERGOEIzNERGQ0Y3NkJGN0IxN0RBRDNFNThDNzk1MDlFNzgKLToxMEUwMTAwMDlGQjZBOTdFM0Q2QjQ3NUNGOEZFRjYxNTE1MUU1QUZFQUQKLToxMEUwMjAwMDc0QUNCQTBGQ0UxOEE0OUU3QTFFQzMxQzAwN0ZCQTNGRjAKLToxMEUwMzAwMEQwMTE4N0Y3MEIzRjMzRjlDQzA4OEY4NTA4MEY0ODhCMzkKLToxMEUwNDAwMDAwMEUyOEY3MTcwNjBEMzRDRjg1MkQ2RDc0REY2QUUxQjkKLToxMEUwNTAwMDVFRUUxRjVDMDhGMDIyQjhCNDFDQTBGOUJGOEY3MDE5RTcKLToxMEUwNjAwMDhGRUJGOEIzOUJERTc1RDg2QkExRkRCM0I2RUU4NTBFRDIKLToxMEUwNzAwMDlGMUJFMUEzQUQxN0UwQzBEN0JERkJDMkYwMzQ0N0MzN0YKLToxMEUwODAwMDUzQ0I5RjY4NUVFNTdCRjlCQ0NBNzdGMTc5Q0NEOTBCOUQKLToxMEUwOTAwMDc4NzIyMDlFNjYxMkZFNEZFRDYzMzJERTgzRTlEQUYzN0EKLToxMEUwQTAwMEVFNDlCNDY3NEVFRkIzQ0E2ODU3NjhGM0NBMDA3MTFCRjQKLToxMEUwQjAwMDM3MTZGOTg4RUI2M0I2RDc0MEZBOTg4OTFENzQ5RUIzN0EKLToxMEUwQzAwMDQ4OTIyNDdDOUZBMEE3M0M2MDBFNzA3OURBNTE5QzBFODgKLToxMEUwRDAwMEU1Q0YzQzBBRjYyMTQyNDIwQThFNDBGRkVBRTkzNEVERTAKLToxMEUwRTAwMEZFNEY4NzFCRkQ2MkJCMkZGNzEzN0Q3RTFBQUJDMjVCMTEKLToxMEUwRjAwMEVDNzA2M0ZDQ0M4Njc0REZFOUI0QjA3ODgyRDMxRkJFQzkKLToxMEUxMDAwMDM4MDJEN0JEREM1OEYxOUI0QzFDRTc0OTFFMUZGQTU1NUQKLToxMEUxMTAwMDRFQzVERjFFQTI3OTBGRDU5RDM3NDZBNjAwQjczODNDMDUKLToxMEUxMjAwMEZGQ0UxNzk4OEZFRTI1RUY3RDJEMjZGQzFDNUE0OEU3NzEKLToxMEUxMzAwMDdFQjc4REY2MEZFODNFRTI2OTdDRTc5MUU2MTNBNDM4REUKLToxMEUxNDAwMEFENjFERTMyMzc5RUYzN0RDQTFDM0UzQzk3RkRFQ0U3QTUKLToxMEUxNTAwMEFGNTFCQzRENTdBQUU2N0ZFQUEwN0FBN0Y2QkU5NjgwREIKLToxMEUxNjAwMDY5OTkxQTBGQ0YwMjM3OTMxQzAzMzgzNjU4Qzc0NjkzNjQKLToxMEUxNzAwMDhGRUFGREEyMDBCRjM3NzZDNjAwMDIxM0Y1QzQ1NjBEMjQKLToxMEUxODAwMENFMTVFNkU5QkE3MzFEMkU0NzMzQjY2NEI3OTNCRjI1QTMKLToxMEUxOTAwMDEwRkRCRTU5QTRGQ0NEN0Q3NDEyOUQyQjlGNjNEMUNGODEKLToxMEUxQTAwMDk1OTkxQTI3QjdEQzE4NDNGMTM3MUJFRDNGQTNGQkI3NEUKLToxMEUxQjAwMDk1OEE0NUMyRkIyQkM3NTRCOTc4NDJCRDk3RkY1NTRDOTEKLToxMEUxQzAwMDlDMjIwMERERUM0RkY3RTVBNDhGRUY3QjBGQjc2Q0Y1RDkKLToxMEUxRDAwMDIyMzdDMkI3MENDRjNEMjhDRUEwRUQ3QThDMjdFQzRBNkYKLToxMEUxRTAwMDYyQUFEREM5NDIwNDNGOTM1NkJFOTE5N0M3RjNGQ0E0Q0YKLToxMEUxRjAwMENEQzEzNUY4MUUyNkMyOTdENzdGODI5NzY3RjNGMjFGRUQKLToxMEUyMDAwMEE5RTU3M0QyNEFDNkE0NzNGRjBFQkRBRkMxOTgyOUJFNUIKLToxMEUyMTAwMENCQ0E1NTc4MzQ3OEY0QzI0NTY0NUQ5QTVEMEQ5NUU3QjQKLToxMEUyMjAwMEUxRTVEQzI0RUFFRjMyRUE0Rjg0RkU0NjdERkZGRTAwQTIKLToxMEUyMzAwMEVGOEEzNUUxNUZEMDhGRjU1RkQ1NEY5MEY0OTJFMEMzNjAKLToxMEUyNDAwMEI3QUVFMDlCODdFQkJGQzc4Qjk5RDQxNEZGRkRGQkZGRjQKLToxMEUyNTAwMDY3REIyRjM3N0E4NTRGOTEwRTg3MDg0NEY3MUE1Rjc3NkYKLToxMEUyNjAwMDNEMzY3QzBDRUVGRkNEMEQ0QjQzQTgzNkJCNjI4QkNEMEIKLToxMEUyNzAwMEE5RjBGRDlDQ0NDRjRGRUU3OTc0M0Q4QjE2NEZBMkJEMUIKLToxMEUyODAwMDlCRDE5MzU3Q0ZGMUNDNDNGNUU3QjNBQkQzQjlERTU5NkMKLToxMEUyOTAwMDlEREVFQjdGQzM3MzM5M0NBRUEyOEQzM0ZDMzUyNzUzMzMKLToxMEUyQTAwMDI4MENCN0QzNTk4NTgwRjE4N0Y5RUQ1NjdBQ0ZGNzIyM0MKLToxMEUyQjAwMDA2ODIwMkU2M0Y5Mjg1MDRENERGQTM1ODI3RTUyRjQ2NjUKLToxMEUyQzAwMDEwMENDNUY3QTg2NDdBMzg3MzFDRUI3NjhCNDNGMUZDMEQKLToxMEUyRDAwMDM5QjQxMkVEQjRGNzlEQkVDNjc0MThFRkNCQzczQTNFMDEKLToxMEUyRTAwMDMwNDBGOTRGRDI3QzJGNzVBMjVGMjg5RERCNTcwRUY1ODkKLToxMEUyRjAwMDdENUMwOTUzQTA0M0MxM0VDRDE1NERFRUY3QzA1MzEyQ0UKLToxMEUzMDAwMDRGODU5RkI3REQyODdBMUY0OUE3RjU2NDQ4NURGNjVFMDMKLToxMEUzMTAwMDM4NkJGMjYwODFGQUZFOTJENkZFRTQ1MzRGRTI1NjM3MzQKLToxMEUzMjAwMEVDQkQ3MEVGODBGNzgxRTc1NENFN0ZGNEU3RTMwNjI4NzkKLToxMEUzMzAwMDU3RTVFQ0VFRUFDMDZERTFGQUZFQzk3NEFFNjc5RjRFOTgKLToxMEUzNDAwMDE3NzQ3NjIxOEM0QTc2RENEMzM3NzFGQjY5RjdFNURFRUEKLToxMEUzNTAwMDlBQzc1MURFQjYxODY5M0ZGRDY5Q0I5RkU5RkRDNzczQzcKLToxMEUzNjAwMDI1OENFQ0JBRkVDNkZEMzQwMkVGOUZFRTc4MzI4RDlGMEQKLToxMEUzNzAwMDc3MDRGNEYxQ0I0RkZDNzI0NDc4QkMyNTgwNTk3NjRFN0IKLToxMEUzODAwMEUwRUY3MDEwREUwRjc5MTQ4QjkxRUUzOTkyM0ZDNkNDMUUKLToxMEUzOTAwMDJBNzg5QzBBQ0UxN0QyMThEQzhGMEU0NTNDNzU1MDFBOEQKLToxMEUzQTAwMEM3QkEyOTk1OTg0NEZFRTkwNEU2QTFENEM5NEEyODREODQKLToxMEUzQjAwMDY2MTUwNjZFREZGOTI5NEQ2MzQxNEEzM0QwM0U0NTdGMkQKLToxMEUzQzAwMDBGRUJBNjU0QzYxQjlGNjFGMTFCMzk3ODYyM0ExNERGMkMKLToxMEUzRDAwMDVEMkRFMURGMjNFMjgzNDRDNEUzQjgyOEYyM0MyMjJFMjIKLToxMEUzRTAwMDQ4REM1OTQ5RjIxQ0UzODJGMjlDN0RERjUzRDBFNEY3MEMKLToxMEUzRjAwMDg2RjRFMkY3OTA2RUY2QTc3QkRGQzdGNEYwQjNCRkU1RDMKLToxMEU0MDAwMEY3MkJENjE4QzhCRTNFNkU5QjY2OTYwMTc1Q0YyNDc4NTIKLToxMEU0MTAwMEU5MUQxMDQ1NjAyNTNCNDBCRkNGRDZGQ0ZGRjhBN0M1REUKLToxMEU0MjAwMDA5MjMzMDlCNERBN0MyRTM3Nzk4RDU5MThGRTdDNUIzRjkKLToxMEU0MzAwMEQ0QUFCM0Q0NzM5MDU5QUExRjI0ODYzMUY1OUU5RTg3MUYKLToxMEU0NDAwMEVFREJDRjUyQ0YxRjY2NDVGODVGOThERkEyRjNBMzI4MUIKLToxMEU0NTAwMEY4MEY1OEM3MkNCRjgxQ0UwRDY2QzU0QzdCQjU5M0Y1MjAKLToxMEU0NjAwMDRGMjc2MUZERDFCREJGQjIwODNGRDRBMEZFQUM4OEZDRjAKLToxMEU0NzAwMEVDQzhGNjU2MDNCMzI2RTM3NzRFNEZDRkZDNDAyNkJCREQKLToxMEU0ODAwMDRFRjM2NzAxQzFDOUQ0QUVDMUYyMjFGOTg1RkM1NzdBQjgKLToxMEU0OTAwMEMzRTE5NDkwQzFGOUM0RTZCRjNBMkVEQTNCRDk1QTNBQTcKLToxMEU0QTAwMDFCRUMzMzUzNDJERkY2QjAyMzhDNDdCRUQ3RTRCMDQ2QjMKLToxMEU0QjAwMEU3RDlCOEIxNDUzRUNBMzcwNzA2OEE0QjVEQURFQUZCREUKLToxMEU0QzAwMEE2ODdGQzBDRTc2RDBCM0Q0MEVGNTRERjlGQTk5MEFGOTIKLToxMEU0RDAwMEQ2NUExMEEwRkIwMTMxRjkwMTk3MTI2NTdFNERGOEJFQTYKLToxMEU0RTAwMDMzRjA1NzUzQUNGRURDNjRBOUJBQUVBNTE5REM3RjdCRDAKLToxMEU0RjAwMEU4QTJFNDYyM0NDRjVFMjUwQjc0NkY3ODk1QkM4Q0NFQUQKLToxMEU1MDAwMDU5MDdGQjNEODE1QUY1NzcwNEI0RkNDQUM0NkQwQ0VEODQKLToxMEU1MTAwMDM2REJEN0FEMENFRDQ5OUIxOEZENUVDQTBDNzVGQ0Y1REEKLToxMEU1MjAwMDZBRkQ4RDg5REJDODRGRDI5MEM3Q0ZGNzIzRUIxRkM4OTgKLToxMEU1MzAwMERCRTA0MkZCQkIzMTFCRjZCQjk4M0VBNDUwRkZGNTc5RjQKLToxMEU1NDAwMDFCNEFCMUJEMzVENEE4QkJDRkVCQ0JFMEY2QUQ3NTJGRTAKLToxMEU1NTAwMEE3NDc2M0FFMzk5MDgzRjQyMEZBMjlCRTQwQUJEN0Q4RTEKLToxMEU1NjAwMENGNzlEMkY1NkFGQjI2NTM4MEVFQzkzNEE5RjZEMEQyMTIKLToxMEU1NzAwMDJEQjE2QkM5MkY5N0IxRkQwOEJENkY5NUNCRThCQ0QxMEMKLToxMEU1ODAwMDE2N0E4QUNFMTFBQ0Y5NjY2NjgzQkM1NUY2MzM3QzVGODkKLToxMEU1OTAwMEMzNTYxMDI0RkNBMEIzMjlBNEEzREI5OERFNzczNjhDRTUKLToxMEU1QTAwMDdERkJBRkZCRDZFRkMyRjUzNTY2RkI2OUZDQzFENjVCRTAKLToxMEU1QjAwMEFDQzJCMzUxRDVBRjhEMzZGRDM5REFDMjBDQUU1N0FGMTAKLToxMEU1QzAwMENERTBGMkRFRkEzMjIzNzkzMjAwNUNDOERFQkIzRTIzQjYKLToxMEU1RDAwMEVGMDZCNEVGQUNGQjA3ODVBM0FFN0UzNjJCMUQxMjhEODQKLToxMEU1RTAwMDVGMjJFNUJGQTM0MDg4Nzg0N0M5NDBGMzNBQjdEN0EwNzgKLToxMEU1RjAwMEJFQkJDOERGQjFFOEI1MDM4MjY2RUNGN0Q3NUJDQTBFRDUKLToxMEU2MDAwMDVFMDNGMzU5RTA3Mzc4MzE3RUYyQzkyRERCRTk5RUZFOUIKLToxMEU2MTAwMEMyMTc0RDE0OUYzMEFDNzMyNjk3ODMyREZDM0Q0NkVERjkKLToxMEU2MjAwMDdEQTM4QjVBMkNCQUY3QTQxNkIxQjBGNzFBNjFCQzg1M0EKLToxMEU2MzAwMDQ3M0YzRENBRTg5RUIxRkVCQkY2NkVDMDZBRkMxMDI1OUUKLToxMEU2NDAwMDRFMkRGMkREODE0NzMyMjJERjVENTZERjFEMjg4OEVFMzgKLToxMEU2NTAwMEE3ODk3Qzc3NjA1NzUwMjBCREIxMENFMzU4NjkxRkIwODMKLToxMEU2NjAwMEFEMThGNzNEOTU0NzBERTQzN0U4Q0I4N0YyRDY1QzUzRkMKLToxMEU2NzAwMDU4REVFMDIxN0E1NDYyNjNCQzNCQTJGMEQzN0I5OTlDQzQKLToxMEU2ODAwMDVFNzZFM0ExMUFEOUZEM0Y1QjFCQzIzN0JCNTgxREMzQTEKLToxMEU2OTAwMEYzQTZEQUZCNDQwOUNGQjU2QjAzMzE3NEJGQTQ1NjEyNUQKLToxMEU2QTAwMDAyMTgzNzkyMTk1QjZDNDVGRjIzOEIxNzI0QkM4Nzc2QzEKLToxMEU2QjAwMDk1NzEzMkREN0IzMkRGMkY4RUEzNzc1QUI3MkZFOEMwRkEKLToxMEU2QzAwMDdCNzVCNTJFOTEyMTFGNjdDNkYzMzgwMjk2MkFEMEZCQzEKLToxMEU2RDAwMDM0NzVEMjlCRjFCMzcwMUZFN0UwRjdGNEIyMjQxNjkwQzMKLToxMEU2RTAwMDBENjhENzc5MTk5RTJGQzM2NkE1MjIwNEE2NTdBNkMxMjcKLToxMEU2RjAwMDFCQzJGN0FFRDgyNDhCQjQ4M0JGMzM3M0MzOTgwOUU0MkQKLToxMEU3MDAwMDA3QTZCRjAzNkQ1Nzg1NUVDMTcxQkNENjEyQzRGRjk0QzYKLToxMEU3MTAwMEZCOUQ2NDBGMDY1QzQ2N0NEQjk0N0Q5Q0MxQ0YwNUNERTAKLToxMEU3MjAwMEIxQzVBMUJGRTJGQzY2RDhDOUI3MUI1MDg0MDRDNEMzRkQKLToxMEU3MzAwMEVCNkQyQkE3NUYwRERGNEQwMTkxRTIxREYyQkZBOUJENkYKLToxMEU3NDAwMEVENkE2OERGREQ2NkE2RkIxNjFBOUNFNDNBNTFGNzdFOTcKLToxMEU3NTAwMDgzN0I4NTNFNkY4RTc4QUY0MjY0NjFFNTkwM0ZBMkNFQTkKLToxMEU3NjAwMDgzQjE1MjE2MEE4RkUzNzU3QUY5QTFCQkU0QTBGNzI5QTkKLToxMEU3NzAwMDNFMDJGRUE0RjMwRjM1RkY5RTlBREY2OUYyMTNERTc3QTcKLToxMEU3ODAwMEZFRDU0MEZFRDU4MzZENzNCMjQ4NUVEQTE3QjdEQTcxRjUKLToxMEU3OTAwMDVGNzg4NDlGNjNGNjI3OUY3NzY2QzhEQTNCMDkzNkY1NzIKLToxMEU3QTAwMDlEMEExQkZBQkQyMkU5QTlBRThBNzkzMENFRDAxQTY4M0IKLToxMEU3QjAwMDhGMTk4OUY4M0Q2Q0YyNjA1ODczQkQyQTFGNDUwNzk3ODEKLToxMEU3QzAwMEUzMUFERDQ0QTZGNTExRjQ1NzZGRjJFNEZCQTE3RUZERDgKLToxMEU3RDAwMDM3NDY3NURGNzhGQTg2RDA2NDBDN0I5MDY5NUY2RENBMjYKLToxMEU3RTAwMDYwMUU2NDBGOTNCMzIzNEQ4Mjc5OEM3Q0QxRUNDMURGMjIKLToxMEU3RjAwMDU1QjhFQUI5ODIyMTI4RTc0N0JFMzY4M0U0MUJDMjg5QUYKLToxMEU4MDAwMERFODdBRjM0N0JEMDRFQjY1NDNBM0RFMjM4QUNFNzIwRDkKLToxMEU4MTAwMEJBM0NFQjMwOTMzRDI0NTZEQUZENjQ3RkI1NEQ3MEM5QTgKLToxMEU4MjAwMDYxNzI2RjY1OTVFNDExNERGNDdCMzc5NEFFRUM0N0RFNzEKLToxMEU4MzAwMDY3QzUwQjI1RTg3NzM1QUJGNjcyQjJCQUFFRTQ0QzNCNTAKLToxMEU4NDAwMEE1NDk2QUJFNTU1NEE2MjMzREI3MDJERDYwRENDRDgxRTMKLToxMEU4NTAwMDE1OUNCRTk3QTU1QTQ5NkYyRTdCN0Q2OENBNDBGRUMxQTQKLToxMEU4NjAwMDI3QUE1QzlFNUMwMEVDQjYxNTY1RTRCNzJEN0FFMDQ0RkYKLToxMEU4NzAwMDIzRDJEREIyNThBQjg0NzQ2ODhDMUJCNjcxMzJEMkZERTIKLToxMEU4ODAwMDZGNEQ3NENGQjMzNjc2ODIzQzJCQUMzRjYzREM0NDE3QkMKLToxMEU4OTAwMEMyQzMyODI4Njk0OENGMjMzMzgzMzc4ODkzOTA0RTk0ODYKLToxMEU4QTAwMDRENzg5RjdGRENENjhEMzc4ODIwNUY3NkM2MkE2OTc4QzEKLToxMEU4QjAwMDVFNzZEOUQ2Q0RCQzNDNDlEOTY0ODBGMjJCQjZCNkYyOEYKLToxMEU4QzAwMEYyNEMyNTREODBGQzc1NUIxRkU3RTU3OUNBMjZDQ0RGNEQKLToxMEU4RDAwMEJDRjU0OTVFM0U4QUVCQTNEQkI3M0U3MzAzRUFBMzVBNUQKLToxMEU4RTAwMDkzQTcxNEZERDNDRkMyRkMwQkYyRjA5RDU0OUVERUE5N0EKLToxMEU4RjAwMEMyNDUyQjdGMUVCRjlCRjA1RDU1OUU0Njk2QkZBMEI2QkUKLToxMEU5MDAwMERCREY0RkY5NEI2QUY5Q0JGREY0RkZBQURBMkVENDRGQzcKLToxMEU5MTAwMEZCODM2QUJCRjY3RURBMUY1MkRCMURFRUE3RkNCNzZBRUIKLToxMEU5MjAwMEY5MUJGREY0RkYwN0I1NUQ0NzNGRURERjU0REJCREQ1QjcKLToxMEU5MzAwMDRGRkI3N0Q0NzY0N0ZBMjk3RjRGMkQzRjFBRDFGRjA3MzcKLToxMEU5NDAwMDZBRkQ0RUY1QkIzQkI2RTEzREI0RDdEQzIwQUY1MDlFMkYKLToxMEU5NTAwMEU0QzczNjkwQkY2QjVCNjUyMUQxN0ZFRDc4QUVGRjM1QTQKLToxMEU5NjAwMDdBNzdBQkY3MDJERUNFRTQ3MUE1NkY2NzcyRkI2Njc5NEEKLToxMEU5NzAwMDI2QjcwQjhBMUVDODVEMzcxOUU5RjBGN0ZDOUUyMkU4MUUKLToxMEU5ODAwMDhGMjM3ODBGNTc3OTQwMjBGRkRFQjJEN0Y5QkIzMkNCMDcKLToxMEU5OTAwMDFFMTA3NUJGMUZBNEI1RDdFNjFGNTBFNzU5QTdBNjRCOTkKLToxMEU5QTAwMDMyNzM2ODlDNkNDNUU1OTkxNkE2MUY0RDkyM0U2RjA1QTMKLToxMEU5QjAwMDdFQzJGOEZGM0EyN0Q3MzNGOTBGMTQzN0UwQjk0OTJENTMKLToxMEU5QzAwMEU4MTk1QzVGQkRDMzFDNDJGRjU3QkQyNDUyNzk5REIzNUIKLToxMEU5RDAwMEQ4OEZFN0ZEOEEyNDkyMUVBQTc3MjY4NEYwQkRFNkJBNzYKLToxMEU5RTAwMEJBNDJERDdCOUY3NTkyNDhFRkM3ODhGMTUzQUNCMzFDRTgKLToxMEU5RjAwMDI4MzdBNjQ5MjgzRkVCOTg5NDUwNDRFNzZBQjA0RjQzMjQKLToxMEVBMDAwMDdENTI1OTJDQTFEQ0M5OEU3NzI2QTA1QzlFOTVDNUUxNkMKLToxMEVBMTAwMERFMUVEQjY1QzM3QjE0RTI0MzAyQkQxNTMwNEMxMjg5NTgKLToxMEVBMjAwMERGNzNFQjg0ODAwQ0YzNjg5Nzk2OTFGRjc1NDdCMzdBOTgKLToxMEVBMzAwMEE2QzhGODc5QTIyNkU3NzdGRUVDMkFEMjYzQjVBMEM3NkMKLToxMEVBNDAwMDY0RDI2MzZDQzg5OEU0REVGQjlCRTJEMTkxNjZENDVCMzAKLToxMEVBNTAwMDUyOUE5MTk5NDAyRTFGQ0E0Q0EwNzE3NzNDQ0FGNTU2MjQKLToxMEVBNjAwMDFFRTgyRDdDNjdBREI1OTBGMTc3REU1QzU2RjJFQjk2MzMKLToxMEVBNzAwMDg5Q0M5NTE4RTZDNzNDOTQ2OTU0REY0N0UyRUY1MEU3MkMKLToxMEVBODAwMEUxN0I4ODYxRjAxREVBRDdFQkFERUM0MUY0NTY1NjI1RTkKLToxMEVBOTAwMEM4Q0JCMEZBMTY5N0E0Q0IzRjk3QTlCRUFCRTQ2MTFFRDIKLToxMEVBQTAwMEI0NkZBRTdBNkUwQkU5OTNCM0E4NEYxOEVBOTczRkM0RTAKLToxMEVBQjAwMDhDNDRGRDAyN0FDNEMyRkFDQTQxNEQxRTZCNzY4QjI2ODUKLToxMEVBQzAwMEE3NkI1NUJENTExQkExMzcwNjk3QkJGRjc4N0QzOEQxODkKLToxMEVBRDAwMEE3QTA3Qjg3QTYzRkY5QkIxQ0UzMDQwMDVFMjY5RjgxQUQKLToxMEVBRTAwMEY0MEExMzdENzRCRjdGMzBCODk5NEMyNTEyREFFMzgzQTIKLToxMEVBRjAwMEMxQ0Y5NEY0NDUzQ0NBNjk5MzRGRjQ5Qzg4NzI0RjZBMjUKLToxMEVCMDAwMDMwRjg2QUY1Q0NENkY0QURBOEQ3QkUzOEJBM0MxRkZEQjQKLToxMEVCMTAwMDVFMkI0RDFEMzM3NzIxREQxQTg2RDBGRDBFNTlGNTNCNTYKLToxMEVCMjAwMDZDQUJEQUNGOEVFN0UxRUZGQUJDQkZBNTZFMUNERTFGM0YKLToxMEVCMzAwMEY3NEFFNDJGNDkyRDk2QjE5RDBERjZFOTg5NjRDN0YxOTYKLToxMEVCNDAwMEZEMjY5MzdDRkUwNTY4Q0ZCRjY4OTZGMTVDRTBGMEIzQ0MKLToxMEVCNTAwMEVBRkIwRDk5MEU4MkU3QkQ3QkVFQTM3NjI2NDM4NThCRkIKLToxMEVCNjAwMDlGRjczMzgyRjdBQUI0MDRCMkNCRTU5RDU2RDU2RTNDMkQKLToxMEVCNzAwMEJEQ0UwQjY1QjU0MkE3MDFGNUNGNUJBRDgxNzU1NkQ0MEYKLToxMEVCODAwMDI3RUE3RTgwMjk4MTFCNzFGRjEzMEM5OEQ1QTAxQUJDM0YKLToxMEVCOTAwMEU4Q0VEODFFQzFBMEY5OUZCREEyMkJEQzBFMzVERDM4MTIKLToxMEVCQTAwMDY1MzI5RTg3NEEyMzQ1RTgyRkQ1NkQ1QjY3Q0FDNDcyREMKLToxMEVCQjAwMDQxNkJFRkM1Q0I0MzI4QkVCNEJDMDg3ODc4QTY1RDJCNkIKLToxMEVCQzAwMDRGNTkzNzA1RTZCM0M3Q0NCNEZFMTVBQ0JGMDcxRjgzNUEKLToxMEVCRDAwMEE0QkNCNDBFRkJERjVEQUNCNjU3M0U1Rjg3QkZERjA1NUMKLToxMEVCRTAwMEYzQjlDRTA4N0JCMEUxREJEMkQ2Mzk1MjdCRTc5QkQzQjkKLToxMEVCRjAwMDJBQUZBQkNFMDUyQTk0M0JFMzcwMUJCN0E4RUQ0NDMyOTUKLToxMEVDMDAwMEVBRUQ1NUE1RkNGRUIwRjZGQjU5REEzREUyMUVCQ0VEN0YKLToxMEVDMTAwMEJENDk0MTU3RUNFNzg3RkUzM0FFMDA4QTk2MTgzQjBGOUIKLToxMEVDMjAwMEQ5MDE2RThCRjY1NzU4NEQwMkJFREZDNURGRUREMkRBNDMKLToxMEVDMzAwMDJEREEzQjkzRUM5QzI1MkYxNzUxNUM3MDk0NzY4N0YxNkQKLToxMEVDNDAwMEZFQ0MzRkQxQ0U2QUJFODBGMTRFODdERTVDQkM0QkM2QTcKLToxMEVDNTAwMDdCMzMxNTBEMEUyM0Q1NjdEQ0ZGMTU3RDdENUFGQkQzNjUKLToxMEVDNjAwMEJCREVGQzMxOEU3NzQ2RUU0Q0JFMTY2QUFGMEEwMTVDMDUKLToxMEVDNzAwMEEyQjREM0VBNkJGN0FCMjdCOUJDMTNEQ0YwRkQzRkRDRTEKLToxMEVDODAwMDlDMEY5OTU4RTE0MTNGNTNEMEVBQTc3QjZDMzY5M0JGNjQKLToxMEVDOTAwMDA0RjUwOTgwM0U4MDcxMEE1QTNBQzk5RDRCRjUyM0JGOUQKLToxMEVDQTAwMDQ3RjI1N0QwQ0ExMkE3QTFCQ0JDNEZBNDczRjdBMDU1MTYKLToxMEVDQjAwMEIxOEY4NjdDMzNFQzUzQUE2MTRBMzU2M0RFMTk4QkYxNDAKLToxMEVDQzAwMDAyQ0RGQjFDMjRENzZCRUY2Qjc3RTFFRjJCMjkxRTMzQjIKLToxMEVDRDAwMDQzQkJCN0Y5RjI4RTU0MDlFNjUxNzdCRkI5RjRFNzQ4NjAKLToxMEVDRTAwMEJGQTE2NUFFN0JDMkVDQjA5QzJDMUVDNzlEMTlFRjJGNTcKLToxMEVDRjAwMDQ1N0VCNDAxM0ZBMjNFNkUzNEY5QUNGODZFOEE5MjJBOEEKLToxMEVEMDAwMDUwNUNCNTBEQ0FERkEwRjI0Q0I1REMzM0Y1NkFEQTk3N0EKLToxMEVEMTAwMDA5MTJDRUFCM0U3N0Y2RDQ2MkQ0NkJBRTA0RDIwN0I2RkUKLToxMEVEMjAwMEJDMjlBNTczQTEzQzIwOTkyNTI0QUY4QUFDQjJCQjExQTQKLToxMEVEMzAwMDRFQ0Y4ODlFMEFFNEJGNjcxQzBFMDlFM0IxNDA1NjkyOEQKLToxMEVENDAwMDNFMTBGMzlDMTQ5RjY1NTFFRjNCNjU4RUUxN0FCRTY3RTAKLToxMEVENTAwMDVGRUU1NkZEMDI2RTFFREZEMzFDREI3MTUzMTFCNDhCQzgKLToxMEVENjAwMDc5NTA5MDE0RThCRkYxRkUwRDI1MTg5RkI4RjVGRTc3OTUKLToxMEVENzAwMEZFODRGMUFENERDOTIyQkQzM0IwQkIzQUU0QzU3QUREQTYKLToxMEVEODAwMDA2RDZCMTFERUNDODM1OTVEMzNCNzAzRkJBODZDOTMyNjMKLToxMEVEOTAwMERBRUJCQjBERDNGREE4OUZCQjkzNDRCNjVERTZCRkVGOTYKLToxMEVEQTAwMDEwMUVBRkVBMjhEMEM3NEI2NTk0RUJGMzZCQjM3QzBGMTIKLToxMEVEQjAwMEJBQzc2MzNDNTA2MTExOEU5MzY0OTA2NTdDM0FCOEIwRDkKLToxMEVEQzAwMDgzNTE3QzdFNzI2RUFFODQ3MURENzE4NTExNzFCMDkzNUEKLToxMEVERDAwMEY1RkQyNDRDRDE5NzNCQTc0NUM0NkREREEyMkZDN0RGQkQKLToxMEVERTAwMDRGMDhDRkUzRUY0NDg0RTc0RjIyM0Q1MjNDMDkzRjdGNzkKLToxMEVERjAwMDg4RTE0NTAwOUYyNzE4RUFFOUM2QUY4NzUwM0MyQkMyM0YKLToxMEVFMDAwMDExRURGNjk4NjFBMjA3Q0Y0NTMyQ0QxRDMzMzAwRThFM0QKLToxMEVFMTAwMDhEODgyMTdCRTlBMDNCODZDOTkwQjcyQzY2MjQ0RjJEQjUKLToxMEVFMjAwMDA5QzEwM0I4NUZCNTA4NTI4OTQyMUEyQTc4RTBBRjUwODkKLToxMEVFMzAwMDZFODdGRDJBQ0FERjQ4Rjg2NTY2NzJGRkEwNDNGRDNENzQKLToxMEVFNDAwMEIwQTAxODIyM0JDMkY2QzAxMEE5REE4MzVCQzcwODNGMDYKLToxMEVFNTAwMDZDNzk1ODlFQzc3QjZGNzdBQkU3MjgyRTJENEU4REYwQ0YKLToxMEVFNjAwMDBBMkI0M0JDNEQ2MjAxN0M4NzMyRjNGRTEzNEEwOEU2NEQKLToxMEVFNzAwMEIxNDZDRUFENDAzQjYzOTVEMDQ5RTMyODY1MEUxRkVFMDkKLToxMEVFODAwMEJCOTMzMENFREI4OEYxREUwQUE1OTFGOEQ4RTNFNkY2MzUKLToxMEVFOTAwMDlGQ0M2NkZCMTE4RkFFOTkwMkM1OEZENDFGOEFBOUMzODAKLToxMEVFQTAwMEMzOTc3QUY1QkQwNjJEOEU0REEzQ0I5N0RDRENGRURDMzcKLToxMEVFQjAwMEQzMkUwODVFRjQ4M0RGOTFCQjFERjFBREU1NUI3QzRFODQKLToxMEVFQzAwMEZBMURDRUNDMzExNTlENDg5N0VDN0E2RTg3ODIxRUEwMzQKLToxMEVFRDAwMDdCRDk1QTlDOTgxNjU3Rjg1MTk2OTk5RkU3NjcwOTNEMzgKLToxMEVFRTAwMEY4MEI2OTcxNDQ2MTcxRTA3NDc0NjdDNEEzMEJCRjg0NEIKLToxMEVFRjAwMEU3M0Q5OTYzNEEyNDk0MzM4RjY4RjcyRjE4RUYxNzlGRTMKLToxMEVGMDAwMDJGQTQ3MzgzNjk4MkY3MjJENTlGOEU3NjVEQTIzQTVFMjUKLToxMEVGMTAwMEEyNTNGNEQyRkJFRTMwMjcwMUVBM0ZDQTc4RkRDNERDRUQKLToxMEVGMjAwMEJEQ0JGMURFRDUxRTI0MUNFNDlGN0IzODlDMjNFOTM2NDMKLToxMEVGMzAwMEI1REQ1RjMyMEFFMTY1MDA3RDk4RDE5NzhFMERFRTE2NDIKLToxMEVGNDAwMDNBMEZBQzdGOTAyNTU4QzZGNEE1RUJGMTQ2NkVGRjc0REUKLToxMEVGNTAwMENGOTcyOUNFNzIzMDNBRkZDNDFEQ0ZGREQ4NDk5QjI0RUMKLToxMEVGNjAwMEI0NkZEMzcyMUZBREE2N0IzMDBGMzIwOUY1NUQ1QTdCQUIKLToxMEVGNzAwMEM3NERFOEY3OEFFNDg3ODAzRDZFMkM4RjkzRkI2RTdFNDkKLToxMEVGODAwMDc4QTM5MUYzMDc0QjExMDk2RjkxRjFBNTkxRjFBNDM5ODEKLToxMEVGOTAwMDU5RjFBQTlGMDJGNDQwMkNERTA3OTBBRUMwMzhDMUVFQjIKLToxMEVGQTAwMDA3MThCRDEzNTBGQzYyRjM2REJGODNGRUJFQ0MzMzRCMUMKLToxMEVGQjAwMDI4QUZCM0RFRjIzRDY5ODc3OTdERjk0QjVGMTZDQUU5NjgKLToxMEVGQzAwMDZENjJBNzJEM0VDQ0VGMjkwQUZDRkU1OUE0QkNDRUM5MjgKLToxMEVGRDAwMEUyNzQyN0EzREU3MEZERjM2OTI2RDJGNzEwRkM3REJFMzQKLToxMEVGRTAwMEU0OTE5Mjg0RkRBRUZGQTMzNUU5RkZEMDZFNjE1NjNGRjgKLToxMEVGRjAwMERBMkRFRTc2MkQ5RjQxNzY1OEQ2NUIzQzdGODkzQjYzQjgKLToxMEYwMDAwMDlEOTI4QjcwMkIyNzdGRDFDMUNDMzlFNDJGMTJERkUzODcKLToxMEYwMTAwMEZFQTI1MTQ2NkYwMEYzRUM3RDFCQzVEREVEREM3N0M3MkEKLToxMEYwMjAwMDNDOEM1N0FCNEZCRTU2NDZGRDNDNEVEREZGOENDOUQyRTMKLToxMEYwMzAwMEY4NUJCRjdFRDFFQ0Y1MjFERjQ0N0UxRjk5QTVDNTk1MTUKLToxMEYwNDAwMDk0N0MzMjEzRjAzN0VBNzEzM0M1RERFNTBCNjVGNDdCNTAKLToxMEYwNTAwMDlDREQ4RDQ2QzI2Nzk5NTE1RUJDM0E2QzlGRDY5NDVDMkMKLToxMEYwNjAwMDU0OTQ5NUM0N0Y5N0Q4MDcxQjA2RjlCQzgxRjk4MEQ5QzEKLToxMEYwNzAwMERDQ0U2MzQ1NDhBRjU5QzA2NjI4NUZCMjE0NkU0MDY2NjcKLToxMEYwODAwMDU1QzYzMDVGMTg5RENBRTc0NUFBREY5NEVDMkRDQUUyNDkKLToxMEYwOTAwMDcxMDg3NEVFNjM1MjU5RkE5OTg0MTIzNjEzRjUzMjdDNzIKLToxMEYwQTAwMDQzQkQ2QkRBMTVDM0NGN0I5Q0ZBRkI5MTQ2MjM4RjE3QzgKLToxMEYwQjAwMEI5NDE1REJGMDlDRjc1QzZFMjdCNkY0MkM4MzJCQTZGRjYKLToxMEYwQzAwMEZEOUJENTdBQTJENTExMzIwRTQxM0ZEOTFCNDdFOERFMTAKLToxMEYwRDAwMDY1QzQzOTMwRUU2RjI5MkVBNzlDOTExRjE0RTE0MkY5QzcKLToxMEYwRTAwMDdCMjVGRTZFNzcyNThGMDdBODVEQzEwQzc4MTY1MEFCODcKLToxMEYwRjAwMERFNTM1MUVFRTJCRjRGQ0NCQzVFMTlERjU3QTEyREE2MDcKLToxMEYxMDAwMDhDRkYwQjExRkZCQUFDMkMwMUVCQTdCMjBFOEE2MzY0MjMKLToxMEYxMTAwMEVENENFNkYxMTJGQTczQTc2REZEQkMwM0E1RjkwMUM0MkQKLToxMEYxMjAwMDRBMjNFRDUzNDZCRTY2QTM3MTREOTU4Q0RFMDlBNzM3ODEKLToxMEYxMzAwMDlCNzBGRkJCODIwNTQ0NDNBRjFGRUVFRDRDOTlEQTY5MkIKLToxMEYxNDAwMEU3QjFCQkJGRjkyMDBERTU3MkJFQjBEREY3MDZEOTBEMDIKLToxMEYxNTAwMEIxRDI3NkQ0OEYzMTdBM0VENEVFQUZENUE4NzRCMkFEQTkKLToxMEYxNjAwMDRBMjI3QzZCRTU2RUU1MThDNURCNjdCMUVFNkFEQzY3QTkKLToxMEYxNzAwMDY1NTUyNkU4RjBEQ0UzOTczRDlGQ0U3Q0UzQzJGQjBEQUUKLToxMEYxODAwMDcwQkVDRTE1RTk5RDJFRjlCQzlCQ0FCNzU1Qzk4M0Y0NTQKLToxMEYxOTAwMDlGRDM0RkZGQTk0NDRGRkRGNzlGNDFFNUFEQTEyRkUyNUIKLToxMEYxQTAwMDZGMDA1MDZDRUIzRTExNUYyMkY3REFBRDkxNzA3NkFGRDUKLToxMEYxQjAwMEQwQ0JFRjhCRjc0N0M2OTM3M0I4RDg0QzVFRTc0RDAwQzIKLToxMEYxQzAwMDM3REI0MzgyQTc4REUxRUZERUU4RUI0RENEM0UxN0NGNzUKLToxMEYxRDAwMENGQ0JCNUZBMjFFN0NENTgxRkY2QkQ2RDMyRkU4RThFMkUKLToxMEYxRTAwMEJFN0U0OUQxNDdGMUZDREM1REFCQ0ZFN0Y3QzNGM0ZBNTQKLToxMEYxRjAwMDdBOTFGODg5OUMyRkNDMkJFOTQ3NjFGM0JBQzI2QUQxODYKLToxMEYyMDAwMDk1OTdDRUVDMzNBRkE0NUJDM0U2NzVCNTRCNUZERjU3ODQKLToxMEYyMTAwMDFEN0Q1RUQ3RTU1QjA2OUM5NzU2RUZDNjg5MTc1NjJGNzYKLToxMEYyMjAwMDcyMUQzNzRGQjVGNDAzNzc1RUZGRDZEMjBCRUJGN0Y2QkUKLToxMEYyMzAwMDc5MDNEN0JCQkIzMjcyMUM4NURGNTMzNzdCREY0NjM5N0UKLToxMEYyNDAwMDU3QzZFNDk1Rjg0RTM4NzNDNDQ0OEQwQjJFNTJGOUUzM0IKLToxMEYyNTAwMEVGRThBNzQ4QzI3ODAwRUY1MTZDRjc3OTI2OEY0QjM5NTkKLToxMEYyNjAwMEZDRUMwMjNGOUVDMzJDREI2Nzk2RjFCQzIzNTNGNTVCOUQKLToxMEYyNzAwMDgzRTA1OTg4RkNCQkM3MkFDNTYzM0NBMEM1MkRBQkZCMDYKLToxMEYyODAwMEFCOEU2QzhDRTdEQkIzRjM5RERCNDhFRTMxQkQzREMzNDkKLToxMEYyOTAwMDk4QTcwOEY1MzU4ODMwQkE5N0YxMjc2Qzk3MTQxRTQ3NjAKLToxMEYyQTAwMEUxMjVGQkFGNUVGMEZDOTlGNjU1M0ZFNkZCMkEyRDdFOEIKLToxMEYyQjAwMDNGRENDRTYyMTM3QUVEMkMyRDdFN0JCRDNBQ0UzNzU5RTIKLToxMEYyQzAwMERDMUYwODc2M0VGRDNFNkE3MkFFNDhGMUNEOEY1ODNCOUEKLToxMEYyRDAwMEQ2RTNGREEzNDc5Q0NFNzhEQ0NGRkM0NjlEQjc2NjM3Q0UKLToxMEYyRTAwMDZBRjcxQTUyNjZFNjhFMzE0NjgxOTc5NkZFMEYyOURDNDAKLToxMEYyRjAwMEEyMjgwMDgwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwMTIKLToxMEYzMDAwMDAwMEJERDdEMEI3ODE0NTU5QUU4QTlBRUVBNTdEMkRERTMKLToxMEYzMTAwMEE5MEU5RDE3OEY1MDlENzcyMDg0MEE4NDE4OTA5MTI2RkUKLToxMEYzMjAwMDA5MTk1NDg2RTlBMDIyRTgwQzM2MDkwODQ4NUUxODFGMUUKLToxMEYzMzAwMDYxNjVDN0NBNDMxRTUxQzczODQ2MDQwNDZDQTIyOEJFODMKLToxMEYzNDAwMDY2OUE1OUQ0ODhDMTZEQTNDM0U4MkU4RTYxRDcxOTFENjIKLToxMEYzNTAwMEM3Q0JCNkMwNTUwNjEwNUFERDQxQkRBQkMzM0RGRjdGREMKLToxMEYzNjAwMEFBOTJFRTRBQjdDMkU4Q0VEREVGNjYzRUE3Mzg3NUVBNEMKLToxMEYzNzAwMEJDRkVGM0JGRkZGRjlDQkUyQjgxQUMwQzE0MTFGQ0UzNjEKLToxMEYzODAwMDRBMDk3MUU2RTRGNDc2QjkwOTE5NTdFMjE1QTdEMEY3RUUKLToxMEYzOTAwMEJGQ0QzNDEwMzI4RDkwMERGNDQxNjhCRDkyMjdGODc3QkYKLToxMEYzQTAwMDczRjRERjIyMjFFQkNCRThGN0QwMzA4QjkwMDdDNDQxMTgKLToxMEYzQjAwMEE3NDBFQjFGNzAwOUEyQzI0MTNCMDlEQkVEN0RDRDYwODgKLToxMEYzQzAwMEYwQjgwODc5RTgyNzM5QkRCQzdCQjhCQ0M1RTdEQTA1RDkKLToxMEYzRDAwMEU1NzEwNkUyMEJEOEEwMTM3MTM1QTFFRkY3NUE0NDY3MjcKLToxMEYzRTAwMDU3MDkyRDBBODNFRTFBM0IyREVGRjlDMzc1OUM4MzkwQzQKLToxMEYzRjAwMENDRjFGNDVEMEEyMTc1QUQ5NUU0RDg1NDQyOUUzNzg1NzEKLToxMEY0MDAwMDVGM0QwRkYzRDlDQ0Y5NzdEMzdFNUVFODI5QTkxNjY4NjIKLToxMEY0MTAwMEZCRTUyNzA4QjFEMjRGRUJENjVFRjVDMEYxNTE4NDRDMjUKLToxMEY0MjAwMDNGMkVDRTg2Rjc3NURCOUQzMjRGREYzNzBFMzY1N0MzNDIKLToxMEY0MzAwMDM4QTQ5OUM4QjkzMjIxNjlGQzZDREU0RUZCNDlCQkZCOEMKLToxMEY0NDAwMEIwREM0MUE3RkNFMDgwRDQxN0EyRTVGMDJFNEVFRTk1OEIKLToxMEY0NTAwMEEwN0U0REM5MUE4MDhGQ0QyM0Q5RTg3QTk3QzI1NEYxODYKLToxMEY0NjAwMEJEQjNEQTA4RURBRTMyQzk5REI0OUZEMzQ2QjIwOEUwMTEKLToxMEY0NzAwMDc4MUVGRTY2MEQzRjk3RkU0NDJBMjc3NEZFNEIwMzZCRjEKLToxMEY0ODAwMDk3RTJCODIyMDU1OTA2MkQ1QjQ0OUM4NzQ1MTI5M0RCMTEKLToxMEY0OTAwMDY4MzkyRDgxNThBQzUzMDgyOTZCMTcwRkRFMDFFM0FGOTMKLToxMEY0QTAwMEIyOEJCRDE0QzY4RTcyRjFFMEMzQjBBRUU2NEM5MTk3M0MKLToxMEY0QjAwMDYxNzAzRkMyNTVFQjdGQjlDNzZCMjI3NERDODk3QjRDMEUKLToxMEY0QzAwMEI0MzNCNjhGRTdFOTdGOTMwMkQxRTVDOTdERDFFNTkyRTgKLToxMEY0RDAwMDYwNzQ3OUVBRUJEMUU1N0QxMjgzRjcwQ0NCOTgxREM3RjgKLToxMEY0RTAwMDI5QkMwNzBFOTgwOUNDNzdGNUE5MDRCRjk5QzI3QkJGNDgKLToxMEY0RjAwMDkxMTA1OEJGRjJBQzE5RjFBMTcyQjVDRDAzRjg3MUVBQzEKLToxMEY1MDAwMDY0QzIyRTMzMkRCRkYyNUUwMjdFN0ZEM0QzNTZGNkJEOEEKLToxMEY1MTAwMDIxRjA0QjI4MkJCRjRDMjRGMEZERUE1MTgxQjI2NDNBMTQKLToxMEY1MjAwMEVGOTdCRUU2NkZGMDE2QjE2NTE5QTFGRjVGMTZFRUVBMjAKLToxMEY1MzAwMDgyRkFBOTgxMzI5MUJFN0Y3RTAyMjE4MzUwMkZGODhCRkYKLToxMEY1NDAwMDYxOURDRkZGOTVDNzdFQzM0RjlBRkRCREI0REY1MzJGOUEKLToxMEY1NTAwMDNFRjE0QjgwRDdBOTI3QzcyNDczNzRDRTk3MUE3QUE3OTgKLToxMEY1NjAwMDc2NDE3RDlCNURFQUE1RUY2NzlDN0EyNkRCMTdCMTJGN0MKLToxMEY1NzAwMEFCRjc5OEEzRDZEOTJDNzFCOENFNTZDMUQzRkUyOEVDRTAKLToxMEY1ODAwMENGMjEyM0UyNTNDQjcyN0Y1RDkwQjY2RkUxMzI2NTA1RTgKLToxMEY1OTAwMEZBMzE1MTNDMkQ4MkIyOUNFNkE0RjgzQUMzQzFGMEI2RDAKLToxMEY1QTAwMEM1NEFDQjMxRjY1RDdCRDY2RUUxODk2RkVBNzBGOUU4MkEKLToxMEY1QjAwMEE2Mjc3MDNFMDUyN0RFNDVCQ0RFNkY1NDBDMDkwMEM3NDgKLToxMEY1QzAwMDREOUNCQzlCQ0U3RkJGRDU1MTRDOTJFMDk5RTkwN0JDQzYKLToxMEY1RDAwMEI5NTMzMkUwRkNFOEJBMUU2RTA0QkM3ODkzOTc3QjQ5QkQKLToxMEY1RTAwMEZDRjEwQUQyRkZCNEJENkFFQTM3RDREMzcxRERDNTg0MTkKLToxMEY1RjAwMDlDRkQ3M0MyMEQxRTNBOEZGQzJERDFGQjVFRTg4RjJFNTEKLToxMEY2MDAwMDZGMDBGODUwN0NBQjI1MTFFRkREMzA5RkFDRjVFOTQ4NzkKLToxMEY2MTAwMDI3MDRFNzUzNzBFMkZERUJEQzc0QkVBM0NEQTQxOUUwMzAKLToxMEY2MjAwMEEyMUZCNzVCNjI3Q0U0QTlBNzY4M0YwNUQ4MEQ3RjlFNDcKLToxMEY2MzAwMDY3RkQ0OUE5NzQ1RjU0QkE3QTg5NjM3NDQ0RkY2RTE5RUYKLToxMEY2NDAwMDQzRTk2RDM1QzdGODhCRjY3RUI1NkUxRTVBRkZEM0Q1RUMKLToxMEY2NTAwMEZFNUQyNkY5QkUxMEVFQkY1OTg0RkQzRjc5RTdEQzA3NTkKLToxMEY2NjAwMDhFMUI0N0NFRTdDMzNCM0Q5RUFBODhGNzM3NkU1OTczODIKLToxMEY2NzAwMDMwODNCNkFCREY5QjMyODU4RjgwNkZGRDkzQUZBNjVFODQKLToxMEY2ODAwMDRGREY5RkRFMjNDOEMwMDJFQjE3M0ZGRUYzMTlGMEREMEEKLToxMEY2OTAwMDkzN0MwMEU2MEJGNTFFQkFERUQzODFERjM4RTBCQjFCOUUKLToxMEY2QTAwMEI3M0JBN0YwRDI3MEZCMTU1QkU2NzhBQTBBODZFMTc5MzIKLToxMEY2QjAwMEIxNzRGQTQyMzlFMzczQUIwMzQ2QkYwNUU4MjJGMEZCQUQKLToxMEY2QzAwMEVBMzE4MEE3NUIzODM5OTc4RTUzMjZGODc4QTAzQjdCQzgKLToxMEY2RDAwMEE5QzdBODRDMjc2NEQ2NTdGRjdDNzAzNEFENkYzQTMwNjkKLToxMEY2RTAwMEFEQUM4QkQ2NzcxOUJDNTdGRDA4RTg2RTI3MkZFRkE2NzcKLToxMEY2RjAwMENEOUU3QkZCRTY1NDVGQzRGRUZDNTZDNUZGQUU4NUY1OTAKLToxMEY3MDAwMEQ4OEY0MjcxMjM5NzMyRjU4MTgyREE0QTI4Q0YyODIyOTYKLToxMEY3MTAwMDlDOTlGMjYzQzcwOUUyRjFEQjYwM0NGMkFFMjE5OTkwNUIKLToxMEY3MjAwMDEzRkQ3NzE1MEIwNkU0NDdENzAzOUQ5QzIyMEUxOUU4QkQKLToxMEY3MzAwMDZFQkZCREY5REY3MUJDNjc4RDM4REVBQzYwMTIwN0ZDQUYKLToxMEY3NDAwMDc3RkY2MzlDREM0NTAwMUVEMUY0NzdFMjQ0QkI2MzM2NEYKLToxMEY3NTAwMEEzRUIxQkJDMjgwNzBDQzQ0NUZCNUJGOUU4MjRFNDAzQkUKLToxMEY3NjAwMERBN0JGREZFQURGMjQ3RjdBM0M3OEIxMzJBREUwMjZBRjAKLToxMEY3NzAwMDQ2RTI5N0ZFQkI1MUYzMTQxM0QwNjM3RDJCOTUxNzExMEUKLToxMEY3ODAwMDc0NTM3RkJDREI0NDZDMjNDNzIxNjQwODdGMDlFMDJGREUKLToxMEY3OTAwMEM1NEIyMkUxN0FBREM4MzdFODFGNjdBMTc4N0IxMkZFMUUKLToxMEY3QTAwMDk1Q0RDQTg0OEU3RjEzODc0QjIzQUIyNzA0RjI4MENGN0QKLToxMEY3QjAwMDcxODI1OEQxOTkzMUNDNUY0OUI5MUZGOUZDNjlGQUNGRjAKLToxMEY3QzAwMDJFMTlGODQyRTAwOEQwM0JDOEQyREQyMDVGQzRFMDk5OTIKLToxMEY3RDAwMDZENTBBRjhDRjcwMDNGMUEwRDQ4NEE5RkU0NTc4OUM4MTcKLToxMEY3RTAwMDdGNEY0QkExQzdCMUZEMzM5MzY0ODVCRTNFMEJGNDYyREUKLToxMEY3RjAwMEMzNzY4RUU0MDhGRUQ0MTY3OEQ1MTFBMkU1NTM3QjQ3NzQKLToxMEY4MDAwMDU1RjAwRUMwREI3Rjc1QzAzQTRGMDY0NjU1OTgxQ0YxODcKLToxMEY4MTAwMEY5ODY5RTZGRDI5OTIxREU3QzAwRkZBNDc4OTdFNEY2RUEKLToxMEY4MjAwMDI0Qjg2OTk5NzQ1MkExMEJGMjZDNTQ3MzQ5NzM4QzdEOUUKLToxMEY4MzAwMEQzREFCOTRDQ0QyNTEyRjA4RjlGREE2NEUwRTNDOTk2OTQKLToxMEY4NDAwMEJBNDc0MDVFQzM5Rjg3QkVGRkY0RjU1MUJEQjBGRkJGMEUKLToxMEY4NTAwMDUwRTVFQTUyOEU4REEzRjUzM0RBQ0RFOEZERjU1N0YyODcKLToxMEY4NjAwMDkyNDI3NDlDNEY4OTk0MDRGMkUyRTk2Q0VGMzgzNzdENDAKLToxMEY4NzAwMDlGNUUzMUU4RTEyOTNDRDJBRjIwNzIwNzZEN0E4Qzk3MDgKLToxMEY4ODAwMDZGMTNFOTdFMkMyMzU0NUVDMkIzRDQ2NzAyQkU0MjNBQTIKLToxMEY4OTAwMDUzNzBCRTg0QzhENTAwQ0YxNUYzMjhGQzRCNTgxOUU0MkIKLToxMEY4QTAwMERCMkFBRjQ5RUVBMjcyQjg0RTYwRjBBRURCQzNGOTNCODMKLToxMEY4QjAwMEU4NUM5NkREMTMwRDhGMUI3QkNDQzM3ODAxRkZCNzNENTEKLToxMEY4QzAwMEEyOUU4RUIzNEFGMEFGMDdCOTM1OTY4QTlDNTFFNTE0RDMKLToxMEY4RDAwMDFGMUU4QkZFN0UzNTA5RTJCQ0VBOUYzOTZGOEUwNUU3NUQKLToxMEY4RTAwMEJGQTg3MDdFM0FEQjczMDlBQzhGNUI2MEMxRjlCNDNDOTIKLToxMEY4RjAwMENCQTE3Qzc1OTkwMkE4NEY4NEQ3NTA3RTRDRTc0QkRFOTQKLToxMEY5MDAwMDY2RkI3MDlEQUEyRjM1QUQ1REVBNTk0NjlGNjc1QkVCOUMKLToxMEY5MTAwMDNDQ0I2ODE1OTIxQUYwOTE5RTI0QzQ5RkQ1NTU4MTgzRTMKLToxMEY5MjAwMEM4NTc4OEY4RUJFQkQzQTEzRkUyMTFBMUJDRDlDRUY0QzQKLToxMEY5MzAwMDNERjJEOEFCQzA1N0ZFNDJDNDAwRTBFMThDOTUxQ0I2NDYKLToxMEY5NDAwMDlGRjEzNkRGNEIzMTlDNUMzN0I0N0Y1RTg0NjNCRDQ0RUUKLToxMEY5NTAwMDQ0ODBFMzdCNDYyRkFFNUI1OTQ1QzRERDk0QUZENDVCNTYKLToxMEY5NjAwMEJDOUFGRTI1RkU5MEFFRTc0NkQyOENFQjVFRThDRUMyOTYKLToxMEY5NzAwMEZENUM0OUJBQjFEQzQwNDIyNkMyQzNGRTk2MjUwMUJFRjkKLToxMEY5ODAwMDdFNDY2NERDNUZBQTI3MTE2QkYyNDhCQzAyRjg3QjIyM0EKLToxMEY5OTAwMEUwQjY3MjdCNzQ5OTNDMTY1MUNFMDIzOEQzNzIwNEZDRTcKLToxMEY5QTAwMDFCRjc5RDM3N0I2MkMwRkRDMTIxNzlFNDJGQUM5OTE0MTAKLToxMEY5QjAwMDg5Qzc2RDM4REYyM0VBQkUzQzc4Q0Q4RDE5QzA0N0VFOEMKLToxMEY5QzAwMDAzODU3OEI0REE0MTM5RjA1RkZBQUYxOTU4MEU1QTY4RjYKLToxMEY5RDAwMEZGMDk1Mzg3Q0E1ODVGRDZDRUNBMkRFRTE3QkQ1QjI4RTQKLToxMEY5RTAwMDcyNkMzNkZBMzI0NEJBMzk3NUJDRjdBMDgxQzI3NTYxQkYKLToxMEY5RjAwMDhFRUY3NkQ4RUYzQTgzMjc1MzQwN0VFMkM5RjNEMjc5NkYKLToxMEZBMDAwMDkwNTZCNkJGMEY0RDY5MkU2QzhFQTE3RjY4RjNERkNDODgKLToxMEZBMTAwMDA1ODIwNkUwMjMyRjMyRkRDMjVFMUEzNjQ2RjJGRkZCNTYKLToxMEZBMjAwMEREOEM0RjI2MEQ4NDcwRkZDM0NGNzEwNEY0REVBRERDOTYKLToxMEZBMzAwMEZEMTlCMDhGNUIzMzI0QUU4M0FFQTk3NDVGREI2Q0U0MzkKLToxMEZBNDAwMDM3OTQxN0U1RDI3RDZERDhGN0MxQzEzMUI0NUMzQTc3RjAKLToxMEZBNTAwMDEwQjY4OUFFREJCQkU2Mzc0MENGRDMxMjk4REU5Q0Q4MTgKLToxMEZBNjAwMEJDQ0I0MEZCNEJCQkExNjA0QTA3QzVDRkNENkUwOUU3QkQKLToxMEZBNzAwMDkzMzBCNUZCMTVFODI3QkM0NjEyN0I2OTNGRTlFRDhBNTgKLToxMEZBODAwMEZCRTYyMjE4QkZCOTBERjFCNzg2RTBGQjk0NkJEN0I1NDIKLToxMEZBOTAwMEMxNzc3NzhGMjZDOTNDN0M0N0RBMzhGOEVFNDEwNzQxQjkKLToxMEZBQTAwMDdEMzFDNUMwREY1MDAzRTUyOUFDOUNCQzhFRjNGNDIyNDgKLToxMEZBQjAwMDUyREY4RkUzQTQ5OUM5NUMyRTk5QkRGNzE3MjEyOTdBRUIKLToxMEZBQzAwMEY2NjJCRDFGRDc5QjU2RDk1QzAyRkRBNTY1QjNBN0NCRDcKLToxMEZBRDAwMEU0MzNFNEQwRjEwRTFEMzZGQURCRTk3QzBGQTlGQjdFOUUKLToxMEZBRTAwMENCQUU4QUI0NDhGRTc5RThCNDQ1MzA1MEZERUM1MEJBNEMKLToxMEZBRjAwMEE2OTcwNjZEQTA5N0RFNTI1Mjk5MDY0NDk1OTUzMzM3MjYKLToxMEZCMDAwMDA5RjZDNzk1MTk1RDdGRDZFODQ5OUEwQTc0NzA5ODI3NTcKLToxMEZCMTAwMEIwMEZGRjY5RjMyNDgxMUU3OUE5ODlDRDVGQkY3RkZGRjQKLToxMEZCMjAwMEFDRUU0QkQzMTcxQ0YxNDdDOEE1QTY0NUU3NTBERjZGRDUKLToxMEZCMzAwMEZBNDI4ODdBN0ZGQTRFMEIwMTUxMzUyNEJGNTYwRTU0OTMKLToxMEZCNDAwMEMzNzcwRDY0NzAzREUwNTM0MzIwOTFGODIzRjBGQkQyNUUKLToxMEZCNTAwMDg0RDhFMzZBNzhEREY0MDU0Rjk0OThFMzlBQTJERjdGQjYKLToxMEZCNjAwMDMxOEEyOEEzNjI3RDk3MUFGRDlFQUUyM0FBRENGN0Y5OUQKLToxMEZCNzAwMEQwM0FFMDNEMjkwRjM5QkNENERFOUIwN0YyOTA5NkNGRjYKLToxMEZCODAwMEZBMEQ4QTcxMzJBOEUzNEM4RTlEMTE0MzBFRDBCM0E5QjEKLToxMEZCOTAwMERDNkI4NjdEMzkyMzg1NTBBRTlEMjU2NDJFRDQ1RjZBNEIKLToxMEZCQTAwMDMwREM1MDAzRkIyQjg0MUQwQkVDQzNFMzY4RjVEMDNFMjcKLToxMEZCQjAwMDcyMUZDRjJDMzI5MTIwRUU0RjE4RTcwMUYwNTNGMjA5NUIKLToxMEZCQzAwMEQ5RDZGRjg5NDkwMjdEQTBGRjE1ODQ5Rjg2MkY5MTcwQTkKLToxMEZCRDAwMDU0MjJGODQ2NkFDNzYwRDA0MEU5RTNGRkI4QkZFQTJFNzYKLToxMEZCRTAwMDJBQTRBODM3QTBEMUY3NUZCQjNEMzM2OTNENkY4OEEyMzcKLToxMEZCRjAwMEY3QzREMjIxRkE0Nzc2RjNBMDgxNTdGOUM1RjlFRUFBRTYKLToxMEZDMDAwMDk5OTE2NUY2N0Q0NEZCOUEyQUNBMUY0QThCNTg3QjIxM0QKLToxMEZDMTAwMDhCM0JEQzlFMDNBRkJCOTk5RTIzODQzMzAxN0U0MzY1RkYKLToxMEZDMjAwMDhCQUU2Q0EzRTU0OTExNjU1MTU3RUZEMkQ1QTdFQkNBNEUKLToxMEZDMzAwMDYzRDlGN0E3RURDMTRDQjA0MzkzQjI4QzM1MDJFNTdCOTUKLToxMEZDNDAwMEE3MzM4MjRCMzg1QUJFQTdDMzVDNTM0NUNCMERBNTRDOTYKLToxMEZDNTAwMEVFMzZGNjczMzI4QTBEMTU3RThEMzJEMzFGNkQ3MkM4NjMKLToxMEZDNjAwMDU0NTcwNDcwMTgzQzA4RkNBMUJFOEYxMzM5NEEwRkI2RDQKLToxMEZDNzAwMEMwREUyMDk2QTE5RDE0RDEyRUMwNjFCQkZBQzAwN0Q4NkEKLToxMEZDODAwMDJFNkVGRjA1MDZBNEYzQUU4MkEzRUNCQkMwNDcyOERGQUYKLToxMEZDOTAwMDM3NzRBRUYxMDI4MzdBQzNDOEY4OEY0MDdDOUUzMTk0RUEKLToxMEZDQTAwMEJFMUJGQjZBODhDRjM2Q0MyN0NGNjQ3ODVFNDUzRTc5OTEKLToxMEZDQjAwMDgwMTM4MTNFODdGMDE0RkFCNTBERDM4NUY2RkQ5RjI2OUIKLToxMEZDQzAwMEY1RkYxRUQ0ODdDNDVCM0U2OTEzRThGN0ZGQUJFMUEzRTEKLToxMEZDRDAwMDY5QTBERkZENDk5NTA3OUIzOTdGMjE4Q0JCOERGODBBMTAKLToxMEZDRTAwMDQxOUVGREI0MjFGNzE1MDNGREVFODgzMUI0MDM3OEU4OTkKLToxMEZDRjAwMDhGQjNDNkQ1MDg5NDdGMUZCMTg3QzY3MTU0NUVENzY0OTEKLToxMEZEMDAwMDE1QjA3MjRBNjgwN0MwRjNDOUFDNDI1NjFFMTcxQTY3OEQKLToxMEZEMTAwMEEwRTU2QjdBQUY0Njc4MUZDOTBERUQ4MEYyQ0Y3QTY3MDgKLToxMEZEMjAwMEIxRkE0OUExNzEzQzZEOUZBRDc4MTBGRUJCQzVEODc0ODYKLToxMEZEMzAwMDNEMjc4QkYxMTM2RDdFRkYzNkQ1RTNDOTgyRjVENDMzQjEKLToxMEZENDAwMDM5QjJFNEE2RjcxNjAzRkY1RDYyMjAyMkExRkM3NkY3MjQKLToxMEZENTAwMEU5NjNDRkVFQTZGMEQ4REQ5QTQ4N0ExOTNBN0EwNUFBNzcKLToxMEZENjAwMEQ3QTYzMUQ0QTdGQ0JFMUJGOTczRDg0REY5MzUzQTgxMUIKLToxMEZENzAwMDA2NDNFMDNGNEE5QzY2OTFCQURDQzNGQkEyOEQ5RjM2RTYKLToxMEZEODAwMEExNzkyRkY0OUZCNkE0MDhFNTgxQzVFRDc5MEFDNkQ3RkQKLToxMEZEOTAwMDlFNkYxNUIyRTc1MzU5MjJFM0RGQkNDMTgzREZERjYxRjkKLToxMEZEQTAwMEY3QzNGN0Y3NTlEOUJBMjhGREUwM0VEQkQ0N0RCOTVFMzkKLToxMEZEQjAwMDVERDdGNTU5NEMxRjlDRTY5RUYzNTQ1NjBBRTgyM0FBREEKLToxMEZEQzAwMDVFQkQzMTkwMzI4MUNFQUI4NzIzMDFCMDRGREUzMzEyNUUKLToxMEZERDAwMEM1OEFGQTQ4MDJFQTM1M0QzMDc3QThCRjNGQzNBRkQwQTUKLToxMEZERTAwMDcxQUVFNzg4MTdGODhCQzY0RjdBOUM5RThDRTQwOEZCQUYKLToxMEZERjAwMEE0QTc4NDk2NkRDM0Y2Njg0RjhEMjcyM0MxMDVDRjU0MDEKLToxMEZFMDAwMDAzRThFQTFBN0ZFQTcxQjM3NjlBN0M0QUVCNjBFM0E0Q0UKLToxMEZFMTAwMERENTdEODBCRUI0OTE0MDhGQTRCOTYyRkNBRUI2RDQzMEMKLToxMEZFMjAwMDM5QkYwMEU3NEQzQzlFMEM4RUY2Nzc3QzU1OTYwMUUwN0QKLToxMEZFMzAwMEE4RURENzY3NTMzREI3MDE3Q0FFRTM5OTdEQURFRDlCNEYKLToxMEZFNDAwMDA2REZBN0IyOTg5RkEwOEVBNzdBMDJDNUJCRTIxQzFGNEYKLToxMEZFNTAwMEMyOTNFQTBEQzUyOEEwNTVCREUxMjk0MERBMDgzODEzNDAKLToxMEZFNjAwMDIxMzQwRERFRkY3RjA4QUZFRDg4MDdERjExNUUwREFEOTkKLToxMEZFNzAwMDk0OEYxODJFODA4RkE4NzBEQ0NDMDU4RDY5OEM4RkEwOTQKLToxMEZFODAwMEZEMEJFRjQxMUVBRDczRkIwMjU5MTFGNEIwRTQ4RTA2NzkKLToxMEZFOTAwMEQ0MTdCNTc5MjVERUZFQzJEQzZCMDlEMEUxNDlBNEJCREQKLToxMEZFQTAwMDI1RkY5MDg4RjZBQTVFOUZEM0VDMjQ0REVGRkM0NTFDRkQKLToxMEZFQjAwMEJGRTNDQkVBRkE2NENEQkZBQUNFMjNCMTI4RjRFQ0JERjAKLToxMEZFQzAwMDE0NUVDOUM0MkUwMjFGM0Q2MjBBNEQ5MjY5RkIyMzA2Q0YKLToxMEZFRDAwMERGQTMyRkMwQkM0N0YzMjJFNTIxMjNGQUJCMkQ5QjQ3QUMKLToxMEZFRTAwMEJDQjE2QTc4NDJDMjhFMDlBRTYxM0NEOTQ0RjFDNDAyMDkKLToxMEZFRjAwMEVENkI0QzY4MDdGNzM4RkQ1QjZGMDQzQ0I5NjZBQ0FDNDIKLToxMEZGMDAwMDQ4Mjg4NzkxOUU5NUQ2NDRBQ0JGRDQ3MDk0ODBCRjM4NjIKLToxMEZGMTAwMDNDNUQxNDQxNUZBNDc4ODVGNTNEOEJGM0ZDMEFCM0ZCOEYKLToxMEZGMjAwMDE1MkJGQTQxMTNGQ0JEODA3NzI1MTQwMEQwREZFMjA5QzAKLToxMEZGMzAwMDU4MEY3NjM3RkEyQjE2NUJEODc4MjNGMThBRDlDN0Y5OTAKLToxMEZGNDAwMDg0RDVCQjU1QkM1RDk1ODU3ODlCREE0MTk4QkY0MUYwNUYKLToxMEZGNTAwMDE0RDc0NEU4MEI4NUQ5MEM2RTg5QTVBMUU3REUwMTNCRDcKLToxMEZGNjAwMEU1MUVBQjlDNEI5ODI5MDc3RTBDRDI5RDg2RkQ1MTdDRUIKLToxMEZGNzAwMDM5OTVDNUZDMEI4ODk3Q0I3RTZFREZDNUY4OUU1QzA2NzUKLToxMEZGODAwMDcwREU2MEVGMjY2QkQxMEY2NUM0Rjk2RkI3MDY1MTlGMjUKLToxMEZGOTAwMDM2NTgyNDI3Rjg3Qjk3RjA2NDczMUVGNEQ3NjExNDAxNTgKLToxMEZGQTAwMDRGRjRGMEI2NjdDN0YzNEI4NjZFOERGNDRCMkUzMTJCQjIKLToxMEZGQjAwMEU2NENBOEJGRDM4QUZBQkRFNjlGNUM5MkM0RTg0QUYzMzgKLToxMEZGQzAwMDRGMDI3REM2OTIwQjlBN0ZGMjA2MTVBRjQ2RDQ3NzdEMUQKLToxMEZGRDAwMDk5NUI0QkZCRkIwRjE1Q0ZFNDgxMkY3Mjk3REFEOEJBRjAKLToxMEZGRTAwMEMxQ0Y1MTBCRkZBMkUzRDZBRUIzN0UwMEZFQ0M1QUM1MDMKLToxMEZGRjAwMDE4MzQzQjgwOEZDQ0YxODQyMkVDMkRCMjg1QURDM0Y3NTEKLTowMjAwMDAwMjMwMDBDQwotOjEwMDAwMDAwQTZEMTBGNzA2QTE1QzhFNkM3NjE3RjE0QjZGRTk2RTVFMwotOjEwMDAxMDAwRkU1NTkxRUJEQTY2NjJFQjUyRkVDMTFFQjVBRTZEMEU3NwotOjEwMDAyMDAwMTZBRkY4RUVFQkZBRjNCNEU4NzU5RDk4QTZBRThCNThEMAotOjEwMDAzMDAwNTI2OTNCNTVDRURERDA2QUZGODAyQkE2NEY1ODE3N0QwNQotOjEwMDA0MDAwOTI3NTc0NUQwNUMzRUI5QTkzQ0RGOEU5MTI5NThGOEQ4NwotOjEwMDA1MDAwOTBCQjcxRjdGMTdGQzg3QUJCMUZGMkM0NUFBRjdFOUQ4NwotOjEwMDA2MDAwNEY2NzdCQUFCMzUzOTA2RTgyNjJFOTMwNUVGQkI2RDJEMwotOjEwMDA3MDAwNzU5NUMyQkVBNkY4REI3MDVGMTk3RTEyRTI5MDgxOEY4MwotOjEwMDA4MDAwQjUyQ0E3RUI4MjY3NUIxQUZBQTU5Njk4QTUzRUYwQ0YzMAotOjEwMDA5MDAwOTI4NzkzRDQ3NTEyRTQwMzJENUJDNzIxNUQ1MkJDNjUzMgotOjEwMDBBMDAwNzRGQjEwOEJFQkI0NTg5OUJGQTA2NThEMjgyQjIyQUM0NAotOjEwMDBCMDAwRkZENzY4Q0Y4NjI5N0Y0NUJEQTQzNTlBQUY3RjNCMUMwQgotOjEwMDBDMDAwQUM5OUI1NDU5MTcwQjA2NDJFMkQ4QUIxRUY4QTE5RjFDMwotOjEwMDBEMDAwMzlERUJFRkYwNzFGQkU5NUNCOEVFRjJGMjNFQkEyRkRBRgotOjEwMDBFMDAwMERFMDM3MUMyQUYzMjNDQjdBRkYwNUI1MUZDQ0QxREZGNwotOjEwMDBGMDAwMkJGMUY4QzE0RjIzRjFFODg4NTFDNUEzQjU1Njk0M0ZDMQotOjEwMDEwMDAwMUExRTFEQjFCM0Y1RUFGMTg4NTAyRDFBRTg1ODVCQjdGNQotOjEwMDExMDAwMUU4RTRCMDA4RTMxRTIwOTE0OUY3MjAxOEU0NzU0RkJGNAotOjEwMDEyMDAwOENFMjUzMkVDMDUxQTM4MzFCNUExOTNGRDBDM0VEODlEMwotOjEwMDEzMDAwRjg3Q0VEQkJBRDQzODdDN0RGNzUxRDVBN0RCQzc1Njg4NAotOjEwMDE0MDAwRkFFRDE2NkVDRDU2QzBDRjJEMTk0NEVDNDAzRDM4MzQzMwotOjEwMDE1MDAwMDlFQzI0OTdDOTVGMDhGM0RBNjZBMkY0NEJGQkFENTVBRQotOjEwMDE2MDAwQzcwN0NEMDFGMEZCQjM0M0NDQkY3OTU0MUQ1NzNGQUY1OAotOjEwMDE3MDAwRTc1NTM5QTRGNzdGMzUzOUMyM0I0MTBGNjk0QTYwRjIzMAotOjEwMDE4MDAwRjBDQzAxM0JEMjBEQzkwOTJEMDFGREZCRUM3RTMzMDEwMgotOjEwMDE5MDAwRkVEQUM4ODVGMkUwQkIzMzlDNjcyOTdFRDc5NjI4ODFCQQotOjEwMDFBMDAwNUNENEZDODZDNzlFNjc3RTQzODU1MEZCMTdGQzc1M0U3QQotOjEwMDFCMDAwRTZGNzZDNTJGRTc1M0RFQ0MzRjk2Q0ExMTlFQ0NGQTZDNQotOjEwMDFDMDAwQkU2ODNGMTk1RDlGMDNENjdCQzY0MDA2RTFGQjQ2REU1NQotOjEwMDFEMDAwQkYwQTRDRDZDRDI2QTYwRjZDMzY5MDAwRUNERkIwNUQ4MgotOjEwMDFFMDAwN0UzNDBGRUQ4NDBDOTE4MDVGQTdEMUYwNDFERUNEMTFGQwotOjEwMDFGMDAwNzY3Q0EzNUFERjk4QzlGQzRDMTA1NzQ2N0YzOTBDRTUzMgotOjEwMDIwMDAwMUUwOTk3QzY3QjRFN0QwRDcxQjFDNjdEN0E3QTg5QTY4RgotOjEwMDIxMDAwQTdGQUUxMzI3NzlFODNGRTIyRUFEREMzRjQ4NEY2Mzg0MgotOjEwMDIyMDAwRTA2MTE1RjFFNzcyRTAxRjYzRTVDNEI5ODM3RTg4NEY5MgotOjEwMDIzMDAwMzdBOUZFRDM5NDgxNTAzNUU4MEJGNkQyMDAwMTNFREE5RgotOjEwMDI0MDAwNzQ4MkQ5MjEzM0ZBNzdCRDBBN0UzM0U3RENDMTcxQTAwRAotOjEwMDI1MDAwOTIzNEE5NzEwNEJERkQzM0JERkY3RTFFRkM0MzlBRkQ5RgotOjEwMDI2MDAwMTJFMThGMkE1QzEwRTU1NzZDQzc3NkUwREY4MkYxNDIxRAotOjEwMDI3MDAwRjAwQUZDRDMwMkQzNzMzN0FCN0EyRUQ1ODc5MTZGMkU1OQotOjEwMDI4MDAwRUZDRTQ3N0QxOEY0NTVEMDNCMzRGRjE4RTgyMUEwOEZGRQotOjEwMDI5MDAwMkVDQ0E5MTA3MkU4M0FCRkNDQTkzODBGRkMxQkM2NDM3QwotOjEwMDJBMDAwQkIxRjlDMkVEM0JGODE3RkE5RjBEMUJFMDMzRkQ5Mzc5RQotOjEwMDJCMDAwRkJGMzk5M0UzNTQzRTdDN0JGRjk4RDE0QzRGM0ZENzFENQotOjEwMDJDMDAwRjRENDUxMzk0MzdFRkMzNEYwRTNERkNDNDk2OTgwRTc1NAotOjEwMDJEMDAwMUZGMjNFRjREN0FGMjAwQUZBODE1NzgxN0YxQ0Y5NjBFNAotOjEwMDJFMDAwMTBGRENCMzczNTEzQjkwQkUzRTFCRUY1NTA2RTU4NDkxRAotOjEwMDJGMDAwQzQyRUYwMkY1N0Y5QjAxRUZDQ0I1NzRFNjdGMTI2MjlCQwotOjEwMDMwMDAwMDI3RjIxOUUxMzU5MjY3QjY4Mzk4QTRGMEZBMkJGQkFGQwotOjEwMDMxMDAwOTFGNkIwNEQwNjNGNDJGNEY3NERDNDVGMjkwMDVFRjRGQwotOjEwMDMyMDAwOUQzNzQ3RjVEM0MzRTA3NDgzOEEyRjVCQURDQzRGM0QzNwotOjEwMDMzMDAwNjNERDJFOUU0NEY4MTk5MkE2NzhEQzc3MDEzREJDNjFGRQotOjEwMDM0MDAwNDQzRkU5RkY1NkY3NTc4M0M3RDNEOTE1RDYxQzBBOEYwOAotOjEwMDM1MDAwMDRGMEZCQzA3Nzc3OTk1MUNFMUUzNzkwOTU4MDJGRjcyOAotOjEwMDM2MDAwMzlDOTBEMEJDMDlGNzUyN0YxRTQxODAxMkZDNENDNDg4MwotOjEwMDM3MDAwN0Y5N0Y2RUNEQTZGNUQwOTc4MzYyQjg3RjExMUVERkQ4QQotOjEwMDM4MDAwOTk2QzIzOTZEMUVGOENGQTY5MjJDNkQxMjk1QjJBMDY5MwotOjEwMDM5MDAwM0MyQ0NCRDJGNDYyNTIwQ0ZFRUUwRjU0RkVENEI4RDBGQgotOjEwMDNBMDAwRTY4M0ZFNDIwNkM2Q0ZFNkU1MzBCQjdCNUU4RTA5RkJFOAotOjEwMDNCMDAwRDNDQTQzRkUyMjE1Q0ZFODM4RDg1RkMyNTQxMjE1QzdGRQotOjEwMDNDMDAwQkIyQTg3QzkwMUNENUY0QkQ0RjhDQUU2NTUwOTRDOEZDQgotOjEwMDNEMDAwMUVDMjc3MDNGMkIzQzQyMkFGQzk4N0ZDQTQwMkY5NTk0NQotOjEwMDNFMDAwRjhDRjM2MDlFMDMyRjc1NEZEMkE1OEM3QTc4QjEyMDgxOAotOjEwMDNGMDAwRTQxRDJDNTNFMzQ0OEQzOTRFRUM1NzhCMEJDNUQwQkYxNQotOjEwMDQwMDAwQUUwRkJBODZFNThEODY5RjlBOUNEOTZGNjdFQkJFRDhGMgotOjEwMDQxMDAwRjhCRUZFMzlCN0FCMTBGOUI3MzY4RjE5M0FCRDI0MUVCNgotOjEwMDQyMDAwNUREQzM2NEMxNzUxRjEyRDBBRDc0NEUwQjNGQjBEQ0NGRgotOjEwMDQzMDAwRUVEQTRGMTEwQkZENTYwMTM1RkU0OEVENjQ5MDAzRkJEQgotOjEwMDQ0MDAwRjdFNUEzOUVCRDU0RjVBNzUyMzk4OUY2NTU5OENBMEIxNgotOjEwMDQ1MDAwQjZERkJFQURDQkUxQkI0MDJFQzY2NTNGMzBGQTlGN0MxOAotOjEwMDQ2MDAwMUNFNEVEMDE2NjQ3NjhGQkIxN0ZGRjE4M0ZEMEVGOENCRAotOjEwMDQ3MDAwNTM1RjY1MDJGQ0Y3OUY3ODZBMENDNEJCRjdBQkYxQzUwQwotOjEwMDQ4MDAwN0E1MzMwMEZFRDdEMTNEMzUzRUIxREMxM0M4MERGNEIwRQotOjEwMDQ5MDAwMkFERUQ0MjdEMDMyN0Q5Rjk1RTJFQjA2M0VBNEU1MDcwNQotOjEwMDRBMDAwNDAzQjI3QUU0NzcyODBCRkUxOTg2QTQ3MUVBNTc2MjU3QwotOjEwMDRCMDAwQ0M4QjUyQ0IyMEM0M0RFOTdFNjc0MDM5QkMyOThERTkwNQotOjEwMDRDMDAwN0I3NDVFODAxN0M3MEU0Q0MyRjU2RDM2MzIzQzU2NUVBQgotOjEwMDREMDAwRTREMDNGNzFENDE4RkVCMDk1N0U3RjM0NjMyQTY5MTM0RgotOjEwMDRFMDAwNDFERTdERjFGODQxRTg3RjI3NEZDQzIyRTQ1RjdDN0UzRQotOjEwMDRGMDAwQUU4RjdFN0Y5NkRBQjlFMDM3QUIzMzc4QUIzMzgwNUY2RgotOjEwMDUwMDAwM0NDRkVDNzVGRDNFODBGQzhCOENDNzlEMjFFMTRDRjQwQgotOjEwMDUxMDAwRUJBRENDMEEwMEZFOUNFOTJGQzRCQzIyRTIxMjg5NDI1QQotOjEwMDUyMDAwQ0I0RDJGMzJGQjQ2MUYyNzNFNkU4Q0M2N0Y3REJGQjA2MgotOjEwMDUzMDAwMkVGMEFGMzVDMUJGNDFCRTQ3QjY4RkQxREZCNzk1Q0ZFMwotOjEwMDU0MDAwMTg0Mzc5NkIyOTNDQUEyNDVGMzAyNzg1QjE2M0Q4Q0Y0MwotOjEwMDU1MDAwQTY5NzMzOTAxRjFGQkJGNzczREM0RkQyQ0RFMjlGQzcyNgotOjEwMDU2MDAwOEQ5RTI1MzAzRjY3NTVEMDU0MUI4MThGRUZBOEZDQTM4QgotOjEwMDU3MDAwQ0VDQ0U0MzVFNUJGQTY0ODdFQTNENTk3NTU5MDk4NzFCQgotOjEwMDU4MDAwRkEzRkE4N0NDMTNFQzhFNERFQzg3QTg2RTdCNzkyNDc0NgotOjEwMDU5MDAwNzlFMDE3RUZFNDQ4RDhERjc4MzVERkUwNTZGMkQ5MkI2MQotOjEwMDVBMDAwNjZEMDRGMDIyNTk4Q0YzMDdFNUQxMEY5MDA5RDJGRTI3NgotOjEwMDVCMDAwRTdGMUFENDlDODFGQzkzRDBDNUY2RjdDRDg4Q0ZDRTNFNwotOjEwMDVDMDAwNDYyQTNGOThCRENERjJBQkM4M0QyQzhGRTJDM0JCRENDMQotOjEwMDVEMDAwODhDRjY1RURDMTMyQTQwNzI3OTE0MTJGNzlBMUYzMDM5QwotOjEwMDVFMDAwODVBN0Y1NEJGNzcwMjU5MDNGQjZCNEQzOEQ3NkNBNERFRAotOjEwMDVGMDAwRkJEQ0I4QkYzMzU0QkU1RTY3RjY2MEJFMTg3OTg0QzVCNQotOjEwMDYwMDAwRDM5NkZENjIxNThFRDM5MDQ4OUMzQ0VBN0Y3RTEzQzgzQQotOjEwMDYxMDAwRTU5NTdCMzgwMjc0MzUyM0MwRjg3RkJEMTA3QzA1RjQ2NgotOjEwMDYyMDAwNDg3REZFMDNGMTQ3Qzc4OTQxMUU5MTA4M0QxM0U0MEY0MQotOjEwMDYzMDAwRDFEOTA1RDFGQkFFNUM5NEZDRDVDQjFCM0UzN0I2RkNDMwotOjEwMDY0MDAwQTVGNjlFOTBDQkY2OTVDOTg5QkQxQ0UzMUJBQUZDNkQ0RgotOjEwMDY1MDAwMDBGOTBCQkE5QTJBRjczNEI5Qjk0Mjk1OUIxRkYyNENBQwotOjEwMDY2MDAwNkVERjY4QkUxRjlGMTlCOTZFMUNFNzI2ODhFQjYyMUNGRgotOjEwMDY3MDAwMzM2QzAyRkQyNDFFNUU2NEU0MzJCQ0QyRjA2Mjc0NkUwMAotOjEwMDY4MDAwMzQ1RUQ0OUYwODFFMzRBMzlEMjkzRjBGRjFFQUZBNzUwQQotOjEwMDY5MDAwMjQ2OEE3NzZEQThENDIzM0NBODdEMTIyMTEzMUFGQUVGMgotOjEwMDZBMDAwRDI4N0YzNEE2QkExRkEzOURERTcxQjIxMDYzQkU1RTI2RAotOjEwMDZCMDAwRjU4MjExN0E4MDRFRkU2QkYzRDZGMDQ0QUZGRkNENTgzMQotOjEwMDZDMDAwRTdFNzIxOUU3NDMyOEZFMDdCRUQyOTkyNDAwOUNDQjc5OQotOjEwMDZEMDAwQzZDMkY0RUYxQThCMkRDODgzQkQ1OTY1M0MxRDY5NkZFNgotOjEwMDZFMDAwRkM1OEYwOTRFNUEyNUMxREVCRkM3MDIyQjIwODAyRkQwMAotOjEwMDZGMDAwNEU3MzdCNjY0RDk4MzZBQzU3MjY5Njg2RDdERjRCRkJGQwotOjEwMDcwMDAwMzM5MjYyMDNGMDQ5NkQ3QzhCN0JGNjkyMjIwQUJGMjZGRQotOjEwMDcxMDAwNjExMEVEMTU5MjRFQzRERDc0QkMyQjhCMjQ5QzQ3MjJENgotOjEwMDcyMDAwREQ4NzVEMTRBRTQ2NDE0MUY4MTkyREEyQjNDRDA5RkIxQQotOjEwMDczMDAwM0Y4ODcxOTk3MDBBNDEzRjlEQjY1RjNCRUM0NDgxN0NENAotOjEwMDc0MDAwQzUyQjhCMTg3RDVGNTkyNEUyOTNCNkM3MzhBRUIxODBCNAotOjEwMDc1MDAwQjZBN0ZENTdFQ0I3MjI1RDlFN0JEMUVFMDdGOTRDRTVCRAotOjEwMDc2MDAwQ0U3ODI3QUQ0RkZEMTNCNTUzNjhGOUNDN0UzQkVBMjkwRgotOjEwMDc3MDAwNjc1NDc5RTFEMkZDQjU2NDNERUVGNzIyMTU2RjE0NTI0RgotOjEwMDc4MDAwMzEwNkVDMTFDMjVEMzE4NkNFOUQ2ODdBNzI4MzMzNUU4QwotOjEwMDc5MDAwMUM1M0FENzcwRjJFNjRGODZCNDY3REUxOUMzMzc0MUJDMAotOjEwMDdBMDAwOTRFOTdDMzBCN0M2OUJDQkQ2REZCNEFGQjJFNDBFRTBBMQotOjEwMDdCMDAwREY1RTlCQ0NBMEVFMkIwMUZEQzdDQ0RGQjJEMDQyODEyNwotOjEwMDdDMDAwNURDREFGMEJBRjA1QkMxRjY3MTNDREI0NDlENUY4RjdBRQotOjEwMDdEMDAwRkZCMDk4OTZGRkJDQ0Y0OENDODAzRkJCQUY0QTBBNDJERgotOjEwMDdFMDAwMzNDMTkzRUU5RDM0NzIzRUFCRkNDNkEzQTEwODNBNUVDMgotOjEwMDdGMDAwQkQyN0JBREMxMDg4MkUzNzExRTE2ODI4ODJGRkI3QkUwQQotOjEwMDgwMDAwQkZFQUFERDcyMkYwNkQ2REFFREQwNTc4NDAyNDIyOUZBMgotOjEwMDgxMDAwQTdGNDc0RkNDRTNFNzIwQzY0MjFGRjkzMjRFMDhGQ0JDRQotOjEwMDgyMDAwMjhGOUM3RDIyQjNFQkY3M0U1NUJBRkQxRUZBQ0E2OEFFOAotOjEwMDgzMDAwQjY1Qzk0MEI5MjA5RThBQjk2RUEwREIxRUNEMEM5Qjk1RAotOjEwMDg0MDAwNEM0RjMzOUI5QjRGRUNBMkYwMzFCRjY0OTZEQjY4QUJGRgotOjEwMDg1MDAwNzlCOUJFMkVDMEM3NDY0M0Y4MjBFQ0FCNzlGQ0U5NjJGQgotOjEwMDg2MDAwRjA2NzU3OENGRjBBRjMwMkNFRkQyMzkxMDE0RUU3QUNFRgotOjEwMDg3MDAwQjMxMTlGQ0U2REI1NEE2MEE3RjY2NERBOTgxRkY2NjU4RQotOjEwMDg4MDAwQ0VDRjMxQkI2NUZFQjQ1NEM4RkJDMEI1NTAzRTE2NUUzQQotOjEwMDg5MDAwQkYxNUY4RjQ3NEIzRDgyRUUyNzIyRDA2REM2RjZBQkQ3MgotOjEwMDhBMDAwRDE2NzhGNDk1OTBGN0VENTFFNkE0MEI2Qzk2MEU3MERFMgotOjEwMDhCMDAwM0E4MDE4MDY1NUZFRDBDNDNGNjNCMkQwN0ZCQTNCM0RBNAotOjEwMDhDMDAwODU2REY0QkJENURFMDQwMkY5NzhDMkQ3ODIxN0YwNkNDRgotOjEwMDhEMDAwMDM3NDE1NjFGNzNDQUVGMkJGNDZGMUVERjUzMDdFRDNGRgotOjEwMDhFMDAwNTdCN0NDNEQzMTBDRkJGOUNENDZFNkU3MzdGNkNEMEVDOAotOjEwMDhGMDAwOEVBMTRENTdCNDU2QTI3RDQ3RjkyREUzOEIwNzE4NUZBMwotOjEwMDkwMDAwNUNCMTc2MzZCRUU3MTZDQ0M1RjU3RTQ4RDcwQjcwNzk1QwotOjEwMDkxMDAwNzVBQjE5RDdGQkUxMzgxQkRBREIxRkVFRTBCMEJDNDI0OAotOjEwMDkyMDAwMzQ2MTNFMUZENTRGNDZDRDc2QzE3QkEzNjgyNjIzRTFCNwotOjEwMDkzMDAwRDFCNDY1QzNGQUFEQjRGRTc3MTkzQ0UxMjhGRTdGQjRBQgotOjEwMDk0MDAwRkRCNzE4OEZGODg4QjBGMTk1N0QzQ0VBM0QxRjg5RTEyRAotOjEwMDk1MDAwQjIyMEMwNTM2QTc2NDREQTkzMkI3NkYwNUVFMDk3MkI5MAotOjEwMDk2MDAwNzZEQ0ZBQkJFOTAwQjcwNUQ3OTUwMjNDNjYzOTZGNDlEQQotOjEwMDk3MDAwOTU2Q0MzRjU5QUJFMjcyNDk3M0YwRTc0MzlFQkVCQ0FFQQotOjEwMDk4MDAwQzE1OUEwNzdFREEwNzQ0M0U3MkQxODg4MEZFQzhGRDdERAotOjEwMDk5MDAwNzZGQzEwRjVFRDE1MzUwOTRFNTg5RkI0N0Q3NzM1QzhCNgotOjEwMDlBMDAwQjc4RjZBNDYxQjcwNURDRjcyNDQwNDc4Mzg1QjUzRTFBMQotOjEwMDlCMDAwRkQwQTRFRjBDNkMyQUI2NUI5MkM5RTMwN0JCQzREMDYxRAotOjEwMDlDMDAwN0ZDMzhBREZGMzg4MkY5NENFMTY0MjFDQTE2MTg3MTE2MgotOjEwMDlEMDAwRjVGOUQ3MTZCQ0Y3ODdDNUFFNjEzQUUzMTY2Qzk5M0ZCNwotOjEwMDlFMDAwMDNCRTdGQzI4OERGMEZFOTUzREIzRjdFMUZGQzAyRjBBRQotOjEwMDlGMDAwNDcyNTNCQzgyMTg0OUY5RUVFQ0NFM0Q3RTVDMUJDRjREQwotOjEwMEEwMDAwRjRCN0EyQkQzOThGQzVGNzJGOEUwRUM5NzY0Njg3Mjc1QQotOjEwMEExMDAwMjk5RDlDMzdGQzRENzRGODI5RTNFQjE3NDY4NzY0NkNERAotOjEwMEEyMDAwNzI5NEZDMUVDOUY3MTRGQzRFOEI4RjVBNjRFMkQ5NkQ4OAotOjEwMEEzMDAwQzM3QzE4MEY0N0Y5RjU5ODNDMDFFMTNFMjY4RkQ5NkQyQwotOjEwMEE0MDAwQzI5NzM3RUY3OTkzQzI2OTQ3QUU0RkM4QTNFRkM3MTM3OAotOjEwMEE1MDAwNEYwOUM4NjcyOTJDNTY4MDJCRDZBNkVBOEQ2NDNCQ0I1QwotOjEwMEE2MDAwRjMwNkZCMDJGNjdGNzMwQTc5QkMyQkMyM0Y5M0E2RjYwRQotOjEwMEE3MDAwNDdGOTgyMURGQTM5RjNDN0FGMEVDMjdFMzU2NjlFMkU0NgotOjEwMEE4MDAwMDZCREJBRTk4QkZGQzRCQzBBNUIzRkNCQzdCMUM5NjFFNQotOjEwMEE5MDAwQ0MzNzMyQkFCQzg4OEYxQURGNkY5Mjk5MUNEMkFGQUJCOQotOjEwMEFBMDAwM0Q4RkQ5QUQ0REFFMzBGNkYzNDIzRUEzNEYyRDFFQjk2QQotOjEwMEFCMDAwQUQzNTAxRTM0MkRCNUM3RTJCRjNCMzUwN0Q4RkY2M0YxNwotOjEwMEFDMDAwQUY5NDQ3M0U2MzI5RUQyMDIwQzc0ODM5OEZGMTlDNTlFOAotOjEwMEFEMDAwNUZCRDQ1MjBGRUY1QkI5OTk1MzJFODk1QjZEMjU3ODVBNgotOjEwMEFFMDAwNTFCMENFNzJBMzVBRkZBQjhENTlCNEZFQUQ5OTczRDBGRAotOjEwMEFGMDAwM0VCQTM5OUQ5NzQwQUY5QTU3OUFBREEwRkNGNEIwRkMyRQotOjEwMEIwMDAwREI1OTVGMjUyMTFEQ0U1RjM1MUZGNTRBNkRCRTVFNjI0NAotOjEwMEIxMDAwOTE2QzE0NEYxNjUwNjI4RENDNTM5RTNGRDMyQUQ5MjIyQwotOjEwMEIyMDAwRjBFQkQzNkU2RTJFRDNBQkE1QTRBQjI3MzFCRjUwQTA5NAotOjEwMEIzMDAwODhDOUYzNDgzOERDOUM2RUMyRjFCRkNDOTk3RDA5QzBFRQotOjEwMEI0MDAwNzdENjY1NkMxRjRFM0U2QkY2QjdEMzcxNEY1QTYzREI5OQotOjEwMEI1MDAwOTFENTc5MEM2RkIyODRDQjkxMkZEREYyQUMxOUUzRjMxMAotOjEwMEI2MDAwQTdCOEQ4REZERkI0OTFDN0JDQTI1NTFCMzlFMkE3RTMxMQotOjEwMEI3MDAwOUQ3Q0YyODU0Q0UwRUI3RkRFRkQ0MjY2NkRDNDdDRTIzRAotOjEwMEI4MDAwQjVBRkNCNjNGQUMwNDg3QjNCQjgyQ0QyREU5RTY3NjIyMAotOjEwMEI5MDAwNzEwMTMyQzUxQ0U1REY5REU3NTBGM0VDMkYzMERFRjEyQgotOjEwMEJBMDAwQTNCODdFRkUzN0M2QzI3Q0RGMUNGMkYzQkYzRTM2MzJFRQotOjEwMEJCMDAwREUzMTE0Qjc5Mjk5OUY1RjFGQUZDQTI5RkYxNzc1QkUyOAotOjEwMEJDMDAwMkNBRkI5NTU1MEU3MkI5QjU5REM2MjM5OEI4QkI3MUM4NgotOjEwMEJEMDAwMTg4NTc4MzdDRjE0RkUzOUM2QjM1RUU2NDUzNUFFRTFFOQotOjEwMEJFMDAwQjE2MEZCNzQ1NjFGNjc1REM0RTNDOTcxOTVBMUJGMDk2RAotOjEwMEJGMDAwRTdDM0Y1NzE0MUJCRTMzQkFDOEZCMDM4ODY3RTdEQjU3MgotOjEwMEMwMDAwRkQ3Q0NDQjhEQzk3RjkyQzBGMjBCMTI4OEM3NkQ1RDE5RgotOjEwMEMxMDAwRDcxRjg1QzhGQjEwQkU1QkZCREQ4NkM4N0NGODIxN0QzNQotOjEwMEMyMDAwNTZDNUVGQUIwMEJGRTlGQUFDMUI1OTM5MUU1RUM3RTNFRQotOjEwMEMzMDAwNTdBOTc5OEM4RTM1RkMzRUJBMzEzQjA5RjBFRDJFNEIyRAotOjEwMEM0MDAwNjNFODIwODU5Rjg3NEYyMkQ2RDFCNEFDQzZGRjk1RjdDNQotOjEwMEM1MDAwNTkzRTJBMUY2MUU3MDAxREVDNzhERjhFNzY0RTg3QjE4MgotOjEwMEM2MDAwRjkxMTM4QkZBM0I0MDk2NDM3N0RFRjRBNjhGNEI3RDFFRQotOjEwMEM3MDAwQjI2NEI0NjNERUQ0RUQwOUYzNzc4MTVEMTdBMjBBMkU2NgotOjEwMEM4MDAwNDdDQjlGMjcxQ0Q5MDU3QTAyQjEyNDExMjMxRDQ3QTkwMAotOjEwMEM5MDAwNTBEQjlCMkM2MjA3RDUyRjFFNEE3NDIwN0Y2OTVENDY2RQotOjEwMENBMDAwNTA3RUE3OTEyMEM3NTE4MEVDQ0Y2M0Y5QUEyOUFCOUY1MgotOjEwMENCMDAwRTczMDhGOTg1MjNDRTg3RDcyNzY2QzdERjQ1NzJBNUQ2MAotOjEwMENDMDAwQkMwQjA5MzRGNDI5NTdDNkZFNkU3RjlFRTYxNzEzN0NEMQotOjEwMENEMDAwQTEwODNCNkYwMzI3NEJDODc3RTg1RkRCNzREMEVGMDdCMQotOjEwMENFMDAwMTcyMzVGQTY3QUZDNUI1NDFFOENFMTdGOERGRUQ5NjNDRgotOjEwMENGMDAwNzdGQTFFODk3NURFNjE0OEVFNTZDNkI2RDM1RjU1RTdCMgotOjEwMEQwMDAwNTdEMENERjk4RDBFQTQ1RkMzQUUyOEZBNTVFMzc4RjYxRgotOjEwMEQxMDAwNTQ5OTRBMTg4OERGQjIzODVEMEVEMUYyREVCNzgwREYxMQotOjEwMEQyMDAwN0U3NDM5OUJBM0MzMTMyMkEwNUZBNDc3NUY0RTdDQTM3QwotOjEwMEQzMDAwODA5RTY2QTQ4MTdDNkI1OTFFRUQ0RjRCQUZERDk4ODE4MAotOjEwMEQ0MDAwN0VCRERBREJFNjgzRkNERTYyQjQ2REU0OTJFMDE5RUQ5MQotOjEwMEQ1MDAwOEZEQkEyRjNDNzdEMUI1RjQ4OEY0QjM3RDNEM0MxQkY1NwotOjEwMEQ2MDAwQjE2NTM4RkU4N0Y4RDNCMTU0RjRGMzFDQUU4MjQ0QzZBMwotOjEwMEQ3MDAwQjU1MzNCQTQ4MzNFRDA4MzY2NUJFNDVFNzkyNEZEOTA0QgotOjEwMEQ4MDAwNzIzOTFERkQ5Q0Y5RUFCRUE5RjREQ0E0QTIyNkQ3Q0ZENgotOjEwMEQ5MDAwQTE1RDNBOTIxRkFBRjA2QzE4OEJGMEI0NzZERjhFNzZDNAotOjEwMERBMDAwNTM2MjA5RjM2MzI3QUVBQUY1MDFGRjQ5QTRGQzA3RUNERgotOjEwMERCMDAwMzg5M0E5OTlDM0ZEOUZDMUVDQjYxNjhFOTU1QjY2OEJERgotOjEwMERDMDAwQTI0MkJGMzczOTlBNjc2M0ZEMTUyQ0NGQkFDNUVBRjM0MwotOjEwMEREMDAwNDVDNkQzMkUzNURDM0MzQjMyQkY1NjI0QjQzREYwRTE1MgotOjEwMERFMDAwNDU2Q0JDNzk5Njc1MkNCRkQ3NDc3NUE0OEM2MTM4NTY3NQotOjEwMERGMDAwQTg3MENDMjk0RjYwRjlFNkI3NUFEMEJGQjVERERBOERCRgotOjEwMEUwMDAwRjMzNTQ4Q0NDRUFFRURCMjIyQkYxQkMzMTc2MERDNjQxNQotOjEwMEUxMDAwQzBDOEYwNDNCMTVCOTA1RUU1ODE3NzMxM0Y2Q0NDMjU3MwotOjEwMEUyMDAwRTkxMkVGOEVDMDlGNUI1OEJEODYxNzQ0OTc1NzYwMzIxQQotOjEwMEUzMDAwNDkwN0MxN0Y0NzI3MjI0MzVFNEEwQjI3MURBQ0MwNzU3NwotOjEwMEU0MDAwODk2MTQ1ODY3NUFCN0NCOTM4ODFDOTExNkE2RUE2MzM1NAotOjEwMEU1MDAwQjhCMkI4OTg2RUJGMjhERTMwQkZGQTI0MUJGMzFCMTE1RQotOjEwMEU2MDAwOUY4NDdBOTc2RUJEMjNGMUU2QzUwMkUwQjcwMzQzNzgwRAotOjEwMEU3MDAwRDM1NzEwOEJERkRFRTc5NDBFRjY0NkUyMEI5MUQ2ODM1NAotOjEwMEU4MDAwNUZGNTZFMDMwOTc3QzVDMjFGMzlEQUNFRDdFN0M5RTkyNgotOjEwMEU5MDAwRURGREM2RDY0QUFGNkE3RjI4MTZEQzRGMTNEQTFGOERFOAotOjEwMEVBMDAwNkI2NzdCOTlGRDUxRDAwNkZFQTdBNjc1NTQ1MkQxMzZDQgotOjEwMEVCMDAwOTVGRDlDMDVGQTZCNUFFNDQwRkJCQkE5NkYyRkM2Q0Y4QQotOjEwMEVDMDAwMUJFNzEyMTlBNjUxQUJGQTg3QjU3NTFFMzVCMjM4MUU0RAotOjEwMEVEMDAwOTU1OTAxODhERkY3Mzg0MzNCRTE3QzVEQ0YyQTJEOEZBMAotOjEwMEVFMDAwODdFNUI1Mjg3RDlDOUFDN0EzRTU3RDg1OEY4MEZGQjNGNAotOjEwMEVGMDAwODc5M0QwMEYzQTc0NEU4RkVFM0ZDQkRGQjlCODNDMzBCQQotOjEwMEYwMDAwN0I5MUQ3MEQ5NkY4RjREQ0RFN0Y0Qjk4NzYzMTc5QjQ3RgotOjEwMEYxMDAwMUZGNTQwOUU2Q0RDM0M1QTI1NzgwREQ0NUI2MDJGRDRDNQotOjEwMEYyMDAwN0E0MDAzQUEyRjZCNjU4RjU1ODJGQzlERTE3QTgxREFBNgotOjEwMEYzMDAwOUQ5NjNFNEUxREFGRkE5QTM5Mzk3OEJFNDZFREFGRkYwOQotOjEwMEY0MDAwMDEzODQ3Nzc5Rjk1NDQ4RDE3MzkzRjQxRDczRjk4OTY5MQotOjEwMEY1MDAwMzY0OUZCN0VGQjAyRThFRkMxMjk2QTU5RjlGQTE3OTA3RQotOjEwMEY2MDAwMzc3QzlGMzFCQTNGNDQxOUI1M0QxNEI0RjFEMjlFN0UwRgotOjEwMEY3MDAwQUNFNzlFOTlDMzdBM0JENUUzRkYzMTdGREFCMEZFQkU4MgotOjEwMEY4MDAwRTFCRDc5REQ5M0U5NTg4OUUyNjc3ODlFNDlEM0MzOUIzNwotOjEwMEY5MDAwNUMyQ0FGNTY4RkU3MUI1NTNFRDY2MDA5NTU4MzZBQkQ2MgotOjEwMEZBMDAwNjFEMTFBMkZGNDNCOTRGN0Q2QkZENDAzNzZCMDk2RjdFRAotOjEwMEZCMDAwRDZCNENFOEJFNzlBQThERTdGNEYzRUU0RDFGRUYxRjRBMwotOjEwMEZDMDAwODdBRjEwQjAzMzRGQTIzRkEwRTkwQjgxRjk5REE5RkQ3NwotOjEwMEZEMDAwQzA1MTdDQjFGNERGOEZGODQzRjYxOEZERTBEQUU5NzExNwotOjEwMEZFMDAwMkEwNEYwQjFFNzAwMzcwREYwOEI5MEU2Q0M2QjI4RUNDQgotOjEwMEZGMDAwOEZFNzdCN0E2MDFENjdFMkM0Qzc5RkNENjc3NjdCNTMxRQotOjEwMTAwMDAwNDFDNUQ2M0M4MEY1NjMxQzAxN0RCQ0FCRTA1M0I0MkJERAotOjEwMTAxMDAwMUE1RjlDMzMyREYyMUNERUFBQkUwN0Q5NzlBRTNEQzZGRAotOjEwMTAyMDAwOThFQjdFMzY5RkM3RjUzNUJFRjgxQ0M2NEY0RUZBMzk5MQotOjEwMTAzMDAwQTRCOTk1ODI3RjEzRDg5QjJCNTcxQUMwQjIyMkE1RkU2NAotOjEwMTA0MDAwQTU5ODI3NEIxNjk5MDhDQ0ZGMDFENTBFNjlEQTczOTU0MAotOjEwMTA1MDAwMDJFNzAyOUJFODdGOTQwNEM4MzZFRjhEQTg2RjZGNUJCMAotOjEwMTA2MDAwNjRCMTQxMUNCQkE5QTA3NjBERjIzQjMxQzEwM0E2OUMyMwotOjEwMTA3MDAwN0U5RTQzRjk2RjZCMTMzMDhGQTZBQkNGMzgxN0VDQTQ2RAotOjEwMTA4MDAwMzI0QTE3RkY2NDAzQkU3QUQ4QkQwQkY4RTdBODI5N0M2MwotOjEwMTA5MDAwODcwODc5ODZCMUY1RUY2NzBBOTkxQ0VGRTRCQ0NBOEYxRgotOjEwMTBBMDAwNEIzMTJFNDIyMkYzOTlDN0Y3MzFGQkVCQjU3QzUzNTRGOQotOjEwMTBCMDAwNUNGMEI1N0M2NjE3Q0U1NDA2MkIwMUQ3NUUxNjQyODlDQwotOjEwMTBDMDAwNjAwRjM3MTFDRjI3RTBGNzIyNUU5Qjg0NzEyMTEyNDAxOQotOjEwMTBEMDAwN0ZBMEVCNEUwOUVEMjY4QjJCNzRGNzY0QTg5RjI5QTAwNwotOjEwMTBFMDAwRERBNEY5MTFDRUJDOTg4NkZBNTg0OTgxRUYzMEUwNDU2RAotOjEwMTBGMDAwMTkxRjdBRTBDNzAwQjdCQjA1MzVCRUM0Rjg0QUU2NTVFQwotOjEwMTEwMDAwQjYyOTYwNUYxOTVENEM5RkIxNTI3RDA2Q0U3QjVDQjZGRgotOjEwMTExMDAwRTlGOEJGNTYwMjZGNzU3OTUxOEYyMDU0QzhDMUI5RjFGMwotOjEwMTEyMDAwNEEwQkM3RTIyQjNBQkQ5OTg4NzIxNUI0QUY1NkZERDI2RgotOjEwMTEzMDAwQjk3NEI3M0VCNDIwNkE3NjlFMUYwNUZFMEM5NzAyRjA4NAotOjEwMTE0MDAwN0U5RDJFNjAxNEFEOUY0MzNDOURCMDJGNUZBQUZCQjdFMAotOjEwMTE1MDAwRDlDNEY0RjVDRDA2MEJFQUVCOUEzRTlDRTgxQTQ0M0I2MQotOjEwMTE2MDAwQjEyMUMwRTEzODBEMDVCRkM2RjMwMkFCRDVCQ0Y0QTE3NwotOjEwMTE3MDAwRkM3MDIxODRGOUYyQTdGMzEzRDVGODY3MjdDMzRGMzIyNwotOjEwMTE4MDAwODhGRTMwRjIwQ0RCMDdBQTc5NjIxRUJEMDY3NzJEQUYxMAotOjEwMTE5MDAwNUNFQkNGQTRDNjRCMUI1NDdGMkUwNTE4RDY3RjlFQUZBOQotOjEwMTFBMDAwQzU1N0RCQTNFM0FDRUFCODQ0OTBDQTIyRkQ4RTlCNkIyMwotOjEwMTFCMDAwMDgxOUM0Nzk0OTBFOTg2RjU3QUE5NzE0RDBFRjhGNTIyNwotOjEwMTFDMDAwM0MwNjNDM0JCQTMxRDEwRkU3QjYzNjczODMxRTg4N0JCMQotOjEwMTFEMDAwMjgyNTJDOUVBMUM3QTc5NDAyNEUzRDFGMTRBRUM2QkM2NQotOjEwMTFFMDAwQUIxN0UzOUMwRkVBOEIzRTFGNDRGOUMzOUFERkQwNzEyMwotOjEwMTFGMDAwNEE0QkRGOTMwMUJGRUY3M0FBRUQyRjI3OTg0RkFFM0YwNQotOjEwMTIwMDAwMUYzNEJBNDBDMjcxRkVEQkNFMDdDOTlDQTc5NzNFNzM1QwotOjEwMTIxMDAwMEE5Q0VDRkM4Rjc2M0U0ODY2NzBEN0YyMzFGNEU3ODI4OAotOjEwMTIyMDAwQ0U2NDA0MDU5NkM3MUZEQUI5MUJFNTlFMTlFREJCOTc3RQotOjEwMTIzMDAwM0UzRUQ4MDlGRUUyQjMyNTI2MTlDRTQzQTQ1RUY3N0FENgotOjEwMTI0MDAwMjdFNkM1NzA0MjMzQzQxNUY1NzI3RDk3QkJCMjE4RTAyRQotOjEwMTI1MDAwRkZFMDM1Q0ZDQjk4RjdBQjkzRUJGMUVDNzk4Qzc5NDY4NwotOjEwMTI2MDAwRjg3QjNDRUE3RTdDNUZGNkJDQjVGQjczMDdFMENEMjlEQQotOjEwMTI3MDAwMkVGQzczQzg0NzU1MEVGMDMxRjM1MTZGMjhFMEUyRTRCRAotOjEwMTI4MDAwNkQ3OTE2NDVFQTk5OUQ1QURFOTYzMzIxMkE4RkIxMzMzRQotOjEwMTI5MDAwNEVERTU2M0NGRDVEODg5QkFGNzUzOUVBNjE5RDQzRjk5MgotOjEwMTJBMDAwNUE3MzM1M0QyQzNBMUY1NTRDRjg0NkJCNTcxQjdGNkU4MQotOjEwMTJCMDAwQzgxRDE1NUZCRkU1ODJEN0E5REEyMzcxRDYxN0NGRkUwNwotOjEwMTJDMDAwQkFEODdDMDEzRDFDM0FFM0M4QzM3NTA1RjFGMjA1M0M3MAotOjEwMTJEMDAwMjJDNEQ3M0IyMUJFNEU5RjAyNDcxNEY0ODNFRDFEQ0FBMgotOjEwMTJFMDAwMTcwOEEyREZGN0I5N0NGNDVGOTlFM0U2MEJCMDNDMzI1NAotOjEwMTJGMDAwRTE0MEJFMDRERjZEMzA3QTNENjA5NzI4N0I4RDJBM0Y0OAotOjEwMTMwMDAwRjczRjA5RkU4RkNFMDMxOUU4MkYyMzA1QTE2MkUwNzM5MgotOjEwMTMxMDAwODJCMzNBMURGNEEzNEUxNTNGRUIyRjNDNUY2MDczNDEzRgotOjEwMTMyMDAwOEM3QzgxNURGRTI5M0ZDRjYyNzZGMDYwMjJENUFGNzY1RQotOjEwMTMzMDAwMTEyNjZGOTQ3RUU2OUZBNEYzNDZGRjVDRjhERTcxQTg0OQotOjEwMTM0MDAwNzc3MjBCMkNCODhFNjMyRjlCN0JDREE4NEZDQjE4RkZFOQotOjEwMTM1MDAwQUY0REU3NDU5MDEzM0QzNTY1MUY4MjFDM0E0NjE1NTA0OQotOjEwMTM2MDAwQTBFM0JBOUJENkExMUQxQTZGN0ZFQTM2NDZDNzYzQjVDNAotOjEwMTM3MDAwRjcxN0JBNEZDRkE5RkI3NDE0RUM3NDE0OTgwQUZBN0RDRQotOjEwMTM4MDAwNTc2RUU0NUVDMUJDNUI1RDNDRjgwNUUwMjFDOEVGQTM4RAotOjEwMTM5MDAwRTNGQkU3QUNCMzMxQUU3QURCMkY2QTMwOUVBQTlEQTNBNAotOjEwMTNBMDAwRDVDRUNGMTIzNTZFMjI2RDE0OTBERjRCN0IzOEJGRTQ2MwotOjEwMTNCMDAwNjY2NDYyNDAxQjVEMzRFMDdEMUU1NDRDNkQwM0QxQTYxMwotOjEwMTNDMDAwNTBBQUI5ODRCRUU2MEMxQ0U4OUI1MjI3MkRBN0QxNzUwNAotOjEwMTNEMDAwNkQxMjk0NzRGQUREQUU3NzEzRDE4RkJBQzEyNUE5RTdFNwotOjEwMTNFMDAwMjE5ODFEQTVEQ0MzQTExRTQ3RkI0NTNCNThFOUE0NzgwNQotOjEwMTNGMDAwNDNGQjc5QTc4MEY5RjdDRjE2MzAzRDgzQTI4ODFGRTcxQQotOjEwMTQwMDAwQTMzRTNCRDU3QzA4NkRCQzM2NjIwOEMyRDNDMEIxRTdCMQotOjEwMTQxMDAwMDY1MTk4MUI0QjRGRDNGQUVCMzQzNjVCMjA2RTEyMUVFRAotOjEwMTQyMDAwNjdDMEI4RTQzOTkzNjcxMUM2RjU5MkYzMDhEODdEOUQ3QgotOjEwMTQzMDAwRjZFNjhENzM1OTNERjJEMDczRDZCMDE3RUI3RjIwMzBBRQotOjEwMTQ0MDAwODU5RjQ4QzkzMERGMzdENUZERDBFRkVCRjJFRUU4QjIyQgotOjEwMTQ1MDAwM0U2RUFGQkYxN0EwOEVGOEYyMzNCMjQ3OUU5MzdGNTMxNAotOjEwMTQ2MDAwOTU2QkU3QkFEQ0VBQkVDODE4RjdFRTM0NEFGRkU2MDYyOQotOjEwMTQ3MDAwMzlCNzQ5NDA3OURBMzY5NkMxQ0QzMDhFM0RCMzlDNTVBNwotOjEwMTQ4MDAwOEI1MDlFM0FBOTlFODlGMzY1RjNDRkZBODE4QjAzRkFCQwotOjEwMTQ5MDAwRUI3NDMyRkNGQUFFRjNENkNGRjdGMzgyM0NBNjNGODI3MAotOjEwMTRBMDAwRjI0RkM3RUJEQ0M0RjkxOUJDRDhCQzJGRDRFRjlDNTI2NwotOjEwMTRCMDAwRjhGREZBOUQ4RjcxRjJFMzQxQzAzMzlCRkY2MUYwREZDRAotOjEwMTRDMDAwRDVCNTk5NDVFMDY3QTczODk1RkUzN0YxQzhDRkI2QUREOQotOjEwMTREMDAwNENDNkYyRDE4REI5RThDRjE5QTJEQjEzRUJEN0MwN0Q5MgotOjEwMTRFMDAwMDcxNzlBN0Y5NTVGQzhGMEUyNzczQTdGNUE2RDM5Nzc5MAotOjEwMTRGMDAwMThGQUQxQzMxRDEwNEFEMEU0MEY2RDVBNzk1NTUxMzVGMQotOjEwMTUwMDAwRjBDNzQ2MDM5MUQyNDAxRkQ4QThDQkYzRDBEMTczOTUzMgotOjEwMTUxMDAwRTQ5QjU2MDhGQUEyNjlGMDIwRTM1M0ExM0MwMUY1Njg2OAotOjEwMTUyMDAwQUIwQzcwN0JEMDcwNkNFRjZGMDE1RkY2NUEzMTZGQjAwRgotOjEwMTUzMDAwNzE1REY4NzFGMDNCQTY0QUJFOTk4NTE0Q0VBN0Q3QkU1RgotOjEwMTU0MDAwNTdDRDQ5RDgxRERBNUI2NzBGRTRFM0ZEMTlCNTlEQkFBNQotOjEwMTU1MDAwN0IwOUVFODlDRTJGMjExQjkzNTlGRTQ2NEZGNDdCMzgzMQotOjEwMTU2MDAwM0YxRkQ1NkU0NERFMDlEMzNGMzc5QjdDODU2MDI3Q0M3NwotOjEwMTU3MDAwQkE4Q0U1RUI3REJDQ0E0MDAwMkYzRUI2MzJGQzUxRUU4MgotOjEwMTU4MDAwQjVBQjcyNDZDRThCRDQ0RjE3MTdFQUY0OTg3QkFEODg3MwotOjEwMTU5MDAwMUY3NUVBNzkyNUZEN0UzNDAwN0VEMDdEQUI1N0YxRTNERgotOjEwMTVBMDAwRTNFNzJFQzkwM0ZDMzhCREY3OTIzQ0MwOEZDREM2NkU3MQotOjEwMTVCMDAwMEZERTIzOTBFM0ZCMjlDMEYxRjgxQ0VGNDEwM0UzNEI1RQotOjEwMTVDMDAwNzkxNzgzQjdGNUZBNzlGRDlERjRBQkJCMEJFM0M1NERGNQotOjEwMTVEMDAwQTQ5RjQ0QzY0RDA2OENDQ0RGQTU1OEEzQ0ZGQjBDNUM2MgotOjEwMTVFMDAwQTQ3RjM0QkU5RkFCMzAyN0RBQ0Y1NTkwMTM1M0JGQjJFMAotOjEwMTVGMDAwNThCRjUxQkZCQUY4NzUxMDNDRUZBNUM1NTMwNkVDRTFEMgotOjEwMTYwMDAwOUYzRjFFMDFBRjE2MkJDQjJCNjkyOTE0NDVBNTA0RDY4RAotOjEwMTYxMDAwNTc5QjhERTdDN0ZFNjg5MTdCQjlFRjc1OUQ1MUZFQkM2NgotOjEwMTYyMDAwOTdCRkNBNUVERjBERjNGMDMwRkZFM0NCODI3NEYwNTI1OAotOjEwMTYzMDAwM0FFRUNCODRGOTFGRjVFQkZFN0QzRUNCODNEMUVDNjcxMAotOjEwMTY0MDAwQ0Q5RUQzOEZCRjU3RERFRjgxNDJDRjRCNjAxRkNGRkFDNgotOjEwMTY1MDAwRUEzQ0ZBMDM0RUMwM0QzOTc0NUM4QkZGOUZEMDJFMjNDOQotOjEwMTY2MDAwRkQ5Qzg4RTdDRjI0MTZDRjZDN0M3MUY5QTNFMDNGNUQyOQotOjEwMTY3MDAwRTU1N0UzOTBGQjM4QjRCQjU3M0RGNjA5RDY5RkU5QUI3RAotOjEwMTY4MDAwQzM3QTVCM0YxNzg0Nzg2NkQzNTgwM0NBNkQyRDhGNDFBOAotOjEwMTY5MDAwRjNFMzM0RjVDRjI2ODBBNzlBMUY4N0NFRTMwNTk4NDc1QQotOjEwMTZBMDAwQTIyQjZDNDJCRTA1NzYyMjZERDcyOEIwMzg2REEzOEI3NQotOjEwMTZCMDAwQzgwQUIwREFCRTY4RkY4Nzk2RTdCNENENkI0MjdBREYxRQotOjEwMTZDMDAwRDZDRkY5QzFBRTRFMzVGOURDNjMxMTlFNjNDNTBGMTM1OQotOjEwMTZEMDAwODdGOUM2NUI4NTlFQ0Y4MDVGNjk3OTY4NEY2NzdCMEUwRgotOjEwMTZFMDAwMDNCREJBNEMyNDEzRjNEREQ1RkRGMDBEQzU3N0Q4NzlEMQotOjEwMTZGMDAwODlCRkJDQ0RDRTRCODRFMkYwRUJGNzBCQjVGMzEyMEJGOAotOjEwMTcwMDAwNTE3RkZFMEJGMTI2QzVDRTIzRjdCMzNDRjJBMUJDMzVDOQotOjEwMTcxMDAwOTYyRjVFM0Y4RkRBQzg0RTU2ODY3QjVGMUFFMERFMTc0MwotOjEwMTcyMDAwOTlDOUNGQTA0RTdFNDY5NjIxNEYyQzE4QzEzN0VCODUyNAotOjEwMTczMDAwNDFDQzQ3RDdFRTc5ODFCQ0IxQzhFRjFCRTFCQzQ1MzYzRgotOjEwMTc0MDAwQ0IxRjhCRUE0N0U1QTc2OUZDQ0QxOEM3ODkxMTNGRkQ4MAotOjEwMTc1MDAwNDlBNEZENzE0OEIzQjM0QUI0RjMzMTYxMTNGODY5NUEyRgotOjEwMTc2MDAwREE1QzYxODgwNzFDQjJBQkU3NzZENUJDRDgxNjZCRjg5QgotOjEwMTc3MDAwMThGODMxNUE5RTRDQzM3MzIwNDNGQUZEQjM2NkQ1MEY1NwotOjEwMTc4MDAwQ0VGMEJFOUVGRDkzMzRBRDNDOEFGNjdBMTM5Q0NGRTczMwotOjEwMTc5MDAwODZFOTY5NUU1Q0JCRUM4RDFDODhBQjFDMUFCMkNCNUUyMwotOjEwMTdBMDAwQ0Y4MTczMzQxQTlGQUQ5NzE5QkZBOEVGRTNEODc5QUFGOAotOjEwMTdCMDAwNDBGNDc5OUEzMTEzQkU1RkJFQUI3RDE3QUZGREY0MDlEQgotOjEwMTdDMDAwRjFGOEVEQjdDMTk5RjFEQjQzRjFDRTIxQTk3QzUyODM0OQotOjEwMTdEMDAwQTM5RTFGNUQyQ0ZDODZFNDkyMDYzRjRBRDdDODZGNzUxNgotOjEwMTdFMDAwRjBEM0ZCQzMzNEJGMTZFOTE0RDFFRjQ1NzU5MjAwRTQ4MgotOjEwMTdGMDAwNjU2QTdFQUQwQjk1ODdGM0JGRTc3REI5NTA3OUQ4MzAyOAotOjEwMTgwMDAwMjE5RTFERkVEREY2Mjc5RTlDQjhEODdEMTkyMTBGNjExMwotOjEwMTgxMDAwN0Y4QUUzQ0JDMzlDRjI3RjUxRTdBRENGMjc1MEU3QUQ4MgotOjEwMTgyMDAwQ0IyNzM4NjQwQ0NGNjdGNzUxNTBGOEI4NDdFNjEzQzQ5QwotOjEwMTgzMDAwQzVCRjZGQzkyN0Y4MUJENkE5Q0IyN0Y4RTY3NUVBRjMxMQotOjEwMTg0MDAwMDkxRTM5RjA5MDAzNDI2RTcwRUUwQ0ZDMEUwM0JCOEQ0NgotOjEwMTg1MDAwMTg0N0FGRTY2RDFFOTZFN0M1QjNCQzUwRTJDMUZCMzEzOQotOjEwMTg2MDAwOUIyQzU2RjQyRkU4RjNFMDI4QTc1QURGMENGQTY1MzlEMQotOjEwMTg3MDAwRDVGQkUxNUNDRThFMEU5NENCMEQxOTNDRkExQzIxRUYwQQotOjEwMTg4MDAwNEY5NDYyRTQ1OTBBMzU0OTQxNjk2NEJFMTdFNEIxRTNGMwotOjEwMTg5MDAwRjlGRThCQ0NGN0RBMzM2MTI4RUZEMkZEMzdFNjVEMDYyRgotOjEwMThBMDAwMjY1QzQwQkU1NzcxMkVBM0JCNTc2RDlGOEQ4QUJDQkY2RgotOjEwMThCMDAwQjJBMjg4MUFFQTQ1RjFGM0VENUY1NkU5MzU1MUNERDM2RQotOjEwMThDMDAwQjUwODBBODlGNDQ3QzU2Qjc3NzAwMkIzNzc1RTM1ODUzMgotOjEwMThEMDAwREYwRDgwNUU0NUJCODFGODY1QkE4OTVBRDNBNUMzRTdBMQotOjEwMThFMDAwRDY4RkU3N0I1Rjg3Rjk1MzdEMDRGN0Y3Q0M4QkVGQTBBQQotOjEwMThGMDAwREZGRTkxMEMyMjQyRkVGQjIzNDYwNUY3NTk0OTIxODg2MQotOjEwMTkwMDAwRDc1QTVFODIzNkNFNUFENThGN0RBMUZDRTdDOERGNTkwMwotOjEwMTkxMDAwMkVGQ0Q3RkY3NEJFMzMyMjdGODlEMUUzREZDMDZGOTBFNgotOjEwMTkyMDAwRkU4NkY4ODk5MUM1NzVCNDdCMkJCRTU1Q0U3RERGN0NENAotOjEwMTkzMDAwNDY5Nzc3MTE2RjVENUZFNjEzQzQ4N0YxMTNCRDE5MTNFNgotOjEwMTk0MDAwOTE4RTNDRTg2N0JDNThGOTk3NTg0QUY1MjE4MEM3M0UwQwotOjEwMTk1MDAwQjMwNEE0NjY1MUVGQTcyMEY3NjQ2ODdFNTE3NkRGREZGOQotOjEwMTk2MDAwN0RFMzUwRUZGQ0Q4Q0FFNkFCRERCQkExQUQ2N0NBQzRDRQotOjEwMTk3MDAwRUZENzhFMkRDRUYxOTY0RUE0RjMzRTNFREI4M0U3Nzc3NAotOjEwMTk4MDAwMzdEODk5REUxNjdFOTJFNUFGRUJFRjkxQTA3NEMzRUVFNwotOjEwMTk5MDAwRDU1MEVGRTFENTlGODdBRkQ2Q0ZFRkVGMjRCRjk3NEY1QwotOjEwMTlBMDAwRkMxRjRFNDcxNzI5QkYyRjdFMUREMUY2RUMyMTNCQ0JFNAotOjEwMTlCMDAwMEYxQ0I2NjdGRkRCRDY3NTUxRjI1QUNCMTcyRUFCMTg0QQotOjEwMTlDMDAwNTRGREZEMUMwMTdGQkYzNjRFRDMyMDNCNkZCMzUxREQ2QwotOjEwMTlEMDAwNEZFREZERUY1NEZGREVBMTg5OUU0RDQwODdBNUE1QzFDNwotOjEwMTlFMDAwOUQ3MEVFQTQ5MTM4RjAxRUYxQzZDMEVEN0JERTc0QjE5RgotOjEwMTlGMDAwNzNCNDU4MkU2MDcxNDdFMkI1RTEzOUVCMURCOUJFMDdFQgotOjEwMUEwMDAwMThGRDg2RDYwMzdEOEU3NzkxMzI4ODFCNzQxNTJDMjBBNQotOjEwMUExMDAwNzUzNkNDMjc3ODA4RTg2MEZDQkFEMENFMzc0QjMxOUZCQQotOjEwMUEyMDAwQUExOUU4NTVDQjI3MkUzQkZGRDlGQUI5QTUzODVGRjRBMAotOjEwMUEzMDAwRkZCQUNDRDFGNzZGRjQ0RDY0RjZBMEY2N0M0RUE1MDM0NwotOjEwMUE0MDAwQkFFRDE5MzA5RkQzMkJEOUI5RDIyNjk3NDcwNDNGQjJBQwotOjEwMUE1MDAwMTZCRjRFOTQwNjMxRkVERkI4OEYxOTQ1NjU2MDJCNDJFNAotOjEwMUE2MDAwRkQxRDYzOTFCRTFBRjdDRDJFODFCODI2MDk1ODRCRjBBMwotOjEwMUE3MDAwRkVERDNGQjE3QkFGNEZBRjFEOERGRUM2OTIwMkRGMkY2MwotOjEwMUE4MDAwNjE1REY2NTJGRkU1NjA0NzhGQTdFMzQwRkNGM0Y0REVBQgotOjEwMUE5MDAwQ0I0QjdDMzFGODY2MUE5RkFDNDA3QzM4OEQyNzgxMDc5MAotOjEwMUFBMDAwQzQ2MUJFNDVFREU3QzVFODJGNUUxRjQ2M0ZENkNFODkyRgotOjEwMUFCMDAwMTI4QjI3QkI5ODVDNkZFQUFGMjFDQjZEQzM2NTlCMkI2NAotOjEwMUFDMDAwRkExQ0Q1NDBFMTlDOUQzMDhGOUQxMzU5NUM1RkNCRTc5QwotOjEwMUFEMDAwNzQ1MzM1MENGQzg2N0E3QzcyQUJGOTlDMzU2QUJFMzI0NQotOjEwMUFFMDAwNTEyQ0MzNzlDQTU5REY5RUNGQTlDRDRGMkI2QkY5OUNERQotOjEwMUFGMDAwODk1RjMwRkIzRDRCMzQ2MUZFODc3RDIzRTNBQjY0MUQ4MgotOjEwMUIwMDAwQzFCOEMxQ0NGMDYwNjUxMjg1NTM0RTRGNzAyNkMwMjkxNAotOjEwMUIxMDAwMDlDMDhFRjdCMTg2RUU5RTRDREZCQjQ2MDkzM0MxMUY2QwotOjEwMUIyMDAwQjJCMzc1Q0EwMEU4QkZDMkE2QzExRkMwOTY0OERENjI0NQotOjEwMUIzMDAwMDVCODE4NzdFNDdBREYwMzNDMjE0MjczMDFGMEE1OEFFNwotOjEwMUI0MDAwREYxQkQ5NzlBMzREODlBODU3RjY2NEQ2RTM3OUEzMzM2RgotOjEwMUI1MDAwRUY5OTYzREUyN0EwM0QxNUQyOUUwRTcxODdBQzhERkZGNQotOjEwMUI2MDAwOEVGMTdERkIzRTJFRTZCOUI0NEI4QjZDRUE3OUE0RjY4MAotOjEwMUI3MDAwNzQ4ODYzRDgzNzBFMkFFNUI0RkZBQzdCMzlBMjlBRDFCQQotOjEwMUI4MDAwMTk1QzNBRjg4NzA1MDNDOEQ3QkEzRTc2NEY1RDVEQjc1MgotOjEwMUI5MDAwQjNDMjgyRjI4NkY5NkJDODRDMTdDQTExNjFEMzk1MDY5RAotOjEwMUJBMDAwRTAxMzQyMUJENTYyRTkzQUE3MTRCMUY4NzQ2RThGNjg0RQotOjEwMUJCMDAwMDAzOUY1Q0Y1RkYzMzFFMzQ4RTc1NUJDNkVCMDg0NEM5NAotOjEwMUJDMDAwMDBBRTA2NzNGODYwQkE3QjM4NUY0NzNCQUZBMkY5N0I4MwotOjEwMUJEMDAwODZFNENGQkVBNUU4RUZCOUY4RkNFQ0YwRjU5OEZGRjc4NgotOjEwMUJFMDAwNzUyQUM2NTdFNjM5OTgzRDQyMDU5MTdBNEY0Qjc0RkJFQQotOjEwMUJGMDAwMTFGN0I0QTg3QThCNjYxN0VCRTk0MDlGRUY5QzUzM0UzMAotOjEwMUMwMDAwMUFFOTgyRjJEMUMwMzYzMThBRUZDNUNDN0I2RTE1OThDNQotOjEwMUMxMDAwREU0REQ3NjE2QTgxNzlDQzRFOTdDMTNGNzdBMTc5RTZENQotOjEwMUMyMDAwN0E3QjdBNDhDRjUxRjUxMjZEREU3RjZCNUVCNjU2NUZEOAotOjEwMUMzMDAwMEZGOUQ4MzFGQzFGOUE1RUQzQTk5RDY3RkU5QUREQTNFOAotOjEwMUM0MDAwMzU1RUI1Mjc4RTc2RkQ1NzMxQkJBRjUwQ0JGRkYwRTM0NQotOjEwMUM1MDAwNTMzMDUyRkU4OUY4MTNCQTRDMDEzQ0Q4RTczNDM0MTY5RAotOjEwMUM2MDAwNjE3Q0E5MTFGQkQ5QzRFRURCMUZCRjMxQkJCREJDMTQyNQotOjEwMUM3MDAwOUUyMkUxMjhCQzhGRUU1RjNEMUVFM0I3OTQyRTcyNjM3NwotOjEwMUM4MDAwRDBDNTkxODk0NkQ2RkZBNjQ0QzQ2M0UxN0U4MkQ5OEMzMwotOjEwMUM5MDAwODIzMzE1RjE1ODc4OTBFMUVCQkIxMzE5N0U2OUY5NjcyRgotOjEwMUNBMDAwNUExQ0YwRDA0NDlGMTdDRTFCMEVEREFGRDE5QUMwRUU2OAotOjEwMUNCMDAwRDc1MEYzQjhFREFERUYzRDBCRjc1NkVDNTRFM0MwMDM0RQotOjEwMUNDMDAwMkY0RjVDODBGMUI5NEQwMjA3RjZFMTM5RTdEMkYxRTAyMAotOjEwMUNEMDAwQkZCQkJFODhFMUI5NUQxODI0QTIyRDkyNUUwN0YwMUMzRgotOjEwMUNFMDAwNjBENjAxNzY3RTQ5NTBGMzREODU0REFFNUQ4MDlGMTZERQotOjEwMUNGMDAwQjcwRkNGM0JGRUEwMzNDODYzM0U5Mzc4RkM4MUI5MTI4NwotOjEwMUQwMDAwRDgxRDYxMTNFNDlGOUQ2QzEzQzJFRDRFRDQ5RkEyRkNCRAotOjEwMUQxMDAwNjQ3QUJGMTcxMTAyOTg1RkQzNTRGNEY3QjU0M0VFMkRFMAotOjEwMUQyMDAwOEFFQjlGRkE0RUU3MjhDOEI3RjhBN0JFMkI1RUM3RjMyOQotOjEwMUQzMDAwNEY1REZDM0FGNEU3Mjc5ODdENDI1RTY2Nzk0QTMxRDZEQQotOjEwMUQ0MDAwMTVFNUJGRkNERUQ3QTVGOTJERjU3OTY3MjNFODk4RjlFRAotOjEwMUQ1MDAwM0YzNDdCNDg4QjNGMTA4RjEyOTUxNzNFNjAxNDgzQTA1MQotOjEwMUQ2MDAwRjc0MDlFRUQ3MzMyRThENTRGNTgyM0YzQzI5RTU3RjFFQQotOjEwMUQ3MDAwN0VFOEZFM0VFMkI3QzJCOUZCOEZFMURDMzBDQTNCNzlCOAotOjEwMUQ4MDAwMjNDNDQxNkZFN0VEREQ2MERGNzU0MEJFM0VFODk3MDA5QwotOjEwMUQ5MDAwNUYyRUUyRENDMkZCNzZDQzdCNjgxNUQ4QjkwNkEyQjAxOAotOjEwMURBMDAwNzMxMTJEQ0I5QjlGODBGNjJENkQ2OTIyQzA1RkE5NjhCMgotOjEwMURCMDAwRkUxNTlFN0IzMDEwNkYwNzdEN0VBRUZFRkU4NDM2MUZDMwotOjEwMURDMDAwMkQ4RjNGOUVGQzFDOTFDN0ZGMkRFNzEwMzJFMjlDNDNGNAotOjEwMUREMDAwNzg1QkM1RkI4MjY1MDRDRjIxOTA4RDlFNUQzMEFGOUUwMAotOjEwMURFMDAwMzY4MTQwQkMzNzc5MkUyQjhGMTcyQ0Y4N0IyODU2QzhBQwotOjEwMURGMDAwODcxRTg1RTc0NjMxNkYzOTRDRTEwOUY5RDc1NkM4ODcwOAotOjEwMUUwMDAwMUUwNUU3NDREODdEODVEQzgyQjk4ODdGQzkxNDNFQTBEMQotOjEwMUUxMDAwMTc3NDE4RDlGRDg0Q0EzNTM2QzRBN0NBQjkyQzdFOTk1RgotOjEwMUUyMDAwRUMzNTIxRkYzOTRCNjRDQzlGNTdFMDFFMzMxN0UwNTk0NgotOjEwMUUzMDAwM0JFMjY3RDg5RThBRjFEN0U0MUNBNjQ3NUFCRDI2ODNBOQotOjEwMUU0MDAwQzU4REY5Q0U4OEFGNjE0RUNCNzc2NjdDQUY2N0E5ODQyQwotOjEwMUU1MDAwNzlFODQzRjcxNTJFMjdCODNGOUI3MkFCMzNFMDc3MDA0NAotOjEwMUU2MDAwNDY1RjY1RTIyMDVFQTNDOTk5MEExNTNGN0E3NkE5RUQxRgotOjEwMUU3MDAwMUI1ODdCQjhDRjEwRTY0NzVBNThGQkExRkIwQzdGQ0ExMgotOjEwMUU4MDAwRUE1Qjg1MTBERTA3NDQ3NTE4RjUzRTNENTZERkIyMzgzMwotOjEwMUU5MDAwMTVFOTg3NTdDRkFCOTJFQkQ0N0M3QjhFREQxRkQ1QjI5MwotOjEwMUVBMDAwNzgzNEFCNzczMDNFNDg2RTRBNTBFNUI5REFGRUQ2NjRGNgotOjEwMUVCMDAwQkYxQTJGNjA3OUYzQUIwQ0VBM0QwMEREMjQzMjlFQUJGNAotOjEwMUVDMDAwRDE1OUYyQjc5Q0JCRjhDNTcwRkUzQ0QyNzNDN0U1MjI2RQotOjEwMUVEMDAwRTYwNzZBRjczMTU2RDg0Q0VDM0M5NjI1OUFBRTlFMjkxNwotOjEwMUVFMDAwNEE2Njc4NUYyRTVCNjBEQzY1NkU0RkZBQTQ5OEZDRDE4MQotOjEwMUVGMDAwQkYzNDkyQUY4Q0Q2RjhDQTREMjY5RDVEOTZDNkUwRUFGNwotOjEwMUYwMDAwMDhFRjY0RTdCNkNDMTc2NTk3QzU4RjJCM0U5OTExMUQ3NgotOjEwMUYxMDAwNTdEQzkzMTExOTU3RDRGNkI3NjJBNTA5Rjk0QThGNTNDNAotOjEwMUYyMDAwN0EwREYyOEZCNjUxRDBDMkZENzZGQTc1NkYxQkJBQTc0MwotOjEwMUYzMDAwREE2RjA1QkQ1NDZGMEYxRThBOTM2N0I0NjgxMkYzRTcxQQotOjEwMUY0MDAwQzk3MUZDMTA4QjI2QzU5MzJGNzFFMkI0MjVFNkZGQTY1QwotOjEwMUY1MDAwNzgzM0UzQkYwMzcxQ0VFOTBEQzE0QkQzOUIyQ0ZBQjhBNAotOjEwMUY2MDAwODc3MjUxN0U5RjAxQ0JDRjkwMEY3QTNBMDQ2MkJEOEM2RAotOjEwMUY3MDAwOTY3NUU3Q0EyODFGNDRCRUE4QjQ5QkM1MEUxN0YwRDFCQQotOjEwMUY4MDAwOUYyMTVGNkNBNTk2QUIzOTgyMkY1MjczRjQxMkUwQzc4NAotOjEwMUY5MDAwMDM3NzE2RTBFRkNCQkM3NkE3OENDRkIzNTYyRUMwNEY5RAotOjEwMUZBMDAwODY2Nzc4MDk2ODRDNEI4QTBGMkM4NDdCOUJDRkRBQzNGOQotOjEwMUZCMDAwOTk3MENGRjNCQUM5NkY1QzhCRTU5NEYwMTEyOERGNTFBQgotOjEwMUZDMDAwNEMxNjYxMzkzN0JDMTNFRTdEQkVCRkI4RkQ1QUI4RDc4OQotOjEwMUZEMDAwRjkyQ0QwRDg2ODQyNkU3REY2QjY2Qjk1MjJGQzNEODQxNAotOjEwMUZFMDAwRjU4M0EwREY5N0VBRjJGMTc1RjdEMEMyQjk1MTU4NEZFNwotOjEwMUZGMDAwOUFDRDg0NzFERjM0RjVCQzJFQTk1MkZENDM5MEU5MDVEQQotOjEwMjAwMDAwNzQ5NzUxODI3OTdBMzYyMkVEMUI4NEZBQjE0Q0VFRDI2NAotOjEwMjAxMDAwRkEzNkI4RTdCNDIzRDdDREUyRDA4NEYxMDEzMjU2Q0RGOQotOjEwMjAyMDAwRTMyMDIxMDVGQzUxMUQ2RTI3QjYxRkQyRUZGNjk5RDU4RQotOjEwMjAzMDAwM0MzMDM2RkVFMUU3RDhGRDNDREEzOTY0NDJDNDcxNjBEOQotOjEwMjA0MDAwMzdEQTI0MTI1NUQ2RUU3NTI2ODIzODBFRUU2MUVENTA0MQotOjEwMjA1MDAwRjE0MDJCRjdBN0Y5MUU5QTE0NjE1NzFFOUU3MzdCMTE0RQotOjEwMjA2MDAwQUNGM0UzRTdFRkM4MDE3REVBODdFQUVGMzJFOUYxRUE5MgotOjEwMjA3MDAwQzZDOTBDQkZEQjEzRkZCQTA0RjhGOEJCQkM0MzA2RkZBQwotOjEwMjA4MDAwNDE0QjlBNkYxN0Y0QjdEQ0Q1MzZDRDQ5RjFBNzRBOUM3RQotOjEwMjA5MDAwOERCRkZGMzI0MzU5Q0MwMTVGNzE1RUNERTZFN0FDRjJGNAotOjEwMjBBMDAwNzJDQjhCODY3RjE3MjZDNTI3QTA5RjlFRjg3QTc4RDBBMwotOjEwMjBCMDAwQjc1MzhFN0I0NTgwNEZCRDI1OUMyOUQwN0VGRUU0RjIzMAotOjEwMjBDMDAwM0QwM0ZEOUU1QkZBQzE2RDk4OTczN0ZBRjAxMUI4MUY3QQotOjEwMjBEMDAwRjJCMEIxQkJEMjAxRjhFNDU2RUYwM0E2M0IwNkU3NjNDQQotOjEwMjBFMDAwMEU4RTE5REZBQkZFQkUwRDNCMjc5M0NCQTk3MUQ4NjBENgotOjEwMjBGMDAwMTVDODg1MkIwOEMzNUIyODQzRkQ5NUVBN0Q2N0Q1MjI2QgotOjEwMjEwMDAwQkIzRkIzQkFENDhEQkY1NzM2OUY4NDA1QzA4N0VBNzdFQgotOjEwMjExMDAwQkQwRTAyRjQ3MUI1QUYzNEQ2RkQxM0RBOTNBNDFCQTUzRQotOjEwMjEyMDAwNDhGQUI5NUM4QTI4RDNGRkFFMkM4ODJFRkY0ODhFMkU0MQotOjEwMjEzMDAwRkZCOEZDRUJGQ0E4QjJFMDc5NjM1MjBBQzgzNzI2N0ZFRgotOjEwMjE0MDAwOTRFOTRDRkU4ODI0RDAwRUYyRjFBOTY2NzEwQUM2RDUzNgotOjEwMjE1MDAwNUQ5QzAyRTU4OTJGOENDNkJDMjQ5MkNFRjIxOTI2MzhFQwotOjEwMjE2MDAwQjJGQzBDMEVEOURCNjE1RDYxMkFFNzdCNURGMEJCNDdGOQotOjEwMjE3MDAwRUMxRUFCRDQ3NzREQkJFMDlFMDQyMjQ5REI4MTBFOUY2MQotOjEwMjE4MDAwMzcxNjYwREU2NkFBQURGNjlGREE1MDlGQjE5MzVDRTQyNQotOjEwMjE5MDAwNTNEMjc2QzQ2QkJCNDU4MkRGNkY3OEM1Q0VGMjExM0E1RAotOjEwMjFBMDAwRUUzNzYwQkM4OTczNTgwQzFFRkExRERGMkIzMEY5NkZCNwotOjEwMjFCMDAwNUY1OTA5RjU3QzE5REQxMDJBQUIwNzlDRUM3Nzk0M0EzRQotOjEwMjFDMDAwQTYxMTYzN0IwOUVDOUJGQzJFRUE0NTc2MEJFNkVENTdFNgotOjEwMjFEMDAwMzkwQTdFMDJGNUJDQzM4NEY3M0FCQzYyMkZGM0E5RTM0NwotOjEwMjFFMDAwMTFFOEZGMzFGQjRBNkMwRjNDREE0OEU5NzdDMENBRkNDMgotOjEwMjFGMDAwRUIzQ0I1OEZEQkQ5RjhGODdCNjlGQ0NENDQxRERGNDJBMQotOjEwMjIwMDAwNEM1MEFFMjU5ODg3M0ZFMDE0RDk3QzZGMzU2MDNDMDQ3NAotOjEwMjIxMDAwRUEyRkMzRjk1OUIwNUVCQjg3NzBGOERDRUI2QzAxRUZCNQotOjEwMjIyMDAwNjNFNzg4MUExRjZCQzNGMjQzMkExRkVDMzA4QUFGMDBBMgotOjEwMjIzMDAwOUUyQTdGMjYwNEY2QTNDQUYxMDVEMjAxNkY3MEM4NzhFMgotOjEwMjI0MDAwNkY4RTg3RTRCODUyMDlGMzU5RDBFRkY5NTQzMTA4Rjk4OQotOjEwMjI1MDAwRUNGQ0NEMEVCNDlCNDFGMzgxN0FGMDIxMTBBNDZCQzE0QwotOjEwMjI2MDAwNDNDQTU0RDcwQzhFRTczOTBBNzgzQzlFMjM1RUQ4OEYzOAotOjEwMjI3MDAwNkI4QkIzOTAxRjNENkEzOEJDMDVGMzJCNkM1RUIzNEM3RgotOjEwMjI4MDAwQzczMTVENDc3MDdGRTVDNEQ4RTc1REYzOEExOTlEOEUzRAotOjEwMjI5MDAwRENCRkIyNzRDOEUzRTAxQ0U1MTIzQzNCRUNFNTEyOUNFOQotOjEwMjJBMDAwREYxOTcwQ0FFOURFODg3MjhDN0RGMTAzREUwQ0VGOEJEQQotOjEwMjJCMDAwMjU2ODI4ODZGRDkwMjVEMDJGQkVCRDNGNUE2RjgzRjUzNwotOjEwMjJDMDAwNDgzODJGN0VCNDJDODExRDlBRTNBMEZENTBCRTJGOEY3RAotOjEwMjJEMDAwOEFCRDhFNkJENTc1MDRENEZCRjFGNEY1OTVDNTg2RUZGOAotOjEwMjJFMDAwN0I5RDNBRkNGQjhFRUI0QzhENUVFN0Y3MzhDRjEwRjcwOQotOjEwMjJGMDAwM0RDQzkzQ0ZBNEYzQjMwRENGOEZGRTEzRUZFQkJBQzI1NwotOjEwMjMwMDAwNjY0MEZDQkE0MkJCMzdBOTIwRkFEQzg1RkU5QzA1OTVFNQotOjEwMjMxMDAwQzA1QjgxQ0ZGQzUwQ0QxRkFENDhGQzQ3RjRFMzVGNEU1RQotOjEwMjMyMDAwRjU3QzkwNkIwNzEzN0Y5NjAzRjk5QkQ1NDk2RDlEOENDNwotOjEwMjMzMDAwMzg5QTRGMkYwNzdFNkNFMTkwRUY1QzQ5ODJFQkUxRkQwQwotOjEwMjM0MDAwRDlEOUJFNDc5Q0Q5QzhGNzU3MTdDM0I5MzFERTk3OUY3MwotOjEwMjM1MDAwNENDQjFGMUJCQjczRDZCODkxMkZENkMzN0IxQjA5MjM1NQotOjEwMjM2MDAwREQ1RDAxQkY4RjA2NzQzN0NGREYwOTY1M0E0NjMzREU4NgotOjEwMjM3MDAwOUY0NUU5MTBFODU2QTNDMzkxRjNBNzc0NDlCRjFGRDM0MwotOjEwMjM4MDAwRUNDMDczNEQzQjQ4MTAwRkE2QTU5MzZFOEVGOTVCOUE3NwotOjEwMjM5MDAwNTE2RTExNjlEQ0YwM0EyOUQxNTY1QjlBNzExREJGNkRGRgotOjEwMjNBMDAwNTM1MDNFRkNEMEY5ODAwMEU1ODc2NTVGMUJDQzZCRDFCNAotOjEwMjNCMDAwRTQ0RkYwREU3QjkyQkUzNDFGRUM0RTNBREZGNkZGOTcxRgotOjEwMjNDMDAwRjMxRDc5REVGQzlCQ0Y1MUZDQkRFQ0QxQzc4QjU5OUMzMgotOjEwMjNEMDAwNDNCMzQ3NUQwOTU0OUZBMEYzOTQzODg3NENBOEZFMzg1NwotOjEwMjNFMDAwNjQ5RjFBMkQ5ODk3MzA3QzNFMzc1Qzg3RTc4MEI5MjQyQwotOjEwMjNGMDAwMkZDODMzRUQ3Q0FFOUVFRkNFQkE4Q0YxREQ4RkQ3Mzg4RgotOjEwMjQwMDAwRTQ3NkJDQUY3MDBGREFBNTRENTdEQkI0RjNCQkE4N0YwMQotOjEwMjQxMDAwMzVBRDM0QThFNzc3Mzk5NDJCOERDNDgyRjcwNzBERkRDRAotOjEwMjQyMDAwN0UxQ0ZERTM1Mjg3N0Y5RjYzM0Y5Q0UzMkRGREE2NzNENwotOjEwMjQzMDAwQkMxMjlFMTM1NkQ2QjEzOEZEOTA3REQ3MjAzMkZCNTU4NQotOjEwMjQ0MDAwRkI5RDg3NUJCM0I0RkJGODk5OUVCMjg2NUM5MDdEMUJDNQotOjEwMjQ1MDAwRTM3QzJGRUE4RDI0QzlBMERBQUY0QzVGRTg5OTJFODk3RQotOjEwMjQ2MDAwMEFDMUY4MkFEM0MzMTc5QkIwN0U3MzgyMUY3RjM3QTU5QQotOjEwMjQ3MDAwOEVFRjQ2MjRGOTYzQjE1M0JEMTdDMTZGQzVERjU3MzJFNAotOjEwMjQ4MDAwQzk3OUMwMjdCNDM4RUJDMjFDREZGQjgwQkZDQjhCM0NDMwotOjEwMjQ5MDAwOTkxQzVENEE5RDg5QzU0RjI5MUQ2QzFGQTRBREU2OTIwQwotOjEwMjRBMDAwRTZDN0UwRjdCMzJFMjdDRDZGMUJCMjkxMEU4RTIyMUQyQgotOjEwMjRCMDAwNENGQzg0RkRBRUQ2MzAxRDFDMkI4NkZDMDZDMkZDMDFGNAotOjEwMjRDMDAwNTdBODcxQTI5NzNFN0VCQzEzRjZGRDJDNDdEOEY5QUVGMwotOjEwMjREMDAwMDJGREY5MkVFRkE5NjI5QzVGNDhGRDVEOUQ2OEJFMTM2OQotOjEwMjRFMDAwMzE4RkUzNDYzNjBGMTdDRkUzM0MzRThCMzU4RjExNzRBNwotOjEwMjRGMDAwNDhGQzM4M0VERERGNjYzQzQ3QUVDMzIzRkQ3Q0I4RkVCQQotOjEwMjUwMDAwREJGMUJDRkZGNkVCODlDODRGMDczOTNFNjgwNTc4OEVEMgotOjEwMjUxMDAwMDU4Q0M4ODY3NUZBMEM5M0E3QTEzQ0Y3QzFGRDY2OUE5NQotOjEwMjUyMDAwNUQzRDYyREVCQzBERjc3NUUxRTJBMTNDOURGOTE5NjVFOAotOjEwMjUzMDAwMTAyNzYyRTMzRTk0RDhGODIwRjgzRDlBQUUzNzIyN0YwOAotOjEwMjU0MDAwQUZFOTlGODQ3QURBNDFDNTJDNDIxMjI0QTk2MkY5MzU5OQotOjEwMjU1MDAwMzJGRDFGQ0M2QjExRjFDQzcxRDI3RUFFMTI2QkYwQkU4RQotOjEwMjU2MDAwQjRBQkU3RTlGMzcyOTRCQjlBNjlGQjZCRDQzQzlGODVFQgotOjEwMjU3MDAwNTcxQjhGNDZFQTlCNjc4REY3MTgwMTBFNEE5REFEOTk1MAotOjEwMjU4MDAwOUYwMUZEMDlDM0VEREQyM0UxMzJFMkJFQTY0RUM2OUZFOQotOjEwMjU5MDAwMDhENTczQTBGRjhFRjIwMEYyQTc3ODdDMkE2RkYyNTA2NAotOjEwMjVBMDAwQkU0RkZFREY5OEVGNTMzQzE5RjFFMjlCRjM3RDY0MzU5QgotOjEwMjVCMDAwREZFNzM1NjMxOEVGRTFGQzREQ0E4QUVENkJFODNBRjNDQgotOjEwMjVDMDAwMUYyRUMyREYxMzlEOTNCQUVBQjFGQjY5Rjk4OTZEMTMxRgotOjEwMjVEMDAwQjBGQzlCRDRFQjZGMzkwQ0Y1M0JGM0IwNUM2NUY4NjQ1MQotOjEwMjVFMDAwMDlEMDQzNDFEOUUyMkJFMDc3NTg1RkIzQjI3RUQyMTNEMgotOjEwMjVGMDAwN0MzRDM1RjRCQkY0RTJBQzI5NzBCMTRCOTUyOThDREZGRQotOjEwMjYwMDAwNUQzOUI5NjEyQUY4NjNBQTEyNThGOTUwQzkzQjUzQjAzMQotOjEwMjYxMDAwOUNBNTk2QTdCQzM0MDFDQUFGNzE5RjJDODlDNTE3MjcwQQotOjEwMjYyMDAwMTY3MEMxNDIyQTZGQUI5MkQ5RjdGM0E2M0MzOTFBRUM2NwotOjEwMjYzMDAwRjhBQTBBNTY5RTI4Q0ZERTk0MERGNTg2NEY5N0M0RDI4RAotOjEwMjY0MDAwOTdBRTlGQ0NGOEVBQUNBRkNFNzY4RTcyNDE1ODk4RkQyQgotOjEwMjY1MDAwM0VFODBCOUUwRkYwNzczNkJDNTRERUMyMzk3QzZGMzlGMgotOjEwMjY2MDAwOEJDMzc5M0QyNTAyRkNBRTUzODU4Nzk1MkI2RDZEMTk4MwotOjEwMjY3MDAwQzAwN0U3RkI0Q0E1MTA3NzE1NkRFRTRFRjhCREMyQTQ2MAotOjEwMjY4MDAwRjJEOUQzNjBERjJCQTlCQTBENzE0RTRBNUYzNzAwOUU5NQotOjEwMjY5MDAwMkZCQUU0OTM0QzA3RUFBNTFBN0Q4OTQ2Nzg3RUMzN0Q1QwotOjEwMjZBMDAwOEJDQkQ4QkU0NUQzMDNFRDZGMTVGNjc3NjlCNEZDMUMxMAotOjEwMjZCMDAwNDFBRjNBM0NCQ0MyMzI5NkUxMUQ5NThCRTZGMjkxRjRGMwotOjEwMjZDMDAwQUFFN0RGNjQ3RDgwOEJBNEQ3MUQ4MDk3M0NEMkVENUFBQQotOjEwMjZEMDAwMThERjY0MTg5NEUwRkQ3ODRFOUUyMDdFMDNGRDlFMzU0MQotOjEwMjZFMDAwQkVFRkM2MzgxMDdEQzE1RjFBODM2RkQwM0Y0MUQzRjM3MAotOjEwMjZGMDAwRDkyQzQ0MzExNUYzOTc1OTVFNEZGRjNCRDgxRThFODM3QQotOjEwMjcwMDAwRjAxOTM4RkUyNjE4OUZBQzY3RjNEOTAxRjc5MEYwNjBGNgotOjEwMjcxMDAwRUZGOTFFMDUzRUQxOThDRTdFRjcxMUUyRkE0MEE3RTkwNwotOjEwMjcyMDAwMUFCRkVBOEI1RTZGNDdCOTdDOTM5MzFGMzk1RjgzODUyRAotOjEwMjczMDAwQzFGMTZBNTUxRkZCN0RBQjM3QTU4NDRFNzYyMTY5MzYwMgotOjEwMjc0MDAwQzI3QTFGNEE3NDI4MTBDRjZEQUE2NUY3NDkwNkQyN0M1OQotOjEwMjc1MDAwMEZDMzNFRjEwNkU1NDA4ODk2OTcxMzhGODlGMTM3Q0Y3NgotOjEwMjc2MDAwNzY5OEE3QjYyRjhERUFCRTM0NUFERUM3N0MzNkY4ODMzQQotOjEwMjc3MDAwN0I0RTQ2QzBBMzRGQ0Y0N0EzRDczRkJDMkY4MzE5RjA1MgotOjEwMjc4MDAwQ0M4MDdCNTRCMjYxOURGMjQ2M0VDNjdBODhEMEJDMjk4QgotOjEwMjc5MDAwRDI0RkZGRDBCN0ZBRTkwOUYzQjdDODY2RjU1RTk0RjBGNwotOjEwMjdBMDAwOTI0ODdGNUM4N0JERjk5MTQ4M0I5OTlBNjU3ODlGRDFBMwotOjEwMjdCMDAwQTFCNjFDMTIwQkVGMzQzREU5MTBBN0ZBQjVBOERFMEI0OQotOjEwMjdDMDAwRkFDMEU3MDk3RjQ1RkQ4NDUyOENENzk4MDk3RUFERjlBMAotOjEwMjdEMDAwQThDNzcwMjY4QjA4RjFFQkY0REE3NEM0RDcyRDU0MkZGOAotOjEwMjdFMDAwMDEzRkJCNTIxMUM4NDY3RkY5NEU5RUMwRkQwM0MzNzAyNgotOjEwMjdGMDAwQTAzMzcxMEZFM0U3RjFDOUNDMEU0QzFCODI4NzgyN0NCQQotOjEwMjgwMDAwRDQ2NEUwNjJFQTU3QzcyNzFCRDQ3QjUwRDlGOUQyNDY3QgotOjEwMjgxMDAwOEI5OUU1N0ZBQUJGNEJBMUU1QjEzNDVBOEFENjM3RTMzRAotOjEwMjgyMDAwRkEyQzhDN0U3NEZCMzQyMkFGNDU5RjI3Njc0OTQzRkQwOQotOjEwMjgzMDAwNDI5QzQyNjQ5MDg3MjNGMzYwRjQ3NjgyODJFQkY4RDE2NQotOjEwMjg0MDAwNTA3QzgxMzBGRDY3QUQxREY1OUYxRkE5RjEwNTZFQzE1QwotOjEwMjg1MDAwMTdCODNGQzkxNEJGQ0MyRTg4MjM0ODFDRDgyQkM5QTU1NAotOjEwMjg2MDAwODcwNTMyNjlGODc3MjRFMUY3OTdDMDlGRjU3Qzk2RUZFQQotOjEwMjg3MDAwOTNDOTExRjFGODM3QTczRDgxNzkyMTQ3MEMyQzBFQUE5NQotOjEwMjg4MDAwODdDRjU3NDNGMDA5NjFCRTZBQTNDNkFGRjRFQjhGMzMxRAotOjEwMjg5MDAwRkZGRTM0RUY1RjYxQkM4RkI5QzEzMkE4RDRFMjUzNTQ1QwotOjEwMjhBMDAwRUNCQkExQkZGRjBCOEY5MjM0QkYwMDgwMDAwMDAwMDA4MwotOjEwMjhCMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJFNTdEMDk3QzU0NDVEQgotOjEwMjhDMDAwQjY3N0REQkVCRDI1RTkyNDlEODU5MDEwOTYwRTNCMTI5RQotOjEwMjhEMDAwQjAzQjIxNjE4NzI2NDA4NjUxQzAwMEEyQTAwODM3MTA3NgotOjEwMjhFMDAwRDZBQzgyQ0VBMEUzOTgwRTAxNDQwNzlEMzhBMjMyOEE2RQotOjEwMjhGMDAwREEyMDIwMjgzMDhEMDJBMjQ2QTcwNTQ0RkM3NDM0NkVFRAotOjEwMjkwMDAwRTNGQTk4QzQwNTUxQjYxODQ0NzE5RTZGRkNDRUZGRDQwQgotOjEwMjkxMDAwQkRBNDZGMTM0NjdDQ0JFRjM3RUZGQkYwMzc1MzM5QjdDRAotOjEwMjkyMDAwRUFERUFBM0FFN0Q0RDlFQTU0NzU5MjNCNkI1NDkyNDc0RgotOjEwMjkzMDAwMDhGMUMzOEYzRkZFOTgyRkM0OTVGNEE3RTgyNjQ0NjM5RgotOjEwMjk0MDAwMzdDREVFQ0QxM0UyNkE1MTM0RDZBQTA4OTEzQzRFQjM4RQotOjEwMjk1MDAwNjkyRTIxQzZBQUY0N0YwMzg0NjhEOUE2MDQxREY0N0NERAotOjEwMjk2MDAwOEMzRkM2MjI1Mjg1QTgzQzY0MEIwNjA5NUVGQzhBMkE2RAotOjEwMjk3MDAwMDAyRjdFNDgwRDBBODI1Qjg0Nzc2RDIzREEwNzFDRUVGOAotOjEwMjk4MDAwMDA5NUY3QzdGNUZGRkQzMDJBM0Y3REM4RTY3NUEwREY0QgotOjEwMjk5MDAwODBGRkFEREVENDZGMDlGQTI1QjhENzVBOEJGMDM4MDUyMQotOjEwMjlBMDAwRkZGQjkxRkVENzI3MTgyQjNDQkQ1QkUxQkU1QjkyNEQzMAotOjEwMjlCMDAwNzBCRjUwMDc1M0ZCNEJGNzc2MzVENUZCQzI5Nzk4RUFBQgotOjEwMjlDMDAwNzMwRkU1OThFMEJDODYyMUE2RjYwM0RGMkYzMEMxODNBNAotOjEwMjlEMDAwMUIyRjMzQjUxRjdBNzRCMjA5MUVERTdDOERBOUZEQzg4QQotOjEwMjlFMDAwQjNCMzRERjVBNTA5ODUwNzk3RDI3QzBGQTZBQjQyMTk2NQotOjEwMjlGMDAwMjRDNDI4NTE2QTZBNUZBQTk2RDk4NTg1RkVBOEIzN0Q0QQotOjEwMkEwMDAwRDI0OEVGNTVEMTdGM0Y3NjI1NTg5RDYxMDU5RUNGRUM4QQotOjEwMkExMDAwNTU0NDRBOTYxMEYzRDdDQTdBRTNCRDA1RjU3N0FGQ0M5MwotOjEwMkEyMDAwQTQ3MjYxRDBGQ0JDNTQ1ODVCNjE3QTZGRTlDNzBCREZCQwotOjEwMkEzMDAwMzgxMEQxNUZBRkQ0NjI0QjEyOTVBM0JDRjFBOTQ3RkEwRAotOjEwMkE0MDAwNjJDMjYyRTA4RjJBRDNENTFCMDY5RERFNTFCRDBFNDlCRQotOjEwMkE1MDAwMEFBNkYzRTJFRDRBRjAwRUEyNjM0RkQxRTM3RUQwOEREOQotOjEwMkE2MDAwRTgyQzgyMUVEMDU1RDZCN0FDNTM4MzAxRUFFN0JCRUEwNwotOjEwMkE3MDAwMDU2RjFDQjAxMTdDMjg3NzZEMjNEMTdGN0U4REMzQUQ4RgotOjEwMkE4MDAwNTJCRDIzREQ0Q0NGMTg4Rjk5OUU3MUJEQ0RGNDhDRjdDQwotOjEwMkE5MDAwOUFFOTk5MzhDODRDQ0YyNEJGOTk5RTI5RTNDQ0Y0NkNBRAotOjEwMkFBMDAwNTc2NEE2NjdGQjY5NjY3QTY2Njg2NjdBNjYyRTMwRDNENQotOjEwMkFCMDAwQjM1Mzk1OTk5RTVEOTY5QUU5OTkxNTU4NjRBQThGRTY0NQotOjEwMkFDMDAwREY2RUFCMTY5QkVBRUY4RjdCRTE4ODQ2Nzg0OEVEQTA3RQotOjEwMkFEMDAwQkExRDZFMjE3QUQ0REQ2Q0ZBOUU1MEM3REI1NzEwQkU0QQotOjEwMkFFMDAwNEEzMzU1QTFCQTVCRjkyMDQwRkYzMTFGODgyQTVFNUY0NwotOjEwMkFGMDAwRjM4ODBGMUUyMDNBOUMxMUFCMEY2NjdBQ0VFNzg3OEFDNwotOjEwMkIwMDAwQkQ3N0RCQjEzRTdGMkUzRjJDOEJFMjAzRTJCQjQ0N0NFMgotOjEwMkIxMDAwRTc0N0ZDMUI3OTdFNjlEMEY5MEFBQjdGOTVCNzlEMTAxQQotOjEwMkIyMDAwMEY3QUI1REZBMTlDRDZFQkVCQ0U1NjkyMUJBMkE4QjhDQwotOjEwMkIzMDAwNTc1MUJDMTAyRUQxM0MxM0ZDNTQyMTEyQkM3N0EwNzQwOQotOjEwMkI0MDAwN0U5QzA1N0VDMTNGNDcwNkZEOUY1Rjc0QjcxMkRFMTQ3MQotOjEwMkI1MDAwMUQ2RjYyQUZFRDc4QTMzMTJFOUFCNzUyRkY1RTE2RTY3NQotOjEwMkI2MDAwQkQ4RTk4NTE0NUZCODkyMTQ1RDBGODNBOEE4NjBDQzgxQwotOjEwMkI3MDAwQTcwQzUxQTVBMDRDMTdERTU1MkFDNkVERTk5NDg0NzkxRgotOjEwMkI4MDAwRTBDRjFGMzM5OTMwOTYzMEJERkY0MTg5OERGOTc3NTlEOQotOjEwMkI5MDAwNUNGRjZERTBDQkY3NkIyNTVGOUU0NjkzQzE0MjVDMjNFMwotOjEwMkJBMDAwNDIzNjdDRTc4M0Q4MDczQkExQkYwMjQyQjgzMjE4OTU3MgotOjEwMkJCMDAwNzVENzYxRkMzMzMwN0VBRjEwRDc4OTQ2MUIzRTNFNEI0NAotOjEwMkJDMDAwMDgzQkNBNjJFMUUxNzI4RUYwREJGMUZFNUMxMTVFODlDNgotOjEwMkJEMDAwQzk3Qzk0QUE2RDA3M0UyQTU0QUQ0QjFBRjBEMUIxQTExRAotOjEwMkJFMDAwNzM1MTNGMkE1RjRCQzFBMDJGODg1NzUwNUNEMDdCNkYzOQotOjEwMkJGMDAwRTM0RjZBRjc4OUI3NjgzN0JFMzNEQUU5QjlFMTVFQzJGNQotOjEwMkMwMDAwQ0YzRThCNTgxMDIyQkE4OEYxMjkzQzZFNjEyREVBMzdFRAotOjEwMkMxMDAwQjk1RjVCREY1OTQ2NDI0RDg4RTcxNDREMDNCRTAzMTk4NwotOjEwMkMyMDAwNEVFRjI2MjAzOTNERjRBNDQyRjNCQjI0RDk5MzczNDdEOQotOjEwMkMzMDAwNTI2QkZCMDM1RTBCQjcyN0Q2MEIyOEQ0RkVGMTVEQjFCOAotOjEwMkM0MDAwOENBRkJFRURENzI3NjM1RTNGQjdERjA2QUZGRjU1OEM3NQotOjEwMkM1MDAwREI2OEZGNTNGM0I1REJCRDhCNkVBNDdFOUIxNTUxQjVDRQotOjEwMkM2MDAwODEwNkYxOEU0RTk3NEMwN0YxMEY4RDM3NTM0REYwRDZGQwotOjEwMkM3MDAwODI2RTcxMzMwRkI2MjMzQzJDNjlBRjdEMDBCRDM0RURGRAotOjEwMkM4MDAwRUE1RkFFMDRBQ0VDNEJGMTJDQTZGMTlEMkE2RUNDQzdFQQotOjEwMkM5MDAwNzgwOUZGRkY4NkZBMzIyN0UxOUZBNjc2QTI5M0Q2MkIwQQotOjEwMkNBMDAwMTE0QzUxMjRGMTRGN0ZGNDJCNkE3M0ZDNzIzQzA3NzQ3MgotOjEwMkNCMDAwRkNEN0I3RDc4RUUwM0JGQjJDMEQ5REJEQTBBM0I1MjE2MwotOjEwMkNDMDAwOUZFOUU4OTZGMzNBNjE5Nzc4QjkxMDFFMEFFMjNBQ0Q4NwotOjEwMkNEMDAwMDBGRTRCMUMwRUFGNEFGODJDNTBFNDc3M0Y0QjlDMzU1RQotOjEwMkNFMDAwQjM5MkM2M0RENzUyOTQxNjU2NERFM0ZFMDY3ODJCNzMyOQotOjEwMkNGMDAwMTU3N0M5QzBCODZERkFCODlERUQ3NEJDN0JCMkIxQUVBMgotOjEwMkQwMDAwMkUzNEVFNUE3QzlGRjAxNEY4QUQxMkRDOTQ4NUU3RTE4NgotOjEwMkQxMDAwQUQ4MDlGMTY2RUY3MUQzRTVBNzMxNkE5OTc5QjZCOTQ1NAotOjEwMkQyMDAwRTAwNkFBN0Y0M0M3RjM0MzM2NkE4Nzc1RTkxNEM5MzVCRAotOjEwMkQzMDAwMzRCRTJCODZBRjU4OEY3NkJGRDM5QzNDRUU0REMyN0IwMgotOjEwMkQ0MDAwQzk5QTJDRDA0M0IwQkNDRkJDNEQwOUQ2MTIzQzVCNzg5RAotOjEwMkQ1MDAwOTlFRjRCNDQ1MUU3NURCMDBGN0M1QUJDOEZDNkYxQjc3OQotOjEwMkQ2MDAwQjg3RkU0NjU1OTc4MTlFN0JENDNERkQ5QjNBQ0JERjc0NwotOjEwMkQ3MDAwMEU0MEMzMkU4RUZGN0I5M0U0NDBGRjkzMjc0OEJEMzM2NAotOjEwMkQ4MDAwNTdDN0RCOTVBMjg4RDdFOTU1QTI4QTRCNUFGMDI3MkE2NAotOjEwMkQ5MDAwQThERDM0RkEwQkVCOTNFMDdFMThERjc0QzBCRUQ2NzU2NQotOjEwMkRBMDAwM0Q0MzM0NzAzOTUzQjg5RjZGQTQ2RkJENTVEM0ZFQzZGMQotOjEwMkRCMDAwOUJBOENENjQ0QjczNjdCQjhBNzU0QUVCMzY4QkYxREZGQQotOjEwMkRDMDAwMURFM0ZGNzZFQzlCODcxNUUwRkQxNjkyNjNBMEY3OUE1MgotOjEwMkREMDAwNzYxN0M1Qzc5MzE0ODk0RjVBQjdEOUJFM0M1RUI3MDM1RgotOjEwMkRFMDAwN0M5Njg4RjUzM0E2OURFNDNGQUJCQkM3M0Y1QjNGMjQ5MQotOjEwMkRGMDAwMTgxMzMyRDI4NEY4ODUxNDg1RTJGRUQzMDkyMjk1RTZCMQotOjEwMkUwMDAwRDlEMDU1MEQzQUIyQTBBNzZGQjFFRUEyNzkzNjkwM0Q1OAotOjEwMkUxMDAwRTFDMEJDRkRDNTFENEU1MUZEMzhEMkI3Nzc0OEY5MUE0NwotOjEwMkUyMDAwMUYyMDc4QTI1RjE1NzczMDFGMzQyRTVGNDhDRjVGMUJCRAotOjEwMkUzMDAwNDRGNUQ0RkVFNTFBMTEzRjgwRTA5NzdEMzY2RjJERjEwMQotOjEwMkU0MDAwRTFEOEIzREE4MTQ0MkEyNzkyREMwRjUzRUJDQkQyRUZERgotOjEwMkU1MDAwMUUwM0ZCNjA1QzQ3RDIyMzExN0FFMkIyRUU2Njk4MTYzRAotOjEwMkU2MDAwNDI0N0QwRTk3MjFEREZFM0IzQ0Q3QTY3MjJGNDhFRDFGOQotOjEwMkU3MDAwQkUwREJENDNGMjU1MDU3RTI3RkI3NEZENzM4OUI4MDQ3MgotOjEwMkU4MDAwRkE2NzdGRjU1RUYxMjlFOTE3NDMwRjhEQTYxOTg2QjIxRgotOjEwMkU5MDAwMkZBQzg3NjJFQzA1RDc4MDZFNDQ3RjNCRDZDNzZDMkI4NgotOjEwMkVBMDAwQjUwN0JFREQ1QTg3NDkxMUVCNjU2RkJFQzI3NEYyOTA1QgotOjEwMkVCMDAwRTJCMUQwRkNERjM4QTQwNjgxMUZBQjNGM0MxNEY4NUJDNQotOjEwMkVDMDAwRkNCQ0MyN0NGQTA3OUYzNjE3REYzQjY5NkI5QzA3QkVEMAotOjEwMkVEMDAwNjkxODk2OUIyOEE4RkY0RkFBNjkyMEJENjhGRDU2M0IzQwotOjEwMkVFMDAwODU5RkQ2QzI5MTZBMzdDMzQ3QUJEM0I5RkNBQURBQzM3MAotOjEwMkVGMDAwRTVGMUVBREU1QzdGQjJEQUNCRjBCM0JFQTIwQUYwQzM0MgotOjEwMkYwMDAwRUM1NTVGNUJCNTZDRjQ1RkM1RjZEMTkyMUFBQjAwQkRCMgotOjEwMkYxMDAwOTZDNDJGOTZCMENERTk4NjEwQkVBREQzNDE0QjFDQzFFRgotOjEwMkYyMDAwQjcwNTE1MkZGNEUyQzI1REMxOTU3MTM0QUVEMjdBQkZGOAotOjEwMkYzMDAwREQwNUY5RDcyOTc5QjQwQkVERUY1NTk4RUJFNzFEQUExQwotOjEwMkY0MDAwM0E4OEU5OUU3Q0U3OTNBQjI2ODhENkY5OTY5RjU1ODQwQwotOjEwMkY1MDAwNDY0QkFFNUI5RUZGQjc5OENGMTdENTgzNzg1QzVGNTYyNAotOjEwMkY2MDAwRkI3OTVDRkVGQUE2ODMyOUY0QkQ2M0Q1RTMxODdFQzcxRQotOjEwMkY3MDAwNTc1NDhCNzY3RUYxMzVEQjExMTNCNjM1NTk2MTY3OEM2QQotOjEwMkY4MDAwRjUyQjdFRDA3OTg0NUYwNDgzODRBRkI1MzZBOTU3RDZGQwotOjEwMkY5MDAwOTI1RTgxMUMxOEQ1NkZGMjQzMzcwOEM4N0RFRDRFQ0M4OAotOjEwMkZBMDAwNzM2QUYyOUNCMUIwNTcyNzBFMkE2NkZCRjVFQTFGMDQzQwotOjEwMkZCMDAwREJBRjA2RkZGRkQ0M0FGMjg4ODY5Mzk5RDRERjg5ODA4RAotOjEwMkZDMDAwQzQ0RkNCQUVCNzE5NkVCMTEyN0U2OEM2MkZFQzJBMkQ1NgotOjEwMkZEMDAwMTU2NDFGQjQ5QzdENEIzRUE3NzY2Q0E3RUU5NkVEMTY0QwotOjEwMkZFMDAwREI2NEJCQzVCQjdGOTdDQ0NGMTVBNTU5NDRFOEJCNjM1OQotOjEwMkZGMDAwNDQ0NzQxNzg4ODczNjYzRUY0MTlFMUU3RDhGNjVGQTc0NQotOjEwMzAwMDAwNkIxMUZDNzUyQzM5RjRFRDg3OTA5M0ZGNjZGMTZFNjBCRgotOjEwMzAxMDAwM0VENTNFN0QxNjcyNzRCOTlCRTVDQzQ5NUJFOEM4MDM4QQotOjEwMzAyMDAwOTBCMzlENDhBRjcyN0Q1NURDNjRFMkIzMEFCQkQwOTg4MwotOjEwMzAzMDAwRUY4NEQ2MTdGMEIxNTgzMUFCQzgyNUZCRjNGNDkyQ0YyQgotOjEwMzA0MDAwQzE4RjNENzdEQ0RGRjUzNzlFRDZGRUI2ODRFNjdFRjg4RAotOjEwMzA1MDAwMDBFOEIwRTNBMzg0NEI2OEJDN0Q1NDExNTIzMTdGMjE1QQotOjEwMzA2MDAwQzcxMUQ4MThDQkZEOTQzRDc5N0JCMjlGRTBBRDhBNjgzQgotOjEwMzA3MDAwNTE1OTRFMDQ1OTVFRkNDRTI2QTZBMURGREU4QUQ1QkU4QwotOjEwMzA4MDAwMzQ5OUZDQUEzQjlGQ0VDNEJDN0JBOUEyNEFBNTc1Mzk0MgotOjEwMzA5MDAwRTdBRTY3MzI5RkExRjcxRTIzNTlBNEQyRjg5RkIzNzlGOAotOjEwMzBBMDAwNEZFRUM1NzcxRkEyRjE1M0JGOEZERDU5OUUwMzc5NThBQwotOjEwMzBCMDAwRjI4Nzg1OTcwMDBGN0Y4MUQwMjIzQTNDRjFGNDRFQjYxQgotOjEwMzBDMDAwMTc4ODI3QkRBMzQ5QUVGNTVCRjNFMkIyMEM2QTdGRTkyRQotOjEwMzBEMDAwQkEyNjRCMDcyQTdEMUI5NTVBOTRBNURCNzZCRTU1NDMyRAotOjEwMzBFMDAwRkRFNUJBMkQ1NUIwNUZERkYyNzk3ODVDMzlBMUY1MUJBQgotOjEwMzBGMDAwMTRFODgxMUYxRUVEODA3NTk5QkRFNkVCODIwRUUyQzJEOQotOjEwMzEwMDAwNzZDNjEzOURERjZGMjlGNkIwNUNFMEY3NzdENzRGNzk2RAotOjEwMzExMDAwRkI1QTAxM0I4NjJDMTg4Q0I3RDhFRTY1QkQ0NkQzQjY1QQotOjEwMzEyMDAwMDEzRkJCQkFBREM3RkI3QjJDMDFENjU3ODFEOUQyQ0VBQwotOjEwMzEzMDAwMzk1MTE0RjgyM0U2NUY0RUVEMDMwNDk3RkIxQTlBNkU5QgotOjEwMzE0MDAwQTJGQUYyQTRBRTIyNDBGMzNGMUE1QzMyMURGNTAzMTUzOQotOjEwMzE1MDAwRTEwNjdFMkE3NkRENUJEODgxRTAxM0MzODQ1N0ExRkVBOQotOjEwMzE2MDAwMTdFQzNFNURDOEZBQjAxM0Q5RUFGOERFQUVEQUI0NkJGQwotOjEwMzE3MDAwQTAwRkIzMEJGMjU0QUEyRjUyNDNEQzlGQTg5NEZENTUyNQotOjEwMzE4MDAwRDZFRjc0MDIyNkQ0MjdBQkM0Njc0OUY1QTNGNjY3N0E1NQotOjEwMzE5MDAwNUFFOTYzNjlCQzJCQ0I0QURGNkI0N0ZBMTRFMzVEOUJBQQotOjEwMzFBMDAwMTVDOEE4NzJCNUVBREY2NDVGRDE2OUFDMUJFMUJFQTdBMAotOjEwMzFCMDAwMThERkY5OUNDNjA1RkJFQzYyRjVBNURENTJCNTkwQzc5QQotOjEwMzFDMDAwOTMyRURDODFDMUFEREZFRDY0MDkyRkM0M0M2ODc1Qjg3NgotOjEwMzFEMDAwMDNGNDlENERFRTg2RTlEQzhFRTBERjczQkY5QTlBOTM4RgotOjEwMzFFMDAwMDdGQjhBQjA5RTJBRjU3QjJERkE3NTRGRTkwQzdBNURCNAotOjEwMzFGMDAwNkNGRkY3QzdGRDgzRURCNDRBNEI4MkQ3MzFBMEQ1Q0UyMwotOjEwMzIwMDAwOTk5NjUyRkI3QzIzRDEyQkQ4NUU0QkNDNjkwN0ZCNTg5NwotOjEwMzIxMDAwREFDOUMyRUFGNTQwRUU1N0I3RjdCQjczRDg0RTIzM0Q4MwotOjEwMzIyMDAwNkM2MUZEOUI5QTEzNjEzNzlGQjNEQjlDMTdBNzdGNDNBQgotOjEwMzIzMDAwRURGRDFERjBCRDhCNkRFRkQxRTMxMkU3RTRGMDk5MUNCRAotOjEwMzI0MDAwOTMxQ0FFOERCNzBCMUYzREFGNURFM0UwMzg4NjM4NjA1MQotOjEwMzI1MDAwMjkzQjQ4RkVDQTcwN0NDMkQyRkFCRDI1RjEzOUVEQTFFNgotOjEwMzI2MDAwMUY2QTg1NjgxMzVGMkZEMEZBRDcwOEI3NjFEMjFCMUE3RgotOjEwMzI3MDAwQzk4MTExNjc5QjU1OERFNTQ0QzNGRUM0MDE5MEI3QzI1NwotOjEwMzI4MDAwMUZFRjQxRENDMDIyQjQwOEZEMThGRDFEQTJENzYwQ0NBMQotOjEwMzI5MDAwNkY5NDg4MTM1QTg0OUVGNThCMjQzQkQ2QUQ3MDI1NUZCRQotOjEwMzJBMDAwRTRCQ0MzOEY5QUY1Q0ZCRTQ3MjNFNzNEQUNFNUZEMzhCQwotOjEwMzJCMDAwOTg2MDg0OEZGNjI4MkYzNEFGRTdGNTc5RkQxOUYzQTJEMwotOjEwMzJDMDAwNzI2NzdFRDFFNUEwREZGMDZGREM1NkNDNkZCODc1NTIyNwotOjEwMzJEMDAwNjc1RjU3MUVGNzI0M0MxRkYxOERDNTNDRUUxRjYyNEQwMgotOjEwMzJFMDAwRjBDNThFRkY0Njg1MUMzQkYwRjFEN0Y2MjBENjVGM0QzQQotOjEwMzJGMDAwNkMwNTlBNDdGREMyRUMyMEQ2RkIxRUJCMDgzOEUxRjdFRgotOjEwMzMwMDAwNENCNkIzMUQ1QzFGMUY4ODg3NUNBRDU3REMyMUM0OUY4MgotOjEwMzMxMDAwOUVCMzM1NEM5NzdFOTE3MDZGRjI4MTdGNUY3RjEwRkM3QQotOjEwMzMyMDAwN0Y0RDhCNUQ0MTNDQUI4MzQzMUM4MTdEMjVENDQ0QjFGMwotOjEwMzMzMDAwMjkzNUUyRkJFRERDMUNFNzUwQTEzNzcyMDkxRUFDM0ZEQQotOjEwMzM0MDAwOUY2RUU3RTdCNTM2QzE3QTMyMzAzRDk2QzdCNTI2QTlGQwotOjEwMzM1MDAwRUFENTdFNTRCRkE2MjZEMzRCMjMxN0VGOEJFMEFBQUU0NwotOjEwMzM2MDAwQThCRjQ1NjU3OTNFRDRCMjYxRDM3REYwN0IyNkE1QjM3NQotOjEwMzM3MDAwOUU1OTkzMTRDRUFDNDRGQjg1OTc3ODAzQzQwRjdCRkUxMwotOjEwMzM4MDAwQTFCMkZFNThFM0YzNjcyNEJCMjAwNzQ5Q0UxMzlERDdCMwotOjEwMzM5MDAwNENGMjY3QzRBNkEyNENCMzYwQkUxRDQ4Q0VGM0YzMkMxQQotOjEwMzNBMDAwNkE0N0U1ODczNkQ5RUUwMzlENkU4NEU5MENDOERCMDdEMgotOjEwMzNCMDAwNEE3QTA4OTYzRjM5MDU3N0YwM0FBMTBBMjdGMUYzNTQ4MwotOjEwMzNDMDAwNDkwMjMxN0RFRUJERTIyNkI0RDNENEEwOUEwNUJDREMxRgotOjEwMzNEMDAwNzU2NzRGODJBRjk5QURCQTExQTc5QkJBMjBBNjQ5RTk4QwotOjEwMzNFMDAwNEZBNUE2ODYxRDA5RjRDMjk1NjNGRDkxRkVGQURBMUM2RAotOjEwMzNGMDAwRkYxREEwNzM3OUE4NEZCN0NGMjJGODc4RkFEQzFFQkY2MwotOjEwMzQwMDAwODI3Q0Y4ODRGQzY4RjhERDc3QTQ2OTdGRTBGRUY3RkEzNwotOjEwMzQxMDAwQjhERDVFMzI2RTdFODQ5RTcwN0FGQUIzQkQ1RDYyRjg2RQotOjEwMzQyMDAwOTlFMTM5QzBFRjBCQ0Q0RUI2NjMyRkM0MEY0Mjc4OURBMgotOjEwMzQzMDAwOTdEMEY3RUZCMzg4MTBGOEI5OEJBRUQ3NkIxMTAwMDBCNwotOjEwMzQ0MDAwOUQ0MzMxQ0MwN0UzMjYzQkZEMUNBRjcyNTkzNkMwOEUzRAotOjEwMzQ1MDAwN0U4NEU4MDVGRDE2RDhFRDYwN0E5MUEwNjRGQURERjc2OAotOjEwMzQ2MDAwNDIyN0Q2NEJCMzc0Mzk1NjNCMkQ5NkRGQUJERDY5MEI0MwotOjEwMzQ3MDAwNUE0MDY3MjVCODc1MzNERTdCM0U4NkY1Njc5OTVEQjBBNwotOjEwMzQ4MDAwQkY1MkY2NkM1RkU2ODMzRDc2N0ZENjBBRjRGQjgyNDMzQgotOjEwMzQ5MDAwRUFFRDA0NEYyMkQ3RkY5RjE0ODFGQUU3NzQ3RDVEMTY5MQotOjEwMzRBMDAwMUJFRTk5NDQ3NEVBREE0RTdCMEE3ODIzQkVBQkUyRTc1RQotOjEwMzRCMDAwNzZGOUZDNzBCMDYwM0RENkE1MjBGQjI2NkUwNEMxQzIzMwotOjEwMzRDMDAwQkYxRUYyMkE0MDc2RDAyNkFGQTQxRkM2QTVENTc2REE1NQotOjEwMzREMDAwODBGMTZBMzQwRUQwNTlEQ0FDRjI3QzBFRDM1QUM2RkNCMwotOjEwMzRFMDAwMEU1Nzc1RTI3MTI5OTNDNzY1Q0NBNUZBNEYxN0M3NzFCRQotOjEwMzRGMDAwRENGNTcwRDFDMTMzQjAwMzBFQTdBQkJDRUU0OTQyRERBMQotOjEwMzUwMDAwMzk5MEVBNDlFNzM2REM0MTcwRTVDMjRGNUUxRjQ4NEYwQgotOjEwMzUxMDAwMkI2QTNGRThCQ0Q3RDM4QUY3MTlDQkNBQzcwQkUyODMyMwotOjEwMzUyMDAwMTk4QjZFOTkyODEyMkVCQzVFNjc5NDM5RTA1M0I2QUVBMwotOjEwMzUzMDAwNkY2MTg3NzMyNzYxOTJFQjREMzlGRTA2RjBDMTdGRTQxRQotOjEwMzU0MDAwNjg2RkEzQUNDQzI2N0I5QkY4RThBNEJERTE2MUM0NTVCMQotOjEwMzU1MDAwOEU3QUI0QkYwMjJGQTc5RUY5NjIzMzlFMEI2QjczNEYxNgotOjEwMzU2MDAwRTYwRjY3NjMyMUUyMzI2NTE2MTk1N0JBMkI1N0ZCMzgwRAotOjEwMzU3MDAwODdGNTZDMDJEM0FGMzJFNDYwRkFDNTY1Mzc0OEI5Nzg5NQotOjEwMzU4MDAwQ0JDNUU5ODNBRkVBMzdFRDUxQTg5RkQyRDhGQTBBMkUwRQotOjEwMzU5MDAwRDU2MDdGRThBQjYzNEEzODQxRTlDNkY4RDVCMEFFOEU1NgotOjEwMzVBMDAwQkJDMzA5QTA4RjY2OTFGNjVFRTk5NkU4NzlEMjUwRDM0NQotOjEwMzVCMDAwMTA3NzEzNDJGQUE5MjFGQjUwMUFENzIyMTJCRDBGQjg3NwotOjEwMzVDMDAwRjFEQ0RFREEzRUFCOTU4RUY0MURBNkEzNzA3RDNDRjNGNAotOjEwMzVEMDAwMzc2OEJGQjU0RkNFMUQ4NEY3RDJBNEJENzcwRENEM0E2NQotOjEwMzVFMDAwMUY3RkQxQjAzMTlGRjNDN0EzQUY5M0EyNzAwMkQ2Qzk5QQotOjEwMzVGMDAwMzE0NUFFOTNFMzQyQ0FBRkMwOTYxODNENUUyMEM3NzExNQotOjEwMzYwMDAwRjI5OUY2M0M4RTM0N0QxRDlENTRGNDc2NUIxREIyMURGRgotOjEwMzYxMDAwRjExRUVDOTlEMjNGNDlCRUJCQ0ZFNjY1QkQxOTIwN0RCNgotOjEwMzYyMDAwMDI3OTU5OUEyMkUxNTI0N0JBMUJGNjU2MDczNTYwODk0QQotOjEwMzYzMDAwMDU1RjU2MEI1RTJGMzQzNjVFOTdDNzc2NjRGMkZCODZDNQotOjEwMzY0MDAwNUMxMzQ1NDI0MEFFOTVFRUM4RDgyMEVEM0FERDZGQzYxQQotOjEwMzY1MDAwMDRBOEZEQTIyNzY0N0Y4MDIxRkZCRjdBM0M1M0VGNUY1RgotOjEwMzY2MDAwQUVBNzY4QkE0NkUzQTE1QkFFOEM3M0Q1QzZFN0I3RkZEOQotOjEwMzY3MDAwNjdGMUNEREVFOTFGQUQ4MzA4QkFDRjI2RDc3NTIwNUU4RQotOjEwMzY4MDAwRUExMUIyNUJEMjI3RjVDM0ZFODREREY0REQ5M0YxRjZENwotOjEwMzY5MDAwNTk3RTE3RjYyOUNDQ0Y4REVGNUQ5QUFCNzBCRjVEQTIzNgotOjEwMzZBMDAwRThERTQxNkQ3RTExRjY5Mjc4NTRCMDlDODgxRTQ3N0UwQwotOjEwMzZCMDAwQUVGNDU3MUY3RkZDMUM5RDU1NDk3NzYyMjQ4M0JGM0NBNQotOjEwMzZDMDAwOEMzRjYxMDM3RDNFQjAxQjc0QkMyMTkzRTQ3QTI5NzA2QQotOjEwMzZEMDAwRDVCNTE1OEY3QjdDNUEyNkY0Qzg0OUMwODRFRjNENDk4NwotOjEwMzZFMDAwMDQ2N0MzREU5MkZBQzM4MDBEN0E0NEYzRTlCMjBGRTZCMQotOjEwMzZGMDAwNjUzNkQyRkI3MzcyQTU3RjUwMUI5M0QwNUYyNEEyRUM3QQotOjEwMzcwMDAwMUM4NDFDQTgyMUJDQTI5RUY0RTBBQ0EyNkNGOEMzRTMwQwotOjEwMzcxMDAwRUVGOUNDRDYzQTlGMjNENTdFM0ZBOUEwNzNGMEJDQjU3NQotOjEwMzcyMDAwM0UyN0Q2RTdGQzc1M0VFN0VDMDg3QUQ0NkVDOTNERTQ0NwotOjEwMzczMDAwMjFCQzFGREY2MjQ1NjQ1MkQ0NUE4Mzc3MEQ0OUM1NzM5QgotOjEwMzc0MDAwMzUxNDEwNUNFRjA0QkU4RkJCRjZCRDhFNzZGM0Q2MjUyNAotOjEwMzc1MDAwRTVBODExRjI2OUZFREFCMUZFOTIwODNBRjRERDYyQTYzQwotOjEwMzc2MDAwNEJCRjkwMTlCRTc0QUYxOTJFMjdERDhFRjlGRERDRjcyMwotOjEwMzc3MDAwN0M2MTMzOUM3QkM4MEMzRjNEQTg1OUZEMTFGQUM5NjU5QgotOjEwMzc4MDAwMDkzQTE1OTQyREVBOEY5MEVGNDEzNTA4M0ZBM0NCMkREMAotOjEwMzc5MDAwNDU1MzI2MTA3Qzc0REQxQzJGQzgzQ0ZGREQ2NUY5QTA2NQotOjEwMzdBMDAwREY4OUREQjdFRDI5QTdGNzhFMjY1QkJDRjBBRjhFODlFOAotOjEwMzdCMDAwRDA1RjI3MTAzREU2RDVERjZEQjc3QTMwNUYzMzlGRUZERQotOjEwMzdDMDAwQjFFODdDRkJCODhDMDMyRTBDOUFFQkNGOTcwRjM1N0FCRgotOjEwMzdEMDAwREM0OUY0OEVFNEFCNjhGQTUzQkY1N0Y5Njk2MDY1NEI3NgotOjEwMzdFMDAwQTdEQzAzRkI2N0MxNzg2Mjc4MUFERkUwRDBERDc2RTEwMQotOjEwMzdGMDAwQkE5ODdFMDI4QzU3NkI4MjA4QTdEM0Y4OUE2RThCRTczMwotOjEwMzgwMDAwRjhDQjkwQTVBM0M1QTdGNEJENzJBQjNCRkYzNzM0Q0Y2RgotOjEwMzgxMDAwRDk0RUM1MUQ3MEI3QzZENTlCNzY2NjU0NDA5RjZFNzI1MwotOjEwMzgyMDAwNUJCQ0U0RTMwOEY3QTBBQTgzOTkwM0UwNEY4ODkwREIzMAotOjEwMzgzMDAwOEJCOEZFQUQyQkUxRjcyRkE4NEE2MEZDMkMxNDQxOEUwQgotOjEwMzg0MDAwQ0JDRjVFRUU2ODk1OEZGNEJGOTJENTUxRTM1OTEzNTFGQgotOjEwMzg1MDAwNEZGMzU4QjBDRURDN0VEMUM2MUYxRDkxQjBFMTk3MEU1QwotOjEwMzg2MDAwQTk1RkFGNjJCRTczRjU3MUFCODE4OUFDOTc4N0U4RjE1MAotOjEwMzg3MDAwOEFDRkQwOTRGNENEMTNERDhBNzZFNEQyN0M4N0FDMTk1QwotOjEwMzg4MDAwMjVFQkFENEU1RENGRkFEOUNGMkI3N0Q5M0QyQ0NGQUMwMAotOjEwMzg5MDAwNkZBRUU0RkQxRDVBODdEMDBGODdFMkU3RkQwQUYyRUUxNgotOjEwMzhBMDAwQjQ1M0I4MUQzRUI0RDcxODNFOTIyMkZENDJERUI3QTBGNQotOjEwMzhCMDAwRjZBN0Q3MjlBQ0Q3Q0I1MzI0NUNGRUE4MTI0NDBDQjg4QQotOjEwMzhDMDAwMUM0MTVCQzA4RkM5Mzg2RDk5OEUwRkYwODkzRjYyM0VGNQotOjEwMzhEMDAwQTA1NzI0MkNFQThDRjg3ODk4RkRERjhBMkFFMTg1MUQxMAotOjEwMzhFMDAwMjA4ODhFN0UwMzZGQkMxRjE1QjYxRjg1OUUwRDI4QTFGNAotOjEwMzhGMDAwMDc3Q0IwRjdDQ0RGQTlEQ0ZCQTMyMzEyM0UxNzVGMjZDMQotOjEwMzkwMDAwRDJENUYwRjc4MzhDNDdENTJFRkM5MEUzRUFBREIxNkNBRAotOjEwMzkxMDAwQjc5MzAyODg4NTdFQjdFOUY2QjU1ODE1NkMwNzdEQjU3MwotOjEwMzkyMDAwMDZGQThBQ0ExNUJBMUQxRUI4NUJFQUFCMzU0OUZFOUU3NwotOjEwMzkzMDAwNkVENERGOURFMTA1MUVBRTUxNzRGRjE2NzY3RDEyRUM0QwotOjEwMzk0MDAwRUI3RERDNkZCM0UyNzY2RjQ4NDI3QjExODg0OTY1RkIwMwotOjEwMzk1MDAwNUFGQTA5RkY1MDU5REYzNTkzRkRCRTAxRjZCQTJGMTQwQwotOjEwMzk2MDAwQzY3OEQ2REM5QkM1RjZGQTczODZERUJCMzM0NkRBRjMzRgotOjEwMzk3MDAwRTdEQkRENkM1Rjg5N0JBNEZERjhBMUUwQkVDNTU1REQwQQotOjEwMzk4MDAwQjU5M0I5MzRCRjM5NkExMTZGNDY5NTJDRjM2N0UwQkIyNAotOjEwMzk5MDAwMjU5M0VEMTZEMDQzMkNCOEI4N0Q5MTRENTZEOTdGMzM4MQotOjEwMzlBMDAwQ0QxN0YxRkFDRjk0QTI4Mzk2NDgzQjU4RDcwRkY5MDU2QgotOjEwMzlCMDAwRkVDRDdBM0IyRkRBOTU1OERFNjQzQzk0NTg4NDFCRkU4QQotOjEwMzlDMDAwRkNBNkIzQUFCMDEyQkNBOUNFMTE1QzQ2QUY5NDc0RjVBNAotOjEwMzlEMDAwRjc1QzlDOERGNzY0N0NFQUIwNEZDQUZCQjgwMUMyMUY0QwotOjEwMzlFMDAwQTREMjM5NDA3RUQ3MzlDMDYyMkFDNTE4MTk2N0Y5MkM4QwotOjEwMzlGMDAwNDZGMkUxMEM1MTU0QzhGQjAzMUUyOUVGQTNFNzkxM0FBQwotOjEwM0EwMDAwNDBFQUJEMTI3QjgzNzkzQzFGRUY2N0JBOTBDRTczMkZEQgotOjEwM0ExMDAwMDM3RjhGOTE3NkM3NjdENzJCQUNDRjY5M0UzREREMDQxRQotOjEwM0EyMDAwRTdGRjIxODZFMzhCOUZFOUZBQzhDMDJGRjE0RjFFRTIyMgotOjEwM0EzMDAwNjg4NkRDNEFEMkY5NjVDREVEQzFBRDMxODRFRkJCNkQ0RQotOjEwM0E0MDAwQzQzN0EwMUJGMUNEQTYwMTRDNzdCNjBCRDc0QzRGNjMwMgotOjEwM0E1MDAwQkE1RkEzRDM1NURDMTlDRjc0MUI2QUIxNDgzQ0RGOTkxOAotOjEwM0E2MDAwQzE3OEE2RjZFMkVGNzg2RkFDNDdEQUYzMTdFOTg3MTE3MQotOjEwM0E3MDAwRERCMzA3RTQ5REVGOEYxOUY0MTZENjYwREUzRkRCQkZBMAotOjEwM0E4MDAwMjk3RjdBRkI5RTAwRjFGRkEyM0ZERDlCMjBBOEREOTdGNgotOjEwM0E5MDAwRDZCQTM0MkZCRDVGQjY2OTQ1ODI5RkNBQTNENjQwODI4RAotOjEwM0FBMDAwOUJGQUZGMzJBODhFMEJCNjgxRUY0NTNBQkVCMTdGQTBEQwotOjEwM0FCMDAwQTQ2MURGNTVDQUYxQUYxRUZGRjc5NTM3RDMzOEJGNTU2NAotOjEwM0FDMDAwNDQzM0U0NjNDNUFFRUY1N0RFNENGMzNCRTg3NzM2NDM0RgotOjEwM0FEMDAwOUUxRUI1MzYxNjQyRUUyRTJDNzY1NUQ1NzhCMTdFQ0Q4QgotOjEwM0FFMDAwNzFGQzQ1OEZERDlCRTY2MTdDMDczMjJERTlCQ0ZFMzMxRQotOjEwM0FGMDAwRjE1RUM1NDY5QjE3N0U1REM1M0JBQUQ3ODM3NTJGOUE5RAotOjEwM0IwMDAwNTc2MjdDRDFFRjU3ODYzRUI1MDNGRjZFOEI2OEVFMzg2NwotOjEwM0IxMDAwQjQ4RDdBRDFDODcyQkU3MkQ3RUZCRTU2MTM1MDdFRjlGQgotOjEwM0IyMDAwMjFGQzhCQ0FBOEZEODMwNUZBRkU0QUY0M0VDMjM1MDM4OAotOjEwM0IzMDAwRTI1MzhGMjA0MEFFRUY1RjEzN0UzODhGMjE0MEUzRUFERgotOjEwM0I0MDAwQzFFQzIyRTNDRUI1NUJFRkVGREYwNEJCNjFFM0FCMDk3MQotOjEwM0I1MDAwNEE3NkVCRkU4MUIxRUZEMjEyOUFGM0M4QjM5RTBCQUY1NwotOjEwM0I2MDAwQ0I5MzdBRENCODk1NkU1MjhFNzlGNkQyQzBEQTBCMDQxQwotOjEwM0I3MDAwMThCODJDQjM4NTEzNjBFRjk3QURCN0IxMUMyOURCRkVFNQotOjEwM0I4MDAwRThFNjA3QzA2RjFGMzhCQzNEM0M4MDRGREIyMTBGQ0EwMQotOjEwM0I5MDAwMTQ3RkIzQzJGMjVEMjQyOEY5QURGNDJBRERGRTc5RTE4OQotOjEwM0JBMDAwODNCMEFGMzM1NDMxOUVFOEI1RThBOTMzQjJCRDVGMzQ3QQotOjEwM0JCMDAwQzc1MEZCRDI5RDREODVGMDBGQ0EzNDU3OTVCMzBEN0E4RgotOjEwM0JDMDAwOEQwRUJENjg2Rjc0QjU0MUFGNTA1MzIxQzdBOUI2N0U0NQotOjEwM0JEMDAwQzdGNEY4RjIwNTQ1QjRDRjNBRkZGRDA1RUIzRkI3MEI0QwotOjEwM0JFMDAwRTkxRjM0QTcyNDQ5N0M0MURGNTU4NkQ0NjI3QkUyRjk4MgotOjEwM0JGMDAwRURFOUZCMTM5RjFEQzBGNTZFRjgyQjNGNDVDNzIxQzBCMwotOjEwM0MwMDAwMDVGMzdCQkM0ODgyREVGRUQwMTExQzBGRkFFRTU4OTIwMQotOjEwM0MxMDAwMjA4OEZGQkZCMDU2NDlCRTdGNjg0NTFBRUNCQzA1QjY4OAotOjEwM0MyMDAwNDA5QTlCNEJGOTdDQzFDMzM3MzIzRkNFNTdBQUQyRENCNgotOjEwM0MzMDAwRDlDQ0VGMTk5NjQxM0NERjBDQ0M3M0VFQkFBOTNDQ0YzRQotOjEwM0M0MDAwNzk0MjYzN0U1Q0YwOTA1QTE0QTRGMjhDNTU4Q0RCRDlENwotOjEwM0M1MDAwQzZCQUY5NEM1RjM3MEU3MTdEN0ZBQzkzMzNGNDI1RTgxQgotOjEwM0M2MDAwRjEyRjc0QkYzRUYwOTZGNEE3MUQ2MjcyNjJFNDdFRDIxQgotOjEwM0M3MDAwNkU1RDJFMDY0NEYwMzBGNDQwNjU4MzhERTMxNEVBOUJCQwotOjEwM0M4MDAwNjcwQUYxOUQxQkIyQUM1NUM4RjdBMEY5MDc3NDdDMjlFRgotOjEwM0M5MDAwM0Y0QUZGQzU4M0JDODc0QUZDNDVGQTc0RjQ5QjYzREI0QgotOjEwM0NBMDAwMzc2NkUzRkIyREY2RUJBOERGNkZFMDI3N0E0REVGMzFBNwotOjEwM0NCMDAwREVCRUQ4RTA4ODU1MkVBNTMyNEREQUVGRDFGMzQ4QzlFMwotOjEwM0NDMDAwMzNENkJGNzg0QjQ0RjA1M0U1OTYyRjk4OUY0NEJBMkFEOQotOjEwM0NEMDAwMTJEMzI1OENGRDBCRjc2QzU3NTUyMkUxRUQ5Qjc3M0VGNwotOjEwM0NFMDAwQjUyM0ZFMUQ0OEI1ODgxRTE4NkZDM0U3MEMwQjZGM0I0QwotOjEwM0NGMDAwMEZEQTFCREZBRkRDRUIxMEUxQzg3NUJCRjFGM0E4NzU4MQotOjEwM0QwMDAwNkRBRTE3QTI4QUYxNTkyOTEyM0REMERGNUZEODlCMEIwNwotOjEwM0QxMDAwOUY0MzNGRDRFRjI2RUE2NzFFRDk1RjYxOTM3REQ1NUM1MAotOjEwM0QyMDAwRjgyMEU0Qzk1RUJCOUJFMzBGNjQ3Rjg2MjNGOEU2RENFMgotOjEwM0QzMDAwRkVBOEJFMkYzODVGOTcwN0QxNzg4ODk2MEY4N0EzRTQzNwotOjEwM0Q0MDAwODNGMUJFNThEN0Y2N0U1NEFCNUMwODMwN0RDQjZDMjIzNQotOjEwM0Q1MDAwMDAzQkEzRUMwMzA3RUI4RkIyRUQ3MjNEMEE5MkE3M0Q0NwotOjEwM0Q2MDAwNjg3RDFDREJCNkZGQUZEN0MwOUYwREQ5NTJDNzczQUZCQwotOjEwM0Q3MDAwNjZGOUJCRTBDOUNGNzk1RTczMDhGRjMxNUVDOERGRUYzQgotOjEwM0Q4MDAwRUNGMDdGRDM0NzhCNjYwNzhERkZEODZBOUYxRDdDN0Y0MQotOjEwM0Q5MDAwREUzQUE2RTc2REFFRTNENTBBQ0JCN0ZGQUFEQzI1N0NGOQotOjEwM0RBMDAwREI2MTZGRkRENDdBOUQ3RjAxQjkxQjkzNjdDRTFCM0EwRgotOjEwM0RCMDAwMjNCMjEzODdBMkQyNUREQzg1RjcwRkEyRjA2QkUwMzU0QQotOjEwM0RDMDAwNUE4RUFFMUZFMDkxNzFFOTI4Mzk0QUZGRkUyQTIyRjA4RgotOjEwM0REMDAwMjg0NDIzRjNGMUI3MjQxN0IxMEY1N0IxRjE3QkQ2NkIwOQotOjEwM0RFMDAwODRENjY2MDdGMTcxNDVGMDZCODY1NzQwQUYzMUZDRTIyRgotOjEwM0RGMDAwOTU4ODU3OUUzRjZGMzMzRUEzRUI1RjA1RUYxMzlGMTVFQQotOjEwM0UwMDAwM0Q2MzYzQkJBMEFDNUVFNjM5RDI3QkVDNzc1NDIyNUVBNwotOjEwM0UxMDAwQ0ZBREVCMEU2NkE2NDZDMkMxMjgzODE0RDVERTFGMDUwRAotOjEwM0UyMDAwMTc0NUI1RDdBMkUwMkE1M0ZCQjJCREZCRDlDRkEyNzE4QgotOjEwM0UzMDAwOUJEQTM5OTY1RUNFN0VDOEY5NzY0NTkwRTc1MUI5RUJBQwotOjEwM0U0MDAwNkI3QjAwRkNEMUIxRDkwRUI5Njg1QjI2MDJGMUY0N0UyMAotOjEwM0U1MDAwRjNGMzJBREJCREE3M0NDRDA5QjA1MzU2QzQ0ODNCRUU3MwotOjEwM0U2MDAwOTQ1Qjg3OTMwQzU4Q0MyQUE2NzE5QzBBRjQ3NzIzQUZGNQotOjEwM0U3MDAwQTAzOTQ2QzY1QjRFMTUzNTI3MjQ0NUY4RUQ0REY1NkE0OQotOjEwM0U4MDAwODI4N0RBMzcwNkM1QjhCNkYzNjI2QTk5Q0U4REUyNDIwOAotOjEwM0U5MDAwRjVEMjlFMUJBQkZFQjA0M0U2OEI1QTg1ODNGQTZCQUMyMgotOjEwM0VBMDAwRjk2RTA3RTI0OTlGOTFGRjA0RkJBNUE0RTZFQTA0RUM0MgotOjEwM0VCMDAwQkY5Q0FBRUY3NkM1MzRGODgxQUZBODlDRjMyNTAyN0U5QgotOjEwM0VDMDAwM0JGMjI2RTY0ODUyOEFBMzIyNzBERjMwOUE5RjFBM0ZCRgotOjEwM0VEMDAwRTBFMDczRjBBRjg4NTFCMEZGNTlCMjNBQ0FCRTExNDU2NQotOjEwM0VFMDAwODk2MUY4RDM2QkEyRjMxQjgyNzZEODM3RjM0OUNGNDJBRQotOjEwM0VGMDAwMUUyRDU4NjdBRTVGNTQ3RjhDRDdDQkEyQThGNUEyRTlFMAotOjEwM0YwMDAwNzFFM0U4RjU1MjY5QUMxNzlGRjBFOUY5OTY5Q0Q3NzcxMQotOjEwM0YxMDAwRUE5MENBRkNENUIyREMyNjU2QTZDQUJDNUFFNEEzQjRDMQotOjEwM0YyMDAwRDRDQjdDOUQ5NkJEMTIxNjAxM0QwRjQ4NUZCNzA2REVDRgotOjEwM0YzMDAwOEU2MzNERjVCQUIwREQ3MjdDRjdCRkU1RkYwNkZDQjNEQQotOjEwM0Y0MDAwRTdBM0ZFMEY1Mjc5N0NDRjA3M0Q5RjAzRkNGNDdCOURENgotOjEwM0Y1MDAwM0YxMkU3QjcxRkZEQzJGNzMzNzk1QzJGMzgwNEM2NzVFRgotOjEwM0Y2MDAwRUE4NTk3M0JDM0RFMzhGNUFDODNGMzExNEUyRDczQjA3MQotOjEwM0Y3MDAwQkQxRTc4MjE5RUUzMTZBNzNBNDk3QkI4RjZGOUVGRkEwMQotOjEwM0Y4MDAwMzdCMjNFNUVDRTc0N0MyMENGMkVFREFBRkE3RjY3RkQ1RAotOjEwM0Y5MDAwRDg1MkVGRjA2MDFFOTUyRkM0RjFCQUFBN0MzNjg2Rjc4RQotOjEwM0ZBMDAwRDU0RTNERkY1RDdFNjQzQ0VFQkYzQTFGNjMxRkZFNTQ1RAotOjEwM0ZCMDAwQkM5OEY2MjRGODU3QjdGRjJCOUYxQkZDNjgwREZDRTU1NwotOjEwM0ZDMDAwNUQyRkRBRTcyMEFGRTRDRkZGRDExRkYyRjVENDkzMkZCNgotOjEwM0ZEMDAwQjJGQzNENjk2QjdDMThCMUNENEQ3OUUxMDc2QzgzMTE2MgotOjEwM0ZFMDAwRDdBMzhGNzUxMDYyNDRCRUI4MzY5MEREMTY1RTI0MUVDRQotOjEwM0ZGMDAwNEUxMTFFMzAyRkMyQ0IwMkQ4RTUxN0MyNDczREYwRDE3QgotOjEwNDAwMDAwRUU1RjExMUY1RkNGOTQ3MjZFQTBDMEJFNEYyQjVFMTQ4NwotOjEwNDAxMDAwQkY3QzFFQ0ZGMTJBOUFCRjdDRkVDMjc3RkQyMTg3N0UyRQotOjEwNDAyMDAwNkFCRTFGRkU3RjM2REZCM0ZGQjJGMzk1RkMxRUM4RjNGNgotOjEwNDAzMDAwRjAzOEEzRjlGRTdDQkU3RUZBNTcwQ0VGODhGN0YyNzhEMQotOjEwNDA0MDAwMkY3MkJEQTdFN0ZGQUJBRUY3RkYxOTdBRTdGRkNCQ0UyNAotOjEwNDA1MDAwRjdBN0U4RkQ4QTRFRUY3ODM3RjY0MTRGM0RGRjFGOURFOQotOjEwNDA2MDAwQzVDRjk4RjdENEZGQTVGMzM2RUNGOTAyRDU3QkM4NDc0NgotOjEwNDA3MDAwRUQ1RjE1QTE3N0JDNTk2Qzk1QjQ2OThGMkNEM0YzMDUwRQotOjEwNDA4MDAwODVFRTRGOERDNjVGMUVCNENGNTkxRUMyN0EyMDdCMDJDQgotOjEwNDA5MDAwN0U0Q0FEMkJFN0MwOUIwNEJGNEM3NjgyQ0FGQkIyMzI4QwotOjEwNDBBMDAwOUVGNDcyQkEyRjI4RTNCQjU1MDJGMUFDODJGN0U2MzBEQQotOjEwNDBCMDAwRkM5QUVGMTcwNzkwNTc1MkE4Q0E3OENDRkUxQUVGQzZBMQotOjEwNDBDMDAwMDY5QUM3RkUyNDhCQTc5NkUwMzExREU3N0NCNjkzRUFEQgotOjEwNDBEMDAwREQxRDU0MzdGQ0IzREE4RUI5NEU0RkM0RjhDNkI4Q0NFOAotOjEwNDBFMDAwN0VENkU1NTE3RUQyMkYzREU2RkE3MUUyQzk1NEVDRDc3NwotOjEwNDBGMDAwOERDQkI2MDk5Q0NGMjk0NEZCMDhCRjUyQ0I3N0YzM0M0QwotOjEwNDEwMDAwN0YyOUVBOTZCQjVEM0YxRjRGQTE3Q0U5NzcxMjVFNzg1RAotOjEwNDExMDAwREYyNkQwNTFENUYzRTJDQzc4MTNDMDVCMkFGMDkyQ0JFNgotOjEwNDEyMDAwRjY3QjQwNzgwRkJDNDlCMDU1QjdBRjg0QkVGRjU4RTg2NgotOjEwNDEzMDAwOENERjBDM0ZEQTIxMEFDMjQxODJDRjc4QUM1NTY4NkYyMAotOjEwNDE0MDAwMTVFNDBGQ0I3OUIyMUYxRDhEMzdBMUZCRDU1NjlEMDQwOQotOjEwNDE1MDAwNjMzQThFMEUwM0NGNzhERTI1RERGNDNFQ0YzQjFBQ0ZENwotOjEwNDE2MDAwM0YxRkFGRkIzQTJFMDE1RUQzRTNCRDQxRjA0NUM3QTcyOQotOjEwNDE3MDAwNTIxMTY3QUQyNTNDMkI0QTJCM0UwRDNDNDVFMzdEMDU5NgotOjEwNDE4MDAwOEQ1NUYyOTdDNDc3NDdBQkNGOEE3NTM2NUNCN0U3QzdEMgotOjEwNDE5MDAwNTg5MzI0RENCMTQxMkRFMkY1MTc5NDdDRkQ4REQ3MEFBQwotOjEwNDFBMDAwN0I3RTk0MkI4OUYzNDk4NTdFQ0U0MkQ1RjdDMzkxNjFGRQotOjEwNDFCMDAwQzdFMzIwRkYxNDc5Qjk1NzU4QjU3MDNFRkNFNkYxNkU5RAotOjEwNDFDMDAwNTEwMEJGQjU0MDg0MTBCRjU1RUE1RkZFMUVGRTExQ0UwMAotOjEwNDFEMDAwOTcxNEYxQkVFNkMxRjcwMUY3NzJCQUMyRjAwN0M1M0EwQgotOjEwNDFFMDAwRUJGMTczNzYzMkUyRkU1MUU3MkIyNjBFREEzOTBBRjQ1MAotOjEwNDFGMDAwOUFCRDk0OUUyMThFRTVGNjFDQzQ3QTJDQkVDN0UxMDFCRgotOjEwNDIwMDAwRkQzQTVBMUJCODlFN0MyRDc3Q0Q2MEVDNTY4NzE4OEVGMAotOjEwNDIxMDAwMkQyMTRCM0YwM0VENUUxRUM1RUQ5NzA4Qjc5Mjg0NzRDOAotOjEwNDIyMDAwQkI5MDAyRDhFNTk2Rjk2QUU0QkM3RTBCRDhCRTNDREVCMgotOjEwNDIzMDAwNTMyQkUzMjYwMkZDRDQxRDY1NTc3QzVGQjY0RjFGNDMwQQotOjEwNDI0MDAwREY0M0JFOUJEMEQ4NUU4RUVEQ0U5MTIwRDE1NTI5RTJDMgotOjEwNDI1MDAwRkRGNzJFREQ2NDVFNDRGMzBBMDdGQjNCQzVCNzc1RUE0NAotOjEwNDI2MDAwMDlCOTM0QkVDMDFDQjdDRTFEMjhGNzg3OEQzMjM4NTAyRgotOjEwNDI3MDAwQ0ExMUQ1RTI0REM3Nzc2NjJGRUZDM0ZFOTcxQTVCNTQ3QwotOjEwNDI4MDAwQkUxQjc4REMxMUM3N0M1RUJDRjJCQTA5NzlGNEZERTI5MgotOjEwNDI5MDAwMUQyOTVFMENGM0FCODkzQkYzNjVGQkU5MzdCRTRCQ0ZDMQotOjEwNDJBMDAwQjUyRDMxRkM3Q0ZGNDBBRDM5MUY3OTA2OEE2N0U2NkU3QgotOjEwNDJCMDAwN0EzMDdCRUE3RTdCM0E3NUExODUyNjlENDBEQzcxNjI2RgotOjEwNDJDMDAwNjBFN0VCRDhFNzlDNzhBNUNBRUQyN0VBRjk5RjYyNzkwOQotOjEwNDJEMDAwMUNFRjlCNEYwODdDNkQ0REE3RUY0RDIwQTcwNkY1NERCOQotOjEwNDJFMDAwMzFFRUNFRDdEM0Y4OEJGNTc4RjMwRkJBQkM1MjYzODU5NQotOjEwNDJGMDAwRjZBNDBCRTNFQUQ0QjMyQjNEOUYyMDY0M0U3NEY0QkFEQQotOjEwNDMwMDAwMUQzNDUwQjZFRjMyREFFQjQ5MDU3RTk0MThGNzg2MDE3QQotOjEwNDMxMDAwQURFREYxMUQ3Qzc3QzQ0MDE5RTc3MkU4QTUwMTEzNUU4RAotOjEwNDMyMDAwMzkyRTVFQjJDQUQxRDQyRDAxQTUyRERDOEJDQTVGMEQwQQotOjEwNDMzMDAwMkU4ODFCNDhGNUUzQkI4QUMyQjVGOEVFNERBQUQ4QzA1QgotOjEwNDM0MDAwRTM2RDJFRTYzODdCN0M2RjBGRThBMDg5M0FDRTM3MTJGQQotOjEwNDM1MDAwNkI3QUYwN0U0RUQzMjhDMUZDRDM3NDc3OTY0MTZGQ0UzMgotOjEwNDM2MDAwNEYzMkZDQjlBNjUxREU4M0M4REY2QTFFRTVGNDZFRjA1OQotOjEwNDM3MDAwMjJCRjI1MTQ0NjFDRTVGMDVBQjk1RkQzQTUzNkRDMUREMwotOjEwNDM4MDAwNzJCNkQ5MjdGNzQxM0U1RjlBRUIwMTlGQ0NCRDc3NEFDMQotOjEwNDM5MDAwMDJFNEU3OUMzNTZBRDgwMTdFNUY2RENFNUIxMjZFMkYxQQotOjEwNDNBMDAwRTc4RENGQTkxQjY1ODdGRjVBRTJGMkRCMzEyRkZGMjA5MwotOjEwNDNCMDAwQUQxN0U2NjE5QzhCQkMwNDYzQzJCOTlGQkFFMkQ3RTAzQgotOjEwNDNDMDAwRjdBOTA5QjQ5RUIxRkVBQzlFMDRGOEQ1RDE3OTRGOTVGQQotOjEwNDNEMDAwN0E3RTkzMDFERjkxQTY3OUYxQkREOTg5OUUxREUwOEY4OAotOjEwNDNFMDAwNEY5Njc2RTNCODZBRDU0MDI5N0Y4NTM1REMxREY4Nzk4QwotOjEwNDNGMDAwOThENjAyRDZFN0E3Rjk5MkZGQzYyN0JCN0JCQTk4N0Y2QgotOjEwNDQwMDAwNjMwNEU2RDU2NDczRjcwNDNGMzdBRDg4QjEwMDRGRTMyQQotOjEwNDQxMDAwOTc0OTNFQkVERDJBRDc1N0QwRUZCMTA0OTBDN0E5RjMyNAotOjEwNDQyMDAwRUY4QzFBNkJEMTdBRUFBN0EzNTM1OEUzOTM4NTc4NkE4NQotOjEwNDQzMDAwQjBFNkMwMzgyNjA0NkEwRUMzQkY5RUEzRUJBQjM5QUIwRgotOjEwNDQ0MDAwRTVGOUIxMkVBMzI1NUQ4NUI1NjE0QzBBM0QzRkJBMjkzQQotOjEwNDQ1MDAwMkIwNzc5RjEwNkRGM0MzNUI4RTAxNzAzRjM1QUU5M0Y0MwotOjEwNDQ2MDAwQkVDMDVGRDg4RUJFMzNERUUyNjk4MTFDMkVCOTUyNzlBMAotOjEwNDQ3MDAwQjE5QkU0ODNGMUU4NjdBQzVBQ0ZFQkJDODVFNDg0MjNCRAotOjEwNDQ4MDAwMDlFNzA2MUIyNDhDN0M1NUM4OERCQUZCRkRDRTA4QkZGRQotOjEwNDQ5MDAwREQyRTc2NzFCREJENDRFNkEzNzZCMTg3NkIzOEZGRUFBOQotOjEwNDRBMDAwN0FFMTVFNDZGMDY2QjIyM0FDMzYyMUI2NTQzQkI5N0M2NQotOjEwNDRCMDAwQkM5QUU0NUQwRjIxQjY1NUE3MzNCQ0EzREFDMzY1QTg0NwotOjEwNDRDMDAwQkEzNzNGN0ZCMkRBQ0JGMEFFRUE0MTBDRUZBOUY2MzM1MAotOjEwNDREMDAwQkNCNzdBMUM5N0NGNTYxN0YxRjM2OEY5MzNDNzM1OEZGRAotOjEwNDRFMDAwRTU4OUJCMjdEMTdBRjBGOTdDMzNEMzQzRTM4MkZDNzFCMQotOjEwNDRGMDAwMEFGNzZEMzhBRjI0QTRCQzRCRUEyREU1OEZEMEU1NTEwNwotOjEwNDUwMDAwRDczRTgyQ0ZERjU0ODExRTg0MEZEQkFBNTExNjNFRUZDNwotOjEwNDUxMDAwNjk2RENDMDBERjhENTU4RjZGN0YxQUYxOEUwNTJFQ0UyMQotOjEwNDUyMDAwQ0I2QTExOERCQzRFNUE4NEM1MUIxODIwRTU4RjgzRjhDOQotOjEwNDUzMDAwQUVDQkFERTNCMjIyRjNENEFGNURBMDA4NkIwNDdGNUREOAotOjEwNDU0MDAwNTcxNTIzQUMxMUZBNjlENkQyMjQxMzNDNjNFOURCMkY0QgotOjEwNDU1MDAwQjVBN0VGRjdFQUFBRDU4MDJFODc2RjNERjJEMDdCRjQ5RQotOjEwNDU2MDAwRkM5MTVCQkZFQTIxQ0ZGNUZFQjAzRTMyRUVEMjIyOUEzQgotOjEwNDU3MDAwMjU2Qzc1RjI3RUZDMjMzNzY3QTRBNTc0OTVERjAzQkQxNwotOjEwNDU4MDAwNjZFMzBGMEZFOEQzRkNFNTYzNTg4NzJCNTRFRjMyODJDNAotOjEwNDU5MDAwM0YwNDdEMDg5RjFGRUJGNDI5NUVEMTZERTVBRkIxQUVGRQotOjEwNDVBMDAwRkQ0RUFGNDJERjM5N0M3M0RGQzI0MUQ0RkUxMTdEM0Y0NwotOjEwNDVCMDAwNEFBQzIyQkM0NkVBOTk3NEE5QkYzRTgxRkU0QTkyRkFFRgotOjEwNDVDMDAwQUMwMDcyMzQyQ0Y1RDYyN0JGNEQwQkRDODZGQUVCMTMwQQotOjEwNDVEMDAwQkMzODAxQTFBRDZBMUY5ODRGRjA2QTlGRERBQjIyQUVENwotOjEwNDVFMDAwNTcyRjU2MjI2RTQzMzg5Njc2NDVDMDY2RDY2MzhEMUQ4QQotOjEwNDVGMDAwOTMxMDBGNjYzRDM2MTJGQjlFNDEyNzlGRDNBMjhFQjBDQgotOjEwNDYwMDAwMUYzM0JCRjczRTkxMDFCOTU0QTdCOEIxNUY4MzczOURDNwotOjEwNDYxMDAwQ0U2NEM4Mzc4NUY3NDc5MTA3NzQyNUU5Q0JDNzA3QUE0OQotOjEwNDYyMDAwNENDRjIzRjk1Njc5REUwQkM5NzIwNEM3MDgyRkM3NjczMAotOjEwNDYzMDAwNEE1NjUzN0JDOEM3M0E5RjdENUU4NEZDOURBRDNGOUYyMQotOjEwNDY0MDAwRDNEQkMyQTVGMUZDMTk3QzBGRkI4N0FCN0NEM0MwMUY2OQotOjEwNDY1MDAwMUQ1MDlGOEQzMjY3MUFDNkQ3QzE1NTY4NTUyMkY2N0YwNwotOjEwNDY2MDAwOUYxQTY4RDVGQjk3RkQxNjgwQThGNEZFMURCREJCREEyNgotOjEwNDY3MDAwRTc2NkYzRjkyQ0Q2NUI0NjNGQjM3QkU3QUNFQzBBN0RFQgotOjEwNDY4MDAwQkQ3QTE0QjAyMzZBNkRERUY0NTQ2QTU3N0ZFRTNCNkUzOAotOjEwNDY5MDAwMTk1Rjc3Q0FGQ0VDQjIwQkU4MEQyMzRFNzcxNDdGQ0E4MgotOjEwNDZBMDAwNzM5MjNDREY0NTNCOUVEODgxNzMxMjhCM0U3MkIwRkUwNQotOjEwNDZCMDAwNUE3NEE5RDQ0QjIyM0I5ODNGODUwMzlBRTZCOEY4OThFMAotOjEwNDZDMDAwMjc0RTFDQkM4REM2NzMwMkU3OTgxMEVGREZGNUE5MURCRAotOjEwNDZEMDAwRjlBMUI0NkNBQTEyMzMwMEFCNERDODMzOEQ4RUNGMUUzNgotOjEwNDZFMDAwRDhGMTUxNDI5QjcxRjE1REVBQzVDNUM1OTUxRjEyQTA3NQotOjEwNDZGMDAwMTc4Q0Y5OEM3REZFNEMxQUVDQUM0QUU1MkNFRjMzNTU0NwotOjEwNDcwMDAwM0VCRjIyQURBREZDQjBFOEI4RjhCOUY4Qjk1OEZEQjU3OAotOjEwNDcxMDAwOEEzOEYzMkQ0N0RCOEM5RjQ3QzcwMTlCMDc0NkVGNDczRAotOjEwNDcyMDAwQjgwQTIwMjdDRTFDNTI4M0Q4NEY2RjA5RjY0ODE0NkQ2MwotOjEwNDczMDAwRjQ2RkM0Q0YyQkQ3RDI0QjI5NTg5NzlFNDRFQzg3OUQ1QQotOjEwNDc0MDAwQkE4MDVEOUUzNzQ4REFFNTI3RjQ3OEZCQTk2RDJBRkIyRAotOjEwNDc1MDAwNEJBN0I2QzUwNzYxOUY1NjZDQkJFNzIwRjYyOTJCMzZFMQotOjEwNDc2MDAwMkE2QzlFOTc4QjA2QzYxN0UxNTEzODIzRjUxOEYyRERBNwotOjEwNDc3MDAwNTI2MDVDN0IxMjIxQUY4Q0YxOTUzRTExNUYwNUJFNUFGMQotOjEwNDc4MDAwMTg1MkZDOUI2ODFDMkQ0RTRGNjJCQjg4NzEyNDBEOTIwMQotOjEwNDc5MDAwRUJBMkQ0MTFDQTY3QkNFQUUzNzYwQzkyNzJEMDY4Qjc3OAotOjEwNDdBMDAwQjBGRTFFOEU0QjUzQkI5MzZDRUZGQzI5NEU3MDlFQTA0NwotOjEwNDdCMDAwNjg3RTFERTMzQkI2MkVENzhCN0RDNTg1QTE5RDE1OUNEQwotOjEwNDdDMDAwREZCMTJEQ0U4RDM4QzQ1NzdBOUVCM0YxOUQ0RTdBN0ZERQotOjEwNDdEMDAwOUQwNjQ5RkJFRDk4QkU3Rjc3NkM4NzNDOUY4RTcxNjI4QQotOjEwNDdFMDAwM0Q3REE1OThGMzA1QkIwRDkyRkNERjZEOTBCNDg3NUUwRgotOjEwNDdGMDAwRDFEN0IxRDE3RTYxQTgyOUExM0JCNUZGNjJFRkRCNUNDNwotOjEwNDgwMDAwRjZEM0ZCNTlFODZBRTgwRkJERkJDNUFFMzhERThGRkY3MwotOjEwNDgxMDAwNjJENzgzODU4ODMzOUYwODhENEEwNUZGMUJERjFGM0FDNwotOjEwNDgyMDAwQzgyNkU5QjA0RTFEMDc3Qzg5QTBDQ0IzMjkwNzVFNzM2QQotOjEwNDgzMDAwMjNDNzk5QjIzRTkwMTVCOUNFNjRCRUQxQjE1RDRGMjU2NAotOjEwNDg0MDAwNThCMjVCRTk1OEVFQUM3MkUyN0M2OEU1QUVFQjhCQzAyNwotOjEwNDg1MDAwQzdBRkQ4MjQzRUVEQkIyNjA1NzBFQ0I5OTJENDJERjQzOQotOjEwNDg2MDAwMDRBRkIzMEM2RUJGQ0ExMkQxQ0U2MUYzQjNGMEIzRUQ5NwotOjEwNDg3MDAwMkRGNkEzQkQxMTg3NUVCQ0RCQzZFNzBCNjc1RUVBQjkwOAotOjEwNDg4MDAwRkE1QUFDQzM1NzZENEM4N0M1N0QzQzU3NzMzRTUyODM3MwotOjEwNDg5MDAwQ0FGOUNCOEJCMzQ0MThGNkM3OTI5QkUyRDc2MzNGQ0NERgotOjEwNDhBMDAwMThFRkNDNUNCOURFQ0I1NjI5QzI0RkYzMkEwQkFBNDJEMwotOjEwNDhCMDAwQTNCMjAzRDEzRDgwMUNBNUY0QzYzQ0U0NEYzNjY1MDU4OAotOjEwNDhDMDAwNkZFRjk5Q0FFNzdEQzMxQjUyNUJGMzRDNjkxREY3QzRCOAotOjEwNDhEMDAwQjlDODkyNDFDOTNDRUZGQkE2MTdCMkJFM0I2QzE3MDFBOQotOjEwNDhFMDAwQzg4NUMwOTMzMjBGQTdBQ0FCQ0M4RjdFMDA3QzhGRkUwNwotOjEwNDhGMDAwOTJDMzNENTMwOEFGQzc3NUJBOTY0RDBFRjc0NDVFNDY1NgotOjEwNDkwMDAwRDk5MzE5OUM5NzcxREMyRUY3NEJGMTFDRkJDNTY1MzlDNwotOjEwNDkxMDAwRjQzRUI1NEJENUYzNzlGMTdFNTIwNDFGOTVDREY2N0E2RQotOjEwNDkyMDAwRDA0RTRERjY3QTdDMkU4Q0Q3N0Q5MkVERDZEREYxMDJGRAotOjEwNDkzMDAwNzZBQkU1RTk3ODNEQkYyQTg2RjNDODhERjc5NkVBN0MyOQotOjEwNDk0MDAwOTdBQUQzNTM1QzIzRjMzMUVGQjNDOTdDRDVGQjM2NjUwQgotOjEwNDk1MDAwRjBGRDE4NDZGQkZCNkNEQTc0RDg0Rjk4MDdFQ0Y1ODUzMAotOjEwNDk2MDAwRjZCQTlFRDg3NzMxQzZCQjMwQTE4RUM3Nzk1Q0U3RjMyMwotOjEwNDk3MDAwODVCMTc1MzIyRjVDM0Y3NzhDRjY4MDlCRjQzQ0Y2RTY3MAotOjEwNDk4MDAwQUQwRUNFNUZGOTJBQTNFMTVCOENGN0FCQUQ3RDkwMDM1MgotOjEwNDk5MDAwMDM3Q0NGREJDQkY1NjQzRjEyM0QxNzNERUUwOEEzRkU1MQotOjEwNDlBMDAwQ0JBRDMyNkVGREE1MkRGODJERTRGMDk3MEZBNUYwRjlGMwotOjEwNDlCMDAwQTgyRkRCMDVGMzM5M0Y0MDcxNUI2MDlGN0RBOUU4QjAwQwotOjEwNDlDMDAwQ0RDRDc2NjUxNzNCQzFENDNFMzU1NjU4OTBCRjMzNkU3QQotOjEwNDlEMDAwRjJEQTk5Qzg2RjY4RDlFODAwN0I4QUFGMzZERjlGQzZFNAotOjEwNDlFMDAwN0U4REYwMjQ3MjlFQ0QyMTU1ODA2RTVGM0RGRUVGN0Q2MQotOjEwNDlGMDAwMjJFRDE3QTM1Q0I0RDE5Qzc3RDc5NDI1RUQ0QUEzN0UxMgotOjEwNEEwMDAwQURCRTJFRDcwRTkyN0VDN0JBNDE1MjRGOTVDNzg1RUVFNgotOjEwNEExMDAwRUJDQUYzOTNGODI2RkFCMDdGNDcwQTNFOUVGMzI3QjYxNwotOjEwNEEyMDAwRjc1MDIwMzcxRTEwQzE1RjdEMzQ4MEJENkMwRkYyRTY1OQotOjEwNEEzMDAwQ0I5RURDRkEzQUY2NkJCRkIyODgwNkQ4MUZDQUFENUJENAotOjEwNEE0MDAwN0U4NUZCMzk1MkVGNEE2NDNEMjRDNDQ2OUVERjk3NkU1MwotOjEwNEE1MDAwNzlBRTk1MTYyQ0NGN0Y2MTdCMDkyRjlBQjJBNTI3RTBGRQotOjEwNEE2MDAwODNBNDczMTQ1QTVGOEIyQzBBRjdCRjY4NEYzRkNFQjdFRAotOjEwNEE3MDAwMjM3QTU4Nzg5RjZDQTdBQThGODc2QzRBRTA2RkIzQ0NEMwotOjEwNEE4MDAwNTcxRTlGMUNEQzBDN0JBRkY5QTE2RTAyRTdEREM3QUFBNQotOjEwNEE5MDAwRUJGQTgzN0VBNzM3QzY1OUMwNEZFNUI3MEQ0RDFDMEEwOAotOjEwNEFBMDAwQkNCREExMEFEODFGQTdBRERFRjY5MTcxODQ2ODdDNDUxNAotOjEwNEFCMDAwRTc4MTlGRDBFNTUzMTlBRDNCOUNGRjJDRERGMzEwREY2MAotOjEwNEFDMDAwMkY1MjBBQkUwNDVFMUU1Nzc4MUZCQjc0RTVEMEZCOTlCNwotOjEwNEFEMDAwNEY1RkI3ODkxRUQ0RUZGMUQwM0QwOTkxRjQ3OTJGRkFEOQotOjEwNEFFMDAwM0I3NjJGQjcyRkE1RjZGMkZENTcxMzc4OUM5QjZEOUM1NAotOjEwNEFGMDAwRDcxMjRERDc4QjdFRkY3MUY1QTJERTNGMzdGRjEwRDk1RAotOjEwNEIwMDAwMDVGRENGQzdDMzY5RDFGMEFCOEZFOEZCREY2QzhCNjFDQwotOjEwNEIxMDAwN0Y5MDNDMDAzRUM3NzZDQzE2OUE4Nzc5MUZEQjFFQzM3OAotOjEwNEIyMDAwRjJFQjU4OTI5NDEzNUY5MDNDMERGNEMyMzgyRUZGM0Q4NwotOjEwNEIzMDAwRjNFOTVCNTNGOEJDREZGQ0EwRjlCQjQ2QkYxRkVCNzI4NwotOjEwNEI0MDAwQkMzQ0M1OUIwOEJGQjNGQzBEMjkwRjg5NUU1N0YwRkIyOQotOjEwNEI1MDAwNkZEOEY4RkRFODc5M0M4N0Y3REE0NUFDRDNFRDcxQ0MzNgotOjEwNEI2MDAwMTdDNzNBNDg3QTFDREJEMThCRjU1MzUzOTI1QjMwREY4MQotOjEwNEI3MDAwNkNCNUM5N0E1QkE4MzNFQ0UwNjNEQjdCRjk2QTIzQkVEMgotOjEwNEI4MDAwN0IyQzI5RDREOTFERjFCQ0M5MTY1QzM5NTBDQUQzNjYxNwotOjEwNEI5MDAwRjhDNTIyOEM1ODNDRjI4QjA0QzczRjhDRjc0QTlEQUI3QQotOjEwNEJBMDAwMUI2MEE3MjBCRjM3M0Y4N0NCQjAyM0Y5RkMzQ0RERjE2QQotOjEwNEJCMDAwQzlEMjlGMUMzMDU4REEwRjlDQjM5QUE2RTc5M0IzREQ5NQotOjEwNEJDMDAwMTNCMjQzOEU2QkJBN0Q1OEI2MkQzQUNGNTdENkE3MTg3RAotOjEwNEJEMDAwRUZEM0JBNEIzNUYyOEEyRDE4NkZDODlFQ0VGMTA2RTE5RAotOjEwNEJFMDAwNzk5MkM2NUJCQUZDRkE4NUM4MUYyRkFEQkFGQjVBRDhCQQotOjEwNEJGMDAwNEZBNTU2MzFDRTRFRTM2QTUyNTQxRTQ3NTM4Qzk4MzUxQQotOjEwNEMwMDAwMTk3NjY0NjQzRjExRjY1QkU3QzFFN0UyQjRDMjlEQzY2MgotOjEwNEMxMDAwNzYyQkVCQjdBRTgzQTVCRTAzNUM0N0RGMkI1QkFFQUM1OAotOjEwNEMyMDAwQzZGNzBERjlDMjgxQzJCNDU2M0MyMUFGMTVGOTNENEQwRQotOjEwNEMzMDAwQTNGNEZBMEJDQ0JCQzkyNkVCQTNFNzZEOEMyNzdGQjA5RQotOjEwNEM0MDAwOTQ1MzRENTk5RURGMEYwMzVERkVBMkYyRjlBRUQzM0ZBMAotOjEwNEM1MDAwRTQyNjI2Qjc2MUE3QjVFQTdCN0I2QjlFMkQ4RDFGNjc4NwotOjEwNEM2MDAwNkU1OTVGMEY5NkYyQUU5NEM2ODc3MUY2NUM2N0NFMkJENQotOjEwNEM3MDAwRUZCREQxMEM1RkIyQ0QwQzY3RUYzMkMzRkRFQkNEQjAxMQotOjEwNEM4MDAwRjc4MDE5RUU4QjdFRjNBNDlGOEQ3M0NCRjBCMzUxQzJFNgotOjEwNEM5MDAwQ0ZGNjM4QTQ5RjBEMTg3RTM2NEFGOEQ5NzgwRTNGMUIwMAotOjEwNENBMDAwMzBGQzZDQzBGMEIzMDExQkY4ODZCRjBEMThGRTM2RUE2RAotOjEwNENCMDAwNkZEMEYxMjRGQ0UxMzRFNDZCNTY1ODY0OUUyRkQxQzNDRAotOjEwNENDMDAwQ0ZFNzk4QTZEQjRERTc1MjRFM0QyRkNGQTUxMDNGNDhDQQotOjEwNENEMDAwNzlCRkQwQzVFQkU0MDFCNDE4MENCRDI0RDc1M0VBQjNCNwotOjEwNENFMDAwOEVFMDMyQzQ3NzNEREFDQ0MxNThBRjZCQkY5RTA3QkVCMQotOjEwNENGMDAwQUJFOERBQzg3OUFGNEQyQjVFRUU3OTBGQjU2QjU0RTJCNQotOjEwNEQwMDAwMDVFQzhBOEFCNTVGQ0Y4NDFEOTVFNkQxNEEwNkQzNzgzMwotOjEwNEQxMDAwMkE2MzFCNTYwRUU0Qjg3RDk4RTU0NzYzOERFNzhEOTFCNQotOjEwNEQyMDAwOTI4RTFDN0YyOTU2NzE1MzA2RDUyRjQ4NkUzMzdGMjhFQgotOjEwNEQzMDAwM0FFRjVDQUMzNkU3OTlGRjU0REU3OTM0MUYxODc2RTAyMQotOjEwNEQ0MDAwMjNCNkU2MEMzN0ZCRTlDMzFFNDY5Qzc3QjExMkVGODYwQgotOjEwNEQ1MDAwOUZGRTY5OEM1ODg2RkI4MzAyQUZDODNDQjU5NjQzMzZFQwotOjEwNEQ2MDAwOTkzN0IwNUFEOTIwMjJFQzkzNjUzQUJFMEQ3OENFRDk0NgotOjEwNEQ3MDAwNUNCNkM3Q0ZDMUFCMTU4QkI4NTQ4OEVFNUE3MzEzRkMyMQotOjEwNEQ4MDAwRUJEMzBCMkM2Qzc3OUY1RTUwNTBEODBFRjYxRkY5NjU1NQotOjEwNEQ5MDAwNTgxM0I4OUYyQjcyQkNCODlGQ0JDNDNGNUI5MkEzQ0U3NQotOjEwNERBMDAwNEQ3NDMwQjVDN0ZENUNFNjczMTM5Nzk4RUFBN0FDQ0U5NwotOjEwNERCMDAwMzVENTk3MTQwRDM1RDU3NzE3NzI3QzRCMTZDQUYxOTVGQQotOjEwNERDMDAwOTA3RUYwQTcwMDVFQzY3OThCNEI0MDNCQjI1MzNBMkJFNgotOjEwNEREMDAwODE5NTJDOTdENzJCN0M2RURDQjM3NDU1MjFGMDcyOUM5NwotOjEwNERFMDAwRDgxOTcxMDQ4MzZGRTZFOEZBNDU1ODAzNzZGMEREOTkyNwotOjEwNERGMDAwNTQ1OUZGQTVEMjcwRTQzNjdBRUY4NEFGNkUzM0FFNEVDRAotOjEwNEUwMDAwMzk2MTU5NzdERjMwMEZGMkVCRDc3Nzc2RDMzQUJDNDE2RgotOjEwNEUxMDAwMDlBNTQxRjRGQzdFODBCNjFEN0NGMzk5QjU3MTEyRUZCMwotOjEwNEUyMDAwMjdFRTZDOTc1QzAzQkJGMzUwREVFQjgzRDBERjM2OTU0NwotOjEwNEUzMDAwRjMyNjBDN0VFOTZDOTM3MUJBRjU4Mzg4NjY2NDRGQUNGNwotOjEwNEU0MDAwQUY5M0Y5QkNFQkVCNTI2MkJCNDdFQ0JGMThGMzZDMDFCQwotOjEwNEU1MDAwMUQwNENBNjU2OUE5MUMxNzEyMEQ5ODA3RDlFRENCNjAwRQotOjEwNEU2MDAwQjc5RDNFMjRFRDc2NjMzRUREOTc4NzNCMkVBMUZBMUI2RQotOjEwNEU3MDAwNzZDNjMwN0UzRUQzRkQ4NkUzN0Q1RUVDRUZDMUY5OERENAotOjEwNEU4MDAwRUFCRDlENTVEODAzOTY2RDlCRTE0N0I4NTJCNTk3QjBFMgotOjEwNEU5MDAwNEUxNkFDRUZGMTFFRUVGNzVBRjRBRTJBNzA5RUU2RjMxMgotOjEwNEVBMDAwMzVBMzEzMDZEMzc3QkVEQTZFRjM4RTI3RjhCNkJBNDc2QQotOjEwNEVCMDAwRURGMDkzMTc1OTgzNzZDRUMzRENCQURFOEVCQ0U0NUY4NwotOjEwNEVDMDAwNkM1OUNGQ0ZFNzZEMjlFNkJDQ0JGOUEyOEFGREM4QTMwOAotOjEwNEVEMDAwRkFCOTJDNjNERTBCMEE5NDc1NkVFMkFGNUU0MzI0MUZCMQotOjEwNEVFMDAwMkU4ODk1RkI3OUM0Q0YyRjYxNUVBN0I3MjgzRUQ4OEY1NwotOjEwNEVGMDAwNTcxNkVEQjQxN0QzRjNDMzNBQkY3QUE2NEQxQjBCRkU3QQotOjEwNEYwMDAwNkIwOUM5RkIzOTVBNUU1M0U1QkQ2MzU3QUEzMjJGRTZEOAotOjEwNEYxMDAwMDJGN0Y5NEMzOTlCQzVGQzdERTVEOUJFRUM2NzREMEQxOAotOjEwNEYyMDAwRjc5MTdFNkNCNjk0MUYyREY1MkFFRkM3QjVCQ0I2M0YzRQotOjEwNEYzMDAwNzUwQUJFNTc2RkUzRERCQjA1RjYwNjc5RkVERjIyQUFEMAotOjEwNEY0MDAwNzA4RUMwMzNBRDQxRjI1NTk2QTg4MkZEQjdFNDJGNkY0NQotOjEwNEY1MDAwMUZDNEJBNUI5MkU1RjQ2MDNEMTQwRDUzNERGQzU5MzkwMgotOjEwNEY2MDAwMjZDRUM0QkZEMzQ0QjJFOTFDQ0Q1NTQ4MkE4OTgwQUZCMAotOjEwNEY3MDAwMUNERkNERDRGRUVBMkJGQjQ2Qzk4MzlDRDY3QTk2MDc2QwotOjEwNEY4MDAwNDNBMkNFMDExNjk4RTA3MjJBNkY4MTdDMTI5Nzk5REVCNwotOjEwNEY5MDAwMkIxNzkzNUJEQkMxMUZERTI4RURENkYyNUQ0OTFCQjBGQQotOjEwNEZBMDAwMkZCRUMwMjJGREExNjk5QTdDNUVCMTU3M0UxNzIyRjY0MgotOjEwNEZCMDAwRENCOTc0OUNDNzQ3N0NDMDc0NkU1QkRGRTc0M0JGMUNFMQotOjEwNEZDMDAwMEZFQ0Q2QzA3MTlERTYwQzkyOTc4NEQxRjJERThENzZGRgotOjEwNEZEMDAwQzREM0M4NUM2RTQ2OUNCNDNDNDAzMEZBRjU4QkU2NUFBQwotOjEwNEZFMDAwOUMxRkIxNEFGQ0JBQkNFRUFFQ0IzMjVBRjlBMjYyOTcxMgotOjEwNEZGMDAwMzlERkFBRTJEMERCRENDRUM4Njc4Q0FFMjczQjdENjUwQgotOjEwNTAwMDAwMDc4QzdCQkNFMkUzNzM5M0RCOUFFQzg4MDc1REE5NzVBMAotOjEwNTAxMDAwRTQ3QjI5QTJFRjRCMkIwQjM1RjEzOEE3RUU0RDczNjNFMAotOjEwNTAyMDAwREZCNjIyRUE5RUI0ODU0MzNDNTIzRkU5RjE3RkRDMzM5MAotOjEwNTAzMDAwMjRFRDg0MDZCQjhDREJCQUY2NTk3OEZEQzk3Qjc5Q0VBQQotOjEwNTA0MDAwRjFFNTAyOEJCQzJGMjAwQTJGRTM3REVGNzI3RjFEMzIyQQotOjEwNTA1MDAwNjQxRTFBRjA2MjhEQzA0QjM0MUYwMTRGRDYwODNDQ0Q0MAotOjEwNTA2MDAwMTMxMjRGRjM0ODlBMDQwOUVFMDAzRThCQzRDRkNGQzQwRAotOjEwNTA3MDAwRDc3Q0ZDNDFGNUYzRjcyQTQxRTRCRjQ1RTM2NzlFRDZCMAotOjEwNTA4MDAwQzhGODlCQTdCOUFBODJFRUYzRTc1MzcxQ0JGQjA3MjFCRgotOjEwNTA5MDAwOUY3NjY0Qzg3QjBEQTNGMTM3NUYzNEFDODRERjNCOUYwMAotOjEwNTBBMDAwRjQ0NjM4ODlGOUMyRUU2NDNGNERGMTQyNkY3QjA2MzUxNAotOjEwNTBCMDAwREE2RDUyOUU3MTlDQjdFNUI1Qjc3OUREQjU3ODY5NTU2MwotOjEwNTBDMDAwODMyRjA0RDU1MzdCOTdERkQzQkNBQzhEM0NERkM5NjdGRQotOjEwNTBEMDAwNjVGQ0U0QUFCMzU2MkVBRjFDNkY1RTc3NTNDRkE2RjFFMgotOjEwNTBFMDAwRjM5RjhCOTcwQUUwMTk3QzhFQjg1RTQyMUJGN0VDMjE4OAotOjEwNTBGMDAwQ0U5NzcwRkU3QzhERkQxMDQzMEVCN0RBNzVFNkJDRTVFOQotOjEwNTEwMDAwMEJEOTdGRDE3MUMyMUI4N0U4NzFDMjNDOTE2N0NBNUIyMgotOjEwNTExMDAwQkU4MEREMTE5REI3NkNFOEYxMTY5N0Q0OTM2M0Q1RUM5MgotOjEwNTEyMDAwMzczQzM0RUZFMjU3NTRGNkQzM0REM0M2NTlGOEZDRjg3OAotOjEwNTEzMDAwMkJGMjdFM0M2REM1OTkyNkYwQTcxNjZGNjEzOUI4MzgwMQotOjEwNTE0MDAwQkUyQkRGNkJBMUU5NzFCQjczRjY3NjRENEExQUUyN0Y4NQotOjEwNTE1MDAwQzUzMTZFQ0VDNzJGQUU1MThCQTBCRjhBQTk5RDI3QTJBNQotOjEwNTE2MDAwRERDQUU1REQzQTQzMkY3QzcyN0JBRjg3MDNCNDVFM0UzOAotOjEwNTE3MDAwQjkyOTM1MEQ3MUZGNEY1N0Q4NTI0OTcyOUU2QkY3Qzk0NwotOjEwNTE4MDAwOEFCMTlEOTE5RkYxRTlERDhFNjlDMTM2RjBGM0QwMTBBRgotOjEwNTE5MDAwMTk1NzI5QkZGNTdERDY1QjI3MkNBRjI1NENBM0Y3Q0IzQwotOjEwNTFBMDAwNTZFQzRFNDBEQTdGRTk4QUI3RjNERDY0NTJGODA2NjhDMAotOjEwNTFCMDAwRUI4NkU0MjFCRUI3N0VCMzFCRjg3MkFGRTdGQjA0QjYwMwotOjEwNTFDMDAwOTNCODA0M0U4QTU3QUM2MEJBMkY1MkU0N0VGNTBENEE3QwotOjEwNTFEMDAwRjhDODQ4NkE3NzNDRTZFRTg0Njk0NDNGOERGRTg3RkQ1NwotOjEwNTFFMDAwQzMzMzFCRTNGNUYzNjgzNTlDMzc3NDNDOTZFQzAxNkFENgotOjEwNTFGMDAwN0YzNDQ2RTJGM0U4Q0U3ODJGREY4OUUxMEQ3NDY2RkY1NQotOjEwNTIwMDAwQUQ5RERDREYyOUI1RDQ1Rjg1RjE0QzRDRDVCNjBGRTFGRgotOjEwNTIxMDAwN0RERUUwRTY3NDk1REJGMUI5NzVBREE2NDc2MjVCRjEyMgotOjEwNTIyMDAwMEZBM0RDQUNFQjY5RDhEQjI4NjE2RjIzNUYwNkY2MzY5MQotOjEwNTIzMDAwNjBEOERCMjg2MTZGRTM3OUU1NUFCM0ZERjZCMkJFNUY1MwotOjEwNTI0MDAwNjhDNDgzQkJENDM2RkI2MEVGMDYwQTQ0RUYyQUQ2QjNBQQotOjEwNTI1MDAwRTMwQkZFMDhCREY1OEFCNDE3OTYyOERFNTU4RDZDMkYzQQotOjEwNTI2MDAwQzVEN0MxRUZBQ0I1NEEzQjNCRjBCMTNDMTc0NUZGN0ExRgotOjEwNTI3MDAwNDMzRUZENUFCREM0OEJGREZDRkJFMzZFN0QwNEVEOTcwMAotOjEwNTI4MDAwNjI3RjY4MDBFRTNEMjVEQjJCODI1RjQ3OUU3NThBQzhGMgotOjEwNTI5MDAwNzNCN0EzQzgwODhCODQ0NzNCMzM0Q0VEQzdCQUIzNENGNAotOjEwNTJBMDAwRjVCRjQ4RUY2M0FBRkZBNUM3Njc4MjJGRUYzREQ4RDRBQgotOjEwNTJCMDAwN0U4Mjc3OTQwOUJFNjJEMDJGNERFRDI3RjkyNzk5RTBDMQotOjEwNTJDMDAwMjlFM0E2OUJEQTRGMkQyQTM2RDU1RjNENkRBMUE5N0UzNQotOjEwNTJEMDAwQkE3NkJEMDlCRTc2QzE0REE2RjZENzU1RDU5OEVBODVGMgotOjEwNTJFMDAwQTg3QTBDRjhGMTA3RTQzRDZDRjVGMDlGMUNCOEZGQzVGNwotOjEwNTJGMDAwQzkyNUQ1RkYwOTc5Q0NBMzQ4RDRGM0JEMkI3RkI5RjFEQgotOjEwNTMwMDAwMTFDMEZCOTBENzRDMkI2RUQ4Njg0QjU1NUI3MUZDMUZCRQotOjEwNTMxMDAwNzQ3QkU5RUE2MUZFNkY4N0IwM0ZEREMwRjc2ODIyNzZGMwotOjEwNTMyMDAwMEJCRThCMUJFQUQxRkQ1RkY5QkNBM0Q1ODg1QjM1NjQ0RQotOjEwNTMzMDAwRjA3RDA5NTFFRDJGRDQ2RTU4RENCRUQzMUU2MkI5MjUyNQotOjEwNTM0MDAwNDMxRkI4Q0U0QUYyNkJEOEMwN0RCOUREMDhERUZEREM2NAotOjEwNTM1MDAwQzcxMjFFQkFFRkE5QUUwNDNGM0ZCNEM3NEM4NjJGREQ3QgotOjEwNTM2MDAwNzcxQUY1OTcwRjZCOTJGNTUzMDQ5QjI2MkYzRkI3RTIwMAotOjEwNTM3MDAwM0FFNEE3MEMxQkQ5NzVCNTU3QzY0NURBM0NERjZFOTRFNQotOjEwNTM4MDAwQzAxM0NFODUwMzRGMjhDM0M0RjcyOEY3MTFERkEzM0MxMQotOjEwNTM5MDAwNDA3QzVGNDI3MkVEMjBGMTNEQ0E0M0U0NjdFMkY5RkZEMQotOjEwNTNBMDAwMjEzRjEzRTU2QkU0NjdBMjdDOURGQzRCOTQwREU0NUYwOQotOjEwNTNCMDAwQTI3Q0FCN0ExQTk3RUY1NDZCRkNERTVGQUIxNzcwRjlFNwotOjEwNTNDMDAwN0U3NTE1M0ZGRkIwN0EyOTk3MUY1NzA3Rjg3OUNGQTE0RgotOjEwNTNEMDAwMzI4RUUwMjJCRDAzRkQ1RTgxM0MxOEU0MEI0NERENEJDMAotOjEwNTNFMDAwMkFBQURDN0NGRjQxQURBRUI3NDRCRDlFNTdCMzhGRkMwQgotOjEwNTNGMDAwNTdFMEIzRDE5QTc0QzREOUJBQkY3ODYxN0ZERjJBOEVERgotOjEwNTQwMDAwNDREODZENTc1OEZEMzk0Mzk5OEUxREREMkNGN0Y1RTdDQgotOjEwNTQxMDAwNEY3QUI1ODE0Mzg5RUVFRjY2NERFOTkxQUI0MkRGNTU5NgotOjEwNTQyMDAwQkQ5NDQ4NzVFRjVBREFCRTdGMzI2RUE4RTQ5N0RFQzNBQQotOjEwNTQzMDAwRkNDM0YwREU3MEU3NjFERTRGRjc2NDkwQjUzQTk0NjEyQgotOjEwNTQ0MDAwMDVGNDU3NzI2NEZDNzJCOEI1QTExNkY1QjVERjBCMEYwMQotOjEwNTQ1MDAwRkNFNjE3RTNGRkNBRkJFMEI1NjQyRUUzRkNCMTcyNTYyRAotOjEwNTQ2MDAwRkEyQjIzRjRGREZCREFFRkU1RkVGRDA4OEM5REVBODdCRAotOjEwNTQ3MDAwQkI2NTdERUQ1Q0QyNzQzRUQ0ODdGOEZCMjM3MERBNTlBRQotOjEwNTQ4MDAwOUU2RjMzRTVFRDhDMzlEQjMwOUFFQjVENzYwRkYyNEQ5NAotOjEwNTQ5MDAwNDczOEMzRjI3QjRFRTE0NjdDRjlDNUY4M0RCMkZGQjExNwotOjEwNTRBMDAwQjJGRjhEREY4N0Y5RkJGMDNFOTE5NzNERENEOTNBOUU0NAotOjEwNTRCMDAwNjUzQ0JFMDY3OTNGNURCNjZDNUZBQkI3MUZBMTUxRkY3RgotOjEwNTRDMDAwNDkxODVGOTUxQzVGMzFCNTk3RTM2NzM5MzcwMkRGNENBOAotOjEwNTREMDAwODJCNzJERUI2M0QzRTVGOUU0MzE2N0Y1N0FBRjlDNkZDMgotOjEwNTRFMDAwN0JBQjg0NzFBNjA0RjU5OTI5OUFGMDUzN0Y5OTk5QzJGMAotOjEwNTRGMDAwOEJGOERCODhENDg2MEM2RUFGRTczM0M0NUJFNUY3MTIxQwotOjEwNTUwMDAwQkRGMjNFQUVFRTdGRDdFNDdFMDAyMTAwRTMzN0YyOTI5QgotOjEwNTUxMDAwOEM3NURCMjkzOTlDMDEzQkFGRDM2MjNCN0YyRjUzREQ3OAotOjEwNTUyMDAwRTk4M0JDRUVFM0QzN0UwRDdFQjAzQTJEM0NCRjVBQkY3QgotOjEwNTUzMDAwM0MyRkZGRTZGMzlFNEVCODhGNzQ5MjZFQUZGRjEzRkFDNgotOjEwNTU0MDAwREY4MkY3ODczQjVGOTBGNEM3MjU2Rjk5QURCMDMyOEY0QwotOjEwNTU1MDAwRkUzN0I4NERGQTRCN0MxMUJGNjBGRTQ0N0ZBNjA3RThDQQotOjEwNTU2MDAwQTlEMzVGMzFGMEEzRDNGRjFDQkQ5NjQ1RDZFQkZDNzFFOAotOjEwNTU3MDAwM0VGRDQzOTJERTNBM0Y4RDcwQ0FCQzA5QjQwN0ZEODdGOQotOjEwNTU4MDAwNUIyNTNGRDRDNkM4N0M4RjE3RTMwQjFGQzAzRDU5ODRGMQotOjEwNTU5MDAwOUIyMkM0RTc4NzFCRkM1MjI1Q0YwRkZGNkZBNUZGMDA5RQotOjEwNTVBMDAwQUJCQzQ3Q0U1MUU2RTQ3QkVBN0U4QTFGNjYzNThCNDI3MAotOjEwNTVCMDAwRENEMzc5Q0FBN0M1NjE1RDE3OUZGNTFDMDQzQzQ3OENGNQotOjEwNTVDMDAwMkE4NDc5NkVENDlGQkQ0MEJERjY0REIzMERCMEYxQkNCOQotOjEwNTVEMDAwNEI4RTZDNjdENDVCOUQ2RkM1NDFFRTE5REYzMURBOEQ2MAotOjEwNTVFMDAwMzhBRjVEOEUxM0ZBNjJDOUQ4RDAzQUU4QUY3MTM1NTYzQwotOjEwNTVGMDAwOEU1QjkzNjVDMkYwMjFEMjY3MzI5RkQzOUZFMDRCOEJDNQotOjEwNTYwMDAwQ0NGRkY0MUU1ODNDMDBGNzhCQ0FGMzVCQzIyNUVENkE1MQotOjEwNTYxMDAwMEZGRDA3Qjk1QUY4NDNEMTcyRjQyN0Q0NkQ1NkY4MUQxRgotOjEwNTYyMDAwNjc5MDRGNEJERjI5NEMzNURCRTdFM0EyRjZENzJGQ0I1MgotOjEwNTYzMDAwRkU4MkVERjFDQjdFRTI5RUVCQkYwREQ1Q0ZERjY0ODkxQwotOjEwNTY0MDAwQUNGRkU0M0RBMzVGNDhGOTdDNzFGNzhDRjYxNkY1Q0MwRQotOjEwNTY1MDAwMDc2MzhBNjUzRTE3Q0RERjkyODNCODhENUY1NDAxMkVCNAotOjEwNTY2MDAwMTQ1NTU2RjBDMTM4NTE2Nzk1N0VBNUZGNzhDNTAwRjZGMAotOjEwNTY3MDAwREExOTNGOTc4QjMwM0Y5RjQwMEEwNUNBRTQwQTYyMUY0MAotOjEwNTY4MDAwQzBGQkUzMjZDRUMwRkRDMUEzNzM0Nzc3QzdGMzg4RkJGOQotOjEwNTY5MDAwRjM3RUMwRjgyQTU0RUQ2RkVFODhGQkYzRjY4RDkxRUJBNAotOjEwNTZBMDAwNkRGMTU0MTk2RkRBRTdFQ0Q2QTYxREZBMEFFOURCRUVDNAotOjEwNTZCMDAwM0Q4MDE3QzFFNTRCQTQ4RkJCRDNCQzVGMjY3RDBDRjhBMgotOjEwNTZDMDAwQjJERTM1QkNBRjVDRTgzMUU3MUQxOUVGNUZFRTFFMkQ5MQotOjEwNTZEMDAwQUMyOTE3RDY3Nzk3Rjc3RkE2MjNGMEZDNkE1MkFGMzEzMwotOjEwNTZFMDAwQTBEN0FCNDkwM0M3MjAxRUZGNkE1MjdCOEIyQzFENzZDNwotOjEwNTZGMDAwMkVGQjNERERCREFERjExOUVCQTNCNUJGNDJFRUNGQjgzQQotOjEwNTcwMDAwMkY3ODRDM0I3OTVGNzAzNDVFMkYxMzIxMTM3RUM3RUJFQgotOjEwNTcxMDAwRjhGRDE5NzhFRDM1MkNFRjdDQkNDNkUxQjA2MzFFRjBDNgotOjEwNTcyMDAwRjlGNjFFMjM2RjBBRjFFNEVFQ0IxQjE4QkVDMTI2RDc5MwotOjEwNTczMDAwNDFGOUQzMTMwQTkwMTdCREY4NUQ5OURGRjEyNTg2MDI3MAotOjEwNTc0MDAwQkRCQjc0Mjg4RjdGQzREMkMxQzI5QUNCRkI1MTAxRTA4QwotOjEwNTc1MDAwQkJDQzI5RjE3ODIyRjA2MjdGREM2QkZFNTI4QTM2MDhERQotOjEwNTc2MDAwRkQ3RkIxNEVFNUYzRjYyNzlFOENFMTc4RENEMUUwNTM2NgotOjEwNTc3MDAwMDlDMEE3QzFDNzY1QUE2N0I1MTdFQkYwNTU1NURFQjNEOQotOjEwNTc4MDAwRjRDM0ZFQ0VCODg3RjQ0MjdDNERGQzNDNkE1ODVFMUJFNQotOjEwNTc5MDAwRkNFQzIyN0VFRTc3M0UzRjhCOERGMjFFODMzMjY3NjFGQQotOjEwNTdBMDAwOUI3NDM2RkM0RTY3OEUzRjBFN0NFODE2RTFFQkMxRkYyMgotOjEwNTdCMDAwMTU0MkZBNDcxNUNFRDdFNDNEOTUwNEUzREM2QkI0NURBMgotOjEwNTdDMDAwOTUxRjRCRURBOURFRUU5NEY5QzIwNkJEMzMxREYyMUUwNgotOjEwNTdEMDAwQ0JDQzM4RTE0NjFDNDQ2OEI5OTc3MDVDQkU5QjdGMUFGRAotOjEwNTdFMDAwQzY0RjdFRURCNkM4QkNCNTExRTFCRUJDRUYzQ0VFOTAzNQotOjEwNTdGMDAwQ0FGOUVFMkZDN0NBN0JERjFCODkxRTBBRDlBN0JGRThFQgotOjEwNTgwMDAwNUJFNUVBNEE3NDlDOTlBRkNEMTk4Njc5QTkzRkE4RTg2RgotOjEwNTgxMDAwRjdCNTFFOEE0OEUxRjg3OUFFOEJGREVDOUZFOUFGOTdBQQotOjEwNTgyMDAwMEVEM0ZERjVGRUEyRkYzRkZEM0Q4NTc2RjJERUUxQzUxQwotOjEwNTgzMDAwQUZFNDA2MzFFRUM1MzVBNEQ1NTJGOTc3MzFGODlFQjhGQwotOjEwNTg0MDAwNUFGOEU3NTlBRDcyNjc4NEU4QzlCRjk3MzEzQUQ1QzZBRgotOjEwNTg1MDAwNzlFNkZGREI3RTRGMjE1MzY4QkNGRUZFQjNCRkFCMzA2MQotOjEwNTg2MDAwNEUzRTNBRUY3NzE1MzIxMzU2MUREMDUyNUI3RjU3MjNDOQotOjEwNTg3MDAwRkE3NzE1MzJGNUZCQUM4NTQ3RUEwRkUzRjcxNDQ2MEFEMQotOjEwNTg4MDAwM0ZFN0U1OEY0RDM3RUI5NUQxRUU1MTA3REM1QzlBRTNBRQotOjEwNTg5MDAwM0Q5OTNGOTFDRkY1RjgzMDVEQUZGQzE0RERDQjg1NEVERgotOjEwNThBMDAwNzc3OUFFMTM3Q0EwRkYzRTRBMTBGQzY5RkMzRThBNDEyQQotOjEwNThCMDAwNzdFMzc3NTI2QURCQzlERjQ5Rjk1N0ZCNUQ5NDY4RkFGMQotOjEwNThDMDAwNDRGRjRFNEEzNDdEQTI3RjM3NjU4NDE2Q0I3ODFBNUQzQgotOjEwNThEMDAwRTY2MkJFMzZFODM0OERGRTYzN0IwMEU3NzI5NUZGN0U5QwotOjEwNThFMDAwN0EzNTQ2QUREMzMzNjI3NTFFRUUyOTNENTUyQ0U1RkE2NwotOjEwNThGMDAwODVGNEZGODM1RUZGMTFDODhCNkYxMTRGQzI3OTE3QTcyNAotOjEwNTkwMDAwOEM4N0Y4NkJBRDIyNjY4NEMwRkQ4NDlDMkZGQkVCNUExQwotOjEwNTkxMDAwNzkwRjU0QUQ1NUM2MDMwMjQ0NTdEQzhCRjc1REVDM0Y1RAotOjEwNTkyMDAwRTQ3RDhFNjQxRkQ5M0EyMDJFNTNDNUVGMDdFQzRFNzdFNQotOjEwNTkzMDAwQUQxN0Y0NEU2MDNFNTlCQTU0OUUwNzNFNkNBOUUzREZBMgotOjEwNTk0MDAwQkI5ODk1NURBNTYwRkZGMjY4OTY3NjE2RkRBNzhCQTJDMQotOjEwNTk1MDAwOURGMzM4MkU1RjM1MTBGMjdERTY5RjFEOUQ1MTNGQjNCQwotOjEwNTk2MDAwOEJCQzNGNTI2NDM3RTY0NURBMjMzMzMzRjUzQ0NDRTE1OAotOjEwNTk3MDAwRkE3RUJDNTdFNjYxQTlDMzY1NUMyRERFRUJFNjczMERDQwotOjEwNTk4MDAwQzVEOTQyQ0Y2RjE1OUQ2N0Y2MDMxRjdGQ0M3NjdDOEIwMAotOjEwNTk5MDAwNDdEQUQ1OEQzNjc5OEY2NUUwMTU5OUNGQjNBRUVBMkQwQwotOjEwNTlBMDAwQjZGQjM3OTE1REFCNEFGQjY2RUQ5RDFDNjc0ODEwRDg4RQotOjEwNTlCMDAwQzc3RDI0QTYzOTA5RTNFRkI1NTY5OEVDODUzRTQxQTc4QgotOjEwNTlDMDAwMjkyRkI5RUYxNkI3MDlFRTE3NEEzN0I1QkY3NEFGQzcxRAotOjEwNTlEMDAwNTRFRjBCRjczNkQ1RTcxRUYyOUFFMEJDODY0MUE2RjZFNwotOjEwNTlFMDAwMDNERkY3OUJFMEMxOERFMzRDRUQ4NzFFMkQzMkMzQzM2RgotOjEwNTlGMDAwQkI0QTNDODEyNzY5M0UzMzk3Qjg4M0YyMUU3RDE5Mjc0NQotOjEwNUEwMDAwRTk2Mjk3RjY1NEVENEREMjlGMzBGMkQ3MzU3RDFENDRCMwotOjEwNUExMDAwRTdBRjc3QjJDQUZDNzU3Qjk1RDQ2QjlBNEJGQUI3RUVCOQotOjEwNUEyMDAwNjRFMTU2Rjk1QzRDMDNDM0I4MUI4MkYzQzYwM0U2M0M0MQotOjEwNUEzMDAwRjM4RTRFRTk1RjU5QzY0OEZGQzNBRUU3OTlDN0Y2OTZBNQotOjEwNUE0MDAwRTc1RThDQkM3MkYyMkJGQ0MwNzc3N0QxMzg5RDdGRUY3QwotOjEwNUE1MDAwNDBCRjRGMzQ5QTlGN0ZBMUQzM0Q3QURDNURFQ0YyM0M4RQotOjEwNUE2MDAwNURFRDRENzZERTNGRDc1Q0Y2MjYyNUUxRkNGMTU0MEQ2OQotOjEwNUE3MDAwOTRGQ0JGQzlEOUY2QkQ0RjUzNzUzRTdCMkNCNzY4QzJBNQotOjEwNUE4MDAwNzAyQTFGMjZCNUM1RjZENzc5RkQ3OTFCMjFFRjZBN0ZFRAotOjEwNUE5MDAwNkJFN0JDRjE5RkVBNkZFNkE1NzIzRTMzMkM5NjU5OTNGMwotOjEwNUFBMDAwQjJEOTFGRTQ3MzgwNDZCRjczRjU3RTdGMzk1MjY5NzNBNAotOjEwNUFCMDAwN0UzMzEzOUJGOURFMzU5MTY4Rjc4MDdGMzVENzRBODZCMAotOjEwNUFDMDAwRERCMTIyNDk2RDAzRUZBREU3MzI2NDlFRkU3NUFCNDM1NQotOjEwNUFEMDAwNzdGNkEyNzFDRUIwRDdEOUU0ODUwMzQxMUJGODYxN0M3QgotOjEwNUFFMDAwMDFEOTkxQjQzRTVFREUzM0ZDMjExN0QxRTNFMUE1NTYyNgotOjEwNUFGMDAwOEU4Mzk1MEQ3RjY2NjZBMDNCRUNDQzY2RTYwNzI0QTJGQwotOjEwNUIwMDAwNjAzRjExRjZBNzlBRDMzQUVFQTYxMTMyOEZGQzRFNUM5NQotOjEwNUIxMDAwMkNDREU3MjU3RUUwNzFCNUU4RjE5MTE2MTEzQTc3N0UzQwotOjEwNUIyMDAwMjJEMDA2QkY2OUFFODM3QzBFQzFCRDU4RjI1M0E3ODg1MAotOjEwNUIzMDAwNzM1NkYwM0ZGRkE3Q0U0QjA4RUM5MDUyM0ZCNjNBMjE4OAotOjEwNUI0MDAwQ0YzOUZFMDRGRThDNzMyQTlFRUI2RDQ1MUI1QzM4MkYwQgotOjEwNUI1MDAwMjJDNjI5MTE3OEY4NjY4NDhDNUJGQzc5QjhBNDM3REEwMAotOjEwNUI2MDAwNDExRTVEQTgxREQ5N0Q4OUQ4NUY2ODExOUU0NEY3NEZGRAotOjEwNUI3MDAwQzRENUZGMjdFNjlGNjk5NTcxODZDRTRFNzk1RUE0OTNDMgotOjEwNUI4MDAwNTU2Mzc5NjFFRkFEREY3Mzc3MUVCRkVCNzI0MzhGOTM3RgotOjEwNUI5MDAwNzVCNENBNzVERkQxMkJEN0Y1Rjk3MkUxMDA3RkRGQUU5RQotOjEwNUJBMDAwQzk3QkQzQTJGMUNCRkYyMkUyMkFDNkY5OTVEODMxNTJBNAotOjEwNUJCMDAwOEUxODcyRTFEQzM5OTQxRUQyMEZCNUU5RjIyMUQ4RERERQotOjEwNUJDMDAwQzI3OTA3QjdDNTlCRDc3MUIzMkUxRkVFMzFGNDQ1ODA1QwotOjEwNUJEMDAwRkNGODdDOTM5QzEwRDhEN0FCNURBMUIyOUMyMDM5Nzk5RQotOjEwNUJFMDAwNTBBMzcxMTZFMzVFMTY3N0VCRUZDM0NEQkQ1N0VBQjE1NAotOjEwNUJGMDAwMTFGRUEyRkJCMDZGMzI3QjhENERBQ0U3N0QwNTc5M0Y4NgotOjEwNUMwMDAwRUM3QzNENEU1RTFDODhCQTlGNDVCN0M3Q0ZBQzU2RENENgotOjEwNUMxMDAwRjhERDg4MzlBQkNDRjVGMzVENDczRTg2RkYzODM3RkFCRgotOjEwNUMyMDAwOUUxQTYzQkZFRTI3RTIwMDhEQzM3NTdCQ0QyQkJDN0EzNQotOjEwNUMzMDAwRkVGRDMyOENFRjRDNTBERTdCN0RFRUJDOTIxRUZGNjk4OAotOjEwNUM0MDAwMDkzRTI1RTE1Qjg0ODhGQzFEMDlDMzJFMzA2MDBGRjZGOAotOjEwNUM1MDAwQzkyMkVFNjEyMUZDQzZGNjg2N0U1RjZFNkQzM0JGRDEzMAotOjEwNUM2MDAwQzBFRkI5M0MwRjdEOUY4RUNBNjUyQkQ4OUY5MUY5MEQ2RgotOjEwNUM3MDAwMjQwRjc4NUZFRTM4RDVDMzBFM0MxRTM4Q0RFRDhGRUY4NAotOjEwNUM4MDAwOEFFMUJDOTIxM0JFODZGRUQ4QkYzNUY2RTlCQTZCNzJDNAotOjEwNUM5MDAwMUZBQjY1NTdCQ0NDNkY3MDU5MjRCQzQ1REU2M0JGRThCMQotOjEwNUNBMDAwRUZDMUZFRjA2MzFCMDM0Rjk5Q0UzOTY4OERFNjdEQkVEMAotOjEwNUNCMDAwRTg1MkFCRDlDREZFQTY2RjgwMTYzMzgyRjhFQTk4RDVBQwotOjEwNUNDMDAwRUJGNDEyN0NCQjZCMUZERkQzMzU5RUZDNDdDODM1RTQ3OQotOjEwNUNEMDAwQTVBQzQ4OTVFMzY3RjkxNTM4MkRGMTU3MjVGMTc3MDVGRgotOjEwNUNFMDAwMTk3QTkwOUZFRjBBOTI5RTg4NjMwQUYyNkFBOTJDMEU5NQotOjEwNUNGMDAwMEZFNkZFN0ZFRTNFRDg5NEIzM0VCOUZGN0I3NjI4QkYxOQotOjEwNUQwMDAwQUZBRDFBQ0M3MEVGNjBGM0E4RjdBOURGQUIzNDk3MDdGQgotOjEwNUQxMDAwNzFBNEE5QjVCRjFFMUIwQkZBRkZEMUI1ODJDQjRFRTYwRAotOjEwNUQyMDAwRjMwMzQ2RDk3Qjg0QTQ0QkEzQURFREZBM0Y4RTkwRUJGMQotOjEwNUQzMDAwNjNDRjA4QTFERjU3MjNGOTdENzE4REMyRkI2QThCQzE0OAotOjEwNUQ0MDAwRTM4MEVGOTRGNzczMUFGMEU5M0ExRDFFMkJFMTI1MkIzRgotOjEwNUQ1MDAwMjQwQ0Q1MDQzQjc4QjZGRTNCNjk5QkY1RjgwQkU2OEYyNwotOjEwNUQ2MDAwMTJGMzQ3NUM2MDlCMUU5RkMxRkM1MTYyRkU3ODBFNzk2NgotOjEwNUQ3MDAwMDUxOEYyMEEzMEU0MTU2MEM4MkI5NDkwNTc3OEZFNzkyNAotOjEwNUQ4MDAwRDI2OERFRDdDNkJFREQ5ODg4RjU4NDdEQkIzMTExRUJDNQotOjEwNUQ5MDAwMDNGQjc2OTEzMEY2RUQyMkRCNjNERjJFQjIxRUZCNzYzRAotOjEwNURBMDAwOTFGNUQ4Qjc4Qjg0QjE2RjE3RDkxRUZCNzY5MUIwMThENwotOjEwNURCMDAwRjRDQjU2MTg3MkNEM0ZDOTA0NEYyMTdGNjA0Q0M0N0E5MgotOjEwNURDMDAwQzZCRTVERTRGN0IxNkY2N0ZBOUU3NkJERTlGRDZCQzVBRgotOjEwNUREMDAwNTJEM0ZCRDhCNzhCNkMzRjZCQTk2MkRBRDcyMzA5QzhDMwotOjEwNURFMDAwN0E3RENFREExNEU2QTM2NDVGRDFCQzExNzlGQ0JCNTY5MAotOjEwNURGMDAwMzdEQUJBQjI3Q0UwMzhDNkUyRjI1OEFGQTQ3N0REMzhDMQotOjEwNUUwMDAwNDk3RjhCM0MxRkExMzRGM0VGMEI5Q0JFQzUyRUUxQjE0MwotOjEwNUUxMDAwRTZGQzZEQTNDNEJFRDcxODlCRENGNzQyODk3RDJGOTRBNgotOjEwNUUyMDAwRDhGNzQyODk3REFGMzEzREU0QkUxNzRBRUM3QkUxMzlCQQotOjEwNUUzMDAwRjZCRDUwNjJERjBCMjVGNkJENTA2MkRGMEIyNUY2QkRDNwotOjEwNUU0MDAwNTA2MkRGMEJFRjYxREYwQjI1RjZCREYwMUNGQjVFMjgxNwotOjEwNUU1MDAwQjFFRjg1RTc4NzY5MUMyNTExNzIwQ0Y2N0E3NzkzOUY1RAotOjEwNUU2MDAwNDk3QzY4RjIzM0REMjYxOEY2N0E2NDdCRDhFQjkxRjUyRAotOjEwNUU3MDAwQjBENzIzRUI2MUFGNDdDMkIwRDcyM0RCQzM1RThGODRCQgotOjEwNUU4MDAwMUYxQkVFNjEzRDA2QkIzREYyM0REOEVEOTE3MEJGQkFFMAotOjEwNUU5MDAwQzA0Qjg4QUQ0RDU4NzdGMjAwQ0FDNjc4RTU2MTlDMzc5MwotOjEwNUVBMDAwN0NFQzg1MkI2NjU5NDkxRjM2QzYyODlEOTM0OEE2REI5NgotOjEwNUVCMDAwOTRBOUIzQzY0MERGRUFGOThGRkQ0NUIzMDVGMjQ3ODNFNQotOjEwNUVDMDAwMzMzOTgwQ0YxOTcyNUU2OUJGRUYzM0I4RkU2NUUzNUM4QQotOjEwNUVEMDAwMUNGRTExREQ3REJCMDRGRkVFOENCMURGNkVCQ0VGMjUzNwotOjEwNUVFMDAwQjU4REQyNjhERjBBQjdERDJFQkE3RkEzMURFNzU2NDUxMAotOjEwNUVGMDAwOEMwMzI3OUE5MTM3RTNCQkM1OTUwMzNGNjRCMzQ1RTExMwotOjEwNUYwMDAwM0M5M0NEQ0I2NDVFNzQzNDVGN0RBQ0RCNDc5QjJEM0IxMwotOjEwNUYxMDAwRjdFMTFDNEM3M0IxRTJDNUI5OEZFRTc1MUE5RjMzRUJGNAotOjEwNUYyMDAwMzc0MzU4NTQ1RkVCN0M3QTNEOTJDMDc5QjUwNzQ2QzgzOQotOjEwNUYzMDAwMzg5RjMxN0UyMzNFNEFGMjgyQ0YwRjBFNkI2RTE4OUQ0MgotOjEwNUY0MDAwNDhFREI1QzAyOEZFMUQ5Q0YxNzY2OTM3OTBBNTMxMDQ1NwotOjEwNUY1MDAwRkU2NERGODBFMkRGMTBDMUU3QUZFQkRGRDMwMjcyMUMyQgotOjEwNUY2MDAwOEYzRDMyNTFCRTE3MkJERjdCRUM5MTA0RUU3RkUyNzI0NgotOjEwNUY3MDAwODVGM0NDODY2RDEzN0U5QzUzN0U0Rjk3QUY3REI3ODU5RQotOjEwNUY4MDAwNTVGNDU3QkM1Q0Y2Njc3Q0I3Nzg1RDY3M0JDRTczMUJGNgotOjEwNUY5MDAwRjgyQTE2OEQ2MzcwOUZCNDE4QTBFMDRFNTlEMUQzQUE4OQotOjEwNUZBMDAwQjE1RERBN0U4NkRCMDIzQkU4NjJDRjQxMEQxRjkwMzRBMwotOjEwNUZCMDAwMTY3OTg4QTI1RUYwQkRBMTEzMDZCQzY5OUEyRkEzMkJBNwotOjEwNUZDMDAwMUZCRjgzMkFEODM3RDQwMkQ3NUJEMEVGNDQ0MjQwMEFBMAotOjEwNUZEMDAwRTJDOTA0NjMzRTlBMjZBQUIyMDhCRjU3NEQyQjY2N0NERAotOjEwNUZFMDAwRjc5RTIxMTRFMEJCQ0Y4Q0Y1OTY1NDdBQUZBRkY2QTJBMgotOjEwNUZGMDAwMDVGNjVBQkZCQTQ2MkU4RDc5Nzg4NzI1QTk4MEM3REI2QQotOjEwNjAwMDAwREM2MzMxRkVGMTYzMTU5NjFGRDE3OTNDQjAwRjE4NUU0OQotOjEwNjAxMDAwNkU2MzdENkVEODBGOEJFM0NGRTVGOUJDODczQzlGRDNEMQotOjEwNjAyMDAwODc2QzlDRTc3MzdBRjkxOUFFMkZERTFEQzM3OTNEREFEMAotOjEwNjAzMDAwNUE4NUU1OUE2MTM3MTg3OTNCNjVEN0JGOUIwRkZDN0M4MQotOjEwNjA0MDAwOTUxNURDOUNENDhERjVCQzdEMjRGMjY5QkFFRTRDQzA2QwotOjEwNjA1MDAwMTE5Q0UzQ0I3NzVGODVBMzdCQTc5N0VGOTZCRjU3QUJFOAotOjEwNjA2MDAwRUZFRjE4QkY3QjJBQjJGRDlDMEY2NkQ4ODE0MkFEQjcxNwotOjEwNjA3MDAwNDdFRUUzMThCRjlGNDZGMjkzREI5RERFNkI3N0YzRUZBRAotOjEwNjA4MDAwRDdFOUJGNzc2QUM0N0Q4QUZGOTI3QjEwNzgyRDdFNDg1RQotOjEwNjA5MDAwRkVGRUQ5RUM1NTc3MTc0RTIzNzg5RURGMTlDNkVGNjJDNgotOjEwNjBBMDAwNDVFNzYzMkQ4Q0IyMDM3RkVBRjc0RTNEMjNGNUY4NEZBOQotOjEwNjBCMDAwQUJGREM3RkM3MkU2MzU2OUZGMTVGRjY1RkY1NDY5QUY5QwotOjEwNjBDMDAwRDgzOEVGN0Y0NjhEOENENzg5OUQ4MkVGM0Y5QTUxMzMyOAotOjEwNjBEMDAwREE4MjdCQTQ2N0VDRjY3QjE1NEZBQjFERjg4NjZFQjdCMgotOjEwNjBFMDAwNEMzRTlCQzlGODdENUJCNzUzQTYyMkZGOTRGMDNCQkVBNAotOjEwNjBGMDAwMzE0NkNGNTdDQkUwRjJFQUIzMzIxRjc1QjI0QkFFRjc2MQotOjEwNjEwMDAwQzY2NzA0REJEMzJEMDE4N0NDMjNBQzE3N0E3RUFCOTkwRAotOjEwNjExMDAwRUY3QzgyRjg4M0U4NzM4OTVGRDk4RkI0RTUwOUIwN0I5RgotOjEwNjEyMDAwRTg3QkQzNjAwN0E1ODA4RjhCNTcyMDVGOTZERTY2QkIyOAotOjEwNjEzMDAwMzM5QThGMjc1QkMzNTdFMkZCOTNCRDM2RTZBRjdGQzYyQQotOjEwNjE0MDAwQzdCODk3RTM5QzVDMTI1NTJGRTE5Q0JGRDgyODdGQzc0NgotOjEwNjE1MDAwNjE5QTI2RjlCQkFGQ0VERjMzRTNGNEY4OTM0QkM2OTdEMQotOjEwNjE2MDAwQ0VDNTlGMzA0OEM0Q0NDNEQ2NTlDODE3OUU4OUU0ODU5MwotOjEwNjE3MDAwMEUzQzJEM0ZGMkY1RTJCMzY1RkQzNTIzQjdDRTVBMEU0NgotOjEwNjE4MDAwNjdFNjAyNzEwOUY1NjYzQkRGNUZBREI5OUNGQzNCMzQwNQotOjEwNjE5MDAwMTc4QTEzMjAzRTAwRjk3OEREMEQzRUZCRUMwOEY5NTgxNAotOjEwNjFBMDAwMzBBQTYwOEQzRjJGRTJCQ0UzRUQzMjBGNkFGMUVEM0Q4NgotOjEwNjFCMDAwREFCNzc1REVENjI4RTcxMDdFQjEzRTY2MjYzNkRFODg3MQotOjEwNjFDMDAwRjNFNjRCNDcwQUZGOTg0MUYyNzcyNkU1QkM0NDE4Nzk3RAotOjEwNjFEMDAwOThEN0U4RjBDNjNGMzdGQzZEOTU4QkYxQzFGMDBEN0Y4NQotOjEwNjFFMDAwREUzMzBCRjdDNzk1M0IxQjBCQzE2RTk1RDk1NUUzOTA3QQotOjEwNjFGMDAwNzdERDJBODczNDdGNjYxNkU0RDBBODMwRTREMDg1RTJDNAotOjEwNjIwMDAwMEUxQjQ3NEEzQTQ0QzcxRkU2NjQ0QkY5MkNGNEZCQzIwNQotOjEwNjIxMDAwM0ZCOUZERTkxRDkwRTdDNkY4M0ZCOUMwRUY2M0FDMUI3RAotOjEwNjIyMDAwQTlFQjg5RUFGRjlFNzMxRUQxRTczQkRFRThBM0REMzVDQgotOjEwNjIzMDAwQjIxRDdFOTdDN0RGODQzQ0ZBMEU2QTlEOUUzRjJCRUYwRQotOjEwNjI0MDAwRjUzMEU4MUI1M0Y3MURDNzNCNEFGNEZCRjA0OTlFQjBGRAotOjEwNjI1MDAwM0YzOURCRUZGNEQ2NDA4RUY0MTYyQjcxNUU2OEE2MkEyOAotOjEwNjI2MDAwOUE3OURGRjgzQ0JBNEIzQzNFMzJGREVGMEI5MThGRkI0NQotOjEwNjI3MDAwQzg2RjYzRTU3OTFEMUQ3RjMzRUMwRDJGMzlCMzVBRjFEQgotOjEwNjI4MDAwRjdEMUQyM0ZEOEE0RkMwQUY3QzBCRURDMzU1NTMxOUMwQgotOjEwNjI5MDAwREY1NjMwQUFFODUxQzhCQkI4NkMyRkRGODNCMUM2MkZEOAotOjEwNjJBMDAwRjlDOURFQjU2ODMzOUU5N0FGN0VGMTYxREM5NzUwNTkyRQotOjEwNjJCMDAwOUZDNUJGMkI1M0JDRDdCNzEyRTcxQzBCNDY2OTRGNjA3NQotOjEwNjJDMDAwOUVDNTJFMzdERjFCNTJCMTNDODlGNUQzQ0NGNjdBREM2NAotOjEwNjJEMDAwNTUzNEYzM0U5QzgxRjcwMzdBN0NFQTlFNTFGMkZCQTc4QQotOjEwNjJFMDAwNzQzRjAzODI3MDkyQTlERDg1RTI3NDMyRkYwNkY5MzlBQQotOjEwNjJGMDAwODgzRjZBQUUzRDFDMjc3MERGMkNFRkE5QjA4Qjc3NjQxNgotOjEwNjMwMDAwRkMzMUJERURCODQxQTYxRTZGQ0NGMENBRjg5MDgxQkYzQwotOjEwNjMxMDAwM0I3QUNGNjYzOTY3MzNFMkI5RTdGMDY3M0U4RjY5OTQxRAotOjEwNjMyMDAwNkVCRkQ0RUZCMzZGNTBEODVGMkQ1OUEzRjJCOUYyQjE1RAotOjEwNjMzMDAwRUE3OEJFQzc2NUYxREQ4QTg3RDdEN0JEREQzOERGN0I1OAotOjEwNjM0MDAwRjFFRDY0OEQ3OTcwQkVDQzUzRDg3RTAwRUU1QjU3RENFNgotOjEwNjM1MDAwQjA0QjY2ODAxNjExRjE5RDkyQjU4Mzc5QkQ5NTA0QTk2NQotOjEwNjM2MDAwNkNFMzVFNTNBM0JDRjZFRUZEOUQ5RUYxODA4QzdFREU1OQotOjEwNjM3MDAwQkYyQzcxRkJFREM5MTFFQjdENEU5RDYyQkE1RkMxODBGMAotOjEwNjM4MDAwODU1RkM2REI2NjA4NTI5MDM0OEUxOUREM0QwQUY2MTUyRQotOjEwNjM5MDAwREQ3RTg5ODdFQjZFQzhCMkUzRjc0ODY2RDA5NzJEMzk2QQotOjEwNjNBMDAwMTdFRUZGRkY5NUYyRkYwMjM3MUMyMDUyMDA4MDAwMDAxRAotOjEwNjNCMDAwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkU1N0RCRQotOjEwNjNDMDAwMDk3ODU0RTVCOUYwNzdFNkNDOTk5OTI0MzNFMTY0MDE3MgotOjEwNjNEMDAwOTIwMEYxMjQxMDg4ODAzODYxQTcyRTFDMTIwMjEzMDg0NQotOjEwNjNFMDAwMzA1OTQwRjA4NjMwODEyMEExNDU2RjA0OTdEMDQ2OTlGRQotOjEwNjNGMDAwOTA4NTEwNDE0Mzg5MEQ1MkQ0NjFGMzU2NEIzNTJFRDcwOQotOjEwNjQwMDAwNDJDNTc2MDBFQjUyNTEzMTQ4NkIxNzkzNjE3MTY5REREQgotOjEwNjQxMDAwNTIyOEI1QkQwRkY3RkFCRkVGRkI5RDkzQ0MzOTk5MDQxNQotOjEwNjQyMDAwQjRGNkZFRkQ5RjNGM0U3OEYyOUQ2RjdGQkY3NzdGREYyMgotOjEwNjQzMDAwRUYyNDNGOURCRENDMjYzMkQ2QjU0RDkwRjdBNDMxNTYwMgotOjEwNjQ0MDAwMkVBQkI2RjE0RUM2QkVDNDlGRTk4QzJENkYxNkQ0QzBEQwotOjEwNjQ1MDAwRDg5RTcyN0UzQTVCRTY4NTcyQjRFQTYyNkMxMjYzNjUxRQotOjEwNjQ2MDAwQjI2MjRCNEVDM0E3NkM4Qjg3RjdDQkVGMzgyMkIxNDQ5NwotOjEwNjQ3MDAwQzY1NjhDNjA0Q0M4ODJGNkYxNkU5QjEzQzc1RjBERTM2NQotOjEwNjQ4MDAwMEI4Q0REMkMwNzczQjFGRUU2QjEwQUFCODk4M0Y2NzU4MAotOjEwNjQ5MDAwNTkzNjA2RjNGOUI2RjA3OTdDOEQ3MUI2NkJBMDVDNjY1RgotOjEwNjRBMDAwOTU2REMzQTA1QzEyQ0QxOEI2ODdGNTA1QjA3Rjc5NTAwNQotOjEwNjRCMDAwQjVDNTNCNzE1Q0I2QUNEMEM5RDcxQjFGQjZCRTMyNkQzQgotOjEwNjRDMDAwQkRFNUNENzFCNjk1ODZGN0RCMjQwNUNBNEIxODUzREJDNQotOjEwNjREMDAwQzJGNkE3M0ZBN0FCMDJFRDY3Nzk1RDQxNkEyQkFDQjc2NwotOjEwNjRFMDAwRENFRjkyNzFERTcyQUI2QTczRTNCQTcwNUNFOEI3QTQ1QQotOjEwNjRGMDAwQTU1NTRBMEJFQjdGOEQ2QUExN0VEMzU1ODU5RUY5RTlBMAotOjEwNjUwMDAwQzEwQzAxRjc3QjdCOTQxQkQ3QkI0NDZFOTYxMDlFRjlBMAotOjEwNjUxMDAwM0E5QzFGRTQ3MDU4MjkwNzMzNzBGQzk1MEUwRTA3N0RENgotOjEwNjUyMDAwQkNGMjE2M0U0RkVGRjU3MTc4OTdCNzk0RDkxNEE4QkYxNwotOjEwNjUzMDAwQzVFQTRENkQ4NUZFQjdDMDNBRkRGMDVDQjJFMzQ4ODYxMgotOjEwNjU0MDAwODBDRkNBMjhCNzAwRTdDMTY0NUZBQUQ3RDVEM0ZGODMzRAotOjEwNjU1MDAwMDc2RjRBQTVGREMzRkExMURFMkVCNzMyMkIwOUQ2QjM1OQotOjEwNjU2MDAwQTIxOTE2QTNEMDkzRTYyRDlEQzAyQURCQzJFMDc2OTMzNAotOjEwNjU3MDAwNkE2NTZDMjAzRTJERjQ2NENEQURBQTYzMTBDMDgzRjEzMgotOjEwNjU4MDAwOUZBQjZDMjc2NkUwM0U2QUFGNjY2QzIzRUNDM0U3N0M4QQotOjEwNjU5MDAwN0UwNkVFNTNGRTJFNjNFMjM0NThFRjk2QjdBOTdFNDU5MQotOjEwNjVBMDAwMTI5MzA1QThCN0IxRTcwNEFDQjc5NTQzMUYyODMzN0YxMgotOjEwNjVCMDAwQUUxQUNBRTQ2MzdEOTlDRUQ4MzAxQzE5REEzQjAxN0Y0QwotOjEwNjVDMDAwRkNDOThDNTU0RTUxNjhERTI1MkNCNDg0MEQ4NzcxQjZGQwotOjEwNjVEMDAwMTRDMDFDQjBDRUMxN0M5REE1MDM1OEU1MzMxMUUwRDU5NQotOjEwNjVFMDAwQTJBREY3NjZFREJDNEIyQ0VDMjUxNkRGNTM3RkFGNzZFMgotOjEwNjVGMDAwREUyNTg4Q0Y2MUZENzEzQzFDNzc4RDVFOUYxRENDQjg3OAotOjEwNjYwMDAwN0Q2QzRGN0I3RERFOTI3OERFMEZFOTAxRjE3MDhEODYyNwotOjEwNjYxMDAwMDdEODdFMkRCNUU3RTU1Q0QxQjlCMTFFRjZCMzc2QUJGMAotOjEwNjYyMDAwMThCMDBCRjhEQzVCM0YwOENCNEYwQjZFODRGQkM3NkJERAotOjEwNjYzMDAwN0ZGQUU2MjI3OEZFRTkwN0JCNEI3MTdGRkEzQTU2RkVGNQotOjEwNjY0MDAwMkQ4QjI5MDk3MEJFN0ZCQjhFOUVFNUMxNjk0Qzk5RDAwOAotOjEwNjY1MDAwN0I5RkM3QTZGOEJFQTc0RTBBQzM5RkVEM0YxOUU5ODNFQgotOjEwNjY2MDAwRjkzRjdFRjJGNTBDODRGMzFGMDAwNzQ0ODBGM0JGRkQ3MQotOjEwNjY3MDAwNjRBRkM0RDI3QkQ2QkZCQ0YxNkRBOUNDMTkwRTJGODFGQgotOjEwNjY4MDAwRTBENTk0RDk0RUU3QjcyMjkzRjc1QjUxRjdFNzMyM0M1OAotOjEwNjY5MDAwMEZFNkI0MjkxOTY5QkRDRkJGQUNFRTY5REVCRUNBNERBNQotOjEwNjZBMDAwRUQ3RENFNUZGM0YzNEY2MUIyOTg3Q0Y5RjNENkNGRDc4RgotOjEwNjZCMDAwN0NFRThGNDhERTYwOTI4MEU3RDM2Q0EwN0ZGM0ZFMUZGNAotOjEwNjZDMDAwRDZENjFERDBFOEVGNjYwRDhGNkZBRUQ4NDZGRDk2Mzc1MwotOjEwNjZEMDAwOTZFRDE1NjFERDRCNzRGQTJEMzdCRUQ3Q0ZFN0ZDMTY2QQotOjEwNjZFMDAwODlDRUU3RkM5NjhDODYyNDJDQjdGMUYzRjk4RUQ4MzY0OAotOjEwNjZGMDAwRUU2RTY4RjdGMTlBRkRCNzI1QTdFM0FBMDNBOURFNkI1MgotOjEwNjcwMDAwRjhGOUIwMDlGQzdDRjBCOTBBQ0U4NzI1NDQzQzlGQTc3NAotOjEwNjcxMDAwQzJDRjY3RDVBM0ZDN0M1NjNDRjlDNjdCM0Y1MzA4RkYyQwotOjEwNjcyMDAwRjhGRUI2REEwM0M4N0Y5N0I3M0Q3REVBNUJGMDdFNDk5NQotOjEwNjczMDAwRTMzNjI5MEREQUZENDI0REEzN0RFOUZENTc1NDY2QzlDNAotOjEwNjc0MDAwMkMxNkY2RDdCODVCNDIzRUYwMEI1NTg5ODhFNzNBNUNDOQotOjEwNjc1MDAwOTk5NUYzOTk0NzI0MzhEQjM4QUE2NzQyN0M0RkZCMjU4QgotOjEwNjc2MDAwNEMxRDhDN0M4NEY5ODdCMkZEODlCREQ3RkYyNzhEOEVBNwotOjEwNjc3MDAwRjJEM0REQjZDMUM4QkZFQTYzRDgxRTE5RDc1MTc2M0Y0MAotOjEwNjc4MDAwMUJEN0JCQkRGRTNDMUJDNUU5NjIzOUNDODNGNDc5NzZDRgotOjEwNjc5MDAwODYzQjE1RTlBMkM0NjIzMUQwOUJGRTNDQUREMUQ3OTBCNwotOjEwNjdBMDAwOThCNjI1QjhERTIxMDk0Q0FFMDUxMEZGMzA1QUNEQjY5QgotOjEwNjdCMDAwQzBCQzNGRkM5NjQzQUU3NTYzN0Y5RjgyRjU3NjA3OTMxRQotOjEwNjdDMDAwRkQwMEYyM0QxNjY1M0NFMTI3NkM3OTUzMzJDMjMyMzQ0QwotOjEwNjdEMDAwMDlGOURFODgzNUExM0ZFM0ZBMTA5REEyQzZGM0E3MEJBNQotOjEwNjdFMDAwRjY2RDlGQzFGMTA0Q0E2QzEwN0YxRkM0RTczMDZCMUJBQwotOjEwNjdGMDAwRjFBOUU4MkE4RTdGMzZGNjBFOTU2REMwQjcxMDZGRjVCOQotOjEwNjgwMDAwN0U0M0Q4MDkwMURGMjdDMzVBNzBGRUE2Q0NFNTc0N0UwQgotOjEwNjgxMDAwRDIwODRFMkY3REVERUZDQjJCRENERkQ5MzQ1RjgwRTQ0NwotOjEwNjgyMDAwNDQxNDkzRjdDNEQxRkVENjYyQjk3QjdGOTk0Q0I1NDAyRQotOjEwNjgzMDAwRkZEMkVGNURCM0JCMDk4NjNDNUJBMzFFQjU0MUZERDkxQQotOjEwNjg0MDAwRjU0RUVBRkY0REVERDdCQ0NGMjVFNTY1ODY3RDc2RDNDNQotOjEwNjg1MDAwNEQzM0YwQjUzNDdDNEU0OEM1NzU5RTc3QzA0NDUwN0ZBQgotOjEwNjg2MDAwRjZGNjI4MEJDMkZGNkMxQUQ3MTcxODBCQjkwQUUxNUNCMQotOjEwNjg3MDAwMUVEQjAwQkZEQTE5RkJEMTA2MDczRDlGRDgwMEM4MzRFNAotOjEwNjg4MDAwOEFCMTAzMUI5MkE4RkNFNDA2ODU5RTZEMUIzMkU5N0Q0QwotOjEwNjg5MDAwRkEwQzhFN0YyNUQxNkEyQ0NBRTVBRTFBOTdCQzA3RTFBNwotOjEwNjhBMDAwMTFFNDc0RDM1MTM1OUNFMDAwN0EwMkU3Qzc5QTVFRDBCOAotOjEwNjhCMDAwMjE4NzVDRjE2MTdDMUFFNEM3NTY5NDc3QUM2QTM4REJCNwotOjEwNjhDMDAwMEY1Mzc0MzQ5Rjc1NTlDNjIyNUVGMkY1RTlFREVGOTBDRgotOjEwNjhEMDAwOUFEOTdBNkNGNzkwMTBEODBGRTNDNkRDRjE3NkVFNjBBNwotOjEwNjhFMDAwOTREMzJENjk1OTAyRjQ1QjVBNzU4MUY4RTE1MkU3MjA3RgotOjEwNjhGMDAwODVBMTFDNzdGQTFBQTY2MEZEOEUzNDc5MjM3NDhCNjkwMgotOjEwNjkwMDAwQzlFQUE4ODJGRTJCRUI0NkI5QjFGRDFEODJEMjQwRjM0NQotOjEwNjkxMDAwRDYwODZFOUMxNzdFNTRDNzY0RTAwM0Y4MUI5NDU3Mzk2MQotOjEwNjkyMDAwNUYxRUExRjE0QjBCRjJDQjE1RjdBRjZGNDg4NkYyNjlGMgotOjEwNjkzMDAwMEJFQjEyMDEzNEY5OTY4MjU5NThDRURGMTlFN0FFNDVCOAotOjEwNjk0MDAwNzk1QkNCRjdDMzc2MDExRjc1RjRGMDUxNzVBQUY3RkE5RQotOjEwNjk1MDAwMTk3MENFRUMxMkUwMUI4QzNGMUFENkM2NDREQzRGOUI1QwotOjEwNjk2MDAwOEFFQjY3QTA3N0VDNjdCODVFQUYwREZCQkZBMEYxQ0JGOQotOjEwNjk3MDAwOEU5NkQzMkU0NTNCOUYwMkE0MUI1RkQ3RTk0RDc4QUU4MAotOjEwNjk4MDAwNEU4QkJCNDk0MUY5QUVCQ0E1MjBEQzVGMTNEOTFFMDU3NwotOjEwNjk5MDAwRjE4N0Q3QUY3NUYxN0E3ODZFQUM4N0ZBQjVCQkM1MDBEMQotOjEwNjlBMDAwQzIyMzU3MkMxOTE0NDJGRDZCODc0ODdDNzFFNUVFQTI3NwotOjEwNjlCMDAwNDFBODZGQUM4NDMyQ0FBRjlEMzgxNUUwNTM0MzRCMEVFQgotOjEwNjlDMDAwNkZCNzJERjcwNzdFRTBBN0E5MDJGMzIyM0YzQTY3MERDNAotOjEwNjlEMDAwMTUyMDNDM0VEQTNEMzhCRTA2RjVCRDVCNkI0NzMyQTg1QwotOjEwNjlFMDAwMkZERkJEMjkxNTlGMUZFRDhFNUE4QzdDN0NBNjVDMzA1NQotOjEwNjlGMDAwMzMwRUY1OUY1RDcxNTlBMkQyNDM2NzE1MzMzODlEN0RFMwotOjEwNkEwMDAwRkJENjlDQzEyOEVGRDZGQ0NGQjE0NzY0OTBBQjJCMDFERAotOjEwNkExMDAwNDc2NTE4Rjc2MjVCNENDMDBGNERENjZDMzg5ODJBMDI1OAotOjEwNkEyMDAwNkEzOTEzN0QyQjEwNkVERkIxMUM1RTM0MERFNUIwMTA5QQotOjEwNkEzMDAwNzgyQzk5REEyQjgzRTU0ODc0QUNFQjUzODBDNzBBRTBENQotOjEwNkE0MDAwRTlBREY3QkU0QkUzN0M2QTM5M0U3RjA5RjQ1RjczRUIzNwotOjEwNkE1MDAwQjNCMTM4Q0U3NzFFM0MzOTU5ODZGNzU5MTM3REZGOEU3NgotOjEwNkE2MDAwRTNGRjQ5RDhGRDk4MEMyMDYxM0I3NjhGNDNGOTUxMzlGQgotOjEwNkE3MDAwODM3MUJFMUFFRjVEQjQ4NEMzRDdCRDQ3RTk3QkJFOEE3QwotOjEwNkE4MDAwODMwMkMxNTMyRjJGMEQwQ0IwMzFENDRCODNDQzI2RTM5RQotOjEwNkE5MDAwNTM2NkE0MDc3RjI0QjIyQTk0RUZCQTVFQTJCRkFGRDU5MwotOjEwNkFBMDAwRTBGMkQxODBFNjU0M0NGRkQ1OEZCNUE2QTJGQ0Y4QTM1NgotOjEwNkFCMDAwOEI5NzdERkI1RTU5Rjk1RDU4ODdBRkM1MjIzM0MwM0I4QwotOjEwNkFDMDAwOUY5NTkxREVCQkMyQ0ZGNTY5NTYwMUNDMjRCOTY3RkUxNAotOjEwNkFEMDAwQUQzMzYyNjhGREFCNzc0QzMwQzgzRDkwOEYzNENGMUYyQgotOjEwNkFFMDAwQURDQzgzRUJCOEFBQjYyQjBCRjVBN0RGNUI4MzJCRjFGQwotOjEwNkFGMDAwNUM3RjBGRkFBOTNGMERDRjg5RTNERkVGOUJDNTU5RjgwMwotOjEwNkIwMDAwREU3Rjg3QzAzMjA0MkMzRkVCMUFFMTI0M0RDQzQyN0M2RgotOjEwNkIxMDAwRkQwNTI5QjAxRkRBQkIyNkI2MDU5MUVGRERGQTVDREM3NgotOjEwNkIyMDAwNzgwNDYzQUUzODc2MzBFMkNGREE0M0QyQUMyMTVDOUY5MgotOjEwNkIzMDAwOTI3MUY2MzVENkEwMkREMkI5N0Q1QkQzQTNCQUNCQ0Y1NwotOjEwNkI0MDAwM0Q2RDQzQkM1RjczMDBGNDAxQTRDRkU3ODQwMEVBMzdENgotOjEwNkI1MDAwNkJEQTlFN0UzOTA1QzZCQkVENjBEOTA0OUM0NzZGN0YxQQotOjEwNkI2MDAwREI3MzFDMEU1MTJDNjQyQjBBRDNBQkNCMzJFMzFCODY5OAotOjEwNkI3MDAwMDA4RjdDNzJDNkJCQ0IxRTg0MkQ5NUUxMzk3RDBCRjg0RQotOjEwNkI4MDAwRDdGNDVGRkI2QTQ2RTA1M0E2N0QzMjZCMTdFOUUzQTBCQQotOjEwNkI5MDAwNUZEOTUwRkVERjVBQzdDN0JCMzVCM0JEMjE5REY2NTUzRgotOjEwNkJBMDAwOTBDMEMyQ0VGRkE5MTkxMkY1RDNGQkMzQkVBOTVGQUQzOQotOjEwNkJCMDAwRTNERTQ3NDNCMDVFQjVENkNBQTI2RTg0QjI5NUZERTE2RQotOjEwNkJDMDAwMzE4NDFGOEI5NUY3RTMzRUFDRUNEQ0NCRjBCQzVCMUM1NwotOjEwNkJEMDAwQzA5QUUwQjlBQjcyRUQ3RjUwRkIxQUJCMkNDMkIzRjY4MgotOjEwNkJFMDAwRDZFQUE3NDIzMDlGMjIzMjJGODNGRUZFRUM0QTFBQ0YwQwotOjEwNkJGMDAwNkZFM0YyQTczNUU2Qzk4NzZFODE3MjU1QjFEMzBERTgxMAotOjEwNkMwMDAwMERFNTU4ODJDRkUxQkIyQ0M0RTc5MzU5RDczMTBCM0MzQgotOjEwNkMxMDAwMDczM0EwMjIwMEQwNDc2OUJFRTNDNDc3MThFN0M3NzdERgotOjEwNkMyMDAwQUY1MzAyQzg4RjYxRTUwMkUyRjlFNzJGN0UzODAxRDc0MgotOjEwNkMzMDAwN0RFMzU1QTEwQjg4NTc1MkNEODdCRTk5NDBGRkVGQ0MxRAotOjEwNkM0MDAwOTBCOTdFMzIzNjM0MDFEQjBEM0NBQUYxMzVFQjA5OTI2NgotOjEwNkM1MDAwOEY1MjkyMTI4RkZBNEExMEM3QzJGNUZEREQ0Mjc4NzA0QQotOjEwNkM2MDAwNTgwOEVFQzU3OTc1Mzg0NTY1NzNGREVGRUY2RURGN0IyQgotOjEwNkM3MDAwQjgwRTU1OTBFRTBDNDJGQjA1NDJBQzFCRjc3QjIyNUUzMgotOjEwNkM4MDAwQ0MxODBGRjRGQ0I5RjQ4NzM0MUNENzBGNjgyQjBFRTkyRAotOjEwNkM5MDAwRDE2M0IzQjVBNURCNTJBNkVFNDBCOENDMDA4MEIyRUIxMQotOjEwNkNBMDAwQzE5NjE5MUJDRkFDNTBCRThGNTlCQUVDQjA4RUVDQUU2QQotOjEwNkNCMDAwREZFREFFODFCMkZDRkQwMTRDMDQ1MTU1MUI5NUNBQjIwQgotOjEwNkNDMDAwNjE3Q0UxMjg2QzE0RjY3Mzc0RUNEMTE1QjhDRUZCQkE3NAotOjEwNkNEMDAwMUMwQ0UxQzQxQzQ2M0RENzY2NDkwRTdFMEZGMUI5MzI0QgotOjEwNkNFMDAwRDZDRDkyNTAwRUI1NjUyMTNGNjJCNzM5REQ0REQwN0VDRAotOjEwNkNGMDAwRTlBNTUwQzZCRkEzNUNGQUZCNzFEMkQzNDdBNUZCQkU4MgotOjEwNkQwMDAwOTgwMUZCNEExMUQ1RDMzRUE4QkY0RjBFMEU3RjAwQzc5NgotOjEwNkQxMDAwQUY4QTcxRDc3MDM5QzJDMkQ3N0Y3OEZEREY2MzEzQTAwNQotOjEwNkQyMDAwREZFNzVEMjNBRDRGNDFCQkNGNTU4NzFCMzQ1OEQ2RjEwQwotOjEwNkQzMDAwREQzMTJGNUQwN0U1RUIzNTc5NjI1RUQ3RTc0OThBMTVDRQotOjEwNkQ0MDAwRUQ4RUNGQkIxQzQxRDQ0MzNFNzc1QTAyMDI4MDM0RkIwOAotOjEwNkQ1MDAwRjBCMTc3MDU5MERGRDkwRTY3NTA4Q0M1N0VEMjI3RTE2MAotOjEwNkQ2MDAwRjI4NjlEMTgxNkY3QzExODEyMzFFQzRCODBFNzIwNERDMgotOjEwNkQ3MDAwMkVERDM4QzA2ODNGQTY2NDczM0IyODI1OUJGMzFGQUIwQwotOjEwNkQ4MDAwRTIyNjM4OUZGNzVCNTkxM0UyMjE4MzMyQ0U2Qjc1QzgzOAotOjEwNkQ5MDAwNERCMEJFOUYzQjFGNUIwQTk0Q0ZDRUZGMkQ3RDAwQ0EzNgotOjEwNkRBMDAwOERGMzg3ODcwRjYwNjNGQkU2OEIyNzUxOUYwMDNENjE2MgotOjEwNkRCMDAwRDE3ODM1MkQ3QjUyOEY3QzVEQThDMTI1QUFGOTI2MDk5MwotOjEwNkRDMDAwRTE1MTBCRjA2ODAyNzgyQzc0NUE4Mjc2RDgxNzJCMzY3MgotOjEwNkREMDAwQzI4MTU1NzU5NTIyREUzMDRCQUMxQkU5MDZDRjE3Q0YyQgotOjEwNkRFMDAwNUYxMTJDNURFQ0JBREVFNzNERkQ5MjFDRkMxRTk0OTcxMgotOjEwNkRGMDAwQzI3OTIyNUM0QkNGN0Y3MENEMDM4Q0NFRUQxQTVDMDczRAotOjEwNkUwMDAwOUM2M0ZEQjVBQ0U3RkNGRUQ1Q0U4QjU5REQ4RDc4MEVDRAotOjEwNkUxMDAwNzc4QkFFNjYzQzg3NUEyQkQ3RjdGQzgwNUJGQkUzQThFOQotOjEwNkUyMDAwREI2Mzc4MkU3N0Q3OEVBMDczMUE1NDBCN0MwMkVEOTQxNwotOjEwNkUzMDAwMUEyQkRCOTM4ODdDQTU5RERBRUZEN0Y0NDE5NjU5NDk0QwotOjEwNkU0MDAwN0NBNkI0RDYyRTIzRkNCRTg4OEVBNUZFMENDRTU1NEE1OQotOjEwNkU1MDAwODlDNDY3Mzg1RkE5MkE2N0M0NTc5NjhEQUQxNEYwRENFMgotOjEwNkU2MDAwOTM3MDA2RDg0Rjg3MjVFNEMyN0Q4NkEyNDA4Qjg0RTdDNQotOjEwNkU3MDAwRkFFQzc0QTJGMzIxQzgxMTg2RjM3M0M2RkUwRkFGNzc0NAotOjEwNkU4MDAwRUQ0MTdFMjMzQTg2M0M3QzBFNDQxMTZCRUM4QTFEMEQ0RAotOjEwNkU5MDAwRUI2QTExNTgxQkVENEJEMkY4Qzc2QTI3RTk3MzJENzFDNQotOjEwNkVBMDAwMDFFMjZGMkQwQjg3QkE3MUFGOUYzM0FEQkUyMjlBRjgwNgotOjEwNkVCMDAwQ0I3NTE2MEI5NUJCOTYwQzIyN0JBQzI1MEU1ODJCOEVGMgotOjEwNkVDMDAwQjc2NDM0RTkwRENGRkY4RkM4RURCNTBDQzZFQkIzRDg2RQotOjEwNkVEMDAwQzgxRDU4NUY5MDQ5RTNCREEwRjNBQkFEMkUxQUFGQTUxNgotOjEwNkVFMDAwNDA0RDhFQTZGQTQxMTZFQzVGOUVFNjVCODdGODkxMjIzNAotOjEwNkVGMDAwRjI3NkEwNzg1MEJCOUQzQkQ1NjQzQ0NGOUQ4NTM2NkEyOQotOjEwNkYwMDAwRjcwM0MxQkI2NDI1OEU3MzhEOTNGNEM2RDA5MkU4MjczNgotOjEwNkYxMDAwMUZFM0M3MTk0NEZGNTI0NzE1REZCNzRFMDc5NTUzMzg5MwotOjEwNkYyMDAwM0ZCRENBN0ZGQTIxRTQxRkZFNkMzODExMjdDQThCQ0YwMAotOjEwNkYzMDAwOTYyMjVFQUI2MkFDMUI1MEI4RDczOTdGRDE4REU3QUNERgotOjEwNkY0MDAwMEI4MENCMTJBMzNCQzg1RTU3MzIxODAyMUJDRTRGNjY5NAotOjEwNkY1MDAwRDk4ODI3QzcwMDlFRDBERTJGQzEzOTI3RjI3M0RFOTg2QgotOjEwNkY2MDAwODhFNzNDN0Y3N0Y4MzlDMzc4RkVCQkUxQkRCMDM2RDYwMQotOjEwNkY3MDAwMkQ0Q0E1NzNDRUM0RjFBQjU4QjQxQkVERUJFRUYzRkI3NwotOjEwNkY4MDAwNzkyMDBCOUZBMkM1OUQ2NDA3NTgzQzlGRUU3QjMwN0IwOAotOjEwNkY5MDAwNjA4RjFDNzlGODNERDgxRkMwQTVENDFFOUFENDhDRkFGNgotOjEwNkZBMDAwQjk4NTU1QjQ0NUUwMDM4RjY2NzNGQjQwNjY1RDEyQ0EzMAotOjEwNkZCMDAwRDc2NTNBRkU1NzlCRjAzRjM0MzRFRTgzMTgwREZGQTE5RQotOjEwNkZDMDAwREZFMUMxREVERDc4MEU5RjBBMjcyN0UzQ0JFM0ZGMkQ0QgotOjEwNkZEMDAwMkU4RTM0RkVFMzlBN0M3OTJCRDFGQjIzNUNERjA4RUIwOQotOjEwNkZFMDAwRDFBMUVCNTBERjU4NkYyN0ZEOTc1RDNBMzYxNEU3QUQxRQotOjEwNkZGMDAwNEVGM0ZFMThDNzhCMUFEMTY1NDNGRjU0NDc3Mjk3ODQyRQotOjEwNzAwMDAwRkJFQjU4RjJBNzYxQTg2NzJEQUI3QTg1RThGMzRBRDc2NgotOjEwNzAxMDAwQjczMTY2OUM4NDcyMzNDRTkzMjU4NUEwRkY2MDRGRDYyRQotOjEwNzAyMDAwMkZGMTVDREFFN0Q5MTU3QjA0M0ZDODkxNzk1Mzg2QTEyQgotOjEwNzAzMDAwM0U3NDMyNkZDQTMwRTQ5NzI3ODcwMUM5OTMzQzc1QkIxMQotOjEwNzA0MDAwOTA4RjRBMDdBRjcxRTEzQTRGN0EyNjUwNTk2MThBNTZCQwotOjEwNzA1MDAwMkVFQTk3QkY3RTBDRkMzNTA4OEFDMDFGQzE1RUMzRTdDRAotOjEwNzA2MDAwODc2MEFGMDU4MURGQkUwRkY2MUEzRUNGODJCRDg2RUY4NwotOjEwNzA3MDAwNEY4M0JEODZDRkNFMEQ2RTdBN0ZEMjMzRkMyMEUyQzUyMgotOjEwNzA4MDAwQzU2NkVFNDc1OTYxNzU0N0Q0Q0JENjFDMTA1OTUwRTdGOQotOjEwNzA5MDAwNkZGMEVGREJGQjYyMENFNThBNUQwOTg2RjIyRDJEODAzNwotOjEwNzBBMDAwNDE4RTlFNzJGOTk2RTE4NkIyQUU3RjJFQUYxQjYzNzg1OQotOjEwNzBCMDAwRUZBQjlFNjAyODZGOEMyOTk1RjA5Q0UyOEFEMzM4N0NEOAotOjEwNzBDMDAwOEJEMzA4QkVBN0YyRkE4MDZGREUyODgyNkZGQkMyNTExNQotOjEwNzBEMDAwQzMxMDdFRUQwODVGRDQ4QkFEOEEwQkUxMjcxRDVDRUFGRgotOjEwNzBFMDAwNDIzREE2QkQ3ODM4OTUwMUJFNUIyN0UyNzg5QTFERDU1MgotOjEwNzBGMDAwNUVEQzNGOUNGRjg4NzAxRTg1RjA3NTY4RjA5NTA5OUVFOAotOjEwNzEwMDAwNjczNTM4OUY0NjM4OEY0MkY4NjZEMkIzMURFMTBDRjVEQgotOjEwNzExMDAwQjVDNTAwNjdDMEM3OEI3RTk0MUU4MDVGRDYyRTI5QTI5RQotOjEwNzEyMDAwRkVCQjRGMzRFQ0JGNjI1NzhDMDlBRTQ2Mzg5NzZGMTlERgotOjEwNzEzMDAwNjIyODJGQUYxQjZFMjhFQjcwRjY1NTFCRTE1Q0U0OTlCQgotOjEwNzE0MDAwNjA2QUM3RDgxNjkwN0I0NUY4MEJFMEY5MUI5MzY2MTM2RAotOjEwNzE1MDAwM0YzRDI5QjBDQTA0NzhDNkM5OUMwRjVBQkQwMkY5REY2OQotOjEwNzE2MDAwRjBBNzE5RTQ3NzIxRkUwMkY0NjM3NTJBRjU1ODVGMDc0QQotOjEwNzE3MDAwRURCRjBGNkREMTA2NDYzQjg0MzFCNzU0MDZFRjE3N0E0OQotOjEwNzE4MDAwQTI2NDk0RUI4QjU4MjVEMURCNjJENjRDQ0Y5QjU5MUI2NAotOjEwNzE5MDAwM0Q0QkQ4MDk3QTk2MzI0RThGOUY5Nzg1MjZFM0YzRjdCOQotOjEwNzFBMDAwODlCRUY0MUNBMEU3MzUwRURGQTM4OTY4QkYwREYzOERGRgotOjEwNzFCMDAwNEE0MEJFRTQ4QzI3RkJCNEFGNzM0MjREOUI2OTdDQ0E0NgotOjEwNzFDMDAwMzk1OURCMTdGQzE0RTNEQUExNUY3QkNDQjgzQkVGNTRGMQotOjEwNzFEMDAwN0FFNkQxQzc4N0Y5REMzOERGQTcxMjlGRTc4RDQ5NTNEQwotOjEwNzFFMDAwODYyMUZFMzFFRjQwODM1REQ1RDc3Q0RCMzQ3OTU5RTZDQgotOjEwNzFGMDAwRTE3MDQyREYyRDk2Q0YyRDE0MDIxQkExN0M2NDlCREQzNAotOjEwNzIwMDAwODY3RTg2NzM5QjI1NEQ2RkJGOTdFQ0RERDNBN0I4N0YzNQotOjEwNzIxMDAwRTY1Q0ZERUM1NEM0QkY5QTZEQTM1MjExREZDRjQ5NEExRQotOjEwNzIyMDAwN0QxNUMwRkZEQzM0RTBFMzZFRjJFN0I4NTE0RTlDRjEwRgotOjEwNzIzMDAwQjhBODNGNDg4Q0Q4MkMzOEI3MTVEQUZFQ0UyODZFREJCQwotOjEwNzI0MDAwN0E2OEJGMzA1OTY0N0U2OEVGRjNBN0M1RTJGQUY1N0QyRQotOjEwNzI1MDAwOUJEN0JEN0M4QkREODAxNzBCQTYxQUNCMEI5OUFEMDc5NgotOjEwNzI2MDAwNEZEMkYwQkM2RDNERjVBODJGODkyNTAzN0NGREQ4REZGQQotOjEwNzI3MDAwNTU3RjU4RkRENjRCNjE3OEY2NkYzOUFFNDRENDZGRDg0MAotOjEwNzI4MDAwMTQzNkU1NEJCMUE3N0Y1RkYwRkQ2MjQzQzU1QjJGNDkyNAotOjEwNzI5MDAwM0RGMEQ1RjE2QTUyOEVCNzFDQ0YwOTVFREI5MDNGMDJGQwotOjEwNzJBMDAwNUMyQzI4OTc0RjFFRTQ3MERDMTY3M0UzRDZFQjAwMEVCRgotOjEwNzJCMDAwODVFRjg4OENDM0I5RDRGRjdCQzRFNzQzRENCRjZGOUVFNgotOjEwNzJDMDAwMjdBNEQxNzVBN0M2M0ZDQkVBREUyNjNCNkU1OTc1MDFEMAotOjEwNzJEMDAwRjE5RjQyNjdENzMwRjQzRjFEQjkwN0Y4MEJGMjk1Nzk1QgotOjEwNzJFMDAwOUNCRjFDQ0IxQkY1RjAxRDMwNkU2N0JFRThCNjAzM0U5RAotOjEwNzJGMDAwMURDOUJGQjAxNUNCMjdBQjQ1MTlFN0VEM0M3ODQxRTM3RAotOjEwNzMwMDAwRTM1RDZGNEM4MUY1N0RFNjkxODhDRjc0MUVGQ0U3RjA1QwotOjEwNzMxMDAwRjNDMjQzMUE5RjA5NzA3RUJFQ0FFQTY1MEQzMEVGMkE5OAotOjEwNzMyMDAwODAwQkRBRjNGRjZDQkU3RTM5N0VERTJFNzk3MzA3MjI4NgotOjEwNzMzMDAwQkM2QTA0MzdGQUUxNkFGMkVDQTQ0N0I0MDM3REQ4Mzk5OQotOjEwNzM0MDAwM0VENURGODFGMjY4MkFEOEMxMzJFMjlCNzcxMkRBOTYwNQotOjEwNzM1MDAwMjcwRjBFMUY4OEYwNjI3RUI1M0Q3MzcyMEZCRUFGQTg3NwotOjEwNzM2MDAwNUU5NThGN0U3NkI2NDUzQTgzRkEzNzNBNDU1MDRFMTc4QQotOjEwNzM3MDAwMzJFQjk5NTAxODlFRkE5RTkzN0FDQTg0RDdENjMzQTFERAotOjEwNzM4MDAwMzBCQzM2RTM2OTlCMDk0RjJGQjI0QkE5QjY3NDVFN0ZDMAotOjEwNzM5MDAwNjI1MDBGREZDMzlGNzBGRTcyOUIxODZDNjA2OTNENzg2RQotOjEwNzNBMDAwRkJEN0JDQjc0QjUxNTkwMEJFRjIwMkUyRUI1REUzRDMxMQotOjEwNzNCMDAwNUUwQzA5NjE3Q0U1MEFGOTE4RTAzM0M5QkZENjk4MUI1OQotOjEwNzNDMDAwQjk3RUIxOTBDQkJGMjMwQjZGM0FGQTNCODBERkM3RjM5NgotOjEwNzNEMDAwMzg1RTdGOUNGNzUzRTIxRjFGODM5Njg1Rjg3QTJBM0YxOQotOjEwNzNFMDAwMjExNkYxRUY3NDVEMTFEMTk5NEUzRkU2NzlEQTM1N0NDMwotOjEwNzNGMDAwRDNEQjE1NUExNUM5MUQwMTNGOEIzQzQ2N0NDOTc4NkVGRAotOjEwNzQwMDAwRTkwMDk0QTc3REFENUYxRjU3NkZBNzhGNUI4ODcxOEREMwotOjEwNzQxMDAwQjE3RDhGRkI2MTBFQjc0NzMzRjY5NUY0M0IzRTE4ODI4MgotOjEwNzQyMDAwM0RGODg1RkM4NDQ1Rjc4QzAzRTUyMzNGQjk4OTYxREM5MQotOjEwNzQzMDAwRjU2NDMxODdDRkM5MDNBMzg4MUVEQjhCNzVGRENBNDc2RQotOjEwNzQ0MDAwRjVBNzNDNjIwMEY1RDg5M0M1MTNERTk4ODhGNEUzOTU2MAotOjEwNzQ1MDAwNDg0RUY3MzVFRjM5NkQ1RjY3MzQzREEwNTNEMzAzRjRFMQotOjEwNzQ2MDAwN0FGMUMxODU4Qjk2RTBCODFBNUYzOEU1RTFGOEZCN0VDQQotOjEwNzQ3MDAwQ0I0MkQyM0I2MDNERTQ3RkIyQ0RGQzlGMzJGNDNGODFGMgotOjEwNzQ4MDAwN0RFRDQyRkVENTlFMkYzMjVDNDc2MTVFMTFEOUQ1ODVEOAotOjEwNzQ5MDAwOTIzMjMwOTI5RTYwREVCNzc5QkMyMzNGQjE5MzVGMEU4QgotOjEwNzRBMDAwQzYyM0JBMkE5RTU3QzQxQTcwNUZDNURDRkZEQjhFRUQ3NwotOjEwNzRCMDAwNjFCRUUyMDc3OUY5MThCNjlGNjg4MDEzRjE5MTc2RTAxMgotOjEwNzRDMDAwMjMyODNBQTQ4MzM3OTBERUI0QjJEOTc4NEUyQjFBNjNCRQotOjEwNzREMDAwNENGNDZFRTQxN0M1MEIzOTlGNkJDRkNGMTkxODg5REZCOQotOjEwNzRFMDAwNURFRUZDRjRGRTU3N0FGRTE1RDgxRkNBQjhFNjJGNDlBOAotOjEwNzRGMDAwNEY4OTM3OEMwNzE2OUQ2OUJFNzQ1M0ZENjg1M0ZENzgxQwotOjEwNzUwMDAwNDNGOTcyRjhEOEE5Qzk5MTc2MUQyRkEyOTRBNURFMDg3NwotOjEwNzUxMDAwRUI2RjdGRDI1RTExOUVBRjMxNzcyNkI3NUZFNkNFRDQ5OAotOjEwNzUyMDAwRTJGNzVGNTFBRUNFOUEwOUZDMkE4NkY1OTJBQjdERjU2MwotOjEwNzUzMDAwRDdGOUQzQTgxQ0VGQkM5OTM4NUZCMDQ4QzI3RDVEMjk0QwotOjEwNzU0MDAwM0YwQTkzQzMwQkE5N0Y0OEIwNjFGRjZEOUE5Q0FENjg1OQotOjEwNzU1MDAwRTM3OEQ0MUE3M0ZGQ0I4ODg3OUY2QUY2RDA5MTc5OUMyMQotOjEwNzU2MDAwREY3RkE2RjFGQkNGRkU1MzJCRkY0NDA4MjBERjNDNzZFNAotOjEwNzU3MDAwRThFRTU4RDRERjNGM0MzODJBMTZFREIxMzM2REI1QjE5MwotOjEwNzU4MDAwNUM0RkY3Qzc3RTBCRjBGMzEzQTBDQjI2OThFRUEzQjZBMwotOjEwNzU5MDAwN0Y4RTlFNUVGQ0I0NjYwRkZEODhFQkU5QUJBRENEOTFBRQotOjEwNzVBMDAwRkRENERGQjA5RTZFRDZDRjczQzU5MkEzQkY4Mzc1N0MyQQotOjEwNzVCMDAwMThFMDcwMzRFQkVCMUYyQTRBQUM0Q0YwRTE3MEY4NEM0OQotOjEwNzVDMDAwNTI2MkQxQUY3NzI2QzBGOTdENUZGOEE4QzNFMTFDQzIzMwotOjEwNzVEMDAwMjE4Q0RGRjcwNUM3QjM1QTdGQkQwQ0Y2MjFEOTJENDVBNQotOjEwNzVFMDAwMEVGNzJGMTNEMTlGQjA0NTcwNjNCQzhBNTkxOTlCMEFCRgotOjEwNzVGMDAwRTc3OEEyMzg2QjZGNTM5ODlFMTE5NzJCMTJCRTlDQUUwMgotOjEwNzYwMDAwM0I1NjlBOENGQzA3MEM1REY0RjdCRTUyN0QyQzE1RkRBMQotOjEwNzYxMDAwQUM2NTA3NjI4ODNGOUFFNzJEQ0YzN0YyOTk0RkVBMEJBNgotOjEwNzYyMDAwQjI3RjBGRkQ4QURFMTEwMzBFODQ0NzdFMUNFNzVGNEY5OQotOjEwNzYzMDAwOEIwMTExQ0E5REQ1MzlCMUUxRkJGOEQwMjQ3NzU2NTk5OQotOjEwNzY0MDAwMkIyMzlFNjNDNTJFRTMzOTE2RTVEN0QwMzgyNzFGMTRBOAotOjEwNzY1MDAwREE4NDAxRjAzQzMyNEQ1MjVDQkRGQjE1NTlGOUZFNTdGRQotOjEwNzY2MDAwMUQxMEM5Q0ZCQkFBRUVDRjZGNjA3QzcxMTVGMDdCNTRBMwotOjEwNzY3MDAwMTM1RTY5QUM5RDhGNzg3RERBMkI1OTEwQ0YzQkRCMTJGRQotOjEwNzY4MDAwRTYyMzdDRkNDNUEyM0IwM0RBMUY2RjFDNEU3ODdFQTY2NgotOjEwNzY5MDAwMzE2NzEwQ0VGN0NCOTkyMkM5QkIwRjBGREEyREMyQjVENwotOjEwNzZBMDAwRjBGNDRBMkM0ODdFODEyMDlERTcyNzc1NDUyNEFGM0VBMwotOjEwNzZCMDAwNDRCODkwM0QyQjEzNUQ5Qzk4QzlFMzBFQTc2MTFDQUNBOAotOjEwNzZDMDAwQjcwMDlEQTAzRURDMTkxMDNEODEwOEY0NzE2MjI2M0Y5MQotOjEwNzZEMDAwOEZCMzk3MUUyMEZDNzkzOTcwMkMxNkY1OEFEMzZEN0NGOAotOjEwNzZFMDAwRkNCM0Q1NzIyQ0M2QTk1RUFGOUJFMEEyRjVFNUMzQjg4QQotOjEwNzZGMDAwQThGNzFFRTI3MkY0QzMzQThFOEZCODRFQjIwRjFCQjlEMAotOjEwNzcwMDAwRkMzODU5QjdFMkZFNjkwMDhGNEZCNzg4QTQ3NzdFREE1QwotOjEwNzcxMDAwNTgzNDdGMUE5RUY3MTY4OUNBMzkwNTBCMjlDRTcxMzI2MwotOjEwNzcyMDAwQzBFNUQxQTlDMEQ5NTIzQ0JGMEZFQkUwRjRBMTVDNzMxNgotOjEwNzczMDAwNjgwQUM5REQ0RkVBMjVDMjg3RjIwM0M2NzM1OUI4MjUyNgotOjEwNzc0MDAwQzY2Q0FGQzY2NjgxREU1NThFQkYyOUY4M0Y3NTE2REE2NgotOjEwNzc1MDAwNDlDQjkzNDA3RTAyRTU5RUNFMkY5MkQwNEY1OUU4NEYwMQotOjEwNzc2MDAwMzA4QzYzNjcwNTEyRTIxREVBOTdEODZFRjlDMzQ1OTMyMgotOjEwNzc3MDAwODI0ODdGN0U4MUU0REZCMkU3MDA5RjYwM0REMkJFRUJBRQotOjEwNzc4MDAwNDlERTk1MzVEQjBERjMxNjU2MUJFREEzRTUyNjdCQzhDOAotOjEwNzc5MDAwNkMyRjVENEU1RTlDRDZGMDU0QjczQjRFNEI5NUE1OTEzOQotOjEwNzdBMDAwRjIxMkU0NUM0RDJFMzA3OTE2QzJGRDBDMThENjRENTlGQwotOjEwNzdCMDAwMDBDRkU3NDQxNUNCMTdFQkEyODg3Rjk2MkQzQjdGODM0NAotOjEwNzdDMDAwQTY5N0RFODg3OEMwREM3RTM2NTVCN0QzQzNFODZDNzlERgotOjEwNzdEMDAwOUQ2ODkyREI0NkY4ODJGRUZDMDFFQUM3OEQwOTlBMUM3RgotOjEwNzdFMDAwRjUxNzkxREY2RTU0OEUxQTlGOEJFQkI4NTJGQkZCOEExNAotOjEwNzdGMDAwRjVEQjUyNERCRjJEMjVGREY2MjRFQUI3QjA5Rjc2NkMyMAotOjEwNzgwMDAwMTJENjFGRjQ1REYyRUY5QzlBNzcxM0Q5NUZBN0JBRkRFOQotOjEwNzgxMDAwNjc1RUNEN0ZDNkY1OTQ1M0Y5NDU5QTdGQzdBRDk3MDc0QwotOjEwNzgyMDAwQjA3RUY4OUNDRTJGREVEN0NFRTFBQ0M2Mjc0RjZCN0M2NgotOjEwNzgzMDAwQjI1M0IzQjcxQTM0Nzk1MUE3Qzk4QjUzRjk5QUJEOTU4RQotOjEwNzg0MDAwQzg0ODVFNThBRDJBQkIxMjNFNzM0QjRCOEM0OTNFMjQ1MAotOjEwNzg1MDAwOThFQ0E4MjFBNkYzMzFDQThCRUQ1RURGNkMzQzA3N0I2OAotOjEwNzg2MDAwRDI2OEMzN0I0OTFFNkZENENGRjcxRDI2M0ZGMjQ1ODVGMgotOjEwNzg3MDAwRTcxNTZENDI5Q0MwQjhDOTQyOUVBN0M1MUM2REU0NDc4MAotOjEwNzg4MDAwNUVFODU2QTg3RTA4QzYwQkExM0Q5QTU0OTg0RkEyRTMyNQotOjEwNzg5MDAwQTdGRTVFNEVFNEVGRjU3MjNDRUNCQTA2REJBNUI1NTFFRgotOjEwNzhBMDAwQjk3NjIxNjM5ODBGMzM0MjFGMDdDMDUxMDM3QUMyMTA4MwotOjEwNzhCMDAwRjQ2N0MzM0M0OTYwQTA2MTdCMURERjg3MTY2RkEzNzYyOAotOjEwNzhDMDAwRDkxNTRDMTZBMERERUFEQzM0QzI4NzI0QTYxMjdGMTkzNAotOjEwNzhEMDAwQjQ4NkE5OThGN0MyMDJDRjUyQkJCREY3QzIzRTAwRUZGMwotOjEwNzhFMDAwNDNCNUQzQzkyRTJGNzJDNEYyQjgzN0M4QzdGRUYxQUM2NgotOjEwNzhGMDAwODZDNzc3M0QwOUE0QjcwQ0I1NzJENEVDMTM2RkI1NzY4MwotOjEwNzkwMDAwOTdDM0RCMzAzREU4MkVBMjBCNjYyMTdGQzRCNjk4NzE4OQotOjEwNzkxMDAwMTJFMjY5QTFEMzRCN0UwM0MwRUJBNTc3QTI3RUZGQTI0MgotOjEwNzkyMDAwOERGQjA5MTY3MjNGNzA3QkRFOTQ4N0QxREUxREY3OTRDNAotOjEwNzkzMDAwOTM3Q0NBRUQyQjc1N0Y2NTE3RTE3MzY3NzU5MTFGRTUyMQotOjEwNzk0MDAwREVBRjNENUNDRThENzlFQTEzMEJFNkJENzUxRTY0NkUyRAotOjEwNzk1MDAwMkMxRkFCN0VGNkZDQUY0ODZGMTdDODFGNzRCMjNBODc3NgotOjEwNzk2MDAwRjM2NUM2QkM5OEM3NzlEMjkzQjM5MUNBNTNDMTMwQ0VFMAotOjEwNzk3MDAwNDI3QTUwMzc1QTcxMUQwMEQ3MjZBQTVGQjE3NTEyRUFCNAotOjEwNzk4MDAwM0JDNzQ1QzJERjI0MkRERjQ4QzY3MzRERUUyOTI3QUEyOQotOjEwNzk5MDAwNUE5OTFEQTQ3MjUyM0VDRjEzRkM5OUE2MUZCNDY5RTdGMQotOjEwNzlBMDAwRjlCOEU2QTc3ODRDQTM5QjE2OEQ2RUJFQUZEMUNENjYxNQotOjEwNzlCMDAwQjNERjc5MTdBNzlCOTE1NkY3RDYxODI4OEZGNEJCNDhFOQotOjEwNzlDMDAwQ0VCQzk1N0Y5NkQ2MERGNDJGNjM1QzM3MkQ0RjZDOUEwNQotOjEwNzlEMDAwMDg3MDFCNjMwRjExOUYyRTAyQjFCNzExRjYzMzIzQkYzRQotOjEwNzlFMDAwODZGMjE4OEI3QzhDRTIxNjg1QzUzNUI0QkUxMEM2OTgxRAotOjEwNzlGMDAwQUU0M0JEQTk0NjEwQjU3QUU0OEY2MzEyODJENEJFRDBERgotOjEwN0EwMDAwQzE2NEVDNUZFNDc5RkEwOEU2RTMyRUY0MDE2OEEwM0M3NwotOjEwN0ExMDAwQjNCODQ2MjBGODk0QzE3OEQwRkU0OEY1NzYxQUVGNTRGMgotOjEwN0EyMDAwMDU1RjQ3QkI4QkY3M0Y1OUM2NjQzRjk0MzM5OEU3RTgzRgotOjEwN0EzMDAwMUQ3QzlENUU4QzhCOUVBQTdFRjYwOEMxQkI5OEMzRkIwNQotOjEwN0E0MDAwQkE4RjJDMDY3QUNDMEE0NjFCRTg3QUY0QkU3ODQzRkQzRQotOjEwN0E1MDAwQTgxRDI5ODZGMjQwNkZCQUExN0Q4MkM3NDhFRkQxMjNDNQotOjEwN0E2MDAwQzYxQkVBNEY3QThBMkMyODY3NzUzQjRGRjc4Qjc1N0FDRAotOjEwN0E3MDAwQjhEQzlERjE5NEQzODJGMDU4QTRGOTBCMTA2MUQ5MjBBMQotOjEwN0E4MDAwQjRCQTE4Rjk3RDFCMzUzRDkxMzUwRjY3OThDN0IxRjcyQQotOjEwN0E5MDAwQkIxNkNBMTNEODVDNUNFQkMwRkM4NzhCNkQ1NjNBMkZDMwotOjEwN0FBMDAwMTg5N0Y4QzhBOUMzNTYxQUQ3OTE1NjI3QTAxRkYzM0VCNgotOjEwN0FCMDAwODBCMzE4QTZGRjM1RUFGMjREOEI1RkUwN0FBQzYxRUIzQwotOjEwN0FDMDAwODk1NzE4NjY4RTc1Qjc2RkQxRjA2OUJCQjYwRUUwREJDQgotOjEwN0FEMDAwMzMyNEIyQzczOTlFMjRFNDMzOEIwNEZEMDcxNjczMzk2RgotOjEwN0FFMDAwNkRBNkNCMzZBREZGRTM1QUZGQzczNDdDRUNGNEVDREQ3QQotOjEwN0FGMDAwMTg4RDcwNTlDQzQ4MUZDOTE1RDc2QzhDQzI3NUU0MzNFQQotOjEwN0IwMDAwQTJDN0I2RTBEMUU4NzBGREYxNjc3RDhENTMzQzIxOTdBNwotOjEwN0IxMDAwQzZGMTczM0UzQTdBODE1MDFCODVFN0JBMkJGNEE3MzczQQotOjEwN0IyMDAwRTFGOUMyQTcwRDFCNjM2MUJENEYwOEFDMEQyOTRBRTdGRgotOjEwN0IzMDAwOUZCQUZFN0RERDY3OEQ1NDNGN0EzQzk4Njg1MEZGQzI0NgotOjEwN0I0MDAwNjc0REJDRkQ2NEE2QTBCRkVCNjc5QURDNjlENEU4Mjc0QgotOjEwN0I1MDAwNjNERjU4RjIyRjVFREM2MTIzQkJFN0IxRjlBQkY2QjQwQgotOjEwN0I2MDAwQzA3QTQ3Q0RCREU3ODlFNzEwNUZFNkRGRjNCQkU3OTQ1NgotOjEwN0I3MDAwMUUzREJGNjg3RTcyMDdFNkYxOEZEQ0UwNjJDODFGRjQyRAotOjEwN0I4MDAwNzkzM0Y2N0Q5MjRERUI5NkFEMENGMUY0QzdGQjlGNUYxOAotOjEwN0I5MDAwOEVFMzNERkU1OEI0NDU4NUYxN0ZCQ0M3NEFGQ0U1RUE1QgotOjEwN0JBMDAwRkIxRURFQjM4M0U0OEQ0OTJGRjYxOEVERkNDNzM3QjcxMwotOjEwN0JCMDAwM0U3MTEwREY1NzNERkJFOEI5QjA3QzlEOTNGMzM2MEQ2NQotOjEwN0JDMDAwNDNCRjY5RkI4NjhBOTY5OTE5N0RGM0NGMjIxQkYzQTFFNwotOjEwN0JEMDAwRkZDN0YzQzIyN0NGQkMwRUYzRkZDNjc3RjVGODcwM0JBMwotOjEwN0JFMDAwNjBENDJDRUVGRjY5REY1MEQ1MzIxM0VDRDREMTIyQ0YxNAotOjEwN0JGMDAwNTc2MDU2RkY0Njg0QzdFODlGMEU1MjUwN0YwMzUyQjAyRAotOjEwN0MwMDAwRkEwMDk2OUUzOTUxMTYxNUY2Rjc5QjgwNzUzN0YxODE2QgotOjEwN0MxMDAwMzk5QjMzRjAzQ0IzN0Y5QzdGRjQyMzNDRTc1MzFBQkU3RgotOjEwN0MyMDAwRjdBMThGRTg3RUFBRUVCMkE0MTBEQ0ZEMkYzQUI4N0Q1MgotOjEwN0MzMDAwQTMyQUMzQzgzRTc2MkJDMzBBQzNGNEI5RjY3QkY0MzgzMwotOjEwN0M0MDAwOUVGQjNERTRFMzg1MjUzMTE0NUZENkUzMkVBMkU3Q0YwQQotOjEwN0M1MDAwRjVDOEU3OTc0REFEOUMyNEQzRkE4REYxRkMxNDg0REY3MQotOjEwN0M2MDAwMDQ4Q0Y3RjJCOEJEREY2RjY1OTQxRjA0NUI0MzNBQjkyQgotOjEwN0M3MDAwNUIxQzRENzkyN0VGQUVCRThCRTJGNkZFMUFCQjlDOTFFMgotOjEwN0M4MDAwNDg3MTgzQTdCMDVDMDU3Q0M3M0U5MUUyQjkwMUNBMzc1MQotOjEwN0M5MDAwOUVDNUYzMzcyRTJDQUU3REQ4QTZGNDBERkZCQUNCOUMzMwotOjEwN0NBMDAwOEZBNDlEOEZGOUZEQ0REQUI5RDRFMkI5NjQxOENFRTU4MQotOjEwN0NCMDAwQTg2RjYyODQ3Mzg5NzUxMDdFRTlFNzIyQzYzNkQyQjk0RgotOjEwN0NDMDAwMzA4NzMzMTNGMzNGMDY3Mzk0QzJGREJDODE3MkE4RTM3RgotOjEwN0NEMDAwOTQ0ODcyRUMzNzI1RUI2QUVFODZGMkY5NEIwMzE4RDIyMgotOjEwN0NFMDAwODUxRTU3Mjk0REUyNzkwODc0MjRDMEI3MjRBREZGNjA4MgotOjEwN0NGMDAwNERFRjQ2M0U4NjdBNzdBOTE2NzdFOTU4Q0EyOEVFQTI1NAotOjEwN0QwMDAwOEY3N0IxNkE4MENDQzdCQjhERjRFNkQyNEFBMDdGOTQ0RQotOjEwN0QxMDAwMjUzMTNGMjdGREEyN0UzOENGOTMyODc1NzYyREE1QkM0RgotOjEwN0QyMDAwNTVDMUUyQzZGOEY5NjA5MzVFRUY2Nzk1QjRERUMxRUYyNgotOjEwN0QzMDAwODhFNENGQjdDNDZDQTFGRTgzMDEzQzYyMTZCNkIyMTFEMQotOjEwN0Q0MDAwMTBBODNEMEE3NjMwNUEzMUFGMjQwNTVGMjg2MTdBOTYzMwotOjEwN0Q1MDAwOTZCNzNCQjhFQUE3NUMzRkNBODE5RUM5ODZGOTg0MkZEMwotOjEwN0Q2MDAwNjlGREI1RUY4QkM4MDdBQUVDMEFGMjNEQ0NEMTQyQkU0MwotOjEwN0Q3MDAwNERGMDRCNDMzQzZBQTVGRUYyQjc5OThDRjczOTk4Q0E4RgotOjEwN0Q4MDAwOTRDNEM5REMwRjg2RjM5OUQ3MEZFMzcxQkQxMEY0MzNBNwotOjEwN0Q5MDAwRENBRjUwQ0RFN0RGMzU5N0RGMDc2MTg3OTkxMjZFQjcwQgotOjEwN0RBMDAwQjBGMEY1MEMzNzk0MzUzRjk5QjEyQzI1RDkwQzcyRUExNwotOjEwN0RCMDAwMzc5NzhBMDY1NEY2RUJDNzMzRjZCNzI4REVGRUZEQkVDQQotOjEwN0RDMDAwMTU2MTc2NTc3QTRGN0IzRDVGNEM4NzczNEE5NUZEQjRCQQotOjEwN0REMDAwMTBEQjc3QkZFRDVFRjVDMDJDQzA2NzI3RjM2NkZGMEFBNgotOjEwN0RFMDAwRTBFMTdCNDcyNDc5Njc4OTM5NEVGMDA4NDU3MUY4NzRFMgotOjEwN0RGMDAwRUJCMzhCQjlCRTBCREE3OTBERTU1RDgzQkNDM0YzQzM3RQotOjEwN0UwMDAwN0NFRDkxODBFRkNDNkZDQzE3RDBFN0Q1RTM0QjFEMUFGQQotOjEwN0UxMDAwM0YwRUE1ODUyMkZBMDU4RjY5RjREQkI5RTE3M0NBMkIwMQotOjEwN0UyMDAwMjg0NUZEMTY3MDM5QjRGMTYzQzMzRDkwMDEwNTMzOEVDQQotOjEwN0UzMDAwRTFCQUNERjkwOEJBNUU4QTcyOTZGMEQ3Q0ZFNTZDODdDMQotOjEwN0U0MDAwN0YwMkYxOUQ4QkNDRDU0Q0ZBQkY5OURGNTgxOUU1N0ZBNQotOjEwN0U1MDAwREMyRDQ2QkI5QkM4NkY3NzJGRTU4RjU0RjlFREIyMUQyMwotOjEwN0U2MDAwOUVGM0RDNDY3RkNDODJBOTQ2Nzk1MEEwMjY5OEU0ODUxMwotOjEwN0U3MDAwRDFERkI1RDA2QjhDMTM4RDY4NTk0RkZDRUIyMkVBNERFNgotOjEwN0U4MDAwQzRFRkY4N0FBQzVBN0U5OTg0Rjc0QzQ0QjREN0ZERjQyOQotOjEwN0U5MDAwM0NBRUYxRTczNzM1M0QzMzBBRjkyQkJDOEZDMTA0NzM5MwotOjEwN0VBMDAwQzA0NzE3MEI1MTc5MDBBMkZDNzA0QzZENTcyOEVGMzE3OQotOjEwN0VCMDAwODFBOTU0MUVDODdDNTRENkYzMjE5MzU5ODA5RTdBOUU4MgotOjEwN0VDMDAwQ0IzMDE2QTJGMjU1QTgwRjg5NDg1MjBBM0Q4N0EzMUQ1MAotOjEwN0VEMDAwMzIxQ0Y1M0M3Nzc3QkM4N0YyMjc3M0QyMjg1RTUwQzBGRQotOjEwN0VFMDAwRDRGN0IwNURGRTg0NEY0OUVFRTVERkM0QzgwRkNGRkM4OAotOjEwN0VGMDAwRjUyQjU0Mjg3NzJDRDRDQTk4MDk4RkY5MjZCOThDMjNFRQotOjEwN0YwMDAwQTdCRjk2RDdFN0U5RTVCQTE1MkFENkNGRTBFREE1RDkwMAotOjEwN0YxMDAwNEQ3QkZENEVFMjVGNUFGRDI2NUVERjVENkU1ODMxMDNGQwotOjEwN0YyMDAwQ0I5Mjg1Q0E3MTVBRkJDMjk5QUE2RDM2RTYyRENENjZGMQotOjEwN0YzMDAwODQwN0MxMUNENTMxN0I2MDRGQjkyQzQ3OEQwRTJGQUYwNAotOjEwN0Y0MDAwQ0I1NTlERTFFNTY3QjNENUQ4RjA3MjY3QjYyQTg3OTcyMAotOjEwN0Y1MDAwODdFNkFBRjFCQ0NDRkQ0RUVGNDhFQTMwQjQ3N0UxRTcwMgotOjEwN0Y2MDAwNDdDMjY0OEU4N0Y4RjM5QUU0NEJDMTc2RUEwMTgxRTA1OAotOjEwN0Y3MDAwNjUwN0JFOERGMDkyOTgxQTQ0QTYwNDY0RTNDMDdDMjI4MwotOjEwN0Y4MDAwRTAzM0I2M0JBMTlFOERCNzUxREU5RjI1QzY5OURBOUY5RgotOjEwN0Y5MDAwM0ZEMjRDNUYyMTg5MUQ0NDNGREQwMkFCMkYxM0Y3NkRBQgotOjEwN0ZBMDAwRTY3QjgyRkY5NUJGNjMzRTBGRDA0MzM2RUFGOUExNkFCNAotOjEwN0ZCMDAwQUUwNzg0QUFCOTNGNDBBNzEzRkRCRDc5QkVDQkUxM0QxMgotOjEwN0ZDMDAwNTNDM0ZDQkNFOTNERTNGNkI1N0UzMzFFOUZEMEY0QkQ0MAotOjEwN0ZEMDAwNzY0RERGN0I0N0YzNEI3N0VGMzc2NDhERkJDMEQxNDNBMgotOjEwN0ZFMDAwREY3REYzNEYyQkZCMjA4QzdGRjZERUVGRDlBNTEyOTdCOAotOjEwN0ZGMDAwMUYzMkNBOEI4RTI4QjYzOEQyRkRDQUJFRDZFN0NDOTlCRQotOjEwODAwMDAwNTUzMDlCRUNEQkExMzJDNTE5OThDRUY3MzlCRkU5QzBEQQotOjEwODAxMDAwNUY4MTBGOEUxOUEwREJBRjZFMDdDMjIxODMyNUNEQzkwQQotOjEwODAyMDAwODQ3OUI3NzkxOEU5QUZCNTMzOEYxNjIyRkZCOTU4MDJCMgotOjEwODAzMDAwMTIwQ0Q2NzVGNjhFNzM0ODcxNEM3ODhBREIxM0NEQzM1QgotOjEwODA0MDAwMThBREQ3OTUyNjQ3QTFCRTU0QUZGMTREM0I4QkNCMUI0NgotOjEwODA1MDAwODFFQjFGNkEyNTc5NkI1RTc3N0Q2QzQwQzBCODYyNEEwMAotOjEwODA2MDAwMzA4QUZCMzcxMjU5MjAwQUM2NDlGMUI4M0Q5NEI3RTI2RAotOjEwODA3MDAwMTc2NTBGOTY0QkQ4RkM0QzI4MkY2RjExMTUwRjhDNzM3QQotOjEwODA4MDAwQUNBNTg4OTVDM0I4RTU1MzgxQ0Y1MTY2M0FDRkE3ODg5MAotOjEwODA5MDAwRDdGMDc4OEM5RDUxQkU0NUVCNDAyN0M1QUJFQjM2OEZCMgotOjEwODBBMDAwM0FCMjEyRjk2NkIyQzgzMkEwRkREOEZBRjExRUY0N0JEQQotOjEwODBCMDAwRDYzQUUzRTMyOUU2QTRBREE3RDZFOTdFMTVFRjYzRjg0NwotOjEwODBDMDAwNjUwQkJGNEYyMkFCMEVDQzQ3REY3RDg3RDU4M0ZDN0M5MQotOjEwODBEMDAwRDhEMzEzNjNDNTMwRjg5RkFEM0IxRjg1NzlFRThGQ0FBNwotOjEwODBFMDAwMTZBQTdGQjQzQURCNzE4QjEzRUYxMzA2NTVDQTMzOTA4RgotOjEwODBGMDAwQ0ZBODRFOTg3NzI3QjQxOTBDRTNERDVGNzFBNjc5MjREOQotOjEwODEwMDAwRUIxQjFGNjIzRDM2MDM5RUM2Qjg2RDI2M0ZBOEQxNkY5QwotOjEwODExMDAwMjk5OUY0ODNFNkQ5NUFGQzdCMzI5QjhDRTc3Q0VEMTNEQQotOjEwODEyMDAwOTcyNEQ0NzM5NzM5MTVGMkEzNjczNzBBOTQ5RjEyM0FBQwotOjEwODEzMDAwRTI0RUM1NzMzQUJCNzUxNEY5Q0RFQjFBNDVDRDZGRUQyMAotOjEwODE0MDAwMjZCRjc1NjgxODRCQzU3QjM2NjVDRDAyRTlDNTYyREQ3MwotOjEwODE1MDAwOUY2QkIwREY1NTk5NEEzMjhFNzNENUM0QUVFNDcwN0YwMQotOjEwODE2MDAwRDlBM0Y3REMxNTg1N0NCNEFFQzRBMkY5QjkxOThEQTNFNwotOjEwODE3MDAwMjhBQTIzMERGNkZGN0U5REMwRjMyNzI0NTlDMEZCQ0MwRgotOjEwODE4MDAwQUUwN0M1Mjg1QzU3QTdDNEZEMTQ0REMwNEZGMTlFNkVDNQotOjEwODE5MDAwRDM4Q0MyN0VFOTUwRkExQkFDMzNDQzZFQTk0RjRDOEYwNgotOjEwODFBMDAwQzY3OTdCRjA1NzI1RkZGQUI5RTYwOTE0MUZEOUQzOTg5MQotOjEwODFCMDAwNERGOTIwRTY3MUVFREJDMERBRDAzRUE5REZFMEEwNjcyMgotOjEwODFDMDAwQUZGQTU0NkZBQTFCRkFCRkJGNkQ0NjAzMDgyOUY2RkUyQgotOjEwODFEMDAwOTFENTQ5Nzg0RjY4NjVCMzlENDU0NUMwRTM3M0RCQTZFQgotOjEwODFFMDAwRDA3QzJCRjEzRTMzQ0VEQjVDNjA0MzM5MzFCQjY1ODZGRQotOjEwODFGMDAwMERFMTc2REYwNkY1RTlGMDc5RUUyQ0YwQkQ4QzdDMkZGMQotOjEwODIwMDAwQTZGOTY5QzIxMzI3MEJGQTExOUVCRkI4NDE0RDQ1RkQ2RgotOjEwODIxMDAwRTI1QzA2OEI5ODJGNzk2MjM2RDczMzVFQkZDMTRCRjc4RAotOjEwODIyMDAwNEFERTFGMTZCOUREM0JCM0I5REY3OTJFMTIwQkNBMEYzOAotOjEwODIzMDAwMkI3QjczMTVDMEI5MENFOEE5MDY1RTlENkQ5QzEwOEI1NQotOjEwODI0MDAwNzgyQkIxMzVDNEE0N0U1MzUyRTQ0NzdCRUUwMkVBRURBRAotOjEwODI1MDAwQzBDRjFCRUU1OUI0QTMxQ0RBRDVERjNCRjIyRDY0Q0Y5RgotOjEwODI2MDAwRDdEQUI4REVDQzdFMkQxMjVEODA1RTU4ODZGNEY5OTdBMQotOjEwODI3MDAwNjI4NzVDMUJDNjdGNTE3RjU0MERGOTgyNUU4NkZBOUQzMgotOjEwODI4MDAwRDQyODA2NkRDMENGQTVDMzFGRkMzN0RBM0I4OEI3NkE3OAotOjEwODI5MDAwMTgxRUQzQ0Y2NENEMkVEMEYyMzU5MjI2OTMzNjRFM0ZBMgotOjEwODJBMDAwRjU3MzE2MDU4MjBDRTMyRTJCMUM3ODlFNjYzREJEMTdEOAotOjEwODJCMDAwOUVGNDVBNDdEOEY4QThFN0NFNjQ2QTU0RDgzQTgwMjU4NQotOjEwODJDMDAwMDRDOTVGRUVFM0YzNzZCN0QzRUFBREMwNjBCRTBDRDM2QQotOjEwODJEMDAwREZDREY1RkEzRTQ2RUQzMEQyQUJDM0MzQ0YwQkUwREJDQQotOjEwODJFMDAwNkZCQ0VFRUE4MEIxREY0ODBGQTM3MzFCMkRBQTQ3M0Y5NgotOjEwODJGMDAwNDAzOURCMkE1MjdFRjU5ODU2MUVGRkJGMzg5NDkxOUY3NQotOjEwODMwMDAwQThBRkYxNzRGRThCM0ZENjQxMUExQzAxQUUwRDg5ODVEMgotOjEwODMxMDAwNzQ5RTdERjVCMzA1NEVBODY5RTM3QUVDQzNBQjkzOENFQwotOjEwODMyMDAwRUJEMkRCOERFQ0RFRDczQTE2Q0RGNUMxMzZCNENGRUMwRgotOjEwODMzMDAwMDFFMDdCRTNGMDc5NDI0NUY5OURCOUZCMEVCOUJGN0RDMQotOjEwODM0MDAwOUJGOUQ5NEE1NjY5NDM3RDRENTE0MjdCRUU0M0JFRDFEQwotOjEwODM1MDAwRTIyMkY5ODNFODMwNjIzMjVENUQyNEI5ODNGREQ0MzBENgotOjEwODM2MDAwQkVFNzdBNzA2RkQzNjg1OEM3Qjk1RERDMUZEQUI0NkRBOQotOjEwODM3MDAwRUYxMzRGQTBEQ0Q5MTVFM0U2NzEyNjdFNEVFMzk4MkU2RAotOjEwODM4MDAwRkY3OEZFQ0YyREFDRTc0NzE5QTQ4RDBGRUQzRkQyRTQ2NwotOjEwODM5MDAwMjlDMzUwRDVBMDlFNzhENTA3MDc5NjdGRjYwNEZDRkEyRQotOjEwODNBMDAwM0VBQjlDOEE3QzRDREE1REU0QjgxOUNBRTM2QzgxMjQ0QwotOjEwODNCMDAwRTRBN0I3RUNCMkY3QUMwQkZFRDk1QjhDNjU2OTlGQkQ0NwotOjEwODNDMDAwMTc1RTNBNzQ3QzgyRjE5QTBFM0RCMTYzMzlDQUE5NDNCMwotOjEwODNEMDAwMEUzN0E2ODgyMzdFRjkwRDc0MTI0QTJGMDA3QUVBQkM2NAotOjEwODNFMDAwRTczRkU4OUU3RUI0N0M3RTI5RTVCOTU3REJFOTdFOTdCRQotOjEwODNGMDAwMTlCRUZCNjY3M0JCOUY2OUY3MzY3NDdBOEE2QTFFQzUxRAotOjEwODQwMDAwRDBCRjc4NDZCMzlCQ0U2QzAxM0IxNUNBMERENTM2MDU1RgotOjEwODQxMDAwQkY2RkQwRTkyRTUwOTMyMjhDNjdBQkI2OURDNjczNjVCMwotOjEwODQyMDAwRTE3NjYyN0FDRjNFRjRGMTNCRkREQzBGRDkwMEUzMEIzRAotOjEwODQzMDAwMTFGQzdEOTcxQkVGNEY1RUI1QzIwM0Y4N0ZDMUVCRkRDQQotOjEwODQ0MDAwQjYwN0Q2N0Y3NkNCMEFEQTZGRDVDMUVBQ0U1RkUxRjlGRgotOjEwODQ1MDAwMEVGMkREODZGNTY3QjYwQzlGMkNBMDIzRDJBQUQwQkQwNAotOjEwODQ2MDAwQkZCQUJBNjc0ODlFMzQ0Rjg1Nzc2MENGMzdCNzU5QTNGNAotOjEwODQ3MDAwNTBGRkYwRDc1OTI4N0VEQkRDOTYxODNEMDJFNTk0RDNGNwotOjEwODQ4MDAwMTIzMUNFMUFGMDcwQkVEOTIzNEZCQ0IxRTFGQTUwRDNFRAotOjEwODQ5MDAwNENBRTBGMDk0Rjk1REM5RjBFRjBBQTNCQzVGMzE0NzU0NwotOjEwODRBMDAwRkQ0M0Q2RjA2NDhDNUQyNkZFMkNEN0YxM0NCNzFFN0REMwotOjEwODRCMDAwODhFQkQ1MTc1MUFGNDY3RDY5NTJCOTFDMkU5RkVBNjNGMAotOjEwODRDMDAwRjlGNzMwQ0E2N0JBRkQ3ODFGMzNDN0M5NDg3RTVDODVBMwotOjEwODREMDAwOTcxNkQwNkZFMTY0ODFEOTY5RjhCRDBDMzdDM0ZDREMxNQotOjEwODRFMDAwNzhEMDdGMTRDMEY4QzEyRDVDREY4OTc2M0FERDJBRTJBRQotOjEwODRGMDAwQkJDQUU5Q0EwMUZGMjEzQ0EzMzM1NTg2RjM1ODRERkFBNAotOjEwODUwMDAwODVDREE0M0Y4OEE2RjI0RThGNTE5RjUwOTgzQjE2RTEyRgotOjEwODUxMDAwRUNEQURBN0YxRTg3RUVDRjA1QkQ4OUVFOUJGOTE5QzAzNAotOjEwODUyMDAwMUZGMUQ0RTFBN0YzODkwNTQzMDJFRDBBQTZBQTRBRTJBNgotOjEwODUzMDAwQTAxRUJEMUZFRkI1NzFGRjhBNENGMTIyNDE2RDIwQkYxNwotOjEwODU0MDAwRkRBRTA5RENCRjkxQ0M3OERDMkI0NUU1RjZGQ0I4QTk4MwotOjEwODU1MDAwN0UyQTgzRkQ0MDcxMjhGNjczMTY4RDdDNzlCQkQ3Rjc5MAotOjEwODU2MDAwMENFMjREOUExMDIwRkIyRjdFMkMxMzg4RUNCRkE2NUVFOAotOjEwODU3MDAwQ0VBQUFFMkNBRUY0QzNBM0RDRkY1NzZCODk3NjQ3RkFDNAotOjEwODU4MDAwOUVDMkExQjk5QzFFQTM4RkMxREVBMDlENzg5MzgzRTJGOQotOjEwODU5MDAwNzlCOUUyODE0NkM0QTc5RDEzMkRFNEQ3REVDOTRFQzg0MAotOjEwODVBMDAwQzg0RjhFN0I3ODdFRDEyNUFGRjc3NTBGQzU2NUJENjk0NQotOjEwODVCMDAwMDhGRjI0MkI1ODU0QTBFQ0RBMzQzRkVFQjAzQkQzQTM5MQotOjEwODVDMDAwNTFENEJGOUJGQzNDQzFDMzBGQjBDQjgwN0ZCQkFCMTI2RgotOjEwODVEMDAwRTMzM0UxRkQyMzU1MUIwOUFFQ0E0MEVFMjdEM0VGOUZERAotOjEwODVFMDAwMjdDOEZDOUU3RjkzRjdCQzFGRUZGOUZFNzAyRUJGMDdENAotOjEwODVGMDAwMTQ1RDYwOUQ5MzBFRTVBQkFBNDMwMkQyREQyNjk3N0IwNgotOjEwODYwMDAwMzFFMjczQTNGMjBDOUQ0NzVBOTY2MjQxN0ZEOTEwMkIzOQotOjEwODYxMDAwN0JENTNFOUVCMTI3RTM3ODNEMEE0QUFDRkZDMUQyNDFFQgotOjEwODYyMDAwQkJDM0YzNDkxRUQwRjZGRDAzMjFCMkJFQjI3QzJFOTcyOAotOjEwODYzMDAwMjcxRDg3MDA5MDAzRDAzRTY2OUFGREZENzgzOUQ5Q0Y3QgotOjEwODY0MDAwREQ2NTgwMUJGNDdGQzBDRkVERTczRjdCMUUyRkY3NUIxRQotOjEwODY1MDAwQzkyRUQyRUNGN0Y2NzJCMkNGMzE1RTBBRjU3M0YyRDZCQwotOjEwODY2MDAwOTVGQkExRkM0ODVBRTQ3OTEzRjIzOTdDMUY3OTREREQ2MgotOjEwODY3MDAwMTEwM0YwRjg2QjBEOEY2M0Y1N0RDRUFBNjAwMURFNTIxOQotOjEwODY4MDAwM0I5MEE1RTIzQUVCNUNCNkM1OTFCRTI3QjMzMjlGRUZCMwotOjEwODY5MDAwQjcyM0IxOERFMEM1NDA5RUM3NUU0N0Y3RTk0REZBNkE0MgotOjEwODZBMDAwODBGNEUwMEIxNUUzRkQ1MzY4Nzc5NThDRTJGRkMwNEYzMwotOjEwODZCMDAwMjY0REE2QUJGRUY0RTM5QUM0RTVBODU5NkZENUY1MkI3OQotOjEwODZDMDAwN0RERUZCNTIyQjkzNTFGRjZDNzVBOUM0M0Y1QTQxNkY1RAotOjEwODZEMDAwNDUzQzJCQURFNjdBNkJBOUI1RUIzREJDM0Y5NDcyOUM1MwotOjEwODZFMDAwRTdCRjA4NEY4RDZEQzJFRjFCMDBCQzE0QzRCQkQ5NEU1MQotOjEwODZGMDAwOTUyMUJGMTk2M0Y3RDIzREEzNUFDQzVGOTc3QkY0NTdGRQotOjEwODcwMDAwMjYwRTNERTI4M0Y3RDIxMDkxRjRDNDE4Qjk4REY0NTdDOAotOjEwODcxMDAwMzY5M0U3RTVBQUYwMUZGMjFCNUQ5Rjc1OEVCNTFBRjIzRQotOjEwODcyMDAwNzdFREE2RkM1RUM5OTRDRjlCOTlBN0U1QzM2OUZDQzYwQgotOjEwODczMDAwMzU2OTYyQkY3QUQzQ0ZDMURFQzU3NTFEMDY3RTgzQ0Y5MgotOjEwODc0MDAwMjBEOEJERjgzQzBBNzYzOTNFNUYwMkJCMUNGREREMkYwOAotOjEwODc1MDAwNkZDOEE0RTdBQjFCRENGNEZFNTcxQkE2RDI3MzdBNkE4MgotOjEwODc2MDAwNDg0MjdEOUJGQ0NFRTQ3QzY0NDE4MUZDNzczQTNFMDUyNwotOjEwODc3MDAwNDY2NDhGQzVGQkM3QkM3RUU2OUM5NEZGRjA1RjBGRjU5NwotOjEwODc4MDAwODk1QTdCRkYxNzg0OUZERDY1QTZBQ0M0RjZBNTQ5QkM1QQotOjEwODc5MDAwN0MzMDJGNzUyNUZBNzc1RTJCNTZCM0YzMDBDRjA2NUEzRgotOjEwODdBMDAwQkM2NUY4NUQwN0Y2NUQzQkM1MjdDQ0ZCMzk5NkE3Q0JDQQotOjEwODdCMDAwRUJDOEY2M0FDMzRGMTYxOEZEMzVERUJDN0VGQzM1M0ZEQwotOjEwODdDMDAwMTBGODNBOTZDRjVEQjcwRkQ3MzFBMEMwRUE0NTdDNEQ3RgotOjEwODdEMDAwNEQzN0M2MDlGNkU3NjlGMTA3RUQ5OUZBQUJDQTg3ODgwNAotOjEwODdFMDAwMUUwNEEwODc4OUZERDE0MzkwMjEzREVDNzRCMTFCOTFGQgotOjEwODdGMDAwMUU1QTU3NDdBNjg3MUJGMkI5NUM2RDc1NzI3QjhGQ0RFOQotOjEwODgwMDAwMDE3QTE4MDJFNTEyQjNGRDE2QTJGQzhGMEI1NTdCOEY3RgotOjEwODgxMDAwNjQ3QzIzRjRBMDI2QTEzQ0FENUIwREYyMTRDNkE5M0JGOQotOjEwODgyMDAwQjJGQTVEOTJBMzQ4MEZEMDdBMzBEMjAzRDI0NzE4M0RGNgotOjEwODgzMDAwRTA3NzU4NUFFMzM0N0E5MDAzMDJDNjgxODAxRTgyNzgyQQotOjEwODg0MDAwNUZCMDRFQkJDRjExNDYwRjAyQ0FFMTZFN0FBOEY4NjY0MAotOjEwODg1MDAwRTlBMTI5Q0YyODdGQkYyQTNERkNFMjg2MTBFNTMxNzRDQgotOjEwODg2MDAwQTQwNTkyMTEwRTNCMjVFRTNGRkFBQTc0MzI2QzhFOEQ1MAotOjEwODg3MDAwRkI4QkFFNzEyNzIxN0ZBOTk1MzgzRjlEM0RGNDM0RjlEQwotOjEwODg4MDAwRTFGMjFENkUxMUU1OEE0N0UxNzg5ODNCNzEwMjdERkZBOAotOjEwODg5MDAwRTdDRDNDMUJGRjVFQzEwMjc1MEZFMUZGQTI4RkM4REY3MQotOjEwODhBMDAwM0FEMEMyRTlFQkQ4NkI3QkNCMTEyRjg3RDVCNzE3Q0M2OQotOjEwODhCMDAwNDZCQzU4MkY5MkRFREI2QjdGRjMzNEZDMTFGOEZBNDE5MwotOjEwODhDMDAwMDM0QTBFOEZFN0ZENjcxRUFGNTdENjlGRTRGQzM2OEUzNgotOjEwODhEMDAwQzkxOUIwOUUyNEJGNUNFOEMxRjhDQ0Y1MTZGQUJFQzczMgotOjEwODhFMDAwODA4MkY2Mzg5NDkzRkE3OENDNUE5OThDRjg4NTJBQTgyNQotOjEwODhGMDAwNjM3QzZGN0E4MTlGMzY2OTkwODFERTdFREUxRkJENUQ2RAotOjEwODkwMDAwOEVCRTY3NkJGNDA1M0Y5NDc3RUJEM0VFMkQ3RTU1RkY1QgotOjEwODkxMDAwNjk5RkZFQkM2QjIyRkIwN0I3Njg3MkFFNTVFMjc5MThGRgotOjEwODkyMDAwRDA1QUM2N0JGQTRGNzk3REJGQ0QyM0ZGQUI0OTBGM0JCMQotOjEwODkzMDAwMkMwN0QxNUZDNkQ2QzY5MjdGMzdDOUNBRjVBRTI0ODU0QgotOjEwODk0MDAwRTc4RjBDNjE3RTgyQjMxRTA3RDNGNTM2NDVFNTc5M0U4RAotOjEwODk1MDAwQjkwNUJFQjMzOEVFNkVBNjFDQzFFRjE5MzhERDZDMzExNwotOjEwODk2MDAwQzVCOTQwN0ZDNTc4RjU3NkFGN0E4RUU2RkQ5QUZBNTg5QwotOjEwODk3MDAwNDI4MUZBNDk3RkY4NzRGRDIyQjUwQkM3RUZBQjdFNDYwMgotOjEwODk4MDAwQzE1RjhFN0Q4OTcxOEI2QTlFQ0Y2Q0FEQkU5REVFNzM4QgotOjEwODk5MDAwODk2MEFGNTgzMERFRTk2OUEzRUYwMkM5QjI0RDUxQzgxMgotOjEwODlBMDAwRUU1MkU3NjNERTYyQUMwNjlGNTlFMjI3QTQ3RkI3MjY0QQotOjEwODlCMDAwODFGRUVGRUVGMTgzRUU0Q0U2NzE0RTExM0REQ0EwNzdDNwotOjEwODlDMDAwQjYxRTc3RkI2RjgxNzk2Q0MwMzdGQzc4OEYzRDFGRjQ0MgotOjEwODlEMDAwNzQyOEM3QTA5RThFNjM0REU1RkFCODdFRkYyNTY2QUM2RAotOjEwODlFMDAwQTZBN0FCQzYzOERDRTVGNEY0MDE3MzM0QjkzOTlFNEQ2MwotOjEwODlGMDAwNDRGOEE0NUE5NEVERDNFMEZEODQ4NzcyNEZFMkYxNEMyMQotOjEwOEEwMDAwN0E3ODY1MDI4QUIzMjlCQkVCOEJGMEZCNTdBQkY3QkZEMwotOjEwOEExMDAwQkYxQkZEOTJEMzdFNkI2NzQ4QTdBRDg3Qjg5RUEyMkU4MQotOjEwOEEyMDAwNjA3NDJGRjkwQUY4M0NEMUM5MERGOTRGOTdGQjQ3MjAyNAotOjEwOEEzMDAwN0Y4OThDNzdBRjZCNzhENzgxNzg5NzY4QzBCQkNDMzk0QQotOjEwOEE0MDAwMDMyM0UyOUQxRkY5RjEzRjgwNzdFM0U3MThGMTJFREY2MgotOjEwOEE1MDAwODQ3NzEzRTZGQzYzNzg3NzFEQUVGQjEzOENGRkMwMzg3OAotOjEwOEE2MDAwRUYyRDU0NkY5OEQzMEYxRUE2MkU1NDY3Q0NFOTA3MEYzNQotOjEwOEE3MDAwQzNGQ0VFNjQ0RjhENjQ1NTUxRTFERjE1RDQ5RjBEMjg4MgotOjEwOEE4MDAwRTdGQTg5RkJEQjM3OUYyMUI5NTk1Qjk1RTM0MEZEQURFMAotOjEwOEE5MDAwQUVFNENDMUIxODQ3Rjg0Qjk1NUQwOUY3MTM4MTlFNjczMAotOjEwOEFBMDAwRDA4MzYxNUNFNjA3MDNGNjY4M0VDRjYzM0VCNkRFMUUwOAotOjEwOEFCMDAwOUMwRUZENEE2NUVFQ0YyRjk1REQwQ0YzQTg0NTY3OTcxOAotOjEwOEFDMDAwRTQwMzdFQjUyQ0M5Qzc1MEJGQjYyNzU5N0FGQzEyRjAxMwotOjEwOEFEMDAwRUY1QUU5ODQzNzA3RTBEQzA5NzIxNENFOTg0REJGNjc3RQotOjEwOEFFMDAwN0IyMkZBOUI1RTNCMzQ5NUZDNEUzQTdENzRDNEYxNzE1NwotOjEwOEFGMDAwNkZFODAyRjkxNEQ2N0ZGQURGNDA2RTg1RTFGQjBDNjA2NwotOjEwOEIwMDAwRTBFMUU1MUM0N0IyQTE3REFFOUM2NkE4OUY5RDc0QjVDRgotOjEwOEIxMDAwQTFERTM1NjlERjRDQzQwQkIxNEM4QkVCNkJGN0NGNzQyNgotOjEwOEIyMDAwRkQ2MThDNUQyNTNDNkJENUY0REIzQzI1Q0JEMDFGRjU3RQotOjEwOEIzMDAwNUNFNDdGNTY5NEVCNTAzRjM3NzM5QTYxM0U1REJFNUZCNQotOjEwOEI0MDAwMEZGRjIxREQ4QTI2Qjk2RDk2RjM1NjkzOUNFRkFDQkVEQwotOjEwOEI1MDAwMTA4RkZDQkU2MThFRjFCRURBNjY2QjI4OUJGODA4RTNDRAotOjEwOEI2MDAwNzk2QTU3NURGQTA1RTE3RkE3QzJGMUJCNEVFMkY4RUVFNAotOjEwOEI3MDAwOUZBQTdENjdDNTQ0M0ZFMzZDREM2RjU2QkJDNDQxN0U1MgotOjEwOEI4MDAwRkJEQTQzREY3QUQ3MTdFNjRGNjIyQ0YwMUFERTY3MUM1OAotOjEwOEI5MDAwMTcxQkFGQTAzRjdFODg5NURCQ0ZCMkNBRURDMEIxQUU0OAotOjEwOEJBMDAwRUZEM0Y4NkMzNTk3OUY4MkNDQkYzN0I5MEJGODAyN0VCNAotOjEwOEJCMDAwM0Y4QjFEMEU5MTNEQ0ZCRTZCQTNGQjRFRTNFNkM3MTE2RAotOjEwOEJDMDAwREVFQ0FDQjA1MDFFRDYwRjg1NjA5NDMwMUNFOTU2MjUwMwotOjEwOEJEMDAwMzlDMzkyOTg1QzQ3Rjk4NzZGRjNFRjE0MzJFNkRFOUM1NQotOjEwOEJFMDAwOENBNkI0NEE3OTgyNkNBQUEzRUIzNTJEMkYxNUVEOTQ4RgotOjEwOEJGMDAwMjgwRjczNkY5Qzg2N0M5MEVGMzM3RTIyM0YzRkE3OUJBQwotOjEwOEMwMDAwOTdFNUVCNzk1OUI3NUZFMzkyNTgzM0U2OTkwRUMxRjFENgotOjEwOEMxMDAwQTA2RDYyMTU5MzZCQzk0RjEwQTRGQUExMUU3NkEyOTY5RgotOjEwOEMyMDAwRTZFN0ZEMDc5NzMzNkYyMzk0QzU0QTU1RjNERkZBQjQ5RgotOjEwOEMzMDAwNzg3NTE3QzU5MUQzMDU3NzM0RjJFREUxQTI5N0UyQzhCNAotOjEwOEM0MDAwQjE0Q0E2Mzg3MzBBQUJBNDY3OEMxMEU0NENFMzZCRjIwQQotOjEwOEM1MDAwOEY2QjAxMDAxOEFGNjdCMTM2RjJFNzY2RkZEOEM5RDA1NQotOjEwOEM2MDAwRUZENkVBQjJFREExRkM5ODkwNDI3RUI5NERBN0Y4QkRDRgotOjEwOEM3MDAwQjZEQUE1NzdCRDMxMDlEQTM3QkVDMUYzRjMzNzBERjNBNAotOjEwOEM4MDAwQkY4Qjc0OEQzODg5Rjc0MjQ1NjcyNUQ1MEY3RTU1NzRBMwotOjEwOEM5MDAwQ0Y1NkYwN0QzM0MzN0JDNENCOUM5NjAwODYwQUFFQjUxRAotOjEwOENBMDAwNzVGRDEyRjNFRTU4QkM4REExM0U1MjA3RkRDQkEwQkU2MAotOjEwOENCMDAwNzNBOTA1NzkzMTQzQ0RCNERCRkY4OEY1Mzc3OEZEQUY3MwotOjEwOENDMDAwQTM5RUZCREYwM0U4MUUzMjMzRjkwRDVCN0Q1QzVGNkUxNAotOjEwOENEMDAwNERCNDExOURENzk2NjQyN0UxNzgwRDg5RDE3NERGNkM2RQotOjEwOENFMDAwRjE4RDk1NkYyMEZGQTg3RDVCNzQ2RjE0NzgxRkY0QTczQQotOjEwOENGMDAwMTNFRTYxM0NERkU2NEQ0MzNERDRFNkI0NTE3RTg3RDlBNwotOjEwOEQwMDAwRUY2NzYzREVCNzI2QzFCRUVBRTI2RTQ5RUE0RjFGRUFBQgotOjEwOEQxMDAwMzNDRTUwNjIwOURBNjJBRjNDQ0U1MDdGRUY0RDE0NTcyQwotOjEwOEQyMDAwRDBEN0E5RUZCM0ExRTRCQ0I0NUNDMURGRkVDMTM4NDMyNgotOjEwOEQzMDAwQjUxMDM5Q0UxMEUyREZEM0M4QzBGQTcxMDgxRkVFQ0ZFQwotOjEwOEQ0MDAwRkVCQTcxODYxREYzQkU1RTlDNDFERkY3M0NFREY3N0NGOQotOjEwOEQ1MDAwNDA2QzJENUY4MkZDRUQ3NDZFOTY5RUY1ODVDMTcxMUY4RgotOjEwOEQ2MDAwQUVBRjE0N0Y1M0Y4N0JGNDlGMkZEMENBNkYxQzY4RkZGRgotOjEwOEQ3MDAwMDRGREU0Qzc3Rjc0RjQwMDNFQTc1RjdBQjQ2NDJERTA3RAotOjEwOEQ4MDAwNDVDMTU0RUVDRjdGRUI3QjcxMEZGMkUxOEM3RUY5NzkxOAotOjEwOEQ5MDAwNkVBM0JGMUM3RjEwM0Y2OTFEMDJCRkU3MUU1RTVGNjBCMAotOjEwOERBMDAwNUE1N0I2RDVFODVGOUZFOTM0QjY5Rjk1NjhBQ0Y3MEM4MwotOjEwOERCMDAwMzU5NkY1QkMxNUYzN0UzN0M2REM0Rjc5Njc5QkQ2MzEwNwotOjEwOERDMDAwRkExRTExMEIzRjBGRjFGMjY1QkJEMjFCNEZDMkZERTUzRQotOjEwOEREMDAwQ0M5RDQ2NzRERkY5MEVBNzdCRUY4QjdGNzE5MTVEOTk3NwotOjEwOERFMDAwNjQ5MUQxMEVCREIwQjg3RUQzRUI0QTc4M0NDMEEzMjJDQgotOjEwOERGMDAwMUU3REYxOTNCMTZGQTI1RjlCQzlCRTIwRTZGMTJEQ0YxRQotOjEwOEUwMDAwRTFERjYxRUFFNTlGRDdGQ0UzMTk1NTQ3REE2Njg2QzVERAotOjEwOEUxMDAwNEY5QjA2Rjk2RTlBMEJGQTRCNDY0OUExMDVGNTg3OENENAotOjEwOEUyMDAwQUE5N0E4N0VEMTkyNDlGREUyOTFBRkVBOTg2MTFDRkMxNQotOjEwOEUzMDAwOUUxRERBQjdCRUFBOTdFOTdENUZGQThFNDVGMUYzN0NGNQotOjEwOEU0MDAwQjg2QUJCNDJGRTVGRDNGNzZFN0Q5OENGODY3QzNFOURBRAotOjEwOEU1MDAwQ0I5QjVBODlDQjI3MzgxNTI2NUVDNzQ4NTkwOURGOTcxRgotOjEwOEU2MDAwNDVFMTdDRkRFMjU0N0U0RjgyMDExNzQyN0VBNThGNjc2QgotOjEwOEU3MDAwOTY4RkJBMUM3MEFBNUM3RkY0NTU5QkYyRUY0Q0UzNkY5RgotOjEwOEU4MDAwRjdGQUVFOTkwQjc0MjUzODFCNzg5RTVEOEVENkVFMzA3RQotOjEwOEU5MDAwRDc0QkQ5MUMyNkEzNUM4NjdENDZDQ0JCQUM5QkFCRDlGQgotOjEwOEVBMDAwOTk3REU0N0IzMUREMEUyQzdFRjU1REU0ODc1RkQ5MEU4NAotOjEwOEVCMDAwRUM2M0RDRTlBOUExQTU5MUVFMjNFRENFRDNGNEYxQThGMgotOjEwOEVDMDAwRDAzMEU0QzMxRDUyNjRCREZERjZFMjU5M0JFNkY2QTM4MwotOjEwOEVEMDAwRDc2MjlFNkE3OERFNDRBRjdEN0ZDRDNDRDVERjdBQjgxRAotOjEwOEVFMDAwRkY0QjhGM0ZFQUY5QUFDQzFBMTg4RkRGQ0ZDQzc0RkU2NAotOjEwOEVGMDAwRkE2NjhBMkJGNjkxQTdCQUM5RTUwRUExQkZBQUI2MkNDRAotOjEwOEYwMDAwOEFCRUY3Rjg3NUZERDU2NzM0QkZGQjAzNzMxOUY3ODc4MQotOjEwOEYxMDAwOUJGQ0Y1RTY3NTFGRDFGQ0Q3OTdCQ0RFMjBFMjRCNUZDQQotOjEwOEYyMDAwN0U3QUJERkRCQkM5OTFGRDY0QzlGM0Y1RkJGM0RBRkRBMwotOjEwOEYzMDAwMUYwRkQ3RkI1NEM5Q0QyMkQ5MDU3QTdFQTJGOTNERDg5RgotOjEwOEY0MDAwNDFFREI4MEVCRDVDNTY5RjQxN0VCNjU2ODlFMzJERTVENgotOjEwOEY1MDAwNzQwQ0U5Qzk2Nzc1QTJGRTQ3N0E1NDMzRDVDNzU2NzBCOQotOjEwOEY2MDAwN0Q1MEQ3QjM2NDJENEU2MEE2MjdBMDhGRDM0NDFGMjUxNAotOjEwOEY3MDAwM0NFRUQwQTMyNzZBRjRCMTA4RTgwM0U4NzIyOEUzNzQ1MgotOjEwOEY4MDAwNkNEMUYyMzA4NzNBNzg0QUY3RDdENUEzN0FEQjREMUVGOQotOjEwOEY5MDAwNDdBNEJDRDNDQkRBNERGNTkzMUM2NDM3MzlDN0JGOEFERAotOjEwOEZBMDAwN0E1NTY3MTVCRkJGRDZFMUVBNzI2MURFOEFGRjZEOTExRgotOjEwOEZCMDAwQkU2N0RCNTc3RkREN0UxMkU3MUJFREE3NjUyNURDQ0VBNAotOjEwOEZDMDAwNTk1NkEyREI0RjIxQzlFNzQyQkYzMEQ4NEZFNDg3RjU5RAotOjEwOEZEMDAwRDlGMzA3RjZCNkEzMzA1RjE0Q0YwOUVDNEM0N0ZFMzc0MAotOjEwOEZFMDAwQzExRjRDN0VBMjYzOTg1NzAwRUIzQzMyRTIzQ0Y5M0YzNAotOjEwOEZGMDAwMDY1NzcxRkZDN0UwMkFFRUZGNDg0MUZGNDcxQUZBMzdDQwotOjEwOTAwMDAwQjhCRDU2RUJFNkZFMENERDdFQUJEM0YyQkM3NDdGQzg3OAotOjEwOTAxMDAwNTUxQTFFOENCMTU3NzI3Rjg4NjY0RkQ1MUVFRjIyRkIwMgotOjEwOTAyMDAwQzlBOTdEQ0YwNkUzNzU4ODQ3QjY2QTIxODAyRTQyMjZGRQotOjEwOTAzMDAwNUVDQTQ1M0REODNFOTgzRTZGQ0E1OEI1RDEwRjYyQ0U0NAotOjEwOTA0MDAwNDM3NjlBRkMxREU2QkM4MTZCRjMzNTNCNEFGMzdGM0NDQgotOjEwOTA1MDAwMjIyOEY3NEQ4Mzc5OUVERDkxRkIzQUEyRUQ3RkVFNUFFRgotOjEwOTA2MDAwMTk4M0ZFOEY5RjA2RUFFNzZBRkU4Rjg3RjBCRUM1QTFDRgotOjEwOTA3MDAwNzdCOUZGQTNFRTEwRjc0QkZCNTA4MUI5MkUxMkZFRjUyNgotOjEwOTA4MDAwOEFGQjkwRkY2MzY1QkU5RkZDMUZCQTNGNjk5OTUzM0IwMwotOjEwOTA5MDAwNzcyN0RGMkZDMjk3QkVFN0U5RTE2NUY0NDMyODA0Q0ZDNQotOjEwOTBBMDAwNEY3RTg5NzFDMkJBNkI3ODJFQjg5RDY1MTFGQ0Y0RkJCNgotOjEwOTBCMDAwQUQzQUZDNzcyNjE5RTFBREZCOUZDNkQ4MDNBRkUxRkFDNAotOjEwOTBDMDAwM0I5MkFENkMyM0NBNTFGMTEzOEFENzg4OUExRkZBOUI0MQotOjEwOTBEMDAwRjIyQkREOUM2RkY0MkI4RDdGNjhDMjc2RkMwRUVGQzQwMwotOjEwOTBFMDAwODc4QjRFRTI3M0YyRUU3NTA5MzdDMzczRUFGRUVENDVFNgotOjEwOTBGMDAwRjg2NEFGNzIzOEZFNzUxRUU3NUI5ODMxMURDRUI3OTZFNwotOjEwOTEwMDAwRTcyOUM0NEY3QkUwQ0FGRDRBM0EzRUY2RjhFMzc4QkM1MwotOjEwOTExMDAwQkJCNDgyOTEzRkFFNTRBREE0M0I4Qzk4RTc4REY4QTNDRAotOjEwOTEyMDAwQzNBN0Q1ODQ5RkI1QzM3ODM5NjU2NjY1MTBFRERFMEM5RAotOjEwOTEzMDAwODBBNzJBRjdDNkQ3RDZFMzZENkI4OUVGQURCNjI5N0UzNwotOjEwOTE0MDAwODJERkE1MUFGNEQzRDkzNTdCREY4QzhGMTk3RUUzRkQzRQotOjEwOTE1MDAwRTFDQkUxNjM4RDA5NkVDRkVDOTg3MDFGQzJFQkI5NUQ3NgotOjEwOTE2MDAwNDVBRkUzRjNGOUMwQkExODg0RDdDMTdEREJFN0Y2MDE1OAotOjEwOTE3MDAwQjc2NDQzMUUzRkMyNkQ1MjZGN0MzQzVFRTA2QkNFODc4RQotOjEwOTE4MDAwRjdEM0REMDEyQkYxREIwQThDRDk2MURFREJEQTI4NjM1MgotOjEwOTE5MDAwNUM0NUU3OTMzRjhBRkE1QTdDNzJGMzc5QkFENzU4NUJGOQotOjEwOTFBMDAwN0Q4MUZDNEE3NTU1RkNCQjEwMUQyRUI1NzFFNEM0MkJBNgotOjEwOTFCMDAwRTc5M0Q3Q0VFM0Y3RDg3NTNFOTlBMkY5OTk1MkU0MTAxOAotOjEwOTFDMDAwRDFFMzMyQTA0N0NDRkY1QzU2Q0RFMzBBNzhDQzMxMDAyNgotOjEwOTFEMDAwMEYzMTg5MDU2M0M4N0ZFMDIwN0FEQTg5RjlDM0Q3RjZCMQotOjEwOTFFMDAwRTA0RjI3QjRCMzBGNjBCREU0OTM5OUJGODI1QzdDMUU0RgotOjEwOTFGMDAwRTFENTU5OUQ0MDdFRDkzRERBRjc0NTU1QUI5QkVDQzc4QgotOjEwOTIwMDAwRDlDNURFODM1OEFGQzdBNUI2N0JENTQzQzQ4N0JGQkVEQgotOjEwOTIxMDAwQkZGMDQ4N0U5OEJGQjAyMzhFNzVGQkQ3NkE2MDFGMzlCOAotOjEwOTIyMDAwNTU1OTBDRTM0QkEyREMyNTI5RTg1RkFCREUyREEwOUM1MQotOjEwOTIzMDAwNTgzQTg3RDM0OUNBRDA0QTkyMTdCREZENkQ1RDM5Njg0NwotOjEwOTI0MDAwMkY3NEUwNERGMTJDQzI4M0I3NzFERDFENTU3QjA5MEZFMgotOjEwOTI1MDAwQUU1RENERkQyNDFENTUxNzEyMjJFM0MxREY1QzVGQ0Y0QgotOjEwOTI2MDAwQ0YzODlFRjI4Mzc1NzlCOUIzMUIwRjAyQUY0REY5MEE1RgotOjEwOTI3MDAwRjI3MkZFM0NBM0JDNENEMUU4M0VBNUZBRjQ0M0U4OTc1OQotOjEwOTI4MDAwMTYzNTNDMTA5RERDMkY4REZDMTNGMTYwNzAxRkZFNDdERQotOjEwOTI5MDAwMUQwRkVBMTA1NjgwMTc3NUIyMzlBRUM4RUZFNTVFQTgwQgotOjEwOTJBMDAwREU0QjdGQkVBNUFGRjU1RDNFMkY1NDhCQUY2MzNDOTE4NwotOjEwOTJCMDAwQzdEN0RGNDUzQ0I1NTZGMTc4NjJDN0ZBRDk2NDI3NUU1NwotOjEwOTJDMDAwQTgxNjY0RjQzN0VGQTlCRTVEQzBGMzlCNUQxMjEwNDI4RgotOjEwOTJEMDAwQ0VGMDc5N0FFNTgzM0FFNjBERUM4OTFGRUFGMUMyRTMzNAotOjEwOTJFMDAwMDVERTY4N0MzRjFENzAyQTI5MUVGRDdGOUExRjdENjg2MAotOjEwOTJGMDAwNjRGRjFGRTA3N0ZDM0NENDNGMEZDQjI0NEY3NDNGM0ExMAotOjEwOTMwMDAwOTM3NEZDNTYxMzcwQkM3MUI2QUU2MTMyRTFCNzJGMDk4RAotOjEwOTMxMDAwREI3NzFFRkEyRkNBMEJFOEYxMTNGMjNDQjM3RkQ4Q0ZFQwotOjEwOTMyMDAwNTU2QUY0NzNFRDVDNkFEQjQzREZENzYzQTE1QzhBOEYxNwotOjEwOTMzMDAwNjAxQzAxRjlGNjM2M0JFNTMzOTYwQjBBRTVGRkZEQjVGNwotOjEwOTM0MDAwQzAzNzk2RjZDMUJDOTQ2N0VBMkI3NkM4RTQwRjczNEQxQwotOjEwOTM1MDAwNEU0MkZDMjg2RDEwNDk2RUY3NjU5RkY0QTZCM0QzQzQ0NgotOjEwOTM2MDAwNUY1MjAwQUYzNDdFNDM3MDQ0MzkxRDE1ODc3NDI3MTA1NwotOjEwOTM3MDAwN0YxMTgxQkZDNEEwMUM0NEJBMUIxQkNFNUYwMjRCODg2NwotOjEwOTM4MDAwQkYzMjhCM0IzNkY1OEFGODRDMEVDMkI5MUYzRTkzM0I3OQotOjEwOTM5MDAwQ0ZDODY3NjZDREZCMDdFMjEyQzE3Q0M2RUQzQTZEREYzMAotOjEwOTNBMDAwQTg3RkQyQkUzNTdBRUFERTc3MDk5NzMzQTI4N0VGQkI3MgotOjEwOTNCMDAwNUIyRkQ1Rjg4Qzk5OEVDQ0ZCRkE3RjkwQUVENkY1NDExOQotOjEwOTNDMDAwNTc3NzIyQkNCRjAyNURERDczMTlCQUJBMTdFQkMzRTg0OQotOjEwOTNEMDAwQUE5NkNFRkY1RjhGQUU1QUFGODRBRUM2Q0U2M0M2RkNGMAotOjEwOTNFMDAwNjNFRDNCQ0E2M0JFNjNFMUY5OEJGRjk3RjM4RjEzRTcyRAotOjEwOTNGMDAwNzJGQkRDOUM3RjhDRjkyMjU4Q0U4N0IzQTFGM0QxQ0FEMwotOjEwOTQwMDAwRjMyNzMyMDVFRkE3RDk3N0JGQjQ2NUI0QzJDNzBCRjcwRQotOjEwOTQxMDAwN0IzMjkzQkY5Mzk5RkM5QjY2RkQyRTgyM0ZENEUwRkY4NQotOjEwOTQyMDAwM0NGRUM0RUY4RThGODY1RjdGRkNFNDdGOTE1RUZCQzZCRgotOjEwOTQzMDAwMkM4MUUyOEZGMzQ3N0Q3MTE4RjVGRDgyQ0Q2QkI1M0MzMQotOjEwOTQ0MDAwRjdGRUZEOUZGRjZDN0YyN0ZFODRGQjU3Q0RGQkRBMTRGMAotOjEwOTQ1MDAwNzNCRjA2OEZBRkU2RUY2NEVFMUFGQTdFNzg2NzI1NzM2NgotOjEwOTQ2MDAwMTNEQzJGRTNGRkVDOTQ0NzFBRjI4NUJEMkY5NjNGQjgyQgotOjEwOTQ3MDAwMTBGRDlGQzdGOTc3RjhDQzdFNEYzRDBGQjhCNTY0MzkyMgotOjEwOTQ4MDAwRTlGOTY3NTQ4NzVCOENFMEY3NUM5RUEwREM0NkZFREM2NAotOjEwOTQ5MDAwREU3RUNGQkYyMjFERkNBMzdFQ0Y2NTczMTVDMjQzQjMxMgotOjEwOTRBMDAwRkZCMzE4RDhENUZDN0VFMkJFMUQ3MTk1MDJGMkJCOUNCRAotOjEwOTRCMDAwMTIzN0U1REJCMTRCRUJFOEVGMzk4ODI1MjFEMjAzNEJCRQotOjEwOTRDMDAwQUJCODFFMzhBMEMwRTdDMjcxNTI4NkIyNzEwN0QxM0U1OAotOjEwOTREMDAwQTkxMkRDMTZBNTM3NUYwNjNEMzM3NjdFNzg1RUM5Mzc2NAotOjEwOTRFMDAwRUMyRkY4NjdGOUZCNUU5OUZCRDVFRUE1QkY4MkYwOUVFNQotOjEwOTRGMDAwRDRDRkZENzQyNUY0MzBFNkFEM0Q1MkUzQTJFRjU2M0RFNgotOjEwOTUwMDAwQTJFOUQxMUQ5MjlBODRERjM5N0YyQkVFMDMwQkYyRUY5MwotOjEwOTUxMDAwNDA4Qjg1RTFCRDMxQjM1RURDRjdGRUI4RkNFQUNCQ0YxMgotOjEwOTUyMDAwMjRBMTdEMzRCNkM3M0VBQUVERjYyM0I5MURFMTdFQTQ4MQotOjEwOTUzMDAwRkEwRDlFNDNFNzIyQzA0OUQ3OEJCN0NEMzdEQTQ3QTU0RQotOjEwOTU0MDAwMjVEQzlFMkQyRDUxQzk4RjU0OUFFODYxMzg3RThBOTM2RgotOjEwOTU1MDAwQjVBMTVDMTQ5M0JBMjRENDUzOTY1NUY4QzhCRTM3Qzc0NgotOjEwOTU2MDAwRTFDRDc4NjI4RUNCOUJFM0YwRTYzOEZERkZBRjcxRjk3OQotOjEwOTU3MDAwRjVGMzhEREY2NTFDQTdFNUExMjA2RkM3RUZFOTk4RTM0MAotOjEwOTU4MDAwRjA5QkFEREM0RUQ5QTlDMjNCRENDQzU3OENDQjVGNzVEMAotOjEwOTU5MDAwRTkwMTFFRTc1N0I5QkYzNDk5NzEzRDJEMjU5RkZCNEI1QgotOjEwOTVBMDAwQ0Q3QUM3MjM1MjYwMzNEQUREOEZENDU4RjRFRjU2MThFMgotOjEwOTVCMDAwRTJGQTYzNUQzQzNGN0FEQ0ZDMDVGQjI5M0Y0N0Q3MEJCMQotOjEwOTVDMDAwMkI0MDJGMTQ0ODJGQTRFRjFDOTU1NjU0MEExQ0FGQUEwOQotOjEwOTVEMDAwOEVFMDNERDM2NTMyQzdBQkY5RjMzOURENTg4N0JBNDkyMAotOjEwOTVFMDAwMEYxNkFCNkY2N0ZDREU5NTlGREU5N0E2RjJGQjYwRDE4RQotOjEwOTVGMDAwODg2N0QwNTRDQ0U0NzE1RkY5ODRFOEM2RkIwOTVCQjE5RAotOjEwOTYwMDAwRTkzNEJDMEZDQUI4MUY2NzlBODVGRUJFNDM4QjUwOTlEOAotOjEwOTYxMDAwOENGQ0Y4MDE0MUE2MjdFODRBNzQ4RkYwQzkzODc1RDA1MAotOjEwOTYyMDAwMTJGMkRGNThDODZGN0YyQ0I3MjEwOUQ3RDc1OEIzMkQ1NgotOjEwOTYzMDAwMDlGMzM2REIzNEJGRjhCNkRDMEZFOEZCMEVFMjU4MjY0MAotOjEwOTY0MDAwQTM5RTAyQ0Y4ODdGQ0ZGMzlFMDU4MkY2Nzc4MURBOTJDMAotOjEwOTY1MDAwRThGQjAyQUM5OUY0NDkzMUQzQzZGOERGQ0Y3MTA3NTc2NAotOjEwOTY2MDAwMjAxRTlENzM5MjlFRjA4MDEwRTBGNzZFNUMwRUJBREZCNAotOjEwOTY3MDAwRDY3Q0I1MkRCOTFDRDZEM0U0QjI5MTE2NTE3N0Y1QUM5MgotOjEwOTY4MDAwMTM2OUYwQkU2OUEwMUM4QjcxODBCQUI0NzREOTRGNzE5NAotOjEwOTY5MDAwRUE4NjU3OTFCRTlCRDJEMjE5RTZDRjM3OTY0Q0E2N0I2RAotOjEwOTZBMDAwNzQ4RDk3ODBCMTQwQ0ZEQUQxMjNERjlBMDRFRjM3MEI2NgotOjEwOTZCMDAwMjFGQTBFOEY3RjlBODVFMkYwMkQ1N0NGNEEwRUJGRTczMQotOjEwOTZDMDAwMjhDQTM2NTNEQzkzRUI5NUEyNjJBMTdCNzNBMjE2Q0YxNgotOjEwOTZEMDAwMTY3QkM1QjM4REYxRTlBQjE2NzBCRDQ4NjFDRDhCRTk0MgotOjEwOTZFMDAwNUVBNUQzMjZFMzdFNEJBRjFFNEY3OUFGMTc5RDM2Q0FEQQotOjEwOTZGMDAwMDcyQTk1MThGRjhFQzZENThDQ0UyNTAyQkYzMzdDNTcxRQotOjEwOTcwMDAwNDUzMkFENkYzMzA2QTYyOUZGRjk4MTU1QTg4N0UzMURDMQotOjEwOTcxMDAwNDA5RTlGNUZDM0NCRERGNURGNUI4NUY4NDMxRkRCODE5OAotOjEwOTcyMDAwRjJEOTM3RUY1QTg1RjlGODBBRTM3RkY3QTMzNjkzRTdDMgotOjEwOTczMDAwNEY5NkJBMEE4OUZGOTY0QUExODhERkNEQkREQzdBMTQxQwotOjEwOTc0MDAwMTY1MEI1RjFEOEZGRTY3ODlCQUZCNjJEQzY3QjQ0OTc4RgotOjEwOTc1MDAwMUJBRkU3NUMwMkM0QkZCRkVBQjg3QTNCRjNCOEU2N0U1MgotOjEwOTc2MDAwRkY1QkVERkJEQUE3NjU4MUZFQkQ0MzQ2NzkxMEE0MUFDNQotOjEwOTc3MDAwNkFGN0MzNTAzRkI2NkFGQ0IwMzY3QjcyMjBBODYwM0VFMQotOjEwOTc4MDAwQUY5RkQzNDU5QzI1NjJCRTZDREZGNDExMzYzRTRGQ0VCMQotOjEwOTc5MDAwMjU3RTRCRTNFM0I3NUNBQUYyODI2OTEzRjlGQkMyQTQwRQotOjEwOTdBMDAwMUVCQUU5Q0VCRkQwQzY4M0FBOTc1MTRFNkNEMkY5MDUzNgotOjEwOTdCMDAwNTYwREVBMTlGNzM3MjUxMzI4MEYxNkVDMEIyNUMxMUQ5NgotOjEwOTdDMDAwODFGRUI0M0MwRDZBOUY0NkY3NjQ3RjhCNzlFMjZDMzQ2RQotOjEwOTdEMDAwMjMzRUEyQjdCNzZBRjM5QUYzMzZCNjZCRjM3RUQ1QkNENQotOjEwOTdFMDAwOEQ3M0I4ODc4OTI0NkJDODBFQUNGQjZEMzNFNTJGMzFDMAotOjEwOTdGMDAwRkNCODEzRkE2N0IzNjRCQTVGNzY5RjEwQTA3QjkxRkU0MgotOjEwOTgwMDAwOTUxQ0JFRkEzOTQ0QjFFRTFGQjI3QkY0N0M5ODQ4RjkzRQotOjEwOTgxMDAwMzI2OEJGMjVFOUFEQzNDRjIxOURDRTcyMDRFQUVEOUIyRQotOjEwOTgyMDAwNDc4REEzQkYxMzY5NjVDRDhGM0YwMUNGMUQwNzM2RkU1RQotOjEwOTgzMDAwMTFGMzNFQTI0NzhDQkI3RkVBNDRCQ0M3NkU3MUUzRjJEMgotOjEwOTg0MDAwOUNGRkI2RTM2RkE4MEEzNzhDNUREOThDQzNBQ0Q4MjJENQotOjEwOTg1MDAwQThFOEQ3QjdDQkNFM0Q2ODFGMzE4NzQwNzY4Mzc1RkIyQwotOjEwOTg2MDAwNjBFMjBCNDlFNUM2NzM2RjE1RDQ1RkUzNzdGNEZDNUJFOAotOjEwOTg3MDAwMDVFMkEzNTE2RUEzNUQ2MTFCNkE2Q0JGNEVBMzNCQjNBRgotOjEwOTg4MDAwN0RGMjgwMTAzOUVFRkRDQzAyMkU2N0FDNjg2Rjg0RTk2MgotOjEwOTg5MDAwMEREQjI0ODVCRTBCQkI2REIzODg5MTRDQjY2REJEOURCMQotOjEwOThBMDAwRjhEOUNCNkYxNUFFQzJFRjc2REY1OTJGMTFEQzVCNkZBNQotOjEwOThCMDAwQjBEMURGOEI2QTc1Qzk4QjE2NjM1OTkzNjc3QTlDRjlBRgotOjEwOThDMDAwODE2QjQ2MDZDMkZGQUVEMEQzOUE5QzZEQkVDMTQ2RjJGNAotOjEwOThEMDAwODA1OUJCOTJEMDJGNkJCRTZGRERDQkJFMzJFMURERTU5MAotOjEwOThFMDAwRjAyQzc3NDFCQzg2REYwMTkyMkJERDc2RkQyODBCQkY4MwotOjEwOThGMDAwNTczQ0NBRjIyRjcxQUY3ODZFMzczRDdDQjNGNzhBRTdEOQotOjEwOTkwMDAwQTI2MTNFQjAyN0RGQ0ZEQTJCQkYyNzk1RkM3QkY1QjNGMgotOjEwOTkxMDAwNkRGNEZEQjVBRjZBRUY2RTVCQkY4QUU0ODVGRjc2RTY1NgotOjEwOTkyMDAwQ0U3MEY3Q0UwQkYzQkUzODgyRjA0NzZDMTRDOTBGMjcwOAotOjEwOTkzMDAwOUFFQ0Q5RkRGM0E1NkVGRUUzMDhFMzkzN0E1RUQwNzY0OAotOjEwOTk0MDAwRUQ5RUVFNzY2RjAzRTVDRkQ0NzlGODNERERBOEU2NTVDMAotOjEwOTk1MDAwNjQyNzZGMDMzRDBDRjNBQTc0QkJGOENDRDRGNEM5MDI5RQotOjEwOTk2MDAwRTVGREE4N0VGQzRFQzY5OTZDMkQyRjQ4MzY3RTQ3ODlCMgotOjEwOTk3MDAwNjlGOTdERkE3Q0RCQTZBNkQzN0M3NTY4ODdGNzgzMDczNwotOjEwOTk4MDAwNTY4Rjc2NkZENzM0NUUzN0JGNDY3QjNCRUNFRjY5ODJFQwotOjEwOTk5MDAwQkQ3RDZFMDFDMEZGN0VBNzFCOUQ3MDUwRkYxMkQ1QjMyOQotOjEwOTlBMDAwODlGMTU3NzRBRkIyMTM3Rjg1NzYxOTQ1RUFDNzM4NEVFRgotOjEwOTlCMDAwNUVDNjI0M0ZEQTc5NjdEODAwODZGMDM4RTc3MkNGNDI3NgotOjEwOTlDMDAwQjVCQjQzNzIzQkMyRkZGRTQxNkRCM0E0N0Q4RjAyRTY3RgotOjEwOTlEMDAwMUQ0QkY5NkQ0QjBCMTFFRjQ3NDhDNDNGQzRDNDJDN0FBMwotOjEwOTlFMDAwNUZFRUYyNUEyREIwMkVDMTlCNkU4ODRGRTZCMTE2RUI5QQotOjEwOTlGMDAwNUFCMkFCMDIzMzI5RkU1RENFNjQ4Q0I3OTRCOTlBMjk3MgotOjEwOUEwMDAwQ0U5MjhCMEI4NDg5NjcyQjMzQzhDRUYzMUNFNkRGNTlDQgotOjEwOUExMDAwOUMxRUY3RkQ0NDk0NDNGRjA3MDAzNzhGQUUwMDgwMDA4MwotOjEwOUEyMDAwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkFEM0I5MQotOjEwOUEzMDAwNkI3MDVCRDU5OURGRDVCREJBOTI2QzQ5QkVCMjY1MjMxOAotOjEwOUE0MDAwMTMxM0FFRUQxODlDQzQzMTM3MjE3MTY1MDg5QkVCNDdBOQotOjEwOUE1MDAwODgwRDI5NTU2Q0M3NDk3NjlDNTQ4MTQwQzNCNEQzNkE5QwotOjEwOUE2MDAwNUJCQTRENzY2ODJEQzc3MkUyMzg2MDE0RDNENjYxQ0JFRAotOjEwOUE3MDAwQjYyMkMwQjZCQjc0QzBBNTJGQzhEMDhFMUNCMjk0NjdFNgotOjEwOUE4MDAwNzE1QkRBQzJCNjQzNDU0QUJEQTVEMzFGRUUyM0UwRUVCMwotOjEwOUE5MDAwNjQyN0ZCN0RERkI5Mzc5NjY0MjU3MUQyODg4MUMzQjkwRAotOjEwOUFBMDAwRTc5Q0VGOUNGM0JEMUZDNzhEQzc4RTU0NDUxQjAwMjA1QwotOjEwOUFCMDAwNkVGRUI0QkUwOTIwMDBFMkI3REMzNTE1Njk1QjBEMzBERgotOjEwOUFDMDAwRjg5QTZDRUNFMzJGREE2NDM0MDhBMDg0NjQxODMxMDA0RgotOjEwOUFEMDAwQTRBN0Q2ODYzMjVFRUM3QkE3N0YwRDdFODA5QjY2MDBCNgotOjEwOUFFMDAwREFERDYyRUQxOUZDNzdEREFDMUJEQUVCRTdGQTJEMDg2NQotOjEwOUFGMDAwMzlCQkRGRTZBRUNDOTlCRjVFQUJDRTE5OTdDMTM0RDI4RAotOjEwOUIwMDAwMTJDMDg2RDBEMjlDNzlCRTM1QUIzNTNBNkZBN0JFMzIzMwotOjEwOUIxMDAwRTdGQkFERjVDRDM5RUJBMTVEMzk5OUMxRkU1QUZDRTcwNAotOjEwOUIyMDAwNEMwREMxMTM3RDFFQUYwNkYwMzY2MDNGNkJCRDAyNTk3MAotOjEwOUIzMDAwN0QxQ0FGOEJGODgyRDNDNUQ4RjkxMDdDRTg4QzBDQjBCMwotOjEwOUI0MDAwMTE4Q0FEMTBBNDUxODdGMTM4RTJBNUUyOTgzQjUzRUM5QgotOjEwOUI1MDAwQzBBRTY5RUFDMTBBQzQwNzBERTkwMDdEMTE1Q0JDMDYwQwotOjEwOUI2MDAwRkJERTY5MDdFMEJDODcxMTg2NUMwOUQwQTg2NTFDOUZGNQotOjEwOUI3MDAwMjYzQzZCMTMxMjdGMDc5ODE4NDE2NDg3MTQ5M0U3NDFDMgotOjEwOUI4MDAwMDhCNDA0Q0U1QjA0NzE0OUMzQkUyRjA0NDlFQTVGMDVFMwotOjEwOUI5MDAwNDk5RThGQkZFNDgzQ0QwMDRCREM2MkJEQkYwQjhDMDdCOQotOjEwOUJBMDAwNzBCQ0I4MjEyRTQ5RDgyRkVEMDA0MzQ2Nzg1RTYzNEEzOQotOjEwOUJCMDAwQTI3MzZBQjg1RTVFMDk1MDA5NjlFRTU3NzVDMEQ0MjA3OQotOjEwOUJDMDAwQzMzN0Y3RDFGQUNBM0RBMDBENTUxMkQ4Mzg4RkE3RkE3RQotOjEwOUJEMDAwMjA0RUU3NzkwNDBDNzBDOTg0OEYwODQwMkQ4MDBBMzEyQgotOjEwOUJFMDAwNkVBRjA2QkQxNDkxMDg4RjgyQjE4QUZBNzU5MDIxQTREOAotOjEwOUJGMDAwMjI1NTUzMTJGNUFGODAwOThERkEwMDY5ODhBQ0MwMjY1MgotOjEwOUMwMDAwQTMwNEE2REQzQzA1Q0VBQ0MzN0ZFOTU3QTBBNTlEQTY2NQotOjEwOUMxMDAwNkRCQUUwRTRBRkRDNjY3NjQ3MTA3RkJEREJENjk0NDRENgotOjEwOUMyMDAwQkRFNzVFQTdFQzc5N0VBMkZERkFCOUZFNjgwNDkxNUZGQwotOjEwOUMzMDAwNEVERjM3MDAzNDUwRkIwMjhGM0YxNTg5RUM4OEUwRjc4OAotOjEwOUM0MDAwNDY4NEVGNUU3NUYxRjg2RjU0MDUzRTEzMTIxODcxOUM0RgotOjEwOUM1MDAwOUY3OEY2OTZEMDRFMUM4RjNGRUIzNkVBODBGMDhCRjg1QgotOjEwOUM2MDAwMjRCRTA4QkI2NzVFNkExNkVCODkxRTQxQTQwN0UxQkJGMAotOjEwOUM3MDAwQjQwMTI0QzJDMTU1NDQwN0ZDQUUyMjFEMEUzMjFEOTMwRgotOjEwOUM4MDAwMEM3NzcxMEM4QzAxNkI1RkVBNTcyMjFEODgyRTI5RDA0RQotOjEwOUM5MDAwOEEwOEFGNzJFQ0UyRThDMDNGODQ3M0M1MzNFRTQ3NDZGMgotOjEwOUNBMDAwMjRDMjJFRDJBNUY2QjJEMDY1M0ZFMUYxNjJFOTkyNEYwRgotOjEwOUNCMDAwMEZCOEI3MENBMEY5N0NGQkM2OTk4RTVGOTFEMjFFQTk5NAotOjEwOUNDMDAwOTZDODgyRjRDMUZCNDg0ODFGQzI2NzA4MDQzRDU0MDA4RgotOjEwOUNEMDAwODNGMDU0MDhGRkQ0RjdBQzA2N0QxRkY3QzU3Q0EyNjc1QwotOjEwOUNFMDAwQkM3OThFRkY0QjkwRkY0NTVGQzg1NzAwRTkyMEZBODI5MAotOjEwOUNGMDAwNEU0MTkyMTdFQzg3MjIxM0JDQkU3NDE3NDRFRUFGMjQ3QQotOjEwOUQwMDAwN0E5ODhDM0MyNzQ0Qjk3NUMxOEM0NDZEOEQ2NDMwQkQwNAotOjEwOUQxMDAwNkFFNTg4ODNGQUM1NTI1QTIwMTkyOTQ5RkFDMDBGMUFGMAotOjEwOUQyMDAwRDNFNzRBODg3MTFCNzRDRTRDOUVDMTdEMTI1RTQ3MkFEMAotOjEwOUQzMDAwNUU0REVERDMyREI0Q0ZFMDQ2RDQzMDI4QjcwREJFQjE4MwotOjEwOUQ0MDAwMTZFNkNCQkI0MUFCNDNCRTVCQUM5QUVFNkFFMjk3NjVDRAotOjEwOUQ1MDAwOEExMUQ3QjNGMUI1OEZFMTgzNkUxRTI5QTY3MTg3MEZFMwotOjEwOUQ2MDAwNDY1NkNGRUQ5QjcwMUFBMTI0RDJFQjc1REZGNEYxMjg5MwotOjEwOUQ3MDAwN0UyRkFBOTRDMTY1Q0NFMUY5QTQ1M0RDOEY2MENBOEIxNQotOjEwOUQ4MDAwNDgxRTg0N0M4NEMyNzg5NkMwN0NGRDE2NTIwNERGN0ExQgotOjEwOUQ5MDAwNzcyM0ZFMTAxRjNCNjgwMEYxMjQwRDdGOUZCRjNGREMzRgotOjEwOURBMDAwMjZGNEREODM5MUU4RUIyNEM3QTQ5RjE4N0YyNjY4QTRERQotOjEwOURCMDAwOUYzNDAzNTg2RjNBRjRGOEVGNjRGQzdFNkFEOEE1MTMxOQotOjEwOURDMDAwOUY0MjcyREM3NEUzM0UzQkFEN0Q3NjBFQkJERTkxRkNDMAotOjEwOUREMDAwNTlGNzRDQjgyMDZERUJFNzFBNUExRjI5NjE3RTM2MjREQgotOjEwOURFMDAwNzAzNzJEN0NEREE1RjIzRkVDMjkyNzY2QkIyMERGQjY1RQotOjEwOURGMDAwM0NCNUI2MjREMzcwRUU3OTJBQzk0NzU5RjYzQTQxMjdDMwotOjEwOUUwMDAwMzU4OEZDRTRBNUYxMTc3OEZDNDI3MDlDN0IyNjczRTQ0RQotOjEwOUUxMDAwQ0M4NkUzMEM0NTE4OEU3M0NGMDkyMTZGNjRCNzkwOUVGMgotOjEwOUUyMDAwNzdBMUREMUE0MTdDN0ZENEQ0NTRDMTk3MzNGRjQ1RjYyNgotOjEwOUUzMDAwRkNGNjk4REYyMDdCQ0UyOEMyNzk3NzI0QTVENDA4RjJERgotOjEwOUU0MDAwRTM5RDEwNTM4OTRGMjU1ODEyMjdGQUVEODg0QkM2MDgxOQotOjEwOUU1MDAwNEVBOTM5QjhDQkNGRkUwMkI0NkI4NDFGMjk3REEzN0NGOQotOjEwOUU2MDAwNjZGOTQ1RTBEMUMyRDM4RUY0N0I0RURENDc3OEY1QzE2QgotOjEwOUU3MDAwNkZFREYxOUFCOUYxQkZGNEQ1QkVCRTQ2MjdBNUVEQURBMQotOjEwOUU4MDAwMjdGQTE2NUJGNDQ1QjUxRDdGMDVDRkU5M0M1RDAyMjMzQgotOjEwOUU5MDAwMUE3MjdGRjExNzVFNUI4N0U3MUJGQTk5NkNDOEQ1MzQ5RAotOjEwOUVBMDAwNEYwNTEzRTExNTgxQjBFM0M1MjRBN0I1QzQyRjEzRTkwRAotOjEwOUVCMDAwOEYxM0JGRUQyOUQxRThCRUY2M0NCMEU2QzUyMTZBRDJDQQotOjEwOUVDMDAwM0Q4QjUxMEYxMDVDNDdGMTdEQ0M5RkM1N0U1NTk3OTkxNgotOjEwOUVEMDAwRjk1MUUzNjRERkMzOEQ3QzU3QzFBOEU2NUZCOTlBNEVBMAotOjEwOUVFMDAwOTM3Qzk1QjdCQThEODE1Q0Y4RDIxOTVBOEYzMEExQzI5NAotOjEwOUVGMDAwQkE4NzM0N0ZGRjE1RDQ3N0YzNTBDQjE5NkIzRkQzOURDRQotOjEwOUYwMDAwQjU1RjVFREYxOUNBRUE4MzE4OEY2N0NGMzc1NDQ4Njc5OQotOjEwOUYxMDAwRTFGNUFDQkM1ODcyNjY5RkRCRUI1NTczRTUyNTZGOUQ5MAotOjEwOUYyMDAwNEQ4RjA2QTdFMDhGNDAwODUyMDM3OERFRTFFMUQyOTYxQwotOjEwOUYzMDAwNjJFQzhGMDY0MDc3RTFEMEZFMUIyQTI0NDBCOTZFRDUzMwotOjEwOUY0MDAwQzQzQzdGMTVBNDVDMTJFREEzOEZENEIzREZFODY1RkU5QgotOjEwOUY1MDAwRjFGRkRFNEM3RjlDRjgzMUVDRDI3NEM0NTNFMDhGQzYyNQotOjEwOUY2MDAwOTQ4OUZEM0I0MzZFQzNDNEYxNDE5QTRGRjZCNTBBRkQ5NwotOjEwOUY3MDAwMkM5REI3RkYwNUY5QTU3NzU4RTdCRDgyNzA4MzcyRjg2RAotOjEwOUY4MDAwQjE0REMyQ0Y5MjdEQUJGN0JGODJGMDBGNUMyOTgzNENGRAotOjEwOUY5MDAwN0JDQjFCMERFMkNGM0IxNDgwQjI1MkVDREZFNzY0QkZGQQotOjEwOUZBMDAwMEZGRDNCQkU4RjVBOTVFQkY3REQ3OUM0MzlFNzE3QzIzOQotOjEwOUZCMDAwN0MzRkYwQUU0REI5N0U2MDZDMTNGMEJFNzQ5RUIyNTUxRQotOjEwOUZDMDAwN0YzRjdDRTgwQkIyRkU1Q0ExNEMzOUI0MDI3NkQ1QzY2QgotOjEwOUZEMDAwQkZGNDk0OTdGMUZBODM3MkM0MkJBRDgzODhGOTI5RUMwRQotOjEwOUZFMDAwQkIxMDhGQzRBRkE4QThGRDZCMTA0Rjg0NDM5MjEzREY0MgotOjEwOUZGMDAwOUFFRjdDOUFFNkJCNEUyMUZGRDI3Q0Q5REJGRTI5RENBRQotOjEwQTAwMDAwQ0FCOTA4RjFDNEZBREZDOUU3MzBGMTFGM0E3N0JFM0Y5OQotOjEwQTAxMDAwRUNDQTNCQTczM0NGN0Y5NjJEM0E4QzEwN0U1MEZFQTEyMQotOjEwQTAyMDAwMDk5QTA4M0ZFODlGQjM3RjAwREU2MDQxM0JGRjVDM0YzOQotOjEwQTAzMDAwNkEwRUU0QTUxRkY2QkJCOTRERjc2QkRDMUVFRjBGNzE3RQotOjEwQTA0MDAwN0JBMjVGODc3Njc0QUM1RUU4QUZFN0Y2QzU3RTgzQkYyMAotOjEwQTA1MDAwQkZEQzFGRTZENkM2QzdCOUY0OERBRkRDQzFGRUMyRTFENgotOjEwQTA2MDAwN0IxRDI5MTIyNkE1NDE3QkU5NUFDNEMzOTU2RkM4QUM1NAotOjEwQTA3MDAwM0VGQ0EwN0IxNEQ0MDc3RUM0ODE4MkYzQUVFRTUwNTIyNgotOjEwQTA4MDAwMjZEREM1OEE3RkFFQjBGODZDQjk2QjY2RDI0NUZDNUQ0MwotOjEwQTA5MDAwMDlDNjNFNUEwOEIxODEzQjU2Q0ZDNTNGMzdDRDM4RTY5OQotOjEwQTBBMDAwRTQwNDI4REUyOTlBQjMzMzQwRjE0RTU5NEVCRkNEQkRBQQotOjEwQTBCMDAwMjg2N0ZFN0FBRDM2NjdEQ0E2RUZENzlBODVEQzZDMDg5OAotOjEwQTBDMDAwMkRDRjk5N0ZCOEJEMzVGRDMxM0NBRkJGRDlBNTExOUZDQwotOjEwQTBEMDAwNzdFQUQ3RTc4Q0RGNUE3RjYzMEUzQzVCMEU0QUZCOTQyRQotOjEwQTBFMDAwMUNGRUYzRTdEMTU1REQ3REZFMzhDOEE2RjM4RjZDM0EzMAotOjEwQTBGMDAwNUI3MjcwMkVGQUU2RjNBRDhERDdEMkIzNzgxNTcxNjUyOQotOjEwQTEwMDAwODJFMjRBOURFRUREMjBFRDBDMTI5RTZEQkZDNDg0ODg3NAotOjEwQTExMDAwOEZGNDgwRDg1NzA5NjM3Q0Q5NzhGOUUzNEIzRkM1OTcxMgotOjEwQTEyMDAwRDU4NUUyQ0I3NzM1RTJERjBCQzY5NzFEQjlGMTY1M0VFOQotOjEwQTEzMDAwNUUyRjE0NUZGRTY5MUUzRTRCMTc4NENGMUQ4QjYzQUZFRAotOjEwQTE0MDAwQURBMTc4RUY1NTk5RkQ0MEI5MjNDNkY2QUY2QzRBMzZGQwotOjEwQTE1MDAwMzYyMERDNzJDQjFGRjM5MUNDRTNCQzFENkI1NEY2MkY4MQotOjEwQTE2MDAwMEY0MzI2NDQ3NkZGMDEwOUIxOEFGQzVGRDY2MDU0OTIwMgotOjEwQTE3MDAwQkU3OTMyNjA1NjZDQTMzOEJGRDM2MTFDQzUyNUNGQjdGQQotOjEwQTE4MDAwN0MzOTQ0N0VDN0MxODE0NzQyNjg5NDIwRDhFNTYwN0QxMAotOjEwQTE5MDAwOTc2Qzk5REU0RTcyQTVFOEU4Qzc0OURDOUFBOTAyRkVFMQotOjEwQTFBMDAwODkzREZGQjM0MzRFOEU0MzFFRDhBRUE2MjQ5Q0ZGODA0QwotOjEwQTFCMDAwNEZFQkRENEE3RDZCMUY0NDA4REJEQkYxMzVEN0E0QzhDQwotOjEwQTFDMDAwRkYyQkVGRDIwNUJGNDAzQzQ0RjQ3RjcwN0I1MzI1MUIyRgotOjEwQTFEMDAwMjkwNUZCMkI2OEJBQzE3NjdDQzQ2Nzk4MjQ4Nzg5REY4MAotOjEwQTFFMDAwNzkyMThFOUZFRTk3MzRCRjQ0RkVFQjc2ODdGNjM4REVGQQotOjEwQTFGMDAwNzNCQzYzRDU1QkJCQjA3RkQwQUIxQTI0RjA4OTQwNTNFRQotOjEwQTIwMDAwMjVGMTk3QkMwM0REMUVFQzhGNzU4Q0JEQzg3MjVDRTczMQotOjEwQTIxMDAwRTA3RTYyRkIzNUFGOTNGQjNDNUVBRTc1RDY1MDlDQjdEQgotOjEwQTIyMDAwQkU4NjMwMERGMjMzQTdGQjI5QUY5MTA4NEM4NzY4RkQzRAotOjEwQTIzMDAwRTAwRDYyRkRCOUU4MjM2QjU5RjYxQzM4N0ZDMUU3OTU0NAotOjEwQTI0MDAwOTczOEQyMkFDMjkxOUY5QkZFM0Y4MjI3NjdEQjcxRDY0NwotOjEwQTI1MDAwRTNCOTdFQzU0ODQwQTUyMDAxQ0NBRTJCRkYyM0JFODRDOAotOjEwQTI2MDAwNTRCOTY5MTIxREM3NTFFNjA5NEYzQkI2Nzc5NTUwM0M2QQotOjEwQTI3MDAwQjVDMzk5MjkyRjY0MkY4NjUwQkZBNkFGQ0RGMjM3ODM3RgotOjEwQTI4MDAwQjk3RTQyM0U3Q0ZFMzUxMTdFRjFFNzEwNURCREMyMEEwQgotOjEwQTI5MDAwNURGMDk3QjhFREU2NTQ5QUYwMDZDOThFMUFCMkNCNUUxRgotOjEwQTJBMDAwQjRDQjcwOUVGOENGOUI4QjA3MUIzRUMzQzNGRkM4N0IwQwotOjEwQTJCMDAwM0NBNjI3MEIwRjc4QUQzNEY5M0JCRDVEMTJGM0NEOTY2QwotOjEwQTJDMDAwQjM3QzAwMUM3N0Q4RTc1MjNBMUNCQ0NFRDYwRkM4Qzc2NwotOjEwQTJEMDAwNUIyNzg4M0YyQ0JDODdEMDY0OTAxQ0RBRTc4ODVBRjA1MwotOjEwQTJFMDAwNzZDRUMxMDNBRDIyRUIxQzZCNTUwQjlFQzE3MUYxNzU4RgotOjEwQTJGMDAwQUE5MDJCRjg4NUNDN0VDNzNDM0E1OUZFMUJBRkFGOUU4NwotOjEwQTMwMDAwMUI1N0FDRjM1RjdCNDRDREQxQkY5RkExRkQ3MURGNUZENQotOjEwQTMxMDAwRjY3NTlGMzc1RTVFOUFDQTVENzdCODBCRjhEQ0NCNjQ0MgotOjEwQTMyMDAwRjNGODM0QzVCNUQ3M0E1MjhGMjNBOEU1RDczQTU4OUVFQgotOjEwQTMzMDAwNEZBMTVGNDU3NkVENUNGMDZDRkFCMzg4NTUzMDc3QTE5QwotOjEwQTM0MDAwRDM4RUZFNTlCMDhCRjlGQzVDRUJENEQ0OTQ1OURENDgyNAotOjEwQTM1MDAwRkI0MjZDMDJGOTZCNjkyOEY3NUNGNkJDQzM2N0VGRjU0QQotOjEwQTM2MDAwMTkyOEEyRjNBMDQzNEVGNkM4OTU0QTlCQTRBNzVEMDhGRQotOjEwQTM3MDAwNDdDMkI2RkU5MTdCQjRGM0REREIwNTU5RjAxMTlGRUZDOAotOjEwQTM4MDAwNEE0MjVGQzUwM0MwRjc0REJDOTU2MkY5ODE2NzY2N0U5RQotOjEwQTM5MDAwNEJGMjlENTg1QUExOEZCMEJDNDA2ODQ5MTNGOTIzRTI5MwotOjEwQTNBMDAwNUVDRTNDM0E4RDc4MDQ5Q0IxOTVDMjRGMURCM0ZBRjE1NAotOjEwQTNCMDAwMTUwMjJFNjRDQjI5QUVGNzU4Nzk5NUFGNzdENUYyQkQ0QgotOjEwQTNDMDAwNTREMjMzNDQ2NEM1NUM0QzdDRTE1NUJFMTVENzkwMUYxNAotOjEwQTNEMDAwOEFCQzg3MjE4MEFEMkJCODMzNEVFREJBQzVGQTY4MTgxOAotOjEwQTNFMDAwQ0YzNUI2RDRDMTc2NkNDQzE3N0Q2NDg4RjREMDUyNkY2QgotOjEwQTNGMDAwNDFGOUY4MUVFOTQ1ODQzRjRDN0NDQkYxMTM5ODBFOTI0RAotOjEwQTQwMDAwM0JDOTE2MTI4ODNBOTA1RUUzQ0NGOTAwMkY3NTA1NDREQgotOjEwQTQxMDAwM0U0QjRCODY2RjQ3M0MxRUI3RjgwMkVGQzNFQkYzRTFCMAotOjEwQTQyMDAwOUY5ODBGRkYzMUUyRDc4NDA1OUNFMEVDNDQzODJGNUIwNgotOjEwQTQzMDAwNzIwMTY0NTAyQUFDQjgwRkY3NzNFQkM5MzBGOTBCQUY1NwotOjEwQTQ0MDAwNzQ2OTQyNUU5NDk1MDZERDdGMkM1MDc4QkY1N0FDRkQ1MQotOjEwQTQ1MDAwNEM0NzRDQTI3OTU3RjQ4OUY1RTAxNkVCMUU5MDY2QjY4RQotOjEwQTQ2MDAwOUUxNEY0NjQ3OUEyRkQ2OUJDRDhDOEQ1MEZGOTcwM0Q3QgotOjEwQTQ3MDAwRjVCOUZBNEFBRENBOURGRjk2QzU3RkY5RjFEMEZENTJGNAotOjEwQTQ4MDAwRTE3M0ZFQUY3NURGNzU4QjgxRUQxMUYxQzVCRTAyN0MwNgotOjEwQTQ5MDAwOTEyRkVGMkFFNTNGMTFFRTdCNDQwN0M2OTdEMDNCNUUzNAotOjEwQTRBMDAwNjVBQTk1RTIxRTZGMDMxOEVDQTMyODkzN0NERjdEQzU5NwotOjEwQTRCMDAwQjc3MTlDM0M3NEFCQzg3M0E4OEFEMERCNTU1QjExMEM5OAotOjEwQTRDMDAwREFFM0M4MEZEQUUzRDQ5N0VGMDFDRDE1OTg4Rjg3OEJDNQotOjEwQTREMDAwOERGN0M4REVDNEIzRDY5RjI2RkUyODE3Rjc4ODY3REQ0MAotOjEwQTRFMDAwMjNFOUQ0NkZBMzdEOTMwNzY1MjAzRjIwQjlEN0I1QjU4NQotOjEwQTRGMDAwOTBERDg2MkVFNzU5M0RFOUI2RjUyRUQyMEQ4QzZBNzBCNwotOjEwQTUwMDAwRTBGQTIzNkZDODlDMTczODEyREVDRjcxNzEyMkEyRUFERAotOjEwQTUxMDAwNTIzNUU1MjkxRTg2QkQzOEZFMTdEM0MxN0VFQjlFNjdGNgotOjEwQTUyMDAwRUVGRENEQ0JCOEVDNjQ3QjREOTNFNDYwMzk4MjNCNzE5QQotOjEwQTUzMDAwRkU0OThDOEJDOTZGMjZGOUNCQzlDNzIwNjJERDRENzNFQwotOjEwQTU0MDAwRkIyNURCNkI3OEJGMDRFRTI3OUQ0N0NGMjkxMThDNUI4MQotOjEwQTU1MDAwMUJFN0MzM0I2QjhGRjNGMjIzMjMxNTUxQkQxQkVGNzczMgotOjEwQTU2MDAwRDg2QjcwM0U1MkI2RjMyMzNEQzEwNUU1NzU3NDQ4QTYxRAotOjEwQTU3MDAwRjc5MDVFRTkwM0M2ODNBRjczMENGNjUyM0UyMTI0RTJFNgotOjEwQTU4MDAwOENFMzZCNUM4MkJGRjY0QTU2N0MwNkVENjBFQjI5RkNERgotOjEwQTU5MDAwNkRFQ0QzMUYyQTIzRkJGMkE2MEJFQTcwQkNGNTg5NTc5QQotOjEwQTVBMDAwMTVFQThGNTUzQTlBMjg3RUJFNEVDRDFDQkE4RUM2OUJCMAotOjEwQTVCMDAwOUNBQzNGNUE5MDkyRTkxQ0ZFNDhCQjFDMjEzRThGNkExRQotOjEwQTVDMDAwQjVCMjY4RDMxMkI1NkRFRUUyMUM3REJENUVDQjhEM0Y5QQotOjEwQTVEMDAwNDY2NzhGQ0IyNUM0OUYxQTE4MTJFMjc5QjRDNTMwNEI1OQotOjEwQTVFMDAwNDhGNzE4OTk0MUZBM0VCQTVFMzc0Njc0RjI4NzczRTMyQQotOjEwQTVGMDAwOTREMTRFNTVFOEQzNkE2MTc3QzYyNkY1ODdDOEJGM0EyRAotOjEwQTYwMDAwQjBDN0MzRkVFN0ZENTUwRTcxRUYyNTkwMjI3RUU4RDQ1QQotOjEwQTYxMDAwNzNFMzlBQjE4OTlBODM0QjQ4Q0U5MjRFQ0U5NzdGNzM1QgotOjEwQTYyMDAwNDJDQ0RGMzVCMDMyNDU3MUE5NjZGOUFCQkIyQTVCRDlBNAotOjEwQTYzMDAwMEY4NTIxMzFFRkQ2RkFFNTc5Rjc5RkQyODgyRjkyN0JFQgotOjEwQTY0MDAwOUQ0MEY4M0Y1MDc1RkIzMEU1NDNERjQ5MzhBRjI3NzEzNwotOjEwQTY1MDAwRjk2RUI3Q0U3MjZBRDM2REU3RDA5RDVDMjcxQTUyNjE0RQotOjEwQTY2MDAwMUI5RDdGNzRCQkNBRkMzRjVBRkVDRTkxM0I0ODRGOTc1RgotOjEwQTY3MDAwMTczMTlFQzdCN0FCOTVEMTJDNzk3OEFGREJDNTcwQzZDMwotOjEwQTY4MDAwQjcwQkZGQTJEQzAxRDE4OTAyRTNFRjc1MEJCREYyRTE0QwotOjEwQTY5MDAwQkI4MUVGNDNGOTBFMUQzRkU5NEEyQ0VEMjI3QzU0MDFBQQotOjEwQTZBMDAwRkMyQjVEMjdGNEVFOTdGOEZFMUQwRUE4QzMyMzhFMDU0NAotOjEwQTZCMDAwRkJEODdGQ0JFN0IzMEZCQUVCNzJDRUVGMEEzQjcyRjA1OQotOjEwQTZDMDAwRTg3NDQ1NjI5Q0U3QkUxNTc0RDI1N0VEMUREOEE3RjgxMwotOjEwQTZEMDAwQkU0RjA1RTIzNzU3RTgxRUJFNjcyOUY2M0REODc3NzdBQgotOjEwQTZFMDAwMjRFMzBBRjZERDRCQTJENzkzREZGQUZDREUyREMzMkQ1RgotOjEwQTZGMDAwNDFCMjVGMEU4REY4Q0RENTc3NTdBNDlCRTZBRjc2ODIzOQotOjEwQTcwMDAwMDdDNzg3NDA5NzQyNzRDRUI4MDRBNEFGNzU4ODc2OTA4NwotOjEwQTcxMDAwQkYzRTE2NzI2ODk0QjdEOTk4RDhCQzlCRjZERjE4MkM0OAotOjEwQTcyMDAwMDJBMkYzOEU0RTA3RUY3N0NBNTQzOTY5NTU0RThFMDY1MgotOjEwQTczMDAwRTVCRjJBQkM2Qzc3REY3NkM2MUVEQTgyRjNERjQ2N0E4NQotOjEwQTc0MDAwQzU2MUVFNUU4Rjc2RDdGMDNEM0Q3QTZFRkNFQzg2MjRENwotOjEwQTc1MDAwREJFMUI1RTY1NDFGRURCMzM2QUM1MjQ1MDM4RTM3NEZGRgotOjEwQTc2MDAwMUYyMTdGN0Q3QzhEQ0I3MEUxQjlDNjlCMjVDNkY3RkI5MQotOjEwQTc3MDAwNkI5QzI5M0MyQUZDNTA5RDkyNjlERjFGQkU4RkJDNTEwNwotOjEwQTc4MDAwNUQ0ODdFQ0YyRjM3RjlGMzQ3QzM1RDZFRTI4N0ZEMzAxQQotOjEwQTc5MDAwRDU0M0Y4ODlDRjhBM0M1NEZFQkMyNTNEODJGRUZCMTE4RgotOjEwQTdBMDAwMkY4NEU3Mzg5RUI3OEVFMkEyMTk5NDJCODQxRTk4OEREMQotOjEwQTdCMDAwN0M4MzcyNDREQkJBMTVENjFGOUZBRDc0QzRBOTJFNzQ3NgotOjEwQTdDMDAwQTA1MzY1MzkzOUUwOEIwRTU3NTMxRkY5OURFM0ExNjAwMwotOjEwQTdEMDAwOTRGOTc5QUMzMkM4NzI2OEVGMzNENkRDNUI0RkZDRjI4NwotOjEwQTdFMDAwREExQTBGRkJFRDdEM0ZGQkQ1RERFNEI3QjdDQTdGRkM3RQotOjEwQTdGMDAwRjY1MzE0M0Y1NUE5NENDRjAzQ0U0OEZBNjVFMkVCNEUxMQotOjEwQTgwMDAwRTEyRjlFQjhFQTlGNTlFRTg2RkE2RTA3QzIxQkM0NjMxOQotOjEwQTgxMDAwNkY1MkRENkE2ODc1MzNDM0I3RjMwRDYzNTc4OTdDRDIxNQotOjEwQTgyMDAwNTBGMEQzRjE1REQ4NEY4NzQ1N0VDMTJDM0YyQTAxRUIxNAotOjEwQTgzMDAwNjc5MTU3NkFCMUY0RDg3MjU3RUNBNTNBNUE3N0I3MjJBNAotOjEwQTg0MDAwRUFDMjcyNTU4MkY0ODE2QjkxQzhCRjk5OEEzMzI3RUVCMAotOjEwQTg1MDAwQkQ2OTI2MzcwRUJFMzIyRjBFQ0VDRjMzODE3QjZBNDlCQgotOjEwQTg2MDAwMzdEQUQzOUY3NzVCNzkzNzJCQUY0NDU3NjAzOTVFRUQ4QQotOjEwQTg3MDAwRTI3ODcxM0MyQ0UyQTBBNDMzNTZBOTM1Q0M5N0UzMUZCMwotOjEwQTg4MDAwNUI3RUYwNTRCRjFCMzkwMEUwQTdGRDFBRjdGREU2OUY4MQotOjEwQTg5MDAwMDZDQTEwRDQxQkZEMjFGRUZFOTFCNThGNDhEOUVCNDZBOAotOjEwQThBMDAwNTc2Rjc2RUJBQzM3MzIyMTgyOUJBRjJGRjJGOUUwOEVGNwotOjEwQThCMDAwRUUyMkU2MDM4Q0QzODBFODNCM0EwMzhDNUY1RkYzQUE3OQotOjEwQThDMDAwMzRGMUU5QTlCRjAyQzdBMUZGRDAzRUU1ODU5QUY5RUJCMwotOjEwQThEMDAwRDM3NDRFMTdFNUJGQzQzOTRGRDAzOTVEOTRGRjEyRTdFQQotOjEwQThFMDAwN0JCMTVGRTdGNkU1RkU3QTZFNTdGNjgwQzhGM0RCRkFEOAotOjEwQThGMDAwRTA2QUQ0MDc4OEI3RjYyQUQxMjdGOTI3M0I1QzFBQkM0RgotOjEwQTkwMDAwM0Q0MkZDRTUwQTI5MUFDOUI3QkIyQTk5OTZCMkY0QzE5RgotOjEwQTkxMDAwQjgyRkY2MTZEOUU1MDNFNTVFRTZCRkZDNzMwNTdBMUM5MQotOjEwQTkyMDAwRDZCRDYyREIwOEVFMjhDMjI1QkMzRkJGRjc3RkJFNTQxMAotOjEwQTkzMDAwNEJGQkJDMjEzMzVGOTVGNkY1RUU2NkJEODM3QUMxQzM1MAotOjEwQTk0MDAwRkU4NkQwODdDOTcyMkZFNzFEQzZGN0Q2NDkyMUVDRUZFNgotOjEwQTk1MDAwMTgxMDhFRUUwNUU1MUVGNzQ5RTFCQUUzQThBRkE5N0YwRQotOjEwQTk2MDAwMDBFNTlDRUU3M0EwRjk5RDhGRDMzRUVGRkZBRDg4MkFFMgotOjEwQTk3MDAwN0M0OEVGNUZCMERDQkY4NjAxNDhEOTY1OTQ3QjVCQ0UzNQotOjEwQTk4MDAwQkVERkZEQTQxNTdGNDdCNjNDMjNFRUNGN0E3MERDMzdERgotOjEwQTk5MDAwOTVBNEZCMUZGOEI5MEM4NUYwNzZBOTc0MDU3MzYxN0U0OAotOjEwQTlBMDAwNDg0QTk5OTkzQzEzMkM1MDM3MzQ0NURENzA3MEUyM0I4RQotOjEwQTlCMDAwREM4RjZGMDRBOEMzRkU1NzlEQTY5QkY4RTBBQjAzOEUwNwotOjEwQTlDMDAwRjNENjBEQkYzQTcwRkVCQTYxRUE4QjBFNzA2OTczRTc3OQotOjEwQTlEMDAwNTgwNDE5Q0VCMzUyMDg0Rjc1QzAyMTFBQzJCNkE5MjcyMAotOjEwQTlFMDAwN0E1QjBGRkJDQkEyQUVBODM3NTNDRTgxRkE1QTExRjk4RQotOjEwQTlGMDAwQ0Y0RjQ1Q0M4RkY0OTA5RjE5MTRGOUFFOTAzMjkxMjYyOQotOjEwQUEwMDAwQkIxRUEyN0FCOTRFRUYxN0UyNUNGN0Q0MjgwQzVCMzk3MwotOjEwQUExMDAwRkZGRTgzQ0U0QzJCREYwRkE3NTBCRDMyQkYzRTI5NzlGRQotOjEwQUEyMDAwQkYyN0VBRkJCNUEyMEU2OUQ3MjcxQkQ1Q0NEMTQzODQzQgotOjEwQUEzMDAwQTc2RDZFQzZDM0UwQjMzN0JDNDlGNTJGQkI4RTFGQjJGRQotOjEwQUE0MDAwRUFDMERBNkVEMDA2QzQzRDNFQzZFNzdDNEVENDQzRTE5MAotOjEwQUE1MDAwMDZCQ0M3NEFEQTI0NTNCMzY5MDVENzM3M0Y0MUUzMTcyOQotOjEwQUE2MDAwM0FGRjQyRUI4NjFCMkRGRDg2Q0M5RDIyNzlGRThEODUxQgotOjEwQUE3MDAwNEY3QkRFODAyNThGRDdBOTIyNkYwRDdFOTVGNTdDRUI2RAotOjEwQUE4MDAwMTM1RTkwQzk1RkY2QTk0NzQ5NEU3NjQyNjYzREM5RDMyOQotOjEwQUE5MDAwNjA0MEY4NkQ4OUMzNEVGNkRCRjZGNUU4QkNCRTVDMzU2OAotOjEwQUFBMDAwRjlGRDQyRjlCRjc4OEMwMTA0OTM5OEQ0RkM5NDQ3QUEyRAotOjEwQUFCMDAwRUIzNkY3RjVGMDM5OTIzRDVENzQ4RTYxOTlGNUREREI4QgotOjEwQUFDMDAwNzVFQkUzQzQxRjlENTIwOUNCQTNBMjk5OEJCM0Y1RTVBNwotOjEwQUFEMDAwQTMzRDM1MzlGOUY4NEVGOEEyNDJFRjVDRDYyRDlFRTkzOAotOjEwQUFFMDAwRTJGRDdEMEVBMDc4MkJFMTMxNUVENDA5REYzRjUwMThFNgotOjEwQUFGMDAwNkUyN0E0REFGOUJFQkIzNDY5MThFRjM5RTgzREM5RjQxMgotOjEwQUIwMDAwNTk1N0U3NUE0OUZBRTk1MUNCQkUyNjdDODVFM0JBN0YwQgotOjEwQUIxMDAwRUIxMUYxRTdGQTRERDE4N0U5RENCN0MwNEMxQkU5MzdGRgotOjEwQUIyMDAwMTQ2RDIzQ0VFRjVBNDQ1RUU3NTFEMjk3MjJBRUI5RDdDNwotOjEwQUIzMDAwRDEzNDk3RDc3QUM5MTk3RDk0RDY5OURGMTRGRTg0MkIyNgotOjEwQUI0MDAwMjRGQzdBMjc5ODY5QzJEN0FCOUJDQ0M3ODg4RjM3MTI3MQotOjEwQUI1MDAwOUZBRjY2NDUwNThGQUY5QzdGOEUyN0FDNzNGNEY2OTg0OAotOjEwQUI2MDAwRkY0OUYwOEU1OUZBQjk1MTMzQjlFRURBMDgwRTYzMzA2NQotOjEwQUI3MDAwOTg1NTU3RDcxNzU2NTc5N0I0RUY4OTdBRkE4RDgyOEYyMQotOjEwQUI4MDAwRTFCOUI4RTBDMzU2RDA0ODlFOTBGRjhFRDFGOUVDRjdGQQotOjEwQUI5MDAwMjU4REM3NzY1NzczRERFNTEyRUJEQkVGNkYzMjhGMTMzMAotOjEwQUJBMDAwQkMzRjQ0MjIyN0U4MUU2RkVGREQwMjBDNkY4MUVGMzVCQQotOjEwQUJCMDAwRDYyRENFODQyMjY0MkYzREMyNkY3RUIyQzVEODFBQzk2RAotOjEwQUJDMDAwQ0FGRjlDQjJGOEY3OTQ0NUQ3RTVDODRFNTM5NDJGNTA2RQotOjEwQUJEMDAwMENCNkUzRDc0MEQ4NERGQTIxMUY3RUEyMUYyNkE4RUU1RgotOjEwQUJFMDAwNzNBRUZEOUQwNzRGQkEyOTRGM0MxODZFNzVEMzdCQjRFOQotOjEwQUJGMDAwODRCN0I1ODRGQUEzNTU2Njg4RjYxRkVBRUY3OEY2RERDOAotOjEwQUMwMDAwM0FFMjIzQzFGN0YxNjY5MThGRDg4RkZBMzlFRTlBODMzMQotOjEwQUMxMDAwRjM4NzFFOTlDRkQ1MTY4NjM0RTVEM0ZENUVFMTE3Rjk4QgotOjEwQUMyMDAwMzE1RUQ0OTE4RkZDQzEzMERCNzNGQzNFNDFBOTgzM0Y4MAotOjEwQUMzMDAwOTMzQzUxQkMxRDMyQzBBNDc4MzIxQzA1OTIwQkJGMzYyOAotOjEwQUM0MDAwQjc5RTRDNUU1QjM4MDM3NEFFNzNDMTkxQUI3MEJEOTcxOQotOjEwQUM1MDAwRDZDNzE4REZFNTlCMzUzRTg3MkJFNDk4OEJFMzYxRTE4RgotOjEwQUM2MDAwRjhEQTRGRjhBQTNCNEZERThERjBENTcwNkU3QzlEQzVBQgotOjEwQUM3MDAwQkIyNTc3Rjk3OEYyNkQ5NkY5REVDRjA3QTZGOTVFNzBGRAotOjEwQUM4MDAwQkE4REYzMjI3RTU0Nzg1NENGMkZEQjJDRjQ4Q0VDMzUyNAotOjEwQUM5MDAwMjFFQUEzN0E1OTk0RUY5NzA4NjRDMDY4OThDMzJGRkEwMQotOjEwQUNBMDAwOEE4QzVGNTlDQkYwM0E3RkQ4ODBFODBBQzI0NzhDRjE5MgotOjEwQUNCMDAwOTk3RkZGQzY2M0RGNjgyN0JDQkRCNDUzRThENTc1OEFBQQotOjEwQUNDMDAwQTUzRjYyNzgxN0U0Q0Y3RkIyRjQxQjU4NzZBOUQzMjM0RgotOjEwQUNEMDAwRUNDRTQ2Rjg4OTU3RTRCNTA1OUYzNkEyM0JFRTJFOUQ5MwotOjEwQUNFMDAwQUY1RkVERjY0OTJCQUY5Q0ZGRkRFNzlCM0QyMjBGQTAyOAotOjEwQUNGMDAwNEZCMDdFMUZFQzEwRjA3RDNFRTE4NzFFMUQ1RUM1RkU0RAotOjEwQUQwMDAwQzNDRDk1NzU0NUQ5RkFGMTcyRDcwOUYzRUI4MjE3QUEyRAotOjEwQUQxMDAwMDNDRUYxOERDOTc0RkY4Qjc2MzJCRTQ5M0YzNzdGMUM1RAotOjEwQUQyMDAwQjJFNDZEQThERjVENTBFRTBFMkQ4RTg0MEM5MkFCNjYwMgotOjEwQUQzMDAwMzMwRTQ4QjdGRDgxNEM4OEY4Njc2OEYyM0RGNjkzOTU2RAotOjEwQUQ0MDAwNTc2NTgzRkM0RDQ1ODkwMENEQkJCOTNDQzNGNERGMTA4QQotOjEwQUQ1MDAwMzY4MUVBNEE4N0ZBQ0Q2RjY1QzNGREVDQTY2OEY3NjZDRgotOjEwQUQ2MDAwN0EyN0E0NEQ5ODA0QzcwQkU5MzhEOUEzNUJDQUNDNThGRAotOjEwQUQ3MDAwQTQwMDFEM0VCQTU5RTRGRjVFREQxNEQ5QjY5OUY0MEU2NQotOjEwQUQ4MDAwRTlDRTU1RTg2QjQ1Q0M3RkE0RkU0MkY1RDU3Qzc5RUE0NwotOjEwQUQ5MDAwNzA5M0JEQjg3NDc5RUE3MkQzRkQ0NkFCMjJGQzRFNkI1QQotOjEwQURBMDAwRjQyNzMyNzk1ODczRkVBNTI1NEZBM0NERDNBQzI3NkM3OQotOjEwQURCMDAwQjlGQURDRTYzQ0JEMTNCNEY0NEVEMDY0QjlGOEZDNjZENQotOjEwQURDMDAwRERDQTAzNDc1ODNFOUMyNDRGRDk3QTI2NjhFQjE5OTM3NQotOjEwQUREMDAwRTU1MTA5REFGMjY0QzkxRkM5MTM3RUJGQ0UzOUQzNDZFMwotOjEwQURFMDAwN0VDQTEwODg3NzhDRjlGMjM1QkUyOTlBMjAzQTVDNTdEMgotOjEwQURGMDAwRkVFN0VFNkE3REVFRkRBN0FFMEI3OTFBQURCMkY4QkRBNwotOjEwQUUwMDAwRjk2OUU2RkY1M0M4RkZGNDU4NzhEMDVCOTNDM0VGNzYzNwotOjEwQUUxMDAwQkI3NjU2ODYzNDkyRTJBNjU5ODlEQjdGOTgyREU2NzY3QQotOjEwQUUyMDAwRERBQzg3NUI3M0I2OENEQjk2RDkwMEI3QURCMzhCQjg1RQotOjEwQUUzMDAwNkQ5QkFERTRCNjdEMTZGOUZFN0FFNEZGRDk2QTZFNkZCQwotOjEwQUU0MDAwOUU1RENFRUQ4NkQ5QTVEQzc2Q0M1RUNGRjMzQTY3NTcxMgotOjEwQUU1MDAwNzI3QkNCRUM4RERDREUzQURCMkNGNkExOUE1MDY5NDE5QgotOjEwQUU2MDAwRkVBNzcyRDY2NUUwN0YyMzRFRjVEMUExQzlCQkRGMjREMgotOjEwQUU3MDAwRkMzODM1OTVGMzI4ODk0MDEzRDc3QjlDNEE4NkY5RkYyNwotOjEwQUU4MDAwNjg1OEQ4ODcwRDVFNDE5RjdDRkU3Rjc1NTNGNERCODU0MwotOjEwQUU5MDAwRjg3RkQwMDlDRjkwQ0I5NUVGMjdBMEJGRjMyQ0YxQjk2NQotOjEwQUVBMDAwRTQ3REUxNkY5Q0ZGNzQwQTNGMDdGRDhGNjNDQ0ZGOTc0MQotOjEwQUVCMDAwNjhGRkNGRkE5NTE1Qjk3RUU1Njg3OUFFNUYzOUQ0NkMzNQotOjEwQUVDMDAwRkI5NUFFMTRENUMxNzY0OTNBQkYxMzdCN0Y1M0Y0QzdDNwotOjEwQUVEMDAwOUI1OUZGNDY3NkQyNzhCNEM3QUQ5MTNGOTUwOERDMUNFQwotOjEwQUVFMDAwRjI2MjdGQzc3RTE5MjhERjg3RkVDNTE0Q0Y0M0ZENDA3RAotOjEwQUVGMDAwNzY2M0ExRjI5QUI2REVGN0RBRjMxQkUxQTQyMzc2MTFBQQotOjEwQUYwMDAwRkVDOURCRjRCRkNEODVFNEJFREU3MzQ5NzZENEQ5MjYxNQotOjEwQUYxMDAwRTQ1RTEzNzI5RkE4OEEwQzUzQkUyNTkxMjdGN0I2MURENQotOjEwQUYyMDAwNDUzQ0U0QzhGREZCQjZEQzVCNzI1QzFBMTRFRjNFNEE5QwotOjEwQUYzMDAwNDlFRTkxOUVBN0NGQ0E3REFFMUQ1NUFDRjlDRTBFNTFGQwotOjEwQUY0MDAwREY2QTBCMEFCREFBNzQwODdEQTE2OEI5NzYxNEY5MDVGOQotOjEwQUY1MDAwN0EwQkY4MTM3MTQ1RjA0RDY3REQ3N0NGREEzM0IyQUI3QQotOjEwQUY2MDAwQTVDMTgwNTQ4MjVCNkI3RkNEQzQ4OUZEMjY5NTVBOTYxRQotOjEwQUY3MDAwRUY3QzM5NEE2OEFCOThDRjI3OTUzNjI4MjRGRjBCOTY4QgotOjEwQUY4MDAwQTM4MDZENDc0Q0I2MjNGOUYzNkM3OTFBOUFFQzY0QkMzNAotOjEwQUY5MDAwRDg3NjY1MTJFRjZENjZEOTkzMEQ5QUMwMDNEQTkzQUIzQwotOjEwQUZBMDAwN0EwQkM4RDNCQUM1NjYzNDUyRTA5QzJCN0E4NUZGRkU3MwotOjEwQUZCMDAwQ0E0RDExRTEyRkEyOUY0ODdFNEFDMjU5RDgwRjU4RDFERAotOjEwQUZDMDAwMkJFODU2REE5MTU0MDg2RkVCNzU4ODk1QTExRUVDRThEMgotOjEwQUZEMDAwNDhCNzUxMEQwM0U1Nzk0NTJGQzJCQkM5Q0MwQzkyMEM4MwotOjEwQUZFMDAwMEU3QUM3ODI3NDdFOTRDRjQ2M0FEN0E1Q0E2N0Q5MjYwRgotOjEwQUZGMDAwQUIyRUI3QTc4Q0ZEMTZCQkJEMTBERkRCRkU4RUNERkZFMQotOjEwQjAwMDAwRjlGMzlFQUMzNkI3MTZDMkNCOTE1RUUxQUYxRjFEN0U0MQotOjEwQjAxMDAwM0E4NzNGOTI0QUVEMkQ4NjVFNTBBRjlBQzY2NUQxQUIxNgotOjEwQjAyMDAwMEJGMzJCMjZEMUNFQjE1RTNEQjc1RkIxODNFOEIwNTBCNAotOjEwQjAzMDAwQkZFMkNFREVCMzdFQzUyRUEyRDNCQTA2RTE1NzFDRTkyRAotOjEwQjA0MDAwODVDQkVCMkZCNEQ4RjFDQUE1RjkwQjlGRUYzREJGQkY1RAotOjEwQjA1MDAwMzBEOEFCRjNCODgyN0UzNUU5MERCRkE1MzcyRUQ2NUY2OQotOjEwQjA2MDAwMjhFMDFGMUNFQ0U1Mzg3QTQ2QTZGQTFGQTJEQTEwRjk5MAotOjEwQjA3MDAwMTA1MTE3NDUzRDczM0ZFMTBERTM3OEY2MTc4RTdBMDVDMQotOjEwQjA4MDAwQkY5ODhBNkQ5RjIyMEZEMDc4RDIxNEZFQzJFNTkyMDMzQQotOjEwQjA5MDAwRjRGQjFFRUEyRDVGQjgzQzJDNzQ1RURENjM2Qjg3MzNENgotOjEwQjBBMDAwRTRFNzgwMkY0OUVGQTYwN0U5QkQxMkM1OEZCRkY2ODlGNwotOjEwQjBCMDAwNzcwNDAwRjU5NEY3RkY5Q0JDQ0MyMDNCMzc1RUZDODUwMQotOjEwQjBDMDAwQUZEMUZDM0Q3MTA1RThEREUwODNGRDIyRkYzNzRBRjk5MQotOjEwQjBEMDAwQkY2QkIxRUY4QzdEOURDNkY3MEZCOEI0QTMwOEVGODNBQgotOjEwQjBFMDAwMjI3RkRDODEzQ0Y1ODE2NzcxOEFERTA1MURCM0U0Q0RFQQotOjEwQjBGMDAwMDVEQjRCMEFGMUQ1RENGOUM0RkI1QzdBQkE3Mjg2RkYzQQotOjEwQjEwMDAwQUVBMzRBRTMzQ0I5OEQxRjM1MDI3MTg0M0ZCMkMyQzE4MAotOjEwQjExMDAwRjU5MTkxMEY3RkYzQzhFRDc0RUUwRkJCMERBQTNGNzE0RgotOjEwQjEyMDAwQTExNUZCNjVDQjQyOUM0NzQ3NkYxMEMyNTk3OTExMTk5NQotOjEwQjEzMDAwOTQ2OUNBQzcwRkQzMUJGNUFDRkE2QjcwMjNDNkQxNTlGQgotOjEwQjE0MDAwNzE0NjQ5Mzg5MkQzRDcyMUNBRkIxRTBFM0ExOEVFQTE5OAotOjEwQjE1MDAwNzYxMTE3MURGMjRFQjhCNTAyRkFFNUJFRkVEQzc3NEE0RAotOjEwQjE2MDAwRjlBREJDRTYwRDdFMjczODU2QUY3MERERTdGRUQ1NEI1NgotOjEwQjE3MDAwM0E0OTRFMEUyRUUxNEEzMTE0RDUzOTIyQTkwMjcyN0M4OQotOjEwQjE4MDAwREE5MjYzMUQ3NDBGRTFEMUQzRDk1NTUyQzhBRUQ4RUQxMAotOjEwQjE5MDAwNjBERTM5NjQyRDZBOTJCRTJFQUE0RTQ2ODg4RjhCRUFGNQotOjEwQjFBMDAwODI1MjNDMEIwRkJGQjRFMDhGNDhGMUY0M0E3RThGMjZGOQotOjEwQjFCMDAwRUMwNEM1QkJGNDRFNjVBOEZDMkVBRTQ3QkEzMURFOUY0OQotOjEwQjFDMDAwQzZFRjZFQjQ0QkJGQzVCNkFDNDI4RDE2M0EyRjZDMTFBQwotOjEwQjFEMDAwRjk5MDExNjcyQTQyNzQxOTU5QUE3MDlEMTI3OUFBNjBEMAotOjEwQjFFMDAwREVFQkY3OTZCRDJBQUExQkUzRjM0MTlEQzI3NUE3RkNDRgotOjEwQjFGMDAwNzlCRkIyRTdBOTQ5QUU2MzFDQUNGQjc3OURFNEVFRTBGMgotOjEwQjIwMDAwNTVDMEY5RURGRkZFRTVBRTI3MDY0OEJGRjQyMzFEOURBRQotOjEwQjIxMDAwQzRBRjFEREMxNjJERkIwNkUzN0RCNDUxRDFFODFFRUI1NwotOjEwQjIyMDAwRTVCNTAzNUMyN0RBMDgwNkY5MjdGOTdDNTBCQzYyODk4QQotOjEwQjIzMDAwODdGMzlEMUQwRUY2RUZGMkY5QTIwODE5NzU4QUZDMzQwQQotOjEwQjI0MDAwMjVDMzc2QzIwOTJGQjJERTFDMzU0NERDQTQ2M0I0MkFDMAotOjEwQjI1MDAwRkE4MjVGRUM3QTUzRDBFMkM3RkM3QjhENUE3MkI1REY3RAotOjEwQjI2MDAwQ0FBQjk3NTg3Rjg3MzNENkYxNjdBRUY3OEUyRTRFQjNCMQotOjEwQjI3MDAwMURCOUFGMjUxREEyQkFBMTNGRTgzNjI4NTQzOUQwMUMwQwotOjEwQjI4MDAwRTFGQ0Y2RTg0QTA3RkJBREYzRTBBRTE0N0EzOUZGM0M4NwotOjEwQjI5MDAwQ0VFM0VGMDlGREE4ODhGQzg1QkY0MTkxQzhFRTdDQzlDQgotOjEwQjJBMDAwM0FDNzA2NTNDODkzMTYxNkZFOUJENjEzMDMwRDBGNUZCRAotOjEwQjJCMDAwRkU4NjlDRDI3MTFGNjlEOUVGRTM0RTFDNEY2RTEzNkY0RgotOjEwQjJDMDAwOEI4QjU0OTEyNzUzQ0Q5QjA3QzhBRUZEQjg1MjA2MjlFRQotOjEwQjJEMDAwNEM4MkY3MDk4M0YzNkQxMTIxREZGNkJCRUM4QTFFMzUzMgotOjEwQjJFMDAwMjdCRTJGODFBQzNFQkY1M0M5RUQ4M0RDNzdERUY3NjYwNgotOjEwQjJGMDAwN0I3RTdERjdFQjI3QjJFMEI1NkVDOUFEQjM1RDY4RkQyRgotOjEwQjMwMDAwMDdGREJCNUYzRjgxN0MzMjY2OUM1RkFFNkNGQTI0RkIxRAotOjEwQjMxMDAwQzM0MkZGNTlGQzY1RjMxQjg1ODBGNDI4Rjg1Q0VCMUZFMgotOjEwQjMyMDAwMEM0NDBCRkEyNUZCQjYwODNENzkyMTdEQTRCOUEyMzE2NgotOjEwQjMzMDAwNUE3RkY4QTY1QzM4Nzc1OUYyNzY5NzA1QzdCNTU4QUJBRgotOjEwQjM0MDAwRTQ3OUQ2M0JBN0MzMUVEOEZBNzQ4MTdCOEQ2QzUxNzkwMgotOjEwQjM1MDAwRkUxQzNGREI3RUMwOEI5Nzk2ODc1QkQxMjNFMjg3NjAyNAotOjEwQjM2MDAwOEQ4N0VDMzBFMkYzNDVEMjFGN0YwREFBN0EzNjdGMEUyRgotOjEwQjM3MDAwRjk3MkZENTBEQjBGRjhFOTE2MkIwRjU3NUUyMUQxRkE1OQotOjEwQjM4MDAwODA2RURCRjFEQzNDNDFCRTFEMkY3MkE2MzgyRjVEQjQxMAotOjEwQjM5MDAwNTRCNUY1MENFQjgzMEY3QUVGNzkyMjRFRjI5MzNFQzg0OQotOjEwQjNBMDAwRkU5RThBRkM0QkY1QkMzMjMyODgwNUU4MDRBMURDQkY2NgotOjEwQjNCMDAwMTNEOUIyMDUxODNGNjVGQUM0NTQyQkRFQTMyQ0EyNzAzMgotOjEwQjNDMDAwM0Q0NDQ5ODI5MTI2NzgxQjhCRjhFRjNGRTg3N0JBODk5NAotOjEwQjNEMDAwRUMxQzcwNTA5QjZDRkIyNEE0NzFGRTAzQjU4QUMxRUY3QQotOjEwQjNFMDAwMDhDMUQ5RkMyRUQ5REQyQTNGRDc1MTZEQjlCODEwQkQ5RgotOjEwQjNGMDAwRUQ3M0QxN0JCMURDNzdGMDE3MjcwRjhGNkRCMURFNjU3MAotOjEwQjQwMDAwN0JDMDIzRTQ2MUEzNjM4OEYzMUQ4RTE0QkY4NTQ3Nzk1NQotOjEwQjQxMDAwNTc5QUFDOTIwMkQ1RkI0OTA4NzAzQzQ4RUY4MjI0QUJBNgotOjEwQjQyMDAwOEU1NDNCMjcyNzcwQUJGNTZFNzNCNzc4M0ZDMzdGNUZCMQotOjEwQjQzMDAwNTg0QjdGMEY5QUUxQkYxQkJDOUE1RUI3Q0E4MkFFMjRGRAotOjEwQjQ0MDAwMjdBN0EwQ0E0MTc1RTJGODcxNDkzQUVCMUYyREEyQTdDMAotOjEwQjQ1MDAwOEU4NjgzRDYyRDgxMDhCN0Y5RTdCRTA2NjJGQ0JEMUUzNQotOjEwQjQ2MDAwOTJEQzJFODMwOTZFMUI2MDhBREI0Njk4RTE5NkQ0MTUyOAotOjEwQjQ3MDAwOURDNzM4MjFFQTFEQUJDMDkwRTlGQjZBODg3MERCMDRFOAotOjEwQjQ4MDAwMzE2RUMzOTBFNEY2Q0I2RDlGRkNENjRFQTRDMzhGRTYxRAotOjEwQjQ5MDAwRTE0NUUwQjU4MDVDQTcxMUU4RDlGQkRCNzhGRUMyMTY3OAotOjEwQjRBMDAwN0Q0MTcyM0IxNDEwNzk5M0I2NzA5QUZEN0FBRjFFRTExQwotOjEwQjRCMDAwQjhDRjE5MTQ3QzZEQzM3MTlFMjM0RkZDRjdGQTRGRjk3NgotOjEwQjRDMDAwN0Y1RkYyRkY1MTlFOTM1NTIwM0YwMDAwMDAwMDAwMDA3NwotOjEwQjREMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE4MDAwMDAwMDA1NAotOjEwQjRFMDAwMDAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAxQwotOjEwQjRGMDAwMDAwMDAwMjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAxNAotOjEwQjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMDAwMDAwMDAxQgotOjEwQjUxMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAxQgotOjEwQjUyMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMwotOjEwQjUzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM5MDAwMDAwMDBEMgotOjEwQjU0MDAwMDAwMDAwMDAwMDAwMDAzODAwMDAwMDAwMDAwMDAwMDBDMwotOjEwQjU1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhFMwotOjEwQjU2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQgotOjEwQjU3MDAwMDAwMDAwMDAwMDAwMDAwQzAwMDAwMDAwMDAwMDAwMDBCRgotOjEwQjU4MDAwMDAwMDAwMEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRBOQotOjEwQjU5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE4MDAwMDAwMDA5MwotOjEwQjVBMDAwMDAwMDAwMDAwMDAwMDAxQzAwMDAwMDAwMDAwMDAwMDA3RgotOjEwQjVCMDAwMDAwMDAwMUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTM1QwotOjEwQjVDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNBMDAwMDAwMDA0MQotOjEwQjVEMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDA2QQotOjEwQjVFMDAwMDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE1OAotOjEwQjVGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAzQgotOjEwQjYwMDAwMDAwMDAwMDAwMDAwMDA1MDAwMDAwMDAwMDAwMDAwMDBFQQotOjEwQjYxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMyNwotOjEwQjYyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFCMDAwMDAwMDA2RgotOjEwQjYzMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMgotOjEwQjY0MDAwMDAwMEMwMDAwMDEwMDAwMDAwMDAwMDA4MDAwMEMwMDg1QQotOjEwQjY1MDAwMDAxMDAwMDAwMDAwMDAwMjAwMDBDMDAwMDAxMDAwMDAwOAotOjEwQjY2MDAwMDAwMDAwMTAwMDAwOUZCMDAwMDAwMDAwMDAwMDAwMDg3MwotOjEwQjY3MDAwMDAwMEMwODAwMDEwMDAwMDAwMDAwMDA0MDAwMEMwODgyRQotOjEwQjY4MDAwMDAxMDAwMDAwMDAwMDAwMjAwMDBDMDgwMDAxMDAwMDA1OAotOjEwQjY5MDAwMDAwMDAwMTAwMDAwOTEyMDAwMDAwMDAwMDAwMDAwMDhFMQotOjEwQjZBMDAwMDAwMDkzNDAwMDAxMDAwNDAwMDAwMDAxMDAwMDkzNDhFNgotOjEwQjZCMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDA5MzUwMDAwMDAwMDBBNQotOjEwQjZDMDAwMDAwMDAwMDgwMDAwOTM1NDAwMDAwMDAwMDAwMDAwMDI4OQotOjEwQjZEMDAwMDAwMDk0MTgwMDAwMDAwMDAwMDAwMDA4MDAwMDkzNThDQgotOjEwQjZFMDAwMDAwODAwMDAwMDAwMDAwODAwMDA5QUIwMDA0MDAwMDBDMAotOjEwQjZGMDAwMDAwMDAwNDAwMDAwOTM5ODAwMDgwMDAwMDAwMDAwMDhDRgotOjEwQjcwMDAwMDAwMDkzRDgwMDA4MDAwMDAwMDAwMDA4MDAwMDk0MjAwQQotOjEwQjcxMDAwMDBDODAwMDAwMDAwMDA5ODAwMDA5NUIwMDA5ODAwMDBFQwotOjEwQjcyMDAwMDAwMDAwMjgwMDAwOTVGMDAwOTgwMDAwMDAwMDAwMjhBQwotOjEwQjczMDAwMDAwMEM0ODAwNTQwMDAzMDAwMDAwNTQwMDAwMDlEMjA0RQotOjEwQjc0MDAwMDAwODAwMDAwMDAwMDAwMTAwMDA5RDIxMDAwODAwMDAyQQotOjEwQjc1MDAwMDAwMDAwMDEwMDAwMjAwODAwMTAwMDAwMDAwMDAwMTBBMAotOjEwQjc2MDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDlDRDgzRAotOjEwQjc3MDAwMDAwODAwMDAwMDAwMDAwMjAwMDA5RDE4MDAwMDAwMDAwQQotOjEwQjc4MDAwMDAwMDAwMDEwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDBCNwotOjEwQjc5MDAwMDAwMDAwMDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5RQotOjEwQjdBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRjIwMDAwMDAwMDBBQQotOjEwQjdCMDAwMDAwMDAwMjAwMDAwQ0Y0NjAwMDAwMDAwMDAwMDAwMDE1MwotOjEwQjdDMDAwMDAwMDYwMDAwMDIwMDAwMDAwMDAwMDIwMDAwMDczMDA2NgotOjEwQjdEMDAwMDAwODAwMDAwMDAwMDAwODAwMDA5RkEwMDAwMDAwMDAxQQotOjEwQjdFMDAwMDAwMDAwMDEwMDAwOUZBODAwMDAwMDAwMDAwMDAwMDExMAotOjEwQjdGMDAwMDAwMDlGNjAwMDAwMDAwMDAwMDAwMDEwMDAwMDlGNjMzOAotOjEwQjgwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDA5RjYxMDAwMDAwMDAzNwotOjEwQjgxMDAwMDAwMDAwMDEwMDAwOUY2NjAwMDAwMDAwMDAwMDAwMDEyMQotOjEwQjgyMDAwMDAwMDlGNjcwMDAwMDAwMDAwMDAwMDAwMDAwMDlGNjgwQgotOjEwQjgzMDAwMDAwMDAwMDAwMDAwMDAwNDAwMDA5RjZDMDAwMDAwMDBGOQotOjEwQjg0MDAwMDAwMDAwMDQwMDAwMDA1MjAwMDAwMDAwMDAwMDAwMDBBMgotOjEwQjg1MDAwMDAwMDAwMDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNFMgotOjEwQjg2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MDAwMDAwMDBEMwotOjEwQjg3MDAwMDAwMDAwMDAwMDAwMDAwMjAwMDAwMDAwMDAwMDAwMDBDNgotOjEwQjg4MDAwMDAwNjAwMDAwMDAwMDAwMDAwMDAwMDIwMDAwMDlGNzA4MwotOjEwQjg5MDAwMDAwMDAwMDAwMDAwMDAwMTAwMDA5RjkwMDAwMDAwMDA3OAotOjEwQjhBMDAwMDAwMDAwMDgwMDAwMDA1MzAwMDAwMDAwMDAwMDAwMDAzRAotOjEwQjhCMDAwMDAwMDlGOTgwMDAwMDAwMDAwMDAwMDAyMDAwMDlGOUMxNAotOjEwQjhDMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDA5RjlEMDAwMDAwMDAzQgotOjEwQjhEMDAwMDAwMDAwMDEwMDAwMDAwOTAwMDAwMDAwMDAwMDAwMDA1RQotOjEwQjhFMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDQxMwotOjEwQjhGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDA0NwotOjEwQjkwMDAwMDAwMDAwMDAwMDAwMDA1MDAwMDAwMDAwMDAwMDAwMDBFNwotOjEwQjkxMDAwMDAwMDAwODkwMDAwMDAwMDAwMDAwMDAwMDAwMDEyQzhDNAotOjEwQjkyMDAwMDA4MDAwMDAwMDAwMDA4MDAwMDAwMDAxMDAwMDAwMDAxNgotOjEwQjkzMDAwMDAwMDAwMDAwMDAwQTAwMDA3MTAwMDAwMDAwMDA3MTAzOQotOjEwQjk0MDAwMDAwMDFBQzgwMDAwMDAwMDAwMDAwMDA4MDAwMEFFQzA5RgotOjEwQjk1MDAwMDAwODAwMDAwMDAwMDAwODAwMDBBRTQwMDAwODAwMDBFMQotOjEwQjk2MDAwMDAwMDAwMDgwMDAwQUU4MDAwMDgwMDAwMDAwMDAwMDg5MQotOjEwQjk3MDAwMDAwMDIwMDgwMDEwMDAwMDAwMDAwMDEwMDAwMDIwMDA1RgotOjEwQjk4MDAwMDAwMDAwMDAwMDAwMDAwODAwMDBBMDEwMDcxMDAwNDBBOAotOjEwQjk5MDAwMDAwMDAwNDAwMDAwMUJGODAwMDgwMDAwMDAwMDAwMDE0QgotOjEwQjlBMDAwMDAwMDFCRjkwMDA4MDAwMDAwMDAwMDAxMDAwMDFBRDA5MAotOjEwQjlCMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAxQUQ4MDAwMDAwMDA5NAotOjEwQjlDMDAwMDAwMDAwMDIwMDAwMUFEQTAwMDAwMDAwMDAwMDAwMDI3RgotOjEwQjlEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFGMDBCOAotOjEwQjlFMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDAxQjc4MDAyODAwMDA3QwotOjEwQjlGMDAwMDAwMDAwMDQwMDAwRTAwMDAwMjAwMDAwMDAwMDAwMjAyMwotOjEwQkEwMDAwMDAwMEYzMDAwMDA4MDAwMDAwMDAwMDA4MDAwMDFBRjAyOQotOjEwQkExMDAwMDAwMDAwMDAwMDAwMDEwODAwMDAxQjM3MDAwMDAwMDBDQgotOjEwQkEyMDAwMDAwMDAwMDEwMDAwMUIwRjAwMDAwMDAwMDAwMDAwMDFFQQotOjEwQkEzMDAwMDAwMDFCNzAwMDAwMDAwMDAwMDAwMDA0MDAwMDFCNzRFOAotOjEwQkE0MDAwMDAwMDAwMDAwMDAwMDAwNDAwMDAwMDUwMDAwMDAwMDBBMgotOjEwQkE1MDAwMDAwMDAwMDAwMDAwMDAwMzAwMDAwMDAwMDAwMDAwMDBFMwotOjEwQkE2MDAwMDAwMDAwMDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZDQgotOjEwQkE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MDAwMDAwMDBCRgotOjEwQkE4MDAwMDAwMDAwMDAwMDAwMUJDODAwMDAwMDAwMDAwMDAwMDFEMgotOjEwQkE5MDAwMDAwMDFCRTgwMDAwMDAwMDAwMDAwMDA4MDAwMDAwNTE0QQotOjEwQkFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQkQwMDAwMDAwMDBBQgotOjEwQkFCMDAwMDAwMDAwMDQwMDAwMUJENDAwMDAwMDAwMDAwMDAwMDQ4RgotOjEwQkFDMDAwMDAwMDFCRDgwMDAwMDAwMDAwMDAwMDA0MDAwMDFCREM4OAotOjEwQkFEMDAwMDAwMDAwMDAwMDAwMDAwODAwMDBCMDAwMDAxODAwMDA5NgotOjEwQkFFMDAwMDAwMDAwMTgwMDAwQzAwMDAwNDAwMDAwMDAwMDAwNDBGRQotOjEwQkFGMDAwMDAwMEMwMDAwMDQwMDAwMjAwMDAwMDAxMDAwMEMwMDE4MgotOjEwQkIwMDAwMDA0MDAwMDIwMDAwMDAwMDAwMDBFMjAwMDAyMDAwMDBGMQotOjEwQkIxMDAwMDAwMDAwMjAwMDAwRTIwNDAwMDIwMDA4MDAyMDAwMDJGMwotOjEwQkIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUyMDAzMwotOjEwQkIzMDAwMDAwODAwMjAwMDAwMDAwNDAwMDBGNDAwMDAyODAwMDBCRAotOjEwQkI0MDAwMDAwMDAwMjgwMDAwRjU0MDAwMTAwMDAwMDAwMDAwMTA3OAotOjEwQkI1MDAwMDAwMEY1QzAwMDIwMDAwMDAwMDAwMDIwMDAwMEY1QzAzQgotOjEwQkI2MDAwMDAwMjAwMjAwMDAwMDAwMjAwMDBGMzAwMDAyMDAwMDA5RQotOjEwQkI3MDAwMDAwMDAwMjAwMDAwMjAwODAwMTAwMDAwMDAwMDAwMTA1RAotOjEwQkI4MDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDExMDg3NAotOjEwQkI5MDAwMDAwODAwMDAwMDAwMDAwODAwMDAxMTY4MDAwODAwMDAxNAotOjEwQkJBMDAwMDAwMDAwMDgwMDAwMTFBODAwMDgwMDAwMDAwMDAwMDhDNAotOjEwQkJCMDAwMDAwMDEyNDAwMDA4MDAwMDAwMDAwMDAxMDAwMDEyNDFENwotOjEwQkJDMDAwMDAwODAwMDAwMDAwMDAwMTAwMDA0MDAwMDAyMDAwMDQwOAotOjEwQkJEMDAwMDAwMDAwMTAwMDAwNTkwMDAwMzAwMDE4MDAwMDAwMTBBNAotOjEwQkJFMDAwMDAwMDU5MDgwMDMwMDAxODAwMDAwMDAyMDAwMDU3MDA1MwotOjEwQkJGMDAwMDAwODAwMDAwMDAwMDAwMTAwMDA1NzAxMDAwODAwMDBEQwotOjEwQkMwMDAwMDAwMDAwMDEwMDAwMTFFODAwMDAwMDAwMDAwMDAwMDEzOQotOjEwQkMxMDAwMDAwMDExRjAwMDAwMDAwMDAwMDAwMDAxMDAwMDExRjgxOQotOjEwQkMyMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAxMjQ0MDAwODAwMDBBNgotOjEwQkMzMDAwMDAwMDAwMDQwMDAwNDAwMDAwMjAwMDAwMDAwMDAwMjA4MAotOjEwQkM0MDAwMDAwMDUzMDAwMDEwMDAwMDAwMDAwMDEwMDAwMDE1MzgzNAotOjEwQkM1MDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAzMDAwMDAwMDBFMAotOjEwQkM2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENAotOjEwQkM3MDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRCRgotOjEwQkM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNTA4MDAwMDAwMDA5NwotOjEwQkM5MDAwMDAwMDAwMDEwMDAwMTUyODAwMDAwMDAwMDAwMDAwMDg1RQotOjEwQkNBMDAwMDAwMDAwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDgzMDhCOQotOjEwQkNCMDAwMDA4MDAwMDAwMDAwMDA4MDAwMDAwMDAxMDAwMDAwMDA4MwotOjEwQkNDMDAwMDAwMDAwMDAwMDAwMjAwODAwMTAwMDAwMDAwMDAwMTAyQwotOjEwQkNEMDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDg0MTBBOAotOjEwQkNFMDAwMDAwODAwMDAwMDAwMDAwODAwMDA4NDcwMDAwODAwMDA0OAotOjEwQkNGMDAwMDAwMDAwMDgwMDA2MDAwMDA0NjAwMDI4MDAwMDA0NjA0NgotOjEwQkQwMDAwMDAwMDg1MjAwMDA4MDAwMDAwMDAwMDAxMDAwMDg1MjFERgotOjEwQkQxMDAwMDAwODAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAxQQotOjEwQkQyMDAwMDAwMDAwMDAwMDAwODQwODAwMDAwMDAwMDAwMDAwMDE4NgotOjEwQkQzMDAwMDAwMDg0RjQwMDA4MDAwMDAwMDAwMDAyMDAwMDg0RjYwNwotOjEwQkQ0MDAwMDAwODAwMDAwMDAwMDAwMjAwMDA4NTA0MDAxMDAwMDA1MAotOjEwQkQ1MDAwMDAwMDAwMDQwMDAwODc2MDAwMDAwMDAwMDAwMDAwMjBEOAotOjEwQkQ2MDAwMDAwMDYwMDAwMDIwMDAwMDAwMDAwMDIwMDAwMDczMDBDMAotOjEwQkQ3MDAwMDAwODAwMDAwMDAwMDAwODAwMDAwMDAzMDAwMDAwMDBCMAotOjEwQkQ4MDAwMDAwMDAwMDAwMDAwMDAwNTAwMDAwMDAwMDAwMDAwMDBBRQotOjEwQkQ5MDAwMDAwMDAwMDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc5NgotOjEwQkRBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4ODA4MDAwMDAwMDAwMwotOjEwQkRCMDAwMDAwMDAwMDEwMDAwODgyODAwMDAwMDAwMDAwMDAwMDhDQQotOjEwQkRDMDAwMDAwMDAwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDg4MTA4QgotOjEwQkREMDAwMDAwMDAwMDAwMDAwMDAwNDAwMDA4ODE0MDAwMDAwMDBDMwotOjEwQkRFMDAwMDAwMDAwMDQwMDAwODgxODAwMDAwMDAwMDAwMDAwMDRBQgotOjEwQkRGMDAwMDAwMDg4MUMwMDAwMDAwMDAwMDAwMDA4MDAwMDMwMDA2NwotOjEwQkUwMDAwMDA0MDAwMDAwMDAwMDAwODAwMDAzMDA4MDA0MDAwMDA3MgotOjEwQkUxMDAwMDAwMDAwMjgwMDAwMzM5MDAxQzAwMDEwMDAwMDAwMDg1RQotOjEwQkUyMDAwMDAwMDMyMDAwMDIwMDAwMDAwMDAwMDIwMDAwMDM3MjA0OQotOjEwQkUzMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAxMDIwMDYyMDAwMzg2QwotOjEwQkU0MDAwMDAwMDAwMDgwMDAwQTAwMDAwMDAwMDAwMDAwMDIwMDAyQQotOjEwQkU1MDAwMDAwMDNFQTkwMDAwMDAwMDAwMDAwMDAxMDAwMDNFQzhGNAotOjEwQkU2MDAwMDAwMDAwMDAwMDAwMDAwMjAwMDAwMDAwMDAwMDAwMDBEMAotOjEwQkU3MDAwMDAwMDAwMDAwMDAwNjAwMDAwMjAwMDAwMDAwMDAwMDgzQQotOjEwQkU4MDAwMDAwMDQwMDAwMDA4MDAwMDAwMDAwMDAxMDAwMDQwMDEyOAotOjEwQkU5MDAwMDAwODAwMDAwMDAwMDAwMTAwMDA0MDQwMDAwODAwMDQwRAotOjEwQkVBMDAwMDAwMDAwMDIwMDAwNDA2MDAwMDgwMDA0MDAwMDAwMDRFMAotOjEwQkVCMDAwMDAwMDQwMDAwMDA4MDAwMDAwMDAwMDA0MDAwMDQwMDRGMgotOjEwQkVDMDAwMDAwODAwMDAwMDAwMDAwNDAwMDA0MDQwMDAwMDAwMDBFNgotOjEwQkVEMDAwMDAwMDAwMDgwMDAwNDA0ODAwMDAwMDAwMDAwMDAwMDhDQQotOjEwQkVFMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDUwNDAzMgotOjEwQkVGMDAwMDAwMTAwMDQwMDAwMDAwMTAwMDA1MDAwMDAwMDAwMDBFQwotOjEwQkYwMDAwMDAwMDAwMjAwMDAwNTAwODAwMTAwMDAwMDAwMDAwMDRBNQotOjEwQkYxMDAwMDAwMDUwMEMwMDEwMDAwMDAwMDAwMDAxMDAwMDUyQzc5QgotOjEwQkYyMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDA1MkM2MDAwMDAwMDBGOAotOjEwQkYzMDAwMDAwMDAwMDEwMDAwMzAwMDAwMzAwMDE4MDAwMDAwMDQ4NAotOjEwQkY0MDAwMDAwMDMwMDQwMDMwMDAxODAwMDAwMDA0MDAwMDMwMDgzOQotOjEwQkY1MDAwMDAzMDAwMTgwMDAwMDAwMjAwMDAzMDBBMDAzMDAwMTgxNQotOjEwQkY2MDAwMDAwMDAwMDIwMDAwMzAwQzAwMzAwMDE4MDAwMDAwMDE0QQotOjEwQkY3MDAwMDAwMDMwMEQwMDMwMDAxODAwMDAwMDAxMDAwMDMwMEVGRAotOjEwQkY4MDAwMDAzMDAwMTgwMDAwMDAwMTAwMDAzMDEwMDAzMDAwMThFMAotOjEwQkY5MDAwMDAwMDAwMDQwMDAwMzAxNDAwMzAwMDE4MDAwMDAwMDQwRAotOjEwQkZBMDAwMDAwMDUwMDAwMTAwMDA4MDAwMDgwMDA0MDAwMDUwMDQ2MAotOjEwQkZCMDAwMDEwMDAwODAwMDA4MDAwNDAwMDAwMDBBMDAwMDAwMDBFQQotOjEwQkZDMDAwMDAwMDAwMDAwMDAwNTA2ODAxMDAwMDgwMDAwMDAwMDEzNwotOjEwQkZEMDAwMDAwMDUwNjkwMTAwMDA4MDAwMDAwMDAxMDAwMDUwNkM2QQotOjEwQkZFMDAwMDEwMDAwODAwMDAwMDAwMjAwMDA1MDZFMDEwMDAwODA4RgotOjEwQkZGMDAwMDAwMDAwMDIwMDAwNTA3MDAxMDAwMDgwMDAwMDAwMDRGQQotOjEwQzAwMDAwMDAwMDUwNzQwMTAwMDA4MDAwMDAwMDA0MDAwMDUwNjYzMQotOjEwQzAxMDAwMDEwMDAwODAwMDAwMDAwMjAwMDA1MDY0MDEwMDAwODA2OAotOjEwQzAyMDAwMDAwMDAwMDEwMDAwNTA2MDAxMDAwMDgwMDAwMDAwMDJEQwotOjEwQzAzMDAwMDAwMDUwNjIwMTAwMDA4MDAwMDAwMDAyMDAwMDUwNTAyQgotOjEwQzA0MDAwMDEwMDAwODAwMDAwMDAwNDAwMDA1MDU0MDEwMDAwODA0NgotOjEwQzA1MDAwMDAwMDAwMDQwMDAwNTA1ODAxMDAwMDgwMDAwMDAwMDRBRgotOjEwQzA2MDAwMDAwMDUwNUMwMTAwMDA4MDAwMDAwMDA0MDAwMDUwN0NEMwotOjEwQzA3MDAwMDEwMDAwODAwMDAwMDAwMTAwMDA1MDdEMDEwMDAwODBGMAotOjEwQzA4MDAwMDAwMDAwMDEwMDAwNDAxODAwMTAwMDAwMDAwMDAwMDQ0MwotOjEwQzA5MDAwMDAwMDQwOTAwMDEwMDAwMDAwMDAwMDA0MDAwMDQwOThFNAotOjEwQzBBMDAwMDAxMDAwMDAwMDAwMDAwNDAwMDA0MTEwMDAwMDAwMDAyQgotOjEwQzBCMDAwMDAwMDAwMDIwMDAwNDExMjAwMDAwMDAwMDAwMDAwMDIyOQotOjEwQzBDMDAwMDAwMDQxMTQwMDAwMDAwMDAwMDAwMDAyMDAwMDQxMTZDMgotOjEwQzBEMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDA2MDQwMDAwODAwMDBCNgotOjEwQzBFMDAwMDAwMDAwMDIwMDAwNjA0MjAwMDgwMDAwMDAwMDAwMDJBMgotOjEwQzBGMDAwMDAwMDYwNDQwMDA4MDAwMDAwMDAwMDA0MDAwMDYwODBCMAotOjEwQzEwMDAwMDAwODAwMDAwMDAwMDAwODAwMDA2MEMwMDA0MDAwMDhCNwotOjEwQzExMDAwMDAwMDAwMDgwMDAwNjAwMDAwMDgwMDAwMDAwMDAwMDJBRAotOjEwQzEyMDAwMDAwMDYwMDIwMDA4MDAwMDAwMDAwMDAxMDAwMDYwMDQ0MAotOjEwQzEzMDAwMDAwODAwMDAwMDAwMDAwMjAwMDA2MzQwMDAwODAwMDA0QQotOjEwQzE0MDAwMDAwMDAwMDgwMDAwNjM4MDAwMDgwMDAwMDAwMDAwMDRGOAotOjEwQzE1MDAwMDAwMDYzODQwMDA4MDAwMDAwMDAwMDAxMDAwMDYzQzBDQwotOjEwQzE2MDAwMDAwODAwMDAwMDAwMDAwMjAwMDA2M0M0MDAwODAwMDA5NgotOjEwQzE3MDAwMDAwMDAwMDIwMDAwNjQwMDAwMDgwMDAwMDAwMDAwMDQ0RAotOjEwQzE4MDAwMDAwMDcwMDAwMDEwMDAwMDAwMDAwMDA0MDAwMDcwMDRCNwotOjEwQzE5MDAwMDAxMDAwMDAwMDAwMDAwNDAwMDA3MDA4MDAxMDAwMDAwMwotOjEwQzFBMDAwMDAwMDAwMDQwMDAwOTAwMDAwMDgwMDAwMDAwMDAwMDJGMQotOjEwQzFCMDAwMDAwMDkwMDIwMDA4MDAwMDAwMDAwMDAxMDAwMDkwMDQ1MAotOjEwQzFDMDAwMDAwODAwMDAwMDAwMDAwMjAwMDA5MDQwMDAwODAwMDA4RAotOjEwQzFEMDAwMDAwMDAwMDIwMDAwOTA0NDAwMDgwMDAwMDAwMDAwMDI3RgotOjEwQzFFMDAwMDAwMDkwNDYwMDA4MDAwMDAwMDAwMDAyMDAwMDk2NDg5MQotOjEwQzFGMDAwMDAwODAwMDAwMDAwMDAwODAwMDA5MDgwMDAwODAwMDAxNwotOjEwQzIwMDAwMDAwMDAwMDIwMDAwOTA4NDAwMDgwMDAwMDAwMDAwMDIwRQotOjEwQzIxMDAwMDAwMDk2ODgwMDA4MDAwMDAwMDAwMDA4MDAwMDgwNDAzMAotOjEwQzIyMDAwMDAwODAwMDAwMDAwMDAwMTAwMDA4MDQxMDAwODAwMDAzQwotOjEwQzIzMDAwMDAwMDAwMDEwMDAwODA0MjAwMDgwMDAwMDAwMDAwMDEzMgotOjEwQzI0MDAwMDAwMDgwNDMwMDA4MDAwMDAwMDAwMDAxMDAwMDgwMDBBMgotOjEwQzI1MDAwMDAwODAwMDAwMDAwMDAwMjAwMDA4MDAyMDAwODAwMDA0QQotOjEwQzI2MDAwMDAwMDAwMDEwMDAwODAwNDAwMDgwMDAwMDAwMDAwMDIzRgotOjEwQzI3MDAwMDAwMDgwQzAwMDA4MDAwMDAwMDAwMDAyMDAwMDgwQzIzMgotOjEwQzI4MDAwMDAwODAwMDAwMDAwMDAwMjAwMDA4MEM0MDAwODAwMDA1OAotOjEwQzI5MDAwMDAwMDAwMDIwMDAwODA4MDAwMDgwMDAwMDAwMDAwMDE5MwotOjEwQzJBMDAwMDAwMDgwODEwMDA4MDAwMDAwMDAwMDAxMDAwMDgwODI4MgotOjEwQzJCMDAwMDAwODAwMDAwMDAwMDAwMTAwMDA4MDgzMDAwODAwMDA2QQotOjEwQzJDMDAwMDAwMDAwMDEwMDAwODA4NDAwMDgwMDAwMDAwMDAwMDE2MAotOjEwQzJEMDAwMDAwMDgwODUwMDA4MDAwMDAwMDAwMDAxMDAwMDgwODY0QQotOjEwQzJFMDAwMDAwODAwMDAwMDAwMDAwMTAwMDA2MDAwMDAwODAwMDBERAotOjEwQzJGMDAwMDAwMDAwMDIwMDAwNjAwMjAwMDgwMDAwMDAwMDAwMDFEMQotOjEwQzMwMDAwMDAwMDYwMDQwMDA4MDAwMDAwMDAwMDAyMDAwMDYwNDIxRAotOjEwQzMxMDAwMDBDMDAwMTgwMDAwMDAwMjAwMDA2MDQwMDBDMDAwMThDQgotOjEwQzMyMDAwMDAwMDAwMDIwMDAwNjA0QzAwQzAwMDE4MDAwMDAwMDg3RgotOjEwQzMzMDAwMDAwMDYwNDQwMEMwMDAxODAwMDAwMDA4MDAwMDYwNTdDMgotOjEwQzM0MDAwMDBDMDAwMTgwMDAwMDAwMTAwMDA2MDU0MDBDMDAwMTg4OAotOjEwQzM1MDAwMDAwMDAwMDIwMDAwNjA1NjAwQzAwMDE4MDAwMDAwMDE0QwotOjEwQzM2MDAwMDAwMDY2NDAwMDA4MDAwMDAwMDAwMDA4MDAwMDY2ODAzMQotOjEwQzM3MDAwMDAwODAwMDAwMDAwMDAwODAwMDA2NkMwMDAwODAwMDA3RgotOjEwQzM4MDAwMDAwMDAwMDgwMDAwREE0MjAwMTgwMDAwMDAwMDAwMDI2RgotOjEwQzM5MDAwMDAwMERFNDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUwMDA5RgotOjEwQzNBMDAwMDAwMDAwMDAwMDAwMDAwNDAwMDBEMEMwMDAwMDAwMDBGOQotOjEwQzNCMDAwMDAwMDAwMDQwMDAwRDBDNDAwMDAwMDAwMDAwMDAwMDRFMQotOjEwQzNDMDAwMDAwMEQwQzgwMDAwMDAwMDAwMDAwMDA0MDAwMEQwQ0MzNQotOjEwQzNEMDAwMDAwMDAwMDAwMDAwMDAwNDAwMDBEMEQwMDAwMDAwMDBCOQotOjEwQzNFMDAwMDAwMDAwMDQwMDAwRDBENDAwMDAwMDAwMDAwMDAwMDRBMQotOjEwQzNGMDAwMDAwMEQwRDgwMDAwMDAwMDAwMDAwMDA0MDAwMEQwQzAwMQotOjEwQzQwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDBEQjAwMDAwMDAwMDAzMQotOjEwQzQxMDAwMDAwMDAwMDQwMDAwREIwMDAwMDAwMDAwMDAwMDAwNjhENQotOjEwQzQyMDAwMDAwMEI5NDgwMDAwMDAwMDAwMDAwMDAwMDAwMEQwMDAzQgotOjEwQzQzMDAwMDAwMDAwMDAwMDAwMDAwNDAwMDBCMEMwMDAwMDAwMDA4OAotOjEwQzQ0MDAwMDAwMDAwMDQwMDAwQjBDNDAwMDAwMDAwMDAwMDAwMDQ3MAotOjEwQzQ1MDAwMDAwMEIwQzgwMDAwMDAwMDAwMDAwMDA0MDAwMEIwQzBGMAotOjEwQzQ2MDAwMDAwMDAwMDAwMDAwMDAxMDAwMDBENkIwMDAwMDAwMDAzNgotOjEwQzQ3MDAwMDAwMDAwMDQwMDAwRDZCNDAwMDAwMDAwMDAwMDAwMDQyQQotOjEwQzQ4MDAwMDAwMEQ2QjgwMDAwMDAwMDAwMDAwMDA0MDAwMEQ2QkM4OAotOjEwQzQ5MDAwMDAwMDAwMDAwMDAwMDAwNDAwMDBENkIwMDAwMDAwMDAxMgotOjEwQzRBMDAwMDAwMDAwMTAwMDAwRDM0ODAwMDAwMDAwMDAwMDAwMDg1OQotOjEwQzRCMDAwMDAwMEQzNTgwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMTBDMQotOjEwQzRDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMzU4MDAwMDAwMDA0MQotOjEwQzREMDAwMDAwMDAwMDgwMDAwMDAwMDA2MDAyMjAwMDAwMDAwMDAyQwotOjAwMDAwMDAxRkYKZGlmZiAtLWdpdCBhL2Zpcm13YXJlL2JueDJ4L2JueDJ4LWUyLTYuMi41LjAuZncuaWhleCBiL2Zpcm13YXJlL2JueDJ4L2JueDJ4LWUyLTYuMi41LjAuZncuaWhleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWY5YWE2Ci0tLSAvZGV2L251bGwKKysrIGIvZmlybXdhcmUvYm54MngvYm54MngtZTItNi4yLjUuMC5mdy5paGV4CkBAIC0wLDAgKzEsMTU0NTYgQEAKKzoxMDAwMDAwMDAwMDA1MzEwMDAwMDAwNjgwMDAwMDcwQzAwMDA1MzgwM0YKKzoxMDAwMTAwMDAwMDAzMTgwMDAwMDVBOTAwMDAwMDBCMDAwMDA4QzE4RjEKKzoxMDAwMjAwMDAwMDBDMTM0MDAwMDhDRDAwMDAwMDBEODAwMDE0RTA4NTAKKzoxMDAwMzAwMDAwMDBGMUYwMDAwMTRFRTgwMDAwMDA3NDAwMDI0MEUwMTIKKzoxMDAwNDAwMDAwMDA1MjVDMDAwMjQxNTgwMDAwMDBCODAwMDI5M0I4NjIKKzoxMDAwNTAwMDAwMDEyMTNDMDAwMjk0NzgwMDAwMEZGQzAwMDNCNUI4QjkKKzoxMDAwNjAwMDAwMDAwMDA0MDAwM0M1QjgwMjA0MDA0ODAwMDAwMDBGQUYKKzoxMDAwNzAwMDAyMDQwMDU0MDAwMDAwNDUwMjA0MDA1QzAwMDAwMDA2NzkKKzoxMDAwODAwMDAyMDQwMDcwMDAwMDAwMDQwMjA0MDA3ODAwMDAwMDAwNzgKKzoxMDAwOTAwMDAyMDQwMDdDMTIxNzAwMDAwMjA0MDA4MDIyMTcwMDAwRjYKKzoxMDAwQTAwMDAyMDQwMDg0MzIxNzAwMDAwNjA0MDA4ODAwMDAwMDA1RTYKKzoxMDAwQjAwMDAyMDQwMDlDMTIxNTAwMDAwMjA0MDBBMDIyMTUwMDAwOUEKKzoxMDAwQzAwMDAyMDQwMEE0MzIxNTAwMDAwNjA0MDBBODAwMDAwMDA0ODkKKzoxMDAwRDAwMDAyMDQwMEI4MDIxMDAwMDAwMjA0MDBCQzAwMTAwMDAwN0UKKzoxMDAwRTAwMDAyMDQwMEMwMTAxMDAwMDAwMjA0MDBDNDIwMTAwMDAwMzAKKzoxMDAwRjAwMDAyMDQwMEM4MzAxMDAwMDAwMjA0MDBDQzQwMTAwMDAwRDAKKzoxMDAxMDAwMDA2MDQwMEQwMDAwMDAwMDMwMjA0MDBEQzAwMTAwMDAwMjAKKzoxMDAxMTAwMDAyMDQwMEUwMTIxNDAwMDAwMjA0MDBFNDIyMTQwMDAwQjMKKzoxMDAxMjAwMDAyMDQwMEU4MzIxNDAwMDAwMjA0MDBFQzQyMTQwMDAwNTMKKzoxMDAxMzAwMDA2MDQwMEYwMDAwMDAwMDMwMTA0MDEyNDAwMDAwMDAwOTgKKzoxMDAxNDAwMDAxMDQwMTI4MDAwMDAwMDAwMTA0MDEyQzAwMDAwMDAwNEYKKzoxMDAxNTAwMDAxMDQwMTMwMDAwMDAwMDAwMjA0MDFEMDAwMDA4OTA2MDMKKzoxMDAxNjAwMDAyMDQwMjU4MDAwMDAwMzYwMjA0MDI1QzAwMDAwMDM2NUYKKzoxMDAxNzAwMDAyMDQwMjYwMDgxMDAwMDAwMjA0MDI2NDA4MTAwMDAwN0IKKzoxMDAxODAwMDAyMDQwMDA0MDAwMDAwRkYwMjA0MDAwODAwMDAwMEZGNTkKKzoxMDAxOTAwMDAyMDQwMDBDMDAwMDAwRkYwMjA0MDAxMDAwMDAwMEZGMzkKKzoxMDAxQTAwMDAyMDQwMDE0MDAwMDAwN0YwMjA0MDAxODAwMDAwMEZGOTkKKzoxMDAxQjAwMDAyMDQwMDFDMDAwMDAwRkYwMjA0MDAyMDAwMDAwMEZGRjkKKzoxMDAxQzAwMDAyMDQwMDI0MDAwMDAwM0UwMjA0MDAyODAwMDAwMDAwOTkKKzoxMDAxRDAwMDAyMDQwMDJDMDAwMDAwM0YwMjA0MDAzMDAwMDAwMDNGMzkKKzoxMDAxRTAwMDAyMDQwMDM0MDAwMDAwM0YwMjA0MDAzODAwMDAwMDNGMTkKKzoxMDAxRjAwMDAyMDQwMDNDMDAwMDAwM0YwMjA0MDA0MDAwMDAwMDNGRjkKKzoxMDAyMDAwMDAyMDQwMDQ0MDAwMDAwM0YwMjA0MDRDQzAwMDAwMDAxOEUKKzoxMDAyMTAwMDAyMDQyMDA4MDAwMDAyMTEwMjA0MjAwQzAwMDAwMjAwNjkKKzoxMDAyMjAwMDAyMDQyMDEwMDAwMDAyMDQwMjA0MjAxNDAwMDAwMjE5M0QKKzoxMDAyMzAwMDAyMDQyMDFDMDAwMEZGRkYwMjA0MjAyMDAwMDBGRkZGM0EKKzoxMDAyNDAwMDAyMDQyMDI0MDAwMEZGRkYwMjA0MjAyODAwMDBGRkZGMUEKKzoxMDAyNTAwMDAyMDQyMDM4MDAwMDAwMjAwNjA0MjAzQzAwMDAwMDBGQUIKKzoxMDAyNjAwMDAyMDQyMDc4MDAwMDAwMjEwNjA0MjA3QzAwMDAwMDBGMUEKKzoxMDAyNzAwMDAyMDQyMEI4MDAwMDAwMDEwNjA0MjBCQzAwMDAwMDBGQUEKKzoxMDAyODAwMDAyMDQyMEY4MDAwMDAwMDEwNjA0MjBGQzAwMDAwMDNGRUEKKzoxMDAyOTAwMDAyMDQyMUY4MDAwMDAwMDEwNjA0MjFGQzAwMDAwMDBGMDgKKzoxMDAyQTAwMDAyMDQyMjM4MDdGRkZGRkYwMjA0MjIzQzAwMDAwMDdGMDcKKzoxMDAyQjAwMDAyMDQyMjQwMDdGRkZGRkYwMjA0MjI0NDAwMDAwMDNGMjcKKzoxMDAyQzAwMDAxMDQyMjQ4MDAwMDAwMDAwMTA0MjI0QzAwMDAwMDAwNEMKKzoxMDAyRDAwMDAxMDQyMjUwMDAwMDAwMDAwMTA0MjI1NDAwMDAwMDAwMkMKKzoxMDAyRTAwMDAxMDQyMjU4MDAwMDAwMDAwMTA0MjI1QzAwMDAwMDAwMEMKKzoxMDAyRjAwMDAxMDQyMjYwMDAwMDAwMDAwMTA0MjI2NDAwMDAwMDAwRUMKKzoxMDAzMDAwMDAxMDQyMjY4MDAwMDAwMDAwMTA0MjI2QzAwMDAwMDAwQ0IKKzoxMDAzMTAwMDAxMDQyMjcwMDAwMDAwMDAwMTA0MjI3NDAwMDAwMDAwQUIKKzoxMDAzMjAwMDAxMDQyMjc4MDAwMDAwMDAwMTA0MjI3QzAwMDAwMDAwOEIKKzoxMDAzMzAwMDAyMDQyMkMwMDAwMEZGRkYwMjA0MjJDNDAwMDBGRkZGRUQKKzoxMDAzNDAwMDAyMDQyMkM4MDAwMEZGRkYwMjA0MjJDQzAwMDBGRkZGQ0QKKzoxMDAzNTAwMDBDMDQyMDAwMDAwMDAzRTgwQTA0MjAwMDAwMDAwMDAxNTMKKzoxMDAzNjAwMDBCMDQyMDAwMDAwMDAwMDMwNjA1NDAwMDAwMDAwRDAwMDMKKzoxMDAzNzAwMDAyMDUwMDQ0MDAwMDAwMjAwMjA1MDA0ODAwMDAwMDMyOTEKKzoxMDAzODAwMDAyMDUwMDkwMDIxNTAwMjAwMjA1MDA5NDAyMTUwMDIwQ0QKKzoxMDAzOTAwMDAyMDUwMDk4MDAwMDAwMzAwMjA1MDA5QzA4MTAwMDAwRDMKKzoxMDAzQTAwMDAyMDUwMEEwMDAwMDAwMzYwMjA1MDBBNDAwMDAwMDMwOTUKKzoxMDAzQjAwMDAyMDUwMEE4MDAwMDAwMzEwMjA1MDBCMDAwMDAwMDA0QTIKKzoxMDAzQzAwMDAyMDUwMEI0MDAwMDAwMDUwMjA1MDBDMDAwMDAwMDAwQTYKKzoxMDAzRDAwMDAyMDUwMEM0MDAwMDAwMDQwMjA1MDBENDAwMDAwMDAxNzIKKzoxMDAzRTAwMDAyMDUwMTE0MDAwMDAwMDEwMjA1MDExQzAwMDAwMDAxQ0IKKzoxMDAzRjAwMDAyMDUwMTIwMDAwMDAwMDIwMjA1MDIwNDAwMDAwMDAxQzUKKzoxMDA0MDAwMDAyMDUwMjBDMDAwMDAwNDAwMjA1MDIxMDAwMDAwMDQwM0UKKzoxMDA0MTAwMDAyMDUwMjFDMDAwMDAwMjAwMjA1MDIyMDAwMDAwMDFDNTIKKzoxMDA0MjAwMDAyMDUwMjI0MDAwMDAwMjAwNjA1MDI0MDAwMDAwMDBBMjgKKzoxMDA0MzAwMDA0MDUwMjgwMDAyMDAwMDAwMjA1MDA1MDAwMDAwMDA3QjMKKzoxMDA0NDAwMDAyMDUwMDU0MDAwMDAwMDcwMjA1MDA1ODAwMDAwMDAwRUIKKzoxMDA0NTAwMDAyMDUwMDVDMDAwMDAwMDgwMjA1MDA2MDAwMDAwMDAxQzkKKzoxMDA0NjAwMDA2MDUwMDY0MDAwMDAwMDMwMjA1MDBEODAwMDAwMDA2MzUKKzoxMDA0NzAwMDAyMDUwMDA0MDAwMDAwMDEwMjA1MDAwODAwMDAwMDAxNjAKKzoxMDA0ODAwMDAyMDUwMDBDMDAwMDAwMDEwMjA1MDAxMDAwMDAwMDAxNDAKKzoxMDA0OTAwMDAyMDUwMDE0MDAwMDAwMDEwMjA1MDAxODAwMDAwMDAxMjAKKzoxMDA0QTAwMDAyMDUwMDFDMDAwMDAwMDEwMjA1MDAyMDAwMDAwMDAxMDAKKzoxMDA0QjAwMDAyMDUwMDI0MDAwMDAwMDEwMjA1MDAyODAwMDAwMDAxRTAKKzoxMDA0QzAwMDAyMDUwMDJDMDAwMDAwMDEwMjA1MDAzMDAwMDAwMDAxQzAKKzoxMDA0RDAwMDAyMDUwMDM0MDAwMDAwMDEwMjA1MDAzODAwMDAwMDAxQTAKKzoxMDA0RTAwMDAyMDUwMDNDMDAwMDAwMDEwMjA1MDA0MDAwMDAwMDAxODAKKzoxMDA0RjAwMDAyMDUwMEUwMDAwMDAwMEQwMjA1MDBFODAwMDAwMDAwMTkKKzoxMDA1MDAwMDAyMDUwMEYwMDAwMDAwMDAwMjA1MDBGODAwMDAwMDAwRjUKKzoxMDA1MTAwMDAyMDUwMEU0MDAwMDAwMkQwMjA1MDBFQzAwMDAwMDIwQjAKKzoxMDA1MjAwMDAyMDUwMEY0MDAwMDAwMjAwMjA1MDBGQzAwMDAwMDIwOEQKKzoxMDA1MzAwMDAyMDUwMEUwMDAwMDAwMUQwMjA1MDBFODAwMDAwMDEwQjgKKzoxMDA1NDAwMDAyMDUwMEYwMDAwMDAwMTAwMjA1MDBGODAwMDAwMDEwOTUKKzoxMDA1NTAwMDAyMDUwMEU0MDAwMDAwM0QwMjA1MDBFQzAwMDAwMDMwNTAKKzoxMDA1NjAwMDAyMDUwMEY0MDAwMDAwMzAwMjA1MDBGQzAwMDAwMDMwMkQKKzoxMDA1NzAwMDAyMDUwMEUwMDAwMDAwNEQwMjA1MDBFODAwMDAwMDQwMTgKKzoxMDA1ODAwMDAyMDUwMEYwMDAwMDAwNDAwMjA1MDBGODAwMDAwMDQwRjUKKzoxMDA1OTAwMDAyMDUwMEU0MDAwMDAwNkQwMjA1MDBFQzAwMDAwMDYwQjAKKzoxMDA1QTAwMDAyMDUwMEY0MDAwMDAwNjAwMjA1MDBGQzAwMDAwMDYwOEQKKzoxMDA1QjAwMDAyMDUwMEUwMDAwMDAwNUQwMjA1MDBFODAwMDAwMDUwQjgKKzoxMDA1QzAwMDAyMDUwMEYwMDAwMDAwNTAwMjA1MDBGODAwMDAwMDUwOTUKKzoxMDA1RDAwMDAyMDUwMEU0MDAwMDAwN0QwMjA1MDBFQzAwMDAwMDcwNTAKKzoxMDA1RTAwMDAyMDUwMEY0MDAwMDAwNzAwMjA1MDBGQzAwMDAwMDcwMkQKKzoxMDA1RjAwMDA0MDYxMDAwMDIwMDAwMjAwMjA2MDBEQzAwMDAwMDAxREEKKzoxMDA2MDAwMDA0MDYwMjAwMDAwMzAyMjAwMjA2MDBEQzAwMDAwMDAwRDUKKzoxMDA2MTAwMDA3MTgwNDAwMDBBRDAwMDAwODE4MDdEODAwMDUwMjIzRTEKKzoxMDA2MjAwMDA3MUMwMDAwMjk5MjAwMDAwNzFDODAwMDMxMkEwQTY1N0YKKzoxMDA2MzAwMDA3MUQwMDAwMzRBMzE2QjAwNzFEODAwMDJFN0EyM0Q5QjEKKzoxMDA2NDAwMDA3MUUwMDAwMDM1MDJGNzgwODFFMDdGMDNGMDIwMjI1MDYKKzoxMDA2NTAwMDAyMTgwMEJDMDAwMDAwMzAwMTE4MDAwMDAwMDAwMDAwN0IKKzoxMDA2NjAwMDAxMTgwMDA0MDAwMDAwMDAwMTE4MDAwODAwMDAwMDAwNEMKKzoxMDA2NzAwMDAxMTgwMDBDMDAwMDAwMDAwMTE4MDAxMDAwMDAwMDAwMkMKKzoxMDA2ODAwMDAxMTgwMDE0MDAwMDAwMDAwMjE4MDAyMDAwMDAwMDAxMDIKKzoxMDA2OTAwMDAyMTgwMDI0MDAwMDAwMDIwMjE4MDAyODAwMDAwMDAzRDUKKzoxMDA2QTAwMDAyMTgwMDJDMDAwMDAwMDAwMjE4MDAzMDAwMDAwMDA0QjYKKzoxMDA2QjAwMDAyMTgwMDM0MDAwMDAwMDEwMjE4MDAzODAwMDAwMDAwOTkKKzoxMDA2QzAwMDAyMTgwMDNDMDAwMDAwMDEwMjE4MDA0MDAwMDAwMDA0NzUKKzoxMDA2RDAwMDAyMTgwMDQ0MDAwMDAwMDAwMjE4MDA0ODAwMDAwMDAxNTkKKzoxMDA2RTAwMDAyMTgwMDRDMDAwMDAwMDMwMjE4MDA1MDAwMDAwMDAwMzcKKzoxMDA2RjAwMDAyMTgwMDU0MDAwMDAwMDEwMjE4MDA1ODAwMDAwMDA0MTUKKzoxMDA3MDAwMDAyMTgwMDVDMDAwMDAwMDAwMjE4MDA2MDAwMDAwMDAxRjgKKzoxMDA3MTAwMDAyMTgwMDY0MDAwMDAwMDMwMjE4MDA2ODAwMDAwMDAwRDYKKzoxMDA3MjAwMDAyMTgwMDZDMDAwMDAwMDEwMjE4MDA3MDAwMDAwMDA0QjQKKzoxMDA3MzAwMDAyMTgwMDc0MDAwMDAwMDAwMjE4MDA3ODAwMDAwMDA0OTUKKzoxMDA3NDAwMDAyMTgwMDdDMDAwMDAwMDMwNjE4MDA4MDAwMDAwMDAyNzAKKzoxMDA3NTAwMDAyMTgwMEE0MDAwMDdGRkYwMjE4MDBBODAwMDAwM0ZGOTkKKzoxMDA3NjAwMDAyMTgwMjI0MDAwMDAwMDAwMjE4MDIzNDAwMDAwMDAwRjkKKzoxMDA3NzAwMDAyMTgwMjRDMDAwMDAwMDAwMjE4MDJFNDAwMDAwMEZGMTIKKzoxMDA3ODAwMDA2MTgxMDAwMDAwMDA0MDAwMjFCOEJDMDAwMDAwMDAxQ0UKKzoxMDA3OTAwMDAyMUI4MDAwMDAwMDAwMzQwMjFCODA0MDAwMDAwMDE4OTMKKzoxMDA3QTAwMDAyMUI4MDgwMDAwMDAwMEMwMjFCODBDMDAwMDAwMDIwQTMKKzoxMDA3QjAwMDBDMUI4MzAwMDAwODY0NzAwQTFCODMwMDAwMDAwMTU3QjMKKzoxMDA3QzAwMDBCMUI4MzAwMDAwMDA1NUYwQTFCODM0MDAwMDAwMDAwMzQKKzoxMDA3RDAwMDBDMUI4MzQwMDAwMDAyMjYwQjFCODM0MDAwMDAwMDAxMUQKKzoxMDA3RTAwMDAyMUI4MzgwMDAwODY0NzAwMjFCODNDMDAwMDAwMjI2ODUKKzoxMDA3RjAwMDAyMUIxNDgwMDAwMDAwMDEwQTFCMTQ4MDAwMDAwMDAwOEUKKzoxMDA4MDAwMDAyMUI5NDQwMDAwMDAwMDEwNjFCOTQ0ODAwMDAwMDAyRjcKKzoxMDA4MTAwMDA2MUExMDAwMDAwMDAyQjMwNDFBMUFDQzAwMDEwMjI3QzUKKzoxMDA4MjAwMDA2MUExQUQwMDAwMDAwMDgwNjFBMjAwODAwMDAwMEM4QTYKKzoxMDA4MzAwMDA2MUEyMDAwMDAwMDAwMDIwNDFBMUJGODAwOTAwMjI4OEIKKzoxMDA4NDAwMDA2MUEzNzE4MDAwMDAwMDQwNjFBMzcxMDAwMDAwMDAyQ0MKKzoxMDA4NTAwMDA2MUE1MDAwMDAwMDAwMDIwNjFBNTAwODAwMDAwMDA0QUEKKzoxMDA4NjAwMDA2MUE1MDE4MDAwMDAwMDQwNjFBNTAyODAwMDAwMDA0NjAKKzoxMDA4NzAwMDA2MUE1MDM4MDAwMDAwMDQwNjFBNTA0ODAwMDAwMDA0MTAKKzoxMDA4ODAwMDA2MUE1MDU4MDAwMDAwMDQwNjFBNTA2ODAwMDAwMDA0QzAKKzoxMDA4OTAwMDA2MUE1MDc4MDAwMDAwMDIwNDFBNTJDMDAwMDIwMkI4ODIKKzoxMDA4QTAwMDA2MUE0MDUwMDAwMDAwMDYwNDFBNDA2ODAwMDIwMkJBMEUKKzoxMDA4QjAwMDA0MUE0MDQwMDAwNDAyQkMwNDFBODAwMDAwMDEwMkMwNzcKKzoxMDA4QzAwMDA2MUE4MDA0MDAwMDAwMDMwNDFBODAxMDAwMDEwMkMxMEYKKzoxMDA4RDAwMDA2MUE4MDE0MDAwMDAwMDMwNDFBODAyMDAwMDEwMkMyREUKKzoxMDA4RTAwMDA2MUE4MDI0MDAwMDAwMDMwNDFBODAzMDAwMDEwMkMzQUQKKzoxMDA4RjAwMDA2MUE4MDM0MDAwMDAwMDMwNDFBODA0MDAwMDEwMkM0N0MKKzoxMDA5MDAwMDA2MUE4MDQ0MDAwMDAwMDMwNDFBODA1MDAwMDEwMkM1NEEKKzoxMDA5MTAwMDA2MUE4MDU0MDAwMDAwMDMwNDFBODA2MDAwMDEwMkM2MTkKKzoxMDA5MjAwMDA2MUE4MDY0MDAwMDAwMDMwNDFBODA3MDAwMDEwMkM3RTgKKzoxMDA5MzAwMDA2MUE4MDc0MDAwMDAwMDMwNDFBODA4MDAwMDEwMkM4QjcKKzoxMDA5NDAwMDA2MUE4MDg0MDAwMDAwMDMwNDFBODA5MDAwMDEwMkM5ODYKKzoxMDA5NTAwMDA2MUE4MDk0MDAwMDAwMDMwNDFBODBBMDAwMDEwMkNBNTUKKzoxMDA5NjAwMDA2MUE4MEE0MDAwMDAwMDMwNDFBODBCMDAwMDEwMkNCMjQKKzoxMDA5NzAwMDA2MUE4MEI0MDAwMDAwMDMwNDFBODBDMDAwMDEwMkNDRjMKKzoxMDA5ODAwMDA2MUE4MEM0MDAwMDAwMDMwNDFBODBEMDAwMDEwMkNEQzIKKzoxMDA5OTAwMDA2MUE4MEQ0MDAwMDAwMDMwNDFBODBFMDAwMDEwMkNFOTEKKzoxMDA5QTAwMDA2MUE4MEU0MDAwMDAwMDMwNDFBODBGMDAwMDEwMkNGNjAKKzoxMDA5QjAwMDA2MUE4MEY0MDAwMDAwMDMwNDFBODEwMDAwMDEwMkQwMkUKKzoxMDA5QzAwMDA2MUE4MTA0MDAwMDAwMDMwNDFBODExMDAwMDEwMkQxRkMKKzoxMDA5RDAwMDA2MUE4MTE0MDAwMDAwMDMwNDFBODEyMDAwMDEwMkQyQ0IKKzoxMDA5RTAwMDA2MUE4MTI0MDAwMDAwMDMwNDFBODEzMDAwMDEwMkQzOUEKKzoxMDA5RjAwMDA2MUE4MTM0MDAwMDAwMDMwNDFBODE0MDAwMDEwMkQ0NjkKKzoxMDBBMDAwMDA2MUE4MTQ0MDAwMDAwMDMwNDFBODE1MDAwMDEwMkQ1MzcKKzoxMDBBMTAwMDA2MUE4MTU0MDAwMDAwMDMwNDFBODE2MDAwMDEwMkQ2MDYKKzoxMDBBMjAwMDA2MUE4MTY0MDAwMDAwMDMwNDFBODE3MDAwMDEwMkQ3RDUKKzoxMDBBMzAwMDA2MUE4MTc0MDAwMDAwMDMwNDFBODE4MDAwMDEwMkQ4QTQKKzoxMDBBNDAwMDA2MUE4MTg0MDAwMDAwMDMwNDFBODE5MDAwMDEwMkQ5NzMKKzoxMDBBNTAwMDA2MUE4MTk0MDAwMDAwMDMwNDFBODFBMDAwMDEwMkRBNDIKKzoxMDBBNjAwMDA2MUE4MUE0MDAwMDAwMDMwNDFBODFCMDAwMDEwMkRCMTEKKzoxMDBBNzAwMDA2MUE4MUI0MDAwMDAwMDMwNDFBODFDMDAwMDEwMkRDRTAKKzoxMDBBODAwMDA2MUE4MUM0MDAwMDAwMDMwNDFBODFEMDAwMDEwMkREQUYKKzoxMDBBOTAwMDA2MUE4MUQ0MDAwMDAwMDMwNDFBODFFMDAwMDEwMkRFN0UKKzoxMDBBQTAwMDA2MUE4MUU0MDAwMDAwMDMwNDFBODFGMDAwMDEwMkRGNEQKKzoxMDBBQjAwMDA2MUE4MUY0MDAwMDAwMDMwNDFBODIwMDAwMDEwMkUwMUIKKzoxMDBBQzAwMDA2MUE4MjA0MDAwMDAwMDMwNDFBODIxMDAwMDEwMkUxRTkKKzoxMDBBRDAwMDA2MUE4MjE0MDAwMDAwMDMwNDFBODIyMDAwMDEwMkUyQjgKKzoxMDBBRTAwMDA2MUE4MjI0MDAwMDAwMDMwNDFBODIzMDAwMDEwMkUzODcKKzoxMDBBRjAwMDA2MUE4MjM0MDAwMDAwMDMwNDFBODI0MDAwMDEwMkU0NTYKKzoxMDBCMDAwMDA2MUE4MjQ0MDAwMDAwMDMwNDFBODI1MDAwMDEwMkU1MjQKKzoxMDBCMTAwMDA2MUE4MjU0MDAwMDAwMDMwNDFBODI2MDAwMDEwMkU2RjMKKzoxMDBCMjAwMDA2MUE4MjY0MDAwMDAwMDMwNDFBODI3MDAwMDEwMkU3QzIKKzoxMDBCMzAwMDA2MUE4Mjc0MDAwMDAwMDMwNDFBODI4MDAwMDEwMkU4OTEKKzoxMDBCNDAwMDA2MUE4Mjg0MDAwMDAwMDMwNDFBODI5MDAwMDEwMkU5NjAKKzoxMDBCNTAwMDA2MUE4Mjk0MDAwMDAwMDMwNDFBODJBMDAwMDEwMkVBMkYKKzoxMDBCNjAwMDA2MUE4MkE0MDAwMDAwMDMwNDFBODJCMDAwMDEwMkVCRkUKKzoxMDBCNzAwMDA2MUE4MkI0MDAwMDAwMDMwNDFBODJDMDAwMDEwMkVDQ0QKKzoxMDBCODAwMDA2MUE4MkM0MDAwMDAwMDMwNDFBODJEMDAwMDEwMkVEOUMKKzoxMDBCOTAwMDA2MUE4MkQ0MDAwMDAwMDMwNDFBODJFMDAwMDEwMkVFNkIKKzoxMDBCQTAwMDA2MUE4MkU0MDAwMDAwMDMwNDFBODJGMDAwMDEwMkVGM0EKKzoxMDBCQjAwMDA2MUE4MkY0MDAwMDAwMDMwNDFBODMwMDAwMDEwMkYwMDgKKzoxMDBCQzAwMDA2MUE4MzA0MDAwMDAwMDMwNDFBODMxMDAwMDEwMkYxRDYKKzoxMDBCRDAwMDA2MUE4MzE0MDAwMDAwMDMwNDFBODMyMDAwMDEwMkYyQTUKKzoxMDBCRTAwMDA2MUE4MzI0MDAwMDAwMDMwNDFBODMzMDAwMDEwMkYzNzQKKzoxMDBCRjAwMDA2MUE4MzM0MDAwMDAwMDMwNDFBODM0MDAwMDEwMkY0NDMKKzoxMDBDMDAwMDA2MUE4MzQ0MDAwMDAwMDMwNDFBODM1MDAwMDEwMkY1MTEKKzoxMDBDMTAwMDA2MUE4MzU0MDAwMDAwMDMwNDFBODM2MDAwMDEwMkY2RTAKKzoxMDBDMjAwMDA2MUE4MzY0MDAwMDAwMDMwNDFBODM3MDAwMDEwMkY3QUYKKzoxMDBDMzAwMDA2MUE4Mzc0MDAwMDAwMDMwNDFBODM4MDAwMDEwMkY4N0UKKzoxMDBDNDAwMDA2MUE4Mzg0MDAwMDAwMDMwNDFBODM5MDAwMDEwMkY5NEQKKzoxMDBDNTAwMDA2MUE4Mzk0MDAwMDAwMDMwNDFBODNBMDAwMDEwMkZBMUMKKzoxMDBDNjAwMDA2MUE4M0E0MDAwMDAwMDMwNDFBODNCMDAwMDEwMkZCRUIKKzoxMDBDNzAwMDA2MUE4M0I0MDAwMDAwMDMwNDFBODNDMDAwMDEwMkZDQkEKKzoxMDBDODAwMDA2MUE4M0M0MDAwMDAwMDMwNDFBODNEMDAwMDEwMkZEODkKKzoxMDBDOTAwMDA2MUE4M0Q0MDAwMDAwMDMwNDFBODNFMDAwMDEwMkZFNTgKKzoxMDBDQTAwMDA2MUE4M0U0MDAwMDAwMDMwNDFBODNGMDAwMDEwMkZGMjcKKzoxMDBDQjAwMDA2MUE4M0Y0MDAwMDAwMDMwNDFBODQwMDAwMDEwMzAwRjQKKzoxMDBDQzAwMDA2MUE4NDA0MDAwMDAwMDMwNDFBODQxMDAwMDEwMzAxQzIKKzoxMDBDRDAwMDA2MUE4NDE0MDAwMDAwMDMwNDFBODQyMDAwMDEwMzAyOTEKKzoxMDBDRTAwMDA2MUE4NDI0MDAwMDAwMDMwNDFBODQzMDAwMDEwMzAzNjAKKzoxMDBDRjAwMDA2MUE4NDM0MDAwMDAwMDMwNDFBODQ0MDAwMDEwMzA0MkYKKzoxMDBEMDAwMDA2MUE4NDQ0MDAwMDAwMDMwNDFBODQ1MDAwMDEwMzA1RkQKKzoxMDBEMTAwMDA2MUE4NDU0MDAwMDAwMDMwNDFBODQ2MDAwMDEwMzA2Q0MKKzoxMDBEMjAwMDA2MUE4NDY0MDAwMDAwMDMwNDFBODQ3MDAwMDEwMzA3OUIKKzoxMDBEMzAwMDA2MUE4NDc0MDAwMDAwMDMwNDFBODQ4MDAwMDEwMzA4NkEKKzoxMDBENDAwMDA2MUE4NDg0MDAwMDAwMDMwNDFBODQ5MDAwMDEwMzA5MzkKKzoxMDBENTAwMDA2MUE4NDk0MDAwMDAwMDMwNDFBODRBMDAwMDEwMzBBMDgKKzoxMDBENjAwMDA2MUE4NEE0MDAwMDAwMDMwNDFBODRCMDAwMDEwMzBCRDcKKzoxMDBENzAwMDA2MUE4NEI0MDAwMDAwMDMwNDFBODRDMDAwMDEwMzBDQTYKKzoxMDBEODAwMDA2MUE4NEM0MDAwMDAwMDMwNDFBODREMDAwMDEwMzBENzUKKzoxMDBEOTAwMDA2MUE4NEQ0MDAwMDAwMDMwNDFBODRFMDAwMDEwMzBFNDQKKzoxMDBEQTAwMDA2MUE4NEU0MDAwMDAwMDMwNDFBODRGMDAwMDEwMzBGMTMKKzoxMDBEQjAwMDA2MUE4NEY0MDAwMDAwMDMwNDFBODUwMDAwMDEwMzEwRTEKKzoxMDBEQzAwMDA2MUE4NTA0MDAwMDAwMDMwNDFBODUxMDAwMDEwMzExQUYKKzoxMDBERDAwMDA2MUE4NTE0MDAwMDAwMDMwNDFBODUyMDAwMDEwMzEyN0UKKzoxMDBERTAwMDA2MUE4NTI0MDAwMDAwMDMwNDFBODUzMDAwMDEwMzEzNEQKKzoxMDBERjAwMDA2MUE4NTM0MDAwMDAwMDMwNDFBODU0MDAwMDEwMzE0MUMKKzoxMDBFMDAwMDA2MUE4NTQ0MDAwMDAwMDMwNDFBODU1MDAwMDEwMzE1RUEKKzoxMDBFMTAwMDA2MUE4NTU0MDAwMDAwMDMwNDFBODU2MDAwMDEwMzE2QjkKKzoxMDBFMjAwMDA2MUE4NTY0MDAwMDAwMDMwNDFBODU3MDAwMDEwMzE3ODgKKzoxMDBFMzAwMDA2MUE4NTc0MDAwMDAwMDMwNDFBODU4MDAwMDEwMzE4NTcKKzoxMDBFNDAwMDA2MUE4NTg0MDAwMDAwMDMwNDFBODU5MDAwMDEwMzE5MjYKKzoxMDBFNTAwMDA2MUE4NTk0MDAwMDAwMDMwNDFBODVBMDAwMDEwMzFBRjUKKzoxMDBFNjAwMDA2MUE4NUE0MDAwMDAwMDMwNDFBODVCMDAwMDEwMzFCQzQKKzoxMDBFNzAwMDA2MUE4NUI0MDAwMDAwMDMwNDFBODVDMDAwMDEwMzFDOTMKKzoxMDBFODAwMDA2MUE4NUM0MDAwMDAwMDMwNDFBODVEMDAwMDEwMzFENjIKKzoxMDBFOTAwMDA2MUE4NUQ0MDAwMDAwMDMwNDFBODVFMDAwMDEwMzFFMzEKKzoxMDBFQTAwMDA2MUE4NUU0MDAwMDAwMDMwNDFBODVGMDAwMDEwMzFGMDAKKzoxMDBFQjAwMDA2MUE4NUY0MDAwMDAwMDMwNDFBODYwMDAwMDEwMzIwQ0UKKzoxMDBFQzAwMDA2MUE4NjA0MDAwMDAwMDMwNDFBODYxMDAwMDEwMzIxOUMKKzoxMDBFRDAwMDA2MUE4NjE0MDAwMDAwMDMwNDFBODYyMDAwMDEwMzIyNkIKKzoxMDBFRTAwMDA2MUE4NjI0MDAwMDAwMDMwNDFBODYzMDAwMDEwMzIzM0EKKzoxMDBFRjAwMDA2MUE4NjM0MDAwMDAwMDMwNDFBODY0MDAwMDEwMzI0MDkKKzoxMDBGMDAwMDA2MUE4NjQ0MDAwMDAwMDMwNDFBODY1MDAwMDEwMzI1RDcKKzoxMDBGMTAwMDA2MUE4NjU0MDAwMDAwMDMwNDFBODY2MDAwMDEwMzI2QTYKKzoxMDBGMjAwMDA2MUE4NjY0MDAwMDAwMDMwNDFBODY3MDAwMDEwMzI3NzUKKzoxMDBGMzAwMDA2MUE4Njc0MDAwMDAwMDMwNDFBODY4MDAwMDEwMzI4NDQKKzoxMDBGNDAwMDA2MUE4Njg0MDAwMDAwMDMwNDFBODY5MDAwMDEwMzI5MTMKKzoxMDBGNTAwMDA2MUE4Njk0MDAwMDAwMDMwNDFBODZBMDAwMDEwMzJBRTIKKzoxMDBGNjAwMDA2MUE4NkE0MDAwMDAwMDMwNDFBODZCMDAwMDEwMzJCQjEKKzoxMDBGNzAwMDA2MUE4NkI0MDAwMDAwMDMwNDFBODZDMDAwMDEwMzJDODAKKzoxMDBGODAwMDA2MUE4NkM0MDAwMDAwMDMwNDFBODZEMDAwMDEwMzJENEYKKzoxMDBGOTAwMDA2MUE4NkQ0MDAwMDAwMDMwNDFBODZFMDAwMDEwMzJFMUUKKzoxMDBGQTAwMDA2MUE4NkU0MDAwMDAwMDMwNDFBODZGMDAwMDEwMzJGRUQKKzoxMDBGQjAwMDA2MUE4NkY0MDAwMDAwMDMwNDFBODcwMDAwMDEwMzMwQkIKKzoxMDBGQzAwMDA2MUE4NzA0MDAwMDAwMDMwNDFBODcxMDAwMDEwMzMxODkKKzoxMDBGRDAwMDA2MUE4NzE0MDAwMDAwMDMwNDFBODcyMDAwMDEwMzMyNTgKKzoxMDBGRTAwMDA2MUE4NzI0MDAwMDAwMDMwNDFBODczMDAwMDEwMzMzMjcKKzoxMDBGRjAwMDA2MUE4NzM0MDAwMDAwMDMwNDFBODc0MDAwMDEwMzM0RjYKKzoxMDEwMDAwMDA2MUE4NzQ0MDAwMDAwMDMwNDFBODc1MDAwMDEwMzM1QzQKKzoxMDEwMTAwMDA2MUE4NzU0MDAwMDAwMDMwNDFBODc2MDAwMDEwMzM2OTMKKzoxMDEwMjAwMDA2MUE4NzY0MDAwMDAwMDMwNDFBODc3MDAwMDEwMzM3NjIKKzoxMDEwMzAwMDA2MUE4Nzc0MDAwMDAwMDMwNDFBODc4MDAwMDEwMzM4MzEKKzoxMDEwNDAwMDA2MUE4Nzg0MDAwMDAwMDMwNDFBODc5MDAwMDEwMzM5MDAKKzoxMDEwNTAwMDA2MUE4Nzk0MDAwMDAwMDMwNDFBODdBMDAwMDEwMzNBQ0YKKzoxMDEwNjAwMDA2MUE4N0E0MDAwMDAwMDMwNDFBODdCMDAwMDEwMzNCOUUKKzoxMDEwNzAwMDA2MUE4N0I0MDAwMDAwMDMwNDFBODdDMDAwMDEwMzNDNkQKKzoxMDEwODAwMDA2MUE4N0M0MDAwMDAwMDMwNDFBODdEMDAwMDEwMzNEM0MKKzoxMDEwOTAwMDA2MUE4N0Q0MDAwMDAwMDMwNDFBODdFMDAwMDEwMzNFMEIKKzoxMDEwQTAwMDA2MUE4N0U0MDAwMDAwMDMwNDFBODdGMDAwMDEwMzNGREEKKzoxMDEwQjAwMDA2MUE4N0Y0MDAwMDAwMDMwNDFBODgwMDAwMDEwMzQwQTgKKzoxMDEwQzAwMDA2MUE4ODA0MDAwMDAwMDMwNDFBODgxMDAwMDEwMzQxNzYKKzoxMDEwRDAwMDA2MUE4ODE0MDAwMDAwMDMwNDFBODgyMDAwMDEwMzQyNDUKKzoxMDEwRTAwMDA2MUE4ODI0MDAwMDAwMDMwNDFBODgzMDAwMDEwMzQzMTQKKzoxMDEwRjAwMDA2MUE4ODM0MDAwMDAwMDMwNDFBODg0MDAwMDEwMzQ0RTMKKzoxMDExMDAwMDA2MUE4ODQ0MDAwMDAwMDMwNDFBODg1MDAwMDEwMzQ1QjEKKzoxMDExMTAwMDA2MUE4ODU0MDAwMDAwMDMwNDFBODg2MDAwMDEwMzQ2ODAKKzoxMDExMjAwMDA2MUE4ODY0MDAwMDAwMDMwNDFBODg3MDAwMDEwMzQ3NEYKKzoxMDExMzAwMDA2MUE4ODc0MDAwMDAwMDMwNDFBODg4MDAwMDEwMzQ4MUUKKzoxMDExNDAwMDA2MUE4ODg0MDAwMDAwMDMwNDFBODg5MDAwMDEwMzQ5RUQKKzoxMDExNTAwMDA2MUE4ODk0MDAwMDAwMDMwNDFBODhBMDAwMDEwMzRBQkMKKzoxMDExNjAwMDA2MUE4OEE0MDAwMDAwMDMwNDFBODhCMDAwMDEwMzRCOEIKKzoxMDExNzAwMDA2MUE4OEI0MDAwMDAwMDMwNDFBODhDMDAwMDEwMzRDNUEKKzoxMDExODAwMDA2MUE4OEM0MDAwMDAwMDMwNDFBODhEMDAwMDEwMzREMjkKKzoxMDExOTAwMDA2MUE4OEQ0MDAwMDAwMDMwNDFBODhFMDAwMDEwMzRFRjgKKzoxMDExQTAwMDA2MUE4OEU0MDAwMDAwMDMwNDFBODhGMDAwMDEwMzRGQzcKKzoxMDExQjAwMDA2MUE4OEY0MDAwMDAwMDMwNDFBODkwMDAwMDEwMzUwOTUKKzoxMDExQzAwMDA2MUE4OTA0MDAwMDAwMDMwNDFBODkxMDAwMDEwMzUxNjMKKzoxMDExRDAwMDA2MUE4OTE0MDAwMDAwMDMwNDFBODkyMDAwMDEwMzUyMzIKKzoxMDExRTAwMDA2MUE4OTI0MDAwMDAwMDMwNDFBODkzMDAwMDEwMzUzMDEKKzoxMDExRjAwMDA2MUE4OTM0MDAwMDAwMDMwNDFBODk0MDAwMDEwMzU0RDAKKzoxMDEyMDAwMDA2MUE4OTQ0MDAwMDAwMDMwNDFBODk1MDAwMDEwMzU1OUUKKzoxMDEyMTAwMDA2MUE4OTU0MDAwMDAwMDMwNDFBODk2MDAwMDEwMzU2NkQKKzoxMDEyMjAwMDA2MUE4OTY0MDAwMDAwMDMwNDFBODk3MDAwMDEwMzU3M0MKKzoxMDEyMzAwMDA2MUE4OTc0MDAwMDAwMDMwNDFBODk4MDAwMDEwMzU4MEIKKzoxMDEyNDAwMDA2MUE4OTg0MDAwMDAwMDMwNDFBODk5MDAwMDEwMzU5REEKKzoxMDEyNTAwMDA2MUE4OTk0MDAwMDAwMDMwNDFBODlBMDAwMDEwMzVBQTkKKzoxMDEyNjAwMDA2MUE4OUE0MDAwMDAwMDMwNDFBODlCMDAwMDEwMzVCNzgKKzoxMDEyNzAwMDA2MUE4OUI0MDAwMDAwMDMwNDFBODlDMDAwMDEwMzVDNDcKKzoxMDEyODAwMDA2MUE4OUM0MDAwMDAwMDMwNDFBODlEMDAwMDEwMzVEMTYKKzoxMDEyOTAwMDA2MUE4OUQ0MDAwMDAwMDMwNDFBODlFMDAwMDEwMzVFRTUKKzoxMDEyQTAwMDA2MUE4OUU0MDAwMDAwMDMwNDFBODlGMDAwMDEwMzVGQjQKKzoxMDEyQjAwMDA2MUE4OUY0MDAwMDAwMDMwNDFBOEEwMDAwMDEwMzYwODIKKzoxMDEyQzAwMDA2MUE4QTA0MDAwMDAwMDMwNDFBOEExMDAwMDEwMzYxNTAKKzoxMDEyRDAwMDA2MUE4QTE0MDAwMDAwMDMwNDFBOEEyMDAwMDEwMzYyMUYKKzoxMDEyRTAwMDA2MUE4QTI0MDAwMDAwMDMwNDFBOEEzMDAwMDEwMzYzRUUKKzoxMDEyRjAwMDA2MUE4QTM0MDAwMDAwMDMwNDFBOEE0MDAwMDEwMzY0QkQKKzoxMDEzMDAwMDA2MUE4QTQ0MDAwMDAwMDMwNDFBOEE1MDAwMDEwMzY1OEIKKzoxMDEzMTAwMDA2MUE4QTU0MDAwMDAwMDMwNDFBOEE2MDAwMDEwMzY2NUEKKzoxMDEzMjAwMDA2MUE4QTY0MDAwMDAwMDMwNDFBOEE3MDAwMDEwMzY3MjkKKzoxMDEzMzAwMDA2MUE4QTc0MDAwMDAwMDMwNDFBOEE4MDAwMDEwMzY4RjgKKzoxMDEzNDAwMDA2MUE4QTg0MDAwMDAwMDMwNDFBOEE5MDAwMDEwMzY5QzcKKzoxMDEzNTAwMDA2MUE4QTk0MDAwMDAwMDMwNDFBOEFBMDAwMDEwMzZBOTYKKzoxMDEzNjAwMDA2MUE4QUE0MDAwMDAwMDMwNDFBOEFCMDAwMDEwMzZCNjUKKzoxMDEzNzAwMDA2MUE4QUI0MDAwMDAwMDMwNDFBOEFDMDAwMDEwMzZDMzQKKzoxMDEzODAwMDA2MUE4QUM0MDAwMDAwMDMwNDFBOEFEMDAwMDEwMzZEMDMKKzoxMDEzOTAwMDA2MUE4QUQ0MDAwMDAwMDMwNDFBOEFFMDAwMDEwMzZFRDIKKzoxMDEzQTAwMDA2MUE4QUU0MDAwMDAwMDMwNDFBOEFGMDAwMDEwMzZGQTEKKzoxMDEzQjAwMDA2MUE4QUY0MDAwMDAwMDMwNDFBOEIwMDAwMDEwMzcwNkYKKzoxMDEzQzAwMDA2MUE4QjA0MDAwMDAwMDMwNDFBOEIxMDAwMDEwMzcxM0QKKzoxMDEzRDAwMDA2MUE4QjE0MDAwMDAwMDMwNDFBOEIyMDAwMDEwMzcyMEMKKzoxMDEzRTAwMDA2MUE4QjI0MDAwMDAwMDMwNDFBOEIzMDAwMDEwMzczREIKKzoxMDEzRjAwMDA2MUE4QjM0MDAwMDAwMDMwNDFBOEI0MDAwMDEwMzc0QUEKKzoxMDE0MDAwMDA2MUE4QjQ0MDAwMDAwMDMwNDFBOEI1MDAwMDEwMzc1NzgKKzoxMDE0MTAwMDA2MUE4QjU0MDAwMDAwMDMwNDFBOEI2MDAwMDEwMzc2NDcKKzoxMDE0MjAwMDA2MUE4QjY0MDAwMDAwMDMwNDFBOEI3MDAwMDEwMzc3MTYKKzoxMDE0MzAwMDA2MUE4Qjc0MDAwMDAwMDMwNDFBOEI4MDAwMDEwMzc4RTUKKzoxMDE0NDAwMDA2MUE4Qjg0MDAwMDAwMDMwNDFBOEI5MDAwMDEwMzc5QjQKKzoxMDE0NTAwMDA2MUE4Qjk0MDAwMDAwMDMwNDFBOEJBMDAwMDEwMzdBODMKKzoxMDE0NjAwMDA2MUE4QkE0MDAwMDAwMDMwNDFBOEJCMDAwMDEwMzdCNTIKKzoxMDE0NzAwMDA2MUE4QkI0MDAwMDAwMDMwNDFBOEJDMDAwMDEwMzdDMjEKKzoxMDE0ODAwMDA2MUE4QkM0MDAwMDAwMDMwNDFBOEJEMDAwMDEwMzdERjAKKzoxMDE0OTAwMDA2MUE4QkQ0MDAwMDAwMDMwNDFBOEJFMDAwMDEwMzdFQkYKKzoxMDE0QTAwMDA2MUE4QkU0MDAwMDAwMDMwNDFBOEJGMDAwMDEwMzdGOEUKKzoxMDE0QjAwMDA2MUE4QkY0MDAwMDAwMDMwNDFBOEMwMDAwMDEwMzgwNUMKKzoxMDE0QzAwMDA2MUE4QzA0MDAwMDAwMDMwNDFBOEMxMDAwMDEwMzgxMkEKKzoxMDE0RDAwMDA2MUE4QzE0MDAwMDAwMDMwNDFBOEMyMDAwMDEwMzgyRjkKKzoxMDE0RTAwMDA2MUE4QzI0MDAwMDAwMDMwNDFBOEMzMDAwMDEwMzgzQzgKKzoxMDE0RjAwMDA2MUE4QzM0MDAwMDAwMDMwNDFBOEM0MDAwMDEwMzg0OTcKKzoxMDE1MDAwMDA2MUE4QzQ0MDAwMDAwMDMwNDFBOEM1MDAwMDEwMzg1NjUKKzoxMDE1MTAwMDA2MUE4QzU0MDAwMDAwMDMwNDFBOEM2MDAwMDEwMzg2MzQKKzoxMDE1MjAwMDA2MUE4QzY0MDAwMDAwMDMwNDFBOEM3MDAwMDEwMzg3MDMKKzoxMDE1MzAwMDA2MUE4Qzc0MDAwMDAwMDMwNDFBOEM4MDAwMDEwMzg4RDIKKzoxMDE1NDAwMDA2MUE4Qzg0MDAwMDAwMDMwNDFBOEM5MDAwMDEwMzg5QTEKKzoxMDE1NTAwMDA2MUE4Qzk0MDAwMDAwMDMwNDFBOENBMDAwMDEwMzhBNzAKKzoxMDE1NjAwMDA2MUE4Q0E0MDAwMDAwMDMwNDFBOENCMDAwMDEwMzhCM0YKKzoxMDE1NzAwMDA2MUE4Q0I0MDAwMDAwMDMwNDFBOENDMDAwMDEwMzhDMEUKKzoxMDE1ODAwMDA2MUE4Q0M0MDAwMDAwMDMwNDFBOENEMDAwMDEwMzhEREQKKzoxMDE1OTAwMDA2MUE4Q0Q0MDAwMDAwMDMwNDFBOENFMDAwMDEwMzhFQUMKKzoxMDE1QTAwMDA2MUE4Q0U0MDAwMDAwMDMwNDFBOENGMDAwMDEwMzhGN0IKKzoxMDE1QjAwMDA2MUE4Q0Y0MDAwMDAwMDMwNDFBOEQwMDAwMDEwMzkwNDkKKzoxMDE1QzAwMDA2MUE4RDA0MDAwMDAwMDMwNDFBOEQxMDAwMDEwMzkxMTcKKzoxMDE1RDAwMDA2MUE4RDE0MDAwMDAwMDMwNDFBOEQyMDAwMDEwMzkyRTYKKzoxMDE1RTAwMDA2MUE4RDI0MDAwMDAwMDMwNDFBOEQzMDAwMDEwMzkzQjUKKzoxMDE1RjAwMDA2MUE4RDM0MDAwMDAwMDMwNDFBOEQ0MDAwMDEwMzk0ODQKKzoxMDE2MDAwMDA2MUE4RDQ0MDAwMDAwMDMwNDFBOEQ1MDAwMDEwMzk1NTIKKzoxMDE2MTAwMDA2MUE4RDU0MDAwMDAwMDMwNDFBOEQ2MDAwMDEwMzk2MjEKKzoxMDE2MjAwMDA2MUE4RDY0MDAwMDAwMDMwNDFBOEQ3MDAwMDEwMzk3RjAKKzoxMDE2MzAwMDA2MUE4RDc0MDAwMDAwMDMwNDFBOEQ4MDAwMDEwMzk4QkYKKzoxMDE2NDAwMDA2MUE4RDg0MDAwMDAwMDMwNDFBOEQ5MDAwMDEwMzk5OEUKKzoxMDE2NTAwMDA2MUE4RDk0MDAwMDAwMDMwNDFBOERBMDAwMDEwMzlBNUQKKzoxMDE2NjAwMDA2MUE4REE0MDAwMDAwMDMwNDFBOERCMDAwMDEwMzlCMkMKKzoxMDE2NzAwMDA2MUE4REI0MDAwMDAwMDMwNDFBOERDMDAwMDEwMzlDRkIKKzoxMDE2ODAwMDA2MUE4REM0MDAwMDAwMDMwNDFBOEREMDAwMDEwMzlEQ0EKKzoxMDE2OTAwMDA2MUE4REQ0MDAwMDAwMDMwNDFBOERFMDAwMDEwMzlFOTkKKzoxMDE2QTAwMDA2MUE4REU0MDAwMDAwMDMwNDFBOERGMDAwMDEwMzlGNjgKKzoxMDE2QjAwMDA2MUE4REY0MDAwMDAwMDMwNDFBOEUwMDAwMDEwM0EwMzYKKzoxMDE2QzAwMDA2MUE4RTA0MDAwMDAwMDMwNDFBOEUxMDAwMDEwM0ExMDQKKzoxMDE2RDAwMDA2MUE4RTE0MDAwMDAwMDMwNDFBOEUyMDAwMDEwM0EyRDMKKzoxMDE2RTAwMDA2MUE4RTI0MDAwMDAwMDMwNDFBOEUzMDAwMDEwM0EzQTIKKzoxMDE2RjAwMDA2MUE4RTM0MDAwMDAwMDMwNDFBOEU0MDAwMDEwM0E0NzEKKzoxMDE3MDAwMDA2MUE4RTQ0MDAwMDAwMDMwNDFBOEU1MDAwMDEwM0E1M0YKKzoxMDE3MTAwMDA2MUE4RTU0MDAwMDAwMDMwNDFBOEU2MDAwMDEwM0E2MEUKKzoxMDE3MjAwMDA2MUE4RTY0MDAwMDAwMDMwNDFBOEU3MDAwMDEwM0E3REQKKzoxMDE3MzAwMDA2MUE4RTc0MDAwMDAwMDMwNDFBOEU4MDAwMDEwM0E4QUMKKzoxMDE3NDAwMDA2MUE4RTg0MDAwMDAwMDMwNDFBOEU5MDAwMDEwM0E5N0IKKzoxMDE3NTAwMDA2MUE4RTk0MDAwMDAwMDMwNDFBOEVBMDAwMDEwM0FBNEEKKzoxMDE3NjAwMDA2MUE4RUE0MDAwMDAwMDMwNDFBOEVCMDAwMDEwM0FCMTkKKzoxMDE3NzAwMDA2MUE4RUI0MDAwMDAwMDMwNDFBOEVDMDAwMDEwM0FDRTgKKzoxMDE3ODAwMDA2MUE4RUM0MDAwMDAwMDMwNDFBOEVEMDAwMDEwM0FEQjcKKzoxMDE3OTAwMDA2MUE4RUQ0MDAwMDAwMDMwNDFBOEVFMDAwMDEwM0FFODYKKzoxMDE3QTAwMDA2MUE4RUU0MDAwMDAwMDMwNDFBOEVGMDAwMDEwM0FGNTUKKzoxMDE3QjAwMDA2MUE4RUY0MDAwMDAwMDMwNDFBOEYwMDAwMDEwM0IwMjMKKzoxMDE3QzAwMDA2MUE4RjA0MDAwMDAwMDMwNDFBOEYxMDAwMDEwM0IxRjEKKzoxMDE3RDAwMDA2MUE4RjE0MDAwMDAwMDMwNDFBOEYyMDAwMDEwM0IyQzAKKzoxMDE3RTAwMDA2MUE4RjI0MDAwMDAwMDMwNDFBOEYzMDAwMDEwM0IzOEYKKzoxMDE3RjAwMDA2MUE4RjM0MDAwMDAwMDMwNDFBOEY0MDAwMDEwM0I0NUUKKzoxMDE4MDAwMDA2MUE4RjQ0MDAwMDAwMDMwNDFBOEY1MDAwMDEwM0I1MkMKKzoxMDE4MTAwMDA2MUE4RjU0MDAwMDAwMDMwNDFBOEY2MDAwMDEwM0I2RkIKKzoxMDE4MjAwMDA2MUE4RjY0MDAwMDAwMDMwNDFBOEY3MDAwMDEwM0I3Q0EKKzoxMDE4MzAwMDA2MUE4Rjc0MDAwMDAwMDMwNDFBOEY4MDAwMDEwM0I4OTkKKzoxMDE4NDAwMDA2MUE4Rjg0MDAwMDAwMDMwNDFBOEY5MDAwMDEwM0I5NjgKKzoxMDE4NTAwMDA2MUE4Rjk0MDAwMDAwMDMwNDFBOEZBMDAwMDEwM0JBMzcKKzoxMDE4NjAwMDA2MUE4RkE0MDAwMDAwMDMwNDFBOEZCMDAwMDEwM0JCMDYKKzoxMDE4NzAwMDA2MUE4RkI0MDAwMDAwMDMwNDFBOEZDMDAwMDEwM0JDRDUKKzoxMDE4ODAwMDA2MUE4RkM0MDAwMDAwMDMwNDFBOEZEMDAwMDEwM0JEQTQKKzoxMDE4OTAwMDA2MUE4RkQ0MDAwMDAwMDMwNDFBOEZFMDAwMDEwM0JFNzMKKzoxMDE4QTAwMDA2MUE4RkU0MDAwMDAwMDcwNDFBNjJDMDAwMjAwM0JGN0MKKzoxMDE4QjAwMDA2MUExQUYwMDAwMDAwNDIwNjFBQUYwMDAwMDAwMDA4RTUKKzoxMDE4QzAwMDA2MUFFMDAwMDAwMDA1NDAwNjFBRDAwMDAwMDAwMDcyNzEKKzoxMDE4RDAwMDA2MUFEMjQ4MDAwMDAwMTAwNjFBRDZCMDAwMDAwMDIwRjgKKzoxMDE4RTAwMDA2MUFENDcwMDAwMDAwOTAwNjFBRDQ2ODAwMDAwMDAyQTYKKzoxMDE4RjAwMDA2MUFBMDAwMDAwMDAxQzQwNjFBMzAwMDAwMDAwMDEwMDMKKzoxMDE5MDAwMDA2MUEzMDgwMDAwMDAwMTAwNjFBMzEwMDAwMDAwMDEwOTYKKzoxMDE5MTAwMDA2MUEzMTgwMDAwMDAwMTAwNjFBMzMwMDAwMDAwMDEyODEKKzoxMDE5MjAwMDA2MUEzMzkwMDAwMDAwNzAwNjFBRDQ1ODAwMDAwMDAyMTYKKzoxMDE5MzAwMDA2MUFEMzQ4MDAwMDAwMDIwNjFBRDM1ODAwMDAwMDIwRkYKKzoxMDE5NDAwMDA2MUFBNzEwMDAwMDAxQzQwNjFBMzA0MDAwMDAwMDEwNUIKKzoxMDE5NTAwMDA2MUEzMEMwMDAwMDAwMTAwNjFBMzE0MDAwMDAwMDEwQzYKKzoxMDE5NjAwMDA2MUEzMUMwMDAwMDAwMTAwNjFBMzM0ODAwMDAwMDEyQTkKKzoxMDE5NzAwMDA2MUEzNTUwMDAwMDAwNzAwNjFBRDQ2MDAwMDAwMDAyRkMKKzoxMDE5ODAwMDA2MUFEMzUwMDAwMDAwMDIwNjFBRDNEODAwMDAwMDIwMjcKKzoxMDE5OTAwMDAyMUFBRTIwMDAwMDAwMDAwNjFBNTAwMDAwMDAwMDAyRUIKKzoxMDE5QTAwMDA2MUE1MDgwMDAwMDAwMTIwNDFBNDAwMDAwMDIwM0RGRjMKKzoxMDE5QjAwMDA0MUE2M0MwMDAwMjAzRTEwNjFBNzAwMDAwMDAwMDA0NkMKKzoxMDE5QzAwMDA2MUEzMjAwMDAwMDAwMDgwMjFBQUUyNDAwMDAwMDAwQ0YKKzoxMDE5RDAwMDA2MUE1MDEwMDAwMDAwMDIwNjFBNTBDODAwMDAwMDEyM0IKKzoxMDE5RTAwMDA0MUE0MDA4MDAwMjAzRTMwNDFBNjNDODAwMDIwM0U1NzYKKzoxMDE5RjAwMDA2MUE3MDEwMDAwMDAwMDQwNjFBMzIyMDAwMDAwMDA4QzkKKzoxMDFBMDAwMDAyMUFBRTI4MDAwMDAwMDAwNjFBNTAyMDAwMDAwMDAyNTIKKzoxMDFBMTAwMDA2MUE1MTEwMDAwMDAwMTIwNDFBNDAxMDAwMDIwM0U3RDkKKzoxMDFBMjAwMDA0MUE2M0QwMDAwMjAzRTkwNjFBNzAyMDAwMDAwMDA0QzMKKzoxMDFBMzAwMDA2MUEzMjQwMDAwMDAwMDgwMjFBQUUyQzAwMDAwMDAwMTYKKzoxMDFBNDAwMDA2MUE1MDMwMDAwMDAwMDIwNjFBNTE1ODAwMDAwMDEyMTkKKzoxMDFBNTAwMDA0MUE0MDE4MDAwMjAzRUIwNDFBNjNEODAwMDIwM0VERDUKKzoxMDFBNjAwMDA2MUE3MDMwMDAwMDAwMDQwNjFBMzI2MDAwMDAwMDA4RjgKKzoxMDFBNzAwMDAyMUFBRTMwMDAwMDAwMDAwNjFBNTA0MDAwMDAwMDAyQkEKKzoxMDFBODAwMDA2MUE1MUEwMDAwMDAwMTIwNDFBNDAyMDAwMDIwM0VGQzEKKzoxMDFBOTAwMDA0MUE2M0UwMDAwMjAzRjEwNjFBNzA0MDAwMDAwMDA0MUIKKzoxMDFBQTAwMDA2MUEzMjgwMDAwMDAwMDgwMjFBQUUzNDAwMDAwMDAwNUUKKzoxMDFBQjAwMDA2MUE1MDUwMDAwMDAwMDIwNjFBNTFFODAwMDAwMDEyRjkKKzoxMDFBQzAwMDA0MUE0MDI4MDAwMjAzRjMwNDFBNjNFODAwMDIwM0Y1MzUKKzoxMDFBRDAwMDA2MUE3MDUwMDAwMDAwMDQwNjFBMzJBMDAwMDAwMDA4MjgKKzoxMDFBRTAwMDAyMUFBRTM4MDAwMDAwMDAwNjFBNTA2MDAwMDAwMDAyMjIKKzoxMDFBRjAwMDA2MUE1MjMwMDAwMDAwMTIwNDFBNDAzMDAwMDIwM0Y3QTgKKzoxMDFCMDAwMDA0MUE2M0YwMDAwMjAzRjkwNjFBNzA2MDAwMDAwMDA0NzIKKzoxMDFCMTAwMDA2MUEzMkMwMDAwMDAwMDgwMjFBQUUzQzAwMDAwMDAwQTUKKzoxMDFCMjAwMDA2MUE1MDcwMDAwMDAwMDIwNjFBNTI3ODAwMDAwMDEyRDcKKzoxMDFCMzAwMDA0MUE0MDM4MDAwMjAzRkIwNDFBNjNGODAwMDIwM0ZEOTQKKzoxMDFCNDAwMDA2MUE3MDcwMDAwMDAwMDQwNjFBMzJFMDAwMDAwMDA4NTcKKzoxMDFCNTAwMDAyMDBBMkE0MDAwMDAyMDkwMjAwQTI3MDAwMDAwMDAwMUUKKzoxMDFCNjAwMDAyMDBBMjc0MDAwMDAwMDAwMjAwQTI3MDAwMDAwMDAwNDkKKzoxMDFCNzAwMDAyMDBBMjc0MDAwMDAwMDAwMjAwQTI3MDAwMDAwMDAwMzkKKzoxMDFCODAwMDAyMDBBMjc0MDAwMDAwMDAwMjAwQTI3MDAwMDAwMDAwMjkKKzoxMDFCOTAwMDAyMDBBMjc0MDAwMDAwMDAwMjAxMDBCNDAwMDAwMDAxNzUKKzoxMDFCQTAwMDAyMDEwMEI4MDAwMDAwMDEwMjAxMDBDQzAwMDAwMDAxQTkKKzoxMDFCQjAwMDAyMDEwMEQwMDAwMDAwMDEwMjAxMDBEQzAwMDAwMDAxNzEKKzoxMDFCQzAwMDAyMDEwMTAwMDAwMDAwMDEwMjAxMDEwNDAwMDAwMDAxMDcKKzoxMDFCRDAwMDAyMDEwMDdDMDAzMDAwMDAwMjAxMDA4NDAwMDAwMDI4QTcKKzoxMDFCRTAwMDAyMDEwMDhDMDAwMDAwMDAwMjAxMDEzMDAwMDAwMDA0MkUKKzoxMDFCRjAwMDAyMDEwMjVDMDAwMDAwMDEwMjAxMDMyODAwMDAwMDAwNTUKKzoxMDFDMDAwMDAyMDE2MDU4MDAwMEZGRkYwMjAxNjA3MDAwMDAwMDA3NDEKKzoxMDFDMTAwMDAyMDEwNTU0MDAwMDAwMzAwMjAxMDBDNDAwMDAwMDAxNzAKKzoxMDFDMjAwMDAyMDEwMEY4MDAwMDAwMDEwMjAxMDBGMDAwMDAwMDAxQzQKKzoxMDFDMzAwMDAyMDEwMDgwMDAzMDAwMDAwMjAxMDA4ODAwMDAwMDI4M0UKKzoxMDFDNDAwMDAyMDEwMDkwMDAwMDAwMDAwMjAxMDEzNDAwMDAwMDA0QzUKKzoxMDFDNTAwMDAyMDEwMkRDMDAwMDAwMDEwMjAxMDMyQzAwMDAwMDAwNzAKKzoxMDFDNjAwMDAyMDE2MDVDMDAwMEZGRkYwMjAxNjA3NDAwMDAwMDA3RDkKKzoxMDFDNzAwMDAyMDEwNTY0MDAwMDAwMzAwMjAxMDBDODAwMDAwMDAxRkMKKzoxMDFDODAwMDAyMDEwMEZDMDAwMDAwMDEwMjAxMDBGNDAwMDAwMDAxNUMKKzoxMDFDOTAwMDAyMEMxMDAwMDAwMDAwMjgwMjBDMjAwODAwMDAwMjExQjUKKzoxMDFDQTAwMDAyMEMyMDBDMDAwMDAyMDAwMjBDMjAxMDAwMDAwMjA0QjQKKzoxMDFDQjAwMDAyMEMyMDFDMDAwMEZGRkYwMjBDMjAyMDAwMDBGRkZGOTAKKzoxMDFDQzAwMDAyMEMyMDI0MDAwMEZGRkYwMjBDMjAyODAwMDBGRkZGNzAKKzoxMDFDRDAwMDAyMEMyMDM4MDAwMDAwMDAwMjBDMjAzQzAwMDAwMDM3RkQKKzoxMDFDRTAwMDAyMEMyMDQwMDAwMDAwMjEwMjBDMjA0NDAwMDAwMDIwRDMKKzoxMDFDRjAwMDA2MEMyMDQ4MDAwMDAwMUQwMjBDMjBCQzAwMDAwMDAxNjIKKzoxMDFEMDAwMDA2MEMyMEMwMDAwMDAwM0YwMjBDMjFCQzAwMDAwMDAxQjYKKzoxMDFEMTAwMDAyMEMyMUMwMDAwMDAwMDEwMjBDMjFDNDAwMDAwMDAxREYKKzoxMDFEMjAwMDA2MEMyMUM4MDAwMDAwMUMwMjBDMjIzODA3RkZGRkZGMzAKKzoxMDFEMzAwMDAyMEMyMjNDMDAwMDAwN0YwMjBDMjI0MDA3RkZGRkZGNDQKKzoxMDFENDAwMDAyMEMyMjQ0MDAwMDAwM0YwMTBDMjI0ODAwMDAwMDAwNjkKKzoxMDFENTAwMDAxMEMyMjRDMDAwMDAwMDAwMTBDMjI1MDAwMDAwMDAwODkKKzoxMDFENjAwMDAxMEMyMjU0MDAwMDAwMDAwMTBDMjI1ODAwMDAwMDAwNjkKKzoxMDFENzAwMDAxMEMyMjVDMDAwMDAwMDAwMTBDMjI2MDAwMDAwMDAwNDkKKzoxMDFEODAwMDAxMEMyMjY0MDAwMDAwMDAwMTBDMjI2ODAwMDAwMDAwMjkKKzoxMDFEOTAwMDAxMEMyMjZDMDAwMDAwMDAwMTBDMjI3MDAwMDAwMDAwMDkKKzoxMDFEQTAwMDAxMEMyMjc0MDAwMDAwMDAwMTBDMjI3ODAwMDAwMDAwRTkKKzoxMDFEQjAwMDAxMEMyMjdDMDAwMDAwMDAwMjBDMjJEODAwMDBGRkZGNzIKKzoxMDFEQzAwMDAyMEMyMkRDMDAwMEZGRkYwMjBDMjJFMDAwMDBGRkZGRkIKKzoxMDFERDAwMDAyMEMyMkU0MDAwMEZGRkYwQzBDMjAwMDAwMDAwM0U4Q0UKKzoxMDFERTAwMDBBMEMyMDAwMDAwMDAwMDEwQjBDMjAwMDAwMDAwMDAzODIKKzoxMDFERjAwMDAyMEM0MDA4MDAwMDEwMTEwMjBDNDAwQzAwMDAxMDAwMDIKKzoxMDFFMDAwMDAyMEM0MDEwMDAwMDEwMDQwMjBDNDAxNDAwMDAxMDIxQ0QKKzoxMDFFMTAwMDAyMEM0MDFDMDAwMEZGRkYwMjBDNDAyMDAwMDBGRkZGRUUKKzoxMDFFMjAwMDAyMEM0MDI0MDAwMEZGRkYwMjBDNDAyODAwMDBGRkZGQ0UKKzoxMDFFMzAwMDAyMEM0MDM4MDAwMDAwNDYwMjBDNDAzQzAwMDAwMDBDNDAKKzoxMDFFNDAwMDA2MEM0MDQwMDAwMDAwMDIwMjBDNDA0ODAwMDAwMDE4NTAKKzoxMDFFNTAwMDAyMEM0MDRDMDAwMDAwRjAwNjBDNDA1MDAwMDAwMDFGMzcKKzoxMDFFNjAwMDAyMEM0MENDMDAwMDAwMDEwNjBDNDBEMDAwMDAwMDNBRkIKKzoxMDFFNzAwMDAyMEM0MUI4MDAwMDAwMDEwNjBDNDFCQzAwMDAwMDAzNDgKKzoxMDFFODAwMDAyMEM0MUM4MDAwMDAwMDEwMjBDNDFDQzAwMDAwMDAxMUUKKzoxMDFFOTAwMDA2MEM0MUQwMDAwMDAwMUEwMjBDNDIzODA3RkZGRkZGNzkKKzoxMDFFQTAwMDAyMEM0MjNDMDAwMDAwN0YwMjBDNDI0MDA3RkZGRkZGOTMKKzoxMDFFQjAwMDAyMEM0MjQ0MDAwMDAwM0YwMTBDNDI0ODAwMDAwMDAwQjgKKzoxMDFFQzAwMDAxMEM0MjRDMDAwMDAwMDAwMTBDNDI1MDAwMDAwMDAwRDgKKzoxMDFFRDAwMDAxMEM0MjU0MDAwMDAwMDAwMTBDNDI1ODAwMDAwMDAwQjgKKzoxMDFFRTAwMDAxMEM0MjVDMDAwMDAwMDAwMTBDNDI2MDAwMDAwMDAwOTgKKzoxMDFFRjAwMDAxMEM0MjY0MDAwMDAwMDAwMTBDNDI2ODAwMDAwMDAwNzgKKzoxMDFGMDAwMDAxMEM0MjZDMDAwMDAwMDAwMTBDNDI3MDAwMDAwMDAwNTcKKzoxMDFGMTAwMDAxMEM0Mjc0MDAwMDAwMDAwMTBDNDI3ODAwMDAwMDAwMzcKKzoxMDFGMjAwMDAxMEM0MjdDMDAwMDAwMDAwMTBDNDI4MDAwMDAwMDAwMTcKKzoxMDFGMzAwMDAyMEM0MkQ4MDAwMEZGRkYwMjBDNDJEQzAwMDBGRkZGNTEKKzoxMDFGNDAwMDAyMEM0MkUwMDAwMEZGRkYwMjBDNDJFNDAwMDBGRkZGMzEKKzoxMDFGNTAwMDBDMEM0MDAwMDAwMDAzRTgwQTBDNDAwMDAwMDAwMDAxRTcKKzoxMDFGNjAwMDBCMEM0MDAwMDAwMDAwMDMwNjBENDAwMDAwMDAwQTAwQkEKKzoxMDFGNzAwMDAyMEQwMDQ0MDAwMDAwMzIwMjBEMDA4QzAyMTUwMDIwMEEKKzoxMDFGODAwMDAyMEQwMDkwMDIxNTAwMjAwMjBEMDA5NDA4MTAwMDAwQzAKKzoxMDFGOTAwMDAyMEQwMDk4MDAwMDAwMzYwMjBEMDBBMDAwMDAwMDAwQjUKKzoxMDFGQTAwMDAyMEQwMEE0MDAwMDAwMDQwMjBEMDBBODAwMDAwMDA0QkYKKzoxMDFGQjAwMDA2MEQwMEFDMDAwMDAwMDIwMjBEMDBCODAwMDAwMDAyOTcKKzoxMDFGQzAwMDAyMEQwMEMwMDAwMDAwMDEwMjBEMDBDODAwMDAwMDAyNjgKKzoxMDFGRDAwMDAyMEQwMENDMDAwMDAwMDIwMjBEMDE1QzAwMDAwMDAxQjcKKzoxMDFGRTAwMDAyMEQwMTY0MDAwMDAwMDEwMjBEMDE2ODAwMDAwMDAyMDIKKzoxMDFGRjAwMDAyMEQwMjA0MDAwMDAwMDEwMjBEMDIwQzAwMDAwMDIwOEUKKzoxMDIwMDAwMDAyMEQwMjEwMDAwMDAwNDAwMjBEMDIxNDAwMDAwMDQwMEEKKzoxMDIwMTAwMDAyMEQwMjIwMDAwMDAwMDMwMjBEMDIyNDAwMDAwMDE4M0YKKzoxMDIwMjAwMDA2MEQwMjgwMDAwMDAwMTIwNDBEMDMwMDAwMTgwM0ZGREIKKzoxMDIwMzAwMDA2MEQwMzYwMDAwMDAwMEMwMjBEMDA0QzAwMDAwMDAxQzIKKzoxMDIwNDAwMDAyMEQwMDUwMDAwMDAwMDIwMjBEMDA1NDAwMDAwMDAwQ0MKKzoxMDIwNTAwMDAyMEQwMDU4MDAwMDAwMDgwNjBEMDA1QzAwMDAwMDA0OUUKKzoxMDIwNjAwMDAyMEQwMEM0MDAwMDAwMDQwMjBEMDAwNDAwMDAwMDAxODUKKzoxMDIwNzAwMDAyMEQwMDA4MDAwMDAwMDEwMjBEMDAwQzAwMDAwMDAxMkMKKzoxMDIwODAwMDAyMEQwMDEwMDAwMDAwMDEwMjBEMDAxNDAwMDAwMDAxMEMKKzoxMDIwOTAwMDAyMEQwMDE4MDAwMDAwMDEwMjBEMDAxQzAwMDAwMDAxRUMKKzoxMDIwQTAwMDAyMEQwMDIwMDAwMDAwMDEwMjBEMDAyNDAwMDAwMDAxQ0MKKzoxMDIwQjAwMDAyMEQwMDI4MDAwMDAwMDEwMjBEMDAyQzAwMDAwMDAxQUMKKzoxMDIwQzAwMDAyMEQwMDMwMDAwMDAwMDEwMjBEMDAzNDAwMDAwMDAxOEMKKzoxMDIwRDAwMDAyMEQwMDM4MDAwMDAwMDEwMjBEMDAzQzAwMDAwMDAxNkMKKzoxMDIwRTAwMDAyMEQwMTE0MDAwMDAwMDkwMjBEMDExQzAwMDAwMDBBOEQKKzoxMDIwRjAwMDAyMEQwMTI0MDAwMDAwMDAwMjBEMDEyQzAwMDAwMDAwNzAKKzoxMDIxMDAwMDAyMEQwMTM0MDAwMDAwMDAwMjBEMDEzQzAwMDAwMDBCMzQKKzoxMDIxMTAwMDAyMEQwMTQ0MDAwMDAwMDAwMjBEMDExODAwMDAwMDI5MUEKKzoxMDIxMjAwMDAyMEQwMTIwMDAwMDAwMkEwMjBEMDEyODAwMDAwMDIwRkQKKzoxMDIxMzAwMDAyMEQwMTMwMDAwMDAwMjAwMjBEMDEzODAwMDAwMDIwRDcKKzoxMDIxNDAwMDAyMEQwMTQwMDAwMDAwMkIwMjBEMDE0ODAwMDAwMDIwOUMKKzoxMDIxNTAwMDAyMEQwMTE0MDAwMDAwMTkwMjBEMDExQzAwMDAwMDFBRkMKKzoxMDIxNjAwMDAyMEQwMTI0MDAwMDAwMTAwMjBEMDEyQzAwMDAwMDEwREYKKzoxMDIxNzAwMDAyMEQwMTM0MDAwMDAwMTAwMjBEMDEzQzAwMDAwMDFCQTQKKzoxMDIxODAwMDAyMEQwMTQ0MDAwMDAwMTAwMjBEMDExODAwMDAwMDM5OEEKKzoxMDIxOTAwMDAyMEQwMTIwMDAwMDAwM0EwMjBEMDEyODAwMDAwMDMwNkQKKzoxMDIxQTAwMDAyMEQwMTMwMDAwMDAwMzAwMjBEMDEzODAwMDAwMDMwNDcKKzoxMDIxQjAwMDAyMEQwMTQwMDAwMDAwM0IwMjBEMDE0ODAwMDAwMDMwMEMKKzoxMDIxQzAwMDAyMEQwMTE0MDAwMDAwNDkwMjBEMDExQzAwMDAwMDRBMkMKKzoxMDIxRDAwMDAyMEQwMTI0MDAwMDAwNDAwMjBEMDEyQzAwMDAwMDQwMEYKKzoxMDIxRTAwMDAyMEQwMTM0MDAwMDAwNDAwMjBEMDEzQzAwMDAwMDRCRDQKKzoxMDIxRjAwMDAyMEQwMTQ0MDAwMDAwNDAwMjBEMDExODAwMDAwMDY5QkEKKzoxMDIyMDAwMDAyMEQwMTIwMDAwMDAwNkEwMjBEMDEyODAwMDAwMDYwOUMKKzoxMDIyMTAwMDAyMEQwMTMwMDAwMDAwNjAwMjBEMDEzODAwMDAwMDYwNzYKKzoxMDIyMjAwMDAyMEQwMTQwMDAwMDAwNkIwMjBEMDE0ODAwMDAwMDYwM0IKKzoxMDIyMzAwMDAyMEQwMTE0MDAwMDAwNTkwMjBEMDExQzAwMDAwMDVBOUIKKzoxMDIyNDAwMDAyMEQwMTI0MDAwMDAwNTAwMjBEMDEyQzAwMDAwMDUwN0UKKzoxMDIyNTAwMDAyMEQwMTM0MDAwMDAwNTAwMjBEMDEzQzAwMDAwMDVCNDMKKzoxMDIyNjAwMDAyMEQwMTQ0MDAwMDAwNTAwMjBEMDExODAwMDAwMDc5MjkKKzoxMDIyNzAwMDAyMEQwMTIwMDAwMDAwN0EwMjBEMDEyODAwMDAwMDcwMEMKKzoxMDIyODAwMDAyMEQwMTMwMDAwMDAwNzAwMjBEMDEzODAwMDAwMDcwRTYKKzoxMDIyOTAwMDAyMEQwMTQwMDAwMDAwN0IwMjBEMDE0ODAwMDAwMDcwQUIKKzoxMDIyQTAwMDA2MEUyMDAwMDAwMDA4MDAwMjBFMDA0QzAwMDAwMDMyNjQKKzoxMDIyQjAwMDAyMEUwMDk0MDIxNTAwMjAwMjBFMDA5ODAyMTUwMDIwNjQKKzoxMDIyQzAwMDAyMEUwMDlDMDAwMDAwMzAwMjBFMDBBMDA4MTAwMDAwNkEKKzoxMDIyRDAwMDAyMEUwMEE0MDAwMDAwMzYwMjBFMDBBODAwMDAwMDMwMkMKKzoxMDIyRTAwMDAyMEUwMEFDMDAwMDAwMzEwMjBFMDBCNDAwMDAwMDAzM0EKKzoxMDIyRjAwMDAyMEUwMEI4MDAwMDAwMDAwMjBFMDBDNDAwMDAwMDAwNDIKKzoxMDIzMDAwMDAyMEUwMENDMDAwMDAwMDYwMjBFMDBEODAwMDAwMDAxMDIKKzoxMDIzMTAwMDAyMEUwMTQ0MDAwMDAwMDEwMjBFMDE0QzAwMDAwMDAxMDkKKzoxMDIzMjAwMDAyMEUwMTUwMDAwMDAwMDIwMjBFMDIwNDAwMDAwMDAxMzMKKzoxMDIzMzAwMDAyMEUwMjBDMDAwMDAwNDAwMjBFMDIxMDAwMDAwMDQwREQKKzoxMDIzNDAwMDAyMEUwMjFDMDAwMDAwMDQwMjBFMDIyMDAwMDAwMDIwMDkKKzoxMDIzNTAwMDAyMEUwMjI0MDAwMDAwMEUwMjBFMDIyODAwMDAwMDFCRTQKKzoxMDIzNjAwMDA2MEUwMzAwMDAwMDAwMTIwNDBFMDI4MDAwMUIwNDE3N0EKKzoxMDIzNzAwMDA2MEUwMkVDMDAwMDAwMDUwMjBFMDA1NDAwMDAwMDBDRTYKKzoxMDIzODAwMDAyMEUwMDU4MDAwMDAwMEMwMjBFMDA1QzAwMDAwMDAwNkQKKzoxMDIzOTAwMDAyMEUwMDYwMDAwMDAwMTAwMjBFMDA2NDAwMDAwMDEwMzkKKzoxMDIzQTAwMDA2MEUwMDY4MDAwMDAwMDMwMjBFMDBEQzAwMDAwMDAzQkYKKzoxMDIzQjAwMDAyMEUwMDA0MDAwMDAwMDEwMjBFMDAwODAwMDAwMDAxRUYKKzoxMDIzQzAwMDAyMEUwMDBDMDAwMDAwMDEwMjBFMDAxMDAwMDAwMDAxQ0YKKzoxMDIzRDAwMDAyMEUwMDE0MDAwMDAwMDEwMjBFMDAxODAwMDAwMDAxQUYKKzoxMDIzRTAwMDAyMEUwMDFDMDAwMDAwMDEwMjBFMDAyMDAwMDAwMDAxOEYKKzoxMDIzRjAwMDAyMEUwMDI0MDAwMDAwMDEwMjBFMDAyODAwMDAwMDAxNkYKKzoxMDI0MDAwMDAyMEUwMDJDMDAwMDAwMDEwMjBFMDAzMDAwMDAwMDAxNEUKKzoxMDI0MTAwMDAyMEUwMDM0MDAwMDAwMDEwMjBFMDAzODAwMDAwMDAxMkUKKzoxMDI0MjAwMDAyMEUwMDNDMDAwMDAwMDEwMjBFMDA0MDAwMDAwMDAxMEUKKzoxMDI0MzAwMDAyMEUwMDQ0MDAwMDAwMDEwMjBFMDExMDAwMDAwMDBGMTcKKzoxMDI0NDAwMDAyMEUwMTE4MDAwMDAwMDAwMjBFMDEyMDAwMDAwMDAwMzIKKzoxMDI0NTAwMDAyMEUwMTI4MDAwMDAwMDAwMjBFMDExNDAwMDAwMDJGRUYKKzoxMDI0NjAwMDAyMEUwMTFDMDAwMDAwMjAwMjBFMDEyNDAwMDAwMDIwQ0EKKzoxMDI0NzAwMDAyMEUwMTJDMDAwMDAwMjAwMjBFMDExMDAwMDAwMDFGQkYKKzoxMDI0ODAwMDAyMEUwMTE4MDAwMDAwMTAwMjBFMDEyMDAwMDAwMDEwRDIKKzoxMDI0OTAwMDAyMEUwMTI4MDAwMDAwMTAwMjBFMDExNDAwMDAwMDNGOEYKKzoxMDI0QTAwMDAyMEUwMTFDMDAwMDAwMzAwMjBFMDEyNDAwMDAwMDMwNkEKKzoxMDI0QjAwMDAyMEUwMTJDMDAwMDAwMzAwMjBFMDExMDAwMDAwMDRGM0YKKzoxMDI0QzAwMDAyMEUwMTE4MDAwMDAwNDAwMjBFMDEyMDAwMDAwMDQwMzIKKzoxMDI0RDAwMDAyMEUwMTI4MDAwMDAwNDAwMjBFMDExNDAwMDAwMDZGRUYKKzoxMDI0RTAwMDAyMEUwMTFDMDAwMDAwNjAwMjBFMDEyNDAwMDAwMDYwQ0EKKzoxMDI0RjAwMDAyMEUwMTJDMDAwMDAwNjAwMjBFMDExMDAwMDAwMDVGQkYKKzoxMDI1MDAwMDAyMEUwMTE4MDAwMDAwNTAwMjBFMDEyMDAwMDAwMDUwRDEKKzoxMDI1MTAwMDAyMEUwMTI4MDAwMDAwNTAwMjBFMDExNDAwMDAwMDdGOEUKKzoxMDI1MjAwMDAyMEUwMTFDMDAwMDAwNzAwMjBFMDEyNDAwMDAwMDcwNjkKKzoxMDI1MzAwMDAyMEUwMTJDMDAwMDAwNzAwNzMwMDQwMDAwRDYwMDAwREQKKzoxMDI1NDAwMDA4MzAwN0Q4MDAwNTA0MzIwNzM0MDAwMDMyMkEwMDAwQTIKKzoxMDI1NTAwMDA3MzQ4MDAwMzEzMDBDOEIwNzM1MDAwMDM4RDAxOEQ4OTQKKzoxMDI1NjAwMDA3MzU4MDAwMkY4MjI3MEQwNzM2MDAwMDI2MzYzMkVFMTEKKzoxMDI1NzAwMDA4MzY3MTAwMzFFMDA0MzQwMjMwMDBCQzAwMDAwMDMwNDUKKzoxMDI1ODAwMDAxMzAwMDAwMDAwMDAwMDAwMTMwMDAwNDAwMDAwMDAwRTUKKzoxMDI1OTAwMDAxMzAwMDA4MDAwMDAwMDAwMTMwMDAwQzAwMDAwMDAwQzUKKzoxMDI1QTAwMDAxMzAwMDEwMDAwMDAwMDAwMTMwMDAxNDAwMDAwMDAwQTUKKzoxMDI1QjAwMDAyMzAwMDIwMDAwMDAwMDEwMjMwMDAyNDAwMDAwMDAyNzAKKzoxMDI1QzAwMDAyMzAwMDI4MDAwMDAwMDMwMjMwMDAyQzAwMDAwMDAwNTAKKzoxMDI1RDAwMDAyMzAwMDMwMDAwMDAwMDQwMjMwMDAzNDAwMDAwMDAxMkUKKzoxMDI1RTAwMDAyMzAwMDM4MDAwMDAwMDAwMjMwMDAzQzAwMDAwMDAxMTIKKzoxMDI1RjAwMDAyMzAwMDQwMDAwMDAwMDQwMjMwMDA0NDAwMDAwMDAwRUYKKzoxMDI2MDAwMDAyMzAwMDQ4MDAwMDAwMDEwMjMwMDA0QzAwMDAwMDAzQ0UKKzoxMDI2MTAwMDAyMzAwMDUwMDAwMDAwMDAwMjMwMDA1NDAwMDAwMDAxQjEKKzoxMDI2MjAwMDAyMzAwMDU4MDAwMDAwMDQwMjMwMDA1QzAwMDAwMDAwOEUKKzoxMDI2MzAwMDAyMzAwMDYwMDAwMDAwMDEwMjMwMDA2NDAwMDAwMDAzNkUKKzoxMDI2NDAwMDAyMzAwMDY4MDAwMDAwMDAwMjMwMDA2QzAwMDAwMDAxNTEKKzoxMDI2NTAwMDAyMzAwMDcwMDAwMDAwMDQwMjMwMDA3NDAwMDAwMDAwMkUKKzoxMDI2NjAwMDAyMzAwMDc4MDAwMDAwMDQwMjMwMDA3QzAwMDAwMDAzMEIKKzoxMDI2NzAwMDA2MzAwMDgwMDAwMDAwMDIwMjMwMDBBNDAwMDA3RkZGNEUKKzoxMDI2ODAwMDAyMzAwMEE4MDAwMDAzRkYwMjMwMDIyNDAwMDAwMDAwMTYKKzoxMDI2OTAwMDAyMzAwMjM0MDAwMDAwMDAwMjMwMDI0QzAwMDAwMDAwNTIKKzoxMDI2QTAwMDAyMzAwMkU0MDAwMEZGRkYwNjMwMjAwMDAwMDAwODAwQjYKKzoxMDI2QjAwMDAyMzM4QkMwMDAwMDAwMDEwMjMzODAwMDAwMDAwMDFBQ0EKKzoxMDI2QzAwMDAyMzM4MDQwMDAwMDAwNEUwMjMzODA4MDAwMDAwMDEwODIKKzoxMDI2RDAwMDAyMzM4MEMwMDAwMDAwMjAwQzMzODMwMDAwMDg2NDcwQzcKKzoxMDI2RTAwMDBBMzM4MzAwMDAwMDAxNTcwQjMzODMwMDAwMDAwNTVGQUQKKzoxMDI2RjAwMDBBMzM4MzQwMDAwMDAwMDAwQzMzODM0MDAwMDAwMjI2QjAKKzoxMDI3MDAwMDBCMzM4MzQwMDAwMDAwMDEwMjMzODM4MDAwMDg2NDcwQjMKKzoxMDI3MTAwMDAyMzM4M0MwMDAwMDAyMjYwMjMzMTQ4MDAwMDAwMDAxNEYKKzoxMDI3MjAwMDBBMzMxNDgwMDAwMDAwMDAwNjMyODAwMDAwMDAwMTAyMUQKKzoxMDI3MzAwMDA2MzIyMDA4MDAwMDAwQzgwNjMyMjAwMDAwMDAwMDAyMTcKKzoxMDI3NDAwMDA0MzI4NTIwMDA4RjA0MzYwNjMyODc1QzAwMDAwMDA5QzEKKzoxMDI3NTAwMDA2MzIzRUIwMDAwMDAwMDYwNjMyM0VEMDAwMDAwMDAyMDUKKzoxMDI3NjAwMDA2MzIzRTgwMDAwMDAwMEEwNDMyM0VBODAwMDIwNEM1ODIKKzoxMDI3NzAwMDA2MzIzRTAwMDAwMDAwMjAwNjMyNTAwMDAwMDAwOTQwRjIKKzoxMDI3ODAwMDA2MzI0MDAwMDAwMDAwMDQwNDMyOTRDMDAwMDIwNEM3NzYKKzoxMDI3OTAwMDA2MzI0MTEwMDAwMDAwMDIwNjMyRDAwMDAwMDAwMDcwMzYKKzoxMDI3QTAwMDA2MzJEQjAwMDAwMDAwRDQwNjMyREVBMDAwMDAwMDAyOEEKKzoxMDI3QjAwMDA2MzJFMDAwMDAwMDA4MDAwNjMzMjQwMDAwMDAwMTE4ODMKKzoxMDI3QzAwMDA2MzIxMDAwMDAwMDAxODgwNjMyNTAwMDAwMDAwMDIwOTAKKzoxMDI3RDAwMDA2MzI1MTAwMDAwMDAwMjAwNjMyNTIwMDAwMDAwMDIwQTYKKzoxMDI3RTAwMDA2MzI1MzAwMDAwMDAwMjAwNjMyNTQwMDAwMDAwMDIwOTIKKzoxMDI3RjAwMDA2MzI1NTAwMDAwMDAwMjAwNjMyNTYwMDAwMDAwMDIwN0UKKzoxMDI4MDAwMDA2MzI1NzAwMDAwMDAwMjAwNjMyNTgwMDAwMDAwMDIwNjkKKzoxMDI4MTAwMDA2MzI1OTAwMDAwMDAwMjAwNjMyNUEwMDAwMDAwMDIwNTUKKzoxMDI4MjAwMDA2MzI1QjAwMDAwMDAwMjAwNjMyNUMwMDAwMDAwMDIwNDEKKzoxMDI4MzAwMDA2MzI1RDAwMDAwMDAwMjAwNjMyNUUwMDAwMDAwMDIwMkQKKzoxMDI4NDAwMDA2MzI1RjAwMDAwMDAwMjAwNjMyODRGMDAwMDAwMDAyMjMKKzoxMDI4NTAwMDA0MzI4NTAwMDAwMjA0QzkwNjMyODUwODAwMDAwMDAyMjcKKzoxMDI4NjAwMDA2MzJERTkwMDAwMDAwMDIwNjMzMjg2MDAwMDAwMTE4RTYKKzoxMDI4NzAwMDA2MzIxNjIwMDAwMDAxODgwNjMyNTA4MDAwMDAwMDIwMzkKKzoxMDI4ODAwMDA2MzI1MTgwMDAwMDAwMjAwNjMyNTI4MDAwMDAwMDIwRjUKKzoxMDI4OTAwMDA2MzI1MzgwMDAwMDAwMjAwNjMyNTQ4MDAwMDAwMDIwRTEKKzoxMDI4QTAwMDA2MzI1NTgwMDAwMDAwMjAwNjMyNTY4MDAwMDAwMDIwQ0QKKzoxMDI4QjAwMDA2MzI1NzgwMDAwMDAwMjAwNjMyNTg4MDAwMDAwMDIwQjkKKzoxMDI4QzAwMDA2MzI1OTgwMDAwMDAwMjAwNjMyNUE4MDAwMDAwMDIwQTUKKzoxMDI4RDAwMDA2MzI1QjgwMDAwMDAwMjAwNjMyNUM4MDAwMDAwMDIwOTEKKzoxMDI4RTAwMDA2MzI1RDgwMDAwMDAwMjAwNjMyNUU4MDAwMDAwMDIwN0QKKzoxMDI4RjAwMDA2MzI1RjgwMDAwMDAwMjAwNjMyODRGODAwMDAwMDAyRUIKKzoxMDI5MDAwMDA0MzI4NTEwMDAwMjA0Q0IwNjMyODUxODAwMDAwMDAyNTQKKzoxMDI5MTAwMDA2MzJERTk4MDAwMDAwMDIwMjMyODQ1MDAwMDAwMDAwRkYKKzoxMDI5MjAwMDA2MzI0MDEwMDAwMDAwMDIwMjMyODQ1NDAwMDAwMDAwMTEKKzoxMDI5MzAwMDA2MzI0MDIwMDAwMDAwMDIwMjMyODQ1ODAwMDAwMDAwRUQKKzoxMDI5NDAwMDA2MzI0MDMwMDAwMDAwMDIwMjMyODQ1QzAwMDAwMDAwQzkKKzoxMDI5NTAwMDA2MzI0MDQwMDAwMDAwMDIwMjMyODQ2MDAwMDAwMDAwQTUKKzoxMDI5NjAwMDA2MzI0MDUwMDAwMDAwMDIwMjMyODQ2NDAwMDAwMDAwODEKKzoxMDI5NzAwMDA2MzI0MDYwMDAwMDAwMDIwMjMyODQ2ODAwMDAwMDAwNUQKKzoxMDI5ODAwMDA2MzI0MDcwMDAwMDAwMDIwMjMyODQ2QzAwMDAwMDAwMzkKKzoxMDI5OTAwMDA2MzI0MDgwMDAwMDAwMDIwNzIwMDQwMDAwNzMwMDAwOUYKKzoxMDI5QTAwMDA4MjAwNzgwMDAxMDA0Q0QwNzI0MDAwMDJBRjEwMDAwNTEKKzoxMDI5QjAwMDA3MjQ4MDAwMjc2NzBBQkQwODI0RDM1MDYzRkMwNENGOTYKKzoxMDI5QzAwMDAyMjAwMEJDMDAwMDAwMzAwMTIwMDAwMDAwMDAwMDAwRDgKKzoxMDI5RDAwMDAxMjAwMDA0MDAwMDAwMDAwMTIwMDAwODAwMDAwMDAwQTkKKzoxMDI5RTAwMDAxMjAwMDBDMDAwMDAwMDAwMTIwMDAxMDAwMDAwMDAwODkKKzoxMDI5RjAwMDAxMjAwMDE0MDAwMDAwMDAwMjIwMDAyMDAwMDAwMDAxNUYKKzoxMDJBMDAwMDAyMjAwMDI0MDAwMDAwMDIwMjIwMDAyODAwMDAwMDAzMzEKKzoxMDJBMTAwMDAyMjAwMDJDMDAwMDAwMDAwMjIwMDAzMDAwMDAwMDA0MTIKKzoxMDJBMjAwMDAyMjAwMDM0MDAwMDAwMDEwMjIwMDAzODAwMDAwMDAwRjUKKzoxMDJBMzAwMDAyMjAwMDNDMDAwMDAwMDEwMjIwMDA0MDAwMDAwMDA0RDEKKzoxMDJBNDAwMDAyMjAwMDQ0MDAwMDAwMDAwMjIwMDA0ODAwMDAwMDAxQjUKKzoxMDJBNTAwMDAyMjAwMDRDMDAwMDAwMDMwMjIwMDA1MDAwMDAwMDAwOTMKKzoxMDJBNjAwMDAyMjAwMDU0MDAwMDAwMDEwMjIwMDA1ODAwMDAwMDA0NzEKKzoxMDJBNzAwMDAyMjAwMDVDMDAwMDAwMDAwMjIwMDA2MDAwMDAwMDAxNTUKKzoxMDJBODAwMDAyMjAwMDY0MDAwMDAwMDMwMjIwMDA2ODAwMDAwMDAwMzMKKzoxMDJBOTAwMDAyMjAwMDZDMDAwMDAwMDEwMjIwMDA3MDAwMDAwMDA0MTEKKzoxMDJBQTAwMDAyMjAwMDc0MDAwMDAwMDAwMjIwMDA3ODAwMDAwMDA0RjIKKzoxMDJBQjAwMDAyMjAwMDdDMDAwMDAwMDMwNjIwMDA4MDAwMDAwMDAyQ0QKKzoxMDJBQzAwMDAyMjAwMEE0MDAwMDdGRkYwMjIwMDBBODAwMDAwM0ZGRjYKKzoxMDJBRDAwMDAyMjAwMjI0MDAwMDAwMDAwMjIwMDIzNDAwMDAwMDAwNTYKKzoxMDJBRTAwMDAyMjAwMjRDMDAwMDAwMDAwMjIwMDJFNDAwMDBGRkZGNzAKKzoxMDJBRjAwMDA2MjAyMDAwMDAwMDA4MDAwMjIzOEJDMDAwMDAwMDAxMTcKKzoxMDJCMDAwMDAyMjM4MDAwMDAwMDAwMTAwMjIzODA0MDAwMDAwMDEyMTkKKzoxMDJCMTAwMDAyMjM4MDgwMDAwMDAwMzAwMjIzODBDMDAwMDAwMDBFRUQKKzoxMDJCMjAwMDBDMjM4MzAwMDAwODY0NzAwQTIzODMwMDAwMDAwMTU3MEYKKzoxMDJCMzAwMDBCMjM4MzAwMDAwMDA1NUYwQTIzODM0MDAwMDAwMDAwOTAKKzoxMDJCNDAwMDBDMjM4MzQwMDAwMDAyMjYwQjIzODM0MDAwMDAwMDAxNzkKKzoxMDJCNTAwMDAyMjM4MzgwMDAwODY0NzAwMjIzODNDMDAwMDAwMjI2RTEKKzoxMDJCNjAwMDAyMjMxNDgwMDAwMDAwMDEwQTIzMTQ4MDAwMDAwMDAwRUEKKzoxMDJCNzAwMDA2MjIxMDAwMDAwMDAwNDIwNjIyMjAwODAwMDAwMEM4QzMKKzoxMDJCODAwMDA2MjIyMDAwMDAwMDAwMDIwNjIyQjAwMDAwMDAwMzMwRjAKKzoxMDJCOTAwMDA2MjJGNDAwMDAwMDAwNTMwNDIyRjU0QzAwMDEwNEQxODkKKzoxMDJCQTAwMDA2MjJGNTUwMDAwMDAwMDMwNDIyRjU1QzAwMDEwNEQyNjcKKzoxMDJCQjAwMDA2MjJGNTYwMDAwMDAwMDMwNDIyRjU2QzAwMDEwNEQzMzYKKzoxMDJCQzAwMDA2MjJGNTcwMDAwMDAwMDMwNDIyRjU3QzAwMDEwNEQ0MDUKKzoxMDJCRDAwMDA2MjJGNTgwMDAwMDAwMDMwNDIyRjU4QzAwMDEwNEQ1RDQKKzoxMDJCRTAwMDA2MjJGNTkwMDAwMDAwMDMwNDIyRjU5QzAwMDEwNEQ2QTMKKzoxMDJCRjAwMDA2MjJGNUEwMDAwMDAwMDMwNDIyRjVBQzAwMDEwNEQ3NzIKKzoxMDJDMDAwMDA2MjJGNUIwMDAwMDAwMDMwNDIyRjVCQzAwMDEwNEQ4NDAKKzoxMDJDMTAwMDA2MjJGNUMwMDAwMDAwNDYwNjIyRTIwMDAwMDAwNDQwNDMKKzoxMDJDMjAwMDA0MjIxMjQwMDA5MDA0RDkwNjIyMzAwMDAwMDAwMEMwQTcKKzoxMDJDMzAwMDA2MjI2NzAwMDAwMDAxMDAwNjIyOTAwMDAwMDAwNDAwNDgKKzoxMDJDNDAwMDA0MjI2QjA4MDAyMDA1NjkwNjIyMTFGMDAwMDAwMDA2MkUKKzoxMDJDNTAwMDA0MjIxMjA4MDAwNjA1ODkwNjIyMTIyMDAwMDAwMDAyNDQKKzoxMDJDNjAwMDA2MjI0MDAwMDAwMDA1QzAwNjIyQzAwMDAwMDAwMDA2NDkKKzoxMDJDNzAwMDA0MjJDMDE4MDAwNjA1OEYwNjIyQzAzMDAwMDAwMDBBOUEKKzoxMDJDODAwMDA0MjJDMDU4MDAwNjA1OTUwNjIyQzA3MDAwMDAwMDBBMDQKKzoxMDJDOTAwMDA0MjJDMDk4MDAwNjA1OUIwNjIyQzBCMDAwMDAwMDBBNkUKKzoxMDJDQTAwMDA0MjJDMEQ4MDAwNjA1QTEwNjIyQzBGMDAwMDAwMDBBRDgKKzoxMDJDQjAwMDA0MjJDMTE4MDAwNjA1QTcwNjIyQzEzMDAwMDAwMDBBNDAKKzoxMDJDQzAwMDA0MjJDMTU4MDAwNjA1QUQwNjIyQzE3MDAwMDAwMDBBQUEKKzoxMDJDRDAwMDA0MjJDMTk4MDAwNjA1QjMwNjIyQzFCMDAwMDAwMDBBMTQKKzoxMDJDRTAwMDA0MjJDMUQ4MDAwNjA1QjkwNjIyQzFGMDAwMDAwMDBBN0UKKzoxMDJDRjAwMDA0MjJDMjE4MDAwNjA1QkYwNjIyQzIzMDAwMDAwMDBBRTYKKzoxMDJEMDAwMDA0MjJDMjU4MDAwNjA1QzUwNjIyQzI3MDAwMDAwMDBBNEYKKzoxMDJEMTAwMDA0MjJDMjk4MDAwNjA1Q0IwNjIyQzJCMDAwMDAwMDBBQjkKKzoxMDJEMjAwMDA0MjJDMkQ4MDAwNjA1RDEwNjIyQzJGMDAwMDAwMDBBMjMKKzoxMDJEMzAwMDA0MjJDMzE4MDAwNjA1RDcwNjIyQzMzMDAwMDAwMDBBOEIKKzoxMDJENDAwMDA0MjJDMzU4MDAwNjA1REQwNjIyQzM3MDAwMDAwMDBBRjUKKzoxMDJENTAwMDA0MjJDMzk4MDAwNjA1RTMwNjIyQzNCMDAwMDAwMDBBNUYKKzoxMDJENjAwMDA0MjJDM0Q4MDAwNjA1RTkwNjIyQzNGMDAwMDAwMDBBQzkKKzoxMDJENzAwMDA0MjJDNDE4MDAwNjA1RUYwNjIyQzQzMDAwMDAwMDBBMzEKKzoxMDJEODAwMDA0MjJDNDU4MDAwNjA1RjUwNjIyQzQ3MDAwMDAwMDBBOUIKKzoxMDJEOTAwMDA0MjJDNDk4MDAwNjA1RkIwNjIyQzRCMDAwMDAwMDBBMDUKKzoxMDJEQTAwMDA0MjJDNEQ4MDAwNjA2MDEwNjIyQzRGMDAwMDAwMDBBNkUKKzoxMDJEQjAwMDA0MjJDNTE4MDAwNjA2MDcwNjIyQzUzMDAwMDAwMDBBRDYKKzoxMDJEQzAwMDA0MjJDNTU4MDAwNjA2MEQwNjIyQzU3MDAwMDAwMDBBNDAKKzoxMDJERDAwMDA0MjJDNTk4MDAwNjA2MTMwNjIyQzVCMDAwMDAwMDBBQUEKKzoxMDJERTAwMDA0MjJDNUQ4MDAwNjA2MTkwNjIyQzVGMDAwMDAwMDBBMTQKKzoxMDJERjAwMDA0MjJDNjE4MDAwNjA2MUYwNjIyQzYzMDAwMDAwMDBBN0MKKzoxMDJFMDAwMDA0MjJDNjU4MDAwNjA2MjUwNjIyQzY3MDAwMDAwMDBBRTUKKzoxMDJFMTAwMDA0MjJDNjk4MDAwNjA2MkIwNjIyQzZCMDAwMDAwMDBBNEYKKzoxMDJFMjAwMDA0MjJDNkQ4MDAwNjA2MzEwNjIyQzZGMDAwMDAwMDBBQjkKKzoxMDJFMzAwMDA0MjJDNzE4MDAwNjA2MzcwNjIyQzczMDAwMDAwMDBBMjEKKzoxMDJFNDAwMDA0MjJDNzU4MDAwNjA2M0QwNjIyQzc3MDAwMDAwMDBBOEIKKzoxMDJFNTAwMDA0MjJDNzk4MDAwNjA2NDMwNjIyQzdCMDAwMDAwMDBBRjUKKzoxMDJFNjAwMDA0MjJDN0Q4MDAwNjA2NDkwNjIyQzdGMDAwMDAwMDBBNUYKKzoxMDJFNzAwMDA0MjJDODE4MDAwNjA2NEYwNjIyQzgzMDAwMDAwMDBBQzcKKzoxMDJFODAwMDA0MjJDODU4MDAwNjA2NTUwNjIyQzg3MDAwMDAwMDBBMzEKKzoxMDJFOTAwMDA0MjJDODk4MDAwNjA2NUIwNjIyQzhCMDAwMDAwMDBBOUIKKzoxMDJFQTAwMDA0MjJDOEQ4MDAwNjA2NjEwNjIyQzhGMDAwMDAwMDBBMDUKKzoxMDJFQjAwMDA0MjJDOTE4MDAwNjA2NjcwNjIyQzkzMDAwMDAwMDBBNkQKKzoxMDJFQzAwMDA0MjJDOTU4MDAwNjA2NkQwNjIyQzk3MDAwMDAwMDBBRDcKKzoxMDJFRDAwMDA0MjJDOTk4MDAwNjA2NzMwNjIyQzlCMDAwMDAwMDBBNDEKKzoxMDJFRTAwMDA0MjJDOUQ4MDAwNjA2NzkwNjIyQzlGMDAwMDAwMDBBQUIKKzoxMDJFRjAwMDA0MjJDQTE4MDAwNjA2N0YwNjIyQ0EzMDAwMDAwMDBBMTMKKzoxMDJGMDAwMDA0MjJDQTU4MDAwNjA2ODUwNjIyQ0E3MDAwMDAwMDBBN0MKKzoxMDJGMTAwMDA0MjJDQTk4MDAwNjA2OEIwNjIyQ0FCMDAwMDAwMDBBRTYKKzoxMDJGMjAwMDA0MjJDQUQ4MDAwNjA2OTEwNjIyQ0FGMDAwMDAwMDBBNTAKKzoxMDJGMzAwMDA0MjJDQjE4MDAwNjA2OTcwNjIyQ0IzMDAwMDAwMDBBQjgKKzoxMDJGNDAwMDA0MjJDQjU4MDAwNjA2OUQwNjIyQ0I3MDAwMDAwMDBBMjIKKzoxMDJGNTAwMDA0MjJDQjk4MDAwNjA2QTMwNjIyQ0JCMDAwMDAwMDBBOEMKKzoxMDJGNjAwMDA0MjJDQkQ4MDAwNjA2QTkwNjIyQ0JGMDAwMDAwMDBBRjYKKzoxMDJGNzAwMDA0MjJDQzE4MDAwNjA2QUYwNjIyQ0MzMDAwMDAwMDBBNUUKKzoxMDJGODAwMDA0MjJDQzU4MDAwNjA2QjUwNjIyQ0M3MDAwMDAwMDBBQzgKKzoxMDJGOTAwMDA0MjJDQzk4MDAwNjA2QkIwNjIyQ0NCMDAwMDAwMDBBMzIKKzoxMDJGQTAwMDA0MjJDQ0Q4MDAwNjA2QzEwNjIyQ0NGMDAwMDAwMDBBOUMKKzoxMDJGQjAwMDA0MjJDRDE4MDAwNjA2QzcwNjIyQ0QzMDAwMDAwMDBBMDQKKzoxMDJGQzAwMDA0MjJDRDU4MDAwNjA2Q0QwNjIyQ0Q3MDAwMDAwMDBBNkUKKzoxMDJGRDAwMDA0MjJDRDk4MDAwNjA2RDMwNjIyQ0RCMDAwMDAwMDBBRDgKKzoxMDJGRTAwMDA0MjJDREQ4MDAwNjA2RDkwNjIyQ0RGMDAwMDAwMDBBNDIKKzoxMDJGRjAwMDA0MjJDRTE4MDAwNjA2REYwNjIyQ0UzMDAwMDAwMDBBQUEKKzoxMDMwMDAwMDA0MjJDRTU4MDAwNjA2RTUwNjIyQ0U3MDAwMDAwMDBBMTMKKzoxMDMwMTAwMDA0MjJDRTk4MDAwNjA2RUIwNjIyQ0VCMDAwMDAwMDBBN0QKKzoxMDMwMjAwMDA0MjJDRUQ4MDAwNjA2RjEwNjIyQ0VGMDAwMDAwMDBBRTcKKzoxMDMwMzAwMDA0MjJDRjE4MDAwNjA2RjcwNjIyQ0YzMDAwMDAwMDBBNEYKKzoxMDMwNDAwMDA0MjJDRjU4MDAwNjA2RkQwNjIyQ0Y3MDAwMDAwMDBBQjkKKzoxMDMwNTAwMDA0MjJDRjk4MDAwNjA3MDMwNjIyQ0ZCMDAwMDAwMDBBMjIKKzoxMDMwNjAwMDA0MjJDRkQ4MDAwNjA3MDkwNjIyQ0ZGMDAwMDAwMDBBOEMKKzoxMDMwNzAwMDA0MjJEMDE4MDAwNjA3MEYwNjIyRDAzMDAwMDAwMDBBRjQKKzoxMDMwODAwMDA0MjJEMDU4MDAwNjA3MTUwNjIyRDA3MDAwMDAwMDBBNUUKKzoxMDMwOTAwMDA0MjJEMDk4MDAwNjA3MUIwNjIyRDBCMDAwMDAwMDBBQzgKKzoxMDMwQTAwMDA0MjJEMEQ4MDAwNjA3MjEwNjIyRDBGMDAwMDAwMDBBMzIKKzoxMDMwQjAwMDA0MjJEMTE4MDAwNjA3MjcwNjIyRDEzMDAwMDAwMDBBOUEKKzoxMDMwQzAwMDA0MjJEMTU4MDAwNjA3MkQwNjIyRDE3MDAwMDAwMDBBMDQKKzoxMDMwRDAwMDA0MjJEMTk4MDAwNjA3MzMwNjIyRDFCMDAwMDAwMDBBNkUKKzoxMDMwRTAwMDA0MjJEMUQ4MDAwNjA3MzkwNjIyRDFGMDAwMDAwMDBBRDgKKzoxMDMwRjAwMDA0MjJEMjE4MDAwNjA3M0YwNjIyRDIzMDAwMDAwMDBBNDAKKzoxMDMxMDAwMDA0MjJEMjU4MDAwNjA3NDUwNjIyRDI3MDAwMDAwMDBBQTkKKzoxMDMxMTAwMDA0MjJEMjk4MDAwNjA3NEIwNjIyRDJCMDAwMDAwMDBBMTMKKzoxMDMxMjAwMDA0MjJEMkQ4MDAwNjA3NTEwNjIyRDJGMDAwMDAwMDBBN0QKKzoxMDMxMzAwMDA0MjJEMzE4MDAwNjA3NTcwNjIyRDMzMDAwMDAwMDBBRTUKKzoxMDMxNDAwMDA0MjJEMzU4MDAwNjA3NUQwNjIyRDM3MDAwMDAwMDBBNEYKKzoxMDMxNTAwMDA0MjJEMzk4MDAwNjA3NjMwNjIyRDNCMDAwMDAwMDBBQjkKKzoxMDMxNjAwMDA0MjJEM0Q4MDAwNjA3NjkwNjIyRDNGMDAwMDAwMDBBMjMKKzoxMDMxNzAwMDA0MjJENDE4MDAwNjA3NkYwNjIyRDQzMDAwMDAwMDBBOEIKKzoxMDMxODAwMDA0MjJENDU4MDAwNjA3NzUwNjIyRDQ3MDAwMDAwMDBBRjUKKzoxMDMxOTAwMDA0MjJENDk4MDAwNjA3N0IwNjIyRDRCMDAwMDAwMDBBNUYKKzoxMDMxQTAwMDA0MjJENEQ4MDAwNjA3ODEwNjIyRDRGMDAwMDAwMDBBQzkKKzoxMDMxQjAwMDA0MjJENTE4MDAwNjA3ODcwNjIyRDUzMDAwMDAwMDBBMzEKKzoxMDMxQzAwMDA0MjJENTU4MDAwNjA3OEQwNjIyRDU3MDAwMDAwMDBBOUIKKzoxMDMxRDAwMDA0MjJENTk4MDAwNjA3OTMwNjIyRDVCMDAwMDAwMDBBMDUKKzoxMDMxRTAwMDA0MjJENUQ4MDAwNjA3OTkwNjIyRDVGMDAwMDAwMDBBNkYKKzoxMDMxRjAwMDA0MjJENjE4MDAwNjA3OUYwNjIyRDYzMDAwMDAwMDBBRDcKKzoxMDMyMDAwMDA0MjJENjU4MDAwNjA3QTUwNjIyRDY3MDAwMDAwMDBBNDAKKzoxMDMyMTAwMDA0MjJENjk4MDAwNjA3QUIwNjIyRDZCMDAwMDAwMDBBQUEKKzoxMDMyMjAwMDA0MjJENkQ4MDAwNjA3QjEwNjIyRDZGMDAwMDAwMDBBMTQKKzoxMDMyMzAwMDA0MjJENzE4MDAwNjA3QjcwNjIyRDczMDAwMDAwMDBBN0MKKzoxMDMyNDAwMDA0MjJENzU4MDAwNjA3QkQwNjIyRDc3MDAwMDAwMDBBRTYKKzoxMDMyNTAwMDA0MjJENzk4MDAwNjA3QzMwNjIyRDdCMDAwMDAwMDBBNTAKKzoxMDMyNjAwMDA0MjJEN0Q4MDAwNjA3QzkwNjIyRDdGMDAwMDAwMDBBQkEKKzoxMDMyNzAwMDA0MjJEODE4MDAwNjA3Q0YwNjIyRDgzMDAwMDAwMDBBMjIKKzoxMDMyODAwMDA0MjJEODU4MDAwNjA3RDUwNjIyRDg3MDAwMDAwMDBBOEMKKzoxMDMyOTAwMDA0MjJEODk4MDAwNjA3REIwNjIyRDhCMDAwMDAwMDBBRjYKKzoxMDMyQTAwMDA0MjJEOEQ4MDAwNjA3RTEwNjIyRDhGMDAwMDAwMDBBNjAKKzoxMDMyQjAwMDA0MjJEOTE4MDAwNjA3RTcwNjIyRDkzMDAwMDAwMDBBQzgKKzoxMDMyQzAwMDA0MjJEOTU4MDAwNjA3RUQwNjIyRDk3MDAwMDAwMDBBMzIKKzoxMDMyRDAwMDA0MjJEOTk4MDAwNjA3RjMwNjIyRDlCMDAwMDAwMDBBOUMKKzoxMDMyRTAwMDA0MjJEOUQ4MDAwNjA3RjkwNjIyRDlGMDAwMDAwMDBBMDYKKzoxMDMyRjAwMDA0MjJEQTE4MDAwNjA3RkYwNjIyREEzMDAwMDAwMDBBNkUKKzoxMDMzMDAwMDA0MjJEQTU4MDAwNjA4MDUwNjIyREE3MDAwMDAwMDBBRDYKKzoxMDMzMTAwMDA0MjJEQTk4MDAwNjA4MEIwNjIyREFCMDAwMDAwMDBBNDAKKzoxMDMzMjAwMDA0MjJEQUQ4MDAwNjA4MTEwNjIyREFGMDAwMDAwMDBBQUEKKzoxMDMzMzAwMDA0MjJEQjE4MDAwNjA4MTcwNjIyREIzMDAwMDAwMDBBMTIKKzoxMDMzNDAwMDA0MjJEQjU4MDAwNjA4MUQwNjIyREI3MDAwMDAwMDBBN0MKKzoxMDMzNTAwMDA0MjJEQjk4MDAwNjA4MjMwNjIyREJCMDAwMDAwMDBBRTYKKzoxMDMzNjAwMDA0MjJEQkQ4MDAwNjA4MjkwNjIyREJGMDAwMDAwMDBBNTAKKzoxMDMzNzAwMDA0MjJEQzE4MDAwNjA4MkYwNjIyREMzMDAwMDAwMDBBQjgKKzoxMDMzODAwMDA0MjJEQzU4MDAwNjA4MzUwNjIyREM3MDAwMDAwMDBBMjIKKzoxMDMzOTAwMDA0MjJEQzk4MDAwNjA4M0IwNjIyRENCMDAwMDAwMDBBOEMKKzoxMDMzQTAwMDA0MjJEQ0Q4MDAwNjA4NDEwNjIyRENGMDAwMDAwMDBBRjYKKzoxMDMzQjAwMDA0MjJERDE4MDAwNjA4NDcwNjIyREQzMDAwMDAwMDBBNUUKKzoxMDMzQzAwMDA0MjJERDU4MDAwNjA4NEQwNjIyREQ3MDAwMDAwMDBBQzgKKzoxMDMzRDAwMDA0MjJERDk4MDAwNjA4NTMwNjIyRERCMDAwMDAwMDBBMzIKKzoxMDMzRTAwMDA0MjJEREQ4MDAwNjA4NTkwNjIyRERGMDAwMDAwMDBBOUMKKzoxMDMzRjAwMDA0MjJERTE4MDAwNjA4NUYwNjIyREUzMDAwMDAwMDBBMDQKKzoxMDM0MDAwMDA0MjJERTU4MDAwNjA4NjUwNjIyREU3MDAwMDAwMDBBNkQKKzoxMDM0MTAwMDA0MjJERTk4MDAwNjA4NkIwNjIyREVCMDAwMDAwMDBBRDcKKzoxMDM0MjAwMDA0MjJERUQ4MDAwNjA4NzEwNjIyREVGMDAwMDAwMDBBNDEKKzoxMDM0MzAwMDA0MjJERjE4MDAwNjA4NzcwNjIyREYzMDAwMDAwMDBBQTkKKzoxMDM0NDAwMDA0MjJERjU4MDAwNjA4N0QwNjIyREY3MDAwMDAwMDBBMTMKKzoxMDM0NTAwMDA0MjJERjk4MDAwNjA4ODMwNjIyREZCMDAwMDAwMDBBN0QKKzoxMDM0NjAwMDA0MjJERkQ4MDAwNjA4ODkwNjIyREZGMDAwMDAwMDBBRTcKKzoxMDM0NzAwMDA0MjJFMDE4MDAwNjA4OEYwNjIyRTAzMDAwMDAwMDBBNEYKKzoxMDM0ODAwMDA0MjJFMDU4MDAwNjA4OTUwNjIyRTA3MDAwMDAwMDBBQjkKKzoxMDM0OTAwMDA0MjJFMDk4MDAwNjA4OUIwNjIyRTBCMDAwMDAwMDBBMjMKKzoxMDM0QTAwMDA0MjJFMEQ4MDAwNjA4QTEwNjIyRTBGMDAwMDAwMDBBOEQKKzoxMDM0QjAwMDA0MjJFMTE4MDAwNjA4QTcwNjIyRTEzMDAwMDAwMDBBRjUKKzoxMDM0QzAwMDA0MjJFMTU4MDAwNjA4QUQwNjIyRTE3MDAwMDAwMDBBNUYKKzoxMDM0RDAwMDA0MjJFMTk4MDAwNjA4QjMwNjIyRTFCMDAwMDAwMDBBQzkKKzoxMDM0RTAwMDA0MjJFMUQ4MDAwNjA4QjkwNjIyRTFGMDAwMDAwMDA0MzkKKzoxMDM0RjAwMDA2MjIxNTM4MDAwMDAwMDIwNjIyMTFFODAwMDAwMDAyMzIKKzoxMDM1MDAwMDA2MjJGMzAwMDAwMDAwMDgwMjIyMTE0ODAwMDAwMDAwMUIKKzoxMDM1MTAwMDA2MjI1OTAwMDAwMDAwMDYwNjIyMzMwMDAwMDAwMDAyQzcKKzoxMDM1MjAwMDA2MjI2MDQwMDAwMDAwMzAwNjIyRjMyMDAwMDAwMDA4NjAKKzoxMDM1MzAwMDAyMjIxMTRDMDAwMDAwMDAwNjIyNTkxODAwMDAwMDA2NkIKKzoxMDM1NDAwMDA2MjIzMzA4MDAwMDAwMDIwNjIyNjEwMDAwMDAwMDMwNUQKKzoxMDM1NTAwMDA2MjJGMzQwMDAwMDAwMDgwMjIyMTE1MDAwMDAwMDAwODMKKzoxMDM1NjAwMDA2MjI1OTMwMDAwMDAwMDYwNjIyMzMxMDAwMDAwMDAyMzcKKzoxMDM1NzAwMDA2MjI2MUMwMDAwMDAwMzAwNjIyRjM2MDAwMDAwMDA4NEYKKzoxMDM1ODAwMDAyMjIxMTU0MDAwMDAwMDAwNjIyNTk0ODAwMDAwMDA2RTMKKzoxMDM1OTAwMDA2MjIzMzE4MDAwMDAwMDIwNjIyNjI4MDAwMDAwMDMwN0MKKzoxMDM1QTAwMDA2MjJGMzgwMDAwMDAwMDgwMjIyMTE1ODAwMDAwMDAwRUIKKzoxMDM1QjAwMDA2MjI1OTYwMDAwMDAwMDYwNjIyMzMyMDAwMDAwMDAyQTcKKzoxMDM1QzAwMDA2MjI2MzQwMDAwMDAwMzAwNjIyRjNBMDAwMDAwMDA4M0QKKzoxMDM1RDAwMDAyMjIxMTVDMDAwMDAwMDAwNjIyNTk3ODAwMDAwMDA2NUIKKzoxMDM1RTAwMDA2MjIzMzI4MDAwMDAwMDIwNjIyNjQwMDAwMDAwMDMwOUEKKzoxMDM1RjAwMDA2MjJGM0MwMDAwMDAwMDgwMjIyMTE2MDAwMDAwMDAwNTMKKzoxMDM2MDAwMDA2MjI1OTkwMDAwMDAwMDYwNjIyMzMzMDAwMDAwMDAyMTYKKzoxMDM2MTAwMDA2MjI2NEMwMDAwMDAwMzAwNjIyRjNFMDAwMDAwMDA4MkIKKzoxMDM2MjAwMDAyMjIxMTY0MDAwMDAwMDAwNjIyNTlBODAwMDAwMDA2RDIKKzoxMDM2MzAwMDA2MjIzMzM4MDAwMDAwMDIwNjIyNjU4MDAwMDAwMDMwQjgKKzoxMDM2NDAwMDAyMTYxMDAwMDAwMDAwMjgwMjE3MDAwODAwMDAwMDAyMDcKKzoxMDM2NTAwMDAyMTcwMDJDMDAwMDAwMDMwMjE3MDAzQzAwMDAwMDA0QzkKKzoxMDM2NjAwMDAyMTcwMDQ0MDAwMDAwMDAwMjE3MDA0ODAwMDAwMDAyOUEKKzoxMDM2NzAwMDAyMTcwMDRDMDAwMDAwOTAwMjE3MDA1MDAwMDAwMDkwNUMKKzoxMDM2ODAwMDAyMTcwMDU0MDA4MDAwOTAwMjE3MDA1ODA4MTAwMDAwMzQKKzoxMDM2OTAwMDAyMTcwMDcwMDAwMDAwMDYwMjE3MDA3ODAwMDAwOUZGMDIKKzoxMDM2QTAwMDAyMTcwMDdDMDAwMDA3NkMwMjE3MDFDNDA4MTAwMDAwMUMKKzoxMDM2QjAwMDAyMTcwMzQ0MDAwMDAwMDEwMjE3MDQwMDAwMDAwMDhBMDIKKzoxMDM2QzAwMDAyMTcwNDA0MDAwMDAwODAwMjE3MDQwODAwMDAwMDgxQjMKKzoxMDM2RDAwMDAyMTcwNDBDMDAwMDAwODAwMjE3MDQxMDAwMDAwMDhBOEEKKzoxMDM2RTAwMDAyMTcwNDE0MDAwMDAwODAwMjE3MDQxODAwMDAwMDgxNzMKKzoxMDM2RjAwMDAyMTcwNDFDMDAwMDAwODAwMjE3MDQzMDAwMDAwMDhBM0EKKzoxMDM3MDAwMDAyMTcwNDM0MDAwMDAwODAwMjE3MDQzODAwMDAwMDgxMTIKKzoxMDM3MTAwMDAyMTcwNDNDMDAwMDAwODAwMjE3MDQ0MDAwMDAwMDhBRTkKKzoxMDM3MjAwMDAyMTcwNDQ0MDAwMDAwODAwMjE3MDQ0ODAwMDAwMDgxRDIKKzoxMDM3MzAwMDAyMTcwNDRDMDAwMDAwODAwMjE3MDQ4MDAwMDAwMDhBNzkKKzoxMDM3NDAwMDAyMTcwNDg0MDAwMDAwODAwMjE3MDQ4ODAwMDAwMDgxMzIKKzoxMDM3NTAwMDAyMTcwNDhDMDAwMDAwODAwMjE3MDAzODAwN0MxMDA0NUYKKzoxMDM3NjAwMDAyMTcwMDA0MDAwMDAwMEYwMjE3MDFFQzAwMDAwMDAyMjUKKzoxMDM3NzAwMDAyMTcwMUY0MDAwMDAwMDIwMjE3MDFFQzAwMDAwMDAyMzEKKzoxMDM3ODAwMDAyMTcwMUY0MDAwMDAwMDIwMjE3MDFFQzAwMDAwMDAyMjEKKzoxMDM3OTAwMDAyMTcwMUY0MDAwMDAwMDIwMjE3MDFFQzAwMDAwMDAyMTEKKzoxMDM3QTAwMDAyMTcwMUY0MDAwMDAwMDIwMjE3MDFFQzAwMDAwMDAyMDEKKzoxMDM3QjAwMDAyMTcwMUY0MDAwMDAwMDIwMjE3MDFFQzAwMDAwMDAyRjEKKzoxMDM3QzAwMDAyMTcwMUY0MDAwMDAwMDIwMjE3MDFFQzAwMDAwMDAyRTEKKzoxMDM3RDAwMDAyMTcwMUY0MDAwMDAwMDIwMjE3MDFFQzAwMDAwMDAyRDEKKzoxMDM3RTAwMDAyMTcwMUY0MDAwMDAwMDIwNjE2NDAyNDAwMDAwMDAyNDcKKzoxMDM3RjAwMDAyMTY0MDcwMDAwMDAwMUMwMjE2NDIwODAwMDAwMDAxODIKKzoxMDM4MDAwMDAyMTY0MjEwMDAwMDAwMDEwMjE2NDIyMDAwMDAwMDAxRDIKKzoxMDM4MTAwMDAyMTY0MjI4MDAwMDAwMDEwMjE2NDIzMDAwMDAwMDAxOUEKKzoxMDM4MjAwMDAyMTY0MjM4MDAwMDAwMDEwMjE2NDI2MDAwMDAwMDAyNDkKKzoxMDM4MzAwMDBDMTY0MDFDMDAwM0QwOTAwQTE2NDAxQzAwMDAwMDlDOEYKKzoxMDM4NDAwMDBCMTY0MDFDMDAwMDAyNzEwMjE2NDAzMDAwMDAwMDI4RDgKKzoxMDM4NTAwMDAyMTY0MDM0MDAwMDAwMkMwMjE2NDAzODAwMDAwMDMwRjAKKzoxMDM4NjAwMDAyMTY0MDQ0MDAwMDAwMjAwMjE2NDAwMDAwMDAwMDAxNDMKKzoxMDM4NzAwMDAyMTY0MEQ4MDAwMDAwMDEwMjE2NDAwODAwMDAwMDAxQjYKKzoxMDM4ODAwMDAyMTY0MDBDMDAwMDAwMDEwMjE2NDAxMDAwMDAwMDAxNkEKKzoxMDM4OTAwMDAyMTY0MjQwMDAwMDAwMDAwMjE2NDI0ODAwMDAwMDAwRUMKKzoxMDM4QTAwMDA2MTY0MjcwMDAwMDAwMDIwMjE2NDI1MDAwMDAwMDAwOUUKKzoxMDM4QjAwMDAyMTY0MjU4MDAwMDAwMDAwNjE2NDI4MDAwMDAwMDAyNzYKKzoxMDM4QzAwMDAyMTY2MDA4MDAwMDEyMTQwMjE2NjAwQzAwMDAxMjAwQkMKKzoxMDM4RDAwMDAyMTY2MDEwMDAwMDEyMDQwMjE2NjAxQzAwMDBGRkZGQjgKKzoxMDM4RTAwMDAyMTY2MDIwMDAwMEZGRkYwMjE2NjAyNDAwMDBGRkZGQTgKKzoxMDM4RjAwMDAyMTY2MDI4MDAwMEZGRkYwMjE2NjAzODAwMDAwMDIwNUEKKzoxMDM5MDAwMDAyMTY2MDNDMDAwMDAwMTAwNjE2NjA0MDAwMDAwMDAyMzUKKzoxMDM5MTAwMDAyMTY2MDQ4MDAwMDAwMjMwMjE2NjA0QzAwMDAwMDI0REMKKzoxMDM5MjAwMDAyMTY2MDUwMDAwMDAwMjUwMjE2NjA1NDAwMDAwMDI2QjgKKzoxMDM5MzAwMDAyMTY2MDU4MDAwMDAwMjcwMjE2NjA1QzAwMDAwMDExQUIKKzoxMDM5NDAwMDAyMTY2MDYwMDAwMDAwMDAwMjE2NjA2NDAwMDAwMDJCOTgKKzoxMDM5NTAwMDAyMTY2MDY4MDAwMDAwMkMwMjE2NjA2QzAwMDAwMDJENEEKKzoxMDM5NjAwMDAyMTY2MDcwMDAwMDAwRUMwMjE2NjA3NDAwMDAwMDAwOTcKKzoxMDM5NzAwMDAyMTY2MDc4MDAwMDAwMjkwMjE2NjA3QzAwMDAwMDJBMTAKKzoxMDM5ODAwMDAyMTY2MDgwMDAwMDAwMkYwNjE2NjA4NDAwMDAwMDBEMDMKKzoxMDM5OTAwMDAyMTY2MEI4MDAwMDAwMDEwNjE2NjBCQzAwMDAwMDA4QjYKKzoxMDM5QTAwMDAyMTY2MERDMDAwMDAwMDEwNjE2NjBFMDAwMDAwMDA0NjIKKzoxMDM5QjAwMDAyMTY2MEYwMDAwMDAwMDEwNjE2NjBGNDAwMDAwMDAzMkIKKzoxMDM5QzAwMDAyMTY2MTAwMDAwMDAwMDEwNjE2NjEwNDAwMDAwMDJEQ0YKKzoxMDM5RDAwMDAyMTY2MUI4MDAwMDAwMDEwNjE2NjFCQzAwMDAwMDA4NzQKKzoxMDM5RTAwMDAyMTY2MURDMDAwMDAwMDEwNjE2NjFFMDAwMDAwMDA0MjAKKzoxMDM5RjAwMDAyMTY2MUYwMDAwMDAwMDEwNjE2NjFGNDAwMDAwMDAzRTkKKzoxMDNBMDAwMDAyMTY2MjAwMDAwMDAwMDEwNjE2NjIwNDAwMDAwMDBEQUMKKzoxMDNBMTAwMDAyMTY2MjM4MDdGRkZGRkYwMjE2NjIzQzAwMDAwMDdGQkIKKzoxMDNBMjAwMDAyMTY2MjQwMDdGRkZGRkYwMjE2NjI0NDAwMDAwMDNGREIKKzoxMDNBMzAwMDAxMTY2MjQ4MDAwMDAwMDAwMTE2NjI0QzAwMDAwMDAwMDAKKzoxMDNBNDAwMDAxMTY2MjUwMDAwMDAwMDAwMTE2NjI1NDAwMDAwMDAwRTAKKzoxMDNBNTAwMDAxMTY2MjU4MDAwMDAwMDAwMTE2NjI1QzAwMDAwMDAwQzAKKzoxMDNBNjAwMDAxMTY2MjYwMDAwMDAwMDAwMTE2NjI2NDAwMDAwMDAwQTAKKzoxMDNBNzAwMDAxMTY2MjY4MDAwMDAwMDAwMTE2NjI2QzAwMDAwMDAwODAKKzoxMDNBODAwMDAxMTY2MjcwMDAwMDAwMDAwMTE2NjI3NDAwMDAwMDAwNjAKKzoxMDNBOTAwMDAxMTY2Mjc4MDAwMDAwMDAwMTE2NjI3QzAwMDAwMDAwNDAKKzoxMDNBQTAwMDAxMTY2MkQ0MDAwMDAwMDAwMjE2NjJEODAwMDBGRkZGNzkKKzoxMDNBQjAwMDAyMTY2MkRDMDAwMEZGRkYwMjE2NjJFMDAwMDBGRkZGNUEKKzoxMDNBQzAwMDAyMTY2MkU0MDAwMEZGRkYwQzE2NjAwMDAwMDAwM0U4MkQKKzoxMDNBRDAwMDBBMTY2MDAwMDAwMDAwMDEwQjE2NjAwMDAwMDAwMDAzRTEKKzoxMDNBRTAwMDAyMTY4MDQwMDAwMDAwMDYwMjE2ODA0NDAwMDAwMDA1MTcKKzoxMDNBRjAwMDAyMTY4MDQ4MDAwMDAwMEEwMjE2ODA0QzAwMDAwMDA1RjMKKzoxMDNCMDAwMDAyMTY4MDU0MDAwMDAwMDIwMjE2ODBDQzAwMDAwMDA0NUYKKzoxMDNCMTAwMDAyMTY4MEQwMDAwMDAwMDQwMjE2ODBENDAwMDAwMDA0QzkKKzoxMDNCMjAwMDAyMTY4MEQ4MDAwMDAwMDQwMjE2ODBEQzAwMDAwMDA0QTkKKzoxMDNCMzAwMDAyMTY4MEUwMDAwMDAwMDQwMjE2ODBFNDAwMDAwMDA0ODkKKzoxMDNCNDAwMDAyMTY4MEU4MDAwMDAwMDQwMjE2ODgwNDAwMDAwMDA2NDcKKzoxMDNCNTAwMDAyMTY4MDMwMDAwMDAwN0MwMjE2ODAzNDAwMDAwMDNEMTgKKzoxMDNCNjAwMDAyMTY4MDM4MDAwMDAwM0YwMjE2ODAzQzAwMDAwMDlDRDYKKzoxMDNCNzAwMDAyMTZFNkU4MDAwMDYwMDAwMjE2RTZFQzAwMDA2MDAwQjUKKzoxMDNCODAwMDAyMTZFNkYwMDAwMDYwMDAwMjE2RTZGNDAwMDA2MDAwOTUKKzoxMDNCOTAwMDAyMTY4MjM0MDAwMDI1RTQwMjE2ODIzODAwMDA4MDAwRkMKKzoxMDNCQTAwMDAyMTY4MDk0MDAwMDI1RTMwMjE2ODFGNDAwMDAwQzA4NDAKKzoxMDNCQjAwMDAyMTY4MUY4MDAwMDAwNDAwMjE2ODFGQzAwMDAwMTAwOUUKKzoxMDNCQzAwMDAyMTY4MjAwMDAwMDAwMjAwMjE2ODIwNDAwMDAwMDE3ODYKKzoxMDNCRDAwMDAyMTY4MjA4MDAwMDAwODAwMjE2ODIwQzAwMDAwMjAwMUIKKzoxMDNCRTAwMDAyMTY4MjEwMDAwMDAwMDAwMjE2ODIzQzAwMDAwMDEzNDIKKzoxMDNCRjAwMDAyMTY4MjIwMDA4RjAwOEYwMjE2ODIxQzAwOEYwMDhGMTkKKzoxMDNDMDAwMDAyMTY4MEYwMDAwMDAwMDcwMjE2ODIxODAxRkYwMUZGNzMKKzoxMDNDMTAwMDAyMTY4MjE0MDFGRjAxRkYwNjE2ODBGNDAwMDAwMDAyNjQKKzoxMDNDMjAwMDAyMTY4MTFDMDAwMDAwMDUwMjE2ODEyMDAwMDAwMDA1MUMKKzoxMDNDMzAwMDAyMTY4MTI0MDAwMDAwMDUwMjE2ODEyODAwMDAwMDA4RjkKKzoxMDNDNDAwMDAyMTY4MTJDMDAwMDAwMDYwMjE2ODEzMDAwMDAwMDA3RDkKKzoxMDNDNTAwMDA2MTY4MTM0MDAwMDAwMDQwMjE2ODBGQzAwMDAwMDAwRkIKKzoxMDNDNjAwMDA2MTY4MTQ0MDAwMDAwMDIwMjE2ODE0QzAwMDAwMDA0ODgKKzoxMDNDNzAwMDAyMTY4MTUwMDAwMDAwMDEwMjE2ODE1NDAwMDAwMDAyNkIKKzoxMDNDODAwMDAyMTY4MTU4MDAwMDAwMDUwMjE2ODE1QzAwMDAwMDA1NDQKKzoxMDNDOTAwMDAyMTY4MTYwMDAwMDAwMDUwMjE2ODE2NDAwMDAwMDA1MjQKKzoxMDNDQTAwMDAyMTY4MTY4MDAwMDAwMDgwMjE2ODEwMDAwMDAwMDAwNzIKKzoxMDNDQjAwMDAyMTY4MTZDMDAwMDAwMDYwMjE2ODE3MDAwMDAwMDA3RTkKKzoxMDNDQzAwMDA2MTY4MTc0MDAwMDAwMDYwMjE2ODE4QzAwMDAwMDA0QjQKKzoxMDNDRDAwMDAyMTY4MTkwMDAwMDAwMDEwMjE2ODEwNDAwMDAwMDAwMUQKKzoxMDNDRTAwMDAyMTY4MTk0MDAwMDAwMDIwMjE2ODE5ODAwMDAwMDA1NkYKKzoxMDNDRjAwMDAyMTY4MTlDMDAwMDAwMDUwMjE2ODFBMDAwMDAwMDA1NEMKKzoxMDNEMDAwMDAyMTY4MUE0MDAwMDAwMDUwMjE2ODFBODAwMDAwMDA4MjgKKzoxMDNEMTAwMDAyMTY4MUFDMDAwMDAwMDYwMjE2ODFCMDAwMDAwMDA3MDgKKzoxMDNEMjAwMDA2MTY4MUI0MDAwMDAwMDIwMjE2ODEwODAwMDAwMDAwOUYKKzoxMDNEMzAwMDA2MTY4MUJDMDAwMDAwMDQwMjE2ODFDQzAwMDAwMDA0QkQKKzoxMDNENDAwMDAyMTY4MUQwMDAwMDAwMDEwMjE2ODFENDAwMDAwMDAyOUEKKzoxMDNENTAwMDAyMTY4MUQ4MDAwMDAwMDUwMjE2ODFEQzAwMDAwMDA1NzMKKzoxMDNENjAwMDAyMTY4MUUwMDAwMDAwMDUwMjE2ODEwQzAwMDAwMDA0MkMKKzoxMDNENzAwMDAyMTY4MUU0MDAwMDAwMDUwMjE2ODFFODAwMDAwMDA4MzgKKzoxMDNEODAwMDAyMTY4MUVDMDAwMDAwMDYwMjE2ODFGMDAwMDAwMDA3MTgKKzoxMDNEOTAwMDAyMTY4MTEwMDAwMDAwMDEwMjE2ODExNDAwMDAwMDAyQ0EKKzoxMDNEQTAwMDAyMTY4MTE4MDAwMDAwMDUwMjE2ODA5QzAwMDAwMDRDREQKKzoxMDNEQjAwMDAyMTY4MEEwMDAwMDAwNEMwNjE2ODBDNDAwMDAwMDAyMUQKKzoxMDNEQzAwMDAyMTY4MEE0MDAwMDAwMDAwMjE2ODBBODAwMDAwMDAwNzcKKzoxMDNERDAwMDAyMTY4MEFDMDAwMDAwNEMwNjE2ODBCMDAwMDAwMDA1MDIKKzoxMDNERTAwMDAyMTZFNkY4MDAwMDAyMDQwMjE2ODI0MDAwM0YwMDNGN0YKKzoxMDNERjAwMDAyMTY4MjQ0MDAzRjAwM0YwNjE2ODI5MDAwMDAwMDA0MzUKKzoxMDNFMDAwMDAyMTY4MjQ4MDA4MDAwODAwMjE2ODI0QzAwODAwMDgwRUEKKzoxMDNFMTAwMDAyMTY4MjUwMDEwMDAxMDAwMjE2ODI1NDAxMDAwMTAwQzYKKzoxMDNFMjAwMDA2MTY4MjU4MDAwMDAwMDIwMjE2ODI2MDAwNDAwMDQwMjAKKzoxMDNFMzAwMDAyMTY4MjY0MDA0MDAwNDAwMjE2ODI2ODFFMDAxRTAwQzYKKzoxMDNFNDAwMDAyMTY4MjZDMUUwMDFFMDAwMjE2ODI3MDQwMDA0MDAwQTYKKzoxMDNFNTAwMDAyMTY4Mjc0NDAwMDQwMDAwMjE2ODI3ODgwMDA4MDAwQzIKKzoxMDNFNjAwMDAyMTY4MjdDODAwMDgwMDAwMjE2ODI4MDIwMDAyMDAwRTIKKzoxMDNFNzAwMDAyMTY4Mjg0MjAwMDIwMDAwNjE2ODI4ODAwMDAwMDAyQkMKKzoxMDNFODAwMDAyMTY4MDkwMDAwMDAwNEIwMjE2ODA2MDAwMDAwMTQwODYKKzoxMDNFOTAwMDAyMTY4MDY0MDAwMDAxNDAwNjE2ODA4ODAwMDAwMDAyQkYKKzoxMDNFQTAwMDAyMTY4MDY4MDAwMDAwMDAwMjE2ODA2QzAwMDAwMDAwMEUKKzoxMDNFQjAwMDAyMTY4MDcwMDAwMDAwQzAwNjE2ODA3NDAwMDAwMDA1MjUKKzoxMDNFQzAwMDAyMTY4ODBDMDEwMTAxMDEwMjE2ODgxMDAxMDEyMDA0NkMKKzoxMDNFRDAwMDAyMTY4ODE0MjAwODEwMDEwMjE2ODgxODAxMDEwMTIwMUEKKzoxMDNFRTAwMDAyMTY4ODFDMDEwMTAxMDEwMjE2ODgyMDAxMDEyMDA0MkMKKzoxMDNFRjAwMDAyMTY4ODI0MjAwODEwMDEwMjE2ODgyODAxMDEwMTIwREEKKzoxMDNGMDAwMDAyMTY4ODJDMjAwODEwMDEwMjE2ODgzMDAxMDEwMTIwQjkKKzoxMDNGMTAwMDAyMTY4ODM0MDEwMTAxMDEwMjE2ODgzODAxMDEyMDA0Q0IKKzoxMDNGMjAwMDAyMTY4ODNDMjAwODEwMDEwMjE2ODg0MDAxMDEwMTIwNzkKKzoxMDNGMzAwMDAyMTY4ODQ0MDEwMTAxMDEwMjE2ODg0ODAxMDEyMDA0OEIKKzoxMDNGNDAwMDAyMTZFNkJDMDAwMDAwMDAwMjE2RTZDMDAwMDAwMDAyRjcKKzoxMDNGNTAwMDAyMTZFNkM0MDAwMDAwMDQwMjE2RTZDODAwMDAwMDA2Q0YKKzoxMDNGNjAwMDAyMTZFNzk0MDAwMDAwMDEwMjE2ODBFQzAwMDAwMEZGM0EKKzoxMDNGNzAwMDAyMTQwMDAwMDAwMDAwMDEwMjE1QzAyNDAwMDAwMDAwMkYKKzoxMDNGODAwMDAyMTVDMEVDMDAwMDAwMDEwMjE1QzBGMDAwMDAwMDAxQTUKKzoxMDNGOTAwMDA2MTVDMTAwMDAwMDAwMDIwMjE0MDAwNDAwMDAwMDAxMjgKKzoxMDNGQTAwMDAyMTQwMDA4MDAwMDAwMDEwMjE0MDAwQzAwMDAwMDAxQ0YKKzoxMDNGQjAwMDAyMTQwMDMwMDAwMDAwMDEwMjE0MDAzNDAwMDAwMDAxNkYKKzoxMDNGQzAwMDAyMTQwMDQwMDAwMDAwMDEwMjE0MDA0NDAwMDBGRkZGNDIKKzoxMDNGRDAwMDA2MTQwMDA0MDAwMDAwMDMwMjE0MDAwMDAwMDAwMDAwQUEKKzoxMDNGRTAwMDA2MDI4MDAwMDAwMDIwMDAwMjAyMDA1ODAwMDAwMDMyOUIKKzoxMDNGRjAwMDAyMDIwMEEwMDMxNTAwMjAwMjAyMDBBNDAzMTUwMDIwMDUKKzoxMDQwMDAwMDAyMDIwMEE4MDEwMDAwMzAwMjAyMDBBQzA4MTAwMDAwMEIKKzoxMDQwMTAwMDAyMDIwMEIwMDAwMDAwMzYwMjAyMDBCNDAwMDAwMDMwQ0UKKzoxMDQwMjAwMDAyMDIwMEI4MDAwMDAwMzEwMjAyMDBCQzAwMDAwMDAyRTEKKzoxMDQwMzAwMDAyMDIwMEMwMDAwMDAwMDUwMjAyMDBDNDAwMDAwMDAyRUQKKzoxMDQwNDAwMDAyMDIwMEM4MDAwMDAwMDIwMjAyMDBEMDAwMDAwMDA3QzcKKzoxMDQwNTAwMDAyMDIwMERDMDAwMDAwMDAwMjAyMDBFMDAwMDAwMDA1OTcKKzoxMDQwNjAwMDAyMDIwMEU0MDAwMDAwMDMwMjAyMDBGMDAwMDAwMDAxNzAKKzoxMDQwNzAwMDAyMDIwMEZDMDAwMDAwMDYwMjAyMDEyMDAwMDAwMDAwMTUKKzoxMDQwODAwMDAyMDIwMTM0MDAwMDAwMDIwMjAyMDFCMDAwMDAwMDAxM0YKKzoxMDQwOTAwMDAyMDIwMjBDMDAwMDAwMDEwMjAyMDIxNDAwMDAwMDAxRjIKKzoxMDQwQTAwMDAyMDIwMjE4MDAwMDAwMDIwMjAyMDQwNDAwMDAwMDAxRTMKKzoxMDQwQjAwMDAyMDIwNDBDMDAwMDAwNDAwMjAyMDQxMDAwMDAwMDQwNTQKKzoxMDQwQzAwMDAyMDIwNDFDMDAwMDAwMDQwMjAyMDQyMDAwMDAwMDIwODAKKzoxMDQwRDAwMDAyMDIwNDI0MDAwMDAwMDIwMjAyMDQyODAwMDAwMDIwNjIKKzoxMDQwRTAwMDA2MDIwNTAwMDAwMDAwMTIwNDAyMDQ4MDAwMjAwOEJGNDAKKzoxMDQwRjAwMDAyMDIwMDYwMDAwMDAwMEYwMjAyMDA2NDAwMDAwMDA3REUKKzoxMDQxMDAwMDAyMDIwMDY4MDAwMDAwMDAwMjAyMDA2QzAwMDAwMDBFQzUKKzoxMDQxMTAwMDAyMDIwMDcwMDAwMDAwMEUwNjAyMDA3NDAwMDAwMDAzOUUKKzoxMDQxMjAwMDAyMDIwMEY0MDAwMDAwMDQwMjAyMDAwNDAwMDAwMDAxOEEKKzoxMDQxMzAwMDAyMDIwMDA4MDAwMDAwMDEwMjAyMDAwQzAwMDAwMDAxNjEKKzoxMDQxNDAwMDAyMDIwMDEwMDAwMDAwMDEwMjAyMDAxNDAwMDAwMDAxNDEKKzoxMDQxNTAwMDAyMDIwMDE4MDAwMDAwMDEwMjAyMDAxQzAwMDAwMDAxMjEKKzoxMDQxNjAwMDAyMDIwMDIwMDAwMDAwMDEwMjAyMDAyNDAwMDAwMDAxMDEKKzoxMDQxNzAwMDAyMDIwMDI4MDAwMDAwMDEwMjAyMDAyQzAwMDAwMDAxRTEKKzoxMDQxODAwMDAyMDIwMDMwMDAwMDAwMDEwMjAyMDAzNDAwMDAwMDAxQzEKKzoxMDQxOTAwMDAyMDIwMDM4MDAwMDAwMDEwMjAyMDAzQzAwMDAwMDAxQTEKKzoxMDQxQTAwMDAyMDIwMDQwMDAwMDAwMDEwMjAyMDA0NDAwMDAwMDAxODEKKzoxMDQxQjAwMDAyMDIwMDQ4MDAwMDAwMDEwMjAyMDA0QzAwMDAwMDAxNjEKKzoxMDQxQzAwMDAyMDIwMDUwMDAwMDAwMDEwMjAyMDEwODAwMDAwMEM4QzUKKzoxMDQxRDAwMDAyMDIwMTE4MDAwMDAwMDIwMjAyMDFDNDAwMDAwMDAwRjcKKzoxMDQxRTAwMDAyMDIwMUNDMDAwMDAwMDAwMjAyMDFENDAwMDAwMDAyMjMKKzoxMDQxRjAwMDAyMDIwMURDMDAwMDAwMDIwMjAyMDFFNDAwMDAwMEZGRjQKKzoxMDQyMDAwMDAyMDIwMUVDMDAwMDAwRkYwMjAyMDEwMDAwMDAwMDAwQjkKKzoxMDQyMTAwMDAyMDIwMTBDMDAwMDAwQzgwMjAyMDExQzAwMDAwMDAyQTIKKzoxMDQyMjAwMDAyMDIwMUM4MDAwMDAwMDAwMjAyMDFEMDAwMDAwMDAwRUMKKzoxMDQyMzAwMDAyMDIwMUQ4MDAwMDAwMDIwMjAyMDFFMDAwMDAwMDAyQjgKKzoxMDQyNDAwMDAyMDIwMUU4MDAwMDAwRkYwMjAyMDFGMDAwMDAwMEZGOEUKKzoxMDQyNTAwMDAyMDIwMTA0MDAwMDAwMjAwMjAyMDEwODAwMDAwMEM4NjAKKzoxMDQyNjAwMDAyMDIwMTE4MDAwMDAwMDIwMjAyMDFDNDAwMDAwMDAwNjYKKzoxMDQyNzAwMDAyMDIwMUNDMDAwMDAwMDAwMjAyMDFENDAwMDAwMDAyOTIKKzoxMDQyODAwMDAyMDIwMURDMDAwMDAwMDIwMjAyMDFFNDAwMDAwMEZGNjMKKzoxMDQyOTAwMDAyMDIwMUVDMDAwMDAwRkYwMjAyMDEwMDAwMDAwMDEwMTkKKzoxMDQyQTAwMDAyMDIwMTBDMDAwMDAwQzgwMjAyMDExQzAwMDAwMDAyMTIKKzoxMDQyQjAwMDAyMDIwMUM4MDAwMDAwMDAwMjAyMDFEMDAwMDAwMDAwNUMKKzoxMDQyQzAwMDAyMDIwMUQ4MDAwMDAwMDIwMjAyMDFFMDAwMDAwMDAyMjgKKzoxMDQyRDAwMDAyMDIwMUU4MDAwMDAwRkYwMjAyMDFGMDAwMDAwMEZGRkUKKzoxMDQyRTAwMDAyMDIwMTA0MDAwMDAwMzAwMjAyMDEwODAwMDAwMEM4QzAKKzoxMDQyRjAwMDAyMDIwMTE4MDAwMDAwMDIwMjAyMDFDNDAwMDAwMDAwRDYKKzoxMDQzMDAwMDAyMDIwMUNDMDAwMDAwMDAwMjAyMDFENDAwMDAwMDAyMDEKKzoxMDQzMTAwMDAyMDIwMURDMDAwMDAwMDIwMjAyMDFFNDAwMDAwMEZGRDIKKzoxMDQzMjAwMDAyMDIwMUVDMDAwMDAwRkYwMjAyMDEwMDAwMDAwMDQwNTgKKzoxMDQzMzAwMDAyMDIwMTBDMDAwMDAwQzgwMjAyMDExQzAwMDAwMDAyODEKKzoxMDQzNDAwMDAyMDIwMUM4MDAwMDAwMDAwMjAyMDFEMDAwMDAwMDAwQ0IKKzoxMDQzNTAwMDAyMDIwMUQ4MDAwMDAwMDIwMjAyMDFFMDAwMDAwMDAyOTcKKzoxMDQzNjAwMDAyMDIwMUU4MDAwMDAwRkYwMjAyMDFGMDAwMDAwMEZGNkQKKzoxMDQzNzAwMDAyMDIwMTA0MDAwMDAwNjAwMjAyMDEwODAwMDAwMEM4RkYKKzoxMDQzODAwMDAyMDIwMTE4MDAwMDAwMDIwMjAyMDFDNDAwMDAwMDAwNDUKKzoxMDQzOTAwMDAyMDIwMUNDMDAwMDAwMDAwMjAyMDFENDAwMDAwMDAyNzEKKzoxMDQzQTAwMDAyMDIwMURDMDAwMDAwMDIwMjAyMDFFNDAwMDAwMEZGNDIKKzoxMDQzQjAwMDAyMDIwMUVDMDAwMDAwRkYwMjAyMDEwMDAwMDAwMDUwQjgKKzoxMDQzQzAwMDAyMDIwMTBDMDAwMDAwQzgwMjAyMDExQzAwMDAwMDAyRjEKKzoxMDQzRDAwMDAyMDIwMUM4MDAwMDAwMDAwMjAyMDFEMDAwMDAwMDAwM0IKKzoxMDQzRTAwMDAyMDIwMUQ4MDAwMDAwMDIwMjAyMDFFMDAwMDAwMDAyMDcKKzoxMDQzRjAwMDAyMDIwMUU4MDAwMDAwRkYwMjAyMDFGMDAwMDAwMEZGREQKKzoxMDQ0MDAwMDAyMDIwMTA0MDAwMDAwNzAwNzI4MDQwMDAwQjUwMDAwNEIKKzoxMDQ0MTAwMDA4MjgwN0I4MDAwOTA4REYwNzJDMDAwMDI4RTkwMDAwNzkKKzoxMDQ0MjAwMDA3MkM4MDAwMzY3MDBBM0IwNzJEMDAwMDM1QkUxN0Q4RDgKKzoxMDQ0MzAwMDA3MkQ4MDAwM0IxQjI1NDgwNzJFMDAwMDM1RDgzNDBGODAKKzoxMDQ0NDAwMDA3MkU4MDAwMUIyMjQxODYwODJFQkZEMDI4MDYwOEUxRDcKKzoxMDQ0NTAwMDAyMjgwMEJDMDAwMDAwMzAwMTI4MDAwMDAwMDAwMDAwMUQKKzoxMDQ0NjAwMDAxMjgwMDA0MDAwMDAwMDAwMTI4MDAwODAwMDAwMDAwRUUKKzoxMDQ0NzAwMDAxMjgwMDBDMDAwMDAwMDAwMTI4MDAxMDAwMDAwMDAwQ0UKKzoxMDQ0ODAwMDAxMjgwMDE0MDAwMDAwMDAwMjI4MDAyMDAwMDAwMDAxQTQKKzoxMDQ0OTAwMDAyMjgwMDI0MDAwMDAwMDIwMjI4MDAyODAwMDAwMDAzNzcKKzoxMDQ0QTAwMDAyMjgwMDJDMDAwMDAwMDAwMjI4MDAzMDAwMDAwMDA0NTgKKzoxMDQ0QjAwMDAyMjgwMDM0MDAwMDAwMDEwMjI4MDAzODAwMDAwMDAwM0IKKzoxMDQ0QzAwMDAyMjgwMDNDMDAwMDAwMDEwMjI4MDA0MDAwMDAwMDA0MTcKKzoxMDQ0RDAwMDAyMjgwMDQ0MDAwMDAwMDAwMjI4MDA0ODAwMDAwMDAxRkIKKzoxMDQ0RTAwMDAyMjgwMDRDMDAwMDAwMDMwMjI4MDA1MDAwMDAwMDAwRDkKKzoxMDQ0RjAwMDAyMjgwMDU0MDAwMDAwMDEwMjI4MDA1ODAwMDAwMDA0QjcKKzoxMDQ1MDAwMDAyMjgwMDVDMDAwMDAwMDAwMjI4MDA2MDAwMDAwMDAxOUEKKzoxMDQ1MTAwMDAyMjgwMDY0MDAwMDAwMDMwMjI4MDA2ODAwMDAwMDAwNzgKKzoxMDQ1MjAwMDAyMjgwMDZDMDAwMDAwMDEwMjI4MDA3MDAwMDAwMDA0NTYKKzoxMDQ1MzAwMDAyMjgwMDc0MDAwMDAwMDAwMjI4MDA3ODAwMDAwMDA0MzcKKzoxMDQ1NDAwMDAyMjgwMDdDMDAwMDAwMDMwNjI4MDA4MDAwMDAwMDAyMTIKKzoxMDQ1NTAwMDAyMjgwMEE0MDAwMDdGRkYwMjI4MDBBODAwMDAwM0ZGM0IKKzoxMDQ1NjAwMDAyMjgwMjI0MDAwMDAwMDAwMjI4MDIzNDAwMDAwMDAwOUIKKzoxMDQ1NzAwMDAyMjgwMjRDMDAwMDAwMDAwMjI4MDJFNDAwMDBGRkZGQjUKKzoxMDQ1ODAwMDA2MjgyMDAwMDAwMDA4MDAwMjJCOEJDMDAwMDAwMDAxNUMKKzoxMDQ1OTAwMDAyMkI4MDAwMDAwMDAwMDAwMjJCODA0MDAwMDAwMDE4NjkKKzoxMDQ1QTAwMDAyMkI4MDgwMDAwMDAwMEMwMjJCODBDMDAwMDAwMDY2RkYKKzoxMDQ1QjAwMDBDMkI4MzAwMDAwODY0NzAwQTJCODMwMDAwMDAwMTU3NTUKKzoxMDQ1QzAwMDBCMkI4MzAwMDAwMDA1NUYwQTJCODM0MDAwMDAwMDAwRDYKKzoxMDQ1RDAwMDBDMkI4MzQwMDAwMDAyMjYwQjJCODM0MDAwMDAwMDAxQkYKKzoxMDQ1RTAwMDAyMkI4MzgwMDAwODY0NzAwMjJCODNDMDAwMDAwMjI2MjcKKzoxMDQ1RjAwMDAyMkIxNDgwMDAwMDAwMDEwQTJCMTQ4MDAwMDAwMDAwMzAKKzoxMDQ2MDAwMDAyMkI5NDQwMDAwMDAwMDEwNjJCOTQ0ODAwMDAwMDAyOTkKKzoxMDQ2MTAwMDA2MkE5QTcwMDAwMDAwMDQwNDJBOUE4MDAwMDQwOEUzMjUKKzoxMDQ2MjAwMDA2MkE5QTkwMDAwMDAwMDIwNDJBOUE5ODAwMDIwOEU3REQKKzoxMDQ2MzAwMDA2MkE5MDAwMDAwMDAwNDgwNjJBMjAwODAwMDAwMEM4NTIKKzoxMDQ2NDAwMDA2MkEyMDAwMDAwMDAwMDIwNjJBOTEyODAwMDAwMDg2QTkKKzoxMDQ2NTAwMDA2MkFDMDAwMDAwMDAxMjAwNjJBOTM0ODAwMDAwMDAzM0IKKzoxMDQ2NjAwMDA0MkE5MzU0MDAwMTA4RTkwNjJBOUZCMDAwMDAwMDAyQzIKKzoxMDQ2NzAwMDA0MkE5NDE4MDAwMjA4RUEwNDJBOUNEMDAwMDEwOEVDREQKKzoxMDQ2ODAwMDA2MkE5Q0Q0MDAwMDAwMTEwNDJBOUQyMDAwOEYwOEVEMEEKKzoxMDQ2OTAwMDA2MkE5RjVDMDAwMDAwMDUwNDJBMzAwMDAwMDIwOTdDMDUKKzoxMDQ2QTAwMDA2MkEzMDA4MDAwMDAxMDAwNjJBNDA0MDAwMDAwMDEwRTEKKzoxMDQ2QjAwMDA0MkE0MDAwMDAxMDA5N0UwNDJBODQwODAwMDIwOThFQTIKKzoxMDQ2QzAwMDA0MkFDRjQwMDAwNDA5OTAwNDJBQ0Y2MDAwMDIwOTk0MTQKKzoxMDQ2RDAwMDA2MkE5RkEwMDAwMDAwMDQwNjJBNjAwMDAwMDAwNTQwOTIKKzoxMDQ2RTAwMDA2MkE5RDE4MDAwMDAwMDIwNjJBQjAwMDAwMDAwMDUwQjMKKzoxMDQ2RjAwMDA2MkFCQjcwMDAwMDAwNzAwNjJBQkI2ODAwMDAwMDAyOUEKKzoxMDQ3MDAwMDA2MkFCOTQ4MDAwMDAwMDQwNjJBRDAwMDAwMDAwODAwNkMKKzoxMDQ3MTAwMDA2MkFDNDgwMDAwMDAxNTAwNjJBOTQyMDAwMDAwMDMyQkUKKzoxMDQ3MjAwMDA2MkE1MDIwMDAwMDAwMDIwNjJBNTAzMDAwMDAwMDAyMzUKKzoxMDQ3MzAwMDA2MkE1MDAwMDAwMDAwMDIwNjJBNTAxMDAwMDAwMDAyNjUKKzoxMDQ3NDAwMDAyMkE1MjA4MDAwMDAwMDEwNDJBOUFBMDAwMDIwOTk2RDkKKzoxMDQ3NTAwMDA2MkE5NUIwMDAwMDAwMjIwNDJBOTYzODAwMDEwOTk4MjQKKzoxMDQ3NjAwMDA2MkE5NjNDMDAwMDAwMDMwNjJBOTZFMDAwMDAwMDIyN0MKKzoxMDQ3NzAwMDA0MkE5NzY4MDAwMTA5OTkwNjJBOTc2QzAwMDAwMDAzMzMKKzoxMDQ3ODAwMDA2MkE5ODEwMDAwMDAwMjIwNDJBOTg5ODAwMDEwOTlBMkQKKzoxMDQ3OTAwMDA2MkE5ODlDMDAwMDAwMDMwNjJBOTk0MDAwMDAwMDIyODcKKzoxMDQ3QTAwMDA0MkE5OUM4MDAwMTA5OUIwNjJBOTlDQzAwMDAwMDAzM0QKKzoxMDQ3QjAwMDA2MkFCQjU4MDAwMDAwMDIwNjJBQzlDMDAwMDAwMTUwQUEKKzoxMDQ3QzAwMDA2MkE5NEU4MDAwMDAwMzIwNjJBNTAyODAwMDAwMDAyNjEKKzoxMDQ3RDAwMDA2MkE1MDM4MDAwMDAwMDIwNjJBNTAwODAwMDAwMDAyOTUKKzoxMDQ3RTAwMDA2MkE1MDE4MDAwMDAwMDIwMjJBNTIwQzAwMDAwMDAxQTQKKzoxMDQ3RjAwMDA0MkE5QUE4MDAwMjA5OUMwNjJBOTY0ODAwMDAwMDIyNzIKKzoxMDQ4MDAwMDA0MkE5NkQwMDAwMTA5OUUwNjJBOTZENDAwMDAwMDAzQ0YKKzoxMDQ4MTAwMDA2MkE5Nzc4MDAwMDAwMjIwNDJBOTgwMDAwMDEwOTlGQzgKKzoxMDQ4MjAwMDA2MkE5ODA0MDAwMDAwMDMwNjJBOThBODAwMDAwMDIyMjcKKzoxMDQ4MzAwMDA0MkE5OTMwMDAwMTA5QTAwNjJBOTkzNDAwMDAwMDAzRDcKKzoxMDQ4NDAwMDA2MkE5OUQ4MDAwMDAwMjIwNDJBOUE2MDAwMDEwOUExRDIKKzoxMDQ4NTAwMDA2MkE5QTY0MDAwMDAwMDMwNjJBQkI2MDAwMDAwMDAyREEKKzoxMDQ4NjAwMDAyMkFDRjAwMDAwMDAwMDAwNDJBOUFCMDAwMTAwOUEyMUEKKzoxMDQ4NzAwMDA2MkE1MDQ4MDAwMDAwMEUwMjJBQ0YwNDAwMDAwMDAwNjMKKzoxMDQ4ODAwMDA0MkE5QUYwMDAxMDA5QjIwNjJBNTA4MDAwMDAwMDBFOTcKKzoxMDQ4OTAwMDAyMkFDRjA4MDAwMDAwMDAwNDJBOUIzMDAwMTAwOUMyNDEKKzoxMDQ4QTAwMDA2MkE1MEI4MDAwMDAwMEUwMjJBQ0YwQzAwMDAwMDAwQkIKKzoxMDQ4QjAwMDA0MkE5QjcwMDAxMDA5RDIwNjJBNTBGMDAwMDAwMDBFNTYKKzoxMDQ4QzAwMDAyMkFDRjEwMDAwMDAwMDAwNDJBOUJCMDAwMTAwOUUyNjkKKzoxMDQ4RDAwMDA2MkE1MTI4MDAwMDAwMEUwMjJBQ0YxNDAwMDAwMDAwMTIKKzoxMDQ4RTAwMDA0MkE5QkYwMDAxMDA5RjIwNjJBNTE2MDAwMDAwMDBFMTUKKzoxMDQ4RjAwMDAyMkFDRjE4MDAwMDAwMDAwNDJBOUMzMDAwMTAwQTAyOEYKKzoxMDQ5MDAwMDA2MkE1MTk4MDAwMDAwMEUwMjJBQ0YxQzAwMDAwMDAwNjkKKzoxMDQ5MTAwMDA0MkE5QzcwMDAxMDBBMTIwNjJBNTFEMDAwMDAwMDBFRDIKKzoxMDQ5MjAwMDAyMTAxMDA4MDAwMDAwMDEwMjEwMTA1MDAwMDAwMDAxRTkKKzoxMDQ5MzAwMDAyMTAxMDAwMDAwM0QwMDAwMjEwMTAwNDAwMDAwMDNEMUYKKzoxMDQ5NDAwMDA5MTAxODAwMDIwMDBBMjIwOTEwMTEwMDAwMTAwQzIyQTAKKzoxMDQ5NTAwMDA2MTAxMTQwMDAwMDAwMDgwOTEwMTE2MDAwMTAwQzMyMTAKKzoxMDQ5NjAwMDA2MTAxMUEwMDAwMDAwMTgwNjEwMjQwMDAwMDAwMEUwNEUKKzoxMDQ5NzAwMDAyMTAyMDFDMDAwMDAwMDAwMjEwMjAyMDAwMDAwMDAxOTYKKzoxMDQ5ODAwMDAyMTAyMEMwMDAwMDAwMDIwMjEwMjAwNDAwMDAwMDAxRkMKKzoxMDQ5OTAwMDAyMTAyMDA4MDAwMDAwMDEwMjEwMzBEODAwMDAwMDAxQzEKKzoxMDQ5QTAwMDA5MTAzQzAwMDAwNTBDNDIwOTEwMzgwMDAwMDUwQzQ3QjYKKzoxMDQ5QjAwMDA5MTAzOTIwMDAwNTBDNEMwOTEwM0IwMDAwMDUwQzUxNzIKKzoxMDQ5QzAwMDAyMTA0MEQ0MDAwMDAwMzAwMjEwNDBEODAwMDAwMDMwMzcKKzoxMDQ5RDAwMDA2MTA0QzAwMDAwMDAxMDAwMjEwNDAyODAwMDAwMDEwRUEKKzoxMDQ5RTAwMDAyMTA0MDQ0MDAwMDNGRkYwMjEwNDA1ODAwMjgwMDAwMjEKKzoxMDQ5RjAwMDAyMTA0MDg0MDA4NDkyNEEwMjEwNDA1ODAwMDAwMDAwRDcKKzoxMDRBMDAwMDAyMTA0MTM4MDAwMDAwMDEwMjEwNDEzODAwMDAwMDAxOEUKKzoxMDRBMTAwMDAyMTA0MTM4MDAwMDAwMDEwMjEwNDEzODAwMDAwMDAxN0UKKzoxMDRBMjAwMDAyMTA0MTM4MDAwMDAwMDEwMjEwNDEzODAwMDAwMDAxNkUKKzoxMDRBMzAwMDAyMTA0MTM4MDAwMDAwMDEwMjEwNDEzODAwMDAwMDAxNUUKKzoxMDRBNDAwMDAyMTIwNDkwMDFGNjgwNDAwMjEyMDUxNDAwMDAzQzEwOEUKKzoxMDRBNTAwMDAyMTIwNDk0RkZGRkZGRkYwMjEyMDQ5OEZGRkZGRkZGMDIKKzoxMDRBNjAwMDAyMTIwNDlDRkZGRkZGRkYwMjEyMDRBMEZGRkZGRkZGRTIKKzoxMDRBNzAwMDAyMTIwNEE0RkZGRkZGRkYwMjEyMDRBOEZGRkZGRkZGQzIKKzoxMDRBODAwMDAyMTIwNEFDRkZGRkZGRkYwMjEyMDRCMEZGRkZGRkZGQTIKKzoxMDRBOTAwMDAyMTIwNEI4RkZGRkZGRkYwMjEyMDRCQ0ZGRkZGRkZGN0EKKzoxMDRBQTAwMDAyMTIwNEMwRkZGRkZGRkYwMjEyMDRDNEZGRkZGRkZGNUEKKzoxMDRBQjAwMDAyMTIwNEM4RkZGRkZGRkYwMjEyMDRDQ0ZGRkZGRkZGM0EKKzoxMDRBQzAwMDAyMTIwNEQwRkZGRkZGRkYwMjEyMDREOEZGRkZGRkZGMTYKKzoxMDRBRDAwMDAyMTIwNERDRkZGRkZGRkYwMjEyMDRFMEZGRkZGRkZGRjIKKzoxMDRBRTAwMDAyMTIwNEU0RkZGRkZGRkYwMjEyMDRFOEZGRkZGRkZGRDIKKzoxMDRBRjAwMDAyMTIwNEVDRkZGRkZGRkYwMjEyMDRGMEZGRkZGRkZGQjIKKzoxMDRCMDAwMDAyMTIwNEY0RkZGRkZGRkYwMjEyMDRGOEZGRkZGRkZGOTEKKzoxMDRCMTAwMDAyMTIwNEZDRkZGRkZGRkYwMjEyMDUwMEZGRkZGRkZGNzAKKzoxMDRCMjAwMDAyMTIwNTA0RkZGRkZGRkYwMjEyMDUwOEZGRkZGRkZGNEYKKzoxMDRCMzAwMDAyMTIwNTBDRkZGRkZGRkYwMjEyMDUxMEZGRkZGRkZGMkYKKzoxMDRCNDAwMDAyMTIwNEQ0RjgwMEMwMDAwMjEyMDRCNEYwMDA1MDAwQjUKKzoxMDRCNTAwMDAyMTIwMzkwMDAwMDAwMDgwMjEyMDM5QzAwMDAwMDA4RUIKKzoxMDRCNjAwMDAyMTIwM0EwMDAwMDAwMDgwMjEyMDNBNDAwMDAwMDAyQzkKKzoxMDRCNzAwMDAyMTIwM0JDMDAwMDAwMDQwMjEyMDNDMDAwMDAwMDA1ODIKKzoxMDRCODAwMDAyMTIwM0M0MDAwMDAwMDQwMjEyMDNEMDAwMDAwMDAwNUYKKzoxMDRCOTAwMDAyMTIwMzZDMDAwMDAwMDEwMjEyMDFCQzAwMDAwMDQwODAKKzoxMDRCQTAwMDAyMTIwMUMwMDAwMDE4MDgwMjEyMDFDNDAwMDAwODAzMkMKKzoxMDRCQjAwMDAyMTIwMUM4MDAwMDA4MDMwMjEyMDFDQzAwMDAwMDQwRUMKKzoxMDRCQzAwMDAyMTIwMUQwMDAwMDAwMDMwMjEyMDFENDAwMDAwODAzMDkKKzoxMDRCRDAwMDAyMTIwMUQ4MDAwMDA4MDMwMjEyMDFEQzAwMDAwODAzRTEKKzoxMDRCRTAwMDAyMTIwMUUwMDAwMTAwMDMwMjEyMDFFNDAwMDAwODAzQzgKKzoxMDRCRjAwMDAyMTIwMUU4MDAwMDA4MDMwMjEyMDFFQzAwMDAwMDAzQTkKKzoxMDRDMDAwMDAyMTIwMUYwMDAwMDAwMDMwMjEyMDFGNDAwMDAwMDAzOTAKKzoxMDRDMTAwMDAyMTIwMUY4MDAwMDAwMDMwMjEyMDFGQzAwMDAwMDAzNzAKKzoxMDRDMjAwMDAyMTIwMjAwMDAwMDAwMDMwMjEyMDIwNDAwMDAwMDAzNEUKKzoxMDRDMzAwMDAyMTIwMjA4MDAwMDAwMDMwMjEyMDIwQzAwMDAwMDAzMkUKKzoxMDRDNDAwMDAyMTIwMjEwMDAwMDAwMDMwMjEyMDIxNDAwMDAwMDAzMEUKKzoxMDRDNTAwMDAyMTIwMjE4MDAwMDAwMDMwMjEyMDIxQzAwMDAwMDAzRUUKKzoxMDRDNjAwMDAyMTIwMjIwMDAwMDAwMDMwMjEyMDIyNDAwMDAwMDAzQ0UKKzoxMDRDNzAwMDAyMTIwMjI4MDAwMDI0MDMwMjEyMDIyQzAwMDAwMDJGNUUKKzoxMDRDODAwMDAyMTIwMjMwMDAwMDAwMDkwMjEyMDIzNDAwMDAwMDE5NzIKKzoxMDRDOTAwMDAyMTIwMjM4MDAwMDAxODQwMjEyMDIzQzAwMDAwMTgzNkIKKzoxMDRDQTAwMDAyMTIwMjQwMDAwMDAzMDYwMjEyMDI0NDAwMDAwMDE5MzIKKzoxMDRDQjAwMDAyMTIwMjQ4MDAwMDAwMDYwMjEyMDI0QzAwMDAwMzA2MjUKKzoxMDRDQzAwMDAyMTIwMjUwMDAwMDAzMDYwMjEyMDI1NDAwMDAwMzA2MDIKKzoxMDRDRDAwMDAyMTIwMjU4MDAwMDBDODYwMjEyMDI1QzAwMDAwMzA2NTkKKzoxMDRDRTAwMDAyMTIwMjYwMDAwMDAzMDYwMjEyMDI2NDAwMDAwMDA2QzUKKzoxMDRDRjAwMDAyMTIwMjY4MDAwMDAwMDYwMjEyMDI2QzAwMDAwMDA2QTgKKzoxMDREMDAwMDAyMTIwMjcwMDAwMDAwMDYwMjEyMDI3NDAwMDAwMDA2ODcKKzoxMDREMTAwMDAyMTIwMjc4MDAwMDAwMDYwMjEyMDI3QzAwMDAwMDA2NjcKKzoxMDREMjAwMDAyMTIwMjgwMDAwMDAwMDYwMjEyMDI4NDAwMDAwMDA2NDcKKzoxMDREMzAwMDAyMTIwMjg4MDAwMDAwMDYwMjEyMDI4QzAwMDAwMDA2MjcKKzoxMDRENDAwMDAyMTIwMjkwMDAwMDAwMDYwMjEyMDI5NDAwMDAwMDA2MDcKKzoxMDRENTAwMDAyMTIwMjk4MDAwMDAwMDYwMjEyMDI5QzAwMDAwMDA2RTcKKzoxMDRENjAwMDAyMTIwMkEwMDAwMDAzMDYwMjEyMDJBNDAwMDAwMDEzQjcKKzoxMDRENzAwMDAyMTIwMkE4MDAwMDAwMDYwMjEyMDJCMDAwMDAxMDA0OTUKKzoxMDREODAwMDAyMTIwMkI0MDAwMDEwMDQwMjEyMDMyNDAwMTA2NDQwNTYKKzoxMDREOTAwMDAyMTIwMzI4MDAxMDY0NDAwMjEyMDVCNDAwMDAwMDAxNTIKKzoxMDREQTAwMDAyMTIwNUY4MDAwMDAwNDAwMjEyMDVGQzAwMDAwMDE5ODQKKzoxMDREQjAwMDAyMTIwNjAwMDAwMDAwMDEwMjEyMDY2QzAwMDAwMDAxNTEKKzoxMDREQzAwMDAyMTIwMUIwMDAwMDAwMDEwMjEyMDdEODAwMDAwMDAzMjcKKzoxMDRERDAwMDAyMTIwN0Q4MDAwMDAwMDMwMjEyMDdEODAwMDAwMDAzRTcKKzoxMDRERTAwMDAyMTIwN0Q4MDAwMDAwMDMwMjEyMDdEODAwMDAwMDAzRDcKKzoxMDRERjAwMDAyMTIwN0Q4MDAwMDAwMDMwMjEyMDdEODAwMDAwMDAzQzcKKzoxMDRFMDAwMDAyMTIwN0Q4MDAwMDAwMDMwNjAwQTAwMDAwMDAwMDBDRkEKKzoxMDRFMTAwMDAyMDBBMDUwMDAwMDAwMDAwMjAwQTA1NDAwMDAwMDAwQUEKKzoxMDRFMjAwMDAyMDBBMEVDNTU1NDAwMDAwMjAwQTBGMDU1NTU1NTU1NjUKKzoxMDRFMzAwMDAyMDBBMEY0MDAwMDU1NTUwMjAwQTBGOEYwMDAwMDAwQTgKKzoxMDRFNDAwMDAyMDBBMEZDNTU1NDAwMDAwMjAwQTEwMDU1NTU1NTU1MjQKKzoxMDRFNTAwMDAyMDBBMTA0MDAwMDU1NTUwMjAwQTEwOEYwMDAwMDAwNjYKKzoxMDRFNjAwMDAyMDBBMTlDMDAwMDAwMDAwMjAwQTFBMDAwMDEwMDAwQkYKKzoxMDRFNzAwMDAyMDBBMUE0MDAwMDUwMTQwMjAwQTFBODAwMDAwMDAwM0MKKzoxMDRFODAwMDAyMDBBNkE4MDAwMDAwMDAwMjAwQTZBQzAwMDAwMDAwN0UKKzoxMDRFOTAwMDAyMDBBNkQwMDAwMDAwMDAwMjAwQTQ1QzAwMDAwQzAwOEMKKzoxMDRFQTAwMDAyMDBBNjFDMDAwMDAwMDMwMjAwQTA3MEZGRjU1RkZGRDcKKzoxMDRFQjAwMDAyMDBBMDc0MDAwMEZGRkYwMjAwQTA3OEYwMDAwM0UwRjEKKzoxMDRFQzAwMDAyMDBBMDdDMDAwMDAwMDAwMjAwQTA4MDAwMDBBMDAwMDIKKzoxMDRFRDAwMDA2MDBBMDg0MDAwMDAwMDUwMjAwQTA5ODBGRTAwMDAwN0EKKzoxMDRFRTAwMDA2MDBBMDlDMDAwMDAwMDcwMjAwQTBCODAwMDAwNDAwMUIKKzoxMDRFRjAwMDA2MDBBMEJDMDAwMDAwMDMwMjAwQTBDODAwMDAxMDAwRDMKKzoxMDRGMDAwMDA2MDBBMENDMDAwMDAwMDMwMjAwQTBEODAwMDA0MDAwNzIKKzoxMDRGMTAwMDA2MDBBMERDMDAwMDAwMDMwMjAwQTBFODAwMDEwMDAwODEKKzoxMDRGMjAwMDA2MDBBMjJDMDAwMDAwMDQwMjAwQTY4ODAwMDAwMEZDN0QKKzoxMDRGMzAwMDA2MDBBNjhDMDAwMDAwMDcwMjAwQTZGNDAwMDAwMDAwOTYKKzoxMDRGNDAwMDAyMDBBMTBDRkY1QzAwMDAwMjAwQTExMEZGRjU1RkZGNTIKKzoxMDRGNTAwMDAyMDBBMTE0MDAwMEZGRkYwMjAwQTExOEYwMDAwM0UwMEUKKzoxMDRGNjAwMDAyMDBBMTFDMDAwMDAwMDAwMjAwQTEyMDAwMDBBMDAwMUYKKzoxMDRGNzAwMDA2MDBBMTI0MDAwMDAwMDUwMjAwQTEzODBGRTAwMDAwOTcKKzoxMDRGODAwMDA2MDBBMTNDMDAwMDAwMDcwMjAwQTE1ODAwMDAwODAwMzQKKzoxMDRGOTAwMDA2MDBBMTVDMDAwMDAwMDMwMjAwQTE2ODAwMDAyMDAwRTAKKzoxMDRGQTAwMDA2MDBBMTZDMDAwMDAwMDMwMjAwQTE3ODAwMDA4MDAwNTAKKzoxMDRGQjAwMDA2MDBBMTdDMDAwMDAwMDMwMjAwQTE4ODAwMDIwMDAwOUUKKzoxMDRGQzAwMDA2MDBBMjNDMDAwMDAwMDQwMjAwQTZCMDAwMDAwMEZDQTUKKzoxMDRGRDAwMDA2MDBBNkI0MDAwMDAwMDcwMjAwQTZGODAwMDAwMDAwQ0EKKzoxMDRGRTAwMDAyMDBBMDMwMDAwMDAwMDAwMjAwQTAzNDAwMDAwMDAwMTkKKzoxMDRGRjAwMDAyMDBBMDM4MDAwMDAwMDAwMjAwQTAzQzAwMDAwMDAwRjkKKzoxMDUwMDAwMDAyMDBBMDQwMDAwMDAwMDAwMjAwQTA0NDAwMDAwMDAwRDgKKzoxMDUwMTAwMDAyMDBBMDQ4MDAwMDAwMDAwMjAwQTA0QzAwMDAwMDAwQjgKKzoxMDUwMjAwMDAyMDA5MEM0MDAwMEUwMDAwMjAwOTBDQzAwMDBGMzAwRjkKKzoxMDUwMzAwMDAyMDA5MEQ0MDAwMDAwMDMwMjAwOTFBMDAwMDAwMDAxRDMKKzoxMDUwNDAwMDA2MDA5MTcwMDAwMDAwMDMwMjAwOTBFQzAwMDA2MDAwNzgKKzoxMDUwNTAwMDAyMDA5MEY0MDAwMDczMDAwMjAwOTBGQzAwMDAwMDAzQzYKKzoxMDUwNjAwMDAyMDA5MUE4MDAwMDAwMDEwNjAwOTE4ODAwMDAwMDAzRTIKKzoxMDUwNzAwMDAyMDA5MTAwMDAwMDQwMDAwMjAwOTEwODAwMDA1MzAwNkYKKzoxMDUwODAwMDAyMDA5MTEwMDAwMDAwMDQwMjAwOTFBQzAwMDAwMDAxMzkKKzoxMDUwOTAwMDA2MDA5MTk0MDAwMDAwMDIwMjAwOTE5QzAwMDAwMDAxQjMKKzoxMDUwQTAwMDAyMDA5MEQ4MDAwMDYwMDAwMjAwOTBFMDAwMDA3MzAwNTEKKzoxMDUwQjAwMDAyMDA5MEU4MDAwMDAwMDMwMjAwOTFBNDAwMDAwMDAxM0IKKzoxMDUwQzAwMDAyMDA5MTdDMDAwMDAwMDEwMjAwOTE4MDAwMDAwMDAxQkMKKzoxMDUwRDAwMDAyMDA5MTg0MDAwMDAwMDAwMjAwOTEyODAwMDAwMzAwRkIKKzoxMDUwRTAwMDAyMDA5MTZDMDAwM0YwMDgwMjAwOTEyQzAwMDAwMzAwMDQKKzoxMDUwRjAwMDAyMDA5MTMwMDAwMDAzMDAwMjAwOTEzNDAwMDAwMzAwMjAKKzoxMDUxMDAwMDAyMDA5MTM4MDAwMDAzMDAwMjAwOTEzQzAwMDAwMzAwRkYKKzoxMDUxMTAwMDAyMDA5MTQwMDAwMDAzMDAwMjAwOTQyQzAwMDAwMDAxRjYKKzoxMDUxMjAwMDAyMDA5NDMwMDAwMDAwMDEwMjAwOTQzNDAwMDAwMDAxRUQKKzoxMDUxMzAwMDAyMDA5NDJDMDAwMDAwMDEwMjAwOTQzMDAwMDAwMDAxRTUKKzoxMDUxNDAwMDAyMDA5NDM0MDAwMDAwMDEwMjAwOTQyQzAwMDAwMDAxRDEKKzoxMDUxNTAwMDAyMDA5NDMwMDAwMDAwMDEwMjAwOTQzNDAwMDAwMDAxQkQKKzoxMDUxNjAwMDAyMDA5NDJDMDAwMDAwMDEwMjAwOTQzMDAwMDAwMDAxQjUKKzoxMDUxNzAwMDAyMDA5NDM0MDAwMDAwMDEwMjAwOTQyQzAwMDAwMDAxQTEKKzoxMDUxODAwMDAyMDA5NDMwMDAwMDAwMDEwMjAwOTQzNDAwMDAwMDAxOEQKKzoxMDUxOTAwMDAyMDA5NDJDMDAwMDAwMDEwMjAwOTQzMDAwMDAwMDAxODUKKzoxMDUxQTAwMDAyMDA5NDM0MDAwMDAwMDEwMjAwOTQyQzAwMDAwMDAxNzEKKzoxMDUxQjAwMDAyMDA5NDMwMDAwMDAwMDEwMjAwOTQzNDAwMDAwMDAxNUQKKzoxMDUxQzAwMDAyMDA5NDJDMDAwMDAwMDEwMjAwOTQzMDAwMDAwMDAxNTUKKzoxMDUxRDAwMDAyMDA5NDM0MDAwMDAwMDEwMjEzMDA3ODAwMDAwMDMwNDcKKzoxMDUxRTAwMDAyMTMwMDNDMDAwMDYxQTgwNjEzMDEwODAwMDAwMDAzNDAKKzoxMDUxRjAwMDAyMTMwMTA0MDAwMDAwMDAwMjEzMDEzNDAwMDAwMDAwNEIKKzoxMDUyMDAwMDA2MTMwMTA4MDAwMDAwMDMwMjEzMDEwNDAwMDAwMDAwNUYKKzoxMDUyMTAwMDAyMTMwMTM0MDAwMDAwMDAwNjEzMDEwODAwMDAwMDAzMUYKKzoxMDUyMjAwMDAyMTMwMTA0MDAwMDAwMDAwMjEzMDEzNDAwMDAwMDAwMUEKKzoxMDUyMzAwMDA2MTMwMTA4MDAwMDAwMDMwMjEzMDEwNDAwMDAwMDAwMkYKKzoxMDUyNDAwMDAyMTMwMTM0MDAwMDAwMDAwNjEzMDEwODAwMDAwMDAzRUYKKzoxMDUyNTAwMDAyMTMwMTA0MDAwMDAwMDAwMjEzMDEzNDAwMDAwMDAwRUEKKzoxMDUyNjAwMDA2MTMwMTA4MDAwMDAwMDMwMjEzMDEwNDAwMDAwMDAwRkYKKzoxMDUyNzAwMDAyMTMwMTM0MDAwMDAwMDAwNjEzMDEwODAwMDAwMDAzQkYKKzoxMDUyODAwMDAyMTMwMTA0MDAwMDAwMDAwMjEzMDEzNDAwMDAwMDAwQkEKKzoxMDUyOTAwMDA2MTMwMTA4MDAwMDAwMDMwMjEzMDEwNDAwMDAwMDAwQ0YKKzoxMDUyQTAwMDAyMTMwMTM0MDAwMDAwMDAwMjExMDBCODAwMDAwMDAxRTgKKzoxMDUyQjAwMDAyMTZFNkU4MDAwMDIwMDAwMjE2RTZFQzAwMDAyMDAwREUKKzoxMDUyQzAwMDAyMTZFNkYwMDAwMDY1NTUwMjE2RTZGNDAwMDA2NTU1OEEKKzoxMDUyRDAwMDAyMTY4MTUwMDAwMDAwMDAwMjE2ODE3NDAwMDAwMDAxRDcKKzoxMDUyRTAwMDAyMTY4MTc4MDAwMDAwMDEwMjE2ODE3QzAwMDAwMDAxOTYKKzoxMDUyRjAwMDAyMTY4MTgwMDAwMDAwMDEwMjE2ODE4NDAwMDAwMDAxNzYKKzoxMDUzMDAwMDAyMTY4MTg4MDAwMDAwMDEwMjE2ODFCNDAwMDAwMDAxMkQKKzoxMDUzMTAwMDAyMTY4MUI4MDAwMDAwMDEwMjE2ODFCQzAwMDAwMDAxRTUKKzoxMDUzMjAwMDAyMTY4MUMwMDAwMDAwMDEwMjE2ODFDNDAwMDAwMDAxQzUKKzoxMDUzMzAwMDAyMTY4MUM4MDAwMDAwMDEwMjE2ODExMDAwMDAwMDAwNjIKKzoxMDUzNDAwMDAyMTY4MjQwMDBCRjAwQkYwNjE2ODI0NDAwMDAwMDAyMjEKKzoxMDUzNTAwMDAyMTY4MjRDMDBCRjAwQkYwMjE2RTZDNDAwMDAwMDAxMjYKKzoxMDUzNjAwMDAyMTZFNkM4MDAwMDAwMDMwMjE2RTc5NDAwMDAwMDAwRTEKKzoxMDUzNzAwMDA0MkFDRjQwMDAwQTBDNTYwMDAwMDAwMDAwMDAwMDAwODQKKzoxMDUzODAwMDAwMDAwMDM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTkKKzoxMDUzOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQKKzoxMDUzQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzQwMDM1OTQKKzoxMDUzQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUQKKzoxMDUzQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREQKKzoxMDUzRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM1MDA2MDAwMDAwMDAwMzgKKzoxMDUzRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkQKKzoxMDUzRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUQKKzoxMDU0MDAwMDAwMDAwMDAwMDA2MDAwOTEwMDAwMDAwMDAwMDAwMDAwQUIKKzoxMDU0MTAwMDAwOTEwMDk1MDA5NTAwOTkwMDk5MDA5RDAwOUQwMEExQzQKKzoxMDU0MjAwMDAwQTEwMEE1MDBBNTAwQTkwMEE5MDBBRDAwQUQwMEIxMzQKKzoxMDU0MzAwMDAwQjEwMEI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYKKzoxMDU0NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUMKKzoxMDU0NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjUwMzExODMKKzoxMDU0NjAwMDAzMTEwMzFCMDMxQjAzMjUwMzI1MDMyQzAzMkMwMzMzMDgKKzoxMDU0NzAwMDAzMzMwMzNBMDMzQTAzNDEwMzQxMDM0ODAzNDgwMzRGMEMKKzoxMDU0ODAwMDAzNEYwMzU2MDM1NjAzNUQwMDAwMDAwMDAwMDAwMDAwQjgKKzoxMDU0OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMKKzoxMDU0QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkMKKzoxMDU0QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUMKKzoxMDU0QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREMKKzoxMDU0RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0MKKzoxMDU0RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkMKKzoxMDU0RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUMKKzoxMDU1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUIKKzoxMDU1MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEIKKzoxMDU1MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0IKKzoxMDU1MzAwMDAwMDAwMDAwMDAwMDAwMDAwMzVEMDM1RTAwMDAwMDAwQUEKKzoxMDU1NDAwMDAwMDAwMDAwMDM1RTAzNUYwMzVGMDM2MDAzNjAwMzYxMEMKKzoxMDU1NTAwMDAzNjEwMzYyMDM2MjAzNjMwMzYzMDM2NDAzNjQwMzY1MUIKKzoxMDU1NjAwMDAzNjUwMzY2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkEKKzoxMDU1NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkIKKzoxMDU1ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUIKKzoxMDU1OTAwMDAzNjYwMzZEMDM2RDAzNzkwMzc5MDM4NTAwMDAwMDAwNDIKKzoxMDU1QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkIKKzoxMDU1QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUIKKzoxMDU1QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREIKKzoxMDU1RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0IKKzoxMDU1RTAwMDAwMDAwMDAwMDAwMDAwMDAwMzg1MDM4NjAwMDAwMDAwQUEKKzoxMDU1RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUIKKzoxMDU2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUEKKzoxMDU2MTAwMDAwMDAwMDAwMDM4NjAzQjEwMDAwMDAwMDAwMDAwMDAwNEQKKzoxMDU2MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0EKKzoxMDU2MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkEKKzoxMDU2NDAwMDAzQjEwM0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzMKKzoxMDU2NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEEKKzoxMDU2NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRTAwNDBGNDQKKzoxMDU2NzAwMDAwMDAwMDAwMDAwMDAwMDAwNDBGMDQxNjA0MTYwNDFEQzIKKzoxMDU2ODAwMDA0MUQwNDI0MDQyNDA0MkIwNDJCMDQzMjA0MzIwNDM5QTIKKzoxMDU2OTAwMDA0MzkwNDQwMDQ0MDA0NDcwNDQ3MDQ3QTAwMDAwMDAwMzEKKzoxMDU2QTAwMDAwMDAwMDAwMDQ3QTA0N0UwNDdFMDQ4MjA0ODIwNDg2RTIKKzoxMDU2QjAwMDA0ODYwNDhBMDQ4QTA0OEUwNDhFMDQ5MjA0OTIwNDk2NUEKKzoxMDU2QzAwMDA0OTYwNDlBMDQ5QTA0RUEwNEVBMDUwMDA1MDAwNTE2MDMKKzoxMDU2RDAwMDA1MTYwNTE4MDUxODA1MUEwNTFBMDUxQzA1MUMwNTFFRDIKKzoxMDU2RTAwMDA1MUUwNTIwMDUyMDA1MjIwNTIyMDUyNDA1MjQwNTI2ODIKKzoxMDU2RjAwMDA1MjYwNjkzMDAwMDAwMDAwMDAwMDAwMDA2OTMwNjk4QUYKKzoxMDU3MDAwMDA2OTgwNjlEMDY5RDA2QTIwNkEyMDZBNzA2QTcwNkFDNTkKKzoxMDU3MTAwMDA2QUMwNkIxMDZCMTA2QjYwNkI2MDZCQjA2QkIwNkJDQUQKKzoxMDU3MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzkKKzoxMDU3MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjkKKzoxMDU3NDAwMDAwMDAwMDAwMDAwMDAwMDAwNkJDMDZFMDAwMDAwMDAwQjEKKzoxMDU3NTAwMDAwMDAwMDAwMDZFMDA2RTIwNkUyMDZFNDA2RTQwNkU2RDMKKzoxMDU3NjAwMDA2RTYwNkU4MDZFODA2RUEwNkVBMDZFQzA2RUMwNkVFQjkKKzoxMDU3NzAwMDA2RUUwNkYwMDZGMDA3MDUwNzA1MDcwODA3MDgwNzBCMDEKKzoxMDU3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTkKKzoxMDU3OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkKKzoxMDU3QTAwMDA3MEIwNzRGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTEKKzoxMDU3QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTkKKzoxMDU3QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NEYwN0UxOUIKKzoxMDU3RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzkKKzoxMDU3RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjkKKzoxMDU3RjAwMDAwMDAwMDAwMDAwMDAwMDAwN0UxMDdFRjAwMDAwMDAwQ0IKKzoxMDU4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTgKKzoxMDU4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODgKKzoxMDU4MjAwMDAwMDAwMDAwMDdFRjA4MkMwMDAwMDAwMDAwMDAwMDAwNEUKKzoxMDU4MzAwMDA4MkMwODM1MDgzNTA4M0UwODNFMDg0NzA4NDcwODUwMzgKKzoxMDU4NDAwMDA4NTAwODU5MDg1OTA4NjIwODYyMDg2QjA4NkIwODc0MDgKKzoxMDU4NTAwMDA4NzQwOEQ1MDhENTA4RUEwOEVBMDhGRjA4RkYwOTAyMTUKKzoxMDU4NjAwMDA5MDIwOTA1MDkwNTA5MDgwOTA4MDkwQjA5MEIwOTBFQjAKKzoxMDU4NzAwMDA5MEUwOTExMDkxMTA5MTQwOTE0MDkxNzA5MTcwOTIwM0EKKzoxMDU4ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTgKKzoxMDU4OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgKKzoxMDU4QTAwMDAwMDAwMDAwMDAwMDAwMDAwOTIwMDkyNjAwMDAwMDAwQTAKKzoxMDU4QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTgKKzoxMDU4QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDgKKzoxMDU4RDAwMDAwMDAwMDAwMDkyNjA5MkIwMDAwMDAwMDAwMDAwMDAwNjUKKzoxMDU4RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjgKKzoxMDU4RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTgKKzoxMDU5MDAwMDA5MkIwOTMzMDAwMDAwMDAwMDAwMDAwMDA5MzMwOTM0QUUKKzoxMDU5MTAwMDA5MzQwOTM1MDkzNTA5MzYwOTM2MDkzNzA5MzcwOTM4OEYKKzoxMDU5MjAwMDA5MzgwOTM5MDkzOTA5M0EwOTNBMDkzQjAwMDAwMDAwRTgKKzoxMDU5MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjcKKzoxMDU5NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTcKKzoxMDU5NTAwMDAwMDAwMDAwMDAwMDAwMDAwOTNCMDlBQzAwMDAwMDAwNEUKKzoxMDU5NjAwMDAwMDAwMDAwMDlBQzA5QUQwOUFEMDlBRTA5QUUwOUFGRjAKKzoxMDU5NzAwMDA5QUYwOUIwMDlCMDA5QjEwOUIxMDlCMjA5QjIwOUIzNTcKKzoxMDU5ODAwMDA5QjMwOUI0MDlCNDA5QzgwOUM4MDlEQjA5REIwOUVGN0YKKzoxMDU5OTAwMDA5RUYwOUYwMDlGMDA5RjEwOUYxMDlGMjA5RjIwOUYzMzcKKzoxMDU5QTAwMDA5RjMwOUY0MDlGNDA5RjUwOUY1MDlGNjA5RjYwOUY3MDcKKzoxMDU5QjAwMDA5RjcwQTE2MDAwMDAwMDAwMDAwMDAwMDBBMTYwQTE5ODQKKzoxMDU5QzAwMDBBMTkwQTFDMEExQzBBMUYwQTFGMEEyMjBBMjIwQTI1OEYKKzoxMDU5RDAwMDBBMjUwQTI4MEEyODBBMkIwQTJCMEEyRTBBMkUwQTMwMjAKKzoxMDU5RTAwMDAwMDAwMDAwMDAwMDAwMDAwQTMwMEEzMzBBMzMwQTM2QzMKKzoxMDU5RjAwMDBBMzYwQTM5MEEzOTBBM0MwQTNDMEEzRjBBM0YwQTQyNzcKKzoxMDVBMDAwMDBBNDIwQTQ1MEE0NTBBNDgwQTQ4MEE0OTAwMDAwMDAwQjUKKzoxMDVBMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODYKKzoxMDVBMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzYKKzoxMDVBMzAwMDAwMDAwMDAwMEE0OTBBNjEwMDAwMDAwMDAwMDAwMDAwQTgKKzoxMDVBNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTYKKzoxMDVBNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDYKKzoxMDVBNjAwMDBBNjEwQTYyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUYKKzoxMDVBNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDVBODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDVBOTAwMDAwMDEwMDAwMDAwMjA3MDAwMDAzMEUwMDAwMDQxNTAwRDIKKzoxMDVBQTAwMDAwMDUxQzAwMDAwNjIzMDAwMDA3MkEwMDAwMDgzMTAwNDIKKzoxMDVBQjAwMDAwMDkzODAwMDAwQTNGMDAwMDBCNDYwMDAwMEM0RDAwQjIKKzoxMDVBQzAwMDAwMEQ1NDAwMDAwRTVCMDAwMDBGNjIwMDAwMTA2OTAwMjIKKzoxMDVBRDAwMDAwMTE3MDAwMDAxMjc3MDAwMDEzN0UwMDAwMTQ4NTAwOTIKKzoxMDVBRTAwMDAwMTU4QzAwMDAxNjkzMDAwMDE3OUEwMDAwMThBMTAwMDIKKzoxMDVBRjAwMDAwMTlBODAwMDAxQUFGMDAwMDFCQjYwMDAwMUNCRDAwNzIKKzoxMDVCMDAwMDAwMURDNDAwMDAxRUNCMDAwMDFGRDIwMDAwMDBEOTAwMDEKKzoxMDVCMTAwMDAwMDAyMDAwMDAwMDQwMDAwMDAwNjAwMDAwMDA4MDAwNDUKKzoxMDVCMjAwMDAwMDBBMDAwMDAwMEMwMDAwMDAwRTAwMDAwMDEwMDAwMzQKKzoxMDVCMzAwMDAwMDEyMDAwMDAwMTQwMDAwMDAxNjAwMDAwMDE4MDAwMjEKKzoxMDVCNDAwMDAwMDFBMDAwMDAwMUMwMDAwMDAxRTAwMDAwMDIwMDAwMTAKKzoxMDVCNTAwMDAwMDIyMDAwMDAwMjQwMDAwMDAyNjAwMDAwMDI4MDAwRkQKKzoxMDVCNjAwMDAwMDJBMDAwMDAwMkMwMDAwMDAyRTAwMDAwMDMwMDAwRUMKKzoxMDVCNzAwMDAwMDMyMDAwMDAwMzQwMDAwMDAzNjAwMDAwMDM4MDAwRDkKKzoxMDVCODAwMDAwMDNBMDAwMDAwM0MwMDAwMDAzRTAwMDAwMDQwMDAwQzgKKzoxMDVCOTAwMDAwMDQyMDAwMDAwNDQwMDAwMDA0NjAwMDAwMDQ4MDAwQjUKKzoxMDVCQTAwMDAwMDRBMDAwMDAwNEMwMDAwMDA0RTAwMDAwMDUwMDAwQTQKKzoxMDVCQjAwMDAwMDUyMDAwMDAwNTQwMDAwMDA1NjAwMDAwMDU4MDAwOTEKKzoxMDVCQzAwMDAwMDVBMDAwMDAwNUMwMDAwMDA1RTAwMDAwMDYwMDAwODAKKzoxMDVCRDAwMDAwMDYyMDAwMDAwNjQwMDAwMDA2NjAwMDAwMDY4MDAwNkQKKzoxMDVCRTAwMDAwMDZBMDAwMDAwNkMwMDAwMDA2RTAwMDAwMDcwMDAwNUMKKzoxMDVCRjAwMDAwMDcyMDAwMDAwNzQwMDAwMDA3NjAwMDAwMDc4MDAwNDkKKzoxMDVDMDAwMDAwMDdBMDAwMDAwN0MwMDAwMDA3RTAwMDAwMDgwMDAwMzcKKzoxMDVDMTAwMDAwMDgyMDAwMDAwODQwMDAwMDA4NjAwMDAwMDg4MDAwMjQKKzoxMDVDMjAwMDAwMDhBMDAwMDAwOEMwMDAwMDA4RTAwMDAwMDkwMDAwMTMKKzoxMDVDMzAwMDAwMDkyMDAwMDAwOTQwMDAwMDA5NjAwMDAwMDk4MDAwMDAKKzoxMDVDNDAwMDAwMDlBMDAwMDAwOUMwMDAwMDA5RTAwMDAwMEEwMDAwRUYKKzoxMDVDNTAwMDAwMEEyMDAwMDAwQTQwMDAwMDBBNjAwMDAwMEE4MDAwREMKKzoxMDVDNjAwMDAwMEFBMDAwMDAwQUMwMDAwMDBBRTAwMDAwMEIwMDAwQ0IKKzoxMDVDNzAwMDAwMEIyMDAwMDAwQjQwMDAwMDBCNjAwMDAwMEI4MDAwQjgKKzoxMDVDODAwMDAwMEJBMDAwMDAwQkMwMDAwMDBCRTAwMDAwMEMwMDAwQTcKKzoxMDVDOTAwMDAwMEMyMDAwMDAwQzQwMDAwMDBDNjAwMDAwMEM4MDAwOTQKKzoxMDVDQTAwMDAwMENBMDAwMDAwQ0MwMDAwMDBDRTAwMDAwMEQwMDAwODMKKzoxMDVDQjAwMDAwMEQyMDAwMDAwRDQwMDAwMDBENjAwMDAwMEQ4MDAwNzAKKzoxMDVDQzAwMDAwMERBMDAwMDAwREMwMDAwMDBERTAwMDAwMEUwMDAwNUYKKzoxMDVDRDAwMDAwMEUyMDAwMDAwRTQwMDAwMDBFNjAwMDAwMEU4MDAwNEMKKzoxMDVDRTAwMDAwMEVBMDAwMDAwRUMwMDAwMDBFRTAwMDAwMEYwMDAwM0IKKzoxMDVDRjAwMDAwMEYyMDAwMDAwRjQwMDAwMDBGNjAwMDAwMEY4MDAwMjgKKzoxMDVEMDAwMDAwMEZBMDAwMDAwRkMwMDAwMDBGRTAwMDAwMTAwMDAwMTYKKzoxMDVEMTAwMDAwMTAyMDAwMDAxMDQwMDAwMDEwNjAwMDAwMTA4MDAwMDMKKzoxMDVEMjAwMDAwMTBBMDAwMDAxMEMwMDAwMDEwRTAwMDAwMTEwMDAwRjIKKzoxMDVEMzAwMDAwMTEyMDAwMDAxMTQwMDAwMDExNjAwMDAwMTE4MDAwREYKKzoxMDVENDAwMDAwMTFBMDAwMDAxMUMwMDAwMDExRTAwMDAwMTIwMDAwQ0UKKzoxMDVENTAwMDAwMTIyMDAwMDAxMjQwMDAwMDEyNjAwMDAwMTI4MDAwQkIKKzoxMDVENjAwMDAwMTJBMDAwMDAxMkMwMDAwMDEyRTAwMDAwMTMwMDAwQUEKKzoxMDVENzAwMDAwMTMyMDAwMDAxMzQwMDAwMDEzNjAwMDAwMTM4MDAwOTcKKzoxMDVEODAwMDAwMTNBMDAwMDAxM0MwMDAwMDEzRTAwMDAwMTQwMDAwODYKKzoxMDVEOTAwMDAwMTQyMDAwMDAxNDQwMDAwMDE0NjAwMDAwMTQ4MDAwNzMKKzoxMDVEQTAwMDAwMTRBMDAwMDAxNEMwMDAwMDE0RTAwMDAwMTUwMDAwNjIKKzoxMDVEQjAwMDAwMTUyMDAwMDAxNTQwMDAwMDE1NjAwMDAwMTU4MDAwNEYKKzoxMDVEQzAwMDAwMTVBMDAwMDAxNUMwMDAwMDE1RTAwMDAwMTYwMDAwM0UKKzoxMDVERDAwMDAwMTYyMDAwMDAxNjQwMDAwMDE2NjAwMDAwMTY4MDAwMkIKKzoxMDVERTAwMDAwMTZBMDAwMDAxNkMwMDAwMDE2RTAwMDAwMTcwMDAwMUEKKzoxMDVERjAwMDAwMTcyMDAwMDAxNzQwMDAwMDE3NjAwMDAwMTc4MDAwMDcKKzoxMDVFMDAwMDAwMTdBMDAwMDAxN0MwMDAwMDE3RTAwMDAwMTgwMDAwRjUKKzoxMDVFMTAwMDAwMTgyMDAwMDAxODQwMDAwMDE4NjAwMDAwMTg4MDAwRTIKKzoxMDVFMjAwMDAwMThBMDAwMDAxOEMwMDAwMDE4RTAwMDAwMTkwMDAwRDEKKzoxMDVFMzAwMDAwMTkyMDAwMDAxOTQwMDAwMDE5NjAwMDAwMTk4MDAwQkUKKzoxMDVFNDAwMDAwMTlBMDAwMDAxOUMwMDAwMDE5RTAwMDAwMUEwMDAwQUQKKzoxMDVFNTAwMDAwMUEyMDAwMDAxQTQwMDAwMDFBNjAwMDAwMUE4MDAwOUEKKzoxMDVFNjAwMDAwMUFBMDAwMDAxQUMwMDAwMDFBRTAwMDAwMUIwMDAwODkKKzoxMDVFNzAwMDAwMUIyMDAwMDAxQjQwMDAwMDFCNjAwMDAwMUI4MDAwNzYKKzoxMDVFODAwMDAwMUJBMDAwMDAxQkMwMDAwMDFCRTAwMDAwMUMwMDAwNjUKKzoxMDVFOTAwMDAwMUMyMDAwMDAxQzQwMDAwMDFDNjAwMDAwMUM4MDAwNTIKKzoxMDVFQTAwMDAwMUNBMDAwMDAxQ0MwMDAwMDFDRTAwMDAwMUQwMDAwNDEKKzoxMDVFQjAwMDAwMUQyMDAwMDAxRDQwMDAwMDFENjAwMDAwMUQ4MDAwMkUKKzoxMDVFQzAwMDAwMURBMDAwMDAxREMwMDAwMDFERTAwMDAwMUUwMDAwMUQKKzoxMDVFRDAwMDAwMUUyMDAwMDAxRTQwMDAwMDFFNjAwMDAwMUU4MDAwMEEKKzoxMDVFRTAwMDAwMUVBMDAwMDAxRUMwMDAwMDFFRTAwMDAwMUYwMDAwRjkKKzoxMDVFRjAwMDAwMUYyMDAwMDAxRjQwMDAwMDFGNjAwMDAwMUY4MDAwRTYKKzoxMDVGMDAwMDAwMUZBMDAwMDAxRkMwMDAwMDFGRTAwMDAwMjAwMDAwRDQKKzoxMDVGMTAwMDAwMjAyMDAwMDAyMDQwMDAwMDIwNjAwMDAwMjA4MDAwQzEKKzoxMDVGMjAwMDAwMjBBMDAwMDAyMEMwMDAwMDIwRTAwMDAwMjEwMDAwQjAKKzoxMDVGMzAwMDAwMjEyMDAwMDAyMTQwMDAwMDIxNjAwMDAwMjE4MDAwOUQKKzoxMDVGNDAwMDAwMjFBMDAwMDAyMUMwMDAwMDIxRTAwMDAwMjIwMDAwOEMKKzoxMDVGNTAwMDAwMjIyMDAwMDAyMjQwMDAwMDIyNjAwMDAwMjI4MDAwNzkKKzoxMDVGNjAwMDAwMjJBMDAwMDAyMkMwMDAwMDIyRTAwMDAwMjMwMDAwNjgKKzoxMDVGNzAwMDAwMjMyMDAwMDAyMzQwMDAwMDIzNjAwMDAwMjM4MDAwNTUKKzoxMDVGODAwMDAwMjNBMDAwMDAyM0MwMDAwMDIzRTAwMDAwMjQwMDAwNDQKKzoxMDVGOTAwMDAwMjQyMDAwMDAyNDQwMDAwMDI0NjAwMDAwMjQ4MDAwMzEKKzoxMDVGQTAwMDAwMjRBMDAwMDAyNEMwMDAwMDI0RTAwMDAwMjUwMDAwMjAKKzoxMDVGQjAwMDAwMjUyMDAwMDAyNTQwMDAwMDI1NjAwMDAwMjU4MDAwMEQKKzoxMDVGQzAwMDAwMjVBMDAwMDAyNUMwMDAwMDI1RTAwMDAwMjYwMDAwRkMKKzoxMDVGRDAwMDAwMjYyMDAwMDAyNjQwMDAwMDI2NjAwMDAwMjY4MDAwRTkKKzoxMDVGRTAwMDAwMjZBMDAwMDAyNkMwMDAwMDI2RTAwMDAwMjcwMDAwRDgKKzoxMDVGRjAwMDAwMjcyMDAwMDAyNzQwMDAwMDI3NjAwMDAwMjc4MDAwQzUKKzoxMDYwMDAwMDAwMjdBMDAwMDAyN0MwMDAwMDI3RTAwMDAwMjgwMDAwQjMKKzoxMDYwMTAwMDAwMjgyMDAwMDAyODQwMDAwMDI4NjAwMDAwMjg4MDAwQTAKKzoxMDYwMjAwMDAwMjhBMDAwMDAyOEMwMDAwMDI4RTAwMDAwMjkwMDAwOEYKKzoxMDYwMzAwMDAwMjkyMDAwMDAyOTQwMDAwMDI5NjAwMDAwMjk4MDAwN0MKKzoxMDYwNDAwMDAwMjlBMDAwMDAyOUMwMDAwMDI5RTAwMDAwMkEwMDAwNkIKKzoxMDYwNTAwMDAwMkEyMDAwMDAyQTQwMDAwMDJBNjAwMDAwMkE4MDAwNTgKKzoxMDYwNjAwMDAwMkFBMDAwMDAyQUMwMDAwMDJBRTAwMDAwMkIwMDAwNDcKKzoxMDYwNzAwMDAwMkIyMDAwMDAyQjQwMDAwMDJCNjAwMDAwMkI4MDAwMzQKKzoxMDYwODAwMDAwMkJBMDAwMDAyQkMwMDAwMDJCRTAwMDAwMkMwMDAwMjMKKzoxMDYwOTAwMDAwMkMyMDAwMDAyQzQwMDAwMDJDNjAwMDAwMkM4MDAwMTAKKzoxMDYwQTAwMDAwMkNBMDAwMDAyQ0MwMDAwMDJDRTAwMDAwMkQwMDAwRkYKKzoxMDYwQjAwMDAwMkQyMDAwMDAyRDQwMDAwMDJENjAwMDAwMkQ4MDAwRUMKKzoxMDYwQzAwMDAwMkRBMDAwMDAyREMwMDAwMDJERTAwMDAwMkUwMDAwREIKKzoxMDYwRDAwMDAwMkUyMDAwMDAyRTQwMDAwMDJFNjAwMDAwMkU4MDAwQzgKKzoxMDYwRTAwMDAwMkVBMDAwMDAyRUMwMDAwMDJFRTAwMDAwMkYwMDAwQjcKKzoxMDYwRjAwMDAwMkYyMDAwMDAyRjQwMDAwMDJGNjAwMDAwMkY4MDAwQTQKKzoxMDYxMDAwMDAwMkZBMDAwMDAyRkMwMDAwMDJGRTAwMDAwMzAwMDAwOTIKKzoxMDYxMTAwMDAwMzAyMDAwMDAzMDQwMDAwMDMwNjAwMDAwMzA4MDAwN0YKKzoxMDYxMjAwMDAwMzBBMDAwMDAzMEMwMDAwMDMwRTAwMDAwMzEwMDAwNkUKKzoxMDYxMzAwMDAwMzEyMDAwMDAzMTQwMDAwMDMxNjAwMDAwMzE4MDAwNUIKKzoxMDYxNDAwMDAwMzFBMDAwMDAzMUMwMDAwMDMxRTAwMDAwMzIwMDAwNEEKKzoxMDYxNTAwMDAwMzIyMDAwMDAzMjQwMDAwMDMyNjAwMDAwMzI4MDAwMzcKKzoxMDYxNjAwMDAwMzJBMDAwMDAzMkMwMDAwMDMyRTAwMDAwMzMwMDAwMjYKKzoxMDYxNzAwMDAwMzMyMDAwMDAzMzQwMDAwMDMzNjAwMDAwMzM4MDAwMTMKKzoxMDYxODAwMDAwMzNBMDAwMDAzM0MwMDAwMDMzRTAwMDAwMzQwMDAwMDIKKzoxMDYxOTAwMDAwMzQyMDAwMDAzNDQwMDAwMDM0NjAwMDAwMzQ4MDAwRUYKKzoxMDYxQTAwMDAwMzRBMDAwMDAzNEMwMDAwMDM0RTAwMDAwMzUwMDAwREUKKzoxMDYxQjAwMDAwMzUyMDAwMDAzNTQwMDAwMDM1NjAwMDAwMzU4MDAwQ0IKKzoxMDYxQzAwMDAwMzVBMDAwMDAzNUMwMDAwMDM1RTAwMDAwMzYwMDAwQkEKKzoxMDYxRDAwMDAwMzYyMDAwMDAzNjQwMDAwMDM2NjAwMDAwMzY4MDAwQTcKKzoxMDYxRTAwMDAwMzZBMDAwMDAzNkMwMDAwMDM2RTAwMDAwMzcwMDAwOTYKKzoxMDYxRjAwMDAwMzcyMDAwMDAzNzQwMDAwMDM3NjAwMDAwMzc4MDAwODMKKzoxMDYyMDAwMDAwMzdBMDAwMDAzN0MwMDAwMDM3RTAwMDAwMzgwMDAwNzEKKzoxMDYyMTAwMDAwMzgyMDAwMDAzODQwMDAwMDM4NjAwMDAwMzg4MDAwNUUKKzoxMDYyMjAwMDAwMzhBMDAwMDAzOEMwMDAwMDM4RTAwMDAwMzkwMDAwNEQKKzoxMDYyMzAwMDAwMzkyMDAwMDAzOTQwMDAwMDM5NjAwMDAwMzk4MDAwM0EKKzoxMDYyNDAwMDAwMzlBMDAwMDAzOUMwMDAwMDM5RTAwMDAwM0EwMDAwMjkKKzoxMDYyNTAwMDAwM0EyMDAwMDAzQTQwMDAwMDNBNjAwMDAwM0E4MDAwMTYKKzoxMDYyNjAwMDAwM0FBMDAwMDAzQUMwMDAwMDNBRTAwMDAwM0IwMDAwMDUKKzoxMDYyNzAwMDAwM0IyMDAwMDAzQjQwMDAwMDNCNjAwMDAwM0I4MDAwRjIKKzoxMDYyODAwMDAwM0JBMDAwMDAzQkMwMDAwMDNCRTAwMDAwM0MwMDAwRTEKKzoxMDYyOTAwMDAwM0MyMDAwMDAzQzQwMDAwMDNDNjAwMDAwM0M4MDAwQ0UKKzoxMDYyQTAwMDAwM0NBMDAwMDAzQ0MwMDAwMDNDRTAwMDAwM0QwMDAwQkQKKzoxMDYyQjAwMDAwM0QyMDAwMDAzRDQwMDAwMDNENjAwMDAwM0Q4MDAwQUEKKzoxMDYyQzAwMDAwM0RBMDAwMDAzREMwMDAwMDNERTAwMDAwM0UwMDAwOTkKKzoxMDYyRDAwMDAwM0UyMDAwMDAzRTQwMDAwMDNFNjAwMDAwM0U4MDAwODYKKzoxMDYyRTAwMDAwM0VBMDAwMDAzRUMwMDAwMDNFRTAwMDAwM0YwMDAwNzUKKzoxMDYyRjAwMDAwM0YyMDAwMDAzRjQwMDAwMDNGNjAwMDAwM0Y4MDAwNjIKKzoxMDYzMDAwMDAwM0ZBMDAwMDAzRkMwMDAwMDNGRTAwMDAwM0ZFMDAxNzAKKzoxMDYzMTAwMDAwMDAwMDAwMDAwMDAxRkYwMDAwMDIwMDAwMDA3RkY4MDQKKzoxMDYzMjAwMDAwMDA3RkY4MDAwMDBBOTAwMDAwMzUwMDAwMDAwMDAxMjYKKzoxMDYzMzAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwNUYKKzoxMDYzNDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwNEYKKzoxMDYzNTAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwM0YKKzoxMDYzNjAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMkYKKzoxMDYzNzAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMUYKKzoxMDYzODAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMEYKKzoxMDYzOTAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwRkYKKzoxMDYzQTAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwRUYKKzoxMDYzQjAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwREYKKzoxMDYzQzAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwQ0YKKzoxMDYzRDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwQkYKKzoxMDYzRTAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwQUYKKzoxMDYzRjAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwOUYKKzoxMDY0MDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwOEUKKzoxMDY0MTAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwN0UKKzoxMDY0MjAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwNkUKKzoxMDY0MzAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwNUUKKzoxMDY0NDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwNEUKKzoxMDY0NTAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwM0UKKzoxMDY0NjAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMkUKKzoxMDY0NzAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMUUKKzoxMDY0ODAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMEUKKzoxMDY0OTAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwRkUKKzoxMDY0QTAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwRUUKKzoxMDY0QjAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwREUKKzoxMDY0QzAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwQ0UKKzoxMDY0RDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwQkUKKzoxMDY0RTAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwQUUKKzoxMDY0RjAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwOUUKKzoxMDY1MDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwOEQKKzoxMDY1MTAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwN0QKKzoxMDY1MjAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwNkQKKzoxMDY1MzAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwNUQKKzoxMDY1NDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwNEQKKzoxMDY1NTAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwM0QKKzoxMDY1NjAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMkQKKzoxMDY1NzAwMDAwMDAwMDAwMTQwQUZGMDAwMDAwMDAwMTAwMDAwMDAwRkQKKzoxMDY1ODAwMDAwMjAxMDAxMDAwMDAwMDAwMTAwOTAwMDAwMDAwMTAwNDgKKzoxMDY1OTAwMDAwMDA5MDAyMDAwMDkwMDQwMDAwOTAwNjAwMDA5MDA4QTcKKzoxMDY1QTAwMDAwMDA5MDBBMDAwMDkwMEMwMDAwOTAwRTAwMDA5MDEwNzcKKzoxMDY1QjAwMDAwMDA5MDEyMDAwMDkwMTQwMDAwOTAxNjAwMDA5MDE4NDcKKzoxMDY1QzAwMDAwMDA5MDFBMDAwMDkwMUMwMDAwOTAxRTAwMDA5MDIwMTcKKzoxMDY1RDAwMDAwMDA5MDIyMDAwMDkwMjQwMDAwOTAyNjAwMDA5MDI4RTcKKzoxMDY1RTAwMDAwMDA5MDJBMDAwMDkwMkMwMDAwOTAyRTAwMDA5MDMwQjcKKzoxMDY1RjAwMDAwMDA5MDMyMDAwMDkwMzQwMDAwOTAzNjAwMDA5MDM4ODcKKzoxMDY2MDAwMDAwMDA5MDNBMDAwMDkwM0MwMDAwOTAzRTAwMDA5MDQwNTYKKzoxMDY2MTAwMDAwMDA5MDQyMDAwMDkwNDQwMDAwOTA0NjAwMDA5MDQ4MjYKKzoxMDY2MjAwMDAwMDA5MDRBMDAwMDkwNEMwMDAwOTA0RTAwMDA5MDUwRjYKKzoxMDY2MzAwMDAwMDA5MDUyMDAwMDkwNTQwMDAwOTA1NjAwMDA5MDU4QzYKKzoxMDY2NDAwMDAwMDA5MDVBMDAwMDkwNUMwMDAwOTA1RTAwMDA5MDYwOTYKKzoxMDY2NTAwMDAwMDA5MDYyMDAwMDkwNjQwMDAwOTA2NjAwMDA5MDY4NjYKKzoxMDY2NjAwMDAwMDA5MDZBMDAwMDkwNkMwMDAwOTA2RTAwMDA5MDcwMzYKKzoxMDY2NzAwMDAwMDA5MDcyMDAwMDkwNzQwMDAwOTA3NjAwMDA5MDc4MDYKKzoxMDY2ODAwMDAwMDA5MDdBMDAwMDkwN0MwMDAwOTA3RTAwMDA5MDgwRDYKKzoxMDY2OTAwMDAwMDA5MDgyMDAwMDkwODQwMDAwOTA4NjAwMDA5MDg4QTYKKzoxMDY2QTAwMDAwMDA5MDhBMDAwMDkwOEMwMDAwOTA4RTAwMDA5MDkwNzYKKzoxMDY2QjAwMDAwMDA5MDkyMDAwMDkwOTQwMDAwOTA5NjAwMDA5MDk4NDYKKzoxMDY2QzAwMDAwMDA5MDlBMDAwMDkwOUMwMDAwOTA5RTAwMDA5MEEwMTYKKzoxMDY2RDAwMDAwMDA5MEEyMDAwMDkwQTQwMDAwOTBBNjAwMDA5MEE4RTYKKzoxMDY2RTAwMDAwMDA5MEFBMDAwMDkwQUMwMDAwOTBBRTAwMDA5MEIwQjYKKzoxMDY2RjAwMDAwMDA5MEIyMDAwMDkwQjQwMDAwOTBCNjAwMDA5MEI4ODYKKzoxMDY3MDAwMDAwMDA5MEJBMDAwMDkwQkMwMDAwOTBCRTAwMDA5MEMwNTUKKzoxMDY3MTAwMDAwMDA5MEMyMDAwMDkwQzQwMDAwOTBDNjAwMDA5MEM4MjUKKzoxMDY3MjAwMDAwMDA5MENBMDAwMDkwQ0MwMDAwOTBDRTAwMDA5MEQwRjUKKzoxMDY3MzAwMDAwMDA5MEQyMDAwMDkwRDQwMDAwOTBENjAwMDA5MEQ4QzUKKzoxMDY3NDAwMDAwMDA5MERBMDAwMDkwREMwMDAwOTBERTAwMDA5MEUwOTUKKzoxMDY3NTAwMDAwMDA5MEUyMDAwMDkwRTQwMDAwOTBFNjAwMDA5MEU4NjUKKzoxMDY3NjAwMDAwMDA5MEVBMDAwMDkwRUMwMDAwOTBFRTAwMDA5MEYwMzUKKzoxMDY3NzAwMDAwMDA5MEYyMDAwMDkwRjQwMDAwOTBGNjAwMDA5MEY4MDUKKzoxMDY3ODAwMDAwMDA5MEZBMDAwMDkwRkMwMDAwOTBGRTAwMDA5MTAwRDQKKzoxMDY3OTAwMDAwMDA5MTAyMDAwMDkxMDQwMDAwOTEwNjAwMDA5MTA4QTEKKzoxMDY3QTAwMDAwMDA5MTBBMDAwMDkxMEMwMDAwOTEwRTAwMDA5MTEwNzEKKzoxMDY3QjAwMDAwMDA5MTEyMDAwMDkxMTQwMDAwOTExNjAwMDA5MTE4NDEKKzoxMDY3QzAwMDAwMDA5MTFBMDAwMDkxMUMwMDAwOTExRTAwMDA5MTIwMTEKKzoxMDY3RDAwMDAwMDA5MTIyMDAwMDkxMjQwMDAwOTEyNjAwMDA5MTI4RTEKKzoxMDY3RTAwMDAwMDA5MTJBMDAwMDkxMkMwMDAwOTEyRTAwMDA5MTMwQjEKKzoxMDY3RjAwMDAwMDA5MTMyMDAwMDkxMzQwMDAwOTEzNjAwMDA5MTM4ODEKKzoxMDY4MDAwMDAwMDA5MTNBMDAwMDkxM0MwMDAwOTEzRTAwMDA5MTQwNTAKKzoxMDY4MTAwMDAwMDA5MTQyMDAwMDkxNDQwMDAwOTE0NjAwMDA5MTQ4MjAKKzoxMDY4MjAwMDAwMDA5MTRBMDAwMDkxNEMwMDAwOTE0RTAwMDA5MTUwRjAKKzoxMDY4MzAwMDAwMDA5MTUyMDAwMDkxNTQwMDAwOTE1NjAwMDA5MTU4QzAKKzoxMDY4NDAwMDAwMDA5MTVBMDAwMDkxNUMwMDAwOTE1RTAwMDA5MTYwOTAKKzoxMDY4NTAwMDAwMDA5MTYyMDAwMDkxNjQwMDAwOTE2NjAwMDA5MTY4NjAKKzoxMDY4NjAwMDAwMDA5MTZBMDAwMDkxNkMwMDAwOTE2RTAwMDA5MTcwMzAKKzoxMDY4NzAwMDAwMDA5MTcyMDAwMDkxNzQwMDAwOTE3NjAwMDA5MTc4MDAKKzoxMDY4ODAwMDAwMDA5MTdBMDAwMDkxN0MwMDAwOTE3RTAwMDA5MTgwRDAKKzoxMDY4OTAwMDAwMDA5MTgyMDAwMDkxODQwMDAwOTE4NjAwMDA5MTg4QTAKKzoxMDY4QTAwMDAwMDA5MThBMDAwMDkxOEMwMDAwOTE4RTAwMDA5MTkwNzAKKzoxMDY4QjAwMDAwMDA5MTkyMDAwMDkxOTQwMDAwOTE5NjAwMDA5MTk4NDAKKzoxMDY4QzAwMDAwMDA5MTlBMDAwMDkxOUMwMDAwOTE5RTAwMDA5MUEwMTAKKzoxMDY4RDAwMDAwMDA5MUEyMDAwMDkxQTQwMDAwOTFBNjAwMDA5MUE4RTAKKzoxMDY4RTAwMDAwMDA5MUFBMDAwMDkxQUMwMDAwOTFBRTAwMDA5MUIwQjAKKzoxMDY4RjAwMDAwMDA5MUIyMDAwMDkxQjQwMDAwOTFCNjAwMDA5MUI4ODAKKzoxMDY5MDAwMDAwMDA5MUJBMDAwMDkxQkMwMDAwOTFCRTAwMDA5MUMwNEYKKzoxMDY5MTAwMDAwMDA5MUMyMDAwMDkxQzQwMDAwOTFDNjAwMDA5MUM4MUYKKzoxMDY5MjAwMDAwMDA5MUNBMDAwMDkxQ0MwMDAwOTFDRTAwMDA5MUQwRUYKKzoxMDY5MzAwMDAwMDA5MUQyMDAwMDkxRDQwMDAwOTFENjAwMDA5MUQ4QkYKKzoxMDY5NDAwMDAwMDA5MURBMDAwMDkxREMwMDAwOTFERTAwMDA5MUUwOEYKKzoxMDY5NTAwMDAwMDA5MUUyMDAwMDkxRTQwMDAwOTFFNjAwMDA5MUU4NUYKKzoxMDY5NjAwMDAwMDA5MUVBMDAwMDkxRUMwMDAwOTFFRTAwMDA5MUYwMkYKKzoxMDY5NzAwMDAwMDA5MUYyMDAwMDkxRjQwMDAwOTFGNjAwMDA5MUY4RkYKKzoxMDY5ODAwMDAwMDA5MUZBMDAwMDkxRkMwMDAwOTFGRUZGRkZGRkZGNjQKKzoxMDY5OTAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMDcKKzoxMDY5QTAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjcKKzoxMDY5QjAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRTcKKzoxMDY5QzAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRDcKKzoxMDY5RDAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQzcKKzoxMDY5RTAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQjcKKzoxMDY5RjAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQTcKKzoxMDZBMDAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjAwMDAwMDAzOEYKKzoxMDZBMTAwMDAwQkVCQzIwMDAwMDAwMDAwMDAwMDAwNTAwMDAwMDAzRDQKKzoxMDZBMjAwMDAwQkVCQzIwMDAwMDAwMDAwMDAwMDAwNTAwMDAwMDAzQzQKKzoxMDZBMzAwMDAwQkVCQzIwMDAwMDAwMDAwMDAwMDAwNTAwMDAwMDAzQjQKKzoxMDZBNDAwMDAwQkVCQzIwMDAwMDAwMDAwMDAwMDAwNTAwMDAwMDAzQTQKKzoxMDZBNTAwMDAwQkVCQzIwMDAwMDAwMDAwMDAwMDAwNTAwMDAwMDAzOTQKKzoxMDZBNjAwMDAwQkVCQzIwMDAwMDAwMDAwMDAwMDAwNTAwMDAwMDAzODQKKzoxMDZBNzAwMDAwQkVCQzIwMDAwMDAwMDAwMDAwMDAwNTAwMDAwMDAzNzQKKzoxMDZBODAwMDAwQkVCQzIwMDAwMDAwMDAwMDAwMDAwNTAwMDAyMDAwNDcKKzoxMDZBOTAwMDAwMDA0MEMwMDAwMDYxODAwMDAwODI0MDAwMDBBMzAwQjAKKzoxMDZBQTAwMDAwMDBDM0MwMDAwMEU0ODAwMDAxMDU0MDAwMDEyNjAwOTIKKzoxMDZBQjAwMDAwMDE0NkMwMDAwMTY3ODAwMDAxODg0MDAwMDFBOTAwNzQKKzoxMDZBQzAwMDAwMDFDOUMwMDAwMUVBODAwMDAyMEI0MDAwMDIyQzAwNTYKKzoxMDZBRDAwMDAwMDI0Q0MwMDAwMjZEODAwMDAyOEU0MDAwMDJBRjAwMzgKKzoxMDZBRTAwMDAwMDJDRkMwMDAwMkYwODAwMDAwMTE0MDAwMDA4MDAwRDIKKzoxMDZBRjAwMDAwMDEwMzgwMDAwMTg3MDAwMDAyMEE4MDAwMDI4RTAwNkUKKzoxMDZCMDAwMDAwMDMxMTgwMDAwMzk1MDAwMDA0MTg4MDAwMDQ5QzAwMUQKKzoxMDZCMTAwMDAwMDUxRjgwMDAwNUEzMDAwMDA2MjY4MDAwMDZBQTAwQ0QKKzoxMDZCMjAwMDAwMDcyRDgwMDAwN0IxMDAwMDA4MzQ4MDAwMDhCODAwN0QKKzoxMDZCMzAwMDAwMDkzQjgwMDAwOUJGMDAwMDBBNDI4MDAwMEFDNjAwMkQKKzoxMDZCNDAwMDAwMEI0OTgwMDAwQkNEMDAwMDBDNTA4MDAwMENENDAwREQKKzoxMDZCNTAwMDAwMEQ1NzgwMDAwMDVCMDAwMDAwN0ZGODAwMDA3RkY4MDgKKzoxMDZCNjAwMDAwMDAwMjJBMDAwMDM1MDAwMDAwRkYwMDAwMDAwMDAwQzUKKzoxMDZCNzAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMTcKKzoxMDZCODAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDcKKzoxMDZCOTAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwRjcKKzoxMDZCQTAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwRTcKKzoxMDZCQjAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwRDcKKzoxMDZCQzAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwQzcKKzoxMDZCRDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwQjcKKzoxMDZCRTAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwQTcKKzoxMDZCRjAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwOTcKKzoxMDZDMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwODYKKzoxMDZDMTAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwNzYKKzoxMDZDMjAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwNjYKKzoxMDZDMzAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwNTYKKzoxMDZDNDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwNDYKKzoxMDZDNTAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMzYKKzoxMDZDNjAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMjYKKzoxMDZDNzAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMTYKKzoxMDZDODAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDYKKzoxMDZDOTAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwRjYKKzoxMDZDQTAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwRTYKKzoxMDZDQjAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwRDYKKzoxMDZDQzAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwQzYKKzoxMDZDRDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwQjYKKzoxMDZDRTAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwQTYKKzoxMDZDRjAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwOTYKKzoxMDZEMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwODUKKzoxMDZEMTAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwNzUKKzoxMDZEMjAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwNjUKKzoxMDZEMzAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwNTUKKzoxMDZENDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwNDUKKzoxMDZENTAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMzUKKzoxMDZENjAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMjUKKzoxMDZENzAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMTUKKzoxMDZEODAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDUKKzoxMDZEOTAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwRjUKKzoxMDZEQTAwMDAwMDBGRjAwMDAwMDE5MDAwMDAwMDAwMDAwMDAwMDAwQ0IKKzoxMDZEQjAwMEZGRkZGRkZGMDAwMDAwMDAwMzkzODcwMDAwMDAwMDAwQkEKKzoxMDZEQzAwMDAzOTM4NzAwMDAwMDdGRjgwMDAwN0ZGODAwMDAwQkEzMEEKKzoxMDZERDAwMDAwMDAxNTAwMDAwMDAwRkYwMDAwMDBGRjAwMDAwMEZGQTEKKzoxMDZERTAwMDAwMDAwMEZGMDAwMDAwRkYwMDAwMDBGRjAwMDAwMEZGQTcKKzoxMDZERjAwMDAwMDAwMEZGMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwOTYKKzoxMDZFMDAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwODQKKzoxMDZFMTAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwNzQKKzoxMDZFMjAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwNjQKKzoxMDZFMzAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwNTQKKzoxMDZFNDAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwNDQKKzoxMDZFNTAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMzQKKzoxMDZFNjAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMjQKKzoxMDZFNzAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMTQKKzoxMDZFODAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDQKKzoxMDZFOTAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwRjQKKzoxMDZFQTAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwRTQKKzoxMDZFQjAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwRDQKKzoxMDZFQzAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwQzQKKzoxMDZFRDAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwQjQKKzoxMDZFRTAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwQTQKKzoxMDZFRjAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwOTQKKzoxMDZGMDAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwODMKKzoxMDZGMTAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwNzMKKzoxMDZGMjAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwNjMKKzoxMDZGMzAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwNTMKKzoxMDZGNDAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwNDMKKzoxMDZGNTAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMzMKKzoxMDZGNjAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMjMKKzoxMDZGNzAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMTMKKzoxMDZGODAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDMKKzoxMDZGOTAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwRjMKKzoxMDZGQTAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwRTMKKzoxMDZGQjAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwRDMKKzoxMDZGQzAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwQzMKKzoxMDZGRDAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwQjMKKzoxMDZGRTAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwQTMKKzoxMDZGRjAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwOTMKKzoxMDcwMDAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwODIKKzoxMDcwMTAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwNzIKKzoxMDcwMjAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwNjIKKzoxMDcwMzAwMDAwMDAwMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGNUMKKzoxMDcwNDAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGNTAKKzoxMDcwNTAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGNDAKKzoxMDcwNjAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMzAKKzoxMDcwNzAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMjAKKzoxMDcwODAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMTAKKzoxMDcwOTAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMDAKKzoxMDcwQTAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjAKKzoxMDcwQjAwMEZGRkZGRkZGMDAwMDAwMDAwMDAwMjhBRDAwMDAyOTE4QkUKKzoxMDcwQzAwMDAwMDAyOTE5MDAwMDAwMDUwMDAwMDAwNzAwMDBGRjAwNzMKKzoxMDcwRDAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGOUEKKzoxMDcwRTAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwOTcKKzoxMDcwRjAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwODcKKzoxMDcxMDAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGNjkKKzoxMDcxMTAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwNjYKKzoxMDcxMjAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwNTYKKzoxMDcxMzAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMzkKKzoxMDcxNDAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMzYKKzoxMDcxNTAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwMjYKKzoxMDcxNjAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMDkKKzoxMDcxNzAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMDYKKzoxMDcxODAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwRjYKKzoxMDcxOTAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGRDkKKzoxMDcxQTAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwRDYKKzoxMDcxQjAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwQzYKKzoxMDcxQzAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGQTkKKzoxMDcxRDAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwQTYKKzoxMDcxRTAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwOTYKKzoxMDcxRjAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGNzkKKzoxMDcyMDAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwNzUKKzoxMDcyMTAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwNjUKKzoxMDcyMjAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGNDgKKzoxMDcyMzAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwNDUKKzoxMDcyNDAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwMzUKKzoxMDcyNTAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMTgKKzoxMDcyNjAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMTUKKzoxMDcyNzAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwMDUKKzoxMDcyODAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGRTgKKzoxMDcyOTAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwRTUKKzoxMDcyQTAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwRDUKKzoxMDcyQjAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGQjgKKzoxMDcyQzAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwQjUKKzoxMDcyRDAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwQTUKKzoxMDcyRTAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGODgKKzoxMDcyRjAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwODUKKzoxMDczMDAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwNzQKKzoxMDczMTAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGNTcKKzoxMDczMjAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwNTQKKzoxMDczMzAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwNDQKKzoxMDczNDAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMjcKKzoxMDczNTAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMjQKKzoxMDczNjAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwMTQKKzoxMDczNzAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGRjcKKzoxMDczODAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwRjQKKzoxMDczOTAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwRTQKKzoxMDczQTAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGQzcKKzoxMDczQjAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwQzQKKzoxMDczQzAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwQjQKKzoxMDczRDAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGOTcKKzoxMDczRTAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwOTQKKzoxMDczRjAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwODQKKzoxMDc0MDAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGNjYKKzoxMDc0MTAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwNjMKKzoxMDc0MjAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwNTMKKzoxMDc0MzAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMzYKKzoxMDc0NDAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMzMKKzoxMDc0NTAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwMjMKKzoxMDc0NjAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMDYKKzoxMDc0NzAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMDMKKzoxMDc0ODAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwRjMKKzoxMDc0OTAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGRDYKKzoxMDc0QTAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwRDMKKzoxMDc0QjAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwQzMKKzoxMDc0QzAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGQTYKKzoxMDc0RDAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwQTMKKzoxMDc0RTAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwOTMKKzoxMDc0RjAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGNzYKKzoxMDc1MDAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwNzIKKzoxMDc1MTAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwNjIKKzoxMDc1MjAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGNDUKKzoxMDc1MzAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwNDIKKzoxMDc1NDAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwMzIKKzoxMDc1NTAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMTUKKzoxMDc1NjAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMTIKKzoxMDc1NzAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwMDIKKzoxMDc1ODAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGRTUKKzoxMDc1OTAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwRTIKKzoxMDc1QTAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwRDIKKzoxMDc1QjAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGQjUKKzoxMDc1QzAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwQjIKKzoxMDc1RDAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwQTIKKzoxMDc1RTAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGODUKKzoxMDc1RjAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwODIKKzoxMDc2MDAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwNzEKKzoxMDc2MTAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGNTQKKzoxMDc2MjAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwNTEKKzoxMDc2MzAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwNDEKKzoxMDc2NDAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMjQKKzoxMDc2NTAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMjEKKzoxMDc2NjAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwMTEKKzoxMDc2NzAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGRjQKKzoxMDc2ODAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwRjEKKzoxMDc2OTAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwRTEKKzoxMDc2QTAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGQzQKKzoxMDc2QjAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwQzEKKzoxMDc2QzAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwQjEKKzoxMDc2RDAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGOTQKKzoxMDc2RTAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwOTEKKzoxMDc2RjAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwODEKKzoxMDc3MDAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGNjMKKzoxMDc3MTAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwNjAKKzoxMDc3MjAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwNTAKKzoxMDc3MzAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMzMKKzoxMDc3NDAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMzAKKzoxMDc3NTAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwMjAKKzoxMDc3NjAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMDMKKzoxMDc3NzAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMDAKKzoxMDc3ODAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwRjAKKzoxMDc3OTAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGRDMKKzoxMDc3QTAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwRDAKKzoxMDc3QjAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwQzAKKzoxMDc3QzAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGQTMKKzoxMDc3RDAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwQTAKKzoxMDc3RTAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwOTAKKzoxMDc3RjAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGNzMKKzoxMDc4MDAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwNkYKKzoxMDc4MTAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwNUYKKzoxMDc4MjAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGNDIKKzoxMDc4MzAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwM0YKKzoxMDc4NDAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwMkYKKzoxMDc4NTAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMTIKKzoxMDc4NjAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMEYKKzoxMDc4NzAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwRkYKKzoxMDc4ODAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGRTIKKzoxMDc4OTAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwREYKKzoxMDc4QTAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwQ0YKKzoxMDc4QjAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGQjIKKzoxMDc4QzAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwQUYKKzoxMDc4RDAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwOUYKKzoxMDc4RTAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGODIKKzoxMDc4RjAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwN0YKKzoxMDc5MDAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwNkUKKzoxMDc5MTAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGNTEKKzoxMDc5MjAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwNEUKKzoxMDc5MzAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwM0UKKzoxMDc5NDAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMjEKKzoxMDc5NTAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMUUKKzoxMDc5NjAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwMEUKKzoxMDc5NzAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGRjEKKzoxMDc5ODAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwRUUKKzoxMDc5OTAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwREUKKzoxMDc5QTAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGQzEKKzoxMDc5QjAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwQkUKKzoxMDc5QzAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwQUUKKzoxMDc5RDAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGOTEKKzoxMDc5RTAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwOEUKKzoxMDc5RjAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwN0UKKzoxMDdBMDAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGNjAKKzoxMDdBMTAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwNUQKKzoxMDdBMjAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwNEQKKzoxMDdBMzAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMzAKKzoxMDdBNDAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMkQKKzoxMDdBNTAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwMUQKKzoxMDdBNjAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMDAKKzoxMDdBNzAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwRkQKKzoxMDdBODAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwRUQKKzoxMDdBOTAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGRDAKKzoxMDdBQTAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwQ0QKKzoxMDdBQjAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwQkQKKzoxMDdBQzAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGQTAKKzoxMDdBRDAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwOUQKKzoxMDdBRTAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwOEQKKzoxMDdBRjAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGNzAKKzoxMDdCMDAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwNkMKKzoxMDdCMTAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwNUMKKzoxMDdCMjAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGM0YKKzoxMDdCMzAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwM0MKKzoxMDdCNDAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwMkMKKzoxMDdCNTAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMEYKKzoxMDdCNjAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMEMKKzoxMDdCNzAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwRkMKKzoxMDdCODAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGREYKKzoxMDdCOTAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwREMKKzoxMDdCQTAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwQ0MKKzoxMDdCQjAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGQUYKKzoxMDdCQzAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwQUMKKzoxMDdCRDAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwOUMKKzoxMDdCRTAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGN0YKKzoxMDdCRjAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwN0MKKzoxMDdDMDAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwNkIKKzoxMDdDMTAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGNEUKKzoxMDdDMjAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwNEIKKzoxMDdDMzAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwM0IKKzoxMDdDNDAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMUUKKzoxMDdDNTAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMUIKKzoxMDdDNjAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwMEIKKzoxMDdDNzAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGRUUKKzoxMDdDODAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwRUIKKzoxMDdDOTAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwREIKKzoxMDdDQTAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGQkUKKzoxMDdDQjAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwQkIKKzoxMDdDQzAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwQUIKKzoxMDdDRDAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGOEUKKzoxMDdDRTAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwOEIKKzoxMDdDRjAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwN0IKKzoxMDdEMDAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGNUQKKzoxMDdEMTAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwNUEKKzoxMDdEMjAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwNEEKKzoxMDdEMzAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMkQKKzoxMDdENDAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMkEKKzoxMDdENTAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwMUEKKzoxMDdENjAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGRkQKKzoxMDdENzAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwRkEKKzoxMDdEODAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDAxMDAwRDkKKzoxMDdEOTAwMDAwMDAyMDgwMDAwMDMxMDAwMDAwNDE4MDAwMDA1MjAwRkYKKzoxMDdEQTAwMDAwMDA2MjgwMDAwMDczMDAwMDAwODM4MDAwMDA5NDAwRTcKKzoxMDdEQjAwMDAwMDBBNDgwMDAwMEI1MDAwMDAwQzU4MDAwMDBENjAwQ0YKKzoxMDdEQzAwMDAwMDBFNjgwMDAwMEY3MDAwMDAxMDc4MDAwMDExODAwQjUKKzoxMDdERDAwMDAwMDEyODgwMDAwMTM5MDAwMDAxNDk4MDAwMDE1QTAwOUIKKzoxMDdERTAwMDAwMDE2QTgwMDAwMTdCMDAwMDAxOEI4MDAwMDE5QzAwODMKKzoxMDdERjAwMDAwMDFBQzgwMDAwMUJEMDAwMDAxQ0Q4MDAwMDFERTAwNkIKKzoxMDdFMDAwMDAwMDFFRTgwMDAwMUZGMDAwMDAwMEY4MDAwMDA3RkY4RkQKKzoxMDdFMTAwMDAwMDA3RkY4MDAwMDA1RjYwMDAwMzUwMDEwMDAwMDAwQUIKKzoxMDdFMjAwMDAwMDAyOEFEMDAwMDI5MTgwMDAwMjkxOTAwMDAwMDA1RjUKKzoxMDdFMzAwMDAwMDAwMDA2MDAwMTAwMDEwMDA1MDIwNkNDQ0NDQ0M5MDAKKzoxMDdFNDAwMDcwNTgxMDNDMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMjAKKzoxMDdFNTAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMjQKKzoxMDdFNjAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMTQKKzoxMDdFNzAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDQKKzoxMDdFODAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwRjQKKzoxMDdFOTAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwRTQKKzoxMDdFQTAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwRDQKKzoxMDdFQjAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwQzQKKzoxMDdFQzAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwQjQKKzoxMDdFRDAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwQTQKKzoxMDdFRTAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwOTQKKzoxMDdFRjAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwODQKKzoxMDdGMDAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwNzMKKzoxMDdGMTAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwNjMKKzoxMDdGMjAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwNTMKKzoxMDdGMzAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwNDMKKzoxMDdGNDAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMzMKKzoxMDdGNTAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMjMKKzoxMDdGNjAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMTMKKzoxMDdGNzAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDMKKzoxMDdGODAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwRjMKKzoxMDdGOTAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwRTMKKzoxMDdGQTAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwRDMKKzoxMDdGQjAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwQzMKKzoxMDdGQzAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwQjMKKzoxMDdGRDAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwQTMKKzoxMDdGRTAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwOTMKKzoxMDdGRjAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwODMKKzoxMDgwMDAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwNzIKKzoxMDgwMTAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwNjIKKzoxMDgwMjAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwNTIKKzoxMDgwMzAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwNDIKKzoxMDgwNDAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMzIKKzoxMDgwNTAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMjIKKzoxMDgwNjAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMTIKKzoxMDgwNzAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDIKKzoxMDgwODAwMDAwMDAwMDAwMDAwMDAwMDFDQ0NDMDIwMUNDQ0NDQ0NDMjQKKzoxMDgwOTAwMENDQ0MwMjAxQ0NDQ0NDQ0NDQ0NDMDIwMUNDQ0NDQ0NDNEEKKzoxMDgwQTAwMENDQ0MwMjAxQ0NDQ0NDQ0NDQ0NDMDIwMUNDQ0NDQ0NDM0EKKzoxMDgwQjAwMENDQ0MwMjAxQ0NDQ0NDQ0NDQ0NDMDIwMUNDQ0NDQ0NDMkEKKzoxMDgwQzAwMENDQ0MwMjAxQ0NDQ0NDQ0MwMDAwMDAwMEZGRkZGRkZGRTkKKzoxMDgwRDAwMDAzMDMwMzAzMTM0MjAyMDI1MDUwNTAyMDcwNjA4MDUwOEIKKzoxMDgwRTAwMDAyMDAwMjAwMDYwNDA2MDQwMDBFMDAwMDAxMTYwMEQ2N0QKKzoxMDgwRjAwMDAwMjYyNUEwMDAyNjI1QTAwMDI2MjVBMDAwMjYyNUEwRDQKKzoxMDgxMDAwMDAwNzIwMDAwMDEyMzAwRjMwMDI2MjVBMDAwMjYyNUEwMTAKKzoxMDgxMTAwMDAwMjYyNUEwMDAyNjI1QTAwMDAwRkZGRjAwMDAwMDAwOEIKKzoxMDgxMjAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwNTMKKzoxMDgxMzAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwNDMKKzoxMDgxNDAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwMzMKKzoxMDgxNTAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwMjMKKzoxMDgxNjAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwMTMKKzoxMDgxNzAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwMDMKKzoxMDgxODAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwRjMKKzoxMDgxOTAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwRTMKKzoxMDgxQTAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwRDMKKzoxMDgxQjAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwQzMKKzoxMDgxQzAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwQjMKKzoxMDgxRDAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwQTMKKzoxMDgxRTAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwOTMKKzoxMDgxRjAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwODMKKzoxMDgyMDAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwNzIKKzoxMDgyMTAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwNjIKKzoxMDgyMjAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwNTIKKzoxMDgyMzAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwNDIKKzoxMDgyNDAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwMzIKKzoxMDgyNTAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwMjIKKzoxMDgyNjAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwMTIKKzoxMDgyNzAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwMDIKKzoxMDgyODAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwRjIKKzoxMDgyOTAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwRTIKKzoxMDgyQTAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwRDIKKzoxMDgyQjAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwQzIKKzoxMDgyQzAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwQjIKKzoxMDgyRDAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwQTIKKzoxMDgyRTAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwOTIKKzoxMDgyRjAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwODIKKzoxMDgzMDAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwNzEKKzoxMDgzMTAwMDAwMDBGRkZGMDAwMDAwMDBGRkZGRkZGMzMxOEZGRkZGQjEKKzoxMDgzMjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzOTEKKzoxMDgzMzAwMDAwMDBDRjNDQ0RDRENEQ0RGRkZGRkZGMTMwRUZGRkZGRjMKKzoxMDgzNDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzNzEKKzoxMDgzNTAwMDAwMDFDRjNDQ0RDRENEQ0RGRkZGRkZGNjMwNUZGRkZGNUQKKzoxMDgzNjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzNTEKKzoxMDgzNzAwMDAwMDJDRjNDQ0RDRENEQ0RGRkZGRjQwNjFDQkZGRkZGRUIKKzoxMDgzODAwMDBDMzBDMzA1QzMwQzMwQzNDRjMwMDAxNEYzQ0YzQ0YzMjMKKzoxMDgzOTAwMDAwMDRDRjNDQ0RDRENEQ0RGRkZGRkZGMjMwNEZGRkZGMkUKKzoxMDgzQTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMTEKKzoxMDgzQjAwMDAwMDhDRjNDQ0RDRENEQ0RGRkZGRkZGQTMwMkZGRkZGMjIKKzoxMDgzQzAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzRjEKKzoxMDgzRDAwMDAwMTBDRjNDQ0RDRENEQ0RGRkZGRkZGNzMxRUZGRkZGM0MKKzoxMDgzRTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzRDEKKzoxMDgzRjAwMDAwMjBDRjNDQ0RDRENEQ0RGRkZGRkZGNTMwMkZGRkZGQ0YKKzoxMDg0MDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzQjAKKzoxMDg0MTAwMDAwNDBDRjNDQ0RDRENEQ0RGRkZGRkZGMzMxOEZGRkZGMkYKKzoxMDg0MjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzOTAKKzoxMDg0MzAwMDAwMDBDRjNDQ0RDRENEQ0RGRkZGRkZGMTMxMEZGRkZGRDEKKzoxMDg0NDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzNzAKKzoxMDg0NTAwMDAwMDFDRjNDQ0RDRENEQ0RGRkZGRkZGNjMwNUZGRkZGNUMKKzoxMDg0NjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzNTAKKzoxMDg0NzAwMDAwMDJDRjNDQ0RDRENEQ0RGRkZGRjQwNjFDQkZGRkZGRUEKKzoxMDg0ODAwMDBDMzBDMzA1QzMwQzMwQzNDRjMwMDAxNEYzQ0YzQ0YzMjIKKzoxMDg0OTAwMDAwMDRDRjNDQ0RDRENEQ0RGRkZGRkZGMjMwNEZGRkZGMkQKKzoxMDg0QTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMTAKKzoxMDg0QjAwMDAwMDhDRjNDQ0RDRENEQ0RGRkZGRkZGQTMwMkZGRkZGMjEKKzoxMDg0QzAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzRjAKKzoxMDg0RDAwMDAwMTBDRjNDQ0RDRENEQ0RGRkZGRkZGNzMwRUZGRkZGM0MKKzoxMDg0RTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzRDAKKzoxMDg0RjAwMDAwMjBDRjNDQ0RDRENEQ0RGRkZGRkZGNTMwNEZGRkZGQUUKKzoxMDg1MDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzQUYKKzoxMDg1MTAwMDAwNDBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGRTMKKzoxMDg1MjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzQzMKKzoxMDg1MzAwMDAwMDBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMDMKKzoxMDg1NDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzQTMKKzoxMDg1NTAwMDAwMDFDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGRTIKKzoxMDg1NjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzODMKKzoxMDg1NzAwMDAwMDJDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGQzEKKzoxMDg1ODAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzNjMKKzoxMDg1OTAwMDAwMDRDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGOUYKKzoxMDg1QTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzNDMKKzoxMDg1QjAwMDAwMDhDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGN0IKKzoxMDg1QzAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMjMKKzoxMDg1RDAwMDAwMTBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGNTMKKzoxMDg1RTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDMKKzoxMDg1RjAwMDAwMjBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMjMKKzoxMDg2MDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzRTIKKzoxMDg2MTAwMDAwNDBDRjNDQ0RDRENEQ0RGRkZGRkZGMzMyMEZGRkZGQUMKKzoxMDg2MjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzOEUKKzoxMDg2MzAwMDAwMDBDRjNDQ0RDRENEQ0RGRkZGRkZGMTMxMEZGRkZGQ0YKKzoxMDg2NDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzNkUKKzoxMDg2NTAwMDAwMDFDRjNDQ0RDRENEQ0RGRkZGRkZGNjMwNUZGRkZGNUEKKzoxMDg2NjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzNEUKKzoxMDg2NzAwMDAwMDJDRjNDQ0RDRENEQ0RGRkZGRjQwNjFDQkZGRkZGRTgKKzoxMDg2ODAwMDBDMzBDMzA1QzMwQzMwQzNDRjMwMDAxNEYzQ0YzQ0YzMjAKKzoxMDg2OTAwMDAwMDRDRjNDQ0RDRENEQ0RGRkZGRkZGMjMwNEZGRkZGMkIKKzoxMDg2QTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMEUKKzoxMDg2QjAwMDAwMDhDRjNDQ0RDRENEQ0RGRkZGRkY4QTA0MkZGRkZGQkIKKzoxMDg2QzAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDQzAwMEYzQ0YzQ0YzMjEKKzoxMDg2RDAwMDAwMTBDRjNDQ0RDRENEQ0RGRkZGRkY5NzA1Q0ZGRkZGRTUKKzoxMDg2RTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDQzAwMEYzQ0YzQ0YzMDEKKzoxMDg2RjAwMDAwMjBDRjNDQ0RDRENEQ0RGRkZGRkZGNTMxMEZGRkZGRUIKKzoxMDg3MDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzQUQKKzoxMDg3MTAwMDAwNDBDRjNDQ0RDRENEQ0RGRkZGRkZGMzMyMEZGRkZGQUIKKzoxMDg3MjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzOEQKKzoxMDg3MzAwMDAwMDBDRjNDQ0RDRENEQ0RGRkZGRkZGMTMwMkZGRkZGQUYKKzoxMDg3NDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzNkQKKzoxMDg3NTAwMDAwMDFDRjNDQ0RDRENEQ0RGRkZGRkZGNjMwNUZGRkZGNTkKKzoxMDg3NjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzNEQKKzoxMDg3NzAwMDAwMDJDRjNDQ0RDRENEQ0RGRkZGRkYwNjFDQkZGRkZGREMKKzoxMDg3ODAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDQzAxNEYzQ0YzQ0YzNEMKKzoxMDg3OTAwMDAwMDRDRjNDQ0RDRENEQ0RGRkZGRkZGMjMwNEZGRkZGMkEKKzoxMDg3QTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMEQKKzoxMDg3QjAwMDAwMDhDRjNDQ0RDRENEQ0RGRkZGRkZGQTMwMkZGRkZGMUUKKzoxMDg3QzAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzRUQKKzoxMDg3RDAwMDAwMTBDRjNDQ0RDRENEQ0RGRkZGRkZGNzMxQ0ZGRkZGNTgKKzoxMDg3RTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzQ0QKKzoxMDg3RjAwMDAwMjBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMjEKKzoxMDg4MDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzRTAKKzoxMDg4MTAwMDAwNDBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGRTAKKzoxMDg4MjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzQzAKKzoxMDg4MzAwMDAwMDBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMDAKKzoxMDg4NDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzQTAKKzoxMDg4NTAwMDAwMDFDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGREYKKzoxMDg4NjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzODAKKzoxMDg4NzAwMDAwMDJDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGQkUKKzoxMDg4ODAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzNjAKKzoxMDg4OTAwMDAwMDRDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGOUMKKzoxMDg4QTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzNDAKKzoxMDg4QjAwMDAwMDhDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGNzgKKzoxMDg4QzAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMjAKKzoxMDg4RDAwMDAwMTBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGNTAKKzoxMDg4RTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAKKzoxMDg4RjAwMDAwMjBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMjAKKzoxMDg5MDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzREYKKzoxMDg5MTAwMDAwNDBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGREYKKzoxMDg5MjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzQkYKKzoxMDg5MzAwMDAwMDBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGRkYKKzoxMDg5NDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzOUYKKzoxMDg5NTAwMDAwMDFDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGREUKKzoxMDg5NjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzN0YKKzoxMDg5NzAwMDAwMDJDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGQkQKKzoxMDg5ODAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzNUYKKzoxMDg5OTAwMDAwMDRDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGOUIKKzoxMDg5QTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzM0YKKzoxMDg5QjAwMDAwMDhDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGNzcKKzoxMDg5QzAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMUYKKzoxMDg5RDAwMDAwMTBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGNEYKKzoxMDg5RTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzRkYKKzoxMDg5RjAwMDAwMjBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMUYKKzoxMDhBMDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzREUKKzoxMDhBMTAwMDAwNDBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGREUKKzoxMDhBMjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzQkUKKzoxMDhBMzAwMDAwMDBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGRkUKKzoxMDhBNDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzOUUKKzoxMDhBNTAwMDAwMDFDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGREQKKzoxMDhBNjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzN0UKKzoxMDhBNzAwMDAwMDJDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGQkMKKzoxMDhBODAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzNUUKKzoxMDhBOTAwMDAwMDRDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGOUEKKzoxMDhBQTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzM0UKKzoxMDhBQjAwMDAwMDhDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGNzYKKzoxMDhBQzAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMUUKKzoxMDhBRDAwMDAwMTBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGNEUKKzoxMDhBRTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzRkUKKzoxMDhBRjAwMDAwMjBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMUUKKzoxMDhCMDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzREQKKzoxMDhCMTAwMDAwNDBDRjNDQ0RDRENEQ0QwMDBDMDAwMDAwMDcwMEMwMDMKKzoxMDhCMjAwMDAwMDI4MTMwMDAwQjgxNTgwMDAyMDIxMDAwMDEwMjMwNjcKKzoxMDhCMzAwMDAwMEYwMjQwMDAwMTAzMzAwMDBDMDAwMDAwMDgwMEMwREMKKzoxMDhCNDAwMDAwMDI4MTQwMDAwQjgxNjgwMDAyMDIyMDAwMDEwMjQwMDcKKzoxMDhCNTAwMDAwMDcwMjUwMDAwMjAyQzAwMDEwMDAwMDAwMDgwMTAwREYKKzoxMDhCNjAwMDAwMDI4MTgwMDAwQjgxQTgwMDAyMDI2MDAwMDE4MjgwNjcKKzoxMDhCNzAwMDAwMEU4Mjk4MDAwODAzODAwMDEwMDAwMDAwMDEwMTAwMzAKKzoxMDhCODAwMDAwMDI4MTEwMDAwOTAxMzgwMDAyMDFDODAwMDEwMUU4NUIKKzoxMDhCOTAwMDAwMEUwMUY4MDAwMDAyRDhDQ0NDQ0NDQ0NDQ0NDQ0NDOTQKKzoxMDhCQTAwMENDQ0NDQ0NDQ0NDQ0NDQ0MwMDAwMjAwMENDQ0NDQ0NDMTUKKzoxMDhCQjAwMENDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQzAwMDAyMDAwMDUKKzoxMDhCQzAwMENDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDRTUKKzoxMDhCRDAwMDA0MDAyMDAwQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDRTEKKzoxMDhCRTAwMENDQ0NDQ0NDNDEwMDIwMDAwMzAzMDMwMzAzNDIwMjAyOUYKKzoxMDhCRjAwMDUwNTA1MDIwNzA2MDgwNTAxMzEzMTMxMzEzNDIxMjEyMDAKKzoxMDhDMDAwMDUwNTA1MDIwNzA2MDgwNTAwMzAxMDIwMDAwMDAwMDAwQUUKKzoxMDhDMTAwMDAwMDAwMDAwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwQTIKKzoxMDhDMjAwMDAwMEJGQjUxQ0ZDMEYwMDM4QTBGMDkzMjMwNjg4QTIwNTUKKzoxMDhDMzAwMEY4QzRFMDVDNzYwNjg2NzUxQzBDMEM1QkI4NDlEMzA3NUIKKzoxMDhDNDAwMEMzMkMwQzBDMENEQTRDRTRFOTA1RTFGQkJDMEMwQ0FGQkEKKzoxMDhDNTAwMDgwOTg4NTBGNTU5Qzg3MTM0MkZGMDE1QUMwQzdDQUMwMzAKKzoxMDhDNjAwMEEwQzE4NjVERkYzQTM1MDQzQjQwODU4MUExMUM4OEQ5QUYKKzoxMDhDNzAwMDk0MTgxOENDNTQxMUUyRDJFQTBDMEMzMzgwRkMwNEE4RUUKKzoxMDhDODAwMEQ4MUQyMDFEQUI0NkJFOUI0N0YxRTBDMTM3OEQ1MUY5ODEKKzoxMDhDOTAwMDVCMERBMTY5MDEyQTdFMEI0RDdFMUI1NEJFNEEwNzQyMjMKKzoxMDhDQTAwMERGMzZDNjZFNkVCNTBFNzFGNjlGQjU0NkU1QUZCNEM2M0IKKzoxMDhDQjAwMEFGRkVBRTNEMkFGRjIwOUFGQUFENTAzRTAwQzVENTVCMEYKKzoxMDhDQzAwMEE3RDgwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjIKKzoxMDhDRDAwMDFGOEIwODAwMDAwMDAwMDAwMDBCRUQ3RDdGN0MxNEQ1ODkKKzoxMDhDRTAwMEI1Rjg5OTlERDlEOUQ5Q0RFRTY2MDgwOTZDMjBFMDI0NTQKKzoxMDhDRjAwMDg2MUFGQjgyREZFNTc3QTg0MTg3ODAzNEI2M0NERjhBOUQKKzoxMDhEMDAwMDVBRDNENkY2QkI1MDZDNTUxNDU2QkYzRUUxRjU2OTMzQzUKKzoxMDhEMTAwMEY5NDExMjIyNjIwNDlGREFENjFGMkI1NTRCRkI2Qzg5NTYKKzoxMDhEMjAwMDk0MkFBRDNGREUwMjRBRjFGNUM3NDNBQUQ1RDdBMjJGNTgKKzoxMDhEMzAwMEZFODBBQTQ1NUZDNEQyRDg3RTUxREUzREU3REVDOUNFQjMKKzoxMDhENDAwMDRDNzY5MzBERDAxRjdGQkNGMDgxRTFDRURDMUZFNzlFRjcKKzoxMDhENTAwMDczRUUzOUU3OUU3M0VFOERFQUYzQzNDN0NFMDUzODhFMDYKKzoxMDhENjAwMDNGRUNEOTEzMDI4MDU5RDlBNzcxRjVCQ0FFQkU5OTAwNkEKKzoxMDhENzAwMDQ3MjFEMkQzNUQwQUQwQTY4MDA5QUM2QzFEODhBNDFGMDAKKzoxMDhEODAwMDk0MDA3RjZBMTQ1NjVFMkQ3RjNDREU1RDA5NzA2N0QxQ0EKKzoxMDhEOTAwMEQ3RUVDM0ZBNkIyQzA1MDJFQ0Q5REQwQzkwMzk4MzdEM0MKKzoxMDhEQTAwMDBGNDUzNzQzMzE0MDExQTRCNkUyNzdGNjkzNzg5MEY1M0EKKzoxMDhEQjAwMDM3MTA5QzlDODY2ODc2RkMzMkYwRDFCODAwMTVGQUExNzkKKzoxMDhEQzAwMDIyQUEwN0M3NjVGNkNGODFFNDdDMTgwNzIwODNGREIzOEMKKzoxMDhERDAwMDA2N0E1OTNGQ0FGMzcyMUFDNzk1RTVDNUZBOEI1NUQ5NzkKKzoxMDhERTAwMDdFQkM0RjU5NTcyMUEzODlGRUYwMUZGOUIyRTI2NDM4QzcKKzoxMDhERjAwMDdGRkQzNTA3MkFCNzNFNUQ5M0FEN0YwNjQ0NEEwRkZERTAKKzoxMDhFMDAwMDFERkI4RjAyMEFDMTIzQUYwN0M0QzNEMTMwQTRFNUNBM0EKKzoxMDhFMTAwMEZDRkQwQzM0MUI1QjlGRjYyMzFFQkY1MDlDOTg5QUJGMzEKKzoxMDhFMjAwMDlFOERBN0FFNjY4RDlFMURDRDNBNjQwMjAwMEM2NEIzODQKKzoxMDhFMzAwMEI3OTYzREMzNjA2RUFFMUREQTZFMDE0ODg0MkZDREIwOEIKKzoxMDhFNDAwMDA4OUVGNkIwMkY1RDU0ODk1MDI3MDExODdFRkQ4ODFGQkIKKzoxMDhFNTAwMDA5REYyRkQxQ0MxQ0VERUQyNzk0MzJGQ0Q4RjM2NTc4RDcKKzoxMDhFNjAwMDBDMDJFRjBGRDhGQzFFNjRGRDA1NzFGQzFDRjhCQTA4NUIKKzoxMDhFNzAwMEM3MkY2M0RGQUI4NzhFNkZDRDNDRjFGMTQzNjcwMkVDMDgKKzoxMDhFODAwMDBCMjNCRTREODQwMTdDN0EwQUUyODJERTlGOTQ4NkU5NDAKKzoxMDhFOTAwMDQ3RDA1OTMxNzgzRjIzRTFCREE4QzY5NzFEOTdGRDBERjYKKzoxMDhFQTAwMDFBMjExNzlGMDQ2MjI1NkVCRUYxRjIyNUUyQTkwQ0U5OTIKKzoxMDhFQjAwMDY1NDhBRjRGQzlGNkFCMjJERDcyRTBFQjRBODFBRkZFRTkKKzoxMDhFQzAwMEY5ODlBNjA0QzNDN0RBNjZCMDVFNzNCNDkzNjM2MEE2N0IKKzoxMDhFRDAwMDczRTA2OUI1Njg2NzhGQTc5NEIyN0EzOUZBMDc2ODExQTkKKzoxMDhFRTAwMEVCQzc3MkQ1MkYxNEJFOUI0RTEwQkU5QkZGNDJGMEREMjgKKzoxMDhFRjAwMDI2Rjg5RDQ5Mjg3QUY2Q0Y0RjEyOUNERUZFNzJBRDJGRTAKKzoxMDhGMDAwMEI2ODgwN0NCMjEyNTZERjk5MEJGNEIyMUZFMjA3QkY4NTkKKzoxMDhGMTAwMDM1QkVDRUVDRUZERjA3M0ZGNUIzMDMyNTBFMUJBNzREQTMKKzoxMDhGMjAwMEMwRDczRjlGQ0JCRkI1RDNENEY0NjY4OUU0OTEwQkNFQjUKKzoxMDhGMzAwMDg3NTE3RUIxNzY5MjI0RjBBMUY1MDJGMjVGRDEwNzBBNDMKKzoxMDhGNDAwMEMwNTg4NENGODQ0NDA0NjA1RDc1ODMzNjlDRkMwMTVEMDkKKzoxMDhGNTAwMEY5NTM5RkNENzc1NTQzRjlFRUUzNkMxODg0MkIxNENFNkIKKzoxMDhGNjAwMDhEQTdFRjBGQ0FEMUNCQUNENzU4M0Y1QTkwQkQzRjFENEMKKzoxMDhGNzAwMEZCMkQ4RDU1Q0MwNjlDMURGREY4QzU3NzkwN0NGMjcxQkMKKzoxMDhGODAwMDVDQjdDNzU4QkREOTQyQ0VDQUQ0M0ZDOTExQTgwMDkyMTgKKzoxMDhGOTAwMEY3QjJBODRGRTNCMEZBMDEzNjJENzMzQTdCRTJGQjFBMjEKKzoxMDhGQTAwMDMxOEUzNEI0NUY2RkJCMDEyOEUxRjgxMUYwRDg3MjVERTcKKzoxMDhGQjAwMDg2MjdBODlGNDE3ODk0MDRFMUNCRkJERUNGREVFQkUxNkUKKzoxMDhGQzAwMDkzN0Y3RkIyNjVCRjkxNjdCQzFFODlGODY5QTRGNkFGMzUKKzoxMDhGRDAwMDA4N0UxOUMyOUY3OUU4QkE1RkFDMzMwNTdBNEQzODNERjcKKzoxMDhGRTAwMENCNDczNjdGOUQyODFGOUQzNDlGQjBFMTQ5NUZFNEUxNjgKKzoxMDhGRjAwMDEzMEI1MkI0NkU1ODM1QUI3QkRBRThGOTI1MDc5RjY0NDIKKzoxMDkwMDAwMDlDRjUxNzRCNjNGODNDOTQzOEYxMEI4MzQ3MjFCRUQ1OTAKKzoxMDkwMTAwMDM5M0M2NUQzNEJBOTNGMDlEN0Y4MTlEODgzMjgyMzFFQkIKKzoxMDkwMjAwMEQ4N0M5N0Q5RUQyMTRFRUIzNTg0NzY4RUEzM0Q5QjFDRTEKKzoxMDkwMzAwMEMxMkJDOTkyOTBGQkJDREUwRDYyOURDRjZCQThFMEYwMDYKKzoxMDkwNDAwMDgzRThERjAzMkZFQjRGNzNGNjI3NDM4NTg3Q0YzOURDQTcKKzoxMDkwNTAwMDFCMjQyRURGNThGRDBDRTFEMzNCQkUyMjExQkMzMjI0NzEKKzoxMDkwNjAwMDJDMUY2QkI3NTk4Q0VGOTU1RkY2NzNCQkU4NkZCRDA0OEYKKzoxMDkwNzAwMDREQkQ2MUJFOUU5NjM4RjQ2MTgzMjRFNDg0QzZENzk5QzEKKzoxMDkwODAwMDU3M0VGOTkxQUY2NjlDMzg1RjE1MkFENzE3NEJCOUY1NTMKKzoxMDkwOTAwMDBFQjM4QTYyMTc0NkYyRUI5RDYyOUZBRDBGMzIzMTQxRUIKKzoxMDkwQTAwMEI3NTFEMUZENzRBOUM0NDVGNzQyRTE1RDc2ODJGMDRFMTcKKzoxMDkwQjAwMDFDMEE2RjQxN0M3NkE2RTQxQjk1OUVCQ0UxMDRFMTBCODMKKzoxMDkwQzAwMDdBRTAzQjU1N0MzRDQzRjA1OUExRjBEQkVCNjBCNEYwMTYKKzoxMDkwRDAwMENCNDNGMTVCRDAzQTlBM0I0QUY4MzY5RjIwN0VDQjdDNUIKKzoxMDkwRTAwMEI2OUQyNEUwQ0JCMzZFRTcwOTdBNUJDMEY5NDM2MTc2QTUKKzoxMDkwRjAwMDM4RUU3MzBBODVFRkQxOTFFMTAzRjgwNEZCNkJCRDZBOEEKKzoxMDkxMDAwMDk5MEFEOTZCMDAxMzAwOUU2RTc5RDVCMjk0MkM3QzI2RjcKKzoxMDkxMTAwMDcwQjkzRURBRjFGNzhDNEMzRjMxRkU1Qjk2NTk5RDFEREMKKzoxMDkxMjAwMEZGRjk5NkI3NUNFMzJCOEM3RjkwRDkwQTFERjc4NTQyMzcKKzoxMDkxMzAwMEU3MERFRkI5RTZGREJBRjQ5RTZCREMxM0M1RkJDMTgyMDcKKzoxMDkxNDAwMEM3RkZBMzZCREVFRjRCN0Y3NENGM0JDQ0U2N0Q3QUUxQUMKKzoxMDkxNTAwMEUzRkVGRTA0RjlCMTUyQUM5NzA2NDk3N0U5ODE3Q0Y2NEIKKzoxMDkxNjAwMEZCMEM0MUQ3QkJFREZBMzZCQzc5RUE5RjI5RTA2QTJGQTgKKzoxMDkxNzAwMEIwRkU0NEQxRkZFNzBBQUNERjJCRkFFRkM1RkE2NTIzNTYKKzoxMDkxODAwMEQ3M0Y1REQ0NEYxNTU4NUZGMkYxNzU5ODRGN0ZDRTk3NUEKKzoxMDkxOTAwMDZDRkM4MTZCRkZEMUE2NzEzRjg4RDlBNjQwRjA5Q0ExRTEKKzoxMDkxQTAwMDdFMTNBQjIxRjVFRDNFNDY3QkFCMzVBMEI3OTU5MkRGNDQKKzoxMDkxQjAwMDg0RkMyMjZCMDAxMkU4MzdGOTI2MjRFQjdDQUMxRjYzOTkKKzoxMDkxQzAwMEM3NERGNzYxQkQyMzhBQTY3N0VCQzAxNzI0RkIxRTNDNzEKKzoxMDkxRDAwMDEwRDlEQzVEOTkxRDZGQjU5QzZDOTI5MDk3REFBMkZBNUMKKzoxMDkxRTAwMDgzRTQ1RjQ5MzU0OUVDNTk2Njg1NzVGNERCMEM1NDI1RjkKKzoxMDkxRjAwMDVBOTY5NkUyM0MwQ0RENjJGREZDRkE4QThCNzY2Mjc5MjcKKzoxMDkyMDAwMDkzMjZFOTMyMkJGRkNCMzk3MzZGRkIwQzZCMzVGMEUxMDIKKzoxMDkyMTAwMENFOTc0RUMzN0FEM0M2NTVCNTkyQkMzNDI1QzQ0RjY5OTgKKzoxMDkyMjAwMDVDMzVFNTI4N0I1RTdDNzE1NjFGRTAzRjhCMUQ2NTY2RDMKKzoxMDkyMzAwMDA3N0NCNkU5MTIyRUZGQzVGN0NGMjdEREU1NEIxQTJGQzUKKzoxMDkyNDAwMDcxQjVCRjM0RTFGRTlFOUQwRkYwN0RDN0I5RENGRjMwRTQKKzoxMDkyNTAwMDUwOTVGQTJGMEVEN0M3MkEyREVFNUZBMEY5RUE1NjU0ODMKKzoxMDkyNjAwMEVGNjZGMzVDRkZFMUI1NTQ1RURGNTJBQkI3QjJGMkU3RjUKKzoxMDkyNzAwMEFFRjRCNzJDNjVDRkIwMDRCQUNDOTY1MjcxNUNBNUY5QTgKKzoxMDkyODAwMDAyOUJBRjVBQzc3NjhGRTczQ0RCMzVEQkM4QkZGRjJBQUUKKzoxMDkyOTAwMDM2M0RGMzhDNUY5Qzg1OTNDREIzRTlFQURDNzBBQkZBODUKKzoxMDkyQTAwMEZCMTNERTYwRjZEMkMwQ0VBMDg5RjA4NEY3Q0FFOUEwMzUKKzoxMDkyQjAwMDQ0NzRERDM5MDlFOTYyMTUyNzM5N0Q0MEFBNjZDRjIzNTgKKzoxMDkyQzAwMDhEM0FBMDdGQTRBMTMxNjlDOEFDQkMzMUE2QzUwMzA2MDQKKzoxMDkyRDAwMERBQzkxOTBERjExRTQxMUFDQzY1RUZFM0JFMjBEQTYzM0QKKzoxMDkyRTAwMEFBRkUwN0VBNUYxN0RGN0JFMjU1RTNEMTNGRjJFM0U2MzAKKzoxMDkyRjAwMDM1MTMxNUI2REU3NzM0NUJGNDdDQjRCOThCOUVEQjlCRkIKKzoxMDkzMDAwMDdCMjYyQUNDODhERkQyN0MxNzNERURGOUExMjQzMUVDRjUKKzoxMDkzMTAwMEY5QzlCOEFGMzY1QjkxREYwNkZDQ0MzNDQyM0NDRUY3REUKKzoxMDkzMjAwMEQxRkU3NjAzQ0ExMTNGQ0FFMTc0NUIxNERGRDdDMUI0MjIKKzoxMDkzMzAwMDZFNDBCOUM0RTVDQkM2RjhCNkRERjg3RTYzM0Q0QzQzNUMKKzoxMDkzNDAwMDkyNkQzNDM3Qjc0NUQ5M0NBRTJCODdFOUQ4RjdDRTk3MjUKKzoxMDkzNTAwMDFGRTNERjJCNjA3QTgwOTU3NzM1MzY5MDVDRUQ4OUZCRDMKKzoxMDkzNjAwMEQyODE0QTgyRkY3Q0U0RTc5RTQ2MUYzMDkzMDc4QUVCNTYKKzoxMDkzNzAwMDE4NUMwRUJDMDY2MkVFRjJBRTQ2MjZCMDY2MTIzRUQyMTUKKzoxMDkzODAwMDAxMjkzQjdGODUyRDMzQzRDNzQ2QjMyQUU4REM1N0NGN0MKKzoxMDkzOTAwMERBRTc2RTdGNjZEQTVEREU4OEVEODdGMTRCQ0RFRDczM0YKKzoxMDkzQTAwMEQ3OUZGMzkyQkJDQzI0REIyQjgzN0NDMEYxRjhBRjNFN0MKKzoxMDkzQjAwMDI2MEY3NkJGM0NERTY3RTFCQzREM0U0RkY2RTRGRUMyQjEKKzoxMDkzQzAwMDk4MkY4REM2RTcxNjgxM0YxQkJGMDMxMTJFNUYzNjM2REYKKzoxMDkzRDAwMDczM0Y2MDNFNzgzNjdFRUFBQUQ4NzA3RTAzQjVCMTIzMkIKKzoxMDkzRTAwMDgxRkU1NEI1QjEyNzAxNjdFMTMzMkQ5RUJEMDlBNzlGQ0EKKzoxMDkzRjAwMEQ1N0VCRTg4QzY4RkMzNUZEMjExREI1OEIyQjQzNjBCQTAKKzoxMDk0MDAwMDhGQjdGRTc4NTkyNTc5Mzc1MEM2QkY3N0M0NUVEMzk3OUEKKzoxMDk0MTAwMEQ2M0FGQjkzQkNERkI1Q0JDM0NFRUZEQ0FGMzI1MDZFOTgKKzoxMDk0MjAwMDdGM0ZBMjJEMERFNzY4M0Y4OTdEQ0Y0MTk3QTUzMkZGOTEKKzoxMDk0MzAwMEZFRjRDQjgxODYzQjkwMUYwNTdFNzdCRkZDMTNBRDFBRUYKKzoxMDk0NDAwMEYxRkRCQzBDQzg2NzFCRjczNTkwQkM0NTNFNDM3OUIxQjQKKzoxMDk0NTAwMDhCRjE0NTVGMkREMjdGRkQyQkNFNzU1QjVDRTcyRTMzMDQKKzoxMDk0NjAwMEJFRTJGQ0M1RkFDNUExN0U4NkY0NjAxREZFQkJGMENCNTIKKzoxMDk0NzAwMEVFMTU3RUQ5M0RDRDMxN0EzRURENkNEMDczNTc3MzBEM0MKKzoxMDk0ODAwMDdEQ0YzNEM3QTlGQzU0NzMxRDk1OUY2ODM2QTlGQ0UzQjIKKzoxMDk0OTAwMEU2NDYyQUVGNjg0RTUwRjlEMUU2MjY3QTZFNkY0RUQyMzQKKzoxMDk0QTAwMDczNEJGMzE1RjQ2NEZDNEJGQ0JDQTEzOTI1RkNDMDZCNzkKKzoxMDk0QjAwMDVDRkNGMEY3RjE4MDhCRkYzRTVERTMyRTlGNkY5QzkxOEIKKzoxMDk0QzAwMDVERDdFQ0VGMjc2M0VFRjI3OUZBMjc1REU1MDU5QUJCRUQKKzoxMDk0RDAwMDNDMUZCRUUyRUFFRkRDMEZCRUVDMkFDRkVCRUY3MEQ1MEIKKzoxMDk0RTAwMDNGRkI0RDc3Nzk2RURGNDM5RUY1RTIyRUNGREFCN0M3QUIKKzoxMDk0RjAwMEIzMUVEREU1RTJCQTQzQUVGRTAyMzE3N0Y5N0UxNDMyRTcKKzoxMDk1MDAwMDVDNEUxMTdGNzRDNDVBNEI3MkYyQ0ZFMEY3OERBMTJGREQKKzoxMDk1MTAwMEI5QkVDQkQ0N0U2NEZFNTlENjU1ODlGQzkzRjZDNTJERDEKKzoxMDk1MjAwMDk0M0IyNkU3Mjc1QkVFNzhGOUM0QTZEQjQ4RkM2NUMzQ0QKKzoxMDk1MzAwMEYxOTdFNkFCRkZFNUE3RTFGOUE5NjA3RUE4NTc3MkYyQzMKKzoxMDk1NDAwMDgzOTdFRTVFRkUxODIyNjcwNEJGRkMyRjFGRkM2REYwQjAKKzoxMDk1NTAwMDAxQ0M2NEM0MkVDRkFGNTc3M0Q4Nzc2NDlGMDYxMjQwRjYKKzoxMDk1NjAwMEY2OUQxRkVEMzQ0NzdCNzU3MjJBNjlFNkQwOUY1N0Y5NDcKKzoxMDk1NzAwMEU2NkY5NTU5M0Y4MTUyRThDMDc4Njg0MEM5RTNFNzk1QTYKKzoxMDk1ODAwMEY5M0UyNUEwRjFFRkMxNkE5M0VDQjI2MjMwQTZDQjYzM0QKKzoxMDk1OTAwMDAwQUU3OTZDNUVGOTMyRjZGRUU3NDIxRjc2NUMwODk2MDMKKzoxMDk1QTAwMEM0RkExQjM3NDE0REUyM0VBNkI4REFCRERGN0I0NkU2ODIKKzoxMDk1QjAwMEZCMThGQkI5RTk4NzkxMjZGQzBFQTUzMzQ3OTgzNzhGMzYKKzoxMDk1QzAwMEQ3QzgxMzY3MzdGREM2NjBDRjBCNjY2RjU5Q0JERTg2RjEKKzoxMDk1RDAwMEFBOTMxOUYyMDE5NTk2OTI3RDlBMEMxOUQ0QUY1OTk3RDYKKzoxMDk1RTAwMEI2N0NBNTE4NDc4MzM4REE4OTcyRDg4NDI0MUI2N0FFMDUKKzoxMDk1RjAwMENGRkMwNUNFOUJEOTQ3RkYyMUNGQ0FEQTNEOUJDNEYzRjAKKzoxMDk2MDAwMDQ3NjIxRDVFRTQzMzdGMjlFQTNEM0Y1QzNEN0JEQzExMTAKKzoxMDk2MTAwMEU5MDU0OTRCRTJGRUE5Rjg4MzBDNDQ3RjY5REM2NTNGMEMKKzoxMDk2MjAwMEQ5RjM1Mzk0ODQ5OUM4NjE2RkZDNEVFMDRCRDJFMzRENUIKKzoxMDk2MzAwMERDMEZBMjAyQ0E4NzdDRjUwRkNBQjZGRkM5NzJFRDA3MUMKKzoxMDk2NDAwMDhCQTEzRjIzMjMxQzMxMUU2RjgyNjMxNzE5MTc0RTFERjgKKzoxMDk2NTAwMDBBODdBQTI0OTIzODBFQzZBQjM3QjM3MURBQzc3Q0M2MjQKKzoxMDk2NjAwMDQ4M0FDNkY5NDhFNjdFMkEyOTY2MTIzQ0FBQ0VFMTUxNUMKKzoxMDk2NzAwMDk1Qjg5OUM4QzE0NzAzMDIxRUJCMUYzQjZFMjZDNUZBQTkKKzoxMDk2ODAwMEExMkY5Qzg1NkY2RDMwRDE4NEZCMjU2QjhDNEE3ODZBNDUKKzoxMDk2OTAwMDhGQjhFREFGMTkwQUVGQTc1QTNDREJGREI5RUQ0MzgwNTcKKzoxMDk2QTAwMDU2QkUxRjFFNTdBNzYxRkY2RDc1MEQxQURBRDc4QzFEQTgKKzoxMDk2QjAwMDY4QkZEMjFFNUU1MjNDOUNCREJENUVEOEJGREQyODBGODgKKzoxMDk2QzAwMDAzMTgwRkQ3ODVCQzhBRDFCMzNEQkNBRDExRDdDMUQxMkEKKzoxMDk2RDAwMDVBODY4N0NBRkNGRDQ0RTJFRUI4NkU1MTREQzgxM0M3RTYKKzoxMDk2RTAwMDREMTM5QzQxQTNDNDEzRUY5REUwNkFFNzFGQTdGOEVDNUMKKzoxMDk2RjAwMEI4MzY0ODIzQzNERjIxRTBCN0VCNzUyQTI5NERDRjg5NUYKKzoxMDk3MDAwMDI3M0VCRTVEMEVDNERDRjBGRUY5RjBDN0RCMTdGOTdCMjcKKzoxMDk3MTAwMEY1NUM3MDlEMkFCQ0U1OEJDM0RBNEY3NUFDOUE0QTczMzEKKzoxMDk3MjAwMDdGNEFDQ0I5MEUzRTJCRjg0QjFEQUJBNTQ4M0U2OUY5REMKKzoxMDk3MzAwMEJFODc3OEZCNzA4MkZDNUI1QTM4NjE0MDU1MzYxRUFCQTEKKzoxMDk3NDAwMEUxN0E3MEUwRTk1QUQxRUVENzhBNEZBQ0NCNTQwQ0ZERTgKKzoxMDk3NTAwMDVDOTI5MTZBNDI3RUQyMkFEODNBOTI4NkI2QjM5RjQ5RTkKKzoxMDk3NjAwMEQxQkVGM0MzRkZGNzEyQUQ5MzMyOERENjg5NjRCMDc1QzUKKzoxMDk3NzAwMDk0NjMxQzQ5MzFBRjU2RDhGMzFERDlCQzQ2QzFGOENDMEYKKzoxMDk3ODAwMDQ3NzIzMkQ3N0E1OTIxRTBEMTE2MjcwQ0FEOEE0Mjc4MzgKKzoxMDk3OTAwMDNDREZDMzAzQzczQTg1RUI4MzQzMzZGQzU2OEFGQzU2NEQKKzoxMDk3QTAwMDg1QzJCRkE2NDBGOEVENzExOEZDRUQwMkZFQjVDM0MxM0QKKzoxMDk3QjAwMERGMjZFMDI5MDFBMzg1N0M5OTA2OTdCMzAwMTcxQUNFMEUKKzoxMDk3QzAwMEJDOEIzN0M0RjgyNTQyNEUzMTRDMTFEREVDRUZGRjI1NDAKKzoxMDk3RDAwMEZBMjk3NDNFMUIwNTlDMjNDREU3OEQyQzNERUVDNTc5RkYKKzoxMDk3RTAwMEIwRjlEQzg3RjNDQTM3OUY3QjA0MUM2RjI4NUNDRjY4MTUKKzoxMDk3RjAwMDg5ODQxMUFCMjI1NTlGOTNBRjlFMTA3MEY0MkIyMjhFNUIKKzoxMDk4MDAwMDY2NUQzQjJBQkVGQUQ3MDJFN0YxNDQ5NjJFOEYwOUJBNkQKKzoxMDk4MTAwMEVDMTg2RTFFOEY4QTc5RjRDODMwRjcwREY0MzM5RTJFNDMKKzoxMDk4MjAwMEY0MEUyQzcxRDFFNUE4QzA0RjRGQzBBNkNCNzUyRUJBNEYKKzoxMDk4MzAwMEZDNEVDQ0FCRDBGOTNDNTMyMDlGMURDREQyRTUzOTMxNDUKKzoxMDk4NDAwMDlGRkRDM0NEQzc1MUZGNDU1MUZGMjU1MTlGRkNFNzQ3MDEKKzoxMDk4NTAwMDk1MkI1QUFENUFGQzlFMzhBMENDQ0E4RUM3RUFCREVDRjcKKzoxMDk4NjAwMEFDNzc2REZCMkNCQkRFQUJDODBGNTIyM0Q3ODNBQ0RFQ0QKKzoxMDk4NzAwMDZCQ0U3QTYwNUREMDhBRjZEQjVBOEM4OTdFMDJFMDgxRkQKKzoxMDk4ODAwMEY2QUYzNjg4NzY2RjUyQkJDNTgzRkRCRjI1RDYwN0I1QzgKKzoxMDk4OTAwMDVCRDczRUJGRDUwQTUzQkQ3N0YwN0RDQjgyOEZFQzdBODQKKzoxMDk4QTAwMEVGQkFFMTVENjFDMzcxODRFMDREMENDMkYxQkVCM0RFN0QKKzoxMDk4QjAwMDEzQ0FFN0E5QkYyMTc5NDdCMTkyODJFQzFGN0Y2OTkyNTEKKzoxMDk4QzAwMEYyRjc0QTIwRDI4M0ZFQzUwRTI1NDVGRTY0MEMzNkEwNzEKKzoxMDk4RDAwMDFGNzI3NTIwNEVBOTJBMjNGOUEzQ0IyRUU2RUQ3NDQ1RkQKKzoxMDk4RTAwMDIzN0Y2QTAwNTI3MDE3N0JCRkExNTRBMUY4Qzg2MjI1N0MKKzoxMDk4RjAwMDE5RjFBMzFEMjEyNTJEMEFBRTgyN0U1OTBCRjYzRkQ2MDQKKzoxMDk5MDAwMEEwRkMyRjFCOUVEQjhBQkVEODQ1RkQzMDc4QjBERjNCMjQKKzoxMDk5MTAwMDhCQTIzQjkxQUYzNjRFNTIwREU0QUI5RDkzNkUyMEJGQjAKKzoxMDk5MjAwMEY5NkQyRDNDN0ZGMEI2RjM1NURBNjc2RDdBMzk0MkZBNUUKKzoxMDk5MzAwMDc3QUQxMkZGMkNENkI3NENENTQwM0ZGQUVBRDA0NzJGNkYKKzoxMDk5NDAwMDJENjdFNUJFOTY2MjVEM0E4N0U2NDE3MDVCM0U0OEI0OUUKKzoxMDk5NTAwMENENzRFNDIzMzJCODAzNzFDQUE3MjMzRkRDNkQ4RDNDN0MKKzoxMDk5NjAwMEFFQzM3RUNBQjFGREVBMDU0NkJDREI0MEYxQzVFNDE4RDIKKzoxMDk5NzAwMEZCREU1OUE3OTJGRDdBNUI0NUQ1N0MxQzZGNTM5RDQ2NTMKKzoxMDk5ODAwMEY2QzZBNkM1NTUyREU0QzdBQjBCOTFCRkIyMjQ2QzQ4RjMKKzoxMDk5OTAwMEU4Njc4RkNFNTE5OTAxQ0VDQUE1NDYwQkRBOUI5MUQ5QzMKKzoxMDk5QTAwMDIxNDBCRjUzNDkwNTFGMkY3MjA2OTAxRkNBMEYzRDg5RTIKKzoxMDk5QjAwMDZBRjY4Qzc2QTk5MDE5OEJGRDJEQzk3QzA5RUQ5OUJBQjAKKzoxMDk5QzAwMDAwRjlFMUQ5QzRGNkQ3OEVBMzk0MzdGRTIzRkYwQzEwMUIKKzoxMDk5RDAwMDFFRkY0NDE5MTBFRjM2N0RBMzNEODNFRDg3Q0Q2MzhDQzgKKzoxMDk5RTAwMEE2MEJBQzk3MjlBQzVFQTQ0QjgxQ0M4QzAyRUFGNTE0OTMKKzoxMDk5RjAwMDU4MkY1RDYwQkQwQ0FGMTc4MDBCODdDREU3ODMzOENGNDQKKzoxMDlBMDAwMDIzRDREODFGOUVDN0U4QzgyQkFDRTRGNkJCRDM2RUYxQjUKKzoxMDlBMTAwMDdCQkU4RjM2MkZGNDJBQkZDODBCOUQwMzczNzg1RUU4OTgKKzoxMDlBMjAwMEYwRURFRDdDRDA5MUU2MEJFMENCQzIyOThGNUM3RjZEMzEKKzoxMDlBMzAwMEYzRjA3RTYzRkZCODFCNjI5ODdGRDk1OUY2NTVGMUJDRUQKKzoxMDlBNDAwMDkxM0ZDQkM1RkJGMjM1MzE5NDc3OURFNUUyN0JGOThERjMKKzoxMDlBNTAwMDREQjlGNkFGNzdGQUI5MUNBRTgxQzRCMDc0MjgxMUYwRDUKKzoxMDlBNjAwMDFGNjJCMDYzN0U0RjhEQzJFQTQ3RjJENzU3NEI3REMzNkEKKzoxMDlBNzAwMEU2NTk2QThBRDU0MEVCNzZCMThGRDY2RDAwODUwMUFFODYKKzoxMDlBODAwMDlCMEFCRThFRkQ5MDRBNTRGMzc4NTVCNERDQjE3RUZDM0YKKzoxMDlBOTAwMEY1N0I2OEZERkNBMjVDMDZBOThFRTgxMzQ3M0M3QUY5QzkKKzoxMDlBQTAwMEM0Q0IxNzAxNzA5NDJCNEY5RTRGQjZGRTk5RjhDNERGQkMKKzoxMDlBQjAwMDI1MTdCNDdFRkMzRDA1RDY0QjE3NTgyRjUzNTgzREI1OUUKKzoxMDlBQzAwMDRCMkE0OEFFQTgzRDA1RDY0QjE3NTgyRkMzRUJBRDlEOEEKKzoxMDlBRDAwMEFCNzI3RDBFN0Y2OEM1NzhCRkZGMTM5QUFCQkNGNjEzREYKKzoxMDlBRTAwMDIxRjdGN0IzQzNBRTcyQzcyQzc3N0I3NUI2QkI3REM3QzIKKzoxMDlBRjAwMDZDNzc3Qjc1MEU2RjFGRUM4MDA1MThDRjJGNzQ5RDFDNDMKKzoxMDlCMDAwMDNDQzE3NTUyQTMwRDVGM0Y1MjM3QzJCQUQyRjQyMEI2QTIKKzoxMDlCMTAwMDJGNTEwQ0M4OTQ5MkJFNEEwQkJEOTUzMzFFN0U5QUNBMzMKKzoxMDlCMjAwMEQ3N0Y5NTlGQzdDRjZGNTNGNDIwRUUyM0ZGRDZFNzI5NDkKKzoxMDlCMzAwMEE5M0M5RkMwOUVFRjQ4RjBEQUYyRjdCN0IyQjBCN0YyOTcKKzoxMDlCNDAwMEU0N0Q0MzhDOUY3RkYwNDMyODhFNzY4RUIxNTA2Qjc4RjYKKzoxMDlCNTAwMDg1RTFEMUZGMkNDRjdCRjdGNkZCOEE5QTlDQTYzQUY2REIKKzoxMDlCNjAwMEM1Q0MzRTgzQTRDMzBGNzM3RTk5QzJGMzZEMTgxREQwN0MKKzoxMDlCNzAwMDFFNTIyMUQxNThDOUZBNkJBQkYwOTEzREEyODQ0N0QwNTcKKzoxMDlCODAwMDFCMTUwRUI5OTUyMzJGMkZFQjk3MDIxM0NGNTNEMDI3MTgKKzoxMDlCOTAwMDAzNjBGRTlCN0NEQzUwMUMwOEVFMDhGNEQxNjZCQTE4MEEKKzoxMDlCQTAwMDUzRTU0RTA3MTgwMzg2QzQ5M0JFRTIxMkNGMTNBQ0Q3MTkKKzoxMDlCQjAwMDUxOUU5NTA2NEY3NUJGOTc1MUJGOTI3OTFCMUMyRjFBNjYKKzoxMDlCQzAwMDQ1QkY0QTFGRTVDQjlDRjI3RTQ3ODAzNzA4Nzc1M0JGREQKKzoxMDlCRDAwMDZDOTc1NDdBN0M2Q0I2NUY3RjJDNDUyRjMxNEY1Njc2NEMKKzoxMDlCRTAwMEU0Q0JFMUI5MDhDQTM3RjFDNTMzOTRERjMwMjE0QUZCMzEKKzoxMDlCRjAwMEIyQjVBNUQ3QjlGMkMxRkY1OUFENzJGOTg3NTRCREUzMkIKKzoxMDlDMDAwMDVBMDlFM0JBMTU1NzlCN0RDM0YwNzkzMzEzNTdFNEY3MkMKKzoxMDlDMTAwMEFDNTg2RUY2RDVFNEFGMzc5OEE3OEZGOTlFMzlENjQxODgKKzoxMDlDMjAwMDg3OUE0Q0EzRkQ2RTREMEVGM0ZEQkM5MjIyN0Y2M0E3NzUKKzoxMDlDMzAwMDU0MzIxREYzMkRFQzdBNEEwNTkzQjQwQ0FFQzg0Q0QzQzQKKzoxMDlDNDAwMEMyRkQ1RUU3NTg1RjFDRUQ1NDA1RDZFRjkzQ0U2MkVEODIKKzoxMDlDNTAwMEU0QzU3MUE3RkZEMkZCNTQyQTk0Qjc5REYzQjk1RDY1QTMKKzoxMDlDNjAwMDdBMTJFMTE0N0FCMjZEMDQ3RTFGRDFFRTUxRTNDOTVDMjEKKzoxMDlDNzAwMDdFRDE2RkFCN0M1RkVCMEZFNUZFREUxNzZBNzg0MDlEMEYKKzoxMDlDODAwMDM1MTQ2RjhGMjE3RTcxN0YzQjA2QkFBNEZGQzNEOTg3M0QKKzoxMDlDOTAwMEYyQTUyQUY2QkM4NDc4NTg1QkI2MjgzNkRDN0NEOTA2NTcKKzoxMDlDQTAwMEVBRjAyMDVEMTg4OTdGMTYzMjFGNDE3OTMwMEMxQzNGODUKKzoxMDlDQjAwMENDMDUwNzg0MEJGMzdGRUIwQkUzQzQ4NzgzRjY1MjI5QjMKKzoxMDlDQzAwMDg4RkQ5ODE5OTUxOERGODcwNDU3REUzMjczNzMwNkNGMjUKKzoxMDlDRDAwMDQzRjg5Nzg2NERBNDlGNkM2RTAxRjQ1N0RCNzY5MzZDMjYKKzoxMDlDRTAwMDg2NUVGNTExM0RFQkI5RkQ1NEMzRUQyMTkzRkRDMTc5QkQKKzoxMDlDRjAwMDQ0RUI4N0I3QUI2NTRGRjkzOUQ1NkQwRkI1MzVFRjAwM0MKKzoxMDlEMDAwMDY3OUU5QkY3NUM4NUZENEM4NzFBNUVDQzhEOEZDMkY2RjMKKzoxMDlEMTAwMEMzQjczMzdFQzEzQ0ZCOERDRDFBMjIwNTdBOUE3NTJBRDIKKzoxMDlEMjAwMDZGNjg4RTUxNzk3REIzNDFDRkY2RTYxQTdBREU4QzREOUQKKzoxMDlEMzAwMEU3RTJGOUE3NTQ1NzI1QzM1QjU3RUM4MUQ4RTVBQ0NBRDUKKzoxMDlENDAwMEVEMjgzQjI4OEZFRkRFMDU2ODJGNzcwRjk2RDkzNjkwRTgKKzoxMDlENTAwMEMxREQzRDA5Nzg1RTlGN0FFQjAyRENFNzc3MDc0MUY4QzkKKzoxMDlENjAwMDE1REExNkEwNUQ5RDJEREZEMTM2MUZDQkMyQ0YxMEVBQ0MKKzoxMDlENzAwMEJDNkYwMUVFRjc2RjE3RjkwRkEwOThEQTI1MEVCRDc3Q0IKKzoxMDlEODAwMDVBQzA0RkZDNDc3QjU3NkE2RkI1NjE3RjQxNDU5NEUxRUMKKzoxMDlEOTAwMDkxMDVFRTMyOTgwODRGNTBFM0U1MDU4MTZERDQzRjg5NzcKKzoxMDlEQTAwMDAwMzZERUE3MDMzRkUwRTM0RDExRjk2REI1NEI0NkMwMjkKKzoxMDlEQjAwMDIzRjdFRjVCQUFDMUZENURCNTI1MTQzRjUyRTM3MTc0MzMKKzoxMDlEQzAwMEJGQzJFRDYzMDREQzA1RjYwMzRBOTJFQjNCNzE4RTJGQjQKKzoxMDlERDAwMEZGQkExOTQxQUYwOTM4NDZBMjNGNDMwN0Y5RDFFREYzNjUKKzoxMDlERTAwMDY5Q0EwQkI5RjVGNEE5MUVGNzc2RkZFOEYwQTJENkY1MUIKKzoxMDlERjAwMDVCNzg4NkVEMDkzNTM5MjdDMERBNDdDQ0RFNEMyNTJCNTgKKzoxMDlFMDAwMDQ3MTc2NzJDNUFCRTA1OEUzQjM2NjBFNzM5MjY2OUZEMzkKKzoxMDlFMTAwMERCNzg1Njc0NkU3N0FDRjBEMEQxNUZDQUUzNzU0MTcxRDAKKzoxMDlFMjAwMEZFQTQ1MDc4OTNBQTE4NDdGNDAzMEYzNzk0MEY2N0FGMzYKKzoxMDlFMzAwMDk1MjU3QzY4ODQwRENBOEJCMThEMjFFMTlDRTFFNTMxQ0IKKzoxMDlFNDAwMDY2ODlBQjVDNUMzN0MxNTUzRjEyQUY3MjdERjdFQjFGODMKKzoxMDlFNTAwMDc3N0QzRjUxM0E1REUyOTlDN0E3ODRERDY4OTdDRkY1REEKKzoxMDlFNjAwMENFQjNDMDdFMEYxNjI3NTYwNTcwREQzNDQwNEQ4QUUxMTMKKzoxMDlFNzAwMEY1Q0UyRjNDNDRGODBGMERBRUQzODVFRDY2MDVFNTgzOTYKKzoxMDlFODAwMDhCNzUzRDhGOTc3NUZCN0I1REJCNTlDRkNBODZGRDdEN0EKKzoxMDlFOTAwMDA2MkY5QkY2RjczOEFGNkZEOURGQTdGMkVGMjhGNzU5RjcKKzoxMDlFQTAwMEY5NkI5RDY3QjQ1QkY4MUQ1QUM5NkYwQjE1Mjk1OEUyMTEKKzoxMDlFQjAwMEEwQ0ZEOEYxMERBRDA4REZGOENCRDIzMThCQkRFRkZFQ0UKKzoxMDlFQzAwMDUwRTZGMjAwN0E2MkNFN0E3NzZBREMwRkZEQ0M5NDNCRTIKKzoxMDlFRDAwMDYyRThBRjVDNzdFNjQzMzEyMDc5MjdFNThDMDdGRTNDRUEKKzoxMDlFRTAwMEMwRjNDNUNBNDI4OTlFMDBBRDc3QjNCRjk4RjFFMUExMjYKKzoxMDlFRjAwMDg3NjQ4M0VCMjFFNTM1RDQ4NzNFOEJFN0UzQUIxMERGNDYKKzoxMDlGMDAwMDY3QTI1RDU0QzNGREQ1MjFGMTlERTg1ODk5QUQzRjQ4NDYKKzoxMDlGMTAwMDU3NEZGOUVGMzRBRUQ3N0Y4NzQ5MUIwQ0NFRUYxNTlCMTcKKzoxMDlGMjAwMEY3RDBCODkwOTYxQUQ5N0FBRkIwQTAxRkNGMUY4MUIwRTIKKzoxMDlGMzAwMEZCMjZGMkE2NTA5QTQ4OTM5RjZGMTJDM0E3Q0NCRTRGNDAKKzoxMDlGNDAwMEJFQjhCRkM1Q0Y3MDZENUNBNkZCNzA4OTU0MkQ4RkZCNkEKKzoxMDlGNTAwMDQ4QzAwRERBOTE2M0E1RTNFQ0Y5M0RBNDE3Q0FFMzlCNzEKKzoxMDlGNjAwMDUyODBGQTdCRUQ5OTBGMzUyMTVFMDI5OTdGMDI4M0UxRTEKKzoxMDlGNzAwMEVEMUYyN0E1QzA0MEZGNkY4MEMzMTVCOEFDMDc0ODNFNTIKKzoxMDlGODAwMDU3RjcxMDlFQkRGODVBMzc4OEY3QjQwQkVGM0YwOTcwQUEKKzoxMDlGOTAwMDdGN0UyQ0M5REIwREQ2NTM1OEJEQTk0M0VCNzUwNzdCREIKKzoxMDlGQTAwMEU2QUI2OEJGNERFMTc4RjQ4RUYzNUU0MDEyRTc3NkRERjQKKzoxMDlGQjAwMDcwRDhGRDdBRUJERjEyMTA3MTZEMkQ0REYxOEQ2N0NFRUIKKzoxMDlGQzAwMEJDMjE4NjdFRURDRTI5OENGRUI1RjlFOTdGNEI4MEU3N0EKKzoxMDlGRDAwMDVCMTlDNzZFMjJCOURCM0Q2OTIzQzUzM0Q3NTU2RjI2QTAKKzoxMDlGRTAwMDdCRjIyOEIzMjNGMEZDNzQ3NzY1RUVGNjlEQ0QzQzNGMDEKKzoxMDlGRjAwMEU2NUNCOEJCQjE4QUQxQTdGMzc5OTlGQ0I0REU3QURGMEQKKzoxMEEwMDAwMDA5NTRCOUUyOEQ1QTg1N0IzRkM4RjhBRjBGRTVFODQ4OUYKKzoxMEEwMTAwMEZDMjc0NzFFRTBFQjcyOTQ3Qzg3NjYyMTNGQ0Y1MEQ2MjkKKzoxMEEwMjAwMDhFRjY4MDVGOTRFRjBFMUM2RjEzRkE5RkU0N0ZGOUYyQjcKKzoxMEEwMzAwMDFFNzBFNjRCQkUyRkY4MjIxM0UwNzIyNjU4QzFGOUEzMUEKKzoxMEEwNDAwMERCNkY0OTRFRkFDNUQ4RkJGOThFNzZGOUU4OTY4RjFGN0IKKzoxMEEwNTAwMDFFMTdFQkUxN0QyNURFNDRDQTVGNDlFOUI5RTRCMzEyN0UKKzoxMEEwNjAwMEZCRjQyRjE3M0FDRTdCQjUyQjY5NEQ0N0Y4NkIzNjRBNzgKKzoxMEEwNzAwMDRFQkJGNjFCNjYzMkE0MzlGNjI3QTFEODA1QkY1Qzg4MTMKKzoxMEEwODAwMEZCMUYyNTlFNzM5RkZFMjlEMzhDNkE2Q0ZDOUI5QjYxRjIKKzoxMEEwOTAwMDQ2MzU5RTRCNTBBQzAwRDZCQjU5QzkzNEQyQkVBMkRBNkQKKzoxMEEwQTAwMDQ3RkVGMjc1MTVEN0VEQzUzQzJCQUJENjE3Qzc2QTZEQzkKKzoxMEEwQjAwMDE1QkIxQUFCMENFNDk3NkQ5NDY3RkFBNkJFMjQ4NkZEMTcKKzoxMEEwQzAwMDA0NjJFQThDRUFCMTk0REY5REMwNzk4NzZCNTlCRjBFQjgKKzoxMEEwRDAwMDdBREJFM0RFMkRGOEY2NUJCQTM5NTlFM0YyRTAzNEVERDIKKzoxMEEwRTAwMDJGMjAwRkRFODc3ODhDMUI1OTBDQ0YzOUY2NTc0M0YxQTAKKzoxMEEwRjAwMENDRjMwNDNBMkI4NkUwNzk4RUU2RTBFQjAwRTI3OTA2QjkKKzoxMEExMDAwMEM5RkI5Q0ZFMEI4NkU3QjM1RDc4MDY4NkU3QTk1OTNDNDAKKzoxMEExMTAwMDc3NTc3MDNDNzdENjZDRUVBQTcyRTJCOTY2RDdERTRBMDIKKzoxMEExMjAwMDAzQzdFNzc4N0U0OEUzRTc3MzQzODg2NzA3OUM1RTNDOTQKKzoxMEExMzAwMDg3MjU1QkZGN0NBQzFERjlENkNCRjcwQ0VGN0Y4RkYwNEEKKzoxMEExNDAwMEQ4RUYzRjBBRkM4MkVDRTFCMUUzMTMxNzZBRTQzRjQ5MjAKKzoxMEExNTAwMEQxRkVFOTRFMjlBRjVFQkE0NDJCNDAyRjc1OEE3NTc0NDMKKzoxMEExNjAwMEE3QzAzRkVCRkYwQkQ0N0ZBOUU4REZENkI3NDIxRkZFQTUKKzoxMEExNzAwMDgzRjY2RjBCNTAxRkIyN0FDQkE4OUU5RUEyN0RGMDYwMzMKKzoxMEExODAwMDNEMEI4NkQ1QTNBQ0REOTVDNDQ3NjE0RkZGMjY4QzRBQjUKKzoxMEExOTAwMDFGQjM3RUFFQTM3RTM0Q0ZGODA2OUM5NDlFNjdGRERFOEYKKzoxMEExQTAwMDQ0RkQyQTlFN0U0RkIxM0RDMUM2RTkyNkZDODEwNzBGQzIKKzoxMEExQjAwMDdGNjYzQjI2OTZGNEYwODNEMkUzOTI3QjM2M0Y5NDJGNjIKKzoxMEExQzAwMDc3RDdDQkFGRDc3QUI4NUUxQjZBRDcxMERGRkVCQzczRTgKKzoxMEExRDAwMENGNkVEQzI3QkRBOTlCREY0NkJDOEU3NjFERDg3NjYwOEUKKzoxMEExRTAwMDU5MjhCOTRERTM3NjIwOUQ4M0IwQkU1MTk0NkU2MzZEQkUKKzoxMEExRjAwMDk1RTMzRDUxMUU3Rjc3RUJBM0YxQjYzRDU0Q0RGNTQwN0QKKzoxMEEyMDAwMDcwOTQ3QTY5OUZCMEQ3M0FDNjMwMTk1NUNDOUVGRTQ0RjcKKzoxMEEyMTAwMDUzMkUzRkMzMzM5QTlEQjdFNkI2OUI3RjgzNzMyNDNGOEIKKzoxMEEyMjAwMDUxODJGQzZCRURCMUNGRUNFODYzQjQzMzFCN0IyMDk3MUMKKzoxMEEyMzAwMDlDNEY4NjkyM0ZDN0Y5QTlCQTY1OTI3QTE1RkU5MTdDMjgKKzoxMEEyNDAwMEZEOTYyNkFDOUQ3QjY3OTJEQ0VEQzdCQzQ2MTA3MjE4NkMKKzoxMEEyNTAwMDRENkJGNEM3NDUxOURFMEU2OUU0QzI4OEEzN0ZBREVDRUYKKzoxMEEyNjAwMDYyNkIzRUNBQjEwQUM2MkY1ODdGNUNEMzNFMjk5OTJCMzgKKzoxMEEyNzAwMDNFNkVFRjdGMTA4ODFDRkI5NzcxOUY5QjlEQTQ3Q0I4NUUKKzoxMEEyODAwMEM1MzM0N0Q4REZCNEQ4RjZFQjZGNzE1RTg3RDQ5RTBCMjkKKzoxMEEyOTAwMEE2MzhGMDZFRDNFOTBFMjk3MUUxNzkyODRGRTc3MTNBQkIKKzoxMEEyQTAwMDE1OEY5MjRFMDM4MjRFQjA5OEU3QTE5RTdCRUM1QzhEOTkKKzoxMEEyQjAwMEZDOEIxMTVGMDJGREYwNDE3RjhGNUVFMkUwQTM3MTNFRjcKKzoxMEEyQzAwMDQ4RjY4RTAyRkU3QUU4REY3RDFDRjc3RjYxMUZFRDc3OEUKKzoxMEEyRDAwMEJCQzNDQkJFODNGN0VGNThCQTFBOUY2MjY0QzdFRDY2NjMKKzoxMEEyRTAwMEZBQkVDNEExN0ZCQ0ZFQUFDMTdERjRFMkMyRjI2NUE3OUEKKzoxMEEyRjAwMDU4NzMyOERFOUZCRDNGQzg5RDdGQzAxOEFCMDZGMzg2MEMKKzoxMEEzMDAwMDU2Q0JEQzdGN0U2N0QxRDcyODBGNjE4RDE1RDAwM0E1OTIKKzoxMEEzMTAwMEE0QzdDOEZFNUIyN0YyRDkzQTQ1M0VEQjVBOTFDRkU2ODcKKzoxMEEzMjAwMEI3NTY2RkM1RkE5QjAwMTJFODk3NkM5OTk3QTI3ODdGOTEKKzoxMEEzMzAwMDU0RDFGNEQ2MzhDMjkxOUE4MzdBMjI1QTZBQUZDRjFGODkKKzoxMEEzNDAwMDJGQzRGNTM5NThCNkJFRDFERUMwRTYxQjhERDlFNThERDgKKzoxMEEzNTAwMDY0QkZCNUI3NzA3OUYzRDlFMDBCMEJBRDdBNjRDNTNFMzUKKzoxMEEzNjAwMEEyQzdBNkJBMjVDNTMwOEMzRjMyNUNFQkNFOUYwQjU1RjkKKzoxMEEzNzAwMDg3NUM2NUFEQTJDNDU1NTY0QjI3MEMxQkI3RjgxOUZBN0MKKzoxMEEzODAwMDg5NjZFMTdDRkEyMDhFNzBFNkM5MTc5RTEyRTQ3NkI2RTMKKzoxMEEzOTAwMDJDNEZFQkNGNjBCRUMxRDk2QTdDQjM4MUU3QThERDc5RDEKKzoxMEEzQTAwMDlDRUQ0MTZFMEYzRThBMEUyMThBRTMwQUJFQThFMzcxM0UKKzoxMEEzQjAwMEQ1QTJCOTU1QkQxODA3ODIzMTlDMkYzMDRGRDBDOTBGOTcKKzoxMEEzQzAwMEY5RjhFMkFGOEQxRjVGRDFFMTE4RTY1RERDRDIxQTA1MjYKKzoxMEEzRDAwMENDNzNCOTY1RUVBRkUyMTkwM0U1NkE1RjBDRjMzM0RBQ0IKKzoxMEEzRTAwMDk4MjQ2OTY1REYzN0NDRkQ5NTkxQ0I5RjdDNDA0QjJFM0YKKzoxMEEzRjAwMDBGMjJGRUMyMDlCMkJGMjIzMzkzRjRGQzZCQ0Y2QjI0NTEKKzoxMEE0MDAwMDdBREUxOUU0N0E2RThBQTBBNzgyRjQ5Qzk5QTVFN0JBNEQKKzoxMEE0MTAwMDNBNDZDRjk5RDk3NUJFNEVFOUQxMEFBMUU3RjkzODdFRkYKKzoxMEE0MjAwMDE5Q0FBMUZGQTY3RERCQ0Q3NUJFNDY5NDQzMDZGNDUyNDIKKzoxMEE0MzAwMEZFRUQ4NjVBOUYwRkZCRkY2QkUxQzU4NjJCM0M5N0M5NEIKKzoxMEE0NDAwMDQ3QTI1MzI2ODE3QTYxNDM1Q0YxQTExQ0Y5OUJFM0MzQzcKKzoxMEE0NTAwMDhGRkFFODdEMDE3Q0Y4QzM1QzdDQjg1Q0QwNDMyRURBQ0YKKzoxMEE0NjAwMEQ3OTQyQkVGNkU0QTUwNzJFMTY1M0REMjhCRTNBNTkxRjQKKzoxMEE0NzAwMEUzQzVGNzU3QzFDQkEwQkVEMDkyMkI5MTZGQUU4OEE5OTAKKzoxMEE0ODAwMEI0RUY1NjRBQkEzQTI4NUVDNEY0MUVDNjFCNTZDOEE2OTQKKzoxMEE0OTAwMDgxRjEyNkY4OTY5RkRGQzc4NDdBREJBMTVGRkUxODBDNTYKKzoxMEE0QTAwMDcyRkI0NDVFQkY4OEUyMTg2QzZBQjgyRjYzRTU4RjBEQkIKKzoxMEE0QjAwMDFCMEY0REZCRkI5REY3OTQ3OEYzMzI1RTBCQkFFMzEwNTQKKzoxMEE0QzAwMDQ3MkE5NjE0MjNCREYyRjVGNzc2RjM1RTFEQ0ZENURBNTEKKzoxMEE0RDAwMEY5MTlERUVGMkI2NDQ4RTUzQUI3Mjg4NTM0NjE2N0Y2NTEKKzoxMEE0RTAwMEFBODQ4NzFCOTlBRTlEODZGOEY4RDg0MjNDOUZEOTU5MUIKKzoxMEE0RjAwMEQxM0E4RUVDMTg3MUFFNjFDNTk2Njc3NUM1MDFFNzBBNTEKKzoxMEE1MDAwMDg1QTlCRkU5NDNFNzYzRTM3NzA1QUFDOTEyNDdGQkY0Q0UKKzoxMEE1MTAwMDVFNTc3QjZGQkJDMUZFNDQ3QjY2QjdGOTQzMEMzRTUzNkQKKzoxMEE1MjAwMDQ5RURDNTc4QjM3RDdFNDNERDMyM0Y0MzZBMzMwRkRDQUUKKzoxMEE1MzAwMDhDOEUyNzA1NzdBMUU3Mzg4RTNDRDBENjgxRkI2REI0OTEKKzoxMEE1NDAwMEJGM0VDMUY4RTRCNzhGQzhGMTU2RjZGNThBQkJDRjU4QzUKKzoxMEE1NTAwMDg4RTc1QTBGMDFFNzE3OUIzRTZGM0REMDM2MkUxNzVGRjUKKzoxMEE1NjAwMEU0QTNDRjc5QTEyMDg3RTcxNEYzRDc1OTIxMEY3RkY1MTIKKzoxMEE1NzAwMDVFNTQ5QzgxNTNDRjVGOEJGM0YxOTdDMENGRTE1RThFMjkKKzoxMEE1ODAwMDBGQjg2QjZDNEUzQUU1OUJDRjIwOURFQzc2ODJDRkJDMkEKKzoxMEE1OTAwMEVERjNCNTYzN0M5NUUwN0M5NTg5OUU1RDA4NUYwOTc4NTUKKzoxMEE1QTAwMDZERkE5RDJDQkMyM0YxNTU2MDhENkNFMDc5QUU0QTI1ODcKKzoxMEE1QjAwMDQxNzJCM0IzRjQzQTRCRENFQjQ4Rjk5RTcyQ0ZCNDhDRTIKKzoxMEE1QzAwMEI4RDc0QUU0QjU0MzA2RUQ4OTQwQTk0OTc2NzQ0OERDMUEKKzoxMEE1RDAwMENGQTM1NUJCRTVBNjEyNzM5RjlCODgzNTI1MzI3NkJGNjYKKzoxMEE1RTAwMEU4QkYwQ0FDNTE2OURDQzFGODcxMTgzMkMxMjg5Njc5MEEKKzoxMEE1RjAwMDlDMTRDNTFGRUUyQjAyRjA0REYyN0JCMjc2MzlGRDlFMDYKKzoxMEE2MDAwMEY2NTMxMUY5NkE5OENCNEJGN0IyQzFFNzQ3Qzg2RjcxOUYKKzoxMEE2MTAwMDhGMTNCQjc4RjhGQzFBNkY3RDA4MkJDNjIxMDdERUYzNzkKKzoxMEE2MjAwMEI3NTNFMDkwNjM5RkIzNDFEQzJCNkFFM0RGRENCMjk0NjUKKzoxMEE2MzAwMEYyQ0E4M0UwOEJEM0ZFMjBENjYxRTFCRUFGNDNBQ0U3MjQKKzoxMEE2NDAwMDRFN0NDRUM1NzNCQ0QzNzVEQUFGNTVGMDc4OEIyNTdEQzMKKzoxMEE2NTAwMDk5RkMwQ0Y2QjkzMzdCM0NGQkJDOTk1RDZGMjRGQUFGRDcKKzoxMEE2NjAwMEM2RjU5NDYzN0RFRjBBNzE3RDNBRjBCNUQ0N0ZFMzNFODEKKzoxMEE2NzAwMEM0RkExMzE4NzgwRkM1RTNDRDFGNTA5Q0ZBOUNDQzVCMkQKKzoxMEE2ODAwMDMyRkFGNzlGMDk4REEzN0VDRUU5RUY5MzE3MzhENkU1MEUKKzoxMEE2OTAwMDM5RTIxQzA3NDBBRjlDRUI5Qzk3REYwQUVDNDI3RTc4QzYKKzoxMEE2QTAwMEVBMzBERjhGM0Q3NUY4MDhEOUUxNEZGRERFOTc0NkJFRjEKKzoxMEE2QjAwMDdCRUE4M0UxRjMxRTFFMTdGQjIyQkJERUUzQkZFN0Y2NTYKKzoxMEE2QzAwMEQ5RTM0QTZGNTEyRUZCMkUzQjdFOUFFRjA3MEZCQkY5NjEKKzoxMEE2RDAwMDE1OTQ1RTE5Rjk2NUUwQTY3RDMyRkEwNzFFNkZENkE0QkYKKzoxMEE2RTAwMEQ3OTlGQzk5MjdFNjc5Q0VFMTNFMTlGNzREMjNDRDZCM0EKKzoxMEE2RjAwMEFCODdCRUY2M0NCN0Q2NzM3Qjc0NkJGRDkxMTBGQUZGNDcKKzoxMEE3MDAwMEI3M0VDMUU3N0JCNDlFOUY4RkNEMDdFRkFFNjY5RURGNUQKKzoxMEE3MTAwMEIxRjU4OURDRjg2ODk4QzdGN0M3MEQ3RUEzMzRBNzVENEIKKzoxMEE3MjAwMEVCMzk2N0I1NDA5M0RERTdCQjRFMzE3Q0JCRUJCOURENjAKKzoxMEE3MzAwMEI1NUI4OTg3NEYwNDlFQkNFQkJCQUVBNzExREQwODUxMEEKKzoxMEE3NDAwMDQ4MzZDRTk3MDhCREZCNUQ3RTkyMDM1RjZGRjkzMkU2MTcKKzoxMEE3NTAwMDZCMkMwRDlCMTJFRTY1QTEyRkYzMjQ5QjU3ODlBOTI1MjUKKzoxMEE3NjAwMEYwREU5OEUyRkExRTY5MzJFNjc3QzQ3ODFFRjkzN0FGNTgKKzoxMEE3NzAwMDdFMkRGMzMyMkJERkRDNTQ0NDY1NUQzNzlFNUI4NEY4MUQKKzoxMEE3ODAwMDI4RDVDOTlGNzIzMzdBNUM0ODQwN0Y3MzJERTYyN0QwNjUKKzoxMEE3OTAwMDdBNjRFNUMwQ0QzREU3QTEzRjRCMDEyRTJGOThDNTZCRjQKKzoxMEE3QTAwMDI4RTNFODVFM0Y3MkQyRTQ5MzFCRUM0NzNBMUVDOEI2M0EKKzoxMEE3QjAwMENCM0I0RjRGREU2RDAwOTYwQzJGQzc5NkYzRkExNkZCN0UKKzoxMEE3QzAwMDgzNzJBOEM0OTM2N0EyMkY3NEU3QTU0NDNERkQ0RjQ1NEIKKzoxMEE3RDAwMDVCQjVBQzgwQkNGMjkzMUM2NzBDNkNEMzBDREM2N0Q3MDgKKzoxMEE3RTAwMEZBRjQzNEQ2MDc2MzBDRTYwRDg2MUI5OTgxQzRFODM5NjgKKzoxMEE3RjAwMDQ2MDcwOUNERTU5MUYwQkUwRUEwOTFGQkJGMzNFMDNDQ0EKKzoxMEE4MDAwMEE3RDM1MEM0RTVENTg0QUI2RTk3NzA5RjcxMzRDRUI4OTIKKzoxMEE4MTAwMDYyMUE5NkRGQ0M5OTdGRDUyRUU0Qzc2MDU5REY0NUYyRTYKKzoxMEE4MjAwMEI0MDM3QUY3NTI1QzIwRTkyMzNCRkNFNkRBRDYzMUNFNUEKKzoxMEE4MzAwMEY2NEI4QjI0REIxRjI4RTgwRjg2MzIzQjRCN0YzNjNGREQKKzoxMEE4NDAwMDMzNzhENjVGOEVGRUIxRTU2RUJDOEY5NjJFRDcxNDcxMkQKKzoxMEE4NTAwMDc5MzUxMkZENEY3NjFDOUI2RTQzRDc0NzhCQTBEQjAzRTcKKzoxMEE4NjAwMDE0MTdFREFFMTk1RUVFMEZBNURCMzZEMjc3RTFEQURDMTgKKzoxMEE4NzAwMEY5QkFENzE1NDkyRTc5NkMzRjM1NDg0MTlDRjE4OTJDOUUKKzoxMEE4ODAwMEVFNjc5NkM3Q0Y2RUJBN0YxOEY5MjMzQkVGNjc4NjZDRTkKKzoxMEE4OTAwMDNGRTM4QzFFMTNFMzU2RTNBMUM3QzQ3M0RGOENBN0UzMjkKKzoxMEE4QTAwMDE5NDBGRTM2MDFFRDI0NjYxRTExMUZDOTlFRkREQzQ2Q0YKKzoxMEE4QjAwMEMxNDc0MTc4OUVEQUIzNTU2MEU5QTQ1NzUyQTAzQkYyRjQKKzoxMEE4QzAwMDU0Q0U5M0MzNzFGNDVGQUNEM0MzNzQyRjEyQ0E0RjlFOUUKKzoxMEE4RDAwMEJGQzNGM0ZDOEIzOTQ4MENCRkZEODBGMjJENTQyRTgzOEYKKzoxMEE4RTAwMDg1N0VCRjdBMDFBRkM0RjgwRUYzRkIwRkJDNzUwMEY3OEQKKzoxMEE4RjAwMDJCRTE5OTZFM0EyOTA3OEEyOEFGMkRFNDNEMjc3MkUwQjMKKzoxMEE5MDAwMDlBNkI2ODdGRTNBMUUzNjhGM0ZFQkY1RjI0RUNGRjIyNEMKKzoxMEE5MTAwMDA4OTNERDI0REFFN0NCREZCM0VEN0UxQkJGQzZCMTA4QjkKKzoxMEE5MjAwMEU1RUQ3NDFDOTAwODFGNjU5MzEzRjdFM0ZFMEM3RTI1N0MKKzoxMEE5MzAwMDAzQ0ZDQjA0MTNGM0Y2NTZGRjc0MTY3RDFGMUE1NzQ4NDYKKzoxMEE5NDAwMDU0MjI1RERFM0E1MEE0Qjc1NjE2OTIyRjk5NDhCNkIwRkQKKzoxMEE5NTAwMEZBQzY4MTQwQkNENTIwRDVFMkQzOTA4RTdEMTJEMTUxNkMKKzoxMEE5NjAwMDFBQTc1MUJFRDZFQTdGRjdERjFGMTgyNjVGQ0I4RTNGQUUKKzoxMEE5NzAwMDBFOTYxNThCRTI5QjVEQzY3NENEMjk0RkNBNDJDOTVGMDYKKzoxMEE5ODAwMDE2MzlFM0Y2MjJBRUVCRjVBRjA3QzNFREIxNjc2MEY0MUQKKzoxMEE5OTAwMEYxOEZEMkYxMjBFMkYyOUY1Rjg0RjY0QjE3QUUwMTlFNTkKKzoxMEE5QTAwMDE3NDc3OTdBNURFNUJDRkM0NkQxOTQ0NTE4REZFOThBMDIKKzoxMEE5QjAwMEYwNzI3MUY4Qzg3OTJEMjQ2NzEzRTRGRjVCQzMxODBFOTkKKzoxMEE5QzAwMEYxMDg3QkZERTIxRTQ5NjNGQzg1QzNDODBCRUZGQ0Q3OTEKKzoxMEE5RDAwMDJCRkIyODRGRkU5RUYwRkVGM0NGNDBGQUM0N0RFNDhGQTAKKzoxMEE5RTAwMEJCRTdGQTZEQUVGQjkzREVENDFCREUyRkEyRjVBQUI3NTAKKzoxMEE5RjAwMDYzN0M3QTYyRDJDRUQ3NzRDNzQ1MjZBMEQ2NjBGMzlCMUIKKzoxMEFBMDAwMEM0MDhFMzY3NzgzOEVENjI2ODQ1QjZBOUJDQUNCNzFDRUEKKzoxMEFBMTAwMEY3Qzk2QjRCQjc4REUxRTdGRDE3RUE4N0M4NkU5NzI5MzkKKzoxMEFBMjAwMDNFOUQwRjVFQUY5RDlFNkZCRTc2QkNERERCRkVBRTA4MjkKKzoxMEFBMzAwMEJGNDdENTFCMTdGM0ZBODMxRTQ0RkM5NjUxRkUyQzYwQ0EKKzoxMEFBNDAwMEZFNkNBN0JGMkY2NzNDRUE4RDIyRUVENzZDQUY1ODk0RkYKKzoxMEFBNTAwMEI4MUNFN0E1OTg3MzBGMzI3Q0RDNUIxQUE1N0Q5MEZGQ0MKKzoxMEFBNjAwMEEyREE0QjdEMEU3QkMzQ0U2NzUzQzQ3RUNFNUY5QTIyQTMKKzoxMEFBNzAwMEI5QTg2ODY2RDcxOTE4MkY3QTVFQzYxNTA1MTUzRDNCMkIKKzoxMEFBODAwMDI1QjRFN0VERkIyMDEwQUQxNzRGRTVGM0M1NzkwNTgwNDAKKzoxMEFBOTAwMERCQzU3ODVFRTFCODYzREUxMDczRjhDMTUwOUU4OEZEQjcKKzoxMEFBQTAwMERCMjlBMEY3QjRGMEFDQTFGNDlEREZDNUYzRDA2MzU3NjgKKzoxMEFBQjAwMEYwRjM0RDEzOTVEQ0Y0MUU3Rjk5RUVFM0YxQUY1MzRCQTkKKzoxMEFBQzAwMEU3N0NFREYzQzUzREVGOEFBOEI0N0VBNkU4QUJGN0UyREMKKzoxMEFBRDAwMDNENzcxRDU2NzExMkUzMzEwM0ZFNTQxN0NBQUIwREZGQ0IKKzoxMEFBRTAwMEU4ODNDRDM0RkZEMUU5Mzc0NTRGRDAzRDdBMTUyOTdEMzQKKzoxMEFBRjAwMDNBMkVFRjdDRURFRTQ4RUQwQTEyOUUyRDlFQ0ZFMEZENDIKKzoxMEFCMDAwMDdFNzk5OEVCOUI5RTk0RUYzNkZDNkUzRTlEREFFOUM3MEEKKzoxMEFCMTAwMDdENjc4Q0VGQUJFRDdENzgzMjk0QkMzQ0VDQjBDRjc1QUIKKzoxMEFCMjAwMEQzMjIzRTlBOTJCQzk0RTRDMDQwNTk2MUY3MkYwQ0UyQzQKKzoxMEFCMzAwMDJCNEYxRUYzMUQxMUFFOTdBNzE4QUI3OUJGOTM4NkY3NjUKKzoxMEFCNDAwMENCREE3OEY5QTA0QjE2QkYxNzIxMTM0NDM4RkM4QzkxNEYKKzoxMEFCNTAwMDEzQjgyRTZFRTQ3MkUyRUUzNUJCRThCRDcyNjNERjdDQTMKKzoxMEFCNjAwMEZFQkRCRjA1RjVFQTFEM0VCODIyOTdERkE4MkRDMkUzNjIKKzoxMEFCNzAwMDQxOTNDRENDM0FENDFCOTM1MzNFNDBGQkY0RjY4ODQxMkQKKzoxMEFCODAwMEVGQzc1RkM2RjFENDM1MDlFMjM4RUM2OUQ4MUZGQkNGQjcKKzoxMEFCOTAwMDlFNEE5NUY0RDJEODUyQTBGQjkyQzZBRTAxRDJEQjYzOTYKKzoxMEFCQTAwMDZCMjA2REIwNzJEN0NFQjkzQkQxQkU1NUFCMjE4RUFFMDYKKzoxMEFCQjAwMEVCREQ5NTM3NTg2ODBGNkNBQTAwMTNGNUI4RkY0NkI2NjEKKzoxMEFCQzAwMEMwNTg3REQ1RjBBNTMxNTBCQzI5QjU4Q0VFNjk1OUNCNjQKKzoxMEFCRDAwMEQ2MjU1MjYzQUREMTQwRjZDM0QxMTgyRjA3MkFGODM5RDQKKzoxMEFCRTAwMDk4QUUzMzE1ODJDM0JFN0Y5Q0VDNEVBNjFGRkNCNUZEMEMKKzoxMEFCRjAwMDI2NUVGRDY1QzAxNUQ0OEY3RjJFQTdBQjcxNTczRDlEOTYKKzoxMEFDMDAwMDUzRUIxQUYzMTBERDRCNjM1RDAzM0NERTY5QzdBNTE1RkEKKzoxMEFDMTAwMEM2NUY2QzlDRjYyQkY0OUNGRTk1MjNBMUU0Qjc5REZDQ0IKKzoxMEFDMjAwMEMwRjg5MUU0NEMxN0U2MTNFNEMwNjc2Nzk4RTNGMzBFQUQKKzoxMEFDMzAwMDIxRTcwNkZDRjAyOThBOTdCNEY4RTgzRTE3NkZGRDY1MTYKKzoxMEFDNDAwMDAyRkY3NzVCNEJGRUUxMEMyM0FCNkZFQ0VGMDc4QjBDNDUKKzoxMEFDNTAwMDk3N0ZBM0UyMDM5NUU2QjM0OEJFMTE3NEE0M0JCMzkzNzgKKzoxMEFDNjAwMEU4RkUxN0JDMThGNDc0NUE5NjE3OTQzQkNFQjNEQzFCNUQKKzoxMEFDNzAwMEVGODVDOTg4NjdEQjJFQUFFNUY2OEM3REVFOTFFMTIxOTAKKzoxMEFDODAwMDczMEZGQkFFRDcwNUU4N0VEMUYxNERCOUVEMjNCNTQwOEEKKzoxMEFDOTAwMEZCQThBQkM4RkM2OTE4RjMwRDQ0M0VGRkQ3OTcyRjIxRTIKKzoxMEFDQTAwMDdEOUZFRkRFREFCQjIzNUNDRURGMjU1OTk1MUQ0ODlGRTMKKzoxMEFDQjAwMDQ5RkNGRTE5NkZCRDgzQzI1RTY0RjYyMEYxQ0QyNjhCODAKKzoxMEFDQzAwMERGQkJCNTg5NkQ3RDFFNDVCRUJBOUVERkYzQzdERUYzREYKKzoxMEFDRDAwMDczMEUwNkQwNzlGMUQ4MERDQkI0NUNFQkQ1MUI1N0NFRjMKKzoxMEFDRTAwMEI3RUU4MjZBNUYzMjU3QkNBNTU2RDBBRDI0QUVDRkY3MUYKKzoxMEFDRjAwMEYxRTk4M0U5QjA0NzhCNkE4MUVFRkZEMjE5N0REMEY2ODYKKzoxMEFEMDAwMEFEODA1RTRBQkFERkQ4NTg1Mjg5NzFBMTVCNkY1NDBEOEQKKzoxMEFEMTAwMDdDN0Y1RjY1QUZCNTEwRTcyRDQxRUY4Mzk4MjNBM0Y0RTcKKzoxMEFEMjAwMDlBNzgxRUJEMjIzRUNFRTg3NjlDRjcyRUFFNzg5NENFNjEKKzoxMEFEMzAwMEMzREZGRTU0MDAwMjc1NzgzRkE5RTdGN0Q5MzhFOTIzNEQKKzoxMEFENDAwMDY3RTk2Q0VCQUI3Q0YzMkJGNDc5MEJDMzk3RjNGNzgwREIKKzoxMEFENTAwMDMwODgzMzM4OEYyMjBCMENCQTFGRDlFODI1M0JGNEE4NzIKKzoxMEFENjAwMDE1NDRERDBBNDY3RDJGRDcyQkVEMjE3ODMwOEVGN0NDQTgKKzoxMEFENzAwMEYyRjJBNkYwNTRDMEZCNjczNUE1OTdFQzc1NERBRkEyNzMKKzoxMEFEODAwMDcyNTE3NUEyOUJFQ0YzNjlEQkY1NUNGQUUxNTM5MTRBRDEKKzoxMEFEOTAwMDk3REYyNEU0ODk1MzY5QzkxQjlBQjg5RjU2ODUyOTM5REUKKzoxMEFEQTAwMEQ2RDlDMTIyODVEQkQzQUMyOUM1NzNBREUxRTVFREM5QTgKKzoxMEFEQjAwMEYyQzc5QjQyREZFOEQ5N0QzMkYxMDdDOTJFNDY4RjcwN0EKKzoxMEFEQzAwMEM1QTJCNzY0Qzc3RDlDNjFFRkY5NjIyRjNEM0RFNTkzNTUKKzoxMEFERDAwMEE1RTczQUE0QTcyM0JFQTBENTI3MzVBNDlGQzFFQzI0OUMKKzoxMEFERTAwMEIyRkJFQjAxOUNGN0E2NkZEMjJDN0UwRjgzNjFGODJDOEYKKzoxMEFERjAwMDA3N0VDQjg1RERBNzdDQTBEMDc5REJCQjk2NzZEMEZFMjUKKzoxMEFFMDAwMDYzMkNFQjAzRjM3QUQ5MzNFN0JERDMwNzhCNzg1RTc4RjUKKzoxMEFFMTAwMDU3NTE2MjQ5ODRGMjcyODFFRTE5NUUyN0U0QzY3OUYyRDUKKzoxMEFFMjAwMENGODI5ODg3MTUwNEE2RTc5MDhGMTZGQkUwQzExQzc0QUIKKzoxMEFFMzAwMDJEOEY3MDNDQTc0M0U2RTcyMkIzRjJDRkY3NzEyOUY3RDUKKzoxMEFFNDAwMDdEQTI3NkZCODNDMjBGNTBCODFDRTZGMzlENjIwRUQwNDQKKzoxMEFFNTAwMDc5RDI4MTlCMEFEM0RGMDM2QzZFRkJEMDJFNTdFMjVDNjQKKzoxMEFFNjAwMDRGRjcxOUQwM0U5M0VFN0Y0QUEzREVERDE0NUI0Mjc4QTQKKzoxMEFFNzAwMEJGMEZGNTI5REE1NkI1NUM0RkZBNTNEQzRGMEM4NjQ0MDgKKzoxMEFFODAwMEY3Q0E4NkM0QkQxQkY3QTU4RTNDOEI3NkNGRDExQTA1QjkKKzoxMEFFOTAwMDNEM0UxMEFDNDg1QUE4NUY4QkFCRkIyQzA5RjU2QzY5QTIKKzoxMEFFQTAwMDlBRTJDNzRDOEY1OTg4NjdFM0FFNDUwNEI3NUZFOTZERjYKKzoxMEFFQjAwMDQxN0Q5OTU2MjA4NEZBN0MwMDhENDk2NkM3M0QxMjdFRkIKKzoxMEFFQzAwMEE0MDNGMzVERkNCNTY5NTA2NERDRDcwMzM4RUZGNzM3QjIKKzoxMEFFRDAwMDYwMkZEOTU5N0VBNjg3Qzk2RTUyRkE1QTUwMkVCNUQ3MUYKKzoxMEFFRTAwMEVCMTRENzM5RURDNjNFNzBFRUVGRDhCOEI3RTJCODEzMjEKKzoxMEFFRjAwMDRBRDk3ODQ2NTY3RjdBRUQ4RDdDNzYwNkQzQjMyMjJGRDkKKzoxMEFGMDAwMDY3NDEwN0VFREY2ODI5QjFGMkMzRTFFRDFENjg2RjdFOEUKKzoxMEFGMTAwMDRCMzdCRjRFRkM5MzY3OUZDMUY4RTI5RTQ4RDlFOEY5RDIKKzoxMEFGMjAwMEUyQjlCMDlCMkYwNkZEMjdDMkVGQkFBQzRFMDg3QTMwQ0IKKzoxMEFGMzAwMDJFRkQwRDgzRkJDQUJEN0VDMEY5OUY3QkVDQkUzREY3QTUKKzoxMEFGNDAwMDMwN0NDOEE4NEZDOTcyRTlEOUYzMjRGQkJFMUNGREIwMDAKKzoxMEFGNTAwMEFDN0NFNTgxQTkyQUNBQkQ1RjREOTBGMUVDMzBGMjU5NzUKKzoxMEFGNjAwMDE0RjlFNzFERjA5MTdGRTgxREQ4MUY5REUxODA2NzY3MDgKKzoxMEFGNzAwMDg0QUYxM0U4RjJCRkQ2RTdGMDNGNUVERUMzQ0JCNkZDOEEKKzoxMEFGODAwMEZCQ0E1REVFRjI5NzYxQzkzOEI0QkZCRTdDQkIxRkQyNkQKKzoxMEFGOTAwMDEyRkVERTI5RjdCRUY5OTEwOENGMzdGRjBBQTQzQTEwNTYKKzoxMEFGQTAwMENGNkJDNUY5QTQ2QjFFOUJBQUEyRkQ3NEU1MENCRDEyNjQKKzoxMEFGQjAwMEUzOUYzNjFDQ0YwQTNERkQzNkUzNjNDMzIxMEZBRjBBODIKKzoxMEFGQzAwMEE3NTVDQzk3N0E3REZCOENDRjlDMEREODRGQkE2MzAyRTYKKzoxMEFGRDAwMEZBMEZDNzQwNEUzREZFQTUyRTM3OUMyM0NEQzMwQkI3QkQKKzoxMEFGRTAwMDdEREUyODFGMUNDQTE2MjlBNzFGRUNDNTg4REIwRjc2M0IKKzoxMEFGRjAwMEIyRjdCMzFGNDVGQjc4NTZGNkY3RDdEOTc5NjYyN0RCNEEKKzoxMEIwMDAwMEVGOUZGMkY0N0I4RDg2MTc1MTAzQUM1MjdBMUFBNUFBRjIKKzoxMEIwMTAwMDZDREMyQkU4QjdDQzg5NjhGRkVEOTg5RkMxREM3NTQ3RTUKKzoxMEIwMjAwMEJEQUUwMkVCMzVGQTg2QTkzN0QyN0M1Njg3RUU4REEyRUIKKzoxMEIwMzAwMEJGQTg0RjgyNDRBRUZCNzdDQTQyQzkzMUQxNTk0M0VGMTIKKzoxMEIwNDAwMEUxMDFGMUZCODIwRUJENjJERjYzREZCRjA4RkQ3QzAxMjEKKzoxMEIwNTAwMDYwRkI3QjdBMkFDNDA3RTRGRjkxRDA1RUVEQzk5ODk1MjYKKzoxMEIwNjAwMDE4M0Y1NjVDRkM1MTg0RjExNDY2RjdBRTEyRjY2NTUxMzgKKzoxMEIwNzAwMDhERkJCQkQ3MUY3NDdBOTRBRkVCN0FFODIzRkIzRkFBMTIKKzoxMEIwODAwMDg1MzMzMjlFNkJBRDczRTczRkRENTlGNDQ1OTJCQjJCQTAKKzoxMEIwOTAwMEY3RjlDOUNFNUMwOUM2QURGNTMzNjkxRDkyMUZFQ0ZBMEMKKzoxMEIwQTAwMDc1QTc1MzlDRjhGQTMyMjM2RUExNUM4M0I4NDk2RDNEQjUKKzoxMEIwQjAwMDdDQjdFQTAzMDlEMjBFM0ZDMTJBQTU1RkM1RjVCNjhBNUYKKzoxMEIwQzAwMEU5MEZFN0ZCRUI2MkIyRjE0NjhFREZERjY0M0ZGREEwRTQKKzoxMEIwRDAwMDE5RTExQUM0ODM4RjlGQTdENTU5RDkzMUNGMjMzRDUyODcKKzoxMEIwRTAwMDIzOEZDQjE5QzUxNzBGQjM3RkJGMkVBNkQyMzhDQkQ2NkYKKzoxMEIwRjAwMDREMjlFNkZFMjFCN0RDN0M1N0U4QTk5RjNDRkMyRDk1NDUKKzoxMEIxMDAwMEVFQTNGQUVFQUIxNzIwMUU1NjNDMkU4M0M2QzY3REY3ODMKKzoxMEIxMTAwMEUxMDg2NDQ4N0ZBNTU1RDQ1RjU3NkQ5NzczRUE3N0NDRjMKKzoxMEIxMjAwMDc0QTJCQzk0QUREQzdGNzlENUI2NDA3QTMxNkI3RkQ1MDMKKzoxMEIxMzAwMEEzQUY5RjA1MENCRTc3NUJGQkY3NENDNDc1RjA1REVFQ0IKKzoxMEIxNDAwMDU3MDRBQkVGQUM4QkQ4RkJBQjE0RjhCRkI5RUNBOUNGNkQKKzoxMEIxNTAwMDQ3QjlCRDdERjg0NzQ1NERCOEJFQTUyRDNCQkY0OEZENUQKKzoxMEIxNjAwMEY2NUVFQTBGMzhFMjczNEJBMkZDN0MyQ0FCQzdGREEwNjUKKzoxMEIxNzAwMERGOTFEMjUzNzJDNEVGNkNCRkZCRTFFRjQ4MUNCRTFERTAKKzoxMEIxODAwMEZFNzQxMEUxREI3MkJGOUE2NDcwQUNEQUYyMUVDOTkzRjAKKzoxMEIxOTAwMDA1NUJCRjE3NDUzQ0FDREFFMThFRDNBREQ4RkE2MTA3NDkKKzoxMEIxQTAwMEU2QTFBQzkwQTE3RjMxRjJCMzdDOENDQTQ3NERBRDVGNzQKKzoxMEIxQjAwMDI2QjlDRkNGNTdBRjI0OTJCMDdBM0ZGOEVEQTJERkIwRDcKKzoxMEIxQzAwMEVGNkZDNzY0MDgzMkQxRkJGNkJFODNFQUUzNTg0RTg2QzAKKzoxMEIxRDAwMDUzQjhDMzVEQjVDMzJERjc1NjZENzk5REYyMjI3NDFGMjgKKzoxMEIxRTAwMEY0NTc5QzhERjkwMTZFQkVGNkQ2NjdFQjQ3NDVGQjY5QjcKKzoxMEIxRjAwMDU1RUZCQUY3RDBBRTVDQjVGRDlENUZBM0ZDNThFNTkxNjUKKzoxMEIyMDAwMDlGNkZFMzdGQ0E4N0ZBQTlEQkEyOUVGQjY5QjYxNDk2RkIKKzoxMEIyMTAwMDNGQjFFMjdCNDdFRkI1RDhCODg3QjdGREVFNUVDQ0IzNjAKKzoxMEIyMjAwMEJGRkFBM0Y3RUZGRDY3QjQxNzlFMEFFQTI4RkY1NzdEMjAKKzoxMEIyMzAwMEY3ODUyODM4RjhGMTFFQjFGRURFOUQwNDU2MzlBQkY3Q0MKKzoxMEIyNDAwMEVFN0YwNkQyNzhBMEY1REQyNzdGM0IxOUNGQzlCREZCODUKKzoxMEIyNTAwMEM4MUZDNzE5QUNGRUY1NEY5RTQ3RjdGMjVGRkZDMzA1NDUKKzoxMEIyNjAwMEUzODdCM0FCOTA1RkQzMDEyNzVDNjlBMkFCQjE0M0UyNDQKKzoxMEIyNzAwMEM2Q0IxM0UyRTlBMUM3RTE0NzA2NTRCNDc3RkYyMDQxRUEKKzoxMEIyODAwMDNGRUFCOTk1QkQxRkFBQjgzRkQ5NjM0MjNGRTI2N0Y3Q0QKKzoxMEIyOTAwMEY2RDdGNzdDOTU5NURGNjFGNDA5RTRBMDBGOUJGRjQ0OTYKKzoxMEIyQTAwMDFGRTk2RjI2MjZEOTczRTVGNkQ3MTcyMUJDQUJBMDlGRkYKKzoxMEIyQjAwMEY0RTkxMDdBM0VDRkU4MzkzMzRCNEZFRkY3QTM3MDRDRTcKKzoxMEIyQzAwMEM1N0RDMUFBODcxOUZEQ0U0MjNBMzJGQTlEMzU5NDdFREEKKzoxMEIyRDAwMEVGRTA3RkU2MEVBNURGRTM1MUY3QkQwOTQ3RTFFQUZCQUEKKzoxMEIyRTAwMENBNzE2M0JBN0Q2Q0NFM0M4ODZDOUM2MUY4N0I1MDZDRjMKKzoxMEIyRjAwMDc5MzAxMjdFQUY5MDM4NUM1RDUxRjNBNzI4RUYwRjZGNjUKKzoxMEIzMDAwMDJCMUFBNEVGNjJBNEVGRjc4RTRFNDZFM0VENEQ3RkZGQkMKKzoxMEIzMTAwMDE3MTEwRkZENEYwNjc0RkNGRDEyNTczREY5MjJBREIzMTYKKzoxMEIzMjAwMDc3N0ZGODlDNkE1MDVDMDdBMkQyNkM1Njg2QzE5RkZENUQKKzoxMEIzMzAwMEMwQ0EyQkI5MEYxQ0FFNzlFMEZGMkZGQTM1NkI3RjBEMTkKKzoxMEIzNDAwMEVCMDJGNzk5OEM2RTU0REVDM0Q2MUREMTIxN0Q2MUEzMkIKKzoxMEIzNTAwMDgxN0EzMzVENDZGMzVFOTlFNkVCNjE2NTdBRTdDNTc4RkQKKzoxMEIzNjAwMDFGODUxN0VGRkU2MkZCM0VEMDJDM0RGMUJFODM5NURCQkYKKzoxMEIzNzAwMDVGNUQ4NDdDOTc4RjlFRjZGQzc1OUNGRjFDRjZGRDAxM0IKKzoxMEIzODAwMEY3N0FGNUQ2NUZDOUQ2MjdFOTI5MkY3REQzM0I3RjgxOTAKKzoxMEIzOTAwMENGNzdFRjBGMjg3ODNFRTM1RDcxQUZBRTk3RUU1OUZDQTMKKzoxMEIzQTAwMDhCNzNGM0EzOEM0MzFERjdGMEM3NjAxQzRBRTAyOTNGNjEKKzoxMEIzQjAwMDdGRjA3NTNFRDJGQzQ2OEJCRjc3QTI4NjhCOEY2QzNDQUMKKzoxMEIzQzAwMDFFM0U5NjVCRkU0RjJDRTY3MjYzMjVGNDM0QTJFOUVDMzgKKzoxMEIzRDAwMEI1NTcxNDQ4NUExMzJCQjNGMDFFNDZGQjgyQzE3QkY4QjUKKzoxMEIzRTAwMEJCMzJGOTg1M0E3QTc3OTMxQ0Y3Q0E4Qjk1OTBGQkY3QjUKKzoxMEIzRjAwMDZGRDUxNjczN0I3MUU1OEU5RDY3QTE1QzNCQkNFQjQ3RjcKKzoxMEI0MDAwMEM0OUYyQjFGN0U1NUM1N0RDNzlFMkQzRjUwRkI2QUIzNDEKKzoxMEI0MTAwMEVCMDFGNTQzREE4MUVGQzNERkRGNzkxNjk3MDdCOUZENUEKKzoxMEI0MjAwMDVFNzNDNTdDNTYzREUxRUU3RkQ1QzNFRkI5RkE1RjYxMkYKKzoxMEI0MzAwMEY1OTJCRDMwRDIzODZGMkJFNkE1MzhERkI3RjdGOUU5QzIKKzoxMEI0NDAwMDFFQzJCNzdCRTVDNjVDNzZGMEU0NjJCRkNCMEVFRTc4MzkKKzoxMEI0NTAwMDZFRDE2RkYwM0NFQ0NDRkQyMUJBN0Y3MTdCQUIzOUZFMzUKKzoxMEI0NjAwMDE2QjRERkY2RkI0NTdDRDFGQzFEREFBNURCOUYwQjkxMDIKKzoxMEI0NzAwMDlGNjdGQkZFQ0Y1MDNFOTBERERGNjMxRTdDQ0U3OURFMDIKKzoxMEI0ODAwMDVBMTA2MUZEQ0RFOTRCQ0M5NDhEQTE3MkEzRUUwMERCODcKKzoxMEI0OTAwMEVGMzlGOEUwRkFFNzFBQzdBM0RDQzdGREIxODFCRjVGNTcKKzoxMEI0QTAwMDRFODlEMzM5MkMzOUJBODhGMkNDNjVEREE3MDc3M0VBMDcKKzoxMEI0QjAwMDZGREU5RjNGQ0NGNzkzN0VDNjk4Q0VGQkRDQ0YzREY2ODgKKzoxMEI0QzAwMDFGQjQ3RkVGODhGQjcyRTJFMTNFODE3RkZCRjczRkQ5M0IKKzoxMEI0RDAwMEVGRDc0QjlDNkZBQzY3NzkzQzI0REZGQURBRDgxQzhCMzIKKzoxMEI0RTAwMDU3MzM1NERFREE1QzE3QzdCOENGQjVDNUZDQkU5RUIxODIKKzoxMEI0RjAwMDZGMTgxMjlFMkQ5OURCNjc0Q0M3RjkxNzQzMkZFMDc5MUYKKzoxMEI1MDAwMEZGREI5QkY1QjgzMzNFNTQ3NkQ4NkNDMTdBNjdCRjA5MzAKKzoxMEI1MTAwMDcxQUM4N0UzRTI3RTZEQjRFMzVBQzVGQ0RDRjM5MDcxNTUKKzoxMEI1MjAwMDZCN0IwOTJGODU4Q0FCOURDMEI4Qjc5RTgyNzFDMzI3RkEKKzoxMEI1MzAwMDgwNjc4MENEMDU4REVCQ0RCM0YyOEVBRjRFRTM3OTYzOUUKKzoxMEI1NDAwMERFRjE5MkI2M0UxMEYxMDU1QTdBQzNGOERCRkNBMjlGRjkKKzoxMEI1NTAwMEE1QzU4NkVCRjc5NTgxOTJBMTdCQUJCMzc5MTc2OUE5NTUKKzoxMEI1NjAwMDczMjZDNkVGMDZDRjFCMjczNEM3Nzk2M0Y2OURDRTFCMjMKKzoxMEI1NzAwMEI3OTkzQzBGOTZCNUEzNzVEMDI1RkMxMzE4Q0Y1Q0U2QTAKKzoxMEI1ODAwMDgwRjcwNTIxOUYwMjE1QTkxOERBNUY5RDc5RTIxMUFGQjYKKzoxMEI1OTAwMDA4M0VFRjhDMzQ2ODM4OTk5REZBRjRFMkJFNjFGNDg2NzcKKzoxMEI1QTAwMEIyRTY5QjMzOUNFNzkyMTUzRDIzQjlFMkM4RTZFQjc0MDMKKzoxMEI1QjAwMDdGNTZCRUY2REVGOEEyMEQ3RkU3Q0U3RjgyQUFBOTk4NUQKKzoxMEI1QzAwMDM3OUI4MEQ2MUM3MDZFMTdFQjA3RUI1NTYyQkQ1ODEyODcKKzoxMEI1RDAwMDVBMUNGNUQ0MTg5RkE3NURFRTE0N0VBMTU3NkU3REE1NjkKKzoxMEI1RTAwMDkzRTJGNjc5RjBCNDQzRDBGMzA1NzRDQzk3RDFGNjREREQKKzoxMEI1RjAwMEMzRjg2RjU3QzQ0NzcyQjIyQjk4RkIxRUZCRkYyQ0Y2QTMKKzoxMEI2MDAwMEI5RTRBNDhBRTcxRkM5MEZCQjhGRjY4REM2QjE5NzRENjkKKzoxMEI2MTAwMEJDMUZFOUQ2NUE5NUZDNjA5MUZBRkQ1NDNFNkFGQUM4RkYKKzoxMEI2MjAwMEZBQ0Y4NzFGRkIzRTgzQzE3MjFFRkY1M0JEQ0VFOUJCMUQKKzoxMEI2MzAwMERCREM0NkY5QjFENzRENTU4REUxRjIyRDQyNkJBNkM1NDUKKzoxMEI2NDAwMDMxNkY0MjVCNzM3NjFDQ0Y2Qjg3NkFGOEVGNjFEODMwM0QKKzoxMEI2NTAwMDBGRTI2MTA2REY4NjNDRkNGMTNGNTk1QURFMkQwMDgwODcKKzoxMEI2NjAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJFRDdEQjMKKzoxMEI2NzAwMDBCNUM1NEQ3OURGMEI5MzM3N0VFM0M4MTNCMzBDMEYwODIKKzoxMEI2ODAwMEJFODMxMEQxNjIzQTI4QTIzNjNFMkUwRjBEM0U2MjQ2OEUKKzoxMEI2OTAwMEM0QTgwOUQ2RDEzQzRBMjIxOEI0MzZBMTFCMUIyRTAyREQKKzoxMEI2QTAwMDgyRjhDMjI2NkJDREFFNEQ0N0EyMkQ2REQzMTY1M0RBNkMKKzoxMEI2QjAwMDM1OEZGNjFCNEM3NEVENjM1QjYyNkNFMkY2RDMwNjEzQjgKKzoxMEI2QzAwMDM3QUI1OUQzNjVCN0NERDZFRDk3MzZERkY5RkZDRkJEOTAKKzoxMEI2RDAwMENDQkRDMzBDNjhEQUY0QjdGQjdENEI3RUM5QzlCOUU3QjIKKzoxMEI2RTAwMEY1M0ZGRkYzN0Y5RkM3N0M0QUU0MDg5OTQ5QzhFRTJERDgKKzoxMEI2RjAwMDg0MEMxNTEzNDJGOEIwOERCODA4RDk1NzYyQjI0MzNBOUEKKzoxMEI3MDAwMDI4NEY0RjFBQTZFOTg3RjBCNzYwNkM2QTZERkVEQjE5MDcKKzoxMEI3MTAwMDU1MzMyMkY5Q0VCQzQ0MkU0OEZCRDk5OUY3MzgxOUE2RTcKKzoxMEI3MjAwMEE5RjU4MzE2MTJBMEVEQUQzQzkxRkI2OUVBOTZDOTYwQkMKKzoxMEI3MzAwMDkyODdFNkU1NUI3QzU2MUY0RDVEMjRDMzU0NEFEQjk1M0EKKzoxMEI3NDAwMERGQzJFREYwOERFRDdGMzBFNzExRUY1QkI0NURCQTRDRjkKKzoxMEI3NTAwMDMyMjBFRDJDMTczMjRDM0E3ODdBQkVEMDQ0MDI3NDlDRDkKKzoxMEI3NjAwMDhFNzI2MTJEQzA2OTBEN0Y5RTQ4MDk5MUYyMjc0NTEzQTUKKzoxMEI3NzAwMDIxQTlGNDdCNUQ4RjJDQzNGQzA4QzkwODI0QzAzQzQ5NzcKKzoxMEI3ODAwMDQ2OERBRTVFMEY0N0Q2RjQxNzhGMURGRjEwRTA4N0I2Q0IKKzoxMEI3OTAwMERGQUQ5NkVGOUJGM0NFQTE3QjI5RkNBMjJDOTU5ODY5OTcKKzoxMEI3QTAwMDM3RkIwNkFGOTJGQzY5MzQxRkJFMkE3MzMwMkYwRjk5MDYKKzoxMEI3QjAwMDZFMjc2M0ZCODE3QTNFNUEyRkQxMUIyNDFCMDBDRUVDRUYKKzoxMEI3QzAwMDYxMTJBNEUzMjcxNjBEMTM5OEJGNDMyMjkyNDlDMjdFNEIKKzoxMEI3RDAwMDEwRkVBNEQ5MjM0NEExRjU5MkU2MEU3Qjk1NjlCQTdFQUEKKzoxMEI3RTAwMEZFNjA4RTA5QTcxOUU2NDlEN0QxRDE1Q0VBMkY0ODIxMUUKKzoxMEI3RjAwMEM0RDYzQ0RGNUY0MEQ3MjU4MTFGMjIyMkVEMjc0MTYyNUUKKzoxMEI4MDAwMEY4OEY2RUY3Q0Y0OTBDM0YxQTVFN0FDQTZGNDkwQUM2QTUKKzoxMEI4MTAwMEU4N0Y3NDdENUJDRUE0RjExNjVEQkVCQzY3MERFMERGRjIKKzoxMEI4MjAwMEUyMDkyQTMwRkZDNEQ5MEMyRjVBNzlBMjM0NEM2NDNBNjkKKzoxMEI4MzAwMDZFMjI2MUYzMjRBNTQ0M0U0NjkzODQ1Mjg1QzAzODc0MzkKKzoxMEI4NDAwMDQ4NTkzRjlGMDc1NDdBN0M0MDlEMEZGQ0M5Njk1ODhGMjcKKzoxMEI4NTAwMDEwRkEyOTQxNUU3NEQ1N0MyQkU0NzlGMjU2MTEyQkZGNDYKKzoxMEI4NjAwMEQwNDc3MDQxREZCMkE5NzlGM0Q4N0NCQ0Y5NEM5NEVFOTMKKzoxMEI4NzAwMDZBMjFFNDJEREQ3QzZERDk3NEZFNUFCRkY0REYxRTBCMDYKKzoxMEI4ODAwMEM5MDBGQzdFNTRCQzA5REU2MUE0MDdFREZCMzY3NUZFRTEKKzoxMEI4OTAwMDE2Q0YzMEUyNjcwQ0ZFOEExOUZFOUNDNTBDN0ZDRTI4QkQKKzoxMEI4QTAwMEZDRUQ1NURCRUZGRDJGODZCRjUxM0M3MUE2MzU0MDg3N0YKKzoxMEI4QjAwMEQxNzhENEVBNTc4Q0MyQUQyMDVERDI3Njg0N0MwQUYyNkUKKzoxMEI4QzAwMDgxNkFFMERGMUUzQkNCMUYxMkVGQUMwNkZFMDBCRTlBODIKKzoxMEI4RDAwMDgwNUYwOEM5QTQ0RDdBQjgyRTI4Q0YxNTQ1RUNERjdBRDEKKzoxMEI4RTAwMDFGOTUwN0ZBN0M1MDkzMEY2QzVDOTdDRjVGNEQyODNERjYKKzoxMEI4RjAwMDEzOUY4OTFDQTMyOEVEOUFBQjc4NjFCREJBOTE1MzIyOUUKKzoxMEI5MDAwMEZERkZBMzM4MDlFQjc3NEE4Mjg5RkIyNDREQ0YyQzRDRUQKKzoxMEI5MTAwMDA3QjlEOTY2RUJCMUMxN0NCQjJDM0REODRGNUI4RTQ5RDIKKzoxMEI5MjAwMEVDOEQyMURGNEVBQkYzMzUzNzNCNjcxQzlEMTExRjhGMkMKKzoxMEI5MzAwMDY2ODEwNDYzRjFGRERCQUE3QzZCMUI3Q0VBOEM5OUQyRTcKKzoxMEI5NDAwMDA3MkYwOTkyOURDMjBCNENGRkI2QjZCRUY5QjQzREU5NzQKKzoxMEI5NTAwMDFGRjJGOTYwOUM0NDFDQzdBNUMyRTUyQTM0OTE1NkRGNEEKKzoxMEI5NjAwMEM0NzAxRTU3RTk4QTZGQjY4RjBCMjcwRjcwQzY5MDMzQ0QKKzoxMEI5NzAwMDFBOUNFRDAwQTcyNzNFOUNDRTlDMEFBNDUzQkVEOTg1RjUKKzoxMEI5ODAwMEUzMEM4QTEyNUIwRjRCOTM2RDIzOUQ5RkFCMzU0OTZBODUKKzoxMEI5OTAwMEE1RTkyRUJFQTlBQjBFRDIyMTBCNTE2ODE1MEI5MUNGOTQKKzoxMEI5QTAwMDU0NTBCOEY5NjlEMzA5QTFGRDc0NUM5QTY1OUIwNEI0M0QKKzoxMEI5QjAwMERGREM0MzAyM0EzOTFGNzQwNDJGODlCNDNGNUUwQzkyRDYKKzoxMEI5QzAwMDIwODU5Mzc3MjkzMjgwRjFBQzRBMDdEQUJBOTFBMjY0RDQKKzoxMEI5RDAwMDQyRTZEMEYxODJGQzBDOTBBN0NFQTA4MEE5RDY4RjQ2N0IKKzoxMEI5RTAwMDI3NEU4QjRDQzQ2MkU4QzcyNDg3NDBERjQxNjc3MzIyMkYKKzoxMEI5RjAwMEY1RTZCQjE5REVEQUU2ODYwMzU0RjY5MUVFMTI5RUVDMEMKKzoxMEJBMDAwMEEwOUZEQThCMjhCRDI0RDFCQzQ1RUVBQUEzRjhFODdFMUUKKzoxMEJBMTAwMEQ1NDI3QTc1N0NBMDhEOUJFQjY2RkFDNzRFNkE5M0MyQkQKKzoxMEJBMjAwMEQwQjdGOUIwMzczODhFM0VCNjAzREU2OEJCRTYwQkJFNDIKKzoxMEJBMzAwMEVGQkNBMkUxMTVGRTE1MTMzQ0VGMzg5MTc2MzM4MDlGRTEKKzoxMEJBNDAwMERGMjdDNUFCNERBNkY4RkRGQ0FFNDVGQUNFMkIzQTc5MDMKKzoxMEJBNTAwMEQ1NEM5OEZFMjA0NDRBNUYzMTJEN0VCQkREMkQ2NDQ2RDcKKzoxMEJBNjAwMDQxNjEyNEJGODcwRjIxM0VCQjVEQkQ1REY5NzQ5RThBOTUKKzoxMEJBNzAwMERGRTQyRkE0RUI0NUIyNEIwRDc4OEE0RTA5Njk2NTcyNUQKKzoxMEJBODAwMDcwQ0NCQUFFOTZDMkI0N0Q3NzkxODlCNzAyQkQxNjkwREMKKzoxMEJBOTAwMDkwMTlGMDkyRUQ0MUJFRDRENjM1RTg2MDc0NjNGMTMwNzAKKzoxMEJBQTAwMDM5Njk3NkM5OThEQTAwOEYyMEVGQ0M3QkJDRTNDOTZCOEIKKzoxMEJBQjAwMDFCRjA0OTBDM0MxNkI5MjkxRTNGRjFERjBGOEYxRTM3RDIKKzoxMEJBQzAwMEMxRDQ5OTUwOTMwNEY4MjMyRkVGMjJEMjM0MDBDM0M4NzUKKzoxMEJBRDAwMDdGNUEzQjhEREVBM0U3NUZGRERGN0NGRTFBOURDNEFGN0UKKzoxMEJBRTAwMEFGNjhGNjEwM0Y0OEFCNjYwNTQ5QTg5QkMzN0NDMDk2N0IKKzoxMEJBRjAwMDg2NEQyOUU4NTRBNUQ4QzJBREEwOUE3MkVBRkEzMzRFMTEKKzoxMEJCMDAwMDExRDBDRkVERTIzQjM2MTQ1REZFMEY1M0M2RUI5RjI3RkQKKzoxMEJCMTAwMEVGNjhGODM0NDdDNkQzRTNDNzA0N0FFNzhDMjU3NDhDMDIKKzoxMEJCMjAwMDhCRTAyOTQxRkNCNDc3OTBEQzA4OUU5QTZDMjA4RjNBMTgKKzoxMEJCMzAwMDVENUJDRkY4NEEyMzc4RUFDQzdFNEVEQ0EwQTNGNzJCREUKKzoxMEJCNDAwMDYyODVFMkE2RjhEODA5NzY2RDBDNzk3MkFGQkJBMjFEQUEKKzoxMEJCNTAwMENBMDU1MzZDNzk3RTQ4OTU2QjU0ODBGMzBCRTkzODBCMUEKKzoxMEJCNjAwMDQ2OEM3ODlBQTdFMjY5N0VGQTNCOEZDMTM0QTk5NEU0QTcKKzoxMEJCNzAwMDA5MTVDODE1MDE3RjE1RTBBRDZBNEQwMEM4ODIwODU5NDYKKzoxMEJCODAwMDFGN0MyMjg4RjQ1MDI1MDI1RTM4NjVCMkU5NDNFNzhEQjgKKzoxMEJCOTAwMEUzMkYxRUJFNUMxQzA5QzQ4MkZCMTlCMUU2ODgxQkY0QUUKKzoxMEJCQTAwMDQ5MzFDNTlCQ0VGRUEwODQyMUEyN0NENEQ2QzVFNTk5OUYKKzoxMEJCQjAwMDgwQUVEOEJBQkQ3QzMxRERBNEQwQUE5RDVFNTMwOEZDMEUKKzoxMEJCQzAwMDE5MEI2OUVBMDJCQzkzNzM2NjAyNzY1QTVBMzgwM0NCQTIKKzoxMEJCRDAwMEFEREVGQzEwRThCQkI0QjA5REM4RTgyNzg4MjEzQkFEQzIKKzoxMEJCRTAwMDdGNzBFRDVEN0VENDQzRDc2RjIzNjE0QTM3MjhDQjQwMDkKKzoxMEJCRjAwMDhFNjVDQjYxQjBBNzc5NTEyQTM3NEIzMENFQTMzNkYwOTIKKzoxMEJDMDAwMDZGM0FCRDM1NDk4NEQ5REIyNDk2MUVEOEUyMEVGRTAwN0EKKzoxMEJDMTAwMEQ2OERCRjNFMUZGQjMzRDk5OERDQkJEMUY5N0M2OTY1NUIKKzoxMEJDMjAwMDIyMDEzQkMwN0U4MTBCODEyRTNCQjA3MjdFRDc3MDI5RjIKKzoxMEJDMzAwMEM4Q0Q4NDFFMkI0RERCNzgyNTBDN0E0Q0I5NjA5NzAwNUIKKzoxMEJDNDAwMERGNUIwQjk1REI0RDM0MkRGRjk1QkQ4OEE3REZCQjM4M0YKKzoxMEJDNTAwMDg3MUZGMEQwNTU0ODk3OUNGNkYzQkJBNzlDMjE0MkYzNzEKKzoxMEJDNjAwMDNCNTcyRTFGNDk4MjdFOEU5QTI1Mjg3RkYyQzNBNjRGMEUKKzoxMEJDNzAwMDgyM0Q2NUZCNjAzRkZBODczNkQ1M0YyNDdDRDMyQzU4NDQKKzoxMEJDODAwMDNGRkI0Nzk0MTNCQkY5MUVBNEZGNUQwNUQzNkQ3QUY5MDIKKzoxMEJDOTAwMDlFRUEwODBFMDM1RUI0QkNERDRCRTVEQjBDQTRBN0I3M0YKKzoxMEJDQTAwMDg2MjkzRDk5MTQ4RTdDNDhFOUQzRTZEQUU2M0QyNUMxMjQKKzoxMEJDQjAwMDdDRTk3NzhEM0U3QzkxN0ExMUJFMzVFNjNEMTRENzYwRTQKKzoxMEJDQzAwMDY3MTI3MjY0MzFEODkxOUQyMDZGRDA2RTI1MEEwN0VCMDAKKzoxMEJDRDAwMDk2QzFDQURGM0ZCMDYyMzFEOEExOUQ3NkFEN0NFNTYyRTYKKzoxMEJDRTAwMDU5OUY1N0ZFNzAwNkYzQUFEREVCNEZGNkVDODJGQTlFRTEKKzoxMEJDRjAwMDJDRDJDNEYwMTMyMEFCNzRGNjRDNDEzMjhGRUJENkU3NTQKKzoxMEJEMDAwMDk2N0ZFRkQ2RDlDRDFBNUQ3NjE1MzBCQTdDRjk2MjY3ODkKKzoxMEJEMTAwMDM1QzhDRDRFNEE5NzU2MDlFODcwOTdDMTRGRDY1MjhEMTcKKzoxMEJEMjAwMDBFM0IwQjE4OURDNUMzQkJFNTdBMDkwOUVCRUM0MDhCQjQKKzoxMEJEMzAwMEE3MDdFOUQxRTYwOUEwMUQxRDVEN0Y0NTBBQjM2MzM0NUQKKzoxMEJENDAwMEZBQjc3OTA5RjI4MzREMEEzRTc1M0ZGMjg3Q0IwRkVDQzMKKzoxMEJENTAwMDY3MkQ2ODIyMUNBNTEzOEJDOEZDRTE4OUU2MTEwRjNFRjQKKzoxMEJENjAwMDhERkUzQjBCRjIxNUEwRDdGNzQ1RTIyN0UzRDRCNzVDNzUKKzoxMEJENzAwMDJGQzVGOTZDNzFDQjkzOTI3NTc4RjRFNDUxQkNDNzk4RDgKKzoxMEJEODAwMENGNTc5MkQ5N0MzQTAyNzU4MUZCNjlCRjcyQkRBNDIwNUUKKzoxMEJEOTAwMERGNzg4OUJGMUJGNDEyMjU3RkIwM0JBOUJERjlDOUU0NDgKKzoxMEJEQTAwMDU0M0Q5RTk4M0RBMkY1QUY3MDREODMxNkUwNzMwRjZEMjQKKzoxMEJEQjAwMDQ3QkZCNjkzOTcxNDU4N0E4QjI3NjRFMEVGMkZBNjA0RjkKKzoxMEJEQzAwMDY3RUJGQkUxNDVFNjFGMkUzNEJCNENFNDIzRTA2NzNGMDUKKzoxMEJERDAwMEY1Q0JDMjkzQTk5RkQ4MjI2MkJBQTdDNThCNjk1NzhCQUUKKzoxMEJERTAwMDg0Njk3NzhCNENDMjU2RUFGRTkwRUJFN0VGMDUzQkRCQUMKKzoxMEJERjAwMEU1NDBGODI2QTI4QjhFMTYzRkI2NkY2Rjk5Q0RGQUUxMUIKKzoxMEJFMDAwMDM0M0E5RkJBMEJFOEMyNjFEMkY4QzRCRjBCRTgzQ0M5MTAKKzoxMEJFMTAwMEFDOTU5NzYxQkU4NzYzRTU4RjI0MkY1OEFDMTRFMzdDMDMKKzoxMEJFMjAwMDUwRUU3NTREMzBBRTM5NTQ4NkVCNzdGM0ZEQUJGMjVCRDcKKzoxMEJFMzAwMEM1REZGRTc5OEY1NEU3MDNGREJENjEyNkZBMzhDNjE4QzkKKzoxMEJFNDAwMDdBMDlCM0YxNkVCNEZGQUU2QzEzQ0FEM0ZERjM3NjlFREMKKzoxMEJFNTAwMEYxRDFCQ0U1NzVEQUZGNzhGNEQ4QzNGQThGREI5RjA2MjEKKzoxMEJFNjAwMEVGRTAyRTg0RDc0QUQ3REI0RUZCQjM4QTRDREVDN0UzMjQKKzoxMEJFNzAwMDg3RThGOUQyOTQyMDdGNzgwOENBRTlGRDgzNkJDOUNCQTMKKzoxMEJFODAwMEMwOUY3NDU4QkIwODdDMUE5MDIxREUyNUI0NTMxQ0ZCNUMKKzoxMEJFOTAwMDQxREYwNkMyQ0Y4MEJFQjU3MUU0MThDRDBCMkFERjUwNUEKKzoxMEJFQTAwMEI1QUZCQzRDRkIxMTY0MUJFOUE2RUQwNkU3REQ0NUEwNzAKKzoxMEJFQjAwMDVERTcyQjM2MEExM0E1RDM5NDdDQjQxN0VDODVCNUE0QTMKKzoxMEJFQzAwMDhERDZEQjU5NkQyNzY2RkEzRDY5RkUxQTAyRkRFREZDNDEKKzoxMEJFRDAwMDk5MURGQkY3OUQ5OTgyRkNCQTRCNjQ3QzM0QTExQ0YyM0UKKzoxMEJFRTAwMDlBNDg1OEFGQzc2RDhFNDgzRTFGRTRFNTdEMjQzMDBENUIKKzoxMEJFRjAwMEY5RkE2OTNENUY1MzNERDkwQkZDMjQ5MDJBODU3MEEwNjcKKzoxMEJGMDAwMDg3MUZGMDMzM0I0NDUxRTU2OUUwNTgzMkRBODEwMTZDMTgKKzoxMEJGMTAwMDFGQjEwQjlCODgwOEZDN0FDRTFDRUEwNkJGQzREQzgwRUMKKzoxMEJGMjAwMDQ2REYyMkYzNjFEQjMwRjJCNUJDM0NBMzhDMTAxNzAzNzMKKzoxMEJGMzAwMDgxRUNGMjg3NDkyRUUwMjVDMzRDNkQzMTIwNEI4MTg0ODIKKzoxMEJGNDAwMEE5REVFOEExRkYwMDdDRkM4NUFCMTdDOEFEODRBNEFGRDcKKzoxMEJGNTAwMDExMENGM0UwMkYzODJGOTk2RTA1Rjg1ODdENEQwRkYxMzUKKzoxMEJGNjAwMDE3MUExQkExM0U0Rjc0RjVEMTlGQTk0QjFBQ0YyRjhDRTYKKzoxMEJGNzAwMEI2RTMwNzkzNTU3RkQwNDk3MjQwRUZCNUI3OUMyMDZGNjkKKzoxMEJGODAwMDVCMjJGREYwNTE3MTI1MkRENUVDRjk4NzUzNThEQzYyMDkKKzoxMEJGOTAwMDk0OUUyNDQ2REYyRjUwM0YxREU4QjFFMzE3NjZEMjFCNjUKKzoxMEJGQTAwMDgzQkVBRjI3RkIwQ0Y2NkU0NkQwMTQ5OTFGRkRGNzk1QTQKKzoxMEJGQjAwMDhCRDY4QTgzMDZGQTFDN0ZGREIzRUE4REVENzM5QTFDM0IKKzoxMEJGQzAwMDA2M0NFNjM1MjcxQkYyM0UyNUQzNTA3RjUyNTdCRUExRDMKKzoxMEJGRDAwMEJDQjA2N0FBQTE3Q0YyQTFFOTg2RkM5NEQwQTcwQ0Y1QkQKKzoxMEJGRTAwMDNGRDE1NzYxQzg0RkVCNUY2MkE4RkZDOTEzMzU4NjdDMEMKKzoxMEJGRjAwMDQ5Rjg2RTQzRkQxOTY3MzYxQUNBNjcwRTNENjQyODlGREIKKzoxMEMwMDAwMDc1N0VBQjIxM0Y2N0Y4QUYwQ0Y1QkQ0MUYxRTQwOUUwNjcKKzoxMEMwMTAwMDRGNEE4RjY2OEFBRjVEMTlDQTIxRDA5RkMzNkRENDhFRjcKKzoxMEMwMjAwMDlCQ0ZFQzYzRDBCNzI0OUJBOEY2MzE1NTRDNjk0MDU3QTEKKzoxMEMwMzAwMEVDQUYxREY0MDBDOEY5M0Q4Rjg1QkY4MDdBRDJFNDA3Q0MKKzoxMEMwNDAwMEZFRTUwQjE2QzkxQkExNURCQjY4MjI1RTlEMUM5MTE2MDcKKzoxMEMwNTAwMDExRjg1RUIxQzc4RERGRTVEMjU2RTQwRjgxQUEwRDdCRTIKKzoxMEMwNjAwMDIyRTg2REUzN0ExMEYzNzZEMjBGRjBCREMxRTBFMzQ1MkMKKzoxMEMwNzAwMDI1QTY3QzEyQjI4REY0NkYyNUY3MjQwNUM2QjFGQjJDRTIKKzoxMEMwODAwMDkyQjFGRUNERDJCRjJGNDVBNUZGMUM0QUZGRTY4OURCNEEKKzoxMEMwOTAwMDZCNzRGRjkwNDk5RTlDQzJGQ0MzQUE3MzFFODNERjgzMEUKKzoxMEMwQTAwMDc4MURGNTdCNkNBNDFERDhBOUJDNkUyNEVCMTRBQkFFMzcKKzoxMEMwQjAwMEZBMzc1NkQzODc5RkI4NzFGRjI2OUFCRjY4NEE3MTRFRTgKKzoxMEMwQzAwMEQ3QzlDQkU0QjU2NkRGOEZENTg3MzMwQ0Y2NTk3NERBNjAKKzoxMEMwRDAwMDk2RjgxMENBM0IyQTE3Q0I1MzBDNzIzMTUwMDVGMzEzNTQKKzoxMEMwRTAwMDc4MTlFNUEyRjZEREQ3MzcxNUU1NzI5N0M4RUM5NDRFQkUKKzoxMEMwRjAwMDg5RjJFNTM4Rjg4QTk2Q0I1RjRFOTY5OEJGMTg0NzNFOEUKKzoxMEMxMDAwMDBCNTRDRTgyQzJEREI5RjJEMzVEODAzNzc5MUI0MUJEQkQKKzoxMEMxMTAwMDQ0NzUxMENBRDlFOEZFQTk1RDc1MzdDMkU5NjVGNEE0NzMKKzoxMEMxMjAwMEY5NDM5QUJGNjVBM0YyMDNGQzJCOUI0NDEwNUY1NjhBMjgKKzoxMEMxMzAwMDJGMjdEQTQ3OEZBMjdENDlFNzIxODE3RDY0RjU1MEZCRTcKKzoxMEMxNDAwMDEzRjQzREI1M0Y5OUJERjlFN0I1MkZGMzYxREU3QUZCRjYKKzoxMEMxNTAwMDRGRDU5NzIxODdEQzk0OTIxQUJGRkYxN0UzRUM0NzlERDgKKzoxMEMxNjAwMDQ5RDZGQ0VFRkY5RUY0MjdBNzE4RjFBMUQxQTE0NjY3OUUKKzoxMEMxNzAwMDU2MjAzQTNBREVGQjEyNUI3N0RBMjI5MUQzRjYyRjI0NkYKKzoxMEMxODAwMEY4NEYxMEU5RTVENEVDQjM0QTI1QUM1QkQwMjU1QkE5QTgKKzoxMEMxOTAwMDVFREQzN0JCMDZEQjA5OTM3ODAyNzIyNjYxNzhDMzMyMTUKKzoxMEMxQTAwMEQwOTNBNDk0QzkwOTg1RkUwM0Y0RTYyODM2Q0EwRDVCMzIKKzoxMEMxQjAwMDk0MUUxNTQwMUYyNzhFRDVCQjlBN0NEMEZDRjM4OUU0RDIKKzoxMEMxQzAwMENCQjc1MkQ0MzhEOTJDMzI0QjJGNUZFMkY5RTE5QTdDQUQKKzoxMEMxRDAwMEQxRjBCMEUwODMxNjExRUQ4RTBGNjhCOTY2NEZEMDdFQjYKKzoxMEMxRTAwMDJDMzk3QzAwRTJDQzgyOUZDODQ3NjJGMERGQ0JBQTVFOEMKKzoxMEMxRjAwMEVFM0I2OTk3ODEyRTVENkIwNEY0QjMzMkZERTE3MkM4QUEKKzoxMEMyMDAwMDY3MzYxMTNGRTA2N0Y2NzA5ODA0NjlGRjNGRjRCMEY1QjgKKzoxMEMyMTAwMEM4RjQ4NzM4QjBDRjMzMkY4NzM4ODBGM0EwODVDNTg1MjEKKzoxMEMyMjAwMDMyQjc4NTM4N0REQ0U4OUFFQUM3RkRFRUUyQTM3RTU4OTYKKzoxMEMyMzAwMEY3OEEzQzE3RjJFOTY3MTcxM0E0OEYyMUVGQzY5RTcyQTUKKzoxMEMyNDAwMEQ4NTc5ODRCRkNDMDNGMkUwRjRGMzIyMTdGREUxQTQyNDkKKzoxMEMyNTAwMDc5RTIxRjUxQThBRjQzOTJFOTQ0NjE0REFGQjQ5MEU5MzAKKzoxMEMyNjAwMEY3NTFGRkZEREQxNjFCQTZENzVBNDQ0QzJCRjM4QTA3NjYKKzoxMEMyNzAwMDE3RDA3QTVCN0QwRThDMTc3NEU0M0I3MDlDQ0U1QzAxMEEKKzoxMEMyODAwMEM3Rjk4RjlDODdGMkMwMkVGODc1OEIxN0VCNzczRERFRDAKKzoxMEMyOTAwMDU0MDRGMTg0Q0U5M0ZGODk3MUNEMDgzRDUzQUM3OTAxRUMKKzoxMEMyQTAwMDlFMzBFRUY3MTBCRUM5MEJGQkJFNDlGMjBDREMyN0VENDkKKzoxMEMyQjAwMEI0MDRGRjcxMDNDNDEzRDcwQUZFNjMzMUY4MzdFOUU1MEMKKzoxMEMyQzAwMDFGQTE5RjBDRjgwMTNDQjREQjE5NUVBQ0NFMjZCRjFCNEUKKzoxMEMyRDAwMEUyRkQ5M0M4RkExNUIxRjg1NEM1MTNBNTMwQjM0MEU5OEYKKzoxMEMyRTAwMDM3ODk5MTA2MTFFNjg2REExMjQxQUZGQTQ5M0YwNTlCN0MKKzoxMEMyRjAwMDU4M0E0MjFDRUM4NzkwMDc0NTA5RTI0NUQ5QjZEMDIwNTAKKzoxMEMzMDAwMDk0NjdENzhCRkUzNkFDNEY3MDVGNDE1QjI3OEI5RDA0RTMKKzoxMEMzMTAwMDhFQkJBMDVFOThEQjQyQkZCRkU4MTFEOUZBMEQ4NTcwRDUKKzoxMEMzMjAwMERGRkQzNzE3NkUxRkNDMjFGMUY5N0I0RjRCRjVEOTJBNzIKKzoxMEMzMzAwMDVEM0NENjQ1NjJFRjBCRkZDQjZEMTUxNjBGRURGNzc2MjIKKzoxMEMzNDAwMDgwNkQyNkFDRjdBQzcxRjVFMzhERjY3QkJCODc1M0UzQ0MKKzoxMEMzNTAwMDEzOTNEM0MxNUU2RUU2NjNEQjk5NjY5MUFEMEZDNDdGMjQKKzoxMEMzNjAwMEMwOEZERTVBMjhBNUJCNURGQTdFMTgzRUNDMjc5RkM3M0EKKzoxMEMzNzAwMEY1NzExNkIzRjlCNzdERUY4RENEOEY1MTNBRjk3N0RBQjQKKzoxMEMzODAwMDEwRTI1NUFGNUNGQzBDRkE4RkVGMjU0QkZCQzFFRjUyNkUKKzoxMEMzOTAwMDdFNkMyNkIwQ0VFRjdEN0ZENjY5NTg5NDMxRjM2RTM5MkUKKzoxMEMzQTAwMDkzQ0NFQkUyNDlFRjdERkJENTMyMEJFREZGQkRFNzVFQjEKKzoxMEMzQjAwMDJERTM1MTA4ODUxMDFGNUE3OUUzODdBRjk1NDFGQzRBNTgKKzoxMEMzQzAwMDY4RkU0REU2NjUwQUFGNTI0MThBOUEyMDRGMEQ2OEU2MzUKKzoxMEMzRDAwMDg3NkU1OTFBMUUwNzZGMDdEMzFFRDgwMkYxQzI1MDlCRjEKKzoxMEMzRTAwMDRCRTRBOEJERjYyNUU3MUYwNUEwQzc2NjgwOUZBNjBGRjIKKzoxMEMzRjAwMERCNDY3NjcyNzQ4OUI5RjQ3Nzk3NTREMUZFQjY3MjhBQTcKKzoxMEM0MDAwMEUyRTIwMDZGOEExNUZDMEE3MkMxRUEwN0JBRDk1QUM4N0IKKzoxMEM0MTAwMEY0RTVENjA3QzU5MDAyNzIyQ0RDQzRDOERERjY1QUU2RjYKKzoxMEM0MjAwMDY1MkE4N0VEM0YwREMxMTkwMEQyQ0UwNTJBMTMyMDdFNjMKKzoxMEM0MzAwMDM3OEQyMEJEREY3NkFEMjkwRkY2OTVERDQ0QzgwNzNBNkMKKzoxMEM0NDAwMEI0OThDQ0Q4Q0ZDODQ1NjdBODE3RTU2RkQzMkM5MDQzRDQKKzoxMEM0NTAwMEFEMTcxRjlEMENFQkY1N0I1NUJFNjg3MUI3MzQ1M0QzRjgKKzoxMEM0NjAwMDgxM0ExRkM0RERGQzE4NzdEQkNERjc2MzlDM0VERTdDOTAKKzoxMEM0NzAwMDlENUVCNkFGQzA1NzEyMzVERUY1REJFRTcwNzY4NDFFREEKKzoxMEM0ODAwMDM0RkU4QTZFQjdCNzg1Rjg2MUJDOTc1QTZDOThCRUQwRjcKKzoxMEM0OTAwMDIyNjI3QUEyQzU4QkU5Rjc1QjI0NEMwNzVBOEEzMEVERjkKKzoxMEM0QTAwMDZCRjFGQjBCMkMwMEU3NkM0QzNCMkM2NDdENDA0NzY3MjkKKzoxMEM0QjAwMDVGRjBCMEZEQzg3QjkyQ0FCRjAwNzRGRTI0RURGNzMyNzYKKzoxMEM0QzAwMDZERjc0NURBRkUzMkFEM0ZBRjM2NkM4NkI4Q0NCQzExQTUKKzoxMEM0RDAwMDJBMkYyNTI4RUZDMkVGRkI2OTdGNTA2RjZDQjlBRDA0OUUKKzoxMEM0RTAwMENBNEJBQkZCQzM4MEM3RDI2MkZBOUQ0MDdGN0Q1ODdGQTkKKzoxMEM0RjAwMDdGQ0IwOTNGMkIxRkFBQjQ1MEZDOTZGRTk2OTUzQkU3RDUKKzoxMEM1MDAwMEQyN0U2OERFQTlGNjQzQzcyRjYxRjU2NzYzN0Y3NDVDNEUKKzoxMEM1MTAwMENDQzdFOEI3ODRDMTczQTIyNDE2M0NEMUY1QTk5NTZGQTYKKzoxMEM1MjAwMDI2NTQ4Rjg4RjBCRkUwRUY1OTI0MEVGNzUxMzgxMjNFQTEKKzoxMEM1MzAwMDA2RjJGODgyQjUxQ0Y0RTc5RTEyOTI2RkEyRkFDRDkyMzEKKzoxMEM1NDAwMDVBQzA0MUZFQTk2NjIyOUE0QkE4Q0FDQkE4RDk1NTRFMUIKKzoxMEM1NTAwMEEwOUQ4Q0RGOTU1NTdDRTg5ODBGRjUxM0Y2QUJFOUE3MDUKKzoxMEM1NjAwMEU0RUEzMEVBOUQyNDNGQzkzN0JCNjlDQUQzODFBNzUzQTcKKzoxMEM1NzAwMDU0REY0NzIyRTcwRDUwM0VCMTNDQUUwNzZEMjc1NjkzN0UKKzoxMEM1ODAwMEM4NzkwMzMyNzE3REFBNUZBMkNBNjNEM0RCNDc0RDIxMEMKKzoxMEM1OTAwMDNFQTYzRkY3NzE3MDFFQjE4MzVGNEI3REZEN0U5MjRCQ0YKKzoxMEM1QTAwMEYzQUE3REY2NDVCNURFRkU3OTY1NDkxQjIxQkZGODgxMEEKKzoxMEM1QjAwMEE3MjAwRUZFMUJFMkU1NjAzRjdFQjQ3RDk0M0Q3N0I4NzgKKzoxMEM1QzAwMEU1NEM1QTU1QTFBQTE0NDBERTZGMTM4RkU4RUREQzZDRTAKKzoxMEM1RDAwMDg1RDJBQjhFMEY3QTlBRjhFQTVFOEMyRjA0MzM2QTc0OTgKKzoxMEM1RTAwMEZBQURDMzEyQ0NBMENDNEJBRTNGRjE4RjhCNDEzRTgwNTUKKzoxMEM1RjAwMEJFMDYzOTNENzc4NEU5Rjc1MUJERkU1QjI2MUYzNTdCQ0EKKzoxMEM2MDAwMDQyNTBENzZCOUZCQ0IxMkQwMUY3RDNBODNFOTJDMEFFNkMKKzoxMEM2MTAwMDA4OTIwQURBM0VCMTdDRUJDQkYwOUQ5NDE4QkYyNzA4NTQKKzoxMEM2MjAwMDhDOEYzMkJEMjEwRUYyOTk5RUMwNEYzQ0IwREY5MDdDQzIKKzoxMEM2MzAwMDQ4N0U4NkNFRjdCNzAzNTYwOUU4QUZFRkU0REE3QTg4OEEKKzoxMEM2NDAwMDFCM0U0QzEyMjUzQkVEMjdGM0E1NEIwMkMwRDE2MTFBQ0UKKzoxMEM2NTAwMDE2ODAwODQ3M0NDRDRCNzg2QTA3NzUwODlBOUNBNDg2REIKKzoxMEM2NjAwMDBGNURGRjhFMzQ1NTJFOTBERjc3NTdEMUZBMDc0REMxRkQKKzoxMEM2NzAwMEFCNTQ1NzhFRDYzRkU4MDg2RTgxM0NGRDkzNkQ1NEFGQTYKKzoxMEM2ODAwMEVGMUQ4REEzNkZFQjk2Mjk0REVDNTVFM0U2MjM5RUNGNkUKKzoxMEM2OTAwMDc2MkJEOTkwQTdGNUREMkNERjRFREJFRjc1MEY3OTREQUEKKzoxMEM2QTAwMDM0OUZDODZERTkzRTkzMDM3OUFERkU5NjZFODVCNkJGQTMKKzoxMEM2QjAwMEVBNjFFNzAwODgyQkU4MDNCOTM3OUExNzY5M0U0MTk3OEEKKzoxMEM2QzAwMEU3NTk5RUQ4NThEQTc3RjIzRjA1RDA0MzFENjkyM0E3NzIKKzoxMEM2RDAwMEIzMDA5RjNGRTRGQTQxQkUzNkJFRkNGNTQxQzg2RkFFRTEKKzoxMEM2RTAwMDI3MTJDNEU3MzI0RjFDQzE3NUY4QUFCOTdDMDRGMEQ2RjIKKzoxMEM2RjAwMEQ3NzI0NjQ0NDMxREZFQjQ3NUExNzZFQTE0MkZDMTc4NjMKKzoxMEM3MDAwMEIyMTBFMjQyRjk2MEJGMTVGNzk4RDA3RURCNEU0OUIwMTcKKzoxMEM3MTAwMDA0RjBERDk1MDZFQjVDOTFDNkZDODEyOTIxREE4RjhFNTEKKzoxMEM3MjAwMDdGQTY1MEJFQjM0RTA3NzU2NTE5MTlENkZCNUJDNDZGNjMKKzoxMEM3MzAwMDAyNzgxMUU1RjAxRkU1N0YyRjAxRkRENDM3NUI3MTRDQzYKKzoxMEM3NDAwMEE1RTM2RERBQzBGQjVCMjVEMDNGQTE1NjAxRDZGRjA0RkYKKzoxMEM3NTAwMDg3N0FDMjc3MjY2M0M3Mzc2OEZFNUE3RjRBMkZGODFCNEQKKzoxMEM3NjAwMDk2MUQ4QzNFMzdGOUZBRDNBNkQzQjRDM0NFRTg2MjkzQjQKKzoxMEM3NzAwMDVCQ0RCQjhERjk3NkQ1OUVGNEJBMTU3NzMyRkRCRUY5NDcKKzoxMEM3ODAwMEM0ODE1QzMwMDBBRjFFOUI4NTdFRTQ2NjBEMUU3MjAwODYKKzoxMEM3OTAwMEUxQjkzQTM4MjdFOTM2M0FERkM2OUZCMkI4NjZFMzQwRDYKKzoxMEM3QTAwMEM5MTI5ODdGRTMxRTEzMDEzRjZFRjMwMEE1MjcxRDdGN0EKKzoxMEM3QjAwMEVDQTM3QzI4NEZBNkYzOTA3QkE2RjI5NDNFMDIwNzBCRDUKKzoxMEM3QzAwMDk2REFFOUZBN0UzRDVGMTYwMTVGRjU2OUI3RUVCNjUxN0MKKzoxMEM3RDAwMEU3RThFQjgyMzgwNUU4QTEzRUFENzQzN0QwRDNBNjM5M0YKKzoxMEM3RTAwMDZGMjEzRDI2QTU5NkZFQTQ5QUUyRUJFOERERDU0QjQwRUQKKzoxMEM3RjAwMEFDQTU5OTE4NUY1MjgyNDMzOTY3NzY2RjQzRkNGRjZCOTMKKzoxMEM4MDAwMDM5MTlCMUJBMTE5REI4Q0Y5OTA3RkY0N0UxOUIyQ0NBREUKKzoxMEM4MTAwMDE1NTA1RjVDNDY1RDIyQTA1MzIxNzAxMkVDMTBBNUMyM0EKKzoxMEM4MjAwMDg2NzFEMjBBNzExOTk2RTdBRTIxQTY2RTBBQ0YxMTI5MzgKKzoxMEM4MzAwMDM5Qjk5NTM2QjUxN0M4MjZCMDUzRjIwMzBFOEM3RjlBRDYKKzoxMEM4NDAwMDEzQUE3NjgwM0Y3QUVDMUNDQjQ3RDZFOTEyRTJDNTUxOTkKKzoxMEM4NTAwMDE0RUFCN0QxN0U2RTcxRjEyMkY4MjI2OTY2RDkwNkVCMkYKKzoxMEM4NjAwMDQ2Nzk3OUU4NTgyOUYwMEJCMzAzOTQyRjE2NjNCQ0U3OTcKKzoxMEM4NzAwMDYwMjJBOTdGOEVCNjNCNkFEQUQ4RkQyMzVBRUY2OEIyRjAKKzoxMEM4ODAwMDg3ODA1REQ5QzE3MUVCNkJGMDdCQzVENEFENzQzRDhFRjMKKzoxMEM4OTAwMEFBRUI2Nzc2RkI0NTU4QUZBMzZFNjM3RTJGQjdGMTQxRDUKKzoxMEM4QTAwMEMwREIyM0E5MkYyRTgxRjlBNTU5RTU5RTE0MEFERkU3RTUKKzoxMEM4QjAwMDUyNUZFQ0Y2NjYyMDlFRjM2REI0RkM3MzdGRkQ0MkI3QzkKKzoxMEM4QzAwMDhERTJGRDY4QUI5QzI5RUFGMjkzRkY0MEE1MzZDRUUzRUEKKzoxMEM4RDAwMDA1RTQ1M0RFRkRDNTg3ODA4RjY5Rjk4RjZENTRGRjdFQjcKKzoxMEM4RTAwMDNENTlCMzA3NTg3OTQxQkVDNkQ3RDRBRjlENERFMTY4RDUKKzoxMEM4RjAwMDFEQ0QyQkI2MjJEOEY3OEFENEFGQTI3Q0ZFRDVBN0NEMEEKKzoxMEM5MDAwMDQ0RUIxRkVDMDlDNzlDN0U5QkMzOENGMzIwMEVCMDY3RTEKKzoxMEM5MTAwMEE2RjE2OENGMzhEQzZDNUQxRDUzRjJEMTRFM0E2QTY3RTAKKzoxMEM5MjAwMEY4MUFDOTMxNjFGOTIyRjNCMzIyQzQwN0FDNTM3ODEzNjIKKzoxMEM5MzAwMDlFRTUyMTREMDFEMENGN0MzNjRGNThCQ0Y3QjAzQzQ1MjkKKzoxMEM5NDAwMDgyQjAyOURCMUZFNDdBNTZBMDdGNjgyRkQyRUQwNzEyNTAKKzoxMEM5NTAwMEYwNjM4REZCODc3QzU0QkVEMDNBOUM2MUEyN0FEODczNzkKKzoxMEM5NjAwMDYxMDU5NzRCRkJGQjZDQUFFQTJGN0E0ODA2QzQ2MzFGNEMKKzoxMEM5NzAwMDRENjU3MkU2RDE4MDcyQkI0NTAyMUExQjY2RTc1NjQ5QzcKKzoxMEM5ODAwMDYwM0FBNEU5RUIwQUQyQzczQkJGMzJGNjVDNDAxOEVEMkYKKzoxMEM5OTAwMEIyM0QyRTkzOEFCNzQ5QkJDMzA1RDQ1RTc2M0QyNzgyNEMKKzoxMEM5QTAwMDFDQTE2QTdFQzc2MUQwNkYxRTFFRTlBNjEwRjg5RkU2MjMKKzoxMEM5QjAwMEI3Qjk1OTFDREVEN0I3RTQ0QkIzQzEzRTdDQjVEMDA0NDAKKzoxMEM5QzAwMEZDQ0Y4QjdFMTFDRUQ5OTUyNzk0MjY4MUREQzY4RkQyRTAKKzoxMEM5RDAwMEU5RUI0QkMyNDAzNzgzNzNFRTA0M0Y1MDAwRkVBNTlGNDYKKzoxMEM5RTAwMDBGREJEOUY5RDA5MTBDRDIwRjcxNjFERTJCMTNGRDNFMTQKKzoxMEM5RjAwMEExQzZCRjNCNUI2Qzk4NTI3RkZFNUREMDFGNUZFQjIyRjAKKzoxMENBMDAwMEI4NEYyMDc4MDM5ODk3REEwOTA3N0NGMUYyQTdFRUM2QjEKKzoxMENBMTAwMDcxOUZFMTAzNDlFQjQwREU5RTYzNzYzRDkwMEJDNjM5ODIKKzoxMENBMjAwMEMyNEY3MDEwRTc3OERGMTY0ODgyNzlFRjc3MUJFREJGQjEKKzoxMENBMzAwMEIyMzQ2NkM3NzZBNjMyRjlEOUQ5QzJFMkEwQzJGNTRGQTAKKzoxMENBNDAwMDYwNUNBN0MzQTJDOTIzRDdEMkYwNUNCMEU3ODM3ODhFMUQKKzoxMENBNTAwMEQ2MUFEQzI2ODNCQ0IyMTE0NTExNzU3MTcyNUJCNjMxRjIKKzoxMENBNjAwMERFMjU1Q0JGOTVDNTg3NTJEOTM4RDFFNzBENUM5Q0Q2RDEKKzoxMENBNzAwMDdGQzFFRUYxRkMwMzJEOEQzRTlGRDA0QzAyMjg4RkM4NjQKKzoxMENBODAwMDEwM0JGN0IwNkQ1NzY1N0FCMkFFOUY2RDlDOUMyRThFQjEKKzoxMENBOTAwMDQzMUYwRjVGMzc5MzkwRUU5Q0NBQzNGQzg4MDBGMzc5NjUKKzoxMENBQTAwMEY4QkE4MERGODk3NzM4QjExNUY2NjUyOEMxNzVDMzNBQzEKKzoxMENBQjAwMDNFRkY1REQ0NEIwRUQyMTM4NjAzNzM1Njg4NTNFOENFRTcKKzoxMENBQzAwMDg1MTIyRjNGMzI0QUZGRjkxMUZFQzA3RDc1MkUwNjdGNzkKKzoxMENBRDAwMDQ4QzY3Q0Y0N0VGQUEzRTAzQkQzN0Y3NzM4N0YyREMwMzUKKzoxMENBRTAwMDNDREZBQjI0MjM2MDg3MTIzMkJDMDhGOEI3QjFEMjgxOTcKKzoxMENBRjAwMDcxRUE4NzQ5OEZDRDA2MDYyRURGMjNFQUUzQzU4RDAzNTEKKzoxMENCMDAwMDk3MTIzNzk0RTIzRTk2MDQ3NkYwQzMyRjk1MUJFMjU0QjkKKzoxMENCMTAwMERBRjkzMDJEQkZGOUM0MDY4QzFGM0U3Q0Y0OUEzMEI1OEIKKzoxMENCMjAwMDE0QzExOEIyNTA3RkFDRDFENjczQzY5QTFGQTk2RkI3ODMKKzoxMENCMzAwMDA0OTUyQ0EwRkY5NzVBRTUyQ0ZBRTk1QjAwMjc5Q0FCRTMKKzoxMENCNDAwMDZBOUUzNDBCRkNCRkRGOEFGNTE5ODAyNzI3QUZFQThGNzYKKzoxMENCNTAwMDM1MzZENDFGRUQ3NkVBQUYwMTlENUU5QzhDRkE5NDE2QjMKKzoxMENCNjAwMEYzQTA5RkI1RjE1Nzc4MTgxRDhFQThGRTdDMDIzNTMzQ0YKKzoxMENCNzAwMDAxQkYxRDhFQzAxNTY2QjQxMzk5QTdGNjRFNDdCMjQ2ODUKKzoxMENCODAwMDM3Q0REREEwRkYwRTBBMTFCOTA4OTMzREU4NjBGOUU0NDYKKzoxMENCOTAwMEI0RTZFRTc2QTY4N0IxRkVDODkzRkM2RUIwODczQUVDOTkKKzoxMENCQTAwMDZBREU0MzMwN0Y1MEU4NDEzRjQxRjlCRTU1MDIzODBGRkQKKzoxMENCQjAwMDNBMDI3RUYwMDc5NTFENTMyNEQwMjc1NUU5MkU5Qzg3MTUKKzoxMENCQzAwMEU1RUZBQ0JEMjAwRjMzM0RDMUFCNjBCNzEwMEZCMzhGQTUKKzoxMENCRDAwMERFNEJCRDkwNEI1QzMxRkIxOUUxNkVBNDFGQUZCMTFGNjIKKzoxMENCRTAwMEZCNUMzNkZFN0I5QzM5QjBBMzM0NTI4RkI2MEZFM0I5QTEKKzoxMENCRjAwMDgwN0I2QzE4RkZEMUVBMUZCNjE4RUQ2NDJEOUQ5MkM2OUMKKzoxMENDMDAwMEUyMEMyMDRGODBBRkI1RUY0MkYwM0VFNDVGMkI2OTQyNkIKKzoxMENDMTAwMEZFQjU3QThERkI0NTFBM0YwQkQ3QTcxOEUyOTdERjRBN0UKKzoxMENDMjAwMEY1RTFGQTY4NzI0MEI4NUU4Q0U1OUQyQTlERUU4NDdENDAKKzoxMENDMzAwMEY0NzFDNzQ5OEUzM0NFMEM5NDEzRjFDNzI5NTNFNTA4MUMKKzoxMENDNDAwMDUxRTM0OTNDOUUzM0QzRjgyNEJFQkMzMEM2NzFBM0U1MDIKKzoxMENDNTAwMDlGOTY2QUYyRUY4ODRBQzdGRjYwMEYyRTRDQTNGRkZGMzIKKzoxMENDNjAwMDUwQTg3RjkxMDM1QjA3NkY4NUY1RjlBMzZBRjcxNkY1NjYKKzoxMENDNzAwMDFEMzgwOUU0Nzc0NTk0NUI1MzUzRTEzQzk1N0MxQ0QyMDUKKzoxMENDODAwMDlCRTU5QkZBMzQzNkRFNTgzOUM2RTIwRkRCMUU5NDUwMjIKKzoxMENDOTAwMDNGM0ZDM0ZCMURGRTE4NzBENzVGNzcxQUU0NTc3RUFBOEIKKzoxMENDQTAwMDg0RkRENUYzMEFDQUIxRkFFQjg5NThGRUQxRkJCNzkzREMKKzoxMENDQjAwMEQwOENGMUZBNzc2MUY5NjhGRkZEQUNGRjk3M0ZGNUUzOUYKKzoxMENDQzAwMDgzQjNBMUZGRTMxNjkzNTVFN0NGNkQzQkJFMzAxREUyNjIKKzoxMENDRDAwMDk1REJFQzU0MkUxQkY5NTYwNkJFRTU3RDY0RDQwRjAyOUQKKzoxMENDRTAwMDNFREZBRkY5NDVDQUEyREQ1NTczQzE2RUQ1RjFGOTZDQ0YKKzoxMENDRjAwMEIwQkYyMkVENzlCQUNFRkIxRDVBRkIzQjc3ODMzRDM0QTIKKzoxMENEMDAwMEE2QkUzM0FBN0VCRUQ2RkY2QUVDM0YxQTFFNEQ4RTQwRTkKKzoxMENEMTAwMDFFRUMyREZFMEY1NjBEM0U5NDQzMDc0QzUxRkQ4RENBNUYKKzoxMENEMjAwMEE1MjBGNkI3NjkwRUIzMzM5MkZFQkFGRTI3MEEwRkY0QjgKKzoxMENEMzAwMDE3MkFDRjAyM0JFQjQxMjJDMTM5RTc2OEJDMjdBOTc0MEYKKzoxMENENDAwMDU4N0Y3RDkyNjE1RDIzRjhCRUM1RjBGRDlGNUJCQzI0REEKKzoxMENENTAwMEE0RTNCN0NGMDRCNzJEMDI3RTRCRDJENjg5MjgzQkIxQ0UKKzoxMENENjAwMERERTEyQzEyRDJGMURERkZDMEYxNTFFMUI4MkQwRTFDMzYKKzoxMENENzAwMEYzRkZDMjcwRjgwQzdDMTk4MUEzQzBGMEZEQTNDMjYxNUYKKzoxMENEODAwMEI2NURDRkJDQUNDQjVCNDQ5MkE1Q0Y5Nzg0NkQ1OTk3NzEKKzoxMENEOTAwMDc1NzZDQjhDMzNBMjIxM0Y3M0M4NkJBODNGRUJCQzY0ODQKKzoxMENEQTAwMDI4OUYzMzVDNjQyOEJGRUQ4QURGOTA5RjM3MzJEQjUwQzkKKzoxMENEQjAwMDdGQzE3NUQ5OTAyRjI3OEIwREY1MkI2RDJCMENGOTg1MjUKKzoxMENEQzAwMEUyNUE0M0ZENjk2QTlDRkM3NkVGMDY0M0JEQzVEMjgzRjcKKzoxMENERDAwMDg2N0E0MjczQ0E3N0MwN0U1OUYwQzEwMjFCRjgxNzNCQUUKKzoxMENERTAwMDVEQTZFQTEwQzVDRjRFM0U2ODRCOEUyMTFGQ0JENDdFODgKKzoxMENERjAwMDQ3RjU5RDM3MEREQjJGMTQ5QkRBNDExRTJFQTRBRTcwMzQKKzoxMENFMDAwMDFCQjVEN0QyRUIwMkVEQTBGN0FCNDUyMjlBRDE2RjBFM0UKKzoxMENFMTAwMEIxRjhDOTA3MkJBQkUwRkI5RDhCODlEOEVEOEVFNDZGOTEKKzoxMENFMjAwMEZGMkI0MjIwNkZDRDk2RjE1QzlCQkREODg0RTcwNjc2NDAKKzoxMENFMzAwMDE3RDc4Q0JCRkZCMDRGQjVERkY3NDRFOUZCNTFGQTMxOTAKKzoxMENFNDAwMEIzRjM5M0QxREY4QkQzMTk1RDFENThCMDhGQzAzRTgxRjIKKzoxMENFNTAwMENEMTVDMjdCM0U4MzUzNzY3QTIxRkZBNTA1REZGNjgyOEUKKzoxMENFNjAwMDlGRDEzNUU1MTEyRkQwNEY2N0NFNTcwREU3RjIxQzA1NDYKKzoxMENFNzAwMDZDN0YyNkJBREZCRjU1RkIyREI4RkVBODBERjRFN0VFOTgKKzoxMENFODAwMDZDODZDRkU4N0FEQUY5RjRERDM2MTYzN0ZGQjhFNkI5MDIKKzoxMENFOTAwMEY4NjM5QUU3RTU3NDY2NjdFREI2ODUzMEZFREY1REY0MEEKKzoxMENFQTAwMEYxQzA3RkFGM0FDRTgxMDU4RjEzMDZFRkUzNzgwRUI5NUMKKzoxMENFQjAwMDJCNDc5MEY0N0E1NjRCRTFERTI4Q0NBN0QzQjdEMzBCOUYKKzoxMENFQzAwMDdBQjdDQkY3ODhDMUZFQjdDMjdDNjI4QzYzRjMzMjNDODEKKzoxMENFRDAwMEVEMTYzRkRFRjkzQ0ZFMjdDRjY3NjdDQzdENzc1QjlDODQKKzoxMENFRTAwMDc5MTU2QkYzRjJBQUY3MjgzRUE2NzkzREY1MTc5RTU3MDAKKzoxMENFRjAwMDU4MUQyRjM1OUREOUE3QkIyNUM2NDc0OUU2QzBDRkYzOUUKKzoxMENGMDAwMDdERjFGOTJGNjlCNkYxOUM1MjgyREZFODA3RTQxNzA0M0UKKzoxMENGMTAwMEM2M0Q3Rjc0NUVDNTRGM0M3RTVENjM1MTUyMDE4RUQ3MjYKKzoxMENGMjAwMDVCRDgzOURCNzM4MDQ3OUE5RTBGNEVBQTgwRkIwQUFGMEQKKzoxMENGMzAwMEMzNzkyRDBFREFFRjQ4MTg2RjFERDYwNkNEMDYzODI3QjcKKzoxMENGNDAwMDkyMEYyNUU5Rjk4ODhGRDU2QjhDRUQ1NjA1OUNDNkYzQjkKKzoxMENGNTAwMDUyRUEzOTAzOEFBN0ZEMTA1RkQ2RjAzNjY2OURGRjRDNzIKKzoxMENGNjAwMDc4OEE0NzZGMzc4QUE3RUVBMjlCQzNEMzQ0RjQ5RDlBNzEKKzoxMENGNzAwMDJFMjFCRDRDODQyNzhEOEVFMkY1RjNGRjJBMUQyREJFOTgKKzoxMENGODAwMDcxRkMyMEZEN0NEQ0Y4RjlBRjQ2M0ZGN0E2NEIzN0M0QjcKKzoxMENGOTAwMDY3RkZCRkUyRTdGMTFCQzRDRkU4Nzk2QjgxRDRDNzNBRTIKKzoxMENGQTAwMDA3RDJFOTE1OTAwRTI3NzM0RDY3MTc4MzlGQkREODhDNjQKKzoxMENGQjAwMEYxQjNENzBFMTczNDkyN0M3RDNEQTYwNzVFNUIzNkE5OTAKKzoxMENGQzAwMDExQ0Y4RjU1M0JGMUFDRDY1OTUzRUM3RTVGNTNGMUYxNDUKKzoxMENGRDAwMDkwRDdBRDlFQTdGM0E3ODJERDdCQjY3QUU1QjhGMzIyQTIKKzoxMENGRTAwMENCQ0NDNkYzOEJDNDExOTk5Rjk5RjY0QkE0MEE4QzlGQTYKKzoxMENGRjAwMDUxQkMxRTFCNjdEREI1NzU4QjM3REU4REFFREJEOUVBMDQKKzoxMEQwMDAwMEI2OUI1QTM3NkQzQzhBQTc5OEVERUVGNkU2REYxMERGNDcKKzoxMEQwMTAwMEMzMDk3Njg2Mzc3NjFFQTBFRjcxNjZCN0Y3MDFCRTY5NDEKKzoxMEQwMjAwMEJGQkY4NEEyMENCMEZGMDlDNkZENTZBRjQ5M0YwMkYwNTYKKzoxMEQwMzAwMEJFRTY2NUYxRjAwMTQxNkFDNDc3NDE1NjJFREIwREU3OEIKKzoxMEQwNDAwMDUxQ0VBRDcyNzMxMEQyRDBFMDM4QTZBRTY3NTk1RDZDODgKKzoxMEQwNTAwMEJCRjMzOUI1M0NEMjlFMjM5M0E1QjFGNThFQTg3NkNGMEMKKzoxMEQwNjAwMEFBM0EwRUVEMDdDMkNCMzlGQTc3M0ZGRTIxQUEzQ0JBQTUKKzoxMEQwNzAwMEZENEJERTQ0MkMzRjE3RTczQ0U2QjdENEY2QUI2QkM3NUQKKzoxMEQwODAwMDZGNEZFQTUzRjBEQzFGMjE1MjhFRkUzRUZBMjg1REE5NTUKKzoxMEQwOTAwMDdDQjBDMjFCRkNCRTk3RDY3RjlEMEI3RUY5NzMxMDRGRjAKKzoxMEQwQTAwMDlERTJDMkYzM0Q4NDI3M0VEOEY3MUZFRDg3OTdGMUJDODAKKzoxMEQwQjAwMEM2RTU0Njg2RjdFODdFNzVGRDg1QkRBOUYxRkI4Qjg3NDEKKzoxMEQwQzAwMDVGNkQ1RURBNzhBNTI0ODA3RTFEQTkyNkUyN0UzNkJFREQKKzoxMEQwRDAwMDE5Q0UzOURDNTk0OTlBNzA3QzVFNDI3ODUyREVBNEZFNDIKKzoxMEQwRTAwMDlDMkY0MjFGMTc0Q0QyM0FCQzQ4QTNGNjMzRjBGQkNBMjAKKzoxMEQwRjAwMEE1RDBDRkMwNTk5M0I4QzMxNzFGRUU3OEYyRTA5RjU0NjQKKzoxMEQxMDAwMEZBRjE5ODgzM0JFMDVDMDE1OUNGQzUzQ0I3RjcyQkFGRjAKKzoxMEQxMTAwMDFERUJFREY3OEVFRUQ3RTMzOEI3M0MxOUI0NDhCNERGMUEKKzoxMEQxMjAwMEJCRDQ3MzY3ODQwNDczNTZFOEM2REZBRkNFM0JCQTlEQTkKKzoxMEQxMzAwMEM3Q0NGNkM3QzkxQjY2QzQ1RjVGRUY0MzM5QjFGOEU3RDgKKzoxMEQxNDAwMDM1RDU1RURFRUYyRDMyRjhDN0I1ODEyRDE2QjA2QjZCOEQKKzoxMEQxNTAwMDk3QURCMDQ4MkUyODk3MThEREE5NzBGNDA5QzE5QzEyMkMKKzoxMEQxNjAwMDU3MDQ0RjcxRTU4RjhBOUY4MUYzNDEzQ0I3QjFCRTk5NTcKKzoxMEQxNzAwMEMzNzNDN0M1REIxOUZEQURERjNFNjg2QUE0RTkxMTk1MkQKKzoxMEQxODAwMDBGNTdDMDNFOTNBRTNGNzcwNjlCNUY1RkFGMjMxN0UwMUMKKzoxMEQxOTAwMEVGRDM5RkJGQTA3MDdDRkExMEMxQjg5RDJERTNFOTNEOEQKKzoxMEQxQTAwMDEwQjcxQkU2ODgxQUU3MzMyRDg3RkQ4NjYxNzU1RkFDRTMKKzoxMEQxQjAwMDkwOTZCNzAyQkM1NUE5QzhFN0VCQjdBRjQwM0ZGRjk2QzIKKzoxMEQxQzAwMDZBRTZFNzBGMDgwNENGMDFCRDM5MkYyMTA0RUYxRDEwRDcKKzoxMEQxRDAwMDlCM0NGODI4Q0RCRkY1ODcyNEQyRUQ4RkQwQzcxMzQyRjIKKzoxMEQxRTAwMDc4MUFEMDQ3NkE1QkUwNzNCMUUyRDM1MjA2RTNGM0RGMEIKKzoxMEQxRjAwMEJBRDgzRTVFM0NCQzlDNTVFNUE5NTZBRjg2OTcyQ0IxOEIKKzoxMEQyMDAwMEVBQUZBQzM2Q0EzNTBERkUxNDZCRjgzRDEyMjM5RTNFRDQKKzoxMEQyMTAwMDRBOEZBMUYxRjVERDJGNTQzOUZENUE5NEJGNTQ3QjNFNUUKKzoxMEQyMjAwMEI2REYzMjM3NDMzREE3MUJBQUQ4ODRGQTRBQjE0QTc4MDEKKzoxMEQyMzAwMEI2NTg4NUM3QTNBQzQ2N0M3RUI4OTQ4ODkwQkZEMzJBRTUKKzoxMEQyNDAwMDNEMERGMERENTU2QjhFOTJDMzIxRUM2N0ZEMzJBNzYxNzkKKzoxMEQyNTAwMDVFNEZGNEZFNzgxQURDNEJDQTJGNjBGMkY3RkQyMjE3RkUKKzoxMEQyNjAwMDlFMTM3RjgwMzQwOTcwRkVBQjhFMjhGMzkxMkY4OTY0NjIKKzoxMEQyNzAwMDAxRkEzRUE3RTI0RjgzRUYxQzkxMTM2NjgyQkM2ODM2MjkKKzoxMEQyODAwMEM3RTRBRkJCNTQzQTNBMTdBODVDODVFN0RGREJDRDc4M0IKKzoxMEQyOTAwMDFFRTE1MjZEQ0E3Mjg4N0YyQjAxOEIxRjhFMzc1RDZBMkIKKzoxMEQyQTAwMDVGOTk3MEJGNkU1RDM1QkRBN0Q5MzVFNzgzOTVFM0VBMTkKKzoxMEQyQjAwMEFGNTUwMUUzN0FGNTA5M0RCOEZGQTc1NDkwQTY2Mzk0RjIKKzoxMEQyQzAwMENFMjY3RkY5RjJERTU5MzQ3RjM2NjQyQTYxRTdEQ0Q4NTYKKzoxMEQyRDAwMDdDQ0Y4NkIyQjQ3M0YxODQ0RkEzRUJBRTE2NUQzNTBERUYKKzoxMEQyRTAwMDYzN0RFNTZGRDhCQ0Q2RDU4NTE2QzI5NkQ4M0Q4NzdBQzIKKzoxMEQyRjAwMEY2Q0RBMkY5ODYwQ0I3QkFFRjM4N0YxRUYwRUJBRjlBRTUKKzoxMEQzMDAwMEM3QjcwN0EyRTlFOTk2MjcxRDg2N0NEOTc5MjJFMDdCNzkKKzoxMEQzMTAwMDE0REI2MkVCODdGN0IyOUM2QzVGODdGN0U3QzIzQUFDMkQKKzoxMEQzMjAwMERCMUVCQjlFM0JEQjg1RjVBRUZFRDE1QzFGQ0JFRjNFMkIKKzoxMEQzMzAwMDkwQzVENjYzN0QzRDE3NTM5RTFGQzg0QTYwRTUwREIxNjkKKzoxMEQzNDAwMEZCNUY5NUU5NTRFNTlEOTgwQkVCQjIzRTBFQkMyQjMyOEEKKzoxMEQzNTAwMDEzMTE4RUI3M0I1NkFGODNGREZCMkI1MUY2NTU0NTI2NzcKKzoxMEQzNjAwMDgzNDNDQTY0RTcyQkFGRjZCRUQwOTEwNkY0QjA5MzEzQTMKKzoxMEQzNzAwMEUxMUNEOTVCNkVGRjE0QTBCRjBERUQ5N0QwQ0Y0RjU3QzYKKzoxMEQzODAwMEVCM0JEMjAzNEY2NkQwRjRFRUYzQ0Y5RDgyRkEwMzc1RTgKKzoxMEQzOTAwMEM0Q0Y0OUYxRjVDMEUxMEM0RDBGNjhGN0EyMzU3REQ4MzcKKzoxMEQzQTAwMDYzMDc3RDA0RkYwQkZCQUIxNDA0MjUyOTE5RDY1RDc5QjcKKzoxMEQzQjAwMDA4Q0ZDNUY0M0E0NDc2MEZDQTNGNTM2RjU3N0Y0M0E1NTEKKzoxMEQzQzAwMEU3QUI0NzZGNkVCREVGQTkzN0RBNDU2N0MxRkVGMzQ0OUYKKzoxMEQzRDAwMEVDQkZBQjgyQjRCNzk0OEU3Qjk1RDI1QjJCOUQwRkY5REIKKzoxMEQzRTAwMEUwODk1QkY1RkE0NkUzODc3OEUzREVBODFENzhGNUU4ODcKKzoxMEQzRjAwMENERDk4MTEzQ0RGMzY3MTlCRTFCQjIwM0RGQUY3RTYyQjcKKzoxMEQ0MDAwMDVGQTkwNEYzRUNCOTM1OTZCQ0Q1RTRGMjJGNTVCOTE4RjEKKzoxMEQ0MTAwMDREMkY1QUZBNEI1NUNFNUYwOThEMEZENzY3MEUxOUUxODQKKzoxMEQ0MjAwMDU5RDc2NDg0NDdFMzhGMkJBMTM2MDdCQ0FCNDU0NzlGOTAKKzoxMEQ0MzAwMDA2RUJBQ0Q5QTVBNDZBRTYwREJEMTcxMjBGQ0U1RkFCMDMKKzoxMEQ0NDAwMDc0RjJBQjY2MzM4RjcyRUYyODg3RjFFOTVGMzUzRjkxNTUKKzoxMEQ0NTAwMDE4MkI2RTE1M0RGRkFCMjY0QTBGNDAxRjRGRjMyODdGNTgKKzoxMEQ0NjAwMDBBRUIzNzlDNEM5MzIyRjRGODdGNTQzQ0ZDQTk3NEE4MzcKKzoxMEQ0NzAwMEM5NTc0RDlGNDRCN0ZGQUY0QTc3OUEzRTlCODhFRTNDMTEKKzoxMEQ0ODAwMDcxRTI4RjA3MzI2Qzg4QkYwREJDMjhDMEZFRDE4MTBDQzEKKzoxMEQ0OTAwMDg5RTU4OUI4QzgwQkY2RUI2Qzc2RUU5RDRBQTg1Qzc4RjYKKzoxMEQ0QTAwMDU3RTI2QUFGMDNFRjgzMjlEREQ2NTAyMTVEQzcyQkJENUMKKzoxMEQ0QjAwMEI3NEREMUFGRTNFQzRDQjYxRUVCMUJEQzNCNjFDQkZBQjYKKzoxMEQ0QzAwMDhBQzlCRjM4MURENkFGODZCREVGNzFFRTdDRjJBMjc0NUIKKzoxMEQ0RDAwMERBRkU4OTIxMTNCQzkwNDVENjZEREI2MDg2RjlDRENDOTAKKzoxMEQ0RTAwMDY0N0E2NEZERjY1N0QxRUVCQjU5QkE1RURGNjRENEU3QzcKKzoxMEQ0RjAwMDVGQ0UxMDU1M0RDMUVDRjAzQkE5NUQwMEU3MDhFM0UxQ0MKKzoxMEQ1MDAwMEExMzA5M0UxRTE5RUZBRTMyODRGRUZERENFQTEzQ0JEQ0YKKzoxMEQ1MTAwMDI1OTNFMUUzNUUzRTg0NzI5OUI0MzNGQjk5RDgyODNFQUIKKzoxMEQ1MjAwMEE4NUNCQTA0OTMwMDdDRkMzNUM3Q0U3N0YzMDE0MUZGQjkKKzoxMEQ1MzAwMEZFQzZGRDdCNTYyRjA0M0IzMDlBM0ZCRUE3RTJFOTJCODcKKzoxMEQ1NDAwMDk5RUEzQjg0RTlDMTNCMzNEMTNGMEM3MEQwREY1QjlGNEMKKzoxMEQ1NTAwMDY3RjBBRURGQkUwNUNGMjc1RkNDNTBFRDZCOTUzRjJGNTgKKzoxMEQ1NjAwMEMyM0FDRDhDQ0MyRjQ1OURERjA1QzdDODM2RDAxNzk0NjUKKzoxMEQ1NzAwMDZGNEM3OEJFRTQ3NTMzQzI3NUY1QUJERjZDODI3QUUyMkUKKzoxMEQ1ODAwMDU0MTdERUY3NDIzQjk2RTZGQjk2Mjc4NDVBNzVGMTNBMkMKKzoxMEQ1OTAwMENEQUVDOUY3MzM3RUE4RTU2NTgzNUREODkwRTkzM0Q4NzEKKzoxMEQ1QTAwMEU5RDFGNkM2RkZFODAzOTZGNkE4NzhGQTRCRTk4M0MzRkIKKzoxMEQ1QjAwMEFBNURGMEE3RUE4MzQ3NTRGRThGRDYwQkEzN0NCQzkzRTkKKzoxMEQ1QzAwMEYxRjFBNUYzRkZCRTEwRjJEMTdDRkNBRENDOEZBNjk3OTQKKzoxMEQ1RDAwMEEyRjlGNzRBRUZERDQ4RDdDQTEyMjIxNjFBRkNBMzlDMUIKKzoxMEQ1RTAwMDEwRjhDMUEzRjQxRkYxOTMzODM4REZGNjQ0RUY0RkE2Q0IKKzoxMEQ1RjAwMDQxOUNFQkQyREVENUVCNjI4REZGNDQxNkIzQjMzNjI2RTkKKzoxMEQ2MDAwMDRBMjY3QzFGRjI3NTQ2NjdEMTcyMjJCQUREMjg1RkM0QjQKKzoxMEQ2MTAwMDg5MkZENkQ2Q0M0MUZGRjA1Q0NENkRCOTcwRUYyRERBRjUKKzoxMEQ2MjAwMDNGMTg1MzlGOTM1MzU3ODE3RkRDQUFGQUM3RkJBQ0Y1OTEKKzoxMEQ2MzAwMEJEMzFFMEY1NjYzMTdDRTYxNzhDOUMwMjdDQkZERkMwMTMKKzoxMEQ2NDAwMEUxN0Q2MkY4RDNEQkU5Nzc5RkY3RkY2MDU4MUEwQkVGQjMKKzoxMEQ2NTAwMDY4NUVGMzRGQjZCM0YxQTJDNzc5NTc1REI3NTFGRjQ0ODcKKzoxMEQ2NjAwMEExRkUwOUM1RjM3MEFEMzkxMUNFQjE2QUZFQzlCMEYyQTEKKzoxMEQ2NzAwMEU3RjU0RkRFMjQyM0ZGMzAwQkQ2Rjk2ODZDQjgxQ0VBQkYKKzoxMEQ2ODAwMEZDQUYwOEMxN0Q3MzI4MUM1Nzk3OThGRDBBRjA4Qjg5NjEKKzoxMEQ2OTAwMEI2RDNGOTI1RDFFREZFQThDRUU3Q0RFRDM3Mjk4RkNFNTMKKzoxMEQ2QTAwMDFCRTNDOUYxRjg2RDE0QUUzRjkxREZGQTg0OTExQ0UwRTEKKzoxMEQ2QjAwMEZCMzc4RjdDNzBGMTUxOThDRjExMDdCRTNGMTZERENGM0QKKzoxMEQ2QzAwMEQ3QjJDQ0FBN0ZFMDQwM0VEMEY0RUY4MEQwQjNGOTA1Q0EKKzoxMEQ2RDAwMERBRUVDRDNCMzJGRDNCODg4RTJGMDhFNTBCRkFGREMyMUEKKzoxMEQ2RTAwMDFGMjk1RkY4NTFCRTIxMUZGN0Y1M0FFQjYzRjkyOTgzMzMKKzoxMEQ2RjAwMEFBM0YxNDFEQjcxMTdCQkZEMTA0N0VCMTRDRkMxNjdEMkYKKzoxMEQ3MDAwMERDRTkwRDc1REQ3RkExQ0FBNUEyMkNBNjNGRUZBQTVEQkQKKzoxMEQ3MTAwMDIxNDBCQ0U4RkVEMTc4MTE0MUU3NDI5QzlBN0QwNEZDOEYKKzoxMEQ3MjAwMENCRDdENDdCMDJDQUM2ODQ5OEYxREU5OTJBNUUyNzhBQjkKKzoxMEQ3MzAwMDFGQUNBOTMzRkFGNTc3RDUxQUU1QzczQkExRkM1MTNEREIKKzoxMEQ3NDAwMDUyMzhDRTdFOTQ0NkJGRjFDNkJCNTFGREQxMTdCQUI5NEYKKzoxMEQ3NTAwMEZEODA4OUU2RjdEOUFDMUJEMzFGQUI0OEQzM0M4QzczNTMKKzoxMEQ3NjAwMEQwRjU4MUI0OTYzNDREN0I4MUMyRjNDRUExOTUwOTYwOEEKKzoxMEQ3NzAwMDQ3RkQ4MjkwNkFCNEUzM0ZGOEVDMzRCRDVEMTI1NEYxOEEKKzoxMEQ3ODAwMEZDN0VFRDY3RUYwMDcyNzk0MzY4OUExNjRCRkY0NEM3NDEKKzoxMEQ3OTAwMDY5N0UxMThBN0QyRUUzMkU1NUFFQkVBMUREQTdCODJCODIKKzoxMEQ3QTAwMDc2M0M3RjhCM0FFRTFCNzVFM0YzNEQ3NERDQTY3Njk5REQKKzoxMEQ3QjAwMDcxREU0QTE2QjM4N0RFQTg2QjczMDQ5OTVGQ0RDNkZEOTAKKzoxMEQ3QzAwMDFCMzYyRUU4MkRCRDVEQUE2NEZENzlGNEUzMzBDNEVGNkQKKzoxMEQ3RDAwMDYxOUNFRDg0NDAzQ0E1NEY1MEE2RUFDRjVEQTU2NDMzMjMKKzoxMEQ3RTAwMDNDRTQxNzhEQkYwRkE1RURBNzY4RjVBMkVEQUM5RjY3RDAKKzoxMEQ3RjAwMDRBODY3QkIzQjVDQjhDNzBCNTY5RjYyRDExMzEwRTcyQUMKKzoxMEQ4MDAwMDE1RjRBNTI3QTIyRkVGQjRGQTFGMDQzQTIwMkUwOUNCNTYKKzoxMEQ4MTAwMDRGQTg3OEJGQkJGRURGMkMzMDdGMkEzRjNCRjAxRURCREEKKzoxMEQ4MjAwMDU5OTMwOEYyQjNFQzdDQzhBMkM3Q0I4NTFCRjRBQjJFOEUKKzoxMEQ4MzAwMEE4RjZDMjQ0NzIzNEJGNjgwNEU1REJGQjIxMTdERThGMTMKKzoxMEQ4NDAwMDc4RjMwQkJGQjNDNEVBQjdGNjdBOTZFMTFDRjFGQTQwNUQKKzoxMEQ4NTAwMEVDQjg4QTk4MjU4QzhCNjczMUNCODhCRkY1RDc3M0YxRUMKKzoxMEQ4NjAwMDVDNzAzQ0ZCRkYxMEM4QUY5OTYwOEYxRUU5RDBEQkZGRjYKKzoxMEQ4NzAwMDRGNjU0OUFBRkRBRkNBMzM5RUQ5RkRGMUUyQUY0MzJBRjUKKzoxMEQ4ODAwMDlENEQxNDdGRDVGNEIzNTYyRjdBRkRCNTM0NUE1RjBFRjMKKzoxMEQ4OTAwMEFCRkMxQzVERUY1MkQ2OEREMUREQTgxRDEzODdFRUUyRTcKKzoxMEQ4QTAwMDhEQUJGOTFGNUFEQzM3QkY5OEI2OEZCMTJGMzM2NjFDOEEKKzoxMEQ4QjAwMEI1NUVGNDM4NkY0NkFEQ0YxODNGMjI0RURDMkUyOTlCNjMKKzoxMEQ4QzAwMEUxMzcxODI3NkU5Nzk0Q0RFMjc2NjcwOUQzOEI0QUM4NjMKKzoxMEQ4RDAwMDg5N0FFQ0NBRDE3QkY3ODFCOUY3QzBFMkNGOUQwNkY1MTIKKzoxMEQ4RTAwMEQ2QThDNjZCRUFFQTVGM0QwNTdFQUFFNjU3NDRFQ0YxOEUKKzoxMEQ4RjAwMDYwMUJFQzkzNUREREMxQTFCRDExM0Q0RUI0NURERTA4NDIKKzoxMEQ5MDAwMEVGMTU4MjIwNTVFMzA3NDU2NjE5RTNENEU0MzE3NkJFNkUKKzoxMEQ5MTAwMERGRDNCQzFBRUQ0QjJEM0VERDI3MDQ3NjI0RDBFRkI3QzQKKzoxMEQ5MjAwMDZDRkZCNzZEQTA1RjM1M0ZGRTJEOEJGRjQxMTY2NzY2MUMKKzoxMEQ5MzAwMEY2RUU4NTVFMTdERTczREQzQUVBRkZGOTMxREUzOENBQUUKKzoxMEQ5NDAwMEZGNkFGQzcxQTJGNTE4OTUzNzcxRDY2MzIyNzkxMzJGRkYKKzoxMEQ5NTAwMDJFQTJBNUEzRkIyQzgyNTRGODBBOUM0QkU1MTJGREJEMTgKKzoxMEQ5NjAwMDM0QUQxMTA4MEY3OEE4NTlDRUExOUY1OTIzQzg0QjMxNjcKKzoxMEQ5NzAwMERFRkNBQUM5MDQ3OURGNzJERjZFMzgwN0JGQjJEQTIyOTMKKzoxMEQ5ODAwMERCQTVDOEZFNEJFOTZCMEQ4NUFGODA3RjQxMjcwQzdFODAKKzoxMEQ5OTAwMEVDQzAyRkE1N0Y4MkZCQzFBRjJGQjY0QkIwM0Y3Mjc2OTQKKzoxMEQ5QTAwMDlFMzRFOEExRjlCMzc3NzAyMkQ4M0Q1NThCRUYzNzRGRkQKKzoxMEQ5QjAwMDgzRjE1NjcxRjgwRThEQjM5OUE4RTdCNTZGNUQ1RTU5ODYKKzoxMEQ5QzAwMDQwQzgzNzAwNDREREJEOEYxQTZEOUY0NjU5QkIwRkVFMkUKKzoxMEQ5RDAwMENENEU0RDFEMzBCOTI4NEFCRjdCNzhFRDNFMUI4NUFCM0YKKzoxMEQ5RTAwMEEzMzVFMDg1RkI3OEY3NjU5N0VDODNGQjc4Njk2OUYyRUUKKzoxMEQ5RjAwMEQwMDI2QTQ3MURDQzlFQjExQ0YyMDM3RkEzRjU1N0JBMzMKKzoxMERBMDAwMDBGRUVERkJENjgwQUZBMzg1QUZFODNFQzY1Q0I3OUQ4OTEKKzoxMERBMTAwMDhGOThBNDhEQkYxRUNCRUY1QUYyRTBCMTZEQjRGRkI3NjMKKzoxMERBMjAwMDBGNkY1OTBFNjdEN0NCRUFCNEYxMUY1OTVFQzk1M0ZBOEQKKzoxMERBMzAwMDlGQUJFNTFGNEI4NEJDQzc0OTIyRkI0Q0IzMDlCMTQ0RTMKKzoxMERBNDAwMEVFRjdFMTc5Rjc4MUQxRkI3QzJEQ0JFMUZDRjhFQkU1M0EKKzoxMERBNTAwMDREOTU3MDhGQjNFQ0NCMURGQjhBQTcxMDMyNkI1OUI5NzMKKzoxMERBNjAwMDI4RDNGQ0RDOUMyRjJGNzdDMkZFMzFBMUY0NDhGMzcyM0YKKzoxMERBNzAwMENFNTcxMDdFOEZEOUE0RjYxRkRBMjc2NzAzM0NDQTU0MEQKKzoxMERBODAwMDI4RTc5NDY3RjY1NUJCRTEzRUMyRjA2OTIwQ0I4NzlCM0YKKzoxMERBOTAwMDdCNkM2OTg2N0IwOThBMENBNjg5NzBBMjNDOUM4NUUwMTgKKzoxMERBQTAwMEE4RkJEQUQ5RTE2OUVDQkU5RDlBMkY2MjcxOEFEMUJDREMKKzoxMERBQjAwMDk3RTUwNzc2QzRCRTdGRjI2MTBFOTM1RjAzOEVEOEU1Q0IKKzoxMERBQzAwMDNEMkFERjZCRkJBRjQ5RTc4OUZDNkMwQ0ZFRkYzQ0M0RDEKKzoxMERBRDAwMEZENjc0NkY4RTkxNEM0NDMzQ0Y4RTQ1QzUzMkJFQ0MzRkYKKzoxMERBRTAwMERBMTg5Q0YxRjY3MUY3QTlFMzE0QjQyNkUxM0I0NUNCQjMKKzoxMERBRjAwMDlBOUNGOEFFQ0UyNDNGOTMzNzk0OEJGODk1MjBGRkNEQjcKKzoxMERCMDAwMDI2ODQzM0Q1Q0NFMTdCMjY2OTBFMTIzQzRFRDNENDE0NDcKKzoxMERCMTAwMEY2QkVDOTMyOEE2QTc4Nzc2NEUxQTRDMDUxM0NERjlCQzMKKzoxMERCMjAwMDlFNTFEMjA2RTdFQjVBN0ZDRTgzMURBNkI1MUYwQkE3RTkKKzoxMERCMzAwMEI4MDVFMDRDMzVENzk0NkMyOUQ2RTFBRjk4QzE0REQ3RTQKKzoxMERCNDAwMDVENkQyNzdGMTNERTdCMTkxODlBOUEwRjc2NzU2NUI2N0YKKzoxMERCNTAwMDY0ODhDQjk0MERENTU4RTA1Q0VBRTUxQzU1NEU0OEFDODIKKzoxMERCNjAwMDdENkEyNTkzMkIyMzVCRDRGNzJBNkNGRTEyNDM1QzVGRkUKKzoxMERCNzAwMDlEN0Y2NUU3QjIyRjQxQkQ4NjIxMEI4MTczODhEQjhFQzcKKzoxMERCODAwMDk3RTMzQkZERjFGOEJGMDFDRUJCRUJGNDc2MDMxRkM2NzQKKzoxMERCOTAwMDczRTYwRDcwREU3RDA2RjRGNzUzMDFDRTM3NDIzRkUwQTkKKzoxMERCQTAwMDFGQzBCRDBFQjA5QjUyREI2MkFGQjcxNjU3NkVCOEVFMEEKKzoxMERCQjAwMDI2Q0EwQ0ZENzc4NkFGNDhGRjFFMkM5RjY4NUU5MUZFM0IKKzoxMERCQzAwMDhDRjdGOEM2RjZBN0RFRTdEM0YwQ0VBQjc4MTc2MkMzQzIKKzoxMERCRDAwMEY5QUE0Njk3MTRERjI2MUQzREFENTJFOThCNEEzRjdDREEKKzoxMERCRTAwMEQ3RjdDMkYyRTI1RUZEN0IwNTg0RUM2MEU3M0E3OEJBRDMKKzoxMERCRjAwMDhFNjA0RjBFMzlGMDdERTAzMjlFQzlDN0IyQTE2NDUxRUMKKzoxMERDMDAwMEUxQzZEMjg1QjZBRTAzQzk0REY4M0VEMUM4MEEyRUU2QUMKKzoxMERDMTAwMEVGMEY5Q0Q3RTA1MkVEQTdGNEJBQTA3OTgzMEUzRThEQUEKKzoxMERDMjAwMEZFMjNGRDBGN0Q0MUUzOEY3NUM4Qjc3QjE5N0M2MDZGQzQKKzoxMERDMzAwMEMwM0NGQ0UxNjlGQTczMjAxQUZDQjc1M0Q5ODFFNzQ5NkIKKzoxMERDNDAwMERCNTRGQ0RGRTEwQUY1NzIxMUJDOERDNTdGRDYwNEVCMTUKKzoxMERDNTAwMDk5OEJFNTY1NDMyNzA1OTg2NzQzMUMzRUZENjUwRTNCQTAKKzoxMERDNjAwMDI3OTI3RTNFOUMwOEU3MDM5NjY2MzNGRDM1RDAzRkMzN0UKKzoxMERDNzAwMDdFMUJGMEM1MzIxM0UxMjQzNjZGQjAzM0NCMzRGOTRBNDIKKzoxMERDODAwMERFRkI1OTA1OTVBRkU5QTM3OTJBNUYyNTU4ODc1MTc5QkQKKzoxMERDOTAwMDFCQjZEOTIyRjU3RjlBRjNERUYyNzZBQTNGM0M1Njc2ODAKKzoxMERDQTAwMDFGOENEQThGMzZBMkJCODc2OENENjFGMURCRDlDMUQ4NzIKKzoxMERDQjAwMEZCRDZDMzM5MDkwNkI5RjU1NDczMjU3OTlCQ0U2RjY1MzgKKzoxMERDQzAwMDM2RDNFN0IzODcxNTdDMjc0OUUzRUI2OEI5NTQ5OEMzOEIKKzoxMERDRDAwMEQ2RDE5N0MzRUNGMThGNUYyRTcxMTNDOEE1MTVBQTVDM0UKKzoxMERDRTAwMDYyRTVDNDEzNjg4MEYyMzQ5MzdBMkY0MTY0RUJCRUYxOEQKKzoxMERDRjAwMDQ3MzMwQTIxMEVCN0Q1NkI5NkUwOUVDMzRBQ0U5RkYzRjkKKzoxMEREMDAwMDJEM0E0RUFENERFQTQ4OTAyMkY0NTE0QjZDOTIwQkYwRjcKKzoxMEREMTAwMDRENDc4MDdCQUYzNUNCRUM5ODg3M0ZCMDNCRkVCRDg3NEUKKzoxMEREMjAwMDYzRjQ0N0E0QTREQTcxRUM1QTBEOUVBRDVFMDFDN0RCMjMKKzoxMEREMzAwMEI4QUIzMDI5QTg4NzkzMEYzQzhCRjEzREE3MEFBNzJEREMKKzoxMERENDAwMDRBNUZGMUM2N0M1QTVBQjhEMTY0RDY5NUJCOThGRUVBQjAKKzoxMERENTAwMEY2Q0FFNTM5NjA1RkFBRTc5QkEyRURBMjdCQjIzOTgzRTAKKzoxMERENjAwMDFDRDZFQ0EyREY3OTE5OUY1MEZFNDVGRjMxOURGQThGM0EKKzoxMERENzAwMDA0RUU3QkY0MDdGMDNDMTgzQzYwNTQ4OEY3NzVEOUZCM0YKKzoxMEREODAwMEM2NkYxRDI3NzNDMTRGRDJGQUI5MkJBN0Q4RDA2RkRENEMKKzoxMEREOTAwMDZBQkE0ODlGQTRDQzY5QUI5NDJGRUJFNEQ5MTlGNTdERkUKKzoxMEREQTAwMDdBNEEwRjMzODE1RjU3RTcxMDYzM0I3MzIwMUJFRTk1NzAKKzoxMEREQjAwMDkzNzRBQjFGRTRDRDI5MjE3MDE4RDc1NzI0NkU1OERGMTgKKzoxMEREQzAwMDg1RTYyRDg3OTEyRUNDQzRERDg2RTdBNDhFNjBGQkVBMjQKKzoxMERERDAwMEJBOTE1MkI0NTMzRjMwODc0MUVGRkMzQzM3MDNFMzM5RUIKKzoxMERERTAwMEE5NEU0NkI3QTdFQzRERDg4RTI3NTIzMkNBMTE1NUVFMzAKKzoxMERERjAwMEZEM0M3NzBBQkU3RkExQzlDRkM4N0QxNkFEMUY1NjdFRjgKKzoxMERFMDAwMDhBNUI5MTBERUZDNDlFNEE5RDVDRDJDNjE5RUQxREIwOTAKKzoxMERFMTAwMDdGMjJGNkQyRjNGQjZFQTdGQzM4QUJCQTNGNEM2MUE2NkIKKzoxMERFMjAwMDUyRTVBNUU1OEZEMkZBNUI3Mjk4RkUzQkU1MEIwQ0MwN0MKKzoxMERFMzAwMEI4QTdEQzQ0MDRGODY3MEYwNzlGODVGQzYyQUYxM0RGQzcKKzoxMERFNDAwMDcxRDNENjIzQ0RDNDdFMUYyNjRERkRGRDE1RTAxMzQ4QUEKKzoxMERFNTAwMEM1NUNDNjZGODc3M0Q5M0FCRUEzRTZEMzEyNjNGRjlFMzMKKzoxMERFNjAwMENDN0ZBOEY1N0FFMEZFMUZBREQ3NUQxRUZCREVFODFFNzUKKzoxMERFNzAwMDk1OEYxQjZEM0RENTcwOTU1RTc3Q0YxM0VGMkRGMzg0OTUKKzoxMERFODAwMERBNTVCNENBREUxQ0Q2MEZENTY3ODhBRkNBQ0UzQUZDQzUKKzoxMERFOTAwMDNEQjFGNzg3NTZFMUJCQUVBM0JGRjMwMUVGNTREMTc1OTcKKzoxMERFQTAwMDBGOTM5NUZCMDFFRkMyMkZDQzc4N0VCM0MzQzJFODUyMkIKKzoxMERFQjAwMDcwMDc0NUI4ODc5NEUyOENFREVGN0U1Nzg1MjdDNUNDNzcKKzoxMERFQzAwMERFRUJENkVFMkY1OEQ0RkJGQ0M3NTQ3QjJDRDE1QjhCRkEKKzoxMERFRDAwMDcyMURERTU4OTM3Q0YwMkVEQjA4REVDRkQ1RDYzMUZBRUEKKzoxMERFRTAwMDNDQUU0NUJEQzc3RkYzRjY0MzQ5MUNGQkExRDQ2MDNGNjAKKzoxMERFRjAwMDY4RTM0NkRCMTExN0UxM0Q2RTVEQkM3QjlERjdEQzQyQkMKKzoxMERGMDAwMEEyQUJGRjY5MzJEQzAxRkQ3RDdBNUI5NjIxMkUxMUNGMzkKKzoxMERGMTAwMEZFRjg5MTJBNkZDMTVFNTA2MkMyMjUxOEJFNUZBNDdFRDIKKzoxMERGMjAwMEEwQTIxRkZGMEExQjNGMzJBRTkzMjhCQTcxRjdFNkM4QzIKKzoxMERGMzAwMDNGQ0VDMUY4Q0Q1QzExREZCMUIwMTMzQzBGNUJBNkJFODQKKzoxMERGNDAwMDVGNDdGNTEzQkU1NzQ4RjU1MjM1Qzg2RkNEMkYwMkJFNTcKKzoxMERGNTAwMDE3OTM4MEFGQ0JDRkU2QTRFQUY0QTREQTJFNUExRURERTUKKzoxMERGNjAwMEExREEwMTc3QThGQTI2RTlCQzY2MzczQTI0OEU4QkU4NTUKKzoxMERGNzAwMDlEQjE3QThCNTNFREU4NjhGOTE4QUQxNzhDNzYzNUE1MEQKKzoxMERGODAwMDVCNDU2RjA3OENFMTE3MTVBRjM3NEYxRjkzRTJEMEM3ODIKKzoxMERGOTAwMDJEN0YxMUZCQjI2QzZFRDAzQzBERTQ2NjM1NDc2MDFGREYKKzoxMERGQTAwMDY0NTY5NTUxREYzQjcyOTlERkUxQzg3NTFBQ0VFMUQ2MTAKKzoxMERGQjAwMEQ0MTlFQjI1NDIzREUwQUI1Q0U3MERGOTI5N0E3REM0MkQKKzoxMERGQzAwMDk5NDFFRUIxRkUzNkFCRjRFMDdCRjdBQzAwRUYzNzJFQjMKKzoxMERGRDAwMEM5NjVGNjUwNDk5RTlDOUE0QkQzMjM3RkE4RUM4M0RGRkEKKzoxMERGRTAwMEExMTg2OUU1NDlBRjA3REFDOTdEQzMxRTk4OTc0RDA0QUEKKzoxMERGRjAwMDNGQjU3QzZENTVEMTExNUE2RUY5QTkwNURGOUQyNDI3RDcKKzoxMEUwMDAwMDYyRkJGN0FFNjY0RUJFOEZGMjczQkUyQUU3MUEzQzZDMTcKKzoxMEUwMTAwMDVFMEQ5RUIwNTA0MEUxQzg2QzYwRjA2NEY3MEY3MkJDQkEKKzoxMEUwMjAwMDRFRUU2NUQ3QjM3QUM1QjkxNjgzRkVGMTQzOUVDMjc3MkIKKzoxMEUwMzAwMDZCQUUxNkJGMENCNUMyRUZBMTY0RDdDQjNDRThCQkNDMkUKKzoxMEUwNDAwMDdFOEVBOEVGNkVFMjdCQTk5OTdFRDZCRkNCMUZFMkVFNTMKKzoxMEUwNTAwMDJEOEVDQ0JCQ0JCNEEyMThGNDQ1NTc5QUQzMEZGQUUyNUQKKzoxMEUwNjAwMDczNzlDMTMyOTg3N0MzODU3MDE4RDAzNkVCQzIxMDBGMjAKKzoxMEUwNzAwMDc2REZGRTNDNzkxNjdDRDdFNjI3OTlDNTRDRDgxRjc3MEEKKzoxMEUwODAwMDVFNjBGMEY1NDREMTNGMjFCQkQ1NzVFOTY1RjBCOTAyN0EKKzoxMEUwOTAwMDI1MDA0RjVBQTI4NEVGMTBEMUJGN0NEMEFCNjlDOUFBMkEKKzoxMEUwQTAwMERFNDgyMzQxNzgyRjg4RDg2ODNEQjA4MzFDQjQ5RUZFOUIKKzoxMEUwQjAwMERFMjYwOTk0QzIzRTQxMjg3NURBNzREMDczMEIxREZFMkEKKzoxMEUwQzAwMDkzMzZEMEFGRDM3REQzRTE1REExMTcwRUM3OEVBN0Q3MEUKKzoxMEUwRDAwMEFBN0E4N0MyN0ZBNzFFRkU3OEZDMzFGQURFQkE1QUNGMzEKKzoxMEUwRTAwMDEyQzc4RkQ2RThERTU5MUREQjVFQTU5QTAwQ0JDQkQ3RDEKKzoxMEUwRjAwMDdBRUU4NkY5MzRCNDBCRjgxQjVEMUFERUY3RTcwNTM2QzUKKzoxMEUxMDAwMEU2QTZDMjNBMURFMTgwNUYzM0ZCQ0I5MUFFMzIxNTlFOEQKKzoxMEUxMTAwMDgwNUREMUVFQzgwREMxM0JCMkVEQzk5RjRBMDdGQ0M3NzcKKzoxMEUxMjAwMDgzQkJBMUQ5MkNERkE3RTdFNzc2MDFEN0UzNDhENEY5NzEKKzoxMEUxMzAwMDM1Q0RDRjc4MkM5N0U5QTNEMzc5ODFBRDMwRkVFNjEzQTYKKzoxMEUxNDAwMDA3RjA5Q0UwODM0NzJGMDlFM0JERUI3M0EzNzhFM0VBNzQKKzoxMEUxNTAwMDk5RkZEMkIwODZCRDk3NTFCRTk2NDczQURDRDQyRUUwRTcKKzoxMEUxNjAwMEJCRUEwRENGMUUwRkUzN0VGMTc2ODJGQkEwMERGREM3NEIKKzoxMEUxNzAwMDRGQzMzQkFENTkwREYyNENGREVGMTI2NDM1QjA3N0UzNjAKKzoxMEUxODAwMEQyMTI0NjdGMUY1NDAwQkQ5REQ5QkZBMjAxRTk1QTI0NzcKKzoxMEUxOTAwMDIyNDEzQTBBQTJERDk1NkQ2M0Y2QTg4NkRGRDM0MjM4QTQKKzoxMEUxQTAwMDE3RTI2N0E3NERDNERGNDZDQkFGNTk5NDIyODlFNkFGOEIKKzoxMEUxQjAwMEY5MUM3RTc4N0ZFMUVGOEZCRjIxM0QwNjc4ODZCODE4ODUKKzoxMEUxQzAwMEJDN0I5MDE3RkMxMkUwQTNCQjk1OUQyN0VGNUU0OEVENEEKKzoxMEUxRDAwMDFFNUE2RkExOTM2Qzg1RkNDMjM2MTcwMUZFQjg1MTNDRTQKKzoxMEUxRTAwMENDOEFBMjhCNTlEQjE5OUZGQzI4Mzc1MUU1NTc4MkVGNjcKKzoxMEUxRjAwMDI5MURDRjRENTBFREE4NjAxRERBQUY3NDFFOUQ3MzEwMjAKKzoxMEUyMDAwMDJFOUM4Nzk4MkI3RjE1RTk1NjRDQzY3MTMzMUJDMjlDRjgKKzoxMEUyMTAwMEZFRkU4OTk2NDZFODRBN0UzNjM3RjU2NkUwRUNDNzdEMTUKKzoxMEUyMjAwMEM2NERBQTlDMjk1RjdCOTQ3QjVCNDcwNzJGRTY5QTkxOUEKKzoxMEUyMzAwMDZFMzI5RjNEQzI4MTdGNDhDQjVCMTc3QUIwM0VDNjA3RTYKKzoxMEUyNDAwMDMzOUY2NTdFRDMyNjVBN0VCRjQxQUU2Q0MwRjk3NDM5QzgKKzoxMEUyNTAwMDk4RkQ0OEU1Q0E0OTgwRUI5NDY5MEJCRUVGNzc2QTNBQUUKKzoxMEUyNjAwMEMxNzc2NkVGQjgxMDNFOERFMjU5ODVGNzk0QzBENjkzMUEKKzoxMEUyNzAwMEE3Nzg2OEE1Rjk5RkU1NEEzOEZFNjkyMTc4MUZBQ0ZCQUQKKzoxMEUyODAwMEU5NEM3NkJGQkJDQkI0MDNERjNCRDVGODNFOUE0RjdGNUEKKzoxMEUyOTAwMDk2Q0JGQ0M5Q0MzNTQ3Mzk4ODI3Nzg5Q0NDOUVENEUwRjYKKzoxMEUyQTAwMEQzRUE5NUU0NTU5QzA1RkNDRUFBMUU0MjNDMzRBRUUxNkYKKzoxMEUyQjAwMEQ5N0QwRDE1OUU4NTQyQTAwMEZDQjQ2MUI1QkY5M0FCMUUKKzoxMEUyQzAwMEJGNkQzRTQ0RTE2QjJDRTY5MDlFOUZGQ0JCNTc5MTJFQTgKKzoxMEUyRDAwMDFCN0IzOEY2QkI0MTNEQUYwQUFCNzRGRUQ1QzFFRkJEMjkKKzoxMEUyRTAwMDhBN0E2NUU5MDA4QjFGMzQwRTFDRTdFRjc1ODFCRTM5MTEKKzoxMEUyRjAwMDg5RjREOTQ4RTlDRjVFMEFFQkM2RUNEODZCOTY3MDJFNEMKKzoxMEUzMDAwMEU4Q0I2OEZBNzQ1NjMzQjkwODMxRDc0MkY2MEUxQ0VFRTIKKzoxMEUzMTAwMEZGODZENkRBRDBFRUQ3RTRBRkE4QzIwOUVGMDg4MjdDMzgKKzoxMEUzMjAwMEZEOERDQUVGNUFGRjExN0ZENUVFMDdGQUY2QkQzQkZEMTIKKzoxMEUzMzAwMDI0QkNFQkQ2RThFN0ZDNzAxRUY5M0Y0NkY1MDk5M0Q3RkQKKzoxMEUzNDAwMDUyMjJGQzc2NjBBNEZGNjhGQ0U1RTYzMUY5MUE0MzhGOUYKKzoxMEUzNTAwMDdDMTg0QjhGNjg3QUQ2Rjc3NDA1QkU5N0FDQUQxRkFGQUIKKzoxMEUzNjAwMEUyN0Q1NEJGRTdCMUZCNTc4OTc5QkMwQThGRUM4NTM4NTEKKzoxMEUzNzAwMEI2NDRGOUI5QkIxNERFRjUwQjE0NEI4MDlGNTRBNzFGQUMKKzoxMEUzODAwMEUyM0I3RkVGN0U1RERBQTBDM0Q3Njk4MUYyM0JDRDlGOTAKKzoxMEUzOTAwMENFNzcyMDNDOTQyRjkyRjI3NEVCRDc1MENDN0U2N0VBNzQKKzoxMEUzQTAwMEM5RUZBRTQwQkMzNkMwREE1MUJDMzYwNEVGQkIwRkYxNEEKKzoxMEUzQjAwMEVDMjVFMjMxOTAyRjQxMjZCRjFBRDZEQ0M1REUwNUQ3MDkKKzoxMEUzQzAwMEY0REY3MzFDRTJCRjQxNzFFMTNCRDc0QkZCNTcyMDdENkIKKzoxMEUzRDAwMDEyOEZERDVGQzhBMTVDQzM3NUQ2Rjg0Q0NDRDVGNjFEOTUKKzoxMEUzRTAwMEQ4QkI0M0Q0QUY2Rjg1Nzg4OUU2RDcyN0Q2MDU5NDA0ODgKKzoxMEUzRjAwMDY5MkM5RkE2QTg3RUZENENENUFGQjdDQ0I2RkQ1OUZEQzQKKzoxMEU0MDAwMEZBNERDRDNGNDFGRkU3MjFFRjhGMzBENUY4ODRGQThERUIKKzoxMEU0MTAwMDA2N0VCQTJEOEZEOTJEOTI5QTU2RTQzMUJFREM1NERBOUQKKzoxMEU0MjAwMDhGRjRCRkU5NzIxM0YyOEZBQjlBQzkxMUQ3MDVBM0ZDMjEKKzoxMEU0MzAwMEQzRTI2MEQ0ODM2Mzc0RThFQzVGMDRGQjExMEJCRkMyQ0EKKzoxMEU0NDAwMDg5MjAwN0UyQzFGRDE5QUVFOTY3NzA1RTg1MUM2N0U3QTgKKzoxMEU0NTAwMDI4MTY3Q0YwRjM0NEZEM0JBNDM1Nzk4Q0JFQUZGNTk5Q0EKKzoxMEU0NjAwMDQ5MThGMENEMzcwOUUzRDlCRkYxRkFDQjA5NTdDREY5RjcKKzoxMEU0NzAwMDI3QkE3RUZGRDI5Nzg0RTc4MkFFM0RCQkYyRjM5MDU3NzYKKzoxMEU0ODAwMDhFMjZFMTM5OTI5QzcwMkREMkM1MzVDRjFDM0ZEMDgxQUMKKzoxMEU0OTAwMEE3OERFMUU5NUE3RjI1RDJDRkJCRTk5MjA5REUwOTZCNEUKKzoxMEU0QTAwMEVEN0Y2MjNFRkM1RTc0QkQwQUQ3QkJERjM1MzcwMzFFQ0QKKzoxMEU0QjAwMDc2N0NFRDNCRjNFMTVEQzk0RDIxMkUwNUVFOUI1REVCRDYKKzoxMEU0QzAwMEZCQ0ExRjQxRUZENTFGN0QxOENGN0RCNTdERjM3RkExMUUKKzoxMEU0RDAwMERENkQwQTFENjFERkZCOTI0NEE4NzdGNTk5MDNGMzAxMTYKKzoxMEU0RTAwMEJGNkRGRDZENThGRUVFMzM0NzMwN0ZGMjZCREYzMTFGOUQKKzoxMEU0RjAwMDJBOEREMEYxQkJERjNERjJDM0RGNDMzRTkwODhGNzcyMzcKKzoxMEU1MDAwMDFBODI0RjNFMEU3OTUyOUJDOEVFNUQwNTVGMTFGNEJGMzMKKzoxMEU1MTAwMERGNzVGMEY4MjBGMkExNDYxNzRCRkIzOUY1REQzMDAxMkQKKzoxMEU1MjAwMENGNzk2OEY0RkI1NjQ1NzExOUYwMURBNTUwQkY3OTNFQUYKKzoxMEU1MzAwMENENzcyN0Q0Qzc4QTIzRUU1MUU3REIwMEI0MDhFM0FFREEKKzoxMEU1NDAwMEUxNDJDMDA3NUQ4MkQyODdGMjVDRUNDRjA1NzlFRTJDMDgKKzoxMEU1NTAwMDBFMEJGMDJFRTlFQUJBRTNGM0Q5Q0YxMEI2NjJGOTRBMEUKKzoxMEU1NjAwMDFCM0IyRjM2OERGMjBCQkMxRjQ1N0IzQkZBMjFDNEY3QkEKKzoxMEU1NzAwMEJBMUU1QzA3RkQxRDM2MTNEMTlDMTE4MTc3QjMyMEExMTMKKzoxMEU1ODAwMDdGQjRCOTg2RjM1MzBFMjMxQ0Q5NzYyQTE1RjZDNzlBQTEKKzoxMEU1OTAwMDg5N0FBRThCRDVFQkEyRUVBNTJEMTlGNTEwQjFEM0I0QzcKKzoxMEU1QTAwMDZDNUJFQzM4RTg5Mzc5MkU5NTNFMTlCRjY2MEVBQ0M4Q0IKKzoxMEU1QjAwMDA2Rjk0MTNDNTY3RkExMkZEMjVGQ0VGOUE2NkU3OERFRDgKKzoxMEU1QzAwMDNGQjM3RTY4MTFDQzYzNDlEMTg2MTkzMDBGMEZDNEZCNkQKKzoxMEU1RDAwMDQwQkYyODJFRUNCRjExRTI5Mzk0OUZCRUFBQ0FDNzM0NTUKKzoxMEU1RTAwMDMxODBFRjhDRDhFNDQwMkFGQzI2OUI2NDBERTAzOTZFMjQKKzoxMEU1RjAwMDY5N0RDMEQyMEE3Mjg2MUZDOTVEODU4QUYwOTg2MUZGNjUKKzoxMEU2MDAwMEYwQTAyNTk4MzExM0ZBRUI1MkY1RDM1MTA2M0Y2RDhGRTgKKzoxMEU2MTAwMEZENDk5NUIyMDdEQUQzRkVCMTNGNUI5RENDRTM2RkJFRjcKKzoxMEU2MjAwMEQ5RDgzQUZDRUIwRjZFM0Y2NjhDOTc4N0M2RjQ1RkVBNDkKKzoxMEU2MzAwMDAyRkRBMkFDQzE3NTkzMDQ5Q0VGQkI1MDE1RjFBRERDOUIKKzoxMEU2NDAwMEFBOEY2MzQ3Qzc3QjQwOUVDMTdFRUZFOUJDRjJDMUJDODUKKzoxMEU2NTAwMEQ0NDhBQUM1ODFBMkYxQ0M0QkI0OUNGNjUzMjFDOTk4RTkKKzoxMEU2NjAwMDkyQkUxQkJCNzdBNkM5RURDRDdCNTRCREZCRTIyNTk0QzIKKzoxMEU2NzAwMDNCOUI4MzNDRDNCQkMxQ0JBODc3RkZBNTQ1MjY2RjUzRkIKKzoxMEU2ODAwMEMzRjJFMEYzOTc5MEJFRUYzREMxRjRFRUU2MTMyNTAyMkUKKzoxMEU2OTAwMEQwQjNGNjFFRjJFNjhBNkJBODdGMTUzMzQxQkFERTJDQTIKKzoxMEU2QTAwMEY0OUZGNjQyRkZEREM0NEQyRDdCQjI3OUZFRjAyRDIwQTQKKzoxMEU2QjAwMEZGN0VGREJDN0QwREI0M0Y2NTMyMjFCRDlERUFGREM0RUEKKzoxMEU2QzAwMDkxMzY0RTBGMUZGMzAzQjhGQTEwRjJFMzY2RDUyRTI4RTkKKzoxMEU2RDAwMDVGN0JERjAxRjBDNzFBRUJEOUVGMTE2QzFFNTBGOThCOEQKKzoxMEU2RTAwMEZBNjM4MERGQ0QyNzVFNDVGQUQxRUM1RURGRDMzNTQ4OTMKKzoxMEU2RjAwMDZGNkU0QTZGRjhCQjA5NTU0MzA4MUZGREYzMTdEMkQ0NUMKKzoxMEU3MDAwMDVEQzVERUM1NUQ1MjU0NTIwNkY0NzY3MkY1MEY3NzgyMTAKKzoxMEU3MTAwMERFREU1QzQ1NDRFOEZGNjA4RUZDM0NCRUZGRkIzQzg3RDAKKzoxMEU3MjAwMEVGNTExRUI0RjQ1NEMwM0RDOTgzMEIyNTExRjg2MzczMzcKKzoxMEU3MzAwMEIwNzY1NDNGRTFGOUVBNjBFRDAwRjI4RjY3OUQxRkVDN0YKKzoxMEU3NDAwMDg3RUVENjIwREFENUREMTk0RUI0MEIwRTNFREY4QUZBRkQKKzoxMEU3NTAwMDczQjNFNEYwQzNFRjk5MkMzREMxNkRDNUY2OEE4QjMwREQKKzoxMEU3NjAwMEY4MzlCNEYzOTc4NjZFQzM3MzVCMUEzRTk2NTYwREU3N0QKKzoxMEU3NzAwMDMyNzlDMUUwRkVCNTY1RThEMzMwRUY1RjdGQ0YwQTZGMzUKKzoxMEU3ODAwMDdFOEZEMkRGRkYwNUQ2NDBBRTU2MDA4MDAwMDAwMDAwMkQKKzoxMEU3OTAwMDFGOEIwODAwMDAwMDAwMDAwMDBCREQ3RDBCNzg1NEQ1QjYKKzoxMEU3QTAwMEI1RjAzQTczQ0UzQzEyMjY5MzkzMjdFMUU5QzkwMzA4RUEKKzoxMEU3QjAwMDk4ODQxMzA4RUY4NzI3MDQxMDJCQjU4M0YyQjIyMjBFM0EKKzoxMEU3QzAwMEM4MjM0MjQ4NDZDNDhBRDc3RTM3ODMwMzMxNTI2RjZGQ0QKKzoxMEU3RDAwMEFDMkZFQUE1NzZBMDZBRDEyQjEwNkRBQzUxMDMwREE4MjEKKzoxMEU3RTAwMDE0QUJCNUQxNTI4QTE2QkRBMzIyMkY5MThDRTA4M0RFRTMKKzoxMEU3RjAwMEQyRjJBRkI1RjYzOUM5Q0M2NDAyNjJFREZGRjlGRkU5OTgKKzoxMEU4MDAwMDU3MzdGQkVDRjdEQUVCQkREN0RFOTMzNkQ5QkZGMThFODUKKzoxMEU4MTAwMDMyODAyQkQ1NjFCQUFDMDNBNDJCNkRCRTNCMzIwMUQyNDIKKzoxMEU4MjAwMDAwRjQzNTk4NkZCMDdCOUQzQTk2NDdGRTQzMEE2RENFNTMKKzoxMEU4MzAwMEM1RUZEM0MwMDgxNTAxRTRERjIzMTkyMTM3NDA4QTI2MkMKKzoxMEU4NDAwMDAxNjQ1MTZBMzM1MzA3QzAwOEMwQkYwNjkxQUE4MTEyMDAKKzoxMEU4NTAwMDZGMzFDMDI3QjUwNjdDMzgwMEY4NEZDQjA2NThDRUZGODUKKzoxMEU4NjAwMDAwNThCMUE4RDVBMTYxN0Y1NTRGODlGRTMyOUQ0NkU5NzgKKzoxMEU4NzAwMDJEOTg5RUEzQkZDQjMwNUYwMTM3NzhCMTNDNEI5NjZFOEQKKzoxMEU4ODAwMDk4QzFBOThENTNBQkRDNEE4Nzk5RjNDODdENjRFMUJEN0IKKzoxMEU4OTAwMDUzNzBGRURGQTkwNDNEMDk4N0U4NUQ4OERGMzEwRjdFRjQKKzoxMEU4QTAwMDA4MERDMEY5RjdBRUY0RjZENUE4M0M3M0E5MkU2MzNFNjcKKzoxMEU4QjAwMDJCMDNCRTRGRTU5MTM1MEVEODJDNzVFRDc3MjRBRDZCNEIKKzoxMEU4QzAwMDA0RDVGMzk2NDk1ODJGQUI2NzhBMUVBNEExRTQ3MjVCNjYKKzoxMEU4RDAwMDEyQjUyQjk1RjRDRDFBRTVBRjdFMTQwODRFNTlCRDc0RDAKKzoxMEU4RTAwMEVBMDcyMDY0QzJDMTVCNjZDMzdBNDdCMzUzRjRGNUY0MDgKKzoxMEU4RjAwMDNERjQwN0U1NkE4NEM3MjQ0REI1Q0E0QkE5OURFNjAxREUKKzoxMEU5MDAwMDU4NUZEQUQ5NkU0QUJFOTdGQjlCRDIzMzQ5MEZFMjNDN0YKKzoxMEU5MTAwMEE3MzcwNDRBMjA0RkMwQzFFQkVFODQ0MzY4NERGMkRDQjgKKzoxMEU5MjAwMDUwMTQzQ0M2MTMxQ0IwN0Q2ODMwQ0M2RDJDMjJGODdCOTMKKzoxMEU5MzAwMEFCQTg5RjZDOUI5RUIxMUUzNzE1REM4MTkyNkI1MjY4MTEKKzoxMEU5NDAwMDlDMjBDMzZCMDBDRDAzRDMyOUI4M0UzRkY1OUJFRjVEMDAKKzoxMEU5NTAwMEM1RjBDODRBRDExM0MxNjNDRjI1MDIxRUJCRTc2QzkzMzMKKzoxMEU5NjAwMDM3NjBCREVBMjIyOUU0QzRGOURERkZFMjhDNTI1QTY3MjAKKzoxMEU5NzAwMEY1NENCNzBFOThBRkY2MjkwQjY5NUMwOEI4RTAzMUNDQkUKKzoxMEU5ODAwMDgzNkZEMUJENTMzMDVGNURFOUQ1RDc2QkJDRUU0NTU0ODUKKzoxMEU5OTAwMERFMzczMzQ5NUY4RkU1MEYzRTJGMTk5NEFGMEVCODQzMzIKKzoxMEU5QTAwMDQ5OThCRkIyNTlFMDQzNzVGM0QzQ0E4RDk4RjYyMEJDOUQKKzoxMEU5QjAwMDczNTNCQjQwQzk4Q0UyQ0VGOTAwQUNFMUY5NTQ0RjNBMzUKKzoxMEU5QzAwMEQxRkY2NTZDMUY5MDQxOTcyNzYyREUxMTFFQThFM0ZBMDQKKzoxMEU5RDAwMEFCMjc4NjA3MTJCQzRFM0U5RjM0OTdEQUJGNjJCMzA1NjEKKzoxMEU5RTAwMDY4OUM1NzM2NUZCQTI5Mjg3NUVERTdBNEREREI0NEVCNTgKKzoxMEU5RjAwMDNGODlFQjBGNjBGOTZGOUZGRjczODhFODYxMkREMjgzMjkKKzoxMEVBMDAwMDlDODM3QkI0NDYyQkE3RjJGNTUzNDBBNTdEQjFGNjZCRjIKKzoxMEVBMTAwMDhGMjM1MDQ4NzhCNTI3MkY5OUYxODNFNkU5NDUzODFGQjEKKzoxMEVBMjAwMEE3N0ZGNjAyQjhGNTEyNkY4RDg2NzBBRUI2QjVENjI5RkYKKzoxMEVBMzAwMEQ0NkU0QjA2QzAxOENDQkY3MEY3NDA5RkJCMkI5Q0IxNjcKKzoxMEVBNDAwMDNERUY4QjRCMDFDNjVGNTdBODQ3MjgxODg1NTcyRTE3RjcKKzoxMEVBNTAwMEQyREEzMDRFMDM2RTRDN0JBQzE2RjA4OUVGRTc0RUNEMjgKKzoxMEVBNjAwMENERkRBQzcwODVGN0UwQ0U0MUNERUEwNjU3MzZFMjkxOTgKKzoxMEVBNzAwMDJGNTlFM0VGNDlGNjgwRDEwN0U3RTM2ODJFNkZFRDgzNjYKKzoxMEVBODAwMEU1RDlFOUY4MUZEQUI3Q0QzRDQyQjQ2RkQ5RDlFMDdCQkIKKzoxMEVBOTAwMDI2NDFCRkFCNEMzQ0IzRjZBNTIxMUQxODJGQjMzREEyQjgKKzoxMEVBQTAwMEZFQ0Y0REJBRjk4OTQ5OTc1QkNDMzQ4QTJFNjJGMURFRUMKKzoxMEVBQjAwMEVEQ0IyNTNFOTE5RDBDQkVDNjA0RTM1OUVENzE3RTVDMDUKKzoxMEVBQzAwMDZFQ0QwQjVDRDg0RjI2QjVEMzZDOENERjcxNzQxN0NBMzIKKzoxMEVBRDAwMDJBMUU0Njc0MzcyNTU5REZFRDIyN0ExQTk2M0IyQzA4RjgKKzoxMEVBRTAwMDlERTMyMDI0NzI2N0E0NzRDNTAzNUEwN0QxMEZBRDhCMzAKKzoxMEVBRjAwMEU4QUNCQjdBMERCQjA0N0Y4QUM3Q0I2NzRDM0FBOTIyMkUKKzoxMEVCMDAwMDVDQzc3OTZGOTM5MDFFMTNFRUIzRThBN0RFOTY2QjdCMUMKKzoxMEVCMTAwMDEwRTdGQkEzRkQzMkYzRDlGODdBNTZCQUFCMTZBMDc1MEQKKzoxMEVCMjAwMDEwNDBERUM2NkI1M0JEQzVEREQ3REI2NkQ2RkI3MUFEQ0QKKzoxMEVCMzAwMDhCNTNCN0FFQUQ1MUIwRkZBMTJENUFBOTBDMzQ5RTM2MDAKKzoxMEVCNDAwMDg5QzYwQkUwNzhCNENGMjkxM0UxNTMxOUUxRTMxOURENEQKKzoxMEVCNTAwMDUwNzg2NzJFRTE3OUUzNUM1QUQ3NTAyNTZDMkIyNUJFOUYKKzoxMEVCNjAwMEVCQjU0MTZCQTFFMERGRTdGMEZGM0RFNzI2NDNBQkFCNDAKKzoxMEVCNzAwMDMzREZDQjk3MUU5M0VGNTNEOTNCQTY3RTNGN0Y1RTRDOEUKKzoxMEVCODAwMEY5MjVBQjg3QzQ5NEU3MDY4NkM1RTRGM0VCQzdDNkQ0ODIKKzoxMEVCOTAwMDFGRDAzMDI5MjYzRjY4QzM3NzYyRUEwRjBFNUQxRDkzQjAKKzoxMEVCQTAwMEJGNzRDQkY3NjNFQTE3MzcyRThDMjk5RkY0OEZGQ0RERjcKKzoxMEVCQjAwMDNGMjUzQ0E3RjUyN0UwNzM1NjFBRDE3Mjc5RkY4NjM2QjgKKzoxMEVCQzAwMEM3QUUzRjc1NzRFQ0ZBMTU4ODAwRDFGQkE0RTRCRkVBMjgKKzoxMEVCRDAwMDg5RThEOTRBNTM0MUY5MkM2Q0I1MjMzRUUwRDI2QzBGMzkKKzoxMEVCRTAwMEUyM0NDQUZGMkM4N0Q2Mjc5ODg3ODVDRjU2N0U5MjIyOTMKKzoxMEVCRjAwMEM3OEM2QkYxODkwQkUxNTc5RUVGRkNGOEYyNjNDMjE3RUIKKzoxMEVDMDAwMEU3NzlFNkZEMEYzOTIxNURBQUI5ODIwRjI4RTBFNUY1MjUKKzoxMEVDMTAwMEE3NEU5QzdCREVGNURCRTNENzBGMUFFM0JEODdENjlGQkIKKzoxMEVDMjAwMDAwRUZFM0Q3OUYzQTNBNzYxRkFDRjVFN0Y5MDYzNzg3NEUKKzoxMEVDMzAwMEIxOUZDRkU3NEEyQzVGRjY1MUQxOThBRUZEQkQxQkI3MEYKKzoxMEVDNDAwMENFRDlBQjUyNTk5RjAxRUYzNTA5RUI3N0NFRTM0RTlFRkIKKzoxMEVDNTAwMEM3RjU0RUYwMjc4MkMzNzQxMzBFOTVCOTgyREUyRjQ0OTgKKzoxMEVDNjAwMDlGRUY5QkYzRjgxRkEyNEY0Q0RENkI3Mzk5MUU2MTlGQzIKKzoxMEVDNzAwMDFDMUE4MDVEMkRBQzk3NzZGNTQ0QkM0OEY3Qjk1OTJGMjYKKzoxMEVDODAwMDVCQThCNDQyNjk5NDlDQkZERkE0RUYwNzRERkFERTUwNDUKKzoxMEVDOTAwMEFCNzIzRjBGRDdFNjcwQkFCMTU2RTNFRjhGRDQxNjcyNUUKKzoxMEVDQTAwMDFBQUFENUY5RkJFNkRBRDE5QzNFOEFGQTE4QTU4RkQ3QzUKKzoxMEVDQjAwMDRFRTM3NDRCQUQ5N0VCM0Q1OTNCOTdEM0E3NkE3REZDNzAKKzoxMEVDQzAwMEREREE5RkVCQ0RGRDAxNkYwNkNCQjNGOEY1Q0M1Rjk1OTgKKzoxMEVDRDAwMDE4MkY0MTJFRTJGNkYzOTFDRUU0RjNGMEI1MkVFREU1RDgKKzoxMEVDRTAwMDc5QTlFN0MzQTNENTA3NzNCN0JGMUM4NTA3RDdFNUE2RTYKKzoxMEVDRjAwMDY0MUVFRTgxRkYxODA1QTNDRUM5MTc2RUZGNjVBREI2ODEKKzoxMEVEMDAwMEZENjVGQjg1RTlDMkMyMTczOEZCRTE4MDQ0RjVBRUE3N0IKKzoxMEVEMTAwMDMxQzcyMkJGQzlERERDMTA3MDc3MEY5RjRFM0M4QUMzMUMKKzoxMEVEMjAwMDU3MkZFMjJCN0UyRDIxRDlERThCQ0FDM0JEQTNDN0Y5OTUKKzoxMEVEMzAwMDkzQjlDRjU2N0VFNjRDODFBRkYxRkRERTZGRTJERjJDNUEKKzoxMEVENDAwMEMyNEYyQzlGMUQ0N0FGQTc3Mzg1RkMzQzlEMkJGNEY0NEQKKzoxMEVENTAwMEZERERGMDhCN0I3MjZEQTZGQzE0RkIzRTZCOUZFMDRCRTAKKzoxMEVENjAwMDc3RjY5ODNGQzE5NzYwNUMyOTRGOEJBMUNGRDkzMzYzNjkKKzoxMEVENzAwMEY3NzFCRjVERjBCN0ZEN0Y5MjQzNkIxMkVDRkY4NURBNTAKKzoxMEVEODAwMDVCRUI4OTZGRjcyNzczQkQ5RkZFN0Y0NjZGRkJBRjREMkYKKzoxMEVEOTAwMDYxN0Q3RUJGRERENzJGMkI2QTdGRjY1RkRCNjM2RUEyQkUKKzoxMEVEQTAwMDdERkZERjVDQkJEOEFGNDIxNTQ4QkU0MzNBMThBNDA3Q0QKKzoxMEVEQjAwMEUxOTIwMjBFRDJFNUEwNDAzRDRDNzQ4MkM2MTBEMTQ1Q0UKKzoxMEVEQzAwMEY3NzhBOUMwNjE4QjlFNjQ4MjY3MTJFQkUzOUZDRjRDRkEKKzoxMEVERDAwMEUxRkQwNzlGNkE0MDU0RkZBMEE4QUM5NzZFRkIyRUVBQTYKKzoxMEVERTAwMDBBMzQ5RTgyRTNBMTFFMEFCQUFENzNGRkYyRThCRkM5REUKKzoxMEVERjAwMDlERkM1QUVFOUVERTJFODQwNzE2MUY5OTREN0NFNDNDNDYKKzoxMEVFMDAwMEYyQkE2QkJCOEJFMzIzODc4ODhGNUNGQUNERjMxMThCNEYKKzoxMEVFMTAwMDhFRTFFQzhEMDNCQzI5NURDQjY3MTExRkU5MERGMEQzQUEKKzoxMEVFMjAwMERDQjc5OThGN0M2RDM4NTk3NDZCRUExM0YxRkNBNERCNjUKKzoxMEVFMzAwMDc2Q0Q5OTE3OTA3RjI2M0Y1N0ZDRjU2MUM0OEJEQkU0QjQKKzoxMEVFNDAwMDk0ODZGNUQ4RTQyRUM1RkY3M0NBMDcwMjBBM0M4NkE5NEEKKzoxMEVFNTAwMDczRjVFOURFODc4NjczQjc4NTBBRDcxQkMyRjY5RDUzMjMKKzoxMEVFNjAwMEYxRkYzMkNDRjZBMDUzQTU3QTBGRjVGOEY3RUQ5NDVGRDkKKzoxMEVFNzAwMDhEMUNEMzg5RTk5NzQ5RkQ0MzgwQjY0MDY5OUVFMDNGRTgKKzoxMEVFODAwMEIyRUI0Q0VGNDM1MUYzQjNBQkQwMjczQTVGREFFQUVBODcKKzoxMEVFOTAwMDczMjg2QURGODZFRjU1NjNGMjIzREE3MjYyRUE4RjNBRUIKKzoxMEVFQTAwMEEwQzU5NDhGMDkxN0M2OTQ4RjNCQUFDN0U0Mjc0NDQ2OTAKKzoxMEVFQjAwMEM3RDRCRkVDOEMxMTkzMkY4NzJCNjJFQTU3Qjg2NkM0NzYKKzoxMEVFQzAwMEU0QTdBOEQ3QzZENEJGM0M2NzQxNENGOTE1REE0REIxQzkKKzoxMEVFRDAwMEZEMTU3ODg3RTdFMUJBMTczQURDRjU1MjJBREE2OUI5MDUKKzoxMEVFRTAwMDQ2MTlFNTkzOTNBQkZEMEJDODRFNUFFMzUxNjEyMkQ1MDkKKzoxMEVFRjAwMDBFODUwODZFNzUwRTk3QkExRUY5RDQwNzkyRDExRjEwQjEKKzoxMEVGMDAwMDRGRUZCM0ExRDU5RDhGRjVFNTMwNTA3QUQwQTY5NzUyM0IKKzoxMEVGMTAwMDlBNjc2Q0YxMTE5RDZFMkY0Q0Q2NjgxRjkyMDcwMkI0NTAKKzoxMEVGMjAwMDkxOUM1MkY0MjQ0MDdFRTJFODExRjk1RDAxRURDQjZGMzMKKzoxMEVGMzAwMDZDRjAxODI2REI1NTU0RjRBOTdFNzM2Njg4RUNERkFDQzAKKzoxMEVGNDAwMDY0REYxNTM0OEZGNUI2MDZDRjFBREE2NzFCNzgxRkNCNEUKKzoxMEVGNTAwMDY0QkNGQUM5NjhDQzFGN0U0MUIxMTE5RTZENkZCMURERjIKKzoxMEVGNjAwMDMzMTZGMzlGNjFGNzMyOTYzN0I1OURGOEM5OTU5ODFGMTAKKzoxMEVGNzAwMERBNjZEN0E5RjY1MDkwRDk0RTVDQUVDMDNENEE3QUY3MTIKKzoxMEVGODAwMDc4RjZGMTBGODQzRDE1RkZGRDY3Nzk4MkRGNjc1NTA4M0MKKzoxMEVGOTAwMDNCMzNCRUZDOEUzQzIxREYzRTc2MjQyRTVGNkVCNkFGNDcKKzoxMEVGQTAwMEI4NkJGQTQzQzREN0VDNkQ3NjIwQkZDNUFBMkNBMzI3NTMKKzoxMEVGQjAwMDlDNEY1RjNEOTMwRkExRTE1MTc5QzUwQkFBOUJCRTBGRkEKKzoxMEVGQzAwMEU0RUYxNTc3Q0Q4M0IwNUJGNDQzN0VBQzU1NDk0NjRGRjMKKzoxMEVGRDAwMEYyM0I3QzNDMjlGMTNDNkUzMUU3NjEzRkQzQTM5QjdFNDEKKzoxMEVGRTAwMDNERkNGREUzQkNGM0FGRDM3RTI2MDk0MjE5ODlEQUJCQjEKKzoxMEVGRjAwMEY5N0I1NjMwNzFGQjdCQ0NGMTNGNEU0RjVDNUVERkQxMkQKKzoxMEYwMDAwMDdGMkYwODY0NDRCNzEzN0NBNzczOUNCRTVDNkUzRjkzNEMKKzoxMEYwMTAwMDA2ODE4NEVCQzhFNEVGOTA2M0U0MTBERUVDNDIzQTI3MEIKKzoxMEYwMjAwMDdFNTE5RTk2RUQwMDI0RjFGOTEwNzlDNTQwRjhDRjIwNkQKKzoxMEYwMzAwMDkzMDBGMTE0NUM3QTI5RjEyOTUwRUM5MUIwNDUxNzI4MUUKKzoxMEYwNDAwMDNGMTY4MEYyMDFEOTBCMzY0NEM2NzMzOEI1MUI1NkRCMjgKKzoxMEYwNTAwMDNGMDg0N0QxRDEwQzIzMzYwRjU0M0Y0QURFN0M0MjdEMTYKKzoxMEYwNjAwMEUzN0E5Mjg3MTRBNjEyQkU5RjAyMkQ1NTREODA1RjU2RkIKKzoxMEYwNzAwMDNBQ0YyNTdCOTVBOEY1MUNFQzQ2NEY2QTMzRTE3OEIwNzIKKzoxMEYwODAwMDU3NjIzODNFNkZGMkIxOTFGMzIwQTFCRUQ2OTZFNzExRDgKKzoxMEYwOTAwMDc2NTlBMURFRjM3QzcyODNFMEVCQ0I4OEVFMzc3RTFGREUKKzoxMEYwQTAwMDMyQjlGQ0FCQzIxOUYxODJFNTdBRTRCQkVFMTBGQjI5NjAKKzoxMEYwQjAwMEJGNzE3ODVCRjhERDI3MDYyRjNFQzk4RjlGNzc3RjJFQzMKKzoxMEYwQzAwMDJGRThFQjdEMkI4RkU1OEEzNjkwRTQ2MjkzNDlCRjREQTQKKzoxMEYwRDAwMDhBRDE2Mzk4OUJGODE4NTQyNjgyN0Y5RjdDNTM0RjhENkEKKzoxMEYwRTAwMDVCNzcxMzE4MzkwQkM4QUZBMUQ4NzVFMjY3QzkzMkY4M0UKKzoxMEYwRjAwMDlGNEUwMEZGRjg3NUE3OUFGM0M2RjY3MzVCQTkzRDc4OUIKKzoxMEYxMDAwMDc0QzFFN0MwRUJDQTQ2M0Q5RkZFODU0QjI4MEZCQzY5MjIKKzoxMEYxMTAwMEE3RkVFN0Y5M0RGQTdBNTQ4MTNFQ0YxM0ZBRjQwMjA4Q0MKKzoxMEYxMjAwMERCODkwRjc3ODE5RjNCRDM0RTdFREI3ODM4N0E0MTlCMUEKKzoxMEYxMzAwMDJGRTU1RjE4OUVFOTA1QzZFNzA0MUY5QjRCQ0RERThBQ0QKKzoxMEYxNDAwMEVCOUMxRkYwMDBGOTY5NkU5ODA3OUU2MjlDOEZFRkJCRTUKKzoxMEYxNTAwMEU5NkYxODU4NzdFMTU1NDM0QUQ2NTI3QUU5RjgzQTk5NTcKKzoxMEYxNjAwMDVCNEY2NkJENEYwQUY0OTFDRjVERkFENUY1QkUzQThGN0QKKzoxMEYxNzAwMEFGOTBFOEUzOTBBNDJENjEzODQ4MDgwNzkyMzdCRDhGMUYKKzoxMEYxODAwMDBGNUMxMDA1QzcxNUZEQ0E3RjlGOUY0NUU3MDM2MDY0QUMKKzoxMEYxOTAwMDkwQkY3ODg3OTNGRDU2QjAwMTU4MEZBREQ5Mzk3ODEzRDkKKzoxMEYxQTAwMEM5ODUyRkYyN0RBRjUxQkQ1MTkzNERGRkFEMTExOTc4MzcKKzoxMEYxQjAwMDc1Q0FDNUMzMEJGRkVDNDQyNzE3ODI5NzZDRDJGQjQxN0QKKzoxMEYxQzAwMDRGNjJCQzE5OTcyRkY2RUJBQkQyNEI2NkJFODA0MzA0NUYKKzoxMEYxRDAwMEUxQjBCOUVDOUJBNzE3ODQ1RjBDRkY3ODJENUZGMDVGNUYKKzoxMEYxRTAwMDJCQjVFMDM2NkE1QUFDN0ZGNzM1NzMxREFGRTU3QjM4MzcKKzoxMEYxRjAwMEZEMjJERkNCNzA2RUVGRjdFOUUxMjQ5MkZGMEU1QzdGMUEKKzoxMEYyMDAwMDAyQkNGNzc2NDMzN0REQURCRjNCN0FGOUE2RjhGMkMxMTEKKzoxMEYyMTAwMEU0QzRGMzVDRkMyRDk5RTcxQjM0NEZFMkYzMjU4OUU3NDYKKzoxMEYyMjAwMEY5NkYxNzg5NEZCODNGNEI1Q0Y5REZGQzNDQkZDODM3MUIKKzoxMEYyMzAwMERFQzhBNzc5QTYyNzlFRTc0RjJGMTI5RUM4RUM5NkI0OEEKKzoxMEYyNDAwMDYyQkREOUM4MDdBOURFMzczRDVGMDgyQzk4NDI3MkU4MzUKKzoxMEYyNTAwMDFBOUZGMEZGMTcyM0M3MjUzRTg0NTM3OUY0REM3MEQyNDAKKzoxMEYyNjAwMDZGRjU3NTFCODhFRkFDRjRFODAxOTVGOUM4MUJGOTgyQkUKKzoxMEYyNzAwMDBGODI4MUYzOTkzOTRENjI3RjUyRkI4ODRGOTcyODg0MjIKKzoxMEYyODAwMEVGRDlEMDlBNDZGQzZBQTc5M0ZERDlGMUVCMEY5OUVCMjEKKzoxMEYyOTAwMDQ3M0E3OTlDRTAwNEQzMjMwMzg5OUYxQzFDOTg5ODRGMUMKKzoxMEYyQTAwMDNDMUU1RkJGM0VDMkYyNjk3RDc5NjJGRDc0OUI0OUFGMkYKKzoxMEYyQjAwMDJCNUMwREQzQjI2REQxRTcyQkI4NDA5OUI4NkNDMEU4ODgKKzoxMEYyQzAwMDQzRjJCNjRDNUQ0QkZDQzQ4MTcyODlFMEVBRTgzM0E0OUEKKzoxMEYyRDAwMDI3RUQwN0U2QkQxMkY5ODE3MzVFM0YyMDc5MThERTI3MUUKKzoxMEYyRTAwMDNBRTA5N0Q3MzlDRUYxREFCRDZBODFCRDdCN0VCRTVDNEMKKzoxMEYyRjAwMDdFNjZBNDNGQzE3QUI2NkFCRTVERjk1MTc2RTNGMjJEMEYKKzoxMEYzMDAwMEFGQUEwNUQxRkU3MTA4REI4MDA1NDdDNEU2RTVGMzQxRUQKKzoxMEYzMTAwMEQzNkZEMDEzMkVDQTZGNTA5QzI5RTg2NTQ1M0YyRkNCODEKKzoxMEYzMjAwMDA3OTIxQjY0M0ZEN0JEMzBBNjk0MzYxN0Y1MEYyMEZCMUMKKzoxMEYzMzAwMDIwOTI5MkNDRjIyMkQ4N0I2Q0ExMTYwNUNGMEZGMzJEMzAKKzoxMEYzNDAwMEZENTNFRTQ2QUY3NEM0N0M3RkI3RDY4NTI2NjU2N0ZFNTUKKzoxMEYzNTAwMEZBQTNGQkE2OTAzRTNGMUZDMkVCQThGRUZDNTUzREU4N0EKKzoxMEYzNjAwMDA4QjI2MzlEMURGRDlEOTE2MkY0REJDRUZFMTVGRTVFMkQKKzoxMEYzNzAwMEVFNzJCN0NBNDMzMTc1RkYyRUUxN0U2Q0Q1OENBMzA0QzMKKzoxMEYzODAwMENGQjVGRDhDNjNCNENFNzhGODA1RUUxQTlGQzY3RTA0MjcKKzoxMEYzOTAwMDgyREY2NTVERjdCREJCN0RGRUFCNjY5Q0E2RkU1RUU4QzkKKzoxMEYzQTAwMEE3NUE3RTFEOURDRkUzOTJBREYzNjE0NTNERUNFQTg0MDMKKzoxMEYzQjAwMEY3NTdERDk3NjREM0JGODhGQUM0Mzk5QUI3MDE1NTdFRjEKKzoxMEYzQzAwMDlBQ0YzQzhCQkVFM0Y0MUMyODE0RkU4MDNBNEZEQkJBODQKKzoxMEYzRDAwMDVENTE3NDc4ODMyRDkyMjVFNDc2NzgxRDM5OTlGRTY3MDYKKzoxMEYzRTAwMDQ3MTJGMzhGRjYxREJGRURFN0UzRjMzNDRCRUZFODIxNEYKKzoxMEYzRjAwMDlGRUJGMUQ1RTc2N0Y5MTdFQ0M5ODlGNTY5RUIxQzYzNTkKKzoxMEY0MDAwMEI3QkRBODgwRjUxMjNBRTcxRDhENzk0OTVCNDRGNkFBOEQKKzoxMEY0MTAwMEEyODIxRUM0RjU5NTVGOEVEODg0RkQ0RDkyRkJCNjg0MDIKKzoxMEY0MjAwMDcxMUQ5RkMzRDlFNDA5OThGRTI3ODhGNUFGN0FGM0EzMkQKKzoxMEY0MzAwMDc0RjI2MzRFNTJFQ0M3QTNGOTUzQkMxRjY4NDA0MUFDNTEKKzoxMEY0NDAwMDNGRjkxNENDNEI2RDI1Qjg4QzRGNjdCODZDNkY5OTk0MEQKKzoxMEY0NTAwMDRBRkQ5NDNDM0ZCOTI3QTVCQjZBRUI1NUM1REVFOTBGRDEKKzoxMEY0NjAwMDhBOUY3Rjc5Mzc3NkU5QjAwMkExNzdCRTlFNkMwQzJCMUMKKzoxMEY0NzAwMEMwQjRCQzlCRjU4RjMyRUI4NTkzOEQ1MTA1NTk5REZEMzIKKzoxMEY0ODAwMDUxRkQ0NEYxMTA2RDgzMkMzRkFFODBFQjM1ODEwNUFDMEUKKzoxMEY0OTAwMDZGRDk1Q0M4NTc4OTdGQTJGRTJBQUJFNDI3MkNCMDMzMTIKKzoxMEY0QTAwMEJEMUJBMEE5RDlFQzM3MTRGQjhGN0M1REMxRkMwNDMzRDQKKzoxMEY0QjAwMDJGRDVCRjFEQTQ3NjFCNkZGMUYwMzkzOEY4MzQyMEY5MzEKKzoxMEY0QzAwMDgwODBFMTczODEzQUM5Q0Y3RTA3MTdDNTdENjBCQTVFM0YKKzoxMEY0RDAwMEQyMzc5MDJFMjZEQjIyMTk4MjJFNDIyMkFFMDE3QzBBRTAKKzoxMEY0RTAwMEU1N0YyQjg1ODMxNDI3QjBENkY1RUYzRjI3M0ZCODExNzIKKzoxMEY0RjAwMDU0MjA2OTIyRTYxNTYwM0Y2M0UwNjAwQTlGQ0JGMUNDOUYKKzoxMEY1MDAwMDcwMUU0RTZCNUU2NjNFQzVDQ0I3Q0Y5QTNBNkQwMEE2QjQKKzoxMEY1MTAwMEI3MjUzRkUyMjEzQzBENEJDODQ3QjE5RjJGOTNGRkJENUMKKzoxMEY1MjAwMDk1RTlDNjlGQUNEQjdCOTM3RkU5M0RDRTRCMkI5Mzc1NzIKKzoxMEY1MzAwMDI5ODdGQzRGOUU0MkQyNTM1NzQzQjJFRUM0NzEwQzc3RDkKKzoxMEY1NDAwMDcxODBDNjc1NjhDMEZFRjg2NDY4RTQ3NUI4REQ5RjA0MTQKKzoxMEY1NTAwMDA4MjgyQUE4MTJEQjRGQzlCRTY1MDU2Q0FGMDA5RjkzMkYKKzoxMEY1NjAwMDFGN0UyRjY1MzNBRDNGNDkzREQ1N0EwNzdFQ0EwMDgzQTQKKzoxMEY1NzAwMEVCNjVDNEM5QzcyQ0Y3MkE4OUUzMzdCQzRBOUM1Q0Y0MDUKKzoxMEY1ODAwMDQ5MDRGRjlFNzNFM0JGQzdDQTRCMTcxQzU0ODk5RjQ4QTkKKzoxMEY1OTAwMEFEREU5QzczQzg5RkRBMDg2RTY1OUQ3MDZCNTM4NDVEMDkKKzoxMEY1QTAwMDY3QzEyRDMwQzlGRjRCODI2QkUwNEVBNzFBQ0NFQ0RFNTEKKzoxMEY1QjAwMERGODYwMDFBNDVGQTc4OUJCQTY0MkJENTQ3QzMwOTZDREQKKzoxMEY1QzAwMEQ0NUY4RTU4NUZBMEQyMjlGNjQxRjE2REE1RjZFRkQ4MzEKKzoxMEY1RDAwMDczNTRCMjdCMkMzQzdCNjhBMEM5QUZCQkYxNzczQzUwMjUKKzoxMEY1RTAwMDIwRjRBM0VBRjRDM0Q1MjRFNzAwMDdCNUY1MDczODk5NUEKKzoxMEY1RjAwMDcyNzQyNEYxMEQ5NDk3RjUyNDJGOTNFQzA2QzNEQjkyREIKKzoxMEY2MDAwMDlCMkI5QUQ2MDBEMTU1NzVGMzAyMjBCRUYyOEVFNDFCRDcKKzoxMEY2MTAwMEYwMzJEQjIzQzA3NkQ5OUM2OTgxNTc2QzFBRjlCMjY2NDcKKzoxMEY2MjAwMEFFNzM2M0ZBNDk0MTFFRTNEN0ZFNTdBNkJFQzI2QzQ4Q0IKKzoxMEY2MzAwMDc2MTc1M0JCRDJDQkJDNTNCMjcwREM2MDMxRTg3NzYyMzMKKzoxMEY2NDAwMEJENjA5MjZGRUJCM0I0QUUzNzY1RkQzMThERTIyMTJBMTgKKzoxMEY2NTAwMEUwQzNFMTI2MzJFMUY3NERCMzMzRDg2RjlBNTkxMUE5Q0YKKzoxMEY2NjAwMEEzNzg4MUM4RERBMDUyN0M0RjE3RkEzODhCRUIxQjA5QjkKKzoxMEY2NzAwMEYwMEIxRTBCRkI1OUE0QjYxMkZFRjQ0MjdDOTNENENFQzEKKzoxMEY2ODAwMEYyNDdBOTNDNUZFNDJGQzM3QzhERDg1MkM4NkYyOUZGOTUKKzoxMEY2OTAwMERFMDg4MjQ3OUIwQzE0MTY1NUQzMjJEOTY4RkNGQzk5Q0UKKzoxMEY2QTAwMEMzNTlBRjI5QTBGMkNDRThGMkI0RTU0RjYxQkU2MEVFRDkKKzoxMEY2QjAwMDA0OURDODQ5QjNGOTdFNzYyQjk1QkYwMUJDMEUzMEY5ODUKKzoxMEY2QzAwMEY3QTgzOEZBMURENzQ5Mzc1QzVFREE5MUY3NTdEMDdDMzYKKzoxMEY2RDAwMDVGQjkxOUQ4OEVBRDMxRTU2RDBDQkREMTYyQjFDQzE4RDIKKzoxMEY2RTAwMDQ5RjhEN0QxMEY1MDNGMTU2NjdFOUNBMjcyM0Y3REZEMzEKKzoxMEY2RjAwMDYwRjIwNUVGQzYwN0Y4OUNDMEE2OTM3RkIyNEU2QTYwMjEKKzoxMEY3MDAwMEY4NDBDMENGRkExRUM1Q0QxMEJERjQ5RkI3NkJCNzlEQjIKKzoxMEY3MTAwMDA2Q0IxNDc0QTdFRjE1NzQ1NzA2NUU5OUUwMzU1MkJERjkKKzoxMEY3MjAwMDNCNDhFM0NGOTk5N0NCN0M2NkNDNTE2MEI4MzBFNTYxMUMKKzoxMEY3MzAwMDdFNDI5QUM0RkI5NDNGMjA5RkYxNjVCQzRCQUY5NzExNkEKKzoxMEY3NDAwMDhGNjRCOTM0M0YwOUM3OUIzQjRGRTJGMzg5NTk3MzVEMUUKKzoxMEY3NTAwMDIxMDlGRjM5MEJFOTgzRTNBMTE0NUZFRTZDQzRGNzM5OEIKKzoxMEY3NjAwMDNFNDk5Q0ZCNjI3RTVFOTQzRjFFQjU2MTNFMzc5QkVEMzkKKzoxMEY3NzAwMDA0RkZEMzA5RjAzOTdGODBDMDc3QUI3RENENUE0NzhDMjkKKzoxMEY3ODAwMDdGRTc5MjAxNkVFMUU3MTgzMEY1OTMwMkU2QkYyMkFFMDMKKzoxMEY3OTAwMDI1MkJEOTFCMTE3Q0EzODFGOUQ0NjExQkVBREZBNEZGQkYKKzoxMEY3QTAwMDgyQzFGQUY2MzUyNkJENUJGQzYyOTY3MTBCREJDMUIzRjQKKzoxMEY3QjAwMEJDQjE3QUY0M0JCNDI3NDQwN0Q3NEFBQ0U3Q0U5OTdCNzcKKzoxMEY3QzAwMDdFM0RGQjVDODE2NEM2RERGNDU1NTk5RTk5REYzNUQwRTIKKzoxMEY3RDAwMEQ4OUVCRTlBRjQ5QzEyRkMzODBERjU5MDI4RkQ3RURFNzIKKzoxMEY3RTAwMDZENjdEM0I4N0VDRkM3NTc5Q0JCMDQ1MUExNTJGMDk3MjkKKzoxMEY3RjAwMDFBODQyN0YxQ0JGMjZCMTVBNjk3RUFCNTBFOEVGRkFBRjUKKzoxMEY4MDAwMDY5NUU2M0NGMjY3Q0ZFMjFFODAyNUZERkFGRUI4M0YzMDYKKzoxMEY4MTAwMEVDNTM2NThDOTBCNTI4QkY0RDU1NDgyMkJBQ0UyNjlFMzQKKzoxMEY4MjAwMEMzRjA4RjM4QzgyRjM3REJBMTU3RDFCQTY2QTc4MzFBMjgKKzoxMEY4MzAwMDQ4NDNCQ0JDRjY4QThERDRGRjVBMTdBODMyQ0FEQkRFMTcKKzoxMEY4NDAwMDJENkY4NjA4QUY5MDk1RUI4NDkzODgzOTFDRDdENjU3RDcKKzoxMEY4NTAwMEVEQzFFNzBCRjVCNjYxMUNCNzU1RUY0OUQxQTNFM0E0QTEKKzoxMEY4NjAwMEQ2QUZFOUM0M0I4QUQ3RDI5QzMwNEMzNUY3Mzc5MTlENEYKKzoxMEY4NzAwMDM0NjQ4MEUwNTcwRjRBQzBGMjIyNzBBRDhCRTE5Qzk1NTIKKzoxMEY4ODAwMDJGRTI5NUIyNTI3NTQ3MzA4REY4OEQ2NkQ1RTMzOEJCQkYKKzoxMEY4OTAwMDA3RURCRTVFQzMzMTBEQTE1QTI5RjY0N0I0OEJBN0ZCMTUKKzoxMEY4QTAwMEFDMENCMzlGMUU5QTE0NDQ2MjlDRDk1MjVBNjYyM0I4N0EKKzoxMEY4QjAwMEI5NTM3NDhBNEZCNEZBQUQ0ODM2RUNDNEI3MkE4NjQ4QjcKKzoxMEY4QzAwMDIzODIwQ0NGNERDQTIyRDI0RjkzNjJGOUJFREQyRUY2QjEKKzoxMEY4RDAwMDA1REUxNTdDM0Y1RTBFQTIxQzYwQkU0RjdFRkI2MDE5RUMKKzoxMEY4RTAwMENCQUY4QTAxNTkyQzBGQjg5RkQ1OEE0Qjc1RUFEMDQ1MEEKKzoxMEY4RjAwMDlFNjU3QTIxODVGQzVDQzMxMDY0QTRBRkI3RTU3ODY3ODgKKzoxMEY5MDAwMDUwRkM1RUUwNzU4NUZENkE2NTczRjVFQjE2NDdFREVCMUYKKzoxMEY5MTAwMEU2MEUzOTEwOTlDRkYxNTAzRkQ0RkI1MDNDRDREQUYyQzcKKzoxMEY5MjAwMENFM0NDNTNENTY0MjgzODNGMEJEMzI0RTNFMkU3M0JGNjIKKzoxMEY5MzAwMENDN0FFNEIyNDdFRDlERjgwQjE0MjdBQUU3MTNGRkE4OTEKKzoxMEY5NDAwMDdBQUE4QjNGODhGOTU0MjczRjhCQjMyRjQxN0Q4OUQ2MDQKKzoxMEY5NTAwMDMzMDJGOTMxRjEyMUEzMjA0NTY2RkYzMkNDMTM3MjE0MzIKKzoxMEY5NjAwMDFFOTdDODJGMjY3QjU2RDc5M0RDNkI5NzUyMUFFNEIyQUEKKzoxMEY5NzAwMDRFM0UzOUMyRENBRkJCMTRFRjRCMTQxRjFCNDA3REU5NzgKKzoxMEY5ODAwMDMxMTVCQUNBMDFGMEIzRkUzMjExRTUyNkU5RDE1MkNCRTYKKzoxMEY5OTAwMDFDOTlDNkREQjgxNEZCQTZGMzdDMjU1QzQxRjlEQjk2MDcKKzoxMEY5QTAwMDhBNzM1MjA4RENDQ0U3NjBFMzAyNEU5NUU4RkZDQkU0QjMKKzoxMEY5QjAwMEZFNkJDRDcxRkQ3NjY0RDZDN0Q0MUY3MjdGODBGQjQyOEIKKzoxMEY5QzAwMDdBOEI0NEZDMTBDQjdCNEZDM0E2NDgwN0UzNUE4RTcwNUEKKzoxMEY5RDAwMDdGMUIzMzA0NURDNEVCMzEyRkRCREMyMTlCOERGODZFODQKKzoxMEY5RTAwMDgwRTU0RTEyODQ3MjA4N0U0NjgxRTBCMzY1MDcwNDlGNkQKKzoxMEY5RjAwMDdEMkU4MDFBQjQ0Q0FBQUNGRjlBRTlCOUFDMDc3MkY5MTMKKzoxMEZBMDAwMEQ4MDg3MEZDQ0MwRUYwNTU5QkZBQ0U1RDAzNDY1MEI0N0UKKzoxMEZBMTAwMEE4NUZGMDcxNTM1RkIwRjRCODI5NzFGQjc4QjlGQjdFMzEKKzoxMEZBMjAwMDg1RjhENkU1Mzk1REY2NEJBNkZFQTc4MUM0RkFFMjE1NDYKKzoxMEZBMzAwMERBRjlGOTk2NjFGMTI1ODhFNTRCQjk3MDk2RjcwRkVFODIKKzoxMEZBNDAwMERFNzMyQkY5MDk4MjcxN0E1MEYwMjJGNUEwNUVCOUJFRkYKKzoxMEZBNTAwMDVGRDBGQUUyRjVBMUVFRTIyOTlGMUE3MDcxRjE5NEE4NDUKKzoxMEZBNjAwMDQxQ0MyN0Y5MzVENkIyQjNFMkYwQTc3QUNGRjFGOUY3NTYKKzoxMEZBNzAwMDQwMjdERTc1RTA3MzYwRDM3NUI0MEU5NEU3MkFEOTdEMTQKKzoxMEZBODAwMEQyNkYxRTYyQkE1RThCRjVFNEYxMDRDRDgzQzFGRkMyNzIKKzoxMEZBOTAwMDdDQUIwREZDMTRBRjAwM0VGNTM0RTFBOTI1Nzc5MTEzNDIKKzoxMEZBQTAwMDMxOUVENDJEMTY3ODM3NEExMUY5QkVBOEM4MTI1RTA2QzkKKzoxMEZBQjAwMDQ3QzdFQkVCQkU1Q0YyNDcxQjY1QzUxQzFGNkJDOUUzNzgKKzoxMEZBQzAwMEUxMzY4M0YxNjQwNEU4MTk1NENGQzI5MzkxNjE1MThFRjkKKzoxMEZBRDAwMEY4RjExQUYxOTM3MUQzMTA1RkYyMjhDRTc2NTQxRkQyNDkKKzoxMEZBRTAwMEJCQ0E0MTYzRkMyODhGOTM2QjE1RUU5OTBBRDE3OTg1QzcKKzoxMEZBRjAwMDJCN0VGRjBEM0U3NzlDNkNFMkM3MTRGNUVCRTFDNzI1MkEKKzoxMEZCMDAwMDg0MUY5NkRDNDIzREY5QUUzOEZCRTJBRTM4RkJFMjJCQjcKKzoxMEZCMTAwMEUwQzc5MThCQzE4RkM4NDVFMjQ3QkJGRDg3RUYwNUNBOUYKKzoxMEZCMjAwMEQ4OUVGNUNCRkRCQkUyODdENDcyREI5MjdCODhERTgzNjcKKzoxMEZCMzAwMDI5NDBGQkZFNzQ5MjVBRTFDNjc5RDY1NDhBQjhGM0UxQTMKKzoxMEZCNDAwMEJGMkYwODUyM0U3QjQ1MkVFQjg1NEZBN0U5MkY3MUI5OTkKKzoxMEZCNTAwMDVGOTQ5N0I1MTk3MjBBRTZGMzU3NjEzOUU2OUZDRUY1QkYKKzoxMEZCNjAwMDU2NTBCRTY2MzU5NjYzRkQxMUZCN0M0MUNBMTdGQzUwQUEKKzoxMEZCNzAwMDk0OTdERUU5N0YyOTg1RTQ3QzQwQjQ3RkUxNTg5REVDRDEKKzoxMEZCODAwMEMxRjI1MDlERDlCRUJDQTE4MkYyMzVGNUEyRkRDODAzRDkKKzoxMEZCOTAwMEExMjBFNTA3REYyM0M2QjdGNENFQ0I0Q0ZFRjlCNDc0NDEKKzoxMEZCQTAwMEVBQTVEQkE5M0ZFNDlGOUI5MTdGOEUzQjYxOTQ2RUMzRTYKKzoxMEZCQjAwMEZDMjJENTY2MjNCQzVEMUMwOUQ4MDkxRjBFREJBQTQ2QjIKKzoxMEZCQzAwMDEyRkVDMDQyNUYwRUUxOTk5M0VDNTZCOTkzN0ZEOUM4RkIKKzoxMEZCRDAwMEE5ODNFRDI2MkE3NkQ2RkI1RTk1RkMwQUQ1OUI0NjI0QTIKKzoxMEZCRTAwMDQxNzI3NkI0RUUyMkZFNEVGMUM4OUI1MURFMTQ5OUYyQkEKKzoxMEZCRjAwMEM4OEFERkE1N0IwNDMzQTJGNkFCNjhBMDkwRjM1NkJEOUMKKzoxMEZDMDAwMEVDNzQ4MTE3RjBCMEMwMEIyQkJFQjhGNTIxOTBDOERGQTMKKzoxMEZDMTAwMDQyNkI2MzNGNDQ5Nzc4NjMzRkNCRUY1MEJGRTI2MTg0MTAKKzoxMEZDMjAwMEI3OTc1MzlDMzE5NjVGM0U1NkM0MTk5NzlFM0IzRDM1MUUKKzoxMEZDMzAwMDkxNUQzNDdDQTBCMEU3OEY5QUY3MjJBQ0VGOTVBMTVDODAKKzoxMEZDNDAwMDFCRDFDRkQzODQzQ0JEMDk5RURBMUY0OTVGN0E5QUM2ODcKKzoxMEZDNTAwMDFBQ0IyMDBEQzA2OERBNDc5MTJGN0ZCQ0VGN0RGNTdENzAKKzoxMEZDNjAwMDAxOTZEQUZDMEFFMTExRjQ5Nzc0OUFGRjU1NkRGRUM5MEEKKzoxMEZDNzAwMEJDOUUyQTgwRUZGNTRBQjAwRTUzREUyRjA5M0EzNjhCMzAKKzoxMEZDODAwMDM4MTFDMTdGNjY5OUZCNzY0QzlERjdDQUVENkMzRjdCQkUKKzoxMEZDOTAwMDc0M0I4RTMzNjlGQzAwQTZGQjk5NzMyNThCRUVCRjMzNTIKKzoxMEZDQTAwMDkwRjQ2MDNBQzE2MDdGQjY4RkUzREQ2RjgyOTA4MzA2ODcKKzoxMEZDQjAwMEI5Mjk4RUVFOTdCQjNGN0I4RkU0RDJGMjJEQjE3NEJEOTQKKzoxMEZDQzAwMDAyNUExREMyREYxQzc5RTQ2REVDQkY3MjQzOEE0QUYyMEUKKzoxMEZDRDAwMDY3NDU2MzZDQkRDQTBEQkYzRjIwOTU3NEU1MDM5NTE2NUIKKzoxMEZDRTAwMDFGMDhDNUYyMDE1NDM4MDQxRjc4NjgwODlGN0ZBRENDMDcKKzoxMEZDRjAwMDkxQjU0MzE5RTRGRkYwQjNCQzRGMDIyMUVGRUY1MkY0OEEKKzoxMEZEMDAwMDMwRDM1RjhCNTNEODUxQTY3RTdFOUIyQ0Y0RjMyNDcwQTYKKzoxMEZEMTAwMDY5RUU0MkUyQzMzNjMzNUU1NUU0QURGMTIxMkVDRUU1MDUKKzoxMEZEMjAwMDU0QzNDRENDNkZBQzc4MTgwNDIwQ0JGQjUzODFDQkQ1MUEKKzoxMEZEMzAwMDY4M0Y1QjA3OUY4RkEzRjdEMjk2OUVBRDc0REZDMEYyM0EKKzoxMEZENDAwMEIzQTA3RUMwRjYxNTJDNDI0RTM3OEVGOTEwRUY5QkI0NEYKKzoxMEZENTAwMDBDRkYzRjg2RDZFNUUwNzUzREQ0QTMzRkYzRjdENTQ4QzkKKzoxMEZENjAwMDEwQ0U1MkIyOEI5NUUyNTZFQTczODhBMDI3MTdEMTExQjQKKzoxMEZENzAwMEYxRjc2OUIxRjY1NjEyMDgzRDdFNzg5QkYwRTM4Q0U4MDYKKzoxMEZEODAwMDk0RkI3NUI0QkY0RUQwNUQ0MkVFMzcwMEQxNTdCN0Y2NDUKKzoxMEZEOTAwMDhBN0I1NTQyN0I4NTI1MTRGNjNGN0I5QUUwRUIxN0IyQjAKKzoxMEZEQTAwMDU3QkFCMzQ3M0FGNjMzMDlGNTM2NEM2N0ZBOTJCNkQzRTkKKzoxMEZEQjAwMEJBMkYzQjlCOUE5MjI4OUU2QTY2QjlFQzI1QkI2Q0E2MkIKKzoxMEZEQzAwMEREQzg0QTRGQTBFNzNGNjBFQUQ5MURGNTdENkVFRTRGRDIKKzoxMEZERDAwMEYxNjU2Q0E3RjgyNUVDQjc5NUY4N0ZEQkVCOEU4NDcxQTUKKzoxMEZERTAwMEM5OEFEOUJGNjIzN0Q0NDRGRDVGNDU0RUE5Mjg3RkJCN0QKKzoxMEZERjAwMEUyQ0JFNjdFQkYwMTdERTU3OURBOTc3ODc5RTREODFEMUMKKzoxMEZFMDAwMDc3NEUwOTgxODFEMTcxMDU0RjBGMTJGQzZFNDI4MUYxNEQKKzoxMEZFMTAwMDlCODE3NDRFOTRENDlGRjk5RDU2OEFGNjU0MUZDRTczREQKKzoxMEZFMjAwMDdGMDc2RkJFOUNFMzI0M0UwM0UzODI3MTEyNkJBM0ZDNDkKKzoxMEZFMzAwMEU3MDdEMzEyOUY4QkJDNjFGMkQ3MTQ4QTdEQzNGNDc2OTcKKzoxMEZFNDAwMENERjgwMzhEN0ZENDIxQ0U1RDhFMjY5QkE5NDc5QzVCODgKKzoxMEZFNTAwMEJERDM1MTVGRjBDNzg4QzUyNzZEQTJGQzY4N0FFQzc5RTUKKzoxMEZFNjAwMDhENTVFRjk0RDlFRTUwQURDQkJCMzZDQUZGQUEzREU0MTkKKzoxMEZFNzAwMEY0OTM5Q0NFQ0EzN0VGNzFBQzAyQjY5RkRCOUY0RkRCODkKKzoxMEZFODAwMDE0QkRBRjY3MDc5NkE3MENBMkY4QTI3Q0MzRDE4QkUwODQKKzoxMEZFOTAwMEY4QkM5MDdGRDU0QUQ4NDFGQkZCRjAyNUJFQTMzNEVGRDgKKzoxMEZFQTAwMDZBMEQ4QzY3QTgxRjJERUNCOEE2OThFQzA2MTExRkQyMUUKKzoxMEZFQjAwMDZFMTc3NjYwN0I5MjQ4QUQ3OTlEMUQzODIzNjUxMDlENDUKKzoxMEZFQzAwMENCREUxQzY2QkVEODkxOUYxMTY2QkU3Nzc2QTA5N0M3MjEKKzoxMEZFRDAwMDZEOUY2NTk1OUJGOUZGMTA3OTBENTQ5REU2NUJFRTMyQTEKKzoxMEZFRTAwMEVEODc0Mjc1MkRGQjVENTFFRjIzQkY0REZDRjkwMUMwM0QKKzoxMEZFRjAwMDc4QTExRjlCRjE5RTQ2REZCRkYzMzk1RTc3N0U3RTlCMjQKKzoxMEZGMDAwMEFCRUQ5NUZGQzJFRkYzNEQ3RkIwQUZGOUQzNTdFRUQwMTUKKzoxMEZGMTAwMDE4N0YwRUQzQjgwQjQyNDlDMDcxREZGRkE0NUZCRkJEOEQKKzoxMEZGMjAwMDVGMUJBRjY3N0Q3OUE0RkZDMzY1MUMyRkMwN0VCNTE1MkQKKzoxMEZGMzAwMDJEQkY2NUJFQkVDMkEyRkJBNjU4QkFFRjY1QzJGMTQyOTQKKzoxMEZGNDAwMEU3NkFGMUU3MkRERjAwOUQwRDFDOTQ0MEVGRkIzNUM5RkEKKzoxMEZGNTAwMDZCQzRBRjI5RjI3NEU2NkJBNzlBMjRGNjg3NjhEMDU2NzMKKzoxMEZGNjAwMDQ3NzA1RTI5ODk3RDU5RjlFQThEMTUwRUNBMkYwNjk1Q0QKKzoxMEZGNzAwMEY5N0M1MzNDM0ZGMzA1NDk0RjU4NUUwRjJDRUY0QTIxNjMKKzoxMEZGODAwMDNGOTVFMDVEQjM1NzI2MUYwMkRGQjdEMUEyRjgyNEREMEQKKzoxMEZGOTAwMEI3RDFBMkVDNjJCQTZGMTM5REE3RkIzNkQxRjVFOUJFQ0IKKzoxMEZGQTAwMDRENzQzOUREQjc4OTJFQTdGQjM2RDE3OUJBNkYxMzVENTEKKzoxMEZGQjAwMDlGRUVEQjQ0RTdFOUJFNEQ3NDdEQkE2RjEzOURBN0ZCNEUKKzoxMEZGQzAwMDM2RDFGNThGODBGRkMxRjExMkMxNzVFMjA2ODI2QkQzODUKKzoxMEZGRDAwMDFBQTc0QTcwQzVFRDdBQUIyODlCQzUxOUUzMUZERENCODQKKzoxMEZGRTAwMDg5RUU2N0I5NjdBQTYzMDVDMjYxNEY4RTBDRDI2OEJBMDEKKzoxMEZGRjAwMDc3QjMyQ0E2REZFNTcyMTVGQjA5NTBFRDYwMzlFMkM3MzcKKzowMjAwMDAwMjEwMDBFQworOjEwMDAwMDAwRkYzMTNDRTUyMkI2OTMzRjZGOTYyMDAzRjE3NUU5ODZGOAorOjEwMDAxMDAwMzhGREExRTVERTNBRDJCNzZGMEFDNTdFNUYwRTUxN0U4QworOjEwMDAyMDAwRjdEQ0FFRTc0MDRCMDY5OUYxQzBCREExMzdFMUYzMTQxMAorOjEwMDAzMDAwRDlBREQzM0U5RkRBMjdFQjRFMzA1RDAwQjRDRjVCODU2MAorOjEwMDA0MDAwM0ZCMjE0MDYzRDM0OUVGN0QxMEUyMThEOEU0NzQ0RjkwMAorOjEwMDA1MDAwQTk4RDcyMjg5MERCNzkzRTc0NkFFRkFGMEVGQkIwREU5QgorOjEwMDA2MDAwRDI1RUIyNEE3NEU3Q0M4OURERUYyNDJENzZCRjdCMTREMworOjEwMDA3MDAwQzZFRTc3OEExRUJCREZBOUEzNjNGNzNCMUVDRTY5NDY5NworOjEwMDA4MDAwRUNGRTgzM0M5REUxQkNCQzBGOUE3NzM4N0VDNkI0NTgyOQorOjEwMDA5MDAwN0NCMEUwM0IxQUZGMjdGMDU1NjNGODJFNDFGODNFMkM2OAorOjEwMDBBMDAwRDFCOURBM0Q3QkZBNjg1REUxNUNERDdDQUY4M0Y0RDdFMgorOjEwMDBCMDAwOEI4NUYzN0Q3MTcwRkUxQ0M2NTdCODE5QjgzMEQzMzVFNworOjEwMDBDMDAwQjI1MzVGMkFEQkVCRTcyMDgxNjM2QURGMEFGMzVFQUY5RQorOjEwMDBEMDAwMzhERjMxRTE4QUZBMEJEQjBCNTFFNzUwRjVCMkNDRkE4RAorOjEwMDBFMDAwQ0MyNkEyNjcyMzMzODVGOTgwQkVBMTA3RUZENzMwOTdDRQorOjEwMDBGMDAwRTg2RjMxRjg5ODNGMkQ4RUQzNkI5NkJBRUY3NzkwNUUwQworOjEwMDEwMDAwMTNCRjRFOUEwREY5NUQyQTVCODQ1RTEzQkZERTJFRkU4RgorOjEwMDExMDAwQTg0MkI1QjU4RkUwREI4RDBGRUJCNENDMTY4QjRGRkI0RgorOjEwMDEyMDAwQzg4RjkxMDk2RDBFRDI2M0JBRTM4MzMzNzI4QzVGOTNFQgorOjEwMDEzMDAwREM0MDJFMDYwNDBGNjEwQUYwNUY0MjdEQjJBNkEzNTg5MAorOjEwMDE0MDAwRjhFNzlEN0VFMUU3ODc0MDFBQ0Y2MzE0ODg3OTcwQTNCMgorOjEwMDE1MDAwMjg3RkZGMjgyNUM0N0UwNzM0MjlEOEJGNjREOTYzRjFERQorOjEwMDE2MDAwRjA4NEJFRDJEQUI3QjA1RkY5MjUzMEUxQThDQjkyQUQwQQorOjEwMDE3MDAwRDM3RjhGNTZBMDQxRkFGNUM4Q0Y4NEZFMzREQUQ1MTg2NAorOjEwMDE4MDAwNTRCNEFFRjZGOTI3RjlFNjM5Qjc2MkM2N0Y1RUUwMUNEMworOjEwMDE5MDAwOTJFNjRGN0U4RTZCQ0NGOEJCMDkyREEzNUVBMTdDQzc4NworOjEwMDFBMDAwQjlFNENFNTdGQkQwN0U4RERGRjlGQjBDNEFERjkyQjQ2OQorOjEwMDFCMDAwQzdFRUMwRjFBRjk2MDQ1RUM0REI5NUMxMURFMzM0REEyRgorOjEwMDFDMDAwRkZDQjI0MkZGQjJCQTY4MkJGQUZCMDQ3NDIzQ0FGODlBOQorOjEwMDFEMDAwMkUxRkVCQjUzNjk3NjFFN0YzMjhEMzdGMDkxMDlFNEFBRgorOjEwMDFFMDAwN0FGQTMyRERDMUYzNThBQjdFMzA5NUZDMzFDQkMxRjRFNQorOjEwMDFGMDAwQzczNEM3RUU1RjE3N0IyOENFMEVBQUMyRkRBNzdFRTNFOQorOjEwMDIwMDAwRUQ5RTA0NzgxNDE3MEYxMDJCRUYxNzE0NUFGN0NBNDVGOAorOjEwMDIxMDAwQkM4QTA2RTJGRTc3QTVFOTQ3QUE3NDZERjQ4ODczMzhCNAorOjEwMDIyMDAwOTQ3MzdEQTE4QkREQTQxMEUwQzdGMDc5ODVCRDkwRURCRQorOjEwMDIzMDAwNjJCNDA3RjhCQzVGNzMyNDhBRDcwMzM1OTNDRkQ1NkZCOAorOjEwMDI0MDAwNzRDRjY0QkU3QzYzN0QxN0JGMEVFM0Y1RTI4NjBCQUMxMgorOjEwMDI1MDAwQ0JENDEzQzZEMzM3OUNGRkUxNDE5QTkwRkJDOUQzRjdBNworOjEwMDI2MDAwMUE1NDVDRDZENjNGNUE5RkFENzE4OEZCQjlFMENGODg0RgorOjEwMDI3MDAwQjlCNzMwQjg1MDlDN0I5Nzk5N0E1M0E1Q0I4NDUzNjExQQorOjEwMDI4MDAwQTA4RUY0RTMwRUJEQTk4QkJERjhGNUVFQzk1OEYxMkU5MgorOjEwMDI5MDAwMDhBRkEyNDJDNkUzMDZDRjlBQ0NDRUYzMUQ2QjFEOUZEQQorOjEwMDJBMDAwOEM2ODdCQkMxNUUxMjVBNzRDNzYxMTdGNUNEMUNGMzdEQworOjEwMDJCMDAwOENFQUY3M0IxMDNFNEM3NDAzNkU4REY1RjU5M0NEQzc3OQorOjEwMDJDMDAwRjZDQjc5OURFQjQyM0M3QjcwMUNBREEzNTk1NkM1QkQ2NgorOjEwMDJEMDAwRjk0MEREMzhFQ0I3QkQ1NEUwNURGN0Y2QUY4MDI3Q0VDRQorOjEwMDJFMDAwRUJCMkMyQUNBRUYzQjJFMkVDQTdDODQ1QTlFMTI4QkRCRgorOjEwMDJGMDAwM0RDMzg0NUZGQjEwRUYxNDZBNTdGNkM3QkUxRTlBQUY2QQorOjEwMDMwMDAwM0RBRjcxNEY2RkQyOEI2RjE1N0EzMUVFMkJGQjQxNjQ4RAorOjEwMDMxMDAwM0I0OEE0OTc0RTkxQ0ZERTQyRjk1MzM5QTA5MkZEOTkwNAorOjEwMDMyMDAwRDkyMzIwN0I0OENGNUIwMEVDMjcwMkREQUYxM0FBQzg5RQorOjEwMDMzMDAwRkQ4QUQ4NEVDRUJFMTVFRDI3RUNGN0RENTUzN0E2RDE5OAorOjEwMDM0MDAwRkRGRUVDOTQ0NTY5Rjk2RThBNkZDMkE5MEVDMEJDNjRDQgorOjEwMDM1MDAwRjM4QUZCRDlDRkJDRjc2RjY1NTQzRThGRkREMkQ3M0JGNAorOjEwMDM2MDAwQzUzOTczRUUwRkZFQjY5Q0U5MDBCNDc0RTcxODFBQ0ZENgorOjEwMDM3MDAwQzdFRjBCNDREMjY0OUU1RkY5QjU5RjBEMjdGREFBRjcyNgorOjEwMDM4MDAwNTlGNzMwRDJDRjdBRDEzOTJGODI3NEE4NDkxRjk3NTVBNworOjEwMDM5MDAwNDQ4NkZCREQ5RDcwQ0FDQzRGNkNCRjY0OUJGMDM4OThERgorOjEwMDNBMDAwN0M3MjM2OUQ4NzU4RjczMDFFRUFGMTA2OUY4NzlGMzQ4RQorOjEwMDNCMDAwQ0Y0RkYyOEM2OUE5ODRFNzA3MDc1QUU3NUFBRDU5RTQ5MQorOjEwMDNDMDAwQjJBQTRFMzI1MkU3RDAzQ0RGOTRGOTdFQzU2N0FBOTFCQgorOjEwMDNEMDAwOUE4NkU1MjdDMUNCRkE2M0EwQ0RDRUU3NDRBQkVFQUU1QgorOjEwMDNFMDAwRTg5OUVFRUUzRTZFN0Y0REExQjA2RkFBRTJFMkEyQUFCRQorOjEwMDNGMDAwOTQ1NjA3OUQ2NzU1RkQ5MzcxNTE0RDY4NzEyNzNBMEZDQgorOjEwMDQwMDAwQjNENjVGOURBNjgwMzIxNDUzMDlCQ0U3QUJGN0UyM0YzOQorOjEwMDQxMDAwRTQ4NDcwREM2Mjk2Nzc3NzdGRTNFN0U2RkFBQ0ZCMTk1OQorOjEwMDQyMDAwRDU3NDNGMDMzRkFEN0FCRUJDMjc5Q0M3MEVBRDNFMzNBQgorOjEwMDQzMDAwMkVFNjFFMDREOTZCQjRCRUVBMzMxM0Y5N0JDNTVEMjdFMworOjEwMDQ0MDAwMUM4NERGRDQwRjNEODU2MEREQ0ZFODBFQ0VEOTg1QzI5OAorOjEwMDQ1MDAwREVBOEE2N0IwRDE5RDFERjA1MUQ3N0Y2OUZDOUU1NEZGNAorOjEwMDQ2MDAwOUE3MDdCNzJBRjZEREFFNjA0RjM3Q0JENTBEOERENDM0MQorOjEwMDQ3MDAwQjIxNEY2MTc1Q0RBMEFDNkE2MDRFMzVBRjVBQ0Y3MEQxNworOjEwMDQ4MDAwQkE5QjU3RDNBNEYwN0M5QTM3QzUwNTI3MUE2RkE3MDlFMgorOjEwMDQ5MDAwNDc2QkJFNERFOUUxMjU1RTcxQ0UzQTkwREUyRkU4Qzg4QworOjEwMDRBMDAwQUI5MUZFNTc0N0YxRDNCM0E2N0ZBMEU5M0JFMUZFRkMzOQorOjEwMDRCMDAwNUVDNjE1QzI4RUVENkU5RkU3RjRGM0E1MTM3RjE4QTlGMworOjEwMDRDMDAwQjRERUZBNEEyNjlCNUQ0MDdFQjQ5RUYzNUE2RDI0MjcyMworOjEwMDREMDAwM0JGODRGMzdGQkREMDk2NzM5RTYxRTRDNTczODNCQjgxMAorOjEwMDRFMDAwQkNFM0ZFMTkxODFFMjk5QkU0MTBCMDNFRjBEMDFGNEI1MAorOjEwMDRGMDAwMUMwRTFDRkY5ODBEMjJDNDc3QTZDODdEQTdCRTQwNzlBQworOjEwMDUwMDAwQjQxRjg4MkU4RkIxRUNDMDc0ODNDQ0Y3OTk4RTNEOUFCRQorOjEwMDUxMDAwRUYyMEJCNkM0OTM5NDQ2NEU0NUJDN0RFRUE1RjQ3NzE5NgorOjEwMDUyMDAwOTdEQTAyRDQyNEM3QTFCQUIzMzZGNkZDQjExMjhDM0RENworOjEwMDUzMDAwMjlEOEVFQzYwM0RFRDQ1NkNDMkZCQTI3NTY4RTFEN0JBMworOjEwMDU0MDAwRUJDNzBFQjIwN0E0ODU2RTNGQzUxNUUxM0NBN0JFODA4MAorOjEwMDU1MDAwRjlDNUNEMEVCRTlGQjVFNEZFRjhGRTYyRjVFMDZDNTMyMgorOjEwMDU2MDAwREVDNkVCQzM5RjE3OUFGQUYwNDgxODQ5NzJFNjg1REE5RgorOjEwMDU3MDAwNjZGMTdFOEU3OTFGMTFGNTNGMjMxMTlFNTg3QTcwMjhGRgorOjEwMDU4MDAwNzlEMkRGOTlFRjQzQTM0QzdDNjk5QzkyQjhGRTkyMjIwQQorOjEwMDU5MDAwQjEwRjJCMUYzQkVERjA2OERERDNEOTcxRTQyNzA1Mzg4RgorOjEwMDVBMDAwRkU4OTVBOTVEM0FDQzE4NjZCMzBGNjNGNjBCMDJGNjU5QgorOjEwMDVCMDAwMzBCNjk3QjU0OEZGNEZEOENGMjlDRTQxMTFERjM4NUYwRAorOjEwMDVDMDAwNDNGN0Q0NDhERUNFMTU3QTgyNTNCRUI5OTJGNUQxM0VCOAorOjEwMDVEMDAwQTAwNjU5N0ZGMUZCRDk5RjZFNDNGRDI0OERFMjM3NkU1MworOjEwMDVFMDAwOTEzREVDNkYxMEVGMDc4REY5Njg1MTFBQUQzN0YzQkZFRAorOjEwMDVGMDAwRTczQzRENzBBNTNCMEU0MEVGQjA5NDFCQTVDNERGRDc4MAorOjEwMDYwMDAwQ0Y3MEYzNzlGRjI2NUI4MEZCQTE0MEFEQkIxMDlFQTFBQworOjEwMDYxMDAwMjdDN0VDMjZGNzc5NDFFM0JEOTNDOEVFNTM1Qjc2QjU2NworOjEwMDYyMDAwOTJCRDUyNkZGQjc0MEZDNTI1RDQ0RjA0M0RDOEQwMEU0OAorOjEwMDYzMDAwRjEzODM1MkQzMzlFQTZGNkZENjdCQTc1QkE1RkJBM0UxRQorOjEwMDY0MDAwRDcyODU1QTNGQUQ3MjBGMjFFRTk5OTI3QUI2Q0VDMzdDRgorOjEwMDY1MDAwM0RENUZDMEIzRUFGNDJGQjJFNDJDQUY3QTlBQTNDRjZBMQorOjEwMDY2MDAwOUI1OTcxM0Y3Q0Y2OTdDMDZGNzgwMkU1MUI0NERERTcyQworOjEwMDY3MDAwNUVEMUI0Qzk0NkZBRjhBNUI0NTE1MTcxNTVENkJDQUE5OQorOjEwMDY4MDAwRUU2Q0NEQkU4RUU0RUUxMzBBQ0JEMUNDREY1Q0MxRjFCMworOjEwMDY5MDAwMDNCOThBMjYxMTNDQUY5MzU0QTE4RjlBN0FGMkI1NjBDMAorOjEwMDZBMDAwRkQzNUJDNDJGQUU5NDJEMjkzMTEwRjNGOTQ0MjFDQUY5MAorOjEwMDZCMDAwNjk4Mzk2NjdBOUZEREMxQ0ExMEY4MkQ2Mzg4MkZDRDcxRQorOjEwMDZDMDAwRTEyQUYzN0RBMkU1RjYzNEQyNkZBQzczODJFRUYwQTE5RAorOjEwMDZEMDAwM0IzRjBGRjZCNEU0MUQxQ0Y3QTQwNEVDNkZBQUIxNDUzMAorOjEwMDZFMDAwRkFEM0ZDOEVEQjEzQ0JENzc5ODM0RDNFMzBEMDFGNjIxQgorOjEwMDZGMDAwNzk5RTBFRUE2MzM0QUYwMjVGMkVEMTY1QjU0RDVCQzlCQQorOjEwMDcwMDAwN0VBRjdENUU4RTBGNjk5N0Q0RjQ5ODc3NUVENDg2NUY1NgorOjEwMDcxMDAwOTNERTVENjM1Mzg1N0Q3M0MwMjhBNUYzOThGNjE5NDU3NAorOjEwMDcyMDAwRkNFRUNCNDk3QkI4M0ZGMzExRTQ3QjE0OTc3NUVCMTNEOAorOjEwMDczMDAwNEQzMzE1ODQ1Qjc1NkZENEJCMzBCRkY5ODk1RDMzMTVCQworOjEwMDc0MDAwN0E4NzI3MkZCQ0M0ODZGOTU3MDdGRjQ1OTQwRjA5MUZFNgorOjEwMDc1MDAwQTZGQzFGOUZGODQ4OTQwRjBCMkZBMUZEMzlGOUM0NjkxRgorOjEwMDc2MDAwOTEyNzAzMEMxMUVDNkY0RkZDRUZDQzAwQUVFQkI4RTkxNgorOjEwMDc3MDAwRkYwNDNEM0M5RkU2NTlGREMyMjA1QkI0N0ZGMUM4NjA5OQorOjEwMDc4MDAwQzEzNzhGMjc4OTdBQzc3M0UxODZBQjQ5RkYyODBDRjNGRAorOjEwMDc5MDAwN0QxOEFCREU2QjgzQ0RGQjA0MjZGRURGRjQ2MjUyMkJBQgorOjEwMDdBMDAwQzUwOTVCRUQyMDI3NzFGRjQxQjNERDRERTY3QjU5NDg1QworOjEwMDdCMDAwN0ZCRkEyN0EyRkU3NjhFOUJDQ0Y0NzkxNDcxMTVDOUVDMworOjEwMDdDMDAwMUZDQ0U3M0QzNzBENEVFN0ZBMDQ5RkY0QTJBRUUzMkRCMAorOjEwMDdEMDAwMjMzOTRGNzJDMDFFN0JGRkFEQzFEQzJGMjgxMkZENTc5RAorOjEwMDdFMDAwRjc1NkQzNjgzRkIyRDM4NTlEODExQjkyNzYxN0JGNjNCRQorOjEwMDdGMDAwQjBDOUQ0QUJDNEZFNjRDQTZBNjk1MDY1QjkzMzlDRUMxNQorOjEwMDgwMDAwRTY5N0NGRjYyRDY1QkJCOUEyOUJGQjlFODM4NTFDQkJFQgorOjEwMDgxMDAwMjkyOEM2ODlGNEQyRDRDRDdDRUYxQzBDOEE0Nzc5QjkzQgorOjEwMDgyMDAwMzk2OTczRjQ3QjI5Mjc0REY4MUUxOTlDMjZFMEQ3QjE0RQorOjEwMDgzMDAwMEYzRDI1MUUyNzY4QzJBNTJGQzJCQkI4MTM3RkFDRjY5QgorOjEwMDg0MDAwMTc1QUY3RjY3RkQxQkFCQkVDNTM5OTk4OUZCNTFFODAyMworOjEwMDg1MDAwN0IwNTFDNzA3RTY5QThFNzFGNUY2M0I2MUI2RENENDNFNworOjEwMDg2MDAwNjM3QUI4RTlDNURCMzcwOEZFQTdBNUIzREQwRTNGMTFGMworOjEwMDg3MDAwNzA3MDU5RTMxNkYxRjlFNDBBNTMwRjk2MDM2RjM4QzgwNAorOjEwMDg4MDAwREU1ODUxREZDNkVGQUZBRDY4MTRFRjZENzVEMjlEQjE4NAorOjEwMDg5MDAwMkE5QUNFMzJGM0M1M0EzMzY1MjMzM0M4RjQ4OEVCNjMyMgorOjEwMDhBMDAwN0EzNENDNzg4MzU4RkNFOTgwNzczQzFENzdFOTRGNEI0QworOjEwMDhCMDAwOEZFRDRGRTNGRUJBREI4N0IwODkxN0RGRDgzRTA0MTMxNAorOjEwMDhDMDAwQzNCMzgzQkZDNEMxQUY4MzFFNzNDRDc2NDU4ODY3NjU0QworOjEwMDhEMDAwNURFOUYxOEZEREQxNzFFRUQ3MUNDRkJDNzdCMkUyNzY0NgorOjEwMDhFMDAwMzM1RTU1OEJDNUUzMTU0REI5QjY4NTQ1OURGNUVGNkU2NQorOjEwMDhGMDAwQkNENzFCMUQ0RkVCNkE1QTEwMjBGOTU3RDM1MkNFNzE0QgorOjEwMDkwMDAwQjUyQjlFREJGQUVCMDBCNjVGQjZGRDAxMEYwNTUzMUY1QQorOjEwMDkxMDAwNTMxQUIyNDkyRkFFN0E2QzlEQzdBMDczMTYyNUUwMjFGOQorOjEwMDkyMDAwQkU3OTJDMjQ0RjRCNzQ3Rjc1RDQxMDI5NDYxRkFCQTY3QgorOjEwMDkzMDAwN0Y2MkZGQzc5RkZDNUJEREJGRTFGQ0JGOTA1MEJGNDIwMQorOjEwMDk0MDAwNzg1NzM3RkRCNThFRUNCNzNEODYyQjQyNzJGQkE4MTI2NworOjEwMDk1MDAwOUU0QTcyRjRBNjA1NkUzRkJEMkY1OEQzMUNBQjRGMkQ5NworOjEwMDk2MDAwRkJFNTAzRDkxQTA3NzcwN0ZBRDg1ODlGNkFFRDQzRUREQworOjEwMDk3MDAwQUExRkI1RUI2NEJGNTdFRjkzNzUxQzA2NkEyMDUyNDc1OAorOjEwMDk4MDAwRjM4QjZGNUZEM0Y4QTE4M0UwQUFBMjNFRDg3NzVDRDc0MAorOjEwMDk5MDAwNzJFNDI0OENGNzM1NEQzRkZBNTRGNjUwN0FFQzFEMjg1QQorOjEwMDlBMDAwQTFGRUEyRkMxMTA4RjdDQTZFRjRCMkMyMjFCMUY3MDI4RgorOjEwMDlCMDAwMkNGODQwMjg4QkY1OUJFMDEzMEY5NUJDOEZGMzNBRjE5MAorOjEwMDlDMDAwRTg2QjFFQTkyODVBNUVERTI5Q0VBOTFBNkZGQ0Y5MEIyNgorOjEwMDlEMDAwNUFGNzcyRjUyNEU5MDdDRUFFN0E4MEQ2MkMwOTI1QkJFQQorOjEwMDlFMDAwNDVBNDU1RjY1NjBGRjkwNUFBMzZEOUY1MDA3RUFFREFCQworOjEwMDlGMDAwRkE4QkM3RTk1QzA1REU3NkVBNzRGNDU4QjVGNUI0ODM4MgorOjEwMEEwMDAwREUzRkFCOTI4Qzg4QzQ3QTE2NzhBNDkxOURGQkI0N0NBRgorOjEwMEExMDAwRUI0N0MyNUZENTRCODZFOUI4NEZDQjdFRjVCOUE4NkZERgorOjEwMEEyMDAwNDAyNDA5RUIyRjdGRkE3REY2NkY1NUY5REM3RTU3ODI2MworOjEwMEEzMDAwN0RBQTY4RENFNTA4QkIxM0VDNTNFM0ZCNTM0OTBGMEFCRQorOjEwMEE0MDAwM0VGMTI1RUZDM0IxOUQxMkY0Q0NFRERBQkU3MkQzNDc2RgorOjEwMEE1MDAwMEVBMjlCMTNCODIxMTk2OTAyNUU2NDlGRDYzNENBMEI5QgorOjEwMEE2MDAwMUNBOTg5RjZBREY1MkFEMkZGQjA5Q0ZEMjAxN0RBM0YwQworOjEwMEE3MDAwRDcxMDEwNzRGMURDRDY2RDY0MEY1NEJFRTNENEE3RDM0NQorOjEwMEE4MDAwQjhEQjZFRjEwMEVFRkYxMUM1MkZGMEZENjdFQkIyMEQ4NAorOjEwMEE5MDAwMUNCN0QyMUVDODU2MzkxNURGMkIxRkI5OTVGMTcwRTk2NgorOjEwMEFBMDAwOUJCNzY2QjM1RTA3NDYyRkRCNjg1RTZGMkY1QUU3RTI5RgorOjEwMEFCMDAwOERCMzc4OUQ0QkMwQzc3ODU4RjkzM0UxQ0ZGODVDODE4RQorOjEwMEFDMDAwNjk4OUVFMUI2RjFGMjJFNDg3MTM2RTJFMjFGQUY4MUMzMgorOjEwMEFEMDAwN0IyMjNGQ0MxMTA3ODg3OERFQjdDNDNCNjQ0RUI4M0ExRQorOjEwMEFFMDAwMzVGQTlEQjkzQjg3MDgzOTEwODBEMDdCRjRGRTY0MEQ0MAorOjEwMEFGMDAwREFDNUM0MTdFNDM3M0Y5RjRBRkRBQ0NBNTVGQzRFOTU5MgorOjEwMEIwMDAwRDcxRjMwRTEyNTlEMTNGMTFDOUE2MkM1OURFNkUxN0U1OQorOjEwMEIxMDAwQkQzOUE1MjdEOUMxNEUzOEU1QjhCRThDREY2OUQwQzgyQworOjEwMEIyMDAwRkYxQkQ1OEVFMTc2NjRCMzMzNTk0MjNCRkY0ODc2RTIzMgorOjEwMEIzMDAwN0I4NEVGOTlFQkMwQkZCNzIwMEE5RjZBQjYxQzYxN0MyQgorOjEwMEI0MDAwMDJCNEJCNTI3MzQ0RkU2MUEyNDNCNDhCNTIxMTZFOUYzOAorOjEwMEI1MDAwRURGQkQwRDE5QkZDMUQ5OTM2MTg0MEYzNkRGQjg4RjM1QgorOjEwMEI2MDAwQTA2NzY5NTRERkVBQkZBNkQ5MTlGMzJFNDlDREEzMUZBOAorOjEwMEI3MDAwQzVEMUIzMzNFRUJEMTMzRkMzQjMwNjUyMzVEMjM3OEY2MQorOjEwMEI4MDAwMzgyMjUzNUZBNDcxNzA1QzhBRDc1QzcyQkYzM0U2QkRCNAorOjEwMEI5MDAwQjA0RTdDNzE3NDdFQ0ZFREE0NEZDQkJFNUE2QUQyN0YyQgorOjEwMEJBMDAwRkNGQUUzRjlDMTkzNzFGQzAwMzY2NjdEQTVGNzlGQUFCNAorOjEwMEJCMDAwRUNBMUM3MDkzRTU1NDhBRjAxQTY1NzQxN0ZBOEEzNDdGRQorOjEwMEJDMDAwMDYyMDNEN0NGQ0Q0NEJGQkJGNEY3RUJBNDY3QkU2NzRDRgorOjEwMEJEMDAwMUUyRDk2Q0Y1NjNFODNGNDRCRkUzNDg0Nzc5MjRFN0M4NgorOjEwMEJFMDAwRjY0QjA3RTlCRDM5MTU2ODA3RTNCQzNGNzZFQjc0Mjk3RQorOjEwMEJGMDAwQUQyQkRERTJGNzg0NzRFQjA2M0VEN0ZBQkZDNTVGOTdGNQorOjEwMEMwMDAwNzZDMzVGRjdDNUMxRjM3MzI4NEFBNTNCMENDNzlGNUM0OQorOjEwMEMxMDAwN0UwOUZCMTVFMkUwNkJEOUJCRjE3Q0IzN0E4OEM2NzAyNAorOjEwMEMyMDAwOEVFNzlCRjhCNzFGQTJFMEI4RUNCRjNGNjFCQ0ZEQTIwNgorOjEwMEMzMDAwOTczODA3QUI3RUY0QUYyQ0JGMTBBQzExMjdFMjZENzU2RgorOjEwMEM0MDAwRTg1M0NFQUYyM0Y5QzVGOTVEMzNFOUJDQkFFQkJBNjMxQgorOjEwMEM1MDAwRTExOTVGQkVDMUU0NDcxREY3RENFRTg0MDBDNURENDU0OAorOjEwMEM2MDAwNzZDOEZDMEU0MzNCQ0VBNThFRjRGM0E3NzJGOTlDNzBCOAorOjEwMEM3MDAwOURBOUVGQjdBQjExMEZFOUU3RUJEMkFDM0NEQzQwRUYzRAorOjEwMEM4MDAwQzFCNDA3NEFENDAwQjU0RjMyRTMwRkJDMTE0RjVBOTQ5OAorOjEwMEM5MDAwOUVGNDdFOEJFQzIxQkQyRTFDODI2OTg5REYwNTBDRjI0RgorOjEwMENBMDAwM0NDMkQwNURGOTFBNzE1RjRCM0VCQjJENkNEQUY1NEUzQworOjEwMENCMDAwMUMyRkJDRTZDQjZENzQ2RTdFNDg3MUYxQjlFNUEyMzU5MAorOjEwMENDMDAwNzMzQzdDRkZBRjI1RkYzRjA5MkYxNkJGOEE3MDI0N0E0MworOjEwMENEMDAwMEExODhFNUUwOEU3MUIwNTA4RDBGQzA4RjA3OUIwOUM2NgorOjEwMENFMDAwNTJCNkU3NDVBQ0I3MDQwMTRDRTcyNEYxRkU5NDY1RTA0OQorOjEwMENGMDAwNEQ2RENERURFQTM3NDEzOUU4MjBGOUJGMTRFNTExRkIyMAorOjEwMEQwMDAwQkQzN0M2OTYyRjZCRjk5OEYxNkM1OTFDOUVGOTA4Q0YyOAorOjEwMEQxMDAwN0E3NUM1QjNEQzRCNERGRjRBMjk5NDlBRTdCQTZDQ0Y3QworOjEwMEQyMDAwQjdFRjk1RjkzQ0ZGOTQwQjU4REZBMDczNUVEQzMxMzhDOAorOjEwMEQzMDAwRDUyMkYzRkU5QzdBNEEwQTcxQkM2MTIwNEJCQ0RGOEE0MworOjEwMEQ0MDAwRjg0RTdBOTY4NTg3RjFGNjdEN0M3QUUyRDk3NzQ3RDI5QworOjEwMEQ1MDAwM0RCMUFBNUZGRkE1RTRCRjMwM0RGMUVCQjcwN0JFNDg0OAorOjEwMEQ2MDAwRjlFN0ZFRENGRjJGRDBCNTdFQzVDRUJGQjIxREQzQkVFNgorOjEwMEQ3MDAwRDNDOUZFRDBGNjlEQkZFRDRGNzJCOUZEMDVBNzRFRjg2MQorOjEwMEQ4MDAwREI3RUE3NTNDNDM1RUM0Q0UxNzdDQ0RBRkIwOUJGNURDMQorOjEwMEQ5MDAwNzBDNzk3MjU2MTk2NUI2Qjc5MUZBNzVGRUFFMEZEM0UwMAorOjEwMERBMDAwRDVGMjM3OTYyM0E3NUE5QzFBQURBMzY2NjcwRkY2OEYyNAorOjEwMERCMDAwRDVCQzkwMTQyMkZGNDBGQjhFMkY0NzQ2QkY3N0Y1Q0Y1RQorOjEwMERDMDAwQUVBN0RBQkM0RkQzOUUwMjczMjk2RUE2M0Q0REM0NTkxRgorOjEwMEREMDAwRDZCQzM4RTYxNzZCQzgxRTY5REFFNTIwRkY3RkM1NkYwMQorOjEwMERFMDAwRkU1RTQyN0NBOUZEOTk1RDBFRTI1QjY4OTczRTAyODgzQgorOjEwMERGMDAwMUY3MzJFRkRFOTAzRjY1RTc0NUYwQ0Q4REUzRTdERTlCRAorOjEwMEUwMDAwM0JCM0U4N0RBQ0FFNzAxMTcwNjg0NzM4RDBCQTEwMkU5NQorOjEwMEUxMDAwOTVBNDk3NzUwNzhGRUE2RjJEM0MzRTY1N0JBMkFBNjU2NgorOjEwMEUyMDAwMTREMzUxMjc1QzI0NDM3QzRGMDlCOTI0NUFGRkYzMUU4NQorOjEwMEUzMDAwRjIxQkI1RTdBMUZDRDc2OURENUY5NjkwRkU3NEExNzU0MgorOjEwMEU0MDAwRkZDN0E1RTI3REVFRkZFN0Q3NkQ4MzhCNUFGNzUzREYyRgorOjEwMEU1MDAwREE3NTBCRkMxRjc2QTkyNkRFQTc4QUEzODNBRTc4RkU3RgorOjEwMEU2MDAwREMwRjM4QkYyRDQ1RTdGOTdFNDVGQTdGRkQ1QkJCRkUwMQorOjEwMEU3MDAwQUZCQ0VGMjVFNEI3QkREODdERkZGODVCQkJFRTBCRUQ1MworOjEwMEU4MDAwRkJBQkU2QkVBN0E4NzRCRkFFN0RDN0RGRkJGMzdBQkY5RQorOjEwMEU5MDAwRTJCQTkzOEJCRUFERkNFREZDRUJFRUQwOEY2NEFGOEI3MgorOjEwMEVBMDAwOUVEOEJBMDc1QURCMzQ0Q0Q3NzVBM0E3OEMyQUIyRkM1QworOjEwMEVCMDAwMTBDMjFFOTE0RDdENjMxRDBDMzMzNjkxNUQ4NTdBMDZGRgorOjEwMEVDMDAwRDkwMUVCMzI0NUJFMUVGNTA3OTlFRjBGNzJCMDBBRDQ3NworOjEwMEVEMDAwRjdENUM1QkJCNjhBMUY1NENDREJGRjdDMjNDN0IzQUNBOAorOjEwMEVFMDAwQ0JGRTBFRTQ5NUQxNzk4NUYwNjMwNEQ3RThCRTVERDhEQQorOjEwMEVGMDAwM0U5ODY2RDM4MjNBM0Q1N0I1RDJCNzA5Q0JENURFQjIxQworOjEwMEYwMDAwNEFGNkNEM0FFRDZBNTdGNDNCMTY4QURCMTE2M0E3Qjg2RgorOjEwMEYxMDAwRTNFQzhERTQwMjQ3OEM1RDkyMDRCQjU1RjJDMzI3RTlGNAorOjEwMEYyMDAwMEFDN0ZGMzkyMUFBM0RENkNGMkExMkVGRjQyNzQzMjg1QQorOjEwMEYzMDAwQTBCQTJGMUU0RThCQkUzRTlDNUM3Q0FGNTIzNUUxMDRBNgorOjEwMEY0MDAwODY0MUVCNzY2QTBBRUI2MTBBQTBGRDI4RDYyMUVDNEVCOQorOjEwMEY1MDAwODRBMzE2MDU0NzMwRUQ1MEM1MDRCOUEyMEQ2MzM4QTIyRAorOjEwMEY2MDAwMDFBMTREMUE0RDcwRjUzMzFDODNCRDY0OTVFMURBRDlBQQorOjEwMEY3MDAwMUZBRjNCN0UxRkQ2Njk5MzIwQ0ZENEM3MjVGRDlCODcyQgorOjEwMEY4MDAwRjNEODIyMTExRjEwMEY2NzJCQ0RGNzk1QUYyMUZENzdGNgorOjEwMEY5MDAwRDUxQTcxQ0VGNUNDRUZCRUMzRjkyNjNCRUFDMzc0Q0ZBOAorOjEwMEZBMDAwMzBENUI3QTI4OEZDOEU1RTQzMjIzQTVEMzU0M0JDMkYxNAorOjEwMEZCMDAwNTg0NkY3QzAzMkM5RDQxNzcxQjg5OUFFQkVBMEIwQkZCOQorOjEwMEZDMDAwMTJFRDBDRjY1N0FBNDBGNjlGM0MwOTFBRDkxRkU4NTVCNgorOjEwMEZEMDAwRTJFMjdBNTU4RTdCMEFERTJDRTI5RUEwMTAzNEYxNEVCRQorOjEwMEZFMDAwNEI2Q0ZDNEY2MDEyMTQ1MjVDQzMxNEI5QUE4MUU2NzVCNQorOjEwMEZGMDAwMEE1MjFBMjhFRUQyNjE2RkVEQ0ZGRUUxN0UwMDhGOTE4QQorOjEwMTAwMDAwQkZBNUZDOEI4RDU0OUU4QjdBM0REMDdEMzJBNUY1M0RERQorOjEwMTAxMDAwOEE2RkI4NEQ0RTA1OEVBQjhBRTBBNzI4Qjg1RDc2QzZCQworOjEwMTAyMDAwMDU0QTE0OUNDQjIxMkQyNjdGQTJERkUxMjZCMjEzRjJDNAorOjEwMTAzMDAwMDI0RTk1ODJDNzJBNUNCRDYyREE5RkU4NzU4NkM3MEJBRgorOjEwMTA0MDAwM0E1RDJBRDk0NzUzRDREQzk4RjZCMjY3RUY3QjY0RDc3MAorOjEwMTA1MDAwQkM5MTZFNjNCQkUwRjI5Q0MxMzFFREFGRkFFMEM0QzY1NworOjEwMTA2MDAwMDUyNkNFRDIzQUJFRjdBRUI4QTc4QUY2RDYyM0FGNjMyRQorOjEwMTA3MDAwQkIzN0VGMDcyMEJGRjExNTVBNjk0Q0JCNjZEM0JGMTJDRgorOjEwMTA4MDAwOTk2MkU3Rjc2NkFFMkMxQzEzMzM2RTczNzgzN0MzQTVFRAorOjEwMTA5MDAwMkEwQjI0M0EwRkFFQjIyMTQ5NjBCREVGRUFFNTMxRjVFMworOjEwMTBBMDAwQkUzN0ZBOEE5ODdFNjcxODMzNjJGMjU1QUJCRjAwMjVDNworOjEwMTBCMDAwMDM2MERDRUFCMzQwRUYwNzk2QjYzNkM2QjQxRkJFQjc4RQorOjEwMTBDMDAwMzlBNkJFRTc3NTM0ODUzMDJERERBNzA1MjkxRDc1NTA3RAorOjEwMTBEMDAwREMyMzFEOEVGQjQxRTcxQkNERTE4NTNBQzVFQjE0RDMyNAorOjEwMTBFMDAwMDVEMDMyM0ExNkYwNTY1MDE4RjJDOEEzRkU5NzI4QkQyNAorOjEwMTBGMDAwNTBGQzMyOThFRkIyMjY5QkU3QUZFQjZEQTFDNjA1Qjk2NQorOjEwMTEwMDAwMTRGRkQzRjBFMzVEMTJDNzQzRUUyNjNDMUQxRDY5QTgxMgorOjEwMTExMDAwNDhDNUVBNjNDRjM0QkU0NDY5NTNEQkY4N0E3QUM3QjM3MworOjEwMTEyMDAwMEFBMDhERTVBRkRCQzZFNzAyNTNFNDk2MTI4OUVEOUY3NgorOjEwMTEzMDAwMUVDMzlENTFFNzJFRERCREQ3RjlBM0QyRjI3RDQ1NDhGMAorOjEwMTE0MDAwNDc2QjczOEM4NjVEQzRGNzI3QkQzQjVGQ0VFQjVBMEZCMAorOjEwMTE1MDAwNTQyNTEyOERFNzNGMkFGNTFFQTYzODREMkI0RTJBQjk4RAorOjEwMTE2MDAwNDIxNkJGNDc3MUI5ODg5M0E5QjNFOTQ5MjZGMzYyRkRENgorOjEwMTE3MDAwNDA5RDZBRTczOEZFNjVDNTgyQkY4RDZDREJEQ0U4MkVEQQorOjEwMTE4MDAwMjNCQkQzQTVEMUJFMjY2N0M0REVGM0JFNzFCNEI4QjcwNgorOjEwMTE5MDAwRjc0NTkxNzlCRUEyQTg1OUQ3OTMxRkJDMzg0NUI0MjcwQgorOjEwMTFBMDAwMUYxRjhEMzdEREM2RkE5NEU3ODBCRUM3OEVGOUZCMEE5NAorOjEwMTFCMDAwRjdBOUM0Q0U5QUE2N0YxMEUwRjc0RDBGQjQ0RDkwMzQzNgorOjEwMTFDMDAwODA5RUY3OTREQUM4MEU4N0JENzZGRTdEOTlBNkMyQzlDNworOjEwMTFEMDAwQTcwQkE4N0NGQTVCMUNDM0I4NkJDMjJGMEI0OUJFQUQzMgorOjEwMTFFMDAwMUMzQ0U0QkNFRjhDN0FDRTQ4QTA0NUM1NDEyQzJCRDZFNAorOjEwMTFGMDAwNzgzRTFFMjVDQ0VGMTI3OUNFMjg1Q0VFOTlBN0RCRkE1QgorOjEwMTIwMDAwNDc4REI3NzI4MkQwRkY1NjBFNEVERTRBNzhFQjM5NjBCQQorOjEwMTIxMDAwODhCOEE4NDJCNzM2ODBFOTIzOUNDMzdDNDIwOUU3NUNDMgorOjEwMTIyMDAwOUYyMkUyQUJCNEYzQkNGMzdGN0NDQjg4MzQ5MjYzMTk4QQorOjEwMTIzMDAwRTU3QTFBRjk0MTMzQjZDQTFERjdDRTY4M0QzRkE2RkZERAorOjEwMTI0MDAwRDBDMTNBQUNERjNGMTlFN0I1ODU2MkQ3NDQ3OTJCRjJCQworOjEwMTI1MDAwMjQ1OEVGQjBDQTkxMjU2MTNFNDNCMkNBRDdDRjlFNUNGNQorOjEwMTI2MDAwQzRFRjMxQzZENDFGOUFENzUxREY3MEU1NzRGNkFGMTVCRAorOjEwMTI3MDAwQUZERkJGQjY4OEUwMzdDQTQ2NzEyNUVCN0Y2N0U3NzdGNworOjEwMTI4MDAwMDY3MDlEQUM0RkFDNDQ3QTA2RTk3Q0YwRUM3MTAxNzhCNQorOjEwMTI5MDAwN0FCOEZDOTBBNEM1QkQ5RkRCNUE0Q0Y5ODJCRUJFNDExMgorOjEwMTJBMDAwQzU1OEZGOTJCM0E5RkMwRUMwNjdGNTQ5MkNGRjJFMzkzMworOjEwMTJCMDAwRkIzRDdFQUZCM0M5NjFGNEJGOURGRDM3NDkxQzZGMzY1RQorOjEwMTJDMDAwRTNFNjhGMzdBQzI2QkFCRUVBNzgyMUM1Mjg1OEVGNTczNworOjEwMTJEMDAwRDZBODVGMzAzRkIwRTJFQzNBRTE4N0Y4OEI3OEZGNjM0NQorOjEwMTJFMDAwNUI2NzlFRjg4M0E3MTM5RTA2QkRDRkI1M0UwQUJFRjQ4QQorOjEwMTJGMDAwOUIyRjMzNEM3OEZBOEEzN0NFNUU4QkZENkI4QkE2RTUzRAorOjEwMTMwMDAwMTA1RDlFMDYzN0M3RjU5RDU2MUY5RjRERjMzREJEQzUyOQorOjEwMTMxMDAwQ0U0MUI0NEQyNkJGMEMxNDlBRUYxMTY0ODY3M0U4NUU3QgorOjEwMTMyMDAwN0VGMTlCMzY4RTQ3M0E4OEY4NjAyMDNFRTRCN0JFOTkzRQorOjEwMTMzMDAwNUU0Q0VEMzI5NTc0OEE2RjM4M0RGRUNGRkM2RUMyRTk4QgorOjEwMTM0MDAwMUYwMjA3MTcyRjBCM0IxODVFNEQ5OThCMkFDQTE5RkZGNgorOjEwMTM1MDAwQjU3NEYyM0Y1OEYwNkQzNEZCNzlCOEQ0QjhCMjk4RkQ0QgorOjEwMTM2MDAwNUNFNjdEMTE2M0VDNDVCRDNGQjk2QkMyOTc3QzJFQjA0NgorOjEwMTM3MDAwMzYxN0Y1RkMzNDBBMzkzRTUzNDdFRjRCQUVDQ0I1QjNDNAorOjEwMTM4MDAwNUM1QTk5RjZDNUQ0NENDMkY3NzI1Nzg0REU4MUE4NTlDRAorOjEwMTM5MDAwRkQxOUMzMTdCQkM5OERCRTA3QTY5QzkxNDE4QjhBREY3RgorOjEwMTNBMDAwRDI4NjhBRkQ1NzE0ODNGNzVGMzlFM0UwRjJBQUQ1QTcwNgorOjEwMTNCMDAwOTk2RjVCRUQ0Rjk4RTdBQkY0MkUyM0REMTdBQUZBODcwMAorOjEwMTNDMDAwQ0NGNzQ2OTExRkQ2NEJDMzI4RERFRDU4MTlDNTRGQTA2OQorOjEwMTNEMDAwRjFEMzBFM0UzRjE0RjdFQUJFRTk2RjI1OTM5RjcyODY2NAorOjEwMTNFMDAwQTRDRUEyRjlCNTZDM0IzMzlCRTIwNTY2MjRBOUIzMjhEMQorOjEwMTNGMDAwREVBMDZFREJGQkIzMjlCRTYwNDYzRjc1MTZDNTE3REM2OQorOjEwMTQwMDAwNTczQzc5MEU5N0Y3NTIxRkIwQTFGQzdBQjk2NEJFQzg1OQorOjEwMTQxMDAwRTdBQTdGQTJGQzUzNUJFRjk4QzNGNTUzQzRCRURGQjZDNworOjEwMTQyMDAwNzVDRTlDMDBGMzYzMzdEM0MxQTlGQTFFMjFFNzc5RTg5MgorOjEwMTQzMDAwNjBFOUVBMTcyMUZBM0REQjJFRTVFNkVGNDlDMTVDQzEyMAorOjEwMTQ0MDAwRjczRUI5QkIwRkJGREIwOTA1NkQxQzJGQjZCRTU4RjhDMAorOjEwMTQ1MDAwRkIzQkNGNTc0MUE1RjNENUNDN0MzMEM4REY5Q0Y5NUM3MgorOjEwMTQ2MDAwOTJGODVEQTI0MzZERkQwOTdFNDczNkRFRjIwM0YyQTdENgorOjEwMTQ3MDAwQUU5MDgwREZEMUFGMDI2RDI0RDFENTQyNUJGODNENEFGQQorOjEwMTQ4MDAwNUYxQ0VFQkJCNzk4RjVBOTM2OEU3NzVEQkE3QTI3Q0Y4OQorOjEwMTQ5MDAwRUY1M0REOEM1QjU2MjM0NURFQUZGNTRFMDRGNjlGRjAyRgorOjEwMTRBMDAwOUQ4OEQ4MzhFMzBGNkNEQTQwRUE1NzMxRTFCMjUwNkVDQworOjEwMTRCMDAwOUJFRjEwRjM3QTk0RTZCNTIyN0QxN0M3MzkyQjZBNUI1MAorOjEwMTRDMDAwQjY0RkU4NTE4NTZDM0ZFNTI0RjM3QkQxNzVCRERGMjkyQworOjEwMTREMDAwNDlGNDNCMDg4REI1MjhFRjkxRTQ5RUE5NkRFNjc0RjVCQgorOjEwMTRFMDAwNTA2MDdDRUJBOTg0MUQzQUY2NTM3RDQwQzg5RDkxNkRGOAorOjEwMTRGMDAwMUYzOEEyRTMxOTc3OUJGMDREMzU3RkVGMkEzRTFFNzcwOAorOjEwMTUwMDAwMzdDOUE1QThCODgzMTVCRDVCRkI5MjdFNjhFRDZCRTc3NAorOjEwMTUxMDAwQkVCNEY2MzVGNzA1NjhCRTk5MTkyRjNENDVFRjlENTBDRAorOjEwMTUyMDAwOUNFQjBGRTkzQ0UzQjlBNDU2RjI1Qjc3OEYyN0Q2M0VEQworOjEwMTUzMDAwODg3OTM3MjUwQkJFMTE3OTM2ODlGNUE2Rjg3NTFDMzRFNAorOjEwMTU0MDAwRTc2REFEMjc2MkNBREZFRUQ2MTEzMUU1RUJCRjZBMUQ0QworOjEwMTU1MDAwMTE5M0JGQzdBRkM3QTI2RkVCQkI0NURGNUREQjhCRjk1NAorOjEwMTU2MDAwNUYzQ0RFODk3QjZEMTdDMjNCOEJGRjU0ODNBRjUwREM0MQorOjEwMTU3MDAwOTcxNkZDQzY4MkI3MzU0RjBCNkU0REREQzRFMzJBQUIyMAorOjEwMTU4MDAwOUY4RjU5OEZEMjM2ODk4QzFFNDgyRDExRUY1RjI5OEQ4MAorOjEwMTU5MDAwNTcwMEVEODdCMkJBODVFQjc1QjcxRTM5RTUzMzNFQzcwNAorOjEwMTVBMDAwNTlBNjgxOUZGNERFRjg3NTU1NDEyM0I3RUJCQUFFMDgxMgorOjEwMTVCMDAwRjNFMzE1OUFFMEM3NURFM0Y4MjNDQzlGQUJEMTNFMjM1QworOjEwMTVDMDAwN0REQzVBNzcwNzlGQzZGNTEzN0Q0RjQwODZDMzdDOTMxOQorOjEwMTVEMDAwRUUxMjRBNjQ1RkY4NjJGNEUzNzJCQTMxMTE3RDZFRTU4RgorOjEwMTVFMDAwQkEzOTI2M0Y0NUJEM0RBNkZFRTUzOTZCNjJDQUFGRDA4QworOjEwMTVGMDAwRUU4RTI5QkZCMkYwREU5OEZDNzdGNTlGQzZFOUY3OUIyNworOjEwMTYwMDAwRTJGNEZCMjc2MkNBQzc4N0RCNThGRjdFQTM3NjFBQzdCRQorOjEwMTYxMDAwQTc0RjNDMUE2MTNEQkNCNTU2RTVGQ0VFREExQzRFNUZBNworOjEwMTYyMDAwQUVENTk4RkVGN0Q0MTY3MkJBQjc1NkU3RUZCRkFCMUQyQQorOjEwMTYzMDAwQ0RFOUVCQjUwNkE3NkRCNTVFNEVFM0Y5NDY1OTVCQjg0QgorOjEwMTY0MDAwOENGQ0ZCQTMzMzUzRjkzQzZBRTM1MERGRjUyNTE0MDcwOAorOjEwMTY1MDAwQjkyRjUyNDRGODM3RjY0MEUzNEIyNDBBRjI0MzlGQkVCOQorOjEwMTY2MDAwNDdGNTRFQUIwRThFNDc1Q0JCNkJDQzFGNkVDMTdDQzY4NAorOjEwMTY3MDAwRUIzMjI0NjlFN0QzOEI2NDMwQTJGMEM3MzMzRDBDNzQ5RQorOjEwMTY4MDAwRkVFRDAxRjEzRTU2N0NGRDg1MjU0MjRGOUUwQjYxRjEzQQorOjEwMTY5MDAwOUVDMDZBM0UwMTg3QjkyRUY1MTUyMzkzQzU0Njg0RUM5QQorOjEwMTZBMDAwRjZCOUUwNjczREQ0QjY1QUJDNTMzMzE3NzQyODIzN0I5MAorOjEwMTZCMDAwRDYwN0ZFN0IzODFFMjlGNjdEMDFBRjMxNjNEREFGQjA2MgorOjEwMTZDMDAwN0MzNkREM0JDNUY2REY3NzM3RjJCREYyNjdGNkE2NEYxNQorOjEwMTZEMDAwMkVDNUVGRDc3QTI1RkU5RDhGMDMzQkVGQkFENUM1RjYxMQorOjEwMTZFMDAwQUY3NUZGRjQxRERCQzVFODEzMEI0QjA0N0RCNTRCN0FEQQorOjEwMTZGMDAwMUJDRDM3OTAyNkRFMkY4QTZGMzdDQTVDRTc1NUMxMDhBRAorOjEwMTcwMDAwRUIxRjExRDQzRjI4REVDQ0EyQ0IxOUVBMjE3M0ZEOUEzRQorOjEwMTcxMDAwMkQ3NTBDRDFDNzFBQkVERjUwRDVBNkU5NDE4NEY3OThDNAorOjEwMTcyMDAwNDM4MjJFNDYyMDVERDBCRThEM0QyQUU4NjAyNEQyMDE0MgorOjEwMTczMDAwQ0I0MUQzM0VCNEU4MDBFREE5OTdBOEZEQTk4M0EwM0IxNworOjEwMTc0MDAwQjE3REREQzQxRkM5NjQ3RjhERjkyQzE0QTRGNEIyQjMzQworOjEwMTc1MDAwOTE1REU3QjA3QzVDOUJGOEREQTQwQkQ5OTM5NjVFREFEMworOjEwMTc2MDAwNTIzQjk3RjE2ODY3QUQ4RkQzRDZEQTRBMTMzRkZEOUNBMQorOjEwMTc3MDAwN0ZCOTc2MzVFN0Y3RDQwNjM4REQ1QjVCNkZFMjY3MDM0OAorOjEwMTc4MDAwOTdCRjVFQkI4MUYzNkZENDg2NEMzQ0REQzJERjM1OTJFMAorOjEwMTc5MDAwNjcwODlGQkI0QjRDMzlFRDJBMzdFRDBBOTE3QThEMzU5RQorOjEwMTdBMDAwNzZCRUU3OEY5Rjg4OUZDQ0E1QjkxMjdFNTQ0QTIxRTI2RQorOjEwMTdCMDAwREY3NUU5MDEzQkU1RUI5MjY5MEY2OEQ2MDFBRTdGOURDRAorOjEwMTdDMDAwMUI1QTQ5MEU1NEU1QkMyOEY0QjAzODNDMjlDRkJDODZERQorOjEwMTdEMDAwRjE2NEE2MTlDNzdBMjBCREVFNTYwN0UyQzM4OUM2RkI5RAorOjEwMTdFMDAwRUNCMUVGOEQ1RTFDNUUyQzczQUZFNTdCN0RGMTdDRjE3RgorOjEwMTdGMDAwMjY3QThGNDJFRUNBMEYwMTc0QkRBQzRDRENFRkEyMzhFMgorOjEwMTgwMDAwQkRBRkNBRUY1NTVCOUI3OTVGNENEQzdGQTlFRUVCRTY4MQorOjEwMTgxMDAwMzhEQjdGOUQ5QzUxNEQzOTAzMEJBODdFODdGRDlEN0M1NQorOjEwMTgyMDAwNzAzRUJEOEZENzA1MkU3MUY2RjdFMTQxNjI3RjJERkIyQgorOjEwMTgzMDAwMUJGNTRDRjY0QkI1ODc2NEI2QkYyQTczMUIzQzZDN0YxNworOjEwMTg0MDAwOEY4RTc4NjgzRjZGREEyMTAzRUI4QjhBMzhFRjVENEEyMQorOjEwMTg1MDAwMUQ2OTE0RDdEM0JBN0YxQ0NCOTk1NTdCODgyRjJEMzNBNAorOjEwMTg2MDAwQ0Y3QkUzQ0Y2REFCRTlCQzU3NEEwNEVGMzBDN0Q1MkYzMAorOjEwMTg3MDAwMzdDRjdCRTNENzVEM0RGRTA4OUZGNzU2NUZFMDVFRTkxQgorOjEwMTg4MDAwN0IyNUIxQkZFNzEzN0Y3RkI3M0I3Q0ExNzg4MkU4Rjc2OAorOjEwMTg5MDAwNUM0RjlFQUQ2NTNCRURDOEI2M0IxRTBBRjRGREQ3RUQyRgorOjEwMThBMDAwREZBREE1REVDRjRBNDQxQzM1REY5QkIzRjZCM0NFRkNEQgorOjEwMThCMDAwNURDRUJBNDkyRUJFQzdEMDNFNDJFNUY3NkZEQTI1RjFCQworOjEwMThDMDAwRkU0RUZCNUY0MTVGQTNEMUZCM0FFQUNCMjQxNzJFRDMzOAorOjEwMThEMDAwMURDQzU3NDc4N0M1N0IwMUUzRTk1RTYyODJGNzAyMjY4QworOjEwMThFMDAwMUMwQTA1NTNBOEREQzEwMEZCQTNDNkVDRjMwNUU5REUyNQorOjEwMThGMDAwRURBOEQ3MEQ5OUM4QUJGNDY1QUY0Qzc4NjBDOTI3NEJGQworOjEwMTkwMDAwNUU3NUQyOTU3OTZGOEU2MjMyRjJCRjNBRkQ2OThCNDY3MQorOjEwMTkxMDAwRTc5MDdFRDc2MUI3QkFBN0YyM0I0NUE3NUI4MUEzNDlBMQorOjEwMTkyMDAwMkRCRkQ4RjA4Mzg2NENGNzEyNDYxQ0YyMDU0OURFRDY0RgorOjEwMTkzMDAwOTk3NkU2QTgxMzAxMzkxNUJGNEZGOENDQ0Y3NkQwMThBOQorOjEwMTk0MDAwQjQ1M0U1NTI3MThGREE4ODgyQUZFNUQ3QjJGODlDQzVGRgorOjEwMTk1MDAwRDdBQzdCN0JBQUMzQjc4NUZDQ0ZGMDQyMTJCRkZGMTI4NgorOjEwMTk2MDAwM0ZFRjQxNDM2REQ2N0JENjgzODYxMkRGMzNFRkU5NERERgorOjEwMTk3MDAwOTFDRkVFM0E0Nzc2NDE5Qjg4MTdCOEU0NkNGQkUzNjQ1RAorOjEwMTk4MDAwRjdBQzdBQjYwN0RGNTNCQjkwN0Q1MEEzOUU0RUE4OUY1RAorOjEwMTk5MDAwNUE2OThENEQ5Q0EzMENBQkQwODY5M0JENDk3QTJCRDk0NworOjEwMTlBMDAwQTE5NjVEMUE1RkJGQUM3NEQyRDhBMTU5MzRBRkYxNkQ2NgorOjEwMTlCMDAwMDZFMUI3NkEzQjJGN0VEN0FDRkVGNEJDNzZBMTM1N0UzQworOjEwMTlDMDAwQ0Q4RTExRUFDMjI4QkZENUVBQTE5MjE5QzdGMkY1REU4MQorOjEwMTlEMDAwQTE5RTEwOTkxQjIzQzdCRUVEN0ExRkQyNjExOUUxMTc5MgorOjEwMTlFMDAwRDk4NjI0QTdCRTRGM0I4MEVCQjgwRTVBNTk1RkI5REVBQgorOjEwMTlGMDAwRkMxRDhCMUIwMDFDRDFGNzY0NkYwNDgzRjlDMzlGNzQxQgorOjEwMUEwMDAwNUYwREUxQ0Q2Mjg4Q0NBNzdDOEQxNEE5N0ExMTQxRjhENQorOjEwMUExMDAwQzlDNDcxNkFBRUQ2NTU1RTVGQUM3QzRFMzZFRkMxQzZBNgorOjEwMUEyMDAwQzNGRDRFMTM2RjJERkVERkVERkVDNEYxRkZGNjUyOTVBMAorOjEwMUEzMDAwRUY0MUI3M0YzQkNFNDZFNzM4RURCRjk3RjlGRDU0QUNEOQorOjEwMUE0MDAwQzg3QzI1Mzg0Q0RDM0IxRDNFQ0Y3Qzg3MDRGOUNBMDA5RQorOjEwMUE1MDAwQkQyQjVGMzkzRDdFQ0U2NEY2MUZEMUMxMDZDNTlGMkFERQorOjEwMUE2MDAwN0FFMUY1NTFGN0NEODJFNkVGQkE2Q0MxOTRFMjI1NTNFNQorOjEwMUE3MDAwRTc4NTk1RThGM0IzOUY5QUYzMkZCRjc2MzI5MDNENzRENAorOjEwMUE4MDAwOTUyQUVDQ0VBQjVDOTA3OTg2NzhFMUQ5RDM0NUIzOTBCQQorOjEwMUE5MDAwNDE1QzQ1RkFFQzcwN0U4N0ZENjE4MjczQzczQjIwQzREMAorOjEwMUFBMDAwOEYyRUMxN0Q3QjVGOUNGM0MxNEQxMkZCNEI5QjlCNDRGMgorOjEwMUFCMDAwQkU3ODcxMUFBRkVCQUJFRTIzRjZEQ0EzMDREN0JGQjg0OAorOjEwMUFDMDAwNDkxOTQ2RjQzRDM0M0Q5MjQ3NzQ1OTNDRTZFRDc0MDk5QQorOjEwMUFEMDAwRTc1NTYyREVDN0MyNjlENzQzRDRFRjVCQkQ2QkFFRTNBNworOjEwMUFFMDAwRjNBMUM2MzY5QURGRDBGNEI2RjVGNzkxN0VGOUFDMERDNgorOjEwMUFGMDAwQzg2Rjc4NjRDQ0VENEIyMDRBMkU3QjRBMjdGRDhBRUFEQQorOjEwMUIwMDAwNkQ5N0NDNzdFQTc2ODhERjMzQzAxNkQ5RDFGRUFEM0YyQQorOjEwMUIxMDAwRTkxNUNGNTNCRDU2RDNDRjAwQUI5RUU3N0JGQzMzNTRDMgorOjEwMUIyMDAwQjEwNzMwMzlDQkZDM0RDOTQ4RkY0NEJGMkY2NDlENjdFNgorOjEwMUIzMDAwMEQyNTU4MEFGRjIzQkYyQkI2RERGNDRGQkUzOUY0ODNDMQorOjEwMUI0MDAwMzlFNDVGODRENjQ4MUVDREUzNDg5MkI4NDdFRDI5RjVDNQorOjEwMUI1MDAwRkQ4RUY4Q0M1MEYyRjNEMjNBN0UyNkZDMDM0N0QyRkMzRAorOjEwMUI2MDAwN0M4RkU0NkRFNENGNzQ3RUZDOTc1QTE3QTdFRkEyN0RCQgorOjEwMUI3MDAwNDRFOUZGQTA3RDQ0RTlGQjY4MUY1MUZBMjFEQTQ3OTQ0QworOjEwMUI4MDAwMkUzRTgzOURFMkZFQ0REMDhEQjc5OUJGNzZCMzhFRUUwQgorOjEwMUI5MDAwRjk0QkMwRDRFRjEzRkY0RUQzNUIyNkZDNEI5QTBFRERGRQorOjEwMUJBMDAwRDk4M0YwQTA1OUU2RjhFOEUyNjcxNUQ2NEY0RkI2OEMxNgorOjEwMUJCMDAwOEFGOTVENTJBNEQ3QzNCNEJFOTJFNjNGRkU4NEVFNTlDMworOjEwMUJDMDAwOTczNDI5QUFBNEQxQkRFQ0QzRDkxQzdGMTgzNzNGODIwMgorOjEwMUJEMDAwMDM5RDM3NDQ3NjM4QzRFRjI5OTlGM0REOUVENkI2OUUyRgorOjEwMUJFMDAwREE2RjdGMzY4RjY2NDhFNzM4MDIwRjc3MzgxM0ZFREVFQworOjEwMUJGMDAwQjAxNTZGRjdDNDUwQTE3RjdEQ0YxOTI5OEIzRTdGOEMyNAorOjEwMUMwMDAwOEY0RjYzM0ZGMDE4QzJFNzgyM0ZEMDM4ODFCRDMyMEM1RQorOjEwMUMxMDAwNjBCQzhDRjU2RkY0RDNDNTNEMDQyQjJEREVFMUUwMzhCQworOjEwMUMyMDAwRTVFRDNCRjY1RjdEMjVGNkY3N0YwMDIyMkY1NEJEMDBFMgorOjEwMUMzMDAwODAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkNEN0QxRAorOjEwMUM0MDAwMEI3ODU0RDVCNUYwOUEzOUYzNEEzMjkzNENDMjAwMDk1NworOjEwMUM1MDAwMTIzODA5QUYwMDAxODY2NDEyMTIxMkUwMjQwNDhBOEE0NQorOjEwMUM2MDAwNzQ4MkQ0ODJBMjhFQjQ2MjU0MUUyM0QyOUFERUQyM0ZGMgorOjEwMUM3MDAwMjcyNDQwMTI4MzA2MDVDQTU1ODQwMUMxQzdGREZDQUU2NgorOjEwMUM4MDAwRDEwMjE3NUJGNDRFNTBBOUY2QjczNDIyRTJBMzU0QzczMQorOjEwMUM5MDAwNDc1NTJDNEE4QTYyRUJBRDJERkY1QTZCOUY5Mzk5MzNCRgorOjEwMUNBMDAwNEMwMjIyRkM5N0YwRTlDRTNFN0I5RkZENThFRkM3M0VFOQorOjEwMUNCMDAwM0JCMzI2NUU1RTI0QzkwMEE3RTk2NzBBODBDQkRCMTcyOQorOjEwMUNDMDAwQTAwODYwNENFOUQ3MEZEQ0VGQzFGMjU5OUJEQjA0MDBBMAorOjEwMUNEMDAwRjM2MERCMzQzN0Y2QkJDRUQxRjFBMjFCRUJEN0JCREYxMQorOjEwMUNFMDAwOUI5NjhFRjUxQjMzNEQwN0E4QkM0OUNFOTk5RTgxMjU0NgorOjEwMUNGMDAwNDA4OERGRkY1MTVFQzU4MTBDQUNDREY0NTZEQjAyNEU0RgorOjEwMUQwMDAwODAwQTkwMDBGMjgwN0Y0RUUzN0Y1MzFEMjkwMDhFNjg4OQorOjEwMUQxMDAwN0Q5QUJCOEZBMUZFQkRDQ0NCMENGRDJGOTc4NzE4REEyNworOjEwMUQyMDAwQUZDQzFCNkQ2OEQ3RTc5REU5MkQzNEY0MUI5N0QxOTU5NworOjEwMUQzMDAwMUI3NEQyM0VCRUJBQTcxQ0Y3MDMyNjA4MEZBMzdERUQ4NQorOjEwMUQ0MDAwRkVGMkVEREJCMTlDMzU3MTlFOEZGNjdGMENEQUFFMTk5OQorOjEwMUQ1MDAwOEQxQkZEQTRBNDc5RTNGREY0QjI0NUIxNjVGNTAzQjg4QworOjEwMUQ2MDAwODU3RUM3RjZFMzEwM0U1Mjg2RUQ5MjZCRjk4MTNCRjExQQorOjEwMUQ3MDAwQkREQjMyMjU5MEJDMDAzNTlCQURFRjQ3NjJENkIxMDQ4OAorOjEwMUQ4MDAwRkM2OTYxRUM3N0RCMEVFMzczODA4ODJERUMwM0I4M0REMgorOjEwMUQ5MDAwRTAwQ0I2MjAwMDE3M0Q4MUVEMEU0MzNCOEZCQjc4QUZDMgorOjEwMURBMDAwQ0Q0REVENEJDMDEyNkRDRjAxQTgzRDlBRjNFNDBCMzE0MAorOjEwMURCMDAwRTM4RENCRThCQ0VGN0UxQzZGREM5RTM5RUUwNjVDREY2QQorOjEwMURDMDAwOTNBNTVGMEY5MDcxOUZFNTVFOTdFNzIzMDQwRDRDODAwQworOjEwMUREMDAwMDlBNzExRTQyMDM5Q0Q4MEZENEVCRDI0ODUyNDVDRDdCMAorOjEwMURFMDAwMzRFOTlCRDQ0ODNFM0VBRjQyM0M2N0UxN0IyNkY5MEY4NQorOjEwMURGMDAwNjVEOEFFQkUyQ0MxNEUxQ0U3NkY3NUYyOTMyRjU4NjlBMworOjEwMUUwMDAwN0NCOEQxOUYxRkE1MEI4MDk1MEM1RkJEN0NBQjBFN0Y2RQorOjEwMUUxMDAwMUQwMUYwQzczQTA3OTc3RkFBNzM3M0Y5NkU1RDI2OTc4NQorOjEwMUUyMDAwRUZENUM5NUM3RTUwOTdDN0U1QUM0MzEwNjhDN0YxRkU5QgorOjEwMUUzMDAwRkNGN0YxMDA3RDY4MUMxNUEwNkZCNDFDNjdGMzlBMDdDRQorOjEwMUU0MDAwRTAzQUJBN0UyRjg1QjZFMzdFQkYyODlGOTAwNkI0Q0VENworOjEwMUU1MDAwNkY3MEZFNjIwRDBGNDgwMkQ1NDQ4Q0E1RjhERjhGQjc3NgorOjEwMUU2MDAwQkQ5OEU1RTNFN0FBMEJBNzVBRjI3NzA5MTQxQzc3QjlFNgorOjEwMUU3MDAwRDcyNEM2NURENEYxNjI5NjI3REEwRUNCREYzM0Y0ODcyMAorOjEwMUU4MDAwMTVBNjAzODY3QTYzOEVCMURFNUE3MTIwRjY3RDFEMEU4QgorOjEwMUU5MDAwRjFFNTJEOUJFRkIwMDU1QzU4QUUzNzI5MjFFNzk5RURCMAorOjEwMUVBMDAwRkE3QUE2RUQ0RjUyNEMzODlFNjU5RjNENjRDN0ZEMkREMgorOjEwMUVCMDAwNzEyQkEwNjA3RjBCODBEMjlFN0ZFNjdCMDBGNTBDRTc0NAorOjEwMUVDMDAwNzkxMjA0REIxMzhDNUI0N0UzMTJCREVGNEYwMkU5M0M1MAorOjEwMUVEMDAwQzY3RDBCNjk4M0Q2QTNGRTk3M0RCNDEzREY3QjJCNERFNAorOjEwMUVFMDAwMDE3RkNDM0MyRERBRjg5RkE1QjdGREUyMkJFQ0Y3RDlBQQorOjEwMUVGMDAwMzM0MDRGQjAwRTczNjkzRDYzNzc3RDZDMzY2MzM5MkU4NgorOjEwMUYwMDAwNTlEMEM5NTg3N0M0OUM4MUU1ODk5QTdGNkMzQ0UyNjFCRAorOjEwMUYxMDAwMzJGNTlCMjY2MzdCNkVENzExMDdBMkZDQkVGNkFCMzY2QgorOjEwMUYyMDAwMzkxMDZGNkY5QkNEMDAwMzQwMjBCRTA0RkJFMzE4NTRCMworOjEwMUYzMDAwN0ZEMDdCRDVEQzQ2RkNGRENBRkQ0OTYxRjM3OUVDRTczNworOjEwMUY0MDAwNDFFNDQ1QTZBMzRBQzFFRjM3MTBERDg4NzkxNDQwNTExQQorOjEwMUY1MDAwQjM3NDE1RThGMzJBMjQxRjY4RkY1NDdGQUREREZGRTY1NAorOjEwMUY2MDAwN0FBMjMzRThEQTQ4RjJFMTM4NDBCODg1RDdBRkE0QzZBMAorOjEwMUY3MDAwRjJGRkQyNjc3RkMyRkNCOTI4MEJGOTlFMDRFMDY2QzE2QworOjEwMUY4MDAwQkYwRUZDNzczQTk3RjgzNTM0REQ4OUVCQkQzNThDRkMxNAorOjEwMUY5MDAwMEYxNzlGRkY5RkYxM0FBMzdDM0UyMjIxOUYxRkJBMTI4OQorOjEwMUZBMDAwRUI0QjlGOTFCQzc2NkMzRUI5NkY5OEUwMjc4REVGNzUzNworOjEwMUZCMDAwM0VEN0UxQjg3NDkzQzQ3Q0E5RDczRkRGMjdDRDA4MjU2RAorOjEwMUZDMDAwODBGNzM2OEQyRTg2Mjg1REIzNjlCRTY1Q0Y1QUEwMDU5MQorOjEwMUZEMDAwRDdCNzZDRDI4OEZFQjFFM0M3QkZCN0I0NDkwMjM5NjY0MAorOjEwMUZFMDAwRkMyNzlGQjNENzEwQkZDOEQwRDVBRjFBRjk2N0RDQjNCMQorOjEwMUZGMDAwQTczMjJBRjI0NTU5Q0ZGODY4RDNFNDRERDcyMEZGMTgwRAorOjEwMjAwMDAwOTRENzI2RkY5RjdFOEVGMzAxRTI3MTI3QzJBNzMyNzMxOQorOjEwMjAxMDAwNkUzNkNEM0ZEQjA5NEFDQjc4MDZDQjFDMDdDQTg5QUJBRAorOjEwMjAyMDAwMDU4OEUwRUE5MkVCQjIwMUUxQjkxOUQxMjUyMUREQ0RCNQorOjEwMjAzMDAwNTFBQTVGQkYwRUYxRjgwMzczRTAyQTkyRjNDN0JDNDNDNQorOjEwMjA0MDAwNzhGQzZCNUNDQkFENjA2NjcyQ0QzNkUxNzg3M0U3RDgxNworOjEwMjA1MDAwMEI2OTNGQjMxQTA0NURCRjlFREU3NTlDOUVCRjNFMjk4RgorOjEwMjA2MDAwQzVENDgwRUZCRDZFODI0NkM4ODhFRUUzNzVBQjNGOUI1QQorOjEwMjA3MDAwRTgwRDM3RUVGRTA4RjE2MzUyNDY0OUE3NTM3QTk2MTdFQQorOjEwMjA4MDAwNDRDOTFGRTk3ODk0QTJGMjZGOUFFNDU0Njk5RTkzNkU1MgorOjEwMjA5MDAwMzNEM0JEMjVBQkQ1NDZFQkJBMTU0MjA3MTQ5Qzc3ODlERgorOjEwMjBBMDAwMzc2QzIzRjk3NzNCQjgyRDU0NjJEMUQ1NEQxRjQ0N0Y0RgorOjEwMjBCMDAwRTVGRkU4Mzg4REVGMkZFOTk0NDIyNkVDREY1RUQ3MEU3RQorOjEwMjBDMDAwMTZDNEVGRDM3NTdCQjkxQ0ZDQ0RFMEM2Q0IxMDFFQ0I3QworOjEwMjBEMDAwQzdEQkJDMkRBNEI3MzRGQTMyQUIyNjM4OUQ0MDVGOUREOAorOjEwMjBFMDAwNDk5Rjk2NjgzQkFFQkJDMkUxMEM0QkE5RjREODdBM0M0MQorOjEwMjBGMDAwNzYxRDhERDk0QUNBNzhEQzhGQkFBNjNDOURFOTkzNjhEMworOjEwMjEwMDAwNjE3MDc0OUZFMzZDMDA0RTkyRjMzQjUzNThDRTFGN0I3QgorOjEwMjExMDAwQUVEODRDNzgzQUY2M0I2QkM4NDRGNTJEMjNERUI4RDNFNQorOjEwMjEyMDAwQzc3NTIwNzk3MzJDQzM2QkI2NTE3QjQ2NkU0OEM1RjZENAorOjEwMjEzMDAwNUJDQ0EwOTI1Qzg2RUQ0MjZFM0QzRkU5QUU3NzQ4OEU2NworOjEwMjE0MDAwMkRERkU5MzJEOTREODI4RTY1MzQwMUE0NDdEN0JFRjMyNQorOjEwMjE1MDAwRUYzOENFQURDOEFDNzY2RjU0NkYyQzlBRjJFOEM2MjczNAorOjEwMjE2MDAwOTAwRTE2OTlEQkVFMjlDNzY3QTcyMDNDRDY4REYwRkNCMAorOjEwMjE3MDAwOEJBOTdEMzhFOUVEOEYxRkIyODdDREY0REVDMzIzQjc3RAorOjEwMjE4MDAwNEIzOEZFQ0JBOTgxOTFCNDFGQzg1NEZBRTdFMEYzOUEwQgorOjEwMjE5MDAwNDM3REExMDVERjlGRkFFODNGMEY5MkRFQkNGNUM5QkU4MworOjEwMjFBMDAwQ0M1RjNBREQ0RjIzM0VDNEY1OUM0MDNFQTRGNTlDREM1OQorOjEwMjFCMDAwMzc4NEY5MkU4QTdGMDE4N0M1MjgwRkM4MjQ2QURFQjFDQgorOjEwMjFDMDAwQ0U0RkY4MEMyNENCRkNEQzAyQUE3MjE5RTE3QkVGNEQ1OAorOjEwMjFEMDAwNDA3NjUzODE2NDUyODhDRUJCOUExMTVFQTYzM0U5NDk5QQorOjEwMjFFMDAwMTk2RkU2RjcxNjk5NTFCRjEyMUQwNkU0NDI4MkM3MDkxRQorOjEwMjFGMDAwOTM1Q0EwRjEwNUQwN0FERTdGNkVFNEY2MTY3QzdGQUVBQworOjEwMjIwMDAwRDYzRjRBNzc0Nzk3RkM4NkU4NkVCM0RENkJDNzI1MUMzRgorOjEwMjIxMDAwNEYzMkVBN0RCRDlDMzkzRTlERjlFNTE2Qzc5NzYwMjk4RQorOjEwMjIyMDAwOEMzRTVGNTJGQkI1QjE5RTBGMEFDOThEODIwNkI5RjA5NAorOjEwMjIzMDAwMEUyQ0VGRDRFMDdFQzU0OEZGRjdDN0UzRkJCN0I1QUY4MAorOjEwMjI0MDAwREJGMzhBNENGMzZFRkVFOURCMzRFRjRCNEU5RTE3NUVGOAorOjEwMjI1MDAwMTFGMDNCNjExMkZBQTU1QkJGM0FGRUNBRTNBM0U0RTFDOQorOjEwMjI2MDAwRjVFQUNGM0Y3RUU4OERCMTAxMUNGRkUzRERBMzg3MDNENAorOjEwMjI3MDAwRDJERDAyQTlGM0EzMDcxMTVGOUZCQjNBREZGOTM5OTZCQworOjEwMjI4MDAwNEZCRjc0QTgxRkMxMkY3RUJEOEI2QUJGMDA0QjhDMUMzMworOjEwMjI5MDAwM0E2RTMyRjE3RTE3RDEzRUYwRjk2RjBBRkQzNzMzQkU0OAorOjEwMjJBMDAwMkRBODI3MTA2RTBCNUFDNjZDMjc3OTMwNERDQTRGMjNDNAorOjEwMjJCMDAwQkJFOUM0MzFFM0ZBRTJEN0E5OEZBRkFGNEYxRjVGRUY5RAorOjEwMjJDMDAwQjc4Q0UwOEY3MDk4MzhDRTJERjRBQkFERjM3M0MyRUZCRQorOjEwMjJEMDAwNjc3QjQ2OUI5MDE1QTNDRjMzM0FDN0E2RTc0N0YxRTQ0NworOjEwMjJFMDAwNTdFQUFERDRFRjFBMTJGNTg4OEFCOTBFODFEN0I5MzVGRAorOjEwMjJGMDAwQTY1MDQzMEVGN0UzRjZFQkYwMzlFMUJEQzJEM0MwRjVDQgorOjEwMjMwMDAwMzk0RUQ0NjdEODdGNTFFNjZGNzg1RDI0RTgxQ0E4RDc5MgorOjEwMjMxMDAwN0UwMEZBNEZGNUFBNUY2MUJGMzc5N0E1QjI1Qzk4N0I0NAorOjEwMjMyMDAwNEI5Qjk1RUNEQzZFNzlBNkJFNkQzRTNERkFEQkNCMzM2NAorOjEwMjMzMDAwODQ5RUVDRUUwN0NDQzNBNDNGMDEzNzY3QzFGQTI0QURGRAorOjEwMjM0MDAwNkUyQUY5NjNDM0FGNDgzRURGOTlFQTk1RDA2NDg0MUFEOAorOjEwMjM1MDAwMTlDMkM0RDcyNzIxNDRGMDVFNkQwQUIyQkRFNzIwM0QwMworOjEwMjM2MDAwODA2NThCQzk5QjY5QzE1MjMyNzdGNTAxOUUyN0M0NzA4NQorOjEwMjM3MDAwOUEwNjAxMEJENTdGNkI4QTM0MDBCRUI3Q0E1Mzk5NDlDMAorOjEwMjM4MDAwRjRGRjI2MzhGRDY0MTdGRDIwN0RGNTE4OTJBMzk1RUUyNQorOjEwMjM5MDAwOTk3M0U5Rjk2QzM1RDVERDgyRkI2REI0Q0E3N0U3OTNBMworOjEwMjNBMDAwRkRGMzAzQzk0Qjc2QUYwRTE3NUQ3RkNDQjU3OEFEMDQ1NgorOjEwMjNCMDAwREY3RTQxRDlBQjIyRkQxNkJFQTIzODRDMEM3Rjg3NEE4NgorOjEwMjNDMDAwRTNCRTYxMDlGNkE1NzVCREU1NUMzRkM2NjQyNjNCMkRGRAorOjEwMjNEMDAwRTQxQTgzOUI3REZCRDA3RjE0RkQxRURGRkYyMzI4OTMyRgorOjEwMjNFMDAwQzgxRTk4RjM1QjA3Q0JGMTlCNDA2NjdFRkYxMTI4MkMzQgorOjEwMjNGMDAwQzc2Rjg2MDBENzZGODE4OEY1NEI3Q0VGREREMkZGRDlBMAorOjEwMjQwMDAwQjkxRkEyRkI3QTc3RTI1N0JCQzlBRTlGMkJCNUY3Q0RCOAorOjEwMjQxMDAwQzE3NkI1MTJGMjQ4Q0ZGQ0RBRjE3RkI2NDY3MDFENEE5QworOjEwMjQyMDAwODMwNTkyRDBCRUZBMzVEMTI5RDlFRjQ3NURBMTlERDg1OQorOjEwMjQzMDAwRUZBRUU0MkRBOTFENTg4Rjk4ODRGREE1NTYwNjlGQTRFNAorOjEwMjQ0MDAwRkVBQTE5RkMwRDU4RjY0RDBFM0M0RjdDRjhDQjE0MzEwQQorOjEwMjQ1MDAwNEVBREM1RTEyNkY5NDgwNjE2OERGM0QxM0IyRUE2Nzc4MQorOjEwMjQ2MDAwRDJCQjM3NjFCRDBDQjE0NUYwM0FEMTU3RDA5QkZBNTc3QQorOjEwMjQ3MDAwNjBCOTdCQzJFQUVENTQ2OERDNTNCMjc3MjdCRDNBRDUyOAorOjEwMjQ4MDAwQ0NFRkMzNjk5OUQ3NTExNkE3NUY3Q0EzQ0RGQzNFRkM2NgorOjEwMjQ5MDAwNDNFNkY3Mjc3NTU5MENGQUM1MzdDRTFDN0MxQUY3Mzc3NworOjEwMjRBMDAwRTVFRjk2NUVGNUNFQ0QwNTgyN0Y3QzdEQ0NDMTQ0RjYwRQorOjEwMjRCMDAwRTBGRjY4RkM4NTEwOTI2ODNEMEQ3QjREQTExNjI2NDIxOQorOjEwMjRDMDAwNjExRjk0RTlGNDA4OTFENTQ0NkZFNTAwNDFBMjdCRDhERgorOjEwMjREMDAwOEI3QTRDOUYyNzk3RjdGRkI5RUEyMzNBQzQ3NkI2MDc2MQorOjEwMjRFMDAwREI5RjI3Mzk2OTBGMEEzRUMxRkE1NERBOEYyMzA4NUU1MQorOjEwMjRGMDAwQjJENzUwMjE4MzA1RUI0OUY4QTI5MEJCNkUyMDNCQjZDMgorOjEwMjUwMDAwQTUwMkRBQTkzRTA5MjIxMkUxN0IwQTQxN0EwOEY5QzM0MQorOjEwMjUxMDAwMzJEM0VENTQ1MEI4QUVEM0YxRjc0MEU1RjI3MjA4NzEwMgorOjEwMjUyMDAwNzkyNTg0ODVCRTA3QjlGMTI5OUNGRkFBNEY0MEVDNjc0NQorOjEwMjUzMDAwNTQ5OEU5MUQxRDE5Rjc0NzY4NkZDMEU1Qjc5OEM5RUVCMworOjEwMjU0MDAwRjBGRDMwQjFCRjMwQTg0MDg3MEIyMkM0NzNFRTcwOTkwNAorOjEwMjU1MDAwMEU4MTRDMzFCRjgwODc5RDlFRkJBMkYwNzBDNEMxMjNDOQorOjEwMjU2MDAwODlFMEUxOERDMjAzRTcxMEYwMzgwM0JFMDIzRTkzMTQwOAorOjEwMjU3MDAwODQwRkNBQTdDOUQwMjVEMTNDOEE2NkRGNTQ4Mjk3Q0I4NQorOjEwMjU4MDAwMkFGMDczRDkwQjVDNUVBOEY3OUMwOTk3OTI0OEMwMTI5OQorOjEwMjU5MDAwQzg0RjAwOUZBOTg5RTk2Njg0MDY5RjNGMTYwMENCMkY4QworOjEwMjVBMDAwNURGRTVDNUIyMEYzNzM1RDBFMjE3RjY2OTIzRDFBMkYwQQorOjEwMjVCMDAwOUZGNEU3QkU5NENBMkY2NEE0ODdBQTgyQUM3OTE2RDQ4QworOjEwMjVDMDAwNjdCRUMyQ0EzQjg3NjBGREVBQTdGMzQ0QkRBQ0YyNTdDMQorOjEwMjVEMDAwQjk1OEZGNDFDMTI4NTExRjU3NTk2ODQ1NzhENTlCNDZDNgorOjEwMjVFMDAwQ0ZBQkMyRkE5MDgwNjkyM0YxRTVGMjdBQjRBQjcxNUZBOAorOjEwMjVGMDAwODFBNDdCODI0NEM3QTYwQzcwOUJCMDNENTA1RkU0MkQ0NAorOjEwMjYwMDAwQzA3QTAwRTkxMjEwNkU3NjI5QTc5RUUwNkNGRjM5NzgzNworOjEwMjYxMDAwMUI3MDE1MTk2OTgxQzkwNUI4REVGQ0Y5OURBQjA1M0UzMworOjEwMjYyMDAwMkJGQkNGQzVGRUM3M0JBRDZDQjdBQ0IxMDU4Mzg0Mjc5MAorOjEwMjYzMDAwNjQ3Nzc3N0Q2OTc0N0ZDNzlGRkU3OTBEM0Q3RjdBMDA0RgorOjEwMjY0MDAwQjg0OUJGODA0NzJFRjRCQkNFNUM4RkQ5MDE1QzVGOEM0QworOjEwMjY1MDAwNzI4M0UyMUYzOERGNEM5QTJGODBFQTQ5QTY3NTNEMjUyOAorOjEwMjY2MDAwODUwOEZFQ0JFQkE3QjEzRjcwMjRDRkZGRkQ4MkJFMzFDMgorOjEwMjY3MDAwRTNFMzNFQTRGMTM0QUZEMDczRTBDOTI5MjRCODk1OENDQworOjEwMjY4MDAwRjQ1RjRCRkQ0RUI4NTBCRUE2NTFCQkMwNDM0RjY1NjNDRgorOjEwMjY5MDAwODEzMjk3RTY4RDdGNkU0RUY5RTY4NjI1MzhDRjUyQTRCQgorOjEwMjZBMDAwMTE5MkQzOEIwQjAyMzdEMkI4NEJDRDkxNDE4NUY4NkM4OAorOjEwMjZCMDAwNjVDQTNCMzZBNjBCMDVFOTkzRTQwM0YxMkJFREI3MDY5QgorOjEwMjZDMDAwRTk5MUU4N0FCRkUwNTdFNDAwNzdCN0ZEOEFGOEY1RjhCQQorOjEwMjZEMDAwQkI2RTU4RTgxMzIyNEVDMkZGMTVDRjBEM0U4RjY2MzVGNAorOjEwMjZFMDAwOEQ3RjNCQUQ2M0E5RDRCNTkwRThGMkYzRjRENzZDN0Y0RQorOjEwMjZGMDAwNjZCRTFDMjhFODRFOTM1QjRCOUZGQjlBRjlFNzU5MzM2MworOjEwMjcwMDAwMDQyNUNEM0Y4NjE4QkU1QkZBNUM5Mjg1RkNDM0E1OUY2RAorOjEwMjcxMDAwNDIyODA1REYyRkRCRjc3ODAzRjkzQkE1RThGRjkzOUZGRAorOjEwMjcyMDAwQkM3OEQ3NTNDQzZGRkI0ODVGMjJFODk2RkVGN0IzQ0Y1NworOjEwMjczMDAwM0Y0ODdDN0E2NTEyQzdBMTI2QkQ3Njc0MDhEOTQxNTNGQgorOjEwMjc0MDAwOEU0NjFBMTA2RDcwRTJEOTM3MkUxM0Y0QUZGQjI1N0YzOQorOjEwMjc1MDAwMzM5RDhGMUU5RjI2QURCODg3RjBCRDBDRjE2RkM3Rjk3MgorOjEwMjc2MDAwOTY5OTgyQTI2RTc1Qjg1NTk2N0JDMjRGQUVEMUY2RjE5RQorOjEwMjc3MDAwMTk3NDZFOUNDRjcyNDUzRDUwNEFGQkM5OTQ4MEU1NjM0NQorOjEwMjc4MDAwNDhGODEzMzJGRTIzRkVCRkZENjg2ODM1QUQxM0E0NkYxMQorOjEwMjc5MDAwNkMyNDZGNEVBMTVGNENGQkJBRkRCMTc4QkZBM0VCNDAzOAorOjEwMjdBMDAwMjlGOURERTQxN0UzM0UxN0I3MUJEQjk3QzZFQTg3MDQ3OAorOjEwMjdCMDAwN0VGMjk2MDIyRDFFOTYwREQ5QjRBRjVGQTMzRkY0QzFGMQorOjEwMjdDMDAwMzA5QTc3N0UxQUQ5ODcxMzI5QUU5MDQwNUVFQUZFNzE1RgorOjEwMjdEMDAwMjhCOUYyOTEwMkI2OTdEQjI1RTI4NzMyNEJFMkZFMEI3NQorOjEwMjdFMDAwRjM4NTVGQUNEQkZGQ0IxRTkyRDg4RjVCRjY1MDlGNTExOQorOjEwMjdGMDAwRUMyNzZCRkMwQTYxMkZGM0VGOTNBNDU3ODhDRTAyMkZDRQorOjEwMjgwMDAwMDNEMUMxMkREQTlFNjA3MzFGQTZCOTVCOUI0Q0VDQzc0OAorOjEwMjgxMDAwRDhBNTNCQkNBNEY3QzczREQyRkZCNjdGNjNCQTQ5NzVDNAorOjEwMjgyMDAwNDMyNkQ1MjdDQzdEQ0NDM0Y2NTU5MDg0MzVGQTU1NkMxQworOjEwMjgzMDAwNjczRTk5REU5NTRCRjMzRjk5MkU4MzhBRjMzNTI0NzVENQorOjEwMjg0MDAwRTU5MjlDNTU5Rjc1Nzg0OUVGQzZBRkZCRUQwMkUxMEYwRAorOjEwMjg1MDAwMEMwOThGREYxNEYxMDgzQzEzOUZFN0JDNTRCQTg5RjBEMAorOjEwMjg2MDAwN0MxMkY5OUNGMEI3Q0MzNUJDM0YzOEM5NkU5ODlDMTlFNgorOjEwMjg3MDAwQzFCMjQxQjNEMzczMUUxQjk1MzYxQkUxRTJBM0Y1QzY2QgorOjEwMjg4MDAwRDhENTFEQUY1RTkzNDJGNkYyNkU4QjNGQzU4REZENEVERgorOjEwMjg5MDAwMUVDRTM1Rjg0MUYxNjU1MTE4OTE1M0Q4NEJGQjFCMzNDRgorOjEwMjhBMDAwODcwNDEyQzA1RDJGN0Q5QjJDMEMyRjlENkU3RjVEQTczMgorOjEwMjhCMDAwQzAwNzU2QzI0N0I5RDg4NzZBNzdEQjdENDQ3RkExQTk5NAorOjEwMjhDMDAwRTQ0RjJFQkIxOURDMkREODdCRDlDQjBGMzczOEE4REVDRgorOjEwMjhEMDAwMEM0Q0NEMjdFOTdGRDRGRjEzNzM4OEVDRjE1RkE2OENGNQorOjEwMjhFMDAwQkRCNzFDRUJCQjhFNTk4NDlGQTIyQTg3RjI2M0VDNThCQworOjEwMjhGMDAwN0JBNjE5NjQwM0JENzY0QThCNDkxRTEzREQyM0JEMjZEMgorOjEwMjkwMDAwQzlDOTIwQzdEMDYzNEE1RTg2QTFFRUYyMEUzMEJDOUZEMworOjEwMjkxMDAwNTY5MjZCNjg0RjU3NDYxOURBOEJBMTM2MTJDMEY1MTRFMAorOjEwMjkyMDAwNjU0QUVFMTBBRUI4Q0Y4QzAyNDNCQjFERTkzQTRDRUJDMgorOjEwMjkzMDAwRkM1MkQ4NTEyNUY4NEZFOERCMjBEQjQzNjUxMTgwMDdCNgorOjEwMjk0MDAwOTAwRTI2MUUzN0RBNTkyNTkxMzZGNjM3OTMwRTVCMEMxQQorOjEwMjk1MDAwNzEwMEZCNTlFMjUwQzk4NTFBN0YwRDg0ODFDNDVGNDgxQworOjEwMjk2MDAwRkY1RTkyNjMyNzBGOEJCODkzQUNDMTczNTlCNkQwQ0Y3QgorOjEwMjk3MDAwQ0I1RTk2RDgwRTVDNzZDQ0NDN0FFMjI0NzhCQkYxNDM2MQorOjEwMjk4MDAwRjI1MUU3QkI3OEI4RjdGNTFCRTFEQzdGQUUxMUFFNTkyOQorOjEwMjk5MDAwMDEyMzVDMkZBQjMxQzIzNTNCNjg4NEVCRTA1QTIzNUNFQQorOjEwMjlBMDAwNzM1NDIzMUM4NzM0NEQzNEY0MUZENjU2NjlBODhGRDgyRQorOjEwMjlCMDAwNzQ4NUExRkZDOEQwNkM0MzdERjQ2M0Q3MUFGQThGNjk4MAorOjEwMjlDMDAwNUY2MDY4MUZCN0Y3MzY0MzdCM0M1RDhEMEYyRjMzQjRENAorOjEwMjlEMDAwREI1MzhGMzA1RDFENDBCQTMyQTEzRTI4N0NFOURGRTIzNworOjEwMjlFMDAwRThDMkMyNzAyRjFBRThGNDg2NjJGMEFGRTIzRkMyN0ZGRAorOjEwMjlGMDAwOTk5Njk3OTgwMDZBMDNGMUUzODVDMkZGMTU4NEZGOTRDNgorOjEwMkEwMDAwMjhGRTc1QjlEQTEzOUZFQUY4MUQ0MkZBOUFFNTY1Nzk0RQorOjEwMkExMDAwODRGMDdFQjIyNDg1RTlFNUUwNEIyNzBGMkI0MEY4NEY4OAorOjEwMkEyMDAwODUwMkRDRUZBQzI5MjI4RTIyQzlDMTI2QTI5MzRFNzAwQQorOjEwMkEzMDAwQjU5MUZEQjlDNjEyNjRGRjQ1NDVCMzcwMjcyOUU1Mzg0NQorOjEwMkE0MDAwN0ZGM0ZCMjVFODZGQzZBQ0IzNUE0OTAyNEJDQzdFQzc3NworOjEwMkE1MDAwODdEQjBERjVDMjk3RjYxQUZBMTc3NTg2MERGNUYxODcyMworOjEwMkE2MDAwNDEyMjdENTVGMEE2Rjc3OTJBOEIzRTU0MzhGQzU1RkM1RgorOjEwMkE3MDAwNDlGMDc5MkE0QkJGMENERTQ1RkEzN0RFQ0ZCRDVBQUQ5RgorOjEwMkE4MDAwOTdEMkM4QUZGRjdCRkJGMzY4RDZBMDdGMzY0ODI1QkYzRgorOjEwMkE5MDAwMzc3MjQ3QUFENzM0MDBFMTkxRkM0RTAzRjlERjgwNzYwNAorOjEwMkFBMDAwQjQxNTk1MTFCODBGQjIzRTk4RUYxMEVGRkYyRDY5RjJGMworOjEwMkFCMDAwMkFFQTZGNDJGRjlDRjA4RTcwQzkyMzdCQUYxNjkyQkQ0RAorOjEwMkFDMDAwMDQxN0IyNUJDODBGODMyQjg0M0RCRkRBQTRCMjNEOUFEMgorOjEwMkFEMDAwODRGNjI4RDkyMzBEMTU3RUI2OTdBNzQzNzAyMDNEQkZGNQorOjEwMkFFMDAwMDY5NDU1QzQ3NzkyMTlFRDU3N0NGRTNGMjMwMjhEODVERAorOjEwMkFGMDAwNDU2MkIxNDQzRjc3N0QyMUIzRkYzRDg1RkM2OTA2QTY2MQorOjEwMkIwMDAwMDJBNEY3NEVEMEVGQjQzRTc4NjkxRUM1RTM0RjkwMkU3NQorOjEwMkIxMDAwQzNGNUI3QjVCQzMwNEYyNTNCQzMwM0VFMDhBRTNCMjAzMQorOjEwMkIyMDAwNDAwNjlCMEIwM0Y3RDBCOEVGOUJEQ0FCMEJGMUREODNDQQorOjEwMkIzMDAwMTNGRjMyODhFQzkxNzU4NUMyRUVCMzRCMDgyOUE0ODE0RQorOjEwMkI0MDAwRkVGMzE1QTBFNzhERDlDQTdEODU0NUQxMzg0QjRGRjRFQQorOjEwMkI1MDAwQTNDNzMzRjVGOEU2QUVCQTMwOTcxNkI3NTcyMkJBOEI0QgorOjEwMkI2MDAwOEYzQjQ2Q0NFRUFBRjFBNEZGOTY5OUQ4RUZGQzBCMkQzMworOjEwMkI3MDAwQUU5NEU3NDk2NTM5RUY4MDRFN0IzQTJGOTlGREZGRUIyNAorOjEwMkI4MDAwMzVCQzk5MUQ5REFCN0U4RUVGREQxMDE0RjZENjAyOTNGOQorOjEwMkI5MDAwOTdGREY1REIzMzhGNzMxQ0M1MkU5OUMwNDdGRTUwNUE0NQorOjEwMkJBMDAwRkU3NjExN0ZEMUUzMjU5NzQ5REZDNkNFM0FEQjdFNkZGMworOjEwMkJCMDAwQ0YzQzY2ODg1N0MxMTM3RDEyQzZEN0EzRTNBQkFDRkZFOQorOjEwMkJDMDAwNjJGNkI5NjU5MzQ3RTgzNUYyRjNERjZGQ0VBRTg0RDQ5MQorOjEwMkJEMDAwNDRGMzdDQ0VGMUFCRUI4M0FGMUFGOEUyQzZEQUI3MEM2NAorOjEwMkJFMDAwN0M3MDkzRkE5RUExM0RFMkU5QjI1MkJDMzJCMjI3NkJFRgorOjEwMkJGMDAwM0FDNUQ3M0ZEQjZEMkYyNjNDMjBGRTBGMTZDNkM0RUIyRgorOjEwMkMwMDAwMjJDREEzQUI2MEVDQjlFQ0Y3MkZCQzhFQTM3NTlEOENFNQorOjEwMkMxMDAwNTc3REJGRUZENEJEQzlGNTQ4NUQ4NENCRjhGREVBRjExRgorOjEwMkMyMDAwMTFCRDQ0NzFEODQ0RjZDQzVEMTJDQTBCRjI3NzQ5NUVFRgorOjEwMkMzMDAwNzg2MkU0MDU0MDFFRDlGRjc3NDlBM0JDNDRFRkI2RkQ5NgorOjEwMkM0MDAwQzE0N0E5QkRBQkRFRUVERUVFRTNGODA4Qzc0RDZBOTFFMQorOjEwMkM1MDAwMkVDODZFMDBBNzc4N0Y4MUNEQzE3NkU4MUQzRUUxMkY5QQorOjEwMkM2MDAwMUVBREY4RUEwNkIyNUY3MzIwRDU4QjMyMTA3RkMyN0ZBQgorOjEwMkM3MDAwQTJCOEM5N0M1MzFBRUJGRkQ1NTkwN0I4RkU2MTMzODg1NworOjEwMkM4MDAwQkM1MTRERjgyMUYyNTc5N0E2QTYwQUJCNThDMUZFNTg3MQorOjEwMkM5MDAwM0Y5MTYxRTZGQUExMTE4MUFGOTgxRkYzQzM5Q0RGNTgwMQorOjEwMkNBMDAwREE1RkM0RjNDMDEzMTk0NDdDRjgzM0Q5RkZCNUUwNTc5OQorOjEwMkNCMDAwNzc4MERBNkIzMkQwREY0NkZBRkRDNEFDOEUzNTExNkIwQgorOjEwMkNDMDAwRUQxQTcwQUQwNUYxRkU0OUIyRkEzOTU5MzQ2MzdDRkQ1NQorOjEwMkNEMDAwQUUyNTNGRjMxMzlCRTBERjQ5QkI0RUNGNTMxMTNFMUZBMAorOjEwMkNFMDAwOUEyNEY2Q0ZENTY3NEMxQ0FGMDE2N0M0NTY4RDdFRDhBOQorOjEwMkNGMDAwMDM4MzAzNTYxRjhFREY2NjQ1N0JEMjI5OUVDRjFFMTNBQQorOjEwMkQwMDAwOERDQjlFQjA2MjQ5NzFEMDI0NTEzQTdEQzJFRTc1RjlFNworOjEwMkQxMDAwNDQ5RTUzMkY0NzEwQ0NCMDlDRTREM0U1N0NFQjcwOEFFMworOjEwMkQyMDAwQkY5RERDNkMwNzkyNUIzOEJGNDJGRTk2RkFBQzg4RTMyRAorOjEwMkQzMDAwRjdDQkYwMkYwMjgxMTdGNzFBNUNBRjY3ODhGQzA1RjExQgorOjEwMkQ0MDAwOUY0NzQyQkYxNkY3MjFGQjcyMENGMTY3NzI2MDUzQjFDNworOjEwMkQ1MDAwRkRGRDNERjY2RDg0QkZFRUY1MUUxNkYxQjBDRjlBNDcyRQorOjEwMkQ2MDAwNzNCQzVCQTcxM0Q5QTdDNUJEN0YwQzIwREEyRkRCNDY0OAorOjEwMkQ3MDAwRUQ4QjVGN0VGRjFEOEFDRkZEQTYzMDMwRDQ4N0VEMEIzMworOjEwMkQ4MDAwQ0M3MjMxQzlDOUM1QTkxRDFDQTcyQkY2QzkzQzJGQUVGMQorOjEwMkQ5MDAwOTdGNzhCNzJBQjExN0Q3MTU4RUM4ODcwNUNFRjZDRjExQQorOjEwMkRBMDAwRkI5RUY2RkZEOUNEOUQxQkYzMzk1RTJEOEYyNUI5QTI3MQorOjEwMkRCMDAwQ0Y4QkVCMjhBNjc1RThGQkQ0RDcxMTFEQTc3N0ZFRDFFMgorOjEwMkRDMDAwRTNEMDdBRkRFMzg3RDYwQ0Q3RjIwODM3RkExM0U4RTVBQgorOjEwMkREMDAwQUI3NDNBQjYyNjhFRkJENzY4Rjg4Q0M3NEZDMTg4NjBCMworOjEwMkRFMDAwODhFMzc5NkU3MDM3NjBGRDVBMEQ0RTlGQ0RDM0ZENzAzQworOjEwMkRGMDAwM0M0NDE5NEZGODVEM0NEQkU5MjUzOEVCRTNGN0NCODAyOQorOjEwMkUwMDAwQzA1M0JEQ0M3M0M1NDhGRjFDQTJCRkRCODIyMjRGQTBCQworOjEwMkUxMDAwQjcyM0ZEODkzODY3NzMwQUQzRUJFMkU3REU3QUU3RTc4OQorOjEwMkUyMDAwMzhDQkFEOEY4RTI5MjRGREExQkYxRjBGNjc4NEVGNzBCMworOjEwMkUzMDAwNUFDRjAyNDlFNENGMTBCRTM3RDFGOEYxRjk4MUYzODVCQQorOjEwMkU0MDAwRUI4OUVDNEVENjBCMjdCNkZEMkM0NEVCM0I5MTA1NkU3RgorOjEwMkU1MDAwMTNGMkUzRTI3REJGN0REMzM0OTZFOEM0MTk5NkIwODRDMworOjEwMkU2MDAwNURDNkY4NTdCQzlFNzI0M0UwM0E5MjIzNzY5NDIzNjQ4MQorOjEwMkU3MDAwREZEOEY1RjcwNjVBMENFRjU1NjcyQTc3RjlEODFGNTVCMgorOjEwMkU4MDAwRUUyNjc5NjQ1Nzg1QkYzNjI0NTBDMUY1RTU1NkUxQUY4QgorOjEwMkU5MDAwRURFQTM0Q0JDNERGQkIyQzEwMjIzREJFRkNENTBDOTUzMworOjEwMkVBMDAwRUNDN0U1Njg3N0IwQTc5MzE3RTRGNTQyMzJGQTQxRTkzOQorOjEwMkVCMDAwMDlFQzA2OTM1N0U2Nzg1QzVBNjAwREMxNEJGQUQxRDQwMQorOjEwMkVDMDAwMDc5RkM4ODlGQUEzQkFCRTJDRDJGNEJEOTI3RjYzMDNEMAorOjEwMkVEMDAwOERFRkQzRTI4MTY4Njc3MkJDQjMxNDAyOUExREExQzU1RAorOjEwMkVFMDAwRTE5QTBGNzAxQzQyOTdEQjM2OThFQkEwRjhDRjlBQkVBMAorOjEwMkVGMDAwMEIxQ0U0MUZDQTM4MkNDN0Q3M0NCM0QzQTAxNzNCNzJCNgorOjEwMkYwMDAwNTUxRDRBREExMUQxQkFCNTA3M0Y1RTNGMUZDMDZCRUNDMQorOjEwMkYxMDAwNDdEQjA1MTJENkQwN0FENTgxNDgyM0ZFREEzQUVCNzcyMworOjEwMkYyMDAwNUQyRjYwRDkzMkU2OTFDODRBNkFGQkU2QjQ0NDc2QTRDNAorOjEwMkYzMDAwNDNCMzAzQjhFODQ3RUIxNEVGRDkwNkFFQkVDMzg0RkEzNworOjEwMkY0MDAwMzNEOTZCODFGNzYzRjRBMDAzMzlGRkZEM0M2RDVFQjJBQQorOjEwMkY1MDAwMDczMkJCREJGRjQwNzhFQjY5MUYxN0FCMjRGOEJDNkY2RgorOjEwMkY2MDAwRURBNURERTZBRDQ5MjQwRjEyQzI4QkM4QzQzM0ZEMThCMAorOjEwMkY3MDAwRDE2MzMyQzRFQzlCRUQ5RTk4QkExNDA3MkY4OUNBRUUzOAorOjEwMkY4MDAwNzZFNTc0ODJGQ0U1NzdEREQ3QUFCQUYwQUIxRjFBRUNDMAorOjEwMkY5MDAwODExMEFGREY2QUYxODMxN0U5QzlFNkMxNzZDMzM5MEM0NgorOjEwMkZBMDAwNTVDQjdGMjIwMTE3QzdFQ0VGMUNGNjQ1NzZCOTU1REJGMAorOjEwMkZCMDAwOTdGNTIyRUY4QkM2RjVGN0JCQTREN0E3NUVFMkVCMEIyNAorOjEwMkZDMDAwNUZFMkY4ODVFQTRCMUI3RTRBRjVBNTBEM0ZGNTEyNUZERgorOjEwMkZEMDAwNUZGODEyQzcyRkNDQkVCNEQ3QTdDQ0JFQjRGMUFCNUU5RQorOjEwMkZFMDAwRTJFQjBCNUZFMkY4ODVBQjJGNkRGODI5NTc1RkRBRjA2MworOjEwMkZGMDAwNTMyRkYxRjU4NTJGNkRGQ0FBNkMwNzNBQ0I4MUNGQ0QwRAorOjEwMzAwMDAwQTYzNzlBNDM3NENFNDZBQTBBNzNERTM4NTcwNThFNDcxMAorOjEwMzAxMDAwQTczNjAzRTcyQkI2N0I4NTFGQTVDN0U5NDdEMjEwMzIzOQorOjEwMzAyMDAwRkEyRDU2NzcxNkQ5RDFEQjFCRUZBQkZDMzE4RTczMkEwNAorOjEwMzAzMDAwMTMxNzRGRjlGQ0VDMjMwQThEQjM2RDFBNzBGRUMyRDkzOQorOjEwMzA0MDAwRjhEMTUxOEE3RkU1NDBEODFCQ0VBMUI4OUEwNEUxMTg4NworOjEwMzA1MDAwQkJGNEZBNjAwQTg0NjNGQzg5NkFBNThGQTE1RUQ0Mzk0NworOjEwMzA2MDAwQzBEMEZGOTY0RDQzMENFRDM3Qjc4RDM2QjRGRkE4QTlGRAorOjEwMzA3MDAwRDA1MEJGNDkyRDMzRjRCNzQzNEU0QjFFRTU1RDFCMkQ5OQorOjEwMzA4MDAwNUVDQTgzNTk2ODZGQTU2N0MyMEQ3NkQ4RjgzRDA1RkYwMworOjEwMzA5MDAwOTExRjkzODMxNjdERjdCOEI4OEY3NEQ1NjYxOEQ3MTkyQQorOjEwMzBBMDAwRDc3RUI2N0M0MDdDM0U2MTRFQjE5NjRGRThGRTdFNDFCNQorOjEwMzBCMDAwQkMwRjZFNEZDMkI4QTc5RTRGRDBGMTM5REM5MkM0Rjg1NgorOjEwMzBDMDAwNUFBNzhBN0NEMzlBNjlDMjhGOUMxQTcyOUIyODZGQTlDRgorOjEwMzBEMDAwRTM2RkI0NDY3MkZBQkVCN0Q1MTlGREM5RjQ0Njc3MjUzOQorOjEwMzBFMDAwRkJBMzREQzBGOURDREMyQTczNDhDOUExMzhDMUMwNEEzMgorOjEwMzBGMDAwMDdFMjM5QjQ0M0QwNDcwODA0N0Q4NDFBODFGMzg1QTFERgorOjEwMzEwMDAwQUFEQzk1RDQ3RTJBMDQ3QzBBNDZBNzhGRDE1NTBCNjc4QQorOjEwMzExMDAwNTJEQ0I1M0VCQjVGMTZDNTE5NzJBQTA0M0QyQ0RENkJBRgorOjEwMzEyMDAwQTQwMzRBRTdEMjU2RDMwRjRCQkNGRUY0RkE4QzAyQ0E3MgorOjEwMzEzMDAwRTc5RDgxOTcyNzA0OUNGNUYzRTdFOTcxNzBDRkRCNjE4OAorOjEwMzE0MDAwQzQ0QjNDREVCRTJENUVENjE0Qzc3RjU3RjJFREYwNjI1NQorOjEwMzE1MDAwOUIyMTc3QTQ1MTlDNTQwNTk5RTIzMjJGNjYwRjM3MzM5NworOjEwMzE2MDAwMUM5QUJDOEM5RjE5RDg4REY4MzBBNzA5MzhERjEzNEZGMworOjEwMzE3MDAwOEZBRDc1MTBBRThBRTFERjFDNkY1ODIxRkM0QzkzRjJDNQorOjEwMzE4MDAwMkI5OUNGRjBEREZFQzBBNzQ0MTk1RkRCOUE0NEZFMTZGMQorOjEwMzE5MDAwQ0I2NDFBMUZGNkNBMDMyOEFFMTA1MjY3RjNCQUI3MzdDQQorOjEwMzFBMDAwREI5MkU5M0NERjU3RjU2NkEwRjNGMkRCNzNFNDAxOTRCMAorOjEwMzFCMDAwMTdEQkZFOEM2OTZFRUNGOTIwQTQwQUJCMzk5M0Y3NjEyQQorOjEwMzFDMDAwMzc5NzcwNjkxMUE1QTI5NTYwMTFFRDYxODlFQTgzNTY2MAorOjEwMzFEMDAwOThFM0YwQTk0QUQ0OUUzRTIzMzlFRUI5NjJBMkZFNUI4MQorOjEwMzFFMDAwOEE3MzE5M0U2OTRBODYwMTVGRDYxMjIzQkYyMzE4MEZERQorOjEwMzFGMDAwRTVBMzdDMUM0Q0JGQ0I0NDU3ODI0RTQyQUY0QkExOTVGQworOjEwMzIwMDAwMUM1RkU5MzJENTEwREQ2OEU3MkREMjU3Q0QwNkNBNDdERAorOjEwMzIxMDAwRDU2N0ZGNzQyRUNCQUY3QTFCQzMxRDU2MDhCQUQwRjMwNworOjEwMzIyMDAwODJENjI2NDE4N0YxRjRFM0YyMUFFOUM3MkEwRDM0ODlFMAorOjEwMzIzMDAwRkM5NkUwMUY3RDFEREIxNDZEREUyQzA5NTQ5NjdCQjZEOQorOjEwMzI0MDAwMDFDNDY3RDZCOEYxRUMyNDNDNDlERTc4MDQ1RjNBNjFFQQorOjEwMzI1MDAwMzZEMDdCQ0UxMjNCRTdCMTQxM0FDQUY4Qjc0RTAwRTgxMAorOjEwMzI2MDAwMTM3MzRFMjE3RUJENjc1REU3NzdBNEYzMEZCRjIzOURFNworOjEwMzI3MDAwRUJGMjY3QUQ1NzkzM0Y0NUUyNUNFNDI5QTQ2QjhBMUZFQworOjEwMzI4MDAwNERBREVBMDRGRUZFMEFEQzI2QTI0N0E0ODM1OTU5QzVDNworOjEwMzI5MDAwN0NGNDgxN0Y3NjkxMUNCMjEzQkNBQUQzQThEREQ1QTk5QQorOjEwMzJBMDAwNEMyNUZBOUQyRUJEQTJCODcwOUNCNTg3MDU5REEzN0VDNgorOjEwMzJCMDAwNzk4OUVBQURDRDE2QTA3MzI2Mjg2NzRDM0ZBMjc5NEJEOQorOjEwMzJDMDAwRURFRTk1MjQ3OUE0ODFFMzY5REQ4NTNFOTQzQjE0NDdCNgorOjEwMzJEMDAwN0NDNTI4MkY4QTNBOEQ3MENCOEQ5N0VCM0RDMEIxMjdFNgorOjEwMzJFMDAwM0QxMTBGNDdENzA0MEQ4RUM1MDhDNzIxREYxRThFMzY0RQorOjEwMzJGMDAwQUZEMEMzRTkyNTQyQ0VCRTk4RkQ1MzdFRDU3RDU4OUMwNAorOjEwMzMwMDAwQUI0OTU3ODBFMUZBODUyQUY0RjI3NEU5Nzg5OEU0Q0I2NgorOjEwMzMxMDAwM0EwNUU1MEJCNkNGRDBEQUREMjU0MjlFRTg3MENFRDU3MgorOjEwMzMyMDAwRTBBQ0NCOTM3NUYzMjE4M0Y4REU0REYyQzQ0OTcwRkQxOAorOjEwMzMzMDAwODhGNTc2NUI5MTgwMzM0MDg0RjM5RkE5OEFFMDkzMzVDQQorOjEwMzM0MDAwNTZGMDUyOUNCNkFERDRFOUE1Nzg2MUFFQTJDMUI3NDk5QQorOjEwMzM1MDAwODM5NzA5NEMwNERGNzhCQTk0MjFBNjhFRUI0QjhEQUI5MgorOjEwMzM2MDAwN0Y1QkY4OTY0RUQwRjQ2NDNGMjgzRTFGRjhBRTRCNDk4MQorOjEwMzM3MDAwMTVGQzM2NTRDMEM3RUE4Q0YwQjlFNkE2MUM4Qjc3MjUzRAorOjEwMzM4MDAwRjI3NTQ3MEVDMjFCREI5QjVFMTdGMEZFQTVENjdGRDVGQworOjEwMzM5MDAwMThFMDdBNTNERkQ1OTkwQ0FGOUM4NTk5NDRDRjRERDY3MAorOjEwMzNBMDAwMzY5NUYyNTg0RDNBRkQ2OUU3QzI1QzlBOUM5ODg2RkNDNgorOjEwMzNCMDAwQkQwMERGNUY4REYyODlGMjkwQTkyNTAxMDc4REQ3OTRCQQorOjEwMzNDMDAwNkYwMTg5RjdCRkQ5OUI2OEZGMEU5RkNEMjAwNzJGQUJGOAorOjEwMzNEMDAwMzFDMjM1MjUwRThFNDlERjkxRkY3RjNDRTFCQkYxRkYwNQorOjEwMzNFMDAwNzZGQTE1RkJBRDE5MDZEMEM5NzlDODkwODNFMDY0MkIzNQorOjEwMzNGMDAwOTk5ODRDNzRENEQyQkE5REVCMzI4NDlBNzI3MUZGMEZCMworOjEwMzQwMDAwM0I4NUZERDVEMjNBQkJEN0YzNTEyMTREMkU2Q0E5NzMyNAorOjEwMzQxMDAwNzA3OTVGOUQ5QkNCQjZCQTRDMkVFRkE5OTNEOTdFNjk4QworOjEwMzQyMDAwQURDQkUzQjJBNUNFQ0I2NTUzNUQwOTk3QUJFQTE0RUUwNQorOjEwMzQzMDAwMjdBRENEQTg2MDM5NUMwNTFDQ0Y1RTk5RjIzOUU3REY3NgorOjEwMzQ0MDAwRTNFN0NCNTE4RDdBNkM3MDZEQjIwMUVFN0Q2NjE4RjVCNQorOjEwMzQ1MDAwNTVCQTYyRDQ1Nzc0OEUyOUI2RERFNTFENjU2ODRGQzkyQgorOjEwMzQ2MDAwMkIzMEQ0OTNFNDg5ODZGRTUzMjYwNDdFMzk4MUU0ODA5MAorOjEwMzQ3MDAwQTczMjRFMEYyMjNGOEU4OTlFQjM2QjY5MTVERjRCRTk1MQorOjEwMzQ4MDAwRjBEM0Y1OTM1M0UzRjMzNTU2RUYwMENBM0IzOTVCMDVCMAorOjEwMzQ5MDAwOUYzNjZCNzY1RTEzQzExMUNCNjQwNUY4REM4Q0VEQjAwMgorOjEwMzRBMDAwRTQwRDAxRjFGRjZBQTZGMzg3NzFFRUZFNDg4QjFERDk4QQorOjEwMzRCMDAwRDcyODY0MjdCNEM4QzI4RUI3ODIzOEY3NkJDQkY0ODc5RAorOjEwMzRDMDAwNkJGMDc5MTJFQTJGQ0FFQkRBRTZBNkIwNUM3OEQ4RTNBMworOjEwMzREMDAwRjREMjM5REI5NkQ2NjU2RTVFOEY1NzlDQTc3MUUzQkYzOQorOjEwMzRFMDAwNDQ3OTgwRjhGMzM1OEVBMUM2NzMzOUQ2QjM5QzZGRkM0RQorOjEwMzRGMDAwNzU0RkY0REE5NDkxNTA4RTlDMjE2N0JCRjMyRkVGNkJEQworOjEwMzUwMDAwNzQyOUYyMkZGNzc4MDQzQ0VEM0RDOEEzRDYzODdCRDk1NworOjEwMzUxMDAwQTlFNTVGNjBBMDJGNjFGRkE4M0QyNUYyMEJBRDcxNzE5OQorOjEwMzUyMDAwN0JGNEMzMTJFNjZGREU5QTIwNzFGRjNGNEY5MDg1QkY5OAorOjEwMzUzMDAwNjYwOTAzQzk2Qjk3MTdERjhGRjUzQjE0RjE3REU4Qjk3NgorOjEwMzU0MDAwQ0U4RjNGM0U0RjhDN0MwQTI0MDdGRTNDMDE5RjJCNEZDMQorOjEwMzU1MDAwMDgzQjI1NDkxNkRGQTFEODQwNTE1ODNFODFDODg3RDA4NQorOjEwMzU2MDAwNTkxRkQyMzdBOTVBQkVBNzVCQ0U5MDg4ODhBMTNCRTdFNgorOjEwMzU3MDAwMTlGRUFFQzg4QkQwNjcxNjQ0M0Y5NkU4RkIxN0M0QkY1MAorOjEwMzU4MDAwRkRCNjY1MjNGOUMzQzM3QTY5QTdGQzUwMDJCOUUwMkFFNgorOjEwMzU5MDAwRDFCRjFGODMyRTRGMzE4MEVFQkEyM0ZDNUMyNTg5RTExOQorOjEwMzVBMDAwMTcyNjc4MzU5QUQ2Q0RDOEM1RTdBOTVFOEIxNzMxMDBBNgorOjEwMzVCMDAwMTUyNUYyNUUzQTVGQjE0QTQ5NjVGREJFQUE0NDZFMjcwMQorOjEwMzVDMDAwRkVGOTQyNzE3QTA5MUZBREY5NTVBQ0FDOTM4NjdEQzhGRQorOjEwMzVEMDAwQTJCN0IxQzRDNjc2QkE4RTg3MjQ2RDVFNDQ0RjY3OTU5NAorOjEwMzVFMDAwMEU2N0VDRUZDQzlCMTFBREUzN0ZDRDYzMzY3MjVFQUYxRgorOjEwMzVGMDAwRTVBQTQ3MzhERkQ3MzJFQjNGMzhERkI3M0E2QjdBMUVBMAorOjEwMzYwMDAwQzlCREE0OTJFOUM3RjgyMDk3ODYxRjY2MEREMjIzNzkxOQorOjEwMzYxMDAwQzZGQ0RFRTlEM0EyQ0U3MEEwRjg4NDk2MDcwNDhGMzFGMQorOjEwMzYyMDAwQ0Y2NzkxRkQ4NkY5MkYzNDlFNjBBMEQwNDM2MDUxRjg5QQorOjEwMzYzMDAwN0I4MzMzRTk1QkYwQjVERUFGNjczRTUwRjVFRjRFNTc2NQorOjEwMzY0MDAwRDJGOUUwMjY4RjkwQTM0REUwN0QzMzQwRjU1NzI0QUZBQgorOjEwMzY1MDAwMkFEM0YzODIzN0U5QkNFOUVBODExNkM2Q0JFQUNDRDk5MgorOjEwMzY2MDAwNERDMjhFMTc3RTUzOTM2NzI1RTc2REUzRjUzNjlERDdFMAorOjEwMzY3MDAwOEM5NURCNzQ1RTMzNTZCRTM3QzlCMzdCRDVDQjU5MDEwRAorOjEwMzY4MDAwNzM5Q0RFMzdCRTlGMUQzNEVBMUZGREJEQTRDQzJCNUZBQgorOjEwMzY5MDAwQUI4QTM5MkZENTZDRjEzQjQ4NUVBQ0YyREM2NzhBRDUzQQorOjEwMzZBMDAwNzMwRjI4ODEwNTI1MzFFNzkzQUM5OUIzRjgzRDdCQjZCQworOjEwMzZCMDAwMkZFMUJBQUU1MDk0ODU0NERGQjhGRjVFRUQ4MUY1OUFGNAorOjEwMzZDMDAwNUNEQ0E4RTk5N0IzRUQ3MzkzRDZGRjAxQURGRjY2RDIzQQorOjEwMzZEMDAwRUIyM0EyRjgxOTNFRjRGMjY0OTZDRkVCNDQxQzgzNzlGNQorOjEwMzZFMDAwMjA2NjVFQTUyNEIwODJENjE1QzVBQjM5MEExN0E0RDNDRgorOjEwMzZGMDAwRTFGOTU3QjBEREQxQjA2RTc2MzJFMTY5RTdGQURFRDc5NQorOjEwMzcwMDAwQTNFN0Q1RjU3RTdBMUUzNTNFQkY2RUYzOTgwREYwREY0OAorOjEwMzcxMDAwQTNDOTg1MTc1QzBCMkIxRjQwRDBFQzZDMTNGNEQ0QjBGRAorOjEwMzcyMDAwNEVFODkxRTE0Rjg4N0Q5QzQ5ODdDNkY1RUU2Q0VCREQ1NAorOjEwMzczMDAwMEU4QUVGNEY5MUM1NkUzQUUxN0E0NjVDN0Q0MDVDRkZBMAorOjEwMzc0MDAwRENCOEY2NTE3MUVEMDU3MUY1ODk3MUZEMkJFM0VBNTc4RgorOjEwMzc1MDAwQzRGNTlGMUQ1N0JGMzZBRUZGODJCOEY2REJFMkRBOTc5RAorOjEwMzc2MDAwQzVENUZGQ0Q4ODRGREZCNTY5ODlFMDE4OEYzRkJEREYzNAorOjEwMzc3MDAwQjlFMkVGNUQ1RkM1N0VBMkEzRTEzMDgzRTk0NUE3Qjc1QgorOjEwMzc4MDAwNzNDNTQzRDRERUY1MzM5REQ5NEE0NkIxN0NERjgxRjY1QgorOjEwMzc5MDAwMTVEOTQzM0JEQjJBRERFMjdDNDc2MEU1NkU4RDNFNDg3MAorOjEwMzdBMDAwM0Y1ODM2ODg3OUQwQ0U0QUU2Rjg5Q0QzNjM5MDIzNjc5OQorOjEwMzdCMDAwQzNCNzA5MzI4Q0VEQjE3NjY4RUU4NUM3RjdEOUU5MzMyNgorOjEwMzdDMDAwQTREOTE3QkRBRjVCRTdFMzI5MTNGQzI3NDkwRTQxNDg5NQorOjEwMzdEMDAwRjg5OUJBNURCQjREMTVGQ0IzNEQ1RDUwQjk5RUU0NkREMworOjEwMzdFMDAwOTM1OUM0OUZCNUZCNTBFODZFMUQxMTI3MEY2ODRBMzhFNgorOjEwMzdGMDAwQzJGMTg0MjZDRDRGNjhEM0U0Qzk1QTREOUVEQ0FERjlBMQorOjEwMzgwMDAwMDk0OTQzODM5QjI4RUU5QjdDOTg4RkU3NDBCM0FGRTA0OAorOjEwMzgxMDAwQUYwQjEwM0ZGNzk3MTY2RkEzRUZDN0VFMUU1M0YyRjhFQQorOjEwMzgyMDAwQzM1ODc3RkQ1RDgyNzAyMURBRTk2MzVCMTRCMjU5REExRgorOjEwMzgzMDAwOTQ4QzI0M0E0Rjk0NjI3MkI0OTM5RkI4QUFCMENEM0Y0RgorOjEwMzg0MDAwMTRGQkFEREQ3RkFDRkQ3OUM0QjM5QzY5RjNBMkNFMDc1OAorOjEwMzg1MDAwRDlEMjY1MjI3QTgzN0MyRjdGOTc4NkVCNTRDOUM2QjI3MgorOjEwMzg2MDAwOTY3N0Q1MjUzQTc3QkFGNjBBQjc4OThDQjBGNDE5QjJBQgorOjEwMzg3MDAwOTlDRTExRjc5OTEwRTg1QjhBRjAxOERDMDQ2NjA1RUIyNQorOjEwMzg4MDAwMTk2QTk4Q0ZFMjVDNTMyQTBCRkZFQTE5NjQyOERFNkZBRAorOjEwMzg5MDAwNTcxNkMxRUJBQjY2REI3RUFBRjY4QzBGOTBCNDM4REQxMQorOjEwMzhBMDAwNzk5NUZBMzg2OTgyMzRFODg3RTM4RUIyNDVBQkFCOEZGRAorOjEwMzhCMDAwNkNBNkYzRDA0RTQ5RDRBNzNDRjNGOEZDOTVGOUQxRkFBNQorOjEwMzhDMDAwOTg2NzFFMUZCODEyREI1QjBCMDc5OTQ4OUVBNjdCNTJCOAorOjEwMzhEMDAwMTNERTEzNzM3NUE5OTA5RkRCOUIxNzBFNEVFNDhGRTlERgorOjEwMzhFMDAwQTUzQzEzMzgzMDIxRTc2QjI1RDFENDA0MkM4NzZBQTU3OQorOjEwMzhGMDAwQUMzRENGMTRGNTJCMzVCOEM5QjU1QUJCNDc5NDE3N0FGMAorOjEwMzkwMDAwOUVGOEYxRTc5NEJBNzUzQjdCODA5RjhENkNDODc3RjY4MworOjEwMzkxMDAwMzNEODhCNTc5N0Y2NjIyRkEyNzlDQ0YxREFBRDU2Nzk2RQorOjEwMzkyMDAwMDA5RDIzRENEQTZDMDNCQUZGNjE2QjM2ODhFRjkwNTc5OQorOjEwMzkzMDAwRDlGOERDMjg1OERDMDNBRTcxNDVENzFENUFENTZGMUU2NworOjEwMzk0MDAwRDE0REM4MDQ4NjM4NkVBNjA2NUZGQjQ0OTM3NjhFRjI4RQorOjEwMzk1MDAwOUIzMDdEQzdCNzU1Q0JGMzZDODU4OERCOUQxRjhCRTcwQworOjEwMzk2MDAwNUZDRDI3QkNFQTc4REU1N0ZBQUZDRDQ0OUYxREQ5MEI1NworOjEwMzk3MDAwMkIzN0UyN0JFQjFBQ0QxQzM3NTlENzk4Q0I3NDRFRTMyQgorOjEwMzk4MDAwOTA3RDc0NkFDNTIxMzNEOUFERjlEMDZFMjYzQjdGMTQ4MgorOjEwMzk5MDAwN0Q3OTNEODRBRTQwMEE3MEQ5QUVDOUU3RkZENEZDRjgwQQorOjEwMzlBMDAwNjFBMEYwRjM0MUQwQzVDMEY5QjQzOEYwMTM4MkNCMTA1OAorOjEwMzlCMDAwMTI2RDEyRjE4RkRCRTRDMDc5OTZFQzRCQUY0OEE0QjdERgorOjEwMzlDMDAwRUI0QUY1RUY3QUExQzY1MkFDRjkxNzMyQzNCNzhFRjhCRAorOjEwMzlEMDAwMjgxRUJFNzQ0MjlGRTM4RThBQkY5RURBOUQ3QjVGMEREOAorOjEwMzlFMDAwNUY4NkQ1REQ2RjE4RTk5M0YwMzYzQjQ2Q0Y2Q0Q0RTBBNworOjEwMzlGMDAwRTdGNkZBMTVDMkUxQjVDNTgxMTY3QTdGQzlBNkJGMUVFMgorOjEwM0EwMDAwMjA3MzU0NTY1NTMzQkRGRjE0RTExRDlGMkYwQzA3QTc5QgorOjEwM0ExMDAwRDMzMDYzQkNFMTRBRUEzRkJBNzZEQjdFOEFBN0U1MDU4QworOjEwM0EyMDAwRUZBOEVDOEZFQjFCQUU1NDU3N0E4ODg2OTRDMEZEMzQxOAorOjEwM0EzMDAwQ0VEMENFNDg4NTBCRUJDRTREQUY4NkIzNzgzRDYzNzlDMworOjEwM0E0MDAwQkM1QzdEM0Q0ODBGRDU0QzQ3NkUxMUM3RDdGMDRCRjg5NQorOjEwM0E1MDAwQTc3M0NCMEIzNzBCRjg2MDdCMTZFRkNGRTJDRThBNURGNgorOjEwM0E2MDAwRkZCNjY5RkRGOEJCODU3OEJBNjhENUUwRjc1ODE0OEVDMworOjEwM0E3MDAwNjAzNUZBMzU4RjI1ODJBMzRFQTczQTNDNkU3OEEyNkI0QgorOjEwM0E4MDAwMTVFNTNBRTc4NzNBNUYyNDM5RThERkU0OUVDNkYyQjBFRAorOjEwM0E5MDAwMzhGMDI0QkRFRjZCRjMzNzcwMUU3MDU3Mjc1RDQ3RDRBNQorOjEwM0FBMDAwMEQxRkE3RDI0OUQ3QkI2MDNGRTU2OUMyRkJENjE1RUYxMgorOjEwM0FCMDAwNTc3MkJDNzgyRjg4Qjg1ODlDM0VENDRCQUIxMjlGNjc4NgorOjEwM0FDMDAwMTBGN0U1OENEQjZCQjQ5MzkxNUU5NThEOUU1ODdBMzUzQgorOjEwM0FEMDAwNzNCRTMzQTRFOTkzNTAxM0QyMkZDREI3NDJEMDZGNDhCMQorOjEwM0FFMDAwNURFNjRFNDQ2NzhGNjg3QTY1ODc0NkI3RkFGM0ExM0Q3NQorOjEwM0FGMDAwOUNCQjNDNTREQUVEMjc2NjRBNDY3ODFFRUE4REVGRDMyQworOjEwM0IwMDAwQzBDQkZDODA3QzcwODRGQTY1MTAxRjYwN0RGMDBBMzdBMgorOjEwM0IxMDAwRDNBN0NFMDc0QkY2RkVGNTAwREQ2N0UzRjRDOTA1QjE4OAorOjEwM0IyMDAwRjdENzQ1MzQzQzIyN0RCRTQzRUYyRkQ5RDQ3NTgwN0MzNgorOjEwM0IzMDAwQzVDMTJCMDQ3RDdFNEM3Nzg3MTU0NUU5MENGREM3Rjc4MQorOjEwM0I0MDAwQTg5RjRFM0ZGMUZCNzg1NzFCNEYyRUY2N0Y0Qzc4NUNCOQorOjEwM0I1MDAwQjgyOUM4RTMyMUZGMUMyQkU1NzEzQUMzNDlDQzcyNEE0RQorOjEwM0I2MDAwMjVFRDY3NkIxQkI4NjkzRkY2NUYxNDc0OTA1QzM4NTVBMAorOjEwM0I3MDAwNkI2MkI4REU5ODFGNUU2NUM2RjJGQUExNjBBNUVCODY5RgorOjEwM0I4MDAwQUEzMzkxNkM3MjI5OEY2QkNDRkYwRDZCMzNFMjBGRTk3NgorOjEwM0I5MDAwRTc2RjM0NEY5MTI3NjAxM0MxRUJBMDhERTU2OTBGNzQ3NworOjEwM0JBMDAwMTFENTdCQUEwRUZGMTU3MTcyRDczQ0IxMTc3QTNFRDc5QgorOjEwM0JCMDAwNzFENzE2MkI4RTg5NDVERjYyMURFN0Q4NEY4RjM3OUQ1MQorOjEwM0JDMDAwMTkzRjFEQzVGRTQzNEJEMzZDRkQ5Q0YwMENCQThGNjdBQgorOjEwM0JEMDAwM0JDNTRGMTFBRUFCOUE3QUI3NTcyRjU4RkNCNEY5QTQzNgorOjEwM0JFMDAwODg5RkFFMDA4RTAzQUQ0QzE5NkI0QTQ0Mzc5NzQwRkM1QQorOjEwM0JGMDAwNzRDQUM0NDRGMUQzQzg3QjA2M0I3MzU1OTM5MDBCM0EwNworOjEwM0MwMDAwRkM4NjU3OEQ0QzE2NzkyOTQ4QTU3Qzg5MUUxRkQzRjc1MQorOjEwM0MxMDAwNzVCNzY2NEYzNjY5NzA2QjIxQjgzMTNDMDVEQ0RBMDg0MAorOjEwM0MyMDAwNkUwQzRGMUQ2RTMzODQzRjQyNUY4ODUzQkNENjYzMTZDMworOjEwM0MzMDAwNzlCMTkxMEIzNjUxQkVFMDU0QTZDODkzRDc2N0RCNDRFNworOjEwM0M0MDAwN0I4RUM4MkY5QzQxMUY5OTMxRjYzNEYyQzE5QTY2NzE2MAorOjEwM0M1MDAwOUYwOEJFQ0Y3OUI1MTdCMzBGMzg4NjUwOUUzM0QzQ0NBQgorOjEwM0M2MDAwNzFEQUVEOUVGQjZBQjY3MzNEOTlGOUNGMEE2QTVCMUU2NQorOjEwM0M3MDAwQ0UzQkZDQzNCOUVBMDI3QTVFNjJFNzczRjI3QTNFQTdGMgorOjEwM0M4MDAwQTVBRkM4RTdCOEYyQjQ3QzRFREM3Qzc2QjhBOUIyOEQ5QgorOjEwM0M5MDAwRTZDQjEzN0U0QjhGNzRFQ0QzRjIxMTVBMUUyODIzREYzMAorOjEwM0NBMDAwOThBRjcwQzRFNTJCRTJGMzk1NkI5QTE3RUNERjJFRTIyOAorOjEwM0NCMDAwMkIyQzlGODdGRjc4MjRGQjYzRjFGM0I4NjcxQUZEQjdCRAorOjEwM0NDMDAwMzUyMzc1M0ZFQTExNDdBMkVGMTg1MkFCOENGNEQ4QTIwNgorOjEwM0NEMDAwRTFCQkExQUZDODQ3OUM2RDdDMjg0RjM2Rjg1NTJENzlDNAorOjEwM0NFMDAwRTcxNjQ3RDBGQjkxMUZFQTRFRDAzRkRFMEYzRDFGRkY4NgorOjEwM0NGMDAwRDZDREUzMUJFRjA3NENFMERGNkU5OUM4RjExNDQxREYyRQorOjEwM0QwMDAwNkI5QUM1RkVCQkUzNjk5QTVGQTU5RjNGRDJDN0IxNkFCNAorOjEwM0QxMDAwN0UxQ0Q3NzNBMjcyNEFDRjg3MEQ3NURCOTg1RTg3NkFDNworOjEwM0QyMDAwRjc0NTM1RkM3QjRBNjg2NTBFRTVENzY2NzU1MTNFNzJFRQorOjEwM0QzMDAwRTgwRTg5RjNFRTQzOUQ3RUNFNDM3NDZDOThDRUY5RjE4NAorOjEwM0Q0MDAwQkVDOTgxQTcyN0M2QzQ5Rjc2Qjg3RTlBQzlGOTAyMkQzRAorOjEwM0Q1MDAwREVDRkY3RTZBMERFNTNENzE1NzYyQTY0RUY4RTA0QkVEOQorOjEwM0Q2MDAwNjcyNzM5MkUxRjEwN0YzRjRFN0M3RDRFOTlEMEMzOTkxNworOjEwM0Q3MDAwRDc0MUMyN0I0RjNFOUYyOERBQ0ZGNERGQUY2MDM4QTEzNgorOjEwM0Q4MDAwQkY5QjJDRTRBREEyRDdGRkJGRTRBOTc2QjYxREUyRUYzRQorOjEwM0Q5MDAwN0Q0RUY5NDA5M0IzRkYwOTk3QTI5QzNENTExMjM4OUU4NgorOjEwM0RBMDAwNTBDRTVBQkE1OENFODYyNzI4OUY5MTlFNUM0RTE3N0REQQorOjEwM0RCMDAwMTAxRTZFNEM3QzNGOEY1Qzc2QTlFMkUxNjk4MTg3N0NBNgorOjEwM0RDMDAwMUQwRkY3NUM5MkY5NDJDNDQzNzY1OTIyM0NBMDVGNDUyRgorOjEwM0REMDAwRjA2QUYzMjk4M0E4NUQyOTUxMDY1M0Q5OEQ4RjFGMjZEOAorOjEwM0RFMDAwRTY4QjU5NjVDMkVFQkI1OEY4NThBN0UxRTM1RUMyMDdGRgorOjEwM0RGMDAwQzc2OTY0MkQ0RTkzQzdDRjlCMzU3Q0FDMzkwMzFGRUY0OQorOjEwM0UwMDAwMEI3Qzk0RThGODc4RUVCQ0YwOTE1MTk1NjE2ODc3OTc1NworOjEwM0UxMDAwMUJGMTkxRUFDQjM1RDQ5REY5NDY3QzI0MEYyRDMwOENEMworOjEwM0UyMDAwQjdCQzRDMTZGNzI0MEQ5QzY4RTg3NzI2M0U4Q0ZFQzA4NAorOjEwM0UzMDAwOURGNDVFMkZGNkU4QzA0MDY3MDU3RDRCMzQ2MDZFN0JENQorOjEwM0U0MDAwMDdDOUU2NEM3RjVCMDU5NUZBM0UzN0M3Rjk3MzdBQjkyNworOjEwM0U1MDAwNUNDMzVGRTZENEM0Rjg1REEwRjE1QkM2NDRFNTI2MDMwRAorOjEwM0U2MDAwM0Q3QzJGMzE3RkQ2NjhGRDk3OTcyOEI3OTRDNUYyRjMzNAorOjEwM0U3MDAwOTU4OUZCMkZEMUZBREYzNjQxNTkxQ0RCMUY3RkQ2NEJDQQorOjEwM0U4MDAwMzFGNjc4NEZGQjBFMjQyQkNCQ0I3OEZEMjI0RkI2QTMxNworOjEwM0U5MDAwM0U5NUYzNjYzQjkyRTQ3NkNBNTdBQkY1NEVDM0JENzVDQgorOjEwM0VBMDAwODNFOTM3QUM2N0ZFRTg5QjBFOTVDRUQ5RDEzRDQxNjhEQQorOjEwM0VCMDAwNTk2REJCQTM1RkVFMUE2Q0RBOTYzMTdDMjVDMUIxQTlBRQorOjEwM0VDMDAwNkM4OEI4QkY3NTkxRkY2RENBRUYyOEVBMDlFRDFDRDI2NgorOjEwM0VEMDAwN0NCRUVGQzgxNEVFNjNBMjdCQjJDMDlENzE0RUY5MjM4NQorOjEwM0VFMDAwOTQ2N0UyNUVCN0MxMjBCRTIzODYyMEVCNDFDOTBGRTk4QgorOjEwM0VGMDAwRjREREIyMDVGQzIyNUY0RUZEQzVGNzg1QkNGOTE0MDg2MAorOjEwM0YwMDAwNzNERDA1MTFBRUE3Njk3RURFMDM2NTM5M0M2RTNBQzhFNAorOjEwM0YxMDAwMjYwMTI0QUY4OUU0QThDRUE3MEU0RjkwRTlERjUzRUIyQQorOjEwM0YyMDAwMzZBRDI0NUZDRTAyNTA0NjdFQTA3MzIwN0ZDRjBCOTUyNgorOjEwM0YzMDAwQTA1MjNFQ0IwNDBFQjYzMzRERUIwRjdDQ0Q3OTNBRkQ0QgorOjEwM0Y0MDAwRkJDMzk3RkI4OEVGMEZDRjcxN0ZFN0RBQUY5MUVFRTUwOAorOjEwM0Y1MDAwRjM0NEVGRTU2QkQ0RUMwMUZENUUzRUI1MzJDOERGOTc2QworOjEwM0Y2MDAwQUIyQkVERUUwNkNGOTlERjk3M0YzQTMxQjA4QkYwRkRFQQorOjEwM0Y3MDAwQjdBNDQxMjE5MTY0MEU0RTk4RURCQUEwRTM4NzJGRjJDOQorOjEwM0Y4MDAwRjhBRjVDRTRGMURGRUM2REZDQkJFOUQ3NTJDQUVCRjlBQQorOjEwM0Y5MDAwOEYxMjNGMzdCODhBRDlFRUQ0Q0I3OEJDNURBMTI4MTFGNworOjEwM0ZBMDAwRUEyNzM5NUUxQkYwNjE5RkE4M0RFNzNDNkE2MjdGQTg2MworOjEwM0ZCMDAwQzEyNENFOUZBOUVGOTlEOEVFODI3QzQxMDc0RTE5RjIxOQorOjEwM0ZDMDAwNzJDNjQ1Qzc3MTdBODM4MzQ1REM0OUM0NUZFQUZGNzREMgorOjEwM0ZEMDAwRDcwOEIyQkY3Rjk5MzIyQjkyODZFMzFEN0M1NUQ4N0ZEQworOjEwM0ZFMDAwOTZBOTkxQ0Q3NEJGNzNGRjM0OUI3NzNCRjJERDNEREEyOAorOjEwM0ZGMDAwN0FFREE1MTNFRUJEMTM3RkJENzk4QTkwMTcyRThCRjc0RQorOjEwNDAwMDAwRjIwMjNFQjczNDMzNDJGNkEzQUJEODIyNTNBRUMwMTkwNgorOjEwNDAxMDAwOTdENzZDQjVCNDI1NTNCQ0IyNzVDNzdEMTVBM0IwRkI1QgorOjEwNDAyMDAwNjM3NTJGQjkxQjEzN0NFRkU5RDRGMjlBMjNBNUM0NzJGMAorOjEwNDAzMDAwRjA5RjkzOTI0NERDQ0I2N0JDNEZEODVBQUU5RDJCNDk3RQorOjEwNDA0MDAwODU1NEIyMjMyREZGNTJEMjEyOUQwN0QwNEI3REZFMjIwNAorOjEwNDA1MDAwNEZBNDhBQkVCRjhFRDAyNTZFODhFN0EyOTJFQUE0NjRFMAorOjEwNDA2MDAwMEY5RjhCRTgyNEY4NTY3QUMzMEVCMjdGMUY1RjEwQkNGNworOjEwNDA3MDAwMzVGNkZCRDNENjEyNzA5MTFERUY5QjIyQ0VDMzZFNTA0NgorOjEwNDA4MDAwMjQxN0REQUZGMTYwQzRDMkY3OEUzRkI4RThFOUU2MTQ0QgorOjEwNDA5MDAwQUNFRjNENkE3NjEzM0M1QUZERUYzOTkzQjFGRTM4OEU5MgorOjEwNDBBMDAwNEJGMkVFRTAwRTcxQ0U1MjlEMEZBMTYxMDhCRjU2RjJBOQorOjEwNDBCMDAwMkFCMUJFNUIxMUU3QjJEOTIxMkJENkFFRUE0M0Y4RkY5NQorOjEwNDBDMDAwNzU3MjVGMDE2RjA4NTZEM0JEOURFQjUyMjZGMzdEOTY0NgorOjEwNDBEMDAwRDk3MzQ0M0M3OEJBNzRCNDgzREU3RkIwQzRDRUY4MUI4NQorOjEwNDBFMDAwQTI5REQzMzFBOUQ1N0M5RjY1REZGOUM2NzMzQTBGMkUwNworOjEwNDBGMDAwRUY1NDA5QkZFRTUyQkI1QkU1RjM5NzRFRDc1ODdDREYxOAorOjEwNDEwMDAwRjVBODE5MjQ1NjcxNUQzQ0Y5NzRDOTI5RDZFNTE1N0VDOAorOjEwNDExMDAwRUVFMzcyNThBNUZCOEVGQkUyN0JGNTZFQkUzNUQxNzBFNworOjEwNDEyMDAwMUU2OEY3MjZFMTlGQTY4RDc3N0E5MUQyNzFCRDcxRTc1RgorOjEwNDEzMDAwODVGNDc1QjVFMUJBRThERTYzRDc1MDhFNDc2NENDMzFCQgorOjEwNDE0MDAwQUUyRjJEQ0U2RjcwQzZENUE3OTY3N0RGRTMzMzlDRjBFOAorOjEwNDE1MDAwRkQ4NUZGQTc4NUFGNzFBQjU3NEVFNDdGQjZENjQxNjdBQgorOjEwNDE2MDAwNTVDQ0I5MDQ2NzBGNzFDMDlBQzk4MkFFNkQ1OTJGMzgwQQorOjEwNDE3MDAwQzg0RUY5QzI3RkM0NDMzODc4RTU5RjA3M0VCQzk3Q0E1MgorOjEwNDE4MDAwN0ZGRDZFRDc1Mjg0Q0ZFRkJGN0U3M0M3OTNCNEJGREE4MworOjEwNDE5MDAwQkIwRjExQkRFQUZFMTg5RkMxQzRGNUJDNTg2RDYzQjhEMgorOjEwNDFBMDAwRjk2NzY4RTczOTdEMUQyRjU4N0REQ0NFRjlBNUI1RkI5MQorOjEwNDFCMDAwOTNCODdENjQzOTg0OTJCMDdEQTQ0NUM5QkE5OUU4QUVCQworOjEwNDFDMDAwNTNGMkQ2Q0IzNDg4Mzg4RkE4RTM3RkVEMEQ3RTEzOEM2NQorOjEwNDFEMDAwMjEzQ0ZBMjVCQTBGNjM5QTc2QkU3NkMzMjI5MDA5RkY3NgorOjEwNDFFMDAwQjY0NUVEN0M1RUREQjc1QzlDNTdGNzI5RDU0OTdDREU5MgorOjEwNDFGMDAwNzQ4RTk5Q0Y4N0Q0NTc1RjczRjkzMEFDRUZCQTVDREMxQgorOjEwNDIwMDAwNEYzNTYzQjkzMjhGRTc1NzA0QkRBNDc1MTY5Qjk3MTNEQQorOjEwNDIxMDAwNUQ2Njg5RkI5QUY0RjNBNjQ1RDBDNURGN0Y4Q0Y0QjZDMgorOjEwNDIyMDAwNzdEODQ4REVDQzQ3MDBEM0ZBNUEzNTdDNjk3MTgzMjJBRgorOjEwNDIzMDAwNUZBNzRBRjZBNENCNkJDNDYzNDYxQ0RFRTJGMUJBNDIyOAorOjEwNDI0MDAwQzdFMzQ4MTg0OTc4OTRBMTJEOTlGNEUxNDMwMEVENzQyRgorOjEwNDI1MDAwQUZDMDg2RTU0RkNGQTNGMzZDNUZBODY5MENBRjlFRjhBMworOjEwNDI2MDAwRjkxREI0NTc5NTExNzQwRjhCODNDQjRFQjQ1N0E5REM0RAorOjEwNDI3MDAwODVGNjJBOTVBRTYwQzU3NUNCNzFERDdCREUzOEY4RDI0OAorOjEwNDI4MDAwMEY3MUJBNTk0QUY1OTU3NDQ0QUI0OENCN0I4MUJBNzQyNworOjEwNDI5MDAwNTAyNUFFRkYwNkUyNUU1MURGNDI4OUM0Nzc3RDkyQTFEMAorOjEwNDJBMDAwQkVENjYzODlGRTNEMDBGQ0Q1OTVBNUZGN0Q4MEQzNUIxRQorOjEwNDJCMDAwOTRBMTA4OTY0QzhCOTY4RjExRjU1OUU0ODdDNEI0RUZGRQorOjEwNDJDMDAwOUU2OUVDNUZCNjNGNjZGQzgxQjhERUM1MzY2RTBGRURDOQorOjEwNDJEMDAwNUJCQTQ1QjVDNEI0M0Y4N0Y1NzI4MDU3MzVGQkYxRkEzOAorOjEwNDJFMDAwOUQ2NkZGRjYwNEYyRURERDcyNjE0NzVBRkUwNTJBQzlBQworOjEwNDJGMDAwQjUyRkQxNEUyM0ZGNUUzMjJCMkNERjIxRDcyMjI3QkFEOAorOjEwNDMwMDAwNTcwRjAwRTU2MUFDNUYyRTFCRTVFQkU1MUE1RjU4RkMyQgorOjEwNDMxMDAwMTVBMEU1QzdFMDFCM0RGRTgwM0Y3QkZFMzg4QkVGNjNCOQorOjEwNDMyMDAwNUEzNUM0QzJGNzBGQTEzRUYwRjY5NkFGQjM3ODJDOUY3MgorOjEwNDMzMDAwQzZERURCRjVBQzJFQkY4N0MxMzA5QUZGNEIyOEZGNDNBQQorOjEwNDM0MDAwMDVGMzQxQ0NCRDBEQzRGNzZEQ0Y1RkI2MTRFN0YxMUQ4OQorOjEwNDM1MDAwNERFNjM4QUFFNDVBOUZDMkY3MzFENTM1QjEzQzdGNDBDQgorOjEwNDM2MDAwMDlGQ0I2M0NFNjdDNDk2M0ZBQzI0MjkyMkZGQTM5OTlCRAorOjEwNDM3MDAwRThCRDQ3RDc5OEJGQ0RCREY3MURENTA3ODBGNEMyOTdEQworOjEwNDM4MDAwNDg1QUY2NUVFOEIwQjE2RUVGMTE1QUM3RUFCQTc2MkUxNworOjEwNDM5MDAwOUQ2RTg1ODU4REREMTJFNEI4Q0YxNTRBRTA0RkI0M0VBMQorOjEwNDNBMDAwN0IyNkI2QzdGMDg5RDU4REVGMTlGQzBFRTM3RDlDQjI1NAorOjEwNDNCMDAwM0JFMjI0Qjg2RjI4RjlDMDQ5RjNCNzFFMTY3Q0JERTE3MworOjEwNDNDMDAwRjBFQzI0RTJCQjU2RUZBMTI0RTI5QjJGRThFMkM3RUYxQQorOjEwNDNEMDAwQzAyNzNFRTU1NTk2NjFCQkRGNDhCRDlFRTg2NzRGNDM2OQorOjEwNDNFMDAwMUFEQjE1MDc5N0RGN0YyREYxQ0Y4REJGRjgwMUMzQkIxNworOjEwNDNGMDAwOUI2RkUwRTE0MTk1Q0UxOEJFODE4Nzk5QUVCQkY5NDYyRgorOjEwNDQwMDAwQUJGN0NDMzc3RjY3QkVEQUREQ0QzN0EyRUVDQjA3NDMwMworOjEwNDQxMDAwRkRFMDRDNjNGRjZFQkVBMEYxOTEyRjFFQUZCMDczQkJFOQorOjEwNDQyMDAwN0REMkMzNUJENDE4QkUzQTQ5RjU1OEJFRjkwOUYyNERBNgorOjEwNDQzMDAwMDJCOTNGN0Q5MjQ2REYxNzk4NkY1MjJFMzJERjBDOURGNgorOjEwNDQ0MDAwQTRDOUNGRUZDRTM3NjMyNzVEMTRCRUQ5NjMzQTFGQkUzMAorOjEwNDQ1MDAwQjlFQzRDQkVBOTlBRDRGN0RCRjM0REFCM0JDQ0U3RTkwMgorOjEwNDQ2MDAwNUFFNzk4MTNGRTdEOTAwRjM0NzkzOTc1N0VBMEIyOEQ4RQorOjEwNDQ3MDAwRUMxQTQ1RENERjM3NEQ5QTk5RTVGMzEwOUY0OTc0ODdCNAorOjEwNDQ4MDAwMzRFQTRGQTFDRjBGNUVERkZEN0QwNkVCNjdGREZFRjU0MQorOjEwNDQ5MDAwRjU4NDUwQjI5MzE2MEJCQUU5QUMxMzcxREY2OTUyRjk4NworOjEwNDRBMDAwQjRDNUE0NzdFOTNCMDI0QTM1NTNGNjk0RUMwMkQ0RkIzOQorOjEwNDRCMDAwMzJEOTg1RDA1RUUxQzE3OTM2NTQ5OUEwNERBNjJEMDczOQorOjEwNDRDMDAwQUI4N0YxRjg2MUI2Q0Y4NjY4NzE3RkE3OTQyRkJFNjc3RQorOjEwNDREMDAwOUEyOUZFRUU4NUZFNUQ0Q0I1NjJCQzVGQjZGRjU5RUNENQorOjEwNDRFMDAwMjY1Qzc3MEFGOTMxRUUxMkYxNzc1MDE2NEQ4QUQ3QkY2NAorOjEwNDRGMDAwNjg4N0UwRkEzQTA3REE5ODRFMzYyODU3RjcxQTI3M0FDQgorOjEwNDUwMDAwRTM1Q0I1MkY5ODMwMkZGOUQ2MjQ5Mzc2Q0ZCRUYyMzNFMworOjEwNDUxMDAwQTJCM0RENkY2QzQ5QTY3MzEyN0IyNEUwRjMzOUYzODNGOQorOjEwNDUyMDAwNEZDRDIzQkU3M0E5NDJERUI0QUVGODMzQTUyMzYxRDdDNQorOjEwNDUzMDAwQjQxRjFBRjUzNDdDNkFENEQzRjBBOTUxNEY2QkY1MUUyMQorOjEwNDU0MDAwRTU4RDdBQzJBOEE3QjU3QUI3OUVENkVBREQ3QTVBQUJDRQorOjEwNDU1MDAwNDdFNUNEQTcwNjNEQkQ2MUQyQTcwNjc5RjMxRUQ1Q0ZBRAorOjEwNDU2MDAwNDE0RjFGOUU3NDcxRjRGNEE4OEIyQzZGOUVCRTcwRjJBNQorOjEwNDU3MDAwNjZERkE0QkUxNzQzREUxQzM5MkY3OTkzN0RBNkJDMzlCNAorOjEwNDU4MDAwNzQzRUYyQzZCNUI5NDNBNUY0Q0NDMjFFRjhBMDU2QzMxQQorOjEwNDU5MDAwRkI1QjY1Q0FEQjM0M0U5NDlDNUJCQzI2OUVCRTNBQUE5QworOjEwNDVBMDAwMTdBRUE2QkYyQkYzQTU1N0Y4N0YzREJERUZBQUZERDVFQgorOjEwNDVCMDAwOTFDNjE4M0ZEQzY1RTkxNERGMjNENEVFRTFFN0I3NkM2MAorOjEwNDVDMDAwN0U5NUUzQjE2NzVEMkY1RDEwNUE3NEE2NUU0NUJCQzg0QQorOjEwNDVEMDAwQzFGNEVCMzU3MzJFRkM3Q0Q3RDEzQTQ3RjBEQjk1Q0Y5NQorOjEwNDVFMDAwREVDMUZDOTQ1QzZFOUM0RkI3N0YzQkFBNkQ2NjlFQUZBQworOjEwNDVGMDAwNDRDOEU5OUVFQ0ExOUVFNkZEQTA1QzE2RjdGRkM1Q0Q4MAorOjEwNDYwMDAwMUY0RkJGNDg5RkU5OTM4Qjk4MUUyRDc0MkZGODE3OUQ1RAorOjEwNDYxMDAwQzA3RkE3RUFCRjRFNkVGQ0JGOEE3QzQ5RTlDNTExOTNGMworOjEwNDYyMDAwQ0Y4MzRFQTc2QkY4NENCMDZGRUZDNURERjcwNUUzQ0YzNgorOjEwNDYzMDAwRTk5M0NGQzM4RTNFNENGQkVFOUI3MERGREY2NzM4NUVBNQorOjEwNDY0MDAwQjQ3RDVGMzBGRkUxRTZGM0MxRjdCQkU1RERGQkU2RUZFQworOjEwNDY1MDAwNTEzMkI0N0Q2RkY4RTczNUVGNTE1QzYzQzNCRkFFN0Q3NworOjEwNDY2MDAwOEFFMjFBRjc3RDlEQjc4REUyMUFGQUJENzI2OTEwRkRENAorOjEwNDY3MDAwOTFGNUVGOEYxMDJFMkVCRkY4OUUyNDYzNEVDQzc3NDUxOAorOjEwNDY4MDAwQzBGRTdERjRCQjEzQjIzNzdDRERFREZGMkJGN0NBOTE4MgorOjEwNDY5MDAwN0REMkRCQkQ3MkFEMzY2MzVDNEYyRkFGMkExN0Y2NEE3MQorOjEwNDZBMDAwQUI2OTFEQzcyMzM2QTA1RjU1OEY3OEVCOTgyM0UyMTFDNQorOjEwNDZCMDAwQUQ2OEE3QjBEQzk5NTNEMEFCN0RCNEFCNEVFMUI4NTMzNQorOjEwNDZDMDAwNkI5RDlGQ0I3QkVCNjY3MEI5RUJCNTI1NjUyNDc3N0Q0MQorOjEwNDZEMDAwQUYyRDYyQkRFN0YzRkFBRjdCMTg4MUU0QUVGOEQwNDlBNQorOjEwNDZFMDAwQ0ZFRkY1RThGRTkwQjA1RkQyQzg3RUMxRkFDMzkzRDc5MgorOjEwNDZGMDAwNkY4RDhEMEI4Q0ZBRUZFMTVCRDQ4MUQxNzg1NTVCNjZDMQorOjEwNDcwMDAwOENERDIzQzdGQTUxQTAxMkI5NDRGRDI4QUMxQkVDOUFFQQorOjEwNDcxMDAwMTFFQzQ3RUQyNkJCMDZFQkVEOTM0NzE4RUMxQTdEOUU5NgorOjEwNDcyMDAwQjU2NkE4MjFCQjY2RUQwRUYzOEM0NDc2Q0RBQ0YyQzQyMQorOjEwNDczMDAwN0UxNEQ2MzkwRkUyNzAzOUY4RkI3RjQ5RkJGQjVGNTFERAorOjEwNDc0MDAwN0VFOUREQUVDOTlENzI3MUVEOUFERjRGQkUzMEYxODcxMworOjEwNDc1MDAwNkUzRUQ2RUM5OTA3MTRFNTBENERBRTdDNDdGOUIxRDEwQworOjEwNDc2MDAwNENGMUUzNkYyQjNGNDY5MkZDQzgzN0M4OEZDRkNFNDc0MgorOjEwNDc3MDAwN0VDQzJBNzcxQkUyQTIwNzY1QjVDRjU4QjJEMzc3OThEMworOjEwNDc4MDAwQTE1RUQ2RjQyRkQ2M0JEMUFGMzEyMTlDN0U1MjIxQjExMAorOjEwNDc5MDAwOUZCM0MxMEJGQ0Y3RkRBNjRCRjM1RjI2N0FEOEJEQzhDQgorOjEwNDdBMDAwQ0NERkJCM0ZBODg4NzMyMjBGQ0QxMUU3QTkxRTVFNUU0OAorOjEwNDdCMDAwMzA5QjNFMjM1QTk3NzJDM0RENDkxNEQ3MkUxN0Y3MDQ1NgorOjEwNDdDMDAwNEM5N0NBMzlDRUZERTAwQzYxRTc2NDNCREIyRkE3RkRCNworOjEwNDdEMDAwMUZBQ0IwMDBEMUQ1RDlFMkRDMTQ2RUU3NzhCNUU2NDc1RQorOjEwNDdFMDAwODFCNDk5RkQwRUQ3MEYyRDZFM0FBRjFBMUZCRjc2OTY4MgorOjEwNDdGMDAwN0NDQ0RGQ0Q4M0Y0MEE3RkRGN0RCNkY4RjVCNzhENUIyNworOjEwNDgwMDAwMEY5OEYyOURFM0Q2Q0M4RjM1Q0YwREJGNDE3NTlFNDlGMQorOjEwNDgxMDAwOUY0NzI2Q0JFMjVDNjIwRjdBMkM5RTlGM0JBQUE3QTdGQworOjEwNDgyMDAwNDU3QTM5MTdFNTI0RkIyOUU2MUU1OUZEN0JENjU5RTU2MworOjEwNDgzMDAwNjIxRTI3RDk0Rjg1NTFCQUU4QTgyRUVFRjU1RURBOTRBQworOjEwNDg0MDAwREE2NzhFQzRFNjg1NTIyQ0VEM0M1RTRBRUQzRTdFQkVCNAorOjEwNDg1MDAwOUVDRTJGOTBDQ0IyNzg1OUFFM0U1RTg5RjIzOUMxNzhBNworOjEwNDg2MDAwRkJFQTgyODcwOTJFQkZBRUFCM0Q0QzcxRUE0OTk2NEVGQQorOjEwNDg3MDAwODlGRTlFRUJERTNBOTVFQjdCRUE5QUI4REM1NUQ3QzYwQgorOjEwNDg4MDAwRkRENkQ3NkRFMkYyQkVCQTEwM0ZCRkI3RUUzMUFFREY1NAorOjEwNDg5MDAwNUREN0NFRjVDNzczQzUzQzEzMkQyMTFFNjc1MjE3OEUwOQorOjEwNDhBMDAwMUZDMzBGNjU5RkUwM0MzMTc4MkU4REE4ODZGNjA5NkZGNworOjEwNDhCMDAwMzYxOURBOEIzQURCMENGNUJFRkU0RDg2RkU3RDY2ODQzQQorOjEwNDhDMDAwMENFRDZGOTUwNTAyNTM4QUU4NUNDMzYzODY3RUNFRkNDRgorOjEwNDhEMDAwNzY0M0ZENUNGRDg1MEJERDZGNjU0QUFBRTUxRkM4QUYxOQorOjEwNDhFMDAwODMwMjQ4NEY0ODY3RTlCNUIyQ0E3OUYzMUFDMTk3RkQwOAorOjEwNDhGMDAwNkJCRDYxQUE2RjcxRDk5OEJGNzVCQUU0MzNDQjI2QjE4RAorOjEwNDkwMDAwN0U1M0NDM0RCNTFEMkU3MTdFQjJBMUFGODhBNzM0RkM3RAorOjEwNDkxMDAwNENENEI3NjQ4OUYzOTFDM0FCNDQ3RUE0NjFBMEI4OTcyQgorOjEwNDkyMDAwNDRDRkMzNkY3MTY5Rjc5M0Y4QzQzRDFBODNGMjIzRkMzNworOjEwNDkzMDAwRERFRDIwRURFRkMxMzlDQjQ1RkVDQzBENkVDRUNGMzc4RQorOjEwNDk0MDAwRDQ4MUY2N0Q2Mjg0RjMxRDE5NjBGNjhBRkJENTE1OTkzMgorOjEwNDk1MDAwRkY5RTkyMDU0MkY1Mzg1RjQzQkU1QkJEODVFNDRDMzA1NworOjEwNDk2MDAwRDU2QkY2RjI5Rjk2MEQ5OTI5OEY0OEUyODk5MzMwRUQyOQorOjEwNDk3MDAwOUFERUQxRjJGMjQ5MUYwMDlGM0JFODg2Q0ZFN0UyN0I0NworOjEwNDk4MDAwODREQTJFQkVCN0E5N0Y2RDE3RTdFM0I2RkM0MkRDNjM3RAorOjEwNDk5MDAwMTMwRkQ3OEU1RjdDQzVGNzJBNkRGREQ5NTc1OUM0RDQ0NAorOjEwNDlBMDAwNUJCQkNGRUQ3NDI1QzU3RThGQjZBNTI2OTVFRjVCRDg5MgorOjEwNDlCMDAwNUE5QkNCRTcyOEI2RDY4OEVGOEQ2NTEwRkJEREIyQzhEMQorOjEwNDlDMDAwQzZFNzMwQjZENjlBQ0QyNDI3NEYyREIyMzA1Q0Y0RjUyOQorOjEwNDlEMDAwQzdDRkFCN0ZCRkI5NEUzQkQ3NzNBRjc2QUU2N0FENzY2RgorOjEwNDlFMDAwQ0VFQTZFRUQ1QzRGQjM3NkNFNkE4RDc2M0U3NjE1OUQzRgorOjEwNDlGMDAwRUJCMTEzM0NDNUI5OUVBREI1MEIxNEVEM0NBQjdFMkZBRQorOjEwNEEwMDAwMDNDMzU3NDJGOEYyNzcyQTU2RDg2QjFBMDdGNDg3MEM3QgorOjEwNEExMDAwMTk2RUYxREZDNzY2NTQyNUM3OURFNzMxOUVCNzRBRjU4OQorOjEwNEEyMDAwMEQzMEQ0OURGOUM2RjM1NkM5NDM0NzE5Q0ZBOTBFMzRBQQorOjEwNEEzMDAwOUVFRkIxNzk4Q0U3N0EyQ0NFNEFFM0Y5RDA1OEZBNDQ0QworOjEwNEE0MDAwNjA5QTU2NkNBQzI3RkM3N0ZGN0Q0NzdBRDg4RkZGN0U0MworOjEwNEE1MDAwNUMzN0ZEODZGNDczNDAxMjlENDM0OTYzN0FDREFDMTJGNgorOjEwNEE2MDAwRjQ5OUExN0QwRkUzODY0RTJFNTM5MTVFQTg3NDUyOUU1OQorOjEwNEE3MDAwNURBMjczOTAyQUQzNTFGNEZCMzdBNTU3N0EzQURGQkY3MgorOjEwNEE4MDAwMDcyMEFENENGQ0Y3MDBGNDczMDg3RkQxRUNBOEE1NTNDOAorOjEwNEE5MDAwOTQ0RkE3MTQ0NUU3QkI3RjhBNzIzQ0I2QUU5NzNEQzlEOQorOjEwNEFBMDAwODVGRkFERjJGRjAxQzE4Q0UzMkIwMDgwMDAwMDAwMDAwOAorOjEwNEFCMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJCNTU1Q0Y0QjFCNDFCOQorOjEwNEFDMDAwMTRGRUIyQkJEMTQ0QTM1OTM0QjY4NjVBNDgxQTUyMERDQgorOjEwNEFEMDAwQTRCMDZEMzdBMjI1RDJENTg2OTI4M0M4MTYzQzc4RTg1QgorOjEwNEFFMDAwMjE4NzlDRkFFMzU4RTg2RDYzNUI5MDRBMjRBOTQyMkYyMgorOjEwNEFGMDAwNTJDOEMxMUUwQTgyMUVGQzAzNjIxQjdBOEU2ODBCNTJDQQorOjEwNEIwMDAwMjlDMThBRTc0MDVCN0ExMUQyMzc5M0FDODk5QkM0N0E3QQorOjEwNEIxMDAwRTk0MEYyRjI2NkU2RkRGOEJFRjdFNkU1MEQ2ODc5ODE1OAorOjEwNEIyMDAwOTBBMkREMTM3RDQwMjQ1QTJBMzg0ODA2NTQ2OEI5MzBEMworOjEwNEIzMDAwMzA1MzI0RTlBMkZEQjVBQTk0MzU5MTE0QzBBOTA5NUNBQgorOjEwNEI0MDAwOUFCQTFFMkY0OTEyRDlDOTE2M0JGREQ0Q0VDRUVGOEQ4RAorOjEwNEI1MDAwMzFCQjAxMjYyNTJFQUYxRjM5MDAwRkIwMTVCM0U1MTY2NgorOjEwNEI2MDAwRkRDMEMyMEU5REFCQzBFRjMxNUIwRTdFOTZEQzQ5QTU0OQorOjEwNEI3MDAwMzJDQTREMDE5MTdENjlCRERFNEJDMDJDRkI0OUYxN0FGMworOjEwNEI4MDAwQzczRDAzMDlGMjlGMzE4MEZDMzBCQkYzRDBDRDc0NTc5MQorOjEwNEI5MDAwMzQzQkU1QTMzQzQyN0I0NTQ4RTQyRjUyODREQzA3ODY0NgorOjEwNEJBMDAwQUZBQzgxRjZFN0FGREUxNzI1OEFGQjYxMDlCODRDRkI5NQorOjEwNEJCMDAwMEJGNjUyRUMxMUREREIxQUVGOTQ1RjI4Q0NDRkI0RkQ3RAorOjEwNEJDMDAwMjk5RENGNUMxMTIxMzI1REI3MUY5NjI4NTVEODYwQUI2NworOjEwNEJEMDAwNUMyMzdFQTI1MjU1QTc1NUExQ0YwMzM0RTg5NEY3MEM2RAorOjEwNEJFMDAwRDM0N0VBQkFGQjI0MzAyOTUzNUVDRjBGRkMxQjg1OTFEMworOjEwNEJGMDAwQkE1RDgwNTI2MUZCQjdCNTFFQ0Y3MTM3NkQ4NDEwQUFDNAorOjEwNEMwMDAwODg3NTFDMTVCNkVFMzZDQjNGODY2RkEzNjA2NzM4MjFEQQorOjEwNEMxMDAwMzBCRUQ0M0QyMUU3QTczOEJENUY5NkJCMTgzRUIxQTg5MgorOjEwNEMyMDAwOEIyNUIyNDc4QzUwOEYxM0NFM0RERDhENzNGQzdENjc5NQorOjEwNEMzMDAwRkM3NTAyMDc4NjgzQ0JBMjIxNzNCOTY1MEM3Mjc5NkM2RgorOjEwNEM0MDAwRjhCODNDMzI0NkI4M0MzNDE0MkU0QkM2MTg5NzQwOEEwQworOjEwNEM1MDAwRDdCM0QzMDYxRTJGNjNDNDc3NjNDMUY2RjE2NDVCNTlFMworOjEwNEM2MDAwNjc3NUM3ODQ4NEY3QUNDRTQzMkFCNzZCQkExNzI1M0Y2NAorOjEwNEM3MDAwMEQ3QzExNURCQzE5MEEzRDZGMjc5OUZEQkIyNzAyOEY4MgorOjEwNEM4MDAwQjkxQURERjRFQUUxNjZGQkQ1Njc1M0U3RTI0RTFCNzMyMAorOjEwNEM5MDAwQkJBRkVDRURDRjVEMUQ0ODZDQjZGMEZCQjJENkM3NDBBNAorOjEwNENBMDAwOTZFNzExODgwQjU4QTQzQ0JDMEVDNTI5RDNGREY0QjY3OQorOjEwNENCMDAwOTNGNzc1NDg3MUU0OUMwQ0RGOUEwQjNGNEMxQ0Q0M0Y3MgorOjEwNENDMDAwQ0I2OTZBMTk4MjlDRDUyNDk5N0FFQUQ0NkY4RjQyRjkwQworOjEwNENEMDAwMzRGNDU1NjBGQUUzMjBBQjY3N0EyMjNGQTgxMzhFRDVFRgorOjEwNENFMDAwOUI5RkU3ODZDOTJFQjUyMzIyODhFNkJDNUU2QjM2OUU2NQorOjEwNENGMDAwOTc4OTJCMjAyOTgyREMwMjdGM0I1QzhGNkJGNjE4RjJCMAorOjEwNEQwMDAwRjBCOTYwRTVERjdBREZBQzNCQURCNDM0NUE3QkEyQjRENgorOjEwNEQxMDAwMTI1RDg5OEM0Njc1RDJENjZEOUMwN0E3MEZGQzdENzdGNgorOjEwNEQyMDAwNDBDQjMzQkMxN0M4MEZCODQzM0NFNzIzODk5NEFCOUVGNAorOjEwNEQzMDAwNEZCQjNBOTk3OTc0RDdGQUNGOUIyQzNCMTI4NDZGRjkwOQorOjEwNEQ0MDAwMUY3REQ4NjcyRjNBNThCRDk2OTI0MjNDRDcyMjhGRjVFNworOjEwNEQ1MDAwREE5QzVCNTI2RjM5RDk3QjQ0Qjg3NTFFRkQ3MTZCOUYyRAorOjEwNEQ2MDAwNTZGMzU5OTFDODNGOUI0RjJBRjk2RkMxRjczN0M2Nzc2MQorOjEwNEQ3MDAwQjU5RkY3NDVBQTZCNDYxMzdDQUM5RkZCODkxQjhENDIwMAorOjEwNEQ4MDAwRjU0NzkwNEIxMTZGRDlBOEEwRTRFOUZDOTdEQUExNzAyMAorOjEwNEQ5MDAwRjc5NkY5RDAxNDVGNkRFOEEzNkJDRDczNjc1QjczNTUxRAorOjEwNERBMDAwRTc0RDEwNDEzNjZGN0UwRUNEQkFGMzJERUE2QjRBOTM3NAorOjEwNERCMDAwNDc3M0VFMzRGMzU4QUVFMjRDNTY3MTIyRENGQTNERDcxRAorOjEwNERDMDAwRUIzNTVGMUJFQTQ4ODg2N0ZCRTZFQjc5N0REMzhFN0Y4NgorOjEwNEREMDAwNkIxRkFDMjQ3NTc3OUVGRTFGRjA2OTFGQkUxQjhDOEY2NgorOjEwNERFMDAwQjNFRkFGMUQ2RjU2OUU4RUZGMzM0RkQ2RjNBMjM5NTdFOAorOjEwNERGMDAwMkU4OEYzQTJGNzRDRkQyRkRCQTc5MEE2RjAwNzAwMDA0QQorOjEwNEUwMDAwMDAwMDAwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDBGMAorOjEwNEUxMDAwMDAwQkZCNTFDRkMwRjAwMzA5NzdGM0EwRjJCRkEzRjE2MQorOjEwNEUyMDAwNTdGMUEzRjJDQkI4NTFGOTlFNjhGQzI2MzRGREU3RDFDNworOjEwNEUzMDAwRTQ1OTE4MjBCNDIzM0JBQTM4QjE1ODk4ODM4MTQxMEUxNQorOjEwNEU0MDAwODgzNTM5NTBDNUYzQTFFNkQ2MDAyREU4MDdFMjE1QUM0OAorOjEwNEU1MDAwODRDRDdBMjdDNUMwRjA1Rjk2ODFFMTI4OTBBRTA2RTI0NgorOjEwNEU2MDAwNEI0MDM2OTMxQzAzMDNBRjM0MDM4MzA3MTA0NzAzRjExMQorOjEwNEU3MDAwM0IxOTA2ODZBOTQwRkEyNTEwNkY5MDg2RThFMzA0OEE1QworOjEwNEU4MDAwOUQ5NDIxQ0ZGRDZENDJFNEU5MUJDNUQ0QzFCNzk1NTA3NworOjEwNEU5MDAwRjk5M0I1MTkxOEFFRTkzMDMwQThFOTQxRjhFNzkxRTQ4MworOjEwNEVBMDAwOUQ4MDYyNTNCNDIxRUM3MDU1MDY4NkJEQkEwQzBDODcwOAorOjEwNEVCMDAwOTVCMDlCMUIwMTk0REYwNzk0OEZEMEMzNkZCRjgzMTEwNAorOjEwNEVDMDAwMkE3RkFCMzUyQUZGOEIyMTJBRkZCMjI3MkFCRkQ2MUJBOAorOjEwNEVEMDAwOTU1RkVBMDNBMTAxMzU3MjBDRDZEODAzMDAwMDAwMDBFQgorOjEwNEVFMDAwMDAwMDAwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDAxMAorOjEwNEVGMDAwMDAwQkNEN0QwQjdDMTVFNTk1Rjg5OUM3OUQzQkY3OTk4NworOjEwNEYwMDAwNDk3MjAzMTcwODMwODk0MUEyMDYxQzIwNDA0MEM0NDk1OQorOjEwNEYxMDAwMDgxQTZDOEExN0E0NEE1REFBNTc2QTJEMjI4RjJCNjI0MQorOjEwNEYyMDAwNEQ1RDZCMjZFRkYwQjA4REU4NTZGRTZBRjVDMjZBOTdDQworOjEwNEYzMDAwNUFBREQxRDI5NkI2REEyNjgwMkVCNjE0MjJBNUQ2QjZCMAorOjEwNEY0MDAwRUNCRjQxNUQ2RDU5NjVBMzVCRDRCNUI0RUM3N0NFMzc0QQorOjEwNEY1MDAwOTNDQzVDNkUxRUY2RjFCMzcxQkJDMzM3RjMzRENFNzdENQorOjEwNEY2MDAwQkU3M0NFNzc1RURGNzcxNUQxMDdGQTI1MDA2N0YwOEYyNQorOjEwNEY3MDAwM0RDRjE3MDE2MEU2QzAzMzVBMDFBNTcyMzlDMDI2MjEyMgorOjEwNEY4MDAwNjg4NDhCRDhGMzRGRDJGMkNFMzBGQjA2NTY3Q0U5OTQ3RQorOjEwNEY5MDAwODE3NjU3ODM0MEY1OUYyRjZBOERGN0IyRUZFRDkzQkU3MAorOjEwNEZBMDAwMUE4NzMyNTY3RkJDNDBGNTlEN0FDRUYzMDY5MDAwMEFGMAorOjEwNEZCMDAwMDA0QTNBNTZBQTA5RDZDRkE2MzE4RDJBRDY2RkQ3Qjc1RQorOjEwNEZDMDAwMkQwNzM2REVBOTEyMDUyNDFDQUYyODdCRkJENjdBODA3QworOjEwNEZEMDAwQUVDOTAwOTdDMDU2QjUzOEM2Q0E0NzI1NjMzMzY0MUJBRgorOjEwNEZFMDAwQTc4OEM2NzFDQUZFQjgwODVEQTU0MDdGNjdEOEZGMzY5RQorOjEwNEZGMDAwN0QyOTA5MDkzNjZFQ0JBNEFGMkU0N0I4OTVBRTlCNDBFQworOjEwNTAwMDAwOEYwMERDMzYyNjA5M0E3QjNGMEQ0NDlBOTc1MjYxODEyNgorOjEwNTAxMDAwQzlDQUFBNkVDNUFEMjk2NzhGRDM4RTc4MjlDMzVFM0JGNgorOjEwNTAyMDAwRTI0QjIzMDNFRjk3Mzg3ODYxRjhDOEMwMEJDMDVDMDBFRgorOjEwNTAzMDAwMERBNjc3NTk1ODBFMDBCNUNGRUNEN0I0QzdEN0UyMjNFOQorOjEwNTA0MDAwMUJGRkVDRjlGM0YxQTc4MjRFNzgwMEI1MjM5RTg4MEM4NAorOjEwNTA1MDAwQzBCM0M5RDdENzI1MzE3QzVCNDU2MDNDQzZBQUU0QjA1NAorOjEwNTA2MDAwNzEyQTVERkQ2NDhFRDczRjRGQjlDM0IzRkU1MzEwQ0U5NgorOjEwNTA3MDAwMDI5QTg3MjBCQkZBQ0I4NDY3OTY1RDZGMTY5QjM5M0VGOAorOjEwNTA4MDAwOUQ3OUU1Q0NFM0UzMENEN0ZGRTU4OEUyMDJBQ0RGMTFDNAorOjEwNTA5MDAwQjcyMjJFN0E5NDJEMEZERTgzNzY3RENERjRENjFCMENBRAorOjEwNTBBMDAwM0YyMUM0Q0Y0Q0M0OEYxNTQ3N0E3NEU4NTgwQUVCMERFMgorOjEwNTBCMDAwMzU2QzNFMDUxNkY0NDlCOTQ0MzYyNjhDMDJDOEM3N0ZDNAorOjEwNTBDMDAwQjEyNkIyQTY1NzIyQkQ4RTMyNTk1REY2N0Q3NENDNkFFOAorOjEwNTBEMDAwOTBEOEZCMzFGM0QyODJDQzlFMTE3ODQ4N0IyMzA0MDgxMAorOjEwNTBFMDAwNERDOTE5NkE2NDcxQkFFRjlDRDFERUNCRThGNjE0NDQ1RAorOjEwNTBGMDAwM0EzNkIzNjc5M0NDRkE0NUJDMUQ4QkE0MUY2MzIwMzVBOQorOjEwNTEwMDAwNUM5QzdBQTQ5Nzk1MjM5NjBDOERFNTM0MkVGMUUxRUQwNQorOjEwNTExMDAwRDJGOUM2NjY0NkQyOUI2REZBNkZBRjU3RTlEOTVBQUYzRQorOjEwNTEyMDAwNDE5NzFGQTBCOTNFNEVDRkZCNDM3N0ZEMUJGNjVGNjc0QgorOjEwNTEzMDAwRjkzNTNGN0JDQTlEQjczRTg1RTUyNjgwMDQ4RTE3ODlFOQorOjEwNTE0MDAwRjFGRTQxNTZCNUM3MzQyQzgzODk3ODhGOTRGMEU3NEIzNAorOjEwNTE1MDAwODgxNzA2RTc1NzE5MjYxMTJGM0ZCMEYxQTQ0MzE3RjExRQorOjEwNTE2MDAwNkI5M0IxMzQwN0IyRTBEMzc5ODY0QUJEN0MxNkQwODMwNQorOjEwNTE3MDAwQUNFNTQwRDkxRkNGRjM5NDdEREE1ODRGN0Q4MDQyQzIxMQorOjEwNTE4MDAwMUI5NTk5QTg1ODI1NzA3OTE0OTE3QkMwNDAzODE5QkU5OQorOjEwNTE5MDAwQjJDQTA1NUJBRTQ4RDJCNEJFMkUzNkJGRjA2Q0M1RDhERAorOjEwNTFBMDAwQzk5QURFMkQ3OEY5NkI4Q0MwRTlBMzRDNTBFOTE5ODNCQworOjEwNTFCMDAwQkU3RDY3MTAyRjg2OThERUNDQzYwQTRFMkJFRUVDOEE5OQorOjEwNTFDMDAwRTE5ODhBMzE4OUFENjNEMDk3RDZGMkIyRjAxNzk0Q0JDQgorOjEwNTFEMDAwNkZGNTNBNzAxNzdGRkNGODkxQTRFRTU0MjJDQkI4N0Y5QworOjEwNTFFMDAwQjBEN0VGOTJEMzg3NTVFNDdGNzU5QTk4NDg5NzIxQkM0MgorOjEwNTFGMDAwNTY4MjREMUVCNkVBQjI4OEYzRkVGOEUwMUU3QUJEOEVFNgorOjEwNTIwMDAwREJGQ0RDMEEyQUQ1OTc3MUJEQ0EwN0Q2QUJERDYwRUJBMworOjEwNTIxMDAwODVGQzUzQ0VEN0FCNURCNkQ0OTFBQ0Q3RTMwMDFFQkNCMgorOjEwNTIyMDAwODRGQUYxRDJDOUYxNTJGNjMxRTNBNTY5RUZGMjQ0OTY1RQorOjEwNTIzMDAwNzlCNERBRUIyOTgzNjE5NDEyMUUxNDFERTFEQ0RBQzAyMworOjEwNTI0MDAwRTlENjYyNzQ5QjRERkUwRTg2MDcyOUU3NTgzQzU5NzZENQorOjEwNTI1MDAwMzZERUFGMTJGODM4MEI2QzNFNzFGMEI0QzkxMDZCRDI2OQorOjEwNTI2MDAwNjFDNDUzNDcwRENBQURBRDI1QTI4ODcyRTlFM0MyOTM2QworOjEwNTI3MDAwMDNEN0U2N0VCOEQyMUNBRUQyOEYxNzJFMjlENEI1M0MwOAorOjEwNTI4MDAwMUIzRkI2NjZGMEUzMTY4NDlCRDM1RDBEQTczQkYxNjMyRAorOjEwNTI5MDAwQTUzQjA3QUUwMEYyMDM1RkU3MDQ1RjY3RjkxRjYyOUQ1RAorOjEwNTJBMDAwNUJGQkQ3MzlDOUQ3MzlGRUYxQUNCM0IzOUY4MzZBMkMwNgorOjEwNTJCMDAwQzc3NTVCQTUzMTNFNjQ3MERDMkM1OUNBRjVCOEJGODY1MgorOjEwNTJDMDAwMDQ3OENDNjA3NDgwRjA4RjYxN0E2NkI4RjE2NTVEMDcxMAorOjEwNTJEMDAwQjg0RjA4NzA3RDQzNUE5MTkzNzRDMUJCNEE2NjNBQ0I2QworOjEwNTJFMDAwNzQ3Q0JGRjVEQ0U0MTBGMzgwQjRBRkFGRDc4MTkzRjFFOQorOjEwNTJGMDAwNkZEREIxODZCNkZEMkUzOEJGMjQ0NDYyMDRFNzZDOTg5QQorOjEwNTMwMDAwOEQ3MEJFMUI1RTlBRDMwNTgzRjc3N0EyNUU2RDkwN0Q4QworOjEwNTMxMDAwMDBFRkQ3NUI2REZCN0Q2NzdGQkY1OTgyNTQzNkZERjI4RQorOjEwNTMyMDAwNDE1QjJFODBEQUE5RDBGQ0VGNjQzQzM4MERGMTcwNkU0MQorOjEwNTMzMDAwMzU0NEQ5N0E4NDFCNDdFMTNDMjBDQzNFQ0U2MUZERUM1QworOjEwNTM0MDAwMEEzNEM4MkVGQzBFMzY5RjdFQkMzQUVEOThCQUUzQ0ZFNQorOjEwNTM1MDAwM0JCQkZENjBFRDNFMTQ5MjhGMDgwQ0JGMkQzMUIxMUE5RQorOjEwNTM2MDAwRTE1MjRCMjA4RDZCRTBERkI1QTQ2QjJDMEMwRTZGNEIyNAorOjEwNTM3MDAwRUM2RjAzRUZBMEVCNjZENzdCMzdEQ0Q4MEFBQzVEOTMwQworOjEwNTM4MDAwQ0YzOEEwMzMzQTY5MkUxMDhENDYxODgwQzNBMTE3NjcxNQorOjEwNTM5MDAwNUQxQzNDOEU3NDVEN0VEQjRGNUY1QjJGMDVEMjMzNDExRAorOjEwNTNBMDAwOTdBNkZERjU3NDc1MDBFOUVBODJCRjNGNURCREYxOEZGOAorOjEwNTNCMDAwNEI1NzI3ODQ4MjdGNUNCQTUyRUEyNEZENzU2NjY3MTRENgorOjEwNTNDMDAwQzkyNjk3OTNEQTRBOEJENjFGQzc2NjcyNDlFQTk4RDZFMAorOjEwNTNEMDAwODVGMjEyRTJDQzNFRTNDMzgwQzhDQThBNjY3MkJEMTc2QQorOjEwNTNFMDAwMEM0MEZENTUyREYxQ0E0OTVGQTE1NzRFQzY5NzlCNURGNAorOjEwNTNGMDAwNEVCRjlCNzUxQzU3QTE3MUQxM0NDMjcxRTUzMDc0MDUzRAorOjEwNTQwMDAwQTI1ODU2QTgxRjI0RTczM0U3MzAzQ0MxODMzNUM1QkNGQQorOjEwNTQxMDAwOUQ4MUVEMDY5QjhGOENFREQ4NzhBODdFOUMyOUMyNzY2NQorOjEwNTQyMDAwRkY5NDkzQzg2MkY3MEVDQ0RGM0I0RTdDNTkyMjI3MTFDNAorOjEwNTQzMDAwMTk3OTdEMDhDQkZBMUIyRUJDMEZERTRFODYzNzFDQkNCQgorOjEwNTQ0MDAwMzBGQTJGNDUzRjQ5QzEwMEZFQ0Q1REI3OTBGRjIyMDBFNQorOjEwNTQ1MDAwQTI0MTc2NUQ2MUFCODU1RkRCRjBGRkNEQzE3RDlGRjMzRgorOjEwNTQ2MDAwNzU1QkUxNzQwREY1MkQ2MEZCMERCRUI3ODQyRjAwOTZDMgorOjEwNTQ3MDAwM0YxNDc0RTI1QjY3M0MyOTlDMDBBMjFCQkJERTcwRUIwRgorOjEwNTQ4MDAwN0YzQkYyNTMxNkZFNUUyMTcyN0RFM0ZEQkI1MkZGOEQyMgorOjEwNTQ5MDAwRjZBMEI1NTlEMDFGNjM3ODNENTRGRjAxQkNDNkY4NzIyMQorOjEwNTRBMDAwNjVENzc5MEFGQTNEQUUxMzQ3NTFCRDk1RjM4QTk0MDU0NQorOjEwNTRCMDAwQUU3RTU2MDJCNzBCMDE3QUU1MjUxMUY3QjgwRDVDMEZFOQorOjEwNTRDMDAwRUQ5NEY2RTJCQzVGQUQ5MEQyQjhGRkJENUFGMTNGQTRCNworOjEwNTREMDAwOUZCRjZBNEE2OTQ0RjJBQkVENTdFNjBDMjU3NzBFRDVCQgorOjEwNTRFMDAwNzM3QkQ2QTk3N0M4OTQ2ODdGM0YyNEY3ODZCM0U5RjEyOAorOjEwNTRGMDAwMDNFM0E3NjlGQzJCMkEyNEVGM0UyREY3Q0FCOEZFRUY4MQorOjEwNTUwMDAwN0YwOTdDQTgzRjFGQUE1Nzg1RDcyNjMxRTMxN0U3QzkzMworOjEwNTUxMDAwRTg2ODY1NDU5MTgyN0U4N0UxRTZCNUM4RjY4MzM5Rjg4QgorOjEwNTUyMDAwNzVFNkQ5MUMxNjY5OUVDREUxMkFGMjVCMzU2QkVGOTJDOAorOjEwNTUzMDAwRkQ3ODhBQkQ0Nzc5MzAxOEJDOEVERkFBNTk1QjlBMTU3MQorOjEwNTU0MDAwMUY0QTg0RUI1QjhBMkY5OUREREVCNEU3RUI5NDMzRkREMQorOjEwNTU1MDAwNTkwRTdDQUQ2MTZFMTdCNTg2Mzk1Q0FEMzEzMThERkM2RAorOjEwNTU2MDAwREYxQUNGM0VBRUYzNkNCMkUxNzNFQTM1QzdCODVFREE0QworOjEwNTU3MDAwQ0NFNEM5NDhFMDkxQzM1RTc4MThEQThFQTBCRjY0QkM2MQorOjEwNTU4MDAwMkQ2QkYyNkI3QjFBM0U4Rjc2NzYzMjZDNEEwNkJFRTk0MworOjEwNTU5MDAwMTEyNkIwRjJCOEI4MDQ5QjM1MzY2RTRENTU3QjM1NjM5NQorOjEwNTVBMDAwODFCQzE1ODkxNzE5MTgzMDFBM0EyQUQxMEYzOEYxNEJENgorOjEwNTVCMDAwMUJCQkJGQzZFNjM1NkU4RTVGQzM3Njc5MzVBOUVFRTdCNQorOjEwNTVDMDAwNThCQkIxNENDQzQ5QUNEREU4NjM2QkQ3QTI5Q0ZEMTc0RQorOjEwNTVEMDAwQjQxMzUxMTA1QjM3MzZBMDFGQUIxOTg3OTgwQkYwQjA4RQorOjEwNTVFMDAwQjhBMjEyRkQ2QzMyNzBCOUMwQTQ5RTJFOEY0MkZGMEM3RgorOjEwNTVGMDAwOTA3MzY2MzBGOUMwRkU4NDMzRkU4MTc2ODNFMTJENjJCQworOjEwNTYwMDAwQ0IyQjlBMzdDOUFCQTU0M0NCQUI4REJDN0Y4QkZEODcyQQorOjEwNTYxMDAwRjI2NkRDQzA3OEQ0N0VDQzJBQzU4M0M3RDExOURGRjcwNworOjEwNTYyMDAwREI3NEU5ODcyNTdGRDc3MUM2QzJEMjAwRUEyNzkxNjU2RQorOjEwNTYzMDAwQTI5NkM2RkFEMDk5OEI3RUE4NTE2QjY0RThDMkVGRTVCQQorOjEwNTY0MDAwMUQwRDRDN0MwQzhCNzcyNkY3NkFCOERGMzgyOTJDNzEzRQorOjEwNTY1MDAwQzFGQjJCOTFGQjk5MjZEQzcxNTQxMEQwRUY2QjMwOTU3OAorOjEwNTY2MDAwN0UxQTk2RUJBNjY1QTNEMzZEMzY3REY2OTc2QjU2MEEyOAorOjEwNTY3MDAwNDkxQTJGQjE2ODEyQ0FCNTVBOTFFQ0RFN0Y1OTM2M0RFRQorOjEwNTY4MDAwRDdEREZFMDM3QjlDODFGNTA3NUQ5RTg1NjVCRUZFRjIzRQorOjEwNTY5MDAwMzJEMTBDNENGRENCRDc1RkZFODhFQjlGQkY1MUYxRUNCNAorOjEwNTZBMDAwQTcxRjc1NUQ2NEI0M0QwQTg2NUZGRkJGNzYxQzY3REQ4QQorOjEwNTZCMDAwQ0VFNjBGMkUxRjI3REM1MTFENDBGOTc3NUY2MjY4QjlENworOjEwNTZDMDAwNzJGNkJBMkRBNTc1MUJCNTBDQ0M3NDE2QjkxMjkwMDRFMAorOjEwNTZEMDAwQ0ZCRUVBM0M1NTQ4ODFDMUQ2NTkzQTJBOTE3QzkzNDZCRgorOjEwNTZFMDAwQ0Y1QUJFMDMwNjFGNTc4QTI5MTlGNjlCREQ5RjY1RUUyOAorOjEwNTZGMDAwMkI2MUVCRkY0OTcwRkU3QTY0OTQ0M0I1Mjg4NzUwMkVFNgorOjEwNTcwMDAwOTVGQjVFNzdGQjQ3MThDNjA3Q0EwQ0Y3NkY3RjcxREYwMgorOjEwNTcxMDAwN0U5NDQ3MTY5MzQ3RTgzRkNERkM1RThCNjUxNzNENUM1MgorOjEwNTcyMDAwMkFGMUZENzdFRjc3N0U3OUFFQzBDNjM5NkNGODc1M0YwOAorOjEwNTczMDAwN0I3NTUwRTg3OTgzRkNCRTk1MTJFREM3MDg5RjNBMEI0NAorOjEwNTc0MDAwREIwMzI5Mjc4NzREQzlBQzY2RjU3QkNBMDVEQTQ3RkQxRgorOjEwNTc1MDAwRjBEMkI1RkY0Q0VENDMxNEVGRTg5OUY3REE5NzJGNjJEQQorOjEwNTc2MDAwRUQzRjc5QjEwRjM5ODc2MzAyREJDN0Q5M0Y1MUFGMzlCQworOjEwNTc3MDAwRERGQkU1OEI1OEZEODMxN0U3MEZBOTZGRDVFMjdDNUQ1NAorOjEwNTc4MDAwNzQ3MkM1QjNERUYyMEFBNDM3ODRGRjNGREVBQzdEOTBBRAorOjEwNTc5MDAwOEQ3NzE4NzIxMjdFN0M1NjcwRjgwRTIzN0M0OEY3QkQwOAorOjEwNTdBMDAwQkY3RTAzRjVDMjQzQTY0MEZFQThDMzE1M0Y4RkExM0RBRgorOjEwNTdCMDAwNUU2OTBBQTQyRjJFOUUyN0E0RkQ1OUU2Qjk3OERFMkQzNgorOjEwNTdDMDAwMTMyN0IwRkUxMjQ2NDgwQkIwRUYwNzJCREZEOTdBMTEzMgorOjEwNTdEMDAwODNGNzhBRUY0Qjc3RTNGM0U0MUVBOTIwNTkzNjM4QkNGMAorOjEwNTdFMDAwQ0VGQjJCNENFRkZCN0VCRDE4OTIxNkUyMUQzNDFFOTdBQworOjEwNTdGMDAwRjBDNThDQjg5QjVFRkJGNTE4Mzk2MTY2RjNCN0FEOTFDNworOjEwNTgwMDAwQjhGRjUxRDAwQ0QyRUZFNEIwMDIzODhGQzFFQURGMzhENAorOjEwNTgxMDAwMDhGREU2NDA1Rjk3ODQ3MDM4RkFGN0U5MkI3NUI3M0NDRQorOjEwNTgyMDAwNzRFMDUwRTQ0NDEyQzc5MTM0MDU3NkEyOUU5MTdCOTVCMgorOjEwNTgzMDAwRUU5RTdGQkRDNEUzNDI0MkRDMjQ3ODE0OERDM0EzQzgyRQorOjEwNTg0MDAwODY5OUNEREY1NDY3QzNFM0Y0MDNEMDYxQjdFRjgzREVGRAorOjEwNTg1MDAwRjAwMDdDMkQ4MUM0NzJGNDVCNThCOURDN0ZEODFDRjE1OAorOjEwNTg2MDAwRkEwMzc3REJGRDNDRTZGNEU3ODNBQzcxMTU4MDQ2RUE4QQorOjEwNTg3MDAwQkY2QTU0ODU4QUZEMzc1NTcwM0Q0OTA3ODNGQ0UzQ0RFNworOjEwNTg4MDAwQ0M2RTg0MjFGNEJBQURCNkJDRDg4Q0YxMEQzRkM2MzlDQworOjEwNTg5MDAwMzQzQkNFMTFFN0ZBNTNGODE5RjI5MzlEMkExM0M5QUU5RgorOjEwNThBMDAwMTlBQzlGODhFMUQ1NDc0MkE1NUUzQkM2RDE1RjAyN0ExRAorOjEwNThCMDAwNUU4NjFGQzhFQkY3RjE4RDkyNDU0N0VGNDM3QTFEMEVDOAorOjEwNThDMDAwRkU3RTNEQ0ZBRUQ3MjZBNzU0MkQyQjlFRDI0M0VBNzM0MgorOjEwNThEMDAwN0YzRkZDRjFGNjIxNUZBNzk2MERBRUJGMTVERTFDQkEyNworOjEwNThFMDAwQ0FFQzVGQzk1NzUyNjk4QURCMjVFMjFFN0RDMDk2OTNEOAorOjEwNThGMDAwNEFCRTlBQzI3RDAxRDRDMUJFMDc3OUZCMzBGQjhFRjE0RQorOjEwNTkwMDAwOEM3MDQyNDc3RjhBMDQzQzJFQTQyMjFGQjhGMEYzOEU4RAorOjEwNTkxMDAwRERFRTFBNTlCNEY1RjkxNEM1NDEwNTNENDU3RTNCQjU5OAorOjEwNTkyMDAwOTBGMThGNzA3NjNCRTdEOTZCQjc2RkZCRDNBREFGMTBCQgorOjEwNTkzMDAwN0YxNEE4QzQxRjgyQ0VGODI3Q0IzODhEOTJGOTk2QzQ2NQorOjEwNTk0MDAwOUVFQjI0RjM2RDdDRkFGRTJDMjVCM0YxQzk3RkQ5NzI0RQorOjEwNTk1MDAwNDVBRDRERTg2QTMxQzUxNUM5MUVDOTg0MjMyMEYzN0VDMworOjEwNTk2MDAwNkY3NEUwQjc1MjE0QTcxQzI5RkMxRjhDMTA3RTY3MUNCMworOjEwNTk3MDAwMDZCRjJDMTcxMEZDM0U3QzBFMDZCRjY0QzM5MzA3N0E0QgorOjEwNTk4MDAwODM4QzcyNERFN0YyMTU2MDg5RUVENjRCNkU5MEI5QkNGMAorOjEwNTk5MDAwQzhCM0U1MTNDMDJENzFCN0JENzU5REREQ0Y0OEU3OTM0MgorOjEwNTlBMDAwMjc4RjZDM0VDRUI4NkMzRTEzNjRCRTFFMTNFNTIxRDYyNQorOjEwNTlCMDAwNjNCQzBEQzcwRDMyREZFRkQ0RUE4NDFFNjdFQjkyM0I2OAorOjEwNTlDMDAwMDg1RENEQjNFMTQ4QzlBMkFENTdEQ0YyOTFFOEVBODJBNworOjEwNTlEMDAwMTFDRTYzREVDMEJBQ0NCNkQ3QTU2MkE4NzlDQ0IyRTc0NworOjEwNTlFMDAwRDEyMUMxOUNENzUxMkYzRUM3RjFGNzJDRjVBQ0NCNkQxRgorOjEwNTlGMDAwMzY3RTNBRkNDRUJBNkNGMEFDQ0JDREY2QkM0NjNBOUZDNAorOjEwNUEwMDAwODU3NjdGQzNDREU3QjY4MTc1NTk2MkNGNjdFOTUwRjNEQworOjEwNUExMDAwNzFENUJGREFBRUJGRENBRTRGNzZDNzZENzI2OTIzREFERgorOjEwNUEyMDAwMTk4RDUyNjI4NTVDMzAzMDFFQUJGNzE5NzdCRDc3OUFCRAorOjEwNUEzMDAwNEUzNUQ4RjVBRUM3Rjc0MjBEREZGRjU4QkQ5NUVFN0E2QgorOjEwNUE0MDAwNjA0NTFCRDEzRkQwODJCNjAyQjM2MzRBOUFFNzU2RDk2QworOjEwNUE1MDAwRUQ1NjUxQkJEQUZFRkU2RkIyRjk4M0RBMDU5QTg1NDY0MAorOjEwNUE2MDAwMkI0Q0Y1RDY2MkJEODYwNTdGNzZFQUFERjNDMjdCODEwRAorOjEwNUE3MDAwMDNFRjA2ODJCN0JBMUY4RTVCRERGNUU2QzlFM0E4QkY2OAorOjEwNUE4MDAwQjNFMjBFMjNGNDA3Rjk2MkM5NzY4Q0YzRTc0MUE0MDM2RAorOjEwNUE5MDAwRjMzQzVBRTVENDIzOTgwNzYwNTkzMjNDODZGOTA0N0VEQQorOjEwNUFBMDAwNDM0MDFGNUJCNDIyRjU2RjU4MkZENzYyRjYzNUFFNUJDQgorOjEwNUFCMDAwNTVFQTI5MkM1QjIyMjQ5QUNBMjk5RjgwRjIwNUVBNjRDMAorOjEwNUFDMDAwNTVGMzFCOTg3RjYxQzA3NjU2RDY2MjcyMUFFREYzMTZCNQorOjEwNUFEMDAwMjE2OUUxQkVGODMzMjlGOTY1OTlFNEFCQjZBMjAxRkI2RgorOjEwNUFFMDAwQ0ZEN0I5OUUwRUJEQjQ2RjM5NzBERDEzQkE5NkYyMUZEMQorOjEwNUFGMDAwNzIxOTVDRTg4RjZBQzk4MEVCRkVEMDg0NkVEQzZGRUZCMAorOjEwNUIwMDAwMkQ1MDQ4NEY2NjA2NTYyOUNBOTdEQkE1QTA4MUZENzUyMgorOjEwNUIxMDAwMTc3QzgxRTBEREQ2QzBGMzFCQjY3REYyMEIwNEVGN0Q3MAorOjEwNUIyMDAwMDI1MERDRjYzRTFGQ0Y2RkI4QzdBNzZBOEQxQUY2MTc3MgorOjEwNUIzMDAwMURGMzM5Q0E4N0M4RDFGQ0U1MzYxQzA4REYyNzhBMDk1RQorOjEwNUI0MDAwQkU3Q0QwMkE2RjEwNDg3Qzc1QTM3RERCNTJBMTkwQkUyRAorOjEwNUI1MDAwQkMyRDM2QkQ5MkZBQUI1MDQ5NEZCRDJGMzFCRDgxRjRGQgorOjEwNUI2MDAwOEU4QTIwRjlFOEYzQzMwNkQ5QUREMUQ5MEE1ODU4OEVFOAorOjEwNUI3MDAwMTkwREE4Njc0NjY2MDUzMTA3MDZGMjBCMDE5MzBCMjA0NQorOjEwNUI4MDAwMzIxOUQyNThGNjQxNDc0NzA5N0I0NkRCOTk1RDkyNEY1RgorOjEwNUI5MDAwNzYxM0RDODA3NjZGMDVDMzNCREExMTk2NzkwNEVEOTJCQgorOjEwNUJBMDAwMzBEODdGRDI0MTEzRTdFRDFCMjcwMUZBM0Q5Q0Y1OEREQworOjEwNUJCMDAwNzZGNEI3MUZEMkVFOEFBNjQ3NThBRjZCNjRGNTIyRUQ5NAorOjEwNUJDMDAwQ0NFRTlGMzE4MjdBMUQyM0FDOTcxRTYxQkQyRTVFNkY5NQorOjEwNUJEMDAwNTg3Rjg3QzFFRDNEOTVGRDg3NzY1QjIwRDM2RTBFN0JBOAorOjEwNUJFMDAwRUQ2MTVGQzZGN0NDNzg1Q0U2MzMzMzFFNzI0MkY2QzZEMQorOjEwNUJGMDAwNDM4NjZCRUZDNDQxODY5QjJGM0EyNUZBRTE5NDg2QUYyQQorOjEwNUMwMDAwRUZFODlCODM3RDU3QzY1RTE1Mzc1OUZCOTYzMUQ3QzRBNQorOjEwNUMxMDAwNDlBRThENTlDMTlGRTNFREY3RTM5N0RCRTU2QkVDRjJGRAorOjEwNUMyMDAwOEFFNTY2MTZGOTNFREFDN0U1NzAyOUZBNDM4NkYyM0I0MworOjEwNUMzMDAwMDBENzFGREY2MEIwOUYxMTMwNzk2OTY4RkY0OUE2REU4OQorOjEwNUM0MDAwOUIyOUVGNTREOUFBNDI3RUREOTZFMDdFNEQzRjMyMjM1OAorOjEwNUM1MDAwRjI2MTIxOTAxRkQ2MDdBOThFMTI5NDEzNjA0NjE3OEUwOQorOjEwNUM2MDAwMUFFMDFGOUZGOTgyODlGQzdDNjg4QzA0NDIwNUFEOEY4NQorOjEwNUM3MDAwNDFGRUY0MEMzQUM5QTQwQjdGODYzRkU3QUZBNTkzMEIxNgorOjEwNUM4MDAwN0RERTc4RUNERjhBNEU5NDc2Njk0NEZDQTM3NDhDQjA5OAorOjEwNUM5MDAwNUU3QTg0RjVCQTQ2NTZDRkRGMkU4Q0FDNUVDNzA4RUIzMQorOjEwNUNBMDAwQTU0NzU4QUY4QkQ3NkI5REEzRjBGRDFDQkVEQjY4OTY1NAorOjEwNUNCMDAwMzBCOEU3QUE5RTcyRUJEQ0EwRjdGQjQ1NjE0RkI5NkRFNworOjEwNUNDMDAwQTY0MkZCQkY1M0Y2Q0Y1MjNERTUzNjI2RTczRERGNjdFMAorOjEwNUNEMDAwODdBOUJDQTlBNUFCOEE2RDY1MjNFNjkzRkZGQzBCRjlFOAorOjEwNUNFMDAwQTQ1NDFEQzYyRjVEMjE2NkQ4NkQxOTdDQTVFQTAxNkNGMAorOjEwNUNGMDAwOUYyRkVCODBGOTUzRjkzMUJFNEZCMUE3OTlDRTgyREZDOAorOjEwNUQwMDAwNDc2Q0ZFREYyOUYzRkNDRDZEQjIxRTQwRkJGMTFGN0QxOQorOjEwNUQxMDAwOUUwRDNFMEVBRjMzREZFMUUwNzVFNEVGOUI5MkFENkY3OQorOjEwNUQyMDAwMEQ5NkY3NTFDREYzMzI2NTA4NTI1RTY2NDlCNTU5NjU1NworOjEwNUQzMDAwMzJCOTI0QkZDOEUzNjA5OUZENUVBQjI0OUZGNkI5RUM4RAorOjEwNUQ0MDAwNjE1OTRCRjJGODlFRERERkEyMDI5OUY0MTI5OUM5MzUzMAorOjEwNUQ1MDAwRDQ3QjE0NDhENDE0NTExQzUxMjQ3RjlGMUMxRTY2REYzMQorOjEwNUQ2MDAwMjg3NEM5QURFMjIxRTBCNkYzNThFOTkzMEU1MEY5M0IyRgorOjEwNUQ3MDAwM0U2RUQwMDA5MkFGMTFFODI1NjMzQTA3QjU5RTczNTA4RQorOjEwNUQ4MDAwNEZEMzA1QTBGNjg2QzBGREU3RjMzNERDRjc2MjgxQkY5MAorOjEwNUQ5MDAwNzVCRjJCQTg1RkMxQkMwN0NFODQzRTQyQkY3MjJGRjlFRQorOjEwNURBMDAwM0JGRkU2RkQwRTAzNkYwMEYzN0IyRkEwMTA0MkNDOUQ1RQorOjEwNURCMDAwREZFQjhCQTdFODI1OUMzRTczNDY5QTA1QkMwOUZEMjVDMQorOjEwNURDMDAwMjlCRTJFOEIwNkY5NDM2MTZDOTRFQ0IyOTZEODA2RDVBOQorOjEwNUREMDAwQkRBRTdGRjQxNTdCRkMyNjhBRDY3QThCMTA2NUNGQzJDOAorOjEwNURFMDAwMzU2NkVGMTA3NDdFMDY4MzMxRTgxRjI5QkNDMUVDMURCNworOjEwNURGMDAwNjIzRkVEOEY2NzYyQkMzRTBCMUZCNDJBQzkzNEVBRUZFNQorOjEwNUUwMDAwRDY4NDMwQjdFN0U1MTRGOTE5REI4NEJDRTk5QkNCNUQ5OAorOjEwNUUxMDAwRjQ1QkE4NzQyMTVDOTE3MkQzNDI3QkFGMkQ1RjM0NTA0OAorOjEwNUUyMDAwNEY5NTYxNkI4RjMwOTVCNTkzNkE4RDY0MTYzRDYyQTA3NgorOjEwNUUzMDAwQkQ3Q0MyM0Q5Rjk4RTJENUE3OUE4NkExRjc5NjYxRjRGMgorOjEwNUU0MDAwMUU5RjYyMjRCM0Y5NDMyNzJCRENBRUY1MDVCMzdGQkY1OQorOjEwNUU1MDAwNDNBQzJBNTE2NjlFOEQzN0E2RTY3M0ZCMzYxN0RBODU2QQorOjEwNUU2MDAwMEIzOUY5NTBCRTQzRTEwQkFGMjAxRTVBMEEyRThEMEY5RAorOjEwNUU3MDAwMzU1RkQwQkM3OTk3Mzc4QUU2MzQ2NTY4Mzg2NjY2ODNDMworOjEwNUU4MDAwNjNBNEY5MjA1QUI1NDE3NEQ4QUYyRkM1Mzg1REEzOUVERAorOjEwNUU5MDAwMjQ4Q0MyN0MwRkZFNzc3N0Y5Q0UyRUNDMDNGMTVEQ0YzOAorOjEwNUVBMDAwRTNCMjkyQjkwQkQwNEZFREU4NEQ5MjE5M0MyRUQyN0E2NQorOjEwNUVCMDAwQ0VFM0ZBNTMyOUQ3ODc0Q0Y2MUZDRTIzM0E2RjY4QkQzRAorOjEwNUVDMDAwNUFDQTI4MkY1MUJDRkE1MDUzRkQxRUMwRjhCQzAzQkY1QworOjEwNUVEMDAwRTNDN0NCOUNENzVDQjFFQUVBRUNGODE4OTkzRDdDMUY4QworOjEwNUVFMDAwQTMxNzk4OENGMTI4MTU5MTAyMURGNTFBOTVCRjVDMUYxOAorOjEwNUVGMDAwQTdGMkQ2N0E5RDlFQ0RGNUE1RjREQzgyNERFNzIwOUZEMgorOjEwNUYwMDAwQTdEQThCMThERURBRTM4RkM2M0ZDN0FBREM4N0IyODMzNQorOjEwNUYxMDAwRjZGRDZCMTdBMDlFQkNCOUJGQ0NDQzQwMDZGNzY2MEM1MworOjEwNUYyMDAwNzgzMzNERTI1NkU1OEEwNTY4QkY2RjBFODBFRDU3NTgxRAorOjEwNUYzMDAwQjBDMEY0OTRBRjZBQUFDNEIyRUQ2N0Q4REM3QTFERDVCQworOjEwNUY0MDAwQkY2RjNDRDhFNzIwNENGNTUzQUU3REVGMTFDNTQ3RkM0MQorOjEwNUY1MDAwOEQ3QjBCNkY2RjM2NjE3RjAxRDkyRUMzMkQwQkJDNjUxNgorOjEwNUY2MDAwMzAxMTlFODBDQUNCRkI5NDBERDQzRjg5MDAzNkRFNEZBMgorOjEwNUY3MDAwOTU1QkY5Nzg5M0I4MUYxRkNBOTYwRTgzNDdFRUQ3MDczMworOjEwNUY4MDAwNDVFN0YyQjMyQzhGRjI1OTE0QzM0MEY3MkJEQzk3NkIyMworOjEwNUY5MDAwQzMzREQyN0VFNDI0REZFRjhFNjZERjJGMDdGODY2OThEQworOjEwNUZBMDAwN0RDRDg2NjNCOEY1NjdFOEIwRkQxMDQ5QjA3MERDNUY2MQorOjEwNUZCMDAwRjAzOEUyREY3QkRDRkI3QzFGMEQyRjRBNDU5Rjg1RTczNQorOjEwNUZDMDAwNDdFNjI5QzlFRjIxQkQ0N0NDQ0VBRTIyNTY4RUQ2NzYwNAorOjEwNUZEMDAwNTlDNEJFMjMxQ0Y3NUU0NUIzRTc5RDI0RkU3N0YwRUM2MQorOjEwNUZFMDAwRTgxREZGRTVGM0FFQTMyRjY2NTIxRTUyMjBDQ0Y5NkZEOQorOjEwNUZGMDAwQTRGMEY2QTI3RTM1NzNBMDFGNzhBMjZBQ0M1MEZBNUE5QworOjEwNjAwMDAwNDE0MjQ0MjVBQzVGNUVFNEQ3MDREMTE4RUIyRkU3OUFGOAorOjEwNjAxMDAwNzk5RTcyNEVDNTU4NEZGRDg4NTFFQ0Y5RUVEM0NFRjdGQworOjEwNjAyMDAwN0NGRjRCRDdFOTE3MTlGM0Y4ODlBRDM3M0FFNTFGNjdCRAorOjEwNjAzMDAwQ0U3Mzg0RkQzQUU1RUVERTA1NjIyOTVCODc5NzZCMjUxQQorOjEwNjA0MDAwRDJFRjVFQUU3REVEQkUxOTU4NEU0ODE0QkYzREI1QkNEMworOjEwNjA1MDAwQzk4NzhDNzQxNENDQzg0Q0Y0ODcyNTI1REI5RjZFOEVDMQorOjEwNjA2MDAwNDc3Q0ZFMDJGRkM5QzY3QjA5RjczRDI2OUYwRURCRTc5MgorOjEwNjA3MDAwN0Y5ODlDMTg4RkU3OUYwRTVGM0M3QjNDQUVFQjYxMUZDNworOjEwNjA4MDAwRTc2RkIwM0E0ODNFRkREQzA3MUU3OUYwNzM1QkZFMThGRgorOjEwNjA5MDAwNkREQjlCRDAwRjc5NTRFMDY1QTk2REZCMDI4QkUyODMyOQorOjEwNjBBMDAwNUI1QjJGNjM3QUNCOTUxQzg1QjBCNDU2Qzg2QTBGNDRFRQorOjEwNjBCMDAwRkMwQUUxRTM0MzIxMTlGMUIzNzk5QUQ1N0E0QjBDRjM0OQorOjEwNjBDMDAwREY3NDIwN0RENTBGMDlEMkNCRUFDMEFBMTQ1MURGNjE1RAorOjEwNjBEMDAwRjQ0NzcxNkVCOUFGMzA5QkRFRjE3MzdCM0ZGN0MzOTUyOAorOjEwNjBFMDAwQTRFRjJGQURDREY1QTEzMUVGQUY5OUU2NDMzRkVBOTU4RgorOjEwNjBGMDAwMzU5NTNFQjBGNTY1Q0QwNTlGOTgxMEU4RkNENEIyNUFCMQorOjEwNjEwMDAwRkY0RUM0RUIzMkQ5RjQ2NThCNkI1RDk5RjA3QkY2QTkzOQorOjEwNjExMDAwNjkwQzg3MDhGRjUxRkJEQzAzNDA1RkExM0JERTM0Q0RGNworOjEwNjEyMDAwQ0ZFRDlENzhDOUQwRjY4MjAzQjc1MzVFNTIzQkVENzkyRgorOjEwNjEzMDAwQzQwM0MzMzY5RDQ3MDFCNUFGRjBEQTg4QkJERjkwMTNDNworOjEwNjE0MDAwMTc4RTYwQkYyRjJGRkYyQ0RGOUYxOTVEQTA1RkYxQzU1OQorOjEwNjE1MDAwRTM5RkY3NTE1Qzc2NTlCRTg3RkY5NjU2NEIxRUY4MTNBNgorOjEwNjE2MDAwRjM0MjlFRjI1NUI1NTdFNjBDQTk3RjI0RkQxOUYyQ0NGNworOjEwNjE3MDAwQjJDRjYxOEEyNDg3MzcxRjEzNDgzRUU0NENFODRCNjM1MworOjEwNjE4MDAwOUUyNkJDMkMwMUQ3RkYxQ0ZGRUI1Q0YyQkY0NkM3RjU3NworOjEwNjE5MDAwRTlBODJGQzA2RjQzREE2MzJFRjlEOTZDRDNFNTYwRTMyOQorOjEwNjFBMDAwM0ZFN0U3N0FBRDlDNTc0M0YxRURGNzhGMEIzQUNFNTdCNworOjEwNjFCMDAwQzhBQjlCOENGMzk1MTVCMzExQzc2RDJFMTJEMzE4Rjc4RQorOjEwNjFDMDAwQkVCRDc4OUI4QUVCQkRBOUU0QTNFOTgxQkUxODhGRjcxOQorOjEwNjFEMDAwRUI5NjM2MUREOTdGQjA3NjY5OTM5RjIzQzg3Q0JGQzZFNgorOjEwNjFFMDAwQ0ZFMzJEMkRENjUyQUQwNDk3NzFCRjU2ODlGMzBGMTQwRQorOjEwNjFGMDAwNDJENjczQTY4Q0ZFRDdGOEQxNkYxRkIzODBDN0Q3MTNEMgorOjEwNjIwMDAwQTQ1Nzk3QTgyQjI5MEY1NzFFM0I3NEJDMzYxMzZGQjJBNworOjEwNjIxMDAwMUQwN0NDQUNGN0E0NEQ4RjI1MTUzQkE5REZGN0NGMUI4RAorOjEwNjIyMDAwQkE1RjA3MkYxRjE4MjJGNEQ4RkEwNEQ2NTc4MUNEODdGQQorOjEwNjIzMDAwRTE3RjRCMjlDRkMzNkQyRTdCODZGMDJDOTk5NUE0Q0Y5RgorOjEwNjI0MDAwRkFCNDk0ODlGNUI2OTRBRDI0QkE2QzYxNzVGMkQ5RDBEQworOjEwNjI1MDAwQjlENTlENzQ0RTczQ0I5Rjc4N0NFMkM5QjZGRDREQTgyRAorOjEwNjI2MDAwM0Y2Q0U5QkUwOTMwQUYzMjE4NEYwM0NBOEYyRDUzNkUxMQorOjEwNjI3MDAwNTQxMTBGNUI3NjAwRjQyMDFEQ0I5REU0OTQwQkQ5RkVFNgorOjEwNjI4MDAwRjA5MDA2Njk2NjQ5NDFBOENDMDQ5NDBCNzkxQTNGNTNGMworOjEwNjI5MDAwQjkzNzVFMDVCODZFNUJDQUMxNDBENkNDNEZBNzFBMzA3RAorOjEwNjJBMDAwRjRCMzI1Q0VFM0RGQzE1MkIzQTYwOEUxMUUyMzkyMTg1MgorOjEwNjJCMDAwRDAyMUQ5OEVFNUU2NUE5OUU2RDFBQTcxN0NBMERENzU4OAorOjEwNjJDMDAwQzZDOUVGQzIzQzk4MTI2RTc3OTVBMDdGOUZGNUFGN0M1MAorOjEwNjJEMDAwODlDRjVCREY1RTQyN0VBMjJEQjkyRjlCQThFRjVBOUYyQworOjEwNjJFMDAwMDQ2MzEyNzBCRDk2RjQwNDk5RDExMUY2NUZBNzY1NUQ0MQorOjEwNjJGMDAwRjdBRDYyRjI5QjdFNTdGQzVFRDY3NDAxRTkzNDEzM0YyMgorOjEwNjMwMDAwRUZGQkUwNzI5Qzc3RjMzNDExNzY2NkQxMzdGNkY4NzlCQgorOjEwNjMxMDAwQkMyRTZEMkNCREEyMzhDQjM4Q0ZGOTc1NEY5RTgwRkVCOAorOjEwNjMyMDAwODE0MjcwMEY1NjdGQTA5RTRDN0U3RDM0M0MxNkIxNzkyMQorOjEwNjMzMDAwMTRENDcwN0YyOTY0OUM2MzhENDE5MkVDREJEMTYwMzU2RAorOjEwNjM0MDAwMjAzRjNBRTc1N0M3NTUyNzdFOTU2NDRGMjlCMjhDRjIxNAorOjEwNjM1MDAwRTkwNjNCQ0ZFQUU0NzlBRUFDQjAwNTMyRTg1N0ZGODZGOAorOjEwNjM2MDAwQ0RGN0E2MDMzRTQwQkM1RDcyRkE5MTE3MzA1RkNBNTc2NQorOjEwNjM3MDAwRTFENzI4QkYwQTNBNUVDMEZDQ0QxQjk4M0E4NkU1OUI2MAorOjEwNjM4MDAwOEU0RDUxMzBGRkU3RTVCMTEyRTZDNjIwRkY0NDkxMEU3NQorOjEwNjM5MDAwREYwNjkxRjJDRkRFODYyM0QxMTkyRTNBN0ZDQkRFNzc0RQorOjEwNjNBMDAwNTBCMkEyMUM2OUNBRTVGMzkyQzNBRDNENTIxNEQ3NUQ0OQorOjEwNjNCMDAwQjY3QTlERkMzRDUyOTg3ODVFM0I4NEQ5N0I5NUIyOEYyRQorOjEwNjNDMDAwMUE0OEZFQjVGMzdDMjEyNzNGRjI3MzFEREVGQ0ExQ0ZGNgorOjEwNjNEMDAwNkZGNzk2NkY4NEE1QTM5MDZGNkU2NDBBNUQ5QUY1N0I0NAorOjEwNjNFMDAwOTMzQkVGOEI4RDdGRDRDRkY1ODNDRjQzQUExNUY3OUZENworOjEwNjNGMDAwMzYzQjNGNjZFREY3QTYyODQ4RDczN0NERDA4QUYwMUM0QworOjEwNjQwMDAwODYzMzhGM0ZGOEI5MUQ3QTgyRjFBOUVFRTJGRkQ1QjE0QworOjEwNjQxMDAwMzRFNTI3NjdDRUVGRURERDBCQkE5MkFDRkM5QTJFQTdFMAorOjEwNjQyMDAwQjg5REVEOUQ2NzlCQUY2NzMxRTY3QjU5NzdGQjZDQkRFRgorOjEwNjQzMDAwQzE5QkU3Qjg3QTU3QTU4OUY5NjIwQzdCN0FCRUI3M0Q1NAorOjEwNjQ0MDAwQzFGRkQ5NzZFRjdDODdDMzQ3RTZGQzFEN0Q3MEIwRjlBQworOjEwNjQ1MDAwMjhCQjg0QUNGOTdFMjFENTlCMkZENUE0RjI3OEEzRDk5MworOjEwNjQ2MDAwMjQ0MzYwRkVEOUU3QTNBREFBMTQ5RDZGQjYxQUZENUE2NgorOjEwNjQ3MDAwNTM4Q0UyOTMxNEZGQUI2Mzg0ODNGMUJENzI1NUE3N0UwNgorOjEwNjQ4MDAwREUwRjRDNDgwMzlENDM0OENENDZGREU4QUZFRDc3OEVDNworOjEwNjQ5MDAwQ0FGOUYwNkZEREVGRkM0MUUwNURBQkY2MkFDODlGRUI3NworOjEwNjRBMDAwRTU4RTFBQTE3OEUwN0M0MEMwNjc5OUUzMThCRUZEN0JCOQorOjEwNjRCMDAwOTY3NDhEMDM0RkJERjYxMUQ2M0I4MDQ3QTA0NzUwQUY3MQorOjEwNjRDMDAwNDYxQ0EyQkY5M0Y2QkVGNUVGNEZGQ0FCODJGQkY3REI5OQorOjEwNjREMDAwOEYxRjVGOEM3MkVFRTYxRjRBQTBCMjdBMjc5Rjg4NDAxQQorOjEwNjRFMDAwMTdFRDNCNjkwNUU1RjJFQUREMTJBRDNGQzg1REIzQUVERAorOjEwNjRGMDAwRjRFNERCMzdEMUZDNkY3RTJBNDJGQkMzRUE2N0ZDRTk5OAorOjEwNjUwMDAwNUFENjdFRjU3NzVGOUIwQThDNkY0RjM2RjZCRDMwMEVGQworOjEwNjUxMDAwRjFGN0I4QzBGMzE4QUNERUE5NTdCMkY3QUI2NUI4MkVFNworOjEwNjUyMDAwNUIxRUMyRjUyQUU3QUJCN0JFMUY1QThFRkJCQkIwQUJGMgorOjEwNjUzMDAwRkI1QUVBQjdGMzZBOUZERjI1N0Y5N0FCREM5RTY2RjVDRgorOjEwNjU0MDAwNENGQzZFN0Q0MzQ4NEYxMjM4N0NEOUYyRjJERUZBMDZERAorOjEwNjU1MDAwRjdBM0FDREVFMzRCNjM5RUUyRUE1RDNCOTQyNEFCQjc2QQorOjEwNjU2MDAwN0VENzNCNDRERjBCOUU3QTMyOEE3ODU4QkZDNzdCMUVBQQorOjEwNjU3MDAwRTFFNkE3RkVENDNBQjc5Q0NFM0JGNUQ1QTJGQzkzNEVGQworOjEwNjU4MDAwNTNGOTk0QTlGNkYxM0M3OEVFOEY1OTQ3MUNDQkVBN0Q3QworOjEwNjU5MDAwRkJDRDRCN0ZDM0JFOUY4ODRCMTA2MDIyRTU0NENGN0Y2RAorOjEwNjVBMDAwMkEzRkM0NzIzMjlDNjJBMjhDRjVFRjdCRDVDRDg3RUI3QgorOjEwNjVCMDAwNzdCRDQ2RTc4RTM0OTEyOUIwMTdFMTc5ODg4Q0VGMTlDMQorOjEwNjVDMDAwRjU5OTlFQUJBMDNDNUNERkI5RTkxRDk0OTdFQjc3QkZEMgorOjEwNjVEMDAwRkQ2QkE0QkJGNTIwQkZFQUU2RTcxM0Y4OEYzMTY3Qzc3MAorOjEwNjVFMDAwQjMzNkE5NUUzRkREMjkzODM4OEIxQzAwQkJGMkIzREEyNQorOjEwNjVGMDAwOEI0RTNDQ0JFMUVGOUI5RjNDRjUzMEVBMTE2RjNERjNCNgorOjEwNjYwMDAwNUYwRkUzRkQwQzZCRkVGQzNGMEY2MzVFMkJGQzI4QTBDRAorOjEwNjYxMDAwQTFEQzVBRkZGODJGQTJFMEMyRkZBM0I2N0MzOEY5OERBNworOjEwNjYyMDAwN0ZGQkZBMDMwQzBGMjc3RkU1MjdBQzlEN0NFRUNEMDk5RAorOjEwNjYzMDAwNzg0RkM3QzlBN0ZGNzcxNEVBMUYxQjlGNUIzODFBRTk3OQorOjEwNjY0MDAwNkNFMzc3MTY4QzFFRUExQzI4RDI2RERBRUY1RURGMzQxRAorOjEwNjY1MDAwQkZERjYwOEY4MDlCMjBDMEIzRjYzMzYzNURFMDYwOUYzNworOjEwNjY2MDAwODI3QUVGN0IwMkY0NkRDRTY1RUYzQkZGQTRBMEZFRjJEMQorOjEwNjY3MDAwODIwOTdEODhBNzdEQkI1RjdCRTEwRTU2N0U5QkFEOTMzMworOjEwNjY4MDAwM0ZDQjNBQjFGOThGMTM2OTdGNjNFQ0MzOUVFQjc2NUYyMgorOjEwNjY5MDAwNzlDNUM1RTVGOEY0MTlEOEZEN0FFOEEzN0RFM0FDRjUzMgorOjEwNjZBMDAwM0RDQUQ2Qjc3QzYwN0QzM0JGOUY4MkQzMEFFMjdGRkRBRgorOjEwNjZCMDAwMTM2QzNEQTdFMkJBQjJGNTlDN0FGNjdBQkU4REZGOThDQworOjEwNjZDMDAwNzNGNjdBRUU1M0JERkVCODUzQjBFNjkxMDdGMEUzRUVGMQorOjEwNjZEMDAwRkNBQ0Y2QURCMzlFNkJCRkYzQTkyMUY1NzI0NzNFMEMzRgorOjEwNjZFMDAwODc2NzNBREZDQkUwRkE4QTZBRkU1QzQ1QkU3REU2OUJBRgorOjEwNjZGMDAwNUY3RjIwQzZEN0I5OTYyMUU2RTQ5M0E3MjZFMDYxOEQ5NworOjEwNjcwMDAwREZGOUZBQUU0NTNDRjQzREU3RDc1MDhGNUFGRERDMkY1OAorOjEwNjcxMDAwODlFRjRFN0VFNzI1M0FEN0MzRkVBMjAyREJFRjRFNDI1OQorOjEwNjcyMDAwRkZERjExNjBFNTc1MDIyRkFDRDVGQjJFRkQzNUVCNzc1MQorOjEwNjczMDAwMkRFQkMyMzI2OEZEMkVGRDc1MzlBRTlGREE0N0VCOTEyNQorOjEwNjc0MDAwNUU1MkEzQTNGQzREMTdEMEJDRDdBNTM5N0ZBQzRCNzdDNQorOjEwNjc1MDAwMkY0MzdGNzYyNkRFMjMwMTI3OUY3MDYwNUREMTVGQkFDRAorOjEwNjc2MDAwNkVGN0YxNEI5MUZFMDY1QjRGNjdGRTFBQ0U3RjM2RkI0QworOjEwNjc3MDAwRkVBODk3N0YwN0U1NTc3QjdENEZFRTc4NUY0MUZEQUEyNgorOjEwNjc4MDAwRUI4NzhBMjYzMjNCRkZBNEFGNEYxOThCRkJDREQzOTIwOAorOjEwNjc5MDAwODZFNzhEMzNENzdEMDBGRjhENTlDRjFENjczRTMzRTlFNgorOjEwNjdBMDAwQzMxRkM4MUVCRjc2RjAzNDFDQkYwRjNGQkY4Rjg2QkYwQworOjEwNjdCMDAwNTNGNjNFOUM4OUM3Qjc0RTY3REYwRkNFMDk3MDdCNkVEQworOjEwNjdDMDAwMUQ3NEQ0QTA4QTk5Qjk5RkY5MjA2NThEMkIxQTgwQjdDMgorOjEwNjdEMDAwQjU1MzIyMzlGRkQ2MkVFRUE3Qzk5NDE3RUIwNkIxQ0ZEOQorOjEwNjdFMDAwQTYzOUUzRUNFOTlFOEE3MkVEQURCRERGQjdFOTkyRDMzRAorOjEwNjdGMDAwRkRCQTI3OEUyQjk2QkQzRkE0NURGODVEM0Y4OEJGRkI5OQorOjEwNjgwMDAwMjJCQkJGRjVDRjY2RUY2RkZEMTNFRjY0RURFRjg0NkMzNQorOjEwNjgxMDAwNUU4REYwOUZFOEYxNTE1RUQyODk0RTI5QUI5RDNCMjlGOAorOjEwNjgyMDAwRTBGM0U4NURBRDkxNTlBRkU0QjA3NjUyMzQ0ODc5NTc2MgorOjEwNjgzMDAwNEQ4REU2MkZEMTRGNkExREYxRDk3RTAwRTM3Nzk4NkYxOQorOjEwNjg0MDAwRDUxNDA5RDIzOUY3QTZFODhENzQ1RjkyRDM1RjczMDYyOQorOjEwNjg1MDAwOUVFNDc4ODJFQzI3Mzk5NjI4RTczMUIwQjRDNzhFRjFGMAorOjEwNjg2MDAwMzE4MjcwQzMwREIyNTU4ODdBRkZBMUEyMzc2NUVDRjc2QgorOjEwNjg3MDAwMzBFQTkxMkVCQkZFQjAwQzJERjlFNTc4MkU0MjMwMUE4RAorOjEwNjg4MDAwMjA4QjdGMjNBM0ZGQzQzQzA5NzRCNzlGQjA2QjhDRjhBNworOjEwNjg5MDAwMDdENkRFN0Y1NDRBMjM2QUVCMjBENTQ1RTcwMjBBQTFEQQorOjEwNjhBMDAwRjNCMTJDRkQzRDU0QUY5M0ZENUM5NEI4OEVGQzNGRkVEQworOjEwNjhCMDAwNTRDQTQ0N0RBRDcwQTM1NjJDRUE4MzhGM0IzRUU1OEREMAorOjEwNjhDMDAwNUY4RjY1OTRGRjA3MUNFNzgwOEZGNDQxRDhGNUY4RTNFQworOjEwNjhEMDAwOEY4RkUyNUIwQUVBRTUyRkUwOTNDOUJGNEI1NkU5ODU0QgorOjEwNjhFMDAwNTg3RUM4OUUzN0UzMDEzQUM3MzhERTRBQzgyOEU3ODQ5NQorOjEwNjhGMDAwRDgxMjE5RjU4Qjg1QTk4NEJDRDJCNTlFMEI2M0MyNThGQQorOjEwNjkwMDAwREM0RkQzODNEQzAzRjVCRDAwREYzRjFCMUFBRUEyM0M5NgorOjEwNjkxMDAwRjYwN0JGMjQxMjVEM0YxOEI4QUMxMEY5NkM3RkVFRUM5RgorOjEwNjkyMDAwMzBGQUQ3QkFEN0NFM0EzODk5QzEzOTJFMkMwMTlBOUM3MQorOjEwNjkzMDAwRkJDMjQzOUZEQjdDRDhGNjJGRUNCNEVGMUY3QUQ0Q0U5QQorOjEwNjk0MDAwMkZGRkJBOERCNzVERjVBNUY0N0NCQ0RFQTBFRjRGRDQ2OAorOjEwNjk1MDAwNTc1MEI5QjNCRTg2OUVDRkQ0MjdFODdERjQ4RTYwMTIxRgorOjEwNjk2MDAwRTk3Mzc3RkQ3MjdBM0YwRURFMTE3MEZEQkY1QjlGQTQ2NQorOjEwNjk3MDAwRjJBMzgxNUM4MjdGRTI5RDIwMjZEOUZCODU4ODhGRjA3RgorOjEwNjk4MDAwQzBCQzFENzhEMkI2RERGREJEQzA4RjlCOTEyRkZBRjE0MgorOjEwNjk5MDAwOTg4MUVGNEJBMDQ3NTBEMTdGMTUxMzc0NUNGN0JBODBGNAorOjEwNjlBMDAwQ0VGMzVDMzNGMDNCQzFERjI3NjA1Q0FFRUU0RTlFMEY1MgorOjEwNjlCMDAwRjFCMEUwM0RFRjcwQkYyREZGQkY2REYzRTkzQkQxRTRENworOjEwNjlDMDAwOTMwMUQ2Q0ZCQjM1Q0I0QTQ5MUYwMkFEMENFOUU2NjEzNgorOjEwNjlEMDAwMjE3MUQ4MjgyMjNDN0JDRTlEQUNDRTRCN0UzQkUwRjI5MQorOjEwNjlFMDAwMEY0RjY4RTc3NkZERjY4MDJEREYzNjgyODhGNDM2M0U1RAorOjEwNjlGMDAwMDUzQUQyOUIzM0VGQkQ5NTdBMjFDQUM1QkQ4MjQwRUJFMworOjEwNkEwMDAwOERGNDU2RUFBMkI3N0VGQTBERDg3OUM5RjFFQ0ZCRjhGRAorOjEwNkExMDAwMDBGRDcyRkU4RkNGMkRCREE3MUFGMUIyNDEyNDNGNDg3MQorOjEwNkEyMDAwMTM3RTcyQjVGQkQwQTYyMzY2Qjc4ODE2RDJGMzJBOTFERgorOjEwNkEzMDAwRkNCOTEzOEYxRDE3MjYzMEY4NzRFRDlCMDFCQ0I3MkJFMgorOjEwNkE0MDAwM0UwMTZDN0Y1MzY3MDBFOUVCQzE1NURDQkZGOEI1NjNDRAorOjEwNkE1MDAwRkMxQ0QzQTk4REM1NEIyNkIzRkE4QjE5N0UzMDE4OTUzMworOjEwNkE2MDAwQjdBOEM0RTNCNzc0Q0UyRjdDNEQ0REU0Njg0M0Y4QjdBNAorOjEwNkE3MDAwMzJGM0RFRUU5Rjc4RDcwNzM5NkM5QzcxQzc0MjNBOUU5RAorOjEwNkE4MDAwODdCOTY3RTI4RkJBMTU1NjFFREIyQjkwM0Y2OTZDMzhDOQorOjEwNkE5MDAwMzUxOUQ3QjNGMkZGN0Y2MzRDQUY2QjFEMUU1ODlCOUExRAorOjEwNkFBMDAwODg3QTYzRUJDNDZGMDlDODA3NjM0RkZGNThDMDdENjRFMQorOjEwNkFCMDAwQTI5NjdDMzNDMEQ2NjE5QzZDOUYxMzk2NTNCM0QxMkVBMworOjEwNkFDMDAwQjgyNjJGRjE3QjVDQjc0NDYxRkFEMzQ4NEZBNzZBMzZFQQorOjEwNkFEMDAwRkUzQkY2RUZDNDIxRUJFQUY0RENDOTJFRjk5MDc5OUU3NworOjEwNkFFMDAwRTJBMUQ0RDBGRTRDNjdGRTBGRTFGQzg3QThFN0NDREYyMworOjEwNkFGMDAwNTlCRjUzMzVCMTM1MjgxNzMzRjE5OUQ5NkZERUEyNjVFNworOjEwNkIwMDAwNDM4RUZGOTA3RDhGMTg5QkJGM0ZFOEEyQ0ZDMjU0QUY0QQorOjEwNkIxMDAwOENFRDlDRjY4M0M1NUQzM0U3REJFRjI3MUE2MTlDQjZFRAorOjEwNkIyMDAwRDMwN0Y5NDgxNzRGRkY3MUMyQjcwRjAzOTI0RTQyNDI4NQorOjEwNkIzMDAwRkZENERFNDA3MjRDNzAyNkRFMUY5N0EyMzI5MzhFOTRGMworOjEwNkI0MDAwQ0Y3RTQxMkVFN0RGMDc0NjdEN0QwQ0YxOUQ5QzJFQTI3NgorOjEwNkI1MDAwQkM4RjExOEVENzAyODk0NDI1RUU3Mzg2Njg2NERCMDdFQgorOjEwNkI2MDAwQTYwNDM5RERDRjgzMTRGOTQ3QzVEMDlENDNDN0Y5MEI3RgorOjEwNkI3MDAwQkQ3MUZFQUQ0MDkzMDBBQjRCQjVFMzFGMjA2QkU4MEYzQQorOjEwNkI4MDAwM0IwMEQzRDEwRjk5MUZFNEZDNUUyOTczRkI3MkM2MDE1MQorOjEwNkI5MDAwN0Q4N0M0RkQ1NkQyOTI4ODBCN0ZCNkRGQ0VDN0JCNjYxOQorOjEwNkJBMDAwNzBERjA5OUE4RUU3QkVBNjc1MEIyRTdFN0QzRjk0OUMwMgorOjEwNkJCMDAwOEZFQkE2QzRCOTNGRDIxNzRCRDI3OUNCODU1MjU4MjQ1QworOjEwNkJDMDAwN0Y2RTA3OTdGRjc1OTA1MENGRTM3MTE5QzA3OUVCMTA3NgorOjEwNkJEMDAwMTc3MUJGN0Y2ODIzM0ZERkFFNkIyMTgyRkJBMTk4NEUwOAorOjEwNkJFMDAwRTUzQTVCNEZGOUIxNEQ0N0RGQjdFNUZFRjc2QzdBRjk0RgorOjEwNkJGMDAwMEVDQTdERjYyQ0U5MzVGN0U3MzBCOEJFNkRDQkZGQTc5RQorOjEwNkMwMDAwNkRGOUZGOTQyREZGNjcxRUVEODU2Rjk0OTMzQzM2MzAzMAorOjEwNkMxMDAwRUZGOUNCREJFMjhEMzhDRDI3RUI0REFBQjdCMzdFMTU2QworOjEwNkMyMDAwM0RGN0U1OEUxNkY3QjA3QThGNkUxNDc3MjIzRjNGQUFCNAorOjEwNkMzMDAwOERCRTFDRUZCQjRBOUJBMjIxQjBDNjBGNTlEQjE2NDQ4OAorOjEwNkM0MDAwMTlGQzNCNTQ4MUUyNjcwRkQ3QTdBOEREMEU1NTZGNTQ5RQorOjEwNkM1MDAwMzE5RUMyQUM2NTBCQzlBMEFFODdDMjFFOTVCRkVCRDNGNworOjEwNkM2MDAwNkE1OEJEQUY3NUU0NUQ4RTcxQjg3QjZCNjQ2QUU3RjBGRQorOjEwNkM3MDAwOTEzRTczMDMzNjg3Njg5RTNGODg2Qzk1NTdEMEE1OUVEQQorOjEwNkM4MDAwODM3NkZBNDY5MUZBRjk0QUUwMzNFQTAyRjYxQzNGRkVBRgorOjEwNkM5MDAwODg3QTk5OEU4QjcxREM0Q0IxRUYwQjE4OTI3MTFFMTVBRQorOjEwNkNBMDAwQkRCRDE2OTY0QjVFMEY1M0JFRjZBQzU3N0FFMTY5NTZFMgorOjEwNkNCMDAwMkU1QTE1QTFGMjc4Q0JDQjE3NTM3NkY3NUExRDBDOEVBRQorOjEwNkNDMDAwRjE2RkYxRUZENTc5QkZCNzNBNTlGRDlDMEQ1MUVBQUY5RAorOjEwNkNEMDAwRUFGNTVFMDFFOUQ5NTdFRTNEN0ZCNURERjdBQjdEMTFGMQorOjEwNkNFMDAwMzY3RUVDNjA0MjQwQkNFRDE1QjQwNTk4MTI2MjdEOUE4OAorOjEwNkNGMDAwOUZCRjE5N0QwMEFBRjA3RDNDQkE4OEQ2NjE1QkIwODg0MQorOjEwNkQwMDAwRThFNzZCQ0Q0N0UyMzcyMTlFMzZDNjlBRDFDQ0Q5Qjc5QQorOjEwNkQxMDAwNzEwMzlENEZGMDZGRENDOEY1QTAxNEY3N0Y4RkJGNkQzNgorOjEwNkQyMDAwQkZGMDc5OTc3QzI4NkM5NkIzRkFFREI2MDVGRDNDNEUyMgorOjEwNkQzMDAwQjI3MTU5NjIzMjA3NkY3RjE4RjVCRDEyRUVBRjJDNkEzRgorOjEwNkQ0MDAwQTlGNkU0MzUzOUYxOTEwRjg1RTRCNjIwRDk0RDNDNEVEMgorOjEwNkQ1MDAwMjI2QjI5N0E3RkIxODRCQTIyN0I3REJCQzhGNUE0NDQxQgorOjEwNkQ2MDAwNEZDMEVEODdEMTZGRTNGN0IzNjVDMkIxMzMyODEzMUM3MQorOjEwNkQ3MDAwQ0Q1NkY1MkE5NDE3NzdDRjU0RTQwMEMyMzFEOUJFOUY3RgorOjEwNkQ4MDAwQzU4RTQzRjZFRjYzNDI3MjY3RDBFM0I3RTc3MDhENjc1NQorOjEwNkQ5MDAwQTgwQzIxREM1RDNEOUZFRTY0RkQ3QzkwNzJGNjMxMzNFMgorOjEwNkRBMDAwNDg3QUQyM0QyMkYxQzdENjcyN0UwRTcwOUZGMTZFMTdERgorOjEwNkRCMDAwREU3M0UxRjA1MzhCMjExMkZGNkU5Mzg1QjRDMEZBRDlENAorOjEwNkRDMDAwNTY1RTlDN0IxRUQyNEYwQzc3NkY5QUFGOEE3ODJFOTFCRAorOjEwNkREMDAwN0QzQzg3MDNDQ0JERTgxN0Y3QTM1RjlDQUQ3N0M5QjFCNQorOjEwNkRFMDAwRDA3MTkxRkM3RkRFRkNFRjIyQ0JCQkZFNjI5REY3REMxNQorOjEwNkRGMDAwREQ3OEE2RjRCOEYzOTU4MTExNEQzRjlERDFGRTVBQkRDMworOjEwNkUwMDAwRjczRjkwMUY5Njg3ODhDRUMwMzJBMzk1QTMzMDdERDFERgorOjEwNkUxMDAwRkU5MzZBRTlGQzczNDlDNjM5ODMwNzZDRkJGRDYxRkI4RAorOjEwNkUyMDAwMUMyMTlDQkUwNTUwNkUzRDYwOUZCRjdFNjA4RDE4RDRCNgorOjEwNkUzMDAwMTk1RTlFQjc4RUQwQkUzOUJFQUVBQjkyMDIzMzlBREZEQQorOjEwNkU0MDAwOTM1RkVEQkY1MzZCQzRGREI1MjhFNUNEMTNBQUNDQzg0NQorOjEwNkU1MDAwMEIyQUY5MkJGM0FDOEYwNUJENzZFQURFMTM0MTAzRUY2NQorOjEwNkU2MDAwQzM0QjFGOTUwQ0Q0NjdCRjdDQzcwQzkyN0ZENjZBQUUwQworOjEwNkU3MDAwQjdBNDU3RTUzRDgwRTc1REYyMDUzMEYwQkREM0FGNjNDMQorOjEwNkU4MDAwQkZCRTFCQ0MyM0JFNDlDRjYxREY3Mzk4NUM4OTc0MkVEMworOjEwNkU5MDAwNUE4NUVCMDUzOTVBNjMwQ0NGNDNERjBFREZDMkZFNTcyQworOjEwNkVBMDAwRjFGNUFGMkMwNEJBNUZBNzMwMDY3NENFOTkzRDM3OUYzOQorOjEwNkVCMDAwOEJGQ0JGNTFDNDk4Mzg5QzQxMzk4RjcyNUNFRDc5MTFCRAorOjEwNkVDMDAwREZFNzVFMkVEMkZEMzk0NUNERDY3OTM4Q0ZCRDczQzcwOQorOjEwNkVEMDAwOEU0NUZBRDgxQUU2RTc1RTlBODQxNDY4MDg2RjAxRTdDRgorOjEwNkVFMDAwODcxRDkxMkVDQTA3QkRCQjQ2ODQ0NkE0Mjg4NjRCMDM0NgorOjEwNkVGMDAwRkI1OTE5REM0OTc5MkMwOEVGNENBMjNCRDJCQjMwNDYzOAorOjEwNkYwMDAwODFGQzY4NUQxRkU0RkJDRTY5RUIzQ0Y0MkI0NzQzQkQ3RAorOjEwNkYxMDAwOURGQjU4M0ZFMTM2QzVEOEM5RkFEOTUxRTlCREE3NkVFNgorOjEwNkYyMDAwNTI4OEVGNzc4MTkwRTBDNEY3MDMyMUY2MzRCNzAyRTU4OQorOjEwNkYzMDAwMkRCMkI5MTA3RjMzQkVCMjgwRjYwNThERUMyQTI3QkU4NAorOjEwNkY0MDAwMUZEREJCNDgyQzlBQzI5RkM1MkVGRURENjlDQkQ5QjQ4QworOjEwNkY1MDAwOURCN0YwQjBCRDdGMzhGQUM2MDNCNkREQjBENURFMzdEOQorOjEwNkY2MDAwOEFDQzJCMUExNUE0REI1NTMwMERGMTU0QjJBNjUzNTgxOAorOjEwNkY3MDAwOTlDREJFNkZGN0NBRDU0QzdFOTk5OEM5MkYyOUVGMzlBNAorOjEwNkY4MDAwRDU3MUFCOEEzRERGMjNDNkY5OUVFRjE0OEFDMTc1NjdDMAorOjEwNkY5MDAwRkIzN0UyQjkyRDUwMjZBMURFMzcwMzEyQTY1QkFFMENGQgorOjEwNkZBMDAwQjZGRkU3MDdDREE5QTE4RkEwRkY0NDQzODkxNEVBOUY0QworOjEwNkZCMDAwOTlGQUY3NDVGNkJBNUMxQjQ4Q0NDMUY1ODhDRTVENEUxMAorOjEwNkZDMDAwNzkzQzZCMDM4OThCQTg3RjM5MkRBMDNDOUQ4N0VENjJBRQorOjEwNkZEMDAwNTlFMUE1RTRBRjExQzA1QkZENTFFMDA1RDlBMEYzNUMxOAorOjEwNkZFMDAwQjc0QkNFN0RCNkRFRjM1QzkwNzE3RjZERTZGREI0RjNGQQorOjEwNkZGMDAwRkY3ODI3REQ0RkRCMjIzMDQ1MEZDQjM5RjZGREI0N0UxRAorOjEwNzAwMDAwN0UzRjZENEI4NERCNUQyRDc2MUVENTNBMUIwRkQ3ODVGOQorOjEwNzAxMDAwRjg3REFGNkI2QzNBOUQxRkNBN0VGRjkxRTNGNzRBQTFFMgorOjEwNzAyMDAwNkNDMDdBQTNCM0RGM0I4NjFBMTVGNjM3N0Y1Q0Y2RUZBOAorOjEwNzAzMDAwQTkxMDhGM0JDRTlGMzhGNDM4MUI3MDFDRDZDRkFDQTA2NAorOjEwNzA0MDAwQjkzNkU0RjJBRkNDMDg5OUVCRERFNTVCNDM3NjdFOTE4RgorOjEwNzA1MDAwOUMyMEJERDI5NEY5N0U1ODE0MzQzNzg2NjZCQUYwNkIwMgorOjEwNzA2MDAwM0ZGMzE2OTVEMzc5QkU1M0Y2NzkzRUQ2NkVCQjQwNzg4MgorOjEwNzA3MDAwOTVCNDkxRTBEREQxRkY1QjA0RkQxRTkyODNCRjYwN0E4MQorOjEwNzA4MDAwNUY5NkY1NzgzRjE4QjVDNDlDODE3ODk0QTMxRkVEMEFFQworOjEwNzA5MDAwNzE3QjkyRDFEQjI2M0U4RjM0RTU0MTg3NDFCRjA3RUZGQworOjEwNzBBMDAwODExODg3Rjc3MEVCRTg1NzM4RjZGMEJGQTJCQ0JEQjg3RgorOjEwNzBCMDAwQTcwNkY1QTdCNTNGOTBFODdFQkJCM0YwQjU4NkQxOUQ5NgorOjEwNzBDMDAwMkIxRkM1NzkzRkY2ODM3MTY0MDc0Rjk0OTJGNzg3NUM1NQorOjEwNzBEMDAwRjZDN0Q4NTU3RDBBRDIzQkMyNUZDREUxRTdGOUQzNDI2RQorOjEwNzBFMDAwRkEzQzZFMEYwMEM1NzE1QTZFOEE3QkYyMDkzM0VEOTEzRQorOjEwNzBGMDAwM0NCQ0U3ODBFNDhBNDI3QTVEMjY1QzhFM0RFMTk0MzNCNQorOjEwNzEwMDAwQ0YyMzFDQjJFOTA4RkZGNDUxNzg0RjM4NzA2NTU2MzYyQQorOjEwNzExMDAwMjVFNEFGOTk5MEE0RTc2Q0QwRTlDOUVDOTY0RTlDMDdBMgorOjEwNzEyMDAwRTMzRjFERTE2QzBDNERCODA4RTdGMTc3QzREQjhGNDJGQgorOjEwNzEzMDAwMzNGRkYxRjBFNkQwNzE1MUYyOTI3RTNBQ0U3NkZGRjU1MAorOjEwNzE0MDAwRkRBMTI4QzlEQkJBNjMxMUQyRkJBMzdCQkY0ODc0MkQxNAorOjEwNzE1MDAwMzFCQTBFQzQwNkYyNjVFQUMwQ0VBMzBGNDMyN0VBQkREQQorOjEwNzE2MDAwNDVDOTdBM0ExNzdBOEFEMTMxRjYyQjY5RkMxQ0FCMENFNworOjEwNzE3MDAwNUEwMkUzMzY1MjhDRjM4NzRGMkVENTQ0MERFM0IyOTY3NAorOjEwNzE4MDAwMUZGMzBFQUM2MjMwNTBENkEyM0ZEMjBENkY3OTM4RjlBMgorOjEwNzE5MDAwQTYxQjhGQjcxRkJCODdFNEVEQjU4MUU0MDk1Q0NGREI4RAorOjEwNzFBMDAwNEIyQzNGNkE3NjJFMzlGQzk2NUIwRTBCMTBENjkxRkY2NgorOjEwNzFCMDAwRTY5RkU2RkI2NTY1NTI5NzkxMUUxNjMwNEU0N0JDMkY0MQorOjEwNzFDMDAwODQyNDk1MkYwMzhCOUU4QjIwNERDRjRGRTA5NTQ2QTRCMgorOjEwNzFEMDAwQzdEOUU3MTZCQUFFMTZEREU3MTZGQUYzQjlDQjlEN0MzMAorOjEwNzFFMDAwMEUxRUE3MkFCMEU5MTA2QzNCRjVGOUU1NEIxQjE2QjI1MQorOjEwNzFGMDAwRjFEOUUyOUIxODhGRkFFQTcyOUVDRkUzOUYyREQzRjk2MworOjEwNzIwMDAwRDU4MkRFRUI2QjMxNEUwNENCQjg1RUU2RTQ0MUU0RDVDQgorOjEwNzIxMDAwN0FGNUI0QjNFRUI3M0FGNkZCNjNEODJFRjM5QzlDQTM5MQorOjEwNzIyMDAwQUY2NUVFNUJDRTMzNTM1RkNCMEI2NzNGM0YzOUQ4QkVDNAorOjEwNzIzMDAwOTMxOTU3QThDMzdGNzJGQkQ1QjZBQjEzMzlFRTdCRTMyNgorOjEwNzI0MDAwMzM5Rjg3RUFGQjlBRjdCQkYyQ0MwRkUzRkQ0NjU5Rjc3MQorOjEwNzI1MDAwMDExRUVGOERFRUZEN0RFREIyNzJCQTVGQ0VDMDk0QzkxNgorOjEwNzI2MDAwOUVGQUFFRjlBRjRGMUFCMDgzMTNGMzcyOUY0NzdGNzQ0MworOjEwNzI3MDAwQTIzQTc3QkFDNEYwQkUzOEZFNUVGM0ZFN0M4MDI1NjY4MworOjEwNzI4MDAwRjdGQ0Q3NURGM0VDRDExOEI0NTlGNDg0RkVGMTRDREY3MAorOjEwNzI5MDAwODdFRUZERjc2RDg1Q0I5NzE2N0JCQzg4MUQxRjZCMTNBMgorOjEwNzJBMDAwMkQzRkYxQUJFRDdGRkI0MzIxQjdEMzFERkIzRURCN0NENAorOjEwNzJCMDAwOUIwOTVGQkQ2MUE0ODdDMUU2RkJEOTMwREY0RjQ3MkQzNQorOjEwNzJDMDAwMzdFOEJFRkMyNkZCQkVGQ0E2RjE0RUZFOTZBMUExM0UxMQorOjEwNzJEMDAwNzk2MzM4OTdERjU3MTAyRUExRjg2QTUzRjcxQ0YyMjcwRAorOjEwNzJFMDAwMTcxQ0Y0OTEzRjdERDRCMkE0NjBCOUY2QzU3QkVCQjkwRAorOjEwNzJGMDAwRkZGNTJCNENCRkMzN0M5MDJENENBRkMzRjJERUNBNTlCNworOjEwNzMwMDAwMkFEQTBCQjc0NkE2NTNCQzc2NzNCREUxQzkxNzcxOUU0NgorOjEwNzMxMDAwNzgxRjVERDJFNURGNkI0QTU0NjkxOEVGNkRBRTlEQUUwNAorOjEwNzMyMDAwQTJERDIxN0RCMjlDQ0FGMjc5RDMzQkFBMTgzRjdGNjZDOQorOjEwNzMzMDAwRUJENDRCMEIzMDJFNTFDNkVGMjNCQjhFOTUxQjRBOThENgorOjEwNzM0MDAwMUQxREU2RkJFQzIxRTNGNTMwRTJBOTJBQUMzQkY0NDMzQQorOjEwNzM1MDAwRUJFODVCOTYzNDdEMjgxN0UyNUExNUU2Q0EzOEVGQzE5MAorOjEwNzM2MDAwQTYyRkY2OUVGNEVCQjc5NUU0NEQ2MTM2RkY0M0Y2QkRDQworOjEwNzM3MDAwNTg2RDRBQUE3NDQzMTk5RThCNjcwMjA3RkRDNDJBRjcwOQorOjEwNzM4MDAwMTMyMjFEMzRDRjE4ODA3QjgzOERERkI5RjZCODRDMjBEMworOjEwNzM5MDAwODk0RkJCRDY0Rjg5RjNGNTZCMTM2MTU1QjZGNUI5MzNGOQorOjEwNzNBMDAwQ0NGNTlCNjZDREQ0ODZBNDIzNERGRUQwNzM3RjY4NzkzRgorOjEwNzNCMDAwOENFN0U3QzcxODFEQjlGOEY5NkM3QUU3RkM1NDFFNEU0NAorOjEwNzNDMDAwMzQ4NzBCNTAyRTQyNjk4QUU2MUYyNkY5NDNFREE0ODFDQgorOjEwNzNEMDAwN0IyQ0UzNjFCMzFERUJGRDJDRDdDRTg3MkVFNDc5RDA1NworOjEwNzNFMDAwRUM3RDZCMEU5NkU1MTRDOTc3NDcxRjZDOTNCOTNFMzc1OQorOjEwNzNGMDAwNTI3RDMwNkZEMTQ2RDIwN0RGNjVBQzQ1RjZEOTI3MzdDRAorOjEwNzQwMDAwOTJEQ0RFRTg1M0U5RkVCRkJERjM2NDhBNjc0NUNGODFCNQorOjEwNzQxMDAwRUJEQzc2OEIxNEIxRUZGRjhGNzBCRjNDRkU0RTQyN0FFRgorOjEwNzQyMDAwMzJENzdCRjA5QzQ3MzQwNDc0Q0VBNTZGM0NDRjJGNkREMAorOjEwNzQzMDAwODMxRDM1RTcxMDdDOTMzNEY3N0U1NjM5OUVGQjE5RUU5OQorOjEwNzQ0MDAwQUUwQUFFNzJGQjFCRTZFNEYyN0M5MUZEQjk5NUJGNDczNAorOjEwNzQ1MDAwM0EyODBCQTdBQjkwMzUyRkQwQTAxN0YzNjlBMDhBOUZDRAorOjEwNzQ2MDAwMUYxMzBBRjkzOTFCMUYxODJBRTdENzZBMERFRjBEMTVFQworOjEwNzQ3MDAwMjA0OUU3Q0YwNjVEM0ZGMERFMkZGQUI4OUM2RTBDMjI2NAorOjEwNzQ4MDAwREU2MkRDQUYxM0Q5MkU1MEQyOUVENDY5NzZFMUQ5OUQ0RAorOjEwNzQ5MDAwQzZEQ0E1M0YwODEzQkUxMzA2RjI3N0Y3QUMyMEQ5N0JGNAorOjEwNzRBMDAwRUY3NTJCNjQ3RkJFNzcxM0ZDMDZGRDQ5RUZGOTcyQzBDMAorOjEwNzRCMDAwNjI0QkY1MjM1MUZDQ0Q1MzZDQkU3RDhDNTk3NzYyRkUzNworOjEwNzRDMDAwOTdDNkJGNEZEQjJBOTBCRkU5NDcxRjA2QzcyMUJEMUJFOAorOjEwNzREMDAwNTExMEYxRjcyQzE2MzM3RDgyMjcwOTQyMDhFM0IzRDEwRQorOjEwNzRFMDAwMDVEMDc1MDlCNkVGMEUxM0ZFN0NGMTlGQ0U3RjdEMDZBOQorOjEwNzRGMDAwRUQzRjIxQjEwMkNGNkI4OTBGRTJGQzlGODk0MzFFQjY5RAorOjEwNzUwMDAwOUZGMUJGNTUxMkZBQUYxQzdERTgxRTJENzkwNEUxOUQ1NQorOjEwNzUxMDAwMERENkFBNkVENkZFNkU4NUYzRDdERDc5NEExQUUzOTRBRQorOjEwNzUyMDAwRDMwQjQ0RDI0M0MwMTc0QTRGNjJERjE3MUY3OEJEMUFFRQorOjEwNzUzMDAwRjMzQjE3NTc0Q0MzOUEzODNFQURGNzQ0MkQ3OTBDRTkwRAorOjEwNzU0MDAwQUY1QTVCNTI5RENCRUE5NzFGRDU0OUZFNUUxQUJGNjVDNQorOjEwNzU1MDAwM0Y5NjY3MURFMzY1OUY5RkVCRjFBOEM3QjhDRjA3MkM0NworOjEwNzU2MDAwRkU2MDAyQ0RFQkNEMzBENzY3OUJFMzY2OEYyOTBDQzk1NworOjEwNzU3MDAwNTcxOUY3RjI3QUNGMTczODc0QzBCNjc1MURGM0QyRTlGMAorOjEwNzU4MDAwREYzQUQxNDVEMjI3MEVGODlGQTBDMkIwQ0Y5RjM4RjQ4MgorOjEwNzU5MDAwNjAwQTFGODUxRTc2ODdGOUJFRDA4NkY5NjZCMTgxN0NBOAorOjEwNzVBMDAwQjMzNjVCN0YxQjY5QkU1OTI2M0ZFNTJEOTI2OTFEREUxMAorOjEwNzVCMDAwNjVGQTE2REVFNzcxMzY5RkRDNDJGNzdGNjZGMjkzMDNDOQorOjEwNzVDMDAwRTdFNkYyQkMxOENBNjE4NzZGQjREOTc3OTI1Q0Y2NUZDMAorOjEwNzVEMDAwQUZEMDdEQTYwRTFGMzlGQzMzMkJBNzlGOEZCRTgyRjI0MgorOjEwNzVFMDAwNjI1OTU4NUZDODUzMzQ0QzcwRjNDOTk1QzNGMEQ1NjJFMworOjEwNzVGMDAwRThEQjFGNjNFNUM1MzI1ODM5NEMwNDFEOUFGM0JCOTI5MgorOjEwNzYwMDAwMDkyRTNFQzlDNEU3RTI3OTAyQkNFQTkxODNCQ0VDQzIxMAorOjEwNzYxMDAwQjdENjdGMEY3MDE2M0I3OUIwNzUzOTIyRjM3MzBGMEUxMgorOjEwNzYyMDAwOUZFMkVGQjFFMEY5QjE3NkQxMDBEQzhGMUE3MzU3MUFGRgorOjEwNzYzMDAwMTEzNjRGQjkzNjc3MERGMkMzMTYyMTkxNDI3RTg4Q0NCMAorOjEwNzY0MDAwN0UyQjc0MjNDM0ZCN0JBMzk4MTY4OUZFNDM3REU1NTNGMQorOjEwNzY1MDAwQzRFRkFGODRDODJFQkI3QkQ2NkE4QTRCQkQ3NzUzNzIwQQorOjEwNzY2MDAwMjJFRTJGOUIxOERFNUZBNUZEM0MzRDVBQTQ1Q0RCREVCRAorOjEwNzY3MDAwRDEzQzZGNDI4RkYzNjczMkNFREY4M0ZEM0Q2RDk3NEQ3NgorOjEwNzY4MDAwQkI1RTJGRDU2M0VCRUI5MTlCMDdBMjlDMEYwRTQ0RjlEOQorOjEwNzY5MDAwM0VCNTQ5RTk1MDkxMUVGQThBNTRDRDlEQUY3Qzg5N0Q1MworOjEwNzZBMDAwQkZGMENEMTEzQkFFNzhCQTQ5QzdGOEM0Q0QxMURFRUVCQworOjEwNzZCMDAwREVGQTRFRDI1NzM2RDVFRkExNjc3RTZEMUEzMDNGMkVENworOjEwNzZDMDAwNTg2QUU5QTg1N0E4N0Y1RTIwRTAzRTBCRTdGMzc4M0JCNQorOjEwNzZEMDAwQkU2RjcwRTk2QjlGQjJFNUI2OEFGNzAwQjE3OUFCOERFQQorOjEwNzZFMDAwOTZFRUJFNzc1NjE1ODVBQ0Y3MDNGRDI0Q0FGREJGNkEzQQorOjEwNzZGMDAwMjNEMDc3NzVFRkZGQTNCQzg0RkMxMjQzRjgxQzk2MUJDNAorOjEwNzcwMDAwM0JFODc3NjMwMjVERkM3REFDQzQxNDZFNzBGNTFCQUI4NworOjEwNzcxMDAwRURGNEVDOEZBQUQ4MkI5MzNENTQwNzlBODVDNjlERENENworOjEwNzcyMDAwNUI4RDdFQjdGNkE1QzEwRUNDNTdDRUE0MjNGQzdCRDVDRQorOjEwNzczMDAwNDUwRkVBOUZBRjI0QkQwODhFNzBCREI0QkE1ODI1RkEzNAorOjEwNzc0MDAwNkRBOTUzNzZBMDVGRUYwRkIxMkFDQTUzNkZCMkYxOTZCRAorOjEwNzc1MDAwMzkxRjhDQUIzMzREOEZGQzY0OTY5RkM3RDdBREM5M0NBNgorOjEwNzc2MDAwQkU4RTY1OENBRkUzMTNFM0VCRjhDNEY4M0E3RUM3RjgzRQorOjEwNzc3MDAwM0E5NkJGNTU2RjUyMTlFM0VDNThDNjM4M0I5NjMxQkU2NgorOjEwNzc4MDAwOEU2NThDQUJFMzczNEZGRDJBN0FGRUEwM0U0NURGOUZFQQorOjEwNzc5MDAwQURBRkEzRjIyNUI2REM4NDUyRkUzQjVGRUQ1RjU0NENFNworOjEwNzdBMDAwQ0M4QkZBQTFCRDNFRkJDQ0E1QUI3RThFN0U0MDg4MUE2OQorOjEwNzdCMDAwQjg1RjA3MEUzNkJFRjIxM0JCNENGNzVGQzc4QkYzRDEzMQorOjEwNzdDMDAwMkYwOTMxMTEzMDlFRDAxQURGQzY3NENDODFGOTA1RTQzRgorOjEwNzdEMDAwN0I0MUE3NzhCQUI1MEFGMzE5Nzc0NjBFNUQyQTMzRkRDNworOjEwNzdFMDAwQTEyNDdFNEI1NTFFMkJFRjhBMUM2REM1RkNEMTczRjU3MQorOjEwNzdGMDAwODZFNTNCNUM2NTNEMzI3REY1RDNEQTQwNzk2MkQ5MEU5MgorOjEwNzgwMDAwMzlDOEJFM0Y3OUY3Q0JBRDI4MDcwMjMxQUVGNzdEMkZERgorOjEwNzgxMDAwRjJBQjRCMUIxODQ5NzQxNTMzQzUwNkU1NTg5MTkyNDZENworOjEwNzgyMDAwM0FCRTAxRDc2OTEyQ0U4M0VCMkQ5RjgwQTYzOEU2RUZEMgorOjEwNzgzMDAwNERENDk1RTlDODdGQUM3RTE3QTdGQjkxRDVGRjIxMDZGMworOjEwNzg0MDAwNjE2NjlFREQ2RUE4N0E2MkY5ODhFQUQxRjlEQkMxRUE0OQorOjEwNzg1MDAwRTE3NzYxODg3RTVBQTA0OUVCNjFCMDZGRjFGMUZERDUwNworOjEwNzg2MDAwMkFFMEZFREY3NjFGRTdGQkY2MDA3RjRFQzhFMUY0Rjc2MworOjEwNzg3MDAwNEVCNEVBQUUyODdCREUxNUU1RUJEQjFFRTBGNzBFRjQzNgorOjEwNzg4MDAwNEQxMUU5Rjc3OEEwNEVGODI3RUNFNzBCNjM0MUMzQkMzNAorOjEwNzg5MDAwQzdFOTUzOEFGMzUxRkYzRjYyRDNDM0E0ODkxMUJFNkY3NgorOjEwNzhBMDAwRkZCMzRBRkJGNjY1MTM5RjZDQ0U2M0U1NDlGRjZBMTg4OAorOjEwNzhCMDAwQjgwRjZGMDEyMzg4RjdCNjVBNUI0NUNBMjNGQTY2RjlGOQorOjEwNzhDMDAwMzk3OTRCNThGNTBCNjY3RTI3MEZGNURFRTlCNkRDNDlCMgorOjEwNzhEMDAwREJGNjQ5NDNDQjhEMTNEMTNFNzhFRjI1MkVGNzhFREJCNworOjEwNzhFMDAwRTNFQ0YwRjVBNDY4M0Q2Nzg2RTkxQzA1NDAwN0U5MjU0RgorOjEwNzhGMDAwMEQ3MTk5RjJCRkM0MzFGQ0E5RjhCNDZCRTg1RUNDMTZFNworOjEwNzkwMDAwODVFRTYxNTJGRTM0NUIyNTdGRUEwNzdFRkIxRUUyMUU5OAorOjEwNzkxMDAwRDI1Nzk0NDA1MkNCNjVFRjNCMkM5MUZDMEY0RDVBMzAxRgorOjEwNzkyMDAwOERGNzYxNkQwOTRGQTdERjY1QjBDQTY0OEE4NzZEMjkzRAorOjEwNzkzMDAwRTM3MTlENTBFNDJBQkFFRkVBMkJERDAxQUFERjEyNTY2QgorOjEwNzk0MDAwMjkwRjM4NURCNkZCNDA1NTBDOUZBMjg2RkI3RURBNUNBMgorOjEwNzk1MDAwNEFGNzUzNUE5QUE4NTEzRTMxRkIxNzdENUYxMzIzM0ZENAorOjEwNzk2MDAwMEY5RDJCQzZFRjZCNzgxQ0MyMzdGQTIwOTU5QjNFQTU2NgorOjEwNzk3MDAwNTFGRjYwRTdFRDkzRUEyNUUyRUY0NDI0QkFCREY3Q0Q2RAorOjEwNzk4MDAwRjZGREY0NDJGNDgzQUNFNkU3NTJBNjZBNEJCQjlGNjM3NAorOjEwNzk5MDAwREY5QjREMzU1MUNDRjhBMTQ1N0I3NzZGMDhDQjJCODAxMQorOjEwNzlBMDAwRTJBNEExMjlBRjM3ODZCMEZFMEQ5QUMxRjNCMEY4MzkzMQorOjEwNzlCMDAwMDhCMEVGMzc2RTJFNUJENkZEMUZEOEZGRjIxMDRDMzJBOQorOjEwNzlDMDAwQjA3RUI1OEFGQzBBQ0RGMDAyREU0NzU1NjhFQjMzQTFFNAorOjEwNzlEMDAwRENFOTAyRUE2MzJEQjU3NEVEMjY4M0NGN0I3RUEwMzkwNgorOjEwNzlFMDAwRUY3MjE1RTk0NjVBOUM0N0UzQjQ4MEE5NjI3REFCNTYxNQorOjEwNzlGMDAwQTY3REIxMzBBQzc2QTFERkEwRDBGNjNCMzhGMjIwM0ZCNworOjEwN0EwMDAwRTUzQTQ3QzBGRTM3NzY4REVDMzk2NzMwRkEwNjZGQjkzNAorOjEwN0ExMDAwMjBFMzdFREQwQjZERkFDOUM0NUJFNjNDRjM2M0NGRTQ4MworOjEwN0EyMDAwMjIzQ0Y5NkJFODQ0QzQ1OUYwREYxQjlCQkUwNEU3MzVFOAorOjEwN0EzMDAwNDZEQjJCRUMyODI3OTM0NkQzRjE3RTcxNDgzNUI4RjMwQgorOjEwN0E0MDAwMzBGRTVBNzhBNzk2MzVGNzIwM0Q0Q0Q1NjVEMDE5NUVBMworOjEwN0E1MDAwMkU4NEJFNDZFQzdGOEI0REZGRUQ0NURFRkRGOTg4NkQzMworOjEwN0E2MDAwRDczMDNFRkQ3Qzc0MjZDNjMzNDRCMDVDRkQ2M0JDQzM5NgorOjEwN0E3MDAwNzJDMTczNEU3QjlFQTczQ0E5NjNBQ0E3RkVFNEVEQzUyMworOjEwN0E4MDAwOUVFRkU3QTVDRkY3N0NCRjYwRDc3NDRGNzk0QUU3NUNEQworOjEwN0E5MDAwNEZGRDBCRjc1NDc5Q0FEM0JBMkVGN0Q0OUY3MTYwQTk2MgorOjEwN0FBMDAwQTczQ0IzRTcxQTRGRkREOUFGQUNGNDdDOUZEM0JCREE0OAorOjEwN0FCMDAwRjNGREEyREY2REYwOTQyRkVFQkJDMzUzREZEMUVCMzNBOAorOjEwN0FDMDAwRjdDREVCQTM3Rjk5M0U4RkJGRkJFMzNFNEY5QzY5MkYyMQorOjEwN0FEMDAwOUM3NTZGQ0U5RjlCNzQ4Q0ZGNDE5NERGOTMyQkUzRkVDQworOjEwN0FFMDAwQ0VDQTFCQkVDOEVEMkU3NUJFQTFBM0JDQjlEQUE2Q0IwQgorOjEwN0FGMDAwRDU3OUU2M0E5NEFGOTU1MTk1RjYwOTM5Q0NFQkM5RTFDMQorOjEwN0IwMDAwNEI0OTFGOTlCMDlEQzlBOTE5NjQ4RkY1N0ZDNzM4NzQ3NworOjEwN0IxMDAwN0JCRDM1QkZDNEU1QUYwQTY4MUQ4MEY5NUY5NUQxMUFGQQorOjEwN0IyMDAwQkEyRkQwNjkyRjZCMjY2MDVFRENENTUxOURERjczQzMwMQorOjEwN0IzMDAwQUM1OUJBMDc0MDY3RUQ1REYzNjJGNjFGNUQxREQxQzcxMgorOjEwN0I0MDAwRUM0M0Q0RUJGQkVEM0YzOTg3RTJCRUNDRkUyM0ZCRDAwOAorOjEwN0I1MDAwMDg3MjdCMTA0RTRCRjREREY4OEE0MEY3RjMzM0ZCOEU0RQorOjEwN0I2MDAwRUNDMzY3QzJDQzNFOUM4NkY2NThFRjE2OTQ0MzdEM0YyQgorOjEwN0I3MDAwOTMyOThFQzhGRUM4RkUyQjY3RjZERkU2NUNCNzFGQkNGNAorOjEwN0I4MDAwQjcwODlGNjlEMEM2RTJCMzVCRTkxMjQ3MTc5MTNENzgwOQorOjEwN0I5MDAwMUZEMkYzNjczNkJFQjQwQUZCOUQ1MkNFRUZENTZCMUZFMgorOjEwN0JBMDAwNTUxQjQ3M0RCOUJEQTg5M0Y4QTRBRjQ4RTZGQjkwOUM5MAorOjEwN0JCMDAwMjg3NUZCRjc3RTZDQUY3NzQ4RkQyNkQ5QTE2QzFENDg3MAorOjEwN0JDMDAwMkUzQkVCQjA0NUU4NERFM0ZEODVENjE3ODNFNEVGOUVGMQorOjEwN0JEMDAwRjA1QkZGMTFFNDM3QjU1ODFEODdGOTdGQzYzRUM1QzQ3OQorOjEwN0JFMDAwRjFFRUI1RjE1Q0FDNERBQkMyOUY3OTJDODkyRkQ5OEJFRQorOjEwN0JGMDAwQ0Y3Mzc1QTY4RkIwNjc2OUU5M0Q3QkYxRjk3NDk0OUZFNworOjEwN0MwMDAwNUYzRERGNzhCQTBBNjU4QzNBOUZGQkFERTVBOTRBQkFCOQorOjEwN0MxMDAwNTE0MDdGMzM4MzIzOEJEREQxRUY5Rjg4NkVFN0Y3RkRFMworOjEwN0MyMDAwOTRDODZGMjBGREExRDY3Rjg2NERBMTMyNEZBNUI4NzFCMworOjEwN0MzMDAwMDBFOTQyQTAyN0QxNTM0MDBFRDFGRTEyQzA0M0E4NThGQworOjEwN0M0MDAwQUUxMEQyMThFQTQyRkQxNUYzNDEyQkYzQjYxMzFEMzhERQorOjEwN0M1MDAwN0EyREVBQkI0OTZFMUZGRjE4RjExQUFCRjVBRTdGNDhDQgorOjEwN0M2MDAwRkQxNkUxQTlEOTNFRUZEQzlFQUIxRkFDNjJFM0I2MTc2RgorOjEwN0M3MDAwMTRFN0ExQ0YxNkZEMjk0QjVDRjI2NzlGQkRFRjNFOTI0MgorOjEwN0M4MDAwMjM3QUU0Q0Y2Q0NDNTE5ODM5QTAxNzMxN0VEODJFOUU0MAorOjEwN0M5MDAwODNGMDI2MjhCRTFFMzgyODkxM0QxRkI4QjM4MzdFNUYyRgorOjEwN0NBMDAwMzVBMDU5M0E5MEZFNkZFOUQ4NkY3NUYxNzJGMkZGRkQ3OQorOjEwN0NCMDAwNEY2QzNBRTlDMTgxQkExRjY1QzU1QkEwNTcwMjczQzYxNAorOjEwN0NDMDAwRTBGODhDOUVGQjAwRTkwMzMwMkFBOEUzM0U1QjE3MEIyQgorOjEwN0NEMDAwOUEzQkIyRDgwNzlGOEQ3MEZGRDlBNjA5OEUzRjMzNDFEQQorOjEwN0NFMDAwRTc1RDVCRDBERjE2QzZBRDREMTUzMTRGRTdENjlGMTU2QQorOjEwN0NGMDAwRUM3NERGMDc3MTZCMDFGNzRGMEUzNjdFODBEOTk5NDkxRQorOjEwN0QwMDAwMTc3QzlCNThCRjI4Qzc1QjRFMkZBOUExRkI1NDcxOUJDMgorOjEwN0QxMDAwMjlDN0YzQTA2NTNCQzg0RjZGREI0QjlGQjVGMTdBNzM2MgorOjEwN0QyMDAwODRFMzcxODIwMjBCNzZBMDNDQzk2M0ZBMTE0MzY5QTUxMgorOjEwN0QzMDAwRUQ1NzcxRkMyRkYxMUMxRUQ3MzcyQzkwQjg1RkNFRTdBMgorOjEwN0Q0MDAwRUM1QkUyMTlCQzg3NDYwNzVEOTk2NTFGRjEyNzE1OTgyMgorOjEwN0Q1MDAwRUY2QkVDRkZCQUYxNUNFMDM5RURBRTdEMEU3MDNGRjBGOQorOjEwN0Q2MDAwOTYyNzZGRjc5NkNGNEI3QkNCNEM4QjdFMTlGNTgwNjVCMgorOjEwN0Q3MDAwMDBEQ0FGQjFDQkZCM0QwQ0E2MEZFMzI4NjM5REZCRjMwQQorOjEwN0Q4MDAwMTNGQzlDQTBDQTIwNDBGQTJFRUI0Qzc3N0Y4RENEMkZBMAorOjEwN0Q5MDAwRTFEQzczOTk3MTVGRkU5NERENjlEMjVGQUVCMDdGQ0Y5NQorOjEwN0RBMDAwMjNGMzFFRjdCMUY4RkIxRTUzNjk1RTlFN0Q3NEJBNEYzNAorOjEwN0RCMDAwMjI3RjAzRkE4OTBDOTc5RjY4QTJBNjdCRUMyQUM3REY3MworOjEwN0RDMDAwOTMyOUQ3ODNDN0VFMDFGNjg1RUNGNUE0MUZFRjQzRDVDMQorOjEwN0REMDAwQ0FEMEFGRDA1QTc4RDc2RjhGOTcwRkY4NTc1QUU1RDREQgorOjEwN0RFMDAwOUJDN0M5N0ZDOUY0QUYxOEY3N0ZBMDVGRkFENjlGRERBNAorOjEwN0RGMDAwRjZERkM3NUQ3RUNBNzdBMkM5QTlFOENGQjg3RjIyNkYzOAorOjEwN0UwMDAwRUZEQzk3RUE5Q0U3N0JCNzQ2N0U1RUQwMzkxQzQ5MTdDQQorOjEwN0UxMDAwMUNCNzk3NUE5NzcxNzUyNTNEMDZGRDQzOEU3RkM1RjFCNgorOjEwN0UyMDAwMjM1QzkzNjdERTg1N0NCN0M1Mzg5MkRBQzdGQUFERkE3MgorOjEwN0UzMDAwOTUxRkIwOUY4NUQyQzEwM0Y1MjhFRkM2Q0I5NDJGQTIyMgorOjEwN0U0MDAwQ0Q1RUYzNDgxMEZEOTlGODlEOTVBQjhBRjREMUM0MUYxRgorOjEwN0U1MDAwMkZGQUM4OUZEMDY2RjNCRDczMkVENUYxQzc3Q0MyQjY4QQorOjEwN0U2MDAwMDMyRUNCNzFGNDI4MkI2ODlGQzcwOEEyOUU3Q0MxMkVERAorOjEwN0U3MDAwQjY4NjlFRkQ5MEZCMDMxREJGREY5NDRFRUZGN0YzRjEzNgorOjEwN0U4MDAwODgzN0Y5M0Q3NzUwN0U5MzMxODdFNzM3OEQ1QTlFREVFQworOjEwN0U5MDAwOEJFQjdDQTFCRENFMThCN0FBOUMzNTEwM0YxREJEMjIyRgorOjEwN0VBMDAwQkQxN0Y1RDBBOTc2OUU1MkQ5OEJDRkQzNEZGOTgyNTQwNgorOjEwN0VCMDAwMjgyMTdEOUQ4RkY5NDlBQzlEQjE1RkY2OUMwNzE5MDU3RQorOjEwN0VDMDAwMDJFNUY5OEMzQTJBMTk2OUQ2Q0ZENDY3QkRERkNCQzA1OQorOjEwN0VEMDAwNTUyRTQyRjhCQ0U1Q0NCODE0NTNCN0RFQjk1RUMwREYwRQorOjEwN0VFMDAwNDU0RDA5MjhDRkI2QUU2MDM2MDIyQkFGQ0FCMUYzOEIzMQorOjEwN0VGMDAwQ0U4NTczOTE2RTE3NEE2MTAzRUZDRERCRjAwQjg5RjJFQgorOjEwN0YwMDAwOEJGREM3MjdGRjEyRTNBM0YwMTJDRkE3RDRDRUUxRjE3OAorOjEwN0YxMDAwNTZFREE3OTJDMTI0MjA2ODIxOTgzNjJEM0MxMEM3RkE0RgorOjEwN0YyMDAwRUExOTAzRUZEMEVGRjc4RjNEQ0VENjFERjdBMTI3OThDMgorOjEwN0YzMDAwREQ1RkUyNDMzQjVFQTM3MjI3QjNGQkIxRkMwQ0IzRkJGNgorOjEwN0Y0MDAwRjFCOTlCRDlGREY4RkVCQkNDRUVDN0YyMUU2NkY3RTM5NAorOjEwN0Y1MDAwRjMwN0NDRUVDN0Y3Q0YzMkJCMUZDQkZCNzMyQkM5MUY4OAorOjEwN0Y2MDAwREY4M0Y3MTk0REM2REZCNURENERGOThDNkRBQTRGNDNBMAorOjEwN0Y3MDAwRkFDOTk0Njc5NTk1QjdBQUNCMTg3RTM3ODcxNzUyMUMxNAorOjEwN0Y4MDAwQTU2QTIxQ0ZBNzZGQ0Q1OTQ4RjY3NEJGOUYyRUMzQ0ZFNgorOjEwN0Y5MDAwMzlFMEI3RUIxNTFDQkYxRDFFNkQ4RURCRjY2Q0JGRkYwNQorOjEwN0ZBMDAwMzM2OUQwQkQwNUMzRjc2MzNBRkQ5MEZGRjRBQzdFNkMzNgorOjEwN0ZCMDAwM0ZFQURCNUZGQ0Y1RDc5QkQ4QTdCNTMzQjdCNTA3OEI5NgorOjEwN0ZDMDAwRjEzQzRGOEE3RkI3RjMwQTMzN0Y0RjZCRURFRTA2Q0E2MQorOjEwN0ZEMDAwRjM1M0M2MUM0REUxQkFFRTJFMEY5M0JFODFCRkI3ODQ5QQorOjEwN0ZFMDAwNzIzQkQzNEU3NEVDQzM0QzdEREM3OTY2RUU4Nzk5Nzk5NQorOjEwN0ZGMDAwMzAxMTVCMkYxOTJFMkZFMzZFNUY4QUUyRDY1NjAzOTM2MgorOjEwODAwMDAwMkZCODVGRDRBN0U3QkZFRTNCREI2RjNCNTZDQkNCMzgzNworOjEwODAxMDAwN0ZDQ0YzQUVGQzA3NzgzRTVFM0IyNDM1RjdGQzlENzNDNgorOjEwODAyMDAwMEY2NEYzMTU3M0ZGQTFEQjZGMUIyQzQ5RDNCRDBDQzE4QgorOjEwODAzMDAwQjA0OUZBQTJDMEY0NDhEMjJCQjUyNEM1MDE1QjA3RjlCOAorOjEwODA0MDAwRERFQzM3NkQzOUQxMzBFNjJBREFFRjVCNUZGNDkxQkVCMworOjEwODA1MDAwNTU2REU3QkYzNThENTFBOURDMzQ2NjU2OUNGMjI2MjM1OQorOjEwODA2MDAwQjNENERFMkNGRDZDODgxNDBGQjlCRjRBNkNGRkQ3ODdFMAorOjEwODA3MDAwRDhGRjI1M0YzRkVGRDVCNDc3OEU4QUU3QTJEQUMzMkIyRQorOjEwODA4MDAwN0JEMDZFNkY4RkM3QzhGRkRGM0Q2Njk2RTdERTcxMjkzNAorOjEwODA5MDAwNUU0MUY3NTQ0ODYxQUU2NzRCNzE5NUY0NkMxOUU3NUYyOAorOjEwODBBMDAwMzY1MERGQTlCNzJGODdFRjIzOENDREM5OEYxOTA4NzdGQQorOjEwODBCMDAwNTAzREJGOUMzMEQxREZFMjhGRjFGQzYyQkZDNkUzODU0QgorOjEwODBDMDAwQzExMjExRDQyQ0U3MzA5RUNERTFFN0FDREFDQjkyMUE4NQorOjEwODBEMDAwRkE3NURBRTMzMjlERTc2OEQ3QTcwRjE2NkYyNUJERTg3QQorOjEwODBFMDAwOEYzOTgyODc3RTlCNkNCRjQzRDMyQTg1RjRDMjQ0NUQ1RgorOjEwODBGMDAwQUU1NjlENEZFNzExRkE5MENGREJDMzhEMkFDNjVGOTUzMAorOjEwODEwMDAwMzFFNTQzRjZBQjY4QkNERkZGMDM4MzdFM0QxRjAwODA5MworOjEwODExMDAwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkNEN0Q1OAorOjEwODEyMDAwMEQ2MDE0RDVCNUYwOUQ5REQ5OUYyNEJCQzkyNEJCOUI4MAorOjEwODEzMDAwRUNFNjhGMDkyNDFBMzRFMDI2MjQzMTY4QzQ0OTA4M0M0RgorOjEwODE0MDAwRjQyMTJFMDIxQTVBMkExQjEwNDUwNTA5NjhFQjZBQjU1QworOjEwODE1MDAwRDk5MDgwMTBBNDA2N0YyQTRGMkNERDU4QjBGNkFCRDZGQworOjEwODE2MDAwNjhFOTJCQUY0NTVFNTBFNEY5ODM5QUFBNTVCMEE4MDE5RgorOjEwODE3MDAwQUNENTNFQjUxMUE0QTVFQUZCRjhDRTM5NzcyNkQ5OTkzRQorOjEwODE4MDAwQ0MyNjQxN0RFRjdCRDgzMkRDOTlGQjczRUVCOUU3RkY1QgorOjEwODE5MDAwOUU3QkY3RDQyOUY4NzMyMTYzNkQ3QjUyNTQ1NjA5Q0YyNworOjEwODFBMDAwQTU4RTc4NEExMTYzRTE2ODc5NzZDMzI0QzZCRTk1MTUxOQorOjEwODFCMDAwRkUyMkMzQ0Y5OEMzQjM0ODhFQjkxOUIzMzNBNjc2QzM5MgorOjEwODFDMDAwRjM5NEQ2NEU3RjdBNjU4MTMxQTgyN0NBQkY5OEYyOUU3NAorOjEwODFEMDAwNzdFODc3RkQyOUE2NkY2NjExNjhDRjhBQTVGN0ZCNUM2MworOjEwODFFMDAwOENEOTE0MjY5Q0IyNDE5OUI5RTVGN0NGNjZGNEU3OTQ4RgorOjEwODFGMDAwODg3RkY3MDZDMjlFRTRGRDc4NUNCRjlDRjJERUE0QTFGNgorOjEwODIwMDAwRUQ5Njk3RjUzOTQ0ODVCMUY1REIzQUMzMENDQTlGMEI1RgorOjEwODIxMDAwNTBBODQyQjg2MzZBMUVDQ0VCODY5RDJCNTlBNDhDQjE0MgorOjEwODIyMDAwOEQ1MkFGNEIwNjM4MzY3RTI5MkMwQzk3MERFRDdGMzFFMQorOjEwODIzMDAwQ0VBNzBBN0I5NTYyMDgyN0ZDQjE5RDNBMDdGRTU2OThBNworOjEwODI0MDAwRTJBODY2MkMwRkRGOENDNTI3RkYwRUEzRUMzOTA1RkRENQorOjEwODI1MDAwOTdGNzQwQjk1NDgzMDdGRTNGRTkzOTYzQjlBQUQ3NTg2NQorOjEwODI2MDAwM0VGNzgwQjFDQzU4QzgxRTlFQzBEOEVCMkREMEU5OTlGRQorOjEwODI3MDAwOENDRDM5RjRFMTIxOTZDRUQ4REM1OEU4RDlBNzdDOEM5NgorOjEwODI4MDAwRTVBQUFFNzA1QzY2NkMxRTBCM0RGQjM2OTRGMzFBRDMwOAorOjEwODI5MDAwNTg0RjA4MDZCN0IxQTVCODJFMzBDRDM3OEIwMUJFNDY3MgorOjEwODJBMDAwNDZCMEIyQkNBNUE5OENCOTA2RkI5RjJGNjdEMjNBMzU2MAorOjEwODJCMDAwRjYzNUNENjQxMzE5RkJFMUFENkQ4QzQxM0ZCMTdBMjFFOAorOjEwODJDMDAwQkUxREUwOUZEREIwNkRGNjM4NzgzRTUwNjkyQjc4MTgwMgorOjEwODJEMDAwMUI0NUVDRUZFMUZDNUNEMEQ5Mjk5ODZGQTY2REU1OThDMQorOjEwODJFMDAwQjE1MDNGM0MzNTRENjg4MzdBM0YzQ0VGQUNGNUM1NTAwQgorOjEwODJGMDAwRUU5RDVFMTI0MkJDMDNCRURFMUI5ODBGRTA3RjVFOThDRgorOjEwODMwMDAwQjdEN0M3N0ZBNUYyRDhEQzcxRjBEQzUyRjlFNDZDN0NGQQorOjEwODMxMDAwQ0U0OUFDMEZGRENEQUFFOTZBNzU0MDdGOTcyRTUzMkE0RQorOjEwODMyMDAwQjBCRjcwODNCMTdENUVBREIxMEM5MEYzRjlDMEJGQkMzRQorOjEwODMzMDAwNTk0M0UxMUQwOTFFRjNGODdBN0YwRkI0Mjg4NDdGRjZCNAorOjEwODM0MDAwMjVEMDAzRTAzMzhDOUZBMDdENThFQTk3NDI4MEU3REM3QworOjEwODM1MDAwNUE0MThEMDNEREU0QTk4MkRBNjVDMTBGMUQxQTNGOThFOQorOjEwODM2MDAwRjEyRkM2MzIxOEYyNTlGRDNDMzFERTAxNTU3MjVENzZBRgorOjEwODM3MDAwQzI3RkVFNEMyMUFFQzBGOEI5NEJGQjdCNEU0MUY5NzI4NworOjEwODM4MDAwOTczRDJFQzJGN0FDQ0M2RTAxQkYzRkIwOENCMUNFMjI3MAorOjEwODM5MDAwMDIyRkJEMkU2MTdEMUY3MEFEQjExN0MyRjc3OTQxOTFEQgorOjEwODNBMDAwRDk4MDBFNThFRDM4MUE4RkUwMTg0QkY4MzhDMkYxRTEzOQorOjEwODNCMDAwMjI3Q0U0MkQwQjNERkI2MzE4RkY4QTFBQTcyQzQyRkQ5QgorOjEwODNDMDAwMkIxQUY5NzcxREJFOEQxMkQwMTk3Q0RGMDg3NDE2MjM4NQorOjEwODNEMDAwM0E5MzhFMjRFMjY3Q0VBMUU1Q0I5MTFFRTc5OERFMTc5MworOjEwODNFMDAwNDM1RDlDRUZDNzkzMEY5QzUxMDg3MDJEMTczQTY3QTQwQgorOjEwODNGMDAwMDEyODI5RjY2NkM2NzBBMTAxODM0OEQ3M0EzRkVBNzg3QQorOjEwODQwMDAwNUFCRUEzOTVGODMxODFDRkVDQTc5MDlGRjFERkQ5ODRCNAorOjEwODQxMDAwMUFFMkIzQTc1REJGOTI1MTZFRUNDRUVDREJDMjgwODQ1MgorOjEwODQyMDAwQjdDQTJDRDY5MENGRDhCRkE3RjY5RjJENDA3OUJCN0M3QQorOjEwODQzMDAwRjlCQTc1MTdDMEY3OTRGRTVGQjA3MkM2OUNDRTZGQ0ZDNQorOjEwODQ0MDAwOTg5MTUwNEU0REJEODZDQTNFNkQxQzk4NDI4Q0FGRjczOAorOjEwODQ1MDAwQzBCODQ0MUZGRjI5NzNGODM2QTg2QzkzMDg2NUM5MjY3NQorOjEwODQ2MDAwNkYwQTE1MERCNkNCQzI3NkMyMzBFREMyNkM5MzY0RDFFMworOjEwODQ3MDAwQ0VBREI3MDMzQ0FEODVGNTRCRDVFNjk1QUE3REI3Njk4MgorOjEwODQ4MDAwRjAyNDhFMkYyMURFNjRDNTJEQzA3QTQ4RDMyNTE5RTk0QQorOjEwODQ5MDAwRTVFQkMyOTEzREQyQkMyMzZDOTM3RERDRDA3NjAwNzZCNworOjEwODRBMDAwQUIwRUJGQ0QxQUZFMzg3RTRGMUNERjNFMENGQ0RGMzQxNgorOjEwODRCMDAwM0U0NkVBQ0ZBMTdEM0Y2REY4QTBGQUVBRUNFNEYzNDUzMQorOjEwODRDMDAwQjhFQ0E4QUYxNEM1NkQ0QkU4RTdBRTNERkY3OEYxMUNFMgorOjEwODREMDAwMjA1RTY5M0UwQkE1NDAxRjkyNUQ5NTQzNDBFNzY1RjIyMworOjEwODRFMDAwQkQyRUVDNUNDQTZDOTAyM0MwMEZFQkExQUNDMkZCRjVCNworOjEwODRGMDAwREQ5RDJFMDVERTk3MTVERkJEMEU4OUJFQUMyNzk1QTE0QgorOjEwODUwMDAwM0M5OEMwRTRDQzQ3QTFERjA5QjJDNDdBNzBENTJFRDgxQworOjEwODUxMDAwNkI0QjgzMzJCQjg0ODU0QUEwREY4QzNEQTkyNDRGMzI0QworOjEwODUyMDAwOEJDRUZCQTkwMEUzNjY2NkJBNTQ2QzlGOTY1OUZENTM0NworOjEwODUzMDAwNDZGNEMxMTQyOTAxMUY2OTc1QUZEN0E3MjE1Q0IzNTk0RgorOjEwODU0MDAwMDg1OTUxMTJFMkFDMEU5OTZDM0NGMDEwOTQzM0E3NkRBRgorOjEwODU1MDAwNjMwRDUwQUVGOEQ4QTM4OEM4RDMxMkQ3NzcxREQ4MUVBNAorOjEwODU2MDAwRjU3NDNCREI4N0ZBMjVBOEM5OUY3NTBFNzkxM0U5OEY0RgorOjEwODU3MDAwRUIyNDg2RkEyMzZEQzJCRDAyQzJGMzAwNzQyNTAyNUZBQworOjEwODU4MDAwOTY5NTY1Q0Q2RTgwNzJEOTdFNUI0ODUxNzAzRTlENDI1NgorOjEwODU5MDAwMjFDRTI3MjA5MkRFRDJGMUE5Q0I5MThBNEY3QjM4RDMwRQorOjEwODVBMDAwOEY2N0YxRUQwMDdGQkIzRERFODNGMjJBMzZGOTBBNzk1MQorOjEwODVCMDAwM0JDMDkzN0I1NTgyQkNDNkJGRkEwMTA3MDhFRjRCOTdCRgorOjEwODVDMDAwNkRFRjI4NDJGQTk2REU0QkVDMkZFM0QzNzgwRkNBMzNENworOjEwODVEMDAwNTZENzE4QzZGNkJFOTk5MjQxRkVBNzZBRjIyQ0Q1QTRDQQorOjEwODVFMDAwMDc1QUIyRUMyNENGNzQ3REMwNTQ0OTkxNjFERTgyMzZDMworOjEwODVGMDAwNkZGNjgzMzBFOTAzMjcwQkI5MUM2NEFGMkMyMDNCNDQ5MgorOjEwODYwMDAwNjA3REMyQTkzNDk4M0Y1NjQ0QjgwQkY4M0M4NkI0QUY5RAorOjEwODYxMDAwRTZFRDU5MjBFNDQyM0JDNzk5REFEQzhDRjVFMTYzNTY3QworOjEwODYyMDAwMkIyMDU3QjgyRTU1NDVGRDJDMzg5ODJCNTgwMUYzQjYwMgorOjEwODYzMDAwQjE0ODM3RDA0OUFCQzAyNDJDMEY4RUQ3QzM3MDNDQTdBQworOjEwODY0MDAwMkJBRDFERURBRUE3NUQ2RDM2QzQ1RkRCNzNBMDNGNjA0MworOjEwODY1MDAwMUU3N0Q4NTkyM0RBMDU2RDcyQzg5NTA1RURBMzlBRkRFQQorOjEwODY2MDAwQjZBQTdDNkMwRTk2MzM4MEI2N0JEMTZFOTBDMjMyRDJBNQorOjEwODY3MDAwRTUyQTdGNzEwRTgzRjdFOURFQkU2RkEzOUNGREE3Q0NEMAorOjEwODY4MDAwNUZDRjcwMTU4MDFDQUQ4NzNBRTc4MURDREZGNEY4QkE2NAorOjEwODY5MDAwNTgyRDhDNzczMjhGMjkwOTc2OUU1MzZBNjY2ODRGMzkzOAorOjEwODZBMDAwNEYxNjFBREVGN0I0QzA4Q0NFMUMyQ0FCNkU1QjAzOEU1QgorOjEwODZCMDAwNzM1REE2NDI3OEFENjM3MjNCQjZBQjAzNjQyODA5RUJFOQorOjEwODZDMDAwRTIzQzE5NjRDQTI0QUJGRUYzMERFRjdCQzA0RTUyOUMxMgorOjEwODZEMDAwQTNFOTNGOEQyOUE1ODlGRDhGNEJEMkZGMTlBNkZFNjUyMQorOjEwODZFMDAwQ0JGRTA3RkJGNTFBRkE1RDIzMzFCMkEzNjMzRTM3QUQyQgorOjEwODZGMDAwQkJEOTJFNTg5RDU5QkYyMjEzRUQ1MTI3NkJFRUI2QjA1MgorOjEwODcwMDAwM0I1QjMzNkQwNEY3MUQ4MUU2NUUxNURBRDczMzYwN0M4MQorOjEwODcxMDAwQTA5MzBCQkYzQzIyMzJCMjY3NjBBNTgwNUU1OEJFRDRFNgorOjEwODcyMDAwM0Y0MEM3NjNCMTFFQTc1RjVCNEM2MDI4OTcyRTk0RUM1NworOjEwODczMDAwMDYzRTk5QzI4QzY1QjM1RDU0MDI2QjhERTNEQTNDOTVCRAorOjEwODc0MDAwQkQ0ODNGQUJGQ0E5OEFEMzAyN0VGREQ5REJDMkE2MTQ4QgorOjEwODc1MDAwOTdDMDdDNTNDMzRCMTlGMEYxMDM5OUZCNUM2QjAyNTAzQgorOjEwODc2MDAwNEVFNzc0RjI0OEU2MUY2N0EwQkZEMDJCNzBGQTVCRTNCOAorOjEwODc3MDAwQjMxMTVFQzJGNTM5NUQ2MjQyQkY2MTA3MkI0MUI5MTg4MgorOjEwODc4MDAwNDZGQTc2NzM3ODcwRkM1RTdGRkU0MzFEMTZFMzgzRDg0RAorOjEwODc5MDAwMzVEODBGQjM1NTYxNEE3MUMyQkM3QTM1M0I3ODYwQkM5RAorOjEwODdBMDAwQTk3OTVEQzgwNzAzRTMzOTU5MTU4RDI3MDJGRTEzQzc2MAorOjEwODdCMDAwQ0JGRTZBRTNGRDFFRTc1NzM2MzhERUVDRTlDNkY5Q0Q5RAorOjEwODdDMDAwNzZDODM0QkZEOTFBRkZFQUUzRkQxRUU3NTdGNDE1QzY5MQorOjEwODdEMDAwQzNGOTI1OEVGNzRGQzZGOUNENzZDQTM0QkZEOTIyQTc4MworOjEwODdFMDAwQUY4MUYxQjJCRkRBNzhCRDJEQTU2NDA3REZFMTAwRjlGMgorOjEwODdGMDAwMDQ3NDkyNUFCRUMzMzUwRUM2QkRDMzY1OTcwNTY1QjBGNQorOjEwODgwMDAwNUQ1REREOERBRUI5QTg3QkRENTNBN0ZCNjE5Q0ZBNjk4OAorOjEwODgxMDAwNTAzOTE3N0I5OTNBQkRBRTk4QjE0RDAyQTc4QkZGREM1QQorOjEwODgyMDAwRjRFNzc1NDgxN0M3NjdBRTJBMjU3REEyRDlENzk3NjJBNgorOjEwODgzMDAwNTVEMEM3OTc0QTFDREU1OUY5RUU3ODZCMDIxRTFGMDAwRgorOjEwODg0MDAwMzlBMjAyMUMwRjAyQkZBQkMwOEY1QjgxMkZCMTFDNkYxRQorOjEwODg1MDAwMDlEMEYzMjFCMEQ3RjFCOTBERTBDNUVGMEZCNzg0QTg2NworOjEwODg2MDAwRkM0ODRCMEQzREY1N0U0QTZCQjhERDNFQkVENkRBNkU1OAorOjEwODg3MDAwM0YyMzhCRkI3RDlCODJGMkZDQUI1MEFGRDVBNTg2NTA4RQorOjEwODg4MDAwMkZCMjlBRjM5OTlBNjg1N0IzRTZBNzUzRTBGQkM2Q0I4OQorOjEwODg5MDAwNTkzOUVBQzYzMzM2NzNCODdEMEREOTY0QjdBNzk2RUY1OAorOjEwODhBMDAwRUQ2RDgxRjIxRDkyNUQ0MUJEN0M4N0MyNjY1OEY5Q0RBOAorOjEwODhCMDAwNDVBODY3QUFEMDVFRTVFREQ5RjlEQzBGRjM4NUZCRjY5NAorOjEwODhDMDAwQTJERTlCODM3NjNBRTBENTNGQjc2RjJGRkE3Rjk3ODE4MAorOjEwODhEMDAwNUQ0RTdBOTkxRERFRkIzNjdDN0YxREZDQkYwRTJDOEIxNgorOjEwODhFMDAwNkUyNjQzNzlENjFDM0Y4RDBGN0ZEMkVCQjJEMTdFRTc0NworOjEwODhGMDAwN0ZFRTk5Nzk4Q0ZDOEE3MDBBRDcwQjNFMzZGQkQ5M0QwNgorOjEwODkwMDAwMDg2RkM4QTFDNEE5M0Y3NjVGMThGOTQwQjUyQjFEMjQ5NAorOjEwODkxMDAwMEFDMjc2RDREMzdFRDREM0YwQkRFRUIwOTNEOTEwQkVDNAorOjEwODkyMDAwNjkwRTkyNkI3M0U3MUFGRDg2NEQyOTNEMzJEQTNGOUI0MworOjEwODkzMDAwQ0E3REFDMTVGQUJGNkNBNkYxQkJEM0M5RjkyRDZDRjI5OAorOjEwODk0MDAwMUI2Njk5Q0EyMDIxQjlERjJEMkVDODQwN0JGRjBFN0MwMworOjEwODk1MDAwMzU3OTI4REVBMjg3NUFFRkQ4OUI0MEE3Nzk1OTFFMUY4OAorOjEwODk2MDAwQzUwMUNFNjA2N0EwM0MzQkMxQ0FFRTZBQzA4RkY5NTkxMQorOjEwODk3MDAwNjRBQzk4REJGRkJEMjU3NkM3NUU0MEZEMkIyOEY3QUFDNworOjEwODk4MDAwOTBCRUI5REMxOENBMUYxQzlFQzk1QUJEMDc1QTdBQTdFNworOjEwODk5MDAwQkM1NzMyMDg1RkFFMTQxNzUwMEZFNDJEODVGNzA5RjM2QQorOjEwODlBMDAwOTU3QzcxMDFGRDFEMjYzRTVBOEVGRThENzkxRTBGMDhBNQorOjEwODlCMDAwOEYwNjk5QzU3OEZBMzM5NzQ5RUYyMzVFNzAyOTUxOUU0NworOjEwODlDMDAwOUJFNzNCNzlDODdDNkI1RjI5NjY1NkZDQTQ2QzQyN0JCNQorOjEwODlEMDAwNkVENjczNjJBODU1MTlDNDg3M0VGRkZGNjlCRTNBQUFENgorOjEwODlFMDAwRTkxOUE2RkE1ODBGRDBDQjJCNDBFRjFEREM4RjYxNjgzOAorOjEwODlGMDAwQTdFQUY0MEExNUM4N0VCQUY0NTJGODhFNzRBMUFBMDU0MworOjEwOEEwMDAwODhDRjU3QzZGNjZGQkIxQURCODFFQzY4NDM3RjU3QjczOAorOjEwOEExMDAwODM3QTBFREFEMDBFRkFBQUZENUU3QTlEODNFQzJEQzYxQgorOjEwOEEyMDAwMUFFNEY3NEIwN0ZCNEJCNjNFRDhFRkZCMDlGQTczQzBDRAorOjEwOEEzMDAwNEVDNDNGRDU5QUU4NDMxODVCNDMwMUIyMDc2RTAxRkI3MQorOjEwOEE0MDAwMThGREZENjhDMzg3NTIzQUZGN0UyNEMxNEVDNTNGNDdEQgorOjEwOEE1MDAwMTJGQTZCREJGMzczNDEwMUI4QkE1QUJBQTdCQzY3NEY3RAorOjEwOEE2MDAwOTAxNzRCNjVEQjFBQjRFNzVBRTMwMkM1MjE3QUEwMUVDMgorOjEwOEE3MDAwRDgwMzYzOTcyQUI2NzZDMEZGNTVEODBGRDJBNzQ5QUU2MAorOjEwOEE4MDAwOEY2RDg3N0UxMkVEOTREQUI5RjJBMzQwMEZFRDY1RjU5NAorOjEwOEE5MDAwOUQyMTc4QUVERkNDRTM2NTdBRkQ4MUI4OTkyRjQ2RkU0MworOjEwOEFBMDAwQjk5RDM1MzMwMUUwNzRBNEZDRTAyNzdEMzAxRkI1NEQzRQorOjEwOEFCMDAwNjIyOTUzQTA2Q0U3RjYwRTdCREI0MzcyNDE3NDM3RkZFQgorOjEwOEFDMDAwMENCRjA3NjIyMEI3NzBERUY1Q0Q4RjYzMzk2NjYzRTFCNgorOjEwOEFEMDAwMzY3OERFOUZDNkRCNDcyNTk3RUMwQzYxOUNBNDdEMDZBQgorOjEwOEFFMDAwNEUzRjMzMThCOTJGMEJGMEI3MjYzQjk1RTRBMEUzMUQ5QQorOjEwOEFGMDAwQ0Y0MzI4QTcxQzk5MTU0QkQxRUU1OTEwRkQ3RTE4RTNFMgorOjEwOEIwMDAwOTFCMjk3MkQwQzVCRDBENzAyQ0Q3RTg4NjdGMUI4Q0JBMAorOjEwOEIxMDAwMjE3QjRGNDEyNkMwNUQxN0FDOEY2M0JGNDNFQTQ3N0Y3RgorOjEwOEIyMDAwNDBGRDREMTFBREVEQjA5RDVBM0Y1QjZDRDY3MkUxMDkzMQorOjEwOEIzMDAwRURGQjE1Q0I5RkZDRjA2MTk4NEY1QUIxM0I4NEU0QjYzNgorOjEwOEI0MDAwRkUxQ0I2NDNCMDBEQURCRkNCMUZFOTRFODQyM0E1NTgyNAorOjEwOEI1MDAwOTYyODBFQ0FCQTI3QTMzREI3RkU4QjA3QkIxRjA3OTQwMgorOjEwOEI2MDAwNjc3REUxMjYzOTlCMjU3QUUyNDI5MUExRkRDRUFDQUEzMAorOjEwOEI3MDAwQTFFRDc3RkZFMzhEMDBBRUNGRUUxNDQ2RkE5NUIxMTc2NQorOjEwOEI4MDAwMkY0MjdGNzJFMzQwOTlDNTA0OEM3MzY2NkFFNUQ4MjM0RgorOjEwOEI5MDAwMTdBOTg2RjJFMjhCRUFCMDhDQjQwQjQ0MzlGOTlFRUY0OAorOjEwOEJBMDAwQUU4RjYxN0I4MTk3NTlFQzdCQkNCRTlERDdDRkQxQkU4OAorOjEwOEJCMDAwNEZCOUY4QTM5RkRFODVGQUEwREE0MTdFRTg0NkNEMEVENAorOjEwOEJDMDAwRDJFMTNCREYyQjEyRkQ5Q0VGMUQxRThGMDczNUI5RTA3NAorOjEwOEJEMDAwMUEzRDFFMEY1QUUxNzE3NzUwN0QwQkRGQTdCMDZFMDE3MQorOjEwOEJFMDAwRTkzOEU1MEJENzRERDhGRTVGNUE1OEY4MkE4MDdEOEJCRgorOjEwOEJGMDAwQjJFM0U3NzcyOUQ0RkVCMDE1MUVDRjBBQUE0N0IwQkQ2RAorOjEwOEMwMDAwNkJGOTkxOUZERTA1NzA3ODc0MzhDRTY1MzcyNTgxRTM2NgorOjEwOEMxMDAwMkZDM0FERTc4RTZDMkVFN0U2RjlCOERFQzhEMkVDNEQ3NworOjEwOEMyMDAwODdBMzM3MzAxQjlFNzJFNThGNkU5NDQxREVBQzJERUEzMAorOjEwOEMzMDAwNkVCNDhBM0Y5RkYwREFBODVENjY5Mjc4N0I4Njk3RTNGMAorOjEwOEM0MDAwNkQ1NzRFRjg3Mzg0QTM1RDdFRDI4NUUzQTcwQTJDOEMwMgorOjEwOEM1MDAwRjUzN0Q0RjQzMTIxQTFERkIzN0Q3QzFEMDA2RTlCMTc2NQorOjEwOEM2MDAwREFBNTRFNjYyQUQyOTk4Nzc5RTIwQ0U4Q0M1M0M5RTE5RAorOjEwOEM3MDAwREYxMDc4OUQyOUQwQ0U1MzBBNEYzN0JFRUYyM0ZFNDczMQorOjEwOEM4MDAwOTc4MzBCMzUxMDc0NTA3NjY4RjQ5MTcxNEZDNzQ1NDgzRgorOjEwOEM5MDAwMEY1OUEyNEU2Rjc5MUQ0ODJGMEU5QjVFM0ZFRjYyMkMzRAorOjEwOENBMDAwNzc2NUYxNzJCOTJGQUYyMzk2MEY3QUM2MDE2RDUwMkVGQQorOjEwOENCMDAwRTQzQUM4REUzMUNGMkY0NzgzQjdDM0FGRkFCRDdFMEI4RQorOjEwOENDMDAwN0MzQUZCNjg5RDM2NEU3MDg0NjJCMEFFNTM2Q0JEOERBRAorOjEwOENEMDAwOEJGMURCQzU2RUIyRDdFMDdENjMzQzYxRkVEMzM1M0FFNAorOjEwOENFMDAwOUNFRUU1RjZENkM2N0ZCODFBRTMxNkVCOTE4QzRFMjdCQworOjEwOENGMDAwN0E0RjlCNEUyNzdBQURFOUY0MUNDNDdGMDI5RDdFQzY1NQorOjEwOEQwMDAwQUNFOUI0REFBQTNERDBFOUI5NTZGODMwOTc0NUE2NkU3OQorOjEwOEQxMDAwNkUwMjAwQTVDRkE3M0Y3MjE3NkFBQjdGQUVEREZDMzhBRAorOjEwOEQyMDAwM0NBNzdDRTE5NkJDNTA0NzNDODM5MTlENjg3MzcxRjlFOAorOjEwOEQzMDAwM0UyOEY3MjNEM0IwN0Y0OTZFQTZGN0EyM0I0Q0ZCMzUwNAorOjEwOEQ0MDAwMkY2NUYxRkU4N0Y0N0I2RUY1NjY5NDVCQTNFODM3OENBNAorOjEwOEQ1MDAwRjMzNkY3M0JDNkNCRTE5RDcyQjEzQjEyQjdDMEZCNDk3RQorOjEwOEQ2MDAwQUZDNEZENTIxRjFGM0YxOUJGOTRGQUI4REY5Qzk0NUYzOAorOjEwOEQ3MDAwNzRGQUNGMDk0NzEwOEU5MUY4RTVDMjQxN0U1OTNBM0EwQworOjEwOEQ4MDAwN0VEOTQxRkM5MjU2QzZGOTI1MkQwOUJGQjA5ODkzRjhCQgorOjEwOEQ5MDAwNjM2RDExMkZERjcyOEY4RkY4NjE4MDdGNjIyNTQ2RkUzMQorOjEwOERBMDAwODk5NTE4Rjg2N0RBQkQyNTU0REZEQzNFMURFNzZEODEzMworOjEwOERCMDAwOTc5ODU3OUY0N0I4MDVFN0ExOUUyREI3OEI2NDZGRjQyRQorOjEwOERDMDAwMzE5NDUzNURBQzdGOEYxM0Y5QjA1NjA4NkQ4N0I3QjNGQworOjEwOEREMDAwNjJCRDBEMkUwNUJGRjdCMkQ5NjA3RkFDRDNFODdFMkIwNAorOjEwOERFMDAwQzI4M0ZFNTBCNTE2Q0Y5MjdBRDk2NTlFQTE3Q0VDQTlCQworOjEwOERGMDAwRUMyOThEMjRFMEJGNDBDM0UzRTVCRUYwNUQzODdFMTc2QgorOjEwOEUwMDAwRUIxQjhGNzY2OUIyNzVCQTU3ODNGN0E2ODA3QUFGMTVEOAorOjEwOEUxMDAwOUQ4RkE0Nzc3NkEyREVGMUUzOTNDMzlERjU4NUFCMTkxMAorOjEwOEUyMDAwRTU4MDk5Q0ZBN0RDRjBEQjBGMUYxRUE2OUY1RjZCNzA1QworOjEwOEUzMDAwM0NBNjNENEY4M0VGMUZGMzVBRTlFOUEwRkE0QjEzREYzRAorOjEwOEU0MDAwNTcwQTYzMkRGOUZFRDc1NkVEODFFRkZGRDUwQTFGNUY1NAorOjEwOEU1MDAwODNDRjlGQjZFMkYzMDdCREJDRkY5MUYwMkNGOTM4OUU5QgorOjEwOEU2MDAwMjVERkQ3QzNGMzExNkQ5RERFM0E3RDNDQkY5NTA0Q0Y1RQorOjEwOEU3MDAwN0ZGNEZBNDc4NUU3MjM0OUU0RUI1MTJGQzE2MThCRTE4OQorOjEwOEU4MDAwQkUwMEYyM0JGQUVGRUJDRThERjVFMzdFQTgwNTFDRkZBQQorOjEwOEU5MDAwOTlEODhGNEJFMUZEODA2OUZGOTkwMDc0M0VFNUYzNzUyOQorOjEwOEVBMDAwQTE4ODA1NUY0MkJCNjM4OUYwRUJFREVFRjVDQTlBMUYxRQorOjEwOEVCMDAwQTFBQzQ0QkI3QUNCM0ZCQjY5M0YwMUY0RTBERkJDREYzMAorOjEwOEVDMDAwQUM5Q0I3RjkyQ0U0RjExNDFCOTc0Mzk3REY3Mzc4M0QwMgorOjEwOEVEMDAwQzY2OUJFNDZGRkU5NTZGRDNGQUZEMUQ3NDhGQUJGMjg2NQorOjEwOEVFMDAwNDFGRjYzM0Y2Njc5RDdDNTc4M0NBNUMzMUZDOUY3MTExOQorOjEwOEVGMDAwQkVGQTJFNDJGOUI0RjVENjJDMDFGREJBN0NCNTQ3NDAzNgorOjEwOEYwMDAwRkJERkFGRTk5NzhENUVFRUNGRThFREI2NEEzRDgyODQ5OAorOjEwOEYxMDAwRjU5QjY1MjEyNjE4RkEzQjYzQjhGRUNDNzAwMDdDRTMxNAorOjEwOEYyMDAwMTFCRUNCN0RFQTU5RjhCQ0Q3M0I2MEVGOUQ5NjNENTQwRQorOjEwOEYzMDAwMUQ1MDJCQjAzREM4RTk0QTFDNUYzREQzMjhBN0Y1NzlFOQorOjEwOEY0MDAwRDhDMkREQUMwRkY1MEJCOERGNzEwQkJBRjI2QkZBMTJCOQorOjEwOEY1MDAwRkFCOTgwRkFEMUU0N0Q5NTRGQTcyQkRFREZFOUVBMUI1MQorOjEwOEY2MDAwODA2RkJBMDZERjBDN0M5QUUxMzNFMzY1MjQzODZGNDZFNAorOjEwOEY3MDAwMzg3OTdGOTcyNUMyOTlBQzNGRERCRkQ2RDc4OUY0Njk5MAorOjEwOEY4MDAwNDI1QzY3RTFBMEJFQkUxMkZCNzNBREIxQzU5ODZGOTBBNQorOjEwOEY5MDAwN0Y3NTdEMEQ5MjI5MTVGQkRGRTJFMDcxRDQyRENCRUVCQworOjEwOEZBMDAwQUVDMzdDODNBRURCRTQ3MjQ0NDlFRTUyQUVFNzk0NjUxNworOjEwOEZCMDAwODUxNDU3QkQ1NkVCRDcwQ0ZGNDA3QjQ3RjdGODQ5NjU0MgorOjEwOEZDMDAwMzRFRTcyMUNGN0MyNUFENjgzNzIyMzAzRUQwNDhBM0YzMworOjEwOEZEMDAwQzgxMkM2MTdCMjlDOUQwMThDQ0JBRTE3M0ExQjE3QTFDNQorOjEwOEZFMDAwMUVCREM4NERGQTk2MDVFNjVBQzZBN0Y0QTcxRTdGRDI0NQorOjEwOEZGMDAwRTdDRDAyOTUyM0Q0NkZBNUZBNzI1QTY3MzNEQTQ5QTNGNQorOjEwOTAwMDAwQUVFRkVDQjRCNEFCN0VBOEQ5NTUzMEJGRjVDM0UyMzVCMgorOjEwOTAxMDAwRTBBM0Y4OTY4RURGQTFFM0YwRjVBQjBCMzcwQjg4RUZGQQorOjEwOTAyMDAwRDQzMjE4MTI1ODMyMzVEQzQ5OUJBREI2RTIzOEVCNDNFNgorOjEwOTAzMDAwRkJBOTE0RTg4NUZBN0JERDMyRUUzN0Q4REY1QTFEQUU4NgorOjEwOTA0MDAwMDc5MTFFQkYyRTVDN0FCREU0RTNGMTdBQjg3RjQ2RjE0QQorOjEwOTA1MDAwMEUzNzk3NUJGNDAxQ0FDNzlFRjM1QUVFMUZFOENGM0I2OQorOjEwOTA2MDAwNUE2NDU1MDJGRDczNEM1NjMyMzA1RTc4ODdBNjA3MTk1NAorOjEwOTA3MDAwMEIwNTJFRjNGQ0Y3RDcxQjlDNDc5Q0M3M0I0REY1QTM3NAorOjEwOTA4MDAwOENEMzNEMEJCOEM4QkVDMzMwN0MyMkREQkNFNkUzRkUwQQorOjEwOTA5MDAwNjg0Nzc2RjgzOTJFMUY0MzIxQTQ2QjI4QkY4MEY4NjdGNAorOjEwOTBBMDAwMkUyODdCQThCQzlGQ0FGMjQwRjk2NUFBMUZFMEY1OTk1QgorOjEwOTBCMDAwMkM4RjBBQ0ZEMEVFMEZENDRFMUFFOEU3NERFQUQ3M0RGOQorOjEwOTBDMDAwMzBFRTQxRkFFRTFCMjhGRjkxQkVFN0YzRkFBMzFEMjcwRAorOjEwOTBEMDAwNjE1REY5RkM3QjQ1OUFGRjY3OTI5QTgxRkJBMzk3NDdGNAorOjEwOTBFMDAwMTc1MzlDNjg3RUY0NUE3QUFFNkI5MUVCMzAxRUY3NzI4MAorOjEwOTBGMDAwNEI3RjdCM0IzQzJGOUZCRjU4NDZCQjdGRkU5MjdCNjhEQworOjEwOTEwMDAwRkY1RUVGRkY1MkY0MkI5MERGMTU2OTA2RDk0NTQ1QjY5NworOjEwOTExMDAwRjAzNkY3MjBCRjBEQzJEMUFFRTU5OUY1MzUyMDFEQjk2NworOjEwOTEyMDAwNTRENkRGNTEwRUVENkIzRTZENkYzN0U0Mzk3NTUyRkU0QworOjEwOTEzMDAwNEM4QTIyN0Q5RTE4NTdEN0U1RTBDNzBFRjU3M0RGRTkwQworOjEwOTE0MDAwRDFCMTY5QkU4Q0VEODVGMTNGNzMxN0M3NjM0NEQ3RjU4NAorOjEwOTE1MDAwQjIxNUJGRThGMzRFRDZCRjNFRUY2NDcyNDZDNzlGRkUxRQorOjEwOTE2MDAwN0U3RDcxODVDQ0YzN0ZFMjA2QkNBNDk0MzQ1MEJFQ0ZFMworOjEwOTE3MDAwQTU4MjA2QTdDN0E1RjExQkFGMzcwQkM2NzlCMjhDRTg0RAorOjEwOTE4MDAwNDM0MUZBOURBNUY5NzE2NkJEQTA4RkZCQjEyMzUyRTQ1RQorOjEwOTE5MDAwRjdFMzdFMDM2M0I3NTU1OEUwNzc5NDc4M0JEMEIyMzQ1OQorOjEwOTFBMDAwREM2MDQ3NzlEQzlENDJGQkY3NENBNjM4QkY1RUFGMzFFRgorOjEwOTFCMDAwQzlGQzJGRjA3MzNEQzI5QzJBQ0Q2N0MzRUQxOTcxQjQ3MQorOjEwOTFDMDAwM0IzNjM0RkQ1QUM2RTA0QURBODRDRkFBNjJGODE0RkE3NAorOjEwOTFEMDAwNEYyQzQyRjk3MkJCODdGMjMxMUE5QjRFNTRCNTI2RjREQworOjEwOTFFMDAwQkZGMDk5N0Y3MzYxQkNCNzcxQzI2QTNGQzY1RDE2MzIyQQorOjEwOTFGMDAwRTlCM0M0N0MwN0YzQjg4REQxMUI4ODZFNjNBRDQyQTM3RAorOjEwOTIwMDAwOTVCRkY1NjYzNkU3RUI4NTk4MjIyMzUyN0Y0NzEyRjcyNAorOjEwOTIxMDAwOTE5Qjk0MEEwN0M2Mjc5QTYyQzZGRDFDRDA5MDBFQTRBMworOjEwOTIyMDAwOEZDNUVCQ0NFRjEzRjY3MzQ0RUM5RkQxQkM2M0I4OTlCOAorOjEwOTIzMDAwODc3QTZGOEQ4REU4NkQwQkUwMERGREMwNDI1MDk3Rjg3OQorOjEwOTI0MDAwN0MzMzNCNEJFM0M3NUVDMkU3N0YzNzNDNkY2NkNCN0MyQQorOjEwOTI1MDAwREZDREM1NjI2OTU5ODM3NDkzMTNFOTY0QTg5RjNDOTU3NworOjEwOTI2MDAwMDJFRDZGRkEzQzdBN0U0NDM3RTlBOTdCREQ3QTE5RjQ4NgorOjEwOTI3MDAwMTZFMDNGNUNBNkQ5MzlDNUZDQkIwRENCRThGRkE0RjVEMQorOjEwOTI4MDAwRUVCNTAxMUZBRkI5RUZFOThCMDNFM0ExQkZCMjQ4QzA1MAorOjEwOTI5MDAwMjY1M0Y5MDVDOThGRjYxNzJGQjNEOEQzMkZFQzI1N0JBQQorOjEwOTJBMDAwNTYzRTRCMDgwMUZGQjdFRjdFRTFCOTAyRjJFNzM1N0I4RQorOjEwOTJCMDAwNkNGNzBCNjQ4RkU5NjVDNjdBMThDQ0E3MkI3NUEwQUM0OAorOjEwOTJDMDAwQkEwMjUwMUUzQjUwOEU2MTc5QUI2NkM3QUZCOTZGRjdEQgorOjEwOTJEMDAwMEJFRDY0OUY4NDYzRkUwNDNENTlDNzc4N0NGOTlCRDZFRgorOjEwOTJFMDAwOEY1RDgxQUIzQTMxOUYyODU2NkMyMzdGMkZENUM0OEY3OQorOjEwOTJGMDAwOEZGQTFENTRBRjI4Mjc3MjM3QzIzM0VCQjY3RTA5RTNDRAorOjEwOTMwMDAwMEQ4RUUwRUIzRTk0MDM2MzhBOEZBOTYzODFGRUM3RDQ4MAorOjEwOTMxMDAwRjIzNDE5NTZDQUM3RUQyQTVFNDU3NjQzOTdCNjJFRjA0OQorOjEwOTMyMDAwQkZENUE4RjcwNkQ3QTdEN0I0M0U3QzNEQzI5NUJEQjQzQworOjEwOTMzMDAwM0U5RUIyNUU1QTJGMUI5NjI5RUVDN0Y3RTMyRkE5RTQ5MworOjEwOTM0MDAwRjY4NkVDRTRGQjBBREJGRDlDMUY3NkY4Qjk3RkJCQzMxNQorOjEwOTM1MDAwQ0ZGREQzOENFMkJCMjlCRTkzMzJDMzQ2RjUzM0I0QTcwRAorOjEwOTM2MDAwNTk4RUVGRjA0QjlBM0NFN0Y4RDgxRDhDNzRGQjEzRUM0OAorOjEwOTM3MDAwNTY3ODFGMkVBRDQ0RjlFNkNCQzI3REQ2QkE2MkU5MjZGNworOjEwOTM4MDAwQTRFNzlGNjhGRTI5QUNEMzVEQjQ0RTQ1QkVENDA4NUYwOAorOjEwOTM5MDAwQjdERkY4RkQxNkVCNTYzQUJBNzU3QkEzMjU0MkYyMkFFMQorOjEwOTNBMDAwRDlCQTVEM0U1RjBDNUJDNURENUVEMEYwRjA0OUUzOUY0RQorOjEwOTNCMDAwN0U4NEQzNTlFRUVBNzdFMDNFQ0NGQUUyNEQ4NkJDNkE3MQorOjEwOTNDMDAwRDc4RUQ5M0Q5ODBCQURFNzU1QUY0RTRCQUY0NUI5NkQzNAorOjEwOTNEMDAwMUVGNzhEMkZGRkMzODdGODlERjkwRkE3QTU3Q0ZDNTRCRQorOjEwOTNFMDAwOTM4RkFGQjczNDUyM0I1ODYwNDVDQTI2MzlDMDc4REVGOAorOjEwOTNGMDAwQ0I0MDlFOTg3MENBNDlEMzdCMDNGM0QwQUUyNEQ2Njc4NgorOjEwOTQwMDAwNkM2RUY4MzBFRDU3MkYwQTg4MENGN0M3MTczMjYzNUU4MQorOjEwOTQxMDAwMTk4QkVBNzlDMTNDMEZGNjBEMDk1QzUzNDBFMTFCMzExMQorOjEwOTQyMDAwMjEwNDk4NjI0REQyNkM1REFFMThGMkMzRTZDRDlEQkRBRAorOjEwOTQzMDAwMEZGN0UxMTc2QkZCRjAyMDVGMENERjk3OThGMkM2QUVEOQorOjEwOTQ0MDAwNjg2QzBBMzc2OERGOEZEM0RGNzFDMkQzNUM4NURCOEQzMAorOjEwOTQ1MDAwNzNERDZFRDJBRkYzQzJGM0MzMEQwOUZCNzE2RkZFOTdEQworOjEwOTQ2MDAwNjg5OTg3N0U0MUI2OEU5NzcwQjhBMTY0Mjg1RTE2ODU4QworOjEwOTQ3MDAwMDU4N0FDOEM4QzFGMzMzRUVBMjQ4RUFGMjYwRDVGNjZDOQorOjEwOTQ4MDAwRkM5OEYxQjA3OEVFNkM1QTdGRjNGQ0RGNzA4NTA5M0ZGMQorOjEwOTQ5MDAwNkYwMDdFMzA1RkQ4OEMwRkM2MjI5NzIwRERCRTM5NUYwQgorOjEwOTRBMDAwNjQ2ODFGNEYxNzY3REEzMTRGNjBGMTZDODE2MTdFRDFCQworOjEwOTRCMDAwMTIxNjRBRTdGOUMxRUFBQzY5MDlGMDlBRjE2OEM2RDcxMQorOjEwOTRDMDAwRTJBNzU4QTgwN0ZBNUQ3QzlGODdENkVGNTUwRDNGNjI0QgorOjEwOTREMDAwQ0Y1RjY5NUU2MTk4NTcwNzlGRDcxMTlFQkYyQUQzQkNBMworOjEwOTRFMDAwMkU1M0NCOUZGNUMxRjc0ODNCNDg1QkM1NEE4RkYwRjkzNworOjEwOTRGMDAwMkM4MkY5NzRDODQzRjVDOTA5NTZEQjhDNzRCMkM0OTQ0NAorOjEwOTUwMDAwQjc2MDg2Q0YwQ0ZGNEM5NDgzOTM4N0VFRTM1NzY0NkI3MAorOjEwOTUxMDAwRkJGODEzNTk0OERCQzdDRkEwNjMwRDIxRkZCMDc5MEJDRgorOjEwOTUyMDAwODM3Q0NFRTk2QjYxNzRGNkMwNzhEOEFGQzAyMjAzNjU0NgorOjEwOTUzMDAwMTlGMDNCRjM3OUVGQzY3OUYwRUY1NTAxNTFDMTNDQzEwOQorOjEwOTU0MDAwRDlGM0M3QURDMUY5ODc1OTM4QTNBNzA4RURGRDdFM0IxNAorOjEwOTU1MDAwQ0E5MUNCMTg5OEIxRDBFRTQyOTgyNEVBREI3MDQzMEE0NgorOjEwOTU2MDAwOTVGNTdFOEY3NTdFNkEyNzNEMUU2MUNEREI2OUZGNURCNworOjEwOTU3MDAwQzk5ODNCMjFCOTdDNTkxNTcwRDA3ODY2M0I2NTY2NzlFRQorOjEwOTU4MDAwNDkwNkNBMEIzMzNFNzQzQ0NENDNCQ0E0MTE1RTI2OUVGMworOjEwOTU5MDAwMEU1RTVFNDQ1RDg1RkUyQ0M2RDE2MDFERkJBRjY1RUNBMgorOjEwOTVBMDAwQTFGMkMxRkQ2Mzk2QUY3MjdCMzI5QkQxRkVGRkI1RDlBQworOjEwOTVCMDAwOTk5QURERDE0QzcxODcwNTlBNUUzODY0Njc4RDRGQjhGMgorOjEwOTVDMDAwRjkzRTcyNDU4MjdDRkM1NkIwRUVEQUVDMDQzQjU1REY4NgorOjEwOTVEMDAwNDc3NkIzM0VDMkRGOTUyRTc3OEYzODkxRThFRUEzMDEzMAorOjEwOTVFMDAwRkEyMEY5QTVFNzZCNDYyODVGNTNDQzU4QTY1MDVDMkNBRgorOjEwOTVGMDAwMkQ3RDIyQ0IwMEJCOThGMTc5ODMxRjczNTNCNjFGREZGQgorOjEwOTYwMDAwMTdDNkQxMDg5OEY5RkM0RkQ3Q0Q1MzA2RDc2REZENTUzNQorOjEwOTYxMDAwREIzQjUxMUVBNzJDRjk1NThDM0E1Nzc4M0U0NzlBQjYzQQorOjEwOTYyMDAwNkU3NURBQkEwREQ4RDFBNUYwM0UwMUJGQzczQTM1M0IwOQorOjEwOTYzMDAwQUM1NDhCRTNFMzFGMjgxRjJCNTZFM0MzRjlBRkZBM0E3MAorOjEwOTY0MDAwQTY5NDgyRkY2MUM4MjNFQzI0N0NFQkVCMDk0RTQ0M0ZENworOjEwOTY1MDAwRjI2NTI0MjA1MUNFQjA4REI5QzgzRjhFRENDMkYzMzEwMworOjEwOTY2MDAwMTYzMjY1MkJFNjA3MkQ4Q0RBOEYyNUY2MTMwOTRBMDQ4RQorOjEwOTY3MDAwNDc2NDdEOEExNjM3MDk1MTNGOEI4MkJDMUY1NkNBRkQ0RAorOjEwOTY4MDAwQkMwMUJBOEY0MUZCODRGQzQ3OUIwQjRDNDk2QzlGQzlDMgorOjEwOTY5MDAwNDJFODNGNDE3RkQ5QThFRkQ5QkE4NDcxQzYwRTFEMzc4MQorOjEwOTZBMDAwNTk3RkU2NzZBMkI2N0YyQjNBNDNBMTUwODI5Q0RFQUU2QworOjEwOTZCMDAwRDlDRkM3MDI5NUREQjZCMUM5RjFCN0M4RTU1NUE1ODRDNAorOjEwOTZDMDAwQkNEODIzNDE1N0EzNTU1QzRDRUY0RkQ3REYwMzc2MjIxQworOjEwOTZEMDAwQkJFNkM1NDQzQkQxRUQ2ODdBRjFCOTBCMTJFQzQ0RDYzOAorOjEwOTZFMDAwRjQyMkVFRkI3RjU1M0JGMUU1RUNBNjE3REI2MTdFN0ZCNAorOjEwOTZGMDAwN0ZGQjlGMjg3RkZDNTgzMzA4NENDMEEzMzczQTk1MUQ0OQorOjEwOTcwMDAwRjVBMjdDOTA0OTdGMTUzNjgyNDc4NUM5REY5MjMyMUVDQgorOjEwOTcxMDAwRTkzRDI1OUFBNzRBMDlGOUIyNkY2NjJCMDRCRkI3NThFRAorOjEwOTcyMDAwQTVGRDMyNjhEQThEQUVCODU3MEEwOTg4QjdCQkI1Qjg1RgorOjEwOTczMDAwMTkxMEVFRjhEOTlFQzQ3NjdDREVGQTc4NEU5NzRDNzBGQworOjEwOTc0MDAwMzhGNEYxNThBODk1RjJFQjY3MzJEMjIzN0ExRTg4Q0UwRQorOjEwOTc1MDAwRDc3QTNGNDdCMzhERjFCQTUxRjBGM0QxNkNGRjUwN0UwOQorOjEwOTc2MDAwMTZDNUU2Nzc2RjQ3MzlGMUEyNDg3RUQ4NzcwMkI3RDBBMQorOjEwOTc3MDAwN0I3MzNDRTBFMzZDNkUxRjhFMTEyMzFGQTM1Q0U4NkRDRQorOjEwOTc4MDAwN0NFRDNCMzc0M0JCMTUzQjlDMjE1NEMzQ0JCRkY3RTE3QQorOjEwOTc5MDAwMEZBQjE0QzQxMzVGRkZGOTRCMTZERjU3ODVGMzJBOTEwMworOjEwOTdBMDAwNjREQURGMjhFMDcxMTg0N0FCNDBGRTZCNEE5MTIzQkNCNgorOjEwOTdCMDAwMDM5RTg3N0Q3NUI5MzkwOTcwMURGNjM1NTA3OUVDMEMxQgorOjEwOTdDMDAwMEVENzMxRThCMzQzQzE3NjlCMUFDOTVGRjRGMDdERUY0MQorOjEwOTdEMDAwNjM4QTkyQzE0OEFFMzBCMjI3NDQyNzdGQkE3Mzc4NUM1RgorOjEwOTdFMDAwRDg5REMzRTM3OTUyMEVDN0I3RUJBNDQwOEI4NDc0REREOAorOjEwOTdGMDAwOENGQjE2NTI4Q0YyQTA1RDI3MjU3QUVGMTAwNDRCN0I3MAorOjEwOTgwMDAwNERFRkNGNzUxMjg0MzNFMjJCQ0REQ0RFNDFFRjcxM0U5QworOjEwOTgxMDAwRDg1RUY0MzI4MzdERTNDRkUxNzZCMjdGMDA4RTM0MEVFMgorOjEwOTgyMDAwODdEN0RDNEYzQTdGQUZGMTlGMTk4RTE1RDk1MzgzODhDNAorOjEwOTgzMDAwOTdDMzNFMzUzNzg3Qzc1MUI4MUM3NkJGNzA0MDk4MzhGQworOjEwOTg0MDAwMUE3OUNDRjNGNTJGMDk0QTJFOEFFQkREMkVDNDRCNDA1MgorOjEwOTg1MDAwM0U3NTk0MUU1QjQzNzJBQkM4RDU4Q0U3QTQxMkVDMjcwRgorOjEwOTg2MDAwODE5RkJCRTFFNzJBMDZFREQzRkU2OTczMkEzMTdBQ0RFOQorOjEwOTg3MDAwOTQwNzQyNDNFREFENzcyQjRGQ0M5QjgzMDVFREZDQzRBMQorOjEwOTg4MDAwOTVCQUVDOEQ0MTE5RUNCOTc3QjQ2MjkzMzI3NjJEODY5NgorOjEwOTg5MDAwRkEyRkFERTVGNkQ5NjJCNENGNDIyNEI3MEM3Njk3RDk0QQorOjEwOThBMDAwM0U3MzgzQkU5RjAzNzRCMTI0MjBDOTQ4MTc2NjNCQUQ0NQorOjEwOThCMDAwQTM3MjFFRDkzNTFENjBENzYwQkVGNjUwM0I4RENCOUI4MQorOjEwOThDMDAwM0JBMzM2QTY0MkJEOTc2QjQ1RjIzMzVFMkVFRDdCRkU4MQorOjEwOThEMDAwNDJENDE3MzU3Njg1RjQ0NTY5RkY5RDczRThGQjI0MUE1OQorOjEwOThFMDAwQzdBREY5Nzc1MDlGOUY3NzA4QTVDNTRCRTBERDJCQjUzNQorOjEwOThGMDAwNDdERDhCMTNENkZCRTU5QUEzRTNEMTJGRDg5QTI0QkY3QgorOjEwOTkwMDAwNDI4RkQzRUNCRDk1RTc3RkJEN0JBRjEwNzcyMkRFNkUzMworOjEwOTkxMDAwMTM2REQ4RUZDMjcyMEZFNUFENEUxM0REMzRDRUUyOEQ3QworOjEwOTkyMDAwNjJEQzQ5Mzg1NEQzQTc2NTBGREE4RDRDQUNDRDdFMEQ3RgorOjEwOTkzMDAwRjE3MDk3OURFMUY5QzE4MjlCRkEwQzc2RUVDMkE4RDEzNQorOjEwOTk0MDAwOUU4QjM0ODNGREEzOUNCRTFENjhCNkZGQ0M3NkNDRjIwMworOjEwOTk1MDAwMUNDRDdFQTk2MDE1NjhCRkJDRENCMjkzMUQyRDE5QjQ2NworOjEwOTk2MDAwNjM2NjI1RDlGRkQ2RUQ5OEYzNkNGNURGRDVFODk5RjY1NworOjEwOTk3MDAwMEY2NjQ5RDZGQkZCOTc2OEZFMjkwQjcxN0Y3MDlBRjgzQQorOjEwOTk4MDAwMTFBREQ3QjE5MEE0MjBGRURDQjdCQzQwRTczQURDRkZCNAorOjEwOTk5MDAwMjU4NkFEQzZCQjMzQzdBMUVGQzc5MUJDREQ1QTkxNDY0MgorOjEwOTlBMDAwNzlENzdCNkUzRDJCQTc4RkQ2NEJCOUJGMTZEN0ZGMDU1NgorOjEwOTlCMDAwM0JDOUMxNjRGQTJEMjUyQUIyNjI5ODk4MjcyQUQwNTM1MAorOjEwOTlDMDAwNUZDRjMxRDExNDk2QTgxRkM2MjRDOTUzRjg3MTBFOUZEQQorOjEwOTlEMDAwODdGRjM2NjY0MzNGM0IzM0M2NTQyQkJGNTRBRjA3RkU2OQorOjEwOTlFMDAwRTg3NDhDNTE0M0ZEOUU0QzgwRUY4NjYyMUJDNUZENzU2QgorOjEwOTlGMDAwQkYzNEM1Q0VDRkZCREE3N0FEOENBMTdGM0EwNkUwNDMwQQorOjEwOUEwMDAwMzgxNDgwMEZFNTcwNTEzNDhEQ0E2M0EzNUU3QThFOEI1MworOjEwOUExMDAwNjZEMkIzMzg5QTQ3REY0QkEyRTNFODc5NDZCNDg4REVEMgorOjEwOUEyMDAwOUYxOTNEOUJDQUE1RDE0OUY0MUMxRjJEQTdFNzU5RDEwOQorOjEwOUEzMDAwRjNFOTc5MzZFODJEQUM1NzE2QURBM0U3ODRFODNGRDNCOAorOjEwOUE0MDAwRkI4OUQxMzlGNDNDMjczQTlCOUVBMUU4QjdFOTdCNzlBMQorOjEwOUE1MDAwNzQzMTNEMkJBMjRERjQ3RTUyRjQ3QTJBNTc0NjZGQTRGRQorOjEwOUE2MDAwNzI1NTc0MjUzREFCQTNERkE3RTdCOUQxMzY3QUQ2NDQ0QQorOjEwOUE3MDAwNUJBOURFRTRFODA2MkE5RjE3QkQ4NzlFRTc0NzM3RDEzQQorOjEwOUE4MDAwQjMzNkJBODVCRUVCRkM5Q0E2RDlEMzJGMDVCNkM5OTRENAorOjEwOUE5MDAwNkZDRjdBQ0E1MDNFMjZFM0MzNDM5QTNDQUVDRjUxRjcwQworOjEwOUFBMDAwMjJGREU5RjVGNjZCRTcwRUNDRjUwRUU0MEM5Rjc3RjM5QgorOjEwOUFCMDAwOUFCNjVFOUY4NDhFRkMwODhGRDNFQUVCQjYzRTMwN0M2QworOjEwOUFDMDAwMUM4MTk1Rjk0NkQ4QjdFMkYzN0IyNjQ3RTFGNDJCNzU2NAorOjEwOUFEMDAwOTJCREIxQjU5OTUxM0U5OEE3QjI1NzQwNzlEMzE1OTAzMAorOjEwOUFFMDAwNjY1OEQxOTEzQkMwRjNDMDhBNzIyMjQ3NTE3RkI4ODMzOAorOjEwOUFGMDAwRUZFREM1RkRBODRCNjNCREJFQTk0ODJGMjE1RkVBNTQxOQorOjEwOUIwMDAwRTg2RjRDQkI4RERDNkI4NUM5MDI5Njk1MDYyNkY3QjBENQorOjEwOUIxMDAwQzE3ODBFRDg1NzA2QkQyNjA1NzRGQkFENzdFNjI0ODRDMAorOjEwOUIyMDAwRTdBQ0UyMEFCMjVGQjVGREU0RkRCNzhFNjVFODc3NkM5RAorOjEwOUIzMDAwNzVGNDA4MTJDQUNCNTU4QzI1REFFMTVCRDcyRTdBMzgzQQorOjEwOUI0MDAwRjE5Qzg2MTRFMEZDMzk2NjFEN0IxQUUzNjQ0NTlENEE0RQorOjEwOUI1MDAwM0Q5RTI3MUNCNzU5N0QxQTUzM0M0QkUyOTFGQTU0Mjg3RAorOjEwOUI2MDAwOUZGOTQ4RUM2OTdDOEVFRjhFRDdBN0MxRjNFQzlEM0Q0MQorOjEwOUI3MDAwNEZBM0Y4OTlEMEQzNTdFRjg2RjIzOUNGQjE2NzMwRkNCNQorOjEwOUI4MDAwNTRERUFCNENGNTQwNzlEMjAxRjUxOURDMjZBOUVBOEJGRAorOjEwOUI5MDAwNEM0RDU3MTA5RTc4NUIzQUMwQjNGNTFEMzBCNEEwNUNCNQorOjEwOUJBMDAwRjM1MUE3MDg2RUM5RTBGQTgzRERGNjQ0QzJCQUE0MTRFMworOjEwOUJCMDAwRjdBQTIyRkMzM0ZGMjZCOTFDRTVFQzU2QTkyRjI1QjNFMgorOjEwOUJDMDAwNkNFOEZBNzRFMUJDNzE5RUEwNTdCNjZCRkJFODcyQzJGOAorOjEwOUJEMDAwN0E4NDAyODIxRTBGRjQwNTEyRTI4MTVERURBRjUyM0NFMQorOjEwOUJFMDAwQjAyQjU1QUVDMzUwNTdGRjM0MjYzRkE0MjAxRDczM0YwMgorOjEwOUJGMDAwMjE3NUNENThEMjRGM0FERDAxN0UwREY2QTQxNEUwNzRFNAorOjEwOUMwMDAwQjc3NUMwREVCNEM2NkYwOEYxNUJGNUJGMDdCRkZGOUUzNgorOjEwOUMxMDAwQTNDOUFGMjRGODdEMDlFNzExMUM5OThGRUIwMjlDMkY5MworOjEwOUMyMDAwODE4RjJGMDg1NDI1QUY3N0I1ODY3RjMzOUVCNzRBRjJEMAorOjEwOUMzMDAwNTk4NDJGMzdCM0M1Q0EwN0Q3QUQ0OUEzRUY5MUYwRkFCRQorOjEwOUM0MDAwRURGRjY1NzQ1QjEzMTgxRUFGQUNEMkNCRTNDQzVBN0UyQworOjEwOUM1MDAwNUEzMjc5QjMzRkM5Mzk5MUU2QzAxMDM5QzdFM0E1MzIwQQorOjEwOUM2MDAwQzhCOTcxQzlFNTVDNkQ2MDA0Rjk5NTI0REZFMUY2ODAzRgorOjEwOUM3MDAwOUVFRjEwRkU3RTYwMTQ3MUZEM0I2RDcyMURFNkJCQzQ0RAorOjEwOUM4MDAwMjYzMkYyMTNDMEJFNkNDN0ZDOUQzMTMxQTU4MkI2QjEzRAorOjEwOUM5MDAwNTAyODIzMUUyQkNFMjYzRkJEMDhFQzBEQTk4MjYxQUFCOQorOjEwOUNBMDAwNjMwRjNFMkZBOUNDQjQyRDJBQzNCQzA2OERERkU0QTZEQQorOjEwOUNCMDAwNDAyMkJGRTlGQTdFOTAxRjc1QkFDOEVBQTI3MzE2NDAyNworOjEwOUNDMDAwQUY5ODRGQjg0QkMzRDM2MDNGM0MxRUIxRjY5NkRDQUVBNQorOjEwOUNEMDAwOEUwNDM5RDgxNUNBQTNCMjVFM0YxOUZEQkVBNTdEMDcxMworOjEwOUNFMDAwNzk0MUZCRkQ5N0Q0NUFFNzlCRkM2QjQwRDRFQzlDN0VGQQorOjEwOUNGMDAwMTVFOTNDMzY4NUM5NzRERUI5RkQwOEM5QTc0QzkwNEZGQgorOjEwOUQwMDAwNDIxMTBGMEZFMUY4RjlEMUQ0ODczMTRFRkJFQjQwQjY4OQorOjEwOUQxMDAwMjZDRkU1RDRDQjNERkZGRkU4QjkwMzdDNzVFMkE3NUExNworOjEwOUQyMDAwNzkwRjlFQUIxODAzN0E0ODQxMzk1OTBCQjA1N0EyOUU2MAorOjEwOUQzMDAwNzNEMEJBMkI4Q0FGQTM1MkNCRTIzRDAyRTFBRDA3RkQ0RAorOjEwOUQ0MDAwRTY5ODhEOUZDRkQ4RUZFODU2NDlFRjM4MzI2NUNDM0Y4MworOjEwOUQ1MDAwRDlFNThGRUMwREY4OTNGMzg1OUNBNjk0RTNBMkZFNjEwMAorOjEwOUQ2MDAwRjM3NTMzREQ0MUNDQ0I5MTUzQjFGQzJBOTRFRkFDQzFGOAorOjEwOUQ3MDAwM0NBMTNFQTY5NUVGNzQ0RkZFRUFGMTg3M0YwNEFFRERBRAorOjEwOUQ4MDAwOEZGQjU0RDUwMUY1MzVBNDY3QTBFQjNGMjA1Q0VBOTkyMQorOjEwOUQ5MDAwQjI0NEYxRTE1MUVFM0ZFOUZDMzlDODRGNzJCOUNFNEYwMAorOjEwOURBMDAwNEQ2NTI0MEZERkM1RkVGNUZFOTJEOTM3RkZBMkM5Q0Y1RQorOjEwOURCMDAwRkVDMEYwRjY4RDRFRjdBNzZEREY2OEYwQkUzMzAyRkZGMAorOjEwOURDMDAwQ0Y3Q0ZFQjVDRERCRDg2MEZDQ0Y5M0ZCNDZBRkE0QTAyMworOjEwOUREMDAwQkQzRDk1MUQ5RDg0NzFBRjVFNEVGNzhDQzdGOTU0OENDNworOjEwOURFMDAwRkYwMTFEQTQ1NEJBNEM3MTVCNjE4NjE2NzcxOTM2NUU2QgorOjEwOURGMDAwQUJDNzkzRjU3ODlGMUVENzRCRDdFODBBMkYwQzQwM0Q5MQorOjEwOUUwMDAwOUU1RTIzNEI4QkE4QkYzRTc2MTlGNEU3MDk3MjNDRTlBRQorOjEwOUUxMDAwN0M4RDcyMEJGN0U3NUQ2QkIyQTRCMTY1ODNGRDgyQTQwNAorOjEwOUUyMDAwMjQzOUQ1RDVDOEU0OEU0Q0JFRkY5QTAxRjJBNTczMzUwRQorOjEwOUUzMDAwMjMzRjJGRjZCMjQ4RkQxRjU3NkQxRjNBQTFERUYxNEFBRQorOjEwOUU0MDAwNDAyMENBMDU5NTI5NzJCNjc2MEU4MTg4NUMyNjdBNzVGRgorOjEwOUU1MDAwMzJENjhERkUzNkZCNDFDOEU1QzAzOEY3RTcwMjUzMDEyNAorOjEwOUU2MDAwRUVGRDlGOEJGNDk0MzBDMjBEOEQyRTA5OTU4N0IwNzE1NQorOjEwOUU3MDAwNUQ0NjZEMDhGNzAzQzVBMzUwMDYzODFCMzI2QTMzQjA0MAorOjEwOUU4MDAwQkM3RkZGQTQxMEIzODhERjVEMTE2OTMyQzQ5N0NDNzgyMgorOjEwOUU5MDAwMUFBOEY3OUQzNTk0QUZCMDY1ODRGRENGOUFBMDQzQjc1QgorOjEwOUVBMDAwM0IyQjgyNjhFRjVDRDVERkVFNTAwNkY3M0ZGNTdEQkRCQQorOjEwOUVCMDAwNjBGMTkzMTdFMTNEM0JDMTY1RENGRUNDNjVGMUQ2NDQxMgorOjEwOUVDMDAwQkIyOTYxN0ZCMTE2RkJEOTMyQjhCRkQ4N0I0NkUyRkUxMQorOjEwOUVEMDAwRTI4QURDREJGMEU4RkVCRjBDRUMyRjQ2Q0VDMUZBQUEyQQorOjEwOUVFMDAwQjdCQjFDRTk1M0NGODdEREVGRTBGQjAwNkNEMjhCM0VBNAorOjEwOUVGMDAwQzU4MjNFMTY5NDNGRUIyNzdBRDRGQzg5MjFERkI1QjhBMgorOjEwOUYwMDAwOTlEOTBGOUUxNTM0QzZGMThGODdFNjY0RjRFMEM3MjQxMworOjEwOUYxMDAwNzE3QzNEOUVBN0ZCQzExOEFGOTMyREY5Q0U4ODdGN0Q0NAorOjEwOUYyMDAwRkMwNTAyRjc2Mzk5NUQyMDc5QTdFQjREOTAyNzkxQTA3RQorOjEwOUYzMDAwOUY5QTUxM0M1QTc1MEE5NEFGNzUzQ0I0NTgyMUJGMjg3QQorOjEwOUY0MDAwODk3QzE5RDgzNzYwM0QyNTU2RkJBQzBCQjRCQzEzRjNBNAorOjEwOUY1MDAwRkI1QjgyNUMzRjJGQjBGMzM4QTVCMDcyNDkwNEM3NUQ0QworOjEwOUY2MDAwMTA3NDA5Q0UwNDNCRTlFQTIwRDc1RkZBRkU4QjIzRjc5MQorOjEwOUY3MDAwNjQxNUUyRDlFMTg4Mjg1NkYzMzZFRkEzNUMxRDY0MDMyQgorOjEwOUY4MDAwRTdERDQyMTY3QTJGMTk5RTBFRDgzQjY5NUZFRUMwMTJBQworOjEwOUY5MDAwOTFDRUVCMUU4RjlDNEJGNzNFMjQ5MzBCNkYyMUZEOTRDQgorOjEwOUZBMDAwMzAxNkNFRTVFMzBEQUVBMzM1REVGNDNDMTlGMzdFRDVENQorOjEwOUZCMDAwQzBGN0E2MTQzQTdGNjNDRTk3Nzk0Q0MzREIzRTBEMkZEMgorOjEwOUZDMDAwRkZEREY5MzJGQjM0RkNCREE0QzU2N0Y0NzhENjI1NDkyMgorOjEwOUZEMDAwRTRGRDc5QjZGQTQ3ODg4RTQ2ODhDQjlDQTFFN0ZCNjhGQQorOjEwOUZFMDAwRjg2MUNGOENBNzdCMzkzNkY0REFFMzI5MDJDMjYzQTM4OAorOjEwOUZGMDAwRkRDQkM2M0Y4ODIxQjRCRkY0NzY2RTkzQkNEMEYzNzcxNworOjEwQTAwMDAwRjQ3MkRBNDk4MUM1MTNGNjExRDJBNDZFOEE5M0E2OUQyMworOjEwQTAxMDAwOTRFOEJEOTlGRkVFMzBGMTlGQkUyRUM5RDY1OTVGMTc2NworOjEwQTAyMDAwRjNGQjJFNkQ1RDBFMzRGRDVCMDBDRkJCNkM0ODYxOTY3QgorOjEwQTAzMDAwRjk0NDVGMDQ4REYxNzc3MzFFNDBCMjdERUU4MzVBQkIwNQorOjEwQTA0MDAwRTM5MUM5MzkyODk3MUIxREIxOTJEMUYwQkQ4RTlGMzc3RQorOjEwQTA1MDAwQkVGQzhEMEJGOTZDQzM0OUU3MENBQkY1NzgzNUM4RkQzOAorOjEwQTA2MDAwMTZEMEE3RUIxMkY3NDEzREYzNUY2QkM3NUVEMzI0RTMzNQorOjEwQTA3MDAwM0VBOEFFNEZGNTdERDBCNDRBRjMzRTlBRjUzRUU4MDZEMQorOjEwQTA4MDAwNjYyRDFGOTNFRDgzMEVEOUZGRDRGNEVEODk2MDkyRkQwOAorOjEwQTA5MDAwQ0ZCMkUxQ0ZCM0VGRDZFODc5QTRCQzhGMkIxQ0ZDQkNDOAorOjEwQTBBMDAwQUNGOUZEOEIwM0VCQjBCRUUwNDdDMDU3MzczNjM5NjlEQQorOjEwQTBCMDAwRjdBOUE3Qzk0OTdDQjhCODI5ODVFMkIyOEJDQjc5QkM4RQorOjEwQTBDMDAwNzdGMTdEODJCNjVGNjc4Q0MzQkUwNEYyNjIxOTlFQUZFMgorOjEwQTBEMDAwRDdGNENFNTExNkFFNDY3Qjc0NTZBNTYwRDgyNzBGRDc1RAorOjEwQTBFMDAwQTYxOENBRjM5N0RDRjMxMkRFOUJGMDcyOEQ1REExRjgxRgorOjEwQTBGMDAwMzNGNDE1NDNCQkEwOTZFNzI5MzJBNUZGNEU4QzczRUJEMgorOjEwQTEwMDAwRjE2NzdERkQ1RkFFM0Q0QUY3QTBDNUMwQ0UyRjA5NjE2NgorOjEwQTExMDAwRkM1OTI0RkU3QUY5RjU0OUZDNUUzQTYxNzAzRjVDMDExNgorOjEwQTEyMDAwM0I2MUMzNzlFMzI4REZFMzYwRDlCNzI4Q0VCQjAxRTMwNQorOjEwQTEzMDAwRTIzMEQzMEQ1RkZFNjYwNkQxMTEyOEU1MThGMkVCQzRCQworOjEwQTE0MDAwQUMzOENBQzdDNTEzMkFCMjkxMkU5Rjk5RjhCOTA3RTM1NAorOjEwQTE1MDAwQTJFRkRFNzZEQzhGRUJENEQ3RDI0Qzc5MDdFNjc1MzdFOQorOjEwQTE2MDAwQzc5OUNERjFFNUQzOEQyNzlGOUIzQjkwMjc0MEY0RjAxNQorOjEwQTE3MDAwOTIyOTlFQUNDQjJCQjNGQzQ4ODgyNzVGOTgzQjhBNzgwQQorOjEwQTE4MDAwQjIyRUI3NzQzOUExQ0JBRjgzNjUxRDZGM0YwNEZGM0M3RQorOjEwQTE5MDAwMTg3MTEyNEM2RjY5RjMxRUUwNEI4RDJFMEZFQTdDRjg5QworOjEwQTFBMDAwQTU5M0VDOTE2NzI2RkU5NkYyQURGNDdBMkRDMTRDRTJCMAorOjEwQTFCMDAwQzM2Rjk1QzVFREI0M0Y4Qjc5MEFBNTgzRUIzMjNGNzIyRgorOjEwQTFDMDAwRUQ0MDE5QkJGREY2RDI5NTA2RkExODkwNTMyM0NBQjE5QgorOjEwQTFEMDAwRTFFNTk0OThDQkUzMTNDOUYyMzU3NTNFMThBQTdGNEE5RQorOjEwQTFFMDAwQzg0RTRERkJCRDNERUUyQUZBRUE3QUE4QjFFOUQ3MEE3RQorOjEwQTFGMDAwQjY4M0U3NjY2QTNGRDExMTg5NUJFODI3MzMzQzY5Mjc1QworOjEwQTIwMDAwNDUxNjlGOTRGODVFRTFFRjA3RjQ4MDgzQkVDN0VBOTU5OAorOjEwQTIxMDAwRDVBQjdEREM5RTZFMjNGRThDMzk2OUZGRENBN0I2RTRFRQorOjEwQTIyMDAwNDI3RDlGNUY4RDIxM0QzQ0VDNTM1QjczMTNFNDY5OUI0MgorOjEwQTIzMDAwOURFRjQ3OEEzNjE2NzlDMjAyMkY0RkU1NkE3QTk5ODVEMworOjEwQTI0MDAwMDNEOERGOUEzQUUzNzkyRUZEQjkzRDk3RUZFRkVERjFCMAorOjEwQTI1MDAwNTcwN0QwQkU2RTNCNUMxRTQwRkVEOUVCQTkyNjdCM0I2OAorOjEwQTI2MDAwRDlCQUREQTVGMzEzQ0FBRjkyNDE3RjYyQTNCNkRFQzBBRgorOjEwQTI3MDAwQTIyQUVFRTNBRUIxODcwMzg5RjFDNjc1QjkzQzhGMjNGQworOjEwQTI4MDAwN0RGMjkzQkQ2ODM3QjdDOTM2Q0ExMzZDOTM3OUZFNzVGMgorOjEwQTI5MDAwQkI1QjlBQjE0RDZCRTczM0I0OTNGNDczNTQ3NDVGODYzMAorOjEwQTJBMDAwRTQzNkU2NTczRkE1RDkzQkM5RTZGOTU0QUU0REJCNUY0RQorOjEwQTJCMDAwQjRFN0RFNUE2MTUwQUZEODhGRDRCOUU4RkUwN0E2Q0ExQQorOjEwQTJDMDAwM0NCRjI5NjRDOEE3QjY2QkZBQTVERTk0QUYyMUNBNUY2QworOjEwQTJEMDAwQ0Q2RjBCRkEyM0JCNzIyREZDQjYzRDNFRjUyOTVDRUYyQQorOjEwQTJFMDAwQTgxNDczMjI3RDQ0NURENjdDRkY4Q0I2QUUzRkQwRTZDOQorOjEwQTJGMDAwNkJCRTU3NTUzNERERkIyMDlBRUU3RDg4RDUzN0ZGQUMxOQorOjEwQTMwMDAwMEZFOTZEQjU1MzZFRjNEMTNEMEY3NEVGNDMxNEFGNUM5RAorOjEwQTMxMDAwODJFN0RGNTM3ODNFMEJGODdGRTdGMkYzMDZBMTNFOTQyNQorOjEwQTMyMDAwQUYyQ0UwQTI3ODU0NjdCRUFBRTY0MzU5RjREODFFNUE2RgorOjEwQTMzMDAwMERGREI1QTlGNTJBMUU1REU5NzREQkJBNzA5RjJGMzNCOAorOjEwQTM0MDAwMTgzOTg4RjM5OEVBOTE0OEVGNzQ1RTlDNEE3QTA4QkVGRgorOjEwQTM1MDAwQTc3MDM5QzI2NEExOUFGQzQxQkEzNDA1N0Q3MDNDNUY5NAorOjEwQTM2MDAwNjYwRjM4Mjg5RUQ1MTY2MTdEQ0U3MUZDRkMzRkY2NTNGMgorOjEwQTM3MDAwQzc3QUY2RDcxNkExQkRFREFBNDQzQ0VEMEY0RENBODhBOQorOjEwQTM4MDAwNThDODA5RkQ2OURFRkY3RkZCQkI2RjE2NTJCRUFBMThENQorOjEwQTM5MDAwRjkwOEZCRUI2RDVDQkMxMUY3RjU1N0VDMTQ0M0I4OEY3MworOjEwQTNBMDAwRjA5REVGMUQzQzgzOUYzNzMyRUUzM0RGOUYzNkE1MEZDNAorOjEwQTNCMDAwRjU1OUQ0RURBMDdBN0IzQ0Q1OUQ4OEE3MzZDMUQzODlDOQorOjEwQTNDMDAwRkU2RURCRTE5NTNGNDEzQ0I2QjVGMjM4QjcxOUNGN0I2NQorOjEwQTNEMDAwM0RERkEzRkIzNThFQzM3MjYyN0RGM0ZEMUFBQzczMjU5RQorOjEwQTNFMDAwNUYyN0E3OEJGNjJENjFCRTJDQUY4QUFGMjNDNTA3MEY2MQorOjEwQTNGMDAwNzlFODFFQThFM0ZCOUY3MTIzN0M1RjYzREU2OTc5NTVEMgorOjEwQTQwMDAwQzNDRDNCNUYyNkZCNDVBMzFGMjY4NUQ3RTFCQzZFMTY1NworOjEwQTQxMDAwM0Q5RDFEM0VCQzI3MERENjFCRTFERTY1Mjc3RkZGRkU1RgorOjEwQTQyMDAwQjQ3NDVBRDcyOEMwODdFQjJBN0ExQTU0NzRDOUZFQkE3MgorOjEwQTQzMDAwNTNBNDc1OEU0QUNEMzQyRjE2OTNEODc2N0NCRkVCQzRDNworOjEwQTQ0MDAwMEZDRjQ3M0E1MEIzNjg1NzRCMkM2ODI2QkNGQzE1RjAyOQorOjEwQTQ1MDAwQjJEQTAyMkY0MDNGNDU3OUI4NUZCNEVCNDZFQUE3RDNBMgorOjEwQTQ2MDAwRTE5MkQxQjI2OUYzNTREMzc5RTVEMURFMkY1Mjk2Qzc4OAorOjEwQTQ3MDAwRjkyNEUxN0U5MUIyQkMyQThCRkE5QTlGODVGRTM2OEUzMgorOjEwQTQ4MDAwNUIyN0IzQ0ZFMjZDMTBFRkM5RjI1N0NFRDdGQTFGRThDMworOjEwQTQ5MDAwNjdFNEZDOTVGMzEzQzdEN0M3RkQxQUVCM0FGRDc0RDZGMgorOjEwQTRBMDAwQjVDREY1N0ZBN0EzOURBNThBRTlBMTk0NDIyOEUzM0FGQgorOjEwQTRCMDAwMjFGRTcxOUQ3MEJEQjRCODBEQTkyMDA1RTk0MEVFQzkxQgorOjEwQTRDMDAwNDMzQUI4MzEzRDg0RjQzOTkyREM5MDE4NUY3N0JCMDQ4RAorOjEwQTREMDAwRjQwQzc2OUQ1MzhFMUNBMEIzOEI1QUJDNDc5NzI3NjYwRAorOjEwQTRFMDAwM0U2QjczMTlFNTU1OUI3RTJGREZBMUQxQzkyQkEwOTczOQorOjEwQTRGMDAwQUI3MUREQ0M3MjZCQjQ3NEIyMzI0RjMwREY0M0IzMzIyOAorOjEwQTUwMDAwQ0Y5RjlDNEVFQ0MxRjA4RDg4NzdDNDUzNUUwNUM1MkI2MAorOjEwQTUxMDAwQkU4QkY1RjdFRjE3NzczOEM2RTI3ODNDNkVENjFGNjQyRQorOjEwQTUyMDAwRjI0MzA5Nzk1OTNBM0NFREI4RDlDREUzRDQxNEZGOTAwMAorOjEwQTUzMDAwMUExOUMzM0MzODZGNjk0ODkwQ0I0NjQ1NDdFRDg5RjBGRQorOjEwQTU0MDAwN0QwMzc0NzRENzcwNzRFNDY2QkQ3NDVFNjNCOTlFOUZCNgorOjEwQTU1MDAwQjM2M0Y4RkM5Q0FGQUI3RjYwM0RCQjEwOUUzNkNGRjc3QQorOjEwQTU2MDAwODgzRUQ3REE1RDMyQkY0N0VERjRENkY1RDFBMUVCRkFEQworOjEwQTU3MDAwRThGMEVCMUE3OTFDQkZBQjc5RDU3NDhGMTFBQjY5MjI2NworOjEwQTU4MDAwQkI2OTk3NUY3RDEzRjNDNTk4MTQzMkM4QzUyMUZDQTMzRQorOjEwQTU5MDAwQzlFRDlCQ0Y1NDI4NUY3NTc3QUIyNkU3NUE5RDMyREExOQorOjEwQTVBMDAwRTNDRkZBNkU3QzFDRUJERkNEOTQzMEM2NDNBN0Q4NTZDMAorOjEwQTVCMDAwMTE5RUZFMEFGMzdCMjg0NDcyQjUxNEY3N0RBMjJDMzU1OAorOjEwQTVDMDAwQTRFOUQxQTcxMTBGMzM5NDU2MjEwQkRFRkIxNjI4MzZEMAorOjEwQTVEMDAwQkE4NjU0RDlDNDZDNjVBM0M3QzM0QjQzRTVFMDRCMjM4QgorOjEwQTVFMDAwQzhDMTVFOEQ5RTZGNDI3QUQ2Q0ZEQjI3OTM4Mzg3NEU5QworOjEwQTVGMDAwNUYwRTFFRkE4NkU1RTA5RkYzNEU0M0FGN0YwM0YyRTY1RgorOjEwQTYwMDAwMzM4NERGMkM2RkRDMUEzRjVGMTk2MjIxOEM5NzhGMzYwMQorOjEwQTYxMDAwOUYwREVDNEQwNUY5QUIyRURENDVGNEQzRjY4NDQwRjlFMgorOjEwQTYyMDAwNTI2MDg3NDdBOEVDNzE5MUIwRDlFQjcxRjBGQ0RGMUQ0NworOjEwQTYzMDAwRkNCQjU4Q0ZGMTZDQzZEMzk3Nzk1OTNDRUZBNjdCNjUyQworOjEwQTY0MDAwNTgzMkU0NDlDNTg4MUZFRTUyOEZDOUM1MjJFNkY3RDdCNAorOjEwQTY1MDAwMTIzRDdCMzU3QjQ2Q0ZFQjRGRDdFNEZGODA5RTlGNjk1MQorOjEwQTY2MDAwQTNGMUJDMDU1Q0JFN0JDMURFNDFCQjg4NDk3RDBDRkQwRQorOjEwQTY3MDAwRjg5QkYzNzhGRTNFRjAwM0QxMzc4QzEyNDY3RUM4QThEMworOjEwQTY4MDAwOTE0Qzc5NUE5QzVGRkMxMkI3NzczMjdENEMyMDVEODNFOAorOjEwQTY5MDAwNzk2MkYwRkUwNEQ4MTM3ODNGNDFBNjZBNkM3NzczRUFCQQorOjEwQTZBMDAwOTUwMkVBQURCRTI2NzdCMzQwRTdGNEMzN0I3RTBDRTVBNgorOjEwQTZCMDAwMkNDQ0Y3MDJCRUYxQ0UzMEQ2RjdCMzg0QjI4NTdGMUUyNAorOjEwQTZDMDAwQUI2N0E1OThCNzU4OTZBRkY5RTkwRTE2MjBGREE4RjkyMworOjEwQTZEMDAwRTlGQTdEODFFMkM4Nzk1Rjk1RjlBMzg4MkY5RTk3QUY0QgorOjEwQTZFMDAwRTc5OTE4RjU3MTc3MEFCMzhDQUZGRDQ3M0U5NzVCMEQ3QworOjEwQTZGMDAwN0Q3NUY1Njg1N0FGRjIzMEIyQUI1NkExRUVDNDcyQTZDNQorOjEwQTcwMDAwODNFRUI1MDlFREE5NzQ1OURENTc5MUE5REEwQ0Y3RjM3OQorOjEwQTcxMDAwN0E2N0E0MUFFRUJERjU4N0IzMENFNTlDQzY1QzQzRkREMQorOjEwQTcyMDAwNjA2NEFDRTE3QkRFRDJCMzBDREYwQjlBMkIwQ0U1MzExRAorOjEwQTczMDAwRDFGMzBDRjU4QjAwQzE4OUU1NzFFQjJFMzZENDJGRTlFRQorOjEwQTc0MDAwQkNDQzUwM0U3M0YzQjcwQ0Y1QzdDNzE3MTlCRTlGRkRCRAorOjEwQTc1MDAwQzg3NTg2RUYxM0JBNTcxOUNBRTdFQ0JDRDU1MEJGOEQ0MAorOjEwQTc2MDAwNTlERkRGQjkyMTlGQ0IyOUUwNzc5MjYzQURFRUZBNDYzRQorOjEwQTc3MDAwRkExRDBERDk2MTg4RjMyRkQxRUFFREM5QUMyRUM1Nzg0OQorOjEwQTc4MDAwNDhEQjkxRjI1MkYyODdEM0NGMUJENjFGMzZDQkM1NjQ3QworOjEwQTc5MDAwRjJEOEZDQkU1RDFCRUY5M0E3REZBRjVFODY3NDhFNDJERQorOjEwQTdBMDAwMUVFNEQyMjdFRUI3RDZFMjlDRDY5N0YxQkMwNEZENzcyMworOjEwQTdCMDAwMzFDQ0Y3RjIwRkVDNTM0QTJBQ0Q2NzQxOTY4MzU5OUQ2RAorOjEwQTdDMDAwMEY1ODkyQUY1OEVFMkZCNDBCMjExN0VFMTUyNUMzOUJFRgorOjEwQTdEMDAwNEU4RjIzRTFFRDRFQURERUQ3QzVEQjIxQzExODA3NDIxOAorOjEwQTdFMDAwN0RGMjg0MDU1QzdCRjMwN0VFM0I3ODM4OUZFQkFCQ0FDOAorOjEwQTdGMDAwNTRGMjMwRjgzRDBFQTdBQjRGNzQzODQwOUYzQzkxNUY0OAorOjEwQTgwMDAwMzUzNDNGRkM5M0M2RDdBRUJFNUZDMUZBNTdGM0ZBQjZGNAorOjEwQTgxMDAwNTAyOUFFNEJCMjdEQTVCREY5RTY3REE1QUFBNTI4RTdENgorOjEwQTgyMDAwMTY3ODUyODVDNEZCOUE3RkE1RDVEM0UzRDk2REU5OUZFRAorOjEwQTgzMDAwRDNCRTUyOUIyMzU0M0E5QTdEQTU1RkUxOUQxQjU1ODg1OAorOjEwQTg0MDAwN0Y4NThGQTdBRkFCNUQwREM4OTZGRTlERDk4RTYxQ0Y3QQorOjEwQTg1MDAwRTMzRDE4MzFCNzQ0NzlDMzY2RkYyRUFBQzk2REREOUY2OQorOjEwQTg2MDAwOTNGNkQ2OTFCRkRGRTYxRTRCNzkxRjZERUEyQUQyOTc4OQorOjEwQTg3MDAwOUQ0OUZDNUNEMDk3N0Y0NDdDNEVGNURDNjRGMEU3MDY5NAorOjEwQTg4MDAwRTMwMTJBOEQwNzZEQzk2RTZBNEJGMEZGNzE1REQ1RkI0MAorOjEwQTg5MDAwRjlCRERBREY4MDFGRkM1MUZFNjlEODA5MEFFMzdFRjBCQQorOjEwQThBMDAwNzFDNkYxNzQ1Q0I1OTE5RDcwMUNFQzA0OTRCRjZCMjQ2RgorOjEwQThCMDAwNDZGQkRFQjE0QTQxQjFGMjhCM0I1NzZCRjZFMTZBOEU0MworOjEwQThDMDAwMzdGMzdFQjdEOUNFQjgyNEI0OTJGMEI2MDZFOEM5NTVBRQorOjEwQThEMDAwODlGMTM4NkVGRkFFQjFGM0ZCMzc2NTZGMzg4MEZBQjY5OQorOjEwQThFMDAwREZFRjYwMEYwMUI0N0JGRDNDM0VBN0UzRTVBQkNBQTNGRAorOjEwQThGMDAwQ0M4MjIxNzY3MjY2QzEzMDc2RjIzNEIxQUMxQkVGNkQzQQorOjEwQTkwMDAwM0Q3NjkyQzc0NTE0M0M4QUU4QzM3QkM4RjlGQUFEN0ExNAorOjEwQTkxMDAwN0U0RTZDMDVFQUE5MjJBOTE5RjNENzQ1QTY2NDIwNUVFQworOjEwQTkyMDAwNTYzQzI3QjJCODgwNzJDQzk4OUY2RjY3Q0QzRkMyNzhGMworOjEwQTkzMDAwMUNGM0YxRjczMUU2NkE0NTNCMjlBM0M2QThDNzMyNTU5NworOjEwQTk0MDAwQTMxRUYzQ0VDODMyRTkzNUEzMUVDQjY5MzRFQUIxNjA0OQorOjEwQTk1MDAwQzRBOEM3RjI5NjU2OThGNDlBNTE4RjhEODlENjlCRjQ2NQorOjEwQTk2MDAwOUE1MThGOEQ1Qjc3OTk0OUFGMTlGNUQ4OTk5QjhEN0E1QworOjEwQTk3MDAwNkM3Q0RDQThDN0NFN0U2NDk1NDlBRjE5RjVEODM5M0IwRAorOjEwQTk4MDAwNTcxQkJFOTdGNzc0MThCRTRGN0FFRTZFNDNCOUFBRjdGRAorOjEwQTk5MDAwMDE0M0ZENzMwRjNDNjRGODNFQjlFRkZGMThCRTAzQTJGQworOjEwQTlBMDAwNUZDNUYzMEM3ODBGMkQyRUUyRjkxRjNDNjlGQ0NFNTRFNQorOjEwQTlCMDAwMDdFNkUzNUY4RkU3MzM2MTFEMkZFOEZGQURBMTNGRDZDOAorOjEwQTlDMDAwQzlDRjJEQzRFMDNGNUNBRjNGQjMwOEREMDMwMDcyNkMxQworOjEwQTlEMDAwNUYxRUI0QkIyMTJFODQ3QTE4RUFBNzI3REVDNzdEOUJCMQorOjEwQTlFMDAwNkIwMzIyRjk3MTJCMzBEODhBRjRGMEE4Mjc4RUY0NzAwQgorOjEwQTlGMDAwQ0Q2NkUzRjk4NzZCRTNDNjcyMENFODQ3QzFCODAyRDBCNQorOjEwQUEwMDAwMEZEMkQ3RjVBNkRGOEQwMDdCOTBFOEVEN0E0NTZBNDYzOAorOjEwQUExMDAwQkJEMjRDNUY3RkQ2RTkyQkE2QkU4QUU3MzlGNEY5RUFCMAorOjEwQUEyMDAwRjNCM0VCRTc0RjM1RkE1MzM1RkE2M0UyMkU4MkZCRkFDNAorOjEwQUEzMDAwM0M5MTdFN0Y0NzlGQUYwQUZGRjFFRjFGMzk3MDFFMjdDMQorOjEwQUE0MDAwNzYwQUNDOEJGQkZCMkNCNjJGQ0Y2MjNFMzdFQ0RDRTRENgorOjEwQUE1MDAwNDBGRTM0Q0ZDQjNDOEYyMTc2NkE4MTcxNUY3MTlBRThEQQorOjEwQUE2MDAwMEUxMURGQkQyRTkyM0VBMjI5MjA5RjNEQzZDRkVCQUQzOQorOjEwQUE3MDAwN0E1RUE0NzMzMUM4ODdFODJGODhCMTQ2QzJDQjBBQzA3QQorOjEwQUE4MDAwMEJERTFCQUVEQkFEQzdCNDc2QzcxRTE0RTk3Q0YzNDgwMgorOjEwQUE5MDAwRkNBODY4Rjg3MDA2OENGQzk4QTJBNDlBRThDOTg4REYyNAorOjEwQUFBMDAwQjQ1MjIzN0Y1RUZGQ0U0NTBFOTQ1RkZCMDBERjQyMEQ2NAorOjEwQUFCMDAwNjM5RTkwOTE1RkFGMTc5N0QxM0U5RjhFNjcwNUZFQzM0RgorOjEwQUFDMDAwNzEyNTMwNzU3MURFMzdDMEJDN0I5NEExRjg1REJBNkIxRgorOjEwQUFEMDAwRDNEQTNDMEJCQTE5MDlCRjhGMTYxOEY3RTlGNEZEQjlBMAorOjEwQUFFMDAwM0FDMDhFQzMyMkFGNTRDN0RGMkVCRkZBMjRDQUM3NjQ1MAorOjEwQUFGMDAwRkVGMEVFMDJFM0JFRkEyOEZDRTFERDg5RjJGNjFCRjA3RgorOjEwQUIwMDAwODc5RjJGMTg1NkNGRjVDRjQyN0ZDQUM5RDI0MzFEMTY1MworOjEwQUIxMDAwNzEzRjg5QzkzRDE4QUZCNTM3RjNCOERGNjBGQ0VFMUI1NAorOjEwQUIyMDAwOEZGM0JDNUI1MDQ1RjdDRTkxOUU0QjkxRjQzODRGRThDNAorOjEwQUIzMDAwNDAwNEVEOTM4Q0IzNDI5ODE3MzVEQTM4Qzc1RjBBODYyNAorOjEwQUI0MDAwQzQzOUZFNTIzMDdDOUNFMzREM0M0RkE4NjZFNDM2RDhCNQorOjEwQUI1MDAwOTA5OUE0NTAyOURERUY4QzIwRjAzQ0E0NEYxMThGNDMzNQorOjEwQUI2MDAwRjI3NThCQjNCNEZDNjM2NUQ4RkNFMzRCQjRGRERERUE0RQorOjEwQUI3MDAwODA3QTEyRTE4MEZFM0VDN0U3QzA3RDZDOTU3RUVBMjdCMQorOjEwQUI4MDAwN0Q4NDdFNjJGNURDNUU4QkQ5M0M5RDZEREM1RUEzN0RCMQorOjEwQUI5MDAwQTY2RjIwOEU5MTVFODg3RUE5OUJFM0JGQ0RDMUUzQjZGMAorOjEwQUJBMDAwQTcxQjY3MEIxNjBFQzE3QkIwNzAxOEJDRkZGREVEMUMxOAorOjEwQUJCMDAwN0U2RTM1MDRENjQxNzk3MkZBRDZDRjYxRUFFNUY1OTkxMQorOjEwQUJDMDAwNDY3Rjc5NkQwNTg3QUI0NDFCRkZEQkQ5REMxRjk4NUNBMgorOjEwQUJEMDAwQzhGOTRGQ0ZCQkM0QkNDNTk0MEEyOENGRTRFNzk0RjRBRQorOjEwQUJFMDAwNzNBRDdBM0Y5MzBCM0Q1NEZGQjM0MEZERTQ0MjNGRTYyMworOjEwQUJGMDAwQ0RGMkZCNzdENjY2MUFFRkUxRjlCOEEwNkUzMkNFNkJENAorOjEwQUMwMDAwOTJENkZGRTQ0MkM2RjM5OUM3NzJCOENDNzlBNzdGRDMzNgorOjEwQUMxMDAwRUFGRkFEQTA5RTlFNzg4RTE2RkQxMjg3Mjg1QUUyNzMzOQorOjEwQUMyMDAwNEEyMThGMTNFOEY3REU0Q0Q3Q0ZDRkREQzdDRkQ3OTlCNgorOjEwQUMzMDAwRUY1RDAwM0U3OTAzN0YxRkVBRTg5RDc2RjJGNzQwMUY0MworOjEwQUM0MDAwRDFGOUI5MjU3OUZDMUNBMkY5M0U4NTQ4QTlCQzBGQzVFQworOjEwQUM1MDAwRUIwOTU2NjY3OTJGQ0Y5MDNDODc0M0I3NTBGRUREQ0I4QQorOjEwQUM2MDAwOTM5OTJDMDQ0N0NFN0JCOEJDRDA3ODNGQzI1NzM4NDc2NQorOjEwQUM3MDAwNzc2NUUxMjhGMjFFMTY2QUU3RThGQTUyQjkxRUVCMEY3MworOjEwQUM4MDAwQkFFMjBGNTlGOEJCNTE2RDlERUVENEZDNUFEQzlGQzY1OQorOjEwQUM5MDAwN0Q3MkJDREZEQjZBQkYzQzVBQzhFOTY3QjRFN0FBRUY0NAorOjEwQUNBMDAwNzY0NDIyQzhCN0U2NzNENUM5Q0U1M0Y3MzlGQUQ2RTQ0RAorOjEwQUNCMDAwMjBCQ0UzNTkwOEVERjc5QzA1RjI5RTFDQTg5N0RBQTA4QQorOjEwQUNDMDAwRDBGOUM3QjU0NTJDQkQwNkJGOTdEQjQyNzhBRTIzNzNEQworOjEwQUNEMDAwQUVCQ0Q2OEU3QzVBQ0NCMjA0MjhGN0M1RTZEMEY4Nzc0NQorOjEwQUNFMDAwMzYzMjU5MDRCOEJBMEFGOTNFRkFDMkRCM0VBNUYxRkM4NQorOjEwQUNGMDAwQjUzMDM1ODVDRTlENEY0N0ZGMkNENkM4RThERTQyRjNGMAorOjEwQUQwMDAwM0NFRkQ2RjhDNUI1ODZERjkzOTM1MTZDOUQ4NzdGQjcyRQorOjEwQUQxMDAwNDY4RjIwQjczNjIxNUZENDE1QjMxREZDRkMyQzNGQTcwRQorOjEwQUQyMDAwODBEN0QyNTNGRTY2Mjg5NUY2MDUyRjg1NzVFM0ZCRTc5RAorOjEwQUQzMDAwQkRCNDdFMzcwNUE2REU4RkVCQTlGMzlCNDNDQjUzMzAyMgorOjEwQUQ0MDAwOUYyN0VGMkEzQ0JERjNFNEE5MEJBQ0UxRkQ5REI2REVFNQorOjEwQUQ1MDAwNERGRUYwQ0YxMERFRDREMjRFRkVGQkE1NUY5RTNBMjUwRAorOjEwQUQ2MDAwNTY2QjNGRURBODYwRkI0ODA0RjU1RjBBRTgzRjAxOUY4MgorOjEwQUQ3MDAwOEE0Q0U3Njg5OTRCQTBGM0IwMkVBNTk5RTgyQUE1MjYzRQorOjEwQUQ4MDAwRTRDNURGNDU2MzU3RDkxOERFRTMzMjU1NkJBRjM2MzI4MQorOjEwQUQ5MDAwMDE3RjRGODI3MjAxNDk0RTlCN0U1RjQyMERCNUI3NDJFMworOjEwQURBMDAwRkI2OUI4NkYxNkMyQkNFRkQwNTJFQ0FGQzE5RDJBNjNFRAorOjEwQURCMDAwN0MzM0E1QjhCOTBFRDdFQkQ5ODVCQzhGQkI5MzlDOTdENAorOjEwQURDMDAwRDBDRkQ5MEZERTNGQjVFQzk1QkRCNTA5RjcwQUFDQkRDNAorOjEwQUREMDAwRkExNUUzRkQ1MzU3QkZGMjc1RUU5RjNBQjhGNUVBNTdGRgorOjEwQURFMDAwRkUyN0VFMTVEMEU1MUJBODIxM0JEQUY1MDc0NDdFOEY0MAorOjEwQURGMDAwREU1RjlGQkFDMjhFRUJCMEI2OEU3NTIzREU2MzlGMDMxMworOjEwQUUwMDAwOUU1RDgzNzhCNkQ3ODc5RkREODI3NkM5QUFGNDEwRkY0RQorOjEwQUUxMDAwM0Q5MUQ4NzcxMENFNzdEMjk4OENFREY1N0M0MzgxOTUxMworOjEwQUUyMDAwOTJCRTlFREIyODkwRkRDMEE0RkUxQkIwM0M3RjU3OUFDQgorOjEwQUUzMDAwOENGRUMzNUY5RjdBQjMyMDA2RjRGOUY2RURDNzNEOTgwOAorOjEwQUU0MDAwOUZGQUFFRDRFRjQxQjgzRUI4RUQzNTBGRTJFRkVEREIzRgorOjEwQUU1MDAwNDRDQTQzQTE3M0RGMDk3OTYyNUY2QUY0QjU2MDRDRjhCNAorOjEwQUU2MDAwMzhEMkQ3QzI5NkZGQUE0RUI0Q0Y1OEQ0NEZGQUZFREFFMgorOjEwQUU3MDAwMzg0MDlDNjhGNzNFOTI2NkY4NUREMUU1REQ1RTQzNTk0NworOjEwQUU4MDAwRDdGM0NCOURENkU3RTYyQkM3NzBCOTc0RURBMzVEOEVFMworOjEwQUU5MDAwM0MwNUM3OEZEOEM3QzAzQzNGRDBDRTAxN0RCMEMzNDM2RgorOjEwQUVBMDAwNzZCQzBFQ0ZBMjQ3Q0IxRDY4MEZCRkJCQ0JDOTdBMjg5QgorOjEwQUVCMDAwMkVEODZCNjc2RUFFM0YzMEVGMjJDMjg3MUUwMkU3QkUxMAorOjEwQUVDMDAwREQ3OTBFRTRCMzI1MDJFQjc3MTI3M0IzN0Q4OEVGM0Y5MworOjEwQUVEMDAwNjlGRTlGNzkxRTRCREU5NjFEQjhCRTRCRUE1ODNGOUUxOQorOjEwQUVFMDAwM0I1Qjc0OTNCMEY2NjZBOEJGMjhFMjI2QkZERjNDNEZGOQorOjEwQUVGMDAwQjNCRUI5MDZFRkIzMTFBQ0VFODE2QkRFRjczQkU4RTcwQQorOjEwQUYwMDAwMkFFODA3RURDRjI1OURDNkVGQzc5RUJCNzFERjE2MTg1NworOjEwQUYxMDAwNzdDNzRFMDdEOThCRDc4QzEwRUYxRjNGNDZEMzRCRDU0MQorOjEwQUYyMDAwRUNEQzUzRTM0OEZGNjU0QzUwOTJEQjFEQkEzRUZBQTBCRgorOjEwQUYzMDAwODU1MTkyQ0E1RkYwRjc3REUxRjk1MThCNENDRkUzODVFMworOjEwQUY0MDAwMEFBREM3RjUzQkY3RUNBM0RGMTY5NjdBQUI1MURFQ0QyMQorOjEwQUY1MDAwN0M3RTcxREFCN0Q4NjA1RTUxNzU1N0RCMzM1Qjg4MTUzQworOjEwQUY2MDAwRjQ3Q0Q1MUU4QUVGRDU2OEY3QkY1Q0EzOURGRkE4M0E5NQorOjEwQUY3MDAwNjBDRTU3RERGM0VDRUZEMDZFODNGOTlGQ0VCRDNEMEI3NQorOjEwQUY4MDAwNDY3OTZGQ0ZCMUU3QTZBNkQxRjkwMDFEMkZFNzAyNUU4MworOjEwQUY5MDAwQzRBRjhGOTc2NEVEOTYyN0Y5REQxNjlEOUY4RTZCN0E2RgorOjEwQUZBMDAwRjdBQTZEQjNEN0U2QzJGODZENEZGREI5MTBFM0M3MzEwQworOjEwQUZCMDAwQzZFOUJCRUE0MUZFRkIzRjU1RUU2Q0EyMzcxN0QyNjdFQworOjEwQUZDMDAwMTBGMTZBQkFFNzIxQzZERTYwMDlGNDdEQ0RBRTM0QTI4NQorOjEwQUZEMDAwOTMwMEQ4NDNDRTFBN0NDM0U5QjUwQUVGRUQ0NEZBN0U1QworOjEwQUZFMDAwOURCNzc3NjlGRTZENjREN0VEQkNGRUVGMUNCMjMzNDBCMAorOjEwQUZGMDAwN0MxOUIwRDFCMzI3NjBBQkIxQjg2N0NCN0NCRjU4QTc4MQorOjEwQjAwMDAwQjFGQzg5QkRBRjEwRTVDQTM1MjYzRkY0MTNDMTNBM0YwNAorOjEwQjAxMDAwRURDQTMxNjM0OTdFNURBNUE4RDMzMTBGNjAwOTBCQUYzRQorOjEwQjAyMDAwRTVGMTVCN0U2RkNGMDc1MkU3QkVFRjIzQkY2RjEzNTg4QQorOjEwQjAzMDAwMENGMEI0RkMzNzhGRkQyQkNBQjFFQjFFQkYyRjFERTUwMgorOjEwQjA0MDAwRDg4NzUyNjczNjhFQjc2Q0ZCOUE3NEJDNUZFNjAzMjlDQgorOjEwQjA1MDAwOTY4RUVEM0Y4QzczNzkzNjQ0NUY4RTExQjQ3RDI5MzUyMQorOjEwQjA2MDAwNUQwMDk5N0MwMzkxMUFGQ0ZGQUFGRUI1QjdDMjM4N0YzOAorOjEwQjA3MDAwMDMzQzIzREZERkIwRTMxRjU0REVBN0JBRkE1OTAwRkIxRAorOjEwQjA4MDAwRUQ5QjhFNzA1Q0RCRTQ2RTZFMERBMTdGNjlFNENGRUIwRgorOjEwQjA5MDAwN0U3NjVGQjY0Mjc5MUVCMTNDMEQ3Rjc5RDhFRTg2NkQyMworOjEwQjBBMDAwNzZDQUYzNDUzRjFFODc1OUMxRkE2OTdFRTZGNjJCQkE4OAorOjEwQjBCMDAwOEYzQTUwNUVDQjM2RDY5RjdGRkVEMEVGNjAyMTM5OTAxRAorOjEwQjBDMDAwREY1NkVDRDhGMEE5OTg4RUNGMEZERkMyREY4MzVBNjEyQworOjEwQjBEMDAwQjI0Rjk3NkFGMkRCNENGRkJGMzBEMTNERTA4N0UyMEIwNQorOjEwQjBFMDAwMzE4MDhCRkYxQzEzOTdFMzZEM0ZCRjdGRTI2MTgwRUZFMAorOjEwQjBGMDAwQTM2RDJGQTZFM0VGNERFOEY0QUZERkYzN0NBQzdCRjE1QgorOjEwQjEwMDAwNDJDNzMwRjcwODdEQTJGMUM5ODA3RUQwRjQ5M0IyMTMxNAorOjEwQjExMDAwMDBDQjgxRTIyRUZFNUM2NkVGNDkzRjFGRTZCQkFDQ0I2NQorOjEwQjEyMDAwMUU0MjlBNUZGNjk4QThCQUQxQUUzQUU4MjQ3QjY0RDk1OQorOjEwQjEzMDAwNjNDNzg5NkU5NzA5NkFCRjQwN0E4RUE1QTMxQ0Q3RDdDQgorOjEwQjE0MDAwRUJGQUM3RkUzNDFERTVGNEY1NDE5MUNEMDQ1NkJDRUU5MworOjEwQjE1MDAwNTcyNzc4N0RBMEYzMTRBODdGRkQxMzg3QTc3RjFGQ0IwNworOjEwQjE2MDAwMjA0RjVDMTZFQjM1QjU3QjhGQTNDRjZEQjE1RUREODdDRAorOjEwQjE3MDAwQTc2MzdDQkVFREU3N0ZBN0Y1Rjg3MEI3QzA3MjhBODYzQgorOjEwQjE4MDAwQjY1RkRBRjUyNzhBODM3RDA0MEJFM0NERTRGODQyN0REMAorOjEwQjE5MDAwQjNBMjVCNkM3MjY0NThBRDVGQ0ZBQ0RGNTZEMjc3Q0E5NgorOjEwQjFBMDAwMEIxRjY5MUQzNzhDNjE1QzNGRkVFNkIxNUZGRTE2RTA0OAorOjEwQjFCMDAwNThGQTk2MzMzNDEzQzdGREU1OERFOTBDRThFMENGNTIxOQorOjEwQjFDMDAwMzNBN0ZCMUZBRkM5NDZGREJERDQxRUNCOTZFOUM5REYyRgorOjEwQjFEMDAwMkZEREZBNURBMkM3NkI3RUZGREQ2QzZEQkYyMTY4MjM5QQorOjEwQjFFMDAwNzkxMDBCRTIzQzk3M0MzODhGRTY3OTM1OEIxMDNEMkU3OQorOjEwQjFGMDAwRkQzMUJGNjdGMTA0RjhEOTU2N0U0MkE1QzJFNTk2OTNBQQorOjEwQjIwMDAwQUQ5Qzc4QUIwRkU1MjZERUQ5MDI3MDM4MThCRkFGRUJFNgorOjEwQjIxMDAwNTU5RUZGRUU2NDk3NjUyNERBQjkwRTg1REI3MzMxMTYwRgorOjEwQjIyMDAwN0YwN0VEQ0UxNUEwOTY1MUFFODlCRjNGMzExREZCQjkwQQorOjEwQjIzMDAwQTk0ODZBNzY1MjdDRDRGQUZFOUFGRjA3NUM5NkQxMDMzRAorOjEwQjI0MDAwMDA4MDAwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDBDQworOjEwQjI1MDAwMDAwQkU1N0QwQjc0MTQ0NUQ2NzBGNUY0QkM0MjVFNDNEQgorOjEwQjI2MDAwMUUxMDA4ODRDRTNCNDg4ODAzNDkyMDAxRDQ4MTQwMEMzRAorOjEwQjI3MDAwQ0E2MzAyNTE1MTIyMEMwMTQzODBCQzQ0NTY3MEY1REI3NQorOjEwQjI4MDAwNzQwODIwQjBBQzA2NjU5NTE1NzQwNzA0QzVFNzA2MDQ3QworOjEwQjI5MDAwODEzNUMyNDQxNDgzRUVDMTI4QUM4QjJGNzYxMDA0NzkxQgorOjEwQjJBMDAwQzk4MEIwOEVGRkIyRjJERjdCQUIzQkU5OUUyNDAyQkJDQworOjEwQjJCMDAwN0VFN0VDN0ZGRUVDNTk4QkRCNTU1RDVENzVERjc1QUI5MgorOjEwQjJDMDAwRUE0RTE1ODNCRjA0QzZGMjNFMUVENUREOUJDRTk4ODU5RgorOjEwQjJEMDAwNUQzMERGOUJDNUQ4NDVDNkE0NjdFQzhDNTUzMUEzRUMyNworOjEwQjJFMDAwQjUzMkZBQkIxMkNGRDg4OUY1OTYyRUMyOEQ1MDc2NjM0RgorOjEwQjJGMDAwNjUwREQwRkUwQUZFREREMjU2NEU5NzA0QzZCMkE5RjlGRQorOjEwQjMwMDAwMjc2QzEwNjM5NUY4MkYwOUZBRDk3NDIyN0YwREY0Q0JCRQorOjEwQjMxMDAwNjI0NDE2MUVDM0UxNjdBMjE4QjM5NTg0NTQ4N0U3QzA0MAorOjEwQjMyMDAwRjcwRTFFMzVGNzg0N0EzOUNBQzA5MjZENTBERkYyMERFMAorOjEwQjMzMDAwQzFDQzFFMkQ2MTdCQjVGRkFBMUQxNkU2NTFDNzAzRkZDOAorOjEwQjM0MDAwQUZEQUYwOEQ5OTYxM0YwNkU2RUIzNUI0N0QzRDYzRDUwQworOjEwQjM1MDAwMTlCRjhFQzI3OTg0NEJDQkExM0M2MUY2RTVCRjg1REY3NgorOjEwQjM2MDAwODFFRjZFODRFRjk0QUU4MkY2Njk5QUZFQjY5RUZDOUNFNQorOjEwQjM3MDAwNjU2MDdCNzNEQkYzNzhGQ0VGNDIzRTJGQjEzOERDMTU2MAorOjEwQjM4MDAwQzJEODRDOTgyNkNCNkQzRkZGMDU1RkQ2M0VGQUFFQTZERAorOjEwQjM5MDAwQkYwQzI5MzRFQTc4MzBGQzYzMzAxQjdDNDU2QzdCOUYwMgorOjEwQjNBMDAwQUQ4RDY2QUM0N0ZCRjc3RkE4OTExRjdERDc4NDZGQ0IyRgorOjEwQjNCMDAwOEM0MTkzNzI5M0ZCMDVDNDUzRjk2NzE2QkIwQzc4MkMzMAorOjEwQjNDMDAwN0ZFRDkyRDkwMDMwMTM5ODJGQjkyQjYzQTc1RkRERjM3RgorOjEwQjNEMDAwRTkzRDMwOUZEMzBEQTZBODMxRjQ1NTQ3OThEMEFEMEQ2NworOjEwQjNFMDAwRUY2NTVCQkVDOTVGMDNFRDREODBGNzIwQTA2N0U1RDYzMgorOjEwQjNGMDAwMUZDQzA2NjgxRjkzQzc3QzE2MThGRkU5MjgyNzYzRkQzQQorOjEwQjQwMDAwMTE2RkE2QUZCRDFBQkNFNUMxNzM2RjA4OEQyM0Q2MTBBRQorOjEwQjQxMDAwODNBNTI3OTY0MTU5MTlDNUVDMUU3OEJGRjJBMDY4OTdGRAorOjEwQjQyMDAwMTA1RkNDQjdDNDE2RDJGRUZEQUE4NkEzMDE3NEQxRDc5MworOjEwQjQzMDAwMzNFNjMzM0JGMUJCNUI3RjdCNUUwQ0QzRTJEREY4QjVEQgorOjEwQjQ0MDAwNTc4Mzc3MTVDRjgxNzhCRDNCMDBBRjk3NTg3QTM4N0MwQQorOjEwQjQ1MDAwODY5RDdBNzk0RTFGNTc3QTdCRkNBQTc4RkRBRTg2MjFBRAorOjEwQjQ2MDAwOTNCNzNFQkZEMDQ3MjIzQzRCM0JFMDQzRERBMUFFNTFGQQorOjEwQjQ3MDAwMjkxOUZCOTQ2OUYwMzhGQjk1QjNDNEJGRkZFODIxMzI2QQorOjEwQjQ4MDAwMTFGOEE2NzJDMzhGNEI5MEFGMDBBRDNFMEJGMDZGQTVDNQorOjEwQjQ5MDAwRkIzQ0MxOEIxRDU2MUYyM0I4QTk0OEM4RTg2OERFN0E1QgorOjEwQjRBMDAwN0MwNkQ2Rjc0MkE0NjZCN0QxREZCNDkwQzlBMUQwQUY2RAorOjEwQjRCMDAwRUY2REQxQkQxRTg2NzY0RUYyODU0NUMwRkMxNjA3QjFGNAorOjEwQjRDMDAwQTk0RTI4Q0ZEOTE0QjhBQjBBQjNBOUQzNjA5Q0U3RTQzRQorOjEwQjREMDAwMEM5QjhDRUYwNUIxNDkwRDQwOUY3MzRFNUY1OEQ3OTA4MAorOjEwQjRFMDAwQjY3OTFGNjkxNEMzMjQ2OEVGNzVCMzgyODY5MEY2N0MyMQorOjEwQjRGMDAwQzg1ODFEN0RERkNCM0FBQkFGQTU3MThFMTIyRkJGRUVDMgorOjEwQjUwMDAwODVFRjVEOTA4RENDMDJERkYzRDZGRUYwQkExN0NBNjNFQgorOjEwQjUxMDAwNDZBQjBERjEzNEEzRjZBRTMwNjY4MEVGMzcyNjhFOUYzMgorOjEwQjUyMDAwMDRFREVFREIwN0Y4QTNFOTM5Q0MzRDAwQkZEM0Y5RDQzNQorOjEwQjUzMDAwRDlCNzRDN0U2QTE4Q0M0RjBDQ0REQUZCMTZCQzVGMEEyQgorOjEwQjU0MDAwODgxNTgxNUY2N0FDRDBFMzY3MzY3Mzg2N0JFMjUxNkUwNgorOjEwQjU1MDAwNEQ2RDdDNDJGRjc1OUIzREYwREU0QzU3NDhGNTcyRjgwRgorOjEwQjU2MDAwNkVEOTVBN0RGREVDQzZEM0M0NUZCMzAzRjhDQjg1RkMxRQorOjEwQjU3MDAwRDVBMzNEN0Y2RDU0Rjk2QjAwMUI4MEZDMzU0QTBDMzExRgorOjEwQjU4MDAwMjAzRjlGNkIxNkREMTY3OEU3QzIyMjEzNUIwMkYwODUyMQorOjEwQjU5MDAwNTcwNTM3ODM3RTJFMzQ0MjIzODQ3NzcwOThDOUQxQzRFRgorOjEwQjVBMDAwQjcyQTlGQUI3ODNCODNGQzk3REExRTlGQURGNURCQkVENQorOjEwQjVCMDAwMUFGNDMwMzQyOTdGRjM4QjhDMzU1MDlFNzlGM0IzOTQ5MQorOjEwQjVDMDAwQjcxMERFRkVCN0I4MkY1OEZCRjY3OUJCN0U5QzQyRTM3RQorOjEwQjVEMDAwREE2NTYxMzhBRTczQkJERThGN0IxOEUxM0Y1QkVDQzg4OAorOjEwQjVFMDAwQjdFNzE2NUExQzBDRjVEREFFNTA3NzMyRDZGNzA2N0U1QgorOjEwQjVGMDAwMDBCQUQ3QkRGRDQzMDZFQTdCQzYxNjExMUQ1QjI0MzM5NgorOjEwQjYwMDAwOTUxNzFBRkY3OTU4QzA3OTM0NUEyNDlDNDdENTJFNDA5MworOjEwQjYxMDAwMDJCQzVGRjVFNzIwMzdDM0Y3REZGRTYxOTAyQkU0OTdBQworOjEwQjYyMDAwOUI0RkE1OTlCOTg4M0Y0M0Q5QTQyREM4QkY1RDk5MDMwNQorOjEwQjYzMDAwRTc1M0Y1NTZFRUYzQjVGMEZEOEFBRDRERTZFOTUwOUZDMAorOjEwQjY0MDAwQjdGQjVGMTlBODhGQ0U2RDY5MzJBM0JFRkFDRUU0N0QzOQorOjEwQjY1MDAwOEUwMTdGN0MyMTREQUUzNzAxOUVCRjBCODVDRTdBMzJBNQorOjEwQjY2MDAwMzYyRjdFOEQ1MzBFRTkwODJGMUMwRkU3MDAwRjM4MkY2MQorOjEwQjY3MDAwQzA0Qjk5M0JCRDczN0M1Q0Y4QUZDNUM3RjkyOUY4RkQ5OQorOjEwQjY4MDAwRjJDNkMxNEM4Q0Q3RTI0NTcwRjBFN0ExNkVBQjQwRjMzNworOjEwQjY5MDAwRTdDRjc3RkQ5MEMxNDJBRTNFNUY1QkJDOTlFNEZERkYxMgorOjEwQjZBMDAwOTdGOTY2QzRGRkI3RDI5N0YzRkI5QjEyQjc0QjgxN0MyNworOjEwQjZCMDAwREY5RUFGQjczRjQ4RjBFQkExNzYxQUVGMzVDQUZCQjg3MworOjEwQjZDMDAwRkZEQUY5RkZFRkQwQkJGQ0JGNzZCRTU3QTNGNzNFODU4QworOjEwQjZEMDAwREVBMTM2MEJFQUFEQjdGRjE1QzdBRTYzREVCRkZEN0Y1NworOjEwQjZFMDAwNzRERUFERkU4RkMxNkVDRDgyRjE3RENFREM3NzBDMTc5RQorOjEwQjZGMDAwQzgyQkU5RDAxRkQ5MTEyRjUwN0JBNkFDM0JDNjI5N0VBMQorOjEwQjcwMDAwNDUxREZCN0FFNDM0RjhBRTBDRkUwNEZBRkI3NTIxNUZBQworOjEwQjcxMDAwMUIwRjAyREMwMjdFMDJGQTE3MEM5RDEzQzA0MzRCRDFCMworOjEwQjcyMDAwMDBGNzcyQjREQkM2NkE2NjAzRDhGNEU5NzQ4MjI3OTUyMQorOjEwQjczMDAwRkM2OENDODJGNjc3ODA5Rjg3RURGN0Q3N0E2N0Q0NDI5MgorOjEwQjc0MDAwRkRGRUFFMDZBOTBFRTBGMThFODlDOTVCMDFCNkY1MTRDNworOjEwQjc1MDAwNkRCODhFQTk3MzY0NUEyNUNERjhDNkU3RThENzIzRjdFQworOjEwQjc2MDAwMDRBQzJCRUU5QUE0QUZCRjkzQUQ4RjM2NDI3Rjc3OTY5MQorOjEwQjc3MDAwOTk5ODFCQTY3NDQ3NDBGQkE3RTI2RDM0Q0ZCQjU4RjVFMAorOjEwQjc4MDAwNjI1QkM4RjVFM0U5NzgzQzVGOUZENUIxODFDRDEyRTJGOQorOjEwQjc5MDAwQzUyMURBMzdCMkY2Nzg2Mzg4MzdDNDRCNEMyNjVCNkUyNgorOjEwQjdBMDAwQzdBRjc4OEQwNzAxQjYyOEZFMTVGQzkxM0NERTExNjUwOAorOjEwQjdCMDAwN0QwMUYxNjQ2MTczRDk4M0QwREYyNUM5NTg4REVEMkRFQQorOjEwQjdDMDAwMENENjhEN0NEQ0MyMTVBMTNEREVFMDRGMzIwRTIyNTczNworOjEwQjdEMDAwOUM0ODMwREVGMTAwNDMzQ0UzRjMzRTMxQkFGNzY5REVDQQorOjEwQjdFMDAwODE3OEJFN0VCQzJFNEM3RTBBRjE1QTE0NkE3NzIzNUZBNAorOjEwQjdGMDAwMzg5RThGMzZDMkY3RUEwMENGODJEMDg2NEYxNTRGODEzMAorOjEwQjgwMDAwNzg3RjBCNzk0M0UzOTdBQjY1M0FGMzRENDFCRjMzOENCNworOjEwQjgxMDAwODVEOTk3NDNGRjYxRDY1RUNDQzhFN0UxQjNGNEMwQzJENworOjEwQjgyMDAwQzY3MEJEMjY4RTYwMERDQjYxQkRDNjcyOEM2NzVBRTdBRgorOjEwQjgzMDAwOTU0MEY1OUU4N0UxQkRCQUZCRTE3REM0NkIyRjI2MzlBQgorOjEwQjg0MDAwODlGRjhCNkRDN0ZCRTEzMkNGQzVBRTA0QjdGOTlGMUZFRgorOjEwQjg1MDAwRTU4MEZGMTk0RjI1RjFFRDQ3MUJCOEJGNzk2OUQ4MUI2QgorOjEwQjg2MDAwNEIwNjgwMjgzMTk4QjMzQzA4RkQ1Q0U1NEZGNjE2RTNBMworOjEwQjg3MDAwN0IyMjMzRDg3MUZEQ0IxQzBFQzkzNjA4RkI2NUI0QUVGNAorOjEwQjg4MDAwMDlDRjMxRThENkJGNUQxRDVENzQ3ODhCMkM4OEQwQzE5RgorOjEwQjg5MDAwRDFDRTlFQkFGNkREMjcyNUU4RUE3QkI4NkVEMEQ1QzdCMworOjEwQjhBMDAwOTYwREQ0QzFCREFCODdFOERBRjc1OTMwNDIwN0M3Q0I1NAorOjEwQjhCMDAwQjdFOURBMjcyRTlEQTA4MzkzRUJFRkQxQjU0RjVENURGRAorOjEwQjhDMDAwQTJBQkVGRUI5RUFEQUJFRkI3NjlBRTBFRUVERkYwNkI2OAorOjEwQjhEMDAwNURGQjFCNzcyQ0Q0RDUwRkYwMkNEN0Q1NjczNjNGQTE1NQorOjEwQjhFMDAwODNCMzVCOUVEMUI1MUY3QzY4QkRBRTNFRDdGQkIyQUVDNQorOjEwQjhGMDAwN0VFOEI3NUI3NEYwNERCRTNGRUJEQURGRTI3RjQ3MDdDRgorOjEwQjkwMDAwMEY2NzFGRUFEQUU3NTkwRkU4RTA1MUI2MkY3NEVENkZDMQorOjEwQjkxMDAwOEQzOTFBMTBFRkIwQzkwRjY0QTExQTAzN0UwMjM5MUJDQQorOjEwQjkyMDAwMkQ5REQ2QjU4NzE1NUEzMUYyOEQ0OUUxODdEQkQzQkVGRgorOjEwQjkzMDAwRDdENThGQjVGRjUzRDc5Rjk5NTUwMzExOTBBREVBQTk3RAorOjEwQjk0MDAwRUNDMjFBQTgwQzYxMkQ1NDNFRDRERjc1N0IwMkNBQzMyOQorOjEwQjk1MDAwNzNGMjEyNjRBQUZEQjkzRkM0QTExREY5NjhEODAzMzI3RAorOjEwQjk2MDAwRjJEREE1MTg2NjEzMDdDMDc4OThDRjg4N0M2RDA4QkVGNQorOjEwQjk3MDAwRENDQkE1ODkxQjg1Rjk0NUU2QzkwNDNFRjQwQjU0REFGNgorOjEwQjk4MDAwRkNDMUNDMTMwOTdDRTgwRkEyMzJDMjFGNDlDRjIzRkRCMgorOjEwQjk5MDAwNURBOThDRjJDN0QyRjM2ODdGMEYyQUJCRjkxM0E5RUMxQgorOjEwQjlBMDAwRUU4RkE3MzJDNkRGOEZDQTFFRkVCRTU0RjZGNDY3RDJGMgorOjEwQjlCMDAwN0JCMUZFMDE1NEY2RjIwRkE1RTdCREZEQjk1NEM2RjlGRgorOjEwQjlDMDAwRjNFODc5MUZGRjcwMkEyNUZGRUQ1NEM2RkI0NzUzOTkxMgorOjEwQjlEMDAwRTA5RjQ4RUQxMkZEODU1NDI2RjkyN0QzRjM2NEZGREQ3RgorOjEwQjlFMDAwNTRBNkY4QTc1Mzk5RUE5RjQ2NjU5QTdGMEU5NTdERkQ2OAorOjEwQjlGMDAwQjNBOEJDQzFGRjAwQkREN0NGN0YzRjk1RTlGRTg3RTk2MworOjEwQkEwMDAwNzk3RkZGNDM1NDY2RjhFQkE4QkNEMTVGNEJBNURERkZGRgorOjEwQkExMDAwNUI2QTM3QzBCRjhDQ0E4MUZFMjdFOTc5QTY3RjI1OTU2RQorOjEwQkEyMDAwNTlGRTM1RjQzQ0RCRkYwNzJBMDdGOTlGQTc3MkIwN0Y2OAorOjEwQkEzMDAwMUQ5NTM5RkU1N0E4Q0NGNUJGNDRFNTEwRkYxQkY0REU3OQorOjEwQkE0MDAwNTBGRjY2MkE4N0Y5REZBMkU3MzdGOTc3NTI3OUIzN0Y4QgorOjEwQkE1MDAwMEYzREJGQzVERjQ0QTVDM0ZGMjEzRDFGRUVERjQ3RTUxNgorOjEwQkE2MDAwMDhGRjAxN0E5RUU3RkY5OENBOTFGRTJGRThGOTI4RkZBOAorOjEwQkE3MDAwNjc1NEU2RkI4RjUyNzlBQkZGMDg5NTA1RkVEMzU0OEVEMQorOjEwQkE4MDAwRjY5RkE0RjIzNkZGRjdGNERFRURGRUYzNTQ4RUYxRkZERAorOjEwQkE5MDAwOTM5RThGRjVGRjQ4NjU2QjNDNjE5ODI5NDAyRkI2RUE2RAorOjEwQkFBMDAwM0ZDMzE1Mjg1OTQ4NDQ4N0YxQjZENkY3MTU3REJDMzJGNworOjEwQkFCMDAwRjgzOTg2NzE4RjcxRDUwMkFERDM5RjBFRkVFRTVERDIzRgorOjEwQkFDMDAwOTNCOTE2MDlFMUM1RDhCNDA3RkY4RUFEMUI2M0Y3RTI0MQorOjEwQkFEMDAwM0YyNEM2OUE3MjJEQjQ3RURGRkYzRkZDQkQyNUMzOEY4NQorOjEwQkFFMDAwN0VGOTAwREFDN0ZCMkQwQ0VENjNBMEZFNTVCRkZCNTFCQworOjEwQkFGMDAwQ0U5RTY4RjRDMzk2MENGNDk2NjNGQ0U1NzdGMURFNjJBMworOjEwQkIwMDAwMkNCNzI3NzA3RkU0RjUwNDZFNkZCNzI1MThBODdDQkNBRQorOjEwQkIxMDAwQkY4RENBRTJGQjkzQzMyOTRFMTU3NTZERjNCQUE0RDg0NQorOjEwQkIyMDAwN0RCNUZEMUY5MjE0MzhDNDE3NDdGNkUyMUFGQkI5RDY0QgorOjEwQkIzMDAwNzY4QkFEQkZGOTIzQzY3NTFDNzU0NjE2NzQzM0MwNDZBNworOjEwQkI0MDAwNkVFRkU1MkY0M0REMUI2MTRBRjI4OEVBMTczMUNFMjMwMQorOjEwQkI1MDAwMkZCNEQ4RUFBMjEwQ0ZCRkY5MTNCNjVGQzA5OEQzMDJCMgorOjEwQkI2MDAwRTUzMzA5QUVGREE4MTc3RTA4OEE3MzgzNzE4NEJGRUFBNgorOjEwQkI3MDAwQzExMzQyN0ZEMUZFM0ZGRjVGRUVGRkY4Q0ZGNUZGNzdBNQorOjEwQkI4MDAwODU4RjZFNEQ3NDlFNEE0MEJGQzBFOEM4NDAzQThDNThCRAorOjEwQkI5MDAwRDg0MzhDODJGN0E3QUQxMDZDQzg0N0QzMTcwREM4NDdBMAorOjEwQkJBMDAwRkUxOEM4MUMxNDI3QkQzNzkyNEQ3NTc2RTA5NzQ1MjRDMgorOjEwQkJCMDAwMUExNEZGNDIzMkRGMDVFMzM5Q0I5ODA3RkQ4OTEyODk1OQorOjEwQkJDMDAwMTE1Rjk2MzQwQTZFOTlFMkQwOEVCMEIxNjBCRkNCMTQ4QgorOjEwQkJEMDAwQkUyRDU5NUE2QjlFMEZFRDJBN0FGMDc4MTk3M0YzNzhCRgorOjEwQkJFMDAwOTkxNUZFODc3MjM0QTc3RURENUUwQTM3OEE5NzI5M0U1MworOjEwQkJGMDAwNzYwOUZENUU2MDlEMzk5QkRBQzc2M0U3NjM5Qzc5ODdCMAorOjEwQkMwMDAwRDk4Njc2QTNBMjIxMjA5RTFCMTAzNzBCOEM5NzA1Mjc3RgorOjEwQkMxMDAwODY0NkExQkMzMjNCQjNGMzM4Nzc0OEU5REZGMDdCMkM5MgorOjEwQkMyMDAwNEMxMkEzQUU4RTE3MzUzRTJCMzFBOTNCRTI3MTk0OTg4RQorOjEwQkMzMDAwMUU4RUVCOTgwQkNEQzlFMTBDNEI0OUVBOEVFRDVDNDBCMgorOjEwQkM0MDAwOEIxNjI4MDVBMzZCMzAzRTA3N0NDQTQ4NTc1RjZEQjA0MgorOjEwQkM1MDAwN0IzRDhDRUIwOEQ4MTMyOTEzODVEQjM1RDg4Q0YxQzhENAorOjEwQkM2MDAwQ0Y3QkIzRTUwMjUxOERGQ0IwQUEwRDIyRjlGNURFODUzQworOjEwQkM3MDAwRkY1QzgyNzFFQzU5RjE0NjVBMDc0Q0MzOTgzQjhFNkZCQQorOjEwQkM4MDAwNjc1N0I3MkM1MEJGODQ3N0RGNkIwMkM1NUQ2NTM2MzdDOQorOjEwQkM5MDAwMDZFM0JBOUFGRDEwRjI2QjlEOEJBM0M3RTUyMDlEOTYzMworOjEwQkNBMDAwNzYxRDY4NDE1QUM5OEU0RjkzQkE2OUU4QjNBODhFRjBFMQorOjEwQkNCMDAwNUExMjEzQzlFOUIzQzM0NDdFMkREMEE3MTZFOTMzQ0I3QQorOjEwQkNDMDAwNkQzQUE2QzVGMzI1NzZEOThDRkIzMTI1NEJDRjEzQkQzNAorOjEwQkNEMDAwNjZCN0QxNEJEN0FFQTJCRTg5RTgwQTc0RDIzREFGQUFFRgorOjEwQkNFMDAwM0VBMUM2RDE4RkZEMUNCRDg2MjcyQUYxNEQ4NTVFMTg2OQorOjEwQkNGMDAwM0ZCRjBCMkIxRjg5MjRGRDUwQkNEMDkzNUNBREUxRDMxQgorOjEwQkQwMDAwQzA3RDg5QTQxOTQzQzI5RDIwMEYwNTNEMzkzRDk4RDFCRQorOjEwQkQxMDAwREUwREU5RjlGRDhBNkNBMjU3MjA5RDBBN0U5QTRFRjQ0OQorOjEwQkQyMDAwNjA5Rjg3QjI4RDMwOUU3QjEzRDlENDA5RjA3Q0FBMTIxNAorOjEwQkQzMDAwN0ZCREI3NkU3NDAxQzZDQkVGNEVFNEZBRjIyMzU4N0Y5NQorOjEwQkQ0MDAwM0E2MEZERjk3MThEOTUzOTQwMzUxRkE4QjExMUZDRDdDNgorOjEwQkQ1MDAwOUExODgyRkY1NjIzNTFGOTU5NEQxQTk1QzdDQ0FDQUNBRAorOjEwQkQ2MDAwNDEyMzVGQzAwMDY2MUNERjU0NDVBRUE2MjZBQUZCNTJFNQorOjEwQkQ3MDAwRjM2MjMwRUU1RUYwRDM4MTZDMDNBQTUwQjlBMTcwRDRBNworOjEwQkQ4MDAwNERCOEJFMDAyNDY4RjAzM0E5Mjg5ODdDNjkxNUY2OUE0RQorOjEwQkQ5MDAwNkNGOTMxQTgzRjk2MDlGNjhENDg1N0U3NTA1RDdCOTZDMAorOjEwQkRBMDAwOTZEOTA2QTNGRDMyNzI3RTAyQkU1ODhGRkM3N0Y3OThCMworOjEwQkRCMDAwNDg1REZCM0I5N0M2RUFFMEY5ODkxMjhEQUZCMDIwNTE5MAorOjEwQkRDMDAwRjdGQzlFRTI3RTNBNzg5QTFGRDZGM0YwQTkyNEE5QzAyOAorOjEwQkREMDAwMjA0M0ZGMTdGRjYyMjI3RUJFNTgzREI4RkI3QzBFMTM0NgorOjEwQkRFMDAwREYwNUUyRkY5ODU5QTYzODgyQkNERTYyNDdGREY3NkQ5OQorOjEwQkRGMDAwMTBFN0VGNkZGRjJBQkFFQjY4REQyQjUzRENFNTkyRDUzNQorOjEwQkUwMDAwMjZFMTNBRTVDMUU5NzIxQ0Q2M0YxODBDMkVGOTAwQzRCMAorOjEwQkUxMDAwOTdDODMwN0VDMDVFQjY5MEZFOUNCRTVBNjAzMkNBODgxQgorOjEwQkUyMDAwOEZEMTdBNzlERTRCMTY5QUU3OENENTIyNzM2NTEyOUZGMworOjEwQkUzMDAwQzQ2MUZCNzlEMTEyRjU3NzZGQTJENDgwRkNFQ0RCNjg4QQorOjEwQkU0MDAwQjFBRjg3REFFOTVFRTU3RDYxMjBFRDgzNTRDQ0ZEREI5RgorOjEwQkU1MDAwNjEyM0NBNDM0QTRCMDZDNkY3OEJFMzNERDFBODA3Q0ZGRgorOjEwQkU2MDAwNkMzMEQxQkU1Nzg1QjhBRTM0MDQ0ODM0RTc3NzZGODQ2MAorOjEwQkU3MDAwRTU0QTI0N0U4NERGNTMxRjQ3QUZDM0Y5QjdDREQ3NERDMgorOjEwQkU4MDAwNzExMTZGMUZFN0IzODk4MENGNTNBNUVFMEM1QTI3M0Y3RQorOjEwQkU5MDAwQzJFM0YxRURGMUMyNDg0RkM5ODYzMDY5MjNDRTc3QkFDQgorOjEwQkVBMDAwNkJCMDJENUQ2QjBGRjlCRURGNzQ5M0JEOUIzRDFEQjk2QgorOjEwQkVCMDAwM0ZBQjA3RUE4MTYzMkI0QzA1MTg3NzAxQkQzRjBFRjFCQworOjEwQkVDMDAwNzRBQzNFRDJCMDlDMTY1NTVCODhCRjRBOEM5MjU5RkIyRAorOjEwQkVEMDAwREQ5MjE1QTI4M0RBODM3RTJGNDQ3QkJENTI3NEIxQzFGQgorOjEwQkVFMDAwMDhENzUzRkZGMjUyQzE4NUZCNEU0OTJDQTczQkYyRUQxOAorOjEwQkVGMDAwMDNGNzBGRUU4RUYzOThEMkM5M0VFMzc3MjAzMzJFQ0RCMQorOjEwQkYwMDAwM0VENkVDQjc0NUE3MUJCRjk3RTUzNTE2RjVENzhFOUZGNAorOjEwQkYxMDAwQzc4MTkyNUM0QjdCQ0Q0NTNBNkQwRUIyMkY5NzUwQUZFNworOjEwQkYyMDAwMjY4NkUzM0FGNUU0NDFCMDFCRjA4RDU5NzU0RDE5MTJBMAorOjEwQkYzMDAwQjA1RUY5MDNEQjg5MEU2NUUzMUE1MjNDRjBGQzYzQUI5QgorOjEwQkY0MDAwRUJGRDQ0OThDMkI3M0QxQTlFMUE4QTcxQTJDNkU3RTM3OAorOjEwQkY1MDAwNjRCNDgzMEJGOEZFREFFQzk3NjdGNUQxRkFGM0VERkRFNAorOjEwQkY2MDAwMDkxNjYzQzhDMUMyRDM0RDAwQkNCODI0OTY4RkY4OUQ5MgorOjEwQkY3MDAwQ0MxQTk0Rjg4NTlCQzYyN0ExRDIwNTdDRDhDQUY5RkVCNQorOjEwQkY4MDAwREI3NDgzN0RDQTgxMkM0NDdGQTgwREU5QTJGNjc3RDRBNworOjEwQkY5MDAwQzRFMzVDOUYyNzBBM0EzQjFDOURDNEU1N0JCQTgxQ0I3NgorOjEwQkZBMDAwMUREQjI1MTA5RjAyQzEzRTRERDJEOENCMkFCNjgyRUNCNAorOjEwQkZCMDAwNjU0Q0FDQzg3MERGRUU2NDYyODRBMjE3QjhGRDlCODM0OQorOjEwQkZDMDAwRjYwRkY3ODU2RDAyQzk0N0Y5MjY4QkRCMERGQzk1OThCNgorOjEwQkZEMDAwQzRFNTczQjZGOUI1QTcwNjYyRjNGODZBMzM3RTY3RDY4RgorOjEwQkZFMDAwNTY4MTNEMDM0RDRGOTlEQ0E1MkRCODJGNjU1QkI3MjhEMQorOjEwQkZGMDAwODJERTMzRDlEREM4QTc4QTdFQjc4MjQyNDBCRDMwMTNDNgorOjEwQzAwMDAwRkYwOUY1MTVBQjA0Qjc4N0Y4QzU0OTc2NjgwNkM2NEQzNAorOjEwQzAxMDAwNzBGRDhGN0E1RUEzNDdEQUU5RjcwMEJEN0UxRkQzREJBMAorOjEwQzAyMDAwMjM1NkFGQjcyRkNFRTA1MDJCOEU3M0Y2MkFFRUQ3QjYzRAorOjEwQzAzMDAwOEQ0NzY0NTcwMDU3QTUyRUY3REU3MTM0NUU4MUUyMjJFQQorOjEwQzA0MDAwODFERjlGODlFM0MzRjFDMkY4M0NGNkVCMUY0RkE5OUQ0NgorOjEwQzA1MDAwQ0I2OTc5QkRFMDc2NzczMDNFMTVBRkUxQzM5ODg0RjZDMQorOjEwQzA2MDAwNzlDRTA2QzE4REZDMzgyQUVBN0VDMkVGNkNDMDZGMjRGRgorOjEwQzA3MDAwRTI1NTc2ODZERDA1NzAyOTMwOTI5QkUyMkIxQ0ZGNTUzOAorOjEwQzA4MDAwNkIzOUZFODFDRTlGNjhFREVFMzc1MTNFMzNFMkY1MUJGMgorOjEwQzA5MDAwQjA5RjMyRUUwNzU2RkY0MDc0REYwQkY0NDVGOTlEQjVCMworOjEwQzBBMDAwRDk2REM2OERDOEQzQUMzRTJDMDRGOTdFRjVDNzdCNzEyMworOjEwQzBCMDAwNTlGMENEQUEzN0JBRTFGQUI1MzhDMjkzNkMwMEJEMTU3NAorOjEwQzBDMDAwMjk0NzNDNTE3MDUzMUJGRjA1REFFQjc2NzYzOTAwM0Y2OAorOjEwQzBEMDAwMzI3MzkyMUQ2QTg3MjdFQjhBMTZEQ0Y3NkU0NzNGMjU3RAorOjEwQzBFMDAwMkU3NjFGRkUwQkYwNzNERjA2RDExMTk0QTE2QkE3OUM3NworOjEwQzBGMDAwNDc5MDg5RkZDQjY0MUZGOTA5NjUzMENGM0ExQjNFOTUwNQorOjEwQzEwMDAwRjMxMTJGRjdEOTE5RTlEREVCMUQ2RkUwMzg5OTU4NEM4MQorOjEwQzExMDAwRkM4OTcxM0RGNDQzRkVEREYxMDZGQTFGODU0OTNGRUZDRQorOjEwQzEyMDAwN0YwNEVBOTE0MEZGRTM0QjkzQzNCMDEwRkRCRThGRjk0QgorOjEwQzEzMDAwQkVGODQ1QTNBNzM3Q0FFRkM1QTgwNDNCQjQ2OEQzQTM4QworOjEwQzE0MDAwRDEwM0JCQTM5RTU3RjU2OEE5NjJCN0Q0N0VFRjQzN0JBQQorOjEwQzE1MDAwMDVGMEYxRDU2Rjg0MjFERDU1RkFDRjQ0M0I5MURFNjZDMQorOjEwQzE2MDAwMjcxRTlDMEVGREMzRjcxRURDMUU0NEZEOUYxRDBCNzY5MworOjEwQzE3MDAwMEFGQTJDN0VGNkZEMzBBNkQxN0YwQkZCQjgyQTkyNTAyRQorOjEwQzE4MDAwOUZBODc2NEQ1QzE3NjcwM0ZFNTJGNUU1RDVENjVEOURGOQorOjEwQzE5MDAwQ0UyQjI0NjA1RUExRkE3OTk1RTBCQzMyREJGQTlCQUUyRgorOjEwQzFBMDAwQ0NFQkVCQTU3QzNFNDc1N0YwRjlDRDY4MzcyRjZFRjcwNworOjEwQzFCMDAwMUY3Q0RFNjI5N0M5MkZGMDQ0QTMxQzdFQkI1OTY0NzVCNworOjEwQzFDMDAwNDQ1RkVFMzc1Q0IyMDIzRjBEQzBGOENEMEFCMkVCMjdGOAorOjEwQzFEMDAwQTM5OTg0NzE5RDRFRURGNzRBMEJGOTA1QjNCNkYxRkRCNQorOjEwQzFFMDAwRDY1M0MyRjBFRUI0RjFGRkFFMjdFQzIxOTRFQjJEMjIzMgorOjEwQzFGMDAwNDMzQkQ0MzY5RTU2QkJCRDJBMjk1QTYzQjdBRjExNkY1NQorOjEwQzIwMDAwMTg2NzQ1N0I1NjA5QTg0M0JFQUY2Q0VDQ0VGMDlDQ0JCQgorOjEwQzIxMDAwOEFFMUFDNDFBNDdENzgyRkU5MzE2MDIxOEE0RjgzMUZFOAorOjEwQzIyMDAwQUU4QjM3NTg5OERENkE0NTNBNzUxMjdGRkQ0N0YyRjlCMworOjEwQzIzMDAwMjk3MzA5MUZCRTE0QzRCRkZBRkRBQTJFMUU1Mzc3RjQzQQorOjEwQzI0MDAwNkIzNjBCRTRENzU0Q0MxQjFFMzY5Q0UxNzc3OERDNkM0NAorOjEwQzI1MDAwNEIxMkI3NTNEQjE0M0QyNzM4QUEyOTJFMDYzRThERUQyRAorOjEwQzI2MDAwNzExQ0Q3NUExRTFGNjZFRkIwMDZDNDJGQzIxNDNGMzY4QQorOjEwQzI3MDAwRjA3OTA4OTI4RDE1MEZFNDcxNzkyQkRBQjUxMDAzRDk5NgorOjEwQzI4MDAwQjU0MDNDN0NBRDdDQTc0MjM0OTBGRjVCNkVFNjdFRjAwRgorOjEwQzI5MDAwMzk4MTlGRkY3ODQ3QjE4RkVGMjQ3MTdGRjhGRDI0MUUwRAorOjEwQzJBMDAwODczODg3N0UyMEY0N0JFRTI2OEJCQjU2NDBCN0Q1NDg3NworOjEwQzJCMDAwRUI2NEUzMzA4QjFCRkQxOUEzMzVDNDIzNjYyMDdBOEQxNAorOjEwQzJDMDAwREZCNUNBMzNFMDZCMEE2QjMxMjEzREM3RTVEQ0JGMDkzRQorOjEwQzJEMDAwRTc3M0I4MjdCMzg5NURBOURBODlGQjA4OTM0OTMzMzAzRQorOjEwQzJFMDAwQjZERkY0RTU3QjE4OEY5NEExQUQwODZCODVDOTM5MjdCQgorOjEwQzJGMDAwN0E2M0ZCQjUwOEMzRkMwRjA3MzVCQzg3NzE5NkMzRjFBMQorOjEwQzMwMDAwNDY4NkZCMDJGMkRCMTZCMkZGQTYxMURFREUxNEE3RUNCNgorOjEwQzMxMDAwQzI1OEREMDA4Q0M3RUM1OThDN0NCNDM3MjYzMkNEMDY3MAorOjEwQzMyMDAwRURBNzFBQkJEODQ1QUU3RjQ2OUVDN0YxOTYwOTdDRkZBNAorOjEwQzMzMDAwNjY5MTM3MUJFOTczMjM1QjY0M0I2RUE1QUQ4NUFENTdGMgorOjEwQzM0MDAwMjI3RjhFN0Y4Q0VDQjhDQTA3MzBBNkYyMTFGMDhGMjFDNQorOjEwQzM1MDAwOEMzMzU2MEVFMTUzMDcwMzVFMDlGRTIxNjlERTg0NTVENgorOjEwQzM2MDAwQkQ3MEQzNDRFQThGNzQyRTRGRjAxOTcxM0ZDNTI3MzA0QQorOjEwQzM3MDAwREY3QUMwQzMxRDM5M0VBMzAzRTlFNTYwMERFMzgxN0Y4OQorOjEwQzM4MDAwM0RGQjk4ODBERjQxMTFDMEVGREVFNTQ5MTg4NTc4NjBGQworOjEwQzM5MDAwNjkxMjBCODdGQUYxNDY4OUUwNUUwNTJDNDI1NEY2MERDRQorOjEwQzNBMDAwMzA4RTc1NjhBODQwNzQzMDU4MjUxM0NFREI1OTIwMENBOAorOjEwQzNCMDAwQzQ3REQxRjI4NUQ3MzZDRUEwOERCRjk5QjA2QTE4QzBBMgorOjEwQzNDMDAwMDYwMzVGQ0YzRUM0RDdCMzkzRTUyM0EzQzg0RjFBQzY3NQorOjEwQzNEMDAwMDRFNEMzQUE4ODA2MTNBREEzNDE1RTcwRkMwM0EwMUI0RQorOjEwQzNFMDAwMkRGRTI2MUJCRDdDN0M2NTMwQkU1Qzk0OEIyNEUyRTM3NQorOjEwQzNGMDAwN0JBQTA1RjIyN0FCQ0MxREM3MzVBMjkzRDU3RDM5OUIwRgorOjEwQzQwMDAwODRFREU3QzBCRjkwQUZFNzM0NkU0RkM2RUZBRDEwMzg5NAorOjEwQzQxMDAwMUZDQzUxRjlFQzU1QkQ1QzBFNEU2NkM0QTc5REYxNzU1RAorOjEwQzQyMDAwOTZEMjdGNTZCMjgxOUZFMzZBRkQ1RTAzRDlERDM5OERENgorOjEwQzQzMDAwRUYxRkMyNzU2NTY3RkQ1NzU4OTg4N0YwRjJCNjg1RTIyMQorOjEwQzQ0MDAwMDc4MkMxOTc0NDc0NDE0NDAyMUQyNkEzM0YwOTJFRTI4RQorOjEwQzQ1MDAwQzA2NEVFMjdBQUZDNTk4QUZFNDcyMjk2M0MyRTYyMDA1MQorOjEwQzQ2MDAwRTU4OUY2QjBBQ0ZFNzkzMzIyMkRGMEZDMTEzODNFNzQyQworOjEwQzQ3MDAwMEU2OEY2ODZDMEU3OUFCODhBQThEMzNCMTRGNzE0Q0NBNgorOjEwQzQ4MDAwQkUxOTM4MUVFMUU2MjAzQkVBRTNDOUU2MDY1QTk3MDdFMworOjEwQzQ5MDAwQjYzM0Q1NzMzRkNCQjQ5NEZCNTlCNEFGMDZCMDY1MDU0MgorOjEwQzRBMDAwRjczMzI3RjdGMkY1NjdBNEU3NkNGOTQyM0M2QkY1OEI5RAorOjEwQzRCMDAwNEJGOUE3RTE3OUI5Q0UyRkI2NjAxQzAxRTM1RUFCQjlBOQorOjEwQzRDMDAwM0Y2ODU0RkNENzkyMTU3QTdGNjFGMjIyOERCRjQ4REQxOAorOjEwQzREMDAwRkEyQTcwQkNBNjQ3ODIyOUVFNjI0MTdGNDJFMzA3RkMzQworOjEwQzRFMDAwREQ1MDI4QTMxRTk2MTM4Qzc0RkVEMkM0MDJGRDA5MjdDQQorOjEwQzRGMDAwRTNGMTRDRkVEQ0E4Rjg4OTIzOTM0REJBN0QzNzc5MDQyQgorOjEwQzUwMDAwNEI0MzNDMTRBMzFFNEE0NDU1RTM1QzhBRjFCQzBCMkNGQworOjEwQzUxMDAwQjQxRUUzNjZBM0M0NDcyOEZFNTc1Q0NCQ0ZBNTA1QzY2RgorOjEwQzUyMDAwRkYyRTU0QkZGNzJDQjZDNzdBN0MzRUJGQ0I0RjcxQjhGNQorOjEwQzUzMDAwQkYwOUNCNTJBNzcwMzNDODc3OTdDMzk3NUMyODFGQTA1OQorOjEwQzU0MDAwQTg0QzI4RUY0MUZCQkY0MTU4MzA4NDMzMjEwN0JGRUY4RgorOjEwQzU1MDAwNzkxNkZCOTdDRDU2MUJFQUFEQTc4M0MzQTg5RjA1MEJBMQorOjEwQzU2MDAwMDQ4QTBGMkZCMjcxNzlGQkVBQ0JEMEY1QThBN0Q0Nzg1MworOjEwQzU3MDAwRUY5MkUxOTlBQkYxRENEMjZGOTI3NzRGQjBGNjQ2RjVDRQorOjEwQzU4MDAwQzBFOERDMTIxOEM2NEYxQzMwOUZBMkNCMjAzNzA0QkY3NgorOjEwQzU5MDAwMzdDMTExMEU3Q0ZFOUU2RjhBMTVGMEI0NkFFMzdCMTNERgorOjEwQzVBMDAwOENDMDhGRTc3RUVGN0IwRUUxMTczNkVFRTdGMEVGN0M3NQorOjEwQzVCMDAwNzE0MTA4MjcxRjk4NjAwNDM5M0E1N0FCRjY3NzYwODJCQgorOjEwQzVDMDAwMDNGN0RERkZDMEUxM0FBODk3MDEyRTQ2RkQ4NkYzMUU3MgorOjEwQzVEMDAwMjJEMEJBN0YyM0RBQTVFOEI2Nzg0RkIxRTExRDVFOEU4RQorOjEwQzVFMDAwNjAxRUI0OUY1NzZCRjdBNzY0RTc0NkI0RDc2MkU4QjEwMworOjEwQzVGMDAwNTBGNDJGQjZBNjNBMDhERTkyRTg3QzJDMTlGREEwODNGMQorOjEwQzYwMDAwRUU2RUQxMThDNzMyQjAxNkE0MEJEODMxNDc0N0ZCRDIxMworOjEwQzYxMDAwMUI5M0I4RkM2RTRFRTFGREE5Rjg4MjdFOUU0RThFQkU0NQorOjEwQzYyMDAwRkU3RTZFNjlERjhGRkJERjE5NEY5NzU0RTgyNzVCRDdEQgorOjEwQzYzMDAwQ0Y0QkZGNEUzRkU1MDFGREE4N0UxQjM4QzAxMkVBQTk5MworOjEwQzY0MDAwRDM2OThFNzc3MTlFNzM3RUUzMThCMTE1RjVDRjdFOTExNQorOjEwQzY1MDAwRjhGNEZCRUFFRDI5NjhGN0JGN0ZENTEyODlGNjZGQ0VCMworOjEwQzY2MDAwRUIzQkUzNEEzMThFQTBGODQ1QTc5QjNFMzM0QkYwN0U2RgorOjEwQzY3MDAwQTU1RjY0MEVEMEQzNTU3RTgxQ0FDQUFENERFNkZDNzQ2OQorOjEwQzY4MDAwM0M1N0RCNjRDRUQzOENBQjVDMTkyNzcwQkE3MTgyQzY4MQorOjEwQzY5MDAwOEZEOTk3QUNDNjlGNTdEMjc4RTdCQzdFRDI4OEY0OUNERQorOjEwQzZBMDAwNjM2ODM4OEVFNzhGRDkxMDFFRjcwQTlDREYxNkU1QkQ0OAorOjEwQzZCMDAwQzM3OERFQTA4MzM4QzA0N0M5RENFRjg4RTlFN0Q4OEZBQworOjEwQzZDMDAwRjNEQjhDRkExQ0Y5QzVDMENGODcwNEI2RUY5RUMyRkIyMgorOjEwQzZEMDAwMkJFRUMyRjU3Q0Y2NDE3QkU5MDE1QUY3NjUxODQ0MjgzOAorOjEwQzZFMDAwMDcxREFBMzY5N0MwRjMwMzg5MjMwRTI1NzcxODg3RjQxMAorOjEwQzZGMDAwRjEzODY0MjM4RjQzMTY0N0I0Q0MwMzYzQzYyMjUyMkUwRAorOjEwQzcwMDAwM0M4MUYyNzZGQkQzQUE3QzgwRTg4MTdFMjlCMEE4NzBCOAorOjEwQzcxMDAwRDBDNDkxQzM3ODlDMEJFMTRCMUIwRDRGRTIzOUMyRTZBQworOjEwQzcyMDAwMkUyREJGM0E4MEY2NjE1OTI4NUIwRjcyNzZFRkUwRDA2QworOjEwQzczMDAwQjgyRDMwOEVFOTcyQjgwMEI2OTMwREI3ODRBNjRDODMzRAorOjEwQzc0MDAwNzYyNzEyODY0N0E0RjBGMzI3RTQxRjlFNDg3MDlFQzUwMworOjEwQzc1MDAwRjE3OUUzODMwREUwOEMzMDk3OTlDN0IzNUMxRjg4MTQ5RgorOjEwQzc2MDAwQ0Y3MjY1MDRCQkRDMURFMEVCQjQ4MkNGODgxNEVFOUY3MgorOjEwQzc3MDAwMzUxQjYwOUMwMzcxMUNGQzdDMkZGQ0M1NkRDMTc4RDNGQworOjEwQzc4MDAwQzIzRTAyRjI5REZBRkQ1QjEzODc3NzREQzk2RUZCRkUzOAorOjEwQzc5MDAwQUQ4OUNFOUY5MkEzQjVFREMzMTlCNkJGRDY3MUZDNTMzOAorOjEwQzdBMDAwQjFBNzVENTMzOEJEOUNDMzgwQkYzNDdBN0ZDMkM4NjBENworOjEwQzdCMDAwMUQ1QzM0MjY5MjM5QjRGMUNEQTI1ODFEM0NBOTM4NTFFNAorOjEwQzdDMDAwRDdGRTlFMTlGRDc0RjU2MzJEMkQ1OUQ1RDdFMUVGOEI1QQorOjEwQzdEMDAwNjE2OUUxQjRGRUNGRTZFQjkwQUYxQTJGN0QzQTE5RkQwNworOjEwQzdFMDAwRDgwREEyNUQ4MDc5Q0Q3QTdCRTNBNzQzQTk3Nzg5RTI1MgorOjEwQzdGMDAwNUNBNzlBNDVCMjQ3RTBERTlBQjVGQjI3Njc1OTBCOURDNworOjEwQzgwMDAwM0IzNjc2NUQ0NEY2NkY0RTBDM0ZERjNEQ0JBRERGRkYzMAorOjEwQzgxMDAwNTBFM0YyMURFRDlCQTAzRDJCQzc3MzMxMURFRDlCQjQ4MgorOjEwQzgyMDAwQzVFMzdGNzZGRjI0MzM0NTU5MEYwRjY0MDNGOTdBRjg4NworOjEwQzgzMDAwQ0M1RTk4MjlDQkRCRDE0NEY0QUFEQjI3REE5MTU1RUIwNworOjEwQzg0MDAwN0EwQjRDODA3MURFQkFENUUyMEU4MjcxOUZERDc5QzQxRAorOjEwQzg1MDAwMkM2OUY2NEZBQUZDNjAwMDIyRjFCRDIzNjYzQzRGNzU5RgorOjEwQzg2MDAwMjA5OUVCRURDQUM2RjM2Njg2N0NEMTc4M0ZDOTc1NEIzQgorOjEwQzg3MDAwOTMyQjJBMUFFRDE3RjhBQkRCQjI5MEJGMUFCMkQwRkU5OQorOjEwQzg4MDAwMzUxQjZDNEVEQzBGOUJCMzc0MzRDNTk5QzNGRDkzQTk2MworOjEwQzg5MDAwMkNBRjFGNERGRDU2RjgyNzEyNUNFOTBGMjZGODIzQjE4NworOjEwQzhBMDAwNjVFQkM3RDhDRkQzRTEzNkI0RTcxNTQ2Rjk1NUE0NEJBRAorOjEwQzhCMDAwODUxNDlDODlGQjU1OTU1QjNGQkVGODZCQjRBMzM2N0UwRgorOjEwQzhDMDAwQUY2M0FDRjg0OTE2RDY4RkVENjMzM0Q0NzVDNUYxMDY2NgorOjEwQzhEMDAwNTEzRjJEMjNCRUM4NDJCQjU0ODBFQjAyNzg1RUJFMjU3QgorOjEwQzhFMDAwRDc4NTcyM0ZCQzJFRDQ4NjcyMkZFMjc5QjIwRUY4NzRDRgorOjEwQzhGMDAwNkEwQUQ3MkYyNjJGMUZFRjI4N0YyMUY1RDdCQUJFNEYwMAorOjEwQzkwMDAwNDlBMEY5QUJCMDI5N0E4MzExRjU4NzNBMEYxMzE4N0M0NworOjEwQzkxMDAwMkM2RkYzRjdBM0IyNkE2QkExMTFDRkM1N0Y5MEY2N0NBMQorOjEwQzkyMDAwMTRFMjA5REE4NzYwOTkzNDcyMjhFOTk5RUZBQjA3ODczNgorOjEwQzkzMDAwQjMwRUY0OTY1QTVBMTQzRDNDMTlGNTMwRjQ1Nzk0RTY2OAorOjEwQzk0MDAwRjgzNUNBRTVCODQ3QkM0NjJCRUFEMTEwQUIwREY3M0YyNgorOjEwQzk1MDAwQzZFNTBDOTA0QTM1RjMxMURGQjkxQjU3MTJFMEFCRjg2RQorOjEwQzk2MDAwNENFODA3NEM4NjUyQUJCN0E3NzY2MjVGRTQxNDgzRTJDQgorOjEwQzk3MDAwMTdENUYyNzM5REFBN0U1RkY1MDRDMzc1RDgxNDdFNTY1MQorOjEwQzk4MDAwQUI1NUFFMkE5NEY2RUFGQjJEMDJGNzA3RTQ2RDNDQUVGOAorOjEwQzk5MDAwNUY5MUU2N0ExMkM3REIzMjlDNEREQTQyRkFCNDI1QUVEQgorOjEwQzlBMDAwMzBGNDk3MUI3Rjk4QjE4NUU4MUM2NjkzMENCOEFGQTA1NAorOjEwQzlCMDAwRDZBRjZFOUQwNzk3RUZBQkNENjNCMUQyRkUyMzkxMkQxRAorOjEwQzlDMDAwNDBCRUY4RTg5NjVCNUExQ0QwNkZEM0MzOTk5OUEyQzZCMworOjEwQzlEMDAwNEVCRDk0QzJDRjM1MzM5QkVGMzJFOThCNURDMTEyRUE3NQorOjEwQzlFMDAwODFCMUI4Rjc5MEQ1RTZGN0UzNzk0ODhDNkI1NEVEQjI5NgorOjEwQzlGMDAwQUNDN0YzNjA1NTYxQjBDRTg3RUY4RkU5RTc3QTA5RjFGNAorOjEwQ0EwMDAwRDFCNDNCRjcyMkRFQTM3MUUwQzIwQ0U0RENEMTM4RjhFQworOjEwQ0ExMDAwMjI5RUIzNzc1ODQxREJEOEQxMEY3MkJDNENGQUJGOTMzQQorOjEwQ0EyMDAwRjE1RTREOUYyNThEOUMxMzg1RkVDNEY3MzAyNEI0Qjc2RAorOjEwQ0EzMDAwNjBGN0IzMEU3MkQ4ODlGODcyMkRFNUYyRTc1MkU0NzAxMAorOjEwQ0E0MDAwOUFDMkJGMjU4QTFDNEUzMzcyMzk5Q0JBMkFEQzg2RjEwMQorOjEwQ0E1MDAwQ0U5MjQ3ODRGRTc4NUU4RTQ5QTE3NjU0MDEyNkU0Q0JCRgorOjEwQ0E2MDAwNENFNDRGQ0U5N0U1RkVBRThBM0NDNzJCRkQ3MEZFMEYxRgorOjEwQ0E3MDAwOTRDRjRBN0YyNEI1NTNFNUY0RTUzNEQ3MjE2RUU3NUFDNQorOjEwQ0E4MDAwQjIxNkMwQjg2RTAzQjk0NkJERTc1QUQ4MjMwQkU1QTQ2OQorOjEwQ0E5MDAwOEQ0RkNDMzZFNDI3RTA5Mzk4NTIwRDFGRDQzNUZENjhCNgorOjEwQ0FBMDAwNDQzRTMxMEQxMzg4NEYyQzUwRTY2OUY4QzhEOUVBOUZFRgorOjEwQ0FCMDAwRDhGMkJCQTE1RkI1MjhERUIwOUNCNUQ1N0Y5NUEyRkFCMAorOjEwQ0FDMDAwMjlEN0M2RUYxRjI4RUQ0QjQyQzA4RkEwRjg0RjE4QzNERgorOjEwQ0FEMDAwRjhEQTg1Mjg4OUUyQTQ3Mzk3QzEyMDAxMDU3MzREOUU3OQorOjEwQ0FFMDAwNjQ4Q0MzQ0NCRDNGODhFMjYwQTUwN0FCOTc4NDRBRUQ1OAorOjEwQ0FGMDAwRTk3NUI3M0Y4M0Y2OTcyN0ZBOTNBODNDOTBFODNBOERGQgorOjEwQ0IwMDAwRjg5OEU2QkY1M0MxNjNDNjM1RURDRjY1M0I3OERDQ0QwMQorOjEwQ0IxMDAwRTRCNkQ4RDdDNTYzRENDRDI1RDI3RTVDNkY2NjdCOTI0OAorOjEwQ0IyMDAwRUM5NEJBMUZDN0UzNkUxOENGQzNGODVFRTBGRTFBQzZENgorOjEwQ0IzMDAwRTE3MDNENkQ4OTMyRThGNjA5REJDNUUzODZFQkY3RDM5QQorOjEwQ0I0MDAwQ0E5QjNFMTk2NDgwRkE1M0YxMEU4QUNCNzlGQkI4OENFQworOjEwQ0I1MDAwQTkzMDhGRDkxM0RDQUY5QkI0RkI2QzBBMUUxQjhDOUVEMworOjEwQ0I2MDAwNjRCNEEzMERENTFDM0YwRDJCQzQwMkRBNkY2MjJDQjg0MAorOjEwQ0I3MDAwNTA3MzVFRjc2QTdDM0NEQjlGNDhGODUxRUQ4QkFBQjc5NworOjEwQ0I4MDAwQjdEN0QwQTFDRjU2RkQ3RDM1QkI1M0ExRjA3QjA1RjJDMQorOjEwQ0I5MDAwQkJCREJEOUQ1MUY5MzU5MDlGNTVGRDZDOEEzRTQ4N0FDRAorOjEwQ0JBMDAwRTgzNjc4MDVGRDA3NTU1RjE3RTQwRDFEODY3NjdFRThBQgorOjEwQ0JCMDAwNEI4OTVCRkYwQ0YzOEY0QzczNjVBNTAyRkZEQ0YyNEFENworOjEwQ0JDMDAwRUZBQzM1MDBERjY2NzQxQjZEMjFEN0EyMEY3RjM0OTE2NworOjEwQ0JEMDAwM0U3Q0E0OTA5MTNFODQ1MkFCMEY0RDlERjhFMUI5QTlFMworOjEwQ0JFMDAwRDdBN0NGNTM5NUY2RTBDNzcyRkYxMEY0QjVCNkJGOEE0QQorOjEwQ0JGMDAwQjQxMTYzNzBGQzg1QTlEQzRFRkU1MkUzRUU0QzhGMTczNgorOjEwQ0MwMDAwQTZBQUYyNzk2RDdBRkM2NkE1RkRENUY0Rjg4QzU0QUUyRgorOjEwQ0MxMDAwQzcwM0Y1MzY2ODYzRDJEQkU3REVFRTRCNzFCMkMzMENCNworOjEwQ0MyMDAwRjQzQ0RBQjNDNjYwNjk2M0JDRTY5QzdCOTc3MEI3NTY4OAorOjEwQ0MzMDAwQUZDN0Y0OUIzRTAzRjlGRDFBRjRGQTdEODhCRjdGNTcxNgorOjEwQ0M0MDAwQUZFNzE3NkUyNkJGMEFGRTlDRTM2Rjg2RjVDNzZGNjFEQworOjEwQ0M1MDAwN0Q4N0YwNDdCMEJFOEI2RjJGMEY4MTcyMTBDOEY3QjA4MQorOjEwQ0M2MDAwMUVEOUZBMzE4Q0FGRjlBOTNFMTQ3NzAwMzkyMEJFQUYzNgorOjEwQ0M3MDAwMDBCRTQ3Mzk1MEU1QTU3MkVCODA3MERDMzc2MDdGMTE0QworOjEwQ0M4MDAwMTlFQUZGNDAzOTI4Qzg3QkM1ODg3MTJBRDRFMzg4QUZFOAorOjEwQ0M5MDAwM0QyMEYzQTg2NzAyRUQ4NDNGRDVCNTBBRTdBRkNBODMwQworOjEwQ0NBMDAwMkEwNzU3RTdBMzlEMjY1Qzk3OUFDQUNGNzMzRDBGQTUyNQorOjEwQ0NCMDAwNTZDRjc3RTZDRkZDRTEzQUY5RkZEMUQ0NkJGMzAzNUVCMAorOjEwQ0NDMDAwNERFNUY3MjA3RTQxRkU3OTM1RjVEQUZDODJENzUyRkYzQgorOjEwQ0NEMDAwMjNCRkUwMkRFMjFGRDQ5RkI4N0VCQkZENDM3QkY4N0NEMQorOjEwQ0NFMDAwQ0UzRjc0MkUxMUY4MjEwQkUzQ0VDRDgzN0FEQjMxNEU4QgorOjEwQ0NGMDAwNzNGQjE1RUVENzgzNEUyN0JGM0VEMEFGOUVBQ0U4QkY4NworOjEwQ0QwMDAwQTk0QTlDRTA0MDlBQjMyNTk1Q0IyQkY5RURDMzEzODMzOAorOjEwQ0QxMDAwMDdBMEJEQkE1NjdGNkY3MjU0MzVDMzM4RDM1NDI4QjVCNworOjEwQ0QyMDAwN0FDMjgyNzRFQkMwNUZGRjZCRUFGNUQ5RUYzREQ3NDg1QQorOjEwQ0QzMDAwREZFM0E5RkZCMTlGRTdCQjE2N0Q5MEU0QjA0RTQ0N0NEMgorOjEwQ0Q0MDAwN0VFRjMxMzJDNEQzRDVENjAzQTZENTFDQ0YyQUJDRDhBQQorOjEwQ0Q1MDAwNjM1NEVENjYyNERBNERFMDhGRjNGRjA5N0Y4Q0NENkJEMQorOjEwQ0Q2MDAwQjg2ODA1QkE4NkE3MTk4QjMwMUU3ODI3OUVCNUEwNzhCQgorOjEwQ0Q3MDAwODY2OTk1MjMwOUY1MEQ1M0Y3MDUyOERFRjE5MUE4QzJDMAorOjEwQ0Q4MDAwRTY4MzIzNjExQ0I3M0ZDOURBRjYwREEwN0VENEIwRjA2QworOjEwQ0Q5MDAwRDZGODg4QzBEQURBODdBNTg5MDc1N0QwQjhGOTc5MTVBNworOjEwQ0RBMDAwRTZGMjFBRjkzRTk5MDI2NzAxMUNBQTgxNzMwMkUwQjUwNgorOjEwQ0RCMDAwQkM3RDk4RDFDQjZDREE3RTE0RkQzM0NFQzZGNzA1REE5NAorOjEwQ0RDMDAwRjZGMzdDRjk1REQxRkZEQjJBRDg3MDdGRTE5RTYxRTc0NQorOjEwQ0REMDAwQ0MxOENGMTk5QkU3REQxQjBCRURFMkQzNDI4QjQyQzA5MQorOjEwQ0RFMDAwQzRERkIzNTVBMEYxMEVEODE0QjU0QTRFQTIyMzVCMEU5MgorOjEwQ0RGMDAwM0M2RjU4OUVDM0Y3NEQyQzBENERGOThFMEVGODcwNDBDOAorOjEwQ0UwMDAwOUFERTRFRTE5RkIxMUJDNUM3RThDRkQyMjAzMDczMTYyMgorOjEwQ0UxMDAwRUYyNzIxRkVEQURFNDdGQUQxRkIwOUY0QkVDNzEyNzUwRgorOjEwQ0UyMDAwRURFRkRGMzU4QzM5REMxREYwRDEyRDY5OEEzRUM0QjhCOQorOjEwQ0UzMDAwQjBEQTNGRDA2NDYyODNFMEU4Mjg2RTczQUJEMkJFQzUzRgorOjEwQ0U0MDAwNjBBODYwODBBN0YxOUJEMjU2NjFEQzZCMTRFMzdDNTEzMworOjEwQ0U1MDAwQjgyOUI1NDhFNkZDQzcxQzAxRjNGREI5RjE2NkE3RTk5RQorOjEwQ0U2MDAwRDc2N0Y4MjdFOURGRjdGQzFDQkU4NkI2QzM5NzQyRkZGOQorOjEwQ0U3MDAwMzIzRDlGODQxQjlERUY3RTBGRTMwODhGMTI2Q0U4QTc2NQorOjEwQ0U4MDAwNTYzQTgzNTZCMDcwQTRCQkMyRDdGMkMwMjJDNzMwOThCRQorOjEwQ0U5MDAwNUYxMEQzQzVGMTVBRjk1QUNFMkM0MkJFQUU2NDZBRkI3QworOjEwQ0VBMDAwRUM1NTQ4N0ZBN0ExQjUzREU3RjM0NkExRjVGRDM0MjMzNgorOjEwQ0VCMDAwQzM0RkQwRkI3MzM2NjVBREMyMzgzOUQwODNFQTA5MzYyQgorOjEwQ0VDMDAwRkUwQzlGMzcwNEMwQzMwMkU0ODI3MTk4RTQxMkY1MzI2RAorOjEwQ0VEMDAwRTAyN0I5ODNGRERCQTUwQTdFQ0YwQUZDN0M1M0NCMDg5MworOjEwQ0VFMDAwRUVDRkI1MjRGMEYyQzUzNEVFQkYzREFFRTBGMTY5QTU1QQorOjEwQ0VGMDAwNkNFOUEyQzE0M0FGMzYzQUMzOUYwN0Q3MDM5QTc5MTNBRgorOjEwQ0YwMDAwOUVFRThFNTJFNjJENEYyQzFBMDNGMzZBODk2MEZEMDVDMgorOjEwQ0YxMDAwRTA5Mzc1OUJDNkFGNUFBNEUxOTNFNzM3NEQyQzQyM0M5MgorOjEwQ0YyMDAwQjRGNjI3MTcxRTQ0M0NERUFERTBFOUM1NEQxMzBFMjJEMgorOjEwQ0YzMDAwMUZFMTkxMTM5NEI3OEExQ0JFRkY2QUQ5RkE3MTg3RjI3OAorOjEwQ0Y0MDAwMzZCNzNERkZDODk4NUZBMTgyMTgwOURGMTMxQ0E2MkNENQorOjEwQ0Y1MDAwREU0RjQyMDdGODU5RDBGRTdENDdDMEZCQ0MxNDc1M0QyQgorOjEwQ0Y2MDAwRUYyQkY0MTkxMzQwQkY4MjAwRkE4RDBDODA4QkY1NzAwMworOjEwQ0Y3MDAwOUIxRjBDM0Q4M0ZGNTRCMjYzRTVFMjZFMTgzRkRCMjQzOAorOjEwQ0Y4MDAwRDAxRDJCRDBDRjY2MDE5RTM3QTZERDVCMTREMjAzRjlFRQorOjEwQ0Y5MDAwNTQzMkM1NDI1QjRGREFENDgzRDZCRTIwOEZBOEJGNDgzNworOjEwQ0ZBMDAwRkZCQTQ4NUY0RjQ0MzkyNzc4NUE5MUUzNDZFNDlCRUEzOQorOjEwQ0ZCMDAwQzUzMUQwN0U2RjVBQzkyQUJDRjc3QUNGQTI5NTI2NDRENAorOjEwQ0ZDMDAwRkEwNzY5MzM1NjE5QTFERkJCQjNGRUI0MTdGQjMzMEE2NgorOjEwQ0ZEMDAwQTUwN0M3MDgzRkMzQTdGNTAxRjM1ODFCMDBDQjAxRUQxOAorOjEwQ0ZFMDAwNTc1RDQ1OUYyRjBBNzhGRjkxODBGQTE1MDFGMEVBMDBGRQorOjEwQ0ZGMDAwNzhBOUZFRkQ2OTMzRjhGRUU1MzRBMDFGMjJFRTZBRjIzRgorOjEwRDAwMDAwRTI0RDZCNUQzN0I0REEyRjAxRUREOTg3N0E3RUJGQkQ3MworOjEwRDAxMDAwOEVDMzI3MzczRDUwQjQzNDQ0MDNBN0ZEQUE0OENCQkY4NQorOjEwRDAyMDAwMjZDNTVFNEM4RTcyM0EzQUUyREY0MzlERjE0RjVBQTAxQworOjEwRDAzMDAwNUQ5Mzc1RTcxMjBGMzNBNkIzQkY3QjQ0M0REQzI0QUE5MgorOjEwRDA0MDAwRjJCNUYwRTBCQzc0Q0Q3RUEwNUM1Qjg0RjE5NENFRjdDOQorOjEwRDA1MDAwMkJFNDIyRENBRkI4RkQ3MUI1N0Q0RDkxNDMzMzNGQjU3NAorOjEwRDA2MDAwN0RGRUJGQUU4OEY4QkQyQjY5MzU0NTFCNjhGRjRGRDlFMworOjEwRDA3MDAwQkY4QkUwRTUyRDk3QUY4NDIxNURGMkYxRkMyOEQ2NzdEOAorOjEwRDA4MDAwRjEyNENGNEREN0NDOEYzNUE0RTBGQzlBMUVFNkY3MERFNgorOjEwRDA5MDAwRTUzQUEwMDdDODc5MDlCM0QzRkU3NzUzNzhGODgyMTcyOQorOjEwRDBBMDAwQTBGRDlFODdDNTA1NjhCRjBFMkY4OEE0RjM0NkUzRkI0RAorOjEwRDBCMDAwNzI3RjdCNEY3ODlGNkVGNzAxREMxNDNDRDU4QzcxRDU2NQorOjEwRDBDMDAwQTY0NzQ3NTFGOThFRTg1OEUyMDNFNEY3RUFGQjU4NTFDNgorOjEwRDBEMDAwNDg1RkFDMEYyN0JDQzRCQ0I0QUNBODE2RTQyMEI2QUYwNAorOjEwRDBFMDAwNDRFRkJCMjI2Q0RENzZBMDFGQkFEQ0M0NzBGRjg5MzEyRgorOjEwRDBGMDAwRkI3M0M0MjdCRkIzOTA5RjNBQURCNjFGRURGNzk0RkMwNgorOjEwRDEwMDAwQkUzMEJGMDdCNDJCNTk2Q0EyRjgzRkZDRDE3RDBDRDdDMQorOjEwRDExMDAwRjI1MTY2QUM5RkIxNDgyOUU1NUJBOURDRkREMzFCMUYyQQorOjEwRDEyMDAwNjZEMEJFOEU0OEU3NzY3NkY5MjM4RTgzMjRCM0FGRTVDQQorOjEwRDEzMDAwRkU3NDVGRTFBODkyNUY2NTZCNUY1NzZBNUYxOEM3RDc5RgorOjEwRDE0MDAwNjc5MjI4NUYwQUIzNDk2MTEzRDA2RkJCQzE5MUQ2Mzc4QworOjEwRDE1MDAwQkFBRERERUU5RjQ0REFBRjdBRUI0QzQ5MzdEQ0RGMUIyQQorOjEwRDE2MDAwRDg5N0YzQ0IyRTdGNDlCNzEyOEQ1RDJGM0Q2QjI0M0NCMgorOjEwRDE3MDAwRUYzNjRCRjM1MDZGRUNFRUQyNUI5MDQ5NkUxQjIyMzFEMQorOjEwRDE4MDAwQ0UzQTQzRjE5QjgxNEYxNkJDRDEwMTFGRjZFOTJCMTIxOQorOjEwRDE5MDAwNUU4RTU5MTZFMDU5NThENkY0REJFODYxMzgyRUY1QkQ5RAorOjEwRDFBMDAwRUM4M0FFM0FDQzE3NjNFQTI1MERENEZBQzdCOUM5MjM4QworOjEwRDFCMDAwNkVDNkYxQjZGMUQ3MDZEMkU3RTQxRjAzM0NCQUVGQkE2OAorOjEwRDFDMDAwNTUzMkQ4MEZCNjA3RkM3QTFDNDc5NDIzMUZGOTQ5M0QwNgorOjEwRDFEMDAwOEZDNzYyMUE1MkI0NzE4NTM2M0Y3NEExMjJGRkJDREQzRAorOjEwRDFFMDAwNTc3ODM4MThCRUZGRDVBQjQxNzRFRUVCMkJGOThCNTA1NgorOjEwRDFGMDAwQUQ3RkFDQ0FDN0NDQjBGRjM5REM0MkVCRTI3MDQ5ODhFNgorOjEwRDIwMDAwMDNCRTMxRDYxQzdGMDhERTJCN0RENjQ0N0FCM0Y0RDkxOQorOjEwRDIxMDAwRTg0NzdDNTgwRkY0QzQyREMzQzBFRjNFREY5NzlGMDc0QgorOjEwRDIyMDAwRTg1QzNFQjYxNDhERUNBNTk1OEZDRDQ1MzhERkNFRTQ5NQorOjEwRDIzMDAwNjM3QURGQ0Q5REM4NDc0RDM3RTRBM0ZDNjc0RDc0QkVDQworOjEwRDI0MDAwQkFCODRCRjU5RDE4NDcyQzM2RENDOEVBNjA3QzIzOUVBMworOjEwRDI1MDAwRkQ1NTM3REM2Nzk5RjlBQzg1RThFQTBEMEQzRENFRTc2MQorOjEwRDI2MDAwRDUyNzFFRTdENTZBN0ZGQTcyN0RFNUFEQ0QyNTdCMjFGNgorOjEwRDI3MDAwMUFDMDNCMDNGRDJEMkUzMUQxN0E0NEVDNjYyNkJEMjcyMgorOjEwRDI4MDAwODZEOTc5N0QxNzE2QkYxMEVDRjJFMkQwMUMwOUU5RUJDNAorOjEwRDI5MDAwNTZFNDAxRUEyNUU0QjNCQ0YwNDlCN0UxQjk5NkMzMEIwMworOjEwRDJBMDAwMTI2OTFGRUM2NDE2REYwNzlCRjVEMEYzNjFFODdGN0VGRgorOjEwRDJCMDAwMzU4RjlGRUY5RThERjk3NjcwOURGQjZGRUU3QjU1MjkyNAorOjEwRDJDMDAwRjk3NkZFQjdGNkJEOUVFOEFCREMxQjZBRERGN0UyRTc1OAorOjEwRDJEMDAwNDBGNzJDQzhDQ0UyNzg2MTkyMDVGMTE0Mzc4MEYwNzJFNworOjEwRDJFMDAwQUI5NTQ5NDE4MDE3MzE4MkE1QTBGRTUxRjdCREM0NUZCRgorOjEwRDJGMDAwNzNGRDI0MUEwNDVBQTcxRkFCOTEyOTdGNDE1RTk4OTVBQworOjEwRDMwMDAwM0ZGRjM1QkZCNzI3M0U1NUM4NjgxRjJDQUE5QUY2QzEwNAorOjEwRDMxMDAwNDIxMUFGMThCRjE1OTgxM0U1RTc2ODkwM0RFRUZFNzQxMworOjEwRDMyMDAwRTRCRjIwQTJFN0NDRTc2NjdERkE4NzJDQTREQkQ4MjhFRgorOjEwRDMzMDAwNUQzQzQxRTEzRkY1RkQxM0I1MzdEMUY4NEUwOENDODY5MQorOjEwRDM0MDAwRjYzRUVGOEZBOTIzOTEzRTREQTJFQkE5QkI0OTZGMDY5NAorOjEwRDM1MDAwRDNGRTM5QjM3OTdGMzcxOEUwOTlCNUIwQ0U2NkM4MzdCOAorOjEwRDM2MDAwM0RFMjEyRDJEQkZBOTlCOUYwRTExNEE0NzdERTFGODMxMworOjEwRDM3MDAwM0M3OEZFNjZDNkEyQTBENTc4MEVBM0JDOTFERkYzOUVEMgorOjEwRDM4MDAwQjZFQzdCM0E4RkNCRTI4REQ1MThFN0ZDN0E1MTEwM0Y5MworOjEwRDM5MDAwQTdCRTc1MzBGMUNGMzQwMzNGRTdDMkUyQ0MxNDVGMkE1OQorOjEwRDNBMDAwMEY1MUUwNUUzOTA0NkJFRTJGOTk5MTFFRUFGRDlCQkQ5MworOjEwRDNCMDAwQTg1N0UwRkJDNzU1N0NBMERGODg3QTU3M0Q0N0NGQUEyNgorOjEwRDNDMDAwMjU5NEZGNjI4M0QwRTEzOUFGQkZGNUU1RkVFOUI0MzhCQgorOjEwRDNEMDAwM0I5RDE3QUQ3OENDNjI1RjE4Q0ZFOTJDMEVDMkVGMzJCRgorOjEwRDNFMDAwNUExNzU1MTg3Q0Y5QUJCMTVGMDM5M0I2RDk3MEZERDBDRAorOjEwRDNGMDAwNTI4QUVCNkRCNjM1OTVGMjEwNTQxOTk5RDExQzAxQ0ZCNAorOjEwRDQwMDAwMjVBRUNGRDRGMTU0NDk4NUI3MTIzRjE5RDkyMTYzMDQxMQorOjEwRDQxMDAwRTJCMUU1RDMxNkU0OEY4NUExMTJDNjQ1MkFCQURBNUREQQorOjEwRDQyMDAwRDQ2RkE4RDVDNkVEODRGMjVEMUM3QjIyRjI4MURGMUM4RgorOjEwRDQzMDAwODE3Q0YwQTk2MEIwRjBGQzAzMEUwM0Q0OUY2M0JDQkVGNgorOjEwRDQ0MDAwRjUzQjhCOTZBNUQzQkNBRDM2QzM4ODFFQzg3N0U3RjNGMgorOjEwRDQ1MDAwNTdDMzdCQjczMjI5QTEwN0RFMTM1QjE2NzlFNzI0QUNFQgorOjEwRDQ2MDAwN0Y0RDI0QkQwNEMyRjQ1ODBFRkE3QkFGODk5OUI4NEVBMworOjEwRDQ3MDAwOURCNjZDMEZDRDZGQ0VFNjAxNzg4MzgwNEQ3QkZEMDBBRAorOjEwRDQ4MDAwRDlBNzM5MEE3Rjc5OTU3MzZCMjUwMDZGNDYzQzJBN0FCNAorOjEwRDQ5MDAwQzEyNUIyNkE4QTg3Mjk3ODZDQzVBRjUyNUZCMUNDNDQ4NgorOjEwRDRBMDAwRjRBODU4NkMyMTNBNTdENEZFOERGQUFEMDg2REU5ODY4MAorOjEwRDRCMDAwRjRBOEQ4NjZBMkZDMURENjFCRjgzQzRBNkE3QjBGM0IzOQorOjEwRDRDMDAwMDRFMzJFMzE4NURCMDQ3ODU0MkU4RjM1MjM1QzVFMkZFOAorOjEwRDREMDAwMTBBQzdFQUY2MkQ5NUZCQjE5RDI3OTdGNTg1QTBDN0NGMQorOjEwRDRFMDAwOUZCNUFEREZFODM4QjQ2N0E3NUY4RDhDOUJBNkExRkIyNQorOjEwRDRGMDAwRTk0NURCQzM3MERGRjk2ODkwMjcxOUNGRjlGQUVFMEYyMQorOjEwRDUwMDAwQjJFM0I5NDIzNTlFNzY3QTUxMzJCRjBGNjQ2QjA5QzVEQQorOjEwRDUxMDAwRkRFQTE5RjMxMjIzRDBDRTFEQjY3OUNDNTg3RkI4MjE3RAorOjEwRDUyMDAwMUU4RkNDMzE4N0NEMzYwQzYxODdGMTQ2ODI0RjJCRTdCOQorOjEwRDUzMDAwNDhFODBGRjMwNzBBOUM2RkNBNUZERDYzNEU4MEVGRjU4MgorOjEwRDU0MDAwQkY4MUUzRTdFQzZCNDdGNzBFNDE3QzAwMUZEOTUwRkYyQQorOjEwRDU1MDAwQzRCNUE0QTAxREFFMzBCNEE0QzQyMjdENUUxNkM4NUZCRAorOjEwRDU2MDAwODBGNUE5MDNGMzhGNTQyMjVGMEQwNDdEQThGMDU1RTVFMworOjEwRDU3MDAwRDZFREYzNTEzRTJCREUzQzk5OEY3ODNEM0I5Njk5MzFBOQorOjEwRDU4MDAwM0U1NkExQ0MxRkQ2OEZFRjFBQTE3REM1OTY3NUY5OEM5QQorOjEwRDU5MDAwQkZGRjJFRjI5RDZBRUYwMTVFNjQwMkI4RDlDQ0UxOEMyOAorOjEwRDVBMDAwMUJCODdFNkUzNjdCMjlFRjVERjM5RDhDRDFGRTk5OTE4MQorOjEwRDVCMDAwOERDNDc2NDA3OTdFMEY0MDE0OTVGQjY5RDUzMTEzNzg4MAorOjEwRDVDMDAwREUzRDU5N0I3RUFFMTJFQkQzREJFQTNCRTM5QkYxMzdDQQorOjEwRDVEMDAwMTgxNDNBNUJDODJFOEQ0N0JDMDBFQzVEQjYyRDBDRjlEMworOjEwRDVFMDAwRTJFQzZCN0JGNjBFNDFCOUQ4MjJEODk4NTYxRTU0MzkxRQorOjEwRDVGMDAwOENGM0YxN0FDMERGMTM4OEJGMkRFN0YzMzEwRkM1RUM1MAorOjEwRDYwMDAwMzNBMTEyRDI1MEM1OTMyQTZGMkE1RUFBMThDNzgzOEEwMworOjEwRDYxMDAwOTcyQUEzODIyN0E1REVBOUUwQTE5Q0Y5QTgzRjc2QTZCOAorOjEwRDYyMDAwQkZCNDExRkI3RkYzNDdEQTZGM0IzQjhEMDlGQzlDMzBBNQorOjEwRDYzMDAwQ0Y4QkE2Q0VDRjE1QTFERkRGQUZCRDgxRjNGRDE0NjU4MworOjEwRDY0MDAwOUVFNTM2NkUxN0NCQTM5ODU0M0I4MEY4Q0M2MTU2RjMxOQorOjEwRDY1MDAwNEI0MjkzQjM5QjhGRThDNkJGNUE5MTgzNTY3QUUzM0MwMworOjEwRDY2MDAwNjA5QzVFMDNCRjI3MThBOEJGRTYyOTdDNzVBNDc2QjIyQworOjEwRDY3MDAwMDdGNUNBNkMxOUZBQzk0Mjc5QjA0REMxN0Q0RUY2QkFBOAorOjEwRDY4MDAwQThFODZGQjA5OTlBRUZFNkJENzI4NEY4MTA3NDk3MTQwOQorOjEwRDY5MDAwMDE2QjE2RDMyNjE4MDdGQTVGNjc3QTUzQkMzMEFGQkIwRAorOjEwRDZBMDAwOTdFNkJENzE4QzhEMTk0MDlGMUMxMUJDQTEzQkQwMUUwQgorOjEwRDZCMDAwM0MyNDkyOUU1MkM3RTk5MDNGMjQ3QTM4MUFCODdDMjJDMworOjEwRDZDMDAwQkY2MDdDQjA1NTJGMDQ4Q0I3NTYxOUFGQzU2MEY3RTIyOAorOjEwRDZEMDAwQjk2MEI2NTBBMEZCNkJFMkMyQjNBMTg3QjhCREEzNDg0NgorOjEwRDZFMDAwNjI1QkZGMzdCRDhCRkI5MThFOEI2MTkyNDAzNTc2MjM1OQorOjEwRDZGMDAwQjZBQkJDMTg5NjgwRjZGQjg4MTI3NzM4QjI3ODdCNThBOAorOjEwRDcwMDAwODk4NjBFNEY3NUY2OUQyNTgzMjVBNDdGNUVDOEExODc2NworOjEwRDcxMDAwNTE4RTFFNTNEQTM1OUJFRDIzMTdBMDNFQjgxNDI2RTEzNworOjEwRDcyMDAwNzlBOUU2MDgzOTFERkRBODY2MDM1QkNBMjIzODFGMUFDRAorOjEwRDczMDAwQkJCNUUxMEZFNDg1RjAwN0Y1RDI5M0I2MzZCOTU0QzcwRgorOjEwRDc0MDAwMEQ3NEYzMjBEREEwQkQ4M0NCOTE5REY2MzEyQUEzRjhBMworOjEwRDc1MDAwQkVFOEQ1RTUyOUQzNEJGQUE5NTY5MEQ2NjdCNUI1NTM5RgorOjEwRDc2MDAwRUZFNTNEQUFDQzlCNjRBNDVCOUIzRDQwRkU0NDdCNjdGOAorOjEwRDc3MDAwNTFGMjE4MDVFNjQxQkRCNTU3RDczOEM0NUY1NTg4RDU3NQorOjEwRDc4MDAwODA0QkI4QzBGQTQwQjg2RDNENTU2RDQ0M0Y5RjJEOEExRgorOjEwRDc5MDAwRDlBQkJEOTc3NjM0NDhBNkZCNjdCRTFFMjI1QjBGRjQ1QgorOjEwRDdBMDAwQThCREZGN0Q3RTlFQjc5MURGREI1MkVEMzRGQ0FENjhGNgorOjEwRDdCMDAwRTUzRjc4QUYyQ0VCN0MzRUVBRDcxNzczMkQ3NEFGQTkwOQorOjEwRDdDMDAwNkJCRjA0RkFDRTI5RDY2MDFFOEVGNkZGREI5NkZDMzBDNgorOjEwRDdEMDAwQTk2RDdENzJEMzQ1OEYxODRFRkU0MkJDNkU3RDUwN0U4MgorOjEwRDdFMDAwRTY1RDkyRTcwQUQ2NDJGN0IxQTcyRDNCMzA3NjMwRDJGQworOjEwRDdGMDAwRkIyNTEzOUQxRjk4NTExRjRGNzZFRUU0ODZFOTk5Mzg1QgorOjEwRDgwMDAwREY2OThCOTMwOTlFQjVGMTNFMEUyRkUzRjkwRkE3MkQyQgorOjEwRDgxMDAwQ0U3RTAxRkRBRkEzNDE4RTdDRTQ2N0RGNEFDMTg2RUI3QgorOjEwRDgyMDAwQUJBMTFCQjMxRkI5MDdFQTg3ODZGNkU5OEFFM0ZFNkE1NAorOjEwRDgzMDAwQzNEMUIxNDhGN0FGMTY4OEE0OUYxQzFCOUVCQzEzRUI0NQorOjEwRDg0MDAwMUQzQjQ0QkMzMTA2RUIxOURCMjM5OEQ3OTQxOUMzNkRGQgorOjEwRDg1MDAwRTgxN0E4RTcwQkVCNEM1Q0RGOUU1MUY0QzIzMTQ1NEY1MworOjEwRDg2MDAwMUM1M0Y4MkZBRkFFMkUwNUZEMjVERjNBQjA0N0I4RUZCOQorOjEwRDg3MDAwNkRGNjk1RDJGOTZFQzE2NjVGMEZGQ0YyQUQyMDEzQ0M0OAorOjEwRDg4MDAwNkNCNjg0REE1Q0JDQ0ZCMjk2RjJFMzlDNEJCNkQ4RDBDRgorOjEwRDg5MDAwNEZCRUQ3QzJFQ0U4RDdERUJCQkJGNzQwNUMyQTM4OTQ1QQorOjEwRDhBMDAwNzVENUQ4NDhGRTVEMTU1RkVBRjc0RjJCREY2NUUyOEEzNAorOjEwRDhCMDAwNTJEQTc3ODg5NDEyNTBCRjM1MkJFN0M2OEYyQUUzM0RBMgorOjEwRDhDMDAwQjlFOEE1M0JEMTJGMzhCOTI5Mzk4MjY5RjA3RTUyQzkxMAorOjEwRDhEMDAwRDMzNDBCRjRFMDk2MEVENjdCRkUxQkQ0Qjg4MzlCQkVFQworOjEwRDhFMDAwNTNBNkM0MDNGNzk5RUE3QjYxREVDRkMwRkI1RDI3RDY2MAorOjEwRDhGMDAwMDU1OTMxM0Y2RkUwM0RBRjEzMjY2RTNGREFEREY3REFCMQorOjEwRDkwMDAwQTE4NzAzRjNEQzA2OEVBNzc1M0QxMzc4RkZCRjVGNDg0MAorOjEwRDkxMDAwODc3RUJDMkE2NzgxRUZCN0JCNEY5RTc0NkRFN0FCMzA0MworOjEwRDkyMDAwMkYxOURFRjdERTczMDNBM0Y3NDYwNkZGRUIwREQ0RDdGRQorOjEwRDkzMDAwQTVGNTE2MUJERUJGM0YxNjI0RDE3QTQ4Q0U2NkQyNDYyNworOjEwRDk0MDAwQjQzMzU2MjkxQ0Q3RjNDN0Y2NjVEMkY5QkZEMjJGMTlDNQorOjEwRDk1MDAwQzk1NUU5NTZEMThEQTk4QURGNUQ5OUZBRjgzMDgwRUY3MworOjEwRDk2MDAwREI2QUIyRTNGQjI3NTdBREJDOTM4Qjk5M0VDRjQyMEVFNworOjEwRDk3MDAwRTNGMjM5MTNENjQ5MUU1QkRCQkEyODcwQkQzNDdCRjU2MAorOjEwRDk4MDAwNjZCQTQ3Rjg0QkFEOTdENDM4NTIyMEJFNzNGQkU5RjMyMworOjEwRDk5MDAwMkQwNERFOUZEQjBENkM5MzMzQjAzREJFQ0ZENEI4Njg1MQorOjEwRDlBMDAwNURGNDVENEQxOTk1QjkwREVCRjI2MjI1QkM0RjcxRTQ0NAorOjEwRDlCMDAwQjFBMTI4MzdBMUUxMTQwRjM5NTM1MzREOUI3OERGRUQwNgorOjEwRDlDMDAwQzhCQzhDRjc0M0RGMEEwOUI3QTFCRUY4QUU2NjgxNzIwNgorOjEwRDlEMDAwQjk0MEUxMTM4NTJGNkZEQURBMjRDNjMyNkFERjM4MTREMgorOjEwRDlFMDAwREFFRjBBMDlBN0JCMkU0OThFOUM3MEI0RjMyQTVEMDNCNworOjEwRDlGMDAwRUYzN0FCRjMzQkY1MTBBN0FCM0FERTUzOUJBNjg3QTFGRAorOjEwREEwMDAwREZEOUI0MjZCMjMxMTdGQTkzODNDMzZERTg2RkNGNTREMAorOjEwREExMDAwQ0VCRjFDNUZDREY1Q0RCN0Q2RjAxN0M2RTBGOTk5QjVFRQorOjEwREEyMDAwMTNCQkUxQkFFRTNFOTNDRjZDODc3RUVENkYxNzg2RTFCNAorOjEwREEzMDAwN0FGRjFCQTMzNzBDRUYxQjdGMDNFRDNENjgyNzhDNkUyRAorOjEwREE0MDAwMTFGNURDOTAwMjQ2RkI3ODQzM0M0NjI2QzVEMzk2Mzk1NworOjEwREE1MDAwRjE0NUVFMTlBMzFCRTk3QURBNzM3MUNGMTVFNEEzMzMwQworOjEwREE2MDAwMDY4QTc3MDE2NkY2NUM4MUY2RjZEMDNFMTQyN0JDNkYxNQorOjEwREE3MDAwMjc1RjZGQjI3Rjc1RTFGNTAxRjcxNjlGRThDN0Y1RDIxMgorOjEwREE4MDAwODlCNTZGOENBM0Y1RjkwNjkzMERDN0Y5REQ4NkJGNzZDRQorOjEwREE5MDAwQzM3MzM4QjMxOTNGNUZGRkVEMjY4MUU2MzExQkY4MzFDMAorOjEwREFBMDAwMjgxRUY1MDM4RjgzQ0UwNkJENkYxNURBRjM2MURFQTY1RgorOjEwREFCMDAwNUFFMkMzRDlDMDg3MTZGNEQzMUMzQzFGRjM2Q0NDQzcwMQorOjEwREFDMDAwMkNCMTc2RjkzRkJBMkE3QzM3MDdGODBFRUZFRkZFRDI3OQorOjEwREFEMDAwNzkzRjk2RjcwQjNDQjdDQUY5NTBBNUJCOEExNzk1RkU1QworOjEwREFFMDAwNkQ3Q0M4NzRGOTA1MjMxQTA2MEM4RjY1NkRGQTQwQkQ2QworOjEwREFGMDAwREZDMThDREUxNTc4NEY2M0JFMTg1QThGRjlBQUY2MUI2QQorOjEwREIwMDAwQUJGRjQ4Nzk1QjY0MjNEQjQ4RjY5Q0E1NjFCRUJDRjk5QQorOjEwREIxMDAwRTIwRDc2OEMwN0Q2OTlBQjVCRjNCQTYwN0Q2MDVFMTczOQorOjEwREIyMDAwMzE4NEJGNUY4OEY5ODk2MUJFMjFFOUYxRjRCRDA5MzYwRQorOjEwREIzMDAwRkIyODQ0QjcyOUNBNEI3MTAxMzFDRkUwQTA3Qjc5NzUyRQorOjEwREI0MDAwMTY1QTM3MDdFQUExNTcxNEZBREU4NkJFMDNGQTNERkRERQorOjEwREI1MDAwRjg3OTZERjVERTlGNUE4MkExRTk4REZDNUUxODFDNzE4MworOjEwREI2MDAwNDk4MjI2M0I1RUY5RkMwRURDQTcyRDFDMUFGMUFCNDQ2MgorOjEwREI3MDAwRjg3RTUzQkYyMzc3RTBCRDhEQzJDQzg4NkQwOTAwRUZERQorOjEwREI4MDAwNzlFNUVGQkNGRUM2ODg2QzEzRkEwMUMyRDc3NzhDNDRFNgorOjEwREI5MDAwQkZCMTlGRTNDRDdFOUFFRkE4RkRDMkYzOURGOEZDRjNFMQorOjEwREJBMDAwMzhEN0RCRkRGOEJFNjkyOUQyRkI5QzEwQzZGM0JEMjUzMgorOjEwREJCMDAwRjkyODBFQUFCRUY3QjFDMDBFQkYyNUI0QzE1RTEzOEIwMworOjEwREJDMDAwQzNCQzA2Q0RGREI4M0VFREFDOEM0QTc3RUNFNURGRDdBMworOjEwREJEMDAwM0Y0NzBBN0Q4RkVCNEM2NUZGQzc2MDk1Q0NFOEZGMzk2NgorOjEwREJFMDAwRUQ2NjNCQ0ZBRkM4OUM1NkYwQUJDNjJCRkM1QjYyQkQ2RAorOjEwREJGMDAwM0M5MkVDNkYzNUIzNUIzMDgxQzk1MkZEN0RBQ0JFNkQ5QworOjEwREMwMDAwRjdGNkQ2NUVDRkJEM0QyNkYzM0M3Qzc1NEExRUJFQ0VGMAorOjEwREMxMDAwRUU1MTBBOERFRkZGODhGRTY1RTBGREE5Q0NCRkI0QkNENAorOjEwREMyMDAwODk3QzMyMEVGODBBRUQ0NTU2MEI4N0M3MkI3QzUyQjEyMgorOjEwREMzMDAwN0QyQ0U1N0I5RUZCQjFDOThEN0VDMjJDQzUxRjRCNzIyRQorOjEwREM0MDAwNzU2MTEyQjRCQjA0RjI4QjdBRTFDQzM4NEYwQUVBOEZDQgorOjEwREM1MDAwMTMzNUFDM0UwOTE0NTY4MUQ1RTU0M0JBMzRDN0JGNEZERQorOjEwREM2MDAwNzlEMTRFQUNBRDBCNDNCRkU3MkNBQzI3QzY0MDE3RTVDRQorOjEwREM3MDAwOEE3RkNGMkU4QjlFNUJEMDBGOEVFRkJCN0VCOTg2REY2NworOjEwREM4MDAwN0VFQ0M3RURGRjk5Nzg0RjFDQUU2RkU0NzgwQkNGRDdEMQorOjEwREM5MDAwNzg3OTBGRTU3OTJFNDgxODlEOEQ3MUE0RkQzNTNCRDgxNAorOjEwRENBMDAwRDFFNEI2RjczQUJCOEYzMkM0MzA4MkE1NkJGNjI1QzdGNAorOjEwRENCMDAwMTkzQjNFQTdGMUFEOUE0RjczMDNCN0RGMTY2MzNERTVGRAorOjEwRENDMDAwRDEwMjUyNTZENzEyRUNBNEI4NTIwQ0YyMjhDNjg3QTUzRQorOjEwRENEMDAwMDcwODVFMzI4QkQ5RTgxRTZCREIzRTFEREQwNzU1RTk3OAorOjEwRENFMDAwRUZCMDVGMTk4OUVEQzYwMUZENTFERjE4QUMzRTIzQzJDQworOjEwRENGMDAwQ0UwMjdFM0VBNTJGMTAwRUY1ODk0QUZGNTFFMjIzOEZGQQorOjEwREQwMDAwMjExREU2MkFGN0I4RTYwQUQ1MUMzNjU5RTk5QzZCQTAxNgorOjEwREQxMDAwN0VDNEI4NjYzMUU5NEQ3OTZGMkVGQTYzQTAyNzI5QUYyQQorOjEwREQyMDAwODJBMjE3MjVGODFGRTU0NUNBNTk2N0E2NjY1N0NGOEIwQgorOjEwREQzMDAwQjQzN0Y3M0ZEMDhGMTlFOUZBM0NFMjJBOUQ1NEZGQUE4NQorOjEwREQ0MDAwMzMzQUE5N0ExMkU4MzVFODdBRThBNUU2Mjk5QkZCMkM1NAorOjEwREQ1MDAwOEY3N0NFN0Q3NjdBQ0M0MEMyMUI0ODFDRkE0MzMxN0Y0OAorOjEwREQ2MDAwQTJCOENBNEM2NTBFNkM2RDI0RjFCMTY5ODQ1MzQyN0QzMgorOjEwREQ3MDAwM0I3NjQ3MkM5M0UwRDFBQzFEMDI5RDZGMURCMzIzOTJERgorOjEwREQ4MDAwRTAzMDdGMEY5RTU3NDlCMUY3NjM1RkVDM0UwMkUzOTNBQgorOjEwREQ5MDAwMjc1RkY4NjIxRUU2QkQxRkYzNUI0NkYxNjM0MzcwMDgyMAorOjEwRERBMDAwRTU5QjEwNDcyODc5MUNDNDkwRjdGMDFFRUIwNUM5NTg3NQorOjEwRERCMDAwOERGNkNBQzlEQUU1MEYzMDEwRkQ5QkY5Mzk1OTU4RTVERgorOjEwRERDMDAwQzk5QzRFRkNERURGREM3RERDQ0VDRjFEQ0VGNzA1MkZGRgorOjEwREREMDAwRTAxQkQwRkU0MjkxNDg3OTlBOUUwRUNFMjBGRkFERUUxOAorOjEwRERFMDAwMEUxM0REOEY2MEIyRTMxMzVDNTc0RDUyRjhDMTEyMDM3RQorOjEwRERGMDAwMEI0QjBEQkQ4MjI0OTA1NzBEN0QxRTBEN0FFQzNEMTcwNworOjEwREUwMDAwRjRFRjg1NzU5N0QwMTNGQ0Q4QjQwODVEQkQ1MTBFRkFCOAorOjEwREUxMDAwMDZGM0M3OUE2MjQ0OUIxQkM2MUY2QUVGQTlFQkNGMjk4MgorOjEwREUyMDAwOTY5QjMwOUVDMjVDREM4RjU2Rjk4Qjg5Njc4Qzc0NkYzMQorOjEwREUzMDAwN0UxOENGNUY3MUM3MjRGRDNENDlEM0IwRjMyM0M5REVGRgorOjEwREU0MDAwMENEM0ZCREZDRUFCRTQ2RDVBQTBGMjUzNUZENjU3QzlCQgorOjEwREU1MDAwNEI0RkY2RkZDMjQxN0UzRjQ0NjJDRUQ1QUFCQ0EwRkUyNgorOjEwREU2MDAwMDdFRkU2NjlDNENGOURDRDI2RTY5NjA4N0ZBRjYxRkQzQQorOjEwREU3MDAwMDVEOTYyQzM3ODQwQUIxRjlFMDRFRjQ1QTE5MUI0MTI0RgorOjEwREU4MDAwOUY2MzVFNTBFRDNDMzEyRkE4MTYyRjk4MTc1NDBCNjNGQgorOjEwREU5MDAwNUU1MDZEN0JDQzBCQUFBREM3QkNBMERBN0FDQzBCQUFDNgorOjEwREVBMDAwODUzMTJGQThCNjNERTYwNUQ1QzI5ODE3NTREQjFFRjM4MQorOjEwREVCMDAwODI2QTYxQ0MwQkFBNkQ4Rjc5NDFCNUY1OTgxNzU0NUJENgorOjEwREVDMDAwOEY3OTQxQjUzMEU2MDVENUI2QzdCQ0EwREE3QUNDMEI2MAorOjEwREVEMDAwQUFBREM3QkNBMDVBMThGMzgyNkFEQjYzNUU1MDZEM0RFMQorOjEwREVFMDAwRTYwNUQ1RDY2MzVFNTAyRDhDNzk0MUI1RUQzMTJGQTg2RQorOjEwREVGMDAwMTZDNkJDQTBEQUY2OTgxNzU0MEI2MzVFNTA2RDdCQ0M0NworOjEwREYwMDAwMEJBQUFEQzczQ0EwREE3QUNDRkJBOTg1MzFFRkE3QjY0NgorOjEwREYxMDAwN0QwQjVCOTQ4Qzc2NkM2N0JDQUIzOTNEMUFGNzlEQkU2QworOjEwREYyMDAwMjU3RTNFNzQyRkYwMzNDQTYxRjM0NDFCRTUyRkJDQ0UyRgorOjEwREYzMDAwNzU2MjRCQkFCMjZFNTFGOEY3MTIwQjk5ODJFN0QwM0I3QgorOjEwREY0MDAwN0I1RkU1Q0Y5N0YwOUQ2Q0IyMDc0Qjg5N0Y1OTY4M0RBOQorOjEwREY1MDAwRkE3MzhGMUExRDc0MUY0QTZFRTBGNzEzOTk5MUZCMDEzMworOjEwREY2MDAwRjM0NUM1RkY1MUYyNDJDQzE3MjVGMjAzMzA3N0IwNTE4QgorOjEwREY3MDAwMzM5RUFFMEUyQjMzNkFGMDEwNTk2MEQzQzFEMUNFMTg0OAorOjEwREY4MDAwNURGQkVFOTMyNDVEN0QwRjU3OUFBRTNFQjZDQ0FFODMxQgorOjEwREY5MDAwN0I1N0U3RThEQUY3NTlFMEQwQzFGMTcyODFBRTdERTI1NAorOjEwREZBMDAwNTJBNzBFNEVBRTlGQTQ2QjlGQkFEQUE1QUJFRkVCMkUzNQorOjEwREZCMDAwRDNENUY3REI1NEFEODNGQjM3MkNEMEI1QkY3MTg3QUMxRAorOjEwREZDMDAwQUIxRkUwNTlBQUFCQ0Y2Q0FFRDdDMUQ5MkRBQjc1RUQ2NQorOjEwREZEMDAwMDcxRjcyRUJFQTczQkQ5Qjc0RjU0M0JGNkREMEMxMzc2OQorOjEwREZFMDAwRjk3NkU4REFERkUyRjdFOEUwRTE2QzlGQUU3RDlFRjVENgorOjEwREZGMDAwNjMxRDNDQ0FGNjk5QUVGREFEMzE0Nzc0RjVBM0E1OTNGOAorOjEwRTAwMDAwQkFGQUYyRDNEQ0JGNjc3NUIwM0VDMDM4NjUwOENGQUY0RgorOjEwRTAxMDAwNTFFOTYxMERFODVGREM5RTc2NUVEN0RFMTQwNUVCMDUwNQorOjEwRTAyMDAwRTA5RjBBRDA4N0U4RjdGREQwMjU4RUYyMzFCM0VBMzBDMQorOjEwRTAzMDAwM0JERUZCOTY0NzU0RkY1MTdCQ0Y3QkFDRkQ0N0RERjdDMgorOjEwRTA0MDAwOUYwRTBFRjMwNEQxRkFDMjRBRjZGNkE2RkVGQ0JFNTlBNAorOjEwRTA1MDAwNkIzRTExRjUzRTNCRjNCMTk4MjgwQTA5RjlEMDNGMTIwNworOjEwRTA2MDAwRjAxNzk2MDAwRTczRjBCQ0QwRTAwNzkxRkY2NDAzQkY3OQorOjEwRTA3MDAwMDhGRENERDY3NTkxMjEzRTFFRUQ3MjcwOUI1RkRDRUJFNQorOjEwRTA4MDAwOEEyNkNGQ0JENUZDRTJEQkYxREJEOTk0QTdEN0QxMUYxMQorOjEwRTA5MDAwQ0FEOTBEOUJGMzcxOUQzNThCQzk0QjcwM0Y1MUNEQjNFMAorOjEwRTBBMDAwQjgzRjQ4MUZERjUyQ0JEMTU2QzBBRkU2N0JGQjgyRUFCOAorOjEwRTBCMDAwN0IwREZDMTk3OTFGNkQzRDQzRUQ1QkZCNTVFMjVGMDI2MworOjEwRTBDMDAwNEM3NkFFQTZGRkM3NjBGRDY3MDRCOUFFQUYwMUY5MDM5OQorOjEwRTBEMDAwN0ZFODg5MUExQkMxQUI2QTYyMDg3RUFBNDZBMjcyNzVFNAorOjEwRTBFMDAwNEQxQTk1Q0ZENEQ4QTk3RTZENEQwRUMxQ0ZENTM4MDgyNQorOjEwRTBGMDAwNzZENzE0NTBCOUJFQzY0OUNGMzdENDRDMjJGODg1MUEwQQorOjEwRTEwMDAwMTc5NTlCNkFDQUE4N0NCOUE2OUFFQTVGQUQ1OTQwRjBGOAorOjEwRTExMDAwRUIzNTMyOTUwRDM1NEJFOUY5OTY5QTdBODJCN0Q2QUM0NAorOjEwRTEyMDAwMjZGOENEMUEzNzk1M0I2QTM2NTFGOUU3OUEwNkFBNkY1OQorOjEwRTEzMDAwMDRGRjBERTE1RDM1MUU4MjNEMzVDRDA0QkY1M0QzNDI1MgorOjEwRTE0MDAwRjBCQjM1ODcwOERFNUJFM0E1QjJCOUU2NUIyQTNGQThFMgorOjEwRTE1MDAwRjE1MUZENUY2QUZDMDQ5RjUxRjYyMUU2RjcxNzc0Rjc1MQorOjEwRTE2MDAwRjE1NEQ4Qzg4RTcxN0YwRkYzNTY2MDFFODYxQ0QzNzc4QQorOjEwRTE3MDAwM0Y5NzFGMzc5MDBFQTc5NEZFNEQyM0MwNURDMjM4NzJBMworOjEwRTE4MDAwQ0Y5NEY1NzU5QTc1NDU1RDdGMUVCN0FDMzVGMEZDMkRDMworOjEwRTE5MDAwQjUzRDk5QUQ4RUZDNzYwN0UzRTdCNEI4REYzRTEzRkZEQgorOjEwRTFBMDAwMjVDMUQzQTg5QUJEQjhERTI4QURFNjc5Q0FCMzkxMUZDMAorOjEwRTFCMDAwRDM4ODFGRkY3MjVERUIzNDY1NURCMDI1RDFGOTA0RjJBMQorOjEwRTFDMDAwMjMwQjcxN0YxQTlGRDU3NjhGRkU0MEEyRUJGN0Y4RkNFOAorOjEwRTFEMDAwNDJGNTdEN0JCMUY1NEM5QjNEMDUzRjMyRDZFMjg5QzZDOQorOjEwRTFFMDAwRkM1RkJFN0RBMjdEQkRENEY5RjdBQTk0RkIwRjlERDYzRQorOjEwRTFGMDAwRUYzQUQ5MEJFRDU1QzE0RjIyQzVGNUY3OUI0MjI3RTEwOAorOjEwRTIwMDAwM0VGRjhCMEEzRTVFRUM2RkQwOTU3NzI1Mzk1RkU4OEYzNQorOjEwRTIxMDAwRkJGQkM5RDUyRjNDMjBCNEREREYxRjhGNEI3QzkwRUY3QgorOjEwRTIyMDAwNDIyNjUxMUU5Qzg5Q0NGMTFFQkFFMDc3ODAyMzg4RjBFQgorOjEwRTIzMDAwNUQ0Q0E2RjI0NDgyRUI0RjM4OUZCQjYxMDE4MkIwNkIwQworOjEwRTI0MDAwODgyNUFFQTNGOTA0OEU2N0E3MzI5RTlEQ0EzOEQ0NzI4MgorOjEwRTI1MDAwNkU5MjczMDdGNjc3MkNEOUExMUJDRjhCNEE3RUExNzFFMgorOjEwRTI2MDAwQ0NGNzFDOEVFQjFGNkY5RjNGMkUyNEI2RTFCQjM1OUU3MworOjEwRTI3MDAwQzJBQTI5NEY0NjMxRTNGMTk0NDczMTJGNDY1NDVCNUVFMQorOjEwRTI4MDAwMEM3NUZENTBCQzhGRkZDRTExRkRBMUZEOUMxRjRGRUIwNworOjEwRTI5MDAwREJDMEJDMTk0Qjg2RUZFMTc5MzA2MDNEODZGNzdGOEJBMAorOjEwRTJBMDAwRUZGRjE1RTk1RkZDM0QyOEJDQjczQkJGQ0I2MUNBMzMyQworOjEwRTJCMDAwRTM5RDA1QkMxQTRCNzkzNTc4REUxQjE3MjAzMDk2RjJBQQorOjEwRTJDMDAwNkE1MEJENzAwM0ZDQkYwNzhFQ0I5QTY2QTRGMTc1QTE5RQorOjEwRTJEMDAwN0MyNzRGMDdFRkE3QkMzNDE4NTNCMDc0QzVCQ0M3RjFGNworOjEwRTJFMDAwMzRDRkZEQ0VGM0RDRUY4RUYyRDFGREQ0MkQ4OUFFQUY2RAorOjEwRTJGMDAwRkFGMzM4Rjk1Mzk5MTgyNzQyN0VDMkVGRDhEQzc0N0VCRQorOjEwRTMwMDAwMERGOEM5MkMwMDhBNjY0NjAxM0Y3NUUwNkZBODdDNTM2MgorOjEwRTMxMDAwQTlEQ0MzNTE5RjAzM0Y5RTQwN0M3RkI3NzM3MDFBRjIwNAorOjEwRTMyMDAwNERENUFFNUMwOUYxNUQ2N0UwRjdFOUU0MEY5NDdENDFGRQorOjEwRTMzMDAwRTVGNzEwQzRGMEY0NzU3NEVGMDA5RDcxQTQ2RjZFMjhCQQorOjEwRTM0MDAwREQzQjY4MTJEOTgyQ0QxREU4NTc2QjA2QTdGM0ZFMTg5NgorOjEwRTM1MDAwOUU0RkIyMkU2MDdGNTJDOEUwNzQxNzk0NzY2M0RGRDk2NworOjEwRTM2MDAwNDc3OUM4MkE5Qjc5QkM5QTY1NzlEMzlEMUQ5Q0NCQUExNQorOjEwRTM3MDAwNUFGMERCQTc5MjM0RjNBOERBNzE4NDlGRTc2MkRFNzQ2NworOjEwRTM4MDAwRUQzOTJFNDlFOTU3RTUzRkQxMUNFQTVBMTdBMjFENUYyNgorOjEwRTM5MDAwQUIxQzU4MzJCMjQ5MEU4RUUzQkRFRTcxMTYyOUZDMkUyRAorOjEwRTNBMDAwODE3RTFGRUMzQkNDMkZFM0ZBQTM4RENFMDNBQUU3MDJCQworOjEwRTNCMDAwNjczMDI3OTUzM0MxNzIyMkRGM0JFNTk1NzQ3RjdFMzY0NworOjEwRTNDMDAwNkJBMEU3OTUzOUQzRTMxMEFFNjJCRTkxMzFCODNFNUFFNworOjEwRTNEMDAwNUFGQjFFODY4MzI2RDZBRjFDRDUwM0U2MzVDMTNERUQxQworOjEwRTNFMDAwM0QyQzBCMzcwOEM3NjU4OUU0MjgwNkJGRUYxNUFBMTcyRgorOjEwRTNGMDAwRjc4NEVGRERGM0VBRjBDNTE4QjcxRTI3NzIzQUIwMEZDNQorOjEwRTQwMDAwMzkxRDhBODE5RkM1ODhGNkYzMDNCOUU5OTMxMTRENzJDRQorOjEwRTQxMDAwNDNFMzU3RTVBNjc4MjE3M0UwRjkwM0Y1N0U0OEFCMUM4QQorOjEwRTQyMDAwRTVDQ0Y5N0IyQ0VFRTE4MDNGODlGQzVBQjVDQjEyNDE1QgorOjEwRTQzMDAwRUI1M0NDMzM4M0ZBNEE5MTlGQzU0NkVFNUZDQTk4REExNAorOjEwRTQ0MDAwOTRGNDI3RjczNzRDMEUyNTlGMTdFM0ZFQzgxQzk5QUZBRAorOjEwRTQ1MDAwQzc0RTk5QjhCQzlERkEyQUQ0OERGQzNEQkZDQkVCNzE1OQorOjEwRTQ2MDAwMjQxRjI2NTUzRTdFOUE0MkU3N0IxOEY4MUYzN0I3RjdFMAorOjEwRTQ3MDAwM0Y1QUYzQ0NGNDYyRTQ2RkIwMzg1N0NDQzBDNDM2N0I1QgorOjEwRTQ4MDAwN0VDQUUwMUUxNEM2RjNGMjNCMTA1RjdCNjNGOEZBNzk5NAorOjEwRTQ5MDAwMEVFNkExQzFGQUFFNEUwOUUzQTVBN0EyQUQ3NDVGMjhBRQorOjEwRTRBMDAwMzBDRjE5NjM3NjlBOUY0OTk5MUY4QzZDMTJGQUQzMTY1NAorOjEwRTRCMDAwMjVBRTU2MTczMERGMUY4MkUyNjhCRUQyNzBENkMwRDBCQworOjEwRTRDMDAwQjEzMERBRTRFOTI4RjcwRjcwM0IzMUJGQ0I2RjVDRjg2RAorOjEwRTREMDAwN0Q2RjEwQjMwOTQzNjkzRTE0OEY5NTBEQ0M1OUM3RTM4NgorOjEwRTRFMDAwQjMzNEJGMDU0NkFCMERDRkU1MkM5OTI2N0EwNUIyMTNBMAorOjEwRTRGMDAwMzA0RThDRTc0NTU5RUQzQ0FGQUE5QTdGM0I3MEJDMEU3RAorOjEwRTUwMDAwRkRGOEFDNzEwQ0U3RTcxMDk5MkY2ODI4MUYyRjhFNEY4QworOjEwRTUxMDAwMDY3QTEwN0QwMDlFQTYxOTFGRjRFQkE2RkMzRkMxOTI1RgorOjEwRTUyMDAwMERGREIwRTY3RjNEQzBFM0NCQjVEQzdGODRGMTZGMjIwQgorOjEwRTUzMDAwRkFGNDgwRjFDNzVFN0RGQzI2NjQ1MTE4RkZEQzBDQUU1NgorOjEwRTU0MDAwQTdFQTcwMDc1MTQ0M0JEQjk1RjRFRjg0MjBFN0ZEQzg1MAorOjEwRTU1MDAwODc0OUFFRTVCREU2NjI1QzIzRDc2MkM3RjgxREJCNUNBOAorOjEwRTU2MDAwRDcwQkY1NTQwODkzMjhBRkQ2MzgwN0NGQUIwNUREMkQ3MAorOjEwRTU3MDAwNDI3RTI4QzRCQzc1MzZGMjAzQ0U2OEYzQjBCMTgwRjg5MQorOjEwRTU4MDAwMUE5MDg1RTJBQjEzMzBCRUM2RUYxMkJEOEJGMUQ5ODk2QworOjEwRTU5MDAwQ0FGOUU2QkVFQzRCMTU3RjE0NUYxMzcxN0MxNEFGNzY5RAorOjEwRTVBMDAwRDEzODJENDg1OTI4ODMzMENFNDM3NDcwRDMzQzgyOTk5QQorOjEwRTVCMDAwNDc4OTY3Qjc5MDdGQjA1MkUxQzMyMTg3MThEOTg5MjE3NQorOjEwRTVDMDAwMjFEQzRFRUMzQUMyREM3OEVFQUJFOUM3M0JGMzQyQTE2QQorOjEwRTVEMDAwN0VENzc5MjNFOTI5QzAxM0U1MDNGQ0YzNUZCOTVERDk0MAorOjEwRTVFMDAwNzVGMjc4MkNFRTA3RDRGRUI4MzcxNkZEQzQ1RDI2OTc3OQorOjEwRTVGMDAwNTg4NUVGRTc1QTZDMEJFRDZENzE4REM2NDMyMTNDQUUyQgorOjEwRTYwMDAwQTNDNEY5NkU1MkU2RDlDODVBRUFBQUEwM0VBNzg3QzhBMQorOjEwRTYxMDAwMzAwRTk4N0REMDEzOENGMjhDMzk2QTNCREE2RjFDNzYwMQorOjEwRTYyMDAwRDFBQ0ZCNUQwQjkzNEQwRkU3MzAwRDFDOEYyMUIyODBGOQorOjEwRTYzMDAwREZGRkJDQ0U3NUVFNkIxOTlERkNFRUU3OTlBODZCRkE3NworOjEwRTY0MDAwRERDRjJDNjUxRThGNjYzOERGQ0MyMEJCMzY0MTU0RjAwMQorOjEwRTY1MDAwMkUyMEJFNDAwRjM0MjFCRTlGQTkzMEQzRUYxQTM0NTU2RgorOjEwRTY2MDAwOTg3Qjc4MzVFM0FCOUZGNTBGQzJFRkVFN0ZGRDgzRUMyRgorOjEwRTY3MDAwRDZFRTZDMzUzRjRFNDMxMDNFMzdDQkExMTQ3NzdCRTY4OAorOjEwRTY4MDAwQjI4MUUyNkU2QkNBQkVBNkY1NDk3RDBFQTNERjExQUI2NworOjEwRTY5MDAwQkY1QzQyN0VDMEE1MDI4NjlCNDhBQ0Y2RTZGRjUzODY2RgorOjEwRTZBMDAwRjBFMzM3NTlFOTdCODFFMzdGMUJGQzc5MEYxMEVBMkRGQQorOjEwRTZCMDAwRjBFNzNEQTlFMEFGODAzRjhGMzBERTY3QzU3MjFCRjgwMQorOjEwRTZDMDAwRjM1OEJBQzE5RkM3RjIzOUYwRTdCMTFERkFGMzU4M0VDQgorOjEwRTZEMDAwMDNGRTNDOTZBQkMxOUZDN0YyMjlGMEU3QjFERDJBRjBGQgorOjEwRTZFMDAwRTdCMTdDMDJGQzc5N0MwRUUzQ0FBMzcxMUQ2Mjc0NkZGMgorOjEwRTZGMDAwN0Y2MTcwRDgzMkY0MzMyNDM5OTRGQzhEOEYxQzAzQkJCNgorOjEwRTcwMDAwNzgzNTc2RjZFNjhCMDYxRDlEODc5REQxRkZCRUNEOTBCMAorOjEwRTcxMDAwNjMxMUJBREYzRkM5RjlCMkE3QUU3RUQwQzEwNDVEN0RGNworOjEwRTcyMDAwQkNBQ0ZGN0Q5QjNFMEI3RUZFRjc2RDYyQ0I0NjA0RkNDRQorOjEwRTczMDAwM0VDRTZEMDFCRjlGQTNGRjdEOUI2OEU3M0QwMUJGQkYzQworOjEwRTc0MDAwQTNGRjdEOUJDNzk1N0M5OTJBMUQ1M0E0RDc4MjkwMkY0OAorOjEwRTc1MDAwRDY5NDREMDg2NzFERjgxNzZBRjk4NDQyMEYxNTdFRjJBQQorOjEwRTc2MDAwMjE3MTUyNDc3MUU0RjAxQkI5QkQ3RkU3MkJDQkJFMEQ4MQorOjEwRTc3MDAwODBDRkREMkNEQzg5NzFGN0REMEUwM0U5QTU2NzU2ODdCNAorOjEwRTc4MDAwNTAxQ0Q2RTIxRDcyMTJGOTY3Qjc4MzQ5QzgzRkNGNUNBRgorOjEwRTc5MDAwMUVEMTA1QzczMzFDQzg4OENGNjNDQkI4N0RFQTc5QTNFNworOjEwRTdBMDAwNDRGQzFDNUJFNjEzRjFCRUU4MkQ5NzdENzZFNEM3Mjc5OQorOjEwRTdCMDAwQzNGOEVGNkM0MUJGRUU4NUQwREYzQjYzMDdGNUM1Mzg4QQorOjEwRTdDMDAwQ0UzMzIxQzBDRjI4NkYxRTVGNzAxMkMwRTE1NzBDMENGMgorOjEwRTdEMDAwRjUyM0Q4NEFDQUYzMkZGRjIxNDQzOThGN0E4NUVFQzMzNworOjEwRTdFMDAwODVBMzRFMDdCREI0QkI4QzdGM0ZDNTdCMzk1OEVCMEY2QgorOjEwRTdGMDAwM0RGRUQzRDVGMEMyODhBRjNBQURCRjZENzYwMjhFQjc3RAorOjEwRTgwMDAwMERFRkEwMUFBMTRDNjE2NUVDMzFDNDQ3Mzk5NzlGRkEwRQorOjEwRTgxMDAwMzIwM0M5RDMyNTkwMjdDNDBGQ0M5QUU4QzI1QUY0RjIyOAorOjEwRTgyMDAwRkUwNENBODc5NjBFRTUwOUNCNzA5RUNGQUMzMkQyNkUzRAorOjEwRTgzMDAwRDkyOEYxRDU3RDM3QzIyQjZCMEU4QUI0Q0QyRUQ5N0M2OQorOjEwRTg0MDAwQzExREY5NzdFQUI4RDczOEY4RkMyMkVDQ0M4MDc2MkVENworOjEwRTg1MDAwMDJGMEU5QTZGRDZDN0JBREY2RjdBQ0ZFQTBDOEU3RUZEMQorOjEwRTg2MDAwMTVGOTdDNUFFMTA3NUM2RjIzM0M0QTVDM0IzQTA1QzdDQgorOjEwRTg3MDAwOTFDM0Y1MzVEMDUzQzBGQjU4OTc2NjMwRkExREQxREZGMAorOjEwRTg4MDAwMTcyNTc0RTkyOENGRjcyQTY1MUNDRjI5RjM1QThCRkQ4OQorOjEwRTg5MDAwOTIzQzczQjkxRjI1MTYwRkM3N0VENjM4MTlFOUYxMzU5QQorOjEwRThBMDAwOEVBRjZCMzE2RTc3QTk4OEY3REJFNzExQUY4MEY4RUQ5QgorOjEwRThCMDAwNTVFRDEzQjBGRkRFRjMzQzU0QkE5NTcxRjYyQzZCQTEwNQorOjEwRThDMDAwN0FCNTNGQzlFRUU2RkM1RUZFMzU2Qjg2RjlFMjIxNUI2OAorOjEwRThEMDAwOTFFQ0M1MTlDQThGQkFDNjY4NjQ2ODg3NTE5RjIxN0NCQworOjEwRThFMDAwQzk2QUM0MzMxMkFDRTdBQzYzMENFRjMzRDc4NzE4NjkzRAorOjEwRThGMDAwOUY2MjRERTUyOTgyNTdEQTM4MUMyNjU3QTdFM0Y5OEIyQQorOjEwRTkwMDAwOURDQTdDQzI2NDk5NjA3N0MwN0M1MkE0QTlFMURBREYxOQorOjEwRTkxMDAwNzMwRDJDQjcyQjc4REVBNkUwNjNBN0M5NjVCODAwRTNCQQorOjEwRTkyMDAwMThGQzM3OTE3RUJGQTNCM0Y3NTQzQjlCRjNBNTIxNDA1RQorOjEwRTkzMDAwRkY3NEQxQzkzRkZFQzY5RTYyMTcxRUJBMTFEN0NGQjI2RgorOjEwRTk0MDAwOTNFQzgyQkE2RURCMzY4NkRCRDc5NUMxNTMzRUM0NzUzNQorOjEwRTk1MDAwN0Y5MUMyNDc0RjA3OEY3QjBGRUIwRjhDRTZCRjgzRDNBRQorOjEwRTk2MDAwMzRGQUQ2REU1QTNEQjk0MzE5Rjc3NjA1RUZCOUIyRTM2QQorOjEwRTk3MDAwQUI3OUQwQkVEMDY5QzE5MTgxMTk3M0Y0RkUxNUY0RTc2QgorOjEwRTk4MDAwMUMyM0RBM0Q0MEI3ODNEOUFBM0MzODgzNTFFRURFMTkwNworOjEwRTk5MDAwMzM5RDFEQzJGRTBCRjhCRUQzQjY4Mjg5RjQ1QzYyQ0VGNQorOjEwRTlBMDAwREJGQkMzN0I5RkI0MThDOTlGODFFNzNGMkI4RkZCMTUwRgorOjEwRTlCMDAwRkNGRjQ1MTlDNzA3MEFGRTlCMTUzRUREOEI3NjI0MTUyMworOjEwRTlDMDAwRTMyQzY5NTRCRUEzRDgxMThGNjI0Nzc2Mjk3NkE0NTFFRgorOjEwRTlEMDAwQjEyMzNCRDE4RUE0RTJCQzI2NTFCOTREQjEyMzU5QTMzQQorOjEwRTlFMDAwOUYyNDNGRTkxMkU2QzUxNUQwOEU1NEIyMjUzMENFN0M2NworOjEwRTlGMDAwMThCRkQ4ODE3RDFCOUYyMzA2RkM0RTU2QjA4RTRFQjdBNAorOjEwRUEwMDAwQTc0NUVBRTBEMTUyNkNDMEVGNzQyNTA2RkM4RTU3M0Y1MworOjEwRUExMDAwNUQ3RDlFMzUzM0UwNzdDMDg2RUFEQURGRTIxRjExRjBENAorOjEwRUEyMDAwM0I2MjdBM0IzMkU0RDgwNEJEM0ZGM0U1M0RCQUZBNDE5QworOjEwRUEzMDAwMDc0Qjc0RjUzMkZFMDNFNjlCN0Q4Q0YxRkNCMkMxQzMzQgorOjEwRUE0MDAwN0U4N0ZDOTI3RERDQThGRTNFMzNFREEzQTlGRTU2QTA5NgorOjEwRUE1MDAwRkY5M0NENUFGN0YxMENCNDhGMjczMzA5Q0Y3NUQyNTZGNworOjEwRUE2MDAwNjU4MkFFOUVGQ0E3ODMyNjY3MkM5RTNGQUMyRDA0QkUxQworOjEwRUE3MDAwQzM3Mzg4MDc0QkM3MzBEQTg3MDdGRTA1NzlDQTc2OUVDRAorOjEwRUE4MDAwRjg5MkYyOEQ4QUM1OTlFNDI3NUQzNEVBRjZEMzcyMDNEMQorOjEwRUE5MDAwRjZDNTlDMjNGNUZCNjZEOTU3RDkzN0ZCRkI4RENBQkU1QgorOjEwRUFBMDAwNDMzQjdGMkNFMjlBRkMzMTkwMjcxMUM3RkQ3NEYwOTQxMAorOjEwRUFCMDAwM0Q4OEI3OUQ5RjcxM0JENUY0RDk4M0IxRjhGQzVENkM1RgorOjEwRUFDMDAwMEFGRDZDRkZFNjQxRjJCQkI2QjdDQTg3MkI1OEVCNkY2NQorOjEwRUFEMDAwNkRGMzcyN0JGMUU2QzE4NDFEQjhDRUM4OEExNjQ4MEY2QgorOjEwRUFFMDAwNjYxRDk5M0I5OUY4RjFBMDgxN0U5RjMzQTVBMDJBMTg1NQorOjEwRUFGMDAwRjFCMkVERDBDMjYwRkRGRDI5OEQ3RTIwNDI2OUY0ODMyNAorOjEwRUIwMDAwODhBQzFDQTFBRjhGRDJGMDYxMDIyNzhFQjZGREZGMDU0NQorOjEwRUIxMDAwNkI5MkU4MkMwMDgwMDAwMDAwMDAwMDAwMUY4QjA4MDBCMgorOjEwRUIyMDAwMDAwMDAwMDAwMDBCRUQ3RDBCNzgxNEQ1QkRGODk5OUQxOQorOjEwRUIzMDAwN0QyNUJCODFDRDAzREQ0MDEyMjZFMTYxNTQxRTlCRjc4QworOjEwRUI0MDAwMjYyNDYxMTIwMjQ2MERCMDEwMUU0MTQyOTgyNDNDNTIwOAorOjEwRUI1MDAwQUIzNjU1QUJEMThGREU0QzA4ODQxMDUxQTJCNTE1QUM0NQorOjEwRUI2MDAwOEY5NThBRURFREUzMTZBRDA0NTQ5NEU1RTkwMzg0MDUzMQorOjEwRUI3MDAwODM0NjQ1NUQxMEQxREJEMkJGMjhEMERBN0VGNEYzN0YyNworOjEwRUI4MDAwN0VCRjczMjZEOTE5MzYwMUZBQjhBREJEMzdGOTc0NzI1NAorOjEwRUI5MDAwNjZDRTlDMzlFN0Y3N0U5RDAzMjFENzkwODA5REUwQ0YxQworOjEwRUJBMDAwRDcyMkZDM0ZEM0QwMkUyMDgxRjRGMDc2QTlBMTdEODMxQgorOjEwRUJCMDAwQTFGRjRDNDNGQjI2NDNGRjNBRERGM0FEQTE5OTgzMTUzQQorOjEwRUJDMDAwMjdGRDFCN0UyNjVFNzhERERDNEM0OEUwQUFCRTdFMzk0MAorOjEwRUJEMDAwNjY5RkU4MTk3MzYxQkZEQzZFNTNERkI4RjRCRjFEMUY3OQorOjEwRUJFMDAwMkMzMTlENEIyMEE0QUI1QkY0REI1MkU5RjVFODEyQTI3QgorOjEwRUJGMDAwNjZEMzcxQkE0RDdFMjJFMEQ1NDRFOEYzQUQzREFDNkRFRAorOjEwRUMwMDAwMjNBQTYzMUM3REJFQjlEQkVDRTk5MDA4RDlDRUJGM0JEQgorOjEwRUMxMDAwREFCNzcwQjAyRjg2OTA4OUU2RDMxMUJGMkI5RjM3RjVGNgorOjEwRUMyMDAwQUQ4RkMwNzgzMzA3OTMwOEZEQjRFQjRFM0U2RUEwRDk4QworOjEwRUMzMDAwOEVENzZEQ0QyRTEyQjBGNTNEMTc2MzcyQkE3RDc0MUU1RQorOjEwRUM0MDAwNUQyMTkzODdERUE2RjMyRjhEMjc3NEREQkI5QzhCMUQ4MgorOjEwRUM1MDAwMzAyRTlEMkYyMTQzMjkxNjNDNDk1NTJEMjMwOTkxRTgzQgorOjEwRUM2MDAwQkM0RDc0MUQ5QjQzMjZEMjQxRDc5OTdEODQ3RDNGREJFQgorOjEwRUM3MDAwMjJDN0JCMjJDMDk1MTA5MzFFRkUxNzhDNDc3RjAwNEUwMworOjEwRUM4MDAwNEVEMURGNDFFMUIyRjM4MzM5RjFFM0U4RjgyRjc0OEIyMQorOjEwRUM5MDAwMDRFNjYzNTUxQTFDQkVCMUI0RERDM0U2QTU4RDNCQzlCRAorOjEwRUNBMDAwMkVFQUUwNTA0MjFDM0E3QzE0OUQ4RUQzQjVCMzhGRDEyRQorOjEwRUNCMDAwNzlEMkY3QUREMkY0Nzg4MEVGQzVFNjQ5NDhCNDgxOEVCOQorOjEwRUNDMDAwRTIwQ0VEQTFCQUZFQTMyNThBQjdCMUZERTNFMTA1OEUwMgorOjEwRUNEMDAwODdDRDgwMDdCQUIwMTdBMjNDNTVCRTA4RjBEQUZDQTE3OAorOjEwRUNFMDAwQjVDMTFGNzZGRjNGM0MxNDI4NDNFMDZBQzI2QkY2MzE4MgorOjEwRUNGMDAwOTMyNzQwRTE3M0FFREJFNDAxRTBFNUJCM0FDNUM2MDgwQgorOjEwRUQwMDAwRTMxNDlDRDBEMzY3NkU3N0I0MEU1RTQ0QUMxRTkwMEZCNAorOjEwRUQxMDAwOUE4RUI2QUNEQTFERDZGRjFFNEY0Q0MyNDkwN0ZEMjNCMgorOjEwRUQyMDAwOEZFNEUxRkEyRkYyRkUxRjlCRDU1NUJCMkQ5NDhFMjk1RgorOjEwRUQzMDAwQzk2RUEyRkQ4OEFCOTI5MEM0RkVGQjEzQjI5QzMyNUJGRAorOjEwRUQ0MDAwMUYxQzg5MkI5RTJFRUU1MkYwRDQ4OUVGNUQ4MEFGN0U4MgorOjEwRUQ1MDAwREVFRjFCNDc2NUYwQTRFMDg1N0VBQkM2Rjk3RUU4ODE1NworOjEwRUQ2MDAwNzE0MjMzNDRGOEZFODM4RURCQzQxMDlERjcyMzhFREJBMworOjEwRUQ3MDAwNzYwMTdERUVGRjkzNTUwMkJFREVGMUE3QUUyNEI4QkY0QgorOjEwRUQ4MDAwMkY2MzRCMTJEMEZEM0VGQTRFMTBENjY3QTY1OEEzNkRFNgorOjEwRUQ5MDAwQUJCQUMwMDFGNEY1NDZGNzYxRTQxRjg5MDQ2RjFDOUYwQworOjEwRURBMDAwMEQ2RDkzQTc4Mzc2N0IzOUJENzIzMDE5MDA2RUFGNzFGQworOjEwRURCMDAwM0FEOUNCRjk3NTM3RTdENzlEQ0Q2RUNFQzcxMjVFNUZENgorOjEwRURDMDAwNjk0RUM3RkJEQjlBM0REODdFQjFEOThCRURBRENEMzIxNAorOjEwRUREMDAwQjZCQjlBQ0JGMTdBQThEOTg3RjcwRjM2NTc2MUZCQ0QyRQorOjEwRURFMDAwNjY4NUQxNjFGQTFENjUyMDhGQ0UyNTUxMDBEMDc1MkQyNQorOjEwRURGMDAwNzc0QzMzNDdDMkU3RjU5MjlFQ0ZBRTczRUJGOTZDMzI5NgorOjEwRUUwMDAwODU3Mzc4N0I5MjdEOTg4MTJGNDdFODlFNEZGQ0VBMUFBNAorOjEwRUUxMDAwRERGM0EyRDM5OUJBRjY4NENGMEE3NEZERjM0M0E1QkEwMQorOjEwRUUyMDAwNzY1RUNGMERCQUZFMzNDQjJBNzVDRjdEODVGM0Y1RjMzMQorOjEwRUUzMDAwMTM5RDI4NUZCNkJCMDQ5NENCRDNCMkVCNzVDRkI3QzM5OQorOjEwRUU0MDAwMUYyMDg3RUQ4MjVGNEQwNUI4NTQwRTI4NEYwMzgwMUZBOQorOjEwRUU1MDAwMUJDMDkxRjFGMUFCMUMzRjdCMDAzRjM2QzAwQjgzRkYyMQorOjEwRUU2MDAwQ0IwMDdGREE3RTA5RTA0REFGMzk2Nzk1NUQ4MzI1OTA1MQorOjEwRUU3MDAwMDMwREQ4QjZBNjBGNzY3QTI4RkM1Rjc2OEEyOEZGQjdFRQorOjEwRUU4MDAwMzQzN0UyN0JGQkNFRDU5RDE1NzFCRTBFMDlGMEIyOURFNQorOjEwRUU5MDAwQ0Y2NzlGNDUzOTJCMjY0MDVCOTA5NjBCMTdDRTJCQTc0QgorOjEwRUVBMDAwNDdDRkVGQTNDQjE3QTJEQ0RDREU3RERDMDFGNEY2Q0E5MgorOjEwRUVCMDAwNTc5N0E2RjdCNDdFQUY5MkNBNDk0MDFGQzVERDU0NTc5NQorOjEwRUVDMDAwQTU1RTVDRkY2OTdBRUI2MkUzNkJGRDQwQUY0NkQyMTc0QgorOjEwRUVEMDAwQzY3MTZGRjg0QTExMDk1REM3Q0IzREVBMEY2MkEwMURFQworOjEwRUVFMDAwRjg5NjI4RDE3NjZFOEYzMjA5RjBCNjNCNUQ3MDg5MDJCNAorOjEwRUVGMDAwRjY5QjI0QzNCQ0NGMUZCRTExRUVCRjEyMzI5QjYwREU1NworOjEwRUYwMDAwRkJDRkM3MTE1OEM3NzZBQTc3NkRCNERGMUI2NEM0OUFDQworOjEwRUYxMDAwRjExNERFODE5RTJGRjcwMTVGQUE0RThCNjcxNEI5NzA0MgorOjEwRUYyMDAwMUUyOTE5MjJDQTg3Q0Q2MzZDMjY2MTNDRTgzQjMzMDk1MAorOjEwRUYzMDAwOEMwMTNFNTcxMDlFNUQ1RkE1MzlFMUJBMzk1REU0Rjc1QgorOjEwRUY0MDAwODNDOEVGNTc2N0I4RjBCRDk3Q0Y2NzI2NDBEQjQ0ODI5MAorOjEwRUY1MDAwMjgwRjAyNjc0REU1RkUwOEVCQkQxQUJFNDM2NTQ4Q0U5QgorOjEwRUY2MDAwRjk4RjFDMkVEQTdGRUZEOTNBMDdDODk3NTc3QUQ4Rjg2RAorOjEwRUY3MDAwMzlDQjQyMEU4MEQzQkVBRjM2MzhFMUZFRjZGNDJDMUNGRQorOjEwRUY4MDAwNzdDN0Q4QTU2ODVGNkMzRjZCNDJCQURFM0U2Njk1MzNBMworOjEwRUY5MDAwMzMxQkQ3RTkwMUQ4NkQzRjVCQjcyNjAzRThCQUM3OENBRQorOjEwRUZBMDAwNkQ4OTI4MjQwOEY0OTZDRUY0RUNFNkIzNzVFNDMwN0Q0MAorOjEwRUZCMDAwN0VDRTIzRkE4MUNFNzI0OEU3REU0MTcwRkY4QTU1NTYzNQorOjEwRUZDMDAwOTJDNkUwNkZCRTgyOTA1QkQ5Q0I2NDkyNEIyRjA3NEEwQQorOjEwRUZEMDAwN0JGNEZBQzQxQUFBOUUzNTAzRUMwOEEwNjdEQTlFNkE4RAorOjEwRUZFMDAwOEVENzNEREZGN0VFRjI4NDk5ODAxNzBBNkZCOEY3Q0EyMworOjEwRUZGMDAwRDlEQkY3OEQwNUY5RTM2N0VEREYxRjdEREEzQTk4NUUxRgorOjEwRjAwMDAwNUJDNkFFMUE3NjFCRjREQkVDRjBEODI0NzhBMjkwMkYwNgorOjEwRjAxMDAwNjkzQkVGQUNEOTBGRjY0NjhFNTMzRjhGN0Q1NzU3MjI5MQorOjEwRjAyMDAwREMzNzlGNjVGNkQ1Qjk3NEI2OUVFRDlFN0FGMjAwN0QwOQorOjEwRjAzMDAwRUY2NTZFN0Y0RDNBMzZCMjAyQkVCNzlGREE0RjYwNTcyQQorOjEwRjA0MDAwQkNFNEY5NEQ3QzE2QzgzM0FGQThBMzM3MEExRkE0OTdCOAorOjEwRjA1MDAwNzNERDA0QzdBMTNGODNBNjUyMzgxNEIyMkU5NDBGN0RFRQorOjEwRjA2MDAwQURERkExQ0ZGN0U1REI1Q0NCMjlBQUI3OUZERkI5RUIxQQorOjEwRjA3MDAwNzZEQUNFNEIxNDg5NDg1N0YyMkRCRjdFN0VGOTNGNzM2NgorOjEwRjA4MDAwRThEQUI3N0VBNkI3NEI2QzQ0RTBGQURDODk3MkEwM0ZBMQorOjEwRjA5MDAwRkU5OTcwREFBQTdCNkZBQUQ5QTYxQjM3OEY4NDNENDdFOQorOjEwRjBBMDAwN0M1QUZCOUVBNzVFREMzRUQ5QzJFNTlBNjY5RjZDQjE5NgorOjEwRjBCMDAwMjhGMzdENDBEN0MxNTkxN0QxQTNDQkI5RkU2RDQ0Nzk1MAorOjEwRjBDMDAwQjE5NTEwNEY0NzA2OTVFQjU3OEIzMkYwRTFCOUEzNzYxNworOjEwRjBEMDAwODQ2M0RFMjMzMzI2MTBENEQ3Q0EwNEUwMDcyNEM2MzA2NQorOjEwRjBFMDAwN0JDMDdCRjQyMkY2OEE0QjI1MDlCOUZDNTMwNEFFRTZCQgorOjEwRjBGMDAwOTMyMURBQkY5REFBRjlBRjQxODc3MzdENkUxQ0I3M0Y5QworOjEwRjEwMDAwQkRGRkEwNjMxMENBRkRDMjMyQTYxNzFFNzExQzQwM0Q5MAorOjEwRjExMDAwREZGNTAxRDVGMzAyRkI0Njg4RTI3RDM2RkMwMTdBRkY3QworOjEwRjEyMDAwMDMyQkY2N0ZFOTdBMDFFNTg4NjYzNzU0MTJEOTQyNTVGOAorOjEwRjEzMDAwMUM5OUU2M0Q2QkJFOUZFMkNGNjdBRjE5N0IyQkJEQkUyRQorOjEwRjE0MDAwRjQ2RUQ3MzBFMERGOTdDMDNFNDBGOUQwRTg2MEY2NDE3QQorOjEwRjE1MDAwOEMxQTRGQTdCOEFEQzc4NjdDQjhFNUI0ODlEOEMxNkYwMworOjEwRjE2MDAwRDg2NjQzM0FBNTdDN0FERjU4RkE5RDZENDE2NjJGNzRDNAorOjEwRjE3MDAwOURFNkY2REUzNjA3RjJDOThFREZCMzc5NzQyRDczMzA2MworOjEwRjE4MDAwM0ZFMzk0NTUwNjdCN0NDQkIyMTg4NEYzNjgyOTI2NjA1NAorOjEwRjE5MDAwODZGMTlBRDhGODNEMUNBRjZGNzNCQ0VFRTNGQUVBNzVCRQorOjEwRjFBMDAwQUVBRjVFMDU3QjAyRjUxN0IzMjc3NjgxM0Q0MUFGM0JERAorOjEwRjFCMDAwQjgzREIxMURGNDE5QkQzRTdGRkFCOUY3ODEyRkNGNkQ2RgorOjEwRjFDMDAwOEI0MkJCNzMzNDQ5REYwNEYzREFFNkI0RTIzQzhENzA2MgorOjEwRjFEMDAwOUVBN0U4Rjk2MDZFOTVERTZFQTgxOEEzQjcxQjZFMTg5RgorOjEwRjFFMDAwMzk0Q0Q3MkU0RjFBQTE3QjdGNEFDMkI1QkFFNzY1Q0VGQworOjEwRjFGMDAwMkNCRDNDMzI0RkQwQjVFNUYzN0FCQjYxQkFGNzQ2M0Q0MgorOjEwRjIwMDAwM0RDOTYxNzYwM0NBM0JCRERGMzgzQkRDNkY0QzA1M0MzMgorOjEwRjIxMDAwMzEzRjY3NEJDRkVEODhDNzJENDdEMzA2MkI2MTc2QzJCMAorOjEwRjIyMDAwNTYwRUU3MkQ0Nzk5RkVEQzFBRkEzMjQ2ODk2MDQ3N0M3NAorOjEwRjIzMDAwQzZGQkZEOTZFM0UzMTRDN0M3N0ZBN0M4MjczMjg2MDA0NQorOjEwRjI0MDAwQkY3Q0M5RTQ2RjNGNzRBQ0JEQUZCREY3OTlGRkUzNDEyQworOjEwRjI1MDAwRTE3QTdEQjgyODIxOTM2OEVEREY3N0JEM0YxQTlFNUY4NAorOjEwRjI2MDAwMkE1RjUwM0E2RDBGNTEzQ0RGMkRDNjc0NzZEMDU3NTY0OQorOjEwRjI3MDAwOTkxQjlGODRCNkFBOUFDOUM2NkMwNDQ3QkExOTlGNUZBNgorOjEwRjI4MDAwRTMwMTc5REMxQUQzRjg1Mzc4QkVCOUM1RTZEQTkwMDAwOQorOjEwRjI5MDAwN0NGNDFGQkY4Njc2MTM2NTA1MUJCREZFMzEyQUM1NEY2MgorOjEwRjJBMDAwMjhBQjU5MzM0RDM4QUY2NzJDQkU2MTFFRDA5QjgyNkY5RgorOjEwRjJCMDAwRkVBREI0QkZCQURFRUFEOTI4NUQzODFGNjdBNkEwMzExQgorOjEwRjJDMDAwRkI1NkQwNDMyMkU3RkIzRjBCOEEzMzkzREU5NzdGMjkxRgorOjEwRjJEMDAwQTA5QzhFOTIwOEVBMDUxQkYxMDU4MDdGNDg4MzNDMUZBNQorOjEwRjJFMDAwRjg4Mzk4MjhGRkQwRUJCRDU5NEExQ0Y0MjczMjkxNUM3MworOjEwRjJGMDAwNzQxQzY0NkRGQTNEMjFCOEY3NEYwMjlEOTc4NTM0QUFCRQorOjEwRjMwMDAwMzA4RUFEODE0QTE4Q0FDRjBGNjYyODg5RDhERjNDMTNFQQorOjEwRjMxMDAwQzc3RjdFMkEyMTIwQ0ZFODcyQjA5RDdEMTc3MTc1QzQwQQorOjEwRjMyMDAwRDJGOTExQzVGNDI1NkRDRkE3RkUzRTdDREZFNEI4MDUwOAorOjEwRjMzMDAwRjVENEZCRkY2REYyOEIxMUVDQTU1RTM4REY2MjM5MTU1OQorOjEwRjM0MDAwRDJFODJDRUQ0MkZBRTlFMjc0QjEzNUQ1ODdGMkQ3Rjg2QworOjEwRjM1MDAwN0U2NjI2RjMwN0I3N0MzNDREMDRGQUNBQjYwRjkyQzExNQorOjEwRjM2MDAwQUVBMDBCMTQ2NzUwRjlCRUY1RjgwRDhFREEwOEVGNEQxQworOjEwRjM3MDAwQ0VBRUNEQ0MxQ0QyRDdDRTBFNkUxMjZCOURFOENGOEIwRAorOjEwRjM4MDAwQjBBRUNERjQ2RjU4RDc4QkREQTYwMEUwRjc5Q0QzOEFFMgorOjEwRjM5MDAwRjJBNEJGNzVFNDg3RjQ3MTg4M0NCMDA3QzJGODhEOTA4MQorOjEwRjNBMDAwNkFEN0M5NkIwMURFOURDMkQ3RDc4NkQzOTc3QzVGMzhGOQorOjEwRjNCMDAwN0QzRDdGMjE3RDIxOUNFRjdFMkIxREUxREEyQTMwRkFGNQorOjEwRjNDMDAwNTIyOTdEQzE3M0I1QjQxMUU5NEIzNTExNUY2QjM2RDI0QgorOjEwRjNEMDAwMUJCRURGNjRCNkJCNkM1NDQyMkVDRDRDNDNCQUU5OEFFNworOjEwRjNFMDAwQTk3ODNGMjBFMUY3NDZDQzQ0N0ZBRTg2RkI3MzM1MjhGMQorOjEwRjNGMDAwRTc1RjNGQzJFNEJDNzE1RDNCOEVDQzE5MTYwMjdCNjJCNQorOjEwRjQwMDAwRDREQzYxQzBFNzVEQTAwMDg2QzJGNDczRTc4MTdERDlEQQorOjEwRjQxMDAwREJBNkU4NDIzQjcwMzI4MTkwMTU3RDlFM0Q0Rjg2RkUxMworOjEwRjQyMDAwRDc2QkVEMUNENkJGODRGNTVGOTJGOUYwN0ExNTlFMkY0RAorOjEwRjQzMDAwRTBDRjQ5MjVFQkFGQjVENUJDNzkyNUQwREY2MkMyRjY2OAorOjEwRjQ0MDAwMDdCQ0ZGNDMxRTc5MjlEMEUzODMxOTcyMDNFMDJGMDMyMQorOjEwRjQ1MDAwOEMxNjdBRkQ2NEJDN0MzM0RDNUY5QTQ5NzBCRDc3OEQ3NQorOjEwRjQ2MDAwOTc2RjA5NkZGRjY2OUM3QzVCNzg3QjczQUY5RkRBQzlFRgorOjEwRjQ3MDAwRkRENDVCRDEyRTdEQkQ2NzI2REFCMzEyRjFERDA4N0FBQgorOjEwRjQ4MDAwRTdGNTIwOEI0NzZEMUUzOUIwMUY3NDgwREJGM0ZCQjlBNQorOjEwRjQ5MDAwOUZGQTA2QzhBM0FCNDA5RjMwM0Y3NTBGRjc1Mzc3NzFCMworOjEwRjRBMDAwQkRCMjgzRkJBOURCQjk1RTc5OTlGQjQ5MkY3MTNGRTlCNgorOjEwRjRCMDAwMDVGMDUzQUYwMjNCQTQ4QUM3NDk5ODlGOUEzRDZBNTIxMAorOjEwRjRDMDAwMTlEQTExMkVDRDRGNEQ4OUU4QTc0RUY3RUFGNUNENTQ0NAorOjEwRjREMDAwOEY1RURGREM5ODFFNkZEMDJGN0E3RDMzMjU0MUFGNkZCMgorOjEwRjRFMDAwQ0E5Q0Q3MUFGNDRCOTZBRUJGN0M1RUVGQTcxNjlGMkQzMQorOjEwRjRGMDAwRDVGNTJGM0NBNUY3NTMwQjRFQ0NENEY1NUY5QTI5MjFCNworOjEwRjUwMDAwMUVCRDQ3NkZEMkY1Q0JFREFFRDNGNUVCQzM5QjBGRjEyQworOjEwRjUxMDAwNjQ1NTFGNzc4MjFEQjc3OTY0M0RDNzFCQjMxNzM0QkM5MAorOjEwRjUyMDAwNzU1RDA0NkZBRjcyQkNFREUxNzhEQkM1RjFCNjgzRTNDNgorOjEwRjUzMDAwNkQzQkI3MDc1RUU2Nzg3Qjg5REIwMzJGNzBCQzZERTExRQorOjEwRjU0MDAwNzhEQkNDRTMwQjA3MzhERUY2NzNCQ0JEQzFGRERERUMyOAorOjEwRjU1MDAwNTFCQkQwM0YzQjc3OUE3MEJDM0QyMTQ2QzI1Qjc5OTI0QworOjEwRjU2MDAwNjhDMDgzQzM4MDA3M0RERTRBQ0RDMzBDNzg0ODMzRTBEMgorOjEwRjU3MDAwRTExQTVEQkJGMDU0QTYwMTBGMDVCQUI2Rjc2OEE5MDEwMAorOjEwRjU4MDAwRkUzNzE4RUM4NjRBREQ3MzBENkY1MzNERjMwREY0NTVDRAorOjEwRjU5MDAwQUZFQjc3QzlGQ0U2NjQ3NkRFNUZDQjZGN0JCOTFEQjc1NgorOjEwRjVBMDAwOUJFMzZEMjdFMDBERTM0NDFFMUU4RkYwRjJCODJGQjNFRQorOjEwRjVCMDAwRTM1RUU0NzhEQkNBRTM0MjVEODAzN0IwRUYzOERFNUFDMQorOjEwRjVDMDAwNDc5RTQxM0JGRURDNzkwRDZGMDcyMkUyRUQ3MkY5RURCQgorOjEwRjVEMDAwM0FCNzNFMkUzNEQ5QTU4RjBCNERCMkVCRjlBRDg0RTg4NgorOjEwRjVFMDAwRURCQjg5NUZFOUY5QURFOEI0REVCRTlCRjA5OTlFREYyMworOjEwRjVGMDAwRjI0MzMzNzU2RDZBMDcyNDY0MEQwMTNENzU5M0VFQkRDQQorOjEwRjYwMDAwOUM2MDlEQUUxRkY1OTM5OERGRTJFMTdBREY1Rjg5RkE5NworOjEwRjYxMDAwQTg2RDJBRDM4Rjk0MEZEMUZFN0VFNjdCRDQwRUM4RTg2NgorOjEwRjYyMDAwODNDN0YzMDZGRkU5Rjk3RUY0RjdFODJDNjZENzc0QkRDQgorOjEwRjYzMDAwNUY4MzcwQ0QwMUZEMURBMTVGMDZFRjk3OTFFNUMyQUIyMQorOjEwRjY0MDAwQ0Q0Q0Q0RTg0QzlDRTZFRUExNzQzRUU2OTFDQ0VFMzE3NAorOjEwRjY1MDAwQzdBQzgxMjAwM0ZDMDQ0REI5N0Q3NjkyRThGNDExMTgwMworOjEwRjY2MDAwOUZEQTRCMTk1OTYxRjZBMEQ5RDU0OEMwNkUxMDZEMEZCRAorOjEwRjY3MDAwNTVDM0JBODg2OEYyQTBERTM1RDg0N0E0QzEyNURGMEU4RAorOjEwRjY4MDAwRjc2RjFGRTRFOUEwQjA1ODkyMTU4QkYzNzA5MzREMTZGNQorOjEwRjY5MDAwQjAzM0VFQ0Q5MjBCNjA1QzcxMTI4M0M3RTY2NEVBQkJCNworOjEwRjZBMDAwNTM3ODZDOEU2MjZEOTVDMjZCMjM2RDhCODNBQjExN0UyQworOjEwRjZCMDAwNUQxNDVFNjIwNjhDOUY0MEVFQTJGM0FBQ0NCMjMyMzg5MworOjEwRjZDMDAwQ0MyMzVDOUY2RUQ0RUI0MzMwMTg2OEZCOTk2OEQ2OUVDMAorOjEwRjZEMDAwOURGNUNDM0MzNUE5NEZGRkQ2RkNBNjZCQkQ0QUM3MTk5QQorOjEwRjZFMDAwRUQxQzVBNEZDNkQxNzFEN0E5NzE2MDY3OEVBMUYzMDM4MworOjEwRjZGMDAwRjk2ODcyNkM0QjhFNjQ3RkY3Njc4N0E5RTNFNDU5NDAyMQorOjEwRjcwMDAwMUY3NzcxRkQzQTlBNDJDNDlDRDlGRkZCQ0Y0NEZCQkVFMAorOjEwRjcxMDAwMERGOENEMDY3ODg0QzVCREE2NjYzMUZCQUMxMkM2QzkwRQorOjEwRjcyMDAwNDFGQjUyMEVCNzJGNDlCMDEyREI2RDE5OENCRTdFQjI3MQorOjEwRjczMDAwNjYyNkQyOUI5M0MyNEI4Qzg1RjkzM0Y4Q0RCRjkzRDEwQgorOjEwRjc0MDAwRDdFNUFFNDM5QkZGMDA3NEUyMEJCN0E3QzNFOEU0QUU3NgorOjEwRjc1MDAwNDg3NDQyMkEzQzZFRjREN0ZCQjNFNzU0MzZERjU2NkU0QQorOjEwRjc2MDAwM0Y2QTc2QjIyRDQ5QjM5QkZEMUMwRTI0NTAxMDg3NTc3QgorOjEwRjc3MDAwMzI5OUMyMzVDRTQ1MzA1RTUzRTMzMkY5RkQxNDY0NTFGRgorOjEwRjc4MDAwQjE5OTAyQ0E5RDMyODFCODUyNjE3NDk5MzAzQzU2NDg5MQorOjEwRjc5MDAwRTFGMkM3MTgxRkY0MUU4RDM2QzhGNzM4ODMxRTFFQUE2MworOjEwRjdBMDAwNkIxNzlGNEQzM0Y4ODlENzBDQThFN0NCOUMxMzBDRkE0NQorOjEwRjdCMDAwNjk5MkFFN0Y3OUQyOEQwNjNGQjZEMkUwRTdFQUY1ODQ1MgorOjEwRjdDMDAwOTk5ODU1OEUyRjEzQzYyRDU0NDEzMkU3QzI3RDgyRjg4OQorOjEwRjdEMDAwMDk3QjhFN0U2NzJGOUMxRjkzQUI5MDVGQjk1RjYzRTRCQworOjEwRjdFMDAwRDc3QkIzMjQ4NEIzRTA2MjdFOERDNjBGREFGQjFBRkNBQworOjEwRjdGMDAwQUM2RTg2RDdCNUI5OUE3RUYyQTBERUIxMDVCRTQ1MjBDMworOjEwRjgwMDAwQUU0QTZENjg3OTUzMThCRDZENjhCNkJGNUYzNjhBOTA5MQorOjEwRjgxMDAwQTc5QkM5RkI2NTE0NzlGRTY2MTc1RTlGNjg3NkUzRjVDMgorOjEwRjgyMDAwQjE2NjA5QUY4RjM2QTc2M0JGNzVDRDFFNkNGRkE4RDkyRgorOjEwRjgzMDAwOEJENzg3OUI2NUJDRkY1MDczMzlCNjNCOUI3REQ4NUVFOQorOjEwRjg0MDAwRDM1Qzg1RDc4RTY2MDVFRjhGMzQyQkFBOURBRTZCNjQ5MworOjEwRjg1MDAwM0JGMUE4NzQyOUEzM0FFOUY3QzJFMDM2QTI5RENFMjM3MgorOjEwRjg2MDAwMENFRUE5QUE0QkQ3MUVERUU0RDZGNTRGNkU5NDc0Q0ZFQQorOjEwRjg3MDAwODczNUE0RUI5RTI3MkExRTVERkJDQTJBQUZBRUZGMTA3OAorOjEwRjg4MDAwOUZBQzZCQzc5Nzk3RUJGQUM3Q0EzRTVEM0JDNjUzQTVDMworOjEwRjg5MDAwRUJFRjQ4NTc3NENGNzcxNjE3MEMwRTBEQzBDNzBGMzUxNgorOjEwRjhBMDAwMDc4MjBDMkVDMTIwODNEMzZCNDEwNjlGMUVCQzlFMDI5MworOjEwRjhCMDAwRjk0QkYxMTg2NzBFQTJCQzg4Q0I3NjUxRDJBMUY4QjJGMQorOjEwRjhDMDAwQjNGQzVBQkNEOTIzQzQ4NjhEMUY1RjRFQzc0QjBGOUYxNAorOjEwRjhEMDAwMkYxRDRGRTc5RkY5OTE1RTYyM0M0MUREN0Q0NzdBOEY5NgorOjEwRjhFMDAwRUVCREM5QTJCMzE0RjIxMTg3MEE0NThDN0IxRDJBOEM4OAorOjEwRjhGMDAwOEYwMUZCRTUzRThCNkI2QTM2QTVDNzgzNDc0NENGMDY3NQorOjEwRjkwMDAwNzgwRjVFODgyMDJGOEY3MUJERTgxODY3NDdCOTMwN0Q2QQorOjEwRjkxMDAwODVCMDQxNDRBMjY1RUZENzc1OEY4ODE4RjczQ0Y4N0QxNAorOjEwRjkyMDAwNTIwNUVCNzJFQzdDNDEwMkJBOTg1RTU4MUIxRjE1RTYzQgorOjEwRjkzMDAwQUY0RDBGRkNBOUNDMERGNzU3NjRFNDQ2RDFEMUE2Qjc2MworOjEwRjk0MDAwQTc1QUVCQzdGNEFENEJFQjU3Qjc0MjZGNUZGNkQxQkQ4QgorOjEwRjk1MDAwREYwRUVCMThBRDdFREYwRUYyQUQyMzY5MDNCNjNCRDJBRQorOjEwRjk2MDAwMDdDRTkzRkM5NkRCNjE5RjcxM0JFQzI0OEZDMzlDRTAzOAorOjEwRjk3MDAwNzZEODcxRUVGNzg0QjgxREY2MjFCN0MzOEU3MkZCRjkwNQorOjEwRjk4MDAwM0Q2RTg3RjU3MEJGRTc2RDZFM0Y3NzczRkJGOTMwQjc1QgorOjEwRjk5MDAwQzMzQUQyOUY5QjgyRjJGMDk3MDIxMTIzRjhBOURBRjVCRAorOjEwRjlBMDAwREIzRkQzREI2MURGRjJFQkVEQjBBNUVCRjQ3NkQ4RTIyMQorOjEwRjlCMDAwNEVCRDFENTZERkFFQjdDMzZBNTVCRDFEQjZCMDQ5NkYwQgorOjEwRjlDMDAwODcyRDY4RDRDQkMzRjkwRDkzNzRFRDc5OEEzRUNFMzY3QQorOjEwRjlEMDAwQjc0QTZGM0Y2QkY4OTlFREQzQ0JDNUNBNzJCREZEREM1QQorOjEwRjlFMDAwREY3QTVGMEE1QzhGRjkxRjQwRTJDNzYxN0FBRjM3OUYwOQorOjEwRjlGMDAwMEI3QTg1RDI0NUY2NzlBQTU3MzAwRUVFNkI4NUZDQzk5NQorOjEwRkEwMDAwNTZFODQyRjU2RjkxMjlGODE2RTQ3REM4REIyMjgxQjhFQgorOjEwRkExMDAwRDNDRTczQjkxNUQzMjNEMDVGQUVBQUE3OUJFQUEzRkFCRQorOjEwRkEyMDAwRjhDNjRENzdFQUUxM0FFMzE2QkQ1RjYyMkREN0MzNTVCQworOjEwRkEzMDAwNEVEMkZCMjU5NTQ2M0RFM0QzQzM1NTI1MEEwMUJBMzQ4MgorOjEwRkE0MDAwRUExQjkzRTMxNjA5RTRGN0U1RUExRDJCQTE3QTg1QjVENQorOjEwRkE1MDAwNzU3QUM3MEE3N0QyNzRDRjUxRUZCNDY3QjM3ODVEMkU0OQorOjEwRkE2MDAwOUQwNzE4MEIyRDUxNzlGQjNEMTQ2RTNCREYzNTYzOURDRgorOjEwRkE3MDAwMDg5REUwRTE5MTU0RkYxNEMzREYxNDdFMkY1QjE0QjVBMQorOjEwRkE4MDAwMTFGMjZDM0MyRjQyQzQ1M0JCQkU0M0ZCNUI4N0IxQkMzRAorOjEwRkE5MDAwMDhGOUNBN0MwMkM2NTdFODJGRTAyQjk3RDA3Njk4OUVDQgorOjEwRkFBMDAwQ0IwOUIyRTc2MUYzRDUzREZGMzFFMDZDQzBGOUM4ODdGRgorOjEwRkFCMDAwNDdFNkZFNEZDRTI3MjYwMUVDMjEzMjlFOENDNzdBODM4MworOjEwRkFDMDAwNTBEQzI1QzU1NzhERjdCMzAzQ0MwRUNBNEU2Mjc2OTAzNQorOjEwRkFEMDAwMzc3OUE2QzhGMzRGMDQ0MjFFNUUxM0IxNjMzQzMzODVFOQorOjEwRkFFMDAwRjgzNzQyOUMzMzdBQkY2MzFBNkRCNkMyOTA4OUUwMjcxQgorOjEwRkFGMDAwRTlGOTdGNTZDNUMwRjk3OUEzMUY3NkJEMzRDMkUwQjdENgorOjEwRkIwMDAwNUQ2QkYwRUJGNEZDNkYyMzA2RkIyNTQ0MjRCMDI3MTE1QQorOjEwRkIxMDAwMDcyNkRENzM4NEQzNjE0RTQ3MkRDN0RBRTZDM0JBNUU4QworOjEwRkIyMDAwNDhFNkY5MTU0RTNGMTMzOEJFMDhEOUI0QUI5NjNFRjdGOAorOjEwRkIzMDAwQkE0NTAyRkU4NjhEQThGMUUzQTFCRTI4RDgyODQzREU4RgorOjEwRkI0MDAwMjFDRjZCNzMyMURFQzQ2NTFFQjQ0QjRGMzFGQzc4RTlDNQorOjEwRkI1MDAwMkZFMENGNEJDMkYwMDVGODNCQUFDNzlGQ0RGMEZDMjRBNQorOjEwRkI2MDAwQTdBNzBCRTdDNUU4RTg5RjM3MkYwMzVEMzlFMzJFQTk2OAorOjEwRkI3MDAwOEVDNTc4QkYyNDI4OEIzMTc0N0U3QjVDMDJFNjUxRjdGQQorOjEwRkI4MDAwMDQxQjgzMjVCNDdEQzZDREVBODY1NjI1Q0QzNEUzN0M5RgorOjEwRkI5MDAwODkzQzY4MzJDNUMzMTRCRTVFMkZDRjZCNzUzNTEzQjQ3NAorOjEwRkJBMDAwM0I5RTZGQjZFMzk1OTA0NjExRTQ1MTlCRkJGNjc4RDBFRgorOjEwRkJCMDAwOEY1RDI5Q0EzMEE4NEZFQjFBMTJCQjAyRjJGMzlCMkRCRQorOjEwRkJDMDAwQjE0OTkxRUE1QTc2NThGMjUwOUY3NkVENDgzNDRCRjQ5OQorOjEwRkJEMDAwRkQxMkIzQ0IwQ0VGOTUyNEQ1ODlFMEVGNURENzQzRDA3MAorOjEwRkJFMDAwMkUyODQ5MjI5OENGN0FCRTM5NzA4ODdENEZDMTNBMUNBMQorOjEwRkJGMDAwQkE4RTQ5NjA5Rjk2Qjk2QTI3QzUyNDQwN0M5NkRBMzY0QQorOjEwRkMwMDAwMTJEOEI5QjFFOEJGRUUxRTYyNDNCQ0Q5NUM0QkNCQkU4MworOjEwRkMxMDAwNEJENzc3MjA1MTI0ODI5N0UyQzc0MzNDMDFEMDAzNDk1OAorOjEwRkMyMDAwNEU4RjFGODY3MzVCOEUwMzlDMUJFOEVGRDc2OTdEN0EyRQorOjEwRkMzMDAwODFGMkY5RjE3MDdDRTQ5MUIwMzZFNjE1RjRFREExMzk2QQorOjEwRkM0MDAwQkMwRThBRTM0NzIyMEFENjU5QjRGNUIwRkEzMjEyOEFCQQorOjEwRkM1MDAwOUM2N0Y5ODhEQjBENUE3Q0ZGMjhCNzFCREVFMzcxQjc4MAorOjEwRkM2MDAwNDNEQzZFNjgzM0M0NkZERUUyNzZDMzZFNkUzN0VDRTU1QworOjEwRkM3MDAwNzZDMzZCREM2RTc4ODNEQjBERkJCOURERDBFQjJGMTAyOAorOjEwRkM4MDAwQjUwNUYyOEFGMzg4M0QwNEZFQzI4MTVBMDY2N0Y3MEE3OQorOjEwRkM5MDAwQzE1RjBFRjk3MEE1RDM1NzRBRUZEQjU2NTg1MDdFMEU2MAorOjEwRkNBMDAwNEY1MjVCMjAzRTZFQUI1MjI3QzMzQURDRDU5RDJENzA4MAorOjEwRkNCMDAwNkQyOUVFNDg4NEZCRjM5NDkzNDdDMUNGMDY3QTk5OUE1NQorOjEwRkNDMDAwQ0JGOTlERTI2MUFEOTVDMTc5RERFMjE4Q0Y3MkEwNjdGNQorOjEwRkNEMDAwNjU0OTA1RjY0QjYyNzBCM0QzNUY4MDc3RTIyMjU1MDAyOQorOjEwRkNFMDAwM0E3MDJCMTYxREJDNkIwREYwOUQwN0VEMzBGOTExMEQxMAorOjEwRkNGMDAwRjQ0OEUxNzlCRDA2RjcyQzkyQzVFMEFFNDYwMURDQTNERAorOjEwRkQwMDAwNkEzOURDRDMxMzIyRjJDOTNBMEU3NzBEMkUzQjhBNkY4MworOjEwRkQxMDAwMzZBOUI0RUI1QjQ5QUM2RUUyQURDMjlCNEQwN0U4RkM4MworOjEwRkQyMDAwQkI2NTExRjNBRkRENDlCQzRFOTA3RkQ3MzhERTNCRENCRAorOjEwRkQzMDAwOUU1RDVCM0E3MEJDRUUyMEVGRDdEQjZFMjc5MjZENzA1NAorOjEwRkQ0MDAwRDgzOEE1Rjc1OTI0RkE3RTU1NjA3NTMyRjBDNURBNDFFNgorOjEwRkQ1MDAwNUE5RUQ4ODNGNkY1NjRCMUYwQ0Q1NDNBQ0YyMEFGODNFNAorOjEwRkQ2MDAwRDRFNEU1MUNDMjYxNjNGOERFNUI3QzlERkRDREU3QURBQworOjEwRkQ3MDAwRDIxQjJEMTIxRDc3NTZFMDFFMDJERkIzOTkxQkRERTE2OQorOjEwRkQ4MDAwRjVBNUREN0M3RUFCNjZEQzQxODAyRjgzMjlBNzFCRDBFNworOjEwRkQ5MDAwOEZGN0Q5MjRCMEJCODcyNzc5NTYwMjFEQjg5MzE0Q0JBRgorOjEwRkRBMDAwRjdFOEZENjk1NDFFNEEyRTk4NTZFNzhFMDRFODQ3REZBRgorOjEwRkRCMDAwNzk5NDAwQkQ1Q0IzMDlFOEUxQUQ2NDNCQ0E5REZFRTYwMQorOjEwRkRDMDAwNzM4MTFFRjExM0I0NDdGQUQzMjM1NEZFQTAzRDY0QUJGNAorOjEwRkREMDAwRjhGNDI4RjhCNTk1QTREMTEzQTBFRjA1QjMzRDQzODBGRQorOjEwRkRFMDAwOEY0OTk1MDVGNTczM0FGRDBEQ0ZBQjY5RDc0QTgzRkU3MAorOjEwRkRGMDAwNzY3ODJEMDNDQUUxRTFFNzlCREJDMUVGNzgwQkY4MDdDQQorOjEwRkUwMDAwRjNBMDI0MDZFQTczODIxNTc3RDgwMTNFRDM5M0QzNzYwNAorOjEwRkUxMDAwMDI3RTQ4ODkzRDM0OEFDMjYxNTVFMUNBMDUwMEFGNTU2QQorOjEwRkUyMDAwMTU0QjVEMDJEMDU1RDEwODdDMUUyQ0IxOUY4NDhBOUM1NQorOjEwRkUzMDAwOUU5MjU1Qzk1MjE4QkM1N0FEMjZDNTBBQzAzQkY5MkUzMworOjEwRkU0MDAwRjcxMkJBQUVCNEE0M0YzNDJCOTQ2RjdBMkNDQ0VGNzk2RQorOjEwRkU1MDAwQTdGNDc3NDlBOTYxRkRDN0U2OTRGQzJDMDdGOERBQ0QzMQorOjEwRkU2MDAwRTg3Q0I0NTU0OThCNTQxRkFDRDE3OTRCNzEzNEM2NjVDRAorOjEwRkU3MDAwOEVEN0IyN0EwNTdBN0Y2NTEzN0Q1NUExRkFBQUMzRDNDRQorOjEwRkU4MDAwQzdDNzhCMzkzRDQ1OEQzQURCMDBGRDk1RDUzNjA5RkQ1OQorOjEwRkU5MDAwMzNCMUJBQUQ4OUI2QUJDMDVFMDJGQkU5NjEwQkYyQTUyNgorOjEwRkVBMDAwQzZDRkM5OEQ3QUI5QTkxOEY4QjZDQUMwRDcxQTNGRUQxRQorOjEwRkVCMDAwQkM5MDhGNjMwMEFGNTFCNThDOUZCNEY1MTlENzM1RUY2NworOjEwRkVDMDAwMkI2QUU3QzQxMzYyRjRFRkRFNUQzNDIyOUFFOUIxMzBBNQorOjEwRkVEMDAwRkI3NjNDQ0EyNkM5NEFENzM3OEJEM0QzMkM0RTRGOTRENgorOjEwRkVFMDAwMjQ3N0MwN0MwRURFMzM2MjJBRTA0QjZEQTE3RTAwQ0MwRAorOjEwRkVGMDAwNkQ5OUE1Q0ZGRTREODM3NTkyNDE1RUJBRkU1OTRENjI1NAorOjEwRkYwMDAwMDZGOEE3RTQ0RTRCMUYzREE2RTlCRTg3RjUwMjczQzI3MworOjEwRkYxMDAwREI0MEFGQUFGQzBFRDgxMTEwQ0U4NDhGRkVGMUQ4QTEyMQorOjEwRkYyMDAwM0RBREY0N0JERDQzRTM0OThCMDdDNzNCQzFFNEEzODRDQworOjEwRkYzMDAwRTMxRDJDMTQwNzc5RTFGOUJEQTMzMjIwODU0RkMyRTlGNgorOjEwRkY0MDAwOTU4RTFGNTJEOUYzOUE3QjQ2NjRBMkI5QzlEQjFGMkQ0NworOjEwRkY1MDAwMUIwMjE1NjRDNDU3NjFFOUVCMEZGRjJCMzMyM0ZFNjdDNworOjEwRkY2MDAwMkYxMzM2NDBGQzZGQjRGOEM1RTk1REI0RkZBQzRBOUI3MworOjEwRkY3MDAwQTc5NThFM0ZGQkMxM0EwQkQ4RkQ5NUFBQjJBNzlFRjY3NgorOjEwRkY4MDAwQUJBNDc0RTE3N0UxM0E3NDdDNzJEODRDMkMzMENFNjEyQQorOjEwRkY5MDAwNTkyMDlEQjQzRDZCOTY5RTZGNkE5NkU5REI0NjdCRTRFMworOjEwRkZBMDAwNDg4QzkyNjJBMkVGN0YyQUQ4QzgwNjdBRERCMTdFRTkzQQorOjEwRkZCMDAwMTMzMERFMjcwRkRBQjBBRTkwQzBCNzcyNDEwRjEwMUVCQgorOjEwRkZDMDAwOUY5NDlGQjg4NzNFQUY1QjY3MjM5MDE3OTlDN0VERkQ1RAorOjEwRkZEMDAwNDFCOUE5MzhBRUM5NTE4REVGRDc3NkM0QTA1RjdDNzIwNAorOjEwRkZFMDAwRkQ5NUUzMDBGRkVENzE4REI3NDEzREY1MjdCMTRBMEQ1OQorOjEwRkZGMDAwRTBCNTZFRDVCNTI2ODg4RkI0NDc3NzRFODZGRTlGOUFCQQorOjAyMDAwMDAyMjAwMERDCis6MTAwMDAwMDA4ODZCNDMwNjZENEIwRjU5NjAzRTNERDQzRTgwNzhBQjA0Cis6MTAwMDEwMDAzNkNGREFGNjMwRkNDMzc3NzM1OTFDNzc5QTg5Mjg5QjYwCis6MTAwMDIwMDAyMkQ4MzUwRkU2RjZENjI3QThCNkIwRjkzRjlDMkJFMUNCCis6MTAwMDMwMDBGRDY5Njk3MTZEM0Y4MEVGNTBFQ0JCM0MxQzJFQjBFRTRBCis6MTAwMDQwMDBDOTJDMkVEQTlFRTRBOTE5NDJEQjI3MDRFMjVBOUUwMDRECis6MTAwMDUwMDA1N0Y5NDNFMDRGRjU3RTFCRDk4OEU4MjdEOERGM0E2QzgzCis6MTAwMDYwMDBFODUzMUQ2MUZFRkYzODNFQUY4RjYzRDlGM0UzRUU2OEJFCis6MTAwMDcwMDAzRkFDRjNCOEM0REFBQURCRTk0NzdBMzYyQkU5NzM2MkZFCis6MTAwMDgwMDBEODdBODQyQjYwMTcwNDlCREY5MTE4Qzk5QTg2RjgyMEQwCis6MTAwMDkwMDBEMjczNzQ1RTc1MEYzRjgyRjhERDRDRTEwM0ZDRDlFMzQ3Cis6MTAwMEEwMDA5MkRBNzZEMDc5OUNBNENBNUE4NUU3RUU0NzI3MDMzQ0JBCis6MTAwMEIwMDBFRkM4QTQ4NDlBNzgyMTlDRUVDRDhEQzNGOTlDNUNEN0JGCis6MTAwMEMwMDAxQTgzNzUyNjJFQTI1OEFGRTg4MzQ3NkRFNzk2QkI4NTQ1Cis6MTAwMEQwMDA3MUE4RTc1NTI2M0YxOEZGMDkyNDRDQkU1M0ZDNEVDQkIwCis6MTAwMEUwMDBGRkExQTUwRUQ2MUI0NTNBMDEyRkE2REQyQkVDMzBDRjg0Cis6MTAwMEYwMDA3OUI1MTZDQzhGMzk4OUFGMUNFNDY5RURDMzAyQjZFOTM2Cis6MTAwMTAwMDBDRjFBRDAxNzc1OUNCRkRBQTVCOEJENDBDN0M3QzExRUFFCis6MTAwMTEwMDA0NzdGRUZCMTNENTAxRjUwQ0JFNTU3RDUyMjNEOUQyRTc3Cis6MTAwMTIwMDA3NjlCNzVGQzMyQTM0OUNGM0Y3NDlEQkFGNkZBNUM1NkI0Cis6MTAwMTMwMDBEN0Q5RTNGRDI0MDFGNDczM0I1RDM2QzBFNUQzMzZDMTY2Cis6MTAwMTQwMDBCRjAxRTVBQjJGMjVCQ0JFMkUzNUQ3QTRDNUUxMjU0QjlECis6MTAwMTUwMDAxOEZDRUIyOEZERDU4MURFQjA5M0NFRDI0NDU4RjdBODI5Cis6MTAwMTYwMDAyOTQwRUZENjIzRDEzODRGMjM3Q0ZGRDVFMUYwNzFCMjdGCis6MTAwMTcwMDA1NDMzODRDRUU3NjM0QUM3NTBGRjczN0M3RDJCREEyRjVDCis6MTAwMTgwMDBGMDIzRUFGOERBRDUwNkY0QkQ4NENFRjI1MTE3RDJBN0VGCis6MTAwMTkwMDA3NUM2RDgzRTdBRDFFMDUzQkIyRTc1MkZGNDczN0YxRUZGCis6MTAwMUEwMDAyMzUxRTc4OUQ0QkEwQjk2ODIzREQ5NEI0NzA2RjhDMDU0Cis6MTAwMUIwMDA5QUNEREE3NzQ2RjREMTE5M0U4RjQwNjc5MzY4NUY2RTI3Cis6MTAwMUMwMDAxRjIzQkZENDk2RjVFNkY1NTIwNkFBNUY0NjdDMTcwMEJBCis6MTAwMUQwMDA1RUM3Q0Y4NzNDOTQyNkU3RDYxNkJGODE3NDcwQzY0NUFDCis6MTAwMUUwMDBGQzIyRjM2QkRGMDZCOTFGQzNFN0E2MTIzOTUwOUYwMDRDCis6MTAwMUYwMDBDQTg0RUE1RDE3REU0MzdGMzk5RUFGMzdCNjQ5NzhBRkQwCis6MTAwMjAwMDAyQzhCOTBCODI2RjFCRDMyN0EzM0I2MkMxODAwM0Q2MUE0Cis6MTAwMjEwMDA3MzczQkRCQjJERUZEN0EzQUY4MEREMEQwNEUzMzQ4MzMzCis6MTAwMjIwMDBBMjJCM0MwMTVDOEQyQjExRjcyOTU4NUM4OTYwRkYzQ0E3Cis6MTAwMjMwMDAyODA4NTUxMEI3MUY0NEY0NzY1NUJDMDExRTI0REI3Q0ZBCis6MTAwMjQwMDAyMkRDMkU4RkU2RjI3RUU5RTQxMTAyRkEzQkU1N0FGRjJBCis6MTAwMjUwMDBENDZDQjA4QjdFREU0QkQ3NkNGRDEyRkM0OUUxRDg0NkU2Cis6MTAwMjYwMDBGRDM3OTA1MzcxODFDRTRFQTBDRjFBNkFCN0ZBNzFGRDU3Cis6MTAwMjcwMDAxRUNDRUI1OENCMDRGMkE4RDAxN0JGRkE2N0M1MkYyRUJGCis6MTAwMjgwMDA4ODgzRjFGODQ1N0Y3MTMwMkQxRTUwQzk2RTUxN0Y0NzJDCis6MTAwMjkwMDA3MTQzREVBRkQyNERGRDlDNDE2MDY3RERFQzQ2QkZDOUM2Cis6MTAwMkEwMDA3RDEyRUQ1MjJCQjc0QkEzNDYyRDcyQjFGQzE5RTMxRjAzCis6MTAwMkIwMDAyRDFFNjBBNDJCNjM1Q0M5Qzg3RjQ2QkJGNEI3QjlEQ0I0Cis6MTAwMkMwMDA3RUJBODY1QzczMzlGMTAxMkQ4RUJGMkE5REY5M0RBQjU0Cis6MTAwMkQwMDBEMkVCOTY0M0ZEREEzOUVFRjdCODU0MTNFMjcxQ0UyQzI3Cis6MTAwMkUwMDAwMUYxQThEOTZCNzNCQ0E3NjcwMUZGNjlGNTA3MTdGMzg0Cis6MTAwMkYwMDA3QjNBMEM3RTQ4QjRGNzI5NTk4RUEwM0ZBRDc5MkMyRTVECis6MTAwMzAwMDBFNDI4NjRDRkU3RDg4OUQ5MUU5NjNGQjBFNTMxM0QzNzYwCis6MTAwMzEwMDA4N0VBNDEzQjVERTIzNEJFOEY2ODNBRDFFN0E3RTJGODU1Cis6MTAwMzIwMDAzOERBOTVGRTA0MzM3Mzc1RjU4MjcxNzlFQzNFRTY0MzU1Cis6MTAwMzMwMDA2RDNDMUY2QUU3RjU4MjI1MTk2Nzc3N0QwREY3NjU1NkQ1Cis6MTAwMzQwMDAwNzZDOTM2QjFGRkYxRTg1NDNGNEFDMTg4RjA5RTk1N0E4Cis6MTAwMzUwMDBEOUY4NDNGMDkzNjczOTUwREUyNkE0NEI1OEY3NUE5NUU1Cis6MTAwMzYwMDA2NEY3MjBFREFCRjJEQkUwOTdBMTlEMjlDMTk0NjU5NDgxCis6MTAwMzcwMDBCNzczMjlGRjA2NUMwM0Y4M0JGNjgxRTM2NjRFQ0RERkQ5Cis6MTAwMzgwMDAyOTY0NzRENTFCNUZGMjMxRjk2REEyQkY0MDRGQjNBQjQ2Cis6MTAwMzkwMDBGNEY0MzI1NzE5OTg3RTMyRjM3ODdDODlFRkUzMUExRDEyCis6MTAwM0EwMDAzQUJGRTM2QkE0MEJDNkJGNkI1MzU4M0VGQTVDMDVFRDM2Cis6MTAwM0IwMDAwM0Y5REI3RUVDNzFDREJGNzU1QUE4NUY0NEYxMTI5NDRFCis6MTAwM0MwMDA3NzIxQkQwN0QzODkyNTFDREZCRTQyNTE1N0RGMTBDQ0YyCis6MTAwM0QwMDAyN0QxMkVFQUY3MDQyRDI0Rjk0MURBNkY5MDNDRjcwNjc1Cis6MTAwM0UwMDAxN0Y4QkUyNUI2OTg1QUQ0MUI3RTlEN0Q3RjkwOEU3QkQ0Cis6MTAwM0YwMDBDQ0Q5RkYzQzhDNzRCRTdBRDQxMjhDRkYzRjcwM0QwNTgzCis6MTAwNDAwMDAxOTlERkY2QTQ4Mzg2M0ZEREU3M0YzQzE2RjdCMDBEQTI0Cis6MTAwNDEwMDA1ODVGRjA4QkY5NTA2RkY3NDA5NEQ2RUVGQUIxMUM1NjQ2Cis6MTAwNDIwMDA2RjcwRTc5Njk3N0ZBQzE2NTJCRkM2NEVGNTJEMURDRjY1Cis6MTAwNDMwMDAyMTExQ0M1MzExQjIwOUU1QjMwOEYxNDA5MENGNjNDMjRBCis6MTAwNDQwMDBFMDhCN0U4MzFFREU0NjNCNUUyQzY0NzExNEQxQzBGN0M4Cis6MTAwNDUwMDBDNkVGREU5Q0E3REY2RkQ3REZCQThERUZEMTlGQUE2QjA3Cis6MTAwNDYwMDBGNEY0N0Y3QkRFMDBGNUIyQzZGNzlENTAzRjExNzNGOUJGCis6MTAwNDcwMDA3NTA3NTQ5MDYyN0U1QTI0MjYwRkY4Q0JBNDk0RTBGN0I3Cis6MTAwNDgwMDAwNDE3QTMyQjkwMzBBMDA3MkQ4RDgzM0MwODM3REE4RUZDCis6MTAwNDkwMDAwMkJERTA3NzY4NzE1NTlDNzQxNEUwNUY4NDdDNjIwMDUzCis6MTAwNEEwMDBGNTM5OUQ0QTQ4MTgwMUZEQjVGQTAzODU3Q0VEQjg3NDBECis6MTAwNEIwMDBCOTQ3RTUzMThFMjM5NUIzRkNGMkJCMzIwOUMxRjc0NjRCCis6MTAwNEMwMDAzRkJBQ0U5NzBCRkVGQTExQUE2NzI1RDBFMzM3QUIxMERGCis6MTAwNEQwMDAyRjNCQkI4QzYwN0VDMEUxNTJCMDREM0YxNTZBNzU0MTI5Cis6MTAwNEUwMDBEQzhBQjU2QjI4OEM0MDJGREJEQ0ZBRkFENzFEQzU4RjcwCis6MTAwNEYwMDA5NjU4RTlGM0I2MzIxNjZGM0REODFDNzg3NzA1QTVCNTQ2Cis6MTAwNTAwMDBCNkMyMDI5NDk3MkJBMDYzRDg3QzgzM0JBM0FDMTA4NzIwCis6MTAwNTEwMDA1MUQ0RUZEQUMxNkVGRTY4OTk2ODg1NkI3MDc5QUQwQUM3Cis6MTAwNTIwMDA4QjdFMzc1MUREMjQ0ODEwNzc1MDA4RjhGOUQ2NjVBRDM5Cis6MTAwNTMwMDA5MzgxQUZERUI1QTg5RTM4MjdFNjU1MzE0RkRDQkU1QzBGCis6MTAwNTQwMDBCRDE1RkMxRTU5QUEyODRGQTU3Q0I0QTFERDhDRkI4Q0RGCis6MTAwNTUwMDA4RTk1RkUyRTQ5MEFFM0MzNTM1QzlFMUVEODExRjUwMDBBCis6MTAwNTYwMDBDMDYxOTU2MDBGNDVDMUQ1QTI2QzU4OUQwMERGQjM3QTdDCis6MTAwNTcwMDA1QUU4MTRERjZERjk0MTMyN0M2N0Q1RTI1NTlFOURGMDUzCis6MTAwNTgwMDBCQ0M1MDYzQjUwQzlBQUY1RjYyQTE4Nzc1NUYyMTJGN0YyCis6MTAwNTkwMDA5MkIwNzFFREMzQUM4RDcwM0YzOEI0MERFQjVBOTQ3MkNDCis6MTAwNUEwMDA4RjM1MkExNkQ2RjU0NTBDRTQ2N0RCOTc2NUM1MDMyRDE0Cis6MTAwNUIwMDBCNjI1NUE1M0VBQTFERjkyM0ZCRTk5MDc3ODk3NEM5ODI3Cis6MTAwNUMwMDBCN0I1QkEzQjJEQjBFRUUxNkU0NTg1RkNGODVGNzI5NDhECis6MTAwNUQwMDA1N0YzRTgzQ0U3MzUxRDlCOEM3NTczNjVCMTJCRTEzQTA5Cis6MTAwNUUwMDBGQ0ZDNzdEQTAxRkVFRkYyNzg0QzI4QjEwRUYzQjU2RDIyCis6MTAwNUYwMDA4QkVBRUQzMERGRTk4OTY5Q0JDM0UzMzE2RDg1OEJFREEzCis6MTAwNjAwMDBBM0U5N0I2OTZFNTNFREQyNDExN0QyNDcxQkM0NUZDNjg1Cis6MTAwNjEwMDBDM0JDRTg3QUM2NDJCRjNGMzQyQkI0NUYyOEQ5NUExNTExCis6MTAwNjIwMDA2OTlGRDZGMTNDRTZFRkQ5NUI5N0E2NDE1Q0E0NkRCRDBFCis6MTAwNjMwMDAxREQyMzNBNDRENTBENjQxN0U0MDRENzU0NkFDNjMxRjRDCis6MTAwNjQwMDBFQjY1RUZENTI4QUVDOTU2MDlGMTgzRkM3NjJBQUZFN0YyCis6MTAwNjUwMDBDN0VBNDhCMDJCMTlGRUVDNjY2MkI3ODRFOUJGQjEzOTJFCis6MTAwNjYwMDAyNTlGRTY4NUY5RDExNzdDMzdCMTBERjU0MTlCQzBGODgwCis6MTAwNjcwMDA3N0VDRDZDRjdGMENGNUMyQkZDQUYxN0QwRUVGQUQ2QTI1Cis6MTAwNjgwMDA1N0Q2MDFCQzg4NkEyNzgzOEFGQkU3OTNEMDZBOTI0MkQ3Cis6MTAwNjkwMDBBODNDNkU2QkIxNTU0NUFBNDMwQjJEMTJBNzAxOUY1MDg0Cis6MTAwNkEwMDAwRTNBMzYyODI1NEMyRTJGQUY0RjgzRjg0OEE4RTUyQTVFCis6MTAwNkIwMDBFNEVFREVGRUVCRUQxRjAyMUU0MkVCRDM2MzQxMUY4NjJDCis6MTAwNkMwMDA5MkVCRDJEMjgwNkUzOTVEMUFDN0RGOTRDN0VDQzk1RjU2Cis6MTAwNkQwMDA2N0Y5MkM1RUIwMkJDN0IwQkM2NzQ1OUVDRkU2NDVCRDIxCis6MTAwNkUwMDBEREU5MDYzQkY3MUI0MEI3MjkzMERGN0YyMkREQTI5RTA0Cis6MTAwNkYwMDAzQjlFNzcwQUU5OEFCODJFMkQxRkU5MjMyMTMzRTY1MzYyCis6MTAwNzAwMDA4QkZGOENGMURFOEVCMURBRkUyNzE2MUZENEVDREVBODRCCis6MTAwNzEwMDA1MTI3NTY4MERGRUFDQkQ3RjI1RDg1N0JDMDVGOUZBNjZECis6MTAwNzIwMDBFNTUzMkI1ODdDRDA0NTdGMjNDNTA3N0Q4NkY4RTAzNDAwCis6MTAwNzMwMDA0MzVCQjMzN0E3NzhCOTdEQzJFRERCMjRBOUQzNTcwQTUxCis6MTAwNzQwMDA3Mjc3QkZFODAxN0YyMjk5MzBCRDMyQTM0MkYwODM5RENBCis6MTAwNzUwMDBERDUyMUM2REM3NzlFN0YzMzgyN0Y3QkZFNkYxNzlCRkEzCis6MTAwNzYwMDBENzZDMjc5MDRGMzIzOTBBNTdDMkZDQTcxNUIwRjkzQjE2Cis6MTAwNzcwMDAxQTMyNzIwMjEyQzg3NzE2RTcyNjBEMzYwOUUzMjY4MDcwCis6MTAwNzgwMDBGQzQ0RDJFQkE3Rjk2MDEwQkE5RTc5MEQ0QkQxREVFRjk1Cis6MTAwNzkwMDA4MzVGMEI4QkYzMTBCRDNGRTEyMzA2RkY2MTExQjNDN0VECis6MTAwN0EwMDAzNDdGNkJCRUMxM0UzMERBRkJDNjM4NzU1RjVFNjA5MzQ2Cis6MTAwN0IwMDAxREU4RTlFQzk4Q0M4MzY5MTIzRTU2MDM1QTNFODBGNjU4Cis6MTAwN0MwMDA1QkU4RUQ1RTE5MEE5MzNGREQ1QzNGMUM2RTk2REY1QkQ0Cis6MTAwN0QwMDA0MUQ3QkZEMkY3MTMzQkQwNjk4N0Q5NkYwNzdERDI1MTdDCis6MTAwN0UwMDA3RTQ3MENEMDVGNDdCNTU4MEU3QzFGNkMyRUM3N0UwNzI2Cis6MTAwN0YwMDA5QTdENzg2REY2MzI3REIxMkY0N0JFREIxQjE2NzdBRTQyCis6MTAwODAwMDAyQzJGNzk2RjQ1NzhERDgzN0NGRDdCMkJDMkU2M0ZEREE1Cis6MTAwODEwMDAzQjQzRDdENkU4NkNCQTQ4MUEzNzQ1OTAyRkJGRjIzMjFGCis6MTAwODIwMDBGRTM3NTNCRDhGNzU4NkUyMkYzRDAzRDVERjUwN0ZGNTMwCis6MTAwODMwMDA2QzM4RkNENjc4RjVGNkVDN0Q2MzRBMDcwRjY0Qjc2ODMwCis6MTAwODQwMDBFQkQzRTBBMkFENUI3QkRFREYzQ0VGRkExQkU3RjlENDM0Cis6MTAwODUwMDA2NUNFRDMzODNGNkRERUZERjU5RjBFQzI4QUYyRkY1RDk3Cis6MTAwODYwMDA1QjRCQUFBMTJFNzY1RjhFRjIyQ0M4QTNDQTMyNjEyNUZCCis6MTAwODcwMDBFNDRCMEZGMzc4RTJFMUMyMThEQ0U3QkUyNzlERjk3Qjc5Cis6MTAwODgwMDBEMTBEOEM2RkEyQ0I2NjYwREVFRjcyRjE3QjkzOTdEOUFFCis6MTAwODkwMDA5NUIzMEEwNUJGNENGRjlDQzJGN0RCQkY5N0NFRjJCOUY4Cis6MTAwOEEwMDAyREM1M0Y3RjEzRjJEMEVGMTQ1OTU4QkM5N0M4RDNBNjdCCis6MTAwOEIwMDA4NkU1QjFENjVBRkQwMUM4MjdCREQ3NUJBNzcxQ0JDQTYzCis6MTAwOEMwMDBCQjY4M0I1QTkzMkI1NUZBQkNDM0FDNTlGQUZDRTE3NDk0Cis6MTAwOEQwMDA0MzlFMjFEQTIwNTc4MjFBREM3MzI5REM0N0Y0QzFCRDFDCis6MTAwOEUwMDAzRjdGQTIzRkZBMjBFNkQzRDlBMDg3OENGMEI5Q0QwMDk0Cis6MTAwOEYwMDAxRkEzRkYzMjdEOUI4MTFGMkVEMThGRDlEMDlFQkQwN0I0Cis6MTAwOTAwMDBGMjZBMkFCNTI3NDcwMUZFRTAxMTdEMkY1QTdFMTZEM0UxCis6MTAwOTEwMDAyMDUxRjk4QzFFNDc4NzRFQUQwMUJERDg0RDU1MDBFOERBCis6MTAwOTIwMDA5N0I1MzNFRjU4MDdFRDczNTRFRjAzNUVGQUZCOEVFNjhECis6MTAwOTMwMDBCRkZEMkE0NzNFRTM4RDUwM0ZEMDJCNDdDMDNFMTgwRkU2Cis6MTAwOTQwMDA3OUMxQzhGNjQxRjdBMjQ5NTMyM0RBMDczM0VCRDM3MkQyCis6MTAwOTUwMDA2MDVFMzNGNEY2NDFGN0ZBRjJDN0IzRTAzRUQ4MDdGNDJECis6MTAwOTYwMDBBNzNCQkY1RTY3MUY5MEYyQUM4QkMwODdDOUREQTg1MTYzCis6MTAwOTcwMDBEOTExRUJGNDdDMzk4QTJCM0Y2QzNEOEVGNDQ2MTI1RTI0Cis6MTAwOTgwMDBDRkY4NzlBRTFDOUI0RkRGOUZDMUUzMDhEQUY3QThGREQzCis6MTAwOTkwMDBCNURCMTJBMTdFNTFGQjVFQTY5N0M1M0Q0OTc5M0NEM0RDCis6MTAwOUEwMDAwRkZDN0EzMTNDNkE3NUQ0Rjc1OTY0M0NFRjQ1OEI3Qjc4Cis6MTAwOUIwMDA2OUZEM0NGOTRDQ0VCNkE3QzkwREYwOUMzODMzMkYzMkY3Cis6MTAwOUMwMDA2RThCMTZFNzQ4Q0ZCODgyRDcwRDRCQTRENzFGRkFCMzZBCis6MTAwOUQwMDAyMEUxRjMwOEZFMUU4MUJDNjQ3NEQyRTlERDJFREFFNTY1Cis6MTAwOUUwMDAxM0FGOTIwMzcwMjgzQUVENTcyMTFGNjJBQjEwRDA1RTBGCis6MTAwOUYwMDBCMjI1MTFCNDZCMkVENUJGQkFENDdFRUQ1MDFDMDBGRUNCCis6MTAwQTAwMDA1NjFEOEI5Nzk3NjQ5OEIxMURBRDg4MUI0MDJFNEMzQ0FBCis6MTAwQTEwMDAzRjU4MDBCOUUxNTNDNEE3NjBCRUQxRjIxNzlGRkQwNDRGCis6MTAwQTIwMDBGNDM1RDVGQjEwODdGMTkxNDZEQzY3RURCNEY4MzAzRTI0Cis6MTAwQTMwMDBEMTUxNDE0N0NFODAzOENDNzI0QjFBQzZEMzUzOUY4RENCCis6MTAwQTQwMDA3MUMzRDdGQ0VEMTAyRkI3NzlEODdFQTgyQUFGQkExMkEwCis6MTAwQTUwMDBDRUNEOTg1RTM0NEEyMEY0RjkzNDFGOEJERkNDODFGODc4Cis6MTAwQTYwMDAwRDhDM0JFQkY0MEU4OEZGQ0NGNjMyRjkwNTdFMUJFOENCCis6MTAwQTcwMDBDREI5RjU3NzhGRkQ5MUY0RDdDNDZERkNFREYxRDkxOEEwCis6MTAwQTgwMDA0RjkyMzA1RTYwODgwRkQ5MEFBNzYwN0M0OEFCNTNGMTYzCis6MTAwQTkwMDAxNThBQjhCRjlCMjQzOUYxMUMwQTYzN0NDNzE4Q0YzMTczCis6MTAwQUEwMDBDNjdCOENGMTlERUZFNkIzN0QxQTlBM0RENTk4QUY4RjRBCis6MTAwQUIwMDAxN0RFMEQ3QjEwNzJDMDVFQTJBMjkyRjI3NTg3ODUyNEFDCis6MTAwQUMwMDA3NzUyRkEzQzU4RjIyOUI5OTNDRUMzRjk0MzEzRDQ4MDM0Cis6MTAwQUQwMDBEMzdFN0EzQkVDNTJFNTU2OTBDQTk1OEY2MTIxQkI1RTdFCis6MTAwQUUwMDBCNzgwN0Y1QjJERDc2MjdDQ0Y0OEY3MEZFNUIzNzhERDA5Cis6MTAwQUYwMDA4QTdDQTcyRTFGMUM2QzZFRTJFRjQ3QTk4MEU3RUE5MTYzCis6MTAwQjAwMDA1NjdGNTQ2QURGMzg5N0NBMUY4RkU2Q0EwRkU0MzNCRjk3Cis6MTAwQjEwMDBBMjEzRTg5Qzc4MTREQzRGNTA5MUU3RDJEMTJENjkxQ0M4Cis6MTAwQjIwMDA0MjNFMEU4QkRGMThCRkFCQ0Q0NzFCRkY3MkU3NzEzRjE0Cis6MTAwQjMwMDA4N0Y3QTVGMkM5REFFMjAyQkI5NTdFRkYwQ0M1QjE4ODQyCis6MTAwQjQwMDBGQTkyMUFENDYxRjE2OTJEN0VBRUJENTcwMzc5ODMyQ0Q4Cis6MTAwQjUwMDBCMDIzMDVDQzFGNjhGN0MzRTJEODY2QTBEQkU4MjQ0NUM0Cis6MTAwQjYwMDA4RTc0REVENEExRkNERTNDMTVFNjMxQjVFRjEwNDE0MUI4Cis6MTAwQjcwMDBCOTUwQ0ZGMzM1REE3ODY2RTI2RTQxM0UwMERBRDZFNjU4Cis6MTAwQjgwMDAyNTQ2ODg5QjEzOEZERDQ2NDlBNjZFOEQ0ODIwRkVFM0RGCis6MTAwQjkwMDAyNDcyMjdDNDlGQURFRDE2NkMxM0I1NkEyRkQ4RTk4QjZDCis6MTAwQkEwMDAzODVGNTgwQkE3RUM4NUI4OUFDNjE3QzZCQzhENTU0QzU0Cis6MTAwQkIwMDA5QTAyQzNENjc3RUFGMzU3QzZGQzk0RDE5RUQ2RTJFQkVECis6MTAwQkMwMDA2NkZBMTE5OEQ3RkZEM0YwNDExNUI1Nzg2OUVCN0QwQTI1Cis6MTAwQkQwMDBEN0YzMEQ1REFGNDY1NzE1NTlERjc2NDNGRDQ5NUI5NDVBCis6MTAwQkUwMDBCMkFFOTZDRTRCN0REQzhFRjEwQTA3Q0MwRDYwMTJBMDIyCis6MTAwQkYwMDBCRjIwMjcxRkY3RkUwNEU0RUY1RkYyRDlGOTM3NkQwMjNCCis6MTAwQzAwMDBBQjQ3RDk5REY4ODc4NEYwRkQwQjdGRTFGQ0ZCNzRCRUY4Cis6MTAwQzEwMDBDNEUyMjI2NjEyODBGRDUyNjQ0QzAyRjI4NTU2N0Y3MjU1Cis6MTAwQzIwMDAzMDkxRDk4MUQzOEIxNjA3RUVBMEVENUZGMDdBQzk2QkI2Cis6MTAwQzMwMDA4QjM2NkFGOUZFNDEyNUI5MDQ0QjNGMDAyRTZCQURBQ0YzCis6MTAwQzQwMDAyRUVERTBENTY2QUMyNzIzRTJGRTlENzcyNEY0RDVFREFBCis6MTAwQzUwMDA1RUJCNDlFRjU3REU5OEFFQjcwNzhERjY5RkQ1RDA4RUI1Cis6MTAwQzYwMDAyQkUwNzJBREI3RkU0NEIxNjMxRDU5MjJBRjIzRTNGMzBECis6MTAwQzcwMDAzN0YyQzlDRjlBNTk1RUUzRTdCQ0VFRkY5NzdDRkZFNUY4Cis6MTAwQzgwMDA3RkYxRkFCRDREN0NGRkU1NzM3Q0RGQUMwNkY3RkIyQ0YyCis6MTAwQzkwMDAwQUM2QTM4RjVENEY2REJBRDhCRTM4RTBEQUUyN0JEREJECis6MTAwQ0EwMDBDMEM3RTMwQjU4N0M2OEIyRThEQzA5N0FBQTZGOUZDNTFECis6MTAwQ0IwMDBDMEU3ODQ1NTk2RUJGMzY2QjM3REZBQkNEOURDMkE3RDk4Cis6MTAwQ0MwMDBERUVDMEY1OUIyQTc2MDA4RUNDMzY4NTgwRUU3MTRDQ0VECis6MTAwQ0QwMDA1ODIxNjJCRTcyNkREQjE5RDRCM0U3MEFEMURBQkU1MDc3Cis6MTAwQ0UwMDAzRUYwN0QxOERBM0UwRUVEN0U2OTAxM0JCN0M4QjEzM0E4Cis6MTAwQ0YwMDBEMTAyRjVGODMzNTZDNDRFODFGODM5NzE2NTVFOTJGRDI0Cis6MTAwRDAwMDA3NjAzQzREQzYxM0VDQjVEMTYzODBGNjI0NjIwMTFFM0VBCis6MTAwRDEwMDBBMUI1RUQ5NzM3Q0VFQTUxNTc2MDlDQkEzN0NFNEZBRUFBCis6MTAwRDIwMDA1OTAwRUYxRkQyRTJGQzZBRkEwMjg4RjMxRkUyNzFGRTVCCis6MTAwRDMwMDBFQTgyNkIxRjA3RkZFOEU5N0M3OTI2QzA2MzU5QkU1QzM1Cis6MTAwRDQwMDA1OTkwMDNGNzk5NUNBMEVERDlFMTZERkFGMzVBQUNGRTI2Cis6MTAwRDUwMDBGQzg5NkE3OEFGQkY3OEJBMzg0OTY4OEM1NDJGQjJCODJBCis6MTAwRDYwMDBBMDM3Q0U1NTA3RUYxMzdCNkY5QzZCMTE2Qjc3RTIzRTdDCis6MTAwRDcwMDBCQjI2RkVEREQ2Rjc0ODAzOENEM0ZBMjI2OTc4MkU4MjkzCis6MTAwRDgwMDBEREZEOUQwMjQxMUJFRjE2OTgyRjcxNkJGQUNENzc1QjRECis6MTAwRDkwMDBBNEYxNDQ1QjZDMEFGOEZEQzc3ODdEOTk3MUJDQTYwMjhBCis6MTAwREEwMDBCNjFGOTM4RTc3MTdCRTlGRDQzQkJGMjYxQzlGOEZENzRECis6MTAwREIwMDBCNzdGQzYxNTAzNENFQkE4NTE0QzNEOTQ5RTQ4OUI4OEM5Cis6MTAwREMwMDA3NTI3OEUyRUQ3NTRBODRCMjI1MzQ2NjAxRENCQTFCMjU3Cis6MTAwREQwMDBDQTdGODlGRDM0ODdDQTdFRjM2RkI5OUZFNjM3MDVBOUJDCis6MTAwREUwMDA0ODA3MTdEQjRGRTM5ODQ5OTQ0ODcxOEQ5NzM4NURFRUJCCis6MTAwREYwMDAyQ0NDMUExQzFBMDA0RkQ2QTY3RDQxQjAzMzdBREI2Njg0Cis6MTAwRTAwMDA4NTQwREVDRkRBNzQwMEVGREYxN0U1QUE4OTY4NUY3MEVFCis6MTAwRTEwMDAzQTZEMkI1QkU0ODM5NEQwQUFFNDI5NjJCOEZERjJCQjVGCis6MTAwRTIwMDA2QzY1NEY0MTg0RkQ4OTY3NDY5RUREMDVBQTY5NjY5OTE4Cis6MTAwRTMwMDA2MDE2MTJEMERFRjYwODU0N0U2NjJGOUIyMUJBMjU0MjNBCis6MTAwRTQwMDBCQzhEMEY0RUJBOTIzRTlGOTU0NEZEQkJCMDc1MTczNEQyCis6MTAwRTUwMDAzQ0JCOEJCMjJCMjkyQzNCRDQ5QTQwRkJCRDk4QUIxQ0RFCis6MTAwRTYwMDA4MkYxOEJEREQyNkU2OENGRjI2NTYwRERGQjdEQjEwNDZGCis6MTAwRTcwMDBFREJDNjNBM0FDRkUwREE5MTdDRUZCMDQ5RjM3OTVDQjQ5Cis6MTAwRTgwMDBDQkNEOTcyMTk3REI5QUY1RjlFRjU1QzlBMzk3QzNGQzEyCis6MTAwRTkwMDA0Nzk3OTIxMDQ4RDgzNEY3RTkxMkM4RkY4RENENTE0RUNDCis6MTAwRUEwMDAwMDVGQTVCOTg5NkMxQjg3Rjc2NTEyOTZCRjMxOEUxQjUxCis6MTAwRUIwMDAzNTgxRTlEQkQxQTFBNEZCMjE5RTdDNTBGM0Y3OEIyRjc4Cis6MTAwRUMwMDBEQkRGRkYyMjFDREVDNkVCMzFDRERGNUYxOUQ5REYzRjUwCis6MTAwRUQwMDBCNjI4M0U3MjNFQTBBREJFMEVGMjAxQzc1NkVBRkRGRDM5Cis6MTAwRUUwMDA2M0VCREQzNUIwQ0ZFRjE4RjdGNzhGNERBNkZFRkU5ODE4Cis6MTAwRUYwMDBGRUYzMDFEQTNBQTkxQ0IyNEQwMEI5RDM5QjBGRTA3NjlDCis6MTAwRjAwMDAzQjhGNkJGQjcyRTQ2ODc4NEVGRDc5MDc1Q0VGQ0Q5MjA2Cis6MTAwRjEwMDA5RDEzRTBCOUVBNUE4MEZCOTE0OUU0N0RCMkU0MzE5NzMwCis6MTAwRjIwMDAwQzdFOEVCNkFGM0REM0FCMEM4MUY3QjVGREIyQTM0MUJECis6MTAwRjMwMDBCNEM1NDE1RUQ0NzU1QjI0N0E5NjI2MzA3RUY5RUJGMzE2Cis6MTAwRjQwMDBBNEJENzk0QzEzRUVBM0JFQzQzOEZEQTVGNjkzQkM5QjlCCis6MTAwRjUwMDA1ODNEOEU5OUQ1MTk0NjI1OTZCQTIxM0Y3NTZFOEMxRDQwCis6MTAwRjYwMDBGNTdCM0JGQzJGNENBRkE2MTQyOEI5MTM4Njg0OEY2MzA2Cis6MTAwRjcwMDAzODVGNTVCQUI0RUY2QTc1RkFBMEFGNDBCRjc0MTM1MjI4Cis6MTAwRjgwMDAwRUYyRTY4MUQ4NDY4QzdCOTQ3MUJDMUFBRkQ3NEQ3MEI3Cis6MTAwRjkwMDA3MTNERUI0QTAwNzhBNjE0RjhBNjIwREU5RkRGMjRFMTFECis6MTAwRkEwMDAzOUIwRkM3RTdGRjVGREM2NzkzQzYzRjU3RDgwRkJFQkI3Cis6MTAwRkIwMDA0QjQ1ODlENUU1MTFFNDhCQUJEMjVEQThBNzM1RkJBQkRBCis6MTAwRkMwMDA2RTQyMkEzQjU3ODE4NDQ2NUFFOTNBNUJFNTVEQ0UyQzU2Cis6MTAwRkQwMDBEQUVGQTNDN0NDMTlGMERBNEY2Mzg4MDVFNkVENEJBNzJCCis6MTAwRkUwMDA3MjhFQUVBM0Q0QUQwQzFGNDgzRUMyODk0NDI2MkY1QzNFCis6MTAwRkYwMDAwMzgyQzk4REQ3Nzg3NjU1MDVCODdGMDEzRjNFNzY3NjU2Cis6MTAxMDAwMDAwOEQ4RTMzRjdEOUNFNUE3QUU3QTdDOTFCRDJFNkNGQ0IxCis6MTAxMDEwMDA0NzI2NzBCOTk5QzRFNjVGMjMwQjdFMjkxNUU2NzMxQTNCCis6MTAxMDIwMDBGMzUwMzMyNDkzNDcyNjkwMzczRTc3NjQyRUM0MDlBOUEyCis6MTAxMDMwMDBGRDM2MEFEQjY3QjAxRDk0NEM1OTkwRDdGRUM4RkRFNTFDCis6MTAxMDQwMDAxMUU4N0ZENUY3MTc1RjgxRjRDRkUxQjE3MDU5RDYzMzNFCis6MTAxMDUwMDA2OEU3RTcyOERGMDNGQzA3MEJDRkM0OEMxODgzNzZGQzE2Cis6MTAxMDYwMDAzQUEwRkY4NTAyRjE0NUIyMTNFRUU3NzhCQjQxNkVCQ0IyCis6MTAxMDcwMDAwOUU4RUMwNkQ5NDY2MERGNUFCMEM0ODY3MEZGNjk5MTcyCis6MTAxMDgwMDAyMDgxREYzQTFENjgxRUUyMzk4Rjk5MzFERTRDRTE3MTEzCis6MTAxMDkwMDAwQjNDREZFRjcxRTBCOUQxQTVGMkIzNjY2OEZGNjFBQzNDCis6MTAxMEEwMDA0MEFFMUM0MDFGNUYzNjVDMEJDRjBDMDE3RUZDMDhFODk1Cis6MTAxMEIwMDAyRkMyRkNFQjM4RkY2QUZDNDRFMTVFOEFGMzkyNTlCRDEzCis6MTAxMEMwMDA0ODdGNzRGNTc5QkVCQzBFRThCMjNENEQ2OUMwNzMxMTFFCis6MTAxMEQwMDA1RDMzMkZFOTVDQzRFOTNGRjM2M0VEOUVFREU5QzZBMTAyCis6MTAxMEUwMDAyNDQyRkRENzQxQ0UyN0M2RkJGRjM5ODFGOTA1NEIzODk1Cis6MTAxMEYwMDA3RjVDRjVGOEQ5RkRENzAzNUYyRkIzQjgwMEFGNEZFNzlBCis6MTAxMTAwMDBGQjdFMDE3OEVCRjVCQkZFQ0U3MjY0QjI1ODhERjgwQjE2Cis6MTAxMTEwMDA1NkQwQjlFMzM5MEUyNDA2REFEMzQ2OUExMTdGNkEyOUVDCis6MTAxMTIwMDAzRkU3RTMyRUUyNkE4REM1QjdCMDZENUYyNjIwOUYzOTk5Cis6MTAxMTMwMDA5QzlENTU2MDM0OUJGMzFCOEZDQzg2Rjc0QTQ0RENEN0NCCis6MTAxMTQwMDAxRkI2Q0Y2NUMwM0FCMjEwREY3RkQ2MDZGQkNGQTgyRDAxCis6MTAxMTUwMDAxRjVDMjE2QUU3NkUxMTgxQ0FCNjYwOTk5OURCRjc5RjFGCis6MTAxMTYwMDAzRTJFRDMzRjlGRTFGNTk5MUYxNDg5NEY0MDdERTYxMTM0Cis6MTAxMTcwMDAxMzZCMUYyQTEyNTM5NkQzRUY4NDUyRDgzQzNBMUUxNDk1Cis6MTAxMTgwMDAzQzJEMTI1QzlGNUEwN0Y5Q0JGQTI2QzE1MzRFREIzNTMyCis6MTAxMTkwMDA4MTdCN0EyMEM0QjVFNDYxMUIwMTU3RTE5MzFGMkU5RDJBCis6MTAxMUEwMDAwMkVCMzlFMzI2NzhCRUVDREM0NEM2Mzc0QTkwRjg0REIyCis6MTAxMUIwMDBBOTdERkVFRDg3QzlDNEFGRTU0QjYxMUY5RDk3RUI5OUYzCis6MTAxMUMwMDA4NzYwMUYxQjlERjc3NUVBNzdENUJCMjE2RjRBRkQ1RUNGCis6MTAxMUQwMDA4OEFCQzU3OTU4M0UzMzNBNjhGNkY4MDlGOEJCQUMzRTlGCis6MTAxMUUwMDBCMkVEN0U4MTNDMDRFMzg4NkI1QUMxM0ZCN0YxN0FEREYyCis6MTAxMUYwMDA2OEI5MTZGREM3Mzg0QTlGMTI2OEQwOTA1OUI3OEZBREFECis6MTAxMjAwMDA5RTI4NDhCRkYxRTU5NDMzMzJFMEFBRjc4RkIzMkZCMjlFCis6MTAxMjEwMDA5RjZERUU4MjIxQjFDMDJGRTcyNkU4Rjc2NUY0MTc1RkQ2Cis6MTAxMjIwMDBEN0FFNzBERTBERTBBNzhCRTc1N0I3NTJCQjFERDZGQkRDCis6MTAxMjMwMDAyMkI1REJFMUJBOEREQUVENzAxRkNFQTk4NjJCRUM2NzAzCis6MTAxMjQwMDA4M0VCNEU2QUI3QzMxNUY2QjNDMTE1RjZCM0MxMTVGNkY1Cis6MTAxMjUwMDBCM0MxN0JCMDlGMERBRUIwOUYwREY3MUYxNkE5ODFDMTIyCis6MTAxMjYwMDAwMDlGOTI2ODAyRjlBMTM2MEJBMzMzMzVEOThBRkU0NjU2Cis6MTAxMjcwMDBBMDg4NjBGRTNFOTg2Q0REQjAxQ0UyNzUwMkMzOTMxQTM0Cis6MTAxMjgwMDBDQjlFMDc2Mzk0OUJCMTlEM0E4NkU1NzdDRDlFMTREODlCCis6MTAxMjkwMDA0N0I4NDIxODIzODFGREQ0NkU1NUIwN0VGOUQ4NzIzMzE5Cis6MTAxMkEwMDA4MUZBRTVEMDU0RTEwM0M4QkIxMEMxRTQxMUE5N0RCM0I0Cis6MTAxMkIwMDBGREVCREIxMEZFOEI2NTYyODJCQUY0RTU3MDZFMjhDODI4Cis6MTAxMkMwMDBFM0NGQzgwNjE2OUYwQjhBNzBCRTVDNkIwQ0UxNzU2NDk5Cis6MTAxMkQwMDAzN0Y5NjU0QTdGMjcwNUFEQkQ1NzAxN0Y3NDIyQzQwNEU1Cis6MTAxMkUwMDA5MDdFNzcyOUYwN0M3MTkzQzBEQkFGRkFFNTkxNTBEN0ZGCis6MTAxMkYwMDBBMDNEN0ZGMzQ5ODgyRkFFMzBCNEJCNERCQ0FEMEU3RjBGCis6MTAxMzAwMDAxMkM2M0JBMjdENEYxRDU2MDNFMzFENDlEMzlFMjcyRUQ3Cis6MTAxMzEwMDA4NEY2Qzc1MURBRkI5RjJGODRGNzgzQkRGMzM5ODlFMzQ1Cis6MTAxMzIwMDA4NTkyQjVGRTUyMERCNjdCRkRFNzA1MEFCNjg3QjBGRTg1Cis6MTAxMzMwMDBFQjc3RUU3QjBBRkNFNUJGRjc3OEFEOEE4QTcxN0M3NUE2Cis6MTAxMzQwMDAxNjIxMUI2MzIzRjBGRjQ0NTExRjBGOTUwNTVEM0M1NDhDCis6MTAxMzUwMDA4QkJGOUIxQ0Q1NTdFMkZFQjMwNzZDMjgxNzNGNEUyNjY4Cis6MTAxMzYwMDBFODg3RjQxNzE3MEQ4QkQ3NjM1Q0Y0RTcxM0ZCODk3RkNECis6MTAxMzcwMDAxMjg1QzBCODU1MTAwRkY0RTA1Nzk1RjBGRDY5NDQ2ODI4Cis6MTAxMzgwMDAyNDUwQTdFRTNCMTUyMzgxMUQ2OTREMEE4QkRGNzExOThGCis6MTAxMzkwMDAzMDUwQkNCMEI1OTFDNTA3ODM4QTg1QThBOTdENzVGRDdECis6MTAxM0EwMDBENjQyNUVEN0NGRTM4NTVBMUQ4M0I1RjA0N0JBQkM4MURDCis6MTAxM0IwMDAzMTVFNDhDNDVCMzAxRkVENUJBNDhGMDc0RTU3MkUyRjY0Cis6MTAxM0MwMDA1RTU4NEQwMjk2MkI4MUZFNjVDMTAzRkU3QkI1NEJGOTNECis6MTAxM0QwMDBGMDBBQjRGN0FGNjFFNzMzNEFBRjYxREM1NERCMzcwNjlDCis6MTAxM0UwMDA3N0UwRENBOTJBQkVFNjhFNUI4RjdENzAwNUVERTc1RkI2Cis6MTAxM0YwMDAxRTI1QzE2NkZDRjlCNzk0RTBGQkY5NzQ4NTEwREZBQURECis6MTAxNDAwMDAyRTRBNDM3OEU3N0NFNjc5NEQwMjc5RUEzNjc5OTg5OTU1Cis6MTAxNDEwMDBFNkZCN0UyMkQ4MEI4QjYyMzE2RkIyRTBDRThDMEY2MTdGCis6MTAxNDIwMDA5Q0M1QUEwM0RGQTM3NjI1QTdGN0FFMjc4MDlFNDQwOEI0Cis6MTAxNDMwMDA1Qzg2QjVCMzUzMzRGQTlCRkQwNEQwRkZDNDc4QUQxRDcwCis6MTAxNDQwMDBGREE0NUM0ODQ4ODk1NTdCM0YwN0RCRjMxNENFN0Y2QUQ3Cis6MTAxNDUwMDBGQTkzQzA3RjQ3NEEzNTdBN0RBMzA2OUVDRjFFRDEzQkMzCis6MTAxNDYwMDAxRUQyRjc0NDg3RDZCRTcxMjEzQzZGRUYxREFGMUVCRjYxCis6MTAxNDcwMDBGNzBFOUM2Qzg0RUQ0OTRGODIzRTJBOTlBMUU5QUJFM0JCCis6MTAxNDgwMDA0RkMwRjg2REQ1REFGQkEzRkQxMDhGOUE2RkQyRjg4N0E1Cis6MTAxNDkwMDBGODgxOUYxNUQyREI5NjQxMkZCRUNGRjlGRkM4QjY0RDFDCis6MTAxNEEwMDAzNTUwRDc3NTkzRjY1Q0REODRFQkFERTZFRDc3QjYyOTY0Cis6MTAxNEIwMDA0RjAyM0ZGRERCQUZFRjdGRjg3QkM2RjYwMjEyOUM3QzRDCis6MTAxNEMwMDA2NTc2MUY1RjE4RTVENTZCQzU0QzhFNzgxQjlFMDU3MjNGCis6MTAxNEQwMDAyNUQ1OEQ0RkUxRjk2RTEwMEY2MEY5QUNDNDU5M0U5MERGCis6MTAxNEUwMDAxNzc2RDE0MzM5ODNGOERDMkU4QzczMUFDNzU5NUNDNDQ0Cis6MTAxNEYwMDBFQ0VCNEYwQkY1NzlCMTM2NDM1RUNDQzdGMzUzRkQ4RDYyCis6MTAxNTAwMDBGMzI2OUY0RjdCNjk2NDNGNzY2QzRFRTk5Nzg1NTAzRjg5Cis6MTAxNTEwMDA0MDRFOEIzMDlFOEIwMjBDQ0UyNzZCQzk1MkJFODJGQjk1Cis6MTAxNTIwMDA5NDc1RjFEQzREMkFCMjNDNzA5RkZBQzUyQUQ4OTlEMzQ0Cis6MTAxNTMwMDAyODM4MjEwRkRCNTJGQzI4QzZFOTQzRjkxNkRENzkyMDUzCis6MTAxNTQwMDA1QTlFNzNBRDU1NDZGOUY4MDlBRkVCOTg1RjJBNEZCRTI2Cis6MTAxNTUwMDA4N0I2NkI4NzhBNjQwM0Q2NzkzODMxREY2MDFFNjY3RDczCis6MTAxNTYwMDAwQUU1M0FDRjdCNkFFNzcxNENCQkM4QkUwOEUzQkU5NDdDCis6MTAxNTcwMDBDRkY5N0FDRjE0NzY1ODQwM0VBQjQ0OUQ1Qzk2OERGMkZECis6MTAxNTgwMDAzQTA4RjVDNjI2QzcxQUNDMDNEQjhBMkQ5ODQ3RDBGMjU1Cis6MTAxNTkwMDBDRjBBM0ZGRjVCQ0JGQjRFM0MzRjk4RTlGNzc0MkRBRTgzCis6MTAxNUEwMDAzQjcwRkU1NzY5REFFMTQzRkJBMDUzMjQyNkUxQzI3QzdECis6MTAxNUIwMDBGMDYyOUY5QTBDRjUyQ0QzQ0E2MjcwQkY0MDU1RERFQkU4Cis6MTAxNUMwMDAzOEZFQTExNDgyRTcwNDQ3Q0Y2QUM0RkQ0MTY2NkExRjUyCis6MTAxNUQwMDBDQTAwMTc5RTJGRDZFQTYzODY5RkZGMEVFRTFCQURENzdCCis6MTAxNUUwMDBFQUNEQzU4QTAzNjBBN0RBMUVBMTdFMTY3NEUwRjk2MDExCis6MTAxNUYwMDAyRDVGM0NDMzIwRUYxNzE3NTZBMjlFMjVENDhFMUYxNUQyCis6MTAxNjAwMDAwQkRGMTk3OERGRjMwMzEzNTlGRUY4NDQyN0FCRTdGNzM0Cis6MTAxNjEwMDAxNkU5RjNDMEY3NTk1ODlDQUYzRDRENEY1NzFCMjczMjgxCis6MTAxNjIwMDA3RkY1MDc1QzlGRUUyQ0ZFNzkxNURBQ0ZDNEU0ODFCQzEwCis6MTAxNjMwMDAxODc5OEM5RDBCMDczMTE2REM2RjY1M0M4RjM5N0QwRTU4Cis6MTAxNjQwMDBEQTc1OEYwREE3NEJBNEI2QjZCOUU5N0Q4QzJCMEFFQkUyCis6MTAxNjUwMDBEODdCOUY4RDIzOERFMEI3OThDREFDNEQyRjJBRTRGRjJBCis6MTAxNjYwMDAzM0JEQ0FENDIyQThCMzY4RkExMEZCQjdBQUFDREVCQjVDCis6MTAxNjcwMDBCRkY4Q0RCQzIyNkQ5RjA4OEJERkNDNzdFRkVEODE3RDZECis6MTAxNjgwMDA2NTdGNzMxQ0M3QjBFRkQ1MjdCMUZBOTI5NTg1OTI5NjA2Cis6MTAxNjkwMDA0N0MwNzMwOTI5RTE1QUMwNUU0QzI5RjBENUMzQkNDOUMzCis6MTAxNkEwMDA5ODREMTJDQzQzOTMzNzNCNUVGOTc2MERDODFCMjI0NzA5Cis6MTAxNkIwMDBDRTRCNkI3Q0RGNjZDODRCRkJEQ0VDRkQzNzhCRUZBRUIzCis6MTAxNkMwMDA4MUYzMERGQUNCNDMzQzVDMjI2OEYxQjUzQjhBNjA1RTQ2Cis6MTAxNkQwMDAwOTVBREU0MEJFMTNEQUJEN0ExNDE2RTRENUU5RDE4NTg1Cis6MTAxNkUwMDAwREZGMEJGNDY4OUZEREZFNzYwRDhDRjc0RDlCM0ZBNTNCCis6MTAxNkYwMDBBQkZGNDJCQzk2QjNGOEQ5Mzc2REZFMTMyNkM4N0I2MEFBCis6MTAxNzAwMDBGRUZGRThFRjhDOTlFMDdCMEJCRUIzNUE5MEFCOUMyQ0FDCis6MTAxNzEwMDBCOUU3MTFGNDc5QkU3NzhCMDZDOEYzNUQyQ0ZFRjA3RjM0Cis6MTAxNzIwMDBGMTg2ODFFMzBENjJGMUJGNjZCQ0MxMEE3QkE4NzI5MEFECis6MTAxNzMwMDA4RkFFMkMwNkY5NUNDOEY4RThERjVERUVEMUY1RTZDMEE3Cis6MTAxNzQwMDA3QTU3MEI5QkZDRDEyM0ZFRkVGRTdFNEE4MTMyQTkxOEZDCis6MTAxNzUwMDBGNUEwNjJEQTQ5RTk2Nzc1ODk5REQ5MzMwMTA2REZERUI0Cis6MTAxNzYwMDA3ODA2Q0NERkFCOEI2NzNDRDlGMDBGODg2N0QwRjU1Njk1Cis6MTAxNzcwMDAyMjdFQ0JGOEY3QkZGOUY4QkIxNUUxMkIzMzdCRTJERjE0Cis6MTAxNzgwMDA5MDNFNTdFM0ZBMzZCMUY1RkQxM0JFQkYxRUU5RTU5NzZCCis6MTAxNzkwMDA4QzVFN0FFMUMzRURBNDMwRjgyQzZDRjhFN0MwRTc1NzEzCis6MTAxN0EwMDAwODlGQUQ2QzdFREYwMDdDRUU0Mjc4N0FEODdDMkZFNjE1Cis6MTAxN0IwMDA1RjFGMkQxNDM0QjlGQzA2QkU5N0NERThFMDQzQjBBRkVGCis6MTAxN0MwMDA5OURGM0RFOTRBQTlDRkVGN0UzNDU3M0U1MENDRUE2MzFBCis6MTAxN0QwMDA4MkM1QkFGQTRGRjkxMEI0MDdGMDhCOEZDMEYzMDg3RUI4Cis6MTAxN0UwMDBGMUZCQzVERjQwQkZEODU5QzRFMEQ2OTc3N0YxQjM3MzlBCis6MTAxN0YwMDA2RjQ5RDUwRDU3RDNFRjdDNDhFMTBERjFCNjhFMjYxMTE4Cis6MTAxODAwMDBFRDhCNzM0OTA0Q0YwM0QwRUM4RDUwMkNBQkRGQkI3MDU0Cis6MTAxODEwMDAzRjU4MTk4MUZEODhCNjdDNzZDRTg4NzYzRTgwNTlBQ0RCCis6MTAxODIwMDAxRTFDOTAyRTg0RUI4MTQxOEExNUVBQkM5NkM4MTk2RDY2Cis6MTAxODMwMDBCMEJGNzVEMjlBMkY3MERGOTU1NUI2RTFCRkFCMzlEQ0RBCis6MTAxODQwMDBFREIxREMwOTdFMzRGNTczQUY4Mzc4NkE4MzBCRjdEMTkxCis6MTAxODUwMDA2OUZCQ0FCNEZEMUY0QjAyRjNGNkMyM0VEQjBFNEEwRjEyCis6MTAxODYwMDA4OUY0M0JEM0NCMkNDN0MzRDc2RkI0MzdDQzg2QjZGMTQyCis6MTAxODcwMDBERjM1NEQ5OEE4QUYwN0E0RjA0N0ZCRTdEQzNBNTYxRkM5Cis6MTAxODgwMDBENzYxMjYzQkExRkVBMzVFMTVGRDJEQjRCRDcxOEQ4MEYxCis6MTAxODkwMDBFNzcxMkVBMjcwMDI3RjdGNTI2NzJBRDY5MzVCOTNEODlFCis6MTAxOEEwMDA3OTY3REFCRjdCNEFFOUEwMzMxRkVDQkYyMzIyQzE3RkVGCis6MTAxOEIwMDBDNzhFRUYyN0QzQ0VGOThFOUE3QTFBQ0ZEQkZBOThBRTdECis6MTAxOEMwMDAxRkNFRUZEMUNFOTk5OEMxRTk0NDgzNjc1NDRCM0NDMkY3Cis6MTAxOEQwMDBFNTFDODUwQjAxQjhGMEZEMzZEMzlBNTgzRUI4QUQ3QUI5Cis6MTAxOEUwMDA3MTEwQzhCQkE2RjA4QjE1OTFFQTUyRTZCOEY1RTdBNUQyCis6MTAxOEYwMDAxQkUzMTlDNkYzQzZDREM0MzcxOEY2RDU0RDJGMkM1MUFFCis6MTAxOTAwMDBDMTVFQjVGMTdBQ0Q2ODIyRTNCOTE2MUZBRkY5MDkzQjg0Cis6MTAxOTEwMDBEN0EyQ0NBMjNCNDdDNEY4REQ2ODAzOUREQTBDNzEwNzVGCis6MTAxOTIwMDAyMzlEMUFGMTcyOUQwMTJGMUJDREVDOUNDMUI2NkVEMTg3Cis6MTAxOTMwMDBBM0QyREI2RDBGMkY2QTg3N0RGOUVBQzMyNjU2Mzc0Rjk2Cis6MTAxOTQwMDA2NDNDRjdBOThENUFCQ0I4RkY5QzRFMTZFMkY1NzMzOTdBCis6MTAxOTUwMDAzQzM1QkMxMEQyNjgwMTdFQUJENkY2QTE5QjFBNTdDMkFCCis6MTAxOTYwMDA3RUQyNzk3QzFGRkE0RDY0MTNFRTMzNTgwMDE2MDRGREM1Cis6MTAxOTcwMDBFRTQyMDg5MThCNzBBRThDNjQ2NUNFODE4QkMwM0NFQUUwCis6MTAxOTgwMDBBQkQ4MzkxOTI2NTgwM0U0MDkxRTM2MjFCRkI2Qjk3N0ZBCis6MTAxOTkwMDBFMkJGRkIxNTE4NkE4OTNEOTlDRUZDODk0OEY2NkM2RjQ5Cis6MTAxOUEwMDA1QzgxNDJFMjY0NTgxQ0ZGRkZFMjU3N0Y1QkZDMkFCNzcwCis6MTAxOUIwMDA4ODlENDdENTE2MTU3MEU1QTdCMkYzMjZBMDlFMjlCN0Q2Cis6MTAxOUMwMDA0ODQyMzkxOEI0MjgyOUI4REY2MUZEQTcyQUQwODFCNjZBCis6MTAxOUQwMDBERjgxRkUyQ0JCNDI3RjZFQzJGQTg5MDNGODdGNDU0NTRBCis6MTAxOUUwMDAwNEM3NkI0QjBEMjU4MzVDRkJCMDlGQkFDQUVERTAzODkyCis6MTAxOUYwMDAzMDNEQjQ2MTIyRTZERkE5RkQ5QjBENzI4RkQ5QkYxNTgyCis6MTAxQTAwMDA3OUJFQTdGMTNFREZFN0FDQzU5MTNFRjEyQUZGMzkzMTNGCis6MTAxQTEwMDAwN0Y2RTcxMDk0QzNCNjBBQzEwRkZCNzdBNjNCODUzREQ2Cis6MTAxQTIwMDA4MkQ0Rjc3RDYyQUM2M0ZGNUY5QUI3QkE5M0ZCNkRDMTU2Cis6MTAxQTMwMDAyODgyRTcyMDA1NTM0OUQ1NzMxMUYwRjE4MzUyMTZBNzg4Cis6MTAxQTQwMDAwQzY2NDRDNjk3RjY5Q0RBMTlFRjRDQ0M2MUZFRDAyMEE4Cis6MTAxQTUwMDA0NjE0QTdBQ0ZBRjhDMDA3MDNEMTg3ODZDN0Y4QzlGMkM1Cis6MTAxQTYwMDA0NzEzNzNGQURBMEZFNDI5OUY0MEJCNTVGMTdEMDA3OEU0Cis6MTAxQTcwMDAzREE5OEExMkU4MTUxMjUwRjAzQ0JGNjlGRjIxQkEwMDU3Cis6MTAxQTgwMDA4RUZGRTgzQ0RDQ0FDMkQ0NEJDQUMzNTUwMzlEMEQ1MDNGCis6MTAxQTkwMDAyRjc4QjlEN0ZGMEZGOTYxM0Q2QjAwODAwMDAwMDAwMDdGCis6MTAxQUEwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkVEN0QwRDc4NTRENTYxCis6MTAxQUIwMDA5OUYwQjk3M0VGRkMyNDk5ODQwOTA0MUMyNEMwMEQwMjI5Cis6MTAxQUMwMDA0NjFCREM4MTgwMjQ0MEUwQ0U0QzEyMTI0ODYwRjgzNTgxCis6MTAxQUQwMDAwMkUyODUwMDhENURCNDUxNzkxNDU4QkFCOTIxMTAyMDA1Cis6MTAxQUUwMDBBMjYwQkZCNEI1RUFBMzQzMTBEQ0RERkFENEQ0NzVBRDZGCis6MTAxQUYwMDA4OEFFMjNBMkE1NURENEE4QTFDNjU1NjkxMEU0QjNBREY0Cis6MTAxQjAwMDBFRDg3MEE2QkVCQTdGNTdCREZGNzlDM0I3M0VGNjRDMkI1Cis6MTAxQjEwMDA5RkIxNEI5RkZEQzJBMzM3RTc5RUJGRjdCQ0U3RkQzRkQ4Cis6MTAxQjIwMDBFRkI5MzlFQTY0OEM0RDgyRkY4Q0MyNjU1QTAxNjMyRDhFCis6MTAxQjMwMDA1OEJFOUNFMThGQzZBMEJDQjhCRkE1OUMwQjREM0I3OTlECis6MTAxQjQwMDBGQkQxREFGRjg5MUEyMzE5RDM5OUU4MkZEQUJGMjNGMUUxCis6MTAxQjUwMDBGNjQ3ODMwM0EyODY5N0IxNDVBMjFFQ0EzQTk2Q0RGRUU4Cis6MTAxQjYwMDA4QzI5Nzk0MTA1RkFENzQ5NjY3OTk3QTY1OEU3Q0JEQUU3Cis6MTAxQjcwMDBBNUMxN0MyNzlDRjZGMTk3ODhGMThBQjQyRjY5RkM0OEFGCis6MTAxQjgwMDA3Q0ZFMkZBMzFBOTQ4RjI3QzE3RjAzRTNFNTUyRURDRjhDCis6MTAxQjkwMDBENDdFNjVCQ0ZEOUY3NTVDRUY0OUM5MkM4RkQyQjFGRjI3Cis6MTAxQkEwMDAxMTk3RDlGRjhBNjUzOEZGM0Q3OUJDN0U2QTY4NTRENEE1Cis6MTAxQkIwMDBCODA0RTFGOUE2QzdCRkQwRjY0N0E3QTg4QzBEMDQ3Q0VFCis6MTAxQkMwMDBENEZEMkM3QzE5RkNCQUE0N0U5N0FDNDNCRkEzQ0VDODJECis6MTAxQkQwMDA3QjJDMDdDOEVDNUU0OUREMDM3RDhBNThCQkNDNjQwMkQwCis6MTAxQkUwMDBEQjI1OEY4NzIxMzQ4OUI1QzA1QzJCNDJGMEJGMDk4MDhCCis6MTAxQkYwMDA0N0FGODNDRjYzMDRBMjFBRDBEOUUyQTkyNjlERDY0NDY5Cis6MTAxQzAwMDA3MURFREVFOEVFOURFMDc3MUZDMjc1MjdFMEZFRUU1MjQyCis6MTAxQzEwMDAxQkRDQzZBODY1REE5NDA0RENFMTEwQjQ4N0YxMTZERjlBCis6MTAxQzIwMDA3MjkzMUZFMTVDM0NDMjVDREYyNDlBQTczOURCRUNEN0RFCis6MTAxQzMwMDA3REQ2Nzk1RjdCQTE5NEYwQkQzODNFNEYyNUI1NUY5QzgyCis6MTAxQzQwMDA2RThFMzcyNzhBRjMyNkUwNUE0OEZCOTE4MDZCQTgwREU5Cis6MTAxQzUwMDA5RjgxRDA0MkMyNjdDNDE3REQzQzA4RjAxM0YxQjM4MDA2Cis6MTAxQzYwMDAwMUY4NUM1NEQ3MjhFQjA1MTYzRTMyQzIyQUYxOTEzRkE5Cis6MTAxQzcwMDA1RThFREFGOUE4ODBGOEE4QUZFMTFBMzYyOUIyNEQ4MzUyCis6MTAxQzgwMDA3RDYyRjlFRDZBNjRDQzM3QjFFRTk4RjMzMjVDQjcyMTJFCis6MTAxQzkwMDBEMUJBNEQzQTVBRTJCM0QwQkIwN0Q2QUQ5QUU1MkI5N0VECis6MTAxQ0EwMDBENTc5RkI2MkRFOEUzMjlBRjcyM0MwMzc0QkYwMTMzM0JGCis6MTAxQ0IwMDAwNjJGRDNCQzE3M0U1RTkzNzdCOTBCRTE1RUE1NDk1QTU4Cis6MTAxQ0MwMDAxNERBN0Y4NTNGRDMxMkNGQTM1MzI0RTIxN0MwRTdCRkI2Cis6MTAxQ0QwMDAxMjNFOEIwMDlGOTlGODlFMTExRjNDNUUxOEY5QjkwNkMxCis6MTAxQ0UwMDBGNTRDRDUxRDA3MDAyRTk3RTY2MTJEODA4M0FBODk5MUJBCis6MTAxQ0YwMDA3REQ0OUVFREY0MjNGRTAxMDAxQUE3Rjk3NUE2MjA5RjVFCis6MTAxRDAwMDAwMTZGMDUxQzkzQTFFQzY0MzVFRDI5RTZGRDYxQzg0MTI2Cis6MTAxRDEwMDBFRDlCMThBQjY4MDdGOEM2NkZGNEFEOEE3ODEzRjVCRTczCis6MTAxRDIwMDAzMjBFNTc5Njc4MUVDOUVDQkU2MTIwQ0NERjBENTUxQkQ0Cis6MTAxRDMwMDA2MUZDMjYwMzk4MTc5RTFGRDQ0OTUxMDlENkZDNDE2RUI5Cis6MTAxRDQwMDA2NDU2MzE5NDNCRjIxQzgxOEQzMDdEQzczQUY3RDAzNTEzCis6MTAxRDUwMDBEMEJFMkJDRjFCNDBFOEJBQjI3NzY2RkE2MEZDMEYwMjA4Cis6MTAxRDYwMDBCMkMwRDc0REVGMjM1RjFGQzk4Q0YzOTM4MUZBQTU0MzBGCis6MTAxRDcwMDBFMEY3RDc1QTcxMUJGMkQzREIyQTJGM0Y1MEZBRjdFRjY3Cis6MTAxRDgwMDAxQjA1NDg2RkNDQzcwNjAxMUVCMDA3RjBBQTIzNjM4QTYzCis6MTAxRDkwMDBDNzBERjNCQUNBNDE5QzYwNUYxRkQzNUQ1MEVGQzY3QThFCis6MTAxREEwMDA1OEUyOUMxRkVDRkVDMTNDOTVFNEM2Q0IyM0FGNjVBQzZBCis6MTAxREIwMDAwNkRGQUJEODVGMzFCQTNEMzRBRkYyOTU0NDRGRTZCQzk1Cis6MTAxREMwMDAzNjMxQUVBQkI1RTlBNTI2ODA5RkY5NjUxNjQyREVGMjQ1Cis6MTAxREQwMDBGM0Y2N0VENkRERjg5NTAzQzc4NzcyM0U0MzEyN0NFMUE5Cis6MTAxREUwMDAyQjU4QkYyNENBRjhGMzE1MkNEMUNCMjIxNTc5MDg1N0VDCis6MTAxREYwMDAzRTBCQjRDMDdDNzM3NEU3ODk3ODNEN0Y2QzU3QUUxNTk5Cis6MTAxRTAwMDA3MDIyM0NGMjg2OEE2Mjc4QTZEN0Q5REJDRENDODdCMjI1Cis6MTAxRTEwMDAyNzUxOUVEMTVBMUI0MkJDQ0ZEMEEwREI1OEM2MEVCNzZCCis6MTAxRTIwMDBENkM2NkEwMUNFQzM0NTZFOUYwNDk4NzZFNTJBQjZGNkZCCis6MTAxRTMwMDAzMzU5RkIyNkM0M0I1MzBGMUQ5NDAxMkY0QkM1N0M0RERBCis6MTAxRTQwMDBCRTM5RUYzMUU4QjcyQTFGNEFCMEZFMjNGRjEwQ0M5QzAxCis6MTAxRTUwMDA5MDgzRkMyNjA3MUNBMjhEQzNDNDA3QTM3NjRFMDc5NzY4Cis6MTAxRTYwMDBEMzAxMDlEQTM3M0Q2M0VFREJDNDM2RTQwMzM5NDNCMjBDCis6MTAxRTcwMDA5NTgzMkVCMzdFNEMxQkYyRTE5MUI4NUMxREI5MUNDQjRGCis6MTAxRTgwMDAwQkFFMzBGOTI2QjMwREY5NkE1QTg2NTk3NjJENDczRUM2Cis6MTAxRTkwMDBFQTU2OUM0MjlFMEQ2QzQzM0FEOTZBOEU2N0VDMjBGOTUzCis6MTAxRUEwMDBGMjE2MzNFQjFENTQxRjg5Q0JCRkYyNUQ1ODVFRTgxMzY5Cis6MTAxRUIwMDBGMDE4REYyNzc5RDhBNDcxN0Q3MkQ1MEJCMTZFRTMyMkJCCis6MTAxRUMwMDBEQTAzN0Y1RTE5NDQ3RThCNzA3OTk3NUMzRkE5MzNEQTIxCis6MTAxRUQwMDA5NDg1N0MwN0Y4MTlBNUY2RTRCN0Y1NDE5OUY4MjhBMjhFCis6MTAxRUUwMDA3RDJDRTNGRTk1RDYwM0NFNjBGRkMyMzU1MkU3MDRBNEY1Cis6MTAxRUYwMDA0Rjg1MEQ0NUJFNkY2RTAwOUQzRTBBQ0EyRkE2QjlENDEwCis6MTAxRjAwMDA0Qzk0RUJCRTcyMkQwNUZGRkUzQ0M4Rjk3NzUyRDA5Qjc2Cis6MTAxRjEwMDA3MzEyNzE1N0M4MEE5MUVFOUExQkQ2OUFGRDBEREM1RkI5Cis6MTAxRjIwMDA3REE0MkI5QTk2RDdGQjM4QUY4NTFEMjQ2NzNBMjRERjEyCis6MTAxRjMwMDA3Q0FFOUY2NTg2RkEzOTc4RUYxNURFNjI5NjY4Rjc1OEIxCis6MTAxRjQwMDA5OEVCRTVDNjQyNkQ3QTEwRTY5RDA1RTI5N0MxMUUzNjE0Cis6MTAxRjUwMDA0RUJEM0YxMjgyNzk0RTE0M0IwMzZFRTIzM0VEMERFNDI5Cis6MTAxRjYwMDBCM0I5ODI4Njc2QjgzNEI2MEVFNTQ2QjFEQkI3MTE2NUYzCis6MTAxRjcwMDBCNzVDRTA1QzBCNjU2NTA4RjAyQjk2MkIzODdERUJGMEM5Cis6MTAxRjgwMDBFRkFCMTEzOEFFOTJBMDdGODA2M0NFNUEzQjNGMjhDQzk2Cis6MTAxRjkwMDA0MkRGNTBCRjI4OTg5OTczRjI1QjUwQjg5QTVEOERFQjgxCis6MTAxRkEwMDBCRkNCRTk1QjhBNzI2Q0VCMDhERjJENTY3OUY2Njg5ODM3Cis6MTAxRkIwMDBDQkIxQTg1OEVGODFBOUZGNTI4M0Y4Rjk5NDM5MDIyOEQwCis6MTAxRkMwMDAzRkY2QTY0NzQ4OUUxRENCNjJBQzBENzVCRUM2NTRERkRBCis6MTAxRkQwMDAyMEU0NkJCRTBFMjk3RjIxQzNGNjBGMEU4NzI1MEMwNjY5Cis6MTAxRkUwMDAzOEQ2QkVEMzUxNUEwOEVGRUZFM0ZEM0VCQzg2RDUzMzU5Cis6MTAxRkYwMDA3Q0FGRjAzMjNDMEM2MzJDQjYzQjRBRURFRTBDOEVBMDZECis6MTAyMDAwMDA3OUQ5NDMwMThGMDc2OTFGOUFFMzdFN0I1OUJCMTM5RkUwCis6MTAyMDEwMDA4RThDNjc4N0VBMjlGNkM3N0NCMkQ1Q0U4RkUyNzg0MEVFCis6MTAyMDIwMDA1RTAyNEQ4OEVCOTY5OEVFRjgwQUQ3MkZFNDNGRDBFOTkwCis6MTAyMDMwMDAwNkRDMUY5MEZBQTQ0NzI2N0Q3OENBNDY2RkUzODIyQTAxCis6MTAyMDQwMDBDMTkxNEM3N0QwQUY4OUZBQ0QzN0ZCMzFBNzZFQjFEN0FDCis6MTAyMDUwMDBENzA3N0YxNDZEMUM0OUZBNjgxQkI1RjM4MjNFQ0FCMURECis6MTAyMDYwMDBFOUEzQkI4MjI5RjREMUM4NEFFRDZFRkU5RTk3QTFGRjc5Cis6MTAyMDcwMDBCREJERjRGRjVGQTlGQTQzRkIxRkQyN0I4RjRFRjhBQUM4Cis6MTAyMDgwMDA5QUE4RkQwOENCRTM4Nzk5RjIwNDFBMTY4MUZDMTg2MDIwCis6MTAyMDkwMDBDQThGRjQxQkVCQTY1OEU0OEYzMUUxNjE5NDM3RDdFQjdDCis6MTAyMEEwMDA5MkE4Q0Y3Rjk4RjQ0RUM4RUNGRkFCQTU3Njc5QjRFMDQ4Cis6MTAyMEIwMDA2MUJCM0M5QTc5MjNENjI3RTQ0RkVENDM3NkY5MTM3RTMyCis6MTAyMEMwMDAxOEU1NDU3MDhFRDA2QkVDRkQ4NzcwRkNFNjI1NjZGRjQ5Cis6MTAyMEQwMDBEMUQxMjBEQTI1MEU1MzFFQjIyOEYyQTFDRUUyNjU5QkEzCis6MTAyMEUwMDAxRDc5RTREOUY2QTVBOEU3NENCRjg5MTlFRDBGMjEzQzZECis6MTAyMEYwMDBBNjlGRjFENkIzRkFDM0E4MTc0MTJFQjJFMzI2MUY4Q0QwCis6MTAyMTAwMDBFOEM5RUZBNjFDMzBFOUM3QjQwRjVGN0IzMUFBMUJEMDJBCis6MTAyMTEwMDA2RTZFODUxNkIzRUU0QkRDQ0VFQ0U2NzY0RkMyQkVGQzlGCis6MTAyMTIwMDBERkRDRkVFRTdCRkJGMTc1OUFCRjgwRDNEQjM3MzBGRTQwCis6MTAyMTMwMDA3QkQ2RjE0RDdCMEFERTc3MTNGRDg5Rjc5NzlBM0YwNzJGCis6MTAyMTQwMDBGMDlEMjZGOEM2NzNGODJFQTJGRjE3QjRFRTAwRDc1MzAxCis6MTAyMTUwMDA3RjA1NzhEMzQzMTYzRkUwMTJDNEU3QjA0QjFDQkU3MTM1Cis6MTAyMTYwMDAyMURDRUYyQUJFREY4RjY5Q0M5NEUzMTMwOEVFMUU3NEU2Cis6MTAyMTcwMDA3MERFRjQ1RjQyRTM5NkYyNzU1QkM2RDVBQ0YzRjVFNjJDCis6MTAyMTgwMDBBRjQzQkIzMjdCQkIzOEZGNTQxMDVDNjJEQ0IzRjRBRkFGCis6MTAyMTkwMDBCNkI3OEJGNzhGODQyQ0Y0RDkwNzdDQkVDOEJBQkZERkUzCis6MTAyMUEwMDA4MDFDNTk0NUUzOEZFNEUzQ0Y0QkUwRjEyNkVCRkJGRkM2Cis6MTAyMUIwMDAxRjM3M0IyNzlERUYyMDdBQUFFN0Y0NzQxRUY2RjYwRjJGCis6MTAyMUMwMDAxMEJGREJBNDc2M0Q4QkUyNDQ4Njg5RjdGQjcwMUM3ODU4Cis6MTAyMUQwMDBERkVEODJGNzMxQjExRjhGMTQ0NzFFQzBGNjU4RjQ4RjIwCis6MTAyMUUwMDBCM0Y4MjdDNkRDNUQwODVGQzIzRjgxODEwQTJDRkE5RUU2Cis6MTAyMUYwMDA1REI3MEJENzYzRUFGQjI3NDI4Qjc2MTk0MDI3NzI5OEFECis6MTAyMjAwMDBCNzdGRjRDMENCQ0I3MEZEQzk2NUIwNEJGRTk5RjYzRkVDCis6MTAyMjEwMDAwN0VDOTIzMTY0OTdGQzBCQzI3NUFFNzEwMUZFNzZDMjc5Cis6MTAyMjIwMDBDM0QzOUM2RTUyRDQzRjQ5RTMzRUM2RUJCN0JBQjgxRDQ4Cis6MTAyMjMwMDBGQkQ2OTI0RkM5OEVEMzZFNTUxRDY4Qzc5OTdBRkRGOUFBCis6MTAyMjQwMDAxMEI3NjdDMTFFQTk4ODdBN0JEQThEQ0Y4Qjc4MUE4QzdDCis6MTAyMjUwMDBGQjNDQ0REQkNFRjFERjE5OTEzM0QxREU0Q0Q4MkQzMUYzCis6MTAyMjYwMDBGMjgzMTI3NkQ1MEFBMkEzQjg1REM1QkU0REU1QTk2Mjc4Cis6MTAyMjcwMDA5RkRGMDg3RDY3OTk4MEY3NTcxQzBGNjIzREU3NkVERjhGCis6MTAyMjgwMDA0MTcwRjg3OUZCMTRGNTlEMzQ1RTJFODc5Mzc5MEY5RDhDCis6MTAyMjkwMDA0MEJGOTVFODk1RkY4Qzc0NDA3OTk1MjgwNDlEMEI0QUMyCis6MTAyMkEwMDA3MkMwNkUzOUQwMkFBOTQ4MjYyQkVGMzNGN0Y5NzZFMkFGCis6MTAyMkIwMDA4QkI4REQyNkY4RjA3QTQxQzc5Rjg0RDZEMzNFNUU3Rjg3Cis6MTAyMkMwMDBEQUU0RkZGREQ0N0U3Q0RDNEY1RDRGRjBCRjJERTIxM0RFCis6MTAyMkQwMDBERjBCQUYzN0UxRkI5MEUwNTMzOTdDREZDMEY4QTcwOTkzCis6MTAyMkUwMDAzRjhDRTNBNzg2MTk0RUI0Q0JEMEFGRENDMzdBRUVFRkI4Cis6MTAyMkYwMDAxNzIyOEUwM0ZERkUyRkY1RjM3MEI4NkE3NDg5RUNGNzkwCis6MTAyMzAwMDBDODhBNjM0RUE0RjdBNTlENEM0QjQ1MUY3MkQ4NjVGNjRECis6MTAyMzEwMDA5N0MzNjQ5NzBCRkYzNkMwRTM0MkM5RUREM0MyNzE3QTBECis6MTAyMzIwMDA0QUEzRjYzRTNFREY4NkUyNDgwNjk2QTdFOEFGODcwNzU3Cis6MTAyMzMwMDBGMUFERjFBMDNEMUEyOTk1QTIyRDc5RThERjc4Q0I0QUJECis6MTAyMzQwMDBBMTNDQzdDMUJBQzlFRjYzNkMzM0M2N0RERENGMkFBQ0VGCis6MTAyMzUwMDAyNTQwQUQ1NUM1MTJENzAxMkVGRDM1RkE5MTBCQzQzRTZGCis6MTAyMzYwMDBDRjYxRjFGODhBMDNFMzM1OTZGODBERjk4MUVFRjA5RDFGCis6MTAyMzcwMDBGOUFEMkFDNTVEMjg2RUUzRjJDQkU0NTcwNEVGNUU0MTY4Cis6MTAyMzgwMDBGMTkxRjQyMkI3Q0Y4REYzQzhCOUU0RTdCQTFFMTBGMThBCis6MTAyMzkwMDBBMkY5RENCRjc0QzAzRkI0QTNEM0Q3MzJGMkRGNjY2REJECis6MTAyM0EwMDA5N0EyMkFENEJCMzU3QkZDQTU3NkMzQTkyNkYyRUY1NkFCCis6MTAyM0IwMDAzMDlGMDY3RUEyNTI2NEFGNzcyNUY5QUY4RDg1N0EwMEYzCis6MTAyM0MwMDBGMTcyRjJCRTVBMDdFMjIzNThDOUZEQjA5M0Y3NURFMUZFCis6MTAyM0QwMDA0NUZFNEJGNkEzNEZBMjFGNEQ1MkFBODcxRjZEQUNDM0ZCCis6MTAyM0UwMDBGODlBQzU4RjVFRDM4NzdFNzQzODZDRjdBMzg3MTU0NzNDCis6MTAyM0YwMDBDQUMyNDhFNzhBNDZGMkVEQzBENDQ5NzNDOTVGREUyRUVGCis6MTAyNDAwMDAzMzM3QjQzRkRFM0FGRUQ1MjIyODFCREI5NTAwODYxQjBFCis6MTAyNDEwMDAzRTcwNkE0QkIxREUwMDdGNUExRTQ2REJDNDMwQkUzNUNCCis6MTAyNDIwMDA1QkMwN0ZCQ0Y4NTQyOUMyQUZERDNFMkM4MEY0N0VGQzNCCis6MTAyNDMwMDA2RTM3RTFGOUY4Q0FFQzY4MDY4Qzk3QjVGREIzNEQ2OUMzCis6MTAyNDQwMDBEMEZGRTVFODEwMENCMkM1RkRFQjY0M0YxQ0RDMjcwM0IwCis6MTAyNDUwMDBFOUU2MzgxQkNBNUE3MDFGMTQxRkMzNzE5NUZBQUM4MDg1Cis6MTAyNDYwMDAxMTQ4RjhEQkIzRjM3RDA2OEVBNzQ3MzMxOEVFN0JFQ0ZCCis6MTAyNDcwMDA5NzRDM0E5OUNGRThDODAxRTk3ODBFNTM5RDU4OThDNzEwCis6MTAyNDgwMDAzNDI3RTI3RjAxRDNBOTdDMURGMDlCNzQwNUNFOTc2RkEyCis6MTAyNDkwMDAxMDFEMDBERjYxRkM2RTdEQTE3RTEzRTFFMzQxNEUxRjQ0Cis6MTAyNEEwMDBFQzFFNjUxNzlFNTcxQzM3RUVDRDQ0M0VEQjlCNkU4RkFFCis6MTAyNEIwMDAzNzk4Q0YzNTIyREVFMDQxM0Y3RjRDOUZGQUY5RUIwODk5Cis6MTAyNEMwMDAxRTIxMjdDRTQzQUUzNEYwRkRFNEZDN0ExQUZEREY4MUY1Cis6MTAyNEQwMDBBNDI3RUI5MENGM0I0NDFDRjg5RTZDMUUzRjY5MEQ3MzA0Cis6MTAyNEUwMDBCOTkyRkMwNDg2Q0ZDMUZFMTdBQTI3NDA1RkVFMDhEQjM1Cis6MTAyNEYwMDBGREY4OUQ1ODNFMEY3REY5NDM5MjMzNEZGMjc1MzY4N0I0Cis6MTAyNTAwMDA5OTI5N0Y3RTFDRTY3NjgwOUE0NUYxMTQxMEM1RDdGMjkyCis6MTAyNTEwMDBGREM1OUZDRjI1RkQ2MTFDNUY3QjRDQTJGRDRBNTMxOTcxCis6MTAyNTIwMDBDOTIxMzc4QkM0MzgzMTE5NjIzRDZDQzMyMDdCQkZCREQ0Cis6MTAyNTMwMDA2N0VCNzc2MzkwQ0ZGRjQxOTFGRTEzNkM1NzcyMEEyOEM3Cis6MTAyNTQwMDAxNERBQjlBQjc4MUM3Q0I2NTc3QTQ5NTIxM0VEOEU2MDE5Cis6MTAyNTUwMDAxQzJBNTVEQzVGQzg1MTY4MTY3MzgwQkRCMjIzMEJGNjg4Cis6MTAyNTYwMDAwMEUzREI0QUEwMUZDQUVCQjcxQUI0QTM2OEMzMUQ2OTE2Cis6MTAyNTcwMDBBOEEwNjc5NzUyNEZGMkEzRUIzRTM5REEwODVENUY2RDcyCis6MTAyNTgwMDA2MDFEQTVBMzdBOEU1QkIzMjQ3OEY0ODQ0NTFFQ0QyRUZFCis6MTAyNTkwMDA3QkM0MDM0MjkxMzVFNUI3MUQ5MjMwNUVBRkI5NTUzNzI0Cis6MTAyNUEwMDBGNEVGQzg4Q0RDODNGMTdBRTM3NTk5RUQwMTc4MTdDRUVFCis6MTAyNUIwMDBBRjNDN0FDMjIyMUY5MkM3ODVGOTk4MDEyQ0ZCNTY5ODJFCis6MTAyNUMwMDBDNzMxNUYwQ0JBNjNEMzAwOUUxNTg2MTQ0NTc5QjBDMjNCCis6MTAyNUQwMDAzOEU2QzQ3OEU1RDJCNUNCOTgwRUZCRTQyQTNBQTZFMEZCCis6MTAyNUUwMDA3RTk2MDc3REI0Q0VEOTQ1MzIzMzJDNzBERDdGQURENkQzCis6MTAyNUYwMDAxMUU2RjE5RDM3Njg3RjAzNzEzQkVBNEQyQzA3OUQ1QTI4Cis6MTAyNjAwMDA5NkFGMjAxMTg3MzRDRjA1MUUwQkVGMjY3QkI0MjM5QjlBCis6MTAyNjEwMDBEMUZDMTEzRjhCMzZBMkZDRDI5NkI5QkFGMTlDQzUxRkYyCis6MTAyNjIwMDBBMUI4RTlFMUIwNEFGM0FFNkNERDQ1RjBBNDRGRjk5OEVBCis6MTAyNjMwMDBFMDAxREIzOUU2RThERjEzREYyNjFGQkMyRUYwREUyQ0RECis6MTAyNjQwMDBGMERFMUI5RTNGMDlGMzc4OUU1OTlFNURBNjY0MjI5RTk0Cis6MTAyNjUwMDBERjUwNTQzQUU3RTg4REJGRTc5NkRBRjdDN0VEQUZCMDQxCis6MTAyNjYwMDA5NTlCQjREQjFENDg0RjI3NUJFNTI4RUUxMzNDNUZDMTBCCis6MTAyNjcwMDA3RDNCMERGQkM2RjIxMkUzNzQ2NEIyMUFBQjdFMzZGN0YzCis6MTAyNjgwMDA2NzRBQTk0QzcwOTlGQkIzNzQzQkRGOUZBNURCODM4NDM5Cis6MTAyNjkwMDA5N0E1QTU5NUFFQzFGQzVDQUQxRDY4OUJFOTQ1Q0IxODFGCis6MTAyNkEwMDBFMkM1QTUxRDUzNTA4RUY1QjY1RkMwNkZFRTUyOEJGRDhGCis6MTAyNkIwMDA3ODExRjFGMzdFQTUxNkJCRjY5QjhFRUZDMzdDNDM2OUMwCis6MTAyNkMwMDBCRTI0M0JGQkFGNzVCRTYwRDI1MzI3Q0FENTgyODQ1QzYzCis6MTAyNkQwMDAyRDJCRTVGQTIwRjk2OUNBNTU4QjNENDk3MTREMEIxQzJDCis6MTAyNkUwMDBDQkVCMkUwMjBFOTM0RjkwNEY1MTZFODQ3NzRBQ0VFRTc1Cis6MTAyNkYwMDAwMkRDN0ZFMEQ3MzE2ODlGRkQ3NkYzNjUzOUM4Mzc4Q0ZGCis6MTAyNzAwMDBFOEMxNTFDQUY5QzYzNTY1OEUwQkZEQTY5NUY3N0RBQ0JCCis6MTAyNzEwMDBBMEJFMDI3QzRFMjc3QzBBMzkzQ0I2OTQ5OTdBNjgwNkEyCis6MTAyNzIwMDBEMTQ1MURBNzhCRkZFRTczMUQ4MDY3MDlDMUI5ODRDMzE2Cis6MTAyNzMwMDA3OUE5OUQzQjdEQTczQTUyNUY0QUU3NDAyMDk3QkMxODk0Cis6MTAyNzQwMDA4RkY3ODlGRDY3NDM3OURDRkJDMkNFMzczRjY4QkQ5REJCCis6MTAyNzUwMDBBMTFEMzhFNzBGOTkyQURBODE4QjhBRjc2ODc5NkFDQTRFCis6MTAyNzYwMDBGMzRENTVCMjlENkZENjg2MThGOTE1OEM4NTA2QjM3MzU3Cis6MTAyNzcwMDA5RTZGMjY5RjlGRjYzQ0VGMzQ1RTZBQ0E0OUQ4RERDOTNBCis6MTAyNzgwMDBFNzlEQzlFNzlBQUM5N0YzQ0Y5RUU3OUQyRjU2MTUwM0I3Cis6MTAyNzkwMDA5QzMzMDJCMjRGNTUxM0U3OTlBRTI5MjdERjY1RDdGNDcyCis6MTAyN0EwMDAzQ0VGRkMxMkQ2MjNGMDk5QzMyQ0VCRUQxQUFBQjZDNzY2Cis6MTAyN0IwMDAwMEJFOTZDMTlFNDAxQjZGQ0VFNDZCMTM3ODA0M0RFMEQzCis6MTAyN0MwMDA3MUMzM0M5QkNBMDA3RUI0OTdGM0RBN0UzMDhGRDlGMDk4Cis6MTAyN0QwMDBFODIyM0M1QzIwMUVFOTdDMUJGMUQyMkE0NTM3NjI3RjRGCis6MTAyN0UwMDBBNURFNDA3OUJFOTJGOUQ0RkIwMzg5RkQ4QzhGOTc3RkRCCis6MTAyN0YwMDA4Nzg2RjJGOTFGNkFCRENDMDFGQ0JGMzlFNzM2QjYwQ0ZCCis6MTAyODAwMDBEQUE3MUY0RTYzMzJCNDNGQUNERTQ2RkI3REY4QTM0QzIzCis6MTAyODEwMDAxNUNGN0JERDdFQ0IzRTA4NUMyQTI2N0M3MjRGM0ZFOURDCis6MTAyODIwMDBBRkIwOEYxRTY0QjkxRUZCQThCNjk1QTI5RTNEREZGRDFBCis6MTAyODMwMDA3QkE0Mzg3MjA0RjlEODAzRkE1QTE5OTc3OERGMzU5NEQzCis6MTAyODQwMDBFM0IzRkIyQTE2NkQ5MzdBRUUyM0UwNUIyM0JGMzM5RjNECis6MTAyODUwMDBFRERBNDhGNUY1MENFMzAzOUIyNEM2RjE5RDQ0MTc4RTkxCis6MTAyODYwMDA4QzBEMDY5RTZCQkI5NjdCQzk4RjZBQUFBRjI3N0NCRjc3Cis6MTAyODcwMDAwRUY4MzY3QzlDQkZGMDlDRUEyQ0ZDNjVEMjA1OTMwNkQyCis6MTAyODgwMDA5RDNGNUQyNEVGRkJFMUQ2NUFCNkY2RDJERUQ3NUVGODY3Cis6MTAyODkwMDA3Mzc3MjlEQTNERTdCQkFGNTU5M0I1N0U2NTEzQUNGQjgzCis6MTAyOEEwMDBBQzY1OTcwREI0RjJBRDIxRjI1MjBDREE0NzYzM0U2MzhBCis6MTAyOEIwMDA3QkIyN0JEQTUxOTc4QkJDMTQxODZGMzBGNjFGNTJDNjZGCis6MTAyOEMwMDA0NDFDNTAxQjgyRTU3OUMzNTk3REFBQkMxN0U3NzRFRUZFCis6MTAyOEQwMDBDNzJDMDExMzlDRTIyQTQ2M0FEQjMzMUVCREFDOURFRkE4Cis6MTAyOEUwMDAwRDQyQkZDRUI4NEFDNTMyNTMwRjQ1OTFBRTZBRjkxMkI4Cis6MTAyOEYwMDBEODkxMURCQkJBQjA3RTM2MkNENjkxNDNBRjU0ODcwNTE0Cis6MTAyOTAwMDAzRjgxQjIzQzFBQjc3OEY1QjE1NzU0QUEwRUQwRjgyRUQxCis6MTAyOTEwMDAxMEZFRThBNzJFQzE5Nzk0NEZDMkEyN0I0ODBFRTg2QzI4Cis6MTAyOTIwMDAyRUM4RkIxQkQ2NDhFRjYxQkIxQTIzODNBMTVGOUJDODRGCis6MTAyOTMwMDBBQjc4MzQyOUFGODI5NzY3RTc4QTdBRTNERkRBNkNFNzBFCis6MTAyOTQwMDA5OEM2MEI0OUZBRURBRDM2QUIzRkM1OEM2M0E0REY2QzdFCis6MTAyOTUwMDBGNjg1NDU5RjFENzlFOUY3Q0IwREVCMzlBNkYxMzE4RDUxCis6MTAyOTYwMDA3Rjc0ODkzOTVGRDE2RUZCMzlFNjk3MzRCRTE5QTc2NjRCCis6MTAyOTcwMDBFQzMzMkEyRjg5OTczRjI3RkQ2QUM2OTFGRjU0MzZCMTYxCis6MTAyOTgwMDA5NkM3NERGNUI5QjhGRjcyNThBQTQ3RkIwODE0OEMyNkI0Cis6MTAyOTkwMDA1MUJDQzZENzg2RkUzNEQ4RkZGM0IwRkU2RjdEOUQ2MDc0Cis6MTAyOUEwMDA4N0RDNUM2NjM5RkZGODVCODNGRkI4MTlERjM3MEUyRkQxCis6MTAyOUIwMDBENzBBMkU3RDc4MDFERjBGMTBCRTJCMzhCRUZGMDZFMDUwCis6MTAyOUMwMDBGRDU5NTk4QTczODA0QjA4QkU5NzA4QkVGODM5QzQ3RkY5Cis6MTAyOUQwMDAzQjNDNkY5NTU5RkNDRjZGN0FCRUM5OTNCNTEzNDg0RkY2Cis6MTAyOUUwMDBERkMwM0E0RTk1NTlGMjBGQ0VBM0ZEN0Y1MTdCNzE1RTQ5Cis6MTAyOUYwMDA5QTVDN0Y3M0I5OEZDN0IxQzQzOUYxREJGMTczQkNBQzlBCis6MTAyQTAwMDA1QTFDQUYzQjcxQUU0N0U3NUU4OTczQzRFMTU3MDQ0Nzc4Cis6MTAyQTEwMDA1QUUxMUZCRTFCREI5QkU3ODg1M0NCRjM2QTI5MkZCQTExCis6MTAyQTIwMDA5NzczNEMwREVCMTU2QjdGOTVGQUI3MjRDREU3MTJGNTM0Cis6MTAyQTMwMDBGM0NCQkY1NTZCRDhGMDczMzVCNUVGNDg2QTVGMjNENjNCCis6MTAyQTQwMDBCN0JDN0NEQzZFQzM4MjBGRjAzOEE5N0Q1QzJFQjE4OUU3Cis6MTAyQTUwMDBCNUY2NzNDNzA5QjVENjczQzdENUU1MTM3NzlCRTdGRkZFCis6MTAyQTYwMDBFNTg4MUY3MTRFRkIzRjFEMUZDMTcyRTE2RjhBRjM3MjMzCis6MTAyQTcwMDA5MzBFODc0REQyNDJFNTEzMkUzRDc4NjFGRjE2OTY1QjhCCis6MTAyQTgwMDBFOEZGQUYzMERGOEE3MjRCREVDNTg1RjY4RkYzQTNEMDQ3Cis6MTAyQTkwMDBGQjY2RkUwNEUwRjcxNjVDQzdDREQzNTVDMjdGNzJCRTVECis6MTAyQUEwMDA4NEU5Mjc0NkJBNTkxNEZEOTZDOTJDMkFFM0I5NDQyNDZGCis6MTAyQUIwMDBBMDMzOEM4M0M2RjlEQUQwNkEyOTVFMTdCRjFGNTFCMUUzCis6MTAyQUMwMDBEQjdFM0ZBMjcxMzdEQTE3MDlGREZENTRBRDNEQ0ZBMTgyCis6MTAyQUQwMDBEQzA2Rjc4RTk3OUYzMkQ3REQ1NDZFQzk2N0U4RUJGMUJECis6MTAyQUUwMDA1NzRGQjdFMzI1NUUxNkY4NTk3Q0NCOEY4N0RBRUY1RjM3Cis6MTAyQUYwMDA0NDc2RDMzOTQ2RkNGRUM1MjI5QTM3OTFERkYxRUREREVECis6MTAyQjAwMDBGNkZDOEUzNTU0NEVFQzU3NDNEMjdFN0RDRjA2RDcxNzU4Cis6MTAyQjEwMDBFNTBEMDQ5NzRCRTRCREI5NTY0OEJERENBRkI4OUVFNDYzCis6MTAyQjIwMDA4Mjc5QUUwQjY1OUI1Q0EwRjIzNzAwRDc0MTkzOEUwNDhGCis6MTAyQjMwMDA5RkM2RTFFQzkxOUZCNzZDMzdDNjk5RkE3QTdFOEI1Q0ExCis6MTAyQjQwMDA3ODA5RTlBMkVGRjFDRUVGNzc5ODc4RUZFRDdFQzdGNTNGCis6MTAyQjUwMDBBQTU5RkU2RTZENURDMUQ3OUYxN0YzRkZDQTUzRTYxRkRBCis6MTAyQjYwMDA1REVDM0FGODdEMTE1N0YyN0QxMUI2QUVENjJFN0ZDRUQwCis6MTAyQjcwMDAxQkJFRDNBOUU1Q0ZGOUY1RkZCMjc3RjlGMzE3OTQzRjYwCis6MTAyQjgwMDA0RDVFMDdERDQ3RDFGRDJDRTU3RDk0OUJBN0YzNzNBOTJFCis6MTAyQjkwMDAzODdGOEFGQjI4RjM3NkE0RjZBN0ZGN0UzQThGNUY5QkU3Cis6MTAyQkEwMDBGMUVFQTBFQkQ0MEFFQjc5RDcwMDUxRUY5QjFFQ0YxQkJGCis6MTAyQkIwMDBGMDREQzc3MUQ3NzJGODg2QTEzQ0M0RjMxRUE2MzAwRDQ0Cis6MTAyQkMwMDA3ODZBRkVCQ0ExQjkwODVGRDM3RkYyRjE5ODFGRkNFNERDCis6MTAyQkQwMDBDQ0M0Nzg5M0M1NzhFNjNDMkZDQ0M5QUNCMUU2MzVFNERCCis6MTAyQkUwMDA5QUYzNEM5N0NDRjhGNEIwRTk4OENGMEQ3QzFENzJCRkY2Cis6MTAyQkYwMDBENTc0Q0YyQkVFNTcxQkFEMjRCRjlBOURBNjlGRkRFMDQ5Cis6MTAyQzAwMDA2RTkyNjc3MTM5RjQ2M0EyOEIwNTZFOTNGRUEzQkJBRDIwCis6MTAyQzEwMDA3MUUzQjI1RkVDRTY3QTE1OEE3ODhFOTdFODc3NUYyRERDCis6MTAyQzIwMDBGOTc5RTdFODU3NjhFMjc5OTNEODJGMjNCRTVGRTMxMTdCCis6MTAyQzMwMDBFRTczRjVCN0Y4RDEzMTI5MjdFMTQ3M0Y1RUE4NEQ0MTQyCis6MTAyQzQwMDAzQzgzM0Y1RDcyM0VFMzAwOUVDMkI0MkY2QkVDRkU4ODc2Cis6MTAyQzUwMDBBNTdFRkE3NDVCNUVEMkE5RDU2N0NCNEI5QTNCRkRFQzlGCis6MTAyQzYwMDA3OTQ5NzMxM0Y0MzA3N0JBQ0RBRTBGNjc0RUMwMzhDOUM3Cis6MTAyQzcwMDA2MDQ3Q0E3QjE0QkFEOEQ3NDQ3RUQ3NEY2OUJGOUE0REY0Cis6MTAyQzgwMDBCRTEzRTU3QkIyNzlGRDBEQkY3OEJDNTZDMDdGRTM3NEZGCis6MTAyQzkwMDBDQkY5ODU3OURFQzIwQTBFQzUzMENFNjNDOTJGRDIxQ0FFCis6MTAyQ0EwMDBENkI4NEZGODk4MTNDNzVCQkE1RDRBOTkzRkQzODM1Rjk0Cis6MTAyQ0IwMDBCNjhBRjFCN0M3RjdGMUU2RTkzQzFFQUQ2M0RDRjE3QUZECis6MTAyQ0MwMDA3M0RDNkYzN0QyQjgzNTJCRjhCOEM5N0M3M0E3ODg1MzNCCis6MTAyQ0QwMDBERDk5QTBFMzNCNjkxQzJEOUU2RkIzMEVDQjk4MzJFMENCCis6MTAyQ0UwMDAxRTk3MThERkJDREYxMzc0NDY5RUMzNzM5RDY2NDM1MjY0Cis6MTAyQ0YwMDA1MUJFRUE2Qjk3RDFCOTIyQUI2MDZDMTRFQzUzNzBGMDAzCis6MTAyRDAwMDA4OEVEMjgzQUNDRjk4NjU3RjBGRDgyNUY0QkIxOUQxRkM0Cis6MTAyRDEwMDAyNEE0MzExOEYzQzQ5N0QxQjlGM0I1MUFDRjVCOTk1OEVECis6MTAyRDIwMDBENTI4MEY1NDI5QUZBNTA1RjdBRDc4RkVBRTI2NUNGNjgxCis6MTAyRDMwMDA3NTRCN0UyNkE3Q0E2N0U5ODhFN0IzQjAzNzQ2MEUwMjBGCis6MTAyRDQwMDBGRTE2RjBFMUJEOTAzNTMwQ0ZEQkYxN0M5NkFBQjIzQkE4Cis6MTAyRDUwMDBBQ0Y5MkM5MUFGOTdDRjYyQzZGRjE2ODcwMEFGOTY3RDc2Cis6MTAyRDYwMDBDQkFFRTA3OENEQUVFMDc4NEQ5QzAzMzMzQUJGMURDREJECis6MTAyRDcwMDA2QTY2NUM4NUYxNjVCQ0I3MDVBRjNCQzQzREI3MzNCOTQ2Cis6MTAyRDgwMDAyQzhBRTdGRjhENTNEMzI5OEVENzlEQ0RFODVDMTUzNjZECis6MTAyRDkwMDAyNEFCRkE1QUNDMjNFMTNGNjlBMzRBMjk4RUVCODY3NTBFCis6MTAyREEwMDBFMTNBRjA1QzM2NzYyNTBDMkYyRkU5MTc0QjQxQ0ZBRjc3Cis6MTAyREIwMDA2NkU5MkNFMEM1QjhCRkIxOTkwMUREODRGNTdCRTk3Q0ZCCis6MTAyREMwMDA2RUY4OEE4RkVCNzBERUE1QkE1QjQ1MTJCOEJFQ0U1NzlGCis6MTAyREQwMDA0Njc5NUNBQjAzQ0UzQjMwMEVFOTk3OTk4NkYxRUMyQTNECis6MTAyREUwMDBFN0ZCRkM5Q0M2NDM3ODlBNURDQUNCMjY1RURDNEM3OTM3Cis6MTAyREYwMDBERjhBMTcyNUE5QkNGNkREQzYyRDA3MkRFRDVEQjFCNDIwCis6MTAyRTAwMDA0QzNDMTc3QzY5QkFDODA3MTJGNzhBOThFQzI1M0EzODA3Cis6MTAyRTEwMDBFMzc3NDRGMTFDQUE0MzYxMDcxNDgwQTM1Njk3RTlGQ0E5Cis6MTAyRTIwMDA3RENGRjY1QjVGQzFGQjYzNEJGRDRBQzAwMUVCMENBRjhFCis6MTAyRTMwMDA5NTI4RkZFQjdBMUZDN0QzNjcwREM2OTY4MzYwQzNBNjlDCis6MTAyRTQwMDAwRDFFNDFFNzMwNjc3QzFFOEFDNjM3MkZEOTQzNzE3QjQwCis6MTAyRTUwMDBBMDk3MEUwNUYzN0FENkM5MENDRkJEQ0RGQ0E3Mzk4MjU5Cis6MTAyRTYwMDA1RTRDM0NBNjJERkI5NEYwNzIwNkNGQzMxMTJGNDVEOUMyCis6MTAyRTcwMDA5NDA3MzUwQkYwQTFGQUU4OUM3RjEzRTIyOTlERDVDNzkyCis6MTAyRTgwMDAwNkMwQkMwQkZEMEUxNkIzQzRBMTYxRkRCNjNDMzIxOEUyCis6MTAyRTkwMDA5QkYyQ0UxNDdBNjNBQjI3RkNBNEFGMEJGMzdDMzRCOTVFCis6MTAyRUEwMDAyQTg2RkI3QUE2ODhFRjJCOTQwMzQ4RUZBQzk0RDNBOTJCCis6MTAyRUIwMDA4OUZGRjQyNDNBNzUyN0U1ODcyNUQzNjkzMkZFNEYyMzJECis6MTAyRUMwMDBERTJERjdCOUY2MjgyQzEwNDM3QUVCOTRDOUJFRTg2RUQ0Cis6MTAyRUQwMDA1NUIyMjhFRkFBRDU0MTc5NTc4QzQ1RTkxRUQzMUVENkE1Cis6MTAyRUUwMDAzRkQwODI3MjMzMjZEMTM5QzE3NTAyNkYyNkRFMTlBQjBECis6MTAyRUYwMDBERkJDMUNFM0RDRjU1OTAxOENGRjMzNDdGRDY2Q0M4RjRBCis6MTAyRjAwMDBCQTNFOUE0MUY5Nzc4QjU4M0JFNTQxREQ4MDFFMzJDQ0MxCis6MTAyRjEwMDA3QjIzRjNCOUIwQkM5QzA1RTgyOUIxMDJCQTVGQjI1MDdCCis6MTAyRjIwMDA5Nzg4MkY3NDE2QUJCRTBBRjAxN0JCREM5OTZEQ0RBQjNBCis6MTAyRjMwMDBFQTM1QUYwOTU2N0VEMjcyMUVEMUJGNDJDODRCOEZFRTIyCis6MTAyRjQwMDBFNzc5OUVCQUI4RjdBMzUxN0U1MDc2NTlBOTQ3NEYyMTI5Cis6MTAyRjUwMDA2RkE3MTVFQjgzMkIwNjI2Q0E4QUFGOUVEMUY5NzQ3MTMxCis6MTAyRjYwMDA2NDQ4QzU4NDQ0RkY0NzBCQjU1QzZDMzdBRTQ4MUI4QTg4Cis6MTAyRjcwMDBDRkJENjhFNzgxM0UwODFGMUFGNTA4RUE4M0M2NDI0REI3Cis6MTAyRjgwMDBDNUY2QzlGMkVBNzhFRkY5NzdCMUI1NDA3NzVEMjhBRkI5Cis6MTAyRjkwMDAyODhGQjA4MEY4QjBBRkYyRUYwQTJCN0FFNERGNERBOEFCCis6MTAyRkEwMDBCMEU0REYxRDc1RjI3QjY1OTQ4QjNDOTlGNUJDOUZCNjUwCis6MTAyRkIwMDBGNjNBQUEzN0VGQTcyNURGNEI2MzBGRjIzMjJDQzg2ODI5Cis6MTAyRkMwMDAxOThCRjc3N0VCNjlERDI2REU5M0YxQzNDNEJEQjRDNTc5Cis6MTAyRkQwMDBGRTk3QkJBNDZCRkEyMDZGQ0QwN0M2RERFMEIzRDE4N0E3Cis6MTAyRkUwMDBDMUVGMkY1N0RGREE5NTQzNzk4NDBBRTUxMTM2RTdGMTBGCis6MTAyRkYwMDBGQkNCOUJCMDA5MjYwMjhERTRGNkUwOTc0MjVGNkRDOURBCis6MTAzMDAwMDBBRUY3MDdBMDdFOEI5M0U3QzNCMDdDOURDRDFCOTMxOEQyCis6MTAzMDEwMDBGN0NCMEFEOTNDMTc1QThBNzQwMDc2MUZEOTRCQTZCRDQ0Cis6MTAzMDIwMDA2QUI2QUIxNTdBNjE5NUQwMEI4RjE3NDY1NjEyRkUxMzEwCis6MTAzMDMwMDBGOUREQUJCMDNGRjNDNkEyMEVGM0RDOEVGRkQwMzk5MEMyCis6MTAzMDQwMDA2OTNGMUMxOTUyNEZGOTM0NkUyREI1QkQ3MDZCNDU1QzRDCis6MTAzMDUwMDA5RkRGNEFFM0I3OUFGQTVDQkIwRENCRDMwNkY4RTYyM0IxCis6MTAzMDYwMDA5RkI5QzIzMjZCNDMzRDM2RkI2NjkyQkI0RjYxREUyODhGCis6MTAzMDcwMDBEODM0MTNGNUM2RjAyMEQ4RUY4NjBBNzFERTU0OTc4RDQ4Cis6MTAzMDgwMDBFODYyMUQxQUNGMjc4RDk1RDRGQjUxREY2RDE5OUNGQThDCis6MTAzMDkwMDBERUY3NjFCMUNFRjFDMzRFQzkzOEVFOTY2NThDNkQxQzdBCis6MTAzMEEwMDA4QkY4MzMyODhGQ0Q1ODAwQjIwNENBRTBFRTFGQzQ3M0VBCis6MTAzMEIwMDAxOTBGREEwMUM1QTgxNzc5N0I1RjFEQjQ4MTdENkMxN0U0Cis6MTAzMEMwMDBGODBGOEUwNkZBNDFGQjZCOTQzRDFGQzk3QzlBRUQ5Mjc2Cis6MTAzMEQwMDBGM0FENDA5NDY3RTJCQTkzRjNEQ0NDN0NBQjJFQzVDODY5Cis6MTAzMEUwMDAwQ0E0ODA3Rjc2RDkxQTBGRTU2QkU1MkVGN0EwOUU2Q0I1Cis6MTAzMEYwMDBENkMyMzQ1RTcyREVEQjk2NUMzNjE0RTE0QUNFNkIzM0E4Cis6MTAzMTAwMDBGM0E2Q0M3QzI5NzNEQzdGQUFCMEU3QjVCOUZENUM2RjcwCis6MTAzMTEwMDBDMTkzRjI2NDdFNUFBMUYyRUY1MjY4RjZGQzM2MzNCRkQ3Cis6MTAzMTIwMDAwNkRCNTM3RTREMkVFM0Y5MzVGRTdBODZGRERDNTBDNjc0Cis6MTAzMTMwMDBGNjExOTE3Rjk2OUM1NzA1NzJFODY3NDQ1NzNERUMyMzQyCis6MTAzMTQwMDA0Njc2NDY3M0IxQzgxQjYwREFFNjY1NjgxRkUxRjk2RDIzCis6MTAzMTUwMDAyMDg1N0QwNTAyMDFGNUEwMEJGNDEzRDYyQkYyRUEwQUI3Cis6MTAzMTYwMDA0Q0U1RjlCQTc2RDRCNEUyQzhDQjQ4OTcyRTdGNUNDRTUyCis6MTAzMTcwMDAxRTIyNzgxMzcyRjY5NzU4MEY3MkY2NTc1NjM5N0JFNjZGCis6MTAzMTgwMDA5MEYxMDhFNjZGNkU5MTM4MUQ2RTAxQkMzRjkxODIzRTUyCis6MTAzMTkwMDA4RTU0NDg4MjhGNTNEM0NGMUYwNEJEMzYxNjQ2REVDMkVECis6MTAzMUEwMDA3OUI0MUM3RUJGRTM0MkVEQ0NFNjg0OURDOUYxRDg0N0RCCis6MTAzMUIwMDA3NjI2RTBFMzc3ODQwRjIxQTcwMTFGQkY0NzM4OTNGMUZDCis6MTAzMUMwMDAwMDNGOUI1MDZFNThGMjRDM0ZDNTdFQkRFNTk5MjZGN0Y3Cis6MTAzMUQwMDBCRkQ4N0JDMjEyQzgwREZFMUQwOUVEMkYwODU3RDU0NDdDCis6MTAzMUUwMDA5NUVCNUQyMThGMTNGNzZEMkY0RTVFNzczQTQwOEUwMjdGCis6MTAzMUYwMDAzQzY4MTM1OERCRkIyQUI5OUMyQjk4QUNGQjJBNDkyRjVGCis6MTAzMjAwMDBGM0ZCQkVEQjgyRkNCRTJGOEI2OUE0Rjc4RjY0RUEzNTJCCis6MTAzMjEwMDBDOEE3MkM3RkRDMzlFNjZCMTRGOUI0N0E1RDg0RTRGQzMyCis6MTAzMjIwMDBEQzczQjRERjQ4RUQwQjI2OEJGNUU2RjcyN0ZEQjE0REQ3Cis6MTAzMjMwMDBEMkVFNEI5NzEzRTU3M0FEQ0Y1M0E5OERBQTQ0N0Y1M0JDCis6MTAzMjQwMDA4RkQwRjcxMkI2RTQzQjU0MDM5Njc2Q0Y0NEZENUJCOEJCCis6MTAzMjUwMDBBRTJERjkxQjY5RkY1QTgwRTAyNDkwOUJCMzFDQTdFRUFBCis6MTAzMjYwMDAxRTIxNTEzRUYwRDM1MjNGNzg3QUMwNjM0QjQxRDc0NTdGCis6MTAzMjcwMDAwMjNGNjBDNTUyM0Q3QjU3RjM1QkUzMUNCNTk1RjFCODQ3Cis6MTAzMjgwMDA4QTg4NEJGQ0YzMjNENjdCNEM3MzJCN0ZCMjAyRTNGMThECis6MTAzMjkwMDBBNjFFQzM3OEM5MTMyOUU4MjIyNEM2OTFEREI3REFGNDQzCis6MTAzMkEwMDA2NDcyQkJEMjRBN0UwRjY0NUVBNTM4MUYxMDdBNkY4MUFDCis6MTAzMkIwMDA5QkZCNTFFQzMwQzA2N0QxQUIwNTkzNDMxNTk1NUM2RTE5Cis6MTAzMkMwMDAxOTkyNDUxRjlBRkE4RjZBMkNFRkREN0U3RUZGODQ3NTc2Cis6MTAzMkQwMDBEQUM3MzFEN0I5NDJEMEE5MzkyRkQwRUJGQzRBMUVCRjhCCis6MTAzMkUwMDA1ODUwNjlBOTVGMjAzMzFFRUZFOEIwRTMwQkUwNTk0NDYyCis6MTAzMkYwMDBGMDMwNzZBMjE3NzgxRTQ5MDk0Rjk3MUQ5RTE1NzFCQUI2Cis6MTAzMzAwMDBENTU2RTA3OEEwOTc1N0UyNzM2QjA4RTgyRTA1N0VDNzg0Cis6MTAzMzEwMDA0QzA4REQ4NEY1MEEzM0I2OEVDODNCQUJERDVBOEZFQjIzCis6MTAzMzIwMDAzMENCMTZCQkY1QjY0QUJCM0NCREJEOTJDQkQzMzU5NTcxCis6MTAzMzMwMDAyNDQ3NTJDRkRCNTBDOUU1NjI5RjdEM0ZFMDNDRjlGRDU5Cis6MTAzMzQwMDAyRUZDMzUwNURGQjQ3NDNGOTk3MTBEQjA5QURCNkREQzRFCis6MTAzMzUwMDA0RUZDNTkzMEVFMUNGQ0M1RjlGOUM2NjFGNUE0RTc5RTk4Cis6MTAzMzYwMDAxMzc2Qzg3MzRFQTY2MDdFMERGMDU4MjA1NURFNEZBQzI0Cis6MTAzMzcwMDBEMkI0M0JBMjQzMTAyRkNGRjQ2Mjc3QzREQkY1OTI1RjQ3Cis6MTAzMzgwMDA3RjI1REI5OTcxMzFGNjQ3Q0I5NDIzMTk2NDdGOUM2RUJFCis6MTAzMzkwMDBDQjQwM0RGRkNDODk1MDRBRkJFM0I5REM5RDQzNTJEOTc5Cis6MTAzM0EwMDAxRkZCN0FCMTNGOUVBRTE0RjZDNzA3MkVCMjI3NEEzRUU2Cis6MTAzM0IwMDBFNEY2NDdDOTg3M0I2NUI0MjNGRUJENTJBNUY1MTQ5RkNCCis6MTAzM0MwMDBFODkwNzU4MEJCMDRFRDBGMTg2NzlGQjAzRkIwM0REOTAyCis6MTAzM0QwMDAxRkE3NzdDQTA4NTdGMTg3MURENEFGMDRDQTY4N0YxNEE2Cis6MTAzM0UwMDBGNzYyN0YwMDE0MzJFMkUxRTk5Mjk2Mzc3MUZGOTJEN0RCCis6MTAzM0YwMDA1QjM1NUVGRjg1OTU2RThCQkEzQjI4Q0U2M0Y2NkJDOTU1Cis6MTAzNDAwMDBERjk4QTFEMzdFREJFOTY3NUEzMTk3QkI4OTdFOUNERUNBCis6MTAzNDEwMDA5M0RCRjU0NjY3NjU3MkQ1RDY2RTU4RDczNjk2Qjk5MzY1Cis6MTAzNDIwMDBGMjMyOTVGQTg3QjE2QzE4MEFFNTZCRTEwNzM2OTA2RUI3Cis6MTAzNDMwMDBFRTlDMEQzMDY0NjNCQkZBNDdCQjUxQkYxODZFMUY3RTE0Cis6MTAzNDQwMDBERkUwQjNGNEE1RENERjU5QzM3Q0NFQzkwOTc5NDQ0Qjc2Cis6MTAzNDUwMDAwN0QwOEM5MDE4Q0ZFNUYxMzU4MUJERjRBMzhDMkNDMjM4Cis6MTAzNDYwMDBFMzVBOUYxOUQ3RDk1OTMxMDJGQURGNzlFNTQ4QkFGRkYzCis6MTAzNDcwMDAxM0JBMTcwNjgyRjJFNDRFOTlFQUNEMzhEMDJCODMxOTlECis6MTAzNDgwMDBFNUU5MDNGRkNFQUE4NkYxMjc4QUYxNDFERjY5Qjc0MzU4Cis6MTAzNDkwMDBGQjA1QzIxRTJCOTdCREQ0RkVBRTdDREU3RUIyNzFBQUE4Cis6MTAzNEEwMDAwRUNCQzVERDJFMTVFRjk5MzE3OTgzN0MwQkM2NkZEMTFDCis6MTAzNEIwMDAyRTgxRjY3NzNEMUIyOUYzNDA3REZBMTE4MDA0Qzc3QkVFCis6MTAzNEMwMDBENzQ1NzEwQzBERkUyMUZGNEVFODZDMjc3QzY2OUM3MDgxCis6MTAzNEQwMDBEOUUyMUJFOTIwRTE2MjE2RkJDNTk1NTQ2NkYyOTI3RUEzCis6MTAzNEUwMDBBOUU0OTNGOUVDMTEwRjlBMjFFMjExRDdCMEJGRkIwQUJFCis6MTAzNEYwMDBFQ0FEMzM2Q0MzNTY1Q0EzN0I1NEU4QzVEREFDNjc3RjkxCis6MTAzNTAwMDAzM0RFRjBGQkYxOUE3NzA2RUNFMzQ4QTc0RUZFQ0JCRTI0Cis6MTAzNTEwMDAwQUMwMzVFQ0QzQkVENkQ2OTlENzIwREU3NzJBMTRERjgxCis6MTAzNTIwMDAzREJBM0U4M0Y2NjlGRkJEQ0EyRThDMkIxRDA1M0VFNUQ0Cis6MTAzNTMwMDBGMUYzQjUyQjkxNUVGNzY3OUE2NTE2QzNGOERDRkVGOEQ4Cis6MTAzNTQwMDBGNzBBMDdGMDdBNTE1NjY3MDQzRTQwREY3OEZGNDBEMTEyCis6MTAzNTUwMDBERTY4RTVGNTY2OTlEREI1MTJGMzM3RjYwRkU2RTUxOTk1Cis6MTAzNTYwMDAzMzdFQkEwN0RCNjNDNjM3RjlENzZCOEY3QjUzQzlDRjdFCis6MTAzNTcwMDA1MTMzNTVEQjNEOEY1OTQ1Qjc3MjNBM0U0NzNGOTBGNzdGCis6MTAzNTgwMDBEN0NDMThEOEIzNUY1QTM1RjdCM0Y2MkYwMTEwQzcyMjNFCis6MTAzNTkwMDA5RUY0QzIxOTMwRkVCRUFFREJCNjhFODFBOUM2NEY1OTZECis6MTAzNUEwMDBERjQxNzI3NDQwRjc5QTU0NzIzRjM0ODNEQkNCQjE5MjlGCis6MTAzNUIwMDAyOEY5NURFMENCNzNCRjk3MjkwNzMxOEY3NTE2NTNDNzg0Cis6MTAzNUMwMDBBMTdGQkY2M0VBMzNGRjcxMERDQ0YzNkFGMUE4NzE3MjdBCis6MTAzNUQwMDAwQUJFQkU2MUM2ODhBNDc1QkQyRTJGNDdCOUY0RDFGQkMzCis6MTAzNUUwMDBGMzUzQzk4MUU2NEFCREMyQkUxRTdFNEVEQUI0NTMyMUYyCis6MTAzNUYwMDBGQ0Q3RkRDNzI3OEY2MEZFNDNBQzY0MjdDNUYxRjZGREZECis6MTAzNjAwMDBDMUMxRDA2RkQ5Mzc4NkRCRkY3ODUzNEZDRUU5MTNGOEFECis6MTAzNjEwMDA1QTI3QTZBMDNCODA2RjQ5MkFGODQ2Q0Y2NDNDNEY3NEQ2Cis6MTAzNjIwMDBCQ0I2MTRFQjkzRTE1NTMxREUwREYwODI5OTE1NDAzOUFCCis6MTAzNjMwMDA5MkY2REJFRjc3NjA1QzczNUZCNzgzODIyQjY3NEVCNEUzCis6MTAzNjQwMDBDOTQ4ODIyRDVEMjM0QUQxNkM5RDU2NzU0QzQ2OTIyQUZECis6MTAzNjUwMDBGMUREQkIxOThGODBGNTBEQjI4REZGMjY3NkE1REJDQTkzCis6MTAzNjYwMDAzN0Q0MEZCMDk1MTdENzBENDlGMDIzQzNGQjQwNTdEODc3Cis6MTAzNjcwMDBDQTZFRkZENUI2NzI5MDE1REFDQUYzQUIyNkRCQzYyQjNECis6MTAzNjgwMDBGMzg1NkRFNUU5RkU5OUI2RjY5NUVBM0M1Qjc5NjZGRTUxCis6MTAzNjkwMDA2MjVCRkJFQTQwQURBRDNFNTIzMDU2QzFBQjdDNDA5NzE5Cis6MTAzNkEwMDBDRDg4QUY4QzRFOERGODdDNEJENzZEM0VBNDhCNTg0OTlFCis6MTAzNkIwMDA4NEZDRUEyMzk5MURCOTE4Qjc3RUE1OTdFRkNCNzVDQzhBCis6MTAzNkMwMDA5MDg1N0UwN0QzMDhFNTI0RThGMzhERDk4OUY2QzExMUVBCis6MTAzNkQwMDBEREI2QjhGQ0NGNjc3MDdERkQ4NEEwRUY3M0RGODdFM0I0Cis6MTAzNkUwMDBGQUY5N0NFRkMxMjVFQkUxRDk1N0RENDY3MkE5NjVCRTM5Cis6MTAzNkYwMDAxQ0M1N0I1NTRERjk2Rjc4RjFGRUQ4MkJGMzc5M0NBMUIxCis6MTAzNzAwMDAyNTE3RDZFOUE1QkMwQ0UyQUYxNzE3NUMzNzE0Q0ZENzQ1Cis6MTAzNzEwMDBEMkYzRjUwMTI4RkY0REZEMURDRThGQjJFMzUwOUZFRTkxCis6MTAzNzIwMDA4QkIyMkJGMDlFMTk5NDZCQzU3REIzNzAwMTdGM0Y1QTBECis6MTAzNzMwMDBCQzVGODU0RkQwREJFNTE2N0MyNUVCRTNBMDY3RUM0QjQ3Cis6MTAzNzQwMDBFMDM2QjBBOTdGRjJEMTc3RkNFNjE3RjBCODRGRTlFOThGCis6MTAzNzUwMDA2ODI5REVBQjlFQTlCRDcwOTA1RjlGRTZGMkU3RDU5MjI3Cis6MTAzNzYwMDBERkU1RjRBMkI3RkZERENFMEZBRjEzM0ZFQzNCMzFGNzNGCis6MTAzNzcwMDBBQ0YyRkYzNzBEM0NDRUZFNTQ4Mzg3QzU2MDdERUYzNjNCCis6MTAzNzgwMDBGOEU4Rjk5RjBEN0U3QUZGN0E4MzRBQ0ZFNjg2N0M3QTQ1Cis6MTAzNzkwMDBDNjFBMDI1NEZGNjY0MzExM0QwRjM2NjhGNDdDQjlBMTg2Cis6MTAzN0EwMDA4MjlFODcxQTIyRDRFRTU3MEQzNUY0M0NEQ0EwRDNGQjYxCis6MTAzN0IwMDBGNzY3NzBCRUJDNTRFMEQxRjJDREI4NDJFNDQ1ODc0NDBGCis6MTAzN0MwMDA3ODlEOEYyOUJCOTMzRUQ0NjRBQjdDMDdCQ0ZFNzZDNjQ0Cis6MTAzN0QwMDA4NDlFNzhCRDU4M0QxMjJCNjkxRjEyRTE3QTJCMjUxRjVDCis6MTAzN0UwMDAzOTY3OUFGNzZFQjk5RDNDNEIyNzk5MUY4N0NGODU3MTMyCis6MTAzN0YwMDBCQTlDNDQ5Q0NFOEQyNjREN0Y4MkYzMkY3RDA5RTc3RUI3Cis6MTAzODAwMDAxMUM3RDk5RkNENkE5RUUwRkVENDI2ODlGNDhENkYyQzE2Cis6MTAzODEwMDA5N0U3Rjc0NzQyMjRDRjA3OEU0RDJEQ0ZGMzdBQzhGM0IxCis6MTAzODIwMDA2NUE0QjdEODIxOEM5RjYyN0ExMTBBRTM5NTM4N0ZFQUE0Cis6MTAzODMwMDBCODg4RDEyRkVGQUM3OEEwNzM0QjEzMEY5NkZEMUEzRUNBCis6MTAzODQwMDAzMzA1MUY5QzBCMEZDOUVCOUY1NkFDOEQ5RTM5ODFERjUyCis6MTAzODUwMDA0NzcxRjZFRkE5NDc0Njc3N0ZBMTYxNkNFQUU5MDIwRTRFCis6MTAzODYwMDBFRjhFRjdFN0Y2NDM3QkM1OEQ0MTI5RjJERkMxNzAyQjYwCis6MTAzODcwMDBDMkZENjY2NjVFQzE5RUJBREM5RUUzRkNBNkE0OURGNDEyCis6MTAzODgwMDBGQTVENzEzQkU3MDFCMjYzOTJEQkMxQ0Y0MUMyMDNFQTRCCis6MTAzODkwMDAyRDBCMUU1MkM4ODE2OTMzNTNEMDQxOTlGQzZDRjc0NkY5Cis6MTAzOEEwMDBFOEJGQkY5QjUxREM0QzQ1OUIxQUUwN0Y0NkUxREY2QkQ0Cis6MTAzOEIwMDBEOEZGQTE4M0YwN0NDNjIzOTE3Qzc0QUZCQkREODMzMTNDCis6MTAzOEMwMDBFRUE3QkZDN0RCMTlENTEyREQ2M0M4MzhCMDRGNDUzQjQzCis6MTAzOEQwMDAzNUQ4QUQwRkMwRUY4RTE1QzUyQTlERjg5REQwRDA5NDc4Cis6MTAzOEUwMDBCMTgxMzQwQjFEODQxNEJCOUU0NDRCMzVBRTc3MjgyODIwCis6MTAzOEYwMDBENjNGQTk3Qzc5QTJCRDhDRkIzRjIyNTFDRUEzRkJENzNBCis6MTAzOTAwMDA4QjcwNUQ3MzRGRDUzM0I1NDBDNDU5QkQyOUYxQjQ1QTlFCis6MTAzOTEwMDBCMkM0REQxNDE2RDgzQTMxOEZFQ0NFODM5N0UzRjlDRERCCis6MTAzOTIwMDAyODE2OTU4OUFFMENGMkJGNEQ3ODY1NkY4NEVFRTc5OTQ1Cis6MTAzOTMwMDA3RUZBRTc5MkI2MEFFN0VCMzE3RTlENDZFNzZGQ0NFMTZGCis6MTAzOTQwMDBBMEYzQjdGNTg1RkEyRDMzRTk5QzNFRTk3Q0M2RjdGMjgyCis6MTAzOTUwMDA5RjI1RDA2OTVCMUQyQzg2RjY4NTkxRTUyMkZDMjVFRjFECis6MTAzOTYwMDBEN0I4QTJDQURCQjFCRkZGNkJGQkY1M0IyNUVCRjcwMjczCis6MTAzOTcwMDA0NkFCRDNDODlGM0EwM0ZFMTRERTQ3Njk1MkY4M0QyOThGCis6MTAzOTgwMDBFM0REQ0NFODFFMDI5MkU1QTNERDc2QTc3Qzc1MDBGN0E3Cis6MTAzOTkwMDBGRjQ3MTlGRjQ4RkVEMTVBNTgyNEZBNUZEQjg1MUNCRTQ5Cis6MTAzOUEwMDAwN0U1MzAzQ0I3M0JCOUJGRDVEQ0U4RjZCNUU1QTBCRkNECis6MTAzOUIwMDA5NTY1Mzg0MDcxN0Q5NjM2MkNDQTYwOURBRDMzQjkzRTExCis6MTAzOUMwMDA3N0IzMUJGQTQ1QzY5QzA1N0VFMTlGMzhFM0ZCOUVFQjZGCis6MTAzOUQwMDAyMzdGNDM5NEJEMkVEREYxMDlGQTc1NDdFNDI4QzZERDQ3Cis6MTAzOUUwMDBCNjhEN0RCMDY2MzlFMjZGQUM4NzlGN0YyQTMxNzUwRTQ4Cis6MTAzOUYwMDAxQTY4M0U4M0U1NThFRUYxQ0I0QzM5ODk3MURBQUQ2MDM3Cis6MTAzQTAwMDBDQ0UwMzlFRkRERTIxRTZFNjZDMDYxQjM3N0ZBMTVEOUZFCis6MTAzQTEwMDBFREI1OUZGNDExREMyRTk0NDRFOEI3RTZCOEEyOTg4Rjc4Cis6MTAzQTIwMDBBM0EyREMwMkI4QjdGQTFEQzQ1RjlCNTQyRTFGMzY3OURGCis6MTAzQTMwMDAzNThGMkZDNUZFNkU0MTdDQkI3QjlGNUZDRURCRTRDMzIxCis6MTAzQTQwMDBCOEY3NEVBRjgzRjg3N0FCQUE2Q0NCODNGMjU2MkYzNzFCCis6MTAzQTUwMDA2QTlCNTQ0NzQ1QUFGQ0FFRUU5OURDQkU4MjI2Njk5NDY3Cis6MTAzQTYwMDAwRjE1OUM0QkY2NEU2RkYzQjQ4ODdEMzdDQkU5MDVCQTQyCis6MTAzQTcwMDA0NjdDQTYwNjIyQjg5RTI2NkY4RTg0RkI2MkQ2RUY5RkY4Cis6MTAzQTgwMDAyOTA5N0RDNUUzQ0FEQjg0RkQ5NDlFREYxRUMzQjg0RUMxCis6MTAzQTkwMDBGM0UwNTU4NTg4MkUwRkQ4NDMyN0UxQkRBN0EwOURFQzA0Cis6MTAzQUEwMDAyN0VGRTUyRTNEMTVCQzI3QzQ3OERCOUM4MTBBQzRFN0NGCis6MTAzQUIwMDBCNjRDMDczMzAwN0ZEQkYyN0EzOURGMTJGQUIyNDkxREM4Cis6MTAzQUMwMDAxNzIxRkEwNjdDOEM5MjdBQjY3QjVFRUNGMzY2RTc0RUExCis6MTAzQUQwMDAzRkRFNUJEQjM2NkEyMUU1ODU2RDFCQ0FFNUYzRUFDMzkxCis6MTAzQUUwMDBCRkRFRDM4OEZFODNGQTVERjYwOUYyNEQ4RTQyRkJBNjU3Cis6MTAzQUYwMDBCMjgwMDdGNTVDQjM0RkYxNjE1QzYwN0NDRTFEOUVBMDg3Cis6MTAzQjAwMDA0NUNFMjVGMzg5NzNGMERDMUFCQzRGNzhBNjI4M0Q4MDlBCis6MTAzQjEwMDA0ODJGOTMwRkQzNzc0NTlBMDMyMDc3RjMzMDZGQTlERUIwCis6MTAzQjIwMDA2N0ZENUUwMEQ4REQ5RjIxRkY5RjhCNEU1NUE2N0IxMDYxCis6MTAzQjMwMDBCRjMwM0VEMTUxNkZGQjk3MEM4RjE3MjVEM0I4QjNCNDZDCis6MTAzQjQwMDBDRkQ2NkI1MjdEQzc2NDU0MTVDN0FCNDkzN0NFNzNEMEZGCis6MTAzQjUwMDBDREI5RTBCN0U5QzVEQzg0NUUxQzU4NzVEOTJBM0M3RjM1Cis6MTAzQjYwMDBCRTlCRjFGQUNCMEVGRjhFRkNGNEU0RjJEN0U1Q0YyNjM0Cis6MTAzQjcwMDA2NTI3QzlFREE2OTEyRUEyQTdFNEZFREJGMjM4M0NFRjQzCis6MTAzQjgwMDBDQzNDMjlFMjA0MzFFMkRGNkMwRjhGMzdERDUzRDQzRkE4Cis6MTAzQjkwMDAyRDk1NUMyRTFCQUY4RkE5QjJEODFCRDlBNUVEQTQ2RkI0Cis6MTAzQkEwMDA1RDU1OENDNzZCRDU4ODZGMjQ4Q0UzRUQ5NDgxNDYwMUZECis6MTAzQkIwMDBERjhFMkZGRTc0NENCRDc4M0MyQTNCRUI1OTA0QzZDQkZDCis6MTAzQkMwMDBFQTk0ODkzRUYxRTcwQjkwODNGRDg0MUNEQzMyRkM4Rjg0Cis6MTAzQkQwMDAwQ0YzNDc3NjVDQTEwNDc4REVDQTQ3ODFCM0U5OTNBQzY1Cis6MTAzQkUwMDAyOUY2NzhEMjg1QzY4QkFBQUE0NDFFNDMxQTRCRTM3OURDCis6MTAzQkYwMDA0MzU1MjE4NUYyNzUxQzVDQ0Y2QUYwREYyMDIxMjIyNDE5Cis6MTAzQzAwMDBCMUZGODNDNDUxOTQ4QUFGNzg5QzJDNjcwOTIzQjkxOUZBCis6MTAzQzEwMDBDRjVGQzFFRkNGRTAzODNBMjM3QjA0MkZEMDYyQkJDQjFDCis6MTAzQzIwMDA1NzczN0IyQjk3NzU0Qjc4MUUzODFDQjM3ODY0QTQ3NzM5Cis6MTAzQzMwMDAyRTNGQ0ZCMDVDMDdFNUVGQzAzNDk4N0YyMjE5MEVEMjNCCis6MTAzQzQwMDA4QjNGMUM3RTU0MEFDMkRCN0I4QTU3OEQ0NTdDMjRBRjk4Cis6MTAzQzUwMDA2MzY1OTU4ODdCQzVENzcxNzYzQzk4NzBGNjM1OUQ5QURCCis6MTAzQzYwMDBGQUJCQzlDM0Y1QjEwNjhBM0IwRDhERTVBNEY4Njc5OTg3Cis6MTAzQzcwMDBCQzgxRUI2M0MzRUQ0MzdERERBNEQ0M0Y4RTY1RTgxREJECis6MTAzQzgwMDBBMTc4Njk1MkZDRjNCMzM0MUUxRjk1RUU2MDNFQTk5OEVCCis6MTAzQzkwMDBFMjlGRjlCODRGNkI1OTdBMDBFMzkzRkQxNEREODNGNTg5Cis6MTAzQ0EwMDAxOTIzMTVGQUJCMEM2MDc3NEZDNEYzOTY4NDVGQUU3QTg0Cis6MTAzQ0IwMDA3OUJFREM1QUNBMkI3QzFFRjUxQUI0M0JGMEM1RDlFNTk3Cis6MTAzQ0MwMDBEMTkzRTdEMDZCMkQ5RDIzQkQxNDVGRjdENDY2QTAzRjQxCis6MTAzQ0QwMDBGRTk0N0ZDNDYxRjQ2RkNFNzg3OEJFOTdEOUVFNDBEMjVGCis6MTAzQ0UwMDBGNzRGOUE4NTlDM0I1QzI1RTJFODY5OUZDOUQ4N0Y5QThCCis6MTAzQ0YwMDA1RjU1MzBBRjJFRTQxOTRCRjJCRDQ5NEE3RDVFRDA1OTc1Cis6MTAzRDAwMDBDNUY1QzE2OEY1MzU0RTY3QUJDREVGOTZBRDI2RjlGRjI5Cis6MTAzRDEwMDA0RUE2QTBERjNBN0QzMUM1OTU4NUJEQzczNDRERjU1RDEyCis6MTAzRDIwMDA5QkIwRjM0QzdERTk1NzdDQzZDRDM4OEVDOEI3RUFCMTVECis6MTAzRDMwMDBDRTAzMzczMUZDMUUwQkYzNUJFMkIzMjM3MEZFN0VGMTQyCis6MTAzRDQwMDAzQzNCRTJFNzI0RkJBRTM3N0NCNjA4RkZCOEM5MUZBMkI0Cis6MTAzRDUwMDAzQzhEMzMyOEIzNTI5QzlGOTg0RkIwNTMwRkEyOUM5QTJFCis6MTAzRDYwMDBEMDYxOTcyRjE5Rjk3NkY5QjJENTUxNEY3OTVGQzZENTQxCis6MTAzRDcwMDBDQzg3NzkyMUFDMkFFMEI3REFDOTYwQUZGRUIyOEFDRTJGCis6MTAzRDgwMDA3N0VENzZFNzRERDU4QzdGNjczQjVCNTUzMDRFMTNGNjZDCis6MTAzRDkwMDAwNDE5OUU0QjI4QjkzQUMzRkQ3MEY5MDM2N0REOEZCNjRECis6MTAzREEwMDAyQUFFRjc5QkYzOTc0N0QwQUZEOTMxRjUzQjg0OTdGMTEzCis6MTAzREIwMDAxNTNDMEZENTZDMDdGQUYyOUQyQThCN0Y2M0U2Mjk5QzkwCis6MTAzREMwMDBGN0Y3OTQ3QzBFQ0E1RjNDREYzODUyQ0I5NDk1RkM3QkFFCis6MTAzREQwMDA0QUZFRTVGNDNEQTVBNzNDRkM3QjRBMDczMkY1MENCNDRFCis6MTAzREUwMDBCRjJFRjQ3QjRBQ0JBQjM5QkQ4NjNDREY3RTcxREEwODRGCis6MTAzREYwMDAwQjlFQkE3NENBMUY3MUY5NEZEMUY5Q0QzNDkxNkY5MkVECis6MTAzRTAwMDAxQzJGNzJCQkVCRTlCQzJENTY1MkJGRDgxQTJGMzZGMUNFCis6MTAzRTEwMDBENzI2RjRGNjZGNEE3NENBMEJFQUVERUY0MTk4RUQxMDFECis6MTAzRTIwMDA2M0I4MkVCNzg4ODc2RTI5NTk0RkY4OUY1QjkxNERGMTgzCis6MTAzRTMwMDAyODQ1QzRBMzVDQTc3NENBMDM4RThFRDczM0FBMkRGODc1Cis6MTAzRTQwMDA3N0U3MUFBNEVGMzJGRTkxRjFGQkVFOUZGM0ZCRUUxOTM4Cis6MTAzRTUwMDAxQjU5MDhFRkI3ODdCRTE4NDdFNzU0QTE1ODFBRjFEOTg0Cis6MTAzRTYwMDBENEQzMDFGQTVFNzU5OUZDRDhENjExNTA3RkEwNTNBMTI2Cis6MTAzRTcwMDBFRkM4MUY5ODlBOUU4MzdBRUREMzRFNkVERjY2MUNCODBBCis6MTAzRTgwMDBFQUYwREY0MUI5QTRCMzE2NjMwMjIwNzcwMDk2RkUzRDQ1Cis6MTAzRTkwMDBENzMxRjVCNEUzNkJGOTk5MTNEMENGQjQ5Qzk3OThFMzdECis6MTAzRUEwMDBGRUJDRTExMEQxQzc5MzBEMURGNERDRDcxMEEzNjc0QjA2Cis6MTAzRUIwMDA0MzE3M0Q4QjE0MkQ4Q0VCMjlFQUEwQjM0QjM2RTkwNDU0Cis6MTAzRUMwMDBENDVCRTAyODdBMTdGQTVCRThDMTM3NUUxRjVGNERGQ0QwCis6MTAzRUQwMDBENzYxNkI5NzkxREY2NTZCMDc3RTZFMTFCNjUzRkMxQzQzCis6MTAzRUUwMDA5RjJFRkNDRTE4OEMzRkJCOEI2RDk2RDRGRjUxRjI2QThGCis6MTAzRUYwMDA1MTc1REZDOEFCMUJBQjA3OUU0RDVFRjFGM0Q0NTA5N0Y1Cis6MTAzRjAwMDBGOEFFNTgxMjNGRkU1Nzk1Q0FCRjhGNjRGMkE1Mzg1N0Q2Cis6MTAzRjEwMDAzNUY1RjQ1NkZDMTVGNDY5NTNENjc3Qjg3QzhCRTc2RjBBCis6MTAzRjIwMDBGMEZCOEFFNjc3RTlFRjc4RTVFNDVFQ0NFQjY5N0U1QjRGCis6MTAzRjMwMDBENDFCOUZFRkM1RjNEQ0M0REZDREY4RTMyQUJDNzdGMkQ2Cis6MTAzRjQwMDAwMjNBQjc2MDg3QkVGQkNBQjNBQkYwRkI0MTBCNkJCMjYyCis6MTAzRjUwMDAxNTBERTAwQkUzMDE2Qzc2RTJCRThDOTlENzk4OENCNzE3Cis6MTAzRjYwMDBERjU0M0JDQ0VGRDA1MTFDQkU3OTA0RkZGQjA2QzlFREZBCis6MTAzRjcwMDA1RUFDMTY3RTlCNkFGRkJCMUZFOUJEREMxMzdBQUU5QTZFCis6MTAzRjgwMDBDQjhCNUYwQUJDNkQ3NUYxM0M4NURFRUU4MzdDQkZGQTlFCis6MTAzRjkwMDBFQ0Y3NDFERTE0RjVFN0JBRkZGMTEzRDFFRTA5MzFFRjhBCis6MTAzRkEwMDBCMDQ5OTFGQjUxRkU5ODdGOTdFMzQ5RjEzRUZFRjczODA3Cis6MTAzRkIwMDBGQzJDRTUzODZENDJFRTVFM0VDQjI3RjY1M0EzRUY5RjE3Cis6MTAzRkMwMDBDMTc4OEYxMDdEODhCRjlGNjBENjRGRkEzMDVFRkY0RjVCCis6MTAzRkQwMDA1NDFGRkYzQjA5M0FDNTg5Q0NGQjc4NkRENTFEN0IxQjZGCis6MTAzRkUwMDAyRERGRkY2QThFN0Y1NzkxRTczOUZENTFFMDJERjk2OThBCis6MTAzRkYwMDBERTQ3ODk3RjNGOEExRERFQUI1OUJFMUZGNTQwRjU5QjJBCis6MTA0MDAwMDAyN0M1RjdBRDlFQTZGNThBN0IzOERCNzBCRDAzRTlGREI5Cis6MTA0MDEwMDA3RTdBOUZGNDNEODFBNzVFMzlCODU3N0M0N0YxNzk4MjVCCis6MTA0MDIwMDBCQjNFRjkzQjVERUZFRUI1N0UxRjYxNUJGNTNCQUI0NEZDCis6MTA0MDMwMDBGQjk3NjgzQ0YxNURBRjE0NzQyMUU4RjZFODVFQkMxRkE1Cis6MTA0MDQwMDA3QTFFRTNCRDQ2RTM4OUVGNzJBREFCRTY3Q0Q0MUIzRDNGCis6MTA0MDUwMDA0M0ZCMjMwNDZGRkM3QkM1QjUxRUQ0MkI4OTdCRkY0NzM0Cis6MTA0MDYwMDAwODNGRTc4MUFGQTMzNEFGNkVDRUNCRjEyNUJCMzlCRjlDCis6MTA0MDcwMDA5OEY5NjQyNjVEQjA1OTdDM0YzNjU2QzdGMzc0NEYxMkU5Cis6MTA0MDgwMDAxQzJCRkEwQzBGQTcwODlFQTQ3QjQ4RTc1QUM3RTM4NUIwCis6MTA0MDkwMDA5MUNGMDgwRTdGM0MxRkY5NEYzNENFRDc4NEM3QkMzRjY5Cis6MTA0MEEwMDA5NkNDMUZGRDY2NDk2NjFFQjQ2QjE2Q0U5MzFCRkY2RTQxCis6MTA0MEIwMDBBNzdCNTYxRkNDMEJFMzY2RDMzODg5RUY4MUY2OUY5NTFCCis6MTA0MEMwMDA1QUZFNUNEMEI4NEMzREJGRkMxMkIzRkNGRjAwMTVDOEQzCis6MTA0MEQwMDA0RUEwMDA3MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgxCis6MTA0MEUwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkYzMTc2MDYwRjg1MTAwCis6MTA0MEYwMDA4RkMwOUM2ODdDNUFFM0JGNEMwQzBDRkFDQzBDMEM5NzFDCis6MTA0MTAwMDBEODE4MTg5QzM5MTkxODg0RjhDODMzRTcyMjlBQkU3QjRFCis6MTA0MTEwMDA0MEIzNjZGMDMwMzAyQzYzNjU2MEQ4MDlDNDdBNUNEODRGCis6MTA0MTIwMDBGNUQ5MDgyMkQ4NDc4MTdFNUYwMUM0MTdFOTFDMDZBMzkwCis6MTA0MTMwMDA3OEYwRTAxQTExMDY4NjQ5QTIwOEJFOUUxOEFBN0NBRDQ2Cis6MTA0MTQwMDAwODgyQUQyMzQ1OTk1RDRFNDBGRDAwODg1MEJFQ0I4MDZFCis6MTA0MTUwMDAwMzAwMDAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMEFBCis6MTA0MTYwMDAwMDBCRDU3RDBENzg1NEQ1QjVFODNBMzM2N0NFRkMyNkUzCis6MTA0MTcwMDAzOTQ5MDY5ODg0MTA0RjQyQzBBODQwMDcwODBBMTY3NUFFCis6MTA0MTgwMDAxMkMxNDZFNUI2NjNEQTZBNkNBOTFEQUM1MjdGNjFCNDEwCis6MTA0MTkwMDA1NkI5NTZDQzQ5MDhDOTI0ODQxMDEwMTVBOUNBRTAyRjc1Cis6MTA0MUEwMDA1QTZENTM0NTZCOUZFNURFMDk1MDhBQkRCRTI3N0FENTBGCis6MTA0MUIwMDBBQUQ1REU1ODI5QUQ1NjZEQkM5NjkyQkU4NzcwRjc1QUM3Cis6MTA0MUMwMDA3QjlGQ0MzOTI3MzM5M0ExNEFEQjg3NUZCQkIzQ0ZGRUZDCis6MTA0MUQwMDA1QjdCRkRFREI1RDc1RTdCOEZFMjcwNDFGNTA5MDA0NzUzCis6MTA0MUUwMDBGMURGNTkwMEY3RkIwMTYwNUMzQTlERjlCRDJGNUZGRERGCis6MTA0MUYwMDA3ODFERkJEQkVGMEUzRkM4OTI5OUJGOTg1RjExOUI5NjJECis6MTA0MjAwMDBBRTNGMDcyNEFBRDdGMDhCQzU3RjA0NTZFRkRGQzFBOUM0Cis6MTA0MjEwMDBCOUQ5QTc5RDA1NDNGRTMwQ0JFQjkyMTNCMDlEMUJFQUE1Cis6MTA0MjIwMDA0QkZGMjVDOENBODcxREUxNkU5NjRGMUQ3NjA0ODBGNUE5Cis6MTA0MjMwMDAzMzAzOUNEODA5NjhBMDA2QTJEM0Q5NzdGOUNCNDU2MDhGCis6MTA0MjQwMDBFQURGOUU5RUI5NDk4NjU0MjlDMEFFOTUyMDQ3NTlCREU0Cis6MTA0MjUwMDBENTA1QTcyRDFFMEMwMEJDRDA5MkZBQ0JGRTI5MDA5MUVCCis6MTA0MjYwMDBENDQ5QjJDNkZBRDlEREIyOTdGMkZGRDZCMkVGMkZGQjJFCis6MTA0MjcwMDA1RDAwMzEyOEE2NzExQUU2N0YyNDJGNjFFRDc2QjlBMDgyCis6MTA0MjgwMDBCOTlGQjU2Qjg4NDhBRTI1QTZGMTYyNjIzRUJCQkNBMjYxCis6MTA0MjkwMDA1Q0FEOTczMzk2MTdCMDcyRjZCRDIxNzg0MUM2RjIxODFGCis6MTA0MkEwMDA5QjExRDUyQjE2RkQwQzBGM0FCMTlFMDY0MzdFOUFFNzYzCis6MTA0MkIwMDBFMUE2OENGMzlDMjBEQTE5RjlCQTQxM0VERjlENkYxRDBGCis6MTA0MkMwMDAzQTFGRTk5MDgyQTJBODFCRDNDM0Q1NkYyMkJFMDczQzM4Cis6MTA0MkQwMDA5MjA2NTUwQ0JGODNFNzExN0U1Mzg4NUZENkM1QTFCNzAwCis6MTA0MkUwMDAzOUJFNzc3REUyMDhCNzMyN0MzNzc4RDQ0MDk4RTU0MTEzCis6MTA0MkYwMDA2NkY0NjBFNTBEMDE4ODEwNUMzMjRCMTkxQ0U3MEJCOEMxCis6MTA0MzAwMDAyRjE2NjkxM0E2NDQxNzhERTgzMkUwNjE3NDA5OEMwREVECis6MTA0MzEwMDBFRjU5OUIxNDgyRDc5OEU3MDBDRTMzOEY3NjA2NUREOThDCis6MTA0MzIwMDBENzQwQjQ4MEI1ODNDQzdDMzAxQTNGNkNCQ0Q5QzcwRTYzCis6MTA0MzMwMDBBNzgxRDdFOEZDODFCRkVDRjcwMEZEM0JDQUZFQjc1MDcwCis6MTA0MzQwMDA3REVFMkZGQjZCRDNGOUIzODZGNzU5RjI4Q0EzQzE3M0MzCis6MTA0MzUwMDAyQTgzMTdGRkQ0MzA5NUZGM0M2ODk0NTdGMTcyMUMyN0NECis6MTA0MzYwMDBEMUEyRkRCOTg2RjE1RjVGMEJGQ0I5ODZGMTVGNkY4QjVGCis6MTA0MzcwMDA4N0YyM0QyRDJBRTVCQjVCNDI5NDRGQzhBQzA5QTM2MzhECis6MTA0MzgwMDBBMjA3OTIzQTZCNUYxQzYxRjU0REUzMTVDRDY1RUQ0Q0NDCis6MTA0MzkwMDBGMDE1ODQ1NTRCREU1RjFCQjJENEY3NkE5QUE1M0NBMTk5Cis6MTA0M0EwMDA1REVGNDgzMkJBNzc0RDczMjQ5RDEyQzJDMTY0RTQ0NDc0Cis6MTA0M0IwMDA4NEMzNDMyOTAzRjdENTEwOUI0RjBENkYwMjZCNUREQTYxCis6MTA0M0MwMDBBRkFBMTE5RTE3OUREMEM2RjI4NTVBQzQ3MTI5Q0I1NzRBCis6MTA0M0QwMDA4NjlDOTAwQ0IzRjEwQjg3MDA1ODdGODk5NTAwMUI1ODgxCis6MTA0M0UwMDA3RjNEMzM0Rjc1NUNDQUYyRERGM0RDQUE1MzA1NDhCMjVBCis6MTA0M0YwMDBGRTEzNkVENkNGOTE5NEI2MEFGQjk5QUU4NEIxMUZFODM2Cis6MTA0NDAwMDA5MzdGOEI3OEYyQjBGRjhFNTYwMzRDRDY5NEI3MUQ4NTAwCis6MTA0NDEwMDAwMDU1M0FGQjZFOUU5RjVCMEZBMTVDMTdDREI1N0U5RjRBCis6MTA0NDIwMDBBQzJEQkQxNjU4RkRDOTYwRkE1RTk1QTZBNzMxQUU5MUI4Cis6MTA0NDMwMDBCNzhGNjcxRkU3ODQxNUI2RkU2REZENTY2QTgzRjVFQUYwCis6MTA0NDQwMDBCNDc0QkYyN0MwNTBBQjFBRjg2N0VFMzdEMjIwMjE5RDU1Cis6MTA0NDUwMDBDMkEwMjU2NzFFM0ZCODAzMkIzRTJFREUzRjNCOERFN0YzCis6MTA0NDYwMDAxRTE3RDc4Mzc2NzkxQjA0MDdFOTBGOTBDNzQxODRDMUQzCis6MTA0NDcwMDBBNTY5OEU2NDM3RUJBN0JCQ0E0MUZDQTNBRDg2MjRFQUNECis6MTA0NDgwMDBBREI1OTNGNkM1MzFERjVEQTU2ODZEMkM1RjU1QkJBNzUzCis6MTA0NDkwMDA1OTlBMDFCMDY2OTI0QTdDRDdCREMzMEQ2RDYxMEU0NzMzCis6MTA0NEEwMDA5MEYxNjlBNUMxQTc0NzA2RUJBQjkxMEYyNTA4NkY2MDk2Cis6MTA0NEIwMDBFNTU1REE4MTU2QUNBRkJFRUFEMzVDNzM0N0NGMEY1NkYxCis6MTA0NEMwMDBGMEY5NTM5RUNEN0YwOEZGOTgzM0JBREY1RkNFNTEyMkJCCis6MTA0NEQwMDA1MUU0NUIxRDkyNkUwNjRGNTc0RDVCQTNDRUM2Qjk1Nzk0Cis6MTA0NEUwMDA5NzAxRTVBNzdCNjVGRjZCODhFN0M0MTQwRUFGN0RERUZGCis6MTA0NEYwMDA5NTlBQjIwNEY5MUFDQ0UzQjNGMTJBNkIyRUJDMUFFN0YxCis6MTA0NTAwMDA2NTg3QzNEMDE3REY2RjUxNDkxRUVGNkFBOUE1RjRERTk2Cis6MTA0NTEwMDAxNkI1MUZGNUM0NUQ5RjM4MzNFMkY3N0M4OUVCRTdDRDE0Cis6MTA0NTIwMDBBRUE4MDNFMUQzRTczOTkyMEY5MkZFODk2REJFOTJFNTAyCis6MTA0NTMwMDBFRkY5RUVGODU5QjgwRTVDM0ZDRjQxRkFFNUNGM0QxQ0RDCis6MTA0NTQwMDBERkY3NDg3RDE3MDNENTU3MzRBQTZGOTNGRjdCRTU0ODAzCis6MTA0NTUwMDBEQkI3NThGRDdCNDJBNUEwMzM3OUFFNzRFRDNCRjc0NDQxCis6MTA0NTYwMDBFQzZGNDVGNTRDOURGNTc3Q0YwRDFCREVDNkY2OTVGMzQ4Cis6MTA0NTcwMDBBNjZBNEVENjdFRjJEQzAzNkZCMjQ1MUNFRTNBMzIxOEM0Cis6MTA0NTgwMDA4QTA2MzBDRkU1QkE3MkM1RjhGRTFBQzYyNzEzQjVCRTQzCis6MTA0NTkwMDBFQjcwRkNDQUI5OEE5NkFDNEFGMzY1MDU4NDY5OUMxMzMyCis6MTA0NUEwMDA5QUZEOTA1MkM3RTZDRjhBNkI3MkYzRTdGMUQzMDM3RjhGCis6MTA0NUIwMDAxRkI5MkE0N0I5MkE0REMzQkQ1OUQ4Mjc3NkJBMkY5MkI5Cis6MTA0NUMwMDAxQ0M0MkYyMzcyMzU5N0NCRDUxM0E3NzMzQTFCNzI3NTcyCis6MTA0NUQwMDBEN0E0QkU3NzhCNThCRUY3MUI5QzRGRUQ3QzVFMzVGNzlBCis6MTA0NUUwMDA0MDNERDJCNTg3Qzk0RjQ5MDhBMENDQUQ3RDJDQjE3Q0U4Cis6MTA0NUYwMDBFRjEyMjE4NzczMEY0ODRCNTlGQjNGQkRFMkQzMDBFNTEzCis6MTA0NjAwMDA2OTcxNjY3RDlEOEQ5RkQzQTk3NURDN0I2RjcwMzQ0NDg1Cis6MTA0NjEwMDA1OUJENUY1RTNFRjU4RjZFMUM2RkIxQTJBMTlDRjVDQUJECis6MTA0NjIwMDBCNTM0QkVGNjVENDVEMzRERjRBQzVDQ0NFNDg5RjE1N0FFCis6MTA0NjMwMDBFNTBENDI3RTZDNzIzNUQ2Rjg4OTk2MjRCQ0MzRTQ2OEQ5Cis6MTA0NjQwMDA3RDRCMDgyMjhDNkVFQjVBMzQ5MkFGQjU0MkNFRDAxNjE5Cis6MTA0NjUwMDA4NTMyOTYxNzcyMDZCNUIzMjg5RkNERkUwNDY4MjVCOTNBCis6MTA0NjYwMDBGMzY4Mjk4ODMxRkFBQzY3N0Q0MzM5N0U0RjQ1MjJGM0UwCis6MTA0NjcwMDAwMTRBNTA1NzlENEVFMEE0MUM2QzZENUYzNzUyMEUxMURECis6MTA0NjgwMDBDNkY0RDAyQjg5QkNGRTQ3M0RDMkM2NTNDMzNDRkY2QzY5Cis6MTA0NjkwMDBFQjFGRjU1NTRDMDhENzdCNzk3RTg3NTQ1QkFGQ0YzNzNFCis6MTA0NkEwMDBCN0RGNDNGRDFCRjU1OTNFRDU1MDYzRUEwRkZCOUY2NjBDCis6MTA0NkIwMDA4NkM3NTE4RkY1OERGRTVFNkYyREFGRDdEOUY4RUI0NENECis6MTA0NkMwMDA1RTY5MkJFNkY5RTNEQzdGOEZENDFGNjI0QzBGNkI2Q0M1Cis6MTA0NkQwMDBGREY0NDgwMjRGRkE3RjQ0MjI4MUY0Mzg3NzRBRUY0NkNFCis6MTA0NkUwMDA3NDRCRjkxRjIyODgyN0EzRkMwN0FERkZBMUVCQUNGRTlBCis6MTA0NkYwMDA0NzEwQkQ0QjYyNzQ5OEI1MjA1NjBFOENFRUZFQzYxNDYyCis6MTA0NzAwMDBBMDI5QjVERTg2RUZGNEZDNUVBNEY5MDVBNkYxRkM3REQ4Cis6MTA0NzEwMDBBRDlGNDQxMERGNDZGOUQzNTI0MTJCRTIxQkY5MjYzMEZFCis6MTA0NzIwMDAxRTIwNDQ0MjAyQjBFOUU3M0Q1NzNFOEY3RkQ3OTYwMEY2Cis6MTA0NzMwMDBDQzYzRTM2ODdEQTBCMTNFMUMzNTcxMDlGNzFEQTFDNUFFCis6MTA0NzQwMDBGMjAxOEIzQzA4QkU2M0YwM0QyRUIxNzRENkZDRDhENzg1Cis6MTA0NzUwMDA3MDI5Q0MwMDlGNkU4NkNGMTg3RjJDNzgwRDM4QjJGMzZECis6MTA0NzYwMDAyNzFGREZDRTQ3MERFN0NDN0Q2MTNFOTMyRkZGM0U1N0RECis6MTA0NzcwMDBEOEFERTEzQzU0MDlGNTc4MDkwMkM1RjQ1QUYxOTE1REQwCis6MTA0NzgwMDA0NDI3OTBGQjQzNjg0N0RCRkIyRDU5NTAwRTQ5RDMzQzJGCis6MTA0NzkwMDAzRjZCN0FERTg1Nzk4RUI3OTdDRDc0NjVGOTU3Q0Q3ODAyCis6MTA0N0EwMDA3QzFDRUJDRDE5Q0Q3N0M2RkNCQzM4M0Y0MDNCOThDRDg3Cis6MTA0N0IwMDBBRkNFM0NCRjI3OUI3MTdFRDlGMDY2OUZERjNBNkY1RjFCCis6MTA0N0MwMDA3MzM0ODNGRTNERDMyMUY2QkI2N0NFRkQxMkY2Q0ZDNjEwCis6MTA0N0QwMDAwM0Q0NUY1RTZEODhGNEFGOEFFM0IxQUQ2NkQxOTE1REJECis6MTA0N0UwMDBDREI4QjVDRDM2OUUzQTlGOEQ1NzdCRkNGMDM5MTYxRjVDCis6MTA0N0YwMDAwNzk4RkVEMjU4M0Q0NzM4MzcxRkRCRTVEOTk4QjcxRkQ5Cis6MTA0ODAwMDBFNzJEMjExRkYxRkQ4MDdEREUwMDhDOEYwQUZFRkY5RENDCis6MTA0ODEwMDBGN0M3MzJBN0U3MERBQzdGOURDRjhCQ0JDNzNGNjg1RTU0Cis6MTA0ODIwMDAxRjNGNUY0QUYyOEFGMDM4MzkzRjg3MzJGMUQ3M0I5MjE3Cis6MTA0ODMwMDA2NkQ5RTdEQUY5M0FEQkJDRkU1MTdDM0E3QTVFQjlGMTI3Cis6MTA0ODQwMDA3Q0JDRjU1MEJFRkFCNUVENTUxRkUxQjFGNzMyQkU0RjU1Cis6MTA0ODUwMDBFOEREQkI5MEZDMEVCRENGOUYzRDAxRTEyODRDOUMwMkUyCis6MTA0ODYwMDAxMTY2RkY0RUM1RkU1OTdGQkQ4NjdEQjFBOTZFOENGRUQ3Cis6MTA0ODcwMDBCOTdENzE2NzBCRjRCNzRGMDE3OEFBNzA5MEY2QzMwQzNECis6MTA0ODgwMDA0RTZBQkY5OUQ5OUY0OUE2RTBFQTVFQkNDMUJCODQ4RDQwCis6MTA0ODkwMDBCN0Y5OEEwRDVFRjQyQkY1MEE3QkIxRUVDNTA3RDY5RkZBCis6MTA0OEEwMDBDM0YwMzlFMUYyOTI5OTRFQzYwQUJENUVFM0ZCRjZFNzJBCis6MTA0OEIwMDBBNkIyRUY5QjJFMTNERjg1RkY4QTdEN0YxMUVCODc0NDI1Cis6MTA0OEMwMDBGRDZDNzA5NTI5ODNCMTI4QzkwQjgzQ0I4NDdGQTNGQzMxCis6MTA0OEQwMDA0OTA3Qjc0QjlGNDAzQkVCNDREQ0NGNzAzQkFCQ0NENzk5Cis6MTA0OEUwMDBCNzA0RTk1QkI4NTlEMUVFOTM0NkY3RkJCRjg1M0VCREVGCis6MTA0OEYwMDAxM0VEMzQzNkRGQkIyRUVGMjg0N0JCNkFFN0Q2NTM3NzdDCis6MTA0OTAwMDAwNTEwQUVDQjgwRjRGOTg5Qzk4NzA2NUMxQThFQUY0QkNGCis6MTA0OTEwMDA4OEU3Mjc1QzYwRDg1OUI0Q0U5NzVGNjZEMEI1NDkzQTJFCis6MTA0OTIwMDBCQjg2REEwOTNCOEJFN0JGM0ZCMkFFN0U5REVDOTY4QTMxCis6MTA0OTMwMDAxOENGM0ZEREY2RERGQTU1QjJBOTVDRkY3NjdEQTQyMkUzCis6MTA0OTQwMDA1REZFNDJEQkI1RjVCOEVFQ0VGMkM0REU5OENGNDgzNzU3Cis6MTA0OTUwMDA4QkU5QkQ1NTBDOEU1OUIyRTY4QzIzQkY2QzBBNjZCNDQ4Cis6MTA0OTYwMDAxN0I3M0RFNzY5NEUzMkZDNkVEQjNBNzVGMkU1MTlENkIyCis6MTA0OTcwMDAxMTQ2NDVBMkIzOTE5RkJERDcyQTY3NEYyMEZFREM4ODIwCis6MTA0OTgwMDA0NzZFQjdGNjMwRjQ2MkZENTA0QzVCODVGODlDQkQxNzVFCis6MTA0OTkwMDBDMkI4MUZDREE2RUZCMkQxMzE3NEI3NTVERkNEOTJBREZECis6MTA0OUEwMDBGMzNBNUVGM0Y5MDg1NEJFREYxNkZEQjM3NUZEMjUwNzMzCis6MTA0OUIwMDA5RjhGMTNFNTY4QjZDQ0U1RkZEM0NFMjc4NTc4RTI3NkU2Cis6MTA0OUMwMDBDNDZGMzJGNUZGRjc5QUVGQUMwMDFCMjdGOEQ5OEYxM0FECis6MTA0OUQwMDBCMjhEOTNBRDVGQkJCRUQyMUI0MDkyRDExRjVGMEU2MTAzCis6MTA0OUUwMDA4NEE3Nzg0MTFDRDA4RkVGMENFQzBCRTlDQ0RFOTNENTdCCis6MTA0OUYwMDA0MTRBNURDMUExOTBDRUY0QUUxMkQyQ0EzMDc1NTc4NDNGCis6MTA0QTAwMDBDQkYwM0JEQjFGMDlGOUU4NkMyNUJEM0E5MkVGNkE0NTE0Cis6MTA0QTEwMDAzREJBMEVGMzI0N0Y2QkE4N0NDMzQ4N0UyREU1NkY5QkM3Cis6MTA0QTIwMDBDNEU1RjMwNEU3RUQwM0E4ODdBQjUxRDkzMEI4RDYwRTNGCis6MTA0QTMwMDBCQ0RFOEM3RTgwRDJERDgxMzA5QTFBQTU4MTMwQTAxRTJBCis6MTA0QTQwMDAzNkNBN0IwN0RFMEQ3OUQwOEVEQjFEMDAyRkUzRjcxMjBGCis6MTA0QTUwMDAzNTAyRTZGNkVCMDZGRTFBNTI1OTc5NDA5NDA3ODI1MTY4Cis6MTA0QTYwMDA0QkY5ODY4MTkzQ0E0MjBDNDUzRTUxRUUwQkM1QThGQzFBCis6MTA0QTcwMDBCNjgxNzk2NTFBREEzMUJCMDMyQTdFRjc1N0M0NjlEQzNGCis6MTA0QTgwMDBCMzdGNzE4RDgzRkNCMThCMUM0OUI3NDk1RjI1MTZDRDZGCis6MTA0QTkwMDAyMkZEQkU1ODhBOURFNDY0RjRBOEZGNDU4RjA3RUQ4Nzg4Cis6MTA0QUEwMDBDNEVFNjkxM0YwM0JEOTNDRTQ0RjkyRkYyRkVFNDczMTNGCis6MTA0QUIwMDA3Qjk0RUNBMDgwN0FFMDE0NDEyRjY3OUExRTNENzg1RUNCCis6MTA0QUMwMDA0MTdFNjA3RTRFOTExMEU3MTQ3QTQzMkE4NUUzRUI4NUEwCis6MTA0QUQwMDA5QzRFOENBM0QzRkU2NzZBQkYzN0VEQUZBNkZDM0U0QjVFCis6MTA0QUUwMDBCRTQwNEQ0NjcwMUYyRDA3OTk3RTYwRURGRDExM0Q4MjQxCis6MTA0QUYwMDA3NDU3MkE3OERFMTkwOEE3NTA3RjZDRkEwNjg0MTE2QzY3Cis6MTA0QjAwMDA5OUUxMTNFQkFGOUJDN0YyMUFEMjNGNEFFREJCRTZGMDM3Cis6MTA0QjEwMDBCQzEyOEFFOTk4NEZDQ0U0Nzk3NzQ1M0M4NUY5MzUyNzcyCis6MTA0QjIwMDBGMUZDMjY4M0NFRjA4ODk1MEZFMDRGNDRGN0FFOTFCQ0EwCis6MTA0QjMwMDBCNzBEQ0IxMzA2REY4MEJGMERDQkQ3OUNDMUY1NkNCOTg5Cis6MTA0QjQwMDA1Q0JGMTNGMUJGNjlBMEFCNkMyOUVCQkYwOEY5ODFGNTFECis6MTA0QjUwMDA1RkI0Mzg0Q0Y0MzJFODcyQTdFNkEwRjVENkEwQ0I5RDNFCis6MTA0QjYwMDBEQTJDM0EyNzk4NTlDNDMwNDExM0QyODgxRTMzNEZCOEYzCis6MTA0QjcwMDBERUExRTI3OUM3Mjk4RUU0ODMxMjlFNEZGNTc4MDc1OUFBCis6MTA0QjgwMDBCRDREQjVCM0E4QkM1Mjc2MEFGRjAwRjc4NzNGMjhGQzlECis6MTA0QjkwMDAwMUQ1Q0NCQTQwQkJFMzQxQjE1RUVGQkM3RDZBMTFCNjMyCis6MTA0QkEwMDBEQkI5Rjk3RjExQkRDRjc0MTY1M0JCMzVCNUZDRkNFNkZDCis6MTA0QkIwMDAxOUI2NEVBMzlGRUVFOTE2MEZBNTNGNjJGREM1OThCRTNDCis6MTA0QkMwMDA3RUJDQzU0M0U5MEY1QTU0NEExRjYxN0ExQ0QzMUU1NjU2Cis6MTA0QkQwMDA5RTQyQkYwMzJCNEZCMTdDRkZBMEEzMTFFNUZGRjYxNjQ5Cis6MTA0QkUwMDA2NjlBQjFGNkI3QjU3ODNFOTZBN0EwQkY0MkE1RkNCQUMzCis6MTA0QkYwMDA5NjEwRTVCRkVENjg1QUUxRTRGRTE0RkYzNDM2QUZBNzI2Cis6MTA0QzAwMDA1RUFBMjFGRjVFRjg3NTQ3MzQ4OUYzNTZBMTc0NTE1REExCis6MTA0QzEwMDBGQUJCODE5RjZGM0IxQTU2MjJCRkZFNzA1MEE2NzE0MEFGCis6MTA0QzIwMDAxRUVDM0UyNTczQkQzNkFDMzdFMzc1OTlGNzE3MUNEQ0Q3Cis6MTA0QzMwMDA3MDdFMzA2M0JENEVBQ0Y3RDg3RTBFMzc3ODUyQkUyQ0Y2Cis6MTA0QzQwMDBGREY1MjBCQ0QzREUxMkYwODU1MjI1NTlGQTVCOEZGNUI1Cis6MTA0QzUwMDAxRUREMkZFMDBCMjRCQjRGQ0U1Q0VGMEUxQ0Y3RTRCNzNDCis6MTA0QzYwMDAwNDdDMTVDOTBERTc2NTFFRjdGQkQ4OUZBNzg0REIyQkQ1Cis6MTA0QzcwMDA5RjQzN0Y0NjFEQUQwMzVCMjU5MzNDNkY1Q0EyNEIwRUFCCis6MTA0QzgwMDA0NjY3NEZFOTYwMUNFQjREQUY4QjRCRDU2Q0ZDRTAyNUM0Cis6MTA0QzkwMDA3MUM5MzE5RERCMTkwRTk2Rjc2MjNGMkMzREE1OTY5NUEzCis6MTA0Q0EwMDBCMzdBMUJCMUJDQzA1NDhFRUQ1OTdBRDIzNDVFMUVGQzZGCis6MTA0Q0IwMDBBNkI1N0M0NDZGMzc4MzYxQTdBNkQwRDkxQUZBOEEzNTg2Cis6MTA0Q0MwMDAzRkQ1QzFGNUUzQjNDRURGRDYyM0JGNEY1NTc4Rjk3RjhCCis6MTA0Q0QwMDA2MzFFRURBRTQ1QjZGQTNFOUVGRkFENTFCRjkwQjc3NzZECis6MTA0Q0UwMDBDODNDRUYyOUUxRjMyRURDRUM0OUEyRERCNTdFNjE0NzNCCis6MTA0Q0YwMDBFOEQyNDA3QUJFQzVFNzI0NkEzMTZGQ0M2RkZEMzk5QjlDCis6MTA0RDAwMDA0Mzk3OUFFNjUzRkM4NUJCNkIyRjlEOTY3RDVERjE2QUI4Cis6MTA0RDEwMDAwRTg4OThENkREQTk3REQzMjA1MkZBQ0ZBRjVGQkU2QTQ4Cis6MTA0RDIwMDA1QTM3NzA1RDk5MjBENjg1MDk3M0Y5QkFDMkYwQTY3MzE3Cis6MTA0RDMwMDA3Qjk1RTM2REREMTk1NkJDMTU5RDY5QzVEQkJBMzNBREI2Cis6MTA0RDQwMDA3ODJCM0EyQjM3REU3RTI5QzZDRjg2M0YzNjdFQzQzQzkxCis6MTA0RDUwMDBGRTg2NzNBREUzOTc5QzY3MUQ3RkMzNzlENkYxNEJDRTdBCis6MTA0RDYwMDBGRkQ0RTNBN0NDN0NEMzU3NkYxRDVGNkRCMDhFREZENzI4Cis6MTA0RDcwMDA2MDFENUYzREZCRDM4RDZGRDBBNzZCRTAyRUVCQkE1RTVECis6MTA0RDgwMDAxNzA1MzNGRDEyMDM1RDIxQ0JCQTFFRTZFQkJBNTFCRTA3Cis6MTA0RDkwMDA2NkUwQTcyMTVDREZCREI4QkVBMzdGQTY5NkFGRUYzMzY4Cis6MTA0REEwMDBERkY5Mjg4NDdFRkI3NTY3RUMwOUUxM0U2MzFEQUJCQjMwCis6MTA0REIwMDA2RjVBN0FEREQ4NzlDNjhEOEU0NzU5QkZERjM5ODlBRkYyCis6MTA0REMwMDAzMzAzNjczQ0VENDFGREJGQTY5NkFGMzMwOTcxOUVEQjBGCis6MTA0REQwMDBERDkyM0E3ODhEMkIzREFGODI4NDk3RjY3QjQ2N0VDNDc4Cis6MTA0REUwMDA1RTgyREZENTIzMUYyNjZBMURDMjVFMkE2QjhCMzA1Qjc1Cis6MTA0REYwMDBENDczOTI2Q0M5Nzc0REUzRTUzN0I3OTdCNUU5RTg0QkMzCis6MTA0RTAwMDA5MUY1MzI1Qzg3RkNCNUYwRTc2OTE5RjY1QkM2RjgwNkU4Cis6MTA0RTEwMDAzQ0Q5QzdFN0ZCRTJGNEY4OTM2REUzNEZCNjhDNkZFNDNGCis6MTA0RTIwMDBCREQzNzlCOTJFRDczNDIwM0M5QkM0QkVGOTA2Rjk3NzlGCis6MTA0RTMwMDBBNDVGOEUxRjdDRDNEQjIyMzU2NkY4NzgzRTBEMUZDRjMyCis6MTA0RTQwMDAxQkYwREQyQUNGNjhEMDZCRkU5RUYwOUQ2NkMzREY2OTQ0Cis6MTA0RTUwMDAzNkZDOUQ2NkMxREYwQTc5RUUzMUUxQ0Y1RUFGQzdDNjkxCis6MTA0RTYwMDA5RjU3NDNFNDI2NzkxQ0NBMTE5MEJEMTk5NzU1NzExRUFFCis6MTA0RTcwMDBDNEZCQUI5Mzg1N0NFMUY4MThCN0IzNDQ0OTRFQTlFMjczCis6MTA0RTgwMDBFNTRENkM1RDVCMkM4QjdEOThBOERGNjhDQjFCRjYyQjBBCis6MTA0RTkwMDAyRTQ3NDdDOTBGOTNEOTdFNTU4MEVCNkQ2Njc3ODQxRkU3Cis6MTA0RUEwMDAyNEJEMUUyNjc5NEFFRjNCQjgxRjQzOTZBMzkxNjgwNjlFCis6MTA0RUIwMDA3RDcwODdDQ0NGODcyNTM1REM4QzcwQ0EwMTg1RkNBODM2Cis6MTA0RUMwMDBEOUVBRjdDOTkyQjBBRjc1Q0JGOTRFMTEwQ0E1OUMwODgxCis6MTA0RUQwMDA0NzA4MjgzRTA5MEU3RjU5QkI2MEZBNjgzODE0MzkxQTEyCis6MTA0RUUwMDBDMzcxOUNBQTAyRjdCMTcxREE4QjJGRDRDQzcxNEM4RkFECis6MTA0RUYwMDAxOEYwODQyMjA0OEZBMjcyNzgxNDM5MUNDOUU0MDdCRTBBCis6MTA0RjAwMDA0RkU2N0UwQkEzMUYwNkExNjgzRjA0NjgyNzFBRjBBRDg5Cis6MTA0RjEwMDBGNjQ2OUI5N0EwM0Q1RkFDMTA5RURBMEJBQ0U3RTVCRjcxCis6MTA0RjIwMDAxMUYzN0E0MUE0RUQ1OUNFRkQwMEEzMzEzMDdFNjlGQzI2Cis6MTA0RjMwMDA1Q0IyNDM1N0NENkRGMDIwNUY2QTEwRjZBMEJGQkUzRDU2Cis6MTA0RjQwMDA5MDM5OUVDODQ4RUQ3NjY3ODJEOUE1OThFRjYwNzYyOTlBCis6MTA0RjUwMDBBNkVEODEyNzFBNzFERDM5ODg3QzlDRTE1QzdCNDRDRjBBCis6MTA0RjYwMDA4NTFEOTAzMkVEM0ZGREI1M0U0ODU5RkNBNzQ5ODJEM0RGCis6MTA0RjcwMDBBQjk1NThCRUJCNDNFNTk2NzZBRUYxMzJEOUYzRUQwMTYxCis6MTA0RjgwMDA0NzEyNDM4REM2ODJCRjQzQzA2RkQ0RUI5NEUzMUUzNUY2Cis6MTA0RjkwMDA4RkZEQjIzQjY0ODVGN0Y4RTE4RkI3RjdCQkZBRDU0Q0NDCis6MTA0RkEwMDA3MDdENTY3ODMzRjhDQURFQkY1MkFBQzRDOTJFOTZBM0M0Cis6MTA0RkIwMDAyMTMzRkYzQjVEOUM0Rjk1NTI0RjlDREJFQkQ5Q0E3RDYzCis6MTA0RkMwMDBCQzdEODA5NUEzNUQxQzg4NkE3OEZFQzI0NDlFRTJDNEM1Cis6MTA0RkQwMDAzQzI4MDcyNkZDNEMxNEVEREE1REUyM0MxQUUyRTRBRjEzCis6MTA0RkUwMDA5NUI0NzgzM0YyOTFBNzQyQTFGMzAxN0IzQjIzRjU4OTc1Cis6MTA0RkYwMDBGNjlEOUY3Q0U3MzU5MjhGNzExRTkyMEY0OTYzRjI5MzY1Cis6MTA1MDAwMDA2MTlDQzdFNEM4NzgxNzRCMzdDOTkxMDk5OEJBOEUzOEE0Cis6MTA1MDEwMDA2Mzk5RTQ2NDlDOEJDQkIxMjcxQUQ1M0MzQ0Q0MjQyMzAwCis6MTA1MDIwMDBGQ0IzNDVCRjdEMDZGQzdBOUNDRUJERjI4NUJGM0E0RkVFCis6MTA1MDMwMDBGODY3QTdFMTlGRTE5QTQzRjA3RjBFRDM2Q0YwNEYxNzFBCis6MTA1MDQwMDBGMDk0NDI3ODAwRjdFREM4QTBEODJGQzAwNTlBRjk1QzFCCis6MTA1MDUwMDBBRTU3RjQ1QjJBRTAwM0I4OEVFODY2OTQ3NzA5M0NFNDI3Cis6MTA1MDYwMDAzQjlGRjk3OUNFQTczNzNEOUY0NjMxOUY3MzczQ0RFN0JDCis6MTA1MDcwMDAwQjYyM0VCRDJFQkU1RTc5MUFBMzVBODhGMTU1NDkxNkMxCis6MTA1MDgwMDBCQTJDMTVGRDZGMUVBMUNCNzVDN0M0NTc1RkNENzMxRTFCCis6MTA1MDkwMDA0QkQzRjM1ODIyRjhFQUQyNUNGMzg4MDk3OEZBOUMzMEIzCis6MTA1MEEwMDA2RjNGQzZDRjRDMTZFQjBEMzQ1OUU4QjJDNUUwMkIzNzM1Cis6MTA1MEIwMDA1RjM3MDBBRUI3RDBFNTc2RDE0RkJFRjM1OTlFRTc3QzlGCis6MTA1MEMwMDBCNkE0RTdGMzNENDE5NzVCNzJDREM3NTRCRjU1RDQ2RjhCCis6MTA1MEQwMDAxMzcyNDU3NkNCMTZENzhFMzZCNDNGMUU5M0EzMURBRTAyCis6MTA1MEUwMDAzOUU5RjE1OEJENEU3M0JEODlBQkJCOEQ3QTZCRjBCQjBFCis6MTA1MEYwMDBCNDY4QTQ1RThGMTg1RkQ4NDVGN0QzN0U2QzM1REExODk0Cis6MTA1MTAwMDBDQ0JFRjlFMkVBMTcxQUQwMUU2N0VEMzY1MEZGNTFCRTQ5Cis6MTA1MTEwMDA2RUIyNzZCNzk5RkI5RkJERkE4RTM2NTFFRjRFQUNENzgzCis6MTA1MTIwMDA3QUY2MTFBM0ZGNERFNkZFQjdCODUyMDYxQzc3MTMxQ0EyCis6MTA1MTMwMDA4RDIzRkRERDYzQUVCN0Q0RDVERkM2Q0YwOTJCRDQwM0Y1Cis6MTA1MTQwMDA3RTkzNUQxM0NBRUZEQ0M3MTU4QzI1MDZEMTVGMDkwNTc4Cis6MTA1MTUwMDA3RDY4Nzc3NEM4RjEyRDgzQzgwRkNDQzg3QjkwN0RCRjY0Cis6MTA1MTYwMDBDOTFEOTEyNEI2N0VBQTkxRjhDMzU4QUY0NDc3QUI0RUJGCis6MTA1MTcwMDBBNDVCNDNGQzQ3OThENzFEMTBDNUI4QzgzQkZEQjc2RTZDCis6MTA1MTgwMDBDMUZDMEFEOUEzQkFDMzY4NkY2OTc0MzRENDFCOTQyOUNCCis6MTA1MTkwMDA5RTY3QjUxNEQzNzE1RDNDMjRDNzlFNzE5MUREQzNCQTdGCis6MTA1MUEwMDA2NEUzREM1NEFBMjVCQjI1RjRERjgyQzRFRDBFMEVEN0UwCis6MTA1MUIwMDA3QUZGMjUwOTg0QzNDREUwQzJGOEUwRDUzNkI4RDg3OEE3Cis6MTA1MUMwMDBCNDJGRUYxQUM3RTM2RDQwODY1QTE5RkI3M0ZBQzJEOEExCis6MTA1MUQwMDBERkMwQjgxQjA5REU0NEFCNUJDNUY2ODkyOTM3MTJCQ0JBCis6MTA1MUUwMDBBQzJDNEFGMTc5QUUzOEMxREJFOUYyQTgxODhGNzdBNzY5Cis6MTA1MUYwMDA3RkQ5MjY4Q0I3NUJBMTE3NTE3RDgyMDNFNzNGQjk5QTBGCis6MTA1MjAwMDBFMEY3NDIzQ0I1QTQwQUQ1NTc1RkM0ODFGMDJDNTIyODgwCis6MTA1MjEwMDAyRTM5MTFEQzQwRkJEQkVFNDU2QzkxNjNFMzc2RDc2RUYzCis6MTA1MjIwMDBEMEIxRERDMTQ1M0U4QUFGRjMwNkZBMDBFM0FENEFDRjA3Cis6MTA1MjMwMDA1NzAwRTM4MEJDQzEzRUIyMzM0QkNFRjNGMTdDMDVEMEM2Cis6MTA1MjQwMDAzODI1OUZFN0YxQjIyRTE4NTRBQjU5NUE5QUUwNzFDNzJFCis6MTA1MjUwMDBEREI1NERGQTEyQjQ2M0U2RjI3ODU0RDAyMzJGNjE3Q0E5Cis6MTA1MjYwMDA1QjMxODg3RkNFOEEwMUVDREYzNUQxMDlDRTcwOUFCRUUyCis6MTA1MjcwMDBBNTdEMjNFRDhCNjIxOUU0NjVBNDVFMzJDRjdBQTlGQzhCCis6MTA1MjgwMDBFQTk1MjRFNEZDRUFGNUU1NTkyRjk5NjdCRDE0QUZFN0U4Cis6MTA1MjkwMDA4NjBCOEEzMkM1N0I4Q0YwRkQwMjg1RUMwRjIzQkVBREY4Cis6MTA1MkEwMDA5MDU5RkUyM0Y2NDkxNUI3REJDREY2OEEwQjk0QjRCREIxCis6MTA1MkIwMDA4MjdDRTY1QzlDMTM4RTE1NkZCNjA2Nzc5QkVDOUJBMEY4Cis6MTA1MkMwMDA1MjEwQTRGREM2Njk3MDFBQzlFNTE4RUQwRkI1RThDMTAyCis6MTA1MkQwMDBEREFFQjFFNzhCMTI5NjMyRjlDOUM3QUFCRjA2RUQzRDI0Cis6MTA1MkUwMDA3N0Y2NzJGRjhDMEI0M0E0Q0ZBNjdGNERBNDhCNzkzQTNGCis6MTA1MkYwMDA5MzdEOUY4NjY5QjNDODdGNERFNDE3Mzc0NzMyOEM1NzNCCis6MTA1MzAwMDBBRjcwM0Q1QzBCRDE5Qzc0RjAwQUY4MEZFMDk5M0Y2QkQ1Cis6MTA1MzEwMDA1MjJCQjNGQTE5Q0VDNzhEMzQzMENENjFCMzFCQURGQTIxCis6MTA1MzIwMDBDRTIzRUIwRDc0Q0U1MUNCRTMwN0REMjg4QzI4Mzc2MUZCCis6MTA1MzMwMDAyMEZERTI4Mjk0NUE0REU3OEI5MUMyMjVFM0QzRjJFMzNDCis6MTA1MzQwMDAwQThEMjdGOUY5M0Y2NTRFOTBFNjEyN0RDMjg4NDczQkVBCis6MTA1MzUwMDA5RkQ4RjkyMjYwRTM4QjRGQ0IyNzE3MUYyNzNFRjEyN0Y5Cis6MTA1MzYwMDA5Qzc5Qzk4RkJGMkZDRjdBQzkzQ0VCQTVGMkFCMTc0ODA4Cis6MTA1MzcwMDA0OEY5RDVFQkNCQjM1RTMyQ0Y3QTI5NUU2RkNEQkYyODJCCis6MTA1MzgwMDBDMkRGN0FGRTJBRjRDM0Y4QkZFOEIxRTRENzdDRDE2NzY0Cis6MTA1MzkwMDAyREZGNTJDMDkyRUYzOUQ3REEzRTcwOUVCNTdEQ0Y3OTlFCis6MTA1M0EwMDBENkY2ODFGMzc5RkIyNzNCQkU3QTM2RkE3OUYyOTU5M0VDCis6MTA1M0IwMDBERkZEOEQ3MjUyRUJDOTVEQkY2NEQxMTg3MkU1RDE2OTEyCis6MTA1M0MwMDAzRkU5OTUzNTQ4MDU3MUZENjJFQjk0NDQ2OTI0OTlDMTI0Cis6MTA1M0QwMDBCRTdCNEVDOEZGRjMyRUVFQzc0OUM4M0FFRDZCRkZEOTJFCis6MTA1M0UwMDBFN0Y5MDM4NUZCOEQ4Q0Y5OEUwNUFGQTE3RjdGRUYxNDY0Cis6MTA1M0YwMDBGNjk2RERGRTFBRjFFQjFDM0U3QUY0NTRENDIzODBDMUZDCis6MTA1NDAwMDBEMkEwNkE2QzZBRThDNzA1NUYxODQzNDVCQzM1N0Q3NDU1Cis6MTA1NDEwMDAzRTZERUZCRjBCQ0ZFQkI4REYyNUQ0NjQ4MkUzMzkzN0E1Cis6MTA1NDIwMDBGN0FCRkNCQ0FBMjM0NEU3QjU1M0VFMDhFMTNFQkQ2QkU1Cis6MTA1NDMwMDA5Mjk0RDFDRjcyNDRFMUU3ODJENTMxM0ZEOTE5OUQ5QTM4Cis6MTA1NDQwMDA4N0Y0NjFENzI0N0U4RkE5Q0JENTQ3RkVFM0FFMkE2QkM0Cis6MTA1NDUwMDA3QjhGQjAxRjhFMjg3Q0JDQUU5NTcxNDBGQjdGRjU5NDhFCis6MTA1NDYwMDAzQjlBNzE1Qzc3RUE1RjQxNjM3MDdGNzc1MjlDRTI0N0I5Cis6MTA1NDcwMDAzQkRDN0MxRkUwOEVFODgwRUI4MjQ3RDNFOUZDREQwRTRECis6MTA1NDgwMDA0RkMyODgxQjgyQkU1MDkzNjlERTRENkVDRTM3M0Y2Nzk4Cis6MTA1NDkwMDBGM0M5Njc1RUVGMjgwQUQ1NTcyMzFDN0ZEOUYwQjVFMzFGCis6MTA1NEEwMDAxOEYxNzVCOTlCRjdBQjg1QkM4NEFGODM3NTQwRUIwOUU4Cis6MTA1NEIwMDAxMkQyQzlFODQ4MjRENkYwRkYwNkMxQ0M2RkY2RjUxODIxCis6MTA1NEMwMDBDMDI3RjhFRDI4RTUzNUY5RTI5Q0ZDRDQyNUZDMzBFQjRCCis6MTA1NEQwMDBEMDBGQzM1MkVERUVBRkU1RTRFNzRFQjE5RUJCRTFFQjdBCis6MTA1NEUwMDBENEFGNUI4QjQ3NTBERkY5NkFGQkUwNTJDMjJGNDQ2MEI4Cis6MTA1NEYwMDBCQ0UwM0I4MkI3M0RFMkMwRjMwNTgwRjA2NjY2MjdGQTY4Cis6MTA1NTAwMDBDNjc1ODU1MzM5RkM2MjlFNUFFQjdBNzdBQ0VCRDk2QzQxCis6MTA1NTEwMDAzNzVCQ0ZGQ0U5RjVFQzIwRjQ5MDEzNzY4RDAzQUVDODMxCis6MTA1NTIwMDA3NEZGQzM1OENGQjRFMEM1MzlFN0RERDVDMkZENTYwMERFCis6MTA1NTMwMDBCNzQwM0ZDRUU3NjUyN0YxQjNBMzA2RjRGNThDNUVFRUU2Cis6MTA1NTQwMDA1QTk5RTIxQ0RDOTEzRTVDQTRDMTUzMDMyOTZGNjFGNkI5Cis6MTA1NTUwMDA3OUJEMkFGODRFMEJFNTFFNzdBREMwRjcxQUE0RDM4OUEyCis6MTA1NTYwMDAzOUVDMkM3NDM0QjM3REQ5QUI5REY3QUZDMkZENUJGMTQwCis6MTA1NTcwMDAwMjJFMDcyMzdDMkZGNzU5Rjg3MzU4RTE3RThEMkVBRjRBCis6MTA1NTgwMDBENjRBRjEyQzU1REMzRjYyRUZCNzVCQzA2OTk3QUI0NDVDCis6MTA1NTkwMDA5NkZCMzQ4NkRDRkU1NUQxQjgxRUYyRjQ5MURGQzE5MDQzCis6MTA1NUEwMDAyRjRERkI1N0QyNzM1RDkzREEzQzg4QTc4NEI2ODFGQ0ZDCis6MTA1NUIwMDBDNDA3NkIxNEMwN0IzMDc2N0QzMDAyODdDMEZGNTlEMEEyCis6MTA1NUMwMDBFM0MxRkI0QUREMkYzQkU5RkVBQkJEOUUxNzM3NjUyNkU1Cis6MTA1NUQwMDBCRjlFQkZENkFBN0ZDN0QyMjc3NzdFNEE3REYyMTM0M0VDCis6MTA1NUUwMDBFRTQ3RUIxMzVBN0YyRkVGNkNERjg1RjRFOUYyNzJGRjgxCis6MTA1NUYwMDA3NTQ5QTMwRTRCNENGM0VEMTFFMzJGNzY4Qjc1QTE4MjA5Cis6MTA1NjAwMDBDM0QxRTU1MkVCQ0Q3NDJBNjZERkVCQ0Q3QTMzMEI3RDQ3Cis6MTA1NjEwMDBCMkQxRkQyMjBDMDY5QzkzODZDMzNFQkY4N0RDQkM1RUU0Cis6MTA1NjIwMDAwOThFM0Y2RDZDM0M4Q0E2MDNDN0MzMkE3NzY2M0VGODkzCis6MTA1NjMwMDBBQ0U2RDNFNkNFOEY4RkVGMTZGNUVFMTY3ODM1RTYzNTZECis6MTA1NjQwMDA5NjlDMThGREY3MEI3QzE1MkZCMEU5N0Q1OUI3RDBERjdDCis6MTA1NjUwMDA2OUUwQUREMTU2Q0Y2M0FENjdFMDQ3NzY3MzdCQzU1ODNGCis6MTA1NjYwMDAyN0M2RUFGRjJEODVGMzg3QkRGRjZDNzJGODlCMTEzOUMxCis6MTA1NjcwMDBENEM5MkY2QjhDRTM4NjFGNDQ0OEVFOTg1RUVFOUUwOURBCis6MTA1NjgwMDA1MDEwMTgyNDdGMDFEQkVCRjM3OEE3NjAxNENDRTczQUM1Cis6MTA1NjkwMDA3NkZENjVFOEZGNkNGQUM4QkU2RjE5QUJCRTEyNTQ3Mjk2Cis6MTA1NkEwMDBEQTQ5ODY1RDUzMjJFRTREN0E0NDNDRjAwNjI5RjMzOUZGCis6MTA1NkIwMDBDRkIwOTAyM0E2RDhGMzhBRUJDMzMwMTFEQ0I3NDExNEU2Cis6MTA1NkMwMDBDNEZEQkZDODQwMkJDQjhGMEYyQjVBMzdGQTNGRTQ4NTYwCis6MTA1NkQwMDAwMzVCNTk3RURDQ0ZEQ0QwMUQ0Njk3Q0I4MjgxMDE4NkVGCis6MTA1NkUwMDBBRjM1MTE0RjE0Q0IyNzc4QUE0NkVFNjlGNTlEOEE3RTE3Cis6MTA1NkYwMDAyRDZFNzc4MUYzOTZEN0YwMUVGMEY4OEI2NDQwQkNCQTFDCis6MTA1NzAwMDA2MTFFQzU2OTFGNUNDMTc0RDhDQ0QxRjA4Qzk3MDEyNjhECis6MTA1NzEwMDA5NkIwNTRGODA3RThGQzEwQjc5NDVGQjFBRDhCOEI0QzkyCis6MTA1NzIwMDA3OUY0MDM3QkFDRUI1RUJFRjNCNkMzOTNBREREOThGMENBCis6MTA1NzMwMDBBNEY3QTFGQjcxN0MzN0U0NUVENzhFNzU3RTIzNzY2RDZFCis6MTA1NzQwMDA5RUYzMzJFRUEzMTlERkFCODY5REEwRTFGREY2NjE4OUUxCis6MTA1NzUwMDBEMjEzODZGRDk0NTYwRTdCMjk5RDM0NUMwQTFBMjM1QTc3Cis6MTA1NzYwMDBDNTcwMzFBNTEzODcyN0QyRjdGMkUxMzI0QUNCODYyN0RECis6MTA1NzcwMDA1MzFBMUFBRUEyQjQ3OEY4MTQ0QUQ1RTE5MzI4NUQyRkQzCis6MTA1NzgwMDBFNEIwNjg3ODM2RTU4REZCNkY4NUMzMzMyOTVGMzBGQzY0Cis6MTA1NzkwMDA3OTRBMDNDM0YzNzhCOTM4NEY1REJGMzIwNkU4QUY1Njk0Cis6MTA1N0EwMDA3MDFENjJGMkIxN0FFMTUyNUE5N0VDRjM1QUVGRTFFQkQ1Cis6MTA1N0IwMDA3MDg3QjgyN0RDNjFEM0RCRkRBMkZDNTEwRjk3RkJGNUE2Cis6MTA1N0MwMDA0MjJFNDA4RTgzRDk2RjdFOEZBOEI3QkUzQTQ2RjY3N0I5Cis6MTA1N0QwMDA4N0IxMUU5NjJEQjVBQzg3RjZGQTFENTlFRTI3M0Y2REExCis6MTA1N0UwMDA5NDBCNzhBMEI2NjkwQ0ZBRjBGMzU3NzczMDQ2RjcwNkI5Cis6MTA1N0YwMDAwMDYyQTQ5NzQwOEU1OUY0NkU4NzAxN0Y5RUY3MDhENzA4Cis6MTA1ODAwMDAyRjdDOUFGOEQ4Q0IwNDE5NDMwQkJENUZCOEJCRjkwMUM0Cis6MTA1ODEwMDBENDNCRTdEQzc4QzU2RTI2NzcxRkI4NjMzNzc5NzBEQzM4Cis6MTA1ODIwMDAyRjVDNDU0Q0Y3RkQ2NTM3ODc1MEJGQUQ1Rjc4MDdERENFCis6MTA1ODMwMDA2RjQyRjMxQkUzOUEzQkNGQjkyNUZFMDA3MTFEQTNDQjRBCis6MTA1ODQwMDA3NDZBNzdBQkM3NzQwRURBQjVGNEU2RTY4NzU4N0Y1QTA4Cis6MTA1ODUwMDBCQjAzMzQxM0JGNTZERUUyMDNDREFDQkYwRTk3OTY2MTk3Cis6MTA1ODYwMDBGQjhBMUI0QTJDREZDQkFGMjlCN0I0MzNFRTQ5ODQyRTE5Cis6MTA1ODcwMDBBQkI2RDQ1MzE3OUM2Q0E5NTczODdGOTZCNTlEMzgyNzgzCis6MTA1ODgwMDAwRkQ0OUQ2RTY5RTcwRTE4NzhFNUU3ODg4Q0ZFOTZGNUQzCis6MTA1ODkwMDBBMzUzQ0E0Q0M3Qjg4N0VCQ0I2QzdDNzNBMTg3QUY2QkEzCis6MTA1OEEwMDBFOUZFNzNEMzJENUJGRkY5REUwQjQ5RjM0N0Q2Nzk5MDAwCis6MTA1OEIwMDBCRDFCNEYyQzVBODBGNjk0NUI4REQxM0Q5NTYzQUY3RjE1Cis6MTA1OEMwMDA3Q0U3OTE2RjNEQkJCRTJBNDQ3RDU1OEFGQTQ0QTIzNEUxCis6MTA1OEQwMDA4MEZBQUExNEY1ODg5NzUyQTNERUIxREVCNzVEOEJGQTgxCis6MTA1OEUwMDAyNjYwRDIzNzczOThEQzY3RTA4NzgwMzdCN0JFMzk0NUNBCis6MTA1OEYwMDA5NDRGRjE3MjdEQjM1NkYwOTU5RDZGNDJBMkRFNUFENDVCCis6MTA1OTAwMDAzN0QzQzZENjM3MjE2RjZFN0QzMzUzOENGNzhGRDYzNzlBCis6MTA1OTEwMDA1REIzRUU4ODdEOEJFNUJDQTdEREREN0MzRjRCM0I2NzRGCis6MTA1OTIwMDBERTQ4NzlBNjJGNjQyRjJCRUYzQ0Y1OTZGOEZEMjYzRDM3Cis6MTA1OTMwMDAwMjg3RkY5M0YzQTVFMDg3QTJCOTU2RkQ2MUY0NUYxMERCCis6MTA1OTQwMDBCNkU5MTE0MzFFRkU0NkI5M0UyMkY4MzUxQjdERjY3RkFGCis6MTA1OTUwMDA0QUI5M0U3MjlDRTRGQTg4QTc3QjAxOUUyRkU2MkJEN0JBCis6MTA1OTYwMDBBM0VCMUZERjc5RTQ1QjRGNkY4MEQ0NTlCODJGOTlFQTFFCis6MTA1OTcwMDA0QkFFNDJCRjlCQTMyRkNDRUZFNUM1Mjg2RUE3RUIzOUZBCis6MTA1OTgwMDA5N0YwRjM3MEZGREYyQzRGRTQzQ0U0OUY1OTlFRTgyMjMwCis6MTA1OTkwMDAyRjZCN0Y3RDk1MzYwMUQ3Njk5NkZGMjI3RTM3RTVBMzcxCis6MTA1OUEwMDBCNjdDOTNBREZFNTc2Q0Y5MEI2REY1OUJDREU1MDk0REJCCis6MTA1OUIwMDA5QjgwRTc4Qjg5QkQyRTNBMUY0QzY4OEVDNjRDRkM3NEM5Cis6MTA1OUMwMDBBRTk3RjNDQjVFNEYzNDg2RkQ5RDk4M0M3OTAyRDI4NTJECis6MTA1OUQwMDBFNTJGQTVGRUJDQkMzRjk2QkZDQzk2NUY0QUUzQTdGMzdDCis6MTA1OUUwMDA1N0Q4Q0FBRkIyOTU1RjYzQ0IyRjMzRDdFRjNBMzJGOUFFCis6MTA1OUYwMDA0RTdBN0ZFMzk3MkVDMDdCMDk3NjM4NUYxMTdBQTI3M0M3Cis6MTA1QTAwMDBDQUNEQjEzNjJFOTczNzYxRkJDRUE5QjdDNDJGMDVFMkI4Cis6MTA1QTEwMDAwQkYyQTMzOTAzQjZGRDFGRTMzMzMzQkZFQzE1RkRGQ0Q2Cis6MTA1QTIwMDA3Q0QyOERCNDZGRUE2NEZCMjc4QTYzNDQzRjVFMDZGQzM4Cis6MTA1QTMwMDBGQ0RBMkJERUUxRDJBRUE0RkIwRjg5QjJFQkM5Q0ZEMUU5Cis6MTA1QTQwMDA1OUQxNDY3MTBBMDczNTg1Q0U2NzEzNTU5OURCMUI3RTAwCis6MTA1QTUwMDBBNkNFOEFDQ0U3MDhCRkM2MjA1QzkzM0QwMjM1RENGRkFBCis6MTA1QTYwMDA4NzYyNzBENDgxRUYwOTcxRkRCRUJBQUE4M0Y0QUI5MjRDCis6MTA1QTcwMDBCQTkyRkIzN0NBNjJFNERGQjg0RkQwNEYwOUM0QzlBRjRFCis6MTA1QTgwMDBFMEFFODg2N0RDRDc3NzhFRTBDM0VBRDdEQzY5RTA0MzE1Cis6MTA1QTkwMDBFQzIzNERGODIwMzk2Q0VCRkE2MDM3QUVBRjA5NkY2NjM2Cis6MTA1QUEwMDAzOUZCQjE5N0NCOTkyQjk0REZGOEEzRTdDRkQ3ODcyRDlDCis6MTA1QUIwMDA3OEE5MjVDM0JFMzZFMUUyNzFGMkZBMjRFRTA3OTBEOTQ3Cis6MTA1QUMwMDAzODY2QkY4MjdEQkM5MTc5REFGNkQ5RjcwQTNDMjVCQ0VECis6MTA1QUQwMDAzQ0NFREVFOENGMEVDRkMzQTJERUMzNUVFRTU3MzBFNjhCCis6MTA1QUUwMDAyNUFCN0M5Q0IxRkE3RjE2MkY2QkExMUY0MEI1RkIyMTIzCis6MTA1QUYwMDBBQzdBRUUxNjUxREYxNUI0RDZDQjg2OUY5NTIzRjhFMTJDCis6MTA1QjAwMDBGMTU4MDZGRjhFQzVFRkM2Mzg3QjExMkVEQUNGNjZERTYwCis6MTA1QjEwMDA4NzZCODdFNzUyRkNDNjQxMjhFOEVCQzY3REIzQUNCRTc1Cis6MTA1QjIwMDA4NjcxMUMzN0IxNkQxMkZBNDU1N0M5M0FDNTI3RTgxQTc0Cis6MTA1QjMwMDBBODBGRDJGOTI3M0Y3RkI4Qzk3OTcyMThGNTlENDdDNERECis6MTA1QjQwMDA1NTAwQzY1NTA0NEQ3MTg5QzJDRjc5QTdGRkQ2ODdCMURDCis6MTA1QjUwMDA3Qzg1RUU1NkYxN0Q5MzYxRUY2NDFFQjc3QTc4MDVDNUJBCis6MTA1QjYwMDA1Mzc0QjE5RDNBOEU3QkM4NUI5OUM0RjdBQzlDNDUzRDlDCis6MTA1QjcwMDA2NENGM0I5RDMzRTM5OUUyNEM2NTFGRTdEQkIzMEVBRjg3Cis6MTA1QjgwMDAyMzNEREJBMUYxN0IzNzFENzJDQzUzMzIwRDVERDUzQTNECis6MTA1QjkwMDBDOTZCOTc5NjNCN0VEMTFFMDdFOTUyRURGMTg3NTY3QzgzCis6MTA1QkEwMDA0REY3NzFGQTI2QzRGQTlCRjA4NjlCQ0RGMTQ5MjE5RkVGCis6MTA1QkIwMDA5N0NBODdCRDU2RjgzQTExQkUwMEMyMTVBNzc4RDI0NERECis6MTA1QkMwMDA4NUMzODE3ODNCNUVGMDE5RTMyQTU1OEUyOEUyMjUwOENCCis6MTA1QkQwMDAzMThBNTdGMTg0NjQxQUQ3RTFFN0Y4Q0QzNjJFNjhGMjlFCis6MTA1QkUwMDBGQkU2Rjc2MzhFMTczRTQ3RDZERjE4RTcyNzE5N0NDNDFDCis6MTA1QkYwMDA0RkRBMDI0RkMzMzZDQzNGRTdBNEY1RDQzRUNFN0U1RkVBCis6MTA1QzAwMDBFQzM0OUZDOTJGMkNBQjMxN0E3N0M2RThFRkRDNzEzQ0JFCis6MTA1QzEwMDBDRTVCQUUwMEYyRTMyQjEwNkRBQzYyRjM1RjU1QzFERkRCCis6MTA1QzIwMDA1OTk0MDM2M0M0NDU1NEQ4RkQxNUQ5Q0VFNUY4Rjk4OEQ1Cis6MTA1QzMwMDA3MTlFNTNGRjA3M0VBRTRGQzQwQjE0QzAyMDA1OEIxNjU4Cis6MTA1QzQwMDBBMTRBOUY4Q0YxMDI5QUM0REY4MTA4NEIzQ0FFN0MzRTk2Cis6MTA1QzUwMDBDNTkxMDdCRDlGNzVCRjhCQTk1RjI5QjIxRThFRkE4RkI0Cis6MTA1QzYwMDBBMTVGNzk5MEZDNUM5Rjc5QkY2M0MwRUI4NUJCQTk1RkE2Cis6MTA1QzcwMDAwQzREM0Q1QTlBRUUxN0Y1MkYzOTk1MEUxRjNEOEFFN0M4Cis6MTA1QzgwMDA2NjRFMzBGRTcxM0I1Qzc2RjA3QjU1NTA1RTQ4NzE4NzA2Cis6MTA1QzkwMDBBQjgzRDc3QkNDNzQ2REY1NTU1QkQ2NTc0NUVEQjg0RUNECis6MTA1Q0EwMDAyQUM0N0I5RkQ3NDQwNjczRjBFNTZBOTQyM0Y0MjM1NkY1Cis6MTA1Q0IwMDA1QzE2MTlBQ0NENUVDRjgwNTM2NkQzQ0ZFNDBGRUQ1MEE4Cis6MTA1Q0MwMDA2MkM5NTZCNDE3MkIwMzNDNUU1NThFRDNGOTQ4QTc1NENFCis6MTA1Q0QwMDAzMkFCQkJDRUM0QkYxNTRBMEFFMTJBQTg4QkU4MThDRjY1Cis6MTA1Q0UwMDBEODU5RUEwODYzMUM5NjBDM0RGQkU4N0QyN0U3QTI3MEIzCis6MTA1Q0YwMDAyRTc5OTUyQkU0RjdDQ0YzRDlFQ0IzQzY4MUFDMUE4MzlCCis6MTA1RDAwMDBERjU3MEI3RDlEQUREQ0E1ODQ2Mzk5RjRGMEUzM0VCMUQ0Cis6MTA1RDEwMDA4RUY5MzI5NzdGRUM2Rjc4RDQ5NzYxREREOTIxRjQ1NEY2Cis6MTA1RDIwMDA2NzMxNTNBNTlGRTNFQzgzN0MyMDU3RUM3OTBERjFCMEVDCis6MTA1RDMwMDA3QURDMzlCOUY1OTM2QUQ1NEZGRkU1OEZGQzA0QzdDOTAyCis6MTA1RDQwMDAwMUM3QjM5OUUwMDA3QzRDMjEwRkJCNUY1RDQwQzE4ODY3Cis6MTA1RDUwMDBFOTc4QTAyMEU3NkI4QzAzOTJDNkQzNzkyOEZENUI1QkMyCis6MTA1RDYwMDA3NzVGMEFFRDZFRDc5MjQwMDRFOUU3OEM2QzAzNUM0N0RECis6MTA1RDcwMDA4REI4MjA2N0M0RjdCNjgzRTgzOTlGQzcwN0Q1NzIzRjRGCis6MTA1RDgwMDA2Qjg0RkQ0NzcxNjRGMzczQzc4RDM5NkRGOTVGRDlFOTkxCis6MTA1RDkwMDBEQ0YyMENCRDE3NjFDMDZGQzRBOURCRTdGNUE0QkZFMTVECis6MTA1REEwMDAyRERGOUM0Q0Y4Qzg2RjFGQjQ5MUYxMEIzMDdFRDlDMDI5Cis6MTA1REIwMDBENjc3ODYxNEU4NkI1MTI5REZEQjEyQTI3QzRGOEI0NjI1Cis6MTA1REMwMDA2OTdCNEIyREE1NkJCMEU5M0M4Q0ZGODgyN0FBNzAzRkZGCis6MTA1REQwMDAxMjdBMjA3NDM5QUJCMjExNjk0MjcxMkQ1QjE3RTIzRTIxCis6MTA1REUwMDBCMjdCMjQwRkJBQzRFMEVFQzZGQkYxQ0MwRUZEQUI2RjY0Cis6MTA1REYwMDBDMzQyQjQ0M0JCQzVCQjNCQTA3NzJDNDRCQjJDOURCRjY3Cis6MTA1RTAwMDA2QjM1REE4NUREMjI4RTU2NUQ3M0RGNDJEQzNGNkU5QzlBCis6MTA1RTEwMDA2NEVDOTMyMzlFQUY5QUVDQUYyOTdFMTdGMTFGRURENTZBCis6MTA1RTIwMDBBOEZEQUFENUQ4OUY1NzE2NzlEOEJFRDA5QTg3MDhDMkEwCis6MTA1RTMwMDBFM0Y1RjBGQ0I5RkVBNzA4MUU1MjAxNkNCQzBCRkM0RjQ5Cis6MTA1RTQwMDA1MzdFRTMxNEUxNzc5OEQ2MzQwNjFFQjkxRkEzQzNBNzg3Cis6MTA1RTUwMDA3MTNCNjg1QTA5RjkyOTk0NzAxOEFGMTdDMEM2NjIwMURFCis6MTA1RTYwMDA3NzlFRkRFMEZFODdENkJCOTczM0FGOTc2OUI5MTk2MzdDCis6MTA1RTcwMDA1RDEzNzA4QzQ1N0Y4NjBFQjIyRjUwMEZFQjM4RUUyQkUyCis6MTA1RTgwMDBGQ0ZDRkM3ODhGQkJEMTc1NkM3ODUxRTYwRUU5NzhGNTk3Cis6MTA1RTkwMDA2QkE3MkY3Njg2OUZCNTJGODhGNEE3QUE1OEJFNzA1MTlFCis6MTA1RUEwMDA0QTI3RjFDRDczREMzMkJGQjg0RkM2RTY4QkYyNkZFMDA0Cis6MTA1RUIwMDBEOUIwM0JBRTQzM0E4RTRCRjdFNzBBNDZFOEJDQ0QyQjUwCis6MTA1RUMwMDBERTEzQ0UxN0RFQTUzRUQ1RDIwRjNDRDY1MDk2RUJEQ0M2Cis6MTA1RUQwMDA2NTVDRDQ4MTQxNDYyM0ZBQTJCNEQxMjc4MjM1NzhCRUNECis6MTA1RUUwMDAzODUyNjJDOTE3Q0QyREI3RDQyRjA4NTc1QkNBNURFQTY3Cis6MTA1RUYwMDBDOTk2RjJCRjk1NEU1RkY3QTkxNkJFOEVEQUU2QjVEMDA5Cis6MTA1RjAwMDA1NjlFNkZCRkRFMTU0RTBEREY4M0FDOTIwRDdCNzQwMzgyCis6MTA1RjEwMDBERDRCM0U4ODM4NDZGREQ4Mzc5M0VFRTk0MjhENzEwRjUwCis6MTA1RjIwMDAwMTI4NUVDNUFCNDU4ODNGN0QxMEE2NzU1QUE5QjBEQTM5Cis6MTA1RjMwMDBBOTcyRDA2QUE3ODY5QUY1OTREMTJGQzY2NzdCNTcyODk1Cis6MTA1RjQwMDAzNEVFQzgzQTE1RTBGMTIwQzYzOTE5RURENzI3QTNBQUQ3Cis6MTA1RjUwMDBGQkRFREUyQURFMkU2Q0JFN0Y2RjRGNjU3MTVFNDY3N0ZDCis6MTA1RjYwMDBFRkFCQzYzRTRGQjU4RjEzRkE0QUVFMzgzNTdCN0QwODRFCis6MTA1RjcwMDBDOERBMDE5M0ZDNjU2RjI3QzMwMUQzQkIxQTVCOTFGNkE2Cis6MTA1RjgwMDA3M0QyRjg4RjZDNUI0MjdFMEYzNzMwM0I5QUUxNzk1NUM0Cis6MTA1RjkwMDBFODQyODhCMTc5NzY2MDE1NDZCRjA0QTY4Q0NGM0I0MkIzCis6MTA1RkEwMDBCMzU0OEFDM0Q3Mzg1RDFEMUUyRTI3REZGMTZCOTY3ODU4Cis6MTA1RkIwMDAwRTY3ODBDQjg5NTE2RjJDRkFERkU0ODQ3OEE2RjVFQzZDCis6MTA1RkMwMDAxNTNGREYyNzFGQkEzNUZFMjdEQzVGRUEyRjAxQkRFMzRGCis6MTA1RkQwMDBEQURGMzI0Q0VGNUNENkE1Q0U3NUEyREZFNDM1RkY3ODcwCis6MTA1RkUwMDA5QTRGRERFRTg4RjM2QzUzM0Y3NUMwREZGQjY2RkY5Qzc0Cis6MTA1RkYwMDA2NjdGQUFFMTFGODZDMzFFOEEwQkRFOUVFMjcxQzFEQkFCCis6MTA2MDAwMDA1M0ZGQkRFQjI4RTZGNzNBRTg1REQxRURGQjcyREI1N0I1Cis6MTA2MDEwMDBGREMyQkUzMkVBRjVFRkU1RkJENTdFMTlGQzI1QjlFQ0YxCis6MTA2MDIwMDAxQzcxRkY2RDY2Q0ExNjc3Mjg4MzEzRTk3RjY4QTVFNkExCis6MTA2MDMwMDA0NDdCQTdCRkM1MjNFMUJBM0Y0QkNDQjMyRTE1NzFFMjE5Cis6MTA2MDQwMDA3QTNBRDZCQzc2REFFODZCQ0MxM0VGMUZFMjNDREIwMzdFCis6MTA2MDUwMDBGQzNFNjBCQkNBRTY0QjdDQ0RERkNCQ0UwNkVGQzhCRUI0Cis6MTA2MDYwMDA1RkNEOEMwRkE1ODBCRjdCQTFCODYyNkFBNjc5OEY3NUMyCis6MTA2MDcwMDA0RkQxODBBRjAzRTE5MzMwRTU3MDc1MDQzOTFEM0E0MjhBCis6MTA2MDgwMDBCOUU5QjA0QUMwNjdENDZCMEY3MjNBQjQzM0ZCMjAxRjMyCis6MTA2MDkwMDA3OEU0ODAxNTFFNjZFMzQ5NjgxNzA2MjBEOTQ4NkY5QTkwCis6MTA2MEEwMDBFOUYwMTJFRTgzNDg1NTY4ODg4NzlEQTk3QjEwNUVCQzk1Cis6MTA2MEIwMDA3NzgxRjY3QzcxOUQ3NDM5REVGQjg4NzFGQkIwQTAyRTcwCis6MTA2MEMwMDA5NURBMTEyNEYzMjQ4QUY3MzI0QTA3MDc1MjZGQjFGMkE2Cis6MTA2MEQwMDAzRENEN0U3QUVDNDlCRDdDN0YwQUZCOTFENTIxOTI5RjE0Cis6MTA2MEUwMDA2RTFDOENFQ0EzQzkxRDY4RUZBQ0M2M0Y5OTRBOUZEMENCCis6MTA2MEYwMDAxMzNBMDdFRDBGMTlCODVFNjAxMkE3QzlFMzg1N0Q5MkM4Cis6MTA2MTAwMDA0MURFNERFN0ZCRDI1MTc3QkE1RDM2QkNEOUVENEUzNzUzCis6MTA2MTEwMDAzNEU1RDY1N0UyQkM1RjY3RkZBMUJFNTE2REY3MjNFQ0IzCis6MTA2MTIwMDA3NkFFM0QwRUZFMENENEU3RTNGMkI4ODdGMTI5QzcyOTFECis6MTA2MTMwMDA4MkZCM0NGODFFODJCM0Q2QTFFMjNCQ0M0Q0E1MTdFMzEwCis6MTA2MTQwMDBGRDFGN0Y0NDg2MTRBMzY3NTE2MDkwOUVDRTFBMEJFRjBCCis6MTA2MTUwMDA0Q0ZGMzVGMkI4RDE3RTMwREYyMzZEMEE3MDNGNTBCMDZFCis6MTA2MTYwMDBBOTRFOTJGODNEMDIwRERGREQwQzM2RUQwRDY3RTI1M0NFCis6MTA2MTcwMDA4MzNGNDdGMjgxMjc0ODNGQUU4NjY0MDJFMzRFRjQ0NkYwCis6MTA2MTgwMDAwN0FENkJEREI1RDVDNUU2RkREMTc1MDE0OUVDNDMwRDE1Cis6MTA2MTkwMDBGQTgzMjY5RjlBQTYzRjlCNUZDNDNCRTNFRjQ3RkY5MjlCCis6MTA2MUEwMDA0NTU2QkMxRjJCNUQ1NjA2Qjg1RTFBOEJGRTlGNzYxQ0FCCis6MTA2MUIwMDA4MzZFQTNFNUEzNTVEMDZEMjNFOUJGQUU5QUZDRjQ0QUU0Cis6MTA2MUMwMDA5QTZFRjc5MUJDRkE2QjIxOTJDQ0QwQUU0REQwQ0I3RUJCCis6MTA2MUQwMDA2RkRGMDM3MUMwREZBMzcwOEE3ODU0RTc4NDUzOUJCN0U1Cis6MTA2MUUwMDA0MjBFQkE4QzhBQjNFMkZEMzgwM0RDOUZCNjU2RjI4NUM0Cis6MTA2MUYwMDA3MUE4QjU1OUZDQ0IzNTA1OTJEMEZGODMzQzlFNkZERTZDCis6MTA2MjAwMDA5RTEwOUUxRkY3Q0MzOTEwQzI3MzhFREU0RjMyOUY0MzEzCis6MTA2MjEwMDA5RTVCMjBDRTQ1MjJBRkQzM0VBMDc3MEVGNzBCRTIzRjI4Cis6MTA2MjIwMDBENDNCMzdGMTNGQTE1QTdGNzcxM0JFNjNCNkY2NERCRjFCCis6MTA2MjMwMDBDNTFFRUE2OEM5RUQ2RjUwQ0FBRjg4QTE5RDcxRTg2REFGCis6MTA2MjQwMDA0OUMzRjU0NjJBNUY3MTIyQzIzNTMwNkYyOUJEM0JEMjYyCis6MTA2MjUwMDA1MUI3OTNDRTYxN0FDMkI5RTk2MkM0OTk3Njg4QjhFODM5Cis6MTA2MjYwMDA5MUYxQjM5QzFCMUUxMkYyNUFBRDVGNERGNjY1NkZEOUNBCis6MTA2MjcwMDA0QjM0Q0VEQUJBRENFM0UwN0I1OUI5RUU0NTc5MUMxMDM5Cis6MTA2MjgwMDAyMzdGQjFFRDVDRjcwRDMxREUxQjAxNzEzRUUxOEE3RUFCCis6MTA2MjkwMDA2OTcyMTVGRTJFODc0RUZFQjFGMUI1RDEwMTA3QzM1QkMxCis6MTA2MkEwMDA1MzQxRUNENTAwQTM2QkVGQkMxQkNCMTAwRTdDMjdDNjczCis6MTA2MkIwMDA0Q0Y3MjBGNjlGMDFCRUYxMDUwRThCREQ3NEE4M0FGRTY3Cis6MTA2MkMwMDA1RjJCRUJGMEY3MjlBNkQyQkJGNTQ2QkQ5RTJDNzFFQ0Y3Cis6MTA2MkQwMDAyNzFCNzRENkJDQjRFRkU5QzBCODdGMDY1RjRGNTk3RTY4Cis6MTA2MkUwMDBGODM3RTg3QzE2M0NFRjk5OENFREIzQzRGOTFBQTk3RDE4Cis6MTA2MkYwMDBCRDFGMEJFRjc2M0NGNEJBMDYyOTBFQUE1N0NBM0M5Rjg1Cis6MTA2MzAwMDA3MzBCQjhEQ0Y1QUU0Q0YxNzNCNTc5MDdFODVDMkQ5MEYyCis6MTA2MzEwMDA3QTlERTIyN0JFM0I2NzFGOURBQjU1MTY3MDdBNjAxQ0M1Cis6MTA2MzIwMDAyNURBNTE4NTczRjk3QjgwRDlFNEU4NUU0MTNGNTlCNUEwCis6MTA2MzMwMDBENjAzNzlEMDcyRUVCMzI1MjBDRUNCODJCOUZCMzNFMDAxCis6MTA2MzQwMDAwNENGMjAzRkVGMTkyRDk3QjRGRTNDRDhGM0MwMUU3QTNFCis6MTA2MzUwMDAzNzA1NTI3NEFFRDBGMThBMTNFRkE2OEVFMDYxOTQ1Q0RCCis6MTA2MzYwMDAyNUY4RUZDMkY0RTJDNkUzNzQxQ0U3RDYwRUY0OTNGNDBBCis6MTA2MzcwMDAxQUU3NkMzM0Y5QkU0OUFFNEJEMTM5OUJBNzQwQjNEODZECis6MTA2MzgwMDBFQjgxQjBGMTJFNjI3RUYzMENFMDVBQzRGREMzMzJBRTU1Cis6MTA2MzkwMDBBQkU4OEY0N0Y4REE2NzVFNDhGRUI0NkM3NEZEOEUzRjU5Cis6MTA2M0EwMDAzNkJCNjA5Q0Q5QUZDRkY3NURGRjZDN0M3ODI4QTA1OUQ1Cis6MTA2M0IwMDBFQzQzM0IzRkJBRTExQkM3QjRBRkNCRTY1RjNFMjRFNEZFCis6MTA2M0MwMDAzMzg4MTU0REZCQTQ2RjE2Mjg5OUYxRkJENjQ1NjNFMTgwCis6MTA2M0QwMDBGNzlCOTlGMTdCQjEwRkUxM0Q3NDdCRTZERjI3MzJEMjY5Cis6MTA2M0UwMDBCQjZDRkFFRTJFMjMxRTA1N0YyNEE0OENGQUFCQkEyMEQ4Cis6MTA2M0YwMDBDM0JDOEQ3NUY1NTA4MUYxN0U0RkNDODdFQjQ2QjUzRTIxCis6MTA2NDAwMDBERjg3RTMzRkQ0NzNBOTBGQzc3RDY4NTM2RTdBMUFFMzIxCis6MTA2NDEwMDA2RjExRTc4QjQ5RjFFRTg4NTE5RTE0N0NCOUQ1QTZFNzQwCis6MTA2NDIwMDA1RjE2NzI3RDhGOTBBRjg3M0M1MTFGRkQ1RUM1QUU4QkFFCis6MTA2NDMwMDBDRjNCODlFMUFGOUFGMTA1QkExNEI1MkUyOEM5MzU3RTU0Cis6MTA2NDQwMDA5NTZFREI5NzFDRTNCRDk2REUwMjVCN0M2RjlFRjczNDk2Cis6MTA2NDUwMDAzRjJENUVCNjIyRkY5QzhFNzhGODc3OTI3QjY3QUE4OEU0Cis6MTA2NDYwMDBFNEE5RkExQUNFMzdENTk3MERBNTcwNUYzQjc5QTMyMzFGCis6MTA2NDcwMDBBOTUxMUM0QjhDRjA1Mjc2OERBQzUxNEM5QkI4Rjc3QURECis6MTA2NDgwMDBBMjU4REZDMTc5OEJBMzEyQ0JGMURFQjg4QTZFMTdGNTYzCis6MTA2NDkwMDA2QjE0MEY3M0I3RjVGNzNGMUVGMjQ0REExNEI0N0YxMzkxCis6MTA2NEEwMDAxNEU5MDhENTNERDZERkNCOTgwOEE2REZBQjYwRTM5NkFDCis6MTA2NEIwMDBCREY5MkVGRDdFNEE5OUVENzc0MTNFMkRERTc3RkM4M0I2Cis6MTA2NEMwMDBGMDlFOTRDMTY3RDZDNzlBMDREMTRDN0FGRjNGMDU1RjBFCis6MTA2NEQwMDA2QUFEQkJGOTNCMDZGMTAwQkM2MzNBRTc2MEY0MkI0MUJGCis6MTA2NEUwMDBCQjYwOEJCRUExMUVGMUE5MjcyMDNDMjU4MzFFRkI2RDNFCis6MTA2NEYwMDA4MURGRjgxRDlGRERGOENFODJBQjgyREYzRjVCQkRFNDFDCis6MTA2NTAwMDBDMkMxMUQ0QzY1NkRCOUE1QzE3MjFGQzBBNDE3N0U1QkM5Cis6MTA2NTEwMDA0MEVCMTNENzBCNDlCRDg5QTc4NzlEQzQyNzUzN0EyMDI5Cis6MTA2NTIwMDA4OUJGODNCMjYwNjM3Q0MwODVBMjdFMEQ3Rjg3QkEyQzUxCis6MTA2NTMwMDBBMTRCMEFDQjU3MzNGMzk1NzUwRjkzQUYwMDVFN0YzMUI0Cis6MTA2NTQwMDAyNDIzQzQ0N0YwNkE2ODdDRkFGNzRFMkEwN0FGMUJDMEMxCis6MTA2NTUwMDA3REYxMUVCNjJGQzZERjUxMzE3RUFGQzRFMDk3ODk3MTQxCis6MTA2NTYwMDAyQjdGNEM0OTU4RjMxMzZDRkM2MjZGNUZBREMxNzkzOEQ3Cis6MTA2NTcwMDA3RTREOEYwMzcwNUYzN0FFRDk1NDFGRkI4M0ExNzcxRjA5Cis6MTA2NTgwMDA2NkUzNEZEOThEMEYzM0IyQjQyRjc3RkYzMkM0NUM4NUU5Cis6MTA2NTkwMDAwQzlGNEZERDFBRjg2NTJEOUJFMEZEM0QwREE1ODg5N0ZBCis6MTA2NUEwMDA4NzNDNDA3MTExMDdBMzFFN0E3NzAxQTI5OUNGOTM0NkM5Cis6MTA2NUIwMDBGMUFENjFGNzY3QTk5RkQ2OTdCQzlFQjFFRTc1QkUyOTc0Cis6MTA2NUMwMDBGMTc3MkUyQUQ1QjdBQkQwQ0ZGOTJBRkZEREJBRjRCQkNECis6MTA2NUQwMDAxNUE3RDNCQjE1MjE4ODczRkIxMUEyOTRCNjBCRkU1NEVCCis6MTA2NUUwMDBDRkFFQTg0MjdGNjhFMjJEQkY4QUY3QjNENDUyQUIzRjRCCis6MTA2NUYwMDA0RDJFNjlBNEY3QzA0NkVDRUUxMjY2NzdCM0YyNDRCMUIzCis6MTA2NjAwMDA1NThGRDYxNzcyQkIzNTVDQzhFRjg1QUE3RURFMEY3ODMyCis6MTA2NjEwMDBGNDMyQjNERURGNTgyODU5Q0IwMzdBRDk5NzRERTUwRDE0Cis6MTA2NjIwMDBBMjdENDJCQzVCN0U1NkUxNzk5RDY4Q0ZBODEzNTlGRERGCis6MTA2NjMwMDAwQ0ZDQjk0MDhDNkI5NDQzMzBCQzBGREZGRkQ4RjQ4RDU5Cis6MTA2NjQwMDBBNjM5RTZGNTdDNjMyMTNGREY1MTRGMTBFMzU2NjQ4NjlGCis6MTA2NjUwMDAyQjUxQzVDN0JENEQ4Q0JCQjFEMEZBNkUxQ0E4M0MzNUMzCis6MTA2NjYwMDBCRURGNTE3MEEzQjQ5RkUxRkI5MDBCMUEzMDVFNjVENTdECis6MTA2NjcwMDAzODQ3MTJERjREQkI2OUJDMTExNzk2NUI0RjE4NzQxODcxCis6MTA2NjgwMDBDMUI3Q0FFMzkxQ0FBRjUwNjczOTMzQzhCMTkxNkU2RUQyCis6MTA2NjkwMDBFNDdFMkFGQkY3NEJDNDNDREFBRjY4RThBQjYxNzA0NTk3Cis6MTA2NkEwMDA3NjczQjk3MzA3MjFFMzM5MTA5M0VGNEIwQUU3NjQ1ODA3Cis6MTA2NkIwMDBGN0RCMUI2OTFGNzdBODM4RjdCQTZGREZFN0NBQzJCRkRECis6MTA2NkMwMDA2OEFGRDcyQUU4QTRCRDFDQTJBN0I4REI0M0RDOUY2ODRCCis6MTA2NkQwMDBGNDdGQTg4Q0ZCMTVFREVEQkE2Q0ZEN0JBMTI5ODI3MUNFCis6MTA2NkUwMDBDNjc4QkU4QUU3QUE0QTBEMjRGMUJFQTkyRkQ4QTc1NkJDCis6MTA2NkYwMDA2OTE4MUZCMDRGQzdGRDkxMDYwQzhGRTg2NzBCMDNEOUNGCis6MTA2NzAwMDA3NUVEMjFCRTFGOTU0MzdERjUwRThDMjc4MTQ2RDU2QzE2Cis6MTA2NzEwMDA4Nzk1OEJERjU1MzRGMkFFNDBBQ0I1OTBFQ0ExODg0NDQwCis6MTA2NzIwMDA3ODkxRjk3OUZFMjE1N0YyNUNDNEU3QUEyQTA3NjQ3QUM2Cis6MTA2NzMwMDBBN0JGQTc5MERCQjk5QkI1QTYxN0FBMzJEMDZGN0RBMUUyCis6MTA2NzQwMDA2NkIxOUZDQjg3QjlGRDlEQUQ3RUJBMUU4NzZGODQxRjUyCis6MTA2NzUwMDA0MzNBREQzRjAwOERGMzYzNTM0MUU0RjZDMjRDRTdCN0EzCis6MTA2NzYwMDA4NjVFMTE3RUM4NEJFNzBBODUwQkRBNDVCRjY2RjNCODMzCis6MTA2NzcwMDA3MkFGOEI2MkQzQ0YzQUJDNjUwRkVBNUYyN0QzQkZERDIwCis6MTA2NzgwMDBGNDNCNzI3RDdCRDAwRjc5MTlERTdGNjJGOTJCREY5Q0ExCis6MTA2NzkwMDBBRTU0QjJGMjU3Q0I5REUyRDFGOTY4MjE4RUZCMDEzODlECis6MTA2N0EwMDBDODVGRjIwMUJDNTQzOERCNDRCRjI3MEIxNUJFREUyNEEyCis6MTA2N0IwMDA1Q0E0NDcwRDdGRENFNTdEMkU4QjVFRkRGNjI2NkI3RUFGCis6MTA2N0MwMDAyOTM0OEQ0NzNGQzVEMjhEMkU0ODMyRkM1RTY5RDNCQjNDCis6MTA2N0QwMDBGNzE3RjI3M0EyNkY0M0JDMDNEN0NGRDVFMkZDRUZEQTExCis6MTA2N0UwMDA5RjRDNTc1MDZFQUU5Q0FENTYzOTRERjdBRTlFMkRFNDgyCis6MTA2N0YwMDBGNkREN0I4QzhGMzQ5MzlDNUQxNTQ4MkFCODhGN0I2N0MwCis6MTA2ODAwMDBGQkVDMEIzRjBGRDg0RkIyQTMxQ0ZENjlDNTk5RTMwMDA5Cis6MTA2ODEwMDBCRjk1QjBDMjM5RDYzQ0VDNzAxQkU3NzlEOUUwOTBCNzkwCis6MTA2ODIwMDA0OTE5RkQ0MkNGMTU0QTE2N0ZGQzJBMEY3RjBGMjlCMjY2Cis6MTA2ODMwMDA0QTA2RUY5OTE4ODcwNzc0Q0Y0RjdGQjM4MERFRUZENkYzCis6MTA2ODQwMDAxQkUyMTQ1N0E3QjdCOUQ1NTU0MThBQjNBMzc4QkExNTM3Cis6MTA2ODUwMDA4QzYwRjhGRUQwMDFDMTdGNDY1QzFEMzMyODRFQzM3RDlECis6MTA2ODYwMDBEQUI1OUU0MTA1RkRDQUNCRTU3ODIzRkU3NDlBNzEyRUY4Cis6MTA2ODcwMDBFMzc2QzUyMjEzMTlGQ0FFNjdFQTUzMTNDMTUyMkY5MTc4Cis6MTA2ODgwMDA2N0JEQkQ1Mjc1NUVGNTFBMUQzOUZBRkI1MEU4Qzk1RjQ4Cis6MTA2ODkwMDAzQzc2QkY4MkVCQ0YwNzhGQkVGRDQ1OTRDM0FCOUY3NTlGCis6MTA2OEEwMDAwMjVFQ0RGQkYwQjEwMjQ4RDFGRTIxQTlBMDlDNUZCNUVDCis6MTA2OEIwMDBERDk5RjExRDA5ODYzMUVBRkZFQTFGMTU5MDVFQkNFQUY5Cis6MTA2OEMwMDAwOTc3NzIxMTZCN0ZENUQzRUZDQzAwMjY0RjFGQjYwRDIxCis6MTA2OEQwMDBFRDk5ODhGODdCNTRFMkU3ODVGQUUwMEM1QzlGQUU5Mjc0Cis6MTA2OEUwMDBFMTlCOTlERTFERjMxNjcxNzk3RkZGQTdGRTY2QTQ5RkQ5Cis6MTA2OEYwMDBCNDZERTAxMkVBQjdGRjIyOTdGOTVEN0MyOEUyRUIwRjU2Cis6MTA2OTAwMDBBQkM3RTMyNjFGOTE5MjUzMzJFODBGNjMzRkY0RkUyMzk3Cis6MTA2OTEwMDAzQ0FFRTRBQTY3NUM0OTBDMDlCRTZBREI1NjI1QzZFMEJBCis6MTA2OTIwMDA1OEJFRUQyM0UyOTdCMzdGRjQ3ODIxRTI2MUY5MzM0RTRDCis6MTA2OTMwMDA4QjFENzFGNThGM0VFOTM4OUREMUY5NkEyNzBDMkQ0MkU4Cis6MTA2OTQwMDAzOTc2MUVBNkZDQzE4ODY3Qzg0OTcyQ0RFMzUzOTY5MTdCCis6MTA2OTUwMDAwQTYwRjU5RUZDRkQzOUJGNjZFNUVGODU5QzgwMjFBRTlGCis6MTA2OTYwMDBFRkVERkI5REYyMkNFNjYzMDE2NkI5NjFGRjU2QkU1RTVBCis6MTA2OTcwMDBCRUVEMUQ4NTdFQzdDODAxNDMxNTlGQzdGMzBGQUI5REI0Cis6MTA2OTgwMDA2NEFGMEYzMEE0QTA5RTVBREVERkY1OTE5M0YxREJGMkU1Cis6MTA2OTkwMDBFRDFGQkM4MTdDQjdEQzI2MUZFRkUxMUY2NUEzRURGMzgzCis6MTA2OUEwMDA5OTQ1MzZGQjdDNUI2OTVFRjZEMUQ1OEYxRkJDMTdGRDIwCis6MTA2OUIwMDAxMUVGM0ZGMUM3N0JGMTFFRUQzNTQ3M0VCRUY3N0IxODY3Cis6MTA2OUMwMDAxN0Y2NkY1RTE1RTU3QkY5QTNBRjE0ODI0OUZGOUY1RjUxCis6MTA2OUQwMDBDNEQ3Q0QwRjFGNzlGOEExQ0Q2Q0ZFMUZCRUVFMjY2QzdCCis6MTA2OUUwMDA3REI4RTNGNzk1RThGRkY5RjBDNzdGMUQ4RkZFQTAxQjg4Cis6MTA2OUYwMDA3NjJDQTRERkFEQjlFMUE5QjMyN0U0NUExNzkxNUY5M0QwCis6MTA2QTAwMDBFNkRGNTcxNEU3NDZEQTMzMTIxQTkzMDAzRjEzQTk4REQ1Cis6MTA2QTEwMDAxRUQwMzdBNEUwQkFGNjE3MDk4NkJBOEJEOUY3RkU0RjE1Cis6MTA2QTIwMDAxNEI0Q0ZGNjQ0NjAwOEYxQjM2QkZCM0I3QjZFNjZGOUEwCis6MTA2QTMwMDAwRjE4N0REQzE5RThDM0U2M0ZEMTQxRkE5OTg5MEQ0QjY3Cis6MTA2QTQwMDA5NzZERkZGMjk3Q0VBOEMzRDQ0NTc2Rjg3MjE4MjJCRDkxCis6MTA2QTUwMDAzOThBQUUyRjMzQkFENkE1RTk2QTJGM0YwODg3MTUzQzhECis6MTA2QTYwMDAzNzU4RkUxOEEzRTMwQ0E0MjdBM0UzOENEMTc0RkMwMEQxCis6MTA2QTcwMDBGRjk4Mzc5QThFNTcxNTU5RTM5MjBFQzIzNTVCMzY2M0VECis6MTA2QTgwMDBFMUY2RDI4Q0U3QkNDNjNFRUJEQUE3QkU5QUQzN0UzMkUzCis6MTA2QTkwMDBGNEMyNTg3OEJFNDJFMjcwOUQ1QTE0QjlCOTA4RTVFQkM5Cis6MTA2QUEwMDA4OTFGM0NCNDM5QzhFOUJDODgyMUU2QzNDNzBGNTYwMjI4Cis6MTA2QUIwMDBFMzkzM0ZCODg2MkU0MTNDMENFRDcwQUJCOEJFNUZCNTlBCis6MTA2QUMwMDBFMzU3MjQ2RjFGM0VGNUEyQTI1MTdDMEIxNDRBQTdCMkQ0Cis6MTA2QUQwMDAzQzhDRkM3QjA5NTg3RTk5QzQzM0Q3M0VGMEZGQ0U3OUJECis6MTA2QUUwMDA4M0I1QkYxNjdGM0E1NTI1RkE1MTdFMEY5MzNGQTI0N0QzCis6MTA2QUYwMDBGMjgyNDYwREY1NkU3MjFDQ0Q3QjU5OTJDQkM1QjJFNDg1Cis6MTA2QjAwMDBDMDU3MzBBRUNGOEVGNzI3OEIxQzg2RkUxRkExMkJDNjM5Cis6MTA2QjEwMDA4RDJEREJGRUY2MzlDODdGRDlFODY5Q0M1RkM1Rjk5RkJBCis6MTA2QjIwMDBDNkNBMUZCMENBNkQ1NjM5MTVGNEZENzBFQjIxMDVFRENDCis6MTA2QjMwMDA4M0Q0QjM4QUVBNjBGNkYwODdBRTIxODVENkM3MUYzQkJGCis6MTA2QjQwMDBENTA3QzNBM0U5OUVDNkJGODgzRjNBQzY3REY4MEZFREJGCis6MTA2QjUwMDA3MjJFRjAzMzk2OUM4RjNEQUY2M0MzREJERDQ1MUFERkE5Cis6MTA2QjYwMDA1RkQ5RjBGN0ZFRTFDQ0ZBRkYzOUExMzc5NjQxQkNCMTBECis6MTA2QjcwMDA3Q0YyRThGNTRCODZBODNFQjEyQTBERUZGQjE4M0ZDNjI0Cis6MTA2QjgwMDBFMDdERkY1MTI3RUQwRjNCRkE3NzkxMUVCN0VCOEI2NTQ4Cis6MTA2QjkwMDA1OUVDRTgzNzhBQjgzREIwRUM5OTgxMTlBOEQ3REVERjA3Cis6MTA2QkEwMDBGOTUzRTJDQjY1OEZCREFEQTBGRjY2Q0ZCNjI3OTVDMTg3Cis6MTA2QkIwMDA2OTY5MzlDMEY1QzFGQzNCMzhFRkZGNzA2MDA2RUFBRjg4Cis6MTA2QkMwMDBFNTU5RTIwMDdGMkZFNkIzRkM2N0Q2RkU5NzNGRjY5MUNBCis6MTA2QkQwMDBBNUZGQUJGNTdFODVGQzY0NjM4Q0YzOUUxQ0I5MDhFN0NBCis6MTA2QkUwMDBGQkRFM0UxNzlFNjBDMDdCRkRDRUM2NEM3NkNFRjM2MkM4Cis6MTA2QkYwMDA3RDM0RjBENDUxNzBFQTZCNDU3OEVFNTVDMkRGNjE2QzlDCis6MTA2QzAwMDA2RjhERkM4QTdFQkZGNzQ1OTdEOERGNDY1RTQzN0I2NjczCis6MTA2QzEwMDA1NUIxNDJGNzExREEwQjJFMjQ3RkJERDE1RjlGMEQ5RjM2Cis6MTA2QzIwMDA2QTUwQURDN0ZEODBCQTIwNUE2N0RFNTcxOUYwMTc0NzgyCis6MTA2QzMwMDAxQzE2Rjg2RjI4Njg5Q0EwMDVGOEZFNEM2M0ZCOEZGRkJDCis6MTA2QzQwMDAwMUFCOEExQTM0MDA4MDAwMDAwMDAwMDAxRjhCMDgwMDhFCis6MTA2QzUwMDAwMDAwMDAwMDAwMEJENTdDMEI3QzU0RDVCNUY3M0E3M0NGCis6MTA2QzYwMDBDRTNDQzI0QzI2MjdBRkM5RDM3ODkyRjA5NDgwNDMxMjExCis6MTA2QzcwMDBERUI0MEUwNDkxMjI2QTUwNUFBOUY1QUIwM0YyODgyMUMyCis6MTA2QzgwMDBDOUE0RjhFMjVBQkZDQjg0NDRGNDAyOUY4RDk1MTY2QURBCis6MTA2QzkwMDA2OTNCNzBBMTUyMjE3NjkwQTBCMTBEREMwMTJDMDYwNTU0Cis6MTA2Q0EwMDA2RjEwNUY3OEIxOEQ1QTE1MkIyNDYzMTRCNDU3NUJFRkM2Cis6MTA2Q0IwMDA1QTZCOUZDM0NDOUM0Qzg0REVGQkZCQkVERkVGMEJCRjRCCis6MTA2Q0MwMDA3NkJCQ0ZEOTY3OUZCNUQ3RkFBRkQ3REVFQjBDMjhERUZFCis6MTA2Q0QwMDBEQ0VBNTQwMEQ5M0Q2QjM2NjQ2MUFCNUFENDE0MDlFMDQ4Cis6MTA2Q0UwMDAyQkZBQkIyQUQ2MDI4NDAwQzYwMzU4NURENUUwNzc2MTMzCis6MTA2Q0YwMDBBQjVBNDA3MzAwRkY3RDQ1RkZBNzc4NUI3QkYwRjk3QkMzCis6MTA2RDAwMDBFNUQ0RDZCNTM0OEZCNUYxNTdENDg3MjYwNUI2NTdGMkZBCis6MTA2RDEwMDBCMDkxNEEyNUREQkZDMkJCQjYxODYwQTNGMzlGMUZBNzgxCis6MTA2RDIwMDBGQjJCODM3NkQ1OEU2RDczRUEzREJGQTVGRTA2MDlBQUJGCis6MTA2RDMwMDA2NUVBRDNGMzM4M0U2ODc1QThEQjU1QkM5RTBFMEJDMkRFCis6MTA2RDQwMDA2NTMxN0FGMjU0MjQzMjFCQTAwQ0U5QTAxNkZGRkMzMDA2Cis6MTA2RDUwMDAwMURGMkI0ODgyNjZBODAzMUMwMTI5NTlBMTIwQjVDNjcyCis6MTA2RDYwMDA3MzBGQUFGRTYyNzU3Q0FDMkZCQkJBQzE4RkYzNUUyRDg4Cis6MTA2RDcwMDBCQjJDQjRGRTA3NzMyRDIxN0IzMUI1MzdBNjQxRDk0MDFBCis6MTA2RDgwMDAzRTE4RUQwM0FCQUEyMTMyNjJGMEZCQUREOThFODU1QkQ0Cis6MTA2RDkwMDA4MEU5MEU1QTY4MUQ5MjIzQjQ5RDA4RjE4MUE2N0E4MDdECis6MTA2REEwMDA2OTAzMERGRjg3M0M3NEM0RDE4RDAzN0NCNDBFNDVCRkNECis6MTA2REIwMDA2RkM1NjVEMTREM0IwNEI5NEQyMTM5NjBFQjg0MDg0MDY2Cis6MTA2REMwMDAyOUQyQUQ5NkIwNUM1MkExNDc5RjI0MEFENTYzMDA2RUNDCis6MTA2REQwMDA0Q0Y1N0Y5M0Q2OTkzQkI0NTFBMkVCMUVBOEU2QjYxMkIwCis6MTA2REUwMDBGQzEyRERCNzM4RUJGMkZDNUZCMzNFNThBMDlDRTkxOTBBCis6MTA2REYwMDBBOUNCMTc1RkIxQzEyQUY4QUYyOEEwMEMyOTI3M0EzNkQyCis6MTA2RTAwMDBBQkVGOEZDNjc5RTg3RTI2OEQwQUIyMUNDNjU1N0Q2NzJBCis6MTA2RTEwMDA3NDBCQzE4MTg4OEZFM0YzMjMzMzY3NjQxMjZFOEM3MTI2Cis6MTA2RTIwMDBDRDhFQTI5MzEyRjJEQjI3QTdBODI5NDVEODU3OTAzMzFECis6MTA2RTMwMDBDNEE3NTNBOUNDQTcxRjREQzM5OUYxRkU4RjRGQTU2RUQwCis6MTA2RTQwMDA5NTUxMUU4RjQ4MDI0RjQxQzIxM0UxMEExQTFGMjc3QzM5Cis6MTA2RTUwMDBCODExM0Y2QkU5QjkxOThEQkY2NUJDNThBMEJBQjk1MkRBCis6MTA2RTYwMDBFN0E0ODdGODI3RkUxMDZGOENBNzk1OEE0M0I1N0I4OTI2Cis6MTA2RTcwMDBCNzNFNERBMTc5NkMxMDVBMkIxMUJEN0VFNkE3MDM1QTdGCis6MTA2RTgwMDBCOTFEMDI2MTZFNUREMENERUQ1REM0RTc2QzkyODM5NzU0Cis6MTA2RTkwMDBGQjY5RDBEMzNBMTQ5RjlCQTM1NkQ3QUE3OEZEQzdCM0ZBCis6MTA2RUEwMDAzMzI0NUE5RjBCNTQ5REJGODU3OUQ0MUY5NEJGMzM5MUNGCis6MTA2RUIwMDBCRjhFMTg3RkVEQzQ0RkU3NDA3RTNBNDA2NTNFQTQ3QjBECis6MTA2RUMwMDBDMUJCNzYxQ0NGMEIxMTVDQzcyM0QzMjEyNDMzODg1NDVDCis6MTA2RUQwMDA1MDExMkYzOUZBM0EzM0MxMjcxMTdEODQxRjVBNUZGNkJBCis6MTA2RUUwMDAwMkIxM0VGM0ZCNzJBMTk1QzdFNTQzOThEQjQyRThFNkE5Cis6MTA2RUYwMDAzNkMzQTE0QTBBRDM3MzRBOTdFRjNCRjA5NTMzNDY4RkM2Cis6MTA2RjAwMDBEMURBMDlDMTM4RkZCOTQyOUNCRjk4QjlFRDk2M0NCNEJCCis6MTA2RjEwMDA3RUUzQUY5QTcxRjg4N0NBODNCRTJBMUNBN0Y4NUQzRTRDCis6MTA2RjIwMDAzQjJFRTVGRjU0Q0UyMDEwODJGNTcyMDU0OEFFQUU5RTkyCis6MTA2RjMwMDA4NTczQzE4REMzQkQzNjg4OENBNEQ5ODM0QzVGQ0E0ODg0Cis6MTA2RjQwMDBEMTM3RUM4QjFEMDUxNTMxRThDN0U3QUNBNzNFM0M0NUIyCis6MTA2RjUwMDBDRjU5MjE2RTFDRDEyMURGOUE0NjdDN0Y5ODJFNEMxRTgyCis6MTA2RjYwMDBDOEY3OTVBNzlBQjI5RThCOUI3N0FCOUE5QTQ1RUI4NDBDCis6MTA2RjcwMDA4OTMwRjEyQjM5RjYzQzRDQ0E0MDIzMzNGMEY5Q0Y1NjE3Cis6MTA2RjgwMDAwNUIzOUVCM0M2RjhEMEUyRjg2N0M2QTUwRjAxOUNGMjIwCis6MTA2RjkwMDA0REVDMTM4RUIzNjIzODQ2NUNCMjlEMEJBRUI2QUJDREYyCis6MTA2RkEwMDA1OThDNDNDNkU5NEE2NDkwMUREQkNGNTI4QTQyQkM3RUFECis6MTA2RkIwMDA2ODlDNzgyM0RBNjE4QkMzMjc0OTc4QkQ0RTc1ODc4ODMyCis6MTA2RkMwMDAzRkY1QUVGMDJDQjYxMzI2QkIzMTdEQkUxQUM5Qzc3MTkyCis6MTA2RkQwMDA3RDhERTAyNUJFNkVEQzczQzM2OUUyNkI5RjA3MzQ3QjU5Cis6MTA2RkUwMDBCQUMwODU2RjAyRDkwOUMzOEU4MDI2QTM3Q0Q3NDhFMzM3Cis6MTA2RkYwMDAxQzEyQjZGNUVEMUZCRkY0N0IxQzlGRDIyOTgzOENGN0MyCis6MTA3MDAwMDBGQjcwQ0REREI0NkVDNTk3NEU0Mjc0QzJGQTA0RkQ2RUJFCis6MTA3MDEwMDA3NjA4RkQzMUQ2NjlENkQ3N0Y3NDlEMjg3OTlFOUZFNTg1Cis6MTA3MDIwMDAyMDkzRkQ1REZGMkZGNDdDM0ZBNEI2RDJGODREMEFCRTNECis6MTA3MDMwMDA5QUU2RUZCMjg2QjYyMzFGNTYxQzkxMTk2RjJCREFBNDdECis6MTA3MDQwMDAxMDkwOUMxNTJEOERGQUY3QkUyODgzQzAxRkYwRkQ3Qjk0Cis6MTA3MDUwMDA3RjU1Q0E3ODk0NjFGNDhGQTZFMUYzODFDRDU2MkY1QUZCCis6MTA3MDYwMDA0QzQ4RjcyNUZBQUJDQ0Q5NDM0MDhCQzMwMTA0N0QyRkE0Cis6MTA3MDcwMDBFNzIyQkYxNkVCRkNEQUU4N0M3ODBCRDFCM0E5NDlGODFDCis6MTA3MDgwMDBBN0VDRUE4Qzg0RjE5RkE1NUM2RjVCOEFGMzZCNzk0ODZGCis6MTA3MDkwMDBENzE0QzI0REU3RjAzNUQ4NUY1RTIwQUIzMjlBODg5QzlBCis6MTA3MEEwMDAwNUY5ODlGRUIxRDVGQTBFRTk5Rjg2RkYwOERGODZGRDU2Cis6MTA3MEIwMDA1QTRBRjY4QkVDOTA3QzNGRkJCRjczMjBGQzlGMDJDMkM4Cis6MTA3MEMwMDBGRjM1QTBCRDhBRTA3Q0NCMzY4OUU3OERGOTZBM0ExRjhGCis6MTA3MEQwMDA1OTUzODBFRDFEQTFDNEVCQ0I0MTg5RjVEOUNGQkE0N0Y3Cis6MTA3MEUwMDA5MjFENTgwOTQzQkM3NjY5MjBGRTJERTk4ODdGMDI4OUVDCis6MTA3MEYwMDAwQjVDNDIwRTJFMkZEOTk3RkU1NzY0QUY1REIwODJGNTIwCis6MTA3MTAwMDA5NUY4NEU3NjQ0RUUxOUIxNzExQUNFMTdFOEIyNDI0ODlFCis6MTA3MTEwMDAyMzc5ODlGQkZEOUJFNTUwQjAzOEE2MUZGRDVEN0I5ODY4Cis6MTA3MTIwMDAxRkNCRjI5MDFGODg0RjdCNkUyMkZGNTNCNDQ0RkUzQjZGCis6MTA3MTMwMDA0NzY2N0NBRDNDNTJCRDI2N0VDQTczOTlGRkM4NkZBMERFCis6MTA3MTQwMDBGOUQzMjY5NTI0M0VBRkYzN0IyNEZFMTNGQ0Y2MzE5RDQ0Cis6MTA3MTUwMDA0QjNCMjQ3ODRDMjIzRUFGM0Y1Q0EwMERFNDZCNDNDNzExCis6MTA3MTYwMDAyMzM2RDJGRjhCRjFENUNDQzdEMUU5QkExREQxRjk3ODNFCis6MTA3MTcwMDAwRTNBMEZFOEE4QUM3Njc4RDg5NEYwM0ExNEI1NzUzQTgwCis6MTA3MTgwMDBFMUI0MTBGNTk2NzA2MkQ2NkI4MzdGRDYyQ0Q1NjdDM0I5Cis6MTA3MTkwMDA3MTk3RDEzODVDNUZCRTIzMkM5NEQxMEJDQTA5QzJDQjQ2Cis6MTA3MUEwMDAyMjYxNzc5QjU1MUZGQjIzQzNERTNBMkZEOEVENzdFMTkxCis6MTA3MUIwMDAyQjZDQjNFNjU1M0U0NDM4QkE1MzRBNkQ5NTJCMDdFQTFCCis6MTA3MUMwMDBFREJBMzFGN0IwRkQyQTVDOERGNjk4RkQ2QTYyOUMxNjI3Cis6MTA3MUQwMDA1RUU1RjAyRTQ2N0E5RTVDMDVERUM1QzMwMDlFNUFBNThDCis6MTA3MUUwMDA3MjZCOEVERjBDN0RERjhDRjE5QjVERjg2NzlFNTc0MUUzCis6MTA3MUYwMDBGQ0FFNTVDOUZFNzg1NUEyRjM2MTFCQjA5RUY2OTU0MUQxCis6MTA3MjAwMDA2ODJCQkUzRjFDRjlENEEzOTFCRDJFOEY1RTVGOERGMTFDCis6MTA3MjEwMDA0NTYwMDk1NDUzOUNGMUFGMTkyMkFFN0I0NjZGNjc2NUY4Cis6MTA3MjIwMDBEOEI4NUQ1QjZEMDExRkJFQTdCNzUzMEU0OTQ4NUZBRjZECis6MTA3MjMwMDBFQTNCNzIxNUQ5OUQ0RUFCQzZGMTk1MUE3REU5N0I3QzcwCis6MTA3MjQwMDBCRjQyNUQ4QkZDQ0NCM0I0OEVBM0Y3RTJGOEQ5MjE5QzhFCis6MTA3MjUwMDBCN0FGRjM1REY3RUQ3MTdFQjlCN0UzRDE1MTE0MDdGRDE4Cis6MTA3MjYwMDBDQzAyMzVFMTI0RjFEMEYyNzQwQkM3MzFCRDIzREZGMTNDCis6MTA3MjcwMDBFMEIyQTFERTExQjUwMUUyRTlDMTlFQzY2QThBQTdFRUJECis6MTA3MjgwMDA3NDZBNEM5N0FEN0Q3QUE0ODBGMTMzOEZFM0UzRTc5NjdGCis6MTA3MjkwMDAwRTYxQkNFRDNEMDMyMUQyQkI1OUYyQURENzhFQzFGRUNDCis6MTA3MkEwMDBFNDU3MTVBRjlEOTVDQTc3RkRDMjA5M0M4NEU1QkVFMTYwCis6MTA3MkIwMDBDQjhBNERDNEJGMDBGMjczMzU1RjZDM0Q0MUYyN0FGNjY0Cis6MTA3MkMwMDBDRjBBOTBERTU1MzYzRUZEQUUxRkQ3NzkzODE3RDEzMDQ0Cis6MTA3MkQwMDAwOTYwODIyRjVDMTFDMTUxMzMzQkQzQTc5MzdFMDc0RUM3Cis6MTA3MkUwMDAwMUVCRUJGODZFMjUwMUI3MjBENzFEMkEyMEJCRjI4NkYzCis6MTA3MkYwMDAwODBGMjdCRTYxQkEwRjQxOTlFMkZGQzkzRDg5RDdBN0EwCis6MTA3MzAwMDA1RTA0RUZGRjYyRDgwRDM3NzgwOEVGOEZBREVBODA3NzIzCis6MTA3MzEwMDBDOTJGRUFGRTMzMUYxNzk4OEM5RjA2QkVGNzM4NjczQ0NCCis6MTA3MzIwMDA5MjJFRTI3Njk5NzBFQjU1OTI4RjdGMjc0M0M0RjkxQjFBCis6MTA3MzMwMDBCRTk0MjVDMjY1NUYxNEJDQUI5MTVGN0Q4QkYzNzlERDk0Cis6MTA3MzQwMDA3RDlGNTI0MDg2RUQ5N0YyRUM3MDkyNzhFQkQ3RTkzNjRDCis6MTA3MzUwMDA5NkRGQ0Y2QzAyRjczRjVCRUEwQTM1RTE3QTBFMkVBRDdECis6MTA3MzYwMDBCREJDMDdERjc3RkU5RkZDOTdBQjVGMTcwN0EzNjlCMTMyCis6MTA3MzcwMDA0QzYyNzlBNTExREZFRjlDRDcyMkIxMUU0MjZCMUVGMTQyCis6MTA3MzgwMDBDRDNDREVEMDEzNDM2RjBDN0RDOTVCM0FDNDFGNEFGMjdCCis6MTA3MzkwMDA5RUUxQjQzRUE0NkZDNkQyOTE5MjhENzBCQjVGMDI5MjAzCis6MTA3M0EwMDA2M0VGNkFBNEVCNkJFMkM3MjBBQzJFMjA3QTAyMUQ5RjJDCis6MTA3M0IwMDBEOEM4NUYzQjNBMjU1RjI4QzlGOEMzRTk2RUU2NUZFRjlFCis6MTA3M0MwMDBFQTYwRDM1NEU0RDczRDhCRjA1OUQyMEI1QjZCNzFCMkJBCis6MTA3M0QwMDBGOTgzQjBBMTAwODM0MzY4NEJENzA0RUUxRDcwMUJFOTBECis6MTA3M0UwMDAyNTI4QUQ3OUU0Qjc3QjNCQUFCRTQ1NzZGRDMxRDQ0MzcxCis6MTA3M0YwMDA4QTFCN0U2NkY1MzJEREMxN0E4MEVEQzQxNjBBM0NCMTg3Cis6MTA3NDAwMDA1Rjc4M0Q2QzU5MUI5NzQ3NzZBNzRGM0Y5NThFRjM5RDRDCis6MTA3NDEwMDA0QTU3NzlERTRDQkY1NzIyQkFCRDdGRkJDQzRERjNGN0ZDCis6MTA3NDIwMDA3RDZFNjdGOUU1OTMwRUM3QzU2RDlGQTYwQkZFQUNDOUNGCis6MTA3NDMwMDBGMEJEQzY3OEE5Qzk2MjYzRUFGNUJCQkQ4QjJCMDBBRTZGCis6MTA3NDQwMDBFQzQwN0VDN0UxMzIyNkI3MjBBRjNCQzMxRjY0N0EzMkRGCis6MTA3NDUwMDBCQTMxNzFFMkZDQ0JBNzUxQkMxQ0QwOEQzMzQ0MjQ1MDBGCis6MTA3NDYwMDAyNkM0RUM3M0E1QTMzMDUyMjBGMjg3NzAwRUYyMzdBMzI2Cis6MTA3NDcwMDBFNkM3NkNBRjUzRDAwRTUzMjgwRUREODk3OTExNUI2NERCCis6MTA3NDgwMDA3QzlFNzQ5RkVDNDJCMzJBRTJBQzk2NzQ2MUU3NUExRTZDCis6MTA3NDkwMDA1MTQyQ0RGOERFQ0Q0QTRGQ0EzMDZDOEI3RERBMEM0NUI3Cis6MTA3NEEwMDAyMzdCNUZDNkYzRTZERTA1QUNERjE2NDc0ODIyM0JFNEVDCis6MTA3NEIwMDAyQ0ZENDVGQTg1Qjg2QjJBQzBFRUJGQzlDQzdGQjM5Q0MyCis6MTA3NEMwMDA0NkVCN0FCMTI2QzNGRjA1RjE3NTZDNTdGNDIwODU2RjQyCis6MTA3NEQwMDBERTE0QzgyNEI5Q0U5MjVEQkNFRUM5Njc4NUZEMzFEQkYwCis6MTA3NEUwMDAxQjM5RjJBQjlGOTFCREU5RDNGM0E3MjRGNkU2NzZGMjAwCis6MTA3NEYwMDBBRjg2QkQwMUI5RUMxMEUxNjdFQThCN0E5QUE5REIxOTc2Cis6MTA3NTAwMDBDQzNFOTgwRjEzOEZGQTlCNUQ0OUVDQ0IyNEE4NEU0M0Q5Cis6MTA3NTEwMDAxNjVGRDRCRTk4RTU4OEMxRkU4NTdFMjEzMkEzQTIwQkZBCis6MTA3NTIwMDBGNTI4RUU3OUIzM0QyQUM4RDBGREFGNkU4RkNFQzFCNDM5Cis6MTA3NTMwMDA5Q0FCQjUxODVFQ0E1NzdBMEZEOUUzRjA2MUQ4QTExODkxCis6MTA3NTQwMDA1RTQyOEMzM0YzN0IyNDcwNUNFOEFCQTU2NDNGOEVDQTRCCis6MTA3NTUwMDA2OTY0NzdBNkEzREM3MUZFMkU1RDRGRDIzRjBEN0Q4QjUzCis6MTA3NTYwMDBFNEJGQTFGMzlBMTRDMkY1NTM1RDU1MEU1MjlCMTVCOUIxCis6MTA3NTcwMDBCMkY2Njc4QzlGOTUwM0YzODNBMEMzODVFQzlERjE1RTAzCis6MTA3NTgwMDAyQjM4MzRENzQ4RTI4Nzg1RjkyMEFCRDg4RjdCN0Y3RkIzCis6MTA3NTkwMDBBQjM0OUJFQzIyMEEyRDZERkU5OEMxRURDMThBNUMxQkI5Cis6MTA3NUEwMDBCRkU3QTlBRTkyMzRDMjkxMEIzMEJGNDVGOTU1NzY0QTc4Cis6MTA3NUIwMDAxQzI3OTg3MTZEQzY3MTMzQkVDMEMyNzk2MzM1QzcxMzdECis6MTA3NUMwMDBCMjE0RDZGNzFEMTJGM0QyRTJFMDY0RjY1Mzc3NjExRUNGCis6MTA3NUQwMDA0RTcxNkI3RjE3RkEyRDZDOUY0MjNGNEY3MTRBQjM2QjEwCis6MTA3NUUwMDAxNkFGREI1OEFGNDFERjVEQTkzMzcyQTA2Q0UwRkE4REI2Cis6MTA3NUYwMDAzNkYwQjkwQ0ExQ0NCOEJFMTJCNTExOEUwMzlGREIxMkM4Cis6MTA3NjAwMDBBRTFCRkMxQzhDMEYwNjNGQTcxMDNGQTVGRjNFM0ZBN0ZCCis6MTA3NjEwMDA2NjA4Qjk5QUY5RkEzRjVEN0ZFMThBNDk5MDZDNUZFMEFDCis6MTA3NjIwMDBGRjk3RjU0RjA1RkZFRjdCNDRCRUY1NUFBRTI3NjY0RjM3Cis6MTA3NjMwMDAwQTU3Q0M5Njk3MjExRjI2NTAzQ0VFOEREOTA3MDdGRTlFCis6MTA3NjQwMDAyMzdDOERFRDY4NjU3QjMzMDlFRDBEQzU5OTA1NzU2MTZBCis6MTA3NjUwMDBCNjJGMTM3MzQ1QkU2NEI2MUI1Nzc2QzI0RDY0MUYyNzAxCis6MTA3NjYwMDA0NzMwMkVCRDA0RkJGMTI5RkQ0NzFFRUZFM0ZDMzIwMzNBCis6MTA3NjcwMDBFOTFFRjdGQzgyRTVCQkYwRDI1ODBEMzJFN0UyN0JDNjhCCis6MTA3NjgwMDA3NjJCNUVGMjdCRDA5RDk5NzQ1RkMwRUMzNzhDQjhENEJBCis6MTA3NjkwMDA4ODQ3Q0RFMzhDNzhENEYwMjcwRDNBMUZGRTNEQzNGRjE5Cis6MTA3NkEwMDA2NDA2NUQ1N0Q1MjBFOTFCRUE1NUY4MzEyRkMzNUVBMzY4Cis6MTA3NkIwMDA3OEExM0JCRDdBMzdERjFGMTkwRTcyMUU1MDAyMkFFREVBCis6MTA3NkMwMDBFQkEwQkU3MjFDNTZFOTcwNDVFNEIxMDNGNUQzNjlEMjU0Cis6MTA3NkQwMDBDMzMwRjI4NUY2MDk4MjJFNEI2ODk4MzQ5MDBFMENCN0IxCis6MTA3NkUwMDA4MzE0RjdFMTAzRkNGRUE1QkFCRjI4QzQzMTJDQjQwNjBECis6MTA3NkYwMDBFMEY4QkY3MDJDRjhDOUVGMTY5NjYzOEJFQjNDQTZDNzc5Cis6MTA3NzAwMDAyMzJGOTk1QUE0RkI3OUUyQUI1NTgxQTBCREZDMUZBNzlBCis6MTA3NzEwMDA5NzQ4MkMyODI3RkVGOEZFNDBFQjc3Q0NGNjMxRkQwNTg0Cis6MTA3NzIwMDAyQTc4Mjk4RTJGNTBDMjkyMTdERjlGNTFBNzQ5MTczNjBBCis6MTA3NzMwMDA5MTBDM0Y4REYzMTVDQ0Q1RDg1RjE2MENDNTNFOERBN0E3Cis6MTA3NzQwMDA3ODI3ODk1QzdBMzJBQ0JDQ0U3QTQ3Q0Y2MTFCRjIyMUI0Cis6MTA3NzUwMDAzMEI3NzFCNkRCMTI4QkQzRUQ1NkJGQUY4MEY2OEYzQUUwCis6MTA3NzYwMDA0NEJDMEVCNERGMzc5RUVEOTI0NEVCNTE2NjA4RkUwNDM0Cis6MTA3NzcwMDA1NDkxNUZCOTQwNjVCQjU5QTlDQkIxRDIzMTk3Rjc3NzI2Cis6MTA3NzgwMDBDODI3REEyNzBGNUNCN0E0Rjk3ODcwRkU3Q0QwODI5MzAzCis6MTA3NzkwMDA2Mzc2RDVDODdGNzAxQUEwRjc5OEVENkFERkJFRDcyRjQxCis6MTA3N0EwMDAwQkEyM0VCRUY1QkYzRjQ5MDVCQ0ZGMjcyNTlBNEFGQzA4Cis6MTA3N0IwMDAzODdERkY4OTU0MUZGMkUzQURGQjQ1RkVGMjdENTM3QzFCCis6MTA3N0MwMDBBNDY0MEFCOTJFQ0VBQ0ZFODJGODdBREJBQUJGNEQ4ODNCCis6MTA3N0QwMDBCNzJGQjAzMjlCRjVFMjhFOTA0Q0M5RjAwNUZENTlCRTMzCis6MTA3N0UwMDBDM0M5N0JDRjQ2QkYzRTlDOTlEMDM3RjRBMERFMEU4RDM3Cis6MTA3N0YwMDBDOUUyRUE2OTk5MjIyRkJBNjNENzE2MUJFNUQxOEIzMzA4Cis6MTA3ODAwMDBGREE5OTlEODNGQURDNzdGQTdEQjUzNzkzRkMwQTA2N0RCCis6MTA3ODEwMDBEMUFFNzEzNkUyRjc5RjNBRUQxMDYxMDNEOTZEMTU3MjYyCis6MTA3ODIwMDBGNjVEMkY0REEwQ0Q3QkYxNjdBNkYzRjBGRTAyMUJFREI4Cis6MTA3ODMwMDA5RjJGOTEyMDJBRjZCNUUwRjBDRkIxRkY1RUFFMEM2QjIyCis6MTA3ODQwMDBCRDAzRDdCMUU0MkRENTY2NDFGOTJDOTkwRUQxMjBFQUJDCis6MTA3ODUwMDBENUEyQkJBNDM1RjdFMkY4NDU3RTE3NDU3MDAzRDZCOTJCCis6MTA3ODYwMDAzMDk4OThFNzJGRDNFMzk1REIxRkIyOUFGMkE0QzZDM0YyCis6MTA3ODcwMDBCNDVGQjYxOEU3QTE3Qzc2NDk2QkUyRkRGRUFFM0IwRjI0Cis6MTA3ODgwMDBGRjlDRkM0MDg3OERGREMwQjI4QkU0NEZFMzMyRjU3ODVFCis6MTA3ODkwMDA2NTAyNENGQ0FBOTRFMjk1QjIxRjk1Njk4M0RCMjUyMzBGCis6MTA3OEEwMDA1RTM5QkQwQTA4M0NGMDk3NTUwRTZFQ0ZBQzUyQjlGRDVCCis6MTA3OEIwMDA0MkI3RDdDQjNCMEUxQzY2NUMyQkREMTNDOENGM0VENTQxCis6MTA3OEMwMDBGNUFFRjMxNjJERTYzN0JFQjlFNTkzNDMzRkM3N0UwNTA3Cis6MTA3OEQwMDBBREIzOThFQzY1QzQ0QTc4QkM0QUY3MUJDQkY0MzhBNDI2Cis6MTA3OEUwMDBFMjczQjNERjM4RjA4N0RGNTM5RThERUJERkNFMTlENzFECis6MTA3OEYwMDBBNUM1MjNCNzgyRjI2OTNDMUYwQzNGNjJFNjQ3N0Y1NzVDCis6MTA3OTAwMDBBOTkzNzAzMjNGMzM3MTNGRjY3RkNBOTdDMTlFQUI5NzAwCis6MTA3OTEwMDAxMUQ3NDlFQzg3QTE0RjVGNjQwODdDMkZERTM2NkY0RDhECis6MTA3OTIwMDAzRUJFQkY3OURGMDc0NTNEQzIyRUJEMDY5RTE4NUVEMTIzCis6MTA3OTMwMDBEMDMzREU5NjAxNDRENzIyM0VGRDlERkY3NDk4Rjg3NDQzCis6MTA3OTQwMDA5OEYwMzY4OUZBOTdGMUZEREMyQUM0MkZFQUVEQjJDRTIxCis6MTA3OTUwMDAwRkRGODRCMUFDNUZCOTk2NUM2QTIzQjk5NDVGOUE3MTBBCis6MTA3OTYwMDA2OEM2OUYxOTZGQkRENjlFMjJCMjBGNjY5Q0Y1NEE4OUU0Cis6MTA3OTcwMDBFNzY0NDZCQjM0NTM5QzVGMkNENjdDQjMyOERGNDVCNzA1Cis6MTA3OTgwMDBCNjQ2RTVGNTA4RkI3NzVBNjkzREZDNDNEMkRCNkQxMjNDCis6MTA3OTkwMDBFNzg3RjVDRkI0M0Q0REY2QThGNkI3M0Y3MTkzM0RGQUIyCis6MTA3OUEwMDA1MDY5RjVEMEZCRUFCNjNGRTBGNjkxNUQ1MjgyNkU3QUZGCis6MTA3OUIwMDBGRUMzOTBCMDRCRTZGNzc1RUE3QzM0Q0UwNTJFRjhBNUYxCis6MTA3OUMwMDA4N0EyNkJFRTQzN0U5QzQ3N0QyNkZENkQ2OEZGRUI5QTk4Cis6MTA3OUQwMDBGQjI4Q0ZGMDM5QTI5NDc3OUU1NjdBNjYxMTFENzcyQzNBCis6MTA3OUUwMDA3NDM1MzY3OTI5QkY0RDVDNzdFREUzM0ZGMTY4QkM3Rjk0Cis6MTA3OUYwMDAxQzJDRDBGOUM3Rjk2QUMzMzZBQjM3ODJGMzM2QkMyMkU4Cis6MTA3QTAwMDA3QkU5MzUwMTg4RjJGQUNDQ0YwN0MyRUZEQUM4N0VBQjRBCis6MTA3QTEwMDAxNjg4MTY0RTFENzgxRkM1NjgyM0JEMDlCNEFGRkI1OEU0Cis6MTA3QTIwMDA3NjUzMkJFNDE1MjAzRUM3OUQzM0Q0RTg3NkQ4OENFM0ZCCis6MTA3QTMwMDA1RDk5RkFCRTg4OEU1RkU0MEZFRkE3MDY5MTJFREEzRkJDCis6MTA3QTQwMDA4MjkwQjBDN0NEQkZEOTM4RjY2REE0RUZDQ0I2MTdEREE0Cis6MTA3QTUwMDA1MjU5RkNCOUMyNkE5NjQ3N0ZGOEY2NUYzOTJDODNFMzI2Cis6MTA3QTYwMDBCNzU3Qzc3QjJDNkUwOUYxNzM1QTg3MjQwRTgzM0E0NUFBCis6MTA3QTcwMDA1QjY3OERCODI5NkZBQkRCNjJGNTA2RjE3MjVEOUIwQzFECis6MTA3QTgwMDAwRUYyNUYyN0VEMUMzN0Q0QjU3REMyRjhBQzkzN0M1MTY0Cis6MTA3QTkwMDA2OTFDMkZDMzJEQzVDNTExQ0JEQkRFOUI0NUY2NzY3OTVFCis6MTA3QUEwMDA5RTBDNzM1MUE1NkFGNzlDMTNFMzdEMTA0REMxRjFDQjc5Cis6MTA3QUIwMDA3N0JGM0RFQjg3RDQ0N0JDM0I5MkM4QUIyQTdDQzAyNjNFCis6MTA3QUMwMDBGNEM2MjRBRkYwREJCMzI4MUU2RUZFQ0Q2NzJDOEYwRkZCCis6MTA3QUQwMDBGNzRCOTA1MzNDRjBGOTlBMkRFRkQ5Qzg5RjlDNDFDMUM4Cis6MTA3QUUwMDA2NEE2MEI3RTkxREYwODg0RTU4NUI2QjQ2NEYyOEI1Q0Y2Cis6MTA3QUYwMDBGRkJCNEFCRUNGRkI3RjE3OTNFMzdBM0E2QjFCQ0Y3ODZECis6MTA3QjAwMDA3RkYyNzc0ODQ3Q0Q5Qjc2RUY1QzdBRUY5Mzc3QkEwMUE3Cis6MTA3QjEwMDA3MUYwODFEMjI4NzBGRjhCMDczQ0U0ODc2QkFDNDE4RkZBCis6MTA3QjIwMDBDQUFEQjg1RUYzQ0JCQjE5OEZDQjhFREZFRDExRjk4REVCCis6MTA3QjMwMDAyRjRGRUMxNzA1RjM2ODlENEIzNjdGOUJEN0I5MTRGQzhDCis6MTA3QjQwMDA4Q0M3OUE1RkM4RDVCNDRGNzM0RTgxRDlCQjkzRTg0REFCCis6MTA3QjUwMDA2NTk2ODhCN0VDRjA4M0IxRjc4OUYzMDBBMEZDRkMwM0NECis6MTA3QjYwMDA3RERGMzRGOEIyQ0M3MTlCMUQ2RTRDOUIxN0I3RkY2NDYwCis6MTA3QjcwMDBDRjEyRjYyQTA4QTEzRkQyQjk2QTAwREQyQjlGODMxQ0UxCis6MTA3QjgwMDAzRjM3OEJFNkI5QUI1ODY5QTQ3MzIyNUM3RjUwRTc5NzA3Cis6MTA3QjkwMDBGNDE1RUYwQjgwQTZDNEM1NTk1NUM3QUZDRUExN0QzMUYyCis6MTA3QkEwMDAzQkY0REJGRTU3MjVDN0Q1MUFDNTNENzFDRjMxREYzRTBCCis6MTA3QkIwMDBEODZBMUYyMjVEODlBRDI3RjlCRUU5RUQ1OTg2RkVDMzVCCis6MTA3QkMwMDBDQjEwODdBN0MwOEUwRjE4NEY4MEZFM0IyRDU3RjQxRjk4Cis6MTA3QkQwMDAyMzdENUNFNDZBNEM0M0JFN0RGQUNBQkIzNjNBRDcwQUMxCis6MTA3QkUwMDBFMjdBODYxMUJERERFRjcxMUZCQ0Q5MUE4RDM3RTYwRjIxCis6MTA3QkYwMDA3NEQ4NjNFNzgxQTREN0RCREUzM0U5NzVFMjdERjRERjc3Cis6MTA3QzAwMDBDQ0NGMDBBNDY5OTRCNzdENjA4QkNFMjI3RjFFQzRGN0QxCis6MTA3QzEwMDA1MjdEQzFEMjBERjY4NEYzQzYxODVFNENFNzhCQkE3RTU2Cis6MTA3QzIwMDAxQUZCOUNDQjRDRjE5OEQxOUFFREMyOTU1OTg5NzYwMUZCCis6MTA3QzMwMDAzNjY3MjczRDVGMzRFNzIxNzVENkQwQUY4OTNGNzUyNzdBCis6MTA3QzQwMDBFRDlDQkZENEI1MDlGREMzODAzQTNBMENGNUUxQTM1REM0Cis6MTA3QzUwMDA4NzVFQkIwNUQ3RjE1MUQ4OUEzNTk3REY5NjY4NkY2QjcxCis6MTA3QzYwMDA5RTQyRkRDNUYxMzJGMjNCODVFREVENjcxQzRGMTlGRURBCis6MTA3QzcwMDBFODIzMTc1RTFDOTM0NDZGRjE3QTUyQkQ3NTAxREJCM0E0Cis6MTA3QzgwMDBGRjU3NzY3NkQ5MjA3NkY2QkI1OTAzRTI4NDM0N0MwRDEzCis6MTA3QzkwMDBGQ0U1ODlFNTk3NTM3QzYxRTZBRjYxNUZDRDc2RjM5M0IwCis6MTA3Q0EwMDA0QzJEQTlERDA0RERDRjFCN0NBQ0RENzk5NjcxN0IzRUNDCis6MTA3Q0IwMDA0RjlDMzczNTZDRkIyQkZCMzE2NDZCRDQ4RUI4NkQwODUxCis6MTA3Q0MwMDA3RENDRkQwN0M4OEY3MUZGQzA3QzY5NkNCMjc1MjdGMjRGCis6MTA3Q0QwMDBEMzdDRkYzMjkyMkRFNzIzRDFFRjEzOUY2NThCREIyQkYzCis6MTA3Q0UwMDBGNkU3NTQzRUNGNkYyNkJGNDk3NjVBNTM4MUU0MDgzM0Y2Cis6MTA3Q0YwMDAyMDRDNzE4N0Q0RjlGQzVGRTk3REU2QkMyMjM4MDM0NjRECis6MTA3RDAwMDAzNkYyQjkyRUFDOEJBRkNGMDkyQjdBM0Q0NTMwNzk3RDU5Cis6MTA3RDEwMDA0RUIzMkQ3NjlFNEJGNzA3M0JDRjdENUZCNzU3NUU5N0VGCis6MTA3RDIwMDBDQUU1MDhENjJDNEQ0RTU2NTdFMkFEQjIyNENEMjM3RTdGCis6MTA3RDMwMDA5MjI1Q0U3NzRBQjNDNUJBOEY2NTA5NzlCNEM4RDVGQTBBCis6MTA3RDQwMDA0NkEzQzg5NzY4MEY5NUVENUZCQTlCQ0Y4M0FEN0E3RDQ4Cis6MTA3RDUwMDAwNkNFOUNDQkU3MDc0RUNCMjdDODEyRDhCREExN0E4RUEyCis6MTA3RDYwMDA0MkZCQzMxNTk2M0I0QkIxREZCNUUxRjYzOTBBRTJDN0RBCis6MTA3RDcwMDAzQkQ1QjJBNzA0RkIyRjZDNTgyQ0ZBNTc1QTJBQUMwOEYzCis6MTA3RDgwMDBGREM3ODM0QkU2Q0NBNDdEMDNDQkRCM0ZBNUY1MjlBQjM4Cis6MTA3RDkwMDAxNUEwRkE5MUQyOTZGN0I4N0Y5NzU1OUM1RjM1M0NCQkZBCis6MTA3REEwMDBCNzg2REVERjIwQTEyMDkwRkYyREVFNzAyM0Q3MzFFNENGCis6MTA3REIwMDA4MkJBOUEzNjhGQjUzRDdFQkFCRjI2MEZGMzc5OTQ0N0MzCis6MTA3REMwMDAyNENERkZEQjJDRjIyQjhFODg1QjJCQTFCQ0QyQjdGMTJDCis6MTA3REQwMDA3Qjc4NUY3OUQ5NEEzOTIxQUU1M0VDODM4RkRFMzMzNTE2Cis6MTA3REUwMDA5N0VDRUVGRjg1RjdGRjVCNTZGNkUwRUYzRkYzRDRCNTc3Cis6MTA3REYwMDAwQjY4RkM2ODE5NTQxOUU3MkI1N0I0MkFFQURCMzFCRjJBCis6MTA3RTAwMDBBNkJDQ0Q5MDQzQjkyMkY4NUVFNkIyNzEzRUQ3OTJFRUExCis6MTA3RTEwMDBDQjI1M0MxRDIzOUM2NjVGN0FEQkFDRDcwRkM5NEU4MTE2Cis6MTA3RTIwMDAwMzM5Q0REMkI4MUJEQjU3NzRGOUJGQUFGMzgzRkU2OEMwCis6MTA3RTMwMDA1RkEwNkY1RkNFNTZBRTVCODE2ODExQzk1Nzk2QjdCNjJCCis6MTA3RTQwMDAxMTNGQTI0RDBBNkNBNUZERDc3RDhGQjcxMTNFNUZCN0RDCis6MTA3RTUwMDAzOTc4RkZFOEU2QjRGNUQ2MkI5MEU0NzI0N0QxOUQwNDVCCis6MTA3RTYwMDBGRTM3QTU1RDc3NTNCQjJGREJERjkzMjVFNjhERDBCQ0I2Cis6MTA3RTcwMDBCNzdDNUYxNkYzQkExQTUzQzk3RjgyMEZGNTRBRUNEMzY5Cis6MTA3RTgwMDA3MEZDMEU3RUQ0MkJBMkY5MjBFQUQ1MzgzMjA1ODk3NTE0Cis6MTA3RTkwMDA0RTY2M0FFNEI0NUQ0Q0M3Q0Q3NjQxQzc4MjUwNDk3MzEzCis6MTA3RUEwMDAwRkQyMzFDRTFFQkE4Q0YyMkI3QzdGOTRFNDcwMEI4NkZECis6MTA3RUIwMDA1Qjg0RTc2MDIxNzQ5MURDNUVCRkVEQ0EyRDYyN0Q4NTM1Cis6MTA3RUMwMDBBQ0FGQUNGRjdDRkU3RUU2NDk5QTJGODBGM0QzMzk2QUQzCis6MTA3RUQwMDA0MEVBRTFGRTFFQzVBMTA2NTU2MURGMTdDNkVEQkIzREI4Cis6MTA3RUUwMDAwQkFEMjdDQUM0RkU3RTMzRTUxRDUzRjVCQ0Q4RDg3RjQxCis6MTA3RUYwMDAzM0VBMEQyNjc2RjlBQjVDNjRCMEU1NEU5OUVDQ0EzOUVECis6MTA3RjAwMDA4Q0Q3Qzg4RTk5RjdERDI2OUJFQ0VGRDQ4RThGRDgyRUI4Cis6MTA3RjEwMDA1RkVDM0NEMDk5QUREQkUzN0NDOEE3NzU4NEU5M0M5MDZECis6MTA3RjIwMDAwMjVFREQ0RjdBRTkzQzMwODlGRUM3OUQwNzY2NjYwQjJECis6MTA3RjMwMDAzOTdERUQ3OUUwOURCQUJERDFBODRFMEVEN0QxOEYxMzEyCis6MTA3RjQwMDA5M0RDRkE4RjJFODJGMjRBQUU0NzY4ODRGNEMxRkQ2QTUwCis6MTA3RjUwMDBCQkM5RkUxQjM4MUZGMzhBN0EzQkQ5QjMzMUFGQzA2RDYyCis6MTA3RjYwMDBCNERFQUJGNUYzOTNGRUQzQzBGNTgwRTM3QTFDNUMxRjVGCis6MTA3RjcwMDA2OEVEQjI4NjQyNTI1QzNEQ0E0OTBCRDdBM0Y0ODMzNzAxCis6MTA3RjgwMDBDNEY1MkI0MUJCMUE2NDdCMzk5NkVCNEY1QTRFRUFFNzk2Cis6MTA3RjkwMDBCRDdBM0Q0Mzg1NjBEOTNGNUMwRjYxQUU3Rjk4RTI5RTFDCis6MTA3RkEwMDAyNDJGQUNFNEYzMTk5MDI2MERBQzdGOTgyMkRGMkE5MzlFCis6MTA3RkIwMDA1RDgxQTM0MjlFMTdFQTIwRTQzMjk5RDY3NTJFMDI0MEQ1Cis6MTA3RkMwMDAyOURBODQ1N0UyRTQ4REZGOUI5ODE1OTRCOUZDRTk1NEIzCis6MTA3RkQwMDBFMkY1MjkyNjVDOThFNTdGNkRCNjFFREZFOEYyMUZCNDU2Cis6MTA3RkUwMDA4RUU0NDNCMUFGMzYwRUM2NzIxRDg5RDU1QzQ3RjI4NjZBCis6MTA3RkYwMDA4NTBCMzY2Mzc1MjQxNTIxRDJCNzA5NEQ2MkRGRjg2MjBGCis6MTA4MDAwMDA3NTNDRTYzQTFENzMxRDRFOUUzRjkxNEYwNTM1NTcyNDMyCis6MTA4MDEwMDBEQ0JGQUNCMTNDQTE3RkY5Q0EyOTA5RTM4QkQxQTFDNjcxCis6MTA4MDIwMDBGNzRCMUY5QTkzMzA3RTU4RUI4RDA5RkQxMTlCNkU0OURCCis6MTA4MDMwMDAxODNGMkFCNDI4RTFGRUU4MURCNTQ5RUI1RTBDOUM4Qzg0Cis6MTA4MDQwMDAwOUFGNDhCOEJGRDFGOUU0QkI4NEFGOTYzQzU5QTU3OEQ1Cis6MTA4MDUwMDBGRUNBOEVGQjRDNzUzMUQzMTgxNzUzOEM3RDc4NURGRUFDCis6MTA4MDYwMDA0NjVEMUQ5NTgxMTE5RkM3QTNGQzFGMkJBNkI4RTlGRTk1Cis6MTA4MDcwMDAyQTQ5MUI4ODAzNkYyNEM4N0VGQzFGQzVDMTdBOTMxRDQzCis6MTA4MDgwMDAzMEY0RkY2MkZCMzczRkQ2RkQ4NDlDNTIyNDUxOUNFM0MxCis6MTA4MDkwMDBDM0I4MkE2NTJBRDUxMThCNzM3Qjc4NEJENEFCN0M5NkY5Cis6MTA4MEEwMDBGMjc3OEU4QjM0QzlFRDg1NkZEMjVCNTU4OUUyQTA3QjY4Cis6MTA4MEIwMDBBQjM0OEU4M0VFMUQ1Mjc0ODBGNjBGN0E3RUUwRjY0QTYyCis6MTA4MEMwMDBGOTAzRUI0MkNENzVBMDE5MEVERjY0RTBBRDExNTEwNzQ1Cis6MTA4MEQwMDBEOTgyODY5RUVDN0Y3MDg2ODNFMzhDODcyRDk2REJBQUZGCis6MTA4MEUwMDBFM0U4N0YyMjVCRDg5RjI3QjI0NUJFRjU3MzVCNzgzNzA0Cis6MTA4MEYwMDBEOTAxQzUwMTZBNTM5RTc4OUU4QTFGODAyQTdCNTAyRTIzCis6MTA4MTAwMDBFRTRDMTBGNTYxRjBDNkRBOTk4NUU0M0Y3QjQ2NkFFOUVBCis6MTA4MTEwMDA1NDNGOEJGRDZGRTA2NTI1QzRGRUU0OTY2Njg1RjNCQzk1Cis6MTA4MTIwMDBENUNFMjdEOTlGOTQyQkMyOUY4QzkzODVERjQwM0ZEMjE5Cis6MTA4MTMwMDA0MUY2RjE0REU5N0VBQjg4QjM4MjU2OTI0RjgxMDM4MkJFCis6MTA4MTQwMDBFRTcyRjZBRjdDNEU5QzBFNTlEMjhBMzJBQTRGQkRFMDM5Cis6MTA4MTUwMDBCN0I0QUYxMDRDODc2QUE3NUE4ODRGRkQ4QjY1M0UwRkE2Cis6MTA4MTYwMDA3RTg5NDg0MjdBRkI2QjQ2NzE5RDczRkY4NUZBM0YyREVECis6MTA4MTcwMDA4REYyRUJGRUM1OEY5RUJEQkIzMkE2OTcyNzZEQzlGMzZFCis6MTA4MTgwMDBCQzhCRURCQkQ1NkM3OTM0OTVDRTUxNEU4RTg0ODRGQTgwCis6MTA4MTkwMDA4QzM3QjM0NTdFRjg2NkI2MkNFQTBDNDJFRjc5ODg0REYxCis6MTA4MUEwMDA3RDRCQkUxODRFNDQwN0E0RUUzNTJFMUNGMkUwQTYxRkYwCis6MTA4MUIwMDA1NDkzNUM2Q0VERjM4MkI0QUY2OUVDRTM1RkM4MDMzQkFFCis6MTA4MUMwMDBBNzczRkRCNjkxMkZEREZDQkFEOEQ3QkJGOThCQzQ3RDYwCis6MTA4MUQwMDBFQjhGQjJDNUI5QzA0N0Y0M0U2Q0NCQkJGQ0UzNDk2RTM0Cis6MTA4MUUwMDAzNzkwNDJGMEJFQjI3RjNDQzUwN0Q1MkE2OEU0RjcxNzQ2Cis6MTA4MUYwMDBGODE3REU3RDE0RkJGM0Q2NEIxQ0VGRDM3RDFBN0YyM0RCCis6MTA4MjAwMDBDQTkwRUU5RjAwRUZBQjdCOTFCRUNGQjMwNTNERjNBMUNCCis6MTA4MjEwMDBEQTRBNzRCRUY2RkRGQTU0QzJEM0VCRTk2MjdDNTQwMjJBCis6MTA4MjIwMDA2RDZCREM3QzM3RThGM0JERkVGREU1N0IyOTRGQTdGN0RFCis6MTA4MjMwMDBEMUZCODkxRTdBRkYzQzE1NEFBOEZGMUFGOENGQkU1QTE3Cis6MTA4MjQwMDAzQ0YwQkQzNzgxQ0ZBQUQ3N0I1OUM5NEY5NjQyQThFREU0Cis6MTA4MjUwMDA2OUIyQUI0NzJDREVCNUMwNkQyNDkzRkQ5MjlERkQ1MkYzCis6MTA4MjYwMDA1RjUzRjRDOTdCOTBDRTNGRDVGRTc1QUY4NDdDRkRFM0IwCis6MTA4MjcwMDBDMkU4QUY5RkM2RUJERkREMjQ4Mzg2QjhGODM4QzMyRjkyCis6MTA4MjgwMDA3QkUyRUFCNDRGMkVGRTI0OTVGODg5RjFDQUY2OUY5MjVDCis6MTA4MjkwMDBERUVEQjQ3QkE5QUVFM0NEREE5REMzRTNFM0ZBNTRDRkMwCis6MTA4MkEwMDA3NDA3M0QwNzkzMkVFRDNDQURFQTg5Qzk4Q0JGMTVEQjAxCis6MTA4MkIwMDAwNUZFNTZGQzY2NDQwRUUxNkM0NUVBMDVEQzg5RkVGNkQ3Cis6MTA4MkMwMDA1MjNFMjc5RDIwNDFEMkZDNzgzRkUyNEQxQkMxNzUzNUJGCis6MTA4MkQwMDBBMDIxQ0VGNjdGMkVFQUNBRjcxQ0NEQTgyMEZBMTRGMDEyCis6MTA4MkUwMDA1RjE2QkY5RTNEMkZERDMyOUFFQjc5REZDOEJBMjQzQTg0Cis6MTA4MkYwMDA0OTY3ODM2ODdGNkY2NjUzODlGMTgxQUUyNzBCM0EzM0Y0Cis6MTA4MzAwMDAyQkY0Nzg3Mjk0ODdFMkI5REZGRkU2RUM3RjEwNUZGNjFBCis6MTA4MzEwMDBFRERDRkU0M0Q2OTE0QkUzQzNDMDNBNUE3NTI3REIyNzA5Cis6MTA4MzIwMDAyMzBGQTNCQTU3Q0FEMzBFNTlEODRGNUUyRERGQ0Y3OThBCis6MTA4MzMwMDAxOEQ1Njk3MERFMzVBNDg4QzdBM0MxNTFBREMyQkU4OTA2Cis6MTA4MzQwMDBFRjI0MzAwRTZFRjY3MkJEMjdFQkVCNEE1NUM0MkQ0Njc2Cis6MTA4MzUwMDA5RTI0NUJCQ0I5OEFGOEM4RTBDNUE5M0M3RjA5RDBGRTYxCis6MTA4MzYwMDA5ODlCMTIyQkMzNUU2MTFDRTE5NjJEQkFCRDAyOUYwMzQwCis6MTA4MzcwMDBGM0QzRDFCQTNEOUJFNUYxNUVEQjIyQ0U2QjEyRTI0RjI3Cis6MTA4MzgwMDBFQzU3RUQ0QTEyNzc1NkUzM0Y4RTNCMzdGQjlCNTNEOEIxCis6MTA4MzkwMDAyRjZEOTZDQjI4RUVGMDM5MjJFNEM3Q0Q3MUU3NTQ1ODAzCis6MTA4M0EwMDBDRkZCMDAwM0UyQ0ZFN0ZFNzI0OUYxRTdGNzNDRkYzRDY4Cis6MTA4M0IwMDBCRkIzRDRBM0IxRkQwOThGMTQ3NjJFMUMxOUMyNzkwRTU4Cis6MTA4M0MwMDBGRTU1OTA3RTBEQTVCRDAwM0EwN0NEMTNBRDRERUExREJCCis6MTA4M0QwMDBFOTQwRkRBQ0Y1OTRBRjdCNjgxQUMyNjVBOEUwMEZGNUUzCis6MTA4M0UwMDA1MUE0NTBBQTdENzJFODJCOEEwM0JCMTU5NjVGRkY3M0Q4Cis6MTA4M0YwMDA1NzdDRUQ3NzI0OTVBODg3RTRFQzIzODdBNzcwQkQ3MzlECis6MTA4NDAwMDA1Rjk3RDA4RkI2MENFRERGQTc1MjlFODE3MUU2NTYyNEEwCis6MTA4NDEwMDAzMTQ1RTlCMUE1Mjc1OUNGRDM2NDdGNTExRkMyMUU5MUMxCis6MTA4NDIwMDA0NzM5M0FDNEI5QTg0M0YzMDFEOTk3MTQ1NTFENDc4OTcwCis6MTA4NDMwMDBCOTMxN0VCMTQ3RDhEREZBQzM2RjE2RDk1MDNFNjcyREVBCis6MTA4NDQwMDA0N0RENzRCRTUyQjdGNzI5MzcyRTE3OUEzM0ZEMEY5MEM4Cis6MTA4NDUwMDBGRTJDM0ZGOUYyMDQ5NUVCRENCNjE0NTFGRTFEOEVCQ0U4Cis6MTA4NDYwMDAzQzgzRTNCM0Q5QzhEQTcxODNBRjI3QjBBOTgyM0U0MjE3Cis6MTA4NDcwMDA4MDg2NEQ5OURDOEVBMjdEMTVCQzE0ODg4ODc1RjY3NkIxCis6MTA4NDgwMDAzNDY3MjREQjFGMDhGQ0RCNUIwNzY5QkQzQjhGQTU3MEVECis6MTA4NDkwMDBEQ0IyMzNCQjlCRjUyMDM4MEY2MDNCRjJGQjg5Q0Y0NzQyCis6MTA4NEEwMDBGMzdDMDgzMEE2RTM4QTZBNEQyMjdGRkYwQjdEM0QzQkJCCis6MTA4NEIwMDBGNUZDQjJGNzczOTlDNzE5RjM4RUU5OTgyRUFCODhBQjI4Cis6MTA4NEMwMDBCMjQ4RUI0MUFFRTNFQUI0NkIyNERGOTQ2RDIwRjhEM0ZECis6MTA4NEQwMDA5OUMyNzU2MTgxRkRENzg4QkMzMzVEOUM0N0I3MEQ4OTEyCis6MTA4NEUwMDBGRTkxREUxM0RENjdEN0E4NEUzNTQ1NkQ4NTBDOUNCRjI4Cis6MTA4NEYwMDBDRDI2RkNFQzI4MDRGRTUzQUVEODc1RTM3RDI5OUQxQkU4Cis6MTA4NTAwMDBGOTIzMDhDNDA1RDdFM0E1MjhBREYwMEQ1NzNDRkY1MzY4Cis6MTA4NTEwMDA5OURFRkQxRTExRUZCNDBEODk1ODVDRTQyNzMwNTdEQTVGCis6MTA4NTIwMDBDQTc0QzVFODA0N0VBRjQxRTcyODhFOEJEQjZDRDFGN0I3Cis6MTA4NTMwMDA2OUJGMURFOTUyMDkxN0EzNDBEMDA5OUQyMzM0OEE1NzBBCis6MTA4NTQwMDA1MjU0NzFBRTlFQTI2QURFQTAzNDkwQUVDMDU4MDg2MTRCCis6MTA4NTUwMDA3MDAwMEZBRjg2MEI3QUNFNzU4NDQzNjI3RDA3RUE0MkM2Cis6MTA4NTYwMDA1Qjg5MUVDNzA0MTdBRjlCMzkyREFFNEY4NjZDNTJFQzRBCis6MTA4NTcwMDBGOTEzOUU2NUVCNUEwQTY5NURDMjBGMkE0QTk4Q0ZDNzY0Cis6MTA4NTgwMDBERDBCNDBBNUYzRUYxNEM1Qzc3OTUyQ0E3Q0QwOUE1MEQxCis6MTA4NTkwMDA1RTRFODc4RkVGN0I3MDhFQTZDOURDOEYxMEZEMkFEREMzCis6MTA4NUEwMDBBNzdEOUIzNEQ1MzkwN0U5NEVGQjMyOEQ5RjZCRThCNjJBCis6MTA4NUIwMDA3MkRENzlERERGNkY0QTJCQzNGNTlEQjExQ0JDNjcxN0Y3Cis6MTA4NUMwMDBCNjFGMkQwQzBGQTc3M0RBMDk2OUZFQjdDODFFM0Y3M0RCCis6MTA4NUQwMDA2QUQxQkEzMTM4RkUyRjZENTZFRjVDQjI0QjNEQzExRkU4Cis6MTA4NUUwMDBEM0I5N0RFRDEzNTY4REZDRTI4MzZGRjQ0N0JFMjJGOUJCCis6MTA4NUYwMDAzRTJCQjE1REVDQjM4QUZCRDhENzlBRjA3RTQzRTcwN0Y4Cis6MTA4NjAwMDAzNjNBRDdCQUE2RTM2RDFCRUQ3RkFGQ0NGMUJGNEY3QUY4Cis6MTA4NjEwMDAzMEE5QTNBOThBRjgzNjE5NUE5QjY5OUYxM0VEMjFENzZGCis6MTA4NjIwMDA0Qjg0NzM4NUJERTg3RjY1RjhENkE2MzgzRUJCNzJGNEVGCis6MTA4NjMwMDA3REVGQThGRjcyRDI5QjRFNUQzRkY3NTM3Qzg0RUQ1RUM5Cis6MTA4NjQwMDAzRDRFREI3QkUwQkJBNTVBRENGOTY5MTAwRUYyN0VFMDAzCis6MTA4NjUwMDA2QTc4OEVFQjNBOERFQjdEMjE2NTM2RTE2OEY0NkI4RTlFCis6MTA4NjYwMDBEQjdDNzEzOEIzRTUwODdEQjdFOUVGRkI3OThFRkY0QjEyCis6MTA4NjcwMDBENkRCMDNFRkQ4RENCOEZFQzA5RkMzNDVFNEFGQzIxODE5Cis6MTA4NjgwMDBDRjdENUQxRDY5QzBBNDJGMTdFQThFNEUwM0RCOTE5RDNGCis6MTA4NjkwMDBBRjc1NzBGQ0JERjMzRTM1OURGNDFFRTk4NzM0RUNFRkY5Cis6MTA4NkEwMDBDNUY4ODJGNDY4NkZCMUQwQkJBNjU3Q0Y4RkE1RkRFMkE1Cis6MTA4NkIwMDBGM0ZCOTY1RjRFRkNFQUY1NTgwRDdDQ0YxODQyN0FCNDc2Cis6MTA4NkMwMDAxQkQ4OEUxOTdBNTg0NjdBMjhEMUY3N0I2MkJGQTc4Q0JGCis6MTA4NkQwMDBGMDREN0E2N0VCOUVDMzdBQjdENzAyQTQ3Nzg4NkZDNjRFCis6MTA4NkUwMDAzQkUyNUJBNTM4QTQ0QzQ1QkNGM0YzMjM1ODhGREJCQUJGCis6MTA4NkYwMDA1RkJFODJFQkQ5OTFCREMzQzY1MURGQzJGODZBOEJDQzk1Cis6MTA4NzAwMDAwOTQ5Rjg3Q0E1MzU3MjkwOUVBRkM0RjczNzY5MzFCRDMxCis6MTA4NzEwMDBBQzk0MTJFQjdBMTY3QjQ0OURBQzYxMUY3RkEwRUI2NzkzCis6MTA4NzIwMDA3OEE0OTZFNkM1RjE0RTU5NEVDMDdGOUM5RjE0N0RERDFFCis6MTA4NzMwMDA4RkRFQkJGMTI3RUIzNkEwQkU5NEZBMkEyQzEzMjhERTdECis6MTA4NzQwMDAzOTI2QjMxRkQ4QUZDN0M5MkJGRTMwRTU4NjVERTIzQUE0Cis6MTA4NzUwMDBGQkNGODg4RThCODM3QURDRkNEQ0FBNUNFRTkzNUZEMDQ3Cis6MTA4NzYwMDA1MDJFRTNCMUY1NTU1MEJENzc2MzE1NkRDNTREOUFEREJCCis6MTA4NzcwMDA3QTg4REEyOUQ1RTEyQTNBMkU5Q0I2QTBGQjkwRjhDNjcxCis6MTA4NzgwMDBDRDM3OUFGMEQ2N0VGMDVCQTNCOTRFRkFBNDFERTgzQjM0Cis6MTA4NzkwMDBDRUY2RkY4Q0ZFRjEwOTVDRkYzREZCOTFERjkwMzQyRTlECis6MTA4N0EwMDA2MUJDQTFDNzY2RkMwRDg2OTMzRUE5RTdGQUE5Njg5NzRDCis6MTA4N0IwMDBBRkRCRjhFQjZCMTU3NEU4MEQwNDA0NUNGRjlDOEREQkZDCis6MTA4N0MwMDBENjA1RDEwNzlFQzhGMTVEOTc4M0Y4RkIyMkQ3N0Y1RDYwCis6MTA4N0QwMDAwRUYyQURFRkY4N0Y3QUM4OUZFQzdERTUxRDM3RjlFMTI5Cis6MTA4N0UwMDA3NjlCNkYzNEUxQUFCRDA0RjM4ODI0Nzg5QzkyNjM2NTdDCis6MTA4N0YwMDBGRjVBMzk0OEJENDk2MzhFQzhCNzg2MDc2MTFERTFBNTk4Cis6MTA4ODAwMDBBMTVENTY0M0U0QTc3RERERDc5M0RGNzgxRjU5NDlGQjZGCis6MTA4ODEwMDBEQTRCQTcwN0REOTQyRkQ1RUMzREM0NzVGQTQ2M0VCRDczCis6MTA4ODIwMDAwNEY0M0ZGOUQ2NTlDNEZGNzNCOTIyM0Y1RUJBQzE5QTI2Cis6MTA4ODMwMDA5MERGOEU4MDg4OERDRTkxMDM3RTU3NjMwNDQ1NTI2MzBFCis6MTA4ODQwMDA4QTNCRUVFOEQ4QzJERjhERDQ2RTRCN0NBRThFRTIxNDRDCis6MTA4ODUwMDA4NDUwREQ0NUYyRTNDNjFDN0Q5RkE0MTQ0QTI5NEU0MTk1Cis6MTA4ODYwMDBEQ0YwM0U0OUY0NTVEOUJCMTVCOEJFQUE4QkVBQUI3NjBECis6MTA4ODcwMDA1QTA0OUY5QzBFNjg0OUNCODhDNTJCMjNGMjdDNEJDOEI5Cis6MTA4ODgwMDBERTJEMzFGQzg3NUVBRjE0NkQ5M0Y4N0I4QTUxM0I0NDNCCis6MTA4ODkwMDBCRTNDRTVCNEI2ODVCRjkzMEFGQUI4NEVBRjg2MDg0MDMxCis6MTA4OEEwMDBCQUE3Mjg0MTVFRkY5NERDNTIwOEUyRkEyN0ExNzkyNjk0Cis6MTA4OEIwMDA3RDU5REEyOTg1OTg5RkZBNzcyRjBBRkUxM0ZCNDU5QjhECis6MTA4OEMwMDA2NUZFQ0U2RkIzMDQ5OUM1MzQ2Rjk0Rjk1M0FCRUYxRkI3Cis6MTA4OEQwMDAyRURGOTE3ODdFNTFCN0U5Rjg2MTBBOTVFQUMzQTZGM0Q1Cis6MTA4OEUwMDAyMDlEM0ZFNkYzOURBN0U4M0Y5MjlDRUZGQzI0NDc4RjM1Cis6MTA4OEYwMDBFNzhBQTAyOEUxQkJCQ0FFNEJGQjJFRUYyMzhBMDc1Q0M2Cis6MTA4OTAwMDA3NEY4MDgwOTcxRjkxRTFENDcwREZBQkFFQjQyQjI1ODA2Cis6MTA4OTEwMDAzNzhBODJFQUEzNkZENzYxMTIwMDJGRjNBOTFFNzE0MjMyCis6MTA4OTIwMDAzODgwRjU0MkRFNDYzRDYzMkQ1NERCQTg4RUFDQkVCRERCCis6MTA4OTMwMDBFOTMwOURCRjJERDVFMzVBMzM5RTkwQTFDQ0FGNjU3QTI3Cis6MTA4OTQwMDBERDUwQ0RFNkM0RkJCNTNBNUY2QTREN0M2OUYwNEIyNjNECis6MTA4OTUwMDBGQTQ0REM3REE5RjRBMUU1RkEwRUUxQTA3Njk3OTVFQjQ3Cis6MTA4OTYwMDBCOUNGQzFBRDVDN0Y1NURGQkU4NUU5NTlBQUNCNkYyMDc5Cis6MTA4OTcwMDBCRDQxNUVDRjMyNUMwRkU5RDNBNUQyNkI5NkRGMzEwM0U4Cis6MTA4OTgwMDBFNzU3QzAxNTA5RjI5QjlENzk0OUYyMkIwNTc1MzlBRDYyCis6MTA4OTkwMDBBRkJGNEJFNEI1RkQ1RDI1QkMyRjYxRTBDNUZDRkMyQ0YxCis6MTA4OUEwMDAzRDhFQkU2NjkzODgzN0NGNzY1NDM5MjkxRUU4M0JBQUEwCis6MTA4OUIwMDA3ODI1QzQ3REM1QjE0RkRERjRGRDRERjkzRTE5RTg5QzI1Cis6MTA4OUMwMDBCNEFGQjM2MjVEMTBFREU1OUVBRUExMzc2OUU4MDdDQUFBCis6MTA4OUQwMDA4RjI5RUMzNzJBOEU5NTg3NTI4QUE5NUZFRTJDRTUzQUNCCis6MTA4OUUwMDAxMzJEOTNGMjAwOUM4N0ZENzBERkQxQTEyN0NBMzg0RTZBCis6MTA4OUYwMDA5RjU5NDkyOTZBRDNEMTcyMjdDNTBCN0I0MEVDNkY0ODM4Cis6MTA4QTAwMDBDNzJBMzM3QkUyRkNDQTdCMzk2MkJGNjE0REVFQkIwRkU0Cis6MTA4QTEwMDA5MzlEQkE2NkI3OTVGNzgzQUZCMTQ2NUZBMjNDNkM0RkEyCis6MTA4QTIwMDA5N0UyNkRDMjdFRERCMTQ1QUI1MzQ4REVCRjkxQkMxNDA5Cis6MTA4QTMwMDA3NjFGRUU1RTkxNDVFNzM1RjU5RDU2RDVDRUY0REU3RDg5Cis6MTA4QTQwMDA5MEVFMDc3NzQ5REU2MTM4M0VCMEVGRUFEMTZEQjQ0RjYyCis6MTA4QTUwMDBCNEE1QzI0QkVDMzVERTU3OUVBRTNENEFGNUFFOTBFNzZECis6MTA4QTYwMDBFNEJDRkQ5QUNCQUNFQzVGQ0ZFNDNCRkY3NTJFQUVBQjI0Cis6MTA4QTcwMDBENkI3NjUxNkQ5RTEzM0JGREJDMzc1MTU3RDZEMTJFNDNBCis6MTA4QTgwMDA0QUI0OEY3Q0U4NDlBQUY3MzlGM0Y0NzExQjlEMDc1NzY0Cis6MTA4QTkwMDBCNTFGRTdCQThEQzFGQ0MxRDkxMEUyOEVGM0Y2NTYxQkEzCis6MTA4QUEwMDBFNTM3RjU1QjhDN0UwRjdGOEY1MkFEQzc1MTBEREJERTU2Cis6MTA4QUIwMDBFNjdFMkRFNTAxODRDN0NENzI0OEMzRkYzQ0I0RUYxOUIzCis6MTA4QUMwMDAzRTFGNkVEODI1RUEzRTJFRENERjI2RjE3RDAzRUY4QkJDCis6MTA4QUQwMDA3NEJCQjUxQzM0QzZGQjcyMDNFRjdBN0Q5NDgxRjc3M0M3Cis6MTA4QUUwMDAzMDk3RUJCNDk2RUY3QTg0RjFCRDQ0QzdCN0I5NkUwQUZDCis6MTA4QUYwMDAyREIwQUQyQzRCRTgyQkVEQjc5OUJGRkZCQjQzQzdGN0FCCis6MTA4QjAwMDAxRDE3QzFGN0E4NUMxRERGQTM2MDE0RTFGQkZDNzQ1MUM1Cis6MTA4QjEwMDA0Rjc3RkVGODEwMjdDRDdGRkUwOEVGQkU3RTFEQ0VEOTIxCis6MTA4QjIwMDBFRjFFRDVFMzgyRkU4OEM1NjdCQjMyMzZBRUI3RTMxM0NFCis6MTA4QjMwMDBGRTBFMzE3MEI0REY0Njc1MjdCMzNBM0Y2Njc5Q0NFRDRGCis6MTA4QjQwMDAzQzMwOTNGODdEMURGOEVCODg3RkQ3NzUzQTU1OEE4M0MyCis6MTA4QjUwMDBFN0Y2MDg3QjM2QTdEM0NFRTcxM0Q3NDFCODg1RTREQzI4Cis6MTA4QjYwMDBCN0ZGRjE5NjBDQzJDREFGMDU2RTBDM0JCNzRDRTdFQkVGCis6MTA4QjcwMDBCNTY1M0Y5ODQ1Rjk3QkFERUUwRkZCQkJFRTlDQzU3NjI2Cis6MTA4QjgwMDA2NzFDMTQ1M0JDMzc0N0ZGQ0U3QjRFNThCNzQzOUIxMzJCCis6MTA4QjkwMDBGOTRFRTdENDI0Qjc4NjRFM0JENzlCNUMwQjNEMzZGMkFCCis6MTA4QkEwMDA2N0Q3RUFGRUQzRUMyN0ZCRjI5QzJDRTcyMEZBQUI2MUY3Cis6MTA4QkIwMDAzOEJFNkU5N0E5OEU1MkU5NjE3QUZBM0I2QzdDREVENTlECis6MTA4QkMwMDA2MEYyQkZEMzcyQUQwOUY1MTc4M0UxRDMyQ0FGREI3MjJFCis6MTA4QkQwMDA3NTdGQTJDQjZCNkU1NEQ0MzFDQzc5NDVGNkQyRjk0Mzc0Cis6MTA4QkUwMDA1NzY0NzUxOUM1MEIwNkRGQ0NGMkVBRDI0QUQzQkVFRTQ0Cis6MTA4QkYwMDBGNzEyNUVEMkUzN0NBMzdGODNGRUZENUI1ODZENzVDNUUzCis6MTA4QzAwMDBFN0VEQ0ZFNzVBRjQ3M0NFRDA0RjJCNzA5RDc3NDlEMDY0Cis6MTA4QzEwMDA0RDM4QzRGQ0U2ODY3MjI5Njk3RUIzMzIxN0M3M0Y1RkMwCis6MTA4QzIwMDA3OEZCRkE3MUYxRjk4RDZGQ0I3MDhBRjcxRTQ0QkI1MjU1Cis6MTA4QzMwMDA1MUM5RjUzQkREN0M1RUE4QjRDRUE1NzNCMEMwMkVBQkE4Cis6MTA4QzQwMDA5N0YyOUE0MDg3Q0NGMTQwNjA5NzNENjRDMTc5QUYyMTlCCis6MTA4QzUwMDAxQzIxNURENTlERDJENTg0MjNDQzFCNUE3MkQxM0VDRDJCCis6MTA4QzYwMDBBMzJENjUxQzM3QUYwM0UzMTE3QzZFREVDQzhGMTk3RjFCCis6MTA4QzcwMDA0Nzg2OEE3NUY3MkI1QTRFQjIzQ0MyQzgxRjFBM0UxNzU4Cis6MTA4QzgwMDBGMUFBNzFCRDAxRUQwMDhENkZEMEJGNEI2QjNGRjhEN0RFCis6MTA4QzkwMDBBMkUyNTQzQUI3RkRBQzY4MjFDNUE5QjkyMjdGMzFFMkZFCis6MTA4Q0EwMDBENTI4QzZBQjI1N0FCQzQyNzUxNzRCODVFODYwRTk3M0I5Cis6MTA4Q0IwMDBGN0Q5Qzg3RTFEQTYxRkI2QTBGQTQ5RDVCRjg2RjI2MUI2Cis6MTA4Q0MwMDBENTBGOEQzRkEyNDA0MzZBNjEzRDZBMjA5RDIyMUNFRTc0Cis6MTA4Q0QwMDA5NUM0RkVDREIzNTZBQTBEODFBNjk3ODc3MDVENjBFRjRGCis6MTA4Q0UwMDA2QkUyMUNDQUFDRUZCRDhCQkFEOTVFOUM1RkU4NkEyNDBDCis6MTA4Q0YwMDBCQzJEMkZEQkIyMDYyMzBDMThCREZGNzVCNjM3QTM3RjQyCis6MTA4RDAwMDA2NzUzMkQ2QTZDNUQ0REY0REQxREU3NjkyRDA5RjE3MjI1Cis6MTA4RDEwMDA2RjQ3QjM4REY3QTFFM0JGMUIyRTE5MTgxRkQ1NUY2NEYyCis6MTA4RDIwMDAxRkVCNzk5MzVENDFGQTM5REVFRDNCMjJBQkI0MkY4NDIyCis6MTA4RDMwMDA3Q0ZDNjU3RTNDQkZGNDc4QThGRDYwMEFGQkFGQkVFMzE3Cis6MTA4RDQwMDBBRTEwQzVGRDdGRDFGMTc4NDZERjk3NkY5QTI0MzMzRjhGCis6MTA4RDUwMDAyQzkzNDUzQjdBRkYzMzI1MjQ1RjkyODcxRkVERkRDRTkwCis6MTA4RDYwMDBGRENGNUNFMUUzN0RGNDkwQTgyM0RFOTE1ODg3NUQxRjgxCis6MTA4RDcwMDA0RUFDQjMzNkY4MUFEMEY5OEE3NDBEQTdFRjk1MERCQTM4Cis6MTA4RDgwMDBGNjJBM0Q2RTZGMTIzRDkyQTQ4MzJDMkY4Qjk0OThFN0E4Cis6MTA4RDkwMDAwNjlFOTVBQkUzRUI0ODcxM0RCNzkxREQzQjY5RTg4QkVGCis6MTA4REEwMDAxMkY1OTAxRjdFMkI1NzYzREMzNDc1MEFGOTVBRjY4OTQ5Cis6MTA4REIwMDAxNkRGRkYxREIxNUY2M0U1RjcwRkI4M0YyMzU4NDdGNzk0Cis6MTA4REMwMDBDRjE3M0JCOUJFMDEzRTBGQ0VBNUZFM0QyNUUyRjcwMzBFCis6MTA4REQwMDBFRTc5Qjk3NjQ0RkMzRTFENDgyMjFGMEY1OEEzNUNFRjg0Cis6MTA4REUwMDAxNzM4NkU2MUZBMDJDN0ZCM0Q0MzVENjQxN0I3Q0NBNDI4Cis6MTA4REYwMDAzQURBNkI3NTdCNzFCOEM0NTk0MzM4MEZEMjdCNzM2MjEyCis6MTA4RTAwMDBGMzJDQzkxNUU3MUI0MEVCQ0Q4RDdENUY2OUFDNzczNTQxCis6MTA4RTEwMDBEQ0M4N0M1OEFERTNFQTNGRjRCQzFFRjNBOEYzQjk0OUMzCis6MTA4RTIwMDBGMkE4QzFFMkRGMEI3NEVCRjFEM0Y5RTlEQTg5RUYyMUEzCis6MTA4RTMwMDAwRUNBOEYyODQxQ0FEN0Y3QkM5MTEyMjJGRkRGQjQ2RjQ4Cis6MTA4RTQwMDBEOTlGMjgxRjBFQkM2OTA3OEE0M0VFRDlCRjZDMDRENzhGCis6MTA4RTUwMDBFMUZCRkQ1NzkyM0QzOUJGRkY4RTJCQjk4RTUxMTJERkRBCis6MTA4RTYwMDA5NzA2ODlCRTVDOEFBNzVFRjU1MDlDNTRCRkVGNTVBRTRECis6MTA4RTcwMDA3M0FDREYzQkZFNTE4QTlGMzA1RUJBOTZBRTYzMUNDMzczCis6MTA4RTgwMDBGODJCM0Y1NkM5RjhEQjczQjQzMkIzOTQwODA3QUY5MzlECis6MTA4RTkwMDBFNkFEM0ZBMjcwREQ2M0ZEOTFDQTE3RTc1MjVDNzM2Q0NCCis6MTA4RUEwMDAwNkM3NEY0NkJDNTQ0MUY5MzhDNTRGNDc4NjI2QzQ0RkM0Cis6MTA4RUIwMDBBOTc5ODI3RjdEMDc1Mjc4RkY0MzgyMTI4MTFGMTg5QTE5Cis6MTA4RUMwMDA4MDlGQkFGNjNGNzA5QzUxODdGNjJFMUU0N0M2NzNDNTI5Cis6MTA4RUQwMDA3OTBBQ0YzMzJDNEZDNzRGNThGMjMxM0U3NjhCQjZBRTVFCis6MTA4RUUwMDA2MzBGQUY2RkI5MzVDQ0YyNkVEQTY1MTVGN0RCNDQ2QjAzCis6MTA4RUYwMDBENDQ5MDcyMTIzNDhGQzc4OTEyRUExMUNFNkQ4NDI4NTRECis6MTA4RjAwMDA5NDZGQkU1MDJDRjIwREIzM0M5RUM4MTNFNzg1MkY5Qzg2Cis6MTA4RjEwMDAxNERGMTlCRjMwREQzRjIyRDlGN0M2NDE5ODIxRjI3MDI2Cis6MTA4RjIwMDA0OUU3NzdCQjc1NzZCMkVGNzk3N0U0ODlGRDA5NzcyNjUzCis6MTA4RjMwMDAyNDlDNEIxQUVEQTM3OTQyNUZFNkQ4QzQzRTk1RjlCRTU2Cis6MTA4RjQwMDAzRkNGRjAzRkIwOEVDRTYzNEVDQ0I1QUFDNkVGQjdFNEFDCis6MTA4RjUwMDBBMUREQkQxRThDM0ZFRkFCRjNCM0U4OUM0QkU0RDUwMDI1Cis6MTA4RjYwMDAzRDMzQzkxRTdFOUJGNkY5MjlGRTlBMjRGQ0JBQjFDRjg3Cis6MTA4RjcwMDAzRjZGMzMzQzIwRjZGOTZGQjU5MjVEMzBFQTRCRTZGOTZFCis6MTA4RjgwMDBDQ0YxNTdGNUQ1MzRDRjhERThERjY5OUU5QjY2MjdERTlGCis6MTA4RjkwMDBGRkY2NDVFMkFFMDU3OUJBMUYxRjBFQzM0NTVFRTE3MkNBCis6MTA4RkEwMDA5MjNGMzhENzY1NTU2NTVFNDc2ODY4QjJFRjBCMERGQjk5Cis6MTA4RkIwMDA3Mzc4OTUzODNGRUE0MkJCNDg2REQzQThENzc5REZFQThBCis6MTA4RkMwMDA4NTAzMjc5RjRDNjdCQjlBMDIyNUM4RTJBQkJFRkM5MzgyCis6MTA4RkQwMDAyN0Q5M0M0RDE3RjQ3NTdFMDJGRTBDNzk5REE1M0NBMDY3Cis6MTA4RkUwMDA2Q0EwQkNFRUNDQjNFOERGMjU5REIxRjFGOTI2MzQzRTkwCis6MTA4RkYwMDA2NDkxMDdGRjJFQTk2OUQ0NjcyREE0NEY2N0Y1RUY1RTMyCis6MTA5MDAwMDA5MEJFMjI3QjlDREQzRjlCRjczMURGQkY2NzA2NDQ4MzI4Cis6MTA5MDEwMDA3OEZGQzAyODNCRkJCRkZBOTkxMjlGMUZENDQ3ODQzRkJCCis6MTA5MDIwMDBBQzlGMkZGQ0UxRjBGNjc5MkM5N0VGQTA1QzdDNUUzNkNDCis6MTA5MDMwMDAxM0FGNTE1REFFMjFFRkFCQkVFQzlCNjlFNDkzNzQ4RTMwCis6MTA5MDQwMDBEMzQ0Mzg2NzNCOURDNTZEN0RGQkRCMkQ3QzVFODk3RUZGCis6MTA5MDUwMDA5N0UyQzIxQjI2MjVDQTZEMDRGODFGQzhDNkZCMzdDRjhFCis6MTA5MDYwMDA5NkJDRTg0MTA2QzhGREU2NUJFN0IxREM2RkQyQkY4Rjc2Cis6MTA5MDcwMDBCOTk4REM3RjlCRTdGRjY5MUVFOTdENzdGRjc3QzYyMDAzCis6MTA5MDgwMDA4QjVFMThGNTQxMTFGOUQ3ODY0MTcwQkQ1NUU3MkYwQzVECis6MTA5MDkwMDA4RDNFNERFNzY1REUwQkU3RTk3RjdGM0FGRTNDQkRDNEMwCis6MTA5MEEwMDBFM0RGOTI0Nzc2RDVGMkE1RkIwQUEwRjk3QTdFQjk0MkIyCis6MTA5MEIwMDAyMjM5MDFFQkM1NjA3QUI1NDM5RjdGNDc5RTJBREU5MzM0Cis6MTA5MEMwMDAyNUNFODc0NkU5RkQxN0FDQTE0MkZFOUVBMkVDRDJDRThBCis6MTA5MEQwMDAwMTlCOUU3RDdFMkNEOUI5REUwMzQ3QzZEQUUyRTQ3QTk1Cis6MTA5MEUwMDA2NjA1REEwN0YyMzdGQjBFRjFGNzg3MzFEQzU5NzREQ0RECis6MTA5MEYwMDAyOURDNEFEMjhEQkExRjREQzRFMTE5QzIyMUQ5RTdERDVFCis6MTA5MTAwMDA4N0FFQTdGQ0YxNkNGQjRENTk5MjE2RTc2N0Y3OUU3MDhFCis6MTA5MTEwMDAwRjhCOUJGN0FDRkVCQjE4OThCNzBERkY3NjZBM0M5RDkyCis6MTA5MTIwMDAwRjMwOUQ2N0MzNjIzRUQ0RkZFMTM3OEQ4OUJGREY2QzhFCis6MTA5MTMwMDA3QzY3Qzc3ODdFNzA2NDIzOUZEMzFCNzg1NjQwRTBEOTQ0Cis6MTA5MTQwMDBGODNEOEMwQkRGNTVEQTgwQkY3QjBDRUVCNzczN0Q0NUE1Cis6MTA5MTUwMDA5RjM1NUE5NDFFQTcyRjFGMUE3MjQ0OTgxNTY2MzEyQkZCCis6MTA5MTYwMDBCOURFNzUyMjZDQThFMjczMDI0Q0RFRDc0REE2Q0ZFRkI0Cis6MTA5MTcwMDBDMkIyQTgwRjZERTRCQUM1Njk4REUwMjVEQzRBQjA5OThBCis6MTA5MTgwMDBGQjEzNjY4QkYzRjIyOUQwMkQxMzVEREY4NDI4QjczRUU1Cis6MTA5MTkwMDA1MDE1NkE2NzUwODUxOUI2OTMxQzYxOTlDMkFEQjZGNjMxCis6MTA5MUEwMDA4MzRFQzI1N0M0QTNBNEJGRUYxMEE1QTdDOUU0MTc1QkExCis6MTA5MUIwMDBCRjAyRUYxQjc4QzVDMTE4MDQyNUZENEUzRjJCNUZEOEI5Cis6MTA5MUMwMDA3RkFGNTNFODYzRjRBQ0Y4REQ5MzZGNDAwRkQzM0Y1NUE2Cis6MTA5MUQwMDBFOTY2N0E1MzM1MkQ4M0NFNEI3NjNGQjc0MkE2RkE5NzkwCis6MTA5MUUwMDBGREEwNDU0OUNGQkM5OThEQkNGRjE2OUQwRUUxQURFOUIwCis6MTA5MUYwMDBCMUY1NEVBMkY1QUFCMUZFOTQwNTYwQTFGNTRBQjA0QkI3Cis6MTA5MjAwMDBBQ0JGMTEzMkU4N0M2QzMyNDRGODNENTcxMUMxQjhERTc2Cis6MTA5MjEwMDBFOUEwMjlENEI3RTUxN0VCN0MxNkY5NUI5NTlFQkY1OUY5Cis6MTA5MjIwMDAxQzQxQUVGQjQ5Q0QxN0I4NzYyQTIxMzlBRjkyQjdCNkFCCis6MTA5MjMwMDBDMzhGRDBGOTRDQTk1OEU3NDRCQ0NFRTczODhEODJFRUY1Cis6MTA5MjQwMDAwQkZFM0E1RkQ4QkIyOTEwNjYzOTQzMERBODJGRjI4RjY5Cis6MTA5MjUwMDAyQkNDNTQ4OTVGNTJDNDYzQTFERjEzQkI1NEJFRjY3OTkzCis6MTA5MjYwMDA4MEU5NzdERjFFRURGRDYxNjVFQ0RDQ0JEQjk5QzNGNUIyCis6MTA5MjcwMDBEMEVCMjU0QjU0MjZCQTFDODVBMjFFM0EwMjYxRkUyRTY1Cis6MTA5MjgwMDAzMzkyRjg3QjY3QzVGOTM3NUU5RTRGN0VDRjJGQkVDMzAyCis6MTA5MjkwMDAzNUQ3NzVFRTA4NkRFNUJBOUIwNTQxNjQwRkNENTMwOENGCis6MTA5MkEwMDA3MERBMTNBQjAzQjA5Njg0RjhCRTk1Q0VEOTU1QUUzM0MxCis6MTA5MkIwMDBBREEwN0M3MTVGQjZGRkYyRkM2Q0FFMzcxREM2OTMyOTgyCis6MTA5MkMwMDBBMUYxRDVBOTMxQkMyMzY1RkNGQjNCNEU0ODZEMjU3QjQ0Cis6MTA5MkQwMDBENEFDRDdEMzA2NTVCNzVFQ0Y1NEM0RUJEMEQwQ0VGM0MxCis6MTA5MkUwMDA4RjQ4MjhBMkFFRkJERTJBNTE3RjdBRUY5MEZENUNFNzIzCis6MTA5MkYwMDBEQjIzODEyQTE1RDBGOUZGN0VBRTAzQTYxRjg2QjMxNkE1Cis6MTA5MzAwMDA3Q0NERjk3Rjk2RkVCQjBGMjVGRTM3MjY5NkVBNDYxRURBCis6MTA5MzEwMDA5RjZCM0U5NUNBRjVBRkNBMEM5RjQ2NzVCQ0U2N0FGMUM1Cis6MTA5MzIwMDBEMjk2RjEwRkY1NzA1RTZBRDA2QkFBMTM1N0JDN0NGRjIyCis6MTA5MzMwMDA1RUREQkUzNjNCQzRFRjAwNDlBQkVEQUEzNDhEQkU3Rjg3Cis6MTA5MzQwMDA1RkMxQkY2M0Q1NENBMTQxMjU3REY3QkU4MjlGQTczQTdGCis6MTA5MzUwMDA2NjJBMDJFRDRERjNERjQ0RkMzMkZGMkUxNUMyQUJGRjRGCis6MTA5MzYwMDAwNTlBMzc2RDM4RUZGNzI1OTNDNzM0NDMxRTk2ODE3NUZDCis6MTA5MzcwMDA1MjI4ODc1QjQ5QkU0NkREQUQ1MTZGNEI4MEEwNzUzQkRGCis6MTA5MzgwMDA3REUyNzdGMDU0QzQwOUZGRUUxRjQyQzk0RUI4RjQ5OTRDCis6MTA5MzkwMDA3RkNGNDNENEZGQjZFOEZDNDdCQTc2NzBEREE3NDM3Q0E1Cis6MTA5M0EwMDBBNzZEN0NDRjZCRTY5QjgxREZGRjAyQjlENzdFQTI1MDExCis6MTA5M0IwMDA1MzAwMDAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMEE4Cis6MTA5M0MwMDAwMDBCOUIyMkMzQzBGMEEzMUU4MUY5QTU1MUY5RThGODU4Cis6MTA5M0QwMDAwNDlBM0MwQjAzMDNDMzRGMjA1RUNDODM1RjFGMkUxQ0ZCCis6MTA5M0UwMDBDQjgyNjBCQjg4MzMzMEU4OEEzMjMwRTgwMUYxMTQyMDQ4Cis6MTA5M0YwMDA5RTBBQzQ5RjgxNTg1QjhDODE0MTA3ODg3MzgxRUMzQzM1Cis6MTA5NDAwMDAyMDc2MDc2MjZCQTBEQTJGMUMwQzBDRERDMjBDMENEMzhCCis6MTA5NDEwMDA4MDc4QTEzMEFBQjkyRjE4MjFCNDEyMTcwMzgzMjkxMDFDCis6MTA5NDIwMDAzMzMyNjNCNzdGQUExQTAzQzMwMTFEMDQzRjVEOTc4MURFCis6MTA5NDMwMDA2MUFCM0U3OTdFMTlDNTQzMEY2RjczNDRFNTFGQjU0MjlBCis6MTA5NDQwMDBFNTdGQjA2MTYwQjA3NzQyRjA4RjU5OTE2NjdFMzU1MDBDCis6MTA5NDUwMDA2RjhEMTM2RUY5QTM2RUE4RkNCRDFFQTg3QzBCMzRGOUFBCis6MTA5NDYwMDAxRDYxMTAxQTAwRkIzQjdDMjFCODAzMDAwMDAwMDAwMEM2Cis6MTA5NDcwMDAwMDAwMDAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMDNBCis6MTA5NDgwMDAwMDBCRUQ3RDdEN0MxQ0M1OTU2MEY1QzdGNEY0N0NBQUNFCis6MTA5NDkwMDA0NzFFRDkyMzVCMzIzREQyRDg5NjQxODZCNjJEREIzMkFBCis6MTA5NEEwMDBCNjcxNEIwNjQ3MjQyNDE5NENFMjA4MDJCOUMxMzZBQzA4Cis6MTA5NEIwMDBCM0UxQjgwOTc3MEIwRUMxRDFFOEZCQzNCMjE5MTkyRjdDCis6MTA5NEMwMDAzMTFDODE0MTdDQzQxMDJFMjgxRjk3NzUxMjcyMTkwMzFDCis6MTA5NEQwMDBDOUNGOUJDQjY1MUQ0MjM4MjcwNzM5QTFGOEQ4N0M2RUQwCis6MTA5NEUwMDA3NEVDMTlDRjVEMDhERTdBQUZBQUE1RTlENjdDRDk4NkRGCis6MTA5NEYwMDA0REZFMzhGOTQ3MkFENUZEQUFFQUJENTdBRjVFQkRGNzQ0Cis6MTA5NTAwMDBFQTc1OEQyMkJBNDhFQzIyNDJDRUMyREY2NjQyREU3Mjk0Cis6MTA5NTEwMDAxMTQyRDZDQzk2QTk3NjIzNEI1QTY4RjkzNDMxN0FFOUIwCis6MTA5NTIwMDBBMzRCQjQ2Q0JCNDBDQjE1RkU0OTUxRDAwOUI5MkM5QzYwCis6MTA5NTMwMDAyNjQ0MjQyNDM2RjEzMDExMjlEQzUwOUQ0MjQ2QTI4NDcxCis6MTA5NTQwMDA3OEY0NkQ1NUM0M0ZEQkFGQjNFQ0VEMjIyNEJCQUNGODJGCis6MTA5NTUwMDA3QkU5RjlFMTg4MUVBMEZEM0RCNUI2RDNBNEZEMEM3REU1Cis6MTA5NTYwMDBBNUI1RDM2QzlFN0Q1RjBCODM1MkZDMUEwOEM1QTY4NkY5Cis6MTA5NTcwMDA5MEZFRkFGQjg5MTgyNjY0OTA4RUJEOENGRUE3REU5M0MwCis6MTA5NTgwMDAyMDcxREE0RUM5MEUxMzdEMDVDMDg1MTA1RUZERkEwOTAzCis6MTA5NTkwMDBGMTY2RkE3Q0QwNDUzQTI3NjhBOTFFNEQ2NTdEMTRFRjI3Cis6MTA5NUEwMDA0QjlGRDM1NjQ5OTQxRThGNkM4QUJGQTU3NTRGNDRDQ0YwCis6MTA5NUIwMDBBNDgwOEVDODQxRUNGNzM0QTUwQjg2N0FBRkU4NTkwRDJDCis6MTA5NUMwMDBGNDUwM0EzNjU2NDhDRkM2NjJGNDNDOTc0QTAxM0Q5NzZDCis6MTA5NUQwMDAxREQ1NTdFNkQzQTNENjMxN0FENEJBMUU5Q0E3RDMxMTkyCis6MTA5NUUwMDA0QTRGRjQ0MkU4RjkwQ0QyMzNDOEU5MTk3NEQwRjM0MTc4Cis6MTA5NUYwMDA0RUNGNzY4QjlFREEwMUE0NjdBMDlFRDI0MzFGQjlFRkFGCis6MTA5NjAwMDA0OTkxMzg4NTU3ODE5RTAwQzBEOUU5MTkwMDdBOUEwQjkzCis6MTA5NjEwMDBEMEEzRkU3OUU4RjkyQjJFNkY0OUEwNjc0RDc5N0E5Mjk1Cis6MTA5NjIwMDA0MDRGNEQwNUY0RjhEMzQ0QTNDRjNENDQzMDI3OUFFNzhCCis6MTA5NjMwMDBFMkU1RTE3QzVDRjFGNTc0MjQ0NUZCMURGRTkzODRGM0M3Cis6MTA5NjQwMDA0QzU3NjQ2NERCOEE1OUI4NDk4RUQ3RjdBMjAzOTE0OTE1Cis6MTA5NjUwMDA5MEFGMjVGNzQ3MDhFRDZGQjg1RTQwNzg2N0JGMEYxMEYxCis6MTA5NjYwMDAwNUUxQjUzQUIzMUJGQUJGRjg4OEJERkZFMTdBODZBRkQyCis6MTA5NjcwMDAwNUZGN0IzRThGQkYyNzEyQjY1QkUwOEYwRjQzN0Q3OERGCis6MTA5NjgwMDBDOTM3NDgwMkM2NzFBNTIzMUFCNDhCQjI3NkZENEJENkYyCis6MTA5NjkwMDA3NjRFRkEwQkI1NjdGNDBDRUY0REExM0NBQkQ5Q0YyMDU5Cis6MTA5NkEwMDBCRkZFQTYzRTRENzQ1QUY3MUM0OTEwRTBCRjEyNjFGODg4Cis6MTA5NkIwMDA1OEVEMjk1RTg0NUMwRTY0REY2OTlBMEMzRjQyMTZEMjM1Cis6MTA5NkMwMDA3OTRBREQ5OTRERDFGMTYyRTlEQkQ1MzhFNUM3NzA2RDk2Cis6MTA5NkQwMDA4RjBBNzQwRkU5MDczQjQxNkY5RDhFMjk0NDhBMDI1RTExCis6MTA5NkUwMDA4NUY5NjBDOUM1NjYzMkFBMzZEMEY5RUM3RDU5MzI0NjkzCis6MTA5NkYwMDBDODVDQjgxNDA4NTdDRDZDNURGNjhCMjREQjQ0RjBFRkUyCis6MTA5NzAwMDAyQzAxN0ExMjM4RkZGRDRCRUU0N0JBMTVBMDZCMDVEMDNECis6MTA5NzEwMDA5NTI0M0E3REZFMkQyRTNGRUVBRkE3MDhDODk1QUFBNzQ3Cis6MTA5NzIwMDAyMkE5MTU3M0M3MTkwMkZFMzc0M0FGRTlDOEI2M0NGQTQwCis6MTA5NzMwMDA3RjZFQ0QyRjlENTdDN0ZDMjI1RjFFMjA2NjM2MDU3Q0FECis6MTA5NzQwMDBGMUQ4RTdDRDJBRkY5RUYzRkRCMkJBMTRGMkI3RENGOEU4Cis6MTA5NzUwMDA3M0U5NjdFM0ZGMUREMUIxMUZBMkE2MjNGMUMwMkMzRTIwCis6MTA5NzYwMDBDM0FFQzkxRTkwNkJCQTI2OEQyNzI4QzhBNTc0OUNCNkI3Cis6MTA5NzcwMDAzQzdFM0JDNzlCQTE1MzRFREJFNEY4MUI5QzRGQzM5RTMyCis6MTA5NzgwMDBFOUU3RjNGQjczRTJGMzVEMEVGNzVEQTI2MTY5RDE3NTYyCis6MTA5NzkwMDBFOTUxMzY0RUI5RkU3RjAyMkNBRTAxNzhDN0JBOTI1MzFBCis6MTA5N0EwMDAzNkJFREZDREUxMkY3QkNFMEU1NzhDM0Y5RjlERTE0RjI0Cis6MTA5N0IwMDAyQTAyRjI2OEFENDdGODMzRTcxM0MyNDUwNkZGRkM2Qjk3Cis6MTA5N0MwMDAwOTU5MEVGRjg3MzZGOUMzQ0Q5Mzc3QzJEMjdBMjU5QzBCCis6MTA5N0QwMDAzODBERUQ2RjIzODk4QkJDOEQ3NEJEQjgxMjVGODQ3MjE4Cis6MTA5N0UwMDBBQjZDQkU4NUZEMTJCRkY2QzYyNTVDRUUyNEQ0MDM2Q0JGCis6MTA5N0YwMDAzQ0RBM0RBMUZEMDc3ODdGQjJEMDQxMDg5NTY3NzcyQjExCis6MTA5ODAwMDBDOThDNTBENEFFOTI1RUNEMEE5NDlGMDcwOTMxMTY2ODc4Cis6MTA5ODEwMDA3OUZCRkExNERCRDdENzZCOTkyREIwOUY2RjkwMjkyMTc0Cis6MTA5ODIwMDA3NEJDMkFBMjc5QTAwNEY4MkM4NTBCQUVGMTFCNzQyNDE5Cis6MTA5ODMwMDBFMjI2MUZBRjhBMTc5MDFCNEYwQjQ5NzlBQUU4RjhBREIzCis6MTA5ODQwMDA4QTZENUQ3OENDMDQwMUJEMTA4ODkwQUMyNzQ4RjU4REY5Cis6MTA5ODUwMDAxMDA4MjNGRUVCQzgzQTg2QkYyRTQwN0ZENUIyREUyRDFFCis6MTA5ODYwMDBEMzcxQTQ5ODY4OENEM0E3NTUxQkM5RkExRDc5NzJBODI3Cis6MTA5ODcwMDAwQjRDN0VCQjYzQTIwODc0MEQ1MEZERUZBNjRCMzI1ODEzCis6MTA5ODgwMDA0RkQ3M0JBQzg3MDhCNTM3MEFDOEVEOEM3RUNGNDkyNDRCCis6MTA5ODkwMDAzQjhGRjY5QjEzNDg3NjM1QURGQkM5RkEwNDZEOTc3NjdFCis6MTA5OEEwMDA5M0Y1QTc3MDVDNjI4QzE3OTBCM0VEMDI5QjU3MjEzNjNECis6MTA5OEIwMDA3REY2MkNEQTA1MjRGMzNFQjQwQkQyQjg4RTk1NThEQTM3Cis6MTA5OEMwMDA4NDdENDAzNTgzODYxQkE2RkRFRDdCOTk1RTkzODkwOUQ3Cis6MTA5OEQwMDA3MjEyOEFBNUIzNTVGMDVFNUYxQTA1N0MxN0M0OTJFNDM0Cis6MTA5OEUwMDBGNTY2NTY0RUU1RTFBQkZBNTMxMUI0OUZBMjRCODU5RTQ3Cis6MTA5OEYwMDBCQzdERUMxODk1OUZBOTNDNzkxQkRBQ0JFQzgwRkVFODg3Cis6MTA5OTAwMDAwMEQ3MzM5RjQ0RkQ2OUJERkYwNEU3OTMzMjQ5OTEwMUJECis6MTA5OTEwMDBCQTc0MjVEMzIwQ0M5NUVCMjFBMUIwOUVEOEM5RTk4NTk2Cis6MTA5OTIwMDBCRjJCRDdEQUU1NTU5RUNGRTU5NTBFRTE5NjA5Q0FENzRDCis6MTA5OTMwMDBFMDUzMjQwM0Y4NTI0RTNFN0YzM0FENUZGMkEyNEE0NjE1Cis6MTA5OTQwMDBBODdDMzU5MzEzMjJDOENGQTU2NDFBNEI4MzY4MTI5NDYwCis6MTA5OTUwMDBBQjg4ODE2NTBCODk2M0Y5ODczNjJBRjdCNEJDQ0RBNDNGCis6MTA5OTYwMDBGMkRFODBGMkZGNTE4MThFRkZGQkZBQzRCMjIwN0RFRTYxCis6MTA5OTcwMDA4OUE1MkU4N0ZEODVDQUZGNzY3ODRFRTU0NDAwNzlBQTMxCis6MTA5OTgwMDAzNjQ5QzFGRDMyMjRCMEY1M0EyNjZCMUU4MDFCMzMwOURGCis6MTA5OTkwMDBFQUM3NDM0MjZGMEFGNjg5MjE2RTI3MEQ3OTg4NkQxRDRCCis6MTA5OUEwMDAxRkUwNzQwRkYxMzIxNDRCOTA0OTk4NUYzQTJGQTBENzAzCis6MTA5OUIwMDA4RjQ1NkZDNTc1RUM5NjU5N0Q4MENFMEJDQUREMjZCNkY2Cis6MTA5OUMwMDA4RjM5RjE1MDYxNUU1NjlDRkYzQzZDRkZGM0NGQzM4MDMyCis6MTA5OUQwMDA1MDUzNzAxRTA2NjExRUI2MEI0QzdGMkFCRjYyRTM5NzgwCis6MTA5OUUwMDBBMDBGRjdFOTlEREQ4RjIyRkY5NTUzRTcwNjZGRDFCRkVBCis6MTA5OUYwMDBENkExMzdENzcxM0RCNzgxNEMyRjk2QTkxRUI5REQ5REYxCis6MTA5QTAwMDA1NTY0MDFGMUZFMDJFMEZERDZDRjRFN0MwMkU4MjE5M0MxCis6MTA5QTEwMDA4OTY1QjA0RjUxQkMxRjE2NTA0RjI2QzkwOTNBQkVGQzhDCis6MTA5QTIwMDBCMjk0MDEzRjQ1RjQ1REEzMjY0QUY4Mjk0NEEzRkE0Q0I5Cis6MTA5QTMwMDBFNUZBQUMwMUZFQjc0RTdCQzMzNzU3RkYyRTlERjhBQjVFCis6MTA5QTQwMDA5MzY4NkYxMDM1MzEwMkZBNjk1MzUyMDVCOUU4QUREQkZFCis6MTA5QTUwMDBBNjgyMUMwREQ2RDEzQUM4NEQ0NDUxODVDQjY4RTkyNzYyCis6MTA5QTYwMDAxRDIwN0Y5NkZEMzExMEQ5MzExNDBEODNERDYzQUM4NTQ3Cis6MTA5QTcwMDA2RUFERjFCNzQ0MTI0NEMwRTc4OTc5RUVBOEZERjkyRjI1Cis6MTA5QTgwMDA2MUZENkI4OTg4NDRFOTUzMzJFRjUzODFDRTdFNkQ5QjMzCis6MTA5QTkwMDA5QUVGNzcyOUZFNDQ0NEExNzIzODA4RTNDMUY4QUVFNDk2Cis6MTA5QUEwMDBGMTY4MEJFODRGQjJCQTA3RjRCOTk2MjRBQjQxQkUyMzc0Cis6MTA5QUIwMDBFRDg4RTc5NkJBQjgwQUVGREQ5MTU1QzRBRDAzOEJFM0E0Cis6MTA5QUMwMDA2ODU3MEQ4NEVERkVEQzYwREQxREU0NTY4NDRGOTIzNzRGCis6MTA5QUQwMDBGQzczRUQ2QkI3M0Y0OTk0QkM3RDAyQzY5MUYyRTZEOUE5Cis6MTA5QUUwMDAyRDI3QjM0MDk3MTQyOUFDNzdGRjA3OTc3RjUxOEZFMzU5Cis6MTA5QUYwMDA3RTQzRDI5RjM3NTUyQUY3MkUyRTAzQUUwOEY5OTk3MDcwCis6MTA5QjAwMDA2OURFM0M4NUYzRjYxRDNBNEYwMzFFQTNCM0QwQkFBNDE5Cis6MTA5QjEwMDAzQjg4QkQ1RjQzMjBFQURBQ0FGQjlEREQ2RkY5QkNBNzM1Cis6MTA5QjIwMDBENzBENERFMkJDMDdEMjMwRUZCRDU0RUZFM0JFRkE2QTY5Cis6MTA5QjMwMDAyMEYzMDQyNUExN0I1M0YyMTE3OEVGNEFDOUE0Mjc4Q0E2Cis6MTA5QjQwMDBERDM0QzEzRTc3OTc3NEIxMDFGMjc3MDBGODQ2Mzc4RTY1Cis6MTA5QjUwMDBEMTJFMTVDQjkxMkUwRENCQTFBRTA4OTY5RkY3N0RFRUExCis6MTA5QjYwMDA4QjkzQjRERDlFOTQ1QjczODMxQ0E0RUY3QTE2RkFBM0U3Cis6MTA5QjcwMDA1RTc3N0MwNEZBMEREM0ZFQTE1RjU5RDU5RUQwQTBDRUFFCis6MTA5QjgwMDBGNjFENTc4Qzk1Mzc4QThDOEY1NUEyMTdGMTZEMTE5OTU4Cis6MTA5QjkwMDAxREFFMTMxM0U1MjVBRDk1RjZEM0FCNUFFRDc2NkVDMDI5Cis6MTA5QkEwMDBGMENFQUUwN0ZBOUZBRkE5REE1NkY3RTgwQjZERjBDRTBDCis6MTA5QkIwMDBGNUYyNjM5MUU5MEQ5NzFDMjc0NjMzOTQ4NUY1Rjg1OTIyCis6MTA5QkMwMDA0MTQyMzg0OTVBMzkwREY2ODdCQzQwNDFCQkEwNUZCMENECis6MTA5QkQwMDBFQkVEODc0NUI2REYzRDI2QUE0ODY3ODQ0Q0JGNzA5NkZCCis6MTA5QkUwMDBGMkMzQTU4OTY4RjcwNDQzMEQxMzU5RTA0RjhENjIyQzI5Cis6MTA5QkYwMDBBMTQ1RDAzNUE5NTUxNzE4OEY4NEU1REY0REU2QURGM0EzCis6MTA5QzAwMDBBNzA0MzMyNkZFMDVGMDY5MEVGRERERUQzNkI5REUyNzJCCis6MTA5QzEwMDBCMkZERUUyQzVGMkY5MkRCRUMwNDNEMTNBMTYyNDg1MEE1Cis6MTA5QzIwMDAzRUY0NDc4MTBGQTI2RkEzRDE0NEY5RDAxRjUyNzRGMEM0Cis6MTA5QzMwMDA4N0ZBQkFDNTgyRkI4RTkzMEY1MkQ1OEQxMUQwOEY0RTA1Cis6MTA5QzQwMDBCRTdGOTdDQkQxMzM5Q0VGOUJERkZFMzBFQTg5RkQ5QTM0Cis6MTA5QzUwMDBEODkxRjEwM0RGNEU3NDgwOUVFRjZCMTE0NTkwRjNCRkY2Cis6MTA5QzYwMDAxOEZFMzlFOEQ4MzNDM0JGMTkzQTkwNkY3RDYxNjYzNzYzCis6MTA5QzcwMDA4RjZBNTQ3RTYwM0Q4Nzk5RkNFODI0REI4MUVGMEQ0QUIyCis6MTA5QzgwMDA5NzMwOTcyRTI3RkZERTZCRkEyQ0JFNTc4NUM0NzhBNjM3Cis6MTA5QzkwMDAxOUYwOUI4RTIzN0UxQkU1ODJGOEZENkJGMUREQzJDQkI0Cis6MTA5Q0EwMDAzRjgzNTc5NkUxNjVGQzY1RTBGNTk0OTAxODg3RjU3RDU0Cis6MTA5Q0IwMDA4MENCRUIwMTc5NTIwNUJEMTBCM0U0QzZDN0Q2RDE1Q0E5Cis6MTA5Q0MwMDBCRDI0RDhFNDlERjZGMzI1RThFNzVFRTg4N0MyREYyQkU0Cis6MTA5Q0QwMDA0RkRCRkFCMUUwMDJDMDA3QjYyRUUyNkM1REM4N0ZENjVBCis6MTA5Q0UwMDA3NTYxRTEzNUMyRjFENjQ5ODZDOTc1NTM2MUI5N0VBRjU4Cis6MTA5Q0YwMDBGMUIyRjZEMzFFREYxNTA0RjQ0REM4MUY0N0ZCN0I4MTdDCis6MTA5RDAwMDAzRjlFMDU3RUY1RDYyODNBRDgzRkQ0NTFDMkZEMUE5QjE2Cis6MTA5RDEwMDBFQTc5N0U1MkNERjYwOEMwRjcwN0I2QTM1RERFRUY4QTdBCis6MTA5RDIwMDBBMzlEN0VCQ0U2MUJFNkNEOTRBRURFQjdBQjg4REJBMDgwCis6MTA5RDMwMDBGRTgwRUY4QUUzM0FFOEM1RTMxMkZBNkJCRDZGMzcyRTc3Cis6MTA5RDQwMDA0ODE2OTg2NzFGQzRDNzI4RkU1RUMwMEZFRDZBNjVDNjM3Cis6MTA5RDUwMDAwODA3N0M3QkZENTRGMUQxN0VERTZDMjYxOUQwQTcyRTNFCis6MTA5RDYwMDBCRjE5MDFCQkJCNzc4NTZBRjQyMDU0OUMwMDdGN0I3Q0M0Cis6MTA5RDcwMDA5RjY4NEQzNENGNkRFRkYzMEY3QzVBQkE3NDc2MUNGQTlFCis6MTA5RDgwMDAyNzlDMDVEQjk3RUVFMUUwQzcyMzdEODJFRDdENDEzQzFBCis6MTA5RDkwMDBDQUQ1NURCMzc1MERGQkE3NzU1RDg1QUUwNUYzNkNFM0E0Cis6MTA5REEwMDAyQ0RGMjkyRDREMzJFQzlCQzQ2QkMwRkNDN0UyMUQzRDVFCis6MTA5REIwMDA3RjA0M0VGREJEODQ3QUQwQzk5RkJGOTMxMjVFNjlDREZBCis6MTA5REMwMDA2Q0REMTU0RUUwQkM1OUZENUQ1RDIzQTMxRTk1RUI0ODhGCis6MTA5REQwMDBDNjJEQzBBOEYxMEVCMDZGN0JFQjQ0OENBRkM5RkU2REYxCis6MTA5REUwMDA1NTI1RURFRUJBQ0FFQzZFQzJFMzFFOTYzQ0I0RkQ4QTcwCis6MTA5REYwMDA4REVCMzU5OEZFMEU5MDQ5MDI3MTk1MkFDMkUyMUEyMTI4Cis6MTA5RTAwMDBBMjBCMDREQjFCNDIxQzgzMjUxQjMxOUUxMkY2QkNEQjFDCis6MTA5RTEwMDBGRERFODhGRDBBRTYxODM5RUIzQjg3N0U2NURBNkZFM0U1Cis6MTA5RTIwMDA3QkQwNkYxOTdDM0RFNDIxRUM5N0FBODdGMEQ5NzlCM0Y4Cis6MTA5RTMwMDBGREJBMjI0OTdDNDhERTNFN0I1NjVBNEI1ODEzRkM0QkY4Cis6MTA5RTQwMDBBMDdDQ0JBMjgxRUI5MzJDMEMxQTRGRDBBMjNGN0M4NzM1Cis6MTA5RTUwMDBDRDlGRkE4OEQ0NjA4QjlCMkFEQUMwQTc4NTIwMkRFQjkyCis6MTA5RTYwMDA2RTMzMjdGM0Y0ODM3MzdFM0I2MTIwRjAyRkVCNzY5OUZBCis6MTA5RTcwMDA5MzE1RTgwRDMwQkIwQkM1QTUwNjk0NDRBNjFCRjZFRjYxCis6MTA5RTgwMDBDNTdFOEMyMzEyMzk4OTcxRTE0MUExN0ExNUQ4Q0YxNjhDCis6MTA5RTkwMDA5QzVDQTc2NDAxQUY0MDhCOTkwMjdEMzEzODRGMzQyNDFDCis6MTA5RUEwMDAwM0ZBMUQzRDAxRkUwMDkxQUUzMTEyMjVFMjRCNzI5RDc5Cis6MTA5RUIwMDBGQzlCN0M3QUZFQUQxNDA4MjM5RTNDQ0VENTVCNDZERTJGCis6MTA5RUMwMDAwN0JBNEE5RjRGMjg4QTkxMjhFNENGQTQyNDY2QkYyODY2Cis6MTA5RUQwMDBERUMyRUZBRjU0REFGNzRBNkJFNkYyMkQwREJDQTNDRjJBCis6MTA5RUUwMDAwNzQzRDRFNUJFOEM4OTBGQzg4MTVDRjdGRDkzQzA4NzFBCis6MTA5RUYwMDA4MURBQUQ5MTUyRjQxMjhEREEzOTc5N0U5MUExOTgyM0VECis6MTA5RjAwMDA1MjY5M0MwRTE0QzI4M0Y4QTlGMEFDMkYzMTBFOUY1RjRBCis6MTA5RjEwMDBFRDRBODNDNTNCNDAyOUMyNzkxQ0I3Q0YyOERFNDE2MTk5Cis6MTA5RjIwMDAzRUQzRDNGMEI3QkY2NTNDMEI3MTM0RDdDRDdFMTNFNjdCCis6MTA5RjMwMDA0RjMyOEYxMDg5QzJGRkE4NTYyMjQyMkJENEJEQUY4QjVGCis6MTA5RjQwMDAzODlGMUIwREQ0NTc0RENDQkYzM0U5M0ZBMDIzQjg1MUU4Cis6MTA5RjUwMDBCMUVENUJBMDNGNjdGNkFEMjhDOEJGQkRGRUI0NjQ4RjBFCis6MTA5RjYwMDA2N0Y2NzYxRDI1QkY1QzMyOEIzRjdENjQxNjhBMTdDQjYyCis6MTA5RjcwMDA0QUZCNDQ2MTdFNTQ1N0M0OEY0MzU0NUUwODk1OTc4M0NGCis6MTA5RjgwMDBENDZGQTQ0QzIxNjlFQTM3NDJGRDAwRjUxQjA5RkE5MzBFCis6MTA5RjkwMDAzQTk2N0Q1RDRENThFRTgzQTZFQkUxRkMyQzM5MTQ4RDhECis6MTA5RkEwMDA0MkJDRjRGMUM4MkQxNEU0MTBFODBFM0M1N0YxQjY0MzVFCis6MTA5RkIwMDBGQzdDQzRBQUQzMjcwMkQ0RjkzOUNCMEY3QkZGRDgwNjg3Cis6MTA5RkMwMDBGMTk4MTEwRkFCMTMzMkRENjZEQUVBNTIwRkM0RkI0NzhBCis6MTA5RkQwMDAwMkFDRkQyRjI1N0YzQjlDNDcxQ0UyRTc0ODQ0MzZENTY5Cis6MTA5RkUwMDA4RkU2RjlGRjM5Qzk4NTc0ODAwREM0REFGRkJFMUJGQTBDCis6MTA5RkYwMDBGM0M4QkM5RUFBNDc3QzY2RUE5NDhGODA4RjQ3NjVGNUJDCis6MTBBMDAwMDBCQUJFQzVEODNGQUEwMDNBNUVBQ0VGMjIzNkRFMTI2NjcxCis6MTBBMDEwMDBERjkzRTY2RDY1RjhEODgzRjI3RjNEMUNDMjAxQ0RDRDlDCis6MTBBMDIwMDBENTcwQTg0QzE0QzMyMEIwREQxQzBBNzFCQzJCRUM4NzgyCis6MTBBMDMwMDBDODA5QjZERkYxQjg1MkYxNzU1MzY2NUZFMzc4OTQ5QkI3Cis6MTBBMDQwMDA3RjAyN0UyOUM0MkZBODFFNEVDMUI4M0YyREJDNEZCRjMyCis6MTBBMDUwMDBEQkUzMUU3MjlEMUI1Rjk0RDZFOTk0NEM1OUZDQjc1MjBBCis6MTBBMDYwMDA0MjkzNjkzRDYwNEU2NEEzQjQxRUJDMjY5QkMyRTU1QjZGCis6MTBBMDcwMDBFMUI4QkY5MzM0MUUwRjRERTBGQUI3RjgyQzZCQ0NFRTZECis6MTBBMDgwMDBCOEQyMzE4RkFFQjA4OUU3OTIxRTNGNUI3Rjk1RTJCQkJECis6MTBBMDkwMDAxRUM2QzlFQjg3M0NEMzVFMUIwRjE0NkY1NzEzMTc2NzlGCis6MTBBMEEwMDBFRDJERkFERkJDMEVFRkFDQkQ0NkZGMEI5OUQ1QjY3QUFECis6MTBBMEIwMDA1NUVCNDIxQjdDQzA2OEIwQkQ3NzY5MTdEQkRFOUZFRkI0Cis6MTBBMEMwMDAzQzVERUFBMEEzRDFFMjFGQUY0NzlDNzQ1NjJDNzdCMjQ3Cis6MTBBMEQwMDBDRUY3QjkxNEIzMUY2N0VBN0MzRjJFNTc3RjdCOTlCRDNCCis6MTBBMEUwMDBDRUZBNzU5MzFCQUE5ODdEQzNFQzk4N0Y0MzM4OEMxM0U2Cis6MTBBMEYwMDAwRjIzNEZGRjRBMDBDN0VBQkEyODEwQ0JCRUNEMzZDRDlBCis6MTBBMTAwMDBFREJGNTdGRDFDQzZFMUNDNUU5OTc4QUU5ODFCQTc0QkZFCis6MTBBMTEwMDBCNTI3MzFDRTk2RUE3MTZCQkQ2MThDQkI2MTlDNkQwRjJBCis6MTBBMTIwMDAzNUU0RERCNEJDQ0Q5NUQ4MERGMjdCQzZCMzM4NDM4MjlGCis6MTBBMTMwMDBEMDZGNzIxREM0QUQ3QjFERjEwNEE3M0NDNTFFQkFCRTE1Cis6MTBBMTQwMDBFMDc5OTk1NTBFNzVCMUY4OUY1NTU3RUIwQUU3MDFEQzk4Cis6MTBBMTUwMDAyREIzRjNGQUVGQkIxMjc3MDMxRUEwMUIwOUM2NjkwOUUyCis6MTBBMTYwMDBBRTAzOTdDRUY2Qzc2M0QxQURFNEQ3RThGRkIzRjMzMUMyCis6MTBBMTcwMDA4NUE0NEUzNjUyN0FEMkQ0NUYxQkQxODE2RUI2NEU4NkZDCis6MTBBMTgwMDBBMjVCRDUxODdEM0UxNjEyQjk0RDM3OERGNjUzQkE2REM4Cis6MTBBMTkwMDA3RTJEQUNBNzJBNzkxQUNGRURBQTYyODVGMUI5NTcxNkEwCis6MTBBMUEwMDBGOUJDREQ1NDkyM0VFNzdDREMwNDgxNTZEQTZFQUM1RThECis6MTBBMUIwMDAxMDkxRkZGNTYyRTYwOTg4NDdENTg5QjhBRUY3OUJDQUNBCis6MTBBMUMwMDBBMzcwRDRCRUJGQTVGQTdBOENBNzlCOEEyODIxMUQ1OUZCCis6MTBBMUQwMDBCNUQwM0FFQ0U3NzY1MzJGOEY5RjFFQTg2MzdFRUJCMTg0Cis6MTBBMUUwMDBCNjM3NTQzOEFGMzk2MEI0NjMzRTgwOUNGRTExQjYxRjU5Cis6MTBBMUYwMDBFNEZDNEVBRjlDQzIzOEY5NjA5MUYzOTcxRTk5RjlGOUNGCis6MTBBMjAwMDBCRDAxNkY2N0E2RTBGQjIwQkU0RjQ3REI5RTdGMDBFOEU1Cis6MTBBMjEwMDBBMEZBRjcwOUY0Q0Y0OEVEMkU0QTg3NjY2QUFCODBERkQzCis6MTBBMjIwMDA2M0Y1QTZGODZCOTBBQjREMjJDQTU5MTBFMjcyMTI5Q0VFCis6MTBBMjMwMDA4QkRBRkRFN0IxNEQyMjlFQjNBNjM1QkYwMUY2RkI2OTZGCis6MTBBMjQwMDBGMzREODIxQjkxQUNENUMyRjk2MkQ1QUIxQjM0REMyQjJDCis6MTBBMjUwMDBBOUJENTM5QjY3RTc1NzZENENBRTgzRjlCMkU4NzI5MzgzCis6MTBBMjYwMDA2QjBCQ0U4N0IwNzg0RjAyRjg3OUQ3MkFBMjgzM0ZFNkVFCis6MTBBMjcwMDA1RURDOTFGRDAyRURGN0NDN0FCNzA2QUFFMENBQzA5NTg0Cis6MTBBMjgwMDBEOUVGODAzQ0QxNkQwNUZDNjQ3N0Q4Q0M4MkRERTRFOTYwCis6MTBBMjkwMDBGNDExOURCRTBGNDYyNkQwOEU1MjIzMTIzMUMxQUVGQTY0Cis6MTBBMkEwMDBCRjEyQ0UxN0Q1MTk0ODk3N0M2OEZEODlDREI0QkRCMkQxCis6MTBBMkIwMDA0OTVDODA3NjU5MzNEQjZGMzRGQTBGRjYxQjM1NjZCNzhECis6MTBBMkMwMDBBQjI0NTcxNkZCQkI3N0YyNTEzQzU3NTYxQzc2OTU0Qzg2Cis6MTBBMkQwMDBGMkUwQzFFRURBQjRFREMzOEQwNUY0ODE1NTRBOTM0MTQ1Cis6MTBBMkUwMDAzQ0Q3MjVEMjhEMjVFRDZDRkZBQjlGRkM4NzE3RjNGODhCCis6MTBBMkYwMDAzRTI1M0JFQzc0NkVCRjU5RkQxNEIzREZDRTc0RURGRTBBCis6MTBBMzAwMDA4NzE3QTkyQzI3NUMyQzBFMkEyQkU2NkY2MDVENEVGMTc3Cis6MTBBMzEwMDBGM0M1MzE0N0RFNERDMkM1RDZDQjE5QkU4RTYxNjZDMUNECis6MTBBMzIwMDBERjA2RkYxOEY4RDU3N0Q1NzZFNjY3MTFDM0U2QzdEMDA0Cis6MTBBMzMwMDBGNTdFNDZDRUYzQjNBREZEMkU2RDk2RjYyNzY2RjM1QTQ1Cis6MTBBMzQwMDBGQzlFNTg4OUJDOTY2QkU1ODRFQzJBOTFENzYyQURENzA4Cis6MTBBMzUwMDBFMTREMjY4OUQwRjkxRDBEOTE0QzBGQ0NFRjY2OTNFQ0ExCis6MTBBMzYwMDAwNDc5MTU4OEQxQTMzMUY4NjlFQjFDMjUwQTcyNzgxNTk4Cis6MTBBMzcwMDBEOTA1RUI1Nzk3MEQzODg3RUM2RkZDMTA3NTE0OEJFM0ZDCis6MTBBMzgwMDAyQjg3RURGMjUxNkUxRUY3MzhFNjcxOTFDQjZFODdCQkNECis6MTBBMzkwMDA0OEJDMkExQjg1Mzg0NkU0N0FDMDYzN0Y1ODMxNjAzRDRCCis6MTBBM0EwMDBCQUM0MUI3N0VGRDBFN0NFMjM1OUM3RjQ4NjJCOUMyNTgwCis6MTBBM0IwMDA4NUM2QjVGODc5QkJDQjVDRTY4MjM4QkI2MjlDNEM4MDI1Cis6MTBBM0MwMDBGQ0I3MkJFOEY3M0FFMTZGNzJGMTNDOTYyODkxQzEzRTU5Cis6MTBBM0QwMDA0QkMxM0E4MUY1REI2MUIyQkMzMTQxNEIzRTY4MjBGQTlBCis6MTBBM0UwMDA3MURCQjk1NkVDMkRDQzY3N0I0ODIyQzk3OTFCMDlCOUMyCis6MTBBM0YwMDBDRTE1NjU3QUE2NkQzQkIzN0IzRTQwMDQyOTA0RjAwOTc3Cis6MTBBNDAwMDBEQ0JGNkE0RDREQTA3RDkzNjFDQjJFRDM2RThFNUM5QkRECis6MTBBNDEwMDBBNzI3QUZFM0YyMzlGQjNFMTFGOUE4RURCRDhCRTExOTk3Cis6MTBBNDIwMDBFMDc2QjNCNjMzNzJFRDhBMDJFRDQzODVGNUU0MDdCODAyCis6MTBBNDMwMDA1QzVGRTdFMkY2NDQ2QTI3RTYwNUY1RUIzN0M2ODFDRkI1Cis6MTBBNDQwMDA3RDlCNEQ2MzE3NjgyRDkwMTFDODQ3RjExMzlCN0Q0QzgwCis6MTBBNDUwMDBFNUZCM0FFMEE3MTUzRjkyQjUzODk2OTYzRDUwNkNGRTY1Cis6MTBBNDYwMDA5RDc2ODAyQjYyQ0YzQkE5RjREQzM2NzZFOEZBOTJFMzQ2Cis6MTBBNDcwMDAzOEY3NjcyQkJGMEQzNDVGM0U5RjVDOUMwRkNEN0NCREQyCis6MTBBNDgwMDBDQ0RBNEI2OUJFREUwRENDMDc5MjE0MzMwMTcxNDk0OTE5Cis6MTBBNDkwMDAyMDM2N0I2QjhDQ0I4QkU0NjVFRjlENzg1MEZGRjk0RUJCCis6MTBBNEEwMDA1OEE3NTJEMDQ0RkY5QUY4NUI5OEREMjYxQkZBQjUwNUYxCis6MTBBNEIwMDBGMEI3Q0UzOTFGRTM3OUJDQjFGNDg3NzBGRjFCMERCNTNGCis6MTBBNEMwMDBFM0JFRDdBNzk1RDYxRkQ2QkVCQTk5NUNBMzQyRENBRTMxCis6MTBBNEQwMDBCRkI4RkUxOENERDcxRjRBNThCNEFGNjNFRURGNTNGQUFBCis6MTBBNEUwMDBGNTQyN0NCNkY4MTRFMUYxRDJERUMwRjY0OEM5QjhBMDU2Cis6MTBBNEYwMDBFMzdDQzU1MENDMDc5MDJGQzVGOUY2ODVGM0UxREIyODQ2Cis6MTBBNTAwMDBDRkFCREJEQkZGRDJGMzNDMEZDMUFFQUY1NzE2RDVEN0Q1Cis6MTBBNTEwMDBGRkM5QTY0RkI5QkU3RTBGRjlGRkRDQkJDMUZGNEFFM0ZFCis6MTBBNTIwMDAzMDlFM0Q5MjdFNkExRTU1RjE3MjBBRTkxOUQ2MEZBNjM5Cis6MTBBNTMwMDAzMDFFMDNFQjFCRUM4MDc0MUJFNjJCOTAxODQxQkQwODBBCis6MTBBNTQwMDAwRDQxREY3OTc0MTNGOUU2RTU3MTI2QTVDRUJFQ0Y0ODNCCis6MTBBNTUwMDA2MUFGQUQxRUU5NEMxMUM4NTc4MzdFODE2RUNGMUUwNUQ5Cis6MTBBNTYwMDBDN0I1Rjg0RDZEMTZDQzI3QjNFQzRCNTg0RUUwOEYxNEExCis6MTBBNTcwMDBDQjRGQjM0QTJCN0UwM0M3Mzg2NzcxOUZGQUVDNzFFMDZCCis6MTBBNTgwMDBFRjY5M0ZDMUZEQTEzOEZERjY3MTIyMUY4OTk3RDY0RkIzCis6MTBBNTkwMDAwRTc4RTI5N0Y1MzcwQTlDMEJDRTZEMjc5MzM3RjJGNENECis6MTBBNUEwMDBEQUZGNzFFODEzRjNDOENEOURBODQ3ODk2ODQwRkNCMjczCis6MTBBNUIwMDAzN0IyOUQyNDI4REUwMzg0RTk5MzIxMjhENzQzM0VDOTdFCis6MTBBNUMwMDAyQTBERkNERkVGQkI3NEQ2NUU2N0ZFOURBOEYyMzhCRDk2Cis6MTBBNUQwMDA1RTk5QkY3NzE3REQ4NzBBRDkzRjRCMTU2NjFGOUZGOTM0Cis6MTBBNUUwMDA1Q0YyMEY5MDk3OTAxQTExNzREOERGNEU3NUU1RDA3RTBCCis6MTBBNUYwMDBEQTkxNURBRTQwNUVEQTcyNjUzRUMyRUQzODE0NTVCNjUyCis6MTBBNjAwMDBFNEFEQ0YxRDg0OURGQjUzNDQ5NDdDM0Q2QUFEM0YyNTUyCis6MTBBNjEwMDBFRDdFMUVFODlDNEFCM0I4QzY1NEZBOUZGMTVDN0ZFQTBGCis6MTBBNjIwMDBCMDk0MDFBNjRFMEQ1RDU3NzJGRDlDRTI3QURCODIzQjMxCis6MTBBNjMwMDA3NTU4MzJBMUJGRDQ5MDkwNTk0MkRCOUY5MkNENjBDMTMyCis6MTBBNjQwMDAzQzAwOTI2MUU3QzFCQzdFNEI1QUIyQzlFNTk5QkQwOTk1Cis6MTBBNjUwMDAwNUY0Q0NBOTJFNTVGODI1OUQ5QjVCODE0RThBRkY4RTczCis6MTBBNjYwMDA3NDU0MDE5RkFDMUM1REYzMTRGQjdDNUE3NEY2NDNCRTFBCis6MTBBNjcwMDA0Mjc0MzY3RkE3M0ZGQzI2RDI3QjlBM0U5NzRBQzQ5MzBBCis6MTBBNjgwMDA0NkI4OUVFODBGMTdENjI3NUU3RUZFRUE3NTY1MEFFNzk0Cis6MTBBNjkwMDAzRDM4RThGNTM1RDlEN0E1ODVERjIwQ0ZBNzE4RDQxOEUwCis6MTBBNkEwMDA1RTgzMTExMUU3NjFCMEFFQjQxRUVCRTNGMzYwQzFGNTU4Cis6MTBBNkIwMDA0N0Q4Nzk2QkJGMUM1NzJCQzFDN0E1RDlGMTI5MzY4RTU2Cis6MTBBNkMwMDBCQTcxQTIwM0I2RjkyQTkyRTg2ODhGMjI3QjVGODIzOEJBCis6MTBBNkQwMDAwMjg2MEU3NUYwOUY5RTNBNzYyQkM0ODE2RkY2OUI0MkUwCis6MTBBNkUwMDAwNDFFNEU2N0JGNDNFQjBCQThCRjAzRjZBOTY2NjY4NDQyCis6MTBBNkYwMDBDNTJEOTBENzI5MTE4ODFCM0Y5NDdDMzNGQjFBRjhBM0YyCis6MTBBNzAwMDBENEZGODE3QTQ4NEY4NkRFMDc3QTI4OTYxMDYwNURFRDg3Cis6MTBBNzEwMDAwN0U1OEY5RDdGQjBCN0FEOTlBRjNGNUFGRkQ0NDBGQjlGCis6MTBBNzIwMDAxNjg4NDNDQTI0Q0VFMzE5QTIwRUY5N0FCOEY0QzVFMjFBCis6MTBBNzMwMDA3QTAyQjRFNzU5Rjc2Q0JCQTI3NDNBRkMyMjM3RDk1NkI3Cis6MTBBNzQwMDBEQUZGREVDREUwNTNGNDFGRTg5RDA1MEUzRjJCRDQ2OTAwCis6MTBBNzUwMDBCN0JCQUIxQ0VGQzdCOEJDMTZGMzJCREZBRDcxRTY5M0VDCis6MTBBNzYwMDA5NzU0Mzg5NzU1NUI0NDJEMDNGMDI0MTk4MkZEMzY3OEIxCis6MTBBNzcwMDBBMzRDQzA4RTlGQUY2QkREMTBFMjJCQzdGNzdEODRFNTQ1Cis6MTBBNzgwMDBCOUMxMTcxMUY5RUJFRjQ5ODVEOUIxOEI2RTdGNUM4MEE4Cis6MTBBNzkwMDBGREU5MzQ3OEQ5MkJBMTlFMzMwQUM5QUZEM0VFMUJEMjgxCis6MTBBN0EwMDBBNzMwOUUzODQwNEU3NDM0ODIzREJGNEJDNEYzQTRGREE1Cis6MTBBN0IwMDAyRDA3NDNGOUVEQkZDN0M3OTk5RDdGQTJDQjZCRjE1NDFECis6MTBBN0MwMDAxNkZENzlBNTQ1MzQ2MURGM0FERkY5NzdGQUM5RTVFNjg4Cis6MTBBN0QwMDBCRjc2QjdERDJFM0VENzc5RjkzMTIwQkVBNkZDRkM1RkVGCis6MTBBN0UwMDBFODM4RDZCQ0NENUQxRjRDNkYyRUJBRkQ0NThDRTM4QzhFCis6MTBBN0YwMDAxQUE1RjVDRERDNzk3QjA5RTcyREQ4NDJDQzQyNzE5Q0I2Cis6MTBBODAwMDA1N0Y4M0VFNkNDRUI1MzQ5OTIxODkwOUZGODMyREI3RjI1Cis6MTBBODEwMDBBNEM2QjU5MUYxMTJGQTQ3OEEzOUZDMEZERTRGRUUxNjQ1Cis6MTBBODIwMDA0MjRFQzA3RTJCRUI2NUJFODc5QjM4MjREMzdERDNCN0M5Cis6MTBBODMwMDA2N0MzMjE3OTM1RTQ2Nzk5OThFNzM1REM2NUUyRjM5OUQ4Cis6MTBBODQwMDBGOTc3OEIxQzVGODE4ODZCQjk1RUQxRjFGQ0YzOTA4QzNBCis6MTBBODUwMDBGNjg2NDhDRTQyMUM4NDY4NDRCN0U0OEUwMDVDQzcyMTZCCis6MTBBODYwMDAxOUUzMzEzQUNGMjNBMEEwRjNBMTFENDFCREI0MTI5MjQ4Cis6MTBBODcwMDAzRDZCRjA5QzFFRkI4MThFNTgxQ0E2OTNENTY5NDM5Q0IyCis6MTBBODgwMDAyNzk3NjkyMjVFNzI1QUJEODNGMjczOUY4N0Q3NzU1RUUwCis6MTBBODkwMDAwRkYxQkFDNkVCNTE1RTI3MDdCMUVFNTM2ODFERTJGMjI1Cis6MTBBOEEwMDBBRUI0ODY3NTJGQUY0Nzc5QkQ5QUQ3NDNCQ0RFQzBFQkY3Cis6MTBBOEIwMDBDMjQxQUNFRjUzNTg3RjIzNzI4NkY1RUZFNTc1OURENzAzCis6MTBBOEMwMDBBQjc5NURFM0Y1MDY1RTI3RTM2QzdDMzdBQkMzN0U4ODJFCis6MTBBOEQwMDA3NTFGQUY0Nzc5N0QxRUFGODc3OEJEOTFENzg1NzFBQzY1Cis6MTBBOEUwMDAxNzlCM0Y2RkNDNDRGRUNFQ0U3RjA3RTMxQjIxRENERkZFCis6MTBBOEYwMDA4QzNCRUE5REIzRjA3OUZFNjg3Rjk3MkVFNDlGMUZCQUU4Cis6MTBBOTAwMDA4QUM0OUY1NkI5OTk5RTk5NkU4QjYzOUUxMkY1MTc1MjExCis6MTBBOTEwMDA1M0Y5RTc4RTkxQzJGMjZFRjI3NjMzRTdFNjYxMEE1Nzk5Cis6MTBBOTIwMDAzMDdFREQ1RDcwNUQ1NDhBREZENkYzQzRFRjIzRkY0QUNECis6MTBBOTMwMDBGOERERTBCNkQ2M0RGM0NGQTdEQjBDQzREM0Q5OUZCMzg3Cis6MTBBOTQwMDAxREQ4NUIyNEVGOUNERTJCNjc1MjEwQUZBMTM2MTJGQUE0Cis6MTBBOTUwMDAzQjJFRDU5RUNGN0E5NzlCOUQ3Mzc2QkI1OTNFNkIyRjJFCis6MTBBOTYwMDBDNzZGQkE4RDlEM0ZGNDJGRjE2NkM2ODVCOTcxQzZCRjFBCis6MTBBOTcwMDA3MUIzNzhDMjBGMkMzQ0Q1MDlGNDdCN0MzOUJBNjJEMTEzCis6MTBBOTgwMDAwRjYyN0VENDcwQUNCRDRDRkVCQUZDRkZGMkZENjU2NzcxCis6MTBBOTkwMDAxQ0U0OUZFMTFEMURDN0VCMkZDQ0E3QkI2NkY0Q0Q4RDNBCis6MTBBOUEwMDBBOTI5MEFBQjdBRTg3M0YwNjdCNDcwQTQyRTNGNkY5QUI2Cis6MTBBOUIwMDBCRjI3ODIyOEExN0U3OTlCQzI1OUY5MjIxMkY2Q0ZFMkU1Cis6MTBBOUMwMDBDNTc1MkM1RTJDNzE3ODFDMjdDQUJFNjMzMDU3QzEzRUZBCis6MTBBOUQwMDA0MzlGMzdGMTcxODRCOUZEM0FEQjY1RERENTZDQkUzODM0Cis6MTBBOUUwMDAzRTU2N0U4QTQ0OUVDMzdFNjZGMDkxRTNDODJGRTc3MzhECis6MTBBOUYwMDBDODQzRDZGQzE3RkVGQzQyRUIyRUJEQzg3ODY5NzZGRTM0Cis6MTBBQTAwMDA1MkFFRkQxN0I5QkNDQzkxQ0YyMkYzRkExRkREOTY5RDUzCis6MTBBQTEwMDAzMjYxNDIzRTkwMjU0Nzk2N0M5REFGMUM1REIwOUNDMDQ0Cis6MTBBQTIwMDA4NkQ0NTI1QzRFNTIyNDg5RUI0NjA2OTc3M0U1QjlDQjI3Cis6MTBBQTMwMDA0QjAxMzlDOUU2QzNEN0E4MjE3RTlFNkZBMEJDNTA3Q0NDCis6MTBBQTQwMDA2NDk0NUI4REUxNTNCMzJBOENGRDA5QjBDNjk3NDEwRjI2Cis6MTBBQTUwMDBCQzBFN0NBMEY0NUVBMjg2MzgxRjU4OUNDMjBCRTc4QzBCCis6MTBBQTYwMDA3OUVEMjk3MTg4QUYyMDA5NUNFRjMzQjhDRDJBNUJFNzE3Cis6MTBBQTcwMDA5QkRBRUIxOEZFODRGN0VGQzA5N0Y2QTdFNkY3Mjc5MTZECis6MTBBQTgwMDAzQTg3OUMzM0JDM0ZBNkIyRjlBNUYwRjg5RERGOUNGMTU0Cis6MTBBQTkwMDA2NTAxRjE5NTQ4M0MyNUQyNzY5RkUyRjA0RUZENjU5NTIzCis6MTBBQUEwMDA3QjM5N0VDMzIyRDlDREJFOTM4QzkzRkNFRjJBN0RBQTNECis6MTBBQUIwMDBDOEJGN0I2NEVCQ0NBOTlGNUMyMDU3QUJDRjVGQUUyQUFECis6MTBBQUMwMDBENUVCMzU2QUUxN0Q4N0VBRjkyNjg4RjcxNURCNzc0RTA1Cis6MTBBQUQwMDBBQTMzRkI0MTEzOUZCNzczOUFGN0RGODExRTVBMzMzQkFBCis6MTBBQUUwMDA5Rjk1RTI3QjA5MUZGNzVDRjEzRDM1MTdERjhBRTRFQ0E3Cis6MTBBQUYwMDA0REFFMjcyQUM1NkZGMzc5RTJGNzkyMDNCRjc3NEJBRUNECis6MTBBQjAwMDBERkU2RkI1MUE1Rjg3RkVDM0NFNUUxODc3M0Y5NUJEMTBCCis6MTBBQjEwMDAzQTEyRDU3M0UzRUZBN0NFMTNCRjVGMzhGMTJCQjI2RUI1Cis6MTBBQjIwMDAxNTk1RjEyQjQ1OTg3Q0M4RkNGQ0E1NTJGQ0JBQ0FFM0VDCis6MTBBQjMwMDBDN0YzQzVCNkY2OTkzMUI0RDdEMDFGREZBRjZFRUQ0QjcyCis6MTBBQjQwMDBDOUIzRjg5OTg0RTlGNTczMURGRkRFOEFDN0ZGNTA5RkVBCis6MTBBQjUwMDAyOUNGOEVGRjA1RjU0M0I2RjE2NUQ5NDA2MUFCNzREQ0IyCis6MTBBQjYwMDA4NzJCMUQzN0Y1NTExQkREQ0YwQzdERDQzNkVFRjlGMjY2Cis6MTBBQjcwMDBGRENCMTU4RjdGOTM4REVFRTc4NjZFQjJEM0VEMzczMDI4Cis6MTBBQjgwMDA5RkI4RDI3MUJGNzM5RUVCRkQzNzFDNUY5RkFBRDlGNkE5Cis6MTBBQjkwMDA4MTYyRjZGQkRCRENBRUJENDVENTZDNzI1QzBDRkU0RDE0Cis6MTBBQkEwMDA2RUFGN0NCMDQyRjg1M0JDRkY0NjBCOUYzMkYwOUZFMTgyCis6MTBBQkIwMDBGODdGQTY0MkY4REY3MTdDRDY1Nzg4Q0YwRkY4M0EyQzgxCis6MTBBQkMwMDBCNjdGN0EzOURGN0RBMDIzRjNGQzlBMEJDRDVCREFFNTAzCis6MTBBQkQwMDA0RTA4MUUzOEU3RkM3QTE3N0UyN0Y4QTZBQzZBMTBFRkZECis6MTBBQkUwMDAyNDFEMDRFRDcxQ0ZBQjgxNzE5NjU3OTJFMkZFN0YyMjU2Cis6MTBBQkYwMDAyNTMwM0Q4Q0YxMkQ1N0Q4QjA5REM3NTk3RTk3MkNDNzc1Cis6MTBBQzAwMDBDRDQyRTc2RDIxMEZEMzdGODI2Njc0QjJGNUFFMTBDOEQ2Cis6MTBBQzEwMDA0MzJBMDZFRkYzMTQ4RUJGNTQ5MTY5Q0MzRjIxMTE3RTc1Cis6MTBBQzIwMDA4RUY0RjY3NTdBQzE3MzAyMzk4RTc5MkQ5MkE2OTA3MUUxCis6MTBBQzMwMDAzQTRFNUY2OEJCOUU5RkI3MUNCM0YwODk5ODg4OEZBMjdECis6MTBBQzQwMDAzMTdDMTREOTMwMEJFNTI5RDc3QkQ4QkM1QUZENThGRThFCis6MTBBQzUwMDBBMTEwOTkyNkVDMUUwNzg2NUZCRjI3REUwOTc5RTJBOUJECis6MTBBQzYwMDA5MDgyN0NFQTBCRDhDRkM3QUZFN0ZEQkM5RkQzRDdFNzc0Cis6MTBBQzcwMDAyQTlEMjdENjNFQkYxNUYzOTU3QTVCNTlCRTkyNEUwQzlFCis6MTBBQzgwMDBDQ0VGRUNGMzk3QkVENzYwQjQ4QkM1RkY0Nzc4RkVEMzBCCis6MTBBQzkwMDAxMDdDM0YwQURGMTNDM0Y3QTNDQkEwRkQ1N0YxM0JCQ0U5Cis6MTBBQ0EwMDBEM0NENjJDOUZCNzEwMjg2M0RDRUVFNkJCMjdGQ0Y2MzFFCis6MTBBQ0IwMDBDNUU1M0RCQUZEQkIxRTc3QzRGRTVEOEY2QkJFOEM3OUNBCis6MTBBQ0MwMDA1RDdEN0U3NjNFNTAwRTdGMkJFRkREODIxQjk0OTNBQTM2Cis6MTBBQ0QwMDA1NjkwNEYxOURCQjk4MDNCNjJDN0Y3QkRFMzFGNkJFRjlFCis6MTBBQ0UwMDA3MzRENjg4NUYwN0FCN0Y4NTYyQ0RFMzA0MzZGOTU5MjM1Cis6MTBBQ0YwMDBDQzMwQkQ2MUNCQ0ZFOEUyRjJFNUFFNTI5M0EwOTdBOThDCis6MTBBRDAwMDBERTJERjJERUNCREFGQkUzOTgxRkEyNDZFMjNBQzZBM0MxCis6MTBBRDEwMDBGOTNFQTBDMjdBQzhFM0QzRTdBRDc1RTkxNUFEN0M2MzBGCis6MTBBRDIwMDBDQ0VCMTA3NDEzQ0YxRjU1NTg0N0MyREM3NjMzRjM2QTRGCis6MTBBRDMwMDBDOUZEOUZCNjQ0NzA5REQ0QThCODRFMDQ3RDFBQkZFQkUwCis6MTBBRDQwMDA3MjhFQjNDQzYzMUVGNEMwRjk5OEM3QkMwRjRBRDczQkQwCis6MTBBRDUwMDA1MkEyRDA3QTE5RjMzMDNEQUE1RTEzRDdENTA2NzQ1NUE2Cis6MTBBRDYwMDBEMUVFNzFFMkYxMkM1RjdGN0UwQkZGOTQ4OUY5MTc5NThDCis6MTBBRDcwMDBFMkZGNzA4NUY4NUJFMzUwRkM5RjA2M0Q0QkYxRkYxMjRDCis6MTBBRDgwMDA5NEM1RjA3RjhBRUJBMzZBQTI3N0UzOUVBRDMzM0Q0Qjc3Cis6MTBBRDkwMDBDOEI1N0E3RTdDRERFQjY1RkQ1NjczM0Q0NTQ4OUIyRDNECis6MTBBREEwMDBBRkM3QzVFOUFBOTQ5RUEzOTY1RTJCNDM4RjM1MkVBNTA3Cis6MTBBREIwMDBFNzQ1M0UxRkRGMkIzNTFGMkY3MDdBQkM1RUI2NkZBOUFCCis6MTBBREMwMDA4N0UzM0E1RDlBNjQ2OTkxNzk5OUUyNzhDQ0Y3RjJCOEIxCis6MTBBREQwMDA1MkFBRUQ5Q0U0RUFDNzE1RDIzMTM1M0IyRkFGRjE3OTg5Cis6MTBBREUwMDBGOTQ1MjkzQTVFRTU3Mjk1OTZDOEZBNTNCMDlGMzY1QUVFCis6MTBBREYwMDBGOTBCREI2Q0YzQjI4OEYzMjdFREI2RTZBNUREMzYyRjUxCis6MTBBRTAwMDBBMTczOUM5N0RGNTY0OENGQTJEOTc5MzlDM0U3MjU1NzVDCis6MTBBRTEwMDA0QUNFRjJFMEZGQzRFMURGRTFGMDY4MjcyRUYyRkVCMTk2Cis6MTBBRTIwMDAwRkNFQ0I5Njc5RTJBMkI3NjY3NjdGQTM3MDkyNzdDREVDCis6MTBBRTMwMDAyQ0RDRTc4NzhGNUI3MDZFODRFQjk4ODE1M0JENzlGREM2Cis6MTBBRTQwMDA5MUQ0RUI3RDcwRkVERENGQkZGRkY4QzE3MEUwMkFERTRDCis6MTBBRTUwMDAyRTg4RURBRTYxRjREMDc2NTVGOUZEM0YzQkZDQjJENUJFCis6MTBBRTYwMDBGRjNDODBFQkRFRjI4RTA1MTdDRTg3NUJFNDdEQzc4MjY4Cis6MTBBRTcwMDA4QkMwNzNFMUYwNEM3RkI1Rjk3ODRDNzlGRUE5OEZFNTcyCis6MTBBRTgwMDBFQjM4RjJCREI0Q0FGMjFENUNFMTA0REVFNzUwNEQwMkJFCis6MTBBRTkwMDA2OTg5OTYwMzMyQkI1RjIxNDU4REVBMjcyMDdGRDY5REM1Cis6MTBBRUEwMDBDODkyMEFFQzJFNTE2NUVERENENERFODJGM0UzNzkxQTA4Cis6MTBBRUIwMDAzOUU2RDFDMTA1MzFDODYxRkFGRTQwNTg0NjdGRTAwRTNGCis6MTBBRUMwMDA0RkEyQzU1QkMzRjBDNDNDODBENzk4M0RENkVENkZFMTdGCis6MTBBRUQwMDA3MTE0ODZENzk4RUYxMzQzRDA5RjQ2RjE4MkZFM0ZFRjVGCis6MTBBRUUwMDAwQjFFMDNGODgzRjUwQUU2RjMxRUFCQkYxM0VEQzRCMUU2Cis6MTBBRUYwMDA2RTk5QzBGQkIxQUIxNUI0MTNFRjdCMkQ4MEZCNzBCRjE3Cis6MTBBRjAwMDA2QzVDOEZGOTBGQTZBMjgzREQ3ODk3Rjc5RDkzOTBBN0NECis6MTBBRjEwMDAzQ0Q5NURBNTA5NTcyMDNEODg3RjRBMjRGMTVFRUM5RjBFCis6MTBBRjIwMDBEOTlEN0IyOEZFOTAwRjhDNUIxN0Y0REJDMUZDMThDMjA3Cis6MTBBRjMwMDBGMzlDRUZEQUEyNjNERThDNEVEOEZENEQ4M0FEMEFFNkJBCis6MTBBRjQwMDAyOThERDUzNUI0QzE3OEY3QjVBQTY4NzdEQzc3NEQ0MzNDCis6MTBBRjUwMDAzN0U2NzNCNzdBMzFGN0FEREFBRjBCOTBERjEzNUNBNzQyCis6MTBBRjYwMDAxMEY4MTBBNDNBQUM3NzgzREQxOTU4RUI4NTNCQkY0ODQ1Cis6MTBBRjcwMDA3NTFEMUIyRkIwOENFMDNEN0YyRTkyOEVDNzY4MTkxQzZCCis6MTBBRjgwMDA1MkYwMUVBN0ZCQUVEOTk2REQwOTc2NEQyQkNCNUZBNkZFCis6MTBBRjkwMDA4NEJEMTQ1QjRCODg5RkIzOTI0ODNGMjQ4MDhGNkIxMTE0Cis6MTBBRkEwMDAzQkNGQjdFNjM5OTg5RTY5NUZGMjFDMzE5OEE5MTAyRTA1Cis6MTBBRkIwMDA1QjE5NUM2MDQ4QzZGQ0U0QjI3MEU5MEFFMTMyMTVDMjc0Cis6MTBBRkMwMDA2NTE5NUNEOUYzN0I5RTRGQTlEMjdGMTA4N0YzMzhGM0M0Cis6MTBBRkQwMDBCMUZEQTVCRjhCM0JENzdDREQzMUFGM0RFRkJBNUM3QkNDCis6MTBBRkUwMDAyQjRGQjcxQ0JENzA5ODM5ODNBNzU0MUVERUNBQjMyQkY0Cis6MTBBRkYwMDBGNkRFMzVGRkNFMDg3Qzk3MzY1ODczMzcyRkVGNjE2NTQ0Cis6MTBCMDAwMDAyRDdGNUVCQjI3ODJGNzQ1RDZGMkY3QjVGN0UwRkQ5MUJECis6MTBCMDEwMDBDRTdFRkUwQkQ3Qzc0RDI0NUU3MjFFQUEzOUZFNkY1MDNFCis6MTBCMDIwMDBEQzIxOUVERDI0OTdDOTA3NzBFNkZCMzlGNDlFMkFBNzMwCis6MTBCMDMwMDBEQTcxREQ1RUMzRjI4QjY2QkU5RkFDRTNERjhEOTA2NDk4Cis6MTBCMDQwMDAzQzg2RjEyQzMzQjg3MkZFRUNGQTcxNkRGQzNFQUUxRkZCCis6MTBCMDUwMDBFQkJCNDkzQTNGRUM3QjQ5ODc5QzM4RTVDMkVEQzg0RkQyCis6MTBCMDYwMDBCOTUwMzk3OUU1M0Q5MjEzRDc5MDU0RDFGQTcxQTUyQjk3Cis6MTBCMDcwMDA4NENCNTQwODk3QUQwQzRFMTkxMjJBRDIyQjRBQkE0MkVGCis6MTBCMDgwMDBCODRDODU3MDU5MDZEN0JGNUVFMUZCRkE3MDNGQzRCNzc0Cis6MTBCMDkwMDA1Qzk3QUJCNjdBRkZFNTVFRkJGQjBEN0U1QjdENjA4RDVBCis6MTBCMEEwMDBCREJEQjJENkRFN0U2MEFEQkRCREIyOEVCNTM3N0M4NzhDCis6MTBCMEIwMDBBRTRBQzUyQTVGMjdGRkVCM0NENzQ5OTM1QTFBM0VEMEM4Cis6MTBCMEMwMDA1QTY2NURBOTlBMDdEQTU3Q0IzQTgxRkI4NUU4N0U5NUU3Cis6MTBCMEQwMDBFMUZCNTZDMUY4Q0Y1NjFGNUJGRjU3N0IzNURCRkQ3NDk0Cis6MTBCMEUwMDA3RkU5NzQzNkY5MThCRTE2QkRFNUYwQjVGNEVGM0Y0QUI2Cis6MTBCMEYwMDBEQ0VFMkE5Mjc3MUYwMjlENTM4QjhGMTc0MTdGQzc4RUZDCis6MTBCMTAwMDBCREI1MTBFQ0NBNjc1RjVGODdGNzlBRjY3RUQwQ0E5QjIxCis6MTBCMTEwMDAzMTMwMUY1MjNFRTlGRDM4RThBRDY3RTk3RTBCRjkzODYyCis6MTBCMTIwMDAxMzIxRTNGODI1NjBDRjA0NDQwMkY2MzI3NUEzRjA1RUU0Cis6MTBCMTMwMDA4RjY3OEZDQTY4N0ZGNDNFNTdEQUVGN0ZBNjhCRTUwOUU5Cis6MTBCMTQwMDAzRDBEN0UzRkQ1RkY0N0Y4QkQ1QjRGRjI3QkI3MUVFRjRECis6MTBCMTUwMDBEMkIxMUNFRjZBQzJGNzk5MkUwM0VCMEY3N0I1NjJGOUYzCis6MTBCMTYwMDA1MDk3ODlDRjFGRUNFQUMwRkFFMUFFMzhENkVGRUZFQThDCis6MTBCMTcwMDBDNEYyREVBRTA0OTZGQkJCNzY2M0I5QUYyQjg5RTU3MEYzCis6MTBCMTgwMDBENzFFMkMwN0JCNTIyQzZGQjM2Qjg4N0ZCRjk2QzZGMkJECis6MTBCMTkwMDBEMkVGNEM4RDVDMDI3NjkyNUZDNEVGQzA4QUUxQkY2MjUxCis6MTBCMUEwMDBDMjFFNzdCOEU0ODgzREVFQjAzQzYzOEYzNzJDM0I2QzExCis6MTBCMUIwMDA4RjM3MkM0OTM3RDhERTM3MEU1RDZDN0IxRjREQURCMjEzCis6MTBCMUMwMDBENTJGREE3M0I5MERCRTNFRDk2RUFCMkZEQUZEN0UxQkRCCis6MTBCMUQwMDA3QzZENjI5QjNEMUZBQ0YzMDYxQkJDQjY3MTg3RUQ3RDk5Cis6MTBCMUUwMDBCMEU1QUY2RDc1N0ZGMzFEMzY3ODZGRUM2RTVCMURFRUNECis6MTBCMUYwMDA3RENFODdCRkQ2RDdDMEUyODFFMTExMUI5Q0VDM0Y2OEIyCis6MTBCMjAwMDA4M0RCMzVERjdDQzRCNzA2RjJGMTgzNjg1RjNFRkJBQUJGCis6MTBCMjEwMDA4MEY5NURGMzE2MUJBRjAzREZDOTJCMTJDQTEzQjk5Mjc1Cis6MTBCMjIwMDBFNUMzQ0Y2QjQ4NUUwNkY3OTQxMTM5QjlFRUJBNDBGOTIxCis6MTBCMjMwMDA3QkE0QUQ3ODhGMTQ2QzREODBCQzlFNzk1REQwQzFERTRGCis6MTBCMjQwMDAxNTgyN0I5NjREMTY5MEM3RERBNzkzNjQwMkUyOTIzQzZGCis6MTBCMjUwMDBDRkFDNzEyMTMxNEREQUNFNEJGNTA5MUUyRTkyNjQ3NkJBCis6MTBCMjYwMDAyRkM2MkQ0NUZDOEVFQTMxMjE4MUY5MjZENDY2MzZGRUEzCis6MTBCMjcwMDBCMzA2NzlGNENFRkQ3N0MzQ0Y3Nzg3RjE3RTA0QjRDQkU0Cis6MTBCMjgwMDBEQjBFQjQ0RTBENTFGOEYxMTUwQURFNzczMzA3NUZDN0I4Cis6MTBCMjkwMDBGRDc2QkZGNTMxM0Y3OERGNUUxNkFGNkM3QzdFN0Q4MzM3Cis6MTBCMkEwMDAwQTc2Nzg0QjYyMUVCOEFBMzM3QTIzRkIzM0ZDNEUyOTA4Cis6MTBCMkIwMDBBMDFCNkJFMTBBODA0MDJDNEQ3NjM2MDNEQzA5MTNFMkJCCis6MTBCMkMwMDBCNjE0RkU2QkJFQkNGMTAyOEY5RjQ4NzlFOUYzRTU0N0U3Cis6MTBCMkQwMDAxMjhERjBEOUM0Rjg1RTE2MkYxRDFGNUUyQURFNEFDN0Y0Cis6MTBCMkUwMDA2OUM4MkUxNzk3QTJCRkYzMjRCQkQ3N0Q0ODE3NkZBNTU3Cis6MTBCMkYwMDA3QUExRTE1MDVDREM1QTgwNkZFMzdGMkExQzRGOURGNEY5Cis6MTBCMzAwMDA0OUQ4N0VCQzNCODNGN0NCNzlCM0RGQzQ3QjM4QUQ3OUJBCis6MTBCMzEwMDBGMTM1RUI2MjAyRkEzRDlDMTBDMTVFMUJERkNCQkVEMzYwCis6MTBCMzIwMDAxQjE3QTIwQjIzOUNDRTZFMDc5RDgwMTdBNThCREMwQUYyCis6MTBCMzMwMDBFNTQzNDk3MUFCOUYzRDZGMENDQ0Y2MEJFRjc3QzJGQjM5Cis6MTBCMzQwMDA0QzRBRENFMkFGODg3RkE2MTc5RTNGQ0VGOTc3MjQyM0Q0Cis6MTBCMzUwMDA5NkU0OUY3RUMyMDQ3RUFCMzFDQTNGQkQxNEZGRUU2NzA4Cis6MTBCMzYwMDBGQ0EzN0NCQkQ1M0Y5NzVGMzNGMDI5NUQ1Q0RCOUNDN0JBCis6MTBCMzcwMDA2RkRFMUVGODcyNkIwMUJFQ0VGMDg5QjY0RjYwRkJBODdGCis6MTBCMzgwMDBCODlBOEYwQjdDNjhBMDc0RUYyQ0Q0NEU4OEYyNzEzMjdGCis6MTBCMzkwMDBGNjcxMjgxRjZGQ0Q4QkE3QzM5RjNGMkY0RkM0ODI4N0E1Cis6MTBCM0EwMDBCRjhFQjUzQzRGOTFEMkVEOUEwQ0VEODRFRkFGREI5QTk2Cis6MTBCM0IwMDAxMzc4MEY3MEJGNUZDNEZCODVGQUZENUZDREUyM0RGREUyCis6MTBCM0MwMDAxQTQxQkQyOUNCNjZDRjRGQzIyQzBFREQyMzE0NUFBN0RDCis6MTBCM0QwMDA3NjNGMDFCRTRDQzlGRjlFQUNDRjZGRTVFMTk3QjE5N0I4Cis6MTBCM0UwMDBGOEJEQzIxMkJGNTc1ODkxRTMxRDUxQjY5RThENkUzMjAzCis6MTBCM0YwMDAxQjVGOUQzQkZFNDFBNDVCOEFEOEY3REZCRTVERjY3REY3Cis6MTBCNDAwMDAyRkE2REQ4MDcxRUNERTcwNjVERjBEQjk3M0NDQkU1NDA0Cis6MTBCNDEwMDAzODNFQUU5QzhGREQ3NzlDRjMyMDlFNjY2RTFFOTY5QjE5Cis6MTBCNDIwMDA3MzIxMkNBRkM4MkRDMkY3OUI3MkI1NThERjk4NkJDNDNGCis6MTBCNDMwMDBGQTg2NUMxNENCQ0I3Mzk3RTBGM0Y1QjlFNTU4NkZDRDgyCis6MTBCNDQwMDBBREM2NzI1RDZFMjUzRTVGOUJEQjgwRjUzNUI5RjU1ODY0Cis6MTBCNDUwMDA2RkM5NkRDMTcyNzVBRTBEQ0I1NUI5MEZFMEZCOTVCOUQzCis6MTBCNDYwMDBBQkIxNkVFNEFFQzM3Mjc5RUU1QTJDOUI3MjFGQzdGNzc0Cis6MTBCNDcwMDBDQjcyRDc2MzdENjk2RTI3RDY5N0U0NkVDNjdBMkNGN0I4Cis6MTBCNDgwMDAyOUFDMzdFNjNFODk2NTQzRUVERjYzMTlDRDdEMUFERkNGCis6MTBCNDkwMDBFQkI5Q0Y2MkZEQTJEQzY3QjBCRTM4RDc4QkY1RkE1Q0EyCis6MTBCNEEwMDAzN0Q2RUI3MkZCQjBCRTI4Mzc4Q0U1QzJEQzdENThENkIwCis6MTBCNEIwMDBFNkM2RjBGRDgyREMwMzU4Q0VDRjNEODZDRjQzQjk0N0M4Cis6MTBCNEMwMDBCMUQ0NzI1RkUyRjc0NTNGODU2NTMwRjczNTJDMDNCOTlCCis6MTBCNEQwMDBBRkUwN0I3RkVFREI1OEY3RTVCRTg5QTUzN0Y3MDI5NjM0Cis6MTBCNEUwMDA2QUVFMTg5NkU1RTZBOURDRjc0RjlCQzkzQzlCNUM2Q0JECis6MTBCNEYwMDBDQTJEQjRENTM3NENEQkY3RUZGNUJGQkFEODU2NUYzNzU2Cis6MTBCNTAwMDBCOUNBNTY1RjczRjI3MjVCRkZBQjRGRDhGN0VGOTVDN0JFCis6MTBCNTEwMDBERjZGQjcxRkIyRjZGRDdCNTlFNjA2QkJGRDcwNzg4NzdCCis6MTBCNTIwMDBERDdFNDhGRkI1QUQxRTFEQkFDMzZFM0ZBNEVDRkI3N0IwCis6MTBCNTMwMDBGRDFFRkJGRUJEMjgzOTYyQjcxRjc2MUZCNEMxMkYyMDQ4Cis6MTBCNTQwMDAwRjNBRjJDOUM3NkRGMDU1RTZEMzM2Rjg0MEVCNTcxREY4Cis6MTBCNTUwMDBFNzJCMTlBNkZGOEQ2RkQ5OUVBQjREQ0YxNzNDODc4OTdFCis6MTBCNTYwMDAxREJBMUFCRkRCM0Y1RDI3RjI3Qjg2RjhCREFERkM3RUJFCis6MTBCNTcwMDAzNEU3N0M1NjczM0QzMDJGQzdGQ0E3MzA1Rjc3MzVCMDdBCis6MTBCNTgwMDBFRUYyRjI5RUMwQ0U4OEU2RDkxOUYzMUFGNEFGQkM0OEE5Cis6MTBCNTkwMDBFQjY3MTYyQjQ2MzdBRDVCNzY4NjA1NUZGNjc3MkIxNDg3Cis6MTBCNUEwMDA2MzMyNDVGMTc0QkRFQUM2N0JFNzg0NjBBNzA5NzFCNUQzCis6MTBCNUIwMDBCQkE2MDREQ0VGQUIxNzExOUUxRkQxRDFDMUUyMTNDNEFGCis6MTBCNUMwMDBCQTRGMDdFRkY3MTlBQ0I3REVFRjdDMUZCRThGQjJGQUE4Cis6MTBCNUQwMDA3MUZGREVBRDEwNDcxRDc0NTlFRkJGRjQzRThDNzM3OEQ4Cis6MTBCNUUwMDA1OEZEQkZGQjc3MERDMEZCRUFBQTg5MDhFQ0IzRkI4QUM0Cis6MTBCNUYwMDA5QzZGRkU0RkJGQzJFQzdEQkZGOTIzRkY5QUQ5N0JBNjlCCis6MTBCNjAwMDA1RjA5Mjc1RUYyRDNFN0I3QTk4OThCRTBDQTZFQjhFNzc2Cis6MTBCNjEwMDAxRUVFNzFERTJBOUIzRjAxQjg2QjY1RjM2NTNGRUUwQkIyCis6MTBCNjIwMDA3NkZGRTE1QUM4N0Q1RDgzRjcwMkZFMENERTRCQzFBM0I1Cis6MTBCNjMwMDA5OERGNUZGRDgxN0JGMEJFQUFDMTAwQzVDNzVGMUM5RjdDCis6MTBCNjQwMDBGRkU2OTc2NkY2MUI2MkVEMzcwRDE4NEY0NTdCNzAyMEJECis6MTBCNjUwMDA0QUYwREU4Q0MxNTAzQzA1RjdGOUE1QkVBNzkyMjcwQzM1Cis6MTBCNjYwMDBBMDNCQ0Q5Mjk1Nzg3RUUyRTA3MkREOTIwQkRCRkU0NDRBCis6MTBCNjcwMDA0ODNDMEI3MTdDNUZDMkFGODNCREU2MjcyNzMwRkYyMkI5Cis6MTBCNjgwMDA0OEE2QjFENDg4MjZEOEVFREJCNkU4QUY2N0Y0QzNGRDkwCis6MTBCNjkwMDBGRjdFM0M4NzM3OEY0RTYyOUMzNTQ5RjhGREQ1NkZDMUUwCis6MTBCNkEwMDA3M0NBOTczM0ZFMzVDNUY5NzI5NTc0MEZEMUU4RjgwRjU4Cis6MTBCNkIwMDA1MzdCMTJFODc4OTgzMDdDRjc3M0ZGNTQyNkM5NzgyM0JGCis6MTBCNkMwMDA4RkY3RTRERjIzMjFCRkZBNEQ5NDFCMkJERTIzNEIxQkE2Cis6MTBCNkQwMDAzQkYwN0ExNzdFOEY0MzA3RkQwN0Y2NjE0REJDNzRCQ0MzCis6MTBCNkUwMDBDNzc5NkZDM0I5QzY3QkMyMDE2N0JDQzc4RkU3QzlBNzVCCis6MTBCNkYwMDA5QjRCN0YwNzY3QzU3REY2Mzc5N0JFQjczMkMzRkRCRTRDCis6MTBCNzAwMDA4N0Y5NzlFRjQzRkNCQ0Y3NDFFRUY3MURFNjdFREZGRERDCis6MTBCNzEwMDBFMEY3RTFCRDVBQ0NFRjNCMDA3RURGMzIzODJGMzY2RENCCis6MTBCNzIwMDBERjk3OEMxNkI5RkYyNTFBMTJCODlDRUQ0MUZCREVDN0Q2Cis6MTBCNzMwMDBFRjJCQTI5RTJCREFGMzVFNkVDRkY3RkE3QkU2QzNGRDBBCis6MTBCNzQwMDAwQ0JFMTBDOTgwOUZCMEZCRUE3MUZDN0U5NjkyNjJDMDZECis6MTBCNzUwMDBGRDAwQjdGRkZBOERGOUZGOEVENjYzMTE2MkJCREZDOTFBCis6MTBCNzYwMDBEQkVDQjgyRkExREMzODcyQzY4NDdFN0RENDZGNDgxQjE5Cis6MTBCNzcwMDBDNUY5NzNDRUZEQUExOUUyMzlBRjdFRDkzRDNGRDZCRERBCis6MTBCNzgwMDA2REQ0MDM0RjgxRkNGOTgwNkUwREU0RUFEQjM4Q0U2OTlECis6MTBCNzkwMDAzRTBFOTEzNjFFQzdGQjBDMkY5MzQ5MjkzOTk4MzNDRUE0Cis6MTBCN0EwMDAzOUNBREZBRTgwRTNGNzI5MUNGMkE3Q0JBNDA3RUZBOUMzCis6MTBCN0IwMDBFMURGNDNFQTdFQzM5QjFGNUZCMUU0QjBCNzk5QzUxRkM5Cis6MTBCN0MwMDBCQTVGRkYxOEZFNkVDMDhCMzU1QjE3RTZGQjdGRDY3NzNFCis6MTBCN0QwMDA0QUJEMkQwQzhFNUE3REI4Q0VGNzc3OUZENDNGQTlDRkE2Cis6MTBCN0UwMDBDMjNENjVDMTY5QTVFMzE5NEY1ODcwQTMwQzJFRDA2MjA0Cis6MTBCN0YwMDA4ODg1RUVFRkZCMjJERjRGQkVFQzMzNTM4MTlBRDk3MTdGCis6MTBCODAwMDBGNTlFOEUxQjUwNEZBQzUxRjE3Q0M2RDlFRUNCQkVDNDE5Cis6MTBCODEwMDA1MDIwMkYzRkMxRUEzRkJGM0RDODU3ODlGNkU5NTJFRDlFCis6MTBCODIwMDAxN0RGRERGMTczNTJCQUZERTFDMDlBRTJFREVCRUVFODBECis6MTBCODMwMDA3OEIwMENGRTk5QzJFM0E3MUVDMTczQTYwOEZCRERCMjY3Cis6MTBCODQwMDBFRTVBQTUwMUZDRTU3RDZCQThCRjRDRTdFMUM1MTU1QjkxCis6MTBCODUwMDBGMTVFRDlCRUQwMkI3QTIxMzlBMkZEN0VBOTE0NUU5NDY3Cis6MTBCODYwMDAyRjlENjVFOEZBNUFCOUY2NDI2OUJBQkU1RDg2QUYyN0UwCis6MTBCODcwMDBDQkYwRTU4NTUyRUQyOTVGMEY5N0MxRkZCRjE2QzYzRjlDCis6MTBCODgwMDA3NTExRTAxREE4NjNGMUJBRUU3QUNBNTdGMEQ3RDZCMEE5Cis6MTBCODkwMDAzODg0QjUxRTFFMUYyQkNBRDc1N0NBRjBBNTlDQkNGRTA0Cis6MTBCOEEwMDBFMjAyRTVGNThENTJFMzU3MjBBRkZGNTQ4NkFGRTVFNEExCis6MTBCOEIwMDBGNUFENjJGMjhBRTdBNEU3MkZBRjQyRjBDMkU0RDUxM0Y4Cis6MTBCOEMwMDAyQ0NERDc3MkYyMUEyQUQ1QkUwMjc5QUQyRDg1N0YwNTBGCis6MTBCOEQwMDBGMjFBMkQzNEJFOUI1MDg1MDhGNjdFMzMzQjE3REJERDE0Cis6MTBCOEUwMDBDNkVFMjM3MzM1QjE3REQ3RjdFQTE3RDEzRUVBQTNGQjQ1Cis6MTBCOEYwMDBEM0JDNTZEOEE3QTdFRUJGQkQ2NTc2NUY3NkVFM0JDRTJDCis6MTBCOTAwMDBGRTlDRkJFNkVERkZGQjQ5REMzNzAzN0NCRkIzRjBGMUE3Cis6MTBCOTEwMDBFOENFN0U0QURGNjc3MUFFRTM3QUUxNzc5OEYyN0VERkE4Cis6MTBCOTIwMDBFMkUyQzdFRERGQUQ1RUY4NzhGNjdEREREQjQyQzdBNzZBCis6MTBCOTMwMDBFRjA5MUQ3RjBCOUUyMzNFODNFNzg4NEIwRjVERThCODIwCis6MTBCOTQwMDBBNUUxOUIxRTcyN0M4RjdCOEU3NkMwMkQ0MUJCMUREQURDCis6MTBCOTUwMDBCMEU3NkI4RkUwRkQyM0JDOUYwNkQ5QzRERkVEOTNDOTMwCis6MTBCOTYwMDA5NUVDQkU5MzIxOTYyRjI0RURGOUNBMjNBNzU2RTdERDY3Cis6MTBCOTcwMDAyQjQ1NzQzMTNGM0Y0ODFBOUE3OEU0NTQxRTFEMzk4ODhDCis6MTBCOTgwMDBGN0IwRjgzMkU2MkRDNkI0Q0JEMTlFMTgxQzJENkRDNzhBCis6MTBCOTkwMDA3RTk5RUZFM0NGRjBGMzhCQTdCOTFEN0I4NEU3MkQzRUIzCis6MTBCOUEwMDAwOTc2RUMzMjM4Qzc2MEU3MTdFMzYwQzc2MjlFNjMyQjA1Cis6MTBCOUIwMDBDRjczMzQ3OTlFNjMwNzk2Q0ZGMUYzODc2Rjc1MURDNkY5Cis6MTBCOUMwMDBGNzQ3QkIzMjU4N0VBM0VCMDg5NjVGRUY5QUMwRjc1RjRDCis6MTBCOUQwMDBFRDNBOEFGNTg5QUUyQ0IzODc1N0RFODk3QTY2OTYwRUUyCis6MTBCOUUwMDA2N0RDQUEzNDFEOTcxREI1Qzc0MTU2NENEOENGMzEyRTAwCis6MTBCOUYwMDAzOTYyM0ZDNzU4OUVCMTlGNjMyQzNCNkM4RjgzMkM0OUEzCis6MTBCQTAwMDBEQkNGMzExQTg3RUNFNzE4QkUyNkZCMzk4NjQ3QjdDNzZDCis6MTBCQTEwMDA0MURDOTFGNzNCQ0U0MUI2MzlDRTQxRUNFNzE4RjU0OTEwCis6MTBCQTIwMDBGQjM5QzZBMkRERjYzODQ4NkRDMjdFOEVCMUEwRjM2RTNBCis6MTBCQTMwMDAxQjdDQzhFQ0IxN0YxN0RGNkE4RjgzNkM5QUI2OUY1RjVGCis6MTBCQTQwMDA2Q0Y4RDU4M0Y2QjhDRkE0M0QwRUIyRUVBNDNEMEVCMjhECis6MTBCQTUwMDBFNkM0NTc2REY1RDVDN0VERjE4RjBGRkIxMjJGODIzRTZGCis6MTBCQTYwMDA1RDk5NzVDNjQxMjY0NTk4QkY5RkZCRDlGOTlGRTU1RjUzCis6MTBCQTcwMDA1M0Y4MUY4MEZFQkM0QUYyNjczNzUwQjk3RkVDMjhCQkYxCis6MTBCQTgwMDBERkZEMzFDMkNFMzMwOUY5MEZFODJGQzgzM0ZFODI4OUJBCis6MTBCQTkwMDBGQTQ3RTJGQTY3RUNDQUE5NTdDMDlGOTFGNzMzN0ZFN0VDCis6MTBCQUEwMDA3NjYxNUQ1NkNERjc3NzVDRkYyOEU0QUY2QjQ5NzNGQTlBCis6MTBCQUIwMDAwRDY1RkE5NzBERjQ3M0U0MzJGRUM4REM3RTk5REU5QUM4Cis6MTBCQUMwMDBCRERGQkMyNTA1Nzk1NEYyOEMzRkYyMDE4NzNGNTIzNzI4Cis6MTBCQUQwMDA4Q0JGNjMzNUFGQjQzRjMyNjc5QzczRDQ0MzZGMDU4QjIzCis6MTBCQUUwMDBGOEMzMTExMUY5NjdGOTIzRkI1QUI4M0Y0MkQ4Nzc1MkNFCis6MTBCQUYwMDA1NjdGOTYxRTFBOEI5NDVFODdENjNEMkQ2M0RDNkY5MTIwCis6MTBCQjAwMDBGRDg1Q0ZCMUFEN0M5OUIxOTZDQUYyQkE3RjEwNjRFN0RBCis6MTBCQjEwMDA0OTE0OUFGQkMzRkY1RjNFREU0REY5QjhCQ0FBODhCRjRCCis6MTBCQjIwMDBGQTFFQ0I0NzMxQjg3Mzk1MEYxOTc0MDZDNjIzNkYxOUU3Cis6MTBCQjMwMDA4NEVGOTg1QzUwQkY3Q0I2QUVGMDdBRjBERURCQjY0MkE0Cis6MTBCQjQwMDA1RUM4MUVDMkNFNzVDOENCRUNCRUQ1NzI3OEM0MzZERUQ4Cis6MTBCQjUwMDA1NDMyRkZDMThBQUZGRTQ5NjM3OUJCQjFENjlCMzA2RkM3Cis6MTBCQjYwMDBGMjM0MURBM0Q0N0REQUNFM0MwQjI5OUM4NDFGREI4M0U5Cis6MTBCQjcwMDBFRkQ4MEI5RUY3RkNCNDlBRTU5M0M3M0EzRjUxRDI2RUNCCis6MTBCQjgwMDA3MUZFMUU1OENDMkM3REJGRUUzMEM3RkY4NUQ3MTZBMEE2Cis6MTBCQjkwMDBCREJBNkY4OEU5NjNCOTczQzVGMzIwOEY4RjgzM0MxQUYwCis6MTBCQkEwMDAxODRGNTE5NzAzNUQ0MzMyREVBN0U2RDcwOUM2MDUxNzQ0Cis6MTBCQkIwMDBGQjQ5QTYzQjBBN0MzNTUyNzA4RjE3RkRDMzczRTUxOTBDCis6MTBCQkMwMDBGOTFDQjJEQjUxNjcyQzNFQzU0QkYzQjVFQ0VGMTlBQzU5Cis6MTBCQkQwMDBENzMxMkY0REQ2NDk1MjBCRTFGQTIxNkY4NDExM0Y1Q0NBCis6MTBCQkUwMDBCNzgzQUQwNkZCREQzQjhBOEZBNkNENkRFRkM0Q0JCOTI1Cis6MTBCQkYwMDAzRUU1NUQ1NzYwM0NBOTQxQjBENkE3Q0Y4MDNDOUREM0MwCis6MTBCQzAwMDA3RTdGQzk3QkRFRTZGNDdCOEVFQkYxOTkzOUVCRjE5QTBFCis6MTBCQzEwMDA5RTlGQzJCOEEzMkM3RTQ0RjZEMEJGQkM3MzRFNjc3RkY0Cis6MTBCQzIwMDBENjdBQjRFQTJGQkM3NjE3N0VENzMyMzg3QTA3QkJBRjA0Cis6MTBCQzMwMDBCODhFREYwQjM2Q0FGNDYzMzFCQ0FDNzhEMDAxNkUxRjBFCis6MTBCQzQwMDAzRTcxQThCRDA3RjhEQjQ3RDc0REJFM0U1QUYyQjcxRjdECis6MTBCQzUwMDBGMTI2RDhCOTYyMzU5NDRGMUU2NkRGNkIyRjdENjAxN0QxCis6MTBCQzYwMDA3RkJFMDM5RjFGNjhEREQ2OEVGRUNGMjE2MjAyNTlDMUMxCis6MTBCQzcwMDBGNUE3NTRGNjdFNEE0M0Y4RjBGNDcxQjgxNzY5Mjk5NTkwCis6MTBCQzgwMDAzNzg4ODVERkJCQjFDNTg0REZBOEFDMEE4OUVENTA0QThGCis6MTBCQzkwMDBBMzkzQTg3NzQ5MkIzMTk3RTgzMEFFOENCRjlGQjMzODc4Cis6MTBCQ0EwMDA0NTFFMDU3QzE2OEYyNjQ2NDAzRTQ5OUExOEYwQkUyQTRFCis6MTBCQ0IwMDAxQ0RGNzYzNTg1QUZBMjgyMDk1NzU2QTcwODdCQkYzOEFGCis6MTBCQ0MwMDBBOUUxRkNDNTQ2MTMwN0FGMDZGODY2ODJCRkNCNDVERjg2Cis6MTBCQ0QwMDA2M0JENkVCNzg2RjkzRkJFRDFDOTIxQjhGNzlBOEVDMTUwCis6MTBCQ0UwMDBERkQzM0E3REJGMzBDMURBMDc0NjI3RDM1QkQwMkY5OTI3Cis6MTBCQ0YwMDA3OTlGREVEMjAyRjcwRUIyRjdGMjI4QTUwN0RFNDcxOEM5Cis6MTBCRDAwMDAzRTI5MzI3RDAyREVDRjBGQjNGN0NBMjhEQjFGRUZEREZECis6MTBCRDEwMDBCODAzRUZEM0EzRTNFMzdENTMyRUZFRkMzMUNFRkY1OEVGCis6MTBCRDIwMDBFNzNCMjc2MDFDMkIxRjIzNDVFMkI2N0JBOTlDRUJERTdCCis6MTBCRDMwMDBGQUZEQkY1RTZFQzdGQkQ0NDU1RjM4OTU3NzFGQzMzRUUzCis6MTBCRDQwMDA3RTVGQjU3N0Q0QkUzRkZGQjE4QUVEQjNDN0I4OUUyOUY5Cis6MTBCRDUwMDA3NzJGMUIyNDdBODM5Q0ZGMEI1NTU5MTk5NjAwODAwMDdFCis6MTBCRDYwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDAwMDBCQzUzRDE0Cis6MTBCRDcwMDAwQjc4NTRENTk5RTdERUI5RjNDQTRDQzI5RDMwMDk5M0NDCis6MTBCRDgwMDA5MDk5REM4NDA0MjIwNDNBODE0MDQxNTEyNzExMTExNTE1Cis6MTBCRDkwMDA2RDQ0REIwNjZCNzUwOEM4RkIxMTUxNEJCNERBREM5MEJGCis6MTBCREEwMDAwNDkyMTA2MEIwQUU0NEU0MzE4OUEyQThBMDgzODJEMjhDCis6MTBCREIwMDA5NkRBMDFCMzE0NURCQjREQUQ0NTZBRDE0NkQwQTgwOEYzCis6MTBCREMwMDAzNDUyNTE3NjU3RDdGREZGRkZEQzRCRTY0RTI2ODlENjFECis6MTBCREQwMDBFRDZFQkU0RjBGRTc5RUY3RkYzRUZGRjlDRjE5QzYxODc1Cis6MTBCREUwMDBGQjJBMTdGRTU3OTVDNEEyMDU4Q0ZFMjg1Rjk5Q0FBMkFDCis6MTBCREYwMDBCNjk4RkNGQzRDNjM3OTMwRDc5ODJGMUY2OUNDN0JDNjcyCis6MTBCRTAwMDAxQURCQkIyRjM2OTQ3RjdFMUQ2MzFENEVDODQ4N0UxQkY4Cis6MTBCRTEwMDA4MzU0M0E3QUIzQUQ2QzM0NjNCNUVFRTU5NDNGN0ZCQjlGCis6MTBCRTIwMDA1RTFFNDhDMjdDOUU3Q0QyOEVFNThGNTU1NUQ4NTgyMTI3Cis6MTBCRTMwMDA2M0FCM0MzMzA2MDVFMUZCNTdGODc3NzlFRkI0QTE5QTgxCis6MTBCRTQwMDBCMUE4OTVCMTM1RDUyMTRBOUJBQTVCMjg2RDJFNjIyMkY3Cis6MTBCRTUwMDAyQjY2NkNFRDY4MzFEQzk2QzNEOEVBQzIxOUQ0NUZCRDlECis6MTBCRTYwMDBCQkZGRkVEQUIwQkYxMThDODVBQjZEOTQ2RUFEOTZBOUE5Cis6MTBCRTcwMDBCRkNERDUxRTRBNkJBQjE1NEEzNzU1MTc1MERBNTJFRDc4Cis6MTBCRTgwMDBBNzdBMEY1NTRGQTQzNDU0MURBMDc0NURGNTM0MkE3RjUyCis6MTBCRTkwMDBCRUJBOENGMkJCQUJDQjI5N0RCNjNBNDhERjc3NTVDRjIzCis6MTBCRUEwMDBBN0Y0RTlFQTRBNEE5RkFDQUVBMkY0ODk2QTk1RDJFREJBCis6MTBCRUIwMDBENTBEOTRBQUIyQzg1ODFBQUNFNzRBN0Y2NjE5Q0NGRkQwCis6MTBCRUMwMDBEMTJCNTk3OUE0QjBGN0JDNTU1OUUwRjU2NDgwRTU3OEQ5Cis6MTBCRUQwMDBDNjkyNTgyOENBREM4ODJGRTg0QjYxQ0NERTEwNjIzNjQ3Cis6MTBCRUUwMDA4MDQ3RTY2MkY4ODZGOUFBMTBCMzQyREUzMzg3RTdEN0M3Cis6MTBCRUYwMDBFMTM4RDBBRThBQjEwMEMyOEQxNUIwRjA3NjgwOUI0RDhFCis6MTBCRjAwMDAwOUIxNTkzMDVFQzBBQkIyMUI5MjE5OUJBRThEODNERjc1Cis6MTBCRjEwMDAxMThFNkE4RUNBMTA1RjI3MkM4MUVCRTQzNEVDODc1MUI2Cis6MTBCRjIwMDA3OUZFRkU4RTgzODhENjMxMUQ5MTUyNEMwQjBGODc0NENCCis6MTBCRjMwMDAwOUQyOTE1MzJBNTc5QTIwMUQzNDU5MTVCMUZEMkE4RkUxCis6MTBCRjQwMDA1ODJBQzA3OEU3QUFDNEIwMDlCQTU2OEFEOTQxMTNFNDdFCis6MTBCRjUwMDAxRjJCMTRDMzREMzA3RTczMDkxMzQ1QzQ2MzA2RTA1MTkzCis6MTBCRjYwMDBFODU5NkZEMkY5QUQyQzNBMEVGMDVBMzU2MzEwNEIwMEY4Cis6MTBCRjcwMDAwRjNEMUQzQTVGRUNBMTQ3RjgyRjIzOThENDQzQUZGMDUzCis6MTBCRjgwMDBERkVBNTBGRkVEQzdFQzExMERGNTBCNzdDNkI1MkY4NDM2Cis6MTBCRjkwMDBGNkZERDBEM0M4Qzc4Q0VEMEIzNjI3MTlFNkIzREFEMzNDCis6MTBCRkEwMDBGRkY4RjlFN0FGQTc3NUY2NDVCN0E3MkMxNTNGNDNCOERCCis6MTBCRkIwMDBFQkY5RjRGMzk3QjFFODYwQzZERTcyQ0E4NENGRDQ2QkI0Cis6MTBCRkMwMDBFRkYzMDQwQjY5QjgyOTI2QTAwNzI5OEI4NTlCMDRDQ0M1Cis6MTBCRkQwMDAwNkQ4NkM4MEFCMTlGRUQ1MjRGMzNDQzJERDA0NDg2QTU4Cis6MTBCRkUwMDBGMjIzQkIyQTAxOTY4MkE5M0ZDMEM2NjAxQUEwRkMyMTk5Cis6MTBCRkYwMDA3M0IwNTkxRThGRjkzMkZFNUQwRTEyMUQzNDVGMDQ1RDYxCis6MTBDMDAwMDA1QzhDRkQ2NDM3MDQyNjQzRkVGQkYwQ0Y0Q0M2QUUwRkJDCis6MTBDMDEwMDA1RDM0NEQ4NUZDRTdFNkEwNTgwNUUzQUZGNTcyN0U1QzI0Cis6MTBDMDIwMDBFMTFCOUI4NEVCN0VCNEI5N0Y3RUFDRDVGODUxQ0Y5QkVFCis6MTBDMDMwMDA5QzAxMjY0MDNGQjkwREYyNThBNEEzQkVEQTNERDgyMDlBCis6MTBDMDQwMDA0RTBCMjdFOEY3MjlBNDVGOTg3RjdEQzMwQzM5MUY1NzUzCis6MTBDMDUwMDBERDhFMzI4QjMxQUI5MzExQkRDNUQ3ODdGNTNFODVGMEIwCis6MTBDMDYwMDAzNUJCRjkzQUQzNkUyQUEzMzQ2RkU3MjQ1QjE5RjBDM0NBCis6MTBDMDcwMDBFN0M5RkRFM0FGMzE2RUZFNzYxODMyOTI2MDVFMUY2QTRCCis6MTBDMDgwMDBGM0NBN0JFRDE3MjQxRjNGMUZERDNGNURFOTcyRUY3Qzk0Cis6MTBDMDkwMDA1ODY0MUQ4ODVGQTk4Q0U0NjlEQTRENDE5NjA3RUI1OTE1Cis6MTBDMEEwMDAwREZDRTI0NEI5RjdFNThEMEQzOTgwNTc3NTgzNDg3MjcwCis6MTBDMEIwMDA0MDlGN0ZGQ0I4MjZBNUIzNDQ4NEYyRDUwNzE2MzAwNTBGCis6MTBDMEMwMDBDNjM3N0JDQTk4NUE4ODc5NUQzRTQ3MThGNkVGNzA3Njc2Cis6MTBDMEQwMDAwNDcwQkQwRTE2MEE5OEEwN0Y0NzU1NTBDNUVGMTY4RjA1Cis6MTBDMEUwMDBDQTkwQ0U1NjY3NUNBODRGRjI3NjRENDgxNDExQkVBQjhECis6MTBDMEYwMDBCMkM0MzAxMzI4NjU0RUU0Rjc2MjQ2RjlFNDhDRTcwMkQ3Cis6MTBDMTAwMDAyMjkyQ0QxNzMwOUYwOUQwMEZGRURCODRGMDU2OTk4ODFDCis6MTBDMTEwMDBFQkM4Njc3RTI3Q0NDQjU2RDAxRDEwQTE3RTFFREIxNzQ3Cis6MTBDMTIwMDA0NTc5NjAyQjYxRkUyNkU0OUY4QzIzMDFBNDVCRjUwRTBDCis6MTBDMTMwMDBFNkNGMjczMjBGOTIzQzYyNTJEMDg2RjIyQUI3NjUwQ0M2Cis6MTBDMTQwMDBGMTgzNEQ4OTA4QjhFRTFGNTg4MkVGQzVGMjhCQzVDMzQ1Cis6MTBDMTUwMDBFNUQ4RUEyRjREMDlFNUVBQkY2QTcyMzFBOTBGQkMzOTZCCis6MTBDMTYwMDA1Q0JDRkM3M0IzNzIwREU5MUJDOEI3MjVBMDIzQjM4QjZECis6MTBDMTcwMDBDQkYxMzY3OUM2RUYwQjk0MUVCRUQ0Q0JERkMyNDU4RTExCis6MTBDMTgwMDBFRkM5RTc5RUI3RDBCQ0YzNkVGQUYxMjA1QzRGNUY3NDQ1Cis6MTBDMTkwMDBCMDRBQTNBRkY1ODNCOERDQ0Q5QjdDNjkwMEUxN0QwRThFCis6MTBDMUEwMDBFNkRBMjRGNEFFQkY2MDkwNDJGNUY0QkNFNDM0Q0FDN0NBCis6MTBDMUIwMDBBRjNGM0Y4OUU0NTJERUE5N0IzODFGNzhGQkE3NTc3RDRDCis6MTBDMUMwMDA5RTlGN0I4REY2ODA5ODY3MjMzRDVEMUYxMjQ5MkVENTdCCis6MTBDMUQwMDBCQTQ1OTYwMkY5QUQ0ODFGMzkyODMwM0JFRDE3QzE3QUIwCis6MTBDMUUwMDA2QzZGOTgxOEUyN0I2QjU1QTlBODQyNzk3MjhFMTQyNjYxCis6MTBDMUYwMDBGQUYzNzQ0NzUxOUNEOTI1NzYwMEU5MDNGMEFCQjhEMjI1Cis6MTBDMjAwMDAxMEVGMTMwODdFNTlDNTExMDFFOUZBOTRBNjE3RTFBRkEyCis6MTBDMjEwMDBDRTAzNzRFNkUzNEI0NkZFMUVFMTgyRUY4MTlEMDI5NzVBCis6MTBDMjIwMDAwMzFFMkUwN0NDQ0NBRjVBNzE3Q0QwODgxMTE4Q0ZGMUU5Cis6MTBDMjMwMDA4Njg5QkUzMzE2ODlERTBGRjkyNDU5RjRBM0RDNUM1QkQyCis6MTBDMjQwMDBCQzMyMURGOUNERTE2MkE0QkZFNjVGREQ0NkYyMDlFNDMwCis6MTBDMjUwMDBBQTdGMTNDOEQxQTUxRjc1QTUyRjgzN0M5RTg3Q0I1REIwCis6MTBDMjYwMDAxRDFFNDk4NTE2ODM1RTE4NzAxQzI5MUM0MDNERTkxMDZGCis6MTBDMjcwMDA5ODNGRTRFRjFCQ0VERkI4NUY1Qjk4RDlGRkExN0U0MTBBCis6MTBDMjgwMDA2MUE0MTM1RjY4N0YzQjU0OUExRkFFMUJGQUI1QjI1RjdGCis6MTBDMjkwMDBEMTM4RTdCNDcxOThFOUQ4NjE4NDZGRDI3NzI0NjY0QUJGCis6MTBDMkEwMDBDMDFGN0Q4RTYzQkFBNTVGRkQ1MDc1NkNDMUVGREI2MzY3Cis6MTBDMkIwMDBFOEY3MzY1N0IyQkI2QjE0RkNFM0JCRUNCQjVGQTE4MjYzCis6MTBDMkMwMDAzMDM5ODlCRUNFODEzRDgxRTMyQTM2NzYxMEYzNzVDREIzCis6MTBDMkQwMDA2MjM4MTE3RjdDNUUzREZGRjdFRDgwQkNCNTlBNUVBRkEyCis6MTBDMkUwMDA3OUQ3NUE0QUY0Mzk1RTBDNUJBMTdFN0JEQUQ0Q0NDRTg2Cis6MTBDMkYwMDAxOEJFRDBFNTcwNkQzMUQ3MDM0MEREMENGOTYxNkRDRDBFCis6MTBDMzAwMDA1MTY1ODFEMjUzRUY0OUJEOUVEQ0JGQkVEOEFFRDc2QjFECis6MTBDMzEwMDBFNkY1OTI4QkZENjIzMDQxRkQyNzM0N0U3QUM2MTFCODc2Cis6MTBDMzIwMDBDRjM1QkU2NzVDNjVFNUI0OUI0OTBFOERCNzMxNTM4MjRFCis6MTBDMzMwMDBGNTNERTMwOEQ2Qjk2MkY4NThFRjNGQjYzREQyNkYzRkZFCis6MTBDMzQwMDBFRDlCNUQ2OTdEQjdGN0REM0JFRDJERDY3RkZCMDdGQkYwCis6MTBDMzUwMDA2QjlGQjU3Q0RBQTYwMUU2QkYzOUYxRkNENTZERDgyRTBFCis6MTBDMzYwMDBEOTYzNjE0OEU3MzUxOTk2REMwNkM4QUYxOTZGRjE1QkYwCis6MTBDMzcwMDAwMTBGRURBM0E3N0ExMDZGNzVBRTIzNEEyMjdBODI3RTUxCis6MTBDMzgwMDA5RkU4NkY1RTAwOTdGMjAxRDZGNUVDMDA3MDJEMTdGQTZBCis6MTBDMzkwMDA1RkQ3OEJGREI1MDdCODFFMUQwMDJFQkYxOTAwQUUyRDRGCis6MTBDM0EwMDAwM0NDRkZCNzg5REJBQkQ5MzhFRkU0MkMwQkU5OTMxQTQ4Cis6MTBDM0IwMDAyRkMwRDU4REZDMDA3MDY1M0RGQ0YwRDg4NjNFRTFGQUJCCis6MTBDM0MwMDBGQTQwRjQzNkMwQkFERTFBMDAyRjAzRDFFQkYxMDFFMEQ3Cis6MTBDM0QwMDAzQTEwQkQ5RUZDOTZGNDdBQjYwRkI4NkVDMzc5N0YwQjA3Cis6MTBDM0UwMDA3QUZERjI1QkQyQUIzOUY1REJEMTZCNzI2QUZGNzI2MDFBCis6MTBDM0YwMDAyMDdBNERFQkFGRkREN0EwNTc2RkEyRjk1Qjk5MjNBMDMwCis6MTBDNDAwMDBBMkZENTNDOEY1RjhGQzEyOTFGNEJBQjk4MEVCNUZDN0VFCis6MTBDNDEwMDBCMTI3NDg4RkQ2ODE5RTFBM0MxMUY1RjVGMTg3OTYxNjAzCis6MTBDNDIwMDBGN0U4RTc3OEZEMTNERjVGQkNGRTVDRkFDOUUzQ0M4RTZBCis6MTBDNDMwMDA3OEQ0RjQ5RTNFMUZCQjEyREZDRjhGRkFCNUUzQkVFOTdFCis6MTBDNDQwMDBCODQ5MUUxNkI1OEZFOTY5M0ZGMjMxOEJDMThFRkJGNkY0Cis6MTBDNDUwMDBFMzE5RjU3QjUyMzE4QzhGRkUwNDE4RkY4QTg5QTg1N0E3Cis6MTBDNDYwMDA3N0ZBOTEyRTg3M0ZGODZEQzdFREJGN0VDMTY2NjNGRkY3Cis6MTBDNDcwMDBERkQ0MUU5ODk1MEFGNjgwQTNDNzFFQzhBRDdBN0VEQjZFCis6MTBDNDgwMDA3QjgzN0JGQUM5OTUwMjRDMDZCQTkxRDgxNEIyREI1ODZCCis6MTBDNDkwMDAwM0YzNkZDN0UyQUFERERCREUxQkQ3NjMwRjAwNDc4ODFCCis6MTBDNEEwMDBCODlGRDBDNzMxMzU0NEI2QkQxN0IzOEVGMzczOThCNjc1Cis6MTBDNEIwMDAwRkFCQTQ3RDRGOUU3QzcxMTJEMkYxRUFFNkZFRURFMjU1Cis6MTBDNEMwMDA2NzM0M0RCRTUzRjMzNzNEODVGRTI2NDg3N0EwQkYwOTRDCis6MTBDNEQwMDBEMkM3RDFERjA0RTk2M0U4NkYxQTgxRkUyOUVFNkY2QUUzCis6MTBDNEUwMDA0MjdGOTMxNUVEMEZFRTZGNUE4NUZFMjY0OEY3QTMxRjg2Cis6MTBDNEYwMDAwQ0QyNUY2QTdFQjA3REQ1NjE0QTVGQThERTQxRTk5RUJECis6MTBDNTAwMDBFQTA4OTUzRjU3QkQ4RkYyOTFFQTI4RTU5QjhCN0U0MjYyCis6MTBDNTEwMDA3MkE2NjcxRERDM0VDRjkzNzU3RjVERkZFQkY4Q0UzRUM0Cis6MTBDNTIwMDBFMzNFNjI3NEM0RTgyNzE5QjUyM0Q1OTBCRjI4OUM2OUZGCis6MTBDNTMwMDBBODNGQTIyNUQ3NTA5RTFGMUE2OTI4MUZENjMwRDY5MDMzCis6MTBDNTQwMDA3NzE0NUM2Q0E4NkY1NzRBOEQ3NEU1QjlDNjUwM0Y0N0E1Cis6MTBDNTUwMDA5RDYxQzg2NzU3REQ2Q0E4RUZBREFDMzA5NDBGOURCRkVGCis6MTBDNTYwMDBEMDUwOUUxMTVDNkVDODBGMjlCRkQ3NTBERjE1NTg2OTk3Cis6MTBDNTcwMDAyODFGMzRCMUM5NTA3RTY5RjcwMzg2RkMyNTFGNkUzMjJGCis6MTBDNTgwMDBENDlGRDREOTY2MjhGRkVFRDFBNzBDRTVFMzNCOUUzM0I4Cis6MTBDNTkwMDBFNEM3MURGRUE1QTFGRUY3MUNDMTI4Q0FDM0EyRTg0MTNECis6MTBDNUEwMDAyM0JGQjA0RTExRjFENzlFQzI2OEZGNjM4N0ZEN0IyMDg5Cis6MTBDNUIwMDA4MTNERjk1RjgzRjgzRUQ2Q0E0NjkxQkQ3QjBFRTQ1OUIyCis6MTBDNUMwMDA1MzExQjZBRjBDRTFGRTNBMTdDQTlBMTREQzlBODcwNUVDCis6MTBDNUQwMDAzNjhDQTFBRjI4NkE0Rjg5RTU4NzZGMjYwNzcwQTc4RjMxCis6MTBDNUUwMDBGNTdERjA4NzdDRjk1RkZBRkU3NTg3NURCRDBDQzdDRkRFCis6MTBDNUYwMDBFM0YyNTg5NTU1RDIwN0YxRUQ3NUJGNTBERThFOTk4MzYxCis6MTBDNjAwMDBCMEJDNEUyRTk1MTNDOTg1MTM5NkUwODk1ODNEMTFCRkQ1Cis6MTBDNjEwMDBERkNEMEIyNEIzMDA4RUQ3QTBGQkM1QjhEQzMzRjEyQUU1Cis6MTBDNjIwMDAyQ0Y3RDg1NTg3MDVGNDgzOTU4RjQ5QzVGNUU4RkU5QzBFCis6MTBDNjMwMDBENTFBQkZENjZCN0M2QTY1OTdBOEU4QUYzOEE3RURGQjIzCis6MTBDNjQwMDA5ODY5QjJCRjNGMzkxNTBGQUY2RjJBRDdCRTQ4OERERjRCCis6MTBDNjUwMDBFNzRDOEZCRThGRTMzNzQ4RTE0NEZBNTI0Rjc1Nzk5NjI1Cis6MTBDNjYwMDBGN0M2NkRGREUyNDc4N0FGOEU0NzkzREMxMTQwRkQ2QTQ4Cis6MTBDNjcwMDA1MzJBNTk4NUIzMzc5QzRDNTk5QzFFRkVEOUVCMUUzQTYwCis6MTBDNjgwMDBEODI4Q0ZDRkIxQzJEMjQwRUVENzU4NkZGOUFEQjQwRTkzCis6MTBDNjkwMDAxRDlGRjFGNUQ2NTVGMzdENTczM0UyOTVDRTExNjRDRDRDCis6MTBDNkEwMDBERkNGRjEyQjRFMENBQzQ0RjhBNkMwM0UxQUZEMDJBMjFGCis6MTBDNkIwMDAzRkNBM0ExM0NDN0JEMDQ0MjM3RDI1RkI4RDcyRDA1MUU5Cis6MTBDNkMwMDA2MDk0ODM5MkQzMjgwN0NERkU0QTE2NDEzRjJEOENDMzM4Cis6MTBDNkQwMDA4ODFFODMwQ0ZEQjZGODFGRjE5RjNDMTBERjVEMTIxMDIxCis6MTBDNkUwMDA2MkU4NzAyMEZFQzMyMUJFMUEzNjMwQkZGRUEzRkNERDE3Cis6MTBDNkYwMDAzRTI3OURGQUJGNDdFMzZGRTA2ODlFQUFFQzc1QTQ5RkIyCis6MTBDNzAwMDA4QTg5MUEwMTMxRTU4NzdGODE3OTJGMzg2QzI2M0ZDRkRFCis6MTBDNzEwMDBFNTVGNkMzQkI0MDVGREQxMTNBRDMyRkFBMzE5MEIxREQ3Cis6MTBDNzIwMDBGQTM1OTRDRjA5RDhDQTMwQkZFMEQ4Njg4QjBGQ0E4RkNBCis6MTBDNzMwMDA2NDAyMTE3OEIwQkMyQzA1RTVDMDY5MjY0RTQzM0ZERDhDCis6MTBDNzQwMDA2OUY2N0FDQUI4MTgzOUI3NjRCMDg1RkI3RjFBQ0NDN0M2Cis6MTBDNzUwMDAzQjZEMzhCQzRBRTc1M0I3ODc3ODVFNUZEN0JDMTY2MzNBCis6MTBDNzYwMDA3RTJFOUI5MTJFQzEzODczMUYzNEEzRTQ2MzBCOTg3NDAzCis6MTBDNzcwMDBCQzUzODcwM0QwQzE4RjA3Q0JCNDlFNzlBQzcyOTUwQ0E0Cis6MTBDNzgwMDBFM0Q2OUJGOUY5Q0M5MjE3NDc1QjEwMEYwQkM2QzkzOTVBCis6MTBDNzkwMDBBNkEyOUU3OURDM0Q5OEZCMDE0RjAyQkQyOUQ2OUVFRkYzCis6MTBDN0EwMDAwQjlENjEwQkNBRTUxMzdCQzZGREUwMTI4NkZEODQ1NzI1Cis6MTBDN0IwMDA2NUEyNUZEMzA1RjY4OEQyMUJCRUIzMUI4Q0YzMUM2ODQxCis6MTBDN0MwMDAxREYxRjM2NjZDMjVDMUEzQUY3OTQ4M0I4NDQwMjJGRjdECis6MTBDN0QwMDA3OUVENjBDMTgwQzc1QURCQ0ZCNjc1QzIzQzAzQjUxMjk0Cis6MTBDN0UwMDBCMzVGMDY3OTg5OUYxRkE5Qzc5MkMzREI1MTdFOTc1NjE1Cis6MTBDN0YwMDAzRUQxMDk3MDUwNTc1QUU1NUE0ODM3M0E3RUY2MkNENjQyCis6MTBDODAwMDBBRjAyODRFMUY5RDNDRUMxMEFGNzlGREE3RDYxM0M1RkM0Cis6MTBDODEwMDAwMDdERjNERDE5QzlERkJFREZEREZGQTQ3RTVGQzA3RUQyCis6MTBDODIwMDBEMzdBRjdCQkM0RDY2OUMxNzNCNDY1NTJFNTM0NDE0NEM5Cis6MTBDODMwMDBCRjIyQUY2NzM1MDcwMzQzRDE5RkI4QUYyODNBNTQzMUMxCis6MTBDODQwMDBENDZCRjg5QUY1MEUwQkI5NUZBQkRFMzRCMTlGRkVDRTE4Cis6MTBDODUwMDA2OEYyRURCNzNCMUZCNUEwREMzQUZERDRCQkQ3RTNCRTExCis6MTBDODYwMDA2OEQxQUY0Q0NDMDZGNUNFRUM0QzY2NTFCMkZCQzIxNjhCCis6MTBDODcwMDBCNDVGMTdFRTMxMDVDMjk0OEY0RUI4MzEzOTk2QUY2QjY1Cis6MTBDODgwMDBBOUZGNDVDRjI2RDNCRTZBRTE3M0Q2RjA3NDY4QkZGMDI2Cis6MTBDODkwMDA4NTEzNjMxOEM4ODMzMzJCQkIwRjBENDVGODNEMjU5MEQ2Cis6MTBDOEEwMDAxRENERDRDRTMxMzdDMkY3ODUxMkJCQUQyQzgxRERGMTYxCis6MTBDOEIwMDA2NzhEMUY0RUZEQzI1MThFRjQyNkVDMzg3MDJCRjUxQjkwCis6MTBDOEMwMDBGOUExRDkxQUEzQzczQTA2OUIwOTlGNTA4RkZDREJFQTRFCis6MTBDOEQwMDA5MzQyMzg1RkUwRjNCQjYxNzRFQ0ZDNkE3OEJEMjdCOTIyCis6MTBDOEUwMDAzRjc3RTEzRTczRDg4RUYzREJEMTZBMDk0MkJENjUzQkU5Cis6MTBDOEYwMDAzRTIxRkFCRUUyRDk1RDI5MDg4NzY1RkI0QzA2QjlCNjMwCis6MTBDOTAwMDBFOEQ5MkY1NzVEMEM3ODVFNjQ2MkRERDM0OThGN0Y0MTkzCis6MTBDOTEwMDBGOTczMDE1QkI3ODlFNDUwMjA0NTAwQjlCNTk0NDQxNjFBCis6MTBDOTIwMDBENDdCRkU4M0E5N0Y4MUYyOTMxRTEzQjM4MzI4MzhEOTY5Cis6MTBDOTMwMDBGMUJFRTU1Nzk4MEYzQTJCOTkxRkZCMzdGMkUxQjIxRDc0Cis6MTBDOTQwMDAyNzJDMzgyRjU5NjRERDU5QzBFODk3N0QxQUMzOTdBQzVFCis6MTBDOTUwMDA3NzdEQzZCQTJEMjg2Nzk3NDUxQTNGMzEwMUJEMkREQjdCCis6MTBDOTYwMDA3M0ZBMkRBNEJCNjU3MUZDN0MxMkZGOTFEMTVCNUYwQTQ5Cis6MTBDOTcwMDBFRTc4N0RGOURBMDQ4NkU3RjQzQjYwMTMzNEE5NkY3RDI1Cis6MTBDOTgwMDBBOUYzRjdBMjVERTdCNkFBMzBGRUE5RTczRURFQUEwMjQ4Cis6MTBDOTkwMDBDQTE3RkZGN0RGQjdGRTE0Rjc0OTJGRDk2NTk0NEJDQkMxCis6MTBDOUEwMDA5RUZBNTMwQThCODE3Rjk2OUI5RjI3OUQ3OUYyODlDN0I4Cis6MTBDOUIwMDAzNzAxMUNDRUZDRDk0QTUwM0JGM0VCMEY3QzBBQzBGRDdCCis6MTBDOUMwMDBDQ0VFRkY0OEM3RjNBNUJCN0U3REU1MTBBNEIzQkJGNjU0Cis6MTBDOUQwMDA1RTMxQTRCRjdEMDVEMjZERDgxQThCREYzMEY1QUZFQzg4Cis6MTBDOUUwMDA4MzcxODY0MDc2QkY5NkM2RTFFNUQ0RUVDRjJENzg0RUIyCis6MTBDOUYwMDBGNDk5QzBCQTUxRkUyRThEN0M2OTQxRkJFQzUwODA3NUQ0Cis6MTBDQTAwMDAyMzlDNUVERTczRTJEMEJEOTAzRjBENzhCMjI2QzAxMzRBCis6MTBDQTEwMDBBQzdGQTg0ODdBMjUzQTE0RjVDQkQyM0QzNzdFRUZEMkM5Cis6MTBDQTIwMDA2MjRDQ0Q3RTA1RjFDNEJBNDlERUY3QzJFRjFCODBERjUwCis6MTBDQTMwMDBFMjFFRkNDNjk3OUY2MzVGNTgxMEZFQ0I3NjAyM0VDNzhFCis6MTBDQTQwMDAyMDVFMDE5RjYzN0FFM0YzMzRGRTYzNTI2RjdDNUVEMjEzCis6MTBDQTUwMDAwQjlGOEJCNzZEQzJDMjNEODMwOUZGN0RFMTczQzlERUI5Cis6MTBDQTYwMDBFRkY3NkI2N0U5RjI2MTIwMzhDRjE3RjhCQ0FDRUVDMDg2Cis6MTBDQTcwMDBCNTZFRTRCM0U3MUNBQTg3RTMzOTNDMURDQUNFRUMzQTk1Cis6MTBDQTgwMDBFNzQzNjdDODg3RTZFRTVCMTEwRUREQkZCNkNBNzg2RTc2Cis6MTBDQTkwMDBCRkYwRDc2RjEyREY5REQ5RkIwNzBCRTIxRkZFNTI4NDU4Cis6MTBDQUEwMDAwOTkwNjcxN0ZFNUU2NzkwNUZDQTZENzBCNjg0NzU0RjE4Cis6MTBDQUIwMDA3REFCMTg1M0Q2QURGQTA5N0Y5NDNGMDQ3QzQ4RjgwODQzCis6MTBDQUMwMDBERjMwNEQ0MUY5MUI0RUEzNzUyRjBENzNGRTU4MUEzRUYyCis6MTBDQUQwMDA3MDkzMzBBNjM3RENFQkREQTI3NkZFRDM4MzU3NjEyMjVDCis6MTBDQUUwMDBFMkYzRERBOTQ4N0Y3REUxNTM1RkJGOENFQkZGMkU5NDFECis6MTBDQUYwMDAzRjY2RTRERkY4RkE0QjgxNUY3MTdGRDQwQkJGRTEwMzNGCis6MTBDQjAwMDBGRjhFRTk5OTU2QUIyNDgwMkQ3NDA2RUQwNDY3NkZCQzQ3Cis6MTBDQjEwMDBGN0MwOUZFQkU3NkY2QTFGNTdDN0QxODdERTVFODdEM0U5Cis6MTBDQjIwMDA0MEZDM0VEMEZBQkUyOUZDOTZCODE1MDMxREU5NzAzQ0M2Cis6MTBDQjMwMDBGNTQ1NjI3REYwODgyNjNGOTZCMkNBNjk5OUMzN0FFQkMzCis6MTBDQjQwMDAzMzEzMkI1Mzg3MEEzREYzNUQxNTMxOTE5QzNGQjVDM0Q5Cis6MTBDQjUwMDA0NEU3MzNGMUYyNjIyOTlFREIyNjE4RTc0OTM3Qjc2M0QxCis6MTBDQjYwMDA5NkVFM0IzMDA2RTVEQUE5ODNCRkQwRTg5MkQzRkREMjNBCis6MTBDQjcwMDA5REVGNUE1NDREM0Y4NDYzRTU3MzFGRTdDMENGNkJGM0JECis6MTBDQjgwMDA1RUI2M0Y3MTdGQ0I3NjdFOTJCMEJGOTM1MkUwODczODFFCis6MTBDQjkwMDBGRjkzMUQ2NkE2NDIxNzI3MjNBNjg0NzEwQjVCREM2NkY0Cis6MTBDQkEwMDA4M0REQjUyQTc5QzJEMTQxQjgyRjQ4NDk1MjcwRERCNTJECis6MTBDQkIwMDAyQjAzNkZFMkI5QThGQUJBOTlDRUY5OTlFNEZGRDAwQTJCCis6MTBDQkMwMDBFNUI1Qzk0OTBBRkFGMzZBNTNFNjMyMjU0NjhGRDdDNTU3Cis6MTBDQkQwMDBDMTQ5RjI5NEQxRjk5REU0MkUyQkU2N0JCQUIwRTFCQ0I5Cis6MTBDQkUwMDBENzBDMDQxMTNCNkZEMEJCNTlBODk3REUyOUZBQzA4QzMzCis6MTBDQkYwMDBFQkZDNkI5QzFERjk1Nzg5QUQxQTAyRkRGRDU1MTVGQzI4Cis6MTBDQzAwMDAzNTRBQTJGRDgxQjFGRkUwN0QyNkE2QzRGNEJGRDREQTg3Cis6MTBDQzEwMDBGRDBFQ0U4N0ZEQzZDRUQwMkUzM0JENjQxNzUwOUUyQ0EwCis6MTBDQzIwMDBEQjZBQTZGREQ3MzJEODU2MjFEQzNFRDg2MjBGQUI5MDI2Cis6MTBDQzMwMDBERkY4N0NGNUFEQTg5N0ZFQjZENUNBRjA1Q0UyRTVCRDlECis6MTBDQzQwMDAyQkJBRUU0MUI5RjQ4OEMwRDA5RkZFQjc1RjU0N0Y4NkZGCis6MTBDQzUwMDA3QTc5QzE2NjU4MURDODkzNzk4RUVFQzdCMUZEQkM2NzVECis6MTBDQzYwMDA4N0IyNUE2OEZGQjExMDk5ODA5QkQ5QUVCNEU4MDREQzUyCis6MTBDQzcwMDA4Nzc0RURDQUYwQUJENENGOEI0QkIxREYzM0NGM0FBODdBCis6MTBDQzgwMDBERjMzQkY3OTkzQzYzOUYzOUI2NEQyNkJGQUZDQzFERTA0Cis6MTBDQzkwMDA1NjYyRjUzOEQ4REJDQTA1M0UyMDdCM0IyNjBGRTMyQ0Q1Cis6MTBDQ0EwMDBDMjNDQUYyRjdDQTVDOTNDOTQ3RjhCMzAwNUJBNUZCNEUyCis6MTBDQ0IwMDA2RjUwMDBGREJCMzFGNUE4OUY2NUQ2RUU5RkY4NjlGRjY4Cis6MTBDQ0MwMDBBRDY2OEFCNDc3OEE2NjIyM0YyRURBNjExQ0ZGM0ZEQ0FDCis6MTBDQ0QwMDBEQ0FFNUE2NkU5OUVDQkVCODczMjM5REY3NjUwM0I0QkIwCis6MTBDQ0UwMDA5QTQ2QUY1QTc5N0M3QkJEQkU5NDk2NkJBOEE3Qjc1Rjc2Cis6MTBDQ0YwMDA2QTY1OTU4OUY4QzBBNUY1QkI2OEM3OTcyMzhDRkQ3MTU3Cis6MTBDRDAwMDBCQUVEM0QwRUZGN0VCN0MwQzg3RkMyNzZEQjI5RUU2QzYwCis6MTBDRDEwMDBCMTI1M0EzQzE1RjhGNjA1MEI5QjhGRkNCQjM4MjUzQTNDCis6MTBDRDIwMDBEQzA1RTNGRDRBOTM5QjhCOTMyMDBGREYzM0I1Nzk2MERECis6MTBDRDMwMDA3RENDMzM1QkU3MTlDNEVCOTIxN0VENzRBRUIyRTQ4NTlBCis6MTBDRDQwMDAzNzNGNDM3QzlFNDIxODAzQzY0RUE1NzU3Q0Y2NTNBMDIwCis6MTBDRDUwMDA4MzUzNUI0QzRDMDU3QjZEODkzNUVBN0IwNEY1RDQ2RUJGCis6MTBDRDYwMDAyQjZCNDNGRTdFRTkxNUQyNUJBNzlGQjM4QUZEOUQ1M0QzCis6MTBDRDcwMDAyRjg5MDAzNUQ4N0FBRjQzMkQ2NTA1OTU0RThDQjcwOUJDCis6MTBDRDgwMDA4OEFEQjg2RjM4NkMwQUQ3QzBEODU1NTI2MEU1QjNCOEQzCis6MTBDRDkwMDBCRUMzNjZEQTY3OUM5REMzMEE3MDVGNzk5NjY1RkE1NUQzCis6MTBDREEwMDBDMkJGRjJBNjA0RTUyQjVFMzUwQjg5RTI5MENDRTc0MUM5Cis6MTBDREIwMDBBODhGMDMzRTM4N0YyRDUzMjA5NUNFMEZBMzc0ODVBNUYxCis6MTBDREMwMDA3MjA0Q0E1RDkzMEM4QjJCMjQzRjAxRDlFRDY2Qjc5RjhCCis6MTBDREQwMDBDRDgzNzQ0NTJBMEIyMkZDOThGMzlBMEJGQ0Y1N0I0MDFCCis6MTBDREUwMDBFOUYyODc5NTIxRDg2RTUyMUE5NzJCNzNEMjAzNTdBNjcyCis6MTBDREYwMDA5MTdDNzFDQUU0NTdEMkU4NTRERENCRTdGOUI5OTBFNEVECis6MTBDRTAwMDBBRjgxNzlFNTlEQkZGNzM2ODRFRkYyNzcwNTI1RjZGQzEzCis6MTBDRTEwMDAzQzNFQ0VCMzRBNTJERTU0OEE2OUJEMjQ4RkYyRTQyNEVDCis6MTBDRTIwMDA4NjcwM0QyQkYzQjhCRUIzNzM5NDQxQUUxOEI5QkNBNjVGCis6MTBDRTMwMDA1QTI2RjlEMTU4RURBMTc0NzU3NTAxNTNDOEJGRTZBN0ZDCis6MTBDRTQwMDBCQzQ5NUJCRkI1NTBBNTM4MzVFNDY5RkNCMzNBQ0IwMkE5Cis6MTBDRTUwMDA2OEU3RTE5Q0YyMTUzQ0VFMEYxMjFENTkzRDk1RTQ5QkVECis6MTBDRTYwMDBCMjM5MTlFRDYzNEQ0RTk1Q0Q4M0Q0RUNFNEYwMzEzOUYwCis6MTBDRTcwMDBDQjA4M0UxNjJEMkZCNTRDMjc3ODQyN0JGQTdFNzk3QTY3Cis6MTBDRTgwMDA3MDExQzJDMzk2MzVEMjIwOTcyQ0VFQjE4NjdDMkY3OEQ0Cis6MTBDRTkwMDBFOUY4REZGNTdGMDUzNzQ2NzA2QUFDQjY1MUJBQkE3QTYxCis6MTBDRUEwMDAyMkMxQUJCRTNBNDBGOUZGMDdCODNEQzBFMTc2MzFDNkJBCis6MTBDRUIwMDA1QUM0QzBBREQ0OTBFRjEzNkUwRjAzREZCODYzRjkwNjA4Cis6MTBDRUMwMDBFMDg4N0NDMzkyRkNEQjEzQUMzRjNFN0RBODFBMTdDN0Y5Cis6MTBDRUQwMDBEODAzRDUyRDk0RUFERjUzRkJEMERCOUZBNDcxM0JBMDkwCis6MTBDRUUwMDA4QTA1NkJDQzc0QkVDNUZEMkRDQ0FEQjJBQzA5M0RGRTQwCis6MTBDRUYwMDA0REU2NTE5OTgyNzlFNDU1QzRDQkQxMjQ4MkRERjJCNzU1Cis6MTBDRjAwMDBFREU0MzczNkM5NTI1N0FDNUM1QjdFOUQzMjA0RTU5NzQxCis6MTBDRjEwMDBBOUVBNTE3NjYyNzA4QzFGNkQ3QTk5NUQyMUI4RkEwNTg1Cis6MTBDRjIwMDBGNEE3RDY2QTdBQjNGRTAyRkU4QzdDQjBBNjVBQTE3NDJFCis6MTBDRjMwMDBBREM2MEZFQjM1N0VEODgwNzg4NjdDQUQ5RjlGNkYzNjZGCis6MTBDRjQwMDA0RjYzQTQxN0ZGMDVGMjdDMUYxRjY1QjE3MTI2MkU3RjZBCis6MTBDRjUwMDAyNDZBMDY3QzkzOEM1NDI4OEQ1MjlDRUY1MTZCMzgxRkE5Cis6MTBDRjYwMDBFM0E4MEExOUM1RDFCOThFREU0M0ZFNjNDNjIyMUVGNEJBCis6MTBDRjcwMDBBN0I5MzRCOEIxRkRCOUFFOTlDOUI0M0MzM0Q3M0JDQ0VECis6MTBDRjgwMDBDNEQzOTAxOUVERjE3OEI4RDZGQTBGREE3MDdGREREN0Y3Cis6MTBDRjkwMDA3QzRBREU1OTIwRTA3ODlGQ0YyNDM0MzFGNzJEOTFBM0NECis6MTBDRkEwMDAxNUIwMEU2N0IzODNGNDZBQkFCRjMyMUJGRDdCRUM5OEYxCis6MTBDRkIwMDA5NUU4RDNFOTBGMEFGMzYyRjA5N0RFODc1RDc3NjdGQUE5Cis6MTBDRkMwMDBENTdGNDVGQUVCNDQ1OTA2N0FFODgxOTY2MTc2ODRGMzc5Cis6MTBDRkQwMDAxQTczQzQ4M0YyNkU4RDhCRUIwRkE1MUNBMEYwREQ5RTNGCis6MTBDRkUwMDA3NkFGNjg3MjMwQTVEOEM4RUZCQTdDOTUyNzhGMzVEMDU4Cis6MTBDRkYwMDBBRjJFNTc1M0E3MThFOTVDOTdBQkNGQTc3MTdGQzU5QzlECis6MTBEMDAwMDBGNEIyNEZEMjIwMUQ3QzdFMzNGMTYxM0NEREU3QzkxN0JECis6MTBEMDEwMDA5NzA3RERBODA3OThCRjA5RUQzNUI0MTlEMThFN0I1NzY2Cis6MTBEMDIwMDAwODczN0FFN0ZFQTlCMzlEMzk2RDY4RTdDMEFFODBFNDY2Cis6MTBEMDMwMDA4QThBRkM0MDc4RUE3RUY5MkI2OEI3NEI5MzBGMkI2REY4Cis6MTBEMDQwMDAzMzZDQjhERTA2QTAyMzg2RTc3QTQwM0YwOEUwNzU0MERGCis6MTBEMDUwMDAzRjk4ODY4MDdFMzg3RjRDQTQ1NEE3NEY0RjdBOEUyMTBDCis6MTBEMDYwMDAyRUQwOTQ3NzQ4RTRGMUYyMjJGOTlFMjVEOERGMzk2MTc5Cis6MTBEMDcwMDAzQ0U5QzAyNDFCREE3QjkyRDk3RjE4RTU1NDc3QjIxOEJCCis6MTBEMDgwMDA0MUJENTlFRjlDNjEwQkEwRkZDNjU1NEM3OEZGMkNCOUYwCis6MTBEMDkwMDAyMkJCQkYzODI3QjA1QkM4NkYyQjNCRkRFQzM4OEVDMzdCCis6MTBEMEEwMDAxOEY5NkQ0REYyNTg4NkZCQzQ1RENFOEUyNERDQjc1ODVFCis6MTBEMEIwMDBEMzQ1QzNCQ0U2QTQwN0JERTkzMUY5RDEzOEJBODYyRjAwCis6MTBEMEMwMDBFQzc2OTdENjRGRkM3ODE3QTU2QjdFQ0IyQzk1MDU2MjM2Cis6MTBEMEQwMDBDRTJEQUE3NEZBNTY1NDM2MjU4NkJGNTdFNjRGNjUxOEVBCis6MTBEMEUwMDA3RjExQ0ZENzdEQ0FBREVEREY0RTZFRDU2Njg3MDk1RjY0Cis6MTBEMEYwMDBFNjc4NzlFMTA2MzlFRUE0NTQxNTY1OUNCNzc3Q0Q4RkIzCis6MTBEMTAwMDA4QTg4QUUyRTREQzdGREExQjNFRDgyMUQ3Mjc5NkUwMkU1Cis6MTBEMTEwMDBGQTNBM0E3MjA4QzU2NzVFRDAzM0IwNkIyRTI0M0RCMzNECis6MTBEMTIwMDA3MTIyQjc0NzM0M0RDM0Y1RDNEOTY2MDdFOUE3QjM3Mzc2Cis6MTBEMTMwMDAyQTI5OUVFQTZDRjMxMDA1RTlFRUMwQkE0QkM2MjAzQ0UyCis6MTBEMTQwMDBFNjlFNkY2NDBBQ0M2RkRFRjk0OTk0Q0U2RkY5MzlBNTdCCis6MTBEMTUwMDAxNTJEQUQ0MEU0OENENUFDOURCNzZFMjZCNDNCRjFCMDM3Cis6MTBEMTYwMDA4OUUyODNCQUMyRTNDRTU0NDFCRUFCRDlDQTRDMzA0RTM5Cis6MTBEMTcwMDBEN0U2M0JCM0QxMkZERTA1RTNBMDdERDVCNTM5OUZFOEQ3Cis6MTBEMTgwMDBBQjBCRTA0NkY5MDY2MzdEOEMwQjM2MDE1RTJBMThDN0FGCis6MTBEMTkwMDAwQkZDMkY4MEY1RTdCRTYyNkE0RDY0Mjc1NUFDQjcwNkRECis6MTBEMUEwMDAxMjlERUY1QzI4NkY0OTZDQjdENUUyM0YzM0YwN0Y5NTU1Cis6MTBEMUIwMDAyMzEwNUUyNUVGREM5MzhERUJENUY5N0Y0NTJBQzgyMzNDCis6MTBEMUMwMDA4NEQ3M0I1Njk2QzgxRjdGNzlGQTk1NzM5MTJFMkY0RkJGCis6MTBEMUQwMDAwRjJDRTU3ODQ5NERFODVGRUJBMTdGM0VFRTA5MTFFQzlECis6MTBEMUUwMDA1QkMyNEIzMEU1MDY4MzlGOTVGQjMxNEY2OEY2MkZCMzRBCis6MTBEMUYwMDBGNTUxOUVBMkI1OTcxMzk3MkY2OUZFRjhEMEZEMENFRjVECis6MTBEMjAwMDAyOTU0OTYyMUQxRUJGQjY5MTM4M0ZEQjQ4MEZCREYxQjBFCis6MTBEMjEwMDAyOEZFNTk5RjBGRDhBOTQ0QzcwQ0YwODFGMjY1OEVFNjBECis6MTBEMjIwMDBFRjAxQjg3RkNGMDJERjRGQkM2MjEyOTAzRTdBRTgyOTRGCis6MTBEMjMwMDA5ODgyNzY4QkIwRTZCQTk1QkJBMEZDRUY4N0Y5RkU2Q0JFCis6MTBEMjQwMDBDMUY5MEQyNEVGODQzNUEzMzc0RTgyRUY3N0JFNjIyNkY1Cis6MTBEMjUwMDAzOTVGRDM3NEM5RkE1QjAwQkY5RkJFNjZBMkZDRkNGM0MyCis6MTBEMjYwMDA3NkFBRjdEMUZERkU4REI3NDBCREVFREY5OUM5MEVGRjVFCis6MTBEMjcwMDBGNEYwOTUxNEZGRjg5MUQ5RTgyNzk4MzA4NEYzRjFGMzhFCis6MTBEMjgwMDAxQTNGQ0YzREJGODZFQzBGQkQ3QzZFQzM2QzhCNDI3NEUyCis6MTBEMjkwMDBCQThFQkVDRkM1NDM5QjRDOUNGRkY3RkZBRDQ0QzJGMzkzCis6MTBEMkEwMDAxQzQ2RjcxNDlFN0ZFODg2NkI1NzkyNUUxQjRCRjZGRTdBCis6MTBEMkIwMDBCQ0I1NTY3RkEyNzhEMEU3RDMxNTgzRkM5OUQ3RDk0QzVCCis6MTBEMkMwMDBGRDMyQjA4QkRDRTk1QTdGMzE3MjY0REVGOUMxQzQwN0VDCis6MTBEMkQwMDA0QzU2MTlDNjE5Q0ZENUU0Qzk4NUY5NkQzNjFCRTRDOTdBCis6MTBEMkUwMDA0N0Y2QzQ3RTkwOTdEM0Y5M0U2QUVFRjk0Qjg4QkY3QTMxCis6MTBEMkYwMDBBRkVGMzJGQTNFNTcxRkI3OTNGMzYzQ0Y3QTM2NEU0QUY5Cis6MTBEMzAwMDBCNDlFOUU3NTRDQTZGQTFGQjkxMjhGN0Y1MjgzNkY1NzM5Cis6MTBEMzEwMDBGNTdDMTYwMEI5NTQ2MTg1N0E0RTFDRkZDRTU1MTM4QkVGCis6MTBEMzIwMDA3MTFEQUU1NDIxNjY1REYzNUExNkIxNDBDQ0JBRTY2RDVDCis6MTBEMzMwMDA5RTY1QTk4OEU5QjcwNzBGQ0IwQzc4Mzg5OUJFOTBGMEE1Cis6MTBEMzQwMDA3MDY3N0FEOTExRTQ5QjhBMzU5NzhFNDE3QTlDRDdEMjNGCis6MTBEMzUwMDA0ODcwM0U2MUY2RkI1MEJFN0VEMDcyNjc0QUEyMzhEODU0Cis6MTBEMzYwMDA5M0YxRjg2OUQxRjAwM0Y2NkU3MTBDN0U3NEJDQzRCNzBBCis6MTBEMzcwMDBFRjdBN0JERTY3MThEN0Q0RjUzMDM3NkVGQTgyNTcyRkY1Cis6MTBEMzgwMDBCQ0U1MjQ4NjlCMzQ4NEUzQUQwQkY0NkQ5MEUwQTZCQzMxCis6MTBEMzkwMDA3MDE0RTk3QUFEQzM4Rjc0REQzN0ZDNDZCMTYwN0ZGMDVECis6MTBEM0EwMDBFQkMzN0UwNTdCRTc0Qjk0M0IxMkZBNjhGMTFDQjI4NTE4Cis6MTBEM0IwMDBEM0MxNDA3MEVCMTk1N0EzODM5MkM0RUIxOTdCNjEzRDM1Cis6MTBEM0MwMDA1NTRDMDU4NjNENkUxOTg4MEU3RUNBNTQ1QjNGRUJCOEZFCis6MTBEM0QwMDA0MDA3M0YzN0QwQzFEODhENEREN0FFODQ3QTFGQTJCRDRDCis6MTBEM0UwMDAzMkEyMzdGRThGNUJENDk0OEJGMURDQTdDOTQ0RTc0QUE1Cis6MTBEM0YwMDBDNzkzRDRGNDlCNzlCRTA4RTVGMUYxOTREMEY1Nzg0RTRCCis6MTBENDAwMDBBM0U3MTc2Q0NGNEY5OTE1MzNFRTA3MEQwMDg3MDRGMDkzCis6MTBENDEwMDAxQjNCNDQzMUY4QTEyRUQwNEY5RUNBMEEyN0ZDRjNFOEVCCis6MTBENDIwMDBFNzg0MzlGMTNEQkVDQkQzNEIyNjBDNDEzQjI1OTREODQ0Cis6MTBENDMwMDA1RkFCQTdCQUJDMzYwRDcyNUVEODY3QTJGRTNDRUVDQ0RECis6MTBENDQwMDBGRDJDMENBNUY1RTlDMUQyMjFFMzMxN0VGNDI3QjdBMTZCCis6MTBENDUwMDAzQzM4N0U1QzIwN0Q1QkYzRjY4QTExQThEN0UyRUQwNEIwCis6MTBENDYwMDBEODdGMzZFMEI5RTcwQTUzNzI4OEVDNTBBOTcyMUI5RDQ5Cis6MTBENDcwMDA4M0FBMTJEQjVFOENGQjk0Q0E0REVGRTVBM0RGQjA4QTcyCis6MTBENDgwMDA1MkE2RDlBMTJCNEMyM0ZENERFNDk3QUQ3QzAyQ0Y0OTg4Cis6MTBENDkwMDA4MTQ4NjRBQzJGQjE0QTNBMzcwNTQxNTg4NkY5OEQwRTYwCis6MTBENEEwMDA3RUVFNUEyNUQ5NjQ2QjRDNUNDMjYyNEQ5RUQ3NTc5NzZECis6MTBENEIwMDBGREZDM0RGNDQzREI1NDI2QTc2MzdCMkUzNzI1QzZFREU4Cis6MTBENEMwMDBBRkZGQzQ3OUM2RTg3QjhCMzkyOEZCNzExRjJBQjAzMkM1Cis6MTBENEQwMDBFNDBCQjMxNEE0N0I0RTY2OEZCQjQ4OERDMUMzQzIyMTNECis6MTBENEUwMDBEQzdFQjRCN0I3MzdFNDQwN0JGQkVEQkY5MzUxMEY1QUY2Cis6MTBENEYwMDA2MTFDRjRCM0Q5QjJBNEIzQjFGRTZBQjMzQjQyRjc5ODRFCis6MTBENTAwMDA1ODVFQ0M3N0IwQUI5Qzg1OTAzN0Y4MDE2MEJFRkREOEYzCis6MTBENTEwMDA4NUJGMTJGQzlFQ0Y5MDFFNkIzODNDMjYyMjg4MjBGREQyCis6MTBENTIwMDBGMzlDNjFBRDI4OTcyNzRBNzUyNjhDM0I5QTc5N0IzRTAwCis6MTBENTMwMDBFNTM3Q0VGRTZBNzg2NzAyN0E5OEI5N0Y3NTA3REEzM0U1Cis6MTBENTQwMDAzM0Y3NjdDQ0M2RjM4Mzk5Q0VFMUVGNjMwQURCMDU1QjYzCis6MTBENTUwMDAxMkI0N0Y1OTYwOTEyNjQ4QTdEODFFQTVCOEM2OTczNTQyCis6MTBENTYwMDBGRjU4M0JFNjYzRjQ2MkJCNDY2RjYwRTc0Q0RCMERFOUI2Cis6MTBENTcwMDA0QzVCQzg3QzQ3NjE4RjNGMkQ3RURDMEQxQURGQjc5QjZCCis6MTBENTgwMDAyMzY5MjM5MTBFNjAxQzVDQzc4RkY3ODdCRjBGQUE5RjhBCis6MTBENTkwMDBERDEyMDk1RjM3MUFGMDczMkJFQjM2MjMxQzgzNENBNjgwCis6MTBENUEwMDA3MzBGRERBRjVCQzFGQzVBOUVEMUZFRjQyRjhCQ0Q2REE2Cis6MTBENUIwMDA0ODI3RjFGREREMTJFNUZERkRCODFERkE4M0Y0RDZDMzYxCis6MTBENUMwMDBEREZGOEE2QTM5MTg5MUE3M0E1ODRDN0ZGQkZDODcxQzBCCis6MTBENUQwMDBBQzc3N0ZGMTcwRjY0QjM2OTMxQTAzNTc0MDkxMTgwQkQ2Cis6MTBENUUwMDBGNzVFRjAxRDU0N0UwRDFCRDMzNzlGRjVDMDlCQ0YyM0Y0Cis6MTBENUYwMDAxRTFGOUY2MjExRjBFOTIzNDMwMkJCOTA2RkVGMUQxMkMzCis6MTBENjAwMDA3ODA2RDNDNUI2NkU5RjA0NzQ3M0M0MUQ3QzBFRjM0QkFECis6MTBENjEwMDA0REMxRUM3NDgwQzc2OTZGNzA0NDFBQzJBNTIzRjFGOTNCCis6MTBENjIwMDA2QjNDN0ZFNzk1OUZERTgyN0M3MzZCOERDNDEwQ0ZBQjI0Cis6MTBENjMwMDBGNjdFQjAwNUY5RjJCNDE5RjgwOEY2MDMyRkRGRjM0MUNFCis6MTBENjQwMDAzMkQyQ0QxMjYwQzA1ODc5RjI0RTU1M0VEOTRGNjdGN0FECis6MTBENjUwMDA4Q0U4RjdCRUM5M0I5QUJGRTQ1NThENEZGNDc1REU4NjYyCis6MTBENjYwMDAwQzA4RTNEREI2Qzc0MUZCOTlEQkFBNEMxN0Y2NTk0ODE1Cis6MTBENjcwMDBFRkI3NTVGMUY4MTAyNjc1OENCOUM5NjA3N0Q2NjlFNzEwCis6MTBENjgwMDA2Q0JERkJDMTdENDQ3QzNGNURENUMxNkRDNEY3NTI3MDVDCis6MTBENjkwMDAwMkRBREQyN0FBRTc2RjQzRjkxMjNGNEZDNTEzN0M3QkZGCis6MTBENkEwMDAwOEU5Qjc1OTg2QjhEQjM5Q0QwQkI2QzVGMkExNUVCRjI0Cis6MTBENkIwMDBCNjBGRjlCQTdGQjhCNjRFMUIxRjhGMjlERjI5NzE0RUZFCis6MTBENkMwMDBBMDdCOTlGNDY3OEZEQURFMTU2MkU4NjFBMEYxNThERTdECis6MTBENkQwMDA5NEMwMDVCOTQwRjdFNTQ1RTY0Q0VGREQ1RjdDM0RCRDA0Cis6MTBENkUwMDA3RjRGRDUxNUVDQzQzODVDNUZFMERDOTBGMTAzQ0Y5RjMxCis6MTBENkYwMDA3OTM0NzlBNkI1RDNCRkRCODMyMTg2NzZBMUZEOEI0MTMyCis6MTBENzAwMDA2NDI3RUMxRkNFRkQwRjlGNkE3NjAxNzNDMjdBOTFDMTI4Cis6MTBENzEwMDA0MjFCMDNGRjFGRUI4NTgxRTk1RUE2N0RCMzM1NjE1QzhCCis6MTBENzIwMDA1MTlBNDdFMjc0MTMzOTU0NjI0QjMwQkY1RUZENDUyNTcwCis6MTBENzMwMDBGNjc1RUFFRDFGQ0VBODVGNzQ5MzkxQkY2Qjc4MTJFRDdBCis6MTBENzQwMDA2QjJBQUE2QTY5OUZERDA4RjIwM0Y1NDFGQzdDOEUzN0RCCis6MTBENzUwMDAzREEyQTAxRUIwNUI0MjBBRkE0NTFCODdBN0U3QUM4NDM2Cis6MTBENzYwMDA3NjIwRDVDOEVGNjM0RjBBMjk1MkVDNzdDRDFGNjQ1RjRFCis6MTBENzcwMDAxOTUyNzA3RkRCOTg5RjQ5REZGNUZFMUEwNTJFNjc3NUY5Cis6MTBENzgwMDBCRTY4ODQ3RERGNzNFNDE3RjM3QjY2NjA1Q0U5MUJFMUIwCis6MTBENzkwMDA2OUM5RDBBRTZEMTU4QjlBN0M4QzFERjQ2NThFQzI3REU3Cis6MTBEN0EwMDA2RUE4REU0MkU3N0I4RDA1NjJDNjFDQzhBNzc4NkRFNEQzCis6MTBEN0IwMDAxRjZCNzU0NTY3RTIzRDVBNTU5MDQ4QkY4NjVDQ0FENUQ4Cis6MTBEN0MwMDBDOUU4REY1RDM5QTQwM0U1REZDMTNCMkNCNERFMzU5MzQ2Cis6MTBEN0QwMDA0NERBOEY1OTJGN0UyRjc0MDVGNjdGMTdGM0EzNUU2RDAxCis6MTBEN0UwMDAzQkZGN0M4QjEzRTVGMDUxRDhDRkEyREYxMDNCMDU3OUNFCis6MTBEN0YwMDBENDM2RURBQzFERjc3M0E5MTg1NzA3NzRCM0Q5MUNBMTIzCis6MTBEODAwMDA3OTZEQUFCMTUyQkY5QjVBMkRFNTg5RjBGNzdFODY0NDA3Cis6MTBEODEwMDBGNUMzNDIyN0M1MDcwRjY2MTEzQkMyRjU4MTY5MzMzNjUwCis6MTBEODIwMDBFNjQxQkI5QzNDMjZFMzdFN0U0REUxNTk2REJGMTkzMDNECis6MTBEODMwMDBGMUYzMjhERDhGQzhFQ0RBNzk5NjREM0JBN0IyQzVDNjY3Cis6MTBEODQwMDAxNzNFMTJEQTQzRkU0M0M3RjQwODRGQTc4OUU0N0Y4RUUwCis6MTBEODUwMDA5RkM3NTIwRkY3RTMzOTI2Nzc0QzQzM0RFMTI4MTY5OUNECis6MTBEODYwMDA4MEZFQ0QzQzI2RTBCQUU0Njk2RDc0OEYzOUE3ODBGNTVGCis6MTBEODcwMDBEMTlFQUY1QjBFNDBGQjYyREUxRTdENDJGMkQ3NkMzRjU1Cis6MTBEODgwMDBEN0MzRTMwQ0Q3QTIxRjBBQ0FDMzY2QkY3MDM1Q0MyMzI3Cis6MTBEODkwMDA3QzlEMkNBODRBNEZCRDZBMEZEN0FGREJBMEZGMjhDOURCCis6MTBEOEEwMDBEMTMwQURDQjU3MTA4OTIyQkRGOTE2OEI4NEE3QjUxM0EzCis6MTBEOEIwMDA4RkQzQjlDMDAzQzVCQTFGRDU0RkYzRDg1QzczRTQwMDRBCis6MTBEOEMwMDBEQTVGOUJFRjY2NjQyNzZENDYxOTBBRUQzNjVGQzdDMkMzCis6MTBEOEQwMDBGQzNDODk2NUEyN0NEQkI0QzA3MjJEOURFNzE3MDJGQzdECis6MTBEOEUwMDAwNTRBMTNDRUZCNDcxOTM2NUFCN0VGQkUwN0EyNzg0RjQ5Cis6MTBEOEYwMDAzRkM5Q0ZFRkRGNDI5QUIwN0U2RDg2ODlFNkJGQzkxQzczCis6MTBEOTAwMDBDRTQwRkY0ODVGNzQzMTQzQzM4N0FGNEFCM0FCNThDOEJBCis6MTBEOTEwMDA4Mzc4NURBN0MxODdERDM0OTZGQjE3QTQ4MDEyMUJDN0VGCis6MTBEOTIwMDBENUEzNEZCODFGMDNENjQ3NzFBRDgzRUIyQ0E0OEZDNDhBCis6MTBEOTMwMDBFOUQxOTlCOEFFRDQwMjBCQkIyQTA3Rjk4QkMzNEQxREIwCis6MTBEOTQwMDAyREYyQjgzMzE2NkU0MUZFNkNCRDI4OURFMjQ5NTc4QjBGCis6MTBEOTUwMDA2MTBGREQxMzJGQjVEMDc5RjJDMTg5RTJDQ0Y5NTBCRTQ5Cis6MTBEOTYwMDBCRUNFNDI3RTA4QzgxM0JGODQwMkI5QURDODZGOEVDOTRGCis6MTBEOTcwMDBBNUU1RjMyMUJGNDFCNkM4MDhERkRBNDJEOThFNzQ1QzUxCis6MTBEOTgwMDAxQjEwNjUwMUYyRUJDQUY0N0IxMjhDREUzMTI4MzI5OTUwCis6MTBEOTkwMDBFQzA1NTBCRTJENDM0NDFGMkREQjI2MDhDNEVGRjU4MTU2Cis6MTBEOUEwMDBEMkQwMzBGODVFMkZCQjg1NTgzRkMwNUUwREZGOEJCMkUyCis6MTBEOUIwMDBDQkY2N0E5MDZGMDIwRjg0ODYyOTFDOTdEMjA0MjIzMTBECis6MTBEOUMwMDBGQTRCNjZEMUY5MTg3M0QzNUFGRkY4NTFCQTBGNTU2NDYwCis6MTBEOUQwMDBBM0ZCQjNERUJCNDJFNTc0REZGMTIyOEI4Mjc4NkQzQkEzCis6MTBEOUUwMDAzRjc4MTRBREFGQ0VBMjIwM0Y2RjEwQzI1NzIzREY2RjM4Cis6MTBEOUYwMDBCRUUzOTA4QTdFNzVGQkZCNEU4QzFENjZDRUNFNEZBQTkxCis6MTBEQTAwMDAzMTdFQ0M1OTZDODkzQkM3NjIyMkNBNzE3RDVDRTcxQkIxCis6MTBEQTEwMDA1MUEyQTc0RTIxRjhDNzY0RjJGRjE0MzYxNUI4Mjk5RTBCCis6MTBEQTIwMDA3OTAyQzI3M0REQzU2RjE1Q0M0RDQwMTdEMERFOTkzRTJCCis6MTBEQTMwMDAxNkVENjUzMTNBNjEwQ0NBMjlBRUM3OTgyNDY3QzRFMjc1Cis6MTBEQTQwMDA3NzgzMzdGM0NGRTg2N0RBNUEwMkYzQzdGMUFBQkE2RUUxCis6MTBEQTUwMDBBMTc5MDU4RUZDMTRFRDJBRTdCMThGQkU0QzNDQ0ZEN0RGCis6MTBEQTYwMDA0OThGMjQxRjczNDRDNTMxOTgyRTk5NEVGNjU5NkMzRDQ5Cis6MTBEQTcwMDA5MEZCOEREOTgxQkY3QTAwQkVCQjZBQjhEQzZGQkU5REJBCis6MTBEQTgwMDBEMUJCMTNGODU3MTAwM0RGRTY0MjkwRDJGNDAwMDE0MEY3Cis6MTBEQTkwMDAxRUVCMTVDQUU0NDc1RjJEMkE5MTI4QzI3MzhDOERFOENFCis6MTBEQUEwMDA2OTA4MEI5MjVDOEI1RkFGRTM1OEUzMUQxODc3RTRGMEQ1Cis6MTBEQUIwMDAxQkU3Nzk1NkMzMkZGRTQ5RTk3NDVFODE5NjI4QjM2NDRCCis6MTBEQUMwMDBDQ0IxQTNGQ0RCM0Q1NkM5QzBGREY2MDNBRUM0N0FGRTYzCis6MTBEQUQwMDA0RjE5N0M1RkI0NEI0ODZDOUZGRjJEQzNDRUZCMDc1OTk5Cis6MTBEQUUwMDAxOTlENDBBODYyMTRENzA3NzkzMTlEQ0U2REM4Qzk2REM0Cis6MTBEQUYwMDAxNUI5NUM2MEQ3MzBEMjdCMjk0NTlENzY3RkNDNzg0RkI1Cis6MTBEQjAwMDA2QkUzRDAxRkY0MzM0ODZCQzdFNEVFNjgwREFDQkYxNTcwCis6MTBEQjEwMDBBODE2RUZCNUE1NzgzOTFDOUQ2QTBGMUNCMUJFQUNBRDM3Cis6MTBEQjIwMDAwQkY4QTA2NjQ0MzEwMjUxQTZGQUFDQ0M0MkU3MjIyMEExCis6MTBEQjMwMDAwREQ1QUZDNDFFMzgyNDZCRjUzNzREOTQwNDFCQ0MyQjg4Cis6MTBEQjQwMDAxNzgwMjE0MDdERDczNDhCRTExQzQ1QUUzQkEyNjJGOUEyCis6MTBEQjUwMDA0RjRENEM0OTlERDgzM0ZFOTYyMjE2NUUwOUUzMEYwQUJECis6MTBEQjYwMDAxOEUxOUQ3Q0Q3MEIyQkQwMkU4RkE3MDM5Q0MxODU3RUZGCis6MTBEQjcwMDAzMTU0N0M4RUIxNURGQTJEQkRGODgwRTA0OUYzMDREMEJDCis6MTBEQjgwMDAzNEJGQzFEQTJDMDA5NEU2MUQ5MjFFMUY0QkYyNzdCQzA1Cis6MTBEQjkwMDBBOTQzNDU3RjI4MDYyNEVEODVGOThGN0NGMjhEQzA0RTgwCis6MTBEQkEwMDBDODM3MDczOTlGMjUxN0JDQjAwMkU5RDI5MUM5RjFGNEYzCis6MTBEQkIwMDA0N0Y0MkQ0M0ZBMDg5M0ZGOEU3MTNCNkE5NUE4MjAzRUU3Cis6MTBEQkMwMDBCNjQ2NzM0OThGMzczMkE5MENGMUQ0NTg3OTQ0NDRCOTE5Cis6MTBEQkQwMDBCRTY2MEZGMzBCMDJEMkZGN0Y1QjYzRTc3NzUzNDYwRUZGCis6MTBEQkUwMDBDN0JCQTQ5MEZDOTM3Q0ZDRkVFODlBNDJEMTgxRjJGNTdECis6MTBEQkYwMDBFMDFEMkY5MERFREI3MjQwNjRDOEZGQTVCRjNERjZCMDhDCis6MTBEQzAwMDAwM0U5RkFDRjU2Q0EzN0JGNTI0OTcyRTMyN0QwNEU0REM3Cis6MTBEQzEwMDBFMDNGMUY0ODJGQzdEN0NGNUJEMjI2RTBGOTQ0RjZGQzgwCis6MTBEQzIwMDBDODJCQzM1MTNFODcyNEZGNTU4ODhGRjkxRDAxODQ5MzZCCis6MTBEQzMwMDA1MkNDQ0ZEOTlDRDNBM0Y0NEU4ODgyNUEwRDZDNTIyNTc2Cis6MTBEQzQwMDBBNEE1Q0RCQzlDREQ5NDRBRkJBOEQxRDZDRTg2NkI2MDQyCis6MTBEQzUwMDA3RThGM0MyOTMxRDQ5NzI2NkIyNDYzMUVGNDZCN0FEMUQ2Cis6MTBEQzYwMDA4OTlBQTBEN0ZFRTg5MUU5RDEwQzk0RTM0OTk1MTQwNjZFCis6MTBEQzcwMDBERDZCN0U2RjY3NzAzRUY0NEQ1NzVFMUQwRUZEQkEyNjVDCis6MTBEQzgwMDA3MzU4REE0MzQzMEVBMEJDNDQ5QjE5RUY1NTM4NTRBRTg5Cis6MTBEQzkwMDBFN0Q2NDlFMTAwQzY3OUFGQkIyQjY4QzFGMTk5QjY3RkUxCis6MTBEQ0EwMDA2OTVDNTJGMTM4QzJGOTg0QTZGNzU4RTU3QzdBQUZDNEIyCis6MTBEQ0IwMDBBN0YxOEJBMzhBOTUyNERBNjczREUwNDlFMkYxMkRGN0JECis6MTBEQ0MwMDA4QjA3OTAzRjdDMDE0NkZBNDNBRThBNDQ0NzY4N0ExOTM1Cis6MTBEQ0QwMDAyNzJFREZGNzVDMjNFQTE3RTc2MjkxRDZCMTRFRUFBODU4Cis6MTBEQ0UwMDBDMTc3MjVENkREQzVFNDFBQTU3NzdGRkY2OEZCRTUxOTY2Cis6MTBEQ0YwMDA1NjdFMkU4QTM4NEVFQjU5MDdCOUU0NDBCRUY5RTYyNzI2Cis6MTBERDAwMDA1RTQ3MDhDNzFEREZCMzhFMjQ3RDFEMDU5RDk0RDdFN0IwCis6MTBERDEwMDBCMTJEMTBGOTVBRjNEOEEwQUQ2MzREMDY3RkE3Qzg1MUI1Cis6MTBERDIwMDBEODQ5RUZCM0M0Q0JGQjk1OEU3N0U4RkQ5ODMwRDhFQTlECis6MTBERDMwMDAyNkJBOEYxNkI5MDZGM0NBQjMyMkUzRjdCNThDRkNERDE5Cis6MTBERDQwMDAyQkFGRDE1NUZDNzc4NUM1OEM5MzgzNzRDN0YxMEM3NEM4Cis6MTBERDUwMDBBN0Q5NEZDMDc3MzYxNDAxQTJGMjE1RjkzMTQyRkM5REM0Cis6MTBERDYwMDA5QzM4N0FGQ0E3Q0JDNUQ4Nzk0M0ZGQzkwRDRDQTBCODI1Cis6MTBERDcwMDBCOEM1NEMyOUNERTgyRDE3OTkyNjE3NkQ0QzhEQTJGQ0ZFCis6MTBERDgwMDBGQkJGOTY4QjIwMDc0OTJFMzZDMzRBMDdDMzRFMjVCOUUxCis6MTBERDkwMDBCREU5MEVENEUzQkEzQzFDOEYzOEMxNzdBMjU0RjM3NUE5Cis6MTBEREEwMDBBNTg1QjQyRkEyN0NEMUMzQUYzNkQzN0I0M0EyNzZERTQ4Cis6MTBEREIwMDBBNUMxMDVERDUwMDg5N0NGM0Q4QTQxOUYzRTg0RkY4MDc1Cis6MTBEREMwMDA3NUVDNkU0RkJEQjYxMEM2REI1ODlFNUI4NEZCMEI3QkJCCis6MTBEREQwMDBFODQ1QjIwRjdDODUzQzdFQzU1N0M1Q0ZDRjFENzk3MzEyCis6MTBEREUwMDAxRjhGQkQxN0I3MzBDMzQyRjRCNzUwQTdCRkFBOTAwNzIzCis6MTBEREYwMDBDNzU5ODdGREEyN0NDRUIzOTBCRTdDODQ0NUI4M0VENDgzCis6MTBERTAwMDBFQ0QzMTY4RjE2NDdBQ0QxNTUzQzlGQzRDQkE3NzFCRjNFCis6MTBERTEwMDA3Mzk3QTI3Q0NGMTBBQzMyRUVFNzUwM0YxRjRDMzdFQTJECis6MTBERTIwMDA2QkE0MTc1RDVGQjc3NEFDNzRBMTNGMkM0N0YzRjdFN0ExCis6MTBERTMwMDBEODhDNzEwRTQ1OTk1QzVGN0ZBNUY5MDE1NjhCOTVCNDFFCis6MTBERTQwMDBERjU0NEI0NURBQzdFOUY0Nzc0MThGQzdDMTMxMUU3RUY1Cis6MTBERTUwMDA0OEE4QUIyNjUwN0MwQ0U1NTM0QUJBMTlGMkVGNTYyMDdECis6MTBERTYwMDBEOTBENTA2NkNCNTAzNEZCNDAyNjM4QjdGRTU4MUM4QjdBCis6MTBERTcwMDBGMjcyNzc3Qjg1MURGREVCODJDRjc2MzVFRTBGRDcwQkU3Cis6MTBERTgwMDAyQzhBNzI3MzdEQzlFQjE0NTdEMjU0MDUzREMzQTI5Q0YyCis6MTBERTkwMDAwNUUyMkNDQjk4REU3ODA2M0VBNkZEQUE0M0I1NzZBMDE3Cis6MTBERUEwMDA1RjJCMTI2REEzQjg4NUE2RjBBMTk5OENEQkIxMENFM0IyCis6MTBERUIwMDA1MjlBMEE1NjY2MkU0NEY5NUU1MDU2OENGODZEQURCN0VDCis6MTBERUMwMDA1MERDOEM1Q0MwMTJGQTExREVEN0Y2MzFERjU0OEYzOThBCis6MTBERUQwMDBGNEZERTVFMkM0RkJDQTZCMzJGOUZFMzYyMjgxQTg4MjZBCis6MTBERUUwMDBGOTY0MTU4ODdFRTRGRkFDM0E0QkMyNzk1Q0FBRTEyOTVCCis6MTBERUYwMDAyRDkzREYwRjZCQUQzRjk0NDFFRjYzODk5NTYxRDYxRjgyCis6MTBERjAwMDBCRTYwRkEyQkQzNjNGMDMxQTkwRjdDNzg3NDdDNDgzQTU5Cis6MTBERjEwMDAzRTVDQjM4ODBGM0IzQjQ0MkU2RjQ5QUZBRDYzRjJDREZGCis6MTBERjIwMDBBODFGRDU0QTBCRDlCMThENjZCRTJGNkYyQkQ0Rjg0MkVFCis6MTBERjMwMDBCNkI1MjJCMTdENTNCQTRFNTkyMkQyM0QxQ0VGNDQ5MTYxCis6MTBERjQwMDBGNjg5OEVDNUNGNTE1Q0QzMjNBQ0ZCMTU5NDc3ODA2M0UzCis6MTBERjUwMDAxQTJGQkU3RDc5QTZBOEMxNTExMUZDQjQ5RkU2NzgwNEEyCis6MTBERjYwMDBCQ0QyN0MzNkU3QTdCN0M2RjJFOTAzOUExREZEODA4N0NECis6MTBERjcwMDBGM0U5RTZGQTg3ODg0RkJGRUUzQzc1Qjk1REFCRDlEMUJFCis6MTBERjgwMDAwQjAyNDEwQkFBMDM1NTI4OUI5QTgxRkFGMzMxRTY0NzBECis6MTBERjkwMDAzODMxOTM5M0VDRjIwRkIxNDk4QzVGRjZDRUFDRTBDMjBFCis6MTBERkEwMDBDQzk4RjM0NTM5NTA0OUVGMTY1RTg5RUYwQTQxRkIwRkQzCis6MTBERkIwMDAyMkZDM0VFODA3OTFFNzRCRThEREFEMjAyMzY2NUVDMDFBCis6MTBERkMwMDAzQTA0NjI3MjkwQTFEQjIxRUY5MTIyNTRFRTk5MEY3MzEzCis6MTBERkQwMDA3MUQxRUQ0OENBREI2Q0EwMTc2MTQyQTdBQkY5RkQ4QjhDCis6MTBERkUwMDAyRUVEQkRDOEM3QjVGNzIyM0ZDNkY3MjEyMTFERERCMjEyCis6MTBERkYwMDBCQUY0MTExQzRGOTE4MjI4MzM0RUUyN0I5MTc4RkY3OTVECis6MTBFMDAwMDBFMjVCMTQxNzdEMEE2NDZEOTMwQkUzNjE3RTU1NDJGNzYyCis6MTBFMDEwMDA0RkVFNjVCMjM4MDlGMzZCNEIzMUVFRjlDRTk3QUNEQUJGCis6MTBFMDIwMDAzREM5OEU5NTc4RUZFNTUxMTFENjBENkRENjQ4QTBFRjFDCis6MTBFMDMwMDA4NzYxNTE4MzUwMTk0M0M3QkIyRUVENDhDMTczQkVEM0NFCis6MTBFMDQwMDA5MTFCRkJGNTFGRTNGRDQxN0EyRjMzOTNFMzY5ODM2MzUzCis6MTBFMDUwMDAyOUREMkY5QkVCOENGQUIwRkQ4MURENEYzQ0JFMDlDNjVDCis6MTBFMDYwMDBGQjc4QUY4RERFMzVEOUU4NThFQUMzRjI4RjFGN0VEMzM3Cis6MTBFMDcwMDA4N0ZBRTJGNERFMzcyRDg5Q0UyNzk3NDg5MUE5Nzg4RjY5Cis6MTBFMDgwMDA2Q0IxM0E4OEFEODRGOTk3NDQ2NjU5MjhGRTY0RTcwMTdCCis6MTBFMDkwMDBCQTlGQjY0NDBFNUFCMEZGQzUyREJCMjkzRjY1RTcxRjk2Cis6MTBFMEEwMDA3QzU4RkU2NjI2RDcxM0E3MzM4MjNFRjQ0QkU0QjU1ODVFCis6MTBFMEIwMDBBMzIyRTg5RjVEQjlBMTg1MDlDRkQ5MzM0NTZEREUyRjM1Cis6MTBFMEMwMDA1MUZGMUIxRDJGMUQ0MkJDOUM3RUQ4NEE3RUI3MDMwRkZCCis6MTBFMEQwMDBGRjk2RkEzREI1Rjc0NTlBRUZDN0JCREVCQzE1RURFOUYzCis6MTBFMEUwMDBDNThDRjk1MTlFOUZCNjZCN0UzRDVCNDc0QUVDRkU3NjMwCis6MTBFMEYwMDA5RjA2MEYzRDdGM0E1OURCMDc2NzBENTA0RjNCOEY2MUZECis6MTBFMTAwMDA0RTgwM0ZERDFGRTg0OEMxRkI4NTFGOUI4MzE2ODRDN0Y3Cis6MTBFMTEwMDAyMjg0MDdBNDI1MDAwNzk0RkI4QjIyMDJDRDczNTE0QjY4Cis6MTBFMTIwMDAyQkREQjc1QUI0ODdGQjA3MTcwMUJDMDgyRTJEMDc2OEYzCis6MTBFMTMwMDBGRTQ3MzJCOURDMzhCNUY3OEYzRTdBOUY2MjhGOTVGNjhECis6MTBFMTQwMDBDRkZBQkExNzM5ODMzRTg0OEZCRTVFODAwMzVGRjdBRTg1Cis6MTBFMTUwMDBBRjg3QTdCOTNBOUU1QUZFNDBGMzVBQkM4N0NGNkJGMUZFCis6MTBFMTYwMDA0RTNFOEZCOTdCMDA0RjRFQzREMzJDQzJGRkE5QkQ0QzhECis6MTBFMTcwMDBDMTdCMzA1REJCREYzQzg5RjZDQ0U5QkQzNjA1RUQwQURECis6MTBFMTgwMDA3RDVFNTkyMDZFNTNDNjIyMUY3MTdEQ0NGNjA4QTQ4Rjg4Cis6MTBFMTkwMDA5OUQ0NDFFNzM5NEI2NDU5QzZGNzA5MkU5NDg3MkQ2MTBDCis6MTBFMUEwMDAyRTRGM0I0QTg3NDJGOUQzMEY4QUY0OEUyNTkzMjMyM0JGCis6MTBFMUIwMDBEMUJGRkE2MUE2N0VGRkE3QzM4NzdFQjE1RDk3ODY4ODJGCis6MTBFMUMwMDAzRTNGNEFENkUwMkQ3NUY4MzA3RTY2QzNEMEUwODc5OTkxCis6MTBFMUQwMDBCMUY4NzhGN0M1OTFCOEVFMTVBNkNBREY3QTcxOUMyNzE5Cis6MTBFMUUwMDA3ODdDRThFN0I5OTU3RkJEOUZFNjNEQ0M3MERFMTg5RjRGCis6MTBFMUYwMDAwMkRDNTJGMEZDQkI0MDY0NDFCQTk3QkNFN0U1QTREODBFCis6MTBFMjAwMDA3M0U4MkYzM0I5QkVEQUU4Nzg4N0VFMjM5RUM2RjcxQzkxCis6MTBFMjEwMDA2OTNFMTE4QUQzMUExRUE4RjBFMTM5REY0N0NDMTlDNDMwCis6MTBFMjIwMDA3M0Q5OEYxRjdCOTlFMjZEQkEzMjc0RkY1MzA3RDUzQkM4Cis6MTBFMjMwMDBCNUU3RTU1NDRDMkJCNDc4NzgxNkJFOTFFNDE4QzBCMTFDCis6MTBFMjQwMDBDMTM2MzY5MTdDRDRFRTE3ODVGOUJEQjEzMzAyMDg0QzQ2Cis6MTBFMjUwMDBENDEzNUI3NDM4NTc1QTY2MThDRTc1QjgxQ0NEREE5QzQ3Cis6MTBFMjYwMDBEMzRFRkU5NjcwRTJGQjY2RjFGMjM3RUZDMTQ5NzRBRTExCis6MTBFMjcwMDA3QzhFMjUzRTU3NjY1QTlDREMwQTUzMTJDNURGNkM3NEFGCis6MTBFMjgwMDBGQzhDRUVERjU2QTk1NjE5RUZBRjFDRDdFNEUyN0JEQTFGCis6MTBFMjkwMDA3QjBCOUYyN0E1QTgyMkQwQ0RGMzQzODNERUExNjlCREM4Cis6MTBFMkEwMDBFRkUxNTZBQzU5RTI0M0Y4NTZFMEI5MDc2RDZBQjY1RDQ2Cis6MTBFMkIwMDA4N0YxODQ1RDY5NEM3QjlGOTQ0NTA5N0U2NkJERkM1RjU4Cis6MTBFMkMwMDA3OEI5OEJFNzhCODczRUIzMTZFRDEzODQyRkI3NTMxRkI2Cis6MTBFMkQwMDBCRDBFRTMxQUJCNzI3ODc5MTk5NjQzN0U1NjY2NTlFMUYyCis6MTBFMkUwMDA1MEVFMzcxMUU4MUM4OTk5NUQ1RDM2QUVDMjEzQzFBM0FCCis6MTBFMkYwMDAwNzJFMTJFQkQyRUQ2QUE4M0M3QjI4MjNCODQyN0YxMzhECis6MTBFMzAwMDA4NkQyQkUxRUZBMUJGREVERkIwM0JDQUJCNkQ0RkY4NTY3Cis6MTBFMzEwMDA3RTZDRkY1QkZENDQ0ODJGODk0MTdDRUIwQUJFRjlCOTU2Cis6MTBFMzIwMDBGRTdCQjQ5NEM5NERBRTZGREZGRjNGREE3RTg1MjkyMEI2Cis6MTBFMzMwMDA3RTg0NzQzODQ4MjRCQUQ3RjlCQUVCRTExMTQ1QjhGRkE2Cis6MTBFMzQwMDBCNzM0REMxMTQ1QjVEOTk1NUM2QUM5ODBFRkU3MTQ3RTE2Cis6MTBFMzUwMDA3RTcyRkI4MzFCMENFRkE4RUE2OUZDN0JCNUZBMzk5RTQxCis6MTBFMzYwMDA2NTk4RjE3Qzc2RDU1MDJFOEY1NjBERURGMTEzRTJCOUZDCis6MTBFMzcwMDAxQzFFNTdEMUM2MTlGRTlBRDMyOTE0ODZEQkU5QUM1MjZDCis6MTBFMzgwMDBDNEY4QzM4Mjc2MUJCREQ3N0IxMTAzNDEwMUYzMUZDNUJGCis6MTBFMzkwMDBBMjIyRUFFRkQxQUM5M0YyREY0MTEwNDBCRTg4MjkyNkQ5Cis6MTBFM0EwMDBDQzhGNjNERDNFNjkxODlFM0Y0NzU3QTE5RDc2QzQxRDAzCis6MTBFM0IwMDBBQzQzQkFGREVDRTE4RTc3MDQyOEZGNDk2NkYwOTc5REU3Cis6MTBFM0MwMDBFOEVGMUNDQUVENTQyNzk4ODU0OENGMzJBNjQwODdBMkIzCis6MTBFM0QwMDA2M0JBMjc5MURDQkYwMDRGNTkzQTE1N0JERTc2ODMxNDcwCis6MTBFM0UwMDA1OEM3RjkyMjRCRUU3MkY0QzA1OTk3MDcwQkI1Rjc5NzRGCis6MTBFM0YwMDBGNEY2Mjc5RjdDMjI5N0RFMURFQTc5MDdCQ0RGRkJDMDdECis6MTBFNDAwMDA3M0FCMTYzQ0Y4RDhCODdFQ0EzNTM5QkJBQjI2N0M3M0UzCis6MTBFNDEwMDBBQ0JFNkZEM0UwQkM3REE4NjhCMDBCNjE1NEIyRTM5RTg0Cis6MTBFNDIwMDBCQTgxREI0RkJCMkUwREFDN0MxNEU1NkQ4Qjg5RjZEMzI2Cis6MTBFNDMwMDAxRkI1RkM5MUJGODc1M0M2QzhBRUVCNkJEQzhGRTJGMDEzCis6MTBFNDQwMDBGRUQxRjYyNzMyRjk3OTQ3RDhBMERGMTczQ0ZFOEI5MTMxCis6MTBFNDUwMDBCMUYxOTYwMDY2QzUzRDgxQkZDMzQxNzgzRkU0NTdBRDM5Cis6MTBFNDYwMDAyNkE0RDIzMkYyQzc1ODU4MjU4RjUzQzFGOTBFQzNGN0VDCis6MTBFNDcwMDBCODIyOTQzQTU5MDdBNTI5QUM5QjUyOTlDOUU0OUY0RUZBCis6MTBFNDgwMDA2NTdFNEFEREFDOENEMjc0NTYyOTcwRkIyRTQ0NjkyNjE5Cis6MTBFNDkwMDA4QjUwOUE4NUY2MjlGQTdCNTgzN0E1MEFERUY4OEM4OUM1Cis6MTBFNEEwMDBERkM4QzUxM0QzNjFGOERFNkUxOUZGMUUxNzFGMjQyMUM0Cis6MTBFNEIwMDAxRUM3MjU5MEU3NzE3MTQxRDI4RTJBOTJFNzE4MTc5NEYyCis6MTBFNEMwMDBFRkVFRkQ5RTgyMkVCRjM3MEMyREZEMTNDQUJGRTc4N0VFCis6MTBFNEQwMDAwNjhFMjBGRDFDN0VFNjU1N0VCRjYyQUQ0MEY2RjUwOTM2Cis6MTBFNEUwMDBGQjc0OEIwMkE4N0IzQTM1NDBFRjgwQTgyMjJCREIwRTExCis6MTBFNEYwMDBGQTdEOEVFRUZGQzczRjNENEUxODgxRDk2QzNFMTUxQjRECis6MTBFNTAwMDBCRkMzNkNDRTAyM0MyRjlFQUQ1NTlEQUQ5RDgzQ0NENjM2Cis6MTBFNTEwMDBGQzIwRjhDRTE5QkZBN0U3QTdGQkY2QjNCNUYzODdEOTYwCis6MTBFNTIwMDA3MUZFMTcxNkIyMUFGQzI4MkFGRTAzRDYzMTNCMjREMEZFCis6MTBFNTMwMDBCOUMxRUNBNEU5MkY3NUIyQkVFOTI0QTYzRkJBRjc1N0RBCis6MTBFNTQwMDAxMUU3ODcxQUQwOUYxNTk3OUYxM0RGREUyNjMwNUIzQUJECis6MTBFNTUwMDA3RUU3RjRGNEY0NjUwQUQ5NzVCQTNGMEIwODRFQTE3NjRDCis6MTBFNTYwMDAwREQ2NzdDOTJGMTRCQTMyMTAwQkE3RTQyQ0JFNkZCNUE1Cis6MTBFNTcwMDA4N0FFNEE0OUY0RUU5MjlFQ0UwMUZCQ0M5Q0RBQkIzREJECis6MTBFNTgwMDBFQzA4NURDOEY3QkExQ0Q2RTkzQzA3MzdCNkM4NDcwNUEyCis6MTBFNTkwMDA5Njg0RUZBRUVBRTkxQTREREYzN0REMUY2MjM4NkY3QkY0Cis6MTBFNUEwMDBGNDFFN0E4RkZBNkVBRjRBQkU1QTVCNjE5OEVFMDcyNDZBCis6MTBFNUIwMDAxNTg0M0Q2QTgyRjkzNUUxM0JDRUMwNUY0REM5QzY3MzEzCis6MTBFNUMwMDA5M0M1NTk5Q0ZGMTc2N0YxRjNERDQzMTdBNTk3RTI3OUNGCis6MTBFNUQwMDBGNjZBODVCRkVCQkE1QUUxQkY0N0IwM0E2QkEwRjdDOEZECis6MTBFNUUwMDA2RDg2N0JGMkFCMDY2RkE1Nzc4MEVDNUY2QzYzNjg0RjNFCis6MTBFNUYwMDBEQUE1QzRGNzUyNkVEMkUwQkE0MUFCQkY3MUYwNTZGMjYxCis6MTBFNjAwMDA5MzM0RTRGM0YzRkRGOEZBMDdGMjFGQTJGNzFGMUI3MzJDCis6MTBFNjEwMDA2MEJGOEJFOUZEMkFGNTVGOUZGRjUwMzlCNkI3NDUxQkY4Cis6MTBFNjIwMDAwREY3Nzk3Rjk0QzVFNTlBNkQwRkE3NDc1MzlFMjU5Q0ZBCis6MTBFNjMwMDA4QkY0MjA4NTI4QkU0MEFGRDdEOEM3NzlEMkI0MkNBRTkyCis6MTBFNjQwMDA4RjlBQ0M2MUJBMjdEM0E0RDk0MzhCQjMxQ0VCQzgyRkM0Cis6MTBFNjUwMDA5N0Q1NzYxNEY5RjU1QzFFQTNGMzQ2N0JGNDQ5M0E0NzQ3Cis6MTBFNjYwMDBCMDE1NTg5ODVERDA3RTBGMDBFMzNCMEEyMzg0MUY3NEQ5Cis6MTBFNjcwMDAzNjQ1MEQ3NDFCRjNFRUJEQTk3N0ZGNzU1Rjg1M0NCODc5Cis6MTBFNjgwMDBCRUM2OUMxMDhEM0ZEMDdBMkZENUUwRDlBOEU5RDc0NkQ5Cis6MTBFNjkwMDBCQkYxMUM2REFFODZFRjJCNzVCOEVDNjcyNDRGRkE4MTg5Cis6MTBFNkEwMDAwQkQ5N0JEMzM2RTc1RThGRjNCMUVEMUIxMDhFODZGQTY0Cis6MTBFNkIwMDAzOUFDN0M1MDIyN0U4OTk3RkZDRTQyMzFFRTFEMjU4MUY4Cis6MTBFNkMwMDBFNjc1NkU4RkEwQkRCQkM4REZCMUU4QjEwMzIyMTZFQ0MyCis6MTBFNkQwMDBGNzVGMzc1NzFDQkMxQUU2QjMzMEU4MEM2MEZDRTQxMzU0Cis6MTBFNkUwMDA5QkRCRTg5RUZFQTIxN0NEMTQ5RjMwQkM3MzE2OTc4MzY4Cis6MTBFNkYwMDAyREZDN0Q0NUZEN0RBMzhCNUFBQzg2RjdBNjk2QjA5ODgwCis6MTBFNzAwMDBGNzE3NjFCQzQ1QzczRTNBQzZFODlFQjFGMUJCRkU2RTQ1Cis6MTBFNzEwMDBDMDFBRkM5MDIwNEUyREZFREQ4MTc1NTk3REJDM0I1MDBBCis6MTBFNzIwMDA5OEQ4NEYxM0ZGRUVDMENFODg0ODdBNjMzOUM2QjFEMjZECis6MTBFNzMwMDAzRTYwNkIyOUVFN0JBQThFMDlFNDM3RThDRDg3Q0E5NjQ2Cis6MTBFNzQwMDAzQzczNEM1RUYwMTMzREFBQzk0OTgxRUQwOUY4RTk0RkNECis6MTBFNzUwMDA1RTRFMEZCQkYwNTA4REVDRkVGQkQ2NDVCMzMwQUQ2MzgzCis6MTBFNzYwMDA3OERFNTQ3Qjk3MjRFM0I5NzY2RDM4ODlFRTk3RDRDQTY2Cis6MTBFNzcwMDA2MjE4RTM0NkJDQzlBNTM2RjQzRjMyOTcyOEUzM0RCNDlFCis6MTBFNzgwMDBBOUE2Qzk3NEVGQzk3MkI3MzQ4RURFNjk2RDVCRDg4MUYyCis6MTBFNzkwMDBGN0VBNkEzRDEyNDMzRUY2QkE3ODFDMDFDQjEwRTk3REQ4Cis6MTBFN0EwMDA5QTNBRjk3NUQ3NkNEQ0M3MzlGOTNEQkQ2Qzk5ODUxNTc2Cis6MTBFN0IwMDAwMUVEQkEwMEMzRjM2NUQ4QUM1NDQ2QzFGNEYyMEE4MTQ2Cis6MTBFN0MwMDAyOEJFNzdDNTI2NTlFNUVERkM5RDk5RUI4QjI2OTAxRjU5Cis6MTBFN0QwMDA5OEZFMEVCNDRFOERGRTFBQzcwOUQ4Q0ExMEZGNTNFRTJDCis6MTBFN0UwMDA3NjkzM0QxOEY2OTgxOEM2MDExRUNGQ0EyMTM4NUE5MjYyCis6MTBFN0YwMDA0QkEzNkZFM0ZDNjYzQUM4QjcxQjU2QzU1NEM0QzMyQjgyCis6MTBFODAwMDBBREFCNjY1QzA1REZDRDYxODlFMjFEMEFCRUFDQkRGOTJBCis6MTBFODEwMDAyQTY4REZERDZBQTFGQjE2M0E5Qzk0M0FDOUYwN0U4MzMwCis6MTBFODIwMDBFRjNFNjNERTEyRjc1RTg1QzQ2MkNBMjFGRkM3MkNFRDlFCis6MTBFODMwMDA3QzkyOTVCMzY4NkMxQ0FGM0JDMDBGREQ2NTI3QkQ1QjU4Cis6MTBFODQwMDBENzA5RkM0OUU3MUY1QUZFNEY1QTdFODczOTQ0NzhERkMzCis6MTBFODUwMDBGMUI2NDBGRUQ1ODNBRDczQjM0OTVFM0E5NjZFNzNFMDcwCis6MTBFODYwMDBCRUYwMjgzRkM3RUM0QjNFM0Y5QUE1RThFRjdDRDhCNUY5Cis6MTBFODcwMDA3NzJBRUNFOEY3OEFBN0E3QkE2QUU2QzczODQzNUJCOEY1Cis6MTBFODgwMDAzRDY5MTRFMkY3QjA5OTdFM0ZBMDVFOTM4RjkyOTNDQkRGCis6MTBFODkwMDA3MTlENkVFMkQzRkEzOEZBQUIzN0ZCMEI0MjUwQkZGRUU0Cis6MTBFOEEwMDA0QjkzQjY2RjNDNzk3RDc0MzI4NjNEMjhCNEFGMzY2N0EyCis6MTBFOEIwMDAzMTNGQjI4N0Q5REQ5MTI5QzMzQzQ2QkQ2OEYxRTNFRjEyCis6MTBFOEMwMDAzMzRDN0RCNjcwMTBDQUY5NTEyRkNGMjRGOTg2NzA0MkFGCis6MTBFOEQwMDA3QzQ5NTUxNjNGREFDOUQ2MkFCNzVGMUE4N0Y1OUM0NDlBCis6MTBFOEUwMDA5NzY3OUQxNkIyODdBNDJBNDc4OEVDQUZENjA5MUUyNUU0Cis6MTBFOEYwMDA3NjVGNTEyREZCMjUzM0ZFNkU4RDhERDI1NTdEQzhGQjg1Cis6MTBFOTAwMDA2Qzk3NTg4NjdFNTc4QjY2MkZCQkJDNUM5RUJBQkMwRTNDCis6MTBFOTEwMDA3RUJFQThBRDczOUJBNENFNDA3QURFMDY3NDgzNzEzN0E5Cis6MTBFOTIwMDAwN0VFRTNGNEJEM0NDMzQ2N0E3M0Y5MkJDMzg2RjRFN0U0Cis6MTBFOTMwMDAxRjdDQkNEQUUzQ0YwM0MwNkVCREFGODJGQ0I2MjVGNzA3Cis6MTBFOTQwMDBCQ0Q3ODg3NEI3M0NEOTI2MjMxRDlBNTI4NjZGOUM4Q0ZECis6MTBFOTUwMDA3NEZGQUE5OUVFNzlENjI2NEY1MDY2QzdGNDY3NEE5OTk0Cis6MTBFOTYwMDBFODQxNzg5ODQ0MzUxM0U5NzlGODk2NURENzRCOTM5MDUwCis6MTBFOTcwMDA0RUQ0NEQ3ODlGN0Y4Q0Y3NUZBRTk3NDBCRUVDNDg1NkUzCis6MTBFOTgwMDAzM0YxQkM2QzgyRjc2MTlFNEY1MzM3MDk1MDdFOTk3NzAzCis6MTBFOTkwMDAwQkNGN0JENTRDMTFGMjUzQkRBRDNDOUZBRjZFQzJGQzhCCis6MTBFOUEwMDBGNURFRUQzQzNGOUFFQkEzMUY3ODlGMjQ3OTVFNkJGNjcyCis6MTBFOUIwMDA5N0EzN0ZGQTE5OTg3RjYxM0VCRTkzQ0FEMzcyMEQyRTNBCis6MTBFOUMwMDA3QUY5NzNGOEREOENFRkFBRjIzNEJFRkMwNUFERERCRTNBCis6MTBFOUQwMDAzRUNBN0ZBOTk1RUZFRkEzRkY5N0I0NzZEMTNFREExRjI5Cis6MTBFOUUwMDBENERBQjVGN0QxRkU5MEQ2RUU3MDFGRTVBRjZBRTVBRjg5Cis6MTBFOUYwMDBGNUQxRkZCRjZCRUQzQUZBNjhGRkJBRDZFRThEM0VEQTdECis6MTBFQTAwMDAxRkQxREExREVEQTNGQzJEQURGQzU4NUNGRkVGNjhGNUJFCis6MTBFQTEwMDAzQkI1RUZCRUU0ODZCN0QwNUVGMzgxQkM0Mjc5NTI5MDNECis6MTBFQTIwMDBEQzQwRkVBRUFENTVDNTQ0RkZCNUUzQjlGRUQ3RTlERDI4Cis6MTBFQTMwMDBBN0REMEJFOEYwRjJCOEQyMEUyRkI3NkY5NjZCNzQ1RUJECis6MTBFQTQwMDA3MjRGREVGQUM5NDg4N0JGRTNGNzE0NDE3RjFDQzU3QkNDCis6MTBFQTUwMDBCOEVBM0QyMkY5Rjc5NkJGQzJERjk1NTk3RThGNDRFN0E5Cis6MTBFQTYwMDAxQjNBM0RFQUVERjVGOTg3QjU3OUQ2NjlFOTQyMkY3RjgyCis6MTBFQTcwMDAyRjIzNDdGNUY4QTdDN0U4NDdCMzZDQ0NEQjgwOUYzMDVFCis6MTBFQTgwMDBGRUJGQ0VDREY1NENDMTNEQTUwRDc4NkU1MjBCN0EwNjdBCis6MTBFQTkwMDBENzU3RUZCNDQ0RDFGRjU1MkY0QjU0NUVFNzJFMERFMTBECis6MTBFQUEwMDA3OUJGMkE0QkE0ODdFQUREQTk1MTdDQUZCOUFFQUVEOEI1Cis6MTBFQUIwMDBGMERFNjc5RDJDRDFGQjMxOTI2QjhBNkRCNjEzRTVDNkYzCis6MTBFQUMwMDA3NDE5RTU2NzFEOTM1MzRCRTg1QzBERjY2OUE4NEZBQUNFCis6MTBFQUQwMDA0QTY1OTQzQjM5MkU3NzJBQ0FFNTVCQjNGOUJBREE5M0QzCis6MTBFQUUwMDBCQkVDNzg4RjQyQkE1RkE0QjcwMjg2Q0IxMkYxN0I1RTkzCis6MTBFQUYwMDA5RDE4NTY2MDFFRURGMjcyRjJCRjZFNkZENkNFMTQxOURECis6MTBFQjAwMDAzRjRGRDRFNUZDOEU5RjREMjUzRDU2MEI3QTRDMjEzRDYxCis6MTBFQjEwMDBDNjA2MTVBNUY3RENERjk0OEU4REIyQTBERTkyMzM0RENDCis6MTBFQjIwMDBDQzBDNzJGOTgwMzc5NUM2RERGRTIwRDc1QkY5QTBCNzEzCis6MTBFQjMwMDBGMDlEQjU2REM1OENCRkYzRTZCMTkxNUZCNzQyNjI5RUEzCis6MTBFQjQwMDBDMTMxN0VDQzAzNUU2RUM3MzNEMzc0M0ZFRUIzRjNGMUI1Cis6MTBFQjUwMDAzREM0MThGODBFMEIxOUY1NTZDRTAwN0EyQkJCMEFFNDBCCis6MTBFQjYwMDA2NTRDN0RBQjQ3MzZFNDlGRjI2QUVGQURGQTk5MUZFRDM1Cis6MTBFQjcwMDA5QkE5Q0Y2RTI2N0Q3MjE2RjUwOTQzRkRGMkVGNDlBM0RFCis6MTBFQjgwMDA1MEJGODAxRUIxQjJERTcyNTA5N0M3QkFEREEyQ0JFOThBCis6MTBFQjkwMDA1QTRENkZENEM2RTk4RDgxRTVFRURGNUYxOTQxRjQyOTQ2Cis6MTBFQkEwMDAxQURFQTFFOTRCRkUyRUM3MzgwMUEwNEI3MzUwMjBCREUxCis6MTBFQkIwMDBDMkE0MjBEREVGMUYwODZFNjY3Mzk5OENGNkY4NDBGMDUyCis6MTBFQkMwMDAzM0E3N0RFQTQyMzk2RDBFNEFGRUY3MTJEQzkzMUEwODJDCis6MTBFQkQwMDBCRTdBM0Q4QjZERTgxNkQ0NkI5RjFFNUI1MTgwN0VBRjc1Cis6MTBFQkUwMDA1NUU2OEU1OTNCOTE2RTg1NDE3NEJGNDNEMUZDMEU1QjU3Cis6MTBFQkYwMDBBQkY3QjExM0Y5RjhGQjNEN0ZEOTVDODdCRjhGQzUwMjM2Cis6MTBFQzAwMDAzMkY5NEIzMjRBMTU2QzY3ODc3REZBNjBCMkUzRjg3RUMxCis6MTBFQzEwMDA5M0M5QzFEMDQyQjRFNzVGQjQyODc4MkU3MEY4MTlFRERCCis6MTBFQzIwMDBGRDA2QUY5M0UwNzlFN0VFQkJBODlENTlBOEY0RjBGMzk5Cis6MTBFQzMwMDA3RTQ2RjA1RTlEOTk0QTc2QjlCMkMzQTZEOThEMUZBRkM0Cis6MTBFQzQwMDAwRkU0NDFCRjYyQTc4MEZBRTdGN0Q5NUJEN0RCNTAxRjFCCis6MTBFQzUwMDA2OUZCMDE5OEQ5Rjc3MEZGMTMwOTVCQjRGQTc4RDE5RDZECis6MTBFQzYwMDBCMURERjhFMzM0RENGRjFDOTAzQ0IxNzZBOEU5N0I1M0JFCis6MTBFQzcwMDBCMkYwM0M1NDFFMjU0MTdGRUVBRDk2RjU2NjJGOTY4QjgzCis6MTBFQzgwMDA3QUZCMDA1RTFFNDJGMUE1RTcyNUMwQzNEM0VENUFCOTU5Cis6MTBFQzkwMDBFQTVFM0YwNUU2QjNEQkEyOEYwRjA2RjU0NDFDNEZENEI2Cis6MTBFQ0EwMDBFODI5NzkzREY2QkZBQjU0NkY3RjdBM0RGRTNFMTdDQzI1Cis6MTBFQ0IwMDBFNzVBMTNFQ0MxNzI3RDlFRjVDRThDOUVGOTdBQjM3RDM2Cis6MTBFQ0MwMDBFQjZCQTBCRkQzNEE2NzBBNkVFMzk2QjRCRTk3OEU3QTA5Cis6MTBFQ0QwMDA3Qjc1MzlCRjNGOEMwQzgwRkUxMUZEMUVGMTA1QkNFRDJDCis6MTBFQ0UwMDBCOTQxNDU1N0VDREYwRUZENjc0QTIxMTQyRDMzNzUxRURGCis6MTBFQ0YwMDA3MjAwREM5NkVDQUJCNDk5NDU3Q0JGQUI0Q0M1RjdCQjVFCis6MTBFRDAwMDBGNDc2NEJGNkNDMjIzQjY3RDlGRTIyNEExM0I0M0I4Q0Y3Cis6MTBFRDEwMDBGNzY3RkU4MTc2MzZDQkQ3MThFRjc0RjRGNUE1M0IxNTZGCis6MTBFRDIwMDBCQzM3NTNEOUUwMzQ1MTdEQzZGRDVGODlEN0E3QjczRkMzCis6MTBFRDMwMDBCREYzRjUxRkUwNzg2Nzk0Q0VGNDZCQTBGNkVBMjhDMDI3Cis6MTBFRDQwMDAyNTQxM0JCREJFN0VCRkJBRDgxMzI4RjJDMUY3NEYzMTczCis6MTBFRDUwMDA2MDBDRTU5NjU0RTlDN0ZBMTE1Qjg4RUVCMUQ5Q0RBMUY0Cis6MTBFRDYwMDAzMkQ0MjcwMEZBMzBDNjI5RTg2OUIxMkY4RjlGQTNDNDk3Cis6MTBFRDcwMDA3RDhGRTdBRjg4OEQwRDlFOEVGMkYyMkU4OUNFREQyMzNBCis6MTBFRDgwMDAzNkQ1MzEwNkYyQ0RCMDRGQTk4MTI5QUQyQzNBMzIxNkQ1Cis6MTBFRDkwMDBFMzA1OUFGNzNBNDlBRUQ3REVENUVFMjk0NEJFRjI1QkQ5Cis6MTBFREEwMDAxOERBQkRDRDk3NzY2NEUwM0JGODc1Nzc1QkNBMUY0M0YwCis6MTBFREIwMDBGQThEMkVGN0RDMUU2Mzg3NzlCMzc5MUNCN0Q3MTUyQTM1Cis6MTBFREMwMDA0NzdFQjQwMzNGQTIzRTZFMzQwNzZERjg2RThBOUEyMUU3Cis6MTBFREQwMDA1MjVDQjUxRENBNUZBMzcyQUY1NkVFOUY3NjE1RURDQkEwCis6MTBFREUwMDA0NDE5RTc1NTlGMzc2NzVBMjlFQTM1NEYyQUZGMURDMjU0Cis6MTBFREYwMDBGQzI5RTVGM0EwM0MyQzVCNjQyNEFGNDVEOTE1MzcyM0VGCis6MTBFRTAwMDA5QzlFOTZGQzk1Qzg3RjRGM0I5RDMyQzY2MzgxQUMyNDg3Cis6MTBFRTEwMDA3RDIwRTVCQjI5M0VDQkFBREQ3N0YyMTY3MTNEN0Y0MTBGCis6MTBFRTIwMDBGRkY5QjgxRUFCRjNGMTM4RkNFNkU0OEUxQjRBQTA1RDk3Cis6MTBFRTMwMDBEMkJEQTJBQzQyRkY4RDc3M0Y1NDg2RjE4OTVCRUUzRTk2Cis6MTBFRTQwMDBGMjA3OEM2RjZENEE5N0U4OUQ4MTVEMzVEMTAwRDZFQjU2Cis6MTBFRTUwMDAxNjU4NDcxQkZFMkU1MkQ1OEMwRURDOEZBRTY1OEE4MjZCCis6MTBFRTYwMDBGNkZBMkU2MTQ2MDhGNTczNzc5QUM0REFBMDdFNTI5RUIwCis6MTBFRTcwMDAzMTVFRDU1OTY4OEM5N0NBNUE2Q0NDMzc2NjA3RUZGNjY1Cis6MTBFRTgwMDA1MTNDNTA3MTA5OEU5MzI2MjgwQTNFMUQ1Q0RDQzEyODM2Cis6MTBFRTkwMDAzRTNGM0QyRjRGQzZCOEVFOTRFMkI4MzhEOEM5QzY3RTgzCis6MTBFRUEwMDA1MkE3MThDQkRERDNFM0UyQjY2RTMyOTY3QjZFMzFFNjI1Cis6MTBFRUIwMDAzM0U3MThGM0VGRUJGNEU4RTFFNzBGRkFFRjNENkNCOTU1Cis6MTBFRUMwMDBGQjcxODY3QUJBRjE4QjQxMTRDRjhBNzA0NEJCM0Q2OURECis6MTBFRUQwMDBCOEU0Qzc3MzExQUZBNTYzMjZDNkMxQjE5MTQ5NjQyRkM5Cis6MTBFRUUwMDAxREY0MjUzMTA1RjJENkE1OENFNEE5MzUzNTcyMDBGNzVECis6MTBFRUYwMDBBQjU2NTEyRTUzNDk0MzQ1MEVCQ0VEQzZERkVCMzJEMTI0Cis6MTBFRjAwMDBCOTZDM0NGQ0JDNUVFRTFGNzQ1NkYyREY4NThCNDg1MTM5Cis6MTBFRjEwMDBCMjIzRUNGNzBDOTI2QkZDQjg3NThDRjNDMzJFOEVDOTQwCis6MTBFRjIwMDBGMzc4RUYyRDNFRUQxQ0M1QTNDN0E5MTE1RTYxNjU4ODdFCis6MTBFRjMwMDBCNzQ5OEM3RTNGRDI3QkY3N0I2QTE0RTZCMTU2QzlBQkVBCis6MTBFRjQwMDA0NDNCNjNCNUQ4NDlFM0E4MTVDRTIwRUVCQkQzMzBDRTAxCis6MTBFRjUwMDBEQjg0RjFERTJBQTVGMUY4RDhBOUQxOTdDMkU2ODQxMEE2Cis6MTBFRjYwMDA4RjlFNTkyMkM1OEZENDFGNEFBQUMzQzM5NzdBRURCRDdECis6MTBFRjcwMDAwNjNEOEU0REE3Q0JCRDNFNkU3RkVFNkUxN0M1MDBGQUU3Cis6MTBFRjgwMDBDMTZGQzk2QjQzN0NFQkY5OTZBMEJCOTVFMkZBOEIyQTYzCis6MTBFRjkwMDAzQjkxMkVEOTc1REMwRTA1M0Q0MEY3QjJGNTM4MzEzRDc5Cis6MTBFRkEwMDBBRUIwMzM5QkQzRjcwN0Q5QTIyMTBFOUNFMjg4NjJFMjcwCis6MTBFRkIwMDBDMEU5RThDRTg0NDcxNzIxMTlDRjdCQkM0NTY1MzJDQTJBCis6MTBFRkMwMDA5OTlGRUJGNzJGMThFRjE3OUYyRkE0NzM4M0U5NjJFMDQ3Cis6MTBFRkQwMDAyMkNEOUY4RTc2REQ2MDZEQkNDMTZFMjk0MEVGQkJDMzM0Cis6MTBFRkUwMDA5QzQ0QThGRjIwRTNGNTA3RTdFRDU5ODFGN0FFNzYyM0FGCis6MTBFRkYwMDBFMTIwRkZEQ0NFRTExQzRGQjcxOUVEQTFCMkQxMDgyRjAzCis6MTBGMDAwMDAwMUY0NjE1NjZGM0ExNjdDMkQ3NDFFNTg3RjJGNEJCNTU0Cis6MTBGMDEwMDAxNkY1QTZFQkYxMjY2RUZGNzQyRjUwMjhDRTcyMjAzQTFCCis6MTBGMDIwMDAzRkUxNzM3MTNGNzZEQTI2MTlFRERCQ0NCQzA3NkJFODY0Cis6MTBGMDMwMDAxRUNDQkQ0QzQ2N0Q5N0Q5REU3MTAzRkFCREUyRjkyMUE1Cis6MTBGMDQwMDBFQzQ4MTlDQkUzRTRCRTk5MUZERTY0RTJGQ0MxODY0OEJDCis6MTBGMDUwMDA4NEI3RjhGOEQyRjg3ODUyNkZCNjRCM0I4NzAyM0Q5MEYwCis6MTBGMDYwMDA4Q0Y3MDFFNDJCMzA0RUIwRkIxRTQ2RUYwNDk0QkVEODYzCis6MTBGMDcwMDA3Q0YzQkY0MTdGOUZFNTVCNjQ5NEQ3RDk2RjA0OUY3MDk5Cis6MTBGMDgwMDBDMEJDM0VGQjQ1MzAxQkU1RjQ1NkE5RDNFRThBRjE3QkFDCis6MTBGMDkwMDA0QTIyQkY3RkQ2NEI1RTZCRjRBMUEwREVGMEZDRTNBOTUxCis6MTBGMEEwMDAxN0U5MUI4ODJCOTI5NzNFNEE0NjdGRDVCNjc1QkZCN0E2Cis6MTBGMEIwMDBBNUZEMUZEQTJEQUEzOTg0NzY4QkFGNURDRjY3OTAxRDMxCis6MTBGMEMwMDA5NkZEMDZDRjhGREQ5QUIxNUU5NTEwNkU4QkM5NUY3NDg5Cis6MTBGMEQwMDBEMDNCOTdGQzQ1RDI1QkRDNUYzNERBMTQwODYzOUVGREJECis6MTBGMEUwMDBDNTRFNzE3NzNCRjZERTMyMUZFM0Q1RUFEM0FGQTFERjIxCis6MTBGMEYwMDAzRDE5OTNDREY3OUQ4NUQ5M0E3RjFCRDcyRjU5MDI0MUYyCis6MTBGMTAwMDBFNDlCRjhFRkMzQjNGNUYzQzRCMjBGNjcwMUZFNDYzRkNCCis6MTBGMTEwMDA2QUExQjhCQjAyQjFBMjIxMDdGOUExRDE0NEY4QUMzMDcxCis6MTBGMTIwMDAyOTRCRDdDNEVDRDNFQUQzNEIyNjY3QTdEMUJFODAwNUMxCis6MTBGMTMwMDA2MUMzQTA5QzE3NTgxMDk4Q0RFNzNFNUU4MkY0OUEwREVCCis6MTBGMTQwMDA2Qzg2RjIyNTVCRTUwNjY0NzY1NTEyMEJDNkQwQTk3MjczCis6MTBGMTUwMDA1RUEyRkFGNUU5ODFDOUQ5OUFEQ0MzNzMxRkIzQzZEMjlFCis6MTBGMTYwMDA0RkE3OTZCMTU5QTg5N0UxMUJFQTVERjNDRTI0N0VERTQ2Cis6MTBGMTcwMDBFMzM2REU4RjM0OTk3OEJDQzhENURBQkFDRDc4QUUzM0IxCis6MTBGMTgwMDAxNkRGN0IxM0EzRDYzMUJERUI1RkFGQzE0OUIyMzlBMzA0Cis6MTBGMTkwMDBBNjQxRTgyNzdCRUQyOEREQkI4QzNCMDdDNkZEMkRDNUNFCis6MTBGMUEwMDBFNTJDNjZFNDA3NDVCODUwRkU0RTk5QkZEQjVEQzVFMzJDCis6MTBGMUIwMDAwMTZBRUY2MzAyOUUwNUQ0NkFGNzU0RDQ1QkY5RUYwRTNGCis6MTBGMUMwMDBCMzQwNDBDMUY3NTU2ODhCQTlFMEZGQTJDNEJGMUUxQjI2Cis6MTBGMUQwMDA0QkM1RkExOUFDODNFMjE4NTkzQjUzNzhCQzg0RjFEQzc3Cis6MTBGMUUwMDA2OTZCMUZFRjQwRTk3RTAwQTlDQTQ0RkI5NDUxMkZEQkY1Cis6MTBGMUYwMDBGOUVGNDM1NTMxN0EyNzlDREU2Q0MyRkRFRjdEMkMyQzU0Cis6MTBGMjAwMDAwOTNEN0VCODBFQUY0MkVERjRGM0Q4NUQ1RkJFNDNCRjVCCis6MTBGMjEwMDBDNzVDMjBCNjA1NUYyM0JCMjE1OTZFNDNGRDk4NjRFNEFCCis6MTBGMjIwMDA0M0ZERkVEQUZEMUExRkUyRUY0OTA3NjNDRThGN0NFQTQ5Cis6MTBGMjMwMDA3MThBQjdDRjY2REQzNUI4Q0ZDQUFFNEEzNUUwRjk4MkZDCis6MTBGMjQwMDA1RkY2RkM1MDE2MUMxN0RCNkY5OEYzNzU5RTQ0RUY3NDQ1Cis6MTBGMjUwMDAyOUU3N0Q1NEJFQjU1QTE5QTBGRkRDM0VGQUNGMjA3QUNCCis6MTBGMjYwMDBFQUJCRkYyQzJBREYxNkZERDQ3NTNEODA2MjZCRjc3QjZECis6MTBGMjcwMDBBRTMyQTVDNzZFOEQ4N0IzRUYzRUEzRkNGRUNFQkVGOEJGCis6MTBGMjgwMDA3ODcyMEUxN0JCMzlFMEJFMDFFMDY2QkY1RkY0QjczMjlCCis6MTBGMjkwMDBGQ0REMUI2M0JENjkzOUU3NUNGQ0JDNUNBRjFGNzVERjNGCis6MTBGMkEwMDA4OEY1NjFERkRCQUFFMEVGRTgxOEVCOTc5NUJDRUZFMkE5Cis6MTBGMkIwMDBFN0VFN0E3RDNFQkZDQkNGMUJFQkM1RTMyNzdFQkUzMEFBCis6MTBGMkMwMDBBRkI0RUZDN0NDRUIwQTlCRDU1MDVFM0VBQkQ3QkNEMkY4Cis6MTBGMkQwMDA3RTE4MzNBRkFCM0NDNkZBQzE5QUM0RjNCQUI2QzBEQUYzCis6MTBGMkUwMDBFRkJDRjQ3QURGOUJGOEY1RUFDNUFGRTNDNjY5RDYzRTFBCis6MTBGMkYwMDBFMENFRUJGRkIwRkNFQkY1RkJBM0Y5RkREN0JCQUQyQUVECis6MTBGMzAwMDA3RTFDOTVFNDA5QzhDRDBFOTQ0RjE1NEM1OTg1RUY4NEE5Cis6MTBGMzEwMDAzMzY3NTJDMkI4RTBDOTFBN0Y5QzQyM0YwNTlFOTMwRUU0Cis6MTBGMzIwMDAwREJDODlGMkYxQTQ5N0M3RkQxRTdFNjY2MTA4Q0Y2MTBFCis6MTBGMzMwMDA5NkVGQjUyODc4REVFMUQ1RkNENjIwNzgxNjIxRkZFRUQxCis6MTBGMzQwMDBCNkM5MkU4QzA3MTQ3RDhBNzYzRkFBMjMwN0UzRjk3Njg3Cis6MTBGMzUwMDBFRjM4NzIzM0M5M0Q2NkI0Njc2MEJGNTY4MkZBMUE0NDBCCis6MTBGMzYwMDAxOEREQ0I3ODBEREJBNUM1QzY1MTA0QzhGRUFCMTdGRDczCis6MTBGMzcwMDA3RkE0N0RENTBGRjhCRTRBOEZERjhGQjVCM0Q4ODQxRTJBCis6MTBGMzgwMDAzQjRCOEZERkRFQTA4RDczM0U5QkZCMDNDMUNFNTcwNTQ5Cis6MTBGMzkwMDBCMkYzMjU4QTZGRkVCOUFENjMwM0RFM0ZGQUI5REJFRDQ4Cis6MTBGM0EwMDBDMkZEQ0M0MTZEREVCQUREQThERjZCMTgzMjJCQUZDOEQxCis6MTBGM0IwMDA5NDAwNUUxN0Y0NDg1MkNGN0QwOThDQTM3NEU1RTVEMTIzCis6MTBGM0MwMDBCQjE4NjhFNzhEMkRDNDdFMzk1Q0ZGMDdDQTg5QTc1NjM0Cis6MTBGM0QwMDAwMDgwMDAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMEZCCis6MTBGM0UwMDAwMDBCREQ3RDBCN0MxNEQ1QjlGODk5OUREOTU3QjJCQkM0Cis6MTBGM0YwMDA5OTBENEIxRTNDQzI2RURFODEwMDEzMDgzMUEwOTUyNThECis6MTBGNDAwMDA0NDhDOTZEMjBEM0UwQURBRTI5MkYwOTRCQzAwQURGMTQzCis6MTBGNDEwMDBDQUFEMTMxMjExMTAzNTZBNDRBMDgwMEI4QTYyQUY2ODFFCis6MTBGNDIwMDBFODQ1MEQwOERFMTAzNUI1QjdEODg2QjZCNkQ2N0FGOUY4Cis6MTBGNDMwMDBBRkMwNDUyQTA4NkIxRkVBRkQxN0NCRkZGQkJFMzM5MzE1Cis6MTBGNDQwMDBFQzRFNzY1NUFBQjdGN0ZFRkVGMTg3QjM2N0NFQ0M3OUJFCis6MTBGNDUwMDA3Q0U3N0I3RkRGMzk3M0FGODkzMTU2Q0E5ODlBMkY4NTU1Cis6MTBGNDYwMDA3NjA5RjA1QjY2NkM0RDE5NjM2RUY4QzlCMjE5N0I0NDdFCis6MTBGNDcwMDBFRTczNEI1MEZGODg0NzkyNTVBOEVGQzlGMjMyMzY4OTk4Cis6MTBGNDgwMDBCMUJEQUY5OTRDN0UwRjYzOEY3RDM3NzdBN0U4MUIyOEZFCis6MTBGNDkwMDA2RjBBN0E3NjYwNzlBNDg5MDUzQjFERDg4OEJDOENDMTM3Cis6MTBGNEEwMDBGREJEMzZEOUJEQkUwNDhBNTI5RkFGREEwOUU1RERCRjg2Cis6MTBGNEIwMDBCOTQ5NzAzMTk2Mzk4QTUxN0JCNUNERDNEOTg5ODk4Q0I4Cis6MTBGNEMwMDBCRDY4ODlCQzdBMTFDN0IzNTEwOEVEODI3NjVFRUEyODFGCis6MTBGNEQwMDA5OTIxQzFGQjBCNEYzMzY2ODc0NzZCRUZCQ0VFOTE5M0NECis6MTBGNEUwMDA0MzE4OUI3QzUyOUU4NkY3NkJCN0JBMTUxMUVFMzdGNDIyCis6MTBGNEYwMDAzNUNEQzA3RTU4MTM1M0YyMTRDNkQyQzU2OUEyMTNEQUIzCis6MTBGNTAwMDA0OUJGRUZBOEQyMEE0MzdFQjRDN0RCMTU4NjcyNjQ4NzcxCis6MTBGNTEwMDBBMEVDRjQ2MkZERjI5MkU1QzVGMEJDQzNFRjc1QzA3Q0NGCis6MTBGNTIwMDBFN0UzNTBFOUJFN0I4NjE5REZCQkNFQTJCNDQxM0I2NzVGCis6MTBGNTMwMDBDRDZDNEUyNzNDNzcxMUZGQTYwRTVDRTc3RkQ3NUJDRUU0Cis6MTBGNTQwMDA2MEZDRjMzQkVGOUM0RkZEQ0EwMEIyNEMyOERCNjQxQTExCis6MTBGNTUwMDA4N0NEMkJBN0I2NDAzOTNEODlEOUVDMTMxODJCNUIyREVECis6MTBGNTYwMDBGN0RFODVGRDJGNzVDQTNCMDFDNkFFNzJCOUY3ODczODQ1Cis6MTBGNTcwMDBBRkE2MkM1OTU0QjBGMzEwQzE0MTZGN0ZBMTNGNjA2MTE5Cis6MTBGNTgwMDBEMEVGOThERDE2Njg4Q0QxREY0NUY4MzdCNjMzQjYzQzNFCis6MTBGNTkwMDBCRTJCQjY1Q0QyMUQ1QjlFRjg0NjZDRjk3OTk4MjMxQjk2Cis6MTBGNUEwMDBDQUQ4MTREQkYwNkQyNzAxREUzRDg3QUMwQ0M3QkJFQzdECis6MTBGNUIwMDA0QzUyQzgwQUYwM0U2MDY2MENFN0FGRUVCMTEyM0U0QzBBCis6MTBGNUMwMDA1RkU2RjAyMzdFOUNGOTIwNjk4NzE1Q0E4N0RGNDlBMjkwCis6MTBGNUQwMDBFNzZGRkQxNzNCN0ZERUQ0RjkxQzk2RDVFNzkyMTkzRTA1Cis6MTBGNUUwMDBCRjZDNDg2NzU5MkE4Q0ZCRTVDRkM0NUIwMkM1N0M1QUM3Cis6MTBGNUYwMDA2NjZDRkZCOUEyMURFQkIxN0U2MjY3OTkwQ0Y3NUYxQ0M4Cis6MTBGNjAwMDBDRDU4MUZENjRCQTE3MTM4Q0YxN0ZGMjY1MkJCOTE2NzNCCis6MTBGNjEwMDBBQ0ExOUREMEVFOTlGRDRGM0Y4N0YwM0FGM0NDRjA1NDZBCis6MTBGNjIwMDAwMUM2N0NCOTY5RTdDNEY1NThERkUyRjRFRTg0RkI1MzA4Cis6MTBGNjMwMDBDRTNDOUIxMzhDNUE5NzY1QkJBRDMxRjM1Q0U2MTU2OEU1Cis6MTBGNjQwMDA5RUNEOTI3RkY1MTNCODNFNDdDQzg0NEYyQjE3ODY2QTI4Cis6MTBGNjUwMDBCQkUxRkQ5NTQyOTZBMjYyM0IxNkMwRDM2MjJDMkJFOTFBCis6MTBGNjYwMDA2RUMwRDcyOTJFOEVCNzJCRUQ1MDhFQjNFRUZBQjU2NjRECis6MTBGNjcwMDA5M0M4ODIxMzA3Q0FDN0Q3M0Q0REUzMjkzQ0ZEMzZFMTQ1Cis6MTBGNjgwMDBGNTAxQjM2QTRBNDIzOEFFMTM5NDVEMzBGRTAzNzZENzczCis6MTBGNjkwMDAzODk2ODJEN0FDMTBFMkNEM0Y3OTREMzQzRTk4RDcwRkUzCis6MTBGNkEwMDAxQjEwMkZERTE0OTU5RDJDNzE3Rjg1MTlCRkRGNUEzOUYxCis6MTBGNkIwMDBGMTczRUFBMTVGREYzOEM2Q0VGRjIxRTkxNjNGOENBM0M0Cis6MTBGNkMwMDA2MDUzRUNCQTE3ODU2MkNCQUIxMTNFODA2RjM1MkNFQUU0Cis6MTBGNkQwMDBCRTBGQzc5M0JEMjY4M0U4ODREMTc4MEE0RkJGN0I5M0MyCis6MTBGNkUwMDAwRkM2M0JDQ0NBOUExMDJFQzY3RUVGQzM3OTQwM0IzRjczCis6MTBGNkYwMDBGQTExQjQ1MzQ4Q0Q4ODE3NDVERTlFMzcwREQ2NDFBMzg1Cis6MTBGNzAwMDBBQjk3MDU0RTQ3RjA3N0RCNzBBMEI3NjUwMkU3MkZGQTlECis6MTBGNzEwMDBGRDY1ODY3MUU4RUQ5NzZBNzBGMjU4OTQwN0MzQjRGRUYwCis6MTBGNzIwMDA1NjE5RDdGRjgzQkJBQjFFMzk2OTFFM0M5RTUzNzdGQjJFCis6MTBGNzMwMDBGRDk1NTFGNzE3NkQ1QURFOUIwOUVGRDVFRDFEM0E0MTQ2Cis6MTBGNzQwMDA4QzgyNkZERDMzQUZBNkREMENGN0NGRUU5NjE0NjQ4MUFCCis6MTBGNzUwMDA3NTczOUY3QTYwMEEzRUY3OENEODg5RTNDNTdBM0ZDQ0VGCis6MTBGNzYwMDBGNzZDRTdFQjJFN0M2RUQxNTZGNzA0RDEzQkYwRkVFMjRFCis6MTBGNzcwMDA0RDU3RjkyQjBCMDdFMDc5QTk3NEZBNTIzOUU3NzNDQjhGCis6MTBGNzgwMDAzQUNEMjExQkQyNDVFNzVCMzM4NjIzOUU2RTEyOTQzQzEzCis6MTBGNzkwMDBFOEE3NEMwQThBNDg3N0NFNTJCRjU5OURDQ0Q4RDQwQkUzCis6MTBGN0EwMDBGRkQ2M0IwQ0VBMUIwRjREMkE1QjBGRjVFQjREODFFQkFGCis6MTBGN0IwMDBCRTg1NzRCNzVENTQ3NkMxNkIyRkZDN0E0NTVBMzA2QUFBCis6MTBGN0MwMDA3RDdBMzRGQzVGN0Y2MzFEQjVBMzAyNkVFNDAxNTNFRkM1Cis6MTBGN0QwMDAyOUFDOTk4RUU1MjlDNTRDQjAwMjNGNzY5RDY2RkU5MDE2Cis6MTBGN0UwMDAwM0ZCNjM2RjlCNTIxOTNCN0RGMDlFNzE5Mjg5RjhEMUE4Cis6MTBGN0YwMDBDRDQ4Mjc2Nzk4NEI0MUJBM0JFMDZDRkExNUY1QjdDNzdGCis6MTBGODAwMDA0Q0ZENERFRDRFMTE5MEZGMUU3ODUyNTBENjMzODQ0NzdCCis6MTBGODEwMDAyQ0ZEOUQzRUJEREEzNThERDNGNTJEMDE5MjAzMjZFNkY0Cis6MTBGODIwMDA4MUY2OTYzQzMxOTZGODgwN0VERkI4N0U0QjQzMDYzQUVGCis6MTBGODMwMDAzNkUwQzUwOTZENUU4ODlBRDFGODY1N0M2RUM4NENENUY2Cis6MTBGODQwMDA4MkY0NThENzBDRjIyMjhBNkVFQTRFQjY1Qjk4NjM3MDQ3Cis6MTBGODUwMDAzRjhDRjVFMzJGNDNGQzA1QkM2NDVFOUFBRjlERjgwNjMwCis6MTBGODYwMDBGQzA5MzZDMERCMEZGMDU3MEUyRjMzRThGRjU2ODFBNjk4Cis6MTBGODcwMDBDNjk2OERFRUNDNDczRTI3NDg3MjQ1NUJFNjAwN0Y2NTE1Cis6MTBGODgwMDBFNTIxRTJGMzY3RTFFNzdBMDVGOTQyRTczMUE0Nzc5NEVECis6MTBGODkwMDBBNUJCNTBCRUM4RERFN0I2NjBCRDNBQ0E4RkZDNjgxODhDCis6MTBGOEEwMDAyMjI5NUNEOUYzQzlDNDdGQ0Y3QUMzNEZEMUZCQ0Y4RTU1Cis6MTBGOEIwMDA1NTU0Qjg3RDFFRTlDNTQxRUZCOTUyQTNGODUzNEJFNzQzCis6MTBGOEMwMDBBQkFFMzA5NENGRUMxRDUyMjFCQTEwNkY3RkU2QzI3OUY3Cis6MTBGOEQwMDA3RUQwMzlBNEMyRTI0QUNDMzc4QzdDMTM0NjQ2RjA3REY4Cis6MTBGOEUwMDAwRjdGMDJERTI1RjlGQzY2MUZDMkJCMEQ4NDJFQ0FCMzUyCis6MTBGOEYwMDAyMTREMjU0RDcxRDY0RDdGQ0Y2MzY5MkFGMTIyRkZGODQ2Cis6MTBGOTAwMDA5RTQzNDEzRTlFNkFBQjdEMUNFNTM1RkVGOUUxRkUxRjNDCis6MTBGOTEwMDBERjE4QjIxM0Q3RkY2MTREQUVDRTE3NzgzRjdBM0I0MzY1Cis6MTBGOTIwMDA3RDlDOUZCQzcxMzgzRjI1MENGREZDOTE3OTUzNTA1RTQ2Cis6MTBGOTMwMDBFQ0M5MDk2NEY4RTA3RTQ2NDU5RjVGMDQ3ODY0NUNDQkJGCis6MTBGOTQwMDA5NDU2NzhGNTg0QTg3QzVGODZGNTU4QzA0MDVFRTJCNTkxCis6MTBGOTUwMDAzNDY4NDFCRUMyREE4NkQyNzgxOTUzNjYyMDNDMTdDRjhDCis6MTBGOTYwMDAwNEY4OTdGMDMyQ0FCN0E1MDE4QkIyMUVFNDcwQURDNDlCCis6MTBGOTcwMDBFMTVEQkI1QjA4QjVDMjU4MTY2Qzg4ODVDN0EyMEVFQjZCCis6MTBGOTgwMDAwMDVFRTBGRkI2NDZENTQzM0Y0QkE1RDAxQTk0NUIyM0ZCCis6MTBGOTkwMDA0MEYzMTg1MjBFRjhGMDY0RUNGM0NCNTgzNzhEQUJFRTExCis6MTBGOUEwMDBEOThCRDY3ODcwRkU4QjA2RTczRDM5RkUwOTM4M0Y2MTZBCis6MTBGOUIwMDBCNjhEQzZCMzcyOEY0MEYyRDU2M0U5MjQ3RDIyQjIxQ0E2Cis6MTBGOUMwMDBGODMxOEM5N0ZEOUFBRkMzNEQ5QUJFRDQ3OEU3N0NGRjhGCis6MTBGOUQwMDAwMkI4OUU2RkFFRjUyRjgwMkEyMjM1RTQyMzFEMjk4NEJDCis6MTBGOUUwMDAzRkNCMkEzQjdCODlBRjMwRjlDNzM3Njc2MDdCQ0MyRjkxCis6MTBGOUYwMDA2Mzc5QTM5M0VCN0JFQ0M5NTc5MUFGRkM4NUM5OUQ4OEQ0Cis6MTBGQTAwMDA4NzUzOTYwOEY0RkU5NDVGOEIzQjAxQzNEOTRERkRFQjAxCis6MTBGQTEwMDAxNzIwMzhENjc5OTk4QzcwN0NDNzFDQTA3OUFCNEI5OThDCis6MTBGQTIwMDBCQzBCRjg0QTlEMkRBMEVCNUZGMkQ1MzA5RjQ1QUM4OTA5Cis6MTBGQTMwMDBFNjVERURDQkE2NzkyRTYxRUQ1NEFFNjc2MTBCMTM3MUQ3Cis6MTBGQTQwMDA3RENCNTIxMDVGRkZDNDE0NUE1RkQwOTM5ODNENzUzMDQwCis6MTBGQTUwMDA1RTIxRkNGRDUxNzA1QkIyMzVCNkNDOUU4QzJBNjcyM0NCCis6MTBGQTYwMDA5Q0ExMUMwNUZGODY3RDE3QURGRTM4NzA3RkI0NUYxRTFDCis6MTBGQTcwMDA4NThBQUFDNzQ2RTM3MTBCRTFERjMxNkQ1RDFFQkQ2MTZBCis6MTBGQTgwMDA1MTI2RjI5MTA3NTEyMTFFQTYzNTUwOEVGQzE3N0U0RDRFCis6MTBGQTkwMDBBMTcyQjcwRERBNEY5QUQ4NUZBNkZBQjJENUJDRENCMDI2Cis6MTBGQUEwMDBFM0M1QzBBNjJCMDBEQ0U2NjBBNjBDOEI1MzJCMDY3QUMwCis6MTBGQUIwMDA0RDAwRDczOUI5QzExNTQ4NTdCNTI2N0Y5NjQ0RkNDNEM3Cis6MTBGQUMwMDA5RjFGODA3MUIwNjZCRUJFOEY0RDY4MkE2QThBQTM3RjcxCis6MTBGQUQwMDBFOEUzREYyODc0NzY5QjkwOEZFQ0U3RkE4NUIzMzQ2MjE1Cis6MTBGQUUwMDA4RUU2RkYxQjdDNUNCRUE3RjQ4NDY5RkQyMzJGMDgwQzA3Cis6MTBGQUYwMDBGNURFQ0RDMjQzOTlCODhFOUIzM0JENDIyQkNDQTk3NEExCis6MTBGQjAwMDA1RkNCMzRFMjM3QzA4QkYyNjA1REVCRjdCREQ3M0IxQ0I3Cis6MTBGQjEwMDBDQUE1NTU3REI4NEMzMEVGQzBGMkQ3OTE5RTI3MjU3MTBDCis6MTBGQjIwMDBCRDM5Qjk2OTg3MDlEQTRCQkZBNTcwNDIyQkUwRTc0M0JECis6MTBGQjMwMDAzRTJGRjU5MzM0QjFGRDMwQjYxMzU5RUU5NTc3NDIzQjI1Cis6MTBGQjQwMDAxOUFCNTVERjhBNjJFQ0JGQTk4NUYwQjc5QUQxRkRBMTQ4Cis6MTBGQjUwMDBERjU5RDU4MkNGREQzNzhDQTU4QUY4MUM2QjExRjBCOTNGCis6MTBGQjYwMDAzNTQzMDU1QThGMzVGM0Q5OUMxRkMzNTU2MjMyRTk5RDQxCis6MTBGQjcwMDAyM0U2Qzg0MkNCNjQyQzM3NEQyM0ZDRjJDQUVFOUY2NUM2Cis6MTBGQjgwMDA2Mjk5QjVBNTgwNUVGREE4OEI5MTlFMzlENDI0REU1MjgyCis6MTBGQjkwMDAwREQ3NDcyN0YwNzJFQTJBQzFCRjkzODhFMTIxODI1NzI3Cis6MTBGQkEwMDBCQTk1NTUwOUE5RkM3RUE4OTg0OEQ4QkY5N0VBNDMzNDZFCis6MTBGQkIwMDBGRUY0RTk0RDI1Mzg4RUY0MUM3RUY1NTg4MkE2NUNFOEVCCis6MTBGQkMwMDBGRkM4NTE3MzY4MzVDQ0YzODg4NjJGQjdFREE4NDg4RkVFCis6MTBGQkQwMDBFNkJCNDdDRURBMjQxM0U4NzU0NzMyNzQ3REI2REI4MTg1Cis6MTBGQkUwMDBGQUVDNkQyNUQzRDM5MTE4QjM3M0FCNTI3MDVEM0Q1OUM4Cis6MTBGQkYwMDBCMUY1RTdDREZFOTQ4OTQ4M0Y0NzQ1ODZFQkY3Njc4NzI3Cis6MTBGQzAwMDAzRjA1RjVDRkNCMkQ3Q0ZDQzY3NTNGQUNBRDY3RTNBN0I4Cis6MTBGQzEwMDAwMjBCNDVDOUIzQzYzOTFGOTM5REQwRjhBOTE0NzNGRkQxCis6MTBGQzIwMDBFQ0REMzY4NjIyQUU1RkVFMkRFOTk5ODFDRkQ1QjNCRUVECis6MTBGQzMwMDAzNTg4ODdGNTlEQzkyQzE0NDUxNzk3MjdDNUVGNTdBNzE5Cis6MTBGQzQwMDA4N0M2NEY0NUE2QzZFREQ3MTI3QkZGRDMyMTRDMUQxMkE4Cis6MTBGQzUwMDBFRkI5QjREOEZCMzA4Rjk4NzJENzI3RkRGM0MwRkJBQzU3Cis6MTBGQzYwMDAzQ0VDMEE4MDlEMzgxM0U1Mjg5NENGODc0Q0FBNzkzQzU4Cis6MTBGQzcwMDBBQUYxNUNGRTlEOTNDMzJFRDRDRjQxNUUzNkUxQkE5Q0JGCis6MTBGQzgwMDBGMzg2NDkxRTlFNjdBQzBBRUIyRjM3OTk2RUE5QzZGNTFECis6MTBGQzkwMDA5NTIyQUVEOUNFODE3RUY0N0E3QzNGN0ExRENGQ0RCMTRDCis6MTBGQ0EwMDBCMDZFNUE5RjA4OEQwM0UxQTcxNjMwQjZFNUUwNDcxNkZGCis6MTBGQ0IwMDAyRkVBMTEwNzBGMTNGQzc0N0M4OTg2QTMxQUM1NkZEMjMzCis6MTBGQ0MwMDA1QUZCQkE0RDQwNTcxNzdDOUZCNTE3ODNDMTNBQjQ0N0NBCis6MTBGQ0QwMDBFNzBCMTdEQkZEMjAyNEQyNDQ1MzBDOUY0ODJFRURFN0ExCis6MTBGQ0UwMDAxQkM0QTYxRTM1ODkzQTlGNzlBODcyNDQ0Qzk5OUUxRjYxCis6MTBGQ0YwMDA3ODVGQThBRTA0QkU1MjVBQ0NERkI3NjQ5QjhFQUU0Njg2Cis6MTBGRDAwMDA1OUM2REE2OTdDMzA4RjJDODQ1RjdGRDk2NjI4M0JBMDg2Cis6MTBGRDEwMDAzQzM2QUEyQzFCRUEzRDg2RkEwQzQzNzkwNDdGRkVBQ0U0Cis6MTBGRDIwMDBCMzNCMEJFRDU3NzdCNkE1NUEwMjNBM0Q5QkQ5M0Q0RkYxCis6MTBGRDMwMDA4MEYyODY1NjVCNzUyNTk0RUI0QkI5QkM2RTM4MjgyODRCCis6MTBGRDQwMDAyNDZFMzRGODM1Mjg1Q0VGNzQyODYxNEI2RDMxQzJBMTA0Cis6MTBGRDUwMDBBRjE3Rjk0QTVEOTcyMDBCNDAwRjhFQ0VCRERENTRDNjFDCis6MTBGRDYwMDBGN0JDNTFFRjc1MEFGNDVFNURFNzdCRjQ1RUMyRjYwQkZCCis6MTBGRDcwMDA0RDQ0RTdFQjBCOEZGM0U3M0FERjI3QkRFMERFQjZFNTU2Cis6MTBGRDgwMDAwMTY0NkNCRDY2MkZGMTA1QjBFMkZDQzNFMUM1ODZBRTJGCis6MTBGRDkwMDA2QTE2NzQwQ0YwRDc3Mzk5RkU1Nzg5QkYxRTEyNjRBNEJCCis6MTBGREEwMDBDRjdFM0NDNTc2MUQwMzc0QTEzRkZGRkJCMTA3REY0MjQ4Cis6MTBGREIwMDBCNTIzRjlCNjhGNUEyNDc4RkUzRkVBREY5Rjg0N0FFMUIzCis6MTBGREMwMDBFRjM1MzlCMjUxMDgxNTYxQkY1QjU4QjAwOEU1RTBGNzZGCis6MTBGREQwMDBFQUYzMEU5QkUwQjk2M0U2RjAzNkU0QkRENUQ5NTlENTE4Cis6MTBGREUwMDAxMkYwQjU2M0NFRjA0ODAxRTRGQzc1RDk0NUJDM0MzNDUzCis6MTBGREYwMDBCQzBERTFGOTJGRDlBMzA5QkVDNzQ2ODY0NzlBQTBGQ0RFCis6MTBGRTAwMDA5RDlEMzdGMDcyNUU3ODFCOTZENTlEN0VGRUZDRDhGMEU2Cis6MTBGRTEwMDA0ODExREVDRjUxQTc1NTU3NDI3OTk3MUM5RkFFQUZDRTAwCis6MTBGRTIwMDBFNjdBQjQzRUJFREY0RkY0NTc2NEEzOUU1N0M3RTVDRkQyCis6MTBGRTMwMDBCQzVCREY5OThCRkM3NjlFODlDOTBDRjhGNEFFQjMyN0M2Cis6MTBGRTQwMDBGNkVDMDI3OEVDNkE0RTY2M0IzOTNBMDYyNEQwODdEMzRBCis6MTBGRTUwMDAzOUVBODM5QzY4MjdCRTFFRjEwMTlGMjdFNzUxNUY1ODRFCis6MTBGRTYwMDA4MDcyRjIyNDlCNzdCRDZGNjA1REY0RkVEMzQ3MzdFRDVGCis6MTBGRTcwMDBDNUY2RDNFNzE1OTMxQzExN0RGRTY3QjE3RkZERkE3NkI5Cis6MTBGRTgwMDAxMTVDRTFGOTY3QjM2NUNFQkY0NTkzOUY5RUJGQ0IxOTY3Cis6MTBGRTkwMDBDMkU3MUZCNEYzNzkwMUZERDAzQTNCQjQ3NUY5NUUzNjgxCis6MTBGRUEwMDBFNzkzREZDQkU2N0FBNEUyQkI4QURBQkI0OUQ3QzdEN0IwCis6MTBGRUIwMDA3NjBFMUQwREUzRUExMDU4MjdEQTM1RUY5ODk5NkEyNzc4Cis6MTBGRUMwMDAzRDI2ODlGNEExMEUxQzNCRDYzRjk0MTk1MkExOUY5QjVECis6MTBGRUQwMDAwNTE2NDBGRUEyRjM5MzBFQjczRjMzMzVDQUFFRTkyOEFDCis6MTBGRUUwMDA4MUIyNjNDMDhFRURBOEY2NjcyNjc5RjA5QTY2NDIxRDRFCis6MTBGRUYwMDA1RkU3NEYxRDNFRkU5RTJFOUZEMjVCNzkzRkU5MEYxNkI2Cis6MTBGRjAwMDBFREM0RjkyNDRCOENFNEREQzIzOUY5M0I1QjQ4M0Y5OEUyCis6MTBGRjEwMDA0REYzNjc3RTdGQTYwMEVEOUQ1QzlBNkQ0MjM4RUFFQjVCCis6MTBGRjIwMDA3NTYxQTJCRjk5RTYyNTcyQkI1QzVGMzcxREJFQ0Y2NkM3Cis6MTBGRjMwMDA3M0JCQjk1NjA0RkQwMkYwNEVDOTBENTI3QkEwNkY4QzA1Cis6MTBGRjQwMDAyM0MxQUVFOTFCQ0YyMkQyNDZDMTk5NDlFMTQ5NzhGRkNFCis6MTBGRjUwMDBGRjQzNzg2REM3RkFBRjBBQUZGQTY2RTAyM0E2MkZDMTU4Cis6MTBGRjYwMDA0NzM0Mzg2RTE0QkFDREU5OUM4RjkwREQ4Q0Y3NTExRTYyCis6MTBGRjcwMDBEREUxMEJGRTM4M0I4QTFFRTZERDU1NEY3QUE2M0VBRTJDCis6MTBGRjgwMDBFNDNCNUVBQUZBMEU0MzNBRkM4MEU4NkVERTNGMjU5MzFFCis6MTBGRjkwMDA5RDZCRDQwMzc1RkI0QUQ3NTcxRjRFRTBBRkVDRDZFNkY2Cis6MTBGRkEwMDBBN0U4N0U1OTZEMUNDOUM1RTEzREY3MDNCQzUyOTk1M0MyCis6MTBGRkIwMDA0NjNFN0FDQzEyMUVBQkMwRkJDNzRDQzEyNzVFQzI3MTU1Cis6MTBGRkMwMDAwRjEzNjVFMDIxODNEQTZCQ0UxMUE5M0RCQjhFMjcyQzgwCis6MTBGRkQwMDBFMjFBRUQxOUMwOTM3NTgwMjczNjdDQkZEQTQyRjY3M0JBCis6MTBGRkUwMDA4NzNCQjQ3OTExRTJDOTBEMjMxNEQ1NEI3Mjk4RTg1OUI3Cis6MTBGRkYwMDA2RDRFQTZGQUNCNERDNzE5RkE5OTIzOTM2NTE5RjU0Q0E2Cis6MDIwMDAwMDIzMDAwQ0MKKzoxMDAwMDAwMEMwMkJBQUVGOTg5QjFGNTJCOUJGNDBCNTkzRkYzNDI5NkMKKzoxMDAwMTAwMEI0MTNGMUFFMDQwMDgwRURDRDFENERGNTY4QUY5MzlGOTQKKzoxMDAwMjAwMDYzQUU4REY3MzcxOEFGQjg1RDVEQzA3OEJENEZDM0RCRTkKKzoxMDAwMzAwMEE1RDk4NEI3NjlBRDhDRkIyOTI0RkZCOEVBMjg3RDYxNzYKKzoxMDAwNDAwMDRDMEVFNzIzQzlBNUUxMTc3RThCRkFFNzA2QkI5MkM3RTIKKzoxMDAwNTAwMEI4MDk4OEZFMEZENjlFNEVFRDAxQkU3QzQ4RjhDNzM4MjEKKzoxMDAwNjAwMDVFMkU3OEMwQjk4M0YzM0RBNTBDRTE3Q0FGQjM5RERENzYKKzoxMDAwNzAwMDQ5RkUyQjMzOEQ3RkFCQkQ5QkY0NzA5M0NERUI0NjNGOTgKKzoxMDAwODAwMEYxM0M5MTZEQ0NDN0Y2NUFDRDMyRTI4OTExREUyOTM5QTcKKzoxMDAwOTAwMDlDQUYwREY2Njc4NjZGOEZGNjY3Q0VCM0FBRDYyQ0FDRjEKKzoxMDAwQTAwMEJGREI0RTc2ODFFRUQ3OUM5N0MyRTk0QUY3NkIyMjdEODMKKzoxMDAwQjAwMEM2OTMwQkJBNUZGMzE2MERBRjA2RDVBRkZGQUZCQzFBRjAKKzoxMDAwQzAwMDY4RUZGRjY4NzhBNkY0N0M5QTM3REZDMUU3OERGRTkxNzAKKzoxMDAwRDAwMDFBRkMwNUZERDZBQ0IyQkY4NzdFRDAxQUQ1REM2RDc1OTMKKzoxMDAwRTAwMDIxMUZCOUNBMUY4RUIyRDNEODI2M0U4RkUwOUJFNjEwREYKKzoxMDAwRjAwMEMyQTk1OTYyMUI5RkMyRjU1MUY5RkM1NzJFMEMyRDhERDgKKzoxMDAxMDAwMDlFRDcxNjBCOUY5N0ZBNEZDRTk4Nzk2RDcxQjEyNTVGRTgKKzoxMDAxMTAwMENGQkNGRTMwMjk3NjVFQTcyNzY5RjM2MkI2MzQ3ODRGRUMKKzoxMDAxMjAwMDkzNzNCNzM0M0JERjEzQzZDMTE1RTcwNTU3QjYwQUU2MkMKKzoxMDAxMzAwMDU1MzgzMEFGQUJEMTk2MUI0QUVCRDkxNDhGMEVBRjRFNkEKKzoxMDAxNDAwMEI4OEVGRjRCRTZEQkZFOTgzRkRFN0M4REYzREM5M0UzNUQKKzoxMDAxNTAwMEFGQ0E5OTQ0NzREMzJEOTcwRUUwNzU3MDMzQ0NBQjE0QUQKKzoxMDAxNjAwMEQ3NzU2OEE4ODVENjk1RTMyNzYzMkUwNUY5RDhDQTg1ODMKKzoxMDAxNzAwMDMwMkZCQ0I2QTQ5MzNGNkI5RUQ1REI4NTdFNURGNkMzNjYKKzoxMDAxODAwMDE0NkQ5RThDRjhDMENBQ0QyMzg5MkUwMTZGMzlERDNFRDcKKzoxMDAxOTAwMEM2RTM0MTJCRUREQ0NGQjA3MkI5QUNBODMyQ0VGRkM3QkQKKzoxMDAxQTAwMDY0MDc0NzgwQkY5MjVFRDIxQ0NCRDdCRjE4MEVGNkFDNTcKKzoxMDAxQjAwMDlBRTI2ODM4RDhCMkU2MTdDNzU5NzdENTRBRjg5QzY4RUEKKzoxMDAxQzAwMERERkY4RjE4Qjk1REM4NDlFQzY3NjNBQjYyRkQxNEU4QzkKKzoxMDAxRDAwMDZGRUMyRjhCODNDQjQ2QkYwNzYzN0ZCM0M2M0VBRjI2NDIKKzoxMDAxRTAwMDg4NkY4NEJGMTc4RDQ3QzdDQzFBMUVERDY5MjdGOUEzMTYKKzoxMDAxRjAwMEUzRDEzMTI3OUZBRjExOEYxODY4RDE0OEM3RkFCQzhENjIKKzoxMDAyMDAwMDcwOUM4NzcwOEMxMzg3MDA3Q0NBNDMzODFFRDNFQzMzRjQKKzoxMDAyMTAwMEMwQTczQzg0QTM0RTA3QjczNDczN0U2MDg0REIzMzg5NjgKKzoxMDAyMjAwMEY5REE1NzlCODcwMThGQkZFQTNDRjRGQTQ0RjNEMEY1MjMKKzoxMDAyMzAwMERCNERDMkYyQ0Q4ODlGOUIzMjk5REM0QTdBNzA3ODJDRDQKKzoxMDAyNDAwMERBNDkxRTRCQTgwOEM3QjVDNTAyRjQwQkVERDY2OEZEMDgKKzoxMDAyNTAwMDkzMjcwM0U2RjdBNzIzREMyRjdBNUNFQkQ3MzhBRUFFMDMKKzoxMDAyNjAwMDFDREQyRjFBRUIzNzZCNzQ0NUI2QTMxRUQyOThDNEU1N0MKKzoxMDAyNzAwMEUxQjk0MzRFQTIxQjk2MUI5RTg3RkFGN0Y5MDM1Njg2RjcKKzoxMDAyODAwMEZDQjU0MTA4RTdFMzczRTcwNEZGN0M3QUFFMjVEOThCMjAKKzoxMDAyOTAwMDcyNTFGNzM3OUU3ODkxRkIxQjU1MDZGNjJGRkFGOTgyQkIKKzoxMDAyQTAwMERDNUZEQUE4RkU2QzBEQUVDM0M1MUNBOTA5RURDRkM2OTQKKzoxMDAyQjAwMEFFNThGRjFBQ0NDRjg1RjMzRDY3NjI3REY4N0M4MzE4N0EKKzoxMDAyQzAwMDVBOEEyNkVCNDYwQkQ3MDczNjlBNTgyN0FFREY4MDVENTEKKzoxMDAyRDAwMDdFM0M5RkVDODQ0Qzk5QTEzRkE4QzFGNDVFRkU4QTI4MjUKKzoxMDAyRTAwMDNCQkU0MUFCNkZDOEUyRkUyOThDNDc5MzlGMURCQkYyMUEKKzoxMDAyRjAwMDBEODY0QkMzODYzMzlGNjEzQ0FENjE5RjkxNUU2MkU5ODEKKzoxMDAzMDAwMEE5NkVBMDJDNUMxNEIwQkRBODdBREYwMDNEOTEzRDhFOTMKKzoxMDAzMTAwMDc4NThDOTQyNzkwMkZBRDU3ODM5QjlBQTJGODQ3MUVEOTMKKzoxMDAzMjAwMDQ2Q0RFRjNBQjQyNzNDMDNGNTA1Njc2OTI3NDMzRURBMkIKKzoxMDAzMzAwMDc4OUFEQjIxNTMwRUVFNzgxNUZENkRFRUFBQkU5MUE4REEKKzoxMDAzNDAwMDkyMzQ2QUYxMDdBM0ZEMzNGOUUwNDMyMkZBODc3NEZCODQKKzoxMDAzNTAwMDI1Q0ExRjU1MzQzQkM2MUZCOTlBREU0M0ZGMTZGNjE3NTAKKzoxMDAzNjAwMEM2NUJFOEQ3OTZCODlFQkI1MUQzNzM0MTFGMjZCRUI5NzIKKzoxMDAzNzAwMEIwQkQ4MEY0NjFENDU3NTFFRkQwRkQ2M0E4ODdBMDNFOTMKKzoxMDAzODAwMDNBMjdCN0MyOTIwQkYzRkM2QjZFODU5MDNCODlGNzQ3MTcKKzoxMDAzOTAwMDc2M0YzQTVEMjY3RjBFRkZEMkUwQTMzRjg3N0VCMkNGNDUKKzoxMDAzQTAwMDhGMDM3MDdENkE4QUMxRkZCRkUyQTc0MzA5Q0YwRjI0ODQKKzoxMDAzQjAwMEQwNTM4N0U2RjZGQkZGRDNEMUZGQkY0MkYwQTYyMzlFQzIKKzoxMDAzQzAwMDlGMTI4M0U0RTc1RkNDNTRGMjFGMkY0NUJGM0FGMUMxN0YKKzoxMDAzRDAwMDZFRjI0QkRGREFDNDk0RjUxNDQ3MEZBRUMxNzJGRDEyMTIKKzoxMDAzRTAwMDI2QUY0N0JGNzQ2NTkwRUFEMTJGRkRDREM5M0M0RUU1REQKKzoxMDAzRjAwMDhEQzI1RjhDMDM0NTk3RDk2RTI4QzdGMEU5M0VGMjczMzIKKzoxMDA0MDAwMDM3NDAwQjVCMTRGNDIzQzQzRURGQzg0MkQzMjVDNDhCQjIKKzoxMDA0MTAwMEFFOEJENjk4NzYzQTM4OUM2RUQxRjA2NUIzOURGQkI3MUIKKzoxMDA0MjAwMEE3QUNEQTIxQjIyODNGNDNDQTA0QkZFRjFFQTQ4NzlGQkUKKzoxMDA0MzAwMDlBQzlCRkZBOUZEQUZBRUFGMEQ4OTM1MzkxOENFQjk1RjgKKzoxMDA0NDAwMDg0N0UxRjdDRUUxRTJCQzlEOTkzMjZCNjA0RjFFNTQxQUMKKzoxMDA0NTAwMDM3QkI2NTM2RkFCM0VFNjZGRTVDMzNFMjg1OUMxNUVEN0MKKzoxMDA0NjAwMEVGRDJBRkVCMEZEODk3MjA5RTREQ0JFNTc2ODA3RTNGNDUKKzoxMDA0NzAwMDkyNjNBNjMyRjlBQjQ5M0Y0REE2RjgzQkIwQTU3MTg4MEYKKzoxMDA0ODAwMDg3NjVEOUJBNUVDQ0M2QTE5RkZDM0Q4RDNGMzVEQ0U4QkYKKzoxMDA0OTAwMDA4NjI3QjYxMTNFNzY3QjM3MkI5M0Y2MTU2QUU4NUQ2RDgKKzoxMDA0QTAwMDRGMkZGN0ZCOEIzNDNDODM3RUE4QkRBNDg5MkMyNkZFRkUKKzoxMDA0QjAwMDc3NDNGRkYzMEY2OTc2MjhBM0Y5NkU1QzlBQzRGNUU4RDkKKzoxMDA0QzAwMDdFN0MzNzExM0Y0QjJFMEU1ODgyQzQ0RjJBODg5RjQ1QTEKKzoxMDA0RDAwMEZFRTBGMDIyNUNBQUNFRDQyREM1NzlGQzcxNEUxMkMzODkKKzoxMDA0RTAwMDdDODUwNTVBN0NBOTI5RDc0REVERUFGMUE0MzhGQUQ3QzUKKzoxMDA0RjAwMENEREQ5RTAxNzlBM0UzQTcyRTY3MEUzOEY5QkMyRjM1MTkKKzoxMDA1MDAwMDJGQzA3OEFENUE1RjQ0RkM1QjFGQzcxNDgzNUU5Mjg4OEUKKzoxMDA1MTAwMDJFOUFCNTc1MzNDNkM1MDBBRUM5Qzg2NzBGOThCOERENDkKKzoxMDA1MjAwMDc1MDAxMDhCRkM1NjlENUFEQzEyRUM2NDk0MDMwN0Y2QTAKKzoxMDA1MzAwMDE1OTA5RTNENUZGM0E3ODI5QzI0RkIyQTAyRjI4MkFGQjYKKzoxMDA1NDAwMDc3NzBGMzQyN0NBRTMzOEZFMkI5RUY5OTQzQ0YzQzg1QUQKKzoxMDA1NTAwMEYyRjYxMEI3MjNGNEY1Mzg3MDYwNzgwOEU5NzdDQTk5OTUKKzoxMDA1NjAwMDBCNTkwOEZGMDNBNzdGMzQxQ0UzRTQwN0I0Qjg2NDlENkMKKzoxMDA1NzAwMEE1M0I5RkVDN0QwQkQ3NTNFQjVDRERGOTA4QkY5NzM1QUUKKzoxMDA1ODAwMEJDQTk0QjgyMzJEQzFGMzkzNEY4MzBGMjFGM0RBRjAwN0EKKzoxMDA1OTAwMERGNzNEMzdDQkMyRUY0Mzc5Q0QwRUNDOEUzNjA1N0UyMDkKKzoxMDA1QTAwMEI4ODA1QUZBMzA1RTBBRUI5RDg5RTVDOEJBNzRBRUVGOUUKKzoxMDA1QjAwMEMxQjgxMDJGNEUxQzFBNEJGM0RCNjhFNjc4QUNFRTE3NkYKKzoxMDA1QzAwMEM4M0Y3MURDMUMzOUQ1MENDRjFGQ0Y5Q0M4NUE2NDk0MkUKKzoxMDA1RDAwMDc3OUYzRUQ1OEJFRDZGMTc5OTU1QzZCQzhENEYzRUVFN0MKKzoxMDA1RTAwMDgyRTdDRjgzOUQ4QjdFQjM1QTUzNjA0NjI2RjI4QjE3RUEKKzoxMDA1RjAwMEI5QkQ2RTVDMDc5NDdGRDE3MUJDNzMyQzkyNDU3RUJERjIKKzoxMDA2MDAwMDI1RDk5RDg4M0ZFNzBFMTY1MTNFMTJGM0M4NEM4NTcyREUKKzoxMDA2MTAwMEUzN0U2RURGMThFM0NCMjdDREIxRjg2RjZDMTdFNzg1NkIKKzoxMDA2MjAwMEZFQjU0NkZDOERGMjNERkFGRDM4RUQ3RDUxRjk5QzM5NjEKKzoxMDA2MzAwMDlDN0YyN0MwNjNBQTM3RDg5MzFCNjVBNzM2QkU5MjQ5MTMKKzoxMDA2NDAwMEZDRjhDNEZEOUZEMDdBQjI3NjFFMzczRDY5RjZDRkMzNjEKKzoxMDA2NTAwMEYxQjkyQkJCMkQzNTUxRjhGODNCOEQzRkQ3NUFCOUJDQkEKKzoxMDA2NjAwMDA2RkU2Qjg5RTYzNzdBN0Q1OTA1OEIxQkRGN0Y1QkEzMUUKKzoxMDA2NzAwMDczNjcxRjk3N0I4M0VCMzk5RURGQ0U5RTEwOTE1RkZDRTMKKzoxMDA2ODAwMDJFRDc0QkVEOEREMkYyMTQ2RTY3N0YzQTZDNDVGREE0RTgKKzoxMDA2OTAwMEIzODRGMjIwNDZBREVBMjYzRTAwRTMyNUZDM0NCOTM5OUUKKzoxMDA2QTAwMDg1RjgyM0RCQzBGMTc1RDEwRkFEQzQzRjE2ODFGQ0UwQTYKKzoxMDA2QjAwMEY2MzZDRkNCNjIxQjc4RkVDNUE5N0I3Qzg0Q0Y2NUFCQjkKKzoxMDA2QzAwMEJCQ0I4ODFFREM0QzQxQkRFNEE1QjZGNzU0MTFFQUU3NkMKKzoxMDA2RDAwMEVGMTY0QTMwRUY2QzdFOUI4RkVDOTQ1QkY3Rjk2ODdERTgKKzoxMDA2RTAwMEE3Njg3Q0JERDZFQUE3M0MzM0Y2Mzg4RkMzMkQ3ODc4NEYKKzoxMDA2RjAwMDI5RjU1MzlGQ0NEQzIyRTk3RjIxMEJDQUU1MjVCQjA1RjgKKzoxMDA3MDAwMDg2NzQzNUE1OTNGM0ZGM0FBOUZCMzBFQTkxQzZCQzA5N0MKKzoxMDA3MTAwMDE2OEE4RDJGQTMzQzYyNTE3QTI2Q0ExRjY2QjAwQjYyREYKKzoxMDA3MjAwMEQ3NURCRDI0Rjk2Qjk0MzdFNkJDRjhGMjE3RUMzRDRCNkUKKzoxMDA3MzAwMDFFNUY1NzJFMjdGNjBBOUM2RjY4RjJCNzFFRTUyRkVBNTgKKzoxMDA3NDAwMDZBOUFEQ0QzRTVFNjYyNEQ2RTlFMTJCOURDNUU2NDdEOEEKKzoxMDA3NTAwMDg4QUVDM0YzN0MzNENFNUIzMTFFNENGMUNGODgwNUY1RjcKKzoxMDA3NjAwMDkzNDQ3ODMxNUMxQjk3OEUxNzIzMzA0OTY2RTgwMDVFMEUKKzoxMDA3NzAwMEQ0OURFRUVFQjU5MjlEQTlCQzg4NzFFRUJBNTVBQ0RCNjYKKzoxMDA3ODAwMDA5NzZEQTIyQTk4OUU0QzMzMDk5Qzk5NDhGMzczRDQ4QTQKKzoxMDA3OTAwMEUzNEE1RjA5RkEzOUFDRjMyMjhDREQ0RUI4NzRCRDYwRDAKKzoxMDA3QTAwMDkwMUU2MDkwRkZGQUI4NzUzQzMxRUE3RjUzNTY4NTQ0M0QKKzoxMDA3QjAwMDhBMzNFNTMzQkFBRjVGNjVENjU5ODJFM0FEQjY3MUZERDIKKzoxMDA3QzAwMEJCREFFNkU4MTZEMURFQUMzNDlGOERCNjM3QUEyNTdGQkEKKzoxMDA3RDAwMDc5MUVDOUNCMTFFRTUzNjM4ODQ1MzA2QzU3RjFGOUFCRTQKKzoxMDA3RTAwMDQ2NEYxQUQwMkI5MzRCMjM2QkVFODdGNkNDNkM5QzA5QUIKKzoxMDA3RjAwMEY5QTRERUJGRTg5QkI2QjgxOEUzN0E1MjFGRDkyQjJDQjgKKzoxMDA4MDAwMDgzQzlCQkEwQkZFQjhCMzk1QzkzNjExRDc2MDA1Q0NEQzcKKzoxMDA4MTAwMDkyNEFGMDMzREI2NDc3OEIxQkQ3QkY4RkUyMzI5MUExMTIKKzoxMDA4MjAwMDhDRkM3NEZBN0E2RDczMzIxNUYzMUNBRjJGRTZGNDdERUQKKzoxMDA4MzAwMDdEMzFGNzI3QzNGQjE0RkYzNTE3QzJGQkQwN0VDNTAxRkUKKzoxMDA4NDAwMDNCRDFFNUM3RkI5RDIxOTRDRjIwNzc0NkI5QTEzRUVENzIKKzoxMDA4NTAwMEY3NjBBNzQwRjlEQzAxMjdFOTI5RTczNDc5RTFEMUZEMDgKKzoxMDA4NjAwMEI1NkMwREI1Nzc5Mzg2MzcyQUFCMTg4RUY2MDgxM0FFQTQKKzoxMDA4NzAwMDFEMEU2MzY3QkE5RTVDRUY0RTE0QzdENEVBN0Q3RDM3QzgKKzoxMDA4ODAwMDcyRkNCNTkyQkVGMEIxM0JGQzdEMkNDMzc4MjgyNzY3ODMKKzoxMDA4OTAwMEI2ODY1NzhERkJBNjk3REM4NUZDM0JFMDUwMzhENDgzQTkKKzoxMDA4QTAwMDI1QThGRjU4QzVEQjZFQjQwMUIwNjc4OEFCMjI3NzIyNUMKKzoxMDA4QjAwMERFOEY3NEM4NTY3OEE1NzJENEJCQkY5OTBCRTUzRkVDQTgKKzoxMDA4QzAwMDMzMzMyQkUyQ0ZBRUVCNTJCQUYxMzVDOTlGMTExODNCNEYKKzoxMDA4RDAwMDc4M0M0QjQzRTZFM0UxMjgzQTVFQjYzQkI2NUNERjE5NzEKKzoxMDA4RTAwMDVCNkU2NEQyRjE3MDE0RkY2RjdFNzdFOTJGNUU4QkMyNkUKKzoxMDA4RjAwMEI3QkJGMjlDOUU1M0M5MEM3RDZGQ0E0NUEwQTc5Mzc3RTYKKzoxMDA5MDAwMDc3QjExMzI4MEJDNUVGQTYyMDdGNUMwMEU0MUY0RkFGMjMKKzoxMDA5MTAwMEY4RTRFRTI1QkY3ODBEOUU5MzJDMTVBRDFDOUZCQzE2RjgKKzoxMDA5MjAwMEE0QUYxQUQwMUJFMkQ5QTEyNTc5N0M3REFERDZBNkQzODAKKzoxMDA5MzAwMDNCMDAzRUQ2OTdBRDRBMEJCQzM1MkIyRkI4MDFERjZGN0QKKzoxMDA5NDAwMDMwNDU3QTcxNURBREEzQ0U4RTQzN0Y3NkM1QTgwQjk0RkEKKzoxMDA5NTAwMDRGRjBGMTNGMzMwNUUxRjRCMTdEMUFFMUQzQzc5QkVERDAKKzoxMDA5NjAwMDVFQjQ1MzNCQjIxQ0RDMEZGQjhBMTAxMkI4REQzMjZCNTUKKzoxMDA5NzAwMDUyMUFFNjhCRDA1QzgwOEY0NUQ2NkM0NjNFM0REOTJBMTQKKzoxMDA5ODAwMEFGOTY2OUJBMzYxM0FEMzc1ODZGNzBFREIwQTg2QkQwMUIKKzoxMDA5OTAwMEFGREEwMTA2NjQ4QjgyNzY1RTlGMEI4OUUxOTdCODhFOTEKKzoxMDA5QTAwMDg4REZFMkIzMTYxQkZDRjRCNUY5OEI1QUUwQjk2NTgxMTgKKzoxMDA5QjAwMDI0ODY3OTdDRDI2NzUyMDBGMUVDNUU2QzJBQ0FFRUQ5QUIKKzoxMDA5QzAwMDlEQzdFNTRGQkQyRDZDOTkwNkNGMzU1RUI4QUQ2QUE4QzEKKzoxMDA5RDAwMDY5QzBDRjZGMzUwN0ZEQzM2MURDRTZBRTkyRUVFMTcwMTIKKzoxMDA5RTAwMDZCNzFGMzc0QjJFRjgwREY3MkJFNzg4OEYzQzVDNTc3QTAKKzoxMDA5RjAwMDRFQTNGQkMyRUMyQTlBRUYyOTk4MkZDMkU1RDVDRDU2MUIKKzoxMDBBMDAwMDlBRUZBOTkxMEVCMkI3NEY2RDEzQThCQzU4QjY1MDFFRkQKKzoxMDBBMTAwMDIwRTgyNzQzQTY3OUYwQkU1OUI2QjJDMUYwNjhEQzc0NkQKKzoxMDBBMjAwMEVGOUFDRDUwRkZGMzRDOTEwOTgwRkZFRjZGRkQwOUM1QTAKKzoxMDBBMzAwMDIzREU2N0JDN0Y3NTlGNDg3QUNGRkI3MkE0QUMxQkUxQjUKKzoxMDBBNDAwMEU5NkQ3MjQ1REI5MzhCQjc4OTAxRTQ5NzhCQjdEREZFQzcKKzoxMDBBNTAwMEYzQzkwOEI3RDkzNzk1MjIzQ0E2QkE2RjRCRjMzQTA2Q0IKKzoxMDBBNjAwMEVBNzU3RDRGNEEyRDdGMEFFOTcyRUE2N0QzRkJBNkEyOTkKKzoxMDBBNzAwMERFQjUwREU4MDZDNjJEOTk1ODEwRUQ4RkQ3QjY1RDRENDEKKzoxMDBBODAwMEZBRjZFMkVBMjQzN0NFQ0ZCQjc1RDcwQzk0NkZFRjU3NTYKKzoxMDBBOTAwMDBGMzNEMUJDRjYwODRDNDY3OEI4OUJEM0YwRkU2MjQxQzgKKzoxMDBBQTAwMDBBQzRDM0FCNDU3OTNDOUUzMDZEOTQ0MzQxN0ZDM0UyOTkKKzoxMDBBQjAwMEI3NDRDMjE3QTBCMzFCMzE4RTUwQkZDRDRDRkFGQzZCQUMKKzoxMDBBQzAwMEIzREZGOUNENUNDRjAwOUQwOUIzMzdDRDlBODJDRjNGMUMKKzoxMDBBRDAwMDZEQTZFN0ZCRjVBOUFEMUZCRThCN0UwMUZDMDNDOThFOTkKKzoxMDBBRTAwMDcyODhFMDY3QTQzQkVCQTg1NUY5MzgyRTIzRkQyRDVFRjQKKzoxMDBBRjAwMEREOTRDRkUzRkI5NzQ2ODc2QzJCRDAyMUYwRTNCMzQwMjYKKzoxMDBCMDAwMDI3MTc0RDdGMTcxREZFRjk1MkU4OTA4RDQ4OEQ5MURGMTQKKzoxMDBCMTAwMDgzRjk5RTRBQ0ZFOUYxNTE5QkMyRkNCQjFDOTQwRkUzQzEKKzoxMDBCMjAwMDE3ODA1RjhGQ0M5Nzg4NEU0NkU2NUJFODM5RTlCRjU2NjEKKzoxMDBCMzAwMEVDN0UxM0UwRjQ3ODVFRDA5MjhGN0ExN0YzOTdBMDdDNjYKKzoxMDBCNDAwMEY2NDZFNDBBNzRDNTNBMzRCRDkxNkRFNUY5RTE2ODVGOTMKKzoxMDBCNTAwMEUwRkE2RjFDQ0E5RTVBMUZFNTlGQzlDQ0Q3RUNDMEJDRjcKKzoxMDBCNjAwMDYwMEFCNjczRUU3NzE3N0E3MUJEMUFCMkNFOEU0M0JEQTYKKzoxMDBCNzAwMEJBRjFEMzNGNTM1RTg1RTMyMENGQzc3MTI4MTFDQTUzMjIKKzoxMDBCODAwMDMyN0IwMjg0OEYzQURGNkY1NEI4MUMzMkNFQUIyRDlGN0MKKzoxMDBCOTAwMERCQUQ4RDlFMDhCNUIzQkY4MEQzQkIxRThGRENEMjlDNkUKKzoxMDBCQTAwMDQ0NzFBMTJEOUU5MDlERkI1OTQwREY4M0Y2Njc5NjhBODQKKzoxMDBCQjAwMEM0Njc2Q0E1QUQwQ0U1MTgyQjE3Mjk5RTMzRjVDMjJGMjEKKzoxMDBCQzAwMDE4QzZCRjdFN0VDNTc0MDVGNTRBNDdFOUFCRDIxMDlDQjYKKzoxMDBCRDAwMDY3Qjk1OUFCN0Y3RTZEMzZENEZGRTI4QUFCQzgzRTVBMDcKKzoxMDBCRTAwMDkxMjE3QTUxQUY5QTU5OUFBMzkyRkNGNEYzQkNEREE5RjIKKzoxMDBCRjAwMDE3NTI4ODBFNjcyRDlENDU3QUE1M0VERTAwQjM3OTFERkMKKzoxMDBDMDAwMDgwMjdCMzgxNThBM0YzOUI2NzVENjFGNzNBQTJGMEVCQUQKKzoxMDBDMTAwMDhGRUQ0MjE1RDdBQkJEMjlENzhGRTU3RUExQ0U2MjJFRDEKKzoxMDBDMjAwMENGQTNFMUIwMjJDMzQyRkRGRjM1NzdEQTY0ODRFRkQ0NkQKKzoxMDBDMzAwMDJCRjkzQTdDQjBDNzFBNUEwREZEN0U2MDhGNkY0NzU2NkMKKzoxMDBDNDAwMEU1NzM3RjZCQjY3NDBERjFBNURCRjY1ODI5M0U3RjQ2NDAKKzoxMDBDNTAwMDg4RkZGQ0FENkI0NUNBMkI1QUJBNTY2MDIxRThFRjgzN0EKKzoxMDBDNjAwMDY3NUVDQTQyQkVGRTg3NUQyRjY1RDU0NDhEMjdEMUZCRTYKKzoxMDBDNzAwMDBCRjMxM0Y5NzdCQjE3NDREQkRCMzMyRDNDMkVDMDI2NzcKKzoxMDBDODAwMDU4NjNGQ0JCMzM1RDVBN0VGRTk3OEM3NzdDMkJBMTlGMEIKKzoxMDBDOTAwMEZGQTcyMzcwQkM2RkY2RkJGOURGMTgxMTFERUZFODhGN0IKKzoxMDBDQTAwMDVCMjlEQ0NGNkY4QzU3RTU5NkZGQkIzNjVFOUUwRkRENzAKKzoxMDBDQjAwMDJDNjlFMzU1QUMzQzZFQjE5MEM3QzU1NzFFMUE0Mjc4RkIKKzoxMDBDQzAwMDM3RDMxMjc5ODBFMjU5QUY4OEIyMTZEN0YwREJFOEZENEUKKzoxMDBDRDAwMDBDNUU5RjYwNUVDQ0VGQ0ZGNTk0OTFCRjg5QzYyMzc0MDQKKzoxMDBDRTAwMDA5REQ0RUQ3NTc5ODFGRTM3MTBDRTNGQzZBMEU4QTcxMzkKKzoxMDBDRjAwMEUzNzI3RjJEOTA3OUJDQjMzODQyNzZENUYxMzc5RUMwMzAKKzoxMDBEMDAwMEM4N0IzRkJFREIwRkZBNENEMTc5RjRGREZBQUM4NkRGMkQKKzoxMDBEMTAwMEQ3MjE3RUMzRkNFQzZCNzkzOTExNUUyN0UyNTcxOUY5QjQKKzoxMDBEMjAwMDlDOEU3NUZDM0VCRTM2MjcwNUYxRUQxRTVCNDNCODE3NjEKKzoxMDBEMzAwMEUwRTcxNzUzOTg3RDE4OTRCNUY4QkZGQTJFQ0Y2MzE1RTYKKzoxMDBENDAwMEEzRUMxQ0E0ODM2REVGM0FDOUNFNjkzNTM3M0Q4RUZCMDkKKzoxMDBENTAwMDdFRDQxNjg5RUQ4MkZCOUVBNDg2NTAwQjk0QkQ2NjI3MzcKKzoxMDBENjAwMEU1NERERDkxMzQ2QjA3REE3NTYxNTA3MDA1Mjg3RjkyOEYKKzoxMDBENzAwMDc0NkMwN0VBMDlDQzk2QzJDQ0QwOEY1QUExQkQ2RkIxNzIKKzoxMDBEODAwMEM5QURBMDVGM0M5NkVDMjJGRUQyQkM4MDkxRkM0RTY3QzAKKzoxMDBEOTAwMEREODIwMDAwMzk5ODlGQ0RGREI0Q0I1RTE0MjhGRjE4OEEKKzoxMDBEQTAwMDI4MUVGNTNFMjUyN0JFM0VCQTU3QTM4QjVGNjEwMjBENzQKKzoxMDBEQjAwMEM2RTVBN0M3N0ZFRTYwQkVFRTE3OTM4MkUxMjgzQkVGNDIKKzoxMDBEQzAwMDVFNDFGMTEyREY4MTNGQ0M4RjM0QjNCRUI5QzQ5NzQxOEQKKzoxMDBERDAwMDhGRkYwNUM4ODNFMUUyOEZDOTNGN0JFMkVFRTBFM0YxREMKKzoxMDBERTAwMEY2NDlFOEQ3MDVEM0UzREJFOUFGNkJFMzJCNkMxNzQyOTkKKzoxMDBERjAwMDY2MTdEMUFGNjk0NzBDRkQ2QTcxM0M2NzlBMDIxMjA2MEIKKzoxMDBFMDAwMEUzQjczQzRFOTdDQkY0N0NGOTRERThCNzFGNTZDRUM3RkQKKzoxMDBFMTAwMEU4RjI4NzE5RUExNzE5RUREN0IwRTAxMEE0QTcyOUU5N0QKKzoxMDBFMjAwMDI4REY1NjJFOENGNUE3NjVENEFDQ0QyNEJGNUVDREY3NTgKKzoxMDBFMzAwMDY3QTFGQ0RFNjQ3NkFDMTU1MkYwMUFFQjhGREI2NEYwMzAKKzoxMDBFNDAwMEM3N0QxMTVGQzg0ODQ4Mzc5MzMzRDBCRkIxNjkyMEZFRDIKKzoxMDBFNTAwMDQ3RjhEMzNBNUYwRTg5MDJDRDgyNDVDN0I1RDM1QUJENTQKKzoxMDBFNjAwMEJENDFENDgzQTZEOTk0OURDQTYwRkE2MUU1NEEwNkNFRjUKKzoxMDBFNzAwMEFCQkM4MEMzNEZBN0U3NDYwRDM1ODU4MzAyRDlBNTgzNTgKKzoxMDBFODAwMEY5QTEwNkNGRkExMTA0NEY3QkZCMUQ2NDM3MjU5NzcwM0IKKzoxMDBFOTAwMDNGNzZGMkQyOUEyMEYyOUY2NEUwM0Y2OEM3NTkyQzREMEEKKzoxMDBFQTAwMDAyQURGRjE0NkVCN0FEMTQ3ODc5RTUzNDU5NTZFMTc5ODcKKzoxMDBFQjAwMDhCNEJDQjk3QkQ5NkU3NjdBRkI0MDc4M0QxRjFCNENCMkIKKzoxMDBFQzAwMDREMkJBNjQ1RTdFNUNBMENERTQ3M0UzQzg3RjczN0QzRjYKKzoxMDBFRDAwMEI2OEFFNzA1MDc0MTQ3Q0ExQzgwNjM4NTA2QzdEQ0YyNkUKKzoxMDBFRTAwMDI0OUVBNzdFQkI4REZDNUI1QkVERUQzNDVFOTM5N0RCQjAKKzoxMDBFRjAwMEQ5MzVFQkVEQzRFRjg2OEI4NTE0MzdFOTMxNzNGQzUwOUYKKzoxMDBGMDAwMDlEMzZBMjU3QTVFNzZEQ0EwRjFCN0U1OTg2NTdGNDQ1M0IKKzoxMDBGMTAwMEUxQ0Y2REJDNUVDNzBCNjZDODJCQjA1OEJDQkRFOEJGNDcKKzoxMDBGMjAwMDgzODEyODk4OTdCMjUyRjBGNjU2RDBCQ0U0ODhBQUUwQTQKKzoxMDBGMzAwMEJDMzVCRTNDMkU4OUNCMTEzMDM3MzMzODVDNzk1Q0NDNjQKKzoxMDBGNDAwMEIwNUU4MDM3RENBRjNFRDZDMUZENDYyQ0U4MjVCRENCNzgKKzoxMDBGNTAwMDMwREZDMTc4QjNCRjEwRjk2RDRGM0ZERTc0MTVDNkUzQzMKKzoxMDBGNjAwMEI3MEZCQUJEQkQzQkEzRjE4NTc5RDdBMDVGRjUzRTEzOUUKKzoxMDBGNzAwMDhCQUM4Rjg3M0Y0QUFDOUQ2RkNDOTMzM0RBRkIwRENEQTIKKzoxMDBGODAwMEQzMDM5QUZEQTFEQTY4M0QyRDY0N0YzNERDMzkyREMwOEUKKzoxMDBGOTAwMEVEOEZDMjE2RjQzRjM1QUUwMjQ5MDVFRjRDM0YyOEQ4MUQKKzoxMDBGQTAwMEIwQkRDNjM5MkVCMkJGMUJCQkY2NTJGQ0JDQTE4QTI5MEMKKzoxMDBGQjAwMDM4OEMxQUNEM0ZBQ0NGRjNCODk5QzdGMTQwNjY3NTYyNTMKKzoxMDBGQzAwMEZDQkVDMzFEREU4RUZCRjIzQTk2RUE3OTNDM0NBRjQ1OEYKKzoxMDBGRDAwMEVEMTJCNDNDMUUzREVGMkI3MjBDRkQ5RjFEODI5N0ZDNjEKKzoxMDBGRTAwMEEwRkRGQkZCNjBGRDc5RkVDRUE1RTU4MTM5OEIwMzNFQkMKKzoxMDBGRjAwMEI0QzQyRkNGN0JFMjk3NDk5MzJFMjE4RjU2M0REMzgxRTYKKzoxMDEwMDAwMDc5QjI4OUYzNjg1RkJGMDFFQjZEQjgxNjVBM0RBMjAxNTIKKzoxMDEwMTAwMEU4Q0I3QUQ5NkZGNzYyRkVDRTQwQkQwNDc2QTdBRDRCMjAKKzoxMDEwMjAwMEUwRUZBQkQ3REU3MDk1NDRGQjcyQjRGMkExNDdEMDFGNUUKKzoxMDEwMzAwMEZFQTA5REM1RjQxNzNEM0VDOUQwM0U5QTk2MEVBRkZFNjgKKzoxMDEwNDAwMEZDQjZEOUQ4REVBMzEzQjRCMkZBQjc4N0ZEMzBCRTA3MTkKKzoxMDEwNTAwMENEQjFFRDExQ0E2OEVGNjM0MUVGQ0YzQkU2OTk4RTBEM0MKKzoxMDEwNjAwMDIzMDZGNDc2RDBFM0VGMkU5ODM0QTBCRkRGRkJDRUNDN0UKKzoxMDEwNzAwMEY2RjFEMDU3QjJGQzI3REEwN0E1RUJFMThEMUU5RTU3OUIKKzoxMDEwODAwMDZCQzRGM0Y1MUExRjAzN0I3ODA2QUFENkY3Q0U1OTFFNTgKKzoxMDEwOTAwMEMwNzZGQkYzREUwRUNFRjdBMzFEQUNFN0JEMzVBRTBBN0UKKzoxMDEwQTAwMEQwN0UyOEQwRkIxRjI4QzAzQ0RBREY5RDNENzU5OEExN0IKKzoxMDEwQjAwMDlERjkwMUY5MDMxQTNGOTVCOERGMTlFQzA3MDFGMEM1NTYKKzoxMDEwQzAwMDc2RjAyMUMyMUZCNkRCMUM0MkQ3NEU4NzVCNjU4ODhGNDYKKzoxMDEwRDAwMDFEODc4NDQ5ODg1RjhDMzU2NUREMDBCMDNGNTVFMERGQjIKKzoxMDEwRTAwMDg4RjMzODk3MjAzRUZFN0MwMUI3REIxQjBCMkIzNkU3REQKKzoxMDEwRjAwMDIzQUM5RjE0MThFQUUzRUIwQkZGNDg3NjQ1QzNGRUFCMjUKKzoxMDExMDAwMDI2NDVFRkRGNUJEQUY1MjhERjA3QjZEQjFDNzdERUNGOUQKKzoxMDExMTAwMDE3ODgzQzhGNzhGRjBCMTQzRkY5MjAyNDEwQ0QyRDkxQjgKKzoxMDExMjAwMDQyRUJEMERFNUNCMkM0ODQ5NjE1MkIwRENEQTczQzU5QTIKKzoxMDExMzAwMDM2QzdDMjcwRkM4RjE2NzBCODM0RUVCRTRFQzVGRDg0NDMKKzoxMDExNDAwMDhERjAwRjQ4ODA2RDA5MkMyMjdEN0JDQjFDOUIwM0UzMjcKKzoxMDExNTAwMEQ4OEQ4NTM1Q0I4OURGQzk0OTdFMzRFNThDRTNFQ0NGNkEKKzoxMDExNjAwMDdGQkIzMzg5RjI2OEQ2Nzc5OUFCRDA0RTJBMDNCQUY4QTEKKzoxMDExNzAwMDU3MDdGMkQ1QTNCRTFEQzgzRjg3NEMxMDVCNjVDQzMzMjMKKzoxMDExODAwMDhDQUY3RkJGNTBDNEY1ODczNjIxQTA3RUJCOTRFMjIyOEUKKzoxMDExOTAwMDJDM0E5Rjc5NTQxN0I3QkY3QTBCMkMzMUZFQzlERTAyNjcKKzoxMDExQTAwMDg5REVCQjQyRUQ5QjhFQjhGNjhBMTQ0RTQ2N0JCODkxMjEKKzoxMDExQjAwMEY5M0Y0MkJGMTcwQjM4QkMxNDE3NjI5REU0MEZGNERDRjMKKzoxMDExQzAwMEVEMjVCQkM5RTYwOURGMzcxRUVCQUY5MEM4NkVEMkZEMzcKKzoxMDExRDAwMDA4RTdGNkE3OTMzRTM2QTUzMEY4MkJDNDhCMzIzMUZDRDYKKzoxMDExRTAwMEM4QjcxMTZFRjc0OTVBN0M4OUYzOTVBQ0VCMUMxM0QwNDQKKzoxMDExRjAwMEJFMzI3QkI4M0U2MzA3N0QwNkY3ODk1Q0I5RUVFNENGNkIKKzoxMDEyMDAwMEE2MjM2RkY1MDQ0ODhGNjAyMEU0NzBCRkY5NzQ5QkMwN0IKKzoxMDEyMTAwMEUzMkIwNkJEOTlDOTRBMjVCRTNGNDNGMzRCRTdDMTZBOUMKKzoxMDEyMjAwMDlEQjIxMTZBQjY1RDFDODJGRTBDOEY4QUYwN0UwMzI2ODkKKzoxMDEyMzAwMDMwMDRFQUFGNjJGRTM2NUM5N0JGNkE3NkU0NDYwQkQ3QUQKKzoxMDEyNDAwMEQ3Mzc5QTZDQTRBRkVCRkE3MEIyQTc4RkVDQzRGQTRFMDIKKzoxMDEyNTAwMDgxRkFBOTJGRkMzMUVEMTc1OEE2RTVBNUY3RTc4NzRCRDIKKzoxMDEyNjAwMDYxQ0E5NzNGNTc5MEFDRTk2RjZEREMxRkM1RkFDODFGODQKKzoxMDEyNzAwMEM2OUVFNUVCMDA5QTI3RTVEMUVCNzBEN0YzQ0FGNUY2RTkKKzoxMDEyODAwMDJDNUFCQ0I0NUVGM0U3MDJDMEE4RkVCRjBBNzRCRDcwNUUKKzoxMDEyOTAwMEI1MTY1RkQ1RjNGRTc5QkY0Q0YyOTY0NUZCMUQzNzU2NjgKKzoxMDEyQTAwMDMzRDY0N0UzRjJCQTcwQkNGN0E0MDU0Qzg1RjBGRTcxNjMKKzoxMDEyQjAwMEMwNjNDNEIzRTM2QjkzNDNCOERGNkJBM0QwRTdDN0I4OTUKKzoxMDEyQzAwMDg3NUFDMkUzMTk0NjdDNEEyRkU0RkRBNkY0NDQ2NjUwQ0YKKzoxMDEyRDAwMERFRDVGRTA0RkI4QUJBNjJGNzE1MDE3RjU4RkUzQUY0QTgKKzoxMDEyRTAwMDUzNUFGQThFODJGOEZEQTA1QjdCRkYxQTQ2RjlFNEM2REEKKzoxMDEyRjAwMDdENDUyMzBBQkRGRjNCRjcxNTI5ODI3RjI3NUNDNzE2NzIKKzoxMDEzMDAwMEJBRjlCRTIxN0Q1RjkxQzJENzRCQ0ZFMzMwRUUyNzNBQzkKKzoxMDEzMTAwMDk3RDkyREYxRkNGRkYwRjY1RDI0MkZBRDY0MTdCRUZDQ0MKKzoxMDEzMjAwMDYxNkYxQkZBOTlDRjk3NTgxNERDNDc5MTc2RDMxQjZERTgKKzoxMDEzMzAwMDk0NEYyMzQ4NEQxODhGMzRFQTAzNEZGOEE2NUY1NjM4NzAKKzoxMDEzNDAwMDA5RjdBNUJEQTg1MEJFQjA0MTFGNDhFNDA3QTA1ODY5RTEKKzoxMDEzNTAwMDk0OUZFODlBQzJBRkQ3MEY2MDZGRkZDNDg1Rjg3NjQ2QjYKKzoxMDEzNjAwMDg4M0M4MDc5QUNFQTIxMzE2RTFFRUI5MkMyNDRGRTAwQ0IKKzoxMDEzNzAwMEZGOUM2OEZEQjQ0RENGRjc3MjI3QzVFNDNGQjYyNUM4ODIKKzoxMDEzODAwMEY3NEFBNEY3NEIwOUYzQkNBRTIxRkRBREFEM0ZDRkFCOUYKKzoxMDEzOTAwMDRBRDdERjYyRjM1OEU1QTRDRkI1OTdGNUZFQUJDMkJFREUKKzoxMDEzQTAwMDk4QjhGQzNGNkI3NEYyQzVGM0Q0RUM5ODA0RjM0QjY0MkIKKzoxMDEzQjAwMEI3NUQ2QTlFODExMTBFNkQwOUU0RTgzRDg1RjFGN0RGQTYKKzoxMDEzQzAwMDAyNTg2NDhDQ0JCNzYxNUMxRUFFOTJDMDU0RjI5RkVEQTQKKzoxMDEzRDAwMEVEQ0YzM0U4MjY3RkYxMEIwNUU0RjdCMjI2Q0MzM0UwRkUKKzoxMDEzRTAwMEY5NjdEMkExMDIyRjNFNzdBRjM5RTA0NzdCNDZERDZCMkMKKzoxMDEzRjAwMEQ2RTQ0MEU4MTlGNDlCQjQxRENBMjQzRjFCMkIwQzhGODQKKzoxMDE0MDAwMDQzRkUyOEI5Njc2NEUwQjkwNjZEMUE3RUQ2N0RGOTNDQzMKKzoxMDE0MTAwMDgzQzc5MUNGMTlGMzBDNzY4NDI2M0M5MENERURFN0JFQkYKKzoxMDE0MjAwMDY0RDBDQjc2MzAyRUE3RDQ4M0RDQUYwOUUzMjZCRjVFMzEKKzoxMDE0MzAwMEU0RkU5MUE0QUYwQUIzNkQzNDhGMTNBRjU4Nzc1QTQ5QzUKKzoxMDE0NDAwMDBGNTcyODZGQTAyNjQzOTQ1MUJFNzQ1NDk3OUQ0MkY5QkMKKzoxMDE0NTAwMDc1MDIxNDU3QTRFM0RBNUI1NzkxRkQ5QTY4N0Q2QUQ3NDkKKzoxMDE0NjAwMEM2QzY3MUY1RkI1Rjc2OUQ1RTI5RTRGQUNFNzFCNEVGRDYKKzoxMDE0NzAwMDQ5RDBBQUU0MkY1RUIyNTYzODRDRjlCQTg2Mzg3MjM3OTIKKzoxMDE0ODAwMEYyMTA5MjEzQjE3OTAxMUZEQkE3NTEzQ0Y2RkIwRjU3MDUKKzoxMDE0OTAwMDUzMUM1NkRGQjdBQkVGRDc2NTVBQkNDNUJCNTYyMjM5RDQKKzoxMDE0QTAwMEUxREQyRDg0QkMzRTRFMjYyNkIyRUQ2NTEzOUQxRjAyNjQKKzoxMDE0QjAwMEUyNkQwQjhBNDQxNUE4RTYzMkI4MkQ5ODA0RDQ1M0JEQ0EKKzoxMDE0QzAwMDZENTA0RTg3NzlBRDkzRDQwQzc4NkVDN0RCQzlFNDdGM0QKKzoxMDE0RDAwMEJERDdFM0Q1RjY1MTcwRkI0QkREMjA5MEZFMDdFRDkyQjIKKzoxMDE0RTAwMEZEQUNCNjAxREU0MDNCRTE0MjFFMTdGOEI0OTBGQkE3MEQKKzoxMDE0RjAwMDAxNDU0MjM0MUVFRERBQTZFNTUxRThGREI1MzA1MzM3MUIKKzoxMDE1MDAwMDVFNEQwMkJGREUyQjRCNTVGMUY0M0JCREJEMzY3MzkzRjAKKzoxMDE1MTAwMDBERTMyRDkxOTEyNjhBNjc3RTZDRjFDRkExNzg2MDZBRTgKKzoxMDE1MjAwMDNFNDM3QkIxQ0REOUI0QjY4QUQ3MTMwRkZERDgxRTA5N0YKKzoxMDE1MzAwMDUwRkQzNzI0NkUyODMwNkYyQThFRjczNzFBREQxOEQ3MDIKKzoxMDE1NDAwMDc1NjE3QjZDRDkxOEVGMzc5RTQzNTBDQjgyMDU5OTM5NzIKKzoxMDE1NTAwMDgzRjdFNUZGNDY5Mzg3MUZBRkY3NjlFQkEyNTBCQ0JDNEEKKzoxMDE1NjAwMENERUNGREE1MEZFNUUzM0E4OUU0NzBDQjA4MEUzN0QzNDcKKzoxMDE1NzAwMDQ4N0VDRDc2NTdDRTIxMzlFQzA2RkQ5NEM2Q0JDNzlGNjkKKzoxMDE1ODAwMEZEMEQ4RjgwRjREN0U2RTZGOEY1NTVDNzNERTgxQzgxRTAKKzoxMDE1OTAwMEEyN0MxQTZGMUIxQTBERDA1RkRCM0EyMUM0RTFDNUM3Q0MKKzoxMDE1QTAwMEZENjVGREQ1NTk0NTVGQUY5QzNBMjEyODRGNzUyMzlFQjcKKzoxMDE1QjAwMDM5NDIzRjQ0QkY1RjZEOEI1NTQ2N0U3NjQ2RDBFODdGMEIKKzoxMDE1QzAwMDlENDhGQzZDQ0I5MjU0MkExRjVGOUI0NzdFQTA3RUJBM0QKKzoxMDE1RDAwMDNEQkQ2NjM5OUVBRkYwNjVGM0I2OTQyMjhFMTczRjM3NTYKKzoxMDE1RTAwMEY4RTE2QUNBODVBM0Q4OEUxMUVFODg1MDkyMkU3RkUwNkEKKzoxMDE1RjAwMEQ1RTlENzE1Q0Y0MEZFRDg2MDYyREU3NEQ0MDdENjFBN0QKKzoxMDE2MDAwMEYyNDMwQ0Y0M0NENTFCQkNCMjA4RUQwRjRCNUYyRkU3NDcKKzoxMDE2MTAwMDUzRTE3Qzg5RjQ2RkJCODI3MDdCRDQ3NDYyRUY0RjEwMEUKKzoxMDE2MjAwMDVGRjZEQTI5REZCMDYxNTVFNDI5RjQ1N0JBQkRDMUFCRTIKKzoxMDE2MzAwMEYwQkRCMzc3QkUzMzQzRjA1MjczQTQyNzlEM0Y1NDQwQUYKKzoxMDE2NDAwMEU3NzVENEI0MTlDRTQxRDgxMDlCOTdDMkQ2QTZGMkJDODgKKzoxMDE2NTAwMDhGOEVEOEZCQjg1RjNGRTZCRDQxRjkyQUVEOUFCRTFEREIKKzoxMDE2NjAwMDJDNDJGQjYyRUE5NTNDQ0ZFRkMzQTUyNjg2NzhGMUExMTgKKzoxMDE2NzAwMDlERTM4RjdBQkY1MzkzMzM0QTdFQjQ1RTVCQTNEOTM3MjEKKzoxMDE2ODAwMEZERjg3MUJGOURGMEEzNTZEQkU3NjQ1QzhGN0FDNDBGNTEKKzoxMDE2OTAwMDU4QjczQTBEM0YzRTdDRTFCMjdDQzQ4RkIzN0IyRkNCNzEKKzoxMDE2QTAwMDQ3RkNEODY4NkVGNzIzN0RDREM5MEQyRTJBODI3MTlEMjcKKzoxMDE2QjAwMEJDMkFEMDZCRTI3QzI5RkY1MkYwRjY3NkUzQjhGRTQxRkIKKzoxMDE2QzAwMEZBNTU0NzUxMjJCREMzRkJEREU4Nzg0QjhGOTlGQkM5MjIKKzoxMDE2RDAwMDU0N0JFQzNFQTE5RTRCRjRBQjI2RjY4RjE1RTVDNkZBODMKKzoxMDE2RTAwMEM3MEE3M0UzRUE1NzM2RkJFN0VBNTc5NzNFMEY0NkZCMTQKKzoxMDE2RjAwMEM0RjQzODRDOEYzM0YyQzA1MzUxRjA1QTY5RTdGOTI4REIKKzoxMDE3MDAwMDJCOEI2NDU5MkRDMUY5RDVFNEQwQkVCM0RGRDk5NDlEOUMKKzoxMDE3MTAwMEMyRDczQUNGMTgzRkUwMkIxNzcyRDZCNEUzMzhGQ0RDQkYKKzoxMDE3MjAwMDZGRjk4QUU0RURCRDFDRkE3RDg1NzFCRkE1NzFERUJGM0UKKzoxMDE3MzAwMDJERTBGOTMzQkFEREFEREI4MUM2RkUwRjY4RUJGREIzRkEKKzoxMDE3NDAwMDIyRkYyMUI0QUJBNzVFQjg0ODdFODREMzc4MkUwRkY0NzUKKzoxMDE3NTAwMDZCMEJGRDJCRDk3M0VDQTAyMEQzQkUzNTJGOEY4MzM2QjYKKzoxMDE3NjAwMEVDNUZGODA0RkE1RDk3ODZCNEY4RTUzRTgxRUNGNUE1RTgKKzoxMDE3NzAwMDRGN0U0NEY1RTdCQTZBQTlERTcxNTBFOEM2Mzg2OEUzREYKKzoxMDE3ODAwMDA4MTNDOTZEM0RGRjQxRjdGRjM0MUUyQzIxQkY4RkVFQkEKKzoxMDE3OTAwMEZGODE3MUVDNDczRjREQjIyNzYyMjFCRTg1RjYyNUJDMjMKKzoxMDE3QTAwMEQ3MjBGMUY4NkU4Mzg3MjkyQUIyREFBRTU4QkY4OTlFMTYKKzoxMDE3QjAwMDFGQjUyNTYwMjE3QURGNzI1MDA4QTEzRDlFNjYwOUZBQTcKKzoxMDE3QzAwMDQ2MTAzQzQ3Qzg5NERGQTJGMThEQjc4QkZDMTc5MDVGQTEKKzoxMDE3RDAwMEU5Rjk2QjdCNzJGQ0VGMTRGMUJDQjcyQ0NBOTNEN0Q2MzYKKzoxMDE3RTAwMDIzRDgxRjE3RTJGQjJDRkVGMjZCQkVDRjIyOUM4MDVGM0EKKzoxMDE3RjAwMEZGNjc5MTlFNjc3QjIzRTlDRjdGNjE4MTk0RjhGOUU3Q0EKKzoxMDE4MDAwMDIxOUU3RkRFOUZFRkM2RjNDQ0VCNjYzMkI2REVDRENCRkEKKzoxMDE4MTAwMDc4Q0U0QzNEOUUzM0EzNzBGOUQ5NkQ5MDlGRDE2NUNDQTUKKzoxMDE4MjAwMDJGRUI4RUUyOUI3NTUyMUZFNUIxRUJFN0NBNjBCRTU5MDQKKzoxMDE4MzAwMEY0RjMwREI4NEYyMzg3RTc5REM1QjRBM0YxRDM3NDcxQkEKKzoxMDE4NDAwMDA1QzU3RkUyQzQ1REJGMUI2RDdGMUNEMUVEQUMxMjdENzEKKzoxMDE4NTAwMDVGNERDNDgyRkU5RDk1MkQ5RTA4QzYxMThFMzhCNUZENDQKKzoxMDE4NjAwMEJFNUEzRUVENEE3QkU0MDRGQTNGNTYzRTkzNEVGQjQ3OTgKKzoxMDE4NzAwMEZBRjVGQjNENTZDRDdGQ0VGMUJFOEVGRjY0OEQ0QjhFQ0IKKzoxMDE4ODAwMDkzOURERjg4RkJGQTg1MDE3QTlBOTlEMDJFRkI2OTJFMDkKKzoxMDE4OTAwMEM2NjM4RUY0REI2NTZGRTRFMkZFMUI5RENGRDYyOTlDMDgKKzoxMDE4QTAwMDVGRDQ3NTA5N0MxRjU2NjdFQzNFOUNEQ0QxNUZBRkJFRjAKKzoxMDE4QjAwMEEwM0Y5N0U4RkQ4QUQxODlFQ0Q5MkY4MjMzRTdCNzQ3NUIKKzoxMDE4QzAwMDEyRUQ1RkQyRjhBNDBFNDcyMzNGQkE1NEY4RTlGNUZEQjQKKzoxMDE4RDAwMEYwMDNCQTI2N0U2QjgwOUZEMThGQTZGQkMzNTg5QjRDMkEKKzoxMDE4RTAwMEZFMzJEMDQ5M0EzMTlGNTNGNzg3N0Q1OTc5Rjg5REQxMUYKKzoxMDE4RjAwMEZGMzNGMkYwRkJBMzEzQzlDM0FGQjYzRTg5RTRDNEE1MUUKKzoxMDE5MDAwMEFFQ0IyMDc5ODhFQjMzMkVCMTNDQ0MyREZGNzc2RERDNEMKKzoxMDE5MTAwMEM2M0MwNDZEREM4NjNDODQyM0U2QzgyQzdFOEUwNUMwNjQKKzoxMDE5MjAwMEM3MzczODBGMjEyMUZFN0Q0MTFFQzJERjMxNEY0MzFFRDQKKzoxMDE5MzAwMEMyRTdDRkQzOTg4N0YwRjhBMUM3NUMxOEFBQzNGRDZBQTUKKzoxMDE5NDAwMEU4NzdFOEQ5NjVBNkY4RkIwQ0QxRTFFN0Y5NjEyMkNGODkKKzoxMDE5NTAwMDI3NjU3RTNBOEZCM0QxNjYyN0ZGODIzMTdGMEUzOEQ1NTcKKzoxMDE5NjAwMDlBMjZENDJGQ0I0MUVGQzdGRDNDREI1QTQ5MkVENzY3Q0YKKzoxMDE5NzAwMDhBRTRBQkM0N0M0MUQ5MUIyNzNGNTNBQTRFRTlGNjBFM0IKKzoxMDE5ODAwMENFMTNDM0ZDNzczQTE3RTAxMkYzQzRGNjhFRUVDRkQ3MkUKKzoxMDE5OTAwMEY0RkQ5REY5OUFGQjQ3N0Y4OTNDMzEyNThGRjNBNzU3Q0EKKzoxMDE5QTAwMDFEN0YxQTEyN0Q1RTY2NDUzMTE4RUFDNTg5RjNGNDdGMDIKKzoxMDE5QjAwMEEyRDE0REIyOTZERjZCOTM1NDE2RUQ4RjRBRjRERTJGMTEKKzoxMDE5QzAwMDQ2NzM3QkU3NTU0QkU0RUQ0RUQ0QUJBMDE5OEM3QjY2OTgKKzoxMDE5RDAwMDU4QzA5QTJFMUREOEVGN0VBQTIwNzAxNEYzOTQ0MTFGOTAKKzoxMDE5RTAwMEExRjUzREI3RkZCN0U0RUY3RjNDOTNDOTk4MzdGRkI4NDcKKzoxMDE5RjAwMDU5QTU3NTU2ODczMkMyNkIzRDlGNDFFRkU3MkVDREZGNEIKKzoxMDFBMDAwMEZENjVGOUNGRkJGRjYwQjkyMDhERjlFRjkxMEI1RjFCRUUKKzoxMDFBMTAwMERGMTk5NEY3QzRFOUYxRUZFMDM3NDQ3RkZERkNDNENDNTMKKzoxMDFBMjAwMEUzNDFGQTc5MTc1RjI4RTdCRTZFM0U2M0M4RDc0ODM0QjIKKzoxMDFBMzAwMEFGQkYxNjMwQzI5RkMyMzE4MUVDMzFFNDE3RjM5MzlGRTAKKzoxMDFBNDAwMEYxNTJFNTVGNzIyOUU4NDMwODhGN0Q1NjJGOTI5QTREMzcKKzoxMDFBNTAwMDNCRDc4MjZEQzhENEZEQTJGQzdDQzEwNzQ3OTJERUY5NUEKKzoxMDFBNjAwMEExOUQ4RjU3M0ZBRjQzOUZDRkU1NjMwQ0Y4RjkxNUVENkMKKzoxMDFBNzAwMDU4MjUzN0YwOEQzMTMwQkY5M0QzRkNCNEVGRjc1RTI3OTQKKzoxMDFBODAwMEQ3REIyMkNGRjBCQzc3RTNGOTEzNDAzN0ZDM0MwRUVERjcKKzoxMDFBOTAwMERDNUZFMzNFRkE2RjFCQzdGNzBGOTJERjBERkZEQkU5NTgKKzoxMDFBQTAwMEU4MTJFNUY3QTVDRjIzRDY5RTNERTJFNDc5ODUwM0Y2NUIKKzoxMDFBQjAwMEVDN0ZEQkJDMkU0OTVFRUI3OUM2NjUxNTdEOUFCRjVGNzYKKzoxMDFBQzAwMDYwRThFRkQ3RkI2OUVDRTNGQjc0MUVEMkQ2NTNCRkZGOEYKKzoxMDFBRDAwMDVCQ0RCRkY3RDYxOEZGQzM4OEFGQTVBNUREREI3MUJGMEYKKzoxMDFBRTAwMDRBMDM3MzMxOENCQjM3NzRERUIxRkI0RDBGREY3RjRCODQKKzoxMDFBRjAwMEU1NDIxRUFGNjQwMTA3RURDRjdFM0MyRkI4NzUwQ0M5REYKKzoxMDFCMDAwMEMxRjAxQUE0Q0Y1MTFFNTY4NjcxODNGNTg1QjM1OUFEMjUKKzoxMDFCMTAwMDgzRjIxMDQyNTgzRjZBNTU3OEZCOUJBNTk0ODdENTg0ODEKKzoxMDFCMjAwMEY0QUFFNzIxOTc1REZDRDM5QUFBNTIxQTJGRjk3RjNEQjgKKzoxMDFCMzAwMEQ2RDg3MzNCMEU4RkUxRjI0Q0JGQkUzMjQ2RDBFMkFFMzgKKzoxMDFCNDAwMEZFNEMxQ0NGRDkyNTdDM0Y2QUEzQzcyRkEzMUY1OThGRkEKKzoxMDFCNTAwMDdCMjc3QkZCMjg2RkEwNjExRjM3OEFDQUQwNTZDNEZBNDcKKzoxMDFCNjAwMEJCNDYxMDdEMzVFQzlCNTY4MkYxNTBENjY5MkZBMUYzMTAKKzoxMDFCNzAwMDdFN0ZDRkNGRDkzRTdCRTczMEYyMzc0RTI5MENCRTg0MzMKKzoxMDFCODAwMDdDQzk1OTFBQkEwNkVERTg1MUQwMEZDNjREQ0ZFRUJENEIKKzoxMDFCOTAwMEE2MjQxODg3NkZBNjhCQTkyQUM2OTVEMzQ1RDZGOTg4OUYKKzoxMDFCQTAwMDNDQzBCN0MwN0U5RTRCRkVFMjM1MTFGMjYzM0QzRDg2RTAKKzoxMDFCQjAwMERGNkZGNDcwQjlERTc4QjA5QTJENzQwQzk0MUQ5RUQ4NDYKKzoxMDFCQzAwMEZENTczRjJCQkFFQTY5MUNDN0QzNjMyNDJEMkY5M0U3MzcKKzoxMDFCRDAwMDgxRkE0MDBENDNCRkExMTE5RjdDNUExRTY4QjU5NkU3NUMKKzoxMDFCRTAwMENDNTREQjQwN0U3M0Y2MTdFNzgxRUFFM0QzQ0I3QTFFNTEKKzoxMDFCRjAwMDY4RjJBN0RDN0VDRjk2MkQ5NDM3RTI1Q0NCRjkyQTVCQTYKKzoxMDFDMDAwMEM1Mjg2RTcwNDVBNDZGN0EwQUMwMjlCN0EzRkIwQTg0NjEKKzoxMDFDMTAwMDUzMEE4MjlEQ0U3RjBEREYzNzFFRUU3Qjg2NDg1N0EwOEMKKzoxMDFDMjAwMDNGNjQ3QkYzODQxRUQ0N0ZBNTc1N0RERkMwMjVGMUI2QUMKKzoxMDFDMzAwMENCMTVFODYyN0MzQzJGNzA4MkU0ODBENDU0ODg3Q0E5NjgKKzoxMDFDNDAwMEUyMkQzM0RGQTdCNDJFOTlGNENBOEVBQzNBREFBNzc0MkEKKzoxMDFDNTAwMEVFMUQ2QkRDNzMwOEY0QUJDQTU2Njc2MERDMjE3QkVEQ0MKKzoxMDFDNjAwMEFGMjgyRkMwQjk0Rjg4QkI5RkFEQjJEOEExRUQ2MzVBNDIKKzoxMDFDNzAwMDlEODE3MTBDRTdEQTNFQjUxQ0RBQ0ZCRTVGNjA5QTE5MjAKKzoxMDFDODAwMDlEMjk2NEEwN0Y1ODMyQTE3Q0FERURFMkU3REJENUI2OUIKKzoxMDFDOTAwMEJCMkI2QzI0NkZCOEJGODY1REUxMjEzOTIyQURGQkE2NUEKKzoxMDFDQTAwMDA5Rjk4NEQ0MDI1QTJDQ0NGM0YyNjIxRTlGQ0VFQjkwMzkKKzoxMDFDQjAwMDREMjhBN0ZFRUQzMzMxNkUxQ0M5NTYzQ0IwREYwNUMxN0YKKzoxMDFDQzAwMDU1NkY4REY0NjZGODA2RjI3Q0Y0N0QyRUJBQkZBNzVGREYKKzoxMDFDRDAwMEZFRUM5QjRGRkU5RTRCQ0ZFQjhFREM0Qzc5ODM5RkE1OTkKKzoxMDFDRTAwMDUxN0M2NUE2OEJEQjIzMjA4OEI0RjM1RDYyREYxRjc0MTMKKzoxMDFDRjAwMEJFOEJBNkI3RTg3NkIxOTEwRThDNzlEMkI5RTVDMzg4RDAKKzoxMDFEMDAwMDJFODA4Rjc2NkU5MTYzRjg1RURDN0NFOTY2ODlFQkRENzAKKzoxMDFEMTAwMDMwMEZDQjRBMUNDN0I0MEMwNUZENzM1RjM2M0ZERDY4M0UKKzoxMDFEMjAwMDRGRjdFQjM5OUE1RUEyOEZGQkVGQ0RFN0Q2RUJFQjMwQTYKKzoxMDFEMzAwMDhGM0I4RUZGNDNENzZCREFGNDdERDA5RkYxRjNCNzQ2MkMKKzoxMDFENDAwMDY5RjZDNEYxRjU3RjFEQzdDRjM5RDRGMzQ2NDI3NDk1QzcKKzoxMDFENTAwMENDQzAzRjA5N0ZDMjU3QUE4ODA3RkJEQ0E2ODY2MjhBRUYKKzoxMDFENjAwMDJGMzU1MDNCRUJGOEY5RkVBM0Q2RTZBQzJFMkZDNUFCRDIKKzoxMDFENzAwMENDMDQ4MEY3RjEwM0NCNDY1MUZDMTZFODIyMkYwRTVEMTAKKzoxMDFEODAwMEJDM0ZDNkNDREI1Rjk3NEM3ODJDM0RDNDI4MEI1MjcyMEQKKzoxMDFEOTAwMEE3MTExRTRCOEY3MjdDN0Q2RjBDQzcyRjNENkY0RDhGMkYKKzoxMDFEQTAwMDAzQkUzNTI2MzgxN0Y3MjlGNjlGQ0JEMTlDQzRDRkU1NjMKKzoxMDFEQjAwMEQwRjJCRjlEQ0RFRkVDQzFGMzJFQjY2QjcxRTA5RTU3MTQKKzoxMDFEQzAwMEM2Q0NBNkY4REMzQTQ5NDBGQkYwNjNGN0ZDNTFFOEJGMEIKKzoxMDFERDAwMDVCQTBFMUI5NTNFQTYzQjIyMzlBNUU3QjY4RkY2MEY2QzkKKzoxMDFERTAwMDIxQkVFRjQ5RDJGMjU0QTU3NTlFMUQ4ODlGQTIyRjQ4QUYKKzoxMDFERjAwMEZCMjRCRkQxRDYyRDUyMUU5NDdDRjI5MTJBMkZEQTFEREUKKzoxMDFFMDAwMDExMEJFNkFEN0REMDIyNDU1NkJCNDk3RjhBRjE5MzE5NkYKKzoxMDFFMTAwMEZENUU0Q0VBQTRCQzlDRTZFMjdGQUMxREIyQjEzOEExRTkKKzoxMDFFMjAwMEZFRjQ5NUY2NUZCMDJGRjA0RjdENTVCQzRFRTQ5RkJBOUYKKzoxMDFFMzAwMEY0NzkxOEY3NUQ3MEZCODRCREMyRjM5QkUyQ0MyQkM2MkUKKzoxMDFFNDAwMDdGRjlCNUNGNEJGNzVCMUFGM0Q1MDZEMTMxRjc3RkU4QjEKKzoxMDFFNTAwMEY2OTAxRTdGNjA3RTM1MjY5RkJDQzcyQzc3QTNERTgzNUQKKzoxMDFFNjAwMEY5QjkyRjI4QTg1NzNGNkQ4RkNFMjdGQjM3MERFRkZCMTEKKzoxMDFFNzAwMENGRkQ2MzIxM0JFRUQ3M0ZBRkVEMzc2NjkyQjIxNkUzNUQKKzoxMDFFODAwMEEwNzc4OENFNzZCNEVGNUEzMUNGMUZGNTRCODRBRjEwRDAKKzoxMDFFOTAwMEI1REZFMTVEMjdFNTNEMzQ0QjdDM0YwNDUzRjk3RThBOTUKKzoxMDFFQTAwMDk1MEI5QjlFQzZGNzU3QjZBNENCMDg3RkI1QTJFOTc5RTAKKzoxMDFFQjAwMERBMkY2MTYyODE1NkI4N0VBMjdERUY0MjFGOEY5RUZGQUUKKzoxMDFFQzAwMDlGNDg3RTBFQ0FGRkZGODJGRDBCOTkwOUY2MkZGQzg3MDMKKzoxMDFFRDAwMDg2Rjc4NTBCMThFRDVGNjA2QkZEM0I3MDVDMUQyRDEyNjYKKzoxMDFFRTAwMEMzNzg2RjZBMTUyRjhGOTI2Q0Y0RkQxNTNCRTY1MTBGODYKKzoxMDFFRjAwMEExRkRBNjk0RUYxQzAxNzg2MkRFQjYxREYzQTg4N0UwNzEKKzoxMDFGMDAwMEZFMTI3RUNFQTEzMEJCOEFGMDJGMTVFMDgzN0E0MUFCNjIKKzoxMDFGMTAwMDk5OUY2QkE4REVFMDIwN0M5QTVFQzVFMzk3QTkwMTBCMzAKKzoxMDFGMjAwMEYxOUZGMzRDQTFCQzdCMTVDRjNGRjMyMDlFQUQyNkZDNjcKKzoxMDFGMzAwMDhDMzhEMzI4RkU5QTlBQ0JGNTQ4N0JDMDYyQjJGOTI4MzgKKzoxMDFGNDAwMDRGOUFGMDM1MjJFODc5RDI5Q0VGNzVDQ0Y3NTJGRTdBQTEKKzoxMDFGNTAwMEZGMzk4NzBCMTlBRENGQkFCQzE5OTlGOEREODE2MUQ3NkMKKzoxMDFGNjAwMDU5MDQ4Q0Q3RTg3MkE2NDJDMzhGOEUxRERBRkJGNUZDQUMKKzoxMDFGNzAwMDdEM0MwNzExQzdDNzU2RjJGN0ZCQ0Y0MUZDMUVBRjZGODAKKzoxMDFGODAwMDk2QzI3NDhFMTBFODMwREEzOTdDQkM3RUU1REMzNEEyNkYKKzoxMDFGOTAwMDFGNTFEQkU3Q0E2RUQyRjJGNDA1N0VFRUQ0Q0FCOUMzOTQKKzoxMDFGQTAwMDc4QkQ4QkYzNDE3NjZCOTIyNkNGQjVGNzZGNEYwRDY5RjUKKzoxMDFGQjAwMEYxMDI5RTZGQkZENEE0OUQxRkQwQ0U2MkUyQjkxQTlEREMKKzoxMDFGQzAwMEE1N0VDMTdFOEQ4NzA3RjJFRTg5OUU1QkFGOTEyOUFGMUEKKzoxMDFGRDAwMDUwM0ZDN0IxQzI2MUUxRkJCODZDQjE3NEY1NDI3MTJBRTAKKzoxMDFGRTAwMEM3RkI3MkM1ODZGRERFRTJGM0ZCQzZDNkY1MEY4N0U2Q0EKKzoxMDFGRjAwMDQ3RjM5NTYxM0E1RkI5RDU2MkIwQ0JEMjM5NUM1RDkxNTgKKzoxMDIwMDAwMEVEN0NCRjk3RjU5MkVDQjJDNDcxQzU2NzMyNjNFMzhBODkKKzoxMDIwMTAwMEJCMzNBM0UzOEFGQUZBNTYyQ0IxMTA1RkU5NzA3QjVGRjkKKzoxMDIwMjAwMEMzRkNBMzJEMDA1QTNDMTdDRjM4RUYyREZERTc1Qjg3OEIKKzoxMDIwMzAwMEVDQTg5NzFBRURDMTIzMDlGMjhDRTY4RkU1NzY4RjkyMTIKKzoxMDIwNDAwMEMwMEYzMTdGNkMyMkY5OTIyMDRFNUI2MkZENkY4QTM3QTAKKzoxMDIwNTAwMDczRkVEQjkzNjA3RjVGM0ZCQzc0QkRDOTY2OEM3QkE4NTkKKzoxMDIwNjAwMDk3RTRGN0U5QjFGRDgwRjhBMEJGNTU2MkY2MkJBMTZDQUIKKzoxMDIwNzAwMEQ4OEYwNjdDOTBGOEEyQkFEQTJBQjc3QTkwOEZGRTgwQzEKKzoxMDIwODAwMEY4NjIzMzU4QUVENjI4QkUwOEU2RTg2NUM4OEY3QkVFMDYKKzoxMDIwOTAwMDJFQTRFRkQ5QkM3NkI3NDJEN0YzNzZBMTUzMUM4RkQ3QzUKKzoxMDIwQTAwMEM4M0NENDk4MTYzRjc3Rjg0NjNDRUZGOUJDMzM5Mjg1OEMKKzoxMDIwQjAwMEU3NDNERkYzRkM5QkRGQTFGMkQwQzgzMTJDQjczRDI3MEIKKzoxMDIwQzAwMENEQTE3MjVFNjQzQjlFMTdCREU1QjkzNUJDMUU2OTZDM0YKKzoxMDIwRDAwMDE4NjMzRjE4N0JENzc3NTQwNzdEN0Y2MTREMUZFQUY3NjAKKzoxMDIwRTAwMEE1ODYzQzdFQzNGOUI1QjhERjE0RTc5M0VFQjA1MERDQUIKKzoxMDIwRjAwMDM3NUREQkU3Q0IyQTM1RkYxMDY2N0EyMURENjU5NjUwMjgKKzoxMDIxMDAwMDlFOUU4Mzc5RjdGNTYxRkQwODJFNzdBMUJFMDVDRjQ3MjYKKzoxMDIxMTAwMDZEQ0RGM0YxMzgzNEUzN0M4MDhERDBGMjM4NTg1ODQ1REEKKzoxMDIxMjAwMDdGNTRBQkNGNERFRkY3RUI3N0ZCQUM1QTFFMThFRkZGQTgKKzoxMDIxMzAwMEU4MEJGQzVDMUY3REZGMzI2M0YyNDhCNDFCMUQ1RTE2OEEKKzoxMDIxNDAwMDUzRDZDRjgzNjY5MjNDMTJDRjZGNkRENUYwNDAyRkJGMzAKKzoxMDIxNTAwMDk0MUUwQzhEOERCMjJCOEY1RTc1NDczMUNFRjNDMzE3NTUKKzoxMDIxNjAwMEVGQ0E0NTdERUE2QUVEM0I1MDQ2QkM2QTFDQ0ZGMTdCNjUKKzoxMDIxNzAwMDc1RjJERkU2MjExRjdGNUI3NDI5RTQzRjQ4MEZGRTA4RkMKKzoxMDIxODAwMEY5QzY0MjRGQ0IyNDM3RTA0RkE1M0M4REJFMzczMzQ1Q0YKKzoxMDIxOTAwMDlEMkIyMDVGNzE1RkNGQzdFN0FFMEMwODBCOEIwN0JFOEUKKzoxMDIxQTAwMDQzMzMzNDI4OTE5RjlFMDUzQjQ0RDRCNzg3OUUwQ0M4ODcKKzoxMDIxQjAwMDA4OUYzQTVCMjQ0QjgyNzY3RUUzMDlCRTgwRTNGQzc4N0QKKzoxMDIxQzAwMEZFN0JERkE3QkNCQzYxNDc4RkUxQjk5MjQ3Q0RFREQzNjEKKzoxMDIxRDAwMDVEODg0RjNFRUQxQzYxMjZEMUJFOUFERUUxQTM3NjZBOTIKKzoxMDIxRTAwMERGRDNFMUZCNkJGMjA0MkQwRURCNUQ4OTcyRTE1QUM2OTEKKzoxMDIxRjAwMEYxMTZDQjU4RkY0REVEOUNCNDE5MzIzRjc3NzM0NkE5QzkKKzoxMDIyMDAwMDhGQkU4RjM2OEI0NTI0QzQ4NzE5NkYwNzVDMENFOUUzQkEKKzoxMDIyMTAwMEZBNjA2OUJDNzMyQkY0MkJDQjMwN0JBM0U5RTcxQTZGMTAKKzoxMDIyMjAwMDU0MTlGRTdEQjMzMEI2RkMyRDI1QjZGQ0VERjJDRjBBNzUKKzoxMDIyMzAwMEEyQ0JENTkyRkY5NzA4Q0Y5NzA1MkU3RkQ0Qzk1Q0ZFMUQKKzoxMDIyNDAwMEM4QUM3MzM1Q0FDNzFGMzVDOTEzMjhBRUVFMTE1NDJDNUMKKzoxMDIyNTAwMDhGNzk2OTE4RTUyNUIxMEM5RUNGMzBEQTk1MURFMjcwQjMKKzoxMDIyNjAwMEM4RDk4QUYzOEE4MDlDREZFOUMxRUYyQ0YxRjNBRkQyQTEKKzoxMDIyNzAwMERFQjZFQ0MwRjMxNTk4RDdCQjE1RTlGMDQ1NzMyMUU1NDAKKzoxMDIyODAwMDZEQTYzOTZBRkVCNTg1RjQxOTI3Q0IyMzNFRTVERDRBRjQKKzoxMDIyOTAwMDc4RURCNDc5RjFCQjBGODc5RDNDMUZBMUY1MjExM0M1RTMKKzoxMDIyQTAwMDlCMDQ5N0NERTQ4N0U3QzQ5RDEyOTdGRkNFMjVEM0IxNTkKKzoxMDIyQjAwMDVFMkM4MzA1MDE1OURERTNFNkRGNkQ2QTlEQzRDQ0FCN0UKKzoxMDIyQzAwMDRCNzBERDk0Qjc0OTJGNzJEQTI4REZCRkQyNTVGODVEMjUKKzoxMDIyRDAwMEFDMTc1RDE2M0EwRkUyQjBCMzJDQThGNUM3QjBGRDI3RDYKKzoxMDIyRTAwMDlENEJFODdERTREMTY2MzBDODdCRUNEQ0JGMkU4MjdENUYKKzoxMDIyRjAwMEJDOUFGNzRGREY2NzEzNTczMEFEN0YxQkIzNjBCOTg2QzkKKzoxMDIzMDAwMDUxRkU3RThGNUJFNkUzQkRERDQ0RjExMEFDQkY5MkM2QUIKKzoxMDIzMTAwMDY3QTM3QUZERkNDMjgxRkRCMkQzMjQzQUM3NUQ2MDVBM0YKKzoxMDIzMjAwMDdDQUM4NUNBOEY2OTdDQjBENTJDMUY0NjNDNTVGRkMwNUMKKzoxMDIzMzAwMDE4QUU0N0E1RUI1M0EyMDNEMUU0NTJFOEJDMUQzRkNCMzYKKzoxMDIzNDAwMEY1QTQzMUVFQjM4MEU3QzUzNEI5MUJGM0Q5QzUxNTJFMUEKKzoxMDIzNTAwMEIyOUI1MUYzQzFGQUUxRjg5M0U4NUFGMkIzMzJDRDM1QUEKKzoxMDIzNjAwMDQzRkRGOThGMjMxRThGMTI1ODAwRDcyMzM4OEVFRkEzMTkKKzoxMDIzNzAwMDdEQzI3NDc0MTNFNTU3MzgwMjU2MDVGQUIxRENDNDY4OUYKKzoxMDIzODAwMDdEOTVFNEY4RkI2NEM3OEZFMzc0M0E3OEZEQ0EzMjMwNzgKKzoxMDIzOTAwMDhGNDM3MDk1N0JGMURBRUEyQ0Y3RTJCRTlGMUVCNzkyNkQKKzoxMDIzQTAwMDExODgyQUM3NTk5NzEwRTJDREMwQkFEOEJBNERFMzcwNDgKKzoxMDIzQjAwMDNEMTQyRkVBMTc1RkRDMUVENDNCNzAzRTFBN0YxREE2MkEKKzoxMDIzQzAwMDc4RDEwRUNENzU0MTNCQzBGNzk1MjFGMUU3MTExQ0M3QkYKKzoxMDIzRDAwMEZEOEI5RERBQjk3QUM2RkE5OUUzNEM1RkY3M0MwREY4QUMKKzoxMDIzRTAwMEY3MTVFNzk5MTYzQkNGQUY3MTlDNjFFMTZCMThBNzk4ODEKKzoxMDIzRjAwMDA1RTM3MzBDOEMwRjdFRDIzOTVGRDczQTRDODQ1RkQ3REMKKzoxMDI0MDAwMEVBRTcyRDE1QzZFRUJCMzBFRUIzNjA2Q0Q1NjZFNDMzNUIKKzoxMDI0MTAwMDU3NkJGOUEzMTVDOUZGNEM3RUZDNkI0MENGNDdCOUQ2NkIKKzoxMDI0MjAwMDlCRkM4MzVDQ0NERjlDOTFEMkQyQzY4OUEzRTlFQzQyQjEKKzoxMDI0MzAwMEU0QzczNjgxRjhDRTM3NTlGNzFBQkM3RjdFNUFGMDcxNUYKKzoxMDI0NDAwMDc3MEVGMUZEREJDNjBEQzVGMzUzODMwNUE5NTBGRUQwMTEKKzoxMDI0NTAwMERDOUVCQkRDNDc3Q0YxRjY3MTkzNzA5QzExQTJCQjZCRDgKKzoxMDI0NjAwMEYxN0I2QzQ4NzczMzQzNkQ1ODg2M0U5QUU4REMyREEwQUIKKzoxMDI0NzAwMDQzQTQ1QjlEMEUwNzhGMUZFODEyOUUxRkRFRTRBMkZEQTIKKzoxMDI0ODAwMDUwREI1ODM3NkQ2OENCNjBFRDAyRjdCNzM0OTFEQzYyRjIKKzoxMDI0OTAwMERFOTEwM0YzMDRBMjlENjE2QkEyNzlGQ0E0NDUyNUY5QUEKKzoxMDI0QTAwMDcwQjVGQjExMDlDQjRGMkFDMUY1MzhBRTM5RTMzRkEyMTUKKzoxMDI0QjAwMEYzRjI1OUM2RkMwMkI0M0I2MUJDRjdFMTNDRkVBN0M2OEYKKzoxMDI0QzAwMDNCNzg5RkZBRTdFRkEzRjg0N0Q5QTNDRjZCNzRBRERCNTYKKzoxMDI0RDAwMEEzOUUyNEQwMjc2MDlDNUVDMUE1MzBEMDFGRkJFRDUzODYKKzoxMDI0RTAwMEIzOERGMjEyMDZGNkY1NDY2QTY5RkZCMDkwMTI0MDc5OTQKKzoxMDI0RjAwMEE2RUZFQjM1RjJEREE5NTc3MkJFRkJFMTcyOTdCMjlBRjcKKzoxMDI1MDAwMENFMzlEQzRENzY2OUUzRjUwRTdEREYyRkU5NUY4RDRCMkIKKzoxMDI1MTAwMDRDREFCRTVGODFFNDRBMDNCM0QxQjk0M0ZEREZBQjgzM0MKKzoxMDI1MjAwMDNGMjE2REUwQkIxRTA3NzBGRjZGRTlFN0VERkZGNUQyQkQKKzoxMDI1MzAwMEZFNjI3NTE1OEZEM0Y3REI3N0Y1MzJCNzVGRjVFRjQzQTIKKzoxMDI1NDAwMERDOUVBRDlGRTNDRkY1OTRFNUVDNEJEOUI3NzFGNjA1NzIKKzoxMDI1NTAwMDkzREVDODUyNEM5QUZEQ0FGNTg1OEVDOTVFNTk2NTE0NDIKKzoxMDI1NjAwMDVGRTU3QUY4NUMwQkQ1NkY0QzBBRDFGNzU2NkFDNTc2RjEKKzoxMDI1NzAwMDQyOTJFM0UzRENCQURGRDM0RURGNjVCMjI4RjlDODI3MjUKKzoxMDI1ODAwMEY0MzhFQjlDRENFMDdGMjI1RTJGMkNGNjY3MDkzMDk1NTcKKzoxMDI1OTAwMDVBMEI4RjlGMDIxRDZDRUQ4M0I3QUE1OEQzOTNGOEJERDkKKzoxMDI1QTAwMEFFNkI1OEQzQUY0RDM5NDQwNzY3MTBERkU3OENGOTg4MUQKKzoxMDI1QjAwMDdGQzc2QjgwMEVDRTYyM0IzNkM2RkQwMUQ3NkE3MUEyMjMKKzoxMDI1QzAwMDk3M0Y3Q0FBMEREN0ZEQkNDMEY4RkVBRTQyRTNGRUFFM0QKKzoxMDI1RDAwMEMwOUZDN0YxNzg5NkY2M0Q5RTU4QkUxMzM1OEU5MzY2MjAKKzoxMDI1RTAwMDNFMEU4RjI4RDIzODJFQzQxQkM3MjAzQTY0MjFFQTFGMjIKKzoxMDI1RjAwMEQ2Qjc4OUY2OUYxQkYwQzgzODFFRTFFMDFEQjQzRjZFQzgKKzoxMDI2MDAwMEVCQ0Q0QzE2MjdBMzFDRUZCMzIzM0M0NzIwNDZFNEUwNTgKKzoxMDI2MTAwMDNDODNDOUUzMjc5MTNDMEZFMkI5NjhCQTVEM0Q2OERDQjEKKzoxMDI2MjAwMEEyODNENkY1QzZCOUZENzkzQUIzMzJDQjMwNEVDNEZCOUUKKzoxMDI2MzAwMDdEMkNCOUUxNTFGNDdCMzRERTZDMjZGRTVFN0Q3MDJDN0UKKzoxMDI2NDAwMEU5NjlCREFBNTVDNjI0NDg1NkM5RjM2QjE0RjgwRkM3RUIKKzoxMDI2NTAwMDM1ODdGOUFGNzI0MzNCRDdDOUQ1NzRDRURBRjUzMzhERTAKKzoxMDI2NjAwMDc5MzlFQTNENERGMEZFMEQ1QTlFQ0Y4REQ3OUI4RjQ3QUQKKzoxMDI2NzAwMEVCOUJFN0NEMUJDQzA4MDdCNUQ2RDEyNDRFQzFGNkE0MDEKKzoxMDI2ODAwMDgxRjc3RDgzRTEzMkU4OUNBNzM2Q0U5RjE4RTgzOUQ4RTAKKzoxMDI2OTAwMDdFNkI3OTI3RjFBNzQ0N0M2QUZDNzg3RTJFMTRCNDU1QjIKKzoxMDI2QTAwMEYwNzdFNkZCNUMzNkZFNEJFNEZCNENEMENFODU3QUNENzIKKzoxMDI2QjAwMDFDQTFGMzNCNUYxRkJBNzhFQjcyOTg2N0MxMEY4QkU5REYKKzoxMDI2QzAwMEZCQTU1N0E1MkQ3REYyMjEyODNGQkQ2NTM0OTU1RjRGQjEKKzoxMDI2RDAwMEJCRjlCNkEzNThCRjNEOUZDQTk1QTY4RkU2MjEzRDE0MEUKKzoxMDI2RTAwMDk2Q0RCRDE2QkZGQkZBOUE5REI3OTM5MTE0RUNBODg2QzAKKzoxMDI2RjAwMEU3MzJDNjY1NEZDMDAzNjEyQTJEMTE3QUVFOUJFM0VCRUEKKzoxMDI3MDAwMDI3QTIzRkE2MzI4OTk3OEY5NEZDNzYwMjk1QjNCNUYyNDMKKzoxMDI3MTAwMDg0OTc0NzYzRjkzNUUxQTM3OUYxRjhFMjk4NDJBMUJCQzgKKzoxMDI3MjAwMDA4RTQ2RDY1MkE3RjdFRTY4NDY3ODZBMTFENUY1OUMxMzYKKzoxMDI3MzAwMENCNjM5NDY5RUI3MkIwREVGNEM3NzlGMUY0QTUwNUUzREQKKzoxMDI3NDAwMEY5N0NBNzVFMzhERjM2QzQ4MzYxNjFGRTNERDI5N0ZDMTkKKzoxMDI3NTAwMEVGRDFGNzM5MDIyMDZGNzFGRjdFQTA5Q0M3RTEwMkZFMjYKKzoxMDI3NjAwMDEyMDlCRjA3NTVFMUU3RTVFOThFOTY0Q0U0ODNCMzgyOTEKKzoxMDI3NzAwMDk2NTI4Q0JCQ0EwRTVGMUI3RTFGMzFBNTdDREEyNDVDOEYKKzoxMDI3ODAwMEY3RTlBMDZFNjM5QzEzRTg2QjA5QzI3RkNFNjUxRjY1RjUKKzoxMDI3OTAwMEI5NDgyRkQ1RTk0QjM2MTNCRDI3M0VBN0IxOUVBRjVCOTUKKzoxMDI3QTAwMDJDM0Q0MDdCMkI5MDZFRTY1QzFFMkIzRjA3RDFBQjAxOEUKKzoxMDI3QjAwMDBGQUZCNThERTA3ODA3NzJEMTVBM0U5ODVFOERGQzlCQzUKKzoxMDI3QzAwMEFERTkxNEEyRTk3NTFCRTJBNTQ4NzRCQjFBQzc2NTMxQ0YKKzoxMDI3RDAwMEY1NzlGMUZFMjg0MTE5MkQ3RjBFRkQ5RTM3QkZFQkEzNDEKKzoxMDI3RTAwMDM4MTBEQzEwMkY4RkMzMzdFMDRGRDJGNTdDM0UwQTU5RUEKKzoxMDI3RjAwMDRFQTNGQzY1OUVENzczRjBCN0Y0M0U2RTA3MTEzM0E5NjQKKzoxMDI4MDAwMEZGODc3MUZFNkMwRDFGQ0YzNjNDQkY0NDQ0N0IyRkY4MTEKKzoxMDI4MTAwMDA0RjI4OTg2MENGRTlENDk4Q0VCMjM5RDY2RThGQ0FBOTgKKzoxMDI4MjAwMDJCNzZCRUFERTVDQUFENkU3MUYwNzg0RDM2MEVDN0VCQjYKKzoxMDI4MzAwMDM1N0RFQ0FERTZDMEQwMTIxOEVDOERBQ0M5OENGMzdEQzMKKzoxMDI4NDAwMDJDRDlBNTYyM0NCN0IxODY5RjQzRjkyRkU5QzEyNzExNjYKKzoxMDI4NTAwMDFFQTI0OTNEMTQ4NkYyNDJFNkU3REZBRjk0RkNCQkM2RjgKKzoxMDI4NjAwMDQ3RTk1RjBEREFCQTM0RDhERUE1N0MzNkZDQzNGMzUxRjQKKzoxMDI4NzAwMDA2QzFBM0NCQzg0NzYzRTczRkIwMkU3RDk5NzhDREM0OEUKKzoxMDI4ODAwMEYzNTc3MjcwOUVDQTVBMzFDRTdDOThENEI0MkVEQTRGNjgKKzoxMDI4OTAwMEZGRDgxN0ZBRTkxOUY3QjcyODU2RUQzQzk1QzhCQzY4NzgKKzoxMDI4QTAwMDdGNUNBQkIzRTlGMTY4M0IxOUNDMzIzQTA3RTk0ODRCOUUKKzoxMDI4QjAwMDJFOEI4Nzc3QkE5RTc0NDREMEZDNUFBMEY3QTIzRUYwQzQKKzoxMDI4QzAwMDQ5RDJERjQ4M0YwMThBMDk5OEIzRDBBRjM1OEJGNDE4NUQKKzoxMDI4RDAwMEMxNjI5MzMxN0U5RDUxOTM0MUY4QkEwOUY0MTJGNEIzNjkKKzoxMDI4RTAwMEFCMTU5RDM5RTQyRkRGMkUzMjNDQjc2MDAwMEUzMDEyNUQKKzoxMDI4RjAwMERGMDA3RTdFMzgzRTlCN0ZGN0FCMUYxRTJBRjE1MThCOTcKKzoxMDI5MDAwMDQ5ODhBQjVGN0QzOERFQTQ5RDlGQ0FGNzk3MzZEOEFDNjcKKzoxMDI5MTAwMDNDRkY1M0ZCOUU4NTlFQzdEMjYwMkI1RUQzNDRGM0IzMkUKKzoxMDI5MjAwMDcxRkEzMUFDRDNBMEJDMTY2MzlFOUMyRDlERjQwQjc5M0IKKzoxMDI5MzAwMDAyNTM1MDFFMEVDRTgzMzFEQTA5MkFDREUzNUJGREYxM0UKKzoxMDI5NDAwMDA1QzZGNTlGM0I5REE0RkY3QzRCOEIyRjA4QjMzRkE1OEQKKzoxMDI5NTAwMEY1NDkwNUZDQjI3QTMwOEVFMDE1RDA1RTQ5MkQzRDJBNEUKKzoxMDI5NjAwMEIxQjEwM0RGOUZDNEVGMzZBMTNGQUIyQjNCRjg3RkM3NkMKKzoxMDI5NzAwMDQ3QzVFM0RGOUNGNDM0RTU4NTFDMzNGMTM4QTgxMTNFRUMKKzoxMDI5ODAwMDY2ODVDNzgxNjQxNkE2N0NENTA2OEQ1RkZEM0YzNzlDQTIKKzoxMDI5OTAwMDIwNEEwMDgwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwOUIKKzoxMDI5QTAwMDAwMEJFNTdEMDk3ODU0NDVCNjdGRERCRUJEMjVFOTI0RTEKKzoxMDI5QjAwMDlEMTA0MjQyNTgzQUFDNDEwMjc2MjcyMTgwNkM0RDgwRUUKKzoxMDI5QzAwMDg4MEE0QzU4NTQ1MDg0MUI4ODZDNTkwNTlENDFDNzMxNjYKKzoxMDI5RDAwMDFEMDI4ODBFQ0U4NDI3MkE0RjUxMUIwNDQ0MDc5ODQ2QjcKKzoxMDI5RTAwMEQ5RDRDOEI0ODA4OENGMkQ2RTMzNkU4RjQ5NUM1OTI1RjkKKzoxMDI5RjAwMDg2NDE3MUM2MzdGRUNGRUZENEJEQTQ2RjEzMDY3Q0NCRTIKKzoxMDJBMDAwMEY3OUZGNzNERjhCNDM4QjdFQURFQUEzQUU3RDREOUVBMzcKKzoxMDJBMTAwMDU0QjVEODYzM0JEMTk4MjVGOENGOEZEREYwRkY0RTQ5RjAKKzoxMDJBMjAwMDVGRjYxNTQyMDUzQzAyNzA0MDg4RjY0MkVDRUU1MEU0MzkKKzoxMDJBMzAwMEYwNTI3OTUyNjlDODQ3RTVERjdBQkI4NTE4ODA3QTJENTQKKzoxMDJBNDAwMEIzQTg5RjEwNDlFRUNDOTE0OTFFMDI3RkY4RjFDNzFGMzEKKzoxMDJBNTAwMEYzODU5ODgyQUFFRTQyN0NEQTVENEJDNDdCRDc4QkEyQzkKKzoxMDJBNjAwMDMxNTY0NTg4RTRCMTlBNEQ3MzA5MzE0NkE1RkZFNTA5MTEKKzoxMDJBNzAwMEQxQjI0NTA5M0FFOEY5Njg3RjhDNDVBNDA4NTE3OUM4NzQKKzoxMDJBODAwMDE2MEMxMkJDRjA1NUVBODRFMDg1OEZBQTQxNDE3MDhCODgKKzoxMDJBOTAwMEYwQUU2OTQ0RkI4MEMzMURBMEYyQTFCOEZFQkYxRDRBODEKKzoxMDJBQTAwMEU1Njc4RkRBQkMwRUY0MUJGMEJGOTM0NUZEOTZBMDVGN0YKKzoxMDJBQjAwMDgyN0JBRkIxMDg4RjUzOUYxN0ZERDcyNzE4MkIzQzU5NDYKKzoxMDJBQzAwMEFENzBERkNEQzkyNkI4NUZBOEEzQTlGREU1N0JCQTk5OTMKKzoxMDJBRDAwMEVBN0RFMUNCNENGNUI5ODc3MjRDRjA4MDg2MkI0Q0VENEEKKzoxMDJBRTAwMDA3N0U1MDYwODIwNzM3NUU2RDZBM0ZFNEM4MjQxMzNDNUUKKzoxMDJBRjAwMEFDRjkwNjUzRkIxMTY3Njc5OUVBNEIxMzBBMEYyRUE2MzAKKzoxMDJCMDAwMEY5MUU0QzUzODUzMjQ4ODg5MUEyRDRENEJFNTQyREIzQkIKKzoxMDJCMTAwMDBCMEJGREEzQ0VGNjY5MjNCRDU3NDU3Rjk5OUVFQTc0NDIKKzoxMDJCMjAwMDJCRjA3QzY2OEYyMkRBNjUwQTMxNzc4REFDMzdERTlCMUQKKzoxMDJCMzAwMDU3QkY2QTc5MDY5NUYzODNFNkU3QTVDMkRBMEFEMzdCMjUKKzoxMDJCNDAwMDhCM0Y5OUZGRDY4MTg4RkU3QUE3MTQ1QjkyQThCQ0RBRTYKKzoxMDJCNTAwMDFCOUZGMjY1MUMyNjJDMDZGRUE4MzI1REJENjFEMEU5RTQKKzoxMDJCNjAwMDNERDVFQjkwQTQ2MDNBMkZEQ0FBMDRFRjI1M0FGNjEyOEIKKzoxMDJCNzAwMDNEMUYwMkREODhDRTIyRTgwMTVENjU3RENCNUEzNTE4MDgKKzoxMDJCODAwMEEwN0VCRUFCOUVGN0Q2MDExQkMxODc3MkQ3MzQxMkZENjMKKzoxMDJCOTAwMEU3RDYzOERDMkFENTNCRDJDQ0Y0OENGMTk4RTkxOTk3RUEKKzoxMDJCQTAwMDY1QTY2N0JDRDc0Q0NGQzQ0MTY2N0EyNkY5Q0RGNDZDRDQKKzoxMDJCQjAwMDM3RDY0Q0NGRjY0NTY2N0E3Njk4NkFBNjY3QkE2NkE2ODcKKzoxMDJCQzAwMDY3QzYzQzMzM0QzQjU3OTlFOUQ5NzVCMTk5OUU5OTgxQzgKKzoxMDJCRDAwMDA1QTZGQTY4RkVFREJFNjJBMUE5RkVBMUI4QkQ1RjZBQjYKKzoxMDJCRTAwMDg0ODc5NDhFQUFEQjQxNEJBRjY3REQxREE2RUYwOTc1ODQKKzoxMDJCRjAwMDlDN0QxOUUxQUIzNDQzMTVBQUJCOTUwRjAyRjQ1N0FFODcKKzoxMDJDMDAwMEVCMkE1RTVGNzM4ODBGMUUyNjNBOUMxMTJCMEY2Njc4QTUKKzoxMDJDMTAwMENFRTc4NzhBM0RBQkVDNTg5RjNGOTUxRjdFMEQzRUU4N0YKKzoxMDJDMjAwMERCQ0EwN0M0Nzc4OUY4Q0U4RkY4MzNFMkZDRDJBMEYzNzEKKzoxMDJDMzAwMDQ0QUI3Rjk1OTdFNEM4MDZBRkI2MUFFNUQ0REVERjc0REYKKzoxMDJDNDAwMEIxOTJEQzEwNDVDNUJEOEJFMjg1NzA4OUU2MTlFMEE3MUQKKzoxMDJDNTAwMDBBOTFFMEJEMTdBNUYzOTM0Q0YwMEJGRTM4RDJFOTdGNDMKKzoxMDJDNjAwMDdFRDFDMzRBNzg1Mzc0QkM4OTI4NzlBNkQ0RkYyOTEzMkUKKzoxMDJDNzAwMEYzNUU0QkNDQThBMkZEODQ5MDAyRjlENTQ5MzRBNDQzNUQKKzoxMDJDODAwMDNFQTU4QjJBMDU2NTlBRjBBRTUwMzE2RTRGRTc1NkY5OTYKKzoxMDJDOTAwMDk3QzE4NEIxODRFOUZEMEY0QjZDQ0NCRjRCRTJGQTZGNTYKKzoxMDJDQTAwMDAxNUY3RTUwMkJGOUYyMzQ5QTBDMTZFMjA2MTFCMkUxNjQKKzoxMDJDQjAwMDNCMUZDNjNFRDIxOUZEMTUxMEMyOTVDMUE4QUNCQjA5NzkKKzoxMDJDQzAwMEUzOUY4RUYxN0I4NUI4NDkzNERBRjBGMTk5NDJEODUxMEYKKzoxMDJDRDAwMDE2MEIwRjk3QjM4NURGOEVGNzZGMTZFMUU1OThDQzFGQzMKKzoxMDJDRTAwMDUzQjQ1REMwNDc4NUFBNzU0RDA1M0UzQTM1NzQ4MTlDNDUKKzoxMDJDRjAwMDE1QUZCN0MzQTAyRjg4NTc0MzVFQkY4QjdGNTJCQkUzOEUKKzoxMDJEMDAwMERFQTJCREY4Q0UyOEE3RTdENjA3MDgzRkZCMkM2MjVFRkYKKzoxMDJEMTAwMDg4RTgyMkM2QjVFMzcxMEI2QjUxQkY0OUZEREFGQUNFRTQKKzoxMDJEMjAwMDEyOTZFRjJGMjg5QTA2N0MwN0QyOURERThENDA3MjVBQUMKKzoxMDJEMzAwMEU4MTk4NUU2Nzc1OUIyMjdFN0RFQTRENkY2NkY3ODJEMzUKKzoxMDJENDAwMERDOUU1ODJGQTA1MEZCQTc3N0M0MzJCRUZBNzY1ODk3NjYKKzoxMDJENTAwMDhDNzlGREQ0N0UzRkY0RkFERkMzQjg4REY2MTc5QkFGQjQKKzoxMDJENjAwMERERUU1RDcwMUJGNURCQUM4OEFBRjUzNDg4Rjc3NEJBMkMKKzoxMDJENzAwMDY0Mzg4ODdGNjhCQzE5NkE4MkI3MTY3NDhCOUI3MUIwRkYKKzoxMDJEODAwMDNERTFBMUEyODNGNjI5RjREMkQ0RUJBRjVBMEU1OEQ5NzMKKzoxMDJEOTAwMEQ3Q0VCMzkwQzY3N0FBQjgzMTFGRTMyNUZDN0Y4OUZFNTIKKzoxMDJEQTAwMENCOUM4NDdGOUFEQUM5Q0U1QUVGNDQzMDQ1OTFDNDNGMTgKKzoxMDJEQjAwMEZEQTM1RjUxOUJFMzk3RTMzOUEwRTM3Rjc3MDdFRDE0MTEKKzoxMDJEQzAwMEZBRDk2NzY5RThFMjA1MURBRDBERjk0QzQ3Qjc5Q0Q3MDQKKzoxMDJERDAwMDQ5QkJDNENCODVGMDUwMTBENzc5M0FGMDVGRTI3MDc4RTgKKzoxMDJERTAwMDU1QzI2NzgxMjJCRkZCNzlFMkNDMTk5NTM0RUU5QjJENDkKKzoxMDJERjAwMDQ1QTk2MUQ1MzRFRUZGRTA3MUJCOEFCQkE2NjNEQzM2MjIKKzoxMDJFMDAwMDdERENDRUY2M0FERTNERDk1ODU3MTcxQTc3MkRCRTRGRTYKKzoxMDJFMTAwMDc4MEFGQzRBMDk2RUNDQzRGM0YwNTM4MDc3MEJCN0ZCRjkKKzoxMDJFMjAwMDVFMUZBRDM5OEJENENCQ0QzNTRBNzAzREQ1QkZBNUUzMDAKKzoxMDJFMzAwMEY5NTExQkI1QzNCQTc0OEFFNDFBMUFERkNGODYyRDVCMjkKKzoxMDJFNDAwMDg3NzZCRkQ2OUMzQ0VFOERDMjdCRDlFQTRDRDA0M0IwOEUKKzoxMDJFNTAwMEJDQ0ZCODVCMDlENjEyM0M0Qjc4OTlFRjRCNDQ1MTk3RTUKKzoxMDJFNjAwMDFERDQyRUMzQTdBNUZBNjgxQzdGOEVGQkZCODA0QzBCREMKKzoxMDJFNzAwMDJGRTMwMUVGRDE3Nzc2MkRFOUUwQkQxN0QwRDA0QkUzRkEKKzoxMDJFODAwMEZGMkM5MjFDRTg3RkQyNzhBOTc3NkVENkYxMzY0NTE0RDQKKzoxMDJFOTAwMEYxM0FCRDRFNTQ3MTQ5MEJGRTY0MDVCNTlCNEFGRkMyMjEKKzoxMDJFQTAwMEZBMjRCODFGQzYzNzBEQjBBRjc1NUQ0RjE3MEQ1Q0NFNTUKKzoxMDJFQjAwMDEwRUUxNzFCRTk1QkVGRDQ3NEI4RUQ3NjZBMzNDOUQyMTQKKzoxMDJFQzAwMERDQzVBRTYyOUREMkJBQ0Q2NEZDRjdGMzExRkVCRjFEMjYKKzoxMDJFRDAwMEYzRjY2MTA1NzhCRjkzRTQxOEU4QkRCQUZEMjVGMUYxN0EKKzoxMDJFRTAwMDQ0NDVFMjkzRDZFRDAwRTA4MUQ2NkQ5RUNGMTJCMTdFQ0YKKzoxMDJFRjAwMDQ2Qjc5N0ZDNjc3NUY3RkM0N0VCODcwNDYzNDI3QUFBRUQKKzoxMDJGMDAwMDEwNTc0QTUxMjgxRTNBOUQyMDUyNjg5RTBERERENEEwQ0MKKzoxMDJGMTAwMDIzMTM3QUZBNEVFQjBFOUE2NzAzRDkxMzBFQ0NEQjVGQkMKKzoxMDJGMjAwMERDRjExNEQ1OEYyNTdEN0JBRjk0QUZGMTAxODIyN0Y4QkEKKzoxMDJGMzAwMDU1NzEyRkYzNDFFM0QyRjlGNEZDRjU0MTU0NEZFRDVGQTUKKzoxMDJGNDAwMEE5MTFGMTc5MDRCRkUyQjM3OTZCODkwRkM3OUNENTBFNDMKKzoxMDJGNTAwMDI0NTIzOTgxRTQ3RTk4NUE1RjlEQjY2QTM0RUM4M0IxN0QKKzoxMDJGNjAwMDlENDg4RjQ0RTg4OUFCN0I5ODYxNUEwODlENDBBNzZCQzgKKzoxMDJGNzAwMDc0N0M4RkNCMzZFQjlEMDlEMDNCNDZGQjM2RjQwRUM5RjMKKzoxMDJGODAwMDU3MTVGOEJERDFBN0VCOUZDQkM0NjVEMDNGRkJBQkY3N0UKKzoxMDJGOTAwMDg4Q0Y0OEJGMTg3QTY4MTRDRDMwOTQ3RDYxM0Q2NEI1MDAKKzoxMDJGQTAwMDE3Q0NGNjMxREUzQzc2QUM4RjU5NTY2QTBGN0NCQkI1MzgKKzoxMDJGQjAwMDhFMTMyM0Q2Q0I0QkY5MEFFM0Q3NDM4QUM3NDJGMzdGNUMKKzoxMDJGQzAwMEVCOTAxQTA0N0VBQ0ZFRjAxMEUwNkZFMThCMEFGM0U5OUYKKzoxMDJGRDAwMDIzM0VBRDAyREZGQkRBRDYzODA3N0NEMzMwMzQzNzUxREQKKzoxMDJGRTAwMDUwRkY5RjU2RDM0MDdBRDNGQUFENzYwQTNGQUQ4NTJGNzYKKzoxMDJGRjAwMEFCREQwQzFGQTk0RUUzRjI1OEI1ODdDQjEzRDU1OTVDNTYKKzoxMDMwMDAwMEZGNzVCNTk3RTFGREJFQTI1RkUwN0JCMzU2N0M2M0Q1NEIKKzoxMDMwMTAwMEIyRDE3RjE1REI0NzhCNkFBQzAyRjQ1QTE0QkY1MEMyQTEKKzoxMDMwMjAwMDM2QTcxQjQyRjhFRUNFMDcyRDcxMDRERjFENTRCQ0QwMkQKKzoxMDMwMzAwMDhCRjM3NzA0OTdDMzRDMkJBREY3REI1RDA0MkZFQTlDMzEKKzoxMDMwNDAwMDNDQ0E4NUY2MEYyOENDRjU3MzBFNTUxREM0NzRCRjdFOUYKKzoxMDMwNTAwMEVGRDNFQkM2OEJENkY5OTY5RjU1ODQ0NjRCMkU3QjgwREIKKzoxMDMwNjAwMDdGMzlGQUZGQUE3QTEwOEZFQjY4QjU5RkM3RTVBRjZGN0IKKzoxMDMwNzAwMDNBRDg4RUJFNzdCQzdBMkNDM0ZGRUUyQjVBMDlCRUY1MjgKKzoxMDMwODAwMDhCNkZEODhFMThCRkE1QzkwQTNCNjM4QzVGRjE4M0NFQzYKKzoxMDMwOTAwMEMzRkQyMjE4MjQ3Q0FEQjE0OUJEQjI4NkY0MEFFNEMwNTgKKzoxMDMwQTAwMEM4N0U5MzFFQkQ1NTQwRUU2QjBGQTI5RjZCOTM2NzhGM0EKKzoxMDMwQjAwMDgxQkQzQTYxNTAzMURCQUZEN0ZGMjBEODdFMzVGOEZGQjQKKzoxMDMwQzAwMDYyRUJDODIzMUFCRUNFQTBGRTRFMDYyNDdFNUE3NkJDMDIKKzoxMDMwRDAwMENCNzA4Qjk1RjA0MzMzREVCQkEzQjQ1NDkwN0REMDcyOUMKKzoxMDMwRTAwMEY2MURGOTlDREFCMTlEQkE1M0I2NUI2ODkzRUQxNkVFMDYKKzoxMDMwRjAwMEZDNzUzMjNGNTc5NDY2MTFBMUVGOEUxMzFEMDVFMTIxMzcKKzoxMDMxMDAwMENFOTlGMUU4RTc4NDlGRTM1QjdGOTFBNjQ1RjBEN0YxODQKKzoxMDMxMTAwMEU0RDBCNzFGNDE0RUZFQkJDNUJCOUVGOTU0RkJFQzc5MTIKKzoxMDMxMjAwMEM4RDFBNTZFOTYzMzVGREI0MjVGM0UwQzM5REI5OUY0NjQKKzoxMDMxMzAwMDJBRDc1N0M1NEQyMjNFQUJCMDBCOERGOTRFNjg3RDAxQTUKKzoxMDMxNDAwMDFGOEYxNTMzOEI1Q0IyM0Y0RjZGRjkxQ0ZDRDg2QkRCQzQKKzoxMDMxNTAwMDQzREQ3RUU5NjlFRDZGNzNFOEU2OEYxRTA2MURCNjdEREYKKzoxMDMxNjAwMDlDNzAxOThEQjc4RjJBNDIyQUU2MkZFNDM4MDIxQjYyMjEKKzoxMDMxNzAwMEI5OUZCMjY3RUU0OUY2MTNGQzk0MjI1QTU0RTZGNzIwNDEKKzoxMDMxODAwMEYzRjNBRjZENjIyQUZBQ0Q1MkFDRjZDNUM5RTQ1N0RENTAKKzoxMDMxOTAwMEI3M0IwM0YzRUVBRDhBMkE5NUQ2RTVFQ0RGM0M5N0YxMTkKKzoxMDMxQTAwMDFDQkRGNzI0QzkyMjk1QzZGRjgyQ0RGQkY1MUU3Q0Y3MTYKKzoxMDMxQjAwMDUxMUEzRkY1RkJFNDdERTUzOTkwODcyNUZGMzJGRjMyNTgKKzoxMDMxQzAwMEUwRTE4RjEwNUE0NDg3REZFRERFQ0VGNjAyRjFBNDc3RkUKKzoxMDMxRDAwMDE0QzlCNTdFQUI1RjVBOTI0RUVEMkY1RkRCNjRFOTQ4QjAKKzoxMDMxRTAwMEE1NkY4MzUyOEJCMjc0Q0JGNjc3NkFBOEJGNUNCN0E1ODQKKzoxMDMxRjAwMDBBRjZFQkM3M0UwRjhGMkIyN0I0NkVCRDAyM0RGMEMzMUUKKzoxMDMyMDAwMDEzMURCMTJFQjM1NzdGNTNEMDUxNUNEOENFRjg1RDk3QzQKKzoxMDMyMTAwMDBGNUE4QTNEMkMxN0Y4RkQ5REY1OTNERkJENTFDMDhFRTYKKzoxMDMyMjAwMDIxMEIwNkUzMkRCNjdCNTlBRkQxQjQ2REMwQ0Y4RUVFMjYKKzoxMDMyMzAwMEVCRjBGRTJFNEI4MEY1NTU2MDk2QjQ3MzRFMTYwNUZFRUUKKzoxMDMyNDAwMDE1RjMyRkE3RjYwMTgyQ0I3RDBENERCNzUzN0Q3OTUyMzMKKzoxMDMyNTAwMDM3MTFBMEY5MUYwOTJFOUE4NkZBODE4QTcwMDMzRjE1NEIKKzoxMDMyNjAwMDNCMUUyOEVDNDhGMEM5QTFDMkFCNTBGRkYzNzY5RTJFNUUKKzoxMDMyNzAwMDY0N0REODk5NkM3NTdDNkY0NzZERUEwREQwODdEOTA1NTAKKzoxMDMyODAwMDAzNTRBQTJGNTI0M0RDOUZBODk0RkQ1NUQ2NkY3NzAyQjIKKzoxMDMyOTAwMDI2RDQyN0FCQzQ2NzQ5RjUyM0Y3Njc3ODVBRTk2MzY5RjEKKzoxMDMyQTAwMEZDNERBNjk1QkVENzlFRjQyOUM2QkIyNjMzOTA1RUU1OUQKKzoxMDMyQjAwMDZBRDVCRjE5QkVBMjFGNTg3RUI5RUYyRkM2NzdCRUEwMzAKKzoxMDMyQzAwMDcxQzEzRUJCNTQ3RDY5Qjc1NENERTdGMUE0MDk3NzYwNjUKKzoxMDMyRDAwMDcwRUI3NzNCNUJDMkYzMzEwRjVBMURFRTAwN0Q2N0EzQTUKKzoxMDMyRTAwMEJCNjExQUI3MjNGOEI3RENBRkU2Q0ExOTAwRkI4QUIwOTYKKzoxMDMyRjAwMDlFMjJGNTdCMkRGQTc1NEZFRTAyN0E1RDZBRkYwRkM1QUYKKzoxMDMzMDAwMEZEOURFREI0NEE0QjgyRDc5MUQ3NkFFNzRDNkQ1N0ZCRDAKKzoxMDMzMTAwMDYyMjNEMUVCOTEwRTVBMUFGQUI5NTlCNzkzODVENUVCQkUKKzoxMDMzMjAwMDgxRENCRkEzODMzRjNEODdFRDM0RDJDMzE2RDZCRjlENUEKKzoxMDMzMzAwMDczMjJFQ0U2NzM3NjlCRjNEMkY0RUZFRjNBRjhCQkUzM0IKKzoxMDMzNDAwMEZENEI2REVGRDFFMzEyRTdFNEYwOTkxQzkzMUNBRThEQjkKKzoxMDMzNTAwMEI3MEIxRjNEQUY1REVERTAzODg2Mzg2MDI5M0I0OEZFNzYKKzoxMDMzNjAwMENBMzA3Q0MyRDJGQUJENDVGMTM5MURBMDFGNkE4NTY4RkEKKzoxMDMzNzAwMDEzNUY3QjY5RkQ2Qjg0REIzMEU5MEQ4REU0QzBGMEIzMzYKKzoxMDMzODAwMENEQUFDNjcyQTI2MTdGNjIxRUU0QURGMEM3N0IxMDM3ODIKKzoxMDMzOTAwMEIwMDgyRDQyM0Y0NjdGODdFODU1ODBGOThEMTQ3MTQyNzEKKzoxMDMzQTAwMDhCRDBCMzdFOTE2NEM3QkExNUFFRTQ0QjlDNzdGODA5MTUKKzoxMDMzQjAwMEIzRkVEOUY3NDRFNEJDODdCNjdDMTAwNzEzOENGMEQxNzgKKzoxMDMzQzAwMDAxRTU4NUU2RjVBMjNFQUYzRjYwNUU1NDNFOUY1RjM0NjcKKzoxMDMzRDAwMDI1ODdCRTNGRUMyRjZFMkJFNjM3Q0MzQUIxOEJBRjFCNjcKKzoxMDMzRTAwMDhGRkIwNjhDN0JGODVGMkNFNjcxRkYxMDZCODIyRjc1Q0MKKzoxMDMzRjAwMEZDQjcyOUU0RDg4MThGQkZCMTA3QjFGRUVBNjEyQkQwQjkKKzoxMDM0MDAwMDNDRUFFNzY3MDdCMURFNzdEOTQ1QzAwOUJGNjc5MjlERkYKKzoxMDM0MTAwMEVERTBGQUY4NDAzQ0U0NkFCREUyMEUyMUZFRjQ4MkFEMzQKKzoxMDM0MjAwMDYxOUFGNDhCODQ3QkEzMEZGQ0ZCRTYyM0UwRkYxQjVBMUQKKzoxMDM0MzAwMEVDMEFFMjU5MUQxREUyNEJEODU3NDI0RDE0MUI1MzIyOTIKKzoxMDM0NDAwMEJFREZERUNENzEwRTE1N0EyMzk3RTBDMUZBRjM2OTc2RkYKKzoxMDM0NTAwMDdFNUU2QjEzQUMyNzAzRDM2Mjc5NUNBQjkzQUE1RUVCMDEKKzoxMDM0NjAwMDQ3RjVBQjZCMzJCQzM0NzJGMTgxMDhBRUU4ODZGQTNCQUIKKzoxMDM0NzAwMDU1OTZFNzQzMkNFQjM3M0UwOEJGNjc2MjFBRUI5OUQ1QTgKKzoxMDM0ODAwMDQ5RTE4QzRBQjQ5RjdGOTkzNzQwRkNCMEVCRUYyQUVCQkYKKzoxMDM0OTAwMDhGRDUzRTdGN0FCMjBCNzI5MEU0M0NEMTc5RjU0NDdGQjAKKzoxMDM0QTAwMDdBNkMwQUNBNTQwQkU2REI5MUU0M0MzRkNGQTQ3NjU0MTUKKzoxMDM0QjAwMDdFNjQ5M0VEM0VENEU5NDY5ODRFODdCQzdEQjhBNEE3QzAKKzoxMDM0QzAwMDgwRkM1OTk3NTM3MDNGRTg4NDBBMjdGMUYzQjU5MjA0QzIKKzoxMDM0RDAwMDYyREFDRDBGODhEQkQxNEU1MzgzNkEyNkYwRjI5QkZCNzQKKzoxMDM0RTAwMDdBMTE3Q0MzMkNENThEMzhEREI1RjM2MjlBOTRGRTU0RTUKKzoxMDM0RjAwMDZBNkFEODkxNDAyRjRDMTlFMzhGRjREN0Q3RTVGOEVGREIKKzoxMDM1MDAwMDA3OURDQjQzN0RCQTdGMUVDMUM3RDM2RUVFRjk3M0M4NEEKKzoxMDM1MTAwMDg3NEZDOThGODZERkJEMkM1NTdCODREN0U5MUUxRkI3MjcKKzoxMDM1MjAwMERCNDNDNkNEOEZEMDEzNEU0RjdGQjZCNzRCMEMzRjMzMjYKKzoxMDM1MzAwMDNDMUJGOEREREJFQzY0M0JGNjQyRkMyMDg0RDc3OTE5QjgKKzoxMDM1NDAwMDdERkY0MThCMDg4MTlGQkJFQTdBQkQxNjAxMDBEMDM5MEYKKzoxMDM1NTAwMDE0QzM3QzMwNzY5MkQzQ0ZGMTJBOTc2NTNERUNFOEM3NEYKKzoxMDM1NjAwMDg5NUVEMDZGODE5RDBFQTYxNzA5NEFBNkRGODM3QjNCM0IKKzoxMDM1NzAwMEIzNUU5QUE5Q0JCMURBQTlCMUZDNUVFRDc2NUJEMDAyNUQKKzoxMDM1ODAwMDNBMkJDMUE3MzZFMUJEMTc2MzU4N0Y5NkQ5MDVGQjJCQUYKKzoxMDM1OTAwMDY1Q0ZGNzY1M0VEODY1Rjc2NzJFNDNCRjdCMUQ1MjZGMzkKKzoxMDM1QTAwMDI3NzgxMkI5RkVERkRBMDlENEJGQTBFQkVCQjJEODcwRUUKKzoxMDM1QjAwMEFGMjRBMjUzRTdGNjVBM0RFODQxN0M1N0M1Q0ZFREYyNjAKKzoxMDM1QzAwMEY5RTE2MEMxM0FBQzRCNDFGNjREREM3MDgyODU3RjFENUMKKzoxMDM1RDAwMEU0NTU4MEVDQTA4RDVFNDkzRjhDNEJBQkVEQkMxRUUzMDcKKzoxMDM1RTAwMEQ1NjgxQ0EwQjNCODQzRTVGOTFDQTZCNThDRjkxREFFOEYKKzoxMDM1RjAwMEVBQ0NFMzUyMjY4RDREQkY5OUVBM0Y1QjE4Qzc3MUQ3REQKKzoxMDM2MDAwMEMzNDUwN0NGQzAwRTM4OUNBNkYyQkEyNzA5NzVERjQwMjQKKzoxMDM2MTAwMEFBMjc5RERCNzAyRkMxOTVGMzNGN0Q3MzIwM0RBREE4OTgKKzoxMDM2MjAwMEZEQjBDQjFFNEYyQkRFQTcyRjI5MUYyNzg4MEZBNjJGRkIKKzoxMDM2MzAwMEI4NzM4MjQ4QjhGMDdBOUQ1RUU2ODA0RkQ5QkFCRTg1RUQKKzoxMDM2NDAwMDFEQ0U5RDg0NDlBRTFGQ0JGMTdGODg3OURCNzNCNTRGQ0EKKzoxMDM2NTAwMEMwMEY5NUQ5NjQ2RjEzMUY3RDZENkY3ODBDNzE5NUNGNzYKKzoxMDM2NjAwMDNDREE5RkYxRkNENDczNUY2REMyNzM2MTZERUVDNUZDRjMKKzoxMDM2NzAwMEUxNkMyQzQ0NUNBNkNDMjJFMzRBMEZFNTZBNUZFMDNCOTgKKzoxMDM2ODAwMDk2QzYwNEE2NUY2NUM4QzFGNDhCQ0I2RTkwNzJGMUNFNkUKKzoxMDM2OTAwMDRCRDMwN0M3RUEzN0VFNTJBODlGRDJEOEZBMEEyRUQ1RTUKKzoxMDM2QTAwMDYwN0ZFOEFCRTM0QTM4NDFFOUNFRjhENUIwQUU0RUI4MUEKKzoxMDM2QjAwMEMzMDlBMDhGNjY5MUY2NUVFOUU2RTg3OUQyNTA1MzExMEUKKzoxMDM2QzAwMDc3MTM0MkZBQTkyMUZCMTAxQUQ3MDIxMkJEMEZCQkYxRTIKKzoxMDM2RDAwMERDREVEQTNFQjM5NThFRjQxREE2QTM3MDdEMzJFMzk3NEYKKzoxMDM2RTAwMDY4RkY1NDlGOUM3QjA5RUZBNTQ5N0I3RTMzMjRGMzdDQzQKKzoxMDM2RjAwMEZDNDVDM0M2N0NDRTFGOEZCRTRFOEFDMjA5NTgyN0M3NjEKKzoxMDM3MDAwMDE1Qjk0RTRFMDgyOUJGMDI5QjYzRjQ3ODgxMUNDN0Q3QjgKKzoxMDM3MTAwMENGNzVFMDcxQTRFQUVCRTg2QjQ1NkZGNzk0NDNCNjIzRUQKKzoxMDM3MjAwMERFODMzRDUzRkE3QkM5NzcwRkRBQkNBQzM3MDNBNDRGNzUKKzoxMDM3MzAwMDIwMkY0QkRCNDlCOEQ0OTFFNjg2QkRENTUxMEQ1ODYyOTgKKzoxMDM3NDAwMEMxOTdENTgyRDcwQjhEOEREN0U1RjE2RDE5RkNCRTIxQzAKKzoxMDM3NTAwMEQ3NDQ5MTEwOTA2QkE1REJEMkQ3NEJCQjRFRjc5QjMxNzIKKzoxMDM3NjAwMDAxNkFCRkUwNzdCMjNGQzA5MEZGQzc5RUNFRDBGQjk3MDMKKzoxMDM3NzAwMEVCMjk5QUFFRDE3OEM4Q0U5NTcxQUVEQUY4RkMwRUZGN0YKKzoxMDM3ODAwMDI4QkU5OTk1RjZGMTVBODhBMDA3NkQ3MjVEMDdFMkE1RUIKKzoxMDM3OTAwMDFFMjFCQjI1NkQ2MjNGRUM0RkQ4NERERkZEM0FERTNFNkEKKzoxMDM3QTAwMEQzRUZDMjNFODVGOUI5RjFCRDQxQjlEMkVGRUMxQTQ1NkMKKzoxMDM3QjAwMEY3OEU2QUYzNEJCMDk3QzQxMzgyRTU0NEY0Mzg0NkUwQzEKKzoxMDM3QzAwMDNEQTJEQkQzNEY5RkEzQjMyQUU5NEU4QzY0RjA5Nzg3QzkKKzoxMDM3RDAwMEYxMjc2Q0EwQ0Y4Nzc2ODM4RUI3NjY5MDVDMkYwNUFFRkQKKzoxMDM3RTAwMEJBQjVFMjcxOTc0RkNCODAxRUY5MUEzMEUxN0I1NzEyQzAKKzoxMDM3RjAwMEMxRDlCMEI3QTRGRTMwNjA4MzFFRDE3Q0JBRTRDMzM5MEUKKzoxMDM4MDAwMDE5OEQ5MDRGQjlEMjNGQTg4RDQ5RTgyRjEyNTE3NjA5RjIKKzoxMDM4MTAwMDQyMEVENDEwNUU1MTRGN0E3MDY2NTEzNkZDRTFCMUY3MUEKKzoxMDM4MjAwMDdGNkU2QjlEQ0Y5N0Q1N0UzRkE5QTA3M0YwOUMzNTNFRjAKKzoxMDM4MzAwMDI3RDZFN0RDQjUzRUU3QUMwODdBRDQ2RUNFM0RFNDIxNkUKKzoxMDM4NDAwMEJDOUZEODZDNDU2NDUyRDQ1QTgzQkZCOTIyMDVDRkQ1RUEKKzoxMDM4NTAwMDUwNDA3MEJEMTNGODNFRTFEQUY3MjZEQUNENTk5Qjk0NUIKKzoxMDM4NjAwMEEzNDZDOEE3Qjk2QkM2Rjg0QjIyRThEMDc3QjM5OTJFMDgKKzoxMDM4NzAwMEZENDI2NkY4RjIzRDY2RjhFN0E0REIzMUJGOUZGQTlFOTEKKzoxMDM4ODAwMDJGNkM4NjczMEY5OUUxREQ4MzlBRDUxRkExOUY1Qzk2RkIKKzoxMDM4OTAwMEEwNTM0MUQ5QTJGRTA4RjkxRTU0ODNGMDMzQkFERTU5NzEKKzoxMDM4QTAwMDM0NzkzQ0MxNDdENkNFRjY4MkNDNzNERjVGOTIwRkZBRjMKKzoxMDM4QjAwMDlEREM3OUY3QUU3MjdBRUY0OEIyQzUwQkZGRUFCODA4MjMKKzoxMDM4QzAwMEZENzEzQ0QxNjM0RUZEMkFCQkQ1ODNGOTlBRjk3Qzk3RjMKKzoxMDM4RDAwMDQ1RTdEQkE3NjUxQzcwN0VEMDVDN0ZCRTdDQThEMUUzOEEKKzoxMDM4RTAwMDRFMjIyQjkyQUZBMkU5NEZGRDVFRTdBNzgxOTUyRDlFNTgKKzoxMDM4RjAwMDdDM0ZFQzlGNzlFMzg4RTE2OTdDODM0M0FCRUNDMjc1NDQKKzoxMDM5MDAwMDI5RkQwNDE4QUZENjA0MTE0RUEzRjEzNUREMURDRkYxMEEKKzoxMDM5MTAwMDk3MkIxNjhGMTI5RkQxRjdDQUFERUVGQzVGRDIzQzY3OTIKKzoxMDM5MjAwMDM5MTU3N0MwREQxQTU3NkZEQTlFNUUwMTdEQkFEMTZEMDkKKzoxMDM5MzAwMEYxOTI4RjIzREM4M0FBMEU2NkU0QzE5RjEwMjFCNzE3OTIKKzoxMDM5NDAwMDcxRkRCQjk2QzNFRjlGNTc5NUMwRjg5OTJGODIxQzk3QzYKKzoxMDM5NTAwMDlGQjVENEQxMkExRkU5QkY5Mjk1NTFFMzU5MUQ1MTRGMEMKKzoxMDM5NjAwMEYzOThCN0Q2REM3RUMxODYxRjFEOTFCMEUxOTc1RTUxRkEKKzoxMDM5NzAwMEJGNEVDNTdDNkZENkM3QUQwNjI2QjA1RUJFNDI4RjU3MjAKKzoxMDM5ODAwMDdDOEVBNkE0NkZCNjc2MkZEQTlEOEJGNkFCNDdDQTdBRUIKKzoxMDM5OTAwMEFCNTNEN0IzN0VGNkYzQ0E1RDc2MEZDQjMzRUJEQkNCRkQKKzoxMDM5QTAwMDc5N0Y4N0Q2MjFGNEMzQTFGODM5M0Y4N0JDM0JFRDE0NUEKKzoxMDM5QjAwMDZFODcwRkVEMzU4NkJGNkMyN0ZENDJERUI3QTBGNkE3RjgKKzoxMDM5QzAwMEQ3MkFBQ0Q3Q0JEQjQ5QjhGQzA5MjU4ODE4NzAzOTgyRDcKKzoxMDM5RDAwMEI2ODA5Rjk0NzFEQTMyMUQxRkUwMTM3RkM0N0M0MEFGMjQKKzoxMDM5RTAwMDQ4NThENDE5RjFGMTMwRkJCRjE1NTVDMjBCM0I0MDEwQkMKKzoxMDM5RjAwMDFERkQwNkRFNzgzRjJBNkMzRjAyM0QxQjUwNDIwRkZCNDcKKzoxMDNBMDAwMDYwRUY5OUJGNTNCOUU3NDc0NzI0N0MyRUJFNENBNEFCNjcKKzoxMDNBMTAwMEUxRUYwNzE5OEZBQTVERjgyMUM3RDVCQjYyRDk2RTI3RTAKKzoxMDNBMjAwMDA1MTAwQkZENkVEM0VENkJCMTIyRDgxRUZBNkEzNUY0OEEKKzoxMDNBMzAwMDE1OTVDQjc0M0IzQ0IwNEFFQUFCRDU0OUZFNUU2RUQ0REIKKzoxMDNBNDAwMEFGNEFGNzAyMEYzNzI4QkE3RjBCQkIzRTA5RjZGNTNFQTcKKzoxMDNBNTAwMEVFQjc1OTcxQkJENzI3QTFCRDA4QzRBNEIwN0QyREZEMTkKKzoxMDNBNjAwMDg0QkZBQkFDRUY5QUM5N0U1RjBGN0JERDE3MEE2MzNDNjYKKzoxMDNBNzAwMEFCMUZDODY0N0JGRDA1NDNFRkREMTcyM0VERjlGM0VEQzQKKzoxMDNBODAwMDZFQjZBRkM0RkREMjdFRkM0ODA4RTlGN0Y2RDBCRTAzOUYKKzoxMDNBOTAwMERENjdBQjQ1QkMxOTU1QjJDNDlGOEVFRjk2NENCMjVCNDcKKzoxMDNBQTAwMDQwMEYzMUVGRDJGNjQ1MzY1QTY1RkZDRDM0NUZDNEVCOTcKKzoxMDNBQjAwMDNGNTc4QTBFNUEyMkVDNjA2NzlFRDQwRkY5MDVGRTREREYKKzoxMDNBQzAwMDdBM0IyRkRBOTU1OERFNjYzQzk0NTg4NDFCRkVGQ0M2ODAKKzoxMDNBRDAwMEIzQUFCMDEyQkNCMUNFMTE1QzQyQUY5NDc0RjNGNzVBRTIKKzoxMDNBRTAwMDk4OERGNzY0N0NFQUIwNEZDQUZCQjgzQ0UxMEY1Mjk5NUQKKzoxMDNBRjAwMDk0MjdGNTU1NTI5RUM1NTQ4QUQxMzJDRUYyNzk4Q0U0ODIKKzoxMDNCMDAwMEMzRTlBMkE4OTBGNzA3M0M1MkRFNDdDRkEzQjNGRTlEQkUKKzoxMDNCMTAwMDEyN0I4Mzc5M0M5RkVDNjdCQTkwQ0U3MzJGMDE3RjhGMjUKKzoxMDNCMjAwMDk2NzZDN0U3QjcyOEFDQ0Y2OTNFQkREQzA0RTdGRjRCMEMKKzoxMDNCMzAwMDBDQzcxNzNGRDdGNTkxODE1RkUyOUYwMTg4QTMxOTcyRTcKKzoxMDNCNDAwMDJCNDlFNzk3RDVGNzA0OUY4QTIxN0NBRkIyMTFERjgwMUMKKzoxMDNCNTAwMDZFQzQzNzFCRjM5OEVFNkMxN0FFOUU5NkNBNzRCRjQxQzUKKzoxMDNCNjAwMEE3QUJCODJGOUVFOTM2QzQ2MjkxNzhCRTJGOURGMTRDNjkKKzoxMDNCNzAwMEVEQzU1RkYxREUxODhGQjRFNzJGRDEwRjIzQkEwRkM4NjAKKzoxMDNCODAwMDFCNzBCRTNGNjZEMDVCNTg4MzAzRkVEMUZFNERGOUVFM0QKKzoxMDNCOTAwMEFEQkIwMkM0RkYwQjdFRkY0MDgyQTA3NjQ3QUQ3NUE5ODYKKzoxMDNCQTAwMDVFN0FCRjZDRTNCMjA0M0Y5NTQ3QUM4MTA0MzdGNTdGODIKKzoxMDNCQjAwMDM0QTg4RTBEQjY4MUVGNDUzQTNGNjBGRjQwNDlDNUJFM0YKKzoxMDNCQzAwMEFCOTRFM0M3OUVGRURCRjIzQjY4OUNERjJBQTIxOUYyQUUKKzoxMDNCRDAwMEIxNjJDN0Y3Q0JFRkEwRjkxREY0M0I5QjIxNEY4RjU4ODMKKzoxMDNCRTAwMDFCMEIyMTc3RTcxN0JCQUE2QUJDNThCRkU2MzhGRTgyRDkKKzoxMDNCRjAwMDI3MUY0OEY1MzBCRTAzMTk5NjM0NUVGRjE5NzhBRjYyNkYKKzoxMDNDMDAwMDgzQ0QwQkJGQUVFMjNERDVFQkMxQkExN0NEQ0IzMUJFRjQKKzoxMDNDMTAwMEU4RjcyQjQzOUZEOTgxN0ZCNzQ1MzQ3NzFBRDI0NkJENDkKKzoxMDNDMjAwMDY4NjQzOTVGQjlFM0Q3REZBODA5Mjg4RjdFMDRGRkEyNTMKKzoxMDNDMzAwMDMyNkFGRjYwOUVCRUJGMTJCRDhGMzAzQkNGOUNDNzQwMzMKKzoxMDNDNDAwMEY4RTEzQzg2MDA4REFCMjdCMzhCOEMzQkQ3M0VGNTUwMUIKKzoxMDNDNTAwMEZGMjZEODBEMUI1RTRCNTBCMjVCRjcwRjhDN0Q5Nzk2RkQKKzoxMDNDNjAwMEQwRUNDNzlGRjc1Qzc4NUQ3RUFEQzc4RDVCRTkyNkU1M0MKKzoxMDNDNzAwMDk4NjcwRjBEQUM4MzQwODA4MUNCMzI1QjM4MDFGNjdFQjQKKzoxMDNDODAwMEQ5M0ExQkNCOTFCMkFENEY2QzdBMThGQ0Y2QTFDM0RCQ0QKKzoxMDNDOTAwMEQzMDNGOEI0MURGMkEwNENGMTM3MkIyQ0RGNDU4MjkyRjAKKzoxMDNDQTAwMERGNEFBRkQyQUQ1RjE0M0UwMkZCM0E1RDE1RTM4ODVFOUEKKzoxMDNDQjAwMDBCOUUzRDIzREJGQjQ1NzMwQ0I1MkZERERFNTQwOEZGNjcKKzoxMDNDQzAwMEEwNEM3MzU1MzlEQkEwRDdBOEQwNEJGNjQ2NTcxQkY0NTAKKzoxMDNDRDAwMDBBMzUxNTcyOUNFQUE5RUY5ODFFNDdGNzJBQTI0M0U2MTcKKzoxMDNDRTAwMEY5RUZDRjVCRjc4NTVENDhGRkEwQjk1RDkyQzQxN0Y0OEIKKzoxMDNDRjAwMDVENjU0ODJEQjYyNzlFREY5RUJFM0ZFMUY5M0NBRTc3NUQKKzoxMDNEMDAwMEMzNUZCOTE4MUQ0NzAxMTc4ODEzRUM4RTE3NDlEMERCMjQKKzoxMDNEMTAwMDFGMzk4MkUzNDBERjZEOEIxMjA0RjFGRjU3RDYyQUM5QTkKKzoxMDNEMjAwMEY3OEYyRTRCODU5RDM3Q0YxNjQ4NzU3MzI5OUZDRjdCMTQKKzoxMDNEMzAwMEVDMzZFNkM3Qjk0QTU1QUEzQjlCRjkzREREMzI4OEU3MjgKKzoxMDNENDAwMDlCOEU3OURFQkNGNjVBOUVFNzFDQTEzMTNGQ0U3QjU0OTgKKzoxMDNENTAwMDJEMEE1Mjc5QzYyQUM2NkU2RjYzREQ5Q0Q0RTU5NDQzNjIKKzoxMDNENjAwMERDRDIxRkVCRTQwQzdEMDk3QUZDMkJEREFGMEZCQzIzMEEKKzoxMDNENzAwMEZENjk4Nzk4OTQxOEI5OUZCNDU3OTc4QjAxMTEzQzBDMzMKKzoxMDNEODAwMDNENTBEOTYwRTMzODg1RkFGNjk5NDI3Q0U3RDY0QzZCMTIKKzoxMDNEOTAwMDE1RjIzRDY4RkUwMTFENUZDQThGRDI3RkYxMjBFRkExQjEKKzoxMDNEQTAwMDEyRkYyMjdEM0FFQUVEMzExRDFBQjNGMUZEMTZGQjRERUIKKzoxMDNEQjAwMEQ0RUY1RkUwMjc3QTRERUYzMURFQkU1QUVGODg1NTJFMDMKKzoxMDNEQzAwMEE3MzI1NURBRUZEMUYzRTgzNDQwMzFFQ0I4Nzc0NDA0NDgKKzoxMDNERDAwMDNGNTU2RUZFOEFGOTQ5QTRBOTIyMzE0REMyRDhCRjcwNjEKKzoxMDNERTAwMENGNzI1NTI1MTJERUZFRjJERTY3NzZDNEJGMDMyOTE2QjgKKzoxMDNERjAwMEQxMTNFMzZERjg4MjYxRTE2REVGNDE3QkUzRkI5NTdCQ0QKKzoxMDNFMDAwMDFDMjIxQ0I5NkUzNzdDMTFCNUFFQ0RGNTQyNTQzMTNFNDMKKzoxMDNFMTAwMDJCNDVBMjA3RkFGQjJCN0I3M0UxMEJFODg3RkFERDQ4MDEKKzoxMDNFMjAwMEZEQ0MyMUZCMkI2Q0IyQUY5QTBCMUY4MTNDRDk2Mzc3ODEKKzoxMDNFMzAwMDczRkM4MUVDQ0Y3MDA0REY5Q0RCMUZENUY3MDVFN0VBNEMKKzoxMDNFNDAwMEYyMjAxQTBGRDFGMkUxQUIyOEY5NjBCQzJGRDZCNkJEMzMKKzoxMDNFNTAwMDFGRDUyQTE3MDIyQzRGQ0I2QzIyMDAzQkEzRUM0MzA3NDMKKzoxMDNFNjAwMEVCOEZCMkFENzIzRDBBOTJBNzNENjk3RDFDREZCMkZGQjgKKzoxMDNFNzAwMDhGMzdDMDlGMEREOTUyQzY3MUFGNjZGOTNCRUY5OTJGQUUKKzoxMDNFODAwMDc4NUVCMzA5RkYzMTVFQzhERkVGRUNGMDdGRDM0Njg5N0YKKzoxMDNFOTAwMDY2MDdGNjhCNTdGQUVDRTBGQkYzRDYzMTNENkY3MzFERTYKKzoxMDNFQTAwMEFGNTQ1OEJFRkQ1N0U1MkVFMURCMEU3QkVCNjJFQjc1QTAKKzoxMDNFQjAwMEVFMDVFNDZFRjIwMDczREVEMDE5OTE5RDM4MDQ5NUVFQTQKKzoxMDNFQzAwMEUyQUVCQzdGMTA4NTVGMDNBRkQxNzJGNEU5M0M0RjlCM0IKKzoxMDNFRDAwMDcyOTRGRUZDNTE0NEUwNTE4ODQ2RTZFMzZGNDkyRTYyM0QKKzoxMDNFRTAwMDFGQUU2MkMzRjdBQ0Q3MDhBRENEMEVFMkUzOEFFMDM3NzAKKzoxMDNFRjAwMDBDMkY4MzVFNjNGOEE1Mjk4ODU3OUUzRjZGMzMzRUEzM0UKKzoxMDNGMDAwMEVCREYwM0VGRDNEMDhCOUVCM0IxNUQ1MDU2MkZGMzFDODQKKzoxMDNGMTAwMEU5M0RGNjNCMkExMUFGRTdENjc1MDczMzUyMjJFMTYwM0YKKzoxMDNGMjAwMDE0MUM4QTZBRUY4RjgyOEJBMkRBNkI1MTcwOTVBOTdEN0YKKzoxMDNGMzAwMEQ5OUVGREVDNjdEMUI4NERFRDFDOEJBRjYxM0ZFNDdDQTEKKzoxMDNGNDAwMEJCMjJDODc4QUREQ0YxOEQzRDAwRkVFOEQ0NkM4NzVDMDcKKzoxMDNGNTAwMEI0MkQxMTgxNzg3QUJGRjk0NTk1RURERTUzOUVFNjA0QzQKKzoxMDNGNjAwMEQ4MjlDQjYyQTQxRDc3Q0FBREMzNDkwNjJDNjYxNkQzRTcKKzoxMDNGNzAwMDM4NEUwNUZBQkI5MTU3RDAxQzIzRTMyREE3OEE5QTEzMUMKKzoxMDNGODAwMDkyMjJGQ0Y2QTY3QTM1QzE0M0VEMUI4MzYyNkNEQjc5ODUKKzoxMDNGOTAwMDMxQjU4Q0Q3NDY3MUExN0E2OUNGOEQ1MTdGRDgyNkYzODAKKzoxMDNGQTAwMDQ1QURDMjQxRkQzNUQ2N0NCNzBERjFBNENGQzk3RjgyQTYKKzoxMDNGQjAwMEZENTI1MjczN0QwMkY2NUY0RUQ1NzdGRkQ5NTRGODgxREEKKzoxMDNGQzAwMEFGQUE5Q0YzMjUwMjdFM0JGMjI2NjY0QjUyOEEyMzIyM0YKKzoxMDNGRDAwMEYwRTA1MDlBOUYxQTlGNzdGMDA1Rjg1N0M0MjhEOEZGNTEKKzoxMDNGRTAwMDJDNTkxOTY1REY4OEEyQzQzMEZDRTlENUQxRjkwRDQxRkYKKzoxMDNGRjAwMDNCRUM5QkI5QTQ2NzIxOEZFNkFEMzVENzJGQTgzRkNFMDgKKzoxMDQwMDAwMEVCNjU0MUQ0N0FEMUY0Qjg3MUY0N0E1OTZDQUMxNzlGNEUKKzoxMDQwMTAwMEYwRTlGOTk2OUNENzc3RUE5MENBRkNENUIyRDQyNjk2RjcKKzoxMDQwMjAwMEE3QzhCQzVBRTRBM0I0RDRDQjdDOUQ5NjNEMTIxNjAxMUMKKzoxMDQwMzAwMDNEMEY0ODVGQjcwNkRFNEU2MDNERjVCRUIwREQ3MjYyRjMKKzoxMDQwNDAwMEU3QkZFN0ZGMTJGQ0IzRUJFM0ZFOEY1MDc5NjJENzg3M0YKKzoxMDQwNTAwMEJENUUwMEJDRkI0RjVEM0UxNkU3QjcxRkI1RjdGQjE5MTEKKzoxMDQwNjAwMDNDQUVCRDBFODE3MTlEREFGQjRBMTdEODFCQTc5RTc3MjcKKzoxMDQwNzAwMDcwM0VDMkE5MjUwRUI2RDcwMzdCRTMzOTZFNzFBQUIzOTEKKzoxMDQwODAwMEI0ODc2QjVGRkNBRTdGMjNFQkUzQTU0Q0M3MjcwNkQ4NTQKKzoxMDQwOTAwMEE1NUQ1NUZGMzdENjhGMkRGNTBFMEZFNjUxQjkzNzhFM0EKKzoxMDQwQTAwMEQ3NTVFNUYzMzFCQ0FGNzZFQUM1RUZGMjIzRTM3MUZGRjQKKzoxMDQwQjAwMEQ1RjkxOEZCRjBBN0UyQzVENDY3QzBCRkJBRkQ1RkY5MTgKKzoxMDQwQzAwMEMyRTAyNzZBRTAyRkVGNzhDOTNFMUI3OTI1N0ZGODhGODEKKzoxMDQwRDAwMEZFOTBBRkE3OUU3OTg5RTVFRkQ3QjZDNkM3MTBEQkRDQTcKKzoxMDQwRTAwMEI2RjNDMEMzQjY3NEM0RjVFODYzMUQ4NUI4NzI5N0Y1MUUKKzoxMDQwRjAwMDQ2QUM5RkYzRjEyMkYxNzA4QUYwODA3OTExNUVFNkMxM0YKKzoxMDQxMDAwMDJFQkYxMDNFNUVGRUE3QzVDNzM3MzNBNDlDMUIyOEIwNDgKKzoxMDQxMTAwMEVGRDM4QTE3QzUyRjlGQzc3M0JDOEFFNjJGOUZFRkZEODkKKzoxMDQxMjAwMEFFM0ZFNEQwQzVFNkZCMTlFNkRCRkVGRkNFN0M5NUZDOTYKKzoxMDQxMzAwMDdGRDZGOTRBN0VCRjY3ODA4N0M3MTlDREY3RTdGM0Y1QzkKKzoxMDQxNDAwMEVFOUYzM0JDMkRERUNCRTNCREM0RjU5RTk5RkY3RjhCODQKKzoxMDQxNTAwMEJGNDdGQ0QzQ0VGNzYyRjQ3RTU1QTc3N0JDMUJGQkEwMEMKKzoxMDQxNjAwMEE3NUVGQzhGMkVFMjI3Q0M3QkM2RkY1MjNFMzdFQ0Y5RDAKKzoxMDQxNzAwMDAyRDU3QkM4NDdFRDVGMTNBMUY3QkM5OTZDOTVCNDY5NzQKKzoxMDQxODAwMDhGRkMzQURGODhBNzQ4N0Y2QTE0RkVFNTQxRkI5Q0E1QjcKKzoxMDQxOTAwMDIxQUMwN0IyMjdFMEM3RDRCQTcyMEVCQzRERjAyQjY0MzUKKzoxMDQxQTAwMDI3QThCQzJGMkJFMzQ5QUZBNEY5ODIzMkJFNUIyNTEwQjAKKzoxMDQxQjAwMENGMkFGOEQzNkM4NjVGRjc1RDc5MDA3OTI1ODVBQThDQzQKKzoxMDQxQzAwMEM3RUNBRkYxNkU2OEEwNzlFQzRGQjI3ODZBMDkxRUREREEKKzoxMDQxRDAwMDY5RjZFN0RCQTlERURENTE3NUMzM0ZBQkVEOTRFQkY0ODcKKzoxMDQxRTAwMDQ0OEM2RkI0Q0JFQzY3NUQxM0U1Mjc1REU1MzFENzhGNjkKKzoxMDQxRjAwMDE1Q0ZBNDYwQkY2RTZDQjY0REUwN0M0RTIxREE0N0Y4NTcKKzoxMDQyMDAwMDk1RjNGM0REM0NDRkFCNDRERDUyQjdFQkE3RTNFOTM5REYKKzoxMDQyMTAwMDNEQUY5MkYwQzJGQjM2ODE0RUFBOUUxNzY3QzY5QjAwNDcKKzoxMDQyMjAwMERFNTI4MDk3NUNCNkRGMDNDMjdCRTA2RDgyQURCQTdENjMKKzoxMDQyMzAwMDI1RjRGREM3NDI2N0ZDMjZGOEQxMEU1MTEwMEUxMjdDMDIKKzoxMDQyNDAwMEM2NjNBRDQyN0JBQjIwN0Y1OENFOTNGREU4NjhCQzA5QzYKKzoxMDQyNTAwMEREQUZCNkVBMjQxOERENjk1NDE4NzhDNkYzQUU2OUE2NTYKKzoxMDQyNjAwMEY3NzlERUQxNzhGRUU5NzhEREQ3NjkxMUYwOUExNkVGOUIKKzoxMDQyNzAwMDBEODIyRjNBM0Q5QjgyMzg2QjJERTE1OTUxNUFGMTY5REQKKzoxMDQyODAwMEUwMjkxQUVGQkZBMUIxNEE3RjVERTJCQjkzRDU2N0M1QjQKKzoxMDQyOTAwMDNBMUJBNkRCRjNBM0FENDkxMkVFRDRBMDE2RjFGQTBCM0MKKzoxMDQyQTAwMDRBQkVGRThCRDcwQTdCNjRBNDJCODlGMzQ5ODU3RUNFNTgKKzoxMDQyQjAwMDQyRDVGN0MzOTE2MUM3RTMyMEZGMTQ3OUI5MTNBRERBOTIKKzoxMDQyQzAwMEFCRjk5QzhGRUYxNjA1RjA1QjBCNDQwOEYxNUJBNUZFODQKKzoxMDQyRDAwMDk1RUZFMTFGRTE3QzQ5MTFFRjZCMUVGQzAwNzA2RkE3QTkKKzoxMDQyRTAwMDJCMEM3RjUwQUNCNTlFMzg2NzI3MjNFRTFGNzVCRTYyM0UKKzoxMDQyRjAwMEMyQTBFRDIzNDFBRjU5OEJFOTE5RTI1ODZFQ0Y0MUFDMTIKKzoxMDQzMDAwMEM3RTJGQjFEMUVEMEFGOTNCNTgxRUJDOUQ3NzJENzBDQTYKKzoxMDQzMTAwMEM2NkU3NTg4RTFEODEyQjJGNEQzRDFFRTk1OTFEQzdFRTkKKzoxMDQzMjAwMDkxNzAyQjQ5NDhCNzBCMjk4MDVENkU5OUFGNDZDRUVCNTMKKzoxMDQzMzAwMEI3ODBFRDRCRTMzREI1MzI2RTIyQzA0RjNENTA3NkMzQTIKKzoxMDQzNDAwMEY3NjVGQkI0RDFGNDNERTRCQjA5OERFREU1RDgxRTFDNDcKKzoxMDQzNTAwMDA5MTJERDk0MjJERTdGRUZEQTVERTY0NTM0MkY3M0IwN0IKKzoxMDQzNjAwMEJGNTM3Qzc3RTc1RTkwNEJFMzBBQ0M3MUVCQTEwMzY1MEEKKzoxMDQzNzAwMDNDQzcyODlGMUEyOEU1ODg2QUYxQTZFMTNCQjM5NkY2NjgKKzoxMDQzODAwMDYxRkY0QjhEMkQyQURGMDkzQzZFOEI2MzNFMkY1RTdFRDUKKzoxMDQzOTAwMEQzRjgwMUY0RkRFMjZERURCQzE4RTZCMTA5REJGMzY1N0QKKzoxMDQzQTAwMEZCNjlCN0JENEZDRkI1Q0QzMUZDRkNGNTgxREFGN0Y5MkMKKzoxMDQzQjAwMEM4MzM1MDNDMzM3NkQyODM1OUQ3RUVCN0E3NTExNzVBM0EKKzoxMDQzQzAwMDY4RTI0OUM0MUQyNzA0QjZCRjg5N0RDRTA5NTM1NDZFRTcKKzoxMDQzRDAwMDNGNDFDRkZGMTQ0QkUzNzhERjdDN0NFMDFCNkIxQTdEMDEKKzoxMDQzRTAwMDZGM0MzOTM1QTg2RjhBNzE3N0I5ODVDNjVGQUNDNzlCQkEKKzoxMDQzRjAwMDZEMDNFNTNBNTQ2Mzg1RjY4QzBCRTNFQURDQUIxQjNEQjkKKzoxMDQ0MDAwMDFGMkY2NDNFNzRGNEJBMURBOUI3RUYzQUNBRUI0OTAxRjUKKzoxMDQ0MTAwMDdFOTQxOEY3RkFCQ0Q2RjZGODBFQkU3QkE1OEUwRkY3ODEKKzoxMDQ0MjAwMDQwQjlFRjZCQzA4NDU3OEU4Qjk3QUM3MDM0NzU0RjQwOUEKKzoxMDQ0MzAwMDY5MEJGN0E2QjI3QTcwNDFDQTQwQUExRkQ3NEQxNEFFRDUKKzoxMDQ0NDAwMEMxNzc2RjU3QzU3QTFFNkY3MzMxQzdEOUUzQjMzQ0EwRUMKKzoxMDQ0NTAwMDgzMjZFQTM4REY0OEFDRUVDOUZCMzk0RDIzMDVGMzRGMUMKKzoxMDQ0NjAwMEQzQUE0QzgzREU5QzlGNjRGODczNEQyM0JEMDc5MUJGOTQKKzoxMDQ0NzAwMEQ1M0NEMkU5NURFRjQ1N0U0QjI4OEMzOENBRTEzNTcyRDgKKzoxMDQ0ODAwMEJGQTY2QjZEQjgwN0U0NkNCMzRGRUU4MzdDQjEzOEQ3MzEKKzoxMDQ0OTAwMDAzM0VCOUY5ODFDOTA5OTA5RkIzNTdBQjYxMDdGODdEMTUKKzoxMDQ0QTAwMEE1Mzk2RjQ5QjhCRDlDMzczRUJCNkVBNDFERkU2Qjg5MTQKKzoxMDQ0QjAwMENCNkZDN0JDQUUxQUE0NzkwNzQyRkVFQkU3MjIyRkMzMkQKKzoxMDQ0QzAwMDk4NzBFRUE3QUVGODc1Rjg3RDZBMDJBRDY3QUMzRkFCQTkKKzoxMDQ0RDAwMDI3MDE3RTc1NzRERTUzQTU5RURGNjRDMENCNTJCNUMxNDMKKzoxMDQ0RTAwMEY4REVBQzQ0Q0YzNjNFNUZCOUI4M0JDNzU1NkYxRjI4RTYKKzoxMDQ0RjAwMEU1QUZCMDg2N0IwMDNGOEZEMTVBQzBGQTNDOTEyRkY5Q0YKKzoxMDQ1MDAwMDZGNUNCMkJCOTc4QkY5Mzc0NjYwNUU0RDM2NzcyRkYwMDQKKzoxMDQ1MTAwMDczRDNCMjE4MEJGMDM0NkU4OUU0RTM3QkFDNzI3RDA1ODMKKzoxMDQ1MjAwMEZEMUU0QjgwREU4RkQxRjk3NzdBOERCNTY4MURGNUQzRUUKKzoxMDQ1MzAwMEM5MjlBQ0YxQzlDODVCRDNEQzE4QzdGODQwQ0Q2MUY4MTQKKzoxMDQ1NDAwMEQ3QjM3NTdEMzU3QkE1M0MzRkQ2NzU5NEE0QUJCMDM2MEIKKzoxMDQ1NTAwMDhDNkU0N0NGOEY2Q0NDQ0M0MTVFQkNDMTM3RjU4MzBCRTIKKzoxMDQ1NjAwMDhBMDY0NkQwN0Y1QzgxQkZCMDNEN0Q2NzlDQzVEMzAyODMKKzoxMDQ1NzAwMDM5NUMzMjQ1NzlBOUJCRTQ4MzZCMDdCMjNGNUZDRkVCNkYKKzoxMDQ1ODAwMEJDODVFNDg0MjMwOUU3MDYxQjI0OEM3QzU1Qzg4REJBQkUKKzoxMDQ1OTAwMDg3RkNDRTA4QkZERDJFNzY3MEJEQkQ0NEU2QTM3NkI1QTAKKzoxMDQ1QTAwMDg3NkIzOEZGRUExNkUxNUU0MkYwMjZCMjIzQUMzNjIxNzMKKzoxMDQ1QjAwMDM2NTczQkI5N0NCQTlBRTQ1RDRGMjFCNjU0QTczMUJDNUIKKzoxMDQ1QzAwMEFEREFDMzY1QTgzQThCOUYzRjUzRUQ2NTc4NDdGNTIwNzgKKzoxMDQ1RDAwMDg2Nzc1NUZCMTlERTUzM0Q5NkNCRTdBQjhCRjg3OUI0NjQKKzoxMDQ1RTAwMEZDOTlFRDlBQzNGMkM0REQ4QjY4M0RGODdDQkU5OUUxN0QKKzoxMDQ1RjAwMEExNzE0MUZFMzg4NUZCNkVFNEQzMEEyOUVGOTJCMkE0ODMKKzoxMDQ2MDAwMEZDMTFCQTNDRUFENjQ3RjBGOTlCREI0MTBGQzJCQjZEMDcKKzoxMDQ2MTAwMEM1NDgwQjlGRjdCNDM2QTY4M0VGQzZBODI3QjZFRTQ2NkIKKzoxMDQ2MjAwMEJDNjM5RThCRjNCMjVBNDQyM0FGOTMxNjYxRjEwNkYyM0EKKzoxMDQ2MzAwMEE0RkM3MTEwREY3NUJENkI2QzY2NjQ5RUZBOERGMzE0N0IKKzoxMDQ2NDAwMDYxOERFMEFGOUJBQTYyODQzNTQyM0ZDRDVDOUM2NDgyNjEKKzoxMDQ2NTAwMEE3MkY3RUY3RTUwRUY0RkQzRUREQjQ3QjQxRkZDMzc3NjcKKzoxMDQ2NjAwMDdERjlFODlGRThGOUUzNzcxREVCMjlDRkY1RkVCMDJFNDEKKzoxMDQ2NzAwMDMyRUVEMjIyOUEyNTZDNzVGMjdFRkNFMzc3QTRBN0I2QkYKKzoxMDQ2ODAwMEVCMjZCRjA3N0FDREMyM0YzQ0EwNEZGM0QxMjdCMTBFMzYKKzoxMDQ2OTAwMDk3QTlERTI1MDQ3RjA0RkExMDNFM0ZEMUU5NTNCQ0FDNTQKKzoxMDQ2QTAwMEZCRjI1RjYwNURGQjlENUU4NUJFNzNGODhFQkU4NTgzMDkKKzoxMDQ2QjAwMEE4RkRFM0ZBN0U5NDU4NDE3ODhERDQzMzY5NTI3RjdEMEEKKzoxMDQ2QzAwMDBBRkQ5NTI0RjU1OTAxRTQ2ODU4RUFBRDRGN0Y5NTFBMjMKKzoxMDQ2RDAwMEI4MUJGNUI3MjQ3ODcxMDI0MjVCRDEyMTMwOTdFMDk1ODEKKzoxMDQ2RTAwMDNFQkI1NzQ1NUNBRjVFMkM0N0RDODY3MDJDRUQ4QTgwNjQKKzoxMDQ2RjAwMENEQUNDNzFBM0IyNTIxMUU2QzlDOTM4RUNCMEIzQUY5OEYKKzoxMDQ3MDAwMDlDMTY3NTg0RkQ5ODU5NTlGQjQ0M0FFNDUyOURFMkM2QzMKKzoxMDQ3MTAwMDdFMERDRTc1M0E5MzIxREYxNERFMUY0NTFFRDAxNEQyRDQKKzoxMDQ3MjAwMDk3Q0YwRTU0Nzk3RDlEQ0FCNzcyNzkwRDkyRTUwOEFGODcKKzoxMDQ3MzAwMDMxQzJDQkYxOTk5Mjk1RDQxRUYyQjFDRTY3OUYxMzIxNkQKKzoxMDQ3NDAwMDdGNjdFOUNGNjc2NzU5QjgzNDlFRUZEM0JGRDc3MTg1Q0MKKzoxMDQ3NTAwMDZGMkFGOEEzMjNFQUIzNTFFNjRDQzVGODNBQkEwQUFEN0EKKzoxMDQ3NjAwMDRBQzRGRTZGRkQ0MDJCRjc3NzJBNUZGNjdCMEQ4ODRBMUYKKzoxMDQ3NzAwMEVGREY5QkQ1Q0Q3RTczMzY5RkNGNjJCRDY1RjQzMzJCQzMKKzoxMDQ3ODAwMDJCNjc3OTM3RThFQjk1MjM4MTFENTE2QkYzQTZBNTUwNzQKKzoxMDQ3OTAwMEJCOTcwNzVBRjU3OUU4RTdDMjlEMzIzRkJCRUMwMjdBMzYKKzoxMDQ3QTAwMEMzODhEMzFEQzEzRkU1Mzk0OTlFRUY4MjZEQkZEQjg2Q0IKKzoxMDQ3QjAwMDczMTIwQjNFNzZCMEZFNUE3MEI5RDQ0QjIyM0I5ODNGMzEKKzoxMDQ3QzAwMDk5MDM5QUU2QjhGOEU4REY5RDNDNzgzNzhERTcyNENFNjgKKzoxMDQ3RDAwMDMxMjFERUJGRTMzMzNCRjI0MzY5RDk1NDI1QTYwMzU2QUEKKzoxMDQ3RTAwMDlCOTA2NzFBMUQ5RjNEQjBFREUzODQzNkUzRTIzQkQ0MTYKKzoxMDQ3RjAwMDRCOEI4QjJCM0YyNDQwMkYxOEYzMTlGM0UyOTk1NEQ4OUQKKzoxMDQ4MDAwMDU5OTVDQTU5REU2N0FBN0M5MTI0NzUxQkYzOEU4RThCNEQKKzoxMDQ4MTAwMDlGOEI5RjhCOTVERkE4ODgzM0RGNzlBNENERjg3OTc0QkYKKzoxMDQ4MjAwMDFDRjBGQjgxRDFGQjExQUUwMkM4ODkzMzg3RDQyMEY2N0UKKzoxMDQ4MzAwMEQzNUI4MjNEMTM0NTFCRkQxQkYxRjNDQTM1RjQ1MjNCOUMKKzoxMDQ4NDAwMEFDNEI0RjIyRjZDMzRFNURDMDJFMUYzRTQ4RkEyRjI3QjkKKzoxMDQ4NTAwMEY1NzhGQkE5MkQyQUZCNEJBN0I2QzQwNzYxOUY1NjZDQzAKKzoxMDQ4NjAwMEI5RkYyMEY2MjkyQjM2Mjg2QzlFOTc4QjA2QzYxN0UxRDgKKzoxMDQ4NzAwMDUxMzgyM0Y1MThGMkREREFDMUI4RjYyNDQyNUUxOUUzQTcKKzoxMDQ4ODAwMDJCRkQ1RDdDMTVGODZBN0U0OEYxNkZBNDcxQjQzODNENEMKKzoxMDQ4OTAwMDg5RUQyM0M2RDE3MTkwRTRDRjUyNDcyODlGRjFBQThGQUEKKzoxMDQ4QTAwMERCM0Q0OENBNDFBM0RERkNGQUZCMzkyRTRERURCRTY2NjcKKzoxMDQ4QjAwMDdCRTdGNzcxODJGMzA0NDVGMzlCMThERkYxQjVCOTVFMkUKKzoxMDQ4QzAwMEVDMkJDRTBGNkRBRkUwRkM4RTJENzE2RUM0MjE4RUU5MDYKKzoxMDQ4RDAwMDc5Q0VDNjc3N0FFOUZERjUxQTI0RUQ5NEUzRkFGRUREODgKKzoxMDQ4RTAwMEYxNkRGMjdDM0FDNjg5RjU3NDRDMzFFNzBCNjZFQkVGNUIKKzoxMDQ4RjAwMDY1RUJGODdBNDc1RkM3NDZGQkY5QTFBNjg0MUVENEZFOTQKKzoxMDQ5MDAwMEFCM0RFRjcyOTkzRjQ4QUU5N0Y5QUU4NkZFRDBCQjVGRTQKKzoxMDQ5MTAwMEVEODhFM0ZERjhBRjc2M0M1Mjg4MzhGM0M5RDBDODE0NkYKKzoxMDQ5MjAwMEYwRkYzOTdGNkQ5MDRERDI2MUFEM0ExNkY4MTI0MTk5ODIKKzoxMDQ5MzAwMDY3NTMwRUJDRTY0NjhFQjNEREJBNDA2NkU0M0E5M0Y5OUYKKzoxMDQ5NDAwMDQ2Qzc3NzNDOUI2MEM5NkVBNTYzQjlCM0NBODlGM0ExMUEKKzoxMDQ5NTAwMDk1M0I2RTI5MDIxRjFGQjQ0OTdDREE3NzRDMENFMEQ4RDYKKzoxMDQ5NjAwMDczNjVCRDRGODA3Rjc5OURBNTczRkIxNTk2ODg3NjBFODQKKzoxMDQ5NzAwMDlCOTdFRDYyREI5RTYyM0ZEQTFCNzFFODg1M0I2RDdDQTUKKzoxMDQ5ODAwMEJFNzBDNkU1OUVFQjZGQzQzQTdDQ0RDNjc0NThEOEM3REUKKzoxMDQ5OTAwMDczM0RFNzIzMzVBODlDQkZCQzMwNTM4NDYxN0YyQ0JBOUMKKzoxMDQ5QTAwMDNEN0UxREY2QzM4Q0YxQ0VDODk1RUJCRDZDODUyMkZDMTcKKzoxMDQ5QjAwMDM0QUZCMkEwMkEzNDJBM0IxMkREMDNDODUxNEE2QjFDMjMKKzoxMDQ5QzAwMDgwRkNDOUE2Q0NFMDNEQkQ1MkY4QkM2Rjc4N0Q0QTZCMzcKKzoxMDQ5RDAwMDlFMjlBREUzNUUzODE3NTkzRTI4OTlFN0ZERTBCNDQyQzEKKzoxMDQ5RTAwMEQ2Nzc4N0VEMjIwMEI5MTA3ODQ2RTZFMTk0NzU5M0Y5MDEKKzoxMDQ5RjAwMEQxMEY4M0VGRDE1RjcyQjg1NzNCOUFFRjA5OURBRTY1MzcKKzoxMDRBMDAwMDkzQzJCRDkwOTc1MUY2NEMzQUU3NjU5Q0IwQ0JGRDUyRUUKKzoxMDRBMTAwMDNDQzc3RTcxNTkwRUJENEZFRDUyRjQ3QzVFQkM5RjE0QjUKKzoxMDRBMjAwMEMxNDc2NUIzQkMxRUI0NTM5M0JEMUU5RjBCRTM3NTdGOTYKKzoxMDRBMzAwMENENzZFQkNFNzgwMUJCRDVCMjNCNUVDRkFGOEFFMTNDMDEKKzoxMDRBNDAwMDcyRTNCRDlBNDFEMjJFNEVEMUU5Mjk2RTkwRjk5ODBGQUEKKzoxMDRBNTAwMERBNjRCRUVBODMxQkQzRjk3RTBDQTNGRDgzMzY2RDFBOUMKKzoxMDRBNjAwMEVDMjdDQzAzRjZGQTdDN0I1RDJGRUNCQjE4RTM5RDlGMTMKKzoxMDRBNzAwMDUwQzdFMzNDQTFGM0Y5RkNEODNBOTkxN0FFOUYzQjQ2RTcKKzoxMDRBODAwMDdCQzA0RDdBMUU3QkYzNTMwRUNFNUYzOTk2REVGMDJENDAKKzoxMDRBOTAwMEM2N0JFQ0E5M0VDODgxMDFCRUU3RUNFMTdBQjIxRjg5NzIKKzoxMDRBQTAwMDlFMEI5RTc2ODQ1MTdGRjQyOTE5QjczRTZBMEI3RTBCQ0MKKzoxMDRBQjAwMDM5N0NGNEQxNzY3QzNFRUE2OEZCNjAzRUU3MDcyODZFREQKKzoxMDRBQzAwMDBCRUNCM0EzOEEwRURCREM2QzU3NzZCNTEzNENFRDUzQkQKKzoxMDRBRDAwMDYyODUwNUY5M0I2MzI3QUQ5OTgxRkM4Njk2MEQwRUIwODIKKzoxMDRBRTAwMEE3MzhCNkU5QTE1NEY2NkI4NDI3OTFGMzZDMEVBOTAyOUUKKzoxMDRBRjAwMDc0M0JGNkY0REZGQTQ0REEyRjQ2Qjk2MDgzMzlFRkFFM0YKKzoxMDRCMDAwMDI5NTNEQTk1NDZGRDNBN0Q1REFFRDNEN0Y1QzY0MTUyQkQKKzoxMDRCMTAwMDRGOTVDNzg1MUVFQ0M2RjM5M0Y4MjZGQUIwN0Y0NzBBNzcKKzoxMDRCMjAwMDNFOUVGMzI3QjZGNjU0MjAzNzFFMTZDMTlGN0Y5Q0M3QzIKKzoxMDRCMzAwMDVFQjYwNzc5RjM2NUNGM0NGNTI2RjY2QjhGNTk0NDAzRDMKKzoxMDRCNDAwMEVDMEZFNUFFQ0QzRkM3RkQxQzI5QkY0OTY0M0QyNEM0MzEKKzoxMDRCNTAwMDA2OUVERjUxQjczQ0Q3NEEwQjk2RTczRkJGODM4NDE3QzkKKzoxMDRCNjAwMDRDREVEQzBCRjA0MUQyMzkwQUFEQUYwNTE2ODVGQjVGOTgKKzoxMDRCNzAwMEIwQUIxRkU3REIxMTNEMkNCQzRGQjY1REQ1Qzc0MzM2NEMKKzoxMDRCODAwMDI1RjBCNzQ5RTYyQjhGNEIwRTZFODJCREQ3RkM2ODc3QjgKKzoxMDRCOTAwMDgxRjNFRTYzRDRCNUZENDFCRkQzMUJFMjJDRTBBN0YyNTUKKzoxMDRCQTAwMEJCODcyNDBFMDFERURFNTIwNUVDOEZEMzU2NkY4N0M4MUIKKzoxMDRCQjAwMDM4NDIzNEJFQTJGM0MwQkZENUU1NTMxOUFEM0I5Q0ZGQ0MKKzoxMDRCQzAwMDJDRERGNTI4REYyRjUyMEFCRTA0NUU5RTU2NzgxRkJCRUYKKzoxMDRCRDAwMDc0Rjk5MDg3OTg0RkRGQjQ4OTlFRDRFRjg5RDBGRDA5OEUKKzoxMDRCRTAwMDkxRjQ2OUQ0RTVFMkI5RUZEOEJERENCRTk0REFDQkY3MzUKKzoxMDRCRjAwMDVGNEJFMDcxNkVCMjcxNUU0QjM0NUQyRkY5RkRBN0Q1NEUKKzoxMDRDMDAwMDRCN0FGRkRDRkM0MzY0MTdGNDNGMUYwRkE3NDVDM0NGNkIKKzoxMDRDMTAwMDNGQTZFRkZGNjU0QjBDRkI4M0U0MDFGMDM5QjZFM0I2MkEKKzoxMDRDMjAwMEQwMUNDQ0ZCRjhENjE4OTY1RkM3OTNBNDlDRjg4QUU0RjYKKzoxMDRDMzAwMDY5QTAzN0M2NzFDRDZGOTk0RkRGOTlDQ0U3RkRFNjA2QzUKKzoxMDRDNDAwMENEREYzNUZBRkQwMjcyMUM3Q0Q3Q0U5QjA4QkZCM0ZDQ0EKKzoxMDRDNTAwMDJEMjkwRjg5NUUzRkUzRjdERkIyRjFGQkQxRjMzOEEwRDYKKzoxMDRDNjAwMEJGNzc2RTlENkU4RDYzQkUzOERFNTFEMkUzRjhCNkRFM0YKKzoxMDRDNzAwMEFDOUY5QTkyREM4MkY5RTYyOTlCQUNCNzg1QkFDMDBFNEMKKzoxMDRDODAwMDNFQkVCNUI3QUYzNkUyQkJDNzkzNDI1RERDMTFDRjlCRUEKKzoxMDRDOTAwMDZDQzFFNTAzQTUzQzZEODY1RjJDQzIyNDZBRjM5MTVGNkQKKzoxMDRDQTAwMDI0NThDRTFCRUY5NTNBNTczNkMwNEU0MTdFNkY3RTBFOEMKKzoxMDRDQjAwMDk3NjE0N0YyRjk3OUJBRTM5MkE1M0YzOTZDQjA4QzBGNEUKKzoxMDRDQzAwMDcwQ0U2QUFBOUU0RkNFNzY0RkM4MEUzOUFFRTlGNjYxMTUKKzoxMDRDRDAwMEQ5OTZFODNDNUY1OURGQzk3ODlGRDY1RDhBOTE1NzZDQjkKKzoxMDRDRTAwMEMxNzg0M0Y2MzQ4RTM3MDhDRjMzMzRERUQyQTVCN0NDNDMKKzoxMDRDRjAwMDQ3RkU3ODY5RDVBQTFCNjEzRjk1NUFDNTU4M0I4REFCRDUKKzoxMDREMDAwMDQ5NTE3OTFDNEQzMTYyRTYyNEQ4OTE5MUZENDREODZGMDgKKzoxMDREMTAwMEJEMDc5RjhCRDMwQTc3MkFEQkFENkNEQ0Y3MUQyQ0Y1MjIKKzoxMDREMjAwMDFERTAzQUZBNUVEOTUyNjUyNUJFNkZDODE3MEUxNEE2NkIKKzoxMDREMzAwMEI2RTIwOTc5QURDOEVGNjkxQUE5RDc1RjYwREU0RDM2RDIKKzoxMDRENDAwMDU5MUYzRDZGNjMzQzIzMDY0QjM5RDU5NEU5RjlFRDUwNkIKKzoxMDRENTAwMEQwRTUwRDk1Q0Y3NzlERkUyMTM3MzFCOTBEM0JBRDU1OEYKKzoxMDRENjAwMERGREI1QkYzNkM2OUZDRTM2MDVCRDM3N0RDODNBNUJDQzIKKzoxMDRENzAwMDJCQTVGMTYxOUNCREQ2OUFGM0NBQjMzNjk4RTFDQkI2QTgKKzoxMDREODAwMDk4RTFFQzFENjZCODdGQkQxOUY2MUUzMEMzNzk3QUJGNzUKKzoxMDREOTAwMEYwQjM3MTZFMTk3RTM2NEFGOEQ5MUU4N0Y0QjMwMUMzOTkKKzoxMDREQTAwMENGNDYwOTNGMUJDRkUxNjcwMzg2OUYwRDE4N0UzNjYwMTMKKzoxMDREQjAwMDAzREZGMEI3MDFDM0RGNDZGREFGNzQzQzA5N0YzODE1NTAKKzoxMDREQzAwMEY5OUExNTE2OTlFNzRCRjRGMEYzMzlBNjY5NzZEM0I5MzkKKzoxMDRERDAwMDk0NTMyRkNBNzMyOUM0MEY1MkRFQ0Y3N0YxM0E3OTE4NTIKKzoxMDRERTAwMDJEMDY0MzJGQzlGNTk0RjJCQzIzQjg4NERFMUJFMUQxMTQKKzoxMDRERjAwMEU2MEVDNjdBNURGM0NEMUNGMDVENDVCNzQ2Q0U3QjZEMDEKKzoxMDRFMDAwMDVBRjY0QUFGRkJBOTVEQTMxMjJGNjA1NzU0QUNGOTY2NUUKKzoxMDRFMTAwMDA2RUNBODI0OEY1NjhFRjY5NUIxMERDQjA3NzJEQzNFQkEKKzoxMDRFMjAwMENDRjJBM0IxQzZGM0Q2MDg0OTQ3OEVCRjE0QUJCODI5NUMKKzoxMDRFMzAwMDgzRUFFNzI1Qjc5OTNGMTQ5RDc3MkU1NjlBRjNDQzJGMzYKKzoxMDRFNDAwMDk2NzcxRUNEMDc4NjFERjhCOEFEMzlERENEN0VGQUQwMzgKKzoxMDRFNTAwMEM3MTBFNzVEQThDNEJCRTFBNzdGMTYyMzk2RTBGRUEwQkMKKzoxMDRFNjAwMEMwQUIzMjRGQURFNTkwNERFNjBEQUM1NEQ2OEIwOEZCOTAKKzoxMDRFNzAwMEU0RDczQUJFMEQ3OEY2RDk1Q0I2QzdDRkMxMkIxNThCRjcKKzoxMDRFODAwMEI4NUM4ODFFNUE3MzEzRkNFQkQzRjMyQzZDNzc5RjlFOEYKKzoxMDRFOTAwMDU3NTBEODFFRjYxRkY5NjU1ODEzQjg5RjJCNzJCQ0I4MkYKKzoxMDRFQTAwMDlGMkI5MjdGNzAzRjk3RjlEQzQ0NDc1MzdCRENDRjY1QTMKKzoxMDRFQjAwMDNFMzc3MTk5QTk3RUYyQ0E1QzUzN0Q0OUQxMTA1MzdENkEKKzoxMDRFQzAwMDBGMjFDN0I3NjhCRTFDNUYwOUU5MDc3RjNCQzA0QjM4OUQKKzoxMDRFRDAwMDZGNzExMTY4NDc3NjRBMTcyNUIwOUNFNUYyM0E4NUNGODUKKzoxMDRFRTAwMDhEN0IxNkFGMjgwNDVFNEUxMDNCMjM4RTYwRjBDRDZDOTgKKzoxMDRFRjAwMDVEQkYwODZCQzAwRUJFM0I5MzIyRUI4RjJBMEQ1RkRFQjkKKzoxMDRGMDAwMDRERUY5REY0RDU2REMyRDUyOTI3MkQ2QjFGMUNFQTQxQUQKKzoxMDRGMTAwMDdFRkRCQTJFNkU1QTg3QjcyQUExNTQ4ODlFMzU3OURBNUIKKzoxMDRGMjAwMEFFQzFFRDkxOUZEMjM4OTFGNzEzQjdCNzRGQUU4MUREODcKKzoxMDRGMzAwMDc5NjhDMDlCODNEMERGMTY5NUYzMjYwQzdFRTk2MjkzRDcKKzoxMDRGNDAwMDcxQkE3NTgzODg2NjY0NEZBQ0FCOTNGOUJDRUJFQURBNEYKKzoxMDRGNTAwMEM1RjY4OEQ4N0YzMUU2RDkwMjNBMDg5NDRCNTI1MzM4QzcKKzoxMDRGNjAwMDJFMjQxQTMwMEZCMkRCOTdDMDZFM0I3RDQ4REFFREM2QjcKKzoxMDRGNzAwMDdDN0EyQzBENzc1QTQ0RjVCNzZFOEY2MUZDN0NBRUZCQzIKKzoxMDRGODAwMDBEMjdGQUJDRDRERjgzRjMxQkQ1N0JCQUE4QjAwNzJDNUUKKzoxMDRGOTAwMDVCMzZDMThGNzBBNDY4NkY4MkVGRTdBREVCRjkyN0RDNTkKKzoxMDRGQTAwMEVGQjVFMDdENTVFMDNDQ0QxN0FCNDcyNTBDQTZFRjFDRDcKKzoxMDRGQjAwMERCNkFGMzhFMjNGOEVFQkEyN0VDRjA5MzE3NTg4Mzc2NkEKKzoxMDRGQzAwMENFQzM3QzZBOUQxRDc5Qzk1NzZFNUVDN0NGRTc2QzJFMzQKKzoxMDRGRDAwMEU2QkNDQkI5QTI4QUZEQzgyM0ZBQjkyQzYzREVGMzBBN0EKKzoxMDRGRTAwMDk0QjU2RUUyMkZFRjE1OTIwRkU3QzVDQUZEM0NFMkU3REMKKzoxMDRGRjAwMDk3MzFBRkQzOUIxNTFGRUNDNzI5NDVEQkVEQzVEMENGNEIKKzoxMDUwMDAwMDNBQkY3QUE2NEUxRDAzRkU2QjA5QzlGQjM5NUE1RTU3OUIKKzoxMDUwMTAwMEU1QkQ2MzUzNTQ5OTE3NzM4MUZCN0MyNjlGQ0Q2NEZFRDUKKzoxMDUwMjAwMDlFNzJCNjJGRkI1OUQ3ODZGQjQ4M0YzNjVCQ0E4Rjk2RDgKKzoxMDUwMzAwMDdBOTVGN0UzNUE1RURGOUYzMjE5REZBQkI3RjFFRUREMDkKKzoxMDUwNDAwMDNDN0I4MzNDRkY2RjExNTUzODQ3RTA5OURBMjBGOTJBMDEKKzoxMDUwNTAwMDUzNTRDMUZFNUJGNEM2QkIwN0IxRUUxNjY1M0EzRDU4MkEKKzoxMDUwNjAwMDBGNDU0MzU1MTM3RjU2OEU4RTMzRjFFRjU0OTE2QzNBQjIKKzoxMDUwNzAwMDQ3NzMxRDkyNEEyMkUwMjlFM0JBOUJEQTVGM0ZBNTZGOEUKKzoxMDUwODAwMDk0M0NDODY5QUQ2Nzc5NzA0NUQ0MzlDMDAyMTM1QzRFNTEKKzoxMDUwOTAwMEU1OUQ5MDRGRTI2QUQzN0JFNTYyNTI2QjNCRjhDMzFCMDAKKzoxMDUwQTAwMEE0REQ1QUJFMjM2OTNERjZDNUU3NTlBNDNGMzQ1NTkzQTQKKzoxMDUwQjAwMENGMkJGNkM4RTc0MkM0OUUzQjk3OEVGM0Y4ODgwRjk4MzMKKzoxMDUwQzAwMENFNkRFQkZCN0NFODk3RTM4MUREMUIzOEFFRDM5QzRFQzUKKzoxMDUwRDAwMEYyOTIzMDVBOUVENTY4NDczQzhEQ0NFNTY2QzQ0OUNCRTgKKzoxMDUwRTAwMDAzMDRBMzVGQkY2OEFFQzVGOTExQUJDNEFGQ0JFQkVFNTEKKzoxMDUwRjAwMEI2MjRCRDk1MkYyQTc2OThGM0FEMkEwRUJEQ0JFRDhDNDQKKzoxMDUxMDAwMDdDQzZFODdBQjJEMzk3NzdDNEI4QzcyOTNFM0UzN0I5OTAKKzoxMDUxMTAwMEE1Qzk4RTc4RDAxNEFEMTNERjRCMTE3RDVGNUE1OUE4MDUKKzoxMDUxMjAwMDg5Qzc3OUVEOUU1NDM3RjY2RDJCQTJFRTQ5NUI3ODg1RTEKKzoxMDUxMzAwMDQ3RUEyNzNERkU4RjdCODZBNDlERDA2MDk3NzE1QkQ3QTEKKzoxMDUxNDAwMDNFMEJBRjNGNzkyRkNGMzlCRTlDNjc5MUY3MDU0NEUxMDUKKzoxMDUxNTAwMDY1OUNFRjdERUVBRjYzQkFDQzQzMDM1RUFDMTE3ODg5RkEKKzoxMDUxNjAwMEU2MjNFMEM5MUE4MUE3Mzk0MkUyNjkwRTQ5OTMyMEMxQkEKKzoxMDUxNzAwMDFEQzE2NzkxRjhGOTg5Rjg5QThCN0Y1MEZEREMzRDRBOTMKKzoxMDUxODAwMDEwRjk2RkQxRjg5OUEzMzUzMkZFRTY2OEFFQUFBMEZCRkMKKzoxMDUxOTAwMEZDRjk1NERDRjlDMTQxQzhBNzZERTlGMjVFQzM2OEZDQjMKKzoxMDUxQTAwMENEMTUwRENCRTFGN0NFMjVCRDExNEU2MkJFQjAzQkQ5N0EKKzoxMDUxQjAwMDRGNTNCQ0QwREI5RTQxOEQ3NjlCOTQ2NzFDRTc2RDc5ODUKKzoxMDUxQzAwMEZENUQ1RTc3MkQ1RTVBRDVFMDBCNDFGNUQ0REVFNUY3NDcKKzoxMDUxRDAwMDM0MkY2OTIzQ0Y3N0QyNTkxOTNGQjlFRUFDOTVDQjI5M0IKKzoxMDUxRTAwMEUzQ0NFQkVFREFCM0E5RkNGQ0E3RTJBNTAyNzgwNjlGQkMKKzoxMDUxRjAwMDIzQUU5N0QwQzYzRDdCODhGMzI1OUMzRjVGNjMzRkM0QjkKKzoxMDUyMDAwMDkwQzNBRDc2OUQzOTZGRjk0MkY2NUY3NDlDRjBBRTJCN0EKKzoxMDUyMTAwMEY0N0NDMTAxNjI4MDI5NkZGOTAyNzY0Nzc0REVCMkExODUKKzoxMDUyMjAwMEM3NUI1QzUyNEY4RTUxQjNERkYyRDBCQzhCNUY1NUQ5NTgKKzoxMDUyMzAwMDRGRjc0QzFENkJFMUYzRTNBRkNBRkJGMUI0NjU2NzlBMUUKKzoxMDUyNDAwMEMwOUY1QUJDODVFNUUwQzJGODZFN0NBRjg1QTZDN0VENkQKKzoxMDUyNTAwMDhDN0VCQUQ0QjQ0QjQ1RkNBRjM4QzZDREY5RjhDNTM1MTEKKzoxMDUyNjAwMDZBMTFGNDU3MzFCNUYzNDRCNDVCQkVCNDdCMTdFODg1REIKKzoxMDUyNzAwMDRGRUZFOUZENTg4MEQ2Q0JBN0I3QTdBNDIyRUVGRkQ5MDAKKzoxMDUyODAwMDMyNUIwQTQ5Q0U3M0VEM0U1RDM2QTYwQkYyMzMzRTVCRDAKKzoxMDUyOTAwMEU1OTgxQTZDMDMzRjlCNzQ3RDUxN0VENzA3QUNCNzRFREYKKzoxMDUyQTAwMDVBNUU0Rjk4NEFFRjk3MkREQjk5ODBCNEZGRDI2NUVGOTUKKzoxMDUyQjAwMEU2QkJDOUE0QjgyMjRGREI3ODA1RUZBRkFFREJFNDA2NEUKKzoxMDUyQzAwMEJFRENFQkY4M0U4MTVEMjQyRUYxN0VGMUIyNjU0Q0Y3MzkKKzoxMDUyRDAwMDA1OEFEQ0FGQkU1NTA5N0YzOTgyREE5RDg4NTk5NTMwNDEKKzoxMDUyRTAwMDM1MTNCN0ExMEFDRUQzMzhCMzIxNUUzRjhGNTZDMzc5QTkKKzoxMDUyRjAwMDQzMjc2MkM5MUVBMEY2NDc2MjI0M0U4RjZDOEZGN0YyRTcKKzoxMDUzMDAwMDlEMThERTQwMTdGNkRGREFDQkZEOUQ1MjRCRkQ3NTE4NzgKKzoxMDUzMTAwMENGNTUyOURBQUUyQjA2NjAxQ0MxNEQ2OTJBQjdFMzczNUQKKzoxMDUzMjAwMEVCNUE0RENGQzRCNkUyMUZFN0U2QTlFQjY5RDhEQjI4RkMKKzoxMDUzMzAwMDYxNkYyMzVGMDZGNjM2NjBEOERCMjg2MTZGRTM3OUU1OUQKKzoxMDUzNDAwMDFBQjNGREQ2QTBFRjE3MUFGMUUwQUVCNUNEM0VEOEJCMkIKKzoxMDUzNTAwMDgxMDI5MTU1QzU3QTc2NUNDMUJGNDI2RkJEMkFFRDg1NDkKKzoxMDUzNjAwMDQ1OEE3NzQ1MjNEQjRCRjE3NUYwM0I2QkFERDJDRTBFMTIKKzoxMDUzNzAwMDdDMjJDRjQ1RDE5RjJDQzhBNzVGQTg5Nzc5QjE5RkZGMEEKKzoxMDUzODAwMDUwREM1RDhGQTNGRDYyRUMwRkU1RTFERTUzQjJCRDIyODAKKzoxMDUzOTAwMEY4NzVDNDU5QTc4ODNDNzczQjkyOENCMDQ4Nzg5NDMzMTEKKzoxMDUzQTAwMERERDQ3RThDM0JEMzU0N0Y2NTVBMUY1M0ZENTUxRTlGMjEKKzoxMDUzQjAwMDA5QkUyNjZCQjBBOUZENzhFRjQ4MTNGQ0IzNDE1Nzk5OUQKKzoxMDUzQzAwMERBNEZGNDRGMzRDMTkzQzc0RTMzQjVCRkI2QThEODU0QTMKKzoxMDUzRDAwMDdGRkRENEY5QTZGQTY5REEyRDI2RjhDNjc5Qjc5QkRBRUIKKzoxMDUzRTAwMERGNTQ1NTYzQUExN0EyRUE0OUUwQzcxRjkwRjdCMEQ1NkEKKzoxMDUzRjAwMEMzN0Y3MkUwRkUxNzI3OTc1NEZGN0JFNDMxOEYyNDUxNUYKKzoxMDU0MDAwMENGRjdBRUJDNzFEQkUzODBGNzIxQUY5OTU2RENEMDUxMEEKKzoxMDU0MTAwMDk2QUFCNkUyRjhCNjIxMzJBRUE4MERGNUZGNzgwNUZCRTQKKzoxMDU0MjAwMEI5MEQ3QzhGMjY2MkI3RTBCQjk0MjExRUREQ0Y5NkNGRUQKKzoxMDU0MzAwMDNCNTk4REI4NTU0MzNBREY5NzEwRDVGRTQyRUQ4NkM2RUQKKzoxMDU0NDAwMEVEM0JFRDIxOTZCQkYzODVDNzZFQjIwRTQ2MUVDNEJFODIKKzoxMDU0NTAwMERDRUUwNEVGMUREMjc0OTM5NUU0Q0REMDIxRkI5RUVEREMKKzoxMDU0NjAwMDQ2RjBDMTE3RkFDQzYwRjhGMjdEQTc1MTNGQTVGRTBCQkMKKzoxMDU0NzAwMDU5M0Y1OUIwNjlEMjMwRTRERTlCMDJDNDc3NDM0Nzc0ODgKKzoxMDU0ODAwMDVCRTk5NTcxOTEzNkNGQjcxQjI1RjA4NDczRTFDMDEzQUEKKzoxMDU0OTAwMENBMzBGMTNEQ0E3REM0RjcyODBGMTBERjk3OTA1QzNCRkUKKzoxMDU0QTAwMDQ4N0M4RkYyMTBGOTk5NzhGRTZGRTQ2N0EyN0M5REZDMkUKKzoxMDU0QjAwMDRDOTQ2RjkyN0Y4OUIyODFGQzRCOTRFRjU0NEZFNUYyOEMKKzoxMDU0QzAwMEJENkE4RERGRkI2M0Y1M0MyRTNGQThBRUUyRTcxRjU1QkEKKzoxMDU0RDAwMDJGRTZGMjkzRUEwMDNGQkY3Qzg4OEMyM0I4NDhFRjQwNjgKKzoxMDU0RTAwMEJGNTcyMDBGMDZGOTAyRDFGNzJDNTdCOUY5RkU4MzVBOUUKKzoxMDU0RjAwMDVENkY4OTdBM0RBRjY2MUZGOUFGQzA2N0EzMzVFOTRCOTEKKzoxMDU1MDAwMDY3RUJGRUUyODVGRDdEQUJGODMyQzI2RTlCNjhGNTBGNUUKKzoxMDU1MTAwMDE5QzJGNEVERTRFNkZEMjFGREY5MEI1RUNEM0Y4NEU4MTAKKzoxMDU1MjAwMEZCN0VFNkU0OUVCOTJBRjQ1REQ1Q0I4OTU0RjdCRUE1OEYKKzoxMDU1MzAwMEVERkIyNzUzNzQ3RUYxMERGNThGQzE3QkMzOUM4Nzc5RkEKKzoxMDU1NDAwMDNGREQ5MzRFRDZFQTEwODYxNUQwNUZDOTkxRjFDQjYxNEQKKzoxMDU1NTAwMEQ2ODY1QUQ0RDc3RTJGM0NGMDlCNUY4QUZGMjNFRjgzRjkKKzoxMDU1NjAwMEQ3OTJCOThDRjNDN0NBNTlFOUFGMENEN0Y3RUY2QkJGMjUKKzoxMDU1NzAwMDk3RkJGN0MzMzE3NkFBMUZFNjk2RjVCNTM3OTNBNkYzRTYKKzoxMDU1ODAwMEExM0VDNERGMUY4RUQzQ0VGMjdDOUIyOTZGNjdGNEQ5NzYKKzoxMDU1OTAwMDg2NTE1Q0VGQjI3QjkwNkYzQURDMTk5NkRGNzMwQTM3NjUKKzoxMDU1QTAwMEUyQ0IyRkM1RUY5MkZEOEY5MUZENkZGODNFQ0NERjg3RTgKKzoxMDU1QjAwMEY3NjkxQjhDRjFCNzhFNjcwOThGQUY0MURFNEY5NzJEQ0UKKzoxMDU1QzAwMERCRDdFQUVEODc2QkQ0N0YxMkM2NTcyNUM3NTc0Q0VENjIKKzoxMDU1RDAwMEU1Rjg1OUNFMERDNzM3OTNFMDZEQ0JGQUQ4MzQ3OTNFNTQKKzoxMDU1RTAwMDc5RjQ1OUJEREUyQkU3REJDMTJBNjE5QzI5NDE3RDQ2NTgKKzoxMDU1RjAwMDNCNERGOEE5QkY4QzBDRTE0NUZDNkQ3ODRBNDMzQUI3QTYKKzoxMDU2MDAwMEQ3RjMxOUUyQURGMjdCODk1RTc5MUY1NzhGQkY2QTcyQkIKKzoxMDU2MTAwMDNGODAxMDgwRjExQjc5NDlDNkJBRUQ5QzFDNEU4NzlERDYKKzoxMDU2MjAwMEQ3NzlBMTlEQkY5N0ExNkVGNzQxNUVFN0Y4QjQwMEU4NzYKKzoxMDU2MzAwMDY3NzU1QTc4N0VCNTdFNzk1RUZFRUQxNzNEOUQ3MTFGQzgKKzoxMDU2NDAwMEU5NDRERDVFRkYwN0Y0NUYyNkU5QkY1N0QyMUY5N0JDMzAKKzoxMDU2NTAwMDY1QjRDMkNBMUNGQTZGNzA5QkY0OTdGODIyN0VDMUZDMzUKKzoxMDU2NjAwMDg5RkU0QzBGRDA1M0E3QkY2MkUwNDdBN0ZGMzk3QTJEQzAKKzoxMDU2NzAwMDg5QUNEN0Y5RTM3Q0ZBODcyNEJENzU3RTFBRUU5NDc5NUMKKzoxMDU2ODAwMDEzNjgwRkZBMEZCMzRBN0VBODhEOTFGOTFFMkZDNTE3MjQKKzoxMDU2OTAwMDNFOEM3QkIyMDgzNzQ1ODhDRjBGMzNGOEE1NEE5RTFGNTIKKzoxMDU2QTAwMEZFREY0QUZGM0NBQkJDNDdDRTUxRTZFNDdCRUEyRUM2QTgKKzoxMDU2QjAwMDBGMzM5QjQ1MjFFRUU5M0NFQkQzNTIyMDI3OEFDRjdBNkEKKzoxMDU2QzAwMDBFMDI5RTJENDYxNkMyM0MzN0VBOTU5Q0I2RUJCNUJGM0UKKzoxMDU2RDAwMDM0REIwMDFCQ0ZCM0QwNkU0MDZCQkRENUY5NEUxQ0U0NUMKKzoxMDU2RTAwMDlFRjExREEzREQ5NUU3QjVDQjcxNDI1RjJDMUExMzVBQ0QKKzoxMDU2RjAwMDBCRkQzNUI2QzZDQTcxNkJCMjRDMTgzRTQ0RkE0Q0U2ODcKKzoxMDU3MDAwMDczRkExMzdDQTk5MUY5OUZERTAzMEJGMzcwQkZBODNDRDkKKzoxMDU3MTAwMEJGMjU1Q0QyQUVGNkQwNUZDOEQ1QzIxRjhBOTZBMjNGMjUKKzoxMDU3MjAwMEExNkVCMUMyRUYzODgzN0M1QUZBNEU2MThBRDkzRTFGMEUKKzoxMDU3MzAwMDFCQjVCRjdFNzVGNjU3NkM4RjVGN0Q5MTdCQUU4RjBDNkUKKzoxMDU3NDAwMEQxRjdERDMzNDVFNjdGRjI5RUQxRTYyMUFDNjcyRkVENDAKKzoxMDU3NTAwMDlFRDEyQzUxQ0Y3QzMwQkE1OEU2NzNEMUZDMkQzOTg4QkMKKzoxMDU3NjAwMERCRjg0NTE1RTA0MjUxNjUwNTFGOEMxNTc1NTZFOTU3NjQKKzoxMDU3NzAwMEZBNEY1NEU0QjFEN0NFRjhCOTQ2ODRGOUY5Nzg1MjI4RjMKKzoxMDU3ODAwMDUwMjYzRjIzRjYwMUJDM0Y2RUMyNzREQzFGM0MyQTc3RDMKKzoxMDU3OTAwMDU0MEYzQzhGQjgzRkNGMzZCNDNEREY5RkY3Njc3N0M0RDcKKzoxMDU3QTAwMEZENzlGQjQ2Q0JGNUI2RjA1QTE5NkZEQUU3RUNERUE2QzkKKzoxMDU3QjAwMDFERkEyQUU5REIxRTNEODExN0MxRTVDQkE0OEY3QkQwMDIKKzoxMDU3QzAwMEJDNUYyMTdEMENGOEVBQUMxQTgxRjcwQTNERTZCQzIzRTgKKzoxMDU3RDAwMEUzRkQ2QkRDQTM4NEI1REQ4NUY1REQzNUZEOUZFQjA0RDIKKzoxMDU3RTAwMDNDQkY5NkQ0N0IzNEU4RjU1QUQyQzBEMTg4QzdCRjk2NjcKKzoxMDU3RjAwMEQ0QzEyMjRCODc5RENCN0VCQjdCQjQzNTNFNjM3REI0NDkKKzoxMDU4MDAwMEY2NTdDOEZEMTlGNzA1OEY2RTJGRUYwQjhFQzZFQkQ1MzcKKzoxMDU4MTAwMDIyNjRDMkVGMzgxREJGM0YwMUFGREVCNkYwOUE4MkMzRUIKKzoxMDU4MjAwMDhFRUQ4MUNGNzc3NzE5Nzk1Mzg4MjdGNzU4REFDMEYwNTIKKzoxMDU4MzAwMEFEMzZCOTBFQ0E3NzhGMkY0MDVFRjRDMkY3NjU3RUM3Q0EKKzoxMDU4NDAwMDUxMEMwNTdBNzdGMTEwMUVGRkYwQzU4Mzg1MzU5N0Y3NjcKKzoxMDU4NTAwMEEzMDJDMDc3OTk1M0UyRjE2NEUwQTVGRUI4RDczQ0RDMUYKKzoxMDU4NjAwMDRFMUI4OUZFQkY1QUFCRjI3OUZCOTNDRkM0NzAzQ0VFNUUKKzoxMDU4NzAwMDQ4RjBEOTA0RTBEM0UwRTMzMkQ1QjNEMjhCNzVGODlBN0YKKzoxMDU4ODAwMDJBRUY1OUZBNjE3RjE3REM0MzdBMjFCRTI2N0VCRTdBNjEKKzoxMDU4OTAwMDY4NUJGQ0VDMjI3RUVFNzczRTNGOEIwREYyMUU4MzMyN0UKKzoxMDU4QTAwMDY3NjE5Qjc0MzZGQ0NFQTQxQzNGQ0IxRkI3MDhERjAyOTgKKzoxMDU4QjAwMEZFQUYxMEQyM0ZBQTcwQkUyRUVGQTkyNDE4RTc1RUEzNTgKKzoxMDU4QzAwMEVEQUFGQzU4NkE0RkY1NzZBN0NDMTczNkU4OURFMTkwMTMKKzoxMDU4RDAwMEY3NTg2NkM0MDkzN0UyMjA0MkNCQkQwQ0UzRkRCNEJCRTgKKzoxMDU4RTAwMEJGMTg3ODIxQkY3NjRCNjRERURBRjA3MDVGREU3NzFFN0EKKzoxMDU4RjAwMDdCNDhFNTdDRjc1NzYyRTVCREVGOEQ0NDBGODVFQ0QzMUYKKzoxMDU5MDAwMDJCRkI1NkI5QkExMTFERTdFNjZCNjU3ODVGQTgzRkE4NzcKKzoxMDU5MTAwMEU4RjdGNTlFOEE2OEM3RjFGMzVDMTdGQkQ5M0ZEMTVGQzIKKzoxMDU5MjAwMEJGNzVBOEVFQUZGNzE3RkRGRkUxRUYyOUI0OTdGNzBFQUIKKzoxMDU5MzAwMDJGN0MzNTM3ODg3MTJGQUMyMUFEOTZDMkJGOEJDMUY3NTQKKzoxMDU5NDAwMEM0RDVDMjNGQ0Y2Qzk1M0JDMzQ1MkZGRUJEOEM1MTI5QkEKKzoxMDU5NTAwMDM2Q0UzM0ZGREZGNjdCMEExOTQyRTNGNUY3OUZGRDVEOTQKKzoxMDU5NjAwMDg1QjFGMkQxNzlCRkFCOTA5MUIwRTI4MDk2RDJGQUJCMEIKKzoxMDU5NzAwMDFBRDFCRkFCOTBBMURGNjcyRDNDNTI3RjE4QkZBNzMwNzMKKzoxMDU5ODAwMDQyRjgzOTJGN0Y0QzlBNTlBRjhDNzI4RjNDRTBFNkQyQTcKKzoxMDU5OTAwMDFDRUZDOUI4NDgzRUQ3QjM0Mzc1QkQ3MjMxQkE5NzBCRjcKKzoxMDU5QTAwMDlERUVGMjVDMjdGODQwRkY3RDk0MjBGOEQzRjg3RDE0M0IKKzoxMDU5QjAwMDgzRUVDNkVGQTRENEI2OTdCRjkzRjJDRkY2QkIyOEQxM0YKKzoxMDU5QzAwMEY0ODlGRTlEOTQ2OEZBNDRGRjZFQ0E3MDJEOTZGMTM0RjYKKzoxMDU5RDAwMEFBQ0NDNTdDNkREMDY5MkFGRDY1N0IwMEU3NzI5NUZGNzYKKzoxMDU5RTAwMDdFN0ExRDhEQTJENzE5QjE3MjAwRUUyOTNENTUyQ0U1QTYKKzoxMDU5RjAwMEZBODVGNEZGMDZBRkZGMTRFNEM1OEY4ODI3RTFCQzhCNUUKKzoxMDVBMDAwMDUzQzY0M0ZDQjU1NjExMzM1Q0UwN0U0MkNFOTdGRDQ1NEMKKzoxMDVBMTAwMEFEQkMwN0FBRDYyQUUzMDEwMUEyMkJFRUM1RkIyRUY2RTgKKzoxMDVBMjAwMEVGRjIzRTQ3QjI4RjZDMUQxMTk3QTlFMkY3MDM3NkE3RkMKKzoxMDVBMzAwMEJCRDYwQjdBMjczMDlGMkM1RTJDQ0YwMzFGQjZENEYxMzgKKzoxMDVBNDAwMEVGNURDQ0NDQUU1MkIwN0Y3OTJDNTM1Mzg2QjU0N0JDQkEKKzoxMDVBNTAwMEI4NjhGQjFDOEVDQjU3MEQ4NDdDOUZGMTA3NDcxN0Q0ODkKKzoxMDVBNjAwMENGRTgyQUVGOEYxNEQ5OEQwMzIyRUQ5MTE5MTkzMjJGMjcKKzoxMDVBNzAwMDJCNjY5ODJFQzdCRDMyMEZDQjM1NENGQTA5RjE1RTM3MzUKKzoxMDVBODAwMDlGNkIyOENFMTY3QTdFQUJFODMyQTMxRkY4RjgxM0I2QzgKKzoxMDVBOTAwMEUzNUIzQ0QyQUU2RUI0Qzk3QjJDMDNBRkNBN0M5RUI1MkYKKzoxMDVBQTAwMDU1RUZCMEREQkY5MUVDNUE1NURBMzc2QkVFRTMzODQzNzIKKzoxMDVBQjAwMDgyQzAzRUVFRTMzMUNENDkxODdGRUYzNUMyNjQyRkY0NEEKKzoxMDVBQzAwMDA5M0E0RDc5Qzk3RDM3QkI0RDcwQkY1MDlBQTlGREU1QTQKKzoxMDVBRDAwMDdCM0NBNjdBNUYzOENCNTQ5RjdCQzg2QjgyMDczNDBDMjMKKzoxMDVBRTAwMDMyQjUxRkY4ODFERjA0MEY2RTFDNkI2QTNGRTQ0ODkxRUEKKzoxMDVBRjAwMDA5MUUzREFDOUI4Q0ZCODMyNzY5M0UzMzE2Qjk4M0YyQUMKKzoxMDVCMDAwMDFFN0QxOTI3RTk2QTk3RjY1NEVERUREMjlGMzBGMkQ3NDIKKzoxMDVCMTAwMDM1N0QxRDQ0RTdBRjc3QjZDQUZDNzU3Qjk1RDQ2QjlBOEIKKzoxMDVCMjAwMDRCRkFCN0VFNjRFMTU2Rjk1QzRDMDNDM0I4MUI4MkYzNDEKKzoxMDVCMzAwMEM2MDNFNjNDRjM0RTRFRTk1RjU5NDY0QkZGQzNBRUU3NjIKKzoxMDVCNDAwMDk5Qzc2NkM5NzMyRjQ2NUUzOUY5MTU3RUUwQkI4NzY4MzEKKzoxMDVCNTAwMDlDQzZCRjc3QTBERjI3MUFDRENGNDUzQUREQTNDN0REQUUKKzoxMDVCNjAwMEQ1MkVDRkQzRDVERTZFRTdGRDczQ0Q2NTZGNTIxMkNFNDUKKzoxMDVCNzAwMDFGQ0ZFRDAzMjVGRjZGNzRCNjdERUZEMzhDNjEzMjhFOUUKKzoxMDVCODAwMDEyQ0EyREJBNkUxOEI1N0I4Q0Q0MTZEQjVGRTdGNUU3MjkKKzoxMDVCOTAwMDZEODRCQ0FCRkQ5NTlERjNDNjJGRDZERjhDQ0JFNTdDMjkKKzoxMDVCQTAwMEE2NUIyQzMzMjc2NkIzM0ZDOEU3MDA4RDdFMkJGNDdFQkYKKzoxMDVCQjAwMDI3OEQ1MERBOUNERjhDQzQ2NkJFNzc0RDI0REEzREUwMzkKKzoxMDVCQzAwMDVGQ0RCNTlDNjE3N0FDNDg1MkRCQzA3QkVCQjkwQzk5REIKKzoxMDVCRDAwMEE3N0ZEM0NBRDA3REJENjk5Q0QzRUQ3NTM2NzlFMTQwRUUKKzoxMDVCRTAwMEQwMDY3RTE4NTc0MDc2QTQwRkYxRDc4MjQ3NUQ0NDhGQzgKKzoxMDVCRjAwMEM3MTY1QjM5MEU3NkRCOEIyRkNFQzBENUY0RTM0NTMzNjkKKzoxMDVDMDAwMEYzMDMxMjUxQjA5RjA4RkI1M0NENjkxREY3QjFFMTMyODgKKzoxMDVDMTAwMEVGRkI0MTVDMkNDREY2Q0MwRjNDQUUxNjNEM0VEMjIyQzQKKzoxMDVDMjAwMDQyRTdDRTRGMDREQUUwMzdDRDc1OTBDRjIxQjgxNzRBNUUKKzoxMDVDMzAwMDdFRUExQzcxQ0UwQUZFRTdGRkQ0NzkwOTgxMUQ1MkVBODMKKzoxMDVDNDAwMEM3NTYyN0U0MzlDNzhCRTBDRjM4QTdFMkI5QzU1NkI0QTkKKzoxMDVDNTAwMERFODVGMzIyNjJBQzEyODE4N0ZGMTgyRUUzRkM4Nzg2NzMKKzoxMDVDNjAwMDQ5N0FBMzFERTREMTg1REE5MUREOTc4OEZEODUxNkUxOTcKKzoxMDVDNzAwMDQ5NzQ1RjI0QUVGRTNGMzFGRjBDQUI4QzMzNzQ3MUNBQTQKKzoxMDVDODAwMEYzMjI5REFEMUFDQjBCN0I5NjdFQ0ZERDc5RkNBRUNCOUMKKzoxMDVDOTAwMDBEM0Q0RUQ2QzkyQUQ3N0QyN0FGNUNEN0U3Q0I4NTAzMEMKKzoxMDVDQTAwMEZDN0RCQjI2RUY0RDhCQzYyRkZGODk4OEFCMThFNzU3Q0QKKzoxMDVDQjAwMDYyNDc0QjM5NjJDODg1NzNFNzUwN0E0QTNGRDRBNkNCMTYKKzoxMDVDQzAwMDg3NjAwRjBCRTcxRERDMUQ2RjVFQzdERkVCRjI2MUFENzgKKzoxMDVDRDAwMEExMkYwMkU0QzdFNzlCRTQ4NEMwQkU1RUVEMzI5NUU1RTgKKzoxMDVDRTAwMDA0QzlDOTgzMUE4REIzMThGN0IyQjg1QjdGMUZFRUU2RkIKKzoxMDVDRjAwMDA3QTQxRTFCRUUyRjdBMTBGQjI2QjM1NkRCQzQzQURFMzgKKzoxMDVEMDAwMDU3OTBGN0MzQ0VENUUzRTRDNTgxQThGQjU5NzQ3QkZDNUIKKzoxMDVEMTAwMENDNEFDNThEREY4RDk4QkRDMjVDM0ZEN0Y1RTUyN0YwMzUKKzoxMDVEMjAwMDFGNkY4RUJFQTdDNkQ4QUZCQjQ4MUNFMEU4MzBERDRFNjMKKzoxMDVEMzAwMEY3MEFBRjlFN0ZCRjA0RTMzQjEzOTRGNzVFOUYzQkFGMzAKKzoxMDVENDAwMEE0Qzc3RjVBODJDRjRBRjg0RTIxMjI3RjQ3QzJCMDBCQTgKKzoxMDVENTAwMDBDRDg4MzdEQjI4ODdCNTgwOEJGQjE1OUQwRUY0QkFEQ0EKKzoxMDVENjAwMDZERTYzNzFBRjgzRDk3RTdBMUVGRDM1MUI5NjQxOUZCRjcKKzoxMDVENzAwMDMzMzJCRjgxRTQwMUVGQ0I5REEwN0FEODgxMjcwMkE3RkYKKzoxMDVEODAwMEI5RkQ4OTFEMzE5QzU3NzJEMkQ3RDAxRkZCQjdDNjNFRDMKKzoxMDVEOTAwMDVEMEY0REVFNjNCNUVDODg5N0Y5MEQyRThCODQzN0NCRjQKKzoxMDVEQTAwMDdCRUMxN0ZDMzVEODFGN0U2QzYzRTA1OUQzMzkwN0FEMDcKKzoxMDVEQjAwMEQxQkNDRjE3NUQ2QTM1M0JEOURGQkMyMjRGNEIxRThFNUQKKzoxMDVEQzAwMEJDNzRBQkQ3RTkyNUY4MUVENzNFQkVBNzZCMUNGOThGNzQKKzoxMDVERDAwMDkwNkJDODRCNTk5NjIyQzdDRkYyMkI3MDVBRTJBRjRBNEMKKzoxMDVERTAwMEUyRUY2NzY0RTg0MTdFQkUyRjQ4N0EyMjhFMjlDOEFCNzUKKzoxMDVERjAwMEE1QjIzODNDOThGQkZGQTlGQjYwOTNDRkZBRTRGRUVGMTUKKzoxMDVFMDAwMEQ5MjFGQ0JFQjY2MjMwQzM1OUMxRTY5MTFGNTBCRkQ3M0QKKzoxMDVFMTAwMDY5MkUwRkUyNDhEN0Q2RkU2MjRDMkM3REJBRjE1RjVENDkKKzoxMDVFMjAwMENCQjhFQzZDM0UzRjYwOTRCRUUxNTI4RjM0REFEQUFFMTAKKzoxMDVFMzAwMDVGQUZDQjlGM0YwQzE3RkE3RDM1OTJERjE3RDYyOEJDOUEKKzoxMDVFNDAwMEFGQjYxMDNDMEVGODNFNzkzRkE3MDE5RkFFRDNFMTMxQ0IKKzoxMDVFNTAwMDEyNUVCNDRDQzI1MDREQjA4MzY3RTlCRjkzQjY0OThGMTAKKzoxMDVFNjAwMEJGNjBGRTI4MzE3RkM0MDVCNkU4RjExOUNDMUYyNUU2RDYKKzoxMDVFNzAwMDhGRTc5MDU3ODAyMUFGMDA0MzVFMDE4NkJDNDIwOTc5Q0QKKzoxMDVFODAwMDg1RTc1RjI0OERFMjdENkRFQ0RCOEQ4RTU4NEZEOEI3QjIKKzoxMDVFOTAwMDFCMURCMTNFQjA2RjE3MDk2M0RGMkVCMjNERjZFRDIyMzgKKzoxMDVFQTAwMEVCQjE2RjE3NTk4RjdEQkI0ODE4RkI3NjkxRURCMTZGNDEKKzoxMDVFQjAwMDE3MDk4QjQxNTdCNUMyOTA2QkZFODkyNjc4MzJGOTAzREEKKzoxMDVFQzAwMEEzMjNENjMzRjZFRDIyQkY4RjdEM0JEM0Y3QjQ1QjRDRDMKKzoxMDVFRDAwMEVGREYyODE2OUJERUM3QkU1RDY0RkI5OThCMTVEM0JFMzIKKzoxMDVFRTAwMDlFMTBDREFDRDc2N0FGNjlDNzdDOTRFMTJCQUEwNEJGRTUKKzoxMDVFRjAwMEZGMzlFRUVGQjdEOUJBQjE3Q0UwMzhDNkMyRjI1OEFGN0QKKzoxMDVGMDAwMEE0NzdERDU4NDk3RjhCM0MxRkExMzRGM0VGMEI5Q0JFNzcKKzoxMDVGMTAwMEQzMkVFMTMxRTZGQzZEQTNDNEJFRDc2ODlCRENGNzQyMEIKKzoxMDVGMjAwMDg5N0QyRjk0RDhGNzQyODk3REFGRDEzREU1QkUxNzRBRDAKKzoxMDVGMzAwMEVDN0JFMTM5RjZCRDUwNjJERjBCMjVGNkJENTA2MkRGMjgKKzoxMDVGNDAwMDBCMjVGNkJENTA2MkRGMEJFRjYxREYwQjI1RjZCREYwRDAKKzoxMDVGNTAwMDFDRkI1RTI4QjFFRjg1RTc4NzY5MUMyNTExNzIwQ0Y2RTIKKzoxMDVGNjAwMDdBMEY5MzlGNDk3QzY4RjIzM0REMjYxOEY2N0E2NDdCQkEKKzoxMDVGNzAwMEQ4RUI5MUY1QjBENzIzRUI2MUFGNDdDMkIwRDcyM0RCQTUKKzoxMDVGODAwMEMzNUU4Rjg0NDNDMzNDQkNERTYwQjc0N0JFMDdCQjNERTYKKzoxMDVGOTAwMDEyRUU1NzE3NzgxOUIxQjVGMTZCQkYzRTgwQjIzMTVFODIKKzoxMDVGQTAwMDc5MENFNzBENDNDM0E3Q0NDNDdFNjY2MzhDRDIyNTg5RTgKKzoxMDVGQjAwMDY0QkFBRDY2REFDQ0QxQjBDM0Y1RkNDN0ZFQTJEOTAyOTMKKzoxMDVGQzAwMEY5QTNDMTk5Q0NFMzczODY5QzU3REFFRkZCNzRBRTZGRUIKKzoxMDVGRDAwMDMwQ0VDNUUxMEZEMUREQjc0M0YwRUZDRTE4RkJFREM2RjMKKzoxMDVGRTAwMEZCNUU1MkRCRkM3QjUxN0FGQjU2QjhFRDc2RDFGRDFCOTQKKzoxMDVGRjAwMEVEMzhCNzJBNjIxQzM4RDE4Q0JDMTlERjlEQUUxQ0Y4NzUKKzoxMDYwMDAwMDIxOUIyQzBBRTc5OTZDNUEyMkYzQTJBM0Y5RUEwQjVEQjMKKzoxMDYwMTAwMDNFNkRCMjZDREY4NzczMzBDREM1OEExN0U3M0U3QUQ0MDgKKzoxMDYwMjAwMDY5N0NDRUFDREY3NDYxNTE3REFERjNFOUZENzgwMkU3QTgKKzoxMDYwMzAwMEQ1QkVBMUNCM0Q2M0ZDNDY3Qzk0RTQwNTlGMUYxQ0RBRDIKKzoxMDYwNDAwMERDMzAyQTkxREE2QjgxOTFGQzNCMzhFM0VDRDI2RTIwOTQKKzoxMDYwNTAwMDNGRjQwQUY4OTM3RDAzOEE3RjdEMDQ5RkZGNjlCOEQ0REIKKzoxMDYwNjAwMDZGNUE0MDhFRTNDOUM3MjdDOEY3NjJFNTdCNEYzRTlFNTMKKzoxMDYwNzAwMEMwRkQ0RjU4QUE3MDlFRDlEMDJEQzI4RjczQ0E4REZBMTkKKzoxMDYwODAwMEY4RkI2RTA5QUJFOEFGNzhBOUVDQ0ZGODZFRjFEQTJFMjkKKzoxMDYwOTAwMDc2OUNFNzM2RjA1NTJDMUE0N0UzM0U2OTkxQTdFMDRFMEYKKzoxMDYwQTAwMDU5RDFDQkFBQjE1RERBNjFCQURCMDIzQkU4NTJDRjQxRUMKKzoxMDYwQjAwMDBEQ0I0QjFBODMzQzQ0NTEyRkY4REVEMEYxNzk2RjlCMDYKKzoxMDYwQzAwMEU2Q0JFOENBQzdFRkEwMEFGNjBEQjVDMDJEMTZGNDNCMjMKKzoxMDYwRDAwMDgxMTBEMDBFRjE2NDgyMzExRjREMTM1NTk5ODRERkVCOEUKKzoxMDYwRTAwMEE2MTYzM0JFQjNBNjBCMDVGOEVFMzM3RDlEMjU4NURFREYKKzoxMDYwRjAwMEVCQUJCRDY0ODFCREQ2QUZBRTkxNEI2MzFFREVBMTQ5NTMKKzoxMDYxMDAwMDJBRTA3MTM2RjcxODhDN0ZEQzE4ODVFNTQ3NzQxRTBGN0UKKzoxMDYxMTAwMEVDMDM4Njk3REE1ODlGMUJGNkMzQzJGODczNzkzRTdGNkIKKzoxMDYxMjAwMDQyOUVDRkU5NDMzNkNFRjMzOUJERjQwQ0Q3MTdFRjhDM0UKKzoxMDYxMzAwMEUxQkMxRTZEOERDMjcyQ0RCMDFCOENCQzlEQjI1QkRFMEUKKzoxMDYxNDAwMENGMDc3RThFNjUwNjM3MjU3NTY3M0Q5RjM4MDJGOTM0ODcKKzoxMDYxNTAwMEREQjYyN0UwMDhDRTg5QTUzQkFGQzNEMUJERDM0Qjc3RDEKKzoxMDYxNjAwMENBREZBQkQ1Rjc3NzhDREYzRDE1RDk3RUNFMDczM0VDOTAKKzoxMDYxNzAwMDQwQTFENkRCMjNGNzcxOENERjRGMjNGOUM5RUQ0RUVGMzkKKzoxMDYxODAwMEIxQkJGOUY3RUJGNERGM0IzNUUyM0VDNTZGRTQxRTA0MkIKKzoxMDYxOTAwMDVFOEIxRjk1QkY3RjM2NkJDNUFBQzJBOTA0Q0ZGMTNCQUEKKzoxMDYxQTAwMEMzRjg1REFDRTg3Q0FDRjk1MTc2RTBDNTdFRUZCNENGQzYKKzoxMDYxQjAwMDA4M0RGRUQzNkFGRjMxQkY5Qzc5NUREQTdGQzU2RkVDODUKKzoxMDYxQzAwMEJGNTZEQTJCMzZDRUZCOUY1RTIzRTM3NTYyQkJFMEZCNDYKKzoxMDYxRDAwMDhGQTZENzhDQjJFMDFFRTlFOTNCRkQ1RUM1RDM2QTA3MDYKKzoxMDYxRTAwMEJFQTVEQjJEOTNDRTY2MzA3RURGRDVFRDk0NkI5MTdGMUYKKzoxMDYxRjAwMDRBRjgxREQ3MThBM0U3QUJBNTczNzlGRDU5OTk4RjNBRDMKKzoxMDYyMDAwMEM5MjVENzdCRTM3MzgyRURFOTk2ODA0M0U2MTFENjBCNkYKKzoxMDYyMTAwMDNEQkZENUNDNzczRTQxRkM0MUY0QjlDQ0FGRUM0N0RBNzkKKzoxMDYyMjAwMEYyNzhEODNERjRCREE5QjA4M0RBODE4RjhCOTcyMTVGRDYKKzoxMDYyMzAwMDk2REU2NkJCMzM5QThGMjc1OUMzNTNGMEZENDk1RTFCMjgKKzoxMDYyNDAwMEYzRDczRkUyNjNEQ0NCNzE0RTJFODlBQTk3NzFDRTVGMDQKKzoxMDYyNTAwMDZDOTBCRkUzMzA1NTkzRkNERDU3RTdFRjE5NzE3QUZDODIKKzoxMDYyNjAwMEM5MjVFMzRCRTdFMjAxMTgyNDYyNjY4MUFEMzM5MTJGMjMKKzoxMDYyNzAwMDNDMDNDOTBCMUQ3OTVBN0VFNEVCQzU2N0NCRkFEOTdGODUKKzoxMDYyODAwMEQ4M0E3MzI5OUM5OTBCQzQyNUQ0M0JFQzdDN0ZCNUU2QTYKKzoxMDYyOTAwMDcyRjJFRkQwNUMyODRFODBGODAwRTRFMzREQjdGQUVDRTAKKzoxMDYyQTAwMEIzMjJFNDYzQzFDODgyRDVGRTAxMTFFNzFERUY5MTc5RTUKKzoxMDYyQjAwMDUwMEJFRkU5RDlBMUFERjNCNjQ2Mzk5QkYwOEJGNTMxMjAKKzoxMDYyQzAwMDIzQjFGMTM2OUMzN0FGMTkyMUZDQTMwN0M5REY5OUU0NEMKKzoxMDYyRDAwMDc5RTFDNDREMTY3RTZGNTJDMjVCNDdCQ0ZGRTcxNUQ5MEEKKzoxMDYyRTAwMDhDMEY4NjdGMzVFMjg1OTlDODg3Mjk3NzM2MTY4MkREM0YKKzoxMDYyRjAwMDJBQjNBQkM2MjJFRkJBNTUwRTY5RkU4QzRDQzgyMTVGOUIKKzoxMDYzMDAwMDE4QkYxQjc2QTFCOEMzRDYxMTkyMEVEMUYxODdEOUQ5ODcKKzoxMDYzMTAwMDUyM0UwQkZEQkVGMDRGRUZEOUJEMERGMkRDMThGRkE3Q0EKKzoxMDYzMjAwMDE3Rjg3RDhDOEQyMzJDRkZBREU3M0NBMkNGNzc3Q0QwNzYKKzoxMDYzMzAwMDQ3N0I2ODA0RTIxQTE2N0YxM0YyRTgzQkFBNzU3QUZFREYKKzoxMDYzNDAwMEFDQkNEN0MzQTA2RjRDREQ3NzFDRUYyOEQxRUZDMzI3QkYKKzoxMDYzNTAwMDc5QzJGRUU0MkNCRkQzNUIwMzM5OTIyNTk2RTNCQ0QwMEYKKzoxMDYzNjAwMDBDNTUzNEYzQkVGMTc5NzQ5Nzc4N0M3Q0RBNUZFNzIzQkYKKzoxMDYzNzAwMDFGRjdGMTVGQzVDQUYzM0EzQUZFQTZEQjFCNUU3NjY2RUQKKzoxMDYzODAwMEI2RTJFRkUzQzVGRjYyOTNGMjJCREMxM0ZCNzIzNzU0RTYKKzoxMDYzOTAwMEM1NzA3RTVCQzFDOEEyMkQxODZGNUNCNjk3RUZDMTU4NUYKKzoxMDYzQTAwMEVEOTdGQ0U0RUM1NkY0N0JDOEMxRjI5NTJGM0Q4NkZCREIKKzoxMDYzQjAwMDEyMkFFQjMzRjk3NzY1OEFGN0Y4OTZFMzlDNjNDMTQ4QjQKKzoxMDYzQzAwMDZEMDdERTJCNzZCOUY5REU5MDhBQTU0OUFDOUY2Njc0MUQKKzoxMDYzRDAwMEQwQ0ZCRjhCNjZERTg3MzNGMEZFODYxRTlGQkE3RkE0QzgKKzoxMDYzRTAwMEZDRkUyOUREQ0Y4MDIwOUM2ODZBNzdBMTM4OURDQ0JGNTgKKzoxMDYzRjAwMDQxN0UwRUUyOEY5QTZCMTdDNzA5REM3N0M4N0IyQUVDQzcKKzoxMDY0MDAwMEUyM0QxOTdGNEM2QjNCNkU5MEExQzcxQkQzQkQzMjNFNjIKKzoxMDY0MTAwMDY0RTBFRkRFQUM1OTJDRTc2QzQ2M0NGNzFDRkVDQ0U3QTEKKzoxMDY0MjAwMDMxOEREMkVEOTdGNkMyQUM1QjE1RjY1NzRCNTZBQjdDNkYKKzoxMDY0MzAwMEFFN0M4QzNBOEVFRjcxNTlCODRBRjFGMEZBN0FBMDNCRjMKKzoxMDY0NDAwMEU3N0IyRkJDODdBQzMxMEZDRTk3NzkwQTNCRTRFMUJFRTYKKzoxMDY0NTAwMDc1QzUwREJCNjQzQTY4MTExMURGMjk1OTMzOThENzVCQjQKKzoxMDY0NjAwMDQ5OTBDQTM2RUUzNTM1Q0ExQjU3RURFRkZDOUMwNzY0RTAKKzoxMDY0NzAwMEY0RjNGRTY1ODlEQjZGNEY4RTU4RUZCM0VCMTREM0ZENTkKKzoxMDY0ODAwMDBBMDYyQ0YwMjMxNkVENzE3RjNEMjk0ODFBQzdGNDFFMjkKKzoxMDY0OTAwMDFFMDVGQjhBNkVCRkM0QzM0REI3NjZEQUYxN0IyNEQzRjkKKzoxMDY0QTAwMEU5Q0I5NjlDMEJGN0ZGRkZCQkZDN0ZDNEJGRUY1MzAwMEIKKzoxMDY0QjAwMDgwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJFRDdEMzUKKzoxMDY0QzAwMDBCNzg1NEU1QjVFOEJGNjdDRjJCQzk0Q0Q4Nzk5MTA0NTgKKzoxMDY0RDAwMDQ4RDgwOTA0QzI0MzlDMTA5RUY1QzFDRTBCMjYxMDYwMUIKKzoxMDY0RTAwMDkyODA4MjI3ODQwOTA0MDkxRUY0NDZENDEyNkM5NDA5MTAKKzoxMDY0RjAwMDk5QzQxMDUxMTM4RDA2MjlFQTgwQzBBMTZBMjU1NjRGMTAKKzoxMDY1MDAwMDg1MTZEQjAxN0M4QjhBMjBENkI2MzYxOTFFOEE2RDdERjYKKzoxMDY1MTAwMEE0NzBBOEY2N0M1NEVGNUFFQkRGM0I5OUQ5OTkwNEQwQ0MKKzoxMDY1MjAwMEY2RENERUZCRERGOEUxQ0VCRkZGRjdGQUQ3N0JBRDdGMEYKKzoxMDY1MzAwMEE3Mjg5REJEQ0EyNjMxRDZERDJBNDhEQkQzMThBQjk0RTcKKzoxMDY1NDAwMDE0RjM0NDFCNjNERkUyQ0YwQ0M2OTZCNTA4OEE2RjdDNTgKKzoxMDY1NTAwMDZGQjkyODlEMkQ3NTQxMzk1MkIxMzMzNjk5QjEwQTQ5MjkKKzoxMDY1NjAwMDM2MjdBN0UxNTMzMkM3QzJGQjY1QjcxRjMwQjE3OEM2RTMKKzoxMDY1NzAwMDk2OEY2NDRDQzg4MkY2QjEwRUIzMERDNzVGMDVFMzBCNkUKKzoxMDY1ODAwMDhDREQyMEY5MEJCMEZFODZGMTMyQUI4QjgxRjZERTJDNzAKKzoxMDY1OTAwMDMzODNGOURDOUJGODNDRUVBNjE4RjMxNTUwQUUzMDRBNzUKKzoxMDY1QTAwMEU2MTQyODk3NDUzMjg2RUQ2MTdEM0VFQzVGRTk1N0NDRDUKKzoxMDY1QjAwMEIxMzYxQzk3MkQyREIxRjFGNUM2MDZBREFGNDI1RDZGMUEKKzoxMDY1QzAwMDY1NEI4Qzc5NDVDOEZCNTY5MzBDRTVDNThDMjkxRDQxNUMKKzoxMDY1RDAwMEZCRDM5RTMzMTQ4MUY2QjNDQzVCOUNEQTBFRUJBREY0QTcKKzoxMDY1RTAwMEQ4MjU5Q0I3RDJBODk4MURCODJFMUMxN0ZBMkQ2RTZCMTMKKzoxMDY1RjAwMDM3QTUwNUY1QkY0MjMxNTBCRjE5OEE0Q0NGQTI3NDdGMzEKKzoxMDY2MDAwMDg2ODBGQkJEMzVDMjgxRUI1RDJDQjU5ODEwOUU0NTFBODYKKzoxMDY2MTAwMDlDMUZFNjcwNTgyMUY5MzM3MEZDMTU1NjBFMDc2REJDQUYKKzoxMDY2MjAwMENBMzYzRTRGREZGNTcxNzg1N0I2NTU5ODY1QThCRkQxODkKKzoxMDY2MzAwMEU4NEE2RDg3RkUzN0MyM0EzREYwNUNCQ0Y5NDA4NjgwN0YKKzoxMDY2NDAwMENGRUEwODg3MDBFN0MxMjQ3N0FBQ0JERURCRkY5Mzg3NzgKKzoxMDY2NTAwMEFGNEZBNUZEQzNGQTExREU3Njg3M0MzMzA5RDZCM0JDMzQKKzoxMDY2NjAwMDA1MTYyM0QzOTNFNjJEQ0Y2NkQ1MUQ0MTcwQkI1RTMxNTEKKzoxMDY2NzAwMDMyOTY4MDRGMDMzRDU5NEJCQjYyMUQwQ0YwNjBGQzY3QTYKKzoxMDY2ODAwMEI4Rjk0ODBFRUVBMzdFMEM2MzFCNjAxRjZFREJDRjczNjAKKzoxMDY2OTAwMDcwOUZEMjlEOEM4OUQzNjFCRDlCREVBM0ZBRTU0OTRDRTYKKzoxMDY2QTAwMDEyQTBERUNDNUUxMEIwREU1QzA5N0RBMENDM0MwNTRBQjkKKzoxMDY2QjAwMDIwOTM4RkY1NkQzQTYzMjkzODMyQjRCNzAxRkU3ODkyOTIKKzoxMDY2QzAwMDE5NUIzNzU1QTY3OTE3QjNDMDYyMzYwMkM2RDk1NDBDODgKKzoxMDY2RDAwMDczQzAzQTEzRjkzQUNCMDdCMUVBOUY4NTgxNTc5QkJBNDkKKzoxMDY2RTAwMERFMUJENEYzMkUzM0IwOTc1OTZDNkZGRERERUE3OTk3M0EKKzoxMDY2RjAwMDIxM0UwN0Y1QzdGMTcwRENENTVBN0RBRTNGRTNENkYxRjgKKzoxMDY3MDAwMEJERURCNTc5Q0I2Mjc5M0ZBNDA3QzRDM0Q1MkExRTYwMUQKKzoxMDY3MTAwMEZCMzVENDlFOTcwQjQ0REI4NjA2RDhDRjlBRkI0NDlGNkIKKzoxMDY3MjAwMDQ1QzBFNzkzMEQ4M0IxRkM5Q0UwNDBCOEZGNzlDRDhCNjkKKzoxMDY3MzAwMEVGNUMwN0NGM0YzREIyQUQxQ0Y3QTdBRDYzQzVENzU5OUUKKzoxMDY3NDAwMDRDOEU4M0YzRkRGQTJBN0E1NkZBQTczMzM5QkJFRjNFMTMKKzoxMDY3NTAwMDBGNEY3NUZGNDg5OTFDODQzRjBGRkQ3NDk0MUJFNkZGOTMKKzoxMDY3NjAwMEYzQjM2RjY1MjA5QzNGMDIxQzEwMDFDRUZGRjZEMzI3QzgKKzoxMDY3NzAwMDREMkNCRDc3RkRDQjlBREUzMzU1RDg4MkUxMjUxMEJDNzgKKzoxMDY3ODAwMDlBMzM4RkQyRjkyRENGRTRGRDk2N0JGRjUyODFFN0MxN0EKKzoxMDY3OTAwMDZDNjYzOTIzQURFRkY5NTc3ODlGRTNFRDZCMUNENERFQkYKKzoxMDY3QTAwMDZERkI4MDlGRkYxMDI2ODlDOTE3M0Y2RkVEN0NGNUU3RDEKKzoxMDY3QjAwMEZFQjhDOUU1NEYxMkYwN0M1QTQyRTg1RkJGRkZDN0Q0NkMKKzoxMDY3QzAwMDc1RkI1NEZBQkI0MUM1RTMxQkFBNUFBOURGQjJBNjhBREUKKzoxMDY3RDAwMDI3NDU1OEY3NjI4RDdFMkI0M0RGNkJFNzczNzY5Mzg5RUQKKzoxMDY3RTAwMENFRTdFQ0E2OENDNjI0MkM3N0YwRjNGOTc3QjE2M0MyMjAKKzoxMDY3RjAwMDVBNjhGN0U3RDUzQjZGNDk0RUM3NTVGQjUyNUQ1N0YwRDYKKzoxMDY4MDAwMEYzNjFEOUZDN0NGMEI5MTJDRTg3QzU4NTNEOUYzREMxQUYKKzoxMDY4MTAwMEU3QjNGMjA5N0UzRUNCOUY3REZCMEZCRjkwMDlGRkY4RTcKKzoxMDY4MjAwMEZFRUVCM0Y4OTBGRjJFRUI3OEVFRjgwRkUwRkRFMkE2NTcKKzoxMDY4MzAwMDU2NTMxQUI0RkJCNTkyNDZGQkQyRkEyRkFGQ0U5MjU4RkMKKzoxMDY4NDAwMDM0RUNBRjY5OUIwOUY5QzBBRjE1MzkyQzlFNkI3MDY1QUMKKzoxMDY4NTAwMDQ2Q0U2NzFFMzdDMUQ5QzY1MDNEMTM2MjdCREIyRjY2MUIKKzoxMDY4NjAwMDRBMjJGMjExRTYxOUM2NzZDNkY3NURGRjlGNTQzQTJBMEUKKzoxMDY4NzAwMDRBNzc5ODEzOTE3RjM1NDRCMUVEMTJBRUEzRTI3RTM2OEMKKzoxMDY4ODAwMEExNkY3QkVENzkyQTgyRDNDNTMyOTgwN0U5RjM1NDhFNDQKKzoxMDY4OTAwMDIzMTVFOUEyQ0M2MDA4QTEzN0VENzk0MkE1QUZBMTUxM0IKKzoxMDY4QTAwMDFEOEI3MUJENDNFMzk4NTQwRjIwRkU3MUE0OTI2QjgwNDEKKzoxMDY4QjAwMDc5N0ZGQzAzQUI1NEVGQzBGRTZFMTlFQjJENTYyNjc5QTEKKzoxMDY4QzAwMDAwRTREQjBERjI0NEMyNEZDNkFBRUY0OTQ2NTgwNjI2NDMKKzoxMDY4RDAwMDIzREYxQkI5M0FGMDE3NUMxRkEyNTNDNDQ0RkVCNEMzQjQKKzoxMDY4RTAwMEJFMkQzOTFDNEZBMENDMDZGM0Y3N0U3Q0E2MTgzQjg4NDIKKzoxMDY4RjAwMDRGNDVENjcwRkMzM0IzRjdBOTZDMDZCRTg1NzhBQkY1NkYKKzoxMDY5MDAwMDFCQ0E4RTA4RjgzRTE5RDY4MkYzMzc2NzJFQTNGMzMzREQKKzoxMDY5MTAwMDhERTRGNEQyREZGRUJFQkRDNEZEOUQ0QTczRkI0ODRFM0MKKzoxMDY5MjAwMDQ0MzA2OTdCMENFRDZGMEQ5NjdCRjY5N0M5MTQwM0Y0MjgKKzoxMDY5MzAwMDJGRkZEMTE1REI5QTYxQzg1Mzc1Q0E0MTMzRDQ5RjVBRDIKKzoxMDY5NDAwMDY3QTNGRUZGQThGREVBRjdCOUI4QjIyMjY0OUYzRDc0QzEKKzoxMDY5NTAwMEQzMDI3QzJEMEQ5RkQ5QTlCOENFQjM1Njk4MDhFQTRGMjMKKzoxMDY5NjAwMEREMUE2MTQwRjg5RjRBRTNGQTAyNjMwMTdCMDk5Q0NCODAKKzoxMDY5NzAwMEFFRjVGMEFCODVCMURERUJBREY0N0M2QTNEMjBEMzY4QkMKKzoxMDY5ODAwMEM2OUU1OTlGNDRFNTY3RDdDQkY0RUM1ODlGNDlFRkQzOTcKKzoxMDY5OTAwMDczMzhGRTk1NDUyQUQxMjg5N0JCRUJFQ0QyNzY4NDg3RDUKKzoxMDY5QTAwMDlGRDM0RDY3Q0QwODgyMDNFODA5OUMxRkFCN0E0MUE3QUUKKzoxMDY5QjAwMDE0QjBDNzA2RjE2OTkwMUZGN0ExQkM2MzM1MjNEODRFMDgKKzoxMDY5QzAwMDk4QTJCM0U1OTRERDMwMUVGMTkyQUY0RjZCN0ZCQkE5NjcKKzoxMDY5RDAwMDg1QURDMzc2OEYwQUJFOUQzMDZFRDRFREVGMTUyNEEyMkYKKzoxMDY5RTAwMDlDNkU0QkNCMTJBMERGOTI5QTczQzQwRjk3RDgwNkNCNDQKKzoxMDY5RjAwMDBDRTVCOENEREQzODE1RUIzN0E3NDkxQkEwNUI1NDVCMjAKKzoxMDZBMDAwMDU2NjcwREY0NUZFMTFERURDMEY2QjcwQjcyMjNDRDVCNDkKKzoxMDZBMTAwMDI3Mzg3MDVFRjg1MUFDNTM4MDBGRTA2RjUwNUU2OTdCOTEKKzoxMDZBMjAwMDc1QTRDQTJGMERDODJGOTdERkJGQUUzMTE5Q0EyNzBDMjYKKzoxMDZBMzAwMEFDNUIwNEQwMTQxOThBNjc2MkI5Njg0QjhDQTMxRUU1NUQKKzoxMDZBNDAwMDZEM0RERjBGREIwQTdDRDREQUNCNDcwQkE3QjlBRUNFQTYKKzoxMDZBNTAwMDgxNzM2NjE3MDBERjYwRkNCMUIwMzYyNkUyN0UzQTE0MUYKKzoxMDZBNjAwMDVDM0YwM0JENjMyN0MzRjVCQUNDRDhGRjk3MkFCRkVDQzAKKzoxMDZBNzAwMDZDM0I2MTk3RDVGMzI5NDZCQTcxNzc5RkI4MDdDRkQ1OUMKKzoxMDZBODAwMDY2NzAzNENCMjhERkU1Nzc2NTg0RkIxQjIyREIyRTIzODEKKzoxMDZBOTAwMEZFRjBGQTM1NzY1RTBGQ0YwRDBENTBCRjY2OUJFODQzRDIKKzoxMDZBQTAwMDc4MTQ4ODY1ODMwM0E4N0Y2RDE2ODkyRkFFRDg1NjNBNkYKKzoxMDZBQjAwMDE4RjU4RDE1NTA0NkY5QjUwNUE3MDI3QzZBNkNDQkUzMzUKKzoxMDZBQzAwMEVENUEwQjFFRjEwMDNGNEQxNTk4MEJGOUQxNjk2M0EwRUIKKzoxMDZBRDAwMDE4RTFGMUU5QjZDNEQ4M0FENEY3NkVBRTFGQzVBMEJFMkUKKzoxMDZBRTAwMDcyREIzREE5RjhGQzc0NUJDNDIyRTRFM0Y5NTI3MTdFQzkKKzoxMDZBRjAwMDBDRUEzRjVCNjNCMjQ0Qjk5N0NFQUE3MjM4OURERDc0NEQKKzoxMDZCMDAwMDczNUUyMkNBQkJENURGMUM3QTVDMDJCOUJBMDI3MDU0MkMKKzoxMDZCMTAwMDgyNzFDRjc3NDRGOTNDRDA2NEY1RkFCREE5MjJBMDk2RTIKKzoxMDZCMjAwMDI1REVCRDNDMDdGMEVCREYwREZCQUY5QjhFNzI1OEYwMEUKKzoxMDZCMzAwMEVENEFBNkY2NzJBMjE0OEU4RTM1N0QwQUYwNTgwNjNDRjgKKzoxMDZCNDAwMEJERjlFRTBGNjk5Q0NGMEQ4N0U3MkQ4NkZFQUI2RjdFRkEKKzoxMDZCNTAwMDNFMUFDN0Y5Rjc4NzhGNEQ5MUUwRkQwRjI2QjlGRjE3NTEKKzoxMDZCNjAwMDhFRkYyNzYxREIyRTA5NDBDMjM2NkY5QjgwRjJBMzNBNkQKKzoxMDZCNzAwMDg3NzFCRTFBRUJCQTZFMzE4N0FGNjNCQkRDRkY3QzU1MDEKKzoxMDZCODAwMDdCMDU4MkE3NTY1RUUyMUI2NDY2QTg5N0ZBOTk1OUMyRjQKKzoxMDZCOTAwMEE3QzQ0ODBGRkU1NDY0MzUyOERGMzVCRDQ0N0I1RkFGODIKKzoxMDZCQTAwMEMyRTVEMzQxMkRBOTc4RkVBQjc2QjVBN0EyRkNGOEEzMjgKKzoxMDZCQjAwMDlEOTdERDNCNUU1QjcxMjdBQ0MzREQ2NjkwMThFMDlENjEKKzoxMDZCQzAwMERCQzg0OEVGNURFRUUxRkEzNEFCMDI2NjkyREMzQkZGRDYKKzoxMDZCRDAwMDdEMzk1MUI0RkU1NTlCQjM0M0U0MUVDODQ3OUFFNzhGRjUKKzoxMDZCRTAwMDQ2RTZDNDc1MENBRkVGQ0U0MkZERTlGNzQ2RkYwQTNDMUUKKzoxMDZCRjAwMEQ3REY4MzdFRUE0OUMzNzNFMkY4RjdGQjE2NzEyNkJFM0UKKzoxMDZDMDAwMEY3REMyRUIwMEMwMUNCQ0ZEQjQ3REE0ODBGMzMxMDVGMzcKKzoxMDZDMTAwMEZGQTVDOUI3MTNEQURCMjc3NUY4OTFFRkRERkM0MkNDOEQKKzoxMDZDMjAwMDQ0MDQ2MzgxMzgzRTExRjE2N0NEM0VEM0NDQTE1QzlGMTMKKzoxMDZDMzAwMDkyNzBGNkQ1NDZCRjM5RENCOUREQTRFQTUxM0RFNTE3QkYKKzoxMDZDNDAwMDlFMzMyM0RFQUY3RTA2RjQwMUE0Q0YxNzA0MUZFQTM3N0MKKzoxMDZDNTAwMEFCM0I5RTdCNzUwODhDNzdDQkRFOEE2QzlDNDc2QjdGNDkKKzoxMDZDNjAwMENCMEIxQzBFMTEyQzYwMkUwREQyQUIyQjMyNjMxQjg3NkQKKzoxMDZDNzAwMDAyOEY3Q0Y2QzA0NzRCMUY4NjJENTVFMDM5RkQ4MEIxNTEKKzoxMDZDODAwMDdEMzMzRTcwRDc4REM0QTc0NEZCNjRDNjZFRDJDNzQxMjYKKzoxMDZDOTAwMEJGMzJBM0ZDQkZEOUNCQzdCQjM5RjM2ODYzM0FFREFCQjYKKzoxMDZDQTAwMDM4OEUwNTlERkY5RTFDMTNGNUQzRkFDM0JFQTk1RkJEQTgKKzoxMDZDQjAwMEY1RUUyNzAyQjA1RUE1REVDODIyQUU4NUIyOTE3REI0QTYKKzoxMDZDQzAwMDBCRTFDN0EyQTU5REI4MEYyMzNCRkQyQTNDRDc4QTgzQzEKKzoxMDZDRDAwMDU4MzMzQ0I3NTZBRkY5MEY2QTVGNjc5MTQ0NzhENkRGRjcKKzoxMDZDRTAwMDVDQkIyNzAwRjNDOTIyNzMzMUU4RUZDOUFEQTZGMTNDQzQKKzoxMDZDRjAwMDY2MkU3RkRBQTM5RTdERjQ0NjI4RDcyQ0IwMzkwMEJEREUKKzoxMDZEMDAwMEExMUM0REYwRDlGRjQzMDNGMUY5NjRENjdEQzgwMENGMzMKKzoxMDZEMTAwMDQ0MDY1NDA0MDBGQTUzOUFGQjMwRTIzN0ZEQzBCODZCQzYKKzoxMDZEMjAwMDZGOTM3REM4OEY4MTgzMEI4OEU3NUZCRTc0MjYxQkQ3NjYKKzoxMDZEMzAwMDdERURGMEMwMzlDNDJCNTNERDE5NzczRUQwRkZGQjM5MTAKKzoxMDZENDAwMDEyRDc0RkM2MDdCMkIxNURDMjQxOTVBRjE5OEY5MDdDODMKKzoxMDZENTAwMDM0MjVDOUIxQThBRkY4NzEyQzVDREZERjBDODQwN0ZCQzgKKzoxMDZENjAwMDA1RkY5MzM4QUYwNkE3ODg1Q0FFRkYxOUIyREM3RjQwMDEKKzoxMDZENzAwMEZFQTcwOEE2M0JGQ0QwN0VCRTEwRURDMEZEMUU4OTE1MDcKKzoxMDZEODAwMDMzMjYwMjNEN0Y2OUZBMjgwREM3RjUwMERBOEE0MzdCNzYKKzoxMDZEOTAwMEY1RDg1Qzc1RTlFNjIxRDMzNjIzNUM3MjAwQTBFQzZBNzUKKzoxMDZEQTAwMEIwNjVDNkM3MzIyMzk0RUY2NTg2NkUwQkFDMjNCN0ZCODQKKzoxMDZEQjAwMDc3REJFQUEwMkMzRDM4ODg4OTIwQUFFQTIzNTI1OTJFOTUKKzoxMDZEQzAwMDhDMkYxQzg0OERDMjdFMEU4RTNGQjgxQ0Q3Nzk2RkI3NzYKKzoxMDZERDAwMDk1MjE5Qzk4MzU1NENGMzUxQjkyRkQzRjQyN0NBRThFNTkKKzoxMDZERTAwMDc2QjAyNDk0NDMxRDU5Qzg4RkQ4MkQzNjQ3MzNCNDVGRUQKKzoxMDZERjAwMDcyMjE5MEYxQkY1MDJFRkRFRDMwRTlFOTYzRDJERDVGRTUKKzoxMDZFMDAwMEUxN0U4Njg4Q0EwOTM3RDRERjJCRjk0NzNDODBFM0Q3NzcKKzoxMDZFMTAwMDQ0MzlFQUI4MUM2MUMxRUJERkJGRUU2RkQxNzFEMEVGMkUKKzoxMDZFMjAwMENCRUU1MUM2M0REMEVFNEJDNUVBMDAwRDk2NzVERTM5NkUKKzoxMDZFMzAwMEVFRTVBQkEwN0NCNTJBNEZGNEVCRkEzMjQ5MzZBMkREODEKKzoxMDZFNDAwMEYxNjVCN0Q1OEY3QUM4OTczNjgzNEYwMDkwRTZFRTNGNEQKKzoxMDZFNTAwMEY0QTEwMEYyM0JENzZBRjM4QkQxRDhDRkY0NTlCMEJDODAKKzoxMDZFNjAwMDYxNDc1MjYyM0UxOTQ3MjI4NjdEMEJGMDFDQUNDQUE1RDEKKzoxMDZFNzAwMDZCMDc4NURBOEY0MzcyQjkxRDM0MjQ5N0YzMUZBM0VDOTcKKzoxMDZFODAwMDIwMzg5RkY1MTg1OTMzRTIyMTgzMzJDRTZCQjQ0QUNEQjYKKzoxMDZFOTAwMEIwQkU1RkQ5NzYyRDAxQ0E2NzY3QkY0RTFGODQ3MkUzMEIKKzoxMDZFQTAwMEVDRkUxMTgzRDhGOEZFRjlFMjMxRDQyNzQwNEY1ODNBNkUKKzoxMDZFQjAwMDUxNDlDQjlEREMyQjVGMTdBQTcwODk2OEI5REU4NEYwM0QKKzoxMDZFQzAwMEE4MDc3ODM0MDMzQzE2REEwQzdFMEJFQzhCMkQwODg1NzIKKzoxMDZFRDAwMDAzQUJFOTJFNDdCQzYxODY2ODA3RDIwRDlFMkY5RUJGOEIKKzoxMDZFRTAwMDJDMThCQUQ5NTU3RENGN0JDNjA1QzlGRjIzMjgyRjgxMjEKKzoxMDZFRjAwMEYzNDRCODk2OUZGREU0OEEwNzE4OUREQjE1QjkwOTc0MjEKKzoxMDZGMDAwMDhFMEQ1N0IyREVGM0ZCNTczQjJGNjY3NDM0RTEzOUFDN0MKKzoxMDZGMTAwMDE1RUQyRDc4MEVGNTQ2QUVFRjc5MDBCNzc2QzY1MEI3NzEKKzoxMDZGMjAwMDVENzgyRTZCRUI0N0QyMzkwREFFMDczRTgxNzY0QTlERDgKKzoxMDZGMzAwMDkxNkQ4RjQ3QkU3Mjk0REFFRjU0RjU0MTk2NTk0RDdDQUUKKzoxMDZGNDAwMEE2QkNERTIyMjFGQ0JFOEE4Q0E2RkUwQ0NFRDUzNDI0NDMKKzoxMDZGNTAwMDFDOUZFMTdDQTVBNjkyMTE1RjU5M0FCRTVBQzA3MzRGOUYKKzoxMDZGNjAwMEMyMTk2MDNGOUQ4NjgwMURGNzE5ODgwMDJEMTI5RUVCODcKKzoxMDZGNzAwMDcyRDM4OUNFODcyMjQ3MThDMUNGMTlGQjNGQjZDRUJFNDgKKzoxMDZGODAwMDFERjk4RDY4MURGQUQ4NjkxMDQ1QUNBOTNCN0EyQ0FDNjcKKzoxMDZGOTAwMEFCNEQ2MDFEQjQyRjkzQ0EzRjU2RDk0ODlGNkI4QkYxMDAKKzoxMDZGQTAwMDExN0Y2QjVCMzhDQzgxN0JGRDkyQTlGNTU1OTFDNDVGNTUKKzoxMDZGQjAwMEFFMzIxOEE4RENCRDc4MzBEOTYzNkQzMUMwNUE3MUJDQ0YKKzoxMDZGQzAwMEM1NjM0OTZGRjhGOTM3MjJCN0Q3MzIxOEFGQ0Y2MkEzM0MKKzoxMDZGRDAwMDM2NjM3RDcxMjY4REY3NEI4RDVGREQ2N0E3RjFEQThBMDkKKzoxMDZGRTAwMDk1RTQ0OEFBMUY2Q0MwRkU0QkQzRENCNzIxN0UwQzExODAKKzoxMDZGRjAwMDc5M0I1MDNDQThERDk2MkQ0QTMyOUVFNzk2MTIzM0I1NzgKKzoxMDcwMDAwMDdCNDQ3MDJENUU4MUUzNUM2MTIzQkQzMUIwMzhGMkQ5RTEKKzoxMDcwMTAwMDVERkMzOEZERTg1RkVBQUNFMUZCRDZFODYwREQ1NENFMEMKKzoxMDcwMjAwMDRGODc3QjRFM0M4QUZDQzM5MzBCMjc2MjQzNzlGMUM1QTMKKzoxMDcwMzAwMDEyQzQ2QjQ1OEM3NjAwMEFGNzM5RTdBRjdBRjA5Qzc1N0QKKzoxMDcwNDAwMDAzNzA1OTdDNjQyN0Q5RUI3MjA2NDM2MEMzRjk0OTJDNUQKKzoxMDcwNTAwMDE3RjFFNDEwQzAxM0RBN0I0QzcwQ0VGMUZDOUMzN0M0RkUKKzoxMDcwNjAwMEUzMzlDRkRCMTY3Q0NFMzA5RTY3MkRCQzE3RDY0NDNCNzAKKzoxMDcwNzAwMDg0Njk3NENFOTkzODdFMEQ4Qjc0QTA3RERENzM3RUJGREMKKzoxMDcwODAwMEYyNjVFMTUzMzQzODkyMkMwMDhCQkRFOUVFODc1NUZBNTYKKzoxMDcwOTAwMDI1RjgzRUY2MDdEODFGQzBBNURDMTI5OERDODJGQUI5QTUKKzoxMDcwQTAwMDgxNTU3NTg0RTEwMzRGRTQ3MkZCNDA2MkREMjY5NEFGQTUKKzoxMDcwQjAwMDRCMzVGQ0FGRDVFMTdGNjA1OENDMjc1MTJBRkU0M0JGNEEKKzoxMDcwQzAwMDE3MTM1RERCRjAxQzNFMTc4RTREQzE5Nzg3RkYyRTJFRTgKKzoxMDcwRDAwMDBBMzdGRTRGNTRGOUYyNjZCQzZCMzdCNjFGNjkzQzM4NkQKKzoxMDcwRTAwMEVDMzZENDM3RDY1OTQ4RkY2NTE3MEUwREMzNzlEN0E2QUQKKzoxMDcwRjAwMEI5OUVDNkZBODg5MURENjZGNDRGNzUyNjc3OUI3MDdGM0UKKzoxMDcxMDAwMDlEOEJGRjk0ODI3QUQ2RDI5QUQ3ODgzRTJGNzU3RDFCQUQKKzoxMDcxMTAwMEEyMjY5ODUwNkVDNjM4QjM0QzAxRTg5RkU4Q0M3QTA1OTkKKzoxMDcxMjAwMENGRTVFODVDOEI2QzA5RTMwNzM5MzA3NzZBMEFFQTQzRkMKKzoxMDcxMzAwMEM3MEFBN0E2MjBCRjNDOTYwMjI0NEZGMkQ0NjE0NzNFNUYKKzoxMDcxNDAwMDZBREE3Qjg1MURENzc5Q0M5OTRENjU5OUM5NkFCOTc0N0UKKzoxMDcxNTAwMDQwRkVGQTY3RTBBRjdFNTAwNEZFMDhGNjFBM0VDRjgwOEMKKzoxMDcxNjAwMEJERTYwNzdFRkIzMUQ4NkJGODNDMDVGNjFBQkUzRjAxNDEKKzoxMDcxNzAwMEY2MUEzRUJCRDYzQkU4RkQzMUU3ODhCRDg4MTdFNzVCRDIKKzoxMDcxODAwMEI4MUY2NUI5RDExMTU2MkY1QkZEOENDOEZDMUE3RjgzREYKKzoxMDcxOTAwMDdGMzdFRDg4MEEyOTU3NkQ4RDBCMjlERkQ4MDYxODY0RDMKKzoxMDcxQTAwMEVEMkQ1NzZFMUExMTUyRDZGNENGNjVERTcxMjFFRkRENDkKKzoxMDcxQjAwMEI1RDkyMUU1RkY2N0UwREJDNEUxOEJGRUYyN0YyNUY4NUUKKzoxMDcxQzAwMEUyQ0YyNjkwNzdBNUY4MEJFMEY3REI5MzY3MTExRjNEMjAKKzoxMDcxRDAwMDI2QjBFQTM4NzhDNjQ4OUNGRjE5NUQwMkY5RERGMEE3QjEKKzoxMDcxRTAwMDA1RTQ3NjA5RkUwMjc0NjNCNEM5MEQ1OEVGODVGNjBGMDUKKzoxMDcxRjAwMDQyNUJCNDdERDFGRTYwQ0M2MUFBODBGNzBCOUQxMTEyNzkKKzoxMDcyMDAwMENBRjNFQjU4MzVEMUQ5MjJENjQyQ0YxQjU4MDczRENCMTQKKzoxMDcyMTAwMEQ4MTE3QTk2MzM0RTg3NUY1NjA0QTZFMEYzODM3ODc3QzkKKzoxMDcyMjAwMDVBMUVBQzdGQjVENUZENDQzQ0RBNkQyOUVFRDE3MUM4NEMKKzoxMDcyMzAwMDhGNkNCMTY0OTdGNjc3NEVBODYxMzM1NUNGQjU0RDUxMzkKKzoxMDcyNDAwMEY3MDUzRjBCNzBFREQwRUY2OEQ0ODQzQkVFOTA3QkU3MDEKKzoxMDcyNTAwMEQxQzY4N0Y5QUVDQzQzM0U2M0UyRjNCQzNENzk2QTBBRkUKKzoxMDcyNjAwMEYyMDdFNjRBMDhCMUE3RkE5QkFGNTU5NTkzMTU0RTBFNjMKKzoxMDcyNzAwMDI3RjREOTYyRjlGNDQyQzFCNzAxQ0EwNzVBMkQ2NkY0NUUKKzoxMDcyODAwMDJGOUNERTY4NTJGNUY1QkJDOUNFM0Q3MTlDRkI2NTRFNjcKKzoxMDcyOTAwMDM3Q0M0QTQ1RkNBQjZCMUQ5RDhBNzg3RURBMjQzN0Q0MDcKKzoxMDcyQTAwMDAwRkM0RjRGMDdGRUVEMjAzRjhFMDNFNUMzNDlBNzlEMkQKKzoxMDcyQjAwMEZBODNBNDg4Q0U4MjczNUJBRUVFRUZBNEVDMzBBRjgzOEEKKzoxMDcyQzAwMEY2MEI5MzQ1RTY4MUY2NkU0RjVBMzRBRTVGREJCNzdFMjAKKzoxMDcyRDAwMEREQ0IzNjU5NDJGMDYwRkVCNEQwRjI0MjY2RUVDNUI3NUYKKzoxMDcyRTAwMDM0M0M2RjczNkYzREVBNDk2MkQ5MjBGNzAwNzY3N0NENjEKKzoxMDcyRjAwMDQ3QUJERTdEMzkwODVGNkZDOEIzQzcyM0RGNjQ1M0Q5NUUKKzoxMDczMDAwMEQ0NkZDNURFRkVGREMxRjdBQkY1NTVFRkJFNkNFQTg1NjcKKzoxMDczMTAwMEFGODY1NzkzRjI1Q0NCRjE5Q0UwQjUxOUU5MTZFMDYyQjkKKzoxMDczMjAwMDQwNzk3QzZDMkY4NzYzNkJENEI1Rjc1RDA1NzAyODc5NDUKKzoxMDczMzAwMDVGNjQxQ0NFRTU5RURGMjMzRUVGRTM3RTdERkQzQzAxRDYKKzoxMDczNDAwMEE0RUJEMTQ4QUY5Q0FFMkJCQ0VGOTFGREI2QjRCNkQ4NDAKKzoxMDczNTAwMDg0RUIyQkIxNzVBN0EwREZFOUMwNURBMzUzRjA1QzhFNzEKKzoxMDczNjAwMENFMUQ5RDgyN0NFMzUwRTFFOEM3NkU4NzcxQkI4QTQ0RTUKKzoxMDczNzAwMDg3MDVGMEU5NDBEMUI5RkJCMDdDQUM1Njk0NzBERUFFMjUKKzoxMDczODAwMEJERTc1NEZFRDJGREY2NTQ1OERGMTc0RTEzQzlBMUFFMjcKKzoxMDczOTAwMEJERkYxQzNFNTNCMjBGRjgwQ0NDN0ZERUM3RjlDQzRBQzAKKzoxMDczQTAwMEEzOEIzNUMyQkMyQjAxMkU2OEM3RkZCM0Y5Q0RDNUY4M0UKKzoxMDczQjAwMENDNTE5M0FCMjAwMUUxNTUyNzM4RDBGRjU2NTc2ODIxQjcKKzoxMDczQzAwMEZERTEyOEQwODc4NUUzNTNDM0VEQzgyN0E3ODFGRDJCQjYKKzoxMDczRDAwMDIxQkVCOTI2QTM0RDc5NkNFRjg4MDQ4NDE3RjMyODQ3QTIKKzoxMDczRTAwMDMzQTdGNEUyRkJGMkRBOTU0NUU4NUY2NzlCNEMyNzUxM0YKKzoxMDczRjAwMEVGNDY2NzA4Q0FFNzEyNjYzQzE5MDhDMjUzRjcwQkE2QTYKKzoxMDc0MDAwMERFMzJFMUI1RjE2NDIwMDhBRkY1NzhCQTQ3ODdBN0U3MjcKKzoxMDc0MTAwMEQ5ODU1NDczM0FBRjNGMzJCODk3RUZFMTRGMzA3RkI5MTcKKzoxMDc0MjAwMDQ1RjQzN0IyQjQ1RUJDRkQ2QkUxN0JFNUE4MjQwMDVGOTgKKzoxMDc0MzAwMEY5MDVFMkVCMEYyN0E2QkQxNDEwODJGOENBMjVGMkIxQjgKKzoxMDc0NDAwMEQ2QTg2RjQ4RUVCNTQ3N0Q0MzcyRUY3ODIxOTc3QjA3NEEKKzoxMDc0NTAwMDBBQUYzRkY4M0JDNEZCQkIzOERFMUY1QjM4OTVGMEYyNDgKKzoxMDc0NjAwMDk4MDlFNDE5QzBFQjY4NkQ3NjM0OTY0RjZEMkEyNTNBNzkKKzoxMDc0NzAwMEQzRTg0NzNGNEY5NzhBRkY1QUJCQTVDNjZFOTMyMzBDQUMKKzoxMDc0ODAwMDdFQkE2QkM1OTBGM0NDNzg2MUM5MjBGNDA3RjRCNzdFNUYKKzoxMDc0OTAwMDZENUNBRDlEMzZFRTUyNUQ1QzU3M0ZFRTI3Nzk1QzRGREIKKzoxMDc0QTAwMENDRDg1MTM2RTBGODYwMDBGNkY2NDM3RUMyMjI3QkYxN0MKKzoxMDc0QjAwMDU1NDQzREUwN0FFNjAxRjg3NDM5Mzk3Q0JBOEFBRTI3NDIKKzoxMDc0QzAwMDdBM0NFRUQ0RThEMkNEMzAxRTdCNzQ4MUU4NDNGREI1MjIKKzoxMDc0RDAwMENCNzk4RUU4RjQzQ0QwMjk4REQxQ0ZCQzlGQUFGNEY5QUEKKzoxMDc0RTAwMDg5NEE5RkE3NTVGQUQ0RUFDNTlEMEY1Rjc3MDM4RTVCNDMKKzoxMDc0RjAwMDJCMTI5RjNFQkEyMDNCMDFFN0ZCRTM4RTBDOUExN0Q2NzYKKzoxMDc1MDAwMDAzNDYwNUU4MjEyRkZGQkQwMjRDMzRFNDBGNzZFNDVGMEIKKzoxMDc1MTAwMEM3MDEwRTY4Mjc5NDJFMkMyNTdCQkFENEU0NDgwOEE3MEYKKzoxMDc1MjAwMDI3RThGN0FEMUZFRkMwNUM4QjgxRjFGMTg4REY5NURDQjgKKzoxMDc1MzAwMDU1Q0ExQTkxMkYwMDFDMTAzRjhGNjM3QkE4MkZEOUM5MDEKKzoxMDc1NDAwMEZEQzA4N0IwN0Q3QzMwOUM0NjkzQkU3MjdDQjdFMDQwMjYKKzoxMDc1NTAwMEQxNjFEQUZCNzczQjlFQzMyQTVGMjhCRjU4QjkzOTJBMkQKKzoxMDc1NjAwMEU0REM1NkI0QzQ4NTk0NEIwQUY5M0U4RUQ3OEVBMEZENTgKKzoxMDc1NzAwMDVGRUVGOTY5RkQyRkY1RkM2RjUyRkJFMzlBQkYyNTNERTUKKzoxMDc1ODAwMDI1MzY2NDNDMDQ1MkU4N0NFOUJBRkFCMUJBRkE4OTIxOUEKKzoxMDc1OTAwMEU1OEJFMUUzMDkxNTJGMzQzOTcyMjI0MjVFMTIyRUJFQ0IKKzoxMDc1QTAwMEQ0MzVDRjUyMTU5Q0E3MzEzQjlGRkI1QjY2RTc3M0ZGMzkKKzoxMDc1QjAwMENCRTVDQUQ1ODJGQ0YwNzJCNUJGRkUxQTdGMUE5NUU3RkIKKzoxMDc1QzAwMDJBQ0E0NzM5RUEyRjM1RTFCRTJFOTUxRjA1QzlFMTA1QzQKKzoxMDc1RDAwMEQ0M0YyMDk4QjE3RkFCMkE2N0FCM0EzOERFQjU0N0REQTAKKzoxMDc1RTAwMEZGMkFFMkQ1RTdBQTlFMEU3ODQ5RkNGRTBCOTVERjdGQzUKKzoxMDc1RjAwMEYxOUY2QUY5QTcwMkUxRTVBMTdENkJBMzUxNkYzRkIzNEIKKzoxMDc2MDAwMDc3NzQzNERBNjEyNzNCRUFBMzkxRUZDQkNDMTNGRDAzMDcKKzoxMDc2MTAwMEMwQzdDRjVDMjAzRjYxQkE0RjNCMDY5NjlGN0Y1NEY5QUQKKzoxMDc2MjAwMENFMTkzQzA3OTI5QjEyOURDNzI5NTU3RTlFNDBGOTQ5NzEKKzoxMDc2MzAwMEYyM0U5MzlFNDc1MTdFNDJGRDgyRTc1NDNEN0RCNzQwMjYKKzoxMDc2NDAwMEY0QkZDQUQ4MTJERTNGQkQyMzk0NUY1NTZEOEREMkM5RjkKKzoxMDc2NTAwMEM5NTBCOTU5Qjk2OTY4NDg3OTk5Nzc0NDQ4RDk1RDFCQzcKKzoxMDc2NjAwMDJBMzcwQkM0MzJFMkVCNjc3QzFDOEVBNUNFRUM5MEY2NzkKKzoxMDc2NzAwMDY3NjQzOTVBMjJGODcwMzg3QzYxOTJBMzExQ0Y0RUZBQjAKKzoxMDc2ODAwMEUyQTI4M0U5NDVFM0JGNDc3NTcwMzg4RDcwNDBGQ0Y0OTIKKzoxMDc2OTAwMDk2MEU4ODI3QTdENEZFNUExOUVDNDIxM0NFNUI2QTc1NjIKKzoxMDc2QTAwMEJDMTI4RjdFODQ0RDgyMDNFMzU0MEM3OENFMzQzOEM3RUQKKzoxMDc2QjAwMDIzMEJCMjlFNkMwRUQyMzNBNDAyOTFGMEY5ODRGNzUwRTIKKzoxMDc2QzAwMDc5MzJGMjFGMzBDMEQwQ0ZGQjVBRURBMTU0RjRBRjU2M0YKKzoxMDc2RDAwMDNDMTM0NTdBOTM3RURFQ0FBMjUwM0VGMzU5NDM3MUVFQzUKKzoxMDc2RTAwMEVGQTE1RkU5RkJBMkNGOEFGMDI4OEEyMUZFQjVFMDM5M0QKKzoxMDc2RjAwMEQxMjc0MkI5QUIzNjJGM0E3ODFGNjc1NDNBRDRFNENFM0IKKzoxMDc3MDAwMDRBNjM3NUQ4NzNBQ0RBMUE3QThFQTU0NTc1MzRDRUIxNTIKKzoxMDc3MTAwMDg3ODUwRTYxMTAzQzBGNEMwNzQ5REFCNzVGQTk5MUVGREUKKzoxMDc3MjAwMDdGRTUzMzIyRjk3NzU3N0FGRkYyMzZDNjE1NTc4MjFFNjYKKzoxMDc3MzAwMDg4NkFDMjZCNERGNUYzMTBBRjRGQjg0QzA2RTJBNzFEMzcKKzoxMDc3NDAwMDcxRjMxMDNFOUUwNUEyMjMwM0RBMUY2RTFBNDE3ODdFNjQKKzoxMDc3NTAwMEIyMjk2RjMwQ0VGNzcyQkU0ODc0NzU2NkFGQzUyMDVDMzMKKzoxMDc3NjAwMDA5NEY5Nzg5RjlDOTVFRjVEMzc5N0VFNjJEMjVCOTcxNjAKKzoxMDc3NzAwMDA2RTE4MjdBOTA1MTIyQkE3ODM3OUZGQjkxNEVDMDM4NDkKKzoxMDc3ODAwMDU4NkYwMDNBNDE3REI4Q0IyNzNBN0Q2MUU4RTNERDdDNTQKKzoxMDc3OTAwMDdFMUVBNzJFM0M0MEY4RjNBQUVGNTAzNEVBMTUyNzNBOTQKKzoxMDc3QTAwMEY4RjhBNzZBQTU2ODhDNEZCREU1Q0RCNkQzRkE4QTYwMTQKKzoxMDc3QjAwMDVDRDQ3QkY3NUQ0RjcyRjI4Qzk3RTMyM0FFOTNFQ0MzRkUKKzoxMDc3QzAwMDI2MkUzRjhFNzk5N0RGM0YxREUwRjFGOTI2OTFGNENFMEEKKzoxMDc3RDAwMENGOUI0QUU3NERDN0YzREU2NEEyNzI1RUYxNDI4QTZGMjcKKzoxMDc3RTAwMDFDRjM3MUY5NzJEQzc3QUExQ0NGRUY4QzE3NEUxRkNBRkQKKzoxMDc3RjAwMDc1RkJBNkJFM0QyOTFFQ0ZEOTQ0Rjg1MEY5NENFOEI5MTcKKzoxMDc4MDAwMDJDREMxNDRBNUZGMDEzOUQwNTdBNTcyNUZFMjZFM0ZGMTIKKzoxMDc4MTAwMDk0OTk2ODI3MkQ0QjAyRjkwOTk0N0JBMkE4RDQ4NEZFODEKKzoxMDc4MjAwMEM5MTI0RkE4M0NCMkIwNjIxM0UyMURFQTk3RDg2RUQ5RDQKKzoxMDc4MzAwMDYzQTU5M0ZENDg3RjFFODFFNEU1RDIxNzAwOUY2MDNENUMKKzoxMDc4NDAwMEE2MUQ1NzkzQkNBQjY4QjE4NENDNUI1MjFCNkExRjJEM0QKKzoxMDc4NTAwMEQzRDk0MzdBN0JFOUIyRTU4NUE5QkEzQzlDQkMxODU0REMKKzoxMDc4NjAwMEEwQ0EwNTI2Q0Q0NEI4OUYwNEMzQkEzOTBCRTBGOTgyRkIKKzoxMDc4NzAwMEE4NjBGOUJDMzc4MkY4NjdDNUQyQjNEN0E4N0FFOUI1NTIKKzoxMDc4ODAwMDg4MDdDQ0UxNjFEMzM0M0IzRDg4Q0U5Njc5NDU5RDlFRjcKKzoxMDc4OTAwMDFFMEE1RkQwOUYzRjQxRkRCODI5NEU5NUEzOUU1MkYyMkMKKzoxMDc4QTAwMEQ3OERDQTUzNjIwQTcwMUQ5NzZBN0Y1RkIyN0U1QkFFNDYKKzoxMDc4QjAwMEVBQjdFNUE0REYxRTVCMDhGMjAyRjY3MzE0OUIwNEY1MzkKKzoxMDc4QzAwMDNGQjBGMDdBRjJFQjFDOUY3QjNERTlCOUM3N0JGQzNBRjUKKzoxMDc4RDAwMDJFRDVBRjczMEQ5RERCRjEyMkMwNjc5MjFCMEVBRDNDMjAKKzoxMDc4RTAwMEEwMUVBMUYxOEI4RkQ1NzMzOEE1RjJDOTEzMkE5RkVDODYKKzoxMDc4RjAwMDUyRURBRDQ2NTU1RTc4NTU3OTcxQkM0OEI1QjdFMjE5ODEKKzoxMDc5MDAwMEM5MEJBMzUxNjE5N0MyNjc2RTZDOEJEMkM5ODczODlEMzIKKzoxMDc5MTAwMDFEMzU1NDc3M0VBMUYyNjJCN0NCM0RCMzAwRTA2NjQ5MTYKKzoxMDc5MjAwMDFBMUJGMkRFMjQ0RDBDMjk2N0VDRDg0RkZFRTNGMzMyMkMKKzoxMDc5MzAwMENGMjdCQTA3NzEwMkUzMjUwQjc5N0UxNkIzNzY5MEZGNDUKKzoxMDc5NDAwMDc4QTE0M0E2RkFBMTE4Mjc4NEY2Njg1MjYxMUU4OTg2OTkKKzoxMDc5NTAwMDlGREE3QjI5OUVCRkQ3Q0FCMUIwRUIzQTZDOTdENjQxNkMKKzoxMDc5NjAwMEU1RkE4NThDNjExRUNDNDg2RDFDMDA0NzFERTgwOTQzNzMKKzoxMDc5NzAwMEQxOEYwREYzMjQ4MTgxODZFRDM1N0MxRkI2QTA5NURBNzkKKzoxMDc5ODAwMEU1NTYzMTQ5ODA3NjU1MDU2OTg0RTc0OTRDMjFGRTMyMzgKKzoxMDc5OTAwMDc4MzU1MzMwREY4NUY5OUVBNzc2NEZERTBERkIwMEJDQUUKKzoxMDc5QTAwMDBGRDRDRjIwQkJCQ0Q0MUFDREUzREQyMDFGMDdDNkIzNTQKKzoxMDc5QjAwMDNBNEUzRkNFMzhEMjVCODYxOTM5NkFGNjhCQjc2QUJCMkUKKzoxMDc5QzAwMDhCRTE2RDkwMUU3NDA3RDEwNTMzOTAzRkEyMzU2QTgyMUEKKzoxMDc5RDAwMDA5RjFCNEM0RTYyMkJGMDFFMEY1OTIzQkQwNUZGOTkyMTEKKzoxMDc5RTAwMDk5RkIwOTE2NzJGRkU0RDFDMkE5OEZBMUJEM0I2MThGM0IKKzoxMDc5RjAwMDhEN0NDOTQ3NTcwMDNFMTM3RkVGRTY3NjQyNkRBOTA3OUQKKzoxMDdBMDAwMEU1REUwNzRFMkVFN0M2RURGOUNDODBGOTZFNUQ3Qjk5NzkKKzoxMDdBMTAwMDAzQ0I4NzZBOUYzRkZCMjZEMkNCMDI4MUVDOEM2M0I1RjgKKzoxMDdBMjAwMDc5OUMyRjMzRTZDMkZDQ0Q2M0NFQkMwRDU0OUUwNjg2RjYKKzoxMDdBMzAwMDcxMTZEMjgzQjJDMTg4RUIwMEI4MzY1M0ZERjJGQjI2MzMKKzoxMDdBNDAwMEEzQkU3MzU4MjRGQzRENTJGMzhDMjQzQ0Q3RTRERTcyNjEKKzoxMDdBNTAwMEJDQTI5NkQ5NUUyQTI3MTVGMUZDQzA1RkE4RkE0MTg3MUYKKzoxMDdBNjAwMDdBOUUzRjUxRURBMDVEMkFEREI0QTk3NEYzQTA0QTM3OTgKKzoxMDdBNzAwMDFCRjVGRUQwQUQ5QzZFNDYxOTFERjc0NTQxNzk5NEM3QTQKKzoxMDdBODAwMDRFNzJFNkREQTI1M0I0NkVBMDdGMDlFM0I5Njk4NTYyNDgKKzoxMDdBOTAwMEYzMjQ4MERCMzg0QjgwRjg3NDI5ODhCRDBEQjA5RjlDOUYKKzoxMDdBQTAwMEEyM0FDQTVGMkM3NTMzOEE1Nzk0MkNBOEEzRjUwNTMwRTcKKzoxMDdBQjAwMEI2NzQxNUVBNEQ3NTgyQThENjIzN0YxQzE3RTdBN0Y2ODIKKzoxMDdBQzAwMDI1NTYyNjYxRkY1MkU3NzMwNzMwMEY3N0ExMUI0MDAzNEQKKzoxMDdBRDAwMEU1RkMwNTc1MDJDMUE3MDJDNjgzRjYwNzZBMUZBMkYxN0QKKzoxMDdBRTAwMDhFNTdGMTc1MUNCNUYzRkVDNzJBOThFNDgxNzIwNjczQjAKKzoxMDdBRjAwMDFFQkM5REFGRDM4NUYxRDBFM0I1Q0YxRjIwNzgyRkUwMUEKKzoxMDdCMDAwMEYwQkVFQTUzNDMwODNENjZGOTIzNDNFODdBRUM4RUQ4ODkKKzoxMDdCMTAwMDkwRkFEMTlCODc4NDk0MTM1Q0U5MjFFREUzOUNBMUY0NTYKKzoxMDdCMjAwMDFFMzk3MjYyNDhGRDMxNjdBOTAxRTVFQ0Y5MDU1QTdFRkMKKzoxMDdCMzAwMDBGRjc4QjY5NzY1RENFMUU5QjAxRTE3MURENUM1MUYzMjEKKzoxMDdCNDAwMEUzMUFEODYwQjRCQTE4Rjk3RDlCNTQzRDkxQjU4QzYwQTYKKzoxMDdCNTAwMDk4QkZGMUU0OUQwNkNBMEZEOEI4QTBERThBNzkwRkU3NzYKKzoxMDdCNjAwMDNCOEM3NDVFMzAyRUYxOTFFM0ZCOEQzNEFFMzVDRDJCMjIKKzoxMDdCNzAwMEEwMUZGMzVFODBCMzE4QTRGRjM1NjlGMjRERjVBQkUzQTcKKzoxMDdCODAwMDdBOEM0MUVCODk5NTE5NjY4Q0Y1QjQ2RjUzRjFFOTIxMzQKKzoxMDdCOTAwMDc1MURDMEI3NzM0QzM4QUY4QkUzNDk1QzExMzM5OEEwQTcKKzoxMDdCQTAwMDdGQzIwMjJFQTdGNTc0RDlBMUY2RkY4OURBN0Y5NzhBRTIKKzoxMDdCQjAwMDhGNURDRTI3Mzc0NDIyNUMxNjMxRDI0NzBBQzRENTFCQ0QKKzoxMDdCQzAwMDIyNzAxRDQ1OENFOEIxQzM3RjMwMzI1ODdGRkM0NTdGNjEKKzoxMDdCRDAwMEUzMkNDODJFQTA3MTNDOUM4RjhFOUQyRkQ0NDdFMEI5MUEKKzoxMDdCRTAwMDZFMERGQ0U5MUQ3OEZFRjJGM0M2MEREMUIwREVBNzA0RTAKKzoxMDdCRjAwMEQ2ODExNEE1RjE0RjRERkZCRUVBOEIyNkFBMUYzQjExN0IKKzoxMDdDMDAwMDRDMzRBOEZGRTUxN0NEQkNGRDE0MjZBM0JGRUIxN0FBODMKKzoxMDdDMTAwMERDNjk1MkU5Mjc2M0M3NzhGMjJGOUVERjZDMjZCQjY3QzkKKzoxMDdDMjAwMEQ3QkM5NURCREI2MEJEQTNFN0RDRjVENDBCODgyRkYzNzUKKzoxMDdDMzAwMEVFRkFERDBCNzJBRjlFNUYzQTJGQjkxM0YzRjc0N0FENDMKKzoxMDdDNDAwMEI3MzNFNDBGREFCQzE5M0IzRUNCQTU3NTRCNDY4Njc4QkIKKzoxMDdDNTAwMEZBRjRDRTlGMkZDM0YxN0VCMjJCRDJBMEMwRjg0RjZGQTMKKzoxMDdDNjAwMDM3MTI3RjE5NzNFRjYzREIzN0IzQkVGRTk4NTI2N0E4RjQKKzoxMDdDNzAwMDlERkY5MzhERUQ0RkVEQzVGNzM1Q0YzRjcxM0EyODRGRkUKKzoxMDdDODAwMEU3RDhEQzdCNTJEMDZGN0E3NDdENTU1QjdFNDZGRkZDNzMKKzoxMDdDOTAwMEIzRDRDQ0RDMThCRjczRkVGMkIzOUZCRDA1RjNGRkM2QUYKKzoxMDdDQTAwMDNENjY2MkIwMUQzMDZBMjZGN0ZGMUM1RDVGRDM5NjBGRkMKKzoxMDdDQjAwMDc2RUE1ODkxRTcyOTMwQTM2NzAzQzI2M0VDOEI4MzY1QUEKKzoxMDdDQzAwMEQ0REY4MDE0OEM2RTgwQTU3Mzc2ODQ0MTgxRkRGREM2NUYKKzoxMDdDRDAwMDY3REM0NjdDNjBGNkM2MEMzQ0NGRENBNzhCMEU3RThBNDgKKzoxMDdDRTAwMEU3N0M1Q0M1Rjc3RUY0OTFBM0VBMzlGNTk0NEQzMkMxODcKKzoxMDdDRjAwMERERjM5Mjk1REIzNzhBOUM0MkY2QjE0MzRFMjkwOUQyRDcKKzoxMDdEMDAwMEU3OEVERUE1QzU5NzFDN0Y0MDNFNUU1MjE2NDU3MTY1MjUKKzoxMDdEMTAwMDJERUUyMjNBRkZEMjgwN0M3RUU5QjRFQUM5MTJBRDNGNTMKKzoxMDdEMjAwMDM0OEUzRjA0RTE5NzhENzE1RTFFQUZGNzc4OEM4Q0YyMzQKKzoxMDdEMzAwMDgyNjA2QjQ4Mjc2QkM1QjE5NDZGRjJFMUFBMUY1MkJDRjkKKzoxMDdENDAwMERFNTM2NzkxMzJFMjI5NkVCMDA3Q0IzNUMwNzcyQzkzQjIKKzoxMDdENTAwMDI4OEVFQjQzQTFCRDc4MjZGNzIzOUM1QjU0RkY5ODU5RUUKKzoxMDdENjAwMEVFMUZGRURFOEI5QzhGNDkzRDFGRkRGQkM1MzNCOTFFMDgKKzoxMDdENzAwMDVBOEZFNzkyMTE3MjJFMDdERDkzQzI5QzRCQjQ5NUYwOTcKKzoxMDdEODAwMDRCM0IxNzMxQkE4OUNFODU1OTZEOTk5OEY3OTFDODUxRjcKKzoxMDdEOTAwMDBBRjdGMzM2Q0FBMUNFRTNEQzVGRjY5QkIyREJFQUQ2ODQKKzoxMDdEQTAwMDQyRjlFQzg1NDEwQ0U5NDI4QkFCOTQyN0YxRkMwMzNBOTQKKzoxMDdEQjAwMDEyRTA1QjI2QjU3RkEyQUE3NzIzMUY0M0JEQkI1QzhENzMKKzoxMDdEQzAwMEJCNzQyRTYxMTQ3N0QxQzYzQjVGMzM0OEUyRTNERDQyREEKKzoxMDdERDAwMDdBNzM3OTM1RDAzRkNBOTJBODVGOTE3RUQxMzA4MkU3MUQKKzoxMDdERTAwMDQ3OTREQkJBOTc1MEJFQUE2MDcwNjBEQzNDNTFBN0Q3QkQKKzoxMDdERjAwMDdCNTgzNUFEMzdGMTdEOTFGQ0Y5ODZBODRERDQzRjExMDQKKzoxMDdFMDAwMEMwMjM2NjYxMkIzMzAxODFEQUEzNjAwN0EzMTVGMzQ5MTAKKzoxMDdFMTAwMDg2RTAwQjM5NDhDRjUyRjM3NTEzNkI1RUU0RkE1MTFFQkUKKzoxMDdFMjAwMEY0NEMwRTk5NEZGODk2RDY1RkZGQjE4ODdDQTBDNjIyMUQKKzoxMDdFMzAwMDIzREZDM0RDMkNFNERCMDRCRjM0QzRBMzc2RUEyRkRERUMKKzoxMDdFNDAwMEM0MjRCQ0M3QzExNDI2Qzc0RkUxN0UzMDlDNEZCRjdFRkYKKzoxMDdFNTAwMDE4OEZFQjg1QTA5RkUxN0U4NTVBM0VGRkQ2MzlGQzFFMjgKKzoxMDdFNjAwMDA4REJDRkU0NjBCQjg1MDVBRjY3NDQ0ODU5RjU5Mzg1Q0YKKzoxMDdFNzAwMDk2NEQ0OUU2MTAzOUY1OUIwQkE1ODNBQTA3RjBEN0U4ODQKKzoxMDdFODAwMEZCMUI2NEQ3QzA3RURGQUEyMEJCMkJCREI3QkQ5NjI3RTYKKzoxMDdFOTAwMEE2QzE3OTQ4OERFNTg0MTBERDdGQkZERDJFRTVFOTk5MjcKKzoxMDdFQTAwMDgwQ0YzNkU2Q0E3RDEzRTBFMTdFNUYyNDc5Njc4ODNBQTkKKzoxMDdFQjAwMDRDRjAwODQ0NzBGOEY0RThCMzhCQjhCRTBCREE3OTFEQzcKKzoxMDdFQzAwMEU1NUI4M0JDQzNGM0MzM0NFRDUxODBFRkNDMTM5QTI3MzEKKzoxMDdFRDAwMEEwQ0RBQkM1OTczQTU1N0UxQzQ4MEIyQzcxODU4MUM3NDgKKzoxMDdFRTAwMEMxOTkzQzdGQTE2QkZEOTcxNEVGMkU0N0ZEMTY3MDM5QTkKKzoxMDdFRjAwMEIwRTFDRjIxRjczRjQ2MTZFNzFDOUM0OTdFQjdEMDNDNDYKKzoxMDdGMDAwMDA0NEQyRjQ1Mzk0QkY4RUJFMTcyQjZEMzkzNEQ3Q0U3MjYKKzoxMDdGMTAwMDNDQjNCNzkwRkVBRkU3Mzc0NjQ2NzkxRjZCQzU0ODQ3N0QKKzoxMDdGMjAwMDMzRjlFREVFQTZCQzkxMUE4RjQ1QjJDMDczQUUyM0Q0REYKKzoxMDdGMzAwMDFGMzM3RjVBQTgzQzI4NTZFMjc0RjIyMkQ0REZCNUQwMTIKKzoxMDdGNDAwMDE1MUEyNzFBRDlCNjhFRjhENzc5RDQ5Qjg4REZGMUY1QTAKKzoxMDdGNTAwMDE4RDVCQzMyMTNERTJGMTFEMTVFRjdEMEYzQjBDQTlGMTMKKzoxMDdGNjAwMERGNTFGNUNDMDhFNEFGRjAzRTBBMTNDQjAxMUZFRDJDMzYKKzoxMDdGNzAwMDQwRTU0MTg4RjIyMzMwQTU1REE2N0NDNzM4QTY1MDM5N0MKKzoxMDdGODAwMDgxQjlBOUFDRTU0MTI2MzMxRjNEQjVGQzk2MTQxNkEwNzYKKzoxMDdGOTAwMEYyNzBENDg3NDQyNDI5OTk5RTIzRDAwRTE5ODE3QTlFQTkKKzoxMDdGQTAwMEEzMjdERTQzNzk5Mzc5NjkxNDJGMjg2NkNBMUZCMDVEMzEKKzoxMDdGQjAwMDUxRjZFNzI0Rjc4QUFFNjc5NDRGMEE5QzY0Qjk4Mjc5MzgKKzoxMDdGQzAwMDI1MEJCNTMyMkMxNENCMDU0QzQ1Q0U3QTVFNUZBODk1QjcKKzoxMDdGRDAwMEJEQ0IxNUU4REY5OUMzREIxQjVGREJGOEE0Qzc0NkZDMEMKKzoxMDdGRTAwMDRCQURCRjg3RDdGNzk0MUI5N0U3NjBEOTY0QTBCMkE0QzUKKzoxMDdGRjAwMEI2MkZDRTU3NENCMzAwOUY5MzY3MzFDMjgzNUZFNzI5RkEKKzoxMDgwMDAwMDk2RTBCMjNCNEY4OTA4MkVBRjI5NTBBMjY2MjVGNDk2MjAKKzoxMDgwMTAwMDlGQ0Y1NUVDQzFFNUFFNUM2NTUwNzBGQkExMDU0QTBDRTUKKzoxMDgwMjAwMDJGRjMzQ0Q3Rjc0RDRBMEFEQUJCRjBCMzVCOThDMkYxQTUKKzoxMDgwMzAwMDEwN0Y1RTM1Qjk5MzcxMUNFNTE5ODFFMDY1MDFCRURERTUKKzoxMDgwNDAwMDRDN0NEQkM1OTA0RTgxNkNBQzk4NDcwNDdDQzY3QzA3QTkKKzoxMDgwNTAwMEQ0QjM4OTY2Q0FGNzMzNDREOTUyMDdGMjQ3RUFFOTJCMDkKKzoxMDgwNjAwMDYwNjI3QkQxNEY1NzZDNzQ4RkM2NzVFOUY5OUVFMDc5RDkKKzoxMDgwNzAwMEVENkY5OEM3MDNGNDkwOEI3QTdFNDA4RDg3MDQ2QUI5QzAKKzoxMDgwODAwMDNGNDBBMzEzRURCRDdFQkU4QkUxM0Q1MzgyRkNCQ0U5QjYKKzoxMDgwOTAwMEJERTNGNkI3N0UzRDFFMUY1MUY1QkRBM0FBQkVGN0JFRDgKKzoxMDgwQTAwMEVBOTdFRUQ5NkZDMDE4RjM4OUI1OTdCRUZCRTc5RjQ2RjQKKzoxMDgwQjAwMEY2NDkxMEZGRUNCQkRGNTM0QjRDNUM3RTQ4MjgyRjNBNEYKKzoxMDgwQzAwMDIzRDhBMjcwRjcyQUZCNUI1RjU0REU0Q0Q3MkNDQUE3REIKKzoxMDgwRDAwMDE4MjY1MTlDODE2OTdDOUZGMzlCNEVGQzE1RjhFMEI4RjMKKzoxMDgwRTAwMDQxOUFGREVBQjAyMjFDMzI1OEQyRUM0Qzk4QjdENUM5NUYKKzoxMDgwRjAwMDQ4N0ZBRENGM0Y1ODgyRkNFNzdDMTk0ODMwNThEN0E5NUMKKzoxMDgxMDAwMERCNEYyM0M1MzE2MTBGQjcyNzVBNTIxOEFERDc5RTI2RDIKKzoxMDgxMTAwMDQ1QTBCRUQ0QTBGMjREMEI4QjI5MUM4OUVCMUY2NjI0MTEKKzoxMDgxMjAwMDc5QUI1Rjc3NDNCNDRGQzBCOEUyMTA3RjA0Rjc2RkM0RjgKKzoxMDgxMzAwMDMzNUYwNDhDMzNDNEU5NzA1MkRFOEE0Nzk0OUM1ODJFMTYKKzoxMDgxNDAwMDYzRjMzMkExQkNBQzREOTQ5RDMwQ0VBMUI2NTI1NjA5MUEKKzoxMDgxNTAwMEUzNTY0RTAzM0U0NzE5RTkzQzlGMjI1NkM1RTM3MTE2OEMKKzoxMDgxNjAwMDQ2RjkxNkVEMDkzNjhBNTc3QjM3OEUzRUIwMDJGOTY2MUUKKzoxMDgxNzAwMEIyQzgzMkEwRkRGODg2ODk0RUY0N0JENkRCNjI2MzI5NTMKKzoxMDgxODAwMEU2QTRBRUE3REVFNjc4MURFRjYxNzgyNDAzQkY0NzIyQTAKKzoxMDgxOTAwMDI5NTZDQzQzREY3NkJCRDE4OUZDM0NFNUI5NDlEMTYyOTUKKzoxMDgxQTAwMDEwRkM0Rjc5Q0Y0NjYwN0VGQjEzOTI4MUVBOUZBOENERTkKKzoxMDgxQjAwMEI1REU2OEMzN0I4NDdFODVGMjBDQTQ5MzhBMERFNkRENzAKKzoxMDgxQzAwMDAyNkQxMjYxQkNGQkFCNEVCNjhDNjJGREUzNDNCNEQzQ0YKKzoxMDgxRDAwMDFDODJBNzUxMEVCM0NFMEYxQUVBQjczNEU5RjQ4MzA3MTUKKzoxMDgxRTAwMDY2QTlGMUE0Mjk2QzBBOUVGMzk1NEY1RDMwQTE5RUJCNTAKKzoxMDgxRjAwMEQ0MjY5MzFGM0RCNzQ5QTBGQzk0QzAwMTQ3MkE5RUQzQzMKKzoxMDgyMDAwMEE5RkI0NjkzREZEQ0RCMjRBQTdFNkIwN0Y5QUQwMzI5Q0IKKzoxMDgyMTAwMDJDMTVFRkQ3NTRCNDA4QTQxNzhCREVCRkQ0NjFCRkUxOEYKKzoxMDgyMjAwMDk5NzIzMjhFMzM3QzUyNzc3MkIwQkZFQzg5QkI3RTE4NjQKKzoxMDgyMzAwMDgxN0NENDVCNjY1MEZEREM4Q0M2OTE2NUM1OUEwNkZCREIKKzoxMDgyNDAwMEZGRDgyQkYwRkMwOTkzMjRFMDNENjZGQkMzNjIwNEFFMkIKKzoxMDgyNTAwMEFCQ0JDNEZEMTRDREMwNEZGMTdFNkU3MzRFQzk4MDc0OUMKKzoxMDgyNjAwMDY4RkExQUQ2MTk2NEI3MzRDNEE3NDdFMkJDQkRGOEFCQTQKKzoxMDgyNzAwMDkwN0ZGRDc0NEIzNkM1NDdCNjM3RTU1MjNFODg3RTlDRUQKKzoxMDgyODAwMDdCRDdCMzBFQjQ0RjFBRDY1QkU5RDlBNzNFRDU5NUVBOTIKKzoxMDgyOTAwMDgwRkUxRkI3RTYzNDgyOTA2MjFGMUY1ODk1ODRGNzgzRDMKKzoxMDgyQTAwMDU2QjQ1ODU4NDQxODNDM0VERDNBOTVFNjVCODFGNzk4NDEKKzoxMDgyQjAwMDcxREU5NjYyMzNGMkZENTk2RDM5NjY4NERCQkRFQjk1NTQKKzoxMDgyQzAwMEU3ODJFNzY5MkU3NkJGODI3QzJGQUFFNTM5QzIxMzFCQUQKKzoxMDgyRDAwMEYzN0IxMDlFQkZCRTQ2NDk0NUZERTI3NDA2MEI5QjI3MEIKKzoxMDgyRTAwMEY5RUUyQ0FFNjdCQzc1OEQ4QkVFOTM3QzlDMTJCRURERDcKKzoxMDgyRjAwMEIxNTk1Q0RGOUY4REM0MzIxOUYzRDZEODNCMkIwMUNFMjgKKzoxMDgzMDAwMDE1NDA0Rjc1RjBFQTU0NTM3NjM0RTJBRDg5QUQyNjI2MTgKKzoxMDgzMTAwMEY1OUJCMjUyMEZEQTczRTc1MDZGMDc3RURFNzhENzc1QTAKKzoxMDgzMjAwMDlCMkJBMTVEQzNEREEzREU0NUY2N0NBNTk5RUJDREVDQ0YKKzoxMDgzMzAwMDAzOTFFODAyRjRDMjBBQTRDRkZGNUE2MDk1RUE4M0Y4RDkKKzoxMDgzNDAwMDJGRUE4RjRBNDg3RTFBOTcxQkE2MjZEMTZGMDY3RTZFQUIKKzoxMDgzNTAwMERBRkZDOURGRDFERTQxQkM1NTgyRjA5ODdFQTZBODc2NEYKKzoxMDgzNjAwMDgxOUFBRjkxMzQ4NUI0NzFGQTY5OTg3RDlEQ0ZDRjMwRjEKKzoxMDgzNzAwMEVFQjJEQzhBRTdBOUQ3RDNGQkUwNDk5Rjc1MDQ4RDhGNjUKKzoxMDgzODAwMDdBNkUzRTUzMjI4MkQ2MDEyQ0MxNEZGRTcyMzc5RkI3QzAKKzoxMDgzOTAwMEE3OUQ1QTZGMDQwNkYzNkQ5MEZFQUVBRkQ3RjYzMTdBMDMKKzoxMDgzQTAwMEIzOEU1RTlERENBRTAzRjgwRTE4QUYxQkUzMEJFRDk3QUEKKzoxMDgzQjAwMEUxNjQ3NENFNjM0NUU1RTAyNzI4NjdEQjQ1Q0FBQjFFNjAKKzoxMDgzQzAwMEQ3Q0VFM0ZGRTc4NzMxRjIxM0Y1Mzc5RUM2N0ZGMUM3QkIKKzoxMDgzRDAwMDM4NTg4NTIzQzBCNTMxQkU4NENFQjNCRjdFNjZERjExNjkKKzoxMDgzRTAwMDI1NkQ0MkFGN0QzODI2Mjk3NDVENUFCQjhDOUU3REREOUMKKzoxMDgzRjAwMEM2MjJCOTNFRDg4MUY2OTlDNTA3N0M2RjAyM0U4RjI4MDgKKzoxMDg0MDAwMDI4QkYzM0I3REQyRTBEQjQ2RjNEM0ZDMzFGMTlENkJCNTgKKzoxMDg0MTAwMDQyM0QzMjE5NzAwREY5QzNDNzlCMDU1NTBGNjE0OTIzQzEKKzoxMDg0MjAwMEE3RDBENTQ1OTIzRkQ4NUYwOUUyN0ZDMDU3NzhERTlFM0UKKzoxMDg0MzAwMDRGMjBGODM0Qjc5RURBN0UyRkY5NjFFQzBFREU4QTlGNkEKKzoxMDg0NDAwMEQ3MDRBNkM5NDE5RTA3QTRERDEzNjQxODlBMUFEQzFCNDEKKzoxMDg0NTAwMDlGRDJFMEY4RTlFRTBEQ0YzRTA1QUZDRTNDQjNFNjBCODAKKzoxMDg0NjAwMDdDNUExMjk2NDUyMzNDRUY4OTVGNzA2RDMyQjQ5QjYwNTUKKzoxMDg0NzAwMEY2MjUyMTNGNURFOUIzRjRDMTNCQUI4NjJGNjk3ODNGMTgKKzoxMDg0ODAwMDJGQjRERTkyMTRCNDdFRjhEN0JDRUZBOUNEQ0I1MDRFRkEKKzoxMDg0OTAwMEVEQjMzQTMwMzUxQ0YxQ0IxMzAyOUY0MDdBMzFEMDUzMDMKKzoxMDg0QTAwMEQ3NURGRjQxRjdGMzIzQTVCMzRCMjhCRkJERDY0MkY3RjUKKzoxMDg0QjAwMEJBRjRGMDdENzI5NjQxQ0JBN0E0RkIxQTFBM0Q0NUI0REQKKzoxMDg0QzAwMDhDNjZFODVGM0NBOURBNEQyNzM3ODE5RDBBRTVDNjVBREMKKzoxMDg0RDAwMEIzOENERjM1RTg3MjE0MkI0OTYxQzYzM0Q3OUE0RkUwNkQKKzoxMDg0RTAwMEI5QjI2MDNCMzFCRDc3OUZEQUY4NUQxRUVFODc2Qzg0RDAKKzoxMDg0RjAwMEYxODUzMEZFQkU4QjhERjdBRDRCNTlFOTA0RkNCMjE2MDkKKzoxMDg1MDAwMEJCNTZFMUYzRDRBNkU1QjRERjlBQkRCNTVENkY0MjlCREYKKzoxMDg1MTAwMDg2QzFFRTlCOUQwOUI4RUUxMTUzMDQ3NDQ0MUE2NUJBRTYKKzoxMDg1MjAwMEVGRTdGNUZFOENFNDQ5Q0IzNDc4MDdGNjdDNEI4NzMxRDYKKzoxMDg1MzAwMDAyRjUwRjhGRDc0MEYxREI5NjhFRjhDODkxMjhBNzZDMTMKKzoxMDg1NDAwMDg2QjA3MUQ2Mjc5QzFDNUVCREYyQzQxNTFEQUMwRjM1REMKKzoxMDg1NTAwMEU3NzM3RDQ4RDg1Mzc2N0YzQUMwQ0I3QjlDRTcyOTZBODYKKzoxMDg1NjAwMEZBODdBNEUyQ0QzODhCNDRGQzU5RjJGMjNDQjc1RTdEMjkKKzoxMDg1NzAwMDg4RUJENUU3NTFBRjQ2N0Q2OTcyQTUxNDJDOUYxQUEyRUUKKzoxMDg1ODAwMEY5NzczMDJBRjMxRDFFQkM4Nzk5Njc2MzI0M0Y4NkUzODEKKzoxMDg1OTAwMDY1MDVGNDVCRDg5ODZGNTYxQTdFMjdDM0MxMzAzRjM3MDQKKzoxMDg1QTAwMDE2RjQxRjE5MzAzQkIxOERFQjNCOTEzNjlCNDM0MTNDOTgKKzoxMDg1QjAwMDU2Mzg1RDU5RTEzRjg0Njc2NEE2QzI3MDFFQTM0RUJGNjIKKzoxMDg1QzAwMDMwRUJGNDA3NTE1NzdFRDQwOUZBQzQzOEQ2QTM0RkM4MEMKKzoxMDg1RDAwMENDMTE4RDcwQjZERjM3NzAxRTg3RTZDRjA1QkQ4OUVFRjIKKzoxMDg1RTAwMDk5NzkxOEMwMUZGMUQ0RUFBMUYzODkwNjQzODJFODU5QUEKKzoxMDg1RjAwMDUxRTRGOEMxQkQ3QTNGREU2N0UzRkUxNTg5RTI0NTgyQUEKKzoxMDg2MDAwMEQyNDg3RUZCQUREOURDQkY5MUNDNzhEQzZCODhDMkVENjMKKzoxMDg2MTAwMEY5MDlEMzNDNTQwNkZCODFFMjUwRUM1NzJDMTJGOUYyRDUKKzoxMDg2MjAwMDZFOTdGQjM5QzQ4RjM0NjAwMzY4RkZDNThFNjcwMjkxNzMKKzoxMDg2MzAwMEZCNzdENENCNTlDREE1QzU5NTdFN0M5MEZCRkZCQzg2M0UKKzoxMDg2NDAwMDQ4QzdGNjMwNzhGRkNFMUMyRTk3MjMwRkMxREU1MEJGRUYKKzoxMDg2NTAwMEJEREU0QUY3NUIwQUM0Njc5QTA4OUYyNjE5QzhBRkVEQ0EKKzoxMDg2NjAwMDY1NDcyNDhBRTdBQjdDMzZBNkQ4RjVBNjkzRTJCMkFFN0UKKzoxMDg2NzAwMDM0ODQ3RjkyMTEyQzJBNTA3NkNEQUExRjM3RTU4RUY0RDAKKzoxMDg2ODAwMDQ4MTRGNTFGMjZGRjlDRTBFMTAxRDg2NUMwQkY2RDM1OTkKKzoxMDg2OTAwMEYxQjE5OUYwRkVGMTlBMEQwNDU3Mzk4MUZCQzlCNDdCMTEKKzoxMDg2QTAwMEU3NzExMkJGREZERkVDM0FFQkMxRkJCRDFENzNGOEZERDQKKzoxMDg2QjAwMDlGQzg2MkUzRUM3NDI4MEZBRjBEMDg0ODc3RjdEODk1OTAKKzoxMDg2QzAwMDQ1QTg5NzM0QzkzRkEzRjM0OENCOTIwREU4MkYxQjZBMDYKKzoxMDg2RDAwMDY0QUY1QjI2MzJGNjZDMENBRjQ3NDE4OUY1OEZEODA3NDMKKzoxMDg2RTAwMDZGMEJDRTI3RDlBMUVFRkIxMTIxQkNCRUIyNzYwRUQ3RkYKKzoxMDg2RjAwMDZCM0FGNzAxMjAwN0ExN0RDQzU0RkJGQkE5NEFCMkI3MjYKKzoxMDg3MDAwMDdCQ0EwMDM3RThGRjgwODdEQkNGRERDRUE3MkEzRDIzNzkKKzoxMDg3MTAwMEM5MkVFMkY1OUVERkYyRjYxODJGODVGQUEyMzdENjU0NUQKKzoxMDg3MjAwMDdBQTBGREUzNjlFMUU3Q0QyQ0UyRjA3REZDOERFRUM3OTgKKzoxMDg3MzAwMDMwOEVGNUQ3M0ExRUM3RUFGRjlDRkRDQzAwQkM2NThCOTYKKzoxMDg3NDAwMDlEQTVCMjJCODFDRkFEMzIyRjBBRjcxRDk5NzU0NTlDOUYKKzoxMDg3NTAwMDhGNzREQTNBMDg1RTBDRTQ3OUY0NTU3NDhGNUVBRkFGMkIKKzoxMDg3NjAwMDVBOTE4RUNFNDlEQkVCQTZDQTlDOEY0QzlFNDI1N0ZCOUEKKzoxMDg3NzAwMDM5RUVFOUM2QkRCOERFRUE0ODQyRkRCMzdFNTU3NzAzNUYKKzoxMDg3ODAwMEYyOEZGQTAzQUIzRUM0N0JFOUU1NjU2NkQyNUJDQjhEMjUKKzoxMDg3OTAwMEQ1QkY0NTNCQzg3ODk4RTdCRkUwMzcyNjEwMEY4NjAwNjUKKzoxMDg3QTAwMDNGQzJGQkE2QjNBQUY4RjkyRDk1QjhCRjU2RDhGMzkxRUUKKzoxMDg3QjAwMDJCMEZGREIxQzk0NkMyNEI0RDhGMUQ2NzUxM0NFODk3NDkKKzoxMDg3QzAwMEREQTJFNkI3MzM3MTU4MURERUY3MzIwRTE1QzlFRjFCNzcKKzoxMDg3RDAwMDU1MEI3QTJERUUyRjlGRTdFQjJBRjAxRkYyMjE0RENGOUMKKzoxMDg3RTAwMEI1OEQzNzg2RTRGNTlBNzU3OUJENDY1RDFFRjBEOEMyMjEKKzoxMDg3RjAwMDUwM0U2NDlGM0M2OTQwN0RFQTU3NjAwN0UzM0FGNzAzQzcKKzoxMDg4MDAwMDFGQzJBNzFGRUM2MTdDMUUwNDdCMUQ5RjJGODNCRDhFQTIKKzoxMDg4MTAwMDdFRjA1N0Q3NjdEMkYzRjVGNTBFN0FGRkU2RkE2OUY0RTIKKzoxMDg4MjAwMDlDOTExQTMwMjEzRTkzM0Y5QUZDMzZDQzJGOTA1RjRGOUIKKzoxMDg4MzAwMEMzQjM2RDIzNzNBMUVFRDkxQzVFQkY2OEY2QzhGRkYwMDkKKzoxMDg4NDAwMDVDMERGNUYxNkE3QkNGMzc4NDg3M0Q2NTM2NzY0NUVFNjIKKzoxMDg4NTAwMDc4RjI4MzUzRjlENUMyQ0MxNUU0Mjc1QUEwRTQxNzAyNjUKKzoxMDg4NjAwMDlFMjQxODVDMTVGODlEMDc3NkE3ODVFMjE2RkFGREJDRDQKKzoxMDg4NzAwMDU3QThFNTkxODRCN0UzMTk3RUMyMjBENDhGNTM1MjM4QUMKKzoxMDg4ODAwMEI5N0YzRkNFMjMwMjVGQzdEQUI3RDZFQzQwRkExODU0NUYKKzoxMDg4OTAwMDZDNzQyMTFFQTdBNjg3QzYwRjlFMkZFNDc0MjlDQ0U2MTAKKzoxMDg4QTAwMENGRDQzN0REQzMwN0JBQUZBRkQxNDc3RkY1RjVGQjAwQjMKKzoxMDg4QjAwMDA1MDZGNTVGRUZCNUIzNkJCMUJFM0UyNjNDNUQ5NUE4RUUKKzoxMDg4QzAwMDc0RDVFRkY4MzY2RTRGQjJEOTQwNkY0M0IxQUNCNzBGRTUKKzoxMDg4RDAwMDAzOTQ1RjcyQUUyNkNGNEZFNEY2QkRFOUFEM0IwNUU5RTgKKzoxMDg4RTAwMEFEMkJDNjU3ODc3NjYyRDc4MTU1OUJGMTNCMjEyMkQyQUIKKzoxMDg4RjAwMDFCOTIwNUQyMUJDNjNGMzQ3QUFCRTFFN0IxMTRFOTBERjgKKzoxMDg5MDAwMDdFOUQ1NUZCOUUyQjBGRTkzMTg5RDM5N0IwNjdGRjFBRTcKKzoxMDg5MTAwMENBQzdCODhCRTdEMTY4RjQxNkEzRTZDQjQ3NDkxRDY0RjQKKzoxMDg5MjAwMDJGRDI4NzM5QjAxRkQwREUxNjAxRUZGMTdDRjIxMTI1NkUKKzoxMDg5MzAwMDdGODg0NTBFNzczOEJBQkI0QzdBREJGQzNERTlFREQ3MzIKKzoxMDg5NDAwMEQ3MDQyODdGQTIzMzRENDk0MjdEQzY2QkUyN0VBQkNCNzQKKzoxMDg5NTAwMEE1QzNBQ0Q5NjZGRUZEOEMyQjdDQzkzOENFMTY3NTlDQTAKKzoxMDg5NjAwMDU5QzM0RTkwRkZBRkM4RUExMDUxOUUzOTY1MEVENzgyQTkKKzoxMDg5NzAwMDQ5RDlGNEJEQTE4RjBBNzlCRjZGRTYyQjFENDQ1RkQ3OUIKKzoxMDg5ODAwMDdENEE3RURFMDQwM0E3REZGN0RFRDg0MTcyMjFBNUUxMzAKKzoxMDg5OTAwMDY4RjEyQ0M0OTc3NTIyRTlEQkZBN0RDNUNENTNFMzY2RjcKKzoxMDg5QTAwMDAyOUYxNzM0QUZFNEUwMzhFMjIxOTUyRUU1NzVDNzM4MTEKKzoxMDg5QjAwMDlGOEY2MTUyMDZBQzI3QzkyMzk1MzgzMTJFNzRCNTgxM0IKKzoxMDg5QzAwMEJFMjczMkE4Rjg2ODBDQ0E2NzZEM0MzOEI4MjRDQzM3OEIKKzoxMDg5RDAwMDQxRDVENzNBQjEyRjNEQzI0Rjg3Njk3MDA4M0QxRjJFNTAKKzoxMDg5RTAwMDFDQzAyRjdCMzFGRTUxQThEMjMxMUUzREY5NzFENTdCQzEKKzoxMDg5RjAwMDkyOTdFQkI3RURENzhGNzg0NTc4QkZBNDRGOTVBRkY1MzkKKzoxMDhBMDAwMDI2OUVGRjAxQUQyNUZDMkVDMENCMkVGNzk5NDJGMkZCMkUKKzoxMDhBMTAwMEVBRjRCRkZEOTJERjhERkI1ODEzNEQ3RUU1MjQyM0Q3OEEKKzoxMDhBMjAwMEY3OTI2NDlFQjczMjk0NzkwOENFNUFGQzRERDMxNzY1RkQKKzoxMDhBMzAwMDg1RTcxN0RENTBFQ0ZFMEJDMjY5MUI5MzBGQTAzQ0IzMUEKKzoxMDhBNDAwMDM5RDgyMjhBQUY4MTNDNDNCQ0Q4RUQ1MkNFRDJCQ0RGQUMKKzoxMDhBNTAwMDUxMEZDQzJDNTZGRTdCMjA3QzJBQkU0RUY5MDZDN0VGNjgKKzoxMDhBNjAwMEFGM0VBN0Y4QkYwRTdEOEJGNDVGQzZGREE1NEJDQkFBMkEKKzoxMDhBNzAwMDI5Mzc2QjA4RDg0OUI4REU5OTZBN0U0NkZEMzA1RUFGNkIKKzoxMDhBODAwMEY5NTdCRDA5NUFGQzU0OTk4N0Y5OTNEMTJBQkNDNjU5QTQKKzoxMDhBOTAwMDVDQUMwMkZBNzdBMTFDQzZGQjdCODcwMzdFQkMxNzZDMUIKKzoxMDhBQTAwMEMxN0I2NDEyRkE1MTE5RjU4RkE5MTE3QzMyRjYxNzNGNzgKKzoxMDhBQjAwMDdCMDVFMzQ1QTYzQ0ZBOUMwODYzRDNCODNEQTBEREJGMjcKKzoxMDhBQzAwMDkxRjIyRkNGREY5ODMyNUJGNTM3NEU2NDkzMTAzRUE5QjkKKzoxMDhBRDAwMDA2RjlBMUU5RjAzRUZCRDE4MjYzNzgzQzkzMUY1QjExNUMKKzoxMDhBRTAwMDg3RTI3MkVBQjY4NjUyRkNERUQ2QUE5RDFGNkY0MzdGRUMKKzoxMDhBRjAwMEU4RjRERjVBMTg5RTA3RTg4RjdFNjNEODdDQUU3Rjk4MzMKKzoxMDhCMDAwMDFDMjFCQTJBMjlGQUNGNEE4RjExRjk1MTc4M0NFRDJBNTMKKzoxMDhCMTAwMDUyRjU0RkM0RDNGODEwM0NCRDdBNzY3ODNDMjVGREU3N0EKKzoxMDhCMjAwMDdCRTBFOUNDRDlBMTc4NUFBNEMzRDM1OUIzMTNCRTE3QkIKKzoxMDhCMzAwMDlFQ0VDNzc1RkYzN0M2QTk2MDlDQjMwQjk1RTJEOTAzREIKKzoxMDhCNDAwMEUwNjVGNjQyNjVFMTQwRjU0MUYxMDFCMkZCNDZCMTY5RUQKKzoxMDhCNTAwMEQ2RTBFRjFFNkFDRjU2OTQ5NzAzRTQyN0M0NkUzQzQ5RDMKKzoxMDhCNjAwMEY5NzFGNTM1RTcyODRGQjlDQjc2RjI2REI0ODNGRUFCREEKKzoxMDhCNzAwMEM2MjIwN0ZCQjM0MDdGMEZEMUQ3NUI0MEFFNzhDMDlFQzMKKzoxMDhCODAwMEZDQTA4OEU3NDExRjVBNjdGMUNGNDBCREI2OTZERjQ3OEEKKzoxMDhCOTAwMDI4QUZERDI2NjBCRUY3OTBBQTZBQzEwREZDMkQ1MTAxRjkKKzoxMDhCQTAwMEQzMTFGQUM3Mjg4NjVFRkYwOUZDQkJEMjc0ODRGNEQ5QkUKKzoxMDhCQjAwMDc2OTBDNzFFNjI1RkZDNUU5QTI2RkZDNzU5QUFERjQwMDcKKzoxMDhCQzAwMDNCQjVGRUVGNDZDNzA2M0M2NzI2MUQ0MDdFNTQwOEY0QzEKKzoxMDhCRDAwMDg0RjFDRDZCQkE0MUJFMDU4REY3QzZCRTY5RTQ1NzlCRTMKKzoxMDhCRTAwMEYxMzVDOEJGMjAzRjRFMEU4QzE4NUNDRUIzMjY4N0Y0RkIKKzoxMDhCRjAwMDJCOTBEMjQyRUE2NzI1OEQwOUE5RDdFOEJFMzM0NjhENkUKKzoxMDhDMDAwMEFCNENERTkxOEZGODIzNTZGMDNDODU0MjM5MkJBNDdEODYKKzoxMDhDMTAwMDdCNTkyRTdEMEZFMENBRTlGQ0ZFREQ5Q0NDRTkyMUUzMDcKKzoxMDhDMjAwMEVCRjU4MkFCRTEzRkE0Nzc1MUE3MDdFOEY1MDRCRDVFMDEKKzoxMDhDMzAwMEYwRTNEOUFBNUVBMERFNTdEOTY4MENFNDEyN0Y2MjNDNEIKKzoxMDhDNDAwMEFGNkVGODg1NUYxMzFEQjRDQjFDQ0ZCRDY1NjcyOTFGQzAKKzoxMDhDNTAwMEEzMUVFQzdGRjQzNzBEMERDQTJGNDVCQTk4NjAwRTkwMTUKKzoxMDhDNjAwMDdGNkVDQjYyMkI5REM3OTY3RDRGRDE3NzIzMzRGRjE3NDQKKzoxMDhDNzAwMEQwMEREMUQxODQ1Qzg5RjI1Q0M3REIxRkE0RkU2QzE1REEKKzoxMDhDODAwMDk3QjM3QUJBMTQ2QTVGMjRGRDZGRUI3Q0Q4MUJEOEVCREMKKzoxMDhDOTAwMEI5RjNEMkI4QkNERDFGMjAzRjA0QkJEM0NDNTA2RTdBRjEKKzoxMDhDQTAwMDI1MDNFNThERkQ1OEYwNDcwODIzOTA3RTE1OTI0RjJDNDMKKzoxMDhDQjAwMDg5NDk1RUNBOTc3QzhGN0Y0RjkxMzFDN0M2NjQzNEZENjYKKzoxMDhDQzAwMDE1Q0E2QjA0QjRFRjdFNDNDREEzNDVCQzhENzAzMkM3OEIKKzoxMDhDRDAwMDA2Mjg0NzhERTdGNDFEM0I4OTlGOEZDREMxQ0JEMkQ1QTgKKzoxMDhDRTAwMEJDQUNEOURCMzE0OUFDMDVGMzYyODdFMjc4RDAzNkJFNDMKKzoxMDhDRjAwMDg2NDlGNUU0RDdGMDUzRkQzMDI3M0I1MjRGRjNGM0ZFOUUKKzoxMDhEMDAwMDg5OTVDQ0Q1MDQ2NUIxNUE1MUZEQ0Q2RTM1QkVERTREODkKKzoxMDhEMTAwMDcxRUY3NEMxMTE4OUZFOEQxMUEyOEJFMkRFRDE0Q0EyREMKKzoxMDhEMjAwMEI4RjgxMDU2NERDRjI4QzFDRjk5Qzc3N0U0MjM1NzAyMjIKKzoxMDhEMzAwMDAwNTA1RUIwOUJDQ0Y0RkQ4Q0RDQTc2RDhDQkU2RkI0OTQKKzoxMDhENDAwMENBQkM5REYyQjIwMjMyRjkxMUVGMzlDRUVGRTE2REIxM0EKKzoxMDhENTAwMEZGOTBFMjA0NEQ2RkYzRkIwNEY3QTQ3ODNFQzQ3OEU2N0QKKzoxMDhENjAwMDkwNUE4MUUxM0Q1NkIxOEFDNzExQzRENzQ1QzcyQ0E4OTYKKzoxMDhENzAwMDE3NkI1QkU5M0I3MDg5NTUwNkYyNkI1RDY5QUUzRTQwNEYKKzoxMDhEODAwMEU3NzBCNzg1QkUxRkQ3MDVGREQxQ0ZENTZFMzczMEEyQUUKKzoxMDhEOTAwMDU3NjAxRTNERkU1NEY4RTlCQUM2NDU3MThCQUVCRjBGNTEKKzoxMDhEQTAwMDIyNzlDNzc0N0VDRTdBMzdEN0JGRUJFM0NEMUNCRjZDNzgKKzoxMDhEQjAwMDY3RkY4MDdDQkIzMTNFOTJFRUM3MkRCQUI2RkE2REU0RjgKKzoxMDhEQzAwMDIzNUJERTEzMUQxQjU0RkYzM0ZBRkY4N0UzMkY5ODdGQ0QKKzoxMDhERDAwMDYwNzZBNUExREU2OUFFMEFFRkE3MzQzM0Q3QkI5M0QxODUKKzoxMDhERTAwMDVGN0FEN0NBQTQ4MUY0QTg3RUUzMjIzNjgzREYxQzdEOTQKKzoxMDhERjAwMEU5NzE5MTg2NzIxRTA3RDFENkE5RURCM0QxQjY0NjU4NTYKKzoxMDhFMDAwMDI2RTM2RkRGMzMyRTUyRDY0RjVDMjQ1MDJEMjBCRjFGMzgKKzoxMDhFMTAwMDhFRjUxMzEwM0VEQzZGRkQ1REUzMjJDRkNDRTVGMkY2NUMKKzoxMDhFMjAwMDcyRTMyMkRBQkVFN0FBQkYxNzAxNjJBQkY5MUQxNDE3N0QKKzoxMDhFMzAwMEEwNzMzM0Y0QUUyRjA4OEUzQjcwN0RFNUY4OUJDQ0RGM0EKKzoxMDhFNDAwMDYzOUM2MUJFNUE3RUZCOTlBMzlGQTE1RkZGRjBFRTgzRjYKKzoxMDhFNTAwMENGRTA3M0M2ODUyN0NBRDYwMDVFMTQ0RkIzOTNCRkY3MjEKKzoxMDhFNjAwMEREMUZDNTNDQ0M4NzBCOEQxRkNDNzU1ODQyRkNGN0Y4MzUKKzoxMDhFNzAwMDgzRjg0OUVCMTBGOEJERkNFMEZBNjJEREJBNzI4REExMEYKKzoxMDhFODAwMEYxODA3QzVCNjhGQjk5RjFBMUY1Q0U2MUExNjUzM0FCMDQKKzoxMDhFOTAwMDI2M0NENUVGNzc0M0Q0REQ5NDI3RDc3ODFCNzNGMDBDQUQKKzoxMDhFQTAwMEYxQTBGMzEwMkY1RTM2MEYzMzg3REQ5Nzg2NkZDQzkxREMKKzoxMDhFQjAwMDQ2NzRERkZFM0VBNzdCRDc0QkI3QkZCMTk2RUM1ODAzOTUKKzoxMDhFQzAwMEREOUYzRkI3QThFMTlFQjc2NEM0MEYzM0YzRDAzODRFOUYKKzoxMDhFRDAwMDA1RjFFOEFCOUY4RTdGODc2MjNBOTJEQjczMjNCNDVGMjQKKzoxMDhFRTAwMDk2QzdCRjE3RDUyNzlFQTBGQUYzODdENzFDRThDODBGRUYKKzoxMDhFRjAwMDhFRjcwRTc2QUY5RTAzRkM3Q0I4RURBQzgwN0FDOEYwOUUKKzoxMDhGMDAwMDlBOTdBOUZFQkFDNTkzMDdDNEEzOEM5QTQzMURGOTQxNDkKKzoxMDhGMTAwMERGRjVDQjMwQkEwQ0U4QzdDOEE4Nzk5NURFRjdBN0Y3MUMKKzoxMDhGMjAwMDE4NjQwRkNGREYyQjMzQ0I2NDZGQTk3OTZBMTkyQURFNUYKKzoxMDhGMzAwMDY0OTQ3MTdGQUI5NENFRTVDRDE2MTM5NzZGMUVBODE2N0YKKzoxMDhGNDAwMEFGODJGRkI1RTlGM0REMzg1RjNGM0Y4RERGRUI2MEMwRjcKKzoxMDhGNTAwMDg1OTA1RjY5RTNFOUU1OTkyNjA3NkMwQUQ3MjMzM0NBNTAKKzoxMDhGNjAwMDFFRTE3MjQ1Q0IxNzZDRDNFN0M1QjkxRjQ0RjgwODU1MEQKKzoxMDhGNzAwMDhERDQ2RTZCOUVEQTZFM0ZENzRGRDk2QzI2QTE1Qzg2N0UKKzoxMDhGODAwMDdEODZDRDEzN0Q3NDhFMUEyRkVBMjczRjhENjlGNkUzMTcKKzoxMDhGOTAwMDgyRDczRkM0RkNCQ0NCQjYxRkZCMTk3NzQ2NkEyMEVDRDYKKzoxMDhGQTAwMDdEREIzRDg1REM3RUVDOEMwOEE0MjAxRkVFMzQ4NUQ3NkMKKzoxMDhGQjAwMERGMUIxN0NDRkNFOTlDMDFGNDU3Q0NBQjQ1OThGNjZCNTIKKzoxMDhGQzAwMDJGN0NDN0JDREEwRkQ1Nzg5MTE2MkZENUYyNkI5OUQxQ0IKKzoxMDhGRDAwMDM3MTFCRkYzOTk2OUZCRTAwNjhBODNGNjkzNTc3QjhGQkQKKzoxMDhGRTAwMEREMTFDMDdCRUVERThBMDhDNzc2RjZEREZERUIyNzlDM0YKKzoxMDhGRjAwMDlDOUZFRTk4QzNCOEZGNUUxNzVGRDBBRkZCODMzOTNERUYKKzoxMDkwMDAwMDcxODVFMzczRTg1RTU4RjhCODQyQ0YzRTkzQzNGQkUzNDMKKzoxMDkwMTAwMEFFOThBN0RERjc1N0VGMkIzOUI5REVBNzk4MTQxNjJFQjcKKzoxMDkwMjAwMDBGNTRDQjc3RDdCRjA3N0JFOENDOUMyMEJGOUVCQjJFQ0QKKzoxMDkwMzAwMDgzRkM3NkY1MjY4RUI3MUU5OTdGNEY1MEQzMUY2REE4RkYKKzoxMDkwNDAwMDNGOTIxRUQ1NDJGNUQxNTU1QzlGRDRGNDJDNDk4RDZCQ0YKKzoxMDkwNTAwMEU4RTkwOUU4RTNBRjM4OEY2MEUzNzRBQkU5ODkzREY0RjAKKzoxMDkwNjAwMDcxMUREMDA3RDBFNTMwQzZFMzRBMDYzNTZGNzQ5ODk1NzgKKzoxMDkwNzAwMEE3QTA3RjU3M0RBQUFGRkRGNEI1RkQzQkQ5NEY3NTNCODcKKzoxMDkwODAwMDIzQzg3RUFBREFGRTA2RUE1NUVEMzVEQzRGRDg2OUFGNzMKKzoxMDkwOTAwMDdFMDNCRjdGRTA3OTRGMjRCREE5QkZGRTlBMUQ5NTM4OUUKKzoxMDkwQTAwMDJGRDQ4RUMyQjgyMkUyNjNBMkNEMjdDODU3QTAxRDE1QzcKKzoxMDkwQjAwMDMwQjk2MTdERTU2ODQ3RDkzMDZGRDUzREFDMjhBMUFGQTcKKzoxMDkwQzAwMDNERDU3NUY3OUYyOURGMTVFQ0NEOTRBMjdGMDQ3RkQwQTUKKzoxMDkwRDAwMEY5OTcwRUFBNzkxMDA3NDY5RTI1QkY4OTU4QzNFRDNEMjIKKzoxMDkwRTAwMEIxODZDNzQzOEQ2NTNDNkU2MTU0QjgxRkM1MENGMjA4NEMKKzoxMDkwRjAwMDVEODE5QTFGNjU4QjIzRDQ4RkQyOTVDMkZEMjg4OUY5OTMKKzoxMDkxMDAwMEQ1N0VENDAzNEREMzJDOTI0MkYyOTFGQjU1QjRCQ0Y2REMKKzoxMDkxMTAwMDcxMTZERjFCNzgxRkEzM0VDQkM4MzAwRjFEMTQ1NUIyNEMKKzoxMDkxMjAwMDAzMkQ2QTdDODM5NTcxNzlBNUY5NERGNDc5RDMzNjlEMjkKKzoxMDkxMzAwMDlGNDRFRjQ3QzkyRjBBRjU5QjNDMkVDOEY3NEU4Nzc5MEQKKzoxMDkxNDAwMDlFREY1Q0YwMTZBMkVEN0Y2RTVEMTE4NTdFOTMxNzdEMkMKKzoxMDkxNTAwMDBENzM1NEJGQzlBM0I4OUU3RDFGNzJCRjQ5RDczRTZFMjEKKzoxMDkxNjAwMDE3Qjk1MTgxQjkyQTFDRkVGNTg5NTM5MTFGNjREREUxQkQKKzoxMDkxNzAwMEY1MTQyRkQzRkM1MDg5NTUyQTNDRDRCODBGQzIxN0UxRkYKKzoxMDkxODAwMDI5M0EzOTNDNjM3NEYwRjQwRUQzRTI0MjJBM0MxMzM4OTYKKzoxMDkxOTAwMDdDQ0I4QjVDRTQ3NzkyMTA5RTUyMkYzQzM1M0Y5NUY3NDkKKzoxMDkxQTAwMDcwMDc3RDVGREJCMkNFMjI3QjA4OUU5RjkxQkQ2QTQyMzUKKzoxMDkxQjAwMDc4MjJGQ0JGQTcxRkVBOTYyMkQ1MkU1NUUxMzlGMUQxQkUKKzoxMDkxQzAwMEVDODdGMDNCQzE5MzFFMkIzRDg2Q0YyOURCNkU4QkJCMUEKKzoxMDkxRDAwMDAxOUVEMzc2M0U1NDhBNEZGNjNBOEYxM0ZDNzUyRUU3RTQKKzoxMDkxRTAwMDU3OThEOTFENEM4RjM3MTVDQTIxREY4M0Q3RTBBOUUxRTUKKzoxMDkxRjAwMDYxQUZGRjhFOTEzRkI2NUNFMkZFRkM3MjE1MEYzMzEwM0IKKzoxMDkyMDAwMDZFQzFGRTNDNDcyOERDQjZBOEY5OTJDNkZDNkEwRkRBQUMKKzoxMDkyMTAwMEJCQzM3NTcwRDNGMEIwMUVFMTg2RkMyRUM2MkM3QkM4OTQKKzoxMDkyMjAwMDdGNTcyQkEwM0RENDFGMUUwRTZGQkIzQzNDN0M1ODg3NDQKKzoxMDkyMzAwMDg3M0ZEQjlDN0QyRkMyRUI4NUFEQTU2RkUxRjNFN0JFRDkKKzoxMDkyNDAwMERCQTIxMDVFN0I3NzNDMzRBNzFGQjgyNTg3RjA3OTc0Q0EKKzoxMDkyNTAwMDcyMjdGNDg1REI4OTYyRjcwRUU0MEYzMzFDM0UyM0YxOUQKKzoxMDkyNjAwMDU5QzAzN0I0N0JCNzM3NERCNDg2QzY2NzM0RkVFOEI0MEYKKzoxMDkyNzAwMDg2OTMxRjE3RjcyRkFEQTFCQ0MyRkFCMjM1QzQxRkJCMkUKKzoxMDkyODAwMDdBRjg2M0I3MURGMzEwMkY5NTNGRTZDREU1RjdGQUNCREIKKzoxMDkyOTAwMDZCQkU3QTY1MDZDMDM1QUZFNjA0RDE5RjExRTg4RkNFNkMKKzoxMDkyQTAwMEFERjY4NDQxQ0RDNzYwMTEyMDJGMTJDQjk4MUZFM0M3QzQKKzoxMDkyQjAwMDQzOThENTE3MjU1MDdFMDJGMTREMkZFNjM5RTMwNzRBMzIKKzoxMDkyQzAwMEY1N0UwQUU5RDVCRjA5NDQxQzRDMzAyNDAxMUZDN0RDRDgKKzoxMDkyRDAwMEE5MkI0OTBFQkU1OTM0QjkyRjlGNkQyRjMzOTBGRjY3Q0MKKzoxMDkyRTAwMEJCRUExRjJDNUJFMDNBOENFREI0RjhENjZFOTdGMjc2QjEKKzoxMDkyRjAwMEQxRjdGMzZCMUYyRjBBRjIxNzc2QzZCMDFFRkYxQTdFNDYKKzoxMDkzMDAwMDFGM0NBRjY2OUI4MDc5Mjg0MzZBNkYyNUY5OTA1OEE2NjkKKzoxMDkzMTAwMDMwOTQwRkI3Q0VFNjc0NjJDQzk3NjhCRjdERkQ2RERERUIKKzoxMDkzMjAwMDc5NjgyNzc0RTI4REY2MkNDMjgzOEYxMTBGM0E2QjlFRjkKKzoxMDkzMzAwMDI0M0NCODcyMTVGNzhGNzRENjlDOEIwQjhGMDczNTExQjAKKzoxMDkzNDAwMERGQ0RDRkI4M0Q0NDRFN0E2QkY4Nzc0QzNBRURDQUVCOUYKKzoxMDkzNTAwMDE5OTc4MTA3Q0I1NDNDRDBFNDI0Q0ExQkM0Mjc2MzU5MTYKKzoxMDkzNjAwMEUwNTFGNDYzMEYwMTdDODg0ODQzNzlDOUY5QjEwOEYyRjAKKzoxMDkzNzAwMDJBMEFGNjIzRjZFMzdGRDRFOEExMEJENjY2MTk4NEY3MTAKKzoxMDkzODAwMDg0RjVGOTAwRDVCNEVFNzM2NUI5RkVBOTAzQUNFRjkyOEMKKzoxMDkzOTAwMEYzMDBENEI4NjRCRDFBOTc1QzVBQzNGMzU3M0JENzdEMkEKKzoxMDkzQTAwMDU1ODBFQjNENTcwNkY2MDFDMDY1N0I5OTgzRTFGOUNEMDkKKzoxMDkzQjAwMDAyQzUyQTYwMEI5RUE3NEZERUVBQjBCOTA5QkQ3MTQ4MEQKKzoxMDkzQzAwMDJEOUU3RkEyRDg5NThBRUY2NzAwNEUyNUM1NjI1RUFGQkQKKzoxMDkzRDAwMDFBRUYxOUE2N0UwNzVBODdGRjgwRTdBM0U2OTI1RjRFMzEKKzoxMDkzRTAwMDIyQjlBMUY5RDExOUVBOEQ3NkM0NkY2NTM0RDY0RjMwMTAKKzoxMDkzRjAwMDU3Mjc0Qjg0REZFRUYxNTg2RURGNzcyN0U1MkZGNEZBMUQKKzoxMDk0MDAwMDA3NzkzRURDRjdGNjZGNDU5QjI5QkY1MkYzNkY3OUVEODQKKzoxMDk0MTAwMERDQkY1NUMxMDIwNTY4NUY1MzFDMDFGOTc2QUI4NUJFMDAKKzoxMDk0MjAwMEQ3NTAyOUM4NjZGMkFGOTVCODk1QjlBNEY3QjgyODFGRTgKKzoxMDk0MzAwMEQ2QkRDMDJBOTExRjZDRDVBRTY0RTQxN0U1OEQyMkM5NTQKKzoxMDk0NDAwMEVCRkVFQzkyQkU3NDc2OTk3QzQ2QTVCQkVGQzA2N0FFOEUKKzoxMDk0NTAwMDlGN0I2OTdDNjYzMUVFMkY4OENGREMzMEY3N0JGMDk5RkIKKzoxMDk0NjAwMEY3OEI0MkY5MEJFQTlENzUzMDRGOUU0QTRGM0RGQjU2RjQKKzoxMDk0NzAwMEUzRjgxOEJGOEFDODBBRDI0N0Q1RkRFQUU5QTg4RjVFOEIKKzoxMDk0ODAwMEZBN0YxRjVEREQ4MzcwMEQ0MzU3MUJGMUZENjVEMDU1REQKKzoxMDk0OTAwMEVCNDVFOEVBNDEzQ0NGMjBCQTZBRkYxN0E1QUJBNzJGRkUKKzoxMDk0QTAwMDg1QUU5NEI5MkMzNDRGM0E4RTdGRTc3OTVDOUM4MUU3ODYKKzoxMDk0QjAwMDU5RkUxRkNFOTMxRUEzREFEOUZBM0M2OUM2QUFBOTVDNEQKKzoxMDk0QzAwMDA0Njc0M0U3QTM5NkU3NEQ2MjMyQzY5OTJDREI1RURFNjQKKzoxMDk0RDAwMDM0NTZFNkUzMDVGQjNCOTlDRUNGQzk3NDdFNERCRDdFODUKKzoxMDk0RTAwMDE3QzYwRjFBRTJGNzNDRkNENEVGMEU4Rjg1NUY5RjdFMDQKKzoxMDk0RjAwMEY2QkY0OUFGN0Q3QkE2NDBGN0M5RTc4REZFNkEzRkVBMUMKKzoxMDk1MDAwMEEwQzUxQjk3QTlGMzBDRUNGN0ZDNjdGQjM5RjEyN0Q4MzIKKzoxMDk1MTAwMEFGQUFERjU3NjNENERERUFCRDgxQ0JGMzczMzJDN0FEQTkKKzoxMDk1MjAwMEY0N0RGM0Y2NkFFNjQwQjg1RkNDRUZEOTVFQ0JGM0E2RTQKKzoxMDk1MzAwMEI1QkM2NkQ3NEI5NTBGMkY5Q0M0RjNFOUQwRUZBOUY3QzQKKzoxMDk1NDAwMDc3NkFGOUNBRjVCNjY1QTRFNzlGNTRBQ0RDMUZBQkYzQTQKKzoxMDk1NTAwMDc3MkU4QjkzNkZBMTdCOEM3REZEOUQ5MUYzRkUwMUZFOTkKKzoxMDk1NjAwMENFREJFN0M4REM0RkEzRjM3Qjk2Q0U1MkUyRTcwRDkwNEIKKzoxMDk1NzAwMENGRDAxOUUzNjBDOEVGRjI2QzNFMDFFM0I1RUM0MjM2QTAKKzoxMDk1ODAwMEY5NzU4NkQ4MDJGNDdEQURGMjlBMUNEMjAzNDcxNkJCNUEKKzoxMDk1OTAwMEQzNzAxQzYzN0VGN0U3MkY0RUEyN0MwMzA3MEVBNUU3NkUKKzoxMDk1QTAwMENCQTA2N0E2Q0ZBMzNDQjY3RjhFOUZFMDlGRTVFN0ZCRUQKKzoxMDk1QjAwMDY4Q0VFNUREOUZGRjA4RTEzRDc5ODA3QkY0NzJFMEIxODQKKzoxMDk1QzAwMDI4NzhGRjc4OUQ5REJFQUZGNUZDNkM1OUNEM0ZFODRFRTUKKzoxMDk1RDAwMDY5ODFGQTc3RUYzQTczMTBGRDEzQkUzNjAzQzNGQjZENTIKKzoxMDk1RTAwMDk3RUEzRjZBQjg4ODVFNkNENkQ5NDc1QjdBRjQ2MkRGNDcKKzoxMDk1RjAwMDFCNTM4M0Y0RTI4NkY1Q0U3REE3QzM4Q0EzRTlDNUJCREMKKzoxMDk2MDAwMDc0RkVBMzcyMUJENzhCQ0I2REREMjZCNDBGQ0FFM0JGRUMKKzoxMDk2MTAwMDdFMDVGMzRFOEQ1NUFDMDNFNUUyMTBBNTlBRjRFMTQ0QzYKKzoxMDk2MjAwMDg5NTEzRUYxRkY4RkNCQjM3RjY4NUNGRUZFNzlBMTcxNUIKKzoxMDk2MzAwMEY5MDk2QTNFMEFGMjc4RkNGRTRGOTdFNjQ3OURDNkY1QTcKKzoxMDk2NDAwMDg2OEQ0NjZFQUY3ODE1NzgxNzI2OEVBRThGQ0IwRkJGRkUKKzoxMDk2NTAwMEIwODdFMkYyRUQ3QkFENzQ4RjZGQ0JCRTY2M0U1RTBFREYKKzoxMDk2NjAwMDkzMzBDRjNDOTlBOUZBNUExMUY3OTdFQUY1OEZDNzRENzUKKzoxMDk2NzAwMDhBMzU2RDEyRTJCQjgxRUUxM0UyM0Q0MUYyOEJFQ0I1MEYKKzoxMDk2ODAwMDZFNDM3RkQzNzgzQkNGRTdDRTdENjdGMTRFQ0FFN0Q2RjYKKzoxMDk2OTAwMEY0NDNEMDQzNDkyRjJFMEJEMDc3OTlDQTI1MDcyM0JFMTgKKzoxMDk2QTAwMDEzM0ZDRDRGRjFGMTVBODFGMDZCRDkzQzRFNkY0QkYzMjQKKzoxMDk2QjAwMDdEQTQxRjBFMjk5MzA0N0U0RkNDQzNFREY4NTQxRTc3NzIKKzoxMDk2QzAwMDhFNDRGQzgyQTY2MjI2OEZGQjRBNDc0NDA3QzY5REVGNjQKKzoxMDk2RDAwMEMzQTZEM0YxRkUyQUUzREZBQjk4NkVBMEJGNDNEMTJFMjEKKzoxMDk2RTAwMDc0MjcyMTVGNkUxNTk0NjQ3QzgyQ0U0NEY3MUU5RjhEOTMKKzoxMDk2RjAwMDUxMDZFM0RGOTNBQTRGMzFEMERGOTMzQTU0RDA5ODg0RDgKKzoxMDk3MDAwMEVCNkJBQTZCNEQ0MkJERjAxNUQ1MkZERTVBRjAwOUU1ODMKKzoxMDk3MTAwMDNGOThDNjgzM0U5ODQ2Q0ZCMDdGNzdGNEMxRjk4MkZBNkUKKzoxMDk3MjAwMDc3MDQzQjkyRTg3QjA4QUNFNTQzQzJBQjRDMzNFMzdGNjQKKzoxMDk3MzAwMEU3QzdFMTVGOEVGNDc0REE0NkZBQzIwMzgyOEZERjEzNjMKKzoxMDk3NDAwMEIyNUJFOTNFNUVDQjE4NzM3MjI1QUNBN0Q5NkUyNjZENkQKKzoxMDk3NTAwMEMyM0I2NkU2OTEzNDc4REY5QzIwNDU2MzFDQzA5Qjk2MzMKKzoxMDk3NjAwMDJFQTFGRkM4MUJEM0Y4M0FGQTQxOUFEM0QyMTlFNkZCQ0YKKzoxMDk3NzAwMDM3OTU0REExRjg3OUQzMDU2MDMwRDBCMzdFRUNBODc3NEEKKzoxMDk3ODAwMDI3QzNGQjhENDI4MEJFMUJFNDk5NkU2MDk4NEZEODM2OEMKKzoxMDk3OTAwMDY2NjY3MkYwQkQ0QzUxRDJDQjQ5MDdDOTA1NTEzNkQwMkYKKzoxMDk3QTAwMDNEM0Y1MThENjc4QjdERTJEOUExRjFFOTQ5RUFCRTY1NjQKKzoxMDk3QjAwMEQ2QjI4OEVFODFDNjlCMjVEQzZGRjk5ODkyMEZFOTlFQTAKKzoxMDk3QzAwMDVCQkM5OUYyODJDQTREOEM3RkY3NjMwQ0EzNzNEMUMzNDMKKzoxMDk3RDAwMEFGN0U3RDY4NUNDMTY4MEI1RERGNDYwQzRDNTMxRUY2QTYKKzoxMDk3RTAwMDk2OTU4ODFGMEQwODUzQ0FFM0JFNzcyNUYyQTU4NjlFN0QKKzoxMDk3RjAwMEZBNDY1RThFRTBFNUFGRTdENUFENDQzOTI4MzNGRUY3OTMKKzoxMDk4MDAwMDQ5MUEzMjc5REU2NTc5NDIwOUYxRTE3MjUzMjBFQzc3MjkKKzoxMDk4MTAwMDdFMkZCNjFFOTlGOTE0NzUzQ0Y2M0YzOURFQzYzMUU2NDcKKzoxMDk4MjAwMDQ1QkVGMTE3MUZBRkY3NUM0MDdERkUwRUUzNkFFREY0MTUKKzoxMDk4MzAwMEUzRUFGQkZENEZCNUVGNkY5Rjg5RjNCNUJDN0E0Njc5M0MKKzoxMDk4NDAwMDEwQTQyMkFBRjdEOTUwNEYzNkFBRkNCMDNFNzc4QUNGOEYKKzoxMDk4NTAwMDJGMjMzRkYwNzBCQTg4MzE4NENEQjNFRDlGM0U4MkM2OEUKKzoxMDk4NjAwMEU3NDlCREM0NkY2OTdDRkNGNjRDNERBMTFGRjkyM0JFQ0UKKzoxMDk4NzAwMDJGNDlFQUE1OUI5RUZDMEI3NTNDQTg3QTE1RTVDM0Q2M0IKKzoxMDk4ODAwMEY5NDJDRkJBQTVDMUJERTNGRUE2MkNEQjhGNzYxQ0Q4NkEKKzoxMDk4OTAwMDE5NzI5QzIzMENGREE5NzkxQUQ0M0U4REYyNkQyODNGRDQKKzoxMDk4QTAwMDg2OEQ2NUM0NDdCNEY2NDY3NTVFN0RERUM2NkUxNTJGOUYKKzoxMDk4QjAwMDJFMzc2RkUzMzRFRTYxMTJDOTFBQjIwN0JEQkY2REExMzYKKzoxMDk4QzAwMEZDMjU4NjFGQTM0MkZGNUM5NjQ0RjdFMUVFRDVEQUQ5NkEKKzoxMDk4RDAwMDE5RDk3MURBMzk0NEIwREUxRkI0RDM5MkI0ODJDQzQ2QzAKKzoxMDk4RTAwMEUyM0RDMzhEQTMyN0QwREZBNzdDNzRGNzgzM0ZDMUZDODMKKzoxMDk4RjAwMDhEQ0RDRjZDRjgyMzNFMjM0NzRFQjg3RkRBMjRCQzQ3OEEKKzoxMDk5MDAwMDZGNzBBOEI5RDQ2NDNGNjlGOTM0QjY3RkRCRkMzNUVBREYKKzoxMDk5MTAwMEE5RkE3Qzk1QzZGMTJCNUFFOEY4ODJDRjMxMURGRjJFQUIKKzoxMDk5MjAwMEIyQTBBMDdGREY2MkIzNkRBN0VGRjk1ODA1QjIxRkM0RTQKKzoxMDk5MzAwMDg3MTI2OUZENDk5NUExRTdERTJFMjgxRkUwNzdGRjNDREQKKzoxMDk5NDAwMEY3MDlDNDQ3MjMxQ0ExRjkzNzdBN0JBM0E5RTc1QzQzMzUKKzoxMDk5NTAwMEVEOTQwNzg0RjA3MUVGRDdFNjczMzkyM0VBRUU4OUI2MDgKKzoxMDk5NjAwMDlBNjRGQThFNkRFQjQ2MTEyMzk5QUM3NTlEODVGOEQ5RjIKKzoxMDk5NzAwMEVGRTcyRjU5ODlERjE5QkYwMzE5MUVENEI3NUY2M0E2MUMKKzoxMDk5ODAwMEJGNkJENTZFOTdBRTVCODQ2NTU1OUU2OTcxRTYwN0FFNzkKKzoxMDk5OTAwMDE4RTUwQkZFRkI0N0FGQTI5Qzg1Rjk1QUFFMzE5MzNDMEMKKzoxMDk5QTAwMDYwQzY2RUNBNjNEN0RGMEZFRjYzNjdFOUYwRUU2Mjc4RDcKKzoxMDk5QjAwMDc2QzNGQzU4MzVERkMwNDc3MkE1QzdCRTFGNkRFMEY3MDAKKzoxMDk5QzAwMEEwNDcxQkZFMjVFRTQxQkJFNzg3QjdFRkJGRUYzRDY4MjEKKzoxMDk5RDAwMDhBRUIyNUY0QTU1RjJERkY2RjQzNTRFQTYyREM3RkMzNTkKKzoxMDk5RTAwMDJDMzM3RDJGRUU3MkVEREVENjc1MkI0OTVFNzg2RTY1RDkKKzoxMDk5RjAwMDhFMEM0N0RGQkMzMEQ3NEIyMzA5N0ZDNDI2OTFGQzcxMDYKKzoxMDlBMDAwMEJERjhDNUVEREE1RkNDMzNGNUZDOUQxNjZCMTA5RkQ0MjUKKzoxMDlBMTAwMEYyODIxRTUyRUYxNTNGRTQ2QUE0RkMxOUFGOTNERjJCQ0MKKzoxMDlBMjAwMDhFNjg1OTQ5RjY3MjJCRTg2MTk4NTdBNUQ5QzcyN0E3QzAKKzoxMDlBMzAwMEE1NEYxMTI4RUY0N0YxRTA3NzNENEVFNkFBNzk0MTUyNTQKKzoxMDlBNDAwMDY4N0UwQjUzRjNGQkI0Rjk1QUE3QTVEMzdDNUVCNEM3NjkKKzoxMDlBNTAwMDA3QzAwM0EzNTNDRERGRDM4REQ3QzNBRkQxRUUwRUIyNzIKKzoxMDlBNjAwMDk3QzFFRUZFREI3Q0Q4REZGRDM2MDczQUUzQTBGRTY1NEEKKzoxMDlBNzAwMEFBNjc5MzYyMkZFOTFFNjgxN0ZFMEFFRDdFNTBBQUQwRUUKKzoxMDlBODAwMDlGNDhGOURGMEE1NTFDQ0QwMDgwMDAwMDAwMDAwMDAwNEYKKzoxMDlBOTAwMDFGOEIwODAwMDAwMDAwMDAwMDBCQUQzQjBENzA1NEQ1N0IKKzoxMDlBQTAwMEI5REZGREQ5QkIxQkIyOUJEQzBEOUJCOEMxMTA2RjAyQTcKKzoxMDlBQjAwMEQxMjAzRjVFMzA0OTEzQzU3MkYzMDMyNDRBRURDRDBGMjgKKzoxMDlBQzAwMDA5QkUwMURFQTI2ODcxRUNENEFEQjVCRUQwM0FDREM1RjkKKzoxMDlBRDAwMDZDNDg4ODA4NEJDNDA2NUYxRDhENTRGQkRBQjFENUQ0QTEKKzoxMDlBRTAwMEQ3RDc4NzhFRUQ1QjkwRTdGODRGREFEQUFBMzMzRTFCQzMKKzoxMDlBRjAwMEQxRjJGQTNBOUQzN0U5NkJCMUU5OEMyREVGRkJCRTczRDkKKzoxMDlCMDAwMDJGRDk1RDM2ODA5NDM4RTNFMURDNzNDRTc3Q0VGOUZFNTEKKzoxMDlCMTAwMDdGQ0VCNjU1RDUzQUY5MTE4MEUzNTAwODBBQjYxRjg1QjUKKzoxMDlCMjAwMENDMzU2MTAwNzhERjY3MDZDQzI1MDBBN0U4NkYxNTQwQ0IKKzoxMDlCMzAwMDdGRDIwNzI5RUM4MzZBMDI2MEJCMEUyNjM3NzVFMDdDNzIKKzoxMDlCNDAwMDU4RTg4MzI3QjE1MTIyQ0JGOUZCRDY5MEFEQ0E0MTgwQUEKKzoxMDlCNTAwMDEyQkIxMkEwNzg2NjdEMUJFQzU3RUZDMkYxQUI3QzYzQTEKKzoxMDlCNjAwMDJENTAwMzkwRDgwQUJBODM0QkI2ODQ5MjJBRjU1NzAzMzYKKzoxMDlCNzAwMDM4ODAxQkFGMzUxQTAzMTUwOEI3RjUwNURBMDg2MDU1QUMKKzoxMDlCODAwMDc4MjQwMjMyQzBCMkU3MEY5NEM1Njg3RkM3RkE3OTc1QUUKKzoxMDlCOTAwMDFERDA1NEZFNUJFQzlGQjA5QjcxN0RGRjFCOEE3OTFGMkIKKzoxMDlCQTAwMDdGRDEwRkM3NzBCRDFBNTU2MDE4MjE0OENGQUM4QzRFQkQKKzoxMDlCQjAwMEUyNzlENEUwODlGN0EwMDBFMEJBMjk4MDk2ODA1ODdCNEEKKzoxMDlCQzAwMDhBRTA0RjA3QTBBNTdBQTZERjg4OTBEM0ZCQ0Q4MUQyOEIKKzoxMDlCRDAwMDhDRjlBQkY1OEE4QzcxMDUyQzMzMjVFMUI5QTM4QjMyNTYKKzoxMDlCRTAwMEU2ODU2QTZCNzQzQTZGOUJCMTNDRTNGQjBERDUwRDE5QUEKKzoxMDlCRjAwMEVCQTE0NTNEM0U4OUZEOTVGOERGQTk0QTgyMjdGQTNDNTUKKzoxMDlDMDAwMDVFMDExMDVDODJGREI0RjUyQUE0RjU3MUZDMUEzQjE0QzgKKzoxMDlDMTAwMDM5QjExODNCOUY4MUNGOUM1Mjg4MkVFNjA2MjBCQTgwMkUKKzoxMDlDMjAwMDZDM0U4OTc4Mjk3OTNFMzA5OThGRjgwM0NCMzIyMjI1MTIKKzoxMDlDMzAwMDg4MEYxQTMyMDBCRTZDRTNFMjVBRUMwNzRGQzg4NEZGNkIKKzoxMDlDNDAwMDQ3RjI3MUVGNTJDNEIzM0UyOTEzOUQ0MDFGOTdGODNCNzIKKzoxMDlDNTAwMEMwRjgzMDIyM0JBQTVBM0MwRkEyQTAyNzcwREVBNUUwMzQKKzoxMDlDNjAwMDQ4M0FGNjQzNTE0ODUyN0YzRTI0NzkzRUZFMjUxRjZDMDgKKzoxMDlDNzAwMDQwQjYwODg4RjUwNTFENjBFRUM1RjFGQzI1OEUyNDYxMEYKKzoxMDlDODAwMEJGQTgxNTRDMDVFMTA1Q0QwOTg5Q0VBOUUzN0EwNUY5RjAKKzoxMDlDOTAwMEEwMTQ1MkRDMkY2Qjg1ODk3RTg2NkZERDQ3RUI0QjdCRjIKKzoxMDlDQTAwMDQxMUYyODI1QjAwRThGOEY2RDA0ODdDRUYzMzg5OEUwQzIKKzoxMDlDQjAwMDU3MDgxRjM2QzAwMjAwMERFMkRDNUUwNjQ2MTEyMjExNzUKKzoxMDlDQzAwMEJFMERFNjBBRUE1N0MxMjQyMTE1QTkzQTI2NTFGRjEyMTIKKzoxMDlDRDAwMDE4RDdBOTBGOTAwMjdCMjkzNjkzNkFGODQ0ODBBNzAwMTEKKzoxMDlDRTAwMEYxQTlDN0FGRDkyREVENzRDMkEzMEI0RTFFQkZEMURBQjcKKzoxMDlDRjAwMDY2MjM3Rjc3REY1NDVCMTgwQkNFQkU0RUVEN0Q3MUJDQzMKKzoxMDlEMDAwMEU1RUE5OUZFQjc2RDgzRTU0MkVENURDQkYyQTJGNkJFQzIKKzoxMDlEMTAwMEM0RTM0NzZERkIyQjM2RDI2MzE5QzIwRkFDRjhGNEY4REQKKzoxMDlEMjAwMDVGQTYwOTdDMjYyNDMwMUQ5QzlGNzhFRUZBRTgxNjFDNUQKKzoxMDlEMzAwMDc3OUUwQjk4NTU0MEY4NDU3QzEyNUZENDA3QTY1RTY5NjQKKzoxMDlENDAwMDEwRUI4OTFFMTFBNDA3RTFCQjY4MDk0ODg0ODNGOTQ0MUMKKzoxMDlENTAwMDA3RkNBRTIxMUQ3NjMxMUQ5MzBDQjczQzBFRTYwRTc3NDUKKzoxMDlENjAwMDVGRUE5NzIyMUQ4ODJFNjNBMENGMjFCQzJBRjE0RjQ3QkUKKzoxMDlENzAwMDA3RkU0MzM4OTcxQzBBM0MzRTJDMTE3NjkxMkUwQjJFODEKKzoxMDlEODAwMDBBNURCRTc1MjE3NEM5QTYwN0RDM0IxN0EwRTE2Q0ZCMTgKKzoxMDlEOTAwMDNBNENDNzZGNDlBOTNDNjkwMTkxMDVFOTgzRjc5MTkwNTUKKzoxMDlEQTAwMDNFODRDRjI4MDg3QTY4MDAyNkUxMjkxN0ZFQTk5RjU3MkMKKzoxMDlEQjAwMDAzQzY3RERDMTdGMzg5OUU0RUMzMENGRjE3MjJGRjhCNzEKKzoxMDlEQzAwMEJFOTBBRjMwRDI0MUY0MDU5RDIyMjQyRkQ4OEZEQUUzMjQKKzoxMDlERDAwMEJDQkU2ODJCRDgwRjk0MTIzRDJDNDY5RTBGNjJEQ0ZBNTUKKzoxMDlERTAwMDYxNEFBMkI2NTIzMjk5NUUwQjE0NUJBNjdFQkU5NDEyRjMKKzoxMDlERjAwMDQ4NDY0QTkyM0UyODAwOURFOTMzMEZFMkRDNDY3QzUzRjgKKzoxMDlFMDAwMDg3NEY5MUJFMEVDQTYzNEUwNUI1Q0YzNkQyM0VGREVCRUQKKzoxMDlFMTAwMDUwQzM5MENBMEY4RDM0MzI1RkRFMEU3QTE1RjI1REI5RjEKKzoxMDlFMjAwMDY2QjFGRTJFQkY1MjM1MUQyMzFENUZGNzMxN0MzMEFDNkQKKzoxMDlFMzAwMDAzNjQ2RkNBRTUxMDBDRDdDQ0VDOUJGMDk5RDEyNEQyMDcKKzoxMDlFNDAwMEVCNThFOEM0OTExODdFOUY1M0FBODBERjlDQzFGMzcxNDAKKzoxMDlFNTAwMDlGQjgxRkMxNTQyRTI1NzkxMEYyMTFBREM3QjM4NENGMUUKKzoxMDlFNjAwMEQ0NkY1MTU1RjA2RDcwMUJFMjBGRjFCMTk5MDYxMDRGOTAKKzoxMDlFNzAwMEQyRDBCRkYzRjc0NzlBODVCRUZCQUUxREZCODhGODg1QUQKKzoxMDlFODAwMEY0MTNFM0NGMDI5REY0OTM2RTAyRUI0REQ5NzA3RTQzNDEKKzoxMDlFOTAwMDc2RjFFNDkwREYyMDNFODVFNEE4MTVDMDdEQjZCOEZCREUKKzoxMDlFQTAwMDZDMTlGMjdGMjAxNUE0REQzM0UxODc5NEE3OUYyQjY5RkQKKzoxMDlFQjAwMEJENURDOEZDNkM0QTEwQTgzQkZGNzUxN0NBRkZEMDVCOUMKKzoxMDlFQzAwMDRDQ0M3NjRFQkU2RDdDNjY2NUUxRTQ5MkQ5RTc2OTI0QTAKKzoxMDlFRDAwMDFGNzNEM0Q3MDkzQTY5MTFFNEE3MjA4REJGQzRFM0U3MDQKKzoxMDlFRTAwMDgyRTNFQjNEOUMyMTY3MUUxQzVGRDQ2NjM4QkVERUEzNzcKKzoxMDlFRjAwMDQyREVDODZFMjEzRDZGNDNCQjM1OENGOEZFNDc0QkQ3MjEKKzoxMDlGMDAwMDA0NUY0RUZEMjdEOUYzOUJFMzA1MjZEOTczNDYxMUNFOTYKKzoxMDlGMTAwMEJCMjUyOThEMEQyMzNGREUwQTcxOERGODU0ODI4NTBFRjUKKzoxMDlGMjAwMEQxNkZCMzIzOTlDMzM4QTU3MkQ3RDYwMkY2MTdBMDQ1Q0YKKzoxMDlGMzAwMDI3RkM0OEE5NkI5NTUzOEIzRjA1MUU1RDNDNkQ0RUZEN0MKKzoxMDlGNDAwMDhGQ0YwODExNUU0M0YwQTEzNzVFMzkzM0ZFQzc4RDBCMEEKKzoxMDlGNTAwMDhFRDUxQUE0QjQ4M0Q1NDRERjdDOTdCRUE4ODk5Q0Q3M0MKKzoxMDlGNjAwMEYwOUNCRTRGMEE2MTU4NDdFRUNGRkZDNjFCQUJGMDdDOUEKKzoxMDlGNzAwMDAzQkY1MDRDQTU4MkU2Njk2MDIxQkMzOTIwRUM3ODNFRDUKKzoxMDlGODAwMEM5RTkwMkUyOTdGMUQ0MURDNDZGQkQ4NTNBRERENzlCQzQKKzoxMDlGOTAwMDA3RUUzQzA3NjIxNkREMzMxRkY1MDBDMTk1RjM3NzMzRkEKKzoxMDlGQTAwMDdGRTYxNzY4ODZDMkNDOEYxQTI3RkQxRTAxRTRCQjEyMUMKKzoxMDlGQjAwMDQ2MzVGRjE1NkJBOTE0Qzk1NzcxNTNDMERDOTEwOTVGNzEKKzoxMDlGQzAwMDNBNDVFQjExMjY5NEI4Rjc5MENFREM3RjI5RjUwMzNDOTcKKzoxMDlGRDAwMEQ0NzhDQUREQ0YwQUE0RUQ5N0Q1Rjc0NUQzRkEyMEM2QzkKKzoxMDlGRTAwMDlERjRGOUE2MDZBOTM0QkM5RTk2MTc1N0NFQkM3MzA3RkMKKzoxMDlGRjAwMDgzNUFBNkJDNjRBREYzRThCMUM0MjdGODYzNUUxOThDM0MKKzoxMEEwMDAwMEVEQzBGMzBFMEQxRDZDMjQ3RDMzNUEwQzg2MUY4NzA2QTAKKzoxMEEwMTAwMDM3N0Y0NzAyOUNERjQ0QkE5OEVDNEYwQjhDRjkyNURBNjYKKzoxMEEwMjAwMEM3MThBRUM2QkVBRjJDQzhGQzczQzk2RkVERDQxRDA4RUYKKzoxMEEwMzAwMEU3MEJGNTdFREQ0MDlDQ0NGQkJEQTUzN0UyRjg2RDY1RjYKKzoxMEEwNDAwMDAxRDM0MkZBMjZEQ0Y5NEUwQkZBNTk2MkZCNUY5MTVGQUQKKzoxMEEwNTAwMDdBQUI3QjVFQTYwNUNBRTFCREVEQzJDRjUyQzM1RDNCQzQKKzoxMEEwNjAwMDVGQzNGOUZCRTYyOUEwOTA1RTUzMzY5QTY0OUY2RTU1NTQKKzoxMEEwNzAwMDAxRTYxNjYxN0ZCRjhGRkQzRUY0RUZGODNFRkU5NjRDODEKKzoxMEEwODAwMEJGRUZCNjQ3N0MxOTdENUY5NjlGRjhGNTc2RjQwMzg5OUMKKzoxMEEwOTAwMDY4QUUxRjM4RDAwRUJDMkY5RDY3RUU4QUJGMUYzRTA0RUUKKzoxMEEwQTAwMDIzQUMzRjk3QUExM0IyOUVDM0FFN0FGODk3OUUwOTMyQUIKKzoxMEEwQjAwMEZFN0Y1MjhDNzhBNTc1NjA1Qjc3NjJERjhGNzgyNDdFOTcKKzoxMEEwQzAwMDQ1NDU1RDUwOEI3OEIyRTg5RjA2RjlDOTNGQkE4QkU2RUIKKzoxMEEwRDAwMEZCNEYyMkZGRDI3QzI1RDg3MjI3RDFFMTUyMTc0RjIwQTcKKzoxMEEwRTAwMENFNjVFMTdGNzRFRTZDN0ZEODlGRTUwRjY3OUZEQkEzQTEKKzoxMEEwRjAwMEMzNjMxRTdFRUFBMDhFRjA4M0ZFMzlGQjA3REVCREIyOEQKKzoxMEExMDAwMEVGRjM0MjFGNkEwRUU0QTU5RkY2MDVCODRERjVFOURDQjIKKzoxMEExMTAwMDFFRTk4QjcyN0JCNENGODAxNjc0QUM1RUVBQUJFNkY2QjgKKzoxMEExMjAwMEU1M0U5M0JGQkZEQTU3Q0ZBRDg3OEZEOUY0NERBODU4MUUKKzoxMEExMzAwMDY2N0Y2MURGQkRGMjE4MDk5M0JBNDQ3RkU1MEFFMkRCNkUKKzoxMEExNDAwMEI3MTQ1NjFGM0ExODc5RUEwMkI2NDNBMEUyQkNDQjVBQkMKKzoxMEExNTAwMEQ1MzE4QkVFRTJDNjNGOTdCODdDQjZEODNGNzVEODhGMjUKKzoxMEExNjAwMEVCOTJBNTYwREU0NzBCRDE2RTZGQUQ5OTg5N0ZBRTlCRjgKKzoxMEExNzAwMDkyNjdFNDA0MjhERTk5MzM2MzY3ODBFMjlEQjkxOUZEOTQKKzoxMEExODAwMEU2QzBBNTE5RjM1N0VCMEIzMkM2M0RGQTNFRDYyOEU0REMKKzoxMEExOTAwMDY2NkQ3NDcxQzZGQzdEMkQ0REE5MkY5MDVGREZFMEQ3RjEKKzoxMEExQTAwMDE1OURFMjlGQUIzM0M2NkZBOEJFMzYwMzFFMjhFQjRDNEQKKzoxMEExQjAwMEQyRDM0NTFCRDNFOEM2RjdDRkE0QUJCNkVERUM3MTkwNzQKKzoxMEExQzAwMDQ3RTdGN0RBMzNFM0ExRDlFODlCQ0RCNzFFNUU4QjRFQTQKKzoxMEExRDAwMEUzNTVDNDk1MDk4QTJCMERCQUY3MTI2OTBCODJEQTczMUQKKzoxMEExRTAwMERBMkZCMUMwMEVDREVDQUJENjYzN0NCOUVDRTJDNzk3RTkKKzoxMEExRjAwMDA1MTQ1RjU2RTQ4QTJGM0ZEMjg5N0ZDRjE5NUZCNjY2NzgKKzoxMEEyMDAwMEM2OTcwNTU5NzgzQjU3N0NBOTc1NjRFQTk1RjNDNUU3NkQKKzoxMEEyMTAwMEU2RjJGODFCQjUxNEVGQkRBRUIwMUZBOEI0QzZEOUZFNjgKKzoxMEEyMjAwMENEOUQ1MENDQjUwOEI3RDhGNUM3NDIyNEYzMzg2RjczMkQKKzoxMEEyMzAwMEFEQzZGRUU1M0U5ODhDOTJERERGMkIyMTU2OTFGRkU3RkYKKzoxMEEyNDAwMDJFMzE0QjQ5REYzQzFEQjY0QTZFQTIzOEJGNEQzNjBGNEEKKzoxMEEyNTAwMEUyOTIxNzFCQkYxOTI1QkY2M0Q3OEVDN0EzNjg5NDYwMEUKKzoxMEEyNjAwMDUxODdDQ0ZCMjYxQjRGNkMyMkI5NTIwREY0RTMyNDZFQjAKKzoxMEEyNzAwMEFEQjExQ0ZFODkzN0ZGQUIwMzNFQjYwMzdCMzc2OTYzODQKKzoxMEEyODAwMDEyQ0VERjFCRDJCQjM3NTBERkREMDcxMUMyRjY3NkI0MkEKKzoxMEEyOTAwMEY2RjIzMUYyRkZBRUVDMzAwNEJGODAxMzI1RkEzRkI4N0UKKzoxMEEyQTAwMEE5QUU5NDhEOTQ4QUZEQTUzNERENjQzQjNFMUMzMkFEOEQKKzoxMEEyQjAwMDVCODg3RjdFMTMwNDA3M0YzRDIwRTkwNTEyRDk4QjRENTMKKzoxMEEyQzAwMEIyRkUyNERFNzNCNDc1QzVCQjVCQjFCRjJCQTg5OTI0NjUKKzoxMEEyRDAwMEYwODk3MDVEMjlGMTk3QjIxOUREMUVFQzhGQjQ4RUJDNDgKKzoxMEEyRTAwMDRDRUJENTJBOTlGQjg5NEQ5NzFGMjNGNzc5QjQ1ODZGMEEKKzoxMEEyRjAwMEFCQTQzODZGNzUyNTYxMUE5NDQzOUZGNDUxNUUyMzExMDYKKzoxMEEzMDAwMDNFMTFBNUY1RkRENzg4RjVCM0QxNDdEMUQzRUMzOTcwMEYKKzoxMEEzMTAwMEZFODJDRkFCMkM5NDUzMUFDMjUxNUUzOEYxNTc4MkE3RkMKKzoxMEEzMjAwMEE0REI3MUQ2RTM5OTdFQzU3MDU4QTMyMDAxRDZGRjdDQ0IKKzoxMEEzMzAwMEUxRjcxQzk1NTRCOTY1MTExRDQ3NTFFNjA5NEY5QjM3NEMKKzoxMEEzNDAwMDc1MTQ1MjNDQjVEOTM3NTk5Q0NCNUUwQ0EwN0U0RDVEM0YKKzoxMEEzNTAwMDkxRTY2RjQ2MzJGRDg0NkNGOEZDNTc0N0Y4QzUzRjU5Q0IKKzoxMEEzNjAwMDc0OEQxMjM3NzRDMUJGQzQ4RDZCQzY1Mjg0Mzc0OEI2MjIKKzoxMEEzNzAwMDU2NTJEQzFCMTQ3Njc5MzYzQ0E4QzE0QzNDNzhGMDE5NTcKKzoxMEEzODAwMDFFRkU0RkU5Q0RCM0YyRDJGMDgwRDc0QTkxQkY3MzQ3OUEKKzoxMEEzOTAwMDg3QzRGNEZGMjJGMTQxQUQzODA2QzUxRERFQjlENDU2OUQKKzoxMEEzQTAwMDk5RDc3OUZBMDFGOTc4QzMzOEYxODc4QkY3Mjg5QTBDOTUKKzoxMEEzQjAwMDkyNDNFRjFDNUY3NUUxREQ3MzlBQUY3MDZBNDlEQTM5MzkKKzoxMEEzQzAwMDU2NkEyRTNDOTNFM0UyQUIzNDIxNTdGMDJCQzU3Q0QyODYKKzoxMEEzRDAwMEM4NDEyN0Q3N0ZFM0Y1MTUzM0UzQUE3QkZFMkIwRTY4MzAKKzoxMEEzRTAwMDE5RkE3Nzg4RjZDNzdCQkNCREIxRjNBQ0YxRjJBMkIxMjQKKzoxMEEzRjAwMENDNzVERkU5MDAzRUVGOTU4QTc1RTQwNEY5NTI1N0M4NDEKKzoxMEE0MDAwMDYzNEYyMkE4QzU1N0M4MkNDRjI3RDFGRjIyQkIzNjFCQ0MKKzoxMEE0MTAwMDNDOEZGRTJDNjIyNUNDNUQ0MDdFRDlDRTQ4MDdGM0Y5RjcKKzoxMEE0MjAwMDZDRUJCNEIxMDlBQjYyMTlFRDBCRjE3MUU0QUY0NUQxM0UKKzoxMEE0MzAwMENDNzM3OUYzQkU3M0ZBNUU1RjgxMzk3NDFFNzRDOEM5MzgKKzoxMEE0NDAwMDFFRjlDNzUyMTZFOTY5M0ZDMjkxQjBBRDdFRkM2RUZEQTAKKzoxMEE0NTAwMDZDRjdGNjQzMUE3Q0M0RTc0NzkyRDA1NzRFMThGOEJFMDMKKzoxMEE0NjAwMDg5NzdDNzU4N0VFMEQwRDQ4NzI0REY4OTQ1MjVDNjMwNTgKKzoxMEE0NzAwMENCMEI0NDE3RDY5MTNGMjJFRUU1Q0JBMkQzNzA5RTgwNDIKKzoxMEE0ODAwMDMzQjI1Q0Y4QTkyMzZFREY1OTJBRTA0MkJBOUNFMkZBQTMKKzoxMEE0OTAwMDNDMzdBRkYyNDJDNzAyQzZCQjQ2N0E4Njg4QUM1QUU1NjMKKzoxMEE0QTAwMEM0MTc0MUY1ODc4RThFRkMzMDI3QjgwRkMyRDhGQTIzMjcKKzoxMEE0QjAwMDVCMUM2QTU3OTUxQjdCRUFGMTVDMjM4QjY0QjY2MzIzQjQKKzoxMEE0QzAwMEExRDhFMzAzQTQ4NzE2MDU3M0NBQzc2QkFFNUUxQzIyMkUKKzoxMEE0RDAwMEJFRTVGODA5MkM5OUU0NEVGMjg0MDQ2MjMyRDI2Qjk0MDIKKzoxMEE0RTAwMDM5MUZFMEZEOEVCMEM4NjdFOUM5RkE5QjExOEY2RkJCQjkKKzoxMEE0RjAwMDdDODFGN0UxRjVEOUYwREYzRDEzRkUxM0M0QUYwOTE3RjYKKzoxMEE1MDAwMDM4QzFEOTgyNzA3RUVEQ0EwNTkwNDEyOTcxRTMzRURDRTUKKzoxMEE1MTAwMDJGNjAyNEVCQzk1Rjk4RUNEMEM1QjhCQURDQTRGQjhGRTAKKzoxMEE1MjAwMDg0NzNFRjM3RTlFRTY3Qzk3MTg5RTY1REIyNTFBQzg3OTQKKzoxMEE1MzAwMDgwNThCNzU3OUFEQTcwNUNEMDkzRTU4OUY2QTdGMTdDMUEKKzoxMEE1NDAwMDMzNTMzRjY0QzNDREFCQ0VENDU3NUE1OUU2RkNGRjc1QTUKKzoxMEE1NTAwMEY5MkYzQjFFN0E0MENBN0RDRUMyNEU3MURGNTVFNUMwNTEKKzoxMEE1NjAwMEY2ODhGOEUyQkUxQzdDOTEyREVGMUFFNTNGMTFFRURGNzQKKzoxMEE1NzAwMDg4MEVCQzlGRDAzQjQxNzVBMjI5QkY4NkVDM0I5OEZENUQKKzoxMEE1ODAwMDhDRDhDMzdDREZGQkYyNkZFNDM4NzlFMDA2OTFFN0QwMkEKKzoxMEE1OTAwMDU0QTFCN0NCMzYyMDE4QjRDN0Y2NEY1QTFDRUEyQjc3MTQKKzoxMEE1QTAwMDgzRUUwRjlGODk4NzRGMUJFRjkxQkQ3MUQyRDY4NzNCRkEKKzoxMEE1QjAwMDgxQ0ZBOUE0Qzc4MTc4OEZBNENGQjg5MUY2NERFRTUyNzAKKzoxMEE1QzAwMDgwRkM4MEU0NzZGRjg2NUM3NkJCQjhDM0U3RTk1RDhFRUQKKzoxMEE1RDAwMDZCNTU5NzJGQzBBQzAwMTlENzFGNzg0QkUxQkNDMDgxRDkKKzoxMEE1RTAwMEZBOUQxQzE3Mjc2Q0NEOTAyQTI4NEZGMTA4NkNDN0YxRjMKKzoxMEE1RjAwMDNGNUEzMkZCQURCRDg3RUVGREY1QUJCOEVDNzg0QjY1NEQKKzoxMEE2MDAwMDlEMjRCMzFDQzFBRDM4RkYzOEM2QzVFNDM3OTNGQzY1NDMKKzoxMEE2MTAwMEU0NjMxMEIxODFCQTk5RkQ5MjJEOTVCQzVGMDJGNzkzNjYKKzoxMEE2MjAwMENFQTJFNzU0MUJFM0Q2NjU2N0MyM0I2RDhGQjNGMjIzMUUKKzoxMEE2MzAwMDAzMjVCMURBNEVCQ0RGQkVBMEE4QjMyODVFN0VBNDJCRjIKKzoxMEE2NDAwMDcyNUU3OTFEMDM5MkE5NUVEMjJCMUI4MUYxMTA2QTFCRTkKKzoxMEE2NTAwMDgxRUQ5NDRGODg4QTM4RTM0OEFENUZGMEQ3NzZDOThEOTUKKzoxMEE2NjAwMENGQTAwNTNDM0Q4NTdGRUIzNjFBMEZDRjI1RkJGMjhFNDAKKzoxMEE2NzAwMDFGQUE3MEJDRTlBOUQ3NTVFQThGOTRDQTc1MTQzRjVGMjkKKzoxMEE2ODAwMEE1NERERTdGMTU4REQ3Rjk1ODdGMzQyMjI1NTMxOUZDNEYKKzoxMEE2OTAwMDkxRjJDQjUxM0U4RkU2QjY4QTY4NTMxMkI1Q0Q4MUZDNUMKKzoxMEE2QTAwMDBDN0RCRDVBQ0Y4QzNGRjY0QzFGNTEwQTg5M0Y3NTMwNDcKKzoxMEE2QjAwMDI1QzRGMzlFNDZEMzJBMjRERDYzNEVGNkQzRjczREFCODMKKzoxMEE2QzAwMDBENzNEODIwN0YzODMzNEVEOUQzQTYwOTdENUEyMUVDOUIKKzoxMEE2RDAwMENFQzg2MUUzNjFGMkFGMDY3QkYzRDhGRjdDQTA0QzE2RDUKKzoxMEE2RTAwMEY3NUUwODYzQzQwRjZENDY2NjVDMzMzMjVFQjk2QjIxNUEKKzoxMEE2RjAwMEM5NTlEMkM3RjlGMkVGOEY4QkY5NUI3NzJDMUZBM0I4M0EKKzoxMEE3MDAwMDU0NzdGREQ1QURBNTRERUM4N0MyODA5ODc3NDNGNUUyMkYKKzoxMEE3MTAwMEFDRkI0RkU4QzQxN0M5RUQzRTIwRkMwRjk2REQzQzQ0NkUKKzoxMEE3MjAwMEY5RDAwRjEyQkVBQjQ5NUM1RUVEMzQzMkUyQzIyRDAzQUMKKzoxMEE3MzAwMEI3NzI5RDY4NDA4MzlCRThGQzdCMzY2OUNDRkY3QjhBQkYKKzoxMEE3NDAwMDNGMzg3MDBCRTlFOUUyMzk4Q0U3RDE0RDVBNjkyQzRENUQKKzoxMEE3NTAwMDFFRkVENkU5NjczOTE4REQyNEZDOEI2MjE5NjJFMzM5RTUKKzoxMEE3NjAwMEM2RkZENjI5RjREMEU3NkUwN0JFNEYwMURBNjUwMzNGNzYKKzoxMEE3NzAwMDE5NkEzQ0U1Mjc3Qzk0MDFGQzMzNUQyN0ZBRDE0MzdDQzAKKzoxMEE3ODAwMEZGNTYxOUFBRjA4ODIzOTE4REVDQkY2NUYzNTlCMEFCNDEKKzoxMEE3OTAwMDhBRTE5REI2OEZGNTcyMDYxRTdEN0UzQkNFNzlFRTFCNUIKKzoxMEE3QTAwMEMwMjA3REQ1RDI4QTdEOEFFRjM3NkE0MEZDRTY4RkRFRjUKKzoxMEE3QjAwMENERjcyQ0MyN0UxRUY2MDNBRDQ5NDdDNTdFNjA2MUVDMjUKKzoxMEE3QzAwMDZBRjI1QjVGRENERTMzNDQ3OTE2N0Y0NEQ2ODlERkZDQjYKKzoxMEE3RDAwMDFCNkZCMzNCNjk3RThEMEZGMjcwN0MwMDBDMjk0QUU3M0EKKzoxMEE3RTAwMDc0MjQyMDdENkQ0MEFDOTVGQ0Y1OTFBOEFDNTNERTY2RDkKKzoxMEE3RjAwMDVENjJGRDM2REE3RjVENjQwRTEwOUQzN0I3QzlCQ0RGNDAKKzoxMEE4MDAwMDQ5NEJFM0E0NTUzMTM5MUE5NEZGMkEwOUIyREQ3RERGQTMKKzoxMEE4MTAwMDE3N0ZCODA3RTdCRjhGRjQ3MjYwRTY1RTg3M0EyQkY5QkYKKzoxMEE4MjAwMDlFNzk0NjY2RkMxQzgwMjREQkUxOTVENkM0NDZEQTY3MzcKKzoxMEE4MzAwMDY1QkQ0NjE1MEQzOEQyNzBFMjAwRjlFQkEzQjU3RUQzQTUKKzoxMEE4NDAwMDhGRTcxQTZEOTAxOERGMUZEN0ZBQzZGMEE4RjA1MzZEODYKKzoxMEE4NTAwMDQyQTE3RDdGRkEzMUYyNDY0NTJFRjkzREJCREM2NENGNDMKKzoxMEE4NjAwMERGNTNERjExMjA3RUQ4MDkxMzVEODQxRjY3NUE2NkZCMTIKKzoxMEE4NzAwMDk1M0RBRkExNEJEMDdGMjdFMjg1RjBFQ0UwNzlBQjI4ODYKKzoxMEE4ODAwMDJFOUE0MkI5NDJFOEUxNjlGQkJCQjc2MEZCQTU0RTk1NDEKKzoxMEE4OTAwMEU3N0RCNTU0NzZBODJFMzREOEE2QjE5QzBDODY2MjQzQzkKKzoxMEE4QTAwMDE1RDQ0NzdFRTc3ODI4MTI2MzdFMUUyOThEQjAxQzdBNjYKKzoxMEE4QjAwMEZCOEMzNDc0NTcxM0JGQkM1MTlCQzc3RUZCOTczQjRGMzcKKzoxMEE4QzAwMERDRUUyQzQ0RkRBMUZDRkU1RjlGQTFGOEE5NEM2MzdBNEQKKzoxMEE4RDAwMDBFRkFFQ0Q0QUJDNEQ3NkRDMjVGM0MzQUZGMUU5NkJCRjgKKzoxMEE4RTAwMDgxOEQzNzAzRTEwRDlDRjgzQjU0QjcxQUE4Njk2MEY4RDUKKzoxMEE4RjAwMDVFQkU2MTY0QkVDODI3MEQ0NEVFNzIyOEJGOTFBQTE3RTAKKzoxMEE5MDAwMEY5MDVBQkY4MjBFN0YzQkNCQzUyQTNBQkM3MTZGQkUzRDkKKzoxMEE5MTAwMEFGNTREMUJBREI1NTUxMTc1NkNBMTJBNDBGRkM5NDU3NDUKKzoxMEE5MjAwMEEyNzU2QTY2QkVFQkJBQTlDQzM4Nzg1RTU2MUM5QzlEQUYKKzoxMEE5MzAwMDY3ODJDMEM0QzI0RUI0QTdCRkVCQ0NDQzJCRDExNTU4OTQKKzoxMEE5NDAwMDhFNkJGQzFDMkY4RUQ2OEIzODI4RTk4Qjk3RUE0QkNFNkEKKzoxMEE5NTAwMDk0RTMzNzVEM0Y3OEEyMkY4MDFDMDBGMEYzM0U5REZCMEYKKzoxMEE5NjAwMDA1RDYxRjc2Q0M0NTUwNkZGNTQ1RjlGQkU3NTczRTJFQ0YKKzoxMEE5NzAwMEE1QUZEQjUzQjMzRTYwQjBERTk4OEMxMkRDNkM3RDkxRUEKKzoxMEE5ODAwMENEMDdCRDlENzM5OEJFMThBNzAxRDE3N0NGMTQzMDdFMzcKKzoxMEE5OTAwMDQzMEQyQjUyQzRBNzI3RkYwNDFDODc3RUI2NjUyMjA4RUYKKzoxMEE5QTAwMDk1NjdBRTRGRDEzOUZEOTRGRjEyRTczQzRBRTdGNDUzNjcKKzoxMEE5QjAwMEZFNEI5Q0VGRTUzRTgzREI1N0ZCQUFCOTVERDMwNTIyMzYKKzoxMEE5QzAwMENGRUZFOTgzQ0I1MDFGMjBERTVBQ0E0NDlGRTQ5RkVDQUYKKzoxMEE5RDAwMDcwNTFFNDY2OUJGOENCMUY1NTc1OTJFRjQwNTkzMjI1QjQKKzoxMEE5RTAwMEE1RTk4M0QxNTBGQzVEQjJDQjgzQzU0MUU2QkZFQzczRDIKKzoxMEE5RjAwMDVEREUyNUJCNzYyRjdFMTNDMUREODM3MDA5RUYyRjZFRTAKKzoxMEFBMDAwMEZGRUY4NzE2RDAzRTZGMjlDQzU3NDUxQkJCQjdCMURFOTEKKzoxMEFBMTAwMDQxQkQ5MEM3RkU4NkQwODdDOUUyMjBFNzFENDZCNzU3RTMKKzoxMEFBMjAwMDQ5NTFFQzZGREUyMTFDREQ3M0NBM0RFRTMzODZFQjhFOUYKKzoxMEFBMzAwMEEwQkVBNkZFMjBDQTM5REQ2N0IwRTE4MzNCNjg5RjhGQzgKKzoxMEFBNDAwMEZGMzI4NzJBN0M0OEVGNUZCMURDQkY4MTAxQzhEQzhCMTUKKzoxMEFBNTAwMDI4Rjc5RTlDQkRGRThCNDNERjIzMzkzM0MwRUUzOTI0OUIKKzoxMEFBNjAwMEVFQ0Y3QTcwMzQzNDkxQTRGQjBGRkU1MjgxNUM3OEJCMzgKKzoxMEFBNzAwMDUwQkE4Mjc1N0U3RUM4OTgzQTc1Rjg1NDI0NDdEREQwNjYKKzoxMEFBODAwMDEyNzVDM0ZFRjExRjcxREY1OTA3NTA4NUZENDc3RDU2RDIKKzoxMEFBOTAwMDgwRjhFMEQxMURGMjU5RUI4NjhGRUUzODdCREQ3MDZDQ0IKKzoxMEFBQTAwMEJGMEM3RTdERTYxQzk3QzIyNEU3NTkyOTg0QTczQUUwQjMKKzoxMEFBQjAwMDAwMEQ2MTdCNDM1N0VDOTYyRUY2MjM0NTVERDE2OEEwQ0YKKzoxMEFBQzAwMDlDMDNGNUY1MzlFNDNGMUZCNUFEQUQzQzFFMjk2MkJCRDMKKzoxMEFBRDAwMDFGNTVDNzUzNjREN0EzNTQyRjM3RThGRDgyQzM3NTRGNjIKKzoxMEFBRTAwMENBQ0ZEMkZCODVFQ0ZCRjdGQjI2OUJGODdFMzg4NUVBQzQKKzoxMEFBRjAwMDk1RDlGNTQ5MjlGODYzNTFERjVGMjBFQTkwNUU3RDcyQjAKKzoxMEFCMDAwMDk5MzY3OUYwN0VDMkQzNEQwMUM2NDNGRjczRDdCQzQzNUIKKzoxMEFCMTAwMEY1MkZBRjhFMUY3NUVCQzBGQTM2RDA3Nzg4N0JEQ0RCNjQKKzoxMEFCMjAwMDQ1NzFEMDBCQTIxRTBBRDdFMDNEOTZEMzI2OTM5NUVEMzIKKzoxMEFCMzAwMDRCQjlCRUI5ODNFRTcxQUVGMzlGNkZERDcwOURBQkRGOTUKKzoxMEFCNDAwMDkwQjlDNzQ4OUU3RkVERTJEMzlCRjc0RDkyQzc1QUYyNkEKKzoxMEFCNTAwMDEzNDVERTFBMEEzNEQ2RjM0RDRGMDU0MTIxN0YzOUE0M0YKKzoxMEFCNjAwMDFEMjQzOUQ5MDI5M0FCNDk5RUZBQzNDMjZGNEJFQ0YzNTMKKzoxMEFCNzAwMEIxREYzNkRBNjVGMDNFQzU5QUM1RUYxNzhBQkY5NjY3MzIKKzoxMEFCODAwMEVFNDAzMDg5QzM3QTAxRTU5MUFFRTlCNDQ2QkJGODFDQ0EKKzoxMEFCOTAwMEM5QUUwRTNBQzc5MEMyRkFFRUZEQUFENUZDOEVBOTRERjkKKzoxMEFCQTAwMDJBNjQ3OTU0NzVBQjNDNUQ1RjFFRUFDQUZEMUU2OTU1ODcKKzoxMEFCQjAwMEY5NTQwN0VGMUY5MjgxRTJBRDQ0OUVGOUIyNDFGOEZFQ0QKKzoxMEFCQzAwMDg5Q0E3MERCNDBCQzU3ODJBREJBMzQ4NEY3RUMwRjFFRTMKKzoxMEFCRDAwMDY3RkFBQ0FBRjIyRjI3RkQ3NEM4QjVBRjg5NTBFRUI4NUEKKzoxMEFCRTAwMEVFNTkxNzFGRkZEMDFFRkIyMUQxRTE3QTk4NkEyNkZEOEUKKzoxMEFCRjAwMDg2QTI2RDNBRkNBRTQ1QzQ2Qjg3NDg1RjhBNzhGNzVFRTMKKzoxMEFDMDAwMEI5NkUyNkFGRjU5MjJGNzY4OEVFNkI3RDVGRjgxM0ZFNTYKKzoxMEFDMTAwMEE4RjBFQjMxNTJFMzdDRDAwN0VERDY3MzA0NzcxREYxMzkKKzoxMEFDMjAwMDc5MEQyQjJBNzg3Mjc5MEUzOTc3Q0Y3MTQ3OTdGNTFGRjYKKzoxMEFDMzAwMDA0RUY5OEJCREYzMkRERTJCQUVCMzI5MENERkU0ODVBMkEKKzoxMEFDNDAwMDVEREQzOEJGQkFCQUE0RkY1OEQ0RDNBRjE1N0MwQzJGNDIKKzoxMEFDNTAwMDM4ODIwRjlCNDAyNzc5NDJGRTNCNDZFN0YzREU5NzJDNzQKKzoxMEFDNjAwMDdCN0U1QjA1RDc1RDJFQjBCRTlEREY2MUJENERGMDRFOTYKKzoxMEFDNzAwMEQ5RjZCQkQ0QkVCRkJEMDcxOERFNzlCRUQ3NTg1NTFFNjYKKzoxMEFDODAwMDhGREE0OEE3QzEzQ0UxMzczRkRENjg2RUIwRDNGMjNGQjEKKzoxMEFDOTAwMDczRDYwQjdCMzI2N0JEODhDNzE3MjMzQjREODg3NzZGMTAKKzoxMEFDQTAwMDZDQzcyRjg3RkEwMEQxMkIxQkZFNDAxRjhDNTMxRDY4RTkKKzoxMEFDQjAwMEI2RkRCNTVENzcwNTI4NEZEQzVGRDYxNEEwRjc2ODg5MkYKKzoxMEFDQzAwMDYwNTMyMUY1MDdDQkFDMjhFRDNGRDBEN0ZBREM0NzU1RDAKKzoxMEFDRDAwMEM0NDc4MkVGOURGOTIyMUY5MTQ0RkRFQ0E0RTU0OTRGNDIKKzoxMEFDRTAwMDc1Mjk3Q0FFRTYzMjQ4NTEzRUREMUYxNDdFOTExRkUzOEMKKzoxMEFDRjAwMDQ1NjMyOUY5Q0RGNTZDQ0ZGMUZCMzhBNTBFRkNFQjBEQzIKKzoxMEFEMDAwMDExNkY1QjI2NTg0MTcyODM0MDIyN0NBMThFM0NCRDlFMTAKKzoxMEFEMTAwMDRDNUU3MzU5MUNFODVDQjNDMTUxNUE3MDNEQzVBMzY1QzQKKzoxMEFEMjAwMDNBRkIyMTU3QUVENzE5NkVEODkyNjdFMjc4Mzg3RjdDMEMKKzoxMEFEMzAwMEVEM0IwN0JFOEFDRTgxMkY2RjlFMjc3N0Q5NzhBQTVDMUMKKzoxMEFENDAwMEFGRjBGOTVFMENERkMzRjc4MjRGOUE1OUNFRkNBOEYwNDIKKzoxMEFENTAwMEE4OUU1RkJENUVFODE5MjU2ODQxMkNDNEUxQkY0NEY4OTgKKzoxMEFENjAwMDQ5RDAwMzlCMjUzM0Y4NDU1RjkxRjFBQkU4NzE1RUU3NkQKKzoxMEFENzAwMDJGMzMyMUI2OTRGMEExNEI4NDhGRUNGQjJGN0JGRUJCQ0QKKzoxMEFEODAwMDJEODRCNzU3QjYwOEJEQkE0QTc1RjU0NzFDRUY4MkZDNEIKKzoxMEFEOTAwMEI5RDNENTZGRTBEQUE1QjYzQzYxNzdENkMxQ0Y4MjIyQjAKKzoxMEFEQTAwMEFGMkRGODc0MTlCQUUzODFBMjMzRjVBQkQ3M0VFREU2QzcKKzoxMEFEQjAwMDk1QjNCRkZGNkU3RDlFRjA4NzhDNzFENkVGRkRBRDAyMUYKKzoxMEFEQzAwMDdFMjgyNEZDRDA4MzQzMkJEODdGNTg1MzVBMzUyNzVERTcKKzoxMEFERDAwMDNGNUVFQzNBNjE3NjVERjA1Qzc1QzAxOUJFQjEwMjc0RkQKKzoxMEFERTAwMENFM0ZFQTc3MzlFREM2RUNGQzcxM0ZGMThGOEZFNDI2NTgKKzoxMEFERjAwMEMwRUQxOUUzRTU3NkQ0MjRCOTlBNkYzOTgwNzREQjE5NzQKKzoxMEFFMDAwMDhFNDc4OTdGMDYwRTZGN0Y4N0VBMjRFQUVCOEE0OUZFMjgKKzoxMEFFMTAwMEE2QUFEQTQwRjNENjE0Qzc1OTNFRDY5NjU5NDA3NUE1NkUKKzoxMEFFMjAwMEZCRkJBQzFGQTZDMzFENkU4RjZENUI0RkVGODRGNDcxRUYKKzoxMEFFMzAwMDhCRTAwNDIxRTU5MDNEQkE3RUFFMTVCNzczRDBFMTZFOEMKKzoxMEFFNDAwMDU3N0Y3Q0QwNkU3RjY5M0RGMkUxMkFEMjlEMkIwMDdFMzgKKzoxMEFFNTAwMDY5NUI3NzUyRkY3Q0Y1RDU5OUYyRDQxQTIwQkQ3RkUxNkEKKzoxMEFFNjAwMEYyRDQxMUEwRkIwRDk2RDlGQzRFNkJGMDY3MEE3OTU4MEQKKzoxMEFFNzAwMEE3RTcwREJBRjIzNDM4RkYxRTg4QTVDOUQ1RUVGNTU5RkIKKzoxMEFFODAwMDdBMjdFMkVBOUQ4OEM1NzIzMUUyRUExOTU1Qjc1OTNFNDAKKzoxMEFFOTAwMDdDMjQ0RjRCRDJGNDRDQzREMzMzMTZDQkEzMUFGMUU0MjkKKzoxMEFFQTAwMEM5OTUzRjkyQTcyMEJEMEY5RTZBMjYzRjY1MDBDNDNCMEYKKzoxMEFFQjAwMEM2NkNGOUZBN0U3QkVDNjFBMkMzNTVDNUZGRDc1OTYxMTgKKzoxMEFFQzAwMENDQkNGRjM0MEMyMTRGODM2NTJFQkZDRjdGOTZGOUZGOUEKKzoxMEFFRDAwMDI0RjIzRjNEMTZFRTBGNTY2NkYwQkJEN0FFOUM1NjIwQ0YKKzoxMEFFRTAwMDg1QTRCODZFNUFFMkY2QjNEM0Y5RENBRTlBQ0VFM0Q2QjcKKzoxMEFFRjAwMDlBOUVDQjZERTM3NDk4REJBNkU5NEJCOTZEOUUyRUU1NjcKKzoxMEFGMDAwMEI2NjUxQUY5RkU2QUU0RkZFOTBBNkVENzRDMkZFNjc2QjkKKzoxMEFGMTAwMEVERjQyMjZFNUJBN0FGRTY3OTZERDNDQkI5QkQ3RUZBQjcKKzoxMEFGMjAwMDVBNkU2Rjk4NkUxMEZCNTA0REE4MjgyN0ZGNTMzOUVCQ0YKKzoxMEFGMzAwMDIyRjBCRkU5NTA3RDc0RTBGMEVERUYxMDdFN0NCQUM2RTAKKzoxMEFGNDAwMDc5OTQ0NEI4OEVFQjNEM0UzNUNFRkM3RkIwNENFOEY3QUIKKzoxMEFGNTAwMEI1NDE0MTlGNkNGRUZGQTAzREY2MzJGMTZEMzZGRjgzOTcKKzoxMEFGNjAwMDRGQkNEQjUyRTlERDU2MERGQjM5NkYzMjdGOUZFMUVGQkQKKzoxMEFGNzAwMEJFRjQxN0NBODNBMkZGNzE4Q0U4NzdBMUY2RkZCNDVGMTUKKzoxMEFGODAwMDU5OTJFOTU3MEUxNjY3RkE5NTAzRjMzREJGRDIzRjQ2MzMKKzoxMEFGOTAwMDc1QjBBRDkyQzFFRkM0RjIzQjYyMUZGMkZFNjA2RkExQ0IKKzoxMEFGQTAwMEYxNTg1NzQwMjc3RjJBMTE1RTEzMEQ2MjdGRjM0RTA1M0IKKzoxMEFGQjAwMDI4REY4N0ZFQzU2Rjc4MUVFQTA3QjIxQkU3MkJBRkJGRkQKKzoxMEFGQzAwMEI0ODUxQzc4RjM5N0MxNzEzOUZFMjlGQzkzRjdFOTlGOEEKKzoxMEFGRDAwMDBENjdDQUZENkNFQjNDQjlCRjFDQUFGMzcyRDlEOTIyMkMKKzoxMEFGRTAwMDVGQjM5MDdCNURDODdEQTJDQzFFQTI3QzRCMjI0QkVFNTIKKzoxMEFGRjAwMDNEM0I4QTc4Qzg5MEZCRkM2RTU3RUU1RDM5MkU4QTg4RkYKKzoxMEIwMDAwMDc3MUY0NTI0RjdDODU3RTE2RUMzQURGRjY0REE1MUQ1MDkKKzoxMEIwMTAwMDlERUY2QjE1RjVBREU2ODhEMEFCNkFBQkQwMTdBQTlFNTUKKzoxMEIwMjAwMDY5NDc5MTZGOEFCQjczRjgxMzhFMkFGQ0UzQjZBQTdGMzcKKzoxMEIwMzAwMDNCNkRDRkM4QUUxNjQ1QzI1MjIxNkVBREZGNjlEMkExOUQKKzoxMEIwNDAwMDNDRDY2MTc1MDFDQjc3QjYxQzI1RjQxNUNDRTc4N0Q1QzYKKzoxMEIwNTAwMDY2QzgyNUZGRTcyRDQ3NjFDRjhFNTg2QzQ3QjJFNzc5NjgKKzoxMEIwNjAwMEYyMzQ3MEI4OERGMUUyRDk5NUMzNzg2RjJCQ0Q5RUFDRDgKKzoxMEIwNzAwMEQ1MDUxRUQwOUVBQ0U4Q0U2MTRGNTY5NTVCMzEzQkM3REYKKzoxMEIwODAwMDM5OUJCQTg1NUZGQURBNzVCNkYwMTdEMTRGMjQzRjI1QTAKKzoxMEIwOTAwMEUxQ0JFRDA3MzQ3NTBCRkZBN0E4RDVGRDdEODUwMUYxNDgKKzoxMEIwQTAwMEI5QTgwNzVCNUI1M0NENTRDMzQwNzk2RUEyRkRBRkIzMjMKKzoxMEIwQjAwMDI2RkI0OTA2RkI4MzIzMTEzQTNGQ0E2NzMzRDFFMTQyOUQKKzoxMEIwQzAwMEU1QjNCQTVERjg4NUQwM0I5N0ZEMTZBRjNEMTdERjdCNDIKKzoxMEIwRDAwMEZFOEVDN0ZGRDlGMzlFQUVCMDM2RTRDMkNCMEZCQTQ1QTEKKzoxMEIwRTAwMDVDNzM3MEU4RDkwQ0ZFRDhBMzJFQjhERTM0NzJFQTU1MzIKKzoxMEIwRjAwMENCQkMyODdBRjVGQ0ZDOEFDMzY4RTc1OEFGQ0VFRTU3ODQKKzoxMEIxMDAwMDdDMjUxNzFGQ0NFNjU3N0NBRDVCQzQ5QkU4NTc2QzI3QUEKKzoxMEIxMTAwMDNBQUQ1QTIyRkM4QTFGNzRDM0M1RjUxNzFBRUU2MjdDMzkKKzoxMEIxMjAwMDVEQThCRjMwRDI3RDc2N0ZFMTQwQjdFNzJGQzQ1OTZGNkQKKzoxMEIxMzAwMEY4NURCREYxNjlGRDg1MUNGRUMxQTNDQ0JGMzBBNTUwRjMKKzoxMEIxNDAwMEZEMEY1MTZEOEE3Qzg4RDAyM0E4NjcwRUQyMzhDNkYxRDYKKzoxMEIxNTAwMEVDMkYxQzBDMEE3RUIxNUMzRDczNDc5N0ZEMDREMTYzNTQKKzoxMEIxNjAwMDRGQkRGMDE3MkU5NjFDQTBERkY3MzRDMTNENUY3OTM4MzQKKzoxMEIxNzAwMERGNzk1NTRGQUMxQzlBMjQzRjA3NDI0OTdBMzdERDRGOUYKKzoxMEIxODAwMEVGOTUyODdFN0MyRjI0REUxMUUwNTEyOEVGRkY0RkNBNzcKKzoxMEIxOTAwMDk1MjZEOUI5RDFGQzZGM0M0NkYzN0IxRDE1RThEREUwNUYKKzoxMEIxQTAwMEZFM0U5MTdGREVFREU2RkZGNkZCRTJGRjMyODk3MEVFQjgKKzoxMEIxQjAwMERGRTFENzBGRTJGODlGRTcxNDM4MzJGMkQ0OUZGM0NBRTkKKzoxMEIxQzAwMEM3RTg1REQwMzE1NzBGRjk2MTUzNjEyRUJFOUEzOTlGQTAKKzoxMEIxRDAwMDc4OUY0QjRGNTc0RUYxRUYzQUNBNzRDRTkzQkJGODg5MjQKKzoxMEIxRTAwMDY4MzYzODA4N0ZFNzdDOTlFQjIzM0JEQkJGNzg4MEU0NDcKKzoxMEIxRjAwMEM3NjkxNzc5MkUyRUI0RTI3ODY0NUU1NEU0M0JEMDhEOTMKKzoxMEIyMDAwMEE5NEZDQjhCMjhBMDlFQTA3Q0ZDMTBCRDUxNEZBQkJGOUIKKzoxMEIyMTAwMDE2REIxODQ3QTdDNTE5MjFEM0NFRTgxQjEwMDMwN0Y3ODMKKzoxMEIyMjAwMEQ5MUI5MTM5M0YzRkI4NTJDNDQ1ODNDMTc4NDBDRkExNjMKKzoxMEIyMzAwMDVGNzZGNTY1QkU1M0NBNkU5NTQ1NEYyNEU5MkRGMTgzQkYKKzoxMEIyNDAwMDUxRDVBNEY0RTg3MDc1NEQxQkU1MzExM0JBNzhCNEE0NTgKKzoxMEIyNTAwMDg1NjUzQjU3MUQzQkRDMjNCOUY5Nzg5M0VEQjZGQUI5MDgKKzoxMEIyNjAwMDhFQzI1Qzc2QzU2Qjg3RkE0NDlFRDZFQjA3MTY4RTVCNjIKKzoxMEIyNzAwMEM0OUY1QTg1NjVGM0VGNzVDMjExQzk0OUNCMkZGRkRFMTQKKzoxMEIyODAwMEQ1MTMzQjI1MzNCNTBBOTFCNjMzMjRFQzQ0QzA0ODVBNTQKKzoxMEIyOTAwMDMyOUU3N0EwRjgzNkFFNDcwNjBDMDc0RUQwRjc4NTQ5QTgKKzoxMEIyQTAwMEY4MTBEQjQ4ODkxNkNCNTk3N0VGMTFGMUNDNEU1RjhDNDMKKzoxMEIyQjAwMEY3REI1OUFBNzI5RDcyNjc0NUVFQkNENzVGNURCREFDRTYKKzoxMEIyQzAwMDg1OUI2Q0NFRkY4NzU1QUUyNzY3Q0Y5QjcyRjk0OUQzMUMKKzoxMEIyRDAwMEFDQThDRUYxRjc2RDA2REQyQjMxMUYzODk3MzlENTczNDkKKzoxMEIyRTAwMEU3NTMzQjgyQzQ5RjM2RTc0N0Y2QkI3OTEyNkRERTM2RTMKKzoxMEIyRjAwMEM2RkJFRTcyNTVBNzNDREM2QTY1REQwRURBRTc0MTU0MDkKKzoxMEIzMDAwMEJCRTQ5RjY0RjM4MTdGN0U0RDFFRDczRkQ3QzlGQzY2QTcKKzoxMEIzMTAwMDMzOUIyRkU4RUREQjA0Rjk2OTZBOEFGRDI1MUZCQ0MzNjYKKzoxMEIzMjAwMDc5OEJERDM1NDdCODZGQzA4NERCMTdGQ0UyRDU5QjIyRjMKKzoxMEIzMzAwMDJFM0Y5RTYxMjc1QzdBMjU0OUFFNzJGMENGRkRFNTEzNjIKKzoxMEIzNDAwMDZDQkYxRjY4OThEODQwNzU5QjYwMjQ2MEI2RTIzREY2REMKKzoxMEIzNTAwMDJEQjczOUJGQkRCQjU2NjZCRjM1REZGRDNEQ0U4M0VCOTQKKzoxMEIzNjAwMDhBQzI4NDk3RERCNTQ3NTgyRjY3OUZDNzc3RTQxNUY2RTMKKzoxMEIzNzAwMDNCODI2QThBRjMxN0MxQjI4RjM4OUU3REM4M0RDN0RBMTcKKzoxMEIzODAwMDdBMjE0RjA1QTZEMEMzMDU1RDcxRDA3MURGRTJCNzk0NzUKKzoxMEIzOTAwMDMxMDNGQkQyQkM5NzFEMUZENTBGNkUxMjZGOEIzNTJENUQKKzoxMEIzQTAwMEM1N0U0NjdFRkQxQTg5Q0VGNzY2QTkwMjEyQzE1MDVFOUYKKzoxMEIzQjAwMEUwRjdCQTYwMEJGOUY2REU2NTk3NzQ2OTE5RjE3RDE4NEMKKzoxMEIzQzAwMEQyRkExNUUyNzcwNEU5RUZBODQwRDk3OEQ2Rjc2NkJEM0UKKzoxMEIzRDAwMEVGREQ3RUVDNjgxQUJDOUUxRUY3NURBRjVCNjczQkQ3NjYKKzoxMEIzRTAwMEZBM0ZGNzZEM0I3NjE0OTVGRjgzMzU2Nzk3QUJCREFFOUIKKzoxMEIzRjAwMERFREJEMzU3Q0Y3NEYyRjhDQkUzQjcwODVENzFDNUVDNTEKKzoxMEI0MDAwMEVCRjc4N0M3NzNGQTI1QTMzRDgyQUZDRkE1OEYwQUZDNjAKKzoxMEI0MTAwMEUzNkNFN0Y3NUUzNzlFOTE4N0ZDQkFBQjFGQkVERTIzNzUKKzoxMEI0MjAwMEU0NDgyRjlGRTJCQ0U1NUVGNzlERDNERTNDRDhGMDZDOEMKKzoxMEI0MzAwMDhFN0IzREQ2QTMwOTc5M0FDRENGOUUxRkYwQ0U4NUY5RkMKKzoxMEI0NDAwMDAxRjNCQjQ0RkMxMDU5OTE0NzdFMDBFMkYzNjU3QUU3QjMKKzoxMEI0NTAwMEY2QTc4ODY2NDA5QTNDMEY4NDMyRkQ1MENGMEZGODZERjYKKzoxMEI0NjAwMDhGRjAwMzVFMkNGRTk4RUQ3ODYxMzBDNTc2M0M2ODY2RkYKKzoxMEI0NzAwMEU2MDlCMkVEQjhFNjhCNzE1Q0E5OTU2QTlFOUVFMTdBMDkKKzoxMEI0ODAwMDU3RjBFRDZGM0NFNTkwM0U0OEVERTJGQTUxM0VGMjZGMjkKKzoxMEI0OTAwMDlFNDg4RDNCQjlFODA0NEIzMkRGREQ3Q0IxMDdGODNDQjgKKzoxMEI0QTAwMDExMjMzRUQxNDhGNkE1NEJFNTdBQzg3RUY5QkQ0MzFGNkUKKzoxMEI0QjAwMDEyQkE5MjcxQjA1REI4QzNDQ0I3QkIyN0Y4RkQ4RUNCODIKKzoxMEI0QzAwMEY3RTdBMjI3RkQ3RDUyRTdGRTZFODVERTcxNUNGQjY2MjUKKzoxMEI0RDAwMDdEQUVCOEMzNkJFOTdENTVFNjdCRjg0RjI3MTdDRjdCNzAKKzoxMEI0RTAwMDcyOTEwNzc5NDIyRUQ2QzkwM0U0MEZBQzkzRjlERDBBQjUKKzoxMEI0RjAwMDNERUY1NUVCREM5NDIzRDVGREU5NjQ3NDZGN0ExRjI0OEUKKzoxMEI1MDAwMEI5RjVBNDA1MzNGMjAyOUYxN0VGNUU0RTZFMTNFRjY4OTQKKzoxMEI1MTAwMEY4Nzc4NjBCRTg3N0ExOTNGQ0ZCQzFDQkU4OTVBQjMyQkIKKzoxMEI1MjAwMEEzREY0RTQyOTk0Q0Y1NjJFNzg4MjQ5REY2OTMyRUE1NDEKKzoxMEI1MzAwMDI3OEZBNjRDRUIxNjgyQ0Q2REY2QjkyRjg3Mzg3RkFGREIKKzoxMEI1NDAwMDg2MjRCNzU3QzIzOEI3NEI2MDgyREI2NTMwQzVBRDA1N0UKKzoxMEI1NTAwMDQyNkY5OTQ3NDVERDYzMDU5ODBBN0RBRjAxOUJEQjNBNTEKKzoxMEI1NjAwMDg4NzM1QjBGNDk2RUJGNzlFRDk3RkU3MDMzMkVGOUFGOEMKKzoxMEI1NzAwMDFFQjcyRTdGMUEyRjAyQUYzOUU0M0I0NThGRkVCREZCNkQKKzoxMEI1ODAwMDdCNzg3RUIwQzc2MEI5M0IxN0JEMDdDMjQyREYzNjlCRjAKKzoxMEI1OTAwMDEzRUNERjg3ODIzNkVCNjE1RjQ0RjBCNzA3QzczNzRCQTgKKzoxMEI1QTAwMEJFRjhFRkY1QTNCMjdGNjdGMkZGMkIyMTM0QzZEMDNGODAKKzoxMEI1QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxODAwMDAwMDAwNzMKKzoxMEI1QzAwMDAwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwM0IKKzoxMEI1RDAwMDAwMDAwMDI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMzMKKzoxMEI1RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDAwMDAwM0IKKzoxMEI1RjAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwM0IKKzoxMEI2MDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzIKKzoxMEI2MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOTAwMDAwMDAwRjEKKzoxMEI2MjAwMDAwMDAwMDAwMDAwMDAwMzgwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMEI2MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDIKKzoxMEI2NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkEKKzoxMEI2NTAwMDAwMDAwMDAwMDAwMDAwMEMwMDAwMDAwMDAwMDAwMDAwREUKKzoxMEI2NjAwMDAwMDAwMDBFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QzgKKzoxMEI2NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxODAwMDAwMDAwQjIKKzoxMEI2ODAwMDAwMDAwMDAwMDAwMDAwMUMwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMEI2OTAwMDAwMDAwMDFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEzN0IKKzoxMEI2QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQTAwMDAwMDAwNjAKKzoxMEI2QjAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwODkKKzoxMEI2QzAwMDAwMDAwMDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNzcKKzoxMEI2RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwNUEKKzoxMEI2RTAwMDAwMDAwMDAwMDAwMDAwNTAwMDAwMDAwMDAwMDAwMDAwMEEKKzoxMEI2RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNDcKKzoxMEI3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQjAwMDAwMDAwOEUKKzoxMEI3MTAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMjEKKzoxMEI3MjAwMDAwMDBDMDAwMDAxMDAwMDAwMDAwMDAwODAwMDBDMDA4NzkKKzoxMEI3MzAwMDAwMTAwMDAwMDAwMDAwMDIwMDAwQzAwMDAwMTAwMDAwMjcKKzoxMEI3NDAwMDAwMDAwMDEwMDAwMDlGQjAwMDAwMDAwMDAwMDAwMDA4OTIKKzoxMEI3NTAwMDAwMDBDMDgwMDAxMDAwMDAwMDAwMDAwNDAwMDBDMDg4NEQKKzoxMEI3NjAwMDAwMTAwMDAwMDAwMDAwMDIwMDAwQzA4MDAwMTAwMDAwNzcKKzoxMEI3NzAwMDAwMDAwMDEwMDAwMDkxMjAwMDAwMDAwMDAwMDAwMDA4MDAKKzoxMEI3ODAwMDAwMDA5MzQwMDAwMTAwMDQwMDAwMDAwMTAwMDA5MzQ4MDUKKzoxMEI3OTAwMDAwMDAwMDAwMDAwMDAwMDIwMDAwOTM1MDAwMDAwMDAwQzQKKzoxMEI3QTAwMDAwMDAwMDA4MDAwMDkzNTQwMDAwMDAwMDAwMDAwMDAyQTgKKzoxMEI3QjAwMDAwMDA5NDE4MDAwMDAwMDAwMDAwMDAwODAwMDA5MzU4RUEKKzoxMEI3QzAwMDAwMDgwMDAwMDAwMDAwMDgwMDAwOUFCMDAwNDAwMDAwREYKKzoxMEI3RDAwMDAwMDAwMDQwMDAwMDkzOTgwMDA4MDAwMDAwMDAwMDA4RUUKKzoxMEI3RTAwMDAwMDA5M0Q4MDAwODAwMDAwMDAwMDAwODAwMDA5NDIwMkEKKzoxMEI3RjAwMDAwQzgwMDAwMDAwMDAwOTgwMDAwOTVCMDAwOTgwMDAwMEMKKzoxMEI4MDAwMDAwMDAwMDI4MDAwMDk1RjAwMDk4MDAwMDAwMDAwMDI4Q0IKKzoxMEI4MTAwMDAwMDBDNDgwMDU0MDAwMzAwMDAwMDU0MDAwMDA5RDIwNkQKKzoxMEI4MjAwMDAwMDgwMDAwMDAwMDAwMDEwMDAwOUQyMTAwMDgwMDAwNDkKKzoxMEI4MzAwMDAwMDAwMDAxMDAwMDIwMDgwMDEwMDAwMDAwMDAwMDEwQkYKKzoxMEI4NDAwMDAwMDAyMDAwMDAwMDAwMDAwMDAwMDAwODAwMDA5Q0Q4NUMKKzoxMEI4NTAwMDAwMDgwMDAwMDAwMDAwMDIwMDAwOUQxODAwMDAwMDAwMjkKKzoxMEI4NjAwMDAwMDAwMDAxMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwRDYKKzoxMEI4NzAwMDAwMDAwMDA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQkQKKzoxMEI4ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0YyMDAwMDAwMDAwQzkKKzoxMEI4OTAwMDAwMDAwMDIwMDAwMENGNDYwMDAwMDAwMDAwMDAwMDAxNzIKKzoxMEI4QTAwMDAwMDA2MDAwMDAyMDAwMDAwMDAwMDAyMDAwMDA3MzAwODUKKzoxMEI4QjAwMDAwMDgwMDAwMDAwMDAwMDgwMDAwOUZBMDAwMDAwMDAwMzkKKzoxMEI4QzAwMDAwMDAwMDAxMDAwMDlGQTgwMDAwMDAwMDAwMDAwMDAxMkYKKzoxMEI4RDAwMDAwMDA5RjYwMDAwMDAwMDAwMDAwMDAxMDAwMDA5RjYzNTcKKzoxMEI4RTAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwOUY2MTAwMDAwMDAwNTcKKzoxMEI4RjAwMDAwMDAwMDAxMDAwMDlGNjYwMDAwMDAwMDAwMDAwMDAxNDEKKzoxMEI5MDAwMDAwMDA5RjY3MDAwMDAwMDAwMDAwMDAwMDAwMDA5RjY4MkEKKzoxMEI5MTAwMDAwMDAwMDAwMDAwMDAwMDQwMDAwOUY2QzAwMDAwMDAwMTgKKzoxMEI5MjAwMDAwMDAwMDA0MDAwMDAwNTIwMDAwMDAwMDAwMDAwMDAwQzEKKzoxMEI5MzAwMDAwMDAwMDAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMDEKKzoxMEI5NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTAwMDAwMDAwRjIKKzoxMEI5NTAwMDAwMDAwMDAwMDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAwRTUKKzoxMEI5NjAwMDAwMDYwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDA5RjcwQTIKKzoxMEI5NzAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwOUY5MDAwMDAwMDAwOTcKKzoxMEI5ODAwMDAwMDAwMDA4MDAwMDAwNTMwMDAwMDAwMDAwMDAwMDAwNUMKKzoxMEI5OTAwMDAwMDA5Rjk4MDAwMDAwMDAwMDAwMDAwMjAwMDA5RjlDMzMKKzoxMEI5QTAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwOUY5RDAwMDAwMDAwNUEKKzoxMEI5QjAwMDAwMDAwMDAxMDAwMDAwMDkwMDAwMDAwMDAwMDAwMDAwN0QKKzoxMEI5QzAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ0MzIKKzoxMEI5RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwNjYKKzoxMEI5RTAwMDAwMDAwMDAwMDAwMDAwNTAwMDAwMDAwMDAwMDAwMDAwMDcKKzoxMEI5RjAwMDAwMDAwMDg5MDAwMDAwMDAwMDAwMDAwMDAwMDAxMkM4RTQKKzoxMEJBMDAwMDAwODAwMDAwMDAwMDAwODAwMDAwMDAwMTAwMDAwMDAwMzUKKzoxMEJBMTAwMDAwMDAwMDAwMDAwMEEwMDAwNzEwMDAwMDAwMDAwNzEwNTgKKzoxMEJBMjAwMDAwMDAxQUM4MDAwMDAwMDAwMDAwMDAwODAwMDBBRUMwQkUKKzoxMEJBMzAwMDAwMDgwMDAwMDAwMDAwMDgwMDAwQUU0MDAwMDgwMDAwMDAKKzoxMEJBNDAwMDAwMDAwMDA4MDAwMEFFODAwMDA4MDAwMDAwMDAwMDA4QjAKKzoxMEJBNTAwMDAwMDAyMDA4MDAxMDAwMDAwMDAwMDAxMDAwMDAyMDAwN0UKKzoxMEJBNjAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwQTAxMDA3MTAwMDQwQzcKKzoxMEJBNzAwMDAwMDAwMDQwMDAwMDFCRjgwMDA4MDAwMDAwMDAwMDAxNkEKKzoxMEJBODAwMDAwMDAxQkY5MDAwODAwMDAwMDAwMDAwMTAwMDAxQUQwQUYKKzoxMEJBOTAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMUFEODAwMDAwMDAwQjMKKzoxMEJBQTAwMDAwMDAwMDAyMDAwMDFBREEwMDAwMDAwMDAwMDAwMDAyOUUKKzoxMEJBQjAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRjAwNTcKKzoxMEJBQzAwMDAwMDAwMDAwMDAwMDAwMjAwMDAwMUI3ODAwMjgwMDAwOUIKKzoxMEJBRDAwMDAwMDAwMDA0MDAwMEUwMDAwMDIwMDAwMDAwMDAwMDIwNDIKKzoxMEJBRTAwMDAwMDBGMzAwMDAwODAwMDAwMDAwMDAwODAwMDAxQUYwNDkKKzoxMEJBRjAwMDAwMDAwMDAwMDAwMDAxMDgwMDAwMUIzNzAwMDAwMDAwRUIKKzoxMEJCMDAwMDAwMDAwMDAxMDAwMDFCMEYwMDAwMDAwMDAwMDAwMDAxMDkKKzoxMEJCMTAwMDAwMDAxQjcwMDAwMDAwMDAwMDAwMDAwNDAwMDAxQjc0MDcKKzoxMEJCMjAwMDAwMDAwMDAwMDAwMDAwMDQwMDAwMDA1MDAwMDAwMDAwQzEKKzoxMEJCMzAwMDAwMDAwMDAwMDAwMDAwMDMwMDAwMDAwMDAwMDAwMDAwMDIKKzoxMEJCNDAwMDAwMDAwMDA1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RUEKKzoxMEJCNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzAwMDAwMDAwREUKKzoxMEJCNjAwMDAwMDAwMDAwMDAwMDFCQzgwMDAwMDAwMDAwMDAwMDAxRjEKKzoxMEJCNzAwMDAwMDAxQkU4MDAwMDAwMDAwMDAwMDAwODAwMDAwMDUxNjkKKzoxMEJCODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUJEMDAwMDAwMDAwQ0EKKzoxMEJCOTAwMDAwMDAwMDA0MDAwMDFCRDQwMDAwMDAwMDAwMDAwMDA0QUUKKzoxMEJCQTAwMDAwMDAxQkQ4MDAwMDAwMDAwMDAwMDAwNDAwMDAxQkRDQTcKKzoxMEJCQjAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwQjAwMDAwMTgwMDAwQjUKKzoxMEJCQzAwMDAwMDAwMDE4MDAwMEMwMDAwMDQwMDAwMDAwMDAwMDQwMUQKKzoxMEJCRDAwMDAwMDBDMDAwMDA0MDAwMDIwMDAwMDAwMTAwMDBDMDAxQTEKKzoxMEJCRTAwMDAwNDAwMDAyMDAwMDAwMDAwMDAwRTIwMDAwMjAwMDAwMTEKKzoxMEJCRjAwMDAwMDAwMDIwMDAwMEUyMDQwMDAyMDAwODAwMjAwMDAyMTMKKzoxMEJDMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMjAwRDIKKzoxMEJDMTAwMDAwMDgwMDIwMDAwMDAwMDQwMDAwRjQwMDAwMjgwMDAwREMKKzoxMEJDMjAwMDAwMDAwMDI4MDAwMEY1NDAwMDEwMDAwMDAwMDAwMDEwOTcKKzoxMEJDMzAwMDAwMDBGNUMwMDAyMDAwMDAwMDAwMDAyMDAwMDBGNUMwNUEKKzoxMEJDNDAwMDAwMDIwMDIwMDAwMDAwMDIwMDAwRjMwMDAwMjAwMDAwQkQKKzoxMEJDNTAwMDAwMDAwMDIwMDAwMDIwMDgwMDEwMDAwMDAwMDAwMDEwN0MKKzoxMEJDNjAwMDAwMDAyMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAxMTA4OTMKKzoxMEJDNzAwMDAwMDgwMDAwMDAwMDAwMDgwMDAwMTE2ODAwMDgwMDAwMzMKKzoxMEJDODAwMDAwMDAwMDA4MDAwMDExQTgwMDA4MDAwMDAwMDAwMDA4RTMKKzoxMEJDOTAwMDAwMDAxMjQwMDAwODAwMDAwMDAwMDAwMTAwMDAxMjQxRjYKKzoxMEJDQTAwMDAwMDgwMDAwMDAwMDAwMDEwMDAwNDAwMDAwMjAwMDA0MjcKKzoxMEJDQjAwMDAwMDAwMDEwMDAwMDU5MDAwMDMwMDAxODAwMDAwMDEwQzMKKzoxMEJDQzAwMDAwMDA1OTA4MDAzMDAwMTgwMDAwMDAwMjAwMDA1NzAwNzIKKzoxMEJDRDAwMDAwMDgwMDAwMDAwMDAwMDEwMDAwNTcwMTAwMDgwMDAwRkIKKzoxMEJDRTAwMDAwMDAwMDAxMDAwMDExRTgwMDAwMDAwMDAwMDAwMDAxNTkKKzoxMEJDRjAwMDAwMDAxMUYwMDAwMDAwMDAwMDAwMDAwMTAwMDAxMUY4MzkKKzoxMEJEMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMTI0NDAwMDgwMDAwQzUKKzoxMEJEMTAwMDAwMDAwMDA0MDAwMDQwMDAwMDIwMDAwMDAwMDAwMDIwOUYKKzoxMEJEMjAwMDAwMDA1MzAwMDAxMDAwMDAwMDAwMDAxMDAwMDAxNTM4NTMKKzoxMEJEMzAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMzAwMDAwMDAwRkYKKzoxMEJENDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMEJENTAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0REUKKzoxMEJENjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTUwODAwMDAwMDAwQjYKKzoxMEJENzAwMDAwMDAwMDAxMDAwMDE1MjgwMDAwMDAwMDAwMDAwMDA4N0QKKzoxMEJEODAwMDAwMDAwMDUwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MzA4RDgKKzoxMEJEOTAwMDAwODAwMDAwMDAwMDAwODAwMDAwMDAwMTAwMDAwMDAwQTIKKzoxMEJEQTAwMDAwMDAwMDAwMDAwMDIwMDgwMDEwMDAwMDAwMDAwMDEwNEIKKzoxMEJEQjAwMDAwMDAyMDAwMDAwMDAwMDAwMDAwMDAwODAwMDA4NDEwQzcKKzoxMEJEQzAwMDAwMDgwMDAwMDAwMDAwMDgwMDAwODQ3MDAwMDgwMDAwNjcKKzoxMEJERDAwMDAwMDAwMDA4MDAwNjAwMDAwNDYwMDAyODAwMDAwNDYwNjUKKzoxMEJERTAwMDAwMDA4NTIwMDAwODAwMDAwMDAwMDAwMTAwMDA4NTIxRkYKKzoxMEJERjAwMDAwMDgwMDAwMDAwMDAwMDE4MDAwMDAwMDAwMDAwMDAwQkEKKzoxMEJFMDAwMDAwMDAwMDAwMDAwMDg0MDgwMDAwMDAwMDAwMDAwMDAxQTUKKzoxMEJFMTAwMDAwMDA4NEY0MDAwODAwMDAwMDAwMDAwMjAwMDA4NEY2MjYKKzoxMEJFMjAwMDAwMDgwMDAwMDAwMDAwMDIwMDAwODUwNDAwMTAwMDAwNkYKKzoxMEJFMzAwMDAwMDAwMDA0MDAwMDg3NjAwMDAwMDAwMDAwMDAwMDIwRjcKKzoxMEJFNDAwMDAwMDA2MDAwMDAyMDAwMDAwMDAwMDAyMDAwMDA3MzAwREYKKzoxMEJFNTAwMDAwMDgwMDAwMDAwMDAwMDgwMDAwMDAwMzAwMDAwMDAwQ0YKKzoxMEJFNjAwMDAwMDAwMDAwMDAwMDAwMDUwMDAwMDAwMDAwMDAwMDAwQ0QKKzoxMEJFNzAwMDAwMDAwMDA2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QjUKKzoxMEJFODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODgwODAwMDAwMDAwMjIKKzoxMEJFOTAwMDAwMDAwMDAxMDAwMDg4MjgwMDAwMDAwMDAwMDAwMDA4RTkKKzoxMEJFQTAwMDAwMDAwMDUwMDAwMDAwMDAwMDAwMDAwMDAwMDA4ODEwQUEKKzoxMEJFQjAwMDAwMDAwMDAwMDAwMDAwMDQwMDAwODgxNDAwMDAwMDAwRTIKKzoxMEJFQzAwMDAwMDAwMDA0MDAwMDg4MTgwMDAwMDAwMDAwMDAwMDA0Q0EKKzoxMEJFRDAwMDAwMDA4ODFDMDAwMDAwMDAwMDAwMDAwODAwMDAzMDAwODYKKzoxMEJFRTAwMDAwNDAwMDAwMDAwMDAwMDgwMDAwMzAwODAwNDAwMDAwOTIKKzoxMEJFRjAwMDAwMDAwMDI4MDAwMDMzOTAwMUMwMDAxMDAwMDAwMDA4N0UKKzoxMEJGMDAwMDAwMDAzMjAwMDAyMDAwMDAwMDAwMDAyMDAwMDAzNzIwNjgKKzoxMEJGMTAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMTAyMDA2MjAwMDM4OEIKKzoxMEJGMjAwMDAwMDAwMDA4MDAwMEEwMDAwMDAwMDAwMDAwMDAyMDAwNDkKKzoxMEJGMzAwMDAwMDAzRUE5MDAwMDAwMDAwMDAwMDAwMTAwMDAzRUM4MTMKKzoxMEJGNDAwMDAwMDAwMDAwMDAwMDAwMDI4MDAwMDAwMDAwMDAwMDAwNkYKKzoxMEJGNTAwMDAwMDAwMDAwMDAwMDYwMDAwMDIwMDAwMDAwMDAwMDA4NTkKKzoxMEJGNjAwMDAwMDA0MDAwMDAwODAwMDAwMDAwMDAwMTAwMDA0MDAxNDcKKzoxMEJGNzAwMDAwMDgwMDAwMDAwMDAwMDEwMDAwNDA0MDAwMDgwMDA0MkMKKzoxMEJGODAwMDAwMDAwMDAyMDAwMDQwNjAwMDA4MDAwNDAwMDAwMDA0RkYKKzoxMEJGOTAwMDAwMDA0MDAwMDAwODAwMDAwMDAwMDAwNDAwMDA0MDA0MTEKKzoxMEJGQTAwMDAwMDgwMDAwMDAwMDAwMDQwMDAwNDA0MDAwMDAwMDAwMDUKKzoxMEJGQjAwMDAwMDAwMDA4MDAwMDQwNDgwMDAwMDAwMDAwMDAwMDA4RTkKKzoxMEJGQzAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAxMDAwMDA1MDQwNTEKKzoxMEJGRDAwMDAwMDEwMDA0MDAwMDAwMDEwMDAwNTAwMDAwMDAwMDAwMEIKKzoxMEJGRTAwMDAwMDAwMDIwMDAwMDUwMDgwMDEwMDAwMDAwMDAwMDA0QzUKKzoxMEJGRjAwMDAwMDA1MDBDMDAxMDAwMDAwMDAwMDAwMTAwMDA1MkM3QkIKKzoxMEMwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwNTJDNjAwMDAwMDAwMTcKKzoxMEMwMTAwMDAwMDAwMDAxMDAwMDMwMDAwMDMwMDAxODAwMDAwMDA0QTMKKzoxMEMwMjAwMDAwMDAzMDA0MDAzMDAwMTgwMDAwMDAwNDAwMDAzMDA4NTgKKzoxMEMwMzAwMDAwMzAwMDE4MDAwMDAwMDIwMDAwMzAwQTAwMzAwMDE4MzQKKzoxMEMwNDAwMDAwMDAwMDAyMDAwMDMwMEMwMDMwMDAxODAwMDAwMDAxNjkKKzoxMEMwNTAwMDAwMDAzMDBEMDAzMDAwMTgwMDAwMDAwMTAwMDAzMDBFMUMKKzoxMEMwNjAwMDAwMzAwMDE4MDAwMDAwMDEwMDAwMzAxMDAwMzAwMDE4RkYKKzoxMEMwNzAwMDAwMDAwMDA0MDAwMDMwMTQwMDMwMDAxODAwMDAwMDA0MkMKKzoxMEMwODAwMDAwMDA1MDAwMDEwMDAwODAwMDA4MDAwNDAwMDA1MDA0N0YKKzoxMEMwOTAwMDAxMDAwMDgwMDAwODAwMDQwMDAwMDAwQTAwMDAwMDAwMDkKKzoxMEMwQTAwMDAwMDAwMDAwMDAwMDUwNjgwMTAwMDA4MDAwMDAwMDAxNTYKKzoxMEMwQjAwMDAwMDA1MDY5MDEwMDAwODAwMDAwMDAwMTAwMDA1MDZDODkKKzoxMEMwQzAwMDAxMDAwMDgwMDAwMDAwMDIwMDAwNTA2RTAxMDAwMDgwQUUKKzoxMEMwRDAwMDAwMDAwMDAyMDAwMDUwNzAwMTAwMDA4MDAwMDAwMDA0MTkKKzoxMEMwRTAwMDAwMDA1MDc0MDEwMDAwODAwMDAwMDAwNDAwMDA1MDY2NTEKKzoxMEMwRjAwMDAxMDAwMDgwMDAwMDAwMDIwMDAwNTA2NDAxMDAwMDgwODgKKzoxMEMxMDAwMDAwMDAwMDAxMDAwMDUwNjAwMTAwMDA4MDAwMDAwMDAyRkIKKzoxMEMxMTAwMDAwMDA1MDYyMDEwMDAwODAwMDAwMDAwMjAwMDA1MDUwNEEKKzoxMEMxMjAwMDAxMDAwMDgwMDAwMDAwMDQwMDAwNTA1NDAxMDAwMDgwNjUKKzoxMEMxMzAwMDAwMDAwMDA0MDAwMDUwNTgwMTAwMDA4MDAwMDAwMDA0Q0UKKzoxMEMxNDAwMDAwMDA1MDVDMDEwMDAwODAwMDAwMDAwNDAwMDA1MDdDRjIKKzoxMEMxNTAwMDAxMDAwMDgwMDAwMDAwMDEwMDAwNTA3RDAxMDAwMDgwMEYKKzoxMEMxNjAwMDAwMDAwMDAxMDAwMDQwMTgwMDEwMDAwMDAwMDAwMDA0NjIKKzoxMEMxNzAwMDAwMDA0MDkwMDAxMDAwMDAwMDAwMDAwNDAwMDA0MDk4MDMKKzoxMEMxODAwMDAwMTAwMDAwMDAwMDAwMDQwMDAwNDExMDAwMDAwMDAwNEEKKzoxMEMxOTAwMDAwMDAwMDAyMDAwMDQxMTIwMDAwMDAwMDAwMDAwMDAyNDgKKzoxMEMxQTAwMDAwMDA0MTE0MDAwMDAwMDAwMDAwMDAwMjAwMDA0MTE2RTEKKzoxMEMxQjAwMDAwMDAwMDAwMDAwMDAwMDIwMDAwNjA0MDAwMDgwMDAwRDUKKzoxMEMxQzAwMDAwMDAwMDAyMDAwMDYwNDIwMDA4MDAwMDAwMDAwMDAyQzEKKzoxMEMxRDAwMDAwMDA2MDQ0MDAwODAwMDAwMDAwMDAwNDAwMDA2MDgwQ0YKKzoxMEMxRTAwMDAwMDgwMDAwMDAwMDAwMDgwMDAwNjBDMDAwNDAwMDA4RDcKKzoxMEMxRjAwMDAwMDAwMDA4MDAwMDYwMDAwMDA4MDAwMDAwMDAwMDAyQ0QKKzoxMEMyMDAwMDAwMDA2MDAyMDAwODAwMDAwMDAwMDAwMTAwMDA2MDA0NUYKKzoxMEMyMTAwMDAwMDgwMDAwMDAwMDAwMDIwMDAwNjM0MDAwMDgwMDAwNjkKKzoxMEMyMjAwMDAwMDAwMDA4MDAwMDYzODAwMDA4MDAwMDAwMDAwMDA0MTcKKzoxMEMyMzAwMDAwMDA2Mzg0MDAwODAwMDAwMDAwMDAwMTAwMDA2M0MwRUIKKzoxMEMyNDAwMDAwMDgwMDAwMDAwMDAwMDIwMDAwNjNDNDAwMDgwMDAwQjUKKzoxMEMyNTAwMDAwMDAwMDAyMDAwMDY0MDAwMDA4MDAwMDAwMDAwMDA0NkMKKzoxMEMyNjAwMDAwMDA3MDAwMDAxMDAwMDAwMDAwMDAwNDAwMDA3MDA0RDYKKzoxMEMyNzAwMDAwMTAwMDAwMDAwMDAwMDQwMDAwNzAwODAwMTAwMDAwMjIKKzoxMEMyODAwMDAwMDAwMDA0MDAwMDkwMDAwMDA4MDAwMDAwMDAwMDAyMTAKKzoxMEMyOTAwMDAwMDA5MDAyMDAwODAwMDAwMDAwMDAwMTAwMDA5MDA0NkYKKzoxMEMyQTAwMDAwMDgwMDAwMDAwMDAwMDIwMDAwOTA0MDAwMDgwMDAwQUMKKzoxMEMyQjAwMDAwMDAwMDAyMDAwMDkwNDQwMDA4MDAwMDAwMDAwMDAyOUUKKzoxMEMyQzAwMDAwMDA5MDQ2MDAwODAwMDAwMDAwMDAwMjAwMDA5NjQ4QjAKKzoxMEMyRDAwMDAwMDgwMDAwMDAwMDAwMDgwMDAwOTA4MDAwMDgwMDAwMzYKKzoxMEMyRTAwMDAwMDAwMDAyMDAwMDkwODQwMDA4MDAwMDAwMDAwMDAyMkUKKzoxMEMyRjAwMDAwMDA5Njg4MDAwODAwMDAwMDAwMDAwODAwMDA4MDQwNTAKKzoxMEMzMDAwMDAwMDgwMDAwMDAwMDAwMDEwMDAwODA0MTAwMDgwMDAwNUIKKzoxMEMzMTAwMDAwMDAwMDAxMDAwMDgwNDIwMDA4MDAwMDAwMDAwMDAxNTEKKzoxMEMzMjAwMDAwMDA4MDQzMDAwODAwMDAwMDAwMDAwMTAwMDA4MDAwQzEKKzoxMEMzMzAwMDAwMDgwMDAwMDAwMDAwMDIwMDAwODAwMjAwMDgwMDAwNjkKKzoxMEMzNDAwMDAwMDAwMDAxMDAwMDgwMDQwMDA4MDAwMDAwMDAwMDAyNUUKKzoxMEMzNTAwMDAwMDA4MEMwMDAwODAwMDAwMDAwMDAwMjAwMDA4MEMyNTEKKzoxMEMzNjAwMDAwMDgwMDAwMDAwMDAwMDIwMDAwODBDNDAwMDgwMDAwNzcKKzoxMEMzNzAwMDAwMDAwMDAyMDAwMDgwODAwMDA4MDAwMDAwMDAwMDAxQjIKKzoxMEMzODAwMDAwMDA4MDgxMDAwODAwMDAwMDAwMDAwMTAwMDA4MDgyQTEKKzoxMEMzOTAwMDAwMDgwMDAwMDAwMDAwMDEwMDAwODA4MzAwMDgwMDAwODkKKzoxMEMzQTAwMDAwMDAwMDAxMDAwMDgwODQwMDA4MDAwMDAwMDAwMDAxN0YKKzoxMEMzQjAwMDAwMDA4MDg1MDAwODAwMDAwMDAwMDAwMTAwMDA4MDg2NjkKKzoxMEMzQzAwMDAwMDgwMDAwMDAwMDAwMDEwMDAwNjAwMDAwMDgwMDAwRkMKKzoxMEMzRDAwMDAwMDAwMDAyMDAwMDYwMDIwMDA4MDAwMDAwMDAwMDAxRjAKKzoxMEMzRTAwMDAwMDA2MDA0MDAwODAwMDAwMDAwMDAwMjAwMDA2MDQyM0QKKzoxMEMzRjAwMDAwQzAwMDE4MDAwMDAwMDIwMDAwNjA0MDAwQzAwMDE4RUIKKzoxMEM0MDAwMDAwMDAwMDAyMDAwMDYwNEMwMEMwMDAxODAwMDAwMDA4OUUKKzoxMEM0MTAwMDAwMDA2MDQ0MDBDMDAwMTgwMDAwMDAwODAwMDA2MDU3RTEKKzoxMEM0MjAwMDAwQzAwMDE4MDAwMDAwMDEwMDAwNjA1NDAwQzAwMDE4QTcKKzoxMEM0MzAwMDAwMDAwMDAyMDAwMDYwNTYwMEMwMDAxODAwMDAwMDAxNkIKKzoxMEM0NDAwMDAwMDA2NjQwMDAwODAwMDAwMDAwMDAwODAwMDA2NjgwNTAKKzoxMEM0NTAwMDAwMDgwMDAwMDAwMDAwMDgwMDAwNjZDMDAwMDgwMDAwOUUKKzoxMEM0NjAwMDAwMDAwMDA4MDAwMERBNDIwMDE4MDAwMDAwMDAwMDAyOEUKKzoxMEM0NzAwMDAwMDBERTQwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMDAwQkUKKzoxMEM0ODAwMDAwMDAwMDAwMDAwMDAwMDQwMDAwRDBDMDAwMDAwMDAwMTgKKzoxMEM0OTAwMDAwMDAwMDA0MDAwMEQwQzQwMDAwMDAwMDAwMDAwMDA0MDAKKzoxMEM0QTAwMDAwMDBEMEM4MDAwMDAwMDAwMDAwMDAwNDAwMDBEMENDNTQKKzoxMEM0QjAwMDAwMDAwMDAwMDAwMDAwMDQwMDAwRDBEMDAwMDAwMDAwRDgKKzoxMEM0QzAwMDAwMDAwMDA0MDAwMEQwRDQwMDAwMDAwMDAwMDAwMDA0QzAKKzoxMEM0RDAwMDAwMDBEMEQ4MDAwMDAwMDAwMDAwMDAwNDAwMDBEMEMwMjAKKzoxMEM0RTAwMDAwMDAwMDAwMDAwMDAwMjAwMDAwREIwMDAwMDAwMDAwNTEKKzoxMEM0RjAwMDAwMDAwMDA0MDAwMERCMDAwMDAwMDAwMDAwMDAwMDY4RjUKKzoxMEM1MDAwMDAwMDBCOTQ4MDAwMDAwMDAwMDAwMDAwMDAwMDBEMDAwNUEKKzoxMEM1MTAwMDAwMDAwMDAwMDAwMDAwMDQwMDAwQjBDMDAwMDAwMDAwQTcKKzoxMEM1MjAwMDAwMDAwMDA0MDAwMEIwQzQwMDAwMDAwMDAwMDAwMDA0OEYKKzoxMEM1MzAwMDAwMDBCMEM4MDAwMDAwMDAwMDAwMDAwNDAwMDBCMEMwMEYKKzoxMEM1NDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwRDZCMDAwMDAwMDAwNTUKKzoxMEM1NTAwMDAwMDAwMDA0MDAwMEQ2QjQwMDAwMDAwMDAwMDAwMDA0NDkKKzoxMEM1NjAwMDAwMDBENkI4MDAwMDAwMDAwMDAwMDAwNDAwMDBENkJDQTcKKzoxMEM1NzAwMDAwMDAwMDAwMDAwMDAwMDQwMDAwRDZCMDAwMDAwMDAwMzEKKzoxMEM1ODAwMDAwMDAwMDEwMDAwMEQzNDgwMDAwMDAwMDAwMDAwMDA4NzgKKzoxMEM1OTAwMDAwMDBEMzU4MDAwMDAwMDAwMDAwMDA4MDAwMDAwMDEwRTAKKzoxMEM1QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDM1ODAwMDAwMDAwNjAKKzoxMEM1QjAwMDAwMDAwMDA4MDAwMDAwMDAwNjAyMDUwMDAwMDAwMDAwNjYKKzowMDAwMDAwMUZGCmRpZmYgLS1naXQgYS9mcy85cC9hY2wuYyBiL2ZzLzlwL2FjbC5jCmluZGV4IDEyZDYwMjMuLjZlNThjNGMgMTAwNjQ0Ci0tLSBhL2ZzLzlwL2FjbC5jCisrKyBiL2ZzLzlwL2FjbC5jCkBAIC05MSwxMSArOTEsMTQgQEAKIAlyZXR1cm4gYWNsOwogfQogCi1pbnQgdjlmc19jaGVja19hY2woc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spCitpbnQgdjlmc19jaGVja19hY2woc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2ssIHVuc2lnbmVkIGludCBmbGFncykKIHsKIAlzdHJ1Y3QgcG9zaXhfYWNsICphY2w7CiAJc3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlczsKIAorCWlmIChmbGFncyAmIElQRVJNX0ZMQUdfUkNVKQorCQlyZXR1cm4gLUVDSElMRDsKKwogCXY5c2VzID0gdjlmc19pbm9kZTJ2OXNlcyhpbm9kZSk7CiAJaWYgKCh2OXNlcy0+ZmxhZ3MgJiBWOUZTX0FDQ0VTU19NQVNLKSAhPSBWOUZTX0FDQ0VTU19DTElFTlQpIHsKIAkJLyoKZGlmZiAtLWdpdCBhL2ZzLzlwL2FjbC5oIGIvZnMvOXAvYWNsLmgKaW5kZXggNTllMThjMi4uN2VmM2FjOSAxMDA2NDQKLS0tIGEvZnMvOXAvYWNsLmgKKysrIGIvZnMvOXAvYWNsLmgKQEAgLTE2LDcgKzE2LDcgQEAKIAogI2lmZGVmIENPTkZJR185UF9GU19QT1NJWF9BQ0wKIGV4dGVybiBpbnQgdjlmc19nZXRfYWNsKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgcDlfZmlkICopOwotZXh0ZXJuIGludCB2OWZzX2NoZWNrX2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzayk7CitleHRlcm4gaW50IHY5ZnNfY2hlY2tfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOwogZXh0ZXJuIGludCB2OWZzX2FjbF9jaG1vZChzdHJ1Y3QgZGVudHJ5ICopOwogZXh0ZXJuIGludCB2OWZzX3NldF9jcmVhdGVfYWNsKHN0cnVjdCBkZW50cnkgKiwKIAkJCSAgICAgICBzdHJ1Y3QgcG9zaXhfYWNsICosIHN0cnVjdCBwb3NpeF9hY2wgKik7CmRpZmYgLS1naXQgYS9mcy85cC92ZnNfZGVudHJ5LmMgYi9mcy85cC92ZnNfZGVudHJ5LmMKaW5kZXggY2JmNGU1MC4uNDY2ZDJhNCAxMDA2NDQKLS0tIGEvZnMvOXAvdmZzX2RlbnRyeS5jCisrKyBiL2ZzLzlwL3Zmc19kZW50cnkuYwpAQCAtNTEsNyArNTEsNyBAQAogICoKICAqLwogCi1zdGF0aWMgaW50IHY5ZnNfZGVudHJ5X2RlbGV0ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCitzdGF0aWMgaW50IHY5ZnNfZGVudHJ5X2RlbGV0ZShjb25zdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiB7CiAJUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsICIgZGVudHJ5OiAlcyAoJXApXG4iLCBkZW50cnktPmRfbmFtZS5uYW1lLAogCQkJCQkJCQkJZGVudHJ5KTsKQEAgLTY4LDcgKzY4LDcgQEAKICAqCiAgKi8KIAotc3RhdGljIGludCB2OWZzX2NhY2hlZF9kZW50cnlfZGVsZXRlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3N0YXRpYyBpbnQgdjlmc19jYWNoZWRfZGVudHJ5X2RlbGV0ZShjb25zdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiB7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKIAlQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywgIiBkZW50cnk6ICVzICglcClcbiIsIGRlbnRyeS0+ZF9uYW1lLm5hbWUsCmRpZmYgLS1naXQgYS9mcy85cC92ZnNfaW5vZGUuYyBiL2ZzLzlwL3Zmc19pbm9kZS5jCmluZGV4IDM0YmY3MWIuLjU5NzgyOTggMTAwNjQ0Ci0tLSBhL2ZzLzlwL3Zmc19pbm9kZS5jCisrKyBiL2ZzLzlwL3Zmc19pbm9kZS5jCkBAIC0yMzcsOSArMjM3LDE2IEBACiAgKgogICovCiAKK3N0YXRpYyB2b2lkIHY5ZnNfaV9jYWxsYmFjayhzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgaW5vZGUsIGlfcmN1KTsKKwlJTklUX0xJU1RfSEVBRCgmaW5vZGUtPmlfZGVudHJ5KTsKKwlrbWVtX2NhY2hlX2ZyZWUodmNvb2tpZV9jYWNoZSwgdjlmc19pbm9kZTJjb29raWUoaW5vZGUpKTsKK30KKwogdm9pZCB2OWZzX2Rlc3Ryb3lfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIHsKLQlrbWVtX2NhY2hlX2ZyZWUodmNvb2tpZV9jYWNoZSwgdjlmc19pbm9kZTJjb29raWUoaW5vZGUpKTsKKwljYWxsX3JjdSgmaW5vZGUtPmlfcmN1LCB2OWZzX2lfY2FsbGJhY2spOwogfQogI2VuZGlmCiAKQEAgLTI3MCwxMSArMjc3LDExIEBACiB7CiAJc3RydWN0IGRlbnRyeSAqZGVudHJ5OwogCi0Jc3Bpbl9sb2NrKCZkY2FjaGVfbG9jayk7CisJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKIAkvKiBEaXJlY3Rvcnkgc2hvdWxkIGhhdmUgb25seSBvbmUgZW50cnkuICovCiAJQlVHX09OKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkgJiYgIWxpc3RfaXNfc2luZ3VsYXIoJmlub2RlLT5pX2RlbnRyeSkpOwogCWRlbnRyeSA9IGxpc3RfZW50cnkoaW5vZGUtPmlfZGVudHJ5Lm5leHQsIHN0cnVjdCBkZW50cnksIGRfYWxpYXMpOwotCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7CisJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwogCXJldHVybiBkZW50cnk7CiB9CiAKQEAgLTYyOCw5ICs2MzUsOSBAQAogCX0KIAogCWlmICh2OXNlcy0+Y2FjaGUpCi0JCWRlbnRyeS0+ZF9vcCA9ICZ2OWZzX2NhY2hlZF9kZW50cnlfb3BlcmF0aW9uczsKKwkJZF9zZXRfZF9vcChkZW50cnksICZ2OWZzX2NhY2hlZF9kZW50cnlfb3BlcmF0aW9ucyk7CiAJZWxzZQotCQlkZW50cnktPmRfb3AgPSAmdjlmc19kZW50cnlfb3BlcmF0aW9uczsKKwkJZF9zZXRfZF9vcChkZW50cnksICZ2OWZzX2RlbnRyeV9vcGVyYXRpb25zKTsKIAogCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7CiAJZXJyID0gdjlmc19maWRfYWRkKGRlbnRyeSwgZmlkKTsKQEAgLTc0Miw3ICs3NDksNyBAQAogCQkJCWVycik7CiAJCQlnb3RvIGVycm9yOwogCQl9Ci0JCWRlbnRyeS0+ZF9vcCA9ICZ2OWZzX2NhY2hlZF9kZW50cnlfb3BlcmF0aW9uczsKKwkJZF9zZXRfZF9vcChkZW50cnksICZ2OWZzX2NhY2hlZF9kZW50cnlfb3BlcmF0aW9ucyk7CiAJCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7CiAJCWVyciA9IHY5ZnNfZmlkX2FkZChkZW50cnksIGZpZCk7CiAJCWlmIChlcnIgPCAwKQpAQCAtNzYwLDcgKzc2Nyw3IEBACiAJCQllcnIgPSBQVFJfRVJSKGlub2RlKTsKIAkJCWdvdG8gZXJyb3I7CiAJCX0KLQkJZGVudHJ5LT5kX29wID0gJnY5ZnNfZGVudHJ5X29wZXJhdGlvbnM7CisJCWRfc2V0X2Rfb3AoZGVudHJ5LCAmdjlmc19kZW50cnlfb3BlcmF0aW9ucyk7CiAJCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7CiAJfQogCS8qIE5vdyBzZXQgdGhlIEFDTCBiYXNlZCBvbiB0aGUgZGVmYXVsdCB2YWx1ZSAqLwpAQCAtOTQ5LDcgKzk1Niw3IEBACiAJCQkJZXJyKTsKIAkJCWdvdG8gZXJyb3I7CiAJCX0KLQkJZGVudHJ5LT5kX29wID0gJnY5ZnNfY2FjaGVkX2RlbnRyeV9vcGVyYXRpb25zOworCQlkX3NldF9kX29wKGRlbnRyeSwgJnY5ZnNfY2FjaGVkX2RlbnRyeV9vcGVyYXRpb25zKTsKIAkJZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKIAkJZXJyID0gdjlmc19maWRfYWRkKGRlbnRyeSwgZmlkKTsKIAkJaWYgKGVyciA8IDApCkBAIC05NjYsNyArOTczLDcgQEAKIAkJCWVyciA9IFBUUl9FUlIoaW5vZGUpOwogCQkJZ290byBlcnJvcjsKIAkJfQotCQlkZW50cnktPmRfb3AgPSAmdjlmc19kZW50cnlfb3BlcmF0aW9uczsKKwkJZF9zZXRfZF9vcChkZW50cnksICZ2OWZzX2RlbnRyeV9vcGVyYXRpb25zKTsKIAkJZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKIAl9CiAJLyogTm93IHNldCB0aGUgQUNMIGJhc2VkIG9uIHRoZSBkZWZhdWx0IHZhbHVlICovCkBAIC0xMDM0LDkgKzEwNDEsOSBAQAogCiBpbnN0X291dDoKIAlpZiAodjlzZXMtPmNhY2hlKQotCQlkZW50cnktPmRfb3AgPSAmdjlmc19jYWNoZWRfZGVudHJ5X29wZXJhdGlvbnM7CisJCWRfc2V0X2Rfb3AoZGVudHJ5LCAmdjlmc19jYWNoZWRfZGVudHJ5X29wZXJhdGlvbnMpOwogCWVsc2UKLQkJZGVudHJ5LT5kX29wID0gJnY5ZnNfZGVudHJ5X29wZXJhdGlvbnM7CisJCWRfc2V0X2Rfb3AoZGVudHJ5LCAmdjlmc19kZW50cnlfb3BlcmF0aW9ucyk7CiAKIAlkX2FkZChkZW50cnksIGlub2RlKTsKIAlyZXR1cm4gTlVMTDsKQEAgLTE3MDIsNyArMTcwOSw3IEBACiAJCQkJCWVycik7CiAJCQlnb3RvIGVycm9yOwogCQl9Ci0JCWRlbnRyeS0+ZF9vcCA9ICZ2OWZzX2NhY2hlZF9kZW50cnlfb3BlcmF0aW9uczsKKwkJZF9zZXRfZF9vcChkZW50cnksICZ2OWZzX2NhY2hlZF9kZW50cnlfb3BlcmF0aW9ucyk7CiAJCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7CiAJCWVyciA9IHY5ZnNfZmlkX2FkZChkZW50cnksIGZpZCk7CiAJCWlmIChlcnIgPCAwKQpAQCAtMTcxNSw3ICsxNzIyLDcgQEAKIAkJCWVyciA9IFBUUl9FUlIoaW5vZGUpOwogCQkJZ290byBlcnJvcjsKIAkJfQotCQlkZW50cnktPmRfb3AgPSAmdjlmc19kZW50cnlfb3BlcmF0aW9uczsKKwkJZF9zZXRfZF9vcChkZW50cnksICZ2OWZzX2RlbnRyeV9vcGVyYXRpb25zKTsKIAkJZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKIAl9CiAKQEAgLTE4NDksNyArMTg1Niw3IEBACiAJCWlob2xkKG9sZF9kZW50cnktPmRfaW5vZGUpOwogCX0KIAotCWRlbnRyeS0+ZF9vcCA9IG9sZF9kZW50cnktPmRfb3A7CisJZF9zZXRfZF9vcChkZW50cnksIG9sZF9kZW50cnktPmRfb3ApOwogCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBvbGRfZGVudHJ5LT5kX2lub2RlKTsKIAogCXJldHVybiBlcnI7CkBAIC0xOTczLDcgKzE5ODAsNyBAQAogCQkJCWVycik7CiAJCQlnb3RvIGVycm9yOwogCQl9Ci0JCWRlbnRyeS0+ZF9vcCA9ICZ2OWZzX2NhY2hlZF9kZW50cnlfb3BlcmF0aW9uczsKKwkJZF9zZXRfZF9vcChkZW50cnksICZ2OWZzX2NhY2hlZF9kZW50cnlfb3BlcmF0aW9ucyk7CiAJCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7CiAJCWVyciA9IHY5ZnNfZmlkX2FkZChkZW50cnksIGZpZCk7CiAJCWlmIChlcnIgPCAwKQpAQCAtMTk4OSw3ICsxOTk2LDcgQEAKIAkJCWVyciA9IFBUUl9FUlIoaW5vZGUpOwogCQkJZ290byBlcnJvcjsKIAkJfQotCQlkZW50cnktPmRfb3AgPSAmdjlmc19kZW50cnlfb3BlcmF0aW9uczsKKwkJZF9zZXRfZF9vcChkZW50cnksICZ2OWZzX2RlbnRyeV9vcGVyYXRpb25zKTsKIAkJZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKIAl9CiAJLyogTm93IHNldCB0aGUgQUNMIGJhc2VkIG9uIHRoZSBkZWZhdWx0IHZhbHVlICovCmRpZmYgLS1naXQgYS9mcy9hZGZzL2Rpci5jIGIvZnMvYWRmcy9kaXIuYwppbmRleCBmNDI4N2U0Li5iZjc2OTNjIDEwMDY0NAotLS0gYS9mcy9hZGZzL2Rpci5jCisrKyBiL2ZzL2FkZnMvZGlyLmMKQEAgLTIwMSw3ICsyMDEsOCBAQAogfTsKIAogc3RhdGljIGludAotYWRmc19oYXNoKHN0cnVjdCBkZW50cnkgKnBhcmVudCwgc3RydWN0IHFzdHIgKnFzdHIpCithZGZzX2hhc2goY29uc3Qgc3RydWN0IGRlbnRyeSAqcGFyZW50LCBjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQlzdHJ1Y3QgcXN0ciAqcXN0cikKIHsKIAljb25zdCB1bnNpZ25lZCBpbnQgbmFtZV9sZW4gPSBBREZTX1NCKHBhcmVudC0+ZF9zYiktPnNfbmFtZWxlbjsKIAljb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lOwpAQCAtMjM3LDE3ICsyMzgsMTkgQEAKICAqIHJlcXVpcmVtZW50cyBvZiB0aGUgdW5kZXJseWluZyBmaWxlc3lzdGVtLgogICovCiBzdGF0aWMgaW50Ci1hZGZzX2NvbXBhcmUoc3RydWN0IGRlbnRyeSAqcGFyZW50LCBzdHJ1Y3QgcXN0ciAqZW50cnksIHN0cnVjdCBxc3RyICpuYW1lKQorYWRmc19jb21wYXJlKGNvbnN0IHN0cnVjdCBkZW50cnkgKnBhcmVudCwgY29uc3Qgc3RydWN0IGlub2RlICpwaW5vZGUsCisJCWNvbnN0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSwKKwkJdW5zaWduZWQgaW50IGxlbiwgY29uc3QgY2hhciAqc3RyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSkKIHsKIAlpbnQgaTsKIAotCWlmIChlbnRyeS0+bGVuICE9IG5hbWUtPmxlbikKKwlpZiAobGVuICE9IG5hbWUtPmxlbikKIAkJcmV0dXJuIDE7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbmFtZS0+bGVuOyBpKyspIHsKIAkJY2hhciBhLCBiOwogCi0JCWEgPSBlbnRyeS0+bmFtZVtpXTsKKwkJYSA9IHN0cltpXTsKIAkJYiA9IG5hbWUtPm5hbWVbaV07CiAKIAkJaWYgKGEgPj0gJ0EnICYmIGEgPD0gJ1onKQpAQCAtMjczLDcgKzI3Niw3IEBACiAJc3RydWN0IG9iamVjdF9pbmZvIG9iajsKIAlpbnQgZXJyb3I7CiAKLQlkZW50cnktPmRfb3AgPSAmYWRmc19kZW50cnlfb3BlcmF0aW9uczsJCisJZF9zZXRfZF9vcChkZW50cnksICZhZGZzX2RlbnRyeV9vcGVyYXRpb25zKTsKIAlsb2NrX2tlcm5lbCgpOwogCWVycm9yID0gYWRmc19kaXJfbG9va3VwX2J5bmFtZShkaXIsICZkZW50cnktPmRfbmFtZSwgJm9iaik7CiAJaWYgKGVycm9yID09IDApIHsKZGlmZiAtLWdpdCBhL2ZzL2FkZnMvc3VwZXIuYyBiL2ZzL2FkZnMvc3VwZXIuYwppbmRleCA5NTlkYmZmLi5hNDA0MWI1IDEwMDY0NAotLS0gYS9mcy9hZGZzL3N1cGVyLmMKKysrIGIvZnMvYWRmcy9zdXBlci5jCkBAIC0yNDAsOSArMjQwLDE2IEBACiAJcmV0dXJuICZlaS0+dmZzX2lub2RlOwogfQogCitzdGF0aWMgdm9pZCBhZGZzX2lfY2FsbGJhY2soc3RydWN0IHJjdV9oZWFkICpoZWFkKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGlub2RlLCBpX3JjdSk7CisJSU5JVF9MSVNUX0hFQUQoJmlub2RlLT5pX2RlbnRyeSk7CisJa21lbV9jYWNoZV9mcmVlKGFkZnNfaW5vZGVfY2FjaGVwLCBBREZTX0koaW5vZGUpKTsKK30KKwogc3RhdGljIHZvaWQgYWRmc19kZXN0cm95X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7Ci0Ja21lbV9jYWNoZV9mcmVlKGFkZnNfaW5vZGVfY2FjaGVwLCBBREZTX0koaW5vZGUpKTsKKwljYWxsX3JjdSgmaW5vZGUtPmlfcmN1LCBhZGZzX2lfY2FsbGJhY2spOwogfQogCiBzdGF0aWMgdm9pZCBpbml0X29uY2Uodm9pZCAqZm9vKQpAQCAtNDc3LDcgKzQ4NCw3IEBACiAJCWFkZnNfZXJyb3Ioc2IsICJnZXQgcm9vdCBpbm9kZSBmYWlsZWRcbiIpOwogCQlnb3RvIGVycm9yOwogCX0gZWxzZQotCQlzYi0+c19yb290LT5kX29wID0gJmFkZnNfZGVudHJ5X29wZXJhdGlvbnM7CisJCWRfc2V0X2Rfb3Aoc2ItPnNfcm9vdCwgJmFkZnNfZGVudHJ5X29wZXJhdGlvbnMpOwogCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZnMvYWZmcy9hbWlnYWZmcy5jIGIvZnMvYWZmcy9hbWlnYWZmcy5jCmluZGV4IDdkMGYwYTMuLjNhNDU1N2UgMTAwNjQ0Ci0tLSBhL2ZzL2FmZnMvYW1pZ2FmZnMuYworKysgYi9mcy9hZmZzL2FtaWdhZmZzLmMKQEAgLTEyOCw3ICsxMjgsNyBAQAogCXZvaWQgKmRhdGEgPSBkZW50cnktPmRfZnNkYXRhOwogCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsICpuZXh0OwogCi0Jc3Bpbl9sb2NrKCZkY2FjaGVfbG9jayk7CisJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKIAloZWFkID0gJmlub2RlLT5pX2RlbnRyeTsKIAluZXh0ID0gaGVhZC0+bmV4dDsKIAl3aGlsZSAobmV4dCAhPSBoZWFkKSB7CkBAIC0xMzksNyArMTM5LDcgQEAKIAkJfQogCQluZXh0ID0gbmV4dC0+bmV4dDsKIAl9Ci0Jc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKKwlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZnMvYWZmcy9uYW1laS5jIGIvZnMvYWZmcy9uYW1laS5jCmluZGV4IDkxNGQxYzAuLjk0NGE0MDQgMTAwNjQ0Ci0tLSBhL2ZzL2FmZnMvbmFtZWkuYworKysgYi9mcy9hZmZzL25hbWVpLmMKQEAgLTEzLDExICsxMywxOSBAQAogdHlwZWRlZiBpbnQgKCp0b3VwcGVyX3QpKGludCk7CiAKIHN0YXRpYyBpbnQJIGFmZnNfdG91cHBlcihpbnQgY2gpOwotc3RhdGljIGludAkgYWZmc19oYXNoX2RlbnRyeShzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBxc3RyICopOwotc3RhdGljIGludCAgICAgICBhZmZzX2NvbXBhcmVfZGVudHJ5KHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IHFzdHIgKiwgc3RydWN0IHFzdHIgKik7CitzdGF0aWMgaW50CSBhZmZzX2hhc2hfZGVudHJ5KGNvbnN0IHN0cnVjdCBkZW50cnkgKiwKKwkJY29uc3Qgc3RydWN0IGlub2RlICosIHN0cnVjdCBxc3RyICopOworc3RhdGljIGludCAgICAgICBhZmZzX2NvbXBhcmVfZGVudHJ5KGNvbnN0IHN0cnVjdCBkZW50cnkgKnBhcmVudCwKKwkJY29uc3Qgc3RydWN0IGlub2RlICpwaW5vZGUsCisJCWNvbnN0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSwKKwkJdW5zaWduZWQgaW50IGxlbiwgY29uc3QgY2hhciAqc3RyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSk7CiBzdGF0aWMgaW50CSBhZmZzX2ludGxfdG91cHBlcihpbnQgY2gpOwotc3RhdGljIGludAkgYWZmc19pbnRsX2hhc2hfZGVudHJ5KHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IHFzdHIgKik7Ci1zdGF0aWMgaW50ICAgICAgIGFmZnNfaW50bF9jb21wYXJlX2RlbnRyeShzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBxc3RyICosIHN0cnVjdCBxc3RyICopOworc3RhdGljIGludAkgYWZmc19pbnRsX2hhc2hfZGVudHJ5KGNvbnN0IHN0cnVjdCBkZW50cnkgKiwKKwkJY29uc3Qgc3RydWN0IGlub2RlICosIHN0cnVjdCBxc3RyICopOworc3RhdGljIGludCAgICAgICBhZmZzX2ludGxfY29tcGFyZV9kZW50cnkoY29uc3Qgc3RydWN0IGRlbnRyeSAqcGFyZW50LAorCQljb25zdCBzdHJ1Y3QgaW5vZGUgKnBpbm9kZSwKKwkJY29uc3Qgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQl1bnNpZ25lZCBpbnQgbGVuLCBjb25zdCBjaGFyICpzdHIsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKTsKIAogY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGFmZnNfZGVudHJ5X29wZXJhdGlvbnMgPSB7CiAJLmRfaGFzaAkJPSBhZmZzX2hhc2hfZGVudHJ5LApAQCAtNTgsMTMgKzY2LDEzIEBACiAgKiBOb3RlOiB0aGUgZGVudHJ5IGFyZ3VtZW50IGlzIHRoZSBwYXJlbnQgZGVudHJ5LgogICovCiBzdGF0aWMgaW5saW5lIGludAotX19hZmZzX2hhc2hfZGVudHJ5KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IHFzdHIgKnFzdHIsIHRvdXBwZXJfdCB0b3VwcGVyKQorX19hZmZzX2hhc2hfZGVudHJ5KHN0cnVjdCBxc3RyICpxc3RyLCB0b3VwcGVyX3QgdG91cHBlcikKIHsKIAljb25zdCB1OCAqbmFtZSA9IHFzdHItPm5hbWU7CiAJdW5zaWduZWQgbG9uZyBoYXNoOwogCWludCBpOwogCi0JaSA9IGFmZnNfY2hlY2tfbmFtZShxc3RyLT5uYW1lLHFzdHItPmxlbik7CisJaSA9IGFmZnNfY2hlY2tfbmFtZShxc3RyLT5uYW1lLCBxc3RyLT5sZW4pOwogCWlmIChpKQogCQlyZXR1cm4gaTsKIApAQCAtNzgsMzkgKzg2LDQxIEBACiB9CiAKIHN0YXRpYyBpbnQKLWFmZnNfaGFzaF9kZW50cnkoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgcXN0ciAqcXN0cikKK2FmZnNfaGFzaF9kZW50cnkoY29uc3Qgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQlzdHJ1Y3QgcXN0ciAqcXN0cikKIHsKLQlyZXR1cm4gX19hZmZzX2hhc2hfZGVudHJ5KGRlbnRyeSwgcXN0ciwgYWZmc190b3VwcGVyKTsKKwlyZXR1cm4gX19hZmZzX2hhc2hfZGVudHJ5KHFzdHIsIGFmZnNfdG91cHBlcik7CiB9CiBzdGF0aWMgaW50Ci1hZmZzX2ludGxfaGFzaF9kZW50cnkoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgcXN0ciAqcXN0cikKK2FmZnNfaW50bF9oYXNoX2RlbnRyeShjb25zdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCXN0cnVjdCBxc3RyICpxc3RyKQogewotCXJldHVybiBfX2FmZnNfaGFzaF9kZW50cnkoZGVudHJ5LCBxc3RyLCBhZmZzX2ludGxfdG91cHBlcik7CisJcmV0dXJuIF9fYWZmc19oYXNoX2RlbnRyeShxc3RyLCBhZmZzX2ludGxfdG91cHBlcik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50Ci1fX2FmZnNfY29tcGFyZV9kZW50cnkoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgcXN0ciAqYSwgc3RydWN0IHFzdHIgKmIsIHRvdXBwZXJfdCB0b3VwcGVyKQorc3RhdGljIGlubGluZSBpbnQgX19hZmZzX2NvbXBhcmVfZGVudHJ5KHVuc2lnbmVkIGludCBsZW4sCisJCWNvbnN0IGNoYXIgKnN0ciwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsIHRvdXBwZXJfdCB0b3VwcGVyKQogewotCWNvbnN0IHU4ICphbmFtZSA9IGEtPm5hbWU7Ci0JY29uc3QgdTggKmJuYW1lID0gYi0+bmFtZTsKLQlpbnQgbGVuOworCWNvbnN0IHU4ICphbmFtZSA9IHN0cjsKKwljb25zdCB1OCAqYm5hbWUgPSBuYW1lLT5uYW1lOwogCi0JLyogJ2EnIGlzIHRoZSBxc3RyIG9mIGFuIGFscmVhZHkgZXhpc3RpbmcgZGVudHJ5LCBzbyB0aGUgbmFtZQotCSAqIG11c3QgYmUgdmFsaWQuICdiJyBtdXN0IGJlIHZhbGlkYXRlZCBmaXJzdC4KKwkvKgorCSAqICdzdHInIGlzIHRoZSBuYW1lIG9mIGFuIGFscmVhZHkgZXhpc3RpbmcgZGVudHJ5LCBzbyB0aGUgbmFtZQorCSAqIG11c3QgYmUgdmFsaWQuICduYW1lJyBtdXN0IGJlIHZhbGlkYXRlZCBmaXJzdC4KIAkgKi8KIAotCWlmIChhZmZzX2NoZWNrX25hbWUoYi0+bmFtZSxiLT5sZW4pKQorCWlmIChhZmZzX2NoZWNrX25hbWUobmFtZS0+bmFtZSwgbmFtZS0+bGVuKSkKIAkJcmV0dXJuIDE7CiAKLQkvKiBJZiB0aGUgbmFtZXMgYXJlIGxvbmdlciB0aGFuIHRoZSBhbGxvd2VkIDMwIGNoYXJzLAorCS8qCisJICogSWYgdGhlIG5hbWVzIGFyZSBsb25nZXIgdGhhbiB0aGUgYWxsb3dlZCAzMCBjaGFycywKIAkgKiB0aGUgZXhjZXNzIGlzIGlnbm9yZWQsIHNvIHRoZWlyIGxlbmd0aCBtYXkgZGlmZmVyLgogCSAqLwotCWxlbiA9IGEtPmxlbjsKIAlpZiAobGVuID49IDMwKSB7Ci0JCWlmIChiLT5sZW4gPCAzMCkKKwkJaWYgKG5hbWUtPmxlbiA8IDMwKQogCQkJcmV0dXJuIDE7CiAJCWxlbiA9IDMwOwotCX0gZWxzZSBpZiAobGVuICE9IGItPmxlbikKKwl9IGVsc2UgaWYgKGxlbiAhPSBuYW1lLT5sZW4pCiAJCXJldHVybiAxOwogCiAJZm9yICg7IGxlbiA+IDA7IGxlbi0tKQpAQCAtMTIxLDE0ICsxMzEsMTggQEAKIH0KIAogc3RhdGljIGludAotYWZmc19jb21wYXJlX2RlbnRyeShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBxc3RyICphLCBzdHJ1Y3QgcXN0ciAqYikKK2FmZnNfY29tcGFyZV9kZW50cnkoY29uc3Qgc3RydWN0IGRlbnRyeSAqcGFyZW50LCBjb25zdCBzdHJ1Y3QgaW5vZGUgKnBpbm9kZSwKKwkJY29uc3Qgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQl1bnNpZ25lZCBpbnQgbGVuLCBjb25zdCBjaGFyICpzdHIsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKQogewotCXJldHVybiBfX2FmZnNfY29tcGFyZV9kZW50cnkoZGVudHJ5LCBhLCBiLCBhZmZzX3RvdXBwZXIpOworCXJldHVybiBfX2FmZnNfY29tcGFyZV9kZW50cnkobGVuLCBzdHIsIG5hbWUsIGFmZnNfdG91cHBlcik7CiB9CiBzdGF0aWMgaW50Ci1hZmZzX2ludGxfY29tcGFyZV9kZW50cnkoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgcXN0ciAqYSwgc3RydWN0IHFzdHIgKmIpCithZmZzX2ludGxfY29tcGFyZV9kZW50cnkoY29uc3Qgc3RydWN0IGRlbnRyeSAqcGFyZW50LGNvbnN0IHN0cnVjdCBpbm9kZSAqcGlub2RlLAorCQljb25zdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCXVuc2lnbmVkIGludCBsZW4sIGNvbnN0IGNoYXIgKnN0ciwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpCiB7Ci0JcmV0dXJuIF9fYWZmc19jb21wYXJlX2RlbnRyeShkZW50cnksIGEsIGIsIGFmZnNfaW50bF90b3VwcGVyKTsKKwlyZXR1cm4gX19hZmZzX2NvbXBhcmVfZGVudHJ5KGxlbiwgc3RyLCBuYW1lLCBhZmZzX2ludGxfdG91cHBlcik7CiB9CiAKIC8qCkBAIC0yMjYsNyArMjQwLDcgQEAKIAkJaWYgKElTX0VSUihpbm9kZSkpCiAJCQlyZXR1cm4gRVJSX0NBU1QoaW5vZGUpOwogCX0KLQlkZW50cnktPmRfb3AgPSBBRkZTX1NCKHNiKS0+c19mbGFncyAmIFNGX0lOVEwgPyAmYWZmc19pbnRsX2RlbnRyeV9vcGVyYXRpb25zIDogJmFmZnNfZGVudHJ5X29wZXJhdGlvbnM7CisJZF9zZXRfZF9vcChkZW50cnksIEFGRlNfU0Ioc2IpLT5zX2ZsYWdzICYgU0ZfSU5UTCA/ICZhZmZzX2ludGxfZGVudHJ5X29wZXJhdGlvbnMgOiAmYWZmc19kZW50cnlfb3BlcmF0aW9ucyk7CiAJZF9hZGQoZGVudHJ5LCBpbm9kZSk7CiAJcmV0dXJuIE5VTEw7CiB9CmRpZmYgLS1naXQgYS9mcy9hZmZzL3N1cGVyLmMgYi9mcy9hZmZzL3N1cGVyLmMKaW5kZXggMGNmN2Y0My4uZDM5MDgxYiAxMDA2NDQKLS0tIGEvZnMvYWZmcy9zdXBlci5jCisrKyBiL2ZzL2FmZnMvc3VwZXIuYwpAQCAtOTUsOSArOTUsMTYgQEAKIAlyZXR1cm4gJmktPnZmc19pbm9kZTsKIH0KIAorc3RhdGljIHZvaWQgYWZmc19pX2NhbGxiYWNrKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBpbm9kZSwgaV9yY3UpOworCUlOSVRfTElTVF9IRUFEKCZpbm9kZS0+aV9kZW50cnkpOworCWttZW1fY2FjaGVfZnJlZShhZmZzX2lub2RlX2NhY2hlcCwgQUZGU19JKGlub2RlKSk7Cit9CisKIHN0YXRpYyB2b2lkIGFmZnNfZGVzdHJveV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewotCWttZW1fY2FjaGVfZnJlZShhZmZzX2lub2RlX2NhY2hlcCwgQUZGU19JKGlub2RlKSk7CisJY2FsbF9yY3UoJmlub2RlLT5pX3JjdSwgYWZmc19pX2NhbGxiYWNrKTsKIH0KIAogc3RhdGljIHZvaWQgaW5pdF9vbmNlKHZvaWQgKmZvbykKQEAgLTQ3NSw3ICs0ODIsNyBAQAogCQlwcmludGsoS0VSTl9FUlIgIkFGRlM6IEdldCByb290IGlub2RlIGZhaWxlZFxuIik7CiAJCWdvdG8gb3V0X2Vycm9yOwogCX0KLQlzYi0+c19yb290LT5kX29wID0gJmFmZnNfZGVudHJ5X29wZXJhdGlvbnM7CisJZF9zZXRfZF9vcChzYi0+c19yb290LCAmYWZmc19kZW50cnlfb3BlcmF0aW9ucyk7CiAKIAlwcl9kZWJ1ZygiQUZGUzogc19mbGFncz0lbFhcbiIsc2ItPnNfZmxhZ3MpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZnMvYWZzL2Rpci5jIGIvZnMvYWZzL2Rpci5jCmluZGV4IDU0MzllMWIuLjM0YTMyNjMgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9kaXIuYworKysgYi9mcy9hZnMvZGlyLmMKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CkBAIC0yMyw3ICsyNCw3IEBACiBzdGF0aWMgaW50IGFmc19kaXJfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CiBzdGF0aWMgaW50IGFmc19yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpkaXJlbnQsIGZpbGxkaXJfdCBmaWxsZGlyKTsKIHN0YXRpYyBpbnQgYWZzX2RfcmV2YWxpZGF0ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBuYW1laWRhdGEgKm5kKTsKLXN0YXRpYyBpbnQgYWZzX2RfZGVsZXRlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7CitzdGF0aWMgaW50IGFmc19kX2RlbGV0ZShjb25zdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpOwogc3RhdGljIHZvaWQgYWZzX2RfcmVsZWFzZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpOwogc3RhdGljIGludCBhZnNfbG9va3VwX2ZpbGxkaXIodm9pZCAqX2Nvb2tpZSwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5sZW4sCiAJCQkJICBsb2ZmX3QgZnBvcywgdTY0IGlubywgdW5zaWduZWQgZHR5cGUpOwpAQCAtNTgxLDcgKzU4Miw3IEBACiAJfQogCiBzdWNjZXNzOgotCWRlbnRyeS0+ZF9vcCA9ICZhZnNfZnNfZGVudHJ5X29wZXJhdGlvbnM7CisJZF9zZXRfZF9vcChkZW50cnksICZhZnNfZnNfZGVudHJ5X29wZXJhdGlvbnMpOwogCiAJZF9hZGQoZGVudHJ5LCBpbm9kZSk7CiAJX2xlYXZlKCIgPSAwIHsgdm49JXUgdT0ldSB9IC0+IHsgaW5vPSVsdSB2PSVsbHUgfSIsCkBAIC02MDcsNiArNjA4LDkgQEAKIAl2b2lkICpkaXJfdmVyc2lvbjsKIAlpbnQgcmV0OwogCisJaWYgKG5kLT5mbGFncyAmIExPT0tVUF9SQ1UpCisJCXJldHVybiAtRUNISUxEOworCiAJdm5vZGUgPSBBRlNfRlNfSShkZW50cnktPmRfaW5vZGUpOwogCiAJaWYgKGRlbnRyeS0+ZF9pbm9kZSkKQEAgLTczMCw3ICs3MzQsNyBAQAogICogLSBjYWxsZWQgZnJvbSBkcHV0KCkgd2hlbiBkX2NvdW50IGlzIGdvaW5nIHRvIDAuCiAgKiAtIHJldHVybiAxIHRvIHJlcXVlc3QgZGVudHJ5IGJlIHVuaGFzaGVkLCAwIG90aGVyd2lzZQogICovCi1zdGF0aWMgaW50IGFmc19kX2RlbGV0ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCitzdGF0aWMgaW50IGFmc19kX2RlbGV0ZShjb25zdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiB7CiAJX2VudGVyKCIlcyIsIGRlbnRyeS0+ZF9uYW1lLm5hbWUpOwogCmRpZmYgLS1naXQgYS9mcy9hZnMvaW50ZXJuYWwuaCBiL2ZzL2Fmcy9pbnRlcm5hbC5oCmluZGV4IGNjYThlZWYuLjZkNGJjMWMgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9pbnRlcm5hbC5oCisrKyBiL2ZzL2Fmcy9pbnRlcm5hbC5oCkBAIC02MjQsNyArNjI0LDcgQEAKIGV4dGVybiB2b2lkIGFmc19jYWNoZV9wZXJtaXQoc3RydWN0IGFmc192bm9kZSAqLCBzdHJ1Y3Qga2V5ICosIGxvbmcpOwogZXh0ZXJuIHZvaWQgYWZzX3phcF9wZXJtaXRzKHN0cnVjdCByY3VfaGVhZCAqKTsKIGV4dGVybiBzdHJ1Y3Qga2V5ICphZnNfcmVxdWVzdF9rZXkoc3RydWN0IGFmc19jZWxsICopOwotZXh0ZXJuIGludCBhZnNfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKiwgaW50KTsKK2V4dGVybiBpbnQgYWZzX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICosIGludCwgdW5zaWduZWQgaW50KTsKIAogLyoKICAqIHNlcnZlci5jCmRpZmYgLS1naXQgYS9mcy9hZnMvc2VjdXJpdHkuYyBiL2ZzL2Fmcy9zZWN1cml0eS5jCmluZGV4IGJiNGVkMTQuLmY0NGI5ZDMgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9zZWN1cml0eS5jCisrKyBiL2ZzL2Fmcy9zZWN1cml0eS5jCkBAIC0yODUsMTMgKzI4NSwxNiBAQAogICogLSBBRlMgQUNMcyBhcmUgYXR0YWNoZWQgdG8gZGlyZWN0b3JpZXMgb25seSwgYW5kIGEgZmlsZSBpcyBjb250cm9sbGVkIGJ5IGl0cwogICogICBwYXJlbnQgZGlyZWN0b3J5J3MgQUNMCiAgKi8KLWludCBhZnNfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaykKK2ludCBhZnNfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaywgdW5zaWduZWQgaW50IGZsYWdzKQogewogCXN0cnVjdCBhZnNfdm5vZGUgKnZub2RlID0gQUZTX0ZTX0koaW5vZGUpOwogCWFmc19hY2Nlc3NfdCB1bmluaXRpYWxpemVkX3ZhcihhY2Nlc3MpOwogCXN0cnVjdCBrZXkgKmtleTsKIAlpbnQgcmV0OwogCisJaWYgKGZsYWdzICYgSVBFUk1fRkxBR19SQ1UpCisJCXJldHVybiAtRUNISUxEOworCiAJX2VudGVyKCJ7eyV4OiV1fSwlbHh9LCV4LCIsCiAJICAgICAgIHZub2RlLT5maWQudmlkLCB2bm9kZS0+ZmlkLnZub2RlLCB2bm9kZS0+ZmxhZ3MsIG1hc2spOwogCkBAIC0zNDcsNyArMzUwLDcgQEAKIAl9CiAKIAlrZXlfcHV0KGtleSk7Ci0JcmV0ID0gZ2VuZXJpY19wZXJtaXNzaW9uKGlub2RlLCBtYXNrLCBOVUxMKTsKKwlyZXQgPSBnZW5lcmljX3Blcm1pc3Npb24oaW5vZGUsIG1hc2ssIGZsYWdzLCBOVUxMKTsKIAlfbGVhdmUoIiA9ICVkIiwgcmV0KTsKIAlyZXR1cm4gcmV0OwogCmRpZmYgLS1naXQgYS9mcy9hZnMvc3VwZXIuYyBiL2ZzL2Fmcy9zdXBlci5jCmluZGV4IDI3MjAxY2ZmLi5mOTAxYTlkIDEwMDY0NAotLS0gYS9mcy9hZnMvc3VwZXIuYworKysgYi9mcy9hZnMvc3VwZXIuYwpAQCAtNDk4LDYgKzQ5OCwxNCBAQAogCXJldHVybiAmdm5vZGUtPnZmc19pbm9kZTsKIH0KIAorc3RhdGljIHZvaWQgYWZzX2lfY2FsbGJhY2soc3RydWN0IHJjdV9oZWFkICpoZWFkKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGlub2RlLCBpX3JjdSk7CisJc3RydWN0IGFmc192bm9kZSAqdm5vZGUgPSBBRlNfRlNfSShpbm9kZSk7CisJSU5JVF9MSVNUX0hFQUQoJmlub2RlLT5pX2RlbnRyeSk7CisJa21lbV9jYWNoZV9mcmVlKGFmc19pbm9kZV9jYWNoZXAsIHZub2RlKTsKK30KKwogLyoKICAqIGRlc3Ryb3kgYW4gQUZTIGlub2RlIHN0cnVjdAogICovCkBAIC01MTEsNyArNTE5LDcgQEAKIAogCUFTU0VSVENNUCh2bm9kZS0+c2VydmVyLCA9PSwgTlVMTCk7CiAKLQlrbWVtX2NhY2hlX2ZyZWUoYWZzX2lub2RlX2NhY2hlcCwgdm5vZGUpOworCWNhbGxfcmN1KCZpbm9kZS0+aV9yY3UsIGFmc19pX2NhbGxiYWNrKTsKIAlhdG9taWNfZGVjKCZhZnNfY291bnRfYWN0aXZlX2lub2Rlcyk7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2Fub25faW5vZGVzLmMgYi9mcy9hbm9uX2lub2Rlcy5jCmluZGV4IDU3Y2U1NWIuLjVmZDM4MTEyYSAxMDA2NDQKLS0tIGEvZnMvYW5vbl9pbm9kZXMuYworKysgYi9mcy9hbm9uX2lub2Rlcy5jCkBAIC0xMDIsNyArMTAyLDcgQEAKIAl0aGlzLm5hbWUgPSBuYW1lOwogCXRoaXMubGVuID0gc3RybGVuKG5hbWUpOwogCXRoaXMuaGFzaCA9IDA7Ci0JcGF0aC5kZW50cnkgPSBkX2FsbG9jKGFub25faW5vZGVfbW50LT5tbnRfc2ItPnNfcm9vdCwgJnRoaXMpOworCXBhdGguZGVudHJ5ID0gZF9hbGxvY19wc2V1ZG8oYW5vbl9pbm9kZV9tbnQtPm1udF9zYiwgJnRoaXMpOwogCWlmICghcGF0aC5kZW50cnkpCiAJCWdvdG8gZXJyX21vZHVsZTsKIApAQCAtMTEzLDcgKzExMyw3IEBACiAJICovCiAJaWhvbGQoYW5vbl9pbm9kZV9pbm9kZSk7CiAKLQlwYXRoLmRlbnRyeS0+ZF9vcCA9ICZhbm9uX2lub2RlZnNfZGVudHJ5X29wZXJhdGlvbnM7CisJZF9zZXRfZF9vcChwYXRoLmRlbnRyeSwgJmFub25faW5vZGVmc19kZW50cnlfb3BlcmF0aW9ucyk7CiAJZF9pbnN0YW50aWF0ZShwYXRoLmRlbnRyeSwgYW5vbl9pbm9kZV9pbm9kZSk7CiAKIAllcnJvciA9IC1FTkZJTEU7CkBAIC0yMzIsNyArMjMyLDcgQEAKIAlyZXR1cm4gMDsKIAogZXJyX21udHB1dDoKLQltbnRwdXQoYW5vbl9pbm9kZV9tbnQpOworCW1udHB1dF9sb25nKGFub25faW5vZGVfbW50KTsKIGVycl91bnJlZ2lzdGVyX2ZpbGVzeXN0ZW06CiAJdW5yZWdpc3Rlcl9maWxlc3lzdGVtKCZhbm9uX2lub2RlX2ZzX3R5cGUpOwogZXJyX2V4aXQ6CmRpZmYgLS1naXQgYS9mcy9hdXRvZnM0L2F1dG9mc19pLmggYi9mcy9hdXRvZnM0L2F1dG9mc19pLmgKaW5kZXggM2QyODNhYi4uMGZmZmUxYyAxMDA2NDQKLS0tIGEvZnMvYXV0b2ZzNC9hdXRvZnNfaS5oCisrKyBiL2ZzL2F1dG9mczQvYXV0b2ZzX2kuaApAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2F1dG9fZnM0Lmg+CiAjaW5jbHVkZSA8bGludXgvYXV0b19kZXYtaW9jdGwuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogCiAvKiBUaGlzIGlzIHRoZSByYW5nZSBvZiBpb2N0bCgpIG51bWJlcnMgd2UgY2xhaW0gYXMgb3VycyAqLwpAQCAtNjAsNiArNjEsOCBAQAogCQljdXJyZW50LT5waWQsIF9fZnVuY19fLCAjI2FyZ3MpOwlcCiB9IHdoaWxlICgwKQogCitleHRlcm4gc3BpbmxvY2tfdCBhdXRvZnM0X2xvY2s7CisKIC8qIFVuaWZpZWQgaW5mbyBzdHJ1Y3R1cmUuICBUaGlzIGlzIHBvaW50ZWQgdG8gYnkgYm90aCB0aGUgZGVudHJ5IGFuZAogICAgaW5vZGUgc3RydWN0dXJlcy4gIEVhY2ggZmlsZSBpbiB0aGUgZmlsZXN5c3RlbSBoYXMgYW4gaW5zdGFuY2Ugb2YgdGhpcwogICAgc3RydWN0dXJlLiAgSXQgaG9sZHMgYSByZWZlcmVuY2UgdG8gdGhlIGRlbnRyeSwgc28gZGVudHJpZXMgYXJlIG5ldmVyCkBAIC0yNTQsMTcgKzI1NywxNSBAQAogCXJldHVybiBkZW50cnktPmRfaW5vZGUgJiYgIWRfdW5oYXNoZWQoZGVudHJ5KTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgX19zaW1wbGVfZW1wdHkoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQorc3RhdGljIGlubGluZSB2b2lkIF9fYXV0b2ZzNF9hZGRfZXhwaXJpbmcoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogewotCXN0cnVjdCBkZW50cnkgKmNoaWxkOwotCWludCByZXQgPSAwOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShjaGlsZCwgJmRlbnRyeS0+ZF9zdWJkaXJzLCBkX3UuZF9jaGlsZCkKLQkJaWYgKHNpbXBsZV9wb3NpdGl2ZShjaGlsZCkpCi0JCQlnb3RvIG91dDsKLQlyZXQgPSAxOwotb3V0OgotCXJldHVybiByZXQ7CisJc3RydWN0IGF1dG9mc19zYl9pbmZvICpzYmkgPSBhdXRvZnM0X3NiaShkZW50cnktPmRfc2IpOworCXN0cnVjdCBhdXRvZnNfaW5mbyAqaW5vID0gYXV0b2ZzNF9kZW50cnlfaW5vKGRlbnRyeSk7CisJaWYgKGlubykgeworCQlpZiAobGlzdF9lbXB0eSgmaW5vLT5leHBpcmluZykpCisJCQlsaXN0X2FkZCgmaW5vLT5leHBpcmluZywgJnNiaS0+ZXhwaXJpbmdfbGlzdCk7CisJfQorCXJldHVybjsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGF1dG9mczRfYWRkX2V4cGlyaW5nKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKZGlmZiAtLWdpdCBhL2ZzL2F1dG9mczQvZXhwaXJlLmMgYi9mcy9hdXRvZnM0L2V4cGlyZS5jCmluZGV4IGE3OTZjOTQuLmNjMWQwMTMgMTAwNjQ0Ci0tLSBhL2ZzL2F1dG9mczQvZXhwaXJlLmMKKysrIGIvZnMvYXV0b2ZzNC9leHBpcmUuYwpAQCAtOTEsMjQgKzkxLDY0IEBACiB9CiAKIC8qCi0gKiBDYWxjdWxhdGUgbmV4dCBlbnRyeSBpbiB0b3AgZG93biB0cmVlIHRyYXZlcnNhbC4KLSAqIEZyb20gbmV4dF9tbnQgaW4gbmFtZXNwYWNlLmMgLSBlbGVnYW50LgorICogQ2FsY3VsYXRlIGFuZCBkZ2V0IG5leHQgZW50cnkgaW4gdG9wIGRvd24gdHJlZSB0cmF2ZXJzYWwuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpuZXh0X2RlbnRyeShzdHJ1Y3QgZGVudHJ5ICpwLCBzdHJ1Y3QgZGVudHJ5ICpyb290KQorc3RhdGljIHN0cnVjdCBkZW50cnkgKmdldF9uZXh0X3Bvc2l0aXZlX2RlbnRyeShzdHJ1Y3QgZGVudHJ5ICpwcmV2LAorCQkJCQkJc3RydWN0IGRlbnRyeSAqcm9vdCkKIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpuZXh0ID0gcC0+ZF9zdWJkaXJzLm5leHQ7CisJc3RydWN0IGxpc3RfaGVhZCAqbmV4dDsKKwlzdHJ1Y3QgZGVudHJ5ICpwLCAqcmV0OwogCisJaWYgKHByZXYgPT0gTlVMTCkKKwkJcmV0dXJuIGRnZXQocHJldik7CisKKwlzcGluX2xvY2soJmF1dG9mczRfbG9jayk7CityZWxvY2s6CisJcCA9IHByZXY7CisJc3Bpbl9sb2NrKCZwLT5kX2xvY2spOworYWdhaW46CisJbmV4dCA9IHAtPmRfc3ViZGlycy5uZXh0OwogCWlmIChuZXh0ID09ICZwLT5kX3N1YmRpcnMpIHsKIAkJd2hpbGUgKDEpIHsKLQkJCWlmIChwID09IHJvb3QpCisJCQlzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQ7CisKKwkJCWlmIChwID09IHJvb3QpIHsKKwkJCQlzcGluX3VubG9jaygmcC0+ZF9sb2NrKTsKKwkJCQlzcGluX3VubG9jaygmYXV0b2ZzNF9sb2NrKTsKKwkJCQlkcHV0KHByZXYpOwogCQkJCXJldHVybiBOVUxMOworCQkJfQorCisJCQlwYXJlbnQgPSBwLT5kX3BhcmVudDsKKwkJCWlmICghc3Bpbl90cnlsb2NrKCZwYXJlbnQtPmRfbG9jaykpIHsKKwkJCQlzcGluX3VubG9jaygmcC0+ZF9sb2NrKTsKKwkJCQljcHVfcmVsYXgoKTsKKwkJCQlnb3RvIHJlbG9jazsKKwkJCX0KKwkJCXNwaW5fdW5sb2NrKCZwLT5kX2xvY2spOwogCQkJbmV4dCA9IHAtPmRfdS5kX2NoaWxkLm5leHQ7Ci0JCQlpZiAobmV4dCAhPSAmcC0+ZF9wYXJlbnQtPmRfc3ViZGlycykKKwkJCXAgPSBwYXJlbnQ7CisJCQlpZiAobmV4dCAhPSAmcGFyZW50LT5kX3N1YmRpcnMpCiAJCQkJYnJlYWs7Ci0JCQlwID0gcC0+ZF9wYXJlbnQ7CiAJCX0KIAl9Ci0JcmV0dXJuIGxpc3RfZW50cnkobmV4dCwgc3RydWN0IGRlbnRyeSwgZF91LmRfY2hpbGQpOworCXJldCA9IGxpc3RfZW50cnkobmV4dCwgc3RydWN0IGRlbnRyeSwgZF91LmRfY2hpbGQpOworCisJc3Bpbl9sb2NrX25lc3RlZCgmcmV0LT5kX2xvY2ssIERFTlRSWV9EX0xPQ0tfTkVTVEVEKTsKKwkvKiBOZWdhdGl2ZSBkZW50cnkgLSB0cnkgbmV4dCAqLworCWlmICghc2ltcGxlX3Bvc2l0aXZlKHJldCkpIHsKKwkJc3Bpbl91bmxvY2soJnJldC0+ZF9sb2NrKTsKKwkJcCA9IHJldDsKKwkJZ290byBhZ2FpbjsKKwl9CisJZGdldF9kbG9jayhyZXQpOworCXNwaW5fdW5sb2NrKCZyZXQtPmRfbG9jayk7CisJc3Bpbl91bmxvY2soJnAtPmRfbG9jayk7CisJc3Bpbl91bmxvY2soJmF1dG9mczRfbG9jayk7CisKKwlkcHV0KHByZXYpOworCisJcmV0dXJuIHJldDsKIH0KIAogLyoKQEAgLTE1OCwxOCArMTk4LDExIEBACiAJaWYgKCFzaW1wbGVfcG9zaXRpdmUodG9wKSkKIAkJcmV0dXJuIDE7CiAKLQlzcGluX2xvY2soJmRjYWNoZV9sb2NrKTsKLQlmb3IgKHAgPSB0b3A7IHA7IHAgPSBuZXh0X2RlbnRyeShwLCB0b3ApKSB7Ci0JCS8qIE5lZ2F0aXZlIGRlbnRyeSAtIGdpdmUgdXAgKi8KLQkJaWYgKCFzaW1wbGVfcG9zaXRpdmUocCkpCi0JCQljb250aW51ZTsKLQorCXAgPSBOVUxMOworCXdoaWxlICgocCA9IGdldF9uZXh0X3Bvc2l0aXZlX2RlbnRyeShwLCB0b3ApKSkgewogCQlEUFJJTlRLKCJkZW50cnkgJXAgJS4qcyIsCiAJCQlwLCAoaW50KSBwLT5kX25hbWUubGVuLCBwLT5kX25hbWUubmFtZSk7CiAKLQkJcCA9IGRnZXQocCk7Ci0JCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7Ci0KIAkJLyoKIAkJICogSXMgc29tZW9uZSB2aXNpdGluZyBhbnl3aGVyZSBpbiB0aGUgc3VidHJlZSA/CiAJCSAqIElmIHRoZXJlJ3Mgbm8gbW91bnQgd2UgbmVlZCB0byBjaGVjayB0aGUgdXNhZ2UKQEAgLTE5OCwxNiArMjMxLDEzIEBACiAJCQllbHNlCiAJCQkJaW5vX2NvdW50Kys7CiAKLQkJCWlmIChhdG9taWNfcmVhZCgmcC0+ZF9jb3VudCkgPiBpbm9fY291bnQpIHsKKwkJCWlmIChwLT5kX2NvdW50ID4gaW5vX2NvdW50KSB7CiAJCQkJdG9wX2luby0+bGFzdF91c2VkID0gamlmZmllczsKIAkJCQlkcHV0KHApOwogCQkJCXJldHVybiAxOwogCQkJfQogCQl9Ci0JCWRwdXQocCk7Ci0JCXNwaW5fbG9jaygmZGNhY2hlX2xvY2spOwogCX0KLQlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOwogCiAJLyogVGltZW91dCBvZiBhIHRyZWUgbW91bnQgaXMgdWx0aW1hdGVseSBkZXRlcm1pbmVkIGJ5IGl0cyB0b3AgZGVudHJ5ICovCiAJaWYgKCFhdXRvZnM0X2Nhbl9leHBpcmUodG9wLCB0aW1lb3V0LCBkb19ub3cpKQpAQCAtMjI2LDMyICsyNTYsMjEgQEAKIAlEUFJJTlRLKCJwYXJlbnQgJXAgJS4qcyIsCiAJCXBhcmVudCwgKGludClwYXJlbnQtPmRfbmFtZS5sZW4sIHBhcmVudC0+ZF9uYW1lLm5hbWUpOwogCi0Jc3Bpbl9sb2NrKCZkY2FjaGVfbG9jayk7Ci0JZm9yIChwID0gcGFyZW50OyBwOyBwID0gbmV4dF9kZW50cnkocCwgcGFyZW50KSkgewotCQkvKiBOZWdhdGl2ZSBkZW50cnkgLSBnaXZlIHVwICovCi0JCWlmICghc2ltcGxlX3Bvc2l0aXZlKHApKQotCQkJY29udGludWU7Ci0KKwlwID0gTlVMTDsKKwl3aGlsZSAoKHAgPSBnZXRfbmV4dF9wb3NpdGl2ZV9kZW50cnkocCwgcGFyZW50KSkpIHsKIAkJRFBSSU5USygiZGVudHJ5ICVwICUuKnMiLAogCQkJcCwgKGludCkgcC0+ZF9uYW1lLmxlbiwgcC0+ZF9uYW1lLm5hbWUpOwogCi0JCXAgPSBkZ2V0KHApOwotCQlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOwotCiAJCWlmIChkX21vdW50cG9pbnQocCkpIHsKIAkJCS8qIENhbiB3ZSB1bW91bnQgdGhpcyBndXkgKi8KIAkJCWlmIChhdXRvZnM0X21vdW50X2J1c3kobW50LCBwKSkKLQkJCQlnb3RvIGNvbnQ7CisJCQkJY29udGludWU7CiAKIAkJCS8qIENhbiB3ZSBleHBpcmUgdGhpcyBndXkgKi8KIAkJCWlmIChhdXRvZnM0X2Nhbl9leHBpcmUocCwgdGltZW91dCwgZG9fbm93KSkKIAkJCQlyZXR1cm4gcDsKIAkJfQotY29udDoKLQkJZHB1dChwKTsKLQkJc3Bpbl9sb2NrKCZkY2FjaGVfbG9jayk7CiAJfQotCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7CiAJcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTI3Niw3ICsyOTUsOSBAQAogCQlzdHJ1Y3QgYXV0b2ZzX2luZm8gKmlubyA9IGF1dG9mczRfZGVudHJ5X2lubyhyb290KTsKIAkJaWYgKGRfbW91bnRwb2ludChyb290KSkgewogCQkJaW5vLT5mbGFncyB8PSBBVVRPRlNfSU5GX01PVU5UUE9JTlQ7Ci0JCQlyb290LT5kX21vdW50ZWQtLTsKKwkJCXNwaW5fbG9jaygmcm9vdC0+ZF9sb2NrKTsKKwkJCXJvb3QtPmRfZmxhZ3MgJj0gfkRDQUNIRV9NT1VOVEVEOworCQkJc3Bpbl91bmxvY2soJnJvb3QtPmRfbG9jayk7CiAJCX0KIAkJaW5vLT5mbGFncyB8PSBBVVRPRlNfSU5GX0VYUElSSU5HOwogCQlpbml0X2NvbXBsZXRpb24oJmluby0+ZXhwaXJlX2NvbXBsZXRlKTsKQEAgLTMwMiw4ICszMjMsOCBAQAogewogCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKIAlzdHJ1Y3QgZGVudHJ5ICpyb290ID0gc2ItPnNfcm9vdDsKKwlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CiAJc3RydWN0IGRlbnRyeSAqZXhwaXJlZCA9IE5VTEw7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbmV4dDsKIAlpbnQgZG9fbm93ID0gaG93ICYgQVVUT0ZTX0VYUF9JTU1FRElBVEU7CiAJaW50IGV4cF9sZWF2ZXMgPSBob3cgJiBBVVRPRlNfRVhQX0xFQVZFUzsKIAlzdHJ1Y3QgYXV0b2ZzX2luZm8gKmlubzsKQEAgLTMxNSwyMyArMzM2LDggQEAKIAlub3cgPSBqaWZmaWVzOwogCXRpbWVvdXQgPSBzYmktPmV4cF90aW1lb3V0OwogCi0Jc3Bpbl9sb2NrKCZkY2FjaGVfbG9jayk7Ci0JbmV4dCA9IHJvb3QtPmRfc3ViZGlycy5uZXh0OwotCi0JLyogT24gZXhpdCBmcm9tIHRoZSBsb29wIGV4cGlyZSBpcyBzZXQgdG8gYSBkZ290IGRlbnRyeQotCSAqIHRvIGV4cGlyZSBvciBpdCdzIE5VTEwgKi8KLQl3aGlsZSAoIG5leHQgIT0gJnJvb3QtPmRfc3ViZGlycyApIHsKLQkJc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gbGlzdF9lbnRyeShuZXh0LCBzdHJ1Y3QgZGVudHJ5LCBkX3UuZF9jaGlsZCk7Ci0KLQkJLyogTmVnYXRpdmUgZGVudHJ5IC0gZ2l2ZSB1cCAqLwotCQlpZiAoIXNpbXBsZV9wb3NpdGl2ZShkZW50cnkpKSB7Ci0JCQluZXh0ID0gbmV4dC0+bmV4dDsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJZGVudHJ5ID0gZGdldChkZW50cnkpOwotCQlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOwotCisJZGVudHJ5ID0gTlVMTDsKKwl3aGlsZSAoKGRlbnRyeSA9IGdldF9uZXh0X3Bvc2l0aXZlX2RlbnRyeShkZW50cnksIHJvb3QpKSkgewogCQlzcGluX2xvY2soJnNiaS0+ZnNfbG9jayk7CiAJCWlubyA9IGF1dG9mczRfZGVudHJ5X2lubyhkZW50cnkpOwogCkBAIC0zNDcsNyArMzUzLDcgQEAKIAogCQkJLyogUGF0aCB3YWxrIGN1cnJlbnRseSBvbiB0aGlzIGRlbnRyeT8gKi8KIAkJCWlub19jb3VudCA9IGF0b21pY19yZWFkKCZpbm8tPmNvdW50KSArIDI7Ci0JCQlpZiAoYXRvbWljX3JlYWQoJmRlbnRyeS0+ZF9jb3VudCkgPiBpbm9fY291bnQpCisJCQlpZiAoZGVudHJ5LT5kX2NvdW50ID4gaW5vX2NvdW50KQogCQkJCWdvdG8gbmV4dDsKIAogCQkJLyogQ2FuIHdlIHVtb3VudCB0aGlzIGd1eSAqLwpAQCAtMzY5LDcgKzM3NSw3IEBACiAJCWlmICghZXhwX2xlYXZlcykgewogCQkJLyogUGF0aCB3YWxrIGN1cnJlbnRseSBvbiB0aGlzIGRlbnRyeT8gKi8KIAkJCWlub19jb3VudCA9IGF0b21pY19yZWFkKCZpbm8tPmNvdW50KSArIDE7Ci0JCQlpZiAoYXRvbWljX3JlYWQoJmRlbnRyeS0+ZF9jb3VudCkgPiBpbm9fY291bnQpCisJCQlpZiAoZGVudHJ5LT5kX2NvdW50ID4gaW5vX2NvdW50KQogCQkJCWdvdG8gbmV4dDsKIAogCQkJaWYgKCFhdXRvZnM0X3RyZWVfYnVzeShtbnQsIGRlbnRyeSwgdGltZW91dCwgZG9fbm93KSkgewpAQCAtMzgzLDcgKzM4OSw3IEBACiAJCX0gZWxzZSB7CiAJCQkvKiBQYXRoIHdhbGsgY3VycmVudGx5IG9uIHRoaXMgZGVudHJ5PyAqLwogCQkJaW5vX2NvdW50ID0gYXRvbWljX3JlYWQoJmluby0+Y291bnQpICsgMTsKLQkJCWlmIChhdG9taWNfcmVhZCgmZGVudHJ5LT5kX2NvdW50KSA+IGlub19jb3VudCkKKwkJCWlmIChkZW50cnktPmRfY291bnQgPiBpbm9fY291bnQpCiAJCQkJZ290byBuZXh0OwogCiAJCQlleHBpcmVkID0gYXV0b2ZzNF9jaGVja19sZWF2ZXMobW50LCBkZW50cnksIHRpbWVvdXQsIGRvX25vdyk7CkBAIC0zOTQsMTEgKzQwMCw3IEBACiAJCX0KIG5leHQ6CiAJCXNwaW5fdW5sb2NrKCZzYmktPmZzX2xvY2spOwotCQlkcHV0KGRlbnRyeSk7Ci0JCXNwaW5fbG9jaygmZGNhY2hlX2xvY2spOwotCQluZXh0ID0gbmV4dC0+bmV4dDsKIAl9Ci0Jc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKIAlyZXR1cm4gTlVMTDsKIAogZm91bmQ6CkBAIC00MDgsOSArNDEwLDEzIEBACiAJaW5vLT5mbGFncyB8PSBBVVRPRlNfSU5GX0VYUElSSU5HOwogCWluaXRfY29tcGxldGlvbigmaW5vLT5leHBpcmVfY29tcGxldGUpOwogCXNwaW5fdW5sb2NrKCZzYmktPmZzX2xvY2spOwotCXNwaW5fbG9jaygmZGNhY2hlX2xvY2spOworCXNwaW5fbG9jaygmYXV0b2ZzNF9sb2NrKTsKKwlzcGluX2xvY2soJmV4cGlyZWQtPmRfcGFyZW50LT5kX2xvY2spOworCXNwaW5fbG9ja19uZXN0ZWQoJmV4cGlyZWQtPmRfbG9jaywgREVOVFJZX0RfTE9DS19ORVNURUQpOwogCWxpc3RfbW92ZSgmZXhwaXJlZC0+ZF9wYXJlbnQtPmRfc3ViZGlycywgJmV4cGlyZWQtPmRfdS5kX2NoaWxkKTsKLQlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOworCXNwaW5fdW5sb2NrKCZleHBpcmVkLT5kX2xvY2spOworCXNwaW5fdW5sb2NrKCZleHBpcmVkLT5kX3BhcmVudC0+ZF9sb2NrKTsKKwlzcGluX3VubG9jaygmYXV0b2ZzNF9sb2NrKTsKIAlyZXR1cm4gZXhwaXJlZDsKIH0KIApAQCAtNDk5LDcgKzUwNSwxNCBAQAogCiAJCXNwaW5fbG9jaygmc2JpLT5mc19sb2NrKTsKIAkJaWYgKGluby0+ZmxhZ3MgJiBBVVRPRlNfSU5GX01PVU5UUE9JTlQpIHsKLQkJCXNiLT5zX3Jvb3QtPmRfbW91bnRlZCsrOworCQkJc3Bpbl9sb2NrKCZzYi0+c19yb290LT5kX2xvY2spOworCQkJLyoKKwkJCSAqIElmIHdlIGhhdmVuJ3QgYmVlbiBleHBpcmVkIGF3YXksIHRoZW4gcmVzZXQKKwkJCSAqIG1vdW50ZWQgc3RhdHVzLgorCQkJICovCisJCQlpZiAobW50LT5tbnRfcGFyZW50ICE9IG1udCkKKwkJCQlzYi0+c19yb290LT5kX2ZsYWdzIHw9IERDQUNIRV9NT1VOVEVEOworCQkJc3Bpbl91bmxvY2soJnNiLT5zX3Jvb3QtPmRfbG9jayk7CiAJCQlpbm8tPmZsYWdzICY9IH5BVVRPRlNfSU5GX01PVU5UUE9JTlQ7CiAJCX0KIAkJaW5vLT5mbGFncyAmPSB+QVVUT0ZTX0lORl9FWFBJUklORzsKZGlmZiAtLWdpdCBhL2ZzL2F1dG9mczQvaW5vZGUuYyBiL2ZzL2F1dG9mczQvaW5vZGUuYwppbmRleCBhYzg3ZTQ5Li5hN2JkYjlkIDEwMDY0NAotLS0gYS9mcy9hdXRvZnM0L2lub2RlLmMKKysrIGIvZnMvYXV0b2ZzNC9pbm9kZS5jCkBAIC0zMDksNyArMzA5LDcgQEAKIAkJZ290byBmYWlsX2lwdXQ7CiAJcGlwZSA9IE5VTEw7CiAKLQlyb290LT5kX29wID0gJmF1dG9mczRfc2JfZGVudHJ5X29wZXJhdGlvbnM7CisJZF9zZXRfZF9vcChyb290LCAmYXV0b2ZzNF9zYl9kZW50cnlfb3BlcmF0aW9ucyk7CiAJcm9vdC0+ZF9mc2RhdGEgPSBpbm87CiAKIAkvKiBDYW4gdGhpcyBjYWxsIGJsb2NrPyAqLwpkaWZmIC0tZ2l0IGEvZnMvYXV0b2ZzNC9yb290LmMgYi9mcy9hdXRvZnM0L3Jvb3QuYwppbmRleCBkMzQ4OTZjLi42NTFlNGVmIDEwMDY0NAotLS0gYS9mcy9hdXRvZnM0L3Jvb3QuYworKysgYi9mcy9hdXRvZnM0L3Jvb3QuYwpAQCAtMjMsNiArMjMsOCBAQAogCiAjaW5jbHVkZSAiYXV0b2ZzX2kuaCIKIAorREVGSU5FX1NQSU5MT0NLKGF1dG9mczRfbG9jayk7CisKIHN0YXRpYyBpbnQgYXV0b2ZzNF9kaXJfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKixzdHJ1Y3QgZGVudHJ5ICosY29uc3QgY2hhciAqKTsKIHN0YXRpYyBpbnQgYXV0b2ZzNF9kaXJfdW5saW5rKHN0cnVjdCBpbm9kZSAqLHN0cnVjdCBkZW50cnkgKik7CiBzdGF0aWMgaW50IGF1dG9mczRfZGlyX3JtZGlyKHN0cnVjdCBpbm9kZSAqLHN0cnVjdCBkZW50cnkgKik7CkBAIC0xNDIsMTIgKzE0NCwxNSBAQAogCSAqIGF1dG9mcyBmaWxlIHN5c3RlbSBzbyBqdXN0IGxldCB0aGUgbGliZnMgcm91dGluZXMgaGFuZGxlCiAJICogaXQuCiAJICovCi0Jc3Bpbl9sb2NrKCZkY2FjaGVfbG9jayk7CisJc3Bpbl9sb2NrKCZhdXRvZnM0X2xvY2spOworCXNwaW5fbG9jaygmZGVudHJ5LT5kX2xvY2spOwogCWlmICghZF9tb3VudHBvaW50KGRlbnRyeSkgJiYgbGlzdF9lbXB0eSgmZGVudHJ5LT5kX3N1YmRpcnMpKSB7Ci0JCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7CisJCXNwaW5fdW5sb2NrKCZkZW50cnktPmRfbG9jayk7CisJCXNwaW5fdW5sb2NrKCZhdXRvZnM0X2xvY2spOwogCQlyZXR1cm4gLUVOT0VOVDsKIAl9Ci0Jc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKKwlzcGluX3VubG9jaygmZGVudHJ5LT5kX2xvY2spOworCXNwaW5fdW5sb2NrKCZhdXRvZnM0X2xvY2spOwogCiBvdXQ6CiAJcmV0dXJuIGRjYWNoZV9kaXJfb3Blbihpbm9kZSwgZmlsZSk7CkBAIC0yNTIsOSArMjU3LDExIEBACiAJLyogV2UgdHJpZ2dlciBhIG1vdW50IGZvciBhbG1vc3QgYWxsIGZsYWdzICovCiAJbG9va3VwX3R5cGUgPSBhdXRvZnM0X25lZWRfbW91bnQobmQtPmZsYWdzKTsKIAlzcGluX2xvY2soJnNiaS0+ZnNfbG9jayk7Ci0Jc3Bpbl9sb2NrKCZkY2FjaGVfbG9jayk7CisJc3Bpbl9sb2NrKCZhdXRvZnM0X2xvY2spOworCXNwaW5fbG9jaygmZGVudHJ5LT5kX2xvY2spOwogCWlmICghKGxvb2t1cF90eXBlIHx8IGluby0+ZmxhZ3MgJiBBVVRPRlNfSU5GX1BFTkRJTkcpKSB7Ci0JCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7CisJCXNwaW5fdW5sb2NrKCZkZW50cnktPmRfbG9jayk7CisJCXNwaW5fdW5sb2NrKCZhdXRvZnM0X2xvY2spOwogCQlzcGluX3VubG9jaygmc2JpLT5mc19sb2NrKTsKIAkJZ290byBmb2xsb3c7CiAJfQpAQCAtMjY2LDcgKzI3Myw4IEBACiAJICovCiAJaWYgKGluby0+ZmxhZ3MgJiBBVVRPRlNfSU5GX1BFTkRJTkcgfHwKIAkgICAgKCFkX21vdW50cG9pbnQoZGVudHJ5KSAmJiBsaXN0X2VtcHR5KCZkZW50cnktPmRfc3ViZGlycykpKSB7Ci0JCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7CisJCXNwaW5fdW5sb2NrKCZkZW50cnktPmRfbG9jayk7CisJCXNwaW5fdW5sb2NrKCZhdXRvZnM0X2xvY2spOwogCQlzcGluX3VubG9jaygmc2JpLT5mc19sb2NrKTsKIAogCQlzdGF0dXMgPSB0cnlfdG9fZmlsbF9kZW50cnkoZGVudHJ5LCBuZC0+ZmxhZ3MpOwpAQCAtMjc1LDcgKzI4Myw4IEBACiAKIAkJZ290byBmb2xsb3c7CiAJfQotCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7CisJc3Bpbl91bmxvY2soJmRlbnRyeS0+ZF9sb2NrKTsKKwlzcGluX3VubG9jaygmYXV0b2ZzNF9sb2NrKTsKIAlzcGluX3VubG9jaygmc2JpLT5mc19sb2NrKTsKIGZvbGxvdzoKIAkvKgpAQCAtMzA2LDEyICszMTUsMTkgQEAKICAqLwogc3RhdGljIGludCBhdXRvZnM0X3JldmFsaWRhdGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKIHsKLQlzdHJ1Y3QgaW5vZGUgKmRpciA9IGRlbnRyeS0+ZF9wYXJlbnQtPmRfaW5vZGU7Ci0Jc3RydWN0IGF1dG9mc19zYl9pbmZvICpzYmkgPSBhdXRvZnM0X3NiaShkaXItPmlfc2IpOwotCWludCBvel9tb2RlID0gYXV0b2ZzNF9vel9tb2RlKHNiaSk7CisJc3RydWN0IGlub2RlICpkaXI7CisJc3RydWN0IGF1dG9mc19zYl9pbmZvICpzYmk7CisJaW50IG96X21vZGU7CiAJaW50IGZsYWdzID0gbmQgPyBuZC0+ZmxhZ3MgOiAwOwogCWludCBzdGF0dXMgPSAxOwogCisJaWYgKGZsYWdzICYgTE9PS1VQX1JDVSkKKwkJcmV0dXJuIC1FQ0hJTEQ7CisKKwlkaXIgPSBkZW50cnktPmRfcGFyZW50LT5kX2lub2RlOworCXNiaSA9IGF1dG9mczRfc2JpKGRpci0+aV9zYik7CisJb3pfbW9kZSA9IGF1dG9mczRfb3pfbW9kZShzYmkpOworCiAJLyogUGVuZGluZyBkZW50cnkgKi8KIAlzcGluX2xvY2soJnNiaS0+ZnNfbG9jayk7CiAJaWYgKGF1dG9mczRfaXNwZW5kaW5nKGRlbnRyeSkpIHsKQEAgLTM0NiwxMiArMzYyLDE0IEBACiAJCXJldHVybiAwOwogCiAJLyogQ2hlY2sgZm9yIGEgbm9uLW1vdW50cG9pbnQgZGlyZWN0b3J5IHdpdGggbm8gY29udGVudHMgKi8KLQlzcGluX2xvY2soJmRjYWNoZV9sb2NrKTsKKwlzcGluX2xvY2soJmF1dG9mczRfbG9jayk7CisJc3Bpbl9sb2NrKCZkZW50cnktPmRfbG9jayk7CiAJaWYgKFNfSVNESVIoZGVudHJ5LT5kX2lub2RlLT5pX21vZGUpICYmCiAJICAgICFkX21vdW50cG9pbnQoZGVudHJ5KSAmJiBsaXN0X2VtcHR5KCZkZW50cnktPmRfc3ViZGlycykpIHsKIAkJRFBSSU5USygiZGVudHJ5PSVwICUuKnMsIGVtcHR5ZGlyIiwKIAkJCSBkZW50cnksIGRlbnRyeS0+ZF9uYW1lLmxlbiwgZGVudHJ5LT5kX25hbWUubmFtZSk7Ci0JCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7CisJCXNwaW5fdW5sb2NrKCZkZW50cnktPmRfbG9jayk7CisJCXNwaW5fdW5sb2NrKCZhdXRvZnM0X2xvY2spOwogCiAJCS8qIFRoZSBkYWVtb24gbmV2ZXIgY2F1c2VzIGEgbW91bnQgdG8gdHJpZ2dlciAqLwogCQlpZiAob3pfbW9kZSkKQEAgLTM2Nyw3ICszODUsOCBAQAogCiAJCXJldHVybiBzdGF0dXM7CiAJfQotCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7CisJc3Bpbl91bmxvY2soJmRlbnRyeS0+ZF9sb2NrKTsKKwlzcGluX3VubG9jaygmYXV0b2ZzNF9sb2NrKTsKIAogCXJldHVybiAxOwogfQpAQCAtNDIyLDcgKzQ0MSw3IEBACiAJY29uc3QgdW5zaWduZWQgY2hhciAqc3RyID0gbmFtZS0+bmFtZTsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpwLCAqaGVhZDsKIAotCXNwaW5fbG9jaygmZGNhY2hlX2xvY2spOworCXNwaW5fbG9jaygmYXV0b2ZzNF9sb2NrKTsKIAlzcGluX2xvY2soJnNiaS0+bG9va3VwX2xvY2spOwogCWhlYWQgPSAmc2JpLT5hY3RpdmVfbGlzdDsKIAlsaXN0X2Zvcl9lYWNoKHAsIGhlYWQpIHsKQEAgLTQzNiw3ICs0NTUsNyBAQAogCQlzcGluX2xvY2soJmFjdGl2ZS0+ZF9sb2NrKTsKIAogCQkvKiBBbHJlYWR5IGdvbmU/ICovCi0JCWlmIChhdG9taWNfcmVhZCgmYWN0aXZlLT5kX2NvdW50KSA9PSAwKQorCQlpZiAoYWN0aXZlLT5kX2NvdW50ID09IDApCiAJCQlnb3RvIG5leHQ7CiAKIAkJcXN0ciA9ICZhY3RpdmUtPmRfbmFtZTsKQEAgLTQ1MiwxNyArNDcxLDE3IEBACiAJCQlnb3RvIG5leHQ7CiAKIAkJaWYgKGRfdW5oYXNoZWQoYWN0aXZlKSkgewotCQkJZGdldChhY3RpdmUpOworCQkJZGdldF9kbG9jayhhY3RpdmUpOwogCQkJc3Bpbl91bmxvY2soJmFjdGl2ZS0+ZF9sb2NrKTsKIAkJCXNwaW5fdW5sb2NrKCZzYmktPmxvb2t1cF9sb2NrKTsKLQkJCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7CisJCQlzcGluX3VubG9jaygmYXV0b2ZzNF9sb2NrKTsKIAkJCXJldHVybiBhY3RpdmU7CiAJCX0KIG5leHQ6CiAJCXNwaW5fdW5sb2NrKCZhY3RpdmUtPmRfbG9jayk7CiAJfQogCXNwaW5fdW5sb2NrKCZzYmktPmxvb2t1cF9sb2NrKTsKLQlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOworCXNwaW5fdW5sb2NrKCZhdXRvZnM0X2xvY2spOwogCiAJcmV0dXJuIE5VTEw7CiB9CkBAIC00NzcsNyArNDk2LDcgQEAKIAljb25zdCB1bnNpZ25lZCBjaGFyICpzdHIgPSBuYW1lLT5uYW1lOwogCXN0cnVjdCBsaXN0X2hlYWQgKnAsICpoZWFkOwogCi0Jc3Bpbl9sb2NrKCZkY2FjaGVfbG9jayk7CisJc3Bpbl9sb2NrKCZhdXRvZnM0X2xvY2spOwogCXNwaW5fbG9jaygmc2JpLT5sb29rdXBfbG9jayk7CiAJaGVhZCA9ICZzYmktPmV4cGlyaW5nX2xpc3Q7CiAJbGlzdF9mb3JfZWFjaChwLCBoZWFkKSB7CkBAIC01MDcsMTcgKzUyNiwxNyBAQAogCQkJZ290byBuZXh0OwogCiAJCWlmIChkX3VuaGFzaGVkKGV4cGlyaW5nKSkgewotCQkJZGdldChleHBpcmluZyk7CisJCQlkZ2V0X2Rsb2NrKGV4cGlyaW5nKTsKIAkJCXNwaW5fdW5sb2NrKCZleHBpcmluZy0+ZF9sb2NrKTsKIAkJCXNwaW5fdW5sb2NrKCZzYmktPmxvb2t1cF9sb2NrKTsKLQkJCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7CisJCQlzcGluX3VubG9jaygmYXV0b2ZzNF9sb2NrKTsKIAkJCXJldHVybiBleHBpcmluZzsKIAkJfQogbmV4dDoKIAkJc3Bpbl91bmxvY2soJmV4cGlyaW5nLT5kX2xvY2spOwogCX0KIAlzcGluX3VubG9jaygmc2JpLT5sb29rdXBfbG9jayk7Ci0Jc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKKwlzcGluX3VubG9jaygmYXV0b2ZzNF9sb2NrKTsKIAogCXJldHVybiBOVUxMOwogfQpAQCAtNTU5LDcgKzU3OCw3IEBACiAJCSAqIHdlIGNoZWNrIGZvciB0aGUgaGFzaGVkIGRlbnRyeSBhbmQgcmV0dXJuIHRoZSBuZXdseQogCQkgKiBoYXNoZWQgZGVudHJ5LgogCQkgKi8KLQkJZGVudHJ5LT5kX29wID0gJmF1dG9mczRfcm9vdF9kZW50cnlfb3BlcmF0aW9uczsKKwkJZF9zZXRfZF9vcChkZW50cnksICZhdXRvZnM0X3Jvb3RfZGVudHJ5X29wZXJhdGlvbnMpOwogCiAJCS8qCiAJCSAqIEFuZCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBzYW1lIGRlbnRyeSBpcyB1c2VkIGZvcgpAQCAtNjk4LDkgKzcxNyw5IEBACiAJZF9hZGQoZGVudHJ5LCBpbm9kZSk7CiAKIAlpZiAoZGlyID09IGRpci0+aV9zYi0+c19yb290LT5kX2lub2RlKQotCQlkZW50cnktPmRfb3AgPSAmYXV0b2ZzNF9yb290X2RlbnRyeV9vcGVyYXRpb25zOworCQlkX3NldF9kX29wKGRlbnRyeSwgJmF1dG9mczRfcm9vdF9kZW50cnlfb3BlcmF0aW9ucyk7CiAJZWxzZQotCQlkZW50cnktPmRfb3AgPSAmYXV0b2ZzNF9kZW50cnlfb3BlcmF0aW9uczsKKwkJZF9zZXRfZF9vcChkZW50cnksICZhdXRvZnM0X2RlbnRyeV9vcGVyYXRpb25zKTsKIAogCWRlbnRyeS0+ZF9mc2RhdGEgPSBpbm87CiAJaW5vLT5kZW50cnkgPSBkZ2V0KGRlbnRyeSk7CkBAIC03NTMsMTIgKzc3MiwxMiBAQAogCiAJZGlyLT5pX210aW1lID0gQ1VSUkVOVF9USU1FOwogCi0Jc3Bpbl9sb2NrKCZkY2FjaGVfbG9jayk7CisJc3Bpbl9sb2NrKCZhdXRvZnM0X2xvY2spOwogCWF1dG9mczRfYWRkX2V4cGlyaW5nKGRlbnRyeSk7CiAJc3Bpbl9sb2NrKCZkZW50cnktPmRfbG9jayk7CiAJX19kX2Ryb3AoZGVudHJ5KTsKIAlzcGluX3VubG9jaygmZGVudHJ5LT5kX2xvY2spOwotCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7CisJc3Bpbl91bmxvY2soJmF1dG9mczRfbG9jayk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTc3NSwxNiArNzk0LDIwIEBACiAJaWYgKCFhdXRvZnM0X296X21vZGUoc2JpKSkKIAkJcmV0dXJuIC1FQUNDRVM7CiAKLQlzcGluX2xvY2soJmRjYWNoZV9sb2NrKTsKKwlzcGluX2xvY2soJmF1dG9mczRfbG9jayk7CisJc3Bpbl9sb2NrKCZzYmktPmxvb2t1cF9sb2NrKTsKKwlzcGluX2xvY2soJmRlbnRyeS0+ZF9sb2NrKTsKIAlpZiAoIWxpc3RfZW1wdHkoJmRlbnRyeS0+ZF9zdWJkaXJzKSkgewotCQlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOworCQlzcGluX3VubG9jaygmZGVudHJ5LT5kX2xvY2spOworCQlzcGluX3VubG9jaygmc2JpLT5sb29rdXBfbG9jayk7CisJCXNwaW5fdW5sb2NrKCZhdXRvZnM0X2xvY2spOwogCQlyZXR1cm4gLUVOT1RFTVBUWTsKIAl9Ci0JYXV0b2ZzNF9hZGRfZXhwaXJpbmcoZGVudHJ5KTsKLQlzcGluX2xvY2soJmRlbnRyeS0+ZF9sb2NrKTsKKwlfX2F1dG9mczRfYWRkX2V4cGlyaW5nKGRlbnRyeSk7CisJc3Bpbl91bmxvY2soJnNiaS0+bG9va3VwX2xvY2spOwogCV9fZF9kcm9wKGRlbnRyeSk7CiAJc3Bpbl91bmxvY2soJmRlbnRyeS0+ZF9sb2NrKTsKLQlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOworCXNwaW5fdW5sb2NrKCZhdXRvZnM0X2xvY2spOwogCiAJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmluby0+Y291bnQpKSB7CiAJCXBfaW5vID0gYXV0b2ZzNF9kZW50cnlfaW5vKGRlbnRyeS0+ZF9wYXJlbnQpOwpAQCAtODI5LDkgKzg1Miw5IEBACiAJZF9hZGQoZGVudHJ5LCBpbm9kZSk7CiAKIAlpZiAoZGlyID09IGRpci0+aV9zYi0+c19yb290LT5kX2lub2RlKQotCQlkZW50cnktPmRfb3AgPSAmYXV0b2ZzNF9yb290X2RlbnRyeV9vcGVyYXRpb25zOworCQlkX3NldF9kX29wKGRlbnRyeSwgJmF1dG9mczRfcm9vdF9kZW50cnlfb3BlcmF0aW9ucyk7CiAJZWxzZQotCQlkZW50cnktPmRfb3AgPSAmYXV0b2ZzNF9kZW50cnlfb3BlcmF0aW9uczsKKwkJZF9zZXRfZF9vcChkZW50cnksICZhdXRvZnM0X2RlbnRyeV9vcGVyYXRpb25zKTsKIAogCWRlbnRyeS0+ZF9mc2RhdGEgPSBpbm87CiAJaW5vLT5kZW50cnkgPSBkZ2V0KGRlbnRyeSk7CmRpZmYgLS1naXQgYS9mcy9hdXRvZnM0L3dhaXRxLmMgYi9mcy9hdXRvZnM0L3dhaXRxLmMKaW5kZXggMjM0MTM3NS4uYzVmODQ1OSAxMDA2NDQKLS0tIGEvZnMvYXV0b2ZzNC93YWl0cS5jCisrKyBiL2ZzL2F1dG9mczQvd2FpdHEuYwpAQCAtMTg2LDE2ICsxODYsMjYgQEAKIHsKIAlzdHJ1Y3QgZGVudHJ5ICpyb290ID0gc2JpLT5zYi0+c19yb290OwogCXN0cnVjdCBkZW50cnkgKnRtcDsKLQljaGFyICpidWYgPSAqbmFtZTsKKwljaGFyICpidWY7CiAJY2hhciAqcDsKLQlpbnQgbGVuID0gMDsKKwlpbnQgbGVuOworCXVuc2lnbmVkIHNlcTsKIAotCXNwaW5fbG9jaygmZGNhY2hlX2xvY2spOworcmVuYW1lX3JldHJ5OgorCWJ1ZiA9ICpuYW1lOworCWxlbiA9IDA7CisKKwlzZXEgPSByZWFkX3NlcWJlZ2luKCZyZW5hbWVfbG9jayk7CisJcmN1X3JlYWRfbG9jaygpOworCXNwaW5fbG9jaygmYXV0b2ZzNF9sb2NrKTsKIAlmb3IgKHRtcCA9IGRlbnRyeSA7IHRtcCAhPSByb290IDsgdG1wID0gdG1wLT5kX3BhcmVudCkKIAkJbGVuICs9IHRtcC0+ZF9uYW1lLmxlbiArIDE7CiAKIAlpZiAoIWxlbiB8fCAtLWxlbiA+IE5BTUVfTUFYKSB7Ci0JCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7CisJCXNwaW5fdW5sb2NrKCZhdXRvZnM0X2xvY2spOworCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJaWYgKHJlYWRfc2VxcmV0cnkoJnJlbmFtZV9sb2NrLCBzZXEpKQorCQkJZ290byByZW5hbWVfcmV0cnk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMjA4LDcgKzIxOCwxMCBAQAogCQlwIC09IHRtcC0+ZF9uYW1lLmxlbjsKIAkJc3RybmNweShwLCB0bXAtPmRfbmFtZS5uYW1lLCB0bXAtPmRfbmFtZS5sZW4pOwogCX0KLQlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOworCXNwaW5fdW5sb2NrKCZhdXRvZnM0X2xvY2spOworCXJjdV9yZWFkX3VubG9jaygpOworCWlmIChyZWFkX3NlcXJldHJ5KCZyZW5hbWVfbG9jaywgc2VxKSkKKwkJZ290byByZW5hbWVfcmV0cnk7CiAKIAlyZXR1cm4gbGVuOwogfQpkaWZmIC0tZ2l0IGEvZnMvYmFkX2lub2RlLmMgYi9mcy9iYWRfaW5vZGUuYwppbmRleCBmMDI0ZDhhLi45YWQyMzY5IDEwMDY0NAotLS0gYS9mcy9iYWRfaW5vZGUuYworKysgYi9mcy9iYWRfaW5vZGUuYwpAQCAtMjI5LDggKzIyOSwxMSBAQAogCXJldHVybiAtRUlPOwogfQogCi1zdGF0aWMgaW50IGJhZF9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKQorc3RhdGljIGludCBiYWRfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaywgdW5zaWduZWQgaW50IGZsYWdzKQogeworCWlmIChmbGFncyAmIElQRVJNX0ZMQUdfUkNVKQorCQlyZXR1cm4gLUVDSElMRDsKKwogCXJldHVybiAtRUlPOwogfQogCmRpZmYgLS1naXQgYS9mcy9iZWZzL2xpbnV4dmZzLmMgYi9mcy9iZWZzL2xpbnV4dmZzLmMKaW5kZXggYWE0ZTdjNy4uZGU5MzU4MSAxMDA2NDQKLS0tIGEvZnMvYmVmcy9saW51eHZmcy5jCisrKyBiL2ZzL2JlZnMvbGludXh2ZnMuYwpAQCAtMjg0LDEyICsyODQsMTggQEAKICAgICAgICAgcmV0dXJuICZiaS0+dmZzX2lub2RlOwogfQogCi1zdGF0aWMgdm9pZAotYmVmc19kZXN0cm95X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCitzdGF0aWMgdm9pZCBiZWZzX2lfY2FsbGJhY2soc3RydWN0IHJjdV9oZWFkICpoZWFkKQogeworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGlub2RlLCBpX3JjdSk7CisJSU5JVF9MSVNUX0hFQUQoJmlub2RlLT5pX2RlbnRyeSk7CiAgICAgICAgIGttZW1fY2FjaGVfZnJlZShiZWZzX2lub2RlX2NhY2hlcCwgQkVGU19JKGlub2RlKSk7CiB9CiAKK3N0YXRpYyB2b2lkIGJlZnNfZGVzdHJveV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCWNhbGxfcmN1KCZpbm9kZS0+aV9yY3UsIGJlZnNfaV9jYWxsYmFjayk7Cit9CisKIHN0YXRpYyB2b2lkIGluaXRfb25jZSh2b2lkICpmb28pCiB7CiAgICAgICAgIHN0cnVjdCBiZWZzX2lub2RlX2luZm8gKmJpID0gKHN0cnVjdCBiZWZzX2lub2RlX2luZm8gKikgZm9vOwpkaWZmIC0tZ2l0IGEvZnMvYmZzL2lub2RlLmMgYi9mcy9iZnMvaW5vZGUuYwppbmRleCA3NmRiNmQ3Li5hOGUzN2Y4IDEwMDY0NAotLS0gYS9mcy9iZnMvaW5vZGUuYworKysgYi9mcy9iZnMvaW5vZGUuYwpAQCAtMjQ4LDkgKzI0OCwxNiBAQAogCXJldHVybiAmYmktPnZmc19pbm9kZTsKIH0KIAorc3RhdGljIHZvaWQgYmZzX2lfY2FsbGJhY2soc3RydWN0IHJjdV9oZWFkICpoZWFkKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGlub2RlLCBpX3JjdSk7CisJSU5JVF9MSVNUX0hFQUQoJmlub2RlLT5pX2RlbnRyeSk7CisJa21lbV9jYWNoZV9mcmVlKGJmc19pbm9kZV9jYWNoZXAsIEJGU19JKGlub2RlKSk7Cit9CisKIHN0YXRpYyB2b2lkIGJmc19kZXN0cm95X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7Ci0Ja21lbV9jYWNoZV9mcmVlKGJmc19pbm9kZV9jYWNoZXAsIEJGU19JKGlub2RlKSk7CisJY2FsbF9yY3UoJmlub2RlLT5pX3JjdSwgYmZzX2lfY2FsbGJhY2spOwogfQogCiBzdGF0aWMgdm9pZCBpbml0X29uY2Uodm9pZCAqZm9vKQpkaWZmIC0tZ2l0IGEvZnMvYmxvY2tfZGV2LmMgYi9mcy9ibG9ja19kZXYuYwppbmRleCA0MjMwMjUyLi43NzFmMjM1IDEwMDY0NAotLS0gYS9mcy9ibG9ja19kZXYuYworKysgYi9mcy9ibG9ja19kZXYuYwpAQCAtNDA5LDEzICs0MDksMjAgQEAKIAlyZXR1cm4gJmVpLT52ZnNfaW5vZGU7CiB9CiAKLXN0YXRpYyB2b2lkIGJkZXZfZGVzdHJveV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQorc3RhdGljIHZvaWQgYmRldl9pX2NhbGxiYWNrKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKIHsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBpbm9kZSwgaV9yY3UpOwogCXN0cnVjdCBiZGV2X2lub2RlICpiZGkgPSBCREVWX0koaW5vZGUpOwogCisJSU5JVF9MSVNUX0hFQUQoJmlub2RlLT5pX2RlbnRyeSk7CiAJa21lbV9jYWNoZV9mcmVlKGJkZXZfY2FjaGVwLCBiZGkpOwogfQogCitzdGF0aWMgdm9pZCBiZGV2X2Rlc3Ryb3lfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwljYWxsX3JjdSgmaW5vZGUtPmlfcmN1LCBiZGV2X2lfY2FsbGJhY2spOworfQorCiBzdGF0aWMgdm9pZCBpbml0X29uY2Uodm9pZCAqZm9vKQogewogCXN0cnVjdCBiZGV2X2lub2RlICplaSA9IChzdHJ1Y3QgYmRldl9pbm9kZSAqKSBmb287CmRpZmYgLS1naXQgYS9mcy9idHJmcy9hY2wuYyBiL2ZzL2J0cmZzL2FjbC5jCmluZGV4IDIyMjJkMTYuLjZhZTJjOGMgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2FjbC5jCisrKyBiL2ZzL2J0cmZzL2FjbC5jCkBAIC0xODUsMTggKzE4NSwyMyBAQAogCXJldHVybiByZXQ7CiB9CiAKLWludCBidHJmc19jaGVja19hY2woc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spCitpbnQgYnRyZnNfY2hlY2tfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7Ci0Jc3RydWN0IHBvc2l4X2FjbCAqYWNsOwogCWludCBlcnJvciA9IC1FQUdBSU47CiAKLQlhY2wgPSBidHJmc19nZXRfYWNsKGlub2RlLCBBQ0xfVFlQRV9BQ0NFU1MpOworCWlmIChmbGFncyAmIElQRVJNX0ZMQUdfUkNVKSB7CisJCWlmICghbmVnYXRpdmVfY2FjaGVkX2FjbChpbm9kZSwgQUNMX1RZUEVfQUNDRVNTKSkKKwkJCWVycm9yID0gLUVDSElMRDsKIAotCWlmIChJU19FUlIoYWNsKSkKLQkJcmV0dXJuIFBUUl9FUlIoYWNsKTsKLQlpZiAoYWNsKSB7Ci0JCWVycm9yID0gcG9zaXhfYWNsX3Blcm1pc3Npb24oaW5vZGUsIGFjbCwgbWFzayk7Ci0JCXBvc2l4X2FjbF9yZWxlYXNlKGFjbCk7CisJfSBlbHNlIHsKKwkJc3RydWN0IHBvc2l4X2FjbCAqYWNsOworCQlhY2wgPSBidHJmc19nZXRfYWNsKGlub2RlLCBBQ0xfVFlQRV9BQ0NFU1MpOworCQlpZiAoSVNfRVJSKGFjbCkpCisJCQlyZXR1cm4gUFRSX0VSUihhY2wpOworCQlpZiAoYWNsKSB7CisJCQllcnJvciA9IHBvc2l4X2FjbF9wZXJtaXNzaW9uKGlub2RlLCBhY2wsIG1hc2spOworCQkJcG9zaXhfYWNsX3JlbGVhc2UoYWNsKTsKKwkJfQogCX0KIAogCXJldHVybiBlcnJvcjsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2N0cmVlLmggYi9mcy9idHJmcy9jdHJlZS5oCmluZGV4IGFmNTJmNmQuLmExNDJkMjAgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2N0cmVlLmgKKysrIGIvZnMvYnRyZnMvY3RyZWUuaApAQCAtMjU0NCw3ICsyNTQ0LDcgQEAKIAogLyogYWNsLmMgKi8KICNpZmRlZiBDT05GSUdfQlRSRlNfRlNfUE9TSVhfQUNMCi1pbnQgYnRyZnNfY2hlY2tfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKTsKK2ludCBidHJmc19jaGVja19hY2woc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2ssIHVuc2lnbmVkIGludCBmbGFncyk7CiAjZWxzZQogI2RlZmluZSBidHJmc19jaGVja19hY2wgTlVMTAogI2VuZGlmCmRpZmYgLS1naXQgYS9mcy9idHJmcy9leHBvcnQuYyBiL2ZzL2J0cmZzL2V4cG9ydC5jCmluZGV4IDY1OWY1MzIuLjBjY2Y5YTggMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2V4cG9ydC5jCisrKyBiL2ZzL2J0cmZzL2V4cG9ydC5jCkBAIC0xMTAsNyArMTEwLDcgQEAKIAogCWRlbnRyeSA9IGRfb2J0YWluX2FsaWFzKGlub2RlKTsKIAlpZiAoIUlTX0VSUihkZW50cnkpKQotCQlkZW50cnktPmRfb3AgPSAmYnRyZnNfZGVudHJ5X29wZXJhdGlvbnM7CisJCWRfc2V0X2Rfb3AoZGVudHJ5LCAmYnRyZnNfZGVudHJ5X29wZXJhdGlvbnMpOwogCXJldHVybiBkZW50cnk7CiBmYWlsOgogCXNyY3VfcmVhZF91bmxvY2soJmZzX2luZm8tPnN1YnZvbF9zcmN1LCBpbmRleCk7CkBAIC0yMjUsNyArMjI1LDcgQEAKIAlrZXkub2Zmc2V0ID0gMDsKIAlkZW50cnkgPSBkX29idGFpbl9hbGlhcyhidHJmc19pZ2V0KHJvb3QtPmZzX2luZm8tPnNiLCAma2V5LCByb290LCBOVUxMKSk7CiAJaWYgKCFJU19FUlIoZGVudHJ5KSkKLQkJZGVudHJ5LT5kX29wID0gJmJ0cmZzX2RlbnRyeV9vcGVyYXRpb25zOworCQlkX3NldF9kX29wKGRlbnRyeSwgJmJ0cmZzX2RlbnRyeV9vcGVyYXRpb25zKTsKIAlyZXR1cm4gZGVudHJ5OwogZmFpbDoKIAlidHJmc19mcmVlX3BhdGgocGF0aCk7CmRpZmYgLS1naXQgYS9mcy9idHJmcy9pbm9kZS5jIGIvZnMvYnRyZnMvaW5vZGUuYwppbmRleCA3MmYzMWVjLi5hMGZmNDZhIDEwMDY0NAotLS0gYS9mcy9idHJmcy9pbm9kZS5jCisrKyBiL2ZzL2J0cmZzL2lub2RlLmMKQEAgLTQwODQsNyArNDA4NCw3IEBACiAJaW50IGluZGV4OwogCWludCByZXQ7CiAKLQlkZW50cnktPmRfb3AgPSAmYnRyZnNfZGVudHJ5X29wZXJhdGlvbnM7CisJZF9zZXRfZF9vcChkZW50cnksICZidHJmc19kZW50cnlfb3BlcmF0aW9ucyk7CiAKIAlpZiAoZGVudHJ5LT5kX25hbWUubGVuID4gQlRSRlNfTkFNRV9MRU4pCiAJCXJldHVybiBFUlJfUFRSKC1FTkFNRVRPT0xPTkcpOwpAQCAtNDEyNyw3ICs0MTI3LDcgQEAKIAlyZXR1cm4gaW5vZGU7CiB9CiAKLXN0YXRpYyBpbnQgYnRyZnNfZGVudHJ5X2RlbGV0ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCitzdGF0aWMgaW50IGJ0cmZzX2RlbnRyeV9kZWxldGUoY29uc3Qgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogewogCXN0cnVjdCBidHJmc19yb290ICpyb290OwogCkBAIC02NDk1LDYgKzY0OTUsMTMgQEAKIAlyZXR1cm4gaW5vZGU7CiB9CiAKK3N0YXRpYyB2b2lkIGJ0cmZzX2lfY2FsbGJhY2soc3RydWN0IHJjdV9oZWFkICpoZWFkKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGlub2RlLCBpX3JjdSk7CisJSU5JVF9MSVNUX0hFQUQoJmlub2RlLT5pX2RlbnRyeSk7CisJa21lbV9jYWNoZV9mcmVlKGJ0cmZzX2lub2RlX2NhY2hlcCwgQlRSRlNfSShpbm9kZSkpOworfQorCiB2b2lkIGJ0cmZzX2Rlc3Ryb3lfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlzdHJ1Y3QgYnRyZnNfb3JkZXJlZF9leHRlbnQgKm9yZGVyZWQ7CkBAIC02NTY0LDcgKzY1NzEsNyBAQAogCWlub2RlX3RyZWVfZGVsKGlub2RlKTsKIAlidHJmc19kcm9wX2V4dGVudF9jYWNoZShpbm9kZSwgMCwgKHU2NCktMSwgMCk7CiBmcmVlOgotCWttZW1fY2FjaGVfZnJlZShidHJmc19pbm9kZV9jYWNoZXAsIEJUUkZTX0koaW5vZGUpKTsKKwljYWxsX3JjdSgmaW5vZGUtPmlfcmN1LCBidHJmc19pX2NhbGxiYWNrKTsKIH0KIAogaW50IGJ0cmZzX2Ryb3BfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKQEAgLTcyMDQsMTEgKzcyMTEsMTEgQEAKIAlyZXR1cm4gX19zZXRfcGFnZV9kaXJ0eV9ub2J1ZmZlcnMocGFnZSk7CiB9CiAKLXN0YXRpYyBpbnQgYnRyZnNfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaykKK3N0YXRpYyBpbnQgYnRyZnNfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaywgdW5zaWduZWQgaW50IGZsYWdzKQogewogCWlmICgoQlRSRlNfSShpbm9kZSktPmZsYWdzICYgQlRSRlNfSU5PREVfUkVBRE9OTFkpICYmIChtYXNrICYgTUFZX1dSSVRFKSkKIAkJcmV0dXJuIC1FQUNDRVM7Ci0JcmV0dXJuIGdlbmVyaWNfcGVybWlzc2lvbihpbm9kZSwgbWFzaywgYnRyZnNfY2hlY2tfYWNsKTsKKwlyZXR1cm4gZ2VuZXJpY19wZXJtaXNzaW9uKGlub2RlLCBtYXNrLCBmbGFncywgYnRyZnNfY2hlY2tfYWNsKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGJ0cmZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zID0gewpkaWZmIC0tZ2l0IGEvZnMvYnVmZmVyLmMgYi9mcy9idWZmZXIuYwppbmRleCA1OTMwZTM4Li4yMjE5YTc2IDEwMDY0NAotLS0gYS9mcy9idWZmZXIuYworKysgYi9mcy9idWZmZXIuYwpAQCAtMTI3MCwxMiArMTI3MCwxMCBAQAogc3RhdGljIHZvaWQgYmhfbHJ1X2luc3RhbGwoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKIHsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmV2aWN0ZWUgPSBOVUxMOwotCXN0cnVjdCBiaF9scnUgKmxydTsKIAogCWNoZWNrX2lycXNfb24oKTsKIAliaF9scnVfbG9jaygpOwotCWxydSA9ICZfX2dldF9jcHVfdmFyKGJoX2xydXMpOwotCWlmIChscnUtPmJoc1swXSAhPSBiaCkgeworCWlmIChfX3RoaXNfY3B1X3JlYWQoYmhfbHJ1cy5iaHNbMF0pICE9IGJoKSB7CiAJCXN0cnVjdCBidWZmZXJfaGVhZCAqYmhzW0JIX0xSVV9TSVpFXTsKIAkJaW50IGluOwogCQlpbnQgb3V0ID0gMDsKQEAgLTEyODMsNyArMTI4MSw4IEBACiAJCWdldF9iaChiaCk7CiAJCWJoc1tvdXQrK10gPSBiaDsKIAkJZm9yIChpbiA9IDA7IGluIDwgQkhfTFJVX1NJWkU7IGluKyspIHsKLQkJCXN0cnVjdCBidWZmZXJfaGVhZCAqYmgyID0gbHJ1LT5iaHNbaW5dOworCQkJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDIgPQorCQkJCV9fdGhpc19jcHVfcmVhZChiaF9scnVzLmJoc1tpbl0pOwogCiAJCQlpZiAoYmgyID09IGJoKSB7CiAJCQkJX19icmVsc2UoYmgyKTsKQEAgLTEyOTgsNyArMTI5Nyw3IEBACiAJCX0KIAkJd2hpbGUgKG91dCA8IEJIX0xSVV9TSVpFKQogCQkJYmhzW291dCsrXSA9IE5VTEw7Ci0JCW1lbWNweShscnUtPmJocywgYmhzLCBzaXplb2YoYmhzKSk7CisJCW1lbWNweShfX3RoaXNfY3B1X3B0cigmYmhfbHJ1cy5iaHMpLCBiaHMsIHNpemVvZihiaHMpKTsKIAl9CiAJYmhfbHJ1X3VubG9jaygpOwogCkBAIC0xMzEzLDIzICsxMzEyLDIyIEBACiBsb29rdXBfYmhfbHJ1KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IGJsb2NrLCB1bnNpZ25lZCBzaXplKQogewogCXN0cnVjdCBidWZmZXJfaGVhZCAqcmV0ID0gTlVMTDsKLQlzdHJ1Y3QgYmhfbHJ1ICpscnU7CiAJdW5zaWduZWQgaW50IGk7CiAKIAljaGVja19pcnFzX29uKCk7CiAJYmhfbHJ1X2xvY2soKTsKLQlscnUgPSAmX19nZXRfY3B1X3ZhcihiaF9scnVzKTsKIAlmb3IgKGkgPSAwOyBpIDwgQkhfTFJVX1NJWkU7IGkrKykgewotCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gbHJ1LT5iaHNbaV07CisJCXN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBfX3RoaXNfY3B1X3JlYWQoYmhfbHJ1cy5iaHNbaV0pOwogCiAJCWlmIChiaCAmJiBiaC0+Yl9iZGV2ID09IGJkZXYgJiYKIAkJCQliaC0+Yl9ibG9ja25yID09IGJsb2NrICYmIGJoLT5iX3NpemUgPT0gc2l6ZSkgewogCQkJaWYgKGkpIHsKIAkJCQl3aGlsZSAoaSkgewotCQkJCQlscnUtPmJoc1tpXSA9IGxydS0+YmhzW2kgLSAxXTsKKwkJCQkJX190aGlzX2NwdV93cml0ZShiaF9scnVzLmJoc1tpXSwKKwkJCQkJCV9fdGhpc19jcHVfcmVhZChiaF9scnVzLmJoc1tpIC0gMV0pKTsKIAkJCQkJaS0tOwogCQkJCX0KLQkJCQlscnUtPmJoc1swXSA9IGJoOworCQkJCV9fdGhpc19jcHVfd3JpdGUoYmhfbHJ1cy5iaHNbMF0sIGJoKTsKIAkJCX0KIAkJCWdldF9iaChiaCk7CiAJCQlyZXQgPSBiaDsKQEAgLTMyMDMsMjIgKzMyMDEsMjMgQEAKIAlpbnQgaTsKIAlpbnQgdG90ID0gMDsKIAotCWlmIChfX2dldF9jcHVfdmFyKGJoX2FjY291bnRpbmcpLnJhdGVsaW1pdCsrIDwgNDA5NikKKwlpZiAoX190aGlzX2NwdV9pbmNfcmV0dXJuKGJoX2FjY291bnRpbmcucmF0ZWxpbWl0KSAtIDEgPCA0MDk2KQogCQlyZXR1cm47Ci0JX19nZXRfY3B1X3ZhcihiaF9hY2NvdW50aW5nKS5yYXRlbGltaXQgPSAwOworCV9fdGhpc19jcHVfd3JpdGUoYmhfYWNjb3VudGluZy5yYXRlbGltaXQsIDApOwogCWZvcl9lYWNoX29ubGluZV9jcHUoaSkKIAkJdG90ICs9IHBlcl9jcHUoYmhfYWNjb3VudGluZywgaSkubnI7CiAJYnVmZmVyX2hlYWRzX292ZXJfbGltaXQgPSAodG90ID4gbWF4X2J1ZmZlcl9oZWFkcyk7CiB9Ci0JCisKIHN0cnVjdCBidWZmZXJfaGVhZCAqYWxsb2NfYnVmZmVyX2hlYWQoZ2ZwX3QgZ2ZwX2ZsYWdzKQogewogCXN0cnVjdCBidWZmZXJfaGVhZCAqcmV0ID0ga21lbV9jYWNoZV96YWxsb2MoYmhfY2FjaGVwLCBnZnBfZmxhZ3MpOwogCWlmIChyZXQpIHsKIAkJSU5JVF9MSVNUX0hFQUQoJnJldC0+Yl9hc3NvY19idWZmZXJzKTsKLQkJZ2V0X2NwdV92YXIoYmhfYWNjb3VudGluZykubnIrKzsKKwkJcHJlZW1wdF9kaXNhYmxlKCk7CisJCV9fdGhpc19jcHVfaW5jKGJoX2FjY291bnRpbmcubnIpOwogCQlyZWNhbGNfYmhfc3RhdGUoKTsKLQkJcHV0X2NwdV92YXIoYmhfYWNjb3VudGluZyk7CisJCXByZWVtcHRfZW5hYmxlKCk7CiAJfQogCXJldHVybiByZXQ7CiB9CkBAIC0zMjI4LDkgKzMyMjcsMTAgQEAKIHsKIAlCVUdfT04oIWxpc3RfZW1wdHkoJmJoLT5iX2Fzc29jX2J1ZmZlcnMpKTsKIAlrbWVtX2NhY2hlX2ZyZWUoYmhfY2FjaGVwLCBiaCk7Ci0JZ2V0X2NwdV92YXIoYmhfYWNjb3VudGluZykubnItLTsKKwlwcmVlbXB0X2Rpc2FibGUoKTsKKwlfX3RoaXNfY3B1X2RlYyhiaF9hY2NvdW50aW5nLm5yKTsKIAlyZWNhbGNfYmhfc3RhdGUoKTsKLQlwdXRfY3B1X3ZhcihiaF9hY2NvdW50aW5nKTsKKwlwcmVlbXB0X2VuYWJsZSgpOwogfQogRVhQT1JUX1NZTUJPTChmcmVlX2J1ZmZlcl9oZWFkKTsKIApAQCAtMzI0Myw5ICszMjQzLDggQEAKIAkJYnJlbHNlKGItPmJoc1tpXSk7CiAJCWItPmJoc1tpXSA9IE5VTEw7CiAJfQotCWdldF9jcHVfdmFyKGJoX2FjY291bnRpbmcpLm5yICs9IHBlcl9jcHUoYmhfYWNjb3VudGluZywgY3B1KS5ucjsKKwl0aGlzX2NwdV9hZGQoYmhfYWNjb3VudGluZy5uciwgcGVyX2NwdShiaF9hY2NvdW50aW5nLCBjcHUpLm5yKTsKIAlwZXJfY3B1KGJoX2FjY291bnRpbmcsIGNwdSkubnIgPSAwOwotCXB1dF9jcHVfdmFyKGJoX2FjY291bnRpbmcpOwogfQogCiBzdGF0aWMgaW50IGJ1ZmZlcl9jcHVfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKZGlmZiAtLWdpdCBhL2ZzL2NlcGgvZGlyLmMgYi9mcy9jZXBoL2Rpci5jCmluZGV4IGQ5MDI5NDguLmZhN2NhMDQgMTAwNjQ0Ci0tLSBhL2ZzL2NlcGgvZGlyLmMKKysrIGIvZnMvY2VwaC9kaXIuYwpAQCAtNDIsMTEgKzQyLDExIEBACiAKIAlpZiAoZGVudHJ5LT5kX3BhcmVudCA9PSBOVUxMIHx8ICAgLyogbmZzIGZoX3RvX2RlbnRyeSAqLwogCSAgICBjZXBoX3NuYXAoZGVudHJ5LT5kX3BhcmVudC0+ZF9pbm9kZSkgPT0gQ0VQSF9OT1NOQVApCi0JCWRlbnRyeS0+ZF9vcCA9ICZjZXBoX2RlbnRyeV9vcHM7CisJCWRfc2V0X2Rfb3AoZGVudHJ5LCAmY2VwaF9kZW50cnlfb3BzKTsKIAllbHNlIGlmIChjZXBoX3NuYXAoZGVudHJ5LT5kX3BhcmVudC0+ZF9pbm9kZSkgPT0gQ0VQSF9TTkFQRElSKQotCQlkZW50cnktPmRfb3AgPSAmY2VwaF9zbmFwZGlyX2RlbnRyeV9vcHM7CisJCWRfc2V0X2Rfb3AoZGVudHJ5LCAmY2VwaF9zbmFwZGlyX2RlbnRyeV9vcHMpOwogCWVsc2UKLQkJZGVudHJ5LT5kX29wID0gJmNlcGhfc25hcF9kZW50cnlfb3BzOworCQlkX3NldF9kX29wKGRlbnRyeSwgJmNlcGhfc25hcF9kZW50cnlfb3BzKTsKIAogCWRpID0ga21lbV9jYWNoZV9hbGxvYyhjZXBoX2RlbnRyeV9jYWNoZXAsIEdGUF9OT0ZTIHwgX19HRlBfWkVSTyk7CiAJaWYgKCFkaSkKQEAgLTExMiw3ICsxMTIsNyBAQAogCWRvdXQoIl9fZGNhY2hlX3JlYWRkaXIgJXAgYXQgJWxsdSAobGFzdCAlcClcbiIsIGRpciwgZmlscC0+Zl9wb3MsCiAJICAgICBsYXN0KTsKIAotCXNwaW5fbG9jaygmZGNhY2hlX2xvY2spOworCXNwaW5fbG9jaygmcGFyZW50LT5kX2xvY2spOwogCiAJLyogc3RhcnQgYXQgYmVnaW5uaW5nPyAqLwogCWlmIChmaWxwLT5mX3BvcyA9PSAyIHx8IGxhc3QgPT0gTlVMTCB8fApAQCAtMTM2LDYgKzEzNiw3IEBACiAJCQlmaS0+YXRfZW5kID0gMTsKIAkJCWdvdG8gb3V0X3VubG9jazsKIAkJfQorCQlzcGluX2xvY2tfbmVzdGVkKCZkZW50cnktPmRfbG9jaywgREVOVFJZX0RfTE9DS19ORVNURUQpOwogCQlpZiAoIWRfdW5oYXNoZWQoZGVudHJ5KSAmJiBkZW50cnktPmRfaW5vZGUgJiYKIAkJICAgIGNlcGhfc25hcChkZW50cnktPmRfaW5vZGUpICE9IENFUEhfU05BUERJUiAmJgogCQkgICAgY2VwaF9pbm8oZGVudHJ5LT5kX2lub2RlKSAhPSBDRVBIX0lOT19DRVBIICYmCkBAIC0xNDUsMTMgKzE0NiwxNSBAQAogCQkgICAgIGRlbnRyeS0+ZF9uYW1lLmxlbiwgZGVudHJ5LT5kX25hbWUubmFtZSwgZGktPm9mZnNldCwKIAkJICAgICBmaWxwLT5mX3BvcywgZF91bmhhc2hlZChkZW50cnkpID8gIiB1bmhhc2hlZCIgOiAiIiwKIAkJICAgICAhZGVudHJ5LT5kX2lub2RlID8gIiBudWxsIiA6ICIiKTsKKwkJc3Bpbl91bmxvY2soJmRlbnRyeS0+ZF9sb2NrKTsKIAkJcCA9IHAtPnByZXY7CiAJCWRlbnRyeSA9IGxpc3RfZW50cnkocCwgc3RydWN0IGRlbnRyeSwgZF91LmRfY2hpbGQpOwogCQlkaSA9IGNlcGhfZGVudHJ5KGRlbnRyeSk7CiAJfQogCi0JYXRvbWljX2luYygmZGVudHJ5LT5kX2NvdW50KTsKLQlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOworCWRnZXRfZGxvY2soZGVudHJ5KTsKKwlzcGluX3VubG9jaygmZGVudHJ5LT5kX2xvY2spOworCXNwaW5fdW5sb2NrKCZwYXJlbnQtPmRfbG9jayk7CiAKIAlkb3V0KCIgJWxsdSAoJWxsdSkgZGVudHJ5ICVwICUuKnMgJXBcbiIsIGRpLT5vZmZzZXQsIGZpbHAtPmZfcG9zLAogCSAgICAgZGVudHJ5LCBkZW50cnktPmRfbmFtZS5sZW4sIGRlbnRyeS0+ZF9uYW1lLm5hbWUsIGRlbnRyeS0+ZF9pbm9kZSk7CkBAIC0xNzcsMTkgKzE4MCwxOSBAQAogCiAJZmlscC0+Zl9wb3MrKzsKIAotCS8qIG1ha2Ugc3VyZSBhIGRlbnRyeSB3YXNuJ3QgZHJvcHBlZCB3aGlsZSB3ZSBkaWRuJ3QgaGF2ZSBkY2FjaGVfbG9jayAqLworCS8qIG1ha2Ugc3VyZSBhIGRlbnRyeSB3YXNuJ3QgZHJvcHBlZCB3aGlsZSB3ZSBkaWRuJ3QgaGF2ZSBwYXJlbnQgbG9jayAqLwogCWlmICghY2VwaF9pX3Rlc3QoZGlyLCBDRVBIX0lfQ09NUExFVEUpKSB7CiAJCWRvdXQoIiBsb3N0IElfQ09NUExFVEUgb24gJXA7IGZhbGxpbmcgYmFjayB0byBtZHNcbiIsIGRpcik7CiAJCWVyciA9IC1FQUdBSU47CiAJCWdvdG8gb3V0OwogCX0KIAotCXNwaW5fbG9jaygmZGNhY2hlX2xvY2spOworCXNwaW5fbG9jaygmcGFyZW50LT5kX2xvY2spOwogCXAgPSBwLT5wcmV2OwkvKiBhZHZhbmNlIHRvIG5leHQgZGVudHJ5ICovCiAJZ290byBtb3JlOwogCiBvdXRfdW5sb2NrOgotCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7CisJc3Bpbl91bmxvY2soJnBhcmVudC0+ZF9sb2NrKTsKIG91dDoKIAlpZiAobGFzdCkKIAkJZHB1dChsYXN0KTsKQEAgLTk4Nyw3ICs5OTAsMTIgQEAKICAqLwogc3RhdGljIGludCBjZXBoX2RfcmV2YWxpZGF0ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBuYW1laWRhdGEgKm5kKQogewotCXN0cnVjdCBpbm9kZSAqZGlyID0gZGVudHJ5LT5kX3BhcmVudC0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW5vZGUgKmRpcjsKKworCWlmIChuZC0+ZmxhZ3MgJiBMT09LVVBfUkNVKQorCQlyZXR1cm4gLUVDSElMRDsKKworCWRpciA9IGRlbnRyeS0+ZF9wYXJlbnQtPmRfaW5vZGU7CiAKIAlkb3V0KCJkX3JldmFsaWRhdGUgJXAgJyUuKnMnIGlub2RlICVwIG9mZnNldCAlbGxkXG4iLCBkZW50cnksCiAJICAgICBkZW50cnktPmRfbmFtZS5sZW4sIGRlbnRyeS0+ZF9uYW1lLm5hbWUsIGRlbnRyeS0+ZF9pbm9kZSwKZGlmZiAtLWdpdCBhL2ZzL2NlcGgvaW5vZGUuYyBiL2ZzL2NlcGgvaW5vZGUuYwppbmRleCBiZjEyODY1Li5lNjFkZTRmIDEwMDY0NAotLS0gYS9mcy9jZXBoL2lub2RlLmMKKysrIGIvZnMvY2VwaC9pbm9kZS5jCkBAIC0zNjgsNiArMzY4LDE1IEBACiAJcmV0dXJuICZjaS0+dmZzX2lub2RlOwogfQogCitzdGF0aWMgdm9pZCBjZXBoX2lfY2FsbGJhY2soc3RydWN0IHJjdV9oZWFkICpoZWFkKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGlub2RlLCBpX3JjdSk7CisJc3RydWN0IGNlcGhfaW5vZGVfaW5mbyAqY2kgPSBjZXBoX2lub2RlKGlub2RlKTsKKworCUlOSVRfTElTVF9IRUFEKCZpbm9kZS0+aV9kZW50cnkpOworCWttZW1fY2FjaGVfZnJlZShjZXBoX2lub2RlX2NhY2hlcCwgY2kpOworfQorCiB2b2lkIGNlcGhfZGVzdHJveV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCXN0cnVjdCBjZXBoX2lub2RlX2luZm8gKmNpID0gY2VwaF9pbm9kZShpbm9kZSk7CkBAIC00MDcsNyArNDE2LDcgQEAKIAlpZiAoY2ktPmlfeGF0dHJzLnByZWFsbG9jX2Jsb2IpCiAJCWNlcGhfYnVmZmVyX3B1dChjaS0+aV94YXR0cnMucHJlYWxsb2NfYmxvYik7CiAKLQlrbWVtX2NhY2hlX2ZyZWUoY2VwaF9pbm9kZV9jYWNoZXAsIGNpKTsKKwljYWxsX3JjdSgmaW5vZGUtPmlfcmN1LCBjZXBoX2lfY2FsbGJhY2spOwogfQogCiAKQEAgLTg0MSwxMyArODUwLDEzIEBACiAJZGktPm9mZnNldCA9IGNlcGhfaW5vZGUoaW5vZGUpLT5pX21heF9vZmZzZXQrKzsKIAlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7CiAKLQlzcGluX2xvY2soJmRjYWNoZV9sb2NrKTsKLQlzcGluX2xvY2soJmRuLT5kX2xvY2spOworCXNwaW5fbG9jaygmZGlyLT5kX2xvY2spOworCXNwaW5fbG9ja19uZXN0ZWQoJmRuLT5kX2xvY2ssIERFTlRSWV9EX0xPQ0tfTkVTVEVEKTsKIAlsaXN0X21vdmUoJmRuLT5kX3UuZF9jaGlsZCwgJmRpci0+ZF9zdWJkaXJzKTsKIAlkb3V0KCJzZXRfZGVudHJ5X29mZnNldCAlcCAlbGxkICglcCAlcClcbiIsIGRuLCBkaS0+b2Zmc2V0LAogCSAgICAgZG4tPmRfdS5kX2NoaWxkLnByZXYsIGRuLT5kX3UuZF9jaGlsZC5uZXh0KTsKIAlzcGluX3VubG9jaygmZG4tPmRfbG9jayk7Ci0Jc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKKwlzcGluX3VubG9jaygmZGlyLT5kX2xvY2spOwogfQogCiAvKgpAQCAtODc5LDggKzg4OCw4IEBACiAJfSBlbHNlIGlmIChyZWFsZG4pIHsKIAkJZG91dCgiZG4gJXAgKCVkKSBzcGxpY2VkIHdpdGggJXAgKCVkKSAiCiAJCSAgICAgImlub2RlICVwIGlubyAlbGx4LiVsbHhcbiIsCi0JCSAgICAgZG4sIGF0b21pY19yZWFkKCZkbi0+ZF9jb3VudCksCi0JCSAgICAgcmVhbGRuLCBhdG9taWNfcmVhZCgmcmVhbGRuLT5kX2NvdW50KSwKKwkJICAgICBkbiwgZG4tPmRfY291bnQsCisJCSAgICAgcmVhbGRuLCByZWFsZG4tPmRfY291bnQsCiAJCSAgICAgcmVhbGRuLT5kX2lub2RlLCBjZXBoX3Zpbm9wKHJlYWxkbi0+ZF9pbm9kZSkpOwogCQlkcHV0KGRuKTsKIAkJZG4gPSByZWFsZG47CkBAIC0xMjMxLDExICsxMjQwLDExIEBACiAJCQlnb3RvIHJldHJ5X2xvb2t1cDsKIAkJfSBlbHNlIHsKIAkJCS8qIHJlb3JkZXIgcGFyZW50J3MgZF9zdWJkaXJzICovCi0JCQlzcGluX2xvY2soJmRjYWNoZV9sb2NrKTsKLQkJCXNwaW5fbG9jaygmZG4tPmRfbG9jayk7CisJCQlzcGluX2xvY2soJnBhcmVudC0+ZF9sb2NrKTsKKwkJCXNwaW5fbG9ja19uZXN0ZWQoJmRuLT5kX2xvY2ssIERFTlRSWV9EX0xPQ0tfTkVTVEVEKTsKIAkJCWxpc3RfbW92ZSgmZG4tPmRfdS5kX2NoaWxkLCAmcGFyZW50LT5kX3N1YmRpcnMpOwogCQkJc3Bpbl91bmxvY2soJmRuLT5kX2xvY2spOwotCQkJc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKKwkJCXNwaW5fdW5sb2NrKCZwYXJlbnQtPmRfbG9jayk7CiAJCX0KIAogCQlkaSA9IGRuLT5kX2ZzZGF0YTsKQEAgLTE3NzIsMTIgKzE3ODEsMTcgQEAKICAqIENoZWNrIGlub2RlIHBlcm1pc3Npb25zLiAgV2UgdmVyaWZ5IHdlIGhhdmUgYSB2YWxpZCB2YWx1ZSBmb3IKICAqIHRoZSBBVVRIIGNhcCwgdGhlbiBjYWxsIHRoZSBnZW5lcmljIGhhbmRsZXIuCiAgKi8KLWludCBjZXBoX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spCitpbnQgY2VwaF9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7Ci0JaW50IGVyciA9IGNlcGhfZG9fZ2V0YXR0cihpbm9kZSwgQ0VQSF9DQVBfQVVUSF9TSEFSRUQpOworCWludCBlcnI7CisKKwlpZiAoZmxhZ3MgJiBJUEVSTV9GTEFHX1JDVSkKKwkJcmV0dXJuIC1FQ0hJTEQ7CisKKwllcnIgPSBjZXBoX2RvX2dldGF0dHIoaW5vZGUsIENFUEhfQ0FQX0FVVEhfU0hBUkVEKTsKIAogCWlmICghZXJyKQotCQllcnIgPSBnZW5lcmljX3Blcm1pc3Npb24oaW5vZGUsIG1hc2ssIE5VTEwpOworCQllcnIgPSBnZW5lcmljX3Blcm1pc3Npb24oaW5vZGUsIG1hc2ssIGZsYWdzLCBOVUxMKTsKIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS9mcy9jZXBoL21kc19jbGllbnQuYyBiL2ZzL2NlcGgvbWRzX2NsaWVudC5jCmluZGV4IDM4ODAwZWEuLmE1MGZjYTEgMTAwNjQ0Ci0tLSBhL2ZzL2NlcGgvbWRzX2NsaWVudC5jCisrKyBiL2ZzL2NlcGgvbWRzX2NsaWVudC5jCkBAIC0xNDg2LDcgKzE0ODYsNyBAQAogCSpiYXNlID0gY2VwaF9pbm8odGVtcC0+ZF9pbm9kZSk7CiAJKnBsZW4gPSBsZW47CiAJZG91dCgiYnVpbGRfcGF0aCBvbiAlcCAlZCBidWlsdCAlbGx4ICclLipzJ1xuIiwKLQkgICAgIGRlbnRyeSwgYXRvbWljX3JlYWQoJmRlbnRyeS0+ZF9jb3VudCksICpiYXNlLCBsZW4sIHBhdGgpOworCSAgICAgZGVudHJ5LCBkZW50cnktPmRfY291bnQsICpiYXNlLCBsZW4sIHBhdGgpOwogCXJldHVybiBwYXRoOwogfQogCmRpZmYgLS1naXQgYS9mcy9jZXBoL3N1cGVyLmggYi9mcy9jZXBoL3N1cGVyLmgKaW5kZXggN2YwMTcyOC4uNDU1M2Q4OCAxMDA2NDQKLS0tIGEvZnMvY2VwaC9zdXBlci5oCisrKyBiL2ZzL2NlcGgvc3VwZXIuaApAQCAtNjY1LDcgKzY2NSw3IEBACiBleHRlcm4gdm9pZCBjZXBoX3F1ZXVlX3dyaXRlYmFjayhzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIAogZXh0ZXJuIGludCBjZXBoX2RvX2dldGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spOwotZXh0ZXJuIGludCBjZXBoX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spOworZXh0ZXJuIGludCBjZXBoX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2ssIHVuc2lnbmVkIGludCBmbGFncyk7CiBleHRlcm4gaW50IGNlcGhfc2V0YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpYXR0ciAqYXR0cik7CiBleHRlcm4gaW50IGNlcGhfZ2V0YXR0cihzdHJ1Y3QgdmZzbW91bnQgKm1udCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogCQkJc3RydWN0IGtzdGF0ICpzdGF0KTsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2FjaGUuYyBiL2ZzL2NpZnMvY2FjaGUuYwppbmRleCAyMjRkN2JiLi5lNjU0ZGZkIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NhY2hlLmMKKysrIGIvZnMvY2lmcy9jYWNoZS5jCkBAIC02NCw3ICs2NCw5IEBACiAJCQkJICAgdm9pZCAqYnVmZmVyLCB1aW50MTZfdCBtYXhidWYpCiB7CiAJY29uc3Qgc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc2VydmVyID0gY29va2llX25ldGZzX2RhdGE7Ci0JY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYSA9IChzdHJ1Y3Qgc29ja2FkZHIgKikgJnNlcnZlci0+YWRkci5zb2NrQWRkcjsKKwljb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhID0gKHN0cnVjdCBzb2NrYWRkciAqKSAmc2VydmVyLT5kc3RhZGRyOworCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgc2E7CisJY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiAqYWRkcjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSBzYTsKIAlzdHJ1Y3QgY2lmc19zZXJ2ZXJfa2V5ICprZXkgPSBidWZmZXI7CiAJdWludDE2X3Qga2V5X2xlbiA9IHNpemVvZihzdHJ1Y3QgY2lmc19zZXJ2ZXJfa2V5KTsKIApAQCAtNzYsMTYgKzc4LDE2IEBACiAJICovCiAJc3dpdGNoIChzYS0+c2FfZmFtaWx5KSB7CiAJY2FzZSBBRl9JTkVUOgotCQlrZXktPmZhbWlseSA9IHNlcnZlci0+YWRkci5zb2NrQWRkci5zaW5fZmFtaWx5OwotCQlrZXktPnBvcnQgPSBzZXJ2ZXItPmFkZHIuc29ja0FkZHIuc2luX3BvcnQ7Ci0JCWtleS0+YWRkclswXS5pcHY0X2FkZHIgPSBzZXJ2ZXItPmFkZHIuc29ja0FkZHIuc2luX2FkZHI7CisJCWtleS0+ZmFtaWx5ID0gc2EtPnNhX2ZhbWlseTsKKwkJa2V5LT5wb3J0ID0gYWRkci0+c2luX3BvcnQ7CisJCWtleS0+YWRkclswXS5pcHY0X2FkZHIgPSBhZGRyLT5zaW5fYWRkcjsKIAkJa2V5X2xlbiArPSBzaXplb2Yoa2V5LT5hZGRyWzBdLmlwdjRfYWRkcik7CiAJCWJyZWFrOwogCiAJY2FzZSBBRl9JTkVUNjoKLQkJa2V5LT5mYW1pbHkgPSBzZXJ2ZXItPmFkZHIuc29ja0FkZHI2LnNpbjZfZmFtaWx5OwotCQlrZXktPnBvcnQgPSBzZXJ2ZXItPmFkZHIuc29ja0FkZHI2LnNpbjZfcG9ydDsKLQkJa2V5LT5hZGRyWzBdLmlwdjZfYWRkciA9IHNlcnZlci0+YWRkci5zb2NrQWRkcjYuc2luNl9hZGRyOworCQlrZXktPmZhbWlseSA9IHNhLT5zYV9mYW1pbHk7CisJCWtleS0+cG9ydCA9IGFkZHI2LT5zaW42X3BvcnQ7CisJCWtleS0+YWRkclswXS5pcHY2X2FkZHIgPSBhZGRyNi0+c2luNl9hZGRyOwogCQlrZXlfbGVuICs9IHNpemVvZihrZXktPmFkZHJbMF0uaXB2Nl9hZGRyKTsKIAkJYnJlYWs7CiAKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc19kZWJ1Zy5jIGIvZnMvY2lmcy9jaWZzX2RlYnVnLmMKaW5kZXggMTAzYWI4Yi4uZWRlOTgzMCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzX2RlYnVnLmMKKysrIGIvZnMvY2lmcy9jaWZzX2RlYnVnLmMKQEAgLTExOSwyOSArMTE5LDI3IEBACiAJCSAgICAiRGlzcGxheSBJbnRlcm5hbCBDSUZTIERhdGEgU3RydWN0dXJlcyBmb3IgRGVidWdnaW5nXG4iCiAJCSAgICAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKIAlzZXFfcHJpbnRmKG0sICJDSUZTIFZlcnNpb24gJXNcbiIsIENJRlNfVkVSU0lPTik7Ci0Jc2VxX3ByaW50ZihtLCAiRmVhdHVyZXM6ICIpOworCXNlcV9wcmludGYobSwgIkZlYXR1cmVzOiIpOwogI2lmZGVmIENPTkZJR19DSUZTX0RGU19VUENBTEwKLQlzZXFfcHJpbnRmKG0sICJkZnMiKTsKLQlzZXFfcHV0YyhtLCAnICcpOworCXNlcV9wcmludGYobSwgIiBkZnMiKTsKICNlbmRpZgogI2lmZGVmIENPTkZJR19DSUZTX0ZTQ0FDSEUKLQlzZXFfcHJpbnRmKG0sICJmc2NhY2hlIik7Ci0Jc2VxX3B1dGMobSwgJyAnKTsKKwlzZXFfcHJpbnRmKG0sICIgZnNjYWNoZSIpOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0NJRlNfV0VBS19QV19IQVNICi0Jc2VxX3ByaW50ZihtLCAibGFubWFuIik7Ci0Jc2VxX3B1dGMobSwgJyAnKTsKKwlzZXFfcHJpbnRmKG0sICIgbGFubWFuIik7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfQ0lGU19QT1NJWAotCXNlcV9wcmludGYobSwgInBvc2l4Iik7Ci0Jc2VxX3B1dGMobSwgJyAnKTsKKwlzZXFfcHJpbnRmKG0sICIgcG9zaXgiKTsKICNlbmRpZgogI2lmZGVmIENPTkZJR19DSUZTX1VQQ0FMTAotCXNlcV9wcmludGYobSwgInNwbmVnbyIpOwotCXNlcV9wdXRjKG0sICcgJyk7CisJc2VxX3ByaW50ZihtLCAiIHNwbmVnbyIpOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0NJRlNfWEFUVFIKLQlzZXFfcHJpbnRmKG0sICJ4YXR0ciIpOworCXNlcV9wcmludGYobSwgIiB4YXR0ciIpOworI2VuZGlmCisjaWZkZWYgQ09ORklHX0NJRlNfQUNMCisJc2VxX3ByaW50ZihtLCAiIGFjbCIpOwogI2VuZGlmCiAJc2VxX3B1dGMobSwgJ1xuJyk7CiAJc2VxX3ByaW50ZihtLCAiQWN0aXZlIFZGUyBSZXF1ZXN0czogJWRcbiIsIEdsb2JhbFRvdGFsQWN0aXZlWGlkKTsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc19zcG5lZ28uYyBiL2ZzL2NpZnMvY2lmc19zcG5lZ28uYwppbmRleCA4NzA0NDkwLi40ZGZiYTgyIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNfc3BuZWdvLmMKKysrIGIvZnMvY2lmcy9jaWZzX3NwbmVnby5jCkBAIC05OCw2ICs5OCw4IEBACiBjaWZzX2dldF9zcG5lZ29fa2V5KHN0cnVjdCBjaWZzU2VzSW5mbyAqc2VzSW5mbykKIHsKIAlzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzZXJ2ZXIgPSBzZXNJbmZvLT5zZXJ2ZXI7CisJc3RydWN0IHNvY2thZGRyX2luICpzYSA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgJnNlcnZlci0+ZHN0YWRkcjsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzYTYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSAmc2VydmVyLT5kc3RhZGRyOwogCWNoYXIgKmRlc2NyaXB0aW9uLCAqZHA7CiAJc2l6ZV90IGRlc2NfbGVuOwogCXN0cnVjdCBrZXkgKnNwbmVnb19rZXk7CkBAIC0xMjcsMTAgKzEyOSwxMCBAQAogCWRwID0gZGVzY3JpcHRpb24gKyBzdHJsZW4oZGVzY3JpcHRpb24pOwogCiAJLyogYWRkIHRoZSBzZXJ2ZXIgYWRkcmVzcyAqLwotCWlmIChzZXJ2ZXItPmFkZHIuc29ja0FkZHIuc2luX2ZhbWlseSA9PSBBRl9JTkVUKQotCQlzcHJpbnRmKGRwLCAiaXA0PSVwSTQiLCAmc2VydmVyLT5hZGRyLnNvY2tBZGRyLnNpbl9hZGRyKTsKLQllbHNlIGlmIChzZXJ2ZXItPmFkZHIuc29ja0FkZHIuc2luX2ZhbWlseSA9PSBBRl9JTkVUNikKLQkJc3ByaW50ZihkcCwgImlwNj0lcEk2IiwgJnNlcnZlci0+YWRkci5zb2NrQWRkcjYuc2luNl9hZGRyKTsKKwlpZiAoc2VydmVyLT5kc3RhZGRyLnNzX2ZhbWlseSA9PSBBRl9JTkVUKQorCQlzcHJpbnRmKGRwLCAiaXA0PSVwSTQiLCAmc2EtPnNpbl9hZGRyKTsKKwllbHNlIGlmIChzZXJ2ZXItPmRzdGFkZHIuc3NfZmFtaWx5ID09IEFGX0lORVQ2KQorCQlzcHJpbnRmKGRwLCAiaXA2PSVwSTYiLCAmc2E2LT5zaW42X2FkZHIpOwogCWVsc2UKIAkJZ290byBvdXQ7CiAKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc2VuY3J5cHQuYyBiL2ZzL2NpZnMvY2lmc2VuY3J5cHQuYwppbmRleCBmODU2NzMyLi42NmYzZDUwIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNlbmNyeXB0LmMKKysrIGIvZnMvY2lmcy9jaWZzZW5jcnlwdC5jCkBAIC03Miw2ICs3Miw3IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qIG11c3QgYmUgY2FsbGVkIHdpdGggc2VydmVyLT5zcnZfbXV0ZXggaGVsZCAqLwogaW50IGNpZnNfc2lnbl9zbWIoc3RydWN0IHNtYl9oZHIgKmNpZnNfcGR1LCBzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzZXJ2ZXIsCiAJCSAgX191MzIgKnBleHBlY3RlZF9yZXNwb25zZV9zZXF1ZW5jZV9udW1iZXIpCiB7CkBAIC04NCwxNCArODUsMTIgQEAKIAlpZiAoKGNpZnNfcGR1LT5GbGFnczIgJiBTTUJGTEcyX1NFQ1VSSVRZX1NJR05BVFVSRSkgPT0gMCkKIAkJcmV0dXJuIHJjOwogCi0Jc3Bpbl9sb2NrKCZHbG9iYWxNaWRfTG9jayk7CiAJY2lmc19wZHUtPlNpZ25hdHVyZS5TZXF1ZW5jZS5TZXF1ZW5jZU51bWJlciA9CiAJCQljcHVfdG9fbGUzMihzZXJ2ZXItPnNlcXVlbmNlX251bWJlcik7CiAJY2lmc19wZHUtPlNpZ25hdHVyZS5TZXF1ZW5jZS5SZXNlcnZlZCA9IDA7CiAKIAkqcGV4cGVjdGVkX3Jlc3BvbnNlX3NlcXVlbmNlX251bWJlciA9IHNlcnZlci0+c2VxdWVuY2VfbnVtYmVyKys7CiAJc2VydmVyLT5zZXF1ZW5jZV9udW1iZXIrKzsKLQlzcGluX3VubG9jaygmR2xvYmFsTWlkX0xvY2spOwogCiAJcmMgPSBjaWZzX2NhbGN1bGF0ZV9zaWduYXR1cmUoY2lmc19wZHUsIHNlcnZlciwgc21iX3NpZ25hdHVyZSk7CiAJaWYgKHJjKQpAQCAtMTQ5LDYgKzE0OCw3IEBACiAJcmV0dXJuIHJjOwogfQogCisvKiBtdXN0IGJlIGNhbGxlZCB3aXRoIHNlcnZlci0+c3J2X211dGV4IGhlbGQgKi8KIGludCBjaWZzX3NpZ25fc21iMihzdHJ1Y3Qga3ZlYyAqaW92LCBpbnQgbl92ZWMsIHN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNlcnZlciwKIAkJICAgX191MzIgKnBleHBlY3RlZF9yZXNwb25zZV9zZXF1ZW5jZV9udW1iZXIpCiB7CkBAIC0xNjIsMTQgKzE2MiwxMiBAQAogCWlmICgoY2lmc19wZHUtPkZsYWdzMiAmIFNNQkZMRzJfU0VDVVJJVFlfU0lHTkFUVVJFKSA9PSAwKQogCQlyZXR1cm4gcmM7CiAKLQlzcGluX2xvY2soJkdsb2JhbE1pZF9Mb2NrKTsKIAljaWZzX3BkdS0+U2lnbmF0dXJlLlNlcXVlbmNlLlNlcXVlbmNlTnVtYmVyID0KIAkJCQljcHVfdG9fbGUzMihzZXJ2ZXItPnNlcXVlbmNlX251bWJlcik7CiAJY2lmc19wZHUtPlNpZ25hdHVyZS5TZXF1ZW5jZS5SZXNlcnZlZCA9IDA7CiAKIAkqcGV4cGVjdGVkX3Jlc3BvbnNlX3NlcXVlbmNlX251bWJlciA9IHNlcnZlci0+c2VxdWVuY2VfbnVtYmVyKys7CiAJc2VydmVyLT5zZXF1ZW5jZV9udW1iZXIrKzsKLQlzcGluX3VubG9jaygmR2xvYmFsTWlkX0xvY2spOwogCiAJcmMgPSBjaWZzX2NhbGNfc2lnbmF0dXJlMihpb3YsIG5fdmVjLCBzZXJ2ZXIsIHNtYl9zaWduYXR1cmUpOwogCWlmIChyYykKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc2ZzLmMgYi9mcy9jaWZzL2NpZnNmcy5jCmluZGV4IDM5MzZhYTcuLjVlNzA3NWQgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc2ZzLmMKKysrIGIvZnMvY2lmcy9jaWZzZnMuYwpAQCAtMjgzLDEwICsyODMsMTMgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjaWZzX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spCitzdGF0aWMgaW50IGNpZnNfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaywgdW5zaWduZWQgaW50IGZsYWdzKQogewogCXN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2I7CiAKKwlpZiAoZmxhZ3MgJiBJUEVSTV9GTEFHX1JDVSkKKwkJcmV0dXJuIC1FQ0hJTEQ7CisKIAljaWZzX3NiID0gQ0lGU19TQihpbm9kZS0+aV9zYik7CiAKIAlpZiAoY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJiBDSUZTX01PVU5UX05PX1BFUk0pIHsKQEAgLTI5OCw3ICszMDEsNyBAQAogCQlvbiB0aGUgY2xpZW50IChhYm92ZSBhbmQgYmV5b25kIEFDTCBvbiBzZXJ2ZXJzKSBmb3IKIAkJc2VydmVycyB3aGljaCBkbyBub3Qgc3VwcG9ydCBzZXR0aW5nIGFuZCB2aWV3aW5nIG1vZGUgYml0cywKIAkJc28gYWxsb3dpbmcgY2xpZW50IHRvIGNoZWNrIHBlcm1pc3Npb25zIGlzIHVzZWZ1bCAqLwotCQlyZXR1cm4gZ2VuZXJpY19wZXJtaXNzaW9uKGlub2RlLCBtYXNrLCBOVUxMKTsKKwkJcmV0dXJuIGdlbmVyaWNfcGVybWlzc2lvbihpbm9kZSwgbWFzaywgZmxhZ3MsIE5VTEwpOwogfQogCiBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmNpZnNfaW5vZGVfY2FjaGVwOwpAQCAtMzI2LDYgKzMyOSw4IEBACiAJY2lmc19pbm9kZS0+aW52YWxpZF9tYXBwaW5nID0gZmFsc2U7CiAJY2lmc19pbm9kZS0+dmZzX2lub2RlLmlfYmxrYml0cyA9IDE0OyAgLyogMioqMTQgPSBDSUZTX01BWF9NU0dTSVpFICovCiAJY2lmc19pbm9kZS0+c2VydmVyX2VvZiA9IDA7CisJY2lmc19pbm9kZS0+dW5pcXVlaWQgPSAwOworCWNpZnNfaW5vZGUtPmNyZWF0ZXRpbWUgPSAwOwogCiAJLyogQ2FuIG5vdCBzZXQgaV9mbGFncyBoZXJlIC0gdGhleSBnZXQgaW1tZWRpYXRlbHkgb3ZlcndyaXR0ZW4KIAkgICB0byB6ZXJvIGJ5IHRoZSBWRlMgKi8KQEAgLTMzNCwxMCArMzM5LDE3IEBACiAJcmV0dXJuICZjaWZzX2lub2RlLT52ZnNfaW5vZGU7CiB9CiAKK3N0YXRpYyB2b2lkIGNpZnNfaV9jYWxsYmFjayhzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgaW5vZGUsIGlfcmN1KTsKKwlJTklUX0xJU1RfSEVBRCgmaW5vZGUtPmlfZGVudHJ5KTsKKwlrbWVtX2NhY2hlX2ZyZWUoY2lmc19pbm9kZV9jYWNoZXAsIENJRlNfSShpbm9kZSkpOworfQorCiBzdGF0aWMgdm9pZAogY2lmc19kZXN0cm95X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7Ci0Ja21lbV9jYWNoZV9mcmVlKGNpZnNfaW5vZGVfY2FjaGVwLCBDSUZTX0koaW5vZGUpKTsKKwljYWxsX3JjdSgmaW5vZGUtPmlfcmN1LCBjaWZzX2lfY2FsbGJhY2spOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMzUxLDE4ICszNjMsMTkgQEAKIHN0YXRpYyB2b2lkCiBjaWZzX3Nob3dfYWRkcmVzcyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNlcnZlcikKIHsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNhID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSAmc2VydmVyLT5kc3RhZGRyOworCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNhNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopICZzZXJ2ZXItPmRzdGFkZHI7CisKIAlzZXFfcHJpbnRmKHMsICIsYWRkcj0iKTsKIAotCXN3aXRjaCAoc2VydmVyLT5hZGRyLnNvY2tBZGRyLnNpbl9mYW1pbHkpIHsKKwlzd2l0Y2ggKHNlcnZlci0+ZHN0YWRkci5zc19mYW1pbHkpIHsKIAljYXNlIEFGX0lORVQ6Ci0JCXNlcV9wcmludGYocywgIiVwSTQiLCAmc2VydmVyLT5hZGRyLnNvY2tBZGRyLnNpbl9hZGRyLnNfYWRkcik7CisJCXNlcV9wcmludGYocywgIiVwSTQiLCAmc2EtPnNpbl9hZGRyLnNfYWRkcik7CiAJCWJyZWFrOwogCWNhc2UgQUZfSU5FVDY6Ci0JCXNlcV9wcmludGYocywgIiVwSTYiLAotCQkJICAgJnNlcnZlci0+YWRkci5zb2NrQWRkcjYuc2luNl9hZGRyLnM2X2FkZHIpOwotCQlpZiAoc2VydmVyLT5hZGRyLnNvY2tBZGRyNi5zaW42X3Njb3BlX2lkKQotCQkJc2VxX3ByaW50ZihzLCAiJSUldSIsCi0JCQkJICAgc2VydmVyLT5hZGRyLnNvY2tBZGRyNi5zaW42X3Njb3BlX2lkKTsKKwkJc2VxX3ByaW50ZihzLCAiJXBJNiIsICZzYTYtPnNpbjZfYWRkci5zNl9hZGRyKTsKKwkJaWYgKHNhNi0+c2luNl9zY29wZV9pZCkKKwkJCXNlcV9wcmludGYocywgIiUlJXUiLCBzYTYtPnNpbjZfc2NvcGVfaWQpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlzZXFfcHJpbnRmKHMsICIodW5rbm93bikiKTsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc2dsb2IuaCBiL2ZzL2NpZnMvY2lmc2dsb2IuaAppbmRleCA3MTM2YzBjLi42MDZjYThiIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNnbG9iLmgKKysrIGIvZnMvY2lmcy9jaWZzZ2xvYi5oCkBAIC0xNjMsMTAgKzE2Myw3IEBACiAJY2hhciBzZXJ2ZXJfUkZDMTAwMV9uYW1lW1JGQzEwMDFfTkFNRV9MRU5fV0lUSF9OVUxMXTsKIAljaGFyICpob3N0bmFtZTsgLyogaG9zdG5hbWUgcG9ydGlvbiBvZiBVTkMgc3RyaW5nICovCiAJc3RydWN0IHNvY2tldCAqc3NvY2tldDsKLQl1bmlvbiB7Ci0JCXN0cnVjdCBzb2NrYWRkcl9pbiBzb2NrQWRkcjsKLQkJc3RydWN0IHNvY2thZGRyX2luNiBzb2NrQWRkcjY7Ci0JfSBhZGRyOworCXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGRzdGFkZHI7CiAJc3RydWN0IHNvY2thZGRyX3N0b3JhZ2Ugc3JjYWRkcjsgLyogbG9jYWxseSBiaW5kIHRvIHRoaXMgSVAgKi8KIAl3YWl0X3F1ZXVlX2hlYWRfdCByZXNwb25zZV9xOwogCXdhaXRfcXVldWVfaGVhZF90IHJlcXVlc3RfcTsgLyogaWYgbW9yZSB0aGFuIG1heG1weCB0byBzcnZyIG11c3QgYmxvY2sqLwpAQCAtMjEwLDcgKzIwNyw3IEBACiAJY2hhciBjcnlwdGtleVtDSUZTX0NSWVBUT19LRVlfU0laRV07IC8qIHVzZWQgYnkgbnRsbSwgbnRsbXYyIGV0YyAqLwogCS8qIDE2dGggYnl0ZSBvZiBSRkMxMDAxIHdvcmtzdGF0aW9uIG5hbWUgaXMgYWx3YXlzIG51bGwgKi8KIAljaGFyIHdvcmtzdGF0aW9uX1JGQzEwMDFfbmFtZVtSRkMxMDAxX05BTUVfTEVOX1dJVEhfTlVMTF07Ci0JX191MzIgc2VxdWVuY2VfbnVtYmVyOyAvKiBuZWVkZWQgZm9yIENJRlMgUERVIHNpZ25hdHVyZSAqLworCV9fdTMyIHNlcXVlbmNlX251bWJlcjsgLyogZm9yIHNpZ25pbmcsIHByb3RlY3RlZCBieSBzcnZfbXV0ZXggKi8KIAlzdHJ1Y3Qgc2Vzc2lvbl9rZXkgc2Vzc2lvbl9rZXk7CiAJdW5zaWduZWQgbG9uZyBsc3RycDsgLyogd2hlbiB3ZSBnb3QgbGFzdCByZXNwb25zZSBmcm9tIHRoaXMgc2VydmVyICovCiAJdTE2IGRpYWxlY3Q7IC8qIGRpYWxlY3QgaW5kZXggdGhhdCBzZXJ2ZXIgY2hvc2UgKi8KQEAgLTQ1Niw2ICs0NTMsNyBAQAogCWJvb2wgaW52YWxpZF9tYXBwaW5nOjE7CQkvKiBwYWdlY2FjaGUgaXMgaW52YWxpZCAqLwogCXU2NCAgc2VydmVyX2VvZjsJCS8qIGN1cnJlbnQgZmlsZSBzaXplIG9uIHNlcnZlciAqLwogCXU2NCAgdW5pcXVlaWQ7CQkJLyogc2VydmVyIGlub2RlIG51bWJlciAqLworCXU2NCAgY3JlYXRldGltZTsJCS8qIGNyZWF0aW9uIHRpbWUgb24gc2VydmVyICovCiAjaWZkZWYgQ09ORklHX0NJRlNfRlNDQUNIRQogCXN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqZnNjYWNoZTsKICNlbmRpZgpAQCAtNTc2LDYgKzU3NCw3IEBACiAJdTY0CQljZl91bmlxdWVpZDsKIAl1NjQJCWNmX2VvZjsKIAl1NjQJCWNmX2J5dGVzOworCXU2NAkJY2ZfY3JlYXRldGltZTsKIAl1aWRfdAkJY2ZfdWlkOwogCWdpZF90CQljZl9naWQ7CiAJdW1vZGVfdAkJY2ZfbW9kZTsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc3NtYi5jIGIvZnMvY2lmcy9jaWZzc21iLmMKaW5kZXggNjdhY2ZiMy4uMmY2Nzk1ZTUgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc3NtYi5jCisrKyBiL2ZzL2NpZnMvY2lmc3NtYi5jCkBAIC00MDEsMTUgKzQwMSwxMiBAQAogCWVsc2UgaWYgKChzZWNGbGFncyAmIENJRlNTRUNfQVVUSF9NQVNLKSA9PSBDSUZTU0VDX01BWV9LUkI1KSB7CiAJCWNGWUkoMSwgIktlcmJlcm9zIG9ubHkgbWVjaGFuaXNtLCBlbmFibGUgZXh0ZW5kZWQgc2VjdXJpdHkiKTsKIAkJcFNNQi0+aGRyLkZsYWdzMiB8PSBTTUJGTEcyX0VYVF9TRUM7Ci0JfQotI2lmZGVmIENPTkZJR19DSUZTX0VYUEVSSU1FTlRBTAotCWVsc2UgaWYgKChzZWNGbGFncyAmIENJRlNTRUNfTVVTVF9OVExNU1NQKSA9PSBDSUZTU0VDX01VU1RfTlRMTVNTUCkKKwl9IGVsc2UgaWYgKChzZWNGbGFncyAmIENJRlNTRUNfTVVTVF9OVExNU1NQKSA9PSBDSUZTU0VDX01VU1RfTlRMTVNTUCkKIAkJcFNNQi0+aGRyLkZsYWdzMiB8PSBTTUJGTEcyX0VYVF9TRUM7CiAJZWxzZSBpZiAoKHNlY0ZsYWdzICYgQ0lGU1NFQ19BVVRIX01BU0spID09IENJRlNTRUNfTUFZX05UTE1TU1ApIHsKIAkJY0ZZSSgxLCAiTlRMTVNTUCBvbmx5IG1lY2hhbmlzbSwgZW5hYmxlIGV4dGVuZGVkIHNlY3VyaXR5Iik7CiAJCXBTTUItPmhkci5GbGFnczIgfD0gU01CRkxHMl9FWFRfU0VDOwogCX0KLSNlbmRpZgogCiAJY291bnQgPSAwOwogCWZvciAoaSA9IDA7IGkgPCBDSUZTX05VTV9QUk9UOyBpKyspIHsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY29ubmVjdC5jIGIvZnMvY2lmcy9jb25uZWN0LmMKaW5kZXggY2MxYTg2MC4uYTY1ZDMxMSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jb25uZWN0LmMKKysrIGIvZnMvY2lmcy9jb25uZWN0LmMKQEAgLTY0LDggKzY0LDggQEAKIAljaGFyICpVTkM7CiAJY2hhciAqVU5DaXA7CiAJY2hhciAqaW9jaGFyc2V0OyAgLyogbG9jYWwgY29kZSBwYWdlIGZvciBtYXBwaW5nIHRvIGFuZCBmcm9tIFVuaWNvZGUgKi8KLQljaGFyIHNvdXJjZV9yZmMxMDAxX25hbWVbMTZdOyAvKiBuZXRiaW9zIG5hbWUgb2YgY2xpZW50ICovCi0JY2hhciB0YXJnZXRfcmZjMTAwMV9uYW1lWzE2XTsgLyogbmV0YmlvcyBuYW1lIG9mIHNlcnZlciBmb3IgV2luOXgvTUUgKi8KKwljaGFyIHNvdXJjZV9yZmMxMDAxX25hbWVbUkZDMTAwMV9OQU1FX0xFTl9XSVRIX05VTExdOyAvKiBjbG50IG5iIG5hbWUgKi8KKwljaGFyIHRhcmdldF9yZmMxMDAxX25hbWVbUkZDMTAwMV9OQU1FX0xFTl9XSVRIX05VTExdOyAvKiBzcnZyIG5iIG5hbWUgKi8KIAl1aWRfdCBjcmVkX3VpZDsKIAl1aWRfdCBsaW51eF91aWQ7CiAJZ2lkX3QgbGludXhfZ2lkOwpAQCAtMTE1LDggKzExNSw4IEBACiAjZGVmaW5lIFRMSU5LX0VSUk9SX0VYUElSRQkoMSAqIEhaKQogI2RlZmluZSBUTElOS19JRExFX0VYUElSRQkoNjAwICogSFopCiAKLXN0YXRpYyBpbnQgaXB2NF9jb25uZWN0KHN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNlcnZlcik7Ci1zdGF0aWMgaW50IGlwdjZfY29ubmVjdChzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzZXJ2ZXIpOworc3RhdGljIGludCBpcF9jb25uZWN0KHN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNlcnZlcik7CitzdGF0aWMgaW50IGdlbmVyaWNfaXBfY29ubmVjdChzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzZXJ2ZXIpOwogc3RhdGljIHZvaWQgdGxpbmtfcmJfaW5zZXJ0KHN0cnVjdCByYl9yb290ICpyb290LCBzdHJ1Y3QgdGNvbl9saW5rICpuZXdfdGxpbmspOwogc3RhdGljIHZvaWQgY2lmc19wcnVuZV90bGlua3Moc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIApAQCAtMjAwLDEwICsyMDAsOSBAQAogCXdoaWxlICgoc2VydmVyLT50Y3BTdGF0dXMgIT0gQ2lmc0V4aXRpbmcpICYmCiAJICAgICAgIChzZXJ2ZXItPnRjcFN0YXR1cyAhPSBDaWZzR29vZCkpIHsKIAkJdHJ5X3RvX2ZyZWV6ZSgpOwotCQlpZiAoc2VydmVyLT5hZGRyLnNvY2tBZGRyNi5zaW42X2ZhbWlseSA9PSBBRl9JTkVUNikKLQkJCXJjID0gaXB2Nl9jb25uZWN0KHNlcnZlcik7Ci0JCWVsc2UKLQkJCXJjID0gaXB2NF9jb25uZWN0KHNlcnZlcik7CisKKwkJLyogd2Ugc2hvdWxkIHRyeSBvbmx5IHRoZSBwb3J0IHdlIGNvbm5lY3RlZCB0byBiZWZvcmUgKi8KKwkJcmMgPSBnZW5lcmljX2lwX2Nvbm5lY3Qoc2VydmVyKTsKIAkJaWYgKHJjKSB7CiAJCQljRllJKDEsICJyZWNvbm5lY3QgZXJyb3IgJWQiLCByYyk7CiAJCQltc2xlZXAoMzAwMCk7CkBAIC00NzcsNyArNDc2LDcgQEAKIAkJCSAqIGluaXRpYWxpemUgZnJhbWUpCiAJCQkgKi8KIAkJCWNpZnNfc2V0X3BvcnQoKHN0cnVjdCBzb2NrYWRkciAqKQotCQkJCQkmc2VydmVyLT5hZGRyLnNvY2tBZGRyLCBDSUZTX1BPUlQpOworCQkJCQkmc2VydmVyLT5kc3RhZGRyLCBDSUZTX1BPUlQpOwogCQkJY2lmc19yZWNvbm5lY3Qoc2VydmVyKTsKIAkJCWNzb2NrZXQgPSBzZXJ2ZXItPnNzb2NrZXQ7CiAJCQl3YWtlX3VwKCZzZXJ2ZXItPnJlc3BvbnNlX3EpOwpAQCAtODE3LDExICs4MTYsMTEgQEAKIAkgKiBpbmZvcm1hdGlvbmFsLCBvbmx5IHVzZWQgZm9yIHNlcnZlcnMgdGhhdCBkbyBub3Qgc3VwcG9ydAogCSAqIHBvcnQgNDQ1IGFuZCBpdCBjYW4gYmUgb3ZlcnJpZGRlbiBhdCBtb3VudCB0aW1lCiAJICovCi0JbWVtc2V0KHZvbC0+c291cmNlX3JmYzEwMDFfbmFtZSwgMHgyMCwgMTUpOwotCWZvciAoaSA9IDA7IGkgPCBzdHJubGVuKG5vZGVuYW1lLCAxNSk7IGkrKykKKwltZW1zZXQodm9sLT5zb3VyY2VfcmZjMTAwMV9uYW1lLCAweDIwLCBSRkMxMDAxX05BTUVfTEVOKTsKKwlmb3IgKGkgPSAwOyBpIDwgc3Rybmxlbihub2RlbmFtZSwgUkZDMTAwMV9OQU1FX0xFTik7IGkrKykKIAkJdm9sLT5zb3VyY2VfcmZjMTAwMV9uYW1lW2ldID0gdG91cHBlcihub2RlbmFtZVtpXSk7CiAKLQl2b2wtPnNvdXJjZV9yZmMxMDAxX25hbWVbMTVdID0gMDsKKwl2b2wtPnNvdXJjZV9yZmMxMDAxX25hbWVbUkZDMTAwMV9OQU1FX0xFTl0gPSAwOwogCS8qIG51bGwgdGFyZ2V0IG5hbWUgaW5kaWNhdGVzIHRvIHVzZSAqU01CU0VSVlIgZGVmYXVsdCBjYWxsZWQgbmFtZQogCSAgIGlmIHdlIGVuZCB1cCBzZW5kaW5nIFJGQzEwMDEgc2Vzc2lvbiBpbml0aWFsaXplICovCiAJdm9sLT50YXJnZXRfcmZjMTAwMV9uYW1lWzBdID0gMDsKQEAgLTk4NSwxMyArOTg0LDExIEBACiAJCQkJcmV0dXJuIDE7CiAJCQl9IGVsc2UgaWYgKHN0cm5pY21wKHZhbHVlLCAia3JiNSIsIDQpID09IDApIHsKIAkJCQl2b2wtPnNlY0ZsZyB8PSBDSUZTU0VDX01BWV9LUkI1OwotI2lmZGVmIENPTkZJR19DSUZTX0VYUEVSSU1FTlRBTAogCQkJfSBlbHNlIGlmIChzdHJuaWNtcCh2YWx1ZSwgIm50bG1zc3BpIiwgOCkgPT0gMCkgewogCQkJCXZvbC0+c2VjRmxnIHw9IENJRlNTRUNfTUFZX05UTE1TU1AgfAogCQkJCQlDSUZTU0VDX01VU1RfU0lHTjsKIAkJCX0gZWxzZSBpZiAoc3RybmljbXAodmFsdWUsICJudGxtc3NwIiwgNykgPT0gMCkgewogCQkJCXZvbC0+c2VjRmxnIHw9IENJRlNTRUNfTUFZX05UTE1TU1A7Ci0jZW5kaWYKIAkJCX0gZWxzZSBpZiAoc3RybmljbXAodmFsdWUsICJudGxtdjJpIiwgNykgPT0gMCkgewogCQkJCXZvbC0+c2VjRmxnIHw9IENJRlNTRUNfTUFZX05UTE1WMiB8CiAJCQkJCUNJRlNTRUNfTVVTVF9TSUdOOwpAQCAtMTE2OCwyMiArMTE2NSwyMiBAQAogCQkJaWYgKCF2YWx1ZSB8fCAhKnZhbHVlIHx8ICgqdmFsdWUgPT0gJyAnKSkgewogCQkJCWNGWUkoMSwgImludmFsaWQgKGVtcHR5KSBuZXRiaW9zbmFtZSIpOwogCQkJfSBlbHNlIHsKLQkJCQltZW1zZXQodm9sLT5zb3VyY2VfcmZjMTAwMV9uYW1lLCAweDIwLCAxNSk7Ci0JCQkJZm9yIChpID0gMDsgaSA8IDE1OyBpKyspIHsKLQkJCQkvKiBCQiBhcmUgdGhlcmUgY2FzZXMgaW4gd2hpY2ggYSBjb21tYSBjYW4gYmUKLQkJCQl2YWxpZCBpbiB0aGlzIHdvcmtzdGF0aW9uIG5ldGJpb3MgbmFtZSAoYW5kIG5lZWQKLQkJCQlzcGVjaWFsIGhhbmRsaW5nKT8gKi8KLQotCQkJCS8qIFdlIGRvIG5vdCB1cHBlcmNhc2UgbmV0Ymlvc25hbWUgZm9yIHVzZXIgKi8KKwkJCQltZW1zZXQodm9sLT5zb3VyY2VfcmZjMTAwMV9uYW1lLCAweDIwLAorCQkJCQlSRkMxMDAxX05BTUVfTEVOKTsKKwkJCQkvKgorCQkJCSAqIEZJWE1FOiBhcmUgdGhlcmUgY2FzZXMgaW4gd2hpY2ggYSBjb21tYSBjYW4KKwkJCQkgKiBiZSB2YWxpZCBpbiB3b3Jrc3RhdGlvbiBuZXRiaW9zIG5hbWUgKGFuZAorCQkJCSAqIG5lZWQgc3BlY2lhbCBoYW5kbGluZyk/CisJCQkJICovCisJCQkJZm9yIChpID0gMDsgaSA8IFJGQzEwMDFfTkFNRV9MRU47IGkrKykgeworCQkJCQkvKiBkb24ndCB1Y2FzZSBuZXRiaW9zbmFtZSBmb3IgdXNlciAqLwogCQkJCQlpZiAodmFsdWVbaV0gPT0gMCkKIAkJCQkJCWJyZWFrOwotCQkJCQllbHNlCi0JCQkJCQl2b2wtPnNvdXJjZV9yZmMxMDAxX25hbWVbaV0gPQotCQkJCQkJCQl2YWx1ZVtpXTsKKwkJCQkJdm9sLT5zb3VyY2VfcmZjMTAwMV9uYW1lW2ldID0gdmFsdWVbaV07CiAJCQkJfQogCQkJCS8qIFRoZSBzdHJpbmcgaGFzIDE2dGggYnl0ZSB6ZXJvIHN0aWxsIGZyb20KIAkJCQlzZXQgYXQgdG9wIG9mIHRoZSBmdW5jdGlvbiAgKi8KLQkJCQlpZiAoKGkgPT0gMTUpICYmICh2YWx1ZVtpXSAhPSAwKSkKKwkJCQlpZiAoaSA9PSBSRkMxMDAxX05BTUVfTEVOICYmIHZhbHVlW2ldICE9IDApCiAJCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkNJRlM6IG5ldGJpb3NuYW1lIgogCQkJCQkJIiBsb25nZXIgdGhhbiAxNSB0cnVuY2F0ZWQuXG4iKTsKIAkJCX0KQEAgLTExOTMsNyArMTE5MCw4IEBACiAJCQkJY0ZZSSgxLCAiZW1wdHkgc2VydmVyIG5ldGJpb3NuYW1lIHNwZWNpZmllZCIpOwogCQkJfSBlbHNlIHsKIAkJCQkvKiBsYXN0IGJ5dGUsIHR5cGUsIGlzIDB4MjAgZm9yIHNlcnZyIHR5cGUgKi8KLQkJCQltZW1zZXQodm9sLT50YXJnZXRfcmZjMTAwMV9uYW1lLCAweDIwLCAxNik7CisJCQkJbWVtc2V0KHZvbC0+dGFyZ2V0X3JmYzEwMDFfbmFtZSwgMHgyMCwKKwkJCQkJUkZDMTAwMV9OQU1FX0xFTl9XSVRIX05VTEwpOwogCiAJCQkJZm9yIChpID0gMDsgaSA8IDE1OyBpKyspIHsKIAkJCQkvKiBCQiBhcmUgdGhlcmUgY2FzZXMgaW4gd2hpY2ggYSBjb21tYSBjYW4gYmUKQEAgLTEyMTAsNyArMTIwOCw3IEBACiAJCQkJfQogCQkJCS8qIFRoZSBzdHJpbmcgaGFzIDE2dGggYnl0ZSB6ZXJvIHN0aWxsIGZyb20KIAkJCQkgICBzZXQgYXQgdG9wIG9mIHRoZSBmdW5jdGlvbiAgKi8KLQkJCQlpZiAoKGkgPT0gMTUpICYmICh2YWx1ZVtpXSAhPSAwKSkKKwkJCQlpZiAoaSA9PSBSRkMxMDAxX05BTUVfTEVOICYmIHZhbHVlW2ldICE9IDApCiAJCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkNJRlM6IHNlcnZlciBuZXQiCiAJCQkJCSJiaW9zbmFtZSBsb25nZXIgdGhhbiAxNSB0cnVuY2F0ZWQuXG4iKTsKIAkJCX0KQEAgLTEzNDEsMTAgKzEzMzksOCBAQAogCQkJdm9sLT5ub19wc3hfYWNsID0gMDsKIAkJfSBlbHNlIGlmIChzdHJuaWNtcChkYXRhLCAibm9hY2wiLCA1KSA9PSAwKSB7CiAJCQl2b2wtPm5vX3BzeF9hY2wgPSAxOwotI2lmZGVmIENPTkZJR19DSUZTX0VYUEVSSU1FTlRBTAogCQl9IGVsc2UgaWYgKHN0cm5pY21wKGRhdGEsICJsb2NhbGxlYXNlIiwgNikgPT0gMCkgewogCQkJdm9sLT5sb2NhbF9sZWFzZSA9IDE7Ci0jZW5kaWYKIAkJfSBlbHNlIGlmIChzdHJuaWNtcChkYXRhLCAic2lnbiIsIDQpID09IDApIHsKIAkJCXZvbC0+c2VjRmxnIHw9IENJRlNTRUNfTVVTVF9TSUdOOwogCQl9IGVsc2UgaWYgKHN0cm5pY21wKGRhdGEsICJzZWFsIiwgNCkgPT0gMCkgewpAQCAtMTQ1NCwzNSArMTQ1MCw3MSBAQAogCX0KIH0KIAorLyoKKyAqIElmIG5vIHBvcnQgaXMgc3BlY2lmaWVkIGluIGFkZHIgc3RydWN0dXJlLCB3ZSB0cnkgdG8gbWF0Y2ggd2l0aCA0NDUgcG9ydAorICogYW5kIGlmIGl0IGZhaWxzIC0gd2l0aCAxMzkgcG9ydHMuIEl0IHNob3VsZCBiZSBjYWxsZWQgb25seSBpZiBhZGRyZXNzCisgKiBmYW1pbGllcyBvZiBzZXJ2ZXIgYW5kIGFkZHIgYXJlIGVxdWFsLgorICovCitzdGF0aWMgYm9vbAorbWF0Y2hfcG9ydChzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzZXJ2ZXIsIHN0cnVjdCBzb2NrYWRkciAqYWRkcikKK3sKKwl1bnNpZ25lZCBzaG9ydCBpbnQgcG9ydCwgKnNwb3J0OworCisJc3dpdGNoIChhZGRyLT5zYV9mYW1pbHkpIHsKKwljYXNlIEFGX0lORVQ6CisJCXNwb3J0ID0gJigoc3RydWN0IHNvY2thZGRyX2luICopICZzZXJ2ZXItPmRzdGFkZHIpLT5zaW5fcG9ydDsKKwkJcG9ydCA9ICgoc3RydWN0IHNvY2thZGRyX2luICopIGFkZHIpLT5zaW5fcG9ydDsKKwkJYnJlYWs7CisJY2FzZSBBRl9JTkVUNjoKKwkJc3BvcnQgPSAmKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopICZzZXJ2ZXItPmRzdGFkZHIpLT5zaW42X3BvcnQ7CisJCXBvcnQgPSAoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikgYWRkciktPnNpbjZfcG9ydDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJV0FSTl9PTigxKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWlmICghcG9ydCkgeworCQlwb3J0ID0gaHRvbnMoQ0lGU19QT1JUKTsKKwkJaWYgKHBvcnQgPT0gKnNwb3J0KQorCQkJcmV0dXJuIHRydWU7CisKKwkJcG9ydCA9IGh0b25zKFJGQzEwMDFfUE9SVCk7CisJfQorCisJcmV0dXJuIHBvcnQgPT0gKnNwb3J0OworfQogCiBzdGF0aWMgYm9vbAogbWF0Y2hfYWRkcmVzcyhzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzZXJ2ZXIsIHN0cnVjdCBzb2NrYWRkciAqYWRkciwKIAkgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKnNyY2FkZHIpCiB7Ci0Jc3RydWN0IHNvY2thZGRyX2luICphZGRyNCA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilhZGRyOwotCXN0cnVjdCBzb2NrYWRkcl9pbjYgKmFkZHI2ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilhZGRyOwotCiAJc3dpdGNoIChhZGRyLT5zYV9mYW1pbHkpIHsKLQljYXNlIEFGX0lORVQ6Ci0JCWlmIChhZGRyNC0+c2luX2FkZHIuc19hZGRyICE9Ci0JCSAgICBzZXJ2ZXItPmFkZHIuc29ja0FkZHIuc2luX2FkZHIuc19hZGRyKQotCQkJcmV0dXJuIGZhbHNlOwotCQlpZiAoYWRkcjQtPnNpbl9wb3J0ICYmCi0JCSAgICBhZGRyNC0+c2luX3BvcnQgIT0gc2VydmVyLT5hZGRyLnNvY2tBZGRyLnNpbl9wb3J0KQorCWNhc2UgQUZfSU5FVDogeworCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKmFkZHI0ID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKWFkZHI7CisJCXN0cnVjdCBzb2NrYWRkcl9pbiAqc3J2X2FkZHI0ID0KKwkJCQkJKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZzZXJ2ZXItPmRzdGFkZHI7CisKKwkJaWYgKGFkZHI0LT5zaW5fYWRkci5zX2FkZHIgIT0gc3J2X2FkZHI0LT5zaW5fYWRkci5zX2FkZHIpCiAJCQlyZXR1cm4gZmFsc2U7CiAJCWJyZWFrOwotCWNhc2UgQUZfSU5FVDY6CisJfQorCWNhc2UgQUZfSU5FVDY6IHsKKwkJc3RydWN0IHNvY2thZGRyX2luNiAqYWRkcjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKWFkZHI7CisJCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNydl9hZGRyNiA9CisJCQkJCShzdHJ1Y3Qgc29ja2FkZHJfaW42ICopJnNlcnZlci0+ZHN0YWRkcjsKKwogCQlpZiAoIWlwdjZfYWRkcl9lcXVhbCgmYWRkcjYtPnNpbjZfYWRkciwKLQkJCQkgICAgICZzZXJ2ZXItPmFkZHIuc29ja0FkZHI2LnNpbjZfYWRkcikpCisJCQkJICAgICAmc3J2X2FkZHI2LT5zaW42X2FkZHIpKQogCQkJcmV0dXJuIGZhbHNlOwotCQlpZiAoYWRkcjYtPnNpbjZfc2NvcGVfaWQgIT0KLQkJICAgIHNlcnZlci0+YWRkci5zb2NrQWRkcjYuc2luNl9zY29wZV9pZCkKLQkJCXJldHVybiBmYWxzZTsKLQkJaWYgKGFkZHI2LT5zaW42X3BvcnQgJiYKLQkJICAgIGFkZHI2LT5zaW42X3BvcnQgIT0gc2VydmVyLT5hZGRyLnNvY2tBZGRyNi5zaW42X3BvcnQpCisJCWlmIChhZGRyNi0+c2luNl9zY29wZV9pZCAhPSBzcnZfYWRkcjYtPnNpbjZfc2NvcGVfaWQpCiAJCQlyZXR1cm4gZmFsc2U7CiAJCWJyZWFrOwogCX0KKwlkZWZhdWx0OgorCQlXQVJOX09OKDEpOworCQlyZXR1cm4gZmFsc2U7IC8qIGRvbid0IGV4cGVjdCB0byBiZSBoZXJlICovCisJfQogCiAJaWYgKCFzcmNpcF9tYXRjaGVzKHNyY2FkZHIsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2VydmVyLT5zcmNhZGRyKSkKIAkJcmV0dXJuIGZhbHNlOwpAQCAtMTU0OSw2ICsxNTgxLDkgQEAKIAkJCQkgICAoc3RydWN0IHNvY2thZGRyICopJnZvbC0+c3JjYWRkcikpCiAJCQljb250aW51ZTsKIAorCQlpZiAoIW1hdGNoX3BvcnQoc2VydmVyLCBhZGRyKSkKKwkJCWNvbnRpbnVlOworCiAJCWlmICghbWF0Y2hfc2VjdXJpdHkoc2VydmVyLCB2b2wpKQogCQkJY29udGludWU7CiAKQEAgLTE2ODEsMTQgKzE3MTYsMTMgQEAKIAkJY0ZZSSgxLCAiYXR0ZW1wdGluZyBpcHY2IGNvbm5lY3QiKTsKIAkJLyogQkIgc2hvdWxkIHdlIGFsbG93IGlwdjYgb24gcG9ydCAxMzk/ICovCiAJCS8qIG90aGVyIE9TIG5ldmVyIG9ic2VydmVkIGluIFdpbGQgZG9pbmcgMTM5IHdpdGggdjYgKi8KLQkJbWVtY3B5KCZ0Y3Bfc2VzLT5hZGRyLnNvY2tBZGRyNiwgc2luX3NlcnZlcjYsCi0JCQlzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOwotCQlyYyA9IGlwdjZfY29ubmVjdCh0Y3Bfc2VzKTsKLQl9IGVsc2UgewotCQltZW1jcHkoJnRjcF9zZXMtPmFkZHIuc29ja0FkZHIsIHNpbl9zZXJ2ZXIsCi0JCQlzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7Ci0JCXJjID0gaXB2NF9jb25uZWN0KHRjcF9zZXMpOwotCX0KKwkJbWVtY3B5KCZ0Y3Bfc2VzLT5kc3RhZGRyLCBzaW5fc2VydmVyNiwKKwkJICAgICAgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7CisJfSBlbHNlCisJCW1lbWNweSgmdGNwX3Nlcy0+ZHN0YWRkciwgc2luX3NlcnZlciwKKwkJICAgICAgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKworCXJjID0gaXBfY29ubmVjdCh0Y3Bfc2VzKTsKIAlpZiAocmMgPCAwKSB7CiAJCWNFUlJPUigxLCAiRXJyb3IgY29ubmVjdGluZyB0byBzb2NrZXQuIEFib3J0aW5nIG9wZXJhdGlvbiIpOwogCQlnb3RvIG91dF9lcnJfY3J5cHRvX3JlbGVhc2U7CkBAIC0xNzkzLDYgKzE4MjcsOCBAQAogewogCWludCByYyA9IC1FTk9NRU0sIHhpZDsKIAlzdHJ1Y3QgY2lmc1Nlc0luZm8gKnNlczsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gKmFkZHIgPSAoc3RydWN0IHNvY2thZGRyX2luICopJnNlcnZlci0+ZHN0YWRkcjsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW42ICphZGRyNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopJnNlcnZlci0+ZHN0YWRkcjsKIAogCXhpZCA9IEdldFhpZCgpOwogCkBAIC0xODM2LDEyICsxODcyLDEwIEBACiAKIAkvKiBuZXcgU01CIHNlc3Npb24gdXNlcyBvdXIgc2VydmVyIHJlZiAqLwogCXNlcy0+c2VydmVyID0gc2VydmVyOwotCWlmIChzZXJ2ZXItPmFkZHIuc29ja0FkZHI2LnNpbjZfZmFtaWx5ID09IEFGX0lORVQ2KQotCQlzcHJpbnRmKHNlcy0+c2VydmVyTmFtZSwgIiVwSTYiLAotCQkJJnNlcnZlci0+YWRkci5zb2NrQWRkcjYuc2luNl9hZGRyKTsKKwlpZiAoc2VydmVyLT5kc3RhZGRyLnNzX2ZhbWlseSA9PSBBRl9JTkVUNikKKwkJc3ByaW50ZihzZXMtPnNlcnZlck5hbWUsICIlcEk2IiwgJmFkZHI2LT5zaW42X2FkZHIpOwogCWVsc2UKLQkJc3ByaW50ZihzZXMtPnNlcnZlck5hbWUsICIlcEk0IiwKLQkJCSZzZXJ2ZXItPmFkZHIuc29ja0FkZHIuc2luX2FkZHIuc19hZGRyKTsKKwkJc3ByaW50ZihzZXMtPnNlcnZlck5hbWUsICIlcEk0IiwgJmFkZHItPnNpbl9hZGRyKTsKIAogCWlmICh2b2x1bWVfaW5mby0+dXNlcm5hbWUpCiAJCXN0cm5jcHkoc2VzLT51c2VyTmFtZSwgdm9sdW1lX2luZm8tPnVzZXJuYW1lLApAQCAtMjEzNiwxOSArMjE3MCwxMDYgQEAKIH0KIAogc3RhdGljIGludAotaXB2NF9jb25uZWN0KHN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNlcnZlcikKK2lwX3JmYzEwMDFfY29ubmVjdChzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzZXJ2ZXIpCiB7CiAJaW50IHJjID0gMDsKLQlpbnQgdmFsOwotCWJvb2wgY29ubmVjdGVkID0gZmFsc2U7Ci0JX19iZTE2IG9yaWdfcG9ydCA9IDA7CisJLyoKKwkgKiBzb21lIHNlcnZlcnMgcmVxdWlyZSBSRkMxMDAxIHNlc3Npbml0IGJlZm9yZSBzZW5kaW5nCisJICogbmVncHJvdCAtIEJCIGNoZWNrIHJlY29ubmVjdGlvbiBpbiBjYXNlIHdoZXJlIHNlY29uZAorCSAqIHNlc3Npbml0IGlzIHNlbnQgYnV0IG5vIHNlY29uZCBuZWdwcm90CisJICovCisJc3RydWN0IHJmYzEwMDJfc2Vzc2lvbl9wYWNrZXQgKnNlc19pbml0X2J1ZjsKKwlzdHJ1Y3Qgc21iX2hkciAqc21iX2J1ZjsKKwlzZXNfaW5pdF9idWYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmZjMTAwMl9zZXNzaW9uX3BhY2tldCksCisJCQkgICAgICAgR0ZQX0tFUk5FTCk7CisJaWYgKHNlc19pbml0X2J1ZikgeworCQlzZXNfaW5pdF9idWYtPnRyYWlsZXIuc2Vzc2lvbl9yZXEuY2FsbGVkX2xlbiA9IDMyOworCisJCWlmIChzZXJ2ZXItPnNlcnZlcl9SRkMxMDAxX25hbWUgJiYKKwkJICAgIHNlcnZlci0+c2VydmVyX1JGQzEwMDFfbmFtZVswXSAhPSAwKQorCQkJcmZjMTAwMm1hbmdsZShzZXNfaW5pdF9idWYtPnRyYWlsZXIuCisJCQkJICAgICAgc2Vzc2lvbl9yZXEuY2FsbGVkX25hbWUsCisJCQkJICAgICAgc2VydmVyLT5zZXJ2ZXJfUkZDMTAwMV9uYW1lLAorCQkJCSAgICAgIFJGQzEwMDFfTkFNRV9MRU5fV0lUSF9OVUxMKTsKKwkJZWxzZQorCQkJcmZjMTAwMm1hbmdsZShzZXNfaW5pdF9idWYtPnRyYWlsZXIuCisJCQkJICAgICAgc2Vzc2lvbl9yZXEuY2FsbGVkX25hbWUsCisJCQkJICAgICAgREVGQVVMVF9DSUZTX0NBTExFRF9OQU1FLAorCQkJCSAgICAgIFJGQzEwMDFfTkFNRV9MRU5fV0lUSF9OVUxMKTsKKworCQlzZXNfaW5pdF9idWYtPnRyYWlsZXIuc2Vzc2lvbl9yZXEuY2FsbGluZ19sZW4gPSAzMjsKKworCQkvKgorCQkgKiBjYWxsaW5nIG5hbWUgZW5kcyBpbiBudWxsIChieXRlIDE2KSBmcm9tIG9sZCBzbWIKKwkJICogY29udmVudGlvbi4KKwkJICovCisJCWlmIChzZXJ2ZXItPndvcmtzdGF0aW9uX1JGQzEwMDFfbmFtZSAmJgorCQkgICAgc2VydmVyLT53b3Jrc3RhdGlvbl9SRkMxMDAxX25hbWVbMF0gIT0gMCkKKwkJCXJmYzEwMDJtYW5nbGUoc2VzX2luaXRfYnVmLT50cmFpbGVyLgorCQkJCSAgICAgIHNlc3Npb25fcmVxLmNhbGxpbmdfbmFtZSwKKwkJCQkgICAgICBzZXJ2ZXItPndvcmtzdGF0aW9uX1JGQzEwMDFfbmFtZSwKKwkJCQkgICAgICBSRkMxMDAxX05BTUVfTEVOX1dJVEhfTlVMTCk7CisJCWVsc2UKKwkJCXJmYzEwMDJtYW5nbGUoc2VzX2luaXRfYnVmLT50cmFpbGVyLgorCQkJCSAgICAgIHNlc3Npb25fcmVxLmNhbGxpbmdfbmFtZSwKKwkJCQkgICAgICAiTElOVVhfQ0lGU19DTE5UIiwKKwkJCQkgICAgICBSRkMxMDAxX05BTUVfTEVOX1dJVEhfTlVMTCk7CisKKwkJc2VzX2luaXRfYnVmLT50cmFpbGVyLnNlc3Npb25fcmVxLnNjb3BlMSA9IDA7CisJCXNlc19pbml0X2J1Zi0+dHJhaWxlci5zZXNzaW9uX3JlcS5zY29wZTIgPSAwOworCQlzbWJfYnVmID0gKHN0cnVjdCBzbWJfaGRyICopc2VzX2luaXRfYnVmOworCisJCS8qIHNpemVvZiBSRkMxMDAyX1NFU1NJT05fUkVRVUVTVCB3aXRoIG5vIHNjb3BlICovCisJCXNtYl9idWYtPnNtYl9idWZfbGVuZ3RoID0gMHg4MTAwMDA0NDsKKwkJcmMgPSBzbWJfc2VuZChzZXJ2ZXIsIHNtYl9idWYsIDB4NDQpOworCQlrZnJlZShzZXNfaW5pdF9idWYpOworCQkvKgorCQkgKiBSRkMxMDAxIGxheWVyIGluIGF0IGxlYXN0IG9uZSBzZXJ2ZXIKKwkJICogcmVxdWlyZXMgdmVyeSBzaG9ydCBicmVhayBiZWZvcmUgbmVncHJvdAorCQkgKiBwcmVzdW1hYmx5IGJlY2F1c2Ugbm90IGV4cGVjdGluZyBuZWdwcm90CisJCSAqIHRvIGZvbGxvdyBzbyBmYXN0LiAgVGhpcyBpcyBhIHNpbXBsZQorCQkgKiBzb2x1dGlvbiB0aGF0IHdvcmtzIHdpdGhvdXQKKwkJICogY29tcGxpY2F0aW5nIHRoZSBjb2RlIGFuZCBjYXVzZXMgbm8KKwkJICogc2lnbmlmaWNhbnQgc2xvd2luZyBkb3duIG9uIG1vdW50CisJCSAqIGZvciBldmVyeW9uZSBlbHNlCisJCSAqLworCQl1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7CisJfQorCS8qCisJICogZWxzZSB0aGUgbmVncHJvdCBtYXkgc3RpbGwgd29yayB3aXRob3V0IHRoaXMKKwkgKiBldmVuIHRob3VnaCBtYWxsb2MgZmFpbGVkCisJICovCisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQKK2dlbmVyaWNfaXBfY29ubmVjdChzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzZXJ2ZXIpCit7CisJaW50IHJjID0gMDsKKwl1bnNpZ25lZCBzaG9ydCBpbnQgc3BvcnQ7CisJaW50IHNsZW4sIHNmYW1pbHk7CiAJc3RydWN0IHNvY2tldCAqc29ja2V0ID0gc2VydmVyLT5zc29ja2V0OworCXN0cnVjdCBzb2NrYWRkciAqc2FkZHI7CisKKwlzYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikgJnNlcnZlci0+ZHN0YWRkcjsKKworCWlmIChzZXJ2ZXItPmRzdGFkZHIuc3NfZmFtaWx5ID09IEFGX0lORVQ2KSB7CisJCXNwb3J0ID0gKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopIHNhZGRyKS0+c2luNl9wb3J0OworCQlzbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOworCQlzZmFtaWx5ID0gQUZfSU5FVDY7CisJfSBlbHNlIHsKKwkJc3BvcnQgPSAoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSBzYWRkciktPnNpbl9wb3J0OworCQlzbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisJCXNmYW1pbHkgPSBBRl9JTkVUOworCX0KIAogCWlmIChzb2NrZXQgPT0gTlVMTCkgewotCQlyYyA9IHNvY2tfY3JlYXRlX2tlcm4oUEZfSU5FVCwgU09DS19TVFJFQU0sCisJCXJjID0gc29ja19jcmVhdGVfa2VybihzZmFtaWx5LCBTT0NLX1NUUkVBTSwKIAkJCQkgICAgICBJUFBST1RPX1RDUCwgJnNvY2tldCk7CiAJCWlmIChyYyA8IDApIHsKIAkJCWNFUlJPUigxLCAiRXJyb3IgJWQgY3JlYXRpbmcgc29ja2V0IiwgcmMpOworCQkJc2VydmVyLT5zc29ja2V0ID0gTlVMTDsKIAkJCXJldHVybiByYzsKIAkJfQogCkBAIC0yMTU2LDIxOCArMjI3NywxOSBAQAogCQljRllJKDEsICJTb2NrZXQgY3JlYXRlZCIpOwogCQlzZXJ2ZXItPnNzb2NrZXQgPSBzb2NrZXQ7CiAJCXNvY2tldC0+c2stPnNrX2FsbG9jYXRpb24gPSBHRlBfTk9GUzsKLQkJY2lmc19yZWNsYXNzaWZ5X3NvY2tldDQoc29ja2V0KTsKKwkJaWYgKHNmYW1pbHkgPT0gQUZfSU5FVDYpCisJCQljaWZzX3JlY2xhc3NpZnlfc29ja2V0Nihzb2NrZXQpOworCQllbHNlCisJCQljaWZzX3JlY2xhc3NpZnlfc29ja2V0NChzb2NrZXQpOwogCX0KIAogCXJjID0gYmluZF9zb2NrZXQoc2VydmVyKTsKIAlpZiAocmMgPCAwKQogCQlyZXR1cm4gcmM7CiAKLQkvKiB1c2VyIG92ZXJyb2RlIGRlZmF1bHQgcG9ydCAqLwotCWlmIChzZXJ2ZXItPmFkZHIuc29ja0FkZHIuc2luX3BvcnQpIHsKLQkJcmMgPSBzb2NrZXQtPm9wcy0+Y29ubmVjdChzb2NrZXQsIChzdHJ1Y3Qgc29ja2FkZHIgKikKLQkJCQkJICAmc2VydmVyLT5hZGRyLnNvY2tBZGRyLAotCQkJCQkgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pLCAwKTsKLQkJaWYgKHJjID49IDApCi0JCQljb25uZWN0ZWQgPSB0cnVlOwotCX0KLQotCWlmICghY29ubmVjdGVkKSB7Ci0JCS8qIHNhdmUgb3JpZ2luYWwgcG9ydCBzbyB3ZSBjYW4gcmV0cnkgdXNlciBzcGVjaWZpZWQgcG9ydAotCQkJbGF0ZXIgaWYgZmFsbCBiYWNrIHBvcnRzIGZhaWwgdGhpcyB0aW1lICAqLwotCQlvcmlnX3BvcnQgPSBzZXJ2ZXItPmFkZHIuc29ja0FkZHIuc2luX3BvcnQ7Ci0KLQkJLyogZG8gbm90IHJldHJ5IG9uIHRoZSBzYW1lIHBvcnQgd2UganVzdCBmYWlsZWQgb24gKi8KLQkJaWYgKHNlcnZlci0+YWRkci5zb2NrQWRkci5zaW5fcG9ydCAhPSBodG9ucyhDSUZTX1BPUlQpKSB7Ci0JCQlzZXJ2ZXItPmFkZHIuc29ja0FkZHIuc2luX3BvcnQgPSBodG9ucyhDSUZTX1BPUlQpOwotCQkJcmMgPSBzb2NrZXQtPm9wcy0+Y29ubmVjdChzb2NrZXQsCi0JCQkJCQkoc3RydWN0IHNvY2thZGRyICopCi0JCQkJCQkmc2VydmVyLT5hZGRyLnNvY2tBZGRyLAotCQkJCQkJc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbiksIDApOwotCQkJaWYgKHJjID49IDApCi0JCQkJY29ubmVjdGVkID0gdHJ1ZTsKLQkJfQotCX0KLQlpZiAoIWNvbm5lY3RlZCkgewotCQlzZXJ2ZXItPmFkZHIuc29ja0FkZHIuc2luX3BvcnQgPSBodG9ucyhSRkMxMDAxX1BPUlQpOwotCQlyYyA9IHNvY2tldC0+b3BzLT5jb25uZWN0KHNvY2tldCwgKHN0cnVjdCBzb2NrYWRkciAqKQotCQkJCQkgICAgICAmc2VydmVyLT5hZGRyLnNvY2tBZGRyLAotCQkJCQkgICAgICBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSwgMCk7Ci0JCWlmIChyYyA+PSAwKQotCQkJY29ubmVjdGVkID0gdHJ1ZTsKLQl9Ci0KLQkvKiBnaXZlIHVwIGhlcmUgLSB1bmxlc3Mgd2Ugd2FudCB0byByZXRyeSBvbiBkaWZmZXJlbnQKLQkJcHJvdG9jb2wgZmFtaWxpZXMgc29tZSBkYXkgKi8KLQlpZiAoIWNvbm5lY3RlZCkgewotCQlpZiAob3JpZ19wb3J0KQotCQkJc2VydmVyLT5hZGRyLnNvY2tBZGRyLnNpbl9wb3J0ID0gb3JpZ19wb3J0OwotCQljRllJKDEsICJFcnJvciAlZCBjb25uZWN0aW5nIHRvIHNlcnZlciB2aWEgaXB2NCIsIHJjKTsKLQkJc29ja19yZWxlYXNlKHNvY2tldCk7Ci0JCXNlcnZlci0+c3NvY2tldCA9IE5VTEw7Ci0JCXJldHVybiByYzsKLQl9Ci0KLQotCS8qCi0JICogRXZlbnR1YWxseSBjaGVjayBmb3Igb3RoZXIgc29ja2V0IG9wdGlvbnMgdG8gY2hhbmdlIGZyb20KLQkgKiAgdGhlIGRlZmF1bHQuIHNvY2tfc2V0c29ja29wdCBub3QgdXNlZCBiZWNhdXNlIGl0IGV4cGVjdHMKLQkgKiAgdXNlciBzcGFjZSBidWZmZXIKLQkgKi8KLQlzb2NrZXQtPnNrLT5za19yY3Z0aW1lbyA9IDcgKiBIWjsKLQlzb2NrZXQtPnNrLT5za19zbmR0aW1lbyA9IDUgKiBIWjsKLQotCS8qIG1ha2UgdGhlIGJ1ZnNpemVzIGRlcGVuZCBvbiB3c2l6ZS9yc2l6ZSBhbmQgbWF4IHJlcXVlc3RzICovCi0JaWYgKHNlcnZlci0+bm9hdXRvdHVuZSkgewotCQlpZiAoc29ja2V0LT5zay0+c2tfc25kYnVmIDwgKDIwMCAqIDEwMjQpKQotCQkJc29ja2V0LT5zay0+c2tfc25kYnVmID0gMjAwICogMTAyNDsKLQkJaWYgKHNvY2tldC0+c2stPnNrX3JjdmJ1ZiA8ICgxNDAgKiAxMDI0KSkKLQkJCXNvY2tldC0+c2stPnNrX3JjdmJ1ZiA9IDE0MCAqIDEwMjQ7Ci0JfQotCi0JaWYgKHNlcnZlci0+dGNwX25vZGVsYXkpIHsKLQkJdmFsID0gMTsKLQkJcmMgPSBrZXJuZWxfc2V0c29ja29wdChzb2NrZXQsIFNPTF9UQ1AsIFRDUF9OT0RFTEFZLAotCQkJCShjaGFyICopJnZhbCwgc2l6ZW9mKHZhbCkpOwotCQlpZiAocmMpCi0JCQljRllJKDEsICJzZXQgVENQX05PREVMQVkgc29ja2V0IG9wdGlvbiBlcnJvciAlZCIsIHJjKTsKLQl9Ci0KLQkgY0ZZSSgxLCAic25kYnVmICVkIHJjdmJ1ZiAlZCByY3Z0aW1lbyAweCVseCIsCi0JCSBzb2NrZXQtPnNrLT5za19zbmRidWYsCi0JCSBzb2NrZXQtPnNrLT5za19yY3ZidWYsIHNvY2tldC0+c2stPnNrX3JjdnRpbWVvKTsKLQotCS8qIHNlbmQgUkZDMTAwMSBzZXNzaW5pdCAqLwotCWlmIChzZXJ2ZXItPmFkZHIuc29ja0FkZHIuc2luX3BvcnQgPT0gaHRvbnMoUkZDMTAwMV9QT1JUKSkgewotCQkvKiBzb21lIHNlcnZlcnMgcmVxdWlyZSBSRkMxMDAxIHNlc3Npbml0IGJlZm9yZSBzZW5kaW5nCi0JCW5lZ3Byb3QgLSBCQiBjaGVjayByZWNvbm5lY3Rpb24gaW4gY2FzZSB3aGVyZSBzZWNvbmQKLQkJc2Vzc2luaXQgaXMgc2VudCBidXQgbm8gc2Vjb25kIG5lZ3Byb3QgKi8KLQkJc3RydWN0IHJmYzEwMDJfc2Vzc2lvbl9wYWNrZXQgKnNlc19pbml0X2J1ZjsKLQkJc3RydWN0IHNtYl9oZHIgKnNtYl9idWY7Ci0JCXNlc19pbml0X2J1ZiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByZmMxMDAyX3Nlc3Npb25fcGFja2V0KSwKLQkJCQkgICAgICAgR0ZQX0tFUk5FTCk7Ci0JCWlmIChzZXNfaW5pdF9idWYpIHsKLQkJCXNlc19pbml0X2J1Zi0+dHJhaWxlci5zZXNzaW9uX3JlcS5jYWxsZWRfbGVuID0gMzI7Ci0JCQlpZiAoc2VydmVyLT5zZXJ2ZXJfUkZDMTAwMV9uYW1lICYmCi0JCQkgICAgc2VydmVyLT5zZXJ2ZXJfUkZDMTAwMV9uYW1lWzBdICE9IDApCi0JCQkJcmZjMTAwMm1hbmdsZShzZXNfaW5pdF9idWYtPnRyYWlsZXIuCi0JCQkJCQlzZXNzaW9uX3JlcS5jYWxsZWRfbmFtZSwKLQkJCQkJICAgICAgc2VydmVyLT5zZXJ2ZXJfUkZDMTAwMV9uYW1lLAotCQkJCQkgICAgICBSRkMxMDAxX05BTUVfTEVOX1dJVEhfTlVMTCk7Ci0JCQllbHNlCi0JCQkJcmZjMTAwMm1hbmdsZShzZXNfaW5pdF9idWYtPnRyYWlsZXIuCi0JCQkJCQlzZXNzaW9uX3JlcS5jYWxsZWRfbmFtZSwKLQkJCQkJICAgICAgREVGQVVMVF9DSUZTX0NBTExFRF9OQU1FLAotCQkJCQkgICAgICBSRkMxMDAxX05BTUVfTEVOX1dJVEhfTlVMTCk7Ci0KLQkJCXNlc19pbml0X2J1Zi0+dHJhaWxlci5zZXNzaW9uX3JlcS5jYWxsaW5nX2xlbiA9IDMyOwotCi0JCQkvKiBjYWxsaW5nIG5hbWUgZW5kcyBpbiBudWxsIChieXRlIDE2KSBmcm9tIG9sZCBzbWIKLQkJCWNvbnZlbnRpb24uICovCi0JCQlpZiAoc2VydmVyLT53b3Jrc3RhdGlvbl9SRkMxMDAxX25hbWUgJiYKLQkJCSAgICBzZXJ2ZXItPndvcmtzdGF0aW9uX1JGQzEwMDFfbmFtZVswXSAhPSAwKQotCQkJCXJmYzEwMDJtYW5nbGUoc2VzX2luaXRfYnVmLT50cmFpbGVyLgotCQkJCQkJc2Vzc2lvbl9yZXEuY2FsbGluZ19uYW1lLAotCQkJCQkgICAgICBzZXJ2ZXItPndvcmtzdGF0aW9uX1JGQzEwMDFfbmFtZSwKLQkJCQkJICAgICAgUkZDMTAwMV9OQU1FX0xFTl9XSVRIX05VTEwpOwotCQkJZWxzZQotCQkJCXJmYzEwMDJtYW5nbGUoc2VzX2luaXRfYnVmLT50cmFpbGVyLgotCQkJCQkJc2Vzc2lvbl9yZXEuY2FsbGluZ19uYW1lLAotCQkJCQkgICAgICAiTElOVVhfQ0lGU19DTE5UIiwKLQkJCQkJICAgICAgUkZDMTAwMV9OQU1FX0xFTl9XSVRIX05VTEwpOwotCi0JCQlzZXNfaW5pdF9idWYtPnRyYWlsZXIuc2Vzc2lvbl9yZXEuc2NvcGUxID0gMDsKLQkJCXNlc19pbml0X2J1Zi0+dHJhaWxlci5zZXNzaW9uX3JlcS5zY29wZTIgPSAwOwotCQkJc21iX2J1ZiA9IChzdHJ1Y3Qgc21iX2hkciAqKXNlc19pbml0X2J1ZjsKLQkJCS8qIHNpemVvZiBSRkMxMDAyX1NFU1NJT05fUkVRVUVTVCB3aXRoIG5vIHNjb3BlICovCi0JCQlzbWJfYnVmLT5zbWJfYnVmX2xlbmd0aCA9IDB4ODEwMDAwNDQ7Ci0JCQlyYyA9IHNtYl9zZW5kKHNlcnZlciwgc21iX2J1ZiwgMHg0NCk7Ci0JCQlrZnJlZShzZXNfaW5pdF9idWYpOwotCQkJbXNsZWVwKDEpOyAvKiBSRkMxMDAxIGxheWVyIGluIGF0IGxlYXN0IG9uZSBzZXJ2ZXIKLQkJCQkgICAgICByZXF1aXJlcyB2ZXJ5IHNob3J0IGJyZWFrIGJlZm9yZSBuZWdwcm90Ci0JCQkJICAgICAgcHJlc3VtYWJseSBiZWNhdXNlIG5vdCBleHBlY3RpbmcgbmVncHJvdAotCQkJCSAgICAgIHRvIGZvbGxvdyBzbyBmYXN0LiAgVGhpcyBpcyBhIHNpbXBsZQotCQkJCSAgICAgIHNvbHV0aW9uIHRoYXQgd29ya3Mgd2l0aG91dAotCQkJCSAgICAgIGNvbXBsaWNhdGluZyB0aGUgY29kZSBhbmQgY2F1c2VzIG5vCi0JCQkJICAgICAgc2lnbmlmaWNhbnQgc2xvd2luZyBkb3duIG9uIG1vdW50Ci0JCQkJICAgICAgZm9yIGV2ZXJ5b25lIGVsc2UgKi8KLQkJfQotCQkvKiBlbHNlIHRoZSBuZWdwcm90IG1heSBzdGlsbCB3b3JrIHdpdGhvdXQgdGhpcwotCQlldmVuIHRob3VnaCBtYWxsb2MgZmFpbGVkICovCi0KLQl9Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQKLWlwdjZfY29ubmVjdChzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzZXJ2ZXIpCi17Ci0JaW50IHJjID0gMDsKLQlpbnQgdmFsOwotCWJvb2wgY29ubmVjdGVkID0gZmFsc2U7Ci0JX19iZTE2IG9yaWdfcG9ydCA9IDA7Ci0Jc3RydWN0IHNvY2tldCAqc29ja2V0ID0gc2VydmVyLT5zc29ja2V0OwotCi0JaWYgKHNvY2tldCA9PSBOVUxMKSB7Ci0JCXJjID0gc29ja19jcmVhdGVfa2VybihQRl9JTkVUNiwgU09DS19TVFJFQU0sCi0JCQkJICAgICAgSVBQUk9UT19UQ1AsICZzb2NrZXQpOwotCQlpZiAocmMgPCAwKSB7Ci0JCQljRVJST1IoMSwgIkVycm9yICVkIGNyZWF0aW5nIGlwdjYgc29ja2V0IiwgcmMpOwotCQkJc29ja2V0ID0gTlVMTDsKLQkJCXJldHVybiByYzsKLQkJfQotCi0JCS8qIEJCIG90aGVyIHNvY2tldCBvcHRpb25zIHRvIHNldCBLRUVQQUxJVkUsIE5PREVMQVk/ICovCi0JCWNGWUkoMSwgImlwdjYgU29ja2V0IGNyZWF0ZWQiKTsKLQkJc2VydmVyLT5zc29ja2V0ID0gc29ja2V0OwotCQlzb2NrZXQtPnNrLT5za19hbGxvY2F0aW9uID0gR0ZQX05PRlM7Ci0JCWNpZnNfcmVjbGFzc2lmeV9zb2NrZXQ2KHNvY2tldCk7Ci0JfQotCi0JcmMgPSBiaW5kX3NvY2tldChzZXJ2ZXIpOwotCWlmIChyYyA8IDApCi0JCXJldHVybiByYzsKLQotCS8qIHVzZXIgb3ZlcnJvZGUgZGVmYXVsdCBwb3J0ICovCi0JaWYgKHNlcnZlci0+YWRkci5zb2NrQWRkcjYuc2luNl9wb3J0KSB7Ci0JCXJjID0gc29ja2V0LT5vcHMtPmNvbm5lY3Qoc29ja2V0LAotCQkJCShzdHJ1Y3Qgc29ja2FkZHIgKikgJnNlcnZlci0+YWRkci5zb2NrQWRkcjYsCi0JCQkJc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpLCAwKTsKLQkJaWYgKHJjID49IDApCi0JCQljb25uZWN0ZWQgPSB0cnVlOwotCX0KLQotCWlmICghY29ubmVjdGVkKSB7Ci0JCS8qIHNhdmUgb3JpZ2luYWwgcG9ydCBzbyB3ZSBjYW4gcmV0cnkgdXNlciBzcGVjaWZpZWQgcG9ydAotCQkJbGF0ZXIgaWYgZmFsbCBiYWNrIHBvcnRzIGZhaWwgdGhpcyB0aW1lICAqLwotCi0JCW9yaWdfcG9ydCA9IHNlcnZlci0+YWRkci5zb2NrQWRkcjYuc2luNl9wb3J0OwotCQkvKiBkbyBub3QgcmV0cnkgb24gdGhlIHNhbWUgcG9ydCB3ZSBqdXN0IGZhaWxlZCBvbiAqLwotCQlpZiAoc2VydmVyLT5hZGRyLnNvY2tBZGRyNi5zaW42X3BvcnQgIT0gaHRvbnMoQ0lGU19QT1JUKSkgewotCQkJc2VydmVyLT5hZGRyLnNvY2tBZGRyNi5zaW42X3BvcnQgPSBodG9ucyhDSUZTX1BPUlQpOwotCQkJcmMgPSBzb2NrZXQtPm9wcy0+Y29ubmVjdChzb2NrZXQsIChzdHJ1Y3Qgc29ja2FkZHIgKikKLQkJCQkJJnNlcnZlci0+YWRkci5zb2NrQWRkcjYsCi0JCQkJCXNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSwgMCk7Ci0JCQlpZiAocmMgPj0gMCkKLQkJCQljb25uZWN0ZWQgPSB0cnVlOwotCQl9Ci0JfQotCWlmICghY29ubmVjdGVkKSB7Ci0JCXNlcnZlci0+YWRkci5zb2NrQWRkcjYuc2luNl9wb3J0ID0gaHRvbnMoUkZDMTAwMV9QT1JUKTsKLQkJcmMgPSBzb2NrZXQtPm9wcy0+Y29ubmVjdChzb2NrZXQsIChzdHJ1Y3Qgc29ja2FkZHIgKikKLQkJCQkmc2VydmVyLT5hZGRyLnNvY2tBZGRyNiwKLQkJCQlzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNiksIDApOwotCQlpZiAocmMgPj0gMCkKLQkJCWNvbm5lY3RlZCA9IHRydWU7Ci0JfQotCi0JLyogZ2l2ZSB1cCBoZXJlIC0gdW5sZXNzIHdlIHdhbnQgdG8gcmV0cnkgb24gZGlmZmVyZW50Ci0JCXByb3RvY29sIGZhbWlsaWVzIHNvbWUgZGF5ICovCi0JaWYgKCFjb25uZWN0ZWQpIHsKLQkJaWYgKG9yaWdfcG9ydCkKLQkJCXNlcnZlci0+YWRkci5zb2NrQWRkcjYuc2luNl9wb3J0ID0gb3JpZ19wb3J0OwotCQljRllJKDEsICJFcnJvciAlZCBjb25uZWN0aW5nIHRvIHNlcnZlciB2aWEgaXB2NiIsIHJjKTsKKwlyYyA9IHNvY2tldC0+b3BzLT5jb25uZWN0KHNvY2tldCwgc2FkZHIsIHNsZW4sIDApOworCWlmIChyYyA8IDApIHsKKwkJY0ZZSSgxLCAiRXJyb3IgJWQgY29ubmVjdGluZyB0byBzZXJ2ZXIiLCByYyk7CiAJCXNvY2tfcmVsZWFzZShzb2NrZXQpOwogCQlzZXJ2ZXItPnNzb2NrZXQgPSBOVUxMOwogCQlyZXR1cm4gcmM7CkBAIC0yMzgxLDE5ICsyMzAzLDYxIEBACiAJc29ja2V0LT5zay0+c2tfcmN2dGltZW8gPSA3ICogSFo7CiAJc29ja2V0LT5zay0+c2tfc25kdGltZW8gPSA1ICogSFo7CiAKKwkvKiBtYWtlIHRoZSBidWZzaXplcyBkZXBlbmQgb24gd3NpemUvcnNpemUgYW5kIG1heCByZXF1ZXN0cyAqLworCWlmIChzZXJ2ZXItPm5vYXV0b3R1bmUpIHsKKwkJaWYgKHNvY2tldC0+c2stPnNrX3NuZGJ1ZiA8ICgyMDAgKiAxMDI0KSkKKwkJCXNvY2tldC0+c2stPnNrX3NuZGJ1ZiA9IDIwMCAqIDEwMjQ7CisJCWlmIChzb2NrZXQtPnNrLT5za19yY3ZidWYgPCAoMTQwICogMTAyNCkpCisJCQlzb2NrZXQtPnNrLT5za19yY3ZidWYgPSAxNDAgKiAxMDI0OworCX0KKwogCWlmIChzZXJ2ZXItPnRjcF9ub2RlbGF5KSB7Ci0JCXZhbCA9IDE7CisJCWludCB2YWwgPSAxOwogCQlyYyA9IGtlcm5lbF9zZXRzb2Nrb3B0KHNvY2tldCwgU09MX1RDUCwgVENQX05PREVMQVksCiAJCQkJKGNoYXIgKikmdmFsLCBzaXplb2YodmFsKSk7CiAJCWlmIChyYykKIAkJCWNGWUkoMSwgInNldCBUQ1BfTk9ERUxBWSBzb2NrZXQgb3B0aW9uIGVycm9yICVkIiwgcmMpOwogCX0KIAotCXNlcnZlci0+c3NvY2tldCA9IHNvY2tldDsKKwkgY0ZZSSgxLCAic25kYnVmICVkIHJjdmJ1ZiAlZCByY3Z0aW1lbyAweCVseCIsCisJCSBzb2NrZXQtPnNrLT5za19zbmRidWYsCisJCSBzb2NrZXQtPnNrLT5za19yY3ZidWYsIHNvY2tldC0+c2stPnNrX3JjdnRpbWVvKTsKKworCWlmIChzcG9ydCA9PSBodG9ucyhSRkMxMDAxX1BPUlQpKQorCQlyYyA9IGlwX3JmYzEwMDFfY29ubmVjdChzZXJ2ZXIpOwogCiAJcmV0dXJuIHJjOwogfQogCitzdGF0aWMgaW50CitpcF9jb25uZWN0KHN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNlcnZlcikKK3sKKwl1bnNpZ25lZCBzaG9ydCBpbnQgKnNwb3J0OworCXN0cnVjdCBzb2NrYWRkcl9pbjYgKmFkZHI2ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikmc2VydmVyLT5kc3RhZGRyOworCXN0cnVjdCBzb2NrYWRkcl9pbiAqYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmc2VydmVyLT5kc3RhZGRyOworCisJaWYgKHNlcnZlci0+ZHN0YWRkci5zc19mYW1pbHkgPT0gQUZfSU5FVDYpCisJCXNwb3J0ID0gJmFkZHI2LT5zaW42X3BvcnQ7CisJZWxzZQorCQlzcG9ydCA9ICZhZGRyLT5zaW5fcG9ydDsKKworCWlmICgqc3BvcnQgPT0gMCkgeworCQlpbnQgcmM7CisKKwkJLyogdHJ5IHdpdGggNDQ1IHBvcnQgYXQgZmlyc3QgKi8KKwkJKnNwb3J0ID0gaHRvbnMoQ0lGU19QT1JUKTsKKworCQlyYyA9IGdlbmVyaWNfaXBfY29ubmVjdChzZXJ2ZXIpOworCQlpZiAocmMgPj0gMCkKKwkJCXJldHVybiByYzsKKworCQkvKiBpZiBpdCBmYWlsZWQsIHRyeSB3aXRoIDEzOSBwb3J0ICovCisJCSpzcG9ydCA9IGh0b25zKFJGQzEwMDFfUE9SVCk7CisJfQorCisJcmV0dXJuIGdlbmVyaWNfaXBfY29ubmVjdChzZXJ2ZXIpOworfQorCiB2b2lkIHJlc2V0X2NpZnNfdW5peF9jYXBzKGludCB4aWQsIHN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb24sCiAJCQkgIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBzbWJfdm9sICp2b2xfaW5mbykKIHsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvZGlyLmMgYi9mcy9jaWZzL2Rpci5jCmluZGV4IDM4NDBlZGQuLjJlNzczODIgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvZGlyLmMKKysrIGIvZnMvY2lmcy9kaXIuYwpAQCAtMTM1LDkgKzEzNSw5IEBACiAJCQkgICAgICBzdHJ1Y3QgaW5vZGUgKm5ld2lub2RlKQogewogCWlmICh0Y29uLT5ub2Nhc2UpCi0JCWRpcmVudHJ5LT5kX29wID0gJmNpZnNfY2lfZGVudHJ5X29wczsKKwkJZF9zZXRfZF9vcChkaXJlbnRyeSwgJmNpZnNfY2lfZGVudHJ5X29wcyk7CiAJZWxzZQotCQlkaXJlbnRyeS0+ZF9vcCA9ICZjaWZzX2RlbnRyeV9vcHM7CisJCWRfc2V0X2Rfb3AoZGlyZW50cnksICZjaWZzX2RlbnRyeV9vcHMpOwogCWRfaW5zdGFudGlhdGUoZGlyZW50cnksIG5ld2lub2RlKTsKIH0KIApAQCAtMjkzLDEwICsyOTMsOCBAQAogCQkJYXJncy51aWQgPSBOT19DSEFOR0VfNjQ7CiAJCQlhcmdzLmdpZCA9IE5PX0NIQU5HRV82NDsKIAkJfQotCQlDSUZTU01CVW5peFNldFBhdGhJbmZvKHhpZCwgdGNvbiwgZnVsbF9wYXRoLCAmYXJncywKLQkJCQkJY2lmc19zYi0+bG9jYWxfbmxzLAotCQkJCQljaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmCi0JCQkJCQlDSUZTX01PVU5UX01BUF9TUEVDSUFMX0NIUik7CisJCUNJRlNTTUJVbml4U2V0RmlsZUluZm8oeGlkLCB0Y29uLCAmYXJncywgZmlsZUhhbmRsZSwKKwkJCQkJY3VycmVudC0+dGdpZCk7CiAJfSBlbHNlIHsKIAkJLyogQkIgaW1wbGVtZW50IG1vZGUgc2V0dGluZyB2aWEgV2luZG93cyBzZWN1cml0eQogCQkgICBkZXNjcmlwdG9ycyBlLmcuICovCkBAIC00MjEsOSArNDE5LDkgQEAKIAkJcmMgPSBjaWZzX2dldF9pbm9kZV9pbmZvX3VuaXgoJm5ld2lub2RlLCBmdWxsX3BhdGgsCiAJCQkJCQlpbm9kZS0+aV9zYiwgeGlkKTsKIAkJaWYgKHBUY29uLT5ub2Nhc2UpCi0JCQlkaXJlbnRyeS0+ZF9vcCA9ICZjaWZzX2NpX2RlbnRyeV9vcHM7CisJCQlkX3NldF9kX29wKGRpcmVudHJ5LCAmY2lmc19jaV9kZW50cnlfb3BzKTsKIAkJZWxzZQotCQkJZGlyZW50cnktPmRfb3AgPSAmY2lmc19kZW50cnlfb3BzOworCQkJZF9zZXRfZF9vcChkaXJlbnRyeSwgJmNpZnNfZGVudHJ5X29wcyk7CiAKIAkJaWYgKHJjID09IDApCiAJCQlkX2luc3RhbnRpYXRlKGRpcmVudHJ5LCBuZXdpbm9kZSk7CkBAIC02MDQsOSArNjAyLDkgQEAKIAogCWlmICgocmMgPT0gMCkgJiYgKG5ld0lub2RlICE9IE5VTEwpKSB7CiAJCWlmIChwVGNvbi0+bm9jYXNlKQotCQkJZGlyZW50cnktPmRfb3AgPSAmY2lmc19jaV9kZW50cnlfb3BzOworCQkJZF9zZXRfZF9vcChkaXJlbnRyeSwgJmNpZnNfY2lfZGVudHJ5X29wcyk7CiAJCWVsc2UKLQkJCWRpcmVudHJ5LT5kX29wID0gJmNpZnNfZGVudHJ5X29wczsKKwkJCWRfc2V0X2Rfb3AoZGlyZW50cnksICZjaWZzX2RlbnRyeV9vcHMpOwogCQlkX2FkZChkaXJlbnRyeSwgbmV3SW5vZGUpOwogCQlpZiAocG9zaXhfb3BlbikgewogCQkJZmlscCA9IGxvb2t1cF9pbnN0YW50aWF0ZV9maWxwKG5kLCBkaXJlbnRyeSwKQEAgLTYzNCw5ICs2MzIsOSBAQAogCQlyYyA9IDA7CiAJCWRpcmVudHJ5LT5kX3RpbWUgPSBqaWZmaWVzOwogCQlpZiAocFRjb24tPm5vY2FzZSkKLQkJCWRpcmVudHJ5LT5kX29wID0gJmNpZnNfY2lfZGVudHJ5X29wczsKKwkJCWRfc2V0X2Rfb3AoZGlyZW50cnksICZjaWZzX2NpX2RlbnRyeV9vcHMpOwogCQllbHNlCi0JCQlkaXJlbnRyeS0+ZF9vcCA9ICZjaWZzX2RlbnRyeV9vcHM7CisJCQlkX3NldF9kX29wKGRpcmVudHJ5LCAmY2lmc19kZW50cnlfb3BzKTsKIAkJZF9hZGQoZGlyZW50cnksIE5VTEwpOwogCS8qCWlmIGl0IHdhcyBvbmNlIGEgZGlyZWN0b3J5IChidXQgaG93IGNhbiB3ZSB0ZWxsPykgd2UgY291bGQgZG8KIAkJc2hyaW5rX2RjYWNoZV9wYXJlbnQoZGlyZW50cnkpOyAqLwpAQCAtNjU2LDIyICs2NTQsMzcgQEAKIHN0YXRpYyBpbnQKIGNpZnNfZF9yZXZhbGlkYXRlKHN0cnVjdCBkZW50cnkgKmRpcmVudHJ5LCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKIHsKLQlpbnQgaXNWYWxpZCA9IDE7CisJaWYgKG5kLT5mbGFncyAmIExPT0tVUF9SQ1UpCisJCXJldHVybiAtRUNISUxEOwogCiAJaWYgKGRpcmVudHJ5LT5kX2lub2RlKSB7CiAJCWlmIChjaWZzX3JldmFsaWRhdGVfZGVudHJ5KGRpcmVudHJ5KSkKIAkJCXJldHVybiAwOwotCX0gZWxzZSB7Ci0JCWNGWUkoMSwgIm5lZyBkZW50cnkgMHglcCBuYW1lID0gJXMiLAotCQkJIGRpcmVudHJ5LCBkaXJlbnRyeS0+ZF9uYW1lLm5hbWUpOwotCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBkaXJlbnRyeS0+ZF90aW1lICsgSFopIHx8Ci0JCQkhbG9va3VwQ2FjaGVFbmFibGVkKSB7Ci0JCQlkX2Ryb3AoZGlyZW50cnkpOwotCQkJaXNWYWxpZCA9IDA7Ci0JCX0KKwkJZWxzZQorCQkJcmV0dXJuIDE7CiAJfQogCi0JcmV0dXJuIGlzVmFsaWQ7CisJLyoKKwkgKiBUaGlzIG1heSBiZSBuZnNkIChvciBzb21ldGhpbmcpLCBhbnl3YXksIHdlIGNhbid0IHNlZSB0aGUKKwkgKiBpbnRlbnQgb2YgdGhpcy4gU28sIHNpbmNlIHRoaXMgY2FuIGJlIGZvciBjcmVhdGlvbiwgZHJvcCBpdC4KKwkgKi8KKwlpZiAoIW5kKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogRHJvcCB0aGUgbmVnYXRpdmUgZGVudHJ5LCBpbiBvcmRlciB0byBtYWtlIHN1cmUgdG8gdXNlIHRoZQorCSAqIGNhc2Ugc2Vuc2l0aXZlIG5hbWUgd2hpY2ggaXMgc3BlY2lmaWVkIGJ5IHVzZXIgaWYgdGhpcyBpcworCSAqIGZvciBjcmVhdGlvbi4KKwkgKi8KKwlpZiAoIShuZC0+ZmxhZ3MgJiAoTE9PS1VQX0NPTlRJTlVFIHwgTE9PS1VQX1BBUkVOVCkpKSB7CisJCWlmIChuZC0+ZmxhZ3MgJiAoTE9PS1VQX0NSRUFURSB8IExPT0tVUF9SRU5BTUVfVEFSR0VUKSkKKwkJCXJldHVybiAwOworCX0KKworCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGRpcmVudHJ5LT5kX3RpbWUgKyBIWikgfHwgIWxvb2t1cENhY2hlRW5hYmxlZCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gMTsKIH0KIAogLyogc3RhdGljIGludCBjaWZzX2RfZGVsZXRlKHN0cnVjdCBkZW50cnkgKmRpcmVudHJ5KQpAQCAtNjg4LDkgKzcwMSwxMCBAQAogLyogZF9kZWxldGU6ICAgICAgIGNpZnNfZF9kZWxldGUsICAgICAgKi8gLyogbm90IG5lZWRlZCBleGNlcHQgZm9yIGRlYnVnZ2luZyAqLwogfTsKIAotc3RhdGljIGludCBjaWZzX2NpX2hhc2goc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgcXN0ciAqcSkKK3N0YXRpYyBpbnQgY2lmc19jaV9oYXNoKGNvbnN0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSwKKwkJc3RydWN0IHFzdHIgKnEpCiB7Ci0Jc3RydWN0IG5sc190YWJsZSAqY29kZXBhZ2UgPSBDSUZTX1NCKGRlbnRyeS0+ZF9pbm9kZS0+aV9zYiktPmxvY2FsX25sczsKKwlzdHJ1Y3QgbmxzX3RhYmxlICpjb2RlcGFnZSA9IENJRlNfU0IoZGVudHJ5LT5kX3NiKS0+bG9jYWxfbmxzOwogCXVuc2lnbmVkIGxvbmcgaGFzaDsKIAlpbnQgaTsKIApAQCAtNzAzLDIxICs3MTcsMTYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjaWZzX2NpX2NvbXBhcmUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgcXN0ciAqYSwKLQkJCSAgIHN0cnVjdCBxc3RyICpiKQorc3RhdGljIGludCBjaWZzX2NpX2NvbXBhcmUoY29uc3Qgc3RydWN0IGRlbnRyeSAqcGFyZW50LAorCQljb25zdCBzdHJ1Y3QgaW5vZGUgKnBpbm9kZSwKKwkJY29uc3Qgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQl1bnNpZ25lZCBpbnQgbGVuLCBjb25zdCBjaGFyICpzdHIsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKQogewotCXN0cnVjdCBubHNfdGFibGUgKmNvZGVwYWdlID0gQ0lGU19TQihkZW50cnktPmRfaW5vZGUtPmlfc2IpLT5sb2NhbF9ubHM7CisJc3RydWN0IG5sc190YWJsZSAqY29kZXBhZ2UgPSBDSUZTX1NCKHBpbm9kZS0+aV9zYiktPmxvY2FsX25sczsKIAotCWlmICgoYS0+bGVuID09IGItPmxlbikgJiYKLQkgICAgKG5sc19zdHJuaWNtcChjb2RlcGFnZSwgYS0+bmFtZSwgYi0+bmFtZSwgYS0+bGVuKSA9PSAwKSkgewotCQkvKgotCQkgKiBUbyBwcmVzZXJ2ZSBjYXNlLCBkb24ndCBsZXQgYW4gZXhpc3RpbmcgbmVnYXRpdmUgZGVudHJ5J3MKLQkJICogY2FzZSB0YWtlIHByZWNlZGVuY2UuICBJZiBhIGlzIG5vdCBhIG5lZ2F0aXZlIGRlbnRyeSwgdGhpcwotCQkgKiBzaG91bGQgaGF2ZSBubyBzaWRlIGVmZmVjdHMKLQkJICovCi0JCW1lbWNweSgodm9pZCAqKWEtPm5hbWUsIGItPm5hbWUsIGEtPmxlbik7CisJaWYgKChuYW1lLT5sZW4gPT0gbGVuKSAmJgorCSAgICAobmxzX3N0cm5pY21wKGNvZGVwYWdlLCBuYW1lLT5uYW1lLCBzdHIsIGxlbikgPT0gMCkpCiAJCXJldHVybiAwOwotCX0KIAlyZXR1cm4gMTsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9maWxlLmMgYi9mcy9jaWZzL2ZpbGUuYwppbmRleCA1YTI4NjYwLi5kODQzNjMxIDEwMDY0NAotLS0gYS9mcy9jaWZzL2ZpbGUuYworKysgYi9mcy9jaWZzL2ZpbGUuYwpAQCAtMTA0LDUzICsxMDQsNiBAQAogCQlyZXR1cm4gRklMRV9PUEVOOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBjaWZzX29wZW5faW5vZGVfaGVscGVyKHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0Jc3RydWN0IGNpZnNUY29uSW5mbyAqcFRjb24sIF9fdTMyIG9wbG9jaywgRklMRV9BTExfSU5GTyAqYnVmLAotCWNoYXIgKmZ1bGxfcGF0aCwgaW50IHhpZCkKLXsKLQlzdHJ1Y3QgY2lmc0lub2RlSW5mbyAqcENpZnNJbm9kZSA9IENJRlNfSShpbm9kZSk7Ci0Jc3RydWN0IHRpbWVzcGVjIHRlbXA7Ci0JaW50IHJjOwotCi0JaWYgKHBDaWZzSW5vZGUtPmNsaWVudENhbkNhY2hlUmVhZCkgewotCQkvKiB3ZSBoYXZlIHRoZSBpbm9kZSBvcGVuIHNvbWV3aGVyZSBlbHNlCi0JCSAgIG5vIG5lZWQgdG8gZGlzY2FyZCBjYWNoZSBkYXRhICovCi0JCWdvdG8gY2xpZW50X2Nhbl9jYWNoZTsKLQl9Ci0KLQkvKiBCQiBuZWVkIHNhbWUgY2hlY2sgaW4gY2lmc19jcmVhdGUgdG9vPyAqLwotCS8qIGlmIG5vdCBvcGxvY2tlZCwgaW52YWxpZGF0ZSBpbm9kZSBwYWdlcyBpZiBtdGltZSBvciBmaWxlCi0JICAgc2l6ZSBjaGFuZ2VkICovCi0JdGVtcCA9IGNpZnNfTlR0aW1lVG9Vbml4KGJ1Zi0+TGFzdFdyaXRlVGltZSk7Ci0JaWYgKHRpbWVzcGVjX2VxdWFsKCZpbm9kZS0+aV9tdGltZSwgJnRlbXApICYmCi0JCQkgICAoaW5vZGUtPmlfc2l6ZSA9PQotCQkJICAgIChsb2ZmX3QpbGU2NF90b19jcHUoYnVmLT5FbmRPZkZpbGUpKSkgewotCQljRllJKDEsICJpbm9kZSB1bmNoYW5nZWQgb24gc2VydmVyIik7Ci0JfSBlbHNlIHsKLQkJaWYgKGlub2RlLT5pX21hcHBpbmcpIHsKLQkJCS8qIEJCIG5vIG5lZWQgdG8gbG9jayBpbm9kZSB1bnRpbCBhZnRlciBpbnZhbGlkYXRlCi0JCQlzaW5jZSBuYW1laSBjb2RlIHNob3VsZCBhbHJlYWR5IGhhdmUgaXQgbG9ja2VkPyAqLwotCQkJcmMgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0KGlub2RlLT5pX21hcHBpbmcpOwotCQkJbWFwcGluZ19zZXRfZXJyb3IoaW5vZGUtPmlfbWFwcGluZywgcmMpOwotCQl9Ci0JCWNGWUkoMSwgImludmFsaWRhdGluZyByZW1vdGUgaW5vZGUgc2luY2Ugb3BlbiBkZXRlY3RlZCBpdCAiCi0JCQkgImNoYW5nZWQiKTsKLQkJaW52YWxpZGF0ZV9yZW1vdGVfaW5vZGUoaW5vZGUpOwotCX0KLQotY2xpZW50X2Nhbl9jYWNoZToKLQlpZiAocFRjb24tPnVuaXhfZXh0KQotCQlyYyA9IGNpZnNfZ2V0X2lub2RlX2luZm9fdW5peCgmaW5vZGUsIGZ1bGxfcGF0aCwgaW5vZGUtPmlfc2IsCi0JCQkJCSAgICAgIHhpZCk7Ci0JZWxzZQotCQlyYyA9IGNpZnNfZ2V0X2lub2RlX2luZm8oJmlub2RlLCBmdWxsX3BhdGgsIGJ1ZiwgaW5vZGUtPmlfc2IsCi0JCQkJCSB4aWQsIE5VTEwpOwotCi0JY2lmc19zZXRfb3Bsb2NrX2xldmVsKHBDaWZzSW5vZGUsIG9wbG9jayk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KIGludCBjaWZzX3Bvc2l4X29wZW4oY2hhciAqZnVsbF9wYXRoLCBzdHJ1Y3QgaW5vZGUgKipwaW5vZGUsCiAJCQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgbW9kZSwgdW5zaWduZWQgaW50IGZfZmxhZ3MsCiAJCQlfX3UzMiAqcG9wbG9jaywgX191MTYgKnBuZXRmaWQsIGludCB4aWQpCkBAIC0yMTMsNiArMTY2LDc2IEBACiAJcmV0dXJuIHJjOwogfQogCitzdGF0aWMgaW50CitjaWZzX250X29wZW4oY2hhciAqZnVsbF9wYXRoLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiLAorCSAgICAgc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiwgdW5zaWduZWQgaW50IGZfZmxhZ3MsIF9fdTMyICpwb3Bsb2NrLAorCSAgICAgX191MTYgKnBuZXRmaWQsIGludCB4aWQpCit7CisJaW50IHJjOworCWludCBkZXNpcmVkQWNjZXNzOworCWludCBkaXNwb3NpdGlvbjsKKwlGSUxFX0FMTF9JTkZPICpidWY7CisKKwlkZXNpcmVkQWNjZXNzID0gY2lmc19jb252ZXJ0X2ZsYWdzKGZfZmxhZ3MpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgb3BlbiBmbGFnIG1hcHBpbmcgdGFibGU6CisgKgorICoJUE9TSVggRmxhZyAgICAgICAgICAgIENJRlMgRGlzcG9zaXRpb24KKyAqCS0tLS0tLS0tLS0gICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tCisgKglPX0NSRUFUICAgICAgICAgICAgICAgRklMRV9PUEVOX0lGCisgKglPX0NSRUFUIHwgT19FWENMICAgICAgRklMRV9DUkVBVEUKKyAqCU9fQ1JFQVQgfCBPX1RSVU5DICAgICBGSUxFX09WRVJXUklURV9JRgorICoJT19UUlVOQyAgICAgICAgICAgICAgIEZJTEVfT1ZFUldSSVRFCisgKglub25lIG9mIHRoZSBhYm92ZSAgICAgRklMRV9PUEVOCisgKgorICoJTm90ZSB0aGF0IHRoZXJlIGlzIG5vdCBhIGRpcmVjdCBtYXRjaCBiZXR3ZWVuIGRpc3Bvc2l0aW9uCisgKglGSUxFX1NVUEVSU0VERSAoaWUgY3JlYXRlIHdoZXRoZXIgb3Igbm90IGZpbGUgZXhpc3RzIGFsdGhvdWdoCisgKglPX0NSRUFUIHwgT19UUlVOQyBpcyBzaW1pbGFyIGJ1dCB0cnVuY2F0ZXMgdGhlIGV4aXN0aW5nCisgKglmaWxlIHJhdGhlciB0aGFuIGNyZWF0aW5nIGEgbmV3IGZpbGUgYXMgRklMRV9TVVBFUlNFREUgZG9lcworICoJKHdoaWNoIHVzZXMgdGhlIGF0dHJpYnV0ZXMgLyBtZXRhZGF0YSBwYXNzZWQgaW4gb24gb3BlbiBjYWxsKQorICo/CisgKj8gIE9fU1lOQyBpcyBhIHJlYXNvbmFibGUgbWF0Y2ggdG8gQ0lGUyB3cml0ZXRocm91Z2ggZmxhZworICo/ICBhbmQgdGhlIHJlYWQgd3JpdGUgZmxhZ3MgbWF0Y2ggcmVhc29uYWJseS4gIE9fTEFSR0VGSUxFCisgKj8gIGlzIGlycmVsZXZhbnQgYmVjYXVzZSBsYXJnZWZpbGUgc3VwcG9ydCBpcyBhbHdheXMgdXNlZAorICo/ICBieSB0aGlzIGNsaWVudC4gRmxhZ3MgT19BUFBFTkQsIE9fRElSRUNULCBPX0RJUkVDVE9SWSwKKyAqCSBPX0ZBU1lOQywgT19OT0ZPTExPVywgT19OT05CTE9DSyBuZWVkIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWRpc3Bvc2l0aW9uID0gY2lmc19nZXRfZGlzcG9zaXRpb24oZl9mbGFncyk7CisKKwkvKiBCQiBwYXNzIE9fU1lOQyBmbGFnIHRocm91Z2ggb24gZmlsZSBhdHRyaWJ1dGVzIC4uIEJCICovCisKKwlidWYgPSBrbWFsbG9jKHNpemVvZihGSUxFX0FMTF9JTkZPKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKHRjb24tPnNlcy0+Y2FwYWJpbGl0aWVzICYgQ0FQX05UX1NNQlMpCisJCXJjID0gQ0lGU1NNQk9wZW4oeGlkLCB0Y29uLCBmdWxsX3BhdGgsIGRpc3Bvc2l0aW9uLAorCQkJIGRlc2lyZWRBY2Nlc3MsIENSRUFURV9OT1RfRElSLCBwbmV0ZmlkLCBwb3Bsb2NrLCBidWYsCisJCQkgY2lmc19zYi0+bG9jYWxfbmxzLCBjaWZzX3NiLT5tbnRfY2lmc19mbGFncworCQkJCSAmIENJRlNfTU9VTlRfTUFQX1NQRUNJQUxfQ0hSKTsKKwllbHNlCisJCXJjID0gU01CTGVnYWN5T3Blbih4aWQsIHRjb24sIGZ1bGxfcGF0aCwgZGlzcG9zaXRpb24sCisJCQlkZXNpcmVkQWNjZXNzLCBDUkVBVEVfTk9UX0RJUiwgcG5ldGZpZCwgcG9wbG9jaywgYnVmLAorCQkJY2lmc19zYi0+bG9jYWxfbmxzLCBjaWZzX3NiLT5tbnRfY2lmc19mbGFncworCQkJCSYgQ0lGU19NT1VOVF9NQVBfU1BFQ0lBTF9DSFIpOworCisJaWYgKHJjKQorCQlnb3RvIG91dDsKKworCWlmICh0Y29uLT51bml4X2V4dCkKKwkJcmMgPSBjaWZzX2dldF9pbm9kZV9pbmZvX3VuaXgoJmlub2RlLCBmdWxsX3BhdGgsIGlub2RlLT5pX3NiLAorCQkJCQkgICAgICB4aWQpOworCWVsc2UKKwkJcmMgPSBjaWZzX2dldF9pbm9kZV9pbmZvKCZpbm9kZSwgZnVsbF9wYXRoLCBidWYsIGlub2RlLT5pX3NiLAorCQkJCQkgeGlkLCBwbmV0ZmlkKTsKKworb3V0OgorCWtmcmVlKGJ1Zik7CisJcmV0dXJuIHJjOworfQorCiBzdHJ1Y3QgY2lmc0ZpbGVJbmZvICoKIGNpZnNfbmV3X2ZpbGVpbmZvKF9fdTE2IGZpbGVIYW5kbGUsIHN0cnVjdCBmaWxlICpmaWxlLAogCQkgIHN0cnVjdCB0Y29uX2xpbmsgKnRsaW5rLCBfX3UzMiBvcGxvY2spCkBAIC0zMTcsMTAgKzM0MCw4IEBACiAJc3RydWN0IGNpZnNGaWxlSW5mbyAqcENpZnNGaWxlID0gTlVMTDsKIAlzdHJ1Y3QgY2lmc0lub2RlSW5mbyAqcENpZnNJbm9kZTsKIAljaGFyICpmdWxsX3BhdGggPSBOVUxMOwotCWludCBkZXNpcmVkQWNjZXNzOwotCWludCBkaXNwb3NpdGlvbjsKKwlib29sIHBvc2l4X29wZW5fb2sgPSBmYWxzZTsKIAlfX3UxNiBuZXRmaWQ7Ci0JRklMRV9BTExfSU5GTyAqYnVmID0gTlVMTDsKIAogCXhpZCA9IEdldFhpZCgpOwogCkBAIC0zNTgsMTcgKzM3OSw3IEBACiAJCQkJZmlsZS0+Zl9mbGFncywgJm9wbG9jaywgJm5ldGZpZCwgeGlkKTsKIAkJaWYgKHJjID09IDApIHsKIAkJCWNGWUkoMSwgInBvc2l4IG9wZW4gc3VjY2VlZGVkIik7Ci0KLQkJCXBDaWZzRmlsZSA9IGNpZnNfbmV3X2ZpbGVpbmZvKG5ldGZpZCwgZmlsZSwgdGxpbmssCi0JCQkJCQkgICAgICBvcGxvY2spOwotCQkJaWYgKHBDaWZzRmlsZSA9PSBOVUxMKSB7Ci0JCQkJQ0lGU1NNQkNsb3NlKHhpZCwgdGNvbiwgbmV0ZmlkKTsKLQkJCQlyYyA9IC1FTk9NRU07Ci0JCQl9Ci0KLQkJCWNpZnNfZnNjYWNoZV9zZXRfaW5vZGVfY29va2llKGlub2RlLCBmaWxlKTsKLQotCQkJZ290byBvdXQ7CisJCQlwb3NpeF9vcGVuX29rID0gdHJ1ZTsKIAkJfSBlbHNlIGlmICgocmMgPT0gLUVJTlZBTCkgfHwgKHJjID09IC1FT1BOT1RTVVBQKSkgewogCQkJaWYgKHRjb24tPnNlcy0+c2VydmVyTk9TKQogCQkJCWNFUlJPUigxLCAic2VydmVyICVzIG9mIHR5cGUgJXMgcmV0dXJuZWQiCkBAIC0zODUsMTAzICszOTYsMzkgQEAKIAkJICAgb3IgREZTIGVycm9ycyAqLwogCX0KIAotCWRlc2lyZWRBY2Nlc3MgPSBjaWZzX2NvbnZlcnRfZmxhZ3MoZmlsZS0+Zl9mbGFncyk7Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICBvcGVuIGZsYWcgbWFwcGluZyB0YWJsZToKLSAqCi0gKglQT1NJWCBGbGFnICAgICAgICAgICAgQ0lGUyBEaXNwb3NpdGlvbgotICoJLS0tLS0tLS0tLSAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0KLSAqCU9fQ1JFQVQgICAgICAgICAgICAgICBGSUxFX09QRU5fSUYKLSAqCU9fQ1JFQVQgfCBPX0VYQ0wgICAgICBGSUxFX0NSRUFURQotICoJT19DUkVBVCB8IE9fVFJVTkMgICAgIEZJTEVfT1ZFUldSSVRFX0lGCi0gKglPX1RSVU5DICAgICAgICAgICAgICAgRklMRV9PVkVSV1JJVEUKLSAqCW5vbmUgb2YgdGhlIGFib3ZlICAgICBGSUxFX09QRU4KLSAqCi0gKglOb3RlIHRoYXQgdGhlcmUgaXMgbm90IGEgZGlyZWN0IG1hdGNoIGJldHdlZW4gZGlzcG9zaXRpb24KLSAqCUZJTEVfU1VQRVJTRURFIChpZSBjcmVhdGUgd2hldGhlciBvciBub3QgZmlsZSBleGlzdHMgYWx0aG91Z2gKLSAqCU9fQ1JFQVQgfCBPX1RSVU5DIGlzIHNpbWlsYXIgYnV0IHRydW5jYXRlcyB0aGUgZXhpc3RpbmcKLSAqCWZpbGUgcmF0aGVyIHRoYW4gY3JlYXRpbmcgYSBuZXcgZmlsZSBhcyBGSUxFX1NVUEVSU0VERSBkb2VzCi0gKgkod2hpY2ggdXNlcyB0aGUgYXR0cmlidXRlcyAvIG1ldGFkYXRhIHBhc3NlZCBpbiBvbiBvcGVuIGNhbGwpCi0gKj8KLSAqPyAgT19TWU5DIGlzIGEgcmVhc29uYWJsZSBtYXRjaCB0byBDSUZTIHdyaXRldGhyb3VnaCBmbGFnCi0gKj8gIGFuZCB0aGUgcmVhZCB3cml0ZSBmbGFncyBtYXRjaCByZWFzb25hYmx5LiAgT19MQVJHRUZJTEUKLSAqPyAgaXMgaXJyZWxldmFudCBiZWNhdXNlIGxhcmdlZmlsZSBzdXBwb3J0IGlzIGFsd2F5cyB1c2VkCi0gKj8gIGJ5IHRoaXMgY2xpZW50LiBGbGFncyBPX0FQUEVORCwgT19ESVJFQ1QsIE9fRElSRUNUT1JZLAotICoJIE9fRkFTWU5DLCBPX05PRk9MTE9XLCBPX05PTkJMT0NLIG5lZWQgZnVydGhlciBpbnZlc3RpZ2F0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0JZGlzcG9zaXRpb24gPSBjaWZzX2dldF9kaXNwb3NpdGlvbihmaWxlLT5mX2ZsYWdzKTsKLQotCS8qIEJCIHBhc3MgT19TWU5DIGZsYWcgdGhyb3VnaCBvbiBmaWxlIGF0dHJpYnV0ZXMgLi4gQkIgKi8KLQotCS8qIEFsc28gcmVmcmVzaCBpbm9kZSBieSBwYXNzaW5nIGluIGZpbGVfaW5mbyBidWYgcmV0dXJuZWQgYnkgU01CT3BlbgotCSAgIGFuZCBjYWxsaW5nIGdldF9pbm9kZV9pbmZvIHdpdGggcmV0dXJuZWQgYnVmIChhdCBsZWFzdCBoZWxwcwotCSAgIG5vbi1Vbml4IHNlcnZlciBjYXNlKSAqLwotCi0JLyogQkIgd2UgY2FuIG5vdCBkbyB0aGlzIGlmIHRoaXMgaXMgdGhlIHNlY29uZCBvcGVuIG9mIGEgZmlsZQotCSAgIGFuZCB0aGUgZmlyc3QgaGFuZGxlIGhhcyB3cml0ZWJlaGluZCBkYXRhLCB3ZSBtaWdodCBiZQotCSAgIGFibGUgdG8gc2ltcGx5IGRvIGEgZmlsZW1hcF9mZGF0YXdyaXRlL2ZpbGVtYXBfZmRhdGF3YWl0IGZpcnN0ICovCi0JYnVmID0ga21hbGxvYyhzaXplb2YoRklMRV9BTExfSU5GTyksIEdGUF9LRVJORUwpOwotCWlmICghYnVmKSB7Ci0JCXJjID0gLUVOT01FTTsKLQkJZ290byBvdXQ7CisJaWYgKCFwb3NpeF9vcGVuX29rKSB7CisJCXJjID0gY2lmc19udF9vcGVuKGZ1bGxfcGF0aCwgaW5vZGUsIGNpZnNfc2IsIHRjb24sCisJCQkJICBmaWxlLT5mX2ZsYWdzLCAmb3Bsb2NrLCAmbmV0ZmlkLCB4aWQpOworCQlpZiAocmMpCisJCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAodGNvbi0+c2VzLT5jYXBhYmlsaXRpZXMgJiBDQVBfTlRfU01CUykKLQkJcmMgPSBDSUZTU01CT3Blbih4aWQsIHRjb24sIGZ1bGxfcGF0aCwgZGlzcG9zaXRpb24sCi0JCQkgZGVzaXJlZEFjY2VzcywgQ1JFQVRFX05PVF9ESVIsICZuZXRmaWQsICZvcGxvY2ssIGJ1ZiwKLQkJCSBjaWZzX3NiLT5sb2NhbF9ubHMsIGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzCi0JCQkJICYgQ0lGU19NT1VOVF9NQVBfU1BFQ0lBTF9DSFIpOwotCWVsc2UKLQkJcmMgPSAtRUlPOyAvKiBubyBOVCBTTUIgc3VwcG9ydCBmYWxsIGludG8gbGVnYWN5IG9wZW4gYmVsb3cgKi8KLQotCWlmIChyYyA9PSAtRUlPKSB7Ci0JCS8qIE9sZCBzZXJ2ZXIsIHRyeSBsZWdhY3kgc3R5bGUgT3BlblggKi8KLQkJcmMgPSBTTUJMZWdhY3lPcGVuKHhpZCwgdGNvbiwgZnVsbF9wYXRoLCBkaXNwb3NpdGlvbiwKLQkJCWRlc2lyZWRBY2Nlc3MsIENSRUFURV9OT1RfRElSLCAmbmV0ZmlkLCAmb3Bsb2NrLCBidWYsCi0JCQljaWZzX3NiLT5sb2NhbF9ubHMsIGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzCi0JCQkJJiBDSUZTX01PVU5UX01BUF9TUEVDSUFMX0NIUik7Ci0JfQotCWlmIChyYykgewotCQljRllJKDEsICJjaWZzX29wZW4gcmV0dXJuZWQgMHgleCIsIHJjKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JcmMgPSBjaWZzX29wZW5faW5vZGVfaGVscGVyKGlub2RlLCB0Y29uLCBvcGxvY2ssIGJ1ZiwgZnVsbF9wYXRoLCB4aWQpOwotCWlmIChyYyAhPSAwKQotCQlnb3RvIG91dDsKLQogCXBDaWZzRmlsZSA9IGNpZnNfbmV3X2ZpbGVpbmZvKG5ldGZpZCwgZmlsZSwgdGxpbmssIG9wbG9jayk7CiAJaWYgKHBDaWZzRmlsZSA9PSBOVUxMKSB7CisJCUNJRlNTTUJDbG9zZSh4aWQsIHRjb24sIG5ldGZpZCk7CiAJCXJjID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CiAJfQogCiAJY2lmc19mc2NhY2hlX3NldF9pbm9kZV9jb29raWUoaW5vZGUsIGZpbGUpOwogCi0JaWYgKG9wbG9jayAmIENJRlNfQ1JFQVRFX0FDVElPTikgeworCWlmICgob3Bsb2NrICYgQ0lGU19DUkVBVEVfQUNUSU9OKSAmJiAhcG9zaXhfb3Blbl9vayAmJiB0Y29uLT51bml4X2V4dCkgewogCQkvKiB0aW1lIHRvIHNldCBtb2RlIHdoaWNoIHdlIGNhbiBub3Qgc2V0IGVhcmxpZXIgZHVlIHRvCiAJCSAgIHByb2JsZW1zIGNyZWF0aW5nIG5ldyByZWFkLW9ubHkgZmlsZXMgKi8KLQkJaWYgKHRjb24tPnVuaXhfZXh0KSB7Ci0JCQlzdHJ1Y3QgY2lmc191bml4X3NldF9pbmZvX2FyZ3MgYXJncyA9IHsKLQkJCQkubW9kZQk9IGlub2RlLT5pX21vZGUsCi0JCQkJLnVpZAk9IE5PX0NIQU5HRV82NCwKLQkJCQkuZ2lkCT0gTk9fQ0hBTkdFXzY0LAotCQkJCS5jdGltZQk9IE5PX0NIQU5HRV82NCwKLQkJCQkuYXRpbWUJPSBOT19DSEFOR0VfNjQsCi0JCQkJLm10aW1lCT0gTk9fQ0hBTkdFXzY0LAotCQkJCS5kZXZpY2UJPSAwLAotCQkJfTsKLQkJCUNJRlNTTUJVbml4U2V0UGF0aEluZm8oeGlkLCB0Y29uLCBmdWxsX3BhdGgsICZhcmdzLAotCQkJCQkgICAgICAgY2lmc19zYi0+bG9jYWxfbmxzLAotCQkJCQkgICAgICAgY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJgotCQkJCQkJQ0lGU19NT1VOVF9NQVBfU1BFQ0lBTF9DSFIpOwotCQl9CisJCXN0cnVjdCBjaWZzX3VuaXhfc2V0X2luZm9fYXJncyBhcmdzID0geworCQkJLm1vZGUJPSBpbm9kZS0+aV9tb2RlLAorCQkJLnVpZAk9IE5PX0NIQU5HRV82NCwKKwkJCS5naWQJPSBOT19DSEFOR0VfNjQsCisJCQkuY3RpbWUJPSBOT19DSEFOR0VfNjQsCisJCQkuYXRpbWUJPSBOT19DSEFOR0VfNjQsCisJCQkubXRpbWUJPSBOT19DSEFOR0VfNjQsCisJCQkuZGV2aWNlCT0gMCwKKwkJfTsKKwkJQ0lGU1NNQlVuaXhTZXRGaWxlSW5mbyh4aWQsIHRjb24sICZhcmdzLCBuZXRmaWQsCisJCQkJCXBDaWZzRmlsZS0+cGlkKTsKIAl9CiAKIG91dDoKLQlrZnJlZShidWYpOwogCWtmcmVlKGZ1bGxfcGF0aCk7CiAJRnJlZVhpZCh4aWQpOwogCWNpZnNfcHV0X3RsaW5rKHRsaW5rKTsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvaW5vZGUuYyBiL2ZzL2NpZnMvaW5vZGUuYwppbmRleCA1ODlmM2UzLi4wYzdlMzY5IDEwMDY0NAotLS0gYS9mcy9jaWZzL2lub2RlLmMKKysrIGIvZnMvY2lmcy9pbm9kZS5jCkBAIC01MTgsNiArNTE4LDcgQEAKIAogCWZhdHRyLT5jZl9lb2YgPSBsZTY0X3RvX2NwdShpbmZvLT5FbmRPZkZpbGUpOwogCWZhdHRyLT5jZl9ieXRlcyA9IGxlNjRfdG9fY3B1KGluZm8tPkFsbG9jYXRpb25TaXplKTsKKwlmYXR0ci0+Y2ZfY3JlYXRldGltZSA9IGxlNjRfdG9fY3B1KGluZm8tPkNyZWF0aW9uVGltZSk7CiAKIAlpZiAoZmF0dHItPmNmX2NpZnNhdHRycyAmIEFUVFJfRElSRUNUT1JZKSB7CiAJCWZhdHRyLT5jZl9tb2RlID0gU19JRkRJUiB8IGNpZnNfc2ItPm1udF9kaXJfbW9kZTsKQEAgLTc3OSw2ICs3ODAsMTAgQEAKIAlpZiAoQ0lGU19JKGlub2RlKS0+dW5pcXVlaWQgIT0gZmF0dHItPmNmX3VuaXF1ZWlkKQogCQlyZXR1cm4gMDsKIAorCS8qIHVzZSBjcmVhdGV0aW1lIGxpa2UgYW4gaV9nZW5lcmF0aW9uIGZpZWxkICovCisJaWYgKENJRlNfSShpbm9kZSktPmNyZWF0ZXRpbWUgIT0gZmF0dHItPmNmX2NyZWF0ZXRpbWUpCisJCXJldHVybiAwOworCiAJLyogZG9uJ3QgbWF0Y2ggaW5vZGUgb2YgZGlmZmVyZW50IHR5cGUgKi8KIAlpZiAoKGlub2RlLT5pX21vZGUgJiBTX0lGTVQpICE9IChmYXR0ci0+Y2ZfbW9kZSAmIFNfSUZNVCkpCiAJCXJldHVybiAwOwpAQCAtNzk2LDYgKzgwMSw3IEBACiAJc3RydWN0IGNpZnNfZmF0dHIgKmZhdHRyID0gKHN0cnVjdCBjaWZzX2ZhdHRyICopIG9wYXF1ZTsKIAogCUNJRlNfSShpbm9kZSktPnVuaXF1ZWlkID0gZmF0dHItPmNmX3VuaXF1ZWlkOworCUNJRlNfSShpbm9kZSktPmNyZWF0ZXRpbWUgPSBmYXR0ci0+Y2ZfY3JlYXRldGltZTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtODA5LDE0ICs4MTUsMTQgQEAKIHsKIAlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CiAKLQlzcGluX2xvY2soJmRjYWNoZV9sb2NrKTsKKwlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZGVudHJ5LCAmaW5vZGUtPmlfZGVudHJ5LCBkX2FsaWFzKSB7CiAJCWlmICghZF91bmhhc2hlZChkZW50cnkpIHx8IElTX1JPT1QoZGVudHJ5KSkgewotCQkJc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKKwkJCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKIAkJCXJldHVybiB0cnVlOwogCQl9CiAJfQotCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7CisJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwogCXJldHVybiBmYWxzZTsKIH0KIApAQCAtMTMxOSw5ICsxMzI1LDkgQEAKIAl0byBzZXQgdWlkL2dpZCAqLwogCQkJaW5jX25saW5rKGlub2RlKTsKIAkJCWlmIChwVGNvbi0+bm9jYXNlKQotCQkJCWRpcmVudHJ5LT5kX29wID0gJmNpZnNfY2lfZGVudHJ5X29wczsKKwkJCQlkX3NldF9kX29wKGRpcmVudHJ5LCAmY2lmc19jaV9kZW50cnlfb3BzKTsKIAkJCWVsc2UKLQkJCQlkaXJlbnRyeS0+ZF9vcCA9ICZjaWZzX2RlbnRyeV9vcHM7CisJCQkJZF9zZXRfZF9vcChkaXJlbnRyeSwgJmNpZnNfZGVudHJ5X29wcyk7CiAKIAkJCWNpZnNfdW5peF9iYXNpY190b19mYXR0cigmZmF0dHIsIHBJbmZvLCBjaWZzX3NiKTsKIAkJCWNpZnNfZmlsbF91bmlxdWVpZChpbm9kZS0+aV9zYiwgJmZhdHRyKTsKQEAgLTEzNjMsOSArMTM2OSw5IEBACiAJCQkJCQkgaW5vZGUtPmlfc2IsIHhpZCwgTlVMTCk7CiAKIAkJaWYgKHBUY29uLT5ub2Nhc2UpCi0JCQlkaXJlbnRyeS0+ZF9vcCA9ICZjaWZzX2NpX2RlbnRyeV9vcHM7CisJCQlkX3NldF9kX29wKGRpcmVudHJ5LCAmY2lmc19jaV9kZW50cnlfb3BzKTsKIAkJZWxzZQotCQkJZGlyZW50cnktPmRfb3AgPSAmY2lmc19kZW50cnlfb3BzOworCQkJZF9zZXRfZF9vcChkaXJlbnRyeSwgJmNpZnNfZGVudHJ5X29wcyk7CiAJCWRfaW5zdGFudGlhdGUoZGlyZW50cnksIG5ld2lub2RlKTsKIAkJIC8qIHNldHRpbmcgbmxpbmsgbm90IG5lY2Vzc2FyeSBleGNlcHQgaW4gY2FzZXMgd2hlcmUgd2UKIAkJICAqIGZhaWxlZCB0byBnZXQgaXQgZnJvbSB0aGUgc2VydmVyIG9yIHdhcyBzZXQgYm9ndXMgKi8KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvbGluay5jIGIvZnMvY2lmcy9saW5rLmMKaW5kZXggODVjZGJmOC4uZmUyZjZhOSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9saW5rLmMKKysrIGIvZnMvY2lmcy9saW5rLmMKQEAgLTUyNSw5ICs1MjUsOSBAQAogCQkJICAgICAgcmMpOwogCQl9IGVsc2UgewogCQkJaWYgKHBUY29uLT5ub2Nhc2UpCi0JCQkJZGlyZW50cnktPmRfb3AgPSAmY2lmc19jaV9kZW50cnlfb3BzOworCQkJCWRfc2V0X2Rfb3AoZGlyZW50cnksICZjaWZzX2NpX2RlbnRyeV9vcHMpOwogCQkJZWxzZQotCQkJCWRpcmVudHJ5LT5kX29wID0gJmNpZnNfZGVudHJ5X29wczsKKwkJCQlkX3NldF9kX29wKGRpcmVudHJ5LCAmY2lmc19kZW50cnlfb3BzKTsKIAkJCWRfaW5zdGFudGlhdGUoZGlyZW50cnksIG5ld2lub2RlKTsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvcmVhZGRpci5jIGIvZnMvY2lmcy9yZWFkZGlyLmMKaW5kZXggYTczZWI5Zi4uNzZiMWIzNyAxMDA2NDQKLS0tIGEvZnMvY2lmcy9yZWFkZGlyLmMKKysrIGIvZnMvY2lmcy9yZWFkZGlyLmMKQEAgLTc5LDcgKzc5LDcgQEAKIAljRllJKDEsICJGb3IgJXMiLCBuYW1lLT5uYW1lKTsKIAogCWlmIChwYXJlbnQtPmRfb3AgJiYgcGFyZW50LT5kX29wLT5kX2hhc2gpCi0JCXBhcmVudC0+ZF9vcC0+ZF9oYXNoKHBhcmVudCwgbmFtZSk7CisJCXBhcmVudC0+ZF9vcC0+ZF9oYXNoKHBhcmVudCwgcGFyZW50LT5kX2lub2RlLCBuYW1lKTsKIAllbHNlCiAJCW5hbWUtPmhhc2ggPSBmdWxsX25hbWVfaGFzaChuYW1lLT5uYW1lLCBuYW1lLT5sZW4pOwogCkBAIC0xMDMsOSArMTAzLDkgQEAKIAl9CiAKIAlpZiAoY2lmc19zYl9tYXN0ZXJfdGNvbihDSUZTX1NCKHNiKSktPm5vY2FzZSkKLQkJZGVudHJ5LT5kX29wID0gJmNpZnNfY2lfZGVudHJ5X29wczsKKwkJZF9zZXRfZF9vcChkZW50cnksICZjaWZzX2NpX2RlbnRyeV9vcHMpOwogCWVsc2UKLQkJZGVudHJ5LT5kX29wID0gJmNpZnNfZGVudHJ5X29wczsKKwkJZF9zZXRfZF9vcChkZW50cnksICZjaWZzX2RlbnRyeV9vcHMpOwogCiAJYWxpYXMgPSBkX21hdGVyaWFsaXNlX3VuaXF1ZShkZW50cnksIGlub2RlKTsKIAlpZiAoYWxpYXMgIT0gTlVMTCkgewpAQCAtMTYwLDYgKzE2MCw3IEBACiAJZmF0dHItPmNmX2NpZnNhdHRycyA9IGxlMzJfdG9fY3B1KGluZm8tPkV4dEZpbGVBdHRyaWJ1dGVzKTsKIAlmYXR0ci0+Y2ZfZW9mID0gbGU2NF90b19jcHUoaW5mby0+RW5kT2ZGaWxlKTsKIAlmYXR0ci0+Y2ZfYnl0ZXMgPSBsZTY0X3RvX2NwdShpbmZvLT5BbGxvY2F0aW9uU2l6ZSk7CisJZmF0dHItPmNmX2NyZWF0ZXRpbWUgPSBsZTY0X3RvX2NwdShpbmZvLT5DcmVhdGlvblRpbWUpOwogCWZhdHRyLT5jZl9hdGltZSA9IGNpZnNfTlR0aW1lVG9Vbml4KGluZm8tPkxhc3RBY2Nlc3NUaW1lKTsKIAlmYXR0ci0+Y2ZfY3RpbWUgPSBjaWZzX05UdGltZVRvVW5peChpbmZvLT5DaGFuZ2VUaW1lKTsKIAlmYXR0ci0+Y2ZfbXRpbWUgPSBjaWZzX05UdGltZVRvVW5peChpbmZvLT5MYXN0V3JpdGVUaW1lKTsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvc2Vzcy5jIGIvZnMvY2lmcy9zZXNzLmMKaW5kZXggN2IwMWQzZi4uZWI3NDY0OCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9zZXNzLmMKKysrIGIvZnMvY2lmcy9zZXNzLmMKQEAgLTQyMCw3ICs0MjAsNiBAQAogCXJldHVybiAwOwogfQogCi0jaWZkZWYgQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMCiAvKiBCQiBNb3ZlIHRvIG50bG1zc3AuYyBldmVudHVhbGx5ICovCiAKIC8qIFdlIGRvIG5vdCBtYWxsb2MgdGhlIGJsb2IsIGl0IGlzIHBhc3NlZCBpbiBwYnVmZmVyLCBiZWNhdXNlCkBAIC00MzEsMTMgKzQzMCwxNCBAQAogCU5FR09USUFURV9NRVNTQUdFICpzZWNfYmxvYiA9IChORUdPVElBVEVfTUVTU0FHRSAqKXBidWZmZXI7CiAJX191MzIgZmxhZ3M7CiAKKwltZW1zZXQocGJ1ZmZlciwgMCwgc2l6ZW9mKE5FR09USUFURV9NRVNTQUdFKSk7CiAJbWVtY3B5KHNlY19ibG9iLT5TaWduYXR1cmUsIE5UTE1TU1BfU0lHTkFUVVJFLCA4KTsKIAlzZWNfYmxvYi0+TWVzc2FnZVR5cGUgPSBOdExtTmVnb3RpYXRlOwogCiAJLyogQkIgaXMgTlRMTVYyIHNlc3Npb24gc2VjdXJpdHkgZm9ybWF0IGVhc2llciB0byB1c2UgaGVyZT8gKi8KIAlmbGFncyA9IE5UTE1TU1BfTkVHT1RJQVRFXzU2IHwJTlRMTVNTUF9SRVFVRVNUX1RBUkdFVCB8CiAJCU5UTE1TU1BfTkVHT1RJQVRFXzEyOCB8IE5UTE1TU1BfTkVHT1RJQVRFX1VOSUNPREUgfAotCQlOVExNU1NQX05FR09USUFURV9OVExNOworCQlOVExNU1NQX05FR09USUFURV9OVExNIHwgTlRMTVNTUF9ORUdPVElBVEVfRVhURU5ERURfU0VDOwogCWlmIChzZXMtPnNlcnZlci0+c2VjTW9kZSAmCiAJCQkoU0VDTU9ERV9TSUdOX1JFUVVJUkVEIHwgU0VDTU9ERV9TSUdOX0VOQUJMRUQpKSB7CiAJCWZsYWdzIHw9IE5UTE1TU1BfTkVHT1RJQVRFX1NJR047CkBAIC00NDYsNyArNDQ2LDcgQEAKIAkJCQlOVExNU1NQX05FR09USUFURV9FWFRFTkRFRF9TRUM7CiAJfQogCi0Jc2VjX2Jsb2ItPk5lZ290aWF0ZUZsYWdzIHw9IGNwdV90b19sZTMyKGZsYWdzKTsKKwlzZWNfYmxvYi0+TmVnb3RpYXRlRmxhZ3MgPSBjcHVfdG9fbGUzMihmbGFncyk7CiAKIAlzZWNfYmxvYi0+V29ya3N0YXRpb25OYW1lLkJ1ZmZlck9mZnNldCA9IDA7CiAJc2VjX2Jsb2ItPldvcmtzdGF0aW9uTmFtZS5MZW5ndGggPSAwOwpAQCAtNDc3LDcgKzQ3Nyw3IEBACiAJZmxhZ3MgPSBOVExNU1NQX05FR09USUFURV81NiB8CiAJCU5UTE1TU1BfUkVRVUVTVF9UQVJHRVQgfCBOVExNU1NQX05FR09USUFURV9UQVJHRVRfSU5GTyB8CiAJCU5UTE1TU1BfTkVHT1RJQVRFXzEyOCB8IE5UTE1TU1BfTkVHT1RJQVRFX1VOSUNPREUgfAotCQlOVExNU1NQX05FR09USUFURV9OVExNOworCQlOVExNU1NQX05FR09USUFURV9OVExNIHwgTlRMTVNTUF9ORUdPVElBVEVfRVhURU5ERURfU0VDOwogCWlmIChzZXMtPnNlcnZlci0+c2VjTW9kZSAmCiAJICAgKFNFQ01PREVfU0lHTl9SRVFVSVJFRCB8IFNFQ01PREVfU0lHTl9FTkFCTEVEKSkKIAkJZmxhZ3MgfD0gTlRMTVNTUF9ORUdPVElBVEVfU0lHTjsKQEAgLTQ4NSw3ICs0ODUsNyBAQAogCQlmbGFncyB8PSBOVExNU1NQX05FR09USUFURV9BTFdBWVNfU0lHTjsKIAogCXRtcCA9IHBidWZmZXIgKyBzaXplb2YoQVVUSEVOVElDQVRFX01FU1NBR0UpOwotCXNlY19ibG9iLT5OZWdvdGlhdGVGbGFncyB8PSBjcHVfdG9fbGUzMihmbGFncyk7CisJc2VjX2Jsb2ItPk5lZ290aWF0ZUZsYWdzID0gY3B1X3RvX2xlMzIoZmxhZ3MpOwogCiAJc2VjX2Jsb2ItPkxtQ2hhbGxlbmdlUmVzcG9uc2UuQnVmZmVyT2Zmc2V0ID0KIAkJCQljcHVfdG9fbGUzMihzaXplb2YoQVVUSEVOVElDQVRFX01FU1NBR0UpKTsKQEAgLTU0NCw4ICs1NDQsOSBAQAogCXNlY19ibG9iLT5Xb3Jrc3RhdGlvbk5hbWUuTWF4aW11bUxlbmd0aCA9IDA7CiAJdG1wICs9IDI7CiAKLQlpZiAoKHNlcy0+bnRsbXNzcC0+c2VydmVyX2ZsYWdzICYgTlRMTVNTUF9ORUdPVElBVEVfS0VZX1hDSCkgJiYKLQkJCSFjYWxjX3NlY2tleShzZXMpKSB7CisJaWYgKCgoc2VzLT5udGxtc3NwLT5zZXJ2ZXJfZmxhZ3MgJiBOVExNU1NQX05FR09USUFURV9LRVlfWENIKSB8fAorCQkoc2VzLT5udGxtc3NwLT5zZXJ2ZXJfZmxhZ3MgJiBOVExNU1NQX05FR09USUFURV9FWFRFTkRFRF9TRUMpKQorCQkJJiYgIWNhbGNfc2Vja2V5KHNlcykpIHsKIAkJbWVtY3B5KHRtcCwgc2VzLT5udGxtc3NwLT5jaXBoZXJ0ZXh0LCBDSUZTX0NQSFRYVF9TSVpFKTsKIAkJc2VjX2Jsb2ItPlNlc3Npb25LZXkuQnVmZmVyT2Zmc2V0ID0gY3B1X3RvX2xlMzIodG1wIC0gcGJ1ZmZlcik7CiAJCXNlY19ibG9iLT5TZXNzaW9uS2V5Lkxlbmd0aCA9IGNwdV90b19sZTE2KENJRlNfQ1BIVFhUX1NJWkUpOwpAQCAtNTYzLDE3ICs1NjQsNiBAQAogCXJldHVybiByYzsKIH0KIAotCi1zdGF0aWMgdm9pZCBzZXR1cF9udGxtc3NwX25lZ19yZXEoU0VTU0lPTl9TRVRVUF9BTkRYICpwU01CLAotCQkJCSBzdHJ1Y3QgY2lmc1Nlc0luZm8gKnNlcykKLXsKLQlidWlsZF9udGxtc3NwX25lZ290aWF0ZV9ibG9iKCZwU01CLT5yZXEuU2VjdXJpdHlCbG9iWzBdLCBzZXMpOwotCXBTTUItPnJlcS5TZWN1cml0eUJsb2JMZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoTkVHT1RJQVRFX01FU1NBR0UpKTsKLQotCXJldHVybjsKLX0KLSNlbmRpZgotCiBpbnQKIENJRlNfU2Vzc1NldHVwKHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBjaWZzU2VzSW5mbyAqc2VzLAogCSAgICAgICBjb25zdCBzdHJ1Y3QgbmxzX3RhYmxlICpubHNfY3ApCkBAIC04MTQsNzEgKzgwNCw3MCBAQAogCQlyYyA9IC1FTk9TWVM7CiAJCWdvdG8gc3NldHVwX2V4aXQ7CiAjZW5kaWYgLyogQ09ORklHX0NJRlNfVVBDQUxMICovCi0JfSBlbHNlIHsKLSNpZmRlZiBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwKLQkJaWYgKHR5cGUgPT0gUmF3TlRMTVNTUCkgewotCQkJaWYgKChwU01CLT5yZXEuaGRyLkZsYWdzMiAmIFNNQkZMRzJfVU5JQ09ERSkgPT0gMCkgewotCQkJCWNFUlJPUigxLCAiTlRMTVNTUCByZXF1aXJlcyBVbmljb2RlIHN1cHBvcnQiKTsKLQkJCQlyYyA9IC1FTk9TWVM7Ci0JCQkJZ290byBzc2V0dXBfZXhpdDsKLQkJCX0KLQotCQkJY0ZZSSgxLCAibnRsbXNzcCBzZXNzaW9uIHNldHVwIHBoYXNlICVkIiwgcGhhc2UpOwotCQkJcFNNQi0+cmVxLmhkci5GbGFnczIgfD0gU01CRkxHMl9FWFRfU0VDOwotCQkJY2FwYWJpbGl0aWVzIHw9IENBUF9FWFRFTkRFRF9TRUNVUklUWTsKLQkJCXBTTUItPnJlcS5DYXBhYmlsaXRpZXMgfD0gY3B1X3RvX2xlMzIoY2FwYWJpbGl0aWVzKTsKLQkJCWlmIChwaGFzZSA9PSBOdExtTmVnb3RpYXRlKSB7Ci0JCQkJc2V0dXBfbnRsbXNzcF9uZWdfcmVxKHBTTUIsIHNlcyk7Ci0JCQkJaW92WzFdLmlvdl9sZW4gPSBzaXplb2YoTkVHT1RJQVRFX01FU1NBR0UpOwotCQkJCWlvdlsxXS5pb3ZfYmFzZSA9ICZwU01CLT5yZXEuU2VjdXJpdHlCbG9iWzBdOwotCQkJfSBlbHNlIGlmIChwaGFzZSA9PSBOdExtQXV0aGVudGljYXRlKSB7Ci0JCQkJLyogNSBpcyBhbiBlbXBpcmljYWwgdmFsdWUsIGxhcmdlIGVub3VnaHQgdG8KLQkJCQkgKiBob2xkIGF1dGhlbnRpY2F0ZSBtZXNzYWdlLCBtYXggMTAgb2YKLQkJCQkgKiBhdiBwYXJpcywgZG9hbWluLHVzZXIsd29ya3N0YXRpb24gbWFtZXMsCi0JCQkJICogZmxhZ3MgZXRjLi4KLQkJCQkgKi8KLQkJCQludGxtc3NwYmxvYiA9IGttYWxsb2MoCi0JCQkJCTUqc2l6ZW9mKHN0cnVjdCBfQVVUSEVOVElDQVRFX01FU1NBR0UpLAotCQkJCQlHRlBfS0VSTkVMKTsKLQkJCQlpZiAoIW50bG1zc3BibG9iKSB7Ci0JCQkJCWNFUlJPUigxLCAiQ2FuJ3QgYWxsb2NhdGUgTlRMTVNTUCIpOwotCQkJCQlyYyA9IC1FTk9NRU07Ci0JCQkJCWdvdG8gc3NldHVwX2V4aXQ7Ci0JCQkJfQotCi0JCQkJcmMgPSBidWlsZF9udGxtc3NwX2F1dGhfYmxvYihudGxtc3NwYmxvYiwKLQkJCQkJCQkmYmxvYl9sZW4sIHNlcywgbmxzX2NwKTsKLQkJCQlpZiAocmMpCi0JCQkJCWdvdG8gc3NldHVwX2V4aXQ7Ci0JCQkJaW92WzFdLmlvdl9sZW4gPSBibG9iX2xlbjsKLQkJCQlpb3ZbMV0uaW92X2Jhc2UgPSBudGxtc3NwYmxvYjsKLQkJCQlwU01CLT5yZXEuU2VjdXJpdHlCbG9iTGVuZ3RoID0KLQkJCQkJY3B1X3RvX2xlMTYoYmxvYl9sZW4pOwotCQkJCS8qIE1ha2Ugc3VyZSB0aGF0IHdlIHRlbGwgdGhlIHNlcnZlciB0aGF0IHdlCi0JCQkJICAgYXJlIHVzaW5nIHRoZSB1aWQgdGhhdCBpdCBqdXN0IGdhdmUgdXMgYmFjawotCQkJCSAgIG9uIHRoZSByZXNwb25zZSAoY2hhbGxlbmdlKSAqLwotCQkJCXNtYl9idWYtPlVpZCA9IHNlcy0+U3VpZDsKLQkJCX0gZWxzZSB7Ci0JCQkJY0VSUk9SKDEsICJpbnZhbGlkIHBoYXNlICVkIiwgcGhhc2UpOwotCQkJCXJjID0gLUVOT1NZUzsKLQkJCQlnb3RvIHNzZXR1cF9leGl0OwotCQkJfQotCQkJLyogdW5pY29kZSBzdHJpbmdzIG11c3QgYmUgd29yZCBhbGlnbmVkICovCi0JCQlpZiAoKGlvdlswXS5pb3ZfbGVuICsgaW92WzFdLmlvdl9sZW4pICUgMikgewotCQkJCSpiY2NfcHRyID0gMDsKLQkJCQliY2NfcHRyKys7Ci0JCQl9Ci0JCQl1bmljb2RlX29zbG1fc3RyaW5ncygmYmNjX3B0ciwgbmxzX2NwKTsKLQkJfSBlbHNlIHsKLQkJCWNFUlJPUigxLCAic2VjVHlwZSAlZCBub3Qgc3VwcG9ydGVkISIsIHR5cGUpOworCX0gZWxzZSBpZiAodHlwZSA9PSBSYXdOVExNU1NQKSB7CisJCWlmICgocFNNQi0+cmVxLmhkci5GbGFnczIgJiBTTUJGTEcyX1VOSUNPREUpID09IDApIHsKKwkJCWNFUlJPUigxLCAiTlRMTVNTUCByZXF1aXJlcyBVbmljb2RlIHN1cHBvcnQiKTsKIAkJCXJjID0gLUVOT1NZUzsKIAkJCWdvdG8gc3NldHVwX2V4aXQ7CiAJCX0KLSNlbHNlCisKKwkJY0ZZSSgxLCAibnRsbXNzcCBzZXNzaW9uIHNldHVwIHBoYXNlICVkIiwgcGhhc2UpOworCQlwU01CLT5yZXEuaGRyLkZsYWdzMiB8PSBTTUJGTEcyX0VYVF9TRUM7CisJCWNhcGFiaWxpdGllcyB8PSBDQVBfRVhURU5ERURfU0VDVVJJVFk7CisJCXBTTUItPnJlcS5DYXBhYmlsaXRpZXMgfD0gY3B1X3RvX2xlMzIoY2FwYWJpbGl0aWVzKTsKKwkJc3dpdGNoKHBoYXNlKSB7CisJCWNhc2UgTnRMbU5lZ290aWF0ZToKKwkJCWJ1aWxkX250bG1zc3BfbmVnb3RpYXRlX2Jsb2IoCisJCQkJcFNNQi0+cmVxLlNlY3VyaXR5QmxvYiwgc2VzKTsKKwkJCWlvdlsxXS5pb3ZfbGVuID0gc2l6ZW9mKE5FR09USUFURV9NRVNTQUdFKTsKKwkJCWlvdlsxXS5pb3ZfYmFzZSA9IHBTTUItPnJlcS5TZWN1cml0eUJsb2I7CisJCQlwU01CLT5yZXEuU2VjdXJpdHlCbG9iTGVuZ3RoID0KKwkJCQljcHVfdG9fbGUxNihzaXplb2YoTkVHT1RJQVRFX01FU1NBR0UpKTsKKwkJCWJyZWFrOworCQljYXNlIE50TG1BdXRoZW50aWNhdGU6CisJCQkvKgorCQkJICogNSBpcyBhbiBlbXBpcmljYWwgdmFsdWUsIGxhcmdlIGVub3VnaCB0byBob2xkCisJCQkgKiBhdXRoZW50aWNhdGUgbWVzc2FnZSBwbHVzIG1heCAxMCBvZiBhdiBwYXJpcywKKwkJCSAqIGRvbWFpbiwgdXNlciwgd29ya3N0YXRpb24gbmFtZXMsIGZsYWdzLCBldGMuCisJCQkgKi8KKwkJCW50bG1zc3BibG9iID0ga3phbGxvYygKKwkJCQk1KnNpemVvZihzdHJ1Y3QgX0FVVEhFTlRJQ0FURV9NRVNTQUdFKSwKKwkJCQlHRlBfS0VSTkVMKTsKKwkJCWlmICghbnRsbXNzcGJsb2IpIHsKKwkJCQljRVJST1IoMSwgIkNhbid0IGFsbG9jYXRlIE5UTE1TU1AgYmxvYiIpOworCQkJCXJjID0gLUVOT01FTTsKKwkJCQlnb3RvIHNzZXR1cF9leGl0OworCQkJfQorCisJCQlyYyA9IGJ1aWxkX250bG1zc3BfYXV0aF9ibG9iKG50bG1zc3BibG9iLAorCQkJCQkJJmJsb2JfbGVuLCBzZXMsIG5sc19jcCk7CisJCQlpZiAocmMpCisJCQkJZ290byBzc2V0dXBfZXhpdDsKKwkJCWlvdlsxXS5pb3ZfbGVuID0gYmxvYl9sZW47CisJCQlpb3ZbMV0uaW92X2Jhc2UgPSBudGxtc3NwYmxvYjsKKwkJCXBTTUItPnJlcS5TZWN1cml0eUJsb2JMZW5ndGggPSBjcHVfdG9fbGUxNihibG9iX2xlbik7CisJCQkvKgorCQkJICogTWFrZSBzdXJlIHRoYXQgd2UgdGVsbCB0aGUgc2VydmVyIHRoYXQgd2UgYXJlIHVzaW5nCisJCQkgKiB0aGUgdWlkIHRoYXQgaXQganVzdCBnYXZlIHVzIGJhY2sgb24gdGhlIHJlc3BvbnNlCisJCQkgKiAoY2hhbGxlbmdlKQorCQkJICovCisJCQlzbWJfYnVmLT5VaWQgPSBzZXMtPlN1aWQ7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWNFUlJPUigxLCAiaW52YWxpZCBwaGFzZSAlZCIsIHBoYXNlKTsKKwkJCXJjID0gLUVOT1NZUzsKKwkJCWdvdG8gc3NldHVwX2V4aXQ7CisJCX0KKwkJLyogdW5pY29kZSBzdHJpbmdzIG11c3QgYmUgd29yZCBhbGlnbmVkICovCisJCWlmICgoaW92WzBdLmlvdl9sZW4gKyBpb3ZbMV0uaW92X2xlbikgJSAyKSB7CisJCQkqYmNjX3B0ciA9IDA7CisJCQliY2NfcHRyKys7CisJCX0KKwkJdW5pY29kZV9vc2xtX3N0cmluZ3MoJmJjY19wdHIsIG5sc19jcCk7CisJfSBlbHNlIHsKIAkJY0VSUk9SKDEsICJzZWNUeXBlICVkIG5vdCBzdXBwb3J0ZWQhIiwgdHlwZSk7CiAJCXJjID0gLUVOT1NZUzsKIAkJZ290byBzc2V0dXBfZXhpdDsKLSNlbmRpZgogCX0KIAogCWlvdlsyXS5pb3ZfYmFzZSA9IHN0cl9hcmVhOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy90cmFuc3BvcnQuYyBiL2ZzL2NpZnMvdHJhbnNwb3J0LmMKaW5kZXggZTA1ODhjZC4uNTljYTgxYiAxMDA2NDQKLS0tIGEvZnMvY2lmcy90cmFuc3BvcnQuYworKysgYi9mcy9jaWZzL3RyYW5zcG9ydC5jCkBAIC0xMTksNyArMTE5LDcgQEAKIAlpZiAoc3NvY2tldCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT1RTT0NLOyAvKiBCQiBldmVudHVhbGx5IGFkZCByZWNvbm5lY3QgY29kZSBoZXJlICovCiAKLQlzbWJfbXNnLm1zZ19uYW1lID0gKHN0cnVjdCBzb2NrYWRkciAqKSAmc2VydmVyLT5hZGRyLnNvY2tBZGRyOworCXNtYl9tc2cubXNnX25hbWUgPSAoc3RydWN0IHNvY2thZGRyICopICZzZXJ2ZXItPmRzdGFkZHI7CiAJc21iX21zZy5tc2dfbmFtZWxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpOwogCXNtYl9tc2cubXNnX2NvbnRyb2wgPSBOVUxMOwogCXNtYl9tc2cubXNnX2NvbnRyb2xsZW4gPSAwOwpkaWZmIC0tZ2l0IGEvZnMvY29kYS9jYWNoZS5jIGIvZnMvY29kYS9jYWNoZS5jCmluZGV4IDkwNjBmMDguLjU1MjVlMWMgMTAwNjQ0Ci0tLSBhL2ZzL2NvZGEvY2FjaGUuYworKysgYi9mcy9jb2RhL2NhY2hlLmMKQEAgLTkzLDcgKzkzLDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkICpjaGlsZDsKIAlzdHJ1Y3QgZGVudHJ5ICpkZTsKIAotCXNwaW5fbG9jaygmZGNhY2hlX2xvY2spOworCXNwaW5fbG9jaygmcGFyZW50LT5kX2xvY2spOwogCWxpc3RfZm9yX2VhY2goY2hpbGQsICZwYXJlbnQtPmRfc3ViZGlycykKIAl7CiAJCWRlID0gbGlzdF9lbnRyeShjaGlsZCwgc3RydWN0IGRlbnRyeSwgZF91LmRfY2hpbGQpOwpAQCAtMTAyLDcgKzEwMiw3IEBACiAJCQljb250aW51ZTsKIAkJY29kYV9mbGFnX2lub2RlKGRlLT5kX2lub2RlLCBmbGFnKTsKIAl9Ci0Jc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKKwlzcGluX3VubG9jaygmcGFyZW50LT5kX2xvY2spOwogCXJldHVybjsgCiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2NvZGEvZGlyLmMgYi9mcy9jb2RhL2Rpci5jCmluZGV4IDVkOGIzNTUuLjI5YmFkZDkgMTAwNjQ0Ci0tLSBhL2ZzL2NvZGEvZGlyLmMKKysrIGIvZnMvY29kYS9kaXIuYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIApAQCAtNDcsNyArNDgsNyBAQAogCiAvKiBkZW50cnkgb3BzICovCiBzdGF0aWMgaW50IGNvZGFfZGVudHJ5X3JldmFsaWRhdGUoc3RydWN0IGRlbnRyeSAqZGUsIHN0cnVjdCBuYW1laWRhdGEgKm5kKTsKLXN0YXRpYyBpbnQgY29kYV9kZW50cnlfZGVsZXRlKHN0cnVjdCBkZW50cnkgKik7CitzdGF0aWMgaW50IGNvZGFfZGVudHJ5X2RlbGV0ZShjb25zdCBzdHJ1Y3QgZGVudHJ5ICopOwogCiAvKiBzdXBwb3J0IHJvdXRpbmVzICovCiBzdGF0aWMgaW50IGNvZGFfdmVudXNfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqY29kYV9maWxlLCB2b2lkICpidWYsCkBAIC0xMjUsNyArMTI2LDcgQEAKIAkJcmV0dXJuIEVSUl9QVFIoZXJyb3IpOwogCiBleGl0OgotCWVudHJ5LT5kX29wID0gJmNvZGFfZGVudHJ5X29wZXJhdGlvbnM7CisJZF9zZXRfZF9vcChlbnRyeSwgJmNvZGFfZGVudHJ5X29wZXJhdGlvbnMpOwogCiAJaWYgKGlub2RlICYmICh0eXBlICYgQ09EQV9OT0NBQ0hFKSkKIAkJY29kYV9mbGFnX2lub2RlKGlub2RlLCBDX1ZBVFRSIHwgQ19QVVJHRSk7CkBAIC0xMzQsMTAgKzEzNSwxMyBAQAogfQogCiAKLWludCBjb2RhX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spCitpbnQgY29kYV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CiAJaW50IGVycm9yOwogCisJaWYgKGZsYWdzICYgSVBFUk1fRkxBR19SQ1UpCisJCXJldHVybiAtRUNISUxEOworCiAJbWFzayAmPSBNQVlfUkVBRCB8IE1BWV9XUklURSB8IE1BWV9FWEVDOwogIAogCWlmICghbWFzaykKQEAgLTU0MSw5ICs1NDUsMTMgQEAKIC8qIGNhbGxlZCB3aGVuIGEgY2FjaGUgbG9va3VwIHN1Y2NlZWRzICovCiBzdGF0aWMgaW50IGNvZGFfZGVudHJ5X3JldmFsaWRhdGUoc3RydWN0IGRlbnRyeSAqZGUsIHN0cnVjdCBuYW1laWRhdGEgKm5kKQogewotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOwogCXN0cnVjdCBjb2RhX2lub2RlX2luZm8gKmNpaTsKIAorCWlmIChuZC0+ZmxhZ3MgJiBMT09LVVBfUkNVKQorCQlyZXR1cm4gLUVDSElMRDsKKworCWlub2RlID0gZGUtPmRfaW5vZGU7CiAJaWYgKCFpbm9kZSB8fCBjb2RhX2lzcm9vdChpbm9kZSkpCiAJCWdvdG8gb3V0OwogCWlmIChpc19iYWRfaW5vZGUoaW5vZGUpKQpAQCAtNTU5LDcgKzU2Nyw3IEBACiAJaWYgKGNpaS0+Y19mbGFncyAmIENfRkxVU0gpIAogCQljb2RhX2ZsYWdfaW5vZGVfY2hpbGRyZW4oaW5vZGUsIENfRkxVU0gpOwogCi0JaWYgKGF0b21pY19yZWFkKCZkZS0+ZF9jb3VudCkgPiAxKQorCWlmIChkZS0+ZF9jb3VudCA+IDEpCiAJCS8qIHByZXRlbmQgaXQncyB2YWxpZCwgYnV0IGRvbid0IGNoYW5nZSB0aGUgZmxhZ3MgKi8KIAkJZ290byBvdXQ7CiAKQEAgLTU3Nyw3ICs1ODUsNyBAQAogICogVGhpcyBpcyB0aGUgY2FsbGJhY2sgZnJvbSBkcHV0KCkgd2hlbiBkX2NvdW50IGlzIGdvaW5nIHRvIDAuCiAgKiBXZSB1c2UgdGhpcyB0byB1bmhhc2ggZGVudHJpZXMgd2l0aCBiYWQgaW5vZGVzLgogICovCi1zdGF0aWMgaW50IGNvZGFfZGVudHJ5X2RlbGV0ZShzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5KQorc3RhdGljIGludCBjb2RhX2RlbnRyeV9kZWxldGUoY29uc3Qgc3RydWN0IGRlbnRyeSAqIGRlbnRyeSkKIHsKIAlpbnQgZmxhZ3M7CiAKZGlmZiAtLWdpdCBhL2ZzL2NvZGEvaW5vZGUuYyBiL2ZzL2NvZGEvaW5vZGUuYwppbmRleCA1ZWE1N2M4Li41MGRjN2QxIDEwMDY0NAotLS0gYS9mcy9jb2RhL2lub2RlLmMKKysrIGIvZnMvY29kYS9pbm9kZS5jCkBAIC01Niw5ICs1NiwxNiBAQAogCXJldHVybiAmZWktPnZmc19pbm9kZTsKIH0KIAorc3RhdGljIHZvaWQgY29kYV9pX2NhbGxiYWNrKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBpbm9kZSwgaV9yY3UpOworCUlOSVRfTElTVF9IRUFEKCZpbm9kZS0+aV9kZW50cnkpOworCWttZW1fY2FjaGVfZnJlZShjb2RhX2lub2RlX2NhY2hlcCwgSVRPQyhpbm9kZSkpOworfQorCiBzdGF0aWMgdm9pZCBjb2RhX2Rlc3Ryb3lfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIHsKLQlrbWVtX2NhY2hlX2ZyZWUoY29kYV9pbm9kZV9jYWNoZXAsIElUT0MoaW5vZGUpKTsKKwljYWxsX3JjdSgmaW5vZGUtPmlfcmN1LCBjb2RhX2lfY2FsbGJhY2spOwogfQogCiBzdGF0aWMgdm9pZCBpbml0X29uY2Uodm9pZCAqZm9vKQpkaWZmIC0tZ2l0IGEvZnMvY29kYS9waW9jdGwuYyBiL2ZzL2NvZGEvcGlvY3RsLmMKaW5kZXggMmZkODliNS4uNzQxZjBiZCAxMDA2NDQKLS0tIGEvZnMvY29kYS9waW9jdGwuYworKysgYi9mcy9jb2RhL3Bpb2N0bC5jCkBAIC0yNCw3ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvY29kYV9wc2Rldi5oPgogCiAvKiBwaW9jdGwgb3BzICovCi1zdGF0aWMgaW50IGNvZGFfaW9jdGxfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzayk7CitzdGF0aWMgaW50IGNvZGFfaW9jdGxfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaywgdW5zaWduZWQgaW50IGZsYWdzKTsKIHN0YXRpYyBsb25nIGNvZGFfcGlvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLAogCQkJdW5zaWduZWQgbG9uZyB1c2VyX2RhdGEpOwogCkBAIC00MSw4ICs0MSwxMCBAQAogfTsKIAogLyogdGhlIGNvZGEgcGlvY3RsIGlub2RlIG9wcyAqLwotc3RhdGljIGludCBjb2RhX2lvY3RsX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spCitzdGF0aWMgaW50IGNvZGFfaW9jdGxfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaywgdW5zaWduZWQgaW50IGZsYWdzKQogeworCWlmIChmbGFncyAmIElQRVJNX0ZMQUdfUkNVKQorCQlyZXR1cm4gLUVDSElMRDsKIAlyZXR1cm4gKG1hc2sgJiBNQVlfRVhFQykgPyAtRUFDQ0VTIDogMDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvY29tcGF0X2lvY3RsLmMgYi9mcy9jb21wYXRfaW9jdGwuYwppbmRleCBhNjA1NzliLi42MWFiYjYzIDEwMDY0NAotLS0gYS9mcy9jb21wYXRfaW9jdGwuYworKysgYi9mcy9jb21wYXRfaW9jdGwuYwpAQCAtNDIsNyArNDIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3Z0X2tlcm4uaD4KICNpbmNsdWRlIDxsaW51eC9mYi5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcmF3Lmg+CiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CkBAIC04MzYsNiArODM2LDcgQEAKIENPTVBBVElCTEVfSU9DVEwoVENTRVRTRikKIENPTVBBVElCTEVfSU9DVEwoVElPQ0xJTlVYKQogQ09NUEFUSUJMRV9JT0NUTChUSU9DU0JSSykKK0NPTVBBVElCTEVfSU9DVEwoVElPQ0dERVYpCiBDT01QQVRJQkxFX0lPQ1RMKFRJT0NDQlJLKQogQ09NUEFUSUJMRV9JT0NUTChUSU9DR1NJRCkKIENPTVBBVElCTEVfSU9DVEwoVElPQ0dJQ09VTlQpCmRpZmYgLS1naXQgYS9mcy9jb25maWdmcy9jb25maWdmc19pbnRlcm5hbC5oIGIvZnMvY29uZmlnZnMvY29uZmlnZnNfaW50ZXJuYWwuaAppbmRleCBkYTYwNjFhLi4wMjZjZjY4IDEwMDY0NAotLS0gYS9mcy9jb25maWdmcy9jb25maWdmc19pbnRlcm5hbC5oCisrKyBiL2ZzL2NvbmZpZ2ZzL2NvbmZpZ2ZzX2ludGVybmFsLmgKQEAgLTEyMCw3ICsxMjAsNyBAQAogewogCXN0cnVjdCBjb25maWdfaXRlbSAqIGl0ZW0gPSBOVUxMOwogCi0Jc3Bpbl9sb2NrKCZkY2FjaGVfbG9jayk7CisJc3Bpbl9sb2NrKCZkZW50cnktPmRfbG9jayk7CiAJaWYgKCFkX3VuaGFzaGVkKGRlbnRyeSkpIHsKIAkJc3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqIHNkID0gZGVudHJ5LT5kX2ZzZGF0YTsKIAkJaWYgKHNkLT5zX3R5cGUgJiBDT05GSUdGU19JVEVNX0xJTkspIHsKQEAgLTEyOSw3ICsxMjksNyBAQAogCQl9IGVsc2UKIAkJCWl0ZW0gPSBjb25maWdfaXRlbV9nZXQoc2QtPnNfZWxlbWVudCk7CiAJfQotCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7CisJc3Bpbl91bmxvY2soJmRlbnRyeS0+ZF9sb2NrKTsKIAogCXJldHVybiBpdGVtOwogfQpkaWZmIC0tZ2l0IGEvZnMvY29uZmlnZnMvZGlyLmMgYi9mcy9jb25maWdmcy9kaXIuYwppbmRleCAwYjUwMmY4Li4zNjYzN2E4IDEwMDY0NAotLS0gYS9mcy9jb25maWdmcy9kaXIuYworKysgYi9mcy9jb25maWdmcy9kaXIuYwpAQCAtNjcsNyArNjcsNyBAQAogICogV2UgX211c3RfIGRlbGV0ZSBvdXIgZGVudHJpZXMgb24gbGFzdCBkcHV0LCBhcyB0aGUgY2hhaW4tdG8tcGFyZW50CiAgKiBiZWhhdmlvciBpcyByZXF1aXJlZCB0byBjbGVhciB0aGUgcGFyZW50cyBvZiBkZWZhdWx0X2dyb3Vwcy4KICAqLwotc3RhdGljIGludCBjb25maWdmc19kX2RlbGV0ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCitzdGF0aWMgaW50IGNvbmZpZ2ZzX2RfZGVsZXRlKGNvbnN0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIHsKIAlyZXR1cm4gMTsKIH0KQEAgLTIzMiwxMCArMjMyLDggQEAKIAogCXNkLT5zX21vZGUgPSBtb2RlOwogCXNkLT5zX2RlbnRyeSA9IGRlbnRyeTsKLQlpZiAoZGVudHJ5KSB7CisJaWYgKGRlbnRyeSkKIAkJZGVudHJ5LT5kX2ZzZGF0YSA9IGNvbmZpZ2ZzX2dldChzZCk7Ci0JCWRlbnRyeS0+ZF9vcCA9ICZjb25maWdmc19kZW50cnlfb3BzOwotCX0KIAogCXJldHVybiAwOwogfQpAQCAtMjc4LDcgKzI3Niw2IEBACiAJCWVycm9yID0gY29uZmlnZnNfY3JlYXRlKGQsIG1vZGUsIGluaXRfZGlyKTsKIAkJaWYgKCFlcnJvcikgewogCQkJaW5jX25saW5rKHAtPmRfaW5vZGUpOwotCQkJKGQpLT5kX29wID0gJmNvbmZpZ2ZzX2RlbnRyeV9vcHM7CiAJCX0gZWxzZSB7CiAJCQlzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICpzZCA9IGQtPmRfZnNkYXRhOwogCQkJaWYgKHNkKSB7CkBAIC0zNzEsOSArMzY4LDcgQEAKIAkJCQkgICBDT05GSUdGU19JVEVNX0xJTkspOwogCWlmICghZXJyKSB7CiAJCWVyciA9IGNvbmZpZ2ZzX2NyZWF0ZShkZW50cnksIG1vZGUsIGluaXRfc3ltbGluayk7Ci0JCWlmICghZXJyKQotCQkJZGVudHJ5LT5kX29wID0gJmNvbmZpZ2ZzX2RlbnRyeV9vcHM7Ci0JCWVsc2UgeworCQlpZiAoZXJyKSB7CiAJCQlzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICpzZCA9IGRlbnRyeS0+ZF9mc2RhdGE7CiAJCQlpZiAoc2QpIHsKIAkJCQlzcGluX2xvY2soJmNvbmZpZ2ZzX2RpcmVudF9sb2NrKTsKQEAgLTM5OSw4ICszOTQsNyBAQAogCWlmIChkLT5kX2lub2RlKQogCQlzaW1wbGVfcm1kaXIocGFyZW50LT5kX2lub2RlLGQpOwogCi0JcHJfZGVidWcoIiBvICVzIHJlbW92aW5nIGRvbmUgKCVkKVxuIixkLT5kX25hbWUubmFtZSwKLQkJIGF0b21pY19yZWFkKCZkLT5kX2NvdW50KSk7CisJcHJfZGVidWcoIiBvICVzIHJlbW92aW5nIGRvbmUgKCVkKVxuIixkLT5kX25hbWUubmFtZSwgZC0+ZF9jb3VudCk7CiAKIAlkcHV0KHBhcmVudCk7CiB9CkBAIC00NDgsNyArNDQyLDcgQEAKIAkJcmV0dXJuIGVycm9yOwogCX0KIAotCWRlbnRyeS0+ZF9vcCA9ICZjb25maWdmc19kZW50cnlfb3BzOworCWRfc2V0X2Rfb3AoZGVudHJ5LCAmY29uZmlnZnNfZGVudHJ5X29wcyk7CiAJZF9yZWhhc2goZGVudHJ5KTsKIAogCXJldHVybiAwOwpAQCAtNDkzLDcgKzQ4NywxMSBAQAogCQkgKiBJZiBpdCBkb2Vzbid0IGV4aXN0IGFuZCBpdCBpc24ndCBhIE5PVF9QSU5ORUQgaXRlbSwKIAkJICogaXQgbXVzdCBiZSBuZWdhdGl2ZS4KIAkJICovCi0JCXJldHVybiBzaW1wbGVfbG9va3VwKGRpciwgZGVudHJ5LCBuZCk7CisJCWlmIChkZW50cnktPmRfbmFtZS5sZW4gPiBOQU1FX01BWCkKKwkJCXJldHVybiBFUlJfUFRSKC1FTkFNRVRPT0xPTkcpOworCQlkX3NldF9kX29wKGRlbnRyeSwgJmNvbmZpZ2ZzX2RlbnRyeV9vcHMpOworCQlkX2FkZChkZW50cnksIE5VTEwpOworCQlyZXR1cm4gTlVMTDsKIAl9CiAKIG91dDoKQEAgLTY4NSw2ICs2ODMsNyBAQAogCXJldCA9IC1FTk9NRU07CiAJY2hpbGQgPSBkX2FsbG9jKHBhcmVudCwgJm5hbWUpOwogCWlmIChjaGlsZCkgeworCQlkX3NldF9kX29wKGNoaWxkLCAmY29uZmlnZnNfZGVudHJ5X29wcyk7CiAJCWRfYWRkKGNoaWxkLCBOVUxMKTsKIAogCQlyZXQgPSBjb25maWdmc19hdHRhY2hfZ3JvdXAoJnBhcmVudF9ncm91cC0+Y2dfaXRlbSwKQEAgLTE2ODIsNiArMTY4MSw3IEBACiAJZXJyID0gLUVOT01FTTsKIAlkZW50cnkgPSBkX2FsbG9jKGNvbmZpZ2ZzX3NiLT5zX3Jvb3QsICZuYW1lKTsKIAlpZiAoZGVudHJ5KSB7CisJCWRfc2V0X2Rfb3AoZGVudHJ5LCAmY29uZmlnZnNfZGVudHJ5X29wcyk7CiAJCWRfYWRkKGRlbnRyeSwgTlVMTCk7CiAKIAkJZXJyID0gY29uZmlnZnNfYXR0YWNoX2dyb3VwKHNkLT5zX2VsZW1lbnQsICZncm91cC0+Y2dfaXRlbSwKZGlmZiAtLWdpdCBhL2ZzL2NvbmZpZ2ZzL2lub2RlLmMgYi9mcy9jb25maWdmcy9pbm9kZS5jCmluZGV4IDI1MzQ3NmQuLmM4M2Y0NzYgMTAwNjQ0Ci0tLSBhL2ZzL2NvbmZpZ2ZzL2lub2RlLmMKKysrIGIvZnMvY29uZmlnZnMvaW5vZGUuYwpAQCAtMjUwLDE4ICsyNTAsMTQgQEAKIAlzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5ID0gc2QtPnNfZGVudHJ5OwogCiAJaWYgKGRlbnRyeSkgewotCQlzcGluX2xvY2soJmRjYWNoZV9sb2NrKTsKIAkJc3Bpbl9sb2NrKCZkZW50cnktPmRfbG9jayk7CiAJCWlmICghKGRfdW5oYXNoZWQoZGVudHJ5KSAmJiBkZW50cnktPmRfaW5vZGUpKSB7Ci0JCQlkZ2V0X2xvY2tlZChkZW50cnkpOworCQkJZGdldF9kbG9jayhkZW50cnkpOwogCQkJX19kX2Ryb3AoZGVudHJ5KTsKIAkJCXNwaW5fdW5sb2NrKCZkZW50cnktPmRfbG9jayk7Ci0JCQlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOwogCQkJc2ltcGxlX3VubGluayhwYXJlbnQtPmRfaW5vZGUsIGRlbnRyeSk7Ci0JCX0gZWxzZSB7CisJCX0gZWxzZQogCQkJc3Bpbl91bmxvY2soJmRlbnRyeS0+ZF9sb2NrKTsKLQkJCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7Ci0JCX0KIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2RjYWNoZS5jIGIvZnMvZGNhY2hlLmMKaW5kZXggMjM3MDJhOS4uNTY5OWQ0YyAxMDA2NDQKLS0tIGEvZnMvZGNhY2hlLmMKKysrIGIvZnMvZGNhY2hlLmMKQEAgLTMzLDIwICszMyw1OCBAQAogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KICNpbmNsdWRlIDxsaW51eC9mc19zdHJ1Y3QuaD4KICNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+CisjaW5jbHVkZSA8bGludXgvYml0X3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvcmN1bGlzdF9ibC5oPgogI2luY2x1ZGUgImludGVybmFsLmgiCiAKKy8qCisgKiBVc2FnZToKKyAqIGRjYWNoZS0+ZF9pbm9kZS0+aV9sb2NrIHByb3RlY3RzOgorICogICAtIGlfZGVudHJ5LCBkX2FsaWFzLCBkX2lub2RlIG9mIGFsaWFzZXMKKyAqIGRjYWNoZV9oYXNoX2J1Y2tldCBsb2NrIHByb3RlY3RzOgorICogICAtIHRoZSBkY2FjaGUgaGFzaCB0YWJsZQorICogc19hbm9uIGJsIGxpc3Qgc3BpbmxvY2sgcHJvdGVjdHM6CisgKiAgIC0gdGhlIHNfYW5vbiBsaXN0IChzZWUgX19kX2Ryb3ApCisgKiBkY2FjaGVfbHJ1X2xvY2sgcHJvdGVjdHM6CisgKiAgIC0gdGhlIGRjYWNoZSBscnUgbGlzdHMgYW5kIGNvdW50ZXJzCisgKiBkX2xvY2sgcHJvdGVjdHM6CisgKiAgIC0gZF9mbGFncworICogICAtIGRfbmFtZQorICogICAtIGRfbHJ1CisgKiAgIC0gZF9jb3VudAorICogICAtIGRfdW5oYXNoZWQoKQorICogICAtIGRfcGFyZW50IGFuZCBkX3N1YmRpcnMKKyAqICAgLSBjaGlsZHJlbnMnIGRfY2hpbGQgYW5kIGRfcGFyZW50CisgKiAgIC0gZF9hbGlhcywgZF9pbm9kZQorICoKKyAqIE9yZGVyaW5nOgorICogZGVudHJ5LT5kX2lub2RlLT5pX2xvY2sKKyAqICAgZGVudHJ5LT5kX2xvY2sKKyAqICAgICBkY2FjaGVfbHJ1X2xvY2sKKyAqICAgICBkY2FjaGVfaGFzaF9idWNrZXQgbG9jaworICogICAgIHNfYW5vbiBsb2NrCisgKgorICogSWYgdGhlcmUgaXMgYW4gYW5jZXN0b3IgcmVsYXRpb25zaGlwOgorICogZGVudHJ5LT5kX3BhcmVudC0+Li4uLT5kX3BhcmVudC0+ZF9sb2NrCisgKiAgIC4uLgorICogICAgIGRlbnRyeS0+ZF9wYXJlbnQtPmRfbG9jaworICogICAgICAgZGVudHJ5LT5kX2xvY2sKKyAqCisgKiBJZiBubyBhbmNlc3RvciByZWxhdGlvbnNoaXA6CisgKiBpZiAoZGVudHJ5MSA8IGRlbnRyeTIpCisgKiAgIGRlbnRyeTEtPmRfbG9jaworICogICAgIGRlbnRyeTItPmRfbG9jaworICovCiBpbnQgc3lzY3RsX3Zmc19jYWNoZV9wcmVzc3VyZSBfX3JlYWRfbW9zdGx5ID0gMTAwOwogRVhQT1JUX1NZTUJPTF9HUEwoc3lzY3RsX3Zmc19jYWNoZV9wcmVzc3VyZSk7CiAKLSBfX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcCBERUZJTkVfU1BJTkxPQ0soZGNhY2hlX2xvY2spOworc3RhdGljIF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wIERFRklORV9TUElOTE9DSyhkY2FjaGVfbHJ1X2xvY2spOwogX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXAgREVGSU5FX1NFUUxPQ0socmVuYW1lX2xvY2spOwogCi1FWFBPUlRfU1lNQk9MKGRjYWNoZV9sb2NrKTsKK0VYUE9SVF9TWU1CT0wocmVuYW1lX2xvY2spOwogCiBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmRlbnRyeV9jYWNoZSBfX3JlYWRfbW9zdGx5OwogCi0jZGVmaW5lIEROQU1FX0lOTElORV9MRU4gKHNpemVvZihzdHJ1Y3QgZGVudHJ5KS1vZmZzZXRvZihzdHJ1Y3QgZGVudHJ5LGRfaW5hbWUpKQotCiAvKgogICogVGhpcyBpcyB0aGUgc2luZ2xlIG1vc3QgY3JpdGljYWwgZGF0YSBzdHJ1Y3R1cmUgd2hlbiBpdCBjb21lcwogICogdG8gdGhlIGRjYWNoZTogdGhlIGhhc2h0YWJsZSBmb3IgbG9va3Vwcy4gU29tZWJvZHkgc2hvdWxkIHRyeQpAQCAtNjAsMjIgKzk4LDUxIEBACiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZF9oYXNoX21hc2sgX19yZWFkX21vc3RseTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZF9oYXNoX3NoaWZ0IF9fcmVhZF9tb3N0bHk7Ci1zdGF0aWMgc3RydWN0IGhsaXN0X2hlYWQgKmRlbnRyeV9oYXNodGFibGUgX19yZWFkX21vc3RseTsKKworc3RydWN0IGRjYWNoZV9oYXNoX2J1Y2tldCB7CisJc3RydWN0IGhsaXN0X2JsX2hlYWQgaGVhZDsKK307CitzdGF0aWMgc3RydWN0IGRjYWNoZV9oYXNoX2J1Y2tldCAqZGVudHJ5X2hhc2h0YWJsZSBfX3JlYWRfbW9zdGx5OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkY2FjaGVfaGFzaF9idWNrZXQgKmRfaGFzaChzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsCisJCQkJCXVuc2lnbmVkIGxvbmcgaGFzaCkKK3sKKwloYXNoICs9ICgodW5zaWduZWQgbG9uZykgcGFyZW50IF4gR09MREVOX1JBVElPX1BSSU1FKSAvIEwxX0NBQ0hFX0JZVEVTOworCWhhc2ggPSBoYXNoIF4gKChoYXNoIF4gR09MREVOX1JBVElPX1BSSU1FKSA+PiBEX0hBU0hCSVRTKTsKKwlyZXR1cm4gZGVudHJ5X2hhc2h0YWJsZSArIChoYXNoICYgRF9IQVNITUFTSyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzcGluX2xvY2tfYnVja2V0KHN0cnVjdCBkY2FjaGVfaGFzaF9idWNrZXQgKmIpCit7CisJYml0X3NwaW5fbG9jaygwLCAodW5zaWduZWQgbG9uZyAqKSZiLT5oZWFkLmZpcnN0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNwaW5fdW5sb2NrX2J1Y2tldChzdHJ1Y3QgZGNhY2hlX2hhc2hfYnVja2V0ICpiKQoreworCV9fYml0X3NwaW5fdW5sb2NrKDAsICh1bnNpZ25lZCBsb25nICopJmItPmhlYWQuZmlyc3QpOworfQogCiAvKiBTdGF0aXN0aWNzIGdhdGhlcmluZy4gKi8KIHN0cnVjdCBkZW50cnlfc3RhdF90IGRlbnRyeV9zdGF0ID0gewogCS5hZ2VfbGltaXQgPSA0NSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGVyY3B1X2NvdW50ZXIgbnJfZGVudHJ5IF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOwotc3RhdGljIHN0cnVjdCBwZXJjcHVfY291bnRlciBucl9kZW50cnlfdW51c2VkIF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOworc3RhdGljIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGludCwgbnJfZGVudHJ5KTsKIAogI2lmIGRlZmluZWQoQ09ORklHX1NZU0NUTCkgJiYgZGVmaW5lZChDT05GSUdfUFJPQ19GUykKK3N0YXRpYyBpbnQgZ2V0X25yX2RlbnRyeSh2b2lkKQoreworCWludCBpOworCWludCBzdW0gPSAwOworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKQorCQlzdW0gKz0gcGVyX2NwdShucl9kZW50cnksIGkpOworCXJldHVybiBzdW0gPCAwID8gMCA6IHN1bTsKK30KKwogaW50IHByb2NfbnJfZGVudHJ5KGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwgdm9pZCBfX3VzZXIgKmJ1ZmZlciwKIAkJICAgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpCiB7Ci0JZGVudHJ5X3N0YXQubnJfZGVudHJ5ID0gcGVyY3B1X2NvdW50ZXJfc3VtX3Bvc2l0aXZlKCZucl9kZW50cnkpOwotCWRlbnRyeV9zdGF0Lm5yX3VudXNlZCA9IHBlcmNwdV9jb3VudGVyX3N1bV9wb3NpdGl2ZSgmbnJfZGVudHJ5X3VudXNlZCk7CisJZGVudHJ5X3N0YXQubnJfZGVudHJ5ID0gZ2V0X25yX2RlbnRyeSgpOwogCXJldHVybiBwcm9jX2RvaW50dmVjKHRhYmxlLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zKTsKIH0KICNlbmRpZgpAQCAtOTEsMzUgKzE1OCw1MCBAQAogfQogCiAvKgotICogbm8gZGNhY2hlX2xvY2ssIHBsZWFzZS4KKyAqIG5vIGxvY2tzLCBwbGVhc2UuCiAgKi8KIHN0YXRpYyB2b2lkIGRfZnJlZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiB7Ci0JcGVyY3B1X2NvdW50ZXJfZGVjKCZucl9kZW50cnkpOworCUJVR19PTihkZW50cnktPmRfY291bnQpOworCXRoaXNfY3B1X2RlYyhucl9kZW50cnkpOwogCWlmIChkZW50cnktPmRfb3AgJiYgZGVudHJ5LT5kX29wLT5kX3JlbGVhc2UpCiAJCWRlbnRyeS0+ZF9vcC0+ZF9yZWxlYXNlKGRlbnRyeSk7CiAKIAkvKiBpZiBkZW50cnkgd2FzIG5ldmVyIGluc2VydGVkIGludG8gaGFzaCwgaW1tZWRpYXRlIGZyZWUgaXMgT0sgKi8KLQlpZiAoaGxpc3RfdW5oYXNoZWQoJmRlbnRyeS0+ZF9oYXNoKSkKKwlpZiAoaGxpc3RfYmxfdW5oYXNoZWQoJmRlbnRyeS0+ZF9oYXNoKSkKIAkJX19kX2ZyZWUoJmRlbnRyeS0+ZF91LmRfcmN1KTsKIAllbHNlCiAJCWNhbGxfcmN1KCZkZW50cnktPmRfdS5kX3JjdSwgX19kX2ZyZWUpOwogfQogCisvKioKKyAqIGRlbnRyeV9yY3V3YWxrX2JhcnJpZXIgLSBpbnZhbGlkYXRlIGluLXByb2dyZXNzIHJjdS13YWxrIGxvb2t1cHMKKyAqIEFmdGVyIHRoaXMgY2FsbCwgaW4tcHJvZ3Jlc3MgcmN1LXdhbGsgcGF0aCBsb29rdXAgd2lsbCBmYWlsLiBUaGlzCisgKiBzaG91bGQgYmUgY2FsbGVkIGFmdGVyIHVuaGFzaGluZywgYW5kIGFmdGVyIGNoYW5naW5nIGRfaW5vZGUgKGlmCisgKiB0aGUgZGVudHJ5IGhhcyBub3QgYWxyZWFkeSBiZWVuIHVuaGFzaGVkKS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGRlbnRyeV9yY3V3YWxrX2JhcnJpZXIoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoreworCWFzc2VydF9zcGluX2xvY2tlZCgmZGVudHJ5LT5kX2xvY2spOworCS8qIEdvIHRocm91Z2ggYSBiYXJyaWVyICovCisJd3JpdGVfc2VxY291bnRfYmFycmllcigmZGVudHJ5LT5kX3NlcSk7Cit9CisKIC8qCiAgKiBSZWxlYXNlIHRoZSBkZW50cnkncyBpbm9kZSwgdXNpbmcgdGhlIGZpbGVzeXN0ZW0KLSAqIGRfaXB1dCgpIG9wZXJhdGlvbiBpZiBkZWZpbmVkLgorICogZF9pcHV0KCkgb3BlcmF0aW9uIGlmIGRlZmluZWQuIERlbnRyeSBoYXMgbm8gcmVmY291bnQKKyAqIGFuZCBpcyB1bmhhc2hlZC4KICAqLwogc3RhdGljIHZvaWQgZGVudHJ5X2lwdXQoc3RydWN0IGRlbnRyeSAqIGRlbnRyeSkKIAlfX3JlbGVhc2VzKGRlbnRyeS0+ZF9sb2NrKQotCV9fcmVsZWFzZXMoZGNhY2hlX2xvY2spCisJX19yZWxlYXNlcyhkZW50cnktPmRfaW5vZGUtPmlfbG9jaykKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwogCWlmIChpbm9kZSkgewogCQlkZW50cnktPmRfaW5vZGUgPSBOVUxMOwogCQlsaXN0X2RlbF9pbml0KCZkZW50cnktPmRfYWxpYXMpOwogCQlzcGluX3VubG9jaygmZGVudHJ5LT5kX2xvY2spOwotCQlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOworCQlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7CiAJCWlmICghaW5vZGUtPmlfbmxpbmspCiAJCQlmc25vdGlmeV9pbm9kZXJlbW92ZShpbm9kZSk7CiAJCWlmIChkZW50cnktPmRfb3AgJiYgZGVudHJ5LT5kX29wLT5kX2lwdXQpCkBAIC0xMjgsNDAgKzIxMCw3MiBAQAogCQkJaXB1dChpbm9kZSk7CiAJfSBlbHNlIHsKIAkJc3Bpbl91bmxvY2soJmRlbnRyeS0+ZF9sb2NrKTsKLQkJc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKIAl9CiB9CiAKIC8qCi0gKiBkZW50cnlfbHJ1XyhhZGR8ZGVsfG1vdmVfdGFpbCkgbXVzdCBiZSBjYWxsZWQgd2l0aCBkY2FjaGVfbG9jayBoZWxkLgorICogUmVsZWFzZSB0aGUgZGVudHJ5J3MgaW5vZGUsIHVzaW5nIHRoZSBmaWxlc3lzdGVtCisgKiBkX2lwdXQoKSBvcGVyYXRpb24gaWYgZGVmaW5lZC4gZGVudHJ5IHJlbWFpbnMgaW4tdXNlLgorICovCitzdGF0aWMgdm9pZCBkZW50cnlfdW5saW5rX2lub2RlKHN0cnVjdCBkZW50cnkgKiBkZW50cnkpCisJX19yZWxlYXNlcyhkZW50cnktPmRfbG9jaykKKwlfX3JlbGVhc2VzKGRlbnRyeS0+ZF9pbm9kZS0+aV9sb2NrKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CisJZGVudHJ5LT5kX2lub2RlID0gTlVMTDsKKwlsaXN0X2RlbF9pbml0KCZkZW50cnktPmRfYWxpYXMpOworCWRlbnRyeV9yY3V3YWxrX2JhcnJpZXIoZGVudHJ5KTsKKwlzcGluX3VubG9jaygmZGVudHJ5LT5kX2xvY2spOworCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKKwlpZiAoIWlub2RlLT5pX25saW5rKQorCQlmc25vdGlmeV9pbm9kZXJlbW92ZShpbm9kZSk7CisJaWYgKGRlbnRyeS0+ZF9vcCAmJiBkZW50cnktPmRfb3AtPmRfaXB1dCkKKwkJZGVudHJ5LT5kX29wLT5kX2lwdXQoZGVudHJ5LCBpbm9kZSk7CisJZWxzZQorCQlpcHV0KGlub2RlKTsKK30KKworLyoKKyAqIGRlbnRyeV9scnVfKGFkZHxkZWx8bW92ZV90YWlsKSBtdXN0IGJlIGNhbGxlZCB3aXRoIGRfbG9jayBoZWxkLgogICovCiBzdGF0aWMgdm9pZCBkZW50cnlfbHJ1X2FkZChzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiB7CiAJaWYgKGxpc3RfZW1wdHkoJmRlbnRyeS0+ZF9scnUpKSB7CisJCXNwaW5fbG9jaygmZGNhY2hlX2xydV9sb2NrKTsKIAkJbGlzdF9hZGQoJmRlbnRyeS0+ZF9scnUsICZkZW50cnktPmRfc2ItPnNfZGVudHJ5X2xydSk7CiAJCWRlbnRyeS0+ZF9zYi0+c19ucl9kZW50cnlfdW51c2VkKys7Ci0JCXBlcmNwdV9jb3VudGVyX2luYygmbnJfZGVudHJ5X3VudXNlZCk7CisJCWRlbnRyeV9zdGF0Lm5yX3VudXNlZCsrOworCQlzcGluX3VubG9jaygmZGNhY2hlX2xydV9sb2NrKTsKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIF9fZGVudHJ5X2xydV9kZWwoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoreworCWxpc3RfZGVsX2luaXQoJmRlbnRyeS0+ZF9scnUpOworCWRlbnRyeS0+ZF9zYi0+c19ucl9kZW50cnlfdW51c2VkLS07CisJZGVudHJ5X3N0YXQubnJfdW51c2VkLS07Cit9CisKIHN0YXRpYyB2b2lkIGRlbnRyeV9scnVfZGVsKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIHsKIAlpZiAoIWxpc3RfZW1wdHkoJmRlbnRyeS0+ZF9scnUpKSB7Ci0JCWxpc3RfZGVsX2luaXQoJmRlbnRyeS0+ZF9scnUpOwotCQlkZW50cnktPmRfc2ItPnNfbnJfZGVudHJ5X3VudXNlZC0tOwotCQlwZXJjcHVfY291bnRlcl9kZWMoJm5yX2RlbnRyeV91bnVzZWQpOworCQlzcGluX2xvY2soJmRjYWNoZV9scnVfbG9jayk7CisJCV9fZGVudHJ5X2xydV9kZWwoZGVudHJ5KTsKKwkJc3Bpbl91bmxvY2soJmRjYWNoZV9scnVfbG9jayk7CiAJfQogfQogCiBzdGF0aWMgdm9pZCBkZW50cnlfbHJ1X21vdmVfdGFpbChzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiB7CisJc3Bpbl9sb2NrKCZkY2FjaGVfbHJ1X2xvY2spOwogCWlmIChsaXN0X2VtcHR5KCZkZW50cnktPmRfbHJ1KSkgewogCQlsaXN0X2FkZF90YWlsKCZkZW50cnktPmRfbHJ1LCAmZGVudHJ5LT5kX3NiLT5zX2RlbnRyeV9scnUpOwogCQlkZW50cnktPmRfc2ItPnNfbnJfZGVudHJ5X3VudXNlZCsrOwotCQlwZXJjcHVfY291bnRlcl9pbmMoJm5yX2RlbnRyeV91bnVzZWQpOworCQlkZW50cnlfc3RhdC5ucl91bnVzZWQrKzsKIAl9IGVsc2UgewogCQlsaXN0X21vdmVfdGFpbCgmZGVudHJ5LT5kX2xydSwgJmRlbnRyeS0+ZF9zYi0+c19kZW50cnlfbHJ1KTsKIAl9CisJc3Bpbl91bmxvY2soJmRjYWNoZV9scnVfbG9jayk7CiB9CiAKIC8qKgpAQCAtMTcxLDIyICsyODUsMTE1IEBACiAgKiBUaGUgZGVudHJ5IG11c3QgYWxyZWFkeSBiZSB1bmhhc2hlZCBhbmQgcmVtb3ZlZCBmcm9tIHRoZSBMUlUuCiAgKgogICogSWYgdGhpcyBpcyB0aGUgcm9vdCBvZiB0aGUgZGVudHJ5IHRyZWUsIHJldHVybiBOVUxMLgorICoKKyAqIGRlbnRyeS0+ZF9sb2NrIGFuZCBwYXJlbnQtPmRfbG9jayBtdXN0IGJlIGhlbGQgYnkgY2FsbGVyLCBhbmQgYXJlIGRyb3BwZWQgYnkKKyAqIGRfa2lsbC4KICAqLwotc3RhdGljIHN0cnVjdCBkZW50cnkgKmRfa2lsbChzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCitzdGF0aWMgc3RydWN0IGRlbnRyeSAqZF9raWxsKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGRlbnRyeSAqcGFyZW50KQogCV9fcmVsZWFzZXMoZGVudHJ5LT5kX2xvY2spCi0JX19yZWxlYXNlcyhkY2FjaGVfbG9jaykKKwlfX3JlbGVhc2VzKHBhcmVudC0+ZF9sb2NrKQorCV9fcmVsZWFzZXMoZGVudHJ5LT5kX2lub2RlLT5pX2xvY2spCiB7CisJZGVudHJ5LT5kX3BhcmVudCA9IE5VTEw7CisJbGlzdF9kZWwoJmRlbnRyeS0+ZF91LmRfY2hpbGQpOworCWlmIChwYXJlbnQpCisJCXNwaW5fdW5sb2NrKCZwYXJlbnQtPmRfbG9jayk7CisJZGVudHJ5X2lwdXQoZGVudHJ5KTsKKwkvKgorCSAqIGRlbnRyeV9pcHV0IGRyb3BzIHRoZSBsb2NrcywgYXQgd2hpY2ggcG9pbnQgbm9ib2R5IChleGNlcHQKKwkgKiB0cmFuc2llbnQgUkNVIGxvb2t1cHMpIGNhbiByZWFjaCB0aGlzIGRlbnRyeS4KKwkgKi8KKwlkX2ZyZWUoZGVudHJ5KTsKKwlyZXR1cm4gcGFyZW50OworfQorCisvKioKKyAqIGRfZHJvcCAtIGRyb3AgYSBkZW50cnkKKyAqIEBkZW50cnk6IGRlbnRyeSB0byBkcm9wCisgKgorICogZF9kcm9wKCkgdW5oYXNoZXMgdGhlIGVudHJ5IGZyb20gdGhlIHBhcmVudCBkZW50cnkgaGFzaGVzLCBzbyB0aGF0IGl0IHdvbid0CisgKiBiZSBmb3VuZCB0aHJvdWdoIGEgVkZTIGxvb2t1cCBhbnkgbW9yZS4gTm90ZSB0aGF0IHRoaXMgaXMgZGlmZmVyZW50IGZyb20KKyAqIGRlbGV0aW5nIHRoZSBkZW50cnkgLSBkX2RlbGV0ZSB3aWxsIHRyeSB0byBtYXJrIHRoZSBkZW50cnkgbmVnYXRpdmUgaWYKKyAqIHBvc3NpYmxlLCBnaXZpbmcgYSBzdWNjZXNzZnVsIF9uZWdhdGl2ZV8gbG9va3VwLCB3aGlsZSBkX2Ryb3Agd2lsbAorICoganVzdCBtYWtlIHRoZSBjYWNoZSBsb29rdXAgZmFpbC4KKyAqCisgKiBkX2Ryb3AoKSBpcyB1c2VkIG1haW5seSBmb3Igc3R1ZmYgdGhhdCB3YW50cyB0byBpbnZhbGlkYXRlIGEgZGVudHJ5IGZvciBzb21lCisgKiByZWFzb24gKE5GUyB0aW1lb3V0cyBvciBhdXRvZnMgZGVsZXRlcykuCisgKgorICogX19kX2Ryb3AgcmVxdWlyZXMgZGVudHJ5LT5kX2xvY2suCisgKi8KK3ZvaWQgX19kX2Ryb3Aoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoreworCWlmICghKGRlbnRyeS0+ZF9mbGFncyAmIERDQUNIRV9VTkhBU0hFRCkpIHsKKwkJaWYgKHVubGlrZWx5KGRlbnRyeS0+ZF9mbGFncyAmIERDQUNIRV9ESVNDT05ORUNURUQpKSB7CisJCQliaXRfc3Bpbl9sb2NrKDAsCisJCQkJKHVuc2lnbmVkIGxvbmcgKikmZGVudHJ5LT5kX3NiLT5zX2Fub24uZmlyc3QpOworCQkJZGVudHJ5LT5kX2ZsYWdzIHw9IERDQUNIRV9VTkhBU0hFRDsKKwkJCWhsaXN0X2JsX2RlbF9pbml0KCZkZW50cnktPmRfaGFzaCk7CisJCQlfX2JpdF9zcGluX3VubG9jaygwLAorCQkJCSh1bnNpZ25lZCBsb25nICopJmRlbnRyeS0+ZF9zYi0+c19hbm9uLmZpcnN0KTsKKwkJfSBlbHNlIHsKKwkJCXN0cnVjdCBkY2FjaGVfaGFzaF9idWNrZXQgKmI7CisJCQliID0gZF9oYXNoKGRlbnRyeS0+ZF9wYXJlbnQsIGRlbnRyeS0+ZF9uYW1lLmhhc2gpOworCQkJc3Bpbl9sb2NrX2J1Y2tldChiKTsKKwkJCS8qCisJCQkgKiBXZSBtYXkgbm90IGFjdHVhbGx5IG5lZWQgdG8gcHV0IERDQUNIRV9VTkhBU0hFRAorCQkJICogbWFuaXB1bGF0aW9ucyB1bmRlciB0aGUgaGFzaCBsb2NrLCBidXQgZm9sbG93CisJCQkgKiB0aGUgcHJpbmNpcGxlIG9mIGxlYXN0IHN1cnByaXNlLgorCQkJICovCisJCQlkZW50cnktPmRfZmxhZ3MgfD0gRENBQ0hFX1VOSEFTSEVEOworCQkJaGxpc3RfYmxfZGVsX3JjdSgmZGVudHJ5LT5kX2hhc2gpOworCQkJc3Bpbl91bmxvY2tfYnVja2V0KGIpOworCQkJZGVudHJ5X3JjdXdhbGtfYmFycmllcihkZW50cnkpOworCQl9CisJfQorfQorRVhQT1JUX1NZTUJPTChfX2RfZHJvcCk7CisKK3ZvaWQgZF9kcm9wKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3sKKwlzcGluX2xvY2soJmRlbnRyeS0+ZF9sb2NrKTsKKwlfX2RfZHJvcChkZW50cnkpOworCXNwaW5fdW5sb2NrKCZkZW50cnktPmRfbG9jayk7Cit9CitFWFBPUlRfU1lNQk9MKGRfZHJvcCk7CisKKy8qCisgKiBGaW5pc2ggb2ZmIGEgZGVudHJ5IHdlJ3ZlIGRlY2lkZWQgdG8ga2lsbC4KKyAqIGRlbnRyeS0+ZF9sb2NrIG11c3QgYmUgaGVsZCwgcmV0dXJucyB3aXRoIGl0IHVubG9ja2VkLgorICogSWYgcmVmIGlzIG5vbi16ZXJvLCB0aGVuIGRlY3JlbWVudCB0aGUgcmVmY291bnQgdG9vLgorICogUmV0dXJucyBkZW50cnkgcmVxdWlyaW5nIHJlZmNvdW50IGRyb3AsIG9yIE5VTEwgaWYgd2UncmUgZG9uZS4KKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgZGVudHJ5ICpkZW50cnlfa2lsbChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCByZWYpCisJX19yZWxlYXNlcyhkZW50cnktPmRfbG9jaykKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOwogCXN0cnVjdCBkZW50cnkgKnBhcmVudDsKIAotCWxpc3RfZGVsKCZkZW50cnktPmRfdS5kX2NoaWxkKTsKLQkvKmRyb3BzIHRoZSBsb2NrcywgYXQgdGhhdCBwb2ludCBub2JvZHkgY2FuIHJlYWNoIHRoaXMgZGVudHJ5ICovCi0JZGVudHJ5X2lwdXQoZGVudHJ5KTsKKwlpbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKKwlpZiAoaW5vZGUgJiYgIXNwaW5fdHJ5bG9jaygmaW5vZGUtPmlfbG9jaykpIHsKK3JlbG9jazoKKwkJc3Bpbl91bmxvY2soJmRlbnRyeS0+ZF9sb2NrKTsKKwkJY3B1X3JlbGF4KCk7CisJCXJldHVybiBkZW50cnk7IC8qIHRyeSBhZ2FpbiB3aXRoIHNhbWUgZGVudHJ5ICovCisJfQogCWlmIChJU19ST09UKGRlbnRyeSkpCiAJCXBhcmVudCA9IE5VTEw7CiAJZWxzZQogCQlwYXJlbnQgPSBkZW50cnktPmRfcGFyZW50OwotCWRfZnJlZShkZW50cnkpOwotCXJldHVybiBwYXJlbnQ7CisJaWYgKHBhcmVudCAmJiAhc3Bpbl90cnlsb2NrKCZwYXJlbnQtPmRfbG9jaykpIHsKKwkJaWYgKGlub2RlKQorCQkJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOworCQlnb3RvIHJlbG9jazsKKwl9CisKKwlpZiAocmVmKQorCQlkZW50cnktPmRfY291bnQtLTsKKwkvKiBpZiBkZW50cnkgd2FzIG9uIHRoZSBkX2xydSBsaXN0IGRlbGV0ZSBpdCBmcm9tIHRoZXJlICovCisJZGVudHJ5X2xydV9kZWwoZGVudHJ5KTsKKwkvKiBpZiBpdCB3YXMgb24gdGhlIGhhc2ggdGhlbiByZW1vdmUgaXQgKi8KKwlfX2RfZHJvcChkZW50cnkpOworCXJldHVybiBkX2tpbGwoZGVudHJ5LCBwYXJlbnQpOwogfQogCiAvKiAKQEAgLTIxNCwzNCArNDIxLDI2IEBACiAgKiBjYWxsIHRoZSBkZW50cnkgdW5saW5rIG1ldGhvZCBhcyB3ZWxsIGFzIHJlbW92aW5nIGl0IGZyb20gdGhlIHF1ZXVlcyBhbmQKICAqIHJlbGVhc2luZyBpdHMgcmVzb3VyY2VzLiBJZiB0aGUgcGFyZW50IGRlbnRyaWVzIHdlcmUgc2NoZWR1bGVkIGZvciByZWxlYXNlCiAgKiB0aGV5IHRvbyBtYXkgbm93IGdldCBkZWxldGVkLgotICoKLSAqIG5vIGRjYWNoZSBsb2NrLCBwbGVhc2UuCiAgKi8KLQogdm9pZCBkcHV0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIHsKIAlpZiAoIWRlbnRyeSkKIAkJcmV0dXJuOwogCiByZXBlYXQ6Ci0JaWYgKGF0b21pY19yZWFkKCZkZW50cnktPmRfY291bnQpID09IDEpCisJaWYgKGRlbnRyeS0+ZF9jb3VudCA9PSAxKQogCQltaWdodF9zbGVlcCgpOwotCWlmICghYXRvbWljX2RlY19hbmRfbG9jaygmZGVudHJ5LT5kX2NvdW50LCAmZGNhY2hlX2xvY2spKQotCQlyZXR1cm47Ci0KIAlzcGluX2xvY2soJmRlbnRyeS0+ZF9sb2NrKTsKLQlpZiAoYXRvbWljX3JlYWQoJmRlbnRyeS0+ZF9jb3VudCkpIHsKKwlCVUdfT04oIWRlbnRyeS0+ZF9jb3VudCk7CisJaWYgKGRlbnRyeS0+ZF9jb3VudCA+IDEpIHsKKwkJZGVudHJ5LT5kX2NvdW50LS07CiAJCXNwaW5fdW5sb2NrKCZkZW50cnktPmRfbG9jayk7Ci0JCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7CiAJCXJldHVybjsKIAl9CiAKLQkvKgotCSAqIEFWOiAtPmRfZGVsZXRlKCkgaXMgX05PVF8gYWxsb3dlZCB0byBibG9jayBub3cuCi0JICovCi0JaWYgKGRlbnRyeS0+ZF9vcCAmJiBkZW50cnktPmRfb3AtPmRfZGVsZXRlKSB7CisJaWYgKGRlbnRyeS0+ZF9mbGFncyAmIERDQUNIRV9PUF9ERUxFVEUpIHsKIAkJaWYgKGRlbnRyeS0+ZF9vcC0+ZF9kZWxldGUoZGVudHJ5KSkKLQkJCWdvdG8gdW5oYXNoX2l0OworCQkJZ290byBraWxsX2l0OwogCX0KIAogCS8qIFVucmVhY2hhYmxlPyBHZXQgcmlkIG9mIGl0ICovCkBAIC0yNTIsMTYgKzQ1MSwxMiBAQAogCWRlbnRyeS0+ZF9mbGFncyB8PSBEQ0FDSEVfUkVGRVJFTkNFRDsKIAlkZW50cnlfbHJ1X2FkZChkZW50cnkpOwogCi0gCXNwaW5fdW5sb2NrKCZkZW50cnktPmRfbG9jayk7Ci0Jc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKKwlkZW50cnktPmRfY291bnQtLTsKKwlzcGluX3VubG9jaygmZGVudHJ5LT5kX2xvY2spOwogCXJldHVybjsKIAotdW5oYXNoX2l0OgotCV9fZF9kcm9wKGRlbnRyeSk7CiBraWxsX2l0OgotCS8qIGlmIGRlbnRyeSB3YXMgb24gdGhlIGRfbHJ1IGxpc3QgZGVsZXRlIGl0IGZyb20gdGhlcmUgKi8KLQlkZW50cnlfbHJ1X2RlbChkZW50cnkpOwotCWRlbnRyeSA9IGRfa2lsbChkZW50cnkpOworCWRlbnRyeSA9IGRlbnRyeV9raWxsKGRlbnRyeSwgMSk7CiAJaWYgKGRlbnRyeSkKIAkJZ290byByZXBlYXQ7CiB9CkBAIC0yODQsOSArNDc5LDkgQEAKIAkvKgogCSAqIElmIGl0J3MgYWxyZWFkeSBiZWVuIGRyb3BwZWQsIHJldHVybiBPSy4KIAkgKi8KLQlzcGluX2xvY2soJmRjYWNoZV9sb2NrKTsKKwlzcGluX2xvY2soJmRlbnRyeS0+ZF9sb2NrKTsKIAlpZiAoZF91bmhhc2hlZChkZW50cnkpKSB7Ci0JCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7CisJCXNwaW5fdW5sb2NrKCZkZW50cnktPmRfbG9jayk7CiAJCXJldHVybiAwOwogCX0KIAkvKgpAQCAtMjk0LDkgKzQ4OSw5IEBACiAJICogdG8gZ2V0IHJpZCBvZiB1bnVzZWQgY2hpbGQgZW50cmllcy4KIAkgKi8KIAlpZiAoIWxpc3RfZW1wdHkoJmRlbnRyeS0+ZF9zdWJkaXJzKSkgewotCQlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOworCQlzcGluX3VubG9jaygmZGVudHJ5LT5kX2xvY2spOwogCQlzaHJpbmtfZGNhY2hlX3BhcmVudChkZW50cnkpOwotCQlzcGluX2xvY2soJmRjYWNoZV9sb2NrKTsKKwkJc3Bpbl9sb2NrKCZkZW50cnktPmRfbG9jayk7CiAJfQogCiAJLyoKQEAgLTMwOSwzNSArNTA0LDYxIEBACiAJICogd2UgbWlnaHQgc3RpbGwgcG9wdWxhdGUgaXQgaWYgaXQgd2FzIGEKIAkgKiB3b3JraW5nIGRpcmVjdG9yeSBvciBzaW1pbGFyKS4KIAkgKi8KLQlzcGluX2xvY2soJmRlbnRyeS0+ZF9sb2NrKTsKLQlpZiAoYXRvbWljX3JlYWQoJmRlbnRyeS0+ZF9jb3VudCkgPiAxKSB7CisJaWYgKGRlbnRyeS0+ZF9jb3VudCA+IDEpIHsKIAkJaWYgKGRlbnRyeS0+ZF9pbm9kZSAmJiBTX0lTRElSKGRlbnRyeS0+ZF9pbm9kZS0+aV9tb2RlKSkgewogCQkJc3Bpbl91bmxvY2soJmRlbnRyeS0+ZF9sb2NrKTsKLQkJCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7CiAJCQlyZXR1cm4gLUVCVVNZOwogCQl9CiAJfQogCiAJX19kX2Ryb3AoZGVudHJ5KTsKIAlzcGluX3VubG9jaygmZGVudHJ5LT5kX2xvY2spOwotCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7CiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKGRfaW52YWxpZGF0ZSk7CiAKLS8qIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCBfb25seV8gd2l0aCBkY2FjaGVfbG9jayBoZWxkICovCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBkZW50cnkgKiBfX2RnZXRfbG9ja2VkKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKKy8qIFRoaXMgbXVzdCBiZSBjYWxsZWQgd2l0aCBkX2xvY2sgaGVsZCAqLworc3RhdGljIGlubGluZSB2b2lkIF9fZGdldF9kbG9jayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiB7Ci0JYXRvbWljX2luYygmZGVudHJ5LT5kX2NvdW50KTsKLQlkZW50cnlfbHJ1X2RlbChkZW50cnkpOwotCXJldHVybiBkZW50cnk7CisJZGVudHJ5LT5kX2NvdW50Kys7CiB9CiAKLXN0cnVjdCBkZW50cnkgKiBkZ2V0X2xvY2tlZChzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCitzdGF0aWMgaW5saW5lIHZvaWQgX19kZ2V0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIHsKLQlyZXR1cm4gX19kZ2V0X2xvY2tlZChkZW50cnkpOworCXNwaW5fbG9jaygmZGVudHJ5LT5kX2xvY2spOworCV9fZGdldF9kbG9jayhkZW50cnkpOworCXNwaW5fdW5sb2NrKCZkZW50cnktPmRfbG9jayk7CiB9Ci1FWFBPUlRfU1lNQk9MKGRnZXRfbG9ja2VkKTsKKworc3RydWN0IGRlbnRyeSAqZGdldF9wYXJlbnQoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoreworCXN0cnVjdCBkZW50cnkgKnJldDsKKworcmVwZWF0OgorCS8qCisJICogRG9uJ3QgbmVlZCByY3VfZGVyZWZlcmVuY2UgYmVjYXVzZSB3ZSByZS1jaGVjayBpdCB3YXMgY29ycmVjdCB1bmRlcgorCSAqIHRoZSBsb2NrLgorCSAqLworCXJjdV9yZWFkX2xvY2soKTsKKwlyZXQgPSBkZW50cnktPmRfcGFyZW50OworCWlmICghcmV0KSB7CisJCXJjdV9yZWFkX3VubG9jaygpOworCQlnb3RvIG91dDsKKwl9CisJc3Bpbl9sb2NrKCZyZXQtPmRfbG9jayk7CisJaWYgKHVubGlrZWx5KHJldCAhPSBkZW50cnktPmRfcGFyZW50KSkgeworCQlzcGluX3VubG9jaygmcmV0LT5kX2xvY2spOworCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJZ290byByZXBlYXQ7CisJfQorCXJjdV9yZWFkX3VubG9jaygpOworCUJVR19PTighcmV0LT5kX2NvdW50KTsKKwlyZXQtPmRfY291bnQrKzsKKwlzcGluX3VubG9jaygmcmV0LT5kX2xvY2spOworb3V0OgorCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGRnZXRfcGFyZW50KTsKIAogLyoqCiAgKiBkX2ZpbmRfYWxpYXMgLSBncmFiIGEgaGFzaGVkIGFsaWFzIG9mIGlub2RlCkBAIC0zNTUsNDIgKzU3Niw1MSBAQAogICogYW55IG90aGVyIGhhc2hlZCBhbGlhcyBvdmVyIHRoYXQgb25lIHVubGVzcyBAd2FudF9kaXNjb24gaXMgc2V0LAogICogaW4gd2hpY2ggY2FzZSBvbmx5IHJldHVybiBhbiBJU19ST09ULCBEQ0FDSEVfRElTQ09OTkVDVEVEIGFsaWFzLgogICovCi0KLXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICogX19kX2ZpbmRfYWxpYXMoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHdhbnRfZGlzY29uKQorc3RhdGljIHN0cnVjdCBkZW50cnkgKl9fZF9maW5kX2FsaWFzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB3YW50X2Rpc2NvbikKIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCAqbmV4dCwgKnRtcDsKLQlzdHJ1Y3QgZGVudHJ5ICphbGlhcywgKmRpc2Nvbl9hbGlhcz1OVUxMOworCXN0cnVjdCBkZW50cnkgKmFsaWFzLCAqZGlzY29uX2FsaWFzOwogCi0JaGVhZCA9ICZpbm9kZS0+aV9kZW50cnk7Ci0JbmV4dCA9IGlub2RlLT5pX2RlbnRyeS5uZXh0OwotCXdoaWxlIChuZXh0ICE9IGhlYWQpIHsKLQkJdG1wID0gbmV4dDsKLQkJbmV4dCA9IHRtcC0+bmV4dDsKLQkJcHJlZmV0Y2gobmV4dCk7Ci0JCWFsaWFzID0gbGlzdF9lbnRyeSh0bXAsIHN0cnVjdCBkZW50cnksIGRfYWxpYXMpOworYWdhaW46CisJZGlzY29uX2FsaWFzID0gTlVMTDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGFsaWFzLCAmaW5vZGUtPmlfZGVudHJ5LCBkX2FsaWFzKSB7CisJCXNwaW5fbG9jaygmYWxpYXMtPmRfbG9jayk7CiAgCQlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSB8fCAhZF91bmhhc2hlZChhbGlhcykpIHsKIAkJCWlmIChJU19ST09UKGFsaWFzKSAmJgotCQkJICAgIChhbGlhcy0+ZF9mbGFncyAmIERDQUNIRV9ESVNDT05ORUNURUQpKQorCQkJICAgIChhbGlhcy0+ZF9mbGFncyAmIERDQUNIRV9ESVNDT05ORUNURUQpKSB7CiAJCQkJZGlzY29uX2FsaWFzID0gYWxpYXM7Ci0JCQllbHNlIGlmICghd2FudF9kaXNjb24pIHsKLQkJCQlfX2RnZXRfbG9ja2VkKGFsaWFzKTsKKwkJCX0gZWxzZSBpZiAoIXdhbnRfZGlzY29uKSB7CisJCQkJX19kZ2V0X2Rsb2NrKGFsaWFzKTsKKwkJCQlzcGluX3VubG9jaygmYWxpYXMtPmRfbG9jayk7CiAJCQkJcmV0dXJuIGFsaWFzOwogCQkJfQogCQl9CisJCXNwaW5fdW5sb2NrKCZhbGlhcy0+ZF9sb2NrKTsKIAl9Ci0JaWYgKGRpc2Nvbl9hbGlhcykKLQkJX19kZ2V0X2xvY2tlZChkaXNjb25fYWxpYXMpOwotCXJldHVybiBkaXNjb25fYWxpYXM7CisJaWYgKGRpc2Nvbl9hbGlhcykgeworCQlhbGlhcyA9IGRpc2Nvbl9hbGlhczsKKwkJc3Bpbl9sb2NrKCZhbGlhcy0+ZF9sb2NrKTsKKwkJaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkgfHwgIWRfdW5oYXNoZWQoYWxpYXMpKSB7CisJCQlpZiAoSVNfUk9PVChhbGlhcykgJiYKKwkJCSAgICAoYWxpYXMtPmRfZmxhZ3MgJiBEQ0FDSEVfRElTQ09OTkVDVEVEKSkgeworCQkJCV9fZGdldF9kbG9jayhhbGlhcyk7CisJCQkJc3Bpbl91bmxvY2soJmFsaWFzLT5kX2xvY2spOworCQkJCXJldHVybiBhbGlhczsKKwkJCX0KKwkJfQorCQlzcGluX3VubG9jaygmYWxpYXMtPmRfbG9jayk7CisJCWdvdG8gYWdhaW47CisJfQorCXJldHVybiBOVUxMOwogfQogCi1zdHJ1Y3QgZGVudHJ5ICogZF9maW5kX2FsaWFzKHN0cnVjdCBpbm9kZSAqaW5vZGUpCitzdHJ1Y3QgZGVudHJ5ICpkX2ZpbmRfYWxpYXMoc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlzdHJ1Y3QgZGVudHJ5ICpkZSA9IE5VTEw7CiAKIAlpZiAoIWxpc3RfZW1wdHkoJmlub2RlLT5pX2RlbnRyeSkpIHsKLQkJc3Bpbl9sb2NrKCZkY2FjaGVfbG9jayk7CisJCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7CiAJCWRlID0gX19kX2ZpbmRfYWxpYXMoaW5vZGUsIDApOwotCQlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOworCQlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7CiAJfQogCXJldHVybiBkZTsKIH0KQEAgLTQwNCw1NCArNjM0LDYxIEBACiB7CiAJc3RydWN0IGRlbnRyeSAqZGVudHJ5OwogcmVzdGFydDoKLQlzcGluX2xvY2soJmRjYWNoZV9sb2NrKTsKKwlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZGVudHJ5LCAmaW5vZGUtPmlfZGVudHJ5LCBkX2FsaWFzKSB7CiAJCXNwaW5fbG9jaygmZGVudHJ5LT5kX2xvY2spOwotCQlpZiAoIWF0b21pY19yZWFkKCZkZW50cnktPmRfY291bnQpKSB7Ci0JCQlfX2RnZXRfbG9ja2VkKGRlbnRyeSk7CisJCWlmICghZGVudHJ5LT5kX2NvdW50KSB7CisJCQlfX2RnZXRfZGxvY2soZGVudHJ5KTsKIAkJCV9fZF9kcm9wKGRlbnRyeSk7CiAJCQlzcGluX3VubG9jaygmZGVudHJ5LT5kX2xvY2spOwotCQkJc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKKwkJCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKIAkJCWRwdXQoZGVudHJ5KTsKIAkJCWdvdG8gcmVzdGFydDsKIAkJfQogCQlzcGluX3VubG9jaygmZGVudHJ5LT5kX2xvY2spOwogCX0KLQlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOworCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKIH0KIEVYUE9SVF9TWU1CT0woZF9wcnVuZV9hbGlhc2VzKTsKIAogLyoKLSAqIFRocm93IGF3YXkgYSBkZW50cnkgLSBmcmVlIHRoZSBpbm9kZSwgZHB1dCB0aGUgcGFyZW50LiAgVGhpcyByZXF1aXJlcyB0aGF0Ci0gKiB0aGUgTFJVIGxpc3QgaGFzIGFscmVhZHkgYmVlbiByZW1vdmVkLgorICogVHJ5IHRvIHRocm93IGF3YXkgYSBkZW50cnkgLSBmcmVlIHRoZSBpbm9kZSwgZHB1dCB0aGUgcGFyZW50LgorICogUmVxdWlyZXMgZGVudHJ5LT5kX2xvY2sgaXMgaGVsZCwgYW5kIGRlbnRyeS0+ZF9jb3VudCA9PSAwLgorICogUmVsZWFzZXMgZGVudHJ5LT5kX2xvY2suCiAgKgotICogVHJ5IHRvIHBydW5lIGFuY2VzdG9ycyBhcyB3ZWxsLiAgVGhpcyBpcyBuZWNlc3NhcnkgdG8gcHJldmVudAotICogcXVhZHJhdGljIGJlaGF2aW9yIG9mIHNocmlua19kY2FjaGVfcGFyZW50KCksIGJ1dCBpcyBhbHNvIGV4cGVjdGVkCi0gKiB0byBiZSBiZW5lZmljaWFsIGluIHJlZHVjaW5nIGRlbnRyeSBjYWNoZSBmcmFnbWVudGF0aW9uLgorICogVGhpcyBtYXkgZmFpbCBpZiBsb2NrcyBjYW5ub3QgYmUgYWNxdWlyZWQgbm8gcHJvYmxlbSwganVzdCB0cnkgYWdhaW4uCiAgKi8KLXN0YXRpYyB2b2lkIHBydW5lX29uZV9kZW50cnkoc3RydWN0IGRlbnRyeSAqIGRlbnRyeSkKK3N0YXRpYyB2b2lkIHRyeV9wcnVuZV9vbmVfZGVudHJ5KHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIAlfX3JlbGVhc2VzKGRlbnRyeS0+ZF9sb2NrKQotCV9fcmVsZWFzZXMoZGNhY2hlX2xvY2spCi0JX19hY3F1aXJlcyhkY2FjaGVfbG9jaykKIHsKLQlfX2RfZHJvcChkZW50cnkpOwotCWRlbnRyeSA9IGRfa2lsbChkZW50cnkpOworCXN0cnVjdCBkZW50cnkgKnBhcmVudDsKIAorCXBhcmVudCA9IGRlbnRyeV9raWxsKGRlbnRyeSwgMCk7CiAJLyoKLQkgKiBQcnVuZSBhbmNlc3RvcnMuICBMb2NraW5nIGlzIHNpbXBsZXIgdGhhbiBpbiBkcHV0KCksCi0JICogYmVjYXVzZSBkY2FjaGVfbG9jayBuZWVkcyB0byBiZSB0YWtlbiBhbnl3YXkuCisJICogSWYgZGVudHJ5X2tpbGwgcmV0dXJucyBOVUxMLCB3ZSBoYXZlIG5vdGhpbmcgbW9yZSB0byBkby4KKwkgKiBpZiBpdCByZXR1cm5zIHRoZSBzYW1lIGRlbnRyeSwgdHJ5bG9ja3MgZmFpbGVkLiBJbiBlaXRoZXIKKwkgKiBjYXNlLCBqdXN0IGxvb3AgYWdhaW4uCisJICoKKwkgKiBPdGhlcndpc2UsIHdlIG5lZWQgdG8gcHJ1bmUgYW5jZXN0b3JzIHRvby4gVGhpcyBpcyBuZWNlc3NhcnkKKwkgKiB0byBwcmV2ZW50IHF1YWRyYXRpYyBiZWhhdmlvciBvZiBzaHJpbmtfZGNhY2hlX3BhcmVudCgpLCBidXQKKwkgKiBpcyBhbHNvIGV4cGVjdGVkIHRvIGJlIGJlbmVmaWNpYWwgaW4gcmVkdWNpbmcgZGVudHJ5IGNhY2hlCisJICogZnJhZ21lbnRhdGlvbi4KIAkgKi8KLQlzcGluX2xvY2soJmRjYWNoZV9sb2NrKTsKLQl3aGlsZSAoZGVudHJ5KSB7Ci0JCWlmICghYXRvbWljX2RlY19hbmRfbG9jaygmZGVudHJ5LT5kX2NvdW50LCAmZGVudHJ5LT5kX2xvY2spKQotCQkJcmV0dXJuOworCWlmICghcGFyZW50KQorCQlyZXR1cm47CisJaWYgKHBhcmVudCA9PSBkZW50cnkpCisJCXJldHVybjsKIAotCQlpZiAoZGVudHJ5LT5kX29wICYmIGRlbnRyeS0+ZF9vcC0+ZF9kZWxldGUpCi0JCQlkZW50cnktPmRfb3AtPmRfZGVsZXRlKGRlbnRyeSk7Ci0JCWRlbnRyeV9scnVfZGVsKGRlbnRyeSk7Ci0JCV9fZF9kcm9wKGRlbnRyeSk7Ci0JCWRlbnRyeSA9IGRfa2lsbChkZW50cnkpOwotCQlzcGluX2xvY2soJmRjYWNoZV9sb2NrKTsKKwkvKiBQcnVuZSBhbmNlc3RvcnMuICovCisJZGVudHJ5ID0gcGFyZW50OworCXdoaWxlIChkZW50cnkpIHsKKwkJc3Bpbl9sb2NrKCZkZW50cnktPmRfbG9jayk7CisJCWlmIChkZW50cnktPmRfY291bnQgPiAxKSB7CisJCQlkZW50cnktPmRfY291bnQtLTsKKwkJCXNwaW5fdW5sb2NrKCZkZW50cnktPmRfbG9jayk7CisJCQlyZXR1cm47CisJCX0KKwkJZGVudHJ5ID0gZGVudHJ5X2tpbGwoZGVudHJ5LCAxKTsKIAl9CiB9CiAKQEAgLTQ1OSwyNCArNjk2LDM1IEBACiB7CiAJc3RydWN0IGRlbnRyeSAqZGVudHJ5OwogCi0Jd2hpbGUgKCFsaXN0X2VtcHR5KGxpc3QpKSB7Ci0JCWRlbnRyeSA9IGxpc3RfZW50cnkobGlzdC0+cHJldiwgc3RydWN0IGRlbnRyeSwgZF9scnUpOwotCQlkZW50cnlfbHJ1X2RlbChkZW50cnkpOworCXJjdV9yZWFkX2xvY2soKTsKKwlmb3IgKDs7KSB7CisJCWRlbnRyeSA9IGxpc3RfZW50cnlfcmN1KGxpc3QtPnByZXYsIHN0cnVjdCBkZW50cnksIGRfbHJ1KTsKKwkJaWYgKCZkZW50cnktPmRfbHJ1ID09IGxpc3QpCisJCQlicmVhazsgLyogZW1wdHkgKi8KKwkJc3Bpbl9sb2NrKCZkZW50cnktPmRfbG9jayk7CisJCWlmIChkZW50cnkgIT0gbGlzdF9lbnRyeShsaXN0LT5wcmV2LCBzdHJ1Y3QgZGVudHJ5LCBkX2xydSkpIHsKKwkJCXNwaW5fdW5sb2NrKCZkZW50cnktPmRfbG9jayk7CisJCQljb250aW51ZTsKKwkJfQogCiAJCS8qCiAJCSAqIFdlIGZvdW5kIGFuIGludXNlIGRlbnRyeSB3aGljaCB3YXMgbm90IHJlbW92ZWQgZnJvbQogCQkgKiB0aGUgTFJVIGJlY2F1c2Ugb2YgbGF6aW5lc3MgZHVyaW5nIGxvb2t1cC4gIERvIG5vdCBmcmVlCiAJCSAqIGl0IC0ganVzdCBrZWVwIGl0IG9mZiB0aGUgTFJVIGxpc3QuCiAJCSAqLwotCQlzcGluX2xvY2soJmRlbnRyeS0+ZF9sb2NrKTsKLQkJaWYgKGF0b21pY19yZWFkKCZkZW50cnktPmRfY291bnQpKSB7CisJCWlmIChkZW50cnktPmRfY291bnQpIHsKKwkJCWRlbnRyeV9scnVfZGVsKGRlbnRyeSk7CiAJCQlzcGluX3VubG9jaygmZGVudHJ5LT5kX2xvY2spOwogCQkJY29udGludWU7CiAJCX0KLQkJcHJ1bmVfb25lX2RlbnRyeShkZW50cnkpOwotCQkvKiBkZW50cnktPmRfbG9jayB3YXMgZHJvcHBlZCBpbiBwcnVuZV9vbmVfZGVudHJ5KCkgKi8KLQkJY29uZF9yZXNjaGVkX2xvY2soJmRjYWNoZV9sb2NrKTsKKworCQlyY3VfcmVhZF91bmxvY2soKTsKKworCQl0cnlfcHJ1bmVfb25lX2RlbnRyeShkZW50cnkpOworCisJCXJjdV9yZWFkX2xvY2soKTsKIAl9CisJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKIC8qKgpAQCAtNDk1LDQyICs3NDMsNDQgQEAKIAlMSVNUX0hFQUQodG1wKTsKIAlpbnQgY250ID0gKmNvdW50OwogCi0Jc3Bpbl9sb2NrKCZkY2FjaGVfbG9jayk7CityZWxvY2s6CisJc3Bpbl9sb2NrKCZkY2FjaGVfbHJ1X2xvY2spOwogCXdoaWxlICghbGlzdF9lbXB0eSgmc2ItPnNfZGVudHJ5X2xydSkpIHsKIAkJZGVudHJ5ID0gbGlzdF9lbnRyeShzYi0+c19kZW50cnlfbHJ1LnByZXYsCiAJCQkJc3RydWN0IGRlbnRyeSwgZF9scnUpOwogCQlCVUdfT04oZGVudHJ5LT5kX3NiICE9IHNiKTsKIAorCQlpZiAoIXNwaW5fdHJ5bG9jaygmZGVudHJ5LT5kX2xvY2spKSB7CisJCQlzcGluX3VubG9jaygmZGNhY2hlX2xydV9sb2NrKTsKKwkJCWNwdV9yZWxheCgpOworCQkJZ290byByZWxvY2s7CisJCX0KKwogCQkvKgogCQkgKiBJZiB3ZSBhcmUgaG9ub3VyaW5nIHRoZSBEQ0FDSEVfUkVGRVJFTkNFRCBmbGFnIGFuZCB0aGUKIAkJICogZGVudHJ5IGhhcyB0aGlzIGZsYWcgc2V0LCBkb24ndCBmcmVlIGl0LiAgQ2xlYXIgdGhlIGZsYWcKIAkJICogYW5kIHB1dCBpdCBiYWNrIG9uIHRoZSBMUlUuCiAJCSAqLwotCQlpZiAoZmxhZ3MgJiBEQ0FDSEVfUkVGRVJFTkNFRCkgewotCQkJc3Bpbl9sb2NrKCZkZW50cnktPmRfbG9jayk7Ci0JCQlpZiAoZGVudHJ5LT5kX2ZsYWdzICYgRENBQ0hFX1JFRkVSRU5DRUQpIHsKLQkJCQlkZW50cnktPmRfZmxhZ3MgJj0gfkRDQUNIRV9SRUZFUkVOQ0VEOwotCQkJCWxpc3RfbW92ZSgmZGVudHJ5LT5kX2xydSwgJnJlZmVyZW5jZWQpOwotCQkJCXNwaW5fdW5sb2NrKCZkZW50cnktPmRfbG9jayk7Ci0JCQkJY29uZF9yZXNjaGVkX2xvY2soJmRjYWNoZV9sb2NrKTsKLQkJCQljb250aW51ZTsKLQkJCX0KKwkJaWYgKGZsYWdzICYgRENBQ0hFX1JFRkVSRU5DRUQgJiYKKwkJCQlkZW50cnktPmRfZmxhZ3MgJiBEQ0FDSEVfUkVGRVJFTkNFRCkgeworCQkJZGVudHJ5LT5kX2ZsYWdzICY9IH5EQ0FDSEVfUkVGRVJFTkNFRDsKKwkJCWxpc3RfbW92ZSgmZGVudHJ5LT5kX2xydSwgJnJlZmVyZW5jZWQpOwogCQkJc3Bpbl91bmxvY2soJmRlbnRyeS0+ZF9sb2NrKTsKKwkJfSBlbHNlIHsKKwkJCWxpc3RfbW92ZV90YWlsKCZkZW50cnktPmRfbHJ1LCAmdG1wKTsKKwkJCXNwaW5fdW5sb2NrKCZkZW50cnktPmRfbG9jayk7CisJCQlpZiAoIS0tY250KQorCQkJCWJyZWFrOwogCQl9Ci0KLQkJbGlzdF9tb3ZlX3RhaWwoJmRlbnRyeS0+ZF9scnUsICZ0bXApOwotCQlpZiAoIS0tY250KQotCQkJYnJlYWs7Ci0JCWNvbmRfcmVzY2hlZF9sb2NrKCZkY2FjaGVfbG9jayk7CisJCWNvbmRfcmVzY2hlZF9sb2NrKCZkY2FjaGVfbHJ1X2xvY2spOwogCX0KLQotCSpjb3VudCA9IGNudDsKLQlzaHJpbmtfZGVudHJ5X2xpc3QoJnRtcCk7Ci0KIAlpZiAoIWxpc3RfZW1wdHkoJnJlZmVyZW5jZWQpKQogCQlsaXN0X3NwbGljZSgmcmVmZXJlbmNlZCwgJnNiLT5zX2RlbnRyeV9scnUpOwotCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7CisJc3Bpbl91bmxvY2soJmRjYWNoZV9scnVfbG9jayk7CiAKKwlzaHJpbmtfZGVudHJ5X2xpc3QoJnRtcCk7CisKKwkqY291bnQgPSBjbnQ7CiB9CiAKIC8qKgpAQCAtNTQ2LDEzICs3OTYsMTIgQEAKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCAqcCA9IE5VTEw7CiAJaW50IHdfY291bnQ7Ci0JaW50IHVudXNlZCA9IHBlcmNwdV9jb3VudGVyX3N1bV9wb3NpdGl2ZSgmbnJfZGVudHJ5X3VudXNlZCk7CisJaW50IHVudXNlZCA9IGRlbnRyeV9zdGF0Lm5yX3VudXNlZDsKIAlpbnQgcHJ1bmVfcmF0aW87CiAJaW50IHBydW5lZDsKIAogCWlmICh1bnVzZWQgPT0gMCB8fCBjb3VudCA9PSAwKQogCQlyZXR1cm47Ci0Jc3Bpbl9sb2NrKCZkY2FjaGVfbG9jayk7CiAJaWYgKGNvdW50ID49IHVudXNlZCkKIAkJcHJ1bmVfcmF0aW8gPSAxOwogCWVsc2UKQEAgLTU4OSwxMSArODM4LDkgQEAKIAkJaWYgKGRvd25fcmVhZF90cnlsb2NrKCZzYi0+c191bW91bnQpKSB7CiAJCQlpZiAoKHNiLT5zX3Jvb3QgIT0gTlVMTCkgJiYKIAkJCSAgICAoIWxpc3RfZW1wdHkoJnNiLT5zX2RlbnRyeV9scnUpKSkgewotCQkJCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7CiAJCQkJX19zaHJpbmtfZGNhY2hlX3NiKHNiLCAmd19jb3VudCwKIAkJCQkJCURDQUNIRV9SRUZFUkVOQ0VEKTsKIAkJCQlwcnVuZWQgLT0gd19jb3VudDsKLQkJCQlzcGluX2xvY2soJmRjYWNoZV9sb2NrKTsKIAkJCX0KIAkJCXVwX3JlYWQoJnNiLT5zX3Vtb3VudCk7CiAJCX0KQEAgLTYwOSw3ICs4NTYsNiBAQAogCWlmIChwKQogCQlfX3B1dF9zdXBlcihwKTsKIAlzcGluX3VubG9jaygmc2JfbG9jayk7Ci0Jc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKIH0KIAogLyoqCkBAIC02MjMsMTIgKzg2OSwxNCBAQAogewogCUxJU1RfSEVBRCh0bXApOwogCi0Jc3Bpbl9sb2NrKCZkY2FjaGVfbG9jayk7CisJc3Bpbl9sb2NrKCZkY2FjaGVfbHJ1X2xvY2spOwogCXdoaWxlICghbGlzdF9lbXB0eSgmc2ItPnNfZGVudHJ5X2xydSkpIHsKIAkJbGlzdF9zcGxpY2VfaW5pdCgmc2ItPnNfZGVudHJ5X2xydSwgJnRtcCk7CisJCXNwaW5fdW5sb2NrKCZkY2FjaGVfbHJ1X2xvY2spOwogCQlzaHJpbmtfZGVudHJ5X2xpc3QoJnRtcCk7CisJCXNwaW5fbG9jaygmZGNhY2hlX2xydV9sb2NrKTsKIAl9Ci0Jc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKKwlzcGluX3VubG9jaygmZGNhY2hlX2xydV9sb2NrKTsKIH0KIEVYUE9SVF9TWU1CT0woc2hyaW5rX2RjYWNoZV9zYik7CiAKQEAgLTY0NSwxMCArODkzLDEwIEBACiAJQlVHX09OKCFJU19ST09UKGRlbnRyeSkpOwogCiAJLyogZGV0YWNoIHRoaXMgcm9vdCBmcm9tIHRoZSBzeXN0ZW0gKi8KLQlzcGluX2xvY2soJmRjYWNoZV9sb2NrKTsKKwlzcGluX2xvY2soJmRlbnRyeS0+ZF9sb2NrKTsKIAlkZW50cnlfbHJ1X2RlbChkZW50cnkpOwogCV9fZF9kcm9wKGRlbnRyeSk7Ci0Jc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKKwlzcGluX3VubG9jaygmZGVudHJ5LT5kX2xvY2spOwogCiAJZm9yICg7OykgewogCQkvKiBkZXNjZW5kIHRvIHRoZSBmaXJzdCBsZWFmIGluIHRoZSBjdXJyZW50IHN1YnRyZWUgKi8KQEAgLTY1NywxNCArOTA1LDE2IEBACiAKIAkJCS8qIHRoaXMgaXMgYSBicmFuY2ggd2l0aCBjaGlsZHJlbiAtIGRldGFjaCBhbGwgb2YgdGhlbQogCQkJICogZnJvbSB0aGUgc3lzdGVtIGluIG9uZSBnbyAqLwotCQkJc3Bpbl9sb2NrKCZkY2FjaGVfbG9jayk7CisJCQlzcGluX2xvY2soJmRlbnRyeS0+ZF9sb2NrKTsKIAkJCWxpc3RfZm9yX2VhY2hfZW50cnkobG9vcCwgJmRlbnRyeS0+ZF9zdWJkaXJzLAogCQkJCQkgICAgZF91LmRfY2hpbGQpIHsKKwkJCQlzcGluX2xvY2tfbmVzdGVkKCZsb29wLT5kX2xvY2ssCisJCQkJCQlERU5UUllfRF9MT0NLX05FU1RFRCk7CiAJCQkJZGVudHJ5X2xydV9kZWwobG9vcCk7CiAJCQkJX19kX2Ryb3AobG9vcCk7Ci0JCQkJY29uZF9yZXNjaGVkX2xvY2soJmRjYWNoZV9sb2NrKTsKKwkJCQlzcGluX3VubG9jaygmbG9vcC0+ZF9sb2NrKTsKIAkJCX0KLQkJCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7CisJCQlzcGluX3VubG9jaygmZGVudHJ5LT5kX2xvY2spOwogCiAJCQkvKiBtb3ZlIHRvIHRoZSBmaXJzdCBjaGlsZCAqLwogCQkJZGVudHJ5ID0gbGlzdF9lbnRyeShkZW50cnktPmRfc3ViZGlycy5uZXh0LApAQCAtNjc2LDcgKzkyNiw3IEBACiAJCWRvIHsKIAkJCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAKLQkJCWlmIChhdG9taWNfcmVhZCgmZGVudHJ5LT5kX2NvdW50KSAhPSAwKSB7CisJCQlpZiAoZGVudHJ5LT5kX2NvdW50ICE9IDApIHsKIAkJCQlwcmludGsoS0VSTl9FUlIKIAkJCQkgICAgICAgIkJVRzogRGVudHJ5ICVwe2k9JWx4LG49JXN9IgogCQkJCSAgICAgICAiIHN0aWxsIGluIHVzZSAoJWQpIgpAQCAtNjg1LDIwICs5MzUsMjMgQEAKIAkJCQkgICAgICAgZGVudHJ5LT5kX2lub2RlID8KIAkJCQkgICAgICAgZGVudHJ5LT5kX2lub2RlLT5pX2lubyA6IDBVTCwKIAkJCQkgICAgICAgZGVudHJ5LT5kX25hbWUubmFtZSwKLQkJCQkgICAgICAgYXRvbWljX3JlYWQoJmRlbnRyeS0+ZF9jb3VudCksCisJCQkJICAgICAgIGRlbnRyeS0+ZF9jb3VudCwKIAkJCQkgICAgICAgZGVudHJ5LT5kX3NiLT5zX3R5cGUtPm5hbWUsCiAJCQkJICAgICAgIGRlbnRyeS0+ZF9zYi0+c19pZCk7CiAJCQkJQlVHKCk7CiAJCQl9CiAKLQkJCWlmIChJU19ST09UKGRlbnRyeSkpCisJCQlpZiAoSVNfUk9PVChkZW50cnkpKSB7CiAJCQkJcGFyZW50ID0gTlVMTDsKLQkJCWVsc2UgeworCQkJCWxpc3RfZGVsKCZkZW50cnktPmRfdS5kX2NoaWxkKTsKKwkJCX0gZWxzZSB7CiAJCQkJcGFyZW50ID0gZGVudHJ5LT5kX3BhcmVudDsKLQkJCQlhdG9taWNfZGVjKCZwYXJlbnQtPmRfY291bnQpOworCQkJCXNwaW5fbG9jaygmcGFyZW50LT5kX2xvY2spOworCQkJCXBhcmVudC0+ZF9jb3VudC0tOworCQkJCWxpc3RfZGVsKCZkZW50cnktPmRfdS5kX2NoaWxkKTsKKwkJCQlzcGluX3VubG9jaygmcGFyZW50LT5kX2xvY2spOwogCQkJfQogCi0JCQlsaXN0X2RlbCgmZGVudHJ5LT5kX3UuZF9jaGlsZCk7CiAJCQlkZXRhY2hlZCsrOwogCiAJCQlpbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKQEAgLTcyOCw4ICs5ODEsNyBAQAogCiAvKgogICogZGVzdHJveSB0aGUgZGVudHJpZXMgYXR0YWNoZWQgdG8gYSBzdXBlcmJsb2NrIG9uIHVubW91bnRpbmcKLSAqIC0gd2UgZG9uJ3QgbmVlZCB0byB1c2UgZGVudHJ5LT5kX2xvY2ssIGFuZCBvbmx5IG5lZWQgZGNhY2hlX2xvY2sgd2hlbgotICogICByZW1vdmluZyB0aGUgZGVudHJ5IGZyb20gdGhlIHN5c3RlbSBsaXN0cyBhbmQgaGFzaGVzIGJlY2F1c2U6CisgKiAtIHdlIGRvbid0IG5lZWQgdG8gdXNlIGRlbnRyeS0+ZF9sb2NrIGJlY2F1c2U6CiAgKiAgIC0gdGhlIHN1cGVyYmxvY2sgaXMgZGV0YWNoZWQgZnJvbSBhbGwgbW91bnRpbmdzIGFuZCBvcGVuIGZpbGVzLCBzbyB0aGUKICAqICAgICBkZW50cnkgdHJlZXMgd2lsbCBub3QgYmUgcmVhcnJhbmdlZCBieSB0aGUgVkZTCiAgKiAgIC0gc191bW91bnQgaXMgd3JpdGUtbG9ja2VkLCBzbyB0aGUgbWVtb3J5IHByZXNzdXJlIHNocmlua2VyIHdpbGwgaWdub3JlCkBAIC03NDYsMTEgKzk5OCwxMyBAQAogCiAJZGVudHJ5ID0gc2ItPnNfcm9vdDsKIAlzYi0+c19yb290ID0gTlVMTDsKLQlhdG9taWNfZGVjKCZkZW50cnktPmRfY291bnQpOworCXNwaW5fbG9jaygmZGVudHJ5LT5kX2xvY2spOworCWRlbnRyeS0+ZF9jb3VudC0tOworCXNwaW5fdW5sb2NrKCZkZW50cnktPmRfbG9jayk7CiAJc2hyaW5rX2RjYWNoZV9mb3JfdW1vdW50X3N1YnRyZWUoZGVudHJ5KTsKIAotCXdoaWxlICghaGxpc3RfZW1wdHkoJnNiLT5zX2Fub24pKSB7Ci0JCWRlbnRyeSA9IGhsaXN0X2VudHJ5KHNiLT5zX2Fub24uZmlyc3QsIHN0cnVjdCBkZW50cnksIGRfaGFzaCk7CisJd2hpbGUgKCFobGlzdF9ibF9lbXB0eSgmc2ItPnNfYW5vbikpIHsKKwkJZGVudHJ5ID0gaGxpc3RfYmxfZW50cnkoaGxpc3RfYmxfZmlyc3QoJnNiLT5zX2Fub24pLCBzdHJ1Y3QgZGVudHJ5LCBkX2hhc2gpOwogCQlzaHJpbmtfZGNhY2hlX2Zvcl91bW91bnRfc3VidHJlZShkZW50cnkpOwogCX0KIH0KQEAgLTc2OCwxNSArMTAyMiwyMCBAQAogICogUmV0dXJuIHRydWUgaWYgdGhlIHBhcmVudCBvciBpdHMgc3ViZGlyZWN0b3JpZXMgY29udGFpbgogICogYSBtb3VudCBwb2ludAogICovCi0gCiBpbnQgaGF2ZV9zdWJtb3VudHMoc3RydWN0IGRlbnRyeSAqcGFyZW50KQogewotCXN0cnVjdCBkZW50cnkgKnRoaXNfcGFyZW50ID0gcGFyZW50OworCXN0cnVjdCBkZW50cnkgKnRoaXNfcGFyZW50OwogCXN0cnVjdCBsaXN0X2hlYWQgKm5leHQ7CisJdW5zaWduZWQgc2VxOworCWludCBsb2NrZWQgPSAwOwogCi0Jc3Bpbl9sb2NrKCZkY2FjaGVfbG9jayk7CisJc2VxID0gcmVhZF9zZXFiZWdpbigmcmVuYW1lX2xvY2spOworYWdhaW46CisJdGhpc19wYXJlbnQgPSBwYXJlbnQ7CisKIAlpZiAoZF9tb3VudHBvaW50KHBhcmVudCkpCiAJCWdvdG8gcG9zaXRpdmU7CisJc3Bpbl9sb2NrKCZ0aGlzX3BhcmVudC0+ZF9sb2NrKTsKIHJlcGVhdDoKIAluZXh0ID0gdGhpc19wYXJlbnQtPmRfc3ViZGlycy5uZXh0OwogcmVzdW1lOgpAQCAtNzg0LDI3ICsxMDQzLDY1IEBACiAJCXN0cnVjdCBsaXN0X2hlYWQgKnRtcCA9IG5leHQ7CiAJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IGxpc3RfZW50cnkodG1wLCBzdHJ1Y3QgZGVudHJ5LCBkX3UuZF9jaGlsZCk7CiAJCW5leHQgPSB0bXAtPm5leHQ7CisKKwkJc3Bpbl9sb2NrX25lc3RlZCgmZGVudHJ5LT5kX2xvY2ssIERFTlRSWV9EX0xPQ0tfTkVTVEVEKTsKIAkJLyogSGF2ZSB3ZSBmb3VuZCBhIG1vdW50IHBvaW50ID8gKi8KLQkJaWYgKGRfbW91bnRwb2ludChkZW50cnkpKQorCQlpZiAoZF9tb3VudHBvaW50KGRlbnRyeSkpIHsKKwkJCXNwaW5fdW5sb2NrKCZkZW50cnktPmRfbG9jayk7CisJCQlzcGluX3VubG9jaygmdGhpc19wYXJlbnQtPmRfbG9jayk7CiAJCQlnb3RvIHBvc2l0aXZlOworCQl9CiAJCWlmICghbGlzdF9lbXB0eSgmZGVudHJ5LT5kX3N1YmRpcnMpKSB7CisJCQlzcGluX3VubG9jaygmdGhpc19wYXJlbnQtPmRfbG9jayk7CisJCQlzcGluX3JlbGVhc2UoJmRlbnRyeS0+ZF9sb2NrLmRlcF9tYXAsIDEsIF9SRVRfSVBfKTsKIAkJCXRoaXNfcGFyZW50ID0gZGVudHJ5OworCQkJc3Bpbl9hY3F1aXJlKCZ0aGlzX3BhcmVudC0+ZF9sb2NrLmRlcF9tYXAsIDAsIDEsIF9SRVRfSVBfKTsKIAkJCWdvdG8gcmVwZWF0OwogCQl9CisJCXNwaW5fdW5sb2NrKCZkZW50cnktPmRfbG9jayk7CiAJfQogCS8qCiAJICogQWxsIGRvbmUgYXQgdGhpcyBsZXZlbCAuLi4gYXNjZW5kIGFuZCByZXN1bWUgdGhlIHNlYXJjaC4KIAkgKi8KIAlpZiAodGhpc19wYXJlbnQgIT0gcGFyZW50KSB7Ci0JCW5leHQgPSB0aGlzX3BhcmVudC0+ZF91LmRfY2hpbGQubmV4dDsKLQkJdGhpc19wYXJlbnQgPSB0aGlzX3BhcmVudC0+ZF9wYXJlbnQ7CisJCXN0cnVjdCBkZW50cnkgKnRtcDsKKwkJc3RydWN0IGRlbnRyeSAqY2hpbGQ7CisKKwkJdG1wID0gdGhpc19wYXJlbnQtPmRfcGFyZW50OworCQlyY3VfcmVhZF9sb2NrKCk7CisJCXNwaW5fdW5sb2NrKCZ0aGlzX3BhcmVudC0+ZF9sb2NrKTsKKwkJY2hpbGQgPSB0aGlzX3BhcmVudDsKKwkJdGhpc19wYXJlbnQgPSB0bXA7CisJCXNwaW5fbG9jaygmdGhpc19wYXJlbnQtPmRfbG9jayk7CisJCS8qIG1pZ2h0IGdvIGJhY2sgdXAgdGhlIHdyb25nIHBhcmVudCBpZiB3ZSBoYXZlIGhhZCBhIHJlbmFtZQorCQkgKiBvciBkZWxldGlvbiAqLworCQlpZiAodGhpc19wYXJlbnQgIT0gY2hpbGQtPmRfcGFyZW50IHx8CisJCQkgKCFsb2NrZWQgJiYgcmVhZF9zZXFyZXRyeSgmcmVuYW1lX2xvY2ssIHNlcSkpKSB7CisJCQlzcGluX3VubG9jaygmdGhpc19wYXJlbnQtPmRfbG9jayk7CisJCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJCWdvdG8gcmVuYW1lX3JldHJ5OworCQl9CisJCXJjdV9yZWFkX3VubG9jaygpOworCQluZXh0ID0gY2hpbGQtPmRfdS5kX2NoaWxkLm5leHQ7CiAJCWdvdG8gcmVzdW1lOwogCX0KLQlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOworCXNwaW5fdW5sb2NrKCZ0aGlzX3BhcmVudC0+ZF9sb2NrKTsKKwlpZiAoIWxvY2tlZCAmJiByZWFkX3NlcXJldHJ5KCZyZW5hbWVfbG9jaywgc2VxKSkKKwkJZ290byByZW5hbWVfcmV0cnk7CisJaWYgKGxvY2tlZCkKKwkJd3JpdGVfc2VxdW5sb2NrKCZyZW5hbWVfbG9jayk7CiAJcmV0dXJuIDA7IC8qIE5vIG1vdW50IHBvaW50cyBmb3VuZCBpbiB0cmVlICovCiBwb3NpdGl2ZToKLQlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOworCWlmICghbG9ja2VkICYmIHJlYWRfc2VxcmV0cnkoJnJlbmFtZV9sb2NrLCBzZXEpKQorCQlnb3RvIHJlbmFtZV9yZXRyeTsKKwlpZiAobG9ja2VkKQorCQl3cml0ZV9zZXF1bmxvY2soJnJlbmFtZV9sb2NrKTsKIAlyZXR1cm4gMTsKKworcmVuYW1lX3JldHJ5OgorCWxvY2tlZCA9IDE7CisJd3JpdGVfc2VxbG9jaygmcmVuYW1lX2xvY2spOworCWdvdG8gYWdhaW47CiB9CiBFWFBPUlRfU1lNQk9MKGhhdmVfc3VibW91bnRzKTsKIApAQCAtODI0LDExICsxMTIxLDE2IEBACiAgKi8KIHN0YXRpYyBpbnQgc2VsZWN0X3BhcmVudChzdHJ1Y3QgZGVudHJ5ICogcGFyZW50KQogewotCXN0cnVjdCBkZW50cnkgKnRoaXNfcGFyZW50ID0gcGFyZW50OworCXN0cnVjdCBkZW50cnkgKnRoaXNfcGFyZW50OwogCXN0cnVjdCBsaXN0X2hlYWQgKm5leHQ7CisJdW5zaWduZWQgc2VxOwogCWludCBmb3VuZCA9IDA7CisJaW50IGxvY2tlZCA9IDA7CiAKLQlzcGluX2xvY2soJmRjYWNoZV9sb2NrKTsKKwlzZXEgPSByZWFkX3NlcWJlZ2luKCZyZW5hbWVfbG9jayk7CithZ2FpbjoKKwl0aGlzX3BhcmVudCA9IHBhcmVudDsKKwlzcGluX2xvY2soJnRoaXNfcGFyZW50LT5kX2xvY2spOwogcmVwZWF0OgogCW5leHQgPSB0aGlzX3BhcmVudC0+ZF9zdWJkaXJzLm5leHQ7CiByZXN1bWU6CkBAIC04MzcsMTEgKzExMzksMTMgQEAKIAkJc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gbGlzdF9lbnRyeSh0bXAsIHN0cnVjdCBkZW50cnksIGRfdS5kX2NoaWxkKTsKIAkJbmV4dCA9IHRtcC0+bmV4dDsKIAorCQlzcGluX2xvY2tfbmVzdGVkKCZkZW50cnktPmRfbG9jaywgREVOVFJZX0RfTE9DS19ORVNURUQpOworCiAJCS8qIAogCQkgKiBtb3ZlIG9ubHkgemVybyByZWYgY291bnQgZGVudHJpZXMgdG8gdGhlIGVuZCAKIAkJICogb2YgdGhlIHVudXNlZCBsaXN0IGZvciBwcnVuZV9kY2FjaGUKIAkJICovCi0JCWlmICghYXRvbWljX3JlYWQoJmRlbnRyeS0+ZF9jb3VudCkpIHsKKwkJaWYgKCFkZW50cnktPmRfY291bnQpIHsKIAkJCWRlbnRyeV9scnVfbW92ZV90YWlsKGRlbnRyeSk7CiAJCQlmb3VuZCsrOwogCQl9IGVsc2UgewpAQCAtODUzLDI4ICsxMTU3LDYzIEBACiAJCSAqIGVuc3VyZXMgZm9yd2FyZCBwcm9ncmVzcykuIFdlJ2xsIGJlIGNvbWluZyBiYWNrIHRvIGZpbmQKIAkJICogdGhlIHJlc3QuCiAJCSAqLwotCQlpZiAoZm91bmQgJiYgbmVlZF9yZXNjaGVkKCkpCisJCWlmIChmb3VuZCAmJiBuZWVkX3Jlc2NoZWQoKSkgeworCQkJc3Bpbl91bmxvY2soJmRlbnRyeS0+ZF9sb2NrKTsKIAkJCWdvdG8gb3V0OworCQl9CiAKIAkJLyoKIAkJICogRGVzY2VuZCBhIGxldmVsIGlmIHRoZSBkX3N1YmRpcnMgbGlzdCBpcyBub24tZW1wdHkuCiAJCSAqLwogCQlpZiAoIWxpc3RfZW1wdHkoJmRlbnRyeS0+ZF9zdWJkaXJzKSkgeworCQkJc3Bpbl91bmxvY2soJnRoaXNfcGFyZW50LT5kX2xvY2spOworCQkJc3Bpbl9yZWxlYXNlKCZkZW50cnktPmRfbG9jay5kZXBfbWFwLCAxLCBfUkVUX0lQXyk7CiAJCQl0aGlzX3BhcmVudCA9IGRlbnRyeTsKKwkJCXNwaW5fYWNxdWlyZSgmdGhpc19wYXJlbnQtPmRfbG9jay5kZXBfbWFwLCAwLCAxLCBfUkVUX0lQXyk7CiAJCQlnb3RvIHJlcGVhdDsKIAkJfQorCisJCXNwaW5fdW5sb2NrKCZkZW50cnktPmRfbG9jayk7CiAJfQogCS8qCiAJICogQWxsIGRvbmUgYXQgdGhpcyBsZXZlbCAuLi4gYXNjZW5kIGFuZCByZXN1bWUgdGhlIHNlYXJjaC4KIAkgKi8KIAlpZiAodGhpc19wYXJlbnQgIT0gcGFyZW50KSB7Ci0JCW5leHQgPSB0aGlzX3BhcmVudC0+ZF91LmRfY2hpbGQubmV4dDsKLQkJdGhpc19wYXJlbnQgPSB0aGlzX3BhcmVudC0+ZF9wYXJlbnQ7CisJCXN0cnVjdCBkZW50cnkgKnRtcDsKKwkJc3RydWN0IGRlbnRyeSAqY2hpbGQ7CisKKwkJdG1wID0gdGhpc19wYXJlbnQtPmRfcGFyZW50OworCQlyY3VfcmVhZF9sb2NrKCk7CisJCXNwaW5fdW5sb2NrKCZ0aGlzX3BhcmVudC0+ZF9sb2NrKTsKKwkJY2hpbGQgPSB0aGlzX3BhcmVudDsKKwkJdGhpc19wYXJlbnQgPSB0bXA7CisJCXNwaW5fbG9jaygmdGhpc19wYXJlbnQtPmRfbG9jayk7CisJCS8qIG1pZ2h0IGdvIGJhY2sgdXAgdGhlIHdyb25nIHBhcmVudCBpZiB3ZSBoYXZlIGhhZCBhIHJlbmFtZQorCQkgKiBvciBkZWxldGlvbiAqLworCQlpZiAodGhpc19wYXJlbnQgIT0gY2hpbGQtPmRfcGFyZW50IHx8CisJCQkoIWxvY2tlZCAmJiByZWFkX3NlcXJldHJ5KCZyZW5hbWVfbG9jaywgc2VxKSkpIHsKKwkJCXNwaW5fdW5sb2NrKCZ0aGlzX3BhcmVudC0+ZF9sb2NrKTsKKwkJCXJjdV9yZWFkX3VubG9jaygpOworCQkJZ290byByZW5hbWVfcmV0cnk7CisJCX0KKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCW5leHQgPSBjaGlsZC0+ZF91LmRfY2hpbGQubmV4dDsKIAkJZ290byByZXN1bWU7CiAJfQogb3V0OgotCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7CisJc3Bpbl91bmxvY2soJnRoaXNfcGFyZW50LT5kX2xvY2spOworCWlmICghbG9ja2VkICYmIHJlYWRfc2VxcmV0cnkoJnJlbmFtZV9sb2NrLCBzZXEpKQorCQlnb3RvIHJlbmFtZV9yZXRyeTsKKwlpZiAobG9ja2VkKQorCQl3cml0ZV9zZXF1bmxvY2soJnJlbmFtZV9sb2NrKTsKIAlyZXR1cm4gZm91bmQ7CisKK3JlbmFtZV9yZXRyeToKKwlpZiAoZm91bmQpCisJCXJldHVybiBmb3VuZDsKKwlsb2NrZWQgPSAxOworCXdyaXRlX3NlcWxvY2soJnJlbmFtZV9sb2NrKTsKKwlnb3RvIGFnYWluOwogfQogCiAvKioKQEAgLTkwOCwxNiArMTI0NywxMyBAQAogICovCiBzdGF0aWMgaW50IHNocmlua19kY2FjaGVfbWVtb3J5KHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLCBpbnQgbnIsIGdmcF90IGdmcF9tYXNrKQogewotCWludCBucl91bnVzZWQ7Ci0KIAlpZiAobnIpIHsKIAkJaWYgKCEoZ2ZwX21hc2sgJiBfX0dGUF9GUykpCiAJCQlyZXR1cm4gLTE7CiAJCXBydW5lX2RjYWNoZShucik7CiAJfQogCi0JbnJfdW51c2VkID0gcGVyY3B1X2NvdW50ZXJfc3VtX3Bvc2l0aXZlKCZucl9kZW50cnlfdW51c2VkKTsKLQlyZXR1cm4gKG5yX3VudXNlZCAvIDEwMCkgKiBzeXNjdGxfdmZzX2NhY2hlX3ByZXNzdXJlOworCXJldHVybiAoZGVudHJ5X3N0YXQubnJfdW51c2VkIC8gMTAwKSAqIHN5c2N0bF92ZnNfY2FjaGVfcHJlc3N1cmU7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc2hyaW5rZXIgZGNhY2hlX3Nocmlua2VyID0gewpAQCAtOTYwLDM4ICsxMjk2LDUyIEBACiAJbWVtY3B5KGRuYW1lLCBuYW1lLT5uYW1lLCBuYW1lLT5sZW4pOwogCWRuYW1lW25hbWUtPmxlbl0gPSAwOwogCi0JYXRvbWljX3NldCgmZGVudHJ5LT5kX2NvdW50LCAxKTsKKwlkZW50cnktPmRfY291bnQgPSAxOwogCWRlbnRyeS0+ZF9mbGFncyA9IERDQUNIRV9VTkhBU0hFRDsKIAlzcGluX2xvY2tfaW5pdCgmZGVudHJ5LT5kX2xvY2spOworCXNlcWNvdW50X2luaXQoJmRlbnRyeS0+ZF9zZXEpOwogCWRlbnRyeS0+ZF9pbm9kZSA9IE5VTEw7CiAJZGVudHJ5LT5kX3BhcmVudCA9IE5VTEw7CiAJZGVudHJ5LT5kX3NiID0gTlVMTDsKIAlkZW50cnktPmRfb3AgPSBOVUxMOwogCWRlbnRyeS0+ZF9mc2RhdGEgPSBOVUxMOwotCWRlbnRyeS0+ZF9tb3VudGVkID0gMDsKLQlJTklUX0hMSVNUX05PREUoJmRlbnRyeS0+ZF9oYXNoKTsKKwlJTklUX0hMSVNUX0JMX05PREUoJmRlbnRyeS0+ZF9oYXNoKTsKIAlJTklUX0xJU1RfSEVBRCgmZGVudHJ5LT5kX2xydSk7CiAJSU5JVF9MSVNUX0hFQUQoJmRlbnRyeS0+ZF9zdWJkaXJzKTsKIAlJTklUX0xJU1RfSEVBRCgmZGVudHJ5LT5kX2FsaWFzKTsKKwlJTklUX0xJU1RfSEVBRCgmZGVudHJ5LT5kX3UuZF9jaGlsZCk7CiAKIAlpZiAocGFyZW50KSB7Ci0JCWRlbnRyeS0+ZF9wYXJlbnQgPSBkZ2V0KHBhcmVudCk7CisJCXNwaW5fbG9jaygmcGFyZW50LT5kX2xvY2spOworCQkvKgorCQkgKiBkb24ndCBuZWVkIGNoaWxkIGxvY2sgYmVjYXVzZSBpdCBpcyBub3Qgc3ViamVjdAorCQkgKiB0byBjb25jdXJyZW5jeSBoZXJlCisJCSAqLworCQlfX2RnZXRfZGxvY2socGFyZW50KTsKKwkJZGVudHJ5LT5kX3BhcmVudCA9IHBhcmVudDsKIAkJZGVudHJ5LT5kX3NiID0gcGFyZW50LT5kX3NiOwotCX0gZWxzZSB7Ci0JCUlOSVRfTElTVF9IRUFEKCZkZW50cnktPmRfdS5kX2NoaWxkKTsKKwkJbGlzdF9hZGQoJmRlbnRyeS0+ZF91LmRfY2hpbGQsICZwYXJlbnQtPmRfc3ViZGlycyk7CisJCXNwaW5fdW5sb2NrKCZwYXJlbnQtPmRfbG9jayk7CiAJfQogCi0Jc3Bpbl9sb2NrKCZkY2FjaGVfbG9jayk7Ci0JaWYgKHBhcmVudCkKLQkJbGlzdF9hZGQoJmRlbnRyeS0+ZF91LmRfY2hpbGQsICZwYXJlbnQtPmRfc3ViZGlycyk7Ci0Jc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKLQotCXBlcmNwdV9jb3VudGVyX2luYygmbnJfZGVudHJ5KTsKKwl0aGlzX2NwdV9pbmMobnJfZGVudHJ5KTsKIAogCXJldHVybiBkZW50cnk7CiB9CiBFWFBPUlRfU1lNQk9MKGRfYWxsb2MpOwogCitzdHJ1Y3QgZGVudHJ5ICpkX2FsbG9jX3BzZXVkbyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSkKK3sKKwlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBkX2FsbG9jKE5VTEwsIG5hbWUpOworCWlmIChkZW50cnkpIHsKKwkJZGVudHJ5LT5kX3NiID0gc2I7CisJCWRlbnRyeS0+ZF9wYXJlbnQgPSBkZW50cnk7CisJCWRlbnRyeS0+ZF9mbGFncyB8PSBEQ0FDSEVfRElTQ09OTkVDVEVEOworCX0KKwlyZXR1cm4gZGVudHJ5OworfQorRVhQT1JUX1NZTUJPTChkX2FsbG9jX3BzZXVkbyk7CisKIHN0cnVjdCBkZW50cnkgKmRfYWxsb2NfbmFtZShzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsIGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJc3RydWN0IHFzdHIgcTsKQEAgLTEwMDMsMTIgKzEzNTMsMzYgQEAKIH0KIEVYUE9SVF9TWU1CT0woZF9hbGxvY19uYW1lKTsKIAotLyogdGhlIGNhbGxlciBtdXN0IGhvbGQgZGNhY2hlX2xvY2sgKi8KK3ZvaWQgZF9zZXRfZF9vcChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyAqb3ApCit7CisJQlVHX09OKGRlbnRyeS0+ZF9vcCk7CisJQlVHX09OKGRlbnRyeS0+ZF9mbGFncyAmIChEQ0FDSEVfT1BfSEFTSAl8CisJCQkJRENBQ0hFX09QX0NPTVBBUkUJfAorCQkJCURDQUNIRV9PUF9SRVZBTElEQVRFCXwKKwkJCQlEQ0FDSEVfT1BfREVMRVRFICkpOworCWRlbnRyeS0+ZF9vcCA9IG9wOworCWlmICghb3ApCisJCXJldHVybjsKKwlpZiAob3AtPmRfaGFzaCkKKwkJZGVudHJ5LT5kX2ZsYWdzIHw9IERDQUNIRV9PUF9IQVNIOworCWlmIChvcC0+ZF9jb21wYXJlKQorCQlkZW50cnktPmRfZmxhZ3MgfD0gRENBQ0hFX09QX0NPTVBBUkU7CisJaWYgKG9wLT5kX3JldmFsaWRhdGUpCisJCWRlbnRyeS0+ZF9mbGFncyB8PSBEQ0FDSEVfT1BfUkVWQUxJREFURTsKKwlpZiAob3AtPmRfZGVsZXRlKQorCQlkZW50cnktPmRfZmxhZ3MgfD0gRENBQ0hFX09QX0RFTEVURTsKKworfQorRVhQT1JUX1NZTUJPTChkX3NldF9kX29wKTsKKwogc3RhdGljIHZvaWQgX19kX2luc3RhbnRpYXRlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSkKIHsKKwlzcGluX2xvY2soJmRlbnRyeS0+ZF9sb2NrKTsKIAlpZiAoaW5vZGUpCiAJCWxpc3RfYWRkKCZkZW50cnktPmRfYWxpYXMsICZpbm9kZS0+aV9kZW50cnkpOwogCWRlbnRyeS0+ZF9pbm9kZSA9IGlub2RlOworCWRlbnRyeV9yY3V3YWxrX2JhcnJpZXIoZGVudHJ5KTsKKwlzcGluX3VubG9jaygmZGVudHJ5LT5kX2xvY2spOwogCWZzbm90aWZ5X2RfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7CiB9CiAKQEAgLTEwMzAsOSArMTQwNCwxMSBAQAogdm9pZCBkX2luc3RhbnRpYXRlKHN0cnVjdCBkZW50cnkgKmVudHJ5LCBzdHJ1Y3QgaW5vZGUgKiBpbm9kZSkKIHsKIAlCVUdfT04oIWxpc3RfZW1wdHkoJmVudHJ5LT5kX2FsaWFzKSk7Ci0Jc3Bpbl9sb2NrKCZkY2FjaGVfbG9jayk7CisJaWYgKGlub2RlKQorCQlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOwogCV9fZF9pbnN0YW50aWF0ZShlbnRyeSwgaW5vZGUpOwotCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7CisJaWYgKGlub2RlKQorCQlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7CiAJc2VjdXJpdHlfZF9pbnN0YW50aWF0ZShlbnRyeSwgaW5vZGUpOwogfQogRVhQT1JUX1NZTUJPTChkX2luc3RhbnRpYXRlKTsKQEAgLTEwNjksMTUgKzE0NDUsMTggQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGFsaWFzLCAmaW5vZGUtPmlfZGVudHJ5LCBkX2FsaWFzKSB7CiAJCXN0cnVjdCBxc3RyICpxc3RyID0gJmFsaWFzLT5kX25hbWU7CiAKKwkJLyoKKwkJICogRG9uJ3QgbmVlZCBhbGlhcy0+ZF9sb2NrIGhlcmUsIGJlY2F1c2UgYWxpYXNlcyB3aXRoCisJCSAqIGRfcGFyZW50ID09IGVudHJ5LT5kX3BhcmVudCBhcmUgbm90IHN1YmplY3QgdG8gbmFtZSBvcgorCQkgKiBwYXJlbnQgY2hhbmdlcywgYmVjYXVzZSB0aGUgcGFyZW50IGlub2RlIGlfbXV0ZXggaXMgaGVsZC4KKwkJICovCiAJCWlmIChxc3RyLT5oYXNoICE9IGhhc2gpCiAJCQljb250aW51ZTsKIAkJaWYgKGFsaWFzLT5kX3BhcmVudCAhPSBlbnRyeS0+ZF9wYXJlbnQpCiAJCQljb250aW51ZTsKLQkJaWYgKHFzdHItPmxlbiAhPSBsZW4pCisJCWlmIChkZW50cnlfY21wKHFzdHItPm5hbWUsIHFzdHItPmxlbiwgbmFtZSwgbGVuKSkKIAkJCWNvbnRpbnVlOwotCQlpZiAobWVtY21wKHFzdHItPm5hbWUsIG5hbWUsIGxlbikpCi0JCQljb250aW51ZTsKLQkJZGdldF9sb2NrZWQoYWxpYXMpOworCQlfX2RnZXQoYWxpYXMpOwogCQlyZXR1cm4gYWxpYXM7CiAJfQogCkBAIC0xMDkxLDkgKzE0NzAsMTEgQEAKIAogCUJVR19PTighbGlzdF9lbXB0eSgmZW50cnktPmRfYWxpYXMpKTsKIAotCXNwaW5fbG9jaygmZGNhY2hlX2xvY2spOworCWlmIChpbm9kZSkKKwkJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKIAlyZXN1bHQgPSBfX2RfaW5zdGFudGlhdGVfdW5pcXVlKGVudHJ5LCBpbm9kZSk7Ci0Jc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKKwlpZiAoaW5vZGUpCisJCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKIAogCWlmICghcmVzdWx0KSB7CiAJCXNlY3VyaXR5X2RfaW5zdGFudGlhdGUoZW50cnksIGlub2RlKTsKQEAgLTExMzQsMTQgKzE1MTUsNiBAQAogfQogRVhQT1JUX1NZTUJPTChkX2FsbG9jX3Jvb3QpOwogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBobGlzdF9oZWFkICpkX2hhc2goc3RydWN0IGRlbnRyeSAqcGFyZW50LAotCQkJCQl1bnNpZ25lZCBsb25nIGhhc2gpCi17Ci0JaGFzaCArPSAoKHVuc2lnbmVkIGxvbmcpIHBhcmVudCBeIEdPTERFTl9SQVRJT19QUklNRSkgLyBMMV9DQUNIRV9CWVRFUzsKLQloYXNoID0gaGFzaCBeICgoaGFzaCBeIEdPTERFTl9SQVRJT19QUklNRSkgPj4gRF9IQVNIQklUUyk7Ci0JcmV0dXJuIGRlbnRyeV9oYXNodGFibGUgKyAoaGFzaCAmIERfSEFTSE1BU0spOwotfQotCiAvKioKICAqIGRfb2J0YWluX2FsaWFzIC0gZmluZCBvciBhbGxvY2F0ZSBhIGRlbnRyeSBmb3IgYSBnaXZlbiBpbm9kZQogICogQGlub2RlOiBpbm9kZSB0byBhbGxvY2F0ZSB0aGUgZGVudHJ5IGZvcgpAQCAtMTE4MiwxMCArMTU1NSwxMSBAQAogCX0KIAl0bXAtPmRfcGFyZW50ID0gdG1wOyAvKiBtYWtlIHN1cmUgZHB1dCBkb2Vzbid0IGNyb2FrICovCiAKLQlzcGluX2xvY2soJmRjYWNoZV9sb2NrKTsKKworCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7CiAJcmVzID0gX19kX2ZpbmRfYWxpYXMoaW5vZGUsIDApOwogCWlmIChyZXMpIHsKLQkJc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKKwkJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwogCQlkcHV0KHRtcCk7CiAJCWdvdG8gb3V0X2lwdXQ7CiAJfQpAQCAtMTE5NSwxMiArMTU2OSwxNCBAQAogCXRtcC0+ZF9zYiA9IGlub2RlLT5pX3NiOwogCXRtcC0+ZF9pbm9kZSA9IGlub2RlOwogCXRtcC0+ZF9mbGFncyB8PSBEQ0FDSEVfRElTQ09OTkVDVEVEOwotCXRtcC0+ZF9mbGFncyAmPSB+RENBQ0hFX1VOSEFTSEVEOwogCWxpc3RfYWRkKCZ0bXAtPmRfYWxpYXMsICZpbm9kZS0+aV9kZW50cnkpOwotCWhsaXN0X2FkZF9oZWFkKCZ0bXAtPmRfaGFzaCwgJmlub2RlLT5pX3NiLT5zX2Fub24pOworCWJpdF9zcGluX2xvY2soMCwgKHVuc2lnbmVkIGxvbmcgKikmdG1wLT5kX3NiLT5zX2Fub24uZmlyc3QpOworCXRtcC0+ZF9mbGFncyAmPSB+RENBQ0hFX1VOSEFTSEVEOworCWhsaXN0X2JsX2FkZF9oZWFkKCZ0bXAtPmRfaGFzaCwgJnRtcC0+ZF9zYi0+c19hbm9uKTsKKwlfX2JpdF9zcGluX3VubG9jaygwLCAodW5zaWduZWQgbG9uZyAqKSZ0bXAtPmRfc2ItPnNfYW5vbi5maXJzdCk7CiAJc3Bpbl91bmxvY2soJnRtcC0+ZF9sb2NrKTsKKwlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7CiAKLQlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOwogCXJldHVybiB0bXA7CiAKICBvdXRfaXB1dDoKQEAgLTEyMzAsMTggKzE2MDYsMTggQEAKIAlzdHJ1Y3QgZGVudHJ5ICpuZXcgPSBOVUxMOwogCiAJaWYgKGlub2RlICYmIFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpIHsKLQkJc3Bpbl9sb2NrKCZkY2FjaGVfbG9jayk7CisJCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7CiAJCW5ldyA9IF9fZF9maW5kX2FsaWFzKGlub2RlLCAxKTsKIAkJaWYgKG5ldykgewogCQkJQlVHX09OKCEobmV3LT5kX2ZsYWdzICYgRENBQ0hFX0RJU0NPTk5FQ1RFRCkpOwotCQkJc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKKwkJCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKIAkJCXNlY3VyaXR5X2RfaW5zdGFudGlhdGUobmV3LCBpbm9kZSk7CiAJCQlkX21vdmUobmV3LCBkZW50cnkpOwogCQkJaXB1dChpbm9kZSk7CiAJCX0gZWxzZSB7Ci0JCQkvKiBhbHJlYWR5IHRha2luZyBkY2FjaGVfbG9jaywgc28gZF9hZGQoKSBieSBoYW5kICovCisJCQkvKiBhbHJlYWR5IHRha2luZyBpbm9kZS0+aV9sb2NrLCBzbyBkX2FkZCgpIGJ5IGhhbmQgKi8KIAkJCV9fZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKLQkJCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7CisJCQlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7CiAJCQlzZWN1cml0eV9kX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOwogCQkJZF9yZWhhc2goZGVudHJ5KTsKIAkJfQpAQCAtMTMxNCwxMCArMTY5MCwxMCBAQAogCSAqIE5lZ2F0aXZlIGRlbnRyeTogaW5zdGFudGlhdGUgaXQgdW5sZXNzIHRoZSBpbm9kZSBpcyBhIGRpcmVjdG9yeSBhbmQKIAkgKiBhbHJlYWR5IGhhcyBhIGRlbnRyeS4KIAkgKi8KLQlzcGluX2xvY2soJmRjYWNoZV9sb2NrKTsKKwlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOwogCWlmICghU19JU0RJUihpbm9kZS0+aV9tb2RlKSB8fCBsaXN0X2VtcHR5KCZpbm9kZS0+aV9kZW50cnkpKSB7CiAJCV9fZF9pbnN0YW50aWF0ZShmb3VuZCwgaW5vZGUpOwotCQlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOworCQlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7CiAJCXNlY3VyaXR5X2RfaW5zdGFudGlhdGUoZm91bmQsIGlub2RlKTsKIAkJcmV0dXJuIGZvdW5kOwogCX0KQEAgLTEzMjcsOCArMTcwMyw4IEBACiAJICogcmVmZXJlbmNlIHRvIGl0LCBtb3ZlIGl0IGluIHBsYWNlIGFuZCB1c2UgaXQuCiAJICovCiAJbmV3ID0gbGlzdF9lbnRyeShpbm9kZS0+aV9kZW50cnkubmV4dCwgc3RydWN0IGRlbnRyeSwgZF9hbGlhcyk7Ci0JZGdldF9sb2NrZWQobmV3KTsKLQlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOworCV9fZGdldChuZXcpOworCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKIAlzZWN1cml0eV9kX2luc3RhbnRpYXRlKGZvdW5kLCBpbm9kZSk7CiAJZF9tb3ZlKG5ldywgZm91bmQpOwogCWlwdXQoaW5vZGUpOwpAQCAtMTM0Miw2ICsxNzE4LDExMiBAQAogRVhQT1JUX1NZTUJPTChkX2FkZF9jaSk7CiAKIC8qKgorICogX19kX2xvb2t1cF9yY3UgLSBzZWFyY2ggZm9yIGEgZGVudHJ5IChyYWN5LCBzdG9yZS1mcmVlKQorICogQHBhcmVudDogcGFyZW50IGRlbnRyeQorICogQG5hbWU6IHFzdHIgb2YgbmFtZSB3ZSB3aXNoIHRvIGZpbmQKKyAqIEBzZXE6IHJldHVybnMgZF9zZXEgdmFsdWUgYXQgdGhlIHBvaW50IHdoZXJlIHRoZSBkZW50cnkgd2FzIGZvdW5kCisgKiBAaW5vZGU6IHJldHVybnMgZGVudHJ5LT5kX2lub2RlIHdoZW4gdGhlIGlub2RlIHdhcyBmb3VuZCB2YWxpZC4KKyAqIFJldHVybnM6IGRlbnRyeSwgb3IgTlVMTAorICoKKyAqIF9fZF9sb29rdXBfcmN1IGlzIHRoZSBkY2FjaGUgbG9va3VwIGZ1bmN0aW9uIGZvciByY3Utd2FsayBuYW1lCisgKiByZXNvbHV0aW9uIChzdG9yZS1mcmVlIHBhdGggd2Fsa2luZykgZGVzaWduIGRlc2NyaWJlZCBpbgorICogRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wYXRoLWxvb2t1cC50eHQuCisgKgorICogVGhpcyBpcyBub3QgdG8gYmUgdXNlZCBvdXRzaWRlIGNvcmUgdmZzLgorICoKKyAqIF9fZF9sb29rdXBfcmN1IG11c3Qgb25seSBiZSB1c2VkIGluIHJjdS13YWxrIG1vZGUsIGllLiB3aXRoIHZmc21vdW50IGxvY2sKKyAqIGhlbGQsIGFuZCByY3VfcmVhZF9sb2NrIGhlbGQuIFRoZSByZXR1cm5lZCBkZW50cnkgbXVzdCBub3QgYmUgc3RvcmVkIGludG8KKyAqIHdpdGhvdXQgdGFraW5nIGRfbG9jayBhbmQgY2hlY2tpbmcgZF9zZXEgc2VxdWVuY2UgY291bnQgYWdhaW5zdCBAc2VxCisgKiByZXR1cm5lZCBoZXJlLgorICoKKyAqIEEgcmVmY291bnQgbWF5IGJlIHRha2VuIG9uIHRoZSBmb3VuZCBkZW50cnkgd2l0aCB0aGUgX19kX3JjdV90b19yZWZjb3VudAorICogZnVuY3Rpb24uCisgKgorICogQWx0ZXJuYXRpdmVseSwgX19kX2xvb2t1cF9yY3UgbWF5IGJlIGNhbGxlZCBhZ2FpbiB0byBsb29rIHVwIHRoZSBjaGlsZCBvZgorICogdGhlIHJldHVybmVkIGRlbnRyeSwgc28gbG9uZyBhcyBpdHMgcGFyZW50J3Mgc2VxbG9jayBpcyBjaGVja2VkIGFmdGVyIHRoZQorICogY2hpbGQgaXMgbG9va2VkIHVwLiBUaHVzLCBhbiBpbnRlcmxvY2tpbmcgc3RlcHBpbmcgb2Ygc2VxdWVuY2UgbG9jayBjaGVja3MKKyAqIGlzIGZvcm1lZCwgZ2l2aW5nIGludGVncml0eSBkb3duIHRoZSBwYXRoIHdhbGsuCisgKi8KK3N0cnVjdCBkZW50cnkgKl9fZF9sb29rdXBfcmN1KHN0cnVjdCBkZW50cnkgKnBhcmVudCwgc3RydWN0IHFzdHIgKm5hbWUsCisJCQkJdW5zaWduZWQgKnNlcSwgc3RydWN0IGlub2RlICoqaW5vZGUpCit7CisJdW5zaWduZWQgaW50IGxlbiA9IG5hbWUtPmxlbjsKKwl1bnNpZ25lZCBpbnQgaGFzaCA9IG5hbWUtPmhhc2g7CisJY29uc3QgdW5zaWduZWQgY2hhciAqc3RyID0gbmFtZS0+bmFtZTsKKwlzdHJ1Y3QgZGNhY2hlX2hhc2hfYnVja2V0ICpiID0gZF9oYXNoKHBhcmVudCwgaGFzaCk7CisJc3RydWN0IGhsaXN0X2JsX25vZGUgKm5vZGU7CisJc3RydWN0IGRlbnRyeSAqZGVudHJ5OworCisJLyoKKwkgKiBOb3RlOiBUaGVyZSBpcyBzaWduaWZpY2FudCBkdXBsaWNhdGlvbiB3aXRoIF9fZF9sb29rdXBfcmN1IHdoaWNoIGlzCisJICogcmVxdWlyZWQgdG8gcHJldmVudCBzaW5nbGUgdGhyZWFkZWQgcGVyZm9ybWFuY2UgcmVncmVzc2lvbnMKKwkgKiBlc3BlY2lhbGx5IG9uIGFyY2hpdGVjdHVyZXMgd2hlcmUgc21wX3JtYiAoaW4gc2VxY291bnRzKSBhcmUgY29zdGx5LgorCSAqIEtlZXAgdGhlIHR3byBmdW5jdGlvbnMgaW4gc3luYy4KKwkgKi8KKworCS8qCisJICogVGhlIGhhc2ggbGlzdCBpcyBwcm90ZWN0ZWQgdXNpbmcgUkNVLgorCSAqCisJICogQ2FyZWZ1bGx5IHVzZSBkX3NlcSB3aGVuIGNvbXBhcmluZyBhIGNhbmRpZGF0ZSBkZW50cnksIHRvIGF2b2lkCisJICogcmFjZXMgd2l0aCBkX21vdmUoKS4KKwkgKgorCSAqIEl0IGlzIHBvc3NpYmxlIHRoYXQgY29uY3VycmVudCByZW5hbWVzIGNhbiBtZXNzIHVwIG91ciBsaXN0CisJICogd2FsayBoZXJlIGFuZCByZXN1bHQgaW4gbWlzc2luZyBvdXIgZGVudHJ5LCByZXN1bHRpbmcgaW4gdGhlCisJICogZmFsc2UtbmVnYXRpdmUgcmVzdWx0LiBkX2xvb2t1cCgpIHByb3RlY3RzIGFnYWluc3QgY29uY3VycmVudAorCSAqIHJlbmFtZXMgdXNpbmcgcmVuYW1lX2xvY2sgc2VxbG9jay4KKwkgKgorCSAqIFNlZSBEb2N1bWVudGF0aW9uL3Zmcy9kY2FjaGUtbG9ja2luZy50eHQgZm9yIG1vcmUgZGV0YWlscy4KKwkgKi8KKwlobGlzdF9ibF9mb3JfZWFjaF9lbnRyeV9yY3UoZGVudHJ5LCBub2RlLCAmYi0+aGVhZCwgZF9oYXNoKSB7CisJCXN0cnVjdCBpbm9kZSAqaTsKKwkJY29uc3QgY2hhciAqdG5hbWU7CisJCWludCB0bGVuOworCisJCWlmIChkZW50cnktPmRfbmFtZS5oYXNoICE9IGhhc2gpCisJCQljb250aW51ZTsKKworc2VxcmV0cnk6CisJCSpzZXEgPSByZWFkX3NlcWNvdW50X2JlZ2luKCZkZW50cnktPmRfc2VxKTsKKwkJaWYgKGRlbnRyeS0+ZF9wYXJlbnQgIT0gcGFyZW50KQorCQkJY29udGludWU7CisJCWlmIChkX3VuaGFzaGVkKGRlbnRyeSkpCisJCQljb250aW51ZTsKKwkJdGxlbiA9IGRlbnRyeS0+ZF9uYW1lLmxlbjsKKwkJdG5hbWUgPSBkZW50cnktPmRfbmFtZS5uYW1lOworCQlpID0gZGVudHJ5LT5kX2lub2RlOworCQlwcmVmZXRjaCh0bmFtZSk7CisJCWlmIChpKQorCQkJcHJlZmV0Y2goaSk7CisJCS8qCisJCSAqIFRoaXMgc2VxY291bnQgY2hlY2sgaXMgcmVxdWlyZWQgdG8gZW5zdXJlIG5hbWUgYW5kCisJCSAqIGxlbiBhcmUgbG9hZGVkIGF0b21pY2FsbHksIHNvIGFzIG5vdCB0byB3YWxrIG9mZiB0aGUKKwkJICogZWRnZSBvZiBtZW1vcnkgd2hlbiB3YWxraW5nLiBJZiB3ZSBjb3VsZCBsb2FkIHRoaXMKKwkJICogYXRvbWljYWxseSBzb21lIG90aGVyIHdheSwgd2UgY291bGQgZHJvcCB0aGlzIGNoZWNrLgorCQkgKi8KKwkJaWYgKHJlYWRfc2VxY291bnRfcmV0cnkoJmRlbnRyeS0+ZF9zZXEsICpzZXEpKQorCQkJZ290byBzZXFyZXRyeTsKKwkJaWYgKHBhcmVudC0+ZF9mbGFncyAmIERDQUNIRV9PUF9DT01QQVJFKSB7CisJCQlpZiAocGFyZW50LT5kX29wLT5kX2NvbXBhcmUocGFyZW50LCAqaW5vZGUsCisJCQkJCQlkZW50cnksIGksCisJCQkJCQl0bGVuLCB0bmFtZSwgbmFtZSkpCisJCQkJY29udGludWU7CisJCX0gZWxzZSB7CisJCQlpZiAoZGVudHJ5X2NtcCh0bmFtZSwgdGxlbiwgc3RyLCBsZW4pKQorCQkJCWNvbnRpbnVlOworCQl9CisJCS8qCisJCSAqIE5vIGV4dHJhIHNlcWNvdW50IGNoZWNrIGlzIHJlcXVpcmVkIGFmdGVyIHRoZSBuYW1lCisJCSAqIGNvbXBhcmUuIFRoZSBjYWxsZXIgbXVzdCBwZXJmb3JtIGEgc2VxY291bnQgY2hlY2sgaW4KKwkJICogb3JkZXIgdG8gZG8gYW55dGhpbmcgdXNlZnVsIHdpdGggdGhlIHJldHVybmVkIGRlbnRyeQorCQkgKiBhbnl3YXkuCisJCSAqLworCQkqaW5vZGUgPSBpOworCQlyZXR1cm4gZGVudHJ5OworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworLyoqCiAgKiBkX2xvb2t1cCAtIHNlYXJjaCBmb3IgYSBkZW50cnkKICAqIEBwYXJlbnQ6IHBhcmVudCBkZW50cnkKICAqIEBuYW1lOiBxc3RyIG9mIG5hbWUgd2Ugd2lzaCB0byBmaW5kCkBAIC0xMzUyLDEwICsxODM0LDEwIEBACiAgKiBkZW50cnkgaXMgcmV0dXJuZWQuIFRoZSBjYWxsZXIgbXVzdCB1c2UgZHB1dCB0byBmcmVlIHRoZSBlbnRyeSB3aGVuIGl0IGhhcwogICogZmluaXNoZWQgdXNpbmcgaXQuICVOVUxMIGlzIHJldHVybmVkIGlmIHRoZSBkZW50cnkgZG9lcyBub3QgZXhpc3QuCiAgKi8KLXN0cnVjdCBkZW50cnkgKiBkX2xvb2t1cChzdHJ1Y3QgZGVudHJ5ICogcGFyZW50LCBzdHJ1Y3QgcXN0ciAqIG5hbWUpCitzdHJ1Y3QgZGVudHJ5ICpkX2xvb2t1cChzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsIHN0cnVjdCBxc3RyICpuYW1lKQogewotCXN0cnVjdCBkZW50cnkgKiBkZW50cnkgPSBOVUxMOwotCXVuc2lnbmVkIGxvbmcgc2VxOworCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKKwl1bnNpZ25lZCBzZXE7CiAKICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgIHNlcSA9IHJlYWRfc2VxYmVnaW4oJnJlbmFtZV9sb2NrKTsKQEAgLTEzNjcsNyArMTg0OSw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKGRfbG9va3VwKTsKIAotLyoKKy8qKgogICogX19kX2xvb2t1cCAtIHNlYXJjaCBmb3IgYSBkZW50cnkgKHJhY3kpCiAgKiBAcGFyZW50OiBwYXJlbnQgZGVudHJ5CiAgKiBAbmFtZTogcXN0ciBvZiBuYW1lIHdlIHdpc2ggdG8gZmluZApAQCAtMTM4MiwxNyArMTg2NCwyNCBAQAogICoKICAqIF9fZF9sb29rdXAgY2FsbGVycyBtdXN0IGJlIGNvbW1lbnRlZC4KICAqLwotc3RydWN0IGRlbnRyeSAqIF9fZF9sb29rdXAoc3RydWN0IGRlbnRyeSAqIHBhcmVudCwgc3RydWN0IHFzdHIgKiBuYW1lKQorc3RydWN0IGRlbnRyeSAqX19kX2xvb2t1cChzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsIHN0cnVjdCBxc3RyICpuYW1lKQogewogCXVuc2lnbmVkIGludCBsZW4gPSBuYW1lLT5sZW47CiAJdW5zaWduZWQgaW50IGhhc2ggPSBuYW1lLT5oYXNoOwogCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnN0ciA9IG5hbWUtPm5hbWU7Ci0Jc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQgPSBkX2hhc2gocGFyZW50LGhhc2gpOworCXN0cnVjdCBkY2FjaGVfaGFzaF9idWNrZXQgKmIgPSBkX2hhc2gocGFyZW50LCBoYXNoKTsKKwlzdHJ1Y3QgaGxpc3RfYmxfbm9kZSAqbm9kZTsKIAlzdHJ1Y3QgZGVudHJ5ICpmb3VuZCA9IE5VTEw7Ci0Jc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CiAJc3RydWN0IGRlbnRyeSAqZGVudHJ5OwogCiAJLyoKKwkgKiBOb3RlOiBUaGVyZSBpcyBzaWduaWZpY2FudCBkdXBsaWNhdGlvbiB3aXRoIF9fZF9sb29rdXBfcmN1IHdoaWNoIGlzCisJICogcmVxdWlyZWQgdG8gcHJldmVudCBzaW5nbGUgdGhyZWFkZWQgcGVyZm9ybWFuY2UgcmVncmVzc2lvbnMKKwkgKiBlc3BlY2lhbGx5IG9uIGFyY2hpdGVjdHVyZXMgd2hlcmUgc21wX3JtYiAoaW4gc2VxY291bnRzKSBhcmUgY29zdGx5LgorCSAqIEtlZXAgdGhlIHR3byBmdW5jdGlvbnMgaW4gc3luYy4KKwkgKi8KKworCS8qCiAJICogVGhlIGhhc2ggbGlzdCBpcyBwcm90ZWN0ZWQgdXNpbmcgUkNVLgogCSAqCiAJICogVGFrZSBkX2xvY2sgd2hlbiBjb21wYXJpbmcgYSBjYW5kaWRhdGUgZGVudHJ5LCB0byBhdm9pZCByYWNlcwpAQCAtMTQwNywyNSArMTg5NiwxNiBAQAogCSAqLwogCXJjdV9yZWFkX2xvY2soKTsKIAkKLQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZGVudHJ5LCBub2RlLCBoZWFkLCBkX2hhc2gpIHsKLQkJc3RydWN0IHFzdHIgKnFzdHI7CisJaGxpc3RfYmxfZm9yX2VhY2hfZW50cnlfcmN1KGRlbnRyeSwgbm9kZSwgJmItPmhlYWQsIGRfaGFzaCkgeworCQljb25zdCBjaGFyICp0bmFtZTsKKwkJaW50IHRsZW47CiAKIAkJaWYgKGRlbnRyeS0+ZF9uYW1lLmhhc2ggIT0gaGFzaCkKIAkJCWNvbnRpbnVlOwotCQlpZiAoZGVudHJ5LT5kX3BhcmVudCAhPSBwYXJlbnQpCi0JCQljb250aW51ZTsKIAogCQlzcGluX2xvY2soJmRlbnRyeS0+ZF9sb2NrKTsKLQotCQkvKgotCQkgKiBSZWNoZWNrIHRoZSBkZW50cnkgYWZ0ZXIgdGFraW5nIHRoZSBsb2NrIC0gZF9tb3ZlIG1heSBoYXZlCi0JCSAqIGNoYW5nZWQgdGhpbmdzLiBEb24ndCBib3RoZXIgY2hlY2tpbmcgdGhlIGhhc2ggYmVjYXVzZQotCQkgKiB3ZSdyZSBhYm91dCB0byBjb21wYXJlIHRoZSB3aG9sZSBuYW1lIGFueXdheS4KLQkJICovCiAJCWlmIChkZW50cnktPmRfcGFyZW50ICE9IHBhcmVudCkKIAkJCWdvdG8gbmV4dDsKLQotCQkvKiBub24tZXhpc3RpbmcgZHVlIHRvIFJDVT8gKi8KIAkJaWYgKGRfdW5oYXNoZWQoZGVudHJ5KSkKIAkJCWdvdG8gbmV4dDsKIApAQCAtMTQzMywxOCArMTkxMywxOSBAQAogCQkgKiBJdCBpcyBzYWZlIHRvIGNvbXBhcmUgbmFtZXMgc2luY2UgZF9tb3ZlKCkgY2Fubm90CiAJCSAqIGNoYW5nZSB0aGUgcXN0ciAocHJvdGVjdGVkIGJ5IGRfbG9jaykuCiAJCSAqLwotCQlxc3RyID0gJmRlbnRyeS0+ZF9uYW1lOwotCQlpZiAocGFyZW50LT5kX29wICYmIHBhcmVudC0+ZF9vcC0+ZF9jb21wYXJlKSB7Ci0JCQlpZiAocGFyZW50LT5kX29wLT5kX2NvbXBhcmUocGFyZW50LCBxc3RyLCBuYW1lKSkKKwkJdGxlbiA9IGRlbnRyeS0+ZF9uYW1lLmxlbjsKKwkJdG5hbWUgPSBkZW50cnktPmRfbmFtZS5uYW1lOworCQlpZiAocGFyZW50LT5kX2ZsYWdzICYgRENBQ0hFX09QX0NPTVBBUkUpIHsKKwkJCWlmIChwYXJlbnQtPmRfb3AtPmRfY29tcGFyZShwYXJlbnQsIHBhcmVudC0+ZF9pbm9kZSwKKwkJCQkJCWRlbnRyeSwgZGVudHJ5LT5kX2lub2RlLAorCQkJCQkJdGxlbiwgdG5hbWUsIG5hbWUpKQogCQkJCWdvdG8gbmV4dDsKIAkJfSBlbHNlIHsKLQkJCWlmIChxc3RyLT5sZW4gIT0gbGVuKQotCQkJCWdvdG8gbmV4dDsKLQkJCWlmIChtZW1jbXAocXN0ci0+bmFtZSwgc3RyLCBsZW4pKQorCQkJaWYgKGRlbnRyeV9jbXAodG5hbWUsIHRsZW4sIHN0ciwgbGVuKSkKIAkJCQlnb3RvIG5leHQ7CiAJCX0KIAotCQlhdG9taWNfaW5jKCZkZW50cnktPmRfY291bnQpOworCQlkZW50cnktPmRfY291bnQrKzsKIAkJZm91bmQgPSBkZW50cnk7CiAJCXNwaW5fdW5sb2NrKCZkZW50cnktPmRfbG9jayk7CiAJCWJyZWFrOwpAQCAtMTQ3Myw4ICsxOTU0LDggQEAKIAkgKiByb3V0aW5lIG1heSBjaG9vc2UgdG8gbGVhdmUgdGhlIGhhc2ggdmFsdWUgdW5jaGFuZ2VkLgogCSAqLwogCW5hbWUtPmhhc2ggPSBmdWxsX25hbWVfaGFzaChuYW1lLT5uYW1lLCBuYW1lLT5sZW4pOwotCWlmIChkaXItPmRfb3AgJiYgZGlyLT5kX29wLT5kX2hhc2gpIHsKLQkJaWYgKGRpci0+ZF9vcC0+ZF9oYXNoKGRpciwgbmFtZSkgPCAwKQorCWlmIChkaXItPmRfZmxhZ3MgJiBEQ0FDSEVfT1BfSEFTSCkgeworCQlpZiAoZGlyLT5kX29wLT5kX2hhc2goZGlyLCBkaXItPmRfaW5vZGUsIG5hbWUpIDwgMCkKIAkJCWdvdG8gb3V0OwogCX0KIAlkZW50cnkgPSBkX2xvb2t1cChkaXIsIG5hbWUpOwpAQCAtMTQ4MywzNCArMTk2NCwzMiBAQAogfQogCiAvKioKLSAqIGRfdmFsaWRhdGUgLSB2ZXJpZnkgZGVudHJ5IHByb3ZpZGVkIGZyb20gaW5zZWN1cmUgc291cmNlCisgKiBkX3ZhbGlkYXRlIC0gdmVyaWZ5IGRlbnRyeSBwcm92aWRlZCBmcm9tIGluc2VjdXJlIHNvdXJjZSAoZGVwcmVjYXRlZCkKICAqIEBkZW50cnk6IFRoZSBkZW50cnkgYWxsZWdlZCB0byBiZSB2YWxpZCBjaGlsZCBvZiBAZHBhcmVudAogICogQGRwYXJlbnQ6IFRoZSBwYXJlbnQgZGVudHJ5IChrbm93biB0byBiZSB2YWxpZCkKICAqCiAgKiBBbiBpbnNlY3VyZSBzb3VyY2UgaGFzIHNlbnQgdXMgYSBkZW50cnksIGhlcmUgd2UgdmVyaWZ5IGl0IGFuZCBkZ2V0KCkgaXQuCiAgKiBUaGlzIGlzIHVzZWQgYnkgbmNwZnMgaW4gaXRzIHJlYWRkaXIgaW1wbGVtZW50YXRpb24uCiAgKiBaZXJvIGlzIHJldHVybmVkIGluIHRoZSBkZW50cnkgaXMgaW52YWxpZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHNsb3cgZm9yIGJpZyBkaXJlY3RvcmllcywgYW5kIGRlcHJlY2F0ZWQsIGRvIG5vdCB1c2UgaXQuCiAgKi8KLWludCBkX3ZhbGlkYXRlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGRlbnRyeSAqcGFyZW50KQoraW50IGRfdmFsaWRhdGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZGVudHJ5ICpkcGFyZW50KQogewotCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkID0gZF9oYXNoKHBhcmVudCwgZGVudHJ5LT5kX25hbWUuaGFzaCk7Ci0Jc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7Ci0Jc3RydWN0IGRlbnRyeSAqZDsKKwlzdHJ1Y3QgZGVudHJ5ICpjaGlsZDsKIAotCS8qIENoZWNrIHdoZXRoZXIgdGhlIHB0ciBtaWdodCBiZSB2YWxpZCBhdCBhbGwuLiAqLwotCWlmICgha21lbV9wdHJfdmFsaWRhdGUoZGVudHJ5X2NhY2hlLCBkZW50cnkpKQotCQlyZXR1cm4gMDsKLQlpZiAoZGVudHJ5LT5kX3BhcmVudCAhPSBwYXJlbnQpCi0JCXJldHVybiAwOwotCi0JcmN1X3JlYWRfbG9jaygpOwotCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShkLCBub2RlLCBoZWFkLCBkX2hhc2gpIHsKLQkJaWYgKGQgPT0gZGVudHJ5KSB7Ci0JCQlkZ2V0KGRlbnRyeSk7CisJc3Bpbl9sb2NrKCZkcGFyZW50LT5kX2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2hpbGQsICZkcGFyZW50LT5kX3N1YmRpcnMsIGRfdS5kX2NoaWxkKSB7CisJCWlmIChkZW50cnkgPT0gY2hpbGQpIHsKKwkJCXNwaW5fbG9ja19uZXN0ZWQoJmRlbnRyeS0+ZF9sb2NrLCBERU5UUllfRF9MT0NLX05FU1RFRCk7CisJCQlfX2RnZXRfZGxvY2soZGVudHJ5KTsKKwkJCXNwaW5fdW5sb2NrKCZkZW50cnktPmRfbG9jayk7CisJCQlzcGluX3VubG9jaygmZHBhcmVudC0+ZF9sb2NrKTsKIAkJCXJldHVybiAxOwogCQl9CiAJfQotCXJjdV9yZWFkX3VubG9jaygpOworCXNwaW5fdW5sb2NrKCZkcGFyZW50LT5kX2xvY2spOworCiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKGRfdmFsaWRhdGUpOwpAQCAtMTUzOCwxNiArMjAxNywyMyBAQAogIAogdm9pZCBkX2RlbGV0ZShzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5KQogeworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAJaW50IGlzZGlyID0gMDsKIAkvKgogCSAqIEFyZSB3ZSB0aGUgb25seSB1c2VyPwogCSAqLwotCXNwaW5fbG9jaygmZGNhY2hlX2xvY2spOworYWdhaW46CiAJc3Bpbl9sb2NrKCZkZW50cnktPmRfbG9jayk7Ci0JaXNkaXIgPSBTX0lTRElSKGRlbnRyeS0+ZF9pbm9kZS0+aV9tb2RlKTsKLQlpZiAoYXRvbWljX3JlYWQoJmRlbnRyeS0+ZF9jb3VudCkgPT0gMSkgeworCWlub2RlID0gZGVudHJ5LT5kX2lub2RlOworCWlzZGlyID0gU19JU0RJUihpbm9kZS0+aV9tb2RlKTsKKwlpZiAoZGVudHJ5LT5kX2NvdW50ID09IDEpIHsKKwkJaWYgKGlub2RlICYmICFzcGluX3RyeWxvY2soJmlub2RlLT5pX2xvY2spKSB7CisJCQlzcGluX3VubG9jaygmZGVudHJ5LT5kX2xvY2spOworCQkJY3B1X3JlbGF4KCk7CisJCQlnb3RvIGFnYWluOworCQl9CiAJCWRlbnRyeS0+ZF9mbGFncyAmPSB+RENBQ0hFX0NBTlRfTU9VTlQ7Ci0JCWRlbnRyeV9pcHV0KGRlbnRyeSk7CisJCWRlbnRyeV91bmxpbmtfaW5vZGUoZGVudHJ5KTsKIAkJZnNub3RpZnlfbmFtZXJlbW92ZShkZW50cnksIGlzZGlyKTsKIAkJcmV0dXJuOwogCX0KQEAgLTE1NTYsMTcgKzIwNDIsMTggQEAKIAkJX19kX2Ryb3AoZGVudHJ5KTsKIAogCXNwaW5fdW5sb2NrKCZkZW50cnktPmRfbG9jayk7Ci0Jc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKIAogCWZzbm90aWZ5X25hbWVyZW1vdmUoZGVudHJ5LCBpc2Rpcik7CiB9CiBFWFBPUlRfU1lNQk9MKGRfZGVsZXRlKTsKIAotc3RhdGljIHZvaWQgX19kX3JlaGFzaChzdHJ1Y3QgZGVudHJ5ICogZW50cnksIHN0cnVjdCBobGlzdF9oZWFkICpsaXN0KQorc3RhdGljIHZvaWQgX19kX3JlaGFzaChzdHJ1Y3QgZGVudHJ5ICogZW50cnksIHN0cnVjdCBkY2FjaGVfaGFzaF9idWNrZXQgKmIpCiB7Ci0KKwlCVUdfT04oIWRfdW5oYXNoZWQoZW50cnkpKTsKKwlzcGluX2xvY2tfYnVja2V0KGIpOwogIAllbnRyeS0+ZF9mbGFncyAmPSB+RENBQ0hFX1VOSEFTSEVEOwotIAlobGlzdF9hZGRfaGVhZF9yY3UoJmVudHJ5LT5kX2hhc2gsIGxpc3QpOworCWhsaXN0X2JsX2FkZF9oZWFkX3JjdSgmZW50cnktPmRfaGFzaCwgJmItPmhlYWQpOworCXNwaW5fdW5sb2NrX2J1Y2tldChiKTsKIH0KIAogc3RhdGljIHZvaWQgX2RfcmVoYXNoKHN0cnVjdCBkZW50cnkgKiBlbnRyeSkKQEAgLTE1ODMsMjUgKzIwNzAsMzkgQEAKICAKIHZvaWQgZF9yZWhhc2goc3RydWN0IGRlbnRyeSAqIGVudHJ5KQogewotCXNwaW5fbG9jaygmZGNhY2hlX2xvY2spOwogCXNwaW5fbG9jaygmZW50cnktPmRfbG9jayk7CiAJX2RfcmVoYXNoKGVudHJ5KTsKIAlzcGluX3VubG9jaygmZW50cnktPmRfbG9jayk7Ci0Jc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKIH0KIEVYUE9SVF9TWU1CT0woZF9yZWhhc2gpOwogCi0vKgotICogV2hlbiBzd2l0Y2hpbmcgbmFtZXMsIHRoZSBhY3R1YWwgc3RyaW5nIGRvZXNuJ3Qgc3RyaWN0bHkgaGF2ZSB0bwotICogYmUgcHJlc2VydmVkIGluIHRoZSB0YXJnZXQgLSBiZWNhdXNlIHdlJ3JlIGRyb3BwaW5nIHRoZSB0YXJnZXQKLSAqIGFueXdheS4gQXMgc3VjaCwgd2UgY2FuIGp1c3QgZG8gYSBzaW1wbGUgbWVtY3B5KCkgdG8gY29weSBvdmVyCi0gKiB0aGUgbmV3IG5hbWUgYmVmb3JlIHdlIHN3aXRjaC4KKy8qKgorICogZGVudHJ5X3VwZGF0ZV9uYW1lX2Nhc2UgLSB1cGRhdGUgY2FzZSBpbnNlbnNpdGl2ZSBkZW50cnkgd2l0aCBhIG5ldyBuYW1lCisgKiBAZGVudHJ5OiBkZW50cnkgdG8gYmUgdXBkYXRlZAorICogQG5hbWU6IG5ldyBuYW1lCiAgKgotICogTm90ZSB0aGF0IHdlIGhhdmUgdG8gYmUgYSBsb3QgbW9yZSBjYXJlZnVsIGFib3V0IGdldHRpbmcgdGhlIGhhc2gKLSAqIHN3aXRjaGVkIC0gd2UgaGF2ZSB0byBzd2l0Y2ggdGhlIGhhc2ggdmFsdWUgcHJvcGVybHkgZXZlbiBpZiBpdAotICogdGhlbiBubyBsb25nZXIgbWF0Y2hlcyB0aGUgYWN0dWFsIChjb3JydXB0ZWQpIHN0cmluZyBvZiB0aGUgdGFyZ2V0LgotICogVGhlIGhhc2ggdmFsdWUgaGFzIHRvIG1hdGNoIHRoZSBoYXNoIHF1ZXVlIHRoYXQgdGhlIGRlbnRyeSBpcyBvbi4uCisgKiBVcGRhdGUgYSBjYXNlIGluc2Vuc2l0aXZlIGRlbnRyeSB3aXRoIG5ldyBjYXNlIG9mIG5hbWUuCisgKgorICogZGVudHJ5IG11c3QgaGF2ZSBiZWVuIHJldHVybmVkIGJ5IGRfbG9va3VwIHdpdGggbmFtZSBAbmFtZS4gT2xkIGFuZCBuZXcKKyAqIG5hbWUgbGVuZ3RocyBtdXN0IG1hdGNoIChpZS4gbm8gZF9jb21wYXJlIHdoaWNoIGFsbG93cyBtaXNtYXRjaGVkIG5hbWUKKyAqIGxlbmd0aHMpLgorICoKKyAqIFBhcmVudCBpbm9kZSBpX211dGV4IG11c3QgYmUgaGVsZCBvdmVyIGRfbG9va3VwIGFuZCBpbnRvIHRoaXMgY2FsbCAodG8KKyAqIGtlZXAgcmVuYW1lcyBhbmQgY29uY3VycmVudCBpbnNlcnRzLCBhbmQgcmVhZGRpcigyKSBhd2F5KS4KICAqLwordm9pZCBkZW50cnlfdXBkYXRlX25hbWVfY2FzZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBxc3RyICpuYW1lKQoreworCUJVR19PTighbXV0ZXhfaXNfbG9ja2VkKCZkZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpKTsKKwlCVUdfT04oZGVudHJ5LT5kX25hbWUubGVuICE9IG5hbWUtPmxlbik7IC8qIGRfbG9va3VwIGdpdmVzIHRoaXMgKi8KKworCXNwaW5fbG9jaygmZGVudHJ5LT5kX2xvY2spOworCXdyaXRlX3NlcWNvdW50X2JlZ2luKCZkZW50cnktPmRfc2VxKTsKKwltZW1jcHkoKHVuc2lnbmVkIGNoYXIgKilkZW50cnktPmRfbmFtZS5uYW1lLCBuYW1lLT5uYW1lLCBuYW1lLT5sZW4pOworCXdyaXRlX3NlcWNvdW50X2VuZCgmZGVudHJ5LT5kX3NlcSk7CisJc3Bpbl91bmxvY2soJmRlbnRyeS0+ZF9sb2NrKTsKK30KK0VYUE9SVF9TWU1CT0woZGVudHJ5X3VwZGF0ZV9uYW1lX2Nhc2UpOworCiBzdGF0aWMgdm9pZCBzd2l0Y2hfbmFtZXMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZGVudHJ5ICp0YXJnZXQpCiB7CiAJaWYgKGRuYW1lX2V4dGVybmFsKHRhcmdldCkpIHsKQEAgLTE2NDMsNTQgKzIxNDQsODQgQEAKIAlzd2FwKGRlbnRyeS0+ZF9uYW1lLmxlbiwgdGFyZ2V0LT5kX25hbWUubGVuKTsKIH0KIAorc3RhdGljIHZvaWQgZGVudHJ5X2xvY2tfZm9yX21vdmUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZGVudHJ5ICp0YXJnZXQpCit7CisJLyoKKwkgKiBYWFhYOiBkbyB3ZSByZWFsbHkgbmVlZCB0byB0YWtlIHRhcmdldC0+ZF9sb2NrPworCSAqLworCWlmIChJU19ST09UKGRlbnRyeSkgfHwgZGVudHJ5LT5kX3BhcmVudCA9PSB0YXJnZXQtPmRfcGFyZW50KQorCQlzcGluX2xvY2soJnRhcmdldC0+ZF9wYXJlbnQtPmRfbG9jayk7CisJZWxzZSB7CisJCWlmIChkX2FuY2VzdG9yKGRlbnRyeS0+ZF9wYXJlbnQsIHRhcmdldC0+ZF9wYXJlbnQpKSB7CisJCQlzcGluX2xvY2soJmRlbnRyeS0+ZF9wYXJlbnQtPmRfbG9jayk7CisJCQlzcGluX2xvY2tfbmVzdGVkKCZ0YXJnZXQtPmRfcGFyZW50LT5kX2xvY2ssCisJCQkJCQlERU5UUllfRF9MT0NLX05FU1RFRCk7CisJCX0gZWxzZSB7CisJCQlzcGluX2xvY2soJnRhcmdldC0+ZF9wYXJlbnQtPmRfbG9jayk7CisJCQlzcGluX2xvY2tfbmVzdGVkKCZkZW50cnktPmRfcGFyZW50LT5kX2xvY2ssCisJCQkJCQlERU5UUllfRF9MT0NLX05FU1RFRCk7CisJCX0KKwl9CisJaWYgKHRhcmdldCA8IGRlbnRyeSkgeworCQlzcGluX2xvY2tfbmVzdGVkKCZ0YXJnZXQtPmRfbG9jaywgMik7CisJCXNwaW5fbG9ja19uZXN0ZWQoJmRlbnRyeS0+ZF9sb2NrLCAzKTsKKwl9IGVsc2UgeworCQlzcGluX2xvY2tfbmVzdGVkKCZkZW50cnktPmRfbG9jaywgMik7CisJCXNwaW5fbG9ja19uZXN0ZWQoJnRhcmdldC0+ZF9sb2NrLCAzKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGRlbnRyeV91bmxvY2tfcGFyZW50c19mb3JfbW92ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCisJCQkJCXN0cnVjdCBkZW50cnkgKnRhcmdldCkKK3sKKwlpZiAodGFyZ2V0LT5kX3BhcmVudCAhPSBkZW50cnktPmRfcGFyZW50KQorCQlzcGluX3VubG9jaygmZGVudHJ5LT5kX3BhcmVudC0+ZF9sb2NrKTsKKwlpZiAodGFyZ2V0LT5kX3BhcmVudCAhPSB0YXJnZXQpCisJCXNwaW5fdW5sb2NrKCZ0YXJnZXQtPmRfcGFyZW50LT5kX2xvY2spOworfQorCiAvKgotICogV2UgY2FubmliYWxpemUgInRhcmdldCIgd2hlbiBtb3ZpbmcgZGVudHJ5IG9uIHRvcCBvZiBpdCwKLSAqIGJlY2F1c2UgaXQncyBnb2luZyB0byBiZSB0aHJvd24gYXdheSBhbnl3YXkuIFdlIGNvdWxkIGJlIG1vcmUKLSAqIHBvbGl0ZSBhYm91dCBpdCwgdGhvdWdoLgorICogV2hlbiBzd2l0Y2hpbmcgbmFtZXMsIHRoZSBhY3R1YWwgc3RyaW5nIGRvZXNuJ3Qgc3RyaWN0bHkgaGF2ZSB0bworICogYmUgcHJlc2VydmVkIGluIHRoZSB0YXJnZXQgLSBiZWNhdXNlIHdlJ3JlIGRyb3BwaW5nIHRoZSB0YXJnZXQKKyAqIGFueXdheS4gQXMgc3VjaCwgd2UgY2FuIGp1c3QgZG8gYSBzaW1wbGUgbWVtY3B5KCkgdG8gY29weSBvdmVyCisgKiB0aGUgbmV3IG5hbWUgYmVmb3JlIHdlIHN3aXRjaC4KICAqCi0gKiBUaGlzIGZvcmNlZnVsIHJlbW92YWwgd2lsbCByZXN1bHQgaW4gdWdseSAvcHJvYyBvdXRwdXQgaWYKLSAqIHNvbWVib2R5IGhvbGRzIGEgZmlsZSBvcGVuIHRoYXQgZ290IGRlbGV0ZWQgZHVlIHRvIGEgcmVuYW1lLgotICogV2UgY291bGQgYmUgbmljZXIgYWJvdXQgdGhlIGRlbGV0ZWQgZmlsZSwgYW5kIGxldCBpdCBzaG93Ci0gKiB1cCB1bmRlciB0aGUgbmFtZSBpdCBoYWQgYmVmb3JlIGl0IHdhcyBkZWxldGVkIHJhdGhlciB0aGFuCi0gKiB1bmRlciB0aGUgb3JpZ2luYWwgbmFtZSBvZiB0aGUgZmlsZSB0aGF0IHdhcyBtb3ZlZCBvbiB0b3Agb2YgaXQuCisgKiBOb3RlIHRoYXQgd2UgaGF2ZSB0byBiZSBhIGxvdCBtb3JlIGNhcmVmdWwgYWJvdXQgZ2V0dGluZyB0aGUgaGFzaAorICogc3dpdGNoZWQgLSB3ZSBoYXZlIHRvIHN3aXRjaCB0aGUgaGFzaCB2YWx1ZSBwcm9wZXJseSBldmVuIGlmIGl0CisgKiB0aGVuIG5vIGxvbmdlciBtYXRjaGVzIHRoZSBhY3R1YWwgKGNvcnJ1cHRlZCkgc3RyaW5nIG9mIHRoZSB0YXJnZXQuCisgKiBUaGUgaGFzaCB2YWx1ZSBoYXMgdG8gbWF0Y2ggdGhlIGhhc2ggcXVldWUgdGhhdCB0aGUgZGVudHJ5IGlzIG9uLi4KICAqLwotIAogLyoKLSAqIGRfbW92ZV9sb2NrZWQgLSBtb3ZlIGEgZGVudHJ5CisgKiBkX21vdmUgLSBtb3ZlIGEgZGVudHJ5CiAgKiBAZGVudHJ5OiBlbnRyeSB0byBtb3ZlCiAgKiBAdGFyZ2V0OiBuZXcgZGVudHJ5CiAgKgogICogVXBkYXRlIHRoZSBkY2FjaGUgdG8gcmVmbGVjdCB0aGUgbW92ZSBvZiBhIGZpbGUgbmFtZS4gTmVnYXRpdmUKICAqIGRjYWNoZSBlbnRyaWVzIHNob3VsZCBub3QgYmUgbW92ZWQgaW4gdGhpcyB3YXkuCiAgKi8KLXN0YXRpYyB2b2lkIGRfbW92ZV9sb2NrZWQoc3RydWN0IGRlbnRyeSAqIGRlbnRyeSwgc3RydWN0IGRlbnRyeSAqIHRhcmdldCkKK3ZvaWQgZF9tb3ZlKHN0cnVjdCBkZW50cnkgKiBkZW50cnksIHN0cnVjdCBkZW50cnkgKiB0YXJnZXQpCiB7Ci0Jc3RydWN0IGhsaXN0X2hlYWQgKmxpc3Q7Ci0KIAlpZiAoIWRlbnRyeS0+ZF9pbm9kZSkKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiVkZTOiBtb3ZpbmcgbmVnYXRpdmUgZGNhY2hlIGVudHJ5XG4iKTsKIAorCUJVR19PTihkX2FuY2VzdG9yKGRlbnRyeSwgdGFyZ2V0KSk7CisJQlVHX09OKGRfYW5jZXN0b3IodGFyZ2V0LCBkZW50cnkpKTsKKwogCXdyaXRlX3NlcWxvY2soJnJlbmFtZV9sb2NrKTsKKworCWRlbnRyeV9sb2NrX2Zvcl9tb3ZlKGRlbnRyeSwgdGFyZ2V0KTsKKworCXdyaXRlX3NlcWNvdW50X2JlZ2luKCZkZW50cnktPmRfc2VxKTsKKwl3cml0ZV9zZXFjb3VudF9iZWdpbigmdGFyZ2V0LT5kX3NlcSk7CisKKwkvKiBfX2RfZHJvcCBkb2VzIHdyaXRlX3NlcWNvdW50X2JhcnJpZXIsIGJ1dCB0aGV5J3JlIE9LIHRvIG5lc3QuICovCisKIAkvKgotCSAqIFhYWFg6IGRvIHdlIHJlYWxseSBuZWVkIHRvIHRha2UgdGFyZ2V0LT5kX2xvY2s/CisJICogTW92ZSB0aGUgZGVudHJ5IHRvIHRoZSB0YXJnZXQgaGFzaCBxdWV1ZS4gRG9uJ3QgYm90aGVyIGNoZWNraW5nCisJICogZm9yIHRoZSBzYW1lIGhhc2ggcXVldWUgYmVjYXVzZSBvZiBob3cgdW5saWtlbHkgaXQgaXMuCiAJICovCi0JaWYgKHRhcmdldCA8IGRlbnRyeSkgewotCQlzcGluX2xvY2soJnRhcmdldC0+ZF9sb2NrKTsKLQkJc3Bpbl9sb2NrX25lc3RlZCgmZGVudHJ5LT5kX2xvY2ssIERFTlRSWV9EX0xPQ0tfTkVTVEVEKTsKLQl9IGVsc2UgewotCQlzcGluX2xvY2soJmRlbnRyeS0+ZF9sb2NrKTsKLQkJc3Bpbl9sb2NrX25lc3RlZCgmdGFyZ2V0LT5kX2xvY2ssIERFTlRSWV9EX0xPQ0tfTkVTVEVEKTsKLQl9Ci0KLQkvKiBNb3ZlIHRoZSBkZW50cnkgdG8gdGhlIHRhcmdldCBoYXNoIHF1ZXVlLCBpZiBvbiBkaWZmZXJlbnQgYnVja2V0ICovCi0JaWYgKGRfdW5oYXNoZWQoZGVudHJ5KSkKLQkJZ290byBhbHJlYWR5X3VuaGFzaGVkOwotCi0JaGxpc3RfZGVsX3JjdSgmZGVudHJ5LT5kX2hhc2gpOwotCi1hbHJlYWR5X3VuaGFzaGVkOgotCWxpc3QgPSBkX2hhc2godGFyZ2V0LT5kX3BhcmVudCwgdGFyZ2V0LT5kX25hbWUuaGFzaCk7Ci0JX19kX3JlaGFzaChkZW50cnksIGxpc3QpOworCV9fZF9kcm9wKGRlbnRyeSk7CisJX19kX3JlaGFzaChkZW50cnksIGRfaGFzaCh0YXJnZXQtPmRfcGFyZW50LCB0YXJnZXQtPmRfbmFtZS5oYXNoKSk7CiAKIAkvKiBVbmhhc2ggdGhlIHRhcmdldDogZHB1dCgpIHdpbGwgdGhlbiBnZXQgcmlkIG9mIGl0ICovCiAJX19kX2Ryb3AodGFyZ2V0KTsKQEAgLTE3MTUsMjcgKzIyNDYsMTYgQEAKIAl9CiAKIAlsaXN0X2FkZCgmZGVudHJ5LT5kX3UuZF9jaGlsZCwgJmRlbnRyeS0+ZF9wYXJlbnQtPmRfc3ViZGlycyk7CisKKwl3cml0ZV9zZXFjb3VudF9lbmQoJnRhcmdldC0+ZF9zZXEpOworCXdyaXRlX3NlcWNvdW50X2VuZCgmZGVudHJ5LT5kX3NlcSk7CisKKwlkZW50cnlfdW5sb2NrX3BhcmVudHNfZm9yX21vdmUoZGVudHJ5LCB0YXJnZXQpOwogCXNwaW5fdW5sb2NrKCZ0YXJnZXQtPmRfbG9jayk7CiAJZnNub3RpZnlfZF9tb3ZlKGRlbnRyeSk7CiAJc3Bpbl91bmxvY2soJmRlbnRyeS0+ZF9sb2NrKTsKIAl3cml0ZV9zZXF1bmxvY2soJnJlbmFtZV9sb2NrKTsKIH0KLQotLyoqCi0gKiBkX21vdmUgLSBtb3ZlIGEgZGVudHJ5Ci0gKiBAZGVudHJ5OiBlbnRyeSB0byBtb3ZlCi0gKiBAdGFyZ2V0OiBuZXcgZGVudHJ5Ci0gKgotICogVXBkYXRlIHRoZSBkY2FjaGUgdG8gcmVmbGVjdCB0aGUgbW92ZSBvZiBhIGZpbGUgbmFtZS4gTmVnYXRpdmUKLSAqIGRjYWNoZSBlbnRyaWVzIHNob3VsZCBub3QgYmUgbW92ZWQgaW4gdGhpcyB3YXkuCi0gKi8KLQotdm9pZCBkX21vdmUoc3RydWN0IGRlbnRyeSAqIGRlbnRyeSwgc3RydWN0IGRlbnRyeSAqIHRhcmdldCkKLXsKLQlzcGluX2xvY2soJmRjYWNoZV9sb2NrKTsKLQlkX21vdmVfbG9ja2VkKGRlbnRyeSwgdGFyZ2V0KTsKLQlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOwotfQogRVhQT1JUX1NZTUJPTChkX21vdmUpOwogCiAvKioKQEAgLTE3NjEsMTMgKzIyODEsMTMgQEAKICAqIFRoaXMgaGVscGVyIGF0dGVtcHRzIHRvIGNvcGUgd2l0aCByZW1vdGVseSByZW5hbWVkIGRpcmVjdG9yaWVzCiAgKgogICogSXQgYXNzdW1lcyB0aGF0IHRoZSBjYWxsZXIgaXMgYWxyZWFkeSBob2xkaW5nCi0gKiBkZW50cnktPmRfcGFyZW50LT5kX2lub2RlLT5pX211dGV4IGFuZCB0aGUgZGNhY2hlX2xvY2sKKyAqIGRlbnRyeS0+ZF9wYXJlbnQtPmRfaW5vZGUtPmlfbXV0ZXggYW5kIHRoZSBpbm9kZS0+aV9sb2NrCiAgKgogICogTm90ZTogSWYgZXZlciB0aGUgbG9ja2luZyBpbiBsb2NrX3JlbmFtZSgpIGNoYW5nZXMsIHRoZW4gcGxlYXNlCiAgKiByZW1lbWJlciB0byB1cGRhdGUgdGhpcyB0b28uLi4KICAqLwotc3RhdGljIHN0cnVjdCBkZW50cnkgKl9fZF91bmFsaWFzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGRlbnRyeSAqYWxpYXMpCi0JX19yZWxlYXNlcyhkY2FjaGVfbG9jaykKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpfX2RfdW5hbGlhcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBkZW50cnkgKmFsaWFzKQogewogCXN0cnVjdCBtdXRleCAqbTEgPSBOVUxMLCAqbTIgPSBOVUxMOwogCXN0cnVjdCBkZW50cnkgKnJldDsKQEAgLTE3OTAsMTAgKzIzMTAsMTAgQEAKIAkJZ290byBvdXRfZXJyOwogCW0yID0gJmFsaWFzLT5kX3BhcmVudC0+ZF9pbm9kZS0+aV9tdXRleDsKIG91dF91bmFsaWFzOgotCWRfbW92ZV9sb2NrZWQoYWxpYXMsIGRlbnRyeSk7CisJZF9tb3ZlKGFsaWFzLCBkZW50cnkpOwogCXJldCA9IGFsaWFzOwogb3V0X2VycjoKLQlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOworCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKIAlpZiAobTIpCiAJCW11dGV4X3VubG9jayhtMik7CiAJaWYgKG0xKQpAQCAtMTgwNCwxNyArMjMyNCwyMyBAQAogLyoKICAqIFByZXBhcmUgYW4gYW5vbnltb3VzIGRlbnRyeSBmb3IgbGlmZSBpbiB0aGUgc3VwZXJibG9jaydzIGRlbnRyeSB0cmVlIGFzIGEKICAqIG5hbWVkIGRlbnRyeSBpbiBwbGFjZSBvZiB0aGUgZGVudHJ5IHRvIGJlIHJlcGxhY2VkLgorICogcmV0dXJucyB3aXRoIGFub24tPmRfbG9jayBoZWxkIQogICovCiBzdGF0aWMgdm9pZCBfX2RfbWF0ZXJpYWxpc2VfZGVudHJ5KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGRlbnRyeSAqYW5vbikKIHsKIAlzdHJ1Y3QgZGVudHJ5ICpkcGFyZW50LCAqYXBhcmVudDsKIAotCXN3aXRjaF9uYW1lcyhkZW50cnksIGFub24pOwotCXN3YXAoZGVudHJ5LT5kX25hbWUuaGFzaCwgYW5vbi0+ZF9uYW1lLmhhc2gpOworCWRlbnRyeV9sb2NrX2Zvcl9tb3ZlKGFub24sIGRlbnRyeSk7CisKKwl3cml0ZV9zZXFjb3VudF9iZWdpbigmZGVudHJ5LT5kX3NlcSk7CisJd3JpdGVfc2VxY291bnRfYmVnaW4oJmFub24tPmRfc2VxKTsKIAogCWRwYXJlbnQgPSBkZW50cnktPmRfcGFyZW50OwogCWFwYXJlbnQgPSBhbm9uLT5kX3BhcmVudDsKIAorCXN3aXRjaF9uYW1lcyhkZW50cnksIGFub24pOworCXN3YXAoZGVudHJ5LT5kX25hbWUuaGFzaCwgYW5vbi0+ZF9uYW1lLmhhc2gpOworCiAJZGVudHJ5LT5kX3BhcmVudCA9IChhcGFyZW50ID09IGFub24pID8gZGVudHJ5IDogYXBhcmVudDsKIAlsaXN0X2RlbCgmZGVudHJ5LT5kX3UuZF9jaGlsZCk7CiAJaWYgKCFJU19ST09UKGRlbnRyeSkpCkBAIC0xODI5LDYgKzIzNTUsMTMgQEAKIAllbHNlCiAJCUlOSVRfTElTVF9IRUFEKCZhbm9uLT5kX3UuZF9jaGlsZCk7CiAKKwl3cml0ZV9zZXFjb3VudF9lbmQoJmRlbnRyeS0+ZF9zZXEpOworCXdyaXRlX3NlcWNvdW50X2VuZCgmYW5vbi0+ZF9zZXEpOworCisJZGVudHJ5X3VubG9ja19wYXJlbnRzX2Zvcl9tb3ZlKGFub24sIGRlbnRyeSk7CisJc3Bpbl91bmxvY2soJmRlbnRyeS0+ZF9sb2NrKTsKKworCS8qIGFub24tPmRfbG9jayBzdGlsbCBsb2NrZWQsIHJldHVybnMgbG9ja2VkICovCiAJYW5vbi0+ZF9mbGFncyAmPSB+RENBQ0hFX0RJU0NPTk5FQ1RFRDsKIH0KIApAQCAtMTg0NiwxNCArMjM3OSwxNSBAQAogCiAJQlVHX09OKCFkX3VuaGFzaGVkKGRlbnRyeSkpOwogCi0Jc3Bpbl9sb2NrKCZkY2FjaGVfbG9jayk7Ci0KIAlpZiAoIWlub2RlKSB7CiAJCWFjdHVhbCA9IGRlbnRyeTsKIAkJX19kX2luc3RhbnRpYXRlKGRlbnRyeSwgTlVMTCk7Ci0JCWdvdG8gZm91bmRfbG9jazsKKwkJZF9yZWhhc2goYWN0dWFsKTsKKwkJZ290byBvdXRfbm9sb2NrOwogCX0KIAorCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7CisKIAlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSkgewogCQlzdHJ1Y3QgZGVudHJ5ICphbGlhczsKIApAQCAtMTg2NCwxMyArMjM5OCwxMiBAQAogCQkJLyogSXMgdGhpcyBhbiBhbm9ueW1vdXMgbW91bnRwb2ludCB0aGF0IHdlIGNvdWxkIHNwbGljZQogCQkJICogaW50byBvdXIgdHJlZT8gKi8KIAkJCWlmIChJU19ST09UKGFsaWFzKSkgewotCQkJCXNwaW5fbG9jaygmYWxpYXMtPmRfbG9jayk7CiAJCQkJX19kX21hdGVyaWFsaXNlX2RlbnRyeShkZW50cnksIGFsaWFzKTsKIAkJCQlfX2RfZHJvcChhbGlhcyk7CiAJCQkJZ290byBmb3VuZDsKIAkJCX0KIAkJCS8qIE5vcGUsIGJ1dCB3ZSBtdXN0KCEpIGF2b2lkIGRpcmVjdG9yeSBhbGlhc2luZyAqLwotCQkJYWN0dWFsID0gX19kX3VuYWxpYXMoZGVudHJ5LCBhbGlhcyk7CisJCQlhY3R1YWwgPSBfX2RfdW5hbGlhcyhpbm9kZSwgZGVudHJ5LCBhbGlhcyk7CiAJCQlpZiAoSVNfRVJSKGFjdHVhbCkpCiAJCQkJZHB1dChhbGlhcyk7CiAJCQlnb3RvIG91dF9ub2xvY2s7CkBAIC0xODgxLDE1ICsyNDE0LDE0IEBACiAJYWN0dWFsID0gX19kX2luc3RhbnRpYXRlX3VuaXF1ZShkZW50cnksIGlub2RlKTsKIAlpZiAoIWFjdHVhbCkKIAkJYWN0dWFsID0gZGVudHJ5OwotCWVsc2UgaWYgKHVubGlrZWx5KCFkX3VuaGFzaGVkKGFjdHVhbCkpKQotCQlnb3RvIHNob3VsZG50X2JlX2hhc2hlZDsKKwllbHNlCisJCUJVR19PTighZF91bmhhc2hlZChhY3R1YWwpKTsKIAotZm91bmRfbG9jazoKIAlzcGluX2xvY2soJmFjdHVhbC0+ZF9sb2NrKTsKIGZvdW5kOgogCV9kX3JlaGFzaChhY3R1YWwpOwogCXNwaW5fdW5sb2NrKCZhY3R1YWwtPmRfbG9jayk7Ci0Jc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKKwlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7CiBvdXRfbm9sb2NrOgogCWlmIChhY3R1YWwgPT0gZGVudHJ5KSB7CiAJCXNlY3VyaXR5X2RfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7CkBAIC0xODk4LDEwICsyNDMwLDYgQEAKIAogCWlwdXQoaW5vZGUpOwogCXJldHVybiBhY3R1YWw7Ci0KLXNob3VsZG50X2JlX2hhc2hlZDoKLQlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOwotCUJVRygpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZF9tYXRlcmlhbGlzZV91bmlxdWUpOwogCkBAIC0xOTI4LDcgKzI0NTYsNyBAQAogICogQGJ1ZmZlcjogcG9pbnRlciB0byB0aGUgZW5kIG9mIHRoZSBidWZmZXIKICAqIEBidWZsZW46IHBvaW50ZXIgdG8gYnVmZmVyIGxlbmd0aAogICoKLSAqIENhbGxlciBob2xkcyB0aGUgZGNhY2hlX2xvY2suCisgKiBDYWxsZXIgaG9sZHMgdGhlIHJlbmFtZV9sb2NrLgogICoKICAqIElmIHBhdGggaXMgbm90IHJlYWNoYWJsZSBmcm9tIHRoZSBzdXBwbGllZCByb290LCB0aGVuIHRoZSB2YWx1ZSBvZgogICogcm9vdCBpcyBjaGFuZ2VkICh3aXRob3V0IG1vZGlmeWluZyByZWZjb3VudHMpLgpAQCAtMTk1Niw3ICsyNDg0LDkgQEAKIAkJfQogCQlwYXJlbnQgPSBkZW50cnktPmRfcGFyZW50OwogCQlwcmVmZXRjaChwYXJlbnQpOworCQlzcGluX2xvY2soJmRlbnRyeS0+ZF9sb2NrKTsKIAkJZXJyb3IgPSBwcmVwZW5kX25hbWUoYnVmZmVyLCBidWZsZW4sICZkZW50cnktPmRfbmFtZSk7CisJCXNwaW5fdW5sb2NrKCZkZW50cnktPmRfbG9jayk7CiAJCWlmICghZXJyb3IpCiAJCQllcnJvciA9IHByZXBlbmQoYnVmZmVyLCBidWZsZW4sICIvIiwgMSk7CiAJCWlmIChlcnJvcikKQEAgLTIwMTIsOSArMjU0Miw5IEBACiAJaW50IGVycm9yOwogCiAJcHJlcGVuZCgmcmVzLCAmYnVmbGVuLCAiXDAiLCAxKTsKLQlzcGluX2xvY2soJmRjYWNoZV9sb2NrKTsKKwl3cml0ZV9zZXFsb2NrKCZyZW5hbWVfbG9jayk7CiAJZXJyb3IgPSBwcmVwZW5kX3BhdGgocGF0aCwgcm9vdCwgJnJlcywgJmJ1Zmxlbik7Ci0Jc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKKwl3cml0ZV9zZXF1bmxvY2soJnJlbmFtZV9sb2NrKTsKIAogCWlmIChlcnJvcikKIAkJcmV0dXJuIEVSUl9QVFIoZXJyb3IpOwpAQCAtMjA3NiwxMiArMjYwNiwxMiBAQAogCQlyZXR1cm4gcGF0aC0+ZGVudHJ5LT5kX29wLT5kX2RuYW1lKHBhdGgtPmRlbnRyeSwgYnVmLCBidWZsZW4pOwogCiAJZ2V0X2ZzX3Jvb3QoY3VycmVudC0+ZnMsICZyb290KTsKLQlzcGluX2xvY2soJmRjYWNoZV9sb2NrKTsKKwl3cml0ZV9zZXFsb2NrKCZyZW5hbWVfbG9jayk7CiAJdG1wID0gcm9vdDsKIAllcnJvciA9IHBhdGhfd2l0aF9kZWxldGVkKHBhdGgsICZ0bXAsICZyZXMsICZidWZsZW4pOwogCWlmIChlcnJvcikKIAkJcmVzID0gRVJSX1BUUihlcnJvcik7Ci0Jc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKKwl3cml0ZV9zZXF1bmxvY2soJnJlbmFtZV9sb2NrKTsKIAlwYXRoX3B1dCgmcm9vdCk7CiAJcmV0dXJuIHJlczsKIH0KQEAgLTIxMDcsMTIgKzI2MzcsMTIgQEAKIAkJcmV0dXJuIHBhdGgtPmRlbnRyeS0+ZF9vcC0+ZF9kbmFtZShwYXRoLT5kZW50cnksIGJ1ZiwgYnVmbGVuKTsKIAogCWdldF9mc19yb290KGN1cnJlbnQtPmZzLCAmcm9vdCk7Ci0Jc3Bpbl9sb2NrKCZkY2FjaGVfbG9jayk7CisJd3JpdGVfc2VxbG9jaygmcmVuYW1lX2xvY2spOwogCXRtcCA9IHJvb3Q7CiAJZXJyb3IgPSBwYXRoX3dpdGhfZGVsZXRlZChwYXRoLCAmdG1wLCAmcmVzLCAmYnVmbGVuKTsKIAlpZiAoIWVycm9yICYmICFwYXRoX2VxdWFsKCZ0bXAsICZyb290KSkKIAkJZXJyb3IgPSBwcmVwZW5kX3VucmVhY2hhYmxlKCZyZXMsICZidWZsZW4pOwotCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7CisJd3JpdGVfc2VxdW5sb2NrKCZyZW5hbWVfbG9jayk7CiAJcGF0aF9wdXQoJnJvb3QpOwogCWlmIChlcnJvcikKIAkJcmVzID0gIEVSUl9QVFIoZXJyb3IpOwpAQCAtMjE0NCw3ICsyNjc0LDcgQEAKIC8qCiAgKiBXcml0ZSBmdWxsIHBhdGhuYW1lIGZyb20gdGhlIHJvb3Qgb2YgdGhlIGZpbGVzeXN0ZW0gaW50byB0aGUgYnVmZmVyLgogICovCi1jaGFyICpfX2RlbnRyeV9wYXRoKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY2hhciAqYnVmLCBpbnQgYnVmbGVuKQorc3RhdGljIGNoYXIgKl9fZGVudHJ5X3BhdGgoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjaGFyICpidWYsIGludCBidWZsZW4pCiB7CiAJY2hhciAqZW5kID0gYnVmICsgYnVmbGVuOwogCWNoYXIgKnJldHZhbDsKQEAgLTIxNTgsMTAgKzI2ODgsMTMgQEAKIAogCXdoaWxlICghSVNfUk9PVChkZW50cnkpKSB7CiAJCXN0cnVjdCBkZW50cnkgKnBhcmVudCA9IGRlbnRyeS0+ZF9wYXJlbnQ7CisJCWludCBlcnJvcjsKIAogCQlwcmVmZXRjaChwYXJlbnQpOwotCQlpZiAoKHByZXBlbmRfbmFtZSgmZW5kLCAmYnVmbGVuLCAmZGVudHJ5LT5kX25hbWUpICE9IDApIHx8Ci0JCSAgICAocHJlcGVuZCgmZW5kLCAmYnVmbGVuLCAiLyIsIDEpICE9IDApKQorCQlzcGluX2xvY2soJmRlbnRyeS0+ZF9sb2NrKTsKKwkJZXJyb3IgPSBwcmVwZW5kX25hbWUoJmVuZCwgJmJ1ZmxlbiwgJmRlbnRyeS0+ZF9uYW1lKTsKKwkJc3Bpbl91bmxvY2soJmRlbnRyeS0+ZF9sb2NrKTsKKwkJaWYgKGVycm9yICE9IDAgfHwgcHJlcGVuZCgmZW5kLCAmYnVmbGVuLCAiLyIsIDEpICE9IDApCiAJCQlnb3RvIEVsb25nOwogCiAJCXJldHZhbCA9IGVuZDsKQEAgLTIxNzEsMTQgKzI3MDQsMjUgQEAKIEVsb25nOgogCXJldHVybiBFUlJfUFRSKC1FTkFNRVRPT0xPTkcpOwogfQotRVhQT1JUX1NZTUJPTChfX2RlbnRyeV9wYXRoKTsKKworY2hhciAqZGVudHJ5X3BhdGhfcmF3KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY2hhciAqYnVmLCBpbnQgYnVmbGVuKQoreworCWNoYXIgKnJldHZhbDsKKworCXdyaXRlX3NlcWxvY2soJnJlbmFtZV9sb2NrKTsKKwlyZXR2YWwgPSBfX2RlbnRyeV9wYXRoKGRlbnRyeSwgYnVmLCBidWZsZW4pOworCXdyaXRlX3NlcXVubG9jaygmcmVuYW1lX2xvY2spOworCisJcmV0dXJuIHJldHZhbDsKK30KK0VYUE9SVF9TWU1CT0woZGVudHJ5X3BhdGhfcmF3KTsKIAogY2hhciAqZGVudHJ5X3BhdGgoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjaGFyICpidWYsIGludCBidWZsZW4pCiB7CiAJY2hhciAqcCA9IE5VTEw7CiAJY2hhciAqcmV0dmFsOwogCi0Jc3Bpbl9sb2NrKCZkY2FjaGVfbG9jayk7CisJd3JpdGVfc2VxbG9jaygmcmVuYW1lX2xvY2spOwogCWlmIChkX3VubGlua2VkKGRlbnRyeSkpIHsKIAkJcCA9IGJ1ZiArIGJ1ZmxlbjsKIAkJaWYgKHByZXBlbmQoJnAsICZidWZsZW4sICIvL2RlbGV0ZWQiLCAxMCkgIT0gMCkKQEAgLTIxODYsMTIgKzI3MzAsMTEgQEAKIAkJYnVmbGVuKys7CiAJfQogCXJldHZhbCA9IF9fZGVudHJ5X3BhdGgoZGVudHJ5LCBidWYsIGJ1Zmxlbik7Ci0Jc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKKwl3cml0ZV9zZXF1bmxvY2soJnJlbmFtZV9sb2NrKTsKIAlpZiAoIUlTX0VSUihyZXR2YWwpICYmIHApCiAJCSpwID0gJy8nOwkvKiByZXN0b3JlICcvJyBvdmVycmlkZW4gd2l0aCAnXDAnICovCiAJcmV0dXJuIHJldHZhbDsKIEVsb25nOgotCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7CiAJcmV0dXJuIEVSUl9QVFIoLUVOQU1FVE9PTE9ORyk7CiB9CiAKQEAgLTIyMjUsNyArMjc2OCw3IEBACiAJZ2V0X2ZzX3Jvb3RfYW5kX3B3ZChjdXJyZW50LT5mcywgJnJvb3QsICZwd2QpOwogCiAJZXJyb3IgPSAtRU5PRU5UOwotCXNwaW5fbG9jaygmZGNhY2hlX2xvY2spOworCXdyaXRlX3NlcWxvY2soJnJlbmFtZV9sb2NrKTsKIAlpZiAoIWRfdW5saW5rZWQocHdkLmRlbnRyeSkpIHsKIAkJdW5zaWduZWQgbG9uZyBsZW47CiAJCXN0cnVjdCBwYXRoIHRtcCA9IHJvb3Q7CkBAIC0yMjM0LDcgKzI3NzcsNyBAQAogCiAJCXByZXBlbmQoJmN3ZCwgJmJ1ZmxlbiwgIlwwIiwgMSk7CiAJCWVycm9yID0gcHJlcGVuZF9wYXRoKCZwd2QsICZ0bXAsICZjd2QsICZidWZsZW4pOwotCQlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOworCQl3cml0ZV9zZXF1bmxvY2soJnJlbmFtZV9sb2NrKTsKIAogCQlpZiAoZXJyb3IpCiAJCQlnb3RvIG91dDsKQEAgLTIyNTMsOCArMjc5Niw5IEBACiAJCQlpZiAoY29weV90b191c2VyKGJ1ZiwgY3dkLCBsZW4pKQogCQkJCWVycm9yID0gLUVGQVVMVDsKIAkJfQotCX0gZWxzZQotCQlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOworCX0gZWxzZSB7CisJCXdyaXRlX3NlcXVubG9jaygmcmVuYW1lX2xvY2spOworCX0KIAogb3V0OgogCXBhdGhfcHV0KCZwd2QpOwpAQCAtMjI4MiwyNSArMjgyNiwyNSBAQAogaW50IGlzX3N1YmRpcihzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5LCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5KQogewogCWludCByZXN1bHQ7Ci0JdW5zaWduZWQgbG9uZyBzZXE7CisJdW5zaWduZWQgc2VxOwogCiAJaWYgKG5ld19kZW50cnkgPT0gb2xkX2RlbnRyeSkKIAkJcmV0dXJuIDE7CiAKLQkvKgotCSAqIE5lZWQgcmN1X3JlYWRsb2NrIHRvIHByb3RlY3QgYWdhaW5zdCB0aGUgZF9wYXJlbnQgdHJhc2hpbmcKLQkgKiBkdWUgdG8gZF9tb3ZlCi0JICovCi0JcmN1X3JlYWRfbG9jaygpOwogCWRvIHsKIAkJLyogZm9yIHJlc3RhcnRpbmcgaW5uZXIgbG9vcCBpbiBjYXNlIG9mIHNlcSByZXRyeSAqLwogCQlzZXEgPSByZWFkX3NlcWJlZ2luKCZyZW5hbWVfbG9jayk7CisJCS8qCisJCSAqIE5lZWQgcmN1X3JlYWRsb2NrIHRvIHByb3RlY3QgYWdhaW5zdCB0aGUgZF9wYXJlbnQgdHJhc2hpbmcKKwkJICogZHVlIHRvIGRfbW92ZQorCQkgKi8KKwkJcmN1X3JlYWRfbG9jaygpOwogCQlpZiAoZF9hbmNlc3RvcihvbGRfZGVudHJ5LCBuZXdfZGVudHJ5KSkKIAkJCXJlc3VsdCA9IDE7CiAJCWVsc2UKIAkJCXJlc3VsdCA9IDA7CisJCXJjdV9yZWFkX3VubG9jaygpOwogCX0gd2hpbGUgKHJlYWRfc2VxcmV0cnkoJnJlbmFtZV9sb2NrLCBzZXEpKTsKLQlyY3VfcmVhZF91bmxvY2soKTsKIAogCXJldHVybiByZXN1bHQ7CiB9CkBAIC0yMzMyLDEwICsyODc2LDE1IEBACiAKIHZvaWQgZF9nZW5vY2lkZShzdHJ1Y3QgZGVudHJ5ICpyb290KQogewotCXN0cnVjdCBkZW50cnkgKnRoaXNfcGFyZW50ID0gcm9vdDsKKwlzdHJ1Y3QgZGVudHJ5ICp0aGlzX3BhcmVudDsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpuZXh0OworCXVuc2lnbmVkIHNlcTsKKwlpbnQgbG9ja2VkID0gMDsKIAotCXNwaW5fbG9jaygmZGNhY2hlX2xvY2spOworCXNlcSA9IHJlYWRfc2VxYmVnaW4oJnJlbmFtZV9sb2NrKTsKK2FnYWluOgorCXRoaXNfcGFyZW50ID0gcm9vdDsKKwlzcGluX2xvY2soJnRoaXNfcGFyZW50LT5kX2xvY2spOwogcmVwZWF0OgogCW5leHQgPSB0aGlzX3BhcmVudC0+ZF9zdWJkaXJzLm5leHQ7CiByZXN1bWU6CkBAIC0yMzQzLDIxICsyODkyLDYyIEBACiAJCXN0cnVjdCBsaXN0X2hlYWQgKnRtcCA9IG5leHQ7CiAJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IGxpc3RfZW50cnkodG1wLCBzdHJ1Y3QgZGVudHJ5LCBkX3UuZF9jaGlsZCk7CiAJCW5leHQgPSB0bXAtPm5leHQ7Ci0JCWlmIChkX3VuaGFzaGVkKGRlbnRyeSl8fCFkZW50cnktPmRfaW5vZGUpCisKKwkJc3Bpbl9sb2NrX25lc3RlZCgmZGVudHJ5LT5kX2xvY2ssIERFTlRSWV9EX0xPQ0tfTkVTVEVEKTsKKwkJaWYgKGRfdW5oYXNoZWQoZGVudHJ5KSB8fCAhZGVudHJ5LT5kX2lub2RlKSB7CisJCQlzcGluX3VubG9jaygmZGVudHJ5LT5kX2xvY2spOwogCQkJY29udGludWU7CisJCX0KIAkJaWYgKCFsaXN0X2VtcHR5KCZkZW50cnktPmRfc3ViZGlycykpIHsKKwkJCXNwaW5fdW5sb2NrKCZ0aGlzX3BhcmVudC0+ZF9sb2NrKTsKKwkJCXNwaW5fcmVsZWFzZSgmZGVudHJ5LT5kX2xvY2suZGVwX21hcCwgMSwgX1JFVF9JUF8pOwogCQkJdGhpc19wYXJlbnQgPSBkZW50cnk7CisJCQlzcGluX2FjcXVpcmUoJnRoaXNfcGFyZW50LT5kX2xvY2suZGVwX21hcCwgMCwgMSwgX1JFVF9JUF8pOwogCQkJZ290byByZXBlYXQ7CiAJCX0KLQkJYXRvbWljX2RlYygmZGVudHJ5LT5kX2NvdW50KTsKKwkJaWYgKCEoZGVudHJ5LT5kX2ZsYWdzICYgRENBQ0hFX0dFTk9DSURFKSkgeworCQkJZGVudHJ5LT5kX2ZsYWdzIHw9IERDQUNIRV9HRU5PQ0lERTsKKwkJCWRlbnRyeS0+ZF9jb3VudC0tOworCQl9CisJCXNwaW5fdW5sb2NrKCZkZW50cnktPmRfbG9jayk7CiAJfQogCWlmICh0aGlzX3BhcmVudCAhPSByb290KSB7Ci0JCW5leHQgPSB0aGlzX3BhcmVudC0+ZF91LmRfY2hpbGQubmV4dDsKLQkJYXRvbWljX2RlYygmdGhpc19wYXJlbnQtPmRfY291bnQpOwotCQl0aGlzX3BhcmVudCA9IHRoaXNfcGFyZW50LT5kX3BhcmVudDsKKwkJc3RydWN0IGRlbnRyeSAqdG1wOworCQlzdHJ1Y3QgZGVudHJ5ICpjaGlsZDsKKworCQl0bXAgPSB0aGlzX3BhcmVudC0+ZF9wYXJlbnQ7CisJCWlmICghKHRoaXNfcGFyZW50LT5kX2ZsYWdzICYgRENBQ0hFX0dFTk9DSURFKSkgeworCQkJdGhpc19wYXJlbnQtPmRfZmxhZ3MgfD0gRENBQ0hFX0dFTk9DSURFOworCQkJdGhpc19wYXJlbnQtPmRfY291bnQtLTsKKwkJfQorCQlyY3VfcmVhZF9sb2NrKCk7CisJCXNwaW5fdW5sb2NrKCZ0aGlzX3BhcmVudC0+ZF9sb2NrKTsKKwkJY2hpbGQgPSB0aGlzX3BhcmVudDsKKwkJdGhpc19wYXJlbnQgPSB0bXA7CisJCXNwaW5fbG9jaygmdGhpc19wYXJlbnQtPmRfbG9jayk7CisJCS8qIG1pZ2h0IGdvIGJhY2sgdXAgdGhlIHdyb25nIHBhcmVudCBpZiB3ZSBoYXZlIGhhZCBhIHJlbmFtZQorCQkgKiBvciBkZWxldGlvbiAqLworCQlpZiAodGhpc19wYXJlbnQgIT0gY2hpbGQtPmRfcGFyZW50IHx8CisJCQkgKCFsb2NrZWQgJiYgcmVhZF9zZXFyZXRyeSgmcmVuYW1lX2xvY2ssIHNlcSkpKSB7CisJCQlzcGluX3VubG9jaygmdGhpc19wYXJlbnQtPmRfbG9jayk7CisJCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJCWdvdG8gcmVuYW1lX3JldHJ5OworCQl9CisJCXJjdV9yZWFkX3VubG9jaygpOworCQluZXh0ID0gY2hpbGQtPmRfdS5kX2NoaWxkLm5leHQ7CiAJCWdvdG8gcmVzdW1lOwogCX0KLQlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOworCXNwaW5fdW5sb2NrKCZ0aGlzX3BhcmVudC0+ZF9sb2NrKTsKKwlpZiAoIWxvY2tlZCAmJiByZWFkX3NlcXJldHJ5KCZyZW5hbWVfbG9jaywgc2VxKSkKKwkJZ290byByZW5hbWVfcmV0cnk7CisJaWYgKGxvY2tlZCkKKwkJd3JpdGVfc2VxdW5sb2NrKCZyZW5hbWVfbG9jayk7CisJcmV0dXJuOworCityZW5hbWVfcmV0cnk6CisJbG9ja2VkID0gMTsKKwl3cml0ZV9zZXFsb2NrKCZyZW5hbWVfbG9jayk7CisJZ290byBhZ2FpbjsKIH0KIAogLyoqCkBAIC0yNDExLDcgKzMwMDEsNyBAQAogCiAJZGVudHJ5X2hhc2h0YWJsZSA9CiAJCWFsbG9jX2xhcmdlX3N5c3RlbV9oYXNoKCJEZW50cnkgY2FjaGUiLAotCQkJCQlzaXplb2Yoc3RydWN0IGhsaXN0X2hlYWQpLAorCQkJCQlzaXplb2Yoc3RydWN0IGRjYWNoZV9oYXNoX2J1Y2tldCksCiAJCQkJCWRoYXNoX2VudHJpZXMsCiAJCQkJCTEzLAogCQkJCQlIQVNIX0VBUkxZLApAQCAtMjQyMCwxNiArMzAxMCwxMyBAQAogCQkJCQkwKTsKIAogCWZvciAobG9vcCA9IDA7IGxvb3AgPCAoMSA8PCBkX2hhc2hfc2hpZnQpOyBsb29wKyspCi0JCUlOSVRfSExJU1RfSEVBRCgmZGVudHJ5X2hhc2h0YWJsZVtsb29wXSk7CisJCUlOSVRfSExJU1RfQkxfSEVBRCgmZGVudHJ5X2hhc2h0YWJsZVtsb29wXS5oZWFkKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IGRjYWNoZV9pbml0KHZvaWQpCiB7CiAJaW50IGxvb3A7CiAKLQlwZXJjcHVfY291bnRlcl9pbml0KCZucl9kZW50cnksIDApOwotCXBlcmNwdV9jb3VudGVyX2luaXQoJm5yX2RlbnRyeV91bnVzZWQsIDApOwotCiAJLyogCiAJICogQSBjb25zdHJ1Y3RvciBjb3VsZCBiZSBhZGRlZCBmb3Igc3RhYmxlIHN0YXRlIGxpa2UgdGhlIGxpc3RzLAogCSAqIGJ1dCBpdCBpcyBwcm9iYWJseSBub3Qgd29ydGggaXQgYmVjYXVzZSBvZiB0aGUgY2FjaGUgbmF0dXJlCkBAIC0yNDQ2LDcgKzMwMzMsNyBAQAogCiAJZGVudHJ5X2hhc2h0YWJsZSA9CiAJCWFsbG9jX2xhcmdlX3N5c3RlbV9oYXNoKCJEZW50cnkgY2FjaGUiLAotCQkJCQlzaXplb2Yoc3RydWN0IGhsaXN0X2hlYWQpLAorCQkJCQlzaXplb2Yoc3RydWN0IGRjYWNoZV9oYXNoX2J1Y2tldCksCiAJCQkJCWRoYXNoX2VudHJpZXMsCiAJCQkJCTEzLAogCQkJCQkwLApAQCAtMjQ1NSw3ICszMDQyLDcgQEAKIAkJCQkJMCk7CiAKIAlmb3IgKGxvb3AgPSAwOyBsb29wIDwgKDEgPDwgZF9oYXNoX3NoaWZ0KTsgbG9vcCsrKQotCQlJTklUX0hMSVNUX0hFQUQoJmRlbnRyeV9oYXNodGFibGVbbG9vcF0pOworCQlJTklUX0hMSVNUX0JMX0hFQUQoJmRlbnRyeV9oYXNodGFibGVbbG9vcF0uaGVhZCk7CiB9CiAKIC8qIFNMQUIgY2FjaGUgZm9yIF9fZ2V0bmFtZSgpIGNvbnN1bWVycyAqLwpkaWZmIC0tZ2l0IGEvZnMvZGxtL2xvd2NvbW1zLmMgYi9mcy9kbG0vbG93Y29tbXMuYwppbmRleCAzN2EzNGMyLi45YzY0YWU5IDEwMDY0NAotLS0gYS9mcy9kbG0vbG93Y29tbXMuYworKysgYi9mcy9kbG0vbG93Y29tbXMuYwpAQCAtNjMsNiArNjMsOSBAQAogI2RlZmluZSBORUVERURfUk1FTSAoNCoxMDI0KjEwMjQpCiAjZGVmaW5lIENPTk5fSEFTSF9TSVpFIDMyCiAKKy8qIE51bWJlciBvZiBtZXNzYWdlcyB0byBzZW5kIGJlZm9yZSByZXNjaGVkdWxpbmcgKi8KKyNkZWZpbmUgTUFYX1NFTkRfTVNHX0NPVU5UIDI1CisKIHN0cnVjdCBjYnVmIHsKIAl1bnNpZ25lZCBpbnQgYmFzZTsKIAl1bnNpZ25lZCBpbnQgbGVuOwpAQCAtMTA4LDYgKzExMSw3IEBACiAjZGVmaW5lIENGX0lOSVRfUEVORElORyA0CiAjZGVmaW5lIENGX0lTX09USEVSQ09OIDUKICNkZWZpbmUgQ0ZfQ0xPU0UgNgorI2RlZmluZSBDRl9BUFBfTElNSVRFRCA3CiAJc3RydWN0IGxpc3RfaGVhZCB3cml0ZXF1ZXVlOyAgLyogTGlzdCBvZiBvdXRnb2luZyB3cml0ZXF1ZXVlX2VudHJpZXMgKi8KIAlzcGlubG9ja190IHdyaXRlcXVldWVfbG9jazsKIAlpbnQgKCpyeF9hY3Rpb24pIChzdHJ1Y3QgY29ubmVjdGlvbiAqKTsJLyogV2hhdCB0byBkbyB3aGVuIGFjdGl2ZSAqLwpAQCAtMjk1LDcgKzI5OSwxNyBAQAogewogCXN0cnVjdCBjb25uZWN0aW9uICpjb24gPSBzb2NrMmNvbihzayk7CiAKLQlpZiAoY29uICYmICF0ZXN0X2FuZF9zZXRfYml0KENGX1dSSVRFX1BFTkRJTkcsICZjb24tPmZsYWdzKSkKKwlpZiAoIWNvbikKKwkJcmV0dXJuOworCisJY2xlYXJfYml0KFNPQ0tfTk9TUEFDRSwgJmNvbi0+c29jay0+ZmxhZ3MpOworCisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChDRl9BUFBfTElNSVRFRCwgJmNvbi0+ZmxhZ3MpKSB7CisJCWNvbi0+c29jay0+c2stPnNrX3dyaXRlX3BlbmRpbmctLTsKKwkJY2xlYXJfYml0KFNPQ0tfQVNZTkNfTk9TUEFDRSwgJmNvbi0+c29jay0+ZmxhZ3MpOworCX0KKworCWlmICghdGVzdF9hbmRfc2V0X2JpdChDRl9XUklURV9QRU5ESU5HLCAmY29uLT5mbGFncykpCiAJCXF1ZXVlX3dvcmsoc2VuZF93b3JrcXVldWUsICZjb24tPnN3b3JrKTsKIH0KIApAQCAtOTE1LDYgKzkyOSw3IEBACiAJc3RydWN0IHNvY2thZGRyX3N0b3JhZ2Ugc2FkZHIsIHNyY19hZGRyOwogCWludCBhZGRyX2xlbjsKIAlzdHJ1Y3Qgc29ja2V0ICpzb2NrID0gTlVMTDsKKwlpbnQgb25lID0gMTsKIAogCWlmIChjb24tPm5vZGVpZCA9PSAwKSB7CiAJCWxvZ19wcmludCgiYXR0ZW1wdCB0byBjb25uZWN0IHNvY2sgMCBmb2lsZWQiKTsKQEAgLTk2MCw2ICs5NzUsMTEgQEAKIAltYWtlX3NvY2thZGRyKCZzYWRkciwgZGxtX2NvbmZpZy5jaV90Y3BfcG9ydCwgJmFkZHJfbGVuKTsKIAogCWxvZ19wcmludCgiY29ubmVjdGluZyB0byAlZCIsIGNvbi0+bm9kZWlkKTsKKworCS8qIFR1cm4gb2ZmIE5hZ2xlJ3MgYWxnb3JpdGhtICovCisJa2VybmVsX3NldHNvY2tvcHQoc29jaywgU09MX1RDUCwgVENQX05PREVMQVksIChjaGFyICopJm9uZSwKKwkJCSAgc2l6ZW9mKG9uZSkpOworCiAJcmVzdWx0ID0KIAkJc29jay0+b3BzLT5jb25uZWN0KHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2FkZHIsIGFkZHJfbGVuLAogCQkJCSAgIE9fTk9OQkxPQ0spOwpAQCAtMTAxMSw2ICsxMDMxLDEwIEBACiAJCWdvdG8gY3JlYXRlX291dDsKIAl9CiAKKwkvKiBUdXJuIG9mZiBOYWdsZSdzIGFsZ29yaXRobSAqLworCWtlcm5lbF9zZXRzb2Nrb3B0KHNvY2ssIFNPTF9UQ1AsIFRDUF9OT0RFTEFZLCAoY2hhciAqKSZvbmUsCisJCQkgIHNpemVvZihvbmUpKTsKKwogCXJlc3VsdCA9IGtlcm5lbF9zZXRzb2Nrb3B0KHNvY2ssIFNPTF9TT0NLRVQsIFNPX1JFVVNFQUREUiwKIAkJCQkgICAoY2hhciAqKSZvbmUsIHNpemVvZihvbmUpKTsKIApAQCAtMTI5Nyw2ICsxMzIxLDcgQEAKIAljb25zdCBpbnQgbXNnX2ZsYWdzID0gTVNHX0RPTlRXQUlUIHwgTVNHX05PU0lHTkFMOwogCXN0cnVjdCB3cml0ZXF1ZXVlX2VudHJ5ICplOwogCWludCBsZW4sIG9mZnNldDsKKwlpbnQgY291bnQgPSAwOwogCiAJbXV0ZXhfbG9jaygmY29uLT5zb2NrX211dGV4KTsKIAlpZiAoY29uLT5zb2NrID09IE5VTEwpCkBAIC0xMzE5LDE0ICsxMzQ0LDI3IEBACiAJCQlyZXQgPSBrZXJuZWxfc2VuZHBhZ2UoY29uLT5zb2NrLCBlLT5wYWdlLCBvZmZzZXQsIGxlbiwKIAkJCQkJICAgICAgbXNnX2ZsYWdzKTsKIAkJCWlmIChyZXQgPT0gLUVBR0FJTiB8fCByZXQgPT0gMCkgeworCQkJCWlmIChyZXQgPT0gLUVBR0FJTiAmJgorCQkJCSAgICB0ZXN0X2JpdChTT0NLX0FTWU5DX05PU1BBQ0UsICZjb24tPnNvY2stPmZsYWdzKSAmJgorCQkJCSAgICAhdGVzdF9hbmRfc2V0X2JpdChDRl9BUFBfTElNSVRFRCwgJmNvbi0+ZmxhZ3MpKSB7CisJCQkJCS8qIE5vdGlmeSBUQ1AgdGhhdCB3ZSdyZSBsaW1pdGVkIGJ5IHRoZQorCQkJCQkgKiBhcHBsaWNhdGlvbiB3aW5kb3cgc2l6ZS4KKwkJCQkJICovCisJCQkJCXNldF9iaXQoU09DS19OT1NQQUNFLCAmY29uLT5zb2NrLT5mbGFncyk7CisJCQkJCWNvbi0+c29jay0+c2stPnNrX3dyaXRlX3BlbmRpbmcrKzsKKwkJCQl9CiAJCQkJY29uZF9yZXNjaGVkKCk7CiAJCQkJZ290byBvdXQ7CiAJCQl9CiAJCQlpZiAocmV0IDw9IDApCiAJCQkJZ290byBzZW5kX2Vycm9yOwogCQl9Ci0JCQkvKiBEb24ndCBzdGFydmUgcGVvcGxlIGZpbGxpbmcgYnVmZmVycyAqLworCisJCS8qIERvbid0IHN0YXJ2ZSBwZW9wbGUgZmlsbGluZyBidWZmZXJzICovCisJCWlmICgrK2NvdW50ID49IE1BWF9TRU5EX01TR19DT1VOVCkgewogCQkJY29uZF9yZXNjaGVkKCk7CisJCQljb3VudCA9IDA7CisJCX0KIAogCQlzcGluX2xvY2soJmNvbi0+d3JpdGVxdWV1ZV9sb2NrKTsKIAkJZS0+b2Zmc2V0ICs9IHJldDsKQEAgLTE0MzAsMjAgKzE0NjgsMTkgQEAKIAogc3RhdGljIGludCB3b3JrX3N0YXJ0KHZvaWQpCiB7Ci0JaW50IGVycm9yOwotCXJlY3Zfd29ya3F1ZXVlID0gY3JlYXRlX3dvcmtxdWV1ZSgiZGxtX3JlY3YiKTsKLQllcnJvciA9IElTX0VSUihyZWN2X3dvcmtxdWV1ZSk7Ci0JaWYgKGVycm9yKSB7Ci0JCWxvZ19wcmludCgiY2FuJ3Qgc3RhcnQgZGxtX3JlY3YgJWQiLCBlcnJvcik7Ci0JCXJldHVybiBlcnJvcjsKKwlyZWN2X3dvcmtxdWV1ZSA9IGFsbG9jX3dvcmtxdWV1ZSgiZGxtX3JlY3YiLCBXUV9NRU1fUkVDTEFJTSB8CisJCQkJCSBXUV9ISUdIUFJJIHwgV1FfRlJFRVpFQUJMRSwgMCk7CisJaWYgKCFyZWN2X3dvcmtxdWV1ZSkgeworCQlsb2dfcHJpbnQoImNhbid0IHN0YXJ0IGRsbV9yZWN2Iik7CisJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCXNlbmRfd29ya3F1ZXVlID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoImRsbV9zZW5kIik7Ci0JZXJyb3IgPSBJU19FUlIoc2VuZF93b3JrcXVldWUpOwotCWlmIChlcnJvcikgewotCQlsb2dfcHJpbnQoImNhbid0IHN0YXJ0IGRsbV9zZW5kICVkIiwgZXJyb3IpOworCXNlbmRfd29ya3F1ZXVlID0gYWxsb2Nfd29ya3F1ZXVlKCJkbG1fc2VuZCIsIFdRX01FTV9SRUNMQUlNIHwKKwkJCQkJIFdRX0hJR0hQUkkgfCBXUV9GUkVFWkVBQkxFLCAwKTsKKwlpZiAoIXNlbmRfd29ya3F1ZXVlKSB7CisJCWxvZ19wcmludCgiY2FuJ3Qgc3RhcnQgZGxtX3NlbmQiKTsKIAkJZGVzdHJveV93b3JrcXVldWUocmVjdl93b3JrcXVldWUpOwotCQlyZXR1cm4gZXJyb3I7CisJCXJldHVybiAtRU5PTUVNOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZnMvZWNyeXB0ZnMvZGVudHJ5LmMgYi9mcy9lY3J5cHRmcy9kZW50cnkuYwppbmRleCA5MDZlODAzLi42ZmM0ZjMxIDEwMDY0NAotLS0gYS9mcy9lY3J5cHRmcy9kZW50cnkuYworKysgYi9mcy9lY3J5cHRmcy9kZW50cnkuYwpAQCAtNDQsMTIgKzQ0LDE3IEBACiAgKi8KIHN0YXRpYyBpbnQgZWNyeXB0ZnNfZF9yZXZhbGlkYXRlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IG5hbWVpZGF0YSAqbmQpCiB7Ci0Jc3RydWN0IGRlbnRyeSAqbG93ZXJfZGVudHJ5ID0gZWNyeXB0ZnNfZGVudHJ5X3RvX2xvd2VyKGRlbnRyeSk7Ci0Jc3RydWN0IHZmc21vdW50ICpsb3dlcl9tbnQgPSBlY3J5cHRmc19kZW50cnlfdG9fbG93ZXJfbW50KGRlbnRyeSk7CisJc3RydWN0IGRlbnRyeSAqbG93ZXJfZGVudHJ5OworCXN0cnVjdCB2ZnNtb3VudCAqbG93ZXJfbW50OwogCXN0cnVjdCBkZW50cnkgKmRlbnRyeV9zYXZlOwogCXN0cnVjdCB2ZnNtb3VudCAqdmZzbW91bnRfc2F2ZTsKIAlpbnQgcmMgPSAxOwogCisJaWYgKG5kLT5mbGFncyAmIExPT0tVUF9SQ1UpCisJCXJldHVybiAtRUNISUxEOworCisJbG93ZXJfZGVudHJ5ID0gZWNyeXB0ZnNfZGVudHJ5X3RvX2xvd2VyKGRlbnRyeSk7CisJbG93ZXJfbW50ID0gZWNyeXB0ZnNfZGVudHJ5X3RvX2xvd2VyX21udChkZW50cnkpOwogCWlmICghbG93ZXJfZGVudHJ5LT5kX29wIHx8ICFsb3dlcl9kZW50cnktPmRfb3AtPmRfcmV2YWxpZGF0ZSkKIAkJZ290byBvdXQ7CiAJZGVudHJ5X3NhdmUgPSBuZC0+cGF0aC5kZW50cnk7CmRpZmYgLS1naXQgYS9mcy9lY3J5cHRmcy9pbm9kZS5jIGIvZnMvZWNyeXB0ZnMvaW5vZGUuYwppbmRleCA5ZDFhMjJkLi4zMzczNTJhIDEwMDY0NAotLS0gYS9mcy9lY3J5cHRmcy9pbm9kZS5jCisrKyBiL2ZzL2VjcnlwdGZzL2lub2RlLmMKQEAgLTI2MCw3ICsyNjAsNyBAQAogCQkJCSAgIGVjcnlwdGZzX2RlbnRyeS0+ZF9wYXJlbnQpKTsKIAlsb3dlcl9pbm9kZSA9IGxvd2VyX2RlbnRyeS0+ZF9pbm9kZTsKIAlmc3N0YWNrX2NvcHlfYXR0cl9hdGltZShlY3J5cHRmc19kaXJfaW5vZGUsIGxvd2VyX2Rpcl9kZW50cnktPmRfaW5vZGUpOwotCUJVR19PTighYXRvbWljX3JlYWQoJmxvd2VyX2RlbnRyeS0+ZF9jb3VudCkpOworCUJVR19PTighbG93ZXJfZGVudHJ5LT5kX2NvdW50KTsKIAllY3J5cHRmc19zZXRfZGVudHJ5X3ByaXZhdGUoZWNyeXB0ZnNfZGVudHJ5LAogCQkJCSAgICBrbWVtX2NhY2hlX2FsbG9jKGVjcnlwdGZzX2RlbnRyeV9pbmZvX2NhY2hlLAogCQkJCQkJICAgICBHRlBfS0VSTkVMKSk7CkBAIC00NDEsNyArNDQxLDcgQEAKIAlzdHJ1Y3QgcXN0ciBsb3dlcl9uYW1lOwogCWludCByYyA9IDA7CiAKLQllY3J5cHRmc19kZW50cnktPmRfb3AgPSAmZWNyeXB0ZnNfZG9wczsKKwlkX3NldF9kX29wKGVjcnlwdGZzX2RlbnRyeSwgJmVjcnlwdGZzX2RvcHMpOwogCWlmICgoZWNyeXB0ZnNfZGVudHJ5LT5kX25hbWUubGVuID09IDEKIAkgICAgICYmICFzdHJjbXAoZWNyeXB0ZnNfZGVudHJ5LT5kX25hbWUubmFtZSwgIi4iKSkKIAkgICAgfHwgKGVjcnlwdGZzX2RlbnRyeS0+ZF9uYW1lLmxlbiA9PSAyCkBAIC00NTQsNyArNDU0LDcgQEAKIAlsb3dlcl9uYW1lLmhhc2ggPSBlY3J5cHRmc19kZW50cnktPmRfbmFtZS5oYXNoOwogCWlmIChsb3dlcl9kaXJfZGVudHJ5LT5kX29wICYmIGxvd2VyX2Rpcl9kZW50cnktPmRfb3AtPmRfaGFzaCkgewogCQlyYyA9IGxvd2VyX2Rpcl9kZW50cnktPmRfb3AtPmRfaGFzaChsb3dlcl9kaXJfZGVudHJ5LAotCQkJCQkJICAgICZsb3dlcl9uYW1lKTsKKwkJCQlsb3dlcl9kaXJfZGVudHJ5LT5kX2lub2RlLCAmbG93ZXJfbmFtZSk7CiAJCWlmIChyYyA8IDApCiAJCQlnb3RvIG91dF9kX2Ryb3A7CiAJfQpAQCAtNDg5LDcgKzQ4OSw3IEBACiAJbG93ZXJfbmFtZS5oYXNoID0gZnVsbF9uYW1lX2hhc2gobG93ZXJfbmFtZS5uYW1lLCBsb3dlcl9uYW1lLmxlbik7CiAJaWYgKGxvd2VyX2Rpcl9kZW50cnktPmRfb3AgJiYgbG93ZXJfZGlyX2RlbnRyeS0+ZF9vcC0+ZF9oYXNoKSB7CiAJCXJjID0gbG93ZXJfZGlyX2RlbnRyeS0+ZF9vcC0+ZF9oYXNoKGxvd2VyX2Rpcl9kZW50cnksCi0JCQkJCQkgICAgJmxvd2VyX25hbWUpOworCQkJCWxvd2VyX2Rpcl9kZW50cnktPmRfaW5vZGUsICZsb3dlcl9uYW1lKTsKIAkJaWYgKHJjIDwgMCkKIAkJCWdvdG8gb3V0X2RfZHJvcDsKIAl9CkBAIC05ODAsOCArOTgwLDEwIEBACiB9CiAKIHN0YXRpYyBpbnQKLWVjcnlwdGZzX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spCitlY3J5cHRmc19wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CisJaWYgKGZsYWdzICYgSVBFUk1fRkxBR19SQ1UpCisJCXJldHVybiAtRUNISUxEOwogCXJldHVybiBpbm9kZV9wZXJtaXNzaW9uKGVjcnlwdGZzX2lub2RlX3RvX2xvd2VyKGlub2RlKSwgbWFzayk7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2VjcnlwdGZzL21haW4uYyBiL2ZzL2VjcnlwdGZzL21haW4uYwppbmRleCBhOWRiZDYyLi4zNTEwMzg2IDEwMDY0NAotLS0gYS9mcy9lY3J5cHRmcy9tYWluLmMKKysrIGIvZnMvZWNyeXB0ZnMvbWFpbi5jCkBAIC0xODksNyArMTg5LDcgQEAKIAlpZiAoc3BlY2lhbF9maWxlKGxvd2VyX2lub2RlLT5pX21vZGUpKQogCQlpbml0X3NwZWNpYWxfaW5vZGUoaW5vZGUsIGxvd2VyX2lub2RlLT5pX21vZGUsCiAJCQkJICAgbG93ZXJfaW5vZGUtPmlfcmRldik7Ci0JZGVudHJ5LT5kX29wID0gJmVjcnlwdGZzX2RvcHM7CisJZF9zZXRfZF9vcChkZW50cnksICZlY3J5cHRmc19kb3BzKTsKIAlmc3N0YWNrX2NvcHlfYXR0cl9hbGwoaW5vZGUsIGxvd2VyX2lub2RlKTsKIAkvKiBUaGlzIHNpemUgd2lsbCBiZSBvdmVyd3JpdHRlbiBmb3IgcmVhbCBmaWxlcyB3LyBoZWFkZXJzIGFuZAogCSAqIG90aGVyIG1ldGFkYXRhICovCkBAIC01OTQsNyArNTk0LDcgQEAKIAkJZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXIocyk7CiAJCWdvdG8gb3V0OwogCX0KLQlzLT5zX3Jvb3QtPmRfb3AgPSAmZWNyeXB0ZnNfZG9wczsKKwlkX3NldF9kX29wKHMtPnNfcm9vdCwgJmVjcnlwdGZzX2RvcHMpOwogCXMtPnNfcm9vdC0+ZF9zYiA9IHM7CiAJcy0+c19yb290LT5kX3BhcmVudCA9IHMtPnNfcm9vdDsKIApkaWZmIC0tZ2l0IGEvZnMvZWNyeXB0ZnMvc3VwZXIuYyBiL2ZzL2VjcnlwdGZzL3N1cGVyLmMKaW5kZXggMjcyMDE3OC4uMzA0MmZlMSAxMDA2NDQKLS0tIGEvZnMvZWNyeXB0ZnMvc3VwZXIuYworKysgYi9mcy9lY3J5cHRmcy9zdXBlci5jCkBAIC02Miw2ICs2MiwxNiBAQAogCXJldHVybiBpbm9kZTsKIH0KIAorc3RhdGljIHZvaWQgZWNyeXB0ZnNfaV9jYWxsYmFjayhzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgaW5vZGUsIGlfcmN1KTsKKwlzdHJ1Y3QgZWNyeXB0ZnNfaW5vZGVfaW5mbyAqaW5vZGVfaW5mbzsKKwlpbm9kZV9pbmZvID0gZWNyeXB0ZnNfaW5vZGVfdG9fcHJpdmF0ZShpbm9kZSk7CisKKwlJTklUX0xJU1RfSEVBRCgmaW5vZGUtPmlfZGVudHJ5KTsKKwlrbWVtX2NhY2hlX2ZyZWUoZWNyeXB0ZnNfaW5vZGVfaW5mb19jYWNoZSwgaW5vZGVfaW5mbyk7Cit9CisKIC8qKgogICogZWNyeXB0ZnNfZGVzdHJveV9pbm9kZQogICogQGlub2RlOiBUaGUgZWNyeXB0ZnMgaW5vZGUKQEAgLTg4LDcgKzk4LDcgQEAKIAkJfQogCX0KIAllY3J5cHRmc19kZXN0cm95X2NyeXB0X3N0YXQoJmlub2RlX2luZm8tPmNyeXB0X3N0YXQpOwotCWttZW1fY2FjaGVfZnJlZShlY3J5cHRmc19pbm9kZV9pbmZvX2NhY2hlLCBpbm9kZV9pbmZvKTsKKwljYWxsX3JjdSgmaW5vZGUtPmlfcmN1LCBlY3J5cHRmc19pX2NhbGxiYWNrKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9mcy9lZnMvc3VwZXIuYyBiL2ZzL2Vmcy9zdXBlci5jCmluZGV4IDUwNzNhMDcuLjBmMzFhY2IgMTAwNjQ0Ci0tLSBhL2ZzL2Vmcy9zdXBlci5jCisrKyBiL2ZzL2Vmcy9zdXBlci5jCkBAIC02NSw5ICs2NSwxNiBAQAogCXJldHVybiAmZWktPnZmc19pbm9kZTsKIH0KIAorc3RhdGljIHZvaWQgZWZzX2lfY2FsbGJhY2soc3RydWN0IHJjdV9oZWFkICpoZWFkKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGlub2RlLCBpX3JjdSk7CisJSU5JVF9MSVNUX0hFQUQoJmlub2RlLT5pX2RlbnRyeSk7CisJa21lbV9jYWNoZV9mcmVlKGVmc19pbm9kZV9jYWNoZXAsIElOT0RFX0lORk8oaW5vZGUpKTsKK30KKwogc3RhdGljIHZvaWQgZWZzX2Rlc3Ryb3lfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIHsKLQlrbWVtX2NhY2hlX2ZyZWUoZWZzX2lub2RlX2NhY2hlcCwgSU5PREVfSU5GTyhpbm9kZSkpOworCWNhbGxfcmN1KCZpbm9kZS0+aV9yY3UsIGVmc19pX2NhbGxiYWNrKTsKIH0KIAogc3RhdGljIHZvaWQgaW5pdF9vbmNlKHZvaWQgKmZvbykKZGlmZiAtLWdpdCBhL2ZzL2V4b2ZzL3N1cGVyLmMgYi9mcy9leG9mcy9zdXBlci5jCmluZGV4IDc5YzNhZTYuLjhjNmM0NjYgMTAwNjQ0Ci0tLSBhL2ZzL2V4b2ZzL3N1cGVyLmMKKysrIGIvZnMvZXhvZnMvc3VwZXIuYwpAQCAtMTUwLDEyICsxNTAsMTkgQEAKIAlyZXR1cm4gJm9pLT52ZnNfaW5vZGU7CiB9CiAKK3N0YXRpYyB2b2lkIGV4b2ZzX2lfY2FsbGJhY2soc3RydWN0IHJjdV9oZWFkICpoZWFkKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGlub2RlLCBpX3JjdSk7CisJSU5JVF9MSVNUX0hFQUQoJmlub2RlLT5pX2RlbnRyeSk7CisJa21lbV9jYWNoZV9mcmVlKGV4b2ZzX2lub2RlX2NhY2hlcCwgZXhvZnNfaShpbm9kZSkpOworfQorCiAvKgogICogUmVtb3ZlIGFuIGlub2RlIGZyb20gdGhlIGNhY2hlCiAgKi8KIHN0YXRpYyB2b2lkIGV4b2ZzX2Rlc3Ryb3lfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIHsKLQlrbWVtX2NhY2hlX2ZyZWUoZXhvZnNfaW5vZGVfY2FjaGVwLCBleG9mc19pKGlub2RlKSk7CisJY2FsbF9yY3UoJmlub2RlLT5pX3JjdSwgZXhvZnNfaV9jYWxsYmFjayk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9mcy9leHBvcnRmcy9leHBmcy5jIGIvZnMvZXhwb3J0ZnMvZXhwZnMuYwppbmRleCA1MWIzMDQwLi40YjY4MjU3IDEwMDY0NAotLS0gYS9mcy9leHBvcnRmcy9leHBmcy5jCisrKyBiL2ZzL2V4cG9ydGZzL2V4cGZzLmMKQEAgLTQzLDI0ICs0MywyNiBAQAogCQl2b2lkICpjb250ZXh0KQogewogCXN0cnVjdCBkZW50cnkgKmRlbnRyeSwgKnRvcHV0ID0gTlVMTDsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOwogCiAJaWYgKGFjY2VwdGFibGUoY29udGV4dCwgcmVzdWx0KSkKIAkJcmV0dXJuIHJlc3VsdDsKIAotCXNwaW5fbG9jaygmZGNhY2hlX2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoZGVudHJ5LCAmcmVzdWx0LT5kX2lub2RlLT5pX2RlbnRyeSwgZF9hbGlhcykgewotCQlkZ2V0X2xvY2tlZChkZW50cnkpOwotCQlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOworCWlub2RlID0gcmVzdWx0LT5kX2lub2RlOworCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShkZW50cnksICZpbm9kZS0+aV9kZW50cnksIGRfYWxpYXMpIHsKKwkJZGdldChkZW50cnkpOworCQlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7CiAJCWlmICh0b3B1dCkKIAkJCWRwdXQodG9wdXQpOwogCQlpZiAoZGVudHJ5ICE9IHJlc3VsdCAmJiBhY2NlcHRhYmxlKGNvbnRleHQsIGRlbnRyeSkpIHsKIAkJCWRwdXQocmVzdWx0KTsKIAkJCXJldHVybiBkZW50cnk7CiAJCX0KLQkJc3Bpbl9sb2NrKCZkY2FjaGVfbG9jayk7CisJCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7CiAJCXRvcHV0ID0gZGVudHJ5OwogCX0KLQlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOworCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKIAogCWlmICh0b3B1dCkKIAkJZHB1dCh0b3B1dCk7CmRpZmYgLS1naXQgYS9mcy9leHQyL2FjbC5jIGIvZnMvZXh0Mi9hY2wuYwppbmRleCAyYmNjMDQzLi43YjQxODA1IDEwMDY0NAotLS0gYS9mcy9leHQyL2FjbC5jCisrKyBiL2ZzL2V4dDIvYWNsLmMKQEAgLTIzMiwxMCArMjMyLDE3IEBACiB9CiAKIGludAotZXh0Ml9jaGVja19hY2woc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spCitleHQyX2NoZWNrX2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaywgdW5zaWduZWQgaW50IGZsYWdzKQogewotCXN0cnVjdCBwb3NpeF9hY2wgKmFjbCA9IGV4dDJfZ2V0X2FjbChpbm9kZSwgQUNMX1RZUEVfQUNDRVNTKTsKKwlzdHJ1Y3QgcG9zaXhfYWNsICphY2w7CiAKKwlpZiAoZmxhZ3MgJiBJUEVSTV9GTEFHX1JDVSkgeworCQlpZiAoIW5lZ2F0aXZlX2NhY2hlZF9hY2woaW5vZGUsIEFDTF9UWVBFX0FDQ0VTUykpCisJCQlyZXR1cm4gLUVDSElMRDsKKwkJcmV0dXJuIC1FQUdBSU47CisJfQorCisJYWNsID0gZXh0Ml9nZXRfYWNsKGlub2RlLCBBQ0xfVFlQRV9BQ0NFU1MpOwogCWlmIChJU19FUlIoYWNsKSkKIAkJcmV0dXJuIFBUUl9FUlIoYWNsKTsKIAlpZiAoYWNsKSB7CmRpZmYgLS1naXQgYS9mcy9leHQyL2FjbC5oIGIvZnMvZXh0Mi9hY2wuaAppbmRleCAzZmY2Y2JiLi5jOTM5YjdiIDEwMDY0NAotLS0gYS9mcy9leHQyL2FjbC5oCisrKyBiL2ZzL2V4dDIvYWNsLmgKQEAgLTU0LDcgKzU0LDcgQEAKICNpZmRlZiBDT05GSUdfRVhUMl9GU19QT1NJWF9BQ0wKIAogLyogYWNsLmMgKi8KLWV4dGVybiBpbnQgZXh0Ml9jaGVja19hY2wgKHN0cnVjdCBpbm9kZSAqLCBpbnQpOworZXh0ZXJuIGludCBleHQyX2NoZWNrX2FjbCAoc3RydWN0IGlub2RlICosIGludCwgdW5zaWduZWQgaW50KTsKIGV4dGVybiBpbnQgZXh0Ml9hY2xfY2htb2QgKHN0cnVjdCBpbm9kZSAqKTsKIGV4dGVybiBpbnQgZXh0Ml9pbml0X2FjbCAoc3RydWN0IGlub2RlICosIHN0cnVjdCBpbm9kZSAqKTsKIApkaWZmIC0tZ2l0IGEvZnMvZXh0Mi9zdXBlci5jIGIvZnMvZXh0Mi9zdXBlci5jCmluZGV4IGQ4OWUwYjYuLmUwYzYzODAgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDIvc3VwZXIuYworKysgYi9mcy9leHQyL3N1cGVyLmMKQEAgLTE2MSw5ICsxNjEsMTYgQEAKIAlyZXR1cm4gJmVpLT52ZnNfaW5vZGU7CiB9CiAKK3N0YXRpYyB2b2lkIGV4dDJfaV9jYWxsYmFjayhzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgaW5vZGUsIGlfcmN1KTsKKwlJTklUX0xJU1RfSEVBRCgmaW5vZGUtPmlfZGVudHJ5KTsKKwlrbWVtX2NhY2hlX2ZyZWUoZXh0Ml9pbm9kZV9jYWNoZXAsIEVYVDJfSShpbm9kZSkpOworfQorCiBzdGF0aWMgdm9pZCBleHQyX2Rlc3Ryb3lfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIHsKLQlrbWVtX2NhY2hlX2ZyZWUoZXh0Ml9pbm9kZV9jYWNoZXAsIEVYVDJfSShpbm9kZSkpOworCWNhbGxfcmN1KCZpbm9kZS0+aV9yY3UsIGV4dDJfaV9jYWxsYmFjayk7CiB9CiAKIHN0YXRpYyB2b2lkIGluaXRfb25jZSh2b2lkICpmb28pCmRpZmYgLS1naXQgYS9mcy9leHQzL2FjbC5jIGIvZnMvZXh0My9hY2wuYwppbmRleCA4YTExZmUyLi5lNGZhNDllIDEwMDY0NAotLS0gYS9mcy9leHQzL2FjbC5jCisrKyBiL2ZzL2V4dDMvYWNsLmMKQEAgLTI0MCwxMCArMjQwLDE3IEBACiB9CiAKIGludAotZXh0M19jaGVja19hY2woc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spCitleHQzX2NoZWNrX2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaywgdW5zaWduZWQgaW50IGZsYWdzKQogewotCXN0cnVjdCBwb3NpeF9hY2wgKmFjbCA9IGV4dDNfZ2V0X2FjbChpbm9kZSwgQUNMX1RZUEVfQUNDRVNTKTsKKwlzdHJ1Y3QgcG9zaXhfYWNsICphY2w7CiAKKwlpZiAoZmxhZ3MgJiBJUEVSTV9GTEFHX1JDVSkgeworCQlpZiAoIW5lZ2F0aXZlX2NhY2hlZF9hY2woaW5vZGUsIEFDTF9UWVBFX0FDQ0VTUykpCisJCQlyZXR1cm4gLUVDSElMRDsKKwkJcmV0dXJuIC1FQUdBSU47CisJfQorCisJYWNsID0gZXh0M19nZXRfYWNsKGlub2RlLCBBQ0xfVFlQRV9BQ0NFU1MpOwogCWlmIChJU19FUlIoYWNsKSkKIAkJcmV0dXJuIFBUUl9FUlIoYWNsKTsKIAlpZiAoYWNsKSB7CmRpZmYgLS1naXQgYS9mcy9leHQzL2FjbC5oIGIvZnMvZXh0My9hY2wuaAppbmRleCA1OTczMzQ2Li41ZmFmODA0OCAxMDA2NDQKLS0tIGEvZnMvZXh0My9hY2wuaAorKysgYi9mcy9leHQzL2FjbC5oCkBAIC01NCw3ICs1NCw3IEBACiAjaWZkZWYgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMCiAKIC8qIGFjbC5jICovCi1leHRlcm4gaW50IGV4dDNfY2hlY2tfYWNsIChzdHJ1Y3QgaW5vZGUgKiwgaW50KTsKK2V4dGVybiBpbnQgZXh0M19jaGVja19hY2wgKHN0cnVjdCBpbm9kZSAqLCBpbnQsIHVuc2lnbmVkIGludCk7CiBleHRlcm4gaW50IGV4dDNfYWNsX2NobW9kIChzdHJ1Y3QgaW5vZGUgKik7CiBleHRlcm4gaW50IGV4dDNfaW5pdF9hY2wgKGhhbmRsZV90ICosIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgaW5vZGUgKik7CiAKZGlmZiAtLWdpdCBhL2ZzL2V4dDMvc3VwZXIuYyBiL2ZzL2V4dDMvc3VwZXIuYwppbmRleCBhY2Y4Njk1Li43N2NlMTYxIDEwMDY0NAotLS0gYS9mcy9leHQzL3N1cGVyLmMKKysrIGIvZnMvZXh0My9zdXBlci5jCkBAIC00NzksNiArNDc5LDEzIEBACiAJcmV0dXJuICZlaS0+dmZzX2lub2RlOwogfQogCitzdGF0aWMgdm9pZCBleHQzX2lfY2FsbGJhY2soc3RydWN0IHJjdV9oZWFkICpoZWFkKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGlub2RlLCBpX3JjdSk7CisJSU5JVF9MSVNUX0hFQUQoJmlub2RlLT5pX2RlbnRyeSk7CisJa21lbV9jYWNoZV9mcmVlKGV4dDNfaW5vZGVfY2FjaGVwLCBFWFQzX0koaW5vZGUpKTsKK30KKwogc3RhdGljIHZvaWQgZXh0M19kZXN0cm95X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJaWYgKCFsaXN0X2VtcHR5KCYoRVhUM19JKGlub2RlKS0+aV9vcnBoYW4pKSkgewpAQCAtNDg5LDcgKzQ5Niw3IEBACiAJCQkJZmFsc2UpOwogCQlkdW1wX3N0YWNrKCk7CiAJfQotCWttZW1fY2FjaGVfZnJlZShleHQzX2lub2RlX2NhY2hlcCwgRVhUM19JKGlub2RlKSk7CisJY2FsbF9yY3UoJmlub2RlLT5pX3JjdSwgZXh0M19pX2NhbGxiYWNrKTsKIH0KIAogc3RhdGljIHZvaWQgaW5pdF9vbmNlKHZvaWQgKmZvbykKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvYWNsLmMgYi9mcy9leHQ0L2FjbC5jCmluZGV4IDVlMmVkNDUuLmUwMjcwZDEgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvYWNsLmMKKysrIGIvZnMvZXh0NC9hY2wuYwpAQCAtMjM4LDEwICsyMzgsMTcgQEAKIH0KIAogaW50Ci1leHQ0X2NoZWNrX2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaykKK2V4dDRfY2hlY2tfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7Ci0Jc3RydWN0IHBvc2l4X2FjbCAqYWNsID0gZXh0NF9nZXRfYWNsKGlub2RlLCBBQ0xfVFlQRV9BQ0NFU1MpOworCXN0cnVjdCBwb3NpeF9hY2wgKmFjbDsKIAorCWlmIChmbGFncyAmIElQRVJNX0ZMQUdfUkNVKSB7CisJCWlmICghbmVnYXRpdmVfY2FjaGVkX2FjbChpbm9kZSwgQUNMX1RZUEVfQUNDRVNTKSkKKwkJCXJldHVybiAtRUNISUxEOworCQlyZXR1cm4gLUVBR0FJTjsKKwl9CisKKwlhY2wgPSBleHQ0X2dldF9hY2woaW5vZGUsIEFDTF9UWVBFX0FDQ0VTUyk7CiAJaWYgKElTX0VSUihhY2wpKQogCQlyZXR1cm4gUFRSX0VSUihhY2wpOwogCWlmIChhY2wpIHsKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvYWNsLmggYi9mcy9leHQ0L2FjbC5oCmluZGV4IDlkODQzZDUuLmRlYzgyMTEgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvYWNsLmgKKysrIGIvZnMvZXh0NC9hY2wuaApAQCAtNTQsNyArNTQsNyBAQAogI2lmZGVmIENPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTAogCiAvKiBhY2wuYyAqLwotZXh0ZXJuIGludCBleHQ0X2NoZWNrX2FjbChzdHJ1Y3QgaW5vZGUgKiwgaW50KTsKK2V4dGVybiBpbnQgZXh0NF9jaGVja19hY2woc3RydWN0IGlub2RlICosIGludCwgdW5zaWduZWQgaW50KTsKIGV4dGVybiBpbnQgZXh0NF9hY2xfY2htb2Qoc3RydWN0IGlub2RlICopOwogZXh0ZXJuIGludCBleHQ0X2luaXRfYWNsKGhhbmRsZV90ICosIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgaW5vZGUgKik7CiAKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvc3VwZXIuYyBiL2ZzL2V4dDQvc3VwZXIuYwppbmRleCBmYjE1YzljLi5jZDM3ZjlkIDEwMDY0NAotLS0gYS9mcy9leHQ0L3N1cGVyLmMKKysrIGIvZnMvZXh0NC9zdXBlci5jCkBAIC04NDEsNiArODQxLDEzIEBACiAJcmV0dXJuIGRyb3A7CiB9CiAKK3N0YXRpYyB2b2lkIGV4dDRfaV9jYWxsYmFjayhzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgaW5vZGUsIGlfcmN1KTsKKwlJTklUX0xJU1RfSEVBRCgmaW5vZGUtPmlfZGVudHJ5KTsKKwlrbWVtX2NhY2hlX2ZyZWUoZXh0NF9pbm9kZV9jYWNoZXAsIEVYVDRfSShpbm9kZSkpOworfQorCiBzdGF0aWMgdm9pZCBleHQ0X2Rlc3Ryb3lfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlleHQ0X2lvZW5kX3dhaXQoaW5vZGUpOwpAQCAtODUzLDcgKzg2MCw3IEBACiAJCQkJdHJ1ZSk7CiAJCWR1bXBfc3RhY2soKTsKIAl9Ci0Ja21lbV9jYWNoZV9mcmVlKGV4dDRfaW5vZGVfY2FjaGVwLCBFWFQ0X0koaW5vZGUpKTsKKwljYWxsX3JjdSgmaW5vZGUtPmlfcmN1LCBleHQ0X2lfY2FsbGJhY2spOwogfQogCiBzdGF0aWMgdm9pZCBpbml0X29uY2Uodm9pZCAqZm9vKQpkaWZmIC0tZ2l0IGEvZnMvZmF0L2lub2RlLmMgYi9mcy9mYXQvaW5vZGUuYwppbmRleCBhZDY5OThhLi4yMDYzNTFhIDEwMDY0NAotLS0gYS9mcy9mYXQvaW5vZGUuYworKysgYi9mcy9mYXQvaW5vZGUuYwpAQCAtNTE0LDkgKzUxNCwxNiBAQAogCXJldHVybiAmZWktPnZmc19pbm9kZTsKIH0KIAorc3RhdGljIHZvaWQgZmF0X2lfY2FsbGJhY2soc3RydWN0IHJjdV9oZWFkICpoZWFkKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGlub2RlLCBpX3JjdSk7CisJSU5JVF9MSVNUX0hFQUQoJmlub2RlLT5pX2RlbnRyeSk7CisJa21lbV9jYWNoZV9mcmVlKGZhdF9pbm9kZV9jYWNoZXAsIE1TRE9TX0koaW5vZGUpKTsKK30KKwogc3RhdGljIHZvaWQgZmF0X2Rlc3Ryb3lfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIHsKLQlrbWVtX2NhY2hlX2ZyZWUoZmF0X2lub2RlX2NhY2hlcCwgTVNET1NfSShpbm9kZSkpOworCWNhbGxfcmN1KCZpbm9kZS0+aV9yY3UsIGZhdF9pX2NhbGxiYWNrKTsKIH0KIAogc3RhdGljIHZvaWQgaW5pdF9vbmNlKHZvaWQgKmZvbykKQEAgLTc0Myw3ICs3NTAsNyBAQAogCSAqLwogCXJlc3VsdCA9IGRfb2J0YWluX2FsaWFzKGlub2RlKTsKIAlpZiAoIUlTX0VSUihyZXN1bHQpKQotCQlyZXN1bHQtPmRfb3AgPSBzYi0+c19yb290LT5kX29wOworCQlkX3NldF9kX29wKHJlc3VsdCwgc2ItPnNfcm9vdC0+ZF9vcCk7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtNzkzLDcgKzgwMCw3IEBACiAKIAlwYXJlbnQgPSBkX29idGFpbl9hbGlhcyhpbm9kZSk7CiAJaWYgKCFJU19FUlIocGFyZW50KSkKLQkJcGFyZW50LT5kX29wID0gc2ItPnNfcm9vdC0+ZF9vcDsKKwkJZF9zZXRfZF9vcChwYXJlbnQsIHNiLT5zX3Jvb3QtPmRfb3ApOwogb3V0OgogCXVubG9ja19zdXBlcihzYik7CiAKZGlmZiAtLWdpdCBhL2ZzL2ZhdC9uYW1laV9tc2Rvcy5jIGIvZnMvZmF0L25hbWVpX21zZG9zLmMKaW5kZXggMzM0NWFhYi4uMzVmZmU0MyAxMDA2NDQKLS0tIGEvZnMvZmF0L25hbWVpX21zZG9zLmMKKysrIGIvZnMvZmF0L25hbWVpX21zZG9zLmMKQEAgLTE0OCw3ICsxNDgsOCBAQAogICogdGhhdCB0aGUgZXhpc3RpbmcgZGVudHJ5IGNhbiBiZSB1c2VkLiBUaGUgbXNkb3MgZnMgcm91dGluZXMgd2lsbAogICogcmV0dXJuIEVOT0VOVCBvciBFSU5WQUwgYXMgYXBwcm9wcmlhdGUuCiAgKi8KLXN0YXRpYyBpbnQgbXNkb3NfaGFzaChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBxc3RyICpxc3RyKQorc3RhdGljIGludCBtc2Rvc19oYXNoKGNvbnN0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSwKKwkgICAgICAgc3RydWN0IHFzdHIgKnFzdHIpCiB7CiAJc3RydWN0IGZhdF9tb3VudF9vcHRpb25zICpvcHRpb25zID0gJk1TRE9TX1NCKGRlbnRyeS0+ZF9zYiktPm9wdGlvbnM7CiAJdW5zaWduZWQgY2hhciBtc2Rvc19uYW1lW01TRE9TX05BTUVdOwpAQCAtMTY0LDE2ICsxNjUsMTggQEAKICAqIENvbXBhcmUgdHdvIG1zZG9zIG5hbWVzLiBJZiBlaXRoZXIgb2YgdGhlIG5hbWVzIGFyZSBpbnZhbGlkLAogICogd2UgZmFsbCBiYWNrIHRvIGRvaW5nIHRoZSBzdGFuZGFyZCBuYW1lIGNvbXBhcmlzb24uCiAgKi8KLXN0YXRpYyBpbnQgbXNkb3NfY21wKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IHFzdHIgKmEsIHN0cnVjdCBxc3RyICpiKQorc3RhdGljIGludCBtc2Rvc19jbXAoY29uc3Qgc3RydWN0IGRlbnRyeSAqcGFyZW50LCBjb25zdCBzdHJ1Y3QgaW5vZGUgKnBpbm9kZSwKKwkJY29uc3Qgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQl1bnNpZ25lZCBpbnQgbGVuLCBjb25zdCBjaGFyICpzdHIsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKQogewotCXN0cnVjdCBmYXRfbW91bnRfb3B0aW9ucyAqb3B0aW9ucyA9ICZNU0RPU19TQihkZW50cnktPmRfc2IpLT5vcHRpb25zOworCXN0cnVjdCBmYXRfbW91bnRfb3B0aW9ucyAqb3B0aW9ucyA9ICZNU0RPU19TQihwYXJlbnQtPmRfc2IpLT5vcHRpb25zOwogCXVuc2lnbmVkIGNoYXIgYV9tc2Rvc19uYW1lW01TRE9TX05BTUVdLCBiX21zZG9zX25hbWVbTVNET1NfTkFNRV07CiAJaW50IGVycm9yOwogCi0JZXJyb3IgPSBtc2Rvc19mb3JtYXRfbmFtZShhLT5uYW1lLCBhLT5sZW4sIGFfbXNkb3NfbmFtZSwgb3B0aW9ucyk7CisJZXJyb3IgPSBtc2Rvc19mb3JtYXRfbmFtZShuYW1lLT5uYW1lLCBuYW1lLT5sZW4sIGFfbXNkb3NfbmFtZSwgb3B0aW9ucyk7CiAJaWYgKGVycm9yKQogCQlnb3RvIG9sZF9jb21wYXJlOwotCWVycm9yID0gbXNkb3NfZm9ybWF0X25hbWUoYi0+bmFtZSwgYi0+bGVuLCBiX21zZG9zX25hbWUsIG9wdGlvbnMpOworCWVycm9yID0gbXNkb3NfZm9ybWF0X25hbWUoc3RyLCBsZW4sIGJfbXNkb3NfbmFtZSwgb3B0aW9ucyk7CiAJaWYgKGVycm9yKQogCQlnb3RvIG9sZF9jb21wYXJlOwogCWVycm9yID0gbWVtY21wKGFfbXNkb3NfbmFtZSwgYl9tc2Rvc19uYW1lLCBNU0RPU19OQU1FKTsKQEAgLTE4Miw4ICsxODUsOCBAQAogCiBvbGRfY29tcGFyZToKIAllcnJvciA9IDE7Ci0JaWYgKGEtPmxlbiA9PSBiLT5sZW4pCi0JCWVycm9yID0gbWVtY21wKGEtPm5hbWUsIGItPm5hbWUsIGEtPmxlbik7CisJaWYgKG5hbWUtPmxlbiA9PSBsZW4pCisJCWVycm9yID0gbWVtY21wKG5hbWUtPm5hbWUsIHN0ciwgbGVuKTsKIAlnb3RvIG91dDsKIH0KIApAQCAtMjI0LDEwICsyMjcsMTAgQEAKIAl9CiBvdXQ6CiAJdW5sb2NrX3N1cGVyKHNiKTsKLQlkZW50cnktPmRfb3AgPSAmbXNkb3NfZGVudHJ5X29wZXJhdGlvbnM7CisJZF9zZXRfZF9vcChkZW50cnksICZtc2Rvc19kZW50cnlfb3BlcmF0aW9ucyk7CiAJZGVudHJ5ID0gZF9zcGxpY2VfYWxpYXMoaW5vZGUsIGRlbnRyeSk7CiAJaWYgKGRlbnRyeSkKLQkJZGVudHJ5LT5kX29wID0gJm1zZG9zX2RlbnRyeV9vcGVyYXRpb25zOworCQlkX3NldF9kX29wKGRlbnRyeSwgJm1zZG9zX2RlbnRyeV9vcGVyYXRpb25zKTsKIAlyZXR1cm4gZGVudHJ5OwogCiBlcnJvcjoKQEAgLTY3MCw3ICs2NzMsNyBAQAogCX0KIAogCXNiLT5zX2ZsYWdzIHw9IE1TX05PQVRJTUU7Ci0Jc2ItPnNfcm9vdC0+ZF9vcCA9ICZtc2Rvc19kZW50cnlfb3BlcmF0aW9uczsKKwlkX3NldF9kX29wKHNiLT5zX3Jvb3QsICZtc2Rvc19kZW50cnlfb3BlcmF0aW9ucyk7CiAJdW5sb2NrX3N1cGVyKHNiKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2ZzL2ZhdC9uYW1laV92ZmF0LmMgYi9mcy9mYXQvbmFtZWlfdmZhdC5jCmluZGV4IGI5MzY3MDMuLmUzZmZjNWUgMTAwNjQ0Ci0tLSBhL2ZzL2ZhdC9uYW1laV92ZmF0LmMKKysrIGIvZnMvZmF0L25hbWVpX3ZmYXQuYwpAQCAtNDMsNiArNDMsOSBAQAogCiBzdGF0aWMgaW50IHZmYXRfcmV2YWxpZGF0ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBuYW1laWRhdGEgKm5kKQogeworCWlmIChuZC0+ZmxhZ3MgJiBMT09LVVBfUkNVKQorCQlyZXR1cm4gLUVDSElMRDsKKwogCS8qIFRoaXMgaXMgbm90IG5lZ2F0aXZlIGRlbnRyeS4gQWx3YXlzIHZhbGlkLiAqLwogCWlmIChkZW50cnktPmRfaW5vZGUpCiAJCXJldHVybiAxOwpAQCAtNTEsNiArNTQsOSBAQAogCiBzdGF0aWMgaW50IHZmYXRfcmV2YWxpZGF0ZV9jaShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBuYW1laWRhdGEgKm5kKQogeworCWlmIChuZC0+ZmxhZ3MgJiBMT09LVVBfUkNVKQorCQlyZXR1cm4gLUVDSElMRDsKKwogCS8qCiAJICogVGhpcyBpcyBub3QgbmVnYXRpdmUgZGVudHJ5LiBBbHdheXMgdmFsaWQuCiAJICoKQEAgLTg1LDIyICs5MSwyNiBAQAogfQogCiAvKiByZXR1cm5zIHRoZSBsZW5ndGggb2YgYSBzdHJ1Y3QgcXN0ciwgaWdub3JpbmcgdHJhaWxpbmcgZG90cyAqLwotc3RhdGljIHVuc2lnbmVkIGludCB2ZmF0X3N0cmlwdGFpbF9sZW4oc3RydWN0IHFzdHIgKnFzdHIpCitzdGF0aWMgdW5zaWduZWQgaW50IF9fdmZhdF9zdHJpcHRhaWxfbGVuKHVuc2lnbmVkIGludCBsZW4sIGNvbnN0IGNoYXIgKm5hbWUpCiB7Ci0JdW5zaWduZWQgaW50IGxlbiA9IHFzdHItPmxlbjsKLQotCXdoaWxlIChsZW4gJiYgcXN0ci0+bmFtZVtsZW4gLSAxXSA9PSAnLicpCisJd2hpbGUgKGxlbiAmJiBuYW1lW2xlbiAtIDFdID09ICcuJykKIAkJbGVuLS07CiAJcmV0dXJuIGxlbjsKIH0KIAorc3RhdGljIHVuc2lnbmVkIGludCB2ZmF0X3N0cmlwdGFpbF9sZW4oY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIpCit7CisJcmV0dXJuIF9fdmZhdF9zdHJpcHRhaWxfbGVuKHFzdHItPmxlbiwgcXN0ci0+bmFtZSk7Cit9CisKIC8qCiAgKiBDb21wdXRlIHRoZSBoYXNoIGZvciB0aGUgdmZhdCBuYW1lIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGRlbnRyeS4KICAqIE5vdGU6IGlmIHRoZSBuYW1lIGlzIGludmFsaWQsIHdlIGxlYXZlIHRoZSBoYXNoIGNvZGUgdW5jaGFuZ2VkIHNvCiAgKiB0aGF0IHRoZSBleGlzdGluZyBkZW50cnkgY2FuIGJlIHVzZWQuIFRoZSB2ZmF0IGZzIHJvdXRpbmVzIHdpbGwKICAqIHJldHVybiBFTk9FTlQgb3IgRUlOVkFMIGFzIGFwcHJvcHJpYXRlLgogICovCi1zdGF0aWMgaW50IHZmYXRfaGFzaChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBxc3RyICpxc3RyKQorc3RhdGljIGludCB2ZmF0X2hhc2goY29uc3Qgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQlzdHJ1Y3QgcXN0ciAqcXN0cikKIHsKIAlxc3RyLT5oYXNoID0gZnVsbF9uYW1lX2hhc2gocXN0ci0+bmFtZSwgdmZhdF9zdHJpcHRhaWxfbGVuKHFzdHIpKTsKIAlyZXR1cm4gMDsKQEAgLTExMiw5ICsxMjIsMTAgQEAKICAqIHRoYXQgdGhlIGV4aXN0aW5nIGRlbnRyeSBjYW4gYmUgdXNlZC4gVGhlIHZmYXQgZnMgcm91dGluZXMgd2lsbAogICogcmV0dXJuIEVOT0VOVCBvciBFSU5WQUwgYXMgYXBwcm9wcmlhdGUuCiAgKi8KLXN0YXRpYyBpbnQgdmZhdF9oYXNoaShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBxc3RyICpxc3RyKQorc3RhdGljIGludCB2ZmF0X2hhc2hpKGNvbnN0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSwKKwkJc3RydWN0IHFzdHIgKnFzdHIpCiB7Ci0Jc3RydWN0IG5sc190YWJsZSAqdCA9IE1TRE9TX1NCKGRlbnRyeS0+ZF9pbm9kZS0+aV9zYiktPm5sc19pbzsKKwlzdHJ1Y3QgbmxzX3RhYmxlICp0ID0gTVNET1NfU0IoZGVudHJ5LT5kX3NiKS0+bmxzX2lvOwogCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWU7CiAJdW5zaWduZWQgaW50IGxlbjsKIAl1bnNpZ25lZCBsb25nIGhhc2g7CkBAIC0xMzMsMTYgKzE0NCwxOCBAQAogLyoKICAqIENhc2UgaW5zZW5zaXRpdmUgY29tcGFyZSBvZiB0d28gdmZhdCBuYW1lcy4KICAqLwotc3RhdGljIGludCB2ZmF0X2NtcGkoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgcXN0ciAqYSwgc3RydWN0IHFzdHIgKmIpCitzdGF0aWMgaW50IHZmYXRfY21waShjb25zdCBzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsIGNvbnN0IHN0cnVjdCBpbm9kZSAqcGlub2RlLAorCQljb25zdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCXVuc2lnbmVkIGludCBsZW4sIGNvbnN0IGNoYXIgKnN0ciwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpCiB7Ci0Jc3RydWN0IG5sc190YWJsZSAqdCA9IE1TRE9TX1NCKGRlbnRyeS0+ZF9pbm9kZS0+aV9zYiktPm5sc19pbzsKKwlzdHJ1Y3QgbmxzX3RhYmxlICp0ID0gTVNET1NfU0IocGFyZW50LT5kX3NiKS0+bmxzX2lvOwogCXVuc2lnbmVkIGludCBhbGVuLCBibGVuOwogCiAJLyogQSBmaWxlbmFtZSBjYW5ub3QgZW5kIGluICcuJyBvciB3ZSB0cmVhdCBpdCBsaWtlIGl0IGhhcyBub25lICovCi0JYWxlbiA9IHZmYXRfc3RyaXB0YWlsX2xlbihhKTsKLQlibGVuID0gdmZhdF9zdHJpcHRhaWxfbGVuKGIpOworCWFsZW4gPSB2ZmF0X3N0cmlwdGFpbF9sZW4obmFtZSk7CisJYmxlbiA9IF9fdmZhdF9zdHJpcHRhaWxfbGVuKGxlbiwgc3RyKTsKIAlpZiAoYWxlbiA9PSBibGVuKSB7Ci0JCWlmIChubHNfc3RybmljbXAodCwgYS0+bmFtZSwgYi0+bmFtZSwgYWxlbikgPT0gMCkKKwkJaWYgKG5sc19zdHJuaWNtcCh0LCBuYW1lLT5uYW1lLCBzdHIsIGFsZW4pID09IDApCiAJCQlyZXR1cm4gMDsKIAl9CiAJcmV0dXJuIDE7CkBAIC0xNTEsMTUgKzE2NCwxNyBAQAogLyoKICAqIENhc2Ugc2Vuc2l0aXZlIGNvbXBhcmUgb2YgdHdvIHZmYXQgbmFtZXMuCiAgKi8KLXN0YXRpYyBpbnQgdmZhdF9jbXAoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgcXN0ciAqYSwgc3RydWN0IHFzdHIgKmIpCitzdGF0aWMgaW50IHZmYXRfY21wKGNvbnN0IHN0cnVjdCBkZW50cnkgKnBhcmVudCwgY29uc3Qgc3RydWN0IGlub2RlICpwaW5vZGUsCisJCWNvbnN0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSwKKwkJdW5zaWduZWQgaW50IGxlbiwgY29uc3QgY2hhciAqc3RyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSkKIHsKIAl1bnNpZ25lZCBpbnQgYWxlbiwgYmxlbjsKIAogCS8qIEEgZmlsZW5hbWUgY2Fubm90IGVuZCBpbiAnLicgb3Igd2UgdHJlYXQgaXQgbGlrZSBpdCBoYXMgbm9uZSAqLwotCWFsZW4gPSB2ZmF0X3N0cmlwdGFpbF9sZW4oYSk7Ci0JYmxlbiA9IHZmYXRfc3RyaXB0YWlsX2xlbihiKTsKKwlhbGVuID0gdmZhdF9zdHJpcHRhaWxfbGVuKG5hbWUpOworCWJsZW4gPSBfX3ZmYXRfc3RyaXB0YWlsX2xlbihsZW4sIHN0cik7CiAJaWYgKGFsZW4gPT0gYmxlbikgewotCQlpZiAoc3RybmNtcChhLT5uYW1lLCBiLT5uYW1lLCBhbGVuKSA9PSAwKQorCQlpZiAoc3RybmNtcChuYW1lLT5uYW1lLCBzdHIsIGFsZW4pID09IDApCiAJCQlyZXR1cm4gMDsKIAl9CiAJcmV0dXJuIDE7CkBAIC03NTcsMTEgKzc3MiwxMSBAQAogCiBvdXQ6CiAJdW5sb2NrX3N1cGVyKHNiKTsKLQlkZW50cnktPmRfb3AgPSBzYi0+c19yb290LT5kX29wOworCWRfc2V0X2Rfb3AoZGVudHJ5LCBzYi0+c19yb290LT5kX29wKTsKIAlkZW50cnktPmRfdGltZSA9IGRlbnRyeS0+ZF9wYXJlbnQtPmRfaW5vZGUtPmlfdmVyc2lvbjsKIAlkZW50cnkgPSBkX3NwbGljZV9hbGlhcyhpbm9kZSwgZGVudHJ5KTsKIAlpZiAoZGVudHJ5KSB7Ci0JCWRlbnRyeS0+ZF9vcCA9IHNiLT5zX3Jvb3QtPmRfb3A7CisJCWRfc2V0X2Rfb3AoZGVudHJ5LCBzYi0+c19yb290LT5kX29wKTsKIAkJZGVudHJ5LT5kX3RpbWUgPSBkZW50cnktPmRfcGFyZW50LT5kX2lub2RlLT5pX3ZlcnNpb247CiAJfQogCXJldHVybiBkZW50cnk7CkBAIC0xMDYzLDkgKzEwNzgsOSBAQAogCX0KIAogCWlmIChNU0RPU19TQihzYiktPm9wdGlvbnMubmFtZV9jaGVjayAhPSAncycpCi0JCXNiLT5zX3Jvb3QtPmRfb3AgPSAmdmZhdF9jaV9kZW50cnlfb3BzOworCQlkX3NldF9kX29wKHNiLT5zX3Jvb3QsICZ2ZmF0X2NpX2RlbnRyeV9vcHMpOwogCWVsc2UKLQkJc2ItPnNfcm9vdC0+ZF9vcCA9ICZ2ZmF0X2RlbnRyeV9vcHM7CisJCWRfc2V0X2Rfb3Aoc2ItPnNfcm9vdCwgJnZmYXRfZGVudHJ5X29wcyk7CiAKIAl1bmxvY2tfc3VwZXIoc2IpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZnMvZmlsZXN5c3RlbXMuYyBiL2ZzL2ZpbGVzeXN0ZW1zLmMKaW5kZXggNjhiYTQ5Mi4uNzUxZDZiMiAxMDA2NDQKLS0tIGEvZnMvZmlsZXN5c3RlbXMuYworKysgYi9mcy9maWxlc3lzdGVtcy5jCkBAIC0xMTUsNiArMTE1LDkgQEAKIAkJdG1wID0gJigqdG1wKS0+bmV4dDsKIAl9CiAJd3JpdGVfdW5sb2NrKCZmaWxlX3N5c3RlbXNfbG9jayk7CisKKwlzeW5jaHJvbml6ZV9yY3UoKTsKKwogCXJldHVybiAtRUlOVkFMOwogfQogCmRpZmYgLS1naXQgYS9mcy9mcmVldnhmcy92eGZzX2lub2RlLmMgYi9mcy9mcmVldnhmcy92eGZzX2lub2RlLmMKaW5kZXggOGMwNGVhYy4uMmJhNjcxOSAxMDA2NDQKLS0tIGEvZnMvZnJlZXZ4ZnMvdnhmc19pbm9kZS5jCisrKyBiL2ZzL2ZyZWV2eGZzL3Z4ZnNfaW5vZGUuYwpAQCAtMzM3LDYgKzMzNywxMyBAQAogCXJldHVybiBpcDsKIH0KIAorc3RhdGljIHZvaWQgdnhmc19pX2NhbGxiYWNrKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBpbm9kZSwgaV9yY3UpOworCUlOSVRfTElTVF9IRUFEKCZpbm9kZS0+aV9kZW50cnkpOworCWttZW1fY2FjaGVfZnJlZSh2eGZzX2lub2RlX2NhY2hlcCwgaW5vZGUtPmlfcHJpdmF0ZSk7Cit9CisKIC8qKgogICogdnhmc19ldmljdF9pbm9kZSAtIHJlbW92ZSBpbm9kZSBmcm9tIG1haW4gbWVtb3J5CiAgKiBAaXA6CQlpbm9kZSB0byBkaXNjYXJkLgpAQCAtMzUwLDUgKzM1Nyw1IEBACiB7CiAJdHJ1bmNhdGVfaW5vZGVfcGFnZXMoJmlwLT5pX2RhdGEsIDApOwogCWVuZF93cml0ZWJhY2soaXApOwotCWttZW1fY2FjaGVfZnJlZSh2eGZzX2lub2RlX2NhY2hlcCwgaXAtPmlfcHJpdmF0ZSk7CisJY2FsbF9yY3UoJmlwLT5pX3JjdSwgdnhmc19pX2NhbGxiYWNrKTsKIH0KZGlmZiAtLWdpdCBhL2ZzL2ZzX3N0cnVjdC5jIGIvZnMvZnNfc3RydWN0LmMKaW5kZXggZWQ0NWE5Yy4uNjhjYTQ4NyAxMDA2NDQKLS0tIGEvZnMvZnNfc3RydWN0LmMKKysrIGIvZnMvZnNfc3RydWN0LmMKQEAgLTE0LDEyICsxNCwxNCBAQAogCXN0cnVjdCBwYXRoIG9sZF9yb290OwogCiAJc3Bpbl9sb2NrKCZmcy0+bG9jayk7CisJd3JpdGVfc2VxY291bnRfYmVnaW4oJmZzLT5zZXEpOwogCW9sZF9yb290ID0gZnMtPnJvb3Q7CiAJZnMtPnJvb3QgPSAqcGF0aDsKLQlwYXRoX2dldChwYXRoKTsKKwlwYXRoX2dldF9sb25nKHBhdGgpOworCXdyaXRlX3NlcWNvdW50X2VuZCgmZnMtPnNlcSk7CiAJc3Bpbl91bmxvY2soJmZzLT5sb2NrKTsKIAlpZiAob2xkX3Jvb3QuZGVudHJ5KQotCQlwYXRoX3B1dCgmb2xkX3Jvb3QpOworCQlwYXRoX3B1dF9sb25nKCZvbGRfcm9vdCk7CiB9CiAKIC8qCkBAIC0zMSwxMyArMzMsMTUgQEAKIAlzdHJ1Y3QgcGF0aCBvbGRfcHdkOwogCiAJc3Bpbl9sb2NrKCZmcy0+bG9jayk7CisJd3JpdGVfc2VxY291bnRfYmVnaW4oJmZzLT5zZXEpOwogCW9sZF9wd2QgPSBmcy0+cHdkOwogCWZzLT5wd2QgPSAqcGF0aDsKLQlwYXRoX2dldChwYXRoKTsKKwlwYXRoX2dldF9sb25nKHBhdGgpOworCXdyaXRlX3NlcWNvdW50X2VuZCgmZnMtPnNlcSk7CiAJc3Bpbl91bmxvY2soJmZzLT5sb2NrKTsKIAogCWlmIChvbGRfcHdkLmRlbnRyeSkKLQkJcGF0aF9wdXQoJm9sZF9wd2QpOworCQlwYXRoX3B1dF9sb25nKCZvbGRfcHdkKTsKIH0KIAogdm9pZCBjaHJvb3RfZnNfcmVmcyhzdHJ1Y3QgcGF0aCAqb2xkX3Jvb3QsIHN0cnVjdCBwYXRoICpuZXdfcm9vdCkKQEAgLTUyLDMxICs1NiwzMyBAQAogCQlmcyA9IHAtPmZzOwogCQlpZiAoZnMpIHsKIAkJCXNwaW5fbG9jaygmZnMtPmxvY2spOworCQkJd3JpdGVfc2VxY291bnRfYmVnaW4oJmZzLT5zZXEpOwogCQkJaWYgKGZzLT5yb290LmRlbnRyeSA9PSBvbGRfcm9vdC0+ZGVudHJ5CiAJCQkgICAgJiYgZnMtPnJvb3QubW50ID09IG9sZF9yb290LT5tbnQpIHsKLQkJCQlwYXRoX2dldChuZXdfcm9vdCk7CisJCQkJcGF0aF9nZXRfbG9uZyhuZXdfcm9vdCk7CiAJCQkJZnMtPnJvb3QgPSAqbmV3X3Jvb3Q7CiAJCQkJY291bnQrKzsKIAkJCX0KIAkJCWlmIChmcy0+cHdkLmRlbnRyeSA9PSBvbGRfcm9vdC0+ZGVudHJ5CiAJCQkgICAgJiYgZnMtPnB3ZC5tbnQgPT0gb2xkX3Jvb3QtPm1udCkgewotCQkJCXBhdGhfZ2V0KG5ld19yb290KTsKKwkJCQlwYXRoX2dldF9sb25nKG5ld19yb290KTsKIAkJCQlmcy0+cHdkID0gKm5ld19yb290OwogCQkJCWNvdW50Kys7CiAJCQl9CisJCQl3cml0ZV9zZXFjb3VudF9lbmQoJmZzLT5zZXEpOwogCQkJc3Bpbl91bmxvY2soJmZzLT5sb2NrKTsKIAkJfQogCQl0YXNrX3VubG9jayhwKTsKIAl9IHdoaWxlX2VhY2hfdGhyZWFkKGcsIHApOwogCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKIAl3aGlsZSAoY291bnQtLSkKLQkJcGF0aF9wdXQob2xkX3Jvb3QpOworCQlwYXRoX3B1dF9sb25nKG9sZF9yb290KTsKIH0KIAogdm9pZCBmcmVlX2ZzX3N0cnVjdChzdHJ1Y3QgZnNfc3RydWN0ICpmcykKIHsKLQlwYXRoX3B1dCgmZnMtPnJvb3QpOwotCXBhdGhfcHV0KCZmcy0+cHdkKTsKKwlwYXRoX3B1dF9sb25nKCZmcy0+cm9vdCk7CisJcGF0aF9wdXRfbG9uZygmZnMtPnB3ZCk7CiAJa21lbV9jYWNoZV9mcmVlKGZzX2NhY2hlcCwgZnMpOwogfQogCkBAIC04OCw4ICs5NCwxMCBAQAogCQlpbnQga2lsbDsKIAkJdGFza19sb2NrKHRzayk7CiAJCXNwaW5fbG9jaygmZnMtPmxvY2spOworCQl3cml0ZV9zZXFjb3VudF9iZWdpbigmZnMtPnNlcSk7CiAJCXRzay0+ZnMgPSBOVUxMOwogCQlraWxsID0gIS0tZnMtPnVzZXJzOworCQl3cml0ZV9zZXFjb3VudF9lbmQoJmZzLT5zZXEpOwogCQlzcGluX3VubG9jaygmZnMtPmxvY2spOwogCQl0YXNrX3VubG9jayh0c2spOwogCQlpZiAoa2lsbCkKQEAgLTEwNSw4ICsxMTMsMTUgQEAKIAkJZnMtPnVzZXJzID0gMTsKIAkJZnMtPmluX2V4ZWMgPSAwOwogCQlzcGluX2xvY2tfaW5pdCgmZnMtPmxvY2spOworCQlzZXFjb3VudF9pbml0KCZmcy0+c2VxKTsKIAkJZnMtPnVtYXNrID0gb2xkLT51bWFzazsKLQkJZ2V0X2ZzX3Jvb3RfYW5kX3B3ZChvbGQsICZmcy0+cm9vdCwgJmZzLT5wd2QpOworCisJCXNwaW5fbG9jaygmb2xkLT5sb2NrKTsKKwkJZnMtPnJvb3QgPSBvbGQtPnJvb3Q7CisJCXBhdGhfZ2V0X2xvbmcoJmZzLT5yb290KTsKKwkJZnMtPnB3ZCA9IG9sZC0+cHdkOworCQlwYXRoX2dldF9sb25nKCZmcy0+cHdkKTsKKwkJc3Bpbl91bmxvY2soJm9sZC0+bG9jayk7CiAJfQogCXJldHVybiBmczsKIH0KQEAgLTE0NCw2ICsxNTksNyBAQAogc3RydWN0IGZzX3N0cnVjdCBpbml0X2ZzID0gewogCS51c2VycwkJPSAxLAogCS5sb2NrCQk9IF9fU1BJTl9MT0NLX1VOTE9DS0VEKGluaXRfZnMubG9jayksCisJLnNlcQkJPSBTRVFDTlRfWkVSTywKIAkudW1hc2sJCT0gMDAyMiwKIH07CiAKZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvZGV2LmMgYi9mcy9mdXNlL2Rldi5jCmluZGV4IDZlMDc2OTYuLmNmOGQyOGQgMTAwNjQ0Ci0tLSBhL2ZzL2Z1c2UvZGV2LmMKKysrIGIvZnMvZnVzZS9kZXYuYwpAQCAtMjUxLDYgKzI1MSwyMCBAQAogCWtpbGxfZmFzeW5jKCZmYy0+ZmFzeW5jLCBTSUdJTywgUE9MTF9JTik7CiB9CiAKK3ZvaWQgZnVzZV9xdWV1ZV9mb3JnZXQoc3RydWN0IGZ1c2VfY29ubiAqZmMsIHN0cnVjdCBmdXNlX2ZvcmdldF9saW5rICpmb3JnZXQsCisJCSAgICAgICB1NjQgbm9kZWlkLCB1NjQgbmxvb2t1cCkKK3sKKwlmb3JnZXQtPmZvcmdldF9vbmUubm9kZWlkID0gbm9kZWlkOworCWZvcmdldC0+Zm9yZ2V0X29uZS5ubG9va3VwID0gbmxvb2t1cDsKKworCXNwaW5fbG9jaygmZmMtPmxvY2spOworCWZjLT5mb3JnZXRfbGlzdF90YWlsLT5uZXh0ID0gZm9yZ2V0OworCWZjLT5mb3JnZXRfbGlzdF90YWlsID0gZm9yZ2V0OworCXdha2VfdXAoJmZjLT53YWl0cSk7CisJa2lsbF9mYXN5bmMoJmZjLT5mYXN5bmMsIFNJR0lPLCBQT0xMX0lOKTsKKwlzcGluX3VubG9jaygmZmMtPmxvY2spOworfQorCiBzdGF0aWMgdm9pZCBmbHVzaF9iZ19xdWV1ZShzdHJ1Y3QgZnVzZV9jb25uICpmYykKIHsKIAl3aGlsZSAoZmMtPmFjdGl2ZV9iYWNrZ3JvdW5kIDwgZmMtPm1heF9iYWNrZ3JvdW5kICYmCkBAIC00MzgsMTIgKzQ1Miw2IEBACiAJfQogfQogCi12b2lkIGZ1c2VfcmVxdWVzdF9zZW5kX25vcmVwbHkoc3RydWN0IGZ1c2VfY29ubiAqZmMsIHN0cnVjdCBmdXNlX3JlcSAqcmVxKQotewotCXJlcS0+aXNyZXBseSA9IDA7Ci0JZnVzZV9yZXF1ZXN0X3NlbmRfbm93YWl0KGZjLCByZXEpOwotfQotCiB2b2lkIGZ1c2VfcmVxdWVzdF9zZW5kX2JhY2tncm91bmQoc3RydWN0IGZ1c2VfY29ubiAqZmMsIHN0cnVjdCBmdXNlX3JlcSAqcmVxKQogewogCXJlcS0+aXNyZXBseSA9IDE7CkBAIC04OTYsOSArOTA0LDE1IEBACiAJcmV0dXJuIGVycjsKIH0KIAorc3RhdGljIGludCBmb3JnZXRfcGVuZGluZyhzdHJ1Y3QgZnVzZV9jb25uICpmYykKK3sKKwlyZXR1cm4gZmMtPmZvcmdldF9saXN0X2hlYWQubmV4dCAhPSBOVUxMOworfQorCiBzdGF0aWMgaW50IHJlcXVlc3RfcGVuZGluZyhzdHJ1Y3QgZnVzZV9jb25uICpmYykKIHsKLQlyZXR1cm4gIWxpc3RfZW1wdHkoJmZjLT5wZW5kaW5nKSB8fCAhbGlzdF9lbXB0eSgmZmMtPmludGVycnVwdHMpOworCXJldHVybiAhbGlzdF9lbXB0eSgmZmMtPnBlbmRpbmcpIHx8ICFsaXN0X2VtcHR5KCZmYy0+aW50ZXJydXB0cykgfHwKKwkJZm9yZ2V0X3BlbmRpbmcoZmMpOwogfQogCiAvKiBXYWl0IHVudGlsIGEgcmVxdWVzdCBpcyBhdmFpbGFibGUgb24gdGhlIHBlbmRpbmcgbGlzdCAqLwpAQCAtOTYwLDYgKzk3NCwxMjAgQEAKIAlyZXR1cm4gZXJyID8gZXJyIDogcmVxc2l6ZTsKIH0KIAorc3RhdGljIHN0cnVjdCBmdXNlX2ZvcmdldF9saW5rICpkZXF1ZXVlX2ZvcmdldChzdHJ1Y3QgZnVzZV9jb25uICpmYywKKwkJCQkJICAgICAgIHVuc2lnbmVkIG1heCwKKwkJCQkJICAgICAgIHVuc2lnbmVkICpjb3VudHApCit7CisJc3RydWN0IGZ1c2VfZm9yZ2V0X2xpbmsgKmhlYWQgPSBmYy0+Zm9yZ2V0X2xpc3RfaGVhZC5uZXh0OworCXN0cnVjdCBmdXNlX2ZvcmdldF9saW5rICoqbmV3aGVhZCA9ICZoZWFkOworCXVuc2lnbmVkIGNvdW50OworCisJZm9yIChjb3VudCA9IDA7ICpuZXdoZWFkICE9IE5VTEwgJiYgY291bnQgPCBtYXg7IGNvdW50KyspCisJCW5ld2hlYWQgPSAmKCpuZXdoZWFkKS0+bmV4dDsKKworCWZjLT5mb3JnZXRfbGlzdF9oZWFkLm5leHQgPSAqbmV3aGVhZDsKKwkqbmV3aGVhZCA9IE5VTEw7CisJaWYgKGZjLT5mb3JnZXRfbGlzdF9oZWFkLm5leHQgPT0gTlVMTCkKKwkJZmMtPmZvcmdldF9saXN0X3RhaWwgPSAmZmMtPmZvcmdldF9saXN0X2hlYWQ7CisKKwlpZiAoY291bnRwICE9IE5VTEwpCisJCSpjb3VudHAgPSBjb3VudDsKKworCXJldHVybiBoZWFkOworfQorCitzdGF0aWMgaW50IGZ1c2VfcmVhZF9zaW5nbGVfZm9yZ2V0KHN0cnVjdCBmdXNlX2Nvbm4gKmZjLAorCQkJCSAgIHN0cnVjdCBmdXNlX2NvcHlfc3RhdGUgKmNzLAorCQkJCSAgIHNpemVfdCBuYnl0ZXMpCitfX3JlbGVhc2VzKGZjLT5sb2NrKQoreworCWludCBlcnI7CisJc3RydWN0IGZ1c2VfZm9yZ2V0X2xpbmsgKmZvcmdldCA9IGRlcXVldWVfZm9yZ2V0KGZjLCAxLCBOVUxMKTsKKwlzdHJ1Y3QgZnVzZV9mb3JnZXRfaW4gYXJnID0geworCQkubmxvb2t1cCA9IGZvcmdldC0+Zm9yZ2V0X29uZS5ubG9va3VwLAorCX07CisJc3RydWN0IGZ1c2VfaW5faGVhZGVyIGloID0geworCQkub3Bjb2RlID0gRlVTRV9GT1JHRVQsCisJCS5ub2RlaWQgPSBmb3JnZXQtPmZvcmdldF9vbmUubm9kZWlkLAorCQkudW5pcXVlID0gZnVzZV9nZXRfdW5pcXVlKGZjKSwKKwkJLmxlbiA9IHNpemVvZihpaCkgKyBzaXplb2YoYXJnKSwKKwl9OworCisJc3Bpbl91bmxvY2soJmZjLT5sb2NrKTsKKwlrZnJlZShmb3JnZXQpOworCWlmIChuYnl0ZXMgPCBpaC5sZW4pCisJCXJldHVybiAtRUlOVkFMOworCisJZXJyID0gZnVzZV9jb3B5X29uZShjcywgJmloLCBzaXplb2YoaWgpKTsKKwlpZiAoIWVycikKKwkJZXJyID0gZnVzZV9jb3B5X29uZShjcywgJmFyZywgc2l6ZW9mKGFyZykpOworCWZ1c2VfY29weV9maW5pc2goY3MpOworCisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXJldHVybiBpaC5sZW47Cit9CisKK3N0YXRpYyBpbnQgZnVzZV9yZWFkX2JhdGNoX2ZvcmdldChzdHJ1Y3QgZnVzZV9jb25uICpmYywKKwkJCQkgICBzdHJ1Y3QgZnVzZV9jb3B5X3N0YXRlICpjcywgc2l6ZV90IG5ieXRlcykKK19fcmVsZWFzZXMoZmMtPmxvY2spCit7CisJaW50IGVycjsKKwl1bnNpZ25lZCBtYXhfZm9yZ2V0czsKKwl1bnNpZ25lZCBjb3VudDsKKwlzdHJ1Y3QgZnVzZV9mb3JnZXRfbGluayAqaGVhZDsKKwlzdHJ1Y3QgZnVzZV9iYXRjaF9mb3JnZXRfaW4gYXJnID0geyAuY291bnQgPSAwIH07CisJc3RydWN0IGZ1c2VfaW5faGVhZGVyIGloID0geworCQkub3Bjb2RlID0gRlVTRV9CQVRDSF9GT1JHRVQsCisJCS51bmlxdWUgPSBmdXNlX2dldF91bmlxdWUoZmMpLAorCQkubGVuID0gc2l6ZW9mKGloKSArIHNpemVvZihhcmcpLAorCX07CisKKwlpZiAobmJ5dGVzIDwgaWgubGVuKSB7CisJCXNwaW5fdW5sb2NrKCZmYy0+bG9jayk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW1heF9mb3JnZXRzID0gKG5ieXRlcyAtIGloLmxlbikgLyBzaXplb2Yoc3RydWN0IGZ1c2VfZm9yZ2V0X29uZSk7CisJaGVhZCA9IGRlcXVldWVfZm9yZ2V0KGZjLCBtYXhfZm9yZ2V0cywgJmNvdW50KTsKKwlzcGluX3VubG9jaygmZmMtPmxvY2spOworCisJYXJnLmNvdW50ID0gY291bnQ7CisJaWgubGVuICs9IGNvdW50ICogc2l6ZW9mKHN0cnVjdCBmdXNlX2ZvcmdldF9vbmUpOworCWVyciA9IGZ1c2VfY29weV9vbmUoY3MsICZpaCwgc2l6ZW9mKGloKSk7CisJaWYgKCFlcnIpCisJCWVyciA9IGZ1c2VfY29weV9vbmUoY3MsICZhcmcsIHNpemVvZihhcmcpKTsKKworCXdoaWxlIChoZWFkKSB7CisJCXN0cnVjdCBmdXNlX2ZvcmdldF9saW5rICpmb3JnZXQgPSBoZWFkOworCisJCWlmICghZXJyKSB7CisJCQllcnIgPSBmdXNlX2NvcHlfb25lKGNzLCAmZm9yZ2V0LT5mb3JnZXRfb25lLAorCQkJCQkgICAgc2l6ZW9mKGZvcmdldC0+Zm9yZ2V0X29uZSkpOworCQl9CisJCWhlYWQgPSBmb3JnZXQtPm5leHQ7CisJCWtmcmVlKGZvcmdldCk7CisJfQorCisJZnVzZV9jb3B5X2ZpbmlzaChjcyk7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJcmV0dXJuIGloLmxlbjsKK30KKworc3RhdGljIGludCBmdXNlX3JlYWRfZm9yZ2V0KHN0cnVjdCBmdXNlX2Nvbm4gKmZjLCBzdHJ1Y3QgZnVzZV9jb3B5X3N0YXRlICpjcywKKwkJCSAgICBzaXplX3QgbmJ5dGVzKQorX19yZWxlYXNlcyhmYy0+bG9jaykKK3sKKwlpZiAoZmMtPm1pbm9yIDwgMTYgfHwgZmMtPmZvcmdldF9saXN0X2hlYWQubmV4dC0+bmV4dCA9PSBOVUxMKQorCQlyZXR1cm4gZnVzZV9yZWFkX3NpbmdsZV9mb3JnZXQoZmMsIGNzLCBuYnl0ZXMpOworCWVsc2UKKwkJcmV0dXJuIGZ1c2VfcmVhZF9iYXRjaF9mb3JnZXQoZmMsIGNzLCBuYnl0ZXMpOworfQorCiAvKgogICogUmVhZCBhIHNpbmdsZSByZXF1ZXN0IGludG8gdGhlIHVzZXJzcGFjZSBmaWxlc3lzdGVtJ3MgYnVmZmVyLiAgVGhpcwogICogZnVuY3Rpb24gd2FpdHMgdW50aWwgYSByZXF1ZXN0IGlzIGF2YWlsYWJsZSwgdGhlbiByZW1vdmVzIGl0IGZyb20KQEAgLTk5OCw2ICsxMTI2LDE0IEBACiAJCXJldHVybiBmdXNlX3JlYWRfaW50ZXJydXB0KGZjLCBjcywgbmJ5dGVzLCByZXEpOwogCX0KIAorCWlmIChmb3JnZXRfcGVuZGluZyhmYykpIHsKKwkJaWYgKGxpc3RfZW1wdHkoJmZjLT5wZW5kaW5nKSB8fCBmYy0+Zm9yZ2V0X2JhdGNoLS0gPiAwKQorCQkJcmV0dXJuIGZ1c2VfcmVhZF9mb3JnZXQoZmMsIGNzLCBuYnl0ZXMpOworCisJCWlmIChmYy0+Zm9yZ2V0X2JhdGNoIDw9IC04KQorCQkJZmMtPmZvcmdldF9iYXRjaCA9IDE2OworCX0KKwogCXJlcSA9IGxpc3RfZW50cnkoZmMtPnBlbmRpbmcubmV4dCwgc3RydWN0IGZ1c2VfcmVxLCBsaXN0KTsKIAlyZXEtPnN0YXRlID0gRlVTRV9SRVFfUkVBRElORzsKIAlsaXN0X21vdmUoJnJlcS0+bGlzdCwgJmZjLT5pbyk7CkBAIC0xMDkwLDcgKzEyMjYsNyBAQAogCWlmICghZmMpCiAJCXJldHVybiAtRVBFUk07CiAKLQlidWZzID0ga21hbGxvYyhwaXBlLT5idWZmZXJzICogc2l6ZW9mIChzdHJ1Y3QgcGlwZV9idWZmZXIpLCBHRlBfS0VSTkVMKTsKKwlidWZzID0ga21hbGxvYyhwaXBlLT5idWZmZXJzICogc2l6ZW9mKHN0cnVjdCBwaXBlX2J1ZmZlciksIEdGUF9LRVJORUwpOwogCWlmICghYnVmcykKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTE2MjYsNyArMTc2Miw3IEBACiAJaWYgKCFmYykKIAkJcmV0dXJuIC1FUEVSTTsKIAotCWJ1ZnMgPSBrbWFsbG9jKHBpcGUtPmJ1ZmZlcnMgKiBzaXplb2YgKHN0cnVjdCBwaXBlX2J1ZmZlciksIEdGUF9LRVJORUwpOworCWJ1ZnMgPSBrbWFsbG9jKHBpcGUtPmJ1ZmZlcnMgKiBzaXplb2Yoc3RydWN0IHBpcGVfYnVmZmVyKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFidWZzKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMTc3MCw2ICsxOTA2LDggQEAKIAlmbHVzaF9iZ19xdWV1ZShmYyk7CiAJZW5kX3JlcXVlc3RzKGZjLCAmZmMtPnBlbmRpbmcpOwogCWVuZF9yZXF1ZXN0cyhmYywgJmZjLT5wcm9jZXNzaW5nKTsKKwl3aGlsZSAoZm9yZ2V0X3BlbmRpbmcoZmMpKQorCQlrZnJlZShkZXF1ZXVlX2ZvcmdldChmYywgMSwgTlVMTCkpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZnMvZnVzZS9kaXIuYyBiL2ZzL2Z1c2UvZGlyLmMKaW5kZXggYzk2MjdjOS4uMDQyYWY3MyAxMDA2NDQKLS0tIGEvZnMvZnVzZS9kaXIuYworKysgYi9mcy9mdXNlL2Rpci5jCkBAIC0xMCw5ICsxMCw5IEBACiAKICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvbmFtZWkuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKICNpZiBCSVRTX1BFUl9MT05HID49IDY0CiBzdGF0aWMgaW5saW5lIHZvaWQgZnVzZV9kZW50cnlfc2V0dGltZShzdHJ1Y3QgZGVudHJ5ICplbnRyeSwgdTY0IHRpbWUpCkBAIC0xNTYsOCArMTU2LDEyIEBACiAgKi8KIHN0YXRpYyBpbnQgZnVzZV9kZW50cnlfcmV2YWxpZGF0ZShzdHJ1Y3QgZGVudHJ5ICplbnRyeSwgc3RydWN0IG5hbWVpZGF0YSAqbmQpCiB7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAKKwlpZiAobmQtPmZsYWdzICYgTE9PS1VQX1JDVSkKKwkJcmV0dXJuIC1FQ0hJTEQ7CisKKwlpbm9kZSA9IGVudHJ5LT5kX2lub2RlOwogCWlmIChpbm9kZSAmJiBpc19iYWRfaW5vZGUoaW5vZGUpKQogCQlyZXR1cm4gMDsKIAllbHNlIGlmIChmdXNlX2RlbnRyeV90aW1lKGVudHJ5KSA8IGdldF9qaWZmaWVzXzY0KCkpIHsKQEAgLTE2NSw3ICsxNjksNyBAQAogCQlzdHJ1Y3QgZnVzZV9lbnRyeV9vdXQgb3V0YXJnOwogCQlzdHJ1Y3QgZnVzZV9jb25uICpmYzsKIAkJc3RydWN0IGZ1c2VfcmVxICpyZXE7Ci0JCXN0cnVjdCBmdXNlX3JlcSAqZm9yZ2V0X3JlcTsKKwkJc3RydWN0IGZ1c2VfZm9yZ2V0X2xpbmsgKmZvcmdldDsKIAkJc3RydWN0IGRlbnRyeSAqcGFyZW50OwogCQl1NjQgYXR0cl92ZXJzaW9uOwogCkBAIC0xNzgsOCArMTgyLDggQEAKIAkJaWYgKElTX0VSUihyZXEpKQogCQkJcmV0dXJuIDA7CiAKLQkJZm9yZ2V0X3JlcSA9IGZ1c2VfZ2V0X3JlcShmYyk7Ci0JCWlmIChJU19FUlIoZm9yZ2V0X3JlcSkpIHsKKwkJZm9yZ2V0ID0gZnVzZV9hbGxvY19mb3JnZXQoKTsKKwkJaWYgKCFmb3JnZXQpIHsKIAkJCWZ1c2VfcHV0X3JlcXVlc3QoZmMsIHJlcSk7CiAJCQlyZXR1cm4gMDsKIAkJfQpAQCAtMTk5LDE1ICsyMDMsMTQgQEAKIAkJaWYgKCFlcnIpIHsKIAkJCXN0cnVjdCBmdXNlX2lub2RlICpmaSA9IGdldF9mdXNlX2lub2RlKGlub2RlKTsKIAkJCWlmIChvdXRhcmcubm9kZWlkICE9IGdldF9ub2RlX2lkKGlub2RlKSkgewotCQkJCWZ1c2Vfc2VuZF9mb3JnZXQoZmMsIGZvcmdldF9yZXEsCi0JCQkJCQkgb3V0YXJnLm5vZGVpZCwgMSk7CisJCQkJZnVzZV9xdWV1ZV9mb3JnZXQoZmMsIGZvcmdldCwgb3V0YXJnLm5vZGVpZCwgMSk7CiAJCQkJcmV0dXJuIDA7CiAJCQl9CiAJCQlzcGluX2xvY2soJmZjLT5sb2NrKTsKIAkJCWZpLT5ubG9va3VwKys7CiAJCQlzcGluX3VubG9jaygmZmMtPmxvY2spOwogCQl9Ci0JCWZ1c2VfcHV0X3JlcXVlc3QoZmMsIGZvcmdldF9yZXEpOworCQlrZnJlZShmb3JnZXQpOwogCQlpZiAoZXJyIHx8IChvdXRhcmcuYXR0ci5tb2RlIF4gaW5vZGUtPmlfbW9kZSkgJiBTX0lGTVQpCiAJCQlyZXR1cm4gMDsKIApAQCAtMjU5LDcgKzI2Miw3IEBACiB7CiAJc3RydWN0IGZ1c2VfY29ubiAqZmMgPSBnZXRfZnVzZV9jb25uX3N1cGVyKHNiKTsKIAlzdHJ1Y3QgZnVzZV9yZXEgKnJlcTsKLQlzdHJ1Y3QgZnVzZV9yZXEgKmZvcmdldF9yZXE7CisJc3RydWN0IGZ1c2VfZm9yZ2V0X2xpbmsgKmZvcmdldDsKIAl1NjQgYXR0cl92ZXJzaW9uOwogCWludCBlcnI7CiAKQEAgLTI3Myw5ICsyNzYsOSBAQAogCWlmIChJU19FUlIocmVxKSkKIAkJZ290byBvdXQ7CiAKLQlmb3JnZXRfcmVxID0gZnVzZV9nZXRfcmVxKGZjKTsKLQllcnIgPSBQVFJfRVJSKGZvcmdldF9yZXEpOwotCWlmIChJU19FUlIoZm9yZ2V0X3JlcSkpIHsKKwlmb3JnZXQgPSBmdXNlX2FsbG9jX2ZvcmdldCgpOworCWVyciA9IC1FTk9NRU07CisJaWYgKCFmb3JnZXQpIHsKIAkJZnVzZV9wdXRfcmVxdWVzdChmYywgcmVxKTsKIAkJZ290byBvdXQ7CiAJfQpAQCAtMzAxLDEzICszMDQsMTMgQEAKIAkJCSAgIGF0dHJfdmVyc2lvbik7CiAJZXJyID0gLUVOT01FTTsKIAlpZiAoISppbm9kZSkgewotCQlmdXNlX3NlbmRfZm9yZ2V0KGZjLCBmb3JnZXRfcmVxLCBvdXRhcmctPm5vZGVpZCwgMSk7CisJCWZ1c2VfcXVldWVfZm9yZ2V0KGZjLCBmb3JnZXQsIG91dGFyZy0+bm9kZWlkLCAxKTsKIAkJZ290byBvdXQ7CiAJfQogCWVyciA9IDA7CiAKICBvdXRfcHV0X2ZvcmdldDoKLQlmdXNlX3B1dF9yZXF1ZXN0KGZjLCBmb3JnZXRfcmVxKTsKKwlrZnJlZShmb3JnZXQpOwogIG91dDoKIAlyZXR1cm4gZXJyOwogfQpAQCAtMzQ3LDcgKzM1MCw3IEBACiAJfQogCiAJZW50cnkgPSBuZXdlbnQgPyBuZXdlbnQgOiBlbnRyeTsKLQllbnRyeS0+ZF9vcCA9ICZmdXNlX2RlbnRyeV9vcGVyYXRpb25zOworCWRfc2V0X2Rfb3AoZW50cnksICZmdXNlX2RlbnRyeV9vcGVyYXRpb25zKTsKIAlpZiAob3V0YXJnX3ZhbGlkKQogCQlmdXNlX2NoYW5nZV9lbnRyeV90aW1lb3V0KGVudHJ5LCAmb3V0YXJnKTsKIAllbHNlCkBAIC0zNzQsNyArMzc3LDcgQEAKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwogCXN0cnVjdCBmdXNlX2Nvbm4gKmZjID0gZ2V0X2Z1c2VfY29ubihkaXIpOwogCXN0cnVjdCBmdXNlX3JlcSAqcmVxOwotCXN0cnVjdCBmdXNlX3JlcSAqZm9yZ2V0X3JlcTsKKwlzdHJ1Y3QgZnVzZV9mb3JnZXRfbGluayAqZm9yZ2V0OwogCXN0cnVjdCBmdXNlX2NyZWF0ZV9pbiBpbmFyZzsKIAlzdHJ1Y3QgZnVzZV9vcGVuX291dCBvdXRvcGVuOwogCXN0cnVjdCBmdXNlX2VudHJ5X291dCBvdXRlbnRyeTsKQEAgLTM4OCw5ICszOTEsOSBAQAogCWlmIChmbGFncyAmIE9fRElSRUNUKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWZvcmdldF9yZXEgPSBmdXNlX2dldF9yZXEoZmMpOwotCWlmIChJU19FUlIoZm9yZ2V0X3JlcSkpCi0JCXJldHVybiBQVFJfRVJSKGZvcmdldF9yZXEpOworCWZvcmdldCA9IGZ1c2VfYWxsb2NfZm9yZ2V0KCk7CisJaWYgKCFmb3JnZXQpCisJCXJldHVybiAtRU5PTUVNOwogCiAJcmVxID0gZnVzZV9nZXRfcmVxKGZjKTsKIAllcnIgPSBQVFJfRVJSKHJlcSk7CkBAIC00NDgsMTAgKzQ1MSwxMCBAQAogCWlmICghaW5vZGUpIHsKIAkJZmxhZ3MgJj0gfihPX0NSRUFUIHwgT19FWENMIHwgT19UUlVOQyk7CiAJCWZ1c2Vfc3luY19yZWxlYXNlKGZmLCBmbGFncyk7Ci0JCWZ1c2Vfc2VuZF9mb3JnZXQoZmMsIGZvcmdldF9yZXEsIG91dGVudHJ5Lm5vZGVpZCwgMSk7CisJCWZ1c2VfcXVldWVfZm9yZ2V0KGZjLCBmb3JnZXQsIG91dGVudHJ5Lm5vZGVpZCwgMSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQlmdXNlX3B1dF9yZXF1ZXN0KGZjLCBmb3JnZXRfcmVxKTsKKwlrZnJlZShmb3JnZXQpOwogCWRfaW5zdGFudGlhdGUoZW50cnksIGlub2RlKTsKIAlmdXNlX2NoYW5nZV9lbnRyeV90aW1lb3V0KGVudHJ5LCAmb3V0ZW50cnkpOwogCWZ1c2VfaW52YWxpZGF0ZV9hdHRyKGRpcik7CkBAIC00NjksNyArNDcyLDcgQEAKICBvdXRfcHV0X3JlcXVlc3Q6CiAJZnVzZV9wdXRfcmVxdWVzdChmYywgcmVxKTsKICBvdXRfcHV0X2ZvcmdldF9yZXE6Ci0JZnVzZV9wdXRfcmVxdWVzdChmYywgZm9yZ2V0X3JlcSk7CisJa2ZyZWUoZm9yZ2V0KTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC00ODMsMTIgKzQ4NiwxMiBAQAogCXN0cnVjdCBmdXNlX2VudHJ5X291dCBvdXRhcmc7CiAJc3RydWN0IGlub2RlICppbm9kZTsKIAlpbnQgZXJyOwotCXN0cnVjdCBmdXNlX3JlcSAqZm9yZ2V0X3JlcTsKKwlzdHJ1Y3QgZnVzZV9mb3JnZXRfbGluayAqZm9yZ2V0OwogCi0JZm9yZ2V0X3JlcSA9IGZ1c2VfZ2V0X3JlcShmYyk7Ci0JaWYgKElTX0VSUihmb3JnZXRfcmVxKSkgeworCWZvcmdldCA9IGZ1c2VfYWxsb2NfZm9yZ2V0KCk7CisJaWYgKCFmb3JnZXQpIHsKIAkJZnVzZV9wdXRfcmVxdWVzdChmYywgcmVxKTsKLQkJcmV0dXJuIFBUUl9FUlIoZm9yZ2V0X3JlcSk7CisJCXJldHVybiAtRU5PTUVNOwogCX0KIAogCW1lbXNldCgmb3V0YXJnLCAwLCBzaXplb2Yob3V0YXJnKSk7CkBAIC01MTUsMTAgKzUxOCwxMCBAQAogCWlub2RlID0gZnVzZV9pZ2V0KGRpci0+aV9zYiwgb3V0YXJnLm5vZGVpZCwgb3V0YXJnLmdlbmVyYXRpb24sCiAJCQkgICZvdXRhcmcuYXR0ciwgZW50cnlfYXR0cl90aW1lb3V0KCZvdXRhcmcpLCAwKTsKIAlpZiAoIWlub2RlKSB7Ci0JCWZ1c2Vfc2VuZF9mb3JnZXQoZmMsIGZvcmdldF9yZXEsIG91dGFyZy5ub2RlaWQsIDEpOworCQlmdXNlX3F1ZXVlX2ZvcmdldChmYywgZm9yZ2V0LCBvdXRhcmcubm9kZWlkLCAxKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCWZ1c2VfcHV0X3JlcXVlc3QoZmMsIGZvcmdldF9yZXEpOworCWtmcmVlKGZvcmdldCk7CiAKIAlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSkgewogCQlzdHJ1Y3QgZGVudHJ5ICphbGlhczsKQEAgLTU0MSw3ICs1NDQsNyBAQAogCXJldHVybiAwOwogCiAgb3V0X3B1dF9mb3JnZXRfcmVxOgotCWZ1c2VfcHV0X3JlcXVlc3QoZmMsIGZvcmdldF9yZXEpOworCWtmcmVlKGZvcmdldCk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtOTgxLDEyICs5ODQsMTUgQEAKICAqIGFjY2VzcyByZXF1ZXN0IGlzIHNlbnQuICBFeGVjdXRlIHBlcm1pc3Npb24gaXMgc3RpbGwgY2hlY2tlZAogICogbG9jYWxseSBiYXNlZCBvbiBmaWxlIG1vZGUuCiAgKi8KLXN0YXRpYyBpbnQgZnVzZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKQorc3RhdGljIGludCBmdXNlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2ssIHVuc2lnbmVkIGludCBmbGFncykKIHsKIAlzdHJ1Y3QgZnVzZV9jb25uICpmYyA9IGdldF9mdXNlX2Nvbm4oaW5vZGUpOwogCWJvb2wgcmVmcmVzaGVkID0gZmFsc2U7CiAJaW50IGVyciA9IDA7CiAKKwlpZiAoZmxhZ3MgJiBJUEVSTV9GTEFHX1JDVSkKKwkJcmV0dXJuIC1FQ0hJTEQ7CisKIAlpZiAoIWZ1c2VfYWxsb3dfdGFzayhmYywgY3VycmVudCkpCiAJCXJldHVybiAtRUFDQ0VTOwogCkBAIC0xMDAxLDcgKzEwMDcsNyBAQAogCX0KIAogCWlmIChmYy0+ZmxhZ3MgJiBGVVNFX0RFRkFVTFRfUEVSTUlTU0lPTlMpIHsKLQkJZXJyID0gZ2VuZXJpY19wZXJtaXNzaW9uKGlub2RlLCBtYXNrLCBOVUxMKTsKKwkJZXJyID0gZ2VuZXJpY19wZXJtaXNzaW9uKGlub2RlLCBtYXNrLCBmbGFncywgTlVMTCk7CiAKIAkJLyogSWYgcGVybWlzc2lvbiBpcyBkZW5pZWQsIHRyeSB0byByZWZyZXNoIGZpbGUKIAkJICAgYXR0cmlidXRlcy4gIFRoaXMgaXMgYWxzbyBuZWVkZWQsIGJlY2F1c2UgdGhlIHJvb3QKQEAgLTEwMDksNyArMTAxNSw4IEBACiAJCWlmIChlcnIgPT0gLUVBQ0NFUyAmJiAhcmVmcmVzaGVkKSB7CiAJCQllcnIgPSBmdXNlX2RvX2dldGF0dHIoaW5vZGUsIE5VTEwsIE5VTEwpOwogCQkJaWYgKCFlcnIpCi0JCQkJZXJyID0gZ2VuZXJpY19wZXJtaXNzaW9uKGlub2RlLCBtYXNrLCBOVUxMKTsKKwkJCQllcnIgPSBnZW5lcmljX3Blcm1pc3Npb24oaW5vZGUsIG1hc2ssCisJCQkJCQkJZmxhZ3MsIE5VTEwpOwogCQl9CiAKIAkJLyogTm90ZTogdGhlIG9wcG9zaXRlIG9mIHRoZSBhYm92ZSB0ZXN0IGRvZXMgbm90CmRpZmYgLS1naXQgYS9mcy9mdXNlL2ZpbGUuYyBiL2ZzL2Z1c2UvZmlsZS5jCmluZGV4IDhiOTg0YTIuLjk1ZGExYmMgMTAwNjQ0Ci0tLSBhL2ZzL2Z1c2UvZmlsZS5jCisrKyBiL2ZzL2Z1c2UvZmlsZS5jCkBAIC0xNjM0LDkgKzE2MzQsOSBAQAogICogYW5kIDY0Yml0LiAgRm9ydHVuYXRlbHkgd2UgY2FuIGRldGVybWluZSB3aGljaCBzdHJ1Y3R1cmUgdGhlIHNlcnZlcgogICogdXNlZCBmcm9tIHRoZSBzaXplIG9mIHRoZSByZXBseS4KICAqLwotc3RhdGljIGludCBmdXNlX2NvcHlfaW9jdGxfaW92ZWMoc3RydWN0IGlvdmVjICpkc3QsIHZvaWQgKnNyYywKLQkJCQkgc2l6ZV90IHRyYW5zZmVycmVkLCB1bnNpZ25lZCBjb3VudCwKLQkJCQkgYm9vbCBpc19jb21wYXQpCitzdGF0aWMgaW50IGZ1c2VfY29weV9pb2N0bF9pb3ZlY19vbGQoc3RydWN0IGlvdmVjICpkc3QsIHZvaWQgKnNyYywKKwkJCQkgICAgIHNpemVfdCB0cmFuc2ZlcnJlZCwgdW5zaWduZWQgY291bnQsCisJCQkJICAgICBib29sIGlzX2NvbXBhdCkKIHsKICNpZmRlZiBDT05GSUdfQ09NUEFUCiAJaWYgKGNvdW50ICogc2l6ZW9mKHN0cnVjdCBjb21wYXRfaW92ZWMpID09IHRyYW5zZmVycmVkKSB7CkBAIC0xNjgwLDYgKzE2ODAsNDIgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBmdXNlX2NvcHlfaW9jdGxfaW92ZWMoc3RydWN0IGZ1c2VfY29ubiAqZmMsIHN0cnVjdCBpb3ZlYyAqZHN0LAorCQkJCSB2b2lkICpzcmMsIHNpemVfdCB0cmFuc2ZlcnJlZCwgdW5zaWduZWQgY291bnQsCisJCQkJIGJvb2wgaXNfY29tcGF0KQoreworCXVuc2lnbmVkIGk7CisJc3RydWN0IGZ1c2VfaW9jdGxfaW92ZWMgKmZpb3YgPSBzcmM7CisKKwlpZiAoZmMtPm1pbm9yIDwgMTYpIHsKKwkJcmV0dXJuIGZ1c2VfY29weV9pb2N0bF9pb3ZlY19vbGQoZHN0LCBzcmMsIHRyYW5zZmVycmVkLAorCQkJCQkJIGNvdW50LCBpc19jb21wYXQpOworCX0KKworCWlmIChjb3VudCAqIHNpemVvZihzdHJ1Y3QgZnVzZV9pb2N0bF9pb3ZlYykgIT0gdHJhbnNmZXJyZWQpCisJCXJldHVybiAtRUlPOworCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJLyogRGlkIHRoZSBzZXJ2ZXIgc3VwcGx5IGFuIGluYXBwcm9wcmlhdGUgdmFsdWU/ICovCisJCWlmIChmaW92W2ldLmJhc2UgIT0gKHVuc2lnbmVkIGxvbmcpIGZpb3ZbaV0uYmFzZSB8fAorCQkgICAgZmlvdltpXS5sZW4gIT0gKHVuc2lnbmVkIGxvbmcpIGZpb3ZbaV0ubGVuKQorCQkJcmV0dXJuIC1FSU87CisKKwkJZHN0W2ldLmlvdl9iYXNlID0gKHZvaWQgX191c2VyICopICh1bnNpZ25lZCBsb25nKSBmaW92W2ldLmJhc2U7CisJCWRzdFtpXS5pb3ZfbGVuID0gKHNpemVfdCkgZmlvdltpXS5sZW47CisKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJCWlmIChpc19jb21wYXQgJiYKKwkJICAgIChwdHJfdG9fY29tcGF0KGRzdFtpXS5pb3ZfYmFzZSkgIT0gZmlvdltpXS5iYXNlIHx8CisJCSAgICAgKGNvbXBhdF9zaXplX3QpIGRzdFtpXS5pb3ZfbGVuICE9IGZpb3ZbaV0ubGVuKSkKKwkJCXJldHVybiAtRUlPOworI2VuZGlmCisJfQorCisJcmV0dXJuIDA7Cit9CisKKwogLyoKICAqIEZvciBpb2N0bHMsIHRoZXJlIGlzIG5vIGdlbmVyaWMgd2F5IHRvIGRldGVybWluZSBob3cgbXVjaCBtZW1vcnkKICAqIG5lZWRzIHRvIGJlIHJlYWQgYW5kL29yIHdyaXR0ZW4uICBGdXJ0aGVybW9yZSwgaW9jdGxzIGFyZSBhbGxvd2VkCkBAIC0xNzQwLDE4ICsxNzc2LDI1IEBACiAJc3RydWN0IGZ1c2VfaW9jdGxfb3V0IG91dGFyZzsKIAlzdHJ1Y3QgZnVzZV9yZXEgKnJlcSA9IE5VTEw7CiAJc3RydWN0IHBhZ2UgKipwYWdlcyA9IE5VTEw7Ci0Jc3RydWN0IHBhZ2UgKmlvdl9wYWdlID0gTlVMTDsKKwlzdHJ1Y3QgaW92ZWMgKmlvdl9wYWdlID0gTlVMTDsKIAlzdHJ1Y3QgaW92ZWMgKmluX2lvdiA9IE5VTEwsICpvdXRfaW92ID0gTlVMTDsKIAl1bnNpZ25lZCBpbnQgaW5faW92cyA9IDAsIG91dF9pb3ZzID0gMCwgbnVtX3BhZ2VzID0gMCwgbWF4X3BhZ2VzOwogCXNpemVfdCBpbl9zaXplLCBvdXRfc2l6ZSwgdHJhbnNmZXJyZWQ7CiAJaW50IGVycjsKIAorI2lmIEJJVFNfUEVSX0xPTkcgPT0gMzIKKwlpbmFyZy5mbGFncyB8PSBGVVNFX0lPQ1RMXzMyQklUOworI2Vsc2UKKwlpZiAoZmxhZ3MgJiBGVVNFX0lPQ1RMX0NPTVBBVCkKKwkJaW5hcmcuZmxhZ3MgfD0gRlVTRV9JT0NUTF8zMkJJVDsKKyNlbmRpZgorCiAJLyogYXNzdW1lIGFsbCB0aGUgaW92cyByZXR1cm5lZCBieSBjbGllbnQgYWx3YXlzIGZpdHMgaW4gYSBwYWdlICovCi0JQlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgaW92ZWMpICogRlVTRV9JT0NUTF9NQVhfSU9WID4gUEFHRV9TSVpFKTsKKwlCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBmdXNlX2lvY3RsX2lvdmVjKSAqIEZVU0VfSU9DVExfTUFYX0lPViA+IFBBR0VfU0laRSk7CiAKIAllcnIgPSAtRU5PTUVNOwogCXBhZ2VzID0ga3phbGxvYyhzaXplb2YocGFnZXNbMF0pICogRlVTRV9NQVhfUEFHRVNfUEVSX1JFUSwgR0ZQX0tFUk5FTCk7Ci0JaW92X3BhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUwpOworCWlvdl9wYWdlID0gKHN0cnVjdCBpb3ZlYyAqKSBfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJaWYgKCFwYWdlcyB8fCAhaW92X3BhZ2UpCiAJCWdvdG8gb3V0OwogCkBAIC0xNzYwLDcgKzE4MDMsNyBAQAogCSAqIFJFVFJZIGZyb20gc2VydmVyIGlzIG5vdCBhbGxvd2VkLgogCSAqLwogCWlmICghKGZsYWdzICYgRlVTRV9JT0NUTF9VTlJFU1RSSUNURUQpKSB7Ci0JCXN0cnVjdCBpb3ZlYyAqaW92ID0gcGFnZV9hZGRyZXNzKGlvdl9wYWdlKTsKKwkJc3RydWN0IGlvdmVjICppb3YgPSBpb3ZfcGFnZTsKIAogCQlpb3YtPmlvdl9iYXNlID0gKHZvaWQgX191c2VyICopYXJnOwogCQlpb3YtPmlvdl9sZW4gPSBfSU9DX1NJWkUoY21kKTsKQEAgLTE4NDEsNyArMTg4NCw3IEBACiAKIAkvKiBkaWQgaXQgYXNrIGZvciByZXRyeT8gKi8KIAlpZiAob3V0YXJnLmZsYWdzICYgRlVTRV9JT0NUTF9SRVRSWSkgewotCQljaGFyICp2YWRkcjsKKwkJdm9pZCAqdmFkZHI7CiAKIAkJLyogbm8gcmV0cnkgaWYgaW4gcmVzdHJpY3RlZCBtb2RlICovCiAJCWVyciA9IC1FSU87CkBAIC0xODYyLDE0ICsxOTA1LDE0IEBACiAJCQlnb3RvIG91dDsKIAogCQl2YWRkciA9IGttYXBfYXRvbWljKHBhZ2VzWzBdLCBLTV9VU0VSMCk7Ci0JCWVyciA9IGZ1c2VfY29weV9pb2N0bF9pb3ZlYyhwYWdlX2FkZHJlc3MoaW92X3BhZ2UpLCB2YWRkciwKKwkJZXJyID0gZnVzZV9jb3B5X2lvY3RsX2lvdmVjKGZjLCBpb3ZfcGFnZSwgdmFkZHIsCiAJCQkJCSAgICB0cmFuc2ZlcnJlZCwgaW5faW92cyArIG91dF9pb3ZzLAogCQkJCQkgICAgKGZsYWdzICYgRlVTRV9JT0NUTF9DT01QQVQpICE9IDApOwogCQlrdW5tYXBfYXRvbWljKHZhZGRyLCBLTV9VU0VSMCk7CiAJCWlmIChlcnIpCiAJCQlnb3RvIG91dDsKIAotCQlpbl9pb3YgPSBwYWdlX2FkZHJlc3MoaW92X3BhZ2UpOworCQlpbl9pb3YgPSBpb3ZfcGFnZTsKIAkJb3V0X2lvdiA9IGluX2lvdiArIGluX2lvdnM7CiAKIAkJZXJyID0gZnVzZV92ZXJpZnlfaW9jdGxfaW92KGluX2lvdiwgaW5faW92cyk7CkBAIC0xODkxLDggKzE5MzQsNyBAQAogIG91dDoKIAlpZiAocmVxKQogCQlmdXNlX3B1dF9yZXF1ZXN0KGZjLCByZXEpOwotCWlmIChpb3ZfcGFnZSkKLQkJX19mcmVlX3BhZ2UoaW92X3BhZ2UpOworCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgaW92X3BhZ2UpOwogCXdoaWxlIChudW1fcGFnZXMpCiAJCV9fZnJlZV9wYWdlKHBhZ2VzWy0tbnVtX3BhZ2VzXSk7CiAJa2ZyZWUocGFnZXMpOwpkaWZmIC0tZ2l0IGEvZnMvZnVzZS9mdXNlX2kuaCBiL2ZzL2Z1c2UvZnVzZV9pLmgKaW5kZXggNTdkNGEzYS4uYWU1NzQ0YSAxMDA2NDQKLS0tIGEvZnMvZnVzZS9mdXNlX2kuaAorKysgYi9mcy9mdXNlL2Z1c2VfaS5oCkBAIC01Myw2ICs1MywxMiBAQAogZXh0ZXJuIHVuc2lnbmVkIG1heF91c2VyX2JncmVxOwogZXh0ZXJuIHVuc2lnbmVkIG1heF91c2VyX2Nvbmd0aHJlc2g7CiAKKy8qIE9uZSBmb3JnZXQgcmVxdWVzdCAqLworc3RydWN0IGZ1c2VfZm9yZ2V0X2xpbmsgeworCXN0cnVjdCBmdXNlX2ZvcmdldF9vbmUgZm9yZ2V0X29uZTsKKwlzdHJ1Y3QgZnVzZV9mb3JnZXRfbGluayAqbmV4dDsKK307CisKIC8qKiBGVVNFIGlub2RlICovCiBzdHJ1Y3QgZnVzZV9pbm9kZSB7CiAJLyoqIElub2RlIGRhdGEgKi8KQEAgLTY2LDcgKzcyLDcgQEAKIAl1NjQgbmxvb2t1cDsKIAogCS8qKiBUaGUgcmVxdWVzdCB1c2VkIGZvciBzZW5kaW5nIHRoZSBGT1JHRVQgbWVzc2FnZSAqLwotCXN0cnVjdCBmdXNlX3JlcSAqZm9yZ2V0X3JlcTsKKwlzdHJ1Y3QgZnVzZV9mb3JnZXRfbGluayAqZm9yZ2V0OwogCiAJLyoqIFRpbWUgaW4gamlmZmllcyB1bnRpbCB0aGUgZmlsZSBhdHRyaWJ1dGVzIGFyZSB2YWxpZCAqLwogCXU2NCBpX3RpbWU7CkBAIC0yNTUsNyArMjYxLDYgQEAKIAogCS8qKiBEYXRhIGZvciBhc3luY2hyb25vdXMgcmVxdWVzdHMgKi8KIAl1bmlvbiB7Ci0JCXN0cnVjdCBmdXNlX2ZvcmdldF9pbiBmb3JnZXRfaW47CiAJCXN0cnVjdCB7CiAJCQlzdHJ1Y3QgZnVzZV9yZWxlYXNlX2luIGluOwogCQkJc3RydWN0IHBhdGggcGF0aDsKQEAgLTM2OSw2ICszNzQsMTMgQEAKIAkvKiogUGVuZGluZyBpbnRlcnJ1cHRzICovCiAJc3RydWN0IGxpc3RfaGVhZCBpbnRlcnJ1cHRzOwogCisJLyoqIFF1ZXVlIG9mIHBlbmRpbmcgZm9yZ2V0cyAqLworCXN0cnVjdCBmdXNlX2ZvcmdldF9saW5rIGZvcmdldF9saXN0X2hlYWQ7CisJc3RydWN0IGZ1c2VfZm9yZ2V0X2xpbmsgKmZvcmdldF9saXN0X3RhaWw7CisKKwkvKiogQmF0Y2hpbmcgb2YgRk9SR0VUIHJlcXVlc3RzIChwb3NpdGl2ZSBpbmRpY2F0ZXMgRk9SR0VUIGJhdGNoKSAqLworCWludCBmb3JnZXRfYmF0Y2g7CisKIAkvKiogRmxhZyBpbmRpY2F0aW5nIGlmIGNvbm5lY3Rpb24gaXMgYmxvY2tlZC4gIFRoaXMgd2lsbCBiZQogCSAgICB0aGUgY2FzZSBiZWZvcmUgdGhlIElOSVQgcmVwbHkgaXMgcmVjZWl2ZWQsIGFuZCBpZiB0aGVyZQogCSAgICBhcmUgdG9vIG1hbnkgb3V0c3RhZGluZyBiYWNrZ3JvdW5kcyByZXF1ZXN0cyAqLwpAQCAtNTQzLDggKzU1NSwxMCBAQAogLyoqCiAgKiBTZW5kIEZPUkdFVCBjb21tYW5kCiAgKi8KLXZvaWQgZnVzZV9zZW5kX2ZvcmdldChzdHJ1Y3QgZnVzZV9jb25uICpmYywgc3RydWN0IGZ1c2VfcmVxICpyZXEsCi0JCSAgICAgIHU2NCBub2RlaWQsIHU2NCBubG9va3VwKTsKK3ZvaWQgZnVzZV9xdWV1ZV9mb3JnZXQoc3RydWN0IGZ1c2VfY29ubiAqZmMsIHN0cnVjdCBmdXNlX2ZvcmdldF9saW5rICpmb3JnZXQsCisJCSAgICAgICB1NjQgbm9kZWlkLCB1NjQgbmxvb2t1cCk7CisKK3N0cnVjdCBmdXNlX2ZvcmdldF9saW5rICpmdXNlX2FsbG9jX2ZvcmdldCh2b2lkKTsKIAogLyoqCiAgKiBJbml0aWFsaXplIFJFQUQgb3IgUkVBRERJUiByZXF1ZXN0CkBAIC02NTYsMTEgKzY3MCw2IEBACiB2b2lkIGZ1c2VfcmVxdWVzdF9zZW5kKHN0cnVjdCBmdXNlX2Nvbm4gKmZjLCBzdHJ1Y3QgZnVzZV9yZXEgKnJlcSk7CiAKIC8qKgotICogU2VuZCBhIHJlcXVlc3Qgd2l0aCBubyByZXBseQotICovCi12b2lkIGZ1c2VfcmVxdWVzdF9zZW5kX25vcmVwbHkoc3RydWN0IGZ1c2VfY29ubiAqZmMsIHN0cnVjdCBmdXNlX3JlcSAqcmVxKTsKLQotLyoqCiAgKiBTZW5kIGEgcmVxdWVzdCBpbiB0aGUgYmFja2dyb3VuZAogICovCiB2b2lkIGZ1c2VfcmVxdWVzdF9zZW5kX2JhY2tncm91bmQoc3RydWN0IGZ1c2VfY29ubiAqZmMsIHN0cnVjdCBmdXNlX3JlcSAqcmVxKTsKZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvaW5vZGUuYyBiL2ZzL2Z1c2UvaW5vZGUuYwppbmRleCBjZmNlM2FkLi5mNjJiMzJjIDEwMDY0NAotLS0gYS9mcy9mdXNlL2lub2RlLmMKKysrIGIvZnMvZnVzZS9pbm9kZS5jCkBAIC03MSw2ICs3MSwxMSBAQAogCXVuc2lnbmVkIGJsa3NpemU7CiB9OwogCitzdHJ1Y3QgZnVzZV9mb3JnZXRfbGluayAqZnVzZV9hbGxvY19mb3JnZXQoKQoreworCXJldHVybiBremFsbG9jKHNpemVvZihzdHJ1Y3QgZnVzZV9mb3JnZXRfbGluayksIEdGUF9LRVJORUwpOworfQorCiBzdGF0aWMgc3RydWN0IGlub2RlICpmdXNlX2FsbG9jX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7CiAJc3RydWN0IGlub2RlICppbm9kZTsKQEAgLTkwLDggKzk1LDggQEAKIAlJTklUX0xJU1RfSEVBRCgmZmktPnF1ZXVlZF93cml0ZXMpOwogCUlOSVRfTElTVF9IRUFEKCZmaS0+d3JpdGVwYWdlcyk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmZmktPnBhZ2Vfd2FpdHEpOwotCWZpLT5mb3JnZXRfcmVxID0gZnVzZV9yZXF1ZXN0X2FsbG9jKCk7Ci0JaWYgKCFmaS0+Zm9yZ2V0X3JlcSkgeworCWZpLT5mb3JnZXQgPSBmdXNlX2FsbG9jX2ZvcmdldCgpOworCWlmICghZmktPmZvcmdldCkgewogCQlrbWVtX2NhY2hlX2ZyZWUoZnVzZV9pbm9kZV9jYWNoZXAsIGlub2RlKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQpAQCAtOTksMjcgKzEwNCwyMCBAQAogCXJldHVybiBpbm9kZTsKIH0KIAorc3RhdGljIHZvaWQgZnVzZV9pX2NhbGxiYWNrKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBpbm9kZSwgaV9yY3UpOworCUlOSVRfTElTVF9IRUFEKCZpbm9kZS0+aV9kZW50cnkpOworCWttZW1fY2FjaGVfZnJlZShmdXNlX2lub2RlX2NhY2hlcCwgaW5vZGUpOworfQorCiBzdGF0aWMgdm9pZCBmdXNlX2Rlc3Ryb3lfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlzdHJ1Y3QgZnVzZV9pbm9kZSAqZmkgPSBnZXRfZnVzZV9pbm9kZShpbm9kZSk7CiAJQlVHX09OKCFsaXN0X2VtcHR5KCZmaS0+d3JpdGVfZmlsZXMpKTsKIAlCVUdfT04oIWxpc3RfZW1wdHkoJmZpLT5xdWV1ZWRfd3JpdGVzKSk7Ci0JaWYgKGZpLT5mb3JnZXRfcmVxKQotCQlmdXNlX3JlcXVlc3RfZnJlZShmaS0+Zm9yZ2V0X3JlcSk7Ci0Ja21lbV9jYWNoZV9mcmVlKGZ1c2VfaW5vZGVfY2FjaGVwLCBpbm9kZSk7Ci19Ci0KLXZvaWQgZnVzZV9zZW5kX2ZvcmdldChzdHJ1Y3QgZnVzZV9jb25uICpmYywgc3RydWN0IGZ1c2VfcmVxICpyZXEsCi0JCSAgICAgIHU2NCBub2RlaWQsIHU2NCBubG9va3VwKQotewotCXN0cnVjdCBmdXNlX2ZvcmdldF9pbiAqaW5hcmcgPSAmcmVxLT5taXNjLmZvcmdldF9pbjsKLQlpbmFyZy0+bmxvb2t1cCA9IG5sb29rdXA7Ci0JcmVxLT5pbi5oLm9wY29kZSA9IEZVU0VfRk9SR0VUOwotCXJlcS0+aW4uaC5ub2RlaWQgPSBub2RlaWQ7Ci0JcmVxLT5pbi5udW1hcmdzID0gMTsKLQlyZXEtPmluLmFyZ3NbMF0uc2l6ZSA9IHNpemVvZihzdHJ1Y3QgZnVzZV9mb3JnZXRfaW4pOwotCXJlcS0+aW4uYXJnc1swXS52YWx1ZSA9IGluYXJnOwotCWZ1c2VfcmVxdWVzdF9zZW5kX25vcmVwbHkoZmMsIHJlcSk7CisJa2ZyZWUoZmktPmZvcmdldCk7CisJY2FsbF9yY3UoJmlub2RlLT5pX3JjdSwgZnVzZV9pX2NhbGxiYWNrKTsKIH0KIAogc3RhdGljIHZvaWQgZnVzZV9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQpAQCAtMTI5LDggKzEyNyw4IEBACiAJaWYgKGlub2RlLT5pX3NiLT5zX2ZsYWdzICYgTVNfQUNUSVZFKSB7CiAJCXN0cnVjdCBmdXNlX2Nvbm4gKmZjID0gZ2V0X2Z1c2VfY29ubihpbm9kZSk7CiAJCXN0cnVjdCBmdXNlX2lub2RlICpmaSA9IGdldF9mdXNlX2lub2RlKGlub2RlKTsKLQkJZnVzZV9zZW5kX2ZvcmdldChmYywgZmktPmZvcmdldF9yZXEsIGZpLT5ub2RlaWQsIGZpLT5ubG9va3VwKTsKLQkJZmktPmZvcmdldF9yZXEgPSBOVUxMOworCQlmdXNlX3F1ZXVlX2ZvcmdldChmYywgZmktPmZvcmdldCwgZmktPm5vZGVpZCwgZmktPm5sb29rdXApOworCQlmaS0+Zm9yZ2V0ID0gTlVMTDsKIAl9CiB9CiAKQEAgLTUzNCw2ICs1MzIsNyBAQAogCUlOSVRfTElTVF9IRUFEKCZmYy0+aW50ZXJydXB0cyk7CiAJSU5JVF9MSVNUX0hFQUQoJmZjLT5iZ19xdWV1ZSk7CiAJSU5JVF9MSVNUX0hFQUQoJmZjLT5lbnRyeSk7CisJZmMtPmZvcmdldF9saXN0X3RhaWwgPSAmZmMtPmZvcmdldF9saXN0X2hlYWQ7CiAJYXRvbWljX3NldCgmZmMtPm51bV93YWl0aW5nLCAwKTsKIAlmYy0+bWF4X2JhY2tncm91bmQgPSBGVVNFX0RFRkFVTFRfTUFYX0JBQ0tHUk9VTkQ7CiAJZmMtPmNvbmdlc3Rpb25fdGhyZXNob2xkID0gRlVTRV9ERUZBVUxUX0NPTkdFU1RJT05fVEhSRVNIT0xEOwpAQCAtNjE5LDcgKzYxOCw3IEBACiAKIAllbnRyeSA9IGRfb2J0YWluX2FsaWFzKGlub2RlKTsKIAlpZiAoIUlTX0VSUihlbnRyeSkgJiYgZ2V0X25vZGVfaWQoaW5vZGUpICE9IEZVU0VfUk9PVF9JRCkgewotCQllbnRyeS0+ZF9vcCA9ICZmdXNlX2RlbnRyeV9vcGVyYXRpb25zOworCQlkX3NldF9kX29wKGVudHJ5LCAmZnVzZV9kZW50cnlfb3BlcmF0aW9ucyk7CiAJCWZ1c2VfaW52YWxpZGF0ZV9lbnRyeV9jYWNoZShlbnRyeSk7CiAJfQogCkBAIC03MjEsNyArNzIwLDcgQEAKIAogCXBhcmVudCA9IGRfb2J0YWluX2FsaWFzKGlub2RlKTsKIAlpZiAoIUlTX0VSUihwYXJlbnQpICYmIGdldF9ub2RlX2lkKGlub2RlKSAhPSBGVVNFX1JPT1RfSUQpIHsKLQkJcGFyZW50LT5kX29wID0gJmZ1c2VfZGVudHJ5X29wZXJhdGlvbnM7CisJCWRfc2V0X2Rfb3AocGFyZW50LCAmZnVzZV9kZW50cnlfb3BlcmF0aW9ucyk7CiAJCWZ1c2VfaW52YWxpZGF0ZV9lbnRyeV9jYWNoZShwYXJlbnQpOwogCX0KIApkaWZmIC0tZ2l0IGEvZnMvZ2VuZXJpY19hY2wuYyBiL2ZzL2dlbmVyaWNfYWNsLmMKaW5kZXggNmJjOWUzYS4uMDZjNDhhOCAxMDA2NDQKLS0tIGEvZnMvZ2VuZXJpY19hY2wuYworKysgYi9mcy9nZW5lcmljX2FjbC5jCkBAIC0xOTAsMTQgKzE5MCwyMCBAQAogfQogCiBpbnQKLWdlbmVyaWNfY2hlY2tfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKQorZ2VuZXJpY19jaGVja19hY2woc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2ssIHVuc2lnbmVkIGludCBmbGFncykKIHsKLQlzdHJ1Y3QgcG9zaXhfYWNsICphY2wgPSBnZXRfY2FjaGVkX2FjbChpbm9kZSwgQUNMX1RZUEVfQUNDRVNTKTsKKwlpZiAoZmxhZ3MgJiBJUEVSTV9GTEFHX1JDVSkgeworCQlpZiAoIW5lZ2F0aXZlX2NhY2hlZF9hY2woaW5vZGUsIEFDTF9UWVBFX0FDQ0VTUykpCisJCQlyZXR1cm4gLUVDSElMRDsKKwl9IGVsc2UgeworCQlzdHJ1Y3QgcG9zaXhfYWNsICphY2w7CiAKLQlpZiAoYWNsKSB7Ci0JCWludCBlcnJvciA9IHBvc2l4X2FjbF9wZXJtaXNzaW9uKGlub2RlLCBhY2wsIG1hc2spOwotCQlwb3NpeF9hY2xfcmVsZWFzZShhY2wpOwotCQlyZXR1cm4gZXJyb3I7CisJCWFjbCA9IGdldF9jYWNoZWRfYWNsKGlub2RlLCBBQ0xfVFlQRV9BQ0NFU1MpOworCQlpZiAoYWNsKSB7CisJCQlpbnQgZXJyb3IgPSBwb3NpeF9hY2xfcGVybWlzc2lvbihpbm9kZSwgYWNsLCBtYXNrKTsKKwkJCXBvc2l4X2FjbF9yZWxlYXNlKGFjbCk7CisJCQlyZXR1cm4gZXJyb3I7CisJCX0KIAl9CiAJcmV0dXJuIC1FQUdBSU47CiB9CmRpZmYgLS1naXQgYS9mcy9nZnMyL2FjbC5jIGIvZnMvZ2ZzMi9hY2wuYwppbmRleCA0ODE3MWY0Li43MTE4ZjFhIDEwMDY0NAotLS0gYS9mcy9nZnMyL2FjbC5jCisrKyBiL2ZzL2dmczIvYWNsLmMKQEAgLTc1LDExICs3NSwxNCBAQAogICogUmV0dXJuczogZXJybm8KICAqLwogCi1pbnQgZ2ZzMl9jaGVja19hY2woc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spCitpbnQgZ2ZzMl9jaGVja19hY2woc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2ssIHVuc2lnbmVkIGludCBmbGFncykKIHsKIAlzdHJ1Y3QgcG9zaXhfYWNsICphY2w7CiAJaW50IGVycm9yOwogCisJaWYgKGZsYWdzICYgSVBFUk1fRkxBR19SQ1UpCisJCXJldHVybiAtRUNISUxEOworCiAJYWNsID0gZ2ZzMl9hY2xfZ2V0KEdGUzJfSShpbm9kZSksIEFDTF9UWVBFX0FDQ0VTUyk7CiAJaWYgKElTX0VSUihhY2wpKQogCQlyZXR1cm4gUFRSX0VSUihhY2wpOwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9hY2wuaCBiL2ZzL2dmczIvYWNsLmgKaW5kZXggYjUyMmIwYy4uYTkzOTA3YyAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9hY2wuaAorKysgYi9mcy9nZnMyL2FjbC5oCkBAIC0xNiw3ICsxNiw3IEBACiAjZGVmaW5lIEdGUzJfUE9TSVhfQUNMX0RFRkFVTFQJCSJwb3NpeF9hY2xfZGVmYXVsdCIKICNkZWZpbmUgR0ZTMl9BQ0xfTUFYX0VOVFJJRVMJCTI1CiAKLWV4dGVybiBpbnQgZ2ZzMl9jaGVja19hY2woc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spOworZXh0ZXJuIGludCBnZnMyX2NoZWNrX2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaywgdW5zaWduZWQgaW50KTsKIGV4dGVybiBpbnQgZ2ZzMl9hY2xfY3JlYXRlKHN0cnVjdCBnZnMyX2lub2RlICpkaXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogZXh0ZXJuIGludCBnZnMyX2FjbF9jaG1vZChzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIHN0cnVjdCBpYXR0ciAqYXR0cik7CiBleHRlcm4gY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgZ2ZzMl94YXR0cl9zeXN0ZW1faGFuZGxlcjsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvYm1hcC5jIGIvZnMvZ2ZzMi9ibWFwLmMKaW5kZXggNTQ3NmMwNi4uM2M0MDM5ZCAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9ibWFwLmMKKysrIGIvZnMvZ2ZzMi9ibWFwLmMKQEAgLTc2Myw3ICs3NjMsNyBAQAogCWludCBtZXRhZGF0YTsKIAl1bnNpZ25lZCBpbnQgcmV2b2tlcyA9IDA7CiAJaW50IHg7Ci0JaW50IGVycm9yOworCWludCBlcnJvciA9IDA7CiAKIAlpZiAoISp0b3ApCiAJCXNtLT5zbV9maXJzdCA9IDA7CkBAIC03ODAsNyArNzgwLDExIEBACiAJaWYgKG1ldGFkYXRhKQogCQlyZXZva2VzID0gKGhlaWdodCkgPyBzZHAtPnNkX2lucHRycyA6IHNkcC0+c2RfZGlwdHJzOwogCi0JZXJyb3IgPSBnZnMyX3JpbmRleF9ob2xkKHNkcCwgJmlwLT5pX2FsbG9jLT5hbF9yaV9naCk7CisJaWYgKGlwICE9IEdGUzJfSShzZHAtPnNkX3JpbmRleCkpCisJCWVycm9yID0gZ2ZzMl9yaW5kZXhfaG9sZChzZHAsICZpcC0+aV9hbGxvYy0+YWxfcmlfZ2gpOworCWVsc2UgaWYgKCFzZHAtPnNkX3JncnBzKQorCQllcnJvciA9IGdmczJfcmlfdXBkYXRlKGlwKTsKKwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCkBAIC04NzksNyArODgzLDggQEAKIG91dF9ybGlzdDoKIAlnZnMyX3JsaXN0X2ZyZWUoJnJsaXN0KTsKIG91dDoKLQlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmaXAtPmlfYWxsb2MtPmFsX3JpX2doKTsKKwlpZiAoaXAgIT0gR0ZTMl9JKHNkcC0+c2RfcmluZGV4KSkKKwkJZ2ZzMl9nbG9ja19kcV91bmluaXQoJmlwLT5pX2FsbG9jLT5hbF9yaV9naCk7CiAJcmV0dXJuIGVycm9yOwogfQogCmRpZmYgLS1naXQgYS9mcy9nZnMyL2RlbnRyeS5jIGIvZnMvZ2ZzMi9kZW50cnkuYwppbmRleCA2Nzk4NzU1Li40YTQ1NjMzIDEwMDY0NAotLS0gYS9mcy9nZnMyL2RlbnRyeS5jCisrKyBiL2ZzL2dmczIvZGVudHJ5LmMKQEAgLTExLDYgKzExLDcgQEAKICNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgorI2luY2x1ZGUgPGxpbnV4L25hbWVpLmg+CiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KIAogI2luY2x1ZGUgImdmczIuaCIKQEAgLTM0LDE1ICszNSwyMyBAQAogCiBzdGF0aWMgaW50IGdmczJfZHJldmFsaWRhdGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKIHsKLQlzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQgPSBkZ2V0X3BhcmVudChkZW50cnkpOwotCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gR0ZTMl9TQihwYXJlbnQtPmRfaW5vZGUpOwotCXN0cnVjdCBnZnMyX2lub2RlICpkaXAgPSBHRlMyX0kocGFyZW50LT5kX2lub2RlKTsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBkZW50cnkgKnBhcmVudDsKKwlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcDsKKwlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqZGlwOworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAJc3RydWN0IGdmczJfaG9sZGVyIGRfZ2g7CiAJc3RydWN0IGdmczJfaW5vZGUgKmlwID0gTlVMTDsKIAlpbnQgZXJyb3I7CiAJaW50IGhhZF9sb2NrID0gMDsKIAorCWlmIChuZC0+ZmxhZ3MgJiBMT09LVVBfUkNVKQorCQlyZXR1cm4gLUVDSElMRDsKKworCXBhcmVudCA9IGRnZXRfcGFyZW50KGRlbnRyeSk7CisJc2RwID0gR0ZTMl9TQihwYXJlbnQtPmRfaW5vZGUpOworCWRpcCA9IEdGUzJfSShwYXJlbnQtPmRfaW5vZGUpOworCWlub2RlID0gZGVudHJ5LT5kX2lub2RlOworCiAJaWYgKGlub2RlKSB7CiAJCWlmIChpc19iYWRfaW5vZGUoaW5vZGUpKQogCQkJZ290byBpbnZhbGlkOwpAQCAtMTAwLDEzICsxMDksMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBnZnMyX2RoYXNoKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IHFzdHIgKnN0cikKK3N0YXRpYyBpbnQgZ2ZzMl9kaGFzaChjb25zdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCXN0cnVjdCBxc3RyICpzdHIpCiB7CiAJc3RyLT5oYXNoID0gZ2ZzMl9kaXNrX2hhc2goc3RyLT5uYW1lLCBzdHItPmxlbik7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZ2ZzMl9kZW50cnlfZGVsZXRlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3N0YXRpYyBpbnQgZ2ZzMl9kZW50cnlfZGVsZXRlKGNvbnN0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIHsKIAlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqZ2lub2RlOwogCmRpZmYgLS1naXQgYS9mcy9nZnMyL2V4cG9ydC5jIGIvZnMvZ2ZzMi9leHBvcnQuYwppbmRleCA1YWIzODM5Li45NzAxMmVjIDEwMDY0NAotLS0gYS9mcy9nZnMyL2V4cG9ydC5jCisrKyBiL2ZzL2dmczIvZXhwb3J0LmMKQEAgLTEzMCw3ICsxMzAsNyBAQAogCiAJZGVudHJ5ID0gZF9vYnRhaW5fYWxpYXMoZ2ZzMl9sb29rdXBpKGNoaWxkLT5kX2lub2RlLCAmZ2ZzMl9xZG90ZG90LCAxKSk7CiAJaWYgKCFJU19FUlIoZGVudHJ5KSkKLQkJZGVudHJ5LT5kX29wID0gJmdmczJfZG9wczsKKwkJZF9zZXRfZF9vcChkZW50cnksICZnZnMyX2RvcHMpOwogCXJldHVybiBkZW50cnk7CiB9CiAKQEAgLTE1OCw3ICsxNTgsNyBAQAogb3V0X2lub2RlOgogCWRlbnRyeSA9IGRfb2J0YWluX2FsaWFzKGlub2RlKTsKIAlpZiAoIUlTX0VSUihkZW50cnkpKQotCQlkZW50cnktPmRfb3AgPSAmZ2ZzMl9kb3BzOworCQlkX3NldF9kX29wKGRlbnRyeSwgJmdmczJfZG9wcyk7CiAJcmV0dXJuIGRlbnRyeTsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9maWxlLmMgYi9mcy9nZnMyL2ZpbGUuYwppbmRleCBhYTk5NjQ3Li5mY2E2Njg5IDEwMDY0NAotLS0gYS9mcy9nZnMyL2ZpbGUuYworKysgYi9mcy9nZnMyL2ZpbGUuYwpAQCAtMjQxLDcgKzI0MSw3IEBACiAJICAgICFjYXBhYmxlKENBUF9MSU5VWF9JTU1VVEFCTEUpKQogCQlnb3RvIG91dDsKIAlpZiAoIUlTX0lNTVVUQUJMRShpbm9kZSkpIHsKLQkJZXJyb3IgPSBnZnMyX3Blcm1pc3Npb24oaW5vZGUsIE1BWV9XUklURSk7CisJCWVycm9yID0gZ2ZzMl9wZXJtaXNzaW9uKGlub2RlLCBNQVlfV1JJVEUsIDApOwogCQlpZiAoZXJyb3IpCiAJCQlnb3RvIG91dDsKIAl9CmRpZmYgLS1naXQgYS9mcy9nZnMyL2dsb2NrLmMgYi9mcy9nZnMyL2dsb2NrLmMKaW5kZXggZjkyYzE3Ny4uMDhhOGJlYiAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9nbG9jay5jCisrKyBiL2ZzL2dmczIvZ2xvY2suYwpAQCAtNTQxLDIxICs1NDEsNiBAQAogCXNwaW5fdW5sb2NrKCZnbC0+Z2xfc3Bpbik7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZ2ZzMl9sbV9sb2NrKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCB2b2lkICpsb2NrLAotCQkJCSB1bnNpZ25lZCBpbnQgcmVxX3N0YXRlLAotCQkJCSB1bnNpZ25lZCBpbnQgZmxhZ3MpCi17Ci0JaW50IHJldCA9IExNX09VVF9FUlJPUjsKLQotCWlmICghc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wcy0+bG1fbG9jaykKLQkJcmV0dXJuIHJlcV9zdGF0ZSA9PSBMTV9TVF9VTkxPQ0tFRCA/IDAgOiByZXFfc3RhdGU7Ci0KLQlpZiAobGlrZWx5KCF0ZXN0X2JpdChTREZfU0hVVERPV04sICZzZHAtPnNkX2ZsYWdzKSkpCi0JCXJldCA9IHNkcC0+c2RfbG9ja3N0cnVjdC5sc19vcHMtPmxtX2xvY2sobG9jaywKLQkJCQkJCQkgcmVxX3N0YXRlLCBmbGFncyk7Ci0JcmV0dXJuIHJldDsKLX0KLQogLyoqCiAgKiBkb194bW90ZSAtIENhbGxzIHRoZSBETE0gdG8gY2hhbmdlIHRoZSBzdGF0ZSBvZiBhIGxvY2sKICAqIEBnbDogVGhlIGxvY2sgc3RhdGUKQEAgLTU3NSwxMyArNTYwLDE0IEBACiAKIAlsY2tfZmxhZ3MgJj0gKExNX0ZMQUdfVFJZIHwgTE1fRkxBR19UUllfMUNCIHwgTE1fRkxBR19OT0VYUCB8CiAJCSAgICAgIExNX0ZMQUdfUFJJT1JJVFkpOwotCUJVR19PTihnbC0+Z2xfc3RhdGUgPT0gdGFyZ2V0KTsKLQlCVUdfT04oZ2wtPmdsX3N0YXRlID09IGdsLT5nbF90YXJnZXQpOworCUdMT0NLX0JVR19PTihnbCwgZ2wtPmdsX3N0YXRlID09IHRhcmdldCk7CisJR0xPQ0tfQlVHX09OKGdsLCBnbC0+Z2xfc3RhdGUgPT0gZ2wtPmdsX3RhcmdldCk7CiAJaWYgKCh0YXJnZXQgPT0gTE1fU1RfVU5MT0NLRUQgfHwgdGFyZ2V0ID09IExNX1NUX0RFRkVSUkVEKSAmJgogCSAgICBnbG9wcy0+Z29faW52YWwpIHsKIAkJc2V0X2JpdChHTEZfSU5WQUxJREFURV9JTl9QUk9HUkVTUywgJmdsLT5nbF9mbGFncyk7CiAJCWRvX2Vycm9yKGdsLCAwKTsgLyogRmFpbCBxdWV1ZWQgdHJ5IGxvY2tzICovCiAJfQorCWdsLT5nbF9yZXEgPSB0YXJnZXQ7CiAJc3Bpbl91bmxvY2soJmdsLT5nbF9zcGluKTsKIAlpZiAoZ2xvcHMtPmdvX3htb3RlX3RoKQogCQlnbG9wcy0+Z29feG1vdGVfdGgoZ2wpOwpAQCAtNTk0LDE1ICs1ODAsMTcgQEAKIAkgICAgZ2wtPmdsX3N0YXRlID09IExNX1NUX0RFRkVSUkVEKSAmJgogCSAgICAhKGxja19mbGFncyAmIChMTV9GTEFHX1RSWSB8IExNX0ZMQUdfVFJZXzFDQikpKQogCQlsY2tfZmxhZ3MgfD0gTE1fRkxBR19UUllfMUNCOwotCXJldCA9IGdmczJfbG1fbG9jayhzZHAsIGdsLCB0YXJnZXQsIGxja19mbGFncyk7CiAKLQlpZiAoIShyZXQgJiBMTV9PVVRfQVNZTkMpKSB7Ci0JCWZpbmlzaF94bW90ZShnbCwgcmV0KTsKKwlpZiAoc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wcy0+bG1fbG9jaykJeworCQkvKiBsb2NrX2RsbSAqLworCQlyZXQgPSBzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfb3BzLT5sbV9sb2NrKGdsLCB0YXJnZXQsIGxja19mbGFncyk7CisJCUdMT0NLX0JVR19PTihnbCwgcmV0KTsKKwl9IGVsc2UgeyAvKiBsb2NrX25vbG9jayAqLworCQlmaW5pc2hfeG1vdGUoZ2wsIHRhcmdldCk7CiAJCWlmIChxdWV1ZV9kZWxheWVkX3dvcmsoZ2xvY2tfd29ya3F1ZXVlLCAmZ2wtPmdsX3dvcmssIDApID09IDApCiAJCQlnZnMyX2dsb2NrX3B1dChnbCk7Ci0JfSBlbHNlIHsKLQkJR0xPQ0tfQlVHX09OKGdsLCByZXQgIT0gTE1fT1VUX0FTWU5DKTsKIAl9CisKIAlzcGluX2xvY2soJmdsLT5nbF9zcGluKTsKIH0KIApAQCAtOTUxLDE3ICs5MzksMjIgQEAKIAogdm9pZCBnZnMyX3ByaW50X2RiZyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgY29uc3QgY2hhciAqZm10LCAuLi4pCiB7CisJc3RydWN0IHZhX2Zvcm1hdCB2YWY7CiAJdmFfbGlzdCBhcmdzOwogCiAJdmFfc3RhcnQoYXJncywgZm10KTsKKwogCWlmIChzZXEpIHsKIAkJc3RydWN0IGdmczJfZ2xvY2tfaXRlciAqZ2kgPSBzZXEtPnByaXZhdGU7CiAJCXZzcHJpbnRmKGdpLT5zdHJpbmcsIGZtdCwgYXJncyk7CiAJCXNlcV9wcmludGYoc2VxLCBnaS0+c3RyaW5nKTsKIAl9IGVsc2UgewotCQlwcmludGsoS0VSTl9FUlIgIiAiKTsKLQkJdnByaW50ayhmbXQsIGFyZ3MpOworCQl2YWYuZm10ID0gZm10OworCQl2YWYudmEgPSAmYXJnczsKKworCQlwcmludGsoS0VSTl9FUlIgIiAlcFYiLCAmdmFmKTsKIAl9CisKIAl2YV9lbmQoYXJncyk7CiB9CiAKQEAgLTEzNjEsMjQgKzEzNTQsMjggQEAKICAqIEBnbDogUG9pbnRlciB0byB0aGUgZ2xvY2sKICAqIEByZXQ6IFRoZSByZXR1cm4gdmFsdWUgZnJvbSB0aGUgZGxtCiAgKgorICogVGhlIGdsX3JlcGx5IGZpZWxkIGlzIHVuZGVyIHRoZSBnbF9zcGluIGxvY2sgc28gdGhhdCBpdCBpcyBvaworICogdG8gdXNlIGEgYml0ZmllbGQgc2hhcmVkIHdpdGggb3RoZXIgZ2xvY2sgc3RhdGUgZmllbGRzLgogICovCiAKIHZvaWQgZ2ZzMl9nbG9ja19jb21wbGV0ZShzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wsIGludCByZXQpCiB7CiAJc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxzID0gJmdsLT5nbF9zYmQtPnNkX2xvY2tzdHJ1Y3Q7CiAKKwlzcGluX2xvY2soJmdsLT5nbF9zcGluKTsKIAlnbC0+Z2xfcmVwbHkgPSByZXQ7CiAKIAlpZiAodW5saWtlbHkodGVzdF9iaXQoREZMX0JMT0NLX0xPQ0tTLCAmbHMtPmxzX2ZsYWdzKSkpIHsKLQkJc3Bpbl9sb2NrKCZnbC0+Z2xfc3Bpbik7CiAJCWlmIChnZnMyX3Nob3VsZF9mcmVlemUoZ2wpKSB7CiAJCQlzZXRfYml0KEdMRl9GUk9aRU4sICZnbC0+Z2xfZmxhZ3MpOwogCQkJc3Bpbl91bmxvY2soJmdsLT5nbF9zcGluKTsKIAkJCXJldHVybjsKIAkJfQotCQlzcGluX3VubG9jaygmZ2wtPmdsX3NwaW4pOwogCX0KKworCXNwaW5fdW5sb2NrKCZnbC0+Z2xfc3Bpbik7CiAJc2V0X2JpdChHTEZfUkVQTFlfUEVORElORywgJmdsLT5nbF9mbGFncyk7CisJc21wX3dtYigpOwogCWdmczJfZ2xvY2tfaG9sZChnbCk7CiAJaWYgKHF1ZXVlX2RlbGF5ZWRfd29yayhnbG9ja193b3JrcXVldWUsICZnbC0+Z2xfd29yaywgMCkgPT0gMCkKIAkJZ2ZzMl9nbG9ja19wdXQoZ2wpOwpAQCAtMTYyNiwxOCArMTYyMywxNyBAQAogc3RhdGljIGludCBkdW1wX2hvbGRlcihzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgY29uc3Qgc3RydWN0IGdmczJfaG9sZGVyICpnaCkKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmdoX293bmVyID0gTlVMTDsKLQljaGFyIGJ1ZmZlcltLU1lNX1NZTUJPTF9MRU5dOwogCWNoYXIgZmxhZ3NfYnVmWzMyXTsKIAotCXNwcmludF9zeW1ib2woYnVmZmVyLCBnaC0+Z2hfaXApOwogCWlmIChnaC0+Z2hfb3duZXJfcGlkKQogCQlnaF9vd25lciA9IHBpZF90YXNrKGdoLT5naF9vd25lcl9waWQsIFBJRFRZUEVfUElEKTsKLQlnZnMyX3ByaW50X2RiZyhzZXEsICIgSDogczolcyBmOiVzIGU6JWQgcDolbGQgWyVzXSAlc1xuIiwKLQkJICBzdGF0ZTJzdHIoZ2gtPmdoX3N0YXRlKSwKLQkJICBoZmxhZ3Myc3RyKGZsYWdzX2J1ZiwgZ2gtPmdoX2ZsYWdzLCBnaC0+Z2hfaWZsYWdzKSwKLQkJICBnaC0+Z2hfZXJyb3IsIAotCQkgIGdoLT5naF9vd25lcl9waWQgPyAobG9uZylwaWRfbnIoZ2gtPmdoX293bmVyX3BpZCkgOiAtMSwKLQkJICBnaF9vd25lciA/IGdoX293bmVyLT5jb21tIDogIihlbmRlZCkiLCBidWZmZXIpOworCWdmczJfcHJpbnRfZGJnKHNlcSwgIiBIOiBzOiVzIGY6JXMgZTolZCBwOiVsZCBbJXNdICVwU1xuIiwKKwkJICAgICAgIHN0YXRlMnN0cihnaC0+Z2hfc3RhdGUpLAorCQkgICAgICAgaGZsYWdzMnN0cihmbGFnc19idWYsIGdoLT5naF9mbGFncywgZ2gtPmdoX2lmbGFncyksCisJCSAgICAgICBnaC0+Z2hfZXJyb3IsCisJCSAgICAgICBnaC0+Z2hfb3duZXJfcGlkID8gKGxvbmcpcGlkX25yKGdoLT5naF9vd25lcl9waWQpIDogLTEsCisJCSAgICAgICBnaF9vd25lciA/IGdoX293bmVyLT5jb21tIDogIihlbmRlZCkiLAorCQkgICAgICAgKHZvaWQgKilnaC0+Z2hfaXApOwogCXJldHVybiAwOwogfQogCkBAIC0xNzgyLDEyICsxNzc4LDEzIEBACiAJfQogI2VuZGlmCiAKLQlnbG9ja193b3JrcXVldWUgPSBhbGxvY193b3JrcXVldWUoImdsb2NrX3dvcmtxdWV1ZSIsIFdRX1JFU0NVRVIgfAorCWdsb2NrX3dvcmtxdWV1ZSA9IGFsbG9jX3dvcmtxdWV1ZSgiZ2xvY2tfd29ya3F1ZXVlIiwgV1FfTUVNX1JFQ0xBSU0gfAogCQkJCQkgIFdRX0hJR0hQUkkgfCBXUV9GUkVFWkVBQkxFLCAwKTsKIAlpZiAoSVNfRVJSKGdsb2NrX3dvcmtxdWV1ZSkpCiAJCXJldHVybiBQVFJfRVJSKGdsb2NrX3dvcmtxdWV1ZSk7Ci0JZ2ZzMl9kZWxldGVfd29ya3F1ZXVlID0gYWxsb2Nfd29ya3F1ZXVlKCJkZWxldGVfd29ya3F1ZXVlIiwgV1FfUkVTQ1VFUiB8Ci0JCQkJCQlXUV9GUkVFWkVBQkxFLCAwKTsKKwlnZnMyX2RlbGV0ZV93b3JrcXVldWUgPSBhbGxvY193b3JrcXVldWUoImRlbGV0ZV93b3JrcXVldWUiLAorCQkJCQkJV1FfTUVNX1JFQ0xBSU0gfCBXUV9GUkVFWkVBQkxFLAorCQkJCQkJMCk7CiAJaWYgKElTX0VSUihnZnMyX2RlbGV0ZV93b3JrcXVldWUpKSB7CiAJCWRlc3Ryb3lfd29ya3F1ZXVlKGdsb2NrX3dvcmtxdWV1ZSk7CiAJCXJldHVybiBQVFJfRVJSKGdmczJfZGVsZXRlX3dvcmtxdWV1ZSk7CmRpZmYgLS1naXQgYS9mcy9nZnMyL2dsb2NrLmggYi9mcy9nZnMyL2dsb2NrLmgKaW5kZXggZGIxYzI2ZC4uNjkxODUxYyAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9nbG9jay5oCisrKyBiL2ZzL2dmczIvZ2xvY2suaApAQCAtODcsMTEgKzg3LDEwIEBACiAjZGVmaW5lIEdMX0FTWU5DCQkweDAwMDAwMDQwCiAjZGVmaW5lIEdMX0VYQUNUCQkweDAwMDAwMDgwCiAjZGVmaW5lIEdMX1NLSVAJCQkweDAwMDAwMTAwCi0jZGVmaW5lIEdMX0FUSU1FCQkweDAwMDAwMjAwCiAjZGVmaW5lIEdMX05PQ0FDSEUJCTB4MDAwMDA0MDAKICAgCiAvKgotICogbG1fbG9jaygpIGFuZCBsbV9hc3luY19jYiByZXR1cm4gZmxhZ3MKKyAqIGxtX2FzeW5jX2NiIHJldHVybiBmbGFncwogICoKICAqIExNX09VVF9TVF9NQVNLCiAgKiBNYXNrcyB0aGUgbG93ZXIgdHdvIGJpdHMgb2YgbG9jayBzdGF0ZSBpbiB0aGUgcmV0dXJuZWQgdmFsdWUuCkBAIC05OSwxNSArOTgsMTEgQEAKICAqIExNX09VVF9DQU5DRUxFRAogICogVGhlIGxvY2sgcmVxdWVzdCB3YXMgY2FuY2VsZWQuCiAgKgotICogTE1fT1VUX0FTWU5DCi0gKiBUaGUgcmVzdWx0IG9mIHRoZSByZXF1ZXN0IHdpbGwgYmUgcmV0dXJuZWQgaW4gYW4gTE1fQ0JfQVNZTkMgY2FsbGJhY2suCi0gKgogICovCiAKICNkZWZpbmUgTE1fT1VUX1NUX01BU0sJCTB4MDAwMDAwMDMKICNkZWZpbmUgTE1fT1VUX0NBTkNFTEVECQkweDAwMDAwMDA4Ci0jZGVmaW5lIExNX09VVF9BU1lOQwkJMHgwMDAwMDA4MAotI2RlZmluZSBMTV9PVVRfRVJST1IJCTB4MDAwMDAxMDAKKyNkZWZpbmUgTE1fT1VUX0VSUk9SCQkweDAwMDAwMDA0CiAKIC8qCiAgKiBsbV9yZWNvdmVyeV9kb25lKCkgbWVzc2FnZXMKQEAgLTEyNCwyNSArMTE5LDEyIEBACiAgCXZvaWQgKCpsbV91bm1vdW50KSAoc3RydWN0IGdmczJfc2JkICpzZHApOwogCXZvaWQgKCpsbV93aXRoZHJhdykgKHN0cnVjdCBnZnMyX3NiZCAqc2RwKTsKIAl2b2lkICgqbG1fcHV0X2xvY2spIChzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwLCBzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wpOwotCXVuc2lnbmVkIGludCAoKmxtX2xvY2spIChzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wsCi0JCQkJIHVuc2lnbmVkIGludCByZXFfc3RhdGUsIHVuc2lnbmVkIGludCBmbGFncyk7CisJaW50ICgqbG1fbG9jaykgKHN0cnVjdCBnZnMyX2dsb2NrICpnbCwgdW5zaWduZWQgaW50IHJlcV9zdGF0ZSwKKwkJCXVuc2lnbmVkIGludCBmbGFncyk7CiAJdm9pZCAoKmxtX2NhbmNlbCkgKHN0cnVjdCBnZnMyX2dsb2NrICpnbCk7CiAJY29uc3QgbWF0Y2hfdGFibGVfdCAqbG1fdG9rZW5zOwogfTsKIAotI2RlZmluZSBMTV9GTEFHX1RSWQkJMHgwMDAwMDAwMQotI2RlZmluZSBMTV9GTEFHX1RSWV8xQ0IJCTB4MDAwMDAwMDIKLSNkZWZpbmUgTE1fRkxBR19OT0VYUAkJMHgwMDAwMDAwNAotI2RlZmluZSBMTV9GTEFHX0FOWQkJMHgwMDAwMDAwOAotI2RlZmluZSBMTV9GTEFHX1BSSU9SSVRZCTB4MDAwMDAwMTAKLQotI2RlZmluZSBHTF9BU1lOQwkJMHgwMDAwMDA0MAotI2RlZmluZSBHTF9FWEFDVAkJMHgwMDAwMDA4MAotI2RlZmluZSBHTF9TS0lQCQkJMHgwMDAwMDEwMAotI2RlZmluZSBHTF9OT0NBQ0hFCQkweDAwMDAwNDAwCi0KLSNkZWZpbmUgR0xSX1RSWUZBSUxFRAkJMTMKLQogZXh0ZXJuIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpnZnMyX2RlbGV0ZV93b3JrcXVldWU7CiBzdGF0aWMgaW5saW5lIHN0cnVjdCBnZnMyX2hvbGRlciAqZ2ZzMl9nbG9ja19pc19sb2NrZWRfYnlfbWUoc3RydWN0IGdmczJfZ2xvY2sgKmdsKQogewpAQCAtMjEyLDYgKzE5NCw4IEBACiBpbnQgZ2ZzMl9nbG9ja19ucV9tKHVuc2lnbmVkIGludCBudW1fZ2gsIHN0cnVjdCBnZnMyX2hvbGRlciAqZ2hzKTsKIHZvaWQgZ2ZzMl9nbG9ja19kcV9tKHVuc2lnbmVkIGludCBudW1fZ2gsIHN0cnVjdCBnZnMyX2hvbGRlciAqZ2hzKTsKIHZvaWQgZ2ZzMl9nbG9ja19kcV91bmluaXRfbSh1bnNpZ25lZCBpbnQgbnVtX2doLCBzdHJ1Y3QgZ2ZzMl9ob2xkZXIgKmdocyk7CisKK19fYXR0cmlidXRlX18gKChmb3JtYXQocHJpbnRmLCAyLCAzKSkpCiB2b2lkIGdmczJfcHJpbnRfZGJnKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBjb25zdCBjaGFyICpmbXQsIC4uLik7CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9nbG9wcy5jIGIvZnMvZ2ZzMi9nbG9wcy5jCmluZGV4IDBkMTQ5ZGMuLjI2MzU2MWIgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvZ2xvcHMuYworKysgYi9mcy9nZnMyL2dsb3BzLmMKQEAgLTMyNSw3ICszMjUsNiBAQAogCiAJaWYgKGdsLT5nbF9zdGF0ZSAhPSBMTV9TVF9VTkxPQ0tFRCAmJgogCSAgICB0ZXN0X2JpdChTREZfSk9VUk5BTF9MSVZFLCAmc2RwLT5zZF9mbGFncykpIHsKLQkJZmx1c2hfd29ya3F1ZXVlKGdmczJfZGVsZXRlX3dvcmtxdWV1ZSk7CiAJCWdmczJfbWV0YV9zeW5jZnMoc2RwKTsKIAkJZ2ZzMl9sb2dfc2h1dGRvd24oc2RwKTsKIAl9CmRpZmYgLS1naXQgYS9mcy9nZnMyL2luY29yZS5oIGIvZnMvZ2ZzMi9pbmNvcmUuaAppbmRleCA3NjRmYmI0Li44ZDNkMmI0IDEwMDY0NAotLS0gYS9mcy9nZnMyL2luY29yZS5oCisrKyBiL2ZzL2dmczIvaW5jb3JlLmgKQEAgLTIwNywxMiArMjA3LDE0IEBACiAKIAlzcGlubG9ja190IGdsX3NwaW47CiAKLQl1bnNpZ25lZCBpbnQgZ2xfc3RhdGU7Ci0JdW5zaWduZWQgaW50IGdsX3RhcmdldDsKLQl1bnNpZ25lZCBpbnQgZ2xfcmVwbHk7CisJLyogU3RhdGUgZmllbGRzIHByb3RlY3RlZCBieSBnbF9zcGluICovCisJdW5zaWduZWQgaW50IGdsX3N0YXRlOjIsCS8qIEN1cnJlbnQgc3RhdGUgKi8KKwkJICAgICBnbF90YXJnZXQ6MiwJLyogVGFyZ2V0IHN0YXRlICovCisJCSAgICAgZ2xfZGVtb3RlX3N0YXRlOjIsCS8qIFN0YXRlIHJlcXVlc3RlZCBieSByZW1vdGUgbm9kZSAqLworCQkgICAgIGdsX3JlcToyLAkJLyogU3RhdGUgaW4gbGFzdCBkbG0gcmVxdWVzdCAqLworCQkgICAgIGdsX3JlcGx5Ojg7CS8qIExhc3QgcmVwbHkgZnJvbSB0aGUgZGxtICovCisKIAl1bnNpZ25lZCBpbnQgZ2xfaGFzaDsKLQl1bnNpZ25lZCBpbnQgZ2xfcmVxOwotCXVuc2lnbmVkIGludCBnbF9kZW1vdGVfc3RhdGU7IC8qIHN0YXRlIHJlcXVlc3RlZCBieSByZW1vdGUgbm9kZSAqLwogCXVuc2lnbmVkIGxvbmcgZ2xfZGVtb3RlX3RpbWU7IC8qIHRpbWUgb2YgZmlyc3QgZGVtb3RlIHJlcXVlc3QgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGdsX2hvbGRlcnM7CiAKZGlmZiAtLWdpdCBhL2ZzL2dmczIvaW5vZGUuYyBiL2ZzL2dmczIvaW5vZGUuYwppbmRleCBlMTIxM2Y3Li4yMjMyYjNjIDEwMDY0NAotLS0gYS9mcy9nZnMyL2lub2RlLmMKKysrIGIvZnMvZ2ZzMi9pbm9kZS5jCkBAIC01MDksNyArNTA5LDcgQEAKIAl9CiAKIAlpZiAoIWlzX3Jvb3QpIHsKLQkJZXJyb3IgPSBnZnMyX3Blcm1pc3Npb24oZGlyLCBNQVlfRVhFQyk7CisJCWVycm9yID0gZ2ZzMl9wZXJtaXNzaW9uKGRpciwgTUFZX0VYRUMsIDApOwogCQlpZiAoZXJyb3IpCiAJCQlnb3RvIG91dDsKIAl9CkBAIC01MzksNyArNTM5LDcgQEAKIHsKIAlpbnQgZXJyb3I7CiAKLQllcnJvciA9IGdmczJfcGVybWlzc2lvbigmZGlwLT5pX2lub2RlLCBNQVlfV1JJVEUgfCBNQVlfRVhFQyk7CisJZXJyb3IgPSBnZnMyX3Blcm1pc3Npb24oJmRpcC0+aV9pbm9kZSwgTUFZX1dSSVRFIHwgTUFZX0VYRUMsIDApOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCkBAIC05MTYsMTcgKzkxNiw4IEBACiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKLQlpZiAoKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9TSVpFKSAmJgotCSAgICBhdHRyLT5pYV9zaXplICE9IGlfc2l6ZV9yZWFkKGlub2RlKSkgewotCQllcnJvciA9IHZtdHJ1bmNhdGUoaW5vZGUsIGF0dHItPmlhX3NpemUpOwotCQlpZiAoZXJyb3IpCi0JCQlyZXR1cm4gZXJyb3I7Ci0JfQotCiAJc2V0YXR0cl9jb3B5KGlub2RlLCBhdHRyKTsKIAltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKLQotCWdmczJfYXNzZXJ0X3dhcm4oR0ZTMl9TQihpbm9kZSksICFlcnJvcik7CiAJZ2ZzMl90cmFuc19hZGRfYmgoaXAtPmlfZ2wsIGRpYmgsIDEpOwogCWdmczJfZGlub2RlX291dChpcCwgZGliaC0+Yl9kYXRhKTsKIAlicmVsc2UoZGliaCk7CmRpZmYgLS1naXQgYS9mcy9nZnMyL2lub2RlLmggYi9mcy9nZnMyL2lub2RlLmgKaW5kZXggZDg0OTlmYS4uNzMyYTE4MyAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9pbm9kZS5oCisrKyBiL2ZzL2dmczIvaW5vZGUuaApAQCAtMTEzLDcgKzExMyw3IEBACiBleHRlcm4gc3RydWN0IGlub2RlICpnZnMyX2NyZWF0ZWkoc3RydWN0IGdmczJfaG9sZGVyICpnaHMsCiAJCQkJICBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSwKIAkJCQkgIHVuc2lnbmVkIGludCBtb2RlLCBkZXZfdCBkZXYpOwotZXh0ZXJuIGludCBnZnMyX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spOworZXh0ZXJuIGludCBnZnMyX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2ssIHVuc2lnbmVkIGludCBmbGFncyk7CiBleHRlcm4gaW50IGdmczJfc2V0YXR0cl9zaW1wbGUoc3RydWN0IGdmczJfaW5vZGUgKmlwLCBzdHJ1Y3QgaWF0dHIgKmF0dHIpOwogZXh0ZXJuIHN0cnVjdCBpbm9kZSAqZ2ZzMl9sb29rdXBfc2ltcGxlKHN0cnVjdCBpbm9kZSAqZGlwLCBjb25zdCBjaGFyICpuYW1lKTsKIGV4dGVybiB2b2lkIGdmczJfZGlub2RlX291dChjb25zdCBzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIHZvaWQgKmJ1Zik7CmRpZmYgLS1naXQgYS9mcy9nZnMyL2xvY2tfZGxtLmMgYi9mcy9nZnMyL2xvY2tfZGxtLmMKaW5kZXggMWMwOTQyNS4uNmU0OTNhZSAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9sb2NrX2RsbS5jCisrKyBiL2ZzL2dmczIvbG9ja19kbG0uYwpAQCAtMTQ2LDE1ICsxNDYsMTMgQEAKIAlyZXR1cm4gbGtmOwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IGdkbG1fbG9jayhzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wsCi0JCQkgICAgICB1bnNpZ25lZCBpbnQgcmVxX3N0YXRlLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCitzdGF0aWMgaW50IGdkbG1fbG9jayhzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wsIHVuc2lnbmVkIGludCByZXFfc3RhdGUsCisJCSAgICAgdW5zaWduZWQgaW50IGZsYWdzKQogewogCXN0cnVjdCBsbV9sb2Nrc3RydWN0ICpscyA9ICZnbC0+Z2xfc2JkLT5zZF9sb2Nrc3RydWN0OwotCWludCBlcnJvcjsKIAlpbnQgcmVxOwogCXUzMiBsa2Y7CiAKLQlnbC0+Z2xfcmVxID0gcmVxX3N0YXRlOwogCXJlcSA9IG1ha2VfbW9kZShyZXFfc3RhdGUpOwogCWxrZiA9IG1ha2VfZmxhZ3MoZ2wtPmdsX2xrc2Iuc2JfbGtpZCwgZmxhZ3MsIHJlcSk7CiAKQEAgLTE2MiwxMyArMTYwLDggQEAKIAkgKiBTdWJtaXQgdGhlIGFjdHVhbCBsb2NrIHJlcXVlc3QuCiAJICovCiAKLQllcnJvciA9IGRsbV9sb2NrKGxzLT5sc19kbG0sIHJlcSwgJmdsLT5nbF9sa3NiLCBsa2YsIGdsLT5nbF9zdHJuYW1lLAotCQkJIEdETE1fU1RSTkFNRV9CWVRFUyAtIDEsIDAsIGdkbG1fYXN0LCBnbCwgZ2RsbV9iYXN0KTsKLQlpZiAoZXJyb3IgPT0gLUVBR0FJTikKLQkJcmV0dXJuIDA7Ci0JaWYgKGVycm9yKQotCQlyZXR1cm4gTE1fT1VUX0VSUk9SOwotCXJldHVybiBMTV9PVVRfQVNZTkM7CisJcmV0dXJuIGRsbV9sb2NrKGxzLT5sc19kbG0sIHJlcSwgJmdsLT5nbF9sa3NiLCBsa2YsIGdsLT5nbF9zdHJuYW1lLAorCQkJR0RMTV9TVFJOQU1FX0JZVEVTIC0gMSwgMCwgZ2RsbV9hc3QsIGdsLCBnZGxtX2Jhc3QpOwogfQogCiBzdGF0aWMgdm9pZCBnZGxtX3B1dF9sb2NrKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAsIHN0cnVjdCBnZnMyX2dsb2NrICpnbCkKZGlmZiAtLWdpdCBhL2ZzL2dmczIvb3BzX2ZzdHlwZS5jIGIvZnMvZ2ZzMi9vcHNfZnN0eXBlLmMKaW5kZXggM2ViMTM5My4uMmFlYWJkNCAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9vcHNfZnN0eXBlLmMKKysrIGIvZnMvZ2ZzMi9vcHNfZnN0eXBlLmMKQEAgLTQ0MCw3ICs0NDAsNyBAQAogCQlpcHV0KGlub2RlKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCWRlbnRyeS0+ZF9vcCA9ICZnZnMyX2RvcHM7CisJZF9zZXRfZF9vcChkZW50cnksICZnZnMyX2RvcHMpOwogCSpkcHRyID0gZGVudHJ5OwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9vcHNfaW5vZGUuYyBiL2ZzL2dmczIvb3BzX2lub2RlLmMKaW5kZXggMTJjYmVhNy4uMTUwMWRiNCAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9vcHNfaW5vZGUuYworKysgYi9mcy9nZnMyL29wc19pbm9kZS5jCkBAIC0xMDYsNyArMTA2LDcgQEAKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gTlVMTDsKIAotCWRlbnRyeS0+ZF9vcCA9ICZnZnMyX2RvcHM7CisJZF9zZXRfZF9vcChkZW50cnksICZnZnMyX2RvcHMpOwogCiAJaW5vZGUgPSBnZnMyX2xvb2t1cGkoZGlyLCAmZGVudHJ5LT5kX25hbWUsIDApOwogCWlmIChpbm9kZSAmJiBJU19FUlIoaW5vZGUpKQpAQCAtMTY2LDcgKzE2Niw3IEBACiAJaWYgKGVycm9yKQogCQlnb3RvIG91dF9jaGlsZDsKIAotCWVycm9yID0gZ2ZzMl9wZXJtaXNzaW9uKGRpciwgTUFZX1dSSVRFIHwgTUFZX0VYRUMpOworCWVycm9yID0gZ2ZzMl9wZXJtaXNzaW9uKGRpciwgTUFZX1dSSVRFIHwgTUFZX0VYRUMsIDApOwogCWlmIChlcnJvcikKIAkJZ290byBvdXRfZ3VubG9jazsKIApAQCAtMjg5LDcgKzI4OSw3IEBACiAJaWYgKElTX0FQUEVORCgmZGlwLT5pX2lub2RlKSkKIAkJcmV0dXJuIC1FUEVSTTsKIAotCWVycm9yID0gZ2ZzMl9wZXJtaXNzaW9uKCZkaXAtPmlfaW5vZGUsIE1BWV9XUklURSB8IE1BWV9FWEVDKTsKKwllcnJvciA9IGdmczJfcGVybWlzc2lvbigmZGlwLT5pX2lub2RlLCBNQVlfV1JJVEUgfCBNQVlfRVhFQywgMCk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKQEAgLTgyMiw3ICs4MjIsNyBAQAogCQkJfQogCQl9CiAJfSBlbHNlIHsKLQkJZXJyb3IgPSBnZnMyX3Blcm1pc3Npb24obmRpciwgTUFZX1dSSVRFIHwgTUFZX0VYRUMpOworCQllcnJvciA9IGdmczJfcGVybWlzc2lvbihuZGlyLCBNQVlfV1JJVEUgfCBNQVlfRVhFQywgMCk7CiAJCWlmIChlcnJvcikKIAkJCWdvdG8gb3V0X2d1bmxvY2s7CiAKQEAgLTg1Nyw3ICs4NTcsNyBAQAogCS8qIENoZWNrIG91dCB0aGUgZGlyIHRvIGJlIHJlbmFtZWQgKi8KIAogCWlmIChkaXJfcmVuYW1lKSB7Ci0JCWVycm9yID0gZ2ZzMl9wZXJtaXNzaW9uKG9kZW50cnktPmRfaW5vZGUsIE1BWV9XUklURSk7CisJCWVycm9yID0gZ2ZzMl9wZXJtaXNzaW9uKG9kZW50cnktPmRfaW5vZGUsIE1BWV9XUklURSwgMCk7CiAJCWlmIChlcnJvcikKIAkJCWdvdG8gb3V0X2d1bmxvY2s7CiAJfQpAQCAtMTA0MSwxMyArMTA0MSwxNyBAQAogICogUmV0dXJuczogZXJybm8KICAqLwogCi1pbnQgZ2ZzMl9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKQoraW50IGdmczJfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaywgdW5zaWduZWQgaW50IGZsYWdzKQogewotCXN0cnVjdCBnZnMyX2lub2RlICppcCA9IEdGUzJfSShpbm9kZSk7CisJc3RydWN0IGdmczJfaW5vZGUgKmlwOwogCXN0cnVjdCBnZnMyX2hvbGRlciBpX2doOwogCWludCBlcnJvcjsKIAlpbnQgdW5sb2NrID0gMDsKIAorCWlmIChmbGFncyAmIElQRVJNX0ZMQUdfUkNVKQorCQlyZXR1cm4gLUVDSElMRDsKKworCWlwID0gR0ZTMl9JKGlub2RlKTsKIAlpZiAoZ2ZzMl9nbG9ja19pc19sb2NrZWRfYnlfbWUoaXAtPmlfZ2wpID09IE5VTEwpIHsKIAkJZXJyb3IgPSBnZnMyX2dsb2NrX25xX2luaXQoaXAtPmlfZ2wsIExNX1NUX1NIQVJFRCwgTE1fRkxBR19BTlksICZpX2doKTsKIAkJaWYgKGVycm9yKQpAQCAtMTA1OCw3ICsxMDYyLDcgQEAKIAlpZiAoKG1hc2sgJiBNQVlfV1JJVEUpICYmIElTX0lNTVVUQUJMRShpbm9kZSkpCiAJCWVycm9yID0gLUVBQ0NFUzsKIAllbHNlCi0JCWVycm9yID0gZ2VuZXJpY19wZXJtaXNzaW9uKGlub2RlLCBtYXNrLCBnZnMyX2NoZWNrX2FjbCk7CisJCWVycm9yID0gZ2VuZXJpY19wZXJtaXNzaW9uKGlub2RlLCBtYXNrLCBmbGFncywgZ2ZzMl9jaGVja19hY2wpOwogCWlmICh1bmxvY2spCiAJCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZpX2doKTsKIApAQCAtMTA2OSw3ICsxMDczLDYgQEAKIHsKIAlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAgPSBHRlMyX0koaW5vZGUpOwogCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gR0ZTMl9TQihpbm9kZSk7Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpkaWJoOwogCXUzMiBvdWlkLCBvZ2lkLCBudWlkLCBuZ2lkOwogCWludCBlcnJvcjsKIApAQCAtMTEwMCwyNSArMTEwMywxMCBAQAogCWlmIChlcnJvcikKIAkJZ290byBvdXRfZ3VubG9ja19xOwogCi0JZXJyb3IgPSBnZnMyX21ldGFfaW5vZGVfYnVmZmVyKGlwLCAmZGliaCk7CisJZXJyb3IgPSBnZnMyX3NldGF0dHJfc2ltcGxlKGlwLCBhdHRyKTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gb3V0X2VuZF90cmFuczsKIAotCWlmICgoYXR0ci0+aWFfdmFsaWQgJiBBVFRSX1NJWkUpICYmCi0JICAgIGF0dHItPmlhX3NpemUgIT0gaV9zaXplX3JlYWQoaW5vZGUpKSB7Ci0JCWludCBlcnJvcjsKLQotCQllcnJvciA9IHZtdHJ1bmNhdGUoaW5vZGUsIGF0dHItPmlhX3NpemUpOwotCQlnZnMyX2Fzc2VydF93YXJuKHNkcCwgIWVycm9yKTsKLQl9Ci0KLQlzZXRhdHRyX2NvcHkoaW5vZGUsIGF0dHIpOwotCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwotCi0JZ2ZzMl90cmFuc19hZGRfYmgoaXAtPmlfZ2wsIGRpYmgsIDEpOwotCWdmczJfZGlub2RlX291dChpcCwgZGliaC0+Yl9kYXRhKTsKLQlicmVsc2UoZGliaCk7Ci0KIAlpZiAob3VpZCAhPSBOT19RVU9UQV9DSEFOR0UgfHwgb2dpZCAhPSBOT19RVU9UQV9DSEFOR0UpIHsKIAkJdTY0IGJsb2NrcyA9IGdmczJfZ2V0X2lub2RlX2Jsb2NrcygmaXAtPmlfaW5vZGUpOwogCQlnZnMyX3F1b3RhX2NoYW5nZShpcCwgLWJsb2Nrcywgb3VpZCwgb2dpZCk7CmRpZmYgLS1naXQgYS9mcy9nZnMyL3F1b3RhLmMgYi9mcy9nZnMyL3F1b3RhLmMKaW5kZXggZjYwNmJhZi4uYTY4OTkwMSAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9xdW90YS5jCisrKyBiL2ZzL2dmczIvcXVvdGEuYwpAQCAtNjY2LDYgKzY2NiwxMCBAQAogCQkJcXAtPnF1X2xpbWl0ID0gY3B1X3RvX2JlNjQoZmRxLT5kX2Jsa19oYXJkbGltaXQgPj4gc2RwLT5zZF9mc2IyYmJfc2hpZnQpOwogCQkJcWQtPnFkX3FiLnFiX2xpbWl0ID0gcXAtPnF1X2xpbWl0OwogCQl9CisJCWlmIChmZHEtPmRfZmllbGRtYXNrICYgRlNfRFFfQkNPVU5UKSB7CisJCQlxcC0+cXVfdmFsdWUgPSBjcHVfdG9fYmU2NChmZHEtPmRfYmNvdW50ID4+IHNkcC0+c2RfZnNiMmJiX3NoaWZ0KTsKKwkJCXFkLT5xZF9xYi5xYl92YWx1ZSA9IHFwLT5xdV92YWx1ZTsKKwkJfQogCX0KIAogCS8qIFdyaXRlIHRoZSBxdW90YSBpbnRvIHRoZSBxdW90YSBmaWxlIG9uIGRpc2sgKi8KQEAgLTE1MDksNyArMTUxMyw3IEBACiB9CiAKIC8qIEdGUzIgb25seSBzdXBwb3J0cyBhIHN1YnNldCBvZiB0aGUgWEZTIGZpZWxkcyAqLwotI2RlZmluZSBHRlMyX0ZJRUxETUFTSyAoRlNfRFFfQlNPRlR8RlNfRFFfQkhBUkQpCisjZGVmaW5lIEdGUzJfRklFTERNQVNLIChGU19EUV9CU09GVHxGU19EUV9CSEFSRHxGU19EUV9CQ09VTlQpCiAKIHN0YXRpYyBpbnQgZ2ZzMl9zZXRfZHFibGsoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIHFpZF90IGlkLAogCQkJICBzdHJ1Y3QgZnNfZGlza19xdW90YSAqZmRxKQpAQCAtMTU2OSw5ICsxNTczLDE1IEBACiAJaWYgKChmZHEtPmRfZmllbGRtYXNrICYgRlNfRFFfQlNPRlQpICYmCiAJICAgICgoZmRxLT5kX2Jsa19zb2Z0bGltaXQgPj4gc2RwLT5zZF9mc2IyYmJfc2hpZnQpID09IGJlNjRfdG9fY3B1KHFkLT5xZF9xYi5xYl93YXJuKSkpCiAJCWZkcS0+ZF9maWVsZG1hc2sgXj0gRlNfRFFfQlNPRlQ7CisKIAlpZiAoKGZkcS0+ZF9maWVsZG1hc2sgJiBGU19EUV9CSEFSRCkgJiYKIAkgICAgKChmZHEtPmRfYmxrX2hhcmRsaW1pdCA+PiBzZHAtPnNkX2ZzYjJiYl9zaGlmdCkgPT0gYmU2NF90b19jcHUocWQtPnFkX3FiLnFiX2xpbWl0KSkpCiAJCWZkcS0+ZF9maWVsZG1hc2sgXj0gRlNfRFFfQkhBUkQ7CisKKwlpZiAoKGZkcS0+ZF9maWVsZG1hc2sgJiBGU19EUV9CQ09VTlQpICYmCisJICAgICgoZmRxLT5kX2Jjb3VudCA+PiBzZHAtPnNkX2ZzYjJiYl9zaGlmdCkgPT0gYmU2NF90b19jcHUocWQtPnFkX3FiLnFiX3ZhbHVlKSkpCisJCWZkcS0+ZF9maWVsZG1hc2sgXj0gRlNfRFFfQkNPVU5UOworCiAJaWYgKGZkcS0+ZF9maWVsZG1hc2sgPT0gMCkKIAkJZ290byBvdXRfaTsKIApAQCAtMTYyMCw0ICsxNjMwLDMgQEAKIAkuZ2V0X2RxYmxrCT0gZ2ZzMl9nZXRfZHFibGssCiAJLnNldF9kcWJsawk9IGdmczJfc2V0X2RxYmxrLAogfTsKLQpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9yZ3JwLmMgYi9mcy9nZnMyL3JncnAuYwppbmRleCAzM2M4NDA3Li43MjkzZWEyIDEwMDY0NAotLS0gYS9mcy9nZnMyL3JncnAuYworKysgYi9mcy9nZnMyL3JncnAuYwpAQCAtNTAwLDcgKzUwMCw3IEBACiAJZm9yIChyZ3JwcyA9IDA7OyByZ3JwcysrKSB7CiAJCWxvZmZfdCBwb3MgPSByZ3JwcyAqIHNpemVvZihzdHJ1Y3QgZ2ZzMl9yaW5kZXgpOwogCi0JCWlmIChwb3MgKyBzaXplb2Yoc3RydWN0IGdmczJfcmluZGV4KSA+PSBpX3NpemVfcmVhZChpbm9kZSkpCisJCWlmIChwb3MgKyBzaXplb2Yoc3RydWN0IGdmczJfcmluZGV4KSA+IGlfc2l6ZV9yZWFkKGlub2RlKSkKIAkJCWJyZWFrOwogCQllcnJvciA9IGdmczJfaW50ZXJuYWxfcmVhZChpcCwgJnJhX3N0YXRlLCBidWYsICZwb3MsCiAJCQkJCSAgIHNpemVvZihzdHJ1Y3QgZ2ZzMl9yaW5kZXgpKTsKQEAgLTU4Myw3ICs1ODMsNyBAQAogICogUmV0dXJuczogMCBvbiBzdWNjZXNzZnVsIHVwZGF0ZSwgZXJyb3IgY29kZSBvdGhlcndpc2UKICAqLwogCi1zdGF0aWMgaW50IGdmczJfcmlfdXBkYXRlKHN0cnVjdCBnZnMyX2lub2RlICppcCkKK2ludCBnZnMyX3JpX3VwZGF0ZShzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXApCiB7CiAJc3RydWN0IGdmczJfc2JkICpzZHAgPSBHRlMyX1NCKCZpcC0+aV9pbm9kZSk7CiAJc3RydWN0IGlub2RlICppbm9kZSA9ICZpcC0+aV9pbm9kZTsKQEAgLTYxNCw0NiArNjE0LDYgQEAKIH0KIAogLyoqCi0gKiBnZnMyX3JpX3VwZGF0ZV9zcGVjaWFsIC0gUHVsbCBpbiBhIG5ldyByZXNvdXJjZSBpbmRleCBmcm9tIHRoZSBkaXNrCi0gKgotICogVGhpcyBpcyBhIHNwZWNpYWwgdmVyc2lvbiB0aGF0J3Mgc2FmZSB0byBjYWxsIGZyb20gZ2ZzMl9pbnBsYWNlX3Jlc2VydmVfaS4KLSAqIEluIHRoaXMgY2FzZSB3ZSBrbm93IHRoYXQgd2UgZG9uJ3QgaGF2ZSBhbnkgcmVzb3VyY2UgZ3JvdXBzIGluIG1lbW9yeSB5ZXQuCi0gKgotICogQGlwOiBwb2ludGVyIHRvIHRoZSByaW5kZXggaW5vZGUKLSAqCi0gKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3NmdWwgdXBkYXRlLCBlcnJvciBjb2RlIG90aGVyd2lzZQotICovCi1zdGF0aWMgaW50IGdmczJfcmlfdXBkYXRlX3NwZWNpYWwoc3RydWN0IGdmczJfaW5vZGUgKmlwKQotewotCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gR0ZTMl9TQigmaXAtPmlfaW5vZGUpOwotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSAmaXAtPmlfaW5vZGU7Ci0Jc3RydWN0IGZpbGVfcmFfc3RhdGUgcmFfc3RhdGU7Ci0Jc3RydWN0IGdmczJfcmdycGQgKnJnZDsKLQl1bnNpZ25lZCBpbnQgbWF4X2RhdGEgPSAwOwotCWludCBlcnJvcjsKLQotCWZpbGVfcmFfc3RhdGVfaW5pdCgmcmFfc3RhdGUsIGlub2RlLT5pX21hcHBpbmcpOwotCWZvciAoc2RwLT5zZF9yZ3JwcyA9IDA7OyBzZHAtPnNkX3JncnBzKyspIHsKLQkJLyogSWdub3JlIHBhcnRpYWxzICovCi0JCWlmICgoc2RwLT5zZF9yZ3JwcyArIDEpICogc2l6ZW9mKHN0cnVjdCBnZnMyX3JpbmRleCkgPgotCQkgICAgaV9zaXplX3JlYWQoaW5vZGUpKQotCQkJYnJlYWs7Ci0JCWVycm9yID0gcmVhZF9yaW5kZXhfZW50cnkoaXAsICZyYV9zdGF0ZSk7Ci0JCWlmIChlcnJvcikgewotCQkJY2xlYXJfcmdycGRpKHNkcCk7Ci0JCQlyZXR1cm4gZXJyb3I7Ci0JCX0KLQl9Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShyZ2QsICZzZHAtPnNkX3JpbmRleF9saXN0LCByZF9saXN0KQotCQlpZiAocmdkLT5yZF9kYXRhID4gbWF4X2RhdGEpCi0JCQltYXhfZGF0YSA9IHJnZC0+cmRfZGF0YTsKLQlzZHAtPnNkX21heF9yZ19kYXRhID0gbWF4X2RhdGE7Ci0KLQlzZHAtPnNkX3JpbmRleF91cHRvZGF0ZSA9IDE7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qKgogICogZ2ZzMl9yaW5kZXhfaG9sZCAtIEdyYWIgYSBsb2NrIG9uIHRoZSByaW5kZXgKICAqIEBzZHA6IFRoZSBHRlMyIHN1cGVyYmxvY2sKICAqIEByaV9naDogdGhlIGdsb2NrIGhvbGRlcgpAQCAtMTIyNiwxNiArMTE4NiwyNSBAQAogCQkJZXJyb3IgPSBnZnMyX3JpbmRleF9ob2xkKHNkcCwgJmFsLT5hbF9yaV9naCk7CiAJCWVsc2UgaWYgKCFzZHAtPnNkX3JncnBzKSAvKiBXZSBtYXkgbm90IGhhdmUgdGhlIHJpbmRleCByZWFkCiAJCQkJCSAgICBpbiwgc286ICovCi0JCQllcnJvciA9IGdmczJfcmlfdXBkYXRlX3NwZWNpYWwoaXApOworCQkJZXJyb3IgPSBnZnMyX3JpX3VwZGF0ZShpcCk7CiAJCWlmIChlcnJvcikKIAkJCXJldHVybiBlcnJvcjsKIAl9CiAKK3RyeV9hZ2FpbjoKIAlkbyB7CiAJCWVycm9yID0gZ2V0X2xvY2FsX3JncnAoaXAsICZsYXN0X3VubGlua2VkKTsKIAkJLyogSWYgdGhlcmUgaXMgbm8gc3BhY2UsIGZsdXNoaW5nIHRoZSBsb2cgbWF5IHJlbGVhc2Ugc29tZSAqLwotCQlpZiAoZXJyb3IpCisJCWlmIChlcnJvcikgeworCQkJaWYgKGlwID09IEdGUzJfSShzZHAtPnNkX3JpbmRleCkgJiYKKwkJCSAgICAhc2RwLT5zZF9yaW5kZXhfdXB0b2RhdGUpIHsKKwkJCQllcnJvciA9IGdmczJfcmlfdXBkYXRlKGlwKTsKKwkJCQlpZiAoZXJyb3IpCisJCQkJCXJldHVybiBlcnJvcjsKKwkJCQlnb3RvIHRyeV9hZ2FpbjsKKwkJCX0KIAkJCWdmczJfbG9nX2ZsdXNoKHNkcCwgTlVMTCk7CisJCX0KIAl9IHdoaWxlIChlcnJvciAmJiB0cmllcysrIDwgMyk7CiAKIAlpZiAoZXJyb3IpIHsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvcmdycC5oIGIvZnMvZ2ZzMi9yZ3JwLmgKaW5kZXggMGUzNWMwNC4uNTBjMmJiMCAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9yZ3JwLmgKKysrIGIvZnMvZ2ZzMi9yZ3JwLmgKQEAgLTQ4LDYgKzQ4LDcgQEAKIAogZXh0ZXJuIHZvaWQgZ2ZzMl9pbnBsYWNlX3JlbGVhc2Uoc3RydWN0IGdmczJfaW5vZGUgKmlwKTsKIAorZXh0ZXJuIGludCBnZnMyX3JpX3VwZGF0ZShzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXApOwogZXh0ZXJuIGludCBnZnMyX2FsbG9jX2Jsb2NrKHN0cnVjdCBnZnMyX2lub2RlICppcCwgdTY0ICpibiwgdW5zaWduZWQgaW50ICpuKTsKIGV4dGVybiBpbnQgZ2ZzMl9hbGxvY19kaShzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIHU2NCAqYm4sIHU2NCAqZ2VuZXJhdGlvbik7CiAKZGlmZiAtLWdpdCBhL2ZzL2dmczIvc3VwZXIuYyBiL2ZzL2dmczIvc3VwZXIuYwppbmRleCAyYjJjNDk5Li4xNmMyZWNhIDEwMDY0NAotLS0gYS9mcy9nZnMyL3N1cGVyLmMKKysrIGIvZnMvZ2ZzMi9zdXBlci5jCkBAIC0xNDA1LDkgKzE0MDUsMTYgQEAKIAlyZXR1cm4gJmlwLT5pX2lub2RlOwogfQogCitzdGF0aWMgdm9pZCBnZnMyX2lfY2FsbGJhY2soc3RydWN0IHJjdV9oZWFkICpoZWFkKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGlub2RlLCBpX3JjdSk7CisJSU5JVF9MSVNUX0hFQUQoJmlub2RlLT5pX2RlbnRyeSk7CisJa21lbV9jYWNoZV9mcmVlKGdmczJfaW5vZGVfY2FjaGVwLCBpbm9kZSk7Cit9CisKIHN0YXRpYyB2b2lkIGdmczJfZGVzdHJveV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewotCWttZW1fY2FjaGVfZnJlZShnZnMyX2lub2RlX2NhY2hlcCwgaW5vZGUpOworCWNhbGxfcmN1KCZpbm9kZS0+aV9yY3UsIGdmczJfaV9jYWxsYmFjayk7CiB9CiAKIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGdmczJfc3VwZXJfb3BzID0gewpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi94YXR0ci5jIGIvZnMvZ2ZzMi94YXR0ci5jCmluZGV4IDMwYjU4ZjAuLjQzOWI2MWMgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIveGF0dHIuYworKysgYi9mcy9nZnMyL3hhdHRyLmMKQEAgLTEyOTYsMTAgKzEyOTYsOCBAQAogCiBpbnQgZ2ZzMl94YXR0cl9hY2xfY2htb2Qoc3RydWN0IGdmczJfaW5vZGUgKmlwLCBzdHJ1Y3QgaWF0dHIgKmF0dHIsIGNoYXIgKmRhdGEpCiB7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9ICZpcC0+aV9pbm9kZTsKIAlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IEdGUzJfU0IoJmlwLT5pX2lub2RlKTsKIAlzdHJ1Y3QgZ2ZzMl9lYV9sb2NhdGlvbiBlbDsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpYmg7CiAJaW50IGVycm9yOwogCiAJZXJyb3IgPSBnZnMyX2VhX2ZpbmQoaXAsIEdGUzJfRUFUWVBFX1NZUywgR0ZTMl9QT1NJWF9BQ0xfQUNDRVNTLCAmZWwpOwpAQCAtMTMyMSwyNiArMTMxOSw3IEBACiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKLQllcnJvciA9IGdmczJfbWV0YV9pbm9kZV9idWZmZXIoaXAsICZkaWJoKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0X3RyYW5zX2VuZDsKLQotCWlmICgoYXR0ci0+aWFfdmFsaWQgJiBBVFRSX1NJWkUpICYmCi0JICAgIGF0dHItPmlhX3NpemUgIT0gaV9zaXplX3JlYWQoaW5vZGUpKSB7Ci0JCWludCBlcnJvcjsKLQotCQllcnJvciA9IHZtdHJ1bmNhdGUoaW5vZGUsIGF0dHItPmlhX3NpemUpOwotCQlnZnMyX2Fzc2VydF93YXJuKEdGUzJfU0IoaW5vZGUpLCAhZXJyb3IpOwotCX0KLQotCXNldGF0dHJfY29weShpbm9kZSwgYXR0cik7Ci0JbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7Ci0KLQlnZnMyX3RyYW5zX2FkZF9iaChpcC0+aV9nbCwgZGliaCwgMSk7Ci0JZ2ZzMl9kaW5vZGVfb3V0KGlwLCBkaWJoLT5iX2RhdGEpOwotCWJyZWxzZShkaWJoKTsKLQotb3V0X3RyYW5zX2VuZDoKKwllcnJvciA9IGdmczJfc2V0YXR0cl9zaW1wbGUoaXAsIGF0dHIpOwogCWdmczJfdHJhbnNfZW5kKHNkcCk7CiAJcmV0dXJuIGVycm9yOwogfQpkaWZmIC0tZ2l0IGEvZnMvaGZzL2Rpci5jIGIvZnMvaGZzL2Rpci5jCmluZGV4IDJiM2I4NjEuLmVhNGFlZmUgMTAwNjQ0Ci0tLSBhL2ZzL2hmcy9kaXIuYworKysgYi9mcy9oZnMvZGlyLmMKQEAgLTI1LDcgKzI1LDcgQEAKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gTlVMTDsKIAlpbnQgcmVzOwogCi0JZGVudHJ5LT5kX29wID0gJmhmc19kZW50cnlfb3BlcmF0aW9uczsKKwlkX3NldF9kX29wKGRlbnRyeSwgJmhmc19kZW50cnlfb3BlcmF0aW9ucyk7CiAKIAloZnNfZmluZF9pbml0KEhGU19TQihkaXItPmlfc2IpLT5jYXRfdHJlZSwgJmZkKTsKIAloZnNfY2F0X2J1aWxkX2tleShkaXItPmlfc2IsIGZkLnNlYXJjaF9rZXksIGRpci0+aV9pbm8sICZkZW50cnktPmRfbmFtZSk7CmRpZmYgLS1naXQgYS9mcy9oZnMvaGZzX2ZzLmggYi9mcy9oZnMvaGZzX2ZzLmgKaW5kZXggYzhjZmZiOC4uYWQ5N2MyZCAxMDA2NDQKLS0tIGEvZnMvaGZzL2hmc19mcy5oCisrKyBiL2ZzL2hmcy9oZnNfZnMuaApAQCAtMjEzLDEwICsyMTMsMTQgQEAKIC8qIHN0cmluZy5jICovCiBleHRlcm4gY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGhmc19kZW50cnlfb3BlcmF0aW9uczsKIAotZXh0ZXJuIGludCBoZnNfaGFzaF9kZW50cnkoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgcXN0ciAqKTsKK2V4dGVybiBpbnQgaGZzX2hhc2hfZGVudHJ5KGNvbnN0IHN0cnVjdCBkZW50cnkgKiwgY29uc3Qgc3RydWN0IGlub2RlICosCisJCXN0cnVjdCBxc3RyICopOwogZXh0ZXJuIGludCBoZnNfc3RyY21wKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgaW50LAogCQkgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGludCk7Ci1leHRlcm4gaW50IGhmc19jb21wYXJlX2RlbnRyeShzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBxc3RyICosIHN0cnVjdCBxc3RyICopOworZXh0ZXJuIGludCBoZnNfY29tcGFyZV9kZW50cnkoY29uc3Qgc3RydWN0IGRlbnRyeSAqcGFyZW50LAorCQljb25zdCBzdHJ1Y3QgaW5vZGUgKnBpbm9kZSwKKwkJY29uc3Qgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQl1bnNpZ25lZCBpbnQgbGVuLCBjb25zdCBjaGFyICpzdHIsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKTsKIAogLyogdHJhbnMuYyAqLwogZXh0ZXJuIHZvaWQgaGZzX2FzYzJtYWMoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBoZnNfbmFtZSAqLCBzdHJ1Y3QgcXN0ciAqKTsKZGlmZiAtLWdpdCBhL2ZzL2hmcy9zdHJpbmcuYyBiL2ZzL2hmcy9zdHJpbmcuYwppbmRleCA5MjdhNWFmLi40OTVhOTc2IDEwMDY0NAotLS0gYS9mcy9oZnMvc3RyaW5nLmMKKysrIGIvZnMvaGZzL3N0cmluZy5jCkBAIC01MSw3ICs1MSw4IEBACiAvKgogICogSGFzaCBhIHN0cmluZyB0byBhbiBpbnRlZ2VyIGluIGEgY2FzZS1pbmRlcGVuZGVudCB3YXkKICAqLwotaW50IGhmc19oYXNoX2RlbnRyeShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBxc3RyICp0aGlzKQoraW50IGhmc19oYXNoX2RlbnRyeShjb25zdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCXN0cnVjdCBxc3RyICp0aGlzKQogewogCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUgPSB0aGlzLT5uYW1lOwogCXVuc2lnbmVkIGludCBoYXNoLCBsZW4gPSB0aGlzLT5sZW47CkBAIC05MiwyMSArOTMsMjEgQEAKICAqIFRlc3QgZm9yIGVxdWFsaXR5IG9mIHR3byBzdHJpbmdzIGluIHRoZSBIRlMgZmlsZW5hbWUgY2hhcmFjdGVyIG9yZGVyaW5nLgogICogcmV0dXJuIDEgb24gZmFpbHVyZSBhbmQgMCBvbiBzdWNjZXNzCiAgKi8KLWludCBoZnNfY29tcGFyZV9kZW50cnkoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgcXN0ciAqczEsIHN0cnVjdCBxc3RyICpzMikKK2ludCBoZnNfY29tcGFyZV9kZW50cnkoY29uc3Qgc3RydWN0IGRlbnRyeSAqcGFyZW50LCBjb25zdCBzdHJ1Y3QgaW5vZGUgKnBpbm9kZSwKKwkJY29uc3Qgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQl1bnNpZ25lZCBpbnQgbGVuLCBjb25zdCBjaGFyICpzdHIsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKQogewogCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm4xLCAqbjI7Ci0JaW50IGxlbjsKIAotCWxlbiA9IHMxLT5sZW47CiAJaWYgKGxlbiA+PSBIRlNfTkFNRUxFTikgewotCQlpZiAoczItPmxlbiA8IEhGU19OQU1FTEVOKQorCQlpZiAobmFtZS0+bGVuIDwgSEZTX05BTUVMRU4pCiAJCQlyZXR1cm4gMTsKIAkJbGVuID0gSEZTX05BTUVMRU47Ci0JfSBlbHNlIGlmIChsZW4gIT0gczItPmxlbikKKwl9IGVsc2UgaWYgKGxlbiAhPSBuYW1lLT5sZW4pCiAJCXJldHVybiAxOwogCi0JbjEgPSBzMS0+bmFtZTsKLQluMiA9IHMyLT5uYW1lOworCW4xID0gc3RyOworCW4yID0gbmFtZS0+bmFtZTsKIAl3aGlsZSAobGVuLS0pIHsKIAkJaWYgKGNhc2VvcmRlclsqbjErK10gIT0gY2FzZW9yZGVyWypuMisrXSkKIAkJCXJldHVybiAxOwpkaWZmIC0tZ2l0IGEvZnMvaGZzL3N1cGVyLmMgYi9mcy9oZnMvc3VwZXIuYwppbmRleCA0ODI0YzI3Li4wYmVmNjJhIDEwMDY0NAotLS0gYS9mcy9oZnMvc3VwZXIuYworKysgYi9mcy9oZnMvc3VwZXIuYwpAQCAtMTY3LDkgKzE2NywxNiBAQAogCXJldHVybiBpID8gJmktPnZmc19pbm9kZSA6IE5VTEw7CiB9CiAKK3N0YXRpYyB2b2lkIGhmc19pX2NhbGxiYWNrKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBpbm9kZSwgaV9yY3UpOworCUlOSVRfTElTVF9IRUFEKCZpbm9kZS0+aV9kZW50cnkpOworCWttZW1fY2FjaGVfZnJlZShoZnNfaW5vZGVfY2FjaGVwLCBIRlNfSShpbm9kZSkpOworfQorCiBzdGF0aWMgdm9pZCBoZnNfZGVzdHJveV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewotCWttZW1fY2FjaGVfZnJlZShoZnNfaW5vZGVfY2FjaGVwLCBIRlNfSShpbm9kZSkpOworCWNhbGxfcmN1KCZpbm9kZS0+aV9yY3UsIGhmc19pX2NhbGxiYWNrKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGhmc19zdXBlcl9vcGVyYXRpb25zID0gewpAQCAtNDI3LDcgKzQzNCw3IEBACiAJaWYgKCFzYi0+c19yb290KQogCQlnb3RvIGJhaWxfaXB1dDsKIAotCXNiLT5zX3Jvb3QtPmRfb3AgPSAmaGZzX2RlbnRyeV9vcGVyYXRpb25zOworCWRfc2V0X2Rfb3Aoc2ItPnNfcm9vdCwgJmhmc19kZW50cnlfb3BlcmF0aW9ucyk7CiAKIAkvKiBldmVyeXRoaW5nJ3Mgb2theSAqLwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZnMvaGZzL3N5c2RlcC5jIGIvZnMvaGZzL3N5c2RlcC5jCmluZGV4IDc0NzhmNWMuLjE5Y2YyOTEgMTAwNjQ0Ci0tLSBhL2ZzL2hmcy9zeXNkZXAuYworKysgYi9mcy9oZnMvc3lzZGVwLmMKQEAgLTgsMTUgKzgsMjAgQEAKICAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgY29kZSB0byBkbyB2YXJpb3VzIHN5c3RlbSBkZXBlbmRlbnQgdGhpbmdzLgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgogI2luY2x1ZGUgImhmc19mcy5oIgogCiAvKiBkZW50cnkgY2FzZS1oYW5kbGluZzoganVzdCBsb3dlcmNhc2UgZXZlcnl0aGluZyAqLwogCiBzdGF0aWMgaW50IGhmc19yZXZhbGlkYXRlX2RlbnRyeShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBuYW1laWRhdGEgKm5kKQogewotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlICppbm9kZTsKIAlpbnQgZGlmZjsKIAorCWlmIChuZC0+ZmxhZ3MgJiBMT09LVVBfUkNVKQorCQlyZXR1cm4gLUVDSElMRDsKKworCWlub2RlID0gZGVudHJ5LT5kX2lub2RlOwogCWlmKCFpbm9kZSkKIAkJcmV0dXJuIDE7CiAKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvYmZpbmQuYyBiL2ZzL2hmc3BsdXMvYmZpbmQuYwppbmRleCBkMTgyNDM4Li41ZDc5OWMxIDEwMDY0NAotLS0gYS9mcy9oZnNwbHVzL2JmaW5kLmMKKysrIGIvZnMvaGZzcGx1cy9iZmluZC5jCkBAIC0yMiw3ICsyMiw4IEBACiAJCXJldHVybiAtRU5PTUVNOwogCWZkLT5zZWFyY2hfa2V5ID0gcHRyOwogCWZkLT5rZXkgPSBwdHIgKyB0cmVlLT5tYXhfa2V5X2xlbiArIDI7Ci0JZHByaW50KERCR19CTk9ERV9SRUZTLCAiZmluZF9pbml0OiAlZCAoJXApXG4iLCB0cmVlLT5jbmlkLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOworCWRwcmludChEQkdfQk5PREVfUkVGUywgImZpbmRfaW5pdDogJWQgKCVwKVxuIiwKKwkJdHJlZS0+Y25pZCwgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKIAltdXRleF9sb2NrKCZ0cmVlLT50cmVlX2xvY2spOwogCXJldHVybiAwOwogfQpAQCAtMzEsNyArMzIsOCBAQAogewogCWhmc19ibm9kZV9wdXQoZmQtPmJub2RlKTsKIAlrZnJlZShmZC0+c2VhcmNoX2tleSk7Ci0JZHByaW50KERCR19CTk9ERV9SRUZTLCAiZmluZF9leGl0OiAlZCAoJXApXG4iLCBmZC0+dHJlZS0+Y25pZCwgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKKwlkcHJpbnQoREJHX0JOT0RFX1JFRlMsICJmaW5kX2V4aXQ6ICVkICglcClcbiIsCisJCWZkLT50cmVlLT5jbmlkLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwogCW11dGV4X3VubG9jaygmZmQtPnRyZWUtPnRyZWVfbG9jayk7CiAJZmQtPnRyZWUgPSBOVUxMOwogfQpkaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9iaXRtYXAuYyBiL2ZzL2hmc3BsdXMvYml0bWFwLmMKaW5kZXggYWQ1N2Y1OS4uMWNhZDgwYyAxMDA2NDQKLS0tIGEvZnMvaGZzcGx1cy9iaXRtYXAuYworKysgYi9mcy9oZnNwbHVzL2JpdG1hcC5jCkBAIC0xNSw3ICsxNSw4IEBACiAKICNkZWZpbmUgUEFHRV9DQUNIRV9CSVRTCShQQUdFX0NBQ0hFX1NJWkUgKiA4KQogCi1pbnQgaGZzcGx1c19ibG9ja19hbGxvY2F0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2l6ZSwgdTMyIG9mZnNldCwgdTMyICptYXgpCitpbnQgaGZzcGx1c19ibG9ja19hbGxvY2F0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2l6ZSwKKwkJdTMyIG9mZnNldCwgdTMyICptYXgpCiB7CiAJc3RydWN0IGhmc3BsdXNfc2JfaW5mbyAqc2JpID0gSEZTUExVU19TQihzYik7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2Jub2RlLmMgYi9mcy9oZnNwbHVzL2Jub2RlLmMKaW5kZXggMjlkYTY1Ny4uMWM0MmNjNSAxMDA2NDQKLS0tIGEvZnMvaGZzcGx1cy9ibm9kZS5jCisrKyBiL2ZzL2hmc3BsdXMvYm5vZGUuYwpAQCAtNDIsNyArNDIsNyBAQAogdTE2IGhmc19ibm9kZV9yZWFkX3UxNihzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCBpbnQgb2ZmKQogewogCV9fYmUxNiBkYXRhOwotCS8vIG9wdGltaXplIGxhdGVyLi4uCisJLyogVE9ETzogb3B0aW1pemUgbGF0ZXIuLi4gKi8KIAloZnNfYm5vZGVfcmVhZChub2RlLCAmZGF0YSwgb2ZmLCAyKTsKIAlyZXR1cm4gYmUxNl90b19jcHUoZGF0YSk7CiB9CkBAIC01MCw3ICs1MCw3IEBACiB1OCBoZnNfYm5vZGVfcmVhZF91OChzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCBpbnQgb2ZmKQogewogCXU4IGRhdGE7Ci0JLy8gb3B0aW1pemUgbGF0ZXIuLi4KKwkvKiBUT0RPOiBvcHRpbWl6ZSBsYXRlci4uLiAqLwogCWhmc19ibm9kZV9yZWFkKG5vZGUsICZkYXRhLCBvZmYsIDEpOwogCXJldHVybiBkYXRhOwogfQpAQCAtOTYsNyArOTYsNyBAQAogdm9pZCBoZnNfYm5vZGVfd3JpdGVfdTE2KHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsIGludCBvZmYsIHUxNiBkYXRhKQogewogCV9fYmUxNiB2ID0gY3B1X3RvX2JlMTYoZGF0YSk7Ci0JLy8gb3B0aW1pemUgbGF0ZXIuLi4KKwkvKiBUT0RPOiBvcHRpbWl6ZSBsYXRlci4uLiAqLwogCWhmc19ibm9kZV93cml0ZShub2RlLCAmdiwgb2ZmLCAyKTsKIH0KIApAQCAtMjEyLDcgKzIxMiw4IEBACiAJCQkJZHN0X3BhZ2UtLTsKIAkJCX0KIAkJCXNyYyAtPSBsZW47Ci0JCQltZW1tb3ZlKGttYXAoKmRzdF9wYWdlKSArIHNyYywga21hcCgqc3JjX3BhZ2UpICsgc3JjLCBsZW4pOworCQkJbWVtbW92ZShrbWFwKCpkc3RfcGFnZSkgKyBzcmMsCisJCQkJa21hcCgqc3JjX3BhZ2UpICsgc3JjLCBsZW4pOwogCQkJa3VubWFwKCpzcmNfcGFnZSk7CiAJCQlzZXRfcGFnZV9kaXJ0eSgqZHN0X3BhZ2UpOwogCQkJa3VubWFwKCpkc3RfcGFnZSk7CkBAIC0yNTAsMTQgKzI1MSwxNiBAQAogCiAJCWlmIChzcmMgPT0gZHN0KSB7CiAJCQlsID0gbWluKGxlbiwgKGludClQQUdFX0NBQ0hFX1NJWkUgLSBzcmMpOwotCQkJbWVtbW92ZShrbWFwKCpkc3RfcGFnZSkgKyBzcmMsIGttYXAoKnNyY19wYWdlKSArIHNyYywgbCk7CisJCQltZW1tb3ZlKGttYXAoKmRzdF9wYWdlKSArIHNyYywKKwkJCQlrbWFwKCpzcmNfcGFnZSkgKyBzcmMsIGwpOwogCQkJa3VubWFwKCpzcmNfcGFnZSk7CiAJCQlzZXRfcGFnZV9kaXJ0eSgqZHN0X3BhZ2UpOwogCQkJa3VubWFwKCpkc3RfcGFnZSk7CiAKIAkJCXdoaWxlICgobGVuIC09IGwpICE9IDApIHsKIAkJCQlsID0gbWluKGxlbiwgKGludClQQUdFX0NBQ0hFX1NJWkUpOwotCQkJCW1lbW1vdmUoa21hcCgqKytkc3RfcGFnZSksIGttYXAoKisrc3JjX3BhZ2UpLCBsKTsKKwkJCQltZW1tb3ZlKGttYXAoKisrZHN0X3BhZ2UpLAorCQkJCQlrbWFwKCorK3NyY19wYWdlKSwgbCk7CiAJCQkJa3VubWFwKCpzcmNfcGFnZSk7CiAJCQkJc2V0X3BhZ2VfZGlydHkoKmRzdF9wYWdlKTsKIAkJCQlrdW5tYXAoKmRzdF9wYWdlKTsKQEAgLTI2OCw3ICsyNzEsOCBAQAogCQkJZG8gewogCQkJCXNyY19wdHIgPSBrbWFwKCpzcmNfcGFnZSkgKyBzcmM7CiAJCQkJZHN0X3B0ciA9IGttYXAoKmRzdF9wYWdlKSArIGRzdDsKLQkJCQlpZiAoUEFHRV9DQUNIRV9TSVpFIC0gc3JjIDwgUEFHRV9DQUNIRV9TSVpFIC0gZHN0KSB7CisJCQkJaWYgKFBBR0VfQ0FDSEVfU0laRSAtIHNyYyA8CisJCQkJCQlQQUdFX0NBQ0hFX1NJWkUgLSBkc3QpIHsKIAkJCQkJbCA9IFBBR0VfQ0FDSEVfU0laRSAtIHNyYzsKIAkJCQkJc3JjID0gMDsKIAkJCQkJZHN0ICs9IGw7CkBAIC0zNDAsNyArMzQ0LDggQEAKIAkJCXJldHVybjsKIAkJdG1wLT5uZXh0ID0gbm9kZS0+bmV4dDsKIAkJY25pZCA9IGNwdV90b19iZTMyKHRtcC0+bmV4dCk7Ci0JCWhmc19ibm9kZV93cml0ZSh0bXAsICZjbmlkLCBvZmZzZXRvZihzdHJ1Y3QgaGZzX2Jub2RlX2Rlc2MsIG5leHQpLCA0KTsKKwkJaGZzX2Jub2RlX3dyaXRlKHRtcCwgJmNuaWQsCisJCQlvZmZzZXRvZihzdHJ1Y3QgaGZzX2Jub2RlX2Rlc2MsIG5leHQpLCA0KTsKIAkJaGZzX2Jub2RlX3B1dCh0bXApOwogCX0gZWxzZSBpZiAobm9kZS0+dHlwZSA9PSBIRlNfTk9ERV9MRUFGKQogCQl0cmVlLT5sZWFmX2hlYWQgPSBub2RlLT5uZXh0OwpAQCAtMzUxLDE1ICszNTYsMTUgQEAKIAkJCXJldHVybjsKIAkJdG1wLT5wcmV2ID0gbm9kZS0+cHJldjsKIAkJY25pZCA9IGNwdV90b19iZTMyKHRtcC0+cHJldik7Ci0JCWhmc19ibm9kZV93cml0ZSh0bXAsICZjbmlkLCBvZmZzZXRvZihzdHJ1Y3QgaGZzX2Jub2RlX2Rlc2MsIHByZXYpLCA0KTsKKwkJaGZzX2Jub2RlX3dyaXRlKHRtcCwgJmNuaWQsCisJCQlvZmZzZXRvZihzdHJ1Y3QgaGZzX2Jub2RlX2Rlc2MsIHByZXYpLCA0KTsKIAkJaGZzX2Jub2RlX3B1dCh0bXApOwogCX0gZWxzZSBpZiAobm9kZS0+dHlwZSA9PSBIRlNfTk9ERV9MRUFGKQogCQl0cmVlLT5sZWFmX3RhaWwgPSBub2RlLT5wcmV2OwogCi0JLy8gbW92ZSBkb3duPwotCWlmICghbm9kZS0+cHJldiAmJiAhbm9kZS0+bmV4dCkgewotCQlwcmludGsoS0VSTl9ERUJVRyAiaGZzX2J0cmVlX2RlbF9sZXZlbFxuIik7Ci0JfQorCS8qIG1vdmUgZG93bj8gKi8KKwlpZiAoIW5vZGUtPnByZXYgJiYgIW5vZGUtPm5leHQpCisJCWRwcmludChEQkdfQk5PREVfTU9ELCAiaGZzX2J0cmVlX2RlbF9sZXZlbFxuIik7CiAJaWYgKCFub2RlLT5wYXJlbnQpIHsKIAkJdHJlZS0+cm9vdCA9IDA7CiAJCXRyZWUtPmRlcHRoID0gMDsKQEAgLTM3OSwxNiArMzg0LDE2IEBACiAJc3RydWN0IGhmc19ibm9kZSAqbm9kZTsKIAogCWlmIChjbmlkID49IHRyZWUtPm5vZGVfY291bnQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJoZnM6IHJlcXVlc3QgZm9yIG5vbi1leGlzdGVudCBub2RlICVkIGluIEIqVHJlZVxuIiwgY25pZCk7CisJCXByaW50ayhLRVJOX0VSUiAiaGZzOiByZXF1ZXN0IGZvciBub24tZXhpc3RlbnQgbm9kZSAiCisJCQkJIiVkIGluIEIqVHJlZVxuIiwKKwkJCWNuaWQpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKIAlmb3IgKG5vZGUgPSB0cmVlLT5ub2RlX2hhc2hbaGZzX2Jub2RlX2hhc2goY25pZCldOwotCSAgICAgbm9kZTsgbm9kZSA9IG5vZGUtPm5leHRfaGFzaCkgewotCQlpZiAobm9kZS0+dGhpcyA9PSBjbmlkKSB7CisJCQlub2RlOyBub2RlID0gbm9kZS0+bmV4dF9oYXNoKQorCQlpZiAobm9kZS0+dGhpcyA9PSBjbmlkKQogCQkJcmV0dXJuIG5vZGU7Ci0JCX0KLQl9CiAJcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTQwMiw3ICs0MDcsOSBAQAogCWxvZmZfdCBvZmY7CiAKIAlpZiAoY25pZCA+PSB0cmVlLT5ub2RlX2NvdW50KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiaGZzOiByZXF1ZXN0IGZvciBub24tZXhpc3RlbnQgbm9kZSAlZCBpbiBCKlRyZWVcbiIsIGNuaWQpOworCQlwcmludGsoS0VSTl9FUlIgImhmczogcmVxdWVzdCBmb3Igbm9uLWV4aXN0ZW50IG5vZGUgIgorCQkJCSIlZCBpbiBCKlRyZWVcbiIsCisJCQljbmlkKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCkBAIC00MjksNyArNDM2LDggQEAKIAl9IGVsc2UgewogCQlzcGluX3VubG9jaygmdHJlZS0+aGFzaF9sb2NrKTsKIAkJa2ZyZWUobm9kZSk7Ci0JCXdhaXRfZXZlbnQobm9kZTItPmxvY2tfd3EsICF0ZXN0X2JpdChIRlNfQk5PREVfTkVXLCAmbm9kZTItPmZsYWdzKSk7CisJCXdhaXRfZXZlbnQobm9kZTItPmxvY2tfd3EsCisJCQkhdGVzdF9iaXQoSEZTX0JOT0RFX05FVywgJm5vZGUyLT5mbGFncykpOwogCQlyZXR1cm4gbm9kZTI7CiAJfQogCXNwaW5fdW5sb2NrKCZ0cmVlLT5oYXNoX2xvY2spOwpAQCAtNDgzLDcgKzQ5MSw4IEBACiAJaWYgKG5vZGUpIHsKIAkJaGZzX2Jub2RlX2dldChub2RlKTsKIAkJc3Bpbl91bmxvY2soJnRyZWUtPmhhc2hfbG9jayk7Ci0JCXdhaXRfZXZlbnQobm9kZS0+bG9ja193cSwgIXRlc3RfYml0KEhGU19CTk9ERV9ORVcsICZub2RlLT5mbGFncykpOworCQl3YWl0X2V2ZW50KG5vZGUtPmxvY2tfd3EsCisJCQkhdGVzdF9iaXQoSEZTX0JOT0RFX05FVywgJm5vZGUtPmZsYWdzKSk7CiAJCWlmICh0ZXN0X2JpdChIRlNfQk5PREVfRVJST1IsICZub2RlLT5mbGFncykpCiAJCQlnb3RvIG5vZGVfZXJyb3I7CiAJCXJldHVybiBub2RlOwpAQCAtNDk3LDcgKzUwNiw4IEBACiAJaWYgKCF0ZXN0X2JpdChIRlNfQk5PREVfTkVXLCAmbm9kZS0+ZmxhZ3MpKQogCQlyZXR1cm4gbm9kZTsKIAotCWRlc2MgPSAoc3RydWN0IGhmc19ibm9kZV9kZXNjICopKGttYXAobm9kZS0+cGFnZVswXSkgKyBub2RlLT5wYWdlX29mZnNldCk7CisJZGVzYyA9IChzdHJ1Y3QgaGZzX2Jub2RlX2Rlc2MgKikoa21hcChub2RlLT5wYWdlWzBdKSArCisJCQlub2RlLT5wYWdlX29mZnNldCk7CiAJbm9kZS0+cHJldiA9IGJlMzJfdG9fY3B1KGRlc2MtPnByZXYpOwogCW5vZGUtPm5leHQgPSBiZTMyX3RvX2NwdShkZXNjLT5uZXh0KTsKIAlub2RlLT5udW1fcmVjcyA9IGJlMTZfdG9fY3B1KGRlc2MtPm51bV9yZWNzKTsKQEAgLTU1NiwxMSArNTY2LDEzIEBACiAKIHZvaWQgaGZzX2Jub2RlX2ZyZWUoc3RydWN0IGhmc19ibm9kZSAqbm9kZSkKIHsKLQkvL2ludCBpOworI2lmIDAKKwlpbnQgaTsKIAotCS8vZm9yIChpID0gMDsgaSA8IG5vZGUtPnRyZWUtPnBhZ2VzX3Blcl9ibm9kZTsgaSsrKQotCS8vCWlmIChub2RlLT5wYWdlW2ldKQotCS8vCQlwYWdlX2NhY2hlX3JlbGVhc2Uobm9kZS0+cGFnZVtpXSk7CisJZm9yIChpID0gMDsgaSA8IG5vZGUtPnRyZWUtPnBhZ2VzX3Blcl9ibm9kZTsgaSsrKQorCQlpZiAobm9kZS0+cGFnZVtpXSkKKwkJCXBhZ2VfY2FjaGVfcmVsZWFzZShub2RlLT5wYWdlW2ldKTsKKyNlbmRpZgogCWtmcmVlKG5vZGUpOwogfQogCkBAIC02MDcsNyArNjE5LDggQEAKIAlpZiAobm9kZSkgewogCQlhdG9taWNfaW5jKCZub2RlLT5yZWZjbnQpOwogCQlkcHJpbnQoREJHX0JOT0RFX1JFRlMsICJnZXRfbm9kZSglZDolZCk6ICVkXG4iLAotCQkgICAgICAgbm9kZS0+dHJlZS0+Y25pZCwgbm9kZS0+dGhpcywgYXRvbWljX3JlYWQoJm5vZGUtPnJlZmNudCkpOworCQkJbm9kZS0+dHJlZS0+Y25pZCwgbm9kZS0+dGhpcywKKwkJCWF0b21pY19yZWFkKCZub2RlLT5yZWZjbnQpKTsKIAl9CiB9CiAKQEAgLTYxOSw3ICs2MzIsOCBAQAogCQlpbnQgaTsKIAogCQlkcHJpbnQoREJHX0JOT0RFX1JFRlMsICJwdXRfbm9kZSglZDolZCk6ICVkXG4iLAotCQkgICAgICAgbm9kZS0+dHJlZS0+Y25pZCwgbm9kZS0+dGhpcywgYXRvbWljX3JlYWQoJm5vZGUtPnJlZmNudCkpOworCQkJbm9kZS0+dHJlZS0+Y25pZCwgbm9kZS0+dGhpcywKKwkJCWF0b21pY19yZWFkKCZub2RlLT5yZWZjbnQpKTsKIAkJQlVHX09OKCFhdG9taWNfcmVhZCgmbm9kZS0+cmVmY250KSk7CiAJCWlmICghYXRvbWljX2RlY19hbmRfbG9jaygmbm9kZS0+cmVmY250LCAmdHJlZS0+aGFzaF9sb2NrKSkKIAkJCXJldHVybjsKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvYnJlYy5jIGIvZnMvaGZzcGx1cy9icmVjLmMKaW5kZXggMmYzOWQwNS4uMjMxMmRlMyAxMDA2NDQKLS0tIGEvZnMvaGZzcGx1cy9icmVjLmMKKysrIGIvZnMvaGZzcGx1cy9icmVjLmMKQEAgLTM5LDcgKzM5LDggQEAKIAkgICAhKG5vZGUtPnRyZWUtPmF0dHJpYnV0ZXMgJiBIRlNfVFJFRV9WQVJJRFhLRVlTKSkgewogCQlyZXR2YWwgPSBub2RlLT50cmVlLT5tYXhfa2V5X2xlbiArIDI7CiAJfSBlbHNlIHsKLQkJcmVjb2ZmID0gaGZzX2Jub2RlX3JlYWRfdTE2KG5vZGUsIG5vZGUtPnRyZWUtPm5vZGVfc2l6ZSAtIChyZWMgKyAxKSAqIDIpOworCQlyZWNvZmYgPSBoZnNfYm5vZGVfcmVhZF91MTYobm9kZSwKKwkJCW5vZGUtPnRyZWUtPm5vZGVfc2l6ZSAtIChyZWMgKyAxKSAqIDIpOwogCQlpZiAoIXJlY29mZikKIAkJCXJldHVybiAwOwogCkBAIC04NCw3ICs4NSw4IEBACiAJZW5kX3JlY19vZmYgPSB0cmVlLT5ub2RlX3NpemUgLSAobm9kZS0+bnVtX3JlY3MgKyAxKSAqIDI7CiAJZW5kX29mZiA9IGhmc19ibm9kZV9yZWFkX3UxNihub2RlLCBlbmRfcmVjX29mZik7CiAJZW5kX3JlY19vZmYgLT0gMjsKLQlkcHJpbnQoREJHX0JOT0RFX01PRCwgImluc2VydF9yZWM6ICVkLCAlZCwgJWQsICVkXG4iLCByZWMsIHNpemUsIGVuZF9vZmYsIGVuZF9yZWNfb2ZmKTsKKwlkcHJpbnQoREJHX0JOT0RFX01PRCwgImluc2VydF9yZWM6ICVkLCAlZCwgJWQsICVkXG4iLAorCQlyZWMsIHNpemUsIGVuZF9vZmYsIGVuZF9yZWNfb2ZmKTsKIAlpZiAoc2l6ZSA+IGVuZF9yZWNfb2ZmIC0gZW5kX29mZikgewogCQlpZiAobmV3X25vZGUpCiAJCQlwYW5pYygibm90IGVub3VnaCByb29tIVxuIik7CkBAIC05OSw3ICsxMDEsOSBAQAogCX0KIAlub2RlLT5udW1fcmVjcysrOwogCS8qIHdyaXRlIG5ldyBsYXN0IG9mZnNldCAqLwotCWhmc19ibm9kZV93cml0ZV91MTYobm9kZSwgb2Zmc2V0b2Yoc3RydWN0IGhmc19ibm9kZV9kZXNjLCBudW1fcmVjcyksIG5vZGUtPm51bV9yZWNzKTsKKwloZnNfYm5vZGVfd3JpdGVfdTE2KG5vZGUsCisJCW9mZnNldG9mKHN0cnVjdCBoZnNfYm5vZGVfZGVzYywgbnVtX3JlY3MpLAorCQlub2RlLT5udW1fcmVjcyk7CiAJaGZzX2Jub2RlX3dyaXRlX3UxNihub2RlLCBlbmRfcmVjX29mZiwgZW5kX29mZiArIHNpemUpOwogCWRhdGFfb2ZmID0gZW5kX29mZjsKIAlkYXRhX3JlY19vZmYgPSBlbmRfcmVjX29mZiArIDI7CkBAIC0xNTEsNyArMTU1LDggQEAKIAkJaWYgKHRyZWUtPmF0dHJpYnV0ZXMgJiBIRlNfVFJFRV9WQVJJRFhLRVlTKQogCQkJa2V5X2xlbiA9IGJlMTZfdG9fY3B1KGZkLT5zZWFyY2hfa2V5LT5rZXlfbGVuKSArIDI7CiAJCWVsc2UgewotCQkJZmQtPnNlYXJjaF9rZXktPmtleV9sZW4gPSBjcHVfdG9fYmUxNih0cmVlLT5tYXhfa2V5X2xlbik7CisJCQlmZC0+c2VhcmNoX2tleS0+a2V5X2xlbiA9CisJCQkJY3B1X3RvX2JlMTYodHJlZS0+bWF4X2tleV9sZW4pOwogCQkJa2V5X2xlbiA9IHRyZWUtPm1heF9rZXlfbGVuICsgMjsKIAkJfQogCQlnb3RvIGFnYWluOwpAQCAtMTgwLDcgKzE4NSw4IEBACiAJCW1hcmtfaW5vZGVfZGlydHkodHJlZS0+aW5vZGUpOwogCX0KIAloZnNfYm5vZGVfZHVtcChub2RlKTsKLQlkcHJpbnQoREJHX0JOT0RFX01PRCwgInJlbW92ZV9yZWM6ICVkLCAlZFxuIiwgZmQtPnJlY29yZCwgZmQtPmtleWxlbmd0aCArIGZkLT5lbnRyeWxlbmd0aCk7CisJZHByaW50KERCR19CTk9ERV9NT0QsICJyZW1vdmVfcmVjOiAlZCwgJWRcbiIsCisJCWZkLT5yZWNvcmQsIGZkLT5rZXlsZW5ndGggKyBmZC0+ZW50cnlsZW5ndGgpOwogCWlmICghLS1ub2RlLT5udW1fcmVjcykgewogCQloZnNfYm5vZGVfdW5saW5rKG5vZGUpOwogCQlpZiAoIW5vZGUtPnBhcmVudCkKQEAgLTE5NCw3ICsyMDAsOSBAQAogCQlfX2hmc19icmVjX2ZpbmQobm9kZSwgZmQpOwogCQlnb3RvIGFnYWluOwogCX0KLQloZnNfYm5vZGVfd3JpdGVfdTE2KG5vZGUsIG9mZnNldG9mKHN0cnVjdCBoZnNfYm5vZGVfZGVzYywgbnVtX3JlY3MpLCBub2RlLT5udW1fcmVjcyk7CisJaGZzX2Jub2RlX3dyaXRlX3UxNihub2RlLAorCQlvZmZzZXRvZihzdHJ1Y3QgaGZzX2Jub2RlX2Rlc2MsIG51bV9yZWNzKSwKKwkJbm9kZS0+bnVtX3JlY3MpOwogCiAJaWYgKHJlY19vZmYgPT0gZW5kX29mZikKIAkJZ290byBza2lwOwpAQCAtMzY0LDcgKzM3Miw4IEBACiAJCW5ld2tleWxlbiA9IGhmc19ibm9kZV9yZWFkX3UxNihub2RlLCAxNCkgKyAyOwogCWVsc2UKIAkJZmQtPmtleWxlbmd0aCA9IG5ld2tleWxlbiA9IHRyZWUtPm1heF9rZXlfbGVuICsgMjsKLQlkcHJpbnQoREJHX0JOT0RFX01PRCwgInVwZGF0ZV9yZWM6ICVkLCAlZCwgJWRcbiIsIHJlYywgZmQtPmtleWxlbmd0aCwgbmV3a2V5bGVuKTsKKwlkcHJpbnQoREJHX0JOT0RFX01PRCwgInVwZGF0ZV9yZWM6ICVkLCAlZCwgJWRcbiIsCisJCXJlYywgZmQtPmtleWxlbmd0aCwgbmV3a2V5bGVuKTsKIAogCXJlY19vZmYgPSB0cmVlLT5ub2RlX3NpemUgLSAocmVjICsgMikgKiAyOwogCWVuZF9yZWNfb2ZmID0gdHJlZS0+bm9kZV9zaXplIC0gKHBhcmVudC0+bnVtX3JlY3MgKyAxKSAqIDI7CkBAIC0zNzUsNyArMzg0LDcgQEAKIAkJZW5kX29mZiA9IGhmc19ibm9kZV9yZWFkX3UxNihwYXJlbnQsIGVuZF9yZWNfb2ZmKTsKIAkJaWYgKGVuZF9yZWNfb2ZmIC0gZW5kX29mZiA8IGRpZmYpIHsKIAotCQkJcHJpbnRrKEtFUk5fREVCVUcgImhmczogc3BsaXR0aW5nIGluZGV4IG5vZGUuLi5cbiIpOworCQkJZHByaW50KERCR19CTk9ERV9NT0QsICJoZnM6IHNwbGl0dGluZyBpbmRleCBub2RlLlxuIik7CiAJCQlmZC0+Ym5vZGUgPSBwYXJlbnQ7CiAJCQluZXdfbm9kZSA9IGhmc19ibm9kZV9zcGxpdChmZCk7CiAJCQlpZiAoSVNfRVJSKG5ld19ub2RlKSkKQEAgLTM4Myw3ICszOTIsOCBAQAogCQkJcGFyZW50ID0gZmQtPmJub2RlOwogCQkJcmVjID0gZmQtPnJlY29yZDsKIAkJCXJlY19vZmYgPSB0cmVlLT5ub2RlX3NpemUgLSAocmVjICsgMikgKiAyOwotCQkJZW5kX3JlY19vZmYgPSB0cmVlLT5ub2RlX3NpemUgLSAocGFyZW50LT5udW1fcmVjcyArIDEpICogMjsKKwkJCWVuZF9yZWNfb2ZmID0gdHJlZS0+bm9kZV9zaXplIC0KKwkJCQkocGFyZW50LT5udW1fcmVjcyArIDEpICogMjsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9idHJlZS5jIGIvZnMvaGZzcGx1cy9idHJlZS5jCmluZGV4IDIyZTRkNGUuLjIxMDIzZDkgMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvYnRyZWUuYworKysgYi9mcy9oZnNwbHVzL2J0cmVlLmMKQEAgLTUxLDcgKzUxLDggQEAKIAkJZ290byBmcmVlX2lub2RlOwogCiAJLyogTG9hZCB0aGUgaGVhZGVyICovCi0JaGVhZCA9IChzdHJ1Y3QgaGZzX2J0cmVlX2hlYWRlcl9yZWMgKikoa21hcChwYWdlKSArIHNpemVvZihzdHJ1Y3QgaGZzX2Jub2RlX2Rlc2MpKTsKKwloZWFkID0gKHN0cnVjdCBoZnNfYnRyZWVfaGVhZGVyX3JlYyAqKShrbWFwKHBhZ2UpICsKKwkJc2l6ZW9mKHN0cnVjdCBoZnNfYm5vZGVfZGVzYykpOwogCXRyZWUtPnJvb3QgPSBiZTMyX3RvX2NwdShoZWFkLT5yb290KTsKIAl0cmVlLT5sZWFmX2NvdW50ID0gYmUzMl90b19jcHUoaGVhZC0+bGVhZl9jb3VudCk7CiAJdHJlZS0+bGVhZl9oZWFkID0gYmUzMl90b19jcHUoaGVhZC0+bGVhZl9oZWFkKTsKQEAgLTExNSw3ICsxMTYsOSBAQAogCiAJdHJlZS0+bm9kZV9zaXplX3NoaWZ0ID0gZmZzKHNpemUpIC0gMTsKIAotCXRyZWUtPnBhZ2VzX3Blcl9ibm9kZSA9ICh0cmVlLT5ub2RlX3NpemUgKyBQQUdFX0NBQ0hFX1NJWkUgLSAxKSA+PiBQQUdFX0NBQ0hFX1NISUZUOworCXRyZWUtPnBhZ2VzX3Blcl9ibm9kZSA9CisJCSh0cmVlLT5ub2RlX3NpemUgKyBQQUdFX0NBQ0hFX1NJWkUgLSAxKSA+PgorCQlQQUdFX0NBQ0hFX1NISUZUOwogCiAJa3VubWFwKHBhZ2UpOwogCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKQEAgLTE0NCw4ICsxNDcsMTAgQEAKIAkJd2hpbGUgKChub2RlID0gdHJlZS0+bm9kZV9oYXNoW2ldKSkgewogCQkJdHJlZS0+bm9kZV9oYXNoW2ldID0gbm9kZS0+bmV4dF9oYXNoOwogCQkJaWYgKGF0b21pY19yZWFkKCZub2RlLT5yZWZjbnQpKQotCQkJCXByaW50ayhLRVJOX0NSSVQgImhmczogbm9kZSAlZDolZCBzdGlsbCBoYXMgJWQgdXNlcihzKSFcbiIsCi0JCQkJCW5vZGUtPnRyZWUtPmNuaWQsIG5vZGUtPnRoaXMsIGF0b21pY19yZWFkKCZub2RlLT5yZWZjbnQpKTsKKwkJCQlwcmludGsoS0VSTl9DUklUICJoZnM6IG5vZGUgJWQ6JWQgIgorCQkJCQkJInN0aWxsIGhhcyAlZCB1c2VyKHMpIVxuIiwKKwkJCQkJbm9kZS0+dHJlZS0+Y25pZCwgbm9kZS0+dGhpcywKKwkJCQkJYXRvbWljX3JlYWQoJm5vZGUtPnJlZmNudCkpOwogCQkJaGZzX2Jub2RlX2ZyZWUobm9kZSk7CiAJCQl0cmVlLT5ub2RlX2hhc2hfY250LS07CiAJCX0KQEAgLTE2Niw3ICsxNzEsOCBAQAogCQlyZXR1cm47CiAJLyogTG9hZCB0aGUgaGVhZGVyICovCiAJcGFnZSA9IG5vZGUtPnBhZ2VbMF07Ci0JaGVhZCA9IChzdHJ1Y3QgaGZzX2J0cmVlX2hlYWRlcl9yZWMgKikoa21hcChwYWdlKSArIHNpemVvZihzdHJ1Y3QgaGZzX2Jub2RlX2Rlc2MpKTsKKwloZWFkID0gKHN0cnVjdCBoZnNfYnRyZWVfaGVhZGVyX3JlYyAqKShrbWFwKHBhZ2UpICsKKwkJc2l6ZW9mKHN0cnVjdCBoZnNfYm5vZGVfZGVzYykpOwogCiAJaGVhZC0+cm9vdCA9IGNwdV90b19iZTMyKHRyZWUtPnJvb3QpOwogCWhlYWQtPmxlYWZfY291bnQgPSBjcHVfdG9fYmUzMih0cmVlLT5sZWFmX2NvdW50KTsKQEAgLTI3Miw3ICsyNzgsOCBAQAogCQkJCQkJdHJlZS0+ZnJlZV9ub2Rlcy0tOwogCQkJCQkJbWFya19pbm9kZV9kaXJ0eSh0cmVlLT5pbm9kZSk7CiAJCQkJCQloZnNfYm5vZGVfcHV0KG5vZGUpOwotCQkJCQkJcmV0dXJuIGhmc19ibm9kZV9jcmVhdGUodHJlZSwgaWR4KTsKKwkJCQkJCXJldHVybiBoZnNfYm5vZGVfY3JlYXRlKHRyZWUsCisJCQkJCQkJaWR4KTsKIAkJCQkJfQogCQkJCX0KIAkJCX0KQEAgLTI4Nyw3ICsyOTQsNyBAQAogCQlrdW5tYXAoKnBhZ2VwKTsKIAkJbmlkeCA9IG5vZGUtPm5leHQ7CiAJCWlmICghbmlkeCkgewotCQkJcHJpbnRrKEtFUk5fREVCVUcgImhmczogY3JlYXRlIG5ldyBibWFwIG5vZGUuLi5cbiIpOworCQkJZHByaW50KERCR19CTk9ERV9NT0QsICJoZnM6IGNyZWF0ZSBuZXcgYm1hcCBub2RlLlxuIik7CiAJCQluZXh0X25vZGUgPSBoZnNfYm1hcF9uZXdfYm1hcChub2RlLCBpZHgpOwogCQl9IGVsc2UKIAkJCW5leHRfbm9kZSA9IGhmc19ibm9kZV9maW5kKHRyZWUsIG5pZHgpOwpAQCAtMzI5LDcgKzMzNiw5IEBACiAJCWhmc19ibm9kZV9wdXQobm9kZSk7CiAJCWlmICghaSkgewogCQkJLyogcGFuaWMgKi87Ci0JCQlwcmludGsoS0VSTl9DUklUICJoZnM6IHVuYWJsZSB0byBmcmVlIGJub2RlICV1LiBibWFwIG5vdCBmb3VuZCFcbiIsIG5vZGUtPnRoaXMpOworCQkJcHJpbnRrKEtFUk5fQ1JJVCAiaGZzOiB1bmFibGUgdG8gZnJlZSBibm9kZSAldS4gIgorCQkJCQkiYm1hcCBub3QgZm91bmQhXG4iLAorCQkJCW5vZGUtPnRoaXMpOwogCQkJcmV0dXJuOwogCQl9CiAJCW5vZGUgPSBoZnNfYm5vZGVfZmluZCh0cmVlLCBpKTsKQEAgLTMzNyw3ICszNDYsOSBAQAogCQkJcmV0dXJuOwogCQlpZiAobm9kZS0+dHlwZSAhPSBIRlNfTk9ERV9NQVApIHsKIAkJCS8qIHBhbmljICovOwotCQkJcHJpbnRrKEtFUk5fQ1JJVCAiaGZzOiBpbnZhbGlkIGJtYXAgZm91bmQhICgldSwlZClcbiIsIG5vZGUtPnRoaXMsIG5vZGUtPnR5cGUpOworCQkJcHJpbnRrKEtFUk5fQ1JJVCAiaGZzOiBpbnZhbGlkIGJtYXAgZm91bmQhICIKKwkJCQkJIigldSwlZClcbiIsCisJCQkJbm9kZS0+dGhpcywgbm9kZS0+dHlwZSk7CiAJCQloZnNfYm5vZGVfcHV0KG5vZGUpOwogCQkJcmV0dXJuOwogCQl9CkBAIC0zNTAsNyArMzYxLDkgQEAKIAltID0gMSA8PCAofm5pZHggJiA3KTsKIAlieXRlID0gZGF0YVtvZmZdOwogCWlmICghKGJ5dGUgJiBtKSkgewotCQlwcmludGsoS0VSTl9DUklUICJoZnM6IHRyeWluZyB0byBmcmVlIGZyZWUgYm5vZGUgJXUoJWQpXG4iLCBub2RlLT50aGlzLCBub2RlLT50eXBlKTsKKwkJcHJpbnRrKEtFUk5fQ1JJVCAiaGZzOiB0cnlpbmcgdG8gZnJlZSBmcmVlIGJub2RlICIKKwkJCQkiJXUoJWQpXG4iLAorCQkJbm9kZS0+dGhpcywgbm9kZS0+dHlwZSk7CiAJCWt1bm1hcChwYWdlKTsKIAkJaGZzX2Jub2RlX3B1dChub2RlKTsKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9jYXRhbG9nLmMgYi9mcy9oZnNwbHVzL2NhdGFsb2cuYwppbmRleCA4YWY0NWZjLi5iNGJhMWIzIDEwMDY0NAotLS0gYS9mcy9oZnNwbHVzL2NhdGFsb2cuYworKysgYi9mcy9oZnNwbHVzL2NhdGFsb2cuYwpAQCAtOTEsNyArOTEsOCBAQAogCQlwZXJtcy0+ZGV2ID0gMDsKIH0KIAotc3RhdGljIGludCBoZnNwbHVzX2NhdF9idWlsZF9yZWNvcmQoaGZzcGx1c19jYXRfZW50cnkgKmVudHJ5LCB1MzIgY25pZCwgc3RydWN0IGlub2RlICppbm9kZSkKK3N0YXRpYyBpbnQgaGZzcGx1c19jYXRfYnVpbGRfcmVjb3JkKGhmc3BsdXNfY2F0X2VudHJ5ICplbnRyeSwKKwkJdTMyIGNuaWQsIHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJc3RydWN0IGhmc3BsdXNfc2JfaW5mbyAqc2JpID0gSEZTUExVU19TQihpbm9kZS0+aV9zYik7CiAKQEAgLTEyOCwyMCArMTI5LDMyIEBACiAJCWlmIChjbmlkID09IGlub2RlLT5pX2lubykgewogCQkJaGZzcGx1c19jYXRfc2V0X3Blcm1zKGlub2RlLCAmZmlsZS0+cGVybWlzc2lvbnMpOwogCQkJaWYgKFNfSVNMTksoaW5vZGUtPmlfbW9kZSkpIHsKLQkJCQlmaWxlLT51c2VyX2luZm8uZmRUeXBlID0gY3B1X3RvX2JlMzIoSEZTUF9TWU1MSU5LX1RZUEUpOwotCQkJCWZpbGUtPnVzZXJfaW5mby5mZENyZWF0b3IgPSBjcHVfdG9fYmUzMihIRlNQX1NZTUxJTktfQ1JFQVRPUik7CisJCQkJZmlsZS0+dXNlcl9pbmZvLmZkVHlwZSA9CisJCQkJCWNwdV90b19iZTMyKEhGU1BfU1lNTElOS19UWVBFKTsKKwkJCQlmaWxlLT51c2VyX2luZm8uZmRDcmVhdG9yID0KKwkJCQkJY3B1X3RvX2JlMzIoSEZTUF9TWU1MSU5LX0NSRUFUT1IpOwogCQkJfSBlbHNlIHsKLQkJCQlmaWxlLT51c2VyX2luZm8uZmRUeXBlID0gY3B1X3RvX2JlMzIoc2JpLT50eXBlKTsKLQkJCQlmaWxlLT51c2VyX2luZm8uZmRDcmVhdG9yID0gY3B1X3RvX2JlMzIoc2JpLT5jcmVhdG9yKTsKKwkJCQlmaWxlLT51c2VyX2luZm8uZmRUeXBlID0KKwkJCQkJY3B1X3RvX2JlMzIoc2JpLT50eXBlKTsKKwkJCQlmaWxlLT51c2VyX2luZm8uZmRDcmVhdG9yID0KKwkJCQkJY3B1X3RvX2JlMzIoc2JpLT5jcmVhdG9yKTsKIAkJCX0KLQkJCWlmICgoZmlsZS0+cGVybWlzc2lvbnMucm9vdGZsYWdzIHwgZmlsZS0+cGVybWlzc2lvbnMudXNlcmZsYWdzKSAmIEhGU1BMVVNfRkxHX0lNTVVUQUJMRSkKLQkJCQlmaWxlLT5mbGFncyB8PSBjcHVfdG9fYmUxNihIRlNQTFVTX0ZJTEVfTE9DS0VEKTsKKwkJCWlmIChIRlNQTFVTX0ZMR19JTU1VVEFCTEUgJgorCQkJCQkoZmlsZS0+cGVybWlzc2lvbnMucm9vdGZsYWdzIHwKKwkJCQkJZmlsZS0+cGVybWlzc2lvbnMudXNlcmZsYWdzKSkKKwkJCQlmaWxlLT5mbGFncyB8PQorCQkJCQljcHVfdG9fYmUxNihIRlNQTFVTX0ZJTEVfTE9DS0VEKTsKIAkJfSBlbHNlIHsKLQkJCWZpbGUtPnVzZXJfaW5mby5mZFR5cGUgPSBjcHVfdG9fYmUzMihIRlNQX0hBUkRMSU5LX1RZUEUpOwotCQkJZmlsZS0+dXNlcl9pbmZvLmZkQ3JlYXRvciA9IGNwdV90b19iZTMyKEhGU1BfSEZTUExVU19DUkVBVE9SKTsKLQkJCWZpbGUtPnVzZXJfaW5mby5mZEZsYWdzID0gY3B1X3RvX2JlMTYoMHgxMDApOwotCQkJZmlsZS0+Y3JlYXRlX2RhdGUgPSBIRlNQTFVTX0koc2JpLT5oaWRkZW5fZGlyKS0+Y3JlYXRlX2RhdGU7Ci0JCQlmaWxlLT5wZXJtaXNzaW9ucy5kZXYgPSBjcHVfdG9fYmUzMihIRlNQTFVTX0koaW5vZGUpLT5saW5raWQpOworCQkJZmlsZS0+dXNlcl9pbmZvLmZkVHlwZSA9CisJCQkJY3B1X3RvX2JlMzIoSEZTUF9IQVJETElOS19UWVBFKTsKKwkJCWZpbGUtPnVzZXJfaW5mby5mZENyZWF0b3IgPQorCQkJCWNwdV90b19iZTMyKEhGU1BfSEZTUExVU19DUkVBVE9SKTsKKwkJCWZpbGUtPnVzZXJfaW5mby5mZEZsYWdzID0KKwkJCQljcHVfdG9fYmUxNigweDEwMCk7CisJCQlmaWxlLT5jcmVhdGVfZGF0ZSA9CisJCQkJSEZTUExVU19JKHNiaS0+aGlkZGVuX2RpciktPmNyZWF0ZV9kYXRlOworCQkJZmlsZS0+cGVybWlzc2lvbnMuZGV2ID0KKwkJCQljcHVfdG9fYmUzMihIRlNQTFVTX0koaW5vZGUpLT5saW5raWQpOwogCQl9CiAJCXJldHVybiBzaXplb2YoKmZpbGUpOwogCX0KQEAgLTE4MiwxMiArMTk1LDE0IEBACiAJCXJldHVybiAtRUlPOwogCX0KIAotCWhmc3BsdXNfY2F0X2J1aWxkX2tleV91bmkoZmQtPnNlYXJjaF9rZXksIGJlMzJfdG9fY3B1KHRtcC50aHJlYWQucGFyZW50SUQpLAotCQkJCSAmdG1wLnRocmVhZC5ub2RlTmFtZSk7CisJaGZzcGx1c19jYXRfYnVpbGRfa2V5X3VuaShmZC0+c2VhcmNoX2tleSwKKwkJYmUzMl90b19jcHUodG1wLnRocmVhZC5wYXJlbnRJRCksCisJCSZ0bXAudGhyZWFkLm5vZGVOYW1lKTsKIAlyZXR1cm4gaGZzX2JyZWNfZmluZChmZCk7CiB9CiAKLWludCBoZnNwbHVzX2NyZWF0ZV9jYXQodTMyIGNuaWQsIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgcXN0ciAqc3RyLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQoraW50IGhmc3BsdXNfY3JlYXRlX2NhdCh1MzIgY25pZCwgc3RydWN0IGlub2RlICpkaXIsCisJCXN0cnVjdCBxc3RyICpzdHIsIHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGRpci0+aV9zYjsKIAlzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSBmZDsKQEAgLTE5NSwxMyArMjEwLDE1IEBACiAJaW50IGVudHJ5X3NpemU7CiAJaW50IGVycjsKIAotCWRwcmludChEQkdfQ0FUX01PRCwgImNyZWF0ZV9jYXQ6ICVzLCV1KCVkKVxuIiwgc3RyLT5uYW1lLCBjbmlkLCBpbm9kZS0+aV9ubGluayk7CisJZHByaW50KERCR19DQVRfTU9ELCAiY3JlYXRlX2NhdDogJXMsJXUoJWQpXG4iLAorCQlzdHItPm5hbWUsIGNuaWQsIGlub2RlLT5pX25saW5rKTsKIAloZnNfZmluZF9pbml0KEhGU1BMVVNfU0Ioc2IpLT5jYXRfdHJlZSwgJmZkKTsKIAogCWhmc3BsdXNfY2F0X2J1aWxkX2tleShzYiwgZmQuc2VhcmNoX2tleSwgY25pZCwgTlVMTCk7Ci0JZW50cnlfc2l6ZSA9IGhmc3BsdXNfZmlsbF9jYXRfdGhyZWFkKHNiLCAmZW50cnksIFNfSVNESVIoaW5vZGUtPmlfbW9kZSkgPworCWVudHJ5X3NpemUgPSBoZnNwbHVzX2ZpbGxfY2F0X3RocmVhZChzYiwgJmVudHJ5LAorCQlTX0lTRElSKGlub2RlLT5pX21vZGUpID8KIAkJCUhGU1BMVVNfRk9MREVSX1RIUkVBRCA6IEhGU1BMVVNfRklMRV9USFJFQUQsCi0JCQlkaXItPmlfaW5vLCBzdHIpOworCQlkaXItPmlfaW5vLCBzdHIpOwogCWVyciA9IGhmc19icmVjX2ZpbmQoJmZkKTsKIAlpZiAoZXJyICE9IC1FTk9FTlQpIHsKIAkJaWYgKCFlcnIpCkBAIC0yMjcsNyArMjQ0LDggQEAKIAogCWRpci0+aV9zaXplKys7CiAJZGlyLT5pX210aW1lID0gZGlyLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FX1NFQzsKLQltYXJrX2lub2RlX2RpcnR5KGRpcik7CisJaGZzcGx1c19tYXJrX2lub2RlX2RpcnR5KGRpciwgSEZTUExVU19JX0NBVF9ESVJUWSk7CisKIAloZnNfZmluZF9leGl0KCZmZCk7CiAJcmV0dXJuIDA7CiAKQEAgLTI0OSw3ICsyNjcsOCBAQAogCWludCBlcnIsIG9mZjsKIAl1MTYgdHlwZTsKIAotCWRwcmludChEQkdfQ0FUX01PRCwgImRlbGV0ZV9jYXQ6ICVzLCV1XG4iLCBzdHIgPyBzdHItPm5hbWUgOiBOVUxMLCBjbmlkKTsKKwlkcHJpbnQoREJHX0NBVF9NT0QsICJkZWxldGVfY2F0OiAlcywldVxuIiwKKwkJc3RyID8gc3RyLT5uYW1lIDogTlVMTCwgY25pZCk7CiAJaGZzX2ZpbmRfaW5pdChIRlNQTFVTX1NCKHNiKS0+Y2F0X3RyZWUsICZmZCk7CiAKIAlpZiAoIXN0cikgewpAQCAtMjYwLDExICsyNzksMTUgQEAKIAkJaWYgKGVycikKIAkJCWdvdG8gb3V0OwogCi0JCW9mZiA9IGZkLmVudHJ5b2Zmc2V0ICsgb2Zmc2V0b2Yoc3RydWN0IGhmc3BsdXNfY2F0X3RocmVhZCwgbm9kZU5hbWUpOworCQlvZmYgPSBmZC5lbnRyeW9mZnNldCArCisJCQlvZmZzZXRvZihzdHJ1Y3QgaGZzcGx1c19jYXRfdGhyZWFkLCBub2RlTmFtZSk7CiAJCWZkLnNlYXJjaF9rZXktPmNhdC5wYXJlbnQgPSBjcHVfdG9fYmUzMihkaXItPmlfaW5vKTsKLQkJaGZzX2Jub2RlX3JlYWQoZmQuYm5vZGUsICZmZC5zZWFyY2hfa2V5LT5jYXQubmFtZS5sZW5ndGgsIG9mZiwgMik7CisJCWhmc19ibm9kZV9yZWFkKGZkLmJub2RlLAorCQkJJmZkLnNlYXJjaF9rZXktPmNhdC5uYW1lLmxlbmd0aCwgb2ZmLCAyKTsKIAkJbGVuID0gYmUxNl90b19jcHUoZmQuc2VhcmNoX2tleS0+Y2F0Lm5hbWUubGVuZ3RoKSAqIDI7Ci0JCWhmc19ibm9kZV9yZWFkKGZkLmJub2RlLCAmZmQuc2VhcmNoX2tleS0+Y2F0Lm5hbWUudW5pY29kZSwgb2ZmICsgMiwgbGVuKTsKKwkJaGZzX2Jub2RlX3JlYWQoZmQuYm5vZGUsCisJCQkmZmQuc2VhcmNoX2tleS0+Y2F0Lm5hbWUudW5pY29kZSwKKwkJCW9mZiArIDIsIGxlbik7CiAJCWZkLnNlYXJjaF9rZXktPmtleV9sZW4gPSBjcHVfdG9fYmUxNig2ICsgbGVuKTsKIAl9IGVsc2UKIAkJaGZzcGx1c19jYXRfYnVpbGRfa2V5KHNiLCBmZC5zZWFyY2hfa2V5LCBkaXItPmlfaW5vLCBzdHIpOwpAQCAtMjgxLDcgKzMwNCw4IEBACiAJCWhmc3BsdXNfZnJlZV9mb3JrKHNiLCBjbmlkLCAmZm9yaywgSEZTUExVU19UWVBFX0RBVEEpOwogI2VuZGlmCiAKLQkJb2ZmID0gZmQuZW50cnlvZmZzZXQgKyBvZmZzZXRvZihzdHJ1Y3QgaGZzcGx1c19jYXRfZmlsZSwgcnNyY19mb3JrKTsKKwkJb2ZmID0gZmQuZW50cnlvZmZzZXQgKworCQkJb2Zmc2V0b2Yoc3RydWN0IGhmc3BsdXNfY2F0X2ZpbGUsIHJzcmNfZm9yayk7CiAJCWhmc19ibm9kZV9yZWFkKGZkLmJub2RlLCAmZm9yaywgb2ZmLCBzaXplb2YoZm9yaykpOwogCQloZnNwbHVzX2ZyZWVfZm9yayhzYiwgY25pZCwgJmZvcmssIEhGU1BMVVNfVFlQRV9SU1JDKTsKIAl9CkBAIC0zMDgsNyArMzMyLDcgQEAKIAogCWRpci0+aV9zaXplLS07CiAJZGlyLT5pX210aW1lID0gZGlyLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FX1NFQzsKLQltYXJrX2lub2RlX2RpcnR5KGRpcik7CisJaGZzcGx1c19tYXJrX2lub2RlX2RpcnR5KGRpciwgSEZTUExVU19JX0NBVF9ESVJUWSk7CiBvdXQ6CiAJaGZzX2ZpbmRfZXhpdCgmZmQpOwogCkBAIC0zMjUsNyArMzQ5LDggQEAKIAlpbnQgZW50cnlfc2l6ZSwgdHlwZTsKIAlpbnQgZXJyID0gMDsKIAotCWRwcmludChEQkdfQ0FUX01PRCwgInJlbmFtZV9jYXQ6ICV1IC0gJWx1LCVzIC0gJWx1LCVzXG4iLCBjbmlkLCBzcmNfZGlyLT5pX2lubywgc3JjX25hbWUtPm5hbWUsCisJZHByaW50KERCR19DQVRfTU9ELCAicmVuYW1lX2NhdDogJXUgLSAlbHUsJXMgLSAlbHUsJXNcbiIsCisJCWNuaWQsIHNyY19kaXItPmlfaW5vLCBzcmNfbmFtZS0+bmFtZSwKIAkJZHN0X2Rpci0+aV9pbm8sIGRzdF9uYW1lLT5uYW1lKTsKIAloZnNfZmluZF9pbml0KEhGU1BMVVNfU0Ioc2IpLT5jYXRfdHJlZSwgJnNyY19mZCk7CiAJZHN0X2ZkID0gc3JjX2ZkOwpAQCAtMzUzLDcgKzM3OCw2IEBACiAJCWdvdG8gb3V0OwogCWRzdF9kaXItPmlfc2l6ZSsrOwogCWRzdF9kaXItPmlfbXRpbWUgPSBkc3RfZGlyLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FX1NFQzsKLQltYXJrX2lub2RlX2RpcnR5KGRzdF9kaXIpOwogCiAJLyogZmluYWxseSByZW1vdmUgdGhlIG9sZCBlbnRyeSAqLwogCWhmc3BsdXNfY2F0X2J1aWxkX2tleShzYiwgc3JjX2ZkLnNlYXJjaF9rZXksIHNyY19kaXItPmlfaW5vLCBzcmNfbmFtZSk7CkBAIC0zNjUsNyArMzg5LDYgQEAKIAkJZ290byBvdXQ7CiAJc3JjX2Rpci0+aV9zaXplLS07CiAJc3JjX2Rpci0+aV9tdGltZSA9IHNyY19kaXItPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUVfU0VDOwotCW1hcmtfaW5vZGVfZGlydHkoc3JjX2Rpcik7CiAKIAkvKiByZW1vdmUgb2xkIHRocmVhZCBlbnRyeSAqLwogCWhmc3BsdXNfY2F0X2J1aWxkX2tleShzYiwgc3JjX2ZkLnNlYXJjaF9rZXksIGNuaWQsIE5VTEwpOwpAQCAtMzc5LDcgKzQwMiw4IEBACiAKIAkvKiBjcmVhdGUgbmV3IHRocmVhZCBlbnRyeSAqLwogCWhmc3BsdXNfY2F0X2J1aWxkX2tleShzYiwgZHN0X2ZkLnNlYXJjaF9rZXksIGNuaWQsIE5VTEwpOwotCWVudHJ5X3NpemUgPSBoZnNwbHVzX2ZpbGxfY2F0X3RocmVhZChzYiwgJmVudHJ5LCB0eXBlLCBkc3RfZGlyLT5pX2lubywgZHN0X25hbWUpOworCWVudHJ5X3NpemUgPSBoZnNwbHVzX2ZpbGxfY2F0X3RocmVhZChzYiwgJmVudHJ5LCB0eXBlLAorCQlkc3RfZGlyLT5pX2lubywgZHN0X25hbWUpOwogCWVyciA9IGhmc19icmVjX2ZpbmQoJmRzdF9mZCk7CiAJaWYgKGVyciAhPSAtRU5PRU5UKSB7CiAJCWlmICghZXJyKQpAQCAtMzg3LDYgKzQxMSw5IEBACiAJCWdvdG8gb3V0OwogCX0KIAllcnIgPSBoZnNfYnJlY19pbnNlcnQoJmRzdF9mZCwgJmVudHJ5LCBlbnRyeV9zaXplKTsKKworCWhmc3BsdXNfbWFya19pbm9kZV9kaXJ0eShkc3RfZGlyLCBIRlNQTFVTX0lfQ0FUX0RJUlRZKTsKKwloZnNwbHVzX21hcmtfaW5vZGVfZGlydHkoc3JjX2RpciwgSEZTUExVU19JX0NBVF9ESVJUWSk7CiBvdXQ6CiAJaGZzX2Jub2RlX3B1dChkc3RfZmQuYm5vZGUpOwogCWhmc19maW5kX2V4aXQoJnNyY19mZCk7CmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2Rpci5jIGIvZnMvaGZzcGx1cy9kaXIuYwppbmRleCA5ZDU5YzA1Li5mODk2ZGM4NCAxMDA2NDQKLS0tIGEvZnMvaGZzcGx1cy9kaXIuYworKysgYi9mcy9oZnNwbHVzL2Rpci5jCkBAIC0zNyw3ICszNyw3IEBACiAKIAlzYiA9IGRpci0+aV9zYjsKIAotCWRlbnRyeS0+ZF9vcCA9ICZoZnNwbHVzX2RlbnRyeV9vcGVyYXRpb25zOworCWRfc2V0X2Rfb3AoZGVudHJ5LCAmaGZzcGx1c19kZW50cnlfb3BlcmF0aW9ucyk7CiAJZGVudHJ5LT5kX2ZzZGF0YSA9IE5VTEw7CiAJaGZzX2ZpbmRfaW5pdChIRlNQTFVTX1NCKHNiKS0+Y2F0X3RyZWUsICZmZCk7CiAJaGZzcGx1c19jYXRfYnVpbGRfa2V5KHNiLCBmZC5zZWFyY2hfa2V5LCBkaXItPmlfaW5vLCAmZGVudHJ5LT5kX25hbWUpOwpAQCAtNjYsMTEgKzY2LDE3IEBACiAJCQlnb3RvIGZhaWw7CiAJCX0KIAkJY25pZCA9IGJlMzJfdG9fY3B1KGVudHJ5LmZpbGUuaWQpOwotCQlpZiAoZW50cnkuZmlsZS51c2VyX2luZm8uZmRUeXBlID09IGNwdV90b19iZTMyKEhGU1BfSEFSRExJTktfVFlQRSkgJiYKLQkJICAgIGVudHJ5LmZpbGUudXNlcl9pbmZvLmZkQ3JlYXRvciA9PSBjcHVfdG9fYmUzMihIRlNQX0hGU1BMVVNfQ1JFQVRPUikgJiYKLQkJICAgIChlbnRyeS5maWxlLmNyZWF0ZV9kYXRlID09IEhGU1BMVVNfSShIRlNQTFVTX1NCKHNiKS0+aGlkZGVuX2RpciktPmNyZWF0ZV9kYXRlIHx8Ci0JCSAgICAgZW50cnkuZmlsZS5jcmVhdGVfZGF0ZSA9PSBIRlNQTFVTX0koc2ItPnNfcm9vdC0+ZF9pbm9kZSktPmNyZWF0ZV9kYXRlKSAmJgotCQkgICAgSEZTUExVU19TQihzYiktPmhpZGRlbl9kaXIpIHsKKwkJaWYgKGVudHJ5LmZpbGUudXNlcl9pbmZvLmZkVHlwZSA9PQorCQkJCWNwdV90b19iZTMyKEhGU1BfSEFSRExJTktfVFlQRSkgJiYKKwkJCQllbnRyeS5maWxlLnVzZXJfaW5mby5mZENyZWF0b3IgPT0KKwkJCQljcHVfdG9fYmUzMihIRlNQX0hGU1BMVVNfQ1JFQVRPUikgJiYKKwkJCQkoZW50cnkuZmlsZS5jcmVhdGVfZGF0ZSA9PQorCQkJCQlIRlNQTFVTX0koSEZTUExVU19TQihzYiktPmhpZGRlbl9kaXIpLT4KKwkJCQkJCWNyZWF0ZV9kYXRlIHx8CisJCQkJZW50cnkuZmlsZS5jcmVhdGVfZGF0ZSA9PQorCQkJCQlIRlNQTFVTX0koc2ItPnNfcm9vdC0+ZF9pbm9kZSktPgorCQkJCQkJY3JlYXRlX2RhdGUpICYmCisJCQkJSEZTUExVU19TQihzYiktPmhpZGRlbl9kaXIpIHsKIAkJCXN0cnVjdCBxc3RyIHN0cjsKIAkJCWNoYXIgbmFtZVszMl07CiAKQEAgLTgzLDExICs4OSwxMyBAQAogCQkJCWxpbmtpZCA9IDA7CiAJCQl9IGVsc2UgewogCQkJCWRlbnRyeS0+ZF9mc2RhdGEgPSAodm9pZCAqKSh1bnNpZ25lZCBsb25nKWNuaWQ7Ci0JCQkJbGlua2lkID0gYmUzMl90b19jcHUoZW50cnkuZmlsZS5wZXJtaXNzaW9ucy5kZXYpOworCQkJCWxpbmtpZCA9CisJCQkJCWJlMzJfdG9fY3B1KGVudHJ5LmZpbGUucGVybWlzc2lvbnMuZGV2KTsKIAkJCQlzdHIubGVuID0gc3ByaW50ZihuYW1lLCAiaU5vZGUlZCIsIGxpbmtpZCk7CiAJCQkJc3RyLm5hbWUgPSBuYW1lOwogCQkJCWhmc3BsdXNfY2F0X2J1aWxkX2tleShzYiwgZmQuc2VhcmNoX2tleSwKLQkJCQkJSEZTUExVU19TQihzYiktPmhpZGRlbl9kaXItPmlfaW5vLCAmc3RyKTsKKwkJCQkJSEZTUExVU19TQihzYiktPmhpZGRlbl9kaXItPmlfaW5vLAorCQkJCQkmc3RyKTsKIAkJCQlnb3RvIGFnYWluOwogCQkJfQogCQl9IGVsc2UgaWYgKCFkZW50cnktPmRfZnNkYXRhKQpAQCAtMTM5LDcgKzE0Nyw4IEBACiAJCWZpbHAtPmZfcG9zKys7CiAJCS8qIGZhbGwgdGhyb3VnaCAqLwogCWNhc2UgMToKLQkJaGZzX2Jub2RlX3JlYWQoZmQuYm5vZGUsICZlbnRyeSwgZmQuZW50cnlvZmZzZXQsIGZkLmVudHJ5bGVuZ3RoKTsKKwkJaGZzX2Jub2RlX3JlYWQoZmQuYm5vZGUsICZlbnRyeSwgZmQuZW50cnlvZmZzZXQsCisJCQlmZC5lbnRyeWxlbmd0aCk7CiAJCWlmIChiZTE2X3RvX2NwdShlbnRyeS50eXBlKSAhPSBIRlNQTFVTX0ZPTERFUl9USFJFQUQpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiaGZzOiBiYWQgY2F0YWxvZyBmb2xkZXIgdGhyZWFkXG4iKTsKIAkJCWVyciA9IC1FSU87CkBAIC0xNjksMTQgKzE3OCwxNiBAQAogCQkJZXJyID0gLUVJTzsKIAkJCWdvdG8gb3V0OwogCQl9Ci0JCWhmc19ibm9kZV9yZWFkKGZkLmJub2RlLCAmZW50cnksIGZkLmVudHJ5b2Zmc2V0LCBmZC5lbnRyeWxlbmd0aCk7CisJCWhmc19ibm9kZV9yZWFkKGZkLmJub2RlLCAmZW50cnksIGZkLmVudHJ5b2Zmc2V0LAorCQkJZmQuZW50cnlsZW5ndGgpOwogCQl0eXBlID0gYmUxNl90b19jcHUoZW50cnkudHlwZSk7CiAJCWxlbiA9IEhGU1BMVVNfTUFYX1NUUkxFTjsKIAkJZXJyID0gaGZzcGx1c191bmkyYXNjKHNiLCAmZmQua2V5LT5jYXQubmFtZSwgc3RyYnVmLCAmbGVuKTsKIAkJaWYgKGVycikKIAkJCWdvdG8gb3V0OwogCQlpZiAodHlwZSA9PSBIRlNQTFVTX0ZPTERFUikgewotCQkJaWYgKGZkLmVudHJ5bGVuZ3RoIDwgc2l6ZW9mKHN0cnVjdCBoZnNwbHVzX2NhdF9mb2xkZXIpKSB7CisJCQlpZiAoZmQuZW50cnlsZW5ndGggPAorCQkJCQlzaXplb2Yoc3RydWN0IGhmc3BsdXNfY2F0X2ZvbGRlcikpIHsKIAkJCQlwcmludGsoS0VSTl9FUlIgImhmczogc21hbGwgZGlyIGVudHJ5XG4iKTsKIAkJCQllcnIgPSAtRUlPOwogCQkJCWdvdG8gb3V0OwpAQCAtMjAyLDcgKzIxMyw3IEBACiAJCQllcnIgPSAtRUlPOwogCQkJZ290byBvdXQ7CiAJCX0KLQluZXh0OgorbmV4dDoKIAkJZmlscC0+Zl9wb3MrKzsKIAkJaWYgKGZpbHAtPmZfcG9zID49IGlub2RlLT5pX3NpemUpCiAJCQlnb3RvIG91dDsKQEAgLTI3Myw3ICsyODQsOCBAQAogCQlIRlNQTFVTX0koaW5vZGUpLT5saW5raWQgPSBpZDsKIAkJY25pZCA9IHNiaS0+bmV4dF9jbmlkKys7CiAJCXNyY19kZW50cnktPmRfZnNkYXRhID0gKHZvaWQgKikodW5zaWduZWQgbG9uZyljbmlkOwotCQlyZXMgPSBoZnNwbHVzX2NyZWF0ZV9jYXQoY25pZCwgc3JjX2RpciwgJnNyY19kZW50cnktPmRfbmFtZSwgaW5vZGUpOworCQlyZXMgPSBoZnNwbHVzX2NyZWF0ZV9jYXQoY25pZCwgc3JjX2RpciwKKwkJCSZzcmNfZGVudHJ5LT5kX25hbWUsIGlub2RlKTsKIAkJaWYgKHJlcykKIAkJCS8qIHBhbmljPyAqLwogCQkJZ290byBvdXQ7CkBAIC00ODUsNiArNDk3LDcgQEAKIH07CiAKIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaGZzcGx1c19kaXJfb3BlcmF0aW9ucyA9IHsKKwkuZnN5bmMJCT0gaGZzcGx1c19maWxlX2ZzeW5jLAogCS5yZWFkCQk9IGdlbmVyaWNfcmVhZF9kaXIsCiAJLnJlYWRkaXIJPSBoZnNwbHVzX3JlYWRkaXIsCiAJLnVubG9ja2VkX2lvY3RsID0gaGZzcGx1c19pb2N0bCwKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvZXh0ZW50cy5jIGIvZnMvaGZzcGx1cy9leHRlbnRzLmMKaW5kZXggMGM5Y2IxOC4uNTJhMGJjYSAxMDA2NDQKLS0tIGEvZnMvaGZzcGx1cy9leHRlbnRzLmMKKysrIGIvZnMvaGZzcGx1cy9leHRlbnRzLmMKQEAgLTgzLDcgKzgzLDggQEAKIAlyZXR1cm4gYmUzMl90b19jcHUoZXh0LT5zdGFydF9ibG9jaykgKyBiZTMyX3RvX2NwdShleHQtPmJsb2NrX2NvdW50KTsKIH0KIAotc3RhdGljIHZvaWQgX19oZnNwbHVzX2V4dF93cml0ZV9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGhmc19maW5kX2RhdGEgKmZkKQorc3RhdGljIHZvaWQgX19oZnNwbHVzX2V4dF93cml0ZV9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwKKwkJc3RydWN0IGhmc19maW5kX2RhdGEgKmZkKQogewogCXN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm8gKmhpcCA9IEhGU1BMVVNfSShpbm9kZSk7CiAJaW50IHJlczsKQEAgLTk1LDI0ICs5NiwzMiBAQAogCQkJCUhGU1BMVVNfVFlQRV9SU1JDIDogSEZTUExVU19UWVBFX0RBVEEpOwogCiAJcmVzID0gaGZzX2JyZWNfZmluZChmZCk7Ci0JaWYgKGhpcC0+ZmxhZ3MgJiBIRlNQTFVTX0ZMR19FWFRfTkVXKSB7CisJaWYgKGhpcC0+ZXh0ZW50X3N0YXRlICYgSEZTUExVU19FWFRfTkVXKSB7CiAJCWlmIChyZXMgIT0gLUVOT0VOVCkKIAkJCXJldHVybjsKIAkJaGZzX2JyZWNfaW5zZXJ0KGZkLCBoaXAtPmNhY2hlZF9leHRlbnRzLAogCQkJCXNpemVvZihoZnNwbHVzX2V4dGVudF9yZWMpKTsKLQkJaGlwLT5mbGFncyAmPSB+KEhGU1BMVVNfRkxHX0VYVF9ESVJUWSB8IEhGU1BMVVNfRkxHX0VYVF9ORVcpOworCQloaXAtPmV4dGVudF9zdGF0ZSAmPSB+KEhGU1BMVVNfRVhUX0RJUlRZIHwgSEZTUExVU19FWFRfTkVXKTsKIAl9IGVsc2UgewogCQlpZiAocmVzKQogCQkJcmV0dXJuOwogCQloZnNfYm5vZGVfd3JpdGUoZmQtPmJub2RlLCBoaXAtPmNhY2hlZF9leHRlbnRzLAogCQkJCWZkLT5lbnRyeW9mZnNldCwgZmQtPmVudHJ5bGVuZ3RoKTsKLQkJaGlwLT5mbGFncyAmPSB+SEZTUExVU19GTEdfRVhUX0RJUlRZOworCQloaXAtPmV4dGVudF9zdGF0ZSAmPSB+SEZTUExVU19FWFRfRElSVFk7CiAJfQorCisJLyoKKwkgKiBXZSBjYW4ndCBqdXN0IHVzZSBoZnNwbHVzX21hcmtfaW5vZGVfZGlydHkgaGVyZSwgYmVjYXVzZSB3ZQorCSAqIGFsc28gZ2V0IGNhbGxlZCBmcm9tIGhmc3BsdXNfd3JpdGVfaW5vZGUsIHdoaWNoIHNob3VsZCBub3QKKwkgKiByZWRpcnR5IHRoZSBpbm9kZS4gIEluc3RlYWQgdGhlIGNhbGxlcnMgaGF2ZSB0byBiZSBjYXJlZnVsCisJICogdG8gZXhwbGljaWx5IG1hcmsgdGhlIGlub2RlIGRpcnR5LCB0b28uCisJICovCisJc2V0X2JpdChIRlNQTFVTX0lfRVhUX0RJUlRZLCAmaGlwLT5mbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIGhmc3BsdXNfZXh0X3dyaXRlX2V4dGVudF9sb2NrZWQoc3RydWN0IGlub2RlICppbm9kZSkKIHsKLQlpZiAoSEZTUExVU19JKGlub2RlKS0+ZmxhZ3MgJiBIRlNQTFVTX0ZMR19FWFRfRElSVFkpIHsKKwlpZiAoSEZTUExVU19JKGlub2RlKS0+ZXh0ZW50X3N0YXRlICYgSEZTUExVU19FWFRfRElSVFkpIHsKIAkJc3RydWN0IGhmc19maW5kX2RhdGEgZmQ7CiAKIAkJaGZzX2ZpbmRfaW5pdChIRlNQTFVTX1NCKGlub2RlLT5pX3NiKS0+ZXh0X3RyZWUsICZmZCk7CkBAIC0xNDQsMTggKzE1MywyMCBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAlpZiAoZmQtPmVudHJ5bGVuZ3RoICE9IHNpemVvZihoZnNwbHVzX2V4dGVudF9yZWMpKQogCQlyZXR1cm4gLUVJTzsKLQloZnNfYm5vZGVfcmVhZChmZC0+Ym5vZGUsIGV4dGVudCwgZmQtPmVudHJ5b2Zmc2V0LCBzaXplb2YoaGZzcGx1c19leHRlbnRfcmVjKSk7CisJaGZzX2Jub2RlX3JlYWQoZmQtPmJub2RlLCBleHRlbnQsIGZkLT5lbnRyeW9mZnNldCwKKwkJc2l6ZW9mKGhmc3BsdXNfZXh0ZW50X3JlYykpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBfX2hmc3BsdXNfZXh0X2NhY2hlX2V4dGVudChzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBibG9jaykKK3N0YXRpYyBpbmxpbmUgaW50IF9faGZzcGx1c19leHRfY2FjaGVfZXh0ZW50KHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCwKKwkJc3RydWN0IGlub2RlICppbm9kZSwgdTMyIGJsb2NrKQogewogCXN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm8gKmhpcCA9IEhGU1BMVVNfSShpbm9kZSk7CiAJaW50IHJlczsKIAogCVdBUk5fT04oIW11dGV4X2lzX2xvY2tlZCgmaGlwLT5leHRlbnRzX2xvY2spKTsKIAotCWlmIChoaXAtPmZsYWdzICYgSEZTUExVU19GTEdfRVhUX0RJUlRZKQorCWlmIChoaXAtPmV4dGVudF9zdGF0ZSAmIEhGU1BMVVNfRVhUX0RJUlRZKQogCQlfX2hmc3BsdXNfZXh0X3dyaXRlX2V4dGVudChpbm9kZSwgZmQpOwogCiAJcmVzID0gX19oZnNwbHVzX2V4dF9yZWFkX2V4dGVudChmZCwgaGlwLT5jYWNoZWRfZXh0ZW50cywgaW5vZGUtPmlfaW5vLApAQCAtMTY0LDEwICsxNzUsMTEgQEAKIAkJCQkJCUhGU1BMVVNfVFlQRV9EQVRBKTsKIAlpZiAoIXJlcykgewogCQloaXAtPmNhY2hlZF9zdGFydCA9IGJlMzJfdG9fY3B1KGZkLT5rZXktPmV4dC5zdGFydF9ibG9jayk7Ci0JCWhpcC0+Y2FjaGVkX2Jsb2NrcyA9IGhmc3BsdXNfZXh0X2Jsb2NrX2NvdW50KGhpcC0+Y2FjaGVkX2V4dGVudHMpOworCQloaXAtPmNhY2hlZF9ibG9ja3MgPQorCQkJaGZzcGx1c19leHRfYmxvY2tfY291bnQoaGlwLT5jYWNoZWRfZXh0ZW50cyk7CiAJfSBlbHNlIHsKIAkJaGlwLT5jYWNoZWRfc3RhcnQgPSBoaXAtPmNhY2hlZF9ibG9ja3MgPSAwOwotCQloaXAtPmZsYWdzICY9IH4oSEZTUExVU19GTEdfRVhUX0RJUlRZIHwgSEZTUExVU19GTEdfRVhUX05FVyk7CisJCWhpcC0+ZXh0ZW50X3N0YXRlICY9IH4oSEZTUExVU19FWFRfRElSVFkgfCBIRlNQTFVTX0VYVF9ORVcpOwogCX0KIAlyZXR1cm4gcmVzOwogfQpAQCAtMTk3LDYgKzIwOSw3IEBACiAJc3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqaGlwID0gSEZTUExVU19JKGlub2RlKTsKIAlpbnQgcmVzID0gLUVJTzsKIAl1MzIgYWJsb2NrLCBkYmxvY2ssIG1hc2s7CisJaW50IHdhc19kaXJ0eSA9IDA7CiAJaW50IHNoaWZ0OwogCiAJLyogQ29udmVydCBpbm9kZSBibG9jayB0byBkaXNrIGFsbG9jYXRpb24gYmxvY2sgKi8KQEAgLTIyMywyNyArMjM2LDM3IEBACiAJCXJldHVybiAtRUlPOwogCiAJbXV0ZXhfbG9jaygmaGlwLT5leHRlbnRzX2xvY2spOworCisJLyoKKwkgKiBoZnNwbHVzX2V4dF9yZWFkX2V4dGVudCB3aWxsIHdyaXRlIG91dCBhIGNhY2hlZCBleHRlbnQgaW50bworCSAqIHRoZSBleHRlbnRzIGJ0cmVlLiAgSW4gdGhhdCBjYXNlIHdlIG1heSBoYXZlIHRvIG1hcmsgdGhlIGlub2RlCisJICogZGlydHkgZXZlbiBmb3IgYSBwdXJlIHJlYWQgb2YgYW4gZXh0ZW50IGhlcmUuCisJICovCisJd2FzX2RpcnR5ID0gKGhpcC0+ZXh0ZW50X3N0YXRlICYgSEZTUExVU19FWFRfRElSVFkpOwogCXJlcyA9IGhmc3BsdXNfZXh0X3JlYWRfZXh0ZW50KGlub2RlLCBhYmxvY2spOwotCWlmICghcmVzKSB7Ci0JCWRibG9jayA9IGhmc3BsdXNfZXh0X2ZpbmRfYmxvY2soaGlwLT5jYWNoZWRfZXh0ZW50cywKLQkJCQkJCWFibG9jayAtIGhpcC0+Y2FjaGVkX3N0YXJ0KTsKLQl9IGVsc2UgeworCWlmIChyZXMpIHsKIAkJbXV0ZXhfdW5sb2NrKCZoaXAtPmV4dGVudHNfbG9jayk7CiAJCXJldHVybiAtRUlPOwogCX0KKwlkYmxvY2sgPSBoZnNwbHVzX2V4dF9maW5kX2Jsb2NrKGhpcC0+Y2FjaGVkX2V4dGVudHMsCisJCQkJCWFibG9jayAtIGhpcC0+Y2FjaGVkX3N0YXJ0KTsKIAltdXRleF91bmxvY2soJmhpcC0+ZXh0ZW50c19sb2NrKTsKIAogZG9uZToKLQlkcHJpbnQoREJHX0VYVEVOVCwgImdldF9ibG9jayglbHUpOiAlbGx1IC0gJXVcbiIsIGlub2RlLT5pX2lubywgKGxvbmcgbG9uZylpYmxvY2ssIGRibG9jayk7CisJZHByaW50KERCR19FWFRFTlQsICJnZXRfYmxvY2soJWx1KTogJWxsdSAtICV1XG4iLAorCQlpbm9kZS0+aV9pbm8sIChsb25nIGxvbmcpaWJsb2NrLCBkYmxvY2spOwogCW1hc2sgPSAoMSA8PCBzYmktPmZzX3NoaWZ0KSAtIDE7Ci0JbWFwX2JoKGJoX3Jlc3VsdCwgc2IsIChkYmxvY2sgPDwgc2JpLT5mc19zaGlmdCkgKyBzYmktPmJsb2Nrb2Zmc2V0ICsgKGlibG9jayAmIG1hc2spKTsKKwltYXBfYmgoYmhfcmVzdWx0LCBzYiwKKwkJKGRibG9jayA8PCBzYmktPmZzX3NoaWZ0KSArIHNiaS0+YmxvY2tvZmZzZXQgKworCQkJKGlibG9jayAmIG1hc2spKTsKIAlpZiAoY3JlYXRlKSB7CiAJCXNldF9idWZmZXJfbmV3KGJoX3Jlc3VsdCk7CiAJCWhpcC0+cGh5c19zaXplICs9IHNiLT5zX2Jsb2Nrc2l6ZTsKIAkJaGlwLT5mc19ibG9ja3MrKzsKIAkJaW5vZGVfYWRkX2J5dGVzKGlub2RlLCBzYi0+c19ibG9ja3NpemUpOwotCQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKIAl9CisJaWYgKGNyZWF0ZSB8fCB3YXNfZGlydHkpCisJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwogCXJldHVybiAwOwogfQogCkBAIC0zMjYsNyArMzQ5LDggQEAKIAl9CiB9CiAKLWludCBoZnNwbHVzX2ZyZWVfZm9yayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgY25pZCwgc3RydWN0IGhmc3BsdXNfZm9ya19yYXcgKmZvcmssIGludCB0eXBlKQoraW50IGhmc3BsdXNfZnJlZV9mb3JrKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBjbmlkLAorCQlzdHJ1Y3QgaGZzcGx1c19mb3JrX3JhdyAqZm9yaywgaW50IHR5cGUpCiB7CiAJc3RydWN0IGhmc19maW5kX2RhdGEgZmQ7CiAJaGZzcGx1c19leHRlbnRfcmVjIGV4dF9lbnRyeTsKQEAgLTM3MywxMiArMzk3LDEzIEBACiAJdTMyIHN0YXJ0LCBsZW4sIGdvYWw7CiAJaW50IHJlczsKIAotCWlmIChzYmktPmFsbG9jX2ZpbGUtPmlfc2l6ZSAqIDggPAotCSAgICBzYmktPnRvdGFsX2Jsb2NrcyAtIHNiaS0+ZnJlZV9ibG9ja3MgKyA4KSB7Ci0JCS8vIGV4dGVuZCBhbGxvYyBmaWxlCi0JCXByaW50ayhLRVJOX0VSUiAiaGZzOiBleHRlbmQgYWxsb2MgZmlsZSEgKCVMdSwldSwldSlcbiIsCi0JCQkJc2JpLT5hbGxvY19maWxlLT5pX3NpemUgKiA4LAotCQkJCXNiaS0+dG90YWxfYmxvY2tzLCBzYmktPmZyZWVfYmxvY2tzKTsKKwlpZiAoc2JpLT50b3RhbF9ibG9ja3MgLSBzYmktPmZyZWVfYmxvY2tzICsgOCA+CisJCQlzYmktPmFsbG9jX2ZpbGUtPmlfc2l6ZSAqIDgpIHsKKwkJLyogZXh0ZW5kIGFsbG9jIGZpbGUgKi8KKwkJcHJpbnRrKEtFUk5fRVJSICJoZnM6IGV4dGVuZCBhbGxvYyBmaWxlISAiCisJCQkJIiglbGx1LCV1LCV1KVxuIiwKKwkJCXNiaS0+YWxsb2NfZmlsZS0+aV9zaXplICogOCwKKwkJCXNiaS0+dG90YWxfYmxvY2tzLCBzYmktPmZyZWVfYmxvY2tzKTsKIAkJcmV0dXJuIC1FTk9TUEM7CiAJfQogCkBAIC00MjksNyArNDU0LDcgQEAKIAkJCQkJIHN0YXJ0LCBsZW4pOwogCQlpZiAoIXJlcykgewogCQkJaGZzcGx1c19kdW1wX2V4dGVudChoaXAtPmNhY2hlZF9leHRlbnRzKTsKLQkJCWhpcC0+ZmxhZ3MgfD0gSEZTUExVU19GTEdfRVhUX0RJUlRZOworCQkJaGlwLT5leHRlbnRfc3RhdGUgfD0gSEZTUExVU19FWFRfRElSVFk7CiAJCQloaXAtPmNhY2hlZF9ibG9ja3MgKz0gbGVuOwogCQl9IGVsc2UgaWYgKHJlcyA9PSAtRU5PU1BDKQogCQkJZ290byBpbnNlcnRfZXh0ZW50OwpAQCAtNDM4LDcgKzQ2Myw3IEBACiAJbXV0ZXhfdW5sb2NrKCZoaXAtPmV4dGVudHNfbG9jayk7CiAJaWYgKCFyZXMpIHsKIAkJaGlwLT5hbGxvY19ibG9ja3MgKz0gbGVuOwotCQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKKwkJaGZzcGx1c19tYXJrX2lub2RlX2RpcnR5KGlub2RlLCBIRlNQTFVTX0lfQUxMT0NfRElSVFkpOwogCX0KIAlyZXR1cm4gcmVzOwogCkBAIC00NTAsNyArNDc1LDcgQEAKIAloaXAtPmNhY2hlZF9leHRlbnRzWzBdLnN0YXJ0X2Jsb2NrID0gY3B1X3RvX2JlMzIoc3RhcnQpOwogCWhpcC0+Y2FjaGVkX2V4dGVudHNbMF0uYmxvY2tfY291bnQgPSBjcHVfdG9fYmUzMihsZW4pOwogCWhmc3BsdXNfZHVtcF9leHRlbnQoaGlwLT5jYWNoZWRfZXh0ZW50cyk7Ci0JaGlwLT5mbGFncyB8PSBIRlNQTFVTX0ZMR19FWFRfRElSVFkgfCBIRlNQTFVTX0ZMR19FWFRfTkVXOworCWhpcC0+ZXh0ZW50X3N0YXRlIHw9IEhGU1BMVVNfRVhUX0RJUlRZIHwgSEZTUExVU19FWFRfTkVXOwogCWhpcC0+Y2FjaGVkX3N0YXJ0ID0gaGlwLT5hbGxvY19ibG9ja3M7CiAJaGlwLT5jYWNoZWRfYmxvY2tzID0gbGVuOwogCkBAIC00NjYsOCArNDkxLDkgQEAKIAl1MzIgYWxsb2NfY250LCBibGtfY250LCBzdGFydDsKIAlpbnQgcmVzOwogCi0JZHByaW50KERCR19JTk9ERSwgInRydW5jYXRlOiAlbHUsICVMdSAtPiAlTHVcbiIsCi0JCWlub2RlLT5pX2lubywgKGxvbmcgbG9uZyloaXAtPnBoeXNfc2l6ZSwgaW5vZGUtPmlfc2l6ZSk7CisJZHByaW50KERCR19JTk9ERSwgInRydW5jYXRlOiAlbHUsICVsbHUgLT4gJWxsdVxuIiwKKwkJaW5vZGUtPmlfaW5vLCAobG9uZyBsb25nKWhpcC0+cGh5c19zaXplLAorCQlpbm9kZS0+aV9zaXplKTsKIAogCWlmIChpbm9kZS0+aV9zaXplID4gaGlwLT5waHlzX3NpemUpIHsKIAkJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBpbm9kZS0+aV9tYXBwaW5nOwpAQCAtNDgxLDcgKzUwNyw4IEBACiAJCQkJCQkmcGFnZSwgJmZzZGF0YSk7CiAJCWlmIChyZXMpCiAJCQlyZXR1cm47Ci0JCXJlcyA9IHBhZ2VjYWNoZV93cml0ZV9lbmQoTlVMTCwgbWFwcGluZywgc2l6ZSwgMCwgMCwgcGFnZSwgZnNkYXRhKTsKKwkJcmVzID0gcGFnZWNhY2hlX3dyaXRlX2VuZChOVUxMLCBtYXBwaW5nLCBzaXplLAorCQkJMCwgMCwgcGFnZSwgZnNkYXRhKTsKIAkJaWYgKHJlcyA8IDApCiAJCQlyZXR1cm47CiAJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwpAQCAtNTEzLDEyICs1NDAsMTIgQEAKIAkJCQkgICAgIGFsbG9jX2NudCAtIHN0YXJ0LCBhbGxvY19jbnQgLSBibGtfY250KTsKIAkJaGZzcGx1c19kdW1wX2V4dGVudChoaXAtPmNhY2hlZF9leHRlbnRzKTsKIAkJaWYgKGJsa19jbnQgPiBzdGFydCkgewotCQkJaGlwLT5mbGFncyB8PSBIRlNQTFVTX0ZMR19FWFRfRElSVFk7CisJCQloaXAtPmV4dGVudF9zdGF0ZSB8PSBIRlNQTFVTX0VYVF9ESVJUWTsKIAkJCWJyZWFrOwogCQl9CiAJCWFsbG9jX2NudCA9IHN0YXJ0OwogCQloaXAtPmNhY2hlZF9zdGFydCA9IGhpcC0+Y2FjaGVkX2Jsb2NrcyA9IDA7Ci0JCWhpcC0+ZmxhZ3MgJj0gfihIRlNQTFVTX0ZMR19FWFRfRElSVFkgfCBIRlNQTFVTX0ZMR19FWFRfTkVXKTsKKwkJaGlwLT5leHRlbnRfc3RhdGUgJj0gfihIRlNQTFVTX0VYVF9ESVJUWSB8IEhGU1BMVVNfRVhUX05FVyk7CiAJCWhmc19icmVjX3JlbW92ZSgmZmQpOwogCX0KIAloZnNfZmluZF9leGl0KCZmZCk7CkBAIC01MjcsNyArNTU0LDggQEAKIAloaXAtPmFsbG9jX2Jsb2NrcyA9IGJsa19jbnQ7CiBvdXQ6CiAJaGlwLT5waHlzX3NpemUgPSBpbm9kZS0+aV9zaXplOwotCWhpcC0+ZnNfYmxvY2tzID0gKGlub2RlLT5pX3NpemUgKyBzYi0+c19ibG9ja3NpemUgLSAxKSA+PiBzYi0+c19ibG9ja3NpemVfYml0czsKKwloaXAtPmZzX2Jsb2NrcyA9IChpbm9kZS0+aV9zaXplICsgc2ItPnNfYmxvY2tzaXplIC0gMSkgPj4KKwkJc2ItPnNfYmxvY2tzaXplX2JpdHM7CiAJaW5vZGVfc2V0X2J5dGVzKGlub2RlLCBoaXAtPmZzX2Jsb2NrcyA8PCBzYi0+c19ibG9ja3NpemVfYml0cyk7Ci0JbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CisJaGZzcGx1c19tYXJrX2lub2RlX2RpcnR5KGlub2RlLCBIRlNQTFVTX0lfQUxMT0NfRElSVFkpOwogfQpkaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmggYi9mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaAppbmRleCBjYjM2NTNlLi5kNjg1NzUyIDEwMDY0NAotLS0gYS9mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaAorKysgYi9mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaApAQCAtMjMsMTMgKzIzLDE2IEBACiAjZGVmaW5lIERCR19FWFRFTlQJMHgwMDAwMDAyMAogI2RlZmluZSBEQkdfQklUTUFQCTB4MDAwMDAwNDAKIAotLy8jZGVmaW5lIERCR19NQVNLCShEQkdfRVhURU5UfERCR19JTk9ERXxEQkdfQk5PREVfTU9EKQotLy8jZGVmaW5lIERCR19NQVNLCShEQkdfQk5PREVfTU9EfERCR19DQVRfTU9EfERCR19JTk9ERSkKLS8vI2RlZmluZSBEQkdfTUFTSwkoREJHX0NBVF9NT0R8REJHX0JOT0RFX1JFRlN8REJHX0lOT0RFfERCR19FWFRFTlQpCisjaWYgMAorI2RlZmluZSBEQkdfTUFTSwkoREJHX0VYVEVOVHxEQkdfSU5PREV8REJHX0JOT0RFX01PRCkKKyNkZWZpbmUgREJHX01BU0sJKERCR19CTk9ERV9NT0R8REJHX0NBVF9NT0R8REJHX0lOT0RFKQorI2RlZmluZSBEQkdfTUFTSwkoREJHX0NBVF9NT0R8REJHX0JOT0RFX1JFRlN8REJHX0lOT0RFfERCR19FWFRFTlQpCisjZW5kaWYKICNkZWZpbmUgREJHX01BU0sJKDApCiAKICNkZWZpbmUgZHByaW50KGZsZywgZm10LCBhcmdzLi4uKSBcCi0JaWYgKGZsZyAmIERCR19NQVNLKSBwcmludGsoZm10ICwgIyMgYXJncykKKwlpZiAoZmxnICYgREJHX01BU0spIFwKKwkJcHJpbnRrKGZtdCAsICMjIGFyZ3MpCiAKIC8qIFJ1bnRpbWUgY29uZmlnIG9wdGlvbnMgKi8KICNkZWZpbmUgSEZTUExVU19ERUZfQ1JfVFlQRSAgICAweDNGM0YzRjNGICAvKiAnPz8/PycgKi8KQEAgLTM3LDcgKzQwLDggQEAKICNkZWZpbmUgSEZTUExVU19UWVBFX0RBVEEgMHgwMAogI2RlZmluZSBIRlNQTFVTX1RZUEVfUlNSQyAweEZGCiAKLXR5cGVkZWYgaW50ICgqYnRyZWVfa2V5Y21wKShjb25zdCBoZnNwbHVzX2J0cmVlX2tleSAqLCBjb25zdCBoZnNwbHVzX2J0cmVlX2tleSAqKTsKK3R5cGVkZWYgaW50ICgqYnRyZWVfa2V5Y21wKShjb25zdCBoZnNwbHVzX2J0cmVlX2tleSAqLAorCQljb25zdCBoZnNwbHVzX2J0cmVlX2tleSAqKTsKIAogI2RlZmluZSBOT0RFX0hBU0hfU0laRQkyNTYKIApAQCAtNjEsNyArNjUsNiBAQAogCXVuc2lnbmVkIGludCBtYXhfa2V5X2xlbjsKIAl1bnNpZ25lZCBpbnQgZGVwdGg7CiAKLQkvL3Vuc2lnbmVkIGludCBtYXAxX3NpemUsIG1hcF9zaXplOwogCXN0cnVjdCBtdXRleCB0cmVlX2xvY2s7CiAKIAl1bnNpZ25lZCBpbnQgcGFnZXNfcGVyX2Jub2RlOwpAQCAtMTA3LDggKzExMCw4IEBACiBzdHJ1Y3QgaGZzX2J0cmVlOwogCiBzdHJ1Y3QgaGZzcGx1c19zYl9pbmZvIHsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnNfdmhiaDsKIAlzdHJ1Y3QgaGZzcGx1c192aCAqc192aGRyOworCXN0cnVjdCBoZnNwbHVzX3ZoICpzX2JhY2t1cF92aGRyOwogCXN0cnVjdCBoZnNfYnRyZWUgKmV4dF90cmVlOwogCXN0cnVjdCBoZnNfYnRyZWUgKmNhdF90cmVlOwogCXN0cnVjdCBoZnNfYnRyZWUgKmF0dHJfdHJlZTsKQEAgLTExOCw3ICsxMjEsOCBAQAogCiAJLyogUnVudGltZSB2YXJpYWJsZXMgKi8KIAl1MzIgYmxvY2tvZmZzZXQ7Ci0JdTMyIHNlY3RfY291bnQ7CisJc2VjdG9yX3QgcGFydF9zdGFydDsKKwlzZWN0b3JfdCBzZWN0X2NvdW50OwogCWludCBmc19zaGlmdDsKIAogCS8qIGltbXV0YWJsZSBkYXRhIGZyb20gdGhlIHZvbHVtZSBoZWFkZXIgKi8KQEAgLTE1NSw2ICsxNTksMTIgQEAKICNkZWZpbmUgSEZTUExVU19TQl9GT1JDRQkyCiAjZGVmaW5lIEhGU1BMVVNfU0JfSEZTWAkJMwogI2RlZmluZSBIRlNQTFVTX1NCX0NBU0VGT0xECTQKKyNkZWZpbmUgSEZTUExVU19TQl9OT0JBUlJJRVIJNQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKkhGU1BMVVNfU0Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwlyZXR1cm4gc2ItPnNfZnNfaW5mbzsKK30KIAogCiBzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvIHsKQEAgLTE3MCw3ICsxODAsNyBAQAogCXUzMiBjYWNoZWRfYmxvY2tzOwogCWhmc3BsdXNfZXh0ZW50X3JlYyBmaXJzdF9leHRlbnRzOwogCWhmc3BsdXNfZXh0ZW50X3JlYyBjYWNoZWRfZXh0ZW50czsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBleHRlbnRfc3RhdGU7CiAJc3RydWN0IG11dGV4IGV4dGVudHNfbG9jazsKIAogCS8qCkBAIC0xODUsNiArMTk1LDExIEBACiAJdTMyIGxpbmtpZDsKIAogCS8qCisJICogQWNjZXNzZWQgdXNpbmcgYXRvbWljIGJpdG9wcy4KKwkgKi8KKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyoKIAkgKiBQcm90ZWN0ZWQgYnkgaV9tdXRleC4KIAkgKi8KIAlzZWN0b3JfdCBmc19ibG9ja3M7CkBAIC0xOTUsMTIgKzIxMCwzNCBAQAogCXN0cnVjdCBpbm9kZSB2ZnNfaW5vZGU7CiB9OwogCi0jZGVmaW5lIEhGU1BMVVNfRkxHX1JTUkMJMHgwMDAxCi0jZGVmaW5lIEhGU1BMVVNfRkxHX0VYVF9ESVJUWQkweDAwMDIKLSNkZWZpbmUgSEZTUExVU19GTEdfRVhUX05FVwkweDAwMDQKKyNkZWZpbmUgSEZTUExVU19FWFRfRElSVFkJMHgwMDAxCisjZGVmaW5lIEhGU1BMVVNfRVhUX05FVwkJMHgwMDAyCiAKLSNkZWZpbmUgSEZTUExVU19JU19EQVRBKGlub2RlKSAgICghKEhGU1BMVVNfSShpbm9kZSktPmZsYWdzICYgSEZTUExVU19GTEdfUlNSQykpCi0jZGVmaW5lIEhGU1BMVVNfSVNfUlNSQyhpbm9kZSkgICAoSEZTUExVU19JKGlub2RlKS0+ZmxhZ3MgJiBIRlNQTFVTX0ZMR19SU1JDKQorI2RlZmluZSBIRlNQTFVTX0lfUlNSQwkJMAkvKiByZXByZXNlbnRzIGEgcmVzb3VyY2UgZm9yayAqLworI2RlZmluZSBIRlNQTFVTX0lfQ0FUX0RJUlRZCTEJLyogaGFzIGNoYW5nZXMgaW4gdGhlIGNhdGFsb2cgdHJlZSAqLworI2RlZmluZSBIRlNQTFVTX0lfRVhUX0RJUlRZCTIJLyogaGFzIGNoYW5nZXMgaW4gdGhlIGV4dGVudCB0cmVlICovCisjZGVmaW5lIEhGU1BMVVNfSV9BTExPQ19ESVJUWQkzCS8qIGhhcyBjaGFuZ2VzIGluIHRoZSBhbGxvY2F0aW9uIGZpbGUgKi8KKworI2RlZmluZSBIRlNQTFVTX0lTX1JTUkMoaW5vZGUpIFwKKwl0ZXN0X2JpdChIRlNQTFVTX0lfUlNSQywgJkhGU1BMVVNfSShpbm9kZSktPmZsYWdzKQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm8gKkhGU1BMVVNfSShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXJldHVybiBsaXN0X2VudHJ5KGlub2RlLCBzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvLCB2ZnNfaW5vZGUpOworfQorCisvKgorICogTWFyayBhbiBpbm9kZSBkaXJ0eSwgYW5kIGFsc28gbWFyayB0aGUgYnRyZWUgaW4gd2hpY2ggdGhlCisgKiBzcGVjaWZpYyB0eXBlIG9mIG1ldGFkYXRhIGlzIHN0b3JlZC4KKyAqIEZvciBkYXRhIG9yIG1ldGFkYXRhIHRoYXQgZ2V0cyB3cml0dGVuIGJhY2sgYnkgaW50byB0aGUgY2F0YWxvZyBidHJlZQorICogYnkgaGZzcGx1c193cml0ZV9pbm9kZSBhIHBsYWluIG1hcmtfaW5vZGVfZGlydHkgY2FsbCBpcyBlbm91Z2guCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBoZnNwbHVzX21hcmtfaW5vZGVfZGlydHkoc3RydWN0IGlub2RlICppbm9kZSwKKwkJdW5zaWduZWQgaW50IGZsYWcpCit7CisJc2V0X2JpdChmbGFnLCAmSEZTUExVU19JKGlub2RlKS0+ZmxhZ3MpOworCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOworfQogCiBzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSB7CiAJLyogZmlsbGVkIGJ5IGNhbGxlciAqLwpAQCAtMzE4LDkgKzM1NSwxMiBAQAogaW50IGhmc19icmVjX2dvdG8oc3RydWN0IGhmc19maW5kX2RhdGEgKiwgaW50KTsKIAogLyogY2F0YWxvZy5jICovCi1pbnQgaGZzcGx1c19jYXRfY2FzZV9jbXBfa2V5KGNvbnN0IGhmc3BsdXNfYnRyZWVfa2V5ICosIGNvbnN0IGhmc3BsdXNfYnRyZWVfa2V5ICopOwotaW50IGhmc3BsdXNfY2F0X2Jpbl9jbXBfa2V5KGNvbnN0IGhmc3BsdXNfYnRyZWVfa2V5ICosIGNvbnN0IGhmc3BsdXNfYnRyZWVfa2V5ICopOwotdm9pZCBoZnNwbHVzX2NhdF9idWlsZF9rZXkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaGZzcGx1c19idHJlZV9rZXkgKiwgdTMyLCBzdHJ1Y3QgcXN0ciAqKTsKK2ludCBoZnNwbHVzX2NhdF9jYXNlX2NtcF9rZXkoY29uc3QgaGZzcGx1c19idHJlZV9rZXkgKiwKKwkJY29uc3QgaGZzcGx1c19idHJlZV9rZXkgKik7CitpbnQgaGZzcGx1c19jYXRfYmluX2NtcF9rZXkoY29uc3QgaGZzcGx1c19idHJlZV9rZXkgKiwKKwkJY29uc3QgaGZzcGx1c19idHJlZV9rZXkgKik7Cit2b2lkIGhmc3BsdXNfY2F0X2J1aWxkX2tleShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQloZnNwbHVzX2J0cmVlX2tleSAqLCB1MzIsIHN0cnVjdCBxc3RyICopOwogaW50IGhmc3BsdXNfZmluZF9jYXQoc3RydWN0IHN1cGVyX2Jsb2NrICosIHUzMiwgc3RydWN0IGhmc19maW5kX2RhdGEgKik7CiBpbnQgaGZzcGx1c19jcmVhdGVfY2F0KHUzMiwgc3RydWN0IGlub2RlICosIHN0cnVjdCBxc3RyICosIHN0cnVjdCBpbm9kZSAqKTsKIGludCBoZnNwbHVzX2RlbGV0ZV9jYXQodTMyLCBzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHFzdHIgKik7CkBAIC0zMzYsNyArMzc2LDggQEAKIGludCBoZnNwbHVzX2V4dF9jbXBfa2V5KGNvbnN0IGhmc3BsdXNfYnRyZWVfa2V5ICosIGNvbnN0IGhmc3BsdXNfYnRyZWVfa2V5ICopOwogdm9pZCBoZnNwbHVzX2V4dF93cml0ZV9leHRlbnQoc3RydWN0IGlub2RlICopOwogaW50IGhmc3BsdXNfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqLCBzZWN0b3JfdCwgc3RydWN0IGJ1ZmZlcl9oZWFkICosIGludCk7Ci1pbnQgaGZzcGx1c19mcmVlX2Zvcmsoc3RydWN0IHN1cGVyX2Jsb2NrICosIHUzMiwgc3RydWN0IGhmc3BsdXNfZm9ya19yYXcgKiwgaW50KTsKK2ludCBoZnNwbHVzX2ZyZWVfZm9yayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgdTMyLAorCQlzdHJ1Y3QgaGZzcGx1c19mb3JrX3JhdyAqLCBpbnQpOwogaW50IGhmc3BsdXNfZmlsZV9leHRlbmQoc3RydWN0IGlub2RlICopOwogdm9pZCBoZnNwbHVzX2ZpbGVfdHJ1bmNhdGUoc3RydWN0IGlub2RlICopOwogCkBAIC0zNTEsNiArMzkyLDcgQEAKIGludCBoZnNwbHVzX2NhdF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKik7CiBzdHJ1Y3QgaW5vZGUgKmhmc3BsdXNfbmV3X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBpbnQpOwogdm9pZCBoZnNwbHVzX2RlbGV0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKik7CitpbnQgaGZzcGx1c19maWxlX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgZGF0YXN5bmMpOwogCiAvKiBpb2N0bC5jICovCiBsb25nIGhmc3BsdXNfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKQEAgLTM2Miw2ICs0MDQsNyBAQAogCiAvKiBvcHRpb25zLmMgKi8KIGludCBoZnNwbHVzX3BhcnNlX29wdGlvbnMoY2hhciAqLCBzdHJ1Y3QgaGZzcGx1c19zYl9pbmZvICopOworaW50IGhmc3BsdXNfcGFyc2Vfb3B0aW9uc19yZW1vdW50KGNoYXIgKmlucHV0LCBpbnQgKmZvcmNlKTsKIHZvaWQgaGZzcGx1c19maWxsX2RlZmF1bHRzKHN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKik7CiBpbnQgaGZzcGx1c19zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICosIHN0cnVjdCB2ZnNtb3VudCAqKTsKIApAQCAtMzc1LDQ1ICs0MTgsMjYgQEAKIGV4dGVybiB1MTYgaGZzcGx1c19jb21wb3NlX3RhYmxlW107CiAKIC8qIHVuaWNvZGUuYyAqLwotaW50IGhmc3BsdXNfc3RyY2FzZWNtcChjb25zdCBzdHJ1Y3QgaGZzcGx1c191bmlzdHIgKiwgY29uc3Qgc3RydWN0IGhmc3BsdXNfdW5pc3RyICopOwotaW50IGhmc3BsdXNfc3RyY21wKGNvbnN0IHN0cnVjdCBoZnNwbHVzX3VuaXN0ciAqLCBjb25zdCBzdHJ1Y3QgaGZzcGx1c191bmlzdHIgKik7Ci1pbnQgaGZzcGx1c191bmkyYXNjKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBjb25zdCBzdHJ1Y3QgaGZzcGx1c191bmlzdHIgKiwgY2hhciAqLCBpbnQgKik7Ci1pbnQgaGZzcGx1c19hc2MydW5pKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3QgaGZzcGx1c191bmlzdHIgKiwgY29uc3QgY2hhciAqLCBpbnQpOwotaW50IGhmc3BsdXNfaGFzaF9kZW50cnkoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgcXN0ciAqc3RyKTsKLWludCBoZnNwbHVzX2NvbXBhcmVfZGVudHJ5KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IHFzdHIgKnMxLCBzdHJ1Y3QgcXN0ciAqczIpOworaW50IGhmc3BsdXNfc3RyY2FzZWNtcChjb25zdCBzdHJ1Y3QgaGZzcGx1c191bmlzdHIgKiwKKwkJY29uc3Qgc3RydWN0IGhmc3BsdXNfdW5pc3RyICopOworaW50IGhmc3BsdXNfc3RyY21wKGNvbnN0IHN0cnVjdCBoZnNwbHVzX3VuaXN0ciAqLAorCQljb25zdCBzdHJ1Y3QgaGZzcGx1c191bmlzdHIgKik7CitpbnQgaGZzcGx1c191bmkyYXNjKHN0cnVjdCBzdXBlcl9ibG9jayAqLAorCQljb25zdCBzdHJ1Y3QgaGZzcGx1c191bmlzdHIgKiwgY2hhciAqLCBpbnQgKik7CitpbnQgaGZzcGx1c19hc2MydW5pKHN0cnVjdCBzdXBlcl9ibG9jayAqLAorCQlzdHJ1Y3QgaGZzcGx1c191bmlzdHIgKiwgY29uc3QgY2hhciAqLCBpbnQpOworaW50IGhmc3BsdXNfaGFzaF9kZW50cnkoY29uc3Qgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAorCQljb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgcXN0ciAqc3RyKTsKK2ludCBoZnNwbHVzX2NvbXBhcmVfZGVudHJ5KGNvbnN0IHN0cnVjdCBkZW50cnkgKnBhcmVudCwKKwkJY29uc3Qgc3RydWN0IGlub2RlICpwaW5vZGUsCisJCWNvbnN0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSwKKwkJdW5zaWduZWQgaW50IGxlbiwgY29uc3QgY2hhciAqc3RyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSk7CiAKIC8qIHdyYXBwZXIuYyAqLwogaW50IGhmc3BsdXNfcmVhZF93cmFwcGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKLQogaW50IGhmc19wYXJ0X2ZpbmQoc3RydWN0IHN1cGVyX2Jsb2NrICosIHNlY3Rvcl90ICosIHNlY3Rvcl90ICopOwotCi0vKiBhY2Nlc3MgbWFjcm9zICovCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKkhGU1BMVVNfU0Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKLXsKLQlyZXR1cm4gc2ItPnNfZnNfaW5mbzsKLX0KLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpIRlNQTFVTX0koc3RydWN0IGlub2RlICppbm9kZSkKLXsKLQlyZXR1cm4gbGlzdF9lbnRyeShpbm9kZSwgc3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbywgdmZzX2lub2RlKTsKLX0KLQotI2RlZmluZSBzYl9icmVhZDUxMihzYiwgc2VjLCBkYXRhKSAoewkJCVwKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKl9fYmg7CQkJXAotCXNlY3Rvcl90IF9fYmxvY2s7CQkJCVwKLQlsb2ZmX3QgX19zdGFydDsJCQkJCVwKLQlpbnQgX19vZmZzZXQ7CQkJCQlcCi0JCQkJCQkJXAotCV9fc3RhcnQgPSAobG9mZl90KShzZWMpIDw8IEhGU1BMVVNfU0VDVE9SX1NISUZUO1wKLQlfX2Jsb2NrID0gX19zdGFydCA+PiAoc2IpLT5zX2Jsb2Nrc2l6ZV9iaXRzOwlcCi0JX19vZmZzZXQgPSBfX3N0YXJ0ICYgKChzYiktPnNfYmxvY2tzaXplIC0gMSk7CVwKLQlfX2JoID0gc2JfYnJlYWQoKHNiKSwgX19ibG9jayk7CQkJXAotCWlmIChsaWtlbHkoX19iaCAhPSBOVUxMKSkJCQlcCi0JCWRhdGEgPSAodm9pZCAqKShfX2JoLT5iX2RhdGEgKyBfX29mZnNldCk7XAotCWVsc2UJCQkJCQlcCi0JCWRhdGEgPSBOVUxMOwkJCQlcCi0JX19iaDsJCQkJCQlcCi19KQoraW50IGhmc3BsdXNfc3VibWl0X2JpbyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzZWN0b3JfdCBzZWN0b3IsCisJCXZvaWQgKmRhdGEsIGludCBydyk7CiAKIC8qIHRpbWUgbWFjcm9zICovCiAjZGVmaW5lIF9faGZzcF9tdDJ1dCh0KQkJKGJlMzJfdG9fY3B1KHQpIC0gMjA4Mjg0NDgwMFUpCmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2hmc3BsdXNfcmF3LmggYi9mcy9oZnNwbHVzL2hmc3BsdXNfcmF3LmgKaW5kZXggNjg5Mjg5OS4uOTI3Y2RkNiAxMDA2NDQKLS0tIGEvZnMvaGZzcGx1cy9oZnNwbHVzX3Jhdy5oCisrKyBiL2ZzL2hmc3BsdXMvaGZzcGx1c19yYXcuaApAQCAtMzYsNyArMzYsOCBAQAogI2RlZmluZSBIRlNQX1dSQVBPRkZfRU1CRURTSUcgICAgIDB4N0MKICNkZWZpbmUgSEZTUF9XUkFQT0ZGX0VNQkVERVhUICAgICAweDdFCiAKLSNkZWZpbmUgSEZTUF9ISURERU5ESVJfTkFNRQkiXHhlMlx4OTBceDgwXHhlMlx4OTBceDgwXHhlMlx4OTBceDgwXHhlMlx4OTBceDgwSEZTKyBQcml2YXRlIERhdGEiCisjZGVmaW5lIEhGU1BfSElEREVORElSX05BTUUgXAorCSJceGUyXHg5MFx4ODBceGUyXHg5MFx4ODBceGUyXHg5MFx4ODBceGUyXHg5MFx4ODBIRlMrIFByaXZhdGUgRGF0YSIKIAogI2RlZmluZSBIRlNQX0hBUkRMSU5LX1RZUEUJMHg2ODZjNmU2YgkvKiAnaGxuaycgKi8KICNkZWZpbmUgSEZTUF9IRlNQTFVTX0NSRUFUT1IJMHg2ODY2NzMyYgkvKiAnaGZzKycgKi8KZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvaW5vZGUuYyBiL2ZzL2hmc3BsdXMvaW5vZGUuYwppbmRleCA4YWZkN2U4Li5hOGRmNjUxIDEwMDY0NAotLS0gYS9mcy9oZnNwbHVzL2lub2RlLmMKKysrIGIvZnMvaGZzcGx1cy9pbm9kZS5jCkBAIC04LDYgKzgsNyBAQAogICogSW5vZGUgaGFuZGxpbmcgcm91dGluZXMKICAqLwogCisjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KQEAgLTc3LDcgKzc4LDggQEAKIAlpZiAoIXRyZWUpCiAJCXJldHVybiAwOwogCWlmICh0cmVlLT5ub2RlX3NpemUgPj0gUEFHRV9DQUNIRV9TSVpFKSB7Ci0JCW5pZHggPSBwYWdlLT5pbmRleCA+PiAodHJlZS0+bm9kZV9zaXplX3NoaWZ0IC0gUEFHRV9DQUNIRV9TSElGVCk7CisJCW5pZHggPSBwYWdlLT5pbmRleCA+PgorCQkJKHRyZWUtPm5vZGVfc2l6ZV9zaGlmdCAtIFBBR0VfQ0FDSEVfU0hJRlQpOwogCQlzcGluX2xvY2soJnRyZWUtPmhhc2hfbG9jayk7CiAJCW5vZGUgPSBoZnNfYm5vZGVfZmluZGhhc2godHJlZSwgbmlkeCk7CiAJCWlmICghbm9kZSkKQEAgLTkwLDcgKzkyLDggQEAKIAkJfQogCQlzcGluX3VubG9jaygmdHJlZS0+aGFzaF9sb2NrKTsKIAl9IGVsc2UgewotCQluaWR4ID0gcGFnZS0+aW5kZXggPDwgKFBBR0VfQ0FDSEVfU0hJRlQgLSB0cmVlLT5ub2RlX3NpemVfc2hpZnQpOworCQluaWR4ID0gcGFnZS0+aW5kZXggPDwKKwkJCShQQUdFX0NBQ0hFX1NISUZUIC0gdHJlZS0+bm9kZV9zaXplX3NoaWZ0KTsKIAkJaSA9IDEgPDwgKFBBR0VfQ0FDSEVfU0hJRlQgLSB0cmVlLT5ub2RlX3NpemVfc2hpZnQpOwogCQlzcGluX2xvY2soJnRyZWUtPmhhc2hfbG9jayk7CiAJCWRvIHsKQEAgLTE2Niw4ICsxNjksOCBAQAogCS5kX2NvbXBhcmUgICAgPSBoZnNwbHVzX2NvbXBhcmVfZGVudHJ5LAogfTsKIAotc3RhdGljIHN0cnVjdCBkZW50cnkgKmhmc3BsdXNfZmlsZV9sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkJCQkJICBzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpoZnNwbHVzX2ZpbGVfbG9va3VwKHN0cnVjdCBpbm9kZSAqZGlyLAorCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBuYW1laWRhdGEgKm5kKQogewogCXN0cnVjdCBoZnNfZmluZF9kYXRhIGZkOwogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBkaXItPmlfc2I7CkBAIC0xOTAsNyArMTkzLDkgQEAKIAlpbm9kZS0+aV9pbm8gPSBkaXItPmlfaW5vOwogCUlOSVRfTElTVF9IRUFEKCZoaXAtPm9wZW5fZGlyX2xpc3QpOwogCW11dGV4X2luaXQoJmhpcC0+ZXh0ZW50c19sb2NrKTsKLQloaXAtPmZsYWdzID0gSEZTUExVU19GTEdfUlNSQzsKKwloaXAtPmV4dGVudF9zdGF0ZSA9IDA7CisJaGlwLT5mbGFncyA9IDA7CisJc2V0X2JpdChIRlNQTFVTX0lfUlNSQywgJmhpcC0+ZmxhZ3MpOwogCiAJaGZzX2ZpbmRfaW5pdChIRlNQTFVTX1NCKHNiKS0+Y2F0X3RyZWUsICZmZCk7CiAJZXJyID0gaGZzcGx1c19maW5kX2NhdChzYiwgZGlyLT5pX2lubywgJmZkKTsKQEAgLTIxOSw3ICsyMjQsOCBAQAogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgdm9pZCBoZnNwbHVzX2dldF9wZXJtcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaGZzcGx1c19wZXJtICpwZXJtcywgaW50IGRpcikKK3N0YXRpYyB2b2lkIGhmc3BsdXNfZ2V0X3Blcm1zKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCXN0cnVjdCBoZnNwbHVzX3Blcm0gKnBlcm1zLCBpbnQgZGlyKQogewogCXN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0IoaW5vZGUtPmlfc2IpOwogCXUxNiBtb2RlOwpAQCAtMzAyLDI5ICszMDgsNDEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBoZnNwbHVzX2ZpbGVfZnN5bmMoc3RydWN0IGZpbGUgKmZpbHAsIGludCBkYXRhc3luYykKK2ludCBoZnNwbHVzX2ZpbGVfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGludCBkYXRhc3luYykKIHsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9tYXBwaW5nLT5ob3N0OwotCXN0cnVjdCBzdXBlcl9ibG9jayAqIHNiOwotCWludCByZXQsIGVycjsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9tYXBwaW5nLT5ob3N0OworCXN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm8gKmhpcCA9IEhGU1BMVVNfSShpbm9kZSk7CisJc3RydWN0IGhmc3BsdXNfc2JfaW5mbyAqc2JpID0gSEZTUExVU19TQihpbm9kZS0+aV9zYik7CisJaW50IGVycm9yID0gMCwgZXJyb3IyOwogCi0JLyogc3luYyB0aGUgaW5vZGUgdG8gYnVmZmVycyAqLwotCXJldCA9IHdyaXRlX2lub2RlX25vdyhpbm9kZSwgMCk7CisJLyoKKwkgKiBTeW5jIGlub2RlIG1ldGFkYXRhIGludG8gdGhlIGNhdGFsb2cgYW5kIGV4dGVudCB0cmVlcy4KKwkgKi8KKwlzeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCAxKTsKIAotCS8qIHN5bmMgdGhlIHN1cGVyYmxvY2sgdG8gYnVmZmVycyAqLwotCXNiID0gaW5vZGUtPmlfc2I7Ci0JaWYgKHNiLT5zX2RpcnQpIHsKLQkJaWYgKCEoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpKQotCQkJaGZzcGx1c19zeW5jX2ZzKHNiLCAxKTsKLQkJZWxzZQotCQkJc2ItPnNfZGlydCA9IDA7CisJLyoKKwkgKiBBbmQgZXhwbGljaXRseSB3cml0ZSBvdXQgdGhlIGJ0cmVlcy4KKwkgKi8KKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9DQVRfRElSVFksICZoaXAtPmZsYWdzKSkKKwkJZXJyb3IgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0KHNiaS0+Y2F0X3RyZWUtPmlub2RlLT5pX21hcHBpbmcpOworCisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIRlNQTFVTX0lfRVhUX0RJUlRZLCAmaGlwLT5mbGFncykpIHsKKwkJZXJyb3IyID0KKwkJCWZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoc2JpLT5leHRfdHJlZS0+aW5vZGUtPmlfbWFwcGluZyk7CisJCWlmICghZXJyb3IpCisJCQllcnJvciA9IGVycm9yMjsKIAl9CiAKLQkvKiAuLiBmaW5hbGx5IHN5bmMgdGhlIGJ1ZmZlcnMgdG8gZGlzayAqLwotCWVyciA9IHN5bmNfYmxvY2tkZXYoc2ItPnNfYmRldik7Ci0JaWYgKCFyZXQpCi0JCXJldCA9IGVycjsKLQlyZXR1cm4gcmV0OworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSEZTUExVU19JX0FMTE9DX0RJUlRZLCAmaGlwLT5mbGFncykpIHsKKwkJZXJyb3IyID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdChzYmktPmFsbG9jX2ZpbGUtPmlfbWFwcGluZyk7CisJCWlmICghZXJyb3IpCisJCQllcnJvciA9IGVycm9yMjsKKwl9CisKKwlpZiAoIXRlc3RfYml0KEhGU1BMVVNfU0JfTk9CQVJSSUVSLCAmc2JpLT5mbGFncykpCisJCWJsa2Rldl9pc3N1ZV9mbHVzaChpbm9kZS0+aV9zYi0+c19iZGV2LCBHRlBfS0VSTkVMLCBOVUxMKTsKKworCXJldHVybiBlcnJvcjsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGhmc3BsdXNfZmlsZV9pbm9kZV9vcGVyYXRpb25zID0gewpAQCAtMzM3LDcgKzM1NSw3IEBACiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBoZnNwbHVzX2ZpbGVfb3BlcmF0aW9ucyA9IHsKLQkubGxzZWVrIAk9IGdlbmVyaWNfZmlsZV9sbHNlZWssCisJLmxsc2VlawkJPSBnZW5lcmljX2ZpbGVfbGxzZWVrLAogCS5yZWFkCQk9IGRvX3N5bmNfcmVhZCwKIAkuYWlvX3JlYWQJPSBnZW5lcmljX2ZpbGVfYWlvX3JlYWQsCiAJLndyaXRlCQk9IGRvX3N5bmNfd3JpdGUsCkBAIC0zNzAsNiArMzg4LDcgQEAKIAlJTklUX0xJU1RfSEVBRCgmaGlwLT5vcGVuX2Rpcl9saXN0KTsKIAltdXRleF9pbml0KCZoaXAtPmV4dGVudHNfbG9jayk7CiAJYXRvbWljX3NldCgmaGlwLT5vcGVuY250LCAwKTsKKwloaXAtPmV4dGVudF9zdGF0ZSA9IDA7CiAJaGlwLT5mbGFncyA9IDA7CiAJbWVtc2V0KGhpcC0+Zmlyc3RfZXh0ZW50cywgMCwgc2l6ZW9mKGhmc3BsdXNfZXh0ZW50X3JlYykpOwogCW1lbXNldChoaXAtPmNhY2hlZF9leHRlbnRzLCAwLCBzaXplb2YoaGZzcGx1c19leHRlbnRfcmVjKSk7CkBAIC00NTcsNyArNDc2LDggQEAKIAl9CiB9CiAKLXZvaWQgaGZzcGx1c19pbm9kZV93cml0ZV9mb3JrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBoZnNwbHVzX2ZvcmtfcmF3ICpmb3JrKQordm9pZCBoZnNwbHVzX2lub2RlX3dyaXRlX2Zvcmsoc3RydWN0IGlub2RlICppbm9kZSwKKwkJc3RydWN0IGhmc3BsdXNfZm9ya19yYXcgKmZvcmspCiB7CiAJbWVtY3B5KCZmb3JrLT5leHRlbnRzLCAmSEZTUExVU19JKGlub2RlKS0+Zmlyc3RfZXh0ZW50cywKIAkgICAgICAgc2l6ZW9mKGhmc3BsdXNfZXh0ZW50X3JlYykpOwpAQCAtNDk5LDEzICs1MTksMTQgQEAKIAkJaGZzX2Jub2RlX3JlYWQoZmQtPmJub2RlLCAmZW50cnksIGZkLT5lbnRyeW9mZnNldCwKIAkJCQkJc2l6ZW9mKHN0cnVjdCBoZnNwbHVzX2NhdF9maWxlKSk7CiAKLQkJaGZzcGx1c19pbm9kZV9yZWFkX2ZvcmsoaW5vZGUsIEhGU1BMVVNfSVNfREFUQShpbm9kZSkgPwotCQkJCQkmZmlsZS0+ZGF0YV9mb3JrIDogJmZpbGUtPnJzcmNfZm9yayk7CisJCWhmc3BsdXNfaW5vZGVfcmVhZF9mb3JrKGlub2RlLCBIRlNQTFVTX0lTX1JTUkMoaW5vZGUpID8KKwkJCQkJJmZpbGUtPnJzcmNfZm9yayA6ICZmaWxlLT5kYXRhX2ZvcmspOwogCQloZnNwbHVzX2dldF9wZXJtcyhpbm9kZSwgJmZpbGUtPnBlcm1pc3Npb25zLCAwKTsKIAkJaW5vZGUtPmlfbmxpbmsgPSAxOwogCQlpZiAoU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkgewogCQkJaWYgKGZpbGUtPnBlcm1pc3Npb25zLmRldikKLQkJCQlpbm9kZS0+aV9ubGluayA9IGJlMzJfdG9fY3B1KGZpbGUtPnBlcm1pc3Npb25zLmRldik7CisJCQkJaW5vZGUtPmlfbmxpbmsgPQorCQkJCQliZTMyX3RvX2NwdShmaWxlLT5wZXJtaXNzaW9ucy5kZXYpOwogCQkJaW5vZGUtPmlfb3AgPSAmaGZzcGx1c19maWxlX2lub2RlX29wZXJhdGlvbnM7CiAJCQlpbm9kZS0+aV9mb3AgPSAmaGZzcGx1c19maWxlX29wZXJhdGlvbnM7CiAJCQlpbm9kZS0+aV9tYXBwaW5nLT5hX29wcyA9ICZoZnNwbHVzX2FvcHM7CkBAIC01NzgsNyArNTk5LDkgQEAKIAkJCQkJc2l6ZW9mKHN0cnVjdCBoZnNwbHVzX2NhdF9maWxlKSk7CiAJCWhmc3BsdXNfaW5vZGVfd3JpdGVfZm9yayhpbm9kZSwgJmZpbGUtPmRhdGFfZm9yayk7CiAJCWhmc3BsdXNfY2F0X3NldF9wZXJtcyhpbm9kZSwgJmZpbGUtPnBlcm1pc3Npb25zKTsKLQkJaWYgKChmaWxlLT5wZXJtaXNzaW9ucy5yb290ZmxhZ3MgfCBmaWxlLT5wZXJtaXNzaW9ucy51c2VyZmxhZ3MpICYgSEZTUExVU19GTEdfSU1NVVRBQkxFKQorCQlpZiAoSEZTUExVU19GTEdfSU1NVVRBQkxFICYKKwkJCQkoZmlsZS0+cGVybWlzc2lvbnMucm9vdGZsYWdzIHwKKwkJCQkJZmlsZS0+cGVybWlzc2lvbnMudXNlcmZsYWdzKSkKIAkJCWZpbGUtPmZsYWdzIHw9IGNwdV90b19iZTE2KEhGU1BMVVNfRklMRV9MT0NLRUQpOwogCQllbHNlCiAJCQlmaWxlLT5mbGFncyAmPSBjcHVfdG9fYmUxNih+SEZTUExVU19GSUxFX0xPQ0tFRCk7CkBAIC01ODgsNiArNjExLDggQEAKIAkJaGZzX2Jub2RlX3dyaXRlKGZkLmJub2RlLCAmZW50cnksIGZkLmVudHJ5b2Zmc2V0LAogCQkJCQkgc2l6ZW9mKHN0cnVjdCBoZnNwbHVzX2NhdF9maWxlKSk7CiAJfQorCisJc2V0X2JpdChIRlNQTFVTX0lfQ0FUX0RJUlRZLCAmSEZTUExVU19JKGlub2RlKS0+ZmxhZ3MpOwogb3V0OgogCWhmc19maW5kX2V4aXQoJmZkKTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvaW9jdGwuYyBiL2ZzL2hmc3BsdXMvaW9jdGwuYwppbmRleCA0MGE4NWEzZC4uNTA4Y2U2NiAxMDA2NDQKLS0tIGEvZnMvaGZzcGx1cy9pb2N0bC5jCisrKyBiL2ZzL2hmc3BsdXMvaW9jdGwuYwpAQCAtMjgsNyArMjgsNyBAQAogCiAJaWYgKGlub2RlLT5pX2ZsYWdzICYgU19JTU1VVEFCTEUpCiAJCWZsYWdzIHw9IEZTX0lNTVVUQUJMRV9GTDsKLQlpZiAoaW5vZGUtPmlfZmxhZ3MgfD0gU19BUFBFTkQpCisJaWYgKGlub2RlLT5pX2ZsYWdzICYgU19BUFBFTkQpCiAJCWZsYWdzIHw9IEZTX0FQUEVORF9GTDsKIAlpZiAoaGlwLT51c2VyZmxhZ3MgJiBIRlNQTFVTX0ZMR19OT0RVTVApCiAJCWZsYWdzIHw9IEZTX05PRFVNUF9GTDsKQEAgLTE0Nyw5ICsxNDcsMTEgQEAKIAkJCXJlcyA9IC1FUkFOR0U7CiAJfSBlbHNlCiAJCXJlcyA9IC1FT1BOT1RTVVBQOwotCWlmICghcmVzKQorCWlmICghcmVzKSB7CiAJCWhmc19ibm9kZV93cml0ZShmZC5ibm9kZSwgJmVudHJ5LCBmZC5lbnRyeW9mZnNldCwKIAkJCQlzaXplb2Yoc3RydWN0IGhmc3BsdXNfY2F0X2ZpbGUpKTsKKwkJaGZzcGx1c19tYXJrX2lub2RlX2RpcnR5KGlub2RlLCBIRlNQTFVTX0lfQ0FUX0RJUlRZKTsKKwl9CiBvdXQ6CiAJaGZzX2ZpbmRfZXhpdCgmZmQpOwogCXJldHVybiByZXM7CmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL29wdGlvbnMuYyBiL2ZzL2hmc3BsdXMvb3B0aW9ucy5jCmluZGV4IGY5YWIyNzYuLmJiNjJhNTg4MiAxMDA2NDQKLS0tIGEvZnMvaGZzcGx1cy9vcHRpb25zLmMKKysrIGIvZnMvaGZzcGx1cy9vcHRpb25zLmMKQEAgLTIzLDYgKzIzLDcgQEAKIAlvcHRfdW1hc2ssIG9wdF91aWQsIG9wdF9naWQsCiAJb3B0X3BhcnQsIG9wdF9zZXNzaW9uLCBvcHRfbmxzLAogCW9wdF9ub2RlY29tcG9zZSwgb3B0X2RlY29tcG9zZSwKKwlvcHRfYmFycmllciwgb3B0X25vYmFycmllciwKIAlvcHRfZm9yY2UsIG9wdF9lcnIKIH07CiAKQEAgLTM3LDYgKzM4LDggQEAKIAl7IG9wdF9ubHMsICJubHM9JXMiIH0sCiAJeyBvcHRfZGVjb21wb3NlLCAiZGVjb21wb3NlIiB9LAogCXsgb3B0X25vZGVjb21wb3NlLCAibm9kZWNvbXBvc2UiIH0sCisJeyBvcHRfYmFycmllciwgImJhcnJpZXIiIH0sCisJeyBvcHRfbm9iYXJyaWVyLCAibm9iYXJyaWVyIiB9LAogCXsgb3B0X2ZvcmNlLCAiZm9yY2UiIH0sCiAJeyBvcHRfZXJyLCBOVUxMIH0KIH07CkBAIC02NSw2ICs2OCwzMiBAQAogCXJldHVybiAwOwogfQogCitpbnQgaGZzcGx1c19wYXJzZV9vcHRpb25zX3JlbW91bnQoY2hhciAqaW5wdXQsIGludCAqZm9yY2UpCit7CisJY2hhciAqcDsKKwlzdWJzdHJpbmdfdCBhcmdzW01BWF9PUFRfQVJHU107CisJaW50IHRva2VuOworCisJaWYgKCFpbnB1dCkKKwkJcmV0dXJuIDA7CisKKwl3aGlsZSAoKHAgPSBzdHJzZXAoJmlucHV0LCAiLCIpKSAhPSBOVUxMKSB7CisJCWlmICghKnApCisJCQljb250aW51ZTsKKworCQl0b2tlbiA9IG1hdGNoX3Rva2VuKHAsIHRva2VucywgYXJncyk7CisJCXN3aXRjaCAodG9rZW4pIHsKKwkJY2FzZSBvcHRfZm9yY2U6CisJCQkqZm9yY2UgPSAxOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiAxOworfQorCiAvKiBQYXJzZSBvcHRpb25zIGZyb20gbW91bnQuIFJldHVybnMgMCBvbiBmYWlsdXJlICovCiAvKiBpbnB1dCBpcyB0aGUgb3B0aW9ucyBwYXNzZWQgdG8gbW91bnQoKSBhcyBhIHN0cmluZyAqLwogaW50IGhmc3BsdXNfcGFyc2Vfb3B0aW9ucyhjaGFyICppbnB1dCwgc3RydWN0IGhmc3BsdXNfc2JfaW5mbyAqc2JpKQpAQCAtMTM2LDcgKzE2NSw5IEBACiAJCQlpZiAocCkKIAkJCQlzYmktPm5scyA9IGxvYWRfbmxzKHApOwogCQkJaWYgKCFzYmktPm5scykgewotCQkJCXByaW50ayhLRVJOX0VSUiAiaGZzOiB1bmFibGUgdG8gbG9hZCBubHMgbWFwcGluZyBcIiVzXCJcbiIsIHApOworCQkJCXByaW50ayhLRVJOX0VSUiAiaGZzOiB1bmFibGUgdG8gbG9hZCAiCisJCQkJCQkibmxzIG1hcHBpbmcgXCIlc1wiXG4iLAorCQkJCQlwKTsKIAkJCQlrZnJlZShwKTsKIAkJCQlyZXR1cm4gMDsKIAkJCX0KQEAgLTE0OCw2ICsxNzksMTIgQEAKIAkJY2FzZSBvcHRfbm9kZWNvbXBvc2U6CiAJCQlzZXRfYml0KEhGU1BMVVNfU0JfTk9ERUNPTVBPU0UsICZzYmktPmZsYWdzKTsKIAkJCWJyZWFrOworCQljYXNlIG9wdF9iYXJyaWVyOgorCQkJY2xlYXJfYml0KEhGU1BMVVNfU0JfTk9CQVJSSUVSLCAmc2JpLT5mbGFncyk7CisJCQlicmVhazsKKwkJY2FzZSBvcHRfbm9iYXJyaWVyOgorCQkJc2V0X2JpdChIRlNQTFVTX1NCX05PQkFSUklFUiwgJnNiaS0+ZmxhZ3MpOworCQkJYnJlYWs7CiAJCWNhc2Ugb3B0X2ZvcmNlOgogCQkJc2V0X2JpdChIRlNQTFVTX1NCX0ZPUkNFLCAmc2JpLT5mbGFncyk7CiAJCQlicmVhazsKQEAgLTE3Nyw3ICsyMTQsOCBAQAogCQlzZXFfcHJpbnRmKHNlcSwgIixjcmVhdG9yPSUuNHMiLCAoY2hhciAqKSZzYmktPmNyZWF0b3IpOwogCWlmIChzYmktPnR5cGUgIT0gSEZTUExVU19ERUZfQ1JfVFlQRSkKIAkJc2VxX3ByaW50ZihzZXEsICIsdHlwZT0lLjRzIiwgKGNoYXIgKikmc2JpLT50eXBlKTsKLQlzZXFfcHJpbnRmKHNlcSwgIix1bWFzaz0lbyx1aWQ9JXUsZ2lkPSV1Iiwgc2JpLT51bWFzaywgc2JpLT51aWQsIHNiaS0+Z2lkKTsKKwlzZXFfcHJpbnRmKHNlcSwgIix1bWFzaz0lbyx1aWQ9JXUsZ2lkPSV1Iiwgc2JpLT51bWFzaywKKwkJc2JpLT51aWQsIHNiaS0+Z2lkKTsKIAlpZiAoc2JpLT5wYXJ0ID49IDApCiAJCXNlcV9wcmludGYoc2VxLCAiLHBhcnQ9JXUiLCBzYmktPnBhcnQpOwogCWlmIChzYmktPnNlc3Npb24gPj0gMCkKQEAgLTE4Niw1ICsyMjQsNyBAQAogCQlzZXFfcHJpbnRmKHNlcSwgIixubHM9JXMiLCBzYmktPm5scy0+Y2hhcnNldCk7CiAJaWYgKHRlc3RfYml0KEhGU1BMVVNfU0JfTk9ERUNPTVBPU0UsICZzYmktPmZsYWdzKSkKIAkJc2VxX3ByaW50ZihzZXEsICIsbm9kZWNvbXBvc2UiKTsKKwlpZiAodGVzdF9iaXQoSEZTUExVU19TQl9OT0JBUlJJRVIsICZzYmktPmZsYWdzKSkKKwkJc2VxX3ByaW50ZihzZXEsICIsbm9iYXJyaWVyIik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL3BhcnRfdGJsLmMgYi9mcy9oZnNwbHVzL3BhcnRfdGJsLmMKaW5kZXggMjA4YjE2Yy4uZDY2YWQxMSAxMDA2NDQKLS0tIGEvZnMvaGZzcGx1cy9wYXJ0X3RibC5jCisrKyBiL2ZzL2hmc3BsdXMvcGFydF90YmwuYwpAQCAtMiw3ICsyLDggQEAKICAqIGxpbnV4L2ZzL2hmc3BsdXMvcGFydF90YmwuYwogICoKICAqIENvcHlyaWdodCAoQykgMTk5Ni0xOTk3ICBQYXVsIEguIEhhcmdyb3ZlCi0gKiBUaGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisgKiBUaGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZgorICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgogICoKICAqIE9yaWdpbmFsIGNvZGUgdG8gaGFuZGxlIHRoZSBuZXcgc3R5bGUgTWFjIHBhcnRpdGlvbiB0YWJsZSBiYXNlZCBvbgogICogYSBwYXRjaCBjb250cmlidXRlZCBieSBIb2xnZXIgU2NoZW1lbCAoYWVnbG9zQHZhbGlub3Iub3dsLmRlKS4KQEAgLTEzLDYgKzE0LDcgQEAKICAqCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlICJoZnNwbHVzX2ZzLmgiCiAKIC8qIG9mZnNldHMgdG8gdmFyaW91cyBibG9ja3MgKi8KQEAgLTU4LDc3ICs2MCw5NCBAQAogICovCiBzdHJ1Y3Qgb2xkX3BtYXAgewogCV9fYmUxNgkJcGRTaWc7CS8qIFNpZ25hdHVyZSBieXRlcyAqLwotCXN0cnVjdCAJb2xkX3BtYXBfZW50cnkgeworCXN0cnVjdCBvbGRfcG1hcF9lbnRyeSB7CiAJCV9fYmUzMglwZFN0YXJ0OwogCQlfX2JlMzIJcGRTaXplOwogCQlfX2JlMzIJcGRGU0lEOwogCX0JcGRFbnRyeVs0Ml07CiB9IF9fcGFja2VkOwogCi0vKgotICogaGZzX3BhcnRfZmluZCgpCi0gKgotICogUGFyc2UgdGhlIHBhcnRpdGlvbiBtYXAgbG9va2luZyBmb3IgdGhlCi0gKiBzdGFydCBhbmQgbGVuZ3RoIG9mIHRoZSAncGFydCd0aCBIRlMgcGFydGl0aW9uLgotICovCi1pbnQgaGZzX3BhcnRfZmluZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAotCQkgIHNlY3Rvcl90ICpwYXJ0X3N0YXJ0LCBzZWN0b3JfdCAqcGFydF9zaXplKQorc3RhdGljIGludCBoZnNfcGFyc2Vfb2xkX3BtYXAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IG9sZF9wbWFwICpwbSwKKwkJc2VjdG9yX3QgKnBhcnRfc3RhcnQsIHNlY3Rvcl90ICpwYXJ0X3NpemUpCiB7CiAJc3RydWN0IGhmc3BsdXNfc2JfaW5mbyAqc2JpID0gSEZTUExVU19TQihzYik7Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKLQlfX2JlMTYgKmRhdGE7Ci0JaW50IGksIHNpemUsIHJlczsKKwlpbnQgaTsKIAotCXJlcyA9IC1FTk9FTlQ7Ci0JYmggPSBzYl9icmVhZDUxMihzYiwgKnBhcnRfc3RhcnQgKyBIRlNfUE1BUF9CTEssIGRhdGEpOwotCWlmICghYmgpCi0JCXJldHVybiAtRUlPOworCWZvciAoaSA9IDA7IGkgPCA0MjsgaSsrKSB7CisJCXN0cnVjdCBvbGRfcG1hcF9lbnRyeSAqcCA9ICZwbS0+cGRFbnRyeVtpXTsKIAotCXN3aXRjaCAoYmUxNl90b19jcHUoKmRhdGEpKSB7Ci0JY2FzZSBIRlNfT0xEX1BNQVBfTUFHSUM6Ci0JICB7Ci0JCXN0cnVjdCBvbGRfcG1hcCAqcG07Ci0JCXN0cnVjdCBvbGRfcG1hcF9lbnRyeSAqcDsKLQotCQlwbSA9IChzdHJ1Y3Qgb2xkX3BtYXAgKiliaC0+Yl9kYXRhOwotCQlwID0gcG0tPnBkRW50cnk7Ci0JCXNpemUgPSA0MjsKLQkJZm9yIChpID0gMDsgaSA8IHNpemU7IHArKywgaSsrKSB7Ci0JCQlpZiAocC0+cGRTdGFydCAmJiBwLT5wZFNpemUgJiYKLQkJCSAgICBwLT5wZEZTSUQgPT0gY3B1X3RvX2JlMzIoMHg1NDQ2NTMzMSkvKiJURlMxIiovICYmCi0JCQkgICAgKHNiaS0+cGFydCA8IDAgfHwgc2JpLT5wYXJ0ID09IGkpKSB7Ci0JCQkJKnBhcnRfc3RhcnQgKz0gYmUzMl90b19jcHUocC0+cGRTdGFydCk7Ci0JCQkJKnBhcnRfc2l6ZSA9IGJlMzJfdG9fY3B1KHAtPnBkU2l6ZSk7Ci0JCQkJcmVzID0gMDsKLQkJCX0KKwkJaWYgKHAtPnBkU3RhcnQgJiYgcC0+cGRTaXplICYmCisJCSAgICBwLT5wZEZTSUQgPT0gY3B1X3RvX2JlMzIoMHg1NDQ2NTMzMSkvKiJURlMxIiovICYmCisJCSAgICAoc2JpLT5wYXJ0IDwgMCB8fCBzYmktPnBhcnQgPT0gaSkpIHsKKwkJCSpwYXJ0X3N0YXJ0ICs9IGJlMzJfdG9fY3B1KHAtPnBkU3RhcnQpOworCQkJKnBhcnRfc2l6ZSA9IGJlMzJfdG9fY3B1KHAtPnBkU2l6ZSk7CisJCQlyZXR1cm4gMDsKIAkJfQotCQlicmVhazsKLQkgIH0KLQljYXNlIEhGU19ORVdfUE1BUF9NQUdJQzoKLQkgIHsKLQkJc3RydWN0IG5ld19wbWFwICpwbTsKLQotCQlwbSA9IChzdHJ1Y3QgbmV3X3BtYXAgKiliaC0+Yl9kYXRhOwotCQlzaXplID0gYmUzMl90b19jcHUocG0tPnBtTWFwQmxrQ250KTsKLQkJZm9yIChpID0gMDsgaSA8IHNpemU7KSB7Ci0JCQlpZiAoIW1lbWNtcChwbS0+cG1QYXJ0VHlwZSwiQXBwbGVfSEZTIiwgOSkgJiYKLQkJCSAgICAoc2JpLT5wYXJ0IDwgMCB8fCBzYmktPnBhcnQgPT0gaSkpIHsKLQkJCQkqcGFydF9zdGFydCArPSBiZTMyX3RvX2NwdShwbS0+cG1QeVBhcnRTdGFydCk7Ci0JCQkJKnBhcnRfc2l6ZSA9IGJlMzJfdG9fY3B1KHBtLT5wbVBhcnRCbGtDbnQpOwotCQkJCXJlcyA9IDA7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlicmVsc2UoYmgpOwotCQkJYmggPSBzYl9icmVhZDUxMihzYiwgKnBhcnRfc3RhcnQgKyBIRlNfUE1BUF9CTEsgKyArK2ksIHBtKTsKLQkJCWlmICghYmgpCi0JCQkJcmV0dXJuIC1FSU87Ci0JCQlpZiAocG0tPnBtU2lnICE9IGNwdV90b19iZTE2KEhGU19ORVdfUE1BUF9NQUdJQykpCi0JCQkJYnJlYWs7Ci0JCX0KLQkJYnJlYWs7Ci0JICB9CiAJfQotCWJyZWxzZShiaCk7CiAKKwlyZXR1cm4gLUVOT0VOVDsKK30KKworc3RhdGljIGludCBoZnNfcGFyc2VfbmV3X3BtYXAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IG5ld19wbWFwICpwbSwKKwkJc2VjdG9yX3QgKnBhcnRfc3RhcnQsIHNlY3Rvcl90ICpwYXJ0X3NpemUpCit7CisJc3RydWN0IGhmc3BsdXNfc2JfaW5mbyAqc2JpID0gSEZTUExVU19TQihzYik7CisJaW50IHNpemUgPSBiZTMyX3RvX2NwdShwbS0+cG1NYXBCbGtDbnQpOworCWludCByZXM7CisJaW50IGkgPSAwOworCisJZG8geworCQlpZiAoIW1lbWNtcChwbS0+cG1QYXJ0VHlwZSwgIkFwcGxlX0hGUyIsIDkpICYmCisJCSAgICAoc2JpLT5wYXJ0IDwgMCB8fCBzYmktPnBhcnQgPT0gaSkpIHsKKwkJCSpwYXJ0X3N0YXJ0ICs9IGJlMzJfdG9fY3B1KHBtLT5wbVB5UGFydFN0YXJ0KTsKKwkJCSpwYXJ0X3NpemUgPSBiZTMyX3RvX2NwdShwbS0+cG1QYXJ0QmxrQ250KTsKKwkJCXJldHVybiAwOworCQl9CisKKwkJaWYgKCsraSA+PSBzaXplKQorCQkJcmV0dXJuIC1FTk9FTlQ7CisKKwkJcmVzID0gaGZzcGx1c19zdWJtaXRfYmlvKHNiLT5zX2JkZXYsCisJCQkJCSAqcGFydF9zdGFydCArIEhGU19QTUFQX0JMSyArIGksCisJCQkJCSBwbSwgUkVBRCk7CisJCWlmIChyZXMpCisJCQlyZXR1cm4gcmVzOworCX0gd2hpbGUgKHBtLT5wbVNpZyA9PSBjcHVfdG9fYmUxNihIRlNfTkVXX1BNQVBfTUFHSUMpKTsKKworCXJldHVybiAtRU5PRU5UOworfQorCisvKgorICogUGFyc2UgdGhlIHBhcnRpdGlvbiBtYXAgbG9va2luZyBmb3IgdGhlIHN0YXJ0IGFuZCBsZW5ndGggb2YgYQorICogSEZTL0hGUysgcGFydGl0aW9uLgorICovCitpbnQgaGZzX3BhcnRfZmluZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQlzZWN0b3JfdCAqcGFydF9zdGFydCwgc2VjdG9yX3QgKnBhcnRfc2l6ZSkKK3sKKwl2b2lkICpkYXRhOworCWludCByZXM7CisKKwlkYXRhID0ga21hbGxvYyhIRlNQTFVTX1NFQ1RPUl9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRhdGEpCisJCXJldHVybiAtRU5PTUVNOworCisJcmVzID0gaGZzcGx1c19zdWJtaXRfYmlvKHNiLT5zX2JkZXYsICpwYXJ0X3N0YXJ0ICsgSEZTX1BNQVBfQkxLLAorCQkJCSBkYXRhLCBSRUFEKTsKKwlpZiAocmVzKQorCQlyZXR1cm4gcmVzOworCisJc3dpdGNoIChiZTE2X3RvX2NwdSgqKChfX2JlMTYgKilkYXRhKSkpIHsKKwljYXNlIEhGU19PTERfUE1BUF9NQUdJQzoKKwkJcmVzID0gaGZzX3BhcnNlX29sZF9wbWFwKHNiLCBkYXRhLCBwYXJ0X3N0YXJ0LCBwYXJ0X3NpemUpOworCQlicmVhazsKKwljYXNlIEhGU19ORVdfUE1BUF9NQUdJQzoKKwkJcmVzID0gaGZzX3BhcnNlX25ld19wbWFwKHNiLCBkYXRhLCBwYXJ0X3N0YXJ0LCBwYXJ0X3NpemUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXMgPSAtRU5PRU5UOworCQlicmVhazsKKwl9CisKKwlrZnJlZShkYXRhKTsKIAlyZXR1cm4gcmVzOwogfQpkaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9zdXBlci5jIGIvZnMvaGZzcGx1cy9zdXBlci5jCmluZGV4IDUyY2M3NDYuLjZlZTZhZDIgMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvc3VwZXIuYworKysgYi9mcy9oZnNwbHVzL3N1cGVyLmMKQEAgLTEwLDYgKzEwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgorI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3Zmcy5oPgpAQCAtNjYsNiArNjcsNyBAQAogCUlOSVRfTElTVF9IRUFEKCZIRlNQTFVTX0koaW5vZGUpLT5vcGVuX2Rpcl9saXN0KTsKIAltdXRleF9pbml0KCZIRlNQTFVTX0koaW5vZGUpLT5leHRlbnRzX2xvY2spOwogCUhGU1BMVVNfSShpbm9kZSktPmZsYWdzID0gMDsKKwlIRlNQTFVTX0koaW5vZGUpLT5leHRlbnRfc3RhdGUgPSAwOwogCUhGU1BMVVNfSShpbm9kZSktPnJzcmNfaW5vZGUgPSBOVUxMOwogCWF0b21pY19zZXQoJkhGU1BMVVNfSShpbm9kZSktPm9wZW5jbnQsIDApOwogCkBAIC0xNTcsNDUgKzE1OSw2NSBAQAogewogCXN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0Ioc2IpOwogCXN0cnVjdCBoZnNwbHVzX3ZoICp2aGRyID0gc2JpLT5zX3ZoZHI7CisJaW50IHdyaXRlX2JhY2t1cCA9IDA7CisJaW50IGVycm9yLCBlcnJvcjI7CisKKwlpZiAoIXdhaXQpCisJCXJldHVybiAwOwogCiAJZHByaW50KERCR19TVVBFUiwgImhmc3BsdXNfd3JpdGVfc3VwZXJcbiIpOwogCi0JbXV0ZXhfbG9jaygmc2JpLT52aF9tdXRleCk7Ci0JbXV0ZXhfbG9jaygmc2JpLT5hbGxvY19tdXRleCk7CiAJc2ItPnNfZGlydCA9IDA7CiAKKwkvKgorCSAqIEV4cGxpY2l0bHkgd3JpdGUgb3V0IHRoZSBzcGVjaWFsIG1ldGFkYXRhIGlub2Rlcy4KKwkgKgorCSAqIFdoaWxlIHRoZXNlIHNwZWNpYWwgaW5vZGVzIGFyZSBtYXJrZWQgYXMgaGFzaGVkIGFuZCB3cml0dGVuCisJICogb3V0IHBlcmlkb2NpY2FsbHkgYnkgdGhlIGZsdXNoZXIgdGhyZWFkcyB3ZSByZWRpcnR5IHRoZW0KKwkgKiBkdXJpbmcgd3JpdGVvdXQgb2Ygbm9ybWFsIGlub2RlcywgYW5kIHRodXMgdGhlIGxpZmUgbG9jaworCSAqIHByZXZlbnRzIHVzIGZyb20gZ2V0dGluZyB0aGUgbGF0ZXN0IHN0YXRlIHRvIGRpc2suCisJICovCisJZXJyb3IgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0KHNiaS0+Y2F0X3RyZWUtPmlub2RlLT5pX21hcHBpbmcpOworCWVycm9yMiA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoc2JpLT5leHRfdHJlZS0+aW5vZGUtPmlfbWFwcGluZyk7CisJaWYgKCFlcnJvcikKKwkJZXJyb3IgPSBlcnJvcjI7CisJZXJyb3IyID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdChzYmktPmFsbG9jX2ZpbGUtPmlfbWFwcGluZyk7CisJaWYgKCFlcnJvcikKKwkJZXJyb3IgPSBlcnJvcjI7CisKKwltdXRleF9sb2NrKCZzYmktPnZoX211dGV4KTsKKwltdXRleF9sb2NrKCZzYmktPmFsbG9jX211dGV4KTsKIAl2aGRyLT5mcmVlX2Jsb2NrcyA9IGNwdV90b19iZTMyKHNiaS0+ZnJlZV9ibG9ja3MpOwogCXZoZHItPm5leHRfY25pZCA9IGNwdV90b19iZTMyKHNiaS0+bmV4dF9jbmlkKTsKIAl2aGRyLT5mb2xkZXJfY291bnQgPSBjcHVfdG9fYmUzMihzYmktPmZvbGRlcl9jb3VudCk7CiAJdmhkci0+ZmlsZV9jb3VudCA9IGNwdV90b19iZTMyKHNiaS0+ZmlsZV9jb3VudCk7CiAKLQltYXJrX2J1ZmZlcl9kaXJ0eShzYmktPnNfdmhiaCk7CiAJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIRlNQTFVTX1NCX1dSSVRFQkFDS1VQLCAmc2JpLT5mbGFncykpIHsKLQkJaWYgKHNiaS0+c2VjdF9jb3VudCkgewotCQkJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKLQkJCXUzMiBibG9jaywgb2Zmc2V0OwotCi0JCQlibG9jayA9IHNiaS0+YmxvY2tvZmZzZXQ7Ci0JCQlibG9jayArPSAoc2JpLT5zZWN0X2NvdW50IC0gMikgPj4gKHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzIC0gOSk7Ci0JCQlvZmZzZXQgPSAoKHNiaS0+c2VjdF9jb3VudCAtIDIpIDw8IDkpICYgKHNiLT5zX2Jsb2Nrc2l6ZSAtIDEpOwotCQkJcHJpbnRrKEtFUk5fREVCVUcgImhmczogYmFja3VwOiAldSwldSwldSwldVxuIiwKLQkJCQkJICBzYmktPmJsb2Nrb2Zmc2V0LCBzYmktPnNlY3RfY291bnQsCi0JCQkJCSAgYmxvY2ssIG9mZnNldCk7Ci0JCQliaCA9IHNiX2JyZWFkKHNiLCBibG9jayk7Ci0JCQlpZiAoYmgpIHsKLQkJCQl2aGRyID0gKHN0cnVjdCBoZnNwbHVzX3ZoICopKGJoLT5iX2RhdGEgKyBvZmZzZXQpOwotCQkJCWlmIChiZTE2X3RvX2NwdSh2aGRyLT5zaWduYXR1cmUpID09IEhGU1BMVVNfVk9MSEVBRF9TSUcpIHsKLQkJCQkJbWVtY3B5KHZoZHIsIHNiaS0+c192aGRyLCBzaXplb2YoKnZoZHIpKTsKLQkJCQkJbWFya19idWZmZXJfZGlydHkoYmgpOwotCQkJCQlicmVsc2UoYmgpOwotCQkJCX0gZWxzZQotCQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJoZnM6IGJhY2t1cCBub3QgZm91bmQhXG4iKTsKLQkJCX0KLQkJfQorCQltZW1jcHkoc2JpLT5zX2JhY2t1cF92aGRyLCBzYmktPnNfdmhkciwgc2l6ZW9mKCpzYmktPnNfdmhkcikpOworCQl3cml0ZV9iYWNrdXAgPSAxOwogCX0KKworCWVycm9yMiA9IGhmc3BsdXNfc3VibWl0X2JpbyhzYi0+c19iZGV2LAorCQkJCSAgIHNiaS0+cGFydF9zdGFydCArIEhGU1BMVVNfVk9MSEVBRF9TRUNUT1IsCisJCQkJICAgc2JpLT5zX3ZoZHIsIFdSSVRFX1NZTkMpOworCWlmICghZXJyb3IpCisJCWVycm9yID0gZXJyb3IyOworCWlmICghd3JpdGVfYmFja3VwKQorCQlnb3RvIG91dDsKKworCWVycm9yMiA9IGhmc3BsdXNfc3VibWl0X2JpbyhzYi0+c19iZGV2LAorCQkJCSAgc2JpLT5wYXJ0X3N0YXJ0ICsgc2JpLT5zZWN0X2NvdW50IC0gMiwKKwkJCQkgIHNiaS0+c19iYWNrdXBfdmhkciwgV1JJVEVfU1lOQyk7CisJaWYgKCFlcnJvcikKKwkJZXJyb3IyID0gZXJyb3I7CitvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZzYmktPmFsbG9jX211dGV4KTsKIAltdXRleF91bmxvY2soJnNiaS0+dmhfbXV0ZXgpOwotCXJldHVybiAwOworCisJaWYgKCF0ZXN0X2JpdChIRlNQTFVTX1NCX05PQkFSUklFUiwgJnNiaS0+ZmxhZ3MpKQorCQlibGtkZXZfaXNzdWVfZmx1c2goc2ItPnNfYmRldiwgR0ZQX0tFUk5FTCwgTlVMTCk7CisKKwlyZXR1cm4gZXJyb3I7CiB9CiAKIHN0YXRpYyB2b2lkIGhmc3BsdXNfd3JpdGVfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKQEAgLTIxNSwyMyArMjM3LDIyIEBACiAJaWYgKCFzYi0+c19mc19pbmZvKQogCQlyZXR1cm47CiAKLQlpZiAoc2ItPnNfZGlydCkKLQkJaGZzcGx1c193cml0ZV9zdXBlcihzYik7CiAJaWYgKCEoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpICYmIHNiaS0+c192aGRyKSB7CiAJCXN0cnVjdCBoZnNwbHVzX3ZoICp2aGRyID0gc2JpLT5zX3ZoZHI7CiAKIAkJdmhkci0+bW9kaWZ5X2RhdGUgPSBoZnNwX25vdzJtdCgpOwogCQl2aGRyLT5hdHRyaWJ1dGVzIHw9IGNwdV90b19iZTMyKEhGU1BMVVNfVk9MX1VOTU5UKTsKIAkJdmhkci0+YXR0cmlidXRlcyAmPSBjcHVfdG9fYmUzMih+SEZTUExVU19WT0xfSU5DTlNUTlQpOwotCQltYXJrX2J1ZmZlcl9kaXJ0eShzYmktPnNfdmhiaCk7Ci0JCXN5bmNfZGlydHlfYnVmZmVyKHNiaS0+c192aGJoKTsKKworCQloZnNwbHVzX3N5bmNfZnMoc2IsIDEpOwogCX0KIAogCWhmc19idHJlZV9jbG9zZShzYmktPmNhdF90cmVlKTsKIAloZnNfYnRyZWVfY2xvc2Uoc2JpLT5leHRfdHJlZSk7CiAJaXB1dChzYmktPmFsbG9jX2ZpbGUpOwogCWlwdXQoc2JpLT5oaWRkZW5fZGlyKTsKLQlicmVsc2Uoc2JpLT5zX3ZoYmgpOworCWtmcmVlKHNiaS0+c192aGRyKTsKKwlrZnJlZShzYmktPnNfYmFja3VwX3ZoZHIpOwogCXVubG9hZF9ubHMoc2JpLT5ubHMpOwogCWtmcmVlKHNiLT5zX2ZzX2luZm8pOwogCXNiLT5zX2ZzX2luZm8gPSBOVUxMOwpAQCAtMjYzLDI2ICsyODQsMzEgQEAKIAkJcmV0dXJuIDA7CiAJaWYgKCEoKmZsYWdzICYgTVNfUkRPTkxZKSkgewogCQlzdHJ1Y3QgaGZzcGx1c192aCAqdmhkciA9IEhGU1BMVVNfU0Ioc2IpLT5zX3ZoZHI7Ci0JCXN0cnVjdCBoZnNwbHVzX3NiX2luZm8gc2JpOworCQlpbnQgZm9yY2UgPSAwOwogCi0JCW1lbXNldCgmc2JpLCAwLCBzaXplb2Yoc3RydWN0IGhmc3BsdXNfc2JfaW5mbykpOwotCQlzYmkubmxzID0gSEZTUExVU19TQihzYiktPm5sczsKLQkJaWYgKCFoZnNwbHVzX3BhcnNlX29wdGlvbnMoZGF0YSwgJnNiaSkpCisJCWlmICghaGZzcGx1c19wYXJzZV9vcHRpb25zX3JlbW91bnQoZGF0YSwgJmZvcmNlKSkKIAkJCXJldHVybiAtRUlOVkFMOwogCiAJCWlmICghKHZoZHItPmF0dHJpYnV0ZXMgJiBjcHVfdG9fYmUzMihIRlNQTFVTX1ZPTF9VTk1OVCkpKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJoZnM6IGZpbGVzeXN0ZW0gd2FzIG5vdCBjbGVhbmx5IHVubW91bnRlZCwgIgotCQkJICAgICAgICJydW5uaW5nIGZzY2suaGZzcGx1cyBpcyByZWNvbW1lbmRlZC4gIGxlYXZpbmcgcmVhZC1vbmx5LlxuIik7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJoZnM6IGZpbGVzeXN0ZW0gd2FzICIKKwkJCQkJIm5vdCBjbGVhbmx5IHVubW91bnRlZCwgIgorCQkJCQkicnVubmluZyBmc2NrLmhmc3BsdXMgaXMgcmVjb21tZW5kZWQuICAiCisJCQkJCSJsZWF2aW5nIHJlYWQtb25seS5cbiIpOwogCQkJc2ItPnNfZmxhZ3MgfD0gTVNfUkRPTkxZOwogCQkJKmZsYWdzIHw9IE1TX1JET05MWTsKLQkJfSBlbHNlIGlmICh0ZXN0X2JpdChIRlNQTFVTX1NCX0ZPUkNFLCAmc2JpLmZsYWdzKSkgeworCQl9IGVsc2UgaWYgKGZvcmNlKSB7CiAJCQkvKiBub3RoaW5nICovCi0JCX0gZWxzZSBpZiAodmhkci0+YXR0cmlidXRlcyAmIGNwdV90b19iZTMyKEhGU1BMVVNfVk9MX1NPRlRMT0NLKSkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiaGZzOiBmaWxlc3lzdGVtIGlzIG1hcmtlZCBsb2NrZWQsIGxlYXZpbmcgcmVhZC1vbmx5LlxuIik7CisJCX0gZWxzZSBpZiAodmhkci0+YXR0cmlidXRlcyAmCisJCQkJY3B1X3RvX2JlMzIoSEZTUExVU19WT0xfU09GVExPQ0spKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJoZnM6IGZpbGVzeXN0ZW0gaXMgbWFya2VkIGxvY2tlZCwgIgorCQkJCQkibGVhdmluZyByZWFkLW9ubHkuXG4iKTsKIAkJCXNiLT5zX2ZsYWdzIHw9IE1TX1JET05MWTsKIAkJCSpmbGFncyB8PSBNU19SRE9OTFk7Ci0JCX0gZWxzZSBpZiAodmhkci0+YXR0cmlidXRlcyAmIGNwdV90b19iZTMyKEhGU1BMVVNfVk9MX0pPVVJOQUxFRCkpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImhmczogZmlsZXN5c3RlbSBpcyBtYXJrZWQgam91cm5hbGVkLCBsZWF2aW5nIHJlYWQtb25seS5cbiIpOworCQl9IGVsc2UgaWYgKHZoZHItPmF0dHJpYnV0ZXMgJgorCQkJCWNwdV90b19iZTMyKEhGU1BMVVNfVk9MX0pPVVJOQUxFRCkpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgImhmczogZmlsZXN5c3RlbSBpcyAiCisJCQkJCSJtYXJrZWQgam91cm5hbGVkLCAiCisJCQkJCSJsZWF2aW5nIHJlYWQtb25seS5cbiIpOwogCQkJc2ItPnNfZmxhZ3MgfD0gTVNfUkRPTkxZOwogCQkJKmZsYWdzIHw9IE1TX1JET05MWTsKIAkJfQpAQCAtMzcyLDE3ICszOTgsMjIgQEAKIAlzYi0+c19tYXhieXRlcyA9IE1BWF9MRlNfRklMRVNJWkU7CiAKIAlpZiAoISh2aGRyLT5hdHRyaWJ1dGVzICYgY3B1X3RvX2JlMzIoSEZTUExVU19WT0xfVU5NTlQpKSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJoZnM6IEZpbGVzeXN0ZW0gd2FzIG5vdCBjbGVhbmx5IHVubW91bnRlZCwgIgotCQkgICAgICAgInJ1bm5pbmcgZnNjay5oZnNwbHVzIGlzIHJlY29tbWVuZGVkLiAgbW91bnRpbmcgcmVhZC1vbmx5LlxuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImhmczogRmlsZXN5c3RlbSB3YXMgIgorCQkJCSJub3QgY2xlYW5seSB1bm1vdW50ZWQsICIKKwkJCQkicnVubmluZyBmc2NrLmhmc3BsdXMgaXMgcmVjb21tZW5kZWQuICAiCisJCQkJIm1vdW50aW5nIHJlYWQtb25seS5cbiIpOwogCQlzYi0+c19mbGFncyB8PSBNU19SRE9OTFk7CiAJfSBlbHNlIGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSEZTUExVU19TQl9GT1JDRSwgJnNiaS0+ZmxhZ3MpKSB7CiAJCS8qIG5vdGhpbmcgKi8KIAl9IGVsc2UgaWYgKHZoZHItPmF0dHJpYnV0ZXMgJiBjcHVfdG9fYmUzMihIRlNQTFVTX1ZPTF9TT0ZUTE9DSykpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiaGZzOiBGaWxlc3lzdGVtIGlzIG1hcmtlZCBsb2NrZWQsIG1vdW50aW5nIHJlYWQtb25seS5cbiIpOwogCQlzYi0+c19mbGFncyB8PSBNU19SRE9OTFk7Ci0JfSBlbHNlIGlmICgodmhkci0+YXR0cmlidXRlcyAmIGNwdV90b19iZTMyKEhGU1BMVVNfVk9MX0pPVVJOQUxFRCkpICYmICEoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImhmczogd3JpdGUgYWNjZXNzIHRvIGEgam91cm5hbGVkIGZpbGVzeXN0ZW0gaXMgbm90IHN1cHBvcnRlZCwgIgotCQkgICAgICAgInVzZSB0aGUgZm9yY2Ugb3B0aW9uIGF0IHlvdXIgb3duIHJpc2ssIG1vdW50aW5nIHJlYWQtb25seS5cbiIpOworCX0gZWxzZSBpZiAoKHZoZHItPmF0dHJpYnV0ZXMgJiBjcHVfdG9fYmUzMihIRlNQTFVTX1ZPTF9KT1VSTkFMRUQpKSAmJgorCQkJIShzYi0+c19mbGFncyAmIE1TX1JET05MWSkpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiaGZzOiB3cml0ZSBhY2Nlc3MgdG8gIgorCQkJCSJhIGpvdXJuYWxlZCBmaWxlc3lzdGVtIGlzIG5vdCBzdXBwb3J0ZWQsICIKKwkJCQkidXNlIHRoZSBmb3JjZSBvcHRpb24gYXQgeW91ciBvd24gcmlzaywgIgorCQkJCSJtb3VudGluZyByZWFkLW9ubHkuXG4iKTsKIAkJc2ItPnNfZmxhZ3MgfD0gTVNfUkRPTkxZOwogCX0KIApAQCAtNDE5LDcgKzQ1MCw3IEBACiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gY2xlYW51cDsKIAl9Ci0Jc2ItPnNfcm9vdC0+ZF9vcCA9ICZoZnNwbHVzX2RlbnRyeV9vcGVyYXRpb25zOworCWRfc2V0X2Rfb3Aoc2ItPnNfcm9vdCwgJmhmc3BsdXNfZGVudHJ5X29wZXJhdGlvbnMpOwogCiAJc3RyLmxlbiA9IHNpemVvZihIRlNQX0hJRERFTkRJUl9OQU1FKSAtIDE7CiAJc3RyLm5hbWUgPSBIRlNQX0hJRERFTkRJUl9OQU1FOwpAQCAtNDQ5LDE5ICs0ODAsMTYgQEAKIAliZTMyX2FkZF9jcHUoJnZoZHItPndyaXRlX2NvdW50LCAxKTsKIAl2aGRyLT5hdHRyaWJ1dGVzICY9IGNwdV90b19iZTMyKH5IRlNQTFVTX1ZPTF9VTk1OVCk7CiAJdmhkci0+YXR0cmlidXRlcyB8PSBjcHVfdG9fYmUzMihIRlNQTFVTX1ZPTF9JTkNOU1ROVCk7Ci0JbWFya19idWZmZXJfZGlydHkoc2JpLT5zX3ZoYmgpOwotCXN5bmNfZGlydHlfYnVmZmVyKHNiaS0+c192aGJoKTsKKwloZnNwbHVzX3N5bmNfZnMoc2IsIDEpOwogCiAJaWYgKCFzYmktPmhpZGRlbl9kaXIpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgImhmczogY3JlYXRlIGhpZGRlbiBkaXIuLi5cbiIpOwotCiAJCW11dGV4X2xvY2soJnNiaS0+dmhfbXV0ZXgpOwogCQlzYmktPmhpZGRlbl9kaXIgPSBoZnNwbHVzX25ld19pbm9kZShzYiwgU19JRkRJUik7CiAJCWhmc3BsdXNfY3JlYXRlX2NhdChzYmktPmhpZGRlbl9kaXItPmlfaW5vLCBzYi0+c19yb290LT5kX2lub2RlLAogCQkJCSAgICZzdHIsIHNiaS0+aGlkZGVuX2Rpcik7CiAJCW11dGV4X3VubG9jaygmc2JpLT52aF9tdXRleCk7CiAKLQkJbWFya19pbm9kZV9kaXJ0eShzYmktPmhpZGRlbl9kaXIpOworCQloZnNwbHVzX21hcmtfaW5vZGVfZGlydHkoc2JpLT5oaWRkZW5fZGlyLCBIRlNQTFVTX0lfQ0FUX0RJUlRZKTsKIAl9CiBvdXQ6CiAJdW5sb2FkX25scyhzYmktPm5scyk7CkBAIC00ODgsOSArNTE2LDE3IEBACiAJcmV0dXJuIGkgPyAmaS0+dmZzX2lub2RlIDogTlVMTDsKIH0KIAorc3RhdGljIHZvaWQgaGZzcGx1c19pX2NhbGxiYWNrKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBpbm9kZSwgaV9yY3UpOworCisJSU5JVF9MSVNUX0hFQUQoJmlub2RlLT5pX2RlbnRyeSk7CisJa21lbV9jYWNoZV9mcmVlKGhmc3BsdXNfaW5vZGVfY2FjaGVwLCBIRlNQTFVTX0koaW5vZGUpKTsKK30KKwogc3RhdGljIHZvaWQgaGZzcGx1c19kZXN0cm95X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7Ci0Ja21lbV9jYWNoZV9mcmVlKGhmc3BsdXNfaW5vZGVfY2FjaGVwLCBIRlNQTFVTX0koaW5vZGUpKTsKKwljYWxsX3JjdSgmaW5vZGUtPmlfcmN1LCBoZnNwbHVzX2lfY2FsbGJhY2spOwogfQogCiAjZGVmaW5lIEhGU1BMVVNfSU5PREVfU0laRQlzaXplb2Yoc3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbykKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvdW5pY29kZS5jIGIvZnMvaGZzcGx1cy91bmljb2RlLmMKaW5kZXggYjY2ZDY3ZC4uYTNmMGJmYyAxMDA2NDQKLS0tIGEvZnMvaGZzcGx1cy91bmljb2RlLmMKKysrIGIvZnMvaGZzcGx1cy91bmljb2RlLmMKQEAgLTE3LDE0ICsxNywxNCBAQAogLyogUmV0dXJucyBmb2xkZWQgY2hhciwgb3IgMCBpZiBpZ25vcmFibGUgKi8KIHN0YXRpYyBpbmxpbmUgdTE2IGNhc2VfZm9sZCh1MTYgYykKIHsKLSAgICAgICAgdTE2IHRtcDsKKwl1MTYgdG1wOwogCi0gICAgICAgIHRtcCA9IGhmc3BsdXNfY2FzZV9mb2xkX3RhYmxlW2MgPj4gOF07Ci0gICAgICAgIGlmICh0bXApCi0gICAgICAgICAgICAgICAgdG1wID0gaGZzcGx1c19jYXNlX2ZvbGRfdGFibGVbdG1wICsgKGMgJiAweGZmKV07Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB0bXAgPSBjOwotICAgICAgICByZXR1cm4gdG1wOworCXRtcCA9IGhmc3BsdXNfY2FzZV9mb2xkX3RhYmxlW2MgPj4gOF07CisJaWYgKHRtcCkKKwkJdG1wID0gaGZzcGx1c19jYXNlX2ZvbGRfdGFibGVbdG1wICsgKGMgJiAweGZmKV07CisJZWxzZQorCQl0bXAgPSBjOworCXJldHVybiB0bXA7CiB9CiAKIC8qIENvbXBhcmUgdW5pY29kZSBzdHJpbmdzLCByZXR1cm4gdmFsdWVzIGxpa2Ugbm9ybWFsIHN0cmNtcCAqLwpAQCAtMTE4LDcgKzExOCw5IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLWludCBoZnNwbHVzX3VuaTJhc2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3Qgc3RydWN0IGhmc3BsdXNfdW5pc3RyICp1c3RyLCBjaGFyICphc3RyLCBpbnQgKmxlbl9wKQoraW50IGhmc3BsdXNfdW5pMmFzYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQljb25zdCBzdHJ1Y3QgaGZzcGx1c191bmlzdHIgKnVzdHIsCisJCWNoYXIgKmFzdHIsIGludCAqbGVuX3ApCiB7CiAJY29uc3QgaGZzcGx1c191bmljaHIgKmlwOwogCXN0cnVjdCBubHNfdGFibGUgKm5scyA9IEhGU1BMVVNfU0Ioc2IpLT5ubHM7CkBAIC0xNzEsNyArMTczLDggQEAKIAkJCQlnb3RvIHNhbWU7CiAJCQljMSA9IGJlMTZfdG9fY3B1KCppcCk7CiAJCQlpZiAobGlrZWx5KGNvbXBvc2UpKQotCQkJCWNlMSA9IGhmc3BsdXNfY29tcG9zZV9sb29rdXAoaGZzcGx1c19jb21wb3NlX3RhYmxlLCBjMSk7CisJCQkJY2UxID0gaGZzcGx1c19jb21wb3NlX2xvb2t1cCgKKwkJCQkJaGZzcGx1c19jb21wb3NlX3RhYmxlLCBjMSk7CiAJCQlpZiAoY2UxKQogCQkJCWJyZWFrOwogCQkJc3dpdGNoIChjMCkgewpAQCAtMTk5LDcgKzIwMiw4IEBACiAJCWlmIChjZTIpIHsKIAkJCWkgPSAxOwogCQkJd2hpbGUgKGkgPCB1c3RybGVuKSB7Ci0JCQkJY2UxID0gaGZzcGx1c19jb21wb3NlX2xvb2t1cChjZTIsIGJlMTZfdG9fY3B1KGlwW2ldKSk7CisJCQkJY2UxID0gaGZzcGx1c19jb21wb3NlX2xvb2t1cChjZTIsCisJCQkJCWJlMTZfdG9fY3B1KGlwW2ldKSk7CiAJCQkJaWYgKCFjZTEpCiAJCQkJCWJyZWFrOwogCQkJCWkrKzsKQEAgLTIxMSw3ICsyMTUsNyBAQAogCQkJCWdvdG8gZG9uZTsKIAkJCX0KIAkJfQotCXNhbWU6CitzYW1lOgogCQlzd2l0Y2ggKGMwKSB7CiAJCWNhc2UgMDoKIAkJCWNjID0gMHgyNDAwOwpAQCAtMjIyLDcgKzIyNiw3IEBACiAJCWRlZmF1bHQ6CiAJCQljYyA9IGMwOwogCQl9Ci0JZG9uZToKK2RvbmU6CiAJCXJlcyA9IG5scy0+dW5pMmNoYXIoY2MsIG9wLCBsZW4pOwogCQlpZiAocmVzIDwgMCkgewogCQkJaWYgKHJlcyA9PSAtRU5BTUVUT09MT05HKQpAQCAtMzIwLDcgKzMyNCw4IEBACiAgKiBDb21wb3NlZCB1bmljb2RlIGNoYXJhY3RlcnMgYXJlIGRlY29tcG9zZWQgYW5kIGNhc2UtZm9sZGluZyBpcyBwZXJmb3JtZWQKICAqIGlmIHRoZSBhcHByb3ByaWF0ZSBiaXRzIGFyZSAodW4pc2V0IG9uIHRoZSBzdXBlcmJsb2NrLgogICovCi1pbnQgaGZzcGx1c19oYXNoX2RlbnRyeShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBxc3RyICpzdHIpCitpbnQgaGZzcGx1c19oYXNoX2RlbnRyeShjb25zdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCXN0cnVjdCBxc3RyICpzdHIpCiB7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGRlbnRyeS0+ZF9zYjsKIAljb25zdCBjaGFyICphc3RyOwpAQCAtMzYzLDkgKzM2OCwxMiBAQAogICogQ29tcG9zZWQgdW5pY29kZSBjaGFyYWN0ZXJzIGFyZSBkZWNvbXBvc2VkIGFuZCBjYXNlLWZvbGRpbmcgaXMgcGVyZm9ybWVkCiAgKiBpZiB0aGUgYXBwcm9wcmlhdGUgYml0cyBhcmUgKHVuKXNldCBvbiB0aGUgc3VwZXJibG9jay4KICAqLwotaW50IGhmc3BsdXNfY29tcGFyZV9kZW50cnkoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgcXN0ciAqczEsIHN0cnVjdCBxc3RyICpzMikKK2ludCBoZnNwbHVzX2NvbXBhcmVfZGVudHJ5KGNvbnN0IHN0cnVjdCBkZW50cnkgKnBhcmVudCwKKwkJY29uc3Qgc3RydWN0IGlub2RlICpwaW5vZGUsCisJCWNvbnN0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSwKKwkJdW5zaWduZWQgaW50IGxlbiwgY29uc3QgY2hhciAqc3RyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSkKIHsKLQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZGVudHJ5LT5kX3NiOworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBwYXJlbnQtPmRfc2I7CiAJaW50IGNhc2Vmb2xkLCBkZWNvbXBvc2UsIHNpemU7CiAJaW50IGRzaXplMSwgZHNpemUyLCBsZW4xLCBsZW4yOwogCWNvbnN0IHUxNiAqZHN0cjEsICpkc3RyMjsKQEAgLTM3NSwxMCArMzgzLDEwIEBACiAKIAljYXNlZm9sZCA9IHRlc3RfYml0KEhGU1BMVVNfU0JfQ0FTRUZPTEQsICZIRlNQTFVTX1NCKHNiKS0+ZmxhZ3MpOwogCWRlY29tcG9zZSA9ICF0ZXN0X2JpdChIRlNQTFVTX1NCX05PREVDT01QT1NFLCAmSEZTUExVU19TQihzYiktPmZsYWdzKTsKLQlhc3RyMSA9IHMxLT5uYW1lOwotCWxlbjEgPSBzMS0+bGVuOwotCWFzdHIyID0gczItPm5hbWU7Ci0JbGVuMiA9IHMyLT5sZW47CisJYXN0cjEgPSBzdHI7CisJbGVuMSA9IGxlbjsKKwlhc3RyMiA9IG5hbWUtPm5hbWU7CisJbGVuMiA9IG5hbWUtPmxlbjsKIAlkc2l6ZTEgPSBkc2l6ZTIgPSAwOwogCWRzdHIxID0gZHN0cjIgPSBOVUxMOwogCkBAIC0zODgsNyArMzk2LDkgQEAKIAkJCWFzdHIxICs9IHNpemU7CiAJCQlsZW4xIC09IHNpemU7CiAKLQkJCWlmICghZGVjb21wb3NlIHx8ICEoZHN0cjEgPSBkZWNvbXBvc2VfdW5pY2hhcihjLCAmZHNpemUxKSkpIHsKKwkJCWlmIChkZWNvbXBvc2UpCisJCQkJZHN0cjEgPSBkZWNvbXBvc2VfdW5pY2hhcihjLCAmZHNpemUxKTsKKwkJCWlmICghZGVjb21wb3NlIHx8ICFkc3RyMSkgewogCQkJCWMxID0gYzsKIAkJCQlkc3RyMSA9ICZjMTsKIAkJCQlkc2l6ZTEgPSAxOwpAQCAtNDAwLDcgKzQxMCw5IEBACiAJCQlhc3RyMiArPSBzaXplOwogCQkJbGVuMiAtPSBzaXplOwogCi0JCQlpZiAoIWRlY29tcG9zZSB8fCAhKGRzdHIyID0gZGVjb21wb3NlX3VuaWNoYXIoYywgJmRzaXplMikpKSB7CisJCQlpZiAoZGVjb21wb3NlKQorCQkJCWRzdHIyID0gZGVjb21wb3NlX3VuaWNoYXIoYywgJmRzaXplMik7CisJCQlpZiAoIWRlY29tcG9zZSB8fCAhZHN0cjIpIHsKIAkJCQljMiA9IGM7CiAJCQkJZHN0cjIgPSAmYzI7CiAJCQkJZHNpemUyID0gMTsKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvd3JhcHBlci5jIGIvZnMvaGZzcGx1cy93cmFwcGVyLmMKaW5kZXggODk3MmMyMC4uMTk2MjMxNyAxMDA2NDQKLS0tIGEvZnMvaGZzcGx1cy93cmFwcGVyLmMKKysrIGIvZnMvaGZzcGx1cy93cmFwcGVyLmMKQEAgLTI0LDYgKzI0LDQwIEBACiAJdTE2IGVtYmVkX2NvdW50OwogfTsKIAorc3RhdGljIHZvaWQgaGZzcGx1c19lbmRfaW9fc3luYyhzdHJ1Y3QgYmlvICpiaW8sIGludCBlcnIpCit7CisJaWYgKGVycikKKwkJY2xlYXJfYml0KEJJT19VUFRPREFURSwgJmJpby0+YmlfZmxhZ3MpOworCWNvbXBsZXRlKGJpby0+YmlfcHJpdmF0ZSk7Cit9CisKK2ludCBoZnNwbHVzX3N1Ym1pdF9iaW8oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc2VjdG9yX3Qgc2VjdG9yLAorCQl2b2lkICpkYXRhLCBpbnQgcncpCit7CisJREVDTEFSRV9DT01QTEVUSU9OX09OU1RBQ0sod2FpdCk7CisJc3RydWN0IGJpbyAqYmlvOworCisJYmlvID0gYmlvX2FsbG9jKEdGUF9OT0lPLCAxKTsKKwliaW8tPmJpX3NlY3RvciA9IHNlY3RvcjsKKwliaW8tPmJpX2JkZXYgPSBiZGV2OworCWJpby0+YmlfZW5kX2lvID0gaGZzcGx1c19lbmRfaW9fc3luYzsKKwliaW8tPmJpX3ByaXZhdGUgPSAmd2FpdDsKKworCS8qCisJICogV2UgYWx3YXlzIHN1Ym1pdCBvbmUgc2VjdG9yIGF0IGEgdGltZSwgc28gYmlvX2FkZF9wYWdlIG11c3Qgbm90IGZhaWwuCisJICovCisJaWYgKGJpb19hZGRfcGFnZShiaW8sIHZpcnRfdG9fcGFnZShkYXRhKSwgSEZTUExVU19TRUNUT1JfU0laRSwKKwkJCSBvZmZzZXRfaW5fcGFnZShkYXRhKSkgIT0gSEZTUExVU19TRUNUT1JfU0laRSkKKwkJQlVHKCk7CisKKwlzdWJtaXRfYmlvKHJ3LCBiaW8pOworCXdhaXRfZm9yX2NvbXBsZXRpb24oJndhaXQpOworCisJaWYgKCFiaW9fZmxhZ2dlZChiaW8sIEJJT19VUFRPREFURSkpCisJCXJldHVybiAtRUlPOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGhmc3BsdXNfcmVhZF9tZGIodm9pZCAqYnVmcHRyLCBzdHJ1Y3QgaGZzcGx1c193ZCAqd2QpCiB7CiAJdTMyIGV4dGVudDsKQEAgLTQwLDEyICs3NCwxNCBAQAogCSAgICEoYXR0cmliICYgSEZTUF9XUkFQX0FUVFJJQl9TUEFSRUQpKQogCQlyZXR1cm4gMDsKIAotCXdkLT5hYmxrX3NpemUgPSBiZTMyX3RvX2NwdSgqKF9fYmUzMiAqKShidWZwdHIgKyBIRlNQX1dSQVBPRkZfQUJMS1NJWkUpKTsKKwl3ZC0+YWJsa19zaXplID0KKwkJYmUzMl90b19jcHUoKihfX2JlMzIgKikoYnVmcHRyICsgSEZTUF9XUkFQT0ZGX0FCTEtTSVpFKSk7CiAJaWYgKHdkLT5hYmxrX3NpemUgPCBIRlNQTFVTX1NFQ1RPUl9TSVpFKQogCQlyZXR1cm4gMDsKIAlpZiAod2QtPmFibGtfc2l6ZSAlIEhGU1BMVVNfU0VDVE9SX1NJWkUpCiAJCXJldHVybiAwOwotCXdkLT5hYmxrX3N0YXJ0ID0gYmUxNl90b19jcHUoKihfX2JlMTYgKikoYnVmcHRyICsgSEZTUF9XUkFQT0ZGX0FCTEtTVEFSVCkpOworCXdkLT5hYmxrX3N0YXJ0ID0KKwkJYmUxNl90b19jcHUoKihfX2JlMTYgKikoYnVmcHRyICsgSEZTUF9XUkFQT0ZGX0FCTEtTVEFSVCkpOwogCiAJZXh0ZW50ID0gZ2V0X3VuYWxpZ25lZF9iZTMyKGJ1ZnB0ciArIEhGU1BfV1JBUE9GRl9FTUJFREVYVCk7CiAJd2QtPmVtYmVkX3N0YXJ0ID0gKGV4dGVudCA+PiAxNikgJiAweEZGRkY7CkBAIC02OCw3ICsxMDQsOCBAQAogCWlmIChIRlNQTFVTX1NCKHNiKS0+c2Vzc2lvbiA+PSAwKSB7CiAJCXRlLmNkdGVfdHJhY2sgPSBIRlNQTFVTX1NCKHNiKS0+c2Vzc2lvbjsKIAkJdGUuY2R0ZV9mb3JtYXQgPSBDRFJPTV9MQkE7Ci0JCXJlcyA9IGlvY3RsX2J5X2JkZXYoc2ItPnNfYmRldiwgQ0RST01SRUFEVE9DRU5UUlksICh1bnNpZ25lZCBsb25nKSZ0ZSk7CisJCXJlcyA9IGlvY3RsX2J5X2JkZXYoc2ItPnNfYmRldiwKKwkJCUNEUk9NUkVBRFRPQ0VOVFJZLCAodW5zaWduZWQgbG9uZykmdGUpOwogCQlpZiAoIXJlcyAmJiAodGUuY2R0ZV9jdHJsICYgQ0RST01fREFUQV9UUkFDSykgPT0gNCkgewogCQkJKnN0YXJ0ID0gKHNlY3Rvcl90KXRlLmNkdGVfYWRkci5sYmEgPDwgMjsKIAkJCXJldHVybiAwOwpAQCAtNzcsNyArMTE0LDggQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCW1zX2luZm8uYWRkcl9mb3JtYXQgPSBDRFJPTV9MQkE7Ci0JcmVzID0gaW9jdGxfYnlfYmRldihzYi0+c19iZGV2LCBDRFJPTU1VTFRJU0VTU0lPTiwgKHVuc2lnbmVkIGxvbmcpJm1zX2luZm8pOworCXJlcyA9IGlvY3RsX2J5X2JkZXYoc2ItPnNfYmRldiwgQ0RST01NVUxUSVNFU1NJT04sCisJCSh1bnNpZ25lZCBsb25nKSZtc19pbmZvKTsKIAlpZiAoIXJlcyAmJiBtc19pbmZvLnhhX2ZsYWcpCiAJCSpzdGFydCA9IChzZWN0b3JfdCltc19pbmZvLmFkZHIubGJhIDw8IDI7CiAJcmV0dXJuIDA7CkBAIC04OCwxMDAgKzEyNiwxMTIgQEAKIGludCBoZnNwbHVzX3JlYWRfd3JhcHBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewogCXN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0Ioc2IpOwotCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7Ci0Jc3RydWN0IGhmc3BsdXNfdmggKnZoZHI7CiAJc3RydWN0IGhmc3BsdXNfd2Qgd2Q7CiAJc2VjdG9yX3QgcGFydF9zdGFydCwgcGFydF9zaXplOwogCXUzMiBibG9ja3NpemU7CisJaW50IGVycm9yID0gMDsKIAorCWVycm9yID0gLUVJTlZBTDsKIAlibG9ja3NpemUgPSBzYl9taW5fYmxvY2tzaXplKHNiLCBIRlNQTFVTX1NFQ1RPUl9TSVpFKTsKIAlpZiAoIWJsb2Nrc2l6ZSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJCWdvdG8gb3V0OwogCiAJaWYgKGhmc3BsdXNfZ2V0X2xhc3Rfc2Vzc2lvbihzYiwgJnBhcnRfc3RhcnQsICZwYXJ0X3NpemUpKQotCQlyZXR1cm4gLUVJTlZBTDsKKwkJZ290byBvdXQ7CiAJaWYgKCh1NjQpcGFydF9zdGFydCArIHBhcnRfc2l6ZSA+IDB4MTAwMDAwMDAwVUxMKSB7CiAJCXByX2VycigiaGZzOiB2b2x1bWVzIGxhcmdlciB0aGFuIDJUQiBhcmUgbm90IHN1cHBvcnRlZCB5ZXRcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJZ290byBvdXQ7CiAJfQotCXdoaWxlICgxKSB7Ci0JCWJoID0gc2JfYnJlYWQ1MTIoc2IsIHBhcnRfc3RhcnQgKyBIRlNQTFVTX1ZPTEhFQURfU0VDVE9SLCB2aGRyKTsKLQkJaWYgKCFiaCkKLQkJCXJldHVybiAtRUlPOwogCi0JCWlmICh2aGRyLT5zaWduYXR1cmUgPT0gY3B1X3RvX2JlMTYoSEZTUF9XUkFQX01BR0lDKSkgewotCQkJaWYgKCFoZnNwbHVzX3JlYWRfbWRiKHZoZHIsICZ3ZCkpCi0JCQkJZ290byBlcnJvcjsKLQkJCXdkLmFibGtfc2l6ZSA+Pj0gSEZTUExVU19TRUNUT1JfU0hJRlQ7Ci0JCQlwYXJ0X3N0YXJ0ICs9IHdkLmFibGtfc3RhcnQgKyB3ZC5lbWJlZF9zdGFydCAqIHdkLmFibGtfc2l6ZTsKLQkJCXBhcnRfc2l6ZSA9IHdkLmVtYmVkX2NvdW50ICogd2QuYWJsa19zaXplOwotCQkJYnJlbHNlKGJoKTsKLQkJCWJoID0gc2JfYnJlYWQ1MTIoc2IsIHBhcnRfc3RhcnQgKyBIRlNQTFVTX1ZPTEhFQURfU0VDVE9SLCB2aGRyKTsKLQkJCWlmICghYmgpCi0JCQkJcmV0dXJuIC1FSU87Ci0JCX0KLQkJaWYgKHZoZHItPnNpZ25hdHVyZSA9PSBjcHVfdG9fYmUxNihIRlNQTFVTX1ZPTEhFQURfU0lHKSkKLQkJCWJyZWFrOwotCQlpZiAodmhkci0+c2lnbmF0dXJlID09IGNwdV90b19iZTE2KEhGU1BMVVNfVk9MSEVBRF9TSUdYKSkgewotCQkJc2V0X2JpdChIRlNQTFVTX1NCX0hGU1gsICZzYmktPmZsYWdzKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWJyZWxzZShiaCk7CisJZXJyb3IgPSAtRU5PTUVNOworCXNiaS0+c192aGRyID0ga21hbGxvYyhIRlNQTFVTX1NFQ1RPUl9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNiaS0+c192aGRyKQorCQlnb3RvIG91dDsKKwlzYmktPnNfYmFja3VwX3ZoZHIgPSBrbWFsbG9jKEhGU1BMVVNfU0VDVE9SX1NJWkUsIEdGUF9LRVJORUwpOworCWlmICghc2JpLT5zX2JhY2t1cF92aGRyKQorCQlnb3RvIG91dF9mcmVlX3ZoZHI7CiAKLQkJLyogY2hlY2sgZm9yIGEgcGFydGl0aW9uIGJsb2NrCityZXJlYWQ6CisJZXJyb3IgPSBoZnNwbHVzX3N1Ym1pdF9iaW8oc2ItPnNfYmRldiwKKwkJCQkgICBwYXJ0X3N0YXJ0ICsgSEZTUExVU19WT0xIRUFEX1NFQ1RPUiwKKwkJCQkgICBzYmktPnNfdmhkciwgUkVBRCk7CisJaWYgKGVycm9yKQorCQlnb3RvIG91dF9mcmVlX2JhY2t1cF92aGRyOworCisJZXJyb3IgPSAtRUlOVkFMOworCXN3aXRjaCAoc2JpLT5zX3ZoZHItPnNpZ25hdHVyZSkgeworCWNhc2UgY3B1X3RvX2JlMTYoSEZTUExVU19WT0xIRUFEX1NJR1gpOgorCQlzZXRfYml0KEhGU1BMVVNfU0JfSEZTWCwgJnNiaS0+ZmxhZ3MpOworCQkvKkZBTExUSFJVKi8KKwljYXNlIGNwdV90b19iZTE2KEhGU1BMVVNfVk9MSEVBRF9TSUcpOgorCQlicmVhazsKKwljYXNlIGNwdV90b19iZTE2KEhGU1BfV1JBUF9NQUdJQyk6CisJCWlmICghaGZzcGx1c19yZWFkX21kYihzYmktPnNfdmhkciwgJndkKSkKKwkJCWdvdG8gb3V0OworCQl3ZC5hYmxrX3NpemUgPj49IEhGU1BMVVNfU0VDVE9SX1NISUZUOworCQlwYXJ0X3N0YXJ0ICs9IHdkLmFibGtfc3RhcnQgKyB3ZC5lbWJlZF9zdGFydCAqIHdkLmFibGtfc2l6ZTsKKwkJcGFydF9zaXplID0gd2QuZW1iZWRfY291bnQgKiB3ZC5hYmxrX3NpemU7CisJCWdvdG8gcmVyZWFkOworCWRlZmF1bHQ6CisJCS8qCisJCSAqIENoZWNrIGZvciBhIHBhcnRpdGlvbiBibG9jay4KKwkJICoKIAkJICogKHNob3VsZCBkbyB0aGlzIG9ubHkgZm9yIGNkcm9tL2xvb3AgdGhvdWdoKQogCQkgKi8KIAkJaWYgKGhmc19wYXJ0X2ZpbmQoc2IsICZwYXJ0X3N0YXJ0LCAmcGFydF9zaXplKSkKLQkJCXJldHVybiAtRUlOVkFMOworCQkJZ290byBvdXQ7CisJCWdvdG8gcmVyZWFkOwogCX0KIAotCWJsb2Nrc2l6ZSA9IGJlMzJfdG9fY3B1KHZoZHItPmJsb2Nrc2l6ZSk7Ci0JYnJlbHNlKGJoKTsKKwllcnJvciA9IGhmc3BsdXNfc3VibWl0X2JpbyhzYi0+c19iZGV2LAorCQkJCSAgIHBhcnRfc3RhcnQgKyBwYXJ0X3NpemUgLSAyLAorCQkJCSAgIHNiaS0+c19iYWNrdXBfdmhkciwgUkVBRCk7CisJaWYgKGVycm9yKQorCQlnb3RvIG91dF9mcmVlX2JhY2t1cF92aGRyOwogCi0JLyogYmxvY2sgc2l6ZSBtdXN0IGJlIGF0IGxlYXN0IGFzIGxhcmdlIGFzIGEgc2VjdG9yCi0JICogYW5kIGEgbXVsdGlwbGUgb2YgMgorCWVycm9yID0gLUVJTlZBTDsKKwlpZiAoc2JpLT5zX2JhY2t1cF92aGRyLT5zaWduYXR1cmUgIT0gc2JpLT5zX3ZoZHItPnNpZ25hdHVyZSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkiaGZzOiBpbnZhbGlkIHNlY29uZGFyeSB2b2x1bWUgaGVhZGVyXG4iKTsKKwkJZ290byBvdXRfZnJlZV9iYWNrdXBfdmhkcjsKKwl9CisKKwlibG9ja3NpemUgPSBiZTMyX3RvX2NwdShzYmktPnNfdmhkci0+YmxvY2tzaXplKTsKKworCS8qCisJICogQmxvY2sgc2l6ZSBtdXN0IGJlIGF0IGxlYXN0IGFzIGxhcmdlIGFzIGEgc2VjdG9yIGFuZCBhIG11bHRpcGxlIG9mIDIuCiAJICovCi0JaWYgKGJsb2Nrc2l6ZSA8IEhGU1BMVVNfU0VDVE9SX1NJWkUgfHwKLQkgICAgKChibG9ja3NpemUgLSAxKSAmIGJsb2Nrc2l6ZSkpCi0JCXJldHVybiAtRUlOVkFMOworCWlmIChibG9ja3NpemUgPCBIRlNQTFVTX1NFQ1RPUl9TSVpFIHx8ICgoYmxvY2tzaXplIC0gMSkgJiBibG9ja3NpemUpKQorCQlnb3RvIG91dF9mcmVlX2JhY2t1cF92aGRyOwogCXNiaS0+YWxsb2NfYmxrc3ogPSBibG9ja3NpemU7CiAJc2JpLT5hbGxvY19ibGtzel9zaGlmdCA9IDA7CiAJd2hpbGUgKChibG9ja3NpemUgPj49IDEpICE9IDApCiAJCXNiaS0+YWxsb2NfYmxrc3pfc2hpZnQrKzsKIAlibG9ja3NpemUgPSBtaW4oc2JpLT5hbGxvY19ibGtzeiwgKHUzMilQQUdFX1NJWkUpOwogCi0JLyogYWxpZ24gYmxvY2sgc2l6ZSB0byBibG9jayBvZmZzZXQgKi8KKwkvKgorCSAqIEFsaWduIGJsb2NrIHNpemUgdG8gYmxvY2sgb2Zmc2V0LgorCSAqLwogCXdoaWxlIChwYXJ0X3N0YXJ0ICYgKChibG9ja3NpemUgPj4gSEZTUExVU19TRUNUT1JfU0hJRlQpIC0gMSkpCiAJCWJsb2Nrc2l6ZSA+Pj0gMTsKIAogCWlmIChzYl9zZXRfYmxvY2tzaXplKHNiLCBibG9ja3NpemUpICE9IGJsb2Nrc2l6ZSkgewotCQlwcmludGsoS0VSTl9FUlIgImhmczogdW5hYmxlIHRvIHNldCBibG9ja3NpemUgdG8gJXUhXG4iLCBibG9ja3NpemUpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcHJpbnRrKEtFUk5fRVJSICJoZnM6IHVuYWJsZSB0byBzZXQgYmxvY2tzaXplIHRvICV1IVxuIiwKKwkJCWJsb2Nrc2l6ZSk7CisJCWdvdG8gb3V0X2ZyZWVfYmFja3VwX3ZoZHI7CiAJfQogCiAJc2JpLT5ibG9ja29mZnNldCA9CiAJCXBhcnRfc3RhcnQgPj4gKHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzIC0gSEZTUExVU19TRUNUT1JfU0hJRlQpOworCXNiaS0+cGFydF9zdGFydCA9IHBhcnRfc3RhcnQ7CiAJc2JpLT5zZWN0X2NvdW50ID0gcGFydF9zaXplOwogCXNiaS0+ZnNfc2hpZnQgPSBzYmktPmFsbG9jX2Jsa3N6X3NoaWZ0IC0gc2ItPnNfYmxvY2tzaXplX2JpdHM7Ci0KLQliaCA9IHNiX2JyZWFkNTEyKHNiLCBwYXJ0X3N0YXJ0ICsgSEZTUExVU19WT0xIRUFEX1NFQ1RPUiwgdmhkcik7Ci0JaWYgKCFiaCkKLQkJcmV0dXJuIC1FSU87Ci0KLQkvKiBzaG91bGQgc3RpbGwgYmUgdGhlIHNhbWUuLi4gKi8KLQlpZiAodGVzdF9iaXQoSEZTUExVU19TQl9IRlNYLCAmc2JpLT5mbGFncykpIHsKLQkJaWYgKHZoZHItPnNpZ25hdHVyZSAhPSBjcHVfdG9fYmUxNihIRlNQTFVTX1ZPTEhFQURfU0lHWCkpCi0JCQlnb3RvIGVycm9yOwotCX0gZWxzZSB7Ci0JCWlmICh2aGRyLT5zaWduYXR1cmUgIT0gY3B1X3RvX2JlMTYoSEZTUExVU19WT0xIRUFEX1NJRykpCi0JCQlnb3RvIGVycm9yOwotCX0KLQotCXNiaS0+c192aGJoID0gYmg7Ci0Jc2JpLT5zX3ZoZHIgPSB2aGRyOwotCiAJcmV0dXJuIDA7Ci0gZXJyb3I6Ci0JYnJlbHNlKGJoKTsKLQlyZXR1cm4gLUVJTlZBTDsKKworb3V0X2ZyZWVfYmFja3VwX3ZoZHI6CisJa2ZyZWUoc2JpLT5zX2JhY2t1cF92aGRyKTsKK291dF9mcmVlX3ZoZHI6CisJa2ZyZWUoc2JpLT5zX3ZoZHIpOworb3V0OgorCXJldHVybiBlcnJvcjsKIH0KZGlmZiAtLWdpdCBhL2ZzL2hvc3Rmcy9ob3N0ZnNfa2Vybi5jIGIvZnMvaG9zdGZzL2hvc3Rmc19rZXJuLmMKaW5kZXggMmMwZjE0OC4uZDMyNDRkOSAxMDA2NDQKLS0tIGEvZnMvaG9zdGZzL2hvc3Rmc19rZXJuLmMKKysrIGIvZnMvaG9zdGZzL2hvc3Rmc19rZXJuLmMKQEAgLTMyLDcgKzMyLDcgQEAKIAogI2RlZmluZSBGSUxFX0hPU1RGU19JKGZpbGUpIEhPU1RGU19JKChmaWxlKS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSkKIAotc3RhdGljIGludCBob3N0ZnNfZF9kZWxldGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQorc3RhdGljIGludCBob3N0ZnNfZF9kZWxldGUoY29uc3Qgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogewogCXJldHVybiAxOwogfQpAQCAtOTIsMTIgKzkyLDEwIEBACiAKIHN0YXRpYyBjaGFyICpfX2RlbnRyeV9uYW1lKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY2hhciAqbmFtZSkKIHsKLQljaGFyICpwID0gX19kZW50cnlfcGF0aChkZW50cnksIG5hbWUsIFBBVEhfTUFYKTsKKwljaGFyICpwID0gZGVudHJ5X3BhdGhfcmF3KGRlbnRyeSwgbmFtZSwgUEFUSF9NQVgpOwogCWNoYXIgKnJvb3Q7CiAJc2l6ZV90IGxlbjsKIAotCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7Ci0KIAlyb290ID0gZGVudHJ5LT5kX3NiLT5zX2ZzX2luZm87CiAJbGVuID0gc3RybGVuKHJvb3QpOwogCWlmIChJU19FUlIocCkpIHsKQEAgLTEyMywyNSArMTIxLDIzIEBACiAJaWYgKCFuYW1lKQogCQlyZXR1cm4gTlVMTDsKIAotCXNwaW5fbG9jaygmZGNhY2hlX2xvY2spOwogCXJldHVybiBfX2RlbnRyeV9uYW1lKGRlbnRyeSwgbmFtZSk7IC8qIHdpbGwgdW5sb2NrICovCiB9CiAKIHN0YXRpYyBjaGFyICppbm9kZV9uYW1lKHN0cnVjdCBpbm9kZSAqaW5vKQogewogCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKLQljaGFyICpuYW1lID0gX19nZXRuYW1lKCk7Ci0JaWYgKCFuYW1lKQorCWNoYXIgKm5hbWU7CisKKwlkZW50cnkgPSBkX2ZpbmRfYWxpYXMoaW5vKTsKKwlpZiAoIWRlbnRyeSkKIAkJcmV0dXJuIE5VTEw7CiAKLQlzcGluX2xvY2soJmRjYWNoZV9sb2NrKTsKLQlpZiAobGlzdF9lbXB0eSgmaW5vLT5pX2RlbnRyeSkpIHsKLQkJc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKLQkJX19wdXRuYW1lKG5hbWUpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JZGVudHJ5ID0gbGlzdF9maXJzdF9lbnRyeSgmaW5vLT5pX2RlbnRyeSwgc3RydWN0IGRlbnRyeSwgZF9hbGlhcyk7Ci0JcmV0dXJuIF9fZGVudHJ5X25hbWUoZGVudHJ5LCBuYW1lKTsgLyogd2lsbCB1bmxvY2sgKi8KKwluYW1lID0gZGVudHJ5X25hbWUoZGVudHJ5KTsKKworCWRwdXQoZGVudHJ5KTsKKworCXJldHVybiBuYW1lOwogfQogCiBzdGF0aWMgY2hhciAqZm9sbG93X2xpbmsoY2hhciAqbGluaykKQEAgLTI1MSw5ICsyNDcsMTYgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIGhvc3Rmc19pX2NhbGxiYWNrKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBpbm9kZSwgaV9yY3UpOworCUlOSVRfTElTVF9IRUFEKCZpbm9kZS0+aV9kZW50cnkpOworCWtmcmVlKEhPU1RGU19JKGlub2RlKSk7Cit9CisKIHN0YXRpYyB2b2lkIGhvc3Rmc19kZXN0cm95X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7Ci0Ja2ZyZWUoSE9TVEZTX0koaW5vZGUpKTsKKwljYWxsX3JjdSgmaW5vZGUtPmlfcmN1LCBob3N0ZnNfaV9jYWxsYmFjayk7CiB9CiAKIHN0YXRpYyBpbnQgaG9zdGZzX3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc3RydWN0IHZmc21vdW50ICp2ZnMpCkBAIC02MDksNyArNjEyLDcgQEAKIAkJZ290byBvdXRfcHV0OwogCiAJZF9hZGQoZGVudHJ5LCBpbm9kZSk7Ci0JZGVudHJ5LT5kX29wID0gJmhvc3Rmc19kZW50cnlfb3BzOworCWRfc2V0X2Rfb3AoZGVudHJ5LCAmaG9zdGZzX2RlbnRyeV9vcHMpOwogCXJldHVybiBOVUxMOwogCiAgb3V0X3B1dDoKQEAgLTc0NiwxMSArNzQ5LDE0IEBACiAJcmV0dXJuIGVycjsKIH0KIAotaW50IGhvc3Rmc19wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vLCBpbnQgZGVzaXJlZCkKK2ludCBob3N0ZnNfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlubywgaW50IGRlc2lyZWQsIHVuc2lnbmVkIGludCBmbGFncykKIHsKIAljaGFyICpuYW1lOwogCWludCByID0gMCwgdyA9IDAsIHggPSAwLCBlcnI7CiAKKwlpZiAoZmxhZ3MgJiBJUEVSTV9GTEFHX1JDVSkKKwkJcmV0dXJuIC1FQ0hJTEQ7CisKIAlpZiAoZGVzaXJlZCAmIE1BWV9SRUFEKSByID0gMTsKIAlpZiAoZGVzaXJlZCAmIE1BWV9XUklURSkgdyA9IDE7CiAJaWYgKGRlc2lyZWQgJiBNQVlfRVhFQykgeCA9IDE7CkBAIC03NjUsNyArNzcxLDcgQEAKIAkJZXJyID0gYWNjZXNzX2ZpbGUobmFtZSwgciwgdywgeCk7CiAJX19wdXRuYW1lKG5hbWUpOwogCWlmICghZXJyKQotCQllcnIgPSBnZW5lcmljX3Blcm1pc3Npb24oaW5vLCBkZXNpcmVkLCBOVUxMKTsKKwkJZXJyID0gZ2VuZXJpY19wZXJtaXNzaW9uKGlubywgZGVzaXJlZCwgZmxhZ3MsIE5VTEwpOwogCXJldHVybiBlcnI7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2hwZnMvZGVudHJ5LmMgYi9mcy9ocGZzL2RlbnRyeS5jCmluZGV4IDY3ZDlkMzYuLjMyYzEzYTkgMTAwNjQ0Ci0tLSBhL2ZzL2hwZnMvZGVudHJ5LmMKKysrIGIvZnMvaHBmcy9kZW50cnkuYwpAQCAtMTIsNyArMTIsOCBAQAogICogTm90ZTogdGhlIGRlbnRyeSBhcmd1bWVudCBpcyB0aGUgcGFyZW50IGRlbnRyeS4KICAqLwogCi1zdGF0aWMgaW50IGhwZnNfaGFzaF9kZW50cnkoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgcXN0ciAqcXN0cikKK3N0YXRpYyBpbnQgaHBmc19oYXNoX2RlbnRyeShjb25zdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCXN0cnVjdCBxc3RyICpxc3RyKQogewogCXVuc2lnbmVkIGxvbmcJIGhhc2g7CiAJaW50CQkgaTsKQEAgLTM0LDE5ICszNSwyNSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGhwZnNfY29tcGFyZV9kZW50cnkoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgcXN0ciAqYSwgc3RydWN0IHFzdHIgKmIpCitzdGF0aWMgaW50IGhwZnNfY29tcGFyZV9kZW50cnkoY29uc3Qgc3RydWN0IGRlbnRyeSAqcGFyZW50LAorCQljb25zdCBzdHJ1Y3QgaW5vZGUgKnBpbm9kZSwKKwkJY29uc3Qgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQl1bnNpZ25lZCBpbnQgbGVuLCBjb25zdCBjaGFyICpzdHIsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKQogewotCXVuc2lnbmVkIGFsPWEtPmxlbjsKLQl1bnNpZ25lZCBibD1iLT5sZW47Ci0JaHBmc19hZGp1c3RfbGVuZ3RoKGEtPm5hbWUsICZhbCk7CisJdW5zaWduZWQgYWwgPSBsZW47CisJdW5zaWduZWQgYmwgPSBuYW1lLT5sZW47CisKKwlocGZzX2FkanVzdF9sZW5ndGgoc3RyLCAmYWwpOwogCS8qaHBmc19hZGp1c3RfbGVuZ3RoKGItPm5hbWUsICZibCk7Ki8KLQkvKiAnYScgaXMgdGhlIHFzdHIgb2YgYW4gYWxyZWFkeSBleGlzdGluZyBkZW50cnksIHNvIHRoZSBuYW1lCi0JICogbXVzdCBiZSB2YWxpZC4gJ2InIG11c3QgYmUgdmFsaWRhdGVkIGZpcnN0LgorCisJLyoKKwkgKiAnc3RyJyBpcyB0aGUgbmFuZSBvZiBhbiBhbHJlYWR5IGV4aXN0aW5nIGRlbnRyeSwgc28gdGhlIG5hbWUKKwkgKiBtdXN0IGJlIHZhbGlkLiAnbmFtZScgbXVzdCBiZSB2YWxpZGF0ZWQgZmlyc3QuCiAJICovCiAKLQlpZiAoaHBmc19jaGtfbmFtZShiLT5uYW1lLCAmYmwpKQorCWlmIChocGZzX2Noa19uYW1lKG5hbWUtPm5hbWUsICZibCkpCiAJCXJldHVybiAxOwotCWlmIChocGZzX2NvbXBhcmVfbmFtZXMoZGVudHJ5LT5kX3NiLCBhLT5uYW1lLCBhbCwgYi0+bmFtZSwgYmwsIDApKQorCWlmIChocGZzX2NvbXBhcmVfbmFtZXMocGFyZW50LT5kX3NiLCBzdHIsIGFsLCBuYW1lLT5uYW1lLCBibCwgMCkpCiAJCXJldHVybiAxOwogCXJldHVybiAwOwogfQpAQCAtNTgsNSArNjUsNSBAQAogCiB2b2lkIGhwZnNfc2V0X2RlbnRyeV9vcGVyYXRpb25zKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIHsKLQlkZW50cnktPmRfb3AgPSAmaHBmc19kZW50cnlfb3BlcmF0aW9uczsKKwlkX3NldF9kX29wKGRlbnRyeSwgJmhwZnNfZGVudHJ5X29wZXJhdGlvbnMpOwogfQpkaWZmIC0tZ2l0IGEvZnMvaHBmcy9uYW1laS5jIGIvZnMvaHBmcy9uYW1laS5jCmluZGV4IDExYzJiNDAuLmY0YWQ5ZTMgMTAwNjQ0Ci0tLSBhL2ZzL2hwZnMvbmFtZWkuYworKysgYi9mcy9ocGZzL25hbWVpLmMKQEAgLTQxOSw3ICs0MTksNyBAQAogCQkJdW5sb2NrX2tlcm5lbCgpOwogCQkJcmV0dXJuIC1FTk9TUEM7CiAJCX0KLQkJaWYgKGdlbmVyaWNfcGVybWlzc2lvbihpbm9kZSwgTUFZX1dSSVRFLCBOVUxMKSB8fAorCQlpZiAoZ2VuZXJpY19wZXJtaXNzaW9uKGlub2RlLCBNQVlfV1JJVEUsIDAsIE5VTEwpIHx8CiAJCSAgICAhU19JU1JFRyhpbm9kZS0+aV9tb2RlKSB8fAogCQkgICAgZ2V0X3dyaXRlX2FjY2Vzcyhpbm9kZSkpIHsKIAkJCWRfcmVoYXNoKGRlbnRyeSk7CmRpZmYgLS1naXQgYS9mcy9ocGZzL3N1cGVyLmMgYi9mcy9ocGZzL3N1cGVyLmMKaW5kZXggNmM1ZjAxNS4uNDk5MzViYSAxMDA2NDQKLS0tIGEvZnMvaHBmcy9zdXBlci5jCisrKyBiL2ZzL2hwZnMvc3VwZXIuYwpAQCAtMTc3LDkgKzE3NywxNiBAQAogCXJldHVybiAmZWktPnZmc19pbm9kZTsKIH0KIAorc3RhdGljIHZvaWQgaHBmc19pX2NhbGxiYWNrKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBpbm9kZSwgaV9yY3UpOworCUlOSVRfTElTVF9IRUFEKCZpbm9kZS0+aV9kZW50cnkpOworCWttZW1fY2FjaGVfZnJlZShocGZzX2lub2RlX2NhY2hlcCwgaHBmc19pKGlub2RlKSk7Cit9CisKIHN0YXRpYyB2b2lkIGhwZnNfZGVzdHJveV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewotCWttZW1fY2FjaGVfZnJlZShocGZzX2lub2RlX2NhY2hlcCwgaHBmc19pKGlub2RlKSk7CisJY2FsbF9yY3UoJmlub2RlLT5pX3JjdSwgaHBmc19pX2NhbGxiYWNrKTsKIH0KIAogc3RhdGljIHZvaWQgaW5pdF9vbmNlKHZvaWQgKmZvbykKZGlmZiAtLWdpdCBhL2ZzL2hwcGZzL2hwcGZzLmMgYi9mcy9ocHBmcy9ocHBmcy5jCmluZGV4IGY3MDJiNWYuLjg3ZWQ0OGUgMTAwNjQ0Ci0tLSBhL2ZzL2hwcGZzL2hwcGZzLmMKKysrIGIvZnMvaHBwZnMvaHBwZnMuYwpAQCAtNjMyLDkgKzYzMiwxNiBAQAogCW1udHB1dChpbm8tPmlfc2ItPnNfZnNfaW5mbyk7CiB9CiAKK3N0YXRpYyB2b2lkIGhwcGZzX2lfY2FsbGJhY2soc3RydWN0IHJjdV9oZWFkICpoZWFkKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGlub2RlLCBpX3JjdSk7CisJSU5JVF9MSVNUX0hFQUQoJmlub2RlLT5pX2RlbnRyeSk7CisJa2ZyZWUoSFBQRlNfSShpbm9kZSkpOworfQorCiBzdGF0aWMgdm9pZCBocHBmc19kZXN0cm95X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7Ci0Ja2ZyZWUoSFBQRlNfSShpbm9kZSkpOworCWNhbGxfcmN1KCZpbm9kZS0+aV9yY3UsIGhwcGZzX2lfY2FsbGJhY2spOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgaHBwZnNfc2JvcHMgPSB7CmRpZmYgLS1naXQgYS9mcy9odWdldGxiZnMvaW5vZGUuYyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jCmluZGV4IGE1ZmU2ODEuLjk4ODUwODIgMTAwNjQ0Ci0tLSBhL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jCisrKyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jCkBAIC02NjMsMTEgKzY2MywxOCBAQAogCXJldHVybiAmcC0+dmZzX2lub2RlOwogfQogCitzdGF0aWMgdm9pZCBodWdldGxiZnNfaV9jYWxsYmFjayhzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgaW5vZGUsIGlfcmN1KTsKKwlJTklUX0xJU1RfSEVBRCgmaW5vZGUtPmlfZGVudHJ5KTsKKwlrbWVtX2NhY2hlX2ZyZWUoaHVnZXRsYmZzX2lub2RlX2NhY2hlcCwgSFVHRVRMQkZTX0koaW5vZGUpKTsKK30KKwogc3RhdGljIHZvaWQgaHVnZXRsYmZzX2Rlc3Ryb3lfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlodWdldGxiZnNfaW5jX2ZyZWVfaW5vZGVzKEhVR0VUTEJGU19TQihpbm9kZS0+aV9zYikpOwogCW1wb2xfZnJlZV9zaGFyZWRfcG9saWN5KCZIVUdFVExCRlNfSShpbm9kZSktPnBvbGljeSk7Ci0Ja21lbV9jYWNoZV9mcmVlKGh1Z2V0bGJmc19pbm9kZV9jYWNoZXAsIEhVR0VUTEJGU19JKGlub2RlKSk7CisJY2FsbF9yY3UoJmlub2RlLT5pX3JjdSwgaHVnZXRsYmZzX2lfY2FsbGJhY2spOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBodWdldGxiZnNfYW9wcyA9IHsKZGlmZiAtLWdpdCBhL2ZzL2lub2RlLmMgYi9mcy9pbm9kZS5jCmluZGV4IGFlMjcyN2EuLmRhODVlNTYgMTAwNjQ0Ci0tLSBhL2ZzL2lub2RlLmMKKysrIGIvZnMvaW5vZGUuYwpAQCAtMTAyLDI2ICsxMDIsMjkgQEAKICAqLwogc3RydWN0IGlub2Rlc19zdGF0X3QgaW5vZGVzX3N0YXQ7CiAKLXN0YXRpYyBzdHJ1Y3QgcGVyY3B1X2NvdW50ZXIgbnJfaW5vZGVzIF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOwotc3RhdGljIHN0cnVjdCBwZXJjcHVfY291bnRlciBucl9pbm9kZXNfdW51c2VkIF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOworc3RhdGljIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGludCwgbnJfaW5vZGVzKTsKIAogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICppbm9kZV9jYWNoZXAgX19yZWFkX21vc3RseTsKIAotc3RhdGljIGlubGluZSBpbnQgZ2V0X25yX2lub2Rlcyh2b2lkKQorc3RhdGljIGludCBnZXRfbnJfaW5vZGVzKHZvaWQpCiB7Ci0JcmV0dXJuIHBlcmNwdV9jb3VudGVyX3N1bV9wb3NpdGl2ZSgmbnJfaW5vZGVzKTsKKwlpbnQgaTsKKwlpbnQgc3VtID0gMDsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkKKwkJc3VtICs9IHBlcl9jcHUobnJfaW5vZGVzLCBpKTsKKwlyZXR1cm4gc3VtIDwgMCA/IDAgOiBzdW07CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGdldF9ucl9pbm9kZXNfdW51c2VkKHZvaWQpCiB7Ci0JcmV0dXJuIHBlcmNwdV9jb3VudGVyX3N1bV9wb3NpdGl2ZSgmbnJfaW5vZGVzX3VudXNlZCk7CisJcmV0dXJuIGlub2Rlc19zdGF0Lm5yX3VudXNlZDsKIH0KIAogaW50IGdldF9ucl9kaXJ0eV9pbm9kZXModm9pZCkKIHsKKwkvKiBub3QgYWN0dWFsbHkgZGlydHkgaW5vZGVzLCBidXQgYSB3aWxkIGFwcHJveGltYXRpb24gKi8KIAlpbnQgbnJfZGlydHkgPSBnZXRfbnJfaW5vZGVzKCkgLSBnZXRfbnJfaW5vZGVzX3VudXNlZCgpOwogCXJldHVybiBucl9kaXJ0eSA+IDAgPyBucl9kaXJ0eSA6IDA7Ci0KIH0KIAogLyoKQEAgLTEzMiw3ICsxMzUsNiBAQAogCQkgICB2b2lkIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcykKIHsKIAlpbm9kZXNfc3RhdC5ucl9pbm9kZXMgPSBnZXRfbnJfaW5vZGVzKCk7Ci0JaW5vZGVzX3N0YXQubnJfdW51c2VkID0gZ2V0X25yX2lub2Rlc191bnVzZWQoKTsKIAlyZXR1cm4gcHJvY19kb2ludHZlYyh0YWJsZSwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyk7CiB9CiAjZW5kaWYKQEAgLTIyNCw3ICsyMjYsNyBAQAogCWlub2RlLT5pX2Zzbm90aWZ5X21hc2sgPSAwOwogI2VuZGlmCiAKLQlwZXJjcHVfY291bnRlcl9pbmMoJm5yX2lub2Rlcyk7CisJdGhpc19jcHVfaW5jKG5yX2lub2Rlcyk7CiAKIAlyZXR1cm4gMDsKIG91dDoKQEAgLTI1NSw2ICsyNTcsMTIgQEAKIAlyZXR1cm4gaW5vZGU7CiB9CiAKK3ZvaWQgZnJlZV9pbm9kZV9ub25yY3Uoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlrbWVtX2NhY2hlX2ZyZWUoaW5vZGVfY2FjaGVwLCBpbm9kZSk7Cit9CitFWFBPUlRfU1lNQk9MKGZyZWVfaW5vZGVfbm9ucmN1KTsKKwogdm9pZCBfX2Rlc3Ryb3lfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlCVUdfT04oaW5vZGVfaGFzX2J1ZmZlcnMoaW5vZGUpKTsKQEAgLTI2NiwxMCArMjc0LDE3IEBACiAJaWYgKGlub2RlLT5pX2RlZmF1bHRfYWNsICYmIGlub2RlLT5pX2RlZmF1bHRfYWNsICE9IEFDTF9OT1RfQ0FDSEVEKQogCQlwb3NpeF9hY2xfcmVsZWFzZShpbm9kZS0+aV9kZWZhdWx0X2FjbCk7CiAjZW5kaWYKLQlwZXJjcHVfY291bnRlcl9kZWMoJm5yX2lub2Rlcyk7CisJdGhpc19jcHVfZGVjKG5yX2lub2Rlcyk7CiB9CiBFWFBPUlRfU1lNQk9MKF9fZGVzdHJveV9pbm9kZSk7CiAKK3N0YXRpYyB2b2lkIGlfY2FsbGJhY2soc3RydWN0IHJjdV9oZWFkICpoZWFkKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGlub2RlLCBpX3JjdSk7CisJSU5JVF9MSVNUX0hFQUQoJmlub2RlLT5pX2RlbnRyeSk7CisJa21lbV9jYWNoZV9mcmVlKGlub2RlX2NhY2hlcCwgaW5vZGUpOworfQorCiBzdGF0aWMgdm9pZCBkZXN0cm95X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJQlVHX09OKCFsaXN0X2VtcHR5KCZpbm9kZS0+aV9scnUpKTsKQEAgLTI3Nyw3ICsyOTIsNyBAQAogCWlmIChpbm9kZS0+aV9zYi0+c19vcC0+ZGVzdHJveV9pbm9kZSkKIAkJaW5vZGUtPmlfc2ItPnNfb3AtPmRlc3Ryb3lfaW5vZGUoaW5vZGUpOwogCWVsc2UKLQkJa21lbV9jYWNoZV9mcmVlKGlub2RlX2NhY2hlcCwgKGlub2RlKSk7CisJCWNhbGxfcmN1KCZpbm9kZS0+aV9yY3UsIGlfY2FsbGJhY2spOwogfQogCiAvKgpAQCAtMzM1LDcgKzM1MCw3IEBACiB7CiAJaWYgKGxpc3RfZW1wdHkoJmlub2RlLT5pX2xydSkpIHsKIAkJbGlzdF9hZGQoJmlub2RlLT5pX2xydSwgJmlub2RlX2xydSk7Ci0JCXBlcmNwdV9jb3VudGVyX2luYygmbnJfaW5vZGVzX3VudXNlZCk7CisJCWlub2Rlc19zdGF0Lm5yX3VudXNlZCsrOwogCX0KIH0KIApAQCAtMzQzLDcgKzM1OCw3IEBACiB7CiAJaWYgKCFsaXN0X2VtcHR5KCZpbm9kZS0+aV9scnUpKSB7CiAJCWxpc3RfZGVsX2luaXQoJmlub2RlLT5pX2xydSk7Ci0JCXBlcmNwdV9jb3VudGVyX2RlYygmbnJfaW5vZGVzX3VudXNlZCk7CisJCWlub2Rlc19zdGF0Lm5yX3VudXNlZC0tOwogCX0KIH0KIApAQCAtNDMwLDYgKzQ0NSw3IEBACiAJQlVHX09OKCEoaW5vZGUtPmlfc3RhdGUgJiBJX0ZSRUVJTkcpKTsKIAlCVUdfT04oaW5vZGUtPmlfc3RhdGUgJiBJX0NMRUFSKTsKIAlpbm9kZV9zeW5jX3dhaXQoaW5vZGUpOworCS8qIGRvbid0IG5lZWQgaV9sb2NrIGhlcmUsIG5vIGNvbmN1cnJlbnQgbW9kcyB0byBpX3N0YXRlICovCiAJaW5vZGUtPmlfc3RhdGUgPSBJX0ZSRUVJTkcgfCBJX0NMRUFSOwogfQogRVhQT1JUX1NZTUJPTChlbmRfd3JpdGViYWNrKTsKQEAgLTUxMyw3ICs1MjksNyBAQAogCQlsaXN0X21vdmUoJmlub2RlLT5pX2xydSwgJmRpc3Bvc2UpOwogCQlsaXN0X2RlbF9pbml0KCZpbm9kZS0+aV93Yl9saXN0KTsKIAkJaWYgKCEoaW5vZGUtPmlfc3RhdGUgJiAoSV9ESVJUWSB8IElfU1lOQykpKQotCQkJcGVyY3B1X2NvdW50ZXJfZGVjKCZucl9pbm9kZXNfdW51c2VkKTsKKwkJCWlub2Rlc19zdGF0Lm5yX3VudXNlZC0tOwogCX0KIAlzcGluX3VubG9jaygmaW5vZGVfbG9jayk7CiAKQEAgLTU1NCw3ICs1NzAsNyBAQAogCQlsaXN0X21vdmUoJmlub2RlLT5pX2xydSwgJmRpc3Bvc2UpOwogCQlsaXN0X2RlbF9pbml0KCZpbm9kZS0+aV93Yl9saXN0KTsKIAkJaWYgKCEoaW5vZGUtPmlfc3RhdGUgJiAoSV9ESVJUWSB8IElfU1lOQykpKQotCQkJcGVyY3B1X2NvdW50ZXJfZGVjKCZucl9pbm9kZXNfdW51c2VkKTsKKwkJCWlub2Rlc19zdGF0Lm5yX3VudXNlZC0tOwogCX0KIAlzcGluX3VubG9jaygmaW5vZGVfbG9jayk7CiAKQEAgLTYxNiw3ICs2MzIsNyBAQAogCQlpZiAoYXRvbWljX3JlYWQoJmlub2RlLT5pX2NvdW50KSB8fAogCQkgICAgKGlub2RlLT5pX3N0YXRlICYgfklfUkVGRVJFTkNFRCkpIHsKIAkJCWxpc3RfZGVsX2luaXQoJmlub2RlLT5pX2xydSk7Ci0JCQlwZXJjcHVfY291bnRlcl9kZWMoJm5yX2lub2Rlc191bnVzZWQpOworCQkJaW5vZGVzX3N0YXQubnJfdW51c2VkLS07CiAJCQljb250aW51ZTsKIAkJfQogCkBAIC02NTAsNyArNjY2LDcgQEAKIAkJICovCiAJCWxpc3RfbW92ZSgmaW5vZGUtPmlfbHJ1LCAmZnJlZWFibGUpOwogCQlsaXN0X2RlbF9pbml0KCZpbm9kZS0+aV93Yl9saXN0KTsKLQkJcGVyY3B1X2NvdW50ZXJfZGVjKCZucl9pbm9kZXNfdW51c2VkKTsKKwkJaW5vZGVzX3N0YXQubnJfdW51c2VkLS07CiAJfQogCWlmIChjdXJyZW50X2lzX2tzd2FwZCgpKQogCQlfX2NvdW50X3ZtX2V2ZW50cyhLU1dBUERfSU5PREVTVEVBTCwgcmVhcCk7CkBAIC0xNjQ4LDggKzE2NjQsNiBAQAogCQkJCQkgU0xBQl9NRU1fU1BSRUFEKSwKIAkJCQkJIGluaXRfb25jZSk7CiAJcmVnaXN0ZXJfc2hyaW5rZXIoJmljYWNoZV9zaHJpbmtlcik7Ci0JcGVyY3B1X2NvdW50ZXJfaW5pdCgmbnJfaW5vZGVzLCAwKTsKLQlwZXJjcHVfY291bnRlcl9pbml0KCZucl9pbm9kZXNfdW51c2VkLCAwKTsKIAogCS8qIEhhc2ggbWF5IGhhdmUgYmVlbiBzZXQgdXAgaW4gaW5vZGVfaW5pdF9lYXJseSAqLwogCWlmICghaGFzaGRpc3QpCmRpZmYgLS1naXQgYS9mcy9pbnRlcm5hbC5oIGIvZnMvaW50ZXJuYWwuaAppbmRleCBlNDNiOWE0Li45Njg3YzJlIDEwMDY0NAotLS0gYS9mcy9pbnRlcm5hbC5oCisrKyBiL2ZzL2ludGVybmFsLmgKQEAgLTYzLDYgKzYzLDcgQEAKIAogZXh0ZXJuIHZvaWQgZnJlZV92ZnNtbnQoc3RydWN0IHZmc21vdW50ICopOwogZXh0ZXJuIHN0cnVjdCB2ZnNtb3VudCAqYWxsb2NfdmZzbW50KGNvbnN0IGNoYXIgKik7CitleHRlcm4gdW5zaWduZWQgaW50IG1udF9nZXRfY291bnQoc3RydWN0IHZmc21vdW50ICptbnQpOwogZXh0ZXJuIHN0cnVjdCB2ZnNtb3VudCAqX19sb29rdXBfbW50KHN0cnVjdCB2ZnNtb3VudCAqLCBzdHJ1Y3QgZGVudHJ5ICosIGludCk7CiBleHRlcm4gdm9pZCBtbnRfc2V0X21vdW50cG9pbnQoc3RydWN0IHZmc21vdW50ICosIHN0cnVjdCBkZW50cnkgKiwKIAkJCQlzdHJ1Y3QgdmZzbW91bnQgKik7CmRpZmYgLS1naXQgYS9mcy9pc29mcy9pbm9kZS5jIGIvZnMvaXNvZnMvaW5vZGUuYwppbmRleCBiZmRlYjgyLi44NDRhNzkwIDEwMDY0NAotLS0gYS9mcy9pc29mcy9pbm9kZS5jCisrKyBiL2ZzL2lzb2ZzL2lub2RlLmMKQEAgLTI2LDE2ICsyNiwzMiBAQAogCiAjZGVmaW5lIEJFUVVJRVQKIAotc3RhdGljIGludCBpc29mc19oYXNoaShzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsIHN0cnVjdCBxc3RyICpxc3RyKTsKLXN0YXRpYyBpbnQgaXNvZnNfaGFzaChzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsIHN0cnVjdCBxc3RyICpxc3RyKTsKLXN0YXRpYyBpbnQgaXNvZnNfZGVudHJ5X2NtcGkoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgcXN0ciAqYSwgc3RydWN0IHFzdHIgKmIpOwotc3RhdGljIGludCBpc29mc19kZW50cnlfY21wKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IHFzdHIgKmEsIHN0cnVjdCBxc3RyICpiKTsKK3N0YXRpYyBpbnQgaXNvZnNfaGFzaGkoY29uc3Qgc3RydWN0IGRlbnRyeSAqcGFyZW50LCBjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQlzdHJ1Y3QgcXN0ciAqcXN0cik7CitzdGF0aWMgaW50IGlzb2ZzX2hhc2goY29uc3Qgc3RydWN0IGRlbnRyeSAqcGFyZW50LCBjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQlzdHJ1Y3QgcXN0ciAqcXN0cik7CitzdGF0aWMgaW50IGlzb2ZzX2RlbnRyeV9jbXBpKGNvbnN0IHN0cnVjdCBkZW50cnkgKnBhcmVudCwKKwkJY29uc3Qgc3RydWN0IGlub2RlICpwaW5vZGUsCisJCWNvbnN0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSwKKwkJdW5zaWduZWQgaW50IGxlbiwgY29uc3QgY2hhciAqc3RyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSk7CitzdGF0aWMgaW50IGlzb2ZzX2RlbnRyeV9jbXAoY29uc3Qgc3RydWN0IGRlbnRyeSAqcGFyZW50LAorCQljb25zdCBzdHJ1Y3QgaW5vZGUgKnBpbm9kZSwKKwkJY29uc3Qgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQl1bnNpZ25lZCBpbnQgbGVuLCBjb25zdCBjaGFyICpzdHIsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKTsKIAogI2lmZGVmIENPTkZJR19KT0xJRVQKLXN0YXRpYyBpbnQgaXNvZnNfaGFzaGlfbXMoc3RydWN0IGRlbnRyeSAqcGFyZW50LCBzdHJ1Y3QgcXN0ciAqcXN0cik7Ci1zdGF0aWMgaW50IGlzb2ZzX2hhc2hfbXMoc3RydWN0IGRlbnRyeSAqcGFyZW50LCBzdHJ1Y3QgcXN0ciAqcXN0cik7Ci1zdGF0aWMgaW50IGlzb2ZzX2RlbnRyeV9jbXBpX21zKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IHFzdHIgKmEsIHN0cnVjdCBxc3RyICpiKTsKLXN0YXRpYyBpbnQgaXNvZnNfZGVudHJ5X2NtcF9tcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBxc3RyICphLCBzdHJ1Y3QgcXN0ciAqYik7CitzdGF0aWMgaW50IGlzb2ZzX2hhc2hpX21zKGNvbnN0IHN0cnVjdCBkZW50cnkgKnBhcmVudCwgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSwKKwkJc3RydWN0IHFzdHIgKnFzdHIpOworc3RhdGljIGludCBpc29mc19oYXNoX21zKGNvbnN0IHN0cnVjdCBkZW50cnkgKnBhcmVudCwgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSwKKwkJc3RydWN0IHFzdHIgKnFzdHIpOworc3RhdGljIGludCBpc29mc19kZW50cnlfY21waV9tcyhjb25zdCBzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsCisJCWNvbnN0IHN0cnVjdCBpbm9kZSAqcGlub2RlLAorCQljb25zdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCXVuc2lnbmVkIGludCBsZW4sIGNvbnN0IGNoYXIgKnN0ciwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpOworc3RhdGljIGludCBpc29mc19kZW50cnlfY21wX21zKGNvbnN0IHN0cnVjdCBkZW50cnkgKnBhcmVudCwKKwkJY29uc3Qgc3RydWN0IGlub2RlICpwaW5vZGUsCisJCWNvbnN0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSwKKwkJdW5zaWduZWQgaW50IGxlbiwgY29uc3QgY2hhciAqc3RyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSk7CiAjZW5kaWYKIAogc3RhdGljIHZvaWQgaXNvZnNfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCkBAIC02NSw5ICs4MSwxNiBAQAogCXJldHVybiAmZWktPnZmc19pbm9kZTsKIH0KIAorc3RhdGljIHZvaWQgaXNvZnNfaV9jYWxsYmFjayhzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgaW5vZGUsIGlfcmN1KTsKKwlJTklUX0xJU1RfSEVBRCgmaW5vZGUtPmlfZGVudHJ5KTsKKwlrbWVtX2NhY2hlX2ZyZWUoaXNvZnNfaW5vZGVfY2FjaGVwLCBJU09GU19JKGlub2RlKSk7Cit9CisKIHN0YXRpYyB2b2lkIGlzb2ZzX2Rlc3Ryb3lfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIHsKLQlrbWVtX2NhY2hlX2ZyZWUoaXNvZnNfaW5vZGVfY2FjaGVwLCBJU09GU19JKGlub2RlKSk7CisJY2FsbF9yY3UoJmlub2RlLT5pX3JjdSwgaXNvZnNfaV9jYWxsYmFjayk7CiB9CiAKIHN0YXRpYyB2b2lkIGluaXRfb25jZSh2b2lkICpmb28pCkBAIC0xNjAsNyArMTgzLDcgQEAKICAqIENvbXB1dGUgdGhlIGhhc2ggZm9yIHRoZSBpc29mcyBuYW1lIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGRlbnRyeS4KICAqLwogc3RhdGljIGludAotaXNvZnNfaGFzaF9jb21tb24oc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgcXN0ciAqcXN0ciwgaW50IG1zKQoraXNvZnNfaGFzaF9jb21tb24oY29uc3Qgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgcXN0ciAqcXN0ciwgaW50IG1zKQogewogCWNvbnN0IGNoYXIgKm5hbWU7CiAJaW50IGxlbjsKQEAgLTE4MSw3ICsyMDQsNyBAQAogICogQ29tcHV0ZSB0aGUgaGFzaCBmb3IgdGhlIGlzb2ZzIG5hbWUgY29ycmVzcG9uZGluZyB0byB0aGUgZGVudHJ5LgogICovCiBzdGF0aWMgaW50Ci1pc29mc19oYXNoaV9jb21tb24oc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgcXN0ciAqcXN0ciwgaW50IG1zKQoraXNvZnNfaGFzaGlfY29tbW9uKGNvbnN0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IHFzdHIgKnFzdHIsIGludCBtcykKIHsKIAljb25zdCBjaGFyICpuYW1lOwogCWludCBsZW47CkBAIC0yMDYsMTAwICsyMjksOTQgQEAKIH0KIAogLyoKLSAqIENhc2UgaW5zZW5zaXRpdmUgY29tcGFyZSBvZiB0d28gaXNvZnMgbmFtZXMuCisgKiBDb21wYXJlIG9mIHR3byBpc29mcyBuYW1lcy4KICAqLwotc3RhdGljIGludCBpc29mc19kZW50cnlfY21waV9jb21tb24oc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgcXN0ciAqYSwKLQkJCQlzdHJ1Y3QgcXN0ciAqYiwgaW50IG1zKQorc3RhdGljIGludCBpc29mc19kZW50cnlfY21wX2NvbW1vbigKKwkJdW5zaWduZWQgaW50IGxlbiwgY29uc3QgY2hhciAqc3RyLAorCQljb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSwgaW50IG1zLCBpbnQgY2kpCiB7CiAJaW50IGFsZW4sIGJsZW47CiAKIAkvKiBBIGZpbGVuYW1lIGNhbm5vdCBlbmQgaW4gJy4nIG9yIHdlIHRyZWF0IGl0IGxpa2UgaXQgaGFzIG5vbmUgKi8KLQlhbGVuID0gYS0+bGVuOwotCWJsZW4gPSBiLT5sZW47CisJYWxlbiA9IG5hbWUtPmxlbjsKKwlibGVuID0gbGVuOwogCWlmIChtcykgewotCQl3aGlsZSAoYWxlbiAmJiBhLT5uYW1lW2FsZW4tMV0gPT0gJy4nKQorCQl3aGlsZSAoYWxlbiAmJiBuYW1lLT5uYW1lW2FsZW4tMV0gPT0gJy4nKQogCQkJYWxlbi0tOwotCQl3aGlsZSAoYmxlbiAmJiBiLT5uYW1lW2JsZW4tMV0gPT0gJy4nKQorCQl3aGlsZSAoYmxlbiAmJiBzdHJbYmxlbi0xXSA9PSAnLicpCiAJCQlibGVuLS07CiAJfQogCWlmIChhbGVuID09IGJsZW4pIHsKLQkJaWYgKHN0cm5pY21wKGEtPm5hbWUsIGItPm5hbWUsIGFsZW4pID09IDApCi0JCQlyZXR1cm4gMDsKLQl9Ci0JcmV0dXJuIDE7Ci19Ci0KLS8qCi0gKiBDYXNlIHNlbnNpdGl2ZSBjb21wYXJlIG9mIHR3byBpc29mcyBuYW1lcy4KLSAqLwotc3RhdGljIGludCBpc29mc19kZW50cnlfY21wX2NvbW1vbihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBxc3RyICphLAotCQkJCQlzdHJ1Y3QgcXN0ciAqYiwgaW50IG1zKQotewotCWludCBhbGVuLCBibGVuOwotCi0JLyogQSBmaWxlbmFtZSBjYW5ub3QgZW5kIGluICcuJyBvciB3ZSB0cmVhdCBpdCBsaWtlIGl0IGhhcyBub25lICovCi0JYWxlbiA9IGEtPmxlbjsKLQlibGVuID0gYi0+bGVuOwotCWlmIChtcykgewotCQl3aGlsZSAoYWxlbiAmJiBhLT5uYW1lW2FsZW4tMV0gPT0gJy4nKQotCQkJYWxlbi0tOwotCQl3aGlsZSAoYmxlbiAmJiBiLT5uYW1lW2JsZW4tMV0gPT0gJy4nKQotCQkJYmxlbi0tOwotCX0KLQlpZiAoYWxlbiA9PSBibGVuKSB7Ci0JCWlmIChzdHJuY21wKGEtPm5hbWUsIGItPm5hbWUsIGFsZW4pID09IDApCi0JCQlyZXR1cm4gMDsKKwkJaWYgKGNpKSB7CisJCQlpZiAoc3RybmljbXAobmFtZS0+bmFtZSwgc3RyLCBhbGVuKSA9PSAwKQorCQkJCXJldHVybiAwOworCQl9IGVsc2UgeworCQkJaWYgKHN0cm5jbXAobmFtZS0+bmFtZSwgc3RyLCBhbGVuKSA9PSAwKQorCQkJCXJldHVybiAwOworCQl9CiAJfQogCXJldHVybiAxOwogfQogCiBzdGF0aWMgaW50Ci1pc29mc19oYXNoKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IHFzdHIgKnFzdHIpCitpc29mc19oYXNoKGNvbnN0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSwKKwkJc3RydWN0IHFzdHIgKnFzdHIpCiB7CiAJcmV0dXJuIGlzb2ZzX2hhc2hfY29tbW9uKGRlbnRyeSwgcXN0ciwgMCk7CiB9CiAKIHN0YXRpYyBpbnQKLWlzb2ZzX2hhc2hpKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IHFzdHIgKnFzdHIpCitpc29mc19oYXNoaShjb25zdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCXN0cnVjdCBxc3RyICpxc3RyKQogewogCXJldHVybiBpc29mc19oYXNoaV9jb21tb24oZGVudHJ5LCBxc3RyLCAwKTsKIH0KIAogc3RhdGljIGludAotaXNvZnNfZGVudHJ5X2NtcChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksc3RydWN0IHFzdHIgKmEsc3RydWN0IHFzdHIgKmIpCitpc29mc19kZW50cnlfY21wKGNvbnN0IHN0cnVjdCBkZW50cnkgKnBhcmVudCwgY29uc3Qgc3RydWN0IGlub2RlICpwaW5vZGUsCisJCWNvbnN0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSwKKwkJdW5zaWduZWQgaW50IGxlbiwgY29uc3QgY2hhciAqc3RyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSkKIHsKLQlyZXR1cm4gaXNvZnNfZGVudHJ5X2NtcF9jb21tb24oZGVudHJ5LCBhLCBiLCAwKTsKKwlyZXR1cm4gaXNvZnNfZGVudHJ5X2NtcF9jb21tb24obGVuLCBzdHIsIG5hbWUsIDAsIDApOwogfQogCiBzdGF0aWMgaW50Ci1pc29mc19kZW50cnlfY21waShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksc3RydWN0IHFzdHIgKmEsc3RydWN0IHFzdHIgKmIpCitpc29mc19kZW50cnlfY21waShjb25zdCBzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsIGNvbnN0IHN0cnVjdCBpbm9kZSAqcGlub2RlLAorCQljb25zdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCXVuc2lnbmVkIGludCBsZW4sIGNvbnN0IGNoYXIgKnN0ciwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpCiB7Ci0JcmV0dXJuIGlzb2ZzX2RlbnRyeV9jbXBpX2NvbW1vbihkZW50cnksIGEsIGIsIDApOworCXJldHVybiBpc29mc19kZW50cnlfY21wX2NvbW1vbihsZW4sIHN0ciwgbmFtZSwgMCwgMSk7CiB9CiAKICNpZmRlZiBDT05GSUdfSk9MSUVUCiBzdGF0aWMgaW50Ci1pc29mc19oYXNoX21zKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IHFzdHIgKnFzdHIpCitpc29mc19oYXNoX21zKGNvbnN0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSwKKwkJc3RydWN0IHFzdHIgKnFzdHIpCiB7CiAJcmV0dXJuIGlzb2ZzX2hhc2hfY29tbW9uKGRlbnRyeSwgcXN0ciwgMSk7CiB9CiAKIHN0YXRpYyBpbnQKLWlzb2ZzX2hhc2hpX21zKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IHFzdHIgKnFzdHIpCitpc29mc19oYXNoaV9tcyhjb25zdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCXN0cnVjdCBxc3RyICpxc3RyKQogewogCXJldHVybiBpc29mc19oYXNoaV9jb21tb24oZGVudHJ5LCBxc3RyLCAxKTsKIH0KIAogc3RhdGljIGludAotaXNvZnNfZGVudHJ5X2NtcF9tcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksc3RydWN0IHFzdHIgKmEsc3RydWN0IHFzdHIgKmIpCitpc29mc19kZW50cnlfY21wX21zKGNvbnN0IHN0cnVjdCBkZW50cnkgKnBhcmVudCwgY29uc3Qgc3RydWN0IGlub2RlICpwaW5vZGUsCisJCWNvbnN0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSwKKwkJdW5zaWduZWQgaW50IGxlbiwgY29uc3QgY2hhciAqc3RyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSkKIHsKLQlyZXR1cm4gaXNvZnNfZGVudHJ5X2NtcF9jb21tb24oZGVudHJ5LCBhLCBiLCAxKTsKKwlyZXR1cm4gaXNvZnNfZGVudHJ5X2NtcF9jb21tb24obGVuLCBzdHIsIG5hbWUsIDEsIDApOwogfQogCiBzdGF0aWMgaW50Ci1pc29mc19kZW50cnlfY21waV9tcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksc3RydWN0IHFzdHIgKmEsc3RydWN0IHFzdHIgKmIpCitpc29mc19kZW50cnlfY21waV9tcyhjb25zdCBzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsIGNvbnN0IHN0cnVjdCBpbm9kZSAqcGlub2RlLAorCQljb25zdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCXVuc2lnbmVkIGludCBsZW4sIGNvbnN0IGNoYXIgKnN0ciwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpCiB7Ci0JcmV0dXJuIGlzb2ZzX2RlbnRyeV9jbXBpX2NvbW1vbihkZW50cnksIGEsIGIsIDEpOworCXJldHVybiBpc29mc19kZW50cnlfY21wX2NvbW1vbihsZW4sIHN0ciwgbmFtZSwgMSwgMSk7CiB9CiAjZW5kaWYKIApAQCAtOTMyLDcgKzk0OSw3IEBACiAJCXRhYmxlICs9IDI7CiAJaWYgKG9wdC5jaGVjayA9PSAncicpCiAJCXRhYmxlKys7Ci0Jcy0+c19yb290LT5kX29wID0gJmlzb2ZzX2RlbnRyeV9vcHNbdGFibGVdOworCWRfc2V0X2Rfb3Aocy0+c19yb290LCAmaXNvZnNfZGVudHJ5X29wc1t0YWJsZV0pOwogCiAJa2ZyZWUob3B0LmlvY2hhcnNldCk7CiAKZGlmZiAtLWdpdCBhL2ZzL2lzb2ZzL25hbWVpLmMgYi9mcy9pc29mcy9uYW1laS5jCmluZGV4IDBkMjNhYmYuLjY3OWE4NDkgMTAwNjQ0Ci0tLSBhL2ZzL2lzb2ZzL25hbWVpLmMKKysrIGIvZnMvaXNvZnMvbmFtZWkuYwpAQCAtMzcsNyArMzcsOCBAQAogCiAJcXN0ci5uYW1lID0gY29tcGFyZTsKIAlxc3RyLmxlbiA9IGRsZW47Ci0JcmV0dXJuIGRlbnRyeS0+ZF9vcC0+ZF9jb21wYXJlKGRlbnRyeSwgJmRlbnRyeS0+ZF9uYW1lLCAmcXN0cik7CisJcmV0dXJuIGRlbnRyeS0+ZF9vcC0+ZF9jb21wYXJlKE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCisJCQlkZW50cnktPmRfbmFtZS5sZW4sIGRlbnRyeS0+ZF9uYW1lLm5hbWUsICZxc3RyKTsKIH0KIAogLyoKQEAgLTE3MSw3ICsxNzIsNyBAQAogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAKLQlkZW50cnktPmRfb3AgPSBkaXItPmlfc2ItPnNfcm9vdC0+ZF9vcDsKKwlkX3NldF9kX29wKGRlbnRyeSwgZGlyLT5pX3NiLT5zX3Jvb3QtPmRfb3ApOwogCiAJcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX1VTRVIpOwogCWlmICghcGFnZSkKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL2FjbC5jIGIvZnMvamZmczIvYWNsLmMKaW5kZXggNTRhOTJmZC4uOTViNzk2NyAxMDA2NDQKLS0tIGEvZnMvamZmczIvYWNsLmMKKysrIGIvZnMvamZmczIvYWNsLmMKQEAgLTI1OSwxMSArMjU5LDE0IEBACiAJcmV0dXJuIHJjOwogfQogCi1pbnQgamZmczJfY2hlY2tfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKQoraW50IGpmZnMyX2NoZWNrX2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaywgdW5zaWduZWQgaW50IGZsYWdzKQogewogCXN0cnVjdCBwb3NpeF9hY2wgKmFjbDsKIAlpbnQgcmM7CiAKKwlpZiAoZmxhZ3MgJiBJUEVSTV9GTEFHX1JDVSkKKwkJcmV0dXJuIC1FQ0hJTEQ7CisKIAlhY2wgPSBqZmZzMl9nZXRfYWNsKGlub2RlLCBBQ0xfVFlQRV9BQ0NFU1MpOwogCWlmIChJU19FUlIoYWNsKSkKIAkJcmV0dXJuIFBUUl9FUlIoYWNsKTsKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL2FjbC5oIGIvZnMvamZmczIvYWNsLmgKaW5kZXggNWU0MmRlOC4uMzExOWY1OSAxMDA2NDQKLS0tIGEvZnMvamZmczIvYWNsLmgKKysrIGIvZnMvamZmczIvYWNsLmgKQEAgLTI2LDcgKzI2LDcgQEAKIAogI2lmZGVmIENPTkZJR19KRkZTMl9GU19QT1NJWF9BQ0wKIAotZXh0ZXJuIGludCBqZmZzMl9jaGVja19hY2woc3RydWN0IGlub2RlICosIGludCk7CitleHRlcm4gaW50IGpmZnMyX2NoZWNrX2FjbChzdHJ1Y3QgaW5vZGUgKiwgaW50LCB1bnNpZ25lZCBpbnQpOwogZXh0ZXJuIGludCBqZmZzMl9hY2xfY2htb2Qoc3RydWN0IGlub2RlICopOwogZXh0ZXJuIGludCBqZmZzMl9pbml0X2FjbF9wcmUoc3RydWN0IGlub2RlICosIHN0cnVjdCBpbm9kZSAqLCBpbnQgKik7CiBleHRlcm4gaW50IGpmZnMyX2luaXRfYWNsX3Bvc3Qoc3RydWN0IGlub2RlICopOwpkaWZmIC0tZ2l0IGEvZnMvamZmczIvc3VwZXIuYyBiL2ZzL2pmZnMyL3N1cGVyLmMKaW5kZXggYzg2MDQxYi4uODUzYjhlMyAxMDA2NDQKLS0tIGEvZnMvamZmczIvc3VwZXIuYworKysgYi9mcy9qZmZzMi9zdXBlci5jCkBAIC00MCw5ICs0MCwxNiBAQAogCXJldHVybiAmZi0+dmZzX2lub2RlOwogfQogCitzdGF0aWMgdm9pZCBqZmZzMl9pX2NhbGxiYWNrKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBpbm9kZSwgaV9yY3UpOworCUlOSVRfTElTVF9IRUFEKCZpbm9kZS0+aV9kZW50cnkpOworCWttZW1fY2FjaGVfZnJlZShqZmZzMl9pbm9kZV9jYWNoZXAsIEpGRlMyX0lOT0RFX0lORk8oaW5vZGUpKTsKK30KKwogc3RhdGljIHZvaWQgamZmczJfZGVzdHJveV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewotCWttZW1fY2FjaGVfZnJlZShqZmZzMl9pbm9kZV9jYWNoZXAsIEpGRlMyX0lOT0RFX0lORk8oaW5vZGUpKTsKKwljYWxsX3JjdSgmaW5vZGUtPmlfcmN1LCBqZmZzMl9pX2NhbGxiYWNrKTsKIH0KIAogc3RhdGljIHZvaWQgamZmczJfaV9pbml0X29uY2Uodm9pZCAqZm9vKQpkaWZmIC0tZ2l0IGEvZnMvamZzL2FjbC5jIGIvZnMvamZzL2FjbC5jCmluZGV4IDEwNTdhNDkuLmU1ZGU5NDIgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9hY2wuYworKysgYi9mcy9qZnMvYWNsLmMKQEAgLTExNCwxMCArMTE0LDE0IEBACiAJcmV0dXJuIHJjOwogfQogCi1pbnQgamZzX2NoZWNrX2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaykKK2ludCBqZnNfY2hlY2tfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7Ci0Jc3RydWN0IHBvc2l4X2FjbCAqYWNsID0gamZzX2dldF9hY2woaW5vZGUsIEFDTF9UWVBFX0FDQ0VTUyk7CisJc3RydWN0IHBvc2l4X2FjbCAqYWNsOwogCisJaWYgKGZsYWdzICYgSVBFUk1fRkxBR19SQ1UpCisJCXJldHVybiAtRUNISUxEOworCisJYWNsID0gamZzX2dldF9hY2woaW5vZGUsIEFDTF9UWVBFX0FDQ0VTUyk7CiAJaWYgKElTX0VSUihhY2wpKQogCQlyZXR1cm4gUFRSX0VSUihhY2wpOwogCWlmIChhY2wpIHsKZGlmZiAtLWdpdCBhL2ZzL2pmcy9qZnNfYWNsLmggYi9mcy9qZnMvamZzX2FjbC5oCmluZGV4IDU0ZTA3NTUuLmY5Mjg1YzQgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9qZnNfYWNsLmgKKysrIGIvZnMvamZzL2pmc19hY2wuaApAQCAtMjAsNyArMjAsNyBAQAogCiAjaWZkZWYgQ09ORklHX0pGU19QT1NJWF9BQ0wKIAotaW50IGpmc19jaGVja19hY2woc3RydWN0IGlub2RlICosIGludCk7CitpbnQgamZzX2NoZWNrX2FjbChzdHJ1Y3QgaW5vZGUgKiwgaW50LCB1bnNpZ25lZCBpbnQgZmxhZ3MpOwogaW50IGpmc19pbml0X2FjbCh0aWRfdCwgc3RydWN0IGlub2RlICosIHN0cnVjdCBpbm9kZSAqKTsKIGludCBqZnNfYWNsX2NobW9kKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogCmRpZmYgLS1naXQgYS9mcy9qZnMvbmFtZWkuYyBiL2ZzL2pmcy9uYW1laS5jCmluZGV4IDIzMWNhNGEuLjQ0MTRlM2EgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9uYW1laS5jCisrKyBiL2ZzL2pmcy9uYW1laS5jCkBAIC0xOCw2ICsxOCw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbmFtZWkuaD4KICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogI2luY2x1ZGUgPGxpbnV4L3F1b3Rhb3BzLmg+CiAjaW5jbHVkZSA8bGludXgvZXhwb3J0ZnMuaD4KQEAgLTE0NjUsNyArMTQ2Niw3IEBACiAJamZzX2luZm8oImpmc19sb29rdXA6IG5hbWUgPSAlcyIsIG5hbWUpOwogCiAJaWYgKEpGU19TQkkoZGlwLT5pX3NiKS0+bW50ZmxhZyAmIEpGU19PUzIpCi0JCWRlbnRyeS0+ZF9vcCA9ICZqZnNfY2lfZGVudHJ5X29wZXJhdGlvbnM7CisJCWRfc2V0X2Rfb3AoZGVudHJ5LCAmamZzX2NpX2RlbnRyeV9vcGVyYXRpb25zKTsKIAogCWlmICgobmFtZVswXSA9PSAnLicpICYmIChsZW4gPT0gMSkpCiAJCWludW0gPSBkaXAtPmlfaW5vOwpAQCAtMTQ5NCw3ICsxNDk1LDcgQEAKIAlkZW50cnkgPSBkX3NwbGljZV9hbGlhcyhpcCwgZGVudHJ5KTsKIAogCWlmIChkZW50cnkgJiYgKEpGU19TQkkoZGlwLT5pX3NiKS0+bW50ZmxhZyAmIEpGU19PUzIpKQotCQlkZW50cnktPmRfb3AgPSAmamZzX2NpX2RlbnRyeV9vcGVyYXRpb25zOworCQlkX3NldF9kX29wKGRlbnRyeSwgJmpmc19jaV9kZW50cnlfb3BlcmF0aW9ucyk7CiAKIAlyZXR1cm4gZGVudHJ5OwogfQpAQCAtMTU3Myw3ICsxNTc0LDggQEAKIAkubGxzZWVrCQk9IGdlbmVyaWNfZmlsZV9sbHNlZWssCiB9OwogCi1zdGF0aWMgaW50IGpmc19jaV9oYXNoKHN0cnVjdCBkZW50cnkgKmRpciwgc3RydWN0IHFzdHIgKnRoaXMpCitzdGF0aWMgaW50IGpmc19jaV9oYXNoKGNvbnN0IHN0cnVjdCBkZW50cnkgKmRpciwgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSwKKwkJc3RydWN0IHFzdHIgKnRoaXMpCiB7CiAJdW5zaWduZWQgbG9uZyBoYXNoOwogCWludCBpOwpAQCAtMTU4NiwzMiArMTU4OCw2MyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGpmc19jaV9jb21wYXJlKHN0cnVjdCBkZW50cnkgKmRpciwgc3RydWN0IHFzdHIgKmEsIHN0cnVjdCBxc3RyICpiKQorc3RhdGljIGludCBqZnNfY2lfY29tcGFyZShjb25zdCBzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsCisJCWNvbnN0IHN0cnVjdCBpbm9kZSAqcGlub2RlLAorCQljb25zdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCXVuc2lnbmVkIGludCBsZW4sIGNvbnN0IGNoYXIgKnN0ciwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpCiB7CiAJaW50IGksIHJlc3VsdCA9IDE7CiAKLQlpZiAoYS0+bGVuICE9IGItPmxlbikKKwlpZiAobGVuICE9IG5hbWUtPmxlbikKIAkJZ290byBvdXQ7Ci0JZm9yIChpPTA7IGkgPCBhLT5sZW47IGkrKykgewotCQlpZiAodG9sb3dlcihhLT5uYW1lW2ldKSAhPSB0b2xvd2VyKGItPm5hbWVbaV0pKQorCWZvciAoaT0wOyBpIDwgbGVuOyBpKyspIHsKKwkJaWYgKHRvbG93ZXIoc3RyW2ldKSAhPSB0b2xvd2VyKG5hbWUtPm5hbWVbaV0pKQogCQkJZ290byBvdXQ7CiAJfQogCXJlc3VsdCA9IDA7Ci0KLQkvKgotCSAqIFdlIHdhbnQgY3JlYXRlcyB0byBwcmVzZXJ2ZSBjYXNlLiAgQSBuZWdhdGl2ZSBkZW50cnksIGEsIHRoYXQKLQkgKiBoYXMgYSBkaWZmZXJlbnQgY2FzZSB0aGFuIGIgbWF5IGNhdXNlIGEgbmV3IGVudHJ5IHRvIGJlIGNyZWF0ZWQKLQkgKiB3aXRoIHRoZSB3cm9uZyBjYXNlLiAgU2luY2Ugd2UgY2FuJ3QgdGVsbCBpZiBhIGNvbWVzIGZyb20gYSBuZWdhdGl2ZQotCSAqIGRlbnRyeSwgd2UgYmxpbmRseSByZXBsYWNlIGl0IHdpdGggYi4gIFRoaXMgc2hvdWxkIGJlIGhhcm1sZXNzIGlmCi0JICogYSBpcyBub3QgYSBuZWdhdGl2ZSBkZW50cnkuCi0JICovCi0JbWVtY3B5KCh1bnNpZ25lZCBjaGFyICopYS0+bmFtZSwgYi0+bmFtZSwgYS0+bGVuKTsKIG91dDoKIAlyZXR1cm4gcmVzdWx0OwogfQogCitzdGF0aWMgaW50IGpmc19jaV9yZXZhbGlkYXRlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IG5hbWVpZGF0YSAqbmQpCit7CisJaWYgKG5kLT5mbGFncyAmIExPT0tVUF9SQ1UpCisJCXJldHVybiAtRUNISUxEOworCS8qCisJICogVGhpcyBpcyBub3QgbmVnYXRpdmUgZGVudHJ5LiBBbHdheXMgdmFsaWQuCisJICoKKwkgKiBOb3RlLCByZW5hbWUoKSB0byBleGlzdGluZyBkaXJlY3RvcnkgZW50cnkgd2lsbCBoYXZlIC0+ZF9pbm9kZSwKKwkgKiBhbmQgd2lsbCB1c2UgZXhpc3RpbmcgbmFtZSB3aGljaCBpc24ndCBzcGVjaWZpZWQgbmFtZSBieSB1c2VyLgorCSAqCisJICogV2UgbWF5IGJlIGFibGUgdG8gZHJvcCB0aGlzIHBvc2l0aXZlIGRlbnRyeSBoZXJlLiBCdXQgZHJvcHBpbmcKKwkgKiBwb3NpdGl2ZSBkZW50cnkgaXNuJ3QgZ29vZCBpZGVhLiBTbyBpdCdzIHVuc3VwcG9ydGVkIGxpa2UKKwkgKiByZW5hbWUoImZpbGVuYW1lIiwgIkZJTEVOQU1FIikgZm9yIG5vdy4KKwkgKi8KKwlpZiAoZGVudHJ5LT5kX2lub2RlKQorCQlyZXR1cm4gMTsKKworCS8qCisJICogVGhpcyBtYXkgYmUgbmZzZCAob3Igc29tZXRoaW5nKSwgYW55d2F5LCB3ZSBjYW4ndCBzZWUgdGhlCisJICogaW50ZW50IG9mIHRoaXMuIFNvLCBzaW5jZSB0aGlzIGNhbiBiZSBmb3IgY3JlYXRpb24sIGRyb3AgaXQuCisJICovCisJaWYgKCFuZCkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIERyb3AgdGhlIG5lZ2F0aXZlIGRlbnRyeSwgaW4gb3JkZXIgdG8gbWFrZSBzdXJlIHRvIHVzZSB0aGUKKwkgKiBjYXNlIHNlbnNpdGl2ZSBuYW1lIHdoaWNoIGlzIHNwZWNpZmllZCBieSB1c2VyIGlmIHRoaXMgaXMKKwkgKiBmb3IgY3JlYXRpb24uCisJICovCisJaWYgKCEobmQtPmZsYWdzICYgKExPT0tVUF9DT05USU5VRSB8IExPT0tVUF9QQVJFTlQpKSkgeworCQlpZiAobmQtPmZsYWdzICYgKExPT0tVUF9DUkVBVEUgfCBMT09LVVBfUkVOQU1FX1RBUkdFVCkpCisJCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDE7Cit9CisKIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBqZnNfY2lfZGVudHJ5X29wZXJhdGlvbnMgPQogewogCS5kX2hhc2ggPSBqZnNfY2lfaGFzaCwKIAkuZF9jb21wYXJlID0gamZzX2NpX2NvbXBhcmUsCisJLmRfcmV2YWxpZGF0ZSA9IGpmc19jaV9yZXZhbGlkYXRlLAogfTsKZGlmZiAtLWdpdCBhL2ZzL2pmcy9zdXBlci5jIGIvZnMvamZzL3N1cGVyLmMKaW5kZXggMDY2OWZjMS4uMzE1MGQ3NiAxMDA2NDQKLS0tIGEvZnMvamZzL3N1cGVyLmMKKysrIGIvZnMvamZzL3N1cGVyLmMKQEAgLTExNSw2ICsxMTUsMTQgQEAKIAlyZXR1cm4gJmpmc19pbm9kZS0+dmZzX2lub2RlOwogfQogCitzdGF0aWMgdm9pZCBqZnNfaV9jYWxsYmFjayhzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgaW5vZGUsIGlfcmN1KTsKKwlzdHJ1Y3QgamZzX2lub2RlX2luZm8gKmppID0gSkZTX0lQKGlub2RlKTsKKwlJTklUX0xJU1RfSEVBRCgmaW5vZGUtPmlfZGVudHJ5KTsKKwlrbWVtX2NhY2hlX2ZyZWUoamZzX2lub2RlX2NhY2hlcCwgamkpOworfQorCiBzdGF0aWMgdm9pZCBqZnNfZGVzdHJveV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCXN0cnVjdCBqZnNfaW5vZGVfaW5mbyAqamkgPSBKRlNfSVAoaW5vZGUpOwpAQCAtMTI4LDcgKzEzNiw3IEBACiAJCWppLT5hY3RpdmVfYWcgPSAtMTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxKCZqaS0+YWdfbG9jayk7Ci0Ja21lbV9jYWNoZV9mcmVlKGpmc19pbm9kZV9jYWNoZXAsIGppKTsKKwljYWxsX3JjdSgmaW5vZGUtPmlfcmN1LCBqZnNfaV9jYWxsYmFjayk7CiB9CiAKIHN0YXRpYyBpbnQgamZzX3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpCkBAIC01MTcsNyArNTI1LDcgQEAKIAkJZ290byBvdXRfbm9fcm9vdDsKIAogCWlmIChzYmktPm1udGZsYWcgJiBKRlNfT1MyKQotCQlzYi0+c19yb290LT5kX29wID0gJmpmc19jaV9kZW50cnlfb3BlcmF0aW9uczsKKwkJZF9zZXRfZF9vcChzYi0+c19yb290LCAmamZzX2NpX2RlbnRyeV9vcGVyYXRpb25zKTsKIAogCS8qIGxvZ2ljYWwgYmxvY2tzIGFyZSByZXByZXNlbnRlZCBieSA0MCBiaXRzIGluIHB4ZF90LCBldGMuICovCiAJc2ItPnNfbWF4Ynl0ZXMgPSAoKHU2NCkgc2ItPnNfYmxvY2tzaXplKSA8PCA0MDsKZGlmZiAtLWdpdCBhL2ZzL2xpYmZzLmMgYi9mcy9saWJmcy5jCmluZGV4IGEzYWNjZGYuLjg4OTMxMWUgMTAwNjQ0Ci0tLSBhL2ZzL2xpYmZzLmMKKysrIGIvZnMvbGliZnMuYwpAQCAtMTYsNiArMTYsMTEgQEAKIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKK3N0YXRpYyBpbmxpbmUgaW50IHNpbXBsZV9wb3NpdGl2ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCit7CisJcmV0dXJuIGRlbnRyeS0+ZF9pbm9kZSAmJiAhZF91bmhhc2hlZChkZW50cnkpOworfQorCiBpbnQgc2ltcGxlX2dldGF0dHIoc3RydWN0IHZmc21vdW50ICptbnQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAkJICAgc3RydWN0IGtzdGF0ICpzdGF0KQogewpAQCAtMzcsNyArNDIsNyBAQAogICogUmV0YWluaW5nIG5lZ2F0aXZlIGRlbnRyaWVzIGZvciBhbiBpbi1tZW1vcnkgZmlsZXN5c3RlbSBqdXN0IHdhc3RlcwogICogbWVtb3J5IGFuZCBsb29rdXAgdGltZTogYXJyYW5nZSBmb3IgdGhlbSB0byBiZSBkZWxldGVkIGltbWVkaWF0ZWx5LgogICovCi1zdGF0aWMgaW50IHNpbXBsZV9kZWxldGVfZGVudHJ5KHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3N0YXRpYyBpbnQgc2ltcGxlX2RlbGV0ZV9kZW50cnkoY29uc3Qgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogewogCXJldHVybiAxOwogfQpAQCAtNTQsNyArNTksNyBAQAogCiAJaWYgKGRlbnRyeS0+ZF9uYW1lLmxlbiA+IE5BTUVfTUFYKQogCQlyZXR1cm4gRVJSX1BUUigtRU5BTUVUT09MT05HKTsKLQlkZW50cnktPmRfb3AgPSAmc2ltcGxlX2RlbnRyeV9vcGVyYXRpb25zOworCWRfc2V0X2Rfb3AoZGVudHJ5LCAmc2ltcGxlX2RlbnRyeV9vcGVyYXRpb25zKTsKIAlkX2FkZChkZW50cnksIE5VTEwpOwogCXJldHVybiBOVUxMOwogfQpAQCAtNzYsNyArODEsOCBAQAogCiBsb2ZmX3QgZGNhY2hlX2Rpcl9sc2VlayhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgaW50IG9yaWdpbikKIHsKLQltdXRleF9sb2NrKCZmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKKwlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBmaWxlLT5mX3BhdGguZGVudHJ5OworCW11dGV4X2xvY2soJmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CiAJc3dpdGNoIChvcmlnaW4pIHsKIAkJY2FzZSAxOgogCQkJb2Zmc2V0ICs9IGZpbGUtPmZfcG9zOwpAQCAtODQsNyArOTAsNyBAQAogCQkJaWYgKG9mZnNldCA+PSAwKQogCQkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJbXV0ZXhfdW5sb2NrKCZmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKKwkJCW11dGV4X3VubG9jaygmZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKIAkJCXJldHVybiAtRUlOVkFMOwogCX0KIAlpZiAob2Zmc2V0ICE9IGZpbGUtPmZfcG9zKSB7CkBAIC05NCwyMSArMTAwLDI0IEBACiAJCQlzdHJ1Y3QgZGVudHJ5ICpjdXJzb3IgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJCQlsb2ZmX3QgbiA9IGZpbGUtPmZfcG9zIC0gMjsKIAotCQkJc3Bpbl9sb2NrKCZkY2FjaGVfbG9jayk7CisJCQlzcGluX2xvY2soJmRlbnRyeS0+ZF9sb2NrKTsKKwkJCS8qIGRfbG9jayBub3QgcmVxdWlyZWQgZm9yIGN1cnNvciAqLwogCQkJbGlzdF9kZWwoJmN1cnNvci0+ZF91LmRfY2hpbGQpOwotCQkJcCA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfc3ViZGlycy5uZXh0OwotCQkJd2hpbGUgKG4gJiYgcCAhPSAmZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9zdWJkaXJzKSB7CisJCQlwID0gZGVudHJ5LT5kX3N1YmRpcnMubmV4dDsKKwkJCXdoaWxlIChuICYmIHAgIT0gJmRlbnRyeS0+ZF9zdWJkaXJzKSB7CiAJCQkJc3RydWN0IGRlbnRyeSAqbmV4dDsKIAkJCQluZXh0ID0gbGlzdF9lbnRyeShwLCBzdHJ1Y3QgZGVudHJ5LCBkX3UuZF9jaGlsZCk7Ci0JCQkJaWYgKCFkX3VuaGFzaGVkKG5leHQpICYmIG5leHQtPmRfaW5vZGUpCisJCQkJc3Bpbl9sb2NrX25lc3RlZCgmbmV4dC0+ZF9sb2NrLCBERU5UUllfRF9MT0NLX05FU1RFRCk7CisJCQkJaWYgKHNpbXBsZV9wb3NpdGl2ZShuZXh0KSkKIAkJCQkJbi0tOworCQkJCXNwaW5fdW5sb2NrKCZuZXh0LT5kX2xvY2spOwogCQkJCXAgPSBwLT5uZXh0OwogCQkJfQogCQkJbGlzdF9hZGRfdGFpbCgmY3Vyc29yLT5kX3UuZF9jaGlsZCwgcCk7Ci0JCQlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOworCQkJc3Bpbl91bmxvY2soJmRlbnRyeS0+ZF9sb2NrKTsKIAkJfQogCX0KLQltdXRleF91bmxvY2soJmZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOworCW11dGV4X3VubG9jaygmZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKIAlyZXR1cm4gb2Zmc2V0OwogfQogCkBAIC0xNDgsMjkgKzE1NywzNSBAQAogCQkJaSsrOwogCQkJLyogZmFsbHRocm91Z2ggKi8KIAkJZGVmYXVsdDoKLQkJCXNwaW5fbG9jaygmZGNhY2hlX2xvY2spOworCQkJc3Bpbl9sb2NrKCZkZW50cnktPmRfbG9jayk7CiAJCQlpZiAoZmlscC0+Zl9wb3MgPT0gMikKIAkJCQlsaXN0X21vdmUocSwgJmRlbnRyeS0+ZF9zdWJkaXJzKTsKIAogCQkJZm9yIChwPXEtPm5leHQ7IHAgIT0gJmRlbnRyeS0+ZF9zdWJkaXJzOyBwPXAtPm5leHQpIHsKIAkJCQlzdHJ1Y3QgZGVudHJ5ICpuZXh0OwogCQkJCW5leHQgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBkZW50cnksIGRfdS5kX2NoaWxkKTsKLQkJCQlpZiAoZF91bmhhc2hlZChuZXh0KSB8fCAhbmV4dC0+ZF9pbm9kZSkKKwkJCQlzcGluX2xvY2tfbmVzdGVkKCZuZXh0LT5kX2xvY2ssIERFTlRSWV9EX0xPQ0tfTkVTVEVEKTsKKwkJCQlpZiAoIXNpbXBsZV9wb3NpdGl2ZShuZXh0KSkgeworCQkJCQlzcGluX3VubG9jaygmbmV4dC0+ZF9sb2NrKTsKIAkJCQkJY29udGludWU7CisJCQkJfQogCi0JCQkJc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKKwkJCQlzcGluX3VubG9jaygmbmV4dC0+ZF9sb2NrKTsKKwkJCQlzcGluX3VubG9jaygmZGVudHJ5LT5kX2xvY2spOwogCQkJCWlmIChmaWxsZGlyKGRpcmVudCwgbmV4dC0+ZF9uYW1lLm5hbWUsIAogCQkJCQkgICAgbmV4dC0+ZF9uYW1lLmxlbiwgZmlscC0+Zl9wb3MsIAogCQkJCQkgICAgbmV4dC0+ZF9pbm9kZS0+aV9pbm8sIAogCQkJCQkgICAgZHRfdHlwZShuZXh0LT5kX2lub2RlKSkgPCAwKQogCQkJCQlyZXR1cm4gMDsKLQkJCQlzcGluX2xvY2soJmRjYWNoZV9sb2NrKTsKKwkJCQlzcGluX2xvY2soJmRlbnRyeS0+ZF9sb2NrKTsKKwkJCQlzcGluX2xvY2tfbmVzdGVkKCZuZXh0LT5kX2xvY2ssIERFTlRSWV9EX0xPQ0tfTkVTVEVEKTsKIAkJCQkvKiBuZXh0IGlzIHN0aWxsIGFsaXZlICovCiAJCQkJbGlzdF9tb3ZlKHEsIHApOworCQkJCXNwaW5fdW5sb2NrKCZuZXh0LT5kX2xvY2spOwogCQkJCXAgPSBxOwogCQkJCWZpbHAtPmZfcG9zKys7CiAJCQl9Ci0JCQlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOworCQkJc3Bpbl91bmxvY2soJmRlbnRyeS0+ZF9sb2NrKTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0yNTksMjMgKzI3NCwyMyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBzaW1wbGVfcG9zaXRpdmUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQotewotCXJldHVybiBkZW50cnktPmRfaW5vZGUgJiYgIWRfdW5oYXNoZWQoZGVudHJ5KTsKLX0KLQogaW50IHNpbXBsZV9lbXB0eShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiB7CiAJc3RydWN0IGRlbnRyeSAqY2hpbGQ7CiAJaW50IHJldCA9IDA7CiAKLQlzcGluX2xvY2soJmRjYWNoZV9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNoaWxkLCAmZGVudHJ5LT5kX3N1YmRpcnMsIGRfdS5kX2NoaWxkKQotCQlpZiAoc2ltcGxlX3Bvc2l0aXZlKGNoaWxkKSkKKwlzcGluX2xvY2soJmRlbnRyeS0+ZF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNoaWxkLCAmZGVudHJ5LT5kX3N1YmRpcnMsIGRfdS5kX2NoaWxkKSB7CisJCXNwaW5fbG9ja19uZXN0ZWQoJmNoaWxkLT5kX2xvY2ssIERFTlRSWV9EX0xPQ0tfTkVTVEVEKTsKKwkJaWYgKHNpbXBsZV9wb3NpdGl2ZShjaGlsZCkpIHsKKwkJCXNwaW5fdW5sb2NrKCZjaGlsZC0+ZF9sb2NrKTsKIAkJCWdvdG8gb3V0OworCQl9CisJCXNwaW5fdW5sb2NrKCZjaGlsZC0+ZF9sb2NrKTsKKwl9CiAJcmV0ID0gMTsKIG91dDoKLQlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOworCXNwaW5fdW5sb2NrKCZkZW50cnktPmRfbG9jayk7CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvbG9ja3MuYyBiL2ZzL2xvY2tzLmMKaW5kZXggODcyOTM0Ny4uMDg0MTViMiAxMDA2NDQKLS0tIGEvZnMvbG9ja3MuYworKysgYi9mcy9sb2Nrcy5jCkBAIC0xMzg5LDcgKzEzODksNyBAQAogCQlpZiAoKGFyZyA9PSBGX1JETENLKSAmJiAoYXRvbWljX3JlYWQoJmlub2RlLT5pX3dyaXRlY291bnQpID4gMCkpCiAJCQlnb3RvIG91dDsKIAkJaWYgKChhcmcgPT0gRl9XUkxDSykKLQkJICAgICYmICgoYXRvbWljX3JlYWQoJmRlbnRyeS0+ZF9jb3VudCkgPiAxKQorCQkgICAgJiYgKChkZW50cnktPmRfY291bnQgPiAxKQogCQkJfHwgKGF0b21pY19yZWFkKCZpbm9kZS0+aV9jb3VudCkgPiAxKSkpCiAJCQlnb3RvIG91dDsKIAl9CmRpZmYgLS1naXQgYS9mcy9sb2dmcy9kaXIuYyBiL2ZzL2xvZ2ZzL2Rpci5jCmluZGV4IDQwOWRmZDYuLmY5ZGRmMGMgMTAwNjQ0Ci0tLSBhL2ZzL2xvZ2ZzL2Rpci5jCisrKyBiL2ZzL2xvZ2ZzL2Rpci5jCkBAIC01NTUsOSArNTU1LDExIEBACiAJcmV0dXJuIF9fbG9nZnNfY3JlYXRlKGRpciwgZGVudHJ5LCBpbm9kZSwgdGFyZ2V0LCBkZXN0bGVuKTsKIH0KIAotc3RhdGljIGludCBsb2dmc19wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKQorc3RhdGljIGludCBsb2dmc19wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7Ci0JcmV0dXJuIGdlbmVyaWNfcGVybWlzc2lvbihpbm9kZSwgbWFzaywgTlVMTCk7CisJaWYgKGZsYWdzICYgSVBFUk1fRkxBR19SQ1UpCisJCXJldHVybiAtRUNISUxEOworCXJldHVybiBnZW5lcmljX3Blcm1pc3Npb24oaW5vZGUsIG1hc2ssIGZsYWdzLCBOVUxMKTsKIH0KIAogc3RhdGljIGludCBsb2dmc19saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLApkaWZmIC0tZ2l0IGEvZnMvbG9nZnMvaW5vZGUuYyBiL2ZzL2xvZ2ZzL2lub2RlLmMKaW5kZXggZDhjNzFlYy4uMDNiOGMyNCAxMDA2NDQKLS0tIGEvZnMvbG9nZnMvaW5vZGUuYworKysgYi9mcy9sb2dmcy9pbm9kZS5jCkBAIC0xNDEsMTMgKzE0MSwyMCBAQAogCXJldHVybiBfX2xvZ2ZzX2lnZXQoc2IsIGlubyk7CiB9CiAKK3N0YXRpYyB2b2lkIGxvZ2ZzX2lfY2FsbGJhY2soc3RydWN0IHJjdV9oZWFkICpoZWFkKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGlub2RlLCBpX3JjdSk7CisJSU5JVF9MSVNUX0hFQUQoJmlub2RlLT5pX2RlbnRyeSk7CisJa21lbV9jYWNoZV9mcmVlKGxvZ2ZzX2lub2RlX2NhY2hlLCBsb2dmc19pbm9kZShpbm9kZSkpOworfQorCiBzdGF0aWMgdm9pZCBfX2xvZ2ZzX2Rlc3Ryb3lfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlzdHJ1Y3QgbG9nZnNfaW5vZGUgKmxpID0gbG9nZnNfaW5vZGUoaW5vZGUpOwogCiAJQlVHX09OKGxpLT5saV9ibG9jayk7CiAJbGlzdF9kZWwoJmxpLT5saV9mcmVlaW5nX2xpc3QpOwotCWttZW1fY2FjaGVfZnJlZShsb2dmc19pbm9kZV9jYWNoZSwgbGkpOworCWNhbGxfcmN1KCZpbm9kZS0+aV9yY3UsIGxvZ2ZzX2lfY2FsbGJhY2spOwogfQogCiBzdGF0aWMgdm9pZCBsb2dmc19kZXN0cm95X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCmRpZmYgLS1naXQgYS9mcy9taW5peC9pbm9kZS5jIGIvZnMvbWluaXgvaW5vZGUuYwppbmRleCBmYjIwMjA4Li5hZTBiODNmIDEwMDY0NAotLS0gYS9mcy9taW5peC9pbm9kZS5jCisrKyBiL2ZzL21pbml4L2lub2RlLmMKQEAgLTY4LDkgKzY4LDE2IEBACiAJcmV0dXJuICZlaS0+dmZzX2lub2RlOwogfQogCitzdGF0aWMgdm9pZCBtaW5peF9pX2NhbGxiYWNrKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBpbm9kZSwgaV9yY3UpOworCUlOSVRfTElTVF9IRUFEKCZpbm9kZS0+aV9kZW50cnkpOworCWttZW1fY2FjaGVfZnJlZShtaW5peF9pbm9kZV9jYWNoZXAsIG1pbml4X2koaW5vZGUpKTsKK30KKwogc3RhdGljIHZvaWQgbWluaXhfZGVzdHJveV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewotCWttZW1fY2FjaGVfZnJlZShtaW5peF9pbm9kZV9jYWNoZXAsIG1pbml4X2koaW5vZGUpKTsKKwljYWxsX3JjdSgmaW5vZGUtPmlfcmN1LCBtaW5peF9pX2NhbGxiYWNrKTsKIH0KIAogc3RhdGljIHZvaWQgaW5pdF9vbmNlKHZvaWQgKmZvbykKZGlmZiAtLWdpdCBhL2ZzL21pbml4L25hbWVpLmMgYi9mcy9taW5peC9uYW1laS5jCmluZGV4IGMwZDM1YTMuLjFiOWUwNzcgMTAwNjQ0Ci0tLSBhL2ZzL21pbml4L25hbWVpLmMKKysrIGIvZnMvbWluaXgvbmFtZWkuYwpAQCAtMjMsNyArMjMsNyBAQAogCXN0cnVjdCBpbm9kZSAqIGlub2RlID0gTlVMTDsKIAlpbm9fdCBpbm87CiAKLQlkZW50cnktPmRfb3AgPSBkaXItPmlfc2ItPnNfcm9vdC0+ZF9vcDsKKwlkX3NldF9kX29wKGRlbnRyeSwgZGlyLT5pX3NiLT5zX3Jvb3QtPmRfb3ApOwogCiAJaWYgKGRlbnRyeS0+ZF9uYW1lLmxlbiA+IG1pbml4X3NiKGRpci0+aV9zYiktPnNfbmFtZWxlbikKIAkJcmV0dXJuIEVSUl9QVFIoLUVOQU1FVE9PTE9ORyk7CmRpZmYgLS1naXQgYS9mcy9uYW1laS5jIGIvZnMvbmFtZWkuYwppbmRleCA0ZmY3Y2E1Li4yNGVjZTEwIDEwMDY0NAotLS0gYS9mcy9uYW1laS5jCisrKyBiL2ZzL25hbWVpLmMKQEAgLTE2OSw4ICsxNjksOCBAQAogLyoKICAqIFRoaXMgZG9lcyBiYXNpYyBQT1NJWCBBQ0wgcGVybWlzc2lvbiBjaGVja2luZwogICovCi1zdGF0aWMgaW50IGFjbF9wZXJtaXNzaW9uX2NoZWNrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrLAotCQlpbnQgKCpjaGVja19hY2wpKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKSkKK3N0YXRpYyBpbnQgYWNsX3Blcm1pc3Npb25fY2hlY2soc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2ssIHVuc2lnbmVkIGludCBmbGFncywKKwkJaW50ICgqY2hlY2tfYWNsKShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaywgdW5zaWduZWQgaW50IGZsYWdzKSkKIHsKIAl1bW9kZV90CQkJbW9kZSA9IGlub2RlLT5pX21vZGU7CiAKQEAgLTE4MCw3ICsxODAsNyBAQAogCQltb2RlID4+PSA2OwogCWVsc2UgewogCQlpZiAoSVNfUE9TSVhBQ0woaW5vZGUpICYmIChtb2RlICYgU19JUldYRykgJiYgY2hlY2tfYWNsKSB7Ci0JCQlpbnQgZXJyb3IgPSBjaGVja19hY2woaW5vZGUsIG1hc2spOworCQkJaW50IGVycm9yID0gY2hlY2tfYWNsKGlub2RlLCBtYXNrLCBmbGFncyk7CiAJCQlpZiAoZXJyb3IgIT0gLUVBR0FJTikKIAkJCQlyZXR1cm4gZXJyb3I7CiAJCX0KQEAgLTE5OCwyNSArMTk4LDMwIEBACiB9CiAKIC8qKgotICogZ2VuZXJpY19wZXJtaXNzaW9uICAtICBjaGVjayBmb3IgYWNjZXNzIHJpZ2h0cyBvbiBhIFBvc2l4LWxpa2UgZmlsZXN5c3RlbQorICogZ2VuZXJpY19wZXJtaXNzaW9uIC0gIGNoZWNrIGZvciBhY2Nlc3MgcmlnaHRzIG9uIGEgUG9zaXgtbGlrZSBmaWxlc3lzdGVtCiAgKiBAaW5vZGU6CWlub2RlIHRvIGNoZWNrIGFjY2VzcyByaWdodHMgZm9yCiAgKiBAbWFzazoJcmlnaHQgdG8gY2hlY2sgZm9yICglTUFZX1JFQUQsICVNQVlfV1JJVEUsICVNQVlfRVhFQykKICAqIEBjaGVja19hY2w6CW9wdGlvbmFsIGNhbGxiYWNrIHRvIGNoZWNrIGZvciBQb3NpeCBBQ0xzCisgKiBAZmxhZ3M6CUlQRVJNX0ZMQUdfIGZsYWdzLgogICoKICAqIFVzZWQgdG8gY2hlY2sgZm9yIHJlYWQvd3JpdGUvZXhlY3V0ZSBwZXJtaXNzaW9ucyBvbiBhIGZpbGUuCiAgKiBXZSB1c2UgImZzdWlkIiBmb3IgdGhpcywgbGV0dGluZyB1cyBzZXQgYXJiaXRyYXJ5IHBlcm1pc3Npb25zCiAgKiBmb3IgZmlsZXN5c3RlbSBhY2Nlc3Mgd2l0aG91dCBjaGFuZ2luZyB0aGUgIm5vcm1hbCIgdWlkcyB3aGljaAotICogYXJlIHVzZWQgZm9yIG90aGVyIHRoaW5ncy4uCisgKiBhcmUgdXNlZCBmb3Igb3RoZXIgdGhpbmdzLgorICoKKyAqIGdlbmVyaWNfcGVybWlzc2lvbiBpcyByY3Utd2FsayBhd2FyZS4gSXQgcmV0dXJucyAtRUNISUxEIGluIGNhc2UgYW4gcmN1LXdhbGsKKyAqIHJlcXVlc3QgY2Fubm90IGJlIHNhdGlzZmllZCAoZWcuIHJlcXVpcmVzIGJsb2NraW5nIG9yIHRvbyBtdWNoIGNvbXBsZXhpdHkpLgorICogSXQgd291bGQgdGhlbiBiZSBjYWxsZWQgYWdhaW4gaW4gcmVmLXdhbGsgbW9kZS4KICAqLwotaW50IGdlbmVyaWNfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaywKLQkJaW50ICgqY2hlY2tfYWNsKShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaykpCitpbnQgZ2VuZXJpY19wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrLCB1bnNpZ25lZCBpbnQgZmxhZ3MsCisJaW50ICgqY2hlY2tfYWNsKShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaywgdW5zaWduZWQgaW50IGZsYWdzKSkKIHsKIAlpbnQgcmV0OwogCiAJLyoKIAkgKiBEbyB0aGUgYmFzaWMgUE9TSVggQUNMIHBlcm1pc3Npb24gY2hlY2tzLgogCSAqLwotCXJldCA9IGFjbF9wZXJtaXNzaW9uX2NoZWNrKGlub2RlLCBtYXNrLCBjaGVja19hY2wpOworCXJldCA9IGFjbF9wZXJtaXNzaW9uX2NoZWNrKGlub2RlLCBtYXNrLCBmbGFncywgY2hlY2tfYWNsKTsKIAlpZiAocmV0ICE9IC1FQUNDRVMpCiAJCXJldHVybiByZXQ7CiAKQEAgLTI3MSw5ICsyNzYsMTAgQEAKIAl9CiAKIAlpZiAoaW5vZGUtPmlfb3AtPnBlcm1pc3Npb24pCi0JCXJldHZhbCA9IGlub2RlLT5pX29wLT5wZXJtaXNzaW9uKGlub2RlLCBtYXNrKTsKKwkJcmV0dmFsID0gaW5vZGUtPmlfb3AtPnBlcm1pc3Npb24oaW5vZGUsIG1hc2ssIDApOwogCWVsc2UKLQkJcmV0dmFsID0gZ2VuZXJpY19wZXJtaXNzaW9uKGlub2RlLCBtYXNrLCBpbm9kZS0+aV9vcC0+Y2hlY2tfYWNsKTsKKwkJcmV0dmFsID0gZ2VuZXJpY19wZXJtaXNzaW9uKGlub2RlLCBtYXNrLCAwLAorCQkJCWlub2RlLT5pX29wLT5jaGVja19hY2wpOwogCiAJaWYgKHJldHZhbCkKIAkJcmV0dXJuIHJldHZhbDsKQEAgLTM2Miw2ICszNjgsMTggQEAKIEVYUE9SVF9TWU1CT0wocGF0aF9nZXQpOwogCiAvKioKKyAqIHBhdGhfZ2V0X2xvbmcgLSBnZXQgYSBsb25nIHJlZmVyZW5jZSB0byBhIHBhdGgKKyAqIEBwYXRoOiBwYXRoIHRvIGdldCB0aGUgcmVmZXJlbmNlIHRvCisgKgorICogR2l2ZW4gYSBwYXRoIGluY3JlbWVudCB0aGUgcmVmZXJlbmNlIGNvdW50IHRvIHRoZSBkZW50cnkgYW5kIHRoZSB2ZnNtb3VudC4KKyAqLwordm9pZCBwYXRoX2dldF9sb25nKHN0cnVjdCBwYXRoICpwYXRoKQoreworCW1udGdldF9sb25nKHBhdGgtPm1udCk7CisJZGdldChwYXRoLT5kZW50cnkpOworfQorCisvKioKICAqIHBhdGhfcHV0IC0gcHV0IGEgcmVmZXJlbmNlIHRvIGEgcGF0aAogICogQHBhdGg6IHBhdGggdG8gcHV0IHRoZSByZWZlcmVuY2UgdG8KICAqCkBAIC0zNzUsNiArMzkzLDE4NSBAQAogRVhQT1JUX1NZTUJPTChwYXRoX3B1dCk7CiAKIC8qKgorICogcGF0aF9wdXRfbG9uZyAtIHB1dCBhIGxvbmcgcmVmZXJlbmNlIHRvIGEgcGF0aAorICogQHBhdGg6IHBhdGggdG8gcHV0IHRoZSByZWZlcmVuY2UgdG8KKyAqCisgKiBHaXZlbiBhIHBhdGggZGVjcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQgdG8gdGhlIGRlbnRyeSBhbmQgdGhlIHZmc21vdW50LgorICovCit2b2lkIHBhdGhfcHV0X2xvbmcoc3RydWN0IHBhdGggKnBhdGgpCit7CisJZHB1dChwYXRoLT5kZW50cnkpOworCW1udHB1dF9sb25nKHBhdGgtPm1udCk7Cit9CisKKy8qKgorICogbmFtZWlkYXRhX2Ryb3BfcmN1IC0gZHJvcCB0aGlzIG5hbWVpZGF0YSBvdXQgb2YgcmN1LXdhbGsKKyAqIEBuZDogbmFtZWlkYXRhIHBhdGh3YWxrIGRhdGEgdG8gZHJvcAorICogUmV0dXJuczogMCBvbiBzdWNjZXNzLCAtRUNISUxEIG9uIGZhaWx1cmUKKyAqCisgKiBQYXRoIHdhbGtpbmcgaGFzIDIgbW9kZXMsIHJjdS13YWxrIGFuZCByZWYtd2FsayAoc2VlCisgKiBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BhdGgtbG9va3VwLnR4dCkuIF9fZHJvcF9yY3UqIGZ1bmN0aW9ucyBhdHRlbXB0CisgKiB0byBkcm9wIG91dCBvZiByY3Utd2FsayBtb2RlIGFuZCB0YWtlIG5vcm1hbCByZWZlcmVuY2UgY291bnRzIG9uIGRlbnRyaWVzCisgKiBhbmQgdmZzbW91bnRzIHRvIHRyYW5zaXRpb24gdG8gcmN1LXdhbGsgbW9kZS4gX19kcm9wX3JjdSogZnVuY3Rpb25zIHRha2UKKyAqIHJlZmNvdW50cyBhdCB0aGUgbGFzdCBrbm93biBnb29kIHBvaW50IGJlZm9yZSByY3Utd2FsayBnb3Qgc3R1Y2ssIHNvCisgKiByZWYtd2FsayBtYXkgY29udGludWUgZnJvbSB0aGVyZS4gSWYgdGhpcyBpcyBub3Qgc3VjY2Vzc2Z1bCAoZWcuIGEgc2VxY291bnQKKyAqIGhhcyBjaGFuZ2VkKSwgdGhlbiBmYWlsdXJlIGlzIHJldHVybmVkIGFuZCBwYXRoIHdhbGsgcmVzdGFydHMgZnJvbSB0aGUKKyAqIGJlZ2lubmluZyBpbiByZWYtd2FsayBtb2RlLgorICoKKyAqIG5hbWVpZGF0YV9kcm9wX3JjdSBhdHRlbXB0cyB0byBkcm9wIHRoZSBjdXJyZW50IG5kLT5wYXRoIGFuZCBuZC0+cm9vdCBpbnRvCisgKiByZWYtd2Fsay4gTXVzdCBiZSBjYWxsZWQgZnJvbSByY3Utd2FsayBjb250ZXh0LgorICovCitzdGF0aWMgaW50IG5hbWVpZGF0YV9kcm9wX3JjdShzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKK3sKKwlzdHJ1Y3QgZnNfc3RydWN0ICpmcyA9IGN1cnJlbnQtPmZzOworCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IG5kLT5wYXRoLmRlbnRyeTsKKworCUJVR19PTighKG5kLT5mbGFncyAmIExPT0tVUF9SQ1UpKTsKKwlpZiAobmQtPnJvb3QubW50KSB7CisJCXNwaW5fbG9jaygmZnMtPmxvY2spOworCQlpZiAobmQtPnJvb3QubW50ICE9IGZzLT5yb290Lm1udCB8fAorCQkJCW5kLT5yb290LmRlbnRyeSAhPSBmcy0+cm9vdC5kZW50cnkpCisJCQlnb3RvIGVycl9yb290OworCX0KKwlzcGluX2xvY2soJmRlbnRyeS0+ZF9sb2NrKTsKKwlpZiAoIV9fZF9yY3VfdG9fcmVmY291bnQoZGVudHJ5LCBuZC0+c2VxKSkKKwkJZ290byBlcnI7CisJQlVHX09OKG5kLT5pbm9kZSAhPSBkZW50cnktPmRfaW5vZGUpOworCXNwaW5fdW5sb2NrKCZkZW50cnktPmRfbG9jayk7CisJaWYgKG5kLT5yb290Lm1udCkgeworCQlwYXRoX2dldCgmbmQtPnJvb3QpOworCQlzcGluX3VubG9jaygmZnMtPmxvY2spOworCX0KKwltbnRnZXQobmQtPnBhdGgubW50KTsKKworCXJjdV9yZWFkX3VubG9jaygpOworCWJyX3JlYWRfdW5sb2NrKHZmc21vdW50X2xvY2spOworCW5kLT5mbGFncyAmPSB+TE9PS1VQX1JDVTsKKwlyZXR1cm4gMDsKK2VycjoKKwlzcGluX3VubG9jaygmZGVudHJ5LT5kX2xvY2spOworZXJyX3Jvb3Q6CisJaWYgKG5kLT5yb290Lm1udCkKKwkJc3Bpbl91bmxvY2soJmZzLT5sb2NrKTsKKwlyZXR1cm4gLUVDSElMRDsKK30KKworLyogVHJ5IHRvIGRyb3Agb3V0IG9mIHJjdS13YWxrIG1vZGUgaWYgd2Ugd2VyZSBpbiBpdCwgb3RoZXJ3aXNlIGRvIG5vdGhpbmcuICAqLworc3RhdGljIGlubGluZSBpbnQgbmFtZWlkYXRhX2Ryb3BfcmN1X21heWJlKHN0cnVjdCBuYW1laWRhdGEgKm5kKQoreworCWlmIChuZC0+ZmxhZ3MgJiBMT09LVVBfUkNVKQorCQlyZXR1cm4gbmFtZWlkYXRhX2Ryb3BfcmN1KG5kKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBuYW1laWRhdGFfZGVudHJ5X2Ryb3BfcmN1IC0gZHJvcCBuYW1laWRhdGEgYW5kIGRlbnRyeSBvdXQgb2YgcmN1LXdhbGsKKyAqIEBuZDogbmFtZWlkYXRhIHBhdGh3YWxrIGRhdGEgdG8gZHJvcAorICogQGRlbnRyeTogZGVudHJ5IHRvIGRyb3AKKyAqIFJldHVybnM6IDAgb24gc3VjY2VzcywgLUVDSElMRCBvbiBmYWlsdXJlCisgKgorICogbmFtZWlkYXRhX2RlbnRyeV9kcm9wX3JjdSBhdHRlbXB0cyB0byBkcm9wIHRoZSBjdXJyZW50IG5kLT5wYXRoIGFuZCBuZC0+cm9vdCwKKyAqIGFuZCBkZW50cnkgaW50byByZWYtd2Fsay4gQGRlbnRyeSBtdXN0IGJlIGEgcGF0aCBmb3VuZCBieSBhIGRvX2xvb2t1cCBjYWxsIG9uCisgKiBAbmQuIE11c3QgYmUgY2FsbGVkIGZyb20gcmN1LXdhbGsgY29udGV4dC4KKyAqLworc3RhdGljIGludCBuYW1laWRhdGFfZGVudHJ5X2Ryb3BfcmN1KHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCit7CisJc3RydWN0IGZzX3N0cnVjdCAqZnMgPSBjdXJyZW50LT5mczsKKwlzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQgPSBuZC0+cGF0aC5kZW50cnk7CisKKwlCVUdfT04oIShuZC0+ZmxhZ3MgJiBMT09LVVBfUkNVKSk7CisJaWYgKG5kLT5yb290Lm1udCkgeworCQlzcGluX2xvY2soJmZzLT5sb2NrKTsKKwkJaWYgKG5kLT5yb290Lm1udCAhPSBmcy0+cm9vdC5tbnQgfHwKKwkJCQluZC0+cm9vdC5kZW50cnkgIT0gZnMtPnJvb3QuZGVudHJ5KQorCQkJZ290byBlcnJfcm9vdDsKKwl9CisJc3Bpbl9sb2NrKCZwYXJlbnQtPmRfbG9jayk7CisJc3Bpbl9sb2NrX25lc3RlZCgmZGVudHJ5LT5kX2xvY2ssIERFTlRSWV9EX0xPQ0tfTkVTVEVEKTsKKwlpZiAoIV9fZF9yY3VfdG9fcmVmY291bnQoZGVudHJ5LCBuZC0+c2VxKSkKKwkJZ290byBlcnI7CisJLyoKKwkgKiBJZiB0aGUgc2VxdWVuY2UgY2hlY2sgb24gdGhlIGNoaWxkIGRlbnRyeSBwYXNzZWQsIHRoZW4gdGhlIGNoaWxkIGhhcworCSAqIG5vdCBiZWVuIHJlbW92ZWQgZnJvbSBpdHMgcGFyZW50LiBUaGlzIG1lYW5zIHRoZSBwYXJlbnQgZGVudHJ5IG11c3QKKwkgKiBiZSB2YWxpZCBhbmQgYWJsZSB0byB0YWtlIGEgcmVmZXJlbmNlIGF0IHRoaXMgcG9pbnQuCisJICovCisJQlVHX09OKCFJU19ST09UKGRlbnRyeSkgJiYgZGVudHJ5LT5kX3BhcmVudCAhPSBwYXJlbnQpOworCUJVR19PTighcGFyZW50LT5kX2NvdW50KTsKKwlwYXJlbnQtPmRfY291bnQrKzsKKwlzcGluX3VubG9jaygmZGVudHJ5LT5kX2xvY2spOworCXNwaW5fdW5sb2NrKCZwYXJlbnQtPmRfbG9jayk7CisJaWYgKG5kLT5yb290Lm1udCkgeworCQlwYXRoX2dldCgmbmQtPnJvb3QpOworCQlzcGluX3VubG9jaygmZnMtPmxvY2spOworCX0KKwltbnRnZXQobmQtPnBhdGgubW50KTsKKworCXJjdV9yZWFkX3VubG9jaygpOworCWJyX3JlYWRfdW5sb2NrKHZmc21vdW50X2xvY2spOworCW5kLT5mbGFncyAmPSB+TE9PS1VQX1JDVTsKKwlyZXR1cm4gMDsKK2VycjoKKwlzcGluX3VubG9jaygmZGVudHJ5LT5kX2xvY2spOworCXNwaW5fdW5sb2NrKCZwYXJlbnQtPmRfbG9jayk7CitlcnJfcm9vdDoKKwlpZiAobmQtPnJvb3QubW50KQorCQlzcGluX3VubG9jaygmZnMtPmxvY2spOworCXJldHVybiAtRUNISUxEOworfQorCisvKiBUcnkgdG8gZHJvcCBvdXQgb2YgcmN1LXdhbGsgbW9kZSBpZiB3ZSB3ZXJlIGluIGl0LCBvdGhlcndpc2UgZG8gbm90aGluZy4gICovCitzdGF0aWMgaW5saW5lIGludCBuYW1laWRhdGFfZGVudHJ5X2Ryb3BfcmN1X21heWJlKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCit7CisJaWYgKG5kLT5mbGFncyAmIExPT0tVUF9SQ1UpCisJCXJldHVybiBuYW1laWRhdGFfZGVudHJ5X2Ryb3BfcmN1KG5kLCBkZW50cnkpOworCXJldHVybiAwOworfQorCisvKioKKyAqIG5hbWVpZGF0YV9kcm9wX3JjdV9sYXN0IC0gZHJvcCBuYW1laWRhdGEgZW5kaW5nIHBhdGggd2FsayBvdXQgb2YgcmN1LXdhbGsKKyAqIEBuZDogbmFtZWlkYXRhIHBhdGh3YWxrIGRhdGEgdG8gZHJvcAorICogUmV0dXJuczogMCBvbiBzdWNjZXNzLCAtRUNISUxEIG9uIGZhaWx1cmUKKyAqCisgKiBuYW1laWRhdGFfZHJvcF9yY3VfbGFzdCBhdHRlbXB0cyB0byBkcm9wIHRoZSBjdXJyZW50IG5kLT5wYXRoIGludG8gcmVmLXdhbGsuCisgKiBuZC0+cGF0aCBzaG91bGQgYmUgdGhlIGZpbmFsIGVsZW1lbnQgb2YgdGhlIGxvb2t1cCwgc28gbmQtPnJvb3QgaXMgZGlzY2FyZGVkLgorICogTXVzdCBiZSBjYWxsZWQgZnJvbSByY3Utd2FsayBjb250ZXh0LgorICovCitzdGF0aWMgaW50IG5hbWVpZGF0YV9kcm9wX3JjdV9sYXN0KHN0cnVjdCBuYW1laWRhdGEgKm5kKQoreworCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IG5kLT5wYXRoLmRlbnRyeTsKKworCUJVR19PTighKG5kLT5mbGFncyAmIExPT0tVUF9SQ1UpKTsKKwluZC0+ZmxhZ3MgJj0gfkxPT0tVUF9SQ1U7CisJbmQtPnJvb3QubW50ID0gTlVMTDsKKwlzcGluX2xvY2soJmRlbnRyeS0+ZF9sb2NrKTsKKwlpZiAoIV9fZF9yY3VfdG9fcmVmY291bnQoZGVudHJ5LCBuZC0+c2VxKSkKKwkJZ290byBlcnJfdW5sb2NrOworCUJVR19PTihuZC0+aW5vZGUgIT0gZGVudHJ5LT5kX2lub2RlKTsKKwlzcGluX3VubG9jaygmZGVudHJ5LT5kX2xvY2spOworCisJbW50Z2V0KG5kLT5wYXRoLm1udCk7CisKKwlyY3VfcmVhZF91bmxvY2soKTsKKwlicl9yZWFkX3VubG9jayh2ZnNtb3VudF9sb2NrKTsKKworCXJldHVybiAwOworCitlcnJfdW5sb2NrOgorCXNwaW5fdW5sb2NrKCZkZW50cnktPmRfbG9jayk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CisJYnJfcmVhZF91bmxvY2sodmZzbW91bnRfbG9jayk7CisJcmV0dXJuIC1FQ0hJTEQ7Cit9CisKKy8qIFRyeSB0byBkcm9wIG91dCBvZiByY3Utd2FsayBtb2RlIGlmIHdlIHdlcmUgaW4gaXQsIG90aGVyd2lzZSBkbyBub3RoaW5nLiAgKi8KK3N0YXRpYyBpbmxpbmUgaW50IG5hbWVpZGF0YV9kcm9wX3JjdV9sYXN0X21heWJlKHN0cnVjdCBuYW1laWRhdGEgKm5kKQoreworCWlmIChsaWtlbHkobmQtPmZsYWdzICYgTE9PS1VQX1JDVSkpCisJCXJldHVybiBuYW1laWRhdGFfZHJvcF9yY3VfbGFzdChuZCk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgogICogcmVsZWFzZV9vcGVuX2ludGVudCAtIGZyZWUgdXAgb3BlbiBpbnRlbnQgcmVzb3VyY2VzCiAgKiBAbmQ6IHBvaW50ZXIgdG8gbmFtZWlkYXRhCiAgKi8KQEAgLTM4NiwxMCArNTgzLDI2IEBACiAJCWZwdXQobmQtPmludGVudC5vcGVuLmZpbGUpOwogfQogCitzdGF0aWMgaW50IGRfcmV2YWxpZGF0ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBuYW1laWRhdGEgKm5kKQoreworCWludCBzdGF0dXM7CisKKwlzdGF0dXMgPSBkZW50cnktPmRfb3AtPmRfcmV2YWxpZGF0ZShkZW50cnksIG5kKTsKKwlpZiAoc3RhdHVzID09IC1FQ0hJTEQpIHsKKwkJaWYgKG5hbWVpZGF0YV9kZW50cnlfZHJvcF9yY3UobmQsIGRlbnRyeSkpCisJCQlyZXR1cm4gc3RhdHVzOworCQlzdGF0dXMgPSBkZW50cnktPmRfb3AtPmRfcmV2YWxpZGF0ZShkZW50cnksIG5kKTsKKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQorCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBkZW50cnkgKgogZG9fcmV2YWxpZGF0ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBuYW1laWRhdGEgKm5kKQogewotCWludCBzdGF0dXMgPSBkZW50cnktPmRfb3AtPmRfcmV2YWxpZGF0ZShkZW50cnksIG5kKTsKKwlpbnQgc3RhdHVzOworCisJc3RhdHVzID0gZF9yZXZhbGlkYXRlKGRlbnRyeSwgbmQpOwogCWlmICh1bmxpa2VseShzdGF0dXMgPD0gMCkpIHsKIAkJLyoKIAkJICogVGhlIGRlbnRyeSBmYWlsZWQgdmFsaWRhdGlvbi4KQEAgLTM5NywxOSArNjEwLDM2IEBACiAJCSAqIHRoZSBkZW50cnkgb3RoZXJ3aXNlIGRfcmV2YWxpZGF0ZSBpcyBhc2tpbmcgdXMKIAkJICogdG8gcmV0dXJuIGEgZmFpbCBzdGF0dXMuCiAJCSAqLwotCQlpZiAoIXN0YXR1cykgeworCQlpZiAoc3RhdHVzIDwgMCkgeworCQkJLyogSWYgd2UncmUgaW4gcmN1LXdhbGssIHdlIGRvbid0IGhhdmUgYSByZWYgKi8KKwkJCWlmICghKG5kLT5mbGFncyAmIExPT0tVUF9SQ1UpKQorCQkJCWRwdXQoZGVudHJ5KTsKKwkJCWRlbnRyeSA9IEVSUl9QVFIoc3RhdHVzKTsKKworCQl9IGVsc2UgeworCQkJLyogRG9uJ3QgZF9pbnZhbGlkYXRlIGluIHJjdS13YWxrIG1vZGUgKi8KKwkJCWlmIChuYW1laWRhdGFfZGVudHJ5X2Ryb3BfcmN1X21heWJlKG5kLCBkZW50cnkpKQorCQkJCXJldHVybiBFUlJfUFRSKC1FQ0hJTEQpOwogCQkJaWYgKCFkX2ludmFsaWRhdGUoZGVudHJ5KSkgewogCQkJCWRwdXQoZGVudHJ5KTsKIAkJCQlkZW50cnkgPSBOVUxMOwogCQkJfQotCQl9IGVsc2UgewotCQkJZHB1dChkZW50cnkpOwotCQkJZGVudHJ5ID0gRVJSX1BUUihzdGF0dXMpOwogCQl9CiAJfQogCXJldHVybiBkZW50cnk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IG5lZWRfcmV2YWxfZG90KHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3sKKwlpZiAobGlrZWx5KCEoZGVudHJ5LT5kX2ZsYWdzICYgRENBQ0hFX09QX1JFVkFMSURBVEUpKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAobGlrZWx5KCEoZGVudHJ5LT5kX3NiLT5zX3R5cGUtPmZzX2ZsYWdzICYgRlNfUkVWQUxfRE9UKSkpCisJCXJldHVybiAwOworCisJcmV0dXJuIDE7Cit9CisKIC8qCiAgKiBmb3JjZV9yZXZhbF9wYXRoIC0gZm9yY2UgcmV2YWxpZGF0aW9uIG9mIGEgZGVudHJ5CiAgKgpAQCAtNDMzLDEzICs2NjMsMTIgQEAKIAogCS8qCiAJICogb25seSBjaGVjayBvbiBmaWxlc3lzdGVtcyB3aGVyZSBpdCdzIHBvc3NpYmxlIGZvciB0aGUgZGVudHJ5IHRvCi0JICogYmVjb21lIHN0YWxlLiBJdCdzIGFzc3VtZWQgdGhhdCBpZiB0aGlzIGZsYWcgaXMgc2V0IHRoZW4gdGhlCi0JICogZF9yZXZhbGlkYXRlIG9wIHdpbGwgYWxzbyBiZSBkZWZpbmVkLgorCSAqIGJlY29tZSBzdGFsZS4KIAkgKi8KLQlpZiAoIShkZW50cnktPmRfc2ItPnNfdHlwZS0+ZnNfZmxhZ3MgJiBGU19SRVZBTF9ET1QpKQorCWlmICghbmVlZF9yZXZhbF9kb3QoZGVudHJ5KSkKIAkJcmV0dXJuIDA7CiAKLQlzdGF0dXMgPSBkZW50cnktPmRfb3AtPmRfcmV2YWxpZGF0ZShkZW50cnksIG5kKTsKKwlzdGF0dXMgPSBkX3JldmFsaWRhdGUoZGVudHJ5LCBuZCk7CiAJaWYgKHN0YXR1cyA+IDApCiAJCXJldHVybiAwOwogCkBAIC00NTksMjYgKzY4OCwyNyBAQAogICogc2hvcnQtY3V0IERBQyBmYWlscywgdGhlbiBjYWxsIC0+cGVybWlzc2lvbigpIHRvIGRvIG1vcmUKICAqIGNvbXBsZXRlIHBlcm1pc3Npb24gY2hlY2suCiAgKi8KLXN0YXRpYyBpbnQgZXhlY19wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUpCitzdGF0aWMgaW5saW5lIGludCBleGVjX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgdW5zaWduZWQgaW50IGZsYWdzKQogewogCWludCByZXQ7CiAKIAlpZiAoaW5vZGUtPmlfb3AtPnBlcm1pc3Npb24pIHsKLQkJcmV0ID0gaW5vZGUtPmlfb3AtPnBlcm1pc3Npb24oaW5vZGUsIE1BWV9FWEVDKTsKLQkJaWYgKCFyZXQpCi0JCQlnb3RvIG9rOwotCQlyZXR1cm4gcmV0OworCQlyZXQgPSBpbm9kZS0+aV9vcC0+cGVybWlzc2lvbihpbm9kZSwgTUFZX0VYRUMsIGZsYWdzKTsKKwl9IGVsc2UgeworCQlyZXQgPSBhY2xfcGVybWlzc2lvbl9jaGVjayhpbm9kZSwgTUFZX0VYRUMsIGZsYWdzLAorCQkJCWlub2RlLT5pX29wLT5jaGVja19hY2wpOwogCX0KLQlyZXQgPSBhY2xfcGVybWlzc2lvbl9jaGVjayhpbm9kZSwgTUFZX0VYRUMsIGlub2RlLT5pX29wLT5jaGVja19hY2wpOwotCWlmICghcmV0KQorCWlmIChsaWtlbHkoIXJldCkpCiAJCWdvdG8gb2s7CisJaWYgKHJldCA9PSAtRUNISUxEKQorCQlyZXR1cm4gcmV0OwogCiAJaWYgKGNhcGFibGUoQ0FQX0RBQ19PVkVSUklERSkgfHwgY2FwYWJsZShDQVBfREFDX1JFQURfU0VBUkNIKSkKIAkJZ290byBvazsKIAogCXJldHVybiByZXQ7CiBvazoKLQlyZXR1cm4gc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihpbm9kZSwgTUFZX0VYRUMpOworCXJldHVybiBzZWN1cml0eV9pbm9kZV9leGVjX3Blcm1pc3Npb24oaW5vZGUsIGZsYWdzKTsKIH0KIAogc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHNldF9yb290KHN0cnVjdCBuYW1laWRhdGEgKm5kKQpAQCAtNDg5LDggKzcxOSwyMyBAQAogCiBzdGF0aWMgaW50IGxpbmtfcGF0aF93YWxrKGNvbnN0IGNoYXIgKiwgc3RydWN0IG5hbWVpZGF0YSAqKTsKIAorc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHNldF9yb290X3JjdShzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKK3sKKwlpZiAoIW5kLT5yb290Lm1udCkgeworCQlzdHJ1Y3QgZnNfc3RydWN0ICpmcyA9IGN1cnJlbnQtPmZzOworCQl1bnNpZ25lZCBzZXE7CisKKwkJZG8geworCQkJc2VxID0gcmVhZF9zZXFjb3VudF9iZWdpbigmZnMtPnNlcSk7CisJCQluZC0+cm9vdCA9IGZzLT5yb290OworCQl9IHdoaWxlIChyZWFkX3NlcWNvdW50X3JldHJ5KCZmcy0+c2VxLCBzZXEpKTsKKwl9Cit9CisKIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IF9fdmZzX2ZvbGxvd19saW5rKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBjb25zdCBjaGFyICpsaW5rKQogeworCWludCByZXQ7CisKIAlpZiAoSVNfRVJSKGxpbmspKQogCQlnb3RvIGZhaWw7CiAKQEAgLTUwMCw4ICs3NDUsMTAgQEAKIAkJbmQtPnBhdGggPSBuZC0+cm9vdDsKIAkJcGF0aF9nZXQoJm5kLT5yb290KTsKIAl9CisJbmQtPmlub2RlID0gbmQtPnBhdGguZGVudHJ5LT5kX2lub2RlOwogCi0JcmV0dXJuIGxpbmtfcGF0aF93YWxrKGxpbmssIG5kKTsKKwlyZXQgPSBsaW5rX3BhdGhfd2FsayhsaW5rLCBuZCk7CisJcmV0dXJuIHJldDsKIGZhaWw6CiAJcGF0aF9wdXQoJm5kLT5wYXRoKTsKIAlyZXR1cm4gUFRSX0VSUihsaW5rKTsKQEAgLTUxNiwxMSArNzYzLDEyIEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwYXRoX3RvX25hbWVpZGF0YShzdHJ1Y3QgcGF0aCAqcGF0aCwgc3RydWN0IG5hbWVpZGF0YSAqbmQpCiB7Ci0JZHB1dChuZC0+cGF0aC5kZW50cnkpOwotCWlmIChuZC0+cGF0aC5tbnQgIT0gcGF0aC0+bW50KSB7Ci0JCW1udHB1dChuZC0+cGF0aC5tbnQpOwotCQluZC0+cGF0aC5tbnQgPSBwYXRoLT5tbnQ7CisJaWYgKCEobmQtPmZsYWdzICYgTE9PS1VQX1JDVSkpIHsKKwkJZHB1dChuZC0+cGF0aC5kZW50cnkpOworCQlpZiAobmQtPnBhdGgubW50ICE9IHBhdGgtPm1udCkKKwkJCW1udHB1dChuZC0+cGF0aC5tbnQpOwogCX0KKwluZC0+cGF0aC5tbnQgPSBwYXRoLT5tbnQ7CiAJbmQtPnBhdGguZGVudHJ5ID0gcGF0aC0+ZGVudHJ5OwogfQogCkBAIC01MzUsOSArNzgzLDExIEBACiAKIAlpZiAocGF0aC0+bW50ICE9IG5kLT5wYXRoLm1udCkgewogCQlwYXRoX3RvX25hbWVpZGF0YShwYXRoLCBuZCk7CisJCW5kLT5pbm9kZSA9IG5kLT5wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAkJZGdldChkZW50cnkpOwogCX0KIAltbnRnZXQocGF0aC0+bW50KTsKKwogCW5kLT5sYXN0X3R5cGUgPSBMQVNUX0JJTkQ7CiAJKnAgPSBkZW50cnktPmRfaW5vZGUtPmlfb3AtPmZvbGxvd19saW5rKGRlbnRyeSwgbmQpOwogCWVycm9yID0gUFRSX0VSUigqcCk7CkBAIC01OTEsNiArODQxLDIwIEBACiAJcmV0dXJuIGVycjsKIH0KIAorc3RhdGljIGludCBmb2xsb3dfdXBfcmN1KHN0cnVjdCBwYXRoICpwYXRoKQoreworCXN0cnVjdCB2ZnNtb3VudCAqcGFyZW50OworCXN0cnVjdCBkZW50cnkgKm1vdW50cG9pbnQ7CisKKwlwYXJlbnQgPSBwYXRoLT5tbnQtPm1udF9wYXJlbnQ7CisJaWYgKHBhcmVudCA9PSBwYXRoLT5tbnQpCisJCXJldHVybiAwOworCW1vdW50cG9pbnQgPSBwYXRoLT5tbnQtPm1udF9tb3VudHBvaW50OworCXBhdGgtPmRlbnRyeSA9IG1vdW50cG9pbnQ7CisJcGF0aC0+bW50ID0gcGFyZW50OworCXJldHVybiAxOworfQorCiBpbnQgZm9sbG93X3VwKHN0cnVjdCBwYXRoICpwYXRoKQogewogCXN0cnVjdCB2ZnNtb3VudCAqcGFyZW50OwpAQCAtNjEyLDkgKzg3NiwyNCBAQAogCXJldHVybiAxOwogfQogCi0vKiBubyBuZWVkIGZvciBkY2FjaGVfbG9jaywgYXMgc2VyaWFsaXphdGlvbiBpcyB0YWtlbiBjYXJlIGluCi0gKiBuYW1lc3BhY2UuYworLyoKKyAqIHNlcmlhbGl6YXRpb24gaXMgdGFrZW4gY2FyZSBvZiBpbiBuYW1lc3BhY2UuYwogICovCitzdGF0aWMgdm9pZCBfX2ZvbGxvd19tb3VudF9yY3Uoc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBwYXRoICpwYXRoLAorCQkJCXN0cnVjdCBpbm9kZSAqKmlub2RlKQoreworCXdoaWxlIChkX21vdW50cG9pbnQocGF0aC0+ZGVudHJ5KSkgeworCQlzdHJ1Y3QgdmZzbW91bnQgKm1vdW50ZWQ7CisJCW1vdW50ZWQgPSBfX2xvb2t1cF9tbnQocGF0aC0+bW50LCBwYXRoLT5kZW50cnksIDEpOworCQlpZiAoIW1vdW50ZWQpCisJCQlyZXR1cm47CisJCXBhdGgtPm1udCA9IG1vdW50ZWQ7CisJCXBhdGgtPmRlbnRyeSA9IG1vdW50ZWQtPm1udF9yb290OworCQluZC0+c2VxID0gcmVhZF9zZXFjb3VudF9iZWdpbigmcGF0aC0+ZGVudHJ5LT5kX3NlcSk7CisJCSppbm9kZSA9IHBhdGgtPmRlbnRyeS0+ZF9pbm9kZTsKKwl9Cit9CisKIHN0YXRpYyBpbnQgX19mb2xsb3dfbW91bnQoc3RydWN0IHBhdGggKnBhdGgpCiB7CiAJaW50IHJlcyA9IDA7CkBAIC02NDUsOSArOTI0LDYgQEAKIAl9CiB9CiAKLS8qIG5vIG5lZWQgZm9yIGRjYWNoZV9sb2NrLCBhcyBzZXJpYWxpemF0aW9uIGlzIHRha2VuIGNhcmUgaW4KLSAqIG5hbWVzcGFjZS5jCi0gKi8KIGludCBmb2xsb3dfZG93bihzdHJ1Y3QgcGF0aCAqcGF0aCkKIHsKIAlzdHJ1Y3QgdmZzbW91bnQgKm1vdW50ZWQ7CkBAIC02NjMsNyArOTM5LDQyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBmb2xsb3dfZG90ZG90KHN0cnVjdCBuYW1laWRhdGEgKm5kKQorc3RhdGljIGludCBmb2xsb3dfZG90ZG90X3JjdShzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbmQtPmlub2RlOworCisJc2V0X3Jvb3RfcmN1KG5kKTsKKworCXdoaWxlKDEpIHsKKwkJaWYgKG5kLT5wYXRoLmRlbnRyeSA9PSBuZC0+cm9vdC5kZW50cnkgJiYKKwkJICAgIG5kLT5wYXRoLm1udCA9PSBuZC0+cm9vdC5tbnQpIHsKKwkJCWJyZWFrOworCQl9CisJCWlmIChuZC0+cGF0aC5kZW50cnkgIT0gbmQtPnBhdGgubW50LT5tbnRfcm9vdCkgeworCQkJc3RydWN0IGRlbnRyeSAqb2xkID0gbmQtPnBhdGguZGVudHJ5OworCQkJc3RydWN0IGRlbnRyeSAqcGFyZW50ID0gb2xkLT5kX3BhcmVudDsKKwkJCXVuc2lnbmVkIHNlcTsKKworCQkJc2VxID0gcmVhZF9zZXFjb3VudF9iZWdpbigmcGFyZW50LT5kX3NlcSk7CisJCQlpZiAocmVhZF9zZXFjb3VudF9yZXRyeSgmb2xkLT5kX3NlcSwgbmQtPnNlcSkpCisJCQkJcmV0dXJuIC1FQ0hJTEQ7CisJCQlpbm9kZSA9IHBhcmVudC0+ZF9pbm9kZTsKKwkJCW5kLT5wYXRoLmRlbnRyeSA9IHBhcmVudDsKKwkJCW5kLT5zZXEgPSBzZXE7CisJCQlicmVhazsKKwkJfQorCQlpZiAoIWZvbGxvd191cF9yY3UoJm5kLT5wYXRoKSkKKwkJCWJyZWFrOworCQluZC0+c2VxID0gcmVhZF9zZXFjb3VudF9iZWdpbigmbmQtPnBhdGguZGVudHJ5LT5kX3NlcSk7CisJCWlub2RlID0gbmQtPnBhdGguZGVudHJ5LT5kX2lub2RlOworCX0KKwlfX2ZvbGxvd19tb3VudF9yY3UobmQsICZuZC0+cGF0aCwgJmlub2RlKTsKKwluZC0+aW5vZGUgPSBpbm9kZTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBmb2xsb3dfZG90ZG90KHN0cnVjdCBuYW1laWRhdGEgKm5kKQogewogCXNldF9yb290KG5kKTsKIApAQCAtNjg0LDYgKzk5NSw3IEBACiAJCQlicmVhazsKIAl9CiAJZm9sbG93X21vdW50KCZuZC0+cGF0aCk7CisJbmQtPmlub2RlID0gbmQtPnBhdGguZGVudHJ5LT5kX2lub2RlOwogfQogCiAvKgpAQCAtNzIxLDE3ICsxMDMzLDE3IEBACiAgKiAgSXQgX2lzXyB0aW1lLWNyaXRpY2FsLgogICovCiBzdGF0aWMgaW50IGRvX2xvb2t1cChzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IHFzdHIgKm5hbWUsCi0JCSAgICAgc3RydWN0IHBhdGggKnBhdGgpCisJCQlzdHJ1Y3QgcGF0aCAqcGF0aCwgc3RydWN0IGlub2RlICoqaW5vZGUpCiB7CiAJc3RydWN0IHZmc21vdW50ICptbnQgPSBuZC0+cGF0aC5tbnQ7Ci0Jc3RydWN0IGRlbnRyeSAqZGVudHJ5LCAqcGFyZW50OworCXN0cnVjdCBkZW50cnkgKmRlbnRyeSwgKnBhcmVudCA9IG5kLT5wYXRoLmRlbnRyeTsKIAlzdHJ1Y3QgaW5vZGUgKmRpcjsKIAkvKgogCSAqIFNlZSBpZiB0aGUgbG93LWxldmVsIGZpbGVzeXN0ZW0gbWlnaHQgd2FudAogCSAqIHRvIHVzZSBpdHMgb3duIGhhc2guLgogCSAqLwotCWlmIChuZC0+cGF0aC5kZW50cnktPmRfb3AgJiYgbmQtPnBhdGguZGVudHJ5LT5kX29wLT5kX2hhc2gpIHsKLQkJaW50IGVyciA9IG5kLT5wYXRoLmRlbnRyeS0+ZF9vcC0+ZF9oYXNoKG5kLT5wYXRoLmRlbnRyeSwgbmFtZSk7CisJaWYgKHVubGlrZWx5KHBhcmVudC0+ZF9mbGFncyAmIERDQUNIRV9PUF9IQVNIKSkgeworCQlpbnQgZXJyID0gcGFyZW50LT5kX29wLT5kX2hhc2gocGFyZW50LCBuZC0+aW5vZGUsIG5hbWUpOwogCQlpZiAoZXJyIDwgMCkKIAkJCXJldHVybiBlcnI7CiAJfQpAQCAtNzQxLDIxICsxMDUzLDQ0IEBACiAJICogb2YgYSBmYWxzZSBuZWdhdGl2ZSBkdWUgdG8gYSBjb25jdXJyZW50IHJlbmFtZSwgd2UncmUgZ29pbmcgdG8KIAkgKiBkbyB0aGUgbm9uLXJhY3kgbG9va3VwLCBiZWxvdy4KIAkgKi8KLQlkZW50cnkgPSBfX2RfbG9va3VwKG5kLT5wYXRoLmRlbnRyeSwgbmFtZSk7Ci0JaWYgKCFkZW50cnkpCi0JCWdvdG8gbmVlZF9sb29rdXA7CisJaWYgKG5kLT5mbGFncyAmIExPT0tVUF9SQ1UpIHsKKwkJdW5zaWduZWQgc2VxOworCisJCSppbm9kZSA9IG5kLT5pbm9kZTsKKwkJZGVudHJ5ID0gX19kX2xvb2t1cF9yY3UocGFyZW50LCBuYW1lLCAmc2VxLCBpbm9kZSk7CisJCWlmICghZGVudHJ5KSB7CisJCQlpZiAobmFtZWlkYXRhX2Ryb3BfcmN1KG5kKSkKKwkJCQlyZXR1cm4gLUVDSElMRDsKKwkJCWdvdG8gbmVlZF9sb29rdXA7CisJCX0KKwkJLyogTWVtb3J5IGJhcnJpZXIgaW4gcmVhZF9zZXFjb3VudF9iZWdpbiBvZiBjaGlsZCBpcyBlbm91Z2ggKi8KKwkJaWYgKF9fcmVhZF9zZXFjb3VudF9yZXRyeSgmcGFyZW50LT5kX3NlcSwgbmQtPnNlcSkpCisJCQlyZXR1cm4gLUVDSElMRDsKKworCQluZC0+c2VxID0gc2VxOworCQlpZiAoZGVudHJ5LT5kX2ZsYWdzICYgRENBQ0hFX09QX1JFVkFMSURBVEUpCisJCQlnb3RvIG5lZWRfcmV2YWxpZGF0ZTsKKwkJcGF0aC0+bW50ID0gbW50OworCQlwYXRoLT5kZW50cnkgPSBkZW50cnk7CisJCV9fZm9sbG93X21vdW50X3JjdShuZCwgcGF0aCwgaW5vZGUpOworCX0gZWxzZSB7CisJCWRlbnRyeSA9IF9fZF9sb29rdXAocGFyZW50LCBuYW1lKTsKKwkJaWYgKCFkZW50cnkpCisJCQlnb3RvIG5lZWRfbG9va3VwOwogZm91bmQ6Ci0JaWYgKGRlbnRyeS0+ZF9vcCAmJiBkZW50cnktPmRfb3AtPmRfcmV2YWxpZGF0ZSkKLQkJZ290byBuZWVkX3JldmFsaWRhdGU7CisJCWlmIChkZW50cnktPmRfZmxhZ3MgJiBEQ0FDSEVfT1BfUkVWQUxJREFURSkKKwkJCWdvdG8gbmVlZF9yZXZhbGlkYXRlOwogZG9uZToKLQlwYXRoLT5tbnQgPSBtbnQ7Ci0JcGF0aC0+ZGVudHJ5ID0gZGVudHJ5OwotCV9fZm9sbG93X21vdW50KHBhdGgpOworCQlwYXRoLT5tbnQgPSBtbnQ7CisJCXBhdGgtPmRlbnRyeSA9IGRlbnRyeTsKKwkJX19mb2xsb3dfbW91bnQocGF0aCk7CisJCSppbm9kZSA9IHBhdGgtPmRlbnRyeS0+ZF9pbm9kZTsKKwl9CiAJcmV0dXJuIDA7CiAKIG5lZWRfbG9va3VwOgotCXBhcmVudCA9IG5kLT5wYXRoLmRlbnRyeTsKIAlkaXIgPSBwYXJlbnQtPmRfaW5vZGU7CisJQlVHX09OKG5kLT5pbm9kZSAhPSBkaXIpOwogCiAJbXV0ZXhfbG9jaygmZGlyLT5pX211dGV4KTsKIAkvKgpAQCAtODE3LDcgKzExNTIsNiBAQAogc3RhdGljIGludCBsaW5rX3BhdGhfd2Fsayhjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKIHsKIAlzdHJ1Y3QgcGF0aCBuZXh0OwotCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAJaW50IGVycjsKIAl1bnNpZ25lZCBpbnQgbG9va3VwX2ZsYWdzID0gbmQtPmZsYWdzOwogCQpAQCAtODI2LDE4ICsxMTYwLDI4IEBACiAJaWYgKCEqbmFtZSkKIAkJZ290byByZXR1cm5fcmV2YWw7CiAKLQlpbm9kZSA9IG5kLT5wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAlpZiAobmQtPmRlcHRoKQogCQlsb29rdXBfZmxhZ3MgPSBMT09LVVBfRk9MTE9XIHwgKG5kLT5mbGFncyAmIExPT0tVUF9DT05USU5VRSk7CiAKIAkvKiBBdCB0aGlzIHBvaW50IHdlIGtub3cgd2UgaGF2ZSBhIHJlYWwgcGF0aCBjb21wb25lbnQuICovCiAJZm9yKDs7KSB7CisJCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAJCXVuc2lnbmVkIGxvbmcgaGFzaDsKIAkJc3RydWN0IHFzdHIgdGhpczsKIAkJdW5zaWduZWQgaW50IGM7CiAKIAkJbmQtPmZsYWdzIHw9IExPT0tVUF9DT05USU5VRTsKLQkJZXJyID0gZXhlY19wZXJtaXNzaW9uKGlub2RlKTsKKwkJaWYgKG5kLT5mbGFncyAmIExPT0tVUF9SQ1UpIHsKKwkJCWVyciA9IGV4ZWNfcGVybWlzc2lvbihuZC0+aW5vZGUsIElQRVJNX0ZMQUdfUkNVKTsKKwkJCWlmIChlcnIgPT0gLUVDSElMRCkgeworCQkJCWlmIChuYW1laWRhdGFfZHJvcF9yY3UobmQpKQorCQkJCQlyZXR1cm4gLUVDSElMRDsKKwkJCQlnb3RvIGV4ZWNfYWdhaW47CisJCQl9CisJCX0gZWxzZSB7CitleGVjX2FnYWluOgorCQkJZXJyID0gZXhlY19wZXJtaXNzaW9uKG5kLT5pbm9kZSwgMCk7CisJCX0KICAJCWlmIChlcnIpCiAJCQlicmVhazsKIApAQCAtODY4LDM3ICsxMjEyLDQ0IEBACiAJCWlmICh0aGlzLm5hbWVbMF0gPT0gJy4nKSBzd2l0Y2ggKHRoaXMubGVuKSB7CiAJCQlkZWZhdWx0OgogCQkJCWJyZWFrOwotCQkJY2FzZSAyOgkKKwkJCWNhc2UgMjoKIAkJCQlpZiAodGhpcy5uYW1lWzFdICE9ICcuJykKIAkJCQkJYnJlYWs7Ci0JCQkJZm9sbG93X2RvdGRvdChuZCk7Ci0JCQkJaW5vZGUgPSBuZC0+cGF0aC5kZW50cnktPmRfaW5vZGU7CisJCQkJaWYgKG5kLT5mbGFncyAmIExPT0tVUF9SQ1UpIHsKKwkJCQkJaWYgKGZvbGxvd19kb3Rkb3RfcmN1KG5kKSkKKwkJCQkJCXJldHVybiAtRUNISUxEOworCQkJCX0gZWxzZQorCQkJCQlmb2xsb3dfZG90ZG90KG5kKTsKIAkJCQkvKiBmYWxsdGhyb3VnaCAqLwogCQkJY2FzZSAxOgogCQkJCWNvbnRpbnVlOwogCQl9CiAJCS8qIFRoaXMgZG9lcyB0aGUgYWN0dWFsIGxvb2t1cHMuLiAqLwotCQllcnIgPSBkb19sb29rdXAobmQsICZ0aGlzLCAmbmV4dCk7CisJCWVyciA9IGRvX2xvb2t1cChuZCwgJnRoaXMsICZuZXh0LCAmaW5vZGUpOwogCQlpZiAoZXJyKQogCQkJYnJlYWs7Ci0KIAkJZXJyID0gLUVOT0VOVDsKLQkJaW5vZGUgPSBuZXh0LmRlbnRyeS0+ZF9pbm9kZTsKIAkJaWYgKCFpbm9kZSkKIAkJCWdvdG8gb3V0X2RwdXQ7CiAKIAkJaWYgKGlub2RlLT5pX29wLT5mb2xsb3dfbGluaykgeworCQkJLyogV2UgY29tbW9ubHkgZHJvcCByY3Utd2FsayBoZXJlICovCisJCQlpZiAobmFtZWlkYXRhX2RlbnRyeV9kcm9wX3JjdV9tYXliZShuZCwgbmV4dC5kZW50cnkpKQorCQkJCXJldHVybiAtRUNISUxEOworCQkJQlVHX09OKGlub2RlICE9IG5leHQuZGVudHJ5LT5kX2lub2RlKTsKIAkJCWVyciA9IGRvX2ZvbGxvd19saW5rKCZuZXh0LCBuZCk7CiAJCQlpZiAoZXJyKQogCQkJCWdvdG8gcmV0dXJuX2VycjsKKwkJCW5kLT5pbm9kZSA9IG5kLT5wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAkJCWVyciA9IC1FTk9FTlQ7Ci0JCQlpbm9kZSA9IG5kLT5wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKLQkJCWlmICghaW5vZGUpCisJCQlpZiAoIW5kLT5pbm9kZSkKIAkJCQlicmVhazsKLQkJfSBlbHNlCisJCX0gZWxzZSB7CiAJCQlwYXRoX3RvX25hbWVpZGF0YSgmbmV4dCwgbmQpOworCQkJbmQtPmlub2RlID0gaW5vZGU7CisJCX0KIAkJZXJyID0gLUVOT1RESVI7IAotCQlpZiAoIWlub2RlLT5pX29wLT5sb29rdXApCisJCWlmICghbmQtPmlub2RlLT5pX29wLT5sb29rdXApCiAJCQlicmVhazsKIAkJY29udGludWU7CiAJCS8qIGhlcmUgZW5kcyB0aGUgbWFpbiBsb29wICovCkBAIC05MTMsMzIgKzEyNjQsMzkgQEAKIAkJaWYgKHRoaXMubmFtZVswXSA9PSAnLicpIHN3aXRjaCAodGhpcy5sZW4pIHsKIAkJCWRlZmF1bHQ6CiAJCQkJYnJlYWs7Ci0JCQljYXNlIDI6CQorCQkJY2FzZSAyOgogCQkJCWlmICh0aGlzLm5hbWVbMV0gIT0gJy4nKQogCQkJCQlicmVhazsKLQkJCQlmb2xsb3dfZG90ZG90KG5kKTsKLQkJCQlpbm9kZSA9IG5kLT5wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKKwkJCQlpZiAobmQtPmZsYWdzICYgTE9PS1VQX1JDVSkgeworCQkJCQlpZiAoZm9sbG93X2RvdGRvdF9yY3UobmQpKQorCQkJCQkJcmV0dXJuIC1FQ0hJTEQ7CisJCQkJfSBlbHNlCisJCQkJCWZvbGxvd19kb3Rkb3QobmQpOwogCQkJCS8qIGZhbGx0aHJvdWdoICovCiAJCQljYXNlIDE6CiAJCQkJZ290byByZXR1cm5fcmV2YWw7CiAJCX0KLQkJZXJyID0gZG9fbG9va3VwKG5kLCAmdGhpcywgJm5leHQpOworCQllcnIgPSBkb19sb29rdXAobmQsICZ0aGlzLCAmbmV4dCwgJmlub2RlKTsKIAkJaWYgKGVycikKIAkJCWJyZWFrOwotCQlpbm9kZSA9IG5leHQuZGVudHJ5LT5kX2lub2RlOwogCQlpZiAoZm9sbG93X29uX2ZpbmFsKGlub2RlLCBsb29rdXBfZmxhZ3MpKSB7CisJCQlpZiAobmFtZWlkYXRhX2RlbnRyeV9kcm9wX3JjdV9tYXliZShuZCwgbmV4dC5kZW50cnkpKQorCQkJCXJldHVybiAtRUNISUxEOworCQkJQlVHX09OKGlub2RlICE9IG5leHQuZGVudHJ5LT5kX2lub2RlKTsKIAkJCWVyciA9IGRvX2ZvbGxvd19saW5rKCZuZXh0LCBuZCk7CiAJCQlpZiAoZXJyKQogCQkJCWdvdG8gcmV0dXJuX2VycjsKLQkJCWlub2RlID0gbmQtPnBhdGguZGVudHJ5LT5kX2lub2RlOwotCQl9IGVsc2UKKwkJCW5kLT5pbm9kZSA9IG5kLT5wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKKwkJfSBlbHNlIHsKIAkJCXBhdGhfdG9fbmFtZWlkYXRhKCZuZXh0LCBuZCk7CisJCQluZC0+aW5vZGUgPSBpbm9kZTsKKwkJfQogCQllcnIgPSAtRU5PRU5UOwotCQlpZiAoIWlub2RlKQorCQlpZiAoIW5kLT5pbm9kZSkKIAkJCWJyZWFrOwogCQlpZiAobG9va3VwX2ZsYWdzICYgTE9PS1VQX0RJUkVDVE9SWSkgewogCQkJZXJyID0gLUVOT1RESVI7IAotCQkJaWYgKCFpbm9kZS0+aV9vcC0+bG9va3VwKQorCQkJaWYgKCFuZC0+aW5vZGUtPmlfb3AtPmxvb2t1cCkKIAkJCQlicmVhazsKIAkJfQogCQlnb3RvIHJldHVybl9iYXNlOwpAQCAtOTU4LDI1ICsxMzE2LDQzIEBACiAJCSAqIFdlIGJ5cGFzc2VkIHRoZSBvcmRpbmFyeSByZXZhbGlkYXRpb24gcm91dGluZXMuCiAJCSAqIFdlIG1heSBuZWVkIHRvIGNoZWNrIHRoZSBjYWNoZWQgZGVudHJ5IGZvciBzdGFsZW5lc3MuCiAJCSAqLwotCQlpZiAobmQtPnBhdGguZGVudHJ5ICYmIG5kLT5wYXRoLmRlbnRyeS0+ZF9zYiAmJgotCQkgICAgKG5kLT5wYXRoLmRlbnRyeS0+ZF9zYi0+c190eXBlLT5mc19mbGFncyAmIEZTX1JFVkFMX0RPVCkpIHsKLQkJCWVyciA9IC1FU1RBTEU7CisJCWlmIChuZWVkX3JldmFsX2RvdChuZC0+cGF0aC5kZW50cnkpKSB7CiAJCQkvKiBOb3RlOiB3ZSBkbyBub3QgZF9pbnZhbGlkYXRlKCkgKi8KLQkJCWlmICghbmQtPnBhdGguZGVudHJ5LT5kX29wLT5kX3JldmFsaWRhdGUoCi0JCQkJCW5kLT5wYXRoLmRlbnRyeSwgbmQpKQorCQkJZXJyID0gZF9yZXZhbGlkYXRlKG5kLT5wYXRoLmRlbnRyeSwgbmQpOworCQkJaWYgKCFlcnIpCisJCQkJZXJyID0gLUVTVEFMRTsKKwkJCWlmIChlcnIgPCAwKQogCQkJCWJyZWFrOwogCQl9CiByZXR1cm5fYmFzZToKKwkJaWYgKG5hbWVpZGF0YV9kcm9wX3JjdV9sYXN0X21heWJlKG5kKSkKKwkJCXJldHVybiAtRUNISUxEOwogCQlyZXR1cm4gMDsKIG91dF9kcHV0OgotCQlwYXRoX3B1dF9jb25kaXRpb25hbCgmbmV4dCwgbmQpOworCQlpZiAoIShuZC0+ZmxhZ3MgJiBMT09LVVBfUkNVKSkKKwkJCXBhdGhfcHV0X2NvbmRpdGlvbmFsKCZuZXh0LCBuZCk7CiAJCWJyZWFrOwogCX0KLQlwYXRoX3B1dCgmbmQtPnBhdGgpOworCWlmICghKG5kLT5mbGFncyAmIExPT0tVUF9SQ1UpKQorCQlwYXRoX3B1dCgmbmQtPnBhdGgpOwogcmV0dXJuX2VycjoKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgaW5saW5lIGludCBwYXRoX3dhbGtfcmN1KGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBuYW1laWRhdGEgKm5kKQoreworCWN1cnJlbnQtPnRvdGFsX2xpbmtfY291bnQgPSAwOworCisJcmV0dXJuIGxpbmtfcGF0aF93YWxrKG5hbWUsIG5kKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcGF0aF93YWxrX3NpbXBsZShjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKK3sKKwljdXJyZW50LT50b3RhbF9saW5rX2NvdW50ID0gMDsKKworCXJldHVybiBsaW5rX3BhdGhfd2FsayhuYW1lLCBuZCk7Cit9CisKIHN0YXRpYyBpbnQgcGF0aF93YWxrKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBuYW1laWRhdGEgKm5kKQogewogCXN0cnVjdCBwYXRoIHNhdmUgPSBuZC0+cGF0aDsKQEAgLTEwMDIsNiArMTM3OCw5MyBAQAogCXJldHVybiByZXN1bHQ7CiB9CiAKK3N0YXRpYyB2b2lkIHBhdGhfZmluaXNoX3JjdShzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKK3sKKwlpZiAobmQtPmZsYWdzICYgTE9PS1VQX1JDVSkgeworCQkvKiBSQ1UgZGFuZ2xpbmcuIENhbmNlbCBpdC4gKi8KKwkJbmQtPmZsYWdzICY9IH5MT09LVVBfUkNVOworCQluZC0+cm9vdC5tbnQgPSBOVUxMOworCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJYnJfcmVhZF91bmxvY2sodmZzbW91bnRfbG9jayk7CisJfQorCWlmIChuZC0+ZmlsZSkKKwkJZnB1dChuZC0+ZmlsZSk7Cit9CisKK3N0YXRpYyBpbnQgcGF0aF9pbml0X3JjdShpbnQgZGZkLCBjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBuYW1laWRhdGEgKm5kKQoreworCWludCByZXR2YWwgPSAwOworCWludCBmcHV0X25lZWRlZDsKKwlzdHJ1Y3QgZmlsZSAqZmlsZTsKKworCW5kLT5sYXN0X3R5cGUgPSBMQVNUX1JPT1Q7IC8qIGlmIHRoZXJlIGFyZSBvbmx5IHNsYXNoZXMuLi4gKi8KKwluZC0+ZmxhZ3MgPSBmbGFncyB8IExPT0tVUF9SQ1U7CisJbmQtPmRlcHRoID0gMDsKKwluZC0+cm9vdC5tbnQgPSBOVUxMOworCW5kLT5maWxlID0gTlVMTDsKKworCWlmICgqbmFtZT09Jy8nKSB7CisJCXN0cnVjdCBmc19zdHJ1Y3QgKmZzID0gY3VycmVudC0+ZnM7CisJCXVuc2lnbmVkIHNlcTsKKworCQlicl9yZWFkX2xvY2sodmZzbW91bnRfbG9jayk7CisJCXJjdV9yZWFkX2xvY2soKTsKKworCQlkbyB7CisJCQlzZXEgPSByZWFkX3NlcWNvdW50X2JlZ2luKCZmcy0+c2VxKTsKKwkJCW5kLT5yb290ID0gZnMtPnJvb3Q7CisJCQluZC0+cGF0aCA9IG5kLT5yb290OworCQkJbmQtPnNlcSA9IF9fcmVhZF9zZXFjb3VudF9iZWdpbigmbmQtPnBhdGguZGVudHJ5LT5kX3NlcSk7CisJCX0gd2hpbGUgKHJlYWRfc2VxY291bnRfcmV0cnkoJmZzLT5zZXEsIHNlcSkpOworCisJfSBlbHNlIGlmIChkZmQgPT0gQVRfRkRDV0QpIHsKKwkJc3RydWN0IGZzX3N0cnVjdCAqZnMgPSBjdXJyZW50LT5mczsKKwkJdW5zaWduZWQgc2VxOworCisJCWJyX3JlYWRfbG9jayh2ZnNtb3VudF9sb2NrKTsKKwkJcmN1X3JlYWRfbG9jaygpOworCisJCWRvIHsKKwkJCXNlcSA9IHJlYWRfc2VxY291bnRfYmVnaW4oJmZzLT5zZXEpOworCQkJbmQtPnBhdGggPSBmcy0+cHdkOworCQkJbmQtPnNlcSA9IF9fcmVhZF9zZXFjb3VudF9iZWdpbigmbmQtPnBhdGguZGVudHJ5LT5kX3NlcSk7CisJCX0gd2hpbGUgKHJlYWRfc2VxY291bnRfcmV0cnkoJmZzLT5zZXEsIHNlcSkpOworCisJfSBlbHNlIHsKKwkJc3RydWN0IGRlbnRyeSAqZGVudHJ5OworCisJCWZpbGUgPSBmZ2V0X2xpZ2h0KGRmZCwgJmZwdXRfbmVlZGVkKTsKKwkJcmV0dmFsID0gLUVCQURGOworCQlpZiAoIWZpbGUpCisJCQlnb3RvIG91dF9mYWlsOworCisJCWRlbnRyeSA9IGZpbGUtPmZfcGF0aC5kZW50cnk7CisKKwkJcmV0dmFsID0gLUVOT1RESVI7CisJCWlmICghU19JU0RJUihkZW50cnktPmRfaW5vZGUtPmlfbW9kZSkpCisJCQlnb3RvIGZwdXRfZmFpbDsKKworCQlyZXR2YWwgPSBmaWxlX3Blcm1pc3Npb24oZmlsZSwgTUFZX0VYRUMpOworCQlpZiAocmV0dmFsKQorCQkJZ290byBmcHV0X2ZhaWw7CisKKwkJbmQtPnBhdGggPSBmaWxlLT5mX3BhdGg7CisJCWlmIChmcHV0X25lZWRlZCkKKwkJCW5kLT5maWxlID0gZmlsZTsKKworCQluZC0+c2VxID0gX19yZWFkX3NlcWNvdW50X2JlZ2luKCZuZC0+cGF0aC5kZW50cnktPmRfc2VxKTsKKwkJYnJfcmVhZF9sb2NrKHZmc21vdW50X2xvY2spOworCQlyY3VfcmVhZF9sb2NrKCk7CisJfQorCW5kLT5pbm9kZSA9IG5kLT5wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKKwlyZXR1cm4gMDsKKworZnB1dF9mYWlsOgorCWZwdXRfbGlnaHQoZmlsZSwgZnB1dF9uZWVkZWQpOworb3V0X2ZhaWw6CisJcmV0dXJuIHJldHZhbDsKK30KKwogc3RhdGljIGludCBwYXRoX2luaXQoaW50IGRmZCwgY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKIHsKIAlpbnQgcmV0dmFsID0gMDsKQEAgLTEwNDIsNiArMTUwNSw3IEBACiAKIAkJZnB1dF9saWdodChmaWxlLCBmcHV0X25lZWRlZCk7CiAJfQorCW5kLT5pbm9kZSA9IG5kLT5wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAlyZXR1cm4gMDsKIAogZnB1dF9mYWlsOgpAQCAtMTA1NCwxNiArMTUxOCw1MyBAQAogc3RhdGljIGludCBkb19wYXRoX2xvb2t1cChpbnQgZGZkLCBjb25zdCBjaGFyICpuYW1lLAogCQkJCXVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IG5hbWVpZGF0YSAqbmQpCiB7Ci0JaW50IHJldHZhbCA9IHBhdGhfaW5pdChkZmQsIG5hbWUsIGZsYWdzLCBuZCk7Ci0JaWYgKCFyZXR2YWwpCi0JCXJldHZhbCA9IHBhdGhfd2FsayhuYW1lLCBuZCk7Ci0JaWYgKHVubGlrZWx5KCFyZXR2YWwgJiYgIWF1ZGl0X2R1bW15X2NvbnRleHQoKSAmJiBuZC0+cGF0aC5kZW50cnkgJiYKLQkJCQluZC0+cGF0aC5kZW50cnktPmRfaW5vZGUpKQotCQlhdWRpdF9pbm9kZShuYW1lLCBuZC0+cGF0aC5kZW50cnkpOworCWludCByZXR2YWw7CisKKwkvKgorCSAqIFBhdGggd2Fsa2luZyBpcyBsYXJnZWx5IHNwbGl0IHVwIGludG8gMiBkaWZmZXJlbnQgc3luY2hyb25pc2F0aW9uCisJICogc2NoZW1lcywgcmN1LXdhbGsgYW5kIHJlZi13YWxrIChleHBsYWluZWQgaW4KKwkgKiBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BhdGgtbG9va3VwLnR4dCkuIFRoZXNlIHNoYXJlIG11Y2ggb2YgdGhlCisJICogcGF0aCB3YWxrIGNvZGUsIGJ1dCBzb21lIHRoaW5ncyBwYXJ0aWN1bGFybHkgc2V0dXAsIGNsZWFudXAsIGFuZAorCSAqIGZvbGxvd2luZyBtb3VudHMgYXJlIHN1ZmZpY2llbnRseSBkaXZlcmdlbnQgdGhhdCBmdW5jdGlvbnMgYXJlCisJICogZHVwbGljYXRlZC4gVHlwaWNhbGx5IHRoZXJlIGlzIGEgZnVuY3Rpb24gZm9vKCksIGFuZCBpdHMgUkNVCisJICogYW5hbG9ndWUsIGZvb19yY3UoKS4KKwkgKgorCSAqIC1FQ0hJTEQgaXMgdGhlIGVycm9yIG51bWJlciBvZiBjaG9pY2UgKGp1c3QgdG8gYXZvaWQgY2xhc2hlcykgdGhhdAorCSAqIGlzIHJldHVybmVkIGlmIHNvbWUgYXNwZWN0IG9mIGFuIHJjdS13YWxrIGZhaWxzLiBTdWNoIGFuIGVycm9yIG11c3QKKwkgKiBiZSBoYW5kbGVkIGJ5IHJlc3RhcnRpbmcgYSB0cmFkaXRpb25hbCByZWYtd2FsayAod2hpY2ggd2lsbCBhbHdheXMKKwkgKiBiZSBhYmxlIHRvIGNvbXBsZXRlKS4KKwkgKi8KKwlyZXR2YWwgPSBwYXRoX2luaXRfcmN1KGRmZCwgbmFtZSwgZmxhZ3MsIG5kKTsKKwlpZiAodW5saWtlbHkocmV0dmFsKSkKKwkJcmV0dXJuIHJldHZhbDsKKwlyZXR2YWwgPSBwYXRoX3dhbGtfcmN1KG5hbWUsIG5kKTsKKwlwYXRoX2ZpbmlzaF9yY3UobmQpOwogCWlmIChuZC0+cm9vdC5tbnQpIHsKIAkJcGF0aF9wdXQoJm5kLT5yb290KTsKIAkJbmQtPnJvb3QubW50ID0gTlVMTDsKIAl9CisKKwlpZiAodW5saWtlbHkocmV0dmFsID09IC1FQ0hJTEQgfHwgcmV0dmFsID09IC1FU1RBTEUpKSB7CisJCS8qIHNsb3dlciwgbG9ja2VkIHdhbGsgKi8KKwkJaWYgKHJldHZhbCA9PSAtRVNUQUxFKQorCQkJZmxhZ3MgfD0gTE9PS1VQX1JFVkFMOworCQlyZXR2YWwgPSBwYXRoX2luaXQoZGZkLCBuYW1lLCBmbGFncywgbmQpOworCQlpZiAodW5saWtlbHkocmV0dmFsKSkKKwkJCXJldHVybiByZXR2YWw7CisJCXJldHZhbCA9IHBhdGhfd2FsayhuYW1lLCBuZCk7CisJCWlmIChuZC0+cm9vdC5tbnQpIHsKKwkJCXBhdGhfcHV0KCZuZC0+cm9vdCk7CisJCQluZC0+cm9vdC5tbnQgPSBOVUxMOworCQl9CisJfQorCisJaWYgKGxpa2VseSghcmV0dmFsKSkgeworCQlpZiAodW5saWtlbHkoIWF1ZGl0X2R1bW15X2NvbnRleHQoKSkpIHsKKwkJCWlmIChuZC0+cGF0aC5kZW50cnkgJiYgbmQtPmlub2RlKQorCQkJCWF1ZGl0X2lub2RlKG5hbWUsIG5kLT5wYXRoLmRlbnRyeSk7CisJCX0KKwl9CisKIAlyZXR1cm4gcmV0dmFsOwogfQogCkBAIC0xMTA2LDEwICsxNjA3LDExIEBACiAJcGF0aF9nZXQoJm5kLT5wYXRoKTsKIAluZC0+cm9vdCA9IG5kLT5wYXRoOwogCXBhdGhfZ2V0KCZuZC0+cm9vdCk7CisJbmQtPmlub2RlID0gbmQtPnBhdGguZGVudHJ5LT5kX2lub2RlOwogCiAJcmV0dmFsID0gcGF0aF93YWxrKG5hbWUsIG5kKTsKIAlpZiAodW5saWtlbHkoIXJldHZhbCAmJiAhYXVkaXRfZHVtbXlfY29udGV4dCgpICYmIG5kLT5wYXRoLmRlbnRyeSAmJgotCQkJCW5kLT5wYXRoLmRlbnRyeS0+ZF9pbm9kZSkpCisJCQkJbmQtPmlub2RlKSkKIAkJYXVkaXRfaW5vZGUobmFtZSwgbmQtPnBhdGguZGVudHJ5KTsKIAogCXBhdGhfcHV0KCZuZC0+cm9vdCk7CkBAIC0xMTI1LDcgKzE2MjcsNyBAQAogCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKIAlpbnQgZXJyOwogCi0JZXJyID0gZXhlY19wZXJtaXNzaW9uKGlub2RlKTsKKwllcnIgPSBleGVjX3Blcm1pc3Npb24oaW5vZGUsIDApOwogCWlmIChlcnIpCiAJCXJldHVybiBFUlJfUFRSKGVycik7CiAKQEAgLTExMzMsOCArMTYzNSw4IEBACiAJICogU2VlIGlmIHRoZSBsb3ctbGV2ZWwgZmlsZXN5c3RlbSBtaWdodCB3YW50CiAJICogdG8gdXNlIGl0cyBvd24gaGFzaC4uCiAJICovCi0JaWYgKGJhc2UtPmRfb3AgJiYgYmFzZS0+ZF9vcC0+ZF9oYXNoKSB7Ci0JCWVyciA9IGJhc2UtPmRfb3AtPmRfaGFzaChiYXNlLCBuYW1lKTsKKwlpZiAoYmFzZS0+ZF9mbGFncyAmIERDQUNIRV9PUF9IQVNIKSB7CisJCWVyciA9IGJhc2UtPmRfb3AtPmRfaGFzaChiYXNlLCBpbm9kZSwgbmFtZSk7CiAJCWRlbnRyeSA9IEVSUl9QVFIoZXJyKTsKIAkJaWYgKGVyciA8IDApCiAJCQlnb3RvIG91dDsKQEAgLTExNDcsNyArMTY0OSw3IEBACiAJICovCiAJZGVudHJ5ID0gZF9sb29rdXAoYmFzZSwgbmFtZSk7CiAKLQlpZiAoZGVudHJ5ICYmIGRlbnRyeS0+ZF9vcCAmJiBkZW50cnktPmRfb3AtPmRfcmV2YWxpZGF0ZSkKKwlpZiAoZGVudHJ5ICYmIChkZW50cnktPmRfZmxhZ3MgJiBEQ0FDSEVfT1BfUkVWQUxJREFURSkpCiAJCWRlbnRyeSA9IGRvX3JldmFsaWRhdGUoZGVudHJ5LCBuZCk7CiAKIAlpZiAoIWRlbnRyeSkKQEAgLTE0OTAsNiArMTk5Miw3IEBACiAJbXV0ZXhfdW5sb2NrKCZkaXItPmRfaW5vZGUtPmlfbXV0ZXgpOwogCWRwdXQobmQtPnBhdGguZGVudHJ5KTsKIAluZC0+cGF0aC5kZW50cnkgPSBwYXRoLT5kZW50cnk7CisKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAkvKiBEb24ndCBjaGVjayBmb3Igd3JpdGUgcGVybWlzc2lvbiwgZG9uJ3QgdHJ1bmNhdGUgKi8KQEAgLTE1ODQsNiArMjA4Nyw5IEBACiAJcmV0dXJuIEVSUl9QVFIoZXJyb3IpOwogfQogCisvKgorICogSGFuZGxlIE9fQ1JFQVQgY2FzZSBmb3IgZG9fZmlscF9vcGVuCisgKi8KIHN0YXRpYyBzdHJ1Y3QgZmlsZSAqZG9fbGFzdChzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IHBhdGggKnBhdGgsCiAJCQkgICAgaW50IG9wZW5fZmxhZywgaW50IGFjY19tb2RlLAogCQkJICAgIGludCBtb2RlLCBjb25zdCBjaGFyICpwYXRobmFtZSkKQEAgLTE1OTcsNTAgKzIxMDMsMjUgQEAKIAkJZm9sbG93X2RvdGRvdChuZCk7CiAJCWRpciA9IG5kLT5wYXRoLmRlbnRyeTsKIAljYXNlIExBU1RfRE9UOgotCQlpZiAobmQtPnBhdGgubW50LT5tbnRfc2ItPnNfdHlwZS0+ZnNfZmxhZ3MgJiBGU19SRVZBTF9ET1QpIHsKLQkJCWlmICghZGlyLT5kX29wLT5kX3JldmFsaWRhdGUoZGlyLCBuZCkpIHsKKwkJaWYgKG5lZWRfcmV2YWxfZG90KGRpcikpIHsKKwkJCWVycm9yID0gZF9yZXZhbGlkYXRlKG5kLT5wYXRoLmRlbnRyeSwgbmQpOworCQkJaWYgKCFlcnJvcikKIAkJCQllcnJvciA9IC1FU1RBTEU7CisJCQlpZiAoZXJyb3IgPCAwKQogCQkJCWdvdG8gZXhpdDsKLQkJCX0KIAkJfQogCQkvKiBmYWxsdGhyb3VnaCAqLwogCWNhc2UgTEFTVF9ST09UOgotCQlpZiAob3Blbl9mbGFnICYgT19DUkVBVCkKLQkJCWdvdG8gZXhpdDsKLQkJLyogZmFsbHRocm91Z2ggKi8KKwkJZ290byBleGl0OwogCWNhc2UgTEFTVF9CSU5EOgogCQlhdWRpdF9pbm9kZShwYXRobmFtZSwgZGlyKTsKIAkJZ290byBvazsKIAl9CiAKIAkvKiB0cmFpbGluZyBzbGFzaGVzPyAqLwotCWlmIChuZC0+bGFzdC5uYW1lW25kLT5sYXN0Lmxlbl0pIHsKLQkJaWYgKG9wZW5fZmxhZyAmIE9fQ1JFQVQpCi0JCQlnb3RvIGV4aXQ7Ci0JCW5kLT5mbGFncyB8PSBMT09LVVBfRElSRUNUT1JZIHwgTE9PS1VQX0ZPTExPVzsKLQl9CisJaWYgKG5kLT5sYXN0Lm5hbWVbbmQtPmxhc3QubGVuXSkKKwkJZ290byBleGl0OwogCi0JLyoganVzdCBwbGFpbiBvcGVuPyAqLwotCWlmICghKG9wZW5fZmxhZyAmIE9fQ1JFQVQpKSB7Ci0JCWVycm9yID0gZG9fbG9va3VwKG5kLCAmbmQtPmxhc3QsIHBhdGgpOwotCQlpZiAoZXJyb3IpCi0JCQlnb3RvIGV4aXQ7Ci0JCWVycm9yID0gLUVOT0VOVDsKLQkJaWYgKCFwYXRoLT5kZW50cnktPmRfaW5vZGUpCi0JCQlnb3RvIGV4aXRfZHB1dDsKLQkJaWYgKHBhdGgtPmRlbnRyeS0+ZF9pbm9kZS0+aV9vcC0+Zm9sbG93X2xpbmspCi0JCQlyZXR1cm4gTlVMTDsKLQkJZXJyb3IgPSAtRU5PVERJUjsKLQkJaWYgKG5kLT5mbGFncyAmIExPT0tVUF9ESVJFQ1RPUlkpIHsKLQkJCWlmICghcGF0aC0+ZGVudHJ5LT5kX2lub2RlLT5pX29wLT5sb29rdXApCi0JCQkJZ290byBleGl0X2RwdXQ7Ci0JCX0KLQkJcGF0aF90b19uYW1laWRhdGEocGF0aCwgbmQpOwotCQlhdWRpdF9pbm9kZShwYXRobmFtZSwgbmQtPnBhdGguZGVudHJ5KTsKLQkJZ290byBvazsKLQl9Ci0KLQkvKiBPSywgaXQncyBPX0NSRUFUICovCiAJbXV0ZXhfbG9jaygmZGlyLT5kX2lub2RlLT5pX211dGV4KTsKIAogCXBhdGgtPmRlbnRyeSA9IGxvb2t1cF9oYXNoKG5kKTsKQEAgLTE3MTEsOCArMjE5Miw5IEBACiAJCXJldHVybiBOVUxMOwogCiAJcGF0aF90b19uYW1laWRhdGEocGF0aCwgbmQpOworCW5kLT5pbm9kZSA9IHBhdGgtPmRlbnRyeS0+ZF9pbm9kZTsKIAllcnJvciA9IC1FSVNESVI7Ci0JaWYgKFNfSVNESVIocGF0aC0+ZGVudHJ5LT5kX2lub2RlLT5pX21vZGUpKQorCWlmIChTX0lTRElSKG5kLT5pbm9kZS0+aV9tb2RlKSkKIAkJZ290byBleGl0Owogb2s6CiAJZmlscCA9IGZpbmlzaF9vcGVuKG5kLCBvcGVuX2ZsYWcsIGFjY19tb2RlKTsKQEAgLTE3NDMsNyArMjIyNSw3IEBACiAJc3RydWN0IHBhdGggcGF0aDsKIAlpbnQgY291bnQgPSAwOwogCWludCBmbGFnID0gb3Blbl90b19uYW1laV9mbGFncyhvcGVuX2ZsYWcpOwotCWludCBmb3JjZV9yZXZhbCA9IDA7CisJaW50IGZsYWdzOwogCiAJaWYgKCEob3Blbl9mbGFnICYgT19DUkVBVCkpCiAJCW1vZGUgPSAwOwpAQCAtMTc3Miw1NCArMjI1NCw4NCBAQAogCWlmIChvcGVuX2ZsYWcgJiBPX0FQUEVORCkKIAkJYWNjX21vZGUgfD0gTUFZX0FQUEVORDsKIAotCS8qIGZpbmQgdGhlIHBhcmVudCAqLwotcmV2YWw6Ci0JZXJyb3IgPSBwYXRoX2luaXQoZGZkLCBwYXRobmFtZSwgTE9PS1VQX1BBUkVOVCwgJm5kKTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiBFUlJfUFRSKGVycm9yKTsKLQlpZiAoZm9yY2VfcmV2YWwpCi0JCW5kLmZsYWdzIHw9IExPT0tVUF9SRVZBTDsKLQotCWN1cnJlbnQtPnRvdGFsX2xpbmtfY291bnQgPSAwOwotCWVycm9yID0gbGlua19wYXRoX3dhbGsocGF0aG5hbWUsICZuZCk7Ci0JaWYgKGVycm9yKSB7Ci0JCWZpbHAgPSBFUlJfUFRSKGVycm9yKTsKLQkJZ290byBvdXQ7CisJZmxhZ3MgPSBMT09LVVBfT1BFTjsKKwlpZiAob3Blbl9mbGFnICYgT19DUkVBVCkgeworCQlmbGFncyB8PSBMT09LVVBfQ1JFQVRFOworCQlpZiAob3Blbl9mbGFnICYgT19FWENMKQorCQkJZmxhZ3MgfD0gTE9PS1VQX0VYQ0w7CiAJfQotCWlmICh1bmxpa2VseSghYXVkaXRfZHVtbXlfY29udGV4dCgpKSAmJiAob3Blbl9mbGFnICYgT19DUkVBVCkpCisJaWYgKG9wZW5fZmxhZyAmIE9fRElSRUNUT1JZKQorCQlmbGFncyB8PSBMT09LVVBfRElSRUNUT1JZOworCWlmICghKG9wZW5fZmxhZyAmIE9fTk9GT0xMT1cpKQorCQlmbGFncyB8PSBMT09LVVBfRk9MTE9XOworCisJZmlscCA9IGdldF9lbXB0eV9maWxwKCk7CisJaWYgKCFmaWxwKQorCQlyZXR1cm4gRVJSX1BUUigtRU5GSUxFKTsKKworCWZpbHAtPmZfZmxhZ3MgPSBvcGVuX2ZsYWc7CisJbmQuaW50ZW50Lm9wZW4uZmlsZSA9IGZpbHA7CisJbmQuaW50ZW50Lm9wZW4uZmxhZ3MgPSBmbGFnOworCW5kLmludGVudC5vcGVuLmNyZWF0ZV9tb2RlID0gbW9kZTsKKworCWlmIChvcGVuX2ZsYWcgJiBPX0NSRUFUKQorCQlnb3RvIGNyZWF0OworCisJLyogIU9fQ1JFQVQsIHNpbXBsZSBvcGVuICovCisJZXJyb3IgPSBkb19wYXRoX2xvb2t1cChkZmQsIHBhdGhuYW1lLCBmbGFncywgJm5kKTsKKwlpZiAodW5saWtlbHkoZXJyb3IpKQorCQlnb3RvIG91dF9maWxwOworCWVycm9yID0gLUVMT09QOworCWlmICghKG5kLmZsYWdzICYgTE9PS1VQX0ZPTExPVykpIHsKKwkJaWYgKG5kLmlub2RlLT5pX29wLT5mb2xsb3dfbGluaykKKwkJCWdvdG8gb3V0X3BhdGg7CisJfQorCWVycm9yID0gLUVOT1RESVI7CisJaWYgKG5kLmZsYWdzICYgTE9PS1VQX0RJUkVDVE9SWSkgeworCQlpZiAoIW5kLmlub2RlLT5pX29wLT5sb29rdXApCisJCQlnb3RvIG91dF9wYXRoOworCX0KKwlhdWRpdF9pbm9kZShwYXRobmFtZSwgbmQucGF0aC5kZW50cnkpOworCWZpbHAgPSBmaW5pc2hfb3BlbigmbmQsIG9wZW5fZmxhZywgYWNjX21vZGUpOworCXJldHVybiBmaWxwOworCitjcmVhdDoKKwkvKiBPSywgaGF2ZSB0byBjcmVhdGUgdGhlIGZpbGUuIEZpbmQgdGhlIHBhcmVudC4gKi8KKwllcnJvciA9IHBhdGhfaW5pdF9yY3UoZGZkLCBwYXRobmFtZSwKKwkJCUxPT0tVUF9QQVJFTlQgfCAoZmxhZ3MgJiBMT09LVVBfUkVWQUwpLCAmbmQpOworCWlmIChlcnJvcikKKwkJZ290byBvdXRfZmlscDsKKwllcnJvciA9IHBhdGhfd2Fsa19yY3UocGF0aG5hbWUsICZuZCk7CisJcGF0aF9maW5pc2hfcmN1KCZuZCk7CisJaWYgKHVubGlrZWx5KGVycm9yID09IC1FQ0hJTEQgfHwgZXJyb3IgPT0gLUVTVEFMRSkpIHsKKwkJLyogc2xvd2VyLCBsb2NrZWQgd2FsayAqLworCQlpZiAoZXJyb3IgPT0gLUVTVEFMRSkgeworcmV2YWw6CisJCQlmbGFncyB8PSBMT09LVVBfUkVWQUw7CisJCX0KKwkJZXJyb3IgPSBwYXRoX2luaXQoZGZkLCBwYXRobmFtZSwKKwkJCQlMT09LVVBfUEFSRU5UIHwgKGZsYWdzICYgTE9PS1VQX1JFVkFMKSwgJm5kKTsKKwkJaWYgKGVycm9yKQorCQkJZ290byBvdXRfZmlscDsKKworCQllcnJvciA9IHBhdGhfd2Fsa19zaW1wbGUocGF0aG5hbWUsICZuZCk7CisJfQorCWlmICh1bmxpa2VseShlcnJvcikpCisJCWdvdG8gb3V0X2ZpbHA7CisJaWYgKHVubGlrZWx5KCFhdWRpdF9kdW1teV9jb250ZXh0KCkpKQogCQlhdWRpdF9pbm9kZShwYXRobmFtZSwgbmQucGF0aC5kZW50cnkpOwogCiAJLyoKIAkgKiBXZSBoYXZlIHRoZSBwYXJlbnQgYW5kIGxhc3QgY29tcG9uZW50LgogCSAqLwotCi0JZXJyb3IgPSAtRU5GSUxFOwotCWZpbHAgPSBnZXRfZW1wdHlfZmlscCgpOwotCWlmIChmaWxwID09IE5VTEwpCi0JCWdvdG8gZXhpdF9wYXJlbnQ7Ci0JbmQuaW50ZW50Lm9wZW4uZmlsZSA9IGZpbHA7Ci0JZmlscC0+Zl9mbGFncyA9IG9wZW5fZmxhZzsKLQluZC5pbnRlbnQub3Blbi5mbGFncyA9IGZsYWc7Ci0JbmQuaW50ZW50Lm9wZW4uY3JlYXRlX21vZGUgPSBtb2RlOwotCW5kLmZsYWdzICY9IH5MT09LVVBfUEFSRU5UOwotCW5kLmZsYWdzIHw9IExPT0tVUF9PUEVOOwotCWlmIChvcGVuX2ZsYWcgJiBPX0NSRUFUKSB7Ci0JCW5kLmZsYWdzIHw9IExPT0tVUF9DUkVBVEU7Ci0JCWlmIChvcGVuX2ZsYWcgJiBPX0VYQ0wpCi0JCQluZC5mbGFncyB8PSBMT09LVVBfRVhDTDsKLQl9Ci0JaWYgKG9wZW5fZmxhZyAmIE9fRElSRUNUT1JZKQotCQluZC5mbGFncyB8PSBMT09LVVBfRElSRUNUT1JZOwotCWlmICghKG9wZW5fZmxhZyAmIE9fTk9GT0xMT1cpKQotCQluZC5mbGFncyB8PSBMT09LVVBfRk9MTE9XOworCW5kLmZsYWdzID0gZmxhZ3M7CiAJZmlscCA9IGRvX2xhc3QoJm5kLCAmcGF0aCwgb3Blbl9mbGFnLCBhY2NfbW9kZSwgbW9kZSwgcGF0aG5hbWUpOwogCXdoaWxlICh1bmxpa2VseSghZmlscCkpIHsgLyogdHJhaWxpbmcgc3ltbGluayAqLwogCQlzdHJ1Y3QgcGF0aCBob2xkZXI7Ci0JCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBwYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAkJdm9pZCAqY29va2llOwogCQllcnJvciA9IC1FTE9PUDsKIAkJLyogU19JU0RJUiBwYXJ0IGlzIGEgdGVtcG9yYXJ5IGF1dG9tb3VudCBrbHVkZ2UgKi8KLQkJaWYgKCEobmQuZmxhZ3MgJiBMT09LVVBfRk9MTE9XKSAmJiAhU19JU0RJUihpbm9kZS0+aV9tb2RlKSkKKwkJaWYgKCEobmQuZmxhZ3MgJiBMT09LVVBfRk9MTE9XKSAmJiAhU19JU0RJUihuZC5pbm9kZS0+aV9tb2RlKSkKIAkJCWdvdG8gZXhpdF9kcHV0OwogCQlpZiAoY291bnQrKyA9PSAzMikKIAkJCWdvdG8gZXhpdF9kcHV0OwpAQCAtMTg0MCwzNiArMjM1MiwzMyBAQAogCQkJZ290byBleGl0X2RwdXQ7CiAJCWVycm9yID0gX19kb19mb2xsb3dfbGluaygmcGF0aCwgJm5kLCAmY29va2llKTsKIAkJaWYgKHVubGlrZWx5KGVycm9yKSkgeworCQkJaWYgKCFJU19FUlIoY29va2llKSAmJiBuZC5pbm9kZS0+aV9vcC0+cHV0X2xpbmspCisJCQkJbmQuaW5vZGUtPmlfb3AtPnB1dF9saW5rKHBhdGguZGVudHJ5LCAmbmQsIGNvb2tpZSk7CiAJCQkvKiBuZC5wYXRoIGhhZCBiZWVuIGRyb3BwZWQgKi8KLQkJCWlmICghSVNfRVJSKGNvb2tpZSkgJiYgaW5vZGUtPmlfb3AtPnB1dF9saW5rKQotCQkJCWlub2RlLT5pX29wLT5wdXRfbGluayhwYXRoLmRlbnRyeSwgJm5kLCBjb29raWUpOwotCQkJcGF0aF9wdXQoJnBhdGgpOwotCQkJcmVsZWFzZV9vcGVuX2ludGVudCgmbmQpOwotCQkJZmlscCA9IEVSUl9QVFIoZXJyb3IpOwotCQkJZ290byBvdXQ7CisJCQluZC5wYXRoID0gcGF0aDsKKwkJCWdvdG8gb3V0X3BhdGg7CiAJCX0KIAkJaG9sZGVyID0gcGF0aDsKIAkJbmQuZmxhZ3MgJj0gfkxPT0tVUF9QQVJFTlQ7CiAJCWZpbHAgPSBkb19sYXN0KCZuZCwgJnBhdGgsIG9wZW5fZmxhZywgYWNjX21vZGUsIG1vZGUsIHBhdGhuYW1lKTsKLQkJaWYgKGlub2RlLT5pX29wLT5wdXRfbGluaykKLQkJCWlub2RlLT5pX29wLT5wdXRfbGluayhob2xkZXIuZGVudHJ5LCAmbmQsIGNvb2tpZSk7CisJCWlmIChuZC5pbm9kZS0+aV9vcC0+cHV0X2xpbmspCisJCQluZC5pbm9kZS0+aV9vcC0+cHV0X2xpbmsoaG9sZGVyLmRlbnRyeSwgJm5kLCBjb29raWUpOwogCQlwYXRoX3B1dCgmaG9sZGVyKTsKIAl9CiBvdXQ6CiAJaWYgKG5kLnJvb3QubW50KQogCQlwYXRoX3B1dCgmbmQucm9vdCk7Ci0JaWYgKGZpbHAgPT0gRVJSX1BUUigtRVNUQUxFKSAmJiAhZm9yY2VfcmV2YWwpIHsKLQkJZm9yY2VfcmV2YWwgPSAxOworCWlmIChmaWxwID09IEVSUl9QVFIoLUVTVEFMRSkgJiYgIShmbGFncyAmIExPT0tVUF9SRVZBTCkpCiAJCWdvdG8gcmV2YWw7Ci0JfQogCXJldHVybiBmaWxwOwogCiBleGl0X2RwdXQ6CiAJcGF0aF9wdXRfY29uZGl0aW9uYWwoJnBhdGgsICZuZCk7CitvdXRfcGF0aDoKKwlwYXRoX3B1dCgmbmQucGF0aCk7CitvdXRfZmlscDoKIAlpZiAoIUlTX0VSUihuZC5pbnRlbnQub3Blbi5maWxlKSkKIAkJcmVsZWFzZV9vcGVuX2ludGVudCgmbmQpOwotZXhpdF9wYXJlbnQ6Ci0JcGF0aF9wdXQoJm5kLnBhdGgpOwogCWZpbHAgPSBFUlJfUFRSKGVycm9yKTsKIAlnb3RvIG91dDsKIH0KQEAgLTIxMzAsMTIgKzI2MzksMTAgQEAKIHsKIAlkZ2V0KGRlbnRyeSk7CiAJc2hyaW5rX2RjYWNoZV9wYXJlbnQoZGVudHJ5KTsKLQlzcGluX2xvY2soJmRjYWNoZV9sb2NrKTsKIAlzcGluX2xvY2soJmRlbnRyeS0+ZF9sb2NrKTsKLQlpZiAoYXRvbWljX3JlYWQoJmRlbnRyeS0+ZF9jb3VudCkgPT0gMikKKwlpZiAoZGVudHJ5LT5kX2NvdW50ID09IDIpCiAJCV9fZF9kcm9wKGRlbnRyeSk7CiAJc3Bpbl91bmxvY2soJmRlbnRyeS0+ZF9sb2NrKTsKLQlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOwogfQogCiBpbnQgdmZzX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCmRpZmYgLS1naXQgYS9mcy9uYW1lc3BhY2UuYyBiL2ZzL25hbWVzcGFjZS5jCmluZGV4IDNkYmZjMDcuLjNkZGZkOTAgMTAwNjQ0Ci0tLSBhL2ZzL25hbWVzcGFjZS5jCisrKyBiL2ZzL25hbWVzcGFjZS5jCkBAIC0xMzgsNiArMTM4LDY0IEBACiAJbW50LT5tbnRfZ3JvdXBfaWQgPSAwOwogfQogCisvKgorICogdmZzbW91bnQgbG9jayBtdXN0IGJlIGhlbGQgZm9yIHJlYWQKKyAqLworc3RhdGljIGlubGluZSB2b2lkIG1udF9hZGRfY291bnQoc3RydWN0IHZmc21vdW50ICptbnQsIGludCBuKQoreworI2lmZGVmIENPTkZJR19TTVAKKwl0aGlzX2NwdV9hZGQobW50LT5tbnRfcGNwLT5tbnRfY291bnQsIG4pOworI2Vsc2UKKwlwcmVlbXB0X2Rpc2FibGUoKTsKKwltbnQtPm1udF9jb3VudCArPSBuOworCXByZWVtcHRfZW5hYmxlKCk7CisjZW5kaWYKK30KKworc3RhdGljIGlubGluZSB2b2lkIG1udF9zZXRfY291bnQoc3RydWN0IHZmc21vdW50ICptbnQsIGludCBuKQoreworI2lmZGVmIENPTkZJR19TTVAKKwl0aGlzX2NwdV93cml0ZShtbnQtPm1udF9wY3AtPm1udF9jb3VudCwgbik7CisjZWxzZQorCW1udC0+bW50X2NvdW50ID0gbjsKKyNlbmRpZgorfQorCisvKgorICogdmZzbW91bnQgbG9jayBtdXN0IGJlIGhlbGQgZm9yIHJlYWQKKyAqLworc3RhdGljIGlubGluZSB2b2lkIG1udF9pbmNfY291bnQoc3RydWN0IHZmc21vdW50ICptbnQpCit7CisJbW50X2FkZF9jb3VudChtbnQsIDEpOworfQorCisvKgorICogdmZzbW91bnQgbG9jayBtdXN0IGJlIGhlbGQgZm9yIHJlYWQKKyAqLworc3RhdGljIGlubGluZSB2b2lkIG1udF9kZWNfY291bnQoc3RydWN0IHZmc21vdW50ICptbnQpCit7CisJbW50X2FkZF9jb3VudChtbnQsIC0xKTsKK30KKworLyoKKyAqIHZmc21vdW50IGxvY2sgbXVzdCBiZSBoZWxkIGZvciB3cml0ZQorICovCit1bnNpZ25lZCBpbnQgbW50X2dldF9jb3VudChzdHJ1Y3QgdmZzbW91bnQgKm1udCkKK3sKKyNpZmRlZiBDT05GSUdfU01QCisJdW5zaWduZWQgaW50IGNvdW50ID0gYXRvbWljX3JlYWQoJm1udC0+bW50X2xvbmdyZWZzKTsKKwlpbnQgY3B1OworCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgeworCQljb3VudCArPSBwZXJfY3B1X3B0cihtbnQtPm1udF9wY3AsIGNwdSktPm1udF9jb3VudDsKKwl9CisKKwlyZXR1cm4gY291bnQ7CisjZWxzZQorCXJldHVybiBtbnQtPm1udF9jb3VudDsKKyNlbmRpZgorfQorCiBzdHJ1Y3QgdmZzbW91bnQgKmFsbG9jX3Zmc21udChjb25zdCBjaGFyICpuYW1lKQogewogCXN0cnVjdCB2ZnNtb3VudCAqbW50ID0ga21lbV9jYWNoZV96YWxsb2MobW50X2NhY2hlLCBHRlBfS0VSTkVMKTsKQEAgLTE1NCw3ICsyMTIsMTcgQEAKIAkJCQlnb3RvIG91dF9mcmVlX2lkOwogCQl9CiAKLQkJYXRvbWljX3NldCgmbW50LT5tbnRfY291bnQsIDEpOworI2lmZGVmIENPTkZJR19TTVAKKwkJbW50LT5tbnRfcGNwID0gYWxsb2NfcGVyY3B1KHN0cnVjdCBtbnRfcGNwKTsKKwkJaWYgKCFtbnQtPm1udF9wY3ApCisJCQlnb3RvIG91dF9mcmVlX2Rldm5hbWU7CisKKwkJYXRvbWljX3NldCgmbW50LT5tbnRfbG9uZ3JlZnMsIDEpOworI2Vsc2UKKwkJbW50LT5tbnRfY291bnQgPSAxOworCQltbnQtPm1udF93cml0ZXJzID0gMDsKKyNlbmRpZgorCiAJCUlOSVRfTElTVF9IRUFEKCZtbnQtPm1udF9oYXNoKTsKIAkJSU5JVF9MSVNUX0hFQUQoJm1udC0+bW50X2NoaWxkKTsKIAkJSU5JVF9MSVNUX0hFQUQoJm1udC0+bW50X21vdW50cyk7CkBAIC0xNjYsMTMgKzIzNCw2IEBACiAjaWZkZWYgQ09ORklHX0ZTTk9USUZZCiAJCUlOSVRfSExJU1RfSEVBRCgmbW50LT5tbnRfZnNub3RpZnlfbWFya3MpOwogI2VuZGlmCi0jaWZkZWYgQ09ORklHX1NNUAotCQltbnQtPm1udF93cml0ZXJzID0gYWxsb2NfcGVyY3B1KGludCk7Ci0JCWlmICghbW50LT5tbnRfd3JpdGVycykKLQkJCWdvdG8gb3V0X2ZyZWVfZGV2bmFtZTsKLSNlbHNlCi0JCW1udC0+bW50X3dyaXRlcnMgPSAwOwotI2VuZGlmCiAJfQogCXJldHVybiBtbnQ7CiAKQEAgLTIxNiwzMiArMjc3LDMyIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChfX21udF9pc19yZWFkb25seSk7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBpbmNfbW50X3dyaXRlcnMoc3RydWN0IHZmc21vdW50ICptbnQpCitzdGF0aWMgaW5saW5lIHZvaWQgbW50X2luY193cml0ZXJzKHN0cnVjdCB2ZnNtb3VudCAqbW50KQogewogI2lmZGVmIENPTkZJR19TTVAKLQkoKnBlcl9jcHVfcHRyKG1udC0+bW50X3dyaXRlcnMsIHNtcF9wcm9jZXNzb3JfaWQoKSkpKys7CisJdGhpc19jcHVfaW5jKG1udC0+bW50X3BjcC0+bW50X3dyaXRlcnMpOwogI2Vsc2UKIAltbnQtPm1udF93cml0ZXJzKys7CiAjZW5kaWYKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGRlY19tbnRfd3JpdGVycyhzdHJ1Y3QgdmZzbW91bnQgKm1udCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBtbnRfZGVjX3dyaXRlcnMoc3RydWN0IHZmc21vdW50ICptbnQpCiB7CiAjaWZkZWYgQ09ORklHX1NNUAotCSgqcGVyX2NwdV9wdHIobW50LT5tbnRfd3JpdGVycywgc21wX3Byb2Nlc3Nvcl9pZCgpKSktLTsKKwl0aGlzX2NwdV9kZWMobW50LT5tbnRfcGNwLT5tbnRfd3JpdGVycyk7CiAjZWxzZQogCW1udC0+bW50X3dyaXRlcnMtLTsKICNlbmRpZgogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IGNvdW50X21udF93cml0ZXJzKHN0cnVjdCB2ZnNtb3VudCAqbW50KQorc3RhdGljIHVuc2lnbmVkIGludCBtbnRfZ2V0X3dyaXRlcnMoc3RydWN0IHZmc21vdW50ICptbnQpCiB7CiAjaWZkZWYgQ09ORklHX1NNUAogCXVuc2lnbmVkIGludCBjb3VudCA9IDA7CiAJaW50IGNwdTsKIAogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKLQkJY291bnQgKz0gKnBlcl9jcHVfcHRyKG1udC0+bW50X3dyaXRlcnMsIGNwdSk7CisJCWNvdW50ICs9IHBlcl9jcHVfcHRyKG1udC0+bW50X3BjcCwgY3B1KS0+bW50X3dyaXRlcnM7CiAJfQogCiAJcmV0dXJuIGNvdW50OwpAQCAtMjczLDkgKzMzNCw5IEBACiAJaW50IHJldCA9IDA7CiAKIAlwcmVlbXB0X2Rpc2FibGUoKTsKLQlpbmNfbW50X3dyaXRlcnMobW50KTsKKwltbnRfaW5jX3dyaXRlcnMobW50KTsKIAkvKgotCSAqIFRoZSBzdG9yZSB0byBpbmNfbW50X3dyaXRlcnMgbXVzdCBiZSB2aXNpYmxlIGJlZm9yZSB3ZSBwYXNzCisJICogVGhlIHN0b3JlIHRvIG1udF9pbmNfd3JpdGVycyBtdXN0IGJlIHZpc2libGUgYmVmb3JlIHdlIHBhc3MKIAkgKiBNTlRfV1JJVEVfSE9MRCBsb29wIGJlbG93LCBzbyB0aGF0IHRoZSBzbG93cGF0aCBjYW4gc2VlIG91cgogCSAqIGluY3JlbWVudGVkIGNvdW50IGFmdGVyIGl0IGhhcyBzZXQgTU5UX1dSSVRFX0hPTEQuCiAJICovCkBAIC0yODksNyArMzUwLDcgQEAKIAkgKi8KIAlzbXBfcm1iKCk7CiAJaWYgKF9fbW50X2lzX3JlYWRvbmx5KG1udCkpIHsKLQkJZGVjX21udF93cml0ZXJzKG1udCk7CisJCW1udF9kZWNfd3JpdGVycyhtbnQpOwogCQlyZXQgPSAtRVJPRlM7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTMxNyw3ICszNzgsNyBAQAogCWlmIChfX21udF9pc19yZWFkb25seShtbnQpKQogCQlyZXR1cm4gLUVST0ZTOwogCXByZWVtcHRfZGlzYWJsZSgpOwotCWluY19tbnRfd3JpdGVycyhtbnQpOworCW1udF9pbmNfd3JpdGVycyhtbnQpOwogCXByZWVtcHRfZW5hYmxlKCk7CiAJcmV0dXJuIDA7CiB9CkBAIC0zNTEsNyArNDEyLDcgQEAKIHZvaWQgbW50X2Ryb3Bfd3JpdGUoc3RydWN0IHZmc21vdW50ICptbnQpCiB7CiAJcHJlZW1wdF9kaXNhYmxlKCk7Ci0JZGVjX21udF93cml0ZXJzKG1udCk7CisJbW50X2RlY193cml0ZXJzKG1udCk7CiAJcHJlZW1wdF9lbmFibGUoKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG1udF9kcm9wX3dyaXRlKTsKQEAgLTM4NCw3ICs0NDUsNyBAQAogCSAqIE1OVF9XUklURV9IT0xELCBzbyBpdCBjYW4ndCBiZSBkZWNyZW1lbnRlZCBieSBhbm90aGVyIENQVSB3aGlsZQogCSAqIHdlJ3JlIGNvdW50aW5nIHVwIGhlcmUuCiAJICovCi0JaWYgKGNvdW50X21udF93cml0ZXJzKG1udCkgPiAwKQorCWlmIChtbnRfZ2V0X3dyaXRlcnMobW50KSA+IDApCiAJCXJldCA9IC1FQlVTWTsKIAllbHNlCiAJCW1udC0+bW50X2ZsYWdzIHw9IE1OVF9SRUFET05MWTsKQEAgLTQxOCw3ICs0NzksNyBAQAogCWtmcmVlKG1udC0+bW50X2Rldm5hbWUpOwogCW1udF9mcmVlX2lkKG1udCk7CiAjaWZkZWYgQ09ORklHX1NNUAotCWZyZWVfcGVyY3B1KG1udC0+bW50X3dyaXRlcnMpOworCWZyZWVfcGVyY3B1KG1udC0+bW50X3BjcCk7CiAjZW5kaWYKIAlrbWVtX2NhY2hlX2ZyZWUobW50X2NhY2hlLCBtbnQpOwogfQpAQCAtNDkyLDYgKzU1MywyNyBAQAogfQogCiAvKgorICogQ2xlYXIgZGVudHJ5J3MgbW91bnRlZCBzdGF0ZSBpZiBpdCBoYXMgbm8gcmVtYWluaW5nIG1vdW50cy4KKyAqIHZmc21vdW50X2xvY2sgbXVzdCBiZSBoZWxkIGZvciB3cml0ZS4KKyAqLworc3RhdGljIHZvaWQgZGVudHJ5X3Jlc2V0X21vdW50ZWQoc3RydWN0IHZmc21vdW50ICptbnQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3sKKwl1bnNpZ25lZCB1OworCisJZm9yICh1ID0gMDsgdSA8IEhBU0hfU0laRTsgdSsrKSB7CisJCXN0cnVjdCB2ZnNtb3VudCAqcDsKKworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsICZtb3VudF9oYXNodGFibGVbdV0sIG1udF9oYXNoKSB7CisJCQlpZiAocC0+bW50X21vdW50cG9pbnQgPT0gZGVudHJ5KQorCQkJCXJldHVybjsKKwkJfQorCX0KKwlzcGluX2xvY2soJmRlbnRyeS0+ZF9sb2NrKTsKKwlkZW50cnktPmRfZmxhZ3MgJj0gfkRDQUNIRV9NT1VOVEVEOworCXNwaW5fdW5sb2NrKCZkZW50cnktPmRfbG9jayk7Cit9CisKKy8qCiAgKiB2ZnNtb3VudCBsb2NrIG11c3QgYmUgaGVsZCBmb3Igd3JpdGUKICAqLwogc3RhdGljIHZvaWQgZGV0YWNoX21udChzdHJ1Y3QgdmZzbW91bnQgKm1udCwgc3RydWN0IHBhdGggKm9sZF9wYXRoKQpAQCAtNTAyLDcgKzU4NCw3IEBACiAJbW50LT5tbnRfbW91bnRwb2ludCA9IG1udC0+bW50X3Jvb3Q7CiAJbGlzdF9kZWxfaW5pdCgmbW50LT5tbnRfY2hpbGQpOwogCWxpc3RfZGVsX2luaXQoJm1udC0+bW50X2hhc2gpOwotCW9sZF9wYXRoLT5kZW50cnktPmRfbW91bnRlZC0tOworCWRlbnRyeV9yZXNldF9tb3VudGVkKG9sZF9wYXRoLT5tbnQsIG9sZF9wYXRoLT5kZW50cnkpOwogfQogCiAvKgpAQCAtNTEzLDcgKzU5NSw5IEBACiB7CiAJY2hpbGRfbW50LT5tbnRfcGFyZW50ID0gbW50Z2V0KG1udCk7CiAJY2hpbGRfbW50LT5tbnRfbW91bnRwb2ludCA9IGRnZXQoZGVudHJ5KTsKLQlkZW50cnktPmRfbW91bnRlZCsrOworCXNwaW5fbG9jaygmZGVudHJ5LT5kX2xvY2spOworCWRlbnRyeS0+ZF9mbGFncyB8PSBEQ0FDSEVfTU9VTlRFRDsKKwlzcGluX3VubG9jaygmZGVudHJ5LT5kX2xvY2spOwogfQogCiAvKgpAQCAtNjI5LDkgKzcxMywxMCBAQAogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgX19tbnRwdXQoc3RydWN0IHZmc21vdW50ICptbnQpCitzdGF0aWMgaW5saW5lIHZvaWQgbW50ZnJlZShzdHJ1Y3QgdmZzbW91bnQgKm1udCkKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gbW50LT5tbnRfc2I7CisKIAkvKgogCSAqIFRoaXMgcHJvYmFibHkgaW5kaWNhdGVzIHRoYXQgc29tZWJvZHkgbWVzc2VkCiAJICogdXAgYSBtbnRfd2FudC9kcm9wX3dyaXRlKCkgcGFpci4gIElmIHRoaXMKQEAgLTYzOSwzOCArNzI0LDEyMyBAQAogCSAqIHRvIG1ha2Ugci93LT5yL28gdHJhbnNpdGlvbnMuCiAJICovCiAJLyoKLQkgKiBhdG9taWNfZGVjX2FuZF9sb2NrKCkgdXNlZCB0byBkZWFsIHdpdGggLT5tbnRfY291bnQgZGVjcmVtZW50cwotCSAqIHByb3ZpZGVzIGJhcnJpZXJzLCBzbyBjb3VudF9tbnRfd3JpdGVycygpIGJlbG93IGlzIHNhZmUuICBBVgorCSAqIFRoZSBsb2NraW5nIHVzZWQgdG8gZGVhbCB3aXRoIG1udF9jb3VudCBkZWNyZW1lbnQgcHJvdmlkZXMgYmFycmllcnMsCisJICogc28gbW50X2dldF93cml0ZXJzKCkgYmVsb3cgaXMgc2FmZS4KIAkgKi8KLQlXQVJOX09OKGNvdW50X21udF93cml0ZXJzKG1udCkpOworCVdBUk5fT04obW50X2dldF93cml0ZXJzKG1udCkpOwogCWZzbm90aWZ5X3Zmc21vdW50X2RlbGV0ZShtbnQpOwogCWRwdXQobW50LT5tbnRfcm9vdCk7CiAJZnJlZV92ZnNtbnQobW50KTsKIAlkZWFjdGl2YXRlX3N1cGVyKHNiKTsKIH0KIAotdm9pZCBtbnRwdXRfbm9fZXhwaXJlKHN0cnVjdCB2ZnNtb3VudCAqbW50KQorI2lmZGVmIENPTkZJR19TTVAKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX21udHB1dChzdHJ1Y3QgdmZzbW91bnQgKm1udCwgaW50IGxvbmdyZWZzKQogewotcmVwZWF0OgotCWlmIChhdG9taWNfYWRkX3VubGVzcygmbW50LT5tbnRfY291bnQsIC0xLCAxKSkKKwlpZiAoIWxvbmdyZWZzKSB7CitwdXRfYWdhaW46CisJCWJyX3JlYWRfbG9jayh2ZnNtb3VudF9sb2NrKTsKKwkJaWYgKGxpa2VseShhdG9taWNfcmVhZCgmbW50LT5tbnRfbG9uZ3JlZnMpKSkgeworCQkJbW50X2RlY19jb3VudChtbnQpOworCQkJYnJfcmVhZF91bmxvY2sodmZzbW91bnRfbG9jayk7CisJCQlyZXR1cm47CisJCX0KKwkJYnJfcmVhZF91bmxvY2sodmZzbW91bnRfbG9jayk7CisJfSBlbHNlIHsKKwkJQlVHX09OKCFhdG9taWNfcmVhZCgmbW50LT5tbnRfbG9uZ3JlZnMpKTsKKwkJaWYgKGF0b21pY19hZGRfdW5sZXNzKCZtbnQtPm1udF9sb25ncmVmcywgLTEsIDEpKQorCQkJcmV0dXJuOworCX0KKworCWJyX3dyaXRlX2xvY2sodmZzbW91bnRfbG9jayk7CisJaWYgKCFsb25ncmVmcykKKwkJbW50X2RlY19jb3VudChtbnQpOworCWVsc2UKKwkJYXRvbWljX2RlYygmbW50LT5tbnRfbG9uZ3JlZnMpOworCWlmIChtbnRfZ2V0X2NvdW50KG1udCkpIHsKKwkJYnJfd3JpdGVfdW5sb2NrKHZmc21vdW50X2xvY2spOworCQlyZXR1cm47CisJfQorCWlmICh1bmxpa2VseShtbnQtPm1udF9waW5uZWQpKSB7CisJCW1udF9hZGRfY291bnQobW50LCBtbnQtPm1udF9waW5uZWQgKyAxKTsKKwkJbW50LT5tbnRfcGlubmVkID0gMDsKKwkJYnJfd3JpdGVfdW5sb2NrKHZmc21vdW50X2xvY2spOworCQlhY2N0X2F1dG9fY2xvc2VfbW50KG1udCk7CisJCWdvdG8gcHV0X2FnYWluOworCX0KKwlicl93cml0ZV91bmxvY2sodmZzbW91bnRfbG9jayk7CisJbW50ZnJlZShtbnQpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX21udHB1dChzdHJ1Y3QgdmZzbW91bnQgKm1udCwgaW50IGxvbmdyZWZzKQoreworcHV0X2FnYWluOgorCW1udF9kZWNfY291bnQobW50KTsKKwlpZiAobGlrZWx5KG1udF9nZXRfY291bnQobW50KSkpCiAJCXJldHVybjsKIAlicl93cml0ZV9sb2NrKHZmc21vdW50X2xvY2spOwotCWlmICghYXRvbWljX2RlY19hbmRfdGVzdCgmbW50LT5tbnRfY291bnQpKSB7CisJaWYgKHVubGlrZWx5KG1udC0+bW50X3Bpbm5lZCkpIHsKKwkJbW50X2FkZF9jb3VudChtbnQsIG1udC0+bW50X3Bpbm5lZCArIDEpOworCQltbnQtPm1udF9waW5uZWQgPSAwOwogCQlicl93cml0ZV91bmxvY2sodmZzbW91bnRfbG9jayk7Ci0JCXJldHVybjsKKwkJYWNjdF9hdXRvX2Nsb3NlX21udChtbnQpOworCQlnb3RvIHB1dF9hZ2FpbjsKIAl9Ci0JaWYgKGxpa2VseSghbW50LT5tbnRfcGlubmVkKSkgewotCQlicl93cml0ZV91bmxvY2sodmZzbW91bnRfbG9jayk7Ci0JCV9fbW50cHV0KG1udCk7Ci0JCXJldHVybjsKLQl9Ci0JYXRvbWljX2FkZChtbnQtPm1udF9waW5uZWQgKyAxLCAmbW50LT5tbnRfY291bnQpOwotCW1udC0+bW50X3Bpbm5lZCA9IDA7CiAJYnJfd3JpdGVfdW5sb2NrKHZmc21vdW50X2xvY2spOwotCWFjY3RfYXV0b19jbG9zZV9tbnQobW50KTsKLQlnb3RvIHJlcGVhdDsKKwltbnRmcmVlKG1udCk7CiB9Ci1FWFBPUlRfU1lNQk9MKG1udHB1dF9ub19leHBpcmUpOworI2VuZGlmCisKK3N0YXRpYyB2b2lkIG1udHB1dF9ub19leHBpcmUoc3RydWN0IHZmc21vdW50ICptbnQpCit7CisJX19tbnRwdXQobW50LCAwKTsKK30KKwordm9pZCBtbnRwdXQoc3RydWN0IHZmc21vdW50ICptbnQpCit7CisJaWYgKG1udCkgeworCQkvKiBhdm9pZCBjYWNoZWxpbmUgcGluZ3BvbmcsIGhvcGUgZ2NjIGRvZXNuJ3QgZ2V0ICJzbWFydCIgKi8KKwkJaWYgKHVubGlrZWx5KG1udC0+bW50X2V4cGlyeV9tYXJrKSkKKwkJCW1udC0+bW50X2V4cGlyeV9tYXJrID0gMDsKKwkJX19tbnRwdXQobW50LCAwKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKG1udHB1dCk7CisKK3N0cnVjdCB2ZnNtb3VudCAqbW50Z2V0KHN0cnVjdCB2ZnNtb3VudCAqbW50KQoreworCWlmIChtbnQpCisJCW1udF9pbmNfY291bnQobW50KTsKKwlyZXR1cm4gbW50OworfQorRVhQT1JUX1NZTUJPTChtbnRnZXQpOworCit2b2lkIG1udHB1dF9sb25nKHN0cnVjdCB2ZnNtb3VudCAqbW50KQoreworI2lmZGVmIENPTkZJR19TTVAKKwlpZiAobW50KSB7CisJCS8qIGF2b2lkIGNhY2hlbGluZSBwaW5ncG9uZywgaG9wZSBnY2MgZG9lc24ndCBnZXQgInNtYXJ0IiAqLworCQlpZiAodW5saWtlbHkobW50LT5tbnRfZXhwaXJ5X21hcmspKQorCQkJbW50LT5tbnRfZXhwaXJ5X21hcmsgPSAwOworCQlfX21udHB1dChtbnQsIDEpOworCX0KKyNlbHNlCisJbW50cHV0KG1udCk7CisjZW5kaWYKK30KK0VYUE9SVF9TWU1CT0wobW50cHV0X2xvbmcpOworCitzdHJ1Y3QgdmZzbW91bnQgKm1udGdldF9sb25nKHN0cnVjdCB2ZnNtb3VudCAqbW50KQoreworI2lmZGVmIENPTkZJR19TTVAKKwlpZiAobW50KQorCQlhdG9taWNfaW5jKCZtbnQtPm1udF9sb25ncmVmcyk7CisJcmV0dXJuIG1udDsKKyNlbHNlCisJcmV0dXJuIG1udGdldChtbnQpOworI2VuZGlmCit9CitFWFBPUlRfU1lNQk9MKG1udGdldF9sb25nKTsKIAogdm9pZCBtbnRfcGluKHN0cnVjdCB2ZnNtb3VudCAqbW50KQogewpAQCAtNjc4LDE5ICs4NDgsMTcgQEAKIAltbnQtPm1udF9waW5uZWQrKzsKIAlicl93cml0ZV91bmxvY2sodmZzbW91bnRfbG9jayk7CiB9Ci0KIEVYUE9SVF9TWU1CT0wobW50X3Bpbik7CiAKIHZvaWQgbW50X3VucGluKHN0cnVjdCB2ZnNtb3VudCAqbW50KQogewogCWJyX3dyaXRlX2xvY2sodmZzbW91bnRfbG9jayk7CiAJaWYgKG1udC0+bW50X3Bpbm5lZCkgewotCQlhdG9taWNfaW5jKCZtbnQtPm1udF9jb3VudCk7CisJCW1udF9pbmNfY291bnQobW50KTsKIAkJbW50LT5tbnRfcGlubmVkLS07CiAJfQogCWJyX3dyaXRlX3VubG9jayh2ZnNtb3VudF9sb2NrKTsKIH0KLQogRVhQT1JUX1NZTUJPTChtbnRfdW5waW4pOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgbWFuZ2xlKHN0cnVjdCBzZXFfZmlsZSAqbSwgY29uc3QgY2hhciAqcykKQEAgLTk4NSwxMiArMTE1MywxMyBAQAogCWludCBtaW5pbXVtX3JlZnMgPSAwOwogCXN0cnVjdCB2ZnNtb3VudCAqcDsKIAotCWJyX3JlYWRfbG9jayh2ZnNtb3VudF9sb2NrKTsKKwkvKiB3cml0ZSBsb2NrIG5lZWRlZCBmb3IgbW50X2dldF9jb3VudCAqLworCWJyX3dyaXRlX2xvY2sodmZzbW91bnRfbG9jayk7CiAJZm9yIChwID0gbW50OyBwOyBwID0gbmV4dF9tbnQocCwgbW50KSkgewotCQlhY3R1YWxfcmVmcyArPSBhdG9taWNfcmVhZCgmcC0+bW50X2NvdW50KTsKKwkJYWN0dWFsX3JlZnMgKz0gbW50X2dldF9jb3VudChwKTsKIAkJbWluaW11bV9yZWZzICs9IDI7CiAJfQotCWJyX3JlYWRfdW5sb2NrKHZmc21vdW50X2xvY2spOworCWJyX3dyaXRlX3VubG9jayh2ZnNtb3VudF9sb2NrKTsKIAogCWlmIChhY3R1YWxfcmVmcyA+IG1pbmltdW1fcmVmcykKIAkJcmV0dXJuIDA7CkBAIC0xMDE3LDEwICsxMTg2LDEwIEBACiB7CiAJaW50IHJldCA9IDE7CiAJZG93bl9yZWFkKCZuYW1lc3BhY2Vfc2VtKTsKLQlicl9yZWFkX2xvY2sodmZzbW91bnRfbG9jayk7CisJYnJfd3JpdGVfbG9jayh2ZnNtb3VudF9sb2NrKTsKIAlpZiAocHJvcGFnYXRlX21vdW50X2J1c3kobW50LCAyKSkKIAkJcmV0ID0gMDsKLQlicl9yZWFkX3VubG9jayh2ZnNtb3VudF9sb2NrKTsKKwlicl93cml0ZV91bmxvY2sodmZzbW91bnRfbG9jayk7CiAJdXBfcmVhZCgmbmFtZXNwYWNlX3NlbSk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTEwNDcsNyArMTIxNiw3IEBACiAJCQlkcHV0KGRlbnRyeSk7CiAJCQltbnRwdXQobSk7CiAJCX0KLQkJbW50cHV0KG1udCk7CisJCW1udHB1dF9sb25nKG1udCk7CiAJfQogfQogCkBAIC0xMDczLDcgKzEyNDIsNyBAQAogCQlsaXN0X2RlbF9pbml0KCZwLT5tbnRfY2hpbGQpOwogCQlpZiAocC0+bW50X3BhcmVudCAhPSBwKSB7CiAJCQlwLT5tbnRfcGFyZW50LT5tbnRfZ2hvc3RzKys7Ci0JCQlwLT5tbnRfbW91bnRwb2ludC0+ZF9tb3VudGVkLS07CisJCQlkZW50cnlfcmVzZXRfbW91bnRlZChwLT5tbnRfcGFyZW50LCBwLT5tbnRfbW91bnRwb2ludCk7CiAJCX0KIAkJY2hhbmdlX21udF9wcm9wYWdhdGlvbihwLCBNU19QUklWQVRFKTsKIAl9CkBAIC0xMTAyLDggKzEyNzEsMTYgQEAKIAkJICAgIGZsYWdzICYgKE1OVF9GT1JDRSB8IE1OVF9ERVRBQ0gpKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJaWYgKGF0b21pY19yZWFkKCZtbnQtPm1udF9jb3VudCkgIT0gMikKKwkJLyoKKwkJICogcHJvYmFibHkgZG9uJ3Qgc3RyaWN0bHkgbmVlZCB0aGUgbG9jayBoZXJlIGlmIHdlIGV4YW1pbmVkCisJCSAqIGFsbCByYWNlIGNhc2VzLCBidXQgaXQncyBhIHNsb3dwYXRoLgorCQkgKi8KKwkJYnJfd3JpdGVfbG9jayh2ZnNtb3VudF9sb2NrKTsKKwkJaWYgKG1udF9nZXRfY291bnQobW50KSAhPSAyKSB7CisJCQlicl93cml0ZV9sb2NrKHZmc21vdW50X2xvY2spOwogCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQorCQlicl93cml0ZV91bmxvY2sodmZzbW91bnRfbG9jayk7CiAKIAkJaWYgKCF4Y2hnKCZtbnQtPm1udF9leHBpcnlfbWFyaywgMSkpCiAJCQlyZXR1cm4gLUVBR0FJTjsKQEAgLTE3OTIsNyArMTk2OSw3IEBACiAKIHVubG9jazoKIAl1cF93cml0ZSgmbmFtZXNwYWNlX3NlbSk7Ci0JbW50cHV0KG5ld21udCk7CisJbW50cHV0X2xvbmcobmV3bW50KTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0yMTI1LDExICsyMzAyLDExIEBACiAJCWlmIChmcykgewogCQkJaWYgKHAgPT0gZnMtPnJvb3QubW50KSB7CiAJCQkJcm9vdG1udCA9IHA7Ci0JCQkJZnMtPnJvb3QubW50ID0gbW50Z2V0KHEpOworCQkJCWZzLT5yb290Lm1udCA9IG1udGdldF9sb25nKHEpOwogCQkJfQogCQkJaWYgKHAgPT0gZnMtPnB3ZC5tbnQpIHsKIAkJCQlwd2RtbnQgPSBwOwotCQkJCWZzLT5wd2QubW50ID0gbW50Z2V0KHEpOworCQkJCWZzLT5wd2QubW50ID0gbW50Z2V0X2xvbmcocSk7CiAJCQl9CiAJCX0KIAkJcCA9IG5leHRfbW50KHAsIG1udF9ucy0+cm9vdCk7CkBAIC0yMTM4LDkgKzIzMTUsOSBAQAogCXVwX3dyaXRlKCZuYW1lc3BhY2Vfc2VtKTsKIAogCWlmIChyb290bW50KQotCQltbnRwdXQocm9vdG1udCk7CisJCW1udHB1dF9sb25nKHJvb3RtbnQpOwogCWlmIChwd2RtbnQpCi0JCW1udHB1dChwd2RtbnQpOworCQltbnRwdXRfbG9uZyhwd2RtbnQpOwogCiAJcmV0dXJuIG5ld19uczsKIH0KQEAgLTIzMjcsNiArMjUwNCw3IEBACiAJdG91Y2hfbW50X25hbWVzcGFjZShjdXJyZW50LT5uc3Byb3h5LT5tbnRfbnMpOwogCWJyX3dyaXRlX3VubG9jayh2ZnNtb3VudF9sb2NrKTsKIAljaHJvb3RfZnNfcmVmcygmcm9vdCwgJm5ldyk7CisKIAllcnJvciA9IDA7CiAJcGF0aF9wdXQoJnJvb3RfcGFyZW50KTsKIAlwYXRoX3B1dCgmcGFyZW50X3BhdGgpOwpAQCAtMjM1Myw2ICsyNTMxLDcgQEAKIAltbnQgPSBkb19rZXJuX21vdW50KCJyb290ZnMiLCAwLCAicm9vdGZzIiwgTlVMTCk7CiAJaWYgKElTX0VSUihtbnQpKQogCQlwYW5pYygiQ2FuJ3QgY3JlYXRlIHJvb3RmcyIpOworCiAJbnMgPSBjcmVhdGVfbW50X25zKG1udCk7CiAJaWYgKElTX0VSUihucykpCiAJCXBhbmljKCJDYW4ndCBhbGxvY2F0ZSBpbml0aWFsIG5hbWVzcGFjZSIpOwpkaWZmIC0tZ2l0IGEvZnMvbmNwZnMvZGlyLmMgYi9mcy9uY3Bmcy9kaXIuYwppbmRleCBmMjJiMTJlLi4yOGYxMzZkIDEwMDY0NAotLS0gYS9mcy9uY3Bmcy9kaXIuYworKysgYi9mcy9uY3Bmcy9kaXIuYwpAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L25hbWVpLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAKQEAgLTc0LDkgKzc1LDEyIEBACiAgKiBEZW50cnkgb3BlcmF0aW9ucyByb3V0aW5lcwogICovCiBzdGF0aWMgaW50IG5jcF9sb29rdXBfdmFsaWRhdGUoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgbmFtZWlkYXRhICopOwotc3RhdGljIGludCBuY3BfaGFzaF9kZW50cnkoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgcXN0ciAqKTsKLXN0YXRpYyBpbnQgbmNwX2NvbXBhcmVfZGVudHJ5IChzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBxc3RyICosIHN0cnVjdCBxc3RyICopOwotc3RhdGljIGludCBuY3BfZGVsZXRlX2RlbnRyeShzdHJ1Y3QgZGVudHJ5ICopOworc3RhdGljIGludCBuY3BfaGFzaF9kZW50cnkoY29uc3Qgc3RydWN0IGRlbnRyeSAqLCBjb25zdCBzdHJ1Y3QgaW5vZGUgKiwKKwkJc3RydWN0IHFzdHIgKik7CitzdGF0aWMgaW50IG5jcF9jb21wYXJlX2RlbnRyeShjb25zdCBzdHJ1Y3QgZGVudHJ5ICosIGNvbnN0IHN0cnVjdCBpbm9kZSAqLAorCQljb25zdCBzdHJ1Y3QgZGVudHJ5ICosIGNvbnN0IHN0cnVjdCBpbm9kZSAqLAorCQl1bnNpZ25lZCBpbnQsIGNvbnN0IGNoYXIgKiwgY29uc3Qgc3RydWN0IHFzdHIgKik7CitzdGF0aWMgaW50IG5jcF9kZWxldGVfZGVudHJ5KGNvbnN0IHN0cnVjdCBkZW50cnkgKik7CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgbmNwX2RlbnRyeV9vcGVyYXRpb25zID0KIHsKQEAgLTExMywxMCArMTE3LDEwIEBACiAKICNkZWZpbmUgbmNwX3ByZXNlcnZlX2Nhc2UoaSkJKG5jcF9uYW1lc3BhY2UoaSkgIT0gTldfTlNfRE9TKQogCi1zdGF0aWMgaW5saW5lIGludCBuY3BfY2FzZV9zZW5zaXRpdmUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQorc3RhdGljIGlubGluZSBpbnQgbmNwX2Nhc2Vfc2Vuc2l0aXZlKGNvbnN0IHN0cnVjdCBpbm9kZSAqaSkKIHsKICNpZmRlZiBDT05GSUdfTkNQRlNfTkZTX05TCi0JcmV0dXJuIG5jcF9uYW1lc3BhY2UoZGVudHJ5LT5kX2lub2RlKSA9PSBOV19OU19ORlM7CisJcmV0dXJuIG5jcF9uYW1lc3BhY2UoaSkgPT0gTldfTlNfTkZTOwogI2Vsc2UKIAlyZXR1cm4gMDsKICNlbmRpZiAvKiBDT05GSUdfTkNQRlNfTkZTX05TICovCkBAIC0xMjcsMTQgKzEzMSwxNiBAQAogICogaXMgY2FzZS1zZW5zaXRpdmUuCiAgKi8KIHN0YXRpYyBpbnQgCi1uY3BfaGFzaF9kZW50cnkoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgcXN0ciAqdGhpcykKK25jcF9oYXNoX2RlbnRyeShjb25zdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCXN0cnVjdCBxc3RyICp0aGlzKQogewotCWlmICghbmNwX2Nhc2Vfc2Vuc2l0aXZlKGRlbnRyeSkpIHsKKwlpZiAoIW5jcF9jYXNlX3NlbnNpdGl2ZShpbm9kZSkpIHsKKwkJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGRlbnRyeS0+ZF9zYjsKIAkJc3RydWN0IG5sc190YWJsZSAqdDsKIAkJdW5zaWduZWQgbG9uZyBoYXNoOwogCQlpbnQgaTsKIAotCQl0ID0gTkNQX0lPX1RBQkxFKGRlbnRyeSk7CisJCXQgPSBOQ1BfSU9fVEFCTEUoc2IpOwogCQloYXNoID0gaW5pdF9uYW1lX2hhc2goKTsKIAkJZm9yIChpPTA7IGk8dGhpcy0+bGVuIDsgaSsrKQogCQkJaGFzaCA9IHBhcnRpYWxfbmFtZV9oYXNoKG5jcF90b2xvd2VyKHQsIHRoaXMtPm5hbWVbaV0pLApAQCAtMTQ1LDE1ICsxNTEsMTcgQEAKIH0KIAogc3RhdGljIGludAotbmNwX2NvbXBhcmVfZGVudHJ5KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IHFzdHIgKmEsIHN0cnVjdCBxc3RyICpiKQorbmNwX2NvbXBhcmVfZGVudHJ5KGNvbnN0IHN0cnVjdCBkZW50cnkgKnBhcmVudCwgY29uc3Qgc3RydWN0IGlub2RlICpwaW5vZGUsCisJCWNvbnN0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSwKKwkJdW5zaWduZWQgaW50IGxlbiwgY29uc3QgY2hhciAqc3RyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSkKIHsKLQlpZiAoYS0+bGVuICE9IGItPmxlbikKKwlpZiAobGVuICE9IG5hbWUtPmxlbikKIAkJcmV0dXJuIDE7CiAKLQlpZiAobmNwX2Nhc2Vfc2Vuc2l0aXZlKGRlbnRyeSkpCi0JCXJldHVybiBzdHJuY21wKGEtPm5hbWUsIGItPm5hbWUsIGEtPmxlbik7CisJaWYgKG5jcF9jYXNlX3NlbnNpdGl2ZShwaW5vZGUpKQorCQlyZXR1cm4gc3RybmNtcChzdHIsIG5hbWUtPm5hbWUsIGxlbik7CiAKLQlyZXR1cm4gbmNwX3N0cm5pY21wKE5DUF9JT19UQUJMRShkZW50cnkpLCBhLT5uYW1lLCBiLT5uYW1lLCBhLT5sZW4pOworCXJldHVybiBuY3Bfc3RybmljbXAoTkNQX0lPX1RBQkxFKHBpbm9kZS0+aV9zYiksIHN0ciwgbmFtZS0+bmFtZSwgbGVuKTsKIH0KIAogLyoKQEAgLTE2Miw3ICsxNzAsNyBAQAogICogQ2xvc2luZyBmaWxlcyBjYW4gYmUgc2FmZWx5IHBvc3Rwb25lZCB1bnRpbCBpcHV0KCkgLSBpdCdzIGRvbmUgdGhlcmUgYW55d2F5LgogICovCiBzdGF0aWMgaW50Ci1uY3BfZGVsZXRlX2RlbnRyeShzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5KQorbmNwX2RlbGV0ZV9kZW50cnkoY29uc3Qgc3RydWN0IGRlbnRyeSAqIGRlbnRyeSkKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwogCkBAIC0zMDEsNiArMzA5LDkgQEAKIAlpbnQgcmVzLCB2YWwgPSAwLCBsZW47CiAJX191OCBfX25hbWVbTkNQX01BWFBBVEhMRU4gKyAxXTsKIAorCWlmIChuZC0+ZmxhZ3MgJiBMT09LVVBfUkNVKQorCQlyZXR1cm4gLUVDSElMRDsKKwogCXBhcmVudCA9IGRnZXRfcGFyZW50KGRlbnRyeSk7CiAJZGlyID0gcGFyZW50LT5kX2lub2RlOwogCkBAIC0zODQsMjEgKzM5NSwyMSBAQAogCX0KIAogCS8qIElmIGEgcG9pbnRlciBpcyBpbnZhbGlkLCB3ZSBzZWFyY2ggdGhlIGRlbnRyeS4gKi8KLQlzcGluX2xvY2soJmRjYWNoZV9sb2NrKTsKKwlzcGluX2xvY2soJnBhcmVudC0+ZF9sb2NrKTsKIAluZXh0ID0gcGFyZW50LT5kX3N1YmRpcnMubmV4dDsKIAl3aGlsZSAobmV4dCAhPSAmcGFyZW50LT5kX3N1YmRpcnMpIHsKIAkJZGVudCA9IGxpc3RfZW50cnkobmV4dCwgc3RydWN0IGRlbnRyeSwgZF91LmRfY2hpbGQpOwogCQlpZiAoKHVuc2lnbmVkIGxvbmcpZGVudC0+ZF9mc2RhdGEgPT0gZnBvcykgewogCQkJaWYgKGRlbnQtPmRfaW5vZGUpCi0JCQkJZGdldF9sb2NrZWQoZGVudCk7CisJCQkJZGdldChkZW50KTsKIAkJCWVsc2UKIAkJCQlkZW50ID0gTlVMTDsKLQkJCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7CisJCQlzcGluX3VubG9jaygmcGFyZW50LT5kX2xvY2spOwogCQkJZ290byBvdXQ7CiAJCX0KIAkJbmV4dCA9IG5leHQtPm5leHQ7CiAJfQotCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7CisJc3Bpbl91bmxvY2soJnBhcmVudC0+ZF9sb2NrKTsKIAlyZXR1cm4gTlVMTDsKIAogb3V0OgpAQCAtNTkyLDcgKzYwMyw3IEBACiAJcW5hbWUuaGFzaCA9IGZ1bGxfbmFtZV9oYXNoKHFuYW1lLm5hbWUsIHFuYW1lLmxlbik7CiAKIAlpZiAoZGVudHJ5LT5kX29wICYmIGRlbnRyeS0+ZF9vcC0+ZF9oYXNoKQotCQlpZiAoZGVudHJ5LT5kX29wLT5kX2hhc2goZGVudHJ5LCAmcW5hbWUpICE9IDApCisJCWlmIChkZW50cnktPmRfb3AtPmRfaGFzaChkZW50cnksIGRlbnRyeS0+ZF9pbm9kZSwgJnFuYW1lKSAhPSAwKQogCQkJZ290byBlbmRfYWR2YW5jZTsKIAogCW5ld2RlbnQgPSBkX2xvb2t1cChkZW50cnksICZxbmFtZSk7CkBAIC02MTEsMzUgKzYyMiwxMiBAQAogCQkJc2hyaW5rX2RjYWNoZV9wYXJlbnQobmV3ZGVudCk7CiAKIAkJLyoKLQkJICogSXQgaXMgbm90IGFzIGRhbmdlcm91cyBhcyBpdCBsb29rcy4gIE5ldFdhcmUncyBPUzIgbmFtZXNwYWNlIGlzCi0JCSAqIGNhc2UgcHJlc2VydmluZyB5ZXQgY2FzZSBpbnNlbnNpdGl2ZS4gIFNvIHdlIHVwZGF0ZSBkZW50cnkncyBuYW1lCi0JCSAqIGFzIHJlY2VpdmVkIGZyb20gc2VydmVyLiAgV2UgZm91bmQgZGVudHJ5IHZpYSBkX2xvb2t1cCB3aXRoIG91cgotCQkgKiBoYXNoLCBzbyB3ZSBrbm93IHRoYXQgaGFzaCBkb2VzIG5vdCBjaGFuZ2UsIGFuZCBzbyByZXBsYWNpbmcgbmFtZQotCQkgKiBzaG91bGQgYmUgcmVhc29uYWJseSBzYWZlLgorCQkgKiBOZXRXYXJlJ3MgT1MyIG5hbWVzcGFjZSBpcyBjYXNlIHByZXNlcnZpbmcgeWV0IGNhc2UKKwkJICogaW5zZW5zaXRpdmUuICBTbyB3ZSB1cGRhdGUgZGVudHJ5J3MgbmFtZSBhcyByZWNlaXZlZCBmcm9tCisJCSAqIHNlcnZlci4gUGFyZW50IGRpcidzIGlfbXV0ZXggaXMgbG9ja2VkIGJlY2F1c2Ugd2UncmUgaW4KKwkJICogcmVhZGRpci4KIAkJICovCi0JCWlmIChxbmFtZS5sZW4gPT0gbmV3ZGVudC0+ZF9uYW1lLmxlbiAmJgotCQkgICAgbWVtY21wKG5ld2RlbnQtPmRfbmFtZS5uYW1lLCBxbmFtZS5uYW1lLCBuZXdkZW50LT5kX25hbWUubGVuKSkgewotCQkJc3RydWN0IGlub2RlICppbm9kZSA9IG5ld2RlbnQtPmRfaW5vZGU7Ci0KLQkJCS8qCi0JCQkgKiBJbnNpZGUgbmNwZnMgYWxsIHVzZXMgb2YgZF9uYW1lIGFyZSBlaXRoZXIgZm9yIGRlYnVnZ2luZywKLQkJCSAqIG9yIG9uIGZ1bmN0aW9ucyB3aGljaCBhY3F1aXJlIGlub2RlIG11dGV4IChta25vZCwgY3JlYXQsCi0JCQkgKiBsb29rdXApLiAgU28gZ3JhYiBpX211dGV4IGhlcmUsIHRvIGJlIHN1cmUuICBkX3BhdGgKLQkJCSAqIHVzZXMgZGNhY2hlX2xvY2sgd2hlbiBnZW5lcmF0aW5nIHBhdGgsIHNvIHdlIHNob3VsZCB0b28uCi0JCQkgKiBBbmQgZmluYWxseSBkX2NvbXBhcmUgaXMgcHJvdGVjdGVkIGJ5IGRlbnRyeSdzIGRfbG9jaywgc28KLQkJCSAqIGhlcmUgd2UgZ28uCi0JCQkgKi8KLQkJCWlmIChpbm9kZSkKLQkJCQltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7Ci0JCQlzcGluX2xvY2soJmRjYWNoZV9sb2NrKTsKLQkJCXNwaW5fbG9jaygmbmV3ZGVudC0+ZF9sb2NrKTsKLQkJCW1lbWNweSgoY2hhciAqKSBuZXdkZW50LT5kX25hbWUubmFtZSwgcW5hbWUubmFtZSwKLQkJCQkJCQkJbmV3ZGVudC0+ZF9uYW1lLmxlbik7Ci0JCQlzcGluX3VubG9jaygmbmV3ZGVudC0+ZF9sb2NrKTsKLQkJCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7Ci0JCQlpZiAoaW5vZGUpCi0JCQkJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7Ci0JCX0KKwkJZGVudHJ5X3VwZGF0ZV9uYW1lX2Nhc2UobmV3ZGVudCwgJnFuYW1lKTsKIAl9CiAKIAlpZiAoIW5ld2RlbnQtPmRfaW5vZGUpIHsKQEAgLTY0OSw3ICs2MzcsNyBAQAogCQllbnRyeS0+aW5vID0gaXVuaXF1ZShkaXItPmlfc2IsIDIpOwogCQlpbm9kZSA9IG5jcF9pZ2V0KGRpci0+aV9zYiwgZW50cnkpOwogCQlpZiAoaW5vZGUpIHsKLQkJCW5ld2RlbnQtPmRfb3AgPSAmbmNwX2RlbnRyeV9vcGVyYXRpb25zOworCQkJZF9zZXRfZF9vcChuZXdkZW50LCAmbmNwX2RlbnRyeV9vcGVyYXRpb25zKTsKIAkJCWRfaW5zdGFudGlhdGUobmV3ZGVudCwgaW5vZGUpOwogCQkJaWYgKCFoYXNoZWQpCiAJCQkJZF9yZWhhc2gobmV3ZGVudCk7CkBAIC02NTcsNyArNjQ1LDcgQEAKIAl9IGVsc2UgewogCQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbmV3ZGVudC0+ZF9pbm9kZTsKIAotCQltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CisJCW11dGV4X2xvY2tfbmVzdGVkKCZpbm9kZS0+aV9tdXRleCwgSV9NVVRFWF9DSElMRCk7CiAJCW5jcF91cGRhdGVfaW5vZGUyKGlub2RlLCBlbnRyeSk7CiAJCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCX0KQEAgLTkwNSw3ICs4OTMsNyBAQAogCWlmIChpbm9kZSkgewogCQluY3BfbmV3X2RlbnRyeShkZW50cnkpOwogYWRkX2VudHJ5OgotCQlkZW50cnktPmRfb3AgPSAmbmNwX2RlbnRyeV9vcGVyYXRpb25zOworCQlkX3NldF9kX29wKGRlbnRyeSwgJm5jcF9kZW50cnlfb3BlcmF0aW9ucyk7CiAJCWRfYWRkKGRlbnRyeSwgaW5vZGUpOwogCQllcnJvciA9IDA7CiAJfQpkaWZmIC0tZ2l0IGEvZnMvbmNwZnMvaW5vZGUuYyBiL2ZzL25jcGZzL2lub2RlLmMKaW5kZXggOGZiOTNiNi4uOWIzOWE1ZCAxMDA2NDQKLS0tIGEvZnMvbmNwZnMvaW5vZGUuYworKysgYi9mcy9uY3Bmcy9pbm9kZS5jCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8bGludXgvdmZzLmg+CiAjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L25hbWVpLmg+CiAKICNpbmNsdWRlIDxsaW51eC9uY3BfZnMuaD4KIApAQCAtNTgsOSArNTksMTYgQEAKIAlyZXR1cm4gJmVpLT52ZnNfaW5vZGU7CiB9CiAKK3N0YXRpYyB2b2lkIG5jcF9pX2NhbGxiYWNrKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBpbm9kZSwgaV9yY3UpOworCUlOSVRfTElTVF9IRUFEKCZpbm9kZS0+aV9kZW50cnkpOworCWttZW1fY2FjaGVfZnJlZShuY3BfaW5vZGVfY2FjaGVwLCBOQ1BfRklORk8oaW5vZGUpKTsKK30KKwogc3RhdGljIHZvaWQgbmNwX2Rlc3Ryb3lfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIHsKLQlrbWVtX2NhY2hlX2ZyZWUobmNwX2lub2RlX2NhY2hlcCwgTkNQX0ZJTkZPKGlub2RlKSk7CisJY2FsbF9yY3UoJmlub2RlLT5pX3JjdSwgbmNwX2lfY2FsbGJhY2spOwogfQogCiBzdGF0aWMgdm9pZCBpbml0X29uY2Uodm9pZCAqZm9vKQpAQCAtMzA5LDcgKzMxNywxMiBAQAogCXNrLT5za193cml0ZV9zcGFjZSAgPSBzZXJ2ZXItPndyaXRlX3NwYWNlOwogCXJlbGVhc2Vfc29jayhzayk7CiAJZGVsX3RpbWVyX3N5bmMoJnNlcnZlci0+dGltZW91dF90bSk7Ci0JZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKworCWZsdXNoX3dvcmtfc3luYygmc2VydmVyLT5yY3YudHEpOworCWlmIChzay0+c2tfc29ja2V0LT50eXBlID09IFNPQ0tfU1RSRUFNKQorCQlmbHVzaF93b3JrX3N5bmMoJnNlcnZlci0+dHgudHEpOworCWVsc2UKKwkJZmx1c2hfd29ya19zeW5jKCZzZXJ2ZXItPnRpbWVvdXRfdHEpOwogfQogCiBzdGF0aWMgaW50ICBuY3Bfc2hvd19vcHRpb25zKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgdmZzbW91bnQgKm1udCkKQEAgLTcxMCw3ICs3MjMsNyBAQAogCXNiLT5zX3Jvb3QgPSBkX2FsbG9jX3Jvb3Qocm9vdF9pbm9kZSk7CiAgICAgICAgIGlmICghc2ItPnNfcm9vdCkKIAkJZ290byBvdXRfbm9fcm9vdDsKLQlzYi0+c19yb290LT5kX29wID0gJm5jcF9yb290X2RlbnRyeV9vcGVyYXRpb25zOworCWRfc2V0X2Rfb3Aoc2ItPnNfcm9vdCwgJm5jcF9yb290X2RlbnRyeV9vcGVyYXRpb25zKTsKIAlyZXR1cm4gMDsKIAogb3V0X25vX3Jvb3Q6CmRpZmYgLS1naXQgYS9mcy9uY3Bmcy9uY3BsaWJfa2VybmVsLmggYi9mcy9uY3Bmcy9uY3BsaWJfa2VybmVsLmgKaW5kZXggM2M1N2VjYS4uMTIyMGRmNyAxMDA2NDQKLS0tIGEvZnMvbmNwZnMvbmNwbGliX2tlcm5lbC5oCisrKyBiL2ZzL25jcGZzL25jcGxpYl9rZXJuZWwuaApAQCAtMTM1LDcgKzEzNSw3IEBACiAJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBpbnQsIGludCk7CiAKICNkZWZpbmUgTkNQX0VTQwkJCSc6JwotI2RlZmluZSBOQ1BfSU9fVEFCTEUoZGVudHJ5KQkoTkNQX1NFUlZFUigoZGVudHJ5KS0+ZF9pbm9kZSktPm5sc19pbykKKyNkZWZpbmUgTkNQX0lPX1RBQkxFKHNiKQkoTkNQX1NCUChzYiktPm5sc19pbykKICNkZWZpbmUgbmNwX3RvbG93ZXIodCwgYykJbmxzX3RvbG93ZXIodCwgYykKICNkZWZpbmUgbmNwX3RvdXBwZXIodCwgYykJbmxzX3RvdXBwZXIodCwgYykKICNkZWZpbmUgbmNwX3N0cm5pY21wKHQsIHMxLCBzMiwgbGVuKSBcCkBAIC0xNTAsMTUgKzE1MCwxNSBAQAogaW50IG5jcF9fdm9sMmlvKHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgaW50ICosCiAJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBpbnQsIGludCk7CiAKLSNkZWZpbmUgTkNQX0lPX1RBQkxFKGRlbnRyeSkJTlVMTAorI2RlZmluZSBOQ1BfSU9fVEFCTEUoc2IpCU5VTEwKICNkZWZpbmUgbmNwX3RvbG93ZXIodCwgYykJdG9sb3dlcihjKQogI2RlZmluZSBuY3BfdG91cHBlcih0LCBjKQl0b3VwcGVyKGMpCiAjZGVmaW5lIG5jcF9pbzJ2b2woUyxtLGksbixrLFUpCW5jcF9faW8ydm9sKG0saSxuLGssVSkKICNkZWZpbmUgbmNwX3ZvbDJpbyhTLG0saSxuLGssVSkJbmNwX192b2wyaW8obSxpLG4sayxVKQogCiAKLXN0YXRpYyBpbmxpbmUgaW50IG5jcF9zdHJuaWNtcChzdHJ1Y3QgbmxzX3RhYmxlICp0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpzMSwKLQkJY29uc3QgdW5zaWduZWQgY2hhciAqczIsIGludCBsZW4pCitzdGF0aWMgaW5saW5lIGludCBuY3Bfc3RybmljbXAoY29uc3Qgc3RydWN0IG5sc190YWJsZSAqdCwKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqczEsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnMyLCBpbnQgbGVuKQogewogCXdoaWxlIChsZW4tLSkgewogCQlpZiAodG9sb3dlcigqczErKykgIT0gdG9sb3dlcigqczIrKykpCkBAIC0xOTMsNyArMTkzLDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkICpuZXh0OwogCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKIAotCXNwaW5fbG9jaygmZGNhY2hlX2xvY2spOworCXNwaW5fbG9jaygmcGFyZW50LT5kX2xvY2spOwogCW5leHQgPSBwYXJlbnQtPmRfc3ViZGlycy5uZXh0OwogCXdoaWxlIChuZXh0ICE9ICZwYXJlbnQtPmRfc3ViZGlycykgewogCQlkZW50cnkgPSBsaXN0X2VudHJ5KG5leHQsIHN0cnVjdCBkZW50cnksIGRfdS5kX2NoaWxkKTsKQEAgLTIwNSw3ICsyMDUsNyBAQAogCiAJCW5leHQgPSBuZXh0LT5uZXh0OwogCX0KLQlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOworCXNwaW5fdW5sb2NrKCZwYXJlbnQtPmRfbG9jayk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZApAQCAtMjE1LDcgKzIxNSw3IEBACiAJc3RydWN0IGxpc3RfaGVhZCAqbmV4dDsKIAlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CiAKLQlzcGluX2xvY2soJmRjYWNoZV9sb2NrKTsKKwlzcGluX2xvY2soJnBhcmVudC0+ZF9sb2NrKTsKIAluZXh0ID0gcGFyZW50LT5kX3N1YmRpcnMubmV4dDsKIAl3aGlsZSAobmV4dCAhPSAmcGFyZW50LT5kX3N1YmRpcnMpIHsKIAkJZGVudHJ5ID0gbGlzdF9lbnRyeShuZXh0LCBzdHJ1Y3QgZGVudHJ5LCBkX3UuZF9jaGlsZCk7CkBAIC0yMjMsNyArMjIzLDcgQEAKIAkJbmNwX2FnZV9kZW50cnkoc2VydmVyLCBkZW50cnkpOwogCQluZXh0ID0gbmV4dC0+bmV4dDsKIAl9Ci0Jc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKKwlzcGluX3VubG9jaygmcGFyZW50LT5kX2xvY2spOwogfQogCiBzdHJ1Y3QgbmNwX2NhY2hlX2hlYWQgewpkaWZmIC0tZ2l0IGEvZnMvbmZzL2Rpci5jIGIvZnMvbmZzL2Rpci5jCmluZGV4IDk5NmRkODkuLmQzM2RhNTMgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9kaXIuYworKysgYi9mcy9uZnMvZGlyLmMKQEAgLTQzOCw3ICs0MzgsNyBAQAogCWlmIChkZW50cnkgPT0gTlVMTCkKIAkJcmV0dXJuOwogCi0JZGVudHJ5LT5kX29wID0gTkZTX1BST1RPKGRpciktPmRlbnRyeV9vcHM7CisJZF9zZXRfZF9vcChkZW50cnksIE5GU19QUk9UTyhkaXIpLT5kZW50cnlfb3BzKTsKIAlpbm9kZSA9IG5mc19maGdldChkZW50cnktPmRfc2IsIGVudHJ5LT5maCwgZW50cnktPmZhdHRyKTsKIAlpZiAoSVNfRVJSKGlub2RlKSkKIAkJZ290byBvdXQ7CkBAIC05MzgsNyArOTM4LDggQEAKICAqIGNvbXBvbmVudCBvZiB0aGUgcGF0aC4KICAqIFdlIGNoZWNrIGZvciB0aGlzIHVzaW5nIExPT0tVUF9DT05USU5VRSBhbmQgTE9PS1VQX1BBUkVOVC4KICAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbmZzX2xvb2t1cF9jaGVja19pbnRlbnQoc3RydWN0IG5hbWVpZGF0YSAqbmQsIHVuc2lnbmVkIGludCBtYXNrKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbmZzX2xvb2t1cF9jaGVja19pbnRlbnQoc3RydWN0IG5hbWVpZGF0YSAqbmQsCisJCQkJCQl1bnNpZ25lZCBpbnQgbWFzaykKIHsKIAlpZiAobmQtPmZsYWdzICYgKExPT0tVUF9DT05USU5VRXxMT09LVVBfUEFSRU5UKSkKIAkJcmV0dXJuIDA7CkBAIC0xMDE4LDcgKzEwMTksNyBAQAogICogSWYgdGhlIHBhcmVudCBkaXJlY3RvcnkgaXMgc2VlbiB0byBoYXZlIGNoYW5nZWQsIHdlIHRocm93IG91dCB0aGUKICAqIGNhY2hlZCBkZW50cnkgYW5kIGRvIGEgbmV3IGxvb2t1cC4KICAqLwotc3RhdGljIGludCBuZnNfbG9va3VwX3JldmFsaWRhdGUoc3RydWN0IGRlbnRyeSAqIGRlbnRyeSwgc3RydWN0IG5hbWVpZGF0YSAqbmQpCitzdGF0aWMgaW50IG5mc19sb29rdXBfcmV2YWxpZGF0ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBuYW1laWRhdGEgKm5kKQogewogCXN0cnVjdCBpbm9kZSAqZGlyOwogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CkBAIC0xMDI3LDYgKzEwMjgsOSBAQAogCXN0cnVjdCBuZnNfZmF0dHIgKmZhdHRyID0gTlVMTDsKIAlpbnQgZXJyb3I7CiAKKwlpZiAobmQtPmZsYWdzICYgTE9PS1VQX1JDVSkKKwkJcmV0dXJuIC1FQ0hJTEQ7CisKIAlwYXJlbnQgPSBkZ2V0X3BhcmVudChkZW50cnkpOwogCWRpciA9IHBhcmVudC0+ZF9pbm9kZTsKIAluZnNfaW5jX3N0YXRzKGRpciwgTkZTSU9TX0RFTlRSWVJFVkFMSURBVEUpOwpAQCAtMTExNyw3ICsxMTIxLDcgQEAKIC8qCiAgKiBUaGlzIGlzIGNhbGxlZCBmcm9tIGRwdXQoKSB3aGVuIGRfY291bnQgaXMgZ29pbmcgdG8gMC4KICAqLwotc3RhdGljIGludCBuZnNfZGVudHJ5X2RlbGV0ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCitzdGF0aWMgaW50IG5mc19kZW50cnlfZGVsZXRlKGNvbnN0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIHsKIAlkZnByaW50ayhWRlMsICJORlM6IGRlbnRyeV9kZWxldGUoJXMvJXMsICV4KVxuIiwKIAkJZGVudHJ5LT5kX3BhcmVudC0+ZF9uYW1lLm5hbWUsIGRlbnRyeS0+ZF9uYW1lLm5hbWUsCkBAIC0xMTg4LDcgKzExOTIsNyBAQAogCWlmIChkZW50cnktPmRfbmFtZS5sZW4gPiBORlNfU0VSVkVSKGRpciktPm5hbWVsZW4pCiAJCWdvdG8gb3V0OwogCi0JZGVudHJ5LT5kX29wID0gTkZTX1BST1RPKGRpciktPmRlbnRyeV9vcHM7CisJZF9zZXRfZF9vcChkZW50cnksIE5GU19QUk9UTyhkaXIpLT5kZW50cnlfb3BzKTsKIAogCS8qCiAJICogSWYgd2UncmUgZG9pbmcgYW4gZXhjbHVzaXZlIGNyZWF0ZSwgb3B0aW1pemUgYXdheSB0aGUgbG9va3VwCkBAIC0xMzMzLDcgKzEzMzcsNyBAQAogCQlyZXMgPSBFUlJfUFRSKC1FTkFNRVRPT0xPTkcpOwogCQlnb3RvIG91dDsKIAl9Ci0JZGVudHJ5LT5kX29wID0gTkZTX1BST1RPKGRpciktPmRlbnRyeV9vcHM7CisJZF9zZXRfZF9vcChkZW50cnksIE5GU19QUk9UTyhkaXIpLT5kZW50cnlfb3BzKTsKIAogCS8qIExldCB2ZnNfY3JlYXRlKCkgZGVhbCB3aXRoIE9fRVhDTC4gSW5zdGFudGlhdGUsIGJ1dCBkb24ndCBoYXNoCiAJICogdGhlIGRlbnRyeS4gKi8KQEAgLTE3MTgsMTEgKzE3MjIsOSBAQAogCWRmcHJpbnRrKFZGUywgIk5GUzogdW5saW5rKCVzLyVsZCwgJXMpXG4iLCBkaXItPmlfc2ItPnNfaWQsCiAJCWRpci0+aV9pbm8sIGRlbnRyeS0+ZF9uYW1lLm5hbWUpOwogCi0Jc3Bpbl9sb2NrKCZkY2FjaGVfbG9jayk7CiAJc3Bpbl9sb2NrKCZkZW50cnktPmRfbG9jayk7Ci0JaWYgKGF0b21pY19yZWFkKCZkZW50cnktPmRfY291bnQpID4gMSkgeworCWlmIChkZW50cnktPmRfY291bnQgPiAxKSB7CiAJCXNwaW5fdW5sb2NrKCZkZW50cnktPmRfbG9jayk7Ci0JCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7CiAJCS8qIFN0YXJ0IGFzeW5jaHJvbm91cyB3cml0ZW91dCBvZiB0aGUgaW5vZGUgKi8KIAkJd3JpdGVfaW5vZGVfbm93KGRlbnRyeS0+ZF9pbm9kZSwgMCk7CiAJCWVycm9yID0gbmZzX3NpbGx5cmVuYW1lKGRpciwgZGVudHJ5KTsKQEAgLTE3MzMsNyArMTczNSw2IEBACiAJCW5lZWRfcmVoYXNoID0gMTsKIAl9CiAJc3Bpbl91bmxvY2soJmRlbnRyeS0+ZF9sb2NrKTsKLQlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOwogCWVycm9yID0gbmZzX3NhZmVfcmVtb3ZlKGRlbnRyeSk7CiAJaWYgKCFlcnJvciB8fCBlcnJvciA9PSAtRU5PRU5UKSB7CiAJCW5mc19zZXRfdmVyaWZpZXIoZGVudHJ5LCBuZnNfc2F2ZV9jaGFuZ2VfYXR0cmlidXRlKGRpcikpOwpAQCAtMTg2OCw3ICsxODY5LDcgQEAKIAlkZnByaW50ayhWRlMsICJORlM6IHJlbmFtZSglcy8lcyAtPiAlcy8lcywgY3Q9JWQpXG4iLAogCQkgb2xkX2RlbnRyeS0+ZF9wYXJlbnQtPmRfbmFtZS5uYW1lLCBvbGRfZGVudHJ5LT5kX25hbWUubmFtZSwKIAkJIG5ld19kZW50cnktPmRfcGFyZW50LT5kX25hbWUubmFtZSwgbmV3X2RlbnRyeS0+ZF9uYW1lLm5hbWUsCi0JCSBhdG9taWNfcmVhZCgmbmV3X2RlbnRyeS0+ZF9jb3VudCkpOworCQkgbmV3X2RlbnRyeS0+ZF9jb3VudCk7CiAKIAkvKgogCSAqIEZvciBub24tZGlyZWN0b3JpZXMsIGNoZWNrIHdoZXRoZXIgdGhlIHRhcmdldCBpcyBidXN5IGFuZCBpZiBzbywKQEAgLTE4ODYsNyArMTg4Nyw3IEBACiAJCQlyZWhhc2ggPSBuZXdfZGVudHJ5OwogCQl9CiAKLQkJaWYgKGF0b21pY19yZWFkKCZuZXdfZGVudHJ5LT5kX2NvdW50KSA+IDIpIHsKKwkJaWYgKG5ld19kZW50cnktPmRfY291bnQgPiAyKSB7CiAJCQlpbnQgZXJyOwogCiAJCQkvKiBjb3B5IHRoZSB0YXJnZXQgZGVudHJ5J3MgbmFtZSAqLwpAQCAtMjE4OCwxMSArMjE4OSwxNCBAQAogCXJldHVybiBuZnNfZG9fYWNjZXNzKGlub2RlLCBjcmVkLCBuZnNfb3Blbl9wZXJtaXNzaW9uX21hc2sob3BlbmZsYWdzKSk7CiB9CiAKLWludCBuZnNfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaykKK2ludCBuZnNfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaywgdW5zaWduZWQgaW50IGZsYWdzKQogewogCXN0cnVjdCBycGNfY3JlZCAqY3JlZDsKIAlpbnQgcmVzID0gMDsKIAorCWlmIChmbGFncyAmIElQRVJNX0ZMQUdfUkNVKQorCQlyZXR1cm4gLUVDSElMRDsKKwogCW5mc19pbmNfc3RhdHMoaW5vZGUsIE5GU0lPU19WRlNBQ0NFU1MpOwogCiAJaWYgKChtYXNrICYgKE1BWV9SRUFEIHwgTUFZX1dSSVRFIHwgTUFZX0VYRUMpKSA9PSAwKQpAQCAtMjI0MCw3ICsyMjQ0LDcgQEAKIG91dF9ub3RzdXA6CiAJcmVzID0gbmZzX3JldmFsaWRhdGVfaW5vZGUoTkZTX1NFUlZFUihpbm9kZSksIGlub2RlKTsKIAlpZiAocmVzID09IDApCi0JCXJlcyA9IGdlbmVyaWNfcGVybWlzc2lvbihpbm9kZSwgbWFzaywgTlVMTCk7CisJCXJlcyA9IGdlbmVyaWNfcGVybWlzc2lvbihpbm9kZSwgbWFzaywgZmxhZ3MsIE5VTEwpOwogCWdvdG8gb3V0OwogfQogCmRpZmYgLS1naXQgYS9mcy9uZnMvZ2V0cm9vdC5jIGIvZnMvbmZzL2dldHJvb3QuYwppbmRleCBhYzdiODE0Li41NTk2YzZhIDEwMDY0NAotLS0gYS9mcy9uZnMvZ2V0cm9vdC5jCisrKyBiL2ZzL25mcy9nZXRyb290LmMKQEAgLTYzLDkgKzYzLDExIEBACiAJCSAqIFRoaXMgYWdhaW4gY2F1c2VzIHNocmlua19kY2FjaGVfZm9yX3Vtb3VudF9zdWJ0cmVlKCkgdG8KIAkJICogT29wcywgc2luY2UgdGhlIHRlc3QgZm9yIElTX1JPT1QoKSB3aWxsIGZhaWwuCiAJCSAqLwotCQlzcGluX2xvY2soJmRjYWNoZV9sb2NrKTsKKwkJc3Bpbl9sb2NrKCZzYi0+c19yb290LT5kX2lub2RlLT5pX2xvY2spOworCQlzcGluX2xvY2soJnNiLT5zX3Jvb3QtPmRfbG9jayk7CiAJCWxpc3RfZGVsX2luaXQoJnNiLT5zX3Jvb3QtPmRfYWxpYXMpOwotCQlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOworCQlzcGluX3VubG9jaygmc2ItPnNfcm9vdC0+ZF9sb2NrKTsKKwkJc3Bpbl91bmxvY2soJnNiLT5zX3Jvb3QtPmRfaW5vZGUtPmlfbG9jayk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMTE5LDcgKzEyMSw3IEBACiAJc2VjdXJpdHlfZF9pbnN0YW50aWF0ZShyZXQsIGlub2RlKTsKIAogCWlmIChyZXQtPmRfb3AgPT0gTlVMTCkKLQkJcmV0LT5kX29wID0gc2VydmVyLT5uZnNfY2xpZW50LT5ycGNfb3BzLT5kZW50cnlfb3BzOworCQlkX3NldF9kX29wKHJldCwgc2VydmVyLT5uZnNfY2xpZW50LT5ycGNfb3BzLT5kZW50cnlfb3BzKTsKIG91dDoKIAluZnNfZnJlZV9mYXR0cihmc2luZm8uZmF0dHIpOwogCXJldHVybiByZXQ7CkBAIC0yMjYsNyArMjI4LDcgQEAKIAlzZWN1cml0eV9kX2luc3RhbnRpYXRlKHJldCwgaW5vZGUpOwogCiAJaWYgKHJldC0+ZF9vcCA9PSBOVUxMKQotCQlyZXQtPmRfb3AgPSBzZXJ2ZXItPm5mc19jbGllbnQtPnJwY19vcHMtPmRlbnRyeV9vcHM7CisJCWRfc2V0X2Rfb3AocmV0LCBzZXJ2ZXItPm5mc19jbGllbnQtPnJwY19vcHMtPmRlbnRyeV9vcHMpOwogCiBvdXQ6CiAJbmZzX2ZyZWVfZmF0dHIoZmF0dHIpOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL2lub2RlLmMgYi9mcy9uZnMvaW5vZGUuYwppbmRleCBlNjdlMzFjLi4wMTdkYWEzIDEwMDY0NAotLS0gYS9mcy9uZnMvaW5vZGUuYworKysgYi9mcy9uZnMvaW5vZGUuYwpAQCAtMTQzOCw5ICsxNDM4LDE2IEBACiAJcmV0dXJuICZuZnNpLT52ZnNfaW5vZGU7CiB9CiAKK3N0YXRpYyB2b2lkIG5mc19pX2NhbGxiYWNrKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBpbm9kZSwgaV9yY3UpOworCUlOSVRfTElTVF9IRUFEKCZpbm9kZS0+aV9kZW50cnkpOworCWttZW1fY2FjaGVfZnJlZShuZnNfaW5vZGVfY2FjaGVwLCBORlNfSShpbm9kZSkpOworfQorCiB2b2lkIG5mc19kZXN0cm95X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7Ci0Ja21lbV9jYWNoZV9mcmVlKG5mc19pbm9kZV9jYWNoZXAsIE5GU19JKGlub2RlKSk7CisJY2FsbF9yY3UoJmlub2RlLT5pX3JjdSwgbmZzX2lfY2FsbGJhY2spOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbmZzNF9pbml0X29uY2Uoc3RydWN0IG5mc19pbm9kZSAqbmZzaSkKZGlmZiAtLWdpdCBhL2ZzL25mcy9uYW1lc3BhY2UuYyBiL2ZzL25mcy9uYW1lc3BhY2UuYwppbmRleCBkYjZhYTM2Li43NGFhZjM5IDEwMDY0NAotLS0gYS9mcy9uZnMvbmFtZXNwYWNlLmMKKysrIGIvZnMvbmZzL25hbWVzcGFjZS5jCkBAIC00OSwxMiArNDksMTcgQEAKIAkgICAgICAgY29uc3Qgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogCSAgICAgICBjaGFyICpidWZmZXIsIHNzaXplX3QgYnVmbGVuKQogewotCWNoYXIgKmVuZCA9IGJ1ZmZlcitidWZsZW47CisJY2hhciAqZW5kOwogCWludCBuYW1lbGVuOworCXVuc2lnbmVkIHNlcTsKIAorcmVuYW1lX3JldHJ5OgorCWVuZCA9IGJ1ZmZlcitidWZsZW47CiAJKi0tZW5kID0gJ1wwJzsKIAlidWZsZW4tLTsKLQlzcGluX2xvY2soJmRjYWNoZV9sb2NrKTsKKworCXNlcSA9IHJlYWRfc2VxYmVnaW4oJnJlbmFtZV9sb2NrKTsKKwlyY3VfcmVhZF9sb2NrKCk7CiAJd2hpbGUgKCFJU19ST09UKGRlbnRyeSkgJiYgZGVudHJ5ICE9IGRyb290KSB7CiAJCW5hbWVsZW4gPSBkZW50cnktPmRfbmFtZS5sZW47CiAJCWJ1ZmxlbiAtPSBuYW1lbGVuICsgMTsKQEAgLTY1LDcgKzcwLDkgQEAKIAkJKi0tZW5kID0gJy8nOwogCQlkZW50cnkgPSBkZW50cnktPmRfcGFyZW50OwogCX0KLQlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOworCXJjdV9yZWFkX3VubG9jaygpOworCWlmIChyZWFkX3NlcXJldHJ5KCZyZW5hbWVfbG9jaywgc2VxKSkKKwkJZ290byByZW5hbWVfcmV0cnk7CiAJaWYgKCplbmQgIT0gJy8nKSB7CiAJCWlmICgtLWJ1ZmxlbiA8IDApCiAJCQlnb3RvIEVsb25nOwpAQCAtODIsNyArODksOSBAQAogCW1lbWNweShlbmQsIGJhc2UsIG5hbWVsZW4pOwogCXJldHVybiBlbmQ7CiBFbG9uZ191bmxvY2s6Ci0Jc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKKwlpZiAocmVhZF9zZXFyZXRyeSgmcmVuYW1lX2xvY2ssIHNlcSkpCisJCWdvdG8gcmVuYW1lX3JldHJ5OwogRWxvbmc6CiAJcmV0dXJuIEVSUl9QVFIoLUVOQU1FVE9PTE9ORyk7CiB9CmRpZmYgLS1naXQgYS9mcy9uZnMvdW5saW5rLmMgYi9mcy9uZnMvdW5saW5rLmMKaW5kZXggN2JkZWM4NS4uOGZlOWViNCAxMDA2NDQKLS0tIGEvZnMvbmZzL3VubGluay5jCisrKyBiL2ZzL25mcy91bmxpbmsuYwpAQCAtNDk2LDcgKzQ5Niw3IEBACiAKIAlkZnByaW50ayhWRlMsICJORlM6IHNpbGx5LXJlbmFtZSglcy8lcywgY3Q9JWQpXG4iLAogCQlkZW50cnktPmRfcGFyZW50LT5kX25hbWUubmFtZSwgZGVudHJ5LT5kX25hbWUubmFtZSwKLQkJYXRvbWljX3JlYWQoJmRlbnRyeS0+ZF9jb3VudCkpOworCQlkZW50cnktPmRfY291bnQpOwogCW5mc19pbmNfc3RhdHMoZGlyLCBORlNJT1NfU0lMTFlSRU5BTUUpOwogCiAJLyoKZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzNHN0YXRlLmMgYi9mcy9uZnNkL25mczRzdGF0ZS5jCmluZGV4IDExNmNhYjkuLmZiZDE4YzMgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzNHN0YXRlLmMKKysrIGIvZnMvbmZzZC9uZnM0c3RhdGUuYwpAQCAtNDMzNiw3ICs0MzM2LDcgQEAKIHZvaWQKIG5mczRfc3RhdGVfc2h1dGRvd24odm9pZCkKIHsKLQljYW5jZWxfcmVhcm1pbmdfZGVsYXllZF93b3JrcXVldWUobGF1bmRyeV93cSwgJmxhdW5kcm9tYXRfd29yayk7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZsYXVuZHJvbWF0X3dvcmspOwogCWRlc3Ryb3lfd29ya3F1ZXVlKGxhdW5kcnlfd3EpOwogCWxvY2tzX2VuZF9ncmFjZSgmbmZzZDRfbWFuYWdlcik7CiAJbmZzNF9sb2NrX3N0YXRlKCk7CmRpZmYgLS1naXQgYS9mcy9uZnNkL3Zmcy5jIGIvZnMvbmZzZC92ZnMuYwppbmRleCAxODQ5MzhmLi4zYTM1OTAyIDEwMDY0NAotLS0gYS9mcy9uZnNkL3Zmcy5jCisrKyBiL2ZzL25mc2QvdmZzLmMKQEAgLTE3NTYsOCArMTc1Niw3IEBACiAJCWdvdG8gb3V0X2RwdXRfbmV3OwogCiAJaWYgKHN2Y19tc25mcyhmZmhwKSAmJgotCQkoKGF0b21pY19yZWFkKCZvZGVudHJ5LT5kX2NvdW50KSA+IDEpCi0JCSB8fCAoYXRvbWljX3JlYWQoJm5kZW50cnktPmRfY291bnQpID4gMSkpKSB7CisJCSgob2RlbnRyeS0+ZF9jb3VudCA+IDEpIHx8IChuZGVudHJ5LT5kX2NvdW50ID4gMSkpKSB7CiAJCQlob3N0X2VyciA9IC1FUEVSTTsKIAkJCWdvdG8gb3V0X2RwdXRfbmV3OwogCX0KQEAgLTE4NDMsNyArMTg0Miw3IEBACiAJaWYgKHR5cGUgIT0gU19JRkRJUikgeyAvKiBJdCdzIFVOTElOSyAqLwogI2lmZGVmIE1TTkZTCiAJCWlmICgoZmhwLT5maF9leHBvcnQtPmV4X2ZsYWdzICYgTkZTRVhQX01TTkZTKSAmJgotCQkJKGF0b21pY19yZWFkKCZyZGVudHJ5LT5kX2NvdW50KSA+IDEpKSB7CisJCQkocmRlbnRyeS0+ZF9jb3VudCA+IDEpKSB7CiAJCQlob3N0X2VyciA9IC1FUEVSTTsKIAkJfSBlbHNlCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9ibWFwLmMgYi9mcy9uaWxmczIvYm1hcC5jCmluZGV4IDhiNzgyYjAuLjNlZTY3YzYgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9ibWFwLmMKKysrIGIvZnMvbmlsZnMyL2JtYXAuYwpAQCAtMzUsNyArMzUsMjAgQEAKIAogc3RydWN0IGlub2RlICpuaWxmc19ibWFwX2dldF9kYXQoY29uc3Qgc3RydWN0IG5pbGZzX2JtYXAgKmJtYXApCiB7Ci0JcmV0dXJuIG5pbGZzX2RhdF9pbm9kZShOSUxGU19JX05JTEZTKGJtYXAtPmJfaW5vZGUpKTsKKwlyZXR1cm4gTklMRlNfSV9OSUxGUyhibWFwLT5iX2lub2RlKS0+bnNfZGF0OworfQorCitzdGF0aWMgaW50IG5pbGZzX2JtYXBfY29udmVydF9lcnJvcihzdHJ1Y3QgbmlsZnNfYm1hcCAqYm1hcCwKKwkJCQkgICAgIGNvbnN0IGNoYXIgKmZuYW1lLCBpbnQgZXJyKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBibWFwLT5iX2lub2RlOworCisJaWYgKGVyciA9PSAtRUlOVkFMKSB7CisJCW5pbGZzX2Vycm9yKGlub2RlLT5pX3NiLCBmbmFtZSwKKwkJCSAgICAiYnJva2VuIGJtYXAgKGlub2RlIG51bWJlcj0lbHUpXG4iLCBpbm9kZS0+aV9pbm8pOworCQllcnIgPSAtRUlPOworCX0KKwlyZXR1cm4gZXJyOwogfQogCiAvKioKQEAgLTY2LDggKzc5LDEwIEBACiAKIAlkb3duX3JlYWQoJmJtYXAtPmJfc2VtKTsKIAlyZXQgPSBibWFwLT5iX29wcy0+Ym9wX2xvb2t1cChibWFwLCBrZXksIGxldmVsLCBwdHJwKTsKLQlpZiAocmV0IDwgMCkKKwlpZiAocmV0IDwgMCkgeworCQlyZXQgPSBuaWxmc19ibWFwX2NvbnZlcnRfZXJyb3IoYm1hcCwgX19mdW5jX18sIHJldCk7CiAJCWdvdG8gb3V0OworCX0KIAlpZiAoTklMRlNfQk1BUF9VU0VfVkJOKGJtYXApKSB7CiAJCXJldCA9IG5pbGZzX2RhdF90cmFuc2xhdGUobmlsZnNfYm1hcF9nZXRfZGF0KGJtYXApLCAqcHRycCwKIAkJCQkJICAmYmxvY2tucik7CkBAIC04OCw3ICsxMDMsOCBAQAogCWRvd25fcmVhZCgmYm1hcC0+Yl9zZW0pOwogCXJldCA9IGJtYXAtPmJfb3BzLT5ib3BfbG9va3VwX2NvbnRpZyhibWFwLCBrZXksIHB0cnAsIG1heGJsb2Nrcyk7CiAJdXBfcmVhZCgmYm1hcC0+Yl9zZW0pOwotCXJldHVybiByZXQ7CisKKwlyZXR1cm4gbmlsZnNfYm1hcF9jb252ZXJ0X2Vycm9yKGJtYXAsIF9fZnVuY19fLCByZXQpOwogfQogCiBzdGF0aWMgaW50IG5pbGZzX2JtYXBfZG9faW5zZXJ0KHN0cnVjdCBuaWxmc19ibWFwICpibWFwLCBfX3U2NCBrZXksIF9fdTY0IHB0cikKQEAgLTE0NCw3ICsxNjAsOCBAQAogCWRvd25fd3JpdGUoJmJtYXAtPmJfc2VtKTsKIAlyZXQgPSBuaWxmc19ibWFwX2RvX2luc2VydChibWFwLCBrZXksIHJlYyk7CiAJdXBfd3JpdGUoJmJtYXAtPmJfc2VtKTsKLQlyZXR1cm4gcmV0OworCisJcmV0dXJuIG5pbGZzX2JtYXBfY29udmVydF9lcnJvcihibWFwLCBfX2Z1bmNfXywgcmV0KTsKIH0KIAogc3RhdGljIGludCBuaWxmc19ibWFwX2RvX2RlbGV0ZShzdHJ1Y3QgbmlsZnNfYm1hcCAqYm1hcCwgX191NjQga2V5KQpAQCAtMTgwLDkgKzE5NywxMiBAQAogCiAJZG93bl9yZWFkKCZibWFwLT5iX3NlbSk7CiAJcmV0ID0gYm1hcC0+Yl9vcHMtPmJvcF9sYXN0X2tleShibWFwLCAmbGFzdGtleSk7Ci0JaWYgKCFyZXQpCi0JCSprZXkgPSBsYXN0a2V5OwogCXVwX3JlYWQoJmJtYXAtPmJfc2VtKTsKKworCWlmIChyZXQgPCAwKQorCQlyZXQgPSBuaWxmc19ibWFwX2NvbnZlcnRfZXJyb3IoYm1hcCwgX19mdW5jX18sIHJldCk7CisJZWxzZQorCQkqa2V5ID0gbGFzdGtleTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yMTAsNyArMjMwLDggQEAKIAlkb3duX3dyaXRlKCZibWFwLT5iX3NlbSk7CiAJcmV0ID0gbmlsZnNfYm1hcF9kb19kZWxldGUoYm1hcCwga2V5KTsKIAl1cF93cml0ZSgmYm1hcC0+Yl9zZW0pOwotCXJldHVybiByZXQ7CisKKwlyZXR1cm4gbmlsZnNfYm1hcF9jb252ZXJ0X2Vycm9yKGJtYXAsIF9fZnVuY19fLCByZXQpOwogfQogCiBzdGF0aWMgaW50IG5pbGZzX2JtYXBfZG9fdHJ1bmNhdGUoc3RydWN0IG5pbGZzX2JtYXAgKmJtYXAsIHVuc2lnbmVkIGxvbmcga2V5KQpAQCAtMjYxLDcgKzI4Miw4IEBACiAJZG93bl93cml0ZSgmYm1hcC0+Yl9zZW0pOwogCXJldCA9IG5pbGZzX2JtYXBfZG9fdHJ1bmNhdGUoYm1hcCwga2V5KTsKIAl1cF93cml0ZSgmYm1hcC0+Yl9zZW0pOwotCXJldHVybiByZXQ7CisKKwlyZXR1cm4gbmlsZnNfYm1hcF9jb252ZXJ0X2Vycm9yKGJtYXAsIF9fZnVuY19fLCByZXQpOwogfQogCiAvKioKQEAgLTMwMCw3ICszMjIsOCBAQAogCWRvd25fd3JpdGUoJmJtYXAtPmJfc2VtKTsKIAlyZXQgPSBibWFwLT5iX29wcy0+Ym9wX3Byb3BhZ2F0ZShibWFwLCBiaCk7CiAJdXBfd3JpdGUoJmJtYXAtPmJfc2VtKTsKLQlyZXR1cm4gcmV0OworCisJcmV0dXJuIG5pbGZzX2JtYXBfY29udmVydF9lcnJvcihibWFwLCBfX2Z1bmNfXywgcmV0KTsKIH0KIAogLyoqCkBAIC0zNDQsNyArMzY3LDggQEAKIAlkb3duX3dyaXRlKCZibWFwLT5iX3NlbSk7CiAJcmV0ID0gYm1hcC0+Yl9vcHMtPmJvcF9hc3NpZ24oYm1hcCwgYmgsIGJsb2NrbnIsIGJpbmZvKTsKIAl1cF93cml0ZSgmYm1hcC0+Yl9zZW0pOwotCXJldHVybiByZXQ7CisKKwlyZXR1cm4gbmlsZnNfYm1hcF9jb252ZXJ0X2Vycm9yKGJtYXAsIF9fZnVuY19fLCByZXQpOwogfQogCiAvKioKQEAgLTM3Myw3ICszOTcsOCBAQAogCWRvd25fd3JpdGUoJmJtYXAtPmJfc2VtKTsKIAlyZXQgPSBibWFwLT5iX29wcy0+Ym9wX21hcmsoYm1hcCwga2V5LCBsZXZlbCk7CiAJdXBfd3JpdGUoJmJtYXAtPmJfc2VtKTsKLQlyZXR1cm4gcmV0OworCisJcmV0dXJuIG5pbGZzX2JtYXBfY29udmVydF9lcnJvcihibWFwLCBfX2Z1bmNfXywgcmV0KTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9mcy9uaWxmczIvYnRub2RlLmMgYi9mcy9uaWxmczIvYnRub2RlLmMKaW5kZXggNTExNTgxNC4uMzg4ZTllOCAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL2J0bm9kZS5jCisrKyBiL2ZzL25pbGZzMi9idG5vZGUuYwpAQCAtMTA0LDggKzEwNCw3IEBACiAJaWYgKHBibG9ja25yID09IDApIHsKIAkJcGJsb2NrbnIgPSBibG9ja25yOwogCQlpZiAoaW5vZGUtPmlfaW5vICE9IE5JTEZTX0RBVF9JTk8pIHsKLQkJCXN0cnVjdCBpbm9kZSAqZGF0ID0KLQkJCQluaWxmc19kYXRfaW5vZGUoTklMRlNfSV9OSUxGUyhpbm9kZSkpOworCQkJc3RydWN0IGlub2RlICpkYXQgPSBOSUxGU19JX05JTEZTKGlub2RlKS0+bnNfZGF0OwogCiAJCQkvKiBibG9ja25yIGlzIGEgdmlydHVhbCBibG9jayBudW1iZXIgKi8KIAkJCWVyciA9IG5pbGZzX2RhdF90cmFuc2xhdGUoZGF0LCBibG9ja25yLCAmcGJsb2NrbnIpOwpkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL2Rpci5jIGIvZnMvbmlsZnMyL2Rpci5jCmluZGV4IGNiMDAzYzguLjlkNDU3NzMgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9kaXIuYworKysgYi9mcy9uaWxmczIvZGlyLmMKQEAgLTkxLDcgKzkxLDYgQEAKIAkJCSAgICAgICB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bykKIHsKIAlzdHJ1Y3QgaW5vZGUgKmRpciA9IG1hcHBpbmctPmhvc3Q7Ci0Jc3RydWN0IG5pbGZzX3NiX2luZm8gKnNiaSA9IE5JTEZTX1NCKGRpci0+aV9zYik7CiAJbG9mZl90IHBvcyA9IHBhZ2Vfb2Zmc2V0KHBhZ2UpICsgZnJvbTsKIAl1bnNpZ25lZCBsZW4gPSB0byAtIGZyb207CiAJdW5zaWduZWQgbnJfZGlydHksIGNvcGllZDsKQEAgLTEwMyw3ICsxMDIsNyBAQAogCQlpX3NpemVfd3JpdGUoZGlyLCBwb3MgKyBjb3BpZWQpOwogCWlmIChJU19ESVJTWU5DKGRpcikpCiAJCW5pbGZzX3NldF90cmFuc2FjdGlvbl9mbGFnKE5JTEZTX1RJX1NZTkMpOwotCWVyciA9IG5pbGZzX3NldF9maWxlX2RpcnR5KHNiaSwgZGlyLCBucl9kaXJ0eSk7CisJZXJyID0gbmlsZnNfc2V0X2ZpbGVfZGlydHkoZGlyLCBucl9kaXJ0eSk7CiAJV0FSTl9PTihlcnIpOyAvKiBkbyBub3QgaGFwcGVuICovCiAJdW5sb2NrX3BhZ2UocGFnZSk7CiB9CmRpZmYgLS1naXQgYS9mcy9uaWxmczIvZmlsZS5jIGIvZnMvbmlsZnMyL2ZpbGUuYwppbmRleCBjOWEzMGQ3Li4yZjU2MGM5IDEwMDY0NAotLS0gYS9mcy9uaWxmczIvZmlsZS5jCisrKyBiL2ZzL25pbGZzMi9maWxlLmMKQEAgLTE1NSw2ICsxNTUsNyBAQAogCS50cnVuY2F0ZQk9IG5pbGZzX3RydW5jYXRlLAogCS5zZXRhdHRyCT0gbmlsZnNfc2V0YXR0ciwKIAkucGVybWlzc2lvbiAgICAgPSBuaWxmc19wZXJtaXNzaW9uLAorCS5maWVtYXAJCT0gbmlsZnNfZmllbWFwLAogfTsKIAogLyogZW5kIG9mIGZpbGUgKi8KZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9pZmlsZS5jIGIvZnMvbmlsZnMyL2lmaWxlLmMKaW5kZXggOWY4YTJkYS4uYmZjNzNkMyAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL2lmaWxlLmMKKysrIGIvZnMvbmlsZnMyL2lmaWxlLmMKQEAgLTE0OSwxNCArMTQ5LDkgQEAKIAl9CiAKIAllcnIgPSBuaWxmc19wYWxsb2NfZ2V0X2VudHJ5X2Jsb2NrKGlmaWxlLCBpbm8sIDAsIG91dF9iaCk7Ci0JaWYgKHVubGlrZWx5KGVycikpIHsKLQkJaWYgKGVyciA9PSAtRUlOVkFMKQotCQkJbmlsZnNfZXJyb3Ioc2IsIF9fZnVuY19fLCAiaWZpbGUgaXMgYnJva2VuIik7Ci0JCWVsc2UKLQkJCW5pbGZzX3dhcm5pbmcoc2IsIF9fZnVuY19fLAotCQkJCSAgICAgICJ1bmFibGUgdG8gcmVhZCBpbm9kZTogJWx1IiwKLQkJCQkgICAgICAodW5zaWduZWQgbG9uZykgaW5vKTsKLQl9CisJaWYgKHVubGlrZWx5KGVycikpCisJCW5pbGZzX3dhcm5pbmcoc2IsIF9fZnVuY19fLCAidW5hYmxlIHRvIHJlYWQgaW5vZGU6ICVsdSIsCisJCQkgICAgICAodW5zaWduZWQgbG9uZykgaW5vKTsKIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS9mcy9uaWxmczIvaW5vZGUuYyBiL2ZzL25pbGZzMi9pbm9kZS5jCmluZGV4IDcxZDRiYzguLjJmZDQ0MGQgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9pbm9kZS5jCisrKyBiL2ZzL25pbGZzMi9pbm9kZS5jCkBAIC01OCw3ICs1OCw3IEBACiAJc3RydWN0IG5pbGZzX2lub2RlX2luZm8gKmlpID0gTklMRlNfSShpbm9kZSk7CiAJX191NjQgYmxrbnVtID0gMDsKIAlpbnQgZXJyID0gMCwgcmV0OwotCXN0cnVjdCBpbm9kZSAqZGF0ID0gbmlsZnNfZGF0X2lub2RlKE5JTEZTX0lfTklMRlMoaW5vZGUpKTsKKwlzdHJ1Y3QgaW5vZGUgKmRhdCA9IE5JTEZTX0lfTklMRlMoaW5vZGUpLT5uc19kYXQ7CiAJdW5zaWduZWQgbWF4YmxvY2tzID0gYmhfcmVzdWx0LT5iX3NpemUgPj4gaW5vZGUtPmlfYmxrYml0czsKIAogCWRvd25fcmVhZCgmTklMRlNfTURUKGRhdCktPm1pX3NlbSk7CkBAIC05NiwxMSArOTYsNiBAQAogCQkJCSAgICAgICBpbm9kZS0+aV9pbm8sCiAJCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYmxrb2ZmKTsKIAkJCQllcnIgPSAwOwotCQkJfSBlbHNlIGlmIChlcnIgPT0gLUVJTlZBTCkgewotCQkJCW5pbGZzX2Vycm9yKGlub2RlLT5pX3NiLCBfX2Z1bmNfXywKLQkJCQkJICAgICJicm9rZW4gYm1hcCAoaW5vZGU9JWx1KVxuIiwKLQkJCQkJICAgIGlub2RlLT5pX2lubyk7Ci0JCQkJZXJyID0gLUVJTzsKIAkJCX0KIAkJCW5pbGZzX3RyYW5zYWN0aW9uX2Fib3J0KGlub2RlLT5pX3NiKTsKIAkJCWdvdG8gb3V0OwpAQCAtMTA5LDYgKzEwNCw3IEBACiAJCW5pbGZzX3RyYW5zYWN0aW9uX2NvbW1pdChpbm9kZS0+aV9zYik7IC8qIG5ldmVyIGZhaWxzICovCiAJCS8qIEVycm9yIGhhbmRsaW5nIHNob3VsZCBiZSBkZXRhaWxlZCAqLwogCQlzZXRfYnVmZmVyX25ldyhiaF9yZXN1bHQpOworCQlzZXRfYnVmZmVyX2RlbGF5KGJoX3Jlc3VsdCk7CiAJCW1hcF9iaChiaF9yZXN1bHQsIGlub2RlLT5pX3NiLCAwKTsgLyogZGJuIG11c3QgYmUgY2hhbmdlZAogCQkJCQkJICAgICAgdG8gcHJvcGVyIHZhbHVlICovCiAJfSBlbHNlIGlmIChyZXQgPT0gLUVOT0VOVCkgewpAQCAtMTg1LDEwICsxODEsOSBAQAogCiAJaWYgKHJldCkgewogCQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gcGFnZS0+bWFwcGluZy0+aG9zdDsKLQkJc3RydWN0IG5pbGZzX3NiX2luZm8gKnNiaSA9IE5JTEZTX1NCKGlub2RlLT5pX3NiKTsKIAkJdW5zaWduZWQgbnJfZGlydHkgPSAxIDw8IChQQUdFX1NISUZUIC0gaW5vZGUtPmlfYmxrYml0cyk7CiAKLQkJbmlsZnNfc2V0X2ZpbGVfZGlydHkoc2JpLCBpbm9kZSwgbnJfZGlydHkpOworCQluaWxmc19zZXRfZmlsZV9kaXJ0eShpbm9kZSwgbnJfZGlydHkpOwogCX0KIAlyZXR1cm4gcmV0OwogfQpAQCAtMjI5LDcgKzIyNCw3IEBACiAJCQkJCQkgIHN0YXJ0ICsgY29waWVkKTsKIAljb3BpZWQgPSBnZW5lcmljX3dyaXRlX2VuZChmaWxlLCBtYXBwaW5nLCBwb3MsIGxlbiwgY29waWVkLCBwYWdlLAogCQkJCSAgIGZzZGF0YSk7Ci0JbmlsZnNfc2V0X2ZpbGVfZGlydHkoTklMRlNfU0IoaW5vZGUtPmlfc2IpLCBpbm9kZSwgbnJfZGlydHkpOworCW5pbGZzX3NldF9maWxlX2RpcnR5KGlub2RlLCBucl9kaXJ0eSk7CiAJZXJyID0gbmlsZnNfdHJhbnNhY3Rpb25fY29tbWl0KGlub2RlLT5pX3NiKTsKIAlyZXR1cm4gZXJyID8gOiBjb3BpZWQ7CiB9CkBAIC00MjUsMTMgKzQyMCwxMiBAQAogCQkJICAgICAgc3RydWN0IG5pbGZzX3Jvb3QgKnJvb3QsIHVuc2lnbmVkIGxvbmcgaW5vLAogCQkJICAgICAgc3RydWN0IGlub2RlICppbm9kZSkKIHsKLQlzdHJ1Y3QgbmlsZnNfc2JfaW5mbyAqc2JpID0gTklMRlNfU0Ioc2IpOwotCXN0cnVjdCBpbm9kZSAqZGF0ID0gbmlsZnNfZGF0X2lub2RlKHNiaS0+c19uaWxmcyk7CisJc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMgPSBOSUxGU19TQihzYiktPnNfbmlsZnM7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKIAlzdHJ1Y3QgbmlsZnNfaW5vZGUgKnJhd19pbm9kZTsKIAlpbnQgZXJyOwogCi0JZG93bl9yZWFkKCZOSUxGU19NRFQoZGF0KS0+bWlfc2VtKTsJLyogWFhYICovCisJZG93bl9yZWFkKCZOSUxGU19NRFQobmlsZnMtPm5zX2RhdCktPm1pX3NlbSk7CiAJZXJyID0gbmlsZnNfaWZpbGVfZ2V0X2lub2RlX2Jsb2NrKHJvb3QtPmlmaWxlLCBpbm8sICZiaCk7CiAJaWYgKHVubGlrZWx5KGVycikpCiAJCWdvdG8gYmFkX2lub2RlOwpAQCAtNDYxLDcgKzQ1NSw3IEBACiAJfQogCW5pbGZzX2lmaWxlX3VubWFwX2lub2RlKHJvb3QtPmlmaWxlLCBpbm8sIGJoKTsKIAlicmVsc2UoYmgpOwotCXVwX3JlYWQoJk5JTEZTX01EVChkYXQpLT5taV9zZW0pOwkvKiBYWFggKi8KKwl1cF9yZWFkKCZOSUxGU19NRFQobmlsZnMtPm5zX2RhdCktPm1pX3NlbSk7CiAJbmlsZnNfc2V0X2lub2RlX2ZsYWdzKGlub2RlKTsKIAlyZXR1cm4gMDsKIApAQCAtNDcwLDcgKzQ2NCw3IEBACiAJYnJlbHNlKGJoKTsKIAogIGJhZF9pbm9kZToKLQl1cF9yZWFkKCZOSUxGU19NRFQoZGF0KS0+bWlfc2VtKTsJLyogWFhYICovCisJdXBfcmVhZCgmTklMRlNfTURUKG5pbGZzLT5uc19kYXQpLT5taV9zZW0pOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTYyOSw3ICs2MjMsNyBAQAogCiAJaWYgKCF0ZXN0X2JpdChOSUxGU19JX0JNQVAsICZpaS0+aV9zdGF0ZSkpCiAJCXJldHVybjsKLSByZXBlYXQ6CityZXBlYXQ6CiAJcmV0ID0gbmlsZnNfYm1hcF9sYXN0X2tleShpaS0+aV9ibWFwLCAmYik7CiAJaWYgKHJldCA9PSAtRU5PRU5UKQogCQlyZXR1cm47CkBAIC02NDYsMTQgKzY0MCwxMCBAQAogCQkgICAgIG5pbGZzX2JtYXBfdHJ1bmNhdGUoaWktPmlfYm1hcCwgYikgPT0gMCkpCiAJCWdvdG8gcmVwZWF0OwogCi0gZmFpbGVkOgotCWlmIChyZXQgPT0gLUVJTlZBTCkKLQkJbmlsZnNfZXJyb3IoaWktPnZmc19pbm9kZS5pX3NiLCBfX2Z1bmNfXywKLQkJCSAgICAiYm1hcCBpcyBicm9rZW4gKGlubz0lbHUpIiwgaWktPnZmc19pbm9kZS5pX2lubyk7Ci0JZWxzZQotCQluaWxmc193YXJuaW5nKGlpLT52ZnNfaW5vZGUuaV9zYiwgX19mdW5jX18sCi0JCQkgICAgICAiZmFpbGVkIHRvIHRydW5jYXRlIGJtYXAgKGlubz0lbHUsIGVycj0lZCkiLAotCQkJICAgICAgaWktPnZmc19pbm9kZS5pX2lubywgcmV0KTsKK2ZhaWxlZDoKKwluaWxmc193YXJuaW5nKGlpLT52ZnNfaW5vZGUuaV9zYiwgX19mdW5jX18sCisJCSAgICAgICJmYWlsZWQgdG8gdHJ1bmNhdGUgYm1hcCAoaW5vPSVsdSwgZXJyPSVkKSIsCisJCSAgICAgIGlpLT52ZnNfaW5vZGUuaV9pbm8sIHJldCk7CiB9CiAKIHZvaWQgbmlsZnNfdHJ1bmNhdGUoc3RydWN0IGlub2RlICppbm9kZSkKQEAgLTY4Miw3ICs2NzIsNyBAQAogCQluaWxmc19zZXRfdHJhbnNhY3Rpb25fZmxhZyhOSUxGU19USV9TWU5DKTsKIAogCW5pbGZzX21hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwotCW5pbGZzX3NldF9maWxlX2RpcnR5KE5JTEZTX1NCKHNiKSwgaW5vZGUsIDApOworCW5pbGZzX3NldF9maWxlX2RpcnR5KGlub2RlLCAwKTsKIAluaWxmc190cmFuc2FjdGlvbl9jb21taXQoc2IpOwogCS8qIE1heSBjb25zdHJ1Y3QgYSBsb2dpY2FsIHNlZ21lbnQgYW5kIG1heSBmYWlsIGluIHN5bmMgbW9kZS4KIAkgICBCdXQgdHJ1bmNhdGUgaGFzIG5vIHJldHVybiB2YWx1ZS4gKi8KQEAgLTc4NSwyMCArNzc1LDI0IEBACiAJcmV0dXJuIGVycjsKIH0KIAotaW50IG5pbGZzX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spCitpbnQgbmlsZnNfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaywgdW5zaWduZWQgaW50IGZsYWdzKQogewotCXN0cnVjdCBuaWxmc19yb290ICpyb290ID0gTklMRlNfSShpbm9kZSktPmlfcm9vdDsKKwlzdHJ1Y3QgbmlsZnNfcm9vdCAqcm9vdDsKIAorCWlmIChmbGFncyAmIElQRVJNX0ZMQUdfUkNVKQorCQlyZXR1cm4gLUVDSElMRDsKKworCXJvb3QgPSBOSUxGU19JKGlub2RlKS0+aV9yb290OwogCWlmICgobWFzayAmIE1BWV9XUklURSkgJiYgcm9vdCAmJgogCSAgICByb290LT5jbm8gIT0gTklMRlNfQ1BUUkVFX0NVUlJFTlRfQ05PKQogCQlyZXR1cm4gLUVST0ZTOyAvKiBzbmFwc2hvdCBpcyBub3Qgd3JpdGFibGUgKi8KIAotCXJldHVybiBnZW5lcmljX3Blcm1pc3Npb24oaW5vZGUsIG1hc2ssIE5VTEwpOworCXJldHVybiBnZW5lcmljX3Blcm1pc3Npb24oaW5vZGUsIG1hc2ssIGZsYWdzLCBOVUxMKTsKIH0KIAotaW50IG5pbGZzX2xvYWRfaW5vZGVfYmxvY2soc3RydWN0IG5pbGZzX3NiX2luZm8gKnNiaSwgc3RydWN0IGlub2RlICppbm9kZSwKLQkJCSAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKnBiaCkKK2ludCBuaWxmc19sb2FkX2lub2RlX2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqKnBiaCkKIHsKKwlzdHJ1Y3QgbmlsZnNfc2JfaW5mbyAqc2JpID0gTklMRlNfU0IoaW5vZGUtPmlfc2IpOwogCXN0cnVjdCBuaWxmc19pbm9kZV9pbmZvICppaSA9IE5JTEZTX0koaW5vZGUpOwogCWludCBlcnI7CiAKQEAgLTgzOSw5ICs4MzMsOSBAQAogCXJldHVybiByZXQ7CiB9CiAKLWludCBuaWxmc19zZXRfZmlsZV9kaXJ0eShzdHJ1Y3QgbmlsZnNfc2JfaW5mbyAqc2JpLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJIHVuc2lnbmVkIG5yX2RpcnR5KQoraW50IG5pbGZzX3NldF9maWxlX2RpcnR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVuc2lnbmVkIG5yX2RpcnR5KQogeworCXN0cnVjdCBuaWxmc19zYl9pbmZvICpzYmkgPSBOSUxGU19TQihpbm9kZS0+aV9zYik7CiAJc3RydWN0IG5pbGZzX2lub2RlX2luZm8gKmlpID0gTklMRlNfSShpbm9kZSk7CiAKIAlhdG9taWNfYWRkKG5yX2RpcnR5LCAmc2JpLT5zX25pbGZzLT5uc19uZGlydHlibGtzKTsKQEAgLTg3NCwxMSArODY4LDEwIEBACiAKIGludCBuaWxmc19tYXJrX2lub2RlX2RpcnR5KHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7Ci0Jc3RydWN0IG5pbGZzX3NiX2luZm8gKnNiaSA9IE5JTEZTX1NCKGlub2RlLT5pX3NiKTsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmliaDsKIAlpbnQgZXJyOwogCi0JZXJyID0gbmlsZnNfbG9hZF9pbm9kZV9ibG9jayhzYmksIGlub2RlLCAmaWJoKTsKKwllcnIgPSBuaWxmc19sb2FkX2lub2RlX2Jsb2NrKGlub2RlLCAmaWJoKTsKIAlpZiAodW5saWtlbHkoZXJyKSkgewogCQluaWxmc193YXJuaW5nKGlub2RlLT5pX3NiLCBfX2Z1bmNfXywKIAkJCSAgICAgICJmYWlsZWQgdG8gcmVnZXQgaW5vZGUgYmxvY2suXG4iKTsKQEAgLTkyMCwzICs5MTMsMTM0IEBACiAJbmlsZnNfbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CiAJbmlsZnNfdHJhbnNhY3Rpb25fY29tbWl0KGlub2RlLT5pX3NiKTsgLyogbmV2ZXIgZmFpbHMgKi8KIH0KKworaW50IG5pbGZzX2ZpZW1hcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmllbWFwX2V4dGVudF9pbmZvICpmaWVpbmZvLAorCQkgX191NjQgc3RhcnQsIF9fdTY0IGxlbikKK3sKKwlzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcyA9IE5JTEZTX0lfTklMRlMoaW5vZGUpOworCV9fdTY0IGxvZ2ljYWwgPSAwLCBwaHlzID0gMCwgc2l6ZSA9IDA7CisJX191MzIgZmxhZ3MgPSAwOworCWxvZmZfdCBpc2l6ZTsKKwlzZWN0b3JfdCBibGtvZmYsIGVuZF9ibGtvZmY7CisJc2VjdG9yX3QgZGVsYWxsb2NfYmxrb2ZmOworCXVuc2lnbmVkIGxvbmcgZGVsYWxsb2NfYmxrbGVuOworCXVuc2lnbmVkIGludCBibGtiaXRzID0gaW5vZGUtPmlfYmxrYml0czsKKwlpbnQgcmV0LCBuOworCisJcmV0ID0gZmllbWFwX2NoZWNrX2ZsYWdzKGZpZWluZm8sIEZJRU1BUF9GTEFHX1NZTkMpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CisKKwlpc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTsKKworCWJsa29mZiA9IHN0YXJ0ID4+IGJsa2JpdHM7CisJZW5kX2Jsa29mZiA9IChzdGFydCArIGxlbiAtIDEpID4+IGJsa2JpdHM7CisKKwlkZWxhbGxvY19ibGtsZW4gPSBuaWxmc19maW5kX3VuY29tbWl0dGVkX2V4dGVudChpbm9kZSwgYmxrb2ZmLAorCQkJCQkJCSZkZWxhbGxvY19ibGtvZmYpOworCisJZG8geworCQlfX3U2NCBibGtwaHk7CisJCXVuc2lnbmVkIGludCBtYXhibG9ja3M7CisKKwkJaWYgKGRlbGFsbG9jX2Jsa2xlbiAmJiBibGtvZmYgPT0gZGVsYWxsb2NfYmxrb2ZmKSB7CisJCQlpZiAoc2l6ZSkgeworCQkJCS8qIEVuZCBvZiB0aGUgY3VycmVudCBleHRlbnQgKi8KKwkJCQlyZXQgPSBmaWVtYXBfZmlsbF9uZXh0X2V4dGVudCgKKwkJCQkJZmllaW5mbywgbG9naWNhbCwgcGh5cywgc2l6ZSwgZmxhZ3MpOworCQkJCWlmIChyZXQpCisJCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKGJsa29mZiA+IGVuZF9ibGtvZmYpCisJCQkJYnJlYWs7CisKKwkJCWZsYWdzID0gRklFTUFQX0VYVEVOVF9NRVJHRUQgfCBGSUVNQVBfRVhURU5UX0RFTEFMTE9DOworCQkJbG9naWNhbCA9IGJsa29mZiA8PCBibGtiaXRzOworCQkJcGh5cyA9IDA7CisJCQlzaXplID0gZGVsYWxsb2NfYmxrbGVuIDw8IGJsa2JpdHM7CisKKwkJCWJsa29mZiA9IGRlbGFsbG9jX2Jsa29mZiArIGRlbGFsbG9jX2Jsa2xlbjsKKwkJCWRlbGFsbG9jX2Jsa2xlbiA9IG5pbGZzX2ZpbmRfdW5jb21taXR0ZWRfZXh0ZW50KAorCQkJCWlub2RlLCBibGtvZmYsICZkZWxhbGxvY19ibGtvZmYpOworCQkJY29udGludWU7CisJCX0KKworCQkvKgorCQkgKiBMaW1pdCB0aGUgbnVtYmVyIG9mIGJsb2NrcyB0aGF0IHdlIGxvb2sgdXAgc28gYXMKKwkJICogbm90IHRvIGdldCBpbnRvIHRoZSBuZXh0IGRlbGF5ZWQgYWxsb2NhdGlvbiBleHRlbnQuCisJCSAqLworCQltYXhibG9ja3MgPSBJTlRfTUFYOworCQlpZiAoZGVsYWxsb2NfYmxrbGVuKQorCQkJbWF4YmxvY2tzID0gbWluX3Qoc2VjdG9yX3QsIGRlbGFsbG9jX2Jsa29mZiAtIGJsa29mZiwKKwkJCQkJICBtYXhibG9ja3MpOworCQlibGtwaHkgPSAwOworCisJCWRvd25fcmVhZCgmTklMRlNfTURUKG5pbGZzLT5uc19kYXQpLT5taV9zZW0pOworCQluID0gbmlsZnNfYm1hcF9sb29rdXBfY29udGlnKAorCQkJTklMRlNfSShpbm9kZSktPmlfYm1hcCwgYmxrb2ZmLCAmYmxrcGh5LCBtYXhibG9ja3MpOworCQl1cF9yZWFkKCZOSUxGU19NRFQobmlsZnMtPm5zX2RhdCktPm1pX3NlbSk7CisKKwkJaWYgKG4gPCAwKSB7CisJCQlpbnQgcGFzdF9lb2Y7CisKKwkJCWlmICh1bmxpa2VseShuICE9IC1FTk9FTlQpKQorCQkJCWJyZWFrOyAvKiBlcnJvciAqLworCisJCQkvKiBIT0xFICovCisJCQlibGtvZmYrKzsKKwkJCXBhc3RfZW9mID0gKChibGtvZmYgPDwgYmxrYml0cykgPj0gaXNpemUpOworCisJCQlpZiAoc2l6ZSkgeworCQkJCS8qIEVuZCBvZiB0aGUgY3VycmVudCBleHRlbnQgKi8KKworCQkJCWlmIChwYXN0X2VvZikKKwkJCQkJZmxhZ3MgfD0gRklFTUFQX0VYVEVOVF9MQVNUOworCisJCQkJcmV0ID0gZmllbWFwX2ZpbGxfbmV4dF9leHRlbnQoCisJCQkJCWZpZWluZm8sIGxvZ2ljYWwsIHBoeXMsIHNpemUsIGZsYWdzKTsKKwkJCQlpZiAocmV0KQorCQkJCQlicmVhazsKKwkJCQlzaXplID0gMDsKKwkJCX0KKwkJCWlmIChibGtvZmYgPiBlbmRfYmxrb2ZmIHx8IHBhc3RfZW9mKQorCQkJCWJyZWFrOworCQl9IGVsc2UgeworCQkJaWYgKHNpemUpIHsKKwkJCQlpZiAocGh5cyAmJiBibGtwaHkgPDwgYmxrYml0cyA9PSBwaHlzICsgc2l6ZSkgeworCQkJCQkvKiBUaGUgY3VycmVudCBleHRlbnQgZ29lcyBvbiAqLworCQkJCQlzaXplICs9IG4gPDwgYmxrYml0czsKKwkJCQl9IGVsc2UgeworCQkJCQkvKiBUZXJtaW5hdGUgdGhlIGN1cnJlbnQgZXh0ZW50ICovCisJCQkJCXJldCA9IGZpZW1hcF9maWxsX25leHRfZXh0ZW50KAorCQkJCQkJZmllaW5mbywgbG9naWNhbCwgcGh5cywgc2l6ZSwKKwkJCQkJCWZsYWdzKTsKKwkJCQkJaWYgKHJldCB8fCBibGtvZmYgPiBlbmRfYmxrb2ZmKQorCQkJCQkJYnJlYWs7CisKKwkJCQkJLyogU3RhcnQgYW5vdGhlciBleHRlbnQgKi8KKwkJCQkJZmxhZ3MgPSBGSUVNQVBfRVhURU5UX01FUkdFRDsKKwkJCQkJbG9naWNhbCA9IGJsa29mZiA8PCBibGtiaXRzOworCQkJCQlwaHlzID0gYmxrcGh5IDw8IGJsa2JpdHM7CisJCQkJCXNpemUgPSBuIDw8IGJsa2JpdHM7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQkvKiBTdGFydCBhIG5ldyBleHRlbnQgKi8KKwkJCQlmbGFncyA9IEZJRU1BUF9FWFRFTlRfTUVSR0VEOworCQkJCWxvZ2ljYWwgPSBibGtvZmYgPDwgYmxrYml0czsKKwkJCQlwaHlzID0gYmxrcGh5IDw8IGJsa2JpdHM7CisJCQkJc2l6ZSA9IG4gPDwgYmxrYml0czsKKwkJCX0KKwkJCWJsa29mZiArPSBuOworCQl9CisJCWNvbmRfcmVzY2hlZCgpOworCX0gd2hpbGUgKHRydWUpOworCisJLyogSWYgcmV0IGlzIDEgdGhlbiB3ZSBqdXN0IGhpdCB0aGUgZW5kIG9mIHRoZSBleHRlbnQgYXJyYXkgKi8KKwlpZiAocmV0ID09IDEpCisJCXJldCA9IDA7CisKKwltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL2lvY3RsLmMgYi9mcy9uaWxmczIvaW9jdGwuYwppbmRleCBiMTg1ZTkzLi40OTY3Mzg5IDEwMDY0NAotLS0gYS9mcy9uaWxmczIvaW9jdGwuYworKysgYi9mcy9uaWxmczIvaW9jdGwuYwpAQCAtMjMzLDcgKzIzMyw3IEBACiAJaW50IHJldDsKIAogCWRvd25fcmVhZCgmbmlsZnMtPm5zX3NlZ2N0b3Jfc2VtKTsKLQlyZXQgPSBuaWxmc19kYXRfZ2V0X3ZpbmZvKG5pbGZzX2RhdF9pbm9kZShuaWxmcyksIGJ1Ziwgc2l6ZSwgbm1lbWJzKTsKKwlyZXQgPSBuaWxmc19kYXRfZ2V0X3ZpbmZvKG5pbGZzLT5uc19kYXQsIGJ1Ziwgc2l6ZSwgbm1lbWJzKTsKIAl1cF9yZWFkKCZuaWxmcy0+bnNfc2VnY3Rvcl9zZW0pOwogCXJldHVybiByZXQ7CiB9CkBAIC0yNDIsOCArMjQyLDcgQEAKIG5pbGZzX2lvY3RsX2RvX2dldF9iZGVzY3Moc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMsIF9fdTY0ICpwb3NwLCBpbnQgZmxhZ3MsCiAJCQkgIHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUsIHNpemVfdCBubWVtYnMpCiB7Ci0Jc3RydWN0IGlub2RlICpkYXQgPSBuaWxmc19kYXRfaW5vZGUobmlsZnMpOwotCXN0cnVjdCBuaWxmc19ibWFwICpibWFwID0gTklMRlNfSShkYXQpLT5pX2JtYXA7CisJc3RydWN0IG5pbGZzX2JtYXAgKmJtYXAgPSBOSUxGU19JKG5pbGZzLT5uc19kYXQpLT5pX2JtYXA7CiAJc3RydWN0IG5pbGZzX2JkZXNjICpiZGVzY3MgPSBidWY7CiAJaW50IHJldCwgaTsKIApAQCAtNDIxLDcgKzQyMCw3IEBACiAJc2l6ZV90IG5tZW1icyA9IGFyZ3YtPnZfbm1lbWJzOwogCWludCByZXQ7CiAKLQlyZXQgPSBuaWxmc19kYXRfZnJlZXYobmlsZnNfZGF0X2lub2RlKG5pbGZzKSwgYnVmLCBubWVtYnMpOworCXJldCA9IG5pbGZzX2RhdF9mcmVldihuaWxmcy0+bnNfZGF0LCBidWYsIG5tZW1icyk7CiAKIAlyZXR1cm4gKHJldCA8IDApID8gcmV0IDogbm1lbWJzOwogfQpAQCAtNDMwLDggKzQyOSw3IEBACiAJCQkJCSBzdHJ1Y3QgbmlsZnNfYXJndiAqYXJndiwgdm9pZCAqYnVmKQogewogCXNpemVfdCBubWVtYnMgPSBhcmd2LT52X25tZW1iczsKLQlzdHJ1Y3QgaW5vZGUgKmRhdCA9IG5pbGZzX2RhdF9pbm9kZShuaWxmcyk7Ci0Jc3RydWN0IG5pbGZzX2JtYXAgKmJtYXAgPSBOSUxGU19JKGRhdCktPmlfYm1hcDsKKwlzdHJ1Y3QgbmlsZnNfYm1hcCAqYm1hcCA9IE5JTEZTX0kobmlsZnMtPm5zX2RhdCktPmlfYm1hcDsKIAlzdHJ1Y3QgbmlsZnNfYmRlc2MgKmJkZXNjcyA9IGJ1ZjsKIAlpbnQgcmV0LCBpOwogCkBAIC00NTAsNyArNDQ4LDcgQEAKIAkJCS8qIHNraXAgZGVhZCBibG9jayAqLwogCQkJY29udGludWU7CiAJCWlmIChiZGVzY3NbaV0uYmRfbGV2ZWwgPT0gMCkgewotCQkJcmV0ID0gbmlsZnNfbWR0X21hcmtfYmxvY2tfZGlydHkoZGF0LAorCQkJcmV0ID0gbmlsZnNfbWR0X21hcmtfYmxvY2tfZGlydHkobmlsZnMtPm5zX2RhdCwKIAkJCQkJCQkgYmRlc2NzW2ldLmJkX29mZnNldCk7CiAJCQlpZiAocmV0IDwgMCkgewogCQkJCVdBUk5fT04ocmV0ID09IC1FTk9FTlQpOwpkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL21kdC5jIGIvZnMvbmlsZnMyL21kdC5jCmluZGV4IDM5YTViODQuLjZhMGUyYTEgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9tZHQuYworKysgYi9mcy9uaWxmczIvbWR0LmMKQEAgLTIzNyw4ICsyMzcsNiBAQAogICoKICAqICUtRU5PRU5UIC0gdGhlIHNwZWNpZmllZCBibG9jayBkb2VzIG5vdCBleGlzdCAoaG9sZSBibG9jaykKICAqCi0gKiAlLUVJTlZBTCAtIGJtYXAgaXMgYnJva2VuLiAodGhlIGNhbGxlciBzaG91bGQgY2FsbCBuaWxmc19lcnJvcigpKQotICoKICAqICUtRVJPRlMgLSBSZWFkIG9ubHkgZmlsZXN5c3RlbSAoZm9yIGNyZWF0ZSBtb2RlKQogICovCiBpbnQgbmlsZnNfbWR0X2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBsb25nIGJsa29mZiwgaW50IGNyZWF0ZSwKQEAgLTI3Myw4ICsyNzEsNiBAQAogICogJS1FTk9NRU0gLSBJbnN1ZmZpY2llbnQgbWVtb3J5IGF2YWlsYWJsZS4KICAqCiAgKiAlLUVJTyAtIEkvTyBlcnJvcgotICoKLSAqICUtRUlOVkFMIC0gYm1hcCBpcyBicm9rZW4uICh0aGUgY2FsbGVyIHNob3VsZCBjYWxsIG5pbGZzX2Vycm9yKCkpCiAgKi8KIGludCBuaWxmc19tZHRfZGVsZXRlX2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVuc2lnbmVkIGxvbmcgYmxvY2spCiB7CkBAIC0zNTAsOCArMzQ2LDYgQEAKICAqICUtRUlPIC0gSS9PIGVycm9yCiAgKgogICogJS1FTk9FTlQgLSB0aGUgc3BlY2lmaWVkIGJsb2NrIGRvZXMgbm90IGV4aXN0IChob2xlIGJsb2NrKQotICoKLSAqICUtRUlOVkFMIC0gYm1hcCBpcyBicm9rZW4uICh0aGUgY2FsbGVyIHNob3VsZCBjYWxsIG5pbGZzX2Vycm9yKCkpCiAgKi8KIGludCBuaWxmc19tZHRfbWFya19ibG9ja19kaXJ0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBsb25nIGJsb2NrKQogewpAQCAtNDk5LDMxICs0OTMsMjkgQEAKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX2Zyb3plbjsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAlpbnQgYmxrYml0cyA9IGlub2RlLT5pX2Jsa2JpdHM7Ci0JaW50IHJldCA9IC1FTk9NRU07CiAKIAlwYWdlID0gZ3JhYl9jYWNoZV9wYWdlKCZzaGFkb3ctPmZyb3plbl9kYXRhLCBiaC0+Yl9wYWdlLT5pbmRleCk7CiAJaWYgKCFwYWdlKQotCQlyZXR1cm4gcmV0OworCQlyZXR1cm4gLUVOT01FTTsKIAogCWlmICghcGFnZV9oYXNfYnVmZmVycyhwYWdlKSkKIAkJY3JlYXRlX2VtcHR5X2J1ZmZlcnMocGFnZSwgMSA8PCBibGtiaXRzLCAwKTsKIAogCWJoX2Zyb3plbiA9IG5pbGZzX3BhZ2VfZ2V0X250aF9ibG9jayhwYWdlLCBiaF9vZmZzZXQoYmgpID4+IGJsa2JpdHMpOwotCWlmIChiaF9mcm96ZW4pIHsKLQkJaWYgKCFidWZmZXJfdXB0b2RhdGUoYmhfZnJvemVuKSkKLQkJCW5pbGZzX2NvcHlfYnVmZmVyKGJoX2Zyb3plbiwgYmgpOwotCQlpZiAobGlzdF9lbXB0eSgmYmhfZnJvemVuLT5iX2Fzc29jX2J1ZmZlcnMpKSB7Ci0JCQlsaXN0X2FkZF90YWlsKCZiaF9mcm96ZW4tPmJfYXNzb2NfYnVmZmVycywKLQkJCQkgICAgICAmc2hhZG93LT5mcm96ZW5fYnVmZmVycyk7Ci0JCQlzZXRfYnVmZmVyX25pbGZzX3JlZGlyZWN0ZWQoYmgpOwotCQl9IGVsc2UgewotCQkJYnJlbHNlKGJoX2Zyb3plbik7IC8qIGFscmVhZHkgZnJvemVuICovCi0JCX0KLQkJcmV0ID0gMDsKKworCWlmICghYnVmZmVyX3VwdG9kYXRlKGJoX2Zyb3plbikpCisJCW5pbGZzX2NvcHlfYnVmZmVyKGJoX2Zyb3plbiwgYmgpOworCWlmIChsaXN0X2VtcHR5KCZiaF9mcm96ZW4tPmJfYXNzb2NfYnVmZmVycykpIHsKKwkJbGlzdF9hZGRfdGFpbCgmYmhfZnJvemVuLT5iX2Fzc29jX2J1ZmZlcnMsCisJCQkgICAgICAmc2hhZG93LT5mcm96ZW5fYnVmZmVycyk7CisJCXNldF9idWZmZXJfbmlsZnNfcmVkaXJlY3RlZChiaCk7CisJfSBlbHNlIHsKKwkJYnJlbHNlKGJoX2Zyb3plbik7IC8qIGFscmVhZHkgZnJvemVuICovCiAJfQorCiAJdW5sb2NrX3BhZ2UocGFnZSk7CiAJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwotCXJldHVybiByZXQ7CisJcmV0dXJuIDA7CiB9CiAKIHN0cnVjdCBidWZmZXJfaGVhZCAqCmRpZmYgLS1naXQgYS9mcy9uaWxmczIvbmFtZWkuYyBiL2ZzL25pbGZzMi9uYW1laS5jCmluZGV4IDZlOTU1N2UuLjk4MDM0MjcgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9uYW1laS5jCisrKyBiL2ZzL25pbGZzMi9uYW1laS5jCkBAIC01NzcsNiArNTc3LDcgQEAKIAkucmVuYW1lCQk9IG5pbGZzX3JlbmFtZSwKIAkuc2V0YXR0cgk9IG5pbGZzX3NldGF0dHIsCiAJLnBlcm1pc3Npb24JPSBuaWxmc19wZXJtaXNzaW9uLAorCS5maWVtYXAJCT0gbmlsZnNfZmllbWFwLAogfTsKIAogY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbmlsZnNfc3BlY2lhbF9pbm9kZV9vcGVyYXRpb25zID0gewpkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL25pbGZzLmggYi9mcy9uaWxmczIvbmlsZnMuaAppbmRleCBmNzU2MGRhLi43NzdlOGZkIDEwMDY0NAotLS0gYS9mcy9uaWxmczIvbmlsZnMuaAorKysgYi9mcy9uaWxmczIvbmlsZnMuaApAQCAtMTkwLDExICsxOTAsNiBAQAogCXJldHVybiBuaWxmc190ZXN0X3RyYW5zYWN0aW9uX2ZsYWcoTklMRlNfVElfV1JJVEVSKTsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgaW5vZGUgKm5pbGZzX2RhdF9pbm9kZShjb25zdCBzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcykKLXsKLQlyZXR1cm4gbmlsZnMtPm5zX2RhdDsKLX0KLQogLyoKICAqIGZ1bmN0aW9uIHByb3RvdHlwZQogICovCkBAIC0yNTYsMTQgKzI1MSwxNCBAQAogZXh0ZXJuIHZvaWQgbmlsZnNfdHJ1bmNhdGUoc3RydWN0IGlub2RlICopOwogZXh0ZXJuIHZvaWQgbmlsZnNfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICopOwogZXh0ZXJuIGludCBuaWxmc19zZXRhdHRyKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGlhdHRyICopOwotaW50IG5pbGZzX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spOwotZXh0ZXJuIGludCBuaWxmc19sb2FkX2lub2RlX2Jsb2NrKHN0cnVjdCBuaWxmc19zYl9pbmZvICosIHN0cnVjdCBpbm9kZSAqLAotCQkJCSAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqKTsKK2ludCBuaWxmc19wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOworaW50IG5pbGZzX2xvYWRfaW5vZGVfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICoqcGJoKTsKIGV4dGVybiBpbnQgbmlsZnNfaW5vZGVfZGlydHkoc3RydWN0IGlub2RlICopOwotZXh0ZXJuIGludCBuaWxmc19zZXRfZmlsZV9kaXJ0eShzdHJ1Y3QgbmlsZnNfc2JfaW5mbyAqLCBzdHJ1Y3QgaW5vZGUgKiwKLQkJCQl1bnNpZ25lZCk7CitpbnQgbmlsZnNfc2V0X2ZpbGVfZGlydHkoc3RydWN0IGlub2RlICppbm9kZSwgdW5zaWduZWQgbnJfZGlydHkpOwogZXh0ZXJuIGludCBuaWxmc19tYXJrX2lub2RlX2RpcnR5KHN0cnVjdCBpbm9kZSAqKTsKIGV4dGVybiB2b2lkIG5pbGZzX2RpcnR5X2lub2RlKHN0cnVjdCBpbm9kZSAqKTsKK2ludCBuaWxmc19maWVtYXAoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpZW1hcF9leHRlbnRfaW5mbyAqZmllaW5mbywKKwkJIF9fdTY0IHN0YXJ0LCBfX3U2NCBsZW4pOwogCiAvKiBzdXBlci5jICovCiBleHRlcm4gc3RydWN0IGlub2RlICpuaWxmc19hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7CmRpZmYgLS1naXQgYS9mcy9uaWxmczIvcGFnZS5jIGIvZnMvbmlsZnMyL3BhZ2UuYwppbmRleCBhNmMzYzJlOC4uMGM0MzI0MSAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL3BhZ2UuYworKysgYi9mcy9uaWxmczIvcGFnZS5jCkBAIC00OTEsNyArNDkxLDcgQEAKIAl9CiAJcmV0dXJuIG5jOwogfQotIAorCiB2b2lkIG5pbGZzX21hcHBpbmdfaW5pdF9vbmNlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKQogewogCW1lbXNldChtYXBwaW5nLCAwLCBzaXplb2YoKm1hcHBpbmcpKTsKQEAgLTU0NiwzICs1NDYsODcgQEAKIAl9CiAJcmV0dXJuIFRlc3RDbGVhclBhZ2VEaXJ0eShwYWdlKTsKIH0KKworLyoqCisgKiBuaWxmc19maW5kX3VuY29tbWl0dGVkX2V4dGVudCAtIGZpbmQgZXh0ZW50IG9mIHVuY29tbWl0dGVkIGRhdGEKKyAqIEBpbm9kZTogaW5vZGUKKyAqIEBzdGFydF9ibGs6IHN0YXJ0IGJsb2NrIG9mZnNldCAoaW4pCisgKiBAYmxrb2ZmOiBzdGFydCBvZmZzZXQgb2YgdGhlIGZvdW5kIGV4dGVudCAob3V0KQorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2VhcmNoZXMgYW4gZXh0ZW50IG9mIGJ1ZmZlcnMgbWFya2VkICJkZWxheWVkIiB3aGljaAorICogc3RhcnRzIGZyb20gYSBibG9jayBvZmZzZXQgZXF1YWwgdG8gb3IgbGFyZ2VyIHRoYW4gQHN0YXJ0X2Jsay4gIElmCisgKiBzdWNoIGFuIGV4dGVudCB3YXMgZm91bmQsIHRoaXMgd2lsbCBzdG9yZSB0aGUgc3RhcnQgb2Zmc2V0IGluCisgKiBAYmxrb2ZmIGFuZCByZXR1cm4gaXRzIGxlbmd0aCBpbiBibG9ja3MuICBPdGhlcndpc2UsIHplcm8gaXMKKyAqIHJldHVybmVkLgorICovCit1bnNpZ25lZCBsb25nIG5pbGZzX2ZpbmRfdW5jb21taXR0ZWRfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJCSAgICBzZWN0b3JfdCBzdGFydF9ibGssCisJCQkJCSAgICBzZWN0b3JfdCAqYmxrb2ZmKQoreworCXVuc2lnbmVkIGludCBpOworCXBnb2ZmX3QgaW5kZXg7CisJdW5zaWduZWQgaW50IG5ibG9ja3NfaW5fcGFnZTsKKwl1bnNpZ25lZCBsb25nIGxlbmd0aCA9IDA7CisJc2VjdG9yX3QgYjsKKwlzdHJ1Y3QgcGFnZXZlYyBwdmVjOworCXN0cnVjdCBwYWdlICpwYWdlOworCisJaWYgKGlub2RlLT5pX21hcHBpbmctPm5ycGFnZXMgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlpbmRleCA9IHN0YXJ0X2JsayA+PiAoUEFHRV9DQUNIRV9TSElGVCAtIGlub2RlLT5pX2Jsa2JpdHMpOworCW5ibG9ja3NfaW5fcGFnZSA9IDFVIDw8IChQQUdFX0NBQ0hFX1NISUZUIC0gaW5vZGUtPmlfYmxrYml0cyk7CisKKwlwYWdldmVjX2luaXQoJnB2ZWMsIDApOworCityZXBlYXQ6CisJcHZlYy5uciA9IGZpbmRfZ2V0X3BhZ2VzX2NvbnRpZyhpbm9kZS0+aV9tYXBwaW5nLCBpbmRleCwgUEFHRVZFQ19TSVpFLAorCQkJCQlwdmVjLnBhZ2VzKTsKKwlpZiAocHZlYy5uciA9PSAwKQorCQlyZXR1cm4gbGVuZ3RoOworCisJaWYgKGxlbmd0aCA+IDAgJiYgcHZlYy5wYWdlc1swXS0+aW5kZXggPiBpbmRleCkKKwkJZ290byBvdXQ7CisKKwliID0gcHZlYy5wYWdlc1swXS0+aW5kZXggPDwgKFBBR0VfQ0FDSEVfU0hJRlQgLSBpbm9kZS0+aV9ibGtiaXRzKTsKKwlpID0gMDsKKwlkbyB7CisJCXBhZ2UgPSBwdmVjLnBhZ2VzW2ldOworCisJCWxvY2tfcGFnZShwYWdlKTsKKwkJaWYgKHBhZ2VfaGFzX2J1ZmZlcnMocGFnZSkpIHsKKwkJCXN0cnVjdCBidWZmZXJfaGVhZCAqYmgsICpoZWFkOworCisJCQliaCA9IGhlYWQgPSBwYWdlX2J1ZmZlcnMocGFnZSk7CisJCQlkbyB7CisJCQkJaWYgKGIgPCBzdGFydF9ibGspCisJCQkJCWNvbnRpbnVlOworCQkJCWlmIChidWZmZXJfZGVsYXkoYmgpKSB7CisJCQkJCWlmIChsZW5ndGggPT0gMCkKKwkJCQkJCSpibGtvZmYgPSBiOworCQkJCQlsZW5ndGgrKzsKKwkJCQl9IGVsc2UgaWYgKGxlbmd0aCA+IDApIHsKKwkJCQkJZ290byBvdXRfbG9ja2VkOworCQkJCX0KKwkJCX0gd2hpbGUgKCsrYiwgYmggPSBiaC0+Yl90aGlzX3BhZ2UsIGJoICE9IGhlYWQpOworCQl9IGVsc2UgeworCQkJaWYgKGxlbmd0aCA+IDApCisJCQkJZ290byBvdXRfbG9ja2VkOworCisJCQliICs9IG5ibG9ja3NfaW5fcGFnZTsKKwkJfQorCQl1bmxvY2tfcGFnZShwYWdlKTsKKworCX0gd2hpbGUgKCsraSA8IHBhZ2V2ZWNfY291bnQoJnB2ZWMpKTsKKworCWluZGV4ID0gcGFnZS0+aW5kZXggKyAxOworCXBhZ2V2ZWNfcmVsZWFzZSgmcHZlYyk7CisJY29uZF9yZXNjaGVkKCk7CisJZ290byByZXBlYXQ7CisKK291dF9sb2NrZWQ6CisJdW5sb2NrX3BhZ2UocGFnZSk7CitvdXQ6CisJcGFnZXZlY19yZWxlYXNlKCZwdmVjKTsKKwlyZXR1cm4gbGVuZ3RoOworfQpkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL3BhZ2UuaCBiL2ZzL25pbGZzMi9wYWdlLmgKaW5kZXggZmI5ZThhOC4uNjIyZGYyNyAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL3BhZ2UuaAorKysgYi9mcy9uaWxmczIvcGFnZS5oCkBAIC02Niw2ICs2Niw5IEBACiAJCQlzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpLAogCQkJY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyAqYW9wcyk7CiB1bnNpZ25lZCBuaWxmc19wYWdlX2NvdW50X2NsZWFuX2J1ZmZlcnMoc3RydWN0IHBhZ2UgKiwgdW5zaWduZWQsIHVuc2lnbmVkKTsKK3Vuc2lnbmVkIGxvbmcgbmlsZnNfZmluZF91bmNvbW1pdHRlZF9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJICAgIHNlY3Rvcl90IHN0YXJ0X2JsaywKKwkJCQkJICAgIHNlY3Rvcl90ICpibGtvZmYpOwogCiAjZGVmaW5lIE5JTEZTX1BBR0VfQlVHKHBhZ2UsIG0sIGEuLi4pIFwKIAlkbyB7IG5pbGZzX3BhZ2VfYnVnKHBhZ2UpOyBCVUcoKTsgfSB3aGlsZSAoMCkKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9yZWNvdmVyeS5jIGIvZnMvbmlsZnMyL3JlY292ZXJ5LmMKaW5kZXggNWQyNzExYzIuLjNkZmNkM2IgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9yZWNvdmVyeS5jCisrKyBiL2ZzL25pbGZzMi9yZWNvdmVyeS5jCkBAIC01MzUsNyArNTM1LDcgQEAKIAkJaWYgKHVubGlrZWx5KGVycikpCiAJCQlnb3RvIGZhaWxlZF9wYWdlOwogCi0JCWVyciA9IG5pbGZzX3NldF9maWxlX2RpcnR5KHNiaSwgaW5vZGUsIDEpOworCQllcnIgPSBuaWxmc19zZXRfZmlsZV9kaXJ0eShpbm9kZSwgMSk7CiAJCWlmICh1bmxpa2VseShlcnIpKQogCQkJZ290byBmYWlsZWRfcGFnZTsKIApkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL3NiLmggYi9mcy9uaWxmczIvc2IuaAppbmRleCAzNWEwNzE1Li43YTE3NzE1IDEwMDY0NAotLS0gYS9mcy9uaWxmczIvc2IuaAorKysgYi9mcy9uaWxmczIvc2IuaApAQCAtMjcsMTQgKzI3LDYgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAKLS8qCi0gKiBNb3VudCBvcHRpb25zCi0gKi8KLXN0cnVjdCBuaWxmc19tb3VudF9vcHRpb25zIHsKLQl1bnNpZ25lZCBsb25nIG1vdW50X29wdDsKLQlfX3U2NCBzbmFwc2hvdF9jbm87Ci19OwotCiBzdHJ1Y3QgdGhlX25pbGZzOwogc3RydWN0IG5pbGZzX3NjX2luZm87CiAKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9zZWdtZW50LmMgYi9mcy9uaWxmczIvc2VnbWVudC5jCmluZGV4IDY4N2QwOTAuLjU1ZWJhZTUgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9zZWdtZW50LmMKKysrIGIvZnMvbmlsZnMyL3NlZ21lbnQuYwpAQCAtNTA0LDE3ICs1MDQsNiBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbmlsZnNfaGFuZGxlX2JtYXBfZXJyb3IoaW50IGVyciwgY29uc3QgY2hhciAqZm5hbWUsCi0JCQkJICAgc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKLXsKLQlpZiAoZXJyID09IC1FSU5WQUwpIHsKLQkJbmlsZnNfZXJyb3Ioc2IsIGZuYW1lLCAiYnJva2VuIGJtYXAgKGlub2RlPSVsdSlcbiIsCi0JCQkgICAgaW5vZGUtPmlfaW5vKTsKLQkJZXJyID0gLUVJTzsKLQl9Ci0JcmV0dXJuIGVycjsKLX0KLQogLyoKICAqIENhbGxiYWNrIGZ1bmN0aW9ucyB0aGF0IGVudW1lcmF0ZSwgbWFyaywgYW5kIGNvbGxlY3QgZGlydHkgYmxvY2tzCiAgKi8KQEAgLTUyNCw5ICs1MTMsOCBAQAogCWludCBlcnI7CiAKIAllcnIgPSBuaWxmc19ibWFwX3Byb3BhZ2F0ZShOSUxGU19JKGlub2RlKS0+aV9ibWFwLCBiaCk7Ci0JaWYgKHVubGlrZWx5KGVyciA8IDApKQotCQlyZXR1cm4gbmlsZnNfaGFuZGxlX2JtYXBfZXJyb3IoZXJyLCBfX2Z1bmNfXywgaW5vZGUsCi0JCQkJCSAgICAgICBzY2ktPnNjX3N1cGVyKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWVyciA9IG5pbGZzX3NlZ2N0b3JfYWRkX2ZpbGVfYmxvY2soc2NpLCBiaCwgaW5vZGUsCiAJCQkJCSAgIHNpemVvZihzdHJ1Y3QgbmlsZnNfYmluZm9fdikpOwpAQCAtNTM5LDEzICs1MjcsNyBAQAogCQkJCSAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsCiAJCQkJICAgc3RydWN0IGlub2RlICppbm9kZSkKIHsKLQlpbnQgZXJyOwotCi0JZXJyID0gbmlsZnNfYm1hcF9wcm9wYWdhdGUoTklMRlNfSShpbm9kZSktPmlfYm1hcCwgYmgpOwotCWlmICh1bmxpa2VseShlcnIgPCAwKSkKLQkJcmV0dXJuIG5pbGZzX2hhbmRsZV9ibWFwX2Vycm9yKGVyciwgX19mdW5jX18sIGlub2RlLAotCQkJCQkgICAgICAgc2NpLT5zY19zdXBlcik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIG5pbGZzX2JtYXBfcHJvcGFnYXRlKE5JTEZTX0koaW5vZGUpLT5pX2JtYXAsIGJoKTsKIH0KIAogc3RhdGljIGludCBuaWxmc19jb2xsZWN0X2ZpbGVfYm1hcChzdHJ1Y3QgbmlsZnNfc2NfaW5mbyAqc2NpLApAQCAtNTg4LDkgKzU3MCw4IEBACiAJaW50IGVycjsKIAogCWVyciA9IG5pbGZzX2JtYXBfcHJvcGFnYXRlKE5JTEZTX0koaW5vZGUpLT5pX2JtYXAsIGJoKTsKLQlpZiAodW5saWtlbHkoZXJyIDwgMCkpCi0JCXJldHVybiBuaWxmc19oYW5kbGVfYm1hcF9lcnJvcihlcnIsIF9fZnVuY19fLCBpbm9kZSwKLQkJCQkJICAgICAgIHNjaS0+c2Nfc3VwZXIpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJZXJyID0gbmlsZnNfc2VnY3Rvcl9hZGRfZmlsZV9ibG9jayhzY2ksIGJoLCBpbm9kZSwgc2l6ZW9mKF9fbGU2NCkpOwogCWlmICghZXJyKQpAQCAtNzc2LDkgKzc1Nyw4IEBACiAJCXJldCsrOwogCWlmIChuaWxmc19tZHRfZmV0Y2hfZGlydHkobmlsZnMtPm5zX3N1ZmlsZSkpCiAJCXJldCsrOwotCWlmIChyZXQgfHwgbmlsZnNfZG9pbmdfZ2MoKSkKLQkJaWYgKG5pbGZzX21kdF9mZXRjaF9kaXJ0eShuaWxmc19kYXRfaW5vZGUobmlsZnMpKSkKLQkJCXJldCsrOworCWlmICgocmV0IHx8IG5pbGZzX2RvaW5nX2djKCkpICYmIG5pbGZzX21kdF9mZXRjaF9kaXJ0eShuaWxmcy0+bnNfZGF0KSkKKwkJcmV0Kys7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtODE0LDcgKzc5NCw3IEBACiAJbmlsZnNfbWR0X2NsZWFyX2RpcnR5KHNjaS0+c2Nfcm9vdC0+aWZpbGUpOwogCW5pbGZzX21kdF9jbGVhcl9kaXJ0eShuaWxmcy0+bnNfY3BmaWxlKTsKIAluaWxmc19tZHRfY2xlYXJfZGlydHkobmlsZnMtPm5zX3N1ZmlsZSk7Ci0JbmlsZnNfbWR0X2NsZWFyX2RpcnR5KG5pbGZzX2RhdF9pbm9kZShuaWxmcykpOworCW5pbGZzX21kdF9jbGVhcl9kaXJ0eShuaWxmcy0+bnNfZGF0KTsKIH0KIAogc3RhdGljIGludCBuaWxmc19zZWdjdG9yX2NyZWF0ZV9jaGVja3BvaW50KHN0cnVjdCBuaWxmc19zY19pbmZvICpzY2kpCkBAIC05MjMsNyArOTAzLDcgQEAKIAkJCSAgICAgIG5pbGZzLT5uc19ub25nY19jdGltZSA6IHNjaS0+c2Nfc2VnX2N0aW1lKTsKIAlyYXdfc3ItPnNyX2ZsYWdzID0gMDsKIAotCW5pbGZzX3dyaXRlX2lub2RlX2NvbW1vbihuaWxmc19kYXRfaW5vZGUobmlsZnMpLCAodm9pZCAqKXJhd19zciArCisJbmlsZnNfd3JpdGVfaW5vZGVfY29tbW9uKG5pbGZzLT5uc19kYXQsICh2b2lkICopcmF3X3NyICsKIAkJCQkgTklMRlNfU1JfREFUX09GRlNFVChpc3opLCAxKTsKIAluaWxmc193cml0ZV9pbm9kZV9jb21tb24obmlsZnMtPm5zX2NwZmlsZSwgKHZvaWQgKilyYXdfc3IgKwogCQkJCSBOSUxGU19TUl9DUEZJTEVfT0ZGU0VUKGlzeiksIDEpOwpAQCAtMTE3OSw3ICsxMTU5LDcgQEAKIAkJc2NpLT5zY19zdGFnZS5zY250Kys7ICAvKiBGYWxsIHRocm91Z2ggKi8KIAljYXNlIE5JTEZTX1NUX0RBVDoKICBkYXRfc3RhZ2U6Ci0JCWVyciA9IG5pbGZzX3NlZ2N0b3Jfc2Nhbl9maWxlKHNjaSwgbmlsZnNfZGF0X2lub2RlKG5pbGZzKSwKKwkJZXJyID0gbmlsZnNfc2VnY3Rvcl9zY2FuX2ZpbGUoc2NpLCBuaWxmcy0+bnNfZGF0LAogCQkJCQkgICAgICAmbmlsZnNfc2NfZGF0X29wcyk7CiAJCWlmICh1bmxpa2VseShlcnIpKQogCQkJYnJlYWs7CkBAIC0xNTYzLDcgKzE1NDMsNiBAQAogCXJldHVybiAwOwogCiAgZmFpbGVkX2JtYXA6Ci0JZXJyID0gbmlsZnNfaGFuZGxlX2JtYXBfZXJyb3IoZXJyLCBfX2Z1bmNfXywgaW5vZGUsIHNjaS0+c2Nfc3VwZXIpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTE3ODMsNiArMTc2Miw3IEBACiAJCQkJaWYgKCFlcnIpIHsKIAkJCQkJc2V0X2J1ZmZlcl91cHRvZGF0ZShiaCk7CiAJCQkJCWNsZWFyX2J1ZmZlcl9kaXJ0eShiaCk7CisJCQkJCWNsZWFyX2J1ZmZlcl9kZWxheShiaCk7CiAJCQkJCWNsZWFyX2J1ZmZlcl9uaWxmc192b2xhdGlsZShiaCk7CiAJCQkJfQogCQkJCWJyZWxzZShiaCk7IC8qIGZvciBiX2Fzc29jX2J1ZmZlcnMgKi8KQEAgLTE5MDksNiArMTg4OSw3IEBACiAJCQkJICAgIGJfYXNzb2NfYnVmZmVycykgewogCQkJc2V0X2J1ZmZlcl91cHRvZGF0ZShiaCk7CiAJCQljbGVhcl9idWZmZXJfZGlydHkoYmgpOworCQkJY2xlYXJfYnVmZmVyX2RlbGF5KGJoKTsKIAkJCWNsZWFyX2J1ZmZlcl9uaWxmc192b2xhdGlsZShiaCk7CiAJCQljbGVhcl9idWZmZXJfbmlsZnNfcmVkaXJlY3RlZChiaCk7CiAJCQlpZiAoYmggPT0gc2VnYnVmLT5zYl9zdXBlcl9yb290KSB7CmRpZmYgLS1naXQgYS9mcy9uaWxmczIvc3VwZXIuYyBiL2ZzL25pbGZzMi9zdXBlci5jCmluZGV4IGY4MDRkNDEuLjZlYTMyZDkgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9zdXBlci5jCisrKyBiL2ZzL25pbGZzMi9zdXBlci5jCkBAIC0xMTEsMTIgKzExMSwxNyBAQAogCQkgY29uc3QgY2hhciAqZm10LCAuLi4pCiB7CiAJc3RydWN0IG5pbGZzX3NiX2luZm8gKnNiaSA9IE5JTEZTX1NCKHNiKTsKKwlzdHJ1Y3QgdmFfZm9ybWF0IHZhZjsKIAl2YV9saXN0IGFyZ3M7CiAKIAl2YV9zdGFydChhcmdzLCBmbXQpOwotCXByaW50ayhLRVJOX0NSSVQgIk5JTEZTIGVycm9yIChkZXZpY2UgJXMpOiAlczogIiwgc2ItPnNfaWQsIGZ1bmN0aW9uKTsKLQl2cHJpbnRrKGZtdCwgYXJncyk7Ci0JcHJpbnRrKCJcbiIpOworCisJdmFmLmZtdCA9IGZtdDsKKwl2YWYudmEgPSAmYXJnczsKKworCXByaW50ayhLRVJOX0NSSVQgIk5JTEZTIGVycm9yIChkZXZpY2UgJXMpOiAlczogJXBWXG4iLAorCSAgICAgICBzYi0+c19pZCwgZnVuY3Rpb24sICZ2YWYpOworCiAJdmFfZW5kKGFyZ3MpOwogCiAJaWYgKCEoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpKSB7CkBAIC0xMzYsMTMgKzE0MSwxNyBAQAogdm9pZCBuaWxmc193YXJuaW5nKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IGNoYXIgKmZ1bmN0aW9uLAogCQkgICBjb25zdCBjaGFyICpmbXQsIC4uLikKIHsKKwlzdHJ1Y3QgdmFfZm9ybWF0IHZhZjsKIAl2YV9saXN0IGFyZ3M7CiAKIAl2YV9zdGFydChhcmdzLCBmbXQpOwotCXByaW50ayhLRVJOX1dBUk5JTkcgIk5JTEZTIHdhcm5pbmcgKGRldmljZSAlcyk6ICVzOiAiLAotCSAgICAgICBzYi0+c19pZCwgZnVuY3Rpb24pOwotCXZwcmludGsoZm10LCBhcmdzKTsKLQlwcmludGsoIlxuIik7CisKKwl2YWYuZm10ID0gZm10OworCXZhZi52YSA9ICZhcmdzOworCisJcHJpbnRrKEtFUk5fV0FSTklORyAiTklMRlMgd2FybmluZyAoZGV2aWNlICVzKTogJXM6ICVwVlxuIiwKKwkgICAgICAgc2ItPnNfaWQsIGZ1bmN0aW9uLCAmdmFmKTsKKwogCXZhX2VuZChhcmdzKTsKIH0KIApAQCAtMTYyLDEwICsxNzEsMTMgQEAKIAlyZXR1cm4gJmlpLT52ZnNfaW5vZGU7CiB9CiAKLXZvaWQgbmlsZnNfZGVzdHJveV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQorc3RhdGljIHZvaWQgbmlsZnNfaV9jYWxsYmFjayhzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCiB7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgaW5vZGUsIGlfcmN1KTsKIAlzdHJ1Y3QgbmlsZnNfbWR0X2luZm8gKm1kaSA9IE5JTEZTX01EVChpbm9kZSk7CiAKKwlJTklUX0xJU1RfSEVBRCgmaW5vZGUtPmlfZGVudHJ5KTsKKwogCWlmIChtZGkpIHsKIAkJa2ZyZWUobWRpLT5taV9iZ2wpOyAvKiBrZnJlZShOVUxMKSBpcyBzYWZlICovCiAJCWtmcmVlKG1kaSk7CkBAIC0xNzMsNiArMTg1LDExIEBACiAJa21lbV9jYWNoZV9mcmVlKG5pbGZzX2lub2RlX2NhY2hlcCwgTklMRlNfSShpbm9kZSkpOwogfQogCit2b2lkIG5pbGZzX2Rlc3Ryb3lfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwljYWxsX3JjdSgmaW5vZGUtPmlfcmN1LCBuaWxmc19pX2NhbGxiYWNrKTsKK30KKwogc3RhdGljIGludCBuaWxmc19zeW5jX3N1cGVyKHN0cnVjdCBuaWxmc19zYl9pbmZvICpzYmksIGludCBmbGFnKQogewogCXN0cnVjdCB0aGVfbmlsZnMgKm5pbGZzID0gc2JpLT5zX25pbGZzOwpAQCAtODM4LDcgKzg1NSw3IEBACiAKIHN0YXRpYyBpbnQgbmlsZnNfdHJlZV93YXNfdG91Y2hlZChzdHJ1Y3QgZGVudHJ5ICpyb290X2RlbnRyeSkKIHsKLQlyZXR1cm4gYXRvbWljX3JlYWQoJnJvb3RfZGVudHJ5LT5kX2NvdW50KSA+IDE7CisJcmV0dXJuIHJvb3RfZGVudHJ5LT5kX2NvdW50ID4gMTsKIH0KIAogLyoqCkBAIC0xMDAyLDExICsxMDE5LDExIEBACiAJc3RydWN0IG5pbGZzX3NiX2luZm8gKnNiaSA9IE5JTEZTX1NCKHNiKTsKIAlzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcyA9IHNiaS0+c19uaWxmczsKIAl1bnNpZ25lZCBsb25nIG9sZF9zYl9mbGFnczsKLQlzdHJ1Y3QgbmlsZnNfbW91bnRfb3B0aW9ucyBvbGRfb3B0czsKKwl1bnNpZ25lZCBsb25nIG9sZF9tb3VudF9vcHQ7CiAJaW50IGVycjsKIAogCW9sZF9zYl9mbGFncyA9IHNiLT5zX2ZsYWdzOwotCW9sZF9vcHRzLm1vdW50X29wdCA9IHNiaS0+c19tb3VudF9vcHQ7CisJb2xkX21vdW50X29wdCA9IHNiaS0+c19tb3VudF9vcHQ7CiAKIAlpZiAoIXBhcnNlX29wdGlvbnMoZGF0YSwgc2IsIDEpKSB7CiAJCWVyciA9IC1FSU5WQUw7CkBAIC0xMDc1LDcgKzEwOTIsNyBAQAogCiAgcmVzdG9yZV9vcHRzOgogCXNiLT5zX2ZsYWdzID0gb2xkX3NiX2ZsYWdzOwotCXNiaS0+c19tb3VudF9vcHQgPSBvbGRfb3B0cy5tb3VudF9vcHQ7CisJc2JpLT5zX21vdW50X29wdCA9IG9sZF9tb3VudF9vcHQ7CiAJcmV0dXJuIGVycjsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL3RoZV9uaWxmcy5jIGIvZnMvbmlsZnMyL3RoZV9uaWxmcy5jCmluZGV4IDAyNTRiZTIuLmFkNGFjNjAgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi90aGVfbmlsZnMuYworKysgYi9mcy9uaWxmczIvdGhlX25pbGZzLmMKQEAgLTMyOSw3ICszMjksNiBAQAogCXByaW50ayhLRVJOX0lORk8gIk5JTEZTOiByZWNvdmVyeSBjb21wbGV0ZS5cbiIpOwogCiAgc2tpcF9yZWNvdmVyeToKLQlzZXRfbmlsZnNfbG9hZGVkKG5pbGZzKTsKIAluaWxmc19jbGVhcl9yZWNvdmVyeV9pbmZvKCZyaSk7CiAJc2JpLT5zX3N1cGVyLT5zX2ZsYWdzID0gc19mbGFnczsKIAlyZXR1cm4gMDsKQEAgLTY1MSwxMiArNjUwLDExIEBACiAKIGludCBuaWxmc19jb3VudF9mcmVlX2Jsb2NrcyhzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcywgc2VjdG9yX3QgKm5ibG9ja3MpCiB7Ci0Jc3RydWN0IGlub2RlICpkYXQgPSBuaWxmc19kYXRfaW5vZGUobmlsZnMpOwogCXVuc2lnbmVkIGxvbmcgbmNsZWFuc2VnczsKIAotCWRvd25fcmVhZCgmTklMRlNfTURUKGRhdCktPm1pX3NlbSk7CS8qIFhYWCAqLworCWRvd25fcmVhZCgmTklMRlNfTURUKG5pbGZzLT5uc19kYXQpLT5taV9zZW0pOwogCW5jbGVhbnNlZ3MgPSBuaWxmc19zdWZpbGVfZ2V0X25jbGVhbnNlZ3MobmlsZnMtPm5zX3N1ZmlsZSk7Ci0JdXBfcmVhZCgmTklMRlNfTURUKGRhdCktPm1pX3NlbSk7CS8qIFhYWCAqLworCXVwX3JlYWQoJk5JTEZTX01EVChuaWxmcy0+bnNfZGF0KS0+bWlfc2VtKTsKIAkqbmJsb2NrcyA9IChzZWN0b3JfdCluY2xlYW5zZWdzICogbmlsZnMtPm5zX2Jsb2Nrc19wZXJfc2VnbWVudDsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi90aGVfbmlsZnMuaCBiL2ZzL25pbGZzMi90aGVfbmlsZnMuaAppbmRleCA2OTIyNmUxLi5mZDg1ZTRjIDEwMDY0NAotLS0gYS9mcy9uaWxmczIvdGhlX25pbGZzLmgKKysrIGIvZnMvbmlsZnMyL3RoZV9uaWxmcy5oCkBAIC0zNiw4ICszNiw2IEBACiAvKiB0aGVfbmlsZnMgc3RydWN0ICovCiBlbnVtIHsKIAlUSEVfTklMRlNfSU5JVCA9IDAsICAgICAvKiBJbmZvcm1hdGlvbiBmcm9tIHN1cGVyX2Jsb2NrIGlzIHNldCAqLwotCVRIRV9OSUxGU19MT0FERUQsICAgICAgIC8qIFJvbGwtYmFjay9yb2xsLWZvcndhcmQgaGFzIGRvbmUgYW5kCi0JCQkJICAgdGhlIGxhdGVzdCBjaGVja3BvaW50IHdhcyBsb2FkZWQgKi8KIAlUSEVfTklMRlNfRElTQ09OVElOVUVELAkvKiAnbmV4dCcgcG9pbnRlciBjaGFpbiBoYXMgYnJva2VuICovCiAJVEhFX05JTEZTX0dDX1JVTk5JTkcsCS8qIGdjIHByb2Nlc3MgaXMgcnVubmluZyAqLwogCVRIRV9OSUxGU19TQl9ESVJUWSwJLyogc3VwZXIgYmxvY2sgaXMgZGlydHkgKi8KQEAgLTE3OCw3ICsxNzYsNiBAQAogfQogCiBUSEVfTklMRlNfRk5TKElOSVQsIGluaXQpCi1USEVfTklMRlNfRk5TKExPQURFRCwgbG9hZGVkKQogVEhFX05JTEZTX0ZOUyhESVNDT05USU5VRUQsIGRpc2NvbnRpbnVlZCkKIFRIRV9OSUxGU19GTlMoR0NfUlVOTklORywgZ2NfcnVubmluZykKIFRIRV9OSUxGU19GTlMoU0JfRElSVFksIHNiX2RpcnR5KQpkaWZmIC0tZ2l0IGEvZnMvbm90aWZ5L2Zzbm90aWZ5LmMgYi9mcy9ub3RpZnkvZnNub3RpZnkuYwppbmRleCAyMGRjMjE4Li43OWI0N2NiIDEwMDY0NAotLS0gYS9mcy9ub3RpZnkvZnNub3RpZnkuYworKysgYi9mcy9ub3RpZnkvZnNub3RpZnkuYwpAQCAtNTksNyArNTksNyBAQAogCS8qIGRldGVybWluZSBpZiB0aGUgY2hpbGRyZW4gc2hvdWxkIHRlbGwgaW5vZGUgYWJvdXQgdGhlaXIgZXZlbnRzICovCiAJd2F0Y2hlZCA9IGZzbm90aWZ5X2lub2RlX3dhdGNoZXNfY2hpbGRyZW4oaW5vZGUpOwogCi0Jc3Bpbl9sb2NrKCZkY2FjaGVfbG9jayk7CisJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKIAkvKiBydW4gYWxsIG9mIHRoZSBkZW50cmllcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBpbm9kZS4gIFNpbmNlIHRoaXMgaXMgYQogCSAqIGRpcmVjdG9yeSwgdGhlcmUgZGFtbiB3ZWxsIGJldHRlciBvbmx5IGJlIG9uZSBpdGVtIG9uIHRoaXMgbGlzdCAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnkoYWxpYXMsICZpbm9kZS0+aV9kZW50cnksIGRfYWxpYXMpIHsKQEAgLTY4LDE5ICs2OCwyMSBAQAogCQkvKiBydW4gYWxsIG9mIHRoZSBjaGlsZHJlbiBvZiB0aGUgb3JpZ2luYWwgaW5vZGUgYW5kIGZpeCB0aGVpcgogCQkgKiBkX2ZsYWdzIHRvIGluZGljYXRlIHBhcmVudGFsIGludGVyZXN0ICh0aGVpciBwYXJlbnQgaXMgdGhlCiAJCSAqIG9yaWdpbmFsIGlub2RlKSAqLworCQlzcGluX2xvY2soJmFsaWFzLT5kX2xvY2spOwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNoaWxkLCAmYWxpYXMtPmRfc3ViZGlycywgZF91LmRfY2hpbGQpIHsKIAkJCWlmICghY2hpbGQtPmRfaW5vZGUpCiAJCQkJY29udGludWU7CiAKLQkJCXNwaW5fbG9jaygmY2hpbGQtPmRfbG9jayk7CisJCQlzcGluX2xvY2tfbmVzdGVkKCZjaGlsZC0+ZF9sb2NrLCBERU5UUllfRF9MT0NLX05FU1RFRCk7CiAJCQlpZiAod2F0Y2hlZCkKIAkJCQljaGlsZC0+ZF9mbGFncyB8PSBEQ0FDSEVfRlNOT1RJRllfUEFSRU5UX1dBVENIRUQ7CiAJCQllbHNlCiAJCQkJY2hpbGQtPmRfZmxhZ3MgJj0gfkRDQUNIRV9GU05PVElGWV9QQVJFTlRfV0FUQ0hFRDsKIAkJCXNwaW5fdW5sb2NrKCZjaGlsZC0+ZF9sb2NrKTsKIAkJfQorCQlzcGluX3VubG9jaygmYWxpYXMtPmRfbG9jayk7CiAJfQotCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7CisJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwogfQogCiAvKiBOb3RpZnkgdGhpcyBkZW50cnkncyBwYXJlbnQgYWJvdXQgYSBjaGlsZCdzIGV2ZW50cy4gKi8KZGlmZiAtLWdpdCBhL2ZzL250ZnMvaW5vZGUuYyBiL2ZzL250ZnMvaW5vZGUuYwppbmRleCA5MzYyMmIxLi5hNjI3ZWQ4IDEwMDY0NAotLS0gYS9mcy9udGZzL2lub2RlLmMKKysrIGIvZnMvbnRmcy9pbm9kZS5jCkBAIC0zMzIsNiArMzMyLDEzIEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKK3N0YXRpYyB2b2lkIG50ZnNfaV9jYWxsYmFjayhzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgaW5vZGUsIGlfcmN1KTsKKwlJTklUX0xJU1RfSEVBRCgmaW5vZGUtPmlfZGVudHJ5KTsKKwlrbWVtX2NhY2hlX2ZyZWUobnRmc19iaWdfaW5vZGVfY2FjaGUsIE5URlNfSShpbm9kZSkpOworfQorCiB2b2lkIG50ZnNfZGVzdHJveV9iaWdfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAludGZzX2lub2RlICpuaSA9IE5URlNfSShpbm9kZSk7CkBAIC0zNDAsNyArMzQ3LDcgQEAKIAlCVUdfT04obmktPnBhZ2UpOwogCWlmICghYXRvbWljX2RlY19hbmRfdGVzdCgmbmktPmNvdW50KSkKIAkJQlVHKCk7Ci0Ja21lbV9jYWNoZV9mcmVlKG50ZnNfYmlnX2lub2RlX2NhY2hlLCBOVEZTX0koaW5vZGUpKTsKKwljYWxsX3JjdSgmaW5vZGUtPmlfcmN1LCBudGZzX2lfY2FsbGJhY2spOwogfQogCiBzdGF0aWMgaW5saW5lIG50ZnNfaW5vZGUgKm50ZnNfYWxsb2NfZXh0ZW50X2lub2RlKHZvaWQpCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9hY2wuYyBiL2ZzL29jZnMyL2FjbC5jCmluZGV4IDM5MTkxNTAuLjcwNGY2YjEgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2FjbC5jCisrKyBiL2ZzL29jZnMyL2FjbC5jCkBAIC0yOTEsMTMgKzI5MSwxNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLWludCBvY2ZzMl9jaGVja19hY2woc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spCitpbnQgb2NmczJfY2hlY2tfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7Ci0Jc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS0+aV9zYik7CisJc3RydWN0IG9jZnMyX3N1cGVyICpvc2I7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCA9IE5VTEw7CiAJc3RydWN0IHBvc2l4X2FjbCAqYWNsOwogCWludCByZXQgPSAtRUFHQUlOOwogCisJaWYgKGZsYWdzICYgSVBFUk1fRkxBR19SQ1UpCisJCXJldHVybiAtRUNISUxEOworCisJb3NiID0gT0NGUzJfU0IoaW5vZGUtPmlfc2IpOwogCWlmICghKG9zYi0+c19tb3VudF9vcHQgJiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpKQogCQlyZXR1cm4gcmV0OwogCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9hY2wuaCBiL2ZzL29jZnMyL2FjbC5oCmluZGV4IDVjNWQzMWYuLjRmZTdjOWMgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2FjbC5oCisrKyBiL2ZzL29jZnMyL2FjbC5oCkBAIC0yNiw3ICsyNiw3IEBACiAJX19sZTMyIGVfaWQ7CiB9OwogCi1leHRlcm4gaW50IG9jZnMyX2NoZWNrX2FjbChzdHJ1Y3QgaW5vZGUgKiwgaW50KTsKK2V4dGVybiBpbnQgb2NmczJfY2hlY2tfYWNsKHN0cnVjdCBpbm9kZSAqLCBpbnQsIHVuc2lnbmVkIGludCk7CiBleHRlcm4gaW50IG9jZnMyX2FjbF9jaG1vZChzdHJ1Y3QgaW5vZGUgKik7CiBleHRlcm4gaW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICosIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgaW5vZGUgKiwKIAkJCSAgc3RydWN0IGJ1ZmZlcl9oZWFkICosIHN0cnVjdCBidWZmZXJfaGVhZCAqLApkaWZmIC0tZ2l0IGEvZnMvb2NmczIvY2x1c3Rlci9oZWFydGJlYXQuYyBiL2ZzL29jZnMyL2NsdXN0ZXIvaGVhcnRiZWF0LmMKaW5kZXggOWYyNmFjOS4uOWUzZDQ1YiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvY2x1c3Rlci9oZWFydGJlYXQuYworKysgYi9mcy9vY2ZzMi9jbHVzdGVyL2hlYXJ0YmVhdC5jCkBAIC0zMDcsOCArMzA3LDcgQEAKIAogc3RhdGljIHZvaWQgbzJoYl9kaXNhcm1fd3JpdGVfdGltZW91dChzdHJ1Y3QgbzJoYl9yZWdpb24gKnJlZykKIHsKLQljYW5jZWxfZGVsYXllZF93b3JrKCZyZWctPmhyX3dyaXRlX3RpbWVvdXRfd29yayk7Ci0JZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnJlZy0+aHJfd3JpdGVfdGltZW91dF93b3JrKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIG8yaGJfYmlvX3dhaXRfaW5pdChzdHJ1Y3QgbzJoYl9iaW9fd2FpdF9jdHh0ICp3YykKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2NsdXN0ZXIvcXVvcnVtLmMgYi9mcy9vY2ZzMi9jbHVzdGVyL3F1b3J1bS5jCmluZGV4IGNmM2UxNjYuLmE4NzM2NjcgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2NsdXN0ZXIvcXVvcnVtLmMKKysrIGIvZnMvb2NmczIvY2x1c3Rlci9xdW9ydW0uYwpAQCAtMzI1LDUgKzMyNSw3IEBACiAKIHZvaWQgbzJxdW9fZXhpdCh2b2lkKQogewotCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisJc3RydWN0IG8ycXVvX3N0YXRlICpxcyA9ICZvMnF1b19zdGF0ZTsKKworCWZsdXNoX3dvcmtfc3luYygmcXMtPnFzX3dvcmspOwogfQpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGNhY2hlLmMgYi9mcy9vY2ZzMi9kY2FjaGUuYwppbmRleCA4OTU1MzJhYy4uNmQ4MGVjYyAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZGNhY2hlLmMKKysrIGIvZnMvb2NmczIvZGNhY2hlLmMKQEAgLTUyLDkgKzUyLDE1IEBACiBzdGF0aWMgaW50IG9jZnMyX2RlbnRyeV9yZXZhbGlkYXRlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAkJCQkgICBzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKIHsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAJaW50IHJldCA9IDA7ICAgIC8qIGlmIGFsbCBlbHNlIGZhaWxzLCBqdXN0IHJldHVybiBmYWxzZSAqLwotCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoZGVudHJ5LT5kX3NiKTsKKwlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYjsKKworCWlmIChuZC0+ZmxhZ3MgJiBMT09LVVBfUkNVKQorCQlyZXR1cm4gLUVDSElMRDsKKworCWlub2RlID0gZGVudHJ5LT5kX2lub2RlOworCW9zYiA9IE9DRlMyX1NCKGRlbnRyeS0+ZF9zYik7CiAKIAltbG9nX2VudHJ5KCIoMHglcCwgJyUuKnMnKVxuIiwgZGVudHJ5LAogCQkgICBkZW50cnktPmRfbmFtZS5sZW4sIGRlbnRyeS0+ZF9uYW1lLm5hbWUpOwpAQCAtMTY5LDIzICsxNzUsMjUgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkICpwOwogCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IE5VTEw7CiAKLQlzcGluX2xvY2soJmRjYWNoZV9sb2NrKTsKLQorCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7CiAJbGlzdF9mb3JfZWFjaChwLCAmaW5vZGUtPmlfZGVudHJ5KSB7CiAJCWRlbnRyeSA9IGxpc3RfZW50cnkocCwgc3RydWN0IGRlbnRyeSwgZF9hbGlhcyk7CiAKKwkJc3Bpbl9sb2NrKCZkZW50cnktPmRfbG9jayk7CiAJCWlmIChvY2ZzMl9tYXRjaF9kZW50cnkoZGVudHJ5LCBwYXJlbnRfYmxrbm8sIHNraXBfdW5oYXNoZWQpKSB7CiAJCQltbG9nKDAsICJkZW50cnkgZm91bmQ6ICUuKnNcbiIsCiAJCQkgICAgIGRlbnRyeS0+ZF9uYW1lLmxlbiwgZGVudHJ5LT5kX25hbWUubmFtZSk7CiAKLQkJCWRnZXRfbG9ja2VkKGRlbnRyeSk7CisJCQlkZ2V0X2Rsb2NrKGRlbnRyeSk7CisJCQlzcGluX3VubG9jaygmZGVudHJ5LT5kX2xvY2spOwogCQkJYnJlYWs7CiAJCX0KKwkJc3Bpbl91bmxvY2soJmRlbnRyeS0+ZF9sb2NrKTsKIAogCQlkZW50cnkgPSBOVUxMOwogCX0KIAotCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7CisJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwogCiAJcmV0dXJuIGRlbnRyeTsKIH0KZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2RsbWZzL2RsbWZzLmMgYi9mcy9vY2ZzMi9kbG1mcy9kbG1mcy5jCmluZGV4IGIyZGY0OTAuLjhjNWMwZWQgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2RsbWZzL2RsbWZzLmMKKysrIGIvZnMvb2NmczIvZGxtZnMvZGxtZnMuYwpAQCAtMzUxLDkgKzM1MSwxNiBAQAogCXJldHVybiAmaXAtPmlwX3Zmc19pbm9kZTsKIH0KIAorc3RhdGljIHZvaWQgZGxtZnNfaV9jYWxsYmFjayhzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgaW5vZGUsIGlfcmN1KTsKKwlJTklUX0xJU1RfSEVBRCgmaW5vZGUtPmlfZGVudHJ5KTsKKwlrbWVtX2NhY2hlX2ZyZWUoZGxtZnNfaW5vZGVfY2FjaGUsIERMTUZTX0koaW5vZGUpKTsKK30KKwogc3RhdGljIHZvaWQgZGxtZnNfZGVzdHJveV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewotCWttZW1fY2FjaGVfZnJlZShkbG1mc19pbm9kZV9jYWNoZSwgRExNRlNfSShpbm9kZSkpOworCWNhbGxfcmN1KCZpbm9kZS0+aV9yY3UsIGRsbWZzX2lfY2FsbGJhY2spOwogfQogCiBzdGF0aWMgdm9pZCBkbG1mc19ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZXhwb3J0LmMgYi9mcy9vY2ZzMi9leHBvcnQuYwppbmRleCAxOWFkMTQ1Li42YWRhZmE1IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9leHBvcnQuYworKysgYi9mcy9vY2ZzMi9leHBvcnQuYwpAQCAtMTM4LDcgKzEzOCw3IEBACiAKIAlyZXN1bHQgPSBkX29idGFpbl9hbGlhcyhpbm9kZSk7CiAJaWYgKCFJU19FUlIocmVzdWx0KSkKLQkJcmVzdWx0LT5kX29wID0gJm9jZnMyX2RlbnRyeV9vcHM7CisJCWRfc2V0X2Rfb3AocmVzdWx0LCAmb2NmczJfZGVudHJ5X29wcyk7CiAJZWxzZQogCQltbG9nX2Vycm5vKFBUUl9FUlIocmVzdWx0KSk7CiAKQEAgLTE3Niw3ICsxNzYsNyBAQAogCiAJcGFyZW50ID0gZF9vYnRhaW5fYWxpYXMob2NmczJfaWdldChPQ0ZTMl9TQihkaXItPmlfc2IpLCBibGtubywgMCwgMCkpOwogCWlmICghSVNfRVJSKHBhcmVudCkpCi0JCXBhcmVudC0+ZF9vcCA9ICZvY2ZzMl9kZW50cnlfb3BzOworCQlkX3NldF9kX29wKHBhcmVudCwgJm9jZnMyX2RlbnRyeV9vcHMpOwogCiBiYWlsX3VubG9jazoKIAlvY2ZzMl9pbm9kZV91bmxvY2soZGlyLCAwKTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2ZpbGUuYyBiL2ZzL29jZnMyL2ZpbGUuYwppbmRleCBmNmNiYTU2Li5iZGFkYmFlMCAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZmlsZS5jCisrKyBiL2ZzL29jZnMyL2ZpbGUuYwpAQCAtMTMwNywxMCArMTMwNywxMyBAQAogCXJldHVybiBlcnI7CiB9CiAKLWludCBvY2ZzMl9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKQoraW50IG9jZnMyX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2ssIHVuc2lnbmVkIGludCBmbGFncykKIHsKIAlpbnQgcmV0OwogCisJaWYgKGZsYWdzICYgSVBFUk1fRkxBR19SQ1UpCisJCXJldHVybiAtRUNISUxEOworCiAJbWxvZ19lbnRyeV92b2lkKCk7CiAKIAlyZXQgPSBvY2ZzMl9pbm9kZV9sb2NrKGlub2RlLCBOVUxMLCAwKTsKQEAgLTEzMjAsNyArMTMyMyw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXJldCA9IGdlbmVyaWNfcGVybWlzc2lvbihpbm9kZSwgbWFzaywgb2NmczJfY2hlY2tfYWNsKTsKKwlyZXQgPSBnZW5lcmljX3Blcm1pc3Npb24oaW5vZGUsIG1hc2ssIGZsYWdzLCBvY2ZzMl9jaGVja19hY2wpOwogCiAJb2NmczJfaW5vZGVfdW5sb2NrKGlub2RlLCAwKTsKIG91dDoKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2ZpbGUuaCBiL2ZzL29jZnMyL2ZpbGUuaAppbmRleCA5N2JmNzYxLi5mNWFmYmJlIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9maWxlLmgKKysrIGIvZnMvb2NmczIvZmlsZS5oCkBAIC02MSw3ICs2MSw3IEBACiBpbnQgb2NmczJfc2V0YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpYXR0ciAqYXR0cik7CiBpbnQgb2NmczJfZ2V0YXR0cihzdHJ1Y3QgdmZzbW91bnQgKm1udCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogCQkgIHN0cnVjdCBrc3RhdCAqc3RhdCk7Ci1pbnQgb2NmczJfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzayk7CitpbnQgb2NmczJfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaywgdW5zaWduZWQgaW50IGZsYWdzKTsKIAogaW50IG9jZnMyX3Nob3VsZF91cGRhdGVfYXRpbWUoc3RydWN0IGlub2RlICppbm9kZSwKIAkJCSAgICAgIHN0cnVjdCB2ZnNtb3VudCAqdmZzbW50KTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL25hbWVpLmMgYi9mcy9vY2ZzMi9uYW1laS5jCmluZGV4IGZmNTc0NGUuLmQxNGNhZDYgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL25hbWVpLmMKKysrIGIvZnMvb2NmczIvbmFtZWkuYwpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAJc3Bpbl91bmxvY2soJm9pLT5pcF9sb2NrKTsKIAogYmFpbF9hZGQ6Ci0JZGVudHJ5LT5kX29wID0gJm9jZnMyX2RlbnRyeV9vcHM7CisJZF9zZXRfZF9vcChkZW50cnksICZvY2ZzMl9kZW50cnlfb3BzKTsKIAlyZXQgPSBkX3NwbGljZV9hbGlhcyhpbm9kZSwgZGVudHJ5KTsKIAogCWlmIChpbm9kZSkgewpAQCAtNDE1LDcgKzQxNSw3IEBACiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJZ290byBsZWF2ZTsKIAl9Ci0JZGVudHJ5LT5kX29wID0gJm9jZnMyX2RlbnRyeV9vcHM7CisJZF9zZXRfZF9vcChkZW50cnksICZvY2ZzMl9kZW50cnlfb3BzKTsKIAogCXN0YXR1cyA9IG9jZnMyX2FkZF9lbnRyeShoYW5kbGUsIGRlbnRyeSwgaW5vZGUsCiAJCQkJIE9DRlMyX0koaW5vZGUpLT5pcF9ibGtubywgcGFyZW50X2ZlX2JoLApAQCAtNzQzLDcgKzc0Myw3IEBACiAJfQogCiAJaWhvbGQoaW5vZGUpOwotCWRlbnRyeS0+ZF9vcCA9ICZvY2ZzMl9kZW50cnlfb3BzOworCWRfc2V0X2Rfb3AoZGVudHJ5LCAmb2NmczJfZGVudHJ5X29wcyk7CiAJZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKIAogb3V0X2NvbW1pdDoKQEAgLTE3OTQsNyArMTc5NCw3IEBACiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJZ290byBiYWlsOwogCX0KLQlkZW50cnktPmRfb3AgPSAmb2NmczJfZGVudHJ5X29wczsKKwlkX3NldF9kX29wKGRlbnRyeSwgJm9jZnMyX2RlbnRyeV9vcHMpOwogCiAJc3RhdHVzID0gb2NmczJfYWRkX2VudHJ5KGhhbmRsZSwgZGVudHJ5LCBpbm9kZSwKIAkJCQkgbGU2NF90b19jcHUoZmUtPmlfYmxrbm8pLCBwYXJlbnRfZmVfYmgsCkBAIC0yNDU5LDcgKzI0NTksNyBAQAogCQlnb3RvIG91dF9jb21taXQ7CiAJfQogCi0JZGVudHJ5LT5kX29wID0gJm9jZnMyX2RlbnRyeV9vcHM7CisJZF9zZXRfZF9vcChkZW50cnksICZvY2ZzMl9kZW50cnlfb3BzKTsKIAlkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOwogCXN0YXR1cyA9IDA7CiBvdXRfY29tbWl0OgpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvc3VwZXIuYyBiL2ZzL29jZnMyL3N1cGVyLmMKaW5kZXggY2ZlYWI3Yy4uMTdmZjQ2ZiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvc3VwZXIuYworKysgYi9mcy9vY2ZzMi9zdXBlci5jCkBAIC01NjksOSArNTY5LDE2IEBACiAJcmV0dXJuICZvaS0+dmZzX2lub2RlOwogfQogCitzdGF0aWMgdm9pZCBvY2ZzMl9pX2NhbGxiYWNrKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBpbm9kZSwgaV9yY3UpOworCUlOSVRfTElTVF9IRUFEKCZpbm9kZS0+aV9kZW50cnkpOworCWttZW1fY2FjaGVfZnJlZShvY2ZzMl9pbm9kZV9jYWNoZXAsIE9DRlMyX0koaW5vZGUpKTsKK30KKwogc3RhdGljIHZvaWQgb2NmczJfZGVzdHJveV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewotCWttZW1fY2FjaGVfZnJlZShvY2ZzMl9pbm9kZV9jYWNoZXAsIE9DRlMyX0koaW5vZGUpKTsKKwljYWxsX3JjdSgmaW5vZGUtPmlfcmN1LCBvY2ZzMl9pX2NhbGxiYWNrKTsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBvY2ZzMl9tYXhfZmlsZV9vZmZzZXQodW5zaWduZWQgaW50IGJiaXRzLApkaWZmIC0tZ2l0IGEvZnMvb3BlbnByb21mcy9pbm9kZS5jIGIvZnMvb3BlbnByb21mcy9pbm9kZS5jCmluZGV4IDkxMWU2MWYuLmEyYTViZmYgMTAwNjQ0Ci0tLSBhL2ZzL29wZW5wcm9tZnMvaW5vZGUuYworKysgYi9mcy9vcGVucHJvbWZzL2lub2RlLmMKQEAgLTM0Myw5ICszNDMsMTYgQEAKIAlyZXR1cm4gJm9pLT52ZnNfaW5vZGU7CiB9CiAKK3N0YXRpYyB2b2lkIG9wZW5wcm9tX2lfY2FsbGJhY2soc3RydWN0IHJjdV9oZWFkICpoZWFkKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGlub2RlLCBpX3JjdSk7CisJSU5JVF9MSVNUX0hFQUQoJmlub2RlLT5pX2RlbnRyeSk7CisJa21lbV9jYWNoZV9mcmVlKG9wX2lub2RlX2NhY2hlcCwgT1BfSShpbm9kZSkpOworfQorCiBzdGF0aWMgdm9pZCBvcGVucHJvbV9kZXN0cm95X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7Ci0Ja21lbV9jYWNoZV9mcmVlKG9wX2lub2RlX2NhY2hlcCwgT1BfSShpbm9kZSkpOworCWNhbGxfcmN1KCZpbm9kZS0+aV9yY3UsIG9wZW5wcm9tX2lfY2FsbGJhY2spOwogfQogCiBzdGF0aWMgc3RydWN0IGlub2RlICpvcGVucHJvbV9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGlub190IGlubykKZGlmZiAtLWdpdCBhL2ZzL3BpcGUuYyBiL2ZzL3BpcGUuYwppbmRleCAwNDYyOWYzLi42OGYxZjhlIDEwMDY0NAotLS0gYS9mcy9waXBlLmMKKysrIGIvZnMvcGlwZS5jCkBAIC05OTksMTIgKzk5OSwxMiBAQAogCQlnb3RvIGVycjsKIAogCWVyciA9IC1FTk9NRU07Ci0JcGF0aC5kZW50cnkgPSBkX2FsbG9jKHBpcGVfbW50LT5tbnRfc2ItPnNfcm9vdCwgJm5hbWUpOworCXBhdGguZGVudHJ5ID0gZF9hbGxvY19wc2V1ZG8ocGlwZV9tbnQtPm1udF9zYiwgJm5hbWUpOwogCWlmICghcGF0aC5kZW50cnkpCiAJCWdvdG8gZXJyX2lub2RlOwogCXBhdGgubW50ID0gbW50Z2V0KHBpcGVfbW50KTsKIAotCXBhdGguZGVudHJ5LT5kX29wID0gJnBpcGVmc19kZW50cnlfb3BlcmF0aW9uczsKKwlkX3NldF9kX29wKHBhdGguZGVudHJ5LCAmcGlwZWZzX2RlbnRyeV9vcGVyYXRpb25zKTsKIAlkX2luc3RhbnRpYXRlKHBhdGguZGVudHJ5LCBpbm9kZSk7CiAKIAllcnIgPSAtRU5GSUxFOwpAQCAtMTI1Myw2ICsxMjUzLDEwIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHBpcGVmc19vcHMgPSB7CisJLmRlc3Ryb3lfaW5vZGUgPSBmcmVlX2lub2RlX25vbnJjdSwKK307CisKIC8qCiAgKiBwaXBlZnMgc2hvdWxkIF9uZXZlcl8gYmUgbW91bnRlZCBieSB1c2VybGFuZCAtIHRvbyBtdWNoIG9mIHNlY3VyaXR5IGhhc3NsZSwKICAqIG5vIHJlYWwgZ2FpbiBmcm9tIGhhdmluZyB0aGUgd2hvbGUgd2hvcmVob3VzZSBtb3VudGVkLiBTbyB3ZSBkb24ndCBuZWVkCkBAIC0xMjYyLDcgKzEyNjYsNyBAQAogc3RhdGljIHN0cnVjdCBkZW50cnkgKnBpcGVmc19tb3VudChzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqZnNfdHlwZSwKIAkJCSBpbnQgZmxhZ3MsIGNvbnN0IGNoYXIgKmRldl9uYW1lLCB2b2lkICpkYXRhKQogewotCXJldHVybiBtb3VudF9wc2V1ZG8oZnNfdHlwZSwgInBpcGU6IiwgTlVMTCwgUElQRUZTX01BR0lDKTsKKwlyZXR1cm4gbW91bnRfcHNldWRvKGZzX3R5cGUsICJwaXBlOiIsICZwaXBlZnNfb3BzLCBQSVBFRlNfTUFHSUMpOwogfQogCiBzdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgcGlwZV9mc190eXBlID0gewpAQCAtMTI4OCw3ICsxMjkyLDcgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3BpcGVfZnModm9pZCkKIHsKIAl1bnJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJnBpcGVfZnNfdHlwZSk7Ci0JbW50cHV0KHBpcGVfbW50KTsKKwltbnRwdXRfbG9uZyhwaXBlX21udCk7CiB9CiAKIGZzX2luaXRjYWxsKGluaXRfcGlwZV9mcyk7CmRpZmYgLS1naXQgYS9mcy9wbm9kZS5jIGIvZnMvcG5vZGUuYwppbmRleCA4MDY2YjhkLi5kNDI1MTRlIDEwMDY0NAotLS0gYS9mcy9wbm9kZS5jCisrKyBiL2ZzL3Bub2RlLmMKQEAgLTI4OCw3ICsyODgsNyBAQAogICovCiBzdGF0aWMgaW5saW5lIGludCBkb19yZWZjb3VudF9jaGVjayhzdHJ1Y3QgdmZzbW91bnQgKm1udCwgaW50IGNvdW50KQogewotCWludCBteWNvdW50ID0gYXRvbWljX3JlYWQoJm1udC0+bW50X2NvdW50KSAtIG1udC0+bW50X2dob3N0czsKKwlpbnQgbXljb3VudCA9IG1udF9nZXRfY291bnQobW50KSAtIG1udC0+bW50X2dob3N0czsKIAlyZXR1cm4gKG15Y291bnQgPiBjb3VudCk7CiB9CiAKQEAgLTMwMCw3ICszMDAsNyBAQAogICogQ2hlY2sgaWYgYW55IG9mIHRoZXNlIG1vdW50cyB0aGF0ICoqZG8gbm90IGhhdmUgc3VibW91bnRzKioKICAqIGhhdmUgbW9yZSByZWZlcmVuY2VzIHRoYW4gJ3JlZmNudCcuIElmIHNvIHJldHVybiBidXN5LgogICoKLSAqIHZmc21vdW50IGxvY2sgbXVzdCBiZSBoZWxkIGZvciByZWFkIG9yIHdyaXRlCisgKiB2ZnNtb3VudCBsb2NrIG11c3QgYmUgaGVsZCBmb3Igd3JpdGUKICAqLwogaW50IHByb3BhZ2F0ZV9tb3VudF9idXN5KHN0cnVjdCB2ZnNtb3VudCAqbW50LCBpbnQgcmVmY250KQogewpkaWZmIC0tZ2l0IGEvZnMvcHJvYy9NYWtlZmlsZSBiL2ZzL3Byb2MvTWFrZWZpbGUKaW5kZXggMjc1OGUyYS4uMjg4YTQ5ZTAgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvTWFrZWZpbGUKKysrIGIvZnMvcHJvYy9NYWtlZmlsZQpAQCAtMTUsNiArMTUsNyBAQAogcHJvYy15CSs9IGludGVycnVwdHMubwogcHJvYy15CSs9IGxvYWRhdmcubwogcHJvYy15CSs9IG1lbWluZm8ubworcHJvYy15CSs9IHByb2NfY29uc29sZS5vCiBwcm9jLXkJKz0gc3RhdC5vCiBwcm9jLXkJKz0gdXB0aW1lLm8KIHByb2MteQkrPSB2ZXJzaW9uLm8KZGlmZiAtLWdpdCBhL2ZzL3Byb2MvYmFzZS5jIGIvZnMvcHJvYy9iYXNlLmMKaW5kZXggMTgyODQ1MS4uYjIwOTYyYyAxMDA2NDQKLS0tIGEvZnMvcHJvYy9iYXNlLmMKKysrIGIvZnMvcHJvYy9iYXNlLmMKQEAgLTE0MDcsNiArMTQwNyw4MiBAQAogCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19TQ0hFRF9BVVRPR1JPVVAKKy8qCisgKiBQcmludCBvdXQgYXV0b2dyb3VwIHJlbGF0ZWQgaW5mb3JtYXRpb246CisgKi8KK3N0YXRpYyBpbnQgc2NoZWRfYXV0b2dyb3VwX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtLT5wcml2YXRlOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKKworCXAgPSBnZXRfcHJvY190YXNrKGlub2RlKTsKKwlpZiAoIXApCisJCXJldHVybiAtRVNSQ0g7CisJcHJvY19zY2hlZF9hdXRvZ3JvdXBfc2hvd190YXNrKHAsIG0pOworCisJcHV0X3Rhc2tfc3RydWN0KHApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitzY2hlZF9hdXRvZ3JvdXBfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpvZmZzZXQpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IHRhc2tfc3RydWN0ICpwOworCWNoYXIgYnVmZmVyW1BST0NfTlVNQlVGXTsKKwlsb25nIG5pY2U7CisJaW50IGVycjsKKworCW1lbXNldChidWZmZXIsIDAsIHNpemVvZihidWZmZXIpKTsKKwlpZiAoY291bnQgPiBzaXplb2YoYnVmZmVyKSAtIDEpCisJCWNvdW50ID0gc2l6ZW9mKGJ1ZmZlcikgLSAxOworCWlmIChjb3B5X2Zyb21fdXNlcihidWZmZXIsIGJ1ZiwgY291bnQpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWVyciA9IHN0cmljdF9zdHJ0b2woc3Ryc3RyaXAoYnVmZmVyKSwgMCwgJm5pY2UpOworCWlmIChlcnIpCisJCXJldHVybiAtRUlOVkFMOworCisJcCA9IGdldF9wcm9jX3Rhc2soaW5vZGUpOworCWlmICghcCkKKwkJcmV0dXJuIC1FU1JDSDsKKworCWVyciA9IG5pY2U7CisJZXJyID0gcHJvY19zY2hlZF9hdXRvZ3JvdXBfc2V0X25pY2UocCwgJmVycik7CisJaWYgKGVycikKKwkJY291bnQgPSBlcnI7CisKKwlwdXRfdGFza19zdHJ1Y3QocCk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBpbnQgc2NoZWRfYXV0b2dyb3VwX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJaW50IHJldDsKKworCXJldCA9IHNpbmdsZV9vcGVuKGZpbHAsIHNjaGVkX2F1dG9ncm91cF9zaG93LCBOVUxMKTsKKwlpZiAoIXJldCkgeworCQlzdHJ1Y3Qgc2VxX2ZpbGUgKm0gPSBmaWxwLT5wcml2YXRlX2RhdGE7CisKKwkJbS0+cHJpdmF0ZSA9IGlub2RlOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX3BpZF9zY2hlZF9hdXRvZ3JvdXBfb3BlcmF0aW9ucyA9IHsKKwkub3BlbgkJPSBzY2hlZF9hdXRvZ3JvdXBfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkud3JpdGUJCT0gc2NoZWRfYXV0b2dyb3VwX3dyaXRlLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCit9OworCisjZW5kaWYgLyogQ09ORklHX1NDSEVEX0FVVE9HUk9VUCAqLworCiBzdGF0aWMgc3NpemVfdCBjb21tX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAogCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpvZmZzZXQpCiB7CkBAIC0xNzE5LDEwICsxNzk1LDE2IEBACiAgKi8KIHN0YXRpYyBpbnQgcGlkX3JldmFsaWRhdGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKIHsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayA9IGdldF9wcm9jX3Rhc2soaW5vZGUpOworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOwogCWNvbnN0IHN0cnVjdCBjcmVkICpjcmVkOwogCisJaWYgKG5kICYmIG5kLT5mbGFncyAmIExPT0tVUF9SQ1UpCisJCXJldHVybiAtRUNISUxEOworCisJaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CisJdGFzayA9IGdldF9wcm9jX3Rhc2soaW5vZGUpOworCiAJaWYgKHRhc2spIHsKIAkJaWYgKChpbm9kZS0+aV9tb2RlID09IChTX0lGRElSfFNfSVJVR098U19JWFVHTykpIHx8CiAJCSAgICB0YXNrX2R1bXBhYmxlKHRhc2spKSB7CkBAIC0xNzQ0LDcgKzE4MjYsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHBpZF9kZWxldGVfZGVudHJ5KHN0cnVjdCBkZW50cnkgKiBkZW50cnkpCitzdGF0aWMgaW50IHBpZF9kZWxldGVfZGVudHJ5KGNvbnN0IHN0cnVjdCBkZW50cnkgKiBkZW50cnkpCiB7CiAJLyogSXMgdGhlIHRhc2sgd2UgcmVwcmVzZW50IGRlYWQ/CiAJICogSWYgc28sIHRoZW4gZG9uJ3QgcHV0IHRoZSBkZW50cnkgb24gdGhlIGxydSBsaXN0LApAQCAtMTg4OCwxMiArMTk3MCwxOSBAQAogCiBzdGF0aWMgaW50IHRpZF9mZF9yZXZhbGlkYXRlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IG5hbWVpZGF0YSAqbmQpCiB7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2sgPSBnZXRfcHJvY190YXNrKGlub2RlKTsKLQlpbnQgZmQgPSBwcm9jX2ZkKGlub2RlKTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKKwlpbnQgZmQ7CiAJc3RydWN0IGZpbGVzX3N0cnVjdCAqZmlsZXM7CiAJY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQ7CiAKKwlpZiAobmQgJiYgbmQtPmZsYWdzICYgTE9PS1VQX1JDVSkKKwkJcmV0dXJuIC1FQ0hJTEQ7CisKKwlpbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKKwl0YXNrID0gZ2V0X3Byb2NfdGFzayhpbm9kZSk7CisJZmQgPSBwcm9jX2ZkKGlub2RlKTsKKwogCWlmICh0YXNrKSB7CiAJCWZpbGVzID0gZ2V0X2ZpbGVzX3N0cnVjdCh0YXNrKTsKIAkJaWYgKGZpbGVzKSB7CkBAIC0xOTY5LDcgKzIwNTgsNyBAQAogCWlub2RlLT5pX29wID0gJnByb2NfcGlkX2xpbmtfaW5vZGVfb3BlcmF0aW9uczsKIAlpbm9kZS0+aV9zaXplID0gNjQ7CiAJZWktPm9wLnByb2NfZ2V0X2xpbmsgPSBwcm9jX2ZkX2xpbms7Ci0JZGVudHJ5LT5kX29wID0gJnRpZF9mZF9kZW50cnlfb3BlcmF0aW9uczsKKwlkX3NldF9kX29wKGRlbnRyeSwgJnRpZF9mZF9kZW50cnlfb3BlcmF0aW9ucyk7CiAJZF9hZGQoZGVudHJ5LCBpbm9kZSk7CiAJLyogQ2xvc2UgdGhlIHJhY2Ugb2YgdGhlIHByb2Nlc3MgZHlpbmcgYmVmb3JlIHdlIHJldHVybiB0aGUgZGVudHJ5ICovCiAJaWYgKHRpZF9mZF9yZXZhbGlkYXRlKGRlbnRyeSwgTlVMTCkpCkBAIC0yMTAxLDExICsyMTkwLDEzIEBACiAgKiAvcHJvYy9waWQvZmQgbmVlZHMgYSBzcGVjaWFsIHBlcm1pc3Npb24gaGFuZGxlciBzbyB0aGF0IGEgcHJvY2VzcyBjYW4gc3RpbGwKICAqIGFjY2VzcyAvcHJvYy9zZWxmL2ZkIGFmdGVyIGl0IGhhcyBleGVjdXRlZCBhIHNldHVpZCgpLgogICovCi1zdGF0aWMgaW50IHByb2NfZmRfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaykKK3N0YXRpYyBpbnQgcHJvY19mZF9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CiAJaW50IHJ2OwogCi0JcnYgPSBnZW5lcmljX3Blcm1pc3Npb24oaW5vZGUsIG1hc2ssIE5VTEwpOworCWlmIChmbGFncyAmIElQRVJNX0ZMQUdfUkNVKQorCQlyZXR1cm4gLUVDSElMRDsKKwlydiA9IGdlbmVyaWNfcGVybWlzc2lvbihpbm9kZSwgbWFzaywgZmxhZ3MsIE5VTEwpOwogCWlmIChydiA9PSAwKQogCQlyZXR1cm4gMDsKIAlpZiAodGFza19waWQoY3VycmVudCkgPT0gcHJvY19waWQoaW5vZGUpKQpAQCAtMjEzNyw3ICsyMjI4LDcgQEAKIAllaS0+ZmQgPSBmZDsKIAlpbm9kZS0+aV9tb2RlID0gU19JRlJFRyB8IFNfSVJVU1I7CiAJaW5vZGUtPmlfZm9wID0gJnByb2NfZmRpbmZvX2ZpbGVfb3BlcmF0aW9uczsKLQlkZW50cnktPmRfb3AgPSAmdGlkX2ZkX2RlbnRyeV9vcGVyYXRpb25zOworCWRfc2V0X2Rfb3AoZGVudHJ5LCAmdGlkX2ZkX2RlbnRyeV9vcGVyYXRpb25zKTsKIAlkX2FkZChkZW50cnksIGlub2RlKTsKIAkvKiBDbG9zZSB0aGUgcmFjZSBvZiB0aGUgcHJvY2VzcyBkeWluZyBiZWZvcmUgd2UgcmV0dXJuIHRoZSBkZW50cnkgKi8KIAlpZiAodGlkX2ZkX3JldmFsaWRhdGUoZGVudHJ5LCBOVUxMKSkKQEAgLTIxOTYsNyArMjI4Nyw3IEBACiAJaWYgKHAtPmZvcCkKIAkJaW5vZGUtPmlfZm9wID0gcC0+Zm9wOwogCWVpLT5vcCA9IHAtPm9wOwotCWRlbnRyeS0+ZF9vcCA9ICZwaWRfZGVudHJ5X29wZXJhdGlvbnM7CisJZF9zZXRfZF9vcChkZW50cnksICZwaWRfZGVudHJ5X29wZXJhdGlvbnMpOwogCWRfYWRkKGRlbnRyeSwgaW5vZGUpOwogCS8qIENsb3NlIHRoZSByYWNlIG9mIHRoZSBwcm9jZXNzIGR5aW5nIGJlZm9yZSB3ZSByZXR1cm4gdGhlIGRlbnRyeSAqLwogCWlmIChwaWRfcmV2YWxpZGF0ZShkZW50cnksIE5VTEwpKQpAQCAtMjU2Myw4ICsyNjU0LDE0IEBACiAgKi8KIHN0YXRpYyBpbnQgcHJvY19iYXNlX3JldmFsaWRhdGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKIHsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayA9IGdldF9wcm9jX3Rhc2soaW5vZGUpOworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOworCisJaWYgKG5kLT5mbGFncyAmIExPT0tVUF9SQ1UpCisJCXJldHVybiAtRUNISUxEOworCisJaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CisJdGFzayA9IGdldF9wcm9jX3Rhc2soaW5vZGUpOwogCWlmICh0YXNrKSB7CiAJCXB1dF90YXNrX3N0cnVjdCh0YXNrKTsKIAkJcmV0dXJuIDE7CkBAIC0yNjE1LDcgKzI3MTIsNyBAQAogCWlmIChwLT5mb3ApCiAJCWlub2RlLT5pX2ZvcCA9IHAtPmZvcDsKIAllaS0+b3AgPSBwLT5vcDsKLQlkZW50cnktPmRfb3AgPSAmcHJvY19iYXNlX2RlbnRyeV9vcGVyYXRpb25zOworCWRfc2V0X2Rfb3AoZGVudHJ5LCAmcHJvY19iYXNlX2RlbnRyeV9vcGVyYXRpb25zKTsKIAlkX2FkZChkZW50cnksIGlub2RlKTsKIAllcnJvciA9IE5VTEw7CiBvdXQ6CkBAIC0yNzMzLDYgKzI4MzAsOSBAQAogI2lmZGVmIENPTkZJR19TQ0hFRF9ERUJVRwogCVJFRygic2NoZWQiLCAgICAgIFNfSVJVR098U19JV1VTUiwgcHJvY19waWRfc2NoZWRfb3BlcmF0aW9ucyksCiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfU0NIRURfQVVUT0dST1VQCisJUkVHKCJhdXRvZ3JvdXAiLCAgU19JUlVHT3xTX0lXVVNSLCBwcm9jX3BpZF9zY2hlZF9hdXRvZ3JvdXBfb3BlcmF0aW9ucyksCisjZW5kaWYKIAlSRUcoImNvbW0iLCAgICAgIFNfSVJVR098U19JV1VTUiwgcHJvY19waWRfc2V0X2NvbW1fb3BlcmF0aW9ucyksCiAjaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0sKIAlJTkYoInN5c2NhbGwiLCAgICBTX0lSVVNSLCBwcm9jX3BpZF9zeXNjYWxsKSwKQEAgLTI5MjYsNyArMzAyNiw3IEBACiAJaW5vZGUtPmlfbmxpbmsgPSAyICsgcGlkX2VudHJ5X2NvdW50X2RpcnModGdpZF9iYXNlX3N0dWZmLAogCQlBUlJBWV9TSVpFKHRnaWRfYmFzZV9zdHVmZikpOwogCi0JZGVudHJ5LT5kX29wID0gJnBpZF9kZW50cnlfb3BlcmF0aW9uczsKKwlkX3NldF9kX29wKGRlbnRyeSwgJnBpZF9kZW50cnlfb3BlcmF0aW9ucyk7CiAKIAlkX2FkZChkZW50cnksIGlub2RlKTsKIAkvKiBDbG9zZSB0aGUgcmFjZSBvZiB0aGUgcHJvY2VzcyBkeWluZyBiZWZvcmUgd2UgcmV0dXJuIHRoZSBkZW50cnkgKi8KQEAgLTMxNjksNyArMzI2OSw3IEBACiAJaW5vZGUtPmlfbmxpbmsgPSAyICsgcGlkX2VudHJ5X2NvdW50X2RpcnModGlkX2Jhc2Vfc3R1ZmYsCiAJCUFSUkFZX1NJWkUodGlkX2Jhc2Vfc3R1ZmYpKTsKIAotCWRlbnRyeS0+ZF9vcCA9ICZwaWRfZGVudHJ5X29wZXJhdGlvbnM7CisJZF9zZXRfZF9vcChkZW50cnksICZwaWRfZGVudHJ5X29wZXJhdGlvbnMpOwogCiAJZF9hZGQoZGVudHJ5LCBpbm9kZSk7CiAJLyogQ2xvc2UgdGhlIHJhY2Ugb2YgdGhlIHByb2Nlc3MgZHlpbmcgYmVmb3JlIHdlIHJldHVybiB0aGUgZGVudHJ5ICovCmRpZmYgLS1naXQgYS9mcy9wcm9jL2dlbmVyaWMuYyBiL2ZzL3Byb2MvZ2VuZXJpYy5jCmluZGV4IGRkMjlmMDMuLmY3NjZiZTIgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvZ2VuZXJpYy5jCisrKyBiL2ZzL3Byb2MvZ2VuZXJpYy5jCkBAIC00MDAsNyArNDAwLDcgQEAKICAqIHNtYXJ0ZXI6IHdlIGNvdWxkIGtlZXAgYSAidm9sYXRpbGUiIGZsYWcgaW4gdGhlIAogICogaW5vZGUgdG8gaW5kaWNhdGUgd2hpY2ggb25lcyB0byBrZWVwLgogICovCi1zdGF0aWMgaW50IHByb2NfZGVsZXRlX2RlbnRyeShzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5KQorc3RhdGljIGludCBwcm9jX2RlbGV0ZV9kZW50cnkoY29uc3Qgc3RydWN0IGRlbnRyeSAqIGRlbnRyeSkKIHsKIAlyZXR1cm4gMTsKIH0KQEAgLTQzOSw3ICs0MzksNyBAQAogb3V0X3VubG9jazoKIAogCWlmIChpbm9kZSkgewotCQlkZW50cnktPmRfb3AgPSAmcHJvY19kZW50cnlfb3BlcmF0aW9uczsKKwkJZF9zZXRfZF9vcChkZW50cnksICZwcm9jX2RlbnRyeV9vcGVyYXRpb25zKTsKIAkJZF9hZGQoZGVudHJ5LCBpbm9kZSk7CiAJCXJldHVybiBOVUxMOwogCX0KZGlmZiAtLWdpdCBhL2ZzL3Byb2MvaW5vZGUuYyBiL2ZzL3Byb2MvaW5vZGUuYwppbmRleCAzZGRiNjA2Li42YmNiOTI2IDEwMDY0NAotLS0gYS9mcy9wcm9jL2lub2RlLmMKKysrIGIvZnMvcHJvYy9pbm9kZS5jCkBAIC02NSw5ICs2NSwxNiBAQAogCXJldHVybiBpbm9kZTsKIH0KIAorc3RhdGljIHZvaWQgcHJvY19pX2NhbGxiYWNrKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBpbm9kZSwgaV9yY3UpOworCUlOSVRfTElTVF9IRUFEKCZpbm9kZS0+aV9kZW50cnkpOworCWttZW1fY2FjaGVfZnJlZShwcm9jX2lub2RlX2NhY2hlcCwgUFJPQ19JKGlub2RlKSk7Cit9CisKIHN0YXRpYyB2b2lkIHByb2NfZGVzdHJveV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewotCWttZW1fY2FjaGVfZnJlZShwcm9jX2lub2RlX2NhY2hlcCwgUFJPQ19JKGlub2RlKSk7CisJY2FsbF9yY3UoJmlub2RlLT5pX3JjdSwgcHJvY19pX2NhbGxiYWNrKTsKIH0KIAogc3RhdGljIHZvaWQgaW5pdF9vbmNlKHZvaWQgKmZvbykKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvcHJvY19jb25zb2xlLmMgYi9mcy9wcm9jL3Byb2NfY29uc29sZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhNzA3NjAKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9wcm9jL3Byb2NfY29uc29sZS5jCkBAIC0wLDAgKzEsMTE0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEwIFdlcm5lciBGaW5rLCBKaXJpIFNsYWJ5CisgKgorICogTGljZW5zZWQgdW5kZXIgR1BMdjIKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9kcml2ZXIuaD4KKworLyoKKyAqIFRoaXMgaXMgaGFuZGxlciBmb3IgL3Byb2MvY29uc29sZXMKKyAqLworc3RhdGljIGludCBzaG93X2NvbnNvbGVfZGV2KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKK3sKKwlzdGF0aWMgY29uc3Qgc3RydWN0IHsKKwkJc2hvcnQgZmxhZzsKKwkJY2hhciBuYW1lOworCX0gY29uX2ZsYWdzW10gPSB7CisJCXsgQ09OX0VOQUJMRUQsCQknRScgfSwKKwkJeyBDT05fQ09OU0RFViwJCSdDJyB9LAorCQl7IENPTl9CT09ULAkJJ0InIH0sCisJCXsgQ09OX1BSSU5UQlVGRkVSLAkncCcgfSwKKwkJeyBDT05fQlJMLAkJJ2InIH0sCisJCXsgQ09OX0FOWVRJTUUsCQknYScgfSwKKwl9OworCWNoYXIgZmxhZ3NbQVJSQVlfU0laRShjb25fZmxhZ3MpICsgMV07CisJc3RydWN0IGNvbnNvbGUgKmNvbiA9IHY7CisJdW5zaWduZWQgaW50IGE7CisJaW50IGxlbjsKKwlkZXZfdCBkZXYgPSAwOworCisJaWYgKGNvbi0+ZGV2aWNlKSB7CisJCWNvbnN0IHN0cnVjdCB0dHlfZHJpdmVyICpkcml2ZXI7CisJCWludCBpbmRleDsKKwkJZHJpdmVyID0gY29uLT5kZXZpY2UoY29uLCAmaW5kZXgpOworCQlpZiAoZHJpdmVyKSB7CisJCQlkZXYgPSBNS0RFVihkcml2ZXItPm1ham9yLCBkcml2ZXItPm1pbm9yX3N0YXJ0KTsKKwkJCWRldiArPSBpbmRleDsKKwkJfQorCX0KKworCWZvciAoYSA9IDA7IGEgPCBBUlJBWV9TSVpFKGNvbl9mbGFncyk7IGErKykKKwkJZmxhZ3NbYV0gPSAoY29uLT5mbGFncyAmIGNvbl9mbGFnc1thXS5mbGFnKSA/CisJCQljb25fZmxhZ3NbYV0ubmFtZSA6ICcgJzsKKwlmbGFnc1thXSA9IDA7CisKKwlzZXFfcHJpbnRmKG0sICIlcyVkJW4iLCBjb24tPm5hbWUsIGNvbi0+aW5kZXgsICZsZW4pOworCWxlbiA9IDIxIC0gbGVuOworCWlmIChsZW4gPCAxKQorCQlsZW4gPSAxOworCXNlcV9wcmludGYobSwgIiUqYyVjJWMlYyAoJXMpIiwgbGVuLCAnICcsIGNvbi0+cmVhZCA/ICdSJyA6ICctJywKKwkJCWNvbi0+d3JpdGUgPyAnVycgOiAnLScsIGNvbi0+dW5ibGFuayA/ICdVJyA6ICctJywKKwkJCWZsYWdzKTsKKwlpZiAoZGV2KQorCQlzZXFfcHJpbnRmKG0sICIgJTRkOiVkIiwgTUFKT1IoZGV2KSwgTUlOT1IoZGV2KSk7CisKKwlzZXFfcHJpbnRmKG0sICJcbiIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkICpjX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwb3MpCit7CisJc3RydWN0IGNvbnNvbGUgKmNvbjsKKwlsb2ZmX3Qgb2ZmID0gMDsKKworCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwlmb3JfZWFjaF9jb25zb2xlKGNvbikKKwkJaWYgKG9mZisrID09ICpwb3MpCisJCQlicmVhazsKKworCXJldHVybiBjb247Cit9CisKK3N0YXRpYyB2b2lkICpjX25leHQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKK3sKKwlzdHJ1Y3QgY29uc29sZSAqY29uID0gdjsKKwkrKypwb3M7CisJcmV0dXJuIGNvbi0+bmV4dDsKK30KKworc3RhdGljIHZvaWQgY19zdG9wKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKK3sKKwlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgY29uc29sZXNfb3AgPSB7CisJLnN0YXJ0CT0gY19zdGFydCwKKwkubmV4dAk9IGNfbmV4dCwKKwkuc3RvcAk9IGNfc3RvcCwKKwkuc2hvdwk9IHNob3dfY29uc29sZV9kZXYKK307CisKK3N0YXRpYyBpbnQgY29uc29sZXNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2VxX29wZW4oZmlsZSwgJmNvbnNvbGVzX29wKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19jb25zb2xlc19vcGVyYXRpb25zID0geworCS5vcGVuCQk9IGNvbnNvbGVzX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzZXFfcmVsZWFzZSwKK307CisKK3N0YXRpYyBpbnQgcmVnaXN0ZXJfcHJvY19jb25zb2xlcyh2b2lkKQoreworCXByb2NfY3JlYXRlKCJjb25zb2xlcyIsIDAsIE5VTEwsICZwcm9jX2NvbnNvbGVzX29wZXJhdGlvbnMpOworCXJldHVybiAwOworfQorbW9kdWxlX2luaXQocmVnaXN0ZXJfcHJvY19jb25zb2xlcyk7CmRpZmYgLS1naXQgYS9mcy9wcm9jL3Byb2Nfc3lzY3RsLmMgYi9mcy9wcm9jL3Byb2Nfc3lzY3RsLmMKaW5kZXggYjY1MmNiMC4uMDlhMWY5MiAxMDA2NDQKLS0tIGEvZnMvcHJvYy9wcm9jX3N5c2N0bC5jCisrKyBiL2ZzL3Byb2MvcHJvY19zeXNjdGwuYwpAQCAtNSw2ICs1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KKyNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgogI2luY2x1ZGUgImludGVybmFsLmgiCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgcHJvY19zeXNfZGVudHJ5X29wZXJhdGlvbnM7CkBAIC0xMjAsNyArMTIxLDcgQEAKIAkJZ290byBvdXQ7CiAKIAllcnIgPSBOVUxMOwotCWRlbnRyeS0+ZF9vcCA9ICZwcm9jX3N5c19kZW50cnlfb3BlcmF0aW9uczsKKwlkX3NldF9kX29wKGRlbnRyeSwgJnByb2Nfc3lzX2RlbnRyeV9vcGVyYXRpb25zKTsKIAlkX2FkZChkZW50cnksIGlub2RlKTsKIAogb3V0OgpAQCAtMjAxLDcgKzIwMiw3IEBACiAJCQkJZHB1dChjaGlsZCk7CiAJCQkJcmV0dXJuIC1FTk9NRU07CiAJCQl9IGVsc2UgewotCQkJCWNoaWxkLT5kX29wID0gJnByb2Nfc3lzX2RlbnRyeV9vcGVyYXRpb25zOworCQkJCWRfc2V0X2Rfb3AoY2hpbGQsICZwcm9jX3N5c19kZW50cnlfb3BlcmF0aW9ucyk7CiAJCQkJZF9hZGQoY2hpbGQsIGlub2RlKTsKIAkJCX0KIAkJfSBlbHNlIHsKQEAgLTI5NCw3ICsyOTUsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgcHJvY19zeXNfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaykKK3N0YXRpYyBpbnQgcHJvY19zeXNfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzayx1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CiAJLyoKIAkgKiBzeXNjdGwgZW50cmllcyB0aGF0IGFyZSBub3Qgd3JpdGVhYmxlLApAQCAtMzA0LDYgKzMwNSw5IEBACiAJc3RydWN0IGN0bF90YWJsZSAqdGFibGU7CiAJaW50IGVycm9yOwogCisJaWYgKGZsYWdzICYgSVBFUk1fRkxBR19SQ1UpCisJCXJldHVybiAtRUNISUxEOworCiAJLyogRXhlY3V0YWJsZSBmaWxlcyBhcmUgbm90IGFsbG93ZWQgdW5kZXIgL3Byb2Mvc3lzLyAqLwogCWlmICgobWFzayAmIE1BWV9FWEVDKSAmJiBTX0lTUkVHKGlub2RlLT5pX21vZGUpKQogCQlyZXR1cm4gLUVBQ0NFUzsKQEAgLTM4OSwyMyArMzkzLDMwIEBACiAKIHN0YXRpYyBpbnQgcHJvY19zeXNfcmV2YWxpZGF0ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBuYW1laWRhdGEgKm5kKQogeworCWlmIChuZC0+ZmxhZ3MgJiBMT09LVVBfUkNVKQorCQlyZXR1cm4gLUVDSElMRDsKIAlyZXR1cm4gIVBST0NfSShkZW50cnktPmRfaW5vZGUpLT5zeXNjdGwtPnVucmVnaXN0ZXJpbmc7CiB9CiAKLXN0YXRpYyBpbnQgcHJvY19zeXNfZGVsZXRlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3N0YXRpYyBpbnQgcHJvY19zeXNfZGVsZXRlKGNvbnN0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIHsKIAlyZXR1cm4gISFQUk9DX0koZGVudHJ5LT5kX2lub2RlKS0+c3lzY3RsLT51bnJlZ2lzdGVyaW5nOwogfQogCi1zdGF0aWMgaW50IHByb2Nfc3lzX2NvbXBhcmUoc3RydWN0IGRlbnRyeSAqZGlyLCBzdHJ1Y3QgcXN0ciAqcXN0ciwKLQkJCSAgICBzdHJ1Y3QgcXN0ciAqbmFtZSkKK3N0YXRpYyBpbnQgcHJvY19zeXNfY29tcGFyZShjb25zdCBzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsCisJCWNvbnN0IHN0cnVjdCBpbm9kZSAqcGlub2RlLAorCQljb25zdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCXVuc2lnbmVkIGludCBsZW4sIGNvbnN0IGNoYXIgKnN0ciwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpCiB7Ci0Jc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gY29udGFpbmVyX29mKHFzdHIsIHN0cnVjdCBkZW50cnksIGRfbmFtZSk7Ci0JaWYgKHFzdHItPmxlbiAhPSBuYW1lLT5sZW4pCisJLyogQWx0aG91Z2ggcHJvYyBkb2Vzbid0IGhhdmUgbmVnYXRpdmUgZGVudHJpZXMsIHJjdS13YWxrIG1lYW5zCisJICogdGhhdCBpbm9kZSBoZXJlIGNhbiBiZSBOVUxMICovCisJaWYgKCFpbm9kZSkKKwkJcmV0dXJuIDA7CisJaWYgKG5hbWUtPmxlbiAhPSBsZW4pCiAJCXJldHVybiAxOwotCWlmIChtZW1jbXAocXN0ci0+bmFtZSwgbmFtZS0+bmFtZSwgbmFtZS0+bGVuKSkKKwlpZiAobWVtY21wKG5hbWUtPm5hbWUsIHN0ciwgbGVuKSkKIAkJcmV0dXJuIDE7Ci0JcmV0dXJuICFzeXNjdGxfaXNfc2VlbihQUk9DX0koZGVudHJ5LT5kX2lub2RlKS0+c3lzY3RsKTsKKwlyZXR1cm4gIXN5c2N0bF9pc19zZWVuKFBST0NfSShpbm9kZSktPnN5c2N0bCk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgcHJvY19zeXNfZGVudHJ5X29wZXJhdGlvbnMgPSB7CmRpZmYgLS1naXQgYS9mcy9wcm9jL3ZtY29yZS5jIGIvZnMvcHJvYy92bWNvcmUuYwppbmRleCAyMzY3ZmIzLi43NDgwMmJjNSAxMDA2NDQKLS0tIGEvZnMvcHJvYy92bWNvcmUuYworKysgYi9mcy9wcm9jL3ZtY29yZS5jCkBAIC00OTksNyArNDk5LDcgQEAKIAkvKiBEbyBzb21lIGJhc2ljIFZlcmlmaWNhdGlvbi4gKi8KIAlpZiAobWVtY21wKGVoZHIuZV9pZGVudCwgRUxGTUFHLCBTRUxGTUFHKSAhPSAwIHx8CiAJCShlaGRyLmVfdHlwZSAhPSBFVF9DT1JFKSB8fAotCQkhdm1jb3JlX2VsZl9jaGVja19hcmNoKCZlaGRyKSB8fAorCQkhdm1jb3JlX2VsZjY0X2NoZWNrX2FyY2goJmVoZHIpIHx8CiAJCWVoZHIuZV9pZGVudFtFSV9DTEFTU10gIT0gRUxGQ0xBU1M2NCB8fAogCQllaGRyLmVfaWRlbnRbRUlfVkVSU0lPTl0gIT0gRVZfQ1VSUkVOVCB8fAogCQllaGRyLmVfdmVyc2lvbiAhPSBFVl9DVVJSRU5UIHx8CmRpZmYgLS1naXQgYS9mcy9xbng0L2lub2RlLmMgYi9mcy9xbng0L2lub2RlLmMKaW5kZXggZmNhZGE0Mi4uZTYzYjQxNyAxMDA2NDQKLS0tIGEvZnMvcW54NC9pbm9kZS5jCisrKyBiL2ZzL3FueDQvaW5vZGUuYwpAQCAtNDI1LDkgKzQyNSwxNiBAQAogCXJldHVybiAmZWktPnZmc19pbm9kZTsKIH0KIAorc3RhdGljIHZvaWQgcW54NF9pX2NhbGxiYWNrKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBpbm9kZSwgaV9yY3UpOworCUlOSVRfTElTVF9IRUFEKCZpbm9kZS0+aV9kZW50cnkpOworCWttZW1fY2FjaGVfZnJlZShxbng0X2lub2RlX2NhY2hlcCwgcW54NF9pKGlub2RlKSk7Cit9CisKIHN0YXRpYyB2b2lkIHFueDRfZGVzdHJveV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewotCWttZW1fY2FjaGVfZnJlZShxbng0X2lub2RlX2NhY2hlcCwgcW54NF9pKGlub2RlKSk7CisJY2FsbF9yY3UoJmlub2RlLT5pX3JjdSwgcW54NF9pX2NhbGxiYWNrKTsKIH0KIAogc3RhdGljIHZvaWQgaW5pdF9vbmNlKHZvaWQgKmZvbykKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3N1cGVyLmMgYi9mcy9yZWlzZXJmcy9zdXBlci5jCmluZGV4IGIyNDMxMTcuLjI1NzU2ODIgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL3N1cGVyLmMKKysrIGIvZnMvcmVpc2VyZnMvc3VwZXIuYwpAQCAtNTI5LDkgKzUyOSwxNiBAQAogCXJldHVybiAmZWktPnZmc19pbm9kZTsKIH0KIAorc3RhdGljIHZvaWQgcmVpc2VyZnNfaV9jYWxsYmFjayhzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgaW5vZGUsIGlfcmN1KTsKKwlJTklUX0xJU1RfSEVBRCgmaW5vZGUtPmlfZGVudHJ5KTsKKwlrbWVtX2NhY2hlX2ZyZWUocmVpc2VyZnNfaW5vZGVfY2FjaGVwLCBSRUlTRVJGU19JKGlub2RlKSk7Cit9CisKIHN0YXRpYyB2b2lkIHJlaXNlcmZzX2Rlc3Ryb3lfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIHsKLQlrbWVtX2NhY2hlX2ZyZWUocmVpc2VyZnNfaW5vZGVfY2FjaGVwLCBSRUlTRVJGU19JKGlub2RlKSk7CisJY2FsbF9yY3UoJmlub2RlLT5pX3JjdSwgcmVpc2VyZnNfaV9jYWxsYmFjayk7CiB9CiAKIHN0YXRpYyB2b2lkIGluaXRfb25jZSh2b2lkICpmb28pCmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy94YXR0ci5jIGIvZnMvcmVpc2VyZnMveGF0dHIuYwppbmRleCA1ZDA0YTc4Li4zY2ZiMmU5IDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy94YXR0ci5jCisrKyBiL2ZzL3JlaXNlcmZzL3hhdHRyLmMKQEAgLTg3MCwxMSArODcwLDE0IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCByZWlzZXJmc19jaGVja19hY2woc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spCitzdGF0aWMgaW50IHJlaXNlcmZzX2NoZWNrX2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaywgdW5zaWduZWQgaW50IGZsYWdzKQogewogCXN0cnVjdCBwb3NpeF9hY2wgKmFjbDsKIAlpbnQgZXJyb3IgPSAtRUFHQUlOOyAvKiBkbyByZWd1bGFyIHVuaXggcGVybWlzc2lvbiBjaGVja3MgYnkgZGVmYXVsdCAqLwogCisJaWYgKGZsYWdzICYgSVBFUk1fRkxBR19SQ1UpCisJCXJldHVybiAtRUNISUxEOworCiAJYWNsID0gcmVpc2VyZnNfZ2V0X2FjbChpbm9kZSwgQUNMX1RZUEVfQUNDRVNTKTsKIAogCWlmIChhY2wpIHsKQEAgLTk1MSw4ICs5NTQsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IHJlaXNlcmZzX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spCitpbnQgcmVpc2VyZnNfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaywgdW5zaWduZWQgaW50IGZsYWdzKQogeworCWlmIChmbGFncyAmIElQRVJNX0ZMQUdfUkNVKQorCQlyZXR1cm4gLUVDSElMRDsKIAkvKgogCSAqIFdlIGRvbid0IGRvIHBlcm1pc3Npb24gY2hlY2tzIG9uIHRoZSBpbnRlcm5hbCBvYmplY3RzLgogCSAqIFBlcm1pc3Npb25zIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSAib3duaW5nIiBvYmplY3QuCkBAIC05NjUsMTMgKzk3MCwxNiBAQAogCSAqIFN0YXQgZGF0YSB2MSBkb2Vzbid0IHN1cHBvcnQgQUNMcy4KIAkgKi8KIAlpZiAoZ2V0X2lub2RlX3NkX3ZlcnNpb24oaW5vZGUpICE9IFNUQVRfREFUQV9WMSkKLQkJcmV0dXJuIGdlbmVyaWNfcGVybWlzc2lvbihpbm9kZSwgbWFzaywgcmVpc2VyZnNfY2hlY2tfYWNsKTsKKwkJcmV0dXJuIGdlbmVyaWNfcGVybWlzc2lvbihpbm9kZSwgbWFzaywgZmxhZ3MsCisJCQkJCXJlaXNlcmZzX2NoZWNrX2FjbCk7CiAjZW5kaWYKLQlyZXR1cm4gZ2VuZXJpY19wZXJtaXNzaW9uKGlub2RlLCBtYXNrLCBOVUxMKTsKKwlyZXR1cm4gZ2VuZXJpY19wZXJtaXNzaW9uKGlub2RlLCBtYXNrLCBmbGFncywgTlVMTCk7CiB9CiAKIHN0YXRpYyBpbnQgeGF0dHJfaGlkZV9yZXZhbGlkYXRlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IG5hbWVpZGF0YSAqbmQpCiB7CisJaWYgKG5kLT5mbGFncyAmIExPT0tVUF9SQ1UpCisJCXJldHVybiAtRUNISUxEOwogCXJldHVybiAtRVBFUk07CiB9CiAKQEAgLTk5MCw3ICs5OTgsNyBAQAogCQkJCXN0cmxlbihQUklWUk9PVF9OQU1FKSk7CiAJaWYgKCFJU19FUlIoZGVudHJ5KSkgewogCQlSRUlTRVJGU19TQihzKS0+cHJpdl9yb290ID0gZGVudHJ5OwotCQlkZW50cnktPmRfb3AgPSAmeGF0dHJfbG9va3VwX3BvaXNvbl9vcHM7CisJCWRfc2V0X2Rfb3AoZGVudHJ5LCAmeGF0dHJfbG9va3VwX3BvaXNvbl9vcHMpOwogCQlpZiAoZGVudHJ5LT5kX2lub2RlKQogCQkJZGVudHJ5LT5kX2lub2RlLT5pX2ZsYWdzIHw9IFNfUFJJVkFURTsKIAl9IGVsc2UKZGlmZiAtLWdpdCBhL2ZzL3JvbWZzL3N1cGVyLmMgYi9mcy9yb21mcy9zdXBlci5jCmluZGV4IDY2NDdmOTAuLjIzMDVlMzEgMTAwNjQ0Ci0tLSBhL2ZzL3JvbWZzL3N1cGVyLmMKKysrIGIvZnMvcm9tZnMvc3VwZXIuYwpAQCAtNDAwLDkgKzQwMCwxNiBAQAogLyoKICAqIHJldHVybiBhIHNwZW50IGlub2RlIHRvIHRoZSBzbGFiIGNhY2hlCiAgKi8KK3N0YXRpYyB2b2lkIHJvbWZzX2lfY2FsbGJhY2soc3RydWN0IHJjdV9oZWFkICpoZWFkKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGlub2RlLCBpX3JjdSk7CisJSU5JVF9MSVNUX0hFQUQoJmlub2RlLT5pX2RlbnRyeSk7CisJa21lbV9jYWNoZV9mcmVlKHJvbWZzX2lub2RlX2NhY2hlcCwgUk9NRlNfSShpbm9kZSkpOworfQorCiBzdGF0aWMgdm9pZCByb21mc19kZXN0cm95X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7Ci0Ja21lbV9jYWNoZV9mcmVlKHJvbWZzX2lub2RlX2NhY2hlcCwgUk9NRlNfSShpbm9kZSkpOworCWNhbGxfcmN1KCZpbm9kZS0+aV9yY3UsIHJvbWZzX2lfY2FsbGJhY2spOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZnMvc3F1YXNoZnMvc3VwZXIuYyBiL2ZzL3NxdWFzaGZzL3N1cGVyLmMKaW5kZXggMjRkZTMwYi4uMjA3MDBiOSAxMDA2NDQKLS0tIGEvZnMvc3F1YXNoZnMvc3VwZXIuYworKysgYi9mcy9zcXVhc2hmcy9zdXBlci5jCkBAIC00NDAsOSArNDQwLDE2IEBACiB9CiAKIAorc3RhdGljIHZvaWQgc3F1YXNoZnNfaV9jYWxsYmFjayhzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgaW5vZGUsIGlfcmN1KTsKKwlJTklUX0xJU1RfSEVBRCgmaW5vZGUtPmlfZGVudHJ5KTsKKwlrbWVtX2NhY2hlX2ZyZWUoc3F1YXNoZnNfaW5vZGVfY2FjaGVwLCBzcXVhc2hmc19pKGlub2RlKSk7Cit9CisKIHN0YXRpYyB2b2lkIHNxdWFzaGZzX2Rlc3Ryb3lfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIHsKLQlrbWVtX2NhY2hlX2ZyZWUoc3F1YXNoZnNfaW5vZGVfY2FjaGVwLCBzcXVhc2hmc19pKGlub2RlKSk7CisJY2FsbF9yY3UoJmlub2RlLT5pX3JjdSwgc3F1YXNoZnNfaV9jYWxsYmFjayk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZnMvc3VwZXIuYyBiL2ZzL3N1cGVyLmMKaW5kZXggY2E2OTYxNS4uODIzZTA2MSAxMDA2NDQKLS0tIGEvZnMvc3VwZXIuYworKysgYi9mcy9zdXBlci5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgvaWRyLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9iYWNraW5nLWRldi5oPgorI2luY2x1ZGUgPGxpbnV4L3JjdWxpc3RfYmwuaD4KICNpbmNsdWRlICJpbnRlcm5hbC5oIgogCiAKQEAgLTcxLDcgKzcyLDcgQEAKIAkJSU5JVF9MSVNUX0hFQUQoJnMtPnNfZmlsZXMpOwogI2VuZGlmCiAJCUlOSVRfTElTVF9IRUFEKCZzLT5zX2luc3RhbmNlcyk7Ci0JCUlOSVRfSExJU1RfSEVBRCgmcy0+c19hbm9uKTsKKwkJSU5JVF9ITElTVF9CTF9IRUFEKCZzLT5zX2Fub24pOwogCQlJTklUX0xJU1RfSEVBRCgmcy0+c19pbm9kZXMpOwogCQlJTklUX0xJU1RfSEVBRCgmcy0+c19kZW50cnlfbHJ1KTsKIAkJaW5pdF9yd3NlbSgmcy0+c191bW91bnQpOwpAQCAtMTEzOSw3ICsxMTQwLDcgQEAKIAlyZXR1cm4gbW50OwogCiAgZXJyOgotCW1udHB1dChtbnQpOworCW1udHB1dF9sb25nKG1udCk7CiAJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvc3lzZnMvZGlyLmMgYi9mcy9zeXNmcy9kaXIuYwppbmRleCA3ZTU0YmFjLi5lYTkxMjBhIDEwMDY0NAotLS0gYS9mcy9zeXNmcy9kaXIuYworKysgYi9mcy9zeXNmcy9kaXIuYwpAQCAtMjMxLDcgKzIzMSw3IEBACiAJCWdvdG8gcmVwZWF0OwogfQogCi1zdGF0aWMgaW50IHN5c2ZzX2RlbnRyeV9kZWxldGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQorc3RhdGljIGludCBzeXNmc19kZW50cnlfZGVsZXRlKGNvbnN0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIHsKIAlzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpzZCA9IGRlbnRyeS0+ZF9mc2RhdGE7CiAJcmV0dXJuICEhKHNkLT5zX2ZsYWdzICYgU1lTRlNfRkxBR19SRU1PVkVEKTsKQEAgLTIzOSw5ICsyMzksMTMgQEAKIAogc3RhdGljIGludCBzeXNmc19kZW50cnlfcmV2YWxpZGF0ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBuYW1laWRhdGEgKm5kKQogewotCXN0cnVjdCBzeXNmc19kaXJlbnQgKnNkID0gZGVudHJ5LT5kX2ZzZGF0YTsKKwlzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpzZDsKIAlpbnQgaXNfZGlyOwogCisJaWYgKG5kLT5mbGFncyAmIExPT0tVUF9SQ1UpCisJCXJldHVybiAtRUNISUxEOworCisJc2QgPSBkZW50cnktPmRfZnNkYXRhOwogCW11dGV4X2xvY2soJnN5c2ZzX211dGV4KTsKIAogCS8qIFRoZSBzeXNmcyBkaXJlbnQgaGFzIGJlZW4gZGVsZXRlZCAqLwpAQCAtNzAxLDcgKzcwNSw3IEBACiAJLyogaW5zdGFudGlhdGUgYW5kIGhhc2ggZGVudHJ5ICovCiAJcmV0ID0gZF9maW5kX2FsaWFzKGlub2RlKTsKIAlpZiAoIXJldCkgewotCQlkZW50cnktPmRfb3AgPSAmc3lzZnNfZGVudHJ5X29wczsKKwkJZF9zZXRfZF9vcChkZW50cnksICZzeXNmc19kZW50cnlfb3BzKTsKIAkJZGVudHJ5LT5kX2ZzZGF0YSA9IHN5c2ZzX2dldChzZCk7CiAJCWRfYWRkKGRlbnRyeSwgaW5vZGUpOwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9mcy9zeXNmcy9pbm9kZS5jIGIvZnMvc3lzZnMvaW5vZGUuYwppbmRleCBjZmZiMWZkLi4zMGFjMjczIDEwMDY0NAotLS0gYS9mcy9zeXNmcy9pbm9kZS5jCisrKyBiL2ZzL3N5c2ZzL2lub2RlLmMKQEAgLTM0OCwxMyArMzQ4LDE4IEBACiAJCXJldHVybiAtRU5PRU5UOwogfQogCi1pbnQgc3lzZnNfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaykKK2ludCBzeXNmc19wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7Ci0Jc3RydWN0IHN5c2ZzX2RpcmVudCAqc2QgPSBpbm9kZS0+aV9wcml2YXRlOworCXN0cnVjdCBzeXNmc19kaXJlbnQgKnNkOworCisJaWYgKGZsYWdzICYgSVBFUk1fRkxBR19SQ1UpCisJCXJldHVybiAtRUNISUxEOworCisJc2QgPSBpbm9kZS0+aV9wcml2YXRlOwogCiAJbXV0ZXhfbG9jaygmc3lzZnNfbXV0ZXgpOwogCXN5c2ZzX3JlZnJlc2hfaW5vZGUoc2QsIGlub2RlKTsKIAltdXRleF91bmxvY2soJnN5c2ZzX211dGV4KTsKIAotCXJldHVybiBnZW5lcmljX3Blcm1pc3Npb24oaW5vZGUsIG1hc2ssIE5VTEwpOworCXJldHVybiBnZW5lcmljX3Blcm1pc3Npb24oaW5vZGUsIG1hc2ssIGZsYWdzLCBOVUxMKTsKIH0KZGlmZiAtLWdpdCBhL2ZzL3N5c2ZzL3N5c2ZzLmggYi9mcy9zeXNmcy9zeXNmcy5oCmluZGV4IGQ5YmU2MGEuLmZmYWFhODEgMTAwNjQ0Ci0tLSBhL2ZzL3N5c2ZzL3N5c2ZzLmgKKysrIGIvZnMvc3lzZnMvc3lzZnMuaApAQCAtMjAwLDcgKzIwMCw3IEBACiBzdHJ1Y3QgaW5vZGUgKnN5c2ZzX2dldF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpzZCk7CiB2b2lkIHN5c2ZzX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogaW50IHN5c2ZzX3NkX3NldGF0dHIoc3RydWN0IHN5c2ZzX2RpcmVudCAqc2QsIHN0cnVjdCBpYXR0ciAqaWF0dHIpOwotaW50IHN5c2ZzX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spOworaW50IHN5c2ZzX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2ssIHVuc2lnbmVkIGludCBmbGFncyk7CiBpbnQgc3lzZnNfc2V0YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpYXR0ciAqaWF0dHIpOwogaW50IHN5c2ZzX2dldGF0dHIoc3RydWN0IHZmc21vdW50ICptbnQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ICpzdGF0KTsKIGludCBzeXNmc19zZXR4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQgKnZhbHVlLApkaWZmIC0tZ2l0IGEvZnMvc3lzdi9pbm9kZS5jIGIvZnMvc3lzdi9pbm9kZS5jCmluZGV4IGRlNDRkMDYuLjA2MzBlYjkgMTAwNjQ0Ci0tLSBhL2ZzL3N5c3YvaW5vZGUuYworKysgYi9mcy9zeXN2L2lub2RlLmMKQEAgLTMzMyw5ICszMzMsMTYgQEAKIAlyZXR1cm4gJnNpLT52ZnNfaW5vZGU7CiB9CiAKK3N0YXRpYyB2b2lkIHN5c3ZfaV9jYWxsYmFjayhzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgaW5vZGUsIGlfcmN1KTsKKwlJTklUX0xJU1RfSEVBRCgmaW5vZGUtPmlfZGVudHJ5KTsKKwlrbWVtX2NhY2hlX2ZyZWUoc3lzdl9pbm9kZV9jYWNoZXAsIFNZU1ZfSShpbm9kZSkpOworfQorCiBzdGF0aWMgdm9pZCBzeXN2X2Rlc3Ryb3lfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIHsKLQlrbWVtX2NhY2hlX2ZyZWUoc3lzdl9pbm9kZV9jYWNoZXAsIFNZU1ZfSShpbm9kZSkpOworCWNhbGxfcmN1KCZpbm9kZS0+aV9yY3UsIHN5c3ZfaV9jYWxsYmFjayk7CiB9CiAKIHN0YXRpYyB2b2lkIGluaXRfb25jZSh2b2lkICpwKQpkaWZmIC0tZ2l0IGEvZnMvc3lzdi9uYW1laS5jIGIvZnMvc3lzdi9uYW1laS5jCmluZGV4IDExZTdmN2QuLmI1ZTY4ZGEgMTAwNjQ0Ci0tLSBhL2ZzL3N5c3YvbmFtZWkuYworKysgYi9mcy9zeXN2L25hbWVpLmMKQEAgLTI3LDcgKzI3LDggQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IHN5c3ZfaGFzaChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBxc3RyICpxc3RyKQorc3RhdGljIGludCBzeXN2X2hhc2goY29uc3Qgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQlzdHJ1Y3QgcXN0ciAqcXN0cikKIHsKIAkvKiBUcnVuY2F0ZSB0aGUgbmFtZSBpbiBwbGFjZSwgYXZvaWRzIGhhdmluZyB0byBkZWZpbmUgYSBjb21wYXJlCiAJICAgZnVuY3Rpb24uICovCkBAIC00Nyw3ICs0OCw3IEBACiAJc3RydWN0IGlub2RlICogaW5vZGUgPSBOVUxMOwogCWlub190IGlubzsKIAotCWRlbnRyeS0+ZF9vcCA9IGRpci0+aV9zYi0+c19yb290LT5kX29wOworCWRfc2V0X2Rfb3AoZGVudHJ5LCBkaXItPmlfc2ItPnNfcm9vdC0+ZF9vcCk7CiAJaWYgKGRlbnRyeS0+ZF9uYW1lLmxlbiA+IFNZU1ZfTkFNRUxFTikKIAkJcmV0dXJuIEVSUl9QVFIoLUVOQU1FVE9PTE9ORyk7CiAJaW5vID0gc3lzdl9pbm9kZV9ieV9uYW1lKGRlbnRyeSk7CmRpZmYgLS1naXQgYS9mcy9zeXN2L3N1cGVyLmMgYi9mcy9zeXN2L3N1cGVyLmMKaW5kZXggM2Q5YzYyYi4uNzY3MTJhZSAxMDA2NDQKLS0tIGEvZnMvc3lzdi9zdXBlci5jCisrKyBiL2ZzL3N5c3Yvc3VwZXIuYwpAQCAtMzQ2LDcgKzM0Niw3IEBACiAJaWYgKHNiaS0+c19mb3JjZWRfcm8pCiAJCXNiLT5zX2ZsYWdzIHw9IE1TX1JET05MWTsKIAlpZiAoc2JpLT5zX3RydW5jYXRlKQotCQlzYi0+c19yb290LT5kX29wID0gJnN5c3ZfZGVudHJ5X29wZXJhdGlvbnM7CisJCWRfc2V0X2Rfb3Aoc2ItPnNfcm9vdCwgJnN5c3ZfZGVudHJ5X29wZXJhdGlvbnMpOwogCXJldHVybiAxOwogfQogCmRpZmYgLS1naXQgYS9mcy91Ymlmcy9zdXBlci5jIGIvZnMvdWJpZnMvc3VwZXIuYwppbmRleCA5MWZhYzU0Li42ZTExYzI5IDEwMDY0NAotLS0gYS9mcy91Ymlmcy9zdXBlci5jCisrKyBiL2ZzL3ViaWZzL3N1cGVyLmMKQEAgLTI3MiwxMiArMjcyLDIwIEBACiAJcmV0dXJuICZ1aS0+dmZzX2lub2RlOwogfTsKIAorc3RhdGljIHZvaWQgdWJpZnNfaV9jYWxsYmFjayhzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgaW5vZGUsIGlfcmN1KTsKKwlzdHJ1Y3QgdWJpZnNfaW5vZGUgKnVpID0gdWJpZnNfaW5vZGUoaW5vZGUpOworCUlOSVRfTElTVF9IRUFEKCZpbm9kZS0+aV9kZW50cnkpOworCWttZW1fY2FjaGVfZnJlZSh1Ymlmc19pbm9kZV9zbGFiLCB1aSk7Cit9CisKIHN0YXRpYyB2b2lkIHViaWZzX2Rlc3Ryb3lfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlzdHJ1Y3QgdWJpZnNfaW5vZGUgKnVpID0gdWJpZnNfaW5vZGUoaW5vZGUpOwogCiAJa2ZyZWUodWktPmRhdGEpOwotCWttZW1fY2FjaGVfZnJlZSh1Ymlmc19pbm9kZV9zbGFiLCBpbm9kZSk7CisJY2FsbF9yY3UoJmlub2RlLT5pX3JjdSwgdWJpZnNfaV9jYWxsYmFjayk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9mcy91ZGYvc3VwZXIuYyBiL2ZzL3VkZi9zdXBlci5jCmluZGV4IDRhNWM3YzYuLmI1MzlkNTMgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi9zdXBlci5jCisrKyBiL2ZzL3VkZi9zdXBlci5jCkBAIC0xMzksOSArMTM5LDE2IEBACiAJcmV0dXJuICZlaS0+dmZzX2lub2RlOwogfQogCitzdGF0aWMgdm9pZCB1ZGZfaV9jYWxsYmFjayhzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgaW5vZGUsIGlfcmN1KTsKKwlJTklUX0xJU1RfSEVBRCgmaW5vZGUtPmlfZGVudHJ5KTsKKwlrbWVtX2NhY2hlX2ZyZWUodWRmX2lub2RlX2NhY2hlcCwgVURGX0koaW5vZGUpKTsKK30KKwogc3RhdGljIHZvaWQgdWRmX2Rlc3Ryb3lfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIHsKLQlrbWVtX2NhY2hlX2ZyZWUodWRmX2lub2RlX2NhY2hlcCwgVURGX0koaW5vZGUpKTsKKwljYWxsX3JjdSgmaW5vZGUtPmlfcmN1LCB1ZGZfaV9jYWxsYmFjayk7CiB9CiAKIHN0YXRpYyB2b2lkIGluaXRfb25jZSh2b2lkICpmb28pCmRpZmYgLS1naXQgYS9mcy91ZnMvc3VwZXIuYyBiL2ZzL3Vmcy9zdXBlci5jCmluZGV4IDJjNDdkYWUuLjJjNjFhYzUgMTAwNjQ0Ci0tLSBhL2ZzL3Vmcy9zdXBlci5jCisrKyBiL2ZzL3Vmcy9zdXBlci5jCkBAIC0xNDEyLDkgKzE0MTIsMTYgQEAKIAlyZXR1cm4gJmVpLT52ZnNfaW5vZGU7CiB9CiAKK3N0YXRpYyB2b2lkIHVmc19pX2NhbGxiYWNrKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBpbm9kZSwgaV9yY3UpOworCUlOSVRfTElTVF9IRUFEKCZpbm9kZS0+aV9kZW50cnkpOworCWttZW1fY2FjaGVfZnJlZSh1ZnNfaW5vZGVfY2FjaGVwLCBVRlNfSShpbm9kZSkpOworfQorCiBzdGF0aWMgdm9pZCB1ZnNfZGVzdHJveV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewotCWttZW1fY2FjaGVfZnJlZSh1ZnNfaW5vZGVfY2FjaGVwLCBVRlNfSShpbm9kZSkpOworCWNhbGxfcmN1KCZpbm9kZS0+aV9yY3UsIHVmc19pX2NhbGxiYWNrKTsKIH0KIAogc3RhdGljIHZvaWQgaW5pdF9vbmNlKHZvaWQgKmZvbykKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2FjbC5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfYWNsLmMKaW5kZXggYjI3NzE4Ni4uMzlmNGY4MCAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfYWNsLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfYWNsLmMKQEAgLTIxOSwxMiArMjE5LDEzIEBACiB9CiAKIGludAoteGZzX2NoZWNrX2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaykKK3hmc19jaGVja19hY2woc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2ssIHVuc2lnbmVkIGludCBmbGFncykKIHsKLQlzdHJ1Y3QgeGZzX2lub2RlICppcCA9IFhGU19JKGlub2RlKTsKKwlzdHJ1Y3QgeGZzX2lub2RlICppcDsKIAlzdHJ1Y3QgcG9zaXhfYWNsICphY2w7CiAJaW50IGVycm9yID0gLUVBR0FJTjsKIAorCWlwID0gWEZTX0koaW5vZGUpOwogCXRyYWNlX3hmc19jaGVja19hY2woaXApOwogCiAJLyoKQEAgLTIzNCw2ICsyMzUsMTIgQEAKIAlpZiAoIVhGU19JRk9SS19RKGlwKSkKIAkJcmV0dXJuIC1FQUdBSU47CiAKKwlpZiAoZmxhZ3MgJiBJUEVSTV9GTEFHX1JDVSkgeworCQlpZiAoIW5lZ2F0aXZlX2NhY2hlZF9hY2woaW5vZGUsIEFDTF9UWVBFX0FDQ0VTUykpCisJCQlyZXR1cm4gLUVDSElMRDsKKwkJcmV0dXJuIC1FQUdBSU47CisJfQorCiAJYWNsID0geGZzX2dldF9hY2woaW5vZGUsIEFDTF9UWVBFX0FDQ0VTUyk7CiAJaWYgKElTX0VSUihhY2wpKQogCQlyZXR1cm4gUFRSX0VSUihhY2wpOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19hY2wuaCBiL2ZzL3hmcy94ZnNfYWNsLmgKaW5kZXggMDEzNWUyYS4uMTFkZDcyMCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19hY2wuaAorKysgYi9mcy94ZnMveGZzX2FjbC5oCkBAIC00Miw3ICs0Miw3IEBACiAjZGVmaW5lIFNHSV9BQ0xfREVGQVVMVF9TSVpFCShzaXplb2YoU0dJX0FDTF9ERUZBVUxUKS0xKQogCiAjaWZkZWYgQ09ORklHX1hGU19QT1NJWF9BQ0wKLWV4dGVybiBpbnQgeGZzX2NoZWNrX2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzayk7CitleHRlcm4gaW50IHhmc19jaGVja19hY2woc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2ssIHVuc2lnbmVkIGludCBmbGFncyk7CiBleHRlcm4gc3RydWN0IHBvc2l4X2FjbCAqeGZzX2dldF9hY2woc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUpOwogZXh0ZXJuIGludCB4ZnNfaW5oZXJpdF9hY2woc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHBvc2l4X2FjbCAqZGVmYXVsdF9hY2wpOwogZXh0ZXJuIGludCB4ZnNfYWNsX2NobW9kKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pZ2V0LmMgYi9mcy94ZnMveGZzX2lnZXQuYwppbmRleCAwY2RkMjY5Li5kN2RlNWEzIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2lnZXQuYworKysgYi9mcy94ZnMveGZzX2lnZXQuYwpAQCAtOTEsNiArOTEsMTcgQEAKIAlyZXR1cm4gaXA7CiB9CiAKK1NUQVRJQyB2b2lkCit4ZnNfaW5vZGVfZnJlZV9jYWxsYmFjaygKKwlzdHJ1Y3QgcmN1X2hlYWQJCSpoZWFkKQoreworCXN0cnVjdCBpbm9kZQkJKmlub2RlID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBpbm9kZSwgaV9yY3UpOworCXN0cnVjdCB4ZnNfaW5vZGUJKmlwID0gWEZTX0koaW5vZGUpOworCisJSU5JVF9MSVNUX0hFQUQoJmlub2RlLT5pX2RlbnRyeSk7CisJa21lbV96b25lX2ZyZWUoeGZzX2lub2RlX3pvbmUsIGlwKTsKK30KKwogdm9pZAogeGZzX2lub2RlX2ZyZWUoCiAJc3RydWN0IHhmc19pbm9kZQkqaXApCkBAIC0xMzQsNyArMTQ1LDcgQEAKIAlBU1NFUlQoIXNwaW5faXNfbG9ja2VkKCZpcC0+aV9mbGFnc19sb2NrKSk7CiAJQVNTRVJUKGNvbXBsZXRpb25fZG9uZSgmaXAtPmlfZmx1c2gpKTsKIAotCWttZW1fem9uZV9mcmVlKHhmc19pbm9kZV96b25lLCBpcCk7CisJY2FsbF9yY3UoJmlwLT5pX3Zub2RlLmlfcmN1LCB4ZnNfaW5vZGVfZnJlZV9jYWxsYmFjayk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX21ydV9jYWNoZS5jIGIvZnMveGZzL3hmc19tcnVfY2FjaGUuYwppbmRleCA0NWNlMTVkLi5lZGZhMTc4IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX21ydV9jYWNoZS5jCisrKyBiL2ZzL3hmcy94ZnNfbXJ1X2NhY2hlLmMKQEAgLTQwOCw3ICs0MDgsNyBAQAogCXNwaW5fbG9jaygmbXJ1LT5sb2NrKTsKIAlpZiAobXJ1LT5xdWV1ZWQpIHsKIAkJc3Bpbl91bmxvY2soJm1ydS0+bG9jayk7Ci0JCWNhbmNlbF9yZWFybWluZ19kZWxheWVkX3dvcmtxdWV1ZSh4ZnNfbXJ1X3JlYXBfd3EsICZtcnUtPndvcmspOworCQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJm1ydS0+d29yayk7CiAJCXNwaW5fbG9jaygmbXJ1LT5sb2NrKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvaW9jdGxzLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL2lvY3Rscy5oCmluZGV4IGEzMjE2NjUuLjNmM2YyZDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvaW9jdGxzLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9pb2N0bHMuaApAQCAtNjcsNiArNjcsNyBAQAogI2VuZGlmCiAjZGVmaW5lIFRJT0NHUFROCV9JT1IoJ1QnLCAweDMwLCB1bnNpZ25lZCBpbnQpIC8qIEdldCBQdHkgTnVtYmVyIChvZiBwdHktbXV4IGRldmljZSkgKi8KICNkZWZpbmUgVElPQ1NQVExDSwlfSU9XKCdUJywgMHgzMSwgaW50KSAgLyogTG9jay91bmxvY2sgUHR5ICovCisjZGVmaW5lIFRJT0NHREVWCV9JT1IoJ1QnLCAweDMyLCB1bnNpZ25lZCBpbnQpIC8qIEdldCBwcmltYXJ5IGRldmljZSBub2RlIG9mIC9kZXYvY29uc29sZSAqLwogI2RlZmluZSBUQ0dFVFgJCTB4NTQzMiAvKiBTWVM1IFRDR0VUWCBjb21wYXRpYmlsaXR5ICovCiAjZGVmaW5lIFRDU0VUWAkJMHg1NDMzCiAjZGVmaW5lIFRDU0VUWEYJCTB4NTQzNApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9pcnFfcmVncy5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9pcnFfcmVncy5oCmluZGV4IDVhZTFkMDcuLjZiZjkzNTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvaXJxX3JlZ3MuaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL2lycV9yZWdzLmgKQEAgLTIyLDE1ICsyMiwxNSBAQAogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBwdF9yZWdzICpnZXRfaXJxX3JlZ3Modm9pZCkKIHsKLQlyZXR1cm4gX19nZXRfY3B1X3ZhcihfX2lycV9yZWdzKTsKKwlyZXR1cm4gX190aGlzX2NwdV9yZWFkKF9faXJxX3JlZ3MpOwogfQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBwdF9yZWdzICpzZXRfaXJxX3JlZ3Moc3RydWN0IHB0X3JlZ3MgKm5ld19yZWdzKQogewotCXN0cnVjdCBwdF9yZWdzICpvbGRfcmVncywgKipwcF9yZWdzID0gJl9fZ2V0X2NwdV92YXIoX19pcnFfcmVncyk7CisJc3RydWN0IHB0X3JlZ3MgKm9sZF9yZWdzOwogCi0Jb2xkX3JlZ3MgPSAqcHBfcmVnczsKLQkqcHBfcmVncyA9IG5ld19yZWdzOworCW9sZF9yZWdzID0gX190aGlzX2NwdV9yZWFkKF9faXJxX3JlZ3MpOworCV9fdGhpc19jcHVfd3JpdGUoX19pcnFfcmVncywgbmV3X3JlZ3MpOwogCXJldHVybiBvbGRfcmVnczsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9LYnVpbGQgYi9pbmNsdWRlL2xpbnV4L0tidWlsZAppbmRleCA5NzMxOWE4Li5kMTU4MGMxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L0tidWlsZAorKysgYi9pbmNsdWRlL2xpbnV4L0tidWlsZApAQCAtMjAsMTUgKzIwLDE4IEBACiBvYmpoZHIteSArPSB2ZXJzaW9uLmgKIAogaWZuZXEgKCQod2lsZGNhcmQgJChzcmN0cmVlKS9hcmNoLyQoU1JDQVJDSCkvaW5jbHVkZS9hc20vYS5vdXQuaCBcCi0JCSAgJChzcmN0cmVlKS9pbmNsdWRlL2FzbS0kKFNSQ0FSQ0gpL2Eub3V0LmgpLCkKKwkJICAkKHNyY3RyZWUpL2luY2x1ZGUvYXNtLSQoU1JDQVJDSCkvYS5vdXQuaCBcCisJCSAgJChJTlNUQUxMX0hEUl9QQVRIKS9pbmNsdWRlL2FzbS0qL2Eub3V0LmgpLCkKIGhlYWRlci15ICs9IGEub3V0LmgKIGVuZGlmCiBpZm5lcSAoJCh3aWxkY2FyZCAkKHNyY3RyZWUpL2FyY2gvJChTUkNBUkNIKS9pbmNsdWRlL2FzbS9rdm0uaCBcCi0JCSAgJChzcmN0cmVlKS9pbmNsdWRlL2FzbS0kKFNSQ0FSQ0gpL2t2bS5oKSwpCisJCSAgJChzcmN0cmVlKS9pbmNsdWRlL2FzbS0kKFNSQ0FSQ0gpL2t2bS5oIFwKKwkJICAkKElOU1RBTExfSERSX1BBVEgpL2luY2x1ZGUvYXNtLSova3ZtLmgpLCkKIGhlYWRlci15ICs9IGt2bS5oCiBlbmRpZgogaWZuZXEgKCQod2lsZGNhcmQgJChzcmN0cmVlKS9hcmNoLyQoU1JDQVJDSCkvaW5jbHVkZS9hc20va3ZtX3BhcmEuaCBcCi0JCSAgJChzcmN0cmVlKS9pbmNsdWRlL2FzbS0kKFNSQ0FSQ0gpL2t2bV9wYXJhLmgpLCkKKwkJICAkKHNyY3RyZWUpL2luY2x1ZGUvYXNtLSQoU1JDQVJDSCkva3ZtX3BhcmEuaCBcCisJCSAgJChJTlNUQUxMX0hEUl9QQVRIKS9pbmNsdWRlL2FzbS0qL2t2bV9wYXJhLmgpLCkKIGhlYWRlci15ICs9IGt2bV9wYXJhLmgKIGVuZGlmCiAKQEAgLTM2Nyw3ICszNzAsNiBAQAogaGVhZGVyLXkgKz0gdXRzbmFtZS5oCiBoZWFkZXIteSArPSB2ZXRoLmgKIGhlYWRlci15ICs9IHZob3N0LmgKLWhlYWRlci15ICs9IHZpZGVvZGV2LmgKIGhlYWRlci15ICs9IHZpZGVvZGV2Mi5oCiBoZWFkZXIteSArPSB2aXJ0aW9fOXAuaAogaGVhZGVyLXkgKz0gdmlydGlvX2JhbGxvb24uaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hbWJhL2J1cy5oIGIvaW5jbHVkZS9saW51eC9hbWJhL2J1cy5oCmluZGV4IGM2NDU0Y2MuLjllN2YyNTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYW1iYS9idXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2FtYmEvYnVzLmgKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9yZXNvdXJjZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgogCiAjZGVmaW5lIEFNQkFfTlJfSVJRUwkyCiAjZGVmaW5lIEFNQkFfQ0lECTB4YjEwNWYwMGQKQEAgLTI4LDYgKzI5LDcgQEAKIAlzdHJ1Y3QgZGV2aWNlCQlkZXY7CiAJc3RydWN0IHJlc291cmNlCQlyZXM7CiAJc3RydWN0IGNsawkJKnBjbGs7CisJc3RydWN0IHJlZ3VsYXRvcgkqdmNvcmU7CiAJdTY0CQkJZG1hX21hc2s7CiAJdW5zaWduZWQgaW50CQlwZXJpcGhpZDsKIAl1bnNpZ25lZCBpbnQJCWlycVtBTUJBX05SX0lSUVNdOwpAQCAtNzEsNiArNzMsMTIgQEAKICNkZWZpbmUgYW1iYV9wY2xrX2Rpc2FibGUoZCkJXAogCWRvIHsgaWYgKCFJU19FUlIoKGQpLT5wY2xrKSkgY2xrX2Rpc2FibGUoKGQpLT5wY2xrKTsgfSB3aGlsZSAoMCkKIAorI2RlZmluZSBhbWJhX3Zjb3JlX2VuYWJsZShkKQlcCisJKElTX0VSUigoZCktPnZjb3JlKSA/IDAgOiByZWd1bGF0b3JfZW5hYmxlKChkKS0+dmNvcmUpKQorCisjZGVmaW5lIGFtYmFfdmNvcmVfZGlzYWJsZShkKQlcCisJZG8geyBpZiAoIUlTX0VSUigoZCktPnZjb3JlKSkgcmVndWxhdG9yX2Rpc2FibGUoKGQpLT52Y29yZSk7IH0gd2hpbGUgKDApCisKIC8qIFNvbWUgZHJpdmVycyBkb24ndCB1c2UgdGhlIHN0cnVjdCBhbWJhX2RldmljZSAqLwogI2RlZmluZSBBTUJBX0NPTkZJR19CSVRTKGEpICgoKGEpID4+IDI0KSAmIDB4ZmYpCiAjZGVmaW5lIEFNQkFfUkVWX0JJVFMoYSkgKCgoYSkgPj4gMjApICYgMHgwZikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYW1iYS9zZXJpYWwuaCBiL2luY2x1ZGUvbGludXgvYW1iYS9zZXJpYWwuaAppbmRleCA2MDIxNTg4Li41NDc5ZmRjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2FtYmEvc2VyaWFsLmgKKysrIGIvaW5jbHVkZS9saW51eC9hbWJhL3NlcmlhbC5oCkBAIC0xMTMsNiArMTEzLDIxIEBACiAjZGVmaW5lIFVBUlQwMXhfTENSSF9QRU4JMHgwMgogI2RlZmluZSBVQVJUMDF4X0xDUkhfQlJLCTB4MDEKIAorI2RlZmluZSBTVF9VQVJUMDExX0RNQVdNX1JYXzEJKDAgPDwgMykKKyNkZWZpbmUgU1RfVUFSVDAxMV9ETUFXTV9SWF8yCSgxIDw8IDMpCisjZGVmaW5lIFNUX1VBUlQwMTFfRE1BV01fUlhfNAkoMiA8PCAzKQorI2RlZmluZSBTVF9VQVJUMDExX0RNQVdNX1JYXzgJKDMgPDwgMykKKyNkZWZpbmUgU1RfVUFSVDAxMV9ETUFXTV9SWF8xNgkoNCA8PCAzKQorI2RlZmluZSBTVF9VQVJUMDExX0RNQVdNX1JYXzMyCSg1IDw8IDMpCisjZGVmaW5lIFNUX1VBUlQwMTFfRE1BV01fUlhfNDgJKDYgPDwgMykKKyNkZWZpbmUgU1RfVUFSVDAxMV9ETUFXTV9UWF8xCTAKKyNkZWZpbmUgU1RfVUFSVDAxMV9ETUFXTV9UWF8yCTEKKyNkZWZpbmUgU1RfVUFSVDAxMV9ETUFXTV9UWF80CTIKKyNkZWZpbmUgU1RfVUFSVDAxMV9ETUFXTV9UWF84CTMKKyNkZWZpbmUgU1RfVUFSVDAxMV9ETUFXTV9UWF8xNgk0CisjZGVmaW5lIFNUX1VBUlQwMTFfRE1BV01fVFhfMzIJNQorI2RlZmluZSBTVF9VQVJUMDExX0RNQVdNX1RYXzQ4CTYKKwogI2RlZmluZSBVQVJUMDEwX0lJUl9SVElTCTB4MDgKICNkZWZpbmUgVUFSVDAxMF9JSVJfVElTCQkweDA0CiAjZGVmaW5lIFVBUlQwMTBfSUlSX1JJUwkJMHgwMgpAQCAtMTgwLDYgKzE5NSwxMyBAQAogc3RydWN0IGFtYmFfcGwwMTBfZGF0YSB7CiAJdm9pZCAoKnNldF9tY3RybCkoc3RydWN0IGFtYmFfZGV2aWNlICpkZXYsIHZvaWQgX19pb21lbSAqYmFzZSwgdW5zaWduZWQgaW50IG1jdHJsKTsKIH07CisKK3N0cnVjdCBkbWFfY2hhbjsKK3N0cnVjdCBhbWJhX3BsMDExX2RhdGEgeworCWJvb2wgKCpkbWFfZmlsdGVyKShzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sIHZvaWQgKmZpbHRlcl9wYXJhbSk7CisJdm9pZCAqZG1hX3J4X3BhcmFtOworCXZvaWQgKmRtYV90eF9wYXJhbTsKK307CiAjZW5kaWYKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2F2ZXJhZ2UuaCBiL2luY2x1ZGUvbGludXgvYXZlcmFnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2MDI4ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2F2ZXJhZ2UuaApAQCAtMCwwICsxLDMwIEBACisjaWZuZGVmIF9MSU5VWF9BVkVSQUdFX0gKKyNkZWZpbmUgX0xJTlVYX0FWRVJBR0VfSAorCisvKiBFeHBvbmVudGlhbGx5IHdlaWdodGVkIG1vdmluZyBhdmVyYWdlIChFV01BKSAqLworCisvKiBGb3IgbW9yZSBkb2N1bWVudGF0aW9uIHNlZSBsaWIvYXZlcmFnZS5jICovCisKK3N0cnVjdCBld21hIHsKKwl1bnNpZ25lZCBsb25nIGludGVybmFsOworCXVuc2lnbmVkIGxvbmcgZmFjdG9yOworCXVuc2lnbmVkIGxvbmcgd2VpZ2h0OworfTsKKworZXh0ZXJuIHZvaWQgZXdtYV9pbml0KHN0cnVjdCBld21hICphdmcsIHVuc2lnbmVkIGxvbmcgZmFjdG9yLAorCQkgICAgICB1bnNpZ25lZCBsb25nIHdlaWdodCk7CisKK2V4dGVybiBzdHJ1Y3QgZXdtYSAqZXdtYV9hZGQoc3RydWN0IGV3bWEgKmF2ZywgdW5zaWduZWQgbG9uZyB2YWwpOworCisvKioKKyAqIGV3bWFfcmVhZCgpIC0gR2V0IGF2ZXJhZ2UgdmFsdWUKKyAqIEBhdmc6IEF2ZXJhZ2Ugc3RydWN0dXJlCisgKgorICogUmV0dXJucyB0aGUgYXZlcmFnZSB2YWx1ZSBoZWxkIGluIEBhdmcuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBld21hX3JlYWQoY29uc3Qgc3RydWN0IGV3bWEgKmF2ZykKK3sKKwlyZXR1cm4gYXZnLT5pbnRlcm5hbCA+PiBhdmctPmZhY3RvcjsKK30KKworI2VuZGlmIC8qIF9MSU5VWF9BVkVSQUdFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYml0X3NwaW5sb2NrLmggYi9pbmNsdWRlL2xpbnV4L2JpdF9zcGlubG9jay5oCmluZGV4IDcxMTNhMzIuLmU2MTI1NzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYml0X3NwaW5sb2NrLmgKKysrIGIvaW5jbHVkZS9saW51eC9iaXRfc3BpbmxvY2suaApAQCAtMSw2ICsxLDEwIEBACiAjaWZuZGVmIF9fTElOVVhfQklUX1NQSU5MT0NLX0gKICNkZWZpbmUgX19MSU5VWF9CSVRfU1BJTkxPQ0tfSAogCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcHJlZW1wdC5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKwogLyoKICAqICBiaXQtYmFzZWQgc3Bpbl9sb2NrKCkKICAqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JpdG9wcy5oIGIvaW5jbHVkZS9saW51eC9iaXRvcHMuaAppbmRleCA4MjdjYzk1Li4yMTg0YzZiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JpdG9wcy5oCisrKyBiL2luY2x1ZGUvbGludXgvYml0b3BzLmgKQEAgLTEwOSw2ICsxMDksMTcgQEAKIAlyZXR1cm4gKHdvcmQgPj4gc2hpZnQpIHwgKHdvcmQgPDwgKDggLSBzaGlmdCkpOwogfQogCisvKioKKyAqIHNpZ25fZXh0ZW5kMzIgLSBzaWduIGV4dGVuZCBhIDMyLWJpdCB2YWx1ZSB1c2luZyBzcGVjaWZpZWQgYml0IGFzIHNpZ24tYml0CisgKiBAdmFsdWU6IHZhbHVlIHRvIHNpZ24gZXh0ZW5kCisgKiBAaW5kZXg6IDAgYmFzZWQgYml0IGluZGV4ICgwPD1pbmRleDwzMikgdG8gc2lnbiBiaXQKKyAqLworc3RhdGljIGlubGluZSBfX3MzMiBzaWduX2V4dGVuZDMyKF9fdTMyIHZhbHVlLCBpbnQgaW5kZXgpCit7CisJX191OCBzaGlmdCA9IDMxIC0gaW5kZXg7CisJcmV0dXJuIChfX3MzMikodmFsdWUgPDwgc2hpZnQpID4+IHNoaWZ0OworfQorCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGZsc19sb25nKHVuc2lnbmVkIGxvbmcgbCkKIHsKIAlpZiAoc2l6ZW9mKGwpID09IDQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Nsa2Rldi5oIGIvaW5jbHVkZS9saW51eC9jbGtkZXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTdiY2IwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9jbGtkZXYuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogIGluY2x1ZGUvbGludXgvY2xrZGV2LmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IFJ1c3NlbGwgS2luZy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIEhlbHBlciBmb3IgdGhlIGNsayBBUEkgdG8gYXNzaXN0IGxvb2tpbmcgdXAgYSBzdHJ1Y3QgY2xrLgorICovCisjaWZuZGVmIF9fQ0xLREVWX0gKKyNkZWZpbmUgX19DTEtERVZfSAorCisjaW5jbHVkZSA8YXNtL2Nsa2Rldi5oPgorCitzdHJ1Y3QgY2xrOworc3RydWN0IGRldmljZTsKKworc3RydWN0IGNsa19sb29rdXAgeworCXN0cnVjdCBsaXN0X2hlYWQJbm9kZTsKKwljb25zdCBjaGFyCQkqZGV2X2lkOworCWNvbnN0IGNoYXIJCSpjb25faWQ7CisJc3RydWN0IGNsawkJKmNsazsKK307CisKK3N0cnVjdCBjbGtfbG9va3VwICpjbGtkZXZfYWxsb2Moc3RydWN0IGNsayAqY2xrLCBjb25zdCBjaGFyICpjb25faWQsCisJY29uc3QgY2hhciAqZGV2X2ZtdCwgLi4uKTsKKwordm9pZCBjbGtkZXZfYWRkKHN0cnVjdCBjbGtfbG9va3VwICpjbCk7Cit2b2lkIGNsa2Rldl9kcm9wKHN0cnVjdCBjbGtfbG9va3VwICpjbCk7CisKK3ZvaWQgY2xrZGV2X2FkZF90YWJsZShzdHJ1Y3QgY2xrX2xvb2t1cCAqLCBzaXplX3QpOworaW50IGNsa19hZGRfYWxpYXMoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNoYXIgKiwgc3RydWN0IGRldmljZSAqKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NvZGFfbGludXguaCBiL2luY2x1ZGUvbGludXgvY29kYV9saW51eC5oCmluZGV4IDJlOTE0ZDAuLjRjY2M1OWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY29kYV9saW51eC5oCisrKyBiL2luY2x1ZGUvbGludXgvY29kYV9saW51eC5oCkBAIC0zNyw3ICszNyw3IEBACiAvKiBvcGVyYXRpb25zIHNoYXJlZCBvdmVyIG1vcmUgdGhhbiBvbmUgZmlsZSAqLwogaW50IGNvZGFfb3BlbihzdHJ1Y3QgaW5vZGUgKmksIHN0cnVjdCBmaWxlICpmKTsKIGludCBjb2RhX3JlbGVhc2Uoc3RydWN0IGlub2RlICppLCBzdHJ1Y3QgZmlsZSAqZik7Ci1pbnQgY29kYV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKTsKK2ludCBjb2RhX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2ssIHVuc2lnbmVkIGludCBmbGFncyk7CiBpbnQgY29kYV9yZXZhbGlkYXRlX2lub2RlKHN0cnVjdCBkZW50cnkgKik7CiBpbnQgY29kYV9nZXRhdHRyKHN0cnVjdCB2ZnNtb3VudCAqLCBzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBrc3RhdCAqKTsKIGludCBjb2RhX3NldGF0dHIoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgaWF0dHIgKik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NvbXBsZXRpb24uaCBiL2luY2x1ZGUvbGludXgvY29tcGxldGlvbi5oCmluZGV4IDM2ZDU3Zjc0Li41MTQ5NGU2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NvbXBsZXRpb24uaAorKysgYi9pbmNsdWRlL2xpbnV4L2NvbXBsZXRpb24uaApAQCAtODEsMTAgKzgxLDEwIEBACiBleHRlcm4gaW50IHdhaXRfZm9yX2NvbXBsZXRpb25fa2lsbGFibGUoc3RydWN0IGNvbXBsZXRpb24gKngpOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KHN0cnVjdCBjb21wbGV0aW9uICp4LAogCQkJCQkJICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0KTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZV90aW1lb3V0KAotCQkJc3RydWN0IGNvbXBsZXRpb24gKngsIHVuc2lnbmVkIGxvbmcgdGltZW91dCk7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyB3YWl0X2Zvcl9jb21wbGV0aW9uX2tpbGxhYmxlX3RpbWVvdXQoCi0JCQlzdHJ1Y3QgY29tcGxldGlvbiAqeCwgdW5zaWduZWQgbG9uZyB0aW1lb3V0KTsKK2V4dGVybiBsb25nIHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZV90aW1lb3V0KAorCXN0cnVjdCBjb21wbGV0aW9uICp4LCB1bnNpZ25lZCBsb25nIHRpbWVvdXQpOworZXh0ZXJuIGxvbmcgd2FpdF9mb3JfY29tcGxldGlvbl9raWxsYWJsZV90aW1lb3V0KAorCXN0cnVjdCBjb21wbGV0aW9uICp4LCB1bnNpZ25lZCBsb25nIHRpbWVvdXQpOwogZXh0ZXJuIGJvb2wgdHJ5X3dhaXRfZm9yX2NvbXBsZXRpb24oc3RydWN0IGNvbXBsZXRpb24gKngpOwogZXh0ZXJuIGJvb2wgY29tcGxldGlvbl9kb25lKHN0cnVjdCBjb21wbGV0aW9uICp4KTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb25zb2xlLmggYi9pbmNsdWRlL2xpbnV4L2NvbnNvbGUuaAppbmRleCA5NWNmNmYwLi45Nzc0ZmU2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NvbnNvbGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NvbnNvbGUuaApAQCAtMTI2LDYgKzEyNiwxMiBAQAogCXN0cnVjdAkgY29uc29sZSAqbmV4dDsKIH07CiAKKy8qCisgKiBmb3JfZWFjaF9jb25zb2xlKCkgYWxsb3dzIHlvdSB0byBpdGVyYXRlIG9uIGVhY2ggY29uc29sZQorICovCisjZGVmaW5lIGZvcl9lYWNoX2NvbnNvbGUoY29uKSBcCisJZm9yIChjb24gPSBjb25zb2xlX2RyaXZlcnM7IGNvbiAhPSBOVUxMOyBjb24gPSBjb24tPm5leHQpCisKIGV4dGVybiBpbnQgY29uc29sZV9zZXRfb25fY21kbGluZTsKIAogZXh0ZXJuIGludCBhZGRfcHJlZmVycmVkX2NvbnNvbGUoY2hhciAqbmFtZSwgaW50IGlkeCwgY2hhciAqb3B0aW9ucyk7CkBAIC0xNDUsNyArMTUxLDcgQEAKIGV4dGVybiBpbnQgYnJhaWxsZV9yZWdpc3Rlcl9jb25zb2xlKHN0cnVjdCBjb25zb2xlICosIGludCBpbmRleCwKIAkJY2hhciAqY29uc29sZV9vcHRpb25zLCBjaGFyICpicmFpbGxlX29wdGlvbnMpOwogZXh0ZXJuIGludCBicmFpbGxlX3VucmVnaXN0ZXJfY29uc29sZShzdHJ1Y3QgY29uc29sZSAqKTsKLQorZXh0ZXJuIHZvaWQgY29uc29sZV9zeXNmc19ub3RpZnkodm9pZCk7CiBleHRlcm4gaW50IGNvbnNvbGVfc3VzcGVuZF9lbmFibGVkOwogCiAvKiBTdXNwZW5kIGFuZCByZXN1bWUgY29uc29sZSBtZXNzYWdlcyBvdmVyIFBNIGV2ZW50cyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jcmFzaF9kdW1wLmggYi9pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaAppbmRleCAwMDI2ZjI2Li4wODhjZDRhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaApAQCAtMjAsNyArMjAsMTQgQEAKICNkZWZpbmUgdm1jb3JlX2VsZl9jaGVja19hcmNoX2Nyb3NzKHgpIDAKICNlbmRpZgogCi0jZGVmaW5lIHZtY29yZV9lbGZfY2hlY2tfYXJjaCh4KSAoZWxmX2NoZWNrX2FyY2goeCkgfHwgdm1jb3JlX2VsZl9jaGVja19hcmNoX2Nyb3NzKHgpKQorLyoKKyAqIEFyY2hpdGVjdHVyZSBjb2RlIGNhbiByZWRlZmluZSB0aGlzIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lhbCBjaGVja3MKKyAqIG5lZWRlZCBmb3IgNjQtYml0IEVMRiB2bWNvcmVzLiBJbiBjYXNlIG9mIDMyLWJpdCBvbmx5IGFyY2hpdGVjdHVyZSwKKyAqIHRoaXMgY2FuIGJlIHNldCB0byB6ZXJvLgorICovCisjaWZuZGVmIHZtY29yZV9lbGY2NF9jaGVja19hcmNoCisjZGVmaW5lIHZtY29yZV9lbGY2NF9jaGVja19hcmNoKHgpIChlbGZfY2hlY2tfYXJjaCh4KSB8fCB2bWNvcmVfZWxmX2NoZWNrX2FyY2hfY3Jvc3MoeCkpCisjZW5kaWYKIAogLyoKICAqIGlzX2tkdW1wX2tlcm5lbCgpIGNoZWNrcyB3aGV0aGVyIHRoaXMga2VybmVsIGlzIGJvb3RpbmcgYWZ0ZXIgYSBwYW5pYyBvZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kY2FjaGUuaCBiL2luY2x1ZGUvbGludXgvZGNhY2hlLmgKaW5kZXggNmE0YWVhMy4uNTlmY2QyNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kY2FjaGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RjYWNoZS5oCkBAIC00LDcgKzQsOSBAQAogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvcmN1bGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3JjdWxpc3RfYmwuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcWxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgogI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+CiAKQEAgLTQ1LDYgKzQ3LDI3IEBACiB9OwogZXh0ZXJuIHN0cnVjdCBkZW50cnlfc3RhdF90IGRlbnRyeV9zdGF0OwogCisvKgorICogQ29tcGFyZSAyIG5hbWUgc3RyaW5ncywgcmV0dXJuIDAgaWYgdGhleSBtYXRjaCwgb3RoZXJ3aXNlIG5vbi16ZXJvLgorICogVGhlIHN0cmluZ3MgYXJlIGJvdGggY291bnQgYnl0ZXMgbG9uZywgYW5kIGNvdW50IGlzIG5vbi16ZXJvLgorICovCitzdGF0aWMgaW5saW5lIGludCBkZW50cnlfY21wKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNzLCBzaXplX3Qgc2NvdW50LAorCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCBzaXplX3QgdGNvdW50KQoreworCWludCByZXQ7CisJaWYgKHNjb3VudCAhPSB0Y291bnQpCisJCXJldHVybiAxOworCWRvIHsKKwkJcmV0ID0gKCpjcyAhPSAqY3QpOworCQlpZiAocmV0KQorCQkJYnJlYWs7CisJCWNzKys7CisJCWN0Kys7CisJCXRjb3VudC0tOworCX0gd2hpbGUgKHRjb3VudCk7CisJcmV0dXJuIHJldDsKK30KKwogLyogTmFtZSBoYXNoaW5nIHJvdXRpbmVzLiBJbml0aWFsIGhhc2ggdmFsdWUgKi8KIC8qIEhhc2ggY291cnRlc3kgb2YgdGhlIFI1IGhhc2ggaW4gcmVpc2VyZnMgbW9kdWxvIHNpZ24gYml0cyAqLwogI2RlZmluZSBpbml0X25hbWVfaGFzaCgpCQkwCkBAIC04MSwyNSArMTA0LDMzIEBACiAgKiBsYXJnZSBtZW1vcnkgZm9vdHByaW50IGluY3JlYXNlKS4KICAqLwogI2lmZGVmIENPTkZJR182NEJJVAotI2RlZmluZSBETkFNRV9JTkxJTkVfTEVOX01JTiAzMiAvKiAxOTIgYnl0ZXMgKi8KKyMgZGVmaW5lIEROQU1FX0lOTElORV9MRU4gMzIgLyogMTkyIGJ5dGVzICovCiAjZWxzZQotI2RlZmluZSBETkFNRV9JTkxJTkVfTEVOX01JTiA0MCAvKiAxMjggYnl0ZXMgKi8KKyMgaWZkZWYgQ09ORklHX1NNUAorIyAgZGVmaW5lIEROQU1FX0lOTElORV9MRU4gMzYgLyogMTI4IGJ5dGVzICovCisjIGVsc2UKKyMgIGRlZmluZSBETkFNRV9JTkxJTkVfTEVOIDQwIC8qIDEyOCBieXRlcyAqLworIyBlbmRpZgogI2VuZGlmCiAKIHN0cnVjdCBkZW50cnkgewotCWF0b21pY190IGRfY291bnQ7CisJLyogUkNVIGxvb2t1cCB0b3VjaGVkIGZpZWxkcyAqLwogCXVuc2lnbmVkIGludCBkX2ZsYWdzOwkJLyogcHJvdGVjdGVkIGJ5IGRfbG9jayAqLwotCXNwaW5sb2NrX3QgZF9sb2NrOwkJLyogcGVyIGRlbnRyeSBsb2NrICovCi0JaW50IGRfbW91bnRlZDsKLQlzdHJ1Y3QgaW5vZGUgKmRfaW5vZGU7CQkvKiBXaGVyZSB0aGUgbmFtZSBiZWxvbmdzIHRvIC0gTlVMTCBpcwotCQkJCQkgKiBuZWdhdGl2ZSAqLwotCS8qCi0JICogVGhlIG5leHQgdGhyZWUgZmllbGRzIGFyZSB0b3VjaGVkIGJ5IF9fZF9sb29rdXAuICBQbGFjZSB0aGVtIGhlcmUKLQkgKiBzbyB0aGV5IGFsbCBmaXQgaW4gYSBjYWNoZSBsaW5lLgotCSAqLwotCXN0cnVjdCBobGlzdF9ub2RlIGRfaGFzaDsJLyogbG9va3VwIGhhc2ggbGlzdCAqLworCXNlcWNvdW50X3QgZF9zZXE7CQkvKiBwZXIgZGVudHJ5IHNlcWxvY2sgKi8KKwlzdHJ1Y3QgaGxpc3RfYmxfbm9kZSBkX2hhc2g7CS8qIGxvb2t1cCBoYXNoIGxpc3QgKi8KIAlzdHJ1Y3QgZGVudHJ5ICpkX3BhcmVudDsJLyogcGFyZW50IGRpcmVjdG9yeSAqLwogCXN0cnVjdCBxc3RyIGRfbmFtZTsKKwlzdHJ1Y3QgaW5vZGUgKmRfaW5vZGU7CQkvKiBXaGVyZSB0aGUgbmFtZSBiZWxvbmdzIHRvIC0gTlVMTCBpcworCQkJCQkgKiBuZWdhdGl2ZSAqLworCXVuc2lnbmVkIGNoYXIgZF9pbmFtZVtETkFNRV9JTkxJTkVfTEVOXTsJLyogc21hbGwgbmFtZXMgKi8KKworCS8qIFJlZiBsb29rdXAgYWxzbyB0b3VjaGVzIGZvbGxvd2luZyAqLworCXVuc2lnbmVkIGludCBkX2NvdW50OwkJLyogcHJvdGVjdGVkIGJ5IGRfbG9jayAqLworCXNwaW5sb2NrX3QgZF9sb2NrOwkJLyogcGVyIGRlbnRyeSBsb2NrICovCisJY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zICpkX29wOworCXN0cnVjdCBzdXBlcl9ibG9jayAqZF9zYjsJLyogVGhlIHJvb3Qgb2YgdGhlIGRlbnRyeSB0cmVlICovCisJdW5zaWduZWQgbG9uZyBkX3RpbWU7CQkvKiB1c2VkIGJ5IGRfcmV2YWxpZGF0ZSAqLworCXZvaWQgKmRfZnNkYXRhOwkJCS8qIGZzLXNwZWNpZmljIGRhdGEgKi8KIAogCXN0cnVjdCBsaXN0X2hlYWQgZF9scnU7CQkvKiBMUlUgbGlzdCAqLwogCS8qCkBAIC0xMTEsMTIgKzE0Miw2IEBACiAJfSBkX3U7CiAJc3RydWN0IGxpc3RfaGVhZCBkX3N1YmRpcnM7CS8qIG91ciBjaGlsZHJlbiAqLwogCXN0cnVjdCBsaXN0X2hlYWQgZF9hbGlhczsJLyogaW5vZGUgYWxpYXMgbGlzdCAqLwotCXVuc2lnbmVkIGxvbmcgZF90aW1lOwkJLyogdXNlZCBieSBkX3JldmFsaWRhdGUgKi8KLQljb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgKmRfb3A7Ci0Jc3RydWN0IHN1cGVyX2Jsb2NrICpkX3NiOwkvKiBUaGUgcm9vdCBvZiB0aGUgZGVudHJ5IHRyZWUgKi8KLQl2b2lkICpkX2ZzZGF0YTsJCQkvKiBmcy1zcGVjaWZpYyBkYXRhICovCi0KLQl1bnNpZ25lZCBjaGFyIGRfaW5hbWVbRE5BTUVfSU5MSU5FX0xFTl9NSU5dOwkvKiBzbWFsbCBuYW1lcyAqLwogfTsKIAogLyoKQEAgLTEzMyw5NyArMTU4LDYyIEBACiAKIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyB7CiAJaW50ICgqZF9yZXZhbGlkYXRlKShzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBuYW1laWRhdGEgKik7Ci0JaW50ICgqZF9oYXNoKSAoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgcXN0ciAqKTsKLQlpbnQgKCpkX2NvbXBhcmUpIChzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBxc3RyICosIHN0cnVjdCBxc3RyICopOwotCWludCAoKmRfZGVsZXRlKShzdHJ1Y3QgZGVudHJ5ICopOworCWludCAoKmRfaGFzaCkoY29uc3Qgc3RydWN0IGRlbnRyeSAqLCBjb25zdCBzdHJ1Y3QgaW5vZGUgKiwKKwkJCXN0cnVjdCBxc3RyICopOworCWludCAoKmRfY29tcGFyZSkoY29uc3Qgc3RydWN0IGRlbnRyeSAqLCBjb25zdCBzdHJ1Y3QgaW5vZGUgKiwKKwkJCWNvbnN0IHN0cnVjdCBkZW50cnkgKiwgY29uc3Qgc3RydWN0IGlub2RlICosCisJCQl1bnNpZ25lZCBpbnQsIGNvbnN0IGNoYXIgKiwgY29uc3Qgc3RydWN0IHFzdHIgKik7CisJaW50ICgqZF9kZWxldGUpKGNvbnN0IHN0cnVjdCBkZW50cnkgKik7CiAJdm9pZCAoKmRfcmVsZWFzZSkoc3RydWN0IGRlbnRyeSAqKTsKIAl2b2lkICgqZF9pcHV0KShzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBpbm9kZSAqKTsKIAljaGFyICooKmRfZG5hbWUpKHN0cnVjdCBkZW50cnkgKiwgY2hhciAqLCBpbnQpOwotfTsKLQotLyogdGhlIGRlbnRyeSBwYXJhbWV0ZXIgcGFzc2VkIHRvIGRfaGFzaCBhbmQgZF9jb21wYXJlIGlzIHRoZSBwYXJlbnQKLSAqIGRpcmVjdG9yeSBvZiB0aGUgZW50cmllcyB0byBiZSBjb21wYXJlZC4gSXQgaXMgdXNlZCBpbiBjYXNlIHRoZXNlCi0gKiBmdW5jdGlvbnMgbmVlZCBhbnkgZGlyZWN0b3J5IHNwZWNpZmljIGluZm9ybWF0aW9uIGZvciBkZXRlcm1pbmluZwotICogZXF1aXZhbGVuY3kgY2xhc3Nlcy4gIFVzaW5nIHRoZSBkZW50cnkgaXRzZWxmIG1pZ2h0IG5vdCB3b3JrLCBhcyBpdAotICogbWlnaHQgYmUgYSBuZWdhdGl2ZSBkZW50cnkgd2hpY2ggaGFzIG5vIGluZm9ybWF0aW9uIGFzc29jaWF0ZWQgd2l0aAotICogaXQgKi8KK30gX19fX2NhY2hlbGluZV9hbGlnbmVkOwogCiAvKgotbG9ja2luZyBydWxlczoKLQkJYmlnIGxvY2sJZGNhY2hlX2xvY2sJZF9sb2NrICAgbWF5IGJsb2NrCi1kX3JldmFsaWRhdGU6CW5vCQlubwkJbm8gICAgICAgeWVzCi1kX2hhc2gJCW5vCQlubwkJbm8gICAgICAgeWVzCi1kX2NvbXBhcmU6CW5vCQl5ZXMJCXllcyAgICAgIG5vCi1kX2RlbGV0ZToJbm8JCXllcwkJbm8gICAgICAgbm8KLWRfcmVsZWFzZToJbm8JCW5vCQlubyAgICAgICB5ZXMKLWRfaXB1dDoJCW5vCQlubwkJbm8gICAgICAgeWVzCisgKiBMb2NraW5nIHJ1bGVzIGZvciBkZW50cnlfb3BlcmF0aW9ucyBjYWxsYmFja3MgYXJlIHRvIGJlIGZvdW5kIGluCisgKiBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL0xvY2tpbmcuIEtlZXAgaXQgdXBkYXRlZCEKKyAqCisgKiBGVXJ0aGVyIGRlc2NyaXB0aW9ucyBhcmUgZm91bmQgaW4gRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMudHh0LgorICogS2VlcCBpdCB1cGRhdGVkIHRvbyEKICAqLwogCiAvKiBkX2ZsYWdzIGVudHJpZXMgKi8KICNkZWZpbmUgRENBQ0hFX0FVVE9GU19QRU5ESU5HIDB4MDAwMSAgICAvKiBhdXRvZnM6ICJ1bmRlciBjb25zdHJ1Y3Rpb24iICovCi0jZGVmaW5lIERDQUNIRV9ORlNGU19SRU5BTUVEICAweDAwMDIgICAgLyogdGhpcyBkZW50cnkgaGFzIGJlZW4gInNpbGx5Ci0JCQkJCSAqIHJlbmFtZWQiIGFuZCBoYXMgdG8gYmUKLQkJCQkJICogZGVsZXRlZCBvbiB0aGUgbGFzdCBkcHV0KCkKLQkJCQkJICovCi0jZGVmaW5lCURDQUNIRV9ESVNDT05ORUNURUQgMHgwMDA0Ci0gICAgIC8qIFRoaXMgZGVudHJ5IGlzIHBvc3NpYmx5IG5vdCBjdXJyZW50bHkgY29ubmVjdGVkIHRvIHRoZSBkY2FjaGUgdHJlZSwKLSAgICAgICogaW4gd2hpY2ggY2FzZSBpdHMgcGFyZW50IHdpbGwgZWl0aGVyIGJlIGl0c2VsZiwgb3Igd2lsbCBoYXZlIHRoaXMKLSAgICAgICogZmxhZyBhcyB3ZWxsLiAgbmZzZCB3aWxsIG5vdCB1c2UgYSBkZW50cnkgd2l0aCB0aGlzIGJpdCBzZXQsIGJ1dCB3aWxsCi0gICAgICAqIGZpcnN0IGVuZGVhdm91ciB0byBjbGVhciB0aGUgYml0IGVpdGhlciBieSBkaXNjb3ZlcmluZyB0aGF0IGl0IGlzCi0gICAgICAqIGNvbm5lY3RlZCwgb3IgYnkgcGVyZm9ybWluZyBsb29rdXAgb3BlcmF0aW9ucy4gICBBbnkgZmlsZXN5c3RlbSB3aGljaAotICAgICAgKiBzdXBwb3J0cyBuZnNkX29wZXJhdGlvbnMgTVVTVCBoYXZlIGEgbG9va3VwIGZ1bmN0aW9uIHdoaWNoLCBpZiBpdCBmaW5kcwotICAgICAgKiBhIGRpcmVjdG9yeSBpbm9kZSB3aXRoIGEgRENBQ0hFX0RJU0NPTk5FQ1RFRCBkZW50cnksIHdpbGwgZF9tb3ZlCi0gICAgICAqIHRoYXQgZGVudHJ5IGludG8gcGxhY2UgYW5kIHJldHVybiB0aGF0IGRlbnRyeSByYXRoZXIgdGhhbiB0aGUgcGFzc2VkIG9uZSwKLSAgICAgICogdHlwaWNhbGx5IHVzaW5nIGRfc3BsaWNlX2FsaWFzLgotICAgICAgKi8KKyNkZWZpbmUgRENBQ0hFX05GU0ZTX1JFTkFNRUQgIDB4MDAwMgorICAgICAvKiB0aGlzIGRlbnRyeSBoYXMgYmVlbiAic2lsbHkgcmVuYW1lZCIgYW5kIGhhcyB0byBiZSBkZWxldGVkIG9uIHRoZSBsYXN0CisgICAgICAqIGRwdXQoKSAqLworCisjZGVmaW5lCURDQUNIRV9ESVNDT05ORUNURUQJMHgwMDA0CisgICAgIC8qIFRoaXMgZGVudHJ5IGlzIHBvc3NpYmx5IG5vdCBjdXJyZW50bHkgY29ubmVjdGVkIHRvIHRoZSBkY2FjaGUgdHJlZSwgaW4KKyAgICAgICogd2hpY2ggY2FzZSBpdHMgcGFyZW50IHdpbGwgZWl0aGVyIGJlIGl0c2VsZiwgb3Igd2lsbCBoYXZlIHRoaXMgZmxhZyBhcworICAgICAgKiB3ZWxsLiAgbmZzZCB3aWxsIG5vdCB1c2UgYSBkZW50cnkgd2l0aCB0aGlzIGJpdCBzZXQsIGJ1dCB3aWxsIGZpcnN0CisgICAgICAqIGVuZGVhdm91ciB0byBjbGVhciB0aGUgYml0IGVpdGhlciBieSBkaXNjb3ZlcmluZyB0aGF0IGl0IGlzIGNvbm5lY3RlZCwKKyAgICAgICogb3IgYnkgcGVyZm9ybWluZyBsb29rdXAgb3BlcmF0aW9ucy4gICBBbnkgZmlsZXN5c3RlbSB3aGljaCBzdXBwb3J0cworICAgICAgKiBuZnNkX29wZXJhdGlvbnMgTVVTVCBoYXZlIGEgbG9va3VwIGZ1bmN0aW9uIHdoaWNoLCBpZiBpdCBmaW5kcyBhCisgICAgICAqIGRpcmVjdG9yeSBpbm9kZSB3aXRoIGEgRENBQ0hFX0RJU0NPTk5FQ1RFRCBkZW50cnksIHdpbGwgZF9tb3ZlIHRoYXQKKyAgICAgICogZGVudHJ5IGludG8gcGxhY2UgYW5kIHJldHVybiB0aGF0IGRlbnRyeSByYXRoZXIgdGhhbiB0aGUgcGFzc2VkIG9uZSwKKyAgICAgICogdHlwaWNhbGx5IHVzaW5nIGRfc3BsaWNlX2FsaWFzLiAqLwogCiAjZGVmaW5lIERDQUNIRV9SRUZFUkVOQ0VECTB4MDAwOCAgLyogUmVjZW50bHkgdXNlZCwgZG9uJ3QgZGlzY2FyZC4gKi8KICNkZWZpbmUgRENBQ0hFX1VOSEFTSEVECQkweDAwMTAJCi0KLSNkZWZpbmUgRENBQ0hFX0lOT1RJRllfUEFSRU5UX1dBVENIRUQJMHgwMDIwIC8qIFBhcmVudCBpbm9kZSBpcyB3YXRjaGVkIGJ5IGlub3RpZnkgKi8KKyNkZWZpbmUgRENBQ0hFX0lOT1RJRllfUEFSRU5UX1dBVENIRUQgMHgwMDIwCisgICAgIC8qIFBhcmVudCBpbm9kZSBpcyB3YXRjaGVkIGJ5IGlub3RpZnkgKi8KIAogI2RlZmluZSBEQ0FDSEVfQ09PS0lFCQkweDAwNDAJLyogRm9yIHVzZSBieSBkY29va2llIHN1YnN5c3RlbSAqLwotCi0jZGVmaW5lIERDQUNIRV9GU05PVElGWV9QQVJFTlRfV0FUQ0hFRAkweDAwODAgLyogUGFyZW50IGlub2RlIGlzIHdhdGNoZWQgYnkgc29tZSBmc25vdGlmeSBsaXN0ZW5lciAqLworI2RlZmluZSBEQ0FDSEVfRlNOT1RJRllfUEFSRU5UX1dBVENIRUQgMHgwMDgwCisgICAgIC8qIFBhcmVudCBpbm9kZSBpcyB3YXRjaGVkIGJ5IHNvbWUgZnNub3RpZnkgbGlzdGVuZXIgKi8KIAogI2RlZmluZSBEQ0FDSEVfQ0FOVF9NT1VOVAkweDAxMDAKKyNkZWZpbmUgRENBQ0hFX0dFTk9DSURFCQkweDAyMDAKKyNkZWZpbmUgRENBQ0hFX01PVU5URUQJCTB4MDQwMAkvKiBpcyBhIG1vdW50cG9pbnQgKi8KIAotZXh0ZXJuIHNwaW5sb2NrX3QgZGNhY2hlX2xvY2s7CisjZGVmaW5lIERDQUNIRV9PUF9IQVNICQkweDEwMDAKKyNkZWZpbmUgRENBQ0hFX09QX0NPTVBBUkUJMHgyMDAwCisjZGVmaW5lIERDQUNIRV9PUF9SRVZBTElEQVRFCTB4NDAwMAorI2RlZmluZSBEQ0FDSEVfT1BfREVMRVRFCTB4ODAwMAorCiBleHRlcm4gc2VxbG9ja190IHJlbmFtZV9sb2NrOwogCi0vKioKLSAqIGRfZHJvcCAtIGRyb3AgYSBkZW50cnkKLSAqIEBkZW50cnk6IGRlbnRyeSB0byBkcm9wCi0gKgotICogZF9kcm9wKCkgdW5oYXNoZXMgdGhlIGVudHJ5IGZyb20gdGhlIHBhcmVudCBkZW50cnkgaGFzaGVzLCBzbyB0aGF0IGl0IHdvbid0Ci0gKiBiZSBmb3VuZCB0aHJvdWdoIGEgVkZTIGxvb2t1cCBhbnkgbW9yZS4gTm90ZSB0aGF0IHRoaXMgaXMgZGlmZmVyZW50IGZyb20KLSAqIGRlbGV0aW5nIHRoZSBkZW50cnkgLSBkX2RlbGV0ZSB3aWxsIHRyeSB0byBtYXJrIHRoZSBkZW50cnkgbmVnYXRpdmUgaWYKLSAqIHBvc3NpYmxlLCBnaXZpbmcgYSBzdWNjZXNzZnVsIF9uZWdhdGl2ZV8gbG9va3VwLCB3aGlsZSBkX2Ryb3Agd2lsbAotICoganVzdCBtYWtlIHRoZSBjYWNoZSBsb29rdXAgZmFpbC4KLSAqCi0gKiBkX2Ryb3AoKSBpcyB1c2VkIG1haW5seSBmb3Igc3R1ZmYgdGhhdCB3YW50cyB0byBpbnZhbGlkYXRlIGEgZGVudHJ5IGZvciBzb21lCi0gKiByZWFzb24gKE5GUyB0aW1lb3V0cyBvciBhdXRvZnMgZGVsZXRlcykuCi0gKgotICogX19kX2Ryb3AgcmVxdWlyZXMgZGVudHJ5LT5kX2xvY2suCi0gKi8KLQotc3RhdGljIGlubGluZSB2b2lkIF9fZF9kcm9wKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKLXsKLQlpZiAoIShkZW50cnktPmRfZmxhZ3MgJiBEQ0FDSEVfVU5IQVNIRUQpKSB7Ci0JCWRlbnRyeS0+ZF9mbGFncyB8PSBEQ0FDSEVfVU5IQVNIRUQ7Ci0JCWhsaXN0X2RlbF9yY3UoJmRlbnRyeS0+ZF9oYXNoKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkX2Ryb3Aoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQotewotCXNwaW5fbG9jaygmZGNhY2hlX2xvY2spOwotCXNwaW5fbG9jaygmZGVudHJ5LT5kX2xvY2spOwotIAlfX2RfZHJvcChkZW50cnkpOwotCXNwaW5fdW5sb2NrKCZkZW50cnktPmRfbG9jayk7Ci0Jc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKLX0KLQogc3RhdGljIGlubGluZSBpbnQgZG5hbWVfZXh0ZXJuYWwoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogewogCXJldHVybiBkZW50cnktPmRfbmFtZS5uYW1lICE9IGRlbnRyeS0+ZF9pbmFtZTsKQEAgLTIzNSwxMCArMjI1LDE0IEBACiBleHRlcm4gdm9pZCBkX2luc3RhbnRpYXRlKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGlub2RlICopOwogZXh0ZXJuIHN0cnVjdCBkZW50cnkgKiBkX2luc3RhbnRpYXRlX3VuaXF1ZShzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBpbm9kZSAqKTsKIGV4dGVybiBzdHJ1Y3QgZGVudHJ5ICogZF9tYXRlcmlhbGlzZV91bmlxdWUoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgaW5vZGUgKik7CitleHRlcm4gdm9pZCBfX2RfZHJvcChzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpOworZXh0ZXJuIHZvaWQgZF9kcm9wKHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7CiBleHRlcm4gdm9pZCBkX2RlbGV0ZShzdHJ1Y3QgZGVudHJ5ICopOworZXh0ZXJuIHZvaWQgZF9zZXRfZF9vcChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyAqb3ApOwogCiAvKiBhbGxvY2F0ZS9kZS1hbGxvY2F0ZSAqLwogZXh0ZXJuIHN0cnVjdCBkZW50cnkgKiBkX2FsbG9jKHN0cnVjdCBkZW50cnkgKiwgY29uc3Qgc3RydWN0IHFzdHIgKik7CitleHRlcm4gc3RydWN0IGRlbnRyeSAqIGRfYWxsb2NfcHNldWRvKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBjb25zdCBzdHJ1Y3QgcXN0ciAqKTsKIGV4dGVybiBzdHJ1Y3QgZGVudHJ5ICogZF9zcGxpY2VfYWxpYXMoc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKik7CiBleHRlcm4gc3RydWN0IGRlbnRyeSAqIGRfYWRkX2NpKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGlub2RlICosIHN0cnVjdCBxc3RyICopOwogZXh0ZXJuIHN0cnVjdCBkZW50cnkgKiBkX29idGFpbl9hbGlhcyhzdHJ1Y3QgaW5vZGUgKik7CkBAIC0yOTYsMTQgKzI5MCw0MCBAQAogCXJldHVybiByZXM7CiB9CiAKK2V4dGVybiB2b2lkIGRlbnRyeV91cGRhdGVfbmFtZV9jYXNlKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IHFzdHIgKik7CisKIC8qIHVzZWQgZm9yIHJlbmFtZSgpIGFuZCBiYXNrZXRzICovCiBleHRlcm4gdm9pZCBkX21vdmUoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgZGVudHJ5ICopOwogZXh0ZXJuIHN0cnVjdCBkZW50cnkgKmRfYW5jZXN0b3Ioc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgZGVudHJ5ICopOwogCiAvKiBhcHBlbmRpeCBtYXkgZWl0aGVyIGJlIE5VTEwgb3IgYmUgdXNlZCBmb3IgdHJhbnNuYW1lIHN1ZmZpeGVzICovCi1leHRlcm4gc3RydWN0IGRlbnRyeSAqIGRfbG9va3VwKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IHFzdHIgKik7Ci1leHRlcm4gc3RydWN0IGRlbnRyeSAqIF9fZF9sb29rdXAoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgcXN0ciAqKTsKLWV4dGVybiBzdHJ1Y3QgZGVudHJ5ICogZF9oYXNoX2FuZF9sb29rdXAoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgcXN0ciAqKTsKK2V4dGVybiBzdHJ1Y3QgZGVudHJ5ICpkX2xvb2t1cChzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBxc3RyICopOworZXh0ZXJuIHN0cnVjdCBkZW50cnkgKmRfaGFzaF9hbmRfbG9va3VwKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IHFzdHIgKik7CitleHRlcm4gc3RydWN0IGRlbnRyeSAqX19kX2xvb2t1cChzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBxc3RyICopOworZXh0ZXJuIHN0cnVjdCBkZW50cnkgKl9fZF9sb29rdXBfcmN1KHN0cnVjdCBkZW50cnkgKnBhcmVudCwgc3RydWN0IHFzdHIgKm5hbWUsCisJCQkJdW5zaWduZWQgKnNlcSwgc3RydWN0IGlub2RlICoqaW5vZGUpOworCisvKioKKyAqIF9fZF9yY3VfdG9fcmVmY291bnQgLSB0YWtlIGEgcmVmY291bnQgb24gZGVudHJ5IGlmIHNlcXVlbmNlIGNoZWNrIGlzIG9rCisgKiBAZGVudHJ5OiBkZW50cnkgdG8gdGFrZSBhIHJlZiBvbgorICogQHNlcTogc2VxY291bnQgdG8gdmVyaWZ5IGFnYWluc3QKKyAqIFJldHVybnM6IDAgb24gZmFpbHVyZSwgZWxzZSAxLgorICoKKyAqIF9fZF9yY3VfdG9fcmVmY291bnQgb3BlcmF0ZXMgb24gYSBkZW50cnksc2VxIHBhaXIgdGhhdCB3YXMgcmV0dXJuZWQKKyAqIGJ5IF9fZF9sb29rdXBfcmN1LCB0byBnZXQgYSByZWZlcmVuY2Ugb24gYW4gcmN1LXdhbGsgZGVudHJ5LgorICovCitzdGF0aWMgaW5saW5lIGludCBfX2RfcmN1X3RvX3JlZmNvdW50KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW5zaWduZWQgc2VxKQoreworCWludCByZXQgPSAwOworCisJYXNzZXJ0X3NwaW5fbG9ja2VkKCZkZW50cnktPmRfbG9jayk7CisJaWYgKCFyZWFkX3NlcWNvdW50X3JldHJ5KCZkZW50cnktPmRfc2VxLCBzZXEpKSB7CisJCXJldCA9IDE7CisJCWRlbnRyeS0+ZF9jb3VudCsrOworCX0KKworCXJldHVybiByZXQ7Cit9CiAKIC8qIHZhbGlkYXRlICJpbnNlY3VyZSIgZGVudHJ5IHBvaW50ZXIgKi8KIGV4dGVybiBpbnQgZF92YWxpZGF0ZShzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBkZW50cnkgKik7CkBAIC0zMTYsMzQgKzMzNiwzNyBAQAogZXh0ZXJuIGNoYXIgKl9fZF9wYXRoKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3QgcGF0aCAqcm9vdCwgY2hhciAqLCBpbnQpOwogZXh0ZXJuIGNoYXIgKmRfcGF0aChjb25zdCBzdHJ1Y3QgcGF0aCAqLCBjaGFyICosIGludCk7CiBleHRlcm4gY2hhciAqZF9wYXRoX3dpdGhfdW5yZWFjaGFibGUoY29uc3Qgc3RydWN0IHBhdGggKiwgY2hhciAqLCBpbnQpOwotZXh0ZXJuIGNoYXIgKl9fZGVudHJ5X3BhdGgoc3RydWN0IGRlbnRyeSAqLCBjaGFyICosIGludCk7CitleHRlcm4gY2hhciAqZGVudHJ5X3BhdGhfcmF3KHN0cnVjdCBkZW50cnkgKiwgY2hhciAqLCBpbnQpOwogZXh0ZXJuIGNoYXIgKmRlbnRyeV9wYXRoKHN0cnVjdCBkZW50cnkgKiwgY2hhciAqLCBpbnQpOwogCiAvKiBBbGxvY2F0aW9uIGNvdW50cy4uICovCiAKIC8qKgotICoJZGdldCwgZGdldF9sb2NrZWQJLQlnZXQgYSByZWZlcmVuY2UgdG8gYSBkZW50cnkKKyAqCWRnZXQsIGRnZXRfZGxvY2sgLQlnZXQgYSByZWZlcmVuY2UgdG8gYSBkZW50cnkKICAqCUBkZW50cnk6IGRlbnRyeSB0byBnZXQgYSByZWZlcmVuY2UgdG8KICAqCiAgKglHaXZlbiBhIGRlbnRyeSBvciAlTlVMTCBwb2ludGVyIGluY3JlbWVudCB0aGUgcmVmZXJlbmNlIGNvdW50CiAgKglpZiBhcHByb3ByaWF0ZSBhbmQgcmV0dXJuIHRoZSBkZW50cnkuIEEgZGVudHJ5IHdpbGwgbm90IGJlIAotICoJZGVzdHJveWVkIHdoZW4gaXQgaGFzIHJlZmVyZW5jZXMuIGRnZXQoKSBzaG91bGQgbmV2ZXIgYmUKLSAqCWNhbGxlZCBmb3IgZGVudHJpZXMgd2l0aCB6ZXJvIHJlZmVyZW5jZSBjb3VudGVyLiBGb3IgdGhlc2UgY2FzZXMKLSAqCShwcmVmZXJhYmx5IG5vbmUsIGZ1bmN0aW9ucyBpbiBkY2FjaGUuYyBhcmUgc3VmZmljaWVudCBmb3Igbm9ybWFsCi0gKgluZWVkcyBhbmQgdGhleSB0YWtlIG5lY2Vzc2FyeSBwcmVjYXV0aW9ucykgeW91IHNob3VsZCBob2xkIGRjYWNoZV9sb2NrCi0gKglhbmQgY2FsbCBkZ2V0X2xvY2tlZCgpIGluc3RlYWQgb2YgZGdldCgpLgorICoJZGVzdHJveWVkIHdoZW4gaXQgaGFzIHJlZmVyZW5jZXMuCiAgKi8KLSAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGRlbnRyeSAqZGdldF9kbG9jayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCit7CisJaWYgKGRlbnRyeSkKKwkJZGVudHJ5LT5kX2NvdW50Kys7CisJcmV0dXJuIGRlbnRyeTsKK30KKwogc3RhdGljIGlubGluZSBzdHJ1Y3QgZGVudHJ5ICpkZ2V0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIHsKIAlpZiAoZGVudHJ5KSB7Ci0JCUJVR19PTighYXRvbWljX3JlYWQoJmRlbnRyeS0+ZF9jb3VudCkpOwotCQlhdG9taWNfaW5jKCZkZW50cnktPmRfY291bnQpOworCQlzcGluX2xvY2soJmRlbnRyeS0+ZF9sb2NrKTsKKwkJZGdldF9kbG9jayhkZW50cnkpOworCQlzcGluX3VubG9jaygmZGVudHJ5LT5kX2xvY2spOwogCX0KIAlyZXR1cm4gZGVudHJ5OwogfQogCi1leHRlcm4gc3RydWN0IGRlbnRyeSAqIGRnZXRfbG9ja2VkKHN0cnVjdCBkZW50cnkgKik7CitleHRlcm4gc3RydWN0IGRlbnRyeSAqZGdldF9wYXJlbnQoc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKIAogLyoqCiAgKglkX3VuaGFzaGVkIC0JaXMgZGVudHJ5IGhhc2hlZApAQCAtMzc0LDIxICszOTcsMTEgQEAKIAlzcGluX3VubG9jaygmZGVudHJ5LT5kX2xvY2spOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBkZW50cnkgKmRnZXRfcGFyZW50KHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKLXsKLQlzdHJ1Y3QgZGVudHJ5ICpyZXQ7Ci0KLQlzcGluX2xvY2soJmRlbnRyeS0+ZF9sb2NrKTsKLQlyZXQgPSBkZ2V0KGRlbnRyeS0+ZF9wYXJlbnQpOwotCXNwaW5fdW5sb2NrKCZkZW50cnktPmRfbG9jayk7Ci0JcmV0dXJuIHJldDsKLX0KLQogZXh0ZXJuIHZvaWQgZHB1dChzdHJ1Y3QgZGVudHJ5ICopOwogCiBzdGF0aWMgaW5saW5lIGludCBkX21vdW50cG9pbnQoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogewotCXJldHVybiBkZW50cnktPmRfbW91bnRlZDsKKwlyZXR1cm4gZGVudHJ5LT5kX2ZsYWdzICYgRENBQ0hFX01PVU5URUQ7CiB9CiAKIGV4dGVybiBzdHJ1Y3QgdmZzbW91bnQgKmxvb2t1cF9tbnQoc3RydWN0IHBhdGggKik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RjYm5sLmggYi9pbmNsdWRlL2xpbnV4L2RjYm5sLmgKaW5kZXggODcyMzQ5MS4uNjhjZDI0OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kY2JubC5oCisrKyBiL2luY2x1ZGUvbGludXgvZGNibmwuaApAQCAtMjIsNiArMjIsODkgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKKy8qIElFRUUgODAyLjFRYXogc3RkIHN1cHBvcnRlZCB2YWx1ZXMgKi8KKyNkZWZpbmUgSUVFRV84MDIxUUFaX01BWF9UQ1MJOAorCisvKiBUaGlzIHN0cnVjdHVyZSBjb250YWlucyB0aGUgSUVFRSA4MDIuMVFheiBFVFMgbWFuYWdlZCBvYmplY3QKKyAqCisgKiBAd2lsbGluZzogd2lsbGluZyBiaXQgaW4gRVRTIGNvbmZpZ3VyYXRpbiBUTFYKKyAqIEBldHNfY2FwOiBpbmRpY2F0ZXMgc3VwcG9ydGVkIGNhcGFjaXR5IG9mIGV0cyBmZWF0dXJlCisgKiBAY2JzOiBjcmVkaXQgYmFzZWQgc2hhcGVyIGV0cyBhbGdvcml0aG0gc3VwcG9ydGVkCisgKiBAdGNfdHhfYnc6IHRjIHR4IGJhbmR3aWR0aCBpbmRleGVkIGJ5IHRyYWZmaWMgY2xhc3MKKyAqIEB0Y19yeF9idzogdGMgcnggYmFuZHdpZHRoIGluZGV4ZWQgYnkgdHJhZmZpYyBjbGFzcworICogQHRjX3RzYTogVFNBIEFzc2lnbm1lbnQgdGFibGUsIGluZGV4ZWQgYnkgdHJhZmZpYyBjbGFzcworICogQHByaW9fdGM6IHByaW9yaXR5IGFzc2lnbm1lbnQgdGFibGUgbWFwcGluZyA4MDIxUXAgdG8gdHJhZmZpYyBjbGFzcworICogQHRjX3JlY29fYnc6IHJlY29tbWVuZGVkIHRjIGJhbmR3aWR0aCBpbmRleGVkIGJ5IHRyYWZmaWMgY2xhc3MgZm9yIFRMVgorICogQHRjX3JlY29fdHNhOiByZWNvbW1lbmRlZCB0YyBiYW5kd2lkdGggaW5kZXhlZCBieSB0cmFmZmljIGNsYXNzIGZvciBUTFYKKyAqIEByZWNvX3ByaW9fdGM6IHJlY29tbWVuZGVkIHRjIHR4IGJhbmR3aWR0aCBpbmRleGVkIGJ5IHRyYWZmaWMgY2xhc3MgZm9yIFRMVgorICoKKyAqIFJlY29tbWVuZGVkIHZhbHVlcyBhcmUgdXNlZCB0byBzZXQgZmllbGRzIGluIHRoZSBFVFMgcmVjb21tZW5kYXRpb24gVExWCisgKiB3aXRoIGhhcmR3YXJlIG9mZmxvYWRlZCBMTERQLgorICoKKyAqIC0tLS0KKyAqICBUU0EgQXNzaWdubWVudCA4IGJpdCBpZGVudGlmaWVycworICoJMAlzdHJpY3QgcHJpb3JpdHkKKyAqCTEJY3JlZGl0LWJhc2VkIHNoYXBlcgorICoJMgllbmhhbmNlZCB0cmFuc21pc3Npb24gc2VsZWN0aW9uCisgKgkzLTI1NAlyZXNlcnZlZAorICoJMjU1CXZlbmRvciBzcGVjaWZpYworICovCitzdHJ1Y3QgaWVlZV9ldHMgeworCV9fdTgJd2lsbGluZzsKKwlfX3U4CWV0c19jYXA7CisJX191OAljYnM7CisJX191OAl0Y190eF9id1tJRUVFXzgwMjFRQVpfTUFYX1RDU107CisJX191OAl0Y19yeF9id1tJRUVFXzgwMjFRQVpfTUFYX1RDU107CisJX191OAl0Y190c2FbSUVFRV84MDIxUUFaX01BWF9UQ1NdOworCV9fdTgJcHJpb190Y1tJRUVFXzgwMjFRQVpfTUFYX1RDU107CisJX191OAl0Y19yZWNvX2J3W0lFRUVfODAyMVFBWl9NQVhfVENTXTsKKwlfX3U4CXRjX3JlY29fdHNhW0lFRUVfODAyMVFBWl9NQVhfVENTXTsKKwlfX3U4CXJlY29fcHJpb190Y1tJRUVFXzgwMjFRQVpfTUFYX1RDU107Cit9OworCisvKiBUaGlzIHN0cnVjdHVyZSBjb250YWlucyB0aGUgSUVFRSA4MDIuMVFheiBQRkMgbWFuYWdlZCBvYmplY3QKKyAqCisgKiBAcGZjX2NhcDogSW5kaWNhdGVzIHRoZSBudW1iZXIgb2YgdHJhZmZpYyBjbGFzc2VzIG9uIHRoZSBsb2NhbCBkZXZpY2UKKyAqCSAgICAgdGhhdCBtYXkgc2ltdWx0YW5lb3VzbHkgaGF2ZSBQRkMgZW5hYmxlZC4KKyAqIEBwZmNfZW46IGJpdG1hcCBpbmRpY2F0aW5nIHBmYyBlbmFibGVkIHRyYWZmaWMgY2xhc3NlcworICogQG1iYzogZW5hYmxlIG1hY3NlYyBieXBhc3MgY2FwYWJpbGl0eQorICogQGRlbGF5OiB0aGUgYWxsb3dhbmNlIG1hZGUgZm9yIGEgcm91bmQtdHJpcCBwcm9wYWdhdGlvbiBkZWxheSBvZiB0aGUKKyAqCSAgIGxpbmsgaW4gYml0cy4KKyAqIEByZXF1ZXN0czogY291bnQgb2YgdGhlIHNlbnQgcGZjIGZyYW1lcworICogQGluZGljYXRpb25zOiBjb3VudCBvZiB0aGUgcmVjZWl2ZWQgcGZjIGZyYW1lcworICovCitzdHJ1Y3QgaWVlZV9wZmMgeworCV9fdTgJcGZjX2NhcDsKKwlfX3U4CXBmY19lbjsKKwlfX3U4CW1iYzsKKwlfX3UxNglkZWxheTsKKwlfX3U2NAlyZXF1ZXN0c1tJRUVFXzgwMjFRQVpfTUFYX1RDU107CisJX191NjQJaW5kaWNhdGlvbnNbSUVFRV84MDIxUUFaX01BWF9UQ1NdOworfTsKKworLyogVGhpcyBzdHJ1Y3R1cmUgY29udGFpbnMgdGhlIElFRUUgODAyLjFRYXogQVBQIG1hbmFnZWQgb2JqZWN0LiBUaGlzCisgKiBvYmplY3QgaXMgYWxzbyB1c2VkIGZvciB0aGUgQ0VFIHN0ZCBhcyB3ZWxsLiBUaGVyZSBpcyBubyBkaWZmZXJlbmNlCisgKiBiZXR3ZWVuIHRoZSBvYmplY3RzLgorICoKKyAqIEBzZWxlY3RvcjogcHJvdG9jb2wgaWRlbnRpZmllciB0eXBlCisgKiBAcHJvdG9jb2w6IHByb3RvY29sIG9mIHR5cGUgaW5kaWNhdGVkCisgKiBAcHJpb3JpdHk6IDMtYml0IHVuc2lnbmVkIGludGVnZXIgaW5kaWNhdGluZyBwcmlvcml0eQorICoKKyAqIC0tLS0KKyAqICBTZWxlY3RvciBmaWVsZCB2YWx1ZXMKKyAqCTAJUmVzZXJ2ZWQKKyAqCTEJRXRoZXJ0eXBlCisgKgkyCVdlbGwga25vd24gcG9ydCBudW1iZXIgb3ZlciBUQ1Agb3IgU0NUUAorICoJMwlXZWxsIGtub3duIHBvcnQgbnVtYmVyIG92ZXIgVURQIG9yIERDQ1AKKyAqCTQJV2VsbCBrbm93biBwb3J0IG51bWJlciBvdmVyIFRDUCwgU0NUUCwgVURQLCBvciBEQ0NQCisgKgk1LTcJUmVzZXJ2ZWQKKyAqLworc3RydWN0IGRjYl9hcHAgeworCV9fdTgJc2VsZWN0b3I7CisJX191MzIJcHJvdG9jb2w7CisJX191OAlwcmlvcml0eTsKK307CisKIHN0cnVjdCBkY2Jtc2cgewogCV9fdTggICAgICAgICAgICAgICBkY2JfZmFtaWx5OwogCV9fdTggICAgICAgICAgICAgICBjbWQ7CkBAIC01MCw2ICsxMzMsMTIgQEAKICAqIEBEQ0JfQ01EX1NCQ046IGdldCBiYWNrd2FyZCBjb25nZXN0aW9uIG5vdGlmaWNhdGlvbiBjb25maWdyYXRpb24uCiAgKiBARENCX0NNRF9HQVBQOiBnZXQgYXBwbGljYXRpb24gcHJvdG9jb2wgY29uZmlndXJhdGlvbgogICogQERDQl9DTURfU0FQUDogc2V0IGFwcGxpY2F0aW9uIHByb3RvY29sIGNvbmZpZ3VyYXRpb24KKyAqIEBEQ0JfQ01EX0lFRUVfU0VUOiBzZXQgSUVFRSA4MDIuMVFheiBjb25maWd1cmF0aW9uCisgKiBARENCX0NNRF9JRUVFX0dFVDogZ2V0IElFRUUgODAyLjFRYXogY29uZmlndXJhdGlvbgorICogQERDQl9DTURfR0RDQlg6IGdldCBEQ0JYIGVuZ2luZSBjb25maWd1cmF0aW9uCisgKiBARENCX0NNRF9TRENCWDogc2V0IERDQlggZW5naW5lIGNvbmZpZ3VyYXRpb24KKyAqIEBEQ0JfQ01EX0dGRUFUQ0ZHOiBnZXQgRENCWCBmZWF0dXJlcyBmbGFncworICogQERDQl9DTURfU0ZFQVRDRkc6IHNldCBEQ0JYIGZlYXR1cmVzIG5lZ290aWF0aW9uIGZsYWdzCiAgKi8KIGVudW0gZGNibmxfY29tbWFuZHMgewogCURDQl9DTURfVU5ERUZJTkVELApAQCAtODMsNiArMTcyLDE1IEBACiAJRENCX0NNRF9HQVBQLAogCURDQl9DTURfU0FQUCwKIAorCURDQl9DTURfSUVFRV9TRVQsCisJRENCX0NNRF9JRUVFX0dFVCwKKworCURDQl9DTURfR0RDQlgsCisJRENCX0NNRF9TRENCWCwKKworCURDQl9DTURfR0ZFQVRDRkcsCisJRENCX0NNRF9TRkVBVENGRywKKwogCV9fRENCX0NNRF9FTlVNX01BWCwKIAlEQ0JfQ01EX01BWCA9IF9fRENCX0NNRF9FTlVNX01BWCAtIDEsCiB9OwpAQCAtMTAyLDYgKzIwMCw5IEBACiAgKiBARENCX0FUVFJfQ0FQOiBEQ0IgY2FwYWJpbGl0aWVzIG9mIHRoZSBkZXZpY2UgKE5MQV9ORVNURUQpCiAgKiBARENCX0FUVFJfTlVNVENTOiBudW1iZXIgb2YgdHJhZmZpYyBjbGFzc2VzIHN1cHBvcnRlZCAoTkxBX05FU1RFRCkKICAqIEBEQ0JfQVRUUl9CQ046IGJhY2t3YXJkIGNvbmdlc3Rpb24gbm90aWZpY2F0aW9uIGNvbmZpZ3VyYXRpb24gKE5MQV9ORVNURUQpCisgKiBARENCX0FUVFJfSUVFRTogSUVFRSA4MDIuMVFheiBzdXBwb3J0ZWQgYXR0cmlidXRlcyAoTkxBX05FU1RFRCkKKyAqIEBEQ0JfQVRUUl9EQ0JYOiBEQ0JYIGVuZ2luZSBjb25maWd1cmF0aW9uIGluIHRoZSBkZXZpY2UgKE5MQV9VOCkKKyAqIEBEQ0JfQVRUUl9GRUFUQ0ZHOiBEQ0JYIGZlYXR1cmVzIGZsYWdzIChOTEFfTkVTVEVEKQogICovCiBlbnVtIGRjYm5sX2F0dHJzIHsKIAlEQ0JfQVRUUl9VTkRFRklORUQsCkBAIC0xMTksMTAgKzIyMCwzMiBAQAogCURDQl9BVFRSX0JDTiwKIAlEQ0JfQVRUUl9BUFAsCiAKKwkvKiBJRUVFIHN0ZCBhdHRyaWJ1dGVzICovCisJRENCX0FUVFJfSUVFRSwKKworCURDQl9BVFRSX0RDQlgsCisJRENCX0FUVFJfRkVBVENGRywKKwogCV9fRENCX0FUVFJfRU5VTV9NQVgsCiAJRENCX0FUVFJfTUFYID0gX19EQ0JfQVRUUl9FTlVNX01BWCAtIDEsCiB9OwogCitlbnVtIGllZWVfYXR0cnMgeworCURDQl9BVFRSX0lFRUVfVU5TUEVDLAorCURDQl9BVFRSX0lFRUVfRVRTLAorCURDQl9BVFRSX0lFRUVfUEZDLAorCURDQl9BVFRSX0lFRUVfQVBQX1RBQkxFLAorCV9fRENCX0FUVFJfSUVFRV9NQVgKK307CisjZGVmaW5lIERDQl9BVFRSX0lFRUVfTUFYIChfX0RDQl9BVFRSX0lFRUVfTUFYIC0gMSkKKworZW51bSBpZWVlX2F0dHJzX2FwcCB7CisJRENCX0FUVFJfSUVFRV9BUFBfVU5TUEVDLAorCURDQl9BVFRSX0lFRUVfQVBQLAorCV9fRENCX0FUVFJfSUVFRV9BUFBfTUFYCit9OworI2RlZmluZSBEQ0JfQVRUUl9JRUVFX0FQUF9NQVggKF9fRENCX0FUVFJfSUVFRV9BUFBfTUFYIC0gMSkKKwogLyoqCiAgKiBlbnVtIGRjYm5sX3BmY19hdHRycyAtIERDQiBQcmlvcml0eSBGbG93IENvbnRyb2wgdXNlciBwcmlvcml0eSBuZXN0ZWQgYXR0cnMKICAqCkBAIC0yNjIsNiArMzg1LDggQEAKICAqIEBEQ0JfQ0FQX0FUVFJfR1NQOiAoTkxBX1U4KSBkZXZpY2Ugc3VwcG9ydHMgZ3JvdXAgc3RyaWN0IHByaW9yaXR5CiAgKiBARENCX0NBUF9BVFRSX0JDTjogKE5MQV9VOCkgZGV2aWNlIHN1cHBvcnRzIEJhY2t3YXJkcyBDb25nZXN0aW9uCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm90aWZpY2F0aW9uCisgKiBARENCX0NBUF9BVFRSX0RDQlg6IChOTEFfVTgpIGRldmljZSBzdXBwb3J0cyBEQ0JYIGVuZ2luZQorICoKICAqLwogZW51bSBkY2JubF9jYXBfYXR0cnMgewogCURDQl9DQVBfQVRUUl9VTkRFRklORUQsCkBAIC0yNzMsMTIgKzM5OCw0NSBAQAogCURDQl9DQVBfQVRUUl9QRkNfVENTLAogCURDQl9DQVBfQVRUUl9HU1AsCiAJRENCX0NBUF9BVFRSX0JDTiwKKwlEQ0JfQ0FQX0FUVFJfRENCWCwKIAogCV9fRENCX0NBUF9BVFRSX0VOVU1fTUFYLAogCURDQl9DQVBfQVRUUl9NQVggPSBfX0RDQl9DQVBfQVRUUl9FTlVNX01BWCAtIDEsCiB9OwogCiAvKioKKyAqIERDQlggY2FwYWJpbGl0eSBmbGFncworICoKKyAqIEBEQ0JfQ0FQX0RDQlhfSE9TVDogRENCWCBuZWdvdGlhdGlvbiBpcyBwZXJmb3JtZWQgYnkgdGhlIGhvc3QgTExEUCBhZ2VudC4KKyAqICAgICAgICAgICAgICAgICAgICAgJ3NldCcgcm91dGluZXMgYXJlIHVzZWQgdG8gY29uZmlndXJlIHRoZSBkZXZpY2Ugd2l0aAorICogICAgICAgICAgICAgICAgICAgICB0aGUgbmVnb3RpYXRlZCBwYXJhbWV0ZXJzCisgKgorICogQERDQl9DQVBfRENCWF9MTERfTUFOQUdFRDogRENCWCBuZWdvdGlhdGlvbiBpcyBub3QgcGVyZm9ybWVkIGluIHRoZSBob3N0IGJ1dAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnkgYW5vdGhlciBlbnRpdHkKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnZXQnIHJvdXRpbmVzIGFyZSB1c2VkIHRvIHJldHJpZXZlIHRoZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVnb3RpYXRlZCBwYXJhbWV0ZXJzCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2V0JyByb3V0aW5lcyBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIGluaXRpYWwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lZ290aWF0aW9uIGNvbmZpZ3VyYXRpb24KKyAqCisgKiBARENCX0NBUF9EQ0JYX1ZFUl9DRUU6IGZvciBhIG5vbi1ob3N0IERDQlggZW5naW5lLCBpbmRpY2F0ZXMgdGhlIGVuZ2luZQorICogICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0cyB0aGUgQ0VFIHByb3RvY29sIGZsYXZvcgorICoKKyAqIEBEQ0JfQ0FQX0RDQlhfVkVSX0lFRUU6IGZvciBhIG5vbi1ob3N0IERDQlggZW5naW5lLCBpbmRpY2F0ZXMgdGhlIGVuZ2luZQorICogICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydHMgdGhlIElFRUUgcHJvdG9jb2wgZmxhdm9yCisgKgorICogQERDQl9DQVBfRENCWF9TVEFUSUM6IGZvciBhIG5vbi1ob3N0IERDQlggZW5naW5lLCBpbmRpY2F0ZXMgdGhlIGVuZ2luZQorICogICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnRzIHN0YXRpYyBjb25maWd1cmF0aW9uIChpLmUgbm8gYWN0dWFsCisgKiAgICAgICAgICAgICAgICAgICAgICAgbmVnb3RpYXRpb24gaXMgcGVyZm9ybWVkIG5lZ290aWF0ZWQgcGFyYW1ldGVycyBlcXVhbAorICogICAgICAgICAgICAgICAgICAgICAgIHRoZSBpbml0aWFsIGNvbmZpZ3VyYXRpb24pCisgKgorICovCisjZGVmaW5lIERDQl9DQVBfRENCWF9IT1NUCQkweDAxCisjZGVmaW5lIERDQl9DQVBfRENCWF9MTERfTUFOQUdFRAkweDAyCisjZGVmaW5lIERDQl9DQVBfRENCWF9WRVJfQ0VFCQkweDA0CisjZGVmaW5lIERDQl9DQVBfRENCWF9WRVJfSUVFRQkJMHgwOAorI2RlZmluZSBEQ0JfQ0FQX0RDQlhfU1RBVElDCQkweDEwCisKKy8qKgogICogZW51bSBkY2JubF9udW10Y3NfYXR0cnMgLSBudW1iZXIgb2YgdHJhZmZpYyBjbGFzc2VzCiAgKgogICogQERDQl9OVU1UQ1NfQVRUUl9VTkRFRklORUQ6IHVuc3BlY2lmaWVkIGF0dHJpYnV0ZSB0byBjYXRjaCBlcnJvcnMKQEAgLTM1NSw0ICs1MTMsMzAgQEAKIAlEQ0JfQVBQX0FUVFJfTUFYID0gX19EQ0JfQVBQX0FUVFJfRU5VTV9NQVggLSAxLAogfTsKIAorLyoqCisgKiBlbnVtIGRjYm5sX2ZlYXRjZmdfYXR0cnMgLSBmZWF0dXJlcyBjb25pZmlndXJhdGlvbiBmbGFncworICoKKyAqIEBEQ0JfRkVBVENGR19BVFRSX1VOREVGSU5FRDogdW5zcGVjaWZpZWQgYXR0cmlidXRlIHRvIGNhdGNoIGVycm9ycworICogQERDQl9GRUFUQ0ZHX0FUVFJfQUxMOiAoTkxBX0ZMQUcpIGFsbCBmZWF0dXJlcyBjb25maWd1cmF0aW9uIGF0dHJpYnV0ZXMKKyAqIEBEQ0JfRkVBVENGR19BVFRSX1BHOiAoTkxBX1U4KSBjb25maWd1cmF0aW9uIGZsYWdzIGZvciBwcmlvcml0eSBncm91cHMKKyAqIEBEQ0JfRkVBVENGR19BVFRSX1BGQzogKE5MQV9VOCkgY29uZmlndXJhdGlvbiBmbGFncyBmb3IgcHJpb3JpdHkKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvdyBjb250cm9sCisgKiBARENCX0ZFQVRDRkdfQVRUUl9BUFA6IChOTEFfVTgpIGNvbmZpZ3VyYXRpb24gZmxhZ3MgZm9yIGFwcGxpY2F0aW9uIFRMVgorICoKKyAqLworI2RlZmluZSBEQ0JfRkVBVENGR19FUlJPUgkweDAxCS8qIGVycm9yIGluIGZlYXR1cmUgcmVzb2x1dGlvbiAqLworI2RlZmluZSBEQ0JfRkVBVENGR19FTkFCTEUJMHgwMgkvKiBlbmFibGUgZmVhdHVyZSAqLworI2RlZmluZSBEQ0JfRkVBVENGR19XSUxMSU5HCTB4MDQJLyogZmVhdHVyZSBpcyB3aWxsaW5nICovCisjZGVmaW5lIERDQl9GRUFUQ0ZHX0FEVkVSVElTRQkweDA4CS8qIGFkdmVydGlzZSBmZWF0dXJlICovCitlbnVtIGRjYm5sX2ZlYXRjZmdfYXR0cnMgeworCURDQl9GRUFUQ0ZHX0FUVFJfVU5ERUZJTkVELAorCURDQl9GRUFUQ0ZHX0FUVFJfQUxMLAorCURDQl9GRUFUQ0ZHX0FUVFJfUEcsCisJRENCX0ZFQVRDRkdfQVRUUl9QRkMsCisJRENCX0ZFQVRDRkdfQVRUUl9BUFAsCisKKwlfX0RDQl9GRUFUQ0ZHX0FUVFJfRU5VTV9NQVgsCisJRENCX0ZFQVRDRkdfQVRUUl9NQVggPSBfX0RDQl9GRUFUQ0ZHX0FUVFJfRU5VTV9NQVggLSAxLAorfTsKKwogI2VuZGlmIC8qIF9fTElOVVhfRENCTkxfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RjY3AuaCBiL2luY2x1ZGUvbGludXgvZGNjcC5oCmluZGV4IDc0OWYwMWMuLjAxMGUyZDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGNjcC5oCisrKyBiL2luY2x1ZGUvbGludXgvZGNjcC5oCkBAIC0xOTcsNiArMTk3LDIxIEBACiAJRENDUEZfTUFYX0NDSURfU1BFQ0lGSUMgPSAyNTUsCiB9OwogCisvKiBEQ0NQIHNvY2tldCBjb250cm9sIG1lc3NhZ2UgdHlwZXMgZm9yIGNtc2cgKi8KK2VudW0gZGNjcF9jbXNnX3R5cGUgeworCURDQ1BfU0NNX1BSSU9SSVRZID0gMSwKKwlEQ0NQX1NDTV9RUE9MSUNZX01BWCA9IDB4RkZGRiwKKwkvKiBeLS0gVXAgdG8gaGVyZSByZXNlcnZlZCBleGNsdXNpdmVseSBmb3IgcXBvbGljeSBwYXJhbWV0ZXJzICovCisJRENDUF9TQ01fTUFYCit9OworCisvKiBEQ0NQIHByaW9yaXRpZXMgZm9yIG91dGdvaW5nL3F1ZXVlZCBwYWNrZXRzICovCitlbnVtIGRjY3BfcGFja2V0X2RlcXVldWVpbmdfcG9saWN5IHsKKwlEQ0NQUV9QT0xJQ1lfU0lNUExFLAorCURDQ1BRX1BPTElDWV9QUklPLAorCURDQ1BRX1BPTElDWV9NQVgKK307CisKIC8qIERDQ1Agc29ja2V0IG9wdGlvbnMgKi8KICNkZWZpbmUgRENDUF9TT0NLT1BUX1BBQ0tFVF9TSVpFCTEgLyogWFhYIGRlcHJlY2F0ZWQsIHdpdGhvdXQgZWZmZWN0ICovCiAjZGVmaW5lIERDQ1BfU09DS09QVF9TRVJWSUNFCQkyCkBAIC0yMTAsNiArMjI1LDggQEAKICNkZWZpbmUgRENDUF9TT0NLT1BUX0NDSUQJCTEzCiAjZGVmaW5lIERDQ1BfU09DS09QVF9UWF9DQ0lECQkxNAogI2RlZmluZSBEQ0NQX1NPQ0tPUFRfUlhfQ0NJRAkJMTUKKyNkZWZpbmUgRENDUF9TT0NLT1BUX1FQT0xJQ1lfSUQJCTE2CisjZGVmaW5lIERDQ1BfU09DS09QVF9RUE9MSUNZX1RYUUxFTgkxNwogI2RlZmluZSBEQ0NQX1NPQ0tPUFRfQ0NJRF9SWF9JTkZPCTEyOAogI2RlZmluZSBEQ0NQX1NPQ0tPUFRfQ0NJRF9UWF9JTkZPCTE5MgogCkBAIC00NTgsMTAgKzQ3NSwxMyBAQAogICogQGRjY3BzX2hjX3J4X2NjaWQgLSBDQ0lEIHVzZWQgZm9yIHRoZSByZWNlaXZlciAob3IgcmVjZWl2aW5nIGhhbGYtY29ubmVjdGlvbikKICAqIEBkY2Nwc19oY190eF9jY2lkIC0gQ0NJRCB1c2VkIGZvciB0aGUgc2VuZGVyIChvciBzZW5kaW5nIGhhbGYtY29ubmVjdGlvbikKICAqIEBkY2Nwc19vcHRpb25zX3JlY2VpdmVkIC0gcGFyc2VkIHNldCBvZiByZXRyaWV2ZWQgb3B0aW9ucworICogQGRjY3BzX3Fwb2xpY3kgLSBUWCBkZXF1ZXVlaW5nIHBvbGljeSwgb25lIG9mICVkY2NwX3BhY2tldF9kZXF1ZXVlaW5nX3BvbGljeQorICogQGRjY3BzX3R4X3FsZW4gLSBtYXhpbXVtIGxlbmd0aCBvZiB0aGUgVFggcXVldWUKICAqIEBkY2Nwc19yb2xlIC0gcm9sZSBvZiB0aGlzIHNvY2ssIG9uZSBvZiAlZGNjcF9yb2xlCiAgKiBAZGNjcHNfaGNfcnhfaW5zZXJ0X29wdGlvbnMgLSByZWNlaXZlciB3YW50cyB0byBhZGQgb3B0aW9ucyB3aGVuIGFja2luZwogICogQGRjY3BzX2hjX3R4X2luc2VydF9vcHRpb25zIC0gc2VuZGVyIHdhbnRzIHRvIGFkZCBvcHRpb25zIHdoZW4gc2VuZGluZwogICogQGRjY3BzX3NlcnZlcl90aW1ld2FpdCAtIHNlcnZlciBob2xkcyB0aW1ld2FpdCBzdGF0ZSBvbiBjbG9zZSAoUkZDIDQzNDAsIDguMykKKyAqIEBkY2Nwc19zeW5jX3NjaGVkdWxlZCAtIGZsYWcgd2hpY2ggc2lnbmFscyAic2VuZCBvdXQtb2YtYmFuZCBtZXNzYWdlIHNvb24iCiAgKiBAZGNjcHNfeG1pdGxldCAtIHRhc2tsZXQgc2NoZWR1bGVkIGJ5IHRoZSBUWCBDQ0lEIHRvIGRlcXVldWUgZGF0YSBwYWNrZXRzCiAgKiBAZGNjcHNfeG1pdF90aW1lciAtIHVzZWQgYnkgdGhlIFRYIENDSUQgdG8gZGVsYXkgc2VuZGluZyAocmF0ZS1iYXNlZCBwYWNpbmcpCiAgKiBAZGNjcHNfc3luX3J0dCAtIFJUVCBzYW1wbGUgZnJvbSBSZXF1ZXN0L1Jlc3BvbnNlIGV4Y2hhbmdlIChpbiB1c2VjcykKQEAgLTQ5OSwxMCArNTE5LDEzIEBACiAJc3RydWN0IGNjaWQJCQkqZGNjcHNfaGNfcnhfY2NpZDsKIAlzdHJ1Y3QgY2NpZAkJCSpkY2Nwc19oY190eF9jY2lkOwogCXN0cnVjdCBkY2NwX29wdGlvbnNfcmVjZWl2ZWQJZGNjcHNfb3B0aW9uc19yZWNlaXZlZDsKKwlfX3U4CQkJCWRjY3BzX3Fwb2xpY3k7CisJX191MzIJCQkJZGNjcHNfdHhfcWxlbjsKIAllbnVtIGRjY3Bfcm9sZQkJCWRjY3BzX3JvbGU6MjsKIAlfX3U4CQkJCWRjY3BzX2hjX3J4X2luc2VydF9vcHRpb25zOjE7CiAJX191OAkJCQlkY2Nwc19oY190eF9pbnNlcnRfb3B0aW9uczoxOwogCV9fdTgJCQkJZGNjcHNfc2VydmVyX3RpbWV3YWl0OjE7CisJX191OAkJCQlkY2Nwc19zeW5jX3NjaGVkdWxlZDoxOwogCXN0cnVjdCB0YXNrbGV0X3N0cnVjdAkJZGNjcHNfeG1pdGxldDsKIAlzdHJ1Y3QgdGltZXJfbGlzdAkJZGNjcHNfeG1pdF90aW1lcjsKIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RldmljZS5oIGIvaW5jbHVkZS9saW51eC9kZXZpY2UuaAppbmRleCBkZDQ4OTUzLi5kOTZhZjk3MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RldmljZS5oCkBAIC0xOTcsNiArMTk3LDcgQEAKIAogCXN0cnVjdCBjbGFzc19hdHRyaWJ1dGUJCSpjbGFzc19hdHRyczsKIAlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZQkJKmRldl9hdHRyczsKKwlzdHJ1Y3QgYmluX2F0dHJpYnV0ZQkJKmRldl9iaW5fYXR0cnM7CiAJc3RydWN0IGtvYmplY3QJCQkqZGV2X2tvYmo7CiAKIAlpbnQgKCpkZXZfdWV2ZW50KShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBrb2JqX3VldmVudF9lbnYgKmVudik7CkBAIC01MDgsMTMgKzUwOSwxMyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgZGV2aWNlX2VuYWJsZV9hc3luY19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlpZiAoZGV2LT5wb3dlci5zdGF0dXMgPT0gRFBNX09OKQorCWlmICghZGV2LT5wb3dlci5pbl9zdXNwZW5kKQogCQlkZXYtPnBvd2VyLmFzeW5jX3N1c3BlbmQgPSB0cnVlOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZGV2aWNlX2Rpc2FibGVfYXN5bmNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0JaWYgKGRldi0+cG93ZXIuc3RhdHVzID09IERQTV9PTikKKwlpZiAoIWRldi0+cG93ZXIuaW5fc3VzcGVuZCkKIAkJZGV2LT5wb3dlci5hc3luY19zdXNwZW5kID0gZmFsc2U7CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZWxldmF0b3IuaCBiL2luY2x1ZGUvbGludXgvZWxldmF0b3IuaAppbmRleCA0ZmQ5NzhlLi40ZDg1Nzk3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2VsZXZhdG9yLmgKKysrIGIvaW5jbHVkZS9saW51eC9lbGV2YXRvci5oCkBAIC0xOTUsMTUgKzE5NSw5IEBACiAvKgogICogaW8gY29udGV4dCBjb3VudCBhY2NvdW50aW5nCiAgKi8KLSNkZWZpbmUgZWx2X2lvY19jb3VudF9tb2QobmFtZSwgX192YWwpCQkJCVwKLQlkbyB7CQkJCQkJCVwKLQkJcHJlZW1wdF9kaXNhYmxlKCk7CQkJCVwKLQkJX19nZXRfY3B1X3ZhcihuYW1lKSArPSAoX192YWwpOwkJCVwKLQkJcHJlZW1wdF9lbmFibGUoKTsJCQkJXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgZWx2X2lvY19jb3VudF9pbmMobmFtZSkJZWx2X2lvY19jb3VudF9tb2QobmFtZSwgMSkKLSNkZWZpbmUgZWx2X2lvY19jb3VudF9kZWMobmFtZSkJZWx2X2lvY19jb3VudF9tb2QobmFtZSwgLTEpCisjZGVmaW5lIGVsdl9pb2NfY291bnRfbW9kKG5hbWUsIF9fdmFsKSB0aGlzX2NwdV9hZGQobmFtZSwgX192YWwpCisjZGVmaW5lIGVsdl9pb2NfY291bnRfaW5jKG5hbWUpCXRoaXNfY3B1X2luYyhuYW1lKQorI2RlZmluZSBlbHZfaW9jX2NvdW50X2RlYyhuYW1lKQl0aGlzX2NwdV9kZWMobmFtZSkKIAogI2RlZmluZSBlbHZfaW9jX2NvdW50X3JlYWQobmFtZSkJCQkJXAogKHsJCQkJCQkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXRodG9vbC5oIGIvaW5jbHVkZS9saW51eC9ldGh0b29sLmgKaW5kZXggNjYyOGE1MC4uMTkwODkyOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ldGh0b29sLmgKKysrIGIvaW5jbHVkZS9saW51eC9ldGh0b29sLmgKQEAgLTY5MSw3ICs2OTEsOSBAQAogI2RlZmluZSBFVEhUT09MX0dNU0dMVkwJCTB4MDAwMDAwMDcgLyogR2V0IGRyaXZlciBtZXNzYWdlIGxldmVsICovCiAjZGVmaW5lIEVUSFRPT0xfU01TR0xWTAkJMHgwMDAwMDAwOCAvKiBTZXQgZHJpdmVyIG1zZyBsZXZlbC4gKi8KICNkZWZpbmUgRVRIVE9PTF9OV0FZX1JTVAkweDAwMDAwMDA5IC8qIFJlc3RhcnQgYXV0b25lZ290aWF0aW9uLiAqLwotI2RlZmluZSBFVEhUT09MX0dMSU5LCQkweDAwMDAwMDBhIC8qIEdldCBsaW5rIHN0YXR1cyAoZXRodG9vbF92YWx1ZSkgKi8KKy8qIEdldCBsaW5rIHN0YXR1cyBmb3IgaG9zdCwgaS5lLiB3aGV0aGVyIHRoZSBpbnRlcmZhY2UgKmFuZCogdGhlCisgKiBwaHlzaWNhbCBwb3J0IChpZiB0aGVyZSBpcyBvbmUpIGFyZSB1cCAoZXRodG9vbF92YWx1ZSkuICovCisjZGVmaW5lIEVUSFRPT0xfR0xJTksJCTB4MDAwMDAwMGEKICNkZWZpbmUgRVRIVE9PTF9HRUVQUk9NCQkweDAwMDAwMDBiIC8qIEdldCBFRVBST00gZGF0YSAqLwogI2RlZmluZSBFVEhUT09MX1NFRVBST00JCTB4MDAwMDAwMGMgLyogU2V0IEVFUFJPTSBkYXRhLiAqLwogI2RlZmluZSBFVEhUT09MX0dDT0FMRVNDRQkweDAwMDAwMDBlIC8qIEdldCBjb2FsZXNjZSBjb25maWcgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmIuaCBiL2luY2x1ZGUvbGludXgvZmIuaAppbmRleCBkMTYzMWQzLi42OGJhODVhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZiLmgKKysrIGIvaW5jbHVkZS9saW51eC9mYi5oCkBAIC0xMDkyLDYgKzEwOTIsOCBAQAogZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmZiX2Zpcm13YXJlX2VkaWQoc3RydWN0IGRldmljZSAqZGV2aWNlKTsKIGV4dGVybiB2b2lkIGZiX2VkaWRfdG9fbW9uc3BlY3ModW5zaWduZWQgY2hhciAqZWRpZCwKIAkJCQlzdHJ1Y3QgZmJfbW9uc3BlY3MgKnNwZWNzKTsKK2V4dGVybiB2b2lkIGZiX2VkaWRfYWRkX21vbnNwZWNzKHVuc2lnbmVkIGNoYXIgKmVkaWQsCisJCQkJIHN0cnVjdCBmYl9tb25zcGVjcyAqc3BlY3MpOwogZXh0ZXJuIHZvaWQgZmJfZGVzdHJveV9tb2RlZGIoc3RydWN0IGZiX3ZpZGVvbW9kZSAqbW9kZWRiKTsKIGV4dGVybiBpbnQgZmJfZmluZF9tb2RlX2N2dChzdHJ1Y3QgZmJfdmlkZW9tb2RlICptb2RlLCBpbnQgbWFyZ2lucywgaW50IHJiKTsKIGV4dGVybiB1bnNpZ25lZCBjaGFyICpmYl9kZGNfcmVhZChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpOwpAQCAtMTE1MCw2ICsxMTUyLDcgQEAKIAogZXh0ZXJuIGNvbnN0IGNoYXIgKmZiX21vZGVfb3B0aW9uOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBmYl92aWRlb21vZGUgdmVzYV9tb2Rlc1tdOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBmYl92aWRlb21vZGUgY2VhX21vZGVzWzY0XTsKIAogc3RydWN0IGZiX21vZGVsaXN0IHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oIGIvaW5jbHVkZS9saW51eC9maWx0ZXIuaAppbmRleCA2OWI0M2RiLi40NTI2NmI3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oCisrKyBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmgKQEAgLTkxLDU0ICs5MSw2IEBACiAjZGVmaW5lICAgICAgICAgQlBGX1RBWCAgICAgICAgIDB4MDAKICNkZWZpbmUgICAgICAgICBCUEZfVFhBICAgICAgICAgMHg4MAogCi1lbnVtIHsKLQlCUEZfU19SRVRfSyA9IDAsCi0JQlBGX1NfUkVUX0EsCi0JQlBGX1NfQUxVX0FERF9LLAotCUJQRl9TX0FMVV9BRERfWCwKLQlCUEZfU19BTFVfU1VCX0ssCi0JQlBGX1NfQUxVX1NVQl9YLAotCUJQRl9TX0FMVV9NVUxfSywKLQlCUEZfU19BTFVfTVVMX1gsCi0JQlBGX1NfQUxVX0RJVl9YLAotCUJQRl9TX0FMVV9BTkRfSywKLQlCUEZfU19BTFVfQU5EX1gsCi0JQlBGX1NfQUxVX09SX0ssCi0JQlBGX1NfQUxVX09SX1gsCi0JQlBGX1NfQUxVX0xTSF9LLAotCUJQRl9TX0FMVV9MU0hfWCwKLQlCUEZfU19BTFVfUlNIX0ssCi0JQlBGX1NfQUxVX1JTSF9YLAotCUJQRl9TX0FMVV9ORUcsCi0JQlBGX1NfTERfV19BQlMsCi0JQlBGX1NfTERfSF9BQlMsCi0JQlBGX1NfTERfQl9BQlMsCi0JQlBGX1NfTERfV19MRU4sCi0JQlBGX1NfTERfV19JTkQsCi0JQlBGX1NfTERfSF9JTkQsCi0JQlBGX1NfTERfQl9JTkQsCi0JQlBGX1NfTERfSU1NLAotCUJQRl9TX0xEWF9XX0xFTiwKLQlCUEZfU19MRFhfQl9NU0gsCi0JQlBGX1NfTERYX0lNTSwKLQlCUEZfU19NSVNDX1RBWCwKLQlCUEZfU19NSVNDX1RYQSwKLQlCUEZfU19BTFVfRElWX0ssCi0JQlBGX1NfTERfTUVNLAotCUJQRl9TX0xEWF9NRU0sCi0JQlBGX1NfU1QsCi0JQlBGX1NfU1RYLAotCUJQRl9TX0pNUF9KQSwKLQlCUEZfU19KTVBfSkVRX0ssCi0JQlBGX1NfSk1QX0pFUV9YLAotCUJQRl9TX0pNUF9KR0VfSywKLQlCUEZfU19KTVBfSkdFX1gsCi0JQlBGX1NfSk1QX0pHVF9LLAotCUJQRl9TX0pNUF9KR1RfWCwKLQlCUEZfU19KTVBfSlNFVF9LLAotCUJQRl9TX0pNUF9KU0VUX1gsCi19OwotCiAjaWZuZGVmIEJQRl9NQVhJTlNOUwogI2RlZmluZSBCUEZfTUFYSU5TTlMgNDA5NgogI2VuZGlmCkBAIC0xNzIsNyArMTI0LDkgQEAKICNkZWZpbmUgU0tGX0FEX01BUksgCTIwCiAjZGVmaW5lIFNLRl9BRF9RVUVVRQkyNAogI2RlZmluZSBTS0ZfQURfSEFUWVBFCTI4Ci0jZGVmaW5lIFNLRl9BRF9NQVgJMzIKKyNkZWZpbmUgU0tGX0FEX1JYSEFTSAkzMgorI2RlZmluZSBTS0ZfQURfQ1BVCTM2CisjZGVmaW5lIFNLRl9BRF9NQVgJNDAKICNkZWZpbmUgU0tGX05FVF9PRkYgICAoLTB4MTAwMDAwKQogI2RlZmluZSBTS0ZfTExfT0ZGICAgICgtMHgyMDAwMDApCiAKQEAgLTE5NCw4ICsxNDgsOCBAQAogc3RydWN0IHNvY2s7CiAKIGV4dGVybiBpbnQgc2tfZmlsdGVyKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci1leHRlcm4gdW5zaWduZWQgaW50IHNrX3J1bl9maWx0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkgIHN0cnVjdCBzb2NrX2ZpbHRlciAqZmlsdGVyLCBpbnQgZmxlbik7CitleHRlcm4gdW5zaWduZWQgaW50IHNrX3J1bl9maWx0ZXIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgIGNvbnN0IHN0cnVjdCBzb2NrX2ZpbHRlciAqZmlsdGVyKTsKIGV4dGVybiBpbnQgc2tfYXR0YWNoX2ZpbHRlcihzdHJ1Y3Qgc29ja19mcHJvZyAqZnByb2csIHN0cnVjdCBzb2NrICpzayk7CiBleHRlcm4gaW50IHNrX2RldGFjaF9maWx0ZXIoc3RydWN0IHNvY2sgKnNrKTsKIGV4dGVybiBpbnQgc2tfY2hrX2ZpbHRlcihzdHJ1Y3Qgc29ja19maWx0ZXIgKmZpbHRlciwgaW50IGZsZW4pOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9maXJld2lyZS5oIGIvaW5jbHVkZS9saW51eC9maXJld2lyZS5oCmluZGV4IDFjZDYzN2UuLjlhM2Y1ZjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZmlyZXdpcmUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ZpcmV3aXJlLmgKQEAgLTMwMiw5ICszMDIsOSBAQAogc3RydWN0IGZ3X3RyYW5zYWN0aW9uIHsKIAlpbnQgbm9kZV9pZDsgLyogVGhlIGdlbmVyYXRpb24gaXMgaW1wbGllZDsgaXQgaXMgYWx3YXlzIHRoZSBjdXJyZW50LiAqLwogCWludCB0bGFiZWw7Ci0JaW50IHRpbWVzdGFtcDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpbms7CiAJc3RydWN0IGZ3X2NhcmQgKmNhcmQ7CisJYm9vbCBpc19zcGxpdF90cmFuc2FjdGlvbjsKIAlzdHJ1Y3QgdGltZXJfbGlzdCBzcGxpdF90aW1lb3V0X3RpbWVyOwogCiAJc3RydWN0IGZ3X3BhY2tldCBwYWNrZXQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzLmggYi9pbmNsdWRlL2xpbnV4L2ZzLmgKaW5kZXggMDkwZjBlYS4uYmFmM2U1NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvZnMuaApAQCAtMzkyLDYgKzM5Miw3IEBACiAjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlbWFwaG9yZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZpZW1hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3JjdWxpc3RfYmwuaD4KIAogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CkBAIC03MzMsMTYgKzczNCwzMSBAQAogI2RlZmluZSBBQ0xfTk9UX0NBQ0hFRCAoKHZvaWQgKikoLTEpKQogCiBzdHJ1Y3QgaW5vZGUgeworCS8qIFJDVSBwYXRoIGxvb2t1cCB0b3VjaGVzIGZvbGxvd2luZzogKi8KKwl1bW9kZV90CQkJaV9tb2RlOworCXVpZF90CQkJaV91aWQ7CisJZ2lkX3QJCQlpX2dpZDsKKwljb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucwkqaV9vcDsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sJKmlfc2I7CisKKwlzcGlubG9ja190CQlpX2xvY2s7CS8qIGlfYmxvY2tzLCBpX2J5dGVzLCBtYXliZSBpX3NpemUgKi8KKwl1bnNpZ25lZCBpbnQJCWlfZmxhZ3M7CisJc3RydWN0IG11dGV4CQlpX211dGV4OworCisJdW5zaWduZWQgbG9uZwkJaV9zdGF0ZTsKKwl1bnNpZ25lZCBsb25nCQlkaXJ0aWVkX3doZW47CS8qIGppZmZpZXMgb2YgZmlyc3QgZGlydHlpbmcgKi8KKwogCXN0cnVjdCBobGlzdF9ub2RlCWlfaGFzaDsKIAlzdHJ1Y3QgbGlzdF9oZWFkCWlfd2JfbGlzdDsJLyogYmFja2luZyBkZXYgSU8gbGlzdCAqLwogCXN0cnVjdCBsaXN0X2hlYWQJaV9scnU7CQkvKiBpbm9kZSBMUlUgbGlzdCAqLwogCXN0cnVjdCBsaXN0X2hlYWQJaV9zYl9saXN0OwotCXN0cnVjdCBsaXN0X2hlYWQJaV9kZW50cnk7CisJdW5pb24geworCQlzdHJ1Y3QgbGlzdF9oZWFkCWlfZGVudHJ5OworCQlzdHJ1Y3QgcmN1X2hlYWQJCWlfcmN1OworCX07CiAJdW5zaWduZWQgbG9uZwkJaV9pbm87CiAJYXRvbWljX3QJCWlfY291bnQ7CiAJdW5zaWduZWQgaW50CQlpX25saW5rOwotCXVpZF90CQkJaV91aWQ7Ci0JZ2lkX3QJCQlpX2dpZDsKIAlkZXZfdAkJCWlfcmRldjsKIAl1bnNpZ25lZCBpbnQJCWlfYmxrYml0czsKIAl1NjQJCQlpX3ZlcnNpb247CkBAIC03NTUsMTMgKzc3MSw4IEBACiAJc3RydWN0IHRpbWVzcGVjCQlpX2N0aW1lOwogCWJsa2NudF90CQlpX2Jsb2NrczsKIAl1bnNpZ25lZCBzaG9ydCAgICAgICAgICBpX2J5dGVzOwotCXVtb2RlX3QJCQlpX21vZGU7Ci0Jc3BpbmxvY2tfdAkJaV9sb2NrOwkvKiBpX2Jsb2NrcywgaV9ieXRlcywgbWF5YmUgaV9zaXplICovCi0Jc3RydWN0IG11dGV4CQlpX211dGV4OwogCXN0cnVjdCByd19zZW1hcGhvcmUJaV9hbGxvY19zZW07Ci0JY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMJKmlfb3A7CiAJY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucwkqaV9mb3A7CS8qIGZvcm1lciAtPmlfb3AtPmRlZmF1bHRfZmlsZV9vcHMgKi8KLQlzdHJ1Y3Qgc3VwZXJfYmxvY2sJKmlfc2I7CiAJc3RydWN0IGZpbGVfbG9jawkqaV9mbG9jazsKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZQkqaV9tYXBwaW5nOwogCXN0cnVjdCBhZGRyZXNzX3NwYWNlCWlfZGF0YTsKQEAgLTc4MiwxMSArNzkzLDYgQEAKIAlzdHJ1Y3QgaGxpc3RfaGVhZAlpX2Zzbm90aWZ5X21hcmtzOwogI2VuZGlmCiAKLQl1bnNpZ25lZCBsb25nCQlpX3N0YXRlOwotCXVuc2lnbmVkIGxvbmcJCWRpcnRpZWRfd2hlbjsJLyogamlmZmllcyBvZiBmaXJzdCBkaXJ0eWluZyAqLwotCi0JdW5zaWduZWQgaW50CQlpX2ZsYWdzOwotCiAjaWZkZWYgQ09ORklHX0lNQQogCS8qIHByb3RlY3RlZCBieSBpX2xvY2sgKi8KIAl1bnNpZ25lZCBpbnQJCWlfcmVhZGNvdW50OyAvKiBzdHJ1Y3QgZmlsZXMgb3BlbiBSTyAqLwpAQCAtMTM3MiwxMyArMTM3OCwxMyBAQAogCWNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICoqc194YXR0cjsKIAogCXN0cnVjdCBsaXN0X2hlYWQJc19pbm9kZXM7CS8qIGFsbCBpbm9kZXMgKi8KLQlzdHJ1Y3QgaGxpc3RfaGVhZAlzX2Fub247CQkvKiBhbm9ueW1vdXMgZGVudHJpZXMgZm9yIChuZnMpIGV4cG9ydGluZyAqLworCXN0cnVjdCBobGlzdF9ibF9oZWFkCXNfYW5vbjsJCS8qIGFub255bW91cyBkZW50cmllcyBmb3IgKG5mcykgZXhwb3J0aW5nICovCiAjaWZkZWYgQ09ORklHX1NNUAogCXN0cnVjdCBsaXN0X2hlYWQgX19wZXJjcHUgKnNfZmlsZXM7CiAjZWxzZQogCXN0cnVjdCBsaXN0X2hlYWQJc19maWxlczsKICNlbmRpZgotCS8qIHNfZGVudHJ5X2xydSBhbmQgc19ucl9kZW50cnlfdW51c2VkIGFyZSBwcm90ZWN0ZWQgYnkgZGNhY2hlX2xvY2sgKi8KKwkvKiBzX2RlbnRyeV9scnUsIHNfbnJfZGVudHJ5X3VudXNlZCBwcm90ZWN0ZWQgYnkgZGNhY2hlLmMgbHJ1IGxvY2tzICovCiAJc3RydWN0IGxpc3RfaGVhZAlzX2RlbnRyeV9scnU7CS8qIHVudXNlZCBkZW50cnkgbHJ1ICovCiAJaW50CQkJc19ucl9kZW50cnlfdW51c2VkOwkvKiAjIG9mIGRlbnRyeSBvbiBscnUgKi8KIApAQCAtMTU0NSw5ICsxNTUxLDE4IEBACiAJaW50ICgqc2V0bGVhc2UpKHN0cnVjdCBmaWxlICosIGxvbmcsIHN0cnVjdCBmaWxlX2xvY2sgKiopOwogfTsKIAorI2RlZmluZSBJUEVSTV9GTEFHX1JDVQkweDAwMDEKKwogc3RydWN0IGlub2RlX29wZXJhdGlvbnMgewotCWludCAoKmNyZWF0ZSkgKHN0cnVjdCBpbm9kZSAqLHN0cnVjdCBkZW50cnkgKixpbnQsIHN0cnVjdCBuYW1laWRhdGEgKik7CiAJc3RydWN0IGRlbnRyeSAqICgqbG9va3VwKSAoc3RydWN0IGlub2RlICosc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgbmFtZWlkYXRhICopOworCXZvaWQgKiAoKmZvbGxvd19saW5rKSAoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgbmFtZWlkYXRhICopOworCWludCAoKnBlcm1pc3Npb24pIChzdHJ1Y3QgaW5vZGUgKiwgaW50LCB1bnNpZ25lZCBpbnQpOworCWludCAoKmNoZWNrX2FjbCkoc3RydWN0IGlub2RlICosIGludCwgdW5zaWduZWQgaW50KTsKKworCWludCAoKnJlYWRsaW5rKSAoc3RydWN0IGRlbnRyeSAqLCBjaGFyIF9fdXNlciAqLGludCk7CisJdm9pZCAoKnB1dF9saW5rKSAoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgbmFtZWlkYXRhICosIHZvaWQgKik7CisKKwlpbnQgKCpjcmVhdGUpIChzdHJ1Y3QgaW5vZGUgKixzdHJ1Y3QgZGVudHJ5ICosaW50LCBzdHJ1Y3QgbmFtZWlkYXRhICopOwogCWludCAoKmxpbmspIChzdHJ1Y3QgZGVudHJ5ICosc3RydWN0IGlub2RlICosc3RydWN0IGRlbnRyeSAqKTsKIAlpbnQgKCp1bmxpbmspIChzdHJ1Y3QgaW5vZGUgKixzdHJ1Y3QgZGVudHJ5ICopOwogCWludCAoKnN5bWxpbmspIChzdHJ1Y3QgaW5vZGUgKixzdHJ1Y3QgZGVudHJ5ICosY29uc3QgY2hhciAqKTsKQEAgLTE1NTYsMTIgKzE1NzEsNyBAQAogCWludCAoKm1rbm9kKSAoc3RydWN0IGlub2RlICosc3RydWN0IGRlbnRyeSAqLGludCxkZXZfdCk7CiAJaW50ICgqcmVuYW1lKSAoc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKiwKIAkJCXN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICopOwotCWludCAoKnJlYWRsaW5rKSAoc3RydWN0IGRlbnRyeSAqLCBjaGFyIF9fdXNlciAqLGludCk7Ci0Jdm9pZCAqICgqZm9sbG93X2xpbmspIChzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBuYW1laWRhdGEgKik7Ci0Jdm9pZCAoKnB1dF9saW5rKSAoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgbmFtZWlkYXRhICosIHZvaWQgKik7CiAJdm9pZCAoKnRydW5jYXRlKSAoc3RydWN0IGlub2RlICopOwotCWludCAoKnBlcm1pc3Npb24pIChzdHJ1Y3QgaW5vZGUgKiwgaW50KTsKLQlpbnQgKCpjaGVja19hY2wpKHN0cnVjdCBpbm9kZSAqLCBpbnQpOwogCWludCAoKnNldGF0dHIpIChzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBpYXR0ciAqKTsKIAlpbnQgKCpnZXRhdHRyKSAoc3RydWN0IHZmc21vdW50ICptbnQsIHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGtzdGF0ICopOwogCWludCAoKnNldHhhdHRyKSAoc3RydWN0IGRlbnRyeSAqLCBjb25zdCBjaGFyICosY29uc3Qgdm9pZCAqLHNpemVfdCxpbnQpOwpAQCAtMTU3Myw3ICsxNTgzLDcgQEAKIAkJCSAgbG9mZl90IGxlbik7CiAJaW50ICgqZmllbWFwKShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpZW1hcF9leHRlbnRfaW5mbyAqLCB1NjQgc3RhcnQsCiAJCSAgICAgIHU2NCBsZW4pOwotfTsKK30gX19fX2NhY2hlbGluZV9hbGlnbmVkOwogCiBzdHJ1Y3Qgc2VxX2ZpbGU7CiAKQEAgLTIxNTgsOCArMjE2OCw4IEBACiAjZW5kaWYKIGV4dGVybiBpbnQgbm90aWZ5X2NoYW5nZShzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBpYXR0ciAqKTsKIGV4dGVybiBpbnQgaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKiwgaW50KTsKLWV4dGVybiBpbnQgZ2VuZXJpY19wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqLCBpbnQsCi0JCWludCAoKmNoZWNrX2FjbCkoc3RydWN0IGlub2RlICosIGludCkpOworZXh0ZXJuIGludCBnZW5lcmljX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICosIGludCwgdW5zaWduZWQgaW50LAorCQlpbnQgKCpjaGVja19hY2wpKHN0cnVjdCBpbm9kZSAqLCBpbnQsIHVuc2lnbmVkIGludCkpOwogCiBzdGF0aWMgaW5saW5lIGJvb2wgZXhlY3V0ZV9vayhzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewpAQCAtMjIzMCw2ICsyMjQwLDcgQEAKIGV4dGVybiB2b2lkIGVuZF93cml0ZWJhY2soc3RydWN0IGlub2RlICopOwogZXh0ZXJuIHZvaWQgX19kZXN0cm95X2lub2RlKHN0cnVjdCBpbm9kZSAqKTsKIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKm5ld19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7CitleHRlcm4gdm9pZCBmcmVlX2lub2RlX25vbnJjdShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIGV4dGVybiBpbnQgc2hvdWxkX3JlbW92ZV9zdWlkKHN0cnVjdCBkZW50cnkgKik7CiBleHRlcm4gaW50IGZpbGVfcmVtb3ZlX3N1aWQoc3RydWN0IGZpbGUgKik7CiAKQEAgLTI0NDYsNiArMjQ1NywxMCBAQAogewogCWlub190IHJlczsKIAorCS8qCisJICogRG9uJ3Qgc3RyaWN0bHkgbmVlZCBkX2xvY2sgaGVyZT8gSWYgdGhlIHBhcmVudCBpbm8gY291bGQgY2hhbmdlCisJICogdGhlbiBzdXJlbHkgd2UnZCBoYXZlIGEgZGVlcGVyIHJhY2UgaW4gdGhlIGNhbGxlcj8KKwkgKi8KIAlzcGluX2xvY2soJmRlbnRyeS0+ZF9sb2NrKTsKIAlyZXMgPSBkZW50cnktPmRfcGFyZW50LT5kX2lub2RlLT5pX2lubzsKIAlzcGluX3VubG9jaygmZGVudHJ5LT5kX2xvY2spOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mc19zdHJ1Y3QuaCBiL2luY2x1ZGUvbGludXgvZnNfc3RydWN0LmgKaW5kZXggYTQyYjViZi4uMDAzZGMwZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mc19zdHJ1Y3QuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ZzX3N0cnVjdC5oCkBAIC0yLDEwICsyLDEzIEBACiAjZGVmaW5lIF9MSU5VWF9GU19TVFJVQ1RfSAogCiAjaW5jbHVkZSA8bGludXgvcGF0aC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvc2VxbG9jay5oPgogCiBzdHJ1Y3QgZnNfc3RydWN0IHsKIAlpbnQgdXNlcnM7CiAJc3BpbmxvY2tfdCBsb2NrOworCXNlcWNvdW50X3Qgc2VxOwogCWludCB1bWFzazsKIAlpbnQgaW5fZXhlYzsKIAlzdHJ1Y3QgcGF0aCByb290LCBwd2Q7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Zzbm90aWZ5LmggYi9pbmNsdWRlL2xpbnV4L2Zzbm90aWZ5LmgKaW5kZXggYjEwYmNkZS4uMmE1M2YxMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mc25vdGlmeS5oCisrKyBiL2luY2x1ZGUvbGludXgvZnNub3RpZnkuaApAQCAtMTcsNyArMTcsNiBAQAogCiAvKgogICogZnNub3RpZnlfZF9pbnN0YW50aWF0ZSAtIGluc3RhbnRpYXRlIGEgZGVudHJ5IGZvciBpbm9kZQotICogQ2FsbGVkIHdpdGggZGNhY2hlX2xvY2sgaGVsZC4KICAqLwogc3RhdGljIGlubGluZSB2b2lkIGZzbm90aWZ5X2RfaW5zdGFudGlhdGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogCQkJCQkgIHN0cnVjdCBpbm9kZSAqaW5vZGUpCkBAIC02Miw3ICs2MSw2IEBACiAKIC8qCiAgKiBmc25vdGlmeV9kX21vdmUgLSBkZW50cnkgaGFzIGJlZW4gbW92ZWQKLSAqIENhbGxlZCB3aXRoIGRjYWNoZV9sb2NrIGFuZCBkZW50cnktPmRfbG9jayBoZWxkLgogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgZnNub3RpZnlfZF9tb3ZlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnNub3RpZnlfYmFja2VuZC5oIGIvaW5jbHVkZS9saW51eC9mc25vdGlmeV9iYWNrZW5kLmgKaW5kZXggNzM4MDc2My4uNjlhZDg5YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mc25vdGlmeV9iYWNrZW5kLmgKKysrIGIvaW5jbHVkZS9saW51eC9mc25vdGlmeV9iYWNrZW5kLmgKQEAgLTMyOSw5ICszMjksMTUgQEAKIHsKIAlzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQ7CiAKLQlhc3NlcnRfc3Bpbl9sb2NrZWQoJmRjYWNoZV9sb2NrKTsKIAlhc3NlcnRfc3Bpbl9sb2NrZWQoJmRlbnRyeS0+ZF9sb2NrKTsKIAorCS8qCisJICogU2VyaWFsaXNhdGlvbiBvZiBzZXR0aW5nIFBBUkVOVF9XQVRDSEVEIG9uIHRoZSBkZW50cmllcyBpcyBwcm92aWRlZAorCSAqIGJ5IGRfbG9jay4gSWYgaW5vdGlmeV9pbm9kZV93YXRjaGVkIGNoYW5nZXMgYWZ0ZXIgd2UgaGF2ZSB0YWtlbgorCSAqIGRfbG9jaywgdGhlIGZvbGxvd2luZyBfX2Zzbm90aWZ5X3VwZGF0ZV9jaGlsZF9kZW50cnlfZmxhZ3MgY2FsbCB3aWxsCisJICogZmluZCBvdXIgZW50cnksIHNvIGl0IHdpbGwgc3BpbiB1bnRpbCB3ZSBjb21wbGV0ZSBoZXJlLCBhbmQgdXBkYXRlCisJICogdXMgd2l0aCB0aGUgbmV3IHN0YXRlLgorCSAqLwogCXBhcmVudCA9IGRlbnRyeS0+ZF9wYXJlbnQ7CiAJaWYgKHBhcmVudC0+ZF9pbm9kZSAmJiBmc25vdGlmeV9pbm9kZV93YXRjaGVzX2NoaWxkcmVuKHBhcmVudC0+ZF9pbm9kZSkpCiAJCWRlbnRyeS0+ZF9mbGFncyB8PSBEQ0FDSEVfRlNOT1RJRllfUEFSRU5UX1dBVENIRUQ7CkBAIC0zNDEsMTUgKzM0NywxMiBAQAogCiAvKgogICogZnNub3RpZnlfZF9pbnN0YW50aWF0ZSAtIGluc3RhbnRpYXRlIGEgZGVudHJ5IGZvciBpbm9kZQotICogQ2FsbGVkIHdpdGggZGNhY2hlX2xvY2sgaGVsZC4KICAqLwogc3RhdGljIGlubGluZSB2b2lkIF9fZnNub3RpZnlfZF9pbnN0YW50aWF0ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJaWYgKCFpbm9kZSkKIAkJcmV0dXJuOwogCi0JYXNzZXJ0X3NwaW5fbG9ja2VkKCZkY2FjaGVfbG9jayk7Ci0KIAlzcGluX2xvY2soJmRlbnRyeS0+ZF9sb2NrKTsKIAlfX2Zzbm90aWZ5X3VwZGF0ZV9kY2FjaGVfZmxhZ3MoZGVudHJ5KTsKIAlzcGluX3VubG9jaygmZGVudHJ5LT5kX2xvY2spOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mdHJhY2VfZXZlbnQuaCBiL2luY2x1ZGUvbGludXgvZnRyYWNlX2V2ZW50LmgKaW5kZXggOGJlYWJiOS4uNDdlMzk5NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mdHJhY2VfZXZlbnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Z0cmFjZV9ldmVudC5oCkBAIC0xNTQsMTIgKzE1NCwxNCBAQAogCVRSQUNFX0VWRU5UX0ZMX0VOQUJMRURfQklULAogCVRSQUNFX0VWRU5UX0ZMX0ZJTFRFUkVEX0JJVCwKIAlUUkFDRV9FVkVOVF9GTF9SRUNPUkRFRF9DTURfQklULAorCVRSQUNFX0VWRU5UX0ZMX0NBUF9BTllfQklULAogfTsKIAogZW51bSB7CiAJVFJBQ0VfRVZFTlRfRkxfRU5BQkxFRAkJPSAoMSA8PCBUUkFDRV9FVkVOVF9GTF9FTkFCTEVEX0JJVCksCiAJVFJBQ0VfRVZFTlRfRkxfRklMVEVSRUQJCT0gKDEgPDwgVFJBQ0VfRVZFTlRfRkxfRklMVEVSRURfQklUKSwKIAlUUkFDRV9FVkVOVF9GTF9SRUNPUkRFRF9DTUQJPSAoMSA8PCBUUkFDRV9FVkVOVF9GTF9SRUNPUkRFRF9DTURfQklUKSwKKwlUUkFDRV9FVkVOVF9GTF9DQVBfQU5ZCQk9ICgxIDw8IFRSQUNFX0VWRU5UX0ZMX0NBUF9BTllfQklUKSwKIH07CiAKIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCB7CkBAIC0xOTYsNiArMTk4LDE0IEBACiAjZW5kaWYKIH07CiAKKyNkZWZpbmUgX19UUkFDRV9FVkVOVF9GTEFHUyhuYW1lLCB2YWx1ZSkJCQkJXAorCXN0YXRpYyBpbnQgX19pbml0IHRyYWNlX2luaXRfZmxhZ3NfIyNuYW1lKHZvaWQpCQkJXAorCXsJCQkJCQkJCVwKKwkJZXZlbnRfIyNuYW1lLmZsYWdzID0gdmFsdWU7CQkJCVwKKwkJcmV0dXJuIDA7CQkJCQkJXAorCX0JCQkJCQkJCVwKKwllYXJseV9pbml0Y2FsbCh0cmFjZV9pbml0X2ZsYWdzXyMjbmFtZSk7CisKICNkZWZpbmUgUEVSRl9NQVhfVFJBQ0VfU0laRQkyMDQ4CiAKICNkZWZpbmUgTUFYX0ZJTFRFUl9QUkVECQkzMgpAQCAtMjE1LDYgKzIyNSwxMCBAQAogCUZJTFRFUl9QVFJfU1RSSU5HLAogfTsKIAorI2RlZmluZSBFVkVOVF9TVE9SQUdFX1NJWkUgMTI4CitleHRlcm4gc3RydWN0IG11dGV4IGV2ZW50X3N0b3JhZ2VfbXV0ZXg7CitleHRlcm4gY2hhciBldmVudF9zdG9yYWdlW0VWRU5UX1NUT1JBR0VfU0laRV07CisKIGV4dGVybiBpbnQgdHJhY2VfZXZlbnRfcmF3X2luaXQoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsKTsKIGV4dGVybiBpbnQgdHJhY2VfZGVmaW5lX2ZpZWxkKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCwgY29uc3QgY2hhciAqdHlwZSwKIAkJCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGludCBvZmZzZXQsIGludCBzaXplLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mdXNlLmggYi9pbmNsdWRlL2xpbnV4L2Z1c2UuaAppbmRleCBjM2M1NzhlLi5kNDY0ZGU1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Z1c2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Z1c2UuaApAQCAtNDEsNiArNDEsMTIgQEAKICAqIDcuMTUKICAqICAtIGFkZCBzdG9yZSBub3RpZnkKICAqICAtIGFkZCByZXRyaWV2ZSBub3RpZnkKKyAqCisgKiA3LjE2CisgKiAgLSBhZGQgQkFUQ0hfRk9SR0VUIHJlcXVlc3QKKyAqICAtIEZVU0VfSU9DVExfVU5SRVNUUklDVEVEIHNoYWxsIG5vdyByZXR1cm4gd2l0aCBhcnJheSBvZiAnc3RydWN0CisgKiAgICBmdXNlX2lvY3RsX2lvdmVjJyBpbnN0ZWFkIG9mIGFtYmlndW91cyAnc3RydWN0IGlvdmVjJworICogIC0gYWRkIEZVU0VfSU9DVExfMzJCSVQgZmxhZwogICovCiAKICNpZm5kZWYgX0xJTlVYX0ZVU0VfSApAQCAtNzIsNyArNzgsNyBAQAogI2RlZmluZSBGVVNFX0tFUk5FTF9WRVJTSU9OIDcKIAogLyoqIE1pbm9yIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgaW50ZXJmYWNlICovCi0jZGVmaW5lIEZVU0VfS0VSTkVMX01JTk9SX1ZFUlNJT04gMTUKKyNkZWZpbmUgRlVTRV9LRVJORUxfTUlOT1JfVkVSU0lPTiAxNgogCiAvKiogVGhlIG5vZGUgSUQgb2YgdGhlIHJvb3QgaW5vZGUgKi8KICNkZWZpbmUgRlVTRV9ST09UX0lEIDEKQEAgLTIwMCwxMiArMjA2LDE0IEBACiAgKiBGVVNFX0lPQ1RMX0NPTVBBVDogMzJiaXQgY29tcGF0IGlvY3RsIG9uIDY0Yml0IG1hY2hpbmUKICAqIEZVU0VfSU9DVExfVU5SRVNUUklDVEVEOiBub3QgcmVzdHJpY3RlZCB0byB3ZWxsLWZvcm1lZCBpb2N0bHMsIHJldHJ5IGFsbG93ZWQKICAqIEZVU0VfSU9DVExfUkVUUlk6IHJldHJ5IHdpdGggbmV3IGlvdmVjcworICogRlVTRV9JT0NUTF8zMkJJVDogMzJiaXQgaW9jdGwKICAqCiAgKiBGVVNFX0lPQ1RMX01BWF9JT1Y6IG1heGltdW0gb2YgaW5faW92ZWNzICsgb3V0X2lvdmVjcwogICovCiAjZGVmaW5lIEZVU0VfSU9DVExfQ09NUEFUCSgxIDw8IDApCiAjZGVmaW5lIEZVU0VfSU9DVExfVU5SRVNUUklDVEVECSgxIDw8IDEpCiAjZGVmaW5lIEZVU0VfSU9DVExfUkVUUlkJKDEgPDwgMikKKyNkZWZpbmUgRlVTRV9JT0NUTF8zMkJJVAkoMSA8PCAzKQogCiAjZGVmaW5lIEZVU0VfSU9DVExfTUFYX0lPVgkyNTYKIApAQCAtMjU2LDYgKzI2NCw3IEBACiAJRlVTRV9JT0NUTCAgICAgICAgID0gMzksCiAJRlVTRV9QT0xMICAgICAgICAgID0gNDAsCiAJRlVTRV9OT1RJRllfUkVQTFkgID0gNDEsCisJRlVTRV9CQVRDSF9GT1JHRVQgID0gNDIsCiAKIAkvKiBDVVNFIHNwZWNpZmljIG9wZXJhdGlvbnMgKi8KIAlDVVNFX0lOSVQgICAgICAgICAgPSA0MDk2LApAQCAtMjkwLDYgKzI5OSwxNiBAQAogCV9fdTY0CW5sb29rdXA7CiB9OwogCitzdHJ1Y3QgZnVzZV9mb3JnZXRfb25lIHsKKwlfX3U2NAlub2RlaWQ7CisJX191NjQJbmxvb2t1cDsKK307CisKK3N0cnVjdCBmdXNlX2JhdGNoX2ZvcmdldF9pbiB7CisJX191MzIJY291bnQ7CisJX191MzIJZHVtbXk7Cit9OworCiBzdHJ1Y3QgZnVzZV9nZXRhdHRyX2luIHsKIAlfX3UzMglnZXRhdHRyX2ZsYWdzOwogCV9fdTMyCWR1bW15OwpAQCAtNTEwLDYgKzUyOSwxMSBAQAogCV9fdTMyCW91dF9zaXplOwogfTsKIAorc3RydWN0IGZ1c2VfaW9jdGxfaW92ZWMgeworCV9fdTY0CWJhc2U7CisJX191NjQJbGVuOworfTsKKwogc3RydWN0IGZ1c2VfaW9jdGxfb3V0IHsKIAlfX3MzMglyZXN1bHQ7CiAJX191MzIJZmxhZ3M7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2dlbmVyaWNfYWNsLmggYi9pbmNsdWRlL2xpbnV4L2dlbmVyaWNfYWNsLmgKaW5kZXggNTc0YmVhNC4uMDQzN2UzNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9nZW5lcmljX2FjbC5oCisrKyBiL2luY2x1ZGUvbGludXgvZ2VuZXJpY19hY2wuaApAQCAtMTAsNiArMTAsNiBAQAogCiBpbnQgZ2VuZXJpY19hY2xfaW5pdChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGlub2RlICopOwogaW50IGdlbmVyaWNfYWNsX2NobW9kKHN0cnVjdCBpbm9kZSAqKTsKLWludCBnZW5lcmljX2NoZWNrX2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzayk7CitpbnQgZ2VuZXJpY19jaGVja19hY2woc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2ssIHVuc2lnbmVkIGludCBmbGFncyk7CiAKICNlbmRpZiAvKiBMSU5VWF9HRU5FUklDX0FDTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2hpZC5oIGIvaW5jbHVkZS9saW51eC9oaWQuaAppbmRleCBiYjBmNTZmLi4yMGI5ODAxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2hpZC5oCisrKyBiL2luY2x1ZGUvbGludXgvaGlkLmgKQEAgLTgyMCw2ICs4MjAsNDkgQEAKIAloZGV2LT5sbF9kcml2ZXItPnN0b3AoaGRldik7CiB9CiAKKy8qKgorICogaGlkX2h3X29wZW4gLSBzaWduYWwgdW5kZXJsYXlpbmcgSFcgdG8gc3RhcnQgZGVsaXZlcmluZyBldmVudHMKKyAqCisgKiBAaGRldjogaGlkIGRldmljZQorICoKKyAqIFRlbGwgdW5kZXJseWluZyBIVyB0byBzdGFydCBkZWxpdmVyaW5nIGV2ZW50cyBmcm9tIHRoZSBkZXZpY2UuCisgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgc29tZXRpbWUgYWZ0ZXIgc3VjY2Vzc2Z1bCBjYWxsCisgKiB0byBoaWRfaGl3X3N0YXJ0KCkuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IF9fbXVzdF9jaGVjayBoaWRfaHdfb3BlbihzdHJ1Y3QgaGlkX2RldmljZSAqaGRldikKK3sKKwlyZXR1cm4gaGRldi0+bGxfZHJpdmVyLT5vcGVuKGhkZXYpOworfQorCisvKioKKyAqIGhpZF9od19jbG9zZSAtIHNpZ25hbCB1bmRlcmxheWluZyBIVyB0byBzdG9wIGRlbGl2ZXJpbmcgZXZlbnRzCisgKgorICogQGhkZXY6IGhpZCBkZXZpY2UKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGluZGljYXRlcyB0aGF0IHdlIGFyZSBub3QgaW50ZXJlc3RlZCBpbiB0aGUgZXZlbnRzCisgKiBmcm9tIHRoaXMgZGV2aWNlIGFueW1vcmUuIERlbGl2ZXJ5IG9mIGV2ZW50cyBtYXkgb3IgbWF5IG5vdCBzdG9wLAorICogZGVwZW5kaW5nIG9uIHRoZSBudW1iZXIgb2YgdXNlcnMgc3RpbGwgb3V0c3RhbmRpbmcuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBoaWRfaHdfY2xvc2Uoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpCit7CisJaGRldi0+bGxfZHJpdmVyLT5jbG9zZShoZGV2KTsKK30KKworLyoqCisgKiBoaWRfaHdfcG93ZXIgLSByZXF1ZXN0cyB1bmRlcmx5aW5nIEhXIHRvIGdvIGludG8gZ2l2ZW4gcG93ZXIgbW9kZQorICoKKyAqIEBoZGV2OiBoaWQgZGV2aWNlCisgKiBAbGV2ZWw6IHJlcXVlc3RlZCBwb3dlciBsZXZlbCAob25lIG9mICVQTV9ISU5UXyogZGVmaW5lcykKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJlcXVlc3RzIHVuZGVybHlpbmcgaGFyZHdhcmUgdG8gZW50ZXIgcmVxdWVzdGVkIHBvd2VyCisgKiBtb2RlLgorICovCisKK3N0YXRpYyBpbmxpbmUgaW50IGhpZF9od19wb3dlcihzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgaW50IGxldmVsKQoreworCXJldHVybiBoZGV2LT5sbF9kcml2ZXItPnBvd2VyID8gaGRldi0+bGxfZHJpdmVyLT5wb3dlcihoZGV2LCBsZXZlbCkgOiAwOworfQorCiB2b2lkIGhpZF9yZXBvcnRfcmF3X2V2ZW50KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIGludCB0eXBlLCB1OCAqZGF0YSwgaW50IHNpemUsCiAJCWludCBpbnRlcnJ1cHQpOwogCkBAIC04MzgsMTIgKzg4MSwzMiBAQAogI2RlZmluZSBoaWRfcGlkZmZfaW5pdCBOVUxMCiAjZW5kaWYKIAotI2RlZmluZSBkYmdfaGlkKGZvcm1hdCwgYXJnLi4uKSBpZiAoaGlkX2RlYnVnKSBcCi0JCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAiIGZvcm1hdCAsXAotCQkJCV9fRklMRV9fICwgIyMgYXJnKQotI2RlZmluZSBlcnJfaGlkKGZvcm1hdCwgYXJnLi4uKSBwcmludGsoS0VSTl9FUlIgIiVzOiAiIGZvcm1hdCAiXG4iICwgXAotCQlfX0ZJTEVfXyAsICMjIGFyZykKLSNlbmRpZiAvKiBISURfRkYgKi8KKyNkZWZpbmUgZGJnX2hpZChmb3JtYXQsIGFyZy4uLikJCQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCWlmIChoaWRfZGVidWcpCQkJCQkJCVwKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAiIGZvcm1hdCwgX19GSUxFX18sICMjYXJnKTsJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBoaWRfcHJpbnRrKGxldmVsLCBoaWQsIGZtdCwgYXJnLi4uKQkJXAorCWRldl9wcmludGsobGV2ZWwsICYoaGlkKS0+ZGV2LCBmbXQsICMjYXJnKQorI2RlZmluZSBoaWRfZW1lcmcoaGlkLCBmbXQsIGFyZy4uLikJCQlcCisJZGV2X2VtZXJnKCYoaGlkKS0+ZGV2LCBmbXQsICMjYXJnKQorI2RlZmluZSBoaWRfY3JpdChoaWQsIGZtdCwgYXJnLi4uKQkJCVwKKwlkZXZfY3JpdCgmKGhpZCktPmRldiwgZm10LCAjI2FyZykKKyNkZWZpbmUgaGlkX2FsZXJ0KGhpZCwgZm10LCBhcmcuLi4pCQkJXAorCWRldl9hbGVydCgmKGhpZCktPmRldiwgZm10LCAjI2FyZykKKyNkZWZpbmUgaGlkX2VycihoaWQsIGZtdCwgYXJnLi4uKQkJCVwKKwlkZXZfZXJyKCYoaGlkKS0+ZGV2LCBmbXQsICMjYXJnKQorI2RlZmluZSBoaWRfbm90aWNlKGhpZCwgZm10LCBhcmcuLi4pCQkJXAorCWRldl9ub3RpY2UoJihoaWQpLT5kZXYsIGZtdCwgIyNhcmcpCisjZGVmaW5lIGhpZF93YXJuKGhpZCwgZm10LCBhcmcuLi4pCQkJXAorCWRldl93YXJuKCYoaGlkKS0+ZGV2LCBmbXQsICMjYXJnKQorI2RlZmluZSBoaWRfaW5mbyhoaWQsIGZtdCwgYXJnLi4uKQkJCVwKKwlkZXZfaW5mbygmKGhpZCktPmRldiwgZm10LCAjI2FyZykKKyNkZWZpbmUgaGlkX2RiZyhoaWQsIGZtdCwgYXJnLi4uKQkJCVwKKwlkZXZfZGJnKCYoaGlkKS0+ZGV2LCBmbXQsICMjYXJnKQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9oaWdobWVtLmggYi9pbmNsdWRlL2xpbnV4L2hpZ2htZW0uaAppbmRleCBiNjc2YzU4Li4zYTkzZjczIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2hpZ2htZW0uaAorKysgYi9pbmNsdWRlL2xpbnV4L2hpZ2htZW0uaApAQCAtODEsNyArODEsOCBAQAogCiBzdGF0aWMgaW5saW5lIGludCBrbWFwX2F0b21pY19pZHhfcHVzaCh2b2lkKQogewotCWludCBpZHggPSBfX2dldF9jcHVfdmFyKF9fa21hcF9hdG9taWNfaWR4KSsrOworCWludCBpZHggPSBfX3RoaXNfY3B1X2luY19yZXR1cm4oX19rbWFwX2F0b21pY19pZHgpIC0gMTsKKwogI2lmZGVmIENPTkZJR19ERUJVR19ISUdITUVNCiAJV0FSTl9PTl9PTkNFKGluX2lycSgpICYmICFpcnFzX2Rpc2FibGVkKCkpOwogCUJVR19PTihpZHggPiBLTV9UWVBFX05SKTsKQEAgLTkxLDE2ICs5MiwxOCBAQAogCiBzdGF0aWMgaW5saW5lIGludCBrbWFwX2F0b21pY19pZHgodm9pZCkKIHsKLQlyZXR1cm4gX19nZXRfY3B1X3ZhcihfX2ttYXBfYXRvbWljX2lkeCkgLSAxOworCXJldHVybiBfX3RoaXNfY3B1X3JlYWQoX19rbWFwX2F0b21pY19pZHgpIC0gMTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQga21hcF9hdG9taWNfaWR4X3BvcCh2b2lkKQorc3RhdGljIGlubGluZSB2b2lkIGttYXBfYXRvbWljX2lkeF9wb3Aodm9pZCkKIHsKLQlpbnQgaWR4ID0gLS1fX2dldF9jcHVfdmFyKF9fa21hcF9hdG9taWNfaWR4KTsKICNpZmRlZiBDT05GSUdfREVCVUdfSElHSE1FTQorCWludCBpZHggPSBfX3RoaXNfY3B1X2RlY19yZXR1cm4oX19rbWFwX2F0b21pY19pZHgpOworCiAJQlVHX09OKGlkeCA8IDApOworI2Vsc2UKKwlfX3RoaXNfY3B1X2RlYyhfX2ttYXBfYXRvbWljX2lkeCk7CiAjZW5kaWYKLQlyZXR1cm4gaWR4OwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHJ0aW1lci5oIGIvaW5jbHVkZS9saW51eC9ocnRpbWVyLmgKaW5kZXggZmQwYzFiOC4uZjM3NmRkYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ocnRpbWVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9ocnRpbWVyLmgKQEAgLTIyLDcgKzIyLDcgQEAKICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KLQorI2luY2x1ZGUgPGxpbnV4L3RpbWVycXVldWUuaD4KIAogc3RydWN0IGhydGltZXJfY2xvY2tfYmFzZTsKIHN0cnVjdCBocnRpbWVyX2NwdV9iYXNlOwpAQCAtNzksOCArNzksOCBAQAogCiAvKioKICAqIHN0cnVjdCBocnRpbWVyIC0gdGhlIGJhc2ljIGhydGltZXIgc3RydWN0dXJlCi0gKiBAbm9kZToJcmVkIGJsYWNrIHRyZWUgbm9kZSBmb3IgdGltZSBvcmRlcmVkIGluc2VydGlvbgotICogQF9leHBpcmVzOgl0aGUgYWJzb2x1dGUgZXhwaXJ5IHRpbWUgaW4gdGhlIGhydGltZXJzIGludGVybmFsCisgKiBAbm9kZToJdGltZXJxdWV1ZSBub2RlLCB3aGljaCBhbHNvIG1hbmFnZXMgbm9kZS5leHBpcmVzLAorICoJCXRoZSBhYnNvbHV0ZSBleHBpcnkgdGltZSBpbiB0aGUgaHJ0aW1lcnMgaW50ZXJuYWwKICAqCQlyZXByZXNlbnRhdGlvbi4gVGhlIHRpbWUgaXMgcmVsYXRlZCB0byB0aGUgY2xvY2sgb24KICAqCQl3aGljaCB0aGUgdGltZXIgaXMgYmFzZWQuIElzIHNldHVwIGJ5IGFkZGluZwogICoJCXNsYWNrIHRvIHRoZSBfc29mdGV4cGlyZXMgdmFsdWUuIEZvciBub24gcmFuZ2UgdGltZXJzCkBAIC0xMDEsOCArMTAxLDcgQEAKICAqIFRoZSBocnRpbWVyIHN0cnVjdHVyZSBtdXN0IGJlIGluaXRpYWxpemVkIGJ5IGhydGltZXJfaW5pdCgpCiAgKi8KIHN0cnVjdCBocnRpbWVyIHsKLQlzdHJ1Y3QgcmJfbm9kZQkJCW5vZGU7Ci0Ja3RpbWVfdAkJCQlfZXhwaXJlczsKKwlzdHJ1Y3QgdGltZXJxdWV1ZV9ub2RlCQlub2RlOwogCWt0aW1lX3QJCQkJX3NvZnRleHBpcmVzOwogCWVudW0gaHJ0aW1lcl9yZXN0YXJ0CQkoKmZ1bmN0aW9uKShzdHJ1Y3QgaHJ0aW1lciAqKTsKIAlzdHJ1Y3QgaHJ0aW1lcl9jbG9ja19iYXNlCSpiYXNlOwpAQCAtMTMyLDcgKzEzMSw2IEBACiAgKiBAaW5kZXg6CQljbG9jayB0eXBlIGluZGV4IGZvciBwZXJfY3B1IHN1cHBvcnQgd2hlbiBtb3ZpbmcgYQogICoJCQl0aW1lciB0byBhIGJhc2Ugb24gYW5vdGhlciBjcHUuCiAgKiBAYWN0aXZlOgkJcmVkIGJsYWNrIHRyZWUgcm9vdCBub2RlIGZvciB0aGUgYWN0aXZlIHRpbWVycwotICogQGZpcnN0OgkJcG9pbnRlciB0byB0aGUgdGltZXIgbm9kZSB3aGljaCBleHBpcmVzIGZpcnN0CiAgKiBAcmVzb2x1dGlvbjoJCXRoZSByZXNvbHV0aW9uIG9mIHRoZSBjbG9jaywgaW4gbmFub3NlY29uZHMKICAqIEBnZXRfdGltZToJCWZ1bmN0aW9uIHRvIHJldHJpZXZlIHRoZSBjdXJyZW50IHRpbWUgb2YgdGhlIGNsb2NrCiAgKiBAc29mdGlycV90aW1lOgl0aGUgdGltZSB3aGVuIHJ1bm5pbmcgdGhlIGhydGltZXIgcXVldWUgaW4gdGhlIHNvZnRpcnEKQEAgLTE0MSw4ICsxMzksNyBAQAogc3RydWN0IGhydGltZXJfY2xvY2tfYmFzZSB7CiAJc3RydWN0IGhydGltZXJfY3B1X2Jhc2UJKmNwdV9iYXNlOwogCWNsb2NraWRfdAkJaW5kZXg7Ci0Jc3RydWN0IHJiX3Jvb3QJCWFjdGl2ZTsKLQlzdHJ1Y3QgcmJfbm9kZQkJKmZpcnN0OworCXN0cnVjdCB0aW1lcnF1ZXVlX2hlYWQJYWN0aXZlOwogCWt0aW1lX3QJCQlyZXNvbHV0aW9uOwogCWt0aW1lX3QJCQkoKmdldF90aW1lKSh2b2lkKTsKIAlrdGltZV90CQkJc29mdGlycV90aW1lOwpAQCAtMTU4LDcgKzE1NSw2IEBACiAgKiBAbG9jazoJCWxvY2sgcHJvdGVjdGluZyB0aGUgYmFzZSBhbmQgYXNzb2NpYXRlZCBjbG9jayBiYXNlcwogICoJCQlhbmQgdGltZXJzCiAgKiBAY2xvY2tfYmFzZToJCWFycmF5IG9mIGNsb2NrIGJhc2VzIGZvciB0aGlzIGNwdQotICogQGN1cnJfdGltZXI6CQl0aGUgdGltZXIgd2hpY2ggaXMgZXhlY3V0aW5nIGEgY2FsbGJhY2sgcmlnaHQgbm93CiAgKiBAZXhwaXJlc19uZXh0OglhYnNvbHV0ZSB0aW1lIG9mIHRoZSBuZXh0IGV2ZW50IHdoaWNoIHdhcyBzY2hlZHVsZWQKICAqCQkJdmlhIGNsb2NrX3NldF9uZXh0X2V2ZW50KCkKICAqIEBocmVzX2FjdGl2ZToJU3RhdGUgb2YgaGlnaCByZXNvbHV0aW9uIG1vZGUKQEAgLTE4NCw0MyArMTgwLDQzIEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBocnRpbWVyX3NldF9leHBpcmVzKHN0cnVjdCBocnRpbWVyICp0aW1lciwga3RpbWVfdCB0aW1lKQogewotCXRpbWVyLT5fZXhwaXJlcyA9IHRpbWU7CisJdGltZXItPm5vZGUuZXhwaXJlcyA9IHRpbWU7CiAJdGltZXItPl9zb2Z0ZXhwaXJlcyA9IHRpbWU7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBocnRpbWVyX3NldF9leHBpcmVzX3JhbmdlKHN0cnVjdCBocnRpbWVyICp0aW1lciwga3RpbWVfdCB0aW1lLCBrdGltZV90IGRlbHRhKQogewogCXRpbWVyLT5fc29mdGV4cGlyZXMgPSB0aW1lOwotCXRpbWVyLT5fZXhwaXJlcyA9IGt0aW1lX2FkZF9zYWZlKHRpbWUsIGRlbHRhKTsKKwl0aW1lci0+bm9kZS5leHBpcmVzID0ga3RpbWVfYWRkX3NhZmUodGltZSwgZGVsdGEpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgaHJ0aW1lcl9zZXRfZXhwaXJlc19yYW5nZV9ucyhzdHJ1Y3QgaHJ0aW1lciAqdGltZXIsIGt0aW1lX3QgdGltZSwgdW5zaWduZWQgbG9uZyBkZWx0YSkKIHsKIAl0aW1lci0+X3NvZnRleHBpcmVzID0gdGltZTsKLQl0aW1lci0+X2V4cGlyZXMgPSBrdGltZV9hZGRfc2FmZSh0aW1lLCBuc190b19rdGltZShkZWx0YSkpOworCXRpbWVyLT5ub2RlLmV4cGlyZXMgPSBrdGltZV9hZGRfc2FmZSh0aW1lLCBuc190b19rdGltZShkZWx0YSkpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgaHJ0aW1lcl9zZXRfZXhwaXJlc190djY0KHN0cnVjdCBocnRpbWVyICp0aW1lciwgczY0IHR2NjQpCiB7Ci0JdGltZXItPl9leHBpcmVzLnR2NjQgPSB0djY0OworCXRpbWVyLT5ub2RlLmV4cGlyZXMudHY2NCA9IHR2NjQ7CiAJdGltZXItPl9zb2Z0ZXhwaXJlcy50djY0ID0gdHY2NDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGhydGltZXJfYWRkX2V4cGlyZXMoc3RydWN0IGhydGltZXIgKnRpbWVyLCBrdGltZV90IHRpbWUpCiB7Ci0JdGltZXItPl9leHBpcmVzID0ga3RpbWVfYWRkX3NhZmUodGltZXItPl9leHBpcmVzLCB0aW1lKTsKKwl0aW1lci0+bm9kZS5leHBpcmVzID0ga3RpbWVfYWRkX3NhZmUodGltZXItPm5vZGUuZXhwaXJlcywgdGltZSk7CiAJdGltZXItPl9zb2Z0ZXhwaXJlcyA9IGt0aW1lX2FkZF9zYWZlKHRpbWVyLT5fc29mdGV4cGlyZXMsIHRpbWUpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgaHJ0aW1lcl9hZGRfZXhwaXJlc19ucyhzdHJ1Y3QgaHJ0aW1lciAqdGltZXIsIHU2NCBucykKIHsKLQl0aW1lci0+X2V4cGlyZXMgPSBrdGltZV9hZGRfbnModGltZXItPl9leHBpcmVzLCBucyk7CisJdGltZXItPm5vZGUuZXhwaXJlcyA9IGt0aW1lX2FkZF9ucyh0aW1lci0+bm9kZS5leHBpcmVzLCBucyk7CiAJdGltZXItPl9zb2Z0ZXhwaXJlcyA9IGt0aW1lX2FkZF9ucyh0aW1lci0+X3NvZnRleHBpcmVzLCBucyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUga3RpbWVfdCBocnRpbWVyX2dldF9leHBpcmVzKGNvbnN0IHN0cnVjdCBocnRpbWVyICp0aW1lcikKIHsKLQlyZXR1cm4gdGltZXItPl9leHBpcmVzOworCXJldHVybiB0aW1lci0+bm9kZS5leHBpcmVzOwogfQogCiBzdGF0aWMgaW5saW5lIGt0aW1lX3QgaHJ0aW1lcl9nZXRfc29mdGV4cGlyZXMoY29uc3Qgc3RydWN0IGhydGltZXIgKnRpbWVyKQpAQCAtMjMwLDcgKzIyNiw3IEBACiAKIHN0YXRpYyBpbmxpbmUgczY0IGhydGltZXJfZ2V0X2V4cGlyZXNfdHY2NChjb25zdCBzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpCiB7Ci0JcmV0dXJuIHRpbWVyLT5fZXhwaXJlcy50djY0OworCXJldHVybiB0aW1lci0+bm9kZS5leHBpcmVzLnR2NjQ7CiB9CiBzdGF0aWMgaW5saW5lIHM2NCBocnRpbWVyX2dldF9zb2Z0ZXhwaXJlc190djY0KGNvbnN0IHN0cnVjdCBocnRpbWVyICp0aW1lcikKIHsKQEAgLTIzOSwxMiArMjM1LDEyIEBACiAKIHN0YXRpYyBpbmxpbmUgczY0IGhydGltZXJfZ2V0X2V4cGlyZXNfbnMoY29uc3Qgc3RydWN0IGhydGltZXIgKnRpbWVyKQogewotCXJldHVybiBrdGltZV90b19ucyh0aW1lci0+X2V4cGlyZXMpOworCXJldHVybiBrdGltZV90b19ucyh0aW1lci0+bm9kZS5leHBpcmVzKTsKIH0KIAogc3RhdGljIGlubGluZSBrdGltZV90IGhydGltZXJfZXhwaXJlc19yZW1haW5pbmcoY29uc3Qgc3RydWN0IGhydGltZXIgKnRpbWVyKQogewotICAgIHJldHVybiBrdGltZV9zdWIodGltZXItPl9leHBpcmVzLCB0aW1lci0+YmFzZS0+Z2V0X3RpbWUoKSk7CisJcmV0dXJuIGt0aW1lX3N1Yih0aW1lci0+bm9kZS5leHBpcmVzLCB0aW1lci0+YmFzZS0+Z2V0X3RpbWUoKSk7CiB9CiAKICNpZmRlZiBDT05GSUdfSElHSF9SRVNfVElNRVJTCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2kyYy1vbWFwLmggYi9pbmNsdWRlL2xpbnV4L2kyYy1vbWFwLmgKaW5kZXggNzhlYmY1MC4uNzQ3MjQ0OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pMmMtb21hcC5oCisrKyBiL2luY2x1ZGUvbGludXgvaTJjLW9tYXAuaApAQCAtMSw5ICsxLDE0IEBACiAjaWZuZGVmIF9fSTJDX09NQVBfSF9fCiAjZGVmaW5lIF9fSTJDX09NQVBfSF9fCiAKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKwogc3RydWN0IG9tYXBfaTJjX2J1c19wbGF0Zm9ybV9kYXRhIHsKIAl1MzIJCWNsa3JhdGU7CiAJdm9pZAkJKCpzZXRfbXB1X3drdXBfbGF0KShzdHJ1Y3QgZGV2aWNlICpkZXYsIGxvbmcgc2V0KTsKKwlpbnQJCSgqZGV2aWNlX2VuYWJsZSkgKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOworCWludAkJKCpkZXZpY2Vfc2h1dGRvd24pIChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKKwlpbnQJCSgqZGV2aWNlX2lkbGUpIChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pMmMvdHdsLmggYi9pbmNsdWRlL2xpbnV4L2kyYy90d2wuaAppbmRleCBjNzYwOTkxLi42MWI5NjA5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2kyYy90d2wuaAorKysgYi9pbmNsdWRlL2xpbnV4L2kyYy90d2wuaApAQCAtNTkzLDYgKzU5MywxMyBAQAogCiBzdHJ1Y3QgdHdsNDAzMF91c2JfZGF0YSB7CiAJZW51bSB0d2w0MDMwX3VzYl9tb2RlCXVzYl9tb2RlOworCisJaW50CQkoKnBoeV9pbml0KShzdHJ1Y3QgZGV2aWNlICpkZXYpOworCWludAkJKCpwaHlfZXhpdCkoc3RydWN0IGRldmljZSAqZGV2KTsKKwkvKiBQb3dlciBvbi9vZmYgdGhlIFBIWSAqLworCWludAkJKCpwaHlfcG93ZXIpKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IGlELCBpbnQgb24pOworCS8qIGVuYWJsZS9kaXNhYmxlICBwaHkgY2xvY2tzICovCisJaW50CQkoKnBoeV9zZXRfY2xvY2spKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IG9uKTsKIH07CiAKIHN0cnVjdCB0d2w0MDMwX2lucyB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2llZWU4MDIxMS5oIGIvaW5jbHVkZS9saW51eC9pZWVlODAyMTEuaAppbmRleCBlZDVhMDNjLi42MDQyMjI4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2llZWU4MDIxMS5oCisrKyBiL2luY2x1ZGUvbGludXgvaWVlZTgwMjExLmgKQEAgLTEyMiw2ICsxMjIsNyBAQAogCiAvKiBVLUFQU0QgcXVldWUgZm9yIFdNTSBJRXMgc2VudCBieSBBUCAqLwogI2RlZmluZSBJRUVFODAyMTFfV01NX0lFX0FQX1FPU0lORk9fVUFQU0QJKDE8PDcpCisjZGVmaW5lIElFRUU4MDIxMV9XTU1fSUVfQVBfUU9TSU5GT19QQVJBTV9TRVRfQ05UX01BU0sJMHgwZgogCiAvKiBVLUFQU0QgcXVldWVzIGZvciBXTU0gSUVzIHNlbnQgYnkgU1RBICovCiAjZGVmaW5lIElFRUU4MDIxMV9XTU1fSUVfU1RBX1FPU0lORk9fQUNfVk8JKDE8PDApCkBAIC01MzUsNyArNTM2LDYgQEAKIAlfX2xlMzIgc2VxbnVtOwogCXU4IGVhZGRyMVs2XTsKIAl1OCBlYWRkcjJbNl07Ci0JdTggZWFkZHIzWzZdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIC8qIE1lc2ggZmxhZ3MgKi8KQEAgLTEyMjMsNiArMTIyMyw5IEBACiAJV0xBTl9FSURfQlNTX0FDX0FDQ0VTU19ERUxBWSA9IDY4LAogCVdMQU5fRUlEX1JSTV9FTkFCTEVEX0NBUEFCSUxJVElFUyA9IDcwLAogCVdMQU5fRUlEX01VTFRJUExFX0JTU0lEID0gNzEsCisJV0xBTl9FSURfQlNTX0NPRVhfMjA0MCA9IDcyLAorCVdMQU5fRUlEX09WRVJMQVBfQlNTX1NDQU5fUEFSQU0gPSA3NCwKKwlXTEFOX0VJRF9FWFRfQ0FQQUJJTElUWSA9IDEyNywKIAogCVdMQU5fRUlEX01PQklMSVRZX0RPTUFJTiA9IDU0LAogCVdMQU5fRUlEX0ZBU1RfQlNTX1RSQU5TSVRJT04gPSA1NSwKQEAgLTEyODcsNiArMTI5MCwzMSBAQAogCVdMQU5fS0VZX0xFTl9BRVNfQ01BQyA9IDE2LAogfTsKIAorLyoqCisgKiBlbnVtIC0gbWVzaCBwYXRoIHNlbGVjdGlvbiBwcm90b2NvbCBpZGVudGlmaWVyCisgKgorICogQElFRUU4MDIxMV9QQVRIX1BST1RPQ09MX0hXTVA6IHRoZSBkZWZhdWx0IHBhdGggc2VsZWN0aW9uIHByb3RvY29sCisgKiBASUVFRTgwMjExX1BBVEhfUFJPVE9DT0xfVkVORE9SOiBhIHZlbmRvciBzcGVjaWZpYyBwcm90b2NvbCB0aGF0IHdpbGwKKyAqIGJlIHNwZWNpZmllZCBpbiBhIHZlbmRvciBzcGVjaWZpYyBpbmZvcm1hdGlvbiBlbGVtZW50CisgKi8KK2VudW0geworCUlFRUU4MDIxMV9QQVRIX1BST1RPQ09MX0hXTVAgPSAwLAorCUlFRUU4MDIxMV9QQVRIX1BST1RPQ09MX1ZFTkRPUiA9IDI1NSwKK307CisKKy8qKgorICogZW51bSAtIG1lc2ggcGF0aCBzZWxlY3Rpb24gbWV0cmljIGlkZW50aWZpZXIKKyAqCisgKiBASUVFRTgwMjExX1BBVEhfTUVUUklDX0FJUlRJTUU6IHRoZSBkZWZhdWx0IHBhdGggc2VsZWN0aW9uIG1ldHJpYworICogQElFRUU4MDIxMV9QQVRIX01FVFJJQ19WRU5ET1I6IGEgdmVuZG9yIHNwZWNpZmljIG1ldHJpYyB0aGF0IHdpbGwgYmUKKyAqIHNwZWNpZmllZCBpbiBhIHZlbmRvciBzcGVjaWZpYyBpbmZvcm1hdGlvbiBlbGVtZW50CisgKi8KK2VudW0geworCUlFRUU4MDIxMV9QQVRIX01FVFJJQ19BSVJUSU1FID0gMCwKKwlJRUVFODAyMTFfUEFUSF9NRVRSSUNfVkVORE9SID0gMjU1LAorfTsKKworCiAvKgogICogSUVFRSA4MDIuMTEtMjAwNyA3LjMuMi45IENvdW50cnkgaW5mb3JtYXRpb24gZWxlbWVudAogICoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWZfYnJpZGdlLmggYi9pbmNsdWRlL2xpbnV4L2lmX2JyaWRnZS5oCmluZGV4IDBkMjQxYTUuLmY3ZTczYzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWZfYnJpZGdlLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZl9icmlkZ2UuaApAQCAtMTAyLDcgKzEwMiw5IEBACiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAKIGV4dGVybiB2b2lkIGJyaW9jdGxfc2V0KGludCAoKmlvY3RsX2hvb2spKHN0cnVjdCBuZXQgKiwgdW5zaWduZWQgaW50LCB2b2lkIF9fdXNlciAqKSk7Ci1leHRlcm4gaW50ICgqYnJfc2hvdWxkX3JvdXRlX2hvb2spKHN0cnVjdCBza19idWZmICpza2IpOworCit0eXBlZGVmIGludCAoKmJyX3Nob3VsZF9yb3V0ZV9ob29rX3QpKHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGJyX3Nob3VsZF9yb3V0ZV9ob29rX3QgX19yY3UgKmJyX3Nob3VsZF9yb3V0ZV9ob29rOwogCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl9ldGhlci5oIGIvaW5jbHVkZS9saW51eC9pZl9ldGhlci5oCmluZGV4IGY5YzNkZjAuLmJlNjkwNDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWZfZXRoZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lmX2V0aGVyLmgKQEAgLTcyLDYgKzcyLDcgQEAKICNkZWZpbmUgRVRIX1BfTVBMU19VQwkweDg4NDcJCS8qIE1QTFMgVW5pY2FzdCB0cmFmZmljCQkqLwogI2RlZmluZSBFVEhfUF9NUExTX01DCTB4ODg0OAkJLyogTVBMUyBNdWx0aWNhc3QgdHJhZmZpYwkqLwogI2RlZmluZSBFVEhfUF9BVE1NUE9BCTB4ODg0YwkJLyogTXVsdGlQcm90b2NvbCBPdmVyIEFUTQkqLworI2RlZmluZSBFVEhfUF9MSU5LX0NUTAkweDg4NmMJCS8qIEhQTkEsIHdsYW4gbGluayBsb2NhbCB0dW5uZWwgKi8KICNkZWZpbmUgRVRIX1BfQVRNRkFURQkweDg4ODQJCS8qIEZyYW1lLWJhc2VkIEFUTSBUcmFuc3BvcnQKIAkJCQkJICogb3ZlciBFdGhlcm5ldAogCQkJCQkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWZfbGluay5oIGIvaW5jbHVkZS9saW51eC9pZl9saW5rLmgKaW5kZXggMmZjNjZkZC4uNjQ4NWQyYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZl9saW5rLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZl9saW5rLmgKQEAgLTgwLDYgKzgwLDI0IEBACiAJX191OAlwb3J0OwogfTsKIAorLyoKKyAqIElGTEFfQUZfU1BFQworICogICBDb250YWlucyBuZXN0ZWQgYXR0cmlidXRlcyBmb3IgYWRkcmVzcyBmYW1pbHkgc3BlY2lmaWMgYXR0cmlidXRlcy4KKyAqICAgRWFjaCBhZGRyZXNzIGZhbWlseSBtYXkgY3JlYXRlIGEgYXR0cmlidXRlIHdpdGggdGhlIGFkZHJlc3MgZmFtaWx5CisgKiAgIG51bWJlciBhcyB0eXBlIGFuZCBjcmVhdGUgaXRzIG93biBhdHRyaWJ1dGUgc3RydWN0dXJlIGluIGl0LgorICoKKyAqICAgRXhhbXBsZToKKyAqICAgW0lGTEFfQUZfU1BFQ10gPSB7CisgKiAgICAgICBbQUZfSU5FVF0gPSB7CisgKiAgICAgICAgICAgW0lGTEFfSU5FVF9DT05GXSA9IC4uLiwKKyAqICAgICAgIH0sCisgKiAgICAgICBbQUZfSU5FVDZdID0geworICogICAgICAgICAgIFtJRkxBX0lORVQ2X0ZMQUdTXSA9IC4uLiwKKyAqICAgICAgICAgICBbSUZMQV9JTkVUNl9DT05GXSA9IC4uLiwKKyAqICAgICAgIH0KKyAqICAgfQorICovCisKIGVudW0gewogCUlGTEFfVU5TUEVDLAogCUlGTEFfQUREUkVTUywKQEAgLTExNiw2ICsxMzQsNyBAQAogCUlGTEFfU1RBVFM2NCwKIAlJRkxBX1ZGX1BPUlRTLAogCUlGTEFfUE9SVF9TRUxGLAorCUlGTEFfQUZfU1BFQywKIAlfX0lGTEFfTUFYCiB9OwogCkBAIC0xMjgsNiArMTQ3LDE0IEBACiAjZGVmaW5lIElGTEFfUEFZTE9BRChuKSBOTE1TR19QQVlMT0FEKG4sc2l6ZW9mKHN0cnVjdCBpZmluZm9tc2cpKQogI2VuZGlmCiAKK2VudW0geworCUlGTEFfSU5FVF9VTlNQRUMsCisJSUZMQV9JTkVUX0NPTkYsCisJX19JRkxBX0lORVRfTUFYLAorfTsKKworI2RlZmluZSBJRkxBX0lORVRfTUFYIChfX0lGTEFfSU5FVF9NQVggLSAxKQorCiAvKiBpZmlfZmxhZ3MuCiAKICAgIElGRl8qIGZsYWdzLgpAQCAtMjMyLDYgKzI1OSw3IEBACiAJTUFDVkxBTl9NT0RFX1BSSVZBVEUgPSAxLCAvKiBkb24ndCB0YWxrIHRvIG90aGVyIG1hY3ZsYW5zICovCiAJTUFDVkxBTl9NT0RFX1ZFUEEgICAgPSAyLCAvKiB0YWxrIHRvIG90aGVyIHBvcnRzIHRocm91Z2ggZXh0IGJyaWRnZSAqLwogCU1BQ1ZMQU5fTU9ERV9CUklER0UgID0gNCwgLyogdGFsayB0byBicmlkZ2UgcG9ydHMgZGlyZWN0bHkgKi8KKwlNQUNWTEFOX01PREVfUEFTU1RIUlUgPSA4LC8qIHRha2Ugb3ZlciB0aGUgdW5kZXJseWluZyBkZXZpY2UgKi8KIH07CiAKIC8qIFNSLUlPViB2aXJ0dWFsIGZ1bmN0aW9uIG1hbmFnZW1lbnQgc2VjdGlvbiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl9tYWN2bGFuLmggYi9pbmNsdWRlL2xpbnV4L2lmX21hY3ZsYW4uaAppbmRleCA4YTJmZDY2Li5lMjhiMmU0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lmX21hY3ZsYW4uaAorKysgYi9pbmNsdWRlL2xpbnV4L2lmX21hY3ZsYW4uaApAQCAtMjUsMTkgKzI1LDI1IEBACiBzdHJ1Y3QgbWFjdnRhcF9xdWV1ZTsKIAogLyoqCi0gKglzdHJ1Y3QgbWFjdmxhbl9yeF9zdGF0cyAtIE1BQ1ZMQU4gcGVyY3B1IHJ4IHN0YXRzCisgKglzdHJ1Y3QgbWFjdmxhbl9wY3B1X3N0YXRzIC0gTUFDVkxBTiBwZXJjcHUgc3RhdHMKICAqCUByeF9wYWNrZXRzOiBudW1iZXIgb2YgcmVjZWl2ZWQgcGFja2V0cwogICoJQHJ4X2J5dGVzOiBudW1iZXIgb2YgcmVjZWl2ZWQgYnl0ZXMKICAqCUByeF9tdWx0aWNhc3Q6IG51bWJlciBvZiByZWNlaXZlZCBtdWx0aWNhc3QgcGFja2V0cworICoJQHR4X3BhY2tldHM6IG51bWJlciBvZiB0cmFuc21pdHRlZCBwYWNrZXRzCisgKglAdHhfYnl0ZXM6IG51bWJlciBvZiB0cmFuc21pdHRlZCBieXRlcwogICoJQHN5bmNwOiBzeW5jaHJvbml6YXRpb24gcG9pbnQgZm9yIDY0Yml0IGNvdW50ZXJzCi0gKglAcnhfZXJyb3JzOiBudW1iZXIgb2YgZXJyb3JzCisgKglAcnhfZXJyb3JzOiBudW1iZXIgb2YgcnggZXJyb3JzCisgKglAdHhfZHJvcHBlZDogbnVtYmVyIG9mIHR4IGRyb3BwZWQgcGFja2V0cwogICovCi1zdHJ1Y3QgbWFjdmxhbl9yeF9zdGF0cyB7CitzdHJ1Y3QgbWFjdmxhbl9wY3B1X3N0YXRzIHsKIAl1NjQJCQlyeF9wYWNrZXRzOwogCXU2NAkJCXJ4X2J5dGVzOwogCXU2NAkJCXJ4X211bHRpY2FzdDsKKwl1NjQJCQl0eF9wYWNrZXRzOworCXU2NAkJCXR4X2J5dGVzOwogCXN0cnVjdCB1NjRfc3RhdHNfc3luYwlzeW5jcDsKLQl1bnNpZ25lZCBsb25nCQlyeF9lcnJvcnM7CisJdTMyCQkJcnhfZXJyb3JzOworCXUzMgkJCXR4X2Ryb3BwZWQ7CiB9OwogCiAvKgpAQCAtNTIsNyArNTgsNyBAQAogCXN0cnVjdCBobGlzdF9ub2RlCWhsaXN0OwogCXN0cnVjdCBtYWN2bGFuX3BvcnQJKnBvcnQ7CiAJc3RydWN0IG5ldF9kZXZpY2UJKmxvd2VyZGV2OwotCXN0cnVjdCBtYWN2bGFuX3J4X3N0YXRzIF9fcGVyY3B1ICpyeF9zdGF0czsKKwlzdHJ1Y3QgbWFjdmxhbl9wY3B1X3N0YXRzIF9fcGVyY3B1ICpwY3B1X3N0YXRzOwogCWVudW0gbWFjdmxhbl9tb2RlCW1vZGU7CiAJaW50ICgqcmVjZWl2ZSkoc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAJaW50ICgqZm9yd2FyZCkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CkBAIC02NCwxOCArNzAsMTggQEAKIAkJCQkgICAgdW5zaWduZWQgaW50IGxlbiwgYm9vbCBzdWNjZXNzLAogCQkJCSAgICBib29sIG11bHRpY2FzdCkKIHsKLQlzdHJ1Y3QgbWFjdmxhbl9yeF9zdGF0cyAqcnhfc3RhdHM7Ci0KLQlyeF9zdGF0cyA9IHRoaXNfY3B1X3B0cih2bGFuLT5yeF9zdGF0cyk7CiAJaWYgKGxpa2VseShzdWNjZXNzKSkgewotCQl1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKCZyeF9zdGF0cy0+c3luY3ApOwotCQlyeF9zdGF0cy0+cnhfcGFja2V0cysrOzsKLQkJcnhfc3RhdHMtPnJ4X2J5dGVzICs9IGxlbjsKKwkJc3RydWN0IG1hY3ZsYW5fcGNwdV9zdGF0cyAqcGNwdV9zdGF0czsKKworCQlwY3B1X3N0YXRzID0gdGhpc19jcHVfcHRyKHZsYW4tPnBjcHVfc3RhdHMpOworCQl1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKCZwY3B1X3N0YXRzLT5zeW5jcCk7CisJCXBjcHVfc3RhdHMtPnJ4X3BhY2tldHMrKzsKKwkJcGNwdV9zdGF0cy0+cnhfYnl0ZXMgKz0gbGVuOwogCQlpZiAobXVsdGljYXN0KQotCQkJcnhfc3RhdHMtPnJ4X211bHRpY2FzdCsrOwotCQl1NjRfc3RhdHNfdXBkYXRlX2VuZCgmcnhfc3RhdHMtPnN5bmNwKTsKKwkJCXBjcHVfc3RhdHMtPnJ4X211bHRpY2FzdCsrOworCQl1NjRfc3RhdHNfdXBkYXRlX2VuZCgmcGNwdV9zdGF0cy0+c3luY3ApOwogCX0gZWxzZSB7Ci0JCXJ4X3N0YXRzLT5yeF9lcnJvcnMrKzsKKwkJdGhpc19jcHVfaW5jKHZsYW4tPnBjcHVfc3RhdHMtPnJ4X2Vycm9ycyk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lnbXAuaCBiL2luY2x1ZGUvbGludXgvaWdtcC5oCmluZGV4IDkzZmMyNDQuLjc0Y2ZjZmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWdtcC5oCisrKyBiL2luY2x1ZGUvbGludXgvaWdtcC5oCkBAIC04NSw5ICs4NSw5IEBACiAjZGVmaW5lIElHTVBfRFZNUlAJCQkweDEzCS8qIERWTVJQIHJvdXRpbmcgKi8KICNkZWZpbmUgSUdNUF9QSU0JCQkweDE0CS8qIFBJTSByb3V0aW5nICovCiAjZGVmaW5lIElHTVBfVFJBQ0UJCQkweDE1Ci0jZGVmaW5lIElHTVBWMl9IT1NUX01FTUJFUlNISVBfUkVQT1JUCTB4MTYJLyogVjIgdmVyc2lvbiBvZiAweDExICovCisjZGVmaW5lIElHTVBWMl9IT1NUX01FTUJFUlNISVBfUkVQT1JUCTB4MTYJLyogVjIgdmVyc2lvbiBvZiAweDEyICovCiAjZGVmaW5lIElHTVBfSE9TVF9MRUFWRV9NRVNTQUdFIAkweDE3Ci0jZGVmaW5lIElHTVBWM19IT1NUX01FTUJFUlNISVBfUkVQT1JUCTB4MjIJLyogVjMgdmVyc2lvbiBvZiAweDExICovCisjZGVmaW5lIElHTVBWM19IT1NUX01FTUJFUlNISVBfUkVQT1JUCTB4MjIJLyogVjMgdmVyc2lvbiBvZiAweDEyICovCiAKICNkZWZpbmUgSUdNUF9NVFJBQ0VfUkVTUAkJMHgxZQogI2RlZmluZSBJR01QX01UUkFDRQkJCTB4MWYKQEAgLTE2NywxMCArMTY3LDEwIEBACiAgKi8KIAogc3RydWN0IGlwX21jX3NvY2tsaXN0IHsKLQlzdHJ1Y3QgaXBfbWNfc29ja2xpc3QJKm5leHQ7CisJc3RydWN0IGlwX21jX3NvY2tsaXN0IF9fcmN1ICpuZXh0X3JjdTsKIAlzdHJ1Y3QgaXBfbXJlcW4JCW11bHRpOwogCXVuc2lnbmVkIGludAkJc2Ztb2RlOwkJLyogTUNBU1Rfe0lOQ0xVREUsRVhDTFVERX0gKi8KLQlzdHJ1Y3QgaXBfc2Zfc29ja2xpc3QJKnNmbGlzdDsKKwlzdHJ1Y3QgaXBfc2Zfc29ja2xpc3QgX19yY3UJKnNmbGlzdDsKIAlzdHJ1Y3QgcmN1X2hlYWQJCXJjdTsKIH07CiAKQEAgLTE4NiwxMSArMTg2LDE0IEBACiBzdHJ1Y3QgaXBfbWNfbGlzdCB7CiAJc3RydWN0IGluX2RldmljZQkqaW50ZXJmYWNlOwogCV9fYmUzMgkJCW11bHRpYWRkcjsKKwl1bnNpZ25lZCBpbnQJCXNmbW9kZTsKIAlzdHJ1Y3QgaXBfc2ZfbGlzdAkqc291cmNlczsKIAlzdHJ1Y3QgaXBfc2ZfbGlzdAkqdG9tYjsKLQl1bnNpZ25lZCBpbnQJCXNmbW9kZTsKIAl1bnNpZ25lZCBsb25nCQlzZmNvdW50WzJdOwotCXN0cnVjdCBpcF9tY19saXN0CSpuZXh0OworCXVuaW9uIHsKKwkJc3RydWN0IGlwX21jX2xpc3QgKm5leHQ7CisJCXN0cnVjdCBpcF9tY19saXN0IF9fcmN1ICpuZXh0X3JjdTsKKwl9OwogCXN0cnVjdCB0aW1lcl9saXN0CXRpbWVyOwogCWludAkJCXVzZXJzOwogCWF0b21pY190CQlyZWZjbnQ7CkBAIC0yMDEsNiArMjA0LDcgQEAKIAljaGFyCQkJbG9hZGVkOwogCXVuc2lnbmVkIGNoYXIJCWdzcXVlcnk7CS8qIGNoZWNrIHNvdXJjZSBtYXJrcz8gKi8KIAl1bnNpZ25lZCBjaGFyCQljcmNvdW50OworCXN0cnVjdCByY3VfaGVhZAkJcmN1OwogfTsKIAogLyogVjMgZXhwb25lbnRpYWwgZmllbGQgZGVjb2RpbmcgKi8KQEAgLTIzNCw3ICsyMzgsNyBAQAogZXh0ZXJuIHZvaWQgaXBfbWNfcmVtYXAoc3RydWN0IGluX2RldmljZSAqKTsKIGV4dGVybiB2b2lkIGlwX21jX2RlY19ncm91cChzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsIF9fYmUzMiBhZGRyKTsKIGV4dGVybiB2b2lkIGlwX21jX2luY19ncm91cChzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsIF9fYmUzMiBhZGRyKTsKLWV4dGVybiB2b2lkIGlwX21jX3Jlam9pbl9ncm91cChzdHJ1Y3QgaXBfbWNfbGlzdCAqaW0pOworZXh0ZXJuIHZvaWQgaXBfbWNfcmVqb2luX2dyb3VwcyhzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYpOwogCiAjZW5kaWYKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaAppbmRleCBjY2Q1YjA3Li5hZThmZGM1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaApAQCAtNDEsMTAgKzQxLDEyIEBACiAJX19JUFY0X0RFVkNPTkZfTUFYCiB9OwogCisjZGVmaW5lIElQVjRfREVWQ09ORl9NQVggKF9fSVBWNF9ERVZDT05GX01BWCAtIDEpCisKIHN0cnVjdCBpcHY0X2RldmNvbmYgewogCXZvaWQJKnN5c2N0bDsKLQlpbnQJZGF0YVtfX0lQVjRfREVWQ09ORl9NQVggLSAxXTsKLQlERUNMQVJFX0JJVE1BUChzdGF0ZSwgX19JUFY0X0RFVkNPTkZfTUFYIC0gMSk7CisJaW50CWRhdGFbSVBWNF9ERVZDT05GX01BWF07CisJREVDTEFSRV9CSVRNQVAoc3RhdGUsIElQVjRfREVWQ09ORl9NQVgpOwogfTsKIAogc3RydWN0IGluX2RldmljZSB7CkBAIC01Miw5ICs1NCw4IEBACiAJYXRvbWljX3QJCXJlZmNudDsKIAlpbnQJCQlkZWFkOwogCXN0cnVjdCBpbl9pZmFkZHIJKmlmYV9saXN0OwkvKiBJUCBpZmFkZHIgY2hhaW4JCSovCi0Jcndsb2NrX3QJCW1jX2xpc3RfbG9jazsKLQlzdHJ1Y3QgaXBfbWNfbGlzdAkqbWNfbGlzdDsJLyogSVAgbXVsdGljYXN0IGZpbHRlciBjaGFpbiAgICAqLwotCWludAkJCW1jX2NvdW50OwkgICAgICAgICAgLyogTnVtYmVyIG9mIGluc3RhbGxlZCBtY2FzdHMJKi8KKwlzdHJ1Y3QgaXBfbWNfbGlzdCBfX3JjdQkqbWNfbGlzdDsJLyogSVAgbXVsdGljYXN0IGZpbHRlciBjaGFpbiAgICAqLworCWludAkJCW1jX2NvdW50OwkvKiBOdW1iZXIgb2YgaW5zdGFsbGVkIG1jYXN0cwkqLwogCXNwaW5sb2NrX3QJCW1jX3RvbWJfbG9jazsKIAlzdHJ1Y3QgaXBfbWNfbGlzdAkqbWNfdG9tYjsKIAl1bnNpZ25lZCBsb25nCQltcl92MV9zZWVuOwpAQCAtOTEsNyArOTIsNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgaXB2NF9kZXZjb25mX3NldGFsbChzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYpCiB7Ci0JYml0bWFwX2ZpbGwoaW5fZGV2LT5jbmYuc3RhdGUsIF9fSVBWNF9ERVZDT05GX01BWCAtIDEpOworCWJpdG1hcF9maWxsKGluX2Rldi0+Y25mLnN0YXRlLCBJUFY0X0RFVkNPTkZfTUFYKTsKIH0KIAogI2RlZmluZSBJTl9ERVZfQ09ORl9HRVQoaW5fZGV2LCBhdHRyKSBcCkBAIC0yMjEsNyArMjIyLDcgQEAKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgaW5fZGV2aWNlICpfX2luX2Rldl9nZXRfcnRubChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXJldHVybiByY3VfZGVyZWZlcmVuY2VfY2hlY2soZGV2LT5pcF9wdHIsIGxvY2tkZXBfcnRubF9pc19oZWxkKCkpOworCXJldHVybiBydG5sX2RlcmVmZXJlbmNlKGRldi0+aXBfcHRyKTsKIH0KIAogZXh0ZXJuIHZvaWQgaW5fZGV2X2ZpbmlzaF9kZXN0cm95KHN0cnVjdCBpbl9kZXZpY2UgKmlkZXYpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbml0X3Rhc2suaCBiL2luY2x1ZGUvbGludXgvaW5pdF90YXNrLmgKaW5kZXggMWY4YzA2Yy4uY2FhMTUxZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbml0X3Rhc2suaAorKysgYi9pbmNsdWRlL2xpbnV4L2luaXRfdGFzay5oCkBAIC0xMiw2ICsxMiwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L3NlY3VyZWJpdHMuaD4KICNpbmNsdWRlIDxuZXQvbmV0X25hbWVzcGFjZS5oPgogCisjaWZkZWYgQ09ORklHX1NNUAorIyBkZWZpbmUgSU5JVF9QVVNIQUJMRV9UQVNLUyh0c2spCQkJCQlcCisJLnB1c2hhYmxlX3Rhc2tzID0gUExJU1RfTk9ERV9JTklUKHRzay5wdXNoYWJsZV90YXNrcywgTUFYX1BSSU8pLAorI2Vsc2UKKyMgZGVmaW5lIElOSVRfUFVTSEFCTEVfVEFTS1ModHNrKQorI2VuZGlmCisKIGV4dGVybiBzdHJ1Y3QgZmlsZXNfc3RydWN0IGluaXRfZmlsZXM7CiBleHRlcm4gc3RydWN0IGZzX3N0cnVjdCBpbml0X2ZzOwogCkBAIC04Myw2ICs5MCwxMiBAQAogICovCiAjIGRlZmluZSBDQVBfSU5JVF9CU0VUICBDQVBfRlVMTF9TRVQKIAorI2lmZGVmIENPTkZJR19SQ1VfQk9PU1QKKyNkZWZpbmUgSU5JVF9UQVNLX1JDVV9CT09TVCgpCQkJCQkJXAorCS5yY3VfYm9vc3RfbXV0ZXggPSBOVUxMLAorI2Vsc2UKKyNkZWZpbmUgSU5JVF9UQVNLX1JDVV9CT09TVCgpCisjZW5kaWYKICNpZmRlZiBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVQogI2RlZmluZSBJTklUX1RBU0tfUkNVX1RSRUVfUFJFRU1QVCgpCQkJCQlcCiAJLnJjdV9ibG9ja2VkX25vZGUgPSBOVUxMLApAQCAtOTQsNyArMTA3LDggQEAKIAkucmN1X3JlYWRfbG9ja19uZXN0aW5nID0gMCwJCQkJCVwKIAkucmN1X3JlYWRfdW5sb2NrX3NwZWNpYWwgPSAwLAkJCQkJXAogCS5yY3Vfbm9kZV9lbnRyeSA9IExJU1RfSEVBRF9JTklUKHRzay5yY3Vfbm9kZV9lbnRyeSksCQlcCi0JSU5JVF9UQVNLX1JDVV9UUkVFX1BSRUVNUFQoKQorCUlOSVRfVEFTS19SQ1VfVFJFRV9QUkVFTVBUKCkJCQkJCVwKKwlJTklUX1RBU0tfUkNVX0JPT1NUKCkKICNlbHNlCiAjZGVmaW5lIElOSVRfVEFTS19SQ1VfUFJFRU1QVCh0c2spCiAjZW5kaWYKQEAgLTEzNyw3ICsxNTEsNyBAQAogCQkubnJfY3B1c19hbGxvd2VkID0gTlJfQ1BVUywJCQkJXAogCX0sCQkJCQkJCQlcCiAJLnRhc2tzCQk9IExJU1RfSEVBRF9JTklUKHRzay50YXNrcyksCQkJXAotCS5wdXNoYWJsZV90YXNrcyA9IFBMSVNUX05PREVfSU5JVCh0c2sucHVzaGFibGVfdGFza3MsIE1BWF9QUklPKSwgXAorCUlOSVRfUFVTSEFCTEVfVEFTS1ModHNrKQkJCQkJXAogCS5wdHJhY2VkCT0gTElTVF9IRUFEX0lOSVQodHNrLnB0cmFjZWQpLAkJCVwKIAkucHRyYWNlX2VudHJ5CT0gTElTVF9IRUFEX0lOSVQodHNrLnB0cmFjZV9lbnRyeSksCQlcCiAJLnJlYWxfcGFyZW50CT0gJnRzaywJCQkJCQlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lucHV0LmggYi9pbmNsdWRlL2xpbnV4L2lucHV0LmgKaW5kZXggOTc3NzY2OC4uYzRlOWQ5MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbnB1dC5oCisrKyBiL2luY2x1ZGUvbGludXgvaW5wdXQuaApAQCAtMTEyLDYgKzExMiw3IEBACiAjZGVmaW5lIEVWSU9DR05BTUUobGVuKQkJX0lPQyhfSU9DX1JFQUQsICdFJywgMHgwNiwgbGVuKQkJLyogZ2V0IGRldmljZSBuYW1lICovCiAjZGVmaW5lIEVWSU9DR1BIWVMobGVuKQkJX0lPQyhfSU9DX1JFQUQsICdFJywgMHgwNywgbGVuKQkJLyogZ2V0IHBoeXNpY2FsIGxvY2F0aW9uICovCiAjZGVmaW5lIEVWSU9DR1VOSVEobGVuKQkJX0lPQyhfSU9DX1JFQUQsICdFJywgMHgwOCwgbGVuKQkJLyogZ2V0IHVuaXF1ZSBpZGVudGlmaWVyICovCisjZGVmaW5lIEVWSU9DR1BST1AobGVuKQkJX0lPQyhfSU9DX1JFQUQsICdFJywgMHgwOSwgbGVuKQkJLyogZ2V0IGRldmljZSBwcm9wZXJ0aWVzICovCiAKICNkZWZpbmUgRVZJT0NHS0VZKGxlbikJCV9JT0MoX0lPQ19SRUFELCAnRScsIDB4MTgsIGxlbikJCS8qIGdldCBnbG9iYWwga2V5IHN0YXRlICovCiAjZGVmaW5lIEVWSU9DR0xFRChsZW4pCQlfSU9DKF9JT0NfUkVBRCwgJ0UnLCAweDE5LCBsZW4pCQkvKiBnZXQgYWxsIExFRHMgKi8KQEAgLTEyOSw2ICsxMzAsMTggQEAKICNkZWZpbmUgRVZJT0NHUkFCCQlfSU9XKCdFJywgMHg5MCwgaW50KQkJCS8qIEdyYWIvUmVsZWFzZSBkZXZpY2UgKi8KIAogLyoKKyAqIERldmljZSBwcm9wZXJ0aWVzIGFuZCBxdWlya3MKKyAqLworCisjZGVmaW5lIElOUFVUX1BST1BfUE9JTlRFUgkJMHgwMAkvKiBuZWVkcyBhIHBvaW50ZXIgKi8KKyNkZWZpbmUgSU5QVVRfUFJPUF9ESVJFQ1QJCTB4MDEJLyogZGlyZWN0IGlucHV0IGRldmljZXMgKi8KKyNkZWZpbmUgSU5QVVRfUFJPUF9CVVRUT05QQUQJCTB4MDIJLyogaGFzIGJ1dHRvbihzKSB1bmRlciBwYWQgKi8KKyNkZWZpbmUgSU5QVVRfUFJPUF9TRU1JX01UCQkweDAzCS8qIHRvdWNoIHJlY3RhbmdsZSBvbmx5ICovCisKKyNkZWZpbmUgSU5QVVRfUFJPUF9NQVgJCQkweDFmCisjZGVmaW5lIElOUFVUX1BST1BfQ05UCQkJKElOUFVUX1BST1BfTUFYICsgMSkKKworLyoKICAqIEV2ZW50IHR5cGVzCiAgKi8KIApAQCAtNTkwLDYgKzYwMyw4IEBACiAjZGVmaW5lIEtFWV9GUkFNRUZPUldBUkQJMHgxYjUKICNkZWZpbmUgS0VZX0NPTlRFWFRfTUVOVQkweDFiNgkvKiBHZW5EZXNjIC0gc3lzdGVtIGNvbnRleHQgbWVudSAqLwogI2RlZmluZSBLRVlfTUVESUFfUkVQRUFUCTB4MWI3CS8qIENvbnN1bWVyIC0gdHJhbnNwb3J0IGNvbnRyb2wgKi8KKyNkZWZpbmUgS0VZXzEwQ0hBTk5FTFNVUCAgICAgICAgMHgxYjggICAvKiAxMCBjaGFubmVscyB1cCAoMTArKSAqLworI2RlZmluZSBLRVlfMTBDSEFOTkVMU0RPV04gICAgICAweDFiOSAgIC8qIDEwIGNoYW5uZWxzIGRvd24gKDEwLSkgKi8KIAogI2RlZmluZSBLRVlfREVMX0VPTAkJMHgxYzAKICNkZWZpbmUgS0VZX0RFTF9FT1MJCTB4MWMxCkBAIC03NTgsMTEgKzc3MywxMiBAQAogI2RlZmluZSBBQlNfTVRfQkxPQl9JRAkJMHgzOAkvKiBHcm91cCBhIHNldCBvZiBwYWNrZXRzIGFzIGEgYmxvYiAqLwogI2RlZmluZSBBQlNfTVRfVFJBQ0tJTkdfSUQJMHgzOQkvKiBVbmlxdWUgSUQgb2YgaW5pdGlhdGVkIGNvbnRhY3QgKi8KICNkZWZpbmUgQUJTX01UX1BSRVNTVVJFCQkweDNhCS8qIFByZXNzdXJlIG9uIGNvbnRhY3QgYXJlYSAqLworI2RlZmluZSBBQlNfTVRfRElTVEFOQ0UJCTB4M2IJLyogQ29udGFjdCBob3ZlciBkaXN0YW5jZSAqLwogCiAjaWZkZWYgX19LRVJORUxfXwogLyogSW1wbGVtZW50YXRpb24gZGV0YWlscywgdXNlcnNwYWNlIHNob3VsZCBub3QgY2FyZSBhYm91dCB0aGVzZSAqLwogI2RlZmluZSBBQlNfTVRfRklSU1QJCUFCU19NVF9UT1VDSF9NQUpPUgotI2RlZmluZSBBQlNfTVRfTEFTVAkJQUJTX01UX1BSRVNTVVJFCisjZGVmaW5lIEFCU19NVF9MQVNUCQlBQlNfTVRfRElTVEFOQ0UKICNlbmRpZgogCiAjZGVmaW5lIEFCU19NQVgJCQkweDNmCkBAIC04NzMsNiArODg5LDcgQEAKICAqLwogI2RlZmluZSBNVF9UT09MX0ZJTkdFUgkJMAogI2RlZmluZSBNVF9UT09MX1BFTgkJMQorI2RlZmluZSBNVF9UT09MX01BWAkJMQogCiAvKgogICogVmFsdWVzIGRlc2NyaWJpbmcgdGhlIHN0YXR1cyBvZiBhIGZvcmNlLWZlZWRiYWNrIGVmZmVjdApAQCAtMTEwOCwxOSArMTEyNSwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L21vZF9kZXZpY2V0YWJsZS5oPgogCiAvKioKLSAqIHN0cnVjdCBpbnB1dF9tdF9zbG90IC0gcmVwcmVzZW50cyB0aGUgc3RhdGUgb2YgYW4gaW5wdXQgTVQgc2xvdAotICogQGFiczogaG9sZHMgY3VycmVudCB2YWx1ZXMgb2YgQUJTX01UIGF4ZXMgZm9yIHRoaXMgc2xvdAotICovCi1zdHJ1Y3QgaW5wdXRfbXRfc2xvdCB7Ci0JaW50IGFic1tBQlNfTVRfTEFTVCAtIEFCU19NVF9GSVJTVCArIDFdOwotfTsKLQotLyoqCiAgKiBzdHJ1Y3QgaW5wdXRfZGV2IC0gcmVwcmVzZW50cyBhbiBpbnB1dCBkZXZpY2UKICAqIEBuYW1lOiBuYW1lIG9mIHRoZSBkZXZpY2UKICAqIEBwaHlzOiBwaHlzaWNhbCBwYXRoIHRvIHRoZSBkZXZpY2UgaW4gdGhlIHN5c3RlbSBoaWVyYXJjaHkKICAqIEB1bmlxOiB1bmlxdWUgaWRlbnRpZmljYXRpb24gY29kZSBmb3IgdGhlIGRldmljZSAoaWYgZGV2aWNlIGhhcyBpdCkKICAqIEBpZDogaWQgb2YgdGhlIGRldmljZSAoc3RydWN0IGlucHV0X2lkKQorICogQHByb3BiaXQ6IGJpdG1hcCBvZiBkZXZpY2UgcHJvcGVydGllcyBhbmQgcXVpcmtzCiAgKiBAZXZiaXQ6IGJpdG1hcCBvZiB0eXBlcyBvZiBldmVudHMgc3VwcG9ydGVkIGJ5IHRoZSBkZXZpY2UgKEVWX0tFWSwKICAqCUVWX1JFTCwgZXRjLikKICAqIEBrZXliaXQ6IGJpdG1hcCBvZiBrZXlzL2J1dHRvbnMgdGhpcyBkZXZpY2UgaGFzCkBAIC0xMTU1LDYgKzExNjUsNyBAQAogICoJb2YgdHJhY2tlZCBjb250YWN0cwogICogQG10c2l6ZTogbnVtYmVyIG9mIE1UIHNsb3RzIHRoZSBkZXZpY2UgdXNlcwogICogQHNsb3Q6IE1UIHNsb3QgY3VycmVudGx5IGJlaW5nIHRyYW5zbWl0dGVkCisgKiBAdHJraWQ6IHN0b3JlcyBNVCB0cmFja2luZyBJRCBmb3IgdGhlIGN1cnJlbnQgY29udGFjdAogICogQGFic2luZm86IGFycmF5IG9mICZzdHJ1Y3QgaW5wdXRfYWJzaW5mbyBlbGVtZW50cyBob2xkaW5nIGluZm9ybWF0aW9uCiAgKglhYm91dCBhYnNvbHV0ZSBheGVzIChjdXJyZW50IHZhbHVlLCBtaW4sIG1heCwgZmxhdCwgZnV6eiwKICAqCXJlc29sdXRpb24pCkBAIC0xMjAzLDYgKzEyMTQsOCBAQAogCWNvbnN0IGNoYXIgKnVuaXE7CiAJc3RydWN0IGlucHV0X2lkIGlkOwogCisJdW5zaWduZWQgbG9uZyBwcm9wYml0W0JJVFNfVE9fTE9OR1MoSU5QVVRfUFJPUF9DTlQpXTsKKwogCXVuc2lnbmVkIGxvbmcgZXZiaXRbQklUU19UT19MT05HUyhFVl9DTlQpXTsKIAl1bnNpZ25lZCBsb25nIGtleWJpdFtCSVRTX1RPX0xPTkdTKEtFWV9DTlQpXTsKIAl1bnNpZ25lZCBsb25nIHJlbGJpdFtCSVRTX1RPX0xPTkdTKFJFTF9DTlQpXTsKQEAgLTEyMzksNiArMTI1Miw3IEBACiAJc3RydWN0IGlucHV0X210X3Nsb3QgKm10OwogCWludCBtdHNpemU7CiAJaW50IHNsb3Q7CisJaW50IHRya2lkOwogCiAJc3RydWN0IGlucHV0X2Fic2luZm8gKmFic2luZm87CiAKQEAgLTE0ODgsMTEgKzE1MDIsNiBAQAogCWlucHV0X2V2ZW50KGRldiwgRVZfU1lOLCBTWU5fTVRfUkVQT1JULCAwKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGlucHV0X210X3Nsb3Qoc3RydWN0IGlucHV0X2RldiAqZGV2LCBpbnQgc2xvdCkKLXsKLQlpbnB1dF9ldmVudChkZXYsIEVWX0FCUywgQUJTX01UX1NMT1QsIHNsb3QpOwotfQotCiB2b2lkIGlucHV0X3NldF9jYXBhYmlsaXR5KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgdW5zaWduZWQgaW50IHR5cGUsIHVuc2lnbmVkIGludCBjb2RlKTsKIAogLyoqCkBAIC0xNjA1LDggKzE2MTQsNSBAQAogaW50IGlucHV0X2ZmX2NyZWF0ZV9tZW1sZXNzKHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgdm9pZCAqZGF0YSwKIAkJaW50ICgqcGxheV9lZmZlY3QpKHN0cnVjdCBpbnB1dF9kZXYgKiwgdm9pZCAqLCBzdHJ1Y3QgZmZfZWZmZWN0ICopKTsKIAotaW50IGlucHV0X210X2NyZWF0ZV9zbG90cyhzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIHVuc2lnbmVkIGludCBudW1fc2xvdHMpOwotdm9pZCBpbnB1dF9tdF9kZXN0cm95X3Nsb3RzKHN0cnVjdCBpbnB1dF9kZXYgKmRldik7Ci0KICNlbmRpZgogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lucHV0L2NtYTMwMDAuaCBiL2luY2x1ZGUvbGludXgvaW5wdXQvY21hMzAwMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiYmFhYzIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2lucHV0L2NtYTMwMDAuaApAQCAtMCwwICsxLDU5IEBACisvKgorICogVlRJIENNQTMwMDBfRHh4IEFjY2VsZXJvbWV0ZXIgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRleGFzIEluc3RydW1lbnRzCisgKiBBdXRob3I6IEhlbWFudGggViA8aGVtYW50aHZAdGkuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2lmbmRlZiBfTElOVVhfQ01BMzAwMF9ICisjZGVmaW5lIF9MSU5VWF9DTUEzMDAwX0gKKworI2RlZmluZSBDTUFNT0RFX0RFRkFVTFQgICAgMAorI2RlZmluZSBDTUFNT0RFX01FQVMxMDAgICAgMQorI2RlZmluZSBDTUFNT0RFX01FQVM0MDAgICAgMgorI2RlZmluZSBDTUFNT0RFX01FQVM0MCAgICAgMworI2RlZmluZSBDTUFNT0RFX01PVERFVCAgICAgNAorI2RlZmluZSBDTUFNT0RFX0ZGMTAwICAgICAgNQorI2RlZmluZSBDTUFNT0RFX0ZGNDAwICAgICAgNgorI2RlZmluZSBDTUFNT0RFX1BPRkYgICAgICAgNworCisjZGVmaW5lIENNQVJBTkdFXzJHICAgMjAwMAorI2RlZmluZSBDTUFSQU5HRV84RyAgIDgwMDAKKworLyoqCisgKiBzdHJ1Y3QgY21hMzAwMF9pMmNfcGxhdGZvcm1fZGF0YSAtIENNQTMwMDAgUGxhdGZvcm0gZGF0YQorICogQGZ1enpfeDogTm9pc2Ugb24gWCBBeGlzCisgKiBAZnV6el95OiBOb2lzZSBvbiBZIEF4aXMKKyAqIEBmdXp6X3o6IE5vaXNlIG9uIFogQXhpcworICogQGdfcmFuZ2U6IEcgcmFuZ2UgaW4gbWlsbGkgZyBpLmUgMjAwMCBvciA4MDAwCisgKiBAbW9kZTogT3BlcmF0aW5nIG1vZGUKKyAqIEBtZHRocjogTW90aW9uIGRldGVjdCB0aHJlc2hvbGQgdmFsdWUKKyAqIEBtZGZmdG1yOiBNb3Rpb24gZGV0ZWN0IGFuZCBmcmVlIGZhbGwgdGltZSB2YWx1ZQorICogQGZmdGhyOiBGcmVlIGZhbGwgdGhyZXNob2xkIHZhbHVlCisgKi8KKworc3RydWN0IGNtYTMwMDBfcGxhdGZvcm1fZGF0YSB7CisJaW50IGZ1enpfeDsKKwlpbnQgZnV6el95OworCWludCBmdXp6X3o7CisJaW50IGdfcmFuZ2U7CisJdWludDhfdCBtb2RlOworCXVpbnQ4X3QgbWR0aHI7CisJdWludDhfdCBtZGZmdG1yOworCXVpbnQ4X3QgZmZ0aHI7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbnB1dC9tYXRyaXhfa2V5cGFkLmggYi9pbmNsdWRlL2xpbnV4L2lucHV0L21hdHJpeF9rZXlwYWQuaAppbmRleCA4MDM1MmFkLi42OTc0NzQ2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lucHV0L21hdHJpeF9rZXlwYWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lucHV0L21hdHJpeF9rZXlwYWQuaApAQCAtOSw3ICs5LDcgQEAKIAogI2RlZmluZSBLRVkocm93LCBjb2wsIHZhbCkJKCgoKHJvdykgJiAoTUFUUklYX01BWF9ST1dTIC0gMSkpIDw8IDI0KSB8XAogCQkJCSAoKChjb2wpICYgKE1BVFJJWF9NQVhfQ09MUyAtIDEpKSA8PCAxNikgfFwKLQkJCQkgKHZhbCAmIDB4ZmZmZikpCisJCQkJICgodmFsKSAmIDB4ZmZmZikpCiAKICNkZWZpbmUgS0VZX1JPVyhrKQkJKCgoaykgPj4gMjQpICYgMHhmZikKICNkZWZpbmUgS0VZX0NPTChrKQkJKCgoaykgPj4gMTYpICYgMHhmZikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW5wdXQvbXQuaCBiL2luY2x1ZGUvbGludXgvaW5wdXQvbXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2FjMDZhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9pbnB1dC9tdC5oCkBAIC0wLDAgKzEsNTcgQEAKKyNpZm5kZWYgX0lOUFVUX01UX0gKKyNkZWZpbmUgX0lOUFVUX01UX0gKKworLyoKKyAqIElucHV0IE11bHRpdG91Y2ggTGlicmFyeQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBIZW5yaWsgUnlkYmVyZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisKKyNkZWZpbmUgVFJLSURfTUFYCTB4ZmZmZgorCisvKioKKyAqIHN0cnVjdCBpbnB1dF9tdF9zbG90IC0gcmVwcmVzZW50cyB0aGUgc3RhdGUgb2YgYW4gaW5wdXQgTVQgc2xvdAorICogQGFiczogaG9sZHMgY3VycmVudCB2YWx1ZXMgb2YgQUJTX01UIGF4ZXMgZm9yIHRoaXMgc2xvdAorICovCitzdHJ1Y3QgaW5wdXRfbXRfc2xvdCB7CisJaW50IGFic1tBQlNfTVRfTEFTVCAtIEFCU19NVF9GSVJTVCArIDFdOworfTsKKworc3RhdGljIGlubGluZSB2b2lkIGlucHV0X210X3NldF92YWx1ZShzdHJ1Y3QgaW5wdXRfbXRfc2xvdCAqc2xvdCwKKwkJCQkgICAgICB1bnNpZ25lZCBjb2RlLCBpbnQgdmFsdWUpCit7CisJc2xvdC0+YWJzW2NvZGUgLSBBQlNfTVRfRklSU1RdID0gdmFsdWU7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGlucHV0X210X2dldF92YWx1ZShjb25zdCBzdHJ1Y3QgaW5wdXRfbXRfc2xvdCAqc2xvdCwKKwkJCQkgICAgIHVuc2lnbmVkIGNvZGUpCit7CisJcmV0dXJuIHNsb3QtPmFic1tjb2RlIC0gQUJTX01UX0ZJUlNUXTsKK30KKworaW50IGlucHV0X210X2luaXRfc2xvdHMoc3RydWN0IGlucHV0X2RldiAqZGV2LCB1bnNpZ25lZCBpbnQgbnVtX3Nsb3RzKTsKK3ZvaWQgaW5wdXRfbXRfZGVzdHJveV9zbG90cyhzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYpOworCitzdGF0aWMgaW5saW5lIGludCBpbnB1dF9tdF9uZXdfdHJraWQoc3RydWN0IGlucHV0X2RldiAqZGV2KQoreworCXJldHVybiBkZXYtPnRya2lkKysgJiBUUktJRF9NQVg7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbnB1dF9tdF9zbG90KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgaW50IHNsb3QpCit7CisJaW5wdXRfZXZlbnQoZGV2LCBFVl9BQlMsIEFCU19NVF9TTE9ULCBzbG90KTsKK30KKwordm9pZCBpbnB1dF9tdF9yZXBvcnRfc2xvdF9zdGF0ZShzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsCisJCQkJdW5zaWduZWQgaW50IHRvb2xfdHlwZSwgYm9vbCBhY3RpdmUpOworCit2b2lkIGlucHV0X210X3JlcG9ydF9maW5nZXJfY291bnQoc3RydWN0IGlucHV0X2RldiAqZGV2LCBpbnQgY291bnQpOwordm9pZCBpbnB1dF9tdF9yZXBvcnRfcG9pbnRlcl9lbXVsYXRpb24oc3RydWN0IGlucHV0X2RldiAqZGV2LCBib29sIHVzZV9jb3VudCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaCBiL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmgKaW5kZXggNzlkMGM0Zi4uNTVlMGQ0MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oCkBAIC0xMTQsMTUgKzExNCwxNSBAQAogc3RydWN0IGlycWFjdGlvbiB7CiAJaXJxX2hhbmRsZXJfdCBoYW5kbGVyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JY29uc3QgY2hhciAqbmFtZTsKIAl2b2lkICpkZXZfaWQ7CiAJc3RydWN0IGlycWFjdGlvbiAqbmV4dDsKIAlpbnQgaXJxOwotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZGlyOwogCWlycV9oYW5kbGVyX3QgdGhyZWFkX2ZuOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGhyZWFkOwogCXVuc2lnbmVkIGxvbmcgdGhyZWFkX2ZsYWdzOwotfTsKKwljb25zdCBjaGFyICpuYW1lOworCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZGlyOworfSBfX19fY2FjaGVsaW5lX2ludGVybm9kZWFsaWduZWRfaW5fc21wOwogCiBleHRlcm4gaXJxcmV0dXJuX3Qgbm9fYWN0aW9uKGludCBjcGwsIHZvaWQgKmRldl9pZCk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXB2Ni5oIGIvaW5jbHVkZS9saW51eC9pcHY2LmgKaW5kZXggOGU0MjlkMC4uMGM5OTc3NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pcHY2LmgKKysrIGIvaW5jbHVkZS9saW51eC9pcHY2LmgKQEAgLTM2NCw3ICszNjQsNyBAQAogCiAJX191MzIJCQlkc3RfY29va2llOwogCi0Jc3RydWN0IGlwdjZfbWNfc29ja2xpc3QJKmlwdjZfbWNfbGlzdDsKKwlzdHJ1Y3QgaXB2Nl9tY19zb2NrbGlzdAlfX3JjdSAqaXB2Nl9tY19saXN0OwogCXN0cnVjdCBpcHY2X2FjX3NvY2tsaXN0CSppcHY2X2FjX2xpc3Q7CiAJc3RydWN0IGlwdjZfZmxfc29ja2xpc3QgKmlwdjZfZmxfbGlzdDsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9qaGFzaC5oIGIvaW5jbHVkZS9saW51eC9qaGFzaC5oCmluZGV4IGNlZDExNTkuLjQ3Y2IwOWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvamhhc2guaAorKysgYi9pbmNsdWRlL2xpbnV4L2poYXNoLmgKQEAgLTMsMTI5ICszLDE1NiBAQAogCiAvKiBqaGFzaC5oOiBKZW5raW5zIGhhc2ggc3VwcG9ydC4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYgQm9iIEplbmtpbnMgKGJvYl9qZW5raW5zQGJ1cnRsZWJ1cnRsZS5uZXQpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYuIEJvYiBKZW5raW5zIChib2JfamVua2luc0BidXJ0bGVidXJ0bGUubmV0KQogICoKICAqIGh0dHA6Ly9idXJ0bGVidXJ0bGUubmV0L2JvYi9oYXNoLwogICoKICAqIFRoZXNlIGFyZSB0aGUgY3JlZGl0cyBmcm9tIEJvYidzIHNvdXJjZXM6CiAgKgotICogbG9va3VwMi5jLCBieSBCb2IgSmVua2lucywgRGVjZW1iZXIgMTk5NiwgUHVibGljIERvbWFpbi4KLSAqIGhhc2goKSwgaGFzaDIoKSwgaGFzaDMsIGFuZCBtaXgoKSBhcmUgZXh0ZXJuYWxseSB1c2VmdWwgZnVuY3Rpb25zLgotICogUm91dGluZXMgdG8gdGVzdCB0aGUgaGFzaCBhcmUgaW5jbHVkZWQgaWYgU0VMRl9URVNUIGlzIGRlZmluZWQuCi0gKiBZb3UgY2FuIHVzZSB0aGlzIGZyZWUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaGFzIG5vIHdhcnJhbnR5LgorICogbG9va3VwMy5jLCBieSBCb2IgSmVua2lucywgTWF5IDIwMDYsIFB1YmxpYyBEb21haW4uCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAzIERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AcmVkaGF0LmNvbSkKKyAqIFRoZXNlIGFyZSBmdW5jdGlvbnMgZm9yIHByb2R1Y2luZyAzMi1iaXQgaGFzaGVzIGZvciBoYXNoIHRhYmxlIGxvb2t1cC4KKyAqIGhhc2h3b3JkKCksIGhhc2hsaXR0bGUoKSwgaGFzaGxpdHRsZTIoKSwgaGFzaGJpZygpLCBtaXgoKSwgYW5kIGZpbmFsKCkKKyAqIGFyZSBleHRlcm5hbGx5IHVzZWZ1bCBmdW5jdGlvbnMuICBSb3V0aW5lcyB0byB0ZXN0IHRoZSBoYXNoIGFyZSBpbmNsdWRlZAorICogaWYgU0VMRl9URVNUIGlzIGRlZmluZWQuICBZb3UgY2FuIHVzZSB0aGlzIGZyZWUgZm9yIGFueSBwdXJwb3NlLiAgSXQncyBpbgorICogdGhlIHB1YmxpYyBkb21haW4uICBJdCBoYXMgbm8gd2FycmFudHkuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgSm96c2VmIEthZGxlY3NpayAoa2FkbGVjQGJsYWNraG9sZS5rZmtpLmh1KQogICoKICAqIEkndmUgbW9kaWZpZWQgQm9iJ3MgaGFzaCB0byBiZSB1c2VmdWwgaW4gdGhlIExpbnV4IGtlcm5lbCwgYW5kCi0gKiBhbnkgYnVncyBwcmVzZW50IGFyZSBzdXJlbHkgbXkgZmF1bHQuICAtRGF2ZU0KKyAqIGFueSBidWdzIHByZXNlbnQgYXJlIG15IGZhdWx0LgorICogSm96c2VmCiAgKi8KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC91bmFsaWduZWQvcGFja2VkX3N0cnVjdC5oPgogCi0vKiBOT1RFOiBBcmd1bWVudHMgYXJlIG1vZGlmaWVkLiAqLwotI2RlZmluZSBfX2poYXNoX21peChhLCBiLCBjKSBcCi17IFwKLSAgYSAtPSBiOyBhIC09IGM7IGEgXj0gKGM+PjEzKTsgXAotICBiIC09IGM7IGIgLT0gYTsgYiBePSAoYTw8OCk7IFwKLSAgYyAtPSBhOyBjIC09IGI7IGMgXj0gKGI+PjEzKTsgXAotICBhIC09IGI7IGEgLT0gYzsgYSBePSAoYz4+MTIpOyAgXAotICBiIC09IGM7IGIgLT0gYTsgYiBePSAoYTw8MTYpOyBcCi0gIGMgLT0gYTsgYyAtPSBiOyBjIF49IChiPj41KTsgXAotICBhIC09IGI7IGEgLT0gYzsgYSBePSAoYz4+Myk7ICBcCi0gIGIgLT0gYzsgYiAtPSBhOyBiIF49IChhPDwxMCk7IFwKLSAgYyAtPSBhOyBjIC09IGI7IGMgXj0gKGI+PjE1KTsgXAorLyogQmVzdCBoYXNoIHNpemVzIGFyZSBvZiBwb3dlciBvZiB0d28gKi8KKyNkZWZpbmUgamhhc2hfc2l6ZShuKSAgICgodTMyKTE8PChuKSkKKy8qIE1hc2sgdGhlIGhhc2ggdmFsdWUsIGkuZSAodmFsdWUgJiBqaGFzaF9tYXNrKG4pKSBpbnN0ZWFkIG9mICh2YWx1ZSAlIG4pICovCisjZGVmaW5lIGpoYXNoX21hc2sobikgICAoamhhc2hfc2l6ZShuKS0xKQorCisvKiBfX2poYXNoX21peCAtLSBtaXggMyAzMi1iaXQgdmFsdWVzIHJldmVyc2libHkuICovCisjZGVmaW5lIF9famhhc2hfbWl4KGEsIGIsIGMpCQkJXAorewkJCQkJCVwKKwlhIC09IGM7ICBhIF49IHJvbDMyKGMsIDQpOyAgYyArPSBiOwlcCisJYiAtPSBhOyAgYiBePSByb2wzMihhLCA2KTsgIGEgKz0gYzsJXAorCWMgLT0gYjsgIGMgXj0gcm9sMzIoYiwgOCk7ICBiICs9IGE7CVwKKwlhIC09IGM7ICBhIF49IHJvbDMyKGMsIDE2KTsgYyArPSBiOwlcCisJYiAtPSBhOyAgYiBePSByb2wzMihhLCAxOSk7IGEgKz0gYzsJXAorCWMgLT0gYjsgIGMgXj0gcm9sMzIoYiwgNCk7ICBiICs9IGE7CVwKIH0KIAotLyogVGhlIGdvbGRlbiByYXRpb246IGFuIGFyYml0cmFyeSB2YWx1ZSAqLwotI2RlZmluZSBKSEFTSF9HT0xERU5fUkFUSU8JMHg5ZTM3NzliOQorLyogX19qaGFzaF9maW5hbCAtIGZpbmFsIG1peGluZyBvZiAzIDMyLWJpdCB2YWx1ZXMgKGEsYixjKSBpbnRvIGMgKi8KKyNkZWZpbmUgX19qaGFzaF9maW5hbChhLCBiLCBjKQkJCVwKK3sJCQkJCQlcCisJYyBePSBiOyBjIC09IHJvbDMyKGIsIDE0KTsJCVwKKwlhIF49IGM7IGEgLT0gcm9sMzIoYywgMTEpOwkJXAorCWIgXj0gYTsgYiAtPSByb2wzMihhLCAyNSk7CQlcCisJYyBePSBiOyBjIC09IHJvbDMyKGIsIDE2KTsJCVwKKwlhIF49IGM7IGEgLT0gcm9sMzIoYywgNCk7CQlcCisJYiBePSBhOyBiIC09IHJvbDMyKGEsIDE0KTsJCVwKKwljIF49IGI7IGMgLT0gcm9sMzIoYiwgMjQpOwkJXAorfQogCi0vKiBUaGUgbW9zdCBnZW5lcmljIHZlcnNpb24sIGhhc2hlcyBhbiBhcmJpdHJhcnkgc2VxdWVuY2UKLSAqIG9mIGJ5dGVzLiAgTm8gYWxpZ25tZW50IG9yIGxlbmd0aCBhc3N1bXB0aW9ucyBhcmUgbWFkZSBhYm91dAotICogdGhlIGlucHV0IGtleS4KKy8qIEFuIGFyYml0cmFyeSBpbml0aWFsIHBhcmFtZXRlciAqLworI2RlZmluZSBKSEFTSF9JTklUVkFMCQkweGRlYWRiZWVmCisKKy8qIGpoYXNoIC0gaGFzaCBhbiBhcmJpdHJhcnkga2V5CisgKiBAazogc2VxdWVuY2Ugb2YgYnl0ZXMgYXMga2V5CisgKiBAbGVuZ3RoOiB0aGUgbGVuZ3RoIG9mIHRoZSBrZXkKKyAqIEBpbml0dmFsOiB0aGUgcHJldmlvdXMgaGFzaCwgb3IgYW4gYXJiaXRyYXkgdmFsdWUKKyAqCisgKiBUaGUgZ2VuZXJpYyB2ZXJzaW9uLCBoYXNoZXMgYW4gYXJiaXRyYXJ5IHNlcXVlbmNlIG9mIGJ5dGVzLgorICogTm8gYWxpZ25tZW50IG9yIGxlbmd0aCBhc3N1bXB0aW9ucyBhcmUgbWFkZSBhYm91dCB0aGUgaW5wdXQga2V5LgorICoKKyAqIFJldHVybnMgdGhlIGhhc2ggdmFsdWUgb2YgdGhlIGtleS4gVGhlIHJlc3VsdCBkZXBlbmRzIG9uIGVuZGlhbm5lc3MuCiAgKi8KIHN0YXRpYyBpbmxpbmUgdTMyIGpoYXNoKGNvbnN0IHZvaWQgKmtleSwgdTMyIGxlbmd0aCwgdTMyIGluaXR2YWwpCiB7Ci0JdTMyIGEsIGIsIGMsIGxlbjsKKwl1MzIgYSwgYiwgYzsKIAljb25zdCB1OCAqayA9IGtleTsKIAotCWxlbiA9IGxlbmd0aDsKLQlhID0gYiA9IEpIQVNIX0dPTERFTl9SQVRJTzsKLQljID0gaW5pdHZhbDsKKwkvKiBTZXQgdXAgdGhlIGludGVybmFsIHN0YXRlICovCisJYSA9IGIgPSBjID0gSkhBU0hfSU5JVFZBTCArIGxlbmd0aCArIGluaXR2YWw7CiAKLQl3aGlsZSAobGVuID49IDEyKSB7Ci0JCWEgKz0gKGtbMF0gKygodTMyKWtbMV08PDgpICsoKHUzMilrWzJdPDwxNikgKygodTMyKWtbM108PDI0KSk7Ci0JCWIgKz0gKGtbNF0gKygodTMyKWtbNV08PDgpICsoKHUzMilrWzZdPDwxNikgKygodTMyKWtbN108PDI0KSk7Ci0JCWMgKz0gKGtbOF0gKygodTMyKWtbOV08PDgpICsoKHUzMilrWzEwXTw8MTYpKygodTMyKWtbMTFdPDwyNCkpOwotCi0JCV9famhhc2hfbWl4KGEsYixjKTsKLQorCS8qIEFsbCBidXQgdGhlIGxhc3QgYmxvY2s6IGFmZmVjdCBzb21lIDMyIGJpdHMgb2YgKGEsYixjKSAqLworCXdoaWxlIChsZW5ndGggPiAxMikgeworCQlhICs9IF9fZ2V0X3VuYWxpZ25lZF9jcHUzMihrKTsKKwkJYiArPSBfX2dldF91bmFsaWduZWRfY3B1MzIoayArIDQpOworCQljICs9IF9fZ2V0X3VuYWxpZ25lZF9jcHUzMihrICsgOCk7CisJCV9famhhc2hfbWl4KGEsIGIsIGMpOworCQlsZW5ndGggLT0gMTI7CiAJCWsgKz0gMTI7Ci0JCWxlbiAtPSAxMjsKIAl9Ci0KLQljICs9IGxlbmd0aDsKLQlzd2l0Y2ggKGxlbikgewotCWNhc2UgMTE6IGMgKz0gKCh1MzIpa1sxMF08PDI0KTsKLQljYXNlIDEwOiBjICs9ICgodTMyKWtbOV08PDE2KTsKLQljYXNlIDkgOiBjICs9ICgodTMyKWtbOF08PDgpOwotCWNhc2UgOCA6IGIgKz0gKCh1MzIpa1s3XTw8MjQpOwotCWNhc2UgNyA6IGIgKz0gKCh1MzIpa1s2XTw8MTYpOwotCWNhc2UgNiA6IGIgKz0gKCh1MzIpa1s1XTw8OCk7Ci0JY2FzZSA1IDogYiArPSBrWzRdOwotCWNhc2UgNCA6IGEgKz0gKCh1MzIpa1szXTw8MjQpOwotCWNhc2UgMyA6IGEgKz0gKCh1MzIpa1syXTw8MTYpOwotCWNhc2UgMiA6IGEgKz0gKCh1MzIpa1sxXTw8OCk7Ci0JY2FzZSAxIDogYSArPSBrWzBdOwotCX07Ci0KLQlfX2poYXNoX21peChhLGIsYyk7CisJLyogTGFzdCBibG9jazogYWZmZWN0IGFsbCAzMiBiaXRzIG9mIChjKSAqLworCS8qIEFsbCB0aGUgY2FzZSBzdGF0ZW1lbnRzIGZhbGwgdGhyb3VnaCAqLworCXN3aXRjaCAobGVuZ3RoKSB7CisJY2FzZSAxMjogYyArPSAodTMyKWtbMTFdPDwyNDsKKwljYXNlIDExOiBjICs9ICh1MzIpa1sxMF08PDE2OworCWNhc2UgMTA6IGMgKz0gKHUzMilrWzldPDw4OworCWNhc2UgOTogIGMgKz0ga1s4XTsKKwljYXNlIDg6ICBiICs9ICh1MzIpa1s3XTw8MjQ7CisJY2FzZSA3OiAgYiArPSAodTMyKWtbNl08PDE2OworCWNhc2UgNjogIGIgKz0gKHUzMilrWzVdPDw4OworCWNhc2UgNTogIGIgKz0ga1s0XTsKKwljYXNlIDQ6ICBhICs9ICh1MzIpa1szXTw8MjQ7CisJY2FzZSAzOiAgYSArPSAodTMyKWtbMl08PDE2OworCWNhc2UgMjogIGEgKz0gKHUzMilrWzFdPDw4OworCWNhc2UgMTogIGEgKz0ga1swXTsKKwkJIF9famhhc2hfZmluYWwoYSwgYiwgYyk7CisJY2FzZSAwOiAvKiBOb3RoaW5nIGxlZnQgdG8gYWRkICovCisJCWJyZWFrOworCX0KIAogCXJldHVybiBjOwogfQogCi0vKiBBIHNwZWNpYWwgb3B0aW1pemVkIHZlcnNpb24gdGhhdCBoYW5kbGVzIDEgb3IgbW9yZSBvZiB1MzJzLgotICogVGhlIGxlbmd0aCBwYXJhbWV0ZXIgaGVyZSBpcyB0aGUgbnVtYmVyIG9mIHUzMnMgaW4gdGhlIGtleS4KKy8qIGpoYXNoMiAtIGhhc2ggYW4gYXJyYXkgb2YgdTMyJ3MKKyAqIEBrOiB0aGUga2V5IHdoaWNoIG11c3QgYmUgYW4gYXJyYXkgb2YgdTMyJ3MKKyAqIEBsZW5ndGg6IHRoZSBudW1iZXIgb2YgdTMyJ3MgaW4gdGhlIGtleQorICogQGluaXR2YWw6IHRoZSBwcmV2aW91cyBoYXNoLCBvciBhbiBhcmJpdHJheSB2YWx1ZQorICoKKyAqIFJldHVybnMgdGhlIGhhc2ggdmFsdWUgb2YgdGhlIGtleS4KICAqLwogc3RhdGljIGlubGluZSB1MzIgamhhc2gyKGNvbnN0IHUzMiAqaywgdTMyIGxlbmd0aCwgdTMyIGluaXR2YWwpCiB7Ci0JdTMyIGEsIGIsIGMsIGxlbjsKKwl1MzIgYSwgYiwgYzsKIAotCWEgPSBiID0gSkhBU0hfR09MREVOX1JBVElPOwotCWMgPSBpbml0dmFsOwotCWxlbiA9IGxlbmd0aDsKKwkvKiBTZXQgdXAgdGhlIGludGVybmFsIHN0YXRlICovCisJYSA9IGIgPSBjID0gSkhBU0hfSU5JVFZBTCArIChsZW5ndGg8PDIpICsgaW5pdHZhbDsKIAotCXdoaWxlIChsZW4gPj0gMykgeworCS8qIEhhbmRsZSBtb3N0IG9mIHRoZSBrZXkgKi8KKwl3aGlsZSAobGVuZ3RoID4gMykgewogCQlhICs9IGtbMF07CiAJCWIgKz0ga1sxXTsKIAkJYyArPSBrWzJdOwogCQlfX2poYXNoX21peChhLCBiLCBjKTsKLQkJayArPSAzOyBsZW4gLT0gMzsKKwkJbGVuZ3RoIC09IDM7CisJCWsgKz0gMzsKIAl9CiAKLQljICs9IGxlbmd0aCAqIDQ7Ci0KLQlzd2l0Y2ggKGxlbikgewotCWNhc2UgMiA6IGIgKz0ga1sxXTsKLQljYXNlIDEgOiBhICs9IGtbMF07Ci0JfTsKLQotCV9famhhc2hfbWl4KGEsYixjKTsKKwkvKiBIYW5kbGUgdGhlIGxhc3QgMyB1MzInczogYWxsIHRoZSBjYXNlIHN0YXRlbWVudHMgZmFsbCB0aHJvdWdoICovCisJc3dpdGNoIChsZW5ndGgpIHsKKwljYXNlIDM6IGMgKz0ga1syXTsKKwljYXNlIDI6IGIgKz0ga1sxXTsKKwljYXNlIDE6IGEgKz0ga1swXTsKKwkJX19qaGFzaF9maW5hbChhLCBiLCBjKTsKKwljYXNlIDA6CS8qIE5vdGhpbmcgbGVmdCB0byBhZGQgKi8KKwkJYnJlYWs7CisJfQogCiAJcmV0dXJuIGM7CiB9CiAKIAotLyogQSBzcGVjaWFsIHVsdHJhLW9wdGltaXplZCB2ZXJzaW9ucyB0aGF0IGtub3dzIHRoZXkgYXJlIGhhc2hpbmcgZXhhY3RseQotICogMywgMiBvciAxIHdvcmQocykuCi0gKgotICogTk9URTogSW4gcGFydGljdWxhciB0aGUgImMgKz0gbGVuZ3RoOyBfX2poYXNoX21peChhLGIsYyk7IiBub3JtYWxseQotICogICAgICAgZG9uZSBhdCB0aGUgZW5kIGlzIG5vdCBkb25lIGhlcmUuCi0gKi8KKy8qIGpoYXNoXzN3b3JkcyAtIGhhc2ggZXhhY3RseSAzLCAyIG9yIDEgd29yZChzKSAqLwogc3RhdGljIGlubGluZSB1MzIgamhhc2hfM3dvcmRzKHUzMiBhLCB1MzIgYiwgdTMyIGMsIHUzMiBpbml0dmFsKQogewotCWEgKz0gSkhBU0hfR09MREVOX1JBVElPOwotCWIgKz0gSkhBU0hfR09MREVOX1JBVElPOworCWEgKz0gSkhBU0hfSU5JVFZBTDsKKwliICs9IEpIQVNIX0lOSVRWQUw7CiAJYyArPSBpbml0dmFsOwogCi0JX19qaGFzaF9taXgoYSwgYiwgYyk7CisJX19qaGFzaF9maW5hbChhLCBiLCBjKTsKIAogCXJldHVybiBjOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rZXJuZWxfc3RhdC5oIGIvaW5jbHVkZS9saW51eC9rZXJuZWxfc3RhdC5oCmluZGV4IGFkNTRjODQuLjQ0ZTgzYmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva2VybmVsX3N0YXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2tlcm5lbF9zdGF0LmgKQEAgLTQ3LDcgKzQ3LDcgQEAKIAogI2lmbmRlZiBDT05GSUdfR0VORVJJQ19IQVJESVJRUwogI2RlZmluZSBrc3RhdF9pcnFzX3RoaXNfY3B1KGlycSkgXAotCShrc3RhdF90aGlzX2NwdS5pcnFzW2lycV0pCisJKHRoaXNfY3B1X3JlYWQoa3N0YXQuaXJxc1tpcnFdKQogCiBzdHJ1Y3QgaXJxX2Rlc2M7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3Byb2Jlcy5oIGIvaW5jbHVkZS9saW51eC9rcHJvYmVzLmgKaW5kZXggZTdkMWIyZS4uZGQ3YzEyZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rcHJvYmVzLmgKKysrIGIvaW5jbHVkZS9saW51eC9rcHJvYmVzLmgKQEAgLTI3NSw3ICsyNzUsOSBAQAogZXh0ZXJuIGludCBhcmNoX2NoZWNrX29wdGltaXplZF9rcHJvYmUoc3RydWN0IG9wdGltaXplZF9rcHJvYmUgKm9wKTsKIGV4dGVybiBpbnQgYXJjaF9wcmVwYXJlX29wdGltaXplZF9rcHJvYmUoc3RydWN0IG9wdGltaXplZF9rcHJvYmUgKm9wKTsKIGV4dGVybiB2b2lkIGFyY2hfcmVtb3ZlX29wdGltaXplZF9rcHJvYmUoc3RydWN0IG9wdGltaXplZF9rcHJvYmUgKm9wKTsKLWV4dGVybiBpbnQgIGFyY2hfb3B0aW1pemVfa3Byb2JlKHN0cnVjdCBvcHRpbWl6ZWRfa3Byb2JlICpvcCk7CitleHRlcm4gdm9pZCBhcmNoX29wdGltaXplX2twcm9iZXMoc3RydWN0IGxpc3RfaGVhZCAqb3BsaXN0KTsKK2V4dGVybiB2b2lkIGFyY2hfdW5vcHRpbWl6ZV9rcHJvYmVzKHN0cnVjdCBsaXN0X2hlYWQgKm9wbGlzdCwKKwkJCQkgICAgc3RydWN0IGxpc3RfaGVhZCAqZG9uZV9saXN0KTsKIGV4dGVybiB2b2lkIGFyY2hfdW5vcHRpbWl6ZV9rcHJvYmUoc3RydWN0IG9wdGltaXplZF9rcHJvYmUgKm9wKTsKIGV4dGVybiBrcHJvYmVfb3Bjb2RlX3QgKmdldF9vcHRpbnNuX3Nsb3Qodm9pZCk7CiBleHRlcm4gdm9pZCBmcmVlX29wdGluc25fc2xvdChrcHJvYmVfb3Bjb2RlX3QgKnNsb3QsIGludCBkaXJ0eSk7CkBAIC0zMDMsMTIgKzMwNSwxMiBAQAogLyoga3Byb2JlX3J1bm5pbmcoKSB3aWxsIGp1c3QgcmV0dXJuIHRoZSBjdXJyZW50X2twcm9iZSBvbiB0aGlzIENQVSAqLwogc3RhdGljIGlubGluZSBzdHJ1Y3Qga3Byb2JlICprcHJvYmVfcnVubmluZyh2b2lkKQogewotCXJldHVybiAoX19nZXRfY3B1X3ZhcihjdXJyZW50X2twcm9iZSkpOworCXJldHVybiAoX190aGlzX2NwdV9yZWFkKGN1cnJlbnRfa3Byb2JlKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCByZXNldF9jdXJyZW50X2twcm9iZSh2b2lkKQogewotCV9fZ2V0X2NwdV92YXIoY3VycmVudF9rcHJvYmUpID0gTlVMTDsKKwlfX3RoaXNfY3B1X3dyaXRlKGN1cnJlbnRfa3Byb2JlLCBOVUxMKTsKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqZ2V0X2twcm9iZV9jdGxibGsodm9pZCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGliYXRhLmggYi9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oCmluZGV4IGQ5NDdiMTIuLmM5YzVkN2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbGliYXRhLmgKKysrIGIvaW5jbHVkZS9saW51eC9saWJhdGEuaApAQCAtOTk2LDggKzk5Niw3IEBACiBleHRlcm4gaW50IGF0YV9zYXNfcG9ydF9zdGFydChzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKIGV4dGVybiB2b2lkIGF0YV9zYXNfcG9ydF9zdG9wKHN0cnVjdCBhdGFfcG9ydCAqYXApOwogZXh0ZXJuIGludCBhdGFfc2FzX3NsYXZlX2NvbmZpZ3VyZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKiwgc3RydWN0IGF0YV9wb3J0ICopOwotZXh0ZXJuIGludCBhdGFfc2FzX3F1ZXVlY21kKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwgdm9pZCAoKmRvbmUpKHN0cnVjdCBzY3NpX2NtbmQgKiksCi0JCQkgICAgc3RydWN0IGF0YV9wb3J0ICphcCk7CitleHRlcm4gaW50IGF0YV9zYXNfcXVldWVjbWQoc3RydWN0IHNjc2lfY21uZCAqY21kLCBzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKIGV4dGVybiBpbnQgc2F0YV9zY3JfdmFsaWQoc3RydWN0IGF0YV9saW5rICpsaW5rKTsKIGV4dGVybiBpbnQgc2F0YV9zY3JfcmVhZChzdHJ1Y3QgYXRhX2xpbmsgKmxpbmssIGludCByZWcsIHUzMiAqdmFsKTsKIGV4dGVybiBpbnQgc2F0YV9zY3Jfd3JpdGUoc3RydWN0IGF0YV9saW5rICpsaW5rLCBpbnQgcmVnLCB1MzIgdmFsKTsKQEAgLTEwNDAsOCArMTAzOSw3IEBACiAJCQkJCXN0cnVjdCBhdGFfdGFza2ZpbGUgKnRmLCB1MTYgKmlkKTsKIGV4dGVybiB2b2lkIGF0YV9xY19jb21wbGV0ZShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKIGV4dGVybiBpbnQgYXRhX3FjX2NvbXBsZXRlX211bHRpcGxlKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHUzMiBxY19hY3RpdmUpOwotZXh0ZXJuIHZvaWQgYXRhX3Njc2lfc2ltdWxhdGUoc3RydWN0IGF0YV9kZXZpY2UgKmRldiwgc3RydWN0IHNjc2lfY21uZCAqY21kLAotCQkJICAgICAgdm9pZCAoKmRvbmUpKHN0cnVjdCBzY3NpX2NtbmQgKikpOworZXh0ZXJuIHZvaWQgYXRhX3Njc2lfc2ltdWxhdGUoc3RydWN0IGF0YV9kZXZpY2UgKmRldiwgc3RydWN0IHNjc2lfY21uZCAqY21kKTsKIGV4dGVybiBpbnQgYXRhX3N0ZF9iaW9zX3BhcmFtKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwKIAkJCSAgICAgIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsCiAJCQkgICAgICBzZWN0b3JfdCBjYXBhY2l0eSwgaW50IGdlb21bXSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xpc3RfYmwuaCBiL2luY2x1ZGUvbGludXgvbGlzdF9ibC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllZTk3ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2xpc3RfYmwuaApAQCAtMCwwICsxLDE0NCBAQAorI2lmbmRlZiBfTElOVVhfTElTVF9CTF9ICisjZGVmaW5lIF9MSU5VWF9MSVNUX0JMX0gKKworI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKworLyoKKyAqIFNwZWNpYWwgdmVyc2lvbiBvZiBsaXN0cywgd2hlcmUgaGVhZCBvZiB0aGUgbGlzdCBoYXMgYSBsb2NrIGluIHRoZSBsb3dlc3QKKyAqIGJpdC4gVGhpcyBpcyB1c2VmdWwgZm9yIHNjYWxhYmxlIGhhc2ggdGFibGVzIHdpdGhvdXQgaW5jcmVhc2luZyBtZW1vcnkKKyAqIGZvb3RwcmludCBvdmVyaGVhZC4KKyAqCisgKiBGb3IgbW9kaWZpY2F0aW9uIG9wZXJhdGlvbnMsIHRoZSAwIGJpdCBvZiBobGlzdF9ibF9oZWFkLT5maXJzdAorICogcG9pbnRlciBtdXN0IGJlIHNldC4KKyAqCisgKiBXaXRoIHNvbWUgc21hbGwgbW9kaWZpY2F0aW9ucywgdGhpcyBjYW4gZWFzaWx5IGJlIGFkYXB0ZWQgdG8gc3RvcmUgc2V2ZXJhbAorICogYXJiaXRyYXJ5IGJpdHMgKG5vdCBqdXN0IGEgc2luZ2xlIGxvY2sgYml0KSwgaWYgdGhlIG5lZWQgYXJpc2VzIHRvIHN0b3JlCisgKiBzb21lIGZhc3QgYW5kIGNvbXBhY3QgYXV4aWxpYXJ5IGRhdGEuCisgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX1NNUCkgfHwgZGVmaW5lZChDT05GSUdfREVCVUdfU1BJTkxPQ0spCisjZGVmaW5lIExJU1RfQkxfTE9DS01BU0sJMVVMCisjZWxzZQorI2RlZmluZSBMSVNUX0JMX0xPQ0tNQVNLCTBVTAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfREVCVUdfTElTVAorI2RlZmluZSBMSVNUX0JMX0JVR19PTih4KSBCVUdfT04oeCkKKyNlbHNlCisjZGVmaW5lIExJU1RfQkxfQlVHX09OKHgpCisjZW5kaWYKKworCitzdHJ1Y3QgaGxpc3RfYmxfaGVhZCB7CisJc3RydWN0IGhsaXN0X2JsX25vZGUgKmZpcnN0OworfTsKKworc3RydWN0IGhsaXN0X2JsX25vZGUgeworCXN0cnVjdCBobGlzdF9ibF9ub2RlICpuZXh0LCAqKnBwcmV2OworfTsKKyNkZWZpbmUgSU5JVF9ITElTVF9CTF9IRUFEKHB0cikgXAorCSgocHRyKS0+Zmlyc3QgPSBOVUxMKQorCitzdGF0aWMgaW5saW5lIHZvaWQgSU5JVF9ITElTVF9CTF9OT0RFKHN0cnVjdCBobGlzdF9ibF9ub2RlICpoKQoreworCWgtPm5leHQgPSBOVUxMOworCWgtPnBwcmV2ID0gTlVMTDsKK30KKworI2RlZmluZSBobGlzdF9ibF9lbnRyeShwdHIsIHR5cGUsIG1lbWJlcikgY29udGFpbmVyX29mKHB0cix0eXBlLG1lbWJlcikKKworc3RhdGljIGlubGluZSBpbnQgaGxpc3RfYmxfdW5oYXNoZWQoY29uc3Qgc3RydWN0IGhsaXN0X2JsX25vZGUgKmgpCit7CisJcmV0dXJuICFoLT5wcHJldjsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgaGxpc3RfYmxfbm9kZSAqaGxpc3RfYmxfZmlyc3Qoc3RydWN0IGhsaXN0X2JsX2hlYWQgKmgpCit7CisJcmV0dXJuIChzdHJ1Y3QgaGxpc3RfYmxfbm9kZSAqKQorCQkoKHVuc2lnbmVkIGxvbmcpaC0+Zmlyc3QgJiB+TElTVF9CTF9MT0NLTUFTSyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBobGlzdF9ibF9zZXRfZmlyc3Qoc3RydWN0IGhsaXN0X2JsX2hlYWQgKmgsCisJCQkJCXN0cnVjdCBobGlzdF9ibF9ub2RlICpuKQoreworCUxJU1RfQkxfQlVHX09OKCh1bnNpZ25lZCBsb25nKW4gJiBMSVNUX0JMX0xPQ0tNQVNLKTsKKwlMSVNUX0JMX0JVR19PTighKCh1bnNpZ25lZCBsb25nKWgtPmZpcnN0ICYgTElTVF9CTF9MT0NLTUFTSykpOworCWgtPmZpcnN0ID0gKHN0cnVjdCBobGlzdF9ibF9ub2RlICopKCh1bnNpZ25lZCBsb25nKW4gfCBMSVNUX0JMX0xPQ0tNQVNLKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgaGxpc3RfYmxfZW1wdHkoY29uc3Qgc3RydWN0IGhsaXN0X2JsX2hlYWQgKmgpCit7CisJcmV0dXJuICEoKHVuc2lnbmVkIGxvbmcpaC0+Zmlyc3QgJiB+TElTVF9CTF9MT0NLTUFTSyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBobGlzdF9ibF9hZGRfaGVhZChzdHJ1Y3QgaGxpc3RfYmxfbm9kZSAqbiwKKwkJCQkJc3RydWN0IGhsaXN0X2JsX2hlYWQgKmgpCit7CisJc3RydWN0IGhsaXN0X2JsX25vZGUgKmZpcnN0ID0gaGxpc3RfYmxfZmlyc3QoaCk7CisKKwluLT5uZXh0ID0gZmlyc3Q7CisJaWYgKGZpcnN0KQorCQlmaXJzdC0+cHByZXYgPSAmbi0+bmV4dDsKKwluLT5wcHJldiA9ICZoLT5maXJzdDsKKwlobGlzdF9ibF9zZXRfZmlyc3QoaCwgbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2hsaXN0X2JsX2RlbChzdHJ1Y3QgaGxpc3RfYmxfbm9kZSAqbikKK3sKKwlzdHJ1Y3QgaGxpc3RfYmxfbm9kZSAqbmV4dCA9IG4tPm5leHQ7CisJc3RydWN0IGhsaXN0X2JsX25vZGUgKipwcHJldiA9IG4tPnBwcmV2OworCisJTElTVF9CTF9CVUdfT04oKHVuc2lnbmVkIGxvbmcpbiAmIExJU1RfQkxfTE9DS01BU0spOworCisJLyogcHByZXYgbWF5IGJlIGBmaXJzdGAsIHNvIGJlIGNhcmVmdWwgbm90IHRvIGxvc2UgdGhlIGxvY2sgYml0ICovCisJKnBwcmV2ID0gKHN0cnVjdCBobGlzdF9ibF9ub2RlICopCisJCQkoKHVuc2lnbmVkIGxvbmcpbmV4dCB8CisJCQkgKCh1bnNpZ25lZCBsb25nKSpwcHJldiAmIExJU1RfQkxfTE9DS01BU0spKTsKKwlpZiAobmV4dCkKKwkJbmV4dC0+cHByZXYgPSBwcHJldjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGhsaXN0X2JsX2RlbChzdHJ1Y3QgaGxpc3RfYmxfbm9kZSAqbikKK3sKKwlfX2hsaXN0X2JsX2RlbChuKTsKKwluLT5uZXh0ID0gTElTVF9QT0lTT04xOworCW4tPnBwcmV2ID0gTElTVF9QT0lTT04yOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaGxpc3RfYmxfZGVsX2luaXQoc3RydWN0IGhsaXN0X2JsX25vZGUgKm4pCit7CisJaWYgKCFobGlzdF9ibF91bmhhc2hlZChuKSkgeworCQlfX2hsaXN0X2JsX2RlbChuKTsKKwkJSU5JVF9ITElTVF9CTF9OT0RFKG4pOworCX0KK30KKworLyoqCisgKiBobGlzdF9ibF9mb3JfZWFjaF9lbnRyeQktIGl0ZXJhdGUgb3ZlciBsaXN0IG9mIGdpdmVuIHR5cGUKKyAqIEB0cG9zOgl0aGUgdHlwZSAqIHRvIHVzZSBhcyBhIGxvb3AgY3Vyc29yLgorICogQHBvczoJdGhlICZzdHJ1Y3QgaGxpc3Rfbm9kZSB0byB1c2UgYXMgYSBsb29wIGN1cnNvci4KKyAqIEBoZWFkOgl0aGUgaGVhZCBmb3IgeW91ciBsaXN0LgorICogQG1lbWJlcjoJdGhlIG5hbWUgb2YgdGhlIGhsaXN0X25vZGUgd2l0aGluIHRoZSBzdHJ1Y3QuCisgKgorICovCisjZGVmaW5lIGhsaXN0X2JsX2Zvcl9lYWNoX2VudHJ5KHRwb3MsIHBvcywgaGVhZCwgbWVtYmVyKQkJXAorCWZvciAocG9zID0gaGxpc3RfYmxfZmlyc3QoaGVhZCk7CQkJCVwKKwkgICAgIHBvcyAmJgkJCQkJCQlcCisJCSh7IHRwb3MgPSBobGlzdF9ibF9lbnRyeShwb3MsIHR5cGVvZigqdHBvcyksIG1lbWJlcik7IDE7fSk7IFwKKwkgICAgIHBvcyA9IHBvcy0+bmV4dCkKKworLyoqCisgKiBobGlzdF9ibF9mb3JfZWFjaF9lbnRyeV9zYWZlIC0gaXRlcmF0ZSBvdmVyIGxpc3Qgb2YgZ2l2ZW4gdHlwZSBzYWZlIGFnYWluc3QgcmVtb3ZhbCBvZiBsaXN0IGVudHJ5CisgKiBAdHBvczoJdGhlIHR5cGUgKiB0byB1c2UgYXMgYSBsb29wIGN1cnNvci4KKyAqIEBwb3M6CXRoZSAmc3RydWN0IGhsaXN0X25vZGUgdG8gdXNlIGFzIGEgbG9vcCBjdXJzb3IuCisgKiBAbjoJCWFub3RoZXIgJnN0cnVjdCBobGlzdF9ub2RlIHRvIHVzZSBhcyB0ZW1wb3Jhcnkgc3RvcmFnZQorICogQGhlYWQ6CXRoZSBoZWFkIGZvciB5b3VyIGxpc3QuCisgKiBAbWVtYmVyOgl0aGUgbmFtZSBvZiB0aGUgaGxpc3Rfbm9kZSB3aXRoaW4gdGhlIHN0cnVjdC4KKyAqLworI2RlZmluZSBobGlzdF9ibF9mb3JfZWFjaF9lbnRyeV9zYWZlKHRwb3MsIHBvcywgbiwgaGVhZCwgbWVtYmVyKQkgXAorCWZvciAocG9zID0gaGxpc3RfYmxfZmlyc3QoaGVhZCk7CQkJCSBcCisJICAgICBwb3MgJiYgKHsgbiA9IHBvcy0+bmV4dDsgMTsgfSkgJiYgCQkJCSBcCisJCSh7IHRwb3MgPSBobGlzdF9ibF9lbnRyeShwb3MsIHR5cGVvZigqdHBvcyksIG1lbWJlcik7IDE7fSk7IFwKKwkgICAgIHBvcyA9IG4pCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZGlvLmggYi9pbmNsdWRlL2xpbnV4L21kaW8uaAppbmRleCBjNzc5YjQ5Li5iMTQ5NGFjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21kaW8uaAorKysgYi9pbmNsdWRlL2xpbnV4L21kaW8uaApAQCAtNTUsNiArNTUsNyBAQAogI2RlZmluZSBNRElPX1BDU18xMEdCUlRfU1RBVDIJMzMJLyogMTBHQkFTRS1SLy1UIFBDUyBzdGF0dXMgMiAqLwogI2RlZmluZSBNRElPX0FOXzEwR0JUX0NUUkwJMzIJLyogMTBHQkFTRS1UIGF1dG8tbmVnb3RpYXRpb24gY29udHJvbCAqLwogI2RlZmluZSBNRElPX0FOXzEwR0JUX1NUQVQJMzMJLyogMTBHQkFTRS1UIGF1dG8tbmVnb3RpYXRpb24gc3RhdHVzICovCisjZGVmaW5lIE1ESU9fQU5fRUVFX0FEVgkJNjAJLyogRUVFIGFkdmVydGlzZW1lbnQgKi8KIAogLyogTEFTSSAoTGluayBBbGFybSBTdGF0dXMgSW50ZXJydXB0KSByZWdpc3RlcnMsIGRlZmluZWQgYnkgWEVOUEFLIE1TQS4gKi8KICNkZWZpbmUgTURJT19QTUFfTEFTSV9SWENUUkwJMHg5MDAwCS8qIFJYX0FMQVJNIGNvbnRyb2wgKi8KQEAgLTIzNSw2ICsyMzYsMTAgQEAKICNkZWZpbmUgTURJT19BTl8xMEdCVF9TVEFUX01TCQkweDQwMDAJLyogTWFzdGVyL3NsYXZlIGNvbmZpZyAqLwogI2RlZmluZSBNRElPX0FOXzEwR0JUX1NUQVRfTVNGTFQJMHg4MDAwCS8qIE1hc3Rlci9zbGF2ZSBjb25maWcgZmF1bHQgKi8KIAorLyogQU4gRUVFIEFkdmVydGlzZW1lbnQgcmVnaXN0ZXIuICovCisjZGVmaW5lIE1ESU9fQU5fRUVFX0FEVl8xMDBUWAkJMHgwMDAyCS8qIEFkdmVydGlzZSAxMDBUWCBFRUUgY2FwICovCisjZGVmaW5lIE1ESU9fQU5fRUVFX0FEVl8xMDAwVAkJMHgwMDA0CS8qIEFkdmVydGlzZSAxMDAwVCBFRUUgY2FwICovCisKIC8qIExBU0kgUlhfQUxBUk0gY29udHJvbC9zdGF0dXMgcmVnaXN0ZXJzLiAqLwogI2RlZmluZSBNRElPX1BNQV9MQVNJX1JYX1BIWVhTTEZMVAkweDAwMDEJLyogUEhZIFhTIFJYIGxvY2FsIGZhdWx0ICovCiAjZGVmaW5lIE1ESU9fUE1BX0xBU0lfUlhfUENTTEZMVAkweDAwMDgJLyogUENTIFJYIGxvY2FsIGZhdWx0ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC90YzM1ODkyLmggYi9pbmNsdWRlL2xpbnV4L21mZC90YzM1ODkyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmZjMwOTQuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9tZmQvdGMzNTg5Mi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTM2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIFNULUVyaWNzc29uIFNBIDIwMTAKLSAqCi0gKiBMaWNlbnNlIFRlcm1zOiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyCi0gKi8KLQotI2lmbmRlZiBfX0xJTlVYX01GRF9UQzM1ODkyX0gKLSNkZWZpbmUgX19MSU5VWF9NRkRfVEMzNTg5Ml9ICi0KLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLQotI2RlZmluZSBUQzM1ODkyX1JTVENUUkxfSVJRUlNUCSgxIDw8IDQpCi0jZGVmaW5lIFRDMzU4OTJfUlNUQ1RSTF9USU1SU1QJKDEgPDwgMykKLSNkZWZpbmUgVEMzNTg5Ml9SU1RDVFJMX1JPVFJTVAkoMSA8PCAyKQotI2RlZmluZSBUQzM1ODkyX1JTVENUUkxfS0JEUlNUCSgxIDw8IDEpCi0jZGVmaW5lIFRDMzU4OTJfUlNUQ1RSTF9HUElSU1QJKDEgPDwgMCkKLQotI2RlZmluZSBUQzM1ODkyX0lSUVNUCQkweDkxCi0KLSNkZWZpbmUgVEMzNTg5Ml9NQU5GQ09ERV9NQUdJQwkweDAzCi0jZGVmaW5lIFRDMzU4OTJfTUFORkNPREUJMHg4MAotI2RlZmluZSBUQzM1ODkyX1ZFUlNJT04JCTB4ODEKLSNkZWZpbmUgVEMzNTg5Ml9JT0NGRwkJMHhBNwotCi0jZGVmaW5lIFRDMzU4OTJfQ0xLTU9ERQkJMHg4OAotI2RlZmluZSBUQzM1ODkyX0NMS0NGRwkJMHg4OQotI2RlZmluZSBUQzM1ODkyX0NMS0VOCQkweDhBCi0KLSNkZWZpbmUgVEMzNTg5Ml9SU1RDVFJMCQkweDgyCi0jZGVmaW5lIFRDMzU4OTJfRVhUUlNUTgkJMHg4MwotI2RlZmluZSBUQzM1ODkyX1JTVElOVENMUgkweDg0Ci0KLSNkZWZpbmUgVEMzNTg5Ml9HUElPSVMwCQkweEM5Ci0jZGVmaW5lIFRDMzU4OTJfR1BJT0lTMQkJMHhDQQotI2RlZmluZSBUQzM1ODkyX0dQSU9JUzIJCTB4Q0IKLSNkZWZpbmUgVEMzNTg5Ml9HUElPSUJFMAkweENDCi0jZGVmaW5lIFRDMzU4OTJfR1BJT0lCRTEJMHhDRAotI2RlZmluZSBUQzM1ODkyX0dQSU9JQkUyCTB4Q0UKLSNkZWZpbmUgVEMzNTg5Ml9HUElPSUVWMAkweENGCi0jZGVmaW5lIFRDMzU4OTJfR1BJT0lFVjEJMHhEMAotI2RlZmluZSBUQzM1ODkyX0dQSU9JRVYyCTB4RDEKLSNkZWZpbmUgVEMzNTg5Ml9HUElPSUUwCQkweEQyCi0jZGVmaW5lIFRDMzU4OTJfR1BJT0lFMQkJMHhEMwotI2RlZmluZSBUQzM1ODkyX0dQSU9JRTIJCTB4RDQKLSNkZWZpbmUgVEMzNTg5Ml9HUElPUklTMAkweEQ2Ci0jZGVmaW5lIFRDMzU4OTJfR1BJT1JJUzEJMHhENwotI2RlZmluZSBUQzM1ODkyX0dQSU9SSVMyCTB4RDgKLSNkZWZpbmUgVEMzNTg5Ml9HUElPTUlTMAkweEQ5Ci0jZGVmaW5lIFRDMzU4OTJfR1BJT01JUzEJMHhEQQotI2RlZmluZSBUQzM1ODkyX0dQSU9NSVMyCTB4REIKLSNkZWZpbmUgVEMzNTg5Ml9HUElPSUMwCQkweERDCi0jZGVmaW5lIFRDMzU4OTJfR1BJT0lDMQkJMHhERAotI2RlZmluZSBUQzM1ODkyX0dQSU9JQzIJCTB4REUKLQotI2RlZmluZSBUQzM1ODkyX0dQSU9EQVRBMAkweEMwCi0jZGVmaW5lIFRDMzU4OTJfR1BJT01BU0swCTB4YzEKLSNkZWZpbmUgVEMzNTg5Ml9HUElPREFUQTEJMHhDMgotI2RlZmluZSBUQzM1ODkyX0dQSU9NQVNLMQkweGMzCi0jZGVmaW5lIFRDMzU4OTJfR1BJT0RBVEEyCTB4QzQKLSNkZWZpbmUgVEMzNTg5Ml9HUElPTUFTSzIJMHhDNQotCi0jZGVmaW5lIFRDMzU4OTJfR1BJT0RJUjAJMHhDNgotI2RlZmluZSBUQzM1ODkyX0dQSU9ESVIxCTB4QzcKLSNkZWZpbmUgVEMzNTg5Ml9HUElPRElSMgkweEM4Ci0KLSNkZWZpbmUgVEMzNTg5Ml9HUElPU1lOQzAJMHhFNgotI2RlZmluZSBUQzM1ODkyX0dQSU9TWU5DMQkweEU3Ci0jZGVmaW5lIFRDMzU4OTJfR1BJT1NZTkMyCTB4RTgKLQotI2RlZmluZSBUQzM1ODkyX0dQSU9XQUtFMAkweEU5Ci0jZGVmaW5lIFRDMzU4OTJfR1BJT1dBS0UxCTB4RUEKLSNkZWZpbmUgVEMzNTg5Ml9HUElPV0FLRTIJMHhFQgotCi0jZGVmaW5lIFRDMzU4OTJfR1BJT09ETTAJMHhFMAotI2RlZmluZSBUQzM1ODkyX0dQSU9PREUwCTB4RTEKLSNkZWZpbmUgVEMzNTg5Ml9HUElPT0RNMQkweEUyCi0jZGVmaW5lIFRDMzU4OTJfR1BJT09ERTEJMHhFMwotI2RlZmluZSBUQzM1ODkyX0dQSU9PRE0yCTB4RTQKLSNkZWZpbmUgVEMzNTg5Ml9HUElPT0RFMgkweEU1Ci0KLSNkZWZpbmUgVEMzNTg5Ml9JTlRfR1BJSVJRCTAKLSNkZWZpbmUgVEMzNTg5Ml9JTlRfVEkwSVJRCTEKLSNkZWZpbmUgVEMzNTg5Ml9JTlRfVEkxSVJRCTIKLSNkZWZpbmUgVEMzNTg5Ml9JTlRfVEkySVJRCTMKLSNkZWZpbmUgVEMzNTg5Ml9JTlRfUk9USVJRCTUKLSNkZWZpbmUgVEMzNTg5Ml9JTlRfS0JESVJRCTYKLSNkZWZpbmUgVEMzNTg5Ml9JTlRfUE9SSVJRCTcKLQotI2RlZmluZSBUQzM1ODkyX05SX0lOVEVSTkFMX0lSUVMJOAotI2RlZmluZSBUQzM1ODkyX0lOVF9HUElPKHgpCShUQzM1ODkyX05SX0lOVEVSTkFMX0lSUVMgKyAoeCkpCi0KLXN0cnVjdCB0YzM1ODkyIHsKLQlzdHJ1Y3QgbXV0ZXggbG9jazsKLQlzdHJ1Y3QgZGV2aWNlICpkZXY7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmkyYzsKLQotCWludCBpcnFfYmFzZTsKLQlpbnQgbnVtX2dwaW87Ci0Jc3RydWN0IHRjMzU4OTJfcGxhdGZvcm1fZGF0YSAqcGRhdGE7Ci19OwotCi1leHRlcm4gaW50IHRjMzU4OTJfcmVnX3dyaXRlKHN0cnVjdCB0YzM1ODkyICp0YzM1ODkyLCB1OCByZWcsIHU4IGRhdGEpOwotZXh0ZXJuIGludCB0YzM1ODkyX3JlZ19yZWFkKHN0cnVjdCB0YzM1ODkyICp0YzM1ODkyLCB1OCByZWcpOwotZXh0ZXJuIGludCB0YzM1ODkyX2Jsb2NrX3JlYWQoc3RydWN0IHRjMzU4OTIgKnRjMzU4OTIsIHU4IHJlZywgdTggbGVuZ3RoLAotCQkJICAgICAgdTggKnZhbHVlcyk7Ci1leHRlcm4gaW50IHRjMzU4OTJfYmxvY2tfd3JpdGUoc3RydWN0IHRjMzU4OTIgKnRjMzU4OTIsIHU4IHJlZywgdTggbGVuZ3RoLAotCQkJICAgICAgIGNvbnN0IHU4ICp2YWx1ZXMpOwotZXh0ZXJuIGludCB0YzM1ODkyX3NldF9iaXRzKHN0cnVjdCB0YzM1ODkyICp0YzM1ODkyLCB1OCByZWcsIHU4IG1hc2ssIHU4IHZhbCk7Ci0KLS8qKgotICogc3RydWN0IHRjMzU4OTJfZ3Bpb19wbGF0Zm9ybV9kYXRhIC0gVEMzNTg5MiBHUElPIHBsYXRmb3JtIGRhdGEKLSAqIEBncGlvX2Jhc2U6IGZpcnN0IGdwaW8gbnVtYmVyIGFzc2lnbmVkIHRvIFRDMzU4OTIuICBBIG1heGltdW0gb2YKLSAqCSAgICAgICAlVEMzNTg5Ml9OUl9HUElPUyBHUElPcyB3aWxsIGJlIGFsbG9jYXRlZC4KLSAqIEBzZXR1cDogY2FsbGJhY2sgZm9yIGJvYXJkLXNwZWNpZmljIGluaXRpYWxpemF0aW9uCi0gKiBAcmVtb3ZlOiBjYWxsYmFjayBmb3IgYm9hcmQtc3BlY2lmaWMgdGVhcmRvd24KLSAqLwotc3RydWN0IHRjMzU4OTJfZ3Bpb19wbGF0Zm9ybV9kYXRhIHsKLQlpbnQgZ3Bpb19iYXNlOwotCXZvaWQgKCpzZXR1cCkoc3RydWN0IHRjMzU4OTIgKnRjMzU4OTIsIHVuc2lnbmVkIGdwaW9fYmFzZSk7Ci0Jdm9pZCAoKnJlbW92ZSkoc3RydWN0IHRjMzU4OTIgKnRjMzU4OTIsIHVuc2lnbmVkIGdwaW9fYmFzZSk7Ci19OwotCi0vKioKLSAqIHN0cnVjdCB0YzM1ODkyX3BsYXRmb3JtX2RhdGEgLSBUQzM1ODkyIHBsYXRmb3JtIGRhdGEKLSAqIEBpcnFfYmFzZTogYmFzZSBJUlEgbnVtYmVyLiAgJVRDMzU4OTJfTlJfSVJRUyBpcnFzIHdpbGwgYmUgdXNlZC4KLSAqIEBncGlvOiBHUElPLXNwZWNpZmljIHBsYXRmb3JtIGRhdGEKLSAqLwotc3RydWN0IHRjMzU4OTJfcGxhdGZvcm1fZGF0YSB7Ci0JaW50IGlycV9iYXNlOwotCXN0cnVjdCB0YzM1ODkyX2dwaW9fcGxhdGZvcm1fZGF0YSAqZ3BpbzsKLX07Ci0KLSNkZWZpbmUgVEMzNTg5Ml9OUl9HUElPUwkyNAotI2RlZmluZSBUQzM1ODkyX05SX0lSUVMJCVRDMzU4OTJfSU5UX0dQSU8oVEMzNTg5Ml9OUl9HUElPUykKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC90YzM1ODl4LmggYi9pbmNsdWRlL2xpbnV4L21mZC90YzM1ODl4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZjNzZlMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL3RjMzU4OXguaApAQCAtMCwwICsxLDE5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgU1QtRXJpY3Nzb24gU0EgMjAxMAorICoKKyAqIExpY2Vuc2UgVGVybXM6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIKKyAqLworCisjaWZuZGVmIF9fTElOVVhfTUZEX1RDMzU4OXhfSAorI2RlZmluZSBfX0xJTlVYX01GRF9UQzM1ODl4X0gKKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorCitlbnVtIHR4MzU4OXhfYmxvY2sgeworCVRDMzU4OXhfQkxPQ0tfR1BJTyAgICAgICAgPSAxIDw8IDAsCisJVEMzNTg5eF9CTE9DS19LRVlQQUQgICAgICA9IDEgPDwgMSwKK307CisKKyNkZWZpbmUgVEMzNTg5eF9SU1RDVFJMX0lSUVJTVAkoMSA8PCA0KQorI2RlZmluZSBUQzM1ODl4X1JTVENUUkxfVElNUlNUCSgxIDw8IDMpCisjZGVmaW5lIFRDMzU4OXhfUlNUQ1RSTF9ST1RSU1QJKDEgPDwgMikKKyNkZWZpbmUgVEMzNTg5eF9SU1RDVFJMX0tCRFJTVAkoMSA8PCAxKQorI2RlZmluZSBUQzM1ODl4X1JTVENUUkxfR1BJUlNUCSgxIDw8IDApCisKKy8qIEtleWJvYXJkIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXJzICovCisjZGVmaW5lIFRDMzU4OXhfS0JEU0VUVExFX1JFRyAgIDB4MDEKKyNkZWZpbmUgVEMzNTg5eF9LQkRCT1VOQ0UgICAgICAgMHgwMgorI2RlZmluZSBUQzM1ODl4X0tCRFNJWkUgICAgICAgICAweDAzCisjZGVmaW5lIFRDMzU4OXhfS0JDRkdfTFNCICAgICAgIDB4MDQKKyNkZWZpbmUgVEMzNTg5eF9LQkNGR19NU0IgICAgICAgMHgwNQorI2RlZmluZSBUQzM1ODl4X0tCRElDICAgICAgICAgICAweDA4CisjZGVmaW5lIFRDMzU4OXhfS0JETVNLICAgICAgICAgIDB4MDkKKyNkZWZpbmUgVEMzNTg5eF9FVlRDT0RFX0ZJRk8gICAgMHgxMAorI2RlZmluZSBUQzM1ODl4X0tCRE1GUwkJMHg4RgorCisjZGVmaW5lIFRDMzU4OXhfSVJRU1QJCTB4OTEKKworI2RlZmluZSBUQzM1ODl4X01BTkZDT0RFX01BR0lDCTB4MDMKKyNkZWZpbmUgVEMzNTg5eF9NQU5GQ09ERQkweDgwCisjZGVmaW5lIFRDMzU4OXhfVkVSU0lPTgkJMHg4MQorI2RlZmluZSBUQzM1ODl4X0lPQ0ZHCQkweEE3CisKKyNkZWZpbmUgVEMzNTg5eF9DTEtNT0RFCQkweDg4CisjZGVmaW5lIFRDMzU4OXhfQ0xLQ0ZHCQkweDg5CisjZGVmaW5lIFRDMzU4OXhfQ0xLRU4JCTB4OEEKKworI2RlZmluZSBUQzM1ODl4X1JTVENUUkwJCTB4ODIKKyNkZWZpbmUgVEMzNTg5eF9FWFRSU1ROCQkweDgzCisjZGVmaW5lIFRDMzU4OXhfUlNUSU5UQ0xSCTB4ODQKKworLyogUHVsbCB1cC9kb3duIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzICovCisjZGVmaW5lIFRDMzU4OXhfSU9DRkcgICAgICAgICAgIDB4QTcKKyNkZWZpbmUgVEMzNTg5eF9JT1BVTExDRkcwX0xTQiAgMHhBQQorI2RlZmluZSBUQzM1ODl4X0lPUFVMTENGRzBfTVNCICAweEFCCisjZGVmaW5lIFRDMzU4OXhfSU9QVUxMQ0ZHMV9MU0IgIDB4QUMKKyNkZWZpbmUgVEMzNTg5eF9JT1BVTExDRkcxX01TQiAgMHhBRAorI2RlZmluZSBUQzM1ODl4X0lPUFVMTENGRzJfTFNCICAweEFFCisKKyNkZWZpbmUgVEMzNTg5eF9HUElPSVMwCQkweEM5CisjZGVmaW5lIFRDMzU4OXhfR1BJT0lTMQkJMHhDQQorI2RlZmluZSBUQzM1ODl4X0dQSU9JUzIJCTB4Q0IKKyNkZWZpbmUgVEMzNTg5eF9HUElPSUJFMAkweENDCisjZGVmaW5lIFRDMzU4OXhfR1BJT0lCRTEJMHhDRAorI2RlZmluZSBUQzM1ODl4X0dQSU9JQkUyCTB4Q0UKKyNkZWZpbmUgVEMzNTg5eF9HUElPSUVWMAkweENGCisjZGVmaW5lIFRDMzU4OXhfR1BJT0lFVjEJMHhEMAorI2RlZmluZSBUQzM1ODl4X0dQSU9JRVYyCTB4RDEKKyNkZWZpbmUgVEMzNTg5eF9HUElPSUUwCQkweEQyCisjZGVmaW5lIFRDMzU4OXhfR1BJT0lFMQkJMHhEMworI2RlZmluZSBUQzM1ODl4X0dQSU9JRTIJCTB4RDQKKyNkZWZpbmUgVEMzNTg5eF9HUElPUklTMAkweEQ2CisjZGVmaW5lIFRDMzU4OXhfR1BJT1JJUzEJMHhENworI2RlZmluZSBUQzM1ODl4X0dQSU9SSVMyCTB4RDgKKyNkZWZpbmUgVEMzNTg5eF9HUElPTUlTMAkweEQ5CisjZGVmaW5lIFRDMzU4OXhfR1BJT01JUzEJMHhEQQorI2RlZmluZSBUQzM1ODl4X0dQSU9NSVMyCTB4REIKKyNkZWZpbmUgVEMzNTg5eF9HUElPSUMwCQkweERDCisjZGVmaW5lIFRDMzU4OXhfR1BJT0lDMQkJMHhERAorI2RlZmluZSBUQzM1ODl4X0dQSU9JQzIJCTB4REUKKworI2RlZmluZSBUQzM1ODl4X0dQSU9EQVRBMAkweEMwCisjZGVmaW5lIFRDMzU4OXhfR1BJT01BU0swCTB4YzEKKyNkZWZpbmUgVEMzNTg5eF9HUElPREFUQTEJMHhDMgorI2RlZmluZSBUQzM1ODl4X0dQSU9NQVNLMQkweGMzCisjZGVmaW5lIFRDMzU4OXhfR1BJT0RBVEEyCTB4QzQKKyNkZWZpbmUgVEMzNTg5eF9HUElPTUFTSzIJMHhDNQorCisjZGVmaW5lIFRDMzU4OXhfR1BJT0RJUjAJMHhDNgorI2RlZmluZSBUQzM1ODl4X0dQSU9ESVIxCTB4QzcKKyNkZWZpbmUgVEMzNTg5eF9HUElPRElSMgkweEM4CisKKyNkZWZpbmUgVEMzNTg5eF9HUElPU1lOQzAJMHhFNgorI2RlZmluZSBUQzM1ODl4X0dQSU9TWU5DMQkweEU3CisjZGVmaW5lIFRDMzU4OXhfR1BJT1NZTkMyCTB4RTgKKworI2RlZmluZSBUQzM1ODl4X0dQSU9XQUtFMAkweEU5CisjZGVmaW5lIFRDMzU4OXhfR1BJT1dBS0UxCTB4RUEKKyNkZWZpbmUgVEMzNTg5eF9HUElPV0FLRTIJMHhFQgorCisjZGVmaW5lIFRDMzU4OXhfR1BJT09ETTAJMHhFMAorI2RlZmluZSBUQzM1ODl4X0dQSU9PREUwCTB4RTEKKyNkZWZpbmUgVEMzNTg5eF9HUElPT0RNMQkweEUyCisjZGVmaW5lIFRDMzU4OXhfR1BJT09ERTEJMHhFMworI2RlZmluZSBUQzM1ODl4X0dQSU9PRE0yCTB4RTQKKyNkZWZpbmUgVEMzNTg5eF9HUElPT0RFMgkweEU1CisKKyNkZWZpbmUgVEMzNTg5eF9JTlRfR1BJSVJRCTAKKyNkZWZpbmUgVEMzNTg5eF9JTlRfVEkwSVJRCTEKKyNkZWZpbmUgVEMzNTg5eF9JTlRfVEkxSVJRCTIKKyNkZWZpbmUgVEMzNTg5eF9JTlRfVEkySVJRCTMKKyNkZWZpbmUgVEMzNTg5eF9JTlRfUk9USVJRCTUKKyNkZWZpbmUgVEMzNTg5eF9JTlRfS0JESVJRCTYKKyNkZWZpbmUgVEMzNTg5eF9JTlRfUE9SSVJRCTcKKworI2RlZmluZSBUQzM1ODl4X05SX0lOVEVSTkFMX0lSUVMJOAorI2RlZmluZSBUQzM1ODl4X0lOVF9HUElPKHgpCShUQzM1ODl4X05SX0lOVEVSTkFMX0lSUVMgKyAoeCkpCisKK3N0cnVjdCB0YzM1ODl4IHsKKwlzdHJ1Y3QgbXV0ZXggbG9jazsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IGkyY19jbGllbnQgKmkyYzsKKworCWludCBpcnFfYmFzZTsKKwlpbnQgbnVtX2dwaW87CisJc3RydWN0IHRjMzU4OXhfcGxhdGZvcm1fZGF0YSAqcGRhdGE7Cit9OworCitleHRlcm4gaW50IHRjMzU4OXhfcmVnX3dyaXRlKHN0cnVjdCB0YzM1ODl4ICp0YzM1ODl4LCB1OCByZWcsIHU4IGRhdGEpOworZXh0ZXJuIGludCB0YzM1ODl4X3JlZ19yZWFkKHN0cnVjdCB0YzM1ODl4ICp0YzM1ODl4LCB1OCByZWcpOworZXh0ZXJuIGludCB0YzM1ODl4X2Jsb2NrX3JlYWQoc3RydWN0IHRjMzU4OXggKnRjMzU4OXgsIHU4IHJlZywgdTggbGVuZ3RoLAorCQkJICAgICAgdTggKnZhbHVlcyk7CitleHRlcm4gaW50IHRjMzU4OXhfYmxvY2tfd3JpdGUoc3RydWN0IHRjMzU4OXggKnRjMzU4OXgsIHU4IHJlZywgdTggbGVuZ3RoLAorCQkJICAgICAgIGNvbnN0IHU4ICp2YWx1ZXMpOworZXh0ZXJuIGludCB0YzM1ODl4X3NldF9iaXRzKHN0cnVjdCB0YzM1ODl4ICp0YzM1ODl4LCB1OCByZWcsIHU4IG1hc2ssIHU4IHZhbCk7CisKKy8qCisgKiBLZXlwYWQgcmVsYXRlZCBwbGF0Zm9ybSBzcGVjaWZpYyBjb25zdGFudHMKKyAqIFRoZXNlIHZhbHVlcyBtYXkgYmUgbW9kaWZpZWQgZm9yIGZpbmUgdHVuaW5nCisgKi8KKyNkZWZpbmUgVENfS1BEX1JPV1MgICAgICAgICAgICAgMHg4CisjZGVmaW5lIFRDX0tQRF9DT0xVTU5TICAgICAgICAgIDB4OAorI2RlZmluZSBUQ19LUERfREVCT1VOQ0VfUEVSSU9EICAweEEzCisjZGVmaW5lIFRDX0tQRF9TRVRUTEVfVElNRSAgICAgIDB4QTMKKworLyoqCisgKiBzdHJ1Y3QgdGMzNTg5M19wbGF0Zm9ybV9kYXRhIC0gZGF0YSBzdHJ1Y3R1cmUgZm9yIHBsYXRmb3JtIHNwZWNpZmljIGRhdGEKKyAqIEBrZXltYXBfZGF0YTogICAgICAgIG1hdHJpeCBzY2FuIGNvZGUgdGFibGUgZm9yIGtleWNvZGVzCisgKiBAa3JvdzogICAgICAgICAgICAgICBtYXNrIGZvciBhdmFpbGFibGUgcm93cywgdmFsdWUgaXMgMHhGRgorICogQGtjb2w6ICAgICAgICAgICAgICAgbWFzayBmb3IgYXZhaWxhYmxlIGNvbHVtbnMsIHZhbHVlIGlzIDB4RkYKKyAqIEBkZWJvdW5jZV9wZXJpb2Q6ICAgIHBsYXRmb3JtIHNwZWNpZmljIGRlYm91bmNlIHRpbWUKKyAqIEBzZXR0bGVfdGltZTogICAgICAgIHBsYXRmb3JtIHNwZWNpZmljIHNldHRsZSBkb3duIHRpbWUKKyAqIEBpcnF0eXBlOiAgICAgICAgICAgIHR5cGUgb2YgaW50ZXJydXB0LCBmYWxsaW5nIG9yIHJpc2luZyBlZGdlCisgKiBAZW5hYmxlX3dha2V1cDogICAgICBzcGVjaWZpZXMgaWYga2V5cGFkIGV2ZW50IGNhbiB3YWtlIHVwIHN5c3RlbSBmcm9tIHNsZWVwCisgKiBAbm9fYXV0b3JlcGVhdDogICAgICBmbGFnIGZvciBhdXRvIHJlcGV0aXRpb24KKyAqLworc3RydWN0IHRjMzU4OXhfa2V5cGFkX3BsYXRmb3JtX2RhdGEgeworCWNvbnN0IHN0cnVjdCBtYXRyaXhfa2V5bWFwX2RhdGEgKmtleW1hcF9kYXRhOworCXU4ICAgICAgICAgICAgICAgICAgICAgIGtyb3c7CisJdTggICAgICAgICAgICAgICAgICAgICAga2NvbDsKKwl1OCAgICAgICAgICAgICAgICAgICAgICBkZWJvdW5jZV9wZXJpb2Q7CisJdTggICAgICAgICAgICAgICAgICAgICAgc2V0dGxlX3RpbWU7CisJdW5zaWduZWQgbG9uZyAgICAgICAgICAgaXJxdHlwZTsKKwlib29sICAgICAgICAgICAgICAgICAgICBlbmFibGVfd2FrZXVwOworCWJvb2wgICAgICAgICAgICAgICAgICAgIG5vX2F1dG9yZXBlYXQ7Cit9OworCisvKioKKyAqIHN0cnVjdCB0YzM1ODl4X2dwaW9fcGxhdGZvcm1fZGF0YSAtIFRDMzU4OXggR1BJTyBwbGF0Zm9ybSBkYXRhCisgKiBAZ3Bpb19iYXNlOiBmaXJzdCBncGlvIG51bWJlciBhc3NpZ25lZCB0byBUQzM1ODl4LiAgQSBtYXhpbXVtIG9mCisgKgkgICAgICAgJVRDMzU4OXhfTlJfR1BJT1MgR1BJT3Mgd2lsbCBiZSBhbGxvY2F0ZWQuCisgKiBAc2V0dXA6IGNhbGxiYWNrIGZvciBib2FyZC1zcGVjaWZpYyBpbml0aWFsaXphdGlvbgorICogQHJlbW92ZTogY2FsbGJhY2sgZm9yIGJvYXJkLXNwZWNpZmljIHRlYXJkb3duCisgKi8KK3N0cnVjdCB0YzM1ODl4X2dwaW9fcGxhdGZvcm1fZGF0YSB7CisJaW50IGdwaW9fYmFzZTsKKwl2b2lkICgqc2V0dXApKHN0cnVjdCB0YzM1ODl4ICp0YzM1ODl4LCB1bnNpZ25lZCBncGlvX2Jhc2UpOworCXZvaWQgKCpyZW1vdmUpKHN0cnVjdCB0YzM1ODl4ICp0YzM1ODl4LCB1bnNpZ25lZCBncGlvX2Jhc2UpOworfTsKKworLyoqCisgKiBzdHJ1Y3QgdGMzNTg5eF9wbGF0Zm9ybV9kYXRhIC0gVEMzNTg5eCBwbGF0Zm9ybSBkYXRhCisgKiBAYmxvY2s6IGJpdG1hc2sgb2YgYmxvY2tzIHRvIGVuYWJsZSAodXNlIFRDMzU4OXhfQkxPQ0tfKikKKyAqIEBpcnFfYmFzZTogYmFzZSBJUlEgbnVtYmVyLiAgJVRDMzU4OXhfTlJfSVJRUyBpcnFzIHdpbGwgYmUgdXNlZC4KKyAqIEBncGlvOiBHUElPLXNwZWNpZmljIHBsYXRmb3JtIGRhdGEKKyAqIEBrZXlwYWQ6IGtleXBhZC1zcGVjaWZpYyBwbGF0Zm9ybSBkYXRhCisgKi8KK3N0cnVjdCB0YzM1ODl4X3BsYXRmb3JtX2RhdGEgeworCXVuc2lnbmVkIGludCBibG9jazsKKwlpbnQgaXJxX2Jhc2U7CisJc3RydWN0IHRjMzU4OXhfZ3Bpb19wbGF0Zm9ybV9kYXRhICpncGlvOworCWNvbnN0IHN0cnVjdCB0YzM1ODl4X2tleXBhZF9wbGF0Zm9ybV9kYXRhICprZXlwYWQ7Cit9OworCisjZGVmaW5lIFRDMzU4OXhfTlJfR1BJT1MJMjQKKyNkZWZpbmUgVEMzNTg5eF9OUl9JUlFTCQlUQzM1ODl4X0lOVF9HUElPKFRDMzU4OXhfTlJfR1BJT1MpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvd2wxMjczLWNvcmUuaCBiL2luY2x1ZGUvbGludXgvbWZkL3dsMTI3My1jb3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc4NzI5MwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL3dsMTI3My1jb3JlLmgKQEAgLTAsMCArMSwyODggQEAKKy8qCisgKiBpbmNsdWRlL2xpbnV4L21mZC93bDEyNzMtY29yZS5oCisgKgorICogU29tZSBkZWZpbml0aW9ucyBmb3IgdGhlIHdsMTI3MyByYWRpbyByZWNlaXZlci90cmFuc21pdHRlciBjaGlwLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgorICogQXV0aG9yOiBNYXR0aSBKLiBBYWx0b25lbiA8bWF0dGkuai5hYWx0b25lbkBub2tpYS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQQorICovCisKKyNpZm5kZWYgV0wxMjczX0NPUkVfSAorI2RlZmluZSBXTDEyNzNfQ09SRV9ICisKKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvY29yZS5oPgorCisjZGVmaW5lIFdMMTI3M19GTV9EUklWRVJfTkFNRQkid2wxMjczLWZtIgorI2RlZmluZSBSWDcxX0ZNX0kyQ19BRERSCTB4MjIKKworI2RlZmluZSBXTDEyNzNfU1RFUkVPX0dFVAkJMAorI2RlZmluZSBXTDEyNzNfUlNTSV9MVkxfR0VUCQkxCisjZGVmaW5lIFdMMTI3M19JRl9DT1VOVF9HRVQJCTIKKyNkZWZpbmUgV0wxMjczX0ZMQUdfR0VUCQkJMworI2RlZmluZSBXTDEyNzNfUkRTX1NZTkNfR0VUCQk0CisjZGVmaW5lIFdMMTI3M19SRFNfREFUQV9HRVQJCTUKKyNkZWZpbmUgV0wxMjczX0ZSRVFfU0VUCQkJMTAKKyNkZWZpbmUgV0wxMjczX0FGX0ZSRVFfU0VUCQkxMQorI2RlZmluZSBXTDEyNzNfTU9TVF9NT0RFX1NFVAkJMTIKKyNkZWZpbmUgV0wxMjczX01PU1RfQkxFTkRfU0VUCQkxMworI2RlZmluZSBXTDEyNzNfREVNUEhfTU9ERV9TRVQJCTE0CisjZGVmaW5lIFdMMTI3M19TRUFSQ0hfTFZMX1NFVAkJMTUKKyNkZWZpbmUgV0wxMjczX0JBTkRfU0VUCQkJMTYKKyNkZWZpbmUgV0wxMjczX01VVEVfU1RBVFVTX1NFVAkJMTcKKyNkZWZpbmUgV0wxMjczX1JEU19QQVVTRV9MVkxfU0VUCTE4CisjZGVmaW5lIFdMMTI3M19SRFNfUEFVU0VfRFVSX1NFVAkxOQorI2RlZmluZSBXTDEyNzNfUkRTX01FTV9TRVQJCTIwCisjZGVmaW5lIFdMMTI3M19SRFNfQkxLX0JfU0VUCQkyMQorI2RlZmluZSBXTDEyNzNfUkRTX01TS19CX1NFVAkJMjIKKyNkZWZpbmUgV0wxMjczX1JEU19QSV9NQVNLX1NFVAkJMjMKKyNkZWZpbmUgV0wxMjczX1JEU19QSV9TRVQJCTI0CisjZGVmaW5lIFdMMTI3M19SRFNfU1lTVEVNX1NFVAkJMjUKKyNkZWZpbmUgV0wxMjczX0lOVF9NQVNLX1NFVAkJMjYKKyNkZWZpbmUgV0wxMjczX1NFQVJDSF9ESVJfU0VUCQkyNworI2RlZmluZSBXTDEyNzNfVk9MVU1FX1NFVAkJMjgKKyNkZWZpbmUgV0wxMjczX0FVRElPX0VOQUJMRQkJMjkKKyNkZWZpbmUgV0wxMjczX1BDTV9NT0RFX1NFVAkJMzAKKyNkZWZpbmUgV0wxMjczX0kyU19NT0RFX0NPTkZJR19TRVQJMzEKKyNkZWZpbmUgV0wxMjczX1BPV0VSX1NFVAkJMzIKKyNkZWZpbmUgV0wxMjczX0lOVFhfQ09ORklHX1NFVAkJMzMKKyNkZWZpbmUgV0wxMjczX1BVTExfRU5fU0VUCQkzNAorI2RlZmluZSBXTDEyNzNfSElMT19TRVQJCQkzNQorI2RlZmluZSBXTDEyNzNfU1dJVENIMkZSRUYJCTM2CisjZGVmaW5lIFdMMTI3M19GUkVRX0RSSUZUX1JFUE9SVAkzNworCisjZGVmaW5lIFdMMTI3M19QQ0VfR0VUCQkJNDAKKyNkZWZpbmUgV0wxMjczX0ZJUk1fVkVSX0dFVAkJNDEKKyNkZWZpbmUgV0wxMjczX0FTSUNfVkVSX0dFVAkJNDIKKyNkZWZpbmUgV0wxMjczX0FTSUNfSURfR0VUCQk0MworI2RlZmluZSBXTDEyNzNfTUFOX0lEX0dFVAkJNDQKKyNkZWZpbmUgV0wxMjczX1RVTkVSX01PREVfU0VUCQk0NQorI2RlZmluZSBXTDEyNzNfU1RPUF9TRUFSQ0gJCTQ2CisjZGVmaW5lIFdMMTI3M19SRFNfQ05UUkxfU0VUCQk0NworCisjZGVmaW5lIFdMMTI3M19XUklURV9IQVJEV0FSRV9SRUcJMTAwCisjZGVmaW5lIFdMMTI3M19DT0RFX0RPV05MT0FECQkxMDEKKyNkZWZpbmUgV0wxMjczX1JFU0VUCQkJMTAyCisKKyNkZWZpbmUgV0wxMjczX0ZNX1BPV0VSX01PREUJCTI1NAorI2RlZmluZSBXTDEyNzNfRk1fSU5URVJSVVBUCQkyNTUKKworLyogVHJhbnNtaXR0ZXIgQVBJICovCisKKyNkZWZpbmUgV0wxMjczX0NIQU5MX1NFVAkJCTU1CisjZGVmaW5lIFdMMTI3M19TQ0FOX1NQQUNJTkdfU0VUCQkJNTYKKyNkZWZpbmUgV0wxMjczX1JFRl9TRVQJCQkJNTcKKyNkZWZpbmUgV0wxMjczX1BPV0VSX0VOQl9TRVQJCQk5MAorI2RlZmluZSBXTDEyNzNfUE9XRVJfQVRUX1NFVAkJCTU4CisjZGVmaW5lIFdMMTI3M19QT1dFUl9MRVZfU0VUCQkJNTkKKyNkZWZpbmUgV0wxMjczX0FVRElPX0RFVl9TRVQJCQk2MAorI2RlZmluZSBXTDEyNzNfUElMT1RfREVWX1NFVAkJCTYxCisjZGVmaW5lIFdMMTI3M19SRFNfREVWX1NFVAkJCTYyCisjZGVmaW5lIFdMMTI3M19QVVBEX1NFVAkJCQk5MQorI2RlZmluZSBXTDEyNzNfQVVESU9fSU9fU0VUCQkJNjMKKyNkZWZpbmUgV0wxMjczX1BSRU1QSF9TRVQJCQk2NAorI2RlZmluZSBXTDEyNzNfTU9OT19TRVQJCQkJNjYKKyNkZWZpbmUgV0wxMjczX01VVEUJCQkJOTIKKyNkZWZpbmUgV0wxMjczX01QWF9MTVRfRU5BQkxFCQkJNjcKKyNkZWZpbmUgV0wxMjczX1BJX1NFVAkJCQk5MworI2RlZmluZSBXTDEyNzNfRUNDX1NFVAkJCQk2OQorI2RlZmluZSBXTDEyNzNfUFRZCQkJCTcwCisjZGVmaW5lIFdMMTI3M19BRgkJCQk3MQorI2RlZmluZSBXTDEyNzNfRElTUExBWV9NT0RFCQkJNzQKKyNkZWZpbmUgV0wxMjczX1JEU19SRVBfU0VUCQkJNzcKKyNkZWZpbmUgV0wxMjczX1JEU19DT05GSUdfREFUQV9TRVQJCTk4CisjZGVmaW5lIFdMMTI3M19SRFNfREFUQV9TRVQJCQk5OQorI2RlZmluZSBXTDEyNzNfUkRTX0RBVEFfRU5CCQkJOTQKKyNkZWZpbmUgV0wxMjczX1RBX1NFVAkJCQk3OAorI2RlZmluZSBXTDEyNzNfVFBfU0VUCQkJCTc5CisjZGVmaW5lIFdMMTI3M19ESV9TRVQJCQkJODAKKyNkZWZpbmUgV0wxMjczX01TX1NFVAkJCQk4MQorI2RlZmluZSBXTDEyNzNfUFNfU0NST0xMX1NQRUVECQkJODIKKyNkZWZpbmUgV0wxMjczX1RYX0FVRElPX0xFVkVMX1RFU1QJCTk2CisjZGVmaW5lIFdMMTI3M19UWF9BVURJT19MRVZFTF9URVNUX1RIUkVTSE9MRAk3MworI2RlZmluZSBXTDEyNzNfVFhfQVVESU9fSU5QVVRfTEVWRUxfUkFOR0VfU0VUCTU0CisjZGVmaW5lIFdMMTI3M19SWF9BTlRFTk5BX1NFTEVDVAkJODcKKyNkZWZpbmUgV0wxMjczX0kyQ19ERVZfQUREUl9TRVQJCQk4NgorI2RlZmluZSBXTDEyNzNfUkVGX0VSUl9DQUxJQl9QQVJBTV9TRVQJCTg4CisjZGVmaW5lIFdMMTI3M19SRUZfRVJSX0NBTElCX1BFUklPRElDSVRZX1NFVAk4OQorI2RlZmluZSBXTDEyNzNfU09DX0lOVF9UUklHR0VSCQkJNTIKKyNkZWZpbmUgV0wxMjczX1NPQ19BVURJT19QQVRIX1NFVAkJODMKKyNkZWZpbmUgV0wxMjczX1NPQ19QQ01JX09WRVJSSURFCQk4NAorI2RlZmluZSBXTDEyNzNfU09DX0kyU19PVkVSUklERQkJCTg1CisjZGVmaW5lIFdMMTI3M19SU1NJX0JMT0NLX1NDQU5fRlJFUV9TRVQJCTk1CisjZGVmaW5lIFdMMTI3M19SU1NJX0JMT0NLX1NDQU5fU1RBUlQJCTk3CisjZGVmaW5lIFdMMTI3M19SU1NJX0JMT0NLX1NDQU5fREFUQV9HRVQJCTUKKyNkZWZpbmUgV0wxMjczX1JFQURfRk1BTlRfVFVORV9WQUxVRQkJMTA0CisKKyNkZWZpbmUgV0wxMjczX1JEU19PRkYJCTAKKyNkZWZpbmUgV0wxMjczX1JEU19PTgkJMQorI2RlZmluZSBXTDEyNzNfUkRTX1JFU0VUCTIKKworI2RlZmluZSBXTDEyNzNfQVVESU9fRElHSVRBTAkwCisjZGVmaW5lIFdMMTI3M19BVURJT19BTkFMT0cJMQorCisjZGVmaW5lIFdMMTI3M19NT0RFX1JYCQlCSVQoMCkKKyNkZWZpbmUgV0wxMjczX01PREVfVFgJCUJJVCgxKQorI2RlZmluZSBXTDEyNzNfTU9ERV9PRkYJCUJJVCgyKQorI2RlZmluZSBXTDEyNzNfTU9ERV9TVVNQRU5ERUQJQklUKDMpCisKKyNkZWZpbmUgV0wxMjczX1JBRElPX0NISUxECUJJVCgwKQorI2RlZmluZSBXTDEyNzNfQ09ERUNfQ0hJTEQJQklUKDEpCisKKyNkZWZpbmUgV0wxMjczX1JYX01PTk8JCTEKKyNkZWZpbmUgV0wxMjczX1JYX1NURVJFTwkwCisjZGVmaW5lIFdMMTI3M19UWF9NT05PCQkwCisjZGVmaW5lIFdMMTI3M19UWF9TVEVSRU8JMQorCisjZGVmaW5lIFdMMTI3M19NQVhfVk9MVU1FCTB4ZmZmZgorI2RlZmluZSBXTDEyNzNfREVGQVVMVF9WT0xVTUUJMHg3OGI4CisKKy8qIEkyUyBwcm90b2NvbCwgbGVmdCBjaGFubmVsIGZpcnN0LCBkYXRhIHdpZHRoIDE2IGJpdHMgKi8KKyNkZWZpbmUgV0wxMjczX1BDTV9ERUZfTU9ERQkJMHgwMAorCisvKiBSeCAqLworI2RlZmluZSBXTDEyNzNfQVVESU9fRU5BQkxFX0kyUwkJQklUKDApCisjZGVmaW5lIFdMMTI3M19BVURJT19FTkFCTEVfQU5BTE9HCUJJVCgxKQorCisvKiBUeCAqLworI2RlZmluZSBXTDEyNzNfQVVESU9fSU9fU0VUX0FOQUxPRwkwCisjZGVmaW5lIFdMMTI3M19BVURJT19JT19TRVRfSTJTCQkxCisKKyNkZWZpbmUgV0wxMjczX1BVUERfU0VUX09GRgkJMHgwMAorI2RlZmluZSBXTDEyNzNfUFVQRF9TRVRfT04JCTB4MDEKKyNkZWZpbmUgV0wxMjczX1BVUERfU0VUX1JFVEVOVElPTgkweDEwCisKKy8qIEkyUyBtb2RlICovCisjZGVmaW5lIFdMMTI3M19JUzJfV0lEVEhfMzIJMHgwCisjZGVmaW5lIFdMMTI3M19JUzJfV0lEVEhfNDAJMHgxCisjZGVmaW5lIFdMMTI3M19JUzJfV0lEVEhfMjJfMjMJMHgyCisjZGVmaW5lIFdMMTI3M19JUzJfV0lEVEhfMjNfMjIJMHgzCisjZGVmaW5lIFdMMTI3M19JUzJfV0lEVEhfNDgJMHg0CisjZGVmaW5lIFdMMTI3M19JUzJfV0lEVEhfNTAJMHg1CisjZGVmaW5lIFdMMTI3M19JUzJfV0lEVEhfNjAJMHg2CisjZGVmaW5lIFdMMTI3M19JUzJfV0lEVEhfNjQJMHg3CisjZGVmaW5lIFdMMTI3M19JUzJfV0lEVEhfODAJMHg4CisjZGVmaW5lIFdMMTI3M19JUzJfV0lEVEhfOTYJMHg5CisjZGVmaW5lIFdMMTI3M19JUzJfV0lEVEhfMTI4CTB4YQorI2RlZmluZSBXTDEyNzNfSVMyX1dJRFRICTB4ZgorCisjZGVmaW5lIFdMMTI3M19JUzJfRk9STUFUX1NURAkoMHgwIDw8IDQpCisjZGVmaW5lIFdMMTI3M19JUzJfRk9STUFUX0xFRlQJKDB4MSA8PCA0KQorI2RlZmluZSBXTDEyNzNfSVMyX0ZPUk1BVF9SSUdIVAkoMHgyIDw8IDQpCisjZGVmaW5lIFdMMTI3M19JUzJfRk9STUFUX1VTRVIJKDB4MyA8PCA0KQorCisjZGVmaW5lIFdMMTI3M19JUzJfTUFTVEVSCSgweDAgPDwgNikKKyNkZWZpbmUgV0wxMjczX0lTMl9TTEFWRVcJKDB4MSA8PCA2KQorCisjZGVmaW5lIFdMMTI3M19JUzJfVFJJX0FGVEVSX1NFTkRJTkcJKDB4MCA8PCA3KQorI2RlZmluZSBXTDEyNzNfSVMyX1RSSV9BTFdBWVNfQUNUSVZFCSgweDEgPDwgNykKKworI2RlZmluZSBXTDEyNzNfSVMyX1NET1dTX1JSCSgweDAgPDwgOCkKKyNkZWZpbmUgV0wxMjczX0lTMl9TRE9XU19SRgkoMHgxIDw8IDgpCisjZGVmaW5lIFdMMTI3M19JUzJfU0RPV1NfRlIJKDB4MiA8PCA4KQorI2RlZmluZSBXTDEyNzNfSVMyX1NET1dTX0ZGCSgweDMgPDwgOCkKKworI2RlZmluZSBXTDEyNzNfSVMyX1RSSV9PUFQJKDB4MCA8PCAxMCkKKyNkZWZpbmUgV0wxMjczX0lTMl9UUklfQUxXQVlTCSgweDEgPDwgMTApCisKKyNkZWZpbmUgV0wxMjczX0lTMl9SQVRFXzQ4SwkoMHgwIDw8IDEyKQorI2RlZmluZSBXTDEyNzNfSVMyX1JBVEVfNDRfMUsJKDB4MSA8PCAxMikKKyNkZWZpbmUgV0wxMjczX0lTMl9SQVRFXzMySwkoMHgyIDw8IDEyKQorI2RlZmluZSBXTDEyNzNfSVMyX1JBVEVfMjJfMDVLCSgweDQgPDwgMTIpCisjZGVmaW5lIFdMMTI3M19JUzJfUkFURV8xNksJKDB4NSA8PCAxMikKKyNkZWZpbmUgV0wxMjczX0lTMl9SQVRFXzEySwkoMHg4IDw8IDEyKQorI2RlZmluZSBXTDEyNzNfSVMyX1JBVEVfMTFfMDI1CSgweDkgPDwgMTIpCisjZGVmaW5lIFdMMTI3M19JUzJfUkFURV84SwkoMHhhIDw8IDEyKQorI2RlZmluZSBXTDEyNzNfSVMyX1JBVEUJCSgweGYgPDwgMTIpCisKKyNkZWZpbmUgV0wxMjczX0kyU19ERUZfTU9ERQkoV0wxMjczX0lTMl9XSURUSF8zMiB8IFwKKwkJCQkgV0wxMjczX0lTMl9GT1JNQVRfU1REIHwgXAorCQkJCSBXTDEyNzNfSVMyX01BU1RFUiB8IFwKKwkJCQkgV0wxMjczX0lTMl9UUklfQUZURVJfU0VORElORyB8IFwKKwkJCQkgV0wxMjczX0lTMl9TRE9XU19SUiB8IFwKKwkJCQkgV0wxMjczX0lTMl9UUklfT1BUIHwgXAorCQkJCSBXTDEyNzNfSVMyX1JBVEVfNDhLKQorCisjZGVmaW5lIFNDSEFSX01JTiAoLTEyOCkKKyNkZWZpbmUgU0NIQVJfTUFYIDEyNworCisjZGVmaW5lIFdMMTI3M19GUl9FVkVOVAkJCUJJVCgwKQorI2RlZmluZSBXTDEyNzNfQkxfRVZFTlQJCQlCSVQoMSkKKyNkZWZpbmUgV0wxMjczX1JEU19FVkVOVAkJQklUKDIpCisjZGVmaW5lIFdMMTI3M19CQkxLX0VWRU5UCQlCSVQoMykKKyNkZWZpbmUgV0wxMjczX0xTWU5DX0VWRU5UCQlCSVQoNCkKKyNkZWZpbmUgV0wxMjczX0xFVl9FVkVOVAkJQklUKDUpCisjZGVmaW5lIFdMMTI3M19JRkZSX0VWRU5UCQlCSVQoNikKKyNkZWZpbmUgV0wxMjczX1BJX0VWRU5UCQkJQklUKDcpCisjZGVmaW5lIFdMMTI3M19QRF9FVkVOVAkJCUJJVCg4KQorI2RlZmluZSBXTDEyNzNfU1RJQ19FVkVOVAkJQklUKDkpCisjZGVmaW5lIFdMMTI3M19NQUxfRVZFTlQJCUJJVCgxMCkKKyNkZWZpbmUgV0wxMjczX1BPV19FTkJfRVZFTlQJCUJJVCgxMSkKKyNkZWZpbmUgV0wxMjczX1NDQU5fT1ZFUl9FVkVOVAkJQklUKDEyKQorI2RlZmluZSBXTDEyNzNfRVJST1JfRVZFTlQJCUJJVCgxMykKKworI2RlZmluZSBUVU5FUl9NT0RFX1NUT1BfU0VBUkNICQkwCisjZGVmaW5lIFRVTkVSX01PREVfUFJFU0VUCQkxCisjZGVmaW5lIFRVTkVSX01PREVfQVVUT19TRUVLCQkyCisjZGVmaW5lIFRVTkVSX01PREVfQUYJCQkzCisjZGVmaW5lIFRVTkVSX01PREVfQVVUT19TRUVLX1BJCQk0CisjZGVmaW5lIFRVTkVSX01PREVfQVVUT19TRUVLX0JVTEsJNQorCisjZGVmaW5lIFJEU19CTE9DS19TSVpFCTMKKworc3RydWN0IHdsMTI3M19mbV9wbGF0Zm9ybV9kYXRhIHsKKwlpbnQgKCpyZXF1ZXN0X3Jlc291cmNlcykgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOworCXZvaWQgKCpmcmVlX3Jlc291cmNlcykgKHZvaWQpOworCXZvaWQgKCplbmFibGUpICh2b2lkKTsKKwl2b2lkICgqZGlzYWJsZSkgKHZvaWQpOworCisJdTggZm9yYmlkZGVuX21vZGVzOworCXVuc2lnbmVkIGludCBjaGlsZHJlbjsKK307CisKKyNkZWZpbmUgV0wxMjczX0ZNX0NPUkVfQ0VMTFMJMgorCisjZGVmaW5lIFdMMTI3M19CQU5EX09USEVSCTAKKyNkZWZpbmUgV0wxMjczX0JBTkRfSkFQQU4JMQorCisjZGVmaW5lIFdMMTI3M19CQU5EX0pBUEFOX0xPVwk3NjAwMAorI2RlZmluZSBXTDEyNzNfQkFORF9KQVBBTl9ISUdICTkwMDAwCisjZGVmaW5lIFdMMTI3M19CQU5EX09USEVSX0xPVwk4NzUwMAorI2RlZmluZSBXTDEyNzNfQkFORF9PVEhFUl9ISUdICTEwODAwMAorCisjZGVmaW5lIFdMMTI3M19CQU5EX1RYX0xPVwk3NjAwMAorI2RlZmluZSBXTDEyNzNfQkFORF9UWF9ISUdICTEwODAwMAorCitzdHJ1Y3Qgd2wxMjczX2NvcmUgeworCXN0cnVjdCBtZmRfY2VsbCBjZWxsc1tXTDEyNzNfRk1fQ09SRV9DRUxMU107CisJc3RydWN0IHdsMTI3M19mbV9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKworCXVuc2lnbmVkIGludCBtb2RlOworCXVuc2lnbmVkIGludCBpMnNfbW9kZTsKKwl1bnNpZ25lZCBpbnQgdm9sdW1lOworCXVuc2lnbmVkIGludCBhdWRpb19tb2RlOworCXVuc2lnbmVkIGludCBjaGFubmVsX251bWJlcjsKKwlzdHJ1Y3QgbXV0ZXggbG9jazsgLyogZm9yIHNlcmlhbGl6aW5nIGZtIHJhZGlvIG9wZXJhdGlvbnMgKi8KKworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CisKKwlpbnQgKCp3cml0ZSkoc3RydWN0IHdsMTI3M19jb3JlICpjb3JlLCB1OCwgdTE2KTsKKwlpbnQgKCpzZXRfYXVkaW8pKHN0cnVjdCB3bDEyNzNfY29yZSAqY29yZSwgdW5zaWduZWQgaW50KTsKKwlpbnQgKCpzZXRfdm9sdW1lKShzdHJ1Y3Qgd2wxMjczX2NvcmUgKmNvcmUsIHVuc2lnbmVkIGludCk7Cit9OworCisjZW5kaWYJLyogaWZuZGVmIFdMMTI3M19DT1JFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1jL3NoX21tY2lmLmggYi9pbmNsdWRlL2xpbnV4L21tYy9zaF9tbWNpZi5oCmluZGV4IDVjOTlkYTEuLjQ0ZmM1MzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW1jL3NoX21tY2lmLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbWMvc2hfbW1jaWYuaApAQCAtMTQsOCArMTQsOSBAQAogI2lmbmRlZiBfX1NIX01NQ0lGX0hfXwogI2RlZmluZSBfX1NIX01NQ0lGX0hfXwogCi0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zaF9kbWEuaD4KIAogLyoKICAqIE1NQ0lGIDogQ0VfQ0xLX0NUUkwgWzE5OjE2XQpAQCAtMzEsMTMgKzMyLDE5IEBACiAgKiAxMTExIDogUGVyaXBoZXJhbCBjbG9jayAoc3VwX3BjbGsgc2V0ICcxJykKICAqLwogCitzdHJ1Y3Qgc2hfbW1jaWZfZG1hIHsKKwlzdHJ1Y3Qgc2hfZG1hZV9zbGF2ZSBjaGFuX3ByaXZfdHg7CisJc3RydWN0IHNoX2RtYWVfc2xhdmUgY2hhbl9wcml2X3J4OworfTsKKwogc3RydWN0IHNoX21tY2lmX3BsYXRfZGF0YSB7CiAJdm9pZCAoKnNldF9wd3IpKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIGludCBzdGF0ZSk7CiAJdm9pZCAoKmRvd25fcHdyKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKIAlpbnQgKCpnZXRfY2QpKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZWYpOwotCXU4CXN1cF9wY2xrOwkvKiAxIDpTSDc3NTcsIDA6IFNINzcyNC9TSDczNzIgKi8KLQl1bnNpZ25lZCBsb25nIGNhcHM7Ci0JdTMyCW9jcjsKKwlzdHJ1Y3Qgc2hfbW1jaWZfZG1hCSpkbWE7CisJdTgJCQlzdXBfcGNsazsJLyogMSA6U0g3NzU3LCAwOiBTSDc3MjQvU0g3MzcyICovCisJdW5zaWduZWQgbG9uZwkJY2FwczsKKwl1MzIJCQlvY3I7CiB9OwogCiAjZGVmaW5lIE1NQ0lGX0NFX0NNRF9TRVQJMHgwMDAwMDAwMApAQCAtNTksNiArNjYsMzIgQEAKICNkZWZpbmUgTU1DSUZfQ0VfSE9TVF9TVFMyCTB4MDAwMDAwNEMKICNkZWZpbmUgTU1DSUZfQ0VfVkVSU0lPTgkweDAwMDAwMDdDCiAKKy8qIENFX0JVRl9BQ0MgKi8KKyNkZWZpbmUgQlVGX0FDQ19ETUFXRU4JCSgxIDw8IDI1KQorI2RlZmluZSBCVUZfQUNDX0RNQVJFTgkJKDEgPDwgMjQpCisjZGVmaW5lIEJVRl9BQ0NfQlVTV18zMgkJKDAgPDwgMTcpCisjZGVmaW5lIEJVRl9BQ0NfQlVTV18xNgkJKDEgPDwgMTcpCisjZGVmaW5lIEJVRl9BQ0NfQVRZUAkJKDEgPDwgMTYpCisKKy8qIENFX0NMS19DVFJMICovCisjZGVmaW5lIENMS19FTkFCTEUJCSgxIDw8IDI0KSAvKiAxOiBvdXRwdXQgbW1jIGNsb2NrICovCisjZGVmaW5lIENMS19DTEVBUgkJKCgxIDw8IDE5KSB8ICgxIDw8IDE4KSB8ICgxIDw8IDE3KSB8ICgxIDw8IDE2KSkKKyNkZWZpbmUgQ0xLX1NVUF9QQ0xLCQkoKDEgPDwgMTkpIHwgKDEgPDwgMTgpIHwgKDEgPDwgMTcpIHwgKDEgPDwgMTYpKQorI2RlZmluZSBDTEtESVZfNAkJKDE8PDE2KSAvKiBtbWMgY2xvY2sgZnJlcXVlbmN5LgorCQkJCQkgKiBuOiBidXMgY2xvY2svKDJeKG4rMSkpICovCisjZGVmaW5lIENMS0RJVl8yNTYJCSg3PDwxNikgLyogbW1jIGNsb2NrIGZyZXF1ZW5jeS4gKHNlZSBhYm92ZSkgKi8KKyNkZWZpbmUgU1JTUFRPXzI1NgkJKCgxIDw8IDEzKSB8ICgwIDw8IDEyKSkgLyogcmVzcCB0aW1lb3V0ICovCisjZGVmaW5lIFNSQlNZVE9fMjkJCSgoMSA8PCAxMSkgfCAoMSA8PCAxMCkgfAlcCisJCQkJICgxIDw8IDkpIHwgKDEgPDwgOCkpIC8qIHJlc3AgYnVzeSB0aW1lb3V0ICovCisjZGVmaW5lIFNSV0RUT18yOQkJKCgxIDw8IDcpIHwgKDEgPDwgNikgfAkJXAorCQkJCSAoMSA8PCA1KSB8ICgxIDw8IDQpKSAvKiByZWFkL3dyaXRlIHRpbWVvdXQgKi8KKyNkZWZpbmUgU0NDU1RPXzI5CQkoKDEgPDwgMykgfCAoMSA8PCAyKSB8CQlcCisJCQkJICgxIDw8IDEpIHwgKDEgPDwgMCkpIC8qIGNjcyB0aW1lb3V0ICovCisKKy8qIENFX1ZFUlNJT04gKi8KKyNkZWZpbmUgU09GVF9SU1RfT04JCSgxIDw8IDMxKQorI2RlZmluZSBTT0ZUX1JTVF9PRkYJCTAKKwogc3RhdGljIGlubGluZSB1MzIgc2hfbW1jaWZfcmVhZGwodm9pZCBfX2lvbWVtICphZGRyLCBpbnQgcmVnKQogewogCXJldHVybiByZWFkbChhZGRyICsgcmVnKTsKQEAgLTE0NSwyMSArMTc4LDIwIEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzaF9tbWNpZl9ib290X2luaXQodm9pZCBfX2lvbWVtICpiYXNlKQogewotCXVuc2lnbmVkIGxvbmcgdG1wOwotCiAJLyogcmVzZXQgKi8KLQl0bXAgPSBzaF9tbWNpZl9yZWFkbChiYXNlLCBNTUNJRl9DRV9WRVJTSU9OKTsKLQlzaF9tbWNpZl93cml0ZWwoYmFzZSwgTU1DSUZfQ0VfVkVSU0lPTiwgdG1wIHwgMHg4MDAwMDAwMCk7Ci0Jc2hfbW1jaWZfd3JpdGVsKGJhc2UsIE1NQ0lGX0NFX1ZFUlNJT04sIHRtcCAmIH4weDgwMDAwMDAwKTsKKwlzaF9tbWNpZl93cml0ZWwoYmFzZSwgTU1DSUZfQ0VfVkVSU0lPTiwgU09GVF9SU1RfT04pOworCXNoX21tY2lmX3dyaXRlbChiYXNlLCBNTUNJRl9DRV9WRVJTSU9OLCBTT0ZUX1JTVF9PRkYpOwogCiAJLyogYnl0ZSBzd2FwICovCi0Jc2hfbW1jaWZfd3JpdGVsKGJhc2UsIE1NQ0lGX0NFX0JVRl9BQ0MsIDB4MDAwMTAwMDApOworCXNoX21tY2lmX3dyaXRlbChiYXNlLCBNTUNJRl9DRV9CVUZfQUNDLCBCVUZfQUNDX0FUWVApOwogCiAJLyogU2V0IGJsb2NrIHNpemUgaW4gTU1DSUYgaGFyZHdhcmUgKi8KIAlzaF9tbWNpZl93cml0ZWwoYmFzZSwgTU1DSUZfQ0VfQkxPQ0tfU0VULCBTSF9NTUNJRl9CQlMpOwogCi0JLyogRW5hYmxlIHRoZSBjbG9jaywgc2V0IGl0IHRvIEJ1cyBjbG9jay8yNTYgKGFib3V0IDMyNUtoeikqLwotCXNoX21tY2lmX3dyaXRlbChiYXNlLCBNTUNJRl9DRV9DTEtfQ1RSTCwgMHgwMTA3MmZmZik7CisJLyogRW5hYmxlIHRoZSBjbG9jaywgc2V0IGl0IHRvIEJ1cyBjbG9jay8yNTYgKGFib3V0IDMyNUtoeikuICovCisJc2hfbW1jaWZfd3JpdGVsKGJhc2UsIE1NQ0lGX0NFX0NMS19DVFJMLAorCQkJQ0xLX0VOQUJMRSB8IENMS0RJVl8yNTYgfCBTUlNQVE9fMjU2IHwKKwkJCVNSQlNZVE9fMjkgfCBTUldEVE9fMjkgfCBTQ0NTVE9fMjkpOwogCiAJLyogQ01EMCAqLwogCXNoX21tY2lmX2Jvb3RfY21kKGJhc2UsIDB4MDAwMDAwNDAsIDApOwpAQCAtMTg0LDcgKzIxNiw5IEBACiAJdW5zaWduZWQgbG9uZyB0bXA7CiAKIAkvKiBJbiBkYXRhIHRyYW5zZmVyIG1vZGU6IFNldCBjbG9jayB0byBCdXMgY2xvY2svNCAoYWJvdXQgMjBNaHopICovCi0Jc2hfbW1jaWZfd3JpdGVsKGJhc2UsIE1NQ0lGX0NFX0NMS19DVFJMLCAweDAxMDEyZmZmKTsKKwlzaF9tbWNpZl93cml0ZWwoYmFzZSwgTU1DSUZfQ0VfQ0xLX0NUUkwsCisJCQlDTEtfRU5BQkxFIHwgQ0xLRElWXzQgfCBTUlNQVE9fMjU2IHwKKwkJCVNSQlNZVE9fMjkgfCBTUldEVE9fMjkgfCBTQ0NTVE9fMjkpOwogCiAJLyogQ01EOSAtIEdldCBDU0QgKi8KIAlzaF9tbWNpZl9ib290X2NtZChiYXNlLCAweDA5ODA2MDAwLCAweDAwMDEwMDAwKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW9kdWxlLmggYi9pbmNsdWRlL2xpbnV4L21vZHVsZS5oCmluZGV4IDc1NzViYmIuLjhiMTdmZDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW9kdWxlLmgKKysrIGIvaW5jbHVkZS9saW51eC9tb2R1bGUuaApAQCAtMzA4LDYgKzMwOCw5IEBACiAJLyogVGhlIHNpemUgb2YgdGhlIGV4ZWN1dGFibGUgY29kZSBpbiBlYWNoIHNlY3Rpb24uICAqLwogCXVuc2lnbmVkIGludCBpbml0X3RleHRfc2l6ZSwgY29yZV90ZXh0X3NpemU7CiAKKwkvKiBTaXplIG9mIFJPIHNlY3Rpb25zIG9mIHRoZSBtb2R1bGUgKHRleHQrcm9kYXRhKSAqLworCXVuc2lnbmVkIGludCBpbml0X3JvX3NpemUsIGNvcmVfcm9fc2l6ZTsKKwogCS8qIEFyY2gtc3BlY2lmaWMgbW9kdWxlIHZhbHVlcyAqLwogCXN0cnVjdCBtb2RfYXJjaF9zcGVjaWZpYyBhcmNoOwogCkBAIC02NzIsNyArNjc1LDYgQEAKIHsKIAlyZXR1cm4gMDsKIH0KLQogI2VuZGlmIC8qIENPTkZJR19NT0RVTEVTICovCiAKICNpZmRlZiBDT05GSUdfU1lTRlMKQEAgLTY4Nyw2ICs2ODksMTMgQEAKIAogI2RlZmluZSBfX01PRFVMRV9TVFJJTkcoeCkgX19zdHJpbmdpZnkoeCkKIAorI2lmZGVmIENPTkZJR19ERUJVR19TRVRfTU9EVUxFX1JPTlgKK2V4dGVybiB2b2lkIHNldF9hbGxfbW9kdWxlc190ZXh0X3J3KHZvaWQpOworZXh0ZXJuIHZvaWQgc2V0X2FsbF9tb2R1bGVzX3RleHRfcm8odm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHNldF9hbGxfbW9kdWxlc190ZXh0X3J3KHZvaWQpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIHNldF9hbGxfbW9kdWxlc190ZXh0X3JvKHZvaWQpIHsgfQorI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfR0VORVJJQ19CVUcKIHZvaWQgbW9kdWxlX2J1Z19maW5hbGl6ZShjb25zdCBFbGZfRWhkciAqLCBjb25zdCBFbGZfU2hkciAqLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tb3VudC5oIGIvaW5jbHVkZS9saW51eC9tb3VudC5oCmluZGV4IDVlN2E1OTQuLjE4NjllYTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW91bnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L21vdW50LmgKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvbm9kZW1hc2suaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcWxvY2suaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAKIHN0cnVjdCBzdXBlcl9ibG9jazsKQEAgLTQ2LDEyICs0NywyNCBAQAogCiAjZGVmaW5lIE1OVF9JTlRFUk5BTAkweDQwMDAKIAorc3RydWN0IG1udF9wY3AgeworCWludCBtbnRfY291bnQ7CisJaW50IG1udF93cml0ZXJzOworfTsKKwogc3RydWN0IHZmc21vdW50IHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIG1udF9oYXNoOwogCXN0cnVjdCB2ZnNtb3VudCAqbW50X3BhcmVudDsJLyogZnMgd2UgYXJlIG1vdW50ZWQgb24gKi8KIAlzdHJ1Y3QgZGVudHJ5ICptbnRfbW91bnRwb2ludDsJLyogZGVudHJ5IG9mIG1vdW50cG9pbnQgKi8KIAlzdHJ1Y3QgZGVudHJ5ICptbnRfcm9vdDsJLyogcm9vdCBvZiB0aGUgbW91bnRlZCB0cmVlICovCiAJc3RydWN0IHN1cGVyX2Jsb2NrICptbnRfc2I7CS8qIHBvaW50ZXIgdG8gc3VwZXJibG9jayAqLworI2lmZGVmIENPTkZJR19TTVAKKwlzdHJ1Y3QgbW50X3BjcCBfX3BlcmNwdSAqbW50X3BjcDsKKwlhdG9taWNfdCBtbnRfbG9uZ3JlZnM7CisjZWxzZQorCWludCBtbnRfY291bnQ7CisJaW50IG1udF93cml0ZXJzOworI2VuZGlmCiAJc3RydWN0IGxpc3RfaGVhZCBtbnRfbW91bnRzOwkvKiBsaXN0IG9mIGNoaWxkcmVuLCBhbmNob3JlZCBoZXJlICovCiAJc3RydWN0IGxpc3RfaGVhZCBtbnRfY2hpbGQ7CS8qIGFuZCBnb2luZyB0aHJvdWdoIHRoZWlyIG1udF9jaGlsZCAqLwogCWludCBtbnRfZmxhZ3M7CkBAIC03MCw1NyArODMsMjUgQEAKIAlzdHJ1Y3QgbW50X25hbWVzcGFjZSAqbW50X25zOwkvKiBjb250YWluaW5nIG5hbWVzcGFjZSAqLwogCWludCBtbnRfaWQ7CQkJLyogbW91bnQgaWRlbnRpZmllciAqLwogCWludCBtbnRfZ3JvdXBfaWQ7CQkvKiBwZWVyIGdyb3VwIGlkZW50aWZpZXIgKi8KLQkvKgotCSAqIFdlIHB1dCBtbnRfY291bnQgJiBtbnRfZXhwaXJ5X21hcmsgYXQgdGhlIGVuZCBvZiBzdHJ1Y3QgdmZzbW91bnQKLQkgKiB0byBsZXQgdGhlc2UgZnJlcXVlbnRseSBtb2RpZmllZCBmaWVsZHMgaW4gYSBzZXBhcmF0ZSBjYWNoZSBsaW5lCi0JICogKHNvIHRoYXQgcmVhZHMgb2YgbW50X2ZsYWdzIHdvbnQgcGluZy1wb25nIG9uIFNNUCBtYWNoaW5lcykKLQkgKi8KLQlhdG9taWNfdCBtbnRfY291bnQ7CiAJaW50IG1udF9leHBpcnlfbWFyazsJCS8qIHRydWUgaWYgbWFya2VkIGZvciBleHBpcnkgKi8KIAlpbnQgbW50X3Bpbm5lZDsKIAlpbnQgbW50X2dob3N0czsKLSNpZmRlZiBDT05GSUdfU01QCi0JaW50IF9fcGVyY3B1ICptbnRfd3JpdGVyczsKLSNlbHNlCi0JaW50IG1udF93cml0ZXJzOwotI2VuZGlmCiB9OwogCi1zdGF0aWMgaW5saW5lIGludCAqZ2V0X21udF93cml0ZXJzX3B0cihzdHJ1Y3QgdmZzbW91bnQgKm1udCkKLXsKLSNpZmRlZiBDT05GSUdfU01QCi0JcmV0dXJuIG1udC0+bW50X3dyaXRlcnM7Ci0jZWxzZQotCXJldHVybiAmbW50LT5tbnRfd3JpdGVyczsKLSNlbmRpZgotfQotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCB2ZnNtb3VudCAqbW50Z2V0KHN0cnVjdCB2ZnNtb3VudCAqbW50KQotewotCWlmIChtbnQpCi0JCWF0b21pY19pbmMoJm1udC0+bW50X2NvdW50KTsKLQlyZXR1cm4gbW50OwotfQotCiBzdHJ1Y3QgZmlsZTsgLyogZm9yd2FyZCBkZWMgKi8KIAogZXh0ZXJuIGludCBtbnRfd2FudF93cml0ZShzdHJ1Y3QgdmZzbW91bnQgKm1udCk7CiBleHRlcm4gaW50IG1udF93YW50X3dyaXRlX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUpOwogZXh0ZXJuIGludCBtbnRfY2xvbmVfd3JpdGUoc3RydWN0IHZmc21vdW50ICptbnQpOwogZXh0ZXJuIHZvaWQgbW50X2Ryb3Bfd3JpdGUoc3RydWN0IHZmc21vdW50ICptbnQpOwotZXh0ZXJuIHZvaWQgbW50cHV0X25vX2V4cGlyZShzdHJ1Y3QgdmZzbW91bnQgKm1udCk7CitleHRlcm4gdm9pZCBtbnRwdXQoc3RydWN0IHZmc21vdW50ICptbnQpOworZXh0ZXJuIHN0cnVjdCB2ZnNtb3VudCAqbW50Z2V0KHN0cnVjdCB2ZnNtb3VudCAqbW50KTsKK2V4dGVybiB2b2lkIG1udHB1dF9sb25nKHN0cnVjdCB2ZnNtb3VudCAqbW50KTsKK2V4dGVybiBzdHJ1Y3QgdmZzbW91bnQgKm1udGdldF9sb25nKHN0cnVjdCB2ZnNtb3VudCAqbW50KTsKIGV4dGVybiB2b2lkIG1udF9waW4oc3RydWN0IHZmc21vdW50ICptbnQpOwogZXh0ZXJuIHZvaWQgbW50X3VucGluKHN0cnVjdCB2ZnNtb3VudCAqbW50KTsKIGV4dGVybiBpbnQgX19tbnRfaXNfcmVhZG9ubHkoc3RydWN0IHZmc21vdW50ICptbnQpOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgbW50cHV0KHN0cnVjdCB2ZnNtb3VudCAqbW50KQotewotCWlmIChtbnQpIHsKLQkJbW50LT5tbnRfZXhwaXJ5X21hcmsgPSAwOwotCQltbnRwdXRfbm9fZXhwaXJlKG1udCk7Ci0JfQotfQotCiBleHRlcm4gc3RydWN0IHZmc21vdW50ICpkb19rZXJuX21vdW50KGNvbnN0IGNoYXIgKmZzdHlwZSwgaW50IGZsYWdzLAogCQkJCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmRhdGEpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L211dGV4LmggYi9pbmNsdWRlL2xpbnV4L211dGV4LmgKaW5kZXggZjM2M2JjOC4uOTRiNDhiZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tdXRleC5oCisrKyBiL2luY2x1ZGUvbGludXgvbXV0ZXguaApAQCAtMTYwLDQgKzE2MCw4IEBACiBleHRlcm4gdm9pZCBtdXRleF91bmxvY2soc3RydWN0IG11dGV4ICpsb2NrKTsKIGV4dGVybiBpbnQgYXRvbWljX2RlY19hbmRfbXV0ZXhfbG9jayhhdG9taWNfdCAqY250LCBzdHJ1Y3QgbXV0ZXggKmxvY2spOwogCisjaWZuZGVmIENPTkZJR19IQVZFX0FSQ0hfTVVURVhfQ1BVX1JFTEFYCisjZGVmaW5lIGFyY2hfbXV0ZXhfY3B1X3JlbGF4KCkJY3B1X3JlbGF4KCkKKyNlbmRpZgorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmFtZWkuaCBiL2luY2x1ZGUvbGludXgvbmFtZWkuaAppbmRleCAwNWI0NDFkLi4xOGQwNmFkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25hbWVpLmgKKysrIGIvaW5jbHVkZS9saW51eC9uYW1laS5oCkBAIC0xOSw3ICsxOSwxMCBAQAogCXN0cnVjdCBwYXRoCXBhdGg7CiAJc3RydWN0IHFzdHIJbGFzdDsKIAlzdHJ1Y3QgcGF0aAlyb290OworCXN0cnVjdCBmaWxlCSpmaWxlOworCXN0cnVjdCBpbm9kZQkqaW5vZGU7IC8qIHBhdGguZGVudHJ5LmRfaW5vZGUgKi8KIAl1bnNpZ25lZCBpbnQJZmxhZ3M7CisJdW5zaWduZWQJc2VxOwogCWludAkJbGFzdF90eXBlOwogCXVuc2lnbmVkCWRlcHRoOwogCWNoYXIgKnNhdmVkX25hbWVzW01BWF9ORVNURURfTElOS1MgKyAxXTsKQEAgLTQxLDE0ICs0NCwxNSBAQAogICogIC0gcmVxdWlyZSBhIGRpcmVjdG9yeQogICogIC0gZW5kaW5nIHNsYXNoZXMgb2sgZXZlbiBmb3Igbm9uZXhpc3RlbnQgZmlsZXMKICAqICAtIGludGVybmFsICJ0aGVyZSBhcmUgbW9yZSBwYXRoIGNvbXBvbmVudHMiIGZsYWcKLSAqICAtIGxvY2tlZCB3aGVuIGxvb2t1cCBkb25lIHdpdGggZGNhY2hlX2xvY2sgaGVsZAogICogIC0gZGVudHJ5IGNhY2hlIGlzIHVudHJ1c3RlZDsgZm9yY2UgYSByZWFsIGxvb2t1cAogICovCi0jZGVmaW5lIExPT0tVUF9GT0xMT1cJCSAxCi0jZGVmaW5lIExPT0tVUF9ESVJFQ1RPUlkJIDIKLSNkZWZpbmUgTE9PS1VQX0NPTlRJTlVFCQkgNAotI2RlZmluZSBMT09LVVBfUEFSRU5UCQkxNgotI2RlZmluZSBMT09LVVBfUkVWQUwJCTY0CisjZGVmaW5lIExPT0tVUF9GT0xMT1cJCTB4MDAwMQorI2RlZmluZSBMT09LVVBfRElSRUNUT1JZCTB4MDAwMgorI2RlZmluZSBMT09LVVBfQ09OVElOVUUJCTB4MDAwNAorCisjZGVmaW5lIExPT0tVUF9QQVJFTlQJCTB4MDAxMAorI2RlZmluZSBMT09LVVBfUkVWQUwJCTB4MDAyMAorI2RlZmluZSBMT09LVVBfUkNVCQkweDAwNDAKIC8qCiAgKiBJbnRlbnQgZGF0YQogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25jcF9mcy5oIGIvaW5jbHVkZS9saW51eC9uY3BfZnMuaAppbmRleCBlZjY2MzA2Li4xYzI3ZjIwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25jcF9mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmNwX2ZzLmgKQEAgLTE4NCwxMyArMTg0LDEzIEBACiAJX191OAkJCWZpbGVfaGFuZGxlWzZdOwogfTsKIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgbmNwX3NlcnZlciAqTkNQX1NCUChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgbmNwX3NlcnZlciAqTkNQX1NCUChjb25zdCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewogCXJldHVybiBzYi0+c19mc19pbmZvOwogfQogCiAjZGVmaW5lIE5DUF9TRVJWRVIoaW5vZGUpCU5DUF9TQlAoKGlub2RlKS0+aV9zYikKLXN0YXRpYyBpbmxpbmUgc3RydWN0IG5jcF9pbm9kZV9pbmZvICpOQ1BfRklORk8oc3RydWN0IGlub2RlICppbm9kZSkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG5jcF9pbm9kZV9pbmZvICpOQ1BfRklORk8oY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlyZXR1cm4gY29udGFpbmVyX29mKGlub2RlLCBzdHJ1Y3QgbmNwX2lub2RlX2luZm8sIHZmc19pbm9kZSk7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAppbmRleCBkOGZkMmMyLi4wZjZiMWM5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKQEAgLTQ5Myw2ICs0OTMsOCBAQAogZW51bSBuZXRkZXZfcXVldWVfc3RhdGVfdCB7CiAJX19RVUVVRV9TVEFURV9YT0ZGLAogCV9fUVVFVUVfU1RBVEVfRlJPWkVOLAorI2RlZmluZSBRVUVVRV9TVEFURV9YT0ZGX09SX0ZST1pFTiAoKDEgPDwgX19RVUVVRV9TVEFURV9YT0ZGKQkJfCBcCisJCQkJICAgICgxIDw8IF9fUVVFVUVfU1RBVEVfRlJPWkVOKSkKIH07CiAKIHN0cnVjdCBuZXRkZXZfcXVldWUgewpAQCAtNTAzLDYgKzUwNSwxMiBAQAogCXN0cnVjdCBRZGlzYwkJKnFkaXNjOwogCXVuc2lnbmVkIGxvbmcJCXN0YXRlOwogCXN0cnVjdCBRZGlzYwkJKnFkaXNjX3NsZWVwaW5nOworI2lmZGVmIENPTkZJR19SUFMKKwlzdHJ1Y3Qga29iamVjdAkJa29iajsKKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX1hQUykgJiYgZGVmaW5lZChDT05GSUdfTlVNQSkKKwlpbnQJCQludW1hX25vZGU7CisjZW5kaWYKIC8qCiAgKiB3cml0ZSBtb3N0bHkgcGFydAogICovCkBAIC01MTcsNiArNTI1LDIyIEBACiAJdTY0CQkJdHhfZHJvcHBlZDsKIH0gX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKIAorc3RhdGljIGlubGluZSBpbnQgbmV0ZGV2X3F1ZXVlX251bWFfbm9kZV9yZWFkKGNvbnN0IHN0cnVjdCBuZXRkZXZfcXVldWUgKnEpCit7CisjaWYgZGVmaW5lZChDT05GSUdfWFBTKSAmJiBkZWZpbmVkKENPTkZJR19OVU1BKQorCXJldHVybiBxLT5udW1hX25vZGU7CisjZWxzZQorCXJldHVybiBOVU1BX05PX05PREU7CisjZW5kaWYKK30KKworc3RhdGljIGlubGluZSB2b2lkIG5ldGRldl9xdWV1ZV9udW1hX25vZGVfd3JpdGUoc3RydWN0IG5ldGRldl9xdWV1ZSAqcSwgaW50IG5vZGUpCit7CisjaWYgZGVmaW5lZChDT05GSUdfWFBTKSAmJiBkZWZpbmVkKENPTkZJR19OVU1BKQorCXEtPm51bWFfbm9kZSA9IG5vZGU7CisjZW5kaWYKK30KKwogI2lmZGVmIENPTkZJR19SUFMKIC8qCiAgKiBUaGlzIHN0cnVjdHVyZSBob2xkcyBhbiBSUFMgbWFwIHdoaWNoIGNhbiBiZSBvZiB2YXJpYWJsZSBsZW5ndGguICBUaGUKQEAgLTU5MiwxMSArNjE2LDM2IEBACiAJc3RydWN0IHJwc19tYXAgX19yY3UJCSpycHNfbWFwOwogCXN0cnVjdCBycHNfZGV2X2Zsb3dfdGFibGUgX19yY3UJKnJwc19mbG93X3RhYmxlOwogCXN0cnVjdCBrb2JqZWN0CQkJa29iajsKLQlzdHJ1Y3QgbmV0ZGV2X3J4X3F1ZXVlCQkqZmlyc3Q7Ci0JYXRvbWljX3QJCQljb3VudDsKKwlzdHJ1Y3QgbmV0X2RldmljZQkJKmRldjsKIH0gX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKICNlbmRpZiAvKiBDT05GSUdfUlBTICovCiAKKyNpZmRlZiBDT05GSUdfWFBTCisvKgorICogVGhpcyBzdHJ1Y3R1cmUgaG9sZHMgYW4gWFBTIG1hcCB3aGljaCBjYW4gYmUgb2YgdmFyaWFibGUgbGVuZ3RoLiAgVGhlCisgKiBtYXAgaXMgYW4gYXJyYXkgb2YgcXVldWVzLgorICovCitzdHJ1Y3QgeHBzX21hcCB7CisJdW5zaWduZWQgaW50IGxlbjsKKwl1bnNpZ25lZCBpbnQgYWxsb2NfbGVuOworCXN0cnVjdCByY3VfaGVhZCByY3U7CisJdTE2IHF1ZXVlc1swXTsKK307CisjZGVmaW5lIFhQU19NQVBfU0laRShfbnVtKSAoc2l6ZW9mKHN0cnVjdCB4cHNfbWFwKSArIChfbnVtICogc2l6ZW9mKHUxNikpKQorI2RlZmluZSBYUFNfTUlOX01BUF9BTExPQyAoKEwxX0NBQ0hFX0JZVEVTIC0gc2l6ZW9mKHN0cnVjdCB4cHNfbWFwKSkJXAorICAgIC8gc2l6ZW9mKHUxNikpCisKKy8qCisgKiBUaGlzIHN0cnVjdHVyZSBob2xkcyBhbGwgWFBTIG1hcHMgZm9yIGRldmljZS4gIE1hcHMgYXJlIGluZGV4ZWQgYnkgQ1BVLgorICovCitzdHJ1Y3QgeHBzX2Rldl9tYXBzIHsKKwlzdHJ1Y3QgcmN1X2hlYWQgcmN1OworCXN0cnVjdCB4cHNfbWFwIF9fcmN1ICpjcHVfbWFwWzBdOworfTsKKyNkZWZpbmUgWFBTX0RFVl9NQVBTX1NJWkUgKHNpemVvZihzdHJ1Y3QgeHBzX2Rldl9tYXBzKSArCQlcCisgICAgKG5yX2NwdV9pZHMgKiBzaXplb2Yoc3RydWN0IHhwc19tYXAgKikpKQorI2VuZGlmIC8qIENPTkZJR19YUFMgKi8KKwogLyoKICAqIFRoaXMgc3RydWN0dXJlIGRlZmluZXMgdGhlIG1hbmFnZW1lbnQgaG9va3MgZm9yIG5ldHdvcmsgZGV2aWNlcy4KICAqIFRoZSBmb2xsb3dpbmcgaG9va3MgY2FuIGJlIGRlZmluZWQ7IHVubGVzcyBub3RlZCBvdGhlcndpc2UsIHRoZXkgYXJlCkBAIC02ODMsNyArNzMyLDcgQEAKICAqCSAgIG5laXRoZXIgb3BlcmF0aW9uLgogICoKICAqIHZvaWQgKCpuZG9fdmxhbl9yeF9yZWdpc3Rlcikoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHZsYW5fZ3JvdXAgKmdycCk7Ci0gKglJZiBkZXZpY2Ugc3VwcG9ydCBWTEFOIHJlY2VpdmUgYWNjbGVyYXRpb24KKyAqCUlmIGRldmljZSBzdXBwb3J0IFZMQU4gcmVjZWl2ZSBhY2NlbGVyYXRpb24KICAqCShpZS4gZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfSFdfVkxBTl9SWCksIHRoZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQKICAqCXdoZW4gdmxhbiBncm91cHMgZm9yIHRoZSBkZXZpY2UgY2hhbmdlcy4gIE5vdGU6IGdycCBpcyBOVUxMCiAgKglpZiBubyB2bGFuJ3MgZ3JvdXBzIGFyZSBiZWluZyB1c2VkLgpAQCAtOTUxLDcgKzEwMDAsNyBAQAogI2VuZGlmCiAJdm9pZCAJCQkqYXRhbGtfcHRyOwkvKiBBcHBsZVRhbGsgbGluayAJKi8KIAlzdHJ1Y3QgaW5fZGV2aWNlIF9fcmN1CSppcF9wdHI7CS8qIElQdjQgc3BlY2lmaWMgZGF0YQkqLwotCXZvaWQgICAgICAgICAgICAgICAgICAgICpkbl9wdHI7ICAgICAgICAvKiBERUNuZXQgc3BlY2lmaWMgZGF0YSAqLworCXN0cnVjdCBkbl9kZXYgX19yY3UgICAgICpkbl9wdHI7ICAgICAgICAvKiBERUNuZXQgc3BlY2lmaWMgZGF0YSAqLwogCXN0cnVjdCBpbmV0Nl9kZXYgX19yY3UJKmlwNl9wdHI7ICAgICAgIC8qIElQdjYgc3BlY2lmaWMgZGF0YSAqLwogCXZvaWQJCQkqZWNfcHRyOwkvKiBFY29uZXQgc3BlY2lmaWMgZGF0YQkqLwogCXZvaWQJCQkqYXgyNV9wdHI7CS8qIEFYLjI1IHNwZWNpZmljIGRhdGEgKi8KQEAgLTk5NSw4ICsxMDQ0LDggQEAKIAl1bnNpZ25lZCBpbnQJCXJlYWxfbnVtX3J4X3F1ZXVlczsKICNlbmRpZgogCi0JcnhfaGFuZGxlcl9mdW5jX3QJKnJ4X2hhbmRsZXI7Ci0Jdm9pZAkJCSpyeF9oYW5kbGVyX2RhdGE7CisJcnhfaGFuZGxlcl9mdW5jX3QgX19yY3UJKnJ4X2hhbmRsZXI7CisJdm9pZCBfX3JjdQkJKnJ4X2hhbmRsZXJfZGF0YTsKIAogCXN0cnVjdCBuZXRkZXZfcXVldWUgX19yY3UgKmluZ3Jlc3NfcXVldWU7CiAKQEAgLTEwMTcsNiArMTA2NiwxMCBAQAogCXVuc2lnbmVkIGxvbmcJCXR4X3F1ZXVlX2xlbjsJLyogTWF4IGZyYW1lcyBwZXIgcXVldWUgYWxsb3dlZCAqLwogCXNwaW5sb2NrX3QJCXR4X2dsb2JhbF9sb2NrOwogCisjaWZkZWYgQ09ORklHX1hQUworCXN0cnVjdCB4cHNfZGV2X21hcHMgX19yY3UgKnhwc19tYXBzOworI2VuZGlmCisKIAkvKiBUaGVzZSBtYXkgYmUgbmVlZGVkIGZvciBmdXR1cmUgbmV0d29yay1wb3dlci1kb3duIGNvZGUuICovCiAKIAkvKgpAQCAtMTMwNyw3ICsxMzYwLDggQEAKIAogZXh0ZXJuIGludCAJCQluZXRkZXZfYm9vdF9zZXR1cF9jaGVjayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIGV4dGVybiB1bnNpZ25lZCBsb25nCQluZXRkZXZfYm9vdF9iYXNlKGNvbnN0IGNoYXIgKnByZWZpeCwgaW50IHVuaXQpOwotZXh0ZXJuIHN0cnVjdCBuZXRfZGV2aWNlICAgICpkZXZfZ2V0Ynlod2FkZHIoc3RydWN0IG5ldCAqbmV0LCB1bnNpZ25lZCBzaG9ydCB0eXBlLCBjaGFyICpod2FkZHIpOworZXh0ZXJuIHN0cnVjdCBuZXRfZGV2aWNlICpkZXZfZ2V0Ynlod2FkZHJfcmN1KHN0cnVjdCBuZXQgKm5ldCwgdW5zaWduZWQgc2hvcnQgdHlwZSwKKwkJCQkJICAgICAgY29uc3QgY2hhciAqaHdhZGRyKTsKIGV4dGVybiBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2X2dldGZpcnN0Ynlod3R5cGUoc3RydWN0IG5ldCAqbmV0LCB1bnNpZ25lZCBzaG9ydCB0eXBlKTsKIGV4dGVybiBzdHJ1Y3QgbmV0X2RldmljZSAqX19kZXZfZ2V0Zmlyc3RieWh3dHlwZShzdHJ1Y3QgbmV0ICpuZXQsIHVuc2lnbmVkIHNob3J0IHR5cGUpOwogZXh0ZXJuIHZvaWQJCWRldl9hZGRfcGFjayhzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0KTsKQEAgLTE2MDAsOSArMTY1NCw5IEBACiAJcmV0dXJuIG5ldGlmX3R4X3F1ZXVlX3N0b3BwZWQobmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIDApKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgbmV0aWZfdHhfcXVldWVfZnJvemVuKGNvbnN0IHN0cnVjdCBuZXRkZXZfcXVldWUgKmRldl9xdWV1ZSkKK3N0YXRpYyBpbmxpbmUgaW50IG5ldGlmX3R4X3F1ZXVlX2Zyb3plbl9vcl9zdG9wcGVkKGNvbnN0IHN0cnVjdCBuZXRkZXZfcXVldWUgKmRldl9xdWV1ZSkKIHsKLQlyZXR1cm4gdGVzdF9iaXQoX19RVUVVRV9TVEFURV9GUk9aRU4sICZkZXZfcXVldWUtPnN0YXRlKTsKKwlyZXR1cm4gZGV2X3F1ZXVlLT5zdGF0ZSAmIFFVRVVFX1NUQVRFX1hPRkZfT1JfRlJPWkVOOwogfQogCiAvKioKQEAgLTE2OTMsNiArMTc0NywxNiBAQAogCQlfX25ldGlmX3NjaGVkdWxlKHR4cS0+cWRpc2MpOwogfQogCisvKgorICogUmV0dXJucyBhIFR4IGhhc2ggZm9yIHRoZSBnaXZlbiBwYWNrZXQgd2hlbiBkZXYtPnJlYWxfbnVtX3R4X3F1ZXVlcyBpcyB1c2VkCisgKiBhcyBhIGRpc3RyaWJ1dGlvbiByYW5nZSBsaW1pdCBmb3IgdGhlIHJldHVybmVkIHZhbHVlLgorICovCitzdGF0aWMgaW5saW5lIHUxNiBza2JfdHhfaGFzaChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlyZXR1cm4gX19za2JfdHhfaGFzaChkZXYsIHNrYiwgZGV2LT5yZWFsX251bV90eF9xdWV1ZXMpOworfQorCiAvKioKICAqCW5ldGlmX2lzX211bHRpcXVldWUgLSB0ZXN0IGlmIGRldmljZSBoYXMgbXVsdGlwbGUgdHJhbnNtaXQgcXVldWVzCiAgKglAZGV2OiBuZXR3b3JrIGRldmljZQpAQCAtMjIzOSw2ICsyMzAzLDggQEAKIHZvaWQgbmV0aWZfc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKnJvb3RkZXYsCiAJCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCitpbnQgbmV0aWZfZ2V0X3ZsYW5fZmVhdHVyZXMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisKIHN0YXRpYyBpbmxpbmUgaW50IG5ldF9nc29fb2soaW50IGZlYXR1cmVzLCBpbnQgZ3NvX3R5cGUpCiB7CiAJaW50IGZlYXR1cmUgPSBnc29fdHlwZSA8PCBORVRJRl9GX0dTT19TSElGVDsKQEAgLTIyNTQsMTAgKzIzMjAsNyBAQAogc3RhdGljIGlubGluZSBpbnQgbmV0aWZfbmVlZHNfZ3NvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJaWYgKHNrYl9pc19nc28oc2tiKSkgewotCQlpbnQgZmVhdHVyZXMgPSBkZXYtPmZlYXR1cmVzOwotCi0JCWlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QXzgwMjFRKSB8fCBza2ItPnZsYW5fdGNpKQotCQkJZmVhdHVyZXMgJj0gZGV2LT52bGFuX2ZlYXR1cmVzOworCQlpbnQgZmVhdHVyZXMgPSBuZXRpZl9nZXRfdmxhbl9mZWF0dXJlcyhza2IsIGRldik7CiAKIAkJcmV0dXJuICghc2tiX2dzb19vayhza2IsIGZlYXR1cmVzKSB8fAogCQkJdW5saWtlbHkoc2tiLT5pcF9zdW1tZWQgIT0gQ0hFQ0tTVU1fUEFSVElBTCkpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyLmgKaW5kZXggMDMzMTdjOC4uMTg5MzgzNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci5oCkBAIC0zMyw2ICszMyw4IEBACiAKICNkZWZpbmUgTkZfUVVFVUVfTlIoeCkgKCgoKHgpIDw8IE5GX1ZFUkRJQ1RfQklUUykgJiBORl9WRVJESUNUX1FNQVNLKSB8IE5GX1FVRVVFKQogCisjZGVmaW5lIE5GX0RST1BfRVJSKHgpICgoKC14KSA8PCBORl9WRVJESUNUX0JJVFMpIHwgTkZfRFJPUCkKKwogLyogb25seSBmb3IgdXNlcnNwYWNlIGNvbXBhdGliaWxpdHkgKi8KICNpZm5kZWYgX19LRVJORUxfXwogLyogR2VuZXJpYyBjYWNoZSByZXNwb25zZXMgZnJvbSBob29rIGZ1bmN0aW9ucy4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmZzX2ZzLmggYi9pbmNsdWRlL2xpbnV4L25mc19mcy5oCmluZGV4IDI5ZDUwNGQuLjA3NzliYjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmZzX2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZnNfZnMuaApAQCAtMzUxLDcgKzM1MSw3IEBACiBleHRlcm4gaW50IG5mc19wb3N0X29wX3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgbmZzX2ZhdHRyICpmYXR0cik7CiBleHRlcm4gaW50IG5mc19wb3N0X29wX3VwZGF0ZV9pbm9kZV9mb3JjZV93Y2Moc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IG5mc19mYXR0ciAqZmF0dHIpOwogZXh0ZXJuIGludCBuZnNfZ2V0YXR0cihzdHJ1Y3QgdmZzbW91bnQgKiwgc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3Qga3N0YXQgKik7Ci1leHRlcm4gaW50IG5mc19wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqLCBpbnQpOworZXh0ZXJuIGludCBuZnNfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKiwgaW50LCB1bnNpZ25lZCBpbnQpOwogZXh0ZXJuIGludCBuZnNfb3BlbihzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7CiBleHRlcm4gaW50IG5mc19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTsKIGV4dGVybiBpbnQgbmZzX2F0dHJpYnV0ZV90aW1lb3V0KHN0cnVjdCBpbm9kZSAqaW5vZGUpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ubDgwMjExLmggYi9pbmNsdWRlL2xpbnV4L25sODAyMTEuaAppbmRleCAwZWRiMjU2Li4yYjg5YjcxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25sODAyMTEuaAorKysgYi9pbmNsdWRlL2xpbnV4L25sODAyMTEuaApAQCAtMTcyLDEwICsxNzIsMTAgQEAKICAqIAl0byB0aGUgc3BlY2lmaWVkIElTTy9JRUMgMzE2Ni0xIGFscGhhMiBjb3VudHJ5IGNvZGUuIFRoZSBjb3JlIHdpbGwKICAqIAlzdG9yZSB0aGlzIGFzIGEgdmFsaWQgcmVxdWVzdCBhbmQgdGhlbiBxdWVyeSB1c2Vyc3BhY2UgZm9yIGl0LgogICoKLSAqIEBOTDgwMjExX0NNRF9HRVRfTUVTSF9QQVJBTVM6IEdldCBtZXNoIG5ldHdvcmtpbmcgcHJvcGVydGllcyBmb3IgdGhlCisgKiBATkw4MDIxMV9DTURfR0VUX01FU0hfQ09ORklHOiBHZXQgbWVzaCBuZXR3b3JraW5nIHByb3BlcnRpZXMgZm9yIHRoZQogICoJaW50ZXJmYWNlIGlkZW50aWZpZWQgYnkgJU5MODAyMTFfQVRUUl9JRklOREVYCiAgKgotICogQE5MODAyMTFfQ01EX1NFVF9NRVNIX1BBUkFNUzogU2V0IG1lc2ggbmV0d29ya2luZyBwcm9wZXJ0aWVzIGZvciB0aGUKKyAqIEBOTDgwMjExX0NNRF9TRVRfTUVTSF9DT05GSUc6IFNldCBtZXNoIG5ldHdvcmtpbmcgcHJvcGVydGllcyBmb3IgdGhlCiAgKiAgICAgIGludGVyZmFjZSBpZGVudGlmaWVkIGJ5ICVOTDgwMjExX0FUVFJfSUZJTkRFWAogICoKICAqIEBOTDgwMjExX0NNRF9TRVRfTUdNVF9FWFRSQV9JRTogU2V0IGV4dHJhIElFcyBmb3IgbWFuYWdlbWVudCBmcmFtZXMuIFRoZQpAQCAtMzU4LDExICszNTgsMTYgQEAKICAqCXVzZXIgc3BhY2UgYXBwbGljYXRpb24pLiAlTkw4MDIxMV9BVFRSX0ZSQU1FIGlzIHVzZWQgdG8gc3BlY2lmeSB0aGUKICAqCWZyYW1lIGNvbnRlbnRzIChpbmNsdWRpbmcgaGVhZGVyKS4gJU5MODAyMTFfQVRUUl9XSVBIWV9GUkVRIChhbmQKICAqCW9wdGlvbmFsbHkgJU5MODAyMTFfQVRUUl9XSVBIWV9DSEFOTkVMX1RZUEUpIGlzIHVzZWQgdG8gaW5kaWNhdGUgb24KLSAqCXdoaWNoIGNoYW5uZWwgdGhlIGZyYW1lIGlzIHRvIGJlIHRyYW5zbWl0dGVkIG9yIHdhcyByZWNlaXZlZC4gVGhpcwotICoJY2hhbm5lbCBoYXMgdG8gYmUgdGhlIGN1cnJlbnQgY2hhbm5lbCAocmVtYWluLW9uLWNoYW5uZWwgb3IgdGhlCi0gKglvcGVyYXRpb25hbCBjaGFubmVsKS4gV2hlbiBjYWxsZWQsIHRoaXMgb3BlcmF0aW9uIHJldHVybnMgYSBjb29raWUKLSAqCSglTkw4MDIxMV9BVFRSX0NPT0tJRSkgdGhhdCB3aWxsIGJlIGluY2x1ZGVkIHdpdGggdGhlIFRYIHN0YXR1cyBldmVudAotICoJcGVydGFpbmluZyB0byB0aGUgVFggcmVxdWVzdC4KKyAqCXdoaWNoIGNoYW5uZWwgdGhlIGZyYW1lIGlzIHRvIGJlIHRyYW5zbWl0dGVkIG9yIHdhcyByZWNlaXZlZC4gSWYgdGhpcworICoJY2hhbm5lbCBpcyBub3QgdGhlIGN1cnJlbnQgY2hhbm5lbCAocmVtYWluLW9uLWNoYW5uZWwgb3IgdGhlCisgKglvcGVyYXRpb25hbCBjaGFubmVsKSB0aGUgZGV2aWNlIHdpbGwgc3dpdGNoIHRvIHRoZSBnaXZlbiBjaGFubmVsIGFuZAorICoJdHJhbnNtaXQgdGhlIGZyYW1lLCBvcHRpb25hbGx5IHdhaXRpbmcgZm9yIGEgcmVzcG9uc2UgZm9yIHRoZSB0aW1lCisgKglzcGVjaWZpZWQgdXNpbmcgJU5MODAyMTFfQVRUUl9EVVJBVElPTi4gV2hlbiBjYWxsZWQsIHRoaXMgb3BlcmF0aW9uCisgKglyZXR1cm5zIGEgY29va2llICglTkw4MDIxMV9BVFRSX0NPT0tJRSkgdGhhdCB3aWxsIGJlIGluY2x1ZGVkIHdpdGggdGhlCisgKglUWCBzdGF0dXMgZXZlbnQgcGVydGFpbmluZyB0byB0aGUgVFggcmVxdWVzdC4KKyAqIEBOTDgwMjExX0NNRF9GUkFNRV9XQUlUX0NBTkNFTDogV2hlbiBhbiBvZmYtY2hhbm5lbCBUWCB3YXMgcmVxdWVzdGVkLCB0aGlzCisgKgljb21tYW5kIG1heSBiZSB1c2VkIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgY29va2llIHRvIGNhbmNlbCB0aGUgd2FpdAorICoJdGltZSBpZiBpdCBpcyBrbm93biB0aGF0IGl0IGlzIG5vIGxvbmdlciBuZWNlc3NhcnkuCiAgKiBATkw4MDIxMV9DTURfQUNUSU9OOiBBbGlhcyBmb3IgQE5MODAyMTFfQ01EX0ZSQU1FIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgogICogQE5MODAyMTFfQ01EX0ZSQU1FX1RYX1NUQVRVUzogUmVwb3J0IFRYIHN0YXR1cyBvZiBhIG1hbmFnZW1lbnQgZnJhbWUKICAqCXRyYW5zbWl0dGVkIHdpdGggJU5MODAyMTFfQ01EX0ZSQU1FLiAlTkw4MDIxMV9BVFRSX0NPT0tJRSBpZGVudGlmaWVzCkBAIC0zODksNiArMzk0LDE4IEBACiAgKgogICogQE5MODAyMTFfQ01EX1NFVF9XRFNfUEVFUjogU2V0IHRoZSBNQUMgYWRkcmVzcyBvZiB0aGUgcGVlciBvbiBhIFdEUyBpbnRlcmZhY2UuCiAgKgorICogQE5MODAyMTFfQ01EX0pPSU5fTUVTSDogSm9pbiBhIG1lc2guIFRoZSBtZXNoIElEIG11c3QgYmUgZ2l2ZW4sIGFuZCBpbml0aWFsCisgKgltZXNoIGNvbmZpZyBwYXJhbWV0ZXJzIG1heSBiZSBnaXZlbi4KKyAqIEBOTDgwMjExX0NNRF9MRUFWRV9NRVNIOiBMZWF2ZSB0aGUgbWVzaCBuZXR3b3JrIC0tIG5vIHNwZWNpYWwgYXJndW1lbnRzLCB0aGUKKyAqCW5ldHdvcmsgaXMgZGV0ZXJtaW5lZCBieSB0aGUgbmV0d29yayBpbnRlcmZhY2UuCisgKgorICogQE5MODAyMTFfQ01EX1VOUFJPVF9ERUFVVEhFTlRJQ0FURTogVW5wcm90ZWN0ZWQgZGVhdXRoZW50aWNhdGlvbiBmcmFtZQorICoJbm90aWZpY2F0aW9uLiBUaGlzIGV2ZW50IGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCBhbiB1bnByb3RlY3RlZAorICoJZGVhdXRoZW50aWNhdGlvbiBmcmFtZSB3YXMgZHJvcHBlZCB3aGVuIE1GUCBpcyBpbiB1c2UuCisgKiBATkw4MDIxMV9DTURfVU5QUk9UX0RJU0FTU09DSUFURTogVW5wcm90ZWN0ZWQgZGlzYXNzb2NpYXRpb24gZnJhbWUKKyAqCW5vdGlmaWNhdGlvbi4gVGhpcyBldmVudCBpcyB1c2VkIHRvIGluZGljYXRlIHRoYXQgYW4gdW5wcm90ZWN0ZWQKKyAqCWRpc2Fzc29jaWF0aW9uIGZyYW1lIHdhcyBkcm9wcGVkIHdoZW4gTUZQIGlzIGluIHVzZS4KKyAqCiAgKiBATkw4MDIxMV9DTURfTUFYOiBoaWdoZXN0IHVzZWQgY29tbWFuZCBudW1iZXIKICAqIEBfX05MODAyMTFfQ01EX0FGVEVSX0xBU1Q6IGludGVybmFsIHVzZQogICovCkBAIC00MzEsOCArNDQ4LDggQEAKIAlOTDgwMjExX0NNRF9TRVRfUkVHLAogCU5MODAyMTFfQ01EX1JFUV9TRVRfUkVHLAogCi0JTkw4MDIxMV9DTURfR0VUX01FU0hfUEFSQU1TLAotCU5MODAyMTFfQ01EX1NFVF9NRVNIX1BBUkFNUywKKwlOTDgwMjExX0NNRF9HRVRfTUVTSF9DT05GSUcsCisJTkw4MDIxMV9DTURfU0VUX01FU0hfQ09ORklHLAogCiAJTkw4MDIxMV9DTURfU0VUX01HTVRfRVhUUkFfSUUgLyogcmVzZXJ2ZWQ7IG5vdCB1c2VkICovLAogCkBAIC00OTMsNiArNTEwLDE0IEBACiAJTkw4MDIxMV9DTURfU0VUX0NIQU5ORUwsCiAJTkw4MDIxMV9DTURfU0VUX1dEU19QRUVSLAogCisJTkw4MDIxMV9DTURfRlJBTUVfV0FJVF9DQU5DRUwsCisKKwlOTDgwMjExX0NNRF9KT0lOX01FU0gsCisJTkw4MDIxMV9DTURfTEVBVkVfTUVTSCwKKworCU5MODAyMTFfQ01EX1VOUFJPVF9ERUFVVEhFTlRJQ0FURSwKKwlOTDgwMjExX0NNRF9VTlBST1RfRElTQVNTT0NJQVRFLAorCiAJLyogYWRkIG5ldyBjb21tYW5kcyBhYm92ZSBoZXJlICovCiAKIAkvKiB1c2VkIHRvIGRlZmluZSBOTDgwMjExX0NNRF9NQVggYmVsb3cgKi8KQEAgLTUxMyw2ICs1MzgsMTAgQEAKICNkZWZpbmUgTkw4MDIxMV9DTURfRElTQVNTT0NJQVRFIE5MODAyMTFfQ01EX0RJU0FTU09DSUFURQogI2RlZmluZSBOTDgwMjExX0NNRF9SRUdfQkVBQ09OX0hJTlQgTkw4MDIxMV9DTURfUkVHX0JFQUNPTl9ISU5UCiAKKy8qIHNvdXJjZS1sZXZlbCBBUEkgY29tcGF0aWJpbGl0eSAqLworI2RlZmluZSBOTDgwMjExX0NNRF9HRVRfTUVTSF9QQVJBTVMgTkw4MDIxMV9DTURfR0VUX01FU0hfQ09ORklHCisjZGVmaW5lIE5MODAyMTFfQ01EX1NFVF9NRVNIX1BBUkFNUyBOTDgwMjExX0NNRF9TRVRfTUVTSF9DT05GSUcKKwogLyoqCiAgKiBlbnVtIG5sODAyMTFfYXR0cnMgLSBubDgwMjExIG5ldGxpbmsgYXR0cmlidXRlcwogICoKQEAgLTc1OCw2ICs3ODcsOSBAQAogICoJY2FjaGUsIGEgd2lwaHkgYXR0cmlidXRlLgogICoKICAqIEBOTDgwMjExX0FUVFJfRFVSQVRJT046IER1cmF0aW9uIG9mIGFuIG9wZXJhdGlvbiBpbiBtaWxsaXNlY29uZHMsIHUzMi4KKyAqIEBOTDgwMjExX0FUVFJfTUFYX1JFTUFJTl9PTl9DSEFOTkVMX0RVUkFUSU9OOiBEZXZpY2UgYXR0cmlidXRlIHRoYXQKKyAqCXNwZWNpZmllcyB0aGUgbWF4aW11bSBkdXJhdGlvbiB0aGF0IGNhbiBiZSByZXF1ZXN0ZWQgd2l0aCB0aGUKKyAqCXJlbWFpbi1vbi1jaGFubmVsIG9wZXJhdGlvbiwgaW4gbWlsbGlzZWNvbmRzLCB1MzIuCiAgKgogICogQE5MODAyMTFfQVRUUl9DT09LSUU6IEdlbmVyaWMgNjQtYml0IGNvb2tpZSB0byBpZGVudGlmeSBvYmplY3RzLgogICoKQEAgLTgwNCw2ICs4MzYsNTEgQEAKICAqIEBOTDgwMjExX0FUVFJfU1VQUE9SVF9JQlNTX1JTTjogVGhlIGRldmljZSBzdXBwb3J0cyBJQlNTIFJTTiwgd2hpY2ggbW9zdGx5CiAgKgltZWFucyBzdXBwb3J0IGZvciBwZXItc3RhdGlvbiBHVEtzLgogICoKKyAqIEBOTDgwMjExX0FUVFJfV0lQSFlfQU5URU5OQV9UWDogQml0bWFwIG9mIGFsbG93ZWQgYW50ZW5uYXMgZm9yIHRyYW5zbWl0dGluZy4KKyAqCVRoaXMgY2FuIGJlIHVzZWQgdG8gbWFzayBvdXQgYW50ZW5uYXMgd2hpY2ggYXJlIG5vdCBhdHRhY2hlZCBvciBzaG91bGQKKyAqCW5vdCBiZSB1c2VkIGZvciB0cmFuc21pdHRpbmcuIElmIGFuIGFudGVubmEgaXMgbm90IHNlbGVjdGVkIGluIHRoaXMKKyAqCWJpdG1hcCB0aGUgaGFyZHdhcmUgaXMgbm90IGFsbG93ZWQgdG8gdHJhbnNtaXQgb24gdGhpcyBhbnRlbm5hLgorICoKKyAqCUVhY2ggYml0IHJlcHJlc2VudHMgb25lIGFudGVubmEsIHN0YXJ0aW5nIHdpdGggYW50ZW5uYSAxIGF0IHRoZSBmaXJzdAorICoJYml0LiBEZXBlbmRpbmcgb24gd2hpY2ggYW50ZW5uYXMgYXJlIHNlbGVjdGVkIGluIHRoZSBiaXRtYXAsIDgwMi4xMW4KKyAqCWRyaXZlcnMgY2FuIGRlcml2ZSB3aGljaCBjaGFpbm1hc2tzIHRvIHVzZSAoaWYgYWxsIGFudGVubmFzIGJlbG9uZ2luZyB0bworICoJYSBwYXJ0aWN1bGFyIGNoYWluIGFyZSBkaXNhYmxlZCB0aGlzIGNoYWluIHNob3VsZCBiZSBkaXNhYmxlZCkgYW5kIGlmCisgKglhIGNoYWluIGhhcyBkaXZlcnNpdHkgYW50ZW5uYXMgd2V0aGVyIGRpdmVyc2l0eSBzaG91bGQgYmUgdXNlZCBvciBub3QuCisgKglIVCBjYXBhYmlsaXRpZXMgKFNUQkMsIFRYIEJlYW1mb3JtaW5nLCBBbnRlbm5hIHNlbGVjdGlvbikgY2FuIGJlCisgKglkZXJpdmVkIGZyb20gdGhlIGF2YWlsYWJsZSBjaGFpbnMgYWZ0ZXIgYXBwbHlpbmcgdGhlIGFudGVubmEgbWFzay4KKyAqCU5vbi04MDIuMTFuIGRyaXZlcnMgY2FuIGRlcml2ZSB3ZXRoZXIgdG8gdXNlIGRpdmVyc2l0eSBvciBub3QuCisgKglEcml2ZXJzIG1heSByZWplY3QgY29uZmlndXJhdGlvbnMgb3IgUlgvVFggbWFzayBjb21iaW5hdGlvbnMgdGhleSBjYW5ub3QKKyAqCXN1cHBvcnQgYnkgcmV0dXJuaW5nIC1FSU5WQUwuCisgKgorICogQE5MODAyMTFfQVRUUl9XSVBIWV9BTlRFTk5BX1JYOiBCaXRtYXAgb2YgYWxsb3dlZCBhbnRlbm5hcyBmb3IgcmVjZWl2aW5nLgorICoJVGhpcyBjYW4gYmUgdXNlZCB0byBtYXNrIG91dCBhbnRlbm5hcyB3aGljaCBhcmUgbm90IGF0dGFjaGVkIG9yIHNob3VsZAorICoJbm90IGJlIHVzZWQgZm9yIHJlY2VpdmluZy4gSWYgYW4gYW50ZW5uYSBpcyBub3Qgc2VsZWN0ZWQgaW4gdGhpcyBiaXRtYXAKKyAqCXRoZSBoYXJkd2FyZSBzaG91bGQgbm90IGJlIGNvbmZpZ3VyZWQgdG8gcmVjZWl2ZSBvbiB0aGlzIGFudGVubmEuCisgKglGb3IgYSBtb3JlIGRldGFpbGVkIGRlc2NyaXB0b24gc2VlIEBOTDgwMjExX0FUVFJfV0lQSFlfQU5URU5OQV9UWC4KKyAqCisgKiBATkw4MDIxMV9BVFRSX1dJUEhZX0FOVEVOTkFfQVZBSUxfVFg6IEJpdG1hcCBvZiBhbnRlbm5hcyB3aGljaCBhcmUgYXZhaWxhYmxlCisgKglmb3IgY29uZmlndXJhdGlvbiBhcyBUWCBhbnRlbm5hcyB2aWEgdGhlIGFib3ZlIHBhcmFtZXRlcnMuCisgKgorICogQE5MODAyMTFfQVRUUl9XSVBIWV9BTlRFTk5BX0FWQUlMX1JYOiBCaXRtYXAgb2YgYW50ZW5uYXMgd2hpY2ggYXJlIGF2YWlsYWJsZQorICoJZm9yIGNvbmZpZ3VyYXRpb24gYXMgUlggYW50ZW5uYXMgdmlhIHRoZSBhYm92ZSBwYXJhbWV0ZXJzLgorICoKKyAqIEBOTDgwMjExX0FUVFJfTUNBU1RfUkFURTogTXVsdGljYXN0IHR4IHJhdGUgKGluIDEwMCBrYnBzKSBmb3IgSUJTUworICoKKyAqIEBOTDgwMjExX0FUVFJfT0ZGQ0hBTk5FTF9UWF9PSzogRm9yIG1hbmFnZW1lbnQgZnJhbWUgVFgsIHRoZSBmcmFtZSBtYXkgYmUKKyAqCXRyYW5zbWl0dGVkIG9uIGFub3RoZXIgY2hhbm5lbCB3aGVuIHRoZSBjaGFubmVsIGdpdmVuIGRvZXNuJ3QgbWF0Y2gKKyAqCXRoZSBjdXJyZW50IGNoYW5uZWwuIElmIHRoZSBjdXJyZW50IGNoYW5uZWwgZG9lc24ndCBtYXRjaCBhbmQgdGhpcworICoJZmxhZyBpc24ndCBzZXQsIHRoZSBmcmFtZSB3aWxsIGJlIHJlamVjdGVkLiBUaGlzIGlzIGFsc28gdXNlZCBhcyBhbgorICoJbmw4MDIxMSBjYXBhYmlsaXR5IGZsYWcuCisgKgorICogQE5MODAyMTFfQVRUUl9CU1NfSFRPUE1PREU6IEhUIG9wZXJhdGlvbiBtb2RlICh1MTYpCisgKgorICogQE5MODAyMTFfQVRUUl9LRVlfREVGQVVMVF9UWVBFUzogQSBuZXN0ZWQgYXR0cmlidXRlIGNvbnRhaW5pbmcgZmxhZ3MKKyAqCWF0dHJpYnV0ZXMsIHNwZWNpZnlpbmcgd2hhdCBhIGtleSBzaG91bGQgYmUgc2V0IGFzIGRlZmF1bHQgYXMuCisgKglTZWUgJmVudW0gbmw4MDIxMV9rZXlfZGVmYXVsdF90eXBlcy4KKyAqCisgKiBATkw4MDIxMV9BVFRSX01FU0hfU0VUVVA6IE9wdGlvbmFsIG1lc2ggc2V0dXAgcGFyYW1ldGVycy4gIFRoZXNlIGNhbm5vdCBiZQorICogY2hhbmdlZCBvbmNlIHRoZSBtZXNoIGlzIGFjdGl2ZS4KKyAqCiAgKiBATkw4MDIxMV9BVFRSX01BWDogaGlnaGVzdCBhdHRyaWJ1dGUgbnVtYmVyIGN1cnJlbnRseSBkZWZpbmVkCiAgKiBAX19OTDgwMjExX0FUVFJfQUZURVJfTEFTVDogaW50ZXJuYWwgdXNlCiAgKi8KQEAgLTg1OCw3ICs5MzUsNyBAQAogCU5MODAyMTFfQVRUUl9SRUdfQUxQSEEyLAogCU5MODAyMTFfQVRUUl9SRUdfUlVMRVMsCiAKLQlOTDgwMjExX0FUVFJfTUVTSF9QQVJBTVMsCisJTkw4MDIxMV9BVFRSX01FU0hfQ09ORklHLAogCiAJTkw4MDIxMV9BVFRSX0JTU19CQVNJQ19SQVRFUywKIApAQCAtOTczLDYgKzEwNTAsMjQgQEAKIAogCU5MODAyMTFfQVRUUl9TVVBQT1JUX0lCU1NfUlNOLAogCisJTkw4MDIxMV9BVFRSX1dJUEhZX0FOVEVOTkFfVFgsCisJTkw4MDIxMV9BVFRSX1dJUEhZX0FOVEVOTkFfUlgsCisKKwlOTDgwMjExX0FUVFJfTUNBU1RfUkFURSwKKworCU5MODAyMTFfQVRUUl9PRkZDSEFOTkVMX1RYX09LLAorCisJTkw4MDIxMV9BVFRSX0JTU19IVF9PUE1PREUsCisKKwlOTDgwMjExX0FUVFJfS0VZX0RFRkFVTFRfVFlQRVMsCisKKwlOTDgwMjExX0FUVFJfTUFYX1JFTUFJTl9PTl9DSEFOTkVMX0RVUkFUSU9OLAorCisJTkw4MDIxMV9BVFRSX01FU0hfU0VUVVAsCisKKwlOTDgwMjExX0FUVFJfV0lQSFlfQU5URU5OQV9BVkFJTF9UWCwKKwlOTDgwMjExX0FUVFJfV0lQSFlfQU5URU5OQV9BVkFJTF9SWCwKKwogCS8qIGFkZCBhdHRyaWJ1dGVzIGhlcmUsIHVwZGF0ZSB0aGUgcG9saWN5IGluIG5sODAyMTEuYyAqLwogCiAJX19OTDgwMjExX0FUVFJfQUZURVJfTEFTVCwKQEAgLTk4MSw2ICsxMDc2LDcgQEAKIAogLyogc291cmNlLWxldmVsIEFQSSBjb21wYXRpYmlsaXR5ICovCiAjZGVmaW5lIE5MODAyMTFfQVRUUl9TQ0FOX0dFTkVSQVRJT04gTkw4MDIxMV9BVFRSX0dFTkVSQVRJT04KKyNkZWZpbmUJTkw4MDIxMV9BVFRSX01FU0hfUEFSQU1TIE5MODAyMTFfQVRUUl9NRVNIX0NPTkZJRwogCiAvKgogICogQWxsb3cgdXNlciBzcGFjZSBwcm9ncmFtcyB0byB1c2UgI2lmZGVmIG9uIG5ldyBhdHRyaWJ1dGVzIGJ5IGRlZmluaW5nIHRoZW0KQEAgLTExMzksNiArMTIzNSw3IEBACiAgKglzdGF0aW9uKQogICogQE5MODAyMTFfU1RBX0lORk9fVFhfUkVUUklFUzogdG90YWwgcmV0cmllcyAodTMyLCB0byB0aGlzIHN0YXRpb24pCiAgKiBATkw4MDIxMV9TVEFfSU5GT19UWF9GQUlMRUQ6IHRvdGFsIGZhaWxlZCBwYWNrZXRzICh1MzIsIHRvIHRoaXMgc3RhdGlvbikKKyAqIEBOTDgwMjExX1NUQV9JTkZPX1NJR05BTF9BVkc6IHNpZ25hbCBzdHJlbmd0aCBhdmVyYWdlICh1OCwgZEJtKQogICovCiBlbnVtIG5sODAyMTFfc3RhX2luZm8gewogCV9fTkw4MDIxMV9TVEFfSU5GT19JTlZBTElELApAQCAtMTE1NCw2ICsxMjUxLDcgQEAKIAlOTDgwMjExX1NUQV9JTkZPX1RYX1BBQ0tFVFMsCiAJTkw4MDIxMV9TVEFfSU5GT19UWF9SRVRSSUVTLAogCU5MODAyMTFfU1RBX0lORk9fVFhfRkFJTEVELAorCU5MODAyMTFfU1RBX0lORk9fU0lHTkFMX0FWRywKIAogCS8qIGtlZXAgbGFzdCAqLwogCV9fTkw4MDIxMV9TVEFfSU5GT19BRlRFUl9MQVNULApAQCAtMTMwNyw3ICsxNDA1LDExIEBACiAgKiAJd2lyZWxlc3MgY29yZSBpdCB0aGlua3MgaXRzIGtub3dzIHRoZSByZWd1bGF0b3J5IGRvbWFpbiB3ZSBzaG91bGQgYmUgaW4uCiAgKiBATkw4MDIxMV9SRUdET01fU0VUX0JZX0NPVU5UUllfSUU6IHRoZSB3aXJlbGVzcyBjb3JlIGhhcyByZWNlaXZlZCBhbgogICogCTgwMi4xMSBjb3VudHJ5IGluZm9ybWF0aW9uIGVsZW1lbnQgd2l0aCByZWd1bGF0b3J5IGluZm9ybWF0aW9uIGl0Ci0gKiAJdGhpbmtzIHdlIHNob3VsZCBjb25zaWRlci4KKyAqIAl0aGlua3Mgd2Ugc2hvdWxkIGNvbnNpZGVyLiBjZmc4MDIxMSBvbmx5IHByb2Nlc3NlcyB0aGUgY291bnRyeQorICoJY29kZSBmcm9tIHRoZSBJRSwgYW5kIHJlbGllcyBvbiB0aGUgcmVndWxhdG9yeSBkb21haW4gaW5mb3JtYXRpb24KKyAqCXN0cnVjdHVyZSBwYXNlZCBieSB1c2Vyc3BhY2UgKENSREEpIGZyb20gb3VyIHdpcmVsZXNzLXJlZ2RiLgorICoJSWYgYSBjaGFubmVsIGlzIGVuYWJsZWQgYnV0IHRoZSBjb3VudHJ5IGNvZGUgaW5kaWNhdGVzIGl0IHNob3VsZAorICoJYmUgZGlzYWJsZWQgd2UgZGlzYWJsZSB0aGUgY2hhbm5lbCBhbmQgcmUtZW5hYmxlIGl0IHVwb24gZGlzYXNzb2NpYXRpb24uCiAgKi8KIGVudW0gbmw4MDIxMV9yZWdfaW5pdGlhdG9yIHsKIAlOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09SRSwKQEAgLTE0NzYsNyArMTU3OCw4IEBACiAvKioKICAqIGVudW0gbmw4MDIxMV9tZXNoY29uZl9wYXJhbXMgLSBtZXNoIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycwogICoKLSAqIE1lc2ggY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzCisgKiBNZXNoIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4gVGhlc2UgY2FuIGJlIGNoYW5nZWQgd2hpbGUgdGhlIG1lc2ggaXMKKyAqIGFjdGl2ZS4KICAqCiAgKiBAX19OTDgwMjExX01FU0hDT05GX0lOVkFMSUQ6IGludGVybmFsIHVzZQogICoKQEAgLTE1MjUsNiArMTYyOCw5IEBACiAgKgogICogQE5MODAyMTFfTUVTSENPTkZfUk9PVE1PREU6IHdoZXRoZXIgcm9vdCBtb2RlIGlzIGVuYWJsZWQgb3Igbm90CiAgKgorICogQE5MODAyMTFfTUVTSENPTkZfRUxFTUVOVF9UVEw6IHNwZWNpZmllcyB0aGUgdmFsdWUgb2YgVFRMIGZpZWxkIHNldCBhdCBhCisgKiBzb3VyY2UgbWVzaCBwb2ludCBmb3IgcGF0aCBzZWxlY3Rpb24gZWxlbWVudHMuCisgKgogICogQE5MODAyMTFfTUVTSENPTkZfQVRUUl9NQVg6IGhpZ2hlc3QgcG9zc2libGUgbWVzaCBjb25maWd1cmF0aW9uIGF0dHJpYnV0ZQogICoKICAqIEBfX05MODAyMTFfTUVTSENPTkZfQVRUUl9BRlRFUl9MQVNUOiBpbnRlcm5hbCB1c2UKQEAgLTE1NDUsNiArMTY1MSw3IEBACiAJTkw4MDIxMV9NRVNIQ09ORl9IV01QX1BSRVFfTUlOX0lOVEVSVkFMLAogCU5MODAyMTFfTUVTSENPTkZfSFdNUF9ORVRfRElBTV9UUlZTX1RJTUUsCiAJTkw4MDIxMV9NRVNIQ09ORl9IV01QX1JPT1RNT0RFLAorCU5MODAyMTFfTUVTSENPTkZfRUxFTUVOVF9UVEwsCiAKIAkvKiBrZWVwIGxhc3QgKi8KIAlfX05MODAyMTFfTUVTSENPTkZfQVRUUl9BRlRFUl9MQVNULApAQCAtMTU1Miw2ICsxNjU5LDM5IEBACiB9OwogCiAvKioKKyAqIGVudW0gbmw4MDIxMV9tZXNoX3NldHVwX3BhcmFtcyAtIG1lc2ggc2V0dXAgcGFyYW1ldGVycworICoKKyAqIE1lc2ggc2V0dXAgcGFyYW1ldGVycy4gIFRoZXNlIGFyZSB1c2VkIHRvIHN0YXJ0L2pvaW4gYSBtZXNoIGFuZCBjYW5ub3QgYmUKKyAqIGNoYW5nZWQgd2hpbGUgdGhlIG1lc2ggaXMgYWN0aXZlLgorICoKKyAqIEBfX05MODAyMTFfTUVTSF9TRVRVUF9JTlZBTElEOiBJbnRlcm5hbCB1c2UKKyAqCisgKiBATkw4MDIxMV9NRVNIX1NFVFVQX0VOQUJMRV9WRU5ET1JfUEFUSF9TRUw6IEVuYWJsZSB0aGlzIG9wdGlvbiB0byB1c2UgYQorICogdmVuZG9yIHNwZWNpZmljIHBhdGggc2VsZWN0aW9uIGFsZ29yaXRobSBvciBkaXNhYmxlIGl0IHRvIHVzZSB0aGUgZGVmYXVsdAorICogSFdNUC4KKyAqCisgKiBATkw4MDIxMV9NRVNIX1NFVFVQX0VOQUJMRV9WRU5ET1JfTUVUUklDOiBFbmFibGUgdGhpcyBvcHRpb24gdG8gdXNlIGEKKyAqIHZlbmRvciBzcGVjaWZpYyBwYXRoIG1ldHJpYyBvciBkaXNhYmxlIGl0IHRvIHVzZSB0aGUgZGVmYXVsdCBBaXJ0aW1lCisgKiBtZXRyaWMuCisgKgorICogQE5MODAyMTFfTUVTSF9TRVRVUF9WRU5ET1JfUEFUSF9TRUxfSUU6IEEgdmVuZG9yIHNwZWNpZmljIGluZm9ybWF0aW9uCisgKiBlbGVtZW50IHRoYXQgdmVuZG9ycyB3aWxsIHVzZSB0byBpZGVudGlmeSB0aGUgcGF0aCBzZWxlY3Rpb24gbWV0aG9kcyBhbmQKKyAqIG1ldHJpY3MgaW4gdXNlLgorICoKKyAqIEBfX05MODAyMTFfTUVTSF9TRVRVUF9BVFRSX0FGVEVSX0xBU1Q6IEludGVybmFsIHVzZQorICovCitlbnVtIG5sODAyMTFfbWVzaF9zZXR1cF9wYXJhbXMgeworCV9fTkw4MDIxMV9NRVNIX1NFVFVQX0lOVkFMSUQsCisJTkw4MDIxMV9NRVNIX1NFVFVQX0VOQUJMRV9WRU5ET1JfUEFUSF9TRUwsCisJTkw4MDIxMV9NRVNIX1NFVFVQX0VOQUJMRV9WRU5ET1JfTUVUUklDLAorCU5MODAyMTFfTUVTSF9TRVRVUF9WRU5ET1JfUEFUSF9TRUxfSUUsCisKKwkvKiBrZWVwIGxhc3QgKi8KKwlfX05MODAyMTFfTUVTSF9TRVRVUF9BVFRSX0FGVEVSX0xBU1QsCisJTkw4MDIxMV9NRVNIX1NFVFVQX0FUVFJfTUFYID0gX19OTDgwMjExX01FU0hfU0VUVVBfQVRUUl9BRlRFUl9MQVNUIC0gMQorfTsKKworLyoqCiAgKiBlbnVtIG5sODAyMTFfdHhxX2F0dHIgLSBUWCBxdWV1ZSBwYXJhbWV0ZXIgYXR0cmlidXRlcwogICogQF9fTkw4MDIxMV9UWFFfQVRUUl9JTlZBTElEOiBBdHRyaWJ1dGUgbnVtYmVyIDAgaXMgcmVzZXJ2ZWQKICAqIEBOTDgwMjExX1RYUV9BVFRSX1FVRVVFOiBUWCBxdWV1ZSBpZGVudGlmaWVyIChOTDgwMjExX1RYUV9RXyopCkBAIC0xNzA5LDYgKzE4NDksMjMgQEAKIH07CiAKIC8qKgorICogZW51bSBubDgwMjExX2tleV9kZWZhdWx0X3R5cGVzIC0ga2V5IGRlZmF1bHQgdHlwZXMKKyAqIEBfX05MODAyMTFfS0VZX0RFRkFVTFRfVFlQRV9JTlZBTElEOiBpbnZhbGlkCisgKiBATkw4MDIxMV9LRVlfREVGQVVMVF9UWVBFX1VOSUNBU1Q6IGtleSBzaG91bGQgYmUgdXNlZCBhcyBkZWZhdWx0CisgKgl1bmljYXN0IGtleQorICogQE5MODAyMTFfS0VZX0RFRkFVTFRfVFlQRV9NVUxUSUNBU1Q6IGtleSBzaG91bGQgYmUgdXNlZCBhcyBkZWZhdWx0CisgKgltdWx0aWNhc3Qga2V5CisgKiBATlVNX05MODAyMTFfS0VZX0RFRkFVTFRfVFlQRVM6IG51bWJlciBvZiBkZWZhdWx0IHR5cGVzCisgKi8KK2VudW0gbmw4MDIxMV9rZXlfZGVmYXVsdF90eXBlcyB7CisJX19OTDgwMjExX0tFWV9ERUZBVUxUX1RZUEVfSU5WQUxJRCwKKwlOTDgwMjExX0tFWV9ERUZBVUxUX1RZUEVfVU5JQ0FTVCwKKwlOTDgwMjExX0tFWV9ERUZBVUxUX1RZUEVfTVVMVElDQVNULAorCisJTlVNX05MODAyMTFfS0VZX0RFRkFVTFRfVFlQRVMKK307CisKKy8qKgogICogZW51bSBubDgwMjExX2tleV9hdHRyaWJ1dGVzIC0ga2V5IGF0dHJpYnV0ZXMKICAqIEBfX05MODAyMTFfS0VZX0lOVkFMSUQ6IGludmFsaWQKICAqIEBOTDgwMjExX0tFWV9EQVRBOiAodGVtcG9yYWwpIGtleSBkYXRhOyBmb3IgVEtJUCB0aGlzIGNvbnNpc3RzIG9mCkBAIC0xNzI0LDYgKzE4ODEsOSBAQAogICogQE5MODAyMTFfS0VZX1RZUEU6IHRoZSBrZXkgdHlwZSBmcm9tIGVudW0gbmw4MDIxMV9rZXlfdHlwZSwgaWYgbm90CiAgKglzcGVjaWZpZWQgdGhlIGRlZmF1bHQgZGVwZW5kcyBvbiB3aGV0aGVyIGEgTUFDIGFkZHJlc3Mgd2FzCiAgKglnaXZlbiB3aXRoIHRoZSBjb21tYW5kIHVzaW5nIHRoZSBrZXkgb3Igbm90ICh1MzIpCisgKiBATkw4MDIxMV9LRVlfREVGQVVMVF9UWVBFUzogQSBuZXN0ZWQgYXR0cmlidXRlIGNvbnRhaW5pbmcgZmxhZ3MKKyAqCWF0dHJpYnV0ZXMsIHNwZWNpZnlpbmcgd2hhdCBhIGtleSBzaG91bGQgYmUgc2V0IGFzIGRlZmF1bHQgYXMuCisgKglTZWUgJmVudW0gbmw4MDIxMV9rZXlfZGVmYXVsdF90eXBlcy4KICAqIEBfX05MODAyMTFfS0VZX0FGVEVSX0xBU1Q6IGludGVybmFsCiAgKiBATkw4MDIxMV9LRVlfTUFYOiBoaWdoZXN0IGtleSBhdHRyaWJ1dGUKICAqLwpAQCAtMTczNiw2ICsxODk2LDcgQEAKIAlOTDgwMjExX0tFWV9ERUZBVUxULAogCU5MODAyMTFfS0VZX0RFRkFVTFRfTUdNVCwKIAlOTDgwMjExX0tFWV9UWVBFLAorCU5MODAyMTFfS0VZX0RFRkFVTFRfVFlQRVMsCiAKIAkvKiBrZWVwIGxhc3QgKi8KIAlfX05MODAyMTFfS0VZX0FGVEVSX0xBU1QsCkBAIC0xNzg2LDYgKzE5NDcsOCBAQAogICoJdGhlIG1pbmltdW0gYW1vdW50IHRoZSBSU1NJIGxldmVsIG11c3QgY2hhbmdlIGFmdGVyIGFuIGV2ZW50IGJlZm9yZSBhCiAgKgluZXcgZXZlbnQgbWF5IGJlIGlzc3VlZCAodG8gcmVkdWNlIGVmZmVjdHMgb2YgUlNTSSBvc2NpbGxhdGlvbikuCiAgKiBATkw4MDIxMV9BVFRSX0NRTV9SU1NJX1RIUkVTSE9MRF9FVkVOVDogUlNTSSB0aHJlc2hvbGQgZXZlbnQKKyAqIEBOTDgwMjExX0FUVFJfQ1FNX1BLVF9MT1NTX0VWRU5UOiBhIHUzMiB2YWx1ZSBpbmRpY2F0aW5nIHRoYXQgdGhpcyBtYW55CisgKgljb25zZWN1dGl2ZSBwYWNrZXRzIHdlcmUgbm90IGFja25vd2xlZGdlZCBieSB0aGUgcGVlcgogICogQF9fTkw4MDIxMV9BVFRSX0NRTV9BRlRFUl9MQVNUOiBpbnRlcm5hbAogICogQE5MODAyMTFfQVRUUl9DUU1fTUFYOiBoaWdoZXN0IGtleSBhdHRyaWJ1dGUKICAqLwpAQCAtMTc5NCw2ICsxOTU3LDcgQEAKIAlOTDgwMjExX0FUVFJfQ1FNX1JTU0lfVEhPTEQsCiAJTkw4MDIxMV9BVFRSX0NRTV9SU1NJX0hZU1QsCiAJTkw4MDIxMV9BVFRSX0NRTV9SU1NJX1RIUkVTSE9MRF9FVkVOVCwKKwlOTDgwMjExX0FUVFJfQ1FNX1BLVF9MT1NTX0VWRU5ULAogCiAJLyoga2VlcCBsYXN0ICovCiAJX19OTDgwMjExX0FUVFJfQ1FNX0FGVEVSX0xBU1QsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25taS5oIGIvaW5jbHVkZS9saW51eC9ubWkuaAppbmRleCAwNmFhYjVlLi5jNTM2Zjg1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25taS5oCisrKyBiL2luY2x1ZGUvbGludXgvbm1pLmgKQEAgLTE0LDIyICsxNCwxNCBAQAogICogbWF5IGJlIHVzZWQgdG8gcmVzZXQgdGhlIHRpbWVvdXQgLSBmb3IgY29kZSB3aGljaCBpbnRlbnRpb25hbGx5CiAgKiBkaXNhYmxlcyBpbnRlcnJ1cHRzIGZvciBhIGxvbmcgdGltZS4gVGhpcyBjYWxsIGlzIHN0YXRlbGVzcy4KICAqLwotI2lmZGVmIEFSQ0hfSEFTX05NSV9XQVRDSERPRworI2lmIGRlZmluZWQoQVJDSF9IQVNfTk1JX1dBVENIRE9HKSB8fCBkZWZpbmVkKENPTkZJR19IQVJETE9DS1VQX0RFVEVDVE9SKQogI2luY2x1ZGUgPGFzbS9ubWkuaD4KIGV4dGVybiB2b2lkIHRvdWNoX25taV93YXRjaGRvZyh2b2lkKTsKLWV4dGVybiB2b2lkIGFjcGlfbm1pX2Rpc2FibGUodm9pZCk7Ci1leHRlcm4gdm9pZCBhY3BpX25taV9lbmFibGUodm9pZCk7CiAjZWxzZQotI2lmbmRlZiBDT05GSUdfSEFSRExPQ0tVUF9ERVRFQ1RPUgogc3RhdGljIGlubGluZSB2b2lkIHRvdWNoX25taV93YXRjaGRvZyh2b2lkKQogewogCXRvdWNoX3NvZnRsb2NrdXBfd2F0Y2hkb2coKTsKIH0KLSNlbHNlCi1leHRlcm4gdm9pZCB0b3VjaF9ubWlfd2F0Y2hkb2codm9pZCk7Ci0jZW5kaWYKLXN0YXRpYyBpbmxpbmUgdm9pZCBhY3BpX25taV9kaXNhYmxlKHZvaWQpIHsgfQotc3RhdGljIGlubGluZSB2b2lkIGFjcGlfbm1pX2VuYWJsZSh2b2lkKSB7IH0KICNlbmRpZgogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYXRoLmggYi9pbmNsdWRlL2xpbnV4L3BhdGguaAppbmRleCBlZGM5OGRlLi5hNTgxZThjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BhdGguaAorKysgYi9pbmNsdWRlL2xpbnV4L3BhdGguaApAQCAtMTAsNyArMTAsOSBAQAogfTsKIAogZXh0ZXJuIHZvaWQgcGF0aF9nZXQoc3RydWN0IHBhdGggKik7CitleHRlcm4gdm9pZCBwYXRoX2dldF9sb25nKHN0cnVjdCBwYXRoICopOwogZXh0ZXJuIHZvaWQgcGF0aF9wdXQoc3RydWN0IHBhdGggKik7CitleHRlcm4gdm9pZCBwYXRoX3B1dF9sb25nKHN0cnVjdCBwYXRoICopOwogCiBzdGF0aWMgaW5saW5lIGludCBwYXRoX2VxdWFsKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoMSwgY29uc3Qgc3RydWN0IHBhdGggKnBhdGgyKQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZXJjcHUuaCBiL2luY2x1ZGUvbGludXgvcGVyY3B1LmgKaW5kZXggNTA5NWI4My4uMjdjM2M2ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wZXJjcHUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BlcmNwdS5oCkBAIC0yNDAsNiArMjQwLDIxIEBACiAJcHNjcl9yZXRfXzsJCQkJCQkJXAogfSkKIAorI2RlZmluZSBfX3BjcHVfc2l6ZV9jYWxsX3JldHVybjIoc3RlbSwgdmFyaWFibGUsIC4uLikJCQlcCisoewkJCQkJCQkJCVwKKwl0eXBlb2YodmFyaWFibGUpIHBzY3IyX3JldF9fOwkJCQkJXAorCV9fdmVyaWZ5X3BjcHVfcHRyKCYodmFyaWFibGUpKTsJCQkJCVwKKwlzd2l0Y2goc2l6ZW9mKHZhcmlhYmxlKSkgewkJCQkJXAorCWNhc2UgMTogcHNjcjJfcmV0X18gPSBzdGVtIyMxKHZhcmlhYmxlLCBfX1ZBX0FSR1NfXyk7IGJyZWFrOwlcCisJY2FzZSAyOiBwc2NyMl9yZXRfXyA9IHN0ZW0jIzIodmFyaWFibGUsIF9fVkFfQVJHU19fKTsgYnJlYWs7CVwKKwljYXNlIDQ6IHBzY3IyX3JldF9fID0gc3RlbSMjNCh2YXJpYWJsZSwgX19WQV9BUkdTX18pOyBicmVhazsJXAorCWNhc2UgODogcHNjcjJfcmV0X18gPSBzdGVtIyM4KHZhcmlhYmxlLCBfX1ZBX0FSR1NfXyk7IGJyZWFrOwlcCisJZGVmYXVsdDoJCQkJCQkJXAorCQlfX2JhZF9zaXplX2NhbGxfcGFyYW1ldGVyKCk7IGJyZWFrOwkJCVwKKwl9CQkJCQkJCQlcCisJcHNjcjJfcmV0X187CQkJCQkJCVwKK30pCisKICNkZWZpbmUgX19wY3B1X3NpemVfY2FsbChzdGVtLCB2YXJpYWJsZSwgLi4uKQkJCQlcCiBkbyB7CQkJCQkJCQkJXAogCV9fdmVyaWZ5X3BjcHVfcHRyKCYodmFyaWFibGUpKTsJCQkJCVwKQEAgLTQwMiw2ICs0MTcsODkgQEAKICMgZGVmaW5lIHRoaXNfY3B1X3hvcihwY3AsIHZhbCkJCV9fcGNwdV9zaXplX2NhbGwodGhpc19jcHVfb3JfLCAocGNwKSwgKHZhbCkpCiAjZW5kaWYKIAorI2RlZmluZSBfdGhpc19jcHVfZ2VuZXJpY19hZGRfcmV0dXJuKHBjcCwgdmFsKQkJCQlcCisoewkJCQkJCQkJCVwKKwl0eXBlb2YocGNwKSByZXRfXzsJCQkJCQlcCisJcHJlZW1wdF9kaXNhYmxlKCk7CQkJCQkJXAorCV9fdGhpc19jcHVfYWRkKHBjcCwgdmFsKTsJCQkJCVwKKwlyZXRfXyA9IF9fdGhpc19jcHVfcmVhZChwY3ApOwkJCQkJXAorCXByZWVtcHRfZW5hYmxlKCk7CQkJCQkJXAorCXJldF9fOwkJCQkJCQkJXAorfSkKKworI2lmbmRlZiB0aGlzX2NwdV9hZGRfcmV0dXJuCisjIGlmbmRlZiB0aGlzX2NwdV9hZGRfcmV0dXJuXzEKKyMgIGRlZmluZSB0aGlzX2NwdV9hZGRfcmV0dXJuXzEocGNwLCB2YWwpCV90aGlzX2NwdV9nZW5lcmljX2FkZF9yZXR1cm4ocGNwLCB2YWwpCisjIGVuZGlmCisjIGlmbmRlZiB0aGlzX2NwdV9hZGRfcmV0dXJuXzIKKyMgIGRlZmluZSB0aGlzX2NwdV9hZGRfcmV0dXJuXzIocGNwLCB2YWwpCV90aGlzX2NwdV9nZW5lcmljX2FkZF9yZXR1cm4ocGNwLCB2YWwpCisjIGVuZGlmCisjIGlmbmRlZiB0aGlzX2NwdV9hZGRfcmV0dXJuXzQKKyMgIGRlZmluZSB0aGlzX2NwdV9hZGRfcmV0dXJuXzQocGNwLCB2YWwpCV90aGlzX2NwdV9nZW5lcmljX2FkZF9yZXR1cm4ocGNwLCB2YWwpCisjIGVuZGlmCisjIGlmbmRlZiB0aGlzX2NwdV9hZGRfcmV0dXJuXzgKKyMgIGRlZmluZSB0aGlzX2NwdV9hZGRfcmV0dXJuXzgocGNwLCB2YWwpCV90aGlzX2NwdV9nZW5lcmljX2FkZF9yZXR1cm4ocGNwLCB2YWwpCisjIGVuZGlmCisjIGRlZmluZSB0aGlzX2NwdV9hZGRfcmV0dXJuKHBjcCwgdmFsKQlfX3BjcHVfc2l6ZV9jYWxsX3JldHVybjIodGhpc19jcHVfYWRkX3JldHVybl8sIHBjcCwgdmFsKQorI2VuZGlmCisKKyNkZWZpbmUgdGhpc19jcHVfc3ViX3JldHVybihwY3AsIHZhbCkJdGhpc19jcHVfYWRkX3JldHVybihwY3AsIC0odmFsKSkKKyNkZWZpbmUgdGhpc19jcHVfaW5jX3JldHVybihwY3ApCXRoaXNfY3B1X2FkZF9yZXR1cm4ocGNwLCAxKQorI2RlZmluZSB0aGlzX2NwdV9kZWNfcmV0dXJuKHBjcCkJdGhpc19jcHVfYWRkX3JldHVybihwY3AsIC0xKQorCisjZGVmaW5lIF90aGlzX2NwdV9nZW5lcmljX3hjaGcocGNwLCBudmFsKQkJCQlcCisoewl0eXBlb2YocGNwKSByZXRfXzsJCQkJCQlcCisJcHJlZW1wdF9kaXNhYmxlKCk7CQkJCQkJXAorCXJldF9fID0gX190aGlzX2NwdV9yZWFkKHBjcCk7CQkJCQlcCisJX190aGlzX2NwdV93cml0ZShwY3AsIG52YWwpOwkJCQkJXAorCXByZWVtcHRfZW5hYmxlKCk7CQkJCQkJXAorCXJldF9fOwkJCQkJCQkJXAorfSkKKworI2lmbmRlZiB0aGlzX2NwdV94Y2hnCisjIGlmbmRlZiB0aGlzX2NwdV94Y2hnXzEKKyMgIGRlZmluZSB0aGlzX2NwdV94Y2hnXzEocGNwLCBudmFsKQlfdGhpc19jcHVfZ2VuZXJpY194Y2hnKHBjcCwgbnZhbCkKKyMgZW5kaWYKKyMgaWZuZGVmIHRoaXNfY3B1X3hjaGdfMgorIyAgZGVmaW5lIHRoaXNfY3B1X3hjaGdfMihwY3AsIG52YWwpCV90aGlzX2NwdV9nZW5lcmljX3hjaGcocGNwLCBudmFsKQorIyBlbmRpZgorIyBpZm5kZWYgdGhpc19jcHVfeGNoZ180CisjICBkZWZpbmUgdGhpc19jcHVfeGNoZ180KHBjcCwgbnZhbCkJX3RoaXNfY3B1X2dlbmVyaWNfeGNoZyhwY3AsIG52YWwpCisjIGVuZGlmCisjIGlmbmRlZiB0aGlzX2NwdV94Y2hnXzgKKyMgIGRlZmluZSB0aGlzX2NwdV94Y2hnXzgocGNwLCBudmFsKQlfdGhpc19jcHVfZ2VuZXJpY194Y2hnKHBjcCwgbnZhbCkKKyMgZW5kaWYKKyMgZGVmaW5lIHRoaXNfY3B1X3hjaGcocGNwLCBudmFsKQlcCisJX19wY3B1X3NpemVfY2FsbF9yZXR1cm4yKHRoaXNfY3B1X3hjaGdfLCAocGNwKSwgbnZhbCkKKyNlbmRpZgorCisjZGVmaW5lIF90aGlzX2NwdV9nZW5lcmljX2NtcHhjaGcocGNwLCBvdmFsLCBudmFsKQkJCVwKKyh7CXR5cGVvZihwY3ApIHJldF9fOwkJCQkJCVwKKwlwcmVlbXB0X2Rpc2FibGUoKTsJCQkJCQlcCisJcmV0X18gPSBfX3RoaXNfY3B1X3JlYWQocGNwKTsJCQkJCVwKKwlpZiAocmV0X18gPT0gKG92YWwpKQkJCQkJCVwKKwkJX190aGlzX2NwdV93cml0ZShwY3AsIG52YWwpOwkJCQlcCisJcHJlZW1wdF9lbmFibGUoKTsJCQkJCQlcCisJcmV0X187CQkJCQkJCQlcCit9KQorCisjaWZuZGVmIHRoaXNfY3B1X2NtcHhjaGcKKyMgaWZuZGVmIHRoaXNfY3B1X2NtcHhjaGdfMQorIyAgZGVmaW5lIHRoaXNfY3B1X2NtcHhjaGdfMShwY3AsIG92YWwsIG52YWwpCV90aGlzX2NwdV9nZW5lcmljX2NtcHhjaGcocGNwLCBvdmFsLCBudmFsKQorIyBlbmRpZgorIyBpZm5kZWYgdGhpc19jcHVfY21weGNoZ18yCisjICBkZWZpbmUgdGhpc19jcHVfY21weGNoZ18yKHBjcCwgb3ZhbCwgbnZhbCkJX3RoaXNfY3B1X2dlbmVyaWNfY21weGNoZyhwY3AsIG92YWwsIG52YWwpCisjIGVuZGlmCisjIGlmbmRlZiB0aGlzX2NwdV9jbXB4Y2hnXzQKKyMgIGRlZmluZSB0aGlzX2NwdV9jbXB4Y2hnXzQocGNwLCBvdmFsLCBudmFsKQlfdGhpc19jcHVfZ2VuZXJpY19jbXB4Y2hnKHBjcCwgb3ZhbCwgbnZhbCkKKyMgZW5kaWYKKyMgaWZuZGVmIHRoaXNfY3B1X2NtcHhjaGdfOAorIyAgZGVmaW5lIHRoaXNfY3B1X2NtcHhjaGdfOChwY3AsIG92YWwsIG52YWwpCV90aGlzX2NwdV9nZW5lcmljX2NtcHhjaGcocGNwLCBvdmFsLCBudmFsKQorIyBlbmRpZgorIyBkZWZpbmUgdGhpc19jcHVfY21weGNoZyhwY3AsIG92YWwsIG52YWwpCVwKKwlfX3BjcHVfc2l6ZV9jYWxsX3JldHVybjIodGhpc19jcHVfY21weGNoZ18sIHBjcCwgb3ZhbCwgbnZhbCkKKyNlbmRpZgorCiAvKgogICogR2VuZXJpYyBwZXJjcHUgb3BlcmF0aW9ucyB0aGF0IGRvIG5vdCByZXF1aXJlIHByZWVtcHRpb24gaGFuZGxpbmcuCiAgKiBFaXRoZXIgd2UgZG8gbm90IGNhcmUgYWJvdXQgcmFjZXMgb3IgdGhlIGNhbGxlciBoYXMgdGhlCkBAIC01MjksMTEgKzYyNyw4NyBAQAogIyBkZWZpbmUgX190aGlzX2NwdV94b3IocGNwLCB2YWwpCV9fcGNwdV9zaXplX2NhbGwoX190aGlzX2NwdV94b3JfLCAocGNwKSwgKHZhbCkpCiAjZW5kaWYKIAorI2RlZmluZSBfX3RoaXNfY3B1X2dlbmVyaWNfYWRkX3JldHVybihwY3AsIHZhbCkJCQkJXAorKHsJCQkJCQkJCQlcCisJX190aGlzX2NwdV9hZGQocGNwLCB2YWwpOwkJCQkJXAorCV9fdGhpc19jcHVfcmVhZChwY3ApOwkJCQkJCVwKK30pCisKKyNpZm5kZWYgX190aGlzX2NwdV9hZGRfcmV0dXJuCisjIGlmbmRlZiBfX3RoaXNfY3B1X2FkZF9yZXR1cm5fMQorIyAgZGVmaW5lIF9fdGhpc19jcHVfYWRkX3JldHVybl8xKHBjcCwgdmFsKQlfX3RoaXNfY3B1X2dlbmVyaWNfYWRkX3JldHVybihwY3AsIHZhbCkKKyMgZW5kaWYKKyMgaWZuZGVmIF9fdGhpc19jcHVfYWRkX3JldHVybl8yCisjICBkZWZpbmUgX190aGlzX2NwdV9hZGRfcmV0dXJuXzIocGNwLCB2YWwpCV9fdGhpc19jcHVfZ2VuZXJpY19hZGRfcmV0dXJuKHBjcCwgdmFsKQorIyBlbmRpZgorIyBpZm5kZWYgX190aGlzX2NwdV9hZGRfcmV0dXJuXzQKKyMgIGRlZmluZSBfX3RoaXNfY3B1X2FkZF9yZXR1cm5fNChwY3AsIHZhbCkJX190aGlzX2NwdV9nZW5lcmljX2FkZF9yZXR1cm4ocGNwLCB2YWwpCisjIGVuZGlmCisjIGlmbmRlZiBfX3RoaXNfY3B1X2FkZF9yZXR1cm5fOAorIyAgZGVmaW5lIF9fdGhpc19jcHVfYWRkX3JldHVybl84KHBjcCwgdmFsKQlfX3RoaXNfY3B1X2dlbmVyaWNfYWRkX3JldHVybihwY3AsIHZhbCkKKyMgZW5kaWYKKyMgZGVmaW5lIF9fdGhpc19jcHVfYWRkX3JldHVybihwY3AsIHZhbCkJX19wY3B1X3NpemVfY2FsbF9yZXR1cm4yKHRoaXNfY3B1X2FkZF9yZXR1cm5fLCBwY3AsIHZhbCkKKyNlbmRpZgorCisjZGVmaW5lIF9fdGhpc19jcHVfc3ViX3JldHVybihwY3AsIHZhbCkJdGhpc19jcHVfYWRkX3JldHVybihwY3AsIC0odmFsKSkKKyNkZWZpbmUgX190aGlzX2NwdV9pbmNfcmV0dXJuKHBjcCkJdGhpc19jcHVfYWRkX3JldHVybihwY3AsIDEpCisjZGVmaW5lIF9fdGhpc19jcHVfZGVjX3JldHVybihwY3ApCXRoaXNfY3B1X2FkZF9yZXR1cm4ocGNwLCAtMSkKKworI2RlZmluZSBfX3RoaXNfY3B1X2dlbmVyaWNfeGNoZyhwY3AsIG52YWwpCQkJCVwKKyh7CXR5cGVvZihwY3ApIHJldF9fOwkJCQkJCVwKKwlyZXRfXyA9IF9fdGhpc19jcHVfcmVhZChwY3ApOwkJCQkJXAorCV9fdGhpc19jcHVfd3JpdGUocGNwLCBudmFsKTsJCQkJCVwKKwlyZXRfXzsJCQkJCQkJCVwKK30pCisKKyNpZm5kZWYgX190aGlzX2NwdV94Y2hnCisjIGlmbmRlZiBfX3RoaXNfY3B1X3hjaGdfMQorIyAgZGVmaW5lIF9fdGhpc19jcHVfeGNoZ18xKHBjcCwgbnZhbCkJX190aGlzX2NwdV9nZW5lcmljX3hjaGcocGNwLCBudmFsKQorIyBlbmRpZgorIyBpZm5kZWYgX190aGlzX2NwdV94Y2hnXzIKKyMgIGRlZmluZSBfX3RoaXNfY3B1X3hjaGdfMihwY3AsIG52YWwpCV9fdGhpc19jcHVfZ2VuZXJpY194Y2hnKHBjcCwgbnZhbCkKKyMgZW5kaWYKKyMgaWZuZGVmIF9fdGhpc19jcHVfeGNoZ180CisjICBkZWZpbmUgX190aGlzX2NwdV94Y2hnXzQocGNwLCBudmFsKQlfX3RoaXNfY3B1X2dlbmVyaWNfeGNoZyhwY3AsIG52YWwpCisjIGVuZGlmCisjIGlmbmRlZiBfX3RoaXNfY3B1X3hjaGdfOAorIyAgZGVmaW5lIF9fdGhpc19jcHVfeGNoZ184KHBjcCwgbnZhbCkJX190aGlzX2NwdV9nZW5lcmljX3hjaGcocGNwLCBudmFsKQorIyBlbmRpZgorIyBkZWZpbmUgX190aGlzX2NwdV94Y2hnKHBjcCwgbnZhbCkJXAorCV9fcGNwdV9zaXplX2NhbGxfcmV0dXJuMihfX3RoaXNfY3B1X3hjaGdfLCAocGNwKSwgbnZhbCkKKyNlbmRpZgorCisjZGVmaW5lIF9fdGhpc19jcHVfZ2VuZXJpY19jbXB4Y2hnKHBjcCwgb3ZhbCwgbnZhbCkJCQlcCisoewkJCQkJCQkJCVwKKwl0eXBlb2YocGNwKSByZXRfXzsJCQkJCQlcCisJcmV0X18gPSBfX3RoaXNfY3B1X3JlYWQocGNwKTsJCQkJCVwKKwlpZiAocmV0X18gPT0gKG92YWwpKQkJCQkJCVwKKwkJX190aGlzX2NwdV93cml0ZShwY3AsIG52YWwpOwkJCQlcCisJcmV0X187CQkJCQkJCQlcCit9KQorCisjaWZuZGVmIF9fdGhpc19jcHVfY21weGNoZworIyBpZm5kZWYgX190aGlzX2NwdV9jbXB4Y2hnXzEKKyMgIGRlZmluZSBfX3RoaXNfY3B1X2NtcHhjaGdfMShwY3AsIG92YWwsIG52YWwpCV9fdGhpc19jcHVfZ2VuZXJpY19jbXB4Y2hnKHBjcCwgb3ZhbCwgbnZhbCkKKyMgZW5kaWYKKyMgaWZuZGVmIF9fdGhpc19jcHVfY21weGNoZ18yCisjICBkZWZpbmUgX190aGlzX2NwdV9jbXB4Y2hnXzIocGNwLCBvdmFsLCBudmFsKQlfX3RoaXNfY3B1X2dlbmVyaWNfY21weGNoZyhwY3AsIG92YWwsIG52YWwpCisjIGVuZGlmCisjIGlmbmRlZiBfX3RoaXNfY3B1X2NtcHhjaGdfNAorIyAgZGVmaW5lIF9fdGhpc19jcHVfY21weGNoZ180KHBjcCwgb3ZhbCwgbnZhbCkJX190aGlzX2NwdV9nZW5lcmljX2NtcHhjaGcocGNwLCBvdmFsLCBudmFsKQorIyBlbmRpZgorIyBpZm5kZWYgX190aGlzX2NwdV9jbXB4Y2hnXzgKKyMgIGRlZmluZSBfX3RoaXNfY3B1X2NtcHhjaGdfOChwY3AsIG92YWwsIG52YWwpCV9fdGhpc19jcHVfZ2VuZXJpY19jbXB4Y2hnKHBjcCwgb3ZhbCwgbnZhbCkKKyMgZW5kaWYKKyMgZGVmaW5lIF9fdGhpc19jcHVfY21weGNoZyhwY3AsIG92YWwsIG52YWwpCVwKKwlfX3BjcHVfc2l6ZV9jYWxsX3JldHVybjIoX190aGlzX2NwdV9jbXB4Y2hnXywgcGNwLCBvdmFsLCBudmFsKQorI2VuZGlmCisKIC8qCiAgKiBJUlEgc2FmZSB2ZXJzaW9ucyBvZiB0aGUgcGVyIGNwdSBSTVcgb3BlcmF0aW9ucy4gTm90ZSB0aGF0IHRoZXNlIG9wZXJhdGlvbnMKICAqIGFyZSAqbm90KiBzYWZlIGFnYWluc3QgbW9kaWZpY2F0aW9uIG9mIHRoZSBzYW1lIHZhcmlhYmxlIGZyb20gYW5vdGhlcgogICogcHJvY2Vzc29ycyAod2hpY2ggb25lIGdldHMgd2hlbiB1c2luZyByZWd1bGFyIGF0b21pYyBvcGVyYXRpb25zKQotIC4gVGhleSBhcmUgZ3VhcmFudGVlZCB0byBiZSBhdG9taWMgdnMuIGxvY2FsIGludGVycnVwdHMgYW5kCisgKiBUaGV5IGFyZSBndWFyYW50ZWVkIHRvIGJlIGF0b21pYyB2cy4gbG9jYWwgaW50ZXJydXB0cyBhbmQKICAqIHByZWVtcHRpb24gb25seS4KICAqLwogI2RlZmluZSBpcnFzYWZlX2NwdV9nZW5lcmljX3RvX29wKHBjcCwgdmFsLCBvcCkJCQkJXApAQCAtNjIwLDQgKzc5NCwzMyBAQAogIyBkZWZpbmUgaXJxc2FmZV9jcHVfeG9yKHBjcCwgdmFsKSBfX3BjcHVfc2l6ZV9jYWxsKGlycXNhZmVfY3B1X3hvcl8sICh2YWwpKQogI2VuZGlmCiAKKyNkZWZpbmUgaXJxc2FmZV9jcHVfZ2VuZXJpY19jbXB4Y2hnKHBjcCwgb3ZhbCwgbnZhbCkJCQlcCisoewkJCQkJCQkJCVwKKwl0eXBlb2YocGNwKSByZXRfXzsJCQkJCQlcCisJdW5zaWduZWQgbG9uZyBmbGFnczsJCQkJCQlcCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwkJCQkJCVwKKwlyZXRfXyA9IF9fdGhpc19jcHVfcmVhZChwY3ApOwkJCQkJXAorCWlmIChyZXRfXyA9PSAob3ZhbCkpCQkJCQkJXAorCQlfX3RoaXNfY3B1X3dyaXRlKHBjcCwgbnZhbCk7CQkJCVwKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CQkJCQlcCisJcmV0X187CQkJCQkJCQlcCit9KQorCisjaWZuZGVmIGlycXNhZmVfY3B1X2NtcHhjaGcKKyMgaWZuZGVmIGlycXNhZmVfY3B1X2NtcHhjaGdfMQorIyAgZGVmaW5lIGlycXNhZmVfY3B1X2NtcHhjaGdfMShwY3AsIG92YWwsIG52YWwpCWlycXNhZmVfY3B1X2dlbmVyaWNfY21weGNoZyhwY3AsIG92YWwsIG52YWwpCisjIGVuZGlmCisjIGlmbmRlZiBpcnFzYWZlX2NwdV9jbXB4Y2hnXzIKKyMgIGRlZmluZSBpcnFzYWZlX2NwdV9jbXB4Y2hnXzIocGNwLCBvdmFsLCBudmFsKQlpcnFzYWZlX2NwdV9nZW5lcmljX2NtcHhjaGcocGNwLCBvdmFsLCBudmFsKQorIyBlbmRpZgorIyBpZm5kZWYgaXJxc2FmZV9jcHVfY21weGNoZ180CisjICBkZWZpbmUgaXJxc2FmZV9jcHVfY21weGNoZ180KHBjcCwgb3ZhbCwgbnZhbCkJaXJxc2FmZV9jcHVfZ2VuZXJpY19jbXB4Y2hnKHBjcCwgb3ZhbCwgbnZhbCkKKyMgZW5kaWYKKyMgaWZuZGVmIGlycXNhZmVfY3B1X2NtcHhjaGdfOAorIyAgZGVmaW5lIGlycXNhZmVfY3B1X2NtcHhjaGdfOChwY3AsIG92YWwsIG52YWwpCWlycXNhZmVfY3B1X2dlbmVyaWNfY21weGNoZyhwY3AsIG92YWwsIG52YWwpCisjIGVuZGlmCisjIGRlZmluZSBpcnFzYWZlX2NwdV9jbXB4Y2hnKHBjcCwgb3ZhbCwgbnZhbCkJCVwKKwlfX3BjcHVfc2l6ZV9jYWxsX3JldHVybjIoaXJxc2FmZV9jcHVfY21weGNoZ18sIChwY3ApLCBvdmFsLCBudmFsKQorI2VuZGlmCisKICNlbmRpZiAvKiBfX0xJTlVYX1BFUkNQVV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaCBiL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oCmluZGV4IDRmMTI3OWUuLmRkYTViMGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oCisrKyBiL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oCkBAIC0yMTUsOCArMjE1LDkgQEAKIAkJCQkgKi8KIAkJCQlwcmVjaXNlX2lwICAgICA6ICAyLCAvKiBza2lkIGNvbnN0cmFpbnQgICAgICAgKi8KIAkJCQltbWFwX2RhdGEgICAgICA6ICAxLCAvKiBub24tZXhlYyBtbWFwIGRhdGEgICAgKi8KKwkJCQlzYW1wbGVfaWRfYWxsICA6ICAxLCAvKiBzYW1wbGVfdHlwZSBhbGwgZXZlbnRzICovCiAKLQkJCQlfX3Jlc2VydmVkXzEgICA6IDQ2OworCQkJCV9fcmVzZXJ2ZWRfMSAgIDogNDU7CiAKIAl1bmlvbiB7CiAJCV9fdTMyCQl3YWtldXBfZXZlbnRzOwkgIC8qIHdha2V1cCBldmVyeSBuIGV2ZW50cyAqLwpAQCAtMzI3LDYgKzMyOCwxNSBAQAogZW51bSBwZXJmX2V2ZW50X3R5cGUgewogCiAJLyoKKwkgKiBJZiBwZXJmX2V2ZW50X2F0dHIuc2FtcGxlX2lkX2FsbCBpcyBzZXQgdGhlbiBhbGwgZXZlbnQgdHlwZXMgd2lsbAorCSAqIGhhdmUgdGhlIHNhbXBsZV90eXBlIHNlbGVjdGVkIGZpZWxkcyByZWxhdGVkIHRvIHdoZXJlL3doZW4KKwkgKiAoaWRlbnRpdHkpIGFuIGV2ZW50IHRvb2sgcGxhY2UgKFRJRCwgVElNRSwgSUQsIENQVSwgU1RSRUFNX0lEKQorCSAqIGRlc2NyaWJlZCBpbiBQRVJGX1JFQ09SRF9TQU1QTEUgYmVsb3csIGl0IHdpbGwgYmUgc3Rhc2hlZCBqdXN0IGFmdGVyCisJICogdGhlIHBlcmZfZXZlbnRfaGVhZGVyIGFuZCB0aGUgZmllbGRzIGFscmVhZHkgcHJlc2VudCBmb3IgdGhlIGV4aXN0aW5nCisJICogZmllbGRzLCBpLmUuIGF0IHRoZSBlbmQgb2YgdGhlIHBheWxvYWQuIFRoYXQgd2F5IGEgbmV3ZXIgcGVyZi5kYXRhCisJICogZmlsZSB3aWxsIGJlIHN1cHBvcnRlZCBieSBvbGRlciBwZXJmIHRvb2xzLCB3aXRoIHRoZXNlIG5ldyBvcHRpb25hbAorCSAqIGZpZWxkcyBiZWluZyBpZ25vcmVkLgorCSAqCiAJICogVGhlIE1NQVAgZXZlbnRzIHJlY29yZCB0aGUgUFJPVF9FWEVDIG1hcHBpbmdzIHNvIHRoYXQgd2UgY2FuCiAJICogY29ycmVsYXRlIHVzZXJzcGFjZSBJUHMgdG8gY29kZS4gVGhleSBoYXZlIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlOgogCSAqCkBAIC01NzgsNiArNTg4LDEwIEBACiBzdHJ1Y3QgcG11IHsKIAlzdHJ1Y3QgbGlzdF9oZWFkCQllbnRyeTsKIAorCXN0cnVjdCBkZXZpY2UJCQkqZGV2OworCWNoYXIJCQkJKm5hbWU7CisJaW50CQkJCXR5cGU7CisKIAlpbnQgKiBfX3BlcmNwdQkJCXBtdV9kaXNhYmxlX2NvdW50OwogCXN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICogX19wZXJjcHUgcG11X2NwdV9jb250ZXh0OwogCWludAkJCQl0YXNrX2N0eF9ucjsKQEAgLTc1OCw2ICs3NzIsOSBAQAogCXU2NAkJCQlzaGFkb3dfY3R4X3RpbWU7CiAKIAlzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyCQlhdHRyOworCXUxNgkJCQloZWFkZXJfc2l6ZTsKKwl1MTYJCQkJaWRfaGVhZGVyX3NpemU7CisJdTE2CQkJCXJlYWRfc2l6ZTsKIAlzdHJ1Y3QgaHdfcGVyZl9ldmVudAkJaHc7CiAKIAlzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0CSpjdHg7CkBAIC05MDMsNyArOTIwLDcgQEAKIAogI2lmZGVmIENPTkZJR19QRVJGX0VWRU5UUwogCi1leHRlcm4gaW50IHBlcmZfcG11X3JlZ2lzdGVyKHN0cnVjdCBwbXUgKnBtdSk7CitleHRlcm4gaW50IHBlcmZfcG11X3JlZ2lzdGVyKHN0cnVjdCBwbXUgKnBtdSwgY2hhciAqbmFtZSwgaW50IHR5cGUpOwogZXh0ZXJuIHZvaWQgcGVyZl9wbXVfdW5yZWdpc3RlcihzdHJ1Y3QgcG11ICpwbXUpOwogCiBleHRlcm4gaW50IHBlcmZfbnVtX2NvdW50ZXJzKHZvaWQpOwpAQCAtOTcwLDYgKzk4NywxMSBAQAogCQkJCSBzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSAqZGF0YSwKIAkJCQkgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwogCitzdGF0aWMgaW5saW5lIGJvb2wgaXNfc2FtcGxpbmdfZXZlbnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXJldHVybiBldmVudC0+YXR0ci5zYW1wbGVfcGVyaW9kICE9IDA7Cit9CisKIC8qCiAgKiBSZXR1cm4gMSBmb3IgYSBzb2Z0d2FyZSBldmVudCwgMCBmb3IgYSBoYXJkd2FyZSBldmVudAogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BpcGVfZnNfaS5oIGIvaW5jbHVkZS9saW51eC9waXBlX2ZzX2kuaAppbmRleCBiYjI3ZDdlLi43NzI1N2M5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BpcGVfZnNfaS5oCisrKyBiL2luY2x1ZGUvbGludXgvcGlwZV9mc19pLmgKQEAgLTMwLDYgKzMwLDcgQEAKICAqCXN0cnVjdCBwaXBlX2lub2RlX2luZm8gLSBhIGxpbnV4IGtlcm5lbCBwaXBlCiAgKglAd2FpdDogcmVhZGVyL3dyaXRlciB3YWl0IHBvaW50IGluIGNhc2Ugb2YgZW1wdHkvZnVsbCBwaXBlCiAgKglAbnJidWZzOiB0aGUgbnVtYmVyIG9mIG5vbi1lbXB0eSBwaXBlIGJ1ZmZlcnMgaW4gdGhpcyBwaXBlCisgKglAYnVmZmVyczogdG90YWwgbnVtYmVyIG9mIGJ1ZmZlcnMgKHNob3VsZCBiZSBhIHBvd2VyIG9mIDIpCiAgKglAY3VyYnVmOiB0aGUgY3VycmVudCBwaXBlIGJ1ZmZlciBlbnRyeQogICoJQHRtcF9wYWdlOiBjYWNoZWQgcmVsZWFzZWQgcGFnZQogICoJQHJlYWRlcnM6IG51bWJlciBvZiBjdXJyZW50IHJlYWRlcnMgb2YgdGhpcyBwaXBlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BtLmggYi9pbmNsdWRlL2xpbnV4L3BtLmgKaW5kZXggNDBmM2Y0NS4uZGQ5YzdhYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wbS5oCisrKyBiL2luY2x1ZGUvbGludXgvcG0uaApAQCAtMzY3LDQ1ICszNjcsNiBAQAogCQkJCQl7IC5ldmVudCA9IFBNX0VWRU5UX0FVVE9fUkVTVU1FLCB9KQogCiAvKioKLSAqIERldmljZSBwb3dlciBtYW5hZ2VtZW50IHN0YXRlcwotICoKLSAqIFRoZXNlIHN0YXRlIGxhYmVscyBhcmUgdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBQTSBjb3JlIHRvIGluZGljYXRlIHRoZSBjdXJyZW50Ci0gKiBzdGF0dXMgb2YgYSBkZXZpY2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBQTSBjb3JlIG9wZXJhdGlvbnMuCi0gKgotICogRFBNX09OCQlEZXZpY2UgaXMgcmVnYXJkZWQgYXMgb3BlcmF0aW9uYWwuICBTZXQgdGhpcyB3YXkKLSAqCQkJaW5pdGlhbGx5IGFuZCB3aGVuIC0+Y29tcGxldGUoKSBpcyBhYm91dCB0byBiZSBjYWxsZWQuCi0gKgkJCUFsc28gc2V0IHdoZW4gLT5wcmVwYXJlKCkgZmFpbHMuCi0gKgotICogRFBNX1BSRVBBUklORwlEZXZpY2UgaXMgZ29pbmcgdG8gYmUgcHJlcGFyZWQgZm9yIGEgUE0gdHJhbnNpdGlvbi4gIFNldAotICoJCQl3aGVuIC0+cHJlcGFyZSgpIGlzIGFib3V0IHRvIGJlIGNhbGxlZC4KLSAqCi0gKiBEUE1fUkVTVU1JTkcJCURldmljZSBpcyBnb2luZyB0byBiZSByZXN1bWVkLiAgU2V0IHdoZW4gLT5yZXN1bWUoKSwKLSAqCQkJLT50aGF3KCksIG9yIC0+cmVzdG9yZSgpIGlzIGFib3V0IHRvIGJlIGNhbGxlZC4KLSAqCi0gKiBEUE1fU1VTUEVORElORwlEZXZpY2UgaGFzIGJlZW4gcHJlcGFyZWQgZm9yIGEgcG93ZXIgdHJhbnNpdGlvbi4gIFNldAotICoJCQl3aGVuIC0+cHJlcGFyZSgpIGhhcyBqdXN0IHN1Y2NlZWRlZC4KLSAqCi0gKiBEUE1fT0ZGCQlEZXZpY2UgaXMgcmVnYXJkZWQgYXMgaW5hY3RpdmUuICBTZXQgaW1tZWRpYXRlbHkgYWZ0ZXIKLSAqCQkJLT5zdXNwZW5kKCksIC0+ZnJlZXplKCksIG9yIC0+cG93ZXJvZmYoKSBoYXMgc3VjY2VlZGVkLgotICoJCQlBbHNvIHNldCB3aGVuIC0+cmVzdW1lKClfbm9pcnEsIC0+dGhhd19ub2lycSgpLCBvcgotICoJCQktPnJlc3RvcmVfbm9pcnEoKSBpcyBhYm91dCB0byBiZSBjYWxsZWQuCi0gKgotICogRFBNX09GRl9JUlEJCURldmljZSBpcyBpbiBhICJkZWVwIHNsZWVwIi4gIFNldCBpbW1lZGlhdGVseSBhZnRlcgotICoJCQktPnN1c3BlbmRfbm9pcnEoKSwgLT5mcmVlemVfbm9pcnEoKSwgb3IKLSAqCQkJLT5wb3dlcm9mZl9ub2lycSgpIGhhcyBqdXN0IHN1Y2NlZWRlZC4KLSAqLwotCi1lbnVtIGRwbV9zdGF0ZSB7Ci0JRFBNX0lOVkFMSUQsCi0JRFBNX09OLAotCURQTV9QUkVQQVJJTkcsCi0JRFBNX1JFU1VNSU5HLAotCURQTV9TVVNQRU5ESU5HLAotCURQTV9PRkYsCi0JRFBNX09GRl9JUlEsCi19OwotCi0vKioKICAqIERldmljZSBydW4tdGltZSBwb3dlciBtYW5hZ2VtZW50IHN0YXR1cy4KICAqCiAgKiBUaGVzZSBzdGF0dXMgbGFiZWxzIGFyZSB1c2VkIGludGVybmFsbHkgYnkgdGhlIFBNIGNvcmUgdG8gaW5kaWNhdGUgdGhlCkBAIC00NjMsOCArNDI0LDggQEAKIHN0cnVjdCBkZXZfcG1faW5mbyB7CiAJcG1fbWVzc2FnZV90CQlwb3dlcl9zdGF0ZTsKIAl1bnNpZ25lZCBpbnQJCWNhbl93YWtldXA6MTsKLQl1bnNpZ25lZAkJYXN5bmNfc3VzcGVuZDoxOwotCWVudW0gZHBtX3N0YXRlCQlzdGF0dXM7CQkvKiBPd25lZCBieSB0aGUgUE0gY29yZSAqLworCXVuc2lnbmVkIGludAkJYXN5bmNfc3VzcGVuZDoxOworCXVuc2lnbmVkIGludAkJaW5fc3VzcGVuZDoxOwkvKiBPd25lZCBieSB0aGUgUE0gY29yZSAqLwogCXNwaW5sb2NrX3QJCWxvY2s7CiAjaWZkZWYgQ09ORklHX1BNX1NMRUVQCiAJc3RydWN0IGxpc3RfaGVhZAllbnRyeTsKQEAgLTQ4Niw2ICs0NDcsNyBAQAogCXVuc2lnbmVkIGludAkJcnVuX3dha2U6MTsKIAl1bnNpZ25lZCBpbnQJCXJ1bnRpbWVfYXV0bzoxOwogCXVuc2lnbmVkIGludAkJbm9fY2FsbGJhY2tzOjE7CisJdW5zaWduZWQgaW50CQlpcnFfc2FmZToxOwogCXVuc2lnbmVkIGludAkJdXNlX2F1dG9zdXNwZW5kOjE7CiAJdW5zaWduZWQgaW50CQl0aW1lcl9hdXRvc3VzcGVuZHM6MTsKIAllbnVtIHJwbV9yZXF1ZXN0CXJlcXVlc3Q7CkBAIC02MTAsNCArNTcyLDExIEBACiAjZGVmaW5lIFBNX0FQTQkxCiAjZGVmaW5lIFBNX0FDUEkJMgogCitleHRlcm4gaW50IHBtX2dlbmVyaWNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpOworZXh0ZXJuIGludCBwbV9nZW5lcmljX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpOworZXh0ZXJuIGludCBwbV9nZW5lcmljX2ZyZWV6ZShzdHJ1Y3QgZGV2aWNlICpkZXYpOworZXh0ZXJuIGludCBwbV9nZW5lcmljX3RoYXcoc3RydWN0IGRldmljZSAqZGV2KTsKK2V4dGVybiBpbnQgcG1fZ2VuZXJpY19yZXN0b3JlKHN0cnVjdCBkZXZpY2UgKmRldik7CitleHRlcm4gaW50IHBtX2dlbmVyaWNfcG93ZXJvZmYoc3RydWN0IGRldmljZSAqZGV2KTsKKwogI2VuZGlmIC8qIF9MSU5VWF9QTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BtX3J1bnRpbWUuaCBiL2luY2x1ZGUvbGludXgvcG1fcnVudGltZS5oCmluZGV4IGQxOWYxY2MuLmQzNGYwNjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcG1fcnVudGltZS5oCisrKyBiL2luY2x1ZGUvbGludXgvcG1fcnVudGltZS5oCkBAIC00MCw2ICs0MCw3IEBACiBleHRlcm4gaW50IHBtX2dlbmVyaWNfcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldik7CiBleHRlcm4gaW50IHBtX2dlbmVyaWNfcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIHBtX3J1bnRpbWVfbm9fY2FsbGJhY2tzKHN0cnVjdCBkZXZpY2UgKmRldik7CitleHRlcm4gdm9pZCBwbV9ydW50aW1lX2lycV9zYWZlKHN0cnVjdCBkZXZpY2UgKmRldik7CiBleHRlcm4gdm9pZCBfX3BtX3J1bnRpbWVfdXNlX2F1dG9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgYm9vbCB1c2UpOwogZXh0ZXJuIHZvaWQgcG1fcnVudGltZV9zZXRfYXV0b3N1c3BlbmRfZGVsYXkoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgZGVsYXkpOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcG1fcnVudGltZV9hdXRvc3VzcGVuZF9leHBpcmF0aW9uKHN0cnVjdCBkZXZpY2UgKmRldik7CkBAIC04MSw2ICs4MiwxMSBAQAogCQkmJiAhZGV2LT5wb3dlci5kaXNhYmxlX2RlcHRoOwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wgcG1fcnVudGltZV9lbmFibGVkKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gIWRldi0+cG93ZXIuZGlzYWJsZV9kZXB0aDsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIHBtX3J1bnRpbWVfbWFya19sYXN0X2J1c3koc3RydWN0IGRldmljZSAqZGV2KQogewogCUFDQ0VTU19PTkNFKGRldi0+cG93ZXIubGFzdF9idXN5KSA9IGppZmZpZXM7CkBAIC0xMTksMTEgKzEyNSwxMyBAQAogc3RhdGljIGlubGluZSBib29sIGRldmljZV9ydW5fd2FrZShzdHJ1Y3QgZGV2aWNlICpkZXYpIHsgcmV0dXJuIGZhbHNlOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgZGV2aWNlX3NldF9ydW5fd2FrZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGJvb2wgZW5hYmxlKSB7fQogc3RhdGljIGlubGluZSBib29sIHBtX3J1bnRpbWVfc3VzcGVuZGVkKHN0cnVjdCBkZXZpY2UgKmRldikgeyByZXR1cm4gZmFsc2U7IH0KK3N0YXRpYyBpbmxpbmUgYm9vbCBwbV9ydW50aW1lX2VuYWJsZWQoc3RydWN0IGRldmljZSAqZGV2KSB7IHJldHVybiBmYWxzZTsgfQogCiBzdGF0aWMgaW5saW5lIGludCBwbV9nZW5lcmljX3J1bnRpbWVfaWRsZShzdHJ1Y3QgZGV2aWNlICpkZXYpIHsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgaW50IHBtX2dlbmVyaWNfcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikgeyByZXR1cm4gMDsgfQogc3RhdGljIGlubGluZSBpbnQgcG1fZ2VuZXJpY19ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpIHsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBwbV9ydW50aW1lX25vX2NhbGxiYWNrcyhzdHJ1Y3QgZGV2aWNlICpkZXYpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgcG1fcnVudGltZV9pcnFfc2FmZShzdHJ1Y3QgZGV2aWNlICpkZXYpIHt9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwbV9ydW50aW1lX21hcmtfbGFzdF9idXN5KHN0cnVjdCBkZXZpY2UgKmRldikge30KIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3BtX3J1bnRpbWVfdXNlX2F1dG9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwKQEAgLTE5Niw2ICsyMDQsMTEgQEAKIAlyZXR1cm4gX19wbV9ydW50aW1lX2lkbGUoZGV2LCBSUE1fR0VUX1BVVCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IHBtX3J1bnRpbWVfcHV0X3N5bmNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIF9fcG1fcnVudGltZV9zdXNwZW5kKGRldiwgUlBNX0dFVF9QVVQpOworfQorCiBzdGF0aWMgaW5saW5lIGludCBwbV9ydW50aW1lX3B1dF9zeW5jX2F1dG9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlyZXR1cm4gX19wbV9ydW50aW1lX3N1c3BlbmQoZGV2LCBSUE1fR0VUX1BVVCB8IFJQTV9BVVRPKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcG9zaXhfYWNsLmggYi9pbmNsdWRlL2xpbnV4L3Bvc2l4X2FjbC5oCmluZGV4IDY3NjA4MTYuLmQ2ODI4M2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcG9zaXhfYWNsLmgKKysrIGIvaW5jbHVkZS9saW51eC9wb3NpeF9hY2wuaApAQCAtMTA4LDYgKzEwOCwyNSBAQAogCXJldHVybiBhY2w7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IG5lZ2F0aXZlX2NhY2hlZF9hY2woc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUpCit7CisJc3RydWN0IHBvc2l4X2FjbCAqKnAsICphY2w7CisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBBQ0xfVFlQRV9BQ0NFU1M6CisJCXAgPSAmaW5vZGUtPmlfYWNsOworCQlicmVhazsKKwljYXNlIEFDTF9UWVBFX0RFRkFVTFQ6CisJCXAgPSAmaW5vZGUtPmlfZGVmYXVsdF9hY2w7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KKwlhY2wgPSBBQ0NFU1NfT05DRSgqcCk7CisJaWYgKGFjbCkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfY2FjaGVkX2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCSAgaW50IHR5cGUsCiAJCQkJICBzdHJ1Y3QgcG9zaXhfYWNsICphY2wpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3B4YTJ4eF9zc3AuaCBiL2luY2x1ZGUvbGludXgvcHhhMnh4X3NzcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmNjkxZTQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3B4YTJ4eF9zc3AuaApAQCAtMCwwICsxLDIwOSBAQAorLyoKKyAqICBweGEyeHhfc3NwLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzIFJ1c3NlbGwgS2luZywgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgUFhBIENQVS9TU1AgcG9ydHM6LQorICoKKyAqICAgICAgIFBYQTI1MCAgICAgU1NQCisgKiAgICAgICBQWEEyNTUgICAgIFNTUCwgTlNTUAorICogICAgICAgUFhBMjZ4ICAgICBTU1AsIE5TU1AsIEFTU1AKKyAqICAgICAgIFBYQTI3eCAgICAgU1NQMSwgU1NQMiwgU1NQMworICogICAgICAgUFhBM3h4ICAgICBTU1AxLCBTU1AyLCBTU1AzLCBTU1A0CisgKi8KKworI2lmbmRlZiBfX0xJTlVYX1NTUF9ICisjZGVmaW5lIF9fTElOVVhfU1NQX0gKKworI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisvKgorICogU1NQIFNlcmlhbCBQb3J0IFJlZ2lzdGVycworICogUFhBMjUwLCBQWEEyNTUsIFBYQTI2eCBhbmQgUFhBMjd4IFNTUCBjb250cm9sbGVycyBhcmUgYWxsIHNsaWdodGx5IGRpZmZlcmVudC4KKyAqIFBYQTI1NSwgUFhBMjZ4IGFuZCBQWEEyN3ggaGF2ZSBleHRyYSBwb3J0cywgcmVnaXN0ZXJzIGFuZCBiaXRzLgorICovCisKKyNkZWZpbmUgU1NDUjAJCSgweDAwKSAgLyogU1NQIENvbnRyb2wgUmVnaXN0ZXIgMCAqLworI2RlZmluZSBTU0NSMQkJKDB4MDQpICAvKiBTU1AgQ29udHJvbCBSZWdpc3RlciAxICovCisjZGVmaW5lIFNTU1IJCSgweDA4KSAgLyogU1NQIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBTU0lUUgkJKDB4MEMpICAvKiBTU1AgSW50ZXJydXB0IFRlc3QgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1NEUgkJKDB4MTApICAvKiBTU1AgRGF0YSBXcml0ZS9EYXRhIFJlYWQgUmVnaXN0ZXIgKi8KKworI2RlZmluZSBTU1RPCQkoMHgyOCkgIC8qIFNTUCBUaW1lIE91dCBSZWdpc3RlciAqLworI2RlZmluZSBTU1BTUAkJKDB4MkMpICAvKiBTU1AgUHJvZ3JhbW1hYmxlIFNlcmlhbCBQcm90b2NvbCAqLworI2RlZmluZSBTU1RTQQkJKDB4MzApICAvKiBTU1AgVHggVGltZXNsb3QgQWN0aXZlICovCisjZGVmaW5lIFNTUlNBCQkoMHgzNCkgIC8qIFNTUCBSeCBUaW1lc2xvdCBBY3RpdmUgKi8KKyNkZWZpbmUgU1NUU1MJCSgweDM4KSAgLyogU1NQIFRpbWVzbG90IFN0YXR1cyAqLworI2RlZmluZSBTU0FDRAkJKDB4M0MpICAvKiBTU1AgQXVkaW8gQ2xvY2sgRGl2aWRlciAqLworI2RlZmluZSBTU0FDREQJCSgweDQwKQkvKiBTU1AgQXVkaW8gQ2xvY2sgRGl0aGVyIERpdmlkZXIgKi8KKworLyogQ29tbW9uIFBYQTJ4eCBiaXRzIGZpcnN0ICovCisjZGVmaW5lIFNTQ1IwX0RTUwkoMHgwMDAwMDAwZikJLyogRGF0YSBTaXplIFNlbGVjdCAobWFzaykgKi8KKyNkZWZpbmUgU1NDUjBfRGF0YVNpemUoeCkgICgoeCkgLSAxKQkvKiBEYXRhIFNpemUgU2VsZWN0IFs0Li4xNl0gKi8KKyNkZWZpbmUgU1NDUjBfRlJGCSgweDAwMDAwMDMwKQkvKiBGUmFtZSBGb3JtYXQgKG1hc2spICovCisjZGVmaW5lIFNTQ1IwX01vdG9yb2xhCSgweDAgPDwgNCkJLyogTW90b3JvbGEncyBTZXJpYWwgUGVyaXBoZXJhbCBJbnRlcmZhY2UgKFNQSSkgKi8KKyNkZWZpbmUgU1NDUjBfVEkJKDB4MSA8PCA0KQkvKiBUZXhhcyBJbnN0cnVtZW50cycgU3luY2hyb25vdXMgU2VyaWFsIFByb3RvY29sIChTU1ApICovCisjZGVmaW5lIFNTQ1IwX05hdGlvbmFsCSgweDIgPDwgNCkJLyogTmF0aW9uYWwgTWljcm93aXJlICovCisjZGVmaW5lIFNTQ1IwX0VDUwkoMSA8PCA2KQkvKiBFeHRlcm5hbCBjbG9jayBzZWxlY3QgKi8KKyNkZWZpbmUgU1NDUjBfU1NFCSgxIDw8IDcpCS8qIFN5bmNocm9ub3VzIFNlcmlhbCBQb3J0IEVuYWJsZSAqLworI2RlZmluZSBTU0NSMF9TQ1IoeCkJKCh4KSA8PCA4KQkvKiBTZXJpYWwgQ2xvY2sgUmF0ZSAobWFzaykgKi8KKworLyogUFhBMjd4LCBQWEEzeHggKi8KKyNkZWZpbmUgU1NDUjBfRURTUwkoMSA8PCAyMCkJLyogRXh0ZW5kZWQgZGF0YSBzaXplIHNlbGVjdCAqLworI2RlZmluZSBTU0NSMF9OQ1MJKDEgPDwgMjEpCS8qIE5ldHdvcmsgY2xvY2sgc2VsZWN0ICovCisjZGVmaW5lIFNTQ1IwX1JJTQkoMSA8PCAyMikJLyogUmVjZWl2ZSBGSUZPIG92ZXJycnVuIGludGVycnVwdCBtYXNrICovCisjZGVmaW5lIFNTQ1IwX1RVTQkoMSA8PCAyMykJLyogVHJhbnNtaXQgRklGTyB1bmRlcnJ1biBpbnRlcnJ1cHQgbWFzayAqLworI2RlZmluZSBTU0NSMF9GUkRDCSgweDA3MDAwMDAwKQkvKiBGcmFtZSByYXRlIGRpdmlkZXIgY29udHJvbCAobWFzaykgKi8KKyNkZWZpbmUgU1NDUjBfU2xvdHNQZXJGcm0oeCkgKCgoeCkgLSAxKSA8PCAyNCkJLyogVGltZSBzbG90cyBwZXIgZnJhbWUgWzEuLjhdICovCisjZGVmaW5lIFNTQ1IwX0ZQQ0tFCSgxIDw8IDI5KQkvKiBGSUZPIHBhY2tpbmcgZW5hYmxlICovCisjZGVmaW5lIFNTQ1IwX0FDUwkoMSA8PCAzMCkJLyogQXVkaW8gY2xvY2sgc2VsZWN0ICovCisjZGVmaW5lIFNTQ1IwX01PRAkoMSA8PCAzMSkJLyogTW9kZSAobm9ybWFsIG9yIG5ldHdvcmspICovCisKKworI2RlZmluZSBTU0NSMV9SSUUJKDEgPDwgMCkJLyogUmVjZWl2ZSBGSUZPIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgU1NDUjFfVElFCSgxIDw8IDEpCS8qIFRyYW5zbWl0IEZJRk8gSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBTU0NSMV9MQk0JKDEgPDwgMikJLyogTG9vcC1CYWNrIE1vZGUgKi8KKyNkZWZpbmUgU1NDUjFfU1BPCSgxIDw8IDMpCS8qIE1vdG9yb2xhIFNQSSBTU1BTQ0xLIHBvbGFyaXR5IHNldHRpbmcgKi8KKyNkZWZpbmUgU1NDUjFfU1BICSgxIDw8IDQpCS8qIE1vdG9yb2xhIFNQSSBTU1BTQ0xLIHBoYXNlIHNldHRpbmcgKi8KKyNkZWZpbmUgU1NDUjFfTVdEUwkoMSA8PCA1KQkvKiBNaWNyb3dpcmUgVHJhbnNtaXQgRGF0YSBTaXplICovCisKKyNkZWZpbmUgU1NTUl9BTFRfRlJNX01BU0sJMwkvKiBNYXNrcyB0aGUgU0ZSTSBzaWduYWwgbnVtYmVyICovCisjZGVmaW5lIFNTU1JfVE5GCSgxIDw8IDIpCS8qIFRyYW5zbWl0IEZJRk8gTm90IEZ1bGwgKi8KKyNkZWZpbmUgU1NTUl9STkUJKDEgPDwgMykJLyogUmVjZWl2ZSBGSUZPIE5vdCBFbXB0eSAqLworI2RlZmluZSBTU1NSX0JTWQkoMSA8PCA0KQkvKiBTU1AgQnVzeSAqLworI2RlZmluZSBTU1NSX1RGUwkoMSA8PCA1KQkvKiBUcmFuc21pdCBGSUZPIFNlcnZpY2UgUmVxdWVzdCAqLworI2RlZmluZSBTU1NSX1JGUwkoMSA8PCA2KQkvKiBSZWNlaXZlIEZJRk8gU2VydmljZSBSZXF1ZXN0ICovCisjZGVmaW5lIFNTU1JfUk9SCSgxIDw8IDcpCS8qIFJlY2VpdmUgRklGTyBPdmVycnVuICovCisKKyNpZmRlZiBDT05GSUdfQVJDSF9QWEEKKyNkZWZpbmUgUlhfVEhSRVNIX0RGTFQJOAorI2RlZmluZSBUWF9USFJFU0hfREZMVAk4CisKKyNkZWZpbmUgU1NTUl9URkxfTUFTSwkoMHhmIDw8IDgpCS8qIFRyYW5zbWl0IEZJRk8gTGV2ZWwgbWFzayAqLworI2RlZmluZSBTU1NSX1JGTF9NQVNLCSgweGYgPDwgMTIpCS8qIFJlY2VpdmUgRklGTyBMZXZlbCBtYXNrICovCisKKyNkZWZpbmUgU1NDUjFfVEZUCSgweDAwMDAwM2MwKQkvKiBUcmFuc21pdCBGSUZPIFRocmVzaG9sZCAobWFzaykgKi8KKyNkZWZpbmUgU1NDUjFfVHhUcmVzaCh4KSAoKCh4KSAtIDEpIDw8IDYpIC8qIGxldmVsIFsxLi4xNl0gKi8KKyNkZWZpbmUgU1NDUjFfUkZUCSgweDAwMDAzYzAwKQkvKiBSZWNlaXZlIEZJRk8gVGhyZXNob2xkIChtYXNrKSAqLworI2RlZmluZSBTU0NSMV9SeFRyZXNoKHgpICgoKHgpIC0gMSkgPDwgMTApIC8qIGxldmVsIFsxLi4xNl0gKi8KKworI2Vsc2UKKworI2RlZmluZSBSWF9USFJFU0hfREZMVAkyCisjZGVmaW5lIFRYX1RIUkVTSF9ERkxUCTIKKworI2RlZmluZSBTU1NSX1RGTF9NQVNLCSgweDMgPDwgOCkJLyogVHJhbnNtaXQgRklGTyBMZXZlbCBtYXNrICovCisjZGVmaW5lIFNTU1JfUkZMX01BU0sJKDB4MyA8PCAxMikJLyogUmVjZWl2ZSBGSUZPIExldmVsIG1hc2sgKi8KKworI2RlZmluZSBTU0NSMV9URlQJKDB4MDAwMDAwYzApCS8qIFRyYW5zbWl0IEZJRk8gVGhyZXNob2xkIChtYXNrKSAqLworI2RlZmluZSBTU0NSMV9UeFRyZXNoKHgpICgoKHgpIC0gMSkgPDwgNikgLyogbGV2ZWwgWzEuLjRdICovCisjZGVmaW5lIFNTQ1IxX1JGVAkoMHgwMDAwMGMwMCkJLyogUmVjZWl2ZSBGSUZPIFRocmVzaG9sZCAobWFzaykgKi8KKyNkZWZpbmUgU1NDUjFfUnhUcmVzaCh4KSAoKCh4KSAtIDEpIDw8IDEwKSAvKiBsZXZlbCBbMS4uNF0gKi8KKyNlbmRpZgorCisvKiBleHRyYSBiaXRzIGluIFBYQTI1NSwgUFhBMjZ4IGFuZCBQWEEyN3ggU1NQIHBvcnRzICovCisjZGVmaW5lIFNTQ1IwX1RJU1NQCQkoMSA8PCA0KQkvKiBUSSBTeW5jIFNlcmlhbCBQcm90b2NvbCAqLworI2RlZmluZSBTU0NSMF9QU1AJCSgzIDw8IDQpCS8qIFBTUCAtIFByb2dyYW1tYWJsZSBTZXJpYWwgUHJvdG9jb2wgKi8KKyNkZWZpbmUgU1NDUjFfVFRFTFAJCSgxIDw8IDMxKQkvKiBUWEQgVHJpc3RhdGUgRW5hYmxlIExhc3QgUGhhc2UgKi8KKyNkZWZpbmUgU1NDUjFfVFRFCQkoMSA8PCAzMCkJLyogVFhEIFRyaXN0YXRlIEVuYWJsZSAqLworI2RlZmluZSBTU0NSMV9FQkNFSQkJKDEgPDwgMjkpCS8qIEVuYWJsZSBCaXQgQ291bnQgRXJyb3IgaW50ZXJydXB0ICovCisjZGVmaW5lIFNTQ1IxX1NDRlIJCSgxIDw8IDI4KQkvKiBTbGF2ZSBDbG9jayBmcmVlIFJ1bm5pbmcgKi8KKyNkZWZpbmUgU1NDUjFfRUNSQQkJKDEgPDwgMjcpCS8qIEVuYWJsZSBDbG9jayBSZXF1ZXN0IEEgKi8KKyNkZWZpbmUgU1NDUjFfRUNSQgkJKDEgPDwgMjYpCS8qIEVuYWJsZSBDbG9jayByZXF1ZXN0IEIgKi8KKyNkZWZpbmUgU1NDUjFfU0NMS0RJUgkJKDEgPDwgMjUpCS8qIFNlcmlhbCBCaXQgUmF0ZSBDbG9jayBEaXJlY3Rpb24gKi8KKyNkZWZpbmUgU1NDUjFfU0ZSTURJUgkJKDEgPDwgMjQpCS8qIEZyYW1lIERpcmVjdGlvbiAqLworI2RlZmluZSBTU0NSMV9SV09UCQkoMSA8PCAyMykJLyogUmVjZWl2ZSBXaXRob3V0IFRyYW5zbWl0ICovCisjZGVmaW5lIFNTQ1IxX1RSQUlMCQkoMSA8PCAyMikJLyogVHJhaWxpbmcgQnl0ZSAqLworI2RlZmluZSBTU0NSMV9UU1JFCQkoMSA8PCAyMSkJLyogVHJhbnNtaXQgU2VydmljZSBSZXF1ZXN0IEVuYWJsZSAqLworI2RlZmluZSBTU0NSMV9SU1JFCQkoMSA8PCAyMCkJLyogUmVjZWl2ZSBTZXJ2aWNlIFJlcXVlc3QgRW5hYmxlICovCisjZGVmaW5lIFNTQ1IxX1RJTlRFCQkoMSA8PCAxOSkJLyogUmVjZWl2ZXIgVGltZS1vdXQgSW50ZXJydXB0IGVuYWJsZSAqLworI2RlZmluZSBTU0NSMV9QSU5URQkJKDEgPDwgMTgpCS8qIFBlcmlwaGVyYWwgVHJhaWxpbmcgQnl0ZSBJbnRlcnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgU1NDUjFfSUZTCQkoMSA8PCAxNikJLyogSW52ZXJ0IEZyYW1lIFNpZ25hbCAqLworI2RlZmluZSBTU0NSMV9TVFJGCQkoMSA8PCAxNSkJLyogU2VsZWN0IEZJRk8gb3IgRUZXUiAqLworI2RlZmluZSBTU0NSMV9FRldSCQkoMSA8PCAxNCkJLyogRW5hYmxlIEZJRk8gV3JpdGUvUmVhZCAqLworCisjZGVmaW5lIFNTU1JfQkNFCQkoMSA8PCAyMykJLyogQml0IENvdW50IEVycm9yICovCisjZGVmaW5lIFNTU1JfQ1NTCQkoMSA8PCAyMikJLyogQ2xvY2sgU3luY2hyb25pc2F0aW9uIFN0YXR1cyAqLworI2RlZmluZSBTU1NSX1RVUgkJKDEgPDwgMjEpCS8qIFRyYW5zbWl0IEZJRk8gVW5kZXIgUnVuICovCisjZGVmaW5lIFNTU1JfRU9DCQkoMSA8PCAyMCkJLyogRW5kIE9mIENoYWluICovCisjZGVmaW5lIFNTU1JfVElOVAkJKDEgPDwgMTkpCS8qIFJlY2VpdmVyIFRpbWUtb3V0IEludGVycnVwdCAqLworI2RlZmluZSBTU1NSX1BJTlQJCSgxIDw8IDE4KQkvKiBQZXJpcGhlcmFsIFRyYWlsaW5nIEJ5dGUgSW50ZXJydXB0ICovCisKKworI2RlZmluZSBTU1BTUF9TQ01PREUoeCkJCSgoeCkgPDwgMCkJLyogU2VyaWFsIEJpdCBSYXRlIENsb2NrIE1vZGUgKi8KKyNkZWZpbmUgU1NQU1BfU0ZSTVAJCSgxIDw8IDIpCS8qIFNlcmlhbCBGcmFtZSBQb2xhcml0eSAqLworI2RlZmluZSBTU1BTUF9FVERTCQkoMSA8PCAzKQkvKiBFbmQgb2YgVHJhbnNmZXIgZGF0YSBTdGF0ZSAqLworI2RlZmluZSBTU1BTUF9TVFJURExZKHgpCSgoeCkgPDwgNCkJLyogU3RhcnQgRGVsYXkgKi8KKyNkZWZpbmUgU1NQU1BfRE1ZU1RSVCh4KQkoKHgpIDw8IDcpCS8qIER1bW15IFN0YXJ0ICovCisjZGVmaW5lIFNTUFNQX1NGUk1ETFkoeCkJKCh4KSA8PCA5KQkvKiBTZXJpYWwgRnJhbWUgRGVsYXkgKi8KKyNkZWZpbmUgU1NQU1BfU0ZSTVdEVEgoeCkJKCh4KSA8PCAxNikJLyogU2VyaWFsIEZyYW1lIFdpZHRoICovCisjZGVmaW5lIFNTUFNQX0RNWVNUT1AoeCkJKCh4KSA8PCAyMykJLyogRHVtbXkgU3RvcCAqLworI2RlZmluZSBTU1BTUF9GU1JUCQkoMSA8PCAyNSkJLyogRnJhbWUgU3luYyBSZWxhdGl2ZSBUaW1pbmcgKi8KKworLyogUFhBM3h4ICovCisjZGVmaW5lIFNTUFNQX0VETVlTVFJUKHgpCSgoeCkgPDwgMjYpICAgICAvKiBFeHRlbmRlZCBEdW1teSBTdGFydCAqLworI2RlZmluZSBTU1BTUF9FRE1ZU1RPUCh4KQkoKHgpIDw8IDI4KSAgICAgLyogRXh0ZW5kZWQgRHVtbXkgU3RvcCAqLworI2RlZmluZSBTU1BTUF9USU1JTkdfTUFTSwkoMHg3ZjgwMDFmMCkKKworI2RlZmluZSBTU0FDRF9TQ0RCCQkoMSA8PCAzKQkvKiBTU1BTWVNDTEsgRGl2aWRlciBCeXBhc3MgKi8KKyNkZWZpbmUgU1NBQ0RfQUNQUyh4KQkJKCh4KSA8PCA0KQkvKiBBdWRpbyBjbG9jayBQTEwgc2VsZWN0ICovCisjZGVmaW5lIFNTQUNEX0FDRFMoeCkJCSgoeCkgPDwgMCkJLyogQXVkaW8gY2xvY2sgZGl2aWRlciBzZWxlY3QgKi8KKyNkZWZpbmUgU1NBQ0RfU0NEWDgJCSgxIDw8IDcpCS8qIFNZU0NMSyBkaXZpc2lvbiByYXRpbyBzZWxlY3QgKi8KKworZW51bSBweGFfc3NwX3R5cGUgeworCVNTUF9VTkRFRklORUQgPSAwLAorCVBYQTI1eF9TU1AsICAvKiBweGEgMjEwLCAyNTAsIDI1NSwgMjZ4ICovCisJUFhBMjV4X05TU1AsIC8qIHB4YSAyNTUsIDI2eCAoaW5jbHVkaW5nIEFTU1ApICovCisJUFhBMjd4X1NTUCwKKwlQWEExNjhfU1NQLAorCUNFNDEwMF9TU1AsCit9OworCitzdHJ1Y3Qgc3NwX2RldmljZSB7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKwlzdHJ1Y3QgbGlzdF9oZWFkCW5vZGU7CisKKwlzdHJ1Y3QgY2xrCSpjbGs7CisJdm9pZCBfX2lvbWVtCSptbWlvX2Jhc2U7CisJdW5zaWduZWQgbG9uZwlwaHlzX2Jhc2U7CisKKwljb25zdCBjaGFyCSpsYWJlbDsKKwlpbnQJCXBvcnRfaWQ7CisJaW50CQl0eXBlOworCWludAkJdXNlX2NvdW50OworCWludAkJaXJxOworCWludAkJZHJjbXJfcng7CisJaW50CQlkcmNtcl90eDsKK307CisKKy8qKgorICogcHhhX3NzcF93cml0ZV9yZWcgLSBXcml0ZSB0byBhIFNTUCByZWdpc3RlcgorICoKKyAqIEBkZXY6IFNTUCBkZXZpY2UgdG8gYWNjZXNzCisgKiBAcmVnOiBSZWdpc3RlciB0byB3cml0ZSB0bworICogQHZhbDogVmFsdWUgdG8gYmUgd3JpdHRlbi4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHB4YV9zc3Bfd3JpdGVfcmVnKHN0cnVjdCBzc3BfZGV2aWNlICpkZXYsIHUzMiByZWcsIHUzMiB2YWwpCit7CisJX19yYXdfd3JpdGVsKHZhbCwgZGV2LT5tbWlvX2Jhc2UgKyByZWcpOworfQorCisvKioKKyAqIHB4YV9zc3BfcmVhZF9yZWcgLSBSZWFkIGZyb20gYSBTU1AgcmVnaXN0ZXIKKyAqCisgKiBAZGV2OiBTU1AgZGV2aWNlIHRvIGFjY2VzcworICogQHJlZzogUmVnaXN0ZXIgdG8gcmVhZCBmcm9tCisgKi8KK3N0YXRpYyBpbmxpbmUgdTMyIHB4YV9zc3BfcmVhZF9yZWcoc3RydWN0IHNzcF9kZXZpY2UgKmRldiwgdTMyIHJlZykKK3sKKwlyZXR1cm4gX19yYXdfcmVhZGwoZGV2LT5tbWlvX2Jhc2UgKyByZWcpOworfQorCitzdHJ1Y3Qgc3NwX2RldmljZSAqcHhhX3NzcF9yZXF1ZXN0KGludCBwb3J0LCBjb25zdCBjaGFyICpsYWJlbCk7Cit2b2lkIHB4YV9zc3BfZnJlZShzdHJ1Y3Qgc3NwX2RldmljZSAqKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yY3VsaXN0LmggYi9pbmNsdWRlL2xpbnV4L3JjdWxpc3QuaAppbmRleCBmMzFlZjYxLi4yZGVhOTRmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JjdWxpc3QuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JjdWxpc3QuaApAQCAtMjQxLDExICsyNDEsNiBAQAogI2RlZmluZSBsaXN0X2ZpcnN0X2VudHJ5X3JjdShwdHIsIHR5cGUsIG1lbWJlcikgXAogCWxpc3RfZW50cnlfcmN1KChwdHIpLT5uZXh0LCB0eXBlLCBtZW1iZXIpCiAKLSNkZWZpbmUgX19saXN0X2Zvcl9lYWNoX3JjdShwb3MsIGhlYWQpIFwKLQlmb3IgKHBvcyA9IHJjdV9kZXJlZmVyZW5jZV9yYXcobGlzdF9uZXh0X3JjdShoZWFkKSk7IFwKLQkJcG9zICE9IChoZWFkKTsgXAotCQlwb3MgPSByY3VfZGVyZWZlcmVuY2VfcmF3KGxpc3RfbmV4dF9yY3UoKHBvcykpKQotCiAvKioKICAqIGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1CS0JaXRlcmF0ZSBvdmVyIHJjdSBsaXN0IG9mIGdpdmVuIHR5cGUKICAqIEBwb3M6CXRoZSB0eXBlICogdG8gdXNlIGFzIGEgbG9vcCBjdXJzb3IuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JjdWxpc3RfYmwuaCBiL2luY2x1ZGUvbGludXgvcmN1bGlzdF9ibC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4NzJiNDkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3JjdWxpc3RfYmwuaApAQCAtMCwwICsxLDEyNyBAQAorI2lmbmRlZiBfTElOVVhfUkNVTElTVF9CTF9ICisjZGVmaW5lIF9MSU5VWF9SQ1VMSVNUX0JMX0gKKworLyoKKyAqIFJDVS1wcm90ZWN0ZWQgYmwgbGlzdCB2ZXJzaW9uLiBTZWUgaW5jbHVkZS9saW51eC9saXN0X2JsLmguCisgKi8KKyNpbmNsdWRlIDxsaW51eC9saXN0X2JsLmg+CisjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KKworc3RhdGljIGlubGluZSB2b2lkIGhsaXN0X2JsX3NldF9maXJzdF9yY3Uoc3RydWN0IGhsaXN0X2JsX2hlYWQgKmgsCisJCQkJCXN0cnVjdCBobGlzdF9ibF9ub2RlICpuKQoreworCUxJU1RfQkxfQlVHX09OKCh1bnNpZ25lZCBsb25nKW4gJiBMSVNUX0JMX0xPQ0tNQVNLKTsKKwlMSVNUX0JMX0JVR19PTighKCh1bnNpZ25lZCBsb25nKWgtPmZpcnN0ICYgTElTVF9CTF9MT0NLTUFTSykpOworCXJjdV9hc3NpZ25fcG9pbnRlcihoLT5maXJzdCwKKwkJKHN0cnVjdCBobGlzdF9ibF9ub2RlICopKCh1bnNpZ25lZCBsb25nKW4gfCBMSVNUX0JMX0xPQ0tNQVNLKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGhsaXN0X2JsX25vZGUgKmhsaXN0X2JsX2ZpcnN0X3JjdShzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqaCkKK3sKKwlyZXR1cm4gKHN0cnVjdCBobGlzdF9ibF9ub2RlICopCisJCSgodW5zaWduZWQgbG9uZylyY3VfZGVyZWZlcmVuY2UoaC0+Zmlyc3QpICYgfkxJU1RfQkxfTE9DS01BU0spOworfQorCisvKioKKyAqIGhsaXN0X2JsX2RlbF9pbml0X3JjdSAtIGRlbGV0ZXMgZW50cnkgZnJvbSBoYXNoIGxpc3Qgd2l0aCByZS1pbml0aWFsaXphdGlvbgorICogQG46IHRoZSBlbGVtZW50IHRvIGRlbGV0ZSBmcm9tIHRoZSBoYXNoIGxpc3QuCisgKgorICogTm90ZTogaGxpc3RfYmxfdW5oYXNoZWQoKSBvbiB0aGUgbm9kZSByZXR1cm5zIHRydWUgYWZ0ZXIgdGhpcy4gSXQgaXMKKyAqIHVzZWZ1bCBmb3IgUkNVIGJhc2VkIHJlYWQgbG9ja2ZyZWUgdHJhdmVyc2FsIGlmIHRoZSB3cml0ZXIgc2lkZQorICogbXVzdCBrbm93IGlmIHRoZSBsaXN0IGVudHJ5IGlzIHN0aWxsIGhhc2hlZCBvciBhbHJlYWR5IHVuaGFzaGVkLgorICoKKyAqIEluIHBhcnRpY3VsYXIsIGl0IG1lYW5zIHRoYXQgd2UgY2FuIG5vdCBwb2lzb24gdGhlIGZvcndhcmQgcG9pbnRlcnMKKyAqIHRoYXQgbWF5IHN0aWxsIGJlIHVzZWQgZm9yIHdhbGtpbmcgdGhlIGhhc2ggbGlzdCBhbmQgd2UgY2FuIG9ubHkKKyAqIHplcm8gdGhlIHBwcmV2IHBvaW50ZXIgc28gbGlzdF91bmhhc2hlZCgpIHdpbGwgcmV0dXJuIHRydWUgYWZ0ZXIKKyAqIHRoaXMuCisgKgorICogVGhlIGNhbGxlciBtdXN0IHRha2Ugd2hhdGV2ZXIgcHJlY2F1dGlvbnMgYXJlIG5lY2Vzc2FyeSAoc3VjaCBhcworICogaG9sZGluZyBhcHByb3ByaWF0ZSBsb2NrcykgdG8gYXZvaWQgcmFjaW5nIHdpdGggYW5vdGhlcgorICogbGlzdC1tdXRhdGlvbiBwcmltaXRpdmUsIHN1Y2ggYXMgaGxpc3RfYmxfYWRkX2hlYWRfcmN1KCkgb3IKKyAqIGhsaXN0X2JsX2RlbF9yY3UoKSwgcnVubmluZyBvbiB0aGlzIHNhbWUgbGlzdC4gIEhvd2V2ZXIsIGl0IGlzCisgKiBwZXJmZWN0bHkgbGVnYWwgdG8gcnVuIGNvbmN1cnJlbnRseSB3aXRoIHRoZSBfcmN1IGxpc3QtdHJhdmVyc2FsCisgKiBwcmltaXRpdmVzLCBzdWNoIGFzIGhsaXN0X2JsX2Zvcl9lYWNoX2VudHJ5X3JjdSgpLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaGxpc3RfYmxfZGVsX2luaXRfcmN1KHN0cnVjdCBobGlzdF9ibF9ub2RlICpuKQoreworCWlmICghaGxpc3RfYmxfdW5oYXNoZWQobikpIHsKKwkJX19obGlzdF9ibF9kZWwobik7CisJCW4tPnBwcmV2ID0gTlVMTDsKKwl9Cit9CisKKy8qKgorICogaGxpc3RfYmxfZGVsX3JjdSAtIGRlbGV0ZXMgZW50cnkgZnJvbSBoYXNoIGxpc3Qgd2l0aG91dCByZS1pbml0aWFsaXphdGlvbgorICogQG46IHRoZSBlbGVtZW50IHRvIGRlbGV0ZSBmcm9tIHRoZSBoYXNoIGxpc3QuCisgKgorICogTm90ZTogaGxpc3RfYmxfdW5oYXNoZWQoKSBvbiBlbnRyeSBkb2VzIG5vdCByZXR1cm4gdHJ1ZSBhZnRlciB0aGlzLAorICogdGhlIGVudHJ5IGlzIGluIGFuIHVuZGVmaW5lZCBzdGF0ZS4gSXQgaXMgdXNlZnVsIGZvciBSQ1UgYmFzZWQKKyAqIGxvY2tmcmVlIHRyYXZlcnNhbC4KKyAqCisgKiBJbiBwYXJ0aWN1bGFyLCBpdCBtZWFucyB0aGF0IHdlIGNhbiBub3QgcG9pc29uIHRoZSBmb3J3YXJkCisgKiBwb2ludGVycyB0aGF0IG1heSBzdGlsbCBiZSB1c2VkIGZvciB3YWxraW5nIHRoZSBoYXNoIGxpc3QuCisgKgorICogVGhlIGNhbGxlciBtdXN0IHRha2Ugd2hhdGV2ZXIgcHJlY2F1dGlvbnMgYXJlIG5lY2Vzc2FyeQorICogKHN1Y2ggYXMgaG9sZGluZyBhcHByb3ByaWF0ZSBsb2NrcykgdG8gYXZvaWQgcmFjaW5nCisgKiB3aXRoIGFub3RoZXIgbGlzdC1tdXRhdGlvbiBwcmltaXRpdmUsIHN1Y2ggYXMgaGxpc3RfYmxfYWRkX2hlYWRfcmN1KCkKKyAqIG9yIGhsaXN0X2JsX2RlbF9yY3UoKSwgcnVubmluZyBvbiB0aGlzIHNhbWUgbGlzdC4KKyAqIEhvd2V2ZXIsIGl0IGlzIHBlcmZlY3RseSBsZWdhbCB0byBydW4gY29uY3VycmVudGx5IHdpdGgKKyAqIHRoZSBfcmN1IGxpc3QtdHJhdmVyc2FsIHByaW1pdGl2ZXMsIHN1Y2ggYXMKKyAqIGhsaXN0X2JsX2Zvcl9lYWNoX2VudHJ5KCkuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBobGlzdF9ibF9kZWxfcmN1KHN0cnVjdCBobGlzdF9ibF9ub2RlICpuKQoreworCV9faGxpc3RfYmxfZGVsKG4pOworCW4tPnBwcmV2ID0gTElTVF9QT0lTT04yOworfQorCisvKioKKyAqIGhsaXN0X2JsX2FkZF9oZWFkX3JjdQorICogQG46IHRoZSBlbGVtZW50IHRvIGFkZCB0byB0aGUgaGFzaCBsaXN0LgorICogQGg6IHRoZSBsaXN0IHRvIGFkZCB0by4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIEFkZHMgdGhlIHNwZWNpZmllZCBlbGVtZW50IHRvIHRoZSBzcGVjaWZpZWQgaGxpc3RfYmwsCisgKiB3aGlsZSBwZXJtaXR0aW5nIHJhY2luZyB0cmF2ZXJzYWxzLgorICoKKyAqIFRoZSBjYWxsZXIgbXVzdCB0YWtlIHdoYXRldmVyIHByZWNhdXRpb25zIGFyZSBuZWNlc3NhcnkKKyAqIChzdWNoIGFzIGhvbGRpbmcgYXBwcm9wcmlhdGUgbG9ja3MpIHRvIGF2b2lkIHJhY2luZworICogd2l0aCBhbm90aGVyIGxpc3QtbXV0YXRpb24gcHJpbWl0aXZlLCBzdWNoIGFzIGhsaXN0X2JsX2FkZF9oZWFkX3JjdSgpCisgKiBvciBobGlzdF9ibF9kZWxfcmN1KCksIHJ1bm5pbmcgb24gdGhpcyBzYW1lIGxpc3QuCisgKiBIb3dldmVyLCBpdCBpcyBwZXJmZWN0bHkgbGVnYWwgdG8gcnVuIGNvbmN1cnJlbnRseSB3aXRoCisgKiB0aGUgX3JjdSBsaXN0LXRyYXZlcnNhbCBwcmltaXRpdmVzLCBzdWNoIGFzCisgKiBobGlzdF9ibF9mb3JfZWFjaF9lbnRyeV9yY3UoKSwgdXNlZCB0byBwcmV2ZW50IG1lbW9yeS1jb25zaXN0ZW5jeQorICogcHJvYmxlbXMgb24gQWxwaGEgQ1BVcy4gIFJlZ2FyZGxlc3Mgb2YgdGhlIHR5cGUgb2YgQ1BVLCB0aGUKKyAqIGxpc3QtdHJhdmVyc2FsIHByaW1pdGl2ZSBtdXN0IGJlIGd1YXJkZWQgYnkgcmN1X3JlYWRfbG9jaygpLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaGxpc3RfYmxfYWRkX2hlYWRfcmN1KHN0cnVjdCBobGlzdF9ibF9ub2RlICpuLAorCQkJCQlzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqaCkKK3sKKwlzdHJ1Y3QgaGxpc3RfYmxfbm9kZSAqZmlyc3Q7CisKKwkvKiBkb24ndCBuZWVkIGhsaXN0X2JsX2ZpcnN0X3JjdSBiZWNhdXNlIHdlJ3JlIHVuZGVyIGxvY2sgKi8KKwlmaXJzdCA9IGhsaXN0X2JsX2ZpcnN0KGgpOworCisJbi0+bmV4dCA9IGZpcnN0OworCWlmIChmaXJzdCkKKwkJZmlyc3QtPnBwcmV2ID0gJm4tPm5leHQ7CisJbi0+cHByZXYgPSAmaC0+Zmlyc3Q7CisKKwkvKiBuZWVkIF9yY3UgYmVjYXVzZSB3ZSBjYW4gaGF2ZSBjb25jdXJyZW50IGxvY2sgZnJlZSByZWFkZXJzICovCisJaGxpc3RfYmxfc2V0X2ZpcnN0X3JjdShoLCBuKTsKK30KKy8qKgorICogaGxpc3RfYmxfZm9yX2VhY2hfZW50cnlfcmN1IC0gaXRlcmF0ZSBvdmVyIHJjdSBsaXN0IG9mIGdpdmVuIHR5cGUKKyAqIEB0cG9zOgl0aGUgdHlwZSAqIHRvIHVzZSBhcyBhIGxvb3AgY3Vyc29yLgorICogQHBvczoJdGhlICZzdHJ1Y3QgaGxpc3RfYmxfbm9kZSB0byB1c2UgYXMgYSBsb29wIGN1cnNvci4KKyAqIEBoZWFkOgl0aGUgaGVhZCBmb3IgeW91ciBsaXN0LgorICogQG1lbWJlcjoJdGhlIG5hbWUgb2YgdGhlIGhsaXN0X2JsX25vZGUgd2l0aGluIHRoZSBzdHJ1Y3QuCisgKgorICovCisjZGVmaW5lIGhsaXN0X2JsX2Zvcl9lYWNoX2VudHJ5X3JjdSh0cG9zLCBwb3MsIGhlYWQsIG1lbWJlcikJCVwKKwlmb3IgKHBvcyA9IGhsaXN0X2JsX2ZpcnN0X3JjdShoZWFkKTsJCQkJXAorCQlwb3MgJiYJCQkJCQkJXAorCQkoeyB0cG9zID0gaGxpc3RfYmxfZW50cnkocG9zLCB0eXBlb2YoKnRwb3MpLCBtZW1iZXIpOyAxOyB9KTsgXAorCQlwb3MgPSByY3VfZGVyZWZlcmVuY2VfcmF3KHBvcy0+bmV4dCkpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oIGIvaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oCmluZGV4IDAzY2RhN2IuLmFmNTYxNDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmN1cGRhdGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgKQEAgLTQ3LDYgKzQ3LDggQEAKIGV4dGVybiBpbnQgcmN1dG9ydHVyZV9ydW5uYWJsZTsgLyogZm9yIHN5c2N0bCAqLwogI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCAqLwogCisjZGVmaW5lIFVJTlRfQ01QX0dFKGEsIGIpCShVSU5UX01BWCAvIDIgPj0gKGEpIC0gKGIpKQorI2RlZmluZSBVSU5UX0NNUF9MVChhLCBiKQkoVUlOVF9NQVggLyAyIDwgKGEpIC0gKGIpKQogI2RlZmluZSBVTE9OR19DTVBfR0UoYSwgYikJKFVMT05HX01BWCAvIDIgPj0gKGEpIC0gKGIpKQogI2RlZmluZSBVTE9OR19DTVBfTFQoYSwgYikJKFVMT05HX01BWCAvIDIgPCAoYSkgLSAoYikpCiAKQEAgLTY2LDcgKzY4LDYgQEAKIGV4dGVybiB2b2lkIHN5bmNocm9uaXplX3NjaGVkKHZvaWQpOwogZXh0ZXJuIHZvaWQgcmN1X2JhcnJpZXJfYmgodm9pZCk7CiBleHRlcm4gdm9pZCByY3VfYmFycmllcl9zY2hlZCh2b2lkKTsKLWV4dGVybiB2b2lkIHN5bmNocm9uaXplX3NjaGVkX2V4cGVkaXRlZCh2b2lkKTsKIGV4dGVybiBpbnQgc2NoZWRfZXhwZWRpdGVkX3RvcnR1cmVfc3RhdHMoY2hhciAqcGFnZSk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3JjdV9yZWFkX2xvY2tfYmgodm9pZCkKQEAgLTExOCw3ICsxMTksNiBAQAogI2VuZGlmIC8qICNlbHNlICNpZmRlZiBDT05GSUdfUFJFRU1QVF9SQ1UgKi8KIAogLyogSW50ZXJuYWwgdG8ga2VybmVsICovCi1leHRlcm4gdm9pZCByY3VfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIHJjdV9zY2hlZF9xcyhpbnQgY3B1KTsKIGV4dGVybiB2b2lkIHJjdV9iaF9xcyhpbnQgY3B1KTsKIGV4dGVybiB2b2lkIHJjdV9jaGVja19jYWxsYmFja3MoaW50IGNwdSwgaW50IHVzZXIpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yY3V0aW55LmggYi9pbmNsdWRlL2xpbnV4L3JjdXRpbnkuaAppbmRleCAxMzg3N2NiLi4zMGViZDdjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JjdXRpbnkuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JjdXRpbnkuaApAQCAtMjcsNyArMjcsOSBAQAogCiAjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KIAotI2RlZmluZSByY3VfaW5pdF9zY2hlZCgpCWRvIHsgfSB3aGlsZSAoMCkKK3N0YXRpYyBpbmxpbmUgdm9pZCByY3VfaW5pdCh2b2lkKQoreworfQogCiAjaWZkZWYgQ09ORklHX1RJTllfUkNVCiAKQEAgLTU4LDYgKzYwLDExIEBACiAJc3luY2hyb25pemVfc2NoZWQoKTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIHN5bmNocm9uaXplX3NjaGVkX2V4cGVkaXRlZCh2b2lkKQoreworCXN5bmNocm9uaXplX3NjaGVkKCk7Cit9CisKICNpZmRlZiBDT05GSUdfVElOWV9SQ1UKIAogc3RhdGljIGlubGluZSB2b2lkIHJjdV9wcmVlbXB0X25vdGVfY29udGV4dF9zd2l0Y2godm9pZCkKQEAgLTEyNSwxNiArMTMyLDEyIEBACiB9CiAKICNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQwotCiBleHRlcm4gaW50IHJjdV9zY2hlZHVsZXJfYWN0aXZlIF9fcmVhZF9tb3N0bHk7CiBleHRlcm4gdm9pZCByY3Vfc2NoZWR1bGVyX3N0YXJ0aW5nKHZvaWQpOwotCiAjZWxzZSAvKiAjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgKi8KLQogc3RhdGljIGlubGluZSB2b2lkIHJjdV9zY2hlZHVsZXJfc3RhcnRpbmcodm9pZCkKIHsKIH0KLQogI2VuZGlmIC8qICNlbHNlICNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQyAqLwogCiAjZW5kaWYgLyogX19MSU5VWF9SQ1VUSU5ZX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmN1dHJlZS5oIGIvaW5jbHVkZS9saW51eC9yY3V0cmVlLmgKaW5kZXggOTU1MThlNi4uM2E5MzM0OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yY3V0cmVlLmgKKysrIGIvaW5jbHVkZS9saW51eC9yY3V0cmVlLmgKQEAgLTMwLDYgKzMwLDcgQEAKICNpZm5kZWYgX19MSU5VWF9SQ1VUUkVFX0gKICNkZWZpbmUgX19MSU5VWF9SQ1VUUkVFX0gKIAorZXh0ZXJuIHZvaWQgcmN1X2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCByY3Vfbm90ZV9jb250ZXh0X3N3aXRjaChpbnQgY3B1KTsKIGV4dGVybiBpbnQgcmN1X25lZWRzX2NwdShpbnQgY3B1KTsKIGV4dGVybiB2b2lkIHJjdV9jcHVfc3RhbGxfcmVzZXQodm9pZCk7CkBAIC00Nyw2ICs0OCw3IEBACiAjZW5kaWYgLyogI2Vsc2UgI2lmZGVmIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVICovCiAKIGV4dGVybiB2b2lkIHN5bmNocm9uaXplX3JjdV9iaCh2b2lkKTsKK2V4dGVybiB2b2lkIHN5bmNocm9uaXplX3NjaGVkX2V4cGVkaXRlZCh2b2lkKTsKIGV4dGVybiB2b2lkIHN5bmNocm9uaXplX3JjdV9leHBlZGl0ZWQodm9pZCk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzeW5jaHJvbml6ZV9yY3VfYmhfZXhwZWRpdGVkKHZvaWQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX3hhdHRyLmggYi9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX3hhdHRyLmgKaW5kZXggYjJjZjIwOC4uM2I5NGM5MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yZWlzZXJmc194YXR0ci5oCisrKyBiL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfeGF0dHIuaApAQCAtNDEsNyArNDEsNyBAQAogaW50IHJlaXNlcmZzX2xvb2t1cF9wcml2cm9vdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKIGludCByZWlzZXJmc19kZWxldGVfeGF0dHJzKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogaW50IHJlaXNlcmZzX2Nob3duX3hhdHRycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaWF0dHIgKmF0dHJzKTsKLWludCByZWlzZXJmc19wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKTsKK2ludCByZWlzZXJmc19wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOwogCiAjaWZkZWYgQ09ORklHX1JFSVNFUkZTX0ZTX1hBVFRSCiAjZGVmaW5lIGhhc194YXR0cl9kaXIoaW5vZGUpIChSRUlTRVJGU19JKGlub2RlKS0+aV9mbGFncyAmIGlfaGFzX3hhdHRyX2RpcikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmZraWxsLmggYi9pbmNsdWRlL2xpbnV4L3Jma2lsbC5oCmluZGV4IDA4YzMyZTQuLmM2YzYwODQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmZraWxsLmgKKysrIGIvaW5jbHVkZS9saW51eC9yZmtpbGwuaApAQCAtMzU0LDM3ICszNTQsNiBAQAogfQogI2VuZGlmIC8qIFJGS0lMTCB8fCBSRktJTExfTU9EVUxFICovCiAKLQotI2lmZGVmIENPTkZJR19SRktJTExfTEVEUwotLyoqCi0gKiByZmtpbGxfZ2V0X2xlZF90cmlnZ2VyX25hbWUgLSBHZXQgdGhlIExFRCB0cmlnZ2VyIG5hbWUgZm9yIHRoZSBidXR0b24ncyBMRUQuCi0gKiBUaGlzIGZ1bmN0aW9uIG1pZ2h0IHJldHVybiBhIE5VTEwgcG9pbnRlciBpZiByZWdpc3RlcmluZyBvZiB0aGUKLSAqIExFRCB0cmlnZ2VyIGZhaWxlZC4gVXNlIHRoaXMgYXMgImRlZmF1bHRfdHJpZ2dlciIgZm9yIHRoZSBMRUQuCi0gKi8KLWNvbnN0IGNoYXIgKnJma2lsbF9nZXRfbGVkX3RyaWdnZXJfbmFtZShzdHJ1Y3QgcmZraWxsICpyZmtpbGwpOwotCi0vKioKLSAqIHJma2lsbF9zZXRfbGVkX3RyaWdnZXJfbmFtZSAtLSBzZXQgdGhlIExFRCB0cmlnZ2VyIG5hbWUKLSAqIEByZmtpbGw6IHJma2lsbCBzdHJ1Y3QKLSAqIEBuYW1lOiBMRUQgdHJpZ2dlciBuYW1lCi0gKgotICogVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBMRUQgdHJpZ2dlciBuYW1lIG9mIHRoZSByYWRpbyBMRUQKLSAqIHRyaWdnZXIgdGhhdCByZmtpbGwgY3JlYXRlcy4gSXQgaXMgb3B0aW9uYWwsIGJ1dCBpZiBjYWxsZWQKLSAqIG11c3QgYmUgY2FsbGVkIGJlZm9yZSByZmtpbGxfcmVnaXN0ZXIoKSB0byBiZSBlZmZlY3RpdmUuCi0gKi8KLXZvaWQgcmZraWxsX3NldF9sZWRfdHJpZ2dlcl9uYW1lKHN0cnVjdCByZmtpbGwgKnJma2lsbCwgY29uc3QgY2hhciAqbmFtZSk7Ci0jZWxzZQotc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpyZmtpbGxfZ2V0X2xlZF90cmlnZ2VyX25hbWUoc3RydWN0IHJma2lsbCAqcmZraWxsKQotewotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLXJma2lsbF9zZXRfbGVkX3RyaWdnZXJfbmFtZShzdHJ1Y3QgcmZraWxsICpyZmtpbGwsIGNvbnN0IGNoYXIgKm5hbWUpCi17Ci19Ci0jZW5kaWYKLQogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIAogI2VuZGlmIC8qIFJGS0lMTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmggYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKaW5kZXggMjIzODc0NS4uMzQxYWNiYmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKQEAgLTMxNiw2ICszMTYsNyBAQAogCQkJCSAgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpOwogZXh0ZXJuIHVuc2lnbmVkIGludCAgc29mdGxvY2t1cF9wYW5pYzsKIGV4dGVybiBpbnQgc29mdGxvY2t1cF90aHJlc2g7Cit2b2lkIGxvY2t1cF9kZXRlY3Rvcl9pbml0KHZvaWQpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCB0b3VjaF9zb2Z0bG9ja3VwX3dhdGNoZG9nKHZvaWQpCiB7CkBAIC0zMjYsNiArMzI3LDkgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCB0b3VjaF9hbGxfc29mdGxvY2t1cF93YXRjaGRvZ3Modm9pZCkKIHsKIH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBsb2NrdXBfZGV0ZWN0b3JfaW5pdCh2b2lkKQoreworfQogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfREVURUNUX0hVTkdfVEFTSwpAQCAtNTA5LDYgKzUxMyw4IEBACiAJc3BpbmxvY2tfdCBsb2NrOwogfTsKIAorc3RydWN0IGF1dG9ncm91cDsKKwogLyoKICAqIE5PVEUhICJzaWduYWxfc3RydWN0IiBkb2VzIG5vdCBoYXZlIGl0J3Mgb3duCiAgKiBsb2NraW5nLCBiZWNhdXNlIGEgc2hhcmVkIHNpZ25hbF9zdHJ1Y3QgYWx3YXlzCkBAIC01NzYsNiArNTgyLDkgQEAKIAogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7IC8qIE5VTEwgaWYgbm8gdHR5ICovCiAKKyNpZmRlZiBDT05GSUdfU0NIRURfQVVUT0dST1VQCisJc3RydWN0IGF1dG9ncm91cCAqYXV0b2dyb3VwOworI2VuZGlmCiAJLyoKIAkgKiBDdW11bGF0aXZlIHJlc291cmNlIGNvdW50ZXJzIGZvciBkZWFkIHRocmVhZHMgaW4gdGhlIGdyb3VwLAogCSAqIGFuZCBmb3IgcmVhcGVkIGRlYWQgY2hpbGQgcHJvY2Vzc2VzIGZvcmtlZCBieSB0aGlzIGdyb3VwLgpAQCAtMTIyOSwxMyArMTIzOCwxOCBAQAogI2lmZGVmIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVCiAJc3RydWN0IHJjdV9ub2RlICpyY3VfYmxvY2tlZF9ub2RlOwogI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSAqLworI2lmZGVmIENPTkZJR19SQ1VfQk9PU1QKKwlzdHJ1Y3QgcnRfbXV0ZXggKnJjdV9ib29zdF9tdXRleDsKKyNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX1JDVV9CT09TVCAqLwogCiAjaWYgZGVmaW5lZChDT05GSUdfU0NIRURTVEFUUykgfHwgZGVmaW5lZChDT05GSUdfVEFTS19ERUxBWV9BQ0NUKQogCXN0cnVjdCBzY2hlZF9pbmZvIHNjaGVkX2luZm87CiAjZW5kaWYKIAogCXN0cnVjdCBsaXN0X2hlYWQgdGFza3M7CisjaWZkZWYgQ09ORklHX1NNUAogCXN0cnVjdCBwbGlzdF9ub2RlIHB1c2hhYmxlX3Rhc2tzOworI2VuZGlmCiAKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSwgKmFjdGl2ZV9tbTsKICNpZiBkZWZpbmVkKFNQTElUX1JTU19DT1VOVElORykKQEAgLTE3NTksNyArMTc3Myw4IEBACiAjaWZkZWYgQ09ORklHX1BSRUVNUFRfUkNVCiAKICNkZWZpbmUgUkNVX1JFQURfVU5MT0NLX0JMT0NLRUQgKDEgPDwgMCkgLyogYmxvY2tlZCB3aGlsZSBpbiBSQ1UgcmVhZC1zaWRlLiAqLwotI2RlZmluZSBSQ1VfUkVBRF9VTkxPQ0tfTkVFRF9RUyAoMSA8PCAxKSAvKiBSQ1UgY29yZSBuZWVkcyBDUFUgcmVzcG9uc2UuICovCisjZGVmaW5lIFJDVV9SRUFEX1VOTE9DS19CT09TVEVEICgxIDw8IDEpIC8qIGJvb3N0ZWQgd2hpbGUgaW4gUkNVIHJlYWQtc2lkZS4gKi8KKyNkZWZpbmUgUkNVX1JFQURfVU5MT0NLX05FRURfUVMgKDEgPDwgMikgLyogUkNVIGNvcmUgbmVlZHMgQ1BVIHJlc3BvbnNlLiAqLwogCiBzdGF0aWMgaW5saW5lIHZvaWQgcmN1X2NvcHlfcHJvY2VzcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiB7CkBAIC0xNzY3LDcgKzE3ODIsMTAgQEAKIAlwLT5yY3VfcmVhZF91bmxvY2tfc3BlY2lhbCA9IDA7CiAjaWZkZWYgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UKIAlwLT5yY3VfYmxvY2tlZF9ub2RlID0gTlVMTDsKLSNlbmRpZgorI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSAqLworI2lmZGVmIENPTkZJR19SQ1VfQk9PU1QKKwlwLT5yY3VfYm9vc3RfbXV0ZXggPSBOVUxMOworI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfUkNVX0JPT1NUICovCiAJSU5JVF9MSVNUX0hFQUQoJnAtPnJjdV9ub2RlX2VudHJ5KTsKIH0KIApAQCAtMTg3MiwxNCArMTg5MCwxMSBAQAogZXh0ZXJuIHZvaWQgc2NoZWRfY2xvY2tfaWRsZV93YWtldXBfZXZlbnQodTY0IGRlbHRhX25zKTsKIAogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQotZXh0ZXJuIHZvaWQgbW92ZV90YXNrX29mZl9kZWFkX2NwdShpbnQgZGVhZF9jcHUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7CiBleHRlcm4gdm9pZCBpZGxlX3Rhc2tfZXhpdCh2b2lkKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgaWRsZV90YXNrX2V4aXQodm9pZCkge30KICNlbmRpZgogCi1leHRlcm4gdm9pZCBzY2hlZF9pZGxlX25leHQodm9pZCk7Ci0KICNpZiBkZWZpbmVkKENPTkZJR19OT19IWikgJiYgZGVmaW5lZChDT05GSUdfU01QKQogZXh0ZXJuIHZvaWQgd2FrZV91cF9pZGxlX2NwdShpbnQgY3B1KTsKICNlbHNlCkBAIC0xODg5LDggKzE5MDQsNiBAQAogZXh0ZXJuIHVuc2lnbmVkIGludCBzeXNjdGxfc2NoZWRfbGF0ZW5jeTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgc3lzY3RsX3NjaGVkX21pbl9ncmFudWxhcml0eTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgc3lzY3RsX3NjaGVkX3dha2V1cF9ncmFudWxhcml0eTsKLWV4dGVybiB1bnNpZ25lZCBpbnQgc3lzY3RsX3NjaGVkX3NoYXJlc19yYXRlbGltaXQ7Ci1leHRlcm4gdW5zaWduZWQgaW50IHN5c2N0bF9zY2hlZF9zaGFyZXNfdGhyZXNoOwogZXh0ZXJuIHVuc2lnbmVkIGludCBzeXNjdGxfc2NoZWRfY2hpbGRfcnVuc19maXJzdDsKIAogZW51bSBzY2hlZF90dW5hYmxlX3NjYWxpbmcgewpAQCAtMTkwNiw2ICsxOTE5LDcgQEAKIGV4dGVybiB1bnNpZ25lZCBpbnQgc3lzY3RsX3NjaGVkX25yX21pZ3JhdGU7CiBleHRlcm4gdW5zaWduZWQgaW50IHN5c2N0bF9zY2hlZF90aW1lX2F2ZzsKIGV4dGVybiB1bnNpZ25lZCBpbnQgc3lzY3RsX3RpbWVyX21pZ3JhdGlvbjsKK2V4dGVybiB1bnNpZ25lZCBpbnQgc3lzY3RsX3NjaGVkX3NoYXJlc193aW5kb3c7CiAKIGludCBzY2hlZF9wcm9jX3VwZGF0ZV9oYW5kbGVyKHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsCiAJCXZvaWQgX191c2VyICpidWZmZXIsIHNpemVfdCAqbGVuZ3RoLApAQCAtMTkzMSw2ICsxOTQ1LDI0IEBACiAKIGV4dGVybiB1bnNpZ25lZCBpbnQgc3lzY3RsX3NjaGVkX2NvbXBhdF95aWVsZDsKIAorI2lmZGVmIENPTkZJR19TQ0hFRF9BVVRPR1JPVVAKK2V4dGVybiB1bnNpZ25lZCBpbnQgc3lzY3RsX3NjaGVkX2F1dG9ncm91cF9lbmFibGVkOworCitleHRlcm4gdm9pZCBzY2hlZF9hdXRvZ3JvdXBfY3JlYXRlX2F0dGFjaChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApOworZXh0ZXJuIHZvaWQgc2NoZWRfYXV0b2dyb3VwX2RldGFjaChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApOworZXh0ZXJuIHZvaWQgc2NoZWRfYXV0b2dyb3VwX2Zvcmsoc3RydWN0IHNpZ25hbF9zdHJ1Y3QgKnNpZyk7CitleHRlcm4gdm9pZCBzY2hlZF9hdXRvZ3JvdXBfZXhpdChzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCAqc2lnKTsKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworZXh0ZXJuIHZvaWQgcHJvY19zY2hlZF9hdXRvZ3JvdXBfc2hvd190YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IHNlcV9maWxlICptKTsKK2V4dGVybiBpbnQgcHJvY19zY2hlZF9hdXRvZ3JvdXBfc2V0X25pY2Uoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgKm5pY2UpOworI2VuZGlmCisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHNjaGVkX2F1dG9ncm91cF9jcmVhdGVfYXR0YWNoKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgc2NoZWRfYXV0b2dyb3VwX2RldGFjaChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIHsgfQorc3RhdGljIGlubGluZSB2b2lkIHNjaGVkX2F1dG9ncm91cF9mb3JrKHN0cnVjdCBzaWduYWxfc3RydWN0ICpzaWcpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIHNjaGVkX2F1dG9ncm91cF9leGl0KHN0cnVjdCBzaWduYWxfc3RydWN0ICpzaWcpIHsgfQorI2VuZGlmCisKICNpZmRlZiBDT05GSUdfUlRfTVVURVhFUwogZXh0ZXJuIGludCBydF9tdXRleF9nZXRwcmlvKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7CiBleHRlcm4gdm9pZCBydF9tdXRleF9zZXRwcmlvKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHByaW8pOwpAQCAtMTk0OSw5ICsxOTgxLDEwIEBACiBleHRlcm4gaW50IGNhbl9uaWNlKGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgY29uc3QgaW50IG5pY2UpOwogZXh0ZXJuIGludCB0YXNrX2N1cnIoY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICpwKTsKIGV4dGVybiBpbnQgaWRsZV9jcHUoaW50IGNwdSk7Ci1leHRlcm4gaW50IHNjaGVkX3NldHNjaGVkdWxlcihzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgaW50LCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKik7CitleHRlcm4gaW50IHNjaGVkX3NldHNjaGVkdWxlcihzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgaW50LAorCQkJICAgICAgY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICopOwogZXh0ZXJuIGludCBzY2hlZF9zZXRzY2hlZHVsZXJfbm9jaGVjayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgaW50LAotCQkJCSAgICAgIHN0cnVjdCBzY2hlZF9wYXJhbSAqKTsKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKik7CiBleHRlcm4gc3RydWN0IHRhc2tfc3RydWN0ICppZGxlX3Rhc2soaW50IGNwdSk7CiBleHRlcm4gc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyX3Rhc2soaW50IGNwdSk7CiBleHRlcm4gdm9pZCBzZXRfY3Vycl90YXNrKGludCBjcHUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7CkBAIC0yNDc4LDcgKzI1MTEsNyBAQAogCiAjaWZkZWYgQ09ORklHX0NHUk9VUF9TQ0hFRAogCi1leHRlcm4gc3RydWN0IHRhc2tfZ3JvdXAgaW5pdF90YXNrX2dyb3VwOworZXh0ZXJuIHN0cnVjdCB0YXNrX2dyb3VwIHJvb3RfdGFza19ncm91cDsKIAogZXh0ZXJuIHN0cnVjdCB0YXNrX2dyb3VwICpzY2hlZF9jcmVhdGVfZ3JvdXAoc3RydWN0IHRhc2tfZ3JvdXAgKnBhcmVudCk7CiBleHRlcm4gdm9pZCBzY2hlZF9kZXN0cm95X2dyb3VwKHN0cnVjdCB0YXNrX2dyb3VwICp0Zyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmggYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgKaW5kZXggZmQ0ZDU1Zi4uMWFjNDI0NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oCisrKyBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaApAQCAtNDU3LDcgKzQ1Nyw2IEBACiAgKgljYWxsZWQgd2hlbiB0aGUgYWN0dWFsIHJlYWQvd3JpdGUgb3BlcmF0aW9ucyBhcmUgcGVyZm9ybWVkLgogICoJQGlub2RlIGNvbnRhaW5zIHRoZSBpbm9kZSBzdHJ1Y3R1cmUgdG8gY2hlY2suCiAgKglAbWFzayBjb250YWlucyB0aGUgcGVybWlzc2lvbiBtYXNrLgotICoJQG5kIGNvbnRhaW5zIHRoZSBuYW1laWRhdGEgKG1heSBiZSBOVUxMKS4KICAqCVJldHVybiAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4KICAqIEBpbm9kZV9zZXRhdHRyOgogICoJQ2hlY2sgcGVybWlzc2lvbiBiZWZvcmUgc2V0dGluZyBmaWxlIGF0dHJpYnV0ZXMuICBOb3RlIHRoYXQgdGhlIGtlcm5lbApAQCAtNzk2LDggKzc5NSw5IEBACiAgKiBAdW5peF9zdHJlYW1fY29ubmVjdDoKICAqCUNoZWNrIHBlcm1pc3Npb25zIGJlZm9yZSBlc3RhYmxpc2hpbmcgYSBVbml4IGRvbWFpbiBzdHJlYW0gY29ubmVjdGlvbgogICoJYmV0d2VlbiBAc29jayBhbmQgQG90aGVyLgotICoJQHNvY2sgY29udGFpbnMgdGhlIHNvY2tldCBzdHJ1Y3R1cmUuCi0gKglAb3RoZXIgY29udGFpbnMgdGhlIHBlZXIgc29ja2V0IHN0cnVjdHVyZS4KKyAqCUBzb2NrIGNvbnRhaW5zIHRoZSBzb2NrIHN0cnVjdHVyZS4KKyAqCUBvdGhlciBjb250YWlucyB0aGUgcGVlciBzb2NrIHN0cnVjdHVyZS4KKyAqCUBuZXdzayBjb250YWlucyB0aGUgbmV3IHNvY2sgc3RydWN0dXJlLgogICoJUmV0dXJuIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLgogICogQHVuaXhfbWF5X3NlbmQ6CiAgKglDaGVjayBwZXJtaXNzaW9ucyBiZWZvcmUgY29ubmVjdGluZyBvciBzZW5kaW5nIGRhdGFncmFtcyBmcm9tIEBzb2NrIHRvCkBAIC0xNTY4LDggKzE1NjgsNyBAQAogCWludCAoKmlub2RlX2dldHNlY2N0eCkoc3RydWN0IGlub2RlICppbm9kZSwgdm9pZCAqKmN0eCwgdTMyICpjdHhsZW4pOwogCiAjaWZkZWYgQ09ORklHX1NFQ1VSSVRZX05FVFdPUksKLQlpbnQgKCp1bml4X3N0cmVhbV9jb25uZWN0KSAoc3RydWN0IHNvY2tldCAqc29jaywKLQkJCQkgICAgc3RydWN0IHNvY2tldCAqb3RoZXIsIHN0cnVjdCBzb2NrICpuZXdzayk7CisJaW50ICgqdW5peF9zdHJlYW1fY29ubmVjdCkgKHN0cnVjdCBzb2NrICpzb2NrLCBzdHJ1Y3Qgc29jayAqb3RoZXIsIHN0cnVjdCBzb2NrICpuZXdzayk7CiAJaW50ICgqdW5peF9tYXlfc2VuZCkgKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm90aGVyKTsKIAogCWludCAoKnNvY2tldF9jcmVhdGUpIChpbnQgZmFtaWx5LCBpbnQgdHlwZSwgaW50IHByb3RvY29sLCBpbnQga2Vybik7CkBAIC0xNzEzLDYgKzE3MTIsNyBAQAogaW50IHNlY3VyaXR5X2lub2RlX3JlYWRsaW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7CiBpbnQgc2VjdXJpdHlfaW5vZGVfZm9sbG93X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCk7CiBpbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzayk7CitpbnQgc2VjdXJpdHlfaW5vZGVfZXhlY19wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVuc2lnbmVkIGludCBmbGFncyk7CiBpbnQgc2VjdXJpdHlfaW5vZGVfc2V0YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpYXR0ciAqYXR0cik7CiBpbnQgc2VjdXJpdHlfaW5vZGVfZ2V0YXR0cihzdHJ1Y3QgdmZzbW91bnQgKm1udCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKIGludCBzZWN1cml0eV9pbm9kZV9zZXR4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWUsCkBAIC0yMTAyLDYgKzIxMDIsMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfZXhlY19wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJCQkgIHVuc2lnbmVkIGludCBmbGFncykKK3sKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfc2V0YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAJCQkJCSAgc3RydWN0IGlhdHRyICphdHRyKQogewpAQCAtMjUyNSw4ICsyNTMxLDcgQEAKIAogI2lmZGVmIENPTkZJR19TRUNVUklUWV9ORVRXT1JLCiAKLWludCBzZWN1cml0eV91bml4X3N0cmVhbV9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm90aGVyLAotCQkJCSBzdHJ1Y3Qgc29jayAqbmV3c2spOworaW50IHNlY3VyaXR5X3VuaXhfc3RyZWFtX2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNvY2ssIHN0cnVjdCBzb2NrICpvdGhlciwgc3RydWN0IHNvY2sgKm5ld3NrKTsKIGludCBzZWN1cml0eV91bml4X21heV9zZW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssICBzdHJ1Y3Qgc29ja2V0ICpvdGhlcik7CiBpbnQgc2VjdXJpdHlfc29ja2V0X2NyZWF0ZShpbnQgZmFtaWx5LCBpbnQgdHlwZSwgaW50IHByb3RvY29sLCBpbnQga2Vybik7CiBpbnQgc2VjdXJpdHlfc29ja2V0X3Bvc3RfY3JlYXRlKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBmYW1pbHksCkBAIC0yNTY3LDggKzI1NzIsOCBAQAogaW50IHNlY3VyaXR5X3R1bl9kZXZfYXR0YWNoKHN0cnVjdCBzb2NrICpzayk7CiAKICNlbHNlCS8qIENPTkZJR19TRUNVUklUWV9ORVRXT1JLICovCi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV91bml4X3N0cmVhbV9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssCi0JCQkJCSAgICAgICBzdHJ1Y3Qgc29ja2V0ICpvdGhlciwKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3VuaXhfc3RyZWFtX2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNvY2ssCisJCQkJCSAgICAgICBzdHJ1Y3Qgc29jayAqb3RoZXIsCiAJCQkJCSAgICAgICBzdHJ1Y3Qgc29jayAqbmV3c2spCiB7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlcWxvY2suaCBiL2luY2x1ZGUvbGludXgvc2VxbG9jay5oCmluZGV4IDYzMjIwNWMuLmU5OGNkMmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2VxbG9jay5oCisrKyBiL2luY2x1ZGUvbGludXgvc2VxbG9jay5oCkBAIC0xMDcsNyArMTA3LDcgQEAKIHsKIAlzbXBfcm1iKCk7CiAKLQlyZXR1cm4gKHNsLT5zZXF1ZW5jZSAhPSBzdGFydCk7CisJcmV0dXJuIHVubGlrZWx5KHNsLT5zZXF1ZW5jZSAhPSBzdGFydCk7CiB9CiAKIApAQCAtMTI1LDE0ICsxMjUsMjUgQEAKICNkZWZpbmUgU0VRQ05UX1pFUk8geyAwIH0KICNkZWZpbmUgc2VxY291bnRfaW5pdCh4KQlkbyB7ICooeCkgPSAoc2VxY291bnRfdCkgU0VRQ05UX1pFUk87IH0gd2hpbGUgKDApCiAKLS8qIFN0YXJ0IG9mIHJlYWQgdXNpbmcgcG9pbnRlciB0byBhIHNlcXVlbmNlIGNvdW50ZXIgb25seS4gICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHJlYWRfc2VxY291bnRfYmVnaW4oY29uc3Qgc2VxY291bnRfdCAqcykKKy8qKgorICogX19yZWFkX3NlcWNvdW50X2JlZ2luIC0gYmVnaW4gYSBzZXEtcmVhZCBjcml0aWNhbCBzZWN0aW9uICh3aXRob3V0IGJhcnJpZXIpCisgKiBAczogcG9pbnRlciB0byBzZXFjb3VudF90CisgKiBSZXR1cm5zOiBjb3VudCB0byBiZSBwYXNzZWQgdG8gcmVhZF9zZXFjb3VudF9yZXRyeQorICoKKyAqIF9fcmVhZF9zZXFjb3VudF9iZWdpbiBpcyBsaWtlIHJlYWRfc2VxY291bnRfYmVnaW4sIGJ1dCBoYXMgbm8gc21wX3JtYigpCisgKiBiYXJyaWVyLiBDYWxsZXJzIHNob3VsZCBlbnN1cmUgdGhhdCBzbXBfcm1iKCkgb3IgZXF1aXZhbGVudCBvcmRlcmluZyBpcworICogcHJvdmlkZWQgYmVmb3JlIGFjdHVhbGx5IGxvYWRpbmcgYW55IG9mIHRoZSB2YXJpYWJsZXMgdGhhdCBhcmUgdG8gYmUKKyAqIHByb3RlY3RlZCBpbiB0aGlzIGNyaXRpY2FsIHNlY3Rpb24uCisgKgorICogVXNlIGNhcmVmdWxseSwgb25seSBpbiBjcml0aWNhbCBjb2RlLCBhbmQgY29tbWVudCBob3cgdGhlIGJhcnJpZXIgaXMKKyAqIHByb3ZpZGVkLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIF9fcmVhZF9zZXFjb3VudF9iZWdpbihjb25zdCBzZXFjb3VudF90ICpzKQogewogCXVuc2lnbmVkIHJldDsKIAogcmVwZWF0OgogCXJldCA9IHMtPnNlcXVlbmNlOwotCXNtcF9ybWIoKTsKIAlpZiAodW5saWtlbHkocmV0ICYgMSkpIHsKIAkJY3B1X3JlbGF4KCk7CiAJCWdvdG8gcmVwZWF0OwpAQCAtMTQwLDE0ICsxNTEsNTYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0vKgotICogVGVzdCBpZiByZWFkZXIgcHJvY2Vzc2VkIGludmFsaWQgZGF0YSBiZWNhdXNlIHNlcXVlbmNlIG51bWJlciBoYXMgY2hhbmdlZC4KKy8qKgorICogcmVhZF9zZXFjb3VudF9iZWdpbiAtIGJlZ2luIGEgc2VxLXJlYWQgY3JpdGljYWwgc2VjdGlvbgorICogQHM6IHBvaW50ZXIgdG8gc2VxY291bnRfdAorICogUmV0dXJuczogY291bnQgdG8gYmUgcGFzc2VkIHRvIHJlYWRfc2VxY291bnRfcmV0cnkKKyAqCisgKiByZWFkX3NlcWNvdW50X2JlZ2luIG9wZW5zIGEgcmVhZCBjcml0aWNhbCBzZWN0aW9uIG9mIHRoZSBnaXZlbiBzZXFjb3VudC4KKyAqIFZhbGlkaXR5IG9mIHRoZSBjcml0aWNhbCBzZWN0aW9uIGlzIHRlc3RlZCBieSBjaGVja2luZyByZWFkX3NlcWNvdW50X3JldHJ5CisgKiBmdW5jdGlvbi4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCByZWFkX3NlcWNvdW50X2JlZ2luKGNvbnN0IHNlcWNvdW50X3QgKnMpCit7CisJdW5zaWduZWQgcmV0ID0gX19yZWFkX3NlcWNvdW50X2JlZ2luKHMpOworCXNtcF9ybWIoKTsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIF9fcmVhZF9zZXFjb3VudF9yZXRyeSAtIGVuZCBhIHNlcS1yZWFkIGNyaXRpY2FsIHNlY3Rpb24gKHdpdGhvdXQgYmFycmllcikKKyAqIEBzOiBwb2ludGVyIHRvIHNlcWNvdW50X3QKKyAqIEBzdGFydDogY291bnQsIGZyb20gcmVhZF9zZXFjb3VudF9iZWdpbgorICogUmV0dXJuczogMSBpZiByZXRyeSBpcyByZXF1aXJlZCwgZWxzZSAwCisgKgorICogX19yZWFkX3NlcWNvdW50X3JldHJ5IGlzIGxpa2UgcmVhZF9zZXFjb3VudF9yZXRyeSwgYnV0IGhhcyBubyBzbXBfcm1iKCkKKyAqIGJhcnJpZXIuIENhbGxlcnMgc2hvdWxkIGVuc3VyZSB0aGF0IHNtcF9ybWIoKSBvciBlcXVpdmFsZW50IG9yZGVyaW5nIGlzCisgKiBwcm92aWRlZCBiZWZvcmUgYWN0dWFsbHkgbG9hZGluZyBhbnkgb2YgdGhlIHZhcmlhYmxlcyB0aGF0IGFyZSB0byBiZQorICogcHJvdGVjdGVkIGluIHRoaXMgY3JpdGljYWwgc2VjdGlvbi4KKyAqCisgKiBVc2UgY2FyZWZ1bGx5LCBvbmx5IGluIGNyaXRpY2FsIGNvZGUsIGFuZCBjb21tZW50IGhvdyB0aGUgYmFycmllciBpcworICogcHJvdmlkZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IF9fcmVhZF9zZXFjb3VudF9yZXRyeShjb25zdCBzZXFjb3VudF90ICpzLCB1bnNpZ25lZCBzdGFydCkKK3sKKwlyZXR1cm4gdW5saWtlbHkocy0+c2VxdWVuY2UgIT0gc3RhcnQpOworfQorCisvKioKKyAqIHJlYWRfc2VxY291bnRfcmV0cnkgLSBlbmQgYSBzZXEtcmVhZCBjcml0aWNhbCBzZWN0aW9uCisgKiBAczogcG9pbnRlciB0byBzZXFjb3VudF90CisgKiBAc3RhcnQ6IGNvdW50LCBmcm9tIHJlYWRfc2VxY291bnRfYmVnaW4KKyAqIFJldHVybnM6IDEgaWYgcmV0cnkgaXMgcmVxdWlyZWQsIGVsc2UgMAorICoKKyAqIHJlYWRfc2VxY291bnRfcmV0cnkgY2xvc2VzIGEgcmVhZCBjcml0aWNhbCBzZWN0aW9uIG9mIHRoZSBnaXZlbiBzZXFjb3VudC4KKyAqIElmIHRoZSBjcml0aWNhbCBzZWN0aW9uIHdhcyBpbnZhbGlkLCBpdCBtdXN0IGJlIGlnbm9yZWQgKGFuZCB0eXBpY2FsbHkKKyAqIHJldHJpZWQpLgogICovCiBzdGF0aWMgaW5saW5lIGludCByZWFkX3NlcWNvdW50X3JldHJ5KGNvbnN0IHNlcWNvdW50X3QgKnMsIHVuc2lnbmVkIHN0YXJ0KQogewogCXNtcF9ybWIoKTsKIAotCXJldHVybiBzLT5zZXF1ZW5jZSAhPSBzdGFydDsKKwlyZXR1cm4gX19yZWFkX3NlcWNvdW50X3JldHJ5KHMsIHN0YXJ0KTsKIH0KIAogCkBAIC0xNjcsNiArMjIwLDE5IEBACiAJcy0+c2VxdWVuY2UrKzsKIH0KIAorLyoqCisgKiB3cml0ZV9zZXFjb3VudF9iYXJyaWVyIC0gaW52YWxpZGF0ZSBpbi1wcm9ncmVzcyByZWFkLXNpZGUgc2VxIG9wZXJhdGlvbnMKKyAqIEBzOiBwb2ludGVyIHRvIHNlcWNvdW50X3QKKyAqCisgKiBBZnRlciB3cml0ZV9zZXFjb3VudF9iYXJyaWVyLCBubyByZWFkLXNpZGUgc2VxIG9wZXJhdGlvbnMgd2lsbCBjb21wbGV0ZQorICogc3VjY2Vzc2Z1bGx5IGFuZCBzZWUgZGF0YSBvbGRlciB0aGFuIHRoaXMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZV9zZXFjb3VudF9iYXJyaWVyKHNlcWNvdW50X3QgKnMpCit7CisJc21wX3dtYigpOworCXMtPnNlcXVlbmNlKz0yOworfQorCiAvKgogICogUG9zc2libGUgc3cvaHcgSVJRIHByb3RlY3RlZCB2ZXJzaW9ucyBvZiB0aGUgaW50ZXJmYWNlcy4KICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZXJpYWxfY29yZS5oIGIvaW5jbHVkZS9saW51eC9zZXJpYWxfY29yZS5oCmluZGV4IDIxMmViNGMuLmEyM2ZhMjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2VyaWFsX2NvcmUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NlcmlhbF9jb3JlLmgKQEAgLTk1LDcgKzk1LDcgQEAKIC8qIFBQQyBDUE0gdHlwZSBudW1iZXIgKi8KICNkZWZpbmUgUE9SVF9DUE0gICAgICAgIDU4CiAKLS8qIE1QQzUyeHggdHlwZSBudW1iZXJzICovCisvKiBNUEM1Mnh4IChhbmQgTVBDNTEyeCkgdHlwZSBudW1iZXJzICovCiAjZGVmaW5lIFBPUlRfTVBDNTJ4eAk1OQogCiAvKiBJQk0gaWNvbSAqLwpAQCAtMTk5LDYgKzE5OSw5IEBACiAvKiBUSSBPTUFQLVVBUlQgKi8KICNkZWZpbmUgUE9SVF9PTUFQCTk2CiAKKy8qIFZJQSBWVDg1MDAgU29DICovCisjZGVmaW5lIFBPUlRfVlQ4NTAwCTk3CisKICNpZmRlZiBfX0tFUk5FTF9fCiAKICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgpAQCAtMzExLDYgKzMxNCw3IEBACiAjZGVmaW5lIFVQSU9fVFNJCQkoNSkJCQkvKiBUc2kxMDgvMTA5IHR5cGUgSU8gKi8KICNkZWZpbmUgVVBJT19EV0FQQgkJKDYpCQkJLyogRGVzaWduV2FyZSBBUEIgVUFSVCAqLwogI2RlZmluZSBVUElPX1JNOTAwMAkJKDcpCQkJLyogUk05MDAwIHR5cGUgSU8gKi8KKyNkZWZpbmUgVVBJT19EV0FQQjMyCQkoOCkJCQkvKiBEZXNpZ25XYXJlIEFQQiBVQVJUICgzMiBiaXQgYWNjZXNzZXMpICovCiAKIAl1bnNpZ25lZCBpbnQJCXJlYWRfc3RhdHVzX21hc2s7CS8qIGRyaXZlciBzcGVjaWZpYyAqLwogCXVuc2lnbmVkIGludAkJaWdub3JlX3N0YXR1c19tYXNrOwkvKiBkcml2ZXIgc3BlY2lmaWMgKi8KQEAgLTM2MSw2ICszNjUsNyBAQAogCXN0cnVjdCBkZXZpY2UJCSpkZXY7CQkJLyogcGFyZW50IGRldmljZSAqLwogCXVuc2lnbmVkIGNoYXIJCWh1YjY7CQkJLyogdGhpcyBzaG91bGQgYmUgaW4gdGhlIDgyNTAgZHJpdmVyICovCiAJdW5zaWduZWQgY2hhcgkJc3VzcGVuZGVkOworCXVuc2lnbmVkIGNoYXIJCWlycV93YWtlOwogCXVuc2lnbmVkIGNoYXIJCXVudXNlZFsyXTsKIAl2b2lkCQkJKnByaXZhdGVfZGF0YTsJCS8qIGdlbmVyaWMgcGxhdGZvcm0gZGF0YSBwb2ludGVyICovCiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZXJpYWxfcmVnLmggYi9pbmNsdWRlL2xpbnV4L3NlcmlhbF9yZWcuaAppbmRleCBjN2EwY2UxLi4zZWNiNzFhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NlcmlhbF9yZWcuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NlcmlhbF9yZWcuaApAQCAtOTksNiArOTksMTMgQEAKICNkZWZpbmUgVUFSVF9MQ1JfV0xFTjcJCTB4MDIgLyogV29yZGxlbmd0aDogNyBiaXRzICovCiAjZGVmaW5lIFVBUlRfTENSX1dMRU44CQkweDAzIC8qIFdvcmRsZW5ndGg6IDggYml0cyAqLwogCisvKgorICogQWNjZXNzIHRvIHNvbWUgcmVnaXN0ZXJzIGRlcGVuZHMgb24gcmVnaXN0ZXIgYWNjZXNzIC8gY29uZmlndXJhdGlvbgorICogbW9kZS4KKyAqLworI2RlZmluZSBVQVJUX0xDUl9DT05GX01PREVfQQlVQVJUX0xDUl9ETEFCCS8qIENvbmZpZ3V0YXRpb24gbW9kZSBBICovCisjZGVmaW5lIFVBUlRfTENSX0NPTkZfTU9ERV9CCTB4QkYJCS8qIENvbmZpZ3V0YXRpb24gbW9kZSBCICovCisKICNkZWZpbmUgVUFSVF9NQ1IJNAkvKiBPdXQ6IE1vZGVtIENvbnRyb2wgUmVnaXN0ZXIgKi8KICNkZWZpbmUgVUFSVF9NQ1JfQ0xLU0VMCQkweDgwIC8qIERpdmlkZSBjbG9jayBieSA0IChUSTE2Qzc1MiwgRUZSWzRdPTEpICovCiAjZGVmaW5lIFVBUlRfTUNSX1RDUlRMUgkJMHg0MCAvKiBBY2Nlc3MgVENSL1RMUiAoVEkxNkM3NTIsIEVGUls0XT0xKSAqLwpAQCAtMzQxLDUgKzM0OCwxNyBAQAogI2RlZmluZSBVQVJUX09NQVBfU1lTUwkJMHgxNgkvKiBTeXN0ZW0gc3RhdHVzIHJlZ2lzdGVyICovCiAjZGVmaW5lIFVBUlRfT01BUF9XRVIJCTB4MTcJLyogV2FrZS11cCBlbmFibGUgcmVnaXN0ZXIgKi8KIAorLyoKKyAqIFRoZXNlIGFyZSB0aGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBNRFIxIHJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgVUFSVF9PTUFQX01EUjFfMTZYX01PREUJCTB4MDAJLyogVUFSVCAxNnggbW9kZSAqLworI2RlZmluZSBVQVJUX09NQVBfTURSMV9TSVJfTU9ERQkJMHgwMQkvKiBTSVIgbW9kZSAqLworI2RlZmluZSBVQVJUX09NQVBfTURSMV8xNlhfQUJBVURfTU9ERQkweDAyCS8qIFVBUlQgMTZ4IGF1dG8tYmF1ZCAqLworI2RlZmluZSBVQVJUX09NQVBfTURSMV8xM1hfTU9ERQkJMHgwMwkvKiBVQVJUIDEzeCBtb2RlICovCisjZGVmaW5lIFVBUlRfT01BUF9NRFIxX01JUl9NT0RFCQkweDA0CS8qIE1JUiBtb2RlICovCisjZGVmaW5lIFVBUlRfT01BUF9NRFIxX0ZJUl9NT0RFCQkweDA1CS8qIEZJUiBtb2RlICovCisjZGVmaW5lIFVBUlRfT01BUF9NRFIxX0NJUl9NT0RFCQkweDA2CS8qIENJUiBtb2RlICovCisjZGVmaW5lIFVBUlRfT01BUF9NRFIxX0RJU0FCTEUJCTB4MDcJLyogRGlzYWJsZSAoZGVmYXVsdCBzdGF0ZSkgKi8KKwogI2VuZGlmIC8qIF9MSU5VWF9TRVJJQUxfUkVHX0ggKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZmkuaCBiL2luY2x1ZGUvbGludXgvc2ZpLmgKaW5kZXggN2Y3NzBjNi4uZmU4MTc5MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zZmkuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NmaS5oCkBAIC03Nyw2ICs3Nyw4IEBACiAjZGVmaW5lIFNGSV9PRU1fSURfU0laRQkJNgogI2RlZmluZSBTRklfT0VNX1RBQkxFX0lEX1NJWkUJOAogCisjZGVmaW5lIFNGSV9OQU1FX0xFTgkJMTYKKwogI2RlZmluZSBTRklfU1lTVF9TRUFSQ0hfQkVHSU4JCTB4MDAwRTAwMDAKICNkZWZpbmUgU0ZJX1NZU1RfU0VBUkNIX0VORAkJMHgwMDBGRkZGRgogCkBAIC0xNTYsMTMgKzE1OCwxMyBAQAogCXUxNglhZGRyOwogCXU4CWlycTsKIAl1MzIJbWF4X2ZyZXE7Ci0JY2hhcgluYW1lWzE2XTsKKwljaGFyCW5hbWVbU0ZJX05BTUVfTEVOXTsKIH0gX19wYWNrZWQ7CiAKIHN0cnVjdCBzZmlfZ3Bpb190YWJsZV9lbnRyeSB7Ci0JY2hhcgljb250cm9sbGVyX25hbWVbMTZdOworCWNoYXIJY29udHJvbGxlcl9uYW1lW1NGSV9OQU1FX0xFTl07CiAJdTE2CXBpbl9ubzsKLQljaGFyCXBpbl9uYW1lWzE2XTsKKwljaGFyCXBpbl9uYW1lW1NGSV9OQU1FX0xFTl07CiB9IF9fcGFja2VkOwogCiB0eXBlZGVmIGludCAoKnNmaV90YWJsZV9oYW5kbGVyKSAoc3RydWN0IHNmaV90YWJsZV9oZWFkZXIgKnRhYmxlKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2tidWZmLmggYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCmluZGV4IGU2YmE4OTguLjIwZWMwYTY0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCisrKyBiL2luY2x1ZGUvbGludXgvc2tidWZmLmgKQEAgLTM4Niw5ICszODYsMTAgQEAKICNlbHNlCiAJX191OAkJCWRlbGl2ZXJfbm9fd2NhcmQ6MTsKICNlbmRpZgorCV9fdTgJCQlvb29fb2theToxOwogCWttZW1jaGVja19iaXRmaWVsZF9lbmQoZmxhZ3MyKTsKIAotCS8qIDAvMTQgYml0IGhvbGUgKi8KKwkvKiAwLzEzIGJpdCBob2xlICovCiAKICNpZmRlZiBDT05GSUdfTkVUX0RNQQogCWRtYV9jb29raWVfdAkJZG1hX2Nvb2tpZTsKQEAgLTEzNTQsNiArMTM1NSwxMSBAQAogfQogI2VuZGlmIC8qIE5FVF9TS0JVRkZfREFUQV9VU0VTX09GRlNFVCAqLwogCitzdGF0aWMgaW5saW5lIGludCBza2JfY2hlY2tzdW1fc3RhcnRfb2Zmc2V0KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCit7CisJcmV0dXJuIHNrYi0+Y3N1bV9zdGFydCAtIHNrYl9oZWFkcm9vbShza2IpOworfQorCiBzdGF0aWMgaW5saW5lIGludCBza2JfdHJhbnNwb3J0X29mZnNldChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXJldHVybiBza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpIC0gc2tiLT5kYXRhOwpAQCAtMjE2NCw4ICsyMTcwLDkgQEAKIAlyZXR1cm4gc2tiLT5xdWV1ZV9tYXBwaW5nICE9IDA7CiB9CiAKLWV4dGVybiB1MTYgc2tiX3R4X2hhc2goY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJICAgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIHUxNiBfX3NrYl90eF9oYXNoKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSB1bnNpZ25lZCBpbnQgbnVtX3R4X3F1ZXVlcyk7CiAKICNpZmRlZiBDT05GSUdfWEZSTQogc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2VjX3BhdGggKnNrYl9zZWNfcGF0aChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zbGFiLmggYi9pbmNsdWRlL2xpbnV4L3NsYWIuaAppbmRleCA1OTI2MGUyLi5mYTkwODY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NsYWIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NsYWIuaApAQCAtMTA2LDggKzEwNiw2IEBACiB2b2lkIGttZW1fY2FjaGVfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqLCB2b2lkICopOwogdW5zaWduZWQgaW50IGttZW1fY2FjaGVfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqKTsKIGNvbnN0IGNoYXIgKmttZW1fY2FjaGVfbmFtZShzdHJ1Y3Qga21lbV9jYWNoZSAqKTsKLWludCBrZXJuX3B0cl92YWxpZGF0ZShjb25zdCB2b2lkICpwdHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7Ci1pbnQga21lbV9wdHJfdmFsaWRhdGUoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwgY29uc3Qgdm9pZCAqcHRyKTsKIAogLyoKICAqIFBsZWFzZSB1c2UgdGhpcyBtYWNybyB0byBjcmVhdGUgc2xhYiBjYWNoZXMuIFNpbXBseSBzcGVjaWZ5IHRoZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zb2NrZXQuaCBiL2luY2x1ZGUvbGludXgvc29ja2V0LmgKaW5kZXggODZiNjUyZi4uNWY2NWYxNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zb2NrZXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NvY2tldC5oCkBAIC0zMCwxMiArMzAsMTAgQEAKICNkZWZpbmUgX19zb2NrYWRkcl9jaGVja19zaXplKHNpemUpCVwKIAlCVUlMRF9CVUdfT04oKChzaXplKSA+IHNpemVvZihzdHJ1Y3QgX19rZXJuZWxfc29ja2FkZHJfc3RvcmFnZSkpKQogCi0jaWZkZWYgX19LRVJORUxfXwotIyBpZmRlZiBDT05GSUdfUFJPQ19GUworI2lmZGVmIENPTkZJR19QUk9DX0ZTCiBzdHJ1Y3Qgc2VxX2ZpbGU7CiBleHRlcm4gdm9pZCBzb2NrZXRfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEpOwotIyBlbmRpZgotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZgogCiB0eXBlZGVmIHVuc2lnbmVkIHNob3J0CXNhX2ZhbWlseV90OwogCkBAIC0zMTEsNyArMzA5LDYgQEAKIC8qIElQWCBvcHRpb25zICovCiAjZGVmaW5lIElQWF9UWVBFCTEKIAotI2lmZGVmIF9fS0VSTkVMX18KIGV4dGVybiB2b2lkIGNyZWRfdG9fdWNyZWQoc3RydWN0IHBpZCAqcGlkLCBjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCwgc3RydWN0IHVjcmVkICp1Y3JlZCk7CiAKIGV4dGVybiBpbnQgbWVtY3B5X2Zyb21pb3ZlYyh1bnNpZ25lZCBjaGFyICprZGF0YSwgc3RydWN0IGlvdmVjICppb3YsIGludCBsZW4pOwpAQCAtMzMzLDYgKzMzMCw1IEBACiAKIGV4dGVybiBpbnQgX19zeXNfcmVjdm1tc2coaW50IGZkLCBzdHJ1Y3QgbW1zZ2hkciBfX3VzZXIgKm1tc2csIHVuc2lnbmVkIGludCB2bGVuLAogCQkJICB1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCB0aW1lc3BlYyAqdGltZW91dCk7Ci0jZW5kaWYKICNlbmRpZiAvKiBub3Qga2VybmVsIGFuZCBub3QgZ2xpYmMgKi8KICNlbmRpZiAvKiBfTElOVVhfU09DS0VUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3BpL2R3X3NwaS5oIGIvaW5jbHVkZS9saW51eC9zcGkvZHdfc3BpLmgKaW5kZXggYzkxMzAyZi4uNmNkMTBmNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zcGkvZHdfc3BpLmgKKysrIGIvaW5jbHVkZS9saW51eC9zcGkvZHdfc3BpLmgKQEAgLTEsNSArMSw2IEBACiAjaWZuZGVmIERXX1NQSV9IRUFERVJfSAogI2RlZmluZSBEV19TUElfSEVBREVSX0gKKwogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKIC8qIEJpdCBmaWVsZHMgaW4gQ1RSTFIwICovCkBAIC04Miw2ICs4MywxMyBAQAogCQkJCXRob3VnaCBvbmx5IGxvdyAxNiBiaXRzIG1hdHRlcnMgKi8KIH0gX19wYWNrZWQ7CiAKK3N0cnVjdCBkd19zcGk7CitzdHJ1Y3QgZHdfc3BpX2RtYV9vcHMgeworCWludCAoKmRtYV9pbml0KShzdHJ1Y3QgZHdfc3BpICpkd3MpOworCXZvaWQgKCpkbWFfZXhpdCkoc3RydWN0IGR3X3NwaSAqZHdzKTsKKwlpbnQgKCpkbWFfdHJhbnNmZXIpKHN0cnVjdCBkd19zcGkgKmR3cywgaW50IGNzX2NoYW5nZSk7Cit9OworCiBzdHJ1Y3QgZHdfc3BpIHsKIAlzdHJ1Y3Qgc3BpX21hc3RlcgkqbWFzdGVyOwogCXN0cnVjdCBzcGlfZGV2aWNlCSpjdXJfZGV2OwpAQCAtMTM2LDEzICsxNDQsMTUgQEAKIAkvKiBEbWEgaW5mbyAqLwogCWludAkJCWRtYV9pbml0ZWQ7CiAJc3RydWN0IGRtYV9jaGFuCQkqdHhjaGFuOworCXN0cnVjdCBzY2F0dGVybGlzdAl0eF9zZ2w7CiAJc3RydWN0IGRtYV9jaGFuCQkqcnhjaGFuOwotCWludAkJCXR4ZG1hX2RvbmU7Ci0JaW50CQkJcnhkbWFfZG9uZTsKLQl1NjQJCQl0eF9wYXJhbTsKLQl1NjQJCQlyeF9wYXJhbTsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QJcnhfc2dsOworCWludAkJCWRtYV9jaGFuX2RvbmU7CiAJc3RydWN0IGRldmljZQkJKmRtYV9kZXY7Ci0JZG1hX2FkZHJfdAkJZG1hX2FkZHI7CisJZG1hX2FkZHJfdAkJZG1hX2FkZHI7IC8qIHBoeSBhZGRyZXNzIG9mIHRoZSBEYXRhIHJlZ2lzdGVyICovCisJc3RydWN0IGR3X3NwaV9kbWFfb3BzCSpkbWFfb3BzOworCXZvaWQJCQkqZG1hX3ByaXY7IC8qIHBsYXRmb3JtIHJlbGF0ZSBpbmZvICovCisJc3RydWN0IHBjaV9kZXYJCSpkbWFjOwogCiAJLyogQnVzIGludGVyZmFjZSBpbmZvICovCiAJdm9pZAkJCSpwcml2OwpAQCAtMjE2LDQgKzIyNiw4IEBACiBleHRlcm4gdm9pZCBkd19zcGlfcmVtb3ZlX2hvc3Qoc3RydWN0IGR3X3NwaSAqZHdzKTsKIGV4dGVybiBpbnQgZHdfc3BpX3N1c3BlbmRfaG9zdChzdHJ1Y3QgZHdfc3BpICpkd3MpOwogZXh0ZXJuIGludCBkd19zcGlfcmVzdW1lX2hvc3Qoc3RydWN0IGR3X3NwaSAqZHdzKTsKK2V4dGVybiB2b2lkIGR3X3NwaV94ZmVyX2RvbmUoc3RydWN0IGR3X3NwaSAqZHdzKTsKKworLyogcGxhdGZvcm0gcmVsYXRlZCBzZXR1cCAqLworZXh0ZXJuIGludCBkd19zcGlfbWlkX2luaXQoc3RydWN0IGR3X3NwaSAqZHdzKTsgLyogSW50ZWwgTUlEIHBsYXRmb3JtcyAqLwogI2VuZGlmIC8qIERXX1NQSV9IRUFERVJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zcGkvaWZ4X21vZGVtLmggYi9pbmNsdWRlL2xpbnV4L3NwaS9pZnhfbW9kZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjhmM2IxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9zcGkvaWZ4X21vZGVtLmgKQEAgLTAsMCArMSwxNCBAQAorI2lmbmRlZiBMSU5VWF9JRlhfTU9ERU1fSAorI2RlZmluZSBMSU5VWF9JRlhfTU9ERU1fSAorCitzdHJ1Y3QgaWZ4X21vZGVtX3BsYXRmb3JtX2RhdGEgeworCXVuc2lnbmVkIHNob3J0IHJzdF9vdXQ7IC8qIG1vZGVtIHJlc2V0IG91dCAqLworCXVuc2lnbmVkIHNob3J0IHB3cl9vbjsgIC8qIHBvd2VyIG9uICovCisJdW5zaWduZWQgc2hvcnQgcnN0X3BtdTsgLyogcmVzZXQgbW9kZW0gKi8KKwl1bnNpZ25lZCBzaG9ydCB0eF9wd3I7ICAvKiBtb2RlbSBwb3dlciB0aHJlc2hvbGQgKi8KKwl1bnNpZ25lZCBzaG9ydCBzcmR5OyAgICAvKiBTUkRZICovCisJdW5zaWduZWQgc2hvcnQgbXJkeTsgICAgLyogTVJEWSAqLworCXVuc2lnbmVkIHNob3J0IGlzXzYxNjA7CS8qIE1vZGVtIHR5cGUgKi8KK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zcGkvcHhhMnh4X3NwaS5oIGIvaW5jbHVkZS9saW51eC9zcGkvcHhhMnh4X3NwaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzZTEwNzUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3NwaS9weGEyeHhfc3BpLmgKQEAgLTAsMCArMSwxNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgU3RlcGhlbiBTdHJlZXQgLyBTdHJlZXRGaXJlIFNvdW5kIExhYnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworI2lmbmRlZiBfX2xpbnV4X3B4YTJ4eF9zcGlfaAorI2RlZmluZSBfX2xpbnV4X3B4YTJ4eF9zcGlfaAorCisjaW5jbHVkZSA8bGludXgvcHhhMnh4X3NzcC5oPgorCisjZGVmaW5lIFBYQTJYWF9DU19BU1NFUlQgKDB4MDEpCisjZGVmaW5lIFBYQTJYWF9DU19ERUFTU0VSVCAoMHgwMikKKworLyogZGV2aWNlLnBsYXRmb3JtX2RhdGEgZm9yIFNTUCBjb250cm9sbGVyIGRldmljZXMgKi8KK3N0cnVjdCBweGEyeHhfc3BpX21hc3RlciB7CisJdTMyIGNsb2NrX2VuYWJsZTsKKwl1MTYgbnVtX2NoaXBzZWxlY3Q7CisJdTggZW5hYmxlX2RtYTsKK307CisKKy8qIHNwaV9ib2FyZF9pbmZvLmNvbnRyb2xsZXJfZGF0YSBmb3IgU1BJIHNsYXZlIGRldmljZXMsCisgKiBjb3BpZWQgdG8gc3BpX2RldmljZS5wbGF0Zm9ybV9kYXRhIC4uLiBtb3N0bHkgZm9yIGRtYSB0dW5pbmcKKyAqLworc3RydWN0IHB4YTJ4eF9zcGlfY2hpcCB7CisJdTggdHhfdGhyZXNob2xkOworCXU4IHJ4X3RocmVzaG9sZDsKKwl1OCBkbWFfYnVyc3Rfc2l6ZTsKKwl1MzIgdGltZW91dDsKKwl1OCBlbmFibGVfbG9vcGJhY2s7CisJaW50IGdwaW9fY3M7CisJdm9pZCAoKmNzX2NvbnRyb2wpKHUzMiBjb21tYW5kKTsKK307CisKKyNpZmRlZiBDT05GSUdfQVJDSF9QWEEKKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPG1hY2gvZG1hLmg+CisKK2V4dGVybiB2b2lkIHB4YTJ4eF9zZXRfc3BpX2luZm8odW5zaWduZWQgaWQsIHN0cnVjdCBweGEyeHhfc3BpX21hc3RlciAqaW5mbyk7CisKKyNlbHNlCisvKgorICogVGhpcyBpcyB0aGUgaW1wbGVtdGF0aW9uIGZvciBDRTQxMDAgb24geDg2LiBBUk0gZGVmaW5lcyB0aGVtIGluIG1hY2gvIG9yCisgKiBwbGF0LyBpbmNsdWRlIHBhdGguCisgKiBUaGUgQ0U0MTAwIGRvZXMgbm90IHByb3ZpZGUgRE1BIHN1cHBvcnQuIFRoaXMgYml0cyBhcmUgaGVyZSB0byBsZXQgdGhlIGRyaXZlcgorICogY29tcGlsZSBhbmQgd2lsbCBuZXZlciBiZSB1c2VkLiBNYXliZSB3ZSBnZXQgRE1BIHN1cHBvcnQgYXQgYSBsYXRlciBwb2ludCBpbgorICogdGltZS4KKyAqLworCisjZGVmaW5lIERDU1IobikgICAgICAgICAobikKKyNkZWZpbmUgRFNBRFIobikgICAgICAgIChuKQorI2RlZmluZSBEVEFEUihuKSAgICAgICAgKG4pCisjZGVmaW5lIERDTUQobikgICAgICAgICAobikKKyNkZWZpbmUgRFJDTVIobikgICAgICAgIChuKQorCisjZGVmaW5lIERDU1JfUlVOCSgxIDw8IDMxKQkvKiBSdW4gQml0ICovCisjZGVmaW5lIERDU1JfTk9ERVNDCSgxIDw8IDMwKQkvKiBOby1EZXNjcmlwdG9yIEZldGNoICovCisjZGVmaW5lIERDU1JfU1RPUElSUUVOCSgxIDw8IDI5KQkvKiBTdG9wIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgRENTUl9SRVFQRU5ECSgxIDw8IDgpCS8qIFJlcXVlc3QgUGVuZGluZyAocmVhZC1vbmx5KSAqLworI2RlZmluZSBEQ1NSX1NUT1BTVEFURQkoMSA8PCAzKQkvKiBTdG9wIFN0YXRlIChyZWFkLW9ubHkpICovCisjZGVmaW5lIERDU1JfRU5ESU5UUgkoMSA8PCAyKQkvKiBFbmQgSW50ZXJydXB0ICovCisjZGVmaW5lIERDU1JfU1RBUlRJTlRSCSgxIDw8IDEpCS8qIFN0YXJ0IEludGVycnVwdCAqLworI2RlZmluZSBEQ1NSX0JVU0VSUgkoMSA8PCAwKQkvKiBCdXMgRXJyb3IgSW50ZXJydXB0ICovCisKKyNkZWZpbmUgRENTUl9FT1JJUlFFTgkoMSA8PCAyOCkJLyogRW5kIG9mIFJlY2VpdmUgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBEQ1NSX0VPUkpNUEVOCSgxIDw8IDI3KQkvKiBKdW1wIHRvIG5leHQgZGVzY3JpcHRvciBvbiBFT1IgKi8KKyNkZWZpbmUgRENTUl9FT1JTVE9QRU4JKDEgPDwgMjYpCS8qIFNUT1Agb24gYW4gRU9SICovCisjZGVmaW5lIERDU1JfU0VUQ01QU1QJKDEgPDwgMjUpCS8qIFNldCBEZXNjcmlwdG9yIENvbXBhcmUgU3RhdHVzICovCisjZGVmaW5lIERDU1JfQ0xSQ01QU1QJKDEgPDwgMjQpCS8qIENsZWFyIERlc2NyaXB0b3IgQ29tcGFyZSBTdGF0dXMgKi8KKyNkZWZpbmUgRENTUl9DTVBTVAkoMSA8PCAxMCkJLyogVGhlIERlc2NyaXB0b3IgQ29tcGFyZSBTdGF0dXMgKi8KKyNkZWZpbmUgRENTUl9FT1JJTlRSCSgxIDw8IDkpCS8qIFRoZSBlbmQgb2YgUmVjZWl2ZSAqLworCisjZGVmaW5lIERSQ01SX01BUFZMRAkoMSA8PCA3KQkvKiBNYXAgVmFsaWQgKi8KKyNkZWZpbmUgRFJDTVJfQ0hMTlVNCTB4MWYJCS8qIG1hc2sgZm9yIENoYW5uZWwgTnVtYmVyICovCisKKyNkZWZpbmUgRERBRFJfREVTQ0FERFIJMHhmZmZmZmZmMAkvKiBBZGRyZXNzIG9mIG5leHQgZGVzY3JpcHRvciAqLworI2RlZmluZSBEREFEUl9TVE9QCSgxIDw8IDApCS8qIFN0b3AgKi8KKworI2RlZmluZSBEQ01EX0lOQ1NSQ0FERFIJKDEgPDwgMzEpCS8qIFNvdXJjZSBBZGRyZXNzIEluY3JlbWVudCBTZXR0aW5nLiAqLworI2RlZmluZSBEQ01EX0lOQ1RSR0FERFIJKDEgPDwgMzApCS8qIFRhcmdldCBBZGRyZXNzIEluY3JlbWVudCBTZXR0aW5nLiAqLworI2RlZmluZSBEQ01EX0ZMT1dTUkMJKDEgPDwgMjkpCS8qIEZsb3cgQ29udHJvbCBieSB0aGUgc291cmNlLiAqLworI2RlZmluZSBEQ01EX0ZMT1dUUkcJKDEgPDwgMjgpCS8qIEZsb3cgQ29udHJvbCBieSB0aGUgdGFyZ2V0LiAqLworI2RlZmluZSBEQ01EX1NUQVJUSVJRRU4JKDEgPDwgMjIpCS8qIFN0YXJ0IEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgRENNRF9FTkRJUlFFTgkoMSA8PCAyMSkJLyogRW5kIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgRENNRF9FTkRJQU4JKDEgPDwgMTgpCS8qIERldmljZSBFbmRpYW4tbmVzcy4gKi8KKyNkZWZpbmUgRENNRF9CVVJTVDgJKDEgPDwgMTYpCS8qIDggYnl0ZSBidXJzdCAqLworI2RlZmluZSBEQ01EX0JVUlNUMTYJKDIgPDwgMTYpCS8qIDE2IGJ5dGUgYnVyc3QgKi8KKyNkZWZpbmUgRENNRF9CVVJTVDMyCSgzIDw8IDE2KQkvKiAzMiBieXRlIGJ1cnN0ICovCisjZGVmaW5lIERDTURfV0lEVEgxCSgxIDw8IDE0KQkvKiAxIGJ5dGUgd2lkdGggKi8KKyNkZWZpbmUgRENNRF9XSURUSDIJKDIgPDwgMTQpCS8qIDIgYnl0ZSB3aWR0aCAoSGFsZldvcmQpICovCisjZGVmaW5lIERDTURfV0lEVEg0CSgzIDw8IDE0KQkvKiA0IGJ5dGUgd2lkdGggKFdvcmQpICovCisjZGVmaW5lIERDTURfTEVOR1RICTB4MDFmZmYJCS8qIGxlbmd0aCBtYXNrIChtYXggPSA4SyAtIDEpICovCisKKy8qCisgKiBEZXNjcmlwdG9yIHN0cnVjdHVyZSBmb3IgUFhBJ3MgRE1BIGVuZ2luZQorICogTm90ZTogdGhpcyBzdHJ1Y3R1cmUgbXVzdCBhbHdheXMgYmUgYWxpZ25lZCB0byBhIDE2LWJ5dGUgYm91bmRhcnkuCisgKi8KKwordHlwZWRlZiBlbnVtIHsKKwlETUFfUFJJT19ISUdIID0gMCwKKwlETUFfUFJJT19NRURJVU0gPSAxLAorCURNQV9QUklPX0xPVyA9IDIKK30gcHhhX2RtYV9wcmlvOworCisvKgorICogRE1BIHJlZ2lzdHJhdGlvbgorICovCisKK3N0YXRpYyBpbmxpbmUgaW50IHB4YV9yZXF1ZXN0X2RtYShjaGFyICpuYW1lLAorCQlweGFfZG1hX3ByaW8gcHJpbywKKwkJdm9pZCAoKmlycV9oYW5kbGVyKShpbnQsIHZvaWQgKiksCisJCXZvaWQgKmRhdGEpCit7CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBweGFfZnJlZV9kbWEoaW50IGRtYV9jaCkKK3sKK30KKworLyoKKyAqIFRoZSBDRTQxMDAgZG9lcyBub3QgaGF2ZSB0aGUgY2xrIGZyYW1ld29yayBpbXBsZW1lbnRlZCBhbmQgU1BJIGNsb2NrIGNhbgorICogbm90IGJlIHN3aXRjaGVkIG9uL29mZiBvciB0aGUgZGl2aWRlciBjaGFuZ2VkLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQoreworfQorCitzdGF0aWMgaW5saW5lIGludCBjbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGNsa19nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIDM2ODY0MDA7Cit9CisKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NzYi9zc2IuaCBiL2luY2x1ZGUvbGludXgvc3NiL3NzYi5oCmluZGV4IDYyM2I3MDQuLjk2NTllZmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3NiL3NzYi5oCisrKyBiL2luY2x1ZGUvbGludXgvc3NiL3NzYi5oCkBAIC01NSw2ICs1NSwxMCBAQAogCXU4IHRyaTVnbDsJCS8qIDUuMkdIeiBUWCBpc29sYXRpb24gKi8KIAl1OCB0cmk1ZzsJCS8qIDUuM0dIeiBUWCBpc29sYXRpb24gKi8KIAl1OCB0cmk1Z2g7CQkvKiA1LjhHSHogVFggaXNvbGF0aW9uICovCisJdTggdHhwaWQyZ1s0XTsJCS8qIDJHSHogVFggcG93ZXIgaW5kZXggKi8KKwl1OCB0eHBpZDVnbFs0XTsJCS8qIDQuOSAtIDUuMUdIeiBUWCBwb3dlciBpbmRleCAqLworCXU4IHR4cGlkNWdbNF07CQkvKiA1LjEgLSA1LjVHSHogVFggcG93ZXIgaW5kZXggKi8KKwl1OCB0eHBpZDVnaFs0XTsJCS8qIDUuNSAtIC4uLkdIeiBUWCBwb3dlciBpbmRleCAqLwogCXU4IHJ4cG8yZzsJCS8qIDJHSHogUlggcG93ZXIgb2Zmc2V0ICovCiAJdTggcnhwbzVnOwkJLyogNUdIeiBSWCBwb3dlciBvZmZzZXQgKi8KIAl1OCByc3Npc2F2Mmc7CQkvKiAyR0h6IFJTU0kgcGFyYW1zICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NzYi9zc2JfcmVncy5oIGIvaW5jbHVkZS9saW51eC9zc2Ivc3NiX3JlZ3MuaAppbmRleCAxMWRhZjljLi40ODlmN2I2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NzYi9zc2JfcmVncy5oCisrKyBiL2luY2x1ZGUvbGludXgvc3NiL3NzYl9yZWdzLmgKQEAgLTI5OSw2ICsyOTksNDYgQEAKICNkZWZpbmUgIFNTQl9TUFJPTTRfQUdBSU4yX1NISUZUCTAKICNkZWZpbmUgIFNTQl9TUFJPTTRfQUdBSU4zCQkweEZGMDAJLyogQW50ZW5uYSAzICovCiAjZGVmaW5lICBTU0JfU1BST000X0FHQUlOM19TSElGVAk4CisjZGVmaW5lIFNTQl9TUFJPTTRfVFhQSUQyRzAxCQkweDAwNjIgCS8qIFRYIFBvd2VyIEluZGV4IDJHSHogKi8KKyNkZWZpbmUgIFNTQl9TUFJPTTRfVFhQSUQyRzAJCTB4MDBGRgorI2RlZmluZSAgU1NCX1NQUk9NNF9UWFBJRDJHMF9TSElGVAkwCisjZGVmaW5lICBTU0JfU1BST000X1RYUElEMkcxCQkweEZGMDAKKyNkZWZpbmUgIFNTQl9TUFJPTTRfVFhQSUQyRzFfU0hJRlQJOAorI2RlZmluZSBTU0JfU1BST000X1RYUElEMkcyMwkJMHgwMDY0IAkvKiBUWCBQb3dlciBJbmRleCAyR0h6ICovCisjZGVmaW5lICBTU0JfU1BST000X1RYUElEMkcyCQkweDAwRkYKKyNkZWZpbmUgIFNTQl9TUFJPTTRfVFhQSUQyRzJfU0hJRlQJMAorI2RlZmluZSAgU1NCX1NQUk9NNF9UWFBJRDJHMwkJMHhGRjAwCisjZGVmaW5lICBTU0JfU1BST000X1RYUElEMkczX1NISUZUCTgKKyNkZWZpbmUgU1NCX1NQUk9NNF9UWFBJRDVHMDEJCTB4MDA2NiAJLyogVFggUG93ZXIgSW5kZXggNUdIeiBtaWRkbGUgc3ViYmFuZCAqLworI2RlZmluZSAgU1NCX1NQUk9NNF9UWFBJRDVHMAkJMHgwMEZGCisjZGVmaW5lICBTU0JfU1BST000X1RYUElENUcwX1NISUZUCTAKKyNkZWZpbmUgIFNTQl9TUFJPTTRfVFhQSUQ1RzEJCTB4RkYwMAorI2RlZmluZSAgU1NCX1NQUk9NNF9UWFBJRDVHMV9TSElGVAk4CisjZGVmaW5lIFNTQl9TUFJPTTRfVFhQSUQ1RzIzCQkweDAwNjggCS8qIFRYIFBvd2VyIEluZGV4IDVHSHogbWlkZGxlIHN1YmJhbmQgKi8KKyNkZWZpbmUgIFNTQl9TUFJPTTRfVFhQSUQ1RzIJCTB4MDBGRgorI2RlZmluZSAgU1NCX1NQUk9NNF9UWFBJRDVHMl9TSElGVAkwCisjZGVmaW5lICBTU0JfU1BST000X1RYUElENUczCQkweEZGMDAKKyNkZWZpbmUgIFNTQl9TUFJPTTRfVFhQSUQ1RzNfU0hJRlQJOAorI2RlZmluZSBTU0JfU1BST000X1RYUElENUdMMDEJCTB4MDA2QSAJLyogVFggUG93ZXIgSW5kZXggNUdIeiBsb3cgc3ViYmFuZCAqLworI2RlZmluZSAgU1NCX1NQUk9NNF9UWFBJRDVHTDAJCTB4MDBGRgorI2RlZmluZSAgU1NCX1NQUk9NNF9UWFBJRDVHTDBfU0hJRlQJMAorI2RlZmluZSAgU1NCX1NQUk9NNF9UWFBJRDVHTDEJCTB4RkYwMAorI2RlZmluZSAgU1NCX1NQUk9NNF9UWFBJRDVHTDFfU0hJRlQJOAorI2RlZmluZSBTU0JfU1BST000X1RYUElENUdMMjMJCTB4MDA2QyAJLyogVFggUG93ZXIgSW5kZXggNUdIeiBsb3cgc3ViYmFuZCAqLworI2RlZmluZSAgU1NCX1NQUk9NNF9UWFBJRDVHTDIJCTB4MDBGRgorI2RlZmluZSAgU1NCX1NQUk9NNF9UWFBJRDVHTDJfU0hJRlQJMAorI2RlZmluZSAgU1NCX1NQUk9NNF9UWFBJRDVHTDMJCTB4RkYwMAorI2RlZmluZSAgU1NCX1NQUk9NNF9UWFBJRDVHTDNfU0hJRlQJOAorI2RlZmluZSBTU0JfU1BST000X1RYUElENUdIMDEJCTB4MDA2RSAJLyogVFggUG93ZXIgSW5kZXggNUdIeiBoaWdoIHN1YmJhbmQgKi8KKyNkZWZpbmUgIFNTQl9TUFJPTTRfVFhQSUQ1R0gwCQkweDAwRkYKKyNkZWZpbmUgIFNTQl9TUFJPTTRfVFhQSUQ1R0gwX1NISUZUCTAKKyNkZWZpbmUgIFNTQl9TUFJPTTRfVFhQSUQ1R0gxCQkweEZGMDAKKyNkZWZpbmUgIFNTQl9TUFJPTTRfVFhQSUQ1R0gxX1NISUZUCTgKKyNkZWZpbmUgU1NCX1NQUk9NNF9UWFBJRDVHSDIzCQkweDAwNzAgCS8qIFRYIFBvd2VyIEluZGV4IDVHSHogaGlnaCBzdWJiYW5kICovCisjZGVmaW5lICBTU0JfU1BST000X1RYUElENUdIMgkJMHgwMEZGCisjZGVmaW5lICBTU0JfU1BST000X1RYUElENUdIMl9TSElGVAkwCisjZGVmaW5lICBTU0JfU1BST000X1RYUElENUdIMwkJMHhGRjAwCisjZGVmaW5lICBTU0JfU1BST000X1RYUElENUdIM19TSElGVAk4CiAjZGVmaW5lIFNTQl9TUFJPTTRfTUFYUF9CRwkJMHgwMDgwICAvKiBNYXggUG93ZXIgQkcgaW4gcGF0aCAxICovCiAjZGVmaW5lICBTU0JfU1BST000X01BWFBfQkdfTUFTSwkweDAwRkYgIC8qIE1hc2sgZm9yIE1heCBQb3dlciBCRyAqLwogI2RlZmluZSAgU1NCX1NQUk9NNF9JVFNTSV9CRwkJMHhGRjAwCS8qIE1hc2sgZm9yIHBhdGggMSBpdHNzaV9iZyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdGFja3RyYWNlLmggYi9pbmNsdWRlL2xpbnV4L3N0YWNrdHJhY2UuaAppbmRleCA1MWVmYmVmLi4yNTMxMGYxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N0YWNrdHJhY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N0YWNrdHJhY2UuaApAQCAtMiw2ICsyLDcgQEAKICNkZWZpbmUgX19MSU5VWF9TVEFDS1RSQUNFX0gKIAogc3RydWN0IHRhc2tfc3RydWN0Oworc3RydWN0IHB0X3JlZ3M7CiAKICNpZmRlZiBDT05GSUdfU1RBQ0tUUkFDRQogc3RydWN0IHRhc2tfc3RydWN0OwpAQCAtMTMsNyArMTQsOCBAQAogfTsKIAogZXh0ZXJuIHZvaWQgc2F2ZV9zdGFja190cmFjZShzdHJ1Y3Qgc3RhY2tfdHJhY2UgKnRyYWNlKTsKLWV4dGVybiB2b2lkIHNhdmVfc3RhY2tfdHJhY2VfYnAoc3RydWN0IHN0YWNrX3RyYWNlICp0cmFjZSwgdW5zaWduZWQgbG9uZyBicCk7CitleHRlcm4gdm9pZCBzYXZlX3N0YWNrX3RyYWNlX3JlZ3Moc3RydWN0IHN0YWNrX3RyYWNlICp0cmFjZSwKKwkJCQkgIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKIGV4dGVybiB2b2lkIHNhdmVfc3RhY2tfdHJhY2VfdHNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLAogCQkJCXN0cnVjdCBzdGFja190cmFjZSAqdHJhY2UpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N0bW1hYy5oIGIvaW5jbHVkZS9saW51eC9zdG1tYWMuaAppbmRleCBkNjZjNjE3Li5lMTAzNTI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N0bW1hYy5oCisrKyBiL2luY2x1ZGUvbGludXgvc3RtbWFjLmgKQEAgLTQwLDkgKzQwLDkgQEAKIAlpbnQgcG10OwogCXZvaWQgKCpmaXhfbWFjX3NwZWVkKSh2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgc3BlZWQpOwogCXZvaWQgKCpidXNfc2V0dXApKHZvaWQgX19pb21lbSAqaW9hZGRyKTsKLSNpZmRlZiBDT05GSUdfU1RNX0RSSVZFUlMKLQlzdHJ1Y3Qgc3RtX3BhZF9jb25maWcgKnBhZF9jb25maWc7Ci0jZW5kaWYKKwlpbnQgKCppbml0KShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKKwl2b2lkICgqZXhpdCkoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7CisJdm9pZCAqY3VzdG9tX2NmZzsKIAl2b2lkICpic3BfcHJpdjsKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VzcGVuZC5oIGIvaW5jbHVkZS9saW51eC9zdXNwZW5kLmgKaW5kZXggMjY2OTc1MS4uMTQ0YjM0YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdXNwZW5kLmgKKysrIGIvaW5jbHVkZS9saW51eC9zdXNwZW5kLmgKQEAgLTI5Miw3ICsyOTIsNyBAQAogLyogZHJpdmVycy9iYXNlL3Bvd2VyL3dha2V1cC5jICovCiBleHRlcm4gYm9vbCBldmVudHNfY2hlY2tfZW5hYmxlZDsKIAotZXh0ZXJuIGJvb2wgcG1fY2hlY2tfd2FrZXVwX2V2ZW50cyh2b2lkKTsKK2V4dGVybiBib29sIHBtX3dha2V1cF9wZW5kaW5nKHZvaWQpOwogZXh0ZXJuIGJvb2wgcG1fZ2V0X3dha2V1cF9jb3VudCh1bnNpZ25lZCBpbnQgKmNvdW50KTsKIGV4dGVybiBib29sIHBtX3NhdmVfd2FrZXVwX2NvdW50KHVuc2lnbmVkIGludCBjb3VudCk7CiAjZWxzZSAvKiAhQ09ORklHX1BNX1NMRUVQICovCkBAIC0zMDksNyArMzA5LDcgQEAKIAogI2RlZmluZSBwbV9ub3RpZmllcihmbiwgcHJpKQlkbyB7ICh2b2lkKShmbik7IH0gd2hpbGUgKDApCiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBwbV9jaGVja193YWtldXBfZXZlbnRzKHZvaWQpIHsgcmV0dXJuIHRydWU7IH0KK3N0YXRpYyBpbmxpbmUgYm9vbCBwbV93YWtldXBfcGVuZGluZyh2b2lkKSB7IHJldHVybiBmYWxzZTsgfQogI2VuZGlmIC8qICFDT05GSUdfUE1fU0xFRVAgKi8KIAogZXh0ZXJuIHN0cnVjdCBtdXRleCBwbV9tdXRleDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaCBiL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaAppbmRleCBjYWNjMjdhLi4xOGNkMDY4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgKKysrIGIvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oCkBAIC0xMjcsOCArMTI3LDYgQEAKICNkZWZpbmUgU1lTQ0FMTF9UUkFDRV9FTlRFUl9FVkVOVChzbmFtZSkJCQkJXAogCXN0YXRpYyBzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YQkJCQkJXAogCV9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKDQpKSkgX19zeXNjYWxsX21ldGFfIyNzbmFtZTsJCVwKLQlzdGF0aWMgc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsCQkJCQlcCi0JX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oNCkpKSBldmVudF9lbnRlcl8jI3NuYW1lOwkJXAogCXN0YXRpYyBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgX191c2VkCQkJCVwKIAkgIF9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKDQpKSkJCQkJXAogCSAgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX2Z0cmFjZV9ldmVudHMiKSkpCQkJXApAQCAtMTM3LDEzICsxMzUsMTIgQEAKIAkJLmNsYXNzCQkJPSAmZXZlbnRfY2xhc3Nfc3lzY2FsbF9lbnRlciwJXAogCQkuZXZlbnQuZnVuY3MgICAgICAgICAgICA9ICZlbnRlcl9zeXNjYWxsX3ByaW50X2Z1bmNzLAlcCiAJCS5kYXRhCQkJPSAodm9pZCAqKSZfX3N5c2NhbGxfbWV0YV8jI3NuYW1lLFwKLQl9CisJfTsJCQkJCQkJCVwKKwlfX1RSQUNFX0VWRU5UX0ZMQUdTKGVudGVyXyMjc25hbWUsIFRSQUNFX0VWRU5UX0ZMX0NBUF9BTlkpCiAKICNkZWZpbmUgU1lTQ0FMTF9UUkFDRV9FWElUX0VWRU5UKHNuYW1lKQkJCQkJXAogCXN0YXRpYyBzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YQkJCQkJXAogCV9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKDQpKSkgX19zeXNjYWxsX21ldGFfIyNzbmFtZTsJCVwKLQlzdGF0aWMgc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsCQkJCQlcCi0JX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oNCkpKSBldmVudF9leGl0XyMjc25hbWU7CQlcCiAJc3RhdGljIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCBfX3VzZWQJCQkJXAogCSAgX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oNCkpKQkJCQlcCiAJICBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfZnRyYWNlX2V2ZW50cyIpKSkJCQlcCkBAIC0xNTIsNyArMTQ5LDggQEAKIAkJLmNsYXNzCQkJPSAmZXZlbnRfY2xhc3Nfc3lzY2FsbF9leGl0LAlcCiAJCS5ldmVudC5mdW5jcwkJPSAmZXhpdF9zeXNjYWxsX3ByaW50X2Z1bmNzLAlcCiAJCS5kYXRhCQkJPSAodm9pZCAqKSZfX3N5c2NhbGxfbWV0YV8jI3NuYW1lLFwKLQl9CisJfTsJCQkJCQkJCVwKKwlfX1RSQUNFX0VWRU5UX0ZMQUdTKGV4aXRfIyNzbmFtZSwgVFJBQ0VfRVZFTlRfRkxfQ0FQX0FOWSkKIAogI2RlZmluZSBTWVNDQUxMX01FVEFEQVRBKHNuYW1lLCBuYikJCQkJXAogCVNZU0NBTExfVFJBQ0VfRU5URVJfRVZFTlQoc25hbWUpOwkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGltZXIuaCBiL2luY2x1ZGUvbGludXgvdGltZXIuaAppbmRleCAzOGNmMDkzLi42YWJkOTEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3RpbWVyLmgKKysrIGIvaW5jbHVkZS9saW51eC90aW1lci5oCkBAIC0yNCw5ICsyNCw5IEBACiAJaW50IHNsYWNrOwogCiAjaWZkZWYgQ09ORklHX1RJTUVSX1NUQVRTCisJaW50IHN0YXJ0X3BpZDsKIAl2b2lkICpzdGFydF9zaXRlOwogCWNoYXIgc3RhcnRfY29tbVsxNl07Ci0JaW50IHN0YXJ0X3BpZDsKICNlbmRpZgogI2lmZGVmIENPTkZJR19MT0NLREVQCiAJc3RydWN0IGxvY2tkZXBfbWFwIGxvY2tkZXBfbWFwOwpAQCAtNDgsMTIgKzQ4LDM4IEBACiAjZGVmaW5lIF9fVElNRVJfTE9DS0RFUF9NQVBfSU5JVElBTElaRVIoX2tuKQogI2VuZGlmCiAKKy8qCisgKiBOb3RlIHRoYXQgYWxsIHR2ZWNfYmFzZXMgYXJlIDIgYnl0ZSBhbGlnbmVkIGFuZCBsb3dlciBiaXQgb2YKKyAqIGJhc2UgaW4gdGltZXJfbGlzdCBpcyBndWFyYW50ZWVkIHRvIGJlIHplcm8uIFVzZSB0aGUgTFNCIHRvCisgKiBpbmRpY2F0ZSB3aGV0aGVyIHRoZSB0aW1lciBpcyBkZWZlcnJhYmxlLgorICoKKyAqIEEgZGVmZXJyYWJsZSB0aW1lciB3aWxsIHdvcmsgbm9ybWFsbHkgd2hlbiB0aGUgc3lzdGVtIGlzIGJ1c3ksIGJ1dAorICogd2lsbCBub3QgY2F1c2UgYSBDUFUgdG8gY29tZSBvdXQgb2YgaWRsZSBqdXN0IHRvIHNlcnZpY2UgaXQ7IGluc3RlYWQsCisgKiB0aGUgdGltZXIgd2lsbCBiZSBzZXJ2aWNlZCB3aGVuIHRoZSBDUFUgZXZlbnR1YWxseSB3YWtlcyB1cCB3aXRoIGEKKyAqIHN1YnNlcXVlbnQgbm9uLWRlZmVycmFibGUgdGltZXIuCisgKi8KKyNkZWZpbmUgVEJBU0VfREVGRVJSQUJMRV9GTEFHCQkoMHgxKQorCiAjZGVmaW5lIFRJTUVSX0lOSVRJQUxJWkVSKF9mdW5jdGlvbiwgX2V4cGlyZXMsIF9kYXRhKSB7CQlcCiAJCS5lbnRyeSA9IHsgLnByZXYgPSBUSU1FUl9FTlRSWV9TVEFUSUMgfSwJXAogCQkuZnVuY3Rpb24gPSAoX2Z1bmN0aW9uKSwJCQlcCiAJCS5leHBpcmVzID0gKF9leHBpcmVzKSwJCQkJXAogCQkuZGF0YSA9IChfZGF0YSksCQkJCVwKIAkJLmJhc2UgPSAmYm9vdF90dmVjX2Jhc2VzLAkJCVwKKwkJLnNsYWNrID0gLTEsCQkJCQlcCisJCV9fVElNRVJfTE9DS0RFUF9NQVBfSU5JVElBTElaRVIoCQlcCisJCQlfX0ZJTEVfXyAiOiIgX19zdHJpbmdpZnkoX19MSU5FX18pKQlcCisJfQorCisjZGVmaW5lIFRCQVNFX01BS0VfREVGRVJSRUQocHRyKSAoKHN0cnVjdCB0dmVjX2Jhc2UgKikJCVwKKwkJICAoKHVuc2lnbmVkIGNoYXIgKikocHRyKSArIFRCQVNFX0RFRkVSUkFCTEVfRkxBRykpCisKKyNkZWZpbmUgVElNRVJfREVGRVJSRURfSU5JVElBTElaRVIoX2Z1bmN0aW9uLCBfZXhwaXJlcywgX2RhdGEpIHtcCisJCS5lbnRyeSA9IHsgLnByZXYgPSBUSU1FUl9FTlRSWV9TVEFUSUMgfSwJXAorCQkuZnVuY3Rpb24gPSAoX2Z1bmN0aW9uKSwJCQlcCisJCS5leHBpcmVzID0gKF9leHBpcmVzKSwJCQkJXAorCQkuZGF0YSA9IChfZGF0YSksCQkJCVwKKwkJLmJhc2UgPSBUQkFTRV9NQUtFX0RFRkVSUkVEKCZib290X3R2ZWNfYmFzZXMpLAlcCiAJCV9fVElNRVJfTE9DS0RFUF9NQVBfSU5JVElBTElaRVIoCQlcCiAJCQlfX0ZJTEVfXyAiOiIgX19zdHJpbmdpZnkoX19MSU5FX18pKQlcCiAJfQpAQCAtMjQ4LDExICsyNzQsMTEgQEAKIAogZXh0ZXJuIHZvaWQgYWRkX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcik7CiAKK2V4dGVybiBpbnQgdHJ5X3RvX2RlbF90aW1lcl9zeW5jKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcik7CisKICNpZmRlZiBDT05GSUdfU01QCi0gIGV4dGVybiBpbnQgdHJ5X3RvX2RlbF90aW1lcl9zeW5jKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcik7CiAgIGV4dGVybiBpbnQgZGVsX3RpbWVyX3N5bmMoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKTsKICNlbHNlCi0jIGRlZmluZSB0cnlfdG9fZGVsX3RpbWVyX3N5bmModCkJZGVsX3RpbWVyKHQpCiAjIGRlZmluZSBkZWxfdGltZXJfc3luYyh0KQkJZGVsX3RpbWVyKHQpCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90aW1lcnF1ZXVlLmggYi9pbmNsdWRlL2xpbnV4L3RpbWVycXVldWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjRhYWJhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC90aW1lcnF1ZXVlLmgKQEAgLTAsMCArMSw1MCBAQAorI2lmbmRlZiBfTElOVVhfVElNRVJRVUVVRV9ICisjZGVmaW5lIF9MSU5VWF9USU1FUlFVRVVFX0gKKworI2luY2x1ZGUgPGxpbnV4L3JidHJlZS5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aW1lLmg+CisKKworc3RydWN0IHRpbWVycXVldWVfbm9kZSB7CisJc3RydWN0IHJiX25vZGUgbm9kZTsKKwlrdGltZV90IGV4cGlyZXM7Cit9OworCitzdHJ1Y3QgdGltZXJxdWV1ZV9oZWFkIHsKKwlzdHJ1Y3QgcmJfcm9vdCBoZWFkOworCXN0cnVjdCB0aW1lcnF1ZXVlX25vZGUgKm5leHQ7Cit9OworCisKK2V4dGVybiB2b2lkIHRpbWVycXVldWVfYWRkKHN0cnVjdCB0aW1lcnF1ZXVlX2hlYWQgKmhlYWQsCisJCQkJc3RydWN0IHRpbWVycXVldWVfbm9kZSAqbm9kZSk7CitleHRlcm4gdm9pZCB0aW1lcnF1ZXVlX2RlbChzdHJ1Y3QgdGltZXJxdWV1ZV9oZWFkICpoZWFkLAorCQkJCXN0cnVjdCB0aW1lcnF1ZXVlX25vZGUgKm5vZGUpOworZXh0ZXJuIHN0cnVjdCB0aW1lcnF1ZXVlX25vZGUgKnRpbWVycXVldWVfaXRlcmF0ZV9uZXh0KAorCQkJCQkJc3RydWN0IHRpbWVycXVldWVfbm9kZSAqbm9kZSk7CisKKy8qKgorICogdGltZXJxdWV1ZV9nZXRuZXh0IC0gUmV0dXJucyB0aGUgdGltZXIgd2l0aCB0aGUgZWFybGllcyBleHBpcmF0aW9uIHRpbWUKKyAqCisgKiBAaGVhZDogaGVhZCBvZiB0aW1lcnF1ZXVlCisgKgorICogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIHRpbWVyIG5vZGUgdGhhdCBoYXMgdGhlCisgKiBlYXJsaWVzdCBleHBpcmF0aW9uIHRpbWUuCisgKi8KK3N0YXRpYyBpbmxpbmUKK3N0cnVjdCB0aW1lcnF1ZXVlX25vZGUgKnRpbWVycXVldWVfZ2V0bmV4dChzdHJ1Y3QgdGltZXJxdWV1ZV9oZWFkICpoZWFkKQoreworCXJldHVybiBoZWFkLT5uZXh0OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdGltZXJxdWV1ZV9pbml0KHN0cnVjdCB0aW1lcnF1ZXVlX25vZGUgKm5vZGUpCit7CisJUkJfQ0xFQVJfTk9ERSgmbm9kZS0+bm9kZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0aW1lcnF1ZXVlX2luaXRfaGVhZChzdHJ1Y3QgdGltZXJxdWV1ZV9oZWFkICpoZWFkKQoreworCWhlYWQtPmhlYWQgPSBSQl9ST09UOworCWhlYWQtPm5leHQgPSBOVUxMOworfQorI2VuZGlmIC8qIF9MSU5VWF9USU1FUlFVRVVFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGlwYy5oIGIvaW5jbHVkZS9saW51eC90aXBjLmgKaW5kZXggZDEwNjE0Yi4uMWVlZmEzZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90aXBjLmgKKysrIGIvaW5jbHVkZS9saW51eC90aXBjLmgKQEAgLTEsNiArMSw2IEBACiAvKgogICogaW5jbHVkZS9saW51eC90aXBjLmg6IEluY2x1ZGUgZmlsZSBmb3IgVElQQyBzb2NrZXQgaW50ZXJmYWNlCi0gKiAKKyAqCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwNiwgRXJpY3Nzb24gQUIKICAqIENvcHlyaWdodCAoYykgMjAwNSwgV2luZCBSaXZlciBTeXN0ZW1zCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgpAQCAtNDIsNyArNDIsNyBAQAogLyoKICAqIFRJUEMgYWRkcmVzc2luZyBwcmltaXRpdmVzCiAgKi8KLSAKKwogc3RydWN0IHRpcGNfcG9ydGlkIHsKIAlfX3UzMiByZWY7CiAJX191MzIgbm9kZTsKQEAgLTg5LDcgKzg5LDcgQEAKICNkZWZpbmUgVElQQ19UT1BfU1JWCQkxCS8qIHRvcG9sb2d5IHNlcnZpY2UgbmFtZSB0eXBlICovCiAjZGVmaW5lIFRJUENfUkVTRVJWRURfVFlQRVMJNjQJLyogbG93ZXN0IHVzZXItcHVibGlzaGFibGUgbmFtZSB0eXBlICovCiAKLS8qIAorLyoKICAqIFB1YmxpY2F0aW9uIHNjb3BlcyB3aGVuIGJpbmRpbmcgcG9ydCBuYW1lcyBhbmQgcG9ydCBuYW1lIHNlcXVlbmNlcwogICovCiAKQEAgLTExMiw3ICsxMTIsNyBAQAogI2RlZmluZSBUSVBDX0hJR0hfSU1QT1JUQU5DRQkJMgogI2RlZmluZSBUSVBDX0NSSVRJQ0FMX0lNUE9SVEFOQ0UJMwogCi0vKiAKKy8qCiAgKiBNc2cgcmVqZWN0aW9uL2Nvbm5lY3Rpb24gc2h1dGRvd24gcmVhc29ucwogICovCiAKQEAgLTEyNyw5ICsxMjcsOSBAQAogICogVElQQyB0b3BvbG9neSBzdWJzY3JpcHRpb24gc2VydmljZSBkZWZpbml0aW9ucwogICovCiAKLSNkZWZpbmUgVElQQ19TVUJfUE9SVFMgICAgIAkweDAxICAJLyogZmlsdGVyIGZvciBwb3J0IGF2YWlsYWJpbGl0eSAqLwotI2RlZmluZSBUSVBDX1NVQl9TRVJWSUNFICAgICAJMHgwMiAgCS8qIGZpbHRlciBmb3Igc2VydmljZSBhdmFpbGFiaWxpdHkgKi8KLSNkZWZpbmUgVElQQ19TVUJfQ0FOQ0VMICAgICAgICAgMHgwNCAgICAvKiBjYW5jZWwgYSBzdWJzY3JpcHRpb24gKi8KKyNkZWZpbmUgVElQQ19TVUJfUE9SVFMJCTB4MDEJLyogZmlsdGVyIGZvciBwb3J0IGF2YWlsYWJpbGl0eSAqLworI2RlZmluZSBUSVBDX1NVQl9TRVJWSUNFCTB4MDIJLyogZmlsdGVyIGZvciBzZXJ2aWNlIGF2YWlsYWJpbGl0eSAqLworI2RlZmluZSBUSVBDX1NVQl9DQU5DRUwJCTB4MDQJLyogY2FuY2VsIGEgc3Vic2NyaXB0aW9uICovCiAjaWYgMAogLyogVGhlIGZvbGxvd2luZyBmaWx0ZXIgb3B0aW9ucyBhcmUgbm90IGN1cnJlbnRseSBpbXBsZW1lbnRlZCAqLwogI2RlZmluZSBUSVBDX1NVQl9OT19CSU5EX0VWVFMJMHgwNAkvKiBmaWx0ZXIgb3V0ICJwdWJsaXNoIiBldmVudHMgKi8KQEAgLTEzNywxMiArMTM3LDEyIEBACiAjZGVmaW5lIFRJUENfU1VCX1NJTkdMRV9FVlQJMHgxMAkvKiBleHBpcmUgYWZ0ZXIgZmlyc3QgZXZlbnQgKi8KICNlbmRpZgogCi0jZGVmaW5lIFRJUENfV0FJVF9GT1JFVkVSCX4wCS8qIHRpbWVvdXQgZm9yIHBlcm1hbmVudCBzdWJzY3JpcHRpb24gKi8KKyNkZWZpbmUgVElQQ19XQUlUX0ZPUkVWRVIJKH4wKQkvKiB0aW1lb3V0IGZvciBwZXJtYW5lbnQgc3Vic2NyaXB0aW9uICovCiAKIHN0cnVjdCB0aXBjX3N1YnNjciB7CiAJc3RydWN0IHRpcGNfbmFtZV9zZXEgc2VxOwkvKiBuYW1lIHNlcXVlbmNlIG9mIGludGVyZXN0ICovCiAJX191MzIgdGltZW91dDsJCQkvKiBzdWJzY3JpcHRpb24gZHVyYXRpb24gKGluIG1zKSAqLwotICAgICAgICBfX3UzMiBmaWx0ZXI7ICAgCQkvKiBiaXRtYXNrIG9mIGZpbHRlciBvcHRpb25zICovCisJX191MzIgZmlsdGVyOwkJCS8qIGJpdG1hc2sgb2YgZmlsdGVyIG9wdGlvbnMgKi8KIAljaGFyIHVzcl9oYW5kbGVbOF07CQkvKiBhdmFpbGFibGUgZm9yIHN1YnNjcmliZXIgdXNlICovCiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RpcGNfY29uZmlnLmggYi9pbmNsdWRlL2xpbnV4L3RpcGNfY29uZmlnLmgKaW5kZXggOWNkZTg2Yy4uN2Q0MjQ2MGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdGlwY19jb25maWcuaAorKysgYi9pbmNsdWRlL2xpbnV4L3RpcGNfY29uZmlnLmgKQEAgLTEsNiArMSw2IEBACiAvKgogICogaW5jbHVkZS9saW51eC90aXBjX2NvbmZpZy5oOiBJbmNsdWRlIGZpbGUgZm9yIFRJUEMgY29uZmlndXJhdGlvbiBpbnRlcmZhY2UKLSAqIAorICoKICAqIENvcHlyaWdodCAoYykgMjAwMy0yMDA2LCBFcmljc3NvbiBBQgogICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDcsIFdpbmQgUml2ZXIgU3lzdGVtcwogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KQEAgLTU0LDE5ICs1NCwxOSBAQAogICogd2hpY2ggc3BlY2lmeSBwYXJhbWV0ZXJzIG9yIHJlc3VsdHMgZm9yIHRoZSBvcGVyYXRpb24uCiAgKgogICogRm9yIG1hbnkgb3BlcmF0aW9ucywgdGhlIHJlcXVlc3QgYW5kIHJlcGx5IG1lc3NhZ2VzIGhhdmUgYSBmaXhlZCBudW1iZXIKLSAqIG9mIFRMVnMgKHVzdWFsbHkgemVybyBvciBvbmUpOyBob3dldmVyLCBzb21lIHJlcGx5IG1lc3NhZ2VzIG1heSByZXR1cm4gCisgKiBvZiBUTFZzICh1c3VhbGx5IHplcm8gb3Igb25lKTsgaG93ZXZlciwgc29tZSByZXBseSBtZXNzYWdlcyBtYXkgcmV0dXJuCiAgKiBhIHZhcmlhYmxlIG51bWJlciBvZiBUTFZzLiAgQSBmYWlsZWQgcmVxdWVzdCBpcyBkZW5vdGVkIGJ5IHRoZSBwcmVzZW5jZQogICogb2YgYW4gImVycm9yIHN0cmluZyIgVExWIGluIHRoZSByZXBseSBtZXNzYWdlIGluc3RlYWQgb2YgdGhlIFRMVihzKSB0aGUKICAqIHJlcGx5IHNob3VsZCBjb250YWluIGlmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLgogICovCi0gCi0vKiAKKworLyoKICAqIFB1YmxpYyBjb21tYW5kczoKICAqIE1heSBiZSBpc3N1ZWQgYnkgYW55IHByb2Nlc3MuCi0gKiBBY2NlcHRlZCBieSBvd24gbm9kZSwgb3IgYnkgcmVtb3RlIG5vZGUgb25seSBpZiByZW1vdGUgbWFuYWdlbWVudCBlbmFibGVkLiAgICAgICAgICAgICAgICAgICAgICAgCisgKiBBY2NlcHRlZCBieSBvd24gbm9kZSwgb3IgYnkgcmVtb3RlIG5vZGUgb25seSBpZiByZW1vdGUgbWFuYWdlbWVudCBlbmFibGVkLgogICovCi0gCi0jZGVmaW5lICBUSVBDX0NNRF9OT09QICAgCSAgICAweDAwMDAgICAgLyogdHggbm9uZSwgcnggbm9uZSAqLworCisjZGVmaW5lICBUSVBDX0NNRF9OT09QICAgICAgICAgICAgICAweDAwMDAgICAgLyogdHggbm9uZSwgcnggbm9uZSAqLwogI2RlZmluZSAgVElQQ19DTURfR0VUX05PREVTICAgICAgICAgMHgwMDAxICAgIC8qIHR4IG5ldF9hZGRyLCByeCBub2RlX2luZm8ocykgKi8KICNkZWZpbmUgIFRJUENfQ01EX0dFVF9NRURJQV9OQU1FUyAgIDB4MDAwMiAgICAvKiB0eCBub25lLCByeCBtZWRpYV9uYW1lKHMpICovCiAjZGVmaW5lICBUSVBDX0NNRF9HRVRfQkVBUkVSX05BTUVTICAweDAwMDMgICAgLyogdHggbm9uZSwgcnggYmVhcmVyX25hbWUocykgKi8KQEAgLTgzLDIxICs4MywyMSBAQAogI2RlZmluZSAgVElQQ19DTURfR0VUX0xJTktfUEVFUiAgICAgMHgwMDBEICAgIC8qIHR4IGxpbmtfbmFtZSwgcnggPyAqLwogI2VuZGlmCiAKLS8qIAorLyoKICAqIFByb3RlY3RlZCBjb21tYW5kczoKICAqIE1heSBvbmx5IGJlIGlzc3VlZCBieSAibmV0d29yayBhZG1pbmlzdHJhdGlvbiBjYXBhYmxlIiBwcm9jZXNzLgogICogQWNjZXB0ZWQgYnkgb3duIG5vZGUsIG9yIGJ5IHJlbW90ZSBub2RlIG9ubHkgaWYgcmVtb3RlIG1hbmFnZW1lbnQgZW5hYmxlZAotICogYW5kIHRoaXMgbm9kZSBpcyB6b25lIG1hbmFnZXIuICAgICAgICAgICAgICAgICAgICAgICAKKyAqIGFuZCB0aGlzIG5vZGUgaXMgem9uZSBtYW5hZ2VyLgogICovCiAKICNkZWZpbmUgIFRJUENfQ01EX0dFVF9SRU1PVEVfTU5HICAgIDB4NDAwMyAgICAvKiB0eCBub25lLCByeCB1bnNpZ25lZCAqLwogI2RlZmluZSAgVElQQ19DTURfR0VUX01BWF9QT1JUUyAgICAgMHg0MDA0ICAgIC8qIHR4IG5vbmUsIHJ4IHVuc2lnbmVkICovCiAjZGVmaW5lICBUSVBDX0NNRF9HRVRfTUFYX1BVQkwgICAgICAweDQwMDUgICAgLyogdHggbm9uZSwgcnggdW5zaWduZWQgKi8KICNkZWZpbmUgIFRJUENfQ01EX0dFVF9NQVhfU1VCU0NSICAgIDB4NDAwNiAgICAvKiB0eCBub25lLCByeCB1bnNpZ25lZCAqLwotI2RlZmluZSAgVElQQ19DTURfR0VUX01BWF9aT05FUyAgICAgMHg0MDA3ICAgIC8qIHR4IG5vbmUsIHJ4IHVuc2lnbmVkICovCi0jZGVmaW5lICBUSVBDX0NNRF9HRVRfTUFYX0NMVVNURVJTICAweDQwMDggICAgLyogdHggbm9uZSwgcnggdW5zaWduZWQgKi8KKyNkZWZpbmUgIFRJUENfQ01EX0dFVF9NQVhfWk9ORVMgICAgIDB4NDAwNyAgICAvKiBvYnNvbGV0ZWQgKi8KKyNkZWZpbmUgIFRJUENfQ01EX0dFVF9NQVhfQ0xVU1RFUlMgIDB4NDAwOCAgICAvKiBvYnNvbGV0ZWQgKi8KICNkZWZpbmUgIFRJUENfQ01EX0dFVF9NQVhfTk9ERVMgICAgIDB4NDAwOSAgICAvKiB0eCBub25lLCByeCB1bnNpZ25lZCAqLwotI2RlZmluZSAgVElQQ19DTURfR0VUX01BWF9TTEFWRVMgICAgMHg0MDBBICAgIC8qIHR4IG5vbmUsIHJ4IHVuc2lnbmVkICovCisjZGVmaW5lICBUSVBDX0NNRF9HRVRfTUFYX1NMQVZFUyAgICAweDQwMEEgICAgLyogb2Jzb2xldGVkICovCiAjZGVmaW5lICBUSVBDX0NNRF9HRVRfTkVUSUQgICAgICAgICAweDQwMEIgICAgLyogdHggbm9uZSwgcnggdW5zaWduZWQgKi8KIAogI2RlZmluZSAgVElQQ19DTURfRU5BQkxFX0JFQVJFUiAgICAgMHg0MTAxICAgIC8qIHR4IGJlYXJlcl9jb25maWcsIHJ4IG5vbmUgKi8KQEAgLTExNiwxMCArMTE2LDEwIEBACiAjZGVmaW5lICBUSVBDX0NNRF9VTkJMT0NLX0xJTksgICAgICAweDQxMDYgICAgLyogdHggbGlua19uYW1lLCByeCBub25lICovCiAjZW5kaWYKIAotLyogCisvKgogICogUHJpdmF0ZSBjb21tYW5kczoKICAqIE1heSBvbmx5IGJlIGlzc3VlZCBieSAibmV0d29yayBhZG1pbmlzdHJhdGlvbiBjYXBhYmxlIiBwcm9jZXNzLgotICogQWNjZXB0ZWQgYnkgb3duIG5vZGUgb25seTsgY2Fubm90IGJlIHVzZWQgb24gYSByZW1vdGUgbm9kZS4gICAgICAgICAgICAgICAgICAgICAgIAorICogQWNjZXB0ZWQgYnkgb3duIG5vZGUgb25seTsgY2Fubm90IGJlIHVzZWQgb24gYSByZW1vdGUgbm9kZS4KICAqLwogCiAjZGVmaW5lICBUSVBDX0NNRF9TRVRfTk9ERV9BRERSICAgICAweDgwMDEgICAgLyogdHggbmV0X2FkZHIsIHJ4IG5vbmUgKi8KQEAgLTEzMCwxMCArMTMwLDEwIEBACiAjZGVmaW5lICBUSVBDX0NNRF9TRVRfTUFYX1BPUlRTICAgICAweDgwMDQgICAgLyogdHggdW5zaWduZWQsIHJ4IG5vbmUgKi8KICNkZWZpbmUgIFRJUENfQ01EX1NFVF9NQVhfUFVCTCAgICAgIDB4ODAwNSAgICAvKiB0eCB1bnNpZ25lZCwgcnggbm9uZSAqLwogI2RlZmluZSAgVElQQ19DTURfU0VUX01BWF9TVUJTQ1IgICAgMHg4MDA2ICAgIC8qIHR4IHVuc2lnbmVkLCByeCBub25lICovCi0jZGVmaW5lICBUSVBDX0NNRF9TRVRfTUFYX1pPTkVTICAgICAweDgwMDcgICAgLyogdHggdW5zaWduZWQsIHJ4IG5vbmUgKi8KLSNkZWZpbmUgIFRJUENfQ01EX1NFVF9NQVhfQ0xVU1RFUlMgIDB4ODAwOCAgICAvKiB0eCB1bnNpZ25lZCwgcnggbm9uZSAqLworI2RlZmluZSAgVElQQ19DTURfU0VUX01BWF9aT05FUyAgICAgMHg4MDA3ICAgIC8qIG9ic29sZXRlZCAqLworI2RlZmluZSAgVElQQ19DTURfU0VUX01BWF9DTFVTVEVSUyAgMHg4MDA4ICAgIC8qIG9ic29sZXRlZCAqLwogI2RlZmluZSAgVElQQ19DTURfU0VUX01BWF9OT0RFUyAgICAgMHg4MDA5ICAgIC8qIHR4IHVuc2lnbmVkLCByeCBub25lICovCi0jZGVmaW5lICBUSVBDX0NNRF9TRVRfTUFYX1NMQVZFUyAgICAweDgwMEEgICAgLyogdHggdW5zaWduZWQsIHJ4IG5vbmUgKi8KKyNkZWZpbmUgIFRJUENfQ01EX1NFVF9NQVhfU0xBVkVTICAgIDB4ODAwQSAgICAvKiBvYnNvbGV0ZWQgKi8KICNkZWZpbmUgIFRJUENfQ01EX1NFVF9ORVRJRCAgICAgICAgIDB4ODAwQiAgICAvKiB0eCB1bnNpZ25lZCwgcnggbm9uZSAqLwogCiAvKgpAQCAtMTU2LDIwICsxNTYsMjAgQEAKICNkZWZpbmUgVElQQ19UTFZfVUxUUkFfU1RSSU5HCTUJLyogY2hhclszMjc2OF0gKG1heCkgKi8KIAogI2RlZmluZSBUSVBDX1RMVl9FUlJPUl9TVFJJTkcJMTYJLyogY2hhclsxMjhdIGNvbnRhaW5pbmcgImVycm9yIGNvZGUiICovCi0jZGVmaW5lIFRJUENfVExWX05FVF9BRERSICAgCTE3CS8qIDMyLWJpdCBpbnRlZ2VyIGRlbm90aW5nIDxaLkMuTj4gKi8KKyNkZWZpbmUgVElQQ19UTFZfTkVUX0FERFIJMTcJLyogMzItYml0IGludGVnZXIgZGVub3RpbmcgPFouQy5OPiAqLwogI2RlZmluZSBUSVBDX1RMVl9NRURJQV9OQU1FCTE4CS8qIGNoYXJbVElQQ19NQVhfTUVESUFfTkFNRV0gKi8KICNkZWZpbmUgVElQQ19UTFZfQkVBUkVSX05BTUUJMTkJLyogY2hhcltUSVBDX01BWF9CRUFSRVJfTkFNRV0gKi8KICNkZWZpbmUgVElQQ19UTFZfTElOS19OQU1FCTIwCS8qIGNoYXJbVElQQ19NQVhfTElOS19OQU1FXSAqLwogI2RlZmluZSBUSVBDX1RMVl9OT0RFX0lORk8JMjEJLyogc3RydWN0IHRpcGNfbm9kZV9pbmZvICovCiAjZGVmaW5lIFRJUENfVExWX0xJTktfSU5GTwkyMgkvKiBzdHJ1Y3QgdGlwY19saW5rX2luZm8gKi8KLSNkZWZpbmUgVElQQ19UTFZfQkVBUkVSX0NPTkZJRyAgMjMJLyogc3RydWN0IHRpcGNfYmVhcmVyX2NvbmZpZyAqLwotI2RlZmluZSBUSVBDX1RMVl9MSU5LX0NPTkZJRyAgICAyNAkvKiBzdHJ1Y3QgdGlwY19saW5rX2NvbmZpZyAqLworI2RlZmluZSBUSVBDX1RMVl9CRUFSRVJfQ09ORklHCTIzCS8qIHN0cnVjdCB0aXBjX2JlYXJlcl9jb25maWcgKi8KKyNkZWZpbmUgVElQQ19UTFZfTElOS19DT05GSUcJMjQJLyogc3RydWN0IHRpcGNfbGlua19jb25maWcgKi8KICNkZWZpbmUgVElQQ19UTFZfTkFNRV9UQkxfUVVFUlkJMjUJLyogc3RydWN0IHRpcGNfbmFtZV90YWJsZV9xdWVyeSAqLwotI2RlZmluZSBUSVBDX1RMVl9QT1JUX1JFRiAgIAkyNgkvKiAzMi1iaXQgcG9ydCByZWZlcmVuY2UgKi8KKyNkZWZpbmUgVElQQ19UTFZfUE9SVF9SRUYJMjYJLyogMzItYml0IHBvcnQgcmVmZXJlbmNlICovCiAKIC8qCiAgKiBNYXhpbXVtIHNpemVzIG9mIFRJUEMgYmVhcmVyLXJlbGF0ZWQgbmFtZXMgKGluY2x1ZGluZyB0ZXJtaW5hdGluZyBOVUwpCi0gKi8gCisgKi8KIAogI2RlZmluZSBUSVBDX01BWF9NRURJQV9OQU1FCTE2CS8qIGZvcm1hdCA9IG1lZGlhICovCiAjZGVmaW5lIFRJUENfTUFYX0lGX05BTUUJMTYJLyogZm9ybWF0ID0gaW50ZXJmYWNlICovCkBAIC0yMzQsNyArMjM0LDcgQEAKIH07CiAKIC8qCi0gKiBUaGUgZXJyb3Igc3RyaW5nIFRMViBpcyBhIG51bGwtdGVybWluYXRlZCBzdHJpbmcgZGVzY3JpYmluZyB0aGUgY2F1c2UgCisgKiBUaGUgZXJyb3Igc3RyaW5nIFRMViBpcyBhIG51bGwtdGVybWluYXRlZCBzdHJpbmcgZGVzY3JpYmluZyB0aGUgY2F1c2UKICAqIG9mIHRoZSByZXF1ZXN0IGZhaWx1cmUuICBUbyBzaW1wbGlmeSBlcnJvciBwcm9jZXNzaW5nIChhbmQgdG8gc2F2ZSBzcGFjZSkKICAqIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIHN0cmluZyBjYW4gYmUgYSBzcGVjaWFsIGVycm9yIGNvZGUgY2hhcmFjdGVyCiAgKiAobHlpbmcgYnkgdGhlIHJhbmdlIDB4ODAgdG8gMHhGRikgd2hpY2ggcmVwcmVzZW50cyBhIHByZS1kZWZpbmVkIHJlYXNvbi4KQEAgLTI1NCwxNiArMjU0LDExIEBACiAJc3RydWN0IHRpcGNfbWVkaWFfYWRkciBwZWVyX2FkZHI7CiAJY2hhciBiZWFyZXJfbmFtZVtUSVBDX01BWF9CRUFSRVJfTkFNRV07CiB9OwotCi1zdHJ1Y3QgdGlwY19yb3V0ZV9pbmZvIHsKLQlfX3UzMiBkZXN0OwotCV9fdTMyIHJvdXRlcjsKLX07CiAjZW5kaWYKIAogLyoKICAqIEEgVExWIGNvbnNpc3RzIG9mIGEgZGVzY3JpcHRvciwgZm9sbG93ZWQgYnkgdGhlIFRMViB2YWx1ZS4KLSAqIFRMViBkZXNjcmlwdG9yIGZpZWxkcyBhcmUgc3RvcmVkIGluIG5ldHdvcmsgYnl0ZSBvcmRlcjsgCisgKiBUTFYgZGVzY3JpcHRvciBmaWVsZHMgYXJlIHN0b3JlZCBpbiBuZXR3b3JrIGJ5dGUgb3JkZXI7CiAgKiBUTFYgdmFsdWVzIG11c3QgYWxzbyBiZSBzdG9yZWQgaW4gbmV0d29yayBieXRlIG9yZGVyICh3aGVyZSBhcHBsaWNhYmxlKS4KICAqIFRMViBkZXNjcmlwdG9ycyBtdXN0IGJlIGFsaWduZWQgdG8gYWRkcmVzc2VzIHdoaWNoIGFyZSBtdWx0aXBsZSBvZiA0LAogICogc28gdXAgdG8gMyBieXRlcyBvZiBwYWRkaW5nIG1heSBleGlzdCBhdCB0aGUgZW5kIG9mIHRoZSBUTFYgdmFsdWUgYXJlYS4KQEAgLTI5OSw3ICsyOTQsNyBAQAogCiBzdGF0aWMgaW5saW5lIGludCBUTFZfQ0hFQ0soY29uc3Qgdm9pZCAqdGx2LCBfX3UxNiBzcGFjZSwgX191MTYgZXhwX3R5cGUpCiB7Ci0JcmV0dXJuIFRMVl9PSyh0bHYsIHNwYWNlKSAmJiAKKwlyZXR1cm4gVExWX09LKHRsdiwgc3BhY2UpICYmCiAJCShudG9ocygoKHN0cnVjdCB0bHZfZGVzYyAqKXRsdiktPnRsdl90eXBlKSA9PSBleHBfdHlwZSk7CiB9CiAKQEAgLTMxOCw3ICszMTMsNyBAQAogfQogCiAvKgotICogQSBUTFYgbGlzdCBkZXNjcmlwdG9yIHNpbXBsaWZpZXMgcHJvY2Vzc2luZyBvZiBtZXNzYWdlcyAKKyAqIEEgVExWIGxpc3QgZGVzY3JpcHRvciBzaW1wbGlmaWVzIHByb2Nlc3Npbmcgb2YgbWVzc2FnZXMKICAqIGNvbnRhaW5pbmcgbXVsdGlwbGUgVExWcy4KICAqLwogCkBAIC0zMjcsMTUgKzMyMiwxNSBAQAogCV9fdTMyIHRsdl9zcGFjZTsJCS8qICMgYnl0ZXMgZnJvbSBjdXJyIFRMViB0byBsaXN0IGVuZCAqLwogfTsKIAotc3RhdGljIGlubGluZSB2b2lkIFRMVl9MSVNUX0lOSVQoc3RydWN0IHRsdl9saXN0X2Rlc2MgKmxpc3QsIAorc3RhdGljIGlubGluZSB2b2lkIFRMVl9MSVNUX0lOSVQoc3RydWN0IHRsdl9saXN0X2Rlc2MgKmxpc3QsCiAJCQkJIHZvaWQgKmRhdGEsIF9fdTMyIHNwYWNlKQogewogCWxpc3QtPnRsdl9wdHIgPSAoc3RydWN0IHRsdl9kZXNjICopZGF0YTsKIAlsaXN0LT50bHZfc3BhY2UgPSBzcGFjZTsKIH0KLQkgICAgIAorCiBzdGF0aWMgaW5saW5lIGludCBUTFZfTElTVF9FTVBUWShzdHJ1Y3QgdGx2X2xpc3RfZGVzYyAqbGlzdCkKLXsgCit7CiAJcmV0dXJuIChsaXN0LT50bHZfc3BhY2UgPT0gMCk7CiB9CiAKQEAgLTM1Myw3ICszNDgsNyBAQAogewogCV9fdTE2IHRsdl9zcGFjZSA9IFRMVl9BTElHTihudG9ocyhsaXN0LT50bHZfcHRyLT50bHZfbGVuKSk7CiAKLSAgICAgICAgbGlzdC0+dGx2X3B0ciA9IChzdHJ1Y3QgdGx2X2Rlc2MgKikoKGNoYXIgKilsaXN0LT50bHZfcHRyICsgdGx2X3NwYWNlKTsKKwlsaXN0LT50bHZfcHRyID0gKHN0cnVjdCB0bHZfZGVzYyAqKSgoY2hhciAqKWxpc3QtPnRsdl9wdHIgKyB0bHZfc3BhY2UpOwogCWxpc3QtPnRsdl9zcGFjZSAtPSB0bHZfc3BhY2U7CiB9CiAKQEAgLTM3NywxNSArMzcyLDE0IEBACiAjZGVmaW5lIFRJUENfR0VOTF9IRFJMRU4JTkxNU0dfQUxJR04oc2l6ZW9mKHN0cnVjdCB0aXBjX2dlbmxtc2doZHIpKQogCiAvKgotICogQ29uZmlndXJhdGlvbiBtZXNzYWdlcyBleGNoYW5nZWQgdmlhIFRJUEMgc29ja2V0cyB1c2UgdGhlIFRJUEMgY29uZmlndXJhdGlvbiAKLSAqIG1lc3NhZ2UgaGVhZGVyLCB3aGljaCBpcyBkZWZpbmVkIGJlbG93LiAgVGhpcyBzdHJ1Y3R1cmUgaXMgYW5hbG9nb3VzIAotICogdG8gdGhlIE5ldGxpbmsgbWVzc2FnZSBoZWFkZXIsIGJ1dCBmaWVsZHMgYXJlIHN0b3JlZCBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIgCi0gKiBhbmQgbm8gcGFkZGluZyBpcyBwZXJtaXR0ZWQgYmV0d2VlbiB0aGUgaGVhZGVyIGFuZCB0aGUgbWVzc2FnZSBkYXRhIAorICogQ29uZmlndXJhdGlvbiBtZXNzYWdlcyBleGNoYW5nZWQgdmlhIFRJUEMgc29ja2V0cyB1c2UgdGhlIFRJUEMgY29uZmlndXJhdGlvbgorICogbWVzc2FnZSBoZWFkZXIsIHdoaWNoIGlzIGRlZmluZWQgYmVsb3cuICBUaGlzIHN0cnVjdHVyZSBpcyBhbmFsb2dvdXMKKyAqIHRvIHRoZSBOZXRsaW5rIG1lc3NhZ2UgaGVhZGVyLCBidXQgZmllbGRzIGFyZSBzdG9yZWQgaW4gbmV0d29yayBieXRlIG9yZGVyCisgKiBhbmQgbm8gcGFkZGluZyBpcyBwZXJtaXR0ZWQgYmV0d2VlbiB0aGUgaGVhZGVyIGFuZCB0aGUgbWVzc2FnZSBkYXRhCiAgKiB0aGF0IGZvbGxvd3MuCiAgKi8KIAotc3RydWN0IHRpcGNfY2ZnX21zZ19oZHIKLXsKK3N0cnVjdCB0aXBjX2NmZ19tc2dfaGRyIHsKIAlfX2JlMzIgdGNtX2xlbjsJCS8qIE1lc3NhZ2UgbGVuZ3RoIChpbmNsdWRpbmcgaGVhZGVyKSAqLwogCV9fYmUxNiB0Y21fdHlwZTsJLyogQ29tbWFuZCB0eXBlICovCiAJX19iZTE2IHRjbV9mbGFnczsJLyogQWRkaXRpb25hbCBmbGFncyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90cmFjZXBvaW50LmggYi9pbmNsdWRlL2xpbnV4L3RyYWNlcG9pbnQuaAppbmRleCBhNGE5MGI2Li5kM2U0Zjg3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3RyYWNlcG9pbnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3RyYWNlcG9pbnQuaApAQCAtMTA2LDYgKzEwNiw3IEBACiAKICNkZWZpbmUgVFBfUFJPVE8oYXJncy4uLikJYXJncwogI2RlZmluZSBUUF9BUkdTKGFyZ3MuLi4pCWFyZ3MKKyNkZWZpbmUgVFBfQ09ORElUSU9OKGFyZ3MuLi4pCWFyZ3MKIAogI2lmZGVmIENPTkZJR19UUkFDRVBPSU5UUwogCkBAIC0xMTksMTIgKzEyMCwxNCBAQAogICogYXMgIih2b2lkICosIHZvaWQpIi4gVGhlIERFQ0xBUkVfVFJBQ0VfTk9BUkdTKCkgd2lsbCBwYXNzIGluIGp1c3QKICAqICJ2b2lkICpkYXRhIiwgd2hlcmUgYXMgdGhlIERFQ0xBUkVfVFJBQ0UoKSB3aWxsIHBhc3MgaW4gInZvaWQgKmRhdGEsIHByb3RvIi4KICAqLwotI2RlZmluZSBfX0RPX1RSQUNFKHRwLCBwcm90bywgYXJncykJCQkJCVwKKyNkZWZpbmUgX19ET19UUkFDRSh0cCwgcHJvdG8sIGFyZ3MsIGNvbmQpCQkJCVwKIAlkbyB7CQkJCQkJCQlcCiAJCXN0cnVjdCB0cmFjZXBvaW50X2Z1bmMgKml0X2Z1bmNfcHRyOwkJCVwKIAkJdm9pZCAqaXRfZnVuYzsJCQkJCQlcCiAJCXZvaWQgKl9fZGF0YTsJCQkJCQlcCiAJCQkJCQkJCQlcCisJCWlmICghKGNvbmQpKQkJCQkJCVwKKwkJCXJldHVybjsJCQkJCQlcCiAJCXJjdV9yZWFkX2xvY2tfc2NoZWRfbm90cmFjZSgpOwkJCQlcCiAJCWl0X2Z1bmNfcHRyID0gcmN1X2RlcmVmZXJlbmNlX3NjaGVkKCh0cCktPmZ1bmNzKTsJXAogCQlpZiAoaXRfZnVuY19wdHIpIHsJCQkJCVwKQEAgLTE0Miw3ICsxNDUsNyBAQAogICogbm90IGFkZCB1bndhbnRlZCBwYWRkaW5nIGJldHdlZW4gdGhlIGJlZ2lubmluZyBvZiB0aGUgc2VjdGlvbiBhbmQgdGhlCiAgKiBzdHJ1Y3R1cmUuIEZvcmNlIGFsaWdubWVudCB0byB0aGUgc2FtZSBhbGlnbm1lbnQgYXMgdGhlIHNlY3Rpb24gc3RhcnQuCiAgKi8KLSNkZWZpbmUgX19ERUNMQVJFX1RSQUNFKG5hbWUsIHByb3RvLCBhcmdzLCBkYXRhX3Byb3RvLCBkYXRhX2FyZ3MpCVwKKyNkZWZpbmUgX19ERUNMQVJFX1RSQUNFKG5hbWUsIHByb3RvLCBhcmdzLCBjb25kLCBkYXRhX3Byb3RvLCBkYXRhX2FyZ3MpCVwKIAlleHRlcm4gc3RydWN0IHRyYWNlcG9pbnQgX190cmFjZXBvaW50XyMjbmFtZTsJCQlcCiAJc3RhdGljIGlubGluZSB2b2lkIHRyYWNlXyMjbmFtZShwcm90bykJCQkJXAogCXsJCQkJCQkJCVwKQEAgLTE1MSw3ICsxNTQsOCBAQAogZG9fdHJhY2U6CQkJCQkJCQlcCiAJCQlfX0RPX1RSQUNFKCZfX3RyYWNlcG9pbnRfIyNuYW1lLAkJXAogCQkJCVRQX1BST1RPKGRhdGFfcHJvdG8pLAkJCVwKLQkJCQlUUF9BUkdTKGRhdGFfYXJncykpOwkJCVwKKwkJCQlUUF9BUkdTKGRhdGFfYXJncyksCQkJXAorCQkJCVRQX0NPTkRJVElPTihjb25kKSk7CQkJXAogCX0JCQkJCQkJCVwKIAlzdGF0aWMgaW5saW5lIGludAkJCQkJCVwKIAlyZWdpc3Rlcl90cmFjZV8jI25hbWUodm9pZCAoKnByb2JlKShkYXRhX3Byb3RvKSwgdm9pZCAqZGF0YSkJXApAQCAtMTg2LDcgKzE5MCw3IEBACiAJRVhQT1JUX1NZTUJPTChfX3RyYWNlcG9pbnRfIyNuYW1lKQogCiAjZWxzZSAvKiAhQ09ORklHX1RSQUNFUE9JTlRTICovCi0jZGVmaW5lIF9fREVDTEFSRV9UUkFDRShuYW1lLCBwcm90bywgYXJncywgZGF0YV9wcm90bywgZGF0YV9hcmdzKQlcCisjZGVmaW5lIF9fREVDTEFSRV9UUkFDRShuYW1lLCBwcm90bywgYXJncywgY29uZCwgZGF0YV9wcm90bywgZGF0YV9hcmdzKQlcCiAJc3RhdGljIGlubGluZSB2b2lkIHRyYWNlXyMjbmFtZShwcm90bykJCQkJXAogCXsgfQkJCQkJCQkJXAogCXN0YXRpYyBpbmxpbmUgaW50CQkJCQkJXApAQCAtMjI3LDEzICsyMzEsMjAgQEAKICAqICJ2b2lkICpfX2RhdGEsIHByb3RvIiBhcyB0aGUgY2FsbGJhY2sgcHJvdG90eXBlLgogICovCiAjZGVmaW5lIERFQ0xBUkVfVFJBQ0VfTk9BUkdTKG5hbWUpCQkJCQlcCi0JCV9fREVDTEFSRV9UUkFDRShuYW1lLCB2b2lkLCAsIHZvaWQgKl9fZGF0YSwgX19kYXRhKQorCQlfX0RFQ0xBUkVfVFJBQ0UobmFtZSwgdm9pZCwgLCAxLCB2b2lkICpfX2RhdGEsIF9fZGF0YSkKIAogI2RlZmluZSBERUNMQVJFX1RSQUNFKG5hbWUsIHByb3RvLCBhcmdzKQkJCQlcCi0JCV9fREVDTEFSRV9UUkFDRShuYW1lLCBQQVJBTVMocHJvdG8pLCBQQVJBTVMoYXJncyksCVwKKwkJX19ERUNMQVJFX1RSQUNFKG5hbWUsIFBBUkFNUyhwcm90byksIFBBUkFNUyhhcmdzKSwgMSwJXAogCQkJCVBBUkFNUyh2b2lkICpfX2RhdGEsIHByb3RvKSwJCVwKIAkJCQlQQVJBTVMoX19kYXRhLCBhcmdzKSkKIAorI2RlZmluZSBERUNMQVJFX1RSQUNFX0NPTkRJVElPTihuYW1lLCBwcm90bywgYXJncywgY29uZCkJCVwKKwlfX0RFQ0xBUkVfVFJBQ0UobmFtZSwgUEFSQU1TKHByb3RvKSwgUEFSQU1TKGFyZ3MpLCBQQVJBTVMoY29uZCksIFwKKwkJCVBBUkFNUyh2b2lkICpfX2RhdGEsIHByb3RvKSwJCQlcCisJCQlQQVJBTVMoX19kYXRhLCBhcmdzKSkKKworI2RlZmluZSBUUkFDRV9FVkVOVF9GTEFHUyhldmVudCwgZmxhZykKKwogI2VuZGlmIC8qIERFQ0xBUkVfVFJBQ0UgKi8KIAogI2lmbmRlZiBUUkFDRV9FVkVOVApAQCAtMzQ3LDExICszNTgsMjEgQEAKIAlERUNMQVJFX1RSQUNFKG5hbWUsIFBBUkFNUyhwcm90byksIFBBUkFNUyhhcmdzKSkKICNkZWZpbmUgREVGSU5FX0VWRU5UX1BSSU5UKHRlbXBsYXRlLCBuYW1lLCBwcm90bywgYXJncywgcHJpbnQpCVwKIAlERUNMQVJFX1RSQUNFKG5hbWUsIFBBUkFNUyhwcm90byksIFBBUkFNUyhhcmdzKSkKKyNkZWZpbmUgREVGSU5FX0VWRU5UX0NPTkRJVElPTih0ZW1wbGF0ZSwgbmFtZSwgcHJvdG8sCQlcCisJCQkgICAgICAgYXJncywgY29uZCkJCQlcCisJREVDTEFSRV9UUkFDRV9DT05ESVRJT04obmFtZSwgUEFSQU1TKHByb3RvKSwJCVwKKwkJCQlQQVJBTVMoYXJncyksIFBBUkFNUyhjb25kKSkKIAogI2RlZmluZSBUUkFDRV9FVkVOVChuYW1lLCBwcm90bywgYXJncywgc3RydWN0LCBhc3NpZ24sIHByaW50KQlcCiAJREVDTEFSRV9UUkFDRShuYW1lLCBQQVJBTVMocHJvdG8pLCBQQVJBTVMoYXJncykpCiAjZGVmaW5lIFRSQUNFX0VWRU5UX0ZOKG5hbWUsIHByb3RvLCBhcmdzLCBzdHJ1Y3QsCQlcCiAJCWFzc2lnbiwgcHJpbnQsIHJlZywgdW5yZWcpCQkJXAogCURFQ0xBUkVfVFJBQ0UobmFtZSwgUEFSQU1TKHByb3RvKSwgUEFSQU1TKGFyZ3MpKQorI2RlZmluZSBUUkFDRV9FVkVOVF9DT05ESVRJT04obmFtZSwgcHJvdG8sIGFyZ3MsIGNvbmQsCQlcCisJCQkgICAgICBzdHJ1Y3QsIGFzc2lnbiwgcHJpbnQpCQlcCisJREVDTEFSRV9UUkFDRV9DT05ESVRJT04obmFtZSwgUEFSQU1TKHByb3RvKSwJCVwKKwkJCQlQQVJBTVMoYXJncyksIFBBUkFNUyhjb25kKSkKKworI2RlZmluZSBUUkFDRV9FVkVOVF9GTEFHUyhldmVudCwgZmxhZykKIAogI2VuZGlmIC8qIGlmZGVmIFRSQUNFX0VWRU5UIChzZWUgbm90ZSBhYm92ZSkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdHR5X2RyaXZlci5oIGIvaW5jbHVkZS9saW51eC90dHlfZHJpdmVyLmgKaW5kZXggZGIyZDIyNy4uYzNkNDNlYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90dHlfZHJpdmVyLmgKKysrIGIvaW5jbHVkZS9saW51eC90dHlfZHJpdmVyLmgKQEAgLTEwMiw3ICsxMDIsNyBAQAogICogCSAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CiAgKgogICogCVRoaXMgcm91dGluZSBhbGxvd3MgdGhlIHR0eSBkcml2ZXIgdG8gaW1wbGVtZW50Ci0gKglkZXZpY2Utc3BlY2lmaWMgaW9jdGwncy4gIElmIHRoZSBpb2N0bCBudW1iZXIgcGFzc2VkIGluIGNtZAorICoJZGV2aWNlLXNwZWNpZmljIGlvY3Rscy4gIElmIHRoZSBpb2N0bCBudW1iZXIgcGFzc2VkIGluIGNtZAogICogCWlzIG5vdCByZWNvZ25pemVkIGJ5IHRoZSBkcml2ZXIsIGl0IHNob3VsZCByZXR1cm4gRU5PSU9DVExDTUQuCiAgKgogICoJT3B0aW9uYWwKQEAgLTE2NywxMiArMTY3LDEyIEBACiAgKiAKICAqIHZvaWQgKCpoYW5ndXApKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogICoKLSAqIAlUaGlzIHJvdXRpbmUgbm90aWZpZXMgdGhlIHR0eSBkcml2ZXIgdGhhdCBpdCBzaG91bGQgaGFuZ3VwIHRoZQorICogCVRoaXMgcm91dGluZSBub3RpZmllcyB0aGUgdHR5IGRyaXZlciB0aGF0IGl0IHNob3VsZCBoYW5nIHVwIHRoZQogICogCXR0eSBkZXZpY2UuCiAgKgogICoJT3B0aW9uYWw6CiAgKgotICogaW50ICgqYnJlYWtfY3RsKShzdHJ1Y3QgdHR5X3N0dWN0ICp0dHksIGludCBzdGF0ZSk7CisgKiBpbnQgKCpicmVha19jdGwpKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBzdGF0ZSk7CiAgKgogICogCVRoaXMgb3B0aW9uYWwgcm91dGluZSByZXF1ZXN0cyB0aGUgdHR5IGRyaXZlciB0byB0dXJuIG9uIG9yCiAgKiAJb2ZmIEJSRUFLIHN0YXR1cyBvbiB0aGUgUlMtMjMyIHBvcnQuICBJZiBzdGF0ZSBpcyAtMSwKQEAgLTIzNSw2ICsyMzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC90ZXJtaW9zLmg+CiAKIHN0cnVjdCB0dHlfc3RydWN0Owogc3RydWN0IHR0eV9kcml2ZXI7CkBAIC0zNTcsNyArMzU4LDcgQEAKICAqIAlvdmVycnVucywgZWl0aGVyLikKICAqCiAgKiBUVFlfRFJJVkVSX0RZTkFNSUNfREVWIC0tLSBpZiBzZXQsIHRoZSBpbmRpdmlkdWFsIHR0eSBkZXZpY2VzIG5lZWQKLSAqCXRvIGJlIHJlZ2lzdGVyZWQgd2l0aCBhIGNhbGwgdG8gdHR5X3JlZ2lzdGVyX2RyaXZlcigpIHdoZW4gdGhlCisgKgl0byBiZSByZWdpc3RlcmVkIHdpdGggYSBjYWxsIHRvIHR0eV9yZWdpc3Rlcl9kZXZpY2UoKSB3aGVuIHRoZQogICoJZGV2aWNlIGlzIGZvdW5kIGluIHRoZSBzeXN0ZW0gYW5kIHVucmVnaXN0ZXJlZCB3aXRoIGEgY2FsbCB0bwogICoJdHR5X3VucmVnaXN0ZXJfZGV2aWNlKCkgc28gdGhlIGRldmljZXMgd2lsbCBiZSBzaG93IHVwCiAgKglwcm9wZXJseSBpbiBzeXNmcy4gIElmIG5vdCBzZXQsIGRyaXZlci0+bnVtIGVudHJpZXMgd2lsbCBiZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91aW5wdXQuaCBiL2luY2x1ZGUvbGludXgvdWlucHV0LmgKaW5kZXggMDVmN2ZlZDIuLmQyOGM3MjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdWlucHV0LmgKKysrIGIvaW5jbHVkZS9saW51eC91aW5wdXQuaApAQCAtMTA0LDYgKzEwNCw3IEBACiAjZGVmaW5lIFVJX1NFVF9GRkJJVAkJX0lPVyhVSU5QVVRfSU9DVExfQkFTRSwgMTA3LCBpbnQpCiAjZGVmaW5lIFVJX1NFVF9QSFlTCQlfSU9XKFVJTlBVVF9JT0NUTF9CQVNFLCAxMDgsIGNoYXIqKQogI2RlZmluZSBVSV9TRVRfU1dCSVQJCV9JT1coVUlOUFVUX0lPQ1RMX0JBU0UsIDEwOSwgaW50KQorI2RlZmluZSBVSV9TRVRfUFJPUEJJVAkJX0lPVyhVSU5QVVRfSU9DVExfQkFTRSwgMTEwLCBpbnQpCiAKICNkZWZpbmUgVUlfQkVHSU5fRkZfVVBMT0FECV9JT1dSKFVJTlBVVF9JT0NUTF9CQVNFLCAyMDAsIHN0cnVjdCB1aW5wdXRfZmZfdXBsb2FkKQogI2RlZmluZSBVSV9FTkRfRkZfVVBMT0FECV9JT1coVUlOUFVUX0lPQ1RMX0JBU0UsIDIwMSwgc3RydWN0IHVpbnB1dF9mZl91cGxvYWQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi5oIGIvaW5jbHVkZS9saW51eC91c2IuaAppbmRleCBhMjhlYjI1Li5iZDY5YjY1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiLmgKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CS8qIGZvciBzdHJ1Y3QgY29tcGxldGlvbiAqLwogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CS8qIGZvciBjdXJyZW50ICYmIHNjaGVkdWxlX3RpbWVvdXQgKi8KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgkvKiBmb3Igc3RydWN0IG11dGV4ICovCisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgkvKiBmb3IgcnVudGltZSBQTSAqLwogCiBzdHJ1Y3QgdXNiX2RldmljZTsKIHN0cnVjdCB1c2JfZHJpdmVyOwpAQCAtNDExLDggKzQxMiw2IEBACiAgKiBAcXVpcmtzOiBxdWlya3Mgb2YgdGhlIHdob2xlIGRldmljZQogICogQHVyYm51bTogbnVtYmVyIG9mIFVSQnMgc3VibWl0dGVkIGZvciB0aGUgd2hvbGUgZGV2aWNlCiAgKiBAYWN0aXZlX2R1cmF0aW9uOiB0b3RhbCB0aW1lIGRldmljZSBpcyBub3Qgc3VzcGVuZGVkCi0gKiBAbGFzdF9idXN5OiB0aW1lIG9mIGxhc3QgdXNlCi0gKiBAYXV0b3N1c3BlbmRfZGVsYXk6IGluIGppZmZpZXMKICAqIEBjb25uZWN0X3RpbWU6IHRpbWUgZGV2aWNlIHdhcyBmaXJzdCBjb25uZWN0ZWQKICAqIEBkb19yZW1vdGVfd2FrZXVwOiAgcmVtb3RlIHdha2V1cCBzaG91bGQgYmUgZW5hYmxlZAogICogQHJlc2V0X3Jlc3VtZTogbmVlZHMgcmVzZXQgaW5zdGVhZCBvZiByZXN1bWUKQEAgLTQ4NSw4ICs0ODQsNiBAQAogCXVuc2lnbmVkIGxvbmcgYWN0aXZlX2R1cmF0aW9uOwogCiAjaWZkZWYgQ09ORklHX1BNCi0JdW5zaWduZWQgbG9uZyBsYXN0X2J1c3k7Ci0JaW50IGF1dG9zdXNwZW5kX2RlbGF5OwogCXVuc2lnbmVkIGxvbmcgY29ubmVjdF90aW1lOwogCiAJdW5zaWduZWQgZG9fcmVtb3RlX3dha2V1cDoxOwpAQCAtNTMxLDcgKzUyOCw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB1c2JfbWFya19sYXN0X2J1c3koc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCiB7Ci0JdWRldi0+bGFzdF9idXN5ID0gamlmZmllczsKKwlwbV9ydW50aW1lX21hcmtfbGFzdF9idXN5KCZ1ZGV2LT5kZXYpOwogfQogCiAjZWxzZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IvY2gxMS5oIGIvaW5jbHVkZS9saW51eC91c2IvY2gxMS5oCmluZGV4IDExOTE5NGMuLjEwZWMwNjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiL2NoMTEuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9jaDExLmgKQEAgLTI4LDYgKzI4LDEzIEBACiAjZGVmaW5lIEhVQl9TVE9QX1RUCQkxMQogCiAvKgorICogSHViIGNsYXNzIGFkZGl0aW9uYWwgcmVxdWVzdHMgZGVmaW5lZCBieSBVU0IgMy4wIHNwZWMKKyAqIFNlZSBVU0IgMy4wIHNwZWMgVGFibGUgMTAtNgorICovCisjZGVmaW5lIEhVQl9TRVRfREVQVEgJCTEyCisjZGVmaW5lIEhVQl9HRVRfUE9SVF9FUlJfQ09VTlQJMTMKKworLyoKICAqIEh1YiBDbGFzcyBmZWF0dXJlIG51bWJlcnMKICAqIFNlZSBVU0IgMi4wIHNwZWMgVGFibGUgMTEtMTcKICAqLwpAQCAtNTYsNiArNjMsMjAgQEAKICNkZWZpbmUgVVNCX1BPUlRfRkVBVF9DX1BPUlRfTDEgICAgICAgICAyMwogCiAvKgorICogUG9ydCBmZWF0dXJlIHNlbGVjdG9ycyBhZGRlZCBieSBVU0IgMy4wIHNwZWMuCisgKiBTZWUgVVNCIDMuMCBzcGVjIFRhYmxlIDEwLTcKKyAqLworI2RlZmluZSBVU0JfUE9SVF9GRUFUX0xJTktfU1RBVEUJCTUKKyNkZWZpbmUgVVNCX1BPUlRfRkVBVF9VMV9USU1FT1VUCQkyMworI2RlZmluZSBVU0JfUE9SVF9GRUFUX1UyX1RJTUVPVVQJCTI0CisjZGVmaW5lIFVTQl9QT1JUX0ZFQVRfQ19MSU5LX1NUQVRFCQkyNQorI2RlZmluZSBVU0JfUE9SVF9GRUFUX0NfQ09ORklHX0VSUgkJMjYKKyNkZWZpbmUgVVNCX1BPUlRfRkVBVF9SRU1PVEVfV0FLRV9NQVNLCQkyNworI2RlZmluZSBVU0JfUE9SVF9GRUFUX0JIX1BPUlRfUkVTRVQJCTI4CisjZGVmaW5lIFVTQl9QT1JUX0ZFQVRfQ19CSF9QT1JUX1JFU0VUCQkyOQorI2RlZmluZSBVU0JfUE9SVF9GRUFUX0ZPUkNFX0xJTktQTV9BQ0NFUFQJMzAKKworLyoKICAqIEh1YiBTdGF0dXMgYW5kIEh1YiBDaGFuZ2UgcmVzdWx0cwogICogU2VlIFVTQiAyLjAgc3BlYyBUYWJsZSAxMS0xOSBhbmQgVGFibGUgMTEtMjAKICAqLwpAQCAtODQsNiArMTA1LDMyIEBACiAjZGVmaW5lIFVTQl9QT1JUX1NUQVRfU1VQRVJfU1BFRUQJMHg4MDAwCS8qIExpbnV4LWludGVybmFsICovCiAKIC8qCisgKiBBZGRpdGlvbnMgdG8gd1BvcnRTdGF0dXMgYml0IGZpZWxkIGZyb20gVVNCIDMuMAorICogU2VlIFVTQiAzLjAgc3BlYyBUYWJsZSAxMC0xMAorICovCisjZGVmaW5lIFVTQl9QT1JUX1NUQVRfTElOS19TVEFURQkweDAxZTAKKyNkZWZpbmUgVVNCX1NTX1BPUlRfU1RBVF9QT1dFUgkJMHgwMjAwCisjZGVmaW5lIFVTQl9QT1JUX1NUQVRfU1BFRURfNUdCUFMJMHgwMDAwCisvKiBWYWxpZCBvbmx5IGlmIHBvcnQgaXMgZW5hYmxlZCAqLworCisvKgorICogRGVmaW5pdGlvbnMgZm9yIFBPUlRfTElOS19TVEFURSB2YWx1ZXMKKyAqIChiaXRzIDUtOCkgaW4gd1BvcnRTdGF0dXMKKyAqLworI2RlZmluZSBVU0JfU1NfUE9SVF9MU19VMAkJMHgwMDAwCisjZGVmaW5lIFVTQl9TU19QT1JUX0xTX1UxCQkweDAwMjAKKyNkZWZpbmUgVVNCX1NTX1BPUlRfTFNfVTIJCTB4MDA0MAorI2RlZmluZSBVU0JfU1NfUE9SVF9MU19VMwkJMHgwMDYwCisjZGVmaW5lIFVTQl9TU19QT1JUX0xTX1NTX0RJU0FCTEVECTB4MDA4MAorI2RlZmluZSBVU0JfU1NfUE9SVF9MU19SWF9ERVRFQ1QJMHgwMGEwCisjZGVmaW5lIFVTQl9TU19QT1JUX0xTX1NTX0lOQUNUSVZFCTB4MDBjMAorI2RlZmluZSBVU0JfU1NfUE9SVF9MU19QT0xMSU5HCQkweDAwZTAKKyNkZWZpbmUgVVNCX1NTX1BPUlRfTFNfUkVDT1ZFUlkJCTB4MDEwMAorI2RlZmluZSBVU0JfU1NfUE9SVF9MU19IT1RfUkVTRVQJMHgwMTIwCisjZGVmaW5lIFVTQl9TU19QT1JUX0xTX0NPTVBfTU9ECQkweDAxNDAKKyNkZWZpbmUgVVNCX1NTX1BPUlRfTFNfTE9PUEJBQ0sJCTB4MDE2MAorCisvKgogICogd1BvcnRDaGFuZ2UgYml0IGZpZWxkCiAgKiBTZWUgVVNCIDIuMCBzcGVjIFRhYmxlIDExLTIyCiAgKiBCaXRzIDAgdG8gNCBzaG93biwgYml0cyA1IHRvIDE1IGFyZSByZXNlcnZlZApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IvY2g5LmggYi9pbmNsdWRlL2xpbnV4L3VzYi9jaDkuaAppbmRleCBmOTE3YmJiLi5hYjQ2MTk0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi9jaDkuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9jaDkuaApAQCAtMTI0LDYgKzEyNCwxNiBAQAogI2RlZmluZSBVU0JfREVWSUNFX0RFQlVHX01PREUJCTYJLyogKHNwZWNpYWwgZGV2aWNlcyBvbmx5KSAqLwogCiAvKgorICogVGVzdCBNb2RlIFNlbGVjdG9ycworICogU2VlIFVTQiAyLjAgc3BlYyBUYWJsZSA5LTcKKyAqLworI2RlZmluZQlURVNUX0oJCTEKKyNkZWZpbmUJVEVTVF9LCQkyCisjZGVmaW5lCVRFU1RfU0UwX05BSwkzCisjZGVmaW5lCVRFU1RfUEFDS0VUCTQKKyNkZWZpbmUJVEVTVF9GT1JDRV9FTgk1CisKKy8qCiAgKiBOZXcgRmVhdHVyZSBTZWxlY3RvcnMgYXMgYWRkZWQgYnkgVVNCIDMuMAogICogU2VlIFVTQiAzLjAgc3BlYyBUYWJsZSA5LTYKICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IvaGNkLmggYi9pbmNsdWRlL2xpbnV4L3VzYi9oY2QuaAppbmRleCAwYjZlNzUxLi5kZDZlZTQ5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi9oY2QuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9oY2QuaApAQCAtNDcxLDYgKzQ3MSwxMCBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCisvKiBjbGFzcyByZXF1ZXN0cyBmcm9tIFVTQiAzLjAgaHViIHNwZWMsIHRhYmxlIDEwLTUgKi8KKyNkZWZpbmUgU2V0SHViRGVwdGgJCSgweDMwMDAgfCBIVUJfU0VUX0RFUFRIKQorI2RlZmluZSBHZXRQb3J0RXJyb3JDb3VudAkoMHg4MDAwIHwgSFVCX0dFVF9QT1JUX0VSUl9DT1VOVCkKKwogLyoKICAqIEdlbmVyaWMgYmFuZHdpZHRoIGFsbG9jYXRpb24gY29uc3RhbnRzL3N1cHBvcnQKICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IvbXNtX2hzdXNiLmggYi9pbmNsdWRlL2xpbnV4L3VzYi9tc21faHN1c2IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjc1ZTAzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC91c2IvbXNtX2hzdXNiLmgKQEAgLTAsMCArMSwxMTIgQEAKKy8qIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLW1zbS9oc3VzYi5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEdvb2dsZSwgSW5jLgorICogQXV0aG9yOiBCcmlhbiBTd2V0bGFuZCA8c3dldGxhbmRAZ29vZ2xlLmNvbT4KKyAqIENvcHlyaWdodCAoYykgMjAwOS0yMDEwLCBDb2RlIEF1cm9yYSBGb3J1bS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfTVNNX0hTVVNCX0gKKyNkZWZpbmUgX19BU01fQVJDSF9NU01fSFNVU0JfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC91c2Ivb3RnLmg+CisKKy8qKgorICogU3VwcG9ydGVkIFVTQiBtb2RlcworICoKKyAqIFVTQl9QRVJJUEhFUkFMICAgICAgIE9ubHkgcGVyaXBoZXJhbCBtb2RlIGlzIHN1cHBvcnRlZC4KKyAqIFVTQl9IT1NUICAgICAgICAgICAgIE9ubHkgaG9zdCBtb2RlIGlzIHN1cHBvcnRlZC4KKyAqIFVTQl9PVEcgICAgICAgICAgICAgIE9URyBtb2RlIGlzIHN1cHBvcnRlZC4KKyAqCisgKi8KK2VudW0gdXNiX21vZGVfdHlwZSB7CisJVVNCX05PTkUgPSAwLAorCVVTQl9QRVJJUEhFUkFMLAorCVVTQl9IT1NULAorCVVTQl9PVEcsCit9OworCisvKioKKyAqIE9URyBjb250cm9sCisgKgorICogT1RHX05PX0NPTlRST0wJSWQvVkJVUyBub3RpZmljYXRpb25zIG5vdCByZXF1aXJlZC4gVXNlZnVsIGluIGhvc3QKKyAqICAgICAgICAgICAgICAgICAgICAgIG9ubHkgY29uZmlndXJhdGlvbi4KKyAqIE9UR19QSFlfQ09OVFJPTAlJZC9WQlVTIG5vdGlmaWNhdGlvbnMgY29tZXMgZm9ybSBVU0IgUEhZLgorICogT1RHX1BNSUNfQ09OVFJPTAlJZC9WQlVTIG5vdGlmaWNhdGlvbnMgY29tZXMgZnJvbSBQTUlDIGhhcmR3YXJlLgorICogT1RHX1VTRVJfQ09OVFJPTAlJZC9WQlVTIG5vdGlmY2F0aW9ucyBjb21lcyBmcm9tIFVzZXIgdmlhIHN5c2ZzLgorICoKKyAqLworZW51bSBvdGdfY29udHJvbF90eXBlIHsKKwlPVEdfTk9fQ09OVFJPTCA9IDAsCisJT1RHX1BIWV9DT05UUk9MLAorCU9UR19QTUlDX0NPTlRST0wsCisJT1RHX1VTRVJfQ09OVFJPTCwKK307CisKKy8qKgorICogc3RydWN0IG1zbV9vdGdfcGxhdGZvcm1fZGF0YSAtIHBsYXRmb3JtIGRldmljZSBkYXRhCisgKiAgICAgICAgICAgICAgZm9yIG1zbTcya19vdGcgZHJpdmVyLgorICogQHBoeV9pbml0X3NlcTogUEhZIGNvbmZpZ3VyYXRpb24gc2VxdWVuY2UuIHZhbCwgcmVnIHBhaXJzCisgKiAgICAgICAgICAgICAgdGVybWluYXRlZCBieSAtMS4KKyAqIEB2YnVzX3Bvd2VyOiBWQlVTIHBvd2VyIG9uL29mZiByb3V0aW5lLgorICogQHBvd2VyX2J1ZGdldDogVkJVUyBwb3dlciBidWRnZXQgaW4gbUEgKDAgd2lsbCBiZSB0cmVhdGVkIGFzIDUwMG1BKS4KKyAqIEBtb2RlOiBTdXBwb3J0ZWQgbW9kZSAoT1RHL3BlcmlwaGVyYWwvaG9zdCkuCisgKiBAb3RnX2NvbnRyb2w6IE9URyBzd2l0Y2ggY29udHJvbGxlZCBieSB1c2VyL0lkIHBpbgorICogQGRlZmF1bHRfbW9kZTogRGVmYXVsdCBvcGVyYXRpb25hbCBtb2RlLiBBcHBsaWNhYmxlIG9ubHkgaWYKKyAqICAgICAgICAgICAgICBPVEcgc3dpdGNoIGlzIGNvbnRyb2xsZXIgYnkgdXNlci4KKyAqCisgKi8KK3N0cnVjdCBtc21fb3RnX3BsYXRmb3JtX2RhdGEgeworCWludCAqcGh5X2luaXRfc2VxOworCXZvaWQgKCp2YnVzX3Bvd2VyKShib29sIG9uKTsKKwl1bnNpZ25lZCBwb3dlcl9idWRnZXQ7CisJZW51bSB1c2JfbW9kZV90eXBlIG1vZGU7CisJZW51bSBvdGdfY29udHJvbF90eXBlIG90Z19jb250cm9sOworCWVudW0gdXNiX21vZGVfdHlwZSBkZWZhdWx0X21vZGU7CisJdm9pZCAoKnNldHVwX2dwaW8pKGVudW0gdXNiX290Z19zdGF0ZSBzdGF0ZSk7Cit9OworCisvKioKKyAqIHN0cnVjdCBtc21fb3RnOiBPVEcgZHJpdmVyIGRhdGEuIFNoYXJlZCBieSBIQ0QgYW5kIERDRC4KKyAqIEBvdGc6IFVTQiBPVEcgVHJhbnNjZWl2ZXIgc3RydWN0dXJlLgorICogQHBkYXRhOiBvdGcgZGV2aWNlIHBsYXRmb3JtIGRhdGEuCisgKiBAaXJxOiBJUlEgbnVtYmVyIGFzc2lnbmVkIGZvciBIU1VTQiBjb250cm9sbGVyLgorICogQGNsazogY2xvY2sgc3RydWN0IG9mIHVzYl9oc19jbGsuCisgKiBAcGNsazogY2xvY2sgc3RydWN0IG9mIHVzYl9oc19wY2xrLgorICogQHBoeV9yZXNldF9jbGs6IGNsb2NrIHN0cnVjdCBvZiB1c2JfcGh5X2Nsay4KKyAqIEBjb3JlX2NsazogY2xvY2sgc3RydWN0IG9mIHVzYl9oc19jb3JlX2Nsay4KKyAqIEByZWdzOiBpb3JlbWFwcGVkIHJlZ2lzdGVyIGJhc2UgYWRkcmVzcy4KKyAqIEBpbnB1dHM6IE9URyBzdGF0ZSBtYWNoaW5lIGlucHV0cyhJZCwgU2Vzc1ZhbGlkIGV0YykuCisgKiBAc21fd29yazogT1RHIHN0YXRlIG1hY2hpbmUgd29yay4KKyAqIEBpbl9scG06IGluZGljYXRlcyBsb3cgcG93ZXIgbW9kZSAoTFBNKSBzdGF0ZS4KKyAqIEBhc3luY19pbnQ6IEFzeW5jIGludGVycnVwdCBhcnJpdmVkLgorICoKKyAqLworc3RydWN0IG1zbV9vdGcgeworCXN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIgb3RnOworCXN0cnVjdCBtc21fb3RnX3BsYXRmb3JtX2RhdGEgKnBkYXRhOworCWludCBpcnE7CisJc3RydWN0IGNsayAqY2xrOworCXN0cnVjdCBjbGsgKnBjbGs7CisJc3RydWN0IGNsayAqcGh5X3Jlc2V0X2NsazsKKwlzdHJ1Y3QgY2xrICpjb3JlX2NsazsKKwl2b2lkIF9faW9tZW0gKnJlZ3M7CisjZGVmaW5lIElECQkwCisjZGVmaW5lIEJfU0VTU19WTEQJMQorCXVuc2lnbmVkIGxvbmcgaW5wdXRzOworCXN0cnVjdCB3b3JrX3N0cnVjdCBzbV93b3JrOworCWF0b21pY190IGluX2xwbTsKKwlpbnQgYXN5bmNfaW50OworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9tc21faHN1c2JfaHcuaCBiL2luY2x1ZGUvbGludXgvdXNiL21zbV9oc3VzYl9ody5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5MmUxNzMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9tc21faHN1c2JfaHcuaApAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEdvb2dsZSwgSW5jLgorICogQXV0aG9yOiBCcmlhbiBTd2V0bGFuZCA8c3dldGxhbmRAZ29vZ2xlLmNvbT4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaWZuZGVmIF9fTElOVVhfVVNCX0dBREdFVF9NU003MktfVURDX0hfXworI2RlZmluZSBfX0xJTlVYX1VTQl9HQURHRVRfTVNNNzJLX1VEQ19IX18KKworI2lmZGVmIENPTkZJR19BUkNIX01TTTdYMDBBCisjZGVmaW5lIFVTQl9TQlVTQ0ZHICAgICAgICAgIChNU01fVVNCX0JBU0UgKyAweDAwOTApCisjZWxzZQorI2RlZmluZSBVU0JfQUhCQlVSU1QgICAgICAgICAoTVNNX1VTQl9CQVNFICsgMHgwMDkwKQorI2RlZmluZSBVU0JfQUhCTU9ERSAgICAgICAgICAoTVNNX1VTQl9CQVNFICsgMHgwMDk4KQorI2VuZGlmCisjZGVmaW5lIFVTQl9DQVBMRU5HVEggICAgICAgIChNU01fVVNCX0JBU0UgKyAweDAxMDApIC8qIDggYml0ICovCisKKyNkZWZpbmUgVVNCX1VTQkNNRCAgICAgICAgICAgKE1TTV9VU0JfQkFTRSArIDB4MDE0MCkKKyNkZWZpbmUgVVNCX1BPUlRTQyAgICAgICAgICAgKE1TTV9VU0JfQkFTRSArIDB4MDE4NCkKKyNkZWZpbmUgVVNCX09UR1NDICAgICAgICAgICAgKE1TTV9VU0JfQkFTRSArIDB4MDFBNCkKKyNkZWZpbmUgVVNCX1VTQk1PREUgICAgICAgICAgKE1TTV9VU0JfQkFTRSArIDB4MDFBOCkKKworI2RlZmluZSBVU0JDTURfUkVTRVQgICAyCisjZGVmaW5lIFVTQl9VU0JJTlRSICAgICAgICAgIChNU01fVVNCX0JBU0UgKyAweDAxNDgpCisKKyNkZWZpbmUgUE9SVFNDX1BIQ0QgICAgICAgICAgICAoMSA8PCAyMykgLyogcGh5IHN1c3BlbmQgbW9kZSAqLworI2RlZmluZSBQT1JUU0NfUFRTX01BU0sgICAgICAgICAoMyA8PCAzMCkKKyNkZWZpbmUgUE9SVFNDX1BUU19VTFBJICAgICAgICAgKDMgPDwgMzApCisKKyNkZWZpbmUgVVNCX1VMUElfVklFV1BPUlQgICAgKE1TTV9VU0JfQkFTRSArIDB4MDE3MCkKKyNkZWZpbmUgVUxQSV9SVU4gICAgICAgICAgICAgICgxIDw8IDMwKQorI2RlZmluZSBVTFBJX1dSSVRFICAgICAgICAgICAgKDEgPDwgMjkpCisjZGVmaW5lIFVMUElfUkVBRCAgICAgICAgICAgICAoMCA8PCAyOSkKKyNkZWZpbmUgVUxQSV9BRERSKG4pICAgICAgICAgICgoKG4pICYgMjU1KSA8PCAxNikKKyNkZWZpbmUgVUxQSV9EQVRBKG4pICAgICAgICAgICgobikgJiAyNTUpCisjZGVmaW5lIFVMUElfREFUQV9SRUFEKG4pICAgICAoKChuKSA+PiA4KSAmIDI1NSkKKworI2RlZmluZSBBU1lOQ19JTlRSX0NUUkwgICAgICAgICAoMSA8PCAyOSkgLyogRW5hYmxlIGFzeW5jIGludGVycnVwdCAqLworI2RlZmluZSBVTFBJX1NUUF9DVFJMICAgICAgICAgICAoMSA8PCAzMCkgLyogQmxvY2sgY29tbXVuaWNhdGlvbiB3aXRoIFBIWSAqLworCisvKiBPVEcgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgT1RHU0NfSU5UU1RTX01BU0sJKDB4N2YgPDwgMTYpCisjZGVmaW5lIE9UR1NDX0lECQkoMSA8PCA4KQorI2RlZmluZSBPVEdTQ19CU1YJCSgxIDw8IDExKQorI2RlZmluZSBPVEdTQ19JRElTCQkoMSA8PCAxNikKKyNkZWZpbmUgT1RHU0NfQlNWSVMJCSgxIDw8IDE5KQorI2RlZmluZSBPVEdTQ19JRElFCQkoMSA8PCAyNCkKKyNkZWZpbmUgT1RHU0NfQlNWSUUJCSgxIDw8IDI3KQorCisjZW5kaWYgLyogX19MSU5VWF9VU0JfR0FER0VUX01TTTcyS19VRENfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9tdXNiLmggYi9pbmNsdWRlL2xpbnV4L3VzYi9tdXNiLmgKaW5kZXggMjM4N2Y5Zi4uZWI1MDUyNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2IvbXVzYi5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL211c2IuaApAQCAtMyw3ICszLDcgQEAKICAqIEludmVudHJhIChNdWx0aWRyb3ApIEhpZ2hzcGVlZCBEdWFsLVJvbGUgQ29udHJvbGxlcnM6ICAoTSlIRFJDLgogICoKICAqIEJvYXJkIGluaXRpYWxpemF0aW9uIHNob3VsZCBwdXQgb25lIG9mIHRoZXNlIGludG8gZGV2LT5wbGF0Zm9ybV9kYXRhLAotICogcHJvYmFibHkgb24gc29tZSBwbGF0Zm9ybV9kZXZpY2UgbmFtZWQgIm11c2JfaGRyYyIuICBJdCBlbmNhcHN1bGF0ZXMKKyAqIHByb2JhYmx5IG9uIHNvbWUgcGxhdGZvcm1fZGV2aWNlIG5hbWVkICJtdXNiLWhkcmMiLiAgSXQgZW5jYXBzdWxhdGVzCiAgKiBrZXkgY29uZmlndXJhdGlvbiBkaWZmZXJlbmNlcyBiZXR3ZWVuIGJvYXJkcy4KICAqLwogCkBAIC0xMjAsMTQgKzEyMCwxNCBAQAogCS8qIFBvd2VyIHRoZSBkZXZpY2Ugb24gb3Igb2ZmICovCiAJaW50CQkoKnNldF9wb3dlcikoaW50IHN0YXRlKTsKIAotCS8qIFR1cm4gZGV2aWNlIGNsb2NrIG9uIG9yIG9mZiAqLwotCWludAkJKCpzZXRfY2xvY2spKHN0cnVjdCBjbGsgKmNsb2NrLCBpbnQgaXNfb24pOwotCiAJLyogTVVTQiBjb25maWd1cmF0aW9uLXNwZWNpZmljIGRldGFpbHMgKi8KIAlzdHJ1Y3QgbXVzYl9oZHJjX2NvbmZpZwkqY29uZmlnOwogCiAJLyogQXJjaGl0ZWN0dXJlIHNwZWNpZmljIGJvYXJkIGRhdGEJKi8KIAl2b2lkCQkqYm9hcmRfZGF0YTsKKworCS8qIFBsYXRmb3JtIHNwZWNpZmljIHN0cnVjdCBtdXNiX29wcyBwb2ludGVyICovCisJY29uc3Qgdm9pZAkqcGxhdGZvcm1fb3BzOwogfTsKIAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9vdGcuaCBiL2luY2x1ZGUvbGludXgvdXNiL290Zy5oCmluZGV4IDBhNWIzNzEuLmExYTFlN2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiL290Zy5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL290Zy5oCkBAIC0xMTYsNyArMTE2LDcgQEAKIC8qIGZvciBib2FyZC1zcGVjaWZpYyBpbml0IGxvZ2ljICovCiBleHRlcm4gaW50IG90Z19zZXRfdHJhbnNjZWl2ZXIoc3RydWN0IG90Z190cmFuc2NlaXZlciAqKTsKIAotI2lmIGRlZmluZWQoQ09ORklHX05PUF9VU0JfWENFSVYpIHx8IGRlZmluZWQoQ09ORklHX05PUF9VU0JfWENFSVZfTU9EVUxFKQorI2lmIGRlZmluZWQoQ09ORklHX05PUF9VU0JfWENFSVYpIHx8IChkZWZpbmVkKENPTkZJR19OT1BfVVNCX1hDRUlWX01PRFVMRSkgJiYgZGVmaW5lZChNT0RVTEUpKQogLyogc29tZXRpbWVzIHRyYW5zY2VpdmVycyBhcmUgYWNjZXNzZWQgb25seSB0aHJvdWdoIGUuZy4gVUxQSSAqLwogZXh0ZXJuIHZvaWQgdXNiX25vcF94Y2Vpdl9yZWdpc3Rlcih2b2lkKTsKIGV4dGVybiB2b2lkIHVzYl9ub3BfeGNlaXZfdW5yZWdpc3Rlcih2b2lkKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL3VzYm5ldC5oIGIvaW5jbHVkZS9saW51eC91c2IvdXNibmV0LmgKaW5kZXggN2FlMjdhNC4uNDQ4NDJjOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2IvdXNibmV0LmgKKysrIGIvaW5jbHVkZS9saW51eC91c2IvdXNibmV0LmgKQEAgLTk3LDYgKzk3LDEyIEBACiAKICNkZWZpbmUgRkxBR19MSU5LX0lOVFIJMHgwODAwCQkvKiB1cGRhdGVzIGxpbmsgKGNhcnJpZXIpIHN0YXR1cyAqLwogCisvKgorICogSW5kaWNhdGVzIHRvIHVzYm5ldCwgdGhhdCBVU0IgZHJpdmVyIGFjY3VtdWxhdGVzIG11bHRpcGxlIElQIHBhY2tldHMuCisgKiBBZmZlY3RzIHN0YXRpc3RpYyAoY291bnRlcnMpIGFuZCBzaG9ydCBwYWNrZXQgaGFuZGxpbmcuCisgKi8KKyNkZWZpbmUgRkxBR19NVUxUSV9QQUNLRVQJMHgxMDAwCisKIAkvKiBpbml0IGRldmljZSAuLi4gY2FuIHNsZWVwLCBvciBjYXVzZSBwcm9iZSgpIGZhaWx1cmUgKi8KIAlpbnQJKCpiaW5kKShzdHJ1Y3QgdXNibmV0ICosIHN0cnVjdCB1c2JfaW50ZXJmYWNlICopOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpYS1jb3JlLmggYi9pbmNsdWRlL2xpbnV4L3ZpYS1jb3JlLmgKaW5kZXggMzhiZmZkOC4uOWMyMWNkZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92aWEtY29yZS5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlhLWNvcmUuaApAQCAtNjAsNiArNjAsMjEgQEAKIH07CiAKIC8qCisgKiBBbGxvdyBzdWJkZXZzIHRvIHJlZ2lzdGVyIHN1c3BlbmQvcmVzdW1lIGhvb2tzLgorICovCisjaWZkZWYgQ09ORklHX1BNCitzdHJ1Y3QgdmlhZmJfcG1faG9va3MgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlpbnQgKCpzdXNwZW5kKSh2b2lkICpwcml2YXRlKTsKKwlpbnQgKCpyZXN1bWUpKHZvaWQgKnByaXZhdGUpOworCXZvaWQgKnByaXZhdGU7Cit9OworCit2b2lkIHZpYWZiX3BtX3JlZ2lzdGVyKHN0cnVjdCB2aWFmYl9wbV9ob29rcyAqaG9va3MpOwordm9pZCB2aWFmYl9wbV91bnJlZ2lzdGVyKHN0cnVjdCB2aWFmYl9wbV9ob29rcyAqaG9va3MpOworI2VuZGlmIC8qIENPTkZJR19QTSAqLworCisvKgogICogVGhpcyBpcyB0aGUgZ2xvYmFsIHZpYWZiICJkZXZpY2UiIGNvbnRhaW5pbmcgc3R1ZmYgbmVlZGVkIGJ5CiAgKiBhbGwgc3ViZGV2cy4KICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92aWRlb2Rldi5oIGIvaW5jbHVkZS9saW51eC92aWRlb2Rldi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTllYWIxLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbGludXgvdmlkZW9kZXYuaAorKysgL2Rldi9udWxsCkBAIC0xLDM0MCArMCwwIEBACi0vKgotICoJVmlkZW8gZm9yIExpbnV4IHZlcnNpb24gMSAtIE9CU09MRVRFCi0gKgotICoJSGVhZGVyIGZpbGUgZm9yIHY0bDEgZHJpdmVycyBhbmQgYXBwbGljYXRpb25zLCBmb3IKLSAqCUxpbnV4IGtlcm5lbHMgMi4yLnggb3IgMi40LnguCi0gKgotICoJUHJvdmlkZXMgaGVhZGVyIGZvciBsZWdhY3kgZHJpdmVycyBhbmQgYXBwbGljYXRpb25zCi0gKgotICoJU2VlIGh0dHA6Ly9saW51eHR2Lm9yZyBmb3IgbW9yZSBpbmZvCi0gKgotICovCi0jaWZuZGVmIF9fTElOVVhfVklERU9ERVZfSAotI2RlZmluZSBfX0xJTlVYX1ZJREVPREVWX0gKLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KLQotI2lmIGRlZmluZWQoX19NSU5fVjRMMSkgJiYgZGVmaW5lZCAoX19LRVJORUxfXykKLQotLyoKLSAqIFVzZWQgYnkgdGhvc2UgVjRMMiBjb3JlIGZ1bmN0aW9ucyB0aGF0IG5lZWQgYSBtaW5pbXVtIFY0TDEgc3VwcG9ydCwKLSAqIGluIG9yZGVyIHRvIGFsbG93IFY0TDEgQ29tcGF0aWJpbHR5IGNvZGUgY29tcGlsYXRpb24uCi0gKi8KLQotc3RydWN0IHZpZGVvX21idWYKLXsKLQlpbnQJc2l6ZTsJCS8qIFRvdGFsIG1lbW9yeSB0byBtYXAgKi8KLQlpbnQJZnJhbWVzOwkJLyogRnJhbWVzICovCi0JaW50CW9mZnNldHNbVklERU9fTUFYX0ZSQU1FXTsKLX07Ci0KLSNkZWZpbmUgVklESU9DR01CVUYJCV9JT1IoJ3YnLDIwLCBzdHJ1Y3QgdmlkZW9fbWJ1ZikJCS8qIE1lbW9yeSBtYXAgYnVmZmVyIGluZm8gKi8KLQotI2Vsc2UKLSNpZiBkZWZpbmVkKENPTkZJR19WSURFT19WNEwxX0NPTVBBVCkgfHwgIWRlZmluZWQgKF9fS0VSTkVMX18pCi0KLSNkZWZpbmUgVklEX1RZUEVfQ0FQVFVSRQkxCS8qIENhbiBjYXB0dXJlICovCi0jZGVmaW5lIFZJRF9UWVBFX1RVTkVSCQkyCS8qIENhbiB0dW5lICovCi0jZGVmaW5lIFZJRF9UWVBFX1RFTEVURVhUCTQJLyogRG9lcyB0ZWxldGV4dCAqLwotI2RlZmluZSBWSURfVFlQRV9PVkVSTEFZCTgJLyogT3ZlcmxheSBvbnRvIGZyYW1lIGJ1ZmZlciAqLwotI2RlZmluZSBWSURfVFlQRV9DSFJPTUFLRVkJMTYJLyogT3ZlcmxheSBieSBjaHJvbWFrZXkgKi8KLSNkZWZpbmUgVklEX1RZUEVfQ0xJUFBJTkcJMzIJLyogQ2FuIGNsaXAgKi8KLSNkZWZpbmUgVklEX1RZUEVfRlJBTUVSQU0JNjQJLyogVXNlcyB0aGUgZnJhbWUgYnVmZmVyIG1lbW9yeSAqLwotI2RlZmluZSBWSURfVFlQRV9TQ0FMRVMJCTEyOAkvKiBTY2FsYWJsZSAqLwotI2RlZmluZSBWSURfVFlQRV9NT05PQ0hST01FCTI1NgkvKiBNb25vY2hyb21lIG9ubHkgKi8KLSNkZWZpbmUgVklEX1RZUEVfU1VCQ0FQVFVSRQk1MTIJLyogQ2FuIGNhcHR1cmUgc3ViYXJlYXMgb2YgdGhlIGltYWdlICovCi0jZGVmaW5lIFZJRF9UWVBFX01QRUdfREVDT0RFUgkxMDI0CS8qIENhbiBkZWNvZGUgTVBFRyBzdHJlYW1zICovCi0jZGVmaW5lIFZJRF9UWVBFX01QRUdfRU5DT0RFUgkyMDQ4CS8qIENhbiBlbmNvZGUgTVBFRyBzdHJlYW1zICovCi0jZGVmaW5lIFZJRF9UWVBFX01KUEVHX0RFQ09ERVIJNDA5NgkvKiBDYW4gZGVjb2RlIE1KUEVHIHN0cmVhbXMgKi8KLSNkZWZpbmUgVklEX1RZUEVfTUpQRUdfRU5DT0RFUgk4MTkyCS8qIENhbiBlbmNvZGUgTUpQRUcgc3RyZWFtcyAqLwotCi1zdHJ1Y3QgdmlkZW9fY2FwYWJpbGl0eQotewotCWNoYXIgbmFtZVszMl07Ci0JaW50IHR5cGU7Ci0JaW50IGNoYW5uZWxzOwkvKiBOdW0gY2hhbm5lbHMgKi8KLQlpbnQgYXVkaW9zOwkvKiBOdW0gYXVkaW8gZGV2aWNlcyAqLwotCWludCBtYXh3aWR0aDsJLyogU3VwcG9ydGVkIHdpZHRoICovCi0JaW50IG1heGhlaWdodDsJLyogQW5kIGhlaWdodCAqLwotCWludCBtaW53aWR0aDsJLyogU3VwcG9ydGVkIHdpZHRoICovCi0JaW50IG1pbmhlaWdodDsJLyogQW5kIGhlaWdodCAqLwotfTsKLQotCi1zdHJ1Y3QgdmlkZW9fY2hhbm5lbAotewotCWludCBjaGFubmVsOwotCWNoYXIgbmFtZVszMl07Ci0JaW50IHR1bmVyczsKLQlfX3UzMiAgZmxhZ3M7Ci0jZGVmaW5lIFZJREVPX1ZDX1RVTkVSCQkxCS8qIENoYW5uZWwgaGFzIGEgdHVuZXIgKi8KLSNkZWZpbmUgVklERU9fVkNfQVVESU8JCTIJLyogQ2hhbm5lbCBoYXMgYXVkaW8gKi8KLQlfX3UxNiAgdHlwZTsKLSNkZWZpbmUgVklERU9fVFlQRV9UVgkJMQotI2RlZmluZSBWSURFT19UWVBFX0NBTUVSQQkyCi0JX191MTYgbm9ybTsJCQkvKiBOb3JtIHNldCBieSBjaGFubmVsICovCi19OwotCi1zdHJ1Y3QgdmlkZW9fdHVuZXIKLXsKLQlpbnQgdHVuZXI7Ci0JY2hhciBuYW1lWzMyXTsKLQl1bnNpZ25lZCBsb25nIHJhbmdlbG93LCByYW5nZWhpZ2g7CS8qIFR1bmVyIHJhbmdlICovCi0JX191MzIgZmxhZ3M7Ci0jZGVmaW5lIFZJREVPX1RVTkVSX1BBTAkJMQotI2RlZmluZSBWSURFT19UVU5FUl9OVFNDCTIKLSNkZWZpbmUgVklERU9fVFVORVJfU0VDQU0JNAotI2RlZmluZSBWSURFT19UVU5FUl9MT1cJCTgJLyogVXNlcyBLSHogbm90IE1IeiAqLwotI2RlZmluZSBWSURFT19UVU5FUl9OT1JNCTE2CS8qIFR1bmVyIGNhbiBzZXQgbm9ybSAqLwotI2RlZmluZSBWSURFT19UVU5FUl9TVEVSRU9fT04JMTI4CS8qIFR1bmVyIGlzIHNlZWluZyBzdGVyZW8gKi8KLSNkZWZpbmUgVklERU9fVFVORVJfUkRTX09OICAgICAgMjU2ICAgICAvKiBUdW5lciBpcyBzZWVpbmcgYW4gUkRTIGRhdGFzdHJlYW0gKi8KLSNkZWZpbmUgVklERU9fVFVORVJfTUJTX09OICAgICAgNTEyICAgICAvKiBUdW5lciBpcyBzZWVpbmcgYW4gTUJTIGRhdGFzdHJlYW0gKi8KLQlfX3UxNiBtb2RlOwkJCS8qIFBBTC9OVFNDL1NFQ0FNL09USEVSICovCi0jZGVmaW5lIFZJREVPX01PREVfUEFMCQkwCi0jZGVmaW5lIFZJREVPX01PREVfTlRTQwkJMQotI2RlZmluZSBWSURFT19NT0RFX1NFQ0FNCTIKLSNkZWZpbmUgVklERU9fTU9ERV9BVVRPCQkzCi0JX191MTYgc2lnbmFsOwkJCS8qIFNpZ25hbCBzdHJlbmd0aCAxNmJpdCBzY2FsZSAqLwotfTsKLQotc3RydWN0IHZpZGVvX3BpY3R1cmUKLXsKLQlfX3UxNglicmlnaHRuZXNzOwotCV9fdTE2CWh1ZTsKLQlfX3UxNgljb2xvdXI7Ci0JX191MTYJY29udHJhc3Q7Ci0JX191MTYJd2hpdGVuZXNzOwkvKiBCbGFjayBhbmQgd2hpdGUgb25seSAqLwotCV9fdTE2CWRlcHRoOwkJLyogQ2FwdHVyZSBkZXB0aCAqLwotCV9fdTE2ICAgcGFsZXR0ZTsJLyogUGFsZXR0ZSBpbiB1c2UgKi8KLSNkZWZpbmUgVklERU9fUEFMRVRURV9HUkVZCTEJLyogTGluZWFyIGdyZXlzY2FsZSAqLwotI2RlZmluZSBWSURFT19QQUxFVFRFX0hJMjQwCTIJLyogSGlnaCAyNDAgY3ViZSAoQlQ4NDgpICovCi0jZGVmaW5lIFZJREVPX1BBTEVUVEVfUkdCNTY1CTMJLyogNTY1IDE2IGJpdCBSR0IgKi8KLSNkZWZpbmUgVklERU9fUEFMRVRURV9SR0IyNAk0CS8qIDI0Yml0IFJHQiAqLwotI2RlZmluZSBWSURFT19QQUxFVFRFX1JHQjMyCTUJLyogMzJiaXQgUkdCICovCi0jZGVmaW5lIFZJREVPX1BBTEVUVEVfUkdCNTU1CTYJLyogNTU1IDE1Yml0IFJHQiAqLwotI2RlZmluZSBWSURFT19QQUxFVFRFX1lVVjQyMgk3CS8qIFlVVjQyMiBjYXB0dXJlICovCi0jZGVmaW5lIFZJREVPX1BBTEVUVEVfWVVZVgk4Ci0jZGVmaW5lIFZJREVPX1BBTEVUVEVfVVlWWQk5CS8qIFRoZSBncmVhdCB0aGluZyBhYm91dCBzdGFuZGFyZHMgaXMgLi4uICovCi0jZGVmaW5lIFZJREVPX1BBTEVUVEVfWVVWNDIwCTEwCi0jZGVmaW5lIFZJREVPX1BBTEVUVEVfWVVWNDExCTExCS8qIFlVVjQxMSBjYXB0dXJlICovCi0jZGVmaW5lIFZJREVPX1BBTEVUVEVfUkFXCTEyCS8qIFJBVyBjYXB0dXJlIChCVDg0OCkgKi8KLSNkZWZpbmUgVklERU9fUEFMRVRURV9ZVVY0MjJQCTEzCS8qIFlVViA0OjI6MiBQbGFuYXIgKi8KLSNkZWZpbmUgVklERU9fUEFMRVRURV9ZVVY0MTFQCTE0CS8qIFlVViA0OjE6MSBQbGFuYXIgKi8KLSNkZWZpbmUgVklERU9fUEFMRVRURV9ZVVY0MjBQCTE1CS8qIFlVViA0OjI6MCBQbGFuYXIgKi8KLSNkZWZpbmUgVklERU9fUEFMRVRURV9ZVVY0MTBQCTE2CS8qIFlVViA0OjE6MCBQbGFuYXIgKi8KLSNkZWZpbmUgVklERU9fUEFMRVRURV9QTEFOQVIJMTMJLyogc3RhcnQgb2YgcGxhbmFyIGVudHJpZXMgKi8KLSNkZWZpbmUgVklERU9fUEFMRVRURV9DT01QT05FTlQgNwkvKiBzdGFydCBvZiBjb21wb25lbnQgZW50cmllcyAqLwotfTsKLQotc3RydWN0IHZpZGVvX2F1ZGlvCi17Ci0JaW50CWF1ZGlvOwkJLyogQXVkaW8gY2hhbm5lbCAqLwotCV9fdTE2CXZvbHVtZTsJCS8qIElmIHNldHRhYmxlICovCi0JX191MTYJYmFzcywgdHJlYmxlOwotCV9fdTMyCWZsYWdzOwotI2RlZmluZSBWSURFT19BVURJT19NVVRFCTEKLSNkZWZpbmUgVklERU9fQVVESU9fTVVUQUJMRQkyCi0jZGVmaW5lIFZJREVPX0FVRElPX1ZPTFVNRQk0Ci0jZGVmaW5lIFZJREVPX0FVRElPX0JBU1MJOAotI2RlZmluZSBWSURFT19BVURJT19UUkVCTEUJMTYKLSNkZWZpbmUgVklERU9fQVVESU9fQkFMQU5DRQkzMgotCWNoYXIgICAgbmFtZVsxNl07Ci0jZGVmaW5lIFZJREVPX1NPVU5EX01PTk8JMQotI2RlZmluZSBWSURFT19TT1VORF9TVEVSRU8JMgotI2RlZmluZSBWSURFT19TT1VORF9MQU5HMQk0Ci0jZGVmaW5lIFZJREVPX1NPVU5EX0xBTkcyCTgKLQlfX3UxNiAgIG1vZGU7Ci0JX191MTYJYmFsYW5jZTsJLyogU3RlcmVvIGJhbGFuY2UgKi8KLQlfX3UxNglzdGVwOwkJLyogU3RlcCBhY3R1YWwgdm9sdW1lIHVzZXMgKi8KLX07Ci0KLXN0cnVjdCB2aWRlb19jbGlwCi17Ci0JX19zMzIJeCx5OwotCV9fczMyCXdpZHRoLCBoZWlnaHQ7Ci0Jc3RydWN0CXZpZGVvX2NsaXAgKm5leHQ7CS8qIEZvciB1c2VyIHVzZS9kcml2ZXIgdXNlIG9ubHkgKi8KLX07Ci0KLXN0cnVjdCB2aWRlb193aW5kb3cKLXsKLQlfX3UzMgl4LHk7CQkJLyogUG9zaXRpb24gb2Ygd2luZG93ICovCi0JX191MzIJd2lkdGgsaGVpZ2h0OwkJLyogSXRzIHNpemUgKi8KLQlfX3UzMgljaHJvbWFrZXk7Ci0JX191MzIJZmxhZ3M7Ci0Jc3RydWN0CXZpZGVvX2NsaXAgX191c2VyICpjbGlwczsJLyogU2V0IG9ubHkgKi8KLQlpbnQJY2xpcGNvdW50OwotI2RlZmluZSBWSURFT19XSU5ET1dfSU5URVJMQUNFCTEKLSNkZWZpbmUgVklERU9fV0lORE9XX0NIUk9NQUtFWQkxNgkvKiBPdmVybGF5IGJ5IGNocm9tYWtleSAqLwotI2RlZmluZSBWSURFT19DTElQX0JJVE1BUAktMQotLyogYml0bWFwIGlzIDEwMjR4NjI1LCBhICcxJyBiaXQgcmVwcmVzZW50cyBhIGNsaXBwZWQgcGl4ZWwgKi8KLSNkZWZpbmUgVklERU9fQ0xJUE1BUF9TSVpFCSgxMjggKiA2MjUpCi19OwotCi1zdHJ1Y3QgdmlkZW9fY2FwdHVyZQotewotCV9fdTMyIAl4LHk7CQkJLyogT2Zmc2V0cyBpbnRvIGltYWdlICovCi0JX191MzIJd2lkdGgsIGhlaWdodDsJCS8qIEFyZWEgdG8gY2FwdHVyZSAqLwotCV9fdTE2CWRlY2ltYXRpb247CQkvKiBEZWNpbWF0aW9uIGRpdmlkZXIgKi8KLQlfX3UxNglmbGFnczsJCQkvKiBGbGFncyBmb3IgY2FwdHVyZSAqLwotI2RlZmluZSBWSURFT19DQVBUVVJFX09ERAkJMAkvKiBUZW1wb3JhbCAqLwotI2RlZmluZSBWSURFT19DQVBUVVJFX0VWRU4JCTEKLX07Ci0KLXN0cnVjdCB2aWRlb19idWZmZXIKLXsKLQl2b2lkCSpiYXNlOwotCWludAloZWlnaHQsd2lkdGg7Ci0JaW50CWRlcHRoOwotCWludAlieXRlc3BlcmxpbmU7Ci19OwotCi1zdHJ1Y3QgdmlkZW9fbW1hcAotewotCXVuc2lnbmVkCWludCBmcmFtZTsJCS8qIEZyYW1lICgwIC0gbikgZm9yIGRvdWJsZSBidWZmZXIgKi8KLQlpbnQJCWhlaWdodCx3aWR0aDsKLQl1bnNpZ25lZAlpbnQgZm9ybWF0OwkJLyogc2hvdWxkIGJlIFZJREVPX1BBTEVUVEVfKiAqLwotfTsKLQotc3RydWN0IHZpZGVvX2tleQotewotCV9fdTgJa2V5WzhdOwotCV9fdTMyCWZsYWdzOwotfTsKLQotc3RydWN0IHZpZGVvX21idWYKLXsKLQlpbnQJc2l6ZTsJCS8qIFRvdGFsIG1lbW9yeSB0byBtYXAgKi8KLQlpbnQJZnJhbWVzOwkJLyogRnJhbWVzICovCi0JaW50CW9mZnNldHNbVklERU9fTUFYX0ZSQU1FXTsKLX07Ci0KLSNkZWZpbmUgCVZJREVPX05PX1VOSVQJKC0xKQotCi1zdHJ1Y3QgdmlkZW9fdW5pdAotewotCWludCAJdmlkZW87CQkvKiBWaWRlbyBtaW5vciAqLwotCWludAl2Ymk7CQkvKiBWQkkgbWlub3IgKi8KLQlpbnQJcmFkaW87CQkvKiBSYWRpbyBtaW5vciAqLwotCWludAlhdWRpbzsJCS8qIEF1ZGlvIG1pbm9yICovCi0JaW50CXRlbGV0ZXh0OwkvKiBUZWxldGV4dCBtaW5vciAqLwotfTsKLQotc3RydWN0IHZiaV9mb3JtYXQgewotCV9fdTMyCXNhbXBsaW5nX3JhdGU7CS8qIGluIEh6ICovCi0JX191MzIJc2FtcGxlc19wZXJfbGluZTsKLQlfX3UzMglzYW1wbGVfZm9ybWF0OwkvKiBWSURFT19QQUxFVFRFX1JBVyBvbmx5ICgxIGJ5dGUpICovCi0JX19zMzIJc3RhcnRbMl07CS8qIHN0YXJ0aW5nIGxpbmUgZm9yIGVhY2ggZnJhbWUgKi8KLQlfX3UzMgljb3VudFsyXTsJLyogY291bnQgb2YgbGluZXMgZm9yIGVhY2ggZnJhbWUgKi8KLQlfX3UzMglmbGFnczsKLSNkZWZpbmUJVkJJX1VOU1lOQwkxCS8qIGNhbiBkaXN0aW5ndWVzIGJldHdlZW4gdG9wL2JvdHRvbSBmaWVsZCAqLwotI2RlZmluZQlWQklfSU5URVJMQUNFRAkyCS8qIGxpbmVzIGFyZSBpbnRlcmxhY2VkICovCi19OwotCi0vKiB2aWRlb19pbmZvIGlzIGJpYXNlZCB0b3dhcmRzIGhhcmR3YXJlIG1wZWcgZW5jb2RlL2RlY29kZSAqLwotLyogYnV0IGl0IGNvdWxkIGFwcGx5IGdlbmVyaWNhbGx5IHRvIGFueSBoYXJkd2FyZSBjb21wcmVzc29yL2RlY29tcHJlc3NvciAqLwotc3RydWN0IHZpZGVvX2luZm8KLXsKLQlfX3UzMglmcmFtZV9jb3VudDsJLyogZnJhbWVzIG91dHB1dCBzaW5jZSBkZWNvZGUvZW5jb2RlIGJlZ2FuICovCi0JX191MzIJaF9zaXplOwkJLyogY3VycmVudCB1bnNjYWxlZCBob3Jpem9udGFsIHNpemUgKi8KLQlfX3UzMgl2X3NpemU7CQkvKiBjdXJyZW50IHVuc2NhbGVkIHZlcml0Y2FsIHNpemUgKi8KLQlfX3UzMglzbXB0ZV90aW1lY29kZTsJLyogY3VycmVudCBTTVBURSB0aW1lY29kZSAoZm9yIGN1cnJlbnQgR09QKSAqLwotCV9fdTMyCXBpY3R1cmVfdHlwZTsJLyogY3VycmVudCBwaWN0dXJlIHR5cGUgKi8KLQlfX3UzMgl0ZW1wb3JhbF9yZWZlcmVuY2U7CS8qIGN1cnJlbnQgdGVtcG9yYWwgcmVmZXJlbmNlICovCi0JX191OAl1c2VyX2RhdGFbMjU2XTsJLyogdXNlciBkYXRhIGxhc3QgZm91bmQgaW4gY29tcHJlc3NlZCBzdHJlYW0gKi8KLQkvKiB1c2VyX2RhdGFbMF0gY29udGFpbnMgdXNlciBkYXRhIGZsYWdzLCB1c2VyX2RhdGFbMV0gaGFzIGNvdW50ICovCi19OwotCi0vKiBnZW5lcmljIHN0cnVjdHVyZSBmb3Igc2V0dGluZyBwbGF5YmFjayBtb2RlcyAqLwotc3RydWN0IHZpZGVvX3BsYXlfbW9kZQotewotCWludAltb2RlOwotCWludAlwMTsKLQlpbnQJcDI7Ci19OwotCi0vKiBmb3IgbG9hZGluZyBtaWNyb2NvZGUgLyBmcGdhIHByb2dyYW1taW5nICovCi1zdHJ1Y3QgdmlkZW9fY29kZQotewotCWNoYXIJbG9hZHdoYXRbMTZdOwkvKiBuYW1lIG9yIHRhZyBvZiBmaWxlIGJlaW5nIHBhc3NlZCAqLwotCWludAlkYXRhc2l6ZTsKLQlfX3U4CSpkYXRhOwotfTsKLQotI2RlZmluZSBWSURJT0NHQ0FQCQlfSU9SKCd2JywxLHN0cnVjdCB2aWRlb19jYXBhYmlsaXR5KQkvKiBHZXQgY2FwYWJpbGl0aWVzICovCi0jZGVmaW5lIFZJRElPQ0dDSEFOCQlfSU9XUigndicsMixzdHJ1Y3QgdmlkZW9fY2hhbm5lbCkJLyogR2V0IGNoYW5uZWwgaW5mbyAoc291cmNlcykgKi8KLSNkZWZpbmUgVklESU9DU0NIQU4JCV9JT1coJ3YnLDMsc3RydWN0IHZpZGVvX2NoYW5uZWwpCS8qIFNldCBjaGFubmVsIAkqLwotI2RlZmluZSBWSURJT0NHVFVORVIJCV9JT1dSKCd2Jyw0LHN0cnVjdCB2aWRlb190dW5lcikJCS8qIEdldCB0dW5lciBhYmlsaXRpZXMgKi8KLSNkZWZpbmUgVklESU9DU1RVTkVSCQlfSU9XKCd2Jyw1LHN0cnVjdCB2aWRlb190dW5lcikJCS8qIFR1bmUgdGhlIHR1bmVyIGZvciB0aGUgY3VycmVudCBjaGFubmVsICovCi0jZGVmaW5lIFZJRElPQ0dQSUNUCQlfSU9SKCd2Jyw2LHN0cnVjdCB2aWRlb19waWN0dXJlKQkvKiBHZXQgcGljdHVyZSBwcm9wZXJ0aWVzICovCi0jZGVmaW5lIFZJRElPQ1NQSUNUCQlfSU9XKCd2Jyw3LHN0cnVjdCB2aWRlb19waWN0dXJlKQkvKiBTZXQgcGljdHVyZSBwcm9wZXJ0aWVzICovCi0jZGVmaW5lIFZJRElPQ0NBUFRVUkUJCV9JT1coJ3YnLDgsaW50KQkJCQkvKiBTdGFydCwgZW5kIGNhcHR1cmUgKi8KLSNkZWZpbmUgVklESU9DR1dJTgkJX0lPUigndicsOSwgc3RydWN0IHZpZGVvX3dpbmRvdykJLyogR2V0IHRoZSB2aWRlbyBvdmVybGF5IHdpbmRvdyAqLwotI2RlZmluZSBWSURJT0NTV0lOCQlfSU9XKCd2JywxMCwgc3RydWN0IHZpZGVvX3dpbmRvdykJLyogU2V0IHRoZSB2aWRlbyBvdmVybGF5IHdpbmRvdyAtIHBhc3NlcyBjbGlwIGxpc3QgZm9yIGhhcmR3YXJlIHNtYXJ0cyAsIGNocm9tYWtleSBldGMgKi8KLSNkZWZpbmUgVklESU9DR0ZCVUYJCV9JT1IoJ3YnLDExLCBzdHJ1Y3QgdmlkZW9fYnVmZmVyKQkvKiBHZXQgZnJhbWUgYnVmZmVyICovCi0jZGVmaW5lIFZJRElPQ1NGQlVGCQlfSU9XKCd2JywxMiwgc3RydWN0IHZpZGVvX2J1ZmZlcikJLyogU2V0IGZyYW1lIGJ1ZmZlciAtIHJvb3Qgb25seSAqLwotI2RlZmluZSBWSURJT0NLRVkJCV9JT1IoJ3YnLDEzLCBzdHJ1Y3QgdmlkZW9fa2V5KQkJLyogVmlkZW8ga2V5IGV2ZW50IC0gdG8gZGV2IDI1NSBpcyB0byBhbGwgLSBjdXRzIGNhcHR1cmUgb24gYWxsIERNQSB3aW5kb3dzIHdpdGggdGhpcyBrZXkgKDB4RkZGRkZGRkYgPT0gYWxsKSAqLwotI2RlZmluZSBWSURJT0NHRlJFUQkJX0lPUigndicsMTQsIHVuc2lnbmVkIGxvbmcpCQkvKiBTZXQgdHVuZXIgKi8KLSNkZWZpbmUgVklESU9DU0ZSRVEJCV9JT1coJ3YnLDE1LCB1bnNpZ25lZCBsb25nKQkJLyogU2V0IHR1bmVyICovCi0jZGVmaW5lIFZJRElPQ0dBVURJTwkJX0lPUigndicsMTYsIHN0cnVjdCB2aWRlb19hdWRpbykJLyogR2V0IGF1ZGlvIGluZm8gKi8KLSNkZWZpbmUgVklESU9DU0FVRElPCQlfSU9XKCd2JywxNywgc3RydWN0IHZpZGVvX2F1ZGlvKQkvKiBBdWRpbyBzb3VyY2UsIG11dGUgZXRjICovCi0jZGVmaW5lIFZJRElPQ1NZTkMJCV9JT1coJ3YnLDE4LCBpbnQpCQkJLyogU3luYyB3aXRoIG1tYXAgZ3JhYmJpbmcgKi8KLSNkZWZpbmUgVklESU9DTUNBUFRVUkUJCV9JT1coJ3YnLDE5LCBzdHJ1Y3QgdmlkZW9fbW1hcCkJCS8qIEdyYWIgZnJhbWVzICovCi0jZGVmaW5lIFZJRElPQ0dNQlVGCQlfSU9SKCd2JywyMCwgc3RydWN0IHZpZGVvX21idWYpCQkvKiBNZW1vcnkgbWFwIGJ1ZmZlciBpbmZvICovCi0jZGVmaW5lIFZJRElPQ0dVTklUCQlfSU9SKCd2JywyMSwgc3RydWN0IHZpZGVvX3VuaXQpCQkvKiBHZXQgYXR0YWNoZWQgdW5pdHMgKi8KLSNkZWZpbmUgVklESU9DR0NBUFRVUkUJCV9JT1IoJ3YnLDIyLCBzdHJ1Y3QgdmlkZW9fY2FwdHVyZSkJLyogR2V0IHN1YmNhcHR1cmUgKi8KLSNkZWZpbmUgVklESU9DU0NBUFRVUkUJCV9JT1coJ3YnLDIzLCBzdHJ1Y3QgdmlkZW9fY2FwdHVyZSkJLyogU2V0IHN1YmNhcHR1cmUgKi8KLSNkZWZpbmUgVklESU9DU1BMQVlNT0RFCQlfSU9XKCd2JywyNCwgc3RydWN0IHZpZGVvX3BsYXlfbW9kZSkJLyogU2V0IG91dHB1dCB2aWRlbyBtb2RlL2ZlYXR1cmUgKi8KLSNkZWZpbmUgVklESU9DU1dSSVRFTU9ERQlfSU9XKCd2JywyNSwgaW50KQkJCS8qIFNldCB3cml0ZSBtb2RlICovCi0jZGVmaW5lIFZJRElPQ0dQTEFZSU5GTwkJX0lPUigndicsMjYsIHN0cnVjdCB2aWRlb19pbmZvKQkJLyogR2V0IGN1cnJlbnQgcGxheWJhY2sgaW5mbyBmcm9tIGhhcmR3YXJlICovCi0jZGVmaW5lIFZJRElPQ1NNSUNST0NPREUJX0lPVygndicsMjcsIHN0cnVjdCB2aWRlb19jb2RlKQkJLyogTG9hZCBtaWNyb2NvZGUgaW50byBoYXJkd2FyZSAqLwotI2RlZmluZQlWSURJT0NHVkJJRk1UCQlfSU9SKCd2JywyOCwgc3RydWN0IHZiaV9mb3JtYXQpCQkvKiBHZXQgVkJJIGluZm9ybWF0aW9uICovCi0jZGVmaW5lCVZJRElPQ1NWQklGTVQJCV9JT1coJ3YnLDI5LCBzdHJ1Y3QgdmJpX2Zvcm1hdCkJCS8qIFNldCBWQkkgaW5mb3JtYXRpb24gKi8KLQotCi0jZGVmaW5lIEJBU0VfVklESU9DUFJJVkFURQkxOTIJCS8qIDE5Mi0yNTUgYXJlIHByaXZhdGUgKi8KLQotLyogVklESU9DU1dSSVRFTU9ERSAqLwotI2RlZmluZSBWSURfV1JJVEVfTVBFR19BVUQJCTAKLSNkZWZpbmUgVklEX1dSSVRFX01QRUdfVklECQkxCi0jZGVmaW5lIFZJRF9XUklURV9PU0QJCQkyCi0jZGVmaW5lIFZJRF9XUklURV9UVFgJCQkzCi0jZGVmaW5lIFZJRF9XUklURV9DQwkJCTQKLSNkZWZpbmUgVklEX1dSSVRFX01KUEVHCQkJNQotCi0vKiBWSURJT0NTUExBWU1PREUgKi8KLSNkZWZpbmUgVklEX1BMQVlfVklEX09VVF9NT0RFCQkwCi0JLyogcDE6ID0gVklERU9fTU9ERV9QQUwsIFZJREVPX01PREVfTlRTQywgZXRjIC4uLiAqLwotI2RlZmluZSBWSURfUExBWV9HRU5MT0NLCQkxCi0JLyogcDE6IDAgPSBPRkYsIDEgPSBPTiAqLwotCS8qIHAyOiBHRU5MT0NLIEZJTkUgREVMQVkgdmFsdWUgKi8KLSNkZWZpbmUgVklEX1BMQVlfTk9STUFMCQkJMgotI2RlZmluZSBWSURfUExBWV9QQVVTRQkJCTMKLSNkZWZpbmUgVklEX1BMQVlfU0lOR0xFX0ZSQU1FCQk0Ci0jZGVmaW5lIFZJRF9QTEFZX0ZBU1RfRk9SV0FSRAkJNQotI2RlZmluZSBWSURfUExBWV9TTE9XX01PVElPTgkJNgotI2RlZmluZSBWSURfUExBWV9JTU1FRElBVEVfTk9STUFMCTcKLSNkZWZpbmUgVklEX1BMQVlfU1dJVENIX0NIQU5ORUxTCTgKLSNkZWZpbmUgVklEX1BMQVlfRlJFRVpFX0ZSQU1FCQk5Ci0jZGVmaW5lIFZJRF9QTEFZX1NUSUxMX01PREUJCTEwCi0jZGVmaW5lIFZJRF9QTEFZX01BU1RFUl9NT0RFCQkxMQotCS8qIHAxOiBzZWUgYmVsb3cgKi8KLSNkZWZpbmUJCVZJRF9QTEFZX01BU1RFUl9OT05FCTEKLSNkZWZpbmUJCVZJRF9QTEFZX01BU1RFUl9WSURFTwkyCi0jZGVmaW5lCQlWSURfUExBWV9NQVNURVJfQVVESU8JMwotI2RlZmluZSBWSURfUExBWV9BQ1RJVkVfU0NBTkxJTkVTCTEyCi0JLyogcDEgPSBmaXJzdCBhY3RpdmU7IHAyID0gbGFzdCBhY3RpdmUgKi8KLSNkZWZpbmUgVklEX1BMQVlfUkVTRVQJCQkxMwotI2RlZmluZSBWSURfUExBWV9FTkRfTUFSSwkJMTQKLQotI2VuZGlmIC8qIENPTkZJR19WSURFT19WNEwxX0NPTVBBVCAqLwotI2VuZGlmIC8qIF9fTUlOX1Y0TDEgKi8KLQotI2VuZGlmIC8qIF9fTElOVVhfVklERU9ERVZfSCAqLwotCi0vKgotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1iYXNpYy1vZmZzZXQ6IDgKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC93bDEyeHguaCBiL2luY2x1ZGUvbGludXgvd2wxMnh4LmgKaW5kZXggNGY5MDJlMS4uYmViYjhlZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC93bDEyeHguaAorKysgYi9pbmNsdWRlL2xpbnV4L3dsMTJ4eC5oCkBAIC0yNCw2ICsyNCwxNCBAQAogI2lmbmRlZiBfTElOVVhfV0wxMlhYX0gKICNkZWZpbmUgX0xJTlVYX1dMMTJYWF9ICiAKKy8qIFRoZSBib2FyZCByZWZlcmVuY2UgY2xvY2sgdmFsdWVzICovCitlbnVtIHsKKwlXTDEyWFhfUkVGQ0xPQ0tfMTkgPSAwLAkvKiAxOS4yIE1IeiAqLworCVdMMTJYWF9SRUZDTE9DS18yNiA9IDEsCS8qIDI2IE1IeiAqLworCVdMMTJYWF9SRUZDTE9DS18zOCA9IDIsCS8qIDM4LjQgTUh6ICovCisJV0wxMlhYX1JFRkNMT0NLXzU0ID0gMywJLyogNTQgTUh6ICovCit9OworCiBzdHJ1Y3Qgd2wxMnh4X3BsYXRmb3JtX2RhdGEgewogCXZvaWQgKCpzZXRfcG93ZXIpKGJvb2wgZW5hYmxlKTsKIAkvKiBTRElPIG9ubHk6IElSUSBudW1iZXIgaWYgV0xBTl9JUlEgbGluZSBpcyB1c2VkLCAwIGZvciBTRElPIElSUXMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvd29ya3F1ZXVlLmggYi9pbmNsdWRlL2xpbnV4L3dvcmtxdWV1ZS5oCmluZGV4IDBjMDc3MWYuLjFhYzExNTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvd29ya3F1ZXVlLmgKKysrIGIvaW5jbHVkZS9saW51eC93b3JrcXVldWUuaApAQCAtMTI3LDEyICsxMjcsMjAgQEAKIAkudGltZXIgPSBUSU1FUl9JTklUSUFMSVpFUihOVUxMLCAwLCAwKSwJCQlcCiAJfQogCisjZGVmaW5lIF9fREVGRVJSRURfV09SS19JTklUSUFMSVpFUihuLCBmKSB7CQkJXAorCS53b3JrID0gX19XT1JLX0lOSVRJQUxJWkVSKChuKS53b3JrLCAoZikpLAkJXAorCS50aW1lciA9IFRJTUVSX0RFRkVSUkVEX0lOSVRJQUxJWkVSKE5VTEwsIDAsIDApLAlcCisJfQorCiAjZGVmaW5lIERFQ0xBUkVfV09SSyhuLCBmKQkJCQkJXAogCXN0cnVjdCB3b3JrX3N0cnVjdCBuID0gX19XT1JLX0lOSVRJQUxJWkVSKG4sIGYpCiAKICNkZWZpbmUgREVDTEFSRV9ERUxBWUVEX1dPUksobiwgZikJCQkJXAogCXN0cnVjdCBkZWxheWVkX3dvcmsgbiA9IF9fREVMQVlFRF9XT1JLX0lOSVRJQUxJWkVSKG4sIGYpCiAKKyNkZWZpbmUgREVDTEFSRV9ERUZFUlJFRF9XT1JLKG4sIGYpCQkJCVwKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIG4gPSBfX0RFRkVSUkVEX1dPUktfSU5JVElBTElaRVIobiwgZikKKwogLyoKICAqIGluaXRpYWxpemUgYSB3b3JrIGl0ZW0ncyBmdW5jdGlvbiBwb2ludGVyCiAgKi8KQEAgLTQwMSw3ICs0MDksNyBAQAogfQogCiAvKiBPYnNvbGV0ZS4gdXNlIGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygpICovCi1zdGF0aWMgaW5saW5lCitzdGF0aWMgaW5saW5lIF9fZGVwcmVjYXRlZAogdm9pZCBjYW5jZWxfcmVhcm1pbmdfZGVsYXllZF93b3JrcXVldWUoc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxLAogCQkJCQlzdHJ1Y3QgZGVsYXllZF93b3JrICp3b3JrKQogewpAQCAtNDA5LDcgKzQxNyw3IEBACiB9CiAKIC8qIE9ic29sZXRlLiB1c2UgY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCkgKi8KLXN0YXRpYyBpbmxpbmUKK3N0YXRpYyBpbmxpbmUgX19kZXByZWNhdGVkCiB2b2lkIGNhbmNlbF9yZWFybWluZ19kZWxheWVkX3dvcmsoc3RydWN0IGRlbGF5ZWRfd29yayAqd29yaykKIHsKIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMod29yayk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3hmcm0uaCBiL2luY2x1ZGUvbGludXgveGZybS5oCmluZGV4IGI5NzFlMzguLjkzMGZkZDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgveGZybS5oCisrKyBiL2luY2x1ZGUvbGludXgveGZybS5oCkBAIC0yODMsNiArMjgzLDcgQEAKIAlYRlJNQV9LTUFERFJFU1MsICAgICAgICAvKiBzdHJ1Y3QgeGZybV91c2VyX2ttYWRkcmVzcyAqLwogCVhGUk1BX0FMR19BVVRIX1RSVU5DLAkvKiBzdHJ1Y3QgeGZybV9hbGdvX2F1dGggKi8KIAlYRlJNQV9NQVJLLAkJLyogc3RydWN0IHhmcm1fbWFyayAqLworCVhGUk1BX1RGQ1BBRCwJCS8qIF9fdTMyICovCiAJX19YRlJNQV9NQVgKIAogI2RlZmluZSBYRlJNQV9NQVggKF9fWEZSTUFfTUFYIC0gMSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvYnQ4MTkuaCBiL2luY2x1ZGUvbWVkaWEvYnQ4MTkuaAppbmRleCAzOGY2NjZiLi44MDI1ZjRiIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL2J0ODE5LmgKKysrIGIvaW5jbHVkZS9tZWRpYS9idDgxOS5oCkBAIC0yNiw3ICsyNiwxMCBAQAogLyogdjRsMl9kZXZpY2Ugbm90aWZpY2F0aW9ucy4gKi8KIAogLyogTmVlZGVkIHRvIHJlc2V0IHRoZSBGSUZPIGJ1ZmZlciB3aGVuIGNoYW5naW5nIHRoZSBpbnB1dAotICAgb3IgdGhlIHZpZGVvIHN0YW5kYXJkLiAqLworICAgb3IgdGhlIHZpZGVvIHN0YW5kYXJkLgorCisgICBOb3RlOiB0aGVzZSBpb2N0bHMgdGhhdCBpbnRlcm5hbCB0byB0aGUga2VybmVsIGFuZCBhcmUgbmV2ZXIgY2FsbGVkCisgICBmcm9tIHVzZXJzcGFjZS4gKi8KICNkZWZpbmUgQlQ4MTlfRklGT19SRVNFVF9MT1cgCV9JTygnYicsIDApCiAjZGVmaW5lIEJUODE5X0ZJRk9fUkVTRVRfSElHSCAJX0lPKCdiJywgMSkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9jeDIzNDF4LmggYi9pbmNsdWRlL21lZGlhL2N4MjM0MXguaAppbmRleCA4ZDA4ZWJmLi45NjM1ZWViIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL2N4MjM0MXguaAorKysgYi9pbmNsdWRlL21lZGlhL2N4MjM0MXguaApAQCAtOTUsNyArOTUsNyBAQAogCQljb25zdCBzdHJ1Y3QgY3gyMzQxeF9tcGVnX3BhcmFtcyAqbmV3KTsKIGludCBjeDIzNDF4X2N0cmxfcXVlcnkoY29uc3Qgc3RydWN0IGN4MjM0MXhfbXBlZ19wYXJhbXMgKnBhcmFtcywKIAkJc3RydWN0IHY0bDJfcXVlcnljdHJsICpxY3RybCk7Ci1jb25zdCBjaGFyICoqY3gyMzQxeF9jdHJsX2dldF9tZW51KGNvbnN0IHN0cnVjdCBjeDIzNDF4X21wZWdfcGFyYW1zICpwLCB1MzIgaWQpOworY29uc3QgY2hhciAqIGNvbnN0ICpjeDIzNDF4X2N0cmxfZ2V0X21lbnUoY29uc3Qgc3RydWN0IGN4MjM0MXhfbXBlZ19wYXJhbXMgKnAsIHUzMiBpZCk7CiBpbnQgY3gyMzQxeF9leHRfY3RybHMoc3RydWN0IGN4MjM0MXhfbXBlZ19wYXJhbXMgKnBhcmFtcywgaW50IGJ1c3ksCiAJCXN0cnVjdCB2NGwyX2V4dF9jb250cm9scyAqY3RybHMsIHVuc2lnbmVkIGludCBjbWQpOwogdm9pZCBjeDIzNDF4X2ZpbGxfZGVmYXVsdHMoc3RydWN0IGN4MjM0MXhfbXBlZ19wYXJhbXMgKnApOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9pci1jb21tb24uaCBiL2luY2x1ZGUvbWVkaWEvaXItY29tbW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyODA1MGUuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9tZWRpYS9pci1jb21tb24uaAorKysgL2Rldi9udWxsCkBAIC0xLDEwNyArMCwwIEBACi0vKgotICoKLSAqIHNvbWUgY29tbW9uIHN0cnVjdHMgYW5kIGZ1bmN0aW9ucyB0byBoYW5kbGUgaW5mcmFyZWQgcmVtb3RlcyB2aWEKLSAqIGlucHV0IGxheWVyIC4uLgotICoKLSAqIChjKSAyMDAzIEdlcmQgS25vcnIgPGtyYXhlbEBieXRlc2V4Lm9yZz4gW1N1U0UgTGFic10KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqLwotCi0jaWZuZGVmIF9JUl9DT01NT04KLSNkZWZpbmUgX0lSX0NPTU1PTgotCi0jaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KLSNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxtZWRpYS9pci1jb3JlLmg+Ci0KLSNkZWZpbmUgUkM1X1NUQVJUKHgpCSgoKHgpPj4xMikmMykKLSNkZWZpbmUgUkM1X1RPR0dMRSh4KQkoKCh4KT4+MTEpJjEpCi0jZGVmaW5lIFJDNV9BRERSKHgpCSgoKHgpPj42KSYzMSkKLSNkZWZpbmUgUkM1X0lOU1RSKHgpCSgoeCkmNjMpCi0KLXN0cnVjdCBpcl9pbnB1dF9zdGF0ZSB7Ci0JLyogY29uZmlndXJhdGlvbiAqLwotCXU2NCAgICAgIGlyX3R5cGU7Ci0KLQkvKiBrZXkgaW5mbyAqLwotCXUzMiAgICAgICAgICAgICAgICBpcl9rZXk7ICAgICAgLyogaXIgc2NhbmNvZGUgKi8KLQl1MzIgICAgICAgICAgICAgICAga2V5Y29kZTsgICAgIC8qIGxpbnV4IGtleSBjb2RlICovCi0JaW50ICAgICAgICAgICAgICAgIGtleXByZXNzZWQ7ICAvKiBjdXJyZW50IHN0YXRlICovCi19OwotCi0vKiB0aGlzIHdhcyBzYWE3MTM0X2lyIGFuZCBidHR2X2lyLCBtb3ZlZCBoZXJlIGZvcgotICogcmM1IGRlY29kaW5nLiAqLwotc3RydWN0IGNhcmRfaXIgewotCXN0cnVjdCBpbnB1dF9kZXYgICAgICAgICpkZXY7Ci0Jc3RydWN0IGlyX2lucHV0X3N0YXRlICAgaXI7Ci0JY2hhciAgICAgICAgICAgICAgICAgICAgbmFtZVszMl07Ci0JY2hhciAgICAgICAgICAgICAgICAgICAgcGh5c1szMl07Ci0JaW50CQkJdXNlcnM7Ci0KLQl1MzIJCQlydW5uaW5nOjE7Ci0Jc3RydWN0IGlyX2Rldl9wcm9wcwlwcm9wczsKLQotCS8qIFVzdWFsIGdwaW8gc2lnbmFsbGluZyAqLwotCi0JdTMyICAgICAgICAgICAgICAgICAgICAgbWFza19rZXljb2RlOwotCXUzMiAgICAgICAgICAgICAgICAgICAgIG1hc2tfa2V5ZG93bjsKLQl1MzIgICAgICAgICAgICAgICAgICAgICBtYXNrX2tleXVwOwotCXUzMiAgICAgICAgICAgICAgICAgICAgIHBvbGxpbmc7Ci0JdTMyICAgICAgICAgICAgICAgICAgICAgbGFzdF9ncGlvOwotCWludAkJCXNoaWZ0X2J5OwotCWludAkJCXN0YXJ0OyAvLyBXaGF0IHNob3VsZCBSQzVfU1RBUlQoKSBiZQotCWludAkJCWFkZHI7IC8vIFdoYXQgUkM1X0FERFIoKSBzaG91bGQgYmUuCi0JaW50CQkJcmM1X2tleV90aW1lb3V0OwotCWludAkJCXJjNV9yZW1vdGVfZ2FwOwotCXN0cnVjdCB3b3JrX3N0cnVjdCAgICAgIHdvcms7Ci0Jc3RydWN0IHRpbWVyX2xpc3QgICAgICAgdGltZXI7Ci0KLQkvKiBSQzUgZ3BpbyAqLwotCXUzMiByYzVfZ3BpbzsKLQlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcl9lbmQ7CS8qIHRpbWVyX2VuZCBmb3IgY29kZSBjb21wbGV0aW9uICovCi0Jc3RydWN0IHRpbWVyX2xpc3QgdGltZXJfa2V5dXA7CS8qIHRpbWVyX2VuZCBmb3Iga2V5IHJlbGVhc2UgKi8KLQl1MzIgbGFzdF9yYzU7CQkJLyogbGFzdCBnb29kIHJjNSBjb2RlICovCi0JdTMyIGxhc3RfYml0OwkJCS8qIGxhc3QgcmF3IGJpdCBzZWVuICovCi0JdTMyIGNvZGU7CQkJLyogcmF3IGNvZGUgdW5kZXIgY29uc3RydWN0aW9uICovCi0Jc3RydWN0IHRpbWV2YWwgYmFzZV90aW1lOwkvKiB0aW1lIG9mIGxhc3Qgc2VlbiBjb2RlICovCi0JaW50IGFjdGl2ZTsJCQkvKiBidWlsZGluZyByYXcgY29kZSAqLwotCi0JLyogTkVDIGRlY29kaW5nICovCi0JdTMyCQkJbmVjX2dwaW87Ci0Jc3RydWN0IHRhc2tsZXRfc3RydWN0ICAgdGxldDsKLQotCS8qIElSIGNvcmUgcmF3IGRlY29kaW5nICovCi0JdTMyCQkJcmF3X2RlY29kZTsKLX07Ci0KLS8qIFJvdXRpbmVzIGZyb20gaXItZnVuY3Rpb25zLmMgKi8KLQotaW50IGlyX2lucHV0X2luaXQoc3RydWN0IGlucHV0X2RldiAqZGV2LCBzdHJ1Y3QgaXJfaW5wdXRfc3RhdGUgKmlyLAotCQkgICBjb25zdCB1NjQgaXJfdHlwZSk7Ci12b2lkIGlyX2lucHV0X25va2V5KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgc3RydWN0IGlyX2lucHV0X3N0YXRlICppcik7Ci12b2lkIGlyX2lucHV0X2tleWRvd24oc3RydWN0IGlucHV0X2RldiAqZGV2LCBzdHJ1Y3QgaXJfaW5wdXRfc3RhdGUgKmlyLAotCQkgICAgICB1MzIgaXJfa2V5KTsKLXUzMiAgaXJfZXh0cmFjdF9iaXRzKHUzMiBkYXRhLCB1MzIgbWFzayk7Ci1pbnQgIGlyX2R1bXBfc2FtcGxlcyh1MzIgKnNhbXBsZXMsIGludCBjb3VudCk7Ci1pbnQgIGlyX2RlY29kZV9iaXBoYXNlKHUzMiAqc2FtcGxlcywgaW50IGNvdW50LCBpbnQgbG93LCBpbnQgaGlnaCk7Ci1pbnQgIGlyX2RlY29kZV9wdWxzZWRpc3RhbmNlKHUzMiAqc2FtcGxlcywgaW50IGNvdW50LCBpbnQgbG93LCBpbnQgaGlnaCk7Ci11MzIgIGlyX3JjNV9kZWNvZGUodW5zaWduZWQgaW50IGNvZGUpOwotCi12b2lkIGlyX3JjNV90aW1lcl9lbmQodW5zaWduZWQgbG9uZyBkYXRhKTsKLXZvaWQgaXJfcmM1X3RpbWVyX2tleXVwKHVuc2lnbmVkIGxvbmcgZGF0YSk7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9pci1jb3JlLmggYi9pbmNsdWRlL21lZGlhL2lyLWNvcmUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmRjMzdmYS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL21lZGlhL2lyLWNvcmUuaAorKysgL2Rldi9udWxsCkBAIC0xLDIxNCArMCwwIEBACi0vKgotICogUmVtb3RlIENvbnRyb2xsZXIgY29yZSBoZWFkZXIKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBieSBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLQotI2lmbmRlZiBfSVJfQ09SRQotI2RlZmluZSBfSVJfQ09SRQotCi0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9rZmlmby5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KLSNpbmNsdWRlIDxsaW51eC90aW1lci5oPgotI2luY2x1ZGUgPG1lZGlhL3JjLW1hcC5oPgotCi1leHRlcm4gaW50IGlyX2NvcmVfZGVidWc7Ci0jZGVmaW5lIElSX2RwcmludGsobGV2ZWwsIGZtdCwgYXJnLi4uKQlpZiAoaXJfY29yZV9kZWJ1ZyA+PSBsZXZlbCkgXAotCXByaW50ayhLRVJOX0RFQlVHICIlczogIiBmbXQgLCBfX2Z1bmNfXywgIyMgYXJnKQotCi1lbnVtIHJjX2RyaXZlcl90eXBlIHsKLQlSQ19EUklWRVJfU0NBTkNPREUgPSAwLAkvKiBEcml2ZXIgb3IgaGFyZHdhcmUgZ2VuZXJhdGVzIGEgc2NhbmNvZGUgKi8KLQlSQ19EUklWRVJfSVJfUkFXLAkvKiBOZWVkcyBhIEluZnJhLVJlZCBwdWxzZS9zcGFjZSBkZWNvZGVyICovCi19OwotCi0vKioKLSAqIHN0cnVjdCBpcl9kZXZfcHJvcHMgLSBBbGxvdyBjYWxsZXIgZHJpdmVycyB0byBzZXQgc3BlY2lhbCBwcm9wZXJ0aWVzCi0gKiBAZHJpdmVyX3R5cGU6IHNwZWNpZmllcyBpZiB0aGUgZHJpdmVyIG9yIGhhcmR3YXJlIGhhdmUgYWxyZWFkeSBhIGRlY29kZXIsCi0gKglvciBpZiBpdCBuZWVkcyB0byB1c2UgdGhlIElSIHJhdyBldmVudCBkZWNvZGVycyB0byBwcm9kdWNlIGEgc2NhbmNvZGUKLSAqIEBhbGxvd2VkX3Byb3RvczogYml0bWFzayB3aXRoIHRoZSBzdXBwb3J0ZWQgSVJfVFlQRV8qIHByb3RvY29scwotICogQHNjYW5tYXNrOiBzb21lIGhhcmR3YXJlIGRlY29kZXJzIGFyZSBub3QgY2FwYWJsZSBvZiBwcm92aWRpbmcgdGhlIGZ1bGwKLSAqCXNjYW5jb2RlIHRvIHRoZSBhcHBsaWNhdGlvbi4gQXMgdGhpcyBpcyBhIGhhcmR3YXJlIGxpbWl0LCB3ZSBjYW4ndCBkbwotICoJYW55dGhpbmcgd2l0aCBpdC4gWWV0LCBhcyB0aGUgc2FtZSBrZXljb2RlIHRhYmxlIGNhbiBiZSB1c2VkIHdpdGggb3RoZXIKLSAqCWRldmljZXMsIGEgbWFzayBpcyBwcm92aWRlZCB0byBhbGxvdyBpdHMgdXNhZ2UuIERyaXZlcnMgc2hvdWxkIGdlbmVyYWxseQotICoJbGVhdmUgdGhpcyBmaWVsZCBpbiBibGFuawotICogQHRpbWVvdXQ6IG9wdGlvbmFsIHRpbWUgYWZ0ZXIgd2hpY2ggZGV2aWNlIHN0b3BzIHNlbmRpbmcgZGF0YQotICogQG1pbl90aW1lb3V0OiBtaW5pbXVtIHRpbWVvdXQgc3VwcG9ydGVkIGJ5IGRldmljZQotICogQG1heF90aW1lb3V0OiBtYXhpbXVtIHRpbWVvdXQgc3VwcG9ydGVkIGJ5IGRldmljZQotICogQHJ4X3Jlc29sdXRpb24gOiByZXNvbHV0aW9uIChpbiBucykgb2YgaW5wdXQgc2FtcGxlcgotICogQHR4X3Jlc29sdXRpb246IHJlc29sdXRpb24gKGluIG5zKSBvZiBvdXRwdXQgc2FtcGxlcgotICogQHByaXY6IGRyaXZlci1zcGVjaWZpYyBkYXRhLCB0byBiZSB1c2VkIG9uIHRoZSBjYWxsYmFja3MKLSAqIEBjaGFuZ2VfcHJvdG9jb2w6IGFsbG93IGNoYW5naW5nIHRoZSBwcm90b2NvbCB1c2VkIG9uIGhhcmR3YXJlIGRlY29kZXJzCi0gKiBAb3BlbjogY2FsbGJhY2sgdG8gYWxsb3cgZHJpdmVycyB0byBlbmFibGUgcG9sbGluZy9pcnEgd2hlbiBJUiBpbnB1dCBkZXZpY2UKLSAqCWlzIG9wZW5lZC4KLSAqIEBjbG9zZTogY2FsbGJhY2sgdG8gYWxsb3cgZHJpdmVycyB0byBkaXNhYmxlIHBvbGxpbmcvaXJxIHdoZW4gSVIgaW5wdXQgZGV2aWNlCi0gKglpcyBvcGVuZWQuCi0gKiBAc190eF9tYXNrOiBzZXQgdHJhbnNtaXR0ZXIgbWFzayAoZm9yIGRldmljZXMgd2l0aCBtdWx0aXBsZSB0eCBvdXRwdXRzKQotICogQHNfdHhfY2Fycmllcjogc2V0IHRyYW5zbWl0IGNhcnJpZXIgZnJlcXVlbmN5Ci0gKiBAc190eF9kdXR5X2N5Y2xlOiBzZXQgdHJhbnNtaXQgZHV0eSBjeWNsZSAoMCUgLSAxMDAlKQotICogQHNfcnhfY2FycmllcjogaW5mb3JtIGRyaXZlciBhYm91dCBjYXJyaWVyIGl0IGlzIGV4cGVjdGVkIHRvIGhhbmRsZQotICogQHR4X2lyOiB0cmFuc21pdCBJUgotICogQHNfaWRsZTogb3B0aW9uYWw6IGVuYWJsZS9kaXNhYmxlIGhhcmR3YXJlIGlkbGUgbW9kZSwgdXBvbiB3aGljaCwKLQlkZXZpY2UgZG9lc24ndCBpbnRlcnJ1cHQgaG9zdCB1bnRpbCBpdCBzZWVzIElSIHB1bHNlcwotICogQHNfbGVhcm5pbmdfbW9kZTogZW5hYmxlIHdpZGUgYmFuZCByZWNlaXZlciB1c2VkIGZvciBsZWFybmluZwotICogQHNfY2Fycmllcl9yZXBvcnQ6IGVuYWJsZSBjYXJyaWVyIHJlcG9ydHMKLSAqLwotc3RydWN0IGlyX2Rldl9wcm9wcyB7Ci0JZW51bSByY19kcml2ZXJfdHlwZQlkcml2ZXJfdHlwZTsKLQl1bnNpZ25lZCBsb25nCQlhbGxvd2VkX3Byb3RvczsKLQl1MzIJCQlzY2FubWFzazsKLQotCXUzMgkJCXRpbWVvdXQ7Ci0JdTMyCQkJbWluX3RpbWVvdXQ7Ci0JdTMyCQkJbWF4X3RpbWVvdXQ7Ci0KLQl1MzIJCQlyeF9yZXNvbHV0aW9uOwotCXUzMgkJCXR4X3Jlc29sdXRpb247Ci0KLQl2b2lkCQkJKnByaXY7Ci0JaW50CQkJKCpjaGFuZ2VfcHJvdG9jb2wpKHZvaWQgKnByaXYsIHU2NCBpcl90eXBlKTsKLQlpbnQJCQkoKm9wZW4pKHZvaWQgKnByaXYpOwotCXZvaWQJCQkoKmNsb3NlKSh2b2lkICpwcml2KTsKLQlpbnQJCQkoKnNfdHhfbWFzaykodm9pZCAqcHJpdiwgdTMyIG1hc2spOwotCWludAkJCSgqc190eF9jYXJyaWVyKSh2b2lkICpwcml2LCB1MzIgY2Fycmllcik7Ci0JaW50CQkJKCpzX3R4X2R1dHlfY3ljbGUpKHZvaWQgKnByaXYsIHUzMiBkdXR5X2N5Y2xlKTsKLQlpbnQJCQkoKnNfcnhfY2Fycmllcl9yYW5nZSkodm9pZCAqcHJpdiwgdTMyIG1pbiwgdTMyIG1heCk7Ci0JaW50CQkJKCp0eF9pcikodm9pZCAqcHJpdiwgaW50ICp0eGJ1ZiwgdTMyIG4pOwotCXZvaWQJCQkoKnNfaWRsZSkodm9pZCAqcHJpdiwgYm9vbCBlbmFibGUpOwotCWludAkJCSgqc19sZWFybmluZ19tb2RlKSh2b2lkICpwcml2LCBpbnQgZW5hYmxlKTsKLQlpbnQJCQkoKnNfY2Fycmllcl9yZXBvcnQpICh2b2lkICpwcml2LCBpbnQgZW5hYmxlKTsKLX07Ci0KLXN0cnVjdCBpcl9pbnB1dF9kZXYgewotCXN0cnVjdCBkZXZpY2UJCQlkZXY7CQkvKiBkZXZpY2UgKi8KLQljaGFyCQkJCSpkcml2ZXJfbmFtZTsJLyogTmFtZSBvZiB0aGUgZHJpdmVyIG1vZHVsZSAqLwotCXN0cnVjdCBpcl9zY2FuY29kZV90YWJsZQlyY190YWI7CQkvKiBzY2FuL2tleSB0YWJsZSAqLwotCXVuc2lnbmVkIGxvbmcJCQlkZXZubzsJCS8qIGRldmljZSBudW1iZXIgKi8KLQlzdHJ1Y3QgaXJfZGV2X3Byb3BzCQkqcHJvcHM7CQkvKiBEZXZpY2UgcHJvcGVydGllcyAqLwotCXN0cnVjdCBpcl9yYXdfZXZlbnRfY3RybAkqcmF3OwkJLyogZm9yIHJhdyBwdWxzZS9zcGFjZSBldmVudHMgKi8KLQlzdHJ1Y3QgaW5wdXRfZGV2CQkqaW5wdXRfZGV2OwkvKiB0aGUgaW5wdXQgZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGRldmljZSAqLwotCWJvb2wJCQkJaWRsZTsKLQotCS8qIGtleSBpbmZvIC0gbmVlZGVkIGJ5IElSIGtleWNvZGUgaGFuZGxlcnMgKi8KLQlzcGlubG9ja190CQkJa2V5bG9jazsJLyogcHJvdGVjdHMgdGhlIGJlbG93IG1lbWJlcnMgKi8KLQlib29sCQkJCWtleXByZXNzZWQ7CS8qIGN1cnJlbnQgc3RhdGUgKi8KLQl1bnNpZ25lZCBsb25nCQkJa2V5dXBfamlmZmllczsJLyogd2hlbiBzaG91bGQgdGhlIGN1cnJlbnQga2V5cHJlc3MgYmUgcmVsZWFzZWQ/ICovCi0Jc3RydWN0IHRpbWVyX2xpc3QJCXRpbWVyX2tleXVwOwkvKiB0aW1lciBmb3IgcmVsZWFzaW5nIGEga2V5cHJlc3MgKi8KLQl1MzIJCQkJbGFzdF9rZXljb2RlOwkvKiBrZXljb2RlIG9mIGxhc3QgY29tbWFuZCAqLwotCXUzMgkJCQlsYXN0X3NjYW5jb2RlOwkvKiBzY2FuY29kZSBvZiBsYXN0IGNvbW1hbmQgKi8KLQl1OAkJCQlsYXN0X3RvZ2dsZTsJLyogdG9nZ2xlIG9mIGxhc3QgY29tbWFuZCAqLwotfTsKLQotZW51bSByYXdfZXZlbnRfdHlwZSB7Ci0JSVJfU1BBQ0UgICAgICAgID0gKDEgPDwgMCksCi0JSVJfUFVMU0UgICAgICAgID0gKDEgPDwgMSksCi0JSVJfU1RBUlRfRVZFTlQgID0gKDEgPDwgMiksCi0JSVJfU1RPUF9FVkVOVCAgID0gKDEgPDwgMyksCi19OwotCi0jZGVmaW5lIHRvX2lyX2lucHV0X2RldihfYXR0cikgY29udGFpbmVyX29mKF9hdHRyLCBzdHJ1Y3QgaXJfaW5wdXRfZGV2LCBhdHRyKQotCi0vKiBGcm9tIGlyLWtleXRhYmxlLmMgKi8KLWludCBfX2lyX2lucHV0X3JlZ2lzdGVyKHN0cnVjdCBpbnB1dF9kZXYgKmRldiwKLQkJICAgICAgY29uc3Qgc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlICppcl9jb2RlcywKLQkJICAgICAgc3RydWN0IGlyX2Rldl9wcm9wcyAqcHJvcHMsCi0JCSAgICAgIGNvbnN0IGNoYXIgKmRyaXZlcl9uYW1lKTsKLQotc3RhdGljIGlubGluZSBpbnQgaXJfaW5wdXRfcmVnaXN0ZXIoc3RydWN0IGlucHV0X2RldiAqZGV2LAotCQkgICAgICBjb25zdCBjaGFyICptYXBfbmFtZSwKLQkJICAgICAgc3RydWN0IGlyX2Rldl9wcm9wcyAqcHJvcHMsCi0JCSAgICAgIGNvbnN0IGNoYXIgKmRyaXZlcl9uYW1lKSB7Ci0Jc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlICppcl9jb2RlczsKLQlzdHJ1Y3QgaXJfaW5wdXRfZGV2ICppcl9kZXY7Ci0JaW50IHJjOwotCi0JaWYgKCFtYXBfbmFtZSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpcl9jb2RlcyA9IGdldF9yY19tYXAobWFwX25hbWUpOwotCWlmICghaXJfY29kZXMpIHsKLQkJaXJfY29kZXMgPSBnZXRfcmNfbWFwKFJDX01BUF9FTVBUWSk7Ci0KLQkJaWYgKCFpcl9jb2RlcykKLQkJCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJjID0gX19pcl9pbnB1dF9yZWdpc3RlcihkZXYsIGlyX2NvZGVzLCBwcm9wcywgZHJpdmVyX25hbWUpOwotCWlmIChyYyA8IDApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaXJfZGV2ID0gaW5wdXRfZ2V0X2RydmRhdGEoZGV2KTsKLQotCWlmICghcmMgJiYgaXJfZGV2LT5wcm9wcyAmJiBpcl9kZXYtPnByb3BzLT5jaGFuZ2VfcHJvdG9jb2wpCi0JCXJjID0gaXJfZGV2LT5wcm9wcy0+Y2hhbmdlX3Byb3RvY29sKGlyX2Rldi0+cHJvcHMtPnByaXYsCi0JCQkJCQkgICAgaXJfY29kZXMtPmlyX3R5cGUpOwotCi0JcmV0dXJuIHJjOwotfQotCi12b2lkIGlyX2lucHV0X3VucmVnaXN0ZXIoc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2KTsKLQotdm9pZCBpcl9yZXBlYXQoc3RydWN0IGlucHV0X2RldiAqZGV2KTsKLXZvaWQgaXJfa2V5ZG93bihzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIGludCBzY2FuY29kZSwgdTggdG9nZ2xlKTsKLXZvaWQgaXJfa2V5dXAoc3RydWN0IGlyX2lucHV0X2RldiAqaXIpOwotdTMyIGlyX2dfa2V5Y29kZV9mcm9tX3RhYmxlKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldiwgdTMyIHNjYW5jb2RlKTsKLQotLyogRnJvbSBpci1yYXctZXZlbnQuYyAqLwotCi1zdHJ1Y3QgaXJfcmF3X2V2ZW50IHsKLQl1bmlvbiB7Ci0JCXUzMiAgICAgICAgICAgICBkdXJhdGlvbjsKLQotCQlzdHJ1Y3QgewotCQkJdTMyICAgICBjYXJyaWVyOwotCQkJdTggICAgICBkdXR5X2N5Y2xlOwotCQl9OwotCX07Ci0KLQl1bnNpZ25lZCAgICAgICAgICAgICAgICBwdWxzZToxOwotCXVuc2lnbmVkICAgICAgICAgICAgICAgIHJlc2V0OjE7Ci0JdW5zaWduZWQgICAgICAgICAgICAgICAgdGltZW91dDoxOwotCXVuc2lnbmVkICAgICAgICAgICAgICAgIGNhcnJpZXJfcmVwb3J0OjE7Ci19OwotCi0jZGVmaW5lIERFRklORV9JUl9SQVdfRVZFTlQoZXZlbnQpIFwKLQlzdHJ1Y3QgaXJfcmF3X2V2ZW50IGV2ZW50ID0geyBcCi0JCXsgLmR1cmF0aW9uID0gMCB9ICwgXAotCQkucHVsc2UgPSAwLCBcCi0JCS5yZXNldCA9IDAsIFwKLQkJLnRpbWVvdXQgPSAwLCBcCi0JCS5jYXJyaWVyX3JlcG9ydCA9IDAgfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9pcl9yYXdfZXZlbnQoc3RydWN0IGlyX3Jhd19ldmVudCAqZXYpCi17Ci0JbWVtc2V0KGV2LCAwLCBzaXplb2YoKmV2KSk7Ci19Ci0KLSNkZWZpbmUgSVJfTUFYX0RVUkFUSU9OICAgICAgICAgMHhGRkZGRkZGRiAgICAgIC8qIGEgYml0IG1vcmUgdGhhbiA0IHNlY29uZHMgKi8KLQotdm9pZCBpcl9yYXdfZXZlbnRfaGFuZGxlKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2Rldik7Ci1pbnQgaXJfcmF3X2V2ZW50X3N0b3JlKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2Rldiwgc3RydWN0IGlyX3Jhd19ldmVudCAqZXYpOwotaW50IGlyX3Jhd19ldmVudF9zdG9yZV9lZGdlKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldiwgZW51bSByYXdfZXZlbnRfdHlwZSB0eXBlKTsKLWludCBpcl9yYXdfZXZlbnRfc3RvcmVfd2l0aF9maWx0ZXIoc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2LAotCQkJCXN0cnVjdCBpcl9yYXdfZXZlbnQgKmV2KTsKLXZvaWQgaXJfcmF3X2V2ZW50X3NldF9pZGxlKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldiwgYm9vbCBpZGxlKTsKLQotc3RhdGljIGlubGluZSB2b2lkIGlyX3Jhd19ldmVudF9yZXNldChzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYpCi17Ci0JREVGSU5FX0lSX1JBV19FVkVOVChldik7Ci0JZXYucmVzZXQgPSB0cnVlOwotCi0JaXJfcmF3X2V2ZW50X3N0b3JlKGlucHV0X2RldiwgJmV2KTsKLQlpcl9yYXdfZXZlbnRfaGFuZGxlKGlucHV0X2Rldik7Ci19Ci0KLSNlbmRpZiAvKiBfSVJfQ09SRSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9pci1rYmQtaTJjLmggYi9pbmNsdWRlL21lZGlhL2lyLWtiZC1pMmMuaAppbmRleCA1NTdjNjc2Li43NjhhYTc3IDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL2lyLWtiZC1pMmMuaAorKysgYi9pbmNsdWRlL21lZGlhL2lyLWtiZC1pMmMuaApAQCAtMSw3ICsxLDcgQEAKICNpZm5kZWYgX0lSX0kyQwogI2RlZmluZSBfSVJfSTJDCiAKLSNpbmNsdWRlIDxtZWRpYS9pci1jb21tb24uaD4KKyNpbmNsdWRlIDxtZWRpYS9yYy1jb3JlLmg+CiAKICNkZWZpbmUgREVGQVVMVF9QT0xMSU5HX0lOVEVSVkFMCTEwMAkvKiBtcyAqLwogCkBAIC05LDExICs5LDkgQEAKIAogc3RydWN0IElSX2kyYyB7CiAJY2hhcgkJICAgICAgICppcl9jb2RlczsKLQogCXN0cnVjdCBpMmNfY2xpZW50ICAgICAgKmM7Ci0Jc3RydWN0IGlucHV0X2RldiAgICAgICAqaW5wdXQ7Ci0Jc3RydWN0IGlyX2lucHV0X3N0YXRlICBpcjsKLQl1NjQgICAgICAgICAgICAgICAgICAgIGlyX3R5cGU7CisJc3RydWN0IHJjX2RldiAgICAgICAgICAqcmM7CisKIAkvKiBVc2VkIHRvIGF2b2lkIGZhc3QgcmVwZWF0aW5nICovCiAJdW5zaWduZWQgY2hhciAgICAgICAgICBvbGQ7CiAKQEAgLTM5LDEzICszNywxNiBAQAogc3RydWN0IElSX2kyY19pbml0X2RhdGEgewogCWNoYXIJCQkqaXJfY29kZXM7CiAJY29uc3QgY2hhcgkJKm5hbWU7Ci0JdTY0CQkJdHlwZTsgLyogSVJfVFlQRV9SQzUsIGV0YyAqLworCXU2NAkJCXR5cGU7IC8qIFJDX1RZUEVfUkM1LCBldGMgKi8KIAl1MzIJCQlwb2xsaW5nX2ludGVydmFsOyAvKiAwIG1lYW5zIERFRkFVTFRfUE9MTElOR19JTlRFUlZBTCAqLworCiAJLyoKIAkgKiBTcGVjaWZ5IGVpdGhlciBhIGZ1bmN0aW9uIHBvaW50ZXIgb3IgYSB2YWx1ZSBpbmRpY2F0aW5nIG9uZSBvZgogCSAqIGlyX2tiZF9pMmMncyBpbnRlcm5hbCBnZXRfa2V5IGZ1bmN0aW9ucwogCSAqLwogCWludCAgICAgICAgICAgICAgICAgICAgKCpnZXRfa2V5KShzdHJ1Y3QgSVJfaTJjKiwgdTMyKiwgdTMyKik7CiAJZW51bSBpcl9rYmRfZ2V0X2tleV9mbiBpbnRlcm5hbF9nZXRfa2V5X2Z1bmM7CisKKwlzdHJ1Y3QgcmNfZGV2CQkqcmNfZGV2OwogfTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9saXJjX2Rldi5oIGIvaW5jbHVkZS9tZWRpYS9saXJjX2Rldi5oCmluZGV4IDU0NzgwYTUuLjYzMGU3MDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvbGlyY19kZXYuaAorKysgYi9pbmNsdWRlL21lZGlhL2xpcmNfZGV2LmgKQEAgLTIxNyw5ICsyMTcsOSBAQAogaW50IGxpcmNfZGV2X2ZvcF9jbG9zZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CiB1bnNpZ25lZCBpbnQgbGlyY19kZXZfZm9wX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQpOwogbG9uZyBsaXJjX2Rldl9mb3BfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKLXNzaXplX3QgbGlyY19kZXZfZm9wX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCwKK3NzaXplX3QgbGlyY19kZXZfZm9wX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBsZW5ndGgsCiAJCQkgIGxvZmZfdCAqcHBvcyk7Ci1zc2l6ZV90IGxpcmNfZGV2X2ZvcF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciAqYnVmZmVyLCBzaXplX3QgbGVuZ3RoLAotCQkJICAgbG9mZl90ICpwcG9zKTsKK3NzaXplX3QgbGlyY19kZXZfZm9wX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAorCQkJICAgc2l6ZV90IGxlbmd0aCwgbG9mZl90ICpwcG9zKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL292Y2FtY2hpcC5oIGIvaW5jbHVkZS9tZWRpYS9vdmNhbWNoaXAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDViOTU2OS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL21lZGlhL292Y2FtY2hpcC5oCisrKyAvZGV2L251bGwKQEAgLTEsOTAgKzAsMCBAQAotLyogT21uaVZpc2lvbiogY2FtZXJhIGNoaXAgZHJpdmVyIEFQSQotICoKLSAqIENvcHlyaWdodCAoYykgMTk5OS0yMDA0IE1hcmsgTWNDbGVsbGFuZAotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uIE5PIFdBUlJBTlRZIE9GIEFOWSBLSU5EIGlzIGV4cHJlc3NlZCBvciBpbXBsaWVkLgotICoKLSAqICogT21uaVZpc2lvbiBpcyBhIHRyYWRlbWFyayBvZiBPbW5pVmlzaW9uIFRlY2hub2xvZ2llcywgSW5jLiBUaGlzIGRyaXZlcgotICogaXMgbm90IHNwb25zb3JlZCBvciBkZXZlbG9wZWQgYnkgdGhlbS4KLSAqLwotCi0jaWZuZGVmIF9fTElOVVhfT1ZDQU1DSElQX0gKLSNkZWZpbmUgX19MSU5VWF9PVkNBTUNISVBfSAotCi0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLS8qICAgICAgICAgICBFTlVNRVJBVElPTlMgICAgICAgICAgICAqLwotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qIENvbnRyb2xzICovCi1lbnVtIHsKLQlPVkNBTUNISVBfQ0lEX0NPTlQsCQkvKiBDb250cmFzdCAqLwotCU9WQ0FNQ0hJUF9DSURfQlJJR0hULAkJLyogQnJpZ2h0bmVzcyAqLwotCU9WQ0FNQ0hJUF9DSURfU0FULAkJLyogU2F0dXJhdGlvbiAqLwotCU9WQ0FNQ0hJUF9DSURfSFVFLAkJLyogSHVlICovCi0JT1ZDQU1DSElQX0NJRF9FWFAsCQkvKiBFeHBvc3VyZSAqLwotCU9WQ0FNQ0hJUF9DSURfRlJFUSwJCS8qIExpZ2h0IGZyZXF1ZW5jeSAqLwotCU9WQ0FNQ0hJUF9DSURfQkFOREZJTFQsCQkvKiBCYW5kaW5nIGZpbHRlciAqLwotCU9WQ0FNQ0hJUF9DSURfQVVUT0JSSUdIVCwJLyogQXV0byBicmlnaHRuZXNzICovCi0JT1ZDQU1DSElQX0NJRF9BVVRPRVhQLAkJLyogQXV0byBleHBvc3VyZSAqLwotCU9WQ0FNQ0hJUF9DSURfQkFDS0xJR0hULAkvKiBCYWNrIGxpZ2h0IGNvbXBlbnNhdGlvbiAqLwotCU9WQ0FNQ0hJUF9DSURfTUlSUk9SLAkJLyogTWlycm9yIGhvcml6b250YWxseSAqLwotfTsKLQotLyogQ2hpcCB0eXBlcyAqLwotI2RlZmluZSBOVU1fQ0NfVFlQRVMJOQotZW51bSB7Ci0JQ0NfVU5LTk9XTiwKLQlDQ19PVjc2QkUsCi0JQ0NfT1Y3NjEwLAotCUNDX09WNzYyMCwKLQlDQ19PVjc2MjBBRSwKLQlDQ19PVjY2MjAsCi0JQ0NfT1Y2NjMwLAotCUNDX09WNjYzMEFFLAotCUNDX09WNjYzMEFGLAotfTsKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKiAgICAgICAgICAgSTJDIEFERFJFU1NFUyAgICAgICAgICAgKi8KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jZGVmaW5lIE9WN3h4MF9TSUQgICAoMHg0MiA+PiAxKQotI2RlZmluZSBPVjZ4eDBfU0lEICAgKDB4QzAgPj4gMSkKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKiAgICAgICAgICAgICAgICBBUEkgICAgICAgICAgICAgICAgKi8KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1zdHJ1Y3Qgb3ZjYW1jaGlwX2NvbnRyb2wgewotCV9fdTMyIGlkOwotCV9fczMyIHZhbHVlOwotfTsKLQotc3RydWN0IG92Y2FtY2hpcF93aW5kb3cgewotCWludCB4OwotCWludCB5OwotCWludCB3aWR0aDsKLQlpbnQgaGVpZ2h0OwotCWludCBmb3JtYXQ7Ci0JaW50IHF1YXJ0ZXI7CQkvKiBTY2FsZSB3aWR0aCBhbmQgaGVpZ2h0IGRvd24gMnggKi8KLQotCS8qIFRoaXMgc3R1ZmYgd2lsbCBiZSByZW1vdmVkIGV2ZW50dWFsbHkgKi8KLQlpbnQgY2xvY2tkaXY7CQkvKiBDbG9jayBkaXZpc29yIHNldHRpbmcgKi8KLX07Ci0KLS8qIENvbW1hbmRzICovCi0jZGVmaW5lIE9WQ0FNQ0hJUF9DTURfUV9TVUJUWVBFICAgICBfSU9SICAoMHg4OCwgMHgwMCwgaW50KQotI2RlZmluZSBPVkNBTUNISVBfQ01EX0lOSVRJQUxJWkUgICAgX0lPVyAgKDB4ODgsIDB4MDEsIGludCkKLS8qIFlvdSBtdXN0IGNhbGwgT1ZDQU1DSElQX0NNRF9JTklUSUFMSVpFIGJlZm9yZSBhbnkgb2YgY29tbWFuZHMgYmVsb3chICovCi0jZGVmaW5lIE9WQ0FNQ0hJUF9DTURfU19DVFJMICAgICAgICBfSU9XICAoMHg4OCwgMHgwMiwgc3RydWN0IG92Y2FtY2hpcF9jb250cm9sKQotI2RlZmluZSBPVkNBTUNISVBfQ01EX0dfQ1RSTCAgICAgICAgX0lPV1IgKDB4ODgsIDB4MDMsIHN0cnVjdCBvdmNhbWNoaXBfY29udHJvbCkKLSNkZWZpbmUgT1ZDQU1DSElQX0NNRF9TX01PREUgICAgICAgIF9JT1cgICgweDg4LCAweDA0LCBzdHJ1Y3Qgb3ZjYW1jaGlwX3dpbmRvdykKLSNkZWZpbmUgT1ZDQU1DSElQX01BWF9DTUQgICAgICAgICAgIF9JTyAgICgweDg4LCAweDNmKQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvcmMtY29yZS5oIGIvaW5jbHVkZS9tZWRpYS9yYy1jb3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTIzYzFmYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbWVkaWEvcmMtY29yZS5oCkBAIC0wLDAgKzEsMjIwIEBACisvKgorICogUmVtb3RlIENvbnRyb2xsZXIgY29yZSBoZWFkZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBieSBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfUkNfQ09SRQorI2RlZmluZSBfUkNfQ09SRQorCisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9rZmlmby5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPG1lZGlhL3JjLW1hcC5oPgorCitleHRlcm4gaW50IHJjX2NvcmVfZGVidWc7CisjZGVmaW5lIElSX2RwcmludGsobGV2ZWwsIGZtdCwgYXJnLi4uKQlpZiAocmNfY29yZV9kZWJ1ZyA+PSBsZXZlbCkgXAorCXByaW50ayhLRVJOX0RFQlVHICIlczogIiBmbXQgLCBfX2Z1bmNfXywgIyMgYXJnKQorCitlbnVtIHJjX2RyaXZlcl90eXBlIHsKKwlSQ19EUklWRVJfU0NBTkNPREUgPSAwLAkvKiBEcml2ZXIgb3IgaGFyZHdhcmUgZ2VuZXJhdGVzIGEgc2NhbmNvZGUgKi8KKwlSQ19EUklWRVJfSVJfUkFXLAkvKiBOZWVkcyBhIEluZnJhLVJlZCBwdWxzZS9zcGFjZSBkZWNvZGVyICovCit9OworCisvKioKKyAqIHN0cnVjdCByY19kZXYgLSByZXByZXNlbnRzIGEgcmVtb3RlIGNvbnRyb2wgZGV2aWNlCisgKiBAZGV2OiBkcml2ZXIgbW9kZWwncyB2aWV3IG9mIHRoaXMgZGV2aWNlCisgKiBAaW5wdXRfbmFtZTogbmFtZSBvZiB0aGUgaW5wdXQgY2hpbGQgZGV2aWNlCisgKiBAaW5wdXRfcGh5czogcGh5c2ljYWwgcGF0aCB0byB0aGUgaW5wdXQgY2hpbGQgZGV2aWNlCisgKiBAaW5wdXRfaWQ6IGlkIG9mIHRoZSBpbnB1dCBjaGlsZCBkZXZpY2UgKHN0cnVjdCBpbnB1dF9pZCkKKyAqIEBkcml2ZXJfbmFtZTogbmFtZSBvZiB0aGUgaGFyZHdhcmUgZHJpdmVyIHdoaWNoIHJlZ2lzdGVyZWQgdGhpcyBkZXZpY2UKKyAqIEBtYXBfbmFtZTogbmFtZSBvZiB0aGUgZGVmYXVsdCBrZXltYXAKKyAqIEByY19tYXA6IGN1cnJlbnQgc2Nhbi9rZXkgdGFibGUKKyAqIEBkZXZubzogdW5pcXVlIHJlbW90ZSBjb250cm9sIGRldmljZSBudW1iZXIKKyAqIEByYXc6IGFkZGl0aW9uYWwgZGF0YSBmb3IgcmF3IHB1bHNlL3NwYWNlIGRldmljZXMKKyAqIEBpbnB1dF9kZXY6IHRoZSBpbnB1dCBjaGlsZCBkZXZpY2UgdXNlZCB0byBjb21tdW5pY2F0ZSBldmVudHMgdG8gdXNlcnNwYWNlCisgKiBAZHJpdmVyX3R5cGU6IHNwZWNpZmllcyBpZiBwcm90b2NvbCBkZWNvZGluZyBpcyBkb25lIGluIGhhcmR3YXJlIG9yIHNvZnR3YXJlIAorICogQGlkbGU6IHVzZWQgdG8ga2VlcCB0cmFjayBvZiBSWCBzdGF0ZQorICogQGFsbG93ZWRfcHJvdG9zOiBiaXRtYXNrIHdpdGggdGhlIHN1cHBvcnRlZCBSQ19UWVBFXyogcHJvdG9jb2xzCisgKiBAc2Nhbm1hc2s6IHNvbWUgaGFyZHdhcmUgZGVjb2RlcnMgYXJlIG5vdCBjYXBhYmxlIG9mIHByb3ZpZGluZyB0aGUgZnVsbAorICoJc2NhbmNvZGUgdG8gdGhlIGFwcGxpY2F0aW9uLiBBcyB0aGlzIGlzIGEgaGFyZHdhcmUgbGltaXQsIHdlIGNhbid0IGRvCisgKglhbnl0aGluZyB3aXRoIGl0LiBZZXQsIGFzIHRoZSBzYW1lIGtleWNvZGUgdGFibGUgY2FuIGJlIHVzZWQgd2l0aCBvdGhlcgorICoJZGV2aWNlcywgYSBtYXNrIGlzIHByb3ZpZGVkIHRvIGFsbG93IGl0cyB1c2FnZS4gRHJpdmVycyBzaG91bGQgZ2VuZXJhbGx5CisgKglsZWF2ZSB0aGlzIGZpZWxkIGluIGJsYW5rCisgKiBAcHJpdjogZHJpdmVyLXNwZWNpZmljIGRhdGEKKyAqIEBrZXlsb2NrOiBwcm90ZWN0cyB0aGUgcmVtYWluaW5nIG1lbWJlcnMgb2YgdGhlIHN0cnVjdAorICogQGtleXByZXNzZWQ6IHdoZXRoZXIgYSBrZXkgaXMgY3VycmVudGx5IHByZXNzZWQKKyAqIEBrZXl1cF9qaWZmaWVzOiB0aW1lIChpbiBqaWZmaWVzKSB3aGVuIHRoZSBjdXJyZW50IGtleXByZXNzIHNob3VsZCBiZSByZWxlYXNlZAorICogQHRpbWVyX2tleXVwOiB0aW1lciBmb3IgcmVsZWFzaW5nIGEga2V5cHJlc3MKKyAqIEBsYXN0X2tleWNvZGU6IGtleWNvZGUgb2YgbGFzdCBrZXlwcmVzcworICogQGxhc3Rfc2NhbmNvZGU6IHNjYW5jb2RlIG9mIGxhc3Qga2V5cHJlc3MKKyAqIEBsYXN0X3RvZ2dsZTogdG9nZ2xlIHZhbHVlIG9mIGxhc3QgY29tbWFuZAorICogQHRpbWVvdXQ6IG9wdGlvbmFsIHRpbWUgYWZ0ZXIgd2hpY2ggZGV2aWNlIHN0b3BzIHNlbmRpbmcgZGF0YQorICogQG1pbl90aW1lb3V0OiBtaW5pbXVtIHRpbWVvdXQgc3VwcG9ydGVkIGJ5IGRldmljZQorICogQG1heF90aW1lb3V0OiBtYXhpbXVtIHRpbWVvdXQgc3VwcG9ydGVkIGJ5IGRldmljZQorICogQHJ4X3Jlc29sdXRpb24gOiByZXNvbHV0aW9uIChpbiBucykgb2YgaW5wdXQgc2FtcGxlcgorICogQHR4X3Jlc29sdXRpb246IHJlc29sdXRpb24gKGluIG5zKSBvZiBvdXRwdXQgc2FtcGxlcgorICogQGNoYW5nZV9wcm90b2NvbDogYWxsb3cgY2hhbmdpbmcgdGhlIHByb3RvY29sIHVzZWQgb24gaGFyZHdhcmUgZGVjb2RlcnMKKyAqIEBvcGVuOiBjYWxsYmFjayB0byBhbGxvdyBkcml2ZXJzIHRvIGVuYWJsZSBwb2xsaW5nL2lycSB3aGVuIElSIGlucHV0IGRldmljZQorICoJaXMgb3BlbmVkLgorICogQGNsb3NlOiBjYWxsYmFjayB0byBhbGxvdyBkcml2ZXJzIHRvIGRpc2FibGUgcG9sbGluZy9pcnEgd2hlbiBJUiBpbnB1dCBkZXZpY2UKKyAqCWlzIG9wZW5lZC4KKyAqIEBzX3R4X21hc2s6IHNldCB0cmFuc21pdHRlciBtYXNrIChmb3IgZGV2aWNlcyB3aXRoIG11bHRpcGxlIHR4IG91dHB1dHMpCisgKiBAc190eF9jYXJyaWVyOiBzZXQgdHJhbnNtaXQgY2FycmllciBmcmVxdWVuY3kKKyAqIEBzX3R4X2R1dHlfY3ljbGU6IHNldCB0cmFuc21pdCBkdXR5IGN5Y2xlICgwJSAtIDEwMCUpCisgKiBAc19yeF9jYXJyaWVyOiBpbmZvcm0gZHJpdmVyIGFib3V0IGNhcnJpZXIgaXQgaXMgZXhwZWN0ZWQgdG8gaGFuZGxlCisgKiBAdHhfaXI6IHRyYW5zbWl0IElSCisgKiBAc19pZGxlOiBlbmFibGUvZGlzYWJsZSBoYXJkd2FyZSBpZGxlIG1vZGUsIHVwb24gd2hpY2gsCisgKglkZXZpY2UgZG9lc24ndCBpbnRlcnJ1cHQgaG9zdCB1bnRpbCBpdCBzZWVzIElSIHB1bHNlcworICogQHNfbGVhcm5pbmdfbW9kZTogZW5hYmxlIHdpZGUgYmFuZCByZWNlaXZlciB1c2VkIGZvciBsZWFybmluZworICogQHNfY2Fycmllcl9yZXBvcnQ6IGVuYWJsZSBjYXJyaWVyIHJlcG9ydHMKKyAqLworc3RydWN0IHJjX2RldiB7CisJc3RydWN0IGRldmljZQkJCWRldjsKKwljb25zdCBjaGFyCQkJKmlucHV0X25hbWU7CisJY29uc3QgY2hhcgkJCSppbnB1dF9waHlzOworCXN0cnVjdCBpbnB1dF9pZAkJCWlucHV0X2lkOworCWNoYXIJCQkJKmRyaXZlcl9uYW1lOworCWNvbnN0IGNoYXIJCQkqbWFwX25hbWU7CisJc3RydWN0IHJjX21hcAlyY19tYXA7CisJdW5zaWduZWQgbG9uZwkJCWRldm5vOworCXN0cnVjdCBpcl9yYXdfZXZlbnRfY3RybAkqcmF3OworCXN0cnVjdCBpbnB1dF9kZXYJCSppbnB1dF9kZXY7CisJZW51bSByY19kcml2ZXJfdHlwZQkJZHJpdmVyX3R5cGU7CisJYm9vbAkJCQlpZGxlOworCXU2NAkJCQlhbGxvd2VkX3Byb3RvczsKKwl1MzIJCQkJc2Nhbm1hc2s7CisJdm9pZAkJCQkqcHJpdjsKKwlzcGlubG9ja190CQkJa2V5bG9jazsKKwlib29sCQkJCWtleXByZXNzZWQ7CisJdW5zaWduZWQgbG9uZwkJCWtleXVwX2ppZmZpZXM7CisJc3RydWN0IHRpbWVyX2xpc3QJCXRpbWVyX2tleXVwOworCXUzMgkJCQlsYXN0X2tleWNvZGU7CisJdTMyCQkJCWxhc3Rfc2NhbmNvZGU7CisJdTgJCQkJbGFzdF90b2dnbGU7CisJdTMyCQkJCXRpbWVvdXQ7CisJdTMyCQkJCW1pbl90aW1lb3V0OworCXUzMgkJCQltYXhfdGltZW91dDsKKwl1MzIJCQkJcnhfcmVzb2x1dGlvbjsKKwl1MzIJCQkJdHhfcmVzb2x1dGlvbjsKKwlpbnQJCQkJKCpjaGFuZ2VfcHJvdG9jb2wpKHN0cnVjdCByY19kZXYgKmRldiwgdTY0IHJjX3R5cGUpOworCWludAkJCQkoKm9wZW4pKHN0cnVjdCByY19kZXYgKmRldik7CisJdm9pZAkJCQkoKmNsb3NlKShzdHJ1Y3QgcmNfZGV2ICpkZXYpOworCWludAkJCQkoKnNfdHhfbWFzaykoc3RydWN0IHJjX2RldiAqZGV2LCB1MzIgbWFzayk7CisJaW50CQkJCSgqc190eF9jYXJyaWVyKShzdHJ1Y3QgcmNfZGV2ICpkZXYsIHUzMiBjYXJyaWVyKTsKKwlpbnQJCQkJKCpzX3R4X2R1dHlfY3ljbGUpKHN0cnVjdCByY19kZXYgKmRldiwgdTMyIGR1dHlfY3ljbGUpOworCWludAkJCQkoKnNfcnhfY2Fycmllcl9yYW5nZSkoc3RydWN0IHJjX2RldiAqZGV2LCB1MzIgbWluLCB1MzIgbWF4KTsKKwlpbnQJCQkJKCp0eF9pcikoc3RydWN0IHJjX2RldiAqZGV2LCBpbnQgKnR4YnVmLCB1MzIgbik7CisJdm9pZAkJCQkoKnNfaWRsZSkoc3RydWN0IHJjX2RldiAqZGV2LCBib29sIGVuYWJsZSk7CisJaW50CQkJCSgqc19sZWFybmluZ19tb2RlKShzdHJ1Y3QgcmNfZGV2ICpkZXYsIGludCBlbmFibGUpOworCWludAkJCQkoKnNfY2Fycmllcl9yZXBvcnQpIChzdHJ1Y3QgcmNfZGV2ICpkZXYsIGludCBlbmFibGUpOworfTsKKworI2RlZmluZSB0b19yY19kZXYoZCkgY29udGFpbmVyX29mKGQsIHN0cnVjdCByY19kZXYsIGRldikKKworLyoKKyAqIEZyb20gcmMtbWFpbi5jCisgKiBUaG9zZSBmdW5jdGlvbnMgY2FuIGJlIHVzZWQgb24gYW55IHR5cGUgb2YgUmVtb3RlIENvbnRyb2xsZXIuIFRoZXkKKyAqIGJhc2ljYWxseSBjcmVhdGVzIGFuIGlucHV0X2RldiBhbmQgcHJvcGVybHkgcmVwb3J0cyB0aGUgZGV2aWNlIGFzIGEKKyAqIFJlbW90ZSBDb250cm9sbGVyLCBhdCBzeXMvY2xhc3MvcmMuCisgKi8KKworc3RydWN0IHJjX2RldiAqcmNfYWxsb2NhdGVfZGV2aWNlKHZvaWQpOwordm9pZCByY19mcmVlX2RldmljZShzdHJ1Y3QgcmNfZGV2ICpkZXYpOworaW50IHJjX3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgcmNfZGV2ICpkZXYpOwordm9pZCByY191bnJlZ2lzdGVyX2RldmljZShzdHJ1Y3QgcmNfZGV2ICpkZXYpOworCit2b2lkIHJjX3JlcGVhdChzdHJ1Y3QgcmNfZGV2ICpkZXYpOwordm9pZCByY19rZXlkb3duKHN0cnVjdCByY19kZXYgKmRldiwgaW50IHNjYW5jb2RlLCB1OCB0b2dnbGUpOwordm9pZCByY19rZXlkb3duX25vdGltZW91dChzdHJ1Y3QgcmNfZGV2ICpkZXYsIGludCBzY2FuY29kZSwgdTggdG9nZ2xlKTsKK3ZvaWQgcmNfa2V5dXAoc3RydWN0IHJjX2RldiAqZGV2KTsKK3UzMiByY19nX2tleWNvZGVfZnJvbV90YWJsZShzdHJ1Y3QgcmNfZGV2ICpkZXYsIHUzMiBzY2FuY29kZSk7CisKKy8qCisgKiBGcm9tIHJjLXJhdy5jCisgKiBUaGUgUmF3IGludGVyZmFjZSBpcyBzcGVjaWZpYyB0byBJbmZyYVJlZC4gSXQgbWF5IGJlIGEgZ29vZCBpZGVhIHRvCisgKiBzcGxpdCBpdCBsYXRlciBpbnRvIGEgc2VwYXJhdGUgaGVhZGVyLgorICovCisKK2VudW0gcmF3X2V2ZW50X3R5cGUgeworCUlSX1NQQUNFICAgICAgICA9ICgxIDw8IDApLAorCUlSX1BVTFNFICAgICAgICA9ICgxIDw8IDEpLAorCUlSX1NUQVJUX0VWRU5UICA9ICgxIDw8IDIpLAorCUlSX1NUT1BfRVZFTlQgICA9ICgxIDw8IDMpLAorfTsKKworc3RydWN0IGlyX3Jhd19ldmVudCB7CisJdW5pb24geworCQl1MzIgICAgICAgICAgICAgZHVyYXRpb247CisKKwkJc3RydWN0IHsKKwkJCXUzMiAgICAgY2FycmllcjsKKwkJCXU4ICAgICAgZHV0eV9jeWNsZTsKKwkJfTsKKwl9OworCisJdW5zaWduZWQgICAgICAgICAgICAgICAgcHVsc2U6MTsKKwl1bnNpZ25lZCAgICAgICAgICAgICAgICByZXNldDoxOworCXVuc2lnbmVkICAgICAgICAgICAgICAgIHRpbWVvdXQ6MTsKKwl1bnNpZ25lZCAgICAgICAgICAgICAgICBjYXJyaWVyX3JlcG9ydDoxOworfTsKKworI2RlZmluZSBERUZJTkVfSVJfUkFXX0VWRU5UKGV2ZW50KSBcCisJc3RydWN0IGlyX3Jhd19ldmVudCBldmVudCA9IHsgXAorCQl7IC5kdXJhdGlvbiA9IDAgfSAsIFwKKwkJLnB1bHNlID0gMCwgXAorCQkucmVzZXQgPSAwLCBcCisJCS50aW1lb3V0ID0gMCwgXAorCQkuY2Fycmllcl9yZXBvcnQgPSAwIH0KKworc3RhdGljIGlubGluZSB2b2lkIGluaXRfaXJfcmF3X2V2ZW50KHN0cnVjdCBpcl9yYXdfZXZlbnQgKmV2KQoreworCW1lbXNldChldiwgMCwgc2l6ZW9mKCpldikpOworfQorCisjZGVmaW5lIElSX01BWF9EVVJBVElPTiAgICAgICAgIDB4RkZGRkZGRkYgICAgICAvKiBhIGJpdCBtb3JlIHRoYW4gNCBzZWNvbmRzICovCisKK3ZvaWQgaXJfcmF3X2V2ZW50X2hhbmRsZShzdHJ1Y3QgcmNfZGV2ICpkZXYpOworaW50IGlyX3Jhd19ldmVudF9zdG9yZShzdHJ1Y3QgcmNfZGV2ICpkZXYsIHN0cnVjdCBpcl9yYXdfZXZlbnQgKmV2KTsKK2ludCBpcl9yYXdfZXZlbnRfc3RvcmVfZWRnZShzdHJ1Y3QgcmNfZGV2ICpkZXYsIGVudW0gcmF3X2V2ZW50X3R5cGUgdHlwZSk7CitpbnQgaXJfcmF3X2V2ZW50X3N0b3JlX3dpdGhfZmlsdGVyKHN0cnVjdCByY19kZXYgKmRldiwKKwkJCQlzdHJ1Y3QgaXJfcmF3X2V2ZW50ICpldik7Cit2b2lkIGlyX3Jhd19ldmVudF9zZXRfaWRsZShzdHJ1Y3QgcmNfZGV2ICpkZXYsIGJvb2wgaWRsZSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpcl9yYXdfZXZlbnRfcmVzZXQoc3RydWN0IHJjX2RldiAqZGV2KQoreworCURFRklORV9JUl9SQVdfRVZFTlQoZXYpOworCWV2LnJlc2V0ID0gdHJ1ZTsKKworCWlyX3Jhd19ldmVudF9zdG9yZShkZXYsICZldik7CisJaXJfcmF3X2V2ZW50X2hhbmRsZShkZXYpOworfQorCisvKiBleHRyYWN0IG1hc2sgYml0cyBvdXQgb2YgZGF0YSBhbmQgcGFjayB0aGVtIGludG8gdGhlIHJlc3VsdCAqLworc3RhdGljIGlubGluZSB1MzIgaXJfZXh0cmFjdF9iaXRzKHUzMiBkYXRhLCB1MzIgbWFzaykKK3sKKwl1MzIgdmJpdCA9IDEsIHZhbHVlID0gMDsKKworCWRvIHsKKwkJaWYgKG1hc2sgJiAxKSB7CisJCQlpZiAoZGF0YSAmIDEpCisJCQkJdmFsdWUgfD0gdmJpdDsKKwkJCXZiaXQgPDw9IDE7CisJCX0KKwkJZGF0YSA+Pj0gMTsKKwl9IHdoaWxlIChtYXNrID4+PSAxKTsKKworCXJldHVybiB2YWx1ZTsKK30KKworI2VuZGlmIC8qIF9SQ19DT1JFICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3JjLW1hcC5oIGIvaW5jbHVkZS9tZWRpYS9yYy1tYXAuaAppbmRleCBlMGYxN2VkLi5lZTllMmY3NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9yYy1tYXAuaAorKysgYi9pbmNsdWRlL21lZGlhL3JjLW1hcC5oCkBAIC0xMSw0NSArMTEsNDUgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAKLSNkZWZpbmUgSVJfVFlQRV9VTktOT1dOCTAKLSNkZWZpbmUgSVJfVFlQRV9SQzUJKDEgIDw8IDApCS8qIFBoaWxpcHMgUkM1IHByb3RvY29sICovCi0jZGVmaW5lIElSX1RZUEVfTkVDCSgxICA8PCAxKQotI2RlZmluZSBJUl9UWVBFX1JDNgkoMSAgPDwgMikJLyogUGhpbGlwcyBSQzYgcHJvdG9jb2wgKi8KLSNkZWZpbmUgSVJfVFlQRV9KVkMJKDEgIDw8IDMpCS8qIEpWQyBwcm90b2NvbCAqLwotI2RlZmluZSBJUl9UWVBFX1NPTlkJKDEgIDw8IDQpCS8qIFNvbnkxMi8xNS8yMCBwcm90b2NvbCAqLwotI2RlZmluZSBJUl9UWVBFX1JDNV9TWgkoMSAgPDwgNSkJLyogUkM1IHZhcmlhbnQgdXNlZCBieSBTdHJlYW16YXAgKi8KLSNkZWZpbmUgSVJfVFlQRV9MSVJDCSgxICA8PCAzMCkJLyogUGFzcyByYXcgSVIgdG8gbGlyYyB1c2Vyc3BhY2UgKi8KLSNkZWZpbmUgSVJfVFlQRV9PVEhFUgkoMXUgPDwgMzEpCisjZGVmaW5lIFJDX1RZUEVfVU5LTk9XTgkwCisjZGVmaW5lIFJDX1RZUEVfUkM1CSgxICA8PCAwKQkvKiBQaGlsaXBzIFJDNSBwcm90b2NvbCAqLworI2RlZmluZSBSQ19UWVBFX05FQwkoMSAgPDwgMSkKKyNkZWZpbmUgUkNfVFlQRV9SQzYJKDEgIDw8IDIpCS8qIFBoaWxpcHMgUkM2IHByb3RvY29sICovCisjZGVmaW5lIFJDX1RZUEVfSlZDCSgxICA8PCAzKQkvKiBKVkMgcHJvdG9jb2wgKi8KKyNkZWZpbmUgUkNfVFlQRV9TT05ZCSgxICA8PCA0KQkvKiBTb255MTIvMTUvMjAgcHJvdG9jb2wgKi8KKyNkZWZpbmUgUkNfVFlQRV9SQzVfU1oJKDEgIDw8IDUpCS8qIFJDNSB2YXJpYW50IHVzZWQgYnkgU3RyZWFtemFwICovCisjZGVmaW5lIFJDX1RZUEVfTElSQwkoMSAgPDwgMzApCS8qIFBhc3MgcmF3IElSIHRvIGxpcmMgdXNlcnNwYWNlICovCisjZGVmaW5lIFJDX1RZUEVfT1RIRVIJKDF1IDw8IDMxKQogCi0jZGVmaW5lIElSX1RZUEVfQUxMIChJUl9UWVBFX1JDNSB8IElSX1RZUEVfTkVDICB8IElSX1RZUEVfUkM2ICB8IFwKLQkJICAgICBJUl9UWVBFX0pWQyB8IElSX1RZUEVfU09OWSB8IElSX1RZUEVfTElSQyB8IFwKLQkJICAgICBJUl9UWVBFX1JDNV9TWiB8IElSX1RZUEVfT1RIRVIpCisjZGVmaW5lIFJDX1RZUEVfQUxMIChSQ19UWVBFX1JDNSB8IFJDX1RZUEVfTkVDICB8IFJDX1RZUEVfUkM2ICB8IFwKKwkJICAgICBSQ19UWVBFX0pWQyB8IFJDX1RZUEVfU09OWSB8IFJDX1RZUEVfTElSQyB8IFwKKwkJICAgICBSQ19UWVBFX1JDNV9TWiB8IFJDX1RZUEVfT1RIRVIpCiAKLXN0cnVjdCBpcl9zY2FuY29kZSB7CitzdHJ1Y3QgcmNfbWFwX3RhYmxlIHsKIAl1MzIJc2NhbmNvZGU7CiAJdTMyCWtleWNvZGU7CiB9OwogCi1zdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgewotCXN0cnVjdCBpcl9zY2FuY29kZQkqc2NhbjsKK3N0cnVjdCByY19tYXAgeworCXN0cnVjdCByY19tYXBfdGFibGUJKnNjYW47CiAJdW5zaWduZWQgaW50CQlzaXplOwkvKiBNYXggbnVtYmVyIG9mIGVudHJpZXMgKi8KIAl1bnNpZ25lZCBpbnQJCWxlbjsJLyogVXNlZCBudW1iZXIgb2YgZW50cmllcyAqLwogCXVuc2lnbmVkIGludAkJYWxsb2M7CS8qIFNpemUgb2YgKnNjYW4gaW4gYnl0ZXMgKi8KLQl1NjQJCQlpcl90eXBlOworCXU2NAkJCXJjX3R5cGU7CiAJY29uc3QgY2hhcgkJKm5hbWU7CiAJc3BpbmxvY2tfdAkJbG9jazsKIH07CiAKLXN0cnVjdCByY19rZXltYXAgeworc3RydWN0IHJjX21hcF9saXN0IHsKIAlzdHJ1Y3QgbGlzdF9oZWFkCSBsaXN0OwotCXN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBtYXA7CisJc3RydWN0IHJjX21hcCBtYXA7CiB9OwogCiAvKiBSb3V0aW5lcyBmcm9tIHJjLW1hcC5jICovCiAKLWludCBpcl9yZWdpc3Rlcl9tYXAoc3RydWN0IHJjX2tleW1hcCAqbWFwKTsKLXZvaWQgaXJfdW5yZWdpc3Rlcl9tYXAoc3RydWN0IHJjX2tleW1hcCAqbWFwKTsKLXN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSAqZ2V0X3JjX21hcChjb25zdCBjaGFyICpuYW1lKTsKK2ludCByY19tYXBfcmVnaXN0ZXIoc3RydWN0IHJjX21hcF9saXN0ICptYXApOwordm9pZCByY19tYXBfdW5yZWdpc3RlcihzdHJ1Y3QgcmNfbWFwX2xpc3QgKm1hcCk7CitzdHJ1Y3QgcmNfbWFwICpyY19tYXBfZ2V0KGNvbnN0IGNoYXIgKm5hbWUpOwogdm9pZCByY19tYXBfaW5pdCh2b2lkKTsKIAogLyogTmFtZXMgb2YgdGhlIHNldmVyYWwga2V5dGFibGVzIGRlZmluZWQgaW4ta2VybmVsICovCkBAIC0xMTksNiArMTE5LDcgQEAKICNkZWZpbmUgUkNfTUFQX1BJTk5BQ0xFX1BDVFZfSEQgICAgICAgICAgInJjLXBpbm5hY2xlLXBjdHYtaGQiCiAjZGVmaW5lIFJDX01BUF9QSVhFTFZJRVdfTkVXICAgICAgICAgICAgICJyYy1waXhlbHZpZXctbmV3IgogI2RlZmluZSBSQ19NQVBfUElYRUxWSUVXICAgICAgICAgICAgICAgICAicmMtcGl4ZWx2aWV3IgorI2RlZmluZSBSQ19NQVBfUElYRUxWSUVXXzAwMlQJCSAicmMtcGl4ZWx2aWV3LTAwMnQiCiAjZGVmaW5lIFJDX01BUF9QSVhFTFZJRVdfTUsxMiAgICAgICAgICAgICJyYy1waXhlbHZpZXctbWsxMiIKICNkZWZpbmUgUkNfTUFQX1BPV0VSQ09MT1JfUkVBTF9BTkdFTCAgICAgInJjLXBvd2VyY29sb3ItcmVhbC1hbmdlbCIKICNkZWZpbmUgUkNfTUFQX1BST1RFVVNfMjMwOSAgICAgICAgICAgICAgInJjLXByb3RldXMtMjMwOSIKQEAgLTEzNyw2ICsxMzgsNyBAQAogI2RlZmluZSBSQ19NQVBfVFJFS1NUT1IgICAgICAgICAgICAgICAgICAicmMtdHJla3N0b3IiCiAjZGVmaW5lIFJDX01BUF9UVF8xNTAwICAgICAgICAgICAgICAgICAgICJyYy10dC0xNTAwIgogI2RlZmluZSBSQ19NQVBfVFdJTkhBTl9WUDEwMjdfRFZCUyAgICAgICAicmMtdHdpbmhhbjEwMjciCisjZGVmaW5lIFJDX01BUF9WSURFT01BVEVfTTFGICAgICAgICAgICAgICJyYy12aWRlb21hdGUtbTFmIgogI2RlZmluZSBSQ19NQVBfVklERU9NQVRFX1MzNTAgICAgICAgICAgICAicmMtdmlkZW9tYXRlLXMzNTAiCiAjZGVmaW5lIFJDX01BUF9WSURFT01BVEVfVFZfUFZSICAgICAgICAgICJyYy12aWRlb21hdGUtdHYtcHZyIgogI2RlZmluZSBSQ19NQVBfV0lORkFTVCAgICAgICAgICAgICAgICAgICAicmMtd2luZmFzdCIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvcmRzLmggYi9pbmNsdWRlL21lZGlhL3Jkcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODk0MjY2Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbWVkaWEvcmRzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0vKgotCi0gICAgVHlwZXMgYW5kIGRlZmluZXMgbmVlZGVkIGZvciBSRFMuIFRoaXMgaXMgaW5jbHVkZWQgYnkKLSAgICBzYWE2NTg4LmMgYW5kIGV2ZXJ5IGRyaXZlciAoZS5nLiBidHR2LWRyaXZlci5jKSB0aGF0IHdhbnRzCi0gICAgdG8gdXNlIHRoZSBzYWE2NTg4IG1vZHVsZS4KLQotICAgIEluc3RlYWQgb2YgaGF2aW5nIGEgc2VwYXJhdGUgcmRzLmgsIEknZCBwcmVmZXIgdG8gaW5jbHVkZQotICAgIHRoaXMgc3R1ZmYgaW4gb25lIG9mIHRoZSBhbHJlYWR5IGV4aXN0aW5nIGZpbGVzIGxpa2UgdHVuZXIuaAotCi0gICAgKGMpIDIwMDUgYnkgSGFucyBKLiBLb2NoCi0KLSAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLQotKi8KLQotI2lmbmRlZiBfUkRTX0gKLSNkZWZpbmUgX1JEU19ICi0KLXN0cnVjdCByZHNfY29tbWFuZCB7Ci0JdW5zaWduZWQgaW50ICBibG9ja19jb3VudDsKLQlpbnQgICAgICAgICAgIHJlc3VsdDsKLQl1bnNpZ25lZCBjaGFyIF9fdXNlciAqYnVmZmVyOwotCXN0cnVjdCBmaWxlICAgKmluc3RhbmNlOwotCXBvbGxfdGFibGUgICAgKmV2ZW50X2xpc3Q7Ci19OwotCi0jZGVmaW5lIFJEU19DTURfT1BFTglfSU9XKCdSJywxLGludCkKLSNkZWZpbmUgUkRTX0NNRF9DTE9TRQlfSU9XKCdSJywyLGludCkKLSNkZWZpbmUgUkRTX0NNRF9SRUFECV9JT1IoJ1InLDMsaW50KQotI2RlZmluZSBSRFNfQ01EX1BPTEwJX0lPUignUicsNCxpbnQpCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9zYWE2NTg4LmggYi9pbmNsdWRlL21lZGlhL3NhYTY1ODguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzNjNDQyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9tZWRpYS9zYWE2NTg4LmgKQEAgLTAsMCArMSw0MiBAQAorLyoKKworICAgIFR5cGVzIGFuZCBkZWZpbmVzIG5lZWRlZCBmb3IgUkRTLiBUaGlzIGlzIGluY2x1ZGVkIGJ5CisgICAgc2FhNjU4OC5jIGFuZCBldmVyeSBkcml2ZXIgKGUuZy4gYnR0di1kcml2ZXIuYykgdGhhdCB3YW50cworICAgIHRvIHVzZSB0aGUgc2FhNjU4OCBtb2R1bGUuCisKKyAgICAoYykgMjAwNSBieSBIYW5zIEouIEtvY2gKKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisqLworCisjaWZuZGVmIF9TQUE2NTg4X0gKKyNkZWZpbmUgX1NBQTY1ODhfSAorCitzdHJ1Y3Qgc2FhNjU4OF9jb21tYW5kIHsKKwl1bnNpZ25lZCBpbnQgIGJsb2NrX2NvdW50OworCWludCAgICAgICAgICAgcmVzdWx0OworCXVuc2lnbmVkIGNoYXIgX191c2VyICpidWZmZXI7CisJc3RydWN0IGZpbGUgICAqaW5zdGFuY2U7CisJcG9sbF90YWJsZSAgICAqZXZlbnRfbGlzdDsKK307CisKKy8qIFRoZXNlIGlvY3RscyBhcmUgaW50ZXJuYWwgdG8gdGhlIGtlcm5lbCAqLworI2RlZmluZSBTQUE2NTg4X0NNRF9PUEVOCV9JT1coJ1InLCAxLCBpbnQpCisjZGVmaW5lIFNBQTY1ODhfQ01EX0NMT1NFCV9JT1coJ1InLCAyLCBpbnQpCisjZGVmaW5lIFNBQTY1ODhfQ01EX1JFQUQJX0lPUignUicsIDMsIGludCkKKyNkZWZpbmUgU0FBNjU4OF9DTURfUE9MTAlfSU9SKCdSJywgNCwgaW50KQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvc2k0NzEzLmggYi9pbmNsdWRlL21lZGlhL3NpNDcxMy5oCmluZGV4IDk5ODUwYTUuLmVkNzM1M2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvc2k0NzEzLmgKKysrIGIvaW5jbHVkZS9tZWRpYS9zaTQ3MTMuaApAQCAtMjMsOCArMjMsNyBAQAogICogUGxhdGZvcm0gZGVwZW5kZW50IGRlZmluaXRpb24KICAqLwogc3RydWN0IHNpNDcxM19wbGF0Zm9ybV9kYXRhIHsKLQkvKiBTZXQgcG93ZXIgc3RhdGUsIHplcm8gaXMgb2ZmLCBub24temVybyBpcyBvbi4gKi8KLQlpbnQgKCpzZXRfcG93ZXIpKGludCBwb3dlcik7CisJaW50IGdwaW9fcmVzZXQ7IC8qIDwgMCBpZiBub3QgdXNlZCAqLwogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvc29jX2NhbWVyYS5oIGIvaW5jbHVkZS9tZWRpYS9zb2NfY2FtZXJhLmgKaW5kZXggODZlMzYzMS4uOTM4NmRiOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9zb2NfY2FtZXJhLmgKKysrIGIvaW5jbHVkZS9tZWRpYS9zb2NfY2FtZXJhLmgKQEAgLTk3LDYgKzk3LDcgQEAKICNkZWZpbmUgU09DQU1fU0VOU09SX0lOVkVSVF9EQVRBCSgxIDw8IDQpCiAKIHN0cnVjdCBpMmNfYm9hcmRfaW5mbzsKK3N0cnVjdCByZWd1bGF0b3JfYnVsa19kYXRhOwogCiBzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rIHsKIAkvKiBDYW1lcmEgYnVzIGlkLCB1c2VkIHRvIG1hdGNoIGEgY2FtZXJhIGFuZCBhIGJ1cyAqLwpAQCAtMTA4LDYgKzEwOSwxMCBAQAogCWNvbnN0IGNoYXIgKm1vZHVsZV9uYW1lOwogCXZvaWQgKnByaXY7CiAKKwkvKiBPcHRpb25hbCByZWd1bGF0b3JzIHRoYXQgaGF2ZSB0byBiZSBtYW5hZ2VkIG9uIHBvd2VyIG9uL29mZiBldmVudHMgKi8KKwlzdHJ1Y3QgcmVndWxhdG9yX2J1bGtfZGF0YSAqcmVndWxhdG9yczsKKwlpbnQgbnVtX3JlZ3VsYXRvcnM7CisKIAkvKgogCSAqIEZvciBub24tSTJDIGRldmljZXMgcGxhdGZvcm0gcGxhdGZvcm0gaGFzIHRvIHByb3ZpZGUgbWV0aG9kcyB0bwogCSAqIGFkZCBhIGRldmljZSB0byB0aGUgc3lzdGVtIGFuZCB0byByZW1vdmUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdGltYl9yYWRpby5oIGIvaW5jbHVkZS9tZWRpYS90aW1iX3JhZGlvLmgKaW5kZXggZmNkMzJhMy4uYTU5YTg0OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS90aW1iX3JhZGlvLmgKKysrIGIvaW5jbHVkZS9tZWRpYS90aW1iX3JhZGlvLmgKQEAgLTI0LDcgKzI0LDYgQEAKIHN0cnVjdCB0aW1iX3JhZGlvX3BsYXRmb3JtX2RhdGEgewogCWludCBpMmNfYWRhcHRlcjsgLyogSTJDIGFkYXB0ZXIgd2hlcmUgdGhlIHR1bmVyIGFuZCBkc3AgYXJlIGF0dGFjaGVkICovCiAJc3RydWN0IHsKLQkJY29uc3QgY2hhciAqbW9kdWxlX25hbWU7CiAJCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbzsKIAl9IHR1bmVyOwogCXN0cnVjdCB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3RpbWJfdmlkZW8uaCBiL2luY2x1ZGUvbWVkaWEvdGltYl92aWRlby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwYWU0MzkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL21lZGlhL3RpbWJfdmlkZW8uaApAQCAtMCwwICsxLDMzIEBACisvKgorICogdGltYl92aWRlby5oIFBsYXRmb3JtIHN0cnVjdCBmb3IgdGhlIFRpbWJlcmRhbGUgdmlkZW8gZHJpdmVyCisgKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgX1RJTUJfVklERU9fCisjZGVmaW5lIF9USU1CX1ZJREVPXyAxCisKKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKworc3RydWN0IHRpbWJfdmlkZW9fcGxhdGZvcm1fZGF0YSB7CisJaW50IGRtYV9jaGFubmVsOworCWludCBpMmNfYWRhcHRlcjsgLyogVGhlIEkyQyBhZGFwdGVyIHdoZXJlIHRoZSBlbmNvZGVyIGlzIGF0dGFjaGVkICovCisJc3RydWN0IHsKKwkJY29uc3QgY2hhciAqbW9kdWxlX25hbWU7CisJCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbzsKKwl9IGVuY29kZXI7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdjRsMi1jaGlwLWlkZW50LmggYi9pbmNsdWRlL21lZGlhL3Y0bDItY2hpcC1pZGVudC5oCmluZGV4IDUxZTg5ZjIuLjQ0ZmU0NGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvdjRsMi1jaGlwLWlkZW50LmgKKysrIGIvaW5jbHVkZS9tZWRpYS92NGwyLWNoaXAtaWRlbnQuaApAQCAtNzQsNiArNzQsNyBAQAogCVY0TDJfSURFTlRfU09JOTY4ID0gMjU2LAogCVY0TDJfSURFTlRfT1Y5NjQwID0gMjU3LAogCVY0TDJfSURFTlRfT1Y2NjUwID0gMjU4LAorCVY0TDJfSURFTlRfT1YyNjQwID0gMjU5LAogCiAJLyogbW9kdWxlIHNhYTcxNDY6IHJlc2VydmVkIHJhbmdlIDMwMC0zMDkgKi8KIAlWNEwyX0lERU5UX1NBQTcxNDYgPSAzMDAsCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3Y0bDItY29tbW9uLmggYi9pbmNsdWRlL21lZGlhL3Y0bDItY29tbW9uLmgKaW5kZXggMjM5MTI1YS4uMmQ2NWIzNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS92NGwyLWNvbW1vbi5oCisrKyBiL2luY2x1ZGUvbWVkaWEvdjRsMi1jb21tb24uaApAQCAtOTgsMTIgKzk4LDEyIEBACiAvKiBDb250cm9sIGhlbHBlciBmdW5jdGlvbnMgKi8KIAogaW50IHY0bDJfY3RybF9jaGVjayhzdHJ1Y3QgdjRsMl9leHRfY29udHJvbCAqY3RybCwgc3RydWN0IHY0bDJfcXVlcnljdHJsICpxY3RybCwKLQkJY29uc3QgY2hhciAqKm1lbnVfaXRlbXMpOworCQljb25zdCBjaGFyICogY29uc3QgKm1lbnVfaXRlbXMpOwogY29uc3QgY2hhciAqdjRsMl9jdHJsX2dldF9uYW1lKHUzMiBpZCk7Ci1jb25zdCBjaGFyICoqdjRsMl9jdHJsX2dldF9tZW51KHUzMiBpZCk7Citjb25zdCBjaGFyICogY29uc3QgKnY0bDJfY3RybF9nZXRfbWVudSh1MzIgaWQpOwogaW50IHY0bDJfY3RybF9xdWVyeV9maWxsKHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWN0cmwsIHMzMiBtaW4sIHMzMiBtYXgsIHMzMiBzdGVwLCBzMzIgZGVmKTsKIGludCB2NGwyX2N0cmxfcXVlcnlfbWVudShzdHJ1Y3QgdjRsMl9xdWVyeW1lbnUgKnFtZW51LAotCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjdHJsLCBjb25zdCBjaGFyICoqbWVudV9pdGVtcyk7CisJCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWN0cmwsIGNvbnN0IGNoYXIgKiBjb25zdCAqbWVudV9pdGVtcyk7CiAjZGVmaW5lIFY0TDJfQ1RSTF9NRU5VX0lEU19FTkQgKDB4ZmZmZmZmZmYpCiBpbnQgdjRsMl9jdHJsX3F1ZXJ5X21lbnVfdmFsaWRfaXRlbXMoc3RydWN0IHY0bDJfcXVlcnltZW51ICpxbWVudSwgY29uc3QgdTMyICppZHMpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3Y0bDItY3RybHMuaCBiL2luY2x1ZGUvbWVkaWEvdjRsMi1jdHJscy5oCmluZGV4IDliN2JlYTkuLmQ2OWFiNGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvdjRsMi1jdHJscy5oCisrKyBiL2luY2x1ZGUvbWVkaWEvdjRsMi1jdHJscy5oCkBAIC0xMTIsNyArMTEyLDcgQEAKIAkJdTMyIHN0ZXA7CiAJCXUzMiBtZW51X3NraXBfbWFzazsKIAl9OwotCWNvbnN0IGNoYXIgKipxbWVudTsKKwljb25zdCBjaGFyICogY29uc3QgKnFtZW51OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5pb24gewogCQlzMzIgdmFsOwpAQCAtMjAyLDcgKzIwMiw3IEBACiAJczMyIGRlZjsKIAl1MzIgZmxhZ3M7CiAJdTMyIG1lbnVfc2tpcF9tYXNrOwotCWNvbnN0IGNoYXIgKipxbWVudTsKKwljb25zdCBjaGFyICogY29uc3QgKnFtZW51OwogCXVuc2lnbmVkIGludCBpc19wcml2YXRlOjE7CiAJdW5zaWduZWQgaW50IGlzX3ZvbGF0aWxlOjE7CiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS92NGwyLWlvY3RsLmggYi9pbmNsdWRlL21lZGlhL3Y0bDItaW9jdGwuaAppbmRleCAwNmRhYTZlLi42N2RmMzc1IDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3Y0bDItaW9jdGwuaAorKysgYi9pbmNsdWRlL21lZGlhL3Y0bDItaW9jdGwuaApAQCAtMTQsMTIgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+IC8qIG5lZWQgX191c2VyICovCi0jaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCi0jZGVmaW5lIF9fTUlOX1Y0TDEKLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgotI2Vsc2UKICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KLSNlbmRpZgogCiBzdHJ1Y3QgdjRsMl9maDsKIApAQCAtMTEzLDEwICsxMDgsNiBAQAogCiAKIAlpbnQgKCp2aWRpb2Nfb3ZlcmxheSkgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgdW5zaWduZWQgaW50IGkpOwotI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAotCQkJLyogYnVmZmVyIHR5cGUgaXMgc3RydWN0IHZpZGlvX21idWYgKiAqLwotCWludCAoKnZpZGlvY2dtYnVmKSAgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHZpZGVvX21idWYgKnApOwotI2VuZGlmCiAJaW50ICgqdmlkaW9jX2dfZmJ1ZikgICAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAogCQkJCXN0cnVjdCB2NGwyX2ZyYW1lYnVmZmVyICphKTsKIAlpbnQgKCp2aWRpb2Nfc19mYnVmKSAgIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCkBAIC0zMDAsMjIgKzI5MSwxNSBAQAogZXh0ZXJuIGNvbnN0IGNoYXIgKnY0bDJfZmllbGRfbmFtZXNbXTsKIGV4dGVybiBjb25zdCBjaGFyICp2NGwyX3R5cGVfbmFtZXNbXTsKIAotLyogIENvbXBhdGliaWxpdHkgbGF5ZXIgaW50ZXJmYWNlICAtLSAgdjRsMS1jb21wYXQgbW9kdWxlICovCi10eXBlZGVmIGxvbmcgKCp2NGwyX2tpb2N0bCkoc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkgICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpOwotI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAotbG9uZyB2NGxfY29tcGF0X3RyYW5zbGF0ZV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCSAgICAgICBpbnQgY21kLCB2b2lkICphcmcsIHY0bDJfa2lvY3RsIGRyaXZlcl9pb2N0bCk7Ci0jZWxzZQotI2RlZmluZSB2NGxfY29tcGF0X3RyYW5zbGF0ZV9pb2N0bChmaWxlLCBjbWQsIGFyZywgaW9jdGwpICgtRUlOVkFMKQotI2VuZGlmCi0KICNpZmRlZiBDT05GSUdfQ09NUEFUCiAvKiAzMiBCaXRzIGNvbXBhdGliaWxpdHkgbGF5ZXIgZm9yIDY0IGJpdHMgcHJvY2Vzc29ycyAqLwogZXh0ZXJuIGxvbmcgdjRsMl9jb21wYXRfaW9jdGwzMihzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKIAkJCQl1bnNpZ25lZCBsb25nIGFyZyk7CiAjZW5kaWYKIAordHlwZWRlZiBsb25nICgqdjRsMl9raW9jdGwpKHN0cnVjdCBmaWxlICpmaWxlLAorCQl1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpOworCiAvKiBJbmNsdWRlIHN1cHBvcnQgZm9yIG9ic29sZXRlZCBzdHVmZiAqLwogZXh0ZXJuIGxvbmcgdmlkZW9fdXNlcmNvcHkoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCiAJCQkJdW5zaWduZWQgbG9uZyBhcmcsIHY0bDJfa2lvY3RsIGZ1bmMpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS92aWRlb2J1Zi1jb3JlLmggYi9pbmNsdWRlL21lZGlhL3ZpZGVvYnVmLWNvcmUuaAppbmRleCAxZDM4MzVmLi45MGVkODk1IDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3ZpZGVvYnVmLWNvcmUuaAorKysgYi9pbmNsdWRlL21lZGlhL3ZpZGVvYnVmLWNvcmUuaApAQCAtMTcsMTAgKzE3LDYgQEAKICNkZWZpbmUgX1ZJREVPQlVGX0NPUkVfSAogCiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgotI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAotI2RlZmluZSBfX01JTl9WNEwxCi0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KLSNlbmRpZgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogCiAjZGVmaW5lIFVOU0VUICgtMVUpCkBAIC0yMTIsMTAgKzIwOCw2IEBACiAJCSAgc3RydWN0IHY0bDJfYnVmZmVyICpiKTsKIGludCB2aWRlb2J1Zl9kcWJ1ZihzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsCiAJCSAgIHN0cnVjdCB2NGwyX2J1ZmZlciAqYiwgaW50IG5vbmJsb2NraW5nKTsKLSNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKLWludCB2aWRlb2J1Zl9jZ21idWYoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLAotCQkgICAgc3RydWN0IHZpZGVvX21idWYgKm1idWYsIGludCBjb3VudCk7Ci0jZW5kaWYKIGludCB2aWRlb2J1Zl9zdHJlYW1vbihzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEpOwogaW50IHZpZGVvYnVmX3N0cmVhbW9mZihzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9hZGRyY29uZi5oIGIvaW5jbHVkZS9uZXQvYWRkcmNvbmYuaAppbmRleCBhOTQ0MTI0Li4yMzcxMGFhIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9hZGRyY29uZi5oCisrKyBiL2luY2x1ZGUvbmV0L2FkZHJjb25mLmgKQEAgLTEsOCArMSw2IEBACiAjaWZuZGVmIF9BRERSQ09ORl9ICiAjZGVmaW5lIF9BRERSQ09ORl9ICiAKLSNkZWZpbmUgUkVUUkFOU19USU1FUglIWgotCiAjZGVmaW5lIE1BWF9SVFJfU09MSUNJVEFUSU9OUwkJMwogI2RlZmluZSBSVFJfU09MSUNJVEFUSU9OX0lOVEVSVkFMCSg0KkhaKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvYmx1ZXRvb3RoLmggYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvYmx1ZXRvb3RoLmgKaW5kZXggZDgxZWE3OS4uMGM1ZTcyNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2JsdWV0b290aC5oCisrKyBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9ibHVldG9vdGguaApAQCAtMTQ0LDYgKzE0NCw3IEBACiAJX191OCB0eF9zZXE7CiAJX191OCByZXRyaWVzOwogCV9fdTggc2FyOworCXVuc2lnbmVkIHNob3J0IGNoYW5uZWw7CiB9OwogI2RlZmluZSBidF9jYihza2IpICgoc3RydWN0IGJ0X3NrYl9jYiAqKSgoc2tiKS0+Y2IpKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpLmggYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpLmgKaW5kZXggZTMwZTAwOC4uMjlhN2E4YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaS5oCisrKyBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2kuaApAQCAtMSw0ICsxLDQgQEAKLS8qIAorLyoKICAgIEJsdWVaIC0gQmx1ZXRvb3RoIHByb3RvY29sIHN0YWNrIGZvciBMaW51eAogICAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDEgUXVhbGNvbW0gSW5jb3Jwb3JhdGVkCiAKQEAgLTEyLDEzICsxMiwxMyBAQAogICAgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCiAgICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5UIE9GIFRISVJEIFBBUlRZIFJJR0hUUy4KICAgIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIEFORCBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkKLSAgIENMQUlNLCBPUiBBTlkgU1BFQ0lBTCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIE9SIEFOWSBEQU1BR0VTIAotICAgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIAotICAgQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgCisgICBDTEFJTSwgT1IgQU5ZIFNQRUNJQUwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBPUiBBTlkgREFNQUdFUworICAgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgICBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgogICAgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KIAotICAgQUxMIExJQUJJTElUWSwgSU5DTFVESU5HIExJQUJJTElUWSBGT1IgSU5GUklOR0VNRU5UIE9GIEFOWSBQQVRFTlRTLCAKLSAgIENPUFlSSUdIVFMsIFRSQURFTUFSS1MgT1IgT1RIRVIgUklHSFRTLCBSRUxBVElORyBUTyBVU0UgT0YgVEhJUyAKKyAgIEFMTCBMSUFCSUxJVFksIElOQ0xVRElORyBMSUFCSUxJVFkgRk9SIElORlJJTkdFTUVOVCBPRiBBTlkgUEFURU5UUywKKyAgIENPUFlSSUdIVFMsIFRSQURFTUFSS1MgT1IgT1RIRVIgUklHSFRTLCBSRUxBVElORyBUTyBVU0UgT0YgVEhJUwogICAgU09GVFdBUkUgSVMgRElTQ0xBSU1FRC4KICovCiAKQEAgLTQ4OSw3ICs0ODksNyBAQAogCiAjZGVmaW5lIEhDSV9PUF9XUklURV9QR19USU1FT1VUCQkweDBjMTgKIAotI2RlZmluZSBIQ0lfT1BfV1JJVEVfU0NBTl9FTkFCTEUgCTB4MGMxYQorI2RlZmluZSBIQ0lfT1BfV1JJVEVfU0NBTl9FTkFCTEUJMHgwYzFhCiAJI2RlZmluZSBTQ0FOX0RJU0FCTEVECQkweDAwCiAJI2RlZmluZSBTQ0FOX0lOUVVJUlkJCTB4MDEKIAkjZGVmaW5lIFNDQU5fUEFHRQkJMHgwMgpAQCAtODc0LDcgKzg3NCw3IEBACiAKIHN0cnVjdCBoY2lfY29tbWFuZF9oZHIgewogCV9fbGUxNglvcGNvZGU7CQkvKiBPQ0YgJiBPR0YgKi8KLQlfX3U4IAlwbGVuOworCV9fdTgJcGxlbjsKIH0gX19wYWNrZWQ7CiAKIHN0cnVjdCBoY2lfZXZlbnRfaGRyIHsKQEAgLTkzNCw5ICs5MzQsMTMgQEAKIHN0cnVjdCBzb2NrYWRkcl9oY2kgewogCXNhX2ZhbWlseV90ICAgIGhjaV9mYW1pbHk7CiAJdW5zaWduZWQgc2hvcnQgaGNpX2RldjsKKwl1bnNpZ25lZCBzaG9ydCBoY2lfY2hhbm5lbDsKIH07CiAjZGVmaW5lIEhDSV9ERVZfTk9ORQkweGZmZmYKIAorI2RlZmluZSBIQ0lfQ0hBTk5FTF9SQVcJCTAKKyNkZWZpbmUgSENJX0NIQU5ORUxfQ09OVFJPTAkxCisKIHN0cnVjdCBoY2lfZmlsdGVyIHsKIAl1bnNpZ25lZCBsb25nIHR5cGVfbWFzazsKIAl1bnNpZ25lZCBsb25nIGV2ZW50X21hc2tbMl07CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaCBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oCmluZGV4IGViZWM4YzkuLmEyOWZlYjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oCisrKyBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oCkBAIC00NCwxNSArNDQsMTUgQEAKIH07CiAKIHN0cnVjdCBpbnF1aXJ5X2VudHJ5IHsKLQlzdHJ1Y3QgaW5xdWlyeV9lbnRyeSAJKm5leHQ7CisJc3RydWN0IGlucXVpcnlfZW50cnkJKm5leHQ7CiAJX191MzIJCQl0aW1lc3RhbXA7CiAJc3RydWN0IGlucXVpcnlfZGF0YQlkYXRhOwogfTsKIAogc3RydWN0IGlucXVpcnlfY2FjaGUgewotCXNwaW5sb2NrX3QgCQlsb2NrOworCXNwaW5sb2NrX3QJCWxvY2s7CiAJX191MzIJCQl0aW1lc3RhbXA7Ci0Jc3RydWN0IGlucXVpcnlfZW50cnkgCSpsaXN0OworCXN0cnVjdCBpbnF1aXJ5X2VudHJ5CSpsaXN0OwogfTsKIAogc3RydWN0IGhjaV9jb25uX2hhc2ggewpAQCAtMTI5LDYgKzEyOSw3IEBACiAJd2FpdF9xdWV1ZV9oZWFkX3QJcmVxX3dhaXRfcTsKIAlfX3UzMgkJCXJlcV9zdGF0dXM7CiAJX191MzIJCQlyZXFfcmVzdWx0OworCV9fdTE2CQkJcmVxX2xhc3RfY21kOwogCiAJc3RydWN0IGlucXVpcnlfY2FjaGUJaW5xX2NhY2hlOwogCXN0cnVjdCBoY2lfY29ubl9oYXNoCWNvbm5faGFzaDsKQEAgLTE0MSw3ICsxNDIsNyBAQAogCXZvaWQJCQkqZHJpdmVyX2RhdGE7CiAJdm9pZAkJCSpjb3JlX2RhdGE7CiAKLQlhdG9taWNfdCAJCXByb21pc2M7CisJYXRvbWljX3QJCXByb21pc2M7CiAKIAlzdHJ1Y3QgZGVudHJ5CQkqZGVidWdmczsKIApAQCAtMTUwLDcgKzE1MSw3IEBACiAKIAlzdHJ1Y3QgcmZraWxsCQkqcmZraWxsOwogCi0Jc3RydWN0IG1vZHVsZSAJCSpvd25lcjsKKwlzdHJ1Y3QgbW9kdWxlCQkqb3duZXI7CiAKIAlpbnQgKCpvcGVuKShzdHJ1Y3QgaGNpX2RldiAqaGRldik7CiAJaW50ICgqY2xvc2UpKHN0cnVjdCBoY2lfZGV2ICpoZGV2KTsKQEAgLTIxNSw4ICsyMTYsOCBAQAogZXh0ZXJuIHJ3bG9ja190IGhjaV9jYl9saXN0X2xvY2s7CiAKIC8qIC0tLS0tIElucXVpcnkgY2FjaGUgLS0tLS0gKi8KLSNkZWZpbmUgSU5RVUlSWV9DQUNIRV9BR0VfTUFYICAgKEhaKjMwKSAgIC8vIDMwIHNlY29uZHMKLSNkZWZpbmUgSU5RVUlSWV9FTlRSWV9BR0VfTUFYICAgKEhaKjYwKSAgIC8vIDYwIHNlY29uZHMKKyNkZWZpbmUgSU5RVUlSWV9DQUNIRV9BR0VfTUFYICAgKEhaKjMwKSAgIC8qIDMwIHNlY29uZHMgKi8KKyNkZWZpbmUgSU5RVUlSWV9FTlRSWV9BR0VfTUFYICAgKEhaKjYwKSAgIC8qIDYwIHNlY29uZHMgKi8KIAogI2RlZmluZSBpbnF1aXJ5X2NhY2hlX2xvY2soYykJCXNwaW5fbG9jaygmYy0+bG9jaykKICNkZWZpbmUgaW5xdWlyeV9jYWNoZV91bmxvY2soYykJCXNwaW5fdW5sb2NrKCZjLT5sb2NrKQpAQCAtNjYwLDYgKzY2MSwxMSBAQAogLyogLS0tLS0gSENJIFNvY2tldHMgLS0tLS0gKi8KIHZvaWQgaGNpX3NlbmRfdG9fc29jayhzdHJ1Y3QgaGNpX2RldiAqaGRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKKy8qIE1hbmFnZW1lbnQgaW50ZXJmYWNlICovCitpbnQgbWdtdF9jb250cm9sKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKTsKK2ludCBtZ210X2luZGV4X2FkZGVkKHUxNiBpbmRleCk7CitpbnQgbWdtdF9pbmRleF9yZW1vdmVkKHUxNiBpbmRleCk7CisKIC8qIEhDSSBpbmZvIGZvciBzb2NrZXQgKi8KICNkZWZpbmUgaGNpX3BpKHNrKSAoKHN0cnVjdCBoY2lfcGluZm8gKikgc2spCiAKQEAgLTY2OCw2ICs2NzQsNyBAQAogCXN0cnVjdCBoY2lfZGV2ICAgICpoZGV2OwogCXN0cnVjdCBoY2lfZmlsdGVyIGZpbHRlcjsKIAlfX3UzMiAgICAgICAgICAgICBjbXNnX21hc2s7CisJdW5zaWduZWQgc2hvcnQgICBjaGFubmVsOwogfTsKIAogLyogSENJIHNlY3VyaXR5IGZpbHRlciAqLwpAQCAtNjg3LDYgKzY5NCw2IEBACiAjZGVmaW5lIGhjaV9yZXFfbG9jayhkKQkJbXV0ZXhfbG9jaygmZC0+cmVxX2xvY2spCiAjZGVmaW5lIGhjaV9yZXFfdW5sb2NrKGQpCW11dGV4X3VubG9jaygmZC0+cmVxX2xvY2spCiAKLXZvaWQgaGNpX3JlcV9jb21wbGV0ZShzdHJ1Y3QgaGNpX2RldiAqaGRldiwgaW50IHJlc3VsdCk7Cit2b2lkIGhjaV9yZXFfY29tcGxldGUoc3RydWN0IGhjaV9kZXYgKmhkZXYsIF9fdTE2IGNtZCwgaW50IHJlc3VsdCk7CiAKICNlbmRpZiAvKiBfX0hDSV9DT1JFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9sMmNhcC5oIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2wyY2FwLmgKaW5kZXggYzgxOWM4Yi4uN2FkMjVjYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2wyY2FwLmgKKysrIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2wyY2FwLmgKQEAgLTEsNCArMSw0IEBACi0vKiAKKy8qCiAgICBCbHVlWiAtIEJsdWV0b290aCBwcm90b2NvbCBzdGFjayBmb3IgTGludXgKICAgIENvcHlyaWdodCAoQykgMjAwMC0yMDAxIFF1YWxjb21tIEluY29ycG9yYXRlZAogICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgR3VzdGF2byBGLiBQYWRvdmFuIDxndXN0YXZvQHBhZG92YW4ub3JnPgpAQCAtMTQsMTMgKzE0LDEzIEBACiAgICBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKICAgIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQgT0YgVEhJUkQgUEFSVFkgUklHSFRTLgogICAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIoUykgQU5EIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWQotICAgQ0xBSU0sIE9SIEFOWSBTUEVDSUFMIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgT1IgQU5ZIERBTUFHRVMgCi0gICBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gCi0gICBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiAKKyAgIENMQUlNLCBPUiBBTlkgU1BFQ0lBTCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIE9SIEFOWSBEQU1BR0VTCisgICBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAgIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCiAgICBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgogCi0gICBBTEwgTElBQklMSVRZLCBJTkNMVURJTkcgTElBQklMSVRZIEZPUiBJTkZSSU5HRU1FTlQgT0YgQU5ZIFBBVEVOVFMsIAotICAgQ09QWVJJR0hUUywgVFJBREVNQVJLUyBPUiBPVEhFUiBSSUdIVFMsIFJFTEFUSU5HIFRPIFVTRSBPRiBUSElTIAorICAgQUxMIExJQUJJTElUWSwgSU5DTFVESU5HIExJQUJJTElUWSBGT1IgSU5GUklOR0VNRU5UIE9GIEFOWSBQQVRFTlRTLAorICAgQ09QWVJJR0hUUywgVFJBREVNQVJLUyBPUiBPVEhFUiBSSUdIVFMsIFJFTEFUSU5HIFRPIFVTRSBPRiBUSElTCiAgICBTT0ZUV0FSRSBJUyBESVNDTEFJTUVELgogKi8KIApAQCAtNDE3LDExICs0MTcsMTEgQEAKIAlyZXR1cm4gc3ViID09IHBpLT5yZW1vdGVfdHhfd2luOwogfQogCi0jZGVmaW5lIF9fZ2V0X3R4c2VxKGN0cmwpICgoY3RybCkgJiBMMkNBUF9DVFJMX1RYU0VRKSA+PiAxCi0jZGVmaW5lIF9fZ2V0X3JlcXNlcShjdHJsKSAoKGN0cmwpICYgTDJDQVBfQ1RSTF9SRVFTRVEpID4+IDgKLSNkZWZpbmUgX19pc19pZnJhbWUoY3RybCkgISgoY3RybCkgJiBMMkNBUF9DVFJMX0ZSQU1FX1RZUEUpCi0jZGVmaW5lIF9faXNfc2ZyYW1lKGN0cmwpIChjdHJsKSAmIEwyQ0FQX0NUUkxfRlJBTUVfVFlQRQotI2RlZmluZSBfX2lzX3Nhcl9zdGFydChjdHJsKSAoKGN0cmwpICYgTDJDQVBfQ1RSTF9TQVIpID09IEwyQ0FQX1NEVV9TVEFSVAorI2RlZmluZSBfX2dldF90eHNlcShjdHJsKQkoKChjdHJsKSAmIEwyQ0FQX0NUUkxfVFhTRVEpID4+IDEpCisjZGVmaW5lIF9fZ2V0X3JlcXNlcShjdHJsKQkoKChjdHJsKSAmIEwyQ0FQX0NUUkxfUkVRU0VRKSA+PiA4KQorI2RlZmluZSBfX2lzX2lmcmFtZShjdHJsKQkoISgoY3RybCkgJiBMMkNBUF9DVFJMX0ZSQU1FX1RZUEUpKQorI2RlZmluZSBfX2lzX3NmcmFtZShjdHJsKQkoKGN0cmwpICYgTDJDQVBfQ1RSTF9GUkFNRV9UWVBFKQorI2RlZmluZSBfX2lzX3Nhcl9zdGFydChjdHJsKQkoKChjdHJsKSAmIEwyQ0FQX0NUUkxfU0FSKSA9PSBMMkNBUF9TRFVfU1RBUlQpCiAKIHZvaWQgbDJjYXBfbG9hZCh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL21nbXQuaCBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9tZ210LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2EyOWMxMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9tZ210LmgKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAgIEJsdWVaIC0gQmx1ZXRvb3RoIHByb3RvY29sIHN0YWNrIGZvciBMaW51eAorCisgICBDb3B5cmlnaHQgKEMpIDIwMTAgIE5va2lhIENvcnBvcmF0aW9uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247CisKKyAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTCisgICBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAgIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQgT0YgVEhJUkQgUEFSVFkgUklHSFRTLgorICAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIoUykgQU5EIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWQorICAgQ0xBSU0sIE9SIEFOWSBTUEVDSUFMIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgT1IgQU5ZIERBTUFHRVMKKyAgIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICAgQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAgIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisKKyAgIEFMTCBMSUFCSUxJVFksIElOQ0xVRElORyBMSUFCSUxJVFkgRk9SIElORlJJTkdFTUVOVCBPRiBBTlkgUEFURU5UUywKKyAgIENPUFlSSUdIVFMsIFRSQURFTUFSS1MgT1IgT1RIRVIgUklHSFRTLCBSRUxBVElORyBUTyBVU0UgT0YgVEhJUworICAgU09GVFdBUkUgSVMgRElTQ0xBSU1FRC4KKyovCisKK3N0cnVjdCBtZ210X2hkciB7CisJX19sZTE2IG9wY29kZTsKKwlfX2xlMTYgbGVuOworfSBfX3BhY2tlZDsKKyNkZWZpbmUgTUdNVF9IRFJfU0laRQkJCTQKKworI2RlZmluZSBNR01UX09QX1JFQURfVkVSU0lPTgkJMHgwMDAxCitzdHJ1Y3QgbWdtdF9ycF9yZWFkX3ZlcnNpb24geworCV9fdTggdmVyc2lvbjsKKwlfX2xlMTYgcmV2aXNpb247Cit9IF9fcGFja2VkOworCisjZGVmaW5lIE1HTVRfT1BfUkVBRF9JTkRFWF9MSVNUCQkweDAwMDMKK3N0cnVjdCBtZ210X3JwX3JlYWRfaW5kZXhfbGlzdCB7CisJX19sZTE2IG51bV9jb250cm9sbGVyczsKKwlfX2xlMTYgaW5kZXhbMF07Cit9IF9fcGFja2VkOworCisjZGVmaW5lIE1HTVRfT1BfUkVBRF9JTkZPCQkweDAwMDQKK3N0cnVjdCBtZ210X2NwX3JlYWRfaW5mbyB7CisJX19sZTE2IGluZGV4OworfSBfX3BhY2tlZDsKK3N0cnVjdCBtZ210X3JwX3JlYWRfaW5mbyB7CisJX19sZTE2IGluZGV4OworCV9fdTggdHlwZTsKKwlfX3U4IHBvd2VyZWQ7CisJX191OCBkaXNjb3ZlcmFibGU7CisJX191OCBwYWlyYWJsZTsKKwlfX3U4IHNlY19tb2RlOworCWJkYWRkcl90IGJkYWRkcjsKKwlfX3U4IGRldl9jbGFzc1szXTsKKwlfX3U4IGZlYXR1cmVzWzhdOworCV9fdTE2IG1hbnVmYWN0dXJlcjsKKwlfX3U4IGhjaV92ZXI7CisJX191MTYgaGNpX3JldjsKK30gX19wYWNrZWQ7CisKKyNkZWZpbmUgTUdNVF9FVl9DTURfQ09NUExFVEUJCTB4MDAwMQorc3RydWN0IG1nbXRfZXZfY21kX2NvbXBsZXRlIHsKKwlfX2xlMTYgb3Bjb2RlOworCV9fdTggZGF0YVswXTsKK30gX19wYWNrZWQ7CisKKyNkZWZpbmUgTUdNVF9FVl9DTURfU1RBVFVTCQkweDAwMDIKK3N0cnVjdCBtZ210X2V2X2NtZF9zdGF0dXMgeworCV9fdTggc3RhdHVzOworCV9fbGUxNiBvcGNvZGU7Cit9IF9fcGFja2VkOworCisjZGVmaW5lIE1HTVRfRVZfQ09OVFJPTExFUl9FUlJPUgkweDAwMDMKK3N0cnVjdCBtZ210X2V2X2NvbnRyb2xsZXJfZXJyb3IgeworCV9fbGUxNiBpbmRleDsKKwlfX3U4IGVycm9yX2NvZGU7Cit9IF9fcGFja2VkOworCisjZGVmaW5lIE1HTVRfRVZfSU5ERVhfQURERUQJCTB4MDAwNAorc3RydWN0IG1nbXRfZXZfaW5kZXhfYWRkZWQgeworCV9fbGUxNiBpbmRleDsKK30gX19wYWNrZWQ7CisKKyNkZWZpbmUgTUdNVF9FVl9JTkRFWF9SRU1PVkVECQkweDAwMDUKK3N0cnVjdCBtZ210X2V2X2luZGV4X3JlbW92ZWQgeworCV9fbGUxNiBpbmRleDsKK30gX19wYWNrZWQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvcmZjb21tLmggYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvcmZjb21tLmgKaW5kZXggNzEwNDdiYy4uNmVhYzRhNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL3JmY29tbS5oCisrKyBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9yZmNvbW0uaApAQCAtMSw1ICsxLDUgQEAKLS8qIAotICAgUkZDT01NIGltcGxlbWVudGF0aW9uIGZvciBMaW51eCBCbHVldG9vdGggc3RhY2sgKEJsdWVaKS4KKy8qCisgICBSRkNPTU0gaW1wbGVtZW50YXRpb24gZm9yIExpbnV4IEJsdWV0b290aCBzdGFjayAoQmx1ZVopCiAgICBDb3B5cmlnaHQgKEMpIDIwMDIgTWF4aW0gS3Jhc255YW5za3kgPG1heGtAcXVhbGNvbW0uY29tPgogICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmNlbCBIb2x0bWFubiA8bWFyY2VsQGhvbHRtYW5uLm9yZz4KIApAQCAtMTEsMTMgKzExLDEzIEBACiAgICBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKICAgIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQgT0YgVEhJUkQgUEFSVFkgUklHSFRTLgogICAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIoUykgQU5EIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWQotICAgQ0xBSU0sIE9SIEFOWSBTUEVDSUFMIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgT1IgQU5ZIERBTUFHRVMgCi0gICBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gCi0gICBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiAKKyAgIENMQUlNLCBPUiBBTlkgU1BFQ0lBTCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIE9SIEFOWSBEQU1BR0VTCisgICBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAgIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCiAgICBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgogCi0gICBBTEwgTElBQklMSVRZLCBJTkNMVURJTkcgTElBQklMSVRZIEZPUiBJTkZSSU5HRU1FTlQgT0YgQU5ZIFBBVEVOVFMsIAotICAgQ09QWVJJR0hUUywgVFJBREVNQVJLUyBPUiBPVEhFUiBSSUdIVFMsIFJFTEFUSU5HIFRPIFVTRSBPRiBUSElTIAorICAgQUxMIExJQUJJTElUWSwgSU5DTFVESU5HIExJQUJJTElUWSBGT1IgSU5GUklOR0VNRU5UIE9GIEFOWSBQQVRFTlRTLAorICAgQ09QWVJJR0hUUywgVFJBREVNQVJLUyBPUiBPVEhFUiBSSUdIVFMsIFJFTEFUSU5HIFRPIFVTRSBPRiBUSElTCiAgICBTT0ZUV0FSRSBJUyBESVNDTEFJTUVELgogKi8KIApAQCAtMTA1LDcgKzEwNSw3IEBACiBzdHJ1Y3QgcmZjb21tX2hkciB7CiAJdTggYWRkcjsKIAl1OCBjdHJsOwotCXU4IGxlbjsgICAgLy8gQWN0dWFsIHNpemUgY2FuIGJlIDIgYnl0ZXMKKwl1OCBsZW47ICAgIC8qIEFjdHVhbCBzaXplIGNhbiBiZSAyIGJ5dGVzICovCiB9IF9fcGFja2VkOwogCiBzdHJ1Y3QgcmZjb21tX2NtZCB7CkBAIC0yMjgsNyArMjI4LDcgQEAKIC8qIC0tLS0gUkZDT01NIFNFTkQgUlBOIC0tLS0gKi8KIGludCByZmNvbW1fc2VuZF9ycG4oc3RydWN0IHJmY29tbV9zZXNzaW9uICpzLCBpbnQgY3IsIHU4IGRsY2ksCiAJCQl1OCBiaXRfcmF0ZSwgdTggZGF0YV9iaXRzLCB1OCBzdG9wX2JpdHMsCi0JCQl1OCBwYXJpdHksIHU4IGZsb3dfY3RybF9zZXR0aW5ncywgCisJCQl1OCBwYXJpdHksIHU4IGZsb3dfY3RybF9zZXR0aW5ncywKIAkJCXU4IHhvbl9jaGFyLCB1OCB4b2ZmX2NoYXIsIHUxNiBwYXJhbV9tYXNrKTsKIAogLyogLS0tLSBSRkNPTU0gRExDcyAoY2hhbm5lbHMpIC0tLS0gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9zY28uaCBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9zY28uaAppbmRleCBlMjhhMmE3Li4xZTM1YzQzIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvc2NvLmgKKysrIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL3Njby5oCkBAIC0xLDQgKzEsNCBAQAotLyogCisvKgogICAgQmx1ZVogLSBCbHVldG9vdGggcHJvdG9jb2wgc3RhY2sgZm9yIExpbnV4CiAgICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMSBRdWFsY29tbSBJbmNvcnBvcmF0ZWQKIApAQCAtMTIsMTMgKzEyLDEzIEBACiAgICBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKICAgIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQgT0YgVEhJUkQgUEFSVFkgUklHSFRTLgogICAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIoUykgQU5EIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWQotICAgQ0xBSU0sIE9SIEFOWSBTUEVDSUFMIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgT1IgQU5ZIERBTUFHRVMgCi0gICBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gCi0gICBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiAKKyAgIENMQUlNLCBPUiBBTlkgU1BFQ0lBTCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIE9SIEFOWSBEQU1BR0VTCisgICBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAgIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCiAgICBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgogCi0gICBBTEwgTElBQklMSVRZLCBJTkNMVURJTkcgTElBQklMSVRZIEZPUiBJTkZSSU5HRU1FTlQgT0YgQU5ZIFBBVEVOVFMsIAotICAgQ09QWVJJR0hUUywgVFJBREVNQVJLUyBPUiBPVEhFUiBSSUdIVFMsIFJFTEFUSU5HIFRPIFVTRSBPRiBUSElTIAorICAgQUxMIExJQUJJTElUWSwgSU5DTFVESU5HIExJQUJJTElUWSBGT1IgSU5GUklOR0VNRU5UIE9GIEFOWSBQQVRFTlRTLAorICAgQ09QWVJJR0hUUywgVFJBREVNQVJLUyBPUiBPVEhFUiBSSUdIVFMsIFJFTEFUSU5HIFRPIFVTRSBPRiBUSElTCiAgICBTT0ZUV0FSRSBJUyBESVNDTEFJTUVELgogKi8KIApAQCAtNTUsMTEgKzU1LDExIEBACiBzdHJ1Y3Qgc2NvX2Nvbm4gewogCXN0cnVjdCBoY2lfY29ubgkqaGNvbjsKIAotCWJkYWRkcl90IAkqZHN0OwotCWJkYWRkcl90IAkqc3JjOwotCQorCWJkYWRkcl90CSpkc3Q7CisJYmRhZGRyX3QJKnNyYzsKKwogCXNwaW5sb2NrX3QJbG9jazsKLQlzdHJ1Y3Qgc29jayAJKnNrOworCXN0cnVjdCBzb2NrCSpzazsKIAogCXVuc2lnbmVkIGludCAgICBtdHU7CiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvY2FpZi9jZmN0cmwuaCBiL2luY2x1ZGUvbmV0L2NhaWYvY2ZjdHJsLmgKaW5kZXggOTQwMjU0My4uZTU0ZjYzOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvY2FpZi9jZmN0cmwuaAorKysgYi9pbmNsdWRlL25ldC9jYWlmL2NmY3RybC5oCkBAIC01MSw3ICs1MSw3IEBACiAJdm9pZCAoKnJlc3RhcnRfcnNwKSh2b2lkKTsKIAl2b2lkICgqcmFkaW9zZXRfcnNwKSh2b2lkKTsKIAl2b2lkICgqcmVqZWN0X3JzcCkoc3RydWN0IGNmbGF5ZXIgKmxheWVyLCB1OCBsaW5raWQsCi0JCQkJc3RydWN0IGNmbGF5ZXIgKmNsaWVudF9sYXllcik7OworCQkJCXN0cnVjdCBjZmxheWVyICpjbGllbnRfbGF5ZXIpOwogfTsKIAogLyogTGluayBTZXR1cCBQYXJhbWV0ZXJzIGZvciBDQUlGLUxpbmtzLiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaCBiL2luY2x1ZGUvbmV0L2NmZzgwMjExLmgKaW5kZXggOTdiOGI3Yy4uYmNjOWY0NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaAorKysgYi9pbmNsdWRlL25ldC9jZmc4MDIxMS5oCkBAIC0yNTgsMTMgKzI1OCw5IEBACiAKIC8qKgogICogc3RydWN0IHZpZl9wYXJhbXMgLSBkZXNjcmliZXMgdmlydHVhbCBpbnRlcmZhY2UgcGFyYW1ldGVycwotICogQG1lc2hfaWQ6IG1lc2ggSUQgdG8gdXNlCi0gKiBAbWVzaF9pZF9sZW46IGxlbmd0aCBvZiB0aGUgbWVzaCBJRAogICogQHVzZV80YWRkcjogdXNlIDQtYWRkcmVzcyBmcmFtZXMKICAqLwogc3RydWN0IHZpZl9wYXJhbXMgewotICAgICAgIHU4ICptZXNoX2lkOwotICAgICAgIGludCBtZXNoX2lkX2xlbjsKICAgICAgICBpbnQgdXNlXzRhZGRyOwogfTsKIApAQCAtNDI0LDYgKzQyMCw3IEBACiAgKiBAU1RBVElPTl9JTkZPX1RYX1JFVFJJRVM6IEB0eF9yZXRyaWVzIGZpbGxlZAogICogQFNUQVRJT05fSU5GT19UWF9GQUlMRUQ6IEB0eF9mYWlsZWQgZmlsbGVkCiAgKiBAU1RBVElPTl9JTkZPX1JYX0RST1BfTUlTQzogQHJ4X2Ryb3BwZWRfbWlzYyBmaWxsZWQKKyAqIEBTVEFUSU9OX0lORk9fU0lHTkFMX0FWRzogQHNpZ25hbF9hdmcgZmlsbGVkCiAgKi8KIGVudW0gc3RhdGlvbl9pbmZvX2ZsYWdzIHsKIAlTVEFUSU9OX0lORk9fSU5BQ1RJVkVfVElNRQk9IDE8PDAsCkBAIC00MzksNiArNDM2LDcgQEAKIAlTVEFUSU9OX0lORk9fVFhfUkVUUklFUwkJPSAxPDwxMCwKIAlTVEFUSU9OX0lORk9fVFhfRkFJTEVECQk9IDE8PDExLAogCVNUQVRJT05fSU5GT19SWF9EUk9QX01JU0MJPSAxPDwxMiwKKwlTVEFUSU9OX0lORk9fU0lHTkFMX0FWRwkJPSAxPDwxMywKIH07CiAKIC8qKgpAQCAtNDg1LDYgKzQ4Myw3IEBACiAgKiBAcGxpZDogbWVzaCBwZWVyIGxpbmsgaWQKICAqIEBwbGlua19zdGF0ZTogbWVzaCBwZWVyIGxpbmsgc3RhdGUKICAqIEBzaWduYWw6IHNpZ25hbCBzdHJlbmd0aCBvZiBsYXN0IHJlY2VpdmVkIHBhY2tldCBpbiBkQm0KKyAqIEBzaWduYWxfYXZnOiBzaWduYWwgc3RyZW5ndGggYXZlcmFnZSBpbiBkQm0KICAqIEB0eHJhdGU6IGN1cnJlbnQgdW5pY2FzdCBiaXRyYXRlIHRvIHRoaXMgc3RhdGlvbgogICogQHJ4X3BhY2tldHM6IHBhY2tldHMgcmVjZWl2ZWQgZnJvbSB0aGlzIHN0YXRpb24KICAqIEB0eF9wYWNrZXRzOiBwYWNrZXRzIHRyYW5zbWl0dGVkIHRvIHRoaXMgc3RhdGlvbgpAQCAtNTA1LDYgKzUwNCw3IEBACiAJdTE2IHBsaWQ7CiAJdTggcGxpbmtfc3RhdGU7CiAJczggc2lnbmFsOworCXM4IHNpZ25hbF9hdmc7CiAJc3RydWN0IHJhdGVfaW5mbyB0eHJhdGU7CiAJdTMyIHJ4X3BhY2tldHM7CiAJdTMyIHR4X3BhY2tldHM7CkBAIC02MDUsNiArNjA1LDggQEAKICAqCShvciBOVUxMIGZvciBubyBjaGFuZ2UpCiAgKiBAYmFzaWNfcmF0ZXNfbGVuOiBudW1iZXIgb2YgYmFzaWMgcmF0ZXMKICAqIEBhcF9pc29sYXRlOiBkbyBub3QgZm9yd2FyZCBwYWNrZXRzIGJldHdlZW4gY29ubmVjdGVkIHN0YXRpb25zCisgKiBAaHRfb3Btb2RlOiBIVCBPcGVyYXRpb24gbW9kZQorICogCSh1MTYgPSBvcG1vZGUsIC0xID0gZG8gbm90IGNoYW5nZSkKICAqLwogc3RydWN0IGJzc19wYXJhbWV0ZXJzIHsKIAlpbnQgdXNlX2N0c19wcm90OwpAQCAtNjEzLDggKzYxNSwxNCBAQAogCXU4ICpiYXNpY19yYXRlczsKIAl1OCBiYXNpY19yYXRlc19sZW47CiAJaW50IGFwX2lzb2xhdGU7CisJaW50IGh0X29wbW9kZTsKIH07CiAKKy8qCisgKiBzdHJ1Y3QgbWVzaF9jb25maWcgLSA4MDIuMTFzIG1lc2ggY29uZmlndXJhdGlvbgorICoKKyAqIFRoZXNlIHBhcmFtZXRlcnMgY2FuIGJlIGNoYW5nZWQgd2hpbGUgdGhlIG1lc2ggaXMgYWN0aXZlLgorICovCiBzdHJ1Y3QgbWVzaF9jb25maWcgewogCS8qIFRpbWVvdXRzIGluIG1zICovCiAJLyogTWVzaCBwbGluayBtYW5hZ2VtZW50IHBhcmFtZXRlcnMgKi8KQEAgLTYyNCw2ICs2MzIsOCBAQAogCXUxNiBkb3QxMU1lc2hNYXhQZWVyTGlua3M7CiAJdTggIGRvdDExTWVzaE1heFJldHJpZXM7CiAJdTggIGRvdDExTWVzaFRUTDsKKwkvKiB0dGwgdXNlZCBpbiBwYXRoIHNlbGVjdGlvbiBpbmZvcm1hdGlvbiBlbGVtZW50cyAqLworCXU4ICBlbGVtZW50X3R0bDsKIAlib29sIGF1dG9fb3Blbl9wbGlua3M7CiAJLyogSFdNUCBwYXJhbWV0ZXJzICovCiAJdTggIGRvdDExTWVzaEhXTVBtYXhQUkVRcmV0cmllczsKQEAgLTYzNiw2ICs2NDYsMjYgQEAKIH07CiAKIC8qKgorICogc3RydWN0IG1lc2hfc2V0dXAgLSA4MDIuMTFzIG1lc2ggc2V0dXAgY29uZmlndXJhdGlvbgorICogQG1lc2hfaWQ6IHRoZSBtZXNoIElECisgKiBAbWVzaF9pZF9sZW46IGxlbmd0aCBvZiB0aGUgbWVzaCBJRCwgYXQgbGVhc3QgMSBhbmQgYXQgbW9zdCAzMiBieXRlcworICogQHBhdGhfc2VsX3Byb3RvOiB3aGljaCBwYXRoIHNlbGVjdGlvbiBwcm90b2NvbCB0byB1c2UKKyAqIEBwYXRoX21ldHJpYzogd2hpY2ggbWV0cmljIHRvIHVzZQorICogQHZlbmRvcl9pZTogdmVuZG9yIGluZm9ybWF0aW9uIGVsZW1lbnRzIChvcHRpb25hbCkKKyAqIEB2ZW5kb3JfaWVfbGVuOiBsZW5ndGggb2YgdmVuZG9yIGluZm9ybWF0aW9uIGVsZW1lbnRzCisgKgorICogVGhlc2UgcGFyYW1ldGVycyBhcmUgZml4ZWQgd2hlbiB0aGUgbWVzaCBpcyBjcmVhdGVkLgorICovCitzdHJ1Y3QgbWVzaF9zZXR1cCB7CisJY29uc3QgdTggKm1lc2hfaWQ7CisJdTggbWVzaF9pZF9sZW47CisJdTggIHBhdGhfc2VsX3Byb3RvOworCXU4ICBwYXRoX21ldHJpYzsKKwljb25zdCB1OCAqdmVuZG9yX2llOworCXU4IHZlbmRvcl9pZV9sZW47Cit9OworCisvKioKICAqIHN0cnVjdCBpZWVlODAyMTFfdHhxX3BhcmFtcyAtIFRYIHF1ZXVlIHBhcmFtZXRlcnMKICAqIEBxdWV1ZTogVFggcXVldWUgaWRlbnRpZmllciAoTkw4MDIxMV9UWFFfUV8qKQogICogQHR4b3A6IE1heGltdW0gYnVyc3QgdGltZSBpbiB1bml0cyBvZiAzMiB1c2VjcywgMCBtZWFuaW5nIGRpc2FibGVkCkBAIC05MjMsNiArOTUzLDcgQEAKICAqIEBwcml2YWN5OiB0aGlzIGlzIGEgcHJvdGVjdGVkIG5ldHdvcmssIGtleXMgd2lsbCBiZSBjb25maWd1cmVkCiAgKglhZnRlciBqb2luaW5nCiAgKiBAYmFzaWNfcmF0ZXM6IGJpdG1hcCBvZiBiYXNpYyByYXRlcyB0byB1c2Ugd2hlbiBjcmVhdGluZyB0aGUgSUJTUworICogQG1jYXN0X3JhdGU6IHBlci1iYW5kIG11bHRpY2FzdCByYXRlIGluZGV4ICsgMSAoMDogZGlzYWJsZWQpCiAgKi8KIHN0cnVjdCBjZmc4MDIxMV9pYnNzX3BhcmFtcyB7CiAJdTggKnNzaWQ7CkBAIC05MzQsNiArOTY1LDcgQEAKIAl1MzIgYmFzaWNfcmF0ZXM7CiAJYm9vbCBjaGFubmVsX2ZpeGVkOwogCWJvb2wgcHJpdmFjeTsKKwlpbnQgbWNhc3RfcmF0ZVtJRUVFODAyMTFfTlVNX0JBTkRTXTsKIH07CiAKIC8qKgpAQCAtMTAyOSw3ICsxMDYxLDggQEAKICAqCiAgKiBAYWRkX3ZpcnR1YWxfaW50ZjogY3JlYXRlIGEgbmV3IHZpcnR1YWwgaW50ZXJmYWNlIHdpdGggdGhlIGdpdmVuIG5hbWUsCiAgKgltdXN0IHNldCB0aGUgc3RydWN0IHdpcmVsZXNzX2RldidzIGlmdHlwZS4gQmV3YXJlOiBZb3UgbXVzdCBjcmVhdGUKLSAqCXRoZSBuZXcgbmV0ZGV2IGluIHRoZSB3aXBoeSdzIG5ldHdvcmsgbmFtZXNwYWNlIQorICoJdGhlIG5ldyBuZXRkZXYgaW4gdGhlIHdpcGh5J3MgbmV0d29yayBuYW1lc3BhY2UhIFJldHVybnMgdGhlIG5ldGRldiwKKyAqCW9yIGFuIEVSUl9QVFIuCiAgKgogICogQGRlbF92aXJ0dWFsX2ludGY6IHJlbW92ZSB0aGUgdmlydHVhbCBpbnRlcmZhY2UgZGV0ZXJtaW5lZCBieSBpZmluZGV4LgogICoKQEAgLTEwNzEsOSArMTEwNCw5IEBACiAgKiBAZ2V0X21wYXRoOiBnZXQgYSBtZXNoIHBhdGggZm9yIHRoZSBnaXZlbiBwYXJhbWV0ZXJzCiAgKiBAZHVtcF9tcGF0aDogZHVtcCBtZXNoIHBhdGggY2FsbGJhY2sgLS0gcmVzdW1lIGR1bXAgYXQgaW5kZXggQGlkeAogICoKLSAqIEBnZXRfbWVzaF9wYXJhbXM6IFB1dCB0aGUgY3VycmVudCBtZXNoIHBhcmFtZXRlcnMgaW50byAqcGFyYW1zCisgKiBAZ2V0X21lc2hfY29uZmlnOiBHZXQgdGhlIGN1cnJlbnQgbWVzaCBjb25maWd1cmF0aW9uCiAgKgotICogQHNldF9tZXNoX3BhcmFtczogU2V0IG1lc2ggcGFyYW1ldGVycy4KKyAqIEB1cGRhdGVfbWVzaF9jb25maWc6IFVwZGF0ZSBtZXNoIHBhcmFtZXRlcnMgb24gYSBydW5uaW5nIG1lc2guCiAgKglUaGUgbWFzayBpcyBhIGJpdGZpZWxkIHdoaWNoIHRlbGxzIHVzIHdoaWNoIHBhcmFtZXRlcnMgdG8KICAqCXNldCwgYW5kIHdoaWNoIHRvIGxlYXZlIGFsb25lLgogICoKQEAgLTExMzIsNyArMTE2NSw5IEBACiAgKiBAY2FuY2VsX3JlbWFpbl9vbl9jaGFubmVsOiBDYW5jZWwgYW4gb24tZ29pbmcgcmVtYWluLW9uLWNoYW5uZWwgb3BlcmF0aW9uLgogICoJVGhpcyBhbGxvd3MgdGhlIG9wZXJhdGlvbiB0byBiZSB0ZXJtaW5hdGVkIHByaW9yIHRvIHRpbWVvdXQgYmFzZWQgb24KICAqCXRoZSBkdXJhdGlvbiB2YWx1ZS4KLSAqIEBtZ210X3R4OiBUcmFuc21pdCBhIG1hbmFnZW1lbnQgZnJhbWUKKyAqIEBtZ210X3R4OiBUcmFuc21pdCBhIG1hbmFnZW1lbnQgZnJhbWUuCisgKiBAbWdtdF90eF9jYW5jZWxfd2FpdDogQ2FuY2VsIHRoZSB3YWl0IHRpbWUgZnJvbSB0cmFuc21pdHRpbmcgYSBtYW5hZ2VtZW50CisgKglmcmFtZSBvbiBhbm90aGVyIGNoYW5uZWwKICAqCiAgKiBAdGVzdG1vZGVfY21kOiBydW4gYSB0ZXN0IG1vZGUgY29tbWFuZAogICoKQEAgLTExNTAsMTQgKzExODUsMjMgQEAKICAqIEBtZ210X2ZyYW1lX3JlZ2lzdGVyOiBOb3RpZnkgZHJpdmVyIHRoYXQgYSBtYW5hZ2VtZW50IGZyYW1lIHR5cGUgd2FzCiAgKglyZWdpc3RlcmVkLiBOb3RlIHRoYXQgdGhpcyBjYWxsYmFjayBtYXkgbm90IHNsZWVwLCBhbmQgY2Fubm90IHJ1bgogICoJY29uY3VycmVudGx5IHdpdGggaXRzZWxmLgorICoKKyAqIEBzZXRfYW50ZW5uYTogU2V0IGFudGVubmEgY29uZmlndXJhdGlvbiAodHhfYW50LCByeF9hbnQpIG9uIHRoZSBkZXZpY2UuCisgKglQYXJhbWV0ZXJzIGFyZSBiaXRtYXBzIG9mIGFsbG93ZWQgYW50ZW5uYXMgdG8gdXNlIGZvciBUWC9SWC4gRHJpdmVycyBtYXkKKyAqCXJlamVjdCBUWC9SWCBtYXNrIGNvbWJpbmF0aW9ucyB0aGV5IGNhbm5vdCBzdXBwb3J0IGJ5IHJldHVybmluZyAtRUlOVkFMCisgKgkoYWxzbyBzZWUgbmw4MDIxMS5oIEBOTDgwMjExX0FUVFJfV0lQSFlfQU5URU5OQV9UWCkuCisgKgorICogQGdldF9hbnRlbm5hOiBHZXQgY3VycmVudCBhbnRlbm5hIGNvbmZpZ3VyYXRpb24gZnJvbSBkZXZpY2UgKHR4X2FudCwgcnhfYW50KS4KICAqLwogc3RydWN0IGNmZzgwMjExX29wcyB7CiAJaW50CSgqc3VzcGVuZCkoc3RydWN0IHdpcGh5ICp3aXBoeSk7CiAJaW50CSgqcmVzdW1lKShzdHJ1Y3Qgd2lwaHkgKndpcGh5KTsKIAotCWludAkoKmFkZF92aXJ0dWFsX2ludGYpKHN0cnVjdCB3aXBoeSAqd2lwaHksIGNoYXIgKm5hbWUsCi0JCQkJICAgIGVudW0gbmw4MDIxMV9pZnR5cGUgdHlwZSwgdTMyICpmbGFncywKLQkJCQkgICAgc3RydWN0IHZpZl9wYXJhbXMgKnBhcmFtcyk7CisJc3RydWN0IG5ldF9kZXZpY2UgKiAoKmFkZF92aXJ0dWFsX2ludGYpKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkJCQljaGFyICpuYW1lLAorCQkJCQkJZW51bSBubDgwMjExX2lmdHlwZSB0eXBlLAorCQkJCQkJdTMyICpmbGFncywKKwkJCQkJCXN0cnVjdCB2aWZfcGFyYW1zICpwYXJhbXMpOwogCWludAkoKmRlbF92aXJ0dWFsX2ludGYpKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCWludAkoKmNoYW5nZV92aXJ0dWFsX2ludGYpKHN0cnVjdCB3aXBoeSAqd2lwaHksCiAJCQkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCkBAIC0xMTc1LDcgKzEyMTksNyBAQAogCQkJICAgdTgga2V5X2luZGV4LCBib29sIHBhaXJ3aXNlLCBjb25zdCB1OCAqbWFjX2FkZHIpOwogCWludAkoKnNldF9kZWZhdWx0X2tleSkoc3RydWN0IHdpcGh5ICp3aXBoeSwKIAkJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAotCQkJCSAgIHU4IGtleV9pbmRleCk7CisJCQkJICAgdTgga2V5X2luZGV4LCBib29sIHVuaWNhc3QsIGJvb2wgbXVsdGljYXN0KTsKIAlpbnQJKCpzZXRfZGVmYXVsdF9tZ210X2tleSkoc3RydWN0IHdpcGh5ICp3aXBoeSwKIAkJCQkJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAkJCQkJdTgga2V5X2luZGV4KTsKQEAgLTEyMTAsMTIgKzEyNTQsMTcgQEAKIAlpbnQJKCpkdW1wX21wYXRoKShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJICAgICAgIGludCBpZHgsIHU4ICpkc3QsIHU4ICpuZXh0X2hvcCwKIAkJCSAgICAgICBzdHJ1Y3QgbXBhdGhfaW5mbyAqcGluZm8pOwotCWludAkoKmdldF9tZXNoX3BhcmFtcykoc3RydWN0IHdpcGh5ICp3aXBoeSwKKwlpbnQJKCpnZXRfbWVzaF9jb25maWcpKHN0cnVjdCB3aXBoeSAqd2lwaHksCiAJCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQlzdHJ1Y3QgbWVzaF9jb25maWcgKmNvbmYpOwotCWludAkoKnNldF9tZXNoX3BhcmFtcykoc3RydWN0IHdpcGh5ICp3aXBoeSwKLQkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCWNvbnN0IHN0cnVjdCBtZXNoX2NvbmZpZyAqbmNvbmYsIHUzMiBtYXNrKTsKKwlpbnQJKCp1cGRhdGVfbWVzaF9jb25maWcpKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkJICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIG1hc2ssCisJCQkJICAgICAgY29uc3Qgc3RydWN0IG1lc2hfY29uZmlnICpuY29uZik7CisJaW50CSgqam9pbl9tZXNoKShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgICBjb25zdCBzdHJ1Y3QgbWVzaF9jb25maWcgKmNvbmYsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBtZXNoX3NldHVwICpzZXR1cCk7CisJaW50CSgqbGVhdmVfbWVzaCkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisKIAlpbnQJKCpjaGFuZ2VfYnNzKShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJICAgICAgc3RydWN0IGJzc19wYXJhbWV0ZXJzICpwYXJhbXMpOwogCkBAIC0xMjg5LDEwICsxMzM4LDEzIEBACiAJCQkJCSAgICB1NjQgY29va2llKTsKIAogCWludAkoKm1nbXRfdHgpKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbiwKKwkJCSAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuLCBib29sIG9mZmNoYW4sCiAJCQkgIGVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgY2hhbm5lbF90eXBlLAotCQkJICBib29sIGNoYW5uZWxfdHlwZV92YWxpZCwKKwkJCSAgYm9vbCBjaGFubmVsX3R5cGVfdmFsaWQsIHVuc2lnbmVkIGludCB3YWl0LAogCQkJICBjb25zdCB1OCAqYnVmLCBzaXplX3QgbGVuLCB1NjQgKmNvb2tpZSk7CisJaW50CSgqbWdtdF90eF9jYW5jZWxfd2FpdCkoc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICAgICAgdTY0IGNvb2tpZSk7CiAKIAlpbnQJKCpzZXRfcG93ZXJfbWdtdCkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkgIGJvb2wgZW5hYmxlZCwgaW50IHRpbWVvdXQpOwpAQCAtMTMwNCw2ICsxMzU2LDkgQEAKIAl2b2lkCSgqbWdtdF9mcmFtZV9yZWdpc3Rlcikoc3RydWN0IHdpcGh5ICp3aXBoeSwKIAkJCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkgICAgICAgdTE2IGZyYW1lX3R5cGUsIGJvb2wgcmVnKTsKKworCWludAkoKnNldF9hbnRlbm5hKShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCB1MzIgdHhfYW50LCB1MzIgcnhfYW50KTsKKwlpbnQJKCpnZXRfYW50ZW5uYSkoc3RydWN0IHdpcGh5ICp3aXBoeSwgdTMyICp0eF9hbnQsIHUzMiAqcnhfYW50KTsKIH07CiAKIC8qCkBAIC0xMzIxLDEzICsxMzc2LDE0IEBACiAgKiAJaW5pdGlhdG9yIGlzICVSRUdET01fU0VUX0JZX0NPUkUpLgogICogQFdJUEhZX0ZMQUdfU1RSSUNUX1JFR1VMQVRPUlk6IHRlbGxzIHVzIHRoZSBkcml2ZXIgZm9yIHRoaXMgZGV2aWNlIHdpbGwKICAqCWlnbm9yZSByZWd1bGF0b3J5IGRvbWFpbiBzZXR0aW5ncyB1bnRpbCBpdCBnZXRzIGl0cyBvd24gcmVndWxhdG9yeQotICoJZG9tYWluIHZpYSBpdHMgcmVndWxhdG9yeV9oaW50KCkuIEFmdGVyIGl0cyBnZXRzIGl0cyBvd24gcmVndWxhdG9yeQotICoJZG9tYWluIGl0IHdpbGwgb25seSBhbGxvdyBmdXJ0aGVyIHJlZ3VsYXRvcnkgZG9tYWluIHNldHRpbmdzIHRvCi0gKglmdXJ0aGVyIGVuaGFuY2UgY29tcGxpYW5jZS4gRm9yIGV4YW1wbGUgaWYgY2hhbm5lbCAxMyBhbmQgMTQgYXJlCi0gKglkaXNhYmxlZCBieSB0aGlzIHJlZ3VsYXRvcnkgZG9tYWluIG5vIHVzZXIgcmVndWxhdG9yeSBkb21haW4gY2FuCi0gKgllbmFibGUgdGhlc2UgY2hhbm5lbHMgYXQgYSBsYXRlciB0aW1lLiBUaGlzIGNhbiBiZSB1c2VkIGZvciBkZXZpY2VzCi0gKgl3aGljaCBkbyBub3QgaGF2ZSBjYWxpYnJhdGlvbiBpbmZvcm1hdGlvbiBnYXVyYW50ZWVkIGZvciBmcmVxdWVuY2llcwotICoJb3Igc2V0dGluZ3Mgb3V0c2lkZSBvZiBpdHMgcmVndWxhdG9yeSBkb21haW4uCisgKglkb21haW4gdmlhIGl0cyByZWd1bGF0b3J5X2hpbnQoKSB1bmxlc3MgdGhlIHJlZ3VsYXRvcnkgaGludCBpcworICoJZnJvbSBhIGNvdW50cnkgSUUuIEFmdGVyIGl0cyBnZXRzIGl0cyBvd24gcmVndWxhdG9yeSBkb21haW4gaXQgd2lsbAorICoJb25seSBhbGxvdyBmdXJ0aGVyIHJlZ3VsYXRvcnkgZG9tYWluIHNldHRpbmdzIHRvIGZ1cnRoZXIgZW5oYW5jZQorICoJY29tcGxpYW5jZS4gRm9yIGV4YW1wbGUgaWYgY2hhbm5lbCAxMyBhbmQgMTQgYXJlIGRpc2FibGVkIGJ5IHRoaXMKKyAqCXJlZ3VsYXRvcnkgZG9tYWluIG5vIHVzZXIgcmVndWxhdG9yeSBkb21haW4gY2FuIGVuYWJsZSB0aGVzZSBjaGFubmVscworICoJYXQgYSBsYXRlciB0aW1lLiBUaGlzIGNhbiBiZSB1c2VkIGZvciBkZXZpY2VzIHdoaWNoIGRvIG5vdCBoYXZlCisgKgljYWxpYnJhdGlvbiBpbmZvcm1hdGlvbiBndWFyYW50ZWVkIGZvciBmcmVxdWVuY2llcyBvciBzZXR0aW5ncworICoJb3V0c2lkZSBvZiBpdHMgcmVndWxhdG9yeSBkb21haW4uCiAgKiBAV0lQSFlfRkxBR19ESVNBQkxFX0JFQUNPTl9ISU5UUzogZW5hYmxlIHRoaXMgaWYgeW91ciBkcml2ZXIgbmVlZHMgdG8gZW5zdXJlCiAgKgl0aGF0IHBhc3NpdmUgc2NhbiBmbGFncyBhbmQgYmVhY29uaW5nIGZsYWdzIG1heSBub3QgYmUgbGlmdGVkIGJ5CiAgKgljZmc4MDIxMSBkdWUgdG8gcmVndWxhdG9yeSBiZWFjb24gaGludHMuIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGJlYWNvbgpAQCAtMTM0NSw2ICsxNDAxLDggQEAKICAqCWNvbnRyb2wgcG9ydCBwcm90b2NvbCBldGhlcnR5cGUuIFRoZSBkZXZpY2UgYWxzbyBob25vdXJzIHRoZQogICoJY29udHJvbF9wb3J0X25vX2VuY3J5cHQgZmxhZy4KICAqIEBXSVBIWV9GTEFHX0lCU1NfUlNOOiBUaGUgZGV2aWNlIHN1cHBvcnRzIElCU1MgUlNOLgorICogQFdJUEhZX0ZMQUdfU1VQUE9SVFNfU0VQQVJBVEVfREVGQVVMVF9LRVlTOiBUaGUgZGV2aWNlIHN1cHBvcnRzIHNlcGFyYXRlCisgKgl1bmljYXN0IGFuZCBtdWx0aWNhc3QgVFgga2V5cy4KICAqLwogZW51bSB3aXBoeV9mbGFncyB7CiAJV0lQSFlfRkxBR19DVVNUT01fUkVHVUxBVE9SWQkJPSBCSVQoMCksCkBAIC0xMzU2LDYgKzE0MTQsNyBAQAogCVdJUEhZX0ZMQUdfNEFERFJfU1RBVElPTgkJPSBCSVQoNiksCiAJV0lQSFlfRkxBR19DT05UUk9MX1BPUlRfUFJPVE9DT0wJPSBCSVQoNyksCiAJV0lQSFlfRkxBR19JQlNTX1JTTgkJCT0gQklUKDgpLAorCVdJUEhZX0ZMQUdfU1VQUE9SVFNfU0VQQVJBVEVfREVGQVVMVF9LRVlTPSBCSVQoOSksCiB9OwogCiBzdHJ1Y3QgbWFjX2FkZHJlc3MgewpAQCAtMTM2OCw3ICsxNDI3LDkgQEAKIAogLyoqCiAgKiBzdHJ1Y3Qgd2lwaHkgLSB3aXJlbGVzcyBoYXJkd2FyZSBkZXNjcmlwdGlvbgotICogQHJlZ19ub3RpZmllcjogdGhlIGRyaXZlcidzIHJlZ3VsYXRvcnkgbm90aWZpY2F0aW9uIGNhbGxiYWNrCisgKiBAcmVnX25vdGlmaWVyOiB0aGUgZHJpdmVyJ3MgcmVndWxhdG9yeSBub3RpZmljYXRpb24gY2FsbGJhY2ssCisgKglub3RlIHRoYXQgaWYgeW91ciBkcml2ZXIgdXNlcyB3aXBoeV9hcHBseV9jdXN0b21fcmVndWxhdG9yeSgpCisgKgl0aGUgcmVnX25vdGlmaWVyJ3MgcmVxdWVzdCBjYW4gYmUgcGFzc2VkIGFzIE5VTEwKICAqIEByZWdkOiB0aGUgZHJpdmVyJ3MgcmVndWxhdG9yeSBkb21haW4sIGlmIG9uZSB3YXMgcmVxdWVzdGVkIHZpYQogICogCXRoZSByZWd1bGF0b3J5X2hpbnQoKSBBUEkuIFRoaXMgY2FuIGJlIHVzZWQgYnkgdGhlIGRyaXZlcgogICoJb24gdGhlIHJlZ19ub3RpZmllcigpIGlmIGl0IGNob29zZXMgdG8gaWdub3JlIGZ1dHVyZQpAQCAtMTQyMCw2ICsxNDgxLDE3IEBACiAgKiBAbWdtdF9zdHlwZXM6IGJpdG1hc2tzIG9mIGZyYW1lIHN1YnR5cGVzIHRoYXQgY2FuIGJlIHN1YnNjcmliZWQgdG8gb3IKICAqCXRyYW5zbWl0dGVkIHRocm91Z2ggbmw4MDIxMSwgcG9pbnRzIHRvIGFuIGFycmF5IGluZGV4ZWQgYnkgaW50ZXJmYWNlCiAgKgl0eXBlCisgKgorICogQGF2YWlsYWJsZV9hbnRlbm5hc190eDogYml0bWFwIG9mIGFudGVubmFzIHdoaWNoIGFyZSBhdmFpbGFibGUgdG8gYmUKKyAqCWNvbmZpZ3VyZWQgYXMgVFggYW50ZW5uYXMuIEFudGVubmEgY29uZmlndXJhdGlvbiBjb21tYW5kcyB3aWxsIGJlCisgKglyZWplY3RlZCB1bmxlc3MgdGhpcyBvciBAYXZhaWxhYmxlX2FudGVubmFzX3J4IGlzIHNldC4KKyAqCisgKiBAYXZhaWxhYmxlX2FudGVubmFzX3J4OiBiaXRtYXAgb2YgYW50ZW5uYXMgd2hpY2ggYXJlIGF2YWlsYWJsZSB0byBiZQorICoJY29uZmlndXJlZCBhcyBSWCBhbnRlbm5hcy4gQW50ZW5uYSBjb25maWd1cmF0aW9uIGNvbW1hbmRzIHdpbGwgYmUKKyAqCXJlamVjdGVkIHVubGVzcyB0aGlzIG9yIEBhdmFpbGFibGVfYW50ZW5uYXNfdHggaXMgc2V0LgorICoKKyAqIEBtYXhfcmVtYWluX29uX2NoYW5uZWxfZHVyYXRpb246IE1heGltdW0gdGltZSBhIHJlbWFpbi1vbi1jaGFubmVsIG9wZXJhdGlvbgorICoJbWF5IHJlcXVlc3QsIGlmIGltcGxlbWVudGVkLgogICovCiBzdHJ1Y3Qgd2lwaHkgewogCS8qIGFzc2lnbiB0aGVzZSBmaWVsZHMgYmVmb3JlIHlvdSByZWdpc3RlciB0aGUgd2lwaHkgKi8KQEAgLTE0NTcsOCArMTUyOSwxMyBAQAogCWNoYXIgZndfdmVyc2lvbltFVEhUT09MX0JVU0lORk9fTEVOXTsKIAl1MzIgaHdfdmVyc2lvbjsKIAorCXUxNiBtYXhfcmVtYWluX29uX2NoYW5uZWxfZHVyYXRpb247CisKIAl1OCBtYXhfbnVtX3Bta2lkczsKIAorCXUzMiBhdmFpbGFibGVfYW50ZW5uYXNfdHg7CisJdTMyIGF2YWlsYWJsZV9hbnRlbm5hc19yeDsKKwogCS8qIElmIG11bHRpcGxlIHdpcGh5cyBhcmUgcmVnaXN0ZXJlZCBhbmQgeW91J3JlIGhhbmRlZCBlLmcuCiAJICogYSByZWd1bGFyIG5ldGRldiB3aXRoIGFzc2lnbmVkIGllZWU4MDIxMV9wdHIsIHlvdSB3b24ndAogCSAqIGtub3cgd2hldGhlciBpdCBwb2ludHMgdG8gYSB3aXBoeSB5b3VyIGRyaXZlciBoYXMgcmVnaXN0ZXJlZApAQCAtMTYyNCw2ICsxNzAxLDggQEAKICAqIEBic3NpZDogKHByaXZhdGUpIFVzZWQgYnkgdGhlIGludGVybmFsIGNvbmZpZ3VyYXRpb24gY29kZQogICogQHNzaWQ6IChwcml2YXRlKSBVc2VkIGJ5IHRoZSBpbnRlcm5hbCBjb25maWd1cmF0aW9uIGNvZGUKICAqIEBzc2lkX2xlbjogKHByaXZhdGUpIFVzZWQgYnkgdGhlIGludGVybmFsIGNvbmZpZ3VyYXRpb24gY29kZQorICogQG1lc2hfaWRfbGVuOiAocHJpdmF0ZSkgVXNlZCBieSB0aGUgaW50ZXJuYWwgY29uZmlndXJhdGlvbiBjb2RlCisgKiBAbWVzaF9pZF91cF9sZW46IChwcml2YXRlKSBVc2VkIGJ5IHRoZSBpbnRlcm5hbCBjb25maWd1cmF0aW9uIGNvZGUKICAqIEB3ZXh0OiAocHJpdmF0ZSkgVXNlZCBieSB0aGUgaW50ZXJuYWwgd2lyZWxlc3MgZXh0ZW5zaW9ucyBjb21wYXQgY29kZQogICogQHVzZV80YWRkcjogaW5kaWNhdGVzIDRhZGRyIG1vZGUgaXMgdXNlZCBvbiB0aGlzIGludGVyZmFjZSwgbXVzdCBiZQogICoJc2V0IGJ5IGRyaXZlciAoaWYgc3VwcG9ydGVkKSBvbiBhZGRfaW50ZXJmYWNlIEJFRk9SRSByZWdpc3RlcmluZyB0aGUKQEAgLTE2NTMsNyArMTczMiw3IEBACiAKIAkvKiBjdXJyZW50bHkgdXNlZCBmb3IgSUJTUyBhbmQgU01FIC0gbWlnaHQgYmUgcmVhcnJhbmdlZCBsYXRlciAqLwogCXU4IHNzaWRbSUVFRTgwMjExX01BWF9TU0lEX0xFTl07Ci0JdTggc3NpZF9sZW47CisJdTggc3NpZF9sZW4sIG1lc2hfaWRfbGVuLCBtZXNoX2lkX3VwX2xlbjsKIAllbnVtIHsKIAkJQ0ZHODAyMTFfU01FX0lETEUsCiAJCUNGRzgwMjExX1NNRV9DT05ORUNUSU5HLApAQCAtMjI5Nyw2ICsyMzc2LDMyIEBACiAJc2l6ZV90IGxlbik7CiAKIC8qKgorICogY2ZnODAyMTFfc2VuZF91bnByb3RfZGVhdXRoIC0gbm90aWZpY2F0aW9uIG9mIHVucHJvdGVjdGVkIGRlYXV0aGVudGljYXRpb24KKyAqIEBkZXY6IG5ldHdvcmsgZGV2aWNlCisgKiBAYnVmOiBkZWF1dGhlbnRpY2F0aW9uIGZyYW1lIChoZWFkZXIgKyBib2R5KQorICogQGxlbjogbGVuZ3RoIG9mIHRoZSBmcmFtZSBkYXRhCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbmV2ZXIgYSByZWNlaXZlZCBEZWF1dGhlbnRpY2F0aW9uIGZyYW1lIGhhcyBiZWVuCisgKiBkcm9wcGVkIGluIHN0YXRpb24gbW9kZSBiZWNhdXNlIG9mIE1GUCBiZWluZyB1c2VkIGJ1dCB0aGUgRGVhdXRoZW50aWNhdGlvbgorICogZnJhbWUgd2FzIG5vdCBwcm90ZWN0ZWQuIFRoaXMgZnVuY3Rpb24gbWF5IHNsZWVwLgorICovCit2b2lkIGNmZzgwMjExX3NlbmRfdW5wcm90X2RlYXV0aChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYnVmLAorCQkJCSBzaXplX3QgbGVuKTsKKworLyoqCisgKiBjZmc4MDIxMV9zZW5kX3VucHJvdF9kaXNhc3NvYyAtIG5vdGlmaWNhdGlvbiBvZiB1bnByb3RlY3RlZCBkaXNhc3NvY2lhdGlvbgorICogQGRldjogbmV0d29yayBkZXZpY2UKKyAqIEBidWY6IGRpc2Fzc29jaWF0aW9uIGZyYW1lIChoZWFkZXIgKyBib2R5KQorICogQGxlbjogbGVuZ3RoIG9mIHRoZSBmcmFtZSBkYXRhCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbmV2ZXIgYSByZWNlaXZlZCBEaXNhc3NvY2lhdGlvbiBmcmFtZSBoYXMgYmVlbgorICogZHJvcHBlZCBpbiBzdGF0aW9uIG1vZGUgYmVjYXVzZSBvZiBNRlAgYmVpbmcgdXNlZCBidXQgdGhlIERpc2Fzc29jaWF0aW9uCisgKiBmcmFtZSB3YXMgbm90IHByb3RlY3RlZC4gVGhpcyBmdW5jdGlvbiBtYXkgc2xlZXAuCisgKi8KK3ZvaWQgY2ZnODAyMTFfc2VuZF91bnByb3RfZGlzYXNzb2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmJ1ZiwKKwkJCQkgICBzaXplX3QgbGVuKTsKKworLyoqCiAgKiBjZmc4MDIxMV9taWNoYWVsX21pY19mYWlsdXJlIC0gbm90aWZpY2F0aW9uIG9mIE1pY2hhZWwgTUlDIGZhaWx1cmUgKFRLSVApCiAgKiBAZGV2OiBuZXR3b3JrIGRldmljZQogICogQGFkZHI6IFRoZSBzb3VyY2UgTUFDIGFkZHJlc3Mgb2YgdGhlIGZyYW1lCkBAIC0yNTk1LDYgKzI3MDAsMTggQEAKIAkJCSAgICAgIGVudW0gbmw4MDIxMV9jcW1fcnNzaV90aHJlc2hvbGRfZXZlbnQgcnNzaV9ldmVudCwKIAkJCSAgICAgIGdmcF90IGdmcCk7CiAKKy8qKgorICogY2ZnODAyMTFfY3FtX3BrdGxvc3Nfbm90aWZ5IC0gbm90aWZ5IHVzZXJzcGFjZSBhYm91dCBwYWNrZXRsb3NzIHRvIHBlZXIKKyAqIEBkZXY6IG5ldHdvcmsgZGV2aWNlCisgKiBAcGVlcjogcGVlcidzIE1BQyBhZGRyZXNzCisgKiBAbnVtX3BhY2tldHM6IGhvdyBtYW55IHBhY2tldHMgd2VyZSBsb3N0IC0tIHNob3VsZCBiZSBhIGZpeGVkIHRocmVzaG9sZAorICoJYnV0IHByb2JhYmx5IG5vIGxlc3MgdGhhbiBtYXliZSA1MCwgb3IgbWF5YmUgYSB0aHJvdWdocHV0IGRlcGVuZGVudAorICoJdGhyZXNob2xkICh0byBhY2NvdW50IGZvciB0ZW1wb3JhcnkgaW50ZXJmZXJlbmNlKQorICogQGdmcDogY29udGV4dCBmbGFncworICovCit2b2lkIGNmZzgwMjExX2NxbV9wa3Rsb3NzX25vdGlmeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSBjb25zdCB1OCAqcGVlciwgdTMyIG51bV9wYWNrZXRzLCBnZnBfdCBnZnApOworCiAvKiBMb2dnaW5nLCBkZWJ1Z2dpbmcgYW5kIHRyb3VibGVzaG9vdGluZy9kaWFnbm9zdGljIGhlbHBlcnMuICovCiAKIC8qIHdpcGh5X3ByaW50ayBoZWxwZXJzLCBzaW1pbGFyIHRvIGRldl9wcmludGsgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2RjYmV2ZW50LmggYi9pbmNsdWRlL25ldC9kY2JldmVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjMWU3ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC9kY2JldmVudC5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEludGVsIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlCisgKiBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQS4KKyAqCisgKiBBdXRob3I6IEpvaG4gRmFzdGFiZW5kIDxqb2huLnIuZmFzdGFiZW5kQGludGVsLmNvbT4KKyAqLworCisjaWZuZGVmIF9EQ0JfRVZFTlRfSAorI2RlZmluZSBfRENCX0VWRU5UX0gKKworZW51bSBkY2JldmVudF9ub3RpZl90eXBlIHsKKwlEQ0JfQVBQX0VWRU5UID0gMSwKK307CisKK2V4dGVybiBpbnQgcmVnaXN0ZXJfZGNiZXZlbnRfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7CitleHRlcm4gaW50IHVucmVnaXN0ZXJfZGNiZXZlbnRfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7CitleHRlcm4gaW50IGNhbGxfZGNiZXZlbnRfbm90aWZpZXJzKHVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICp2KTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9kY2JubC5oIGIvaW5jbHVkZS9uZXQvZGNibmwuaAppbmRleCBiMzZhYzdlLi5hOGU3ODUyIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9kY2JubC5oCisrKyBiL2luY2x1ZGUvbmV0L2RjYm5sLmgKQEAgLTIwLDExICsyMCwzMSBAQAogI2lmbmRlZiBfX05FVF9EQ0JOTF9IX18KICNkZWZpbmUgX19ORVRfRENCTkxfSF9fCiAKKyNpbmNsdWRlIDxsaW51eC9kY2JubC5oPgorCitzdHJ1Y3QgZGNiX2FwcF90eXBlIHsKKwljaGFyCQkgIG5hbWVbSUZOQU1TSVpdOworCXN0cnVjdCBkY2JfYXBwCSAgYXBwOworCXN0cnVjdCBsaXN0X2hlYWQgIGxpc3Q7Cit9OworCit1OCBkY2Jfc2V0YXBwKHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBkY2JfYXBwICopOwordTggZGNiX2dldGFwcChzdHJ1Y3QgbmV0X2RldmljZSAqLCBzdHJ1Y3QgZGNiX2FwcCAqKTsKKwogLyoKICAqIE9wcyBzdHJ1Y3QgZm9yIHRoZSBuZXRsaW5rIGNhbGxiYWNrcy4gIFVzZWQgYnkgRENCLWVuYWJsZWQgZHJpdmVycyB0aHJvdWdoCiAgKiB0aGUgbmV0ZGV2aWNlIHN0cnVjdC4KICAqLwogc3RydWN0IGRjYm5sX3J0bmxfb3BzIHsKKwkvKiBJRUVFIDgwMi4xUWF6IHN0ZCAqLworCWludCAoKmllZWVfZ2V0ZXRzKSAoc3RydWN0IG5ldF9kZXZpY2UgKiwgc3RydWN0IGllZWVfZXRzICopOworCWludCAoKmllZWVfc2V0ZXRzKSAoc3RydWN0IG5ldF9kZXZpY2UgKiwgc3RydWN0IGllZWVfZXRzICopOworCWludCAoKmllZWVfZ2V0cGZjKSAoc3RydWN0IG5ldF9kZXZpY2UgKiwgc3RydWN0IGllZWVfcGZjICopOworCWludCAoKmllZWVfc2V0cGZjKSAoc3RydWN0IG5ldF9kZXZpY2UgKiwgc3RydWN0IGllZWVfcGZjICopOworCWludCAoKmllZWVfZ2V0YXBwKSAoc3RydWN0IG5ldF9kZXZpY2UgKiwgc3RydWN0IGRjYl9hcHAgKik7CisJaW50ICgqaWVlZV9zZXRhcHApIChzdHJ1Y3QgbmV0X2RldmljZSAqLCBzdHJ1Y3QgZGNiX2FwcCAqKTsKKworCS8qIENFRSBzdGQgKi8KIAl1OCAgICgqZ2V0c3RhdGUpKHN0cnVjdCBuZXRfZGV2aWNlICopOwogCXU4ICAgKCpzZXRzdGF0ZSkoc3RydWN0IG5ldF9kZXZpY2UgKiwgdTgpOwogCXZvaWQgKCpnZXRwZXJtaHdhZGRyKShzdHJ1Y3QgbmV0X2RldmljZSAqLCB1OCAqKTsKQEAgLTUwLDYgKzcwLDE0IEBACiAJdm9pZCAoKnNldGJjbnJwKShzdHJ1Y3QgbmV0X2RldmljZSAqLCBpbnQsIHU4KTsKIAl1OCAgICgqc2V0YXBwKShzdHJ1Y3QgbmV0X2RldmljZSAqLCB1OCwgdTE2LCB1OCk7CiAJdTggICAoKmdldGFwcCkoc3RydWN0IG5ldF9kZXZpY2UgKiwgdTgsIHUxNik7CisJdTggICAoKmdldGZlYXRjZmcpKHN0cnVjdCBuZXRfZGV2aWNlICosIGludCwgdTggKik7CisJdTggICAoKnNldGZlYXRjZmcpKHN0cnVjdCBuZXRfZGV2aWNlICosIGludCwgdTgpOworCisJLyogRENCWCBjb25maWd1cmF0aW9uICovCisJdTggICAoKmdldGRjYngpKHN0cnVjdCBuZXRfZGV2aWNlICopOworCXU4ICAgKCpzZXRkY2J4KShzdHJ1Y3QgbmV0X2RldmljZSAqLCB1OCk7CisKKwogfTsKIAogI2VuZGlmIC8qIF9fTkVUX0RDQk5MX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvZG5fZGV2LmggYi9pbmNsdWRlL25ldC9kbl9kZXYuaAppbmRleCAwOTE2YmJmLi5iOWUzMmRiIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9kbl9kZXYuaAorKysgYi9pbmNsdWRlL25ldC9kbl9kZXYuaApAQCAtNSwxMyArNSwxNCBAQAogc3RydWN0IGRuX2RldjsKIAogc3RydWN0IGRuX2lmYWRkciB7Ci0Jc3RydWN0IGRuX2lmYWRkciAqaWZhX25leHQ7CisJc3RydWN0IGRuX2lmYWRkciBfX3JjdSAqaWZhX25leHQ7CiAJc3RydWN0IGRuX2RldiAgICAqaWZhX2RldjsKIAlfX2xlMTYgICAgICAgICAgICBpZmFfbG9jYWw7CiAJX19sZTE2ICAgICAgICAgICAgaWZhX2FkZHJlc3M7CiAJX191OCAgICAgICAgICAgICAgaWZhX2ZsYWdzOwogCV9fdTggICAgICAgICAgICAgIGlmYV9zY29wZTsKIAljaGFyICAgICAgICAgICAgICBpZmFfbGFiZWxbSUZOQU1TSVpdOworCXN0cnVjdCByY3VfaGVhZCAgIHJjdTsKIH07CiAKICNkZWZpbmUgRE5fREVWX1NfUlUgIDAgLyogUnVuIC0gd29ya2luZyBub3JtYWxseSAgICovCkBAIC04Myw3ICs4NCw3IEBACiAKIAogc3RydWN0IGRuX2RldiB7Ci0Jc3RydWN0IGRuX2lmYWRkciAqaWZhX2xpc3Q7CisJc3RydWN0IGRuX2lmYWRkciBfX3JjdSAqaWZhX2xpc3Q7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgZG5fZGV2X3Bhcm1zIHBhcm1zOwogCWNoYXIgdXNlX2xvbmc7CkBAIC0xNzEsMTkgKzE3MiwyNyBAQAogCiBzdGF0aWMgaW5saW5lIGludCBkbl9kZXZfaXNsb2NhbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX2xlMTYgYWRkcikKIHsKLQlzdHJ1Y3QgZG5fZGV2ICpkbl9kYiA9IGRldi0+ZG5fcHRyOworCXN0cnVjdCBkbl9kZXYgKmRuX2RiOwogCXN0cnVjdCBkbl9pZmFkZHIgKmlmYTsKKwlpbnQgcmVzID0gMDsKIAorCXJjdV9yZWFkX2xvY2soKTsKKwlkbl9kYiA9IHJjdV9kZXJlZmVyZW5jZShkZXYtPmRuX3B0cik7CiAJaWYgKGRuX2RiID09IE5VTEwpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgImRuX2Rldl9pc2xvY2FsOiBDYWxsZWQgZm9yIG5vbiBERUNuZXQgZGV2aWNlXG4iKTsKLQkJcmV0dXJuIDA7CisJCWdvdG8gb3V0OwogCX0KIAotCWZvcihpZmEgPSBkbl9kYi0+aWZhX2xpc3Q7IGlmYTsgaWZhID0gaWZhLT5pZmFfbmV4dCkKLQkJaWYgKChhZGRyIF4gaWZhLT5pZmFfbG9jYWwpID09IDApCi0JCQlyZXR1cm4gMTsKLQotCXJldHVybiAwOworCWZvciAoaWZhID0gcmN1X2RlcmVmZXJlbmNlKGRuX2RiLT5pZmFfbGlzdCk7CisJICAgICBpZmEgIT0gTlVMTDsKKwkgICAgIGlmYSA9IHJjdV9kZXJlZmVyZW5jZShpZmEtPmlmYV9uZXh0KSkKKwkJaWYgKChhZGRyIF4gaWZhLT5pZmFfbG9jYWwpID09IDApIHsKKwkJCXJlcyA9IDE7CisJCQlicmVhazsKKwkJfQorb3V0OgorCXJjdV9yZWFkX3VubG9jaygpOworCXJldHVybiByZXM7CiB9CiAKICNlbmRpZiAvKiBfTkVUX0ROX0RFVl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9kbl9yb3V0ZS5oIGIvaW5jbHVkZS9uZXQvZG5fcm91dGUuaAppbmRleCBjY2FkYWIzLi45YjE4NWRmIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9kbl9yb3V0ZS5oCisrKyBiL2luY2x1ZGUvbmV0L2RuX3JvdXRlLmgKQEAgLTgwLDYgKzgwLDE2IEBACiAJdW5zaWduZWQgcnRfdHlwZTsKIH07CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBkbl9pc19pbnB1dF9yb3V0ZShzdHJ1Y3QgZG5fcm91dGUgKnJ0KQoreworCXJldHVybiBydC0+ZmwuaWlmICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBkbl9pc19vdXRwdXRfcm91dGUoc3RydWN0IGRuX3JvdXRlICpydCkKK3sKKwlyZXR1cm4gcnQtPmZsLmlpZiA9PSAwOworfQorCiBleHRlcm4gdm9pZCBkbl9yb3V0ZV9pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgZG5fcm91dGVfY2xlYW51cCh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvZHN0LmggYi9pbmNsdWRlL25ldC9kc3QuaAppbmRleCBmZmU5Y2I3Li45M2IwMzEwIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9kc3QuaAorKysgYi9pbmNsdWRlL25ldC9kc3QuaApAQCAtNzAsNyArNzAsNyBAQAogCiAJc3RydWN0ICBkc3Rfb3BzCSAgICAgICAgKm9wczsKIAotCXUzMgkJCW1ldHJpY3NbUlRBWF9NQVhdOworCXUzMgkJCV9tZXRyaWNzW1JUQVhfTUFYXTsKIAogI2lmZGVmIENPTkZJR19ORVRfQ0xTX1JPVVRFCiAJX191MzIJCQl0Y2xhc3NpZDsKQEAgLTk0LDE5ICs5NCw1OSBAQAogCWludAkJCV9fdXNlOwogCXVuc2lnbmVkIGxvbmcJCWxhc3R1c2U7CiAJdW5pb24gewotCQlzdHJ1Y3QgZHN0X2VudHJ5ICpuZXh0OwotCQlzdHJ1Y3QgcnRhYmxlIF9fcmN1ICpydF9uZXh0OwotCQlzdHJ1Y3QgcnQ2X2luZm8gICAqcnQ2X25leHQ7Ci0JCXN0cnVjdCBkbl9yb3V0ZSAgKmRuX25leHQ7CisJCXN0cnVjdCBkc3RfZW50cnkJKm5leHQ7CisJCXN0cnVjdCBydGFibGUgX19yY3UJKnJ0X25leHQ7CisJCXN0cnVjdCBydDZfaW5mbwkJKnJ0Nl9uZXh0OworCQlzdHJ1Y3QgZG5fcm91dGUgX19yY3UJKmRuX25leHQ7CiAJfTsKIH07CiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKIHN0YXRpYyBpbmxpbmUgdTMyCi1kc3RfbWV0cmljKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCwgaW50IG1ldHJpYykKK2RzdF9tZXRyaWNfcmF3KGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCwgY29uc3QgaW50IG1ldHJpYykKIHsKLQlyZXR1cm4gZHN0LT5tZXRyaWNzW21ldHJpYy0xXTsKKwlyZXR1cm4gZHN0LT5fbWV0cmljc1ttZXRyaWMtMV07Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyCitkc3RfbWV0cmljKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCwgY29uc3QgaW50IG1ldHJpYykKK3sKKwlXQVJOX09OX09OQ0UobWV0cmljID09IFJUQVhfSE9QTElNSVQgfHwKKwkJICAgICBtZXRyaWMgPT0gUlRBWF9BRFZNU1MgfHwKKwkJICAgICBtZXRyaWMgPT0gUlRBWF9NVFUpOworCXJldHVybiBkc3RfbWV0cmljX3Jhdyhkc3QsIG1ldHJpYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyCitkc3RfbWV0cmljX2Fkdm1zcyhjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpCit7CisJdTMyIGFkdm1zcyA9IGRzdF9tZXRyaWNfcmF3KGRzdCwgUlRBWF9BRFZNU1MpOworCisJaWYgKCFhZHZtc3MpCisJCWFkdm1zcyA9IGRzdC0+b3BzLT5kZWZhdWx0X2Fkdm1zcyhkc3QpOworCisJcmV0dXJuIGFkdm1zczsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRzdF9tZXRyaWNfc2V0KHN0cnVjdCBkc3RfZW50cnkgKmRzdCwgaW50IG1ldHJpYywgdTMyIHZhbCkKK3sKKwlkc3QtPl9tZXRyaWNzW21ldHJpYy0xXSA9IHZhbDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRzdF9pbXBvcnRfbWV0cmljcyhzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsIGNvbnN0IHUzMiAqc3JjX21ldHJpY3MpCit7CisJbWVtY3B5KGRzdC0+X21ldHJpY3MsIHNyY19tZXRyaWNzLCBSVEFYX01BWCAqIHNpemVvZih1MzIpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRzdF9jb3B5X21ldHJpY3Moc3RydWN0IGRzdF9lbnRyeSAqZGVzdCwgY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqc3JjKQoreworCWRzdF9pbXBvcnRfbWV0cmljcyhkZXN0LCBzcmMtPl9tZXRyaWNzKTsKK30KKworc3RhdGljIGlubGluZSB1MzIgKmRzdF9tZXRyaWNzX3B0cihzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpCit7CisJcmV0dXJuIGRzdC0+X21ldHJpY3M7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdTMyCkBAIC0xMTcsMTEgKzE1NywxMSBAQAogCiBzdGF0aWMgaW5saW5lIHUzMiBkc3RfbXR1KGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCkKIHsKLQl1MzIgbXR1ID0gZHN0X21ldHJpYyhkc3QsIFJUQVhfTVRVKTsKLQkvKgotCSAqIEFsZXhleSBwdXQgaXQgaGVyZSwgc28gYXNrIGhpbSBhYm91dCBpdCA6KQotCSAqLwotCWJhcnJpZXIoKTsKKwl1MzIgbXR1ID0gZHN0X21ldHJpY19yYXcoZHN0LCBSVEFYX01UVSk7CisKKwlpZiAoIW10dSkKKwkJbXR1ID0gZHN0LT5vcHMtPmRlZmF1bHRfbXR1KGRzdCk7CisKIAlyZXR1cm4gbXR1OwogfQogCkBAIC0xMzQsNyArMTc0LDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfZHN0X21ldHJpY19ydHQoc3RydWN0IGRzdF9lbnRyeSAqZHN0LCBpbnQgbWV0cmljLAogCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgcnR0KQogewotCWRzdC0+bWV0cmljc1ttZXRyaWMtMV0gPSBqaWZmaWVzX3RvX21zZWNzKHJ0dCk7CisJZHN0X21ldHJpY19zZXQoZHN0LCBtZXRyaWMsIGppZmZpZXNfdG9fbXNlY3MocnR0KSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdTMyCkBAIC0xNDcsNyArMTg3LDcgQEAKIH0KIAogc3RhdGljIGlubGluZSBpbnQKLWRzdF9tZXRyaWNfbG9ja2VkKHN0cnVjdCBkc3RfZW50cnkgKmRzdCwgaW50IG1ldHJpYykKK2RzdF9tZXRyaWNfbG9ja2VkKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCwgaW50IG1ldHJpYykKIHsKIAlyZXR1cm4gZHN0X21ldHJpYyhkc3QsIFJUQVhfTE9DSykgJiAoMTw8bWV0cmljKTsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2RzdF9vcHMuaCBiL2luY2x1ZGUvbmV0L2RzdF9vcHMuaAppbmRleCA1MTY2NWIzLi4yMWEzMjBiIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9kc3Rfb3BzLmgKKysrIGIvaW5jbHVkZS9uZXQvZHN0X29wcy5oCkBAIC0xNiw2ICsxNiw4IEBACiAKIAlpbnQJCQkoKmdjKShzdHJ1Y3QgZHN0X29wcyAqb3BzKTsKIAlzdHJ1Y3QgZHN0X2VudHJ5ICoJKCpjaGVjaykoc3RydWN0IGRzdF9lbnRyeSAqLCBfX3UzMiBjb29raWUpOworCXVuc2lnbmVkIGludAkJKCpkZWZhdWx0X2Fkdm1zcykoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqKTsKKwl1bnNpZ25lZCBpbnQJCSgqZGVmYXVsdF9tdHUpKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKik7CiAJdm9pZAkJCSgqZGVzdHJveSkoc3RydWN0IGRzdF9lbnRyeSAqKTsKIAl2b2lkCQkJKCppZmRvd24pKHN0cnVjdCBkc3RfZW50cnkgKiwKIAkJCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaG93KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2Zsb3cuaCBiL2luY2x1ZGUvbmV0L2Zsb3cuaAppbmRleCBiYjA4NjkyLi4yNDBiN2YzIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9mbG93LmgKKysrIGIvaW5jbHVkZS9uZXQvZmxvdy5oCkBAIC02Niw2ICs2Niw3IEBACiAJCX0gZG5wb3J0czsKIAogCQlfX2JlMzIJCXNwaTsKKwkJX19iZTMyCQlncmVfa2V5OwogCiAJCXN0cnVjdCB7CiAJCQlfX3U4CXR5cGU7CkBAIC03Nyw2ICs3OCw3IEBACiAjZGVmaW5lIGZsX2ljbXBfY29kZQl1bGlfdS5pY21wdC5jb2RlCiAjZGVmaW5lIGZsX2lwc2VjX3NwaQl1bGlfdS5zcGkKICNkZWZpbmUgZmxfbWhfdHlwZQl1bGlfdS5taHQudHlwZQorI2RlZmluZSBmbF9ncmVfa2V5CXVsaV91LmdyZV9rZXkKIAlfX3UzMiAgICAgICAgICAgc2VjaWQ7CS8qIHVzZWQgYnkgeGZybTsgc2VlIHNlY2lkLnR4dCAqLwogfSBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyhCSVRTX1BFUl9MT05HLzgpKSk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lmX2luZXQ2LmggYi9pbmNsdWRlL25ldC9pZl9pbmV0Ni5oCmluZGV4IGY5NWZmOGQuLjA0OTc3ZWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lmX2luZXQ2LmgKKysrIGIvaW5jbHVkZS9uZXQvaWZfaW5ldDYuaApAQCAtODksMTAgKzg5LDExIEBACiBzdHJ1Y3QgaXB2Nl9tY19zb2NrbGlzdCB7CiAJc3RydWN0IGluNl9hZGRyCQlhZGRyOwogCWludAkJCWlmaW5kZXg7Ci0Jc3RydWN0IGlwdjZfbWNfc29ja2xpc3QgKm5leHQ7CisJc3RydWN0IGlwdjZfbWNfc29ja2xpc3QgX19yY3UgKm5leHQ7CiAJcndsb2NrX3QJCXNmbG9jazsKIAl1bnNpZ25lZCBpbnQJCXNmbW9kZTsJCS8qIE1DQVNUX3tJTkNMVURFLEVYQ0xVREV9ICovCiAJc3RydWN0IGlwNl9zZl9zb2NrbGlzdAkqc2ZsaXN0OworCXN0cnVjdCByY3VfaGVhZAkJcmN1OwogfTsKIAogc3RydWN0IGlwNl9zZl9saXN0IHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2luZXQ2X2Nvbm5lY3Rpb25fc29jay5oIGIvaW5jbHVkZS9uZXQvaW5ldDZfY29ubmVjdGlvbl9zb2NrLmgKaW5kZXggYWFlMDhmNi4uZmYwMTM1MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaW5ldDZfY29ubmVjdGlvbl9zb2NrLmgKKysrIGIvaW5jbHVkZS9uZXQvaW5ldDZfY29ubmVjdGlvbl9zb2NrLmgKQEAgLTI1LDYgKzI1LDkgQEAKIGV4dGVybiBpbnQgaW5ldDZfY3NrX2JpbmRfY29uZmxpY3QoY29uc3Qgc3RydWN0IHNvY2sgKnNrLAogCQkJCSAgIGNvbnN0IHN0cnVjdCBpbmV0X2JpbmRfYnVja2V0ICp0Yik7CiAKK2V4dGVybiBzdHJ1Y3QgZHN0X2VudHJ5KiBpbmV0Nl9jc2tfcm91dGVfcmVxKHN0cnVjdCBzb2NrICpzaywKKwkJCQkJICAgICBjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpOworCiBleHRlcm4gc3RydWN0IHJlcXVlc3Rfc29jayAqaW5ldDZfY3NrX3NlYXJjaF9yZXEoY29uc3Qgc3RydWN0IHNvY2sgKnNrLAogCQkJCQkJIHN0cnVjdCByZXF1ZXN0X3NvY2sgKioqcHJldnAsCiAJCQkJCQkgY29uc3QgX19iZTE2IHJwb3J0LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaW5ldF9jb25uZWN0aW9uX3NvY2suaCBiL2luY2x1ZGUvbmV0L2luZXRfY29ubmVjdGlvbl9zb2NrLmgKaW5kZXggZTRmNDk0Yi4uNmFjNGUzYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaW5ldF9jb25uZWN0aW9uX3NvY2suaAorKysgYi9pbmNsdWRlL25ldC9pbmV0X2Nvbm5lY3Rpb25fc29jay5oCkBAIC00Myw3ICs0Myw3IEBACiAJc3RydWN0IHNvY2sgKigqc3luX3JlY3Zfc29jaykoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSAgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwKIAkJCQkgICAgICBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpOwotCWludAkgICAgKCpyZW1lbWJlcl9zdGFtcCkoc3RydWN0IHNvY2sgKnNrKTsKKwlzdHJ1Y3QgaW5ldF9wZWVyICooKmdldF9wZWVyKShzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgKnJlbGVhc2VfaXQpOwogCXUxNgkgICAgbmV0X2hlYWRlcl9sZW47CiAJdTE2CSAgICBzb2NrYWRkcl9sZW47CiAJaW50CSAgICAoKnNldHNvY2tvcHQpKHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwgCkBAIC0xMzIsNyArMTMyLDYgQEAKICNkZWZpbmUgSUNTS19USU1FX1JFVFJBTlMJMQkvKiBSZXRyYW5zbWl0IHRpbWVyICovCiAjZGVmaW5lIElDU0tfVElNRV9EQUNLCQkyCS8qIERlbGF5ZWQgYWNrIHRpbWVyICovCiAjZGVmaW5lIElDU0tfVElNRV9QUk9CRTAJMwkvKiBaZXJvIHdpbmRvdyBwcm9iZSB0aW1lciAqLwotI2RlZmluZSBJQ1NLX1RJTUVfS0VFUE9QRU4JNAkvKiBLZWVwYWxpdmUgdGltZXIgKi8KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmluZXRfY3NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaykKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2luZXRfc29jay5oIGIvaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmgKaW5kZXggMTk4OWNmZC4uODE4MTQ5OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmgKKysrIGIvaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmgKQEAgLTExNiw4ICsxMTYsOSBAQAogCXN0cnVjdCBpcHY2X3BpbmZvCSpwaW5ldDY7CiAjZW5kaWYKIAkvKiBTb2NrZXQgZGVtdWx0aXBsZXggY29tcGFyaXNvbnMgb24gaW5jb21pbmcgcGFja2V0cy4gKi8KLQlfX2JlMzIJCQlpbmV0X2RhZGRyOwotCV9fYmUzMgkJCWluZXRfcmN2X3NhZGRyOworI2RlZmluZSBpbmV0X2RhZGRyCQlzay5fX3NrX2NvbW1vbi5za2NfZGFkZHIKKyNkZWZpbmUgaW5ldF9yY3Zfc2FkZHIJCXNrLl9fc2tfY29tbW9uLnNrY19yY3Zfc2FkZHIKKwogCV9fYmUxNgkJCWluZXRfZHBvcnQ7CiAJX191MTYJCQlpbmV0X251bTsKIAlfX2JlMzIJCQlpbmV0X3NhZGRyOwpAQCAtMTQxLDcgKzE0Miw3IEBACiAJCQkJbm9kZWZyYWc6MTsKIAlpbnQJCQltY19pbmRleDsKIAlfX2JlMzIJCQltY19hZGRyOwotCXN0cnVjdCBpcF9tY19zb2NrbGlzdAkqbWNfbGlzdDsKKwlzdHJ1Y3QgaXBfbWNfc29ja2xpc3QgX19yY3UJKm1jX2xpc3Q7CiAJc3RydWN0IHsKIAkJdW5zaWduZWQgaW50CQlmbGFnczsKIAkJdW5zaWduZWQgaW50CQlmcmFnc2l6ZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2luZXRfdGltZXdhaXRfc29jay5oIGIvaW5jbHVkZS9uZXQvaW5ldF90aW1ld2FpdF9zb2NrLmgKaW5kZXggYTA2NmZkZC4uMTc0MDRiNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaW5ldF90aW1ld2FpdF9zb2NrLmgKKysrIGIvaW5jbHVkZS9uZXQvaW5ldF90aW1ld2FpdF9zb2NrLmgKQEAgLTg4LDEyICs4OCw2IEBACiBleHRlcm4gdm9pZCBpbmV0X3R3ZHJfdHdraWxsX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIGV4dGVybiB2b2lkIGluZXRfdHdkcl90d2NhbF90aWNrKHVuc2lnbmVkIGxvbmcgZGF0YSk7CiAKLSNpZiAoQklUU19QRVJfTE9ORyA9PSA2NCkKLSNkZWZpbmUgSU5FVF9USU1FV0FJVF9BRERSQ01QX0FMSUdOX0JZVEVTIDgKLSNlbHNlCi0jZGVmaW5lIElORVRfVElNRVdBSVRfQUREUkNNUF9BTElHTl9CWVRFUyA0Ci0jZW5kaWYKLQogc3RydWN0IGluZXRfYmluZF9idWNrZXQ7CiAKIC8qCkBAIC0xMTcsMTUgKzExMSwxNSBAQAogI2RlZmluZSB0d19oYXNoCQkJX190d19jb21tb24uc2tjX2hhc2gKICNkZWZpbmUgdHdfcHJvdAkJCV9fdHdfY29tbW9uLnNrY19wcm90CiAjZGVmaW5lIHR3X25ldAkJCV9fdHdfY29tbW9uLnNrY19uZXQKKyNkZWZpbmUgdHdfZGFkZHIgICAgICAgIAlfX3R3X2NvbW1vbi5za2NfZGFkZHIKKyNkZWZpbmUgdHdfcmN2X3NhZGRyICAgIAlfX3R3X2NvbW1vbi5za2NfcmN2X3NhZGRyCiAJaW50CQkJdHdfdGltZW91dDsKIAl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyCXR3X3N1YnN0YXRlOwotCS8qIDMgYml0cyBob2xlLCB0cnkgdG8gcGFjayAqLwogCXVuc2lnbmVkIGNoYXIJCXR3X3Jjdl93c2NhbGU7CisKIAkvKiBTb2NrZXQgZGVtdWx0aXBsZXggY29tcGFyaXNvbnMgb24gaW5jb21pbmcgcGFja2V0cy4gKi8KLQkvKiB0aGVzZSBmaXZlIGFyZSBpbiBpbmV0X3NvY2sgKi8KKwkvKiB0aGVzZSB0aHJlZSBhcmUgaW4gaW5ldF9zb2NrICovCiAJX19iZTE2CQkJdHdfc3BvcnQ7Ci0JX19iZTMyCQkJdHdfZGFkZHIgX19hdHRyaWJ1dGVfXygoYWxpZ25lZChJTkVUX1RJTUVXQUlUX0FERFJDTVBfQUxJR05fQllURVMpKSk7Ci0JX19iZTMyCQkJdHdfcmN2X3NhZGRyOwogCV9fYmUxNgkJCXR3X2Rwb3J0OwogCV9fdTE2CQkJdHdfbnVtOwogCWttZW1jaGVja19iaXRmaWVsZF9iZWdpbihmbGFncyk7CkBAIC0xOTEsMTAgKzE4NSwxMCBAQAogCXJldHVybiAoc3RydWN0IGluZXRfdGltZXdhaXRfc29jayAqKXNrOwogfQogCi1zdGF0aWMgaW5saW5lIF9fYmUzMiBpbmV0X3Jjdl9zYWRkcihjb25zdCBzdHJ1Y3Qgc29jayAqc2spCitzdGF0aWMgaW5saW5lIF9fYmUzMiBza19yY3Zfc2FkZHIoY29uc3Qgc3RydWN0IHNvY2sgKnNrKQogewotCXJldHVybiBsaWtlbHkoc2stPnNrX3N0YXRlICE9IFRDUF9USU1FX1dBSVQpID8KLQkJaW5ldF9zayhzayktPmluZXRfcmN2X3NhZGRyIDogaW5ldF90d3NrKHNrKS0+dHdfcmN2X3NhZGRyOworLyogYm90aCBpbmV0X3NrKCkgYW5kIGluZXRfdHdzaygpIHN0b3JlIHJjdl9zYWRkciBpbiBza2NfcmN2X3NhZGRyICovCisJcmV0dXJuIHNrLT5fX3NrX2NvbW1vbi5za2NfcmN2X3NhZGRyOwogfQogCiBleHRlcm4gdm9pZCBpbmV0X3R3c2tfcHV0KHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sgKnR3KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2luZXRwZWVyLmggYi9pbmNsdWRlL25ldC9pbmV0cGVlci5oCmluZGV4IGZlMjM5YmYuLjU5OWQ5NmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2luZXRwZWVyLmgKKysrIGIvaW5jbHVkZS9uZXQvaW5ldHBlZXIuaApAQCAtMTEsMTIgKzExLDIxIEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPG5ldC9pcHY2Lmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogCitzdHJ1Y3QgaW5ldHBlZXJfYWRkciB7CisJdW5pb24geworCQlfX2JlMzIJCWE0OworCQlfX2JlMzIJCWE2WzRdOworCX07CisJX191MTYJZmFtaWx5OworfTsKKwogc3RydWN0IGluZXRfcGVlciB7CiAJLyogZ3JvdXAgdG9nZXRoZXIgYXZsX2xlZnQsYXZsX3JpZ2h0LHY0ZGFkZHIgdG8gc3BlZWR1cCBsb29rdXBzICovCiAJc3RydWN0IGluZXRfcGVlciBfX3JjdQkqYXZsX2xlZnQsICphdmxfcmlnaHQ7Ci0JX19iZTMyCQkJdjRkYWRkcjsJLyogcGVlcidzIGFkZHJlc3MgKi8KKwlzdHJ1Y3QgaW5ldHBlZXJfYWRkcglkYWRkcjsKIAlfX3UzMgkJCWF2bF9oZWlnaHQ7CiAJc3RydWN0IGxpc3RfaGVhZAl1bnVzZWQ7CiAJX191MzIJCQlkdGltZTsJCS8qIHRoZSB0aW1lIG9mIGxhc3QgdXNlIG9mIG5vdApAQCAtMjYsNyArMzUsNiBAQAogCSAqIE9uY2UgaW5ldF9wZWVyIGlzIHF1ZXVlZCBmb3IgZGVsZXRpb24gKHJlZmNudCA9PSAtMSksIGZvbGxvd2luZyBmaWVsZHMKIAkgKiBhcmUgbm90IGF2YWlsYWJsZTogcmlkLCBpcF9pZF9jb3VudCwgdGNwX3RzLCB0Y3BfdHNfc3RhbXAKIAkgKiBXZSBjYW4gc2hhcmUgbWVtb3J5IHdpdGggcmN1X2hlYWQgdG8ga2VlcCBpbmV0X3BlZXIgc21hbGwKLQkgKiAobGVzcyB0aGVuIDY0IGJ5dGVzKQogCSAqLwogCXVuaW9uIHsKIAkJc3RydWN0IHsKQEAgLTQyLDcgKzUwLDI1IEBACiB2b2lkCQkJaW5ldF9pbml0cGVlcnModm9pZCkgX19pbml0OwogCiAvKiBjYW4gYmUgY2FsbGVkIHdpdGggb3Igd2l0aG91dCBsb2NhbCBCSCBiZWluZyBkaXNhYmxlZCAqLwotc3RydWN0IGluZXRfcGVlcgkqaW5ldF9nZXRwZWVyKF9fYmUzMiBkYWRkciwgaW50IGNyZWF0ZSk7CitzdHJ1Y3QgaW5ldF9wZWVyCSppbmV0X2dldHBlZXIoc3RydWN0IGluZXRwZWVyX2FkZHIgKmRhZGRyLCBpbnQgY3JlYXRlKTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgaW5ldF9wZWVyICppbmV0X2dldHBlZXJfdjQoX19iZTMyIHY0ZGFkZHIsIGludCBjcmVhdGUpCit7CisJc3RydWN0IGluZXRwZWVyX2FkZHIgZGFkZHI7CisKKwlkYWRkci5hNCA9IHY0ZGFkZHI7CisJZGFkZHIuZmFtaWx5ID0gQUZfSU5FVDsKKwlyZXR1cm4gaW5ldF9nZXRwZWVyKCZkYWRkciwgY3JlYXRlKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgaW5ldF9wZWVyICppbmV0X2dldHBlZXJfdjYoc3RydWN0IGluNl9hZGRyICp2NmRhZGRyLCBpbnQgY3JlYXRlKQoreworCXN0cnVjdCBpbmV0cGVlcl9hZGRyIGRhZGRyOworCisJaXB2Nl9hZGRyX2NvcHkoKHN0cnVjdCBpbjZfYWRkciAqKWRhZGRyLmE2LCB2NmRhZGRyKTsKKwlkYWRkci5mYW1pbHkgPSBBRl9JTkVUNjsKKwlyZXR1cm4gaW5ldF9nZXRwZWVyKCZkYWRkciwgY3JlYXRlKTsKK30KIAogLyogY2FuIGJlIGNhbGxlZCBmcm9tIEJIIGNvbnRleHQgb3Igb3V0c2lkZSAqLwogZXh0ZXJuIHZvaWQgaW5ldF9wdXRwZWVyKHN0cnVjdCBpbmV0X3BlZXIgKnApOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXAuaCBiL2luY2x1ZGUvbmV0L2lwLmgKaW5kZXggODZlMmIxOC4uNjdmYWM3OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXAuaAorKysgYi9pbmNsdWRlL25ldC9pcC5oCkBAIC0yMDEsNyArMjAxLDYgQEAKIAlyZXR1cm4gdGVzdF9iaXQocG9ydCwgc3lzY3RsX2xvY2FsX3Jlc2VydmVkX3BvcnRzKTsKIH0KIAotZXh0ZXJuIGludCBzeXNjdGxfaXBfZGVmYXVsdF90dGw7CiBleHRlcm4gaW50IHN5c2N0bF9pcF9ub25sb2NhbF9iaW5kOwogCiBleHRlcm4gc3RydWN0IGN0bF9wYXRoIG5ldF9jb3JlX3BhdGhbXTsKQEAgLTQyOCwxNSArNDI3LDYgQEAKIGV4dGVybiB2b2lkCWlwX2xvY2FsX2Vycm9yKHN0cnVjdCBzb2NrICpzaywgaW50IGVyciwgX19iZTMyIGRhZGRyLCBfX2JlMTYgZHBvcnQsCiAJCQkgICAgICAgdTMyIGluZm8pOwogCi0vKiBzeXNjdGwgaGVscGVycyAtIGFueSBzeXNjdGwgd2hpY2ggaG9sZHMgYSB2YWx1ZSB0aGF0IGVuZHMgdXAgYmVpbmcKLSAqIGZlZCBpbnRvIHRoZSByb3V0aW5nIGNhY2hlIHNob3VsZCB1c2UgdGhlc2UgaGFuZGxlcnMuCi0gKi8KLWludCBpcHY0X2RvaW50X2FuZF9mbHVzaChjdGxfdGFibGUgKmN0bCwgaW50IHdyaXRlLAotCQkJIHZvaWQgX191c2VyICpidWZmZXIsCi0JCQkgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpOwotaW50IGlwdjRfZG9pbnRfYW5kX2ZsdXNoX3N0cmF0ZWd5KGN0bF90YWJsZSAqdGFibGUsCi0JCQkJICB2b2lkIF9fdXNlciAqb2xkdmFsLCBzaXplX3QgX191c2VyICpvbGRsZW5wLAotCQkJCSAgdm9pZCBfX3VzZXIgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbik7CiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIGV4dGVybiBpbnQgaXBfbWlzY19wcm9jX2luaXQodm9pZCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwNl9maWIuaCBiL2luY2x1ZGUvbmV0L2lwNl9maWIuaAppbmRleCAwNjJhODIzLi43MDhmZjdjIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcDZfZmliLmgKKysrIGIvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSA8bmV0L2RzdC5oPgogI2luY2x1ZGUgPG5ldC9mbG93Lmg+CiAjaW5jbHVkZSA8bmV0L25ldGxpbmsuaD4KKyNpbmNsdWRlIDxuZXQvaW5ldHBlZXIuaD4KIAogI2lmZGVmIENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUwogI2RlZmluZSBGSUI2X1RBQkxFX0hBU0hTWiAyNTYKQEAgLTEwOSw2ICsxMTAsNyBAQAogCXUzMgkJCQlydDZpX21ldHJpYzsKIAogCXN0cnVjdCBpbmV0Nl9kZXYJCSpydDZpX2lkZXY7CisJc3RydWN0IGluZXRfcGVlcgkJKnJ0NmlfcGVlcjsKIAogI2lmZGVmIENPTkZJR19YRlJNCiAJdTMyCQkJCXJ0NmlfZmxvd19jYWNoZV9nZW5pZDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oIGIvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgKaW5kZXggMmFiOTI2OC4uODU1MmYwYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgKKysrIGIvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgKQEAgLTMsNyArMyw2IEBACiAKICNkZWZpbmUgSVA2X1JUX1BSSU9fVVNFUgkxMDI0CiAjZGVmaW5lIElQNl9SVF9QUklPX0FERFJDT05GCTI1NgotI2RlZmluZSBJUDZfUlRfUFJJT19LRVJOCTUxMgogCiBzdHJ1Y3Qgcm91dGVfaW5mbyB7CiAJX191OAkJCXR5cGU7CkBAIC01Niw2ICs1NSwxOCBAQAogCXJldHVybiAoZmxhZ3MgPj4gMykgJiA3OwogfQogCitleHRlcm4gdm9pZAkJCXJ0Nl9iaW5kX3BlZXIoc3RydWN0IHJ0Nl9pbmZvICpydCwKKwkJCQkJICAgICAgaW50IGNyZWF0ZSk7CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGluZXRfcGVlciAqcnQ2X2dldF9wZWVyKHN0cnVjdCBydDZfaW5mbyAqcnQpCit7CisJaWYgKHJ0LT5ydDZpX3BlZXIpCisJCXJldHVybiBydC0+cnQ2aV9wZWVyOworCisJcnQ2X2JpbmRfcGVlcihydCwgMCk7CisJcmV0dXJuIHJ0LT5ydDZpX3BlZXI7Cit9CisKIGV4dGVybiB2b2lkCQkJaXA2X3JvdXRlX2lucHV0KHN0cnVjdCBza19idWZmICpza2IpOwogCiBleHRlcm4gc3RydWN0IGRzdF9lbnRyeSAqCWlwNl9yb3V0ZV9vdXRwdXQoc3RydWN0IG5ldCAqbmV0LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbWFjODAyMTEuaCBiL2luY2x1ZGUvbmV0L21hYzgwMjExLmgKaW5kZXggMzY1MzU5Yi4uNWIzZmQ1YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbWFjODAyMTEuaAorKysgYi9pbmNsdWRlL25ldC9tYWM4MDIxMS5oCkBAIC05Nyw2ICs5NywyMCBAQAogfTsKIAogLyoqCisgKiBlbnVtIGllZWU4MDIxMV9hY19udW1iZXJzIC0gQUMgbnVtYmVycyBhcyB1c2VkIGluIG1hYzgwMjExCisgKiBASUVFRTgwMjExX0FDX1ZPOiB2b2ljZQorICogQElFRUU4MDIxMV9BQ19WSTogdmlkZW8KKyAqIEBJRUVFODAyMTFfQUNfQkU6IGJlc3QgZWZmb3J0CisgKiBASUVFRTgwMjExX0FDX0JLOiBiYWNrZ3JvdW5kCisgKi8KK2VudW0gaWVlZTgwMjExX2FjX251bWJlcnMgeworCUlFRUU4MDIxMV9BQ19WTwkJPSAwLAorCUlFRUU4MDIxMV9BQ19WSQkJPSAxLAorCUlFRUU4MDIxMV9BQ19CRQkJPSAyLAorCUlFRUU4MDIxMV9BQ19CSwkJPSAzLAorfTsKKworLyoqCiAgKiBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3BhcmFtcyAtIHRyYW5zbWl0IHF1ZXVlIGNvbmZpZ3VyYXRpb24KICAqCiAgKiBUaGUgaW5mb3JtYXRpb24gcHJvdmlkZWQgaW4gdGhpcyBzdHJ1Y3R1cmUgaXMgcmVxdWlyZWQgZm9yIFFvUwpAQCAtMjA1LDYgKzIxOSw3IEBACiAgKiBAYmFzaWNfcmF0ZXM6IGJpdG1hcCBvZiBiYXNpYyByYXRlcywgZWFjaCBiaXQgc3RhbmRzIGZvciBhbgogICoJaW5kZXggaW50byB0aGUgcmF0ZSB0YWJsZSBjb25maWd1cmVkIGJ5IHRoZSBkcml2ZXIgaW4KICAqCXRoZSBjdXJyZW50IGJhbmQuCisgKiBAbWNhc3RfcmF0ZTogcGVyLWJhbmQgbXVsdGljYXN0IHJhdGUgaW5kZXggKyAxICgwOiBkaXNhYmxlZCkKICAqIEBic3NpZDogVGhlIEJTU0lEIGZvciB0aGlzIEJTUwogICogQGVuYWJsZV9iZWFjb246IHdoZXRoZXIgYmVhY29uaW5nIHNob3VsZCBiZSBlbmFibGVkIG9yIG5vdAogICogQGNoYW5uZWxfdHlwZTogQ2hhbm5lbCB0eXBlIGZvciB0aGlzIEJTUyAtLSB0aGUgaGFyZHdhcmUgbWlnaHQgYmUKQEAgLTI0NCw2ICsyNTksNyBAQAogCXUxNiBhc3NvY19jYXBhYmlsaXR5OwogCXU2NCB0aW1lc3RhbXA7CiAJdTMyIGJhc2ljX3JhdGVzOworCWludCBtY2FzdF9yYXRlW0lFRUU4MDIxMV9OVU1fQkFORFNdOwogCXUxNiBodF9vcGVyYXRpb25fbW9kZTsKIAlzMzIgY3FtX3Jzc2lfdGhvbGQ7CiAJdTMyIGNxbV9yc3NpX2h5c3Q7CkBAIC0zNDksNiArMzY1LDcgQEAKIAlJRUVFODAyMTFfVFhfSU5URkxfTkw4MDIxMV9GUkFNRV9UWAk9IEJJVCgyMSksCiAJSUVFRTgwMjExX1RYX0NUTF9MRFBDCQkJPSBCSVQoMjIpLAogCUlFRUU4MDIxMV9UWF9DVExfU1RCQwkJCT0gQklUKDIzKSB8IEJJVCgyNCksCisJSUVFRTgwMjExX1RYX0NUTF9UWF9PRkZDSEFOCQk9IEJJVCgyNSksCiB9OwogCiAjZGVmaW5lIElFRUU4MDIxMV9UWF9DVExfU1RCQ19TSElGVAkJMjMKQEAgLTE2NTIsNiArMTY2OSwxMSBAQAogICoJYW5kIElWMTYpIGZvciB0aGUgZ2l2ZW4ga2V5IGZyb20gaGFyZHdhcmUuCiAgKglUaGUgY2FsbGJhY2sgbXVzdCBiZSBhdG9taWMuCiAgKgorICogQHNldF9mcmFnX3RocmVzaG9sZDogQ29uZmlndXJhdGlvbiBvZiBmcmFnbWVudGF0aW9uIHRocmVzaG9sZC4gQXNzaWduIHRoaXMKKyAqCWlmIHRoZSBkZXZpY2UgZG9lcyBmcmFnbWVudGF0aW9uIGJ5IGl0c2VsZjsgaWYgdGhpcyBjYWxsYmFjayBpcworICoJaW1wbGVtZW50ZWQgdGhlbiB0aGUgc3RhY2sgd2lsbCBub3QgZG8gZnJhZ21lbnRhdGlvbi4KKyAqCVRoZSBjYWxsYmFjayBjYW4gc2xlZXAuCisgKgogICogQHNldF9ydHNfdGhyZXNob2xkOiBDb25maWd1cmF0aW9uIG9mIFJUUyB0aHJlc2hvbGQgKGlmIGRldmljZSBuZWVkcyBpdCkKICAqCVRoZSBjYWxsYmFjayBjYW4gc2xlZXAuCiAgKgpAQCAtMTcyNCw2ICsxNzQ2LDEzIEBACiAgKgljb21wbGV0aW9uIG9mIHRoZSBjaGFubmVsIHN3aXRjaC4KICAqCiAgKiBAbmFwaV9wb2xsOiBQb2xsIFJ4IHF1ZXVlIGZvciBpbmNvbWluZyBkYXRhIGZyYW1lcy4KKyAqCisgKiBAc2V0X2FudGVubmE6IFNldCBhbnRlbm5hIGNvbmZpZ3VyYXRpb24gKHR4X2FudCwgcnhfYW50KSBvbiB0aGUgZGV2aWNlLgorICoJUGFyYW1ldGVycyBhcmUgYml0bWFwcyBvZiBhbGxvd2VkIGFudGVubmFzIHRvIHVzZSBmb3IgVFgvUlguIERyaXZlcnMgbWF5CisgKglyZWplY3QgVFgvUlggbWFzayBjb21iaW5hdGlvbnMgdGhleSBjYW5ub3Qgc3VwcG9ydCBieSByZXR1cm5pbmcgLUVJTlZBTAorICoJKGFsc28gc2VlIG5sODAyMTEuaCBATkw4MDIxMV9BVFRSX1dJUEhZX0FOVEVOTkFfVFgpLgorICoKKyAqIEBnZXRfYW50ZW5uYTogR2V0IGN1cnJlbnQgYW50ZW5uYSBjb25maWd1cmF0aW9uIGZyb20gZGV2aWNlICh0eF9hbnQsIHJ4X2FudCkuCiAgKi8KIHN0cnVjdCBpZWVlODAyMTFfb3BzIHsKIAlpbnQgKCp0eCkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IpOwpAQCAtMTc2NSw2ICsxNzk0LDcgQEAKIAkJCSBzdHJ1Y3QgaWVlZTgwMjExX2xvd19sZXZlbF9zdGF0cyAqc3RhdHMpOwogCXZvaWQgKCpnZXRfdGtpcF9zZXEpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBod19rZXlfaWR4LAogCQkJICAgICB1MzIgKml2MzIsIHUxNiAqaXYxNik7CisJaW50ICgqc2V0X2ZyYWdfdGhyZXNob2xkKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIHZhbHVlKTsKIAlpbnQgKCpzZXRfcnRzX3RocmVzaG9sZCkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiB2YWx1ZSk7CiAJaW50ICgqc3RhX2FkZCkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCiAJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKTsKQEAgLTE3OTMsNiArMTgyMywxNCBAQAogCXZvaWQgKCpjaGFubmVsX3N3aXRjaCkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsX3N3aXRjaCAqY2hfc3dpdGNoKTsKIAlpbnQgKCpuYXBpX3BvbGwpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgYnVkZ2V0KTsKKwlpbnQgKCpzZXRfYW50ZW5uYSkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiB0eF9hbnQsIHUzMiByeF9hbnQpOworCWludCAoKmdldF9hbnRlbm5hKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyICp0eF9hbnQsIHUzMiAqcnhfYW50KTsKKworCWludCAoKnJlbWFpbl9vbl9jaGFubmVsKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuLAorCQkJCSBlbnVtIG5sODAyMTFfY2hhbm5lbF90eXBlIGNoYW5uZWxfdHlwZSwKKwkJCQkgaW50IGR1cmF0aW9uKTsKKwlpbnQgKCpjYW5jZWxfcmVtYWluX29uX2NoYW5uZWwpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIH07CiAKIC8qKgpAQCAtMTgyMSwxMSArMTg1OSwzOSBAQAogICovCiBpbnQgaWVlZTgwMjExX3JlZ2lzdGVyX2h3KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIAorLyoqCisgKiBzdHJ1Y3QgaWVlZTgwMjExX3RwdF9ibGluayAtIHRocm91Z2hwdXQgYmxpbmsgZGVzY3JpcHRpb24KKyAqIEB0aHJvdWdocHV0OiB0aHJvdWdocHV0IGluIEtiaXQvc2VjCisgKiBAYmxpbmtfdGltZTogYmxpbmsgdGltZSBpbiBtaWxsaXNlY29uZHMKKyAqCShmdWxsIGN5Y2xlLCBpZS4gb25lIG9mZiArIG9uZSBvbiBwZXJpb2QpCisgKi8KK3N0cnVjdCBpZWVlODAyMTFfdHB0X2JsaW5rIHsKKwlpbnQgdGhyb3VnaHB1dDsKKwlpbnQgYmxpbmtfdGltZTsKK307CisKKy8qKgorICogZW51bSBpZWVlODAyMTFfdHB0X2xlZF90cmlnZ2VyX2ZsYWdzIC0gdGhyb3VnaHB1dCB0cmlnZ2VyIGZsYWdzCisgKiBASUVFRTgwMjExX1RQVF9MRURUUklHX0ZMX1JBRElPOiBlbmFibGUgYmxpbmtpbmcgd2l0aCByYWRpbworICogQElFRUU4MDIxMV9UUFRfTEVEVFJJR19GTF9XT1JLOiBlbmFibGUgYmxpbmtpbmcgd2hlbiB3b3JraW5nCisgKiBASUVFRTgwMjExX1RQVF9MRURUUklHX0ZMX0NPTk5FQ1RFRDogZW5hYmxlIGJsaW5raW5nIHdoZW4gYXQgbGVhc3Qgb25lCisgKglpbnRlcmZhY2UgaXMgY29ubmVjdGVkIGluIHNvbWUgd2F5LCBpbmNsdWRpbmcgYmVpbmcgYW4gQVAKKyAqLworZW51bSBpZWVlODAyMTFfdHB0X2xlZF90cmlnZ2VyX2ZsYWdzIHsKKwlJRUVFODAyMTFfVFBUX0xFRFRSSUdfRkxfUkFESU8JCT0gQklUKDApLAorCUlFRUU4MDIxMV9UUFRfTEVEVFJJR19GTF9XT1JLCQk9IEJJVCgxKSwKKwlJRUVFODAyMTFfVFBUX0xFRFRSSUdfRkxfQ09OTkVDVEVECT0gQklUKDIpLAorfTsKKwogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9MRURTCiBleHRlcm4gY2hhciAqX19pZWVlODAyMTFfZ2V0X3R4X2xlZF9uYW1lKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIGV4dGVybiBjaGFyICpfX2llZWU4MDIxMV9nZXRfcnhfbGVkX25hbWUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogZXh0ZXJuIGNoYXIgKl9faWVlZTgwMjExX2dldF9hc3NvY19sZWRfbmFtZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CiBleHRlcm4gY2hhciAqX19pZWVlODAyMTFfZ2V0X3JhZGlvX2xlZF9uYW1lKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK2V4dGVybiBjaGFyICpfX2llZWU4MDIxMV9jcmVhdGVfdHB0X2xlZF90cmlnZ2VyKAorCQkJCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1bnNpZ25lZCBpbnQgZmxhZ3MsCisJCQkJY29uc3Qgc3RydWN0IGllZWU4MDIxMV90cHRfYmxpbmsgKmJsaW5rX3RhYmxlLAorCQkJCXVuc2lnbmVkIGludCBibGlua190YWJsZV9sZW4pOwogI2VuZGlmCiAvKioKICAqIGllZWU4MDIxMV9nZXRfdHhfbGVkX25hbWUgLSBnZXQgbmFtZSBvZiBUWCBMRUQKQEAgLTE5MDQsNiArMTk3MCwzMCBAQAogfQogCiAvKioKKyAqIGllZWU4MDIxMV9jcmVhdGVfdHB0X2xlZF90cmlnZ2VyIC0gY3JlYXRlIHRocm91Z2hwdXQgTEVEIHRyaWdnZXIKKyAqIEBodzogdGhlIGhhcmR3YXJlIHRvIGNyZWF0ZSB0aGUgdHJpZ2dlciBmb3IKKyAqIEBmbGFnczogdHJpZ2dlciBmbGFncywgc2VlICZlbnVtIGllZWU4MDIxMV90cHRfbGVkX3RyaWdnZXJfZmxhZ3MKKyAqIEBibGlua190YWJsZTogdGhlIGJsaW5rIHRhYmxlIC0tIG5lZWRzIHRvIGJlIG9yZGVyZWQgYnkgdGhyb3VnaHB1dAorICogQGJsaW5rX3RhYmxlX2xlbjogc2l6ZSBvZiB0aGUgYmxpbmsgdGFibGUKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgJU5VTEwgKGluIGNhc2Ugb2YgZXJyb3IsIG9yIGlmIG5vIExFRAorICogdHJpZ2dlcnMgYXJlIGNvbmZpZ3VyZWQpIG9yIHRoZSBuYW1lIG9mIHRoZSBuZXcgdHJpZ2dlci4KKyAqIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgYmVmb3JlIGllZWU4MDIxMV9yZWdpc3Rlcl9odygpLgorICovCitzdGF0aWMgaW5saW5lIGNoYXIgKgoraWVlZTgwMjExX2NyZWF0ZV90cHRfbGVkX3RyaWdnZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHVuc2lnbmVkIGludCBmbGFncywKKwkJCQkgY29uc3Qgc3RydWN0IGllZWU4MDIxMV90cHRfYmxpbmsgKmJsaW5rX3RhYmxlLAorCQkJCSB1bnNpZ25lZCBpbnQgYmxpbmtfdGFibGVfbGVuKQoreworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9MRURTCisJcmV0dXJuIF9faWVlZTgwMjExX2NyZWF0ZV90cHRfbGVkX3RyaWdnZXIoaHcsIGZsYWdzLCBibGlua190YWJsZSwKKwkJCQkJCSAgYmxpbmtfdGFibGVfbGVuKTsKKyNlbHNlCisJcmV0dXJuIE5VTEw7CisjZW5kaWYKK30KKworLyoqCiAgKiBpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyAtIFVucmVnaXN0ZXIgYSBoYXJkd2FyZSBkZXZpY2UKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIGluc3RydWN0cyBtYWM4MDIxMSB0byBmcmVlIGFsbG9jYXRlZCByZXNvdXJjZXMKQEAgLTI0MDQsNiArMjQ5NCw3IEBACiAgKiBpZWVlODAyMTFfc3RhcnRfdHhfYmFfc2Vzc2lvbiAtIFN0YXJ0IGEgdHggQmxvY2sgQWNrIHNlc3Npb24uCiAgKiBAc3RhOiB0aGUgc3RhdGlvbiBmb3Igd2hpY2ggdG8gc3RhcnQgYSBCQSBzZXNzaW9uCiAgKiBAdGlkOiB0aGUgVElEIHRvIEJBIG9uLgorICogQHRpbWVvdXQ6IHNlc3Npb24gdGltZW91dCB2YWx1ZSAoaW4gVFVzKQogICoKICAqIFJldHVybjogc3VjY2VzcyBpZiBhZGRCQSByZXF1ZXN0IHdhcyBzZW50LCBmYWlsdXJlIG90aGVyd2lzZQogICoKQEAgLTI0MTEsNyArMjUwMiw4IEBACiAgKiB0aGUgbmVlZCB0byBzdGFydCBhZ2dyZWdhdGlvbiBvbiBhIGNlcnRhaW4gUkEvVElELCB0aGUgc2Vzc2lvbiBsZXZlbAogICogd2lsbCBiZSBtYW5hZ2VkIGJ5IHRoZSBtYWM4MDIxMS4KICAqLwotaW50IGllZWU4MDIxMV9zdGFydF90eF9iYV9zZXNzaW9uKHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHUxNiB0aWQpOworaW50IGllZWU4MDIxMV9zdGFydF90eF9iYV9zZXNzaW9uKHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHUxNiB0aWQsCisJCQkJICB1MTYgdGltZW91dCk7CiAKIC8qKgogICogaWVlZTgwMjExX3N0YXJ0X3R4X2JhX2NiX2lycXNhZmUgLSBsb3cgbGV2ZWwgZHJpdmVyIHJlYWR5IHRvIGFnZ3JlZ2F0ZS4KQEAgLTI1MjEsNiArMjYxMywyMSBAQAogCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpwdWJzdGEsIGJvb2wgYmxvY2spOwogCiAvKioKKyAqIGllZWU4MDIxMV9hcF9wcm9iZXJlcV9nZXQgLSByZXRyaWV2ZSBhIFByb2JlIFJlcXVlc3QgdGVtcGxhdGUKKyAqIEBodzogcG9pbnRlciBvYnRhaW5lZCBmcm9tIGllZWU4MDIxMV9hbGxvY19odygpLgorICogQHZpZjogJnN0cnVjdCBpZWVlODAyMTFfdmlmIHBvaW50ZXIgZnJvbSB0aGUgYWRkX2ludGVyZmFjZSBjYWxsYmFjay4KKyAqCisgKiBDcmVhdGVzIGEgUHJvYmUgUmVxdWVzdCB0ZW1wbGF0ZSB3aGljaCBjYW4sIGZvciBleGFtcGxlLCBiZSB1cGxvYWRlZCB0bworICogaGFyZHdhcmUuIFRoZSB0ZW1wbGF0ZSBpcyBmaWxsZWQgd2l0aCBic3NpZCwgc3NpZCBhbmQgc3VwcG9ydGVkIHJhdGUKKyAqIGluZm9ybWF0aW9uLiBUaGlzIGZ1bmN0aW9uIG11c3Qgb25seSBiZSBjYWxsZWQgZnJvbSB3aXRoaW4gdGhlCisgKiAuYnNzX2luZm9fY2hhbmdlZCBjYWxsYmFjayBmdW5jdGlvbiBhbmQgb25seSBpbiBtYW5hZ2VkIG1vZGUuIFRoZSBmdW5jdGlvbgorICogaXMgb25seSB1c2VmdWwgd2hlbiB0aGUgaW50ZXJmYWNlIGlzIGFzc29jaWF0ZWQsIG90aGVyd2lzZSBpdCB3aWxsIHJldHVybgorICogTlVMTC4KKyAqLworc3RydWN0IHNrX2J1ZmYgKmllZWU4MDIxMV9hcF9wcm9iZXJlcV9nZXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJCSAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZik7CisKKy8qKgogICogaWVlZTgwMjExX2JlYWNvbl9sb3NzIC0gaW5mb3JtIGhhcmR3YXJlIGRvZXMgbm90IHJlY2VpdmUgYmVhY29ucwogICoKICAqIEB2aWY6ICZzdHJ1Y3QgaWVlZTgwMjExX3ZpZiBwb2ludGVyIGZyb20gdGhlIGFkZF9pbnRlcmZhY2UgY2FsbGJhY2suCkBAIC0yNjI5LDYgKzI3MzYsMTggQEAKICAqLwogdm9pZCBpZWVlODAyMTFfa2V5X3JlbW92ZWQoc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5X2NvbmYpOwogCisvKioKKyAqIGllZWU4MDIxMV9yZWFkeV9vbl9jaGFubmVsIC0gbm90aWZpY2F0aW9uIG9mIHJlbWFpbi1vbi1jaGFubmVsIHN0YXJ0CisgKiBAaHc6IHBvaW50ZXIgYXMgb2J0YWluZWQgZnJvbSBpZWVlODAyMTFfYWxsb2NfaHcoKQorICovCit2b2lkIGllZWU4MDIxMV9yZWFkeV9vbl9jaGFubmVsKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKKworLyoqCisgKiBpZWVlODAyMTFfcmVtYWluX29uX2NoYW5uZWxfZXhwaXJlZCAtIHJlbWFpbl9vbl9jaGFubmVsIGR1cmF0aW9uIGV4cGlyZWQKKyAqIEBodzogcG9pbnRlciBhcyBvYnRhaW5lZCBmcm9tIGllZWU4MDIxMV9hbGxvY19odygpCisgKi8KK3ZvaWQgaWVlZTgwMjExX3JlbWFpbl9vbl9jaGFubmVsX2V4cGlyZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworCiAvKiBSYXRlIGNvbnRyb2wgQVBJICovCiAKIC8qKgpAQCAtMjY2MCw3ICsyNzc5LDcgQEAKICAqIEByYXRlX2lkeF9tYXNrOiB1c2VyLXJlcXVlc3RlZCByYXRlIG1hc2sgKG5vdCBNQ1MgZm9yIG5vdykKICAqIEBza2I6IHRoZSBza2IgdGhhdCB3aWxsIGJlIHRyYW5zbWl0dGVkLCB0aGUgY29udHJvbCBpbmZvcm1hdGlvbiBpbiBpdCBuZWVkcwogICoJdG8gYmUgZmlsbGVkIGluCi0gKiBAYXA6IHdoZXRoZXIgdGhpcyBmcmFtZSBpcyBzZW50IG91dCBpbiBBUCBtb2RlCisgKiBAYnNzOiB3aGV0aGVyIHRoaXMgZnJhbWUgaXMgc2VudCBvdXQgaW4gQVAgb3IgSUJTUyBtb2RlCiAgKi8KIHN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZV9jb250cm9sIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKQEAgLTI2NzEsNyArMjc5MCw3IEBACiAJYm9vbCBydHMsIHNob3J0X3ByZWFtYmxlOwogCXU4IG1heF9yYXRlX2lkeDsKIAl1MzIgcmF0ZV9pZHhfbWFzazsKLQlib29sIGFwOworCWJvb2wgYnNzOwogfTsKIAogc3RydWN0IHJhdGVfY29udHJvbF9vcHMgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmRpc2MuaCBiL2luY2x1ZGUvbmV0L25kaXNjLmgKaW5kZXggODk1OTk3Yi4uZTBlNTk0ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmRpc2MuaAorKysgYi9pbmNsdWRlL25ldC9uZGlzYy5oCkBAIC00Miw5ICs0Miw2IEBACiAjZGVmaW5lIE5EX1JFQUNIQUJMRV9USU1FCQkoMzAqSFopCiAjZGVmaW5lIE5EX1JFVFJBTlNfVElNRVIJCUhaCiAKLSNkZWZpbmUgTkRfTUlOX1JBTkRPTV9GQUNUT1IJCSgxLzIpCi0jZGVmaW5lIE5EX01BWF9SQU5ET01fRkFDVE9SCQkoMy8yKQotCiAjaWZkZWYgX19LRVJORUxfXwogCiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25laWdoYm91ci5oIGIvaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmgKaW5kZXggNmJlYjFmZi4uNDAxNGI2MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmgKKysrIGIvaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmgKQEAgLTk2LDE2ICs5NiwxNiBAQAogCXN0cnVjdCBuZWlnaF9wYXJtcwkqcGFybXM7CiAJdW5zaWduZWQgbG9uZwkJY29uZmlybWVkOwogCXVuc2lnbmVkIGxvbmcJCXVwZGF0ZWQ7Ci0JX191OAkJCWZsYWdzOwotCV9fdTgJCQludWRfc3RhdGU7Ci0JX191OAkJCXR5cGU7Ci0JX191OAkJCWRlYWQ7CisJcndsb2NrX3QJCWxvY2s7CiAJYXRvbWljX3QJCXJlZmNudDsKIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkCWFycF9xdWV1ZTsKIAlzdHJ1Y3QgdGltZXJfbGlzdAl0aW1lcjsKIAl1bnNpZ25lZCBsb25nCQl1c2VkOwogCWF0b21pY190CQlwcm9iZXM7Ci0Jcndsb2NrX3QJCWxvY2s7CisJX191OAkJCWZsYWdzOworCV9fdTgJCQludWRfc3RhdGU7CisJX191OAkJCXR5cGU7CisJX191OAkJCWRlYWQ7CiAJc2VxbG9ja190CQloYV9sb2NrOwogCXVuc2lnbmVkIGNoYXIJCWhhW0FMSUdOKE1BWF9BRERSX0xFTiwgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKV07CiAJc3RydWN0IGhoX2NhY2hlCQkqaGg7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmgKaW5kZXggY2FmMTdkYi4uZDg1Y2ZmMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oCisrKyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaApAQCAtMjk4LDYgKzI5OCw4IEBACiBleHRlcm4gaW50IG5mX2Nvbm50cmFja19zZXRfaGFzaHNpemUoY29uc3QgY2hhciAqdmFsLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCk7CiBleHRlcm4gdW5zaWduZWQgaW50IG5mX2Nvbm50cmFja19odGFibGVfc2l6ZTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgbmZfY29ubnRyYWNrX21heDsKK2V4dGVybiB1bnNpZ25lZCBpbnQgbmZfY29ubnRyYWNrX2hhc2hfcm5kOwordm9pZCBpbml0X25mX2Nvbm50cmFja19oYXNoX3JuZCh2b2lkKTsKIAogI2RlZmluZSBORl9DVF9TVEFUX0lOQyhuZXQsIGNvdW50KQlcCiAJX190aGlzX2NwdV9pbmMoKG5ldCktPmN0LnN0YXQtPmNvdW50KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0bGluay5oIGIvaW5jbHVkZS9uZXQvbmV0bGluay5oCmluZGV4IDk4MDFjNTUuLjM3M2YxYTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldGxpbmsuaAorKysgYi9pbmNsdWRlL25ldC9uZXRsaW5rLmgKQEAgLTIyNSwxMyArMjI1LDE1IEBACiAJCQkJICAgICB1MzIgcGlkLCB1bnNpZ25lZCBpbnQgZ3JvdXAsIGludCByZXBvcnQsCiAJCQkJICAgICBnZnBfdCBmbGFncyk7CiAKLWV4dGVybiBpbnQJCW5sYV92YWxpZGF0ZShzdHJ1Y3QgbmxhdHRyICpoZWFkLCBpbnQgbGVuLCBpbnQgbWF4dHlwZSwKK2V4dGVybiBpbnQJCW5sYV92YWxpZGF0ZShjb25zdCBzdHJ1Y3QgbmxhdHRyICpoZWFkLAorCQkJCSAgICAgaW50IGxlbiwgaW50IG1heHR5cGUsCiAJCQkJICAgICBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSAqcG9saWN5KTsKLWV4dGVybiBpbnQJCW5sYV9wYXJzZShzdHJ1Y3QgbmxhdHRyICp0YltdLCBpbnQgbWF4dHlwZSwKLQkJCQkgIHN0cnVjdCBubGF0dHIgKmhlYWQsIGludCBsZW4sCitleHRlcm4gaW50CQlubGFfcGFyc2Uoc3RydWN0IG5sYXR0ciAqKnRiLCBpbnQgbWF4dHlwZSwKKwkJCQkgIGNvbnN0IHN0cnVjdCBubGF0dHIgKmhlYWQsIGludCBsZW4sCiAJCQkJICBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSAqcG9saWN5KTsKIGV4dGVybiBpbnQJCW5sYV9wb2xpY3lfbGVuKGNvbnN0IHN0cnVjdCBubGFfcG9saWN5ICosIGludCk7Ci1leHRlcm4gc3RydWN0IG5sYXR0ciAqCW5sYV9maW5kKHN0cnVjdCBubGF0dHIgKmhlYWQsIGludCBsZW4sIGludCBhdHRydHlwZSk7CitleHRlcm4gc3RydWN0IG5sYXR0ciAqCW5sYV9maW5kKGNvbnN0IHN0cnVjdCBubGF0dHIgKmhlYWQsCisJCQkJIGludCBsZW4sIGludCBhdHRydHlwZSk7CiBleHRlcm4gc2l6ZV90CQlubGFfc3RybGNweShjaGFyICpkc3QsIGNvbnN0IHN0cnVjdCBubGF0dHIgKm5sYSwKIAkJCQkgICAgc2l6ZV90IGRzdHNpemUpOwogZXh0ZXJuIGludAkJbmxhX21lbWNweSh2b2lkICpkZXN0LCBjb25zdCBzdHJ1Y3QgbmxhdHRyICpzcmMsIGludCBjb3VudCk7CkBAIC0zNDYsNyArMzQ4LDggQEAKICAqIFJldHVybnMgdGhlIG5leHQgbmV0bGluayBtZXNzYWdlIGluIHRoZSBtZXNzYWdlIHN0cmVhbSBhbmQKICAqIGRlY3JlbWVudHMgcmVtYWluaW5nIGJ5IHRoZSBzaXplIG9mIHRoZSBjdXJyZW50IG1lc3NhZ2UuCiAgKi8KLXN0YXRpYyBpbmxpbmUgc3RydWN0IG5sbXNnaGRyICpubG1zZ19uZXh0KHN0cnVjdCBubG1zZ2hkciAqbmxoLCBpbnQgKnJlbWFpbmluZykKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG5sbXNnaGRyICoKK25sbXNnX25leHQoY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsIGludCAqcmVtYWluaW5nKQogewogCWludCB0b3RsZW4gPSBOTE1TR19BTElHTihubGgtPm5sbXNnX2xlbik7CiAKQEAgLTM5OCw3ICs0MDEsOCBAQAogICogQG1heHR5cGU6IG1heGltdW0gYXR0cmlidXRlIHR5cGUgdG8gYmUgZXhwZWN0ZWQKICAqIEBwb2xpY3k6IHZhbGlkYXRpb24gcG9saWN5CiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IG5sbXNnX3ZhbGlkYXRlKHN0cnVjdCBubG1zZ2hkciAqbmxoLCBpbnQgaGRybGVuLCBpbnQgbWF4dHlwZSwKK3N0YXRpYyBpbmxpbmUgaW50IG5sbXNnX3ZhbGlkYXRlKGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLAorCQkJCSBpbnQgaGRybGVuLCBpbnQgbWF4dHlwZSwKIAkJCQkgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgKnBvbGljeSkKIHsKIAlpZiAobmxoLT5ubG1zZ19sZW4gPCBubG1zZ19tc2dfc2l6ZShoZHJsZW4pKQpAQCAtNzI3LDcgKzczMSw4IEBACiAgKgogICogUmV0dXJucyB0aGUgZmlyc3QgYXR0cmlidXRlIHdoaWNoIG1hdGNoZXMgdGhlIHNwZWNpZmllZCB0eXBlLgogICovCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBubGF0dHIgKm5sYV9maW5kX25lc3RlZChzdHJ1Y3QgbmxhdHRyICpubGEsIGludCBhdHRydHlwZSkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG5sYXR0ciAqCitubGFfZmluZF9uZXN0ZWQoY29uc3Qgc3RydWN0IG5sYXR0ciAqbmxhLCBpbnQgYXR0cnR5cGUpCiB7CiAJcmV0dXJuIG5sYV9maW5kKG5sYV9kYXRhKG5sYSksIG5sYV9sZW4obmxhKSwgYXR0cnR5cGUpOwogfQpAQCAtMTAzMiw3ICsxMDM3LDcgQEAKICAqCiAgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IG5sYV92YWxpZGF0ZV9uZXN0ZWQoc3RydWN0IG5sYXR0ciAqc3RhcnQsIGludCBtYXh0eXBlLAorc3RhdGljIGlubGluZSBpbnQgbmxhX3ZhbGlkYXRlX25lc3RlZChjb25zdCBzdHJ1Y3QgbmxhdHRyICpzdGFydCwgaW50IG1heHR5cGUsCiAJCQkJICAgICAgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgKnBvbGljeSkKIHsKIAlyZXR1cm4gbmxhX3ZhbGlkYXRlKG5sYV9kYXRhKHN0YXJ0KSwgbmxhX2xlbihzdGFydCksIG1heHR5cGUsIHBvbGljeSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRucy9nZW5lcmljLmggYi9pbmNsdWRlL25ldC9uZXRucy9nZW5lcmljLmgKaW5kZXggODFhMzFjMC4uMzQxOWJmNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0bnMvZ2VuZXJpYy5oCisrKyBiL2luY2x1ZGUvbmV0L25ldG5zL2dlbmVyaWMuaApAQCAtMzAsNyArMzAsNyBAQAogCXZvaWQgKnB0clswXTsKIH07CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCAqbmV0X2dlbmVyaWMoc3RydWN0IG5ldCAqbmV0LCBpbnQgaWQpCitzdGF0aWMgaW5saW5lIHZvaWQgKm5ldF9nZW5lcmljKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCwgaW50IGlkKQogewogCXN0cnVjdCBuZXRfZ2VuZXJpYyAqbmc7CiAJdm9pZCAqcHRyOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcmVndWxhdG9yeS5oIGIvaW5jbHVkZS9uZXQvcmVndWxhdG9yeS5oCmluZGV4IDllMTAzYTRlLi4zNTZkNmUzIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9yZWd1bGF0b3J5LmgKKysrIGIvaW5jbHVkZS9uZXQvcmVndWxhdG9yeS5oCkBAIC00Myw2ICs0MywxMiBAQAogICogQGludGVyc2VjdDogaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHdpcmVsZXNzIGNvcmUgc2hvdWxkIGludGVyc2VjdAogICogCXRoZSByZXF1ZXN0ZWQgcmVndWxhdG9yeSBkb21haW4gd2l0aCB0aGUgcHJlc2VudGx5IHNldCByZWd1bGF0b3J5CiAgKiAJZG9tYWluLgorICogQHByb2Nlc3NlZDogaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoaXMgcmVxdWVzdHMgaGFzIGFscmVhZHkgYmVlbgorICoJcHJvY2Vzc2VkLiBXaGVuIHRoZSBsYXN0IHJlcXVlc3QgaXMgcHJvY2Vzc2VkIGl0IG1lYW5zIHRoYXQgdGhlCisgKgljdXJyZW50bHkgcmVndWxhdG9yeSBkb21haW4gc2V0IG9uIGNmZzgwMjExIGlzIHVwZGF0ZWQgZnJvbQorICoJQ1JEQSBhbmQgY2FuIGJlIHVzZWQgYnkgb3RoZXIgcmVndWxhdG9yeSByZXF1ZXN0cy4gV2hlbiBhCisgKgl0aGUgbGFzdCByZXF1ZXN0IGlzIG5vdCB5ZXQgcHJvY2Vzc2VkIHdlIG11c3QgeWllbGQgdW50aWwgaXQKKyAqCWlzIHByb2Nlc3NlZCBiZWZvcmUgcHJvY2Vzc2luZyBhbnkgbmV3IHJlcXVlc3RzLgogICogQGNvdW50cnlfaWVfY2hlY2tzdW06IGNoZWNrc3VtIG9mIHRoZSBsYXN0IHByb2Nlc3NlZCBhbmQgYWNjZXB0ZWQKICAqIAljb3VudHJ5IElFCiAgKiBAY291bnRyeV9pZV9lbnY6IGxldHMgdXMga25vdyBpZiB0aGUgQVAgaXMgdGVsbGluZyB1cyB3ZSBhcmUgb3V0ZG9vciwKQEAgLTU0LDYgKzYwLDcgQEAKIAllbnVtIG5sODAyMTFfcmVnX2luaXRpYXRvciBpbml0aWF0b3I7CiAJY2hhciBhbHBoYTJbMl07CiAJYm9vbCBpbnRlcnNlY3Q7CisJYm9vbCBwcm9jZXNzZWQ7CiAJZW51bSBlbnZpcm9ubWVudF9jYXAgY291bnRyeV9pZV9lbnY7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3JvdXRlLmggYi9pbmNsdWRlL25ldC9yb3V0ZS5oCmluZGV4IDdlNWU3M2IuLjkzZTEwYzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3JvdXRlLmgKKysrIGIvaW5jbHVkZS9uZXQvcm91dGUuaApAQCAtNTUsOCArNTUsNiBAQAogCS8qIENhY2hlIGxvb2t1cCBrZXlzICovCiAJc3RydWN0IGZsb3dpCQlmbDsKIAotCXN0cnVjdCBpbl9kZXZpY2UJKmlkZXY7Ci0JCiAJaW50CQkJcnRfZ2VuaWQ7CiAJdW5zaWduZWQJCXJ0X2ZsYWdzOwogCV9fdTE2CQkJcnRfdHlwZTsKQEAgLTczLDYgKzcxLDE2IEBACiAJc3RydWN0IGluZXRfcGVlcgkqcGVlcjsgLyogbG9uZy1saXZpbmcgcGVlciBpbmZvICovCiB9OwogCitzdGF0aWMgaW5saW5lIGJvb2wgcnRfaXNfaW5wdXRfcm91dGUoc3RydWN0IHJ0YWJsZSAqcnQpCit7CisJcmV0dXJuIHJ0LT5mbC5paWYgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBib29sIHJ0X2lzX291dHB1dF9yb3V0ZShzdHJ1Y3QgcnRhYmxlICpydCkKK3sKKwlyZXR1cm4gcnQtPmZsLmlpZiA9PSAwOworfQorCiBzdHJ1Y3QgaXBfcnRfYWNjdCB7CiAJX191MzIgCW9fYnl0ZXM7CiAJX191MzIgCW9fcGFja2V0czsKQEAgLTEwNiw3ICsxMTQsNyBAQAogZXh0ZXJuIHZvaWQJCWlwX3J0X3JlZGlyZWN0KF9fYmUzMiBvbGRfZ3csIF9fYmUzMiBkc3QsIF9fYmUzMiBuZXdfZ3csCiAJCQkJICAgICAgIF9fYmUzMiBzcmMsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQJCXJ0X2NhY2hlX2ZsdXNoKHN0cnVjdCBuZXQgKm5ldCwgaW50IGhvdyk7Ci1leHRlcm4gdm9pZAkJcnRfY2FjaGVfZmx1c2hfYmF0Y2godm9pZCk7CitleHRlcm4gdm9pZAkJcnRfY2FjaGVfZmx1c2hfYmF0Y2goc3RydWN0IG5ldCAqbmV0KTsKIGV4dGVybiBpbnQJCV9faXBfcm91dGVfb3V0cHV0X2tleShzdHJ1Y3QgbmV0ICosIHN0cnVjdCBydGFibGUgKiosIGNvbnN0IHN0cnVjdCBmbG93aSAqZmxwKTsKIGV4dGVybiBpbnQJCWlwX3JvdXRlX291dHB1dF9rZXkoc3RydWN0IG5ldCAqLCBzdHJ1Y3QgcnRhYmxlICoqLCBzdHJ1Y3QgZmxvd2kgKmZscCk7CiBleHRlcm4gaW50CQlpcF9yb3V0ZV9vdXRwdXRfZmxvdyhzdHJ1Y3QgbmV0ICosIHN0cnVjdCBydGFibGUgKipycCwgc3RydWN0IGZsb3dpICpmbHAsIHN0cnVjdCBzb2NrICpzaywgaW50IGZsYWdzKTsKQEAgLTE2MSwxNCArMTY5LDEyIEBACiB7CiAJc3RydWN0IGZsb3dpIGZsID0geyAub2lmID0gb2lmLAogCQkJICAgIC5tYXJrID0gc2stPnNrX21hcmssCi0JCQkgICAgLm5sX3UgPSB7IC5pcDRfdSA9IHsgLmRhZGRyID0gZHN0LAotCQkJCQkJIC5zYWRkciA9IHNyYywKLQkJCQkJCSAudG9zICAgPSB0b3MgfSB9LAorCQkJICAgIC5mbDRfZHN0ID0gZHN0LAorCQkJICAgIC5mbDRfc3JjID0gc3JjLAorCQkJICAgIC5mbDRfdG9zID0gdG9zLAogCQkJICAgIC5wcm90byA9IHByb3RvY29sLAotCQkJICAgIC51bGlfdSA9IHsgLnBvcnRzID0KLQkJCQkgICAgICAgeyAuc3BvcnQgPSBzcG9ydCwKLQkJCQkJIC5kcG9ydCA9IGRwb3J0IH0gfSB9OwotCisJCQkgICAgLmZsX2lwX3Nwb3J0ID0gc3BvcnQsCisJCQkgICAgLmZsX2lwX2Rwb3J0ID0gZHBvcnQgfTsKIAlpbnQgZXJyOwogCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTsKIApAQCAtMjI1LDQgKzIzMSwxNSBAQAogCXJldHVybiBza2JfcnRhYmxlKHNrYiktPnJ0X2lpZjsKIH0KIAorZXh0ZXJuIGludCBzeXNjdGxfaXBfZGVmYXVsdF90dGw7CisKK3N0YXRpYyBpbmxpbmUgaW50IGlwNF9kc3RfaG9wbGltaXQoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KQoreworCWludCBob3BsaW1pdCA9IGRzdF9tZXRyaWNfcmF3KGRzdCwgUlRBWF9IT1BMSU1JVCk7CisKKwlpZiAoaG9wbGltaXQgPT0gMCkKKwkJaG9wbGltaXQgPSBzeXNjdGxfaXBfZGVmYXVsdF90dGw7CisJcmV0dXJuIGhvcGxpbWl0OworfQorCiAjZW5kaWYJLyogX1JPVVRFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3J0bmV0bGluay5oIGIvaW5jbHVkZS9uZXQvcnRuZXRsaW5rLmgKaW5kZXggZTAxM2M2OC4uNDA5M2NhNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvcnRuZXRsaW5rLmgKKysrIGIvaW5jbHVkZS9uZXQvcnRuZXRsaW5rLmgKQEAgLTgzLDYgKzgzLDQxIEBACiBleHRlcm4gaW50CXJ0bmxfbGlua19yZWdpc3RlcihzdHJ1Y3QgcnRubF9saW5rX29wcyAqb3BzKTsKIGV4dGVybiB2b2lkCXJ0bmxfbGlua191bnJlZ2lzdGVyKHN0cnVjdCBydG5sX2xpbmtfb3BzICpvcHMpOwogCisvKioKKyAqIAlzdHJ1Y3QgcnRubF9hZl9vcHMgLSBydG5ldGxpbmsgYWRkcmVzcyBmYW1pbHkgb3BlcmF0aW9ucworICoKKyAqCUBsaXN0OiBVc2VkIGludGVybmFsbHkKKyAqIAlAZmFtaWx5OiBBZGRyZXNzIGZhbWlseQorICogCUBmaWxsX2xpbmtfYWY6IEZ1bmN0aW9uIHRvIGZpbGwgSUZMQV9BRl9TUEVDIHdpdGggYWRkcmVzcyBmYW1pbHkKKyAqIAkJICAgICAgIHNwZWNpZmljIG5ldGxpbmsgYXR0cmlidXRlcy4KKyAqIAlAZ2V0X2xpbmtfYWZfc2l6ZTogRnVuY3Rpb24gdG8gY2FsY3VsYXRlIHNpemUgb2YgYWRkcmVzcyBmYW1pbHkgc3BlY2lmaWMKKyAqIAkJCSAgIG5ldGxpbmsgYXR0cmlidXRlcyBleGx1c2l2ZSB0aGUgY29udGFpbmVyIGF0dHJpYnV0ZS4KKyAqCUB2YWxpZGF0ZV9saW5rX2FmOiBWYWxpZGF0ZSBhIElGTEFfQUZfU1BFQyBhdHRyaWJ1dGUsIG11c3QgY2hlY2sgYXR0cgorICoJCQkgICBmb3IgaW52YWxpZCBjb25maWd1cmF0aW9uIHNldHRpbmdzLgorICogCUBzZXRfbGlua19hZjogRnVuY3Rpb24gdG8gcGFyc2UgYSBJRkxBX0FGX1NQRUMgYXR0cmlidXRlIGFuZCBtb2RpZnkKKyAqCQkgICAgICBuZXRfZGV2aWNlIGFjY29yZGluZ2x5LgorICovCitzdHJ1Y3QgcnRubF9hZl9vcHMgeworCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKKwlpbnQJCQlmYW1pbHk7CisKKwlpbnQJCQkoKmZpbGxfbGlua19hZikoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJCWNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworCXNpemVfdAkJCSgqZ2V0X2xpbmtfYWZfc2l6ZSkoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisKKwlpbnQJCQkoKnZhbGlkYXRlX2xpbmtfYWYpKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCQkgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cik7CisJaW50CQkJKCpzZXRfbGlua19hZikoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIpOworfTsKKworZXh0ZXJuIGludAlfX3J0bmxfYWZfcmVnaXN0ZXIoc3RydWN0IHJ0bmxfYWZfb3BzICpvcHMpOworZXh0ZXJuIHZvaWQJX19ydG5sX2FmX3VucmVnaXN0ZXIoc3RydWN0IHJ0bmxfYWZfb3BzICpvcHMpOworCitleHRlcm4gaW50CXJ0bmxfYWZfcmVnaXN0ZXIoc3RydWN0IHJ0bmxfYWZfb3BzICpvcHMpOworZXh0ZXJuIHZvaWQJcnRubF9hZl91bnJlZ2lzdGVyKHN0cnVjdCBydG5sX2FmX29wcyAqb3BzKTsKKworCiBleHRlcm4gc3RydWN0IG5ldCAqcnRubF9saW5rX2dldF9uZXQoc3RydWN0IG5ldCAqc3JjX25ldCwgc3RydWN0IG5sYXR0ciAqdGJbXSk7CiBleHRlcm4gc3RydWN0IG5ldF9kZXZpY2UgKnJ0bmxfY3JlYXRlX2xpbmsoc3RydWN0IG5ldCAqc3JjX25ldCwgc3RydWN0IG5ldCAqbmV0LAogCWNoYXIgKmlmbmFtZSwgY29uc3Qgc3RydWN0IHJ0bmxfbGlua19vcHMgKm9wcywgc3RydWN0IG5sYXR0ciAqdGJbXSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oIGIvaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaAppbmRleCA3OWYzNGUyLi4wYWY1N2ViIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oCisrKyBiL2luY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmgKQEAgLTMyMSw2ICszMjEsNyBAQAogZXh0ZXJuIHZvaWQgZGV2X3NodXRkb3duKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQgZGV2X2FjdGl2YXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQgZGV2X2RlYWN0aXZhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitleHRlcm4gdm9pZCBkZXZfZGVhY3RpdmF0ZV9tYW55KHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpOwogZXh0ZXJuIHN0cnVjdCBRZGlzYyAqZGV2X2dyYWZ0X3FkaXNjKHN0cnVjdCBuZXRkZXZfcXVldWUgKmRldl9xdWV1ZSwKIAkJCQkgICAgIHN0cnVjdCBRZGlzYyAqcWRpc2MpOwogZXh0ZXJuIHZvaWQgcWRpc2NfcmVzZXQoc3RydWN0IFFkaXNjICpxZGlzYyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY20uaCBiL2luY2x1ZGUvbmV0L3NjbS5oCmluZGV4IDMxNjU2NTAuLjc0NTQ2MGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NjbS5oCisrKyBiL2luY2x1ZGUvbmV0L3NjbS5oCkBAIC0xMCwxMSArMTAsMTIgQEAKIC8qIFdlbGwsIHdlIHNob3VsZCBoYXZlIGF0IGxlYXN0IG9uZSBkZXNjcmlwdG9yIG9wZW4KICAqIHRvIGFjY2VwdCBwYXNzZWQgRkRzIDgpCiAgKi8KLSNkZWZpbmUgU0NNX01BWF9GRAkyNTUKKyNkZWZpbmUgU0NNX01BWF9GRAkyNTMKIAogc3RydWN0IHNjbV9mcF9saXN0IHsKIAlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7Ci0JaW50CQkJY291bnQ7CisJc2hvcnQJCQljb3VudDsKKwlzaG9ydAkJCW1heDsKIAlzdHJ1Y3QgZmlsZQkJKmZwW1NDTV9NQVhfRkRdOwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2N0cC9jb21tYW5kLmggYi9pbmNsdWRlL25ldC9zY3RwL2NvbW1hbmQuaAppbmRleCAyYzU1YTdlLi5jMDFkYzk5IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zY3RwL2NvbW1hbmQuaAorKysgYi9pbmNsdWRlL25ldC9zY3RwL2NvbW1hbmQuaApAQCAtMTExLDkgKzExMSw2IEBACiAJU0NUUF9DTURfTEFTVAogfSBzY3RwX3ZlcmJfdDsKIAotI2RlZmluZSBTQ1RQX0NNRF9NQVgJCShTQ1RQX0NNRF9MQVNUIC0gMSkKLSNkZWZpbmUgU0NUUF9DTURfTlVNX1ZFUkJTCShTQ1RQX0NNRF9NQVggKyAxKQotCiAvKiBIb3cgbWFueSBjb21tYW5kcyBjYW4geW91IHB1dCBpbiBhbiBzY3RwX2NtZF9zZXFfdD8KICAqIFRoaXMgaXMgYSByYXRoZXIgYXJiaXRyYXJ5IG51bWJlciwgaWRlYWxseSBkZXJpdmVkIGZyb20gYSBjYXJlZnVsCiAgKiBhbmFseXNpcyBvZiB0aGUgc3RhdGUgZnVuY3Rpb25zLCBidXQgaW4gcmVhbGl0eSBqdXN0IHRha2VuIGZyb20KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NjdHAvY29uc3RhbnRzLmggYi9pbmNsdWRlL25ldC9zY3RwL2NvbnN0YW50cy5oCmluZGV4IDYzOTA4ODQuLmM3MGQ4Y2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NjdHAvY29uc3RhbnRzLmgKKysrIGIvaW5jbHVkZS9uZXQvc2N0cC9jb25zdGFudHMuaApAQCAtNjEsNyArNjEsNiBAQAogICogc3ltYm9scy4gIENJRHMgYXJlIGRlbnNlIHRocm91Z2ggU0NUUF9DSURfQkFTRV9NQVguCiAgKi8KICNkZWZpbmUgU0NUUF9DSURfQkFTRV9NQVgJCVNDVFBfQ0lEX1NIVVRET1dOX0NPTVBMRVRFCi0jZGVmaW5lIFNDVFBfQ0lEX01BWAkJCVNDVFBfQ0lEX0FTQ09ORl9BQ0sKIAogI2RlZmluZSBTQ1RQX05VTV9CQVNFX0NIVU5LX1RZUEVTCShTQ1RQX0NJRF9CQVNFX01BWCArIDEpCiAKQEAgLTg2LDkgKzg1LDYgQEAKIAogfSBzY3RwX2V2ZW50X3Q7CiAKLSNkZWZpbmUgU0NUUF9FVkVOVF9UX01BWCBTQ1RQX0VWRU5UX1RfUFJJTUlUSVZFCi0jZGVmaW5lIFNDVFBfRVZFTlRfVF9OVU0gKFNDVFBfRVZFTlRfVF9NQVggKyAxKQotCiAvKiBBcyBhIGNvbnZlbmllbmNlIGZvciB0aGUgc3RhdGUgbWFjaGluZSwgd2UgYXBwZW5kIFNDVFBfRVZFTlRfKiBhbmQKICAqIFNDVFBfVUxQXyogdG8gdGhlIGxpc3Qgb2YgcG9zc2libGUgY2h1bmtzLgogICovCkBAIC0xNjIsOSArMTU4LDYgQEAKIAkJICAgICAgIAkJLSAodW5zaWduZWQgbG9uZykoYy0+Y2h1bmtfaGRyKVwKIAkJCQktIHNpemVvZihzY3RwX2RhdGFfY2h1bmtfdCkpKQogCi0jZGVmaW5lIFNDVFBfTUFYX0VSUk9SX0NBVVNFICBTQ1RQX0VSUk9SX05PTkVYSVNUX0lQCi0jZGVmaW5lIFNDVFBfTlVNX0VSUk9SX0NBVVNFICAxMAotCiAvKiBJbnRlcm5hbCBlcnJvciBjb2RlcyAqLwogdHlwZWRlZiBlbnVtIHsKIApAQCAtMjY2LDcgKzI1OSw2IEBACiAjZGVmaW5lIFNDVFBfVFNOX01BUF9JTklUSUFMIEJJVFNfUEVSX0xPTkcKICNkZWZpbmUgU0NUUF9UU05fTUFQX0lOQ1JFTUVOVCBTQ1RQX1RTTl9NQVBfSU5JVElBTAogI2RlZmluZSBTQ1RQX1RTTl9NQVBfU0laRSA0MDk2Ci0jZGVmaW5lIFNDVFBfVFNOX01BWF9HQVAgIDY1NTM1CiAKIC8qIFdlIHdpbGwgbm90IHJlY29yZCBtb3JlIHRoYW4gdGhpcyBtYW55IGR1cGxpY2F0ZSBUU05zIGJldHdlZW4gdHdvCiAgKiBTQUNLcy4gIFRoZSBtaW5pbXVtIFBNVFUgaXMgNTc2LiAgUmVtb3ZlIGFsbCB0aGUgaGVhZGVycyBhbmQgdGhlcmUKQEAgLTMwMSw5ICsyOTMsNiBAQAogCiAjZGVmaW5lIFNDVFBfQ0xPQ0tfR1JBTlVMQVJJVFkJMQkvKiAxIGppZmZ5ICovCiAKLSNkZWZpbmUgU0NUUF9ERUZfTUFYX0lOSVQgNgotI2RlZmluZSBTQ1RQX0RFRl9NQVhfU0VORCAxMAotCiAjZGVmaW5lIFNDVFBfREVGQVVMVF9DT09LSUVfTElGRQkoNjAgKiAxMDAwKSAvKiA2MCBzZWNvbmRzICovCiAKICNkZWZpbmUgU0NUUF9ERUZBVUxUX01JTldJTkRPVwkxNTAwCS8qIGRlZmF1bHQgbWluaW11bSByd25kIHNpemUgKi8KQEAgLTMxNyw5ICszMDYsNiBAQAogCQkJCQkgKi8KICNkZWZpbmUgU0NUUF9ERUZBVUxUX01JTlNFR01FTlQgNTEyCS8qIE1UVSBzaXplIC4uLiBpZiBubyBtdHUgZGlzYyAqLwogI2RlZmluZSBTQ1RQX0hPV19NQU5ZX1NFQ1JFVFMgMgkJLyogSG93IG1hbnkgc2VjcmV0cyBJIGtlZXAgKi8KLSNkZWZpbmUgU0NUUF9IT1dfTE9OR19DT09LSUVfTElWRSAzNjAwCS8qIEhvdyBtYW55IHNlY29uZHMgdGhlIGN1cnJlbnQKLQkJCQkJICogc2VjcmV0IHdpbGwgbGl2ZT8KLQkJCQkJICovCiAjZGVmaW5lIFNDVFBfU0VDUkVUX1NJWkUgMzIJCS8qIE51bWJlciBvZiBvY3RldHMgaW4gYSAyNTYgYml0cy4gKi8KIAogI2RlZmluZSBTQ1RQX1NJR05BVFVSRV9TSVpFIDIwCSAgICAgICAgLyogc2l6ZSBvZiBhIFNMQS0xIHNpZ25hdHVyZSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmggYi9pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaAppbmRleCA2OWZlZjRmLi5jYzkxODVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaAorKysgYi9pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaApAQCAtMjYxLDggKzI2MSw2IEBACiAjZGVmaW5lIHNjdHBfYXNzb2NfaGFzaHNpemUJCShzY3RwX2dsb2JhbHMuYXNzb2NfaGFzaHNpemUpCiAjZGVmaW5lIHNjdHBfYXNzb2NfaGFzaHRhYmxlCQkoc2N0cF9nbG9iYWxzLmFzc29jX2hhc2h0YWJsZSkKICNkZWZpbmUgc2N0cF9wb3J0X2hhc2hzaXplCQkoc2N0cF9nbG9iYWxzLnBvcnRfaGFzaHNpemUpCi0jZGVmaW5lIHNjdHBfcG9ydF9yb3ZlcgkJCShzY3RwX2dsb2JhbHMucG9ydF9yb3ZlcikKLSNkZWZpbmUgc2N0cF9wb3J0X2FsbG9jX2xvY2sJCShzY3RwX2dsb2JhbHMucG9ydF9hbGxvY19sb2NrKQogI2RlZmluZSBzY3RwX3BvcnRfaGFzaHRhYmxlCQkoc2N0cF9nbG9iYWxzLnBvcnRfaGFzaHRhYmxlKQogI2RlZmluZSBzY3RwX2xvY2FsX2FkZHJfbGlzdAkJKHNjdHBfZ2xvYmFscy5sb2NhbF9hZGRyX2xpc3QpCiAjZGVmaW5lIHNjdHBfbG9jYWxfYWRkcl9sb2NrCQkoc2N0cF9nbG9iYWxzLmFkZHJfbGlzdF9sb2NrKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc25tcC5oIGIvaW5jbHVkZS9uZXQvc25tcC5oCmluZGV4IGEwZTYxODAuLjc2MmUyYWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NubXAuaAorKysgYi9pbmNsdWRlL25ldC9zbm1wLmgKQEAgLTYwLDkgKzYwLDcgQEAKIH07CiAKIC8qIElDTVAgKi8KLSNkZWZpbmUgSUNNUF9NSUJfRFVNTVkJX19JQ01QX01JQl9NQVgKLSNkZWZpbmUgSUNNUF9NSUJfTUFYCShfX0lDTVBfTUlCX01BWCArIDEpCi0KKyNkZWZpbmUgSUNNUF9NSUJfTUFYCV9fSUNNUF9NSUJfTUFYCiBzdHJ1Y3QgaWNtcF9taWIgewogCXVuc2lnbmVkIGxvbmcJbWlic1tJQ01QX01JQl9NQVhdOwogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NvY2suaCBiL2luY2x1ZGUvbmV0L3NvY2suaAppbmRleCA3ZDNmN2NlLi4yMWEwMmY3IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zb2NrLmgKKysrIGIvaW5jbHVkZS9uZXQvc29jay5oCkBAIC01Nyw3ICs1Nyw3IEBACiAjaW5jbHVkZSA8bGludXgvcmN1bGlzdF9udWxscy5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KIAotI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlIDxsaW51eC9hdG9taWMuaD4KICNpbmNsdWRlIDxuZXQvZHN0Lmg+CiAjaW5jbHVkZSA8bmV0L2NoZWNrc3VtLmg+CiAKQEAgLTEwNSwxMCArMTA1LDggQEAKIAogLyoqCiAgKglzdHJ1Y3Qgc29ja19jb21tb24gLSBtaW5pbWFsIG5ldHdvcmsgbGF5ZXIgcmVwcmVzZW50YXRpb24gb2Ygc29ja2V0cwotICoJQHNrY19ub2RlOiBtYWluIGhhc2ggbGlua2FnZSBmb3IgdmFyaW91cyBwcm90b2NvbCBsb29rdXAgdGFibGVzCi0gKglAc2tjX251bGxzX25vZGU6IG1haW4gaGFzaCBsaW5rYWdlIGZvciBUQ1AvVURQL1VEUC1MaXRlIHByb3RvY29sCi0gKglAc2tjX3JlZmNudDogcmVmZXJlbmNlIGNvdW50Ci0gKglAc2tjX3R4X3F1ZXVlX21hcHBpbmc6IHR4IHF1ZXVlIG51bWJlciBmb3IgdGhpcyBjb25uZWN0aW9uCisgKglAc2tjX2RhZGRyOiBGb3JlaWduIElQdjQgYWRkcgorICoJQHNrY19yY3Zfc2FkZHI6IEJvdW5kIGxvY2FsIElQdjQgYWRkcgogICoJQHNrY19oYXNoOiBoYXNoIHZhbHVlIHVzZWQgd2l0aCB2YXJpb3VzIHByb3RvY29sIGxvb2t1cCB0YWJsZXMKICAqCUBza2NfdTE2aGFzaGVzOiB0d28gdTE2IGhhc2ggdmFsdWVzIHVzZWQgYnkgVURQIGxvb2t1cCB0YWJsZXMKICAqCUBza2NfZmFtaWx5OiBuZXR3b3JrIGFkZHJlc3MgZmFtaWx5CkBAIC0xMTksMjAgKzExNywyMCBAQAogICoJQHNrY19wb3J0YWRkcl9ub2RlOiBzZWNvbmQgaGFzaCBsaW5rYWdlIGZvciBVRFAvVURQLUxpdGUgcHJvdG9jb2wKICAqCUBza2NfcHJvdDogcHJvdG9jb2wgaGFuZGxlcnMgaW5zaWRlIGEgbmV0d29yayBmYW1pbHkKICAqCUBza2NfbmV0OiByZWZlcmVuY2UgdG8gdGhlIG5ldHdvcmsgbmFtZXNwYWNlIG9mIHRoaXMgc29ja2V0CisgKglAc2tjX25vZGU6IG1haW4gaGFzaCBsaW5rYWdlIGZvciB2YXJpb3VzIHByb3RvY29sIGxvb2t1cCB0YWJsZXMKKyAqCUBza2NfbnVsbHNfbm9kZTogbWFpbiBoYXNoIGxpbmthZ2UgZm9yIFRDUC9VRFAvVURQLUxpdGUgcHJvdG9jb2wKKyAqCUBza2NfdHhfcXVldWVfbWFwcGluZzogdHggcXVldWUgbnVtYmVyIGZvciB0aGlzIGNvbm5lY3Rpb24KKyAqCUBza2NfcmVmY250OiByZWZlcmVuY2UgY291bnQKICAqCiAgKglUaGlzIGlzIHRoZSBtaW5pbWFsIG5ldHdvcmsgbGF5ZXIgcmVwcmVzZW50YXRpb24gb2Ygc29ja2V0cywgdGhlIGhlYWRlcgogICoJZm9yIHN0cnVjdCBzb2NrIGFuZCBzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrLgogICovCiBzdHJ1Y3Qgc29ja19jb21tb24gewotCS8qCi0JICogZmlyc3QgZmllbGRzIGFyZSBub3QgY29waWVkIGluIHNvY2tfY29weSgpCisJLyogc2tjX2RhZGRyIGFuZCBza2NfcmN2X3NhZGRyIG11c3QgYmUgZ3JvdXBlZCA6CisJICogY2YgSU5FVF9NQVRDSCgpIGFuZCBJTkVUX1RXX01BVENIKCkKIAkgKi8KLQl1bmlvbiB7Ci0JCXN0cnVjdCBobGlzdF9ub2RlCXNrY19ub2RlOwotCQlzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSBza2NfbnVsbHNfbm9kZTsKLQl9OwotCWF0b21pY190CQlza2NfcmVmY250OwotCWludAkJCXNrY190eF9xdWV1ZV9tYXBwaW5nOworCV9fYmUzMgkJCXNrY19kYWRkcjsKKwlfX2JlMzIJCQlza2NfcmN2X3NhZGRyOwogCiAJdW5pb24gIHsKIAkJdW5zaWduZWQgaW50CXNrY19oYXNoOwpAQCAtMTUwLDYgKzE0OCwxOCBAQAogI2lmZGVmIENPTkZJR19ORVRfTlMKIAlzdHJ1Y3QgbmV0CSAJKnNrY19uZXQ7CiAjZW5kaWYKKwkvKgorCSAqIGZpZWxkcyBiZXR3ZWVuIGRvbnRjb3B5X2JlZ2luL2RvbnRjb3B5X2VuZAorCSAqIGFyZSBub3QgY29waWVkIGluIHNvY2tfY29weSgpCisJICovCisJaW50CQkJc2tjX2RvbnRjb3B5X2JlZ2luWzBdOworCXVuaW9uIHsKKwkJc3RydWN0IGhsaXN0X25vZGUJc2tjX25vZGU7CisJCXN0cnVjdCBobGlzdF9udWxsc19ub2RlIHNrY19udWxsc19ub2RlOworCX07CisJaW50CQkJc2tjX3R4X3F1ZXVlX21hcHBpbmc7CisJYXRvbWljX3QJCXNrY19yZWZjbnQ7CisJaW50ICAgICAgICAgICAgICAgICAgICAgc2tjX2RvbnRjb3B5X2VuZFswXTsKIH07CiAKIC8qKgpAQCAtMjMyLDcgKzI0Miw4IEBACiAjZGVmaW5lIHNrX3JlZmNudAkJX19za19jb21tb24uc2tjX3JlZmNudAogI2RlZmluZSBza190eF9xdWV1ZV9tYXBwaW5nCV9fc2tfY29tbW9uLnNrY190eF9xdWV1ZV9tYXBwaW5nCiAKLSNkZWZpbmUgc2tfY29weV9zdGFydAkJX19za19jb21tb24uc2tjX2hhc2gKKyNkZWZpbmUgc2tfZG9udGNvcHlfYmVnaW4JX19za19jb21tb24uc2tjX2RvbnRjb3B5X2JlZ2luCisjZGVmaW5lIHNrX2RvbnRjb3B5X2VuZAkJX19za19jb21tb24uc2tjX2RvbnRjb3B5X2VuZAogI2RlZmluZSBza19oYXNoCQkJX19za19jb21tb24uc2tjX2hhc2gKICNkZWZpbmUgc2tfZmFtaWx5CQlfX3NrX2NvbW1vbi5za2NfZmFtaWx5CiAjZGVmaW5lIHNrX3N0YXRlCQlfX3NrX2NvbW1vbi5za2Nfc3RhdGUKQEAgLTI0MSw2ICsyNTIsNDcgQEAKICNkZWZpbmUgc2tfYmluZF9ub2RlCQlfX3NrX2NvbW1vbi5za2NfYmluZF9ub2RlCiAjZGVmaW5lIHNrX3Byb3QJCQlfX3NrX2NvbW1vbi5za2NfcHJvdAogI2RlZmluZSBza19uZXQJCQlfX3NrX2NvbW1vbi5za2NfbmV0CisJc29ja2V0X2xvY2tfdAkJc2tfbG9jazsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkCXNrX3JlY2VpdmVfcXVldWU7CisJLyoKKwkgKiBUaGUgYmFja2xvZyBxdWV1ZSBpcyBzcGVjaWFsLCBpdCBpcyBhbHdheXMgdXNlZCB3aXRoCisJICogdGhlIHBlci1zb2NrZXQgc3BpbmxvY2sgaGVsZCBhbmQgcmVxdWlyZXMgbG93IGxhdGVuY3kKKwkgKiBhY2Nlc3MuIFRoZXJlZm9yZSB3ZSBzcGVjaWFsIGNhc2UgaXQncyBpbXBsZW1lbnRhdGlvbi4KKwkgKiBOb3RlIDogcm1lbV9hbGxvYyBpcyBpbiB0aGlzIHN0cnVjdHVyZSB0byBmaWxsIGEgaG9sZQorCSAqIG9uIDY0Yml0IGFyY2hlcywgbm90IGJlY2F1c2UgaXRzIGxvZ2ljYWxseSBwYXJ0IG9mCisJICogYmFja2xvZy4KKwkgKi8KKwlzdHJ1Y3QgeworCQlhdG9taWNfdAlybWVtX2FsbG9jOworCQlpbnQJCWxlbjsKKwkJc3RydWN0IHNrX2J1ZmYJKmhlYWQ7CisJCXN0cnVjdCBza19idWZmCSp0YWlsOworCX0gc2tfYmFja2xvZzsKKyNkZWZpbmUgc2tfcm1lbV9hbGxvYyBza19iYWNrbG9nLnJtZW1fYWxsb2MKKwlpbnQJCQlza19mb3J3YXJkX2FsbG9jOworI2lmZGVmIENPTkZJR19SUFMKKwlfX3UzMgkJCXNrX3J4aGFzaDsKKyNlbmRpZgorCWF0b21pY190CQlza19kcm9wczsKKwlpbnQJCQlza19yY3ZidWY7CisKKwlzdHJ1Y3Qgc2tfZmlsdGVyIF9fcmN1CSpza19maWx0ZXI7CisJc3RydWN0IHNvY2tldF93cQkqc2tfd3E7CisKKyNpZmRlZiBDT05GSUdfTkVUX0RNQQorCXN0cnVjdCBza19idWZmX2hlYWQJc2tfYXN5bmNfd2FpdF9xdWV1ZTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1hGUk0KKwlzdHJ1Y3QgeGZybV9wb2xpY3kJKnNrX3BvbGljeVsyXTsKKyNlbmRpZgorCXVuc2lnbmVkIGxvbmcgCQlza19mbGFnczsKKwlzdHJ1Y3QgZHN0X2VudHJ5CSpza19kc3RfY2FjaGU7CisJc3BpbmxvY2tfdAkJc2tfZHN0X2xvY2s7CisJYXRvbWljX3QJCXNrX3dtZW1fYWxsb2M7CisJYXRvbWljX3QJCXNrX29tZW1fYWxsb2M7CisJaW50CQkJc2tfc25kYnVmOworCXN0cnVjdCBza19idWZmX2hlYWQJc2tfd3JpdGVfcXVldWU7CiAJa21lbWNoZWNrX2JpdGZpZWxkX2JlZ2luKGZsYWdzKTsKIAl1bnNpZ25lZCBpbnQJCXNrX3NodXRkb3duICA6IDIsCiAJCQkJc2tfbm9fY2hlY2sgIDogMiwKQEAgLTI0OCw1MiArMzAwLDE5IEBACiAJCQkJc2tfcHJvdG9jb2wgIDogOCwKIAkJCQlza190eXBlICAgICAgOiAxNjsKIAlrbWVtY2hlY2tfYml0ZmllbGRfZW5kKGZsYWdzKTsKLQlpbnQJCQlza19yY3ZidWY7Ci0Jc29ja2V0X2xvY2tfdAkJc2tfbG9jazsKLQkvKgotCSAqIFRoZSBiYWNrbG9nIHF1ZXVlIGlzIHNwZWNpYWwsIGl0IGlzIGFsd2F5cyB1c2VkIHdpdGgKLQkgKiB0aGUgcGVyLXNvY2tldCBzcGlubG9jayBoZWxkIGFuZCByZXF1aXJlcyBsb3cgbGF0ZW5jeQotCSAqIGFjY2Vzcy4gVGhlcmVmb3JlIHdlIHNwZWNpYWwgY2FzZSBpdCdzIGltcGxlbWVudGF0aW9uLgotCSAqLwotCXN0cnVjdCB7Ci0JCXN0cnVjdCBza19idWZmICpoZWFkOwotCQlzdHJ1Y3Qgc2tfYnVmZiAqdGFpbDsKLQkJaW50IGxlbjsKLQl9IHNrX2JhY2tsb2c7Ci0Jc3RydWN0IHNvY2tldF93cQkqc2tfd3E7Ci0Jc3RydWN0IGRzdF9lbnRyeQkqc2tfZHN0X2NhY2hlOwotI2lmZGVmIENPTkZJR19YRlJNCi0Jc3RydWN0IHhmcm1fcG9saWN5CSpza19wb2xpY3lbMl07Ci0jZW5kaWYKLQlzcGlubG9ja190CQlza19kc3RfbG9jazsKLQlhdG9taWNfdAkJc2tfcm1lbV9hbGxvYzsKLQlhdG9taWNfdAkJc2tfd21lbV9hbGxvYzsKLQlhdG9taWNfdAkJc2tfb21lbV9hbGxvYzsKLQlpbnQJCQlza19zbmRidWY7Ci0Jc3RydWN0IHNrX2J1ZmZfaGVhZAlza19yZWNlaXZlX3F1ZXVlOwotCXN0cnVjdCBza19idWZmX2hlYWQJc2tfd3JpdGVfcXVldWU7Ci0jaWZkZWYgQ09ORklHX05FVF9ETUEKLQlzdHJ1Y3Qgc2tfYnVmZl9oZWFkCXNrX2FzeW5jX3dhaXRfcXVldWU7Ci0jZW5kaWYKIAlpbnQJCQlza193bWVtX3F1ZXVlZDsKLQlpbnQJCQlza19mb3J3YXJkX2FsbG9jOwogCWdmcF90CQkJc2tfYWxsb2NhdGlvbjsKIAlpbnQJCQlza19yb3V0ZV9jYXBzOwogCWludAkJCXNrX3JvdXRlX25vY2FwczsKIAlpbnQJCQlza19nc29fdHlwZTsKIAl1bnNpZ25lZCBpbnQJCXNrX2dzb19tYXhfc2l6ZTsKIAlpbnQJCQlza19yY3Zsb3dhdDsKLSNpZmRlZiBDT05GSUdfUlBTCi0JX191MzIJCQlza19yeGhhc2g7Ci0jZW5kaWYKLQl1bnNpZ25lZCBsb25nIAkJc2tfZmxhZ3M7CiAJdW5zaWduZWQgbG9uZwkgICAgICAgIHNrX2xpbmdlcnRpbWU7CiAJc3RydWN0IHNrX2J1ZmZfaGVhZAlza19lcnJvcl9xdWV1ZTsKIAlzdHJ1Y3QgcHJvdG8JCSpza19wcm90X2NyZWF0b3I7CiAJcndsb2NrX3QJCXNrX2NhbGxiYWNrX2xvY2s7CiAJaW50CQkJc2tfZXJyLAogCQkJCXNrX2Vycl9zb2Z0OwotCWF0b21pY190CQlza19kcm9wczsKIAl1bnNpZ25lZCBzaG9ydAkJc2tfYWNrX2JhY2tsb2c7CiAJdW5zaWduZWQgc2hvcnQJCXNrX21heF9hY2tfYmFja2xvZzsKIAlfX3UzMgkJCXNrX3ByaW9yaXR5OwpAQCAtMzAxLDcgKzMyMCw2IEBACiAJY29uc3Qgc3RydWN0IGNyZWQJKnNrX3BlZXJfY3JlZDsKIAlsb25nCQkJc2tfcmN2dGltZW87CiAJbG9uZwkJCXNrX3NuZHRpbWVvOwotCXN0cnVjdCBza19maWx0ZXIgX19yY3UJKnNrX2ZpbHRlcjsKIAl2b2lkCQkJKnNrX3Byb3RpbmZvOwogCXN0cnVjdCB0aW1lcl9saXN0CXNrX3RpbWVyOwogCWt0aW1lX3QJCQlza19zdGFtcDsKQEAgLTUwOSw5ICs1MjcsNiBAQAogI2RlZmluZSBza19udWxsc19mb3JfZWFjaF9mcm9tKF9fc2ssIG5vZGUpIFwKIAlpZiAoX19zayAmJiAoeyBub2RlID0gJihfX3NrKS0+c2tfbnVsbHNfbm9kZTsgMTsgfSkpIFwKIAkJaGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfZnJvbShfX3NrLCBub2RlLCBza19udWxsc19ub2RlKQotI2RlZmluZSBza19mb3JfZWFjaF9jb250aW51ZShfX3NrLCBub2RlKSBcCi0JaWYgKF9fc2sgJiYgKHsgbm9kZSA9ICYoX19zayktPnNrX25vZGU7IDE7IH0pKSBcCi0JCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlKF9fc2ssIG5vZGUsIHNrX25vZGUpCiAjZGVmaW5lIHNrX2Zvcl9lYWNoX3NhZmUoX19zaywgbm9kZSwgdG1wLCBsaXN0KSBcCiAJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShfX3NrLCBub2RlLCB0bXAsIGxpc3QsIHNrX25vZGUpCiAjZGVmaW5lIHNrX2Zvcl9lYWNoX2JvdW5kKF9fc2ssIG5vZGUsIGxpc3QpIFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3RjcC5oIGIvaW5jbHVkZS9uZXQvdGNwLmgKaW5kZXggZTM2Yzg3NC4uMzg1MDlmMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvdGNwLmgKKysrIGIvaW5jbHVkZS9uZXQvdGNwLmgKQEAgLTYwLDYgKzYwLDkgQEAKICAqLwogI2RlZmluZSBNQVhfVENQX1dJTkRPVwkJMzI3NjdVCiAKKy8qIE9mZmVyIGFuIGluaXRpYWwgcmVjZWl2ZSB3aW5kb3cgb2YgMTAgbXNzLiAqLworI2RlZmluZSBUQ1BfREVGQVVMVF9JTklUX1JDVldORAkxMAorCiAvKiBNaW5pbWFsIGFjY2VwdGVkIE1TUy4gSXQgaXMgKDYwKzYwKzgpIC0gKDIwKzIwKS4gKi8KICNkZWZpbmUgVENQX01JTl9NU1MJCTg4VQogCkBAIC0xMDAsMTIgKzEwMyw2IEBACiAjZGVmaW5lIFRDUF9TWU5BQ0tfUkVUUklFUyA1CS8qIG51bWJlciBvZiB0aW1lcyB0byByZXRyeSBwYXNzaXZlIG9wZW5pbmcgYQogCQkJCSAqIGNvbm5lY3Rpb246IH4xODBzZWMgaXMgUkZDIG1pbmltdW0JKi8KIAotCi0jZGVmaW5lIFRDUF9PUlBIQU5fUkVUUklFUyA3CS8qIG51bWJlciBvZiB0aW1lcyB0byByZXRyeSBvbiBhbiBvcnBoYW5lZAotCQkJCSAqIHNvY2tldC4gNyBpcyB+NTBzZWMtMTZtaW4uCi0JCQkJICovCi0KLQogI2RlZmluZSBUQ1BfVElNRVdBSVRfTEVOICg2MCpIWikgLyogaG93IGxvbmcgdG8gd2FpdCB0byBkZXN0cm95IFRJTUUtV0FJVAogCQkJCSAgKiBzdGF0ZSwgYWJvdXQgNjAgc2Vjb25kcwkqLwogI2RlZmluZSBUQ1BfRklOX1RJTUVPVVQJVENQX1RJTUVXQUlUX0xFTgpAQCAtMzEyLDcgKzMwOSw4IEBACiAKIGV4dGVybiBpbnQgdGNwX3Y0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAotZXh0ZXJuIGludCB0Y3BfdjRfcmVtZW1iZXJfc3RhbXAoc3RydWN0IHNvY2sgKnNrKTsKK2V4dGVybiBzdHJ1Y3QgaW5ldF9wZWVyICp0Y3BfdjRfZ2V0X3BlZXIoc3RydWN0IHNvY2sgKnNrLCBib29sICpyZWxlYXNlX2l0KTsKK2V4dGVybiB2b2lkICp0Y3BfdjRfdHdfZ2V0X3BlZXIoc3RydWN0IHNvY2sgKnNrKTsKIGV4dGVybiBpbnQgdGNwX3Y0X3R3X3JlbWVtYmVyX3N0YW1wKHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sgKnR3KTsKIGV4dGVybiBpbnQgdGNwX3NlbmRtc2coc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywKIAkJICAgICAgIHNpemVfdCBzaXplKTsKQEAgLTEwNDMsNyArMTA0MSwxMyBAQAogCQlyZXR1cm4gMTsKIAlpZiAodW5saWtlbHkoZ2V0X3NlY29uZHMoKSA+PSByeF9vcHQtPnRzX3JlY2VudF9zdGFtcCArIFRDUF9QQVdTXzI0REFZUykpCiAJCXJldHVybiAxOwotCisJLyoKKwkgKiBTb21lIE9TZXMgc2VuZCBTWU4gYW5kIFNZTkFDSyBtZXNzYWdlcyB3aXRoIHRzdmFsPTAgdHNlY3I9MCwKKwkgKiB0aGVuIGZvbGxvd2luZyB0Y3AgbWVzc2FnZXMgaGF2ZSB2YWxpZCB2YWx1ZXMuIElnbm9yZSAwIHZhbHVlLAorCSAqIG9yIGVsc2UgJ25lZ2F0aXZlJyB0c3ZhbCBtaWdodCBmb3JiaWQgdXMgdG8gYWNjZXB0IHRoZWlyIHBhY2tldHMuCisJICovCisJaWYgKCFyeF9vcHQtPnRzX3JlY2VudCkKKwkJcmV0dXJuIDE7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTExNTcsOCArMTE2MSw2IEBACiAJdW5pb24gdGNwX21kNXN1bV9ibG9jawltZDVfYmxrOwogfTsKIAotI2RlZmluZSBUQ1BfTUQ1U0lHX01BWEtFWVMJKH4odTMyKTApCS8qIHJlYWxseT8hICovCi0KIC8qIC0gZnVuY3Rpb25zICovCiBleHRlcm4gaW50IHRjcF92NF9tZDVfaGFzaF9za2IoY2hhciAqbWQ1X2hhc2gsIHN0cnVjdCB0Y3BfbWQ1c2lnX2tleSAqa2V5LAogCQkJICAgICAgIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvdGltZXdhaXRfc29jay5oIGIvaW5jbHVkZS9uZXQvdGltZXdhaXRfc29jay5oCmluZGV4IDk3YzNiMTQuLjA1M2IzY2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3RpbWV3YWl0X3NvY2suaAorKysgYi9pbmNsdWRlL25ldC90aW1ld2FpdF9zb2NrLmgKQEAgLTIxLDYgKzIxLDcgQEAKIAlpbnQJCSgqdHdza191bmlxdWUpKHN0cnVjdCBzb2NrICpzaywKIAkJCQkgICAgICAgc3RydWN0IHNvY2sgKnNrdHcsIHZvaWQgKnR3cCk7CiAJdm9pZAkJKCp0d3NrX2Rlc3RydWN0b3IpKHN0cnVjdCBzb2NrICpzayk7CisJdm9pZAkJKigqdHdza19nZXRwZWVyKShzdHJ1Y3Qgc29jayAqc2spOwogfTsKIAogc3RhdGljIGlubGluZSBpbnQgdHdza191bmlxdWUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc2t0dywgdm9pZCAqdHdwKQpAQCAtMzksNCArNDAsMTEgQEAKIAkJc2stPnNrX3Byb3QtPnR3c2tfcHJvdC0+dHdza19kZXN0cnVjdG9yKHNrKTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkICp0d3NrX2dldHBlZXIoc3RydWN0IHNvY2sgKnNrKQoreworCWlmIChzay0+c2tfcHJvdC0+dHdza19wcm90LT50d3NrX2dldHBlZXIpCisJCXJldHVybiBzay0+c2tfcHJvdC0+dHdza19wcm90LT50d3NrX2dldHBlZXIoc2spOworCXJldHVybiBOVUxMOworfQorCiAjZW5kaWYgLyogX1RJTUVXQUlUX1NPQ0tfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvdGlwYy90aXBjLmggYi9pbmNsdWRlL25ldC90aXBjL3RpcGMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWUwNjQ1ZS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL25ldC90aXBjL3RpcGMuaAorKysgL2Rldi9udWxsCkBAIC0xLDE4NiArMCwwIEBACi0vKgotICogaW5jbHVkZS9uZXQvdGlwYy90aXBjLmg6IE1haW4gaW5jbHVkZSBmaWxlIGZvciBUSVBDIHVzZXJzCi0gKiAKLSAqIENvcHlyaWdodCAoYykgMjAwMy0yMDA2LCBFcmljc3NvbiBBQgotICogQ29weXJpZ2h0IChjKSAyMDA1LDIwMTAgV2luZCBSaXZlciBTeXN0ZW1zCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZXMgb2YgdGhlIGNvcHlyaWdodCBob2xkZXJzIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBBbHRlcm5hdGl2ZWx5LCB0aGlzIHNvZnR3YXJlIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoIkdQTCIpIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKLSAqIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCi0gKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCi0gKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIF9ORVRfVElQQ19IXwotI2RlZmluZSBfTkVUX1RJUENfSF8KLQotI2lmZGVmIF9fS0VSTkVMX18KLQotI2luY2x1ZGUgPGxpbnV4L3RpcGMuaD4KLSNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KLQotLyogCi0gKiBOYXRpdmUgQVBJCi0gKi8KLQotLyoKLSAqIFRJUEMgb3BlcmF0aW5nIG1vZGUgcm91dGluZXMKLSAqLwotCi0jZGVmaW5lIFRJUENfTk9UX1JVTk5JTkcgIDAKLSNkZWZpbmUgVElQQ19OT0RFX01PREUgICAgMQotI2RlZmluZSBUSVBDX05FVF9NT0RFICAgICAyCi0KLXR5cGVkZWYgdm9pZCAoKnRpcGNfbW9kZV9ldmVudCkodm9pZCAqdXNyX2hhbmRsZSwgaW50IG1vZGUsIHUzMiBhZGRyKTsKLQotaW50IHRpcGNfYXR0YWNoKHVuc2lnbmVkIGludCAqdXNlcnJlZiwgdGlwY19tb2RlX2V2ZW50LCB2b2lkICp1c3JfaGFuZGxlKTsKLQotdm9pZCB0aXBjX2RldGFjaCh1bnNpZ25lZCBpbnQgdXNlcnJlZik7Ci0KLS8qCi0gKiBUSVBDIHBvcnQgbWFuaXB1bGF0aW9uIHJvdXRpbmVzCi0gKi8KLQotdHlwZWRlZiB2b2lkICgqdGlwY19tc2dfZXJyX2V2ZW50KSAodm9pZCAqdXNyX2hhbmRsZSwKLQkJCQkgICAgdTMyIHBvcnRyZWYsCi0JCQkJICAgIHN0cnVjdCBza19idWZmICoqYnVmLAotCQkJCSAgICB1bnNpZ25lZCBjaGFyIGNvbnN0ICpkYXRhLAotCQkJCSAgICB1bnNpZ25lZCBpbnQgc2l6ZSwKLQkJCQkgICAgaW50IHJlYXNvbiwgCi0JCQkJICAgIHN0cnVjdCB0aXBjX3BvcnRpZCBjb25zdCAqYXR0bXB0X2Rlc3RpZCk7Ci0KLXR5cGVkZWYgdm9pZCAoKnRpcGNfbmFtZWRfbXNnX2Vycl9ldmVudCkgKHZvaWQgKnVzcl9oYW5kbGUsCi0JCQkJCSAgdTMyIHBvcnRyZWYsCi0JCQkJCSAgc3RydWN0IHNrX2J1ZmYgKipidWYsCi0JCQkJCSAgdW5zaWduZWQgY2hhciBjb25zdCAqZGF0YSwKLQkJCQkJICB1bnNpZ25lZCBpbnQgc2l6ZSwKLQkJCQkJICBpbnQgcmVhc29uLCAKLQkJCQkJICBzdHJ1Y3QgdGlwY19uYW1lX3NlcSBjb25zdCAqYXR0bXB0X2Rlc3QpOwotCi10eXBlZGVmIHZvaWQgKCp0aXBjX2Nvbm5fc2h1dGRvd25fZXZlbnQpICh2b2lkICp1c3JfaGFuZGxlLAotCQkJCQkgIHUzMiBwb3J0cmVmLAotCQkJCQkgIHN0cnVjdCBza19idWZmICoqYnVmLAotCQkJCQkgIHVuc2lnbmVkIGNoYXIgY29uc3QgKmRhdGEsCi0JCQkJCSAgdW5zaWduZWQgaW50IHNpemUsCi0JCQkJCSAgaW50IHJlYXNvbik7Ci0KLXR5cGVkZWYgdm9pZCAoKnRpcGNfbXNnX2V2ZW50KSAodm9pZCAqdXNyX2hhbmRsZSwKLQkJCQl1MzIgcG9ydHJlZiwKLQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqKmJ1ZiwKLQkJCQl1bnNpZ25lZCBjaGFyIGNvbnN0ICpkYXRhLAotCQkJCXVuc2lnbmVkIGludCBzaXplLAotCQkJCXVuc2lnbmVkIGludCBpbXBvcnRhbmNlLCAKLQkJCQlzdHJ1Y3QgdGlwY19wb3J0aWQgY29uc3QgKm9yaWdpbik7Ci0KLXR5cGVkZWYgdm9pZCAoKnRpcGNfbmFtZWRfbXNnX2V2ZW50KSAodm9pZCAqdXNyX2hhbmRsZSwKLQkJCQkgICAgICB1MzIgcG9ydHJlZiwKLQkJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqKmJ1ZiwKLQkJCQkgICAgICB1bnNpZ25lZCBjaGFyIGNvbnN0ICpkYXRhLAotCQkJCSAgICAgIHVuc2lnbmVkIGludCBzaXplLAotCQkJCSAgICAgIHVuc2lnbmVkIGludCBpbXBvcnRhbmNlLCAKLQkJCQkgICAgICBzdHJ1Y3QgdGlwY19wb3J0aWQgY29uc3QgKm9yaWcsCi0JCQkJICAgICAgc3RydWN0IHRpcGNfbmFtZV9zZXEgY29uc3QgKmRlc3QpOwotCi10eXBlZGVmIHZvaWQgKCp0aXBjX2Nvbm5fbXNnX2V2ZW50KSAodm9pZCAqdXNyX2hhbmRsZSwKLQkJCQkgICAgIHUzMiBwb3J0cmVmLAotCQkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKipidWYsCi0JCQkJICAgICB1bnNpZ25lZCBjaGFyIGNvbnN0ICpkYXRhLAotCQkJCSAgICAgdW5zaWduZWQgaW50IHNpemUpOwotCi10eXBlZGVmIHZvaWQgKCp0aXBjX2NvbnRpbnVlX2V2ZW50KSAodm9pZCAqdXNyX2hhbmRsZSwgCi0JCQkJICAgICB1MzIgcG9ydHJlZik7Ci0KLWludCB0aXBjX2NyZWF0ZXBvcnQodW5zaWduZWQgaW50IHRpcGNfdXNlciwgCi0JCSAgICB2b2lkICp1c3JfaGFuZGxlLCAKLQkJICAgIHVuc2lnbmVkIGludCBpbXBvcnRhbmNlLCAKLQkJICAgIHRpcGNfbXNnX2Vycl9ldmVudCBlcnJvcl9jYiwgCi0JCSAgICB0aXBjX25hbWVkX21zZ19lcnJfZXZlbnQgbmFtZWRfZXJyb3JfY2IsIAotCQkgICAgdGlwY19jb25uX3NodXRkb3duX2V2ZW50IGNvbm5fZXJyb3JfY2IsIAotCQkgICAgdGlwY19tc2dfZXZlbnQgbWVzc2FnZV9jYiwgCi0JCSAgICB0aXBjX25hbWVkX21zZ19ldmVudCBuYW1lZF9tZXNzYWdlX2NiLCAKLQkJICAgIHRpcGNfY29ubl9tc2dfZXZlbnQgY29ubl9tZXNzYWdlX2NiLCAKLQkJICAgIHRpcGNfY29udGludWVfZXZlbnQgY29udGludWVfZXZlbnRfY2IsCi0JCSAgICB1MzIgKnBvcnRyZWYpOwotCi1pbnQgdGlwY19kZWxldGVwb3J0KHUzMiBwb3J0cmVmKTsKLQotaW50IHRpcGNfb3duaWRlbnRpdHkodTMyIHBvcnRyZWYsIHN0cnVjdCB0aXBjX3BvcnRpZCAqcG9ydCk7Ci0KLWludCB0aXBjX3BvcnRpbXBvcnRhbmNlKHUzMiBwb3J0cmVmLCB1bnNpZ25lZCBpbnQgKmltcG9ydGFuY2UpOwotaW50IHRpcGNfc2V0X3BvcnRpbXBvcnRhbmNlKHUzMiBwb3J0cmVmLCB1bnNpZ25lZCBpbnQgaW1wb3J0YW5jZSk7Ci0KLWludCB0aXBjX3BvcnR1bnJlbGlhYmxlKHUzMiBwb3J0cmVmLCB1bnNpZ25lZCBpbnQgKmlzdW5yZWxpYWJsZSk7Ci1pbnQgdGlwY19zZXRfcG9ydHVucmVsaWFibGUodTMyIHBvcnRyZWYsIHVuc2lnbmVkIGludCBpc3VucmVsaWFibGUpOwotCi1pbnQgdGlwY19wb3J0dW5yZXR1cm5hYmxlKHUzMiBwb3J0cmVmLCB1bnNpZ25lZCBpbnQgKmlzdW5yZXR1cm5hYmxlKTsKLWludCB0aXBjX3NldF9wb3J0dW5yZXR1cm5hYmxlKHUzMiBwb3J0cmVmLCB1bnNpZ25lZCBpbnQgaXN1bnJldHVybmFibGUpOwotCi1pbnQgdGlwY19wdWJsaXNoKHUzMiBwb3J0cmVmLCB1bnNpZ25lZCBpbnQgc2NvcGUsIAotCQkgc3RydWN0IHRpcGNfbmFtZV9zZXEgY29uc3QgKm5hbWVfc2VxKTsKLWludCB0aXBjX3dpdGhkcmF3KHUzMiBwb3J0cmVmLCB1bnNpZ25lZCBpbnQgc2NvcGUsCi0JCSAgc3RydWN0IHRpcGNfbmFtZV9zZXEgY29uc3QgKm5hbWVfc2VxKTsKLQotaW50IHRpcGNfY29ubmVjdDJwb3J0KHUzMiBwb3J0cmVmLCBzdHJ1Y3QgdGlwY19wb3J0aWQgY29uc3QgKnBvcnQpOwotCi1pbnQgdGlwY19kaXNjb25uZWN0KHUzMiBwb3J0cmVmKTsKLQotaW50IHRpcGNfc2h1dGRvd24odTMyIHJlZik7Ci0KLS8qCi0gKiBUSVBDIG1lc3NhZ2luZyByb3V0aW5lcwotICovCi0KLSNkZWZpbmUgVElQQ19QT1JUX0lNUE9SVEFOQ0UgMTAwCS8qIHNlbmQgdXNpbmcgY3VycmVudCBwb3J0IHNldHRpbmcgKi8KLQotCi1pbnQgdGlwY19zZW5kKHUzMiBwb3J0cmVmLAotCSAgICAgIHVuc2lnbmVkIGludCBudW1fc2VjdCwKLQkgICAgICBzdHJ1Y3QgaW92ZWMgY29uc3QgKm1zZ19zZWN0KTsKLQotaW50IHRpcGNfc2VuZDJuYW1lKHUzMiBwb3J0cmVmLCAKLQkJICAgc3RydWN0IHRpcGNfbmFtZSBjb25zdCAqbmFtZSwgCi0JCSAgIHUzMiBkb21haW4sCi0JCSAgIHVuc2lnbmVkIGludCBudW1fc2VjdCwKLQkJICAgc3RydWN0IGlvdmVjIGNvbnN0ICptc2dfc2VjdCk7Ci0KLWludCB0aXBjX3NlbmQycG9ydCh1MzIgcG9ydHJlZiwKLQkJICAgc3RydWN0IHRpcGNfcG9ydGlkIGNvbnN0ICpkZXN0LAotCQkgICB1bnNpZ25lZCBpbnQgbnVtX3NlY3QsCi0JCSAgIHN0cnVjdCBpb3ZlYyBjb25zdCAqbXNnX3NlY3QpOwotCi1pbnQgdGlwY19zZW5kX2J1ZjJwb3J0KHUzMiBwb3J0cmVmLAotCQkgICAgICAgc3RydWN0IHRpcGNfcG9ydGlkIGNvbnN0ICpkZXN0LAotCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKmJ1ZiwKLQkJICAgICAgIHVuc2lnbmVkIGludCBkc3opOwotCi1pbnQgdGlwY19tdWx0aWNhc3QodTMyIHBvcnRyZWYsIAotCQkgICBzdHJ1Y3QgdGlwY19uYW1lX3NlcSBjb25zdCAqc2VxLCAKLQkJICAgdTMyIGRvbWFpbiwJLyogY3VycmVudGx5IHVudXNlZCAqLwotCQkgICB1bnNpZ25lZCBpbnQgc2VjdGlvbl9jb3VudCwKLQkJICAgc3RydWN0IGlvdmVjIGNvbnN0ICptc2cpOwotI2VuZGlmCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvdGlwYy90aXBjX2JlYXJlci5oIGIvaW5jbHVkZS9uZXQvdGlwYy90aXBjX2JlYXJlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZTJmMzA0Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbmV0L3RpcGMvdGlwY19iZWFyZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDEzOCArMCwwIEBACi0vKgotICogaW5jbHVkZS9uZXQvdGlwYy90aXBjX2JlYXJlci5oOiBJbmNsdWRlIGZpbGUgZm9yIHByaXZpbGVnZWQgYWNjZXNzIHRvIFRJUEMgYmVhcmVycwotICogCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwNiwgRXJpY3Nzb24gQUIKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgV2luZCBSaXZlciBTeXN0ZW1zCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZXMgb2YgdGhlIGNvcHlyaWdodCBob2xkZXJzIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBBbHRlcm5hdGl2ZWx5LCB0aGlzIHNvZnR3YXJlIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoIkdQTCIpIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKLSAqIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCi0gKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCi0gKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIF9ORVRfVElQQ19CRUFSRVJfSF8KLSNkZWZpbmUgX05FVF9USVBDX0JFQVJFUl9IXwotCi0jaWZkZWYgX19LRVJORUxfXwotCi0jaW5jbHVkZSA8bGludXgvdGlwY19jb25maWcuaD4KLSNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotCi0vKgotICogSWRlbnRpZmllcnMgb2Ygc3VwcG9ydGVkIFRJUEMgbWVkaWEgdHlwZXMKLSAqLwotCi0jZGVmaW5lIFRJUENfTUVESUFfVFlQRV9FVEgJMQotCi0vKiAKLSAqIERlc3RpbmF0aW9uIGFkZHJlc3Mgc3RydWN0dXJlIHVzZWQgYnkgVElQQyBiZWFyZXJzIHdoZW4gc2VuZGluZyBtZXNzYWdlcwotICogCi0gKiBJTVBPUlRBTlQ6IFRoZSBmaWVsZHMgb2YgdGhpcyBzdHJ1Y3R1cmUgTVVTVCBiZSBzdG9yZWQgdXNpbmcgdGhlIHNwZWNpZmllZAotICogYnl0ZSBvcmRlciBpbmRpY2F0ZWQgYmVsb3csIGFzIHRoZSBzdHJ1Y3R1cmUgaXMgZXhjaGFuZ2VkIGJldHdlZW4gbm9kZXMKLSAqIGFzIHBhcnQgb2YgYSBsaW5rIHNldHVwIHByb2Nlc3MuCi0gKi8KLQotc3RydWN0IHRpcGNfbWVkaWFfYWRkciB7Ci0JX19iZTMyICB0eXBlOwkJCS8qIGJlYXJlciB0eXBlIChuZXR3b3JrIGJ5dGUgb3JkZXIpICovCi0JdW5pb24gewotCQlfX3U4ICAgZXRoX2FkZHJbNl07CS8qIDQ4IGJpdCBFdGhlcm5ldCBhZGRyIChieXRlIGFycmF5KSAqLyAKLSNpZiAwCi0JCS8qIFByb3RvdHlwZXMgZm9yIG90aGVyIHBvc3NpYmxlIGJlYXJlciB0eXBlcyAqLwotCi0JCXN0cnVjdCB7Ci0JCQlfX3UxNiBzaW5fZmFtaWx5OwotCQkJX191MTYgc2luX3BvcnQ7Ci0JCQlzdHJ1Y3QgewotCQkJCV9fdTMyIHNfYWRkcjsKLQkJCX0gc2luX2FkZHI7Ci0JCQljaGFyIHBhZFs0XTsKLQkJfSBhZGRyX2luOwkJLyogSVAtYmFzZWQgYmVhcmVyICovCi0JCV9fdTE2ICBzb2NrX2Rlc2NyOwkvKiBnZW5lcmljIHNvY2tldCBiZWFyZXIgKi8KLSNlbmRpZgotCX0gZGV2X2FkZHI7Ci19OwotCi0vKioKLSAqIHN0cnVjdCB0aXBjX2JlYXJlciAtIFRJUEMgYmVhcmVyIGluZm8gYXZhaWxhYmxlIHRvIHByaXZpbGVnZWQgdXNlcnMKLSAqIEB1c3JfaGFuZGxlOiBwb2ludGVyIHRvIGFkZGl0aW9uYWwgdXNlci1kZWZpbmVkIGluZm9ybWF0aW9uIGFib3V0IGJlYXJlcgotICogQG10dTogbWF4IHBhY2tldCBzaXplIGJlYXJlciBjYW4gc3VwcG9ydAotICogQGJsb2NrZWQ6IG5vbi16ZXJvIGlmIGJlYXJlciBpcyBibG9ja2VkCi0gKiBAbG9jazogc3BpbmxvY2sgZm9yIGNvbnRyb2xsaW5nIGFjY2VzcyB0byBiZWFyZXIKLSAqIEBhZGRyOiBtZWRpYS1zcGVjaWZpYyBhZGRyZXNzIGFzc29jaWF0ZWQgd2l0aCBiZWFyZXIKLSAqIEBuYW1lOiBiZWFyZXIgbmFtZSAoZm9ybWF0ID0gbWVkaWE6aW50ZXJmYWNlKQotICogCi0gKiBOb3RlOiBUSVBDIGluaXRpYWxpemVzICJuYW1lIiBhbmQgImxvY2siIGZpZWxkczsgdXNlciBpcyByZXNwb25zaWJsZSBmb3IKLSAqIGluaXRpYWxpemF0aW9uIGFsbCBvdGhlciBmaWVsZHMgd2hlbiBhIGJlYXJlciBpcyBlbmFibGVkLgotICovCi0KLXN0cnVjdCB0aXBjX2JlYXJlciB7Ci0Jdm9pZCAqdXNyX2hhbmRsZTsKLQl1MzIgbXR1OwotCWludCBibG9ja2VkOwotCXNwaW5sb2NrX3QgbG9jazsKLQlzdHJ1Y3QgdGlwY19tZWRpYV9hZGRyIGFkZHI7Ci0JY2hhciBuYW1lW1RJUENfTUFYX0JFQVJFUl9OQU1FXTsKLX07Ci0KLS8qCi0gKiBUSVBDIHJvdXRpbmVzIGF2YWlsYWJsZSB0byBzdXBwb3J0ZWQgbWVkaWEgdHlwZXMKLSAqLwotCi1pbnQgIHRpcGNfcmVnaXN0ZXJfbWVkaWEodTMyIG1lZGlhX3R5cGUsCi0JCQkgY2hhciAqbWVkaWFfbmFtZSwgCi0JCQkgaW50ICgqZW5hYmxlKShzdHJ1Y3QgdGlwY19iZWFyZXIgKiksIAotCQkJIHZvaWQgKCpkaXNhYmxlKShzdHJ1Y3QgdGlwY19iZWFyZXIgKiksIAotCQkJIGludCAoKnNlbmRfbXNnKShzdHJ1Y3Qgc2tfYnVmZiAqLCAKLQkJCQkJIHN0cnVjdCB0aXBjX2JlYXJlciAqLAotCQkJCQkgc3RydWN0IHRpcGNfbWVkaWFfYWRkciAqKSwgCi0JCQkgY2hhciAqKCphZGRyMnN0cikoc3RydWN0IHRpcGNfbWVkaWFfYWRkciAqYSwKLQkJCQkJICAgY2hhciAqc3RyX2J1ZiwKLQkJCQkJICAgaW50IHN0cl9zaXplKSwKLQkJCSBzdHJ1Y3QgdGlwY19tZWRpYV9hZGRyICpiY2FzdF9hZGRyLAotCQkJIGNvbnN0IHUzMiBiZWFyZXJfcHJpb3JpdHksCi0JCQkgY29uc3QgdTMyIGxpbmtfdG9sZXJhbmNlLCAgLyogW21zXSAqLwotCQkJIGNvbnN0IHUzMiBzZW5kX3dpbmRvd19saW1pdCk7IAotCi12b2lkIHRpcGNfcmVjdl9tc2coc3RydWN0IHNrX2J1ZmYgKmJ1Ziwgc3RydWN0IHRpcGNfYmVhcmVyICp0Yl9wdHIpOwotCi1pbnQgIHRpcGNfYmxvY2tfYmVhcmVyKGNvbnN0IGNoYXIgKm5hbWUpOwotdm9pZCB0aXBjX2NvbnRpbnVlKHN0cnVjdCB0aXBjX2JlYXJlciAqdGJfcHRyKTsgCi0KLWludCB0aXBjX2VuYWJsZV9iZWFyZXIoY29uc3QgY2hhciAqYmVhcmVyX25hbWUsIHUzMiBiY2FzdF9zY29wZSwgdTMyIHByaW9yaXR5KTsKLWludCB0aXBjX2Rpc2FibGVfYmVhcmVyKGNvbnN0IGNoYXIgKm5hbWUpOwotCi0vKgotICogUm91dGluZXMgbWFkZSBhdmFpbGFibGUgdG8gVElQQyBieSBzdXBwb3J0ZWQgbWVkaWEgdHlwZXMKLSAqLwotCi1pbnQgIHRpcGNfZXRoX21lZGlhX3N0YXJ0KHZvaWQpOwotdm9pZCB0aXBjX2V0aF9tZWRpYV9zdG9wKHZvaWQpOwotCi0jZW5kaWYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC90aXBjL3RpcGNfbXNnLmggYi9pbmNsdWRlL25ldC90aXBjL3RpcGNfbXNnLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmZTUwYjRlLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbmV0L3RpcGMvdGlwY19tc2cuaAorKysgL2Rldi9udWxsCkBAIC0xLDIwNyArMCwwIEBACi0vKgotICogaW5jbHVkZS9uZXQvdGlwYy90aXBjX21zZy5oOiBJbmNsdWRlIGZpbGUgZm9yIHByaXZpbGVnZWQgYWNjZXNzIHRvIFRJUEMgbWVzc2FnZSBoZWFkZXJzCi0gKiAKLSAqIENvcHlyaWdodCAoYykgMjAwMy0yMDA2LCBFcmljc3NvbiBBQgotICogQ29weXJpZ2h0IChjKSAyMDA1LCBXaW5kIFJpdmVyIFN5c3RlbXMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lcyBvZiB0aGUgY29weXJpZ2h0IGhvbGRlcnMgbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIEFsdGVybmF0aXZlbHksIHRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQotICogU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKLSAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKLSAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgX05FVF9USVBDX01TR19IXwotI2RlZmluZSBfTkVUX1RJUENfTVNHX0hfCi0KLSNpZmRlZiBfX0tFUk5FTF9fCi0KLXN0cnVjdCB0aXBjX21zZyB7Ci0JX19iZTMyIGhkclsxNV07Ci19OwotCi0KLS8qCi0JCVRJUEMgdXNlciBkYXRhIG1lc3NhZ2UgaGVhZGVyIGZvcm1hdCwgdmVyc2lvbiAyOgotCi0KLSAgICAgICAxIDAgOSA4IDcgNiA1IDR8MyAyIDEgMCA5IDggNyA2fDUgNCAzIDIgMSAwIDkgOHw3IDYgNSA0IDMgMiAxIDAgCi0gICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgdzA6fHZlcnMgfCB1c2VyICB8aGRyIHN6IHxufGR8c3wtfCAgICAgICAgICBtZXNzYWdlIHNpemUgICAgICAgICAgIHwKLSAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICB3MTp8bXN0eXB8IGVycm9yIHxyZXIgY250fGxzY3xvcHQgcHwgICAgICBicm9hZGNhc3QgYWNrIG5vICAgICAgICAgfAotICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgIHcyOnwgICAgICAgIGxpbmsgbGV2ZWwgYWNrIG5vICAgICAgfCAgIGJyb2FkY2FzdC9saW5rIGxldmVsIHNlcSBubyB8Ci0gICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgdzM6fCAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXMgbm9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICB3NDp8ICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmF0aW5nIHBvcnQgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgIHc1OnwgICAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb24gcG9ydCAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKyAgICAKLSAgIHc2OnwgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYXRpbmcgbm9kZSAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgdzc6fCAgICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbiBub2RlICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICB3ODp8ICAgICAgICAgICAgbmFtZSB0eXBlIC8gdHJhbnNwb3J0IHNlcXVlbmNlIG51bWJlciAgICAgICAgICAgICAgfAotICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgIHc5OnwgICAgICAgICAgICAgIG5hbWUgaW5zdGFuY2UvbXVsdGljYXN0IGxvd2VyIGJvdW5kICAgICAgICAgICAgICB8Ci0gICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKyAgICAKLSAgIHdBOnwgICAgICAgICAgICAgICAgICAgIG11bHRpY2FzdCB1cHBlciBib3VuZCAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKyAgICAKLSAgICAgIC8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvCi0gICAgICBcICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8KLSAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0KLSovCi0KLSNkZWZpbmUgVElQQ19DT05OX01TRwkwCi0jZGVmaW5lIFRJUENfTUNBU1RfTVNHCTEKLSNkZWZpbmUgVElQQ19OQU1FRF9NU0cJMgotI2RlZmluZSBUSVBDX0RJUkVDVF9NU0cJMwotCi0KLXN0YXRpYyBpbmxpbmUgdTMyIG1zZ193b3JkKHN0cnVjdCB0aXBjX21zZyAqbSwgdTMyIHBvcykKLXsKLQlyZXR1cm4gbnRvaGwobS0+aGRyW3Bvc10pOwotfQotCi1zdGF0aWMgaW5saW5lIHUzMiBtc2dfYml0cyhzdHJ1Y3QgdGlwY19tc2cgKm0sIHUzMiB3LCB1MzIgcG9zLCB1MzIgbWFzaykKLXsKLQlyZXR1cm4gKG1zZ193b3JkKG0sIHcpID4+IHBvcykgJiBtYXNrOwotfQotCi1zdGF0aWMgaW5saW5lIHUzMiBtc2dfaW1wb3J0YW5jZShzdHJ1Y3QgdGlwY19tc2cgKm0pCi17Ci0JcmV0dXJuIG1zZ19iaXRzKG0sIDAsIDI1LCAweGYpOwotfQotCi1zdGF0aWMgaW5saW5lIHUzMiBtc2dfaGRyX3N6KHN0cnVjdCB0aXBjX21zZyAqbSkKLXsKLQlyZXR1cm4gbXNnX2JpdHMobSwgMCwgMjEsIDB4ZikgPDwgMjsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgbXNnX3Nob3J0KHN0cnVjdCB0aXBjX21zZyAqbSkKLXsKLQlyZXR1cm4gbXNnX2hkcl9zeihtKSA9PSAyNDsKLX0KLQotc3RhdGljIGlubGluZSB1MzIgbXNnX3NpemUoc3RydWN0IHRpcGNfbXNnICptKQotewotCXJldHVybiBtc2dfYml0cyhtLCAwLCAwLCAweDFmZmZmKTsKLX0KLQotc3RhdGljIGlubGluZSB1MzIgbXNnX2RhdGFfc3ooc3RydWN0IHRpcGNfbXNnICptKQotewotCXJldHVybiBtc2dfc2l6ZShtKSAtIG1zZ19oZHJfc3oobSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5jaGFyICptc2dfZGF0YShzdHJ1Y3QgdGlwY19tc2cgKm0pCi17Ci0JcmV0dXJuICgodW5jaGFyICopbSkgKyBtc2dfaGRyX3N6KG0pOwotfQotCi1zdGF0aWMgaW5saW5lIHUzMiBtc2dfdHlwZShzdHJ1Y3QgdGlwY19tc2cgKm0pCi17Ci0JcmV0dXJuIG1zZ19iaXRzKG0sIDEsIDI5LCAweDcpOwotfQotCi1zdGF0aWMgaW5saW5lIHUzMiBtc2dfbmFtZWQoc3RydWN0IHRpcGNfbXNnICptKQotewotCXJldHVybiBtc2dfdHlwZShtKSA9PSBUSVBDX05BTUVEX01TRzsKLX0KLQotc3RhdGljIGlubGluZSB1MzIgbXNnX21jYXN0KHN0cnVjdCB0aXBjX21zZyAqbSkKLXsKLQlyZXR1cm4gbXNnX3R5cGUobSkgPT0gVElQQ19NQ0FTVF9NU0c7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTMyIG1zZ19jb25uZWN0ZWQoc3RydWN0IHRpcGNfbXNnICptKQotewotCXJldHVybiBtc2dfdHlwZShtKSA9PSBUSVBDX0NPTk5fTVNHOwotfQotCi1zdGF0aWMgaW5saW5lIHUzMiBtc2dfZXJyY29kZShzdHJ1Y3QgdGlwY19tc2cgKm0pCi17Ci0JcmV0dXJuIG1zZ19iaXRzKG0sIDEsIDI1LCAweGYpOwotfQotCi1zdGF0aWMgaW5saW5lIHUzMiBtc2dfcHJldm5vZGUoc3RydWN0IHRpcGNfbXNnICptKQotewotCXJldHVybiBtc2dfd29yZChtLCAzKTsKLX0KLQotc3RhdGljIGlubGluZSB1MzIgbXNnX29yaWdwb3J0KHN0cnVjdCB0aXBjX21zZyAqbSkKLXsKLQlyZXR1cm4gbXNnX3dvcmQobSwgNCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTMyIG1zZ19kZXN0cG9ydChzdHJ1Y3QgdGlwY19tc2cgKm0pCi17Ci0JcmV0dXJuIG1zZ193b3JkKG0sIDUpOwotfQotCi1zdGF0aWMgaW5saW5lIHUzMiBtc2dfbWNfbmV0aWQoc3RydWN0IHRpcGNfbXNnICptKQotewotCXJldHVybiBtc2dfd29yZChtLCA1KTsKLX0KLQotc3RhdGljIGlubGluZSB1MzIgbXNnX29yaWdub2RlKHN0cnVjdCB0aXBjX21zZyAqbSkKLXsKLQlpZiAobGlrZWx5KG1zZ19zaG9ydChtKSkpCi0JCXJldHVybiBtc2dfcHJldm5vZGUobSk7Ci0JcmV0dXJuIG1zZ193b3JkKG0sIDYpOwotfQotCi1zdGF0aWMgaW5saW5lIHUzMiBtc2dfZGVzdG5vZGUoc3RydWN0IHRpcGNfbXNnICptKQotewotCXJldHVybiBtc2dfd29yZChtLCA3KTsKLX0KLQotc3RhdGljIGlubGluZSB1MzIgbXNnX25hbWV0eXBlKHN0cnVjdCB0aXBjX21zZyAqbSkKLXsKLQlyZXR1cm4gbXNnX3dvcmQobSwgOCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTMyIG1zZ19uYW1laW5zdChzdHJ1Y3QgdGlwY19tc2cgKm0pCi17Ci0JcmV0dXJuIG1zZ193b3JkKG0sIDkpOwotfQotCi1zdGF0aWMgaW5saW5lIHUzMiBtc2dfbmFtZWxvd2VyKHN0cnVjdCB0aXBjX21zZyAqbSkKLXsKLQlyZXR1cm4gbXNnX25hbWVpbnN0KG0pOwotfQotCi1zdGF0aWMgaW5saW5lIHUzMiBtc2dfbmFtZXVwcGVyKHN0cnVjdCB0aXBjX21zZyAqbSkKLXsKLQlyZXR1cm4gbXNnX3dvcmQobSwgMTApOwotfQotCi0jZW5kaWYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC90aXBjL3RpcGNfcG9ydC5oIGIvaW5jbHVkZS9uZXQvdGlwYy90aXBjX3BvcnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTg5M2FhZi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL25ldC90aXBjL3RpcGNfcG9ydC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTAxICswLDAgQEAKLS8qCi0gKiBpbmNsdWRlL25ldC90aXBjL3RpcGNfcG9ydC5oOiBJbmNsdWRlIGZpbGUgZm9yIHByaXZpbGVnZWQgYWNjZXNzIHRvIFRJUEMgcG9ydHMKLSAqIAotICogQ29weXJpZ2h0IChjKSAxOTk0LTIwMDcsIEVyaWNzc29uIEFCCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOCwgV2luZCBSaXZlciBTeXN0ZW1zCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZXMgb2YgdGhlIGNvcHlyaWdodCBob2xkZXJzIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBBbHRlcm5hdGl2ZWx5LCB0aGlzIHNvZnR3YXJlIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoIkdQTCIpIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKLSAqIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCi0gKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCi0gKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIF9ORVRfVElQQ19QT1JUX0hfCi0jZGVmaW5lIF9ORVRfVElQQ19QT1JUX0hfCi0KLSNpZmRlZiBfX0tFUk5FTF9fCi0KLSNpbmNsdWRlIDxsaW51eC90aXBjLmg+Ci0jaW5jbHVkZSA8bGludXgvc2tidWZmLmg+Ci0jaW5jbHVkZSA8bmV0L3RpcGMvdGlwY19tc2cuaD4KLQotI2RlZmluZSBUSVBDX0ZMT1dfQ09OVFJPTF9XSU4gNTEyCi0KLS8qKgotICogc3RydWN0IHRpcGNfcG9ydCAtIG5hdGl2ZSBUSVBDIHBvcnQgaW5mbyBhdmFpbGFibGUgdG8gcHJpdmlsZWdlZCB1c2VycwotICogQHVzcl9oYW5kbGU6IHBvaW50ZXIgdG8gYWRkaXRpb25hbCB1c2VyLWRlZmluZWQgaW5mb3JtYXRpb24gYWJvdXQgcG9ydAotICogQGxvY2s6IHBvaW50ZXIgdG8gc3BpbmxvY2sgZm9yIGNvbnRyb2xsaW5nIGFjY2VzcyB0byBwb3J0Ci0gKiBAY29ubmVjdGVkOiBub24temVybyBpZiBwb3J0IGlzIGN1cnJlbnRseSBjb25uZWN0ZWQgdG8gYSBwZWVyIHBvcnQKLSAqIEBjb25uX3R5cGU6IFRJUEMgdHlwZSB1c2VkIHdoZW4gY29ubmVjdGlvbiB3YXMgZXN0YWJsaXNoZWQKLSAqIEBjb25uX2luc3RhbmNlOiBUSVBDIGluc3RhbmNlIHVzZWQgd2hlbiBjb25uZWN0aW9uIHdhcyBlc3RhYmxpc2hlZAotICogQGNvbm5fdW5hY2tlZDogbnVtYmVyIG9mIHVuYWNrbm93bGVkZ2VkIG1lc3NhZ2VzIHJlY2VpdmVkIGZyb20gcGVlciBwb3J0Ci0gKiBAcHVibGlzaGVkOiBub24temVybyBpZiBwb3J0IGhhcyBvbmUgb3IgbW9yZSBhc3NvY2lhdGVkIG5hbWVzCi0gKiBAY29uZ2VzdGVkOiBub24temVybyBpZiBjYW5ub3Qgc2VuZCBiZWNhdXNlIG9mIGxpbmsgb3IgcG9ydCBjb25nZXN0aW9uCi0gKiBAbWF4X3BrdDogbWF4aW11bSBwYWNrZXQgc2l6ZSAiaGludCIgdXNlZCB3aGVuIGJ1aWxkaW5nIG1lc3NhZ2VzIHNlbnQgYnkgcG9ydAotICogQHJlZjogdW5pcXVlIHJlZmVyZW5jZSB0byBwb3J0IGluIFRJUEMgb2JqZWN0IHJlZ2lzdHJ5Ci0gKiBAcGhkcjogcHJlZm9ybWF0dGVkIG1lc3NhZ2UgaGVhZGVyIHVzZWQgd2hlbiBzZW5kaW5nIG1lc3NhZ2VzCi0gKi8KLQotc3RydWN0IHRpcGNfcG9ydCB7Ci0gICAgICAgIHZvaWQgKnVzcl9oYW5kbGU7Ci0gICAgICAgIHNwaW5sb2NrX3QgKmxvY2s7Ci0JaW50IGNvbm5lY3RlZDsKLSAgICAgICAgdTMyIGNvbm5fdHlwZTsKLSAgICAgICAgdTMyIGNvbm5faW5zdGFuY2U7Ci0JdTMyIGNvbm5fdW5hY2tlZDsKLQlpbnQgcHVibGlzaGVkOwotCXUzMiBjb25nZXN0ZWQ7Ci0JdTMyIG1heF9wa3Q7Ci0JdTMyIHJlZjsKLQlzdHJ1Y3QgdGlwY19tc2cgcGhkcjsKLX07Ci0KLQotc3RydWN0IHRpcGNfcG9ydCAqdGlwY19jcmVhdGVwb3J0X3Jhdyh2b2lkICp1c3JfaGFuZGxlLAotCQkJdTMyICgqZGlzcGF0Y2hlcikoc3RydWN0IHRpcGNfcG9ydCAqLCBzdHJ1Y3Qgc2tfYnVmZiAqKSwKLQkJCXZvaWQgKCp3YWtldXApKHN0cnVjdCB0aXBjX3BvcnQgKiksCi0JCQljb25zdCB1MzIgaW1wb3J0YW5jZSk7Ci0KLWludCB0aXBjX3JlamVjdF9tc2coc3RydWN0IHNrX2J1ZmYgKmJ1ZiwgdTMyIGVycik7Ci0KLWludCB0aXBjX3NlbmRfYnVmX2Zhc3Qoc3RydWN0IHNrX2J1ZmYgKmJ1ZiwgdTMyIGRlc3Rub2RlKTsKLQotdm9pZCB0aXBjX2Fja25vd2xlZGdlKHUzMiBwb3J0X3JlZix1MzIgYWNrKTsKLQotc3RydWN0IHRpcGNfcG9ydCAqdGlwY19nZXRfcG9ydChjb25zdCB1MzIgcmVmKTsKLQotLyoKLSAqIFRoZSBmb2xsb3dpbmcgcm91dGluZXMgcmVxdWlyZSB0aGF0IHRoZSBwb3J0IGJlIGxvY2tlZCBvbiBlbnRyeQotICovCi0KLWludCB0aXBjX2Rpc2Nvbm5lY3RfcG9ydChzdHJ1Y3QgdGlwY19wb3J0ICp0cF9wdHIpOwotCi0KLSNlbmRpZgotCi0jZW5kaWYKLQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQveDI1LmggYi9pbmNsdWRlL25ldC94MjUuaAppbmRleCAxNDc5Y2I0Li5hMDYxMTlhIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC94MjUuaAorKysgYi9pbmNsdWRlL25ldC94MjUuaApAQCAtMzE1LDYgKzMxNSw4IEBACiBleHRlcm4gcndsb2NrX3QgeDI1X3JvdXRlX2xpc3RfbG9jazsKIGV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIHgyNV9mb3J3YXJkX2xpc3Q7CiBleHRlcm4gcndsb2NrX3QgeDI1X2ZvcndhcmRfbGlzdF9sb2NrOworZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgeDI1X25laWdoX2xpc3Q7CitleHRlcm4gcndsb2NrX3QgeDI1X25laWdoX2xpc3RfbG9jazsKIAogZXh0ZXJuIGludCB4MjVfcHJvY19pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgeDI1X3Byb2NfZXhpdCh2b2lkKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3hmcm0uaCBiL2luY2x1ZGUvbmV0L3hmcm0uaAppbmRleCBiY2ZiNmIyLi5iOWYzODVkIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC94ZnJtLmgKKysrIGIvaW5jbHVkZS9uZXQveGZybS5oCkBAIC0xNDMsNiArMTQzLDcgQEAKIAlzdHJ1Y3QgeGZybV9pZAkJaWQ7CiAJc3RydWN0IHhmcm1fc2VsZWN0b3IJc2VsOwogCXN0cnVjdCB4ZnJtX21hcmsJbWFyazsKKwl1MzIJCQl0ZmNwYWQ7CiAKIAl1MzIJCQlnZW5pZDsKIApAQCAtODA1LDYgKzgwNiw5IEBACiAJY2FzZSBJUFBST1RPX01IOgogCQlwb3J0ID0gaHRvbnMoZmwtPmZsX21oX3R5cGUpOwogCQlicmVhazsKKwljYXNlIElQUFJPVE9fR1JFOgorCQlwb3J0ID0gaHRvbnMobnRvaGwoZmwtPmZsX2dyZV9rZXkpID4+IDE2KTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcG9ydCA9IDA7CS8qWFhYKi8KIAl9CkBAIC04MjYsNiArODMwLDkgQEAKIAljYXNlIElQUFJPVE9fSUNNUFY2OgogCQlwb3J0ID0gaHRvbnMoZmwtPmZsX2ljbXBfY29kZSk7CiAJCWJyZWFrOworCWNhc2UgSVBQUk9UT19HUkU6CisJCXBvcnQgPSBodG9ucyhudG9obChmbC0+ZmxfZ3JlX2tleSkgJiAweGZmZmYpOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlwb3J0ID0gMDsJLypYWFgqLwogCX0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9pc2NzaV9pZi5oIGIvaW5jbHVkZS9zY3NpL2lzY3NpX2lmLmgKaW5kZXggYTg2MzFhYy4uYzNlMWNiYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL2lzY3NpX2lmLmgKKysrIGIvaW5jbHVkZS9zY3NpL2lzY3NpX2lmLmgKQEAgLTI2Myw2ICsyNjMsNyBAQAogCUlTQ1NJX0VSUl9JTlZBTElEX0hPU1QJCT0gSVNDU0lfRVJSX0JBU0UgKyAxOCwKIAlJU0NTSV9FUlJfWE1JVF9GQUlMRUQJCT0gSVNDU0lfRVJSX0JBU0UgKyAxOSwKIAlJU0NTSV9FUlJfVENQX0NPTk5fQ0xPU0UJPSBJU0NTSV9FUlJfQkFTRSArIDIwLAorCUlTQ1NJX0VSUl9TQ1NJX0VIX1NFU1NJT05fUlNUCT0gSVNDU0lfRVJSX0JBU0UgKyAyMSwKIH07CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvbGliZmMuaCBiL2luY2x1ZGUvc2NzaS9saWJmYy5oCmluZGV4IDVjNGMxNjcuLmY1M2M4ZTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9saWJmYy5oCisrKyBiL2luY2x1ZGUvc2NzaS9saWJmYy5oCkBAIC0yMjEsOCArMjIxLDggQEAKICAqIEBJbnB1dFJlcXVlc3RzOiAgICAgICAgIE51bWJlciBvZiBpbnB1dCByZXF1ZXN0cwogICogQE91dHB1dFJlcXVlc3RzOiAgICAgICAgTnVtYmVyIG9mIG91dHB1dCByZXF1ZXN0cwogICogQENvbnRyb2xSZXF1ZXN0czogICAgICAgTnVtYmVyIG9mIGNvbnRyb2wgcmVxdWVzdHMKLSAqIEBJbnB1dE1lZ2FieXRlczogICAgICAgIE51bWJlciBvZiByZWNlaXZlZCBtZWdhYnl0ZXMKLSAqIEBPdXRwdXRNZWdhYnl0ZXM6ICAgICAgIE51bWJlciBvZiB0cmFuc21pdHRlZCBtZWdhYnl0ZXMKKyAqIEBJbnB1dEJ5dGVzOiAgICAgICAgICAgIE51bWJlciBvZiByZWNlaXZlZCBieXRlcworICogQE91dHB1dEJ5dGVzOiAgICAgICAgICAgTnVtYmVyIG9mIHRyYW5zbWl0dGVkIGJ5dGVzCiAgKiBAVkxpbmtGYWlsdXJlQ291bnQ6ICAgICBOdW1iZXIgb2YgdmlydHVhbCBsaW5rIGZhaWx1cmVzCiAgKiBATWlzc0Rpc2NBZHZDb3VudDogICAgICBOdW1iZXIgb2YgbWlzc2luZyBGSVAgZGlzY292ZXJ5IGFkdmVydGlzZW1lbnQKICAqLwpAQCAtMjQxLDggKzI0MSw4IEBACiAJdTY0CQlJbnB1dFJlcXVlc3RzOwogCXU2NAkJT3V0cHV0UmVxdWVzdHM7CiAJdTY0CQlDb250cm9sUmVxdWVzdHM7Ci0JdTY0CQlJbnB1dE1lZ2FieXRlczsKLQl1NjQJCU91dHB1dE1lZ2FieXRlczsKKwl1NjQJCUlucHV0Qnl0ZXM7CisJdTY0CQlPdXRwdXRCeXRlczsKIAl1NjQJCVZMaW5rRmFpbHVyZUNvdW50OwogCXU2NAkJTWlzc0Rpc2NBZHZDb3VudDsKIH07CkBAIC0yNjMsNyArMjYzLDYgQEAKICAqIHN0cnVjdCBmY19mY3BfcGt0IC0gRkNQIHJlcXVlc3Qgc3RydWN0dXJlIChvbmUgZm9yIGVhY2ggc2NzaV9jbW5kIHJlcXVlc3QpCiAgKiBAbHA6ICAgICAgICAgICAgICBUaGUgYXNzb2NpYXRlZCBsb2NhbCBwb3J0CiAgKiBAc3RhdGU6ICAgICAgICAgICBUaGUgc3RhdGUgb2YgdGhlIEkvTwotICogQHRndF9mbGFnczogICAgICAgVGFyZ2V0J3MgZmxhZ3MKICAqIEByZWZfY250OiAgICAgICAgIFJlZmVyZW5jZSBjb3VudAogICogQHNjc2lfcGt0X2xvY2s6ICAgTG9jayB0byBwcm90ZWN0IHRoZSBTQ1NJIHBhY2tldCAobXVzdCBiZSB0YWtlbiBiZWZvcmUgdGhlCiAgKiAgICAgICAgICAgICAgICAgICBob3N0X2xvY2sgaWYgYm90aCBhcmUgdG8gYmUgaGVsZCBhdCB0aGUgc2FtZSB0aW1lKQpAQCAtMjk4LDcgKzI5Nyw2IEBACiAJLyogSG91c2VrZWVwaW5nIGluZm9ybWF0aW9uICovCiAJc3RydWN0IGZjX2xwb3J0ICAgKmxwOwogCXUxNgkJICBzdGF0ZTsKLQl1MTYJCSAgdGd0X2ZsYWdzOwogCWF0b21pY190CSAgcmVmX2NudDsKIAlzcGlubG9ja190CSAgc2NzaV9wa3RfbG9jazsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL2xpYmZjb2UuaCBiL2luY2x1ZGUvc2NzaS9saWJmY29lLmgKaW5kZXggMDZmMWI1YS4uZmViNmE5NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL2xpYmZjb2UuaAorKysgYi9pbmNsdWRlL3Njc2kvbGliZmNvZS5oCkBAIC05MiwxMCArOTIsMTIgQEAKICAqIEB0aW1lcl93b3JrOgkgICAmd29ya19zdHJ1Y3QgZm9yIGRvaW5nIGtlZXAtYWxpdmVzIGFuZCByZXNldHMuCiAgKiBAcmVjdl93b3JrOgkgICAmd29ya19zdHJ1Y3QgZm9yIHJlY2VpdmluZyBGSVAgZnJhbWVzLgogICogQGZpcF9yZWN2X2xpc3Q6IGxpc3Qgb2YgcmVjZWl2ZWQgRklQIGZyYW1lcy4KKyAqIEBmbG9naV9yZXE6CSAgIGNsb25lIG9mIEZMT0dJIHJlcXVlc3Qgc2VudAogICogQHJuZF9zdGF0ZToJICAgc3RhdGUgZm9yIHBzZXVkby1yYW5kb20gbnVtYmVyIGdlbmVyYXRvci4KICAqIEBwb3J0X2lkOgkgICBwcm9wb3NlZCBvciBzZWxlY3RlZCBsb2NhbC1wb3J0IElELgogICogQHVzZXJfbWZzOgkgICBjb25maWd1cmVkIG1heGltdW0gRkMgZnJhbWUgc2l6ZSwgaW5jbHVkaW5nIEZDIGhlYWRlci4KICAqIEBmbG9naV9veGlkOiAgICBleGNoYW5nZSBJRCBvZiBtb3N0IHJlY2VudCBmYWJyaWMgbG9naW4uCisgKiBAZmxvZ2lfcmVxX3NlbmQ6IHNlbmQgb2YgRkxPR0kgcmVxdWVzdGVkCiAgKiBAZmxvZ2lfY291bnQ6ICAgbnVtYmVyIG9mIEZMT0dJIGF0dGVtcHRzIGluIEFVVE8gbW9kZS4KICAqIEBtYXBfZGVzdDoJICAgdXNlIHRoZSBGQ19NQVAgbW9kZSBmb3IgZGVzdGluYXRpb24gTUFDIGFkZHJlc3Nlcy4KICAqIEBzcG1hOgkgICBzdXBwb3J0cyBTUE1BIHNlcnZlci1wcm92aWRlZCBNQUNzIG1vZGUKQEAgLTEwNiw2ICsxMDgsNyBAQAogICogQHVwZGF0ZV9tYWM6ICAgIExMRC1zdXBwbGllZCBmdW5jdGlvbiB0byBoYW5kbGUgY2hhbmdlcyB0byBNQUMgYWRkcmVzc2VzLgogICogQGdldF9zcmNfYWRkcjogIExMRC1zdXBwbGllZCBmdW5jdGlvbiB0byBzdXBwbHkgYSBzb3VyY2UgTUFDIGFkZHJlc3MuCiAgKiBAY3Rscl9tdXRleDoJICAgbG9jayBwcm90ZWN0aW5nIHRoaXMgc3RydWN0dXJlLgorICogQGN0bHJfbG9jazogICAgIHNwaW5sb2NrIGNvdmVyaW5nIGZsb2dpX3JlcQogICoKICAqIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgYnkgYWxsIEZDb0UgZHJpdmVycy4gIEl0IGNvbnRhaW5zIGluZm9ybWF0aW9uCiAgKiBuZWVkZWQgYnkgYWxsIEZDb0UgbG93LWxldmVsIGRyaXZlcnMgKExMRHMpIGFzIHdlbGwgYXMgaW50ZXJuYWwgc3RhdGUKQEAgLTEyNiwxMiArMTI5LDE0IEBACiAJc3RydWN0IHdvcmtfc3RydWN0IHRpbWVyX3dvcms7CiAJc3RydWN0IHdvcmtfc3RydWN0IHJlY3Zfd29yazsKIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGZpcF9yZWN2X2xpc3Q7CisJc3RydWN0IHNrX2J1ZmYgKmZsb2dpX3JlcTsKIAogCXN0cnVjdCBybmRfc3RhdGUgcm5kX3N0YXRlOwogCXUzMiBwb3J0X2lkOwogCiAJdTE2IHVzZXJfbWZzOwogCXUxNiBmbG9naV9veGlkOworCXU4IGZsb2dpX3JlcV9zZW5kOwogCXU4IGZsb2dpX2NvdW50OwogCXU4IG1hcF9kZXN0OwogCXU4IHNwbWE7CkBAIC0xNDMsNiArMTQ4LDcgQEAKIAl2b2lkICgqdXBkYXRlX21hYykoc3RydWN0IGZjX2xwb3J0ICosIHU4ICphZGRyKTsKIAl1OCAqICgqZ2V0X3NyY19hZGRyKShzdHJ1Y3QgZmNfbHBvcnQgKik7CiAJc3RydWN0IG11dGV4IGN0bHJfbXV0ZXg7CisJc3BpbmxvY2tfdCBjdGxyX2xvY2s7CiB9OwogCiAvKioKQEAgLTE1NSw2ICsxNjEsNyBAQAogICogQGZjZl9tYWM6CSBFdGhlcm5ldCBhZGRyZXNzIG9mIHRoZSBGQ0YKICAqIEB2ZmlkOgkgdmlydHVhbCBmYWJyaWMgSUQKICAqIEBwcmk6CSBzZWxlY3Rpb24gcHJpb3JpdHksIHNtYWxsZXIgdmFsdWVzIGFyZSBiZXR0ZXIKKyAqIEBmbG9naV9zZW50OgkgY3VycmVudCBGTE9HSSBzZW50IHRvIHRoaXMgRkNGCiAgKiBAZmxhZ3M6CSBmbGFncyByZWNlaXZlZCBmcm9tIGFkdmVydGlzZW1lbnQKICAqIEBma2FfcGVyaW9kOgkga2VlcC1hbGl2ZSBwZXJpb2QsIGluIGppZmZpZXMKICAqCkBAIC0xNzYsNiArMTgzLDcgQEAKIAl1OCBmY2ZfbWFjW0VUSF9BTEVOXTsKIAogCXU4IHByaTsKKwl1OCBmbG9naV9zZW50OwogCXUxNiBmbGFnczsKIAl1MzIgZmthX3BlcmlvZDsKIAl1OCBmZF9mbGFnczoxOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL2xpYmlzY3NpLmggYi9pbmNsdWRlL3Njc2kvbGliaXNjc2kuaAppbmRleCBiODFkOTY5Li43NDgzODJiIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvbGliaXNjc2kuaAorKysgYi9pbmNsdWRlL3Njc2kvbGliaXNjc2kuaApAQCAtODksNiArODksNyBAQAogCUlTQ1NJX1RBU0tfUlVOTklORywKIAlJU0NTSV9UQVNLX0FCUlRfVE1GLAkJLyogYWJvcnRlZCBkdWUgdG8gVE1GICovCiAJSVNDU0lfVEFTS19BQlJUX1NFU1NfUkVDT1YsCS8qIGFib3J0ZWQgZHVlIHRvIHNlc3Npb24gcmVjb3ZlcnkgKi8KKwlJU0NTSV9UQVNLX1JFUVVFVUVfU0NTSVEsCS8qIHFjbWQgcmVxdWV1ZWluZyB0byBzY3NpLW1sICovCiB9OwogCiBzdHJ1Y3QgaXNjc2lfcjJ0X2luZm8gewpAQCAtMzQxLDcgKzM0Miw3IEBACiBleHRlcm4gaW50IGlzY3NpX2VoX3JlY292ZXJfdGFyZ2V0KHN0cnVjdCBzY3NpX2NtbmQgKnNjKTsKIGV4dGVybiBpbnQgaXNjc2lfZWhfc2Vzc2lvbl9yZXNldChzdHJ1Y3Qgc2NzaV9jbW5kICpzYyk7CiBleHRlcm4gaW50IGlzY3NpX2VoX2RldmljZV9yZXNldChzdHJ1Y3Qgc2NzaV9jbW5kICpzYyk7Ci1leHRlcm4gaW50IGlzY3NpX3F1ZXVlY29tbWFuZChzdHJ1Y3QgU2NzaV9Ib3N0ICpoLCBzdHJ1Y3Qgc2NzaV9jbW5kICpzYyk7CitleHRlcm4gaW50IGlzY3NpX3F1ZXVlY29tbWFuZChzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0LCBzdHJ1Y3Qgc2NzaV9jbW5kICpzYyk7CiAKIC8qCiAgKiBpU0NTSSBob3N0IGhlbHBlcnMuCkBAIC00MTksNiArNDIwLDcgQEAKIGV4dGVybiBzdHJ1Y3QgaXNjc2lfdGFzayAqaXNjc2lfaXR0X3RvX3Rhc2soc3RydWN0IGlzY3NpX2Nvbm4gKiwgaXR0X3QpOwogZXh0ZXJuIHZvaWQgaXNjc2lfcmVxdWV1ZV90YXNrKHN0cnVjdCBpc2NzaV90YXNrICp0YXNrKTsKIGV4dGVybiB2b2lkIGlzY3NpX3B1dF90YXNrKHN0cnVjdCBpc2NzaV90YXNrICp0YXNrKTsKK2V4dGVybiB2b2lkIF9faXNjc2lfcHV0X3Rhc2soc3RydWN0IGlzY3NpX3Rhc2sgKnRhc2spOwogZXh0ZXJuIHZvaWQgX19pc2NzaV9nZXRfdGFzayhzdHJ1Y3QgaXNjc2lfdGFzayAqdGFzayk7CiBleHRlcm4gdm9pZCBpc2NzaV9jb21wbGV0ZV9zY3NpX3Rhc2soc3RydWN0IGlzY3NpX3Rhc2sgKnRhc2ssCiAJCQkJICAgICB1aW50MzJfdCBleHBfY21kc24sIHVpbnQzMl90IG1heF9jbWRzbik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvbGlic2FzLmggYi9pbmNsdWRlL3Njc2kvbGlic2FzLmgKaW5kZXggOTBjZTUyNy4uOGY2YmI5YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL2xpYnNhcy5oCisrKyBiL2luY2x1ZGUvc2NzaS9saWJzYXMuaApAQCAtMzYxLDYgKzM2MSw4IEBACiAJLyogVGhlIGNsYXNzIGNhbGxzIHRoaXMgdG8gc2VuZCBhIHRhc2sgZm9yIGV4ZWN1dGlvbi4gKi8KIAlpbnQgbGxkZF9tYXhfZXhlY3V0ZV9udW07CiAJaW50IGxsZGRfcXVldWVfc2l6ZTsKKwlpbnQgc3RyaWN0X3dpZGVfcG9ydHM7IC8qIGJvdGggc2FzX2FkZHIgYW5kIGF0dGFjaGVkX3Nhc19hZGRyIG11c3QgbWF0Y2gKKwkJCQkqIHRoZWlyIHNpYmxpbmdzIHdoZW4gZm9ybWluZyB3aWRlIHBvcnRzICovCiAKIAkvKiBMTEREIGNhbGxzIHRoZXNlIHRvIG5vdGlmeSB0aGUgY2xhc3Mgb2YgYW4gZXZlbnQuICovCiAJdm9pZCAoKm5vdGlmeV9oYV9ldmVudCkoc3RydWN0IHNhc19oYV9zdHJ1Y3QgKiwgZW51bSBoYV9ldmVudCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvc2NzaS5oIGIvaW5jbHVkZS9zY3NpL3Njc2kuaAppbmRleCAyMTZhZjg1Li4xNjUxZmVmMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL3Njc2kuaAorKysgYi9pbmNsdWRlL3Njc2kvc2NzaS5oCkBAIC0xMTUsMzMgKzExNSw2MSBAQAogI2RlZmluZSBQRVJTSVNURU5UX1JFU0VSVkVfT1VUIDB4NWYKICNkZWZpbmUgVkFSSUFCTEVfTEVOR1RIX0NNRCAgIDB4N2YKICNkZWZpbmUgUkVQT1JUX0xVTlMgICAgICAgICAgIDB4YTAKKyNkZWZpbmUgU0VDVVJJVFlfUFJPVE9DT0xfSU4gIDB4YTIKICNkZWZpbmUgTUFJTlRFTkFOQ0VfSU4gICAgICAgIDB4YTMKICNkZWZpbmUgTUFJTlRFTkFOQ0VfT1VUICAgICAgIDB4YTQKICNkZWZpbmUgTU9WRV9NRURJVU0gICAgICAgICAgIDB4YTUKICNkZWZpbmUgRVhDSEFOR0VfTUVESVVNICAgICAgIDB4YTYKICNkZWZpbmUgUkVBRF8xMiAgICAgICAgICAgICAgIDB4YTgKICNkZWZpbmUgV1JJVEVfMTIgICAgICAgICAgICAgIDB4YWEKKyNkZWZpbmUgUkVBRF9NRURJQV9TRVJJQUxfTlVNQkVSIDB4YWIKICNkZWZpbmUgV1JJVEVfVkVSSUZZXzEyICAgICAgIDB4YWUKICNkZWZpbmUgVkVSSUZZXzEyCSAgICAgIDB4YWYKICNkZWZpbmUgU0VBUkNIX0hJR0hfMTIgICAgICAgIDB4YjAKICNkZWZpbmUgU0VBUkNIX0VRVUFMXzEyICAgICAgIDB4YjEKICNkZWZpbmUgU0VBUkNIX0xPV18xMiAgICAgICAgIDB4YjIKKyNkZWZpbmUgU0VDVVJJVFlfUFJPVE9DT0xfT1VUIDB4YjUKICNkZWZpbmUgUkVBRF9FTEVNRU5UX1NUQVRVUyAgIDB4YjgKICNkZWZpbmUgU0VORF9WT0xVTUVfVEFHICAgICAgIDB4YjYKICNkZWZpbmUgV1JJVEVfTE9OR18yICAgICAgICAgIDB4ZWEKKyNkZWZpbmUgRVhURU5ERURfQ09QWSAgICAgICAgIDB4ODMKKyNkZWZpbmUgUkVDRUlWRV9DT1BZX1JFU1VMVFMgIDB4ODQKKyNkZWZpbmUgQUNDRVNTX0NPTlRST0xfSU4gICAgIDB4ODYKKyNkZWZpbmUgQUNDRVNTX0NPTlRST0xfT1VUICAgIDB4ODcKICNkZWZpbmUgUkVBRF8xNiAgICAgICAgICAgICAgIDB4ODgKICNkZWZpbmUgV1JJVEVfMTYgICAgICAgICAgICAgIDB4OGEKKyNkZWZpbmUgUkVBRF9BVFRSSUJVVEUgICAgICAgIDB4OGMKKyNkZWZpbmUgV1JJVEVfQVRUUklCVVRFCSAgICAgIDB4OGQKICNkZWZpbmUgVkVSSUZZXzE2CSAgICAgIDB4OGYKICNkZWZpbmUgV1JJVEVfU0FNRV8xNgkgICAgICAweDkzCiAjZGVmaW5lIFNFUlZJQ0VfQUNUSU9OX0lOICAgICAweDllCiAvKiB2YWx1ZXMgZm9yIHNlcnZpY2UgYWN0aW9uIGluICovCiAjZGVmaW5lCVNBSV9SRUFEX0NBUEFDSVRZXzE2ICAweDEwCiAjZGVmaW5lIFNBSV9HRVRfTEJBX1NUQVRVUyAgICAweDEyCisvKiB2YWx1ZXMgZm9yIFZBUklBQkxFX0xFTkdUSF9DTUQgc2VydmljZSBhY3Rpb24gY29kZXMKKyAqIHNlZSBzcGM0cjE3IFNlY3Rpb24gRC4zLjUsIHRhYmxlIEQuNyBhbmQgRC44ICovCisjZGVmaW5lIFZMQ19TQV9SRUNFSVZFX0NSRURFTlRJQUwgMHgxODAwCiAvKiB2YWx1ZXMgZm9yIG1haW50ZW5hbmNlIGluICovCisjZGVmaW5lIE1JX1JFUE9SVF9JREVOVElGWUlOR19JTkZPUk1BVElPTiAweDA1CiAjZGVmaW5lIE1JX1JFUE9SVF9UQVJHRVRfUEdTICAweDBhCisjZGVmaW5lIE1JX1JFUE9SVF9BTElBU0VTICAgICAweDBiCisjZGVmaW5lIE1JX1JFUE9SVF9TVVBQT1JURURfT1BFUkFUSU9OX0NPREVTIDB4MGMKKyNkZWZpbmUgTUlfUkVQT1JUX1NVUFBPUlRFRF9UQVNLX01BTkFHRU1FTlRfRlVOQ1RJT05TIDB4MGQKKyNkZWZpbmUgTUlfUkVQT1JUX1BSSU9SSVRZICAgMHgwZQorI2RlZmluZSBNSV9SRVBPUlRfVElNRVNUQU1QICAweDBmCisjZGVmaW5lIE1JX01BTkFHRU1FTlRfUFJPVE9DT0xfSU4gMHgxMAogLyogdmFsdWVzIGZvciBtYWludGVuYW5jZSBvdXQgKi8KKyNkZWZpbmUgTU9fU0VUX0lERU5USUZZSU5HX0lORk9STUFUSU9OIDB4MDYKICNkZWZpbmUgTU9fU0VUX1RBUkdFVF9QR1MgICAgIDB4MGEKKyNkZWZpbmUgTU9fQ0hBTkdFX0FMSUFTRVMgICAgIDB4MGIKKyNkZWZpbmUgTU9fU0VUX1BSSU9SSVRZICAgICAgIDB4MGUKKyNkZWZpbmUgTU9fU0VUX1RJTUVTVEFNUCAgICAgIDB4MGYKKyNkZWZpbmUgTU9fTUFOQUdFTUVOVF9QUk9UT0NPTF9PVVQgMHgxMAogLyogdmFsdWVzIGZvciB2YXJpYWJsZSBsZW5ndGggY29tbWFuZCAqLworI2RlZmluZSBYRFJFQURfMzIJICAgICAgMHgwMworI2RlZmluZSBYRFdSSVRFXzMyCSAgICAgIDB4MDQKKyNkZWZpbmUgWFBXUklURV8zMgkgICAgICAweDA2CisjZGVmaW5lIFhEV1JJVEVSRUFEXzMyCSAgICAgIDB4MDcKICNkZWZpbmUgUkVBRF8zMgkJICAgICAgMHgwOQogI2RlZmluZSBWRVJJRllfMzIJICAgICAgMHgwYQogI2RlZmluZSBXUklURV8zMgkgICAgICAweDBiCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2RlZmluZV90cmFjZS5oIGIvaW5jbHVkZS90cmFjZS9kZWZpbmVfdHJhY2UuaAppbmRleCAxZGZhYjU0Li5iMGI0ZWIyIDEwMDY0NAotLS0gYS9pbmNsdWRlL3RyYWNlL2RlZmluZV90cmFjZS5oCisrKyBiL2luY2x1ZGUvdHJhY2UvZGVmaW5lX3RyYWNlLmgKQEAgLTI2LDYgKzI2LDE1IEBACiAjZGVmaW5lIFRSQUNFX0VWRU5UKG5hbWUsIHByb3RvLCBhcmdzLCB0c3RydWN0LCBhc3NpZ24sIHByaW50KQlcCiAJREVGSU5FX1RSQUNFKG5hbWUpCiAKKyN1bmRlZiBUUkFDRV9FVkVOVF9DT05ESVRJT04KKyNkZWZpbmUgVFJBQ0VfRVZFTlRfQ09ORElUSU9OKG5hbWUsIHByb3RvLCBhcmdzLCBjb25kLCB0c3RydWN0LCBhc3NpZ24sIHByaW50KSBcCisJVFJBQ0VfRVZFTlQobmFtZSwJCQkJCQlcCisJCVBBUkFNUyhwcm90byksCQkJCQkJXAorCQlQQVJBTVMoYXJncyksCQkJCQkJXAorCQlQQVJBTVModHN0cnVjdCksCQkJCQlcCisJCVBBUkFNUyhhc3NpZ24pLAkJCQkJCVwKKwkJUEFSQU1TKHByaW50KSkKKwogI3VuZGVmIFRSQUNFX0VWRU5UX0ZOCiAjZGVmaW5lIFRSQUNFX0VWRU5UX0ZOKG5hbWUsIHByb3RvLCBhcmdzLCB0c3RydWN0LAkJXAogCQlhc3NpZ24sIHByaW50LCByZWcsIHVucmVnKQkJCVwKQEAgLTM5LDYgKzQ4LDEwIEBACiAjZGVmaW5lIERFRklORV9FVkVOVF9QUklOVCh0ZW1wbGF0ZSwgbmFtZSwgcHJvdG8sIGFyZ3MsIHByaW50KQlcCiAJREVGSU5FX1RSQUNFKG5hbWUpCiAKKyN1bmRlZiBERUZJTkVfRVZFTlRfQ09ORElUSU9OCisjZGVmaW5lIERFRklORV9FVkVOVF9DT05ESVRJT04odGVtcGxhdGUsIG5hbWUsIHByb3RvLCBhcmdzLCBjb25kKSBcCisJREVGSU5FX0VWRU5UKHRlbXBsYXRlLCBuYW1lLCBQQVJBTVMocHJvdG8pLCBQQVJBTVMoYXJncykpCisKICN1bmRlZiBERUNMQVJFX1RSQUNFCiAjZGVmaW5lIERFQ0xBUkVfVFJBQ0UobmFtZSwgcHJvdG8sIGFyZ3MpCVwKIAlERUZJTkVfVFJBQ0UobmFtZSkKQEAgLTc1LDkgKzg4LDExIEBACiAKICN1bmRlZiBUUkFDRV9FVkVOVAogI3VuZGVmIFRSQUNFX0VWRU5UX0ZOCisjdW5kZWYgVFJBQ0VfRVZFTlRfQ09ORElUSU9OCiAjdW5kZWYgREVDTEFSRV9FVkVOVF9DTEFTUwogI3VuZGVmIERFRklORV9FVkVOVAogI3VuZGVmIERFRklORV9FVkVOVF9QUklOVAorI3VuZGVmIERFRklORV9FVkVOVF9DT05ESVRJT04KICN1bmRlZiBUUkFDRV9IRUFERVJfTVVMVElfUkVBRAogI3VuZGVmIERFQ0xBUkVfVFJBQ0UKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvcG93ZXIuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3Bvd2VyLmgKaW5kZXggMjg2Nzg0ZC4uMWJjYzJhOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvcG93ZXIuaAorKysgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9wb3dlci5oCkBAIC03LDE2ICs3LDY3IEBACiAjaW5jbHVkZSA8bGludXgva3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC90cmFjZXBvaW50Lmg+CiAKLSNpZm5kZWYgX1RSQUNFX1BPV0VSX0VOVU1fCi0jZGVmaW5lIF9UUkFDRV9QT1dFUl9FTlVNXwotZW51bSB7Ci0JUE9XRVJfTk9ORQk9IDAsCi0JUE9XRVJfQ1NUQVRFCT0gMSwJLyogQy1TdGF0ZSAqLwotCVBPV0VSX1BTVEFURQk9IDIsCS8qIEZlcXVlbmN5IGNoYW5nZSBvciBEVkZTICovCi0JUE9XRVJfU1NUQVRFCT0gMywJLyogU3VzcGVuZCAqLwotfTsKK0RFQ0xBUkVfRVZFTlRfQ0xBU1MoY3B1LAorCisJVFBfUFJPVE8odW5zaWduZWQgaW50IHN0YXRlLCB1bnNpZ25lZCBpbnQgY3B1X2lkKSwKKworCVRQX0FSR1Moc3RhdGUsIGNwdV9pZCksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKAl1MzIsCQlzdGF0ZQkJKQorCQlfX2ZpZWxkKAl1MzIsCQljcHVfaWQJCSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPnN0YXRlID0gc3RhdGU7CisJCV9fZW50cnktPmNwdV9pZCA9IGNwdV9pZDsKKwkpLAorCisJVFBfcHJpbnRrKCJzdGF0ZT0lbHUgY3B1X2lkPSVsdSIsICh1bnNpZ25lZCBsb25nKV9fZW50cnktPnN0YXRlLAorCQkgICh1bnNpZ25lZCBsb25nKV9fZW50cnktPmNwdV9pZCkKKyk7CisKK0RFRklORV9FVkVOVChjcHUsIGNwdV9pZGxlLAorCisJVFBfUFJPVE8odW5zaWduZWQgaW50IHN0YXRlLCB1bnNpZ25lZCBpbnQgY3B1X2lkKSwKKworCVRQX0FSR1Moc3RhdGUsIGNwdV9pZCkKKyk7CisKKy8qIFRoaXMgZmlsZSBjYW4gZ2V0IGluY2x1ZGVkIG11bHRpcGxlIHRpbWVzLCBUUkFDRV9IRUFERVJfTVVMVElfUkVBRCBhdCB0b3AgKi8KKyNpZm5kZWYgX1BXUl9FVkVOVF9BVk9JRF9ET1VCTEVfREVGSU5JTkcKKyNkZWZpbmUgX1BXUl9FVkVOVF9BVk9JRF9ET1VCTEVfREVGSU5JTkcKKworI2RlZmluZSBQV1JfRVZFTlRfRVhJVCAtMQogI2VuZGlmCiAKK0RFRklORV9FVkVOVChjcHUsIGNwdV9mcmVxdWVuY3ksCisKKwlUUF9QUk9UTyh1bnNpZ25lZCBpbnQgZnJlcXVlbmN5LCB1bnNpZ25lZCBpbnQgY3B1X2lkKSwKKworCVRQX0FSR1MoZnJlcXVlbmN5LCBjcHVfaWQpCispOworCitUUkFDRV9FVkVOVChtYWNoaW5lX3N1c3BlbmQsCisKKwlUUF9QUk9UTyh1bnNpZ25lZCBpbnQgc3RhdGUpLAorCisJVFBfQVJHUyhzdGF0ZSksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKAl1MzIsCQlzdGF0ZQkJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+c3RhdGUgPSBzdGF0ZTsKKwkpLAorCisJVFBfcHJpbnRrKCJzdGF0ZT0lbHUiLCAodW5zaWduZWQgbG9uZylfX2VudHJ5LT5zdGF0ZSkKKyk7CisKKy8qIFRoaXMgY29kZSB3aWxsIGJlIHJlbW92ZWQgYWZ0ZXIgZGVwcmVjYXRpb24gdGltZSBleGNlZWRlZCAoMi42LjQxKSAqLworI2lmZGVmIENPTkZJR19FVkVOVF9QT1dFUl9UUkFDSU5HX0RFUFJFQ0FURUQKKwogLyoKICAqIFRoZSBwb3dlciBldmVudHMgYXJlIHVzZWQgZm9yIGNwdWlkbGUgJiBzdXNwZW5kIChwb3dlcl9zdGFydCwgcG93ZXJfZW5kKQogICogIGFuZCBmb3IgY3B1ZnJlcSAocG93ZXJfZnJlcXVlbmN5KQpAQCAtNzUsNiArMTI2LDM2IEBACiAKICk7CiAKKy8qIERlcHJlY2F0ZWQgZHVtbXkgZnVuY3Rpb25zIG11c3QgYmUgcHJvdGVjdGVkIGFnYWluc3QgbXVsdGktZGVjbGFydGlvbiAqLworI2lmbmRlZiBfUFdSX0VWRU5UX0FWT0lEX0RPVUJMRV9ERUZJTklOR19ERVBSRUNBVEVECisjZGVmaW5lIF9QV1JfRVZFTlRfQVZPSURfRE9VQkxFX0RFRklOSU5HX0RFUFJFQ0FURUQKKworZW51bSB7CisJUE9XRVJfTk9ORSA9IDAsCisJUE9XRVJfQ1NUQVRFID0gMSwKKwlQT1dFUl9QU1RBVEUgPSAyLAorfTsKKyNlbmRpZiAvKiBfUFdSX0VWRU5UX0FWT0lEX0RPVUJMRV9ERUZJTklOR19ERVBSRUNBVEVEICovCisKKyNlbHNlIC8qIENPTkZJR19FVkVOVF9QT1dFUl9UUkFDSU5HX0RFUFJFQ0FURUQgKi8KKworI2lmbmRlZiBfUFdSX0VWRU5UX0FWT0lEX0RPVUJMRV9ERUZJTklOR19ERVBSRUNBVEVECisjZGVmaW5lIF9QV1JfRVZFTlRfQVZPSURfRE9VQkxFX0RFRklOSU5HX0RFUFJFQ0FURUQKK2VudW0geworICAgICAgIFBPV0VSX05PTkUgPSAwLAorICAgICAgIFBPV0VSX0NTVEFURSA9IDEsCisgICAgICAgUE9XRVJfUFNUQVRFID0gMiwKK307CisKKy8qIFRoZXNlIGR1bW15IGRlY2xhcmF0aW9uIGhhdmUgdG8gYmUgcmlwcGVkIG91dCB3aGVuIHRoZSBkZXByZWNhdGVkCisgICBldmVudHMgZ2V0IHJlbW92ZWQgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB0cmFjZV9wb3dlcl9zdGFydCh1NjQgdHlwZSwgdTY0IHN0YXRlLCB1NjQgY3B1aWQpIHt9Oworc3RhdGljIGlubGluZSB2b2lkIHRyYWNlX3Bvd2VyX2VuZCh1NjQgY3B1aWQpIHt9Oworc3RhdGljIGlubGluZSB2b2lkIHRyYWNlX3Bvd2VyX2ZyZXF1ZW5jeSh1NjQgdHlwZSwgdTY0IHN0YXRlLCB1NjQgY3B1aWQpIHt9OworI2VuZGlmIC8qIF9QV1JfRVZFTlRfQVZPSURfRE9VQkxFX0RFRklOSU5HX0RFUFJFQ0FURUQgKi8KKworI2VuZGlmIC8qIENPTkZJR19FVkVOVF9QT1dFUl9UUkFDSU5HX0RFUFJFQ0FURUQgKi8KKwogLyoKICAqIFRoZSBjbG9jayBldmVudHMgYXJlIHVzZWQgZm9yIGNsb2NrIGVuYWJsZS9kaXNhYmxlIGFuZCBmb3IKICAqICBjbG9jayByYXRlIGNoYW5nZQpAQCAtMTUzLDcgKzIzNCw2IEBACiAKIAlUUF9BUkdTKG5hbWUsIHN0YXRlLCBjcHVfaWQpCiApOwotCiAjZW5kaWYgLyogX1RSQUNFX1BPV0VSX0ggKi8KIAogLyogVGhpcyBwYXJ0IG11c3QgYmUgb3V0c2lkZSBwcm90ZWN0aW9uICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9zeXNjYWxscy5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvc3lzY2FsbHMuaAppbmRleCBmYjcyNmFjLi41YTRjMDRhIDEwMDY0NAotLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9zeXNjYWxscy5oCisrKyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3N5c2NhbGxzLmgKQEAgLTQwLDYgKzQwLDggQEAKIAlzeXNjYWxsX3JlZ2Z1bmMsIHN5c2NhbGxfdW5yZWdmdW5jCiApOwogCitUUkFDRV9FVkVOVF9GTEFHUyhzeXNfZW50ZXIsIFRSQUNFX0VWRU5UX0ZMX0NBUF9BTlkpCisKIFRSQUNFX0VWRU5UX0ZOKHN5c19leGl0LAogCiAJVFBfUFJPVE8oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGxvbmcgcmV0KSwKQEAgLTYyLDYgKzY0LDggQEAKIAlzeXNjYWxsX3JlZ2Z1bmMsIHN5c2NhbGxfdW5yZWdmdW5jCiApOwogCitUUkFDRV9FVkVOVF9GTEFHUyhzeXNfZXhpdCwgVFJBQ0VfRVZFTlRfRkxfQ0FQX0FOWSkKKwogI2VuZGlmIC8qIENPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFMgKi8KIAogI2VuZGlmIC8qIF9UUkFDRV9FVkVOVFNfU1lTQ0FMTFNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9mdHJhY2UuaCBiL2luY2x1ZGUvdHJhY2UvZnRyYWNlLmgKaW5kZXggYTkzNzdjMC4uZTE2NjEwYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9mdHJhY2UuaAorKysgYi9pbmNsdWRlL3RyYWNlL2Z0cmFjZS5oCkBAIC04Miw2ICs4MiwxMCBAQAogCVRSQUNFX0VWRU5UKG5hbWUsIFBBUkFNUyhwcm90byksIFBBUkFNUyhhcmdzKSwJCQlcCiAJCVBBUkFNUyh0c3RydWN0KSwgUEFSQU1TKGFzc2lnbiksIFBBUkFNUyhwcmludCkpCQlcCiAKKyN1bmRlZiBUUkFDRV9FVkVOVF9GTEFHUworI2RlZmluZSBUUkFDRV9FVkVOVF9GTEFHUyhuYW1lLCB2YWx1ZSkJCQkJCVwKKwlfX1RSQUNFX0VWRU5UX0ZMQUdTKG5hbWUsIHZhbHVlKQorCiAjaW5jbHVkZSBUUkFDRV9JTkNMVURFKFRSQUNFX0lOQ0xVREVfRklMRSkKIAogCkBAIC0xMjksNiArMTMzLDkgQEAKICNkZWZpbmUgREVGSU5FX0VWRU5UX1BSSU5UKHRlbXBsYXRlLCBuYW1lLCBwcm90bywgYXJncywgcHJpbnQpCVwKIAlERUZJTkVfRVZFTlQodGVtcGxhdGUsIG5hbWUsIFBBUkFNUyhwcm90byksIFBBUkFNUyhhcmdzKSkKIAorI3VuZGVmIFRSQUNFX0VWRU5UX0ZMQUdTCisjZGVmaW5lIFRSQUNFX0VWRU5UX0ZMQUdTKGV2ZW50LCBmbGFnKQorCiAjaW5jbHVkZSBUUkFDRV9JTkNMVURFKFRSQUNFX0lOQ0xVREVfRklMRSkKIAogLyoKQEAgLTI4OSwxMyArMjk2LDE5IEBACiAKICN1bmRlZiBfX2FycmF5CiAjZGVmaW5lIF9fYXJyYXkodHlwZSwgaXRlbSwgbGVuKQkJCQkJXAotCUJVSUxEX0JVR19PTihsZW4gPiBNQVhfRklMVEVSX1NUUl9WQUwpOwkJCQlcCi0JcmV0ID0gdHJhY2VfZGVmaW5lX2ZpZWxkKGV2ZW50X2NhbGwsICN0eXBlICJbIiAjbGVuICJdIiwgI2l0ZW0sCVwKKwlkbyB7CQkJCQkJCQlcCisJCW11dGV4X2xvY2soJmV2ZW50X3N0b3JhZ2VfbXV0ZXgpOwkJCVwKKwkJQlVJTERfQlVHX09OKGxlbiA+IE1BWF9GSUxURVJfU1RSX1ZBTCk7CQkJXAorCQlzbnByaW50ZihldmVudF9zdG9yYWdlLCBzaXplb2YoZXZlbnRfc3RvcmFnZSksCQlcCisJCQkgIiVzWyVkXSIsICN0eXBlLCBsZW4pOwkJCQlcCisJCXJldCA9IHRyYWNlX2RlZmluZV9maWVsZChldmVudF9jYWxsLCBldmVudF9zdG9yYWdlLCAjaXRlbSwgXAogCQkJCSBvZmZzZXRvZih0eXBlb2YoZmllbGQpLCBpdGVtKSwJCVwKIAkJCQkgc2l6ZW9mKGZpZWxkLml0ZW0pLAkJCVwKIAkJCQkgaXNfc2lnbmVkX3R5cGUodHlwZSksIEZJTFRFUl9PVEhFUik7CVwKLQlpZiAocmV0KQkJCQkJCQlcCi0JCXJldHVybiByZXQ7CisJCW11dGV4X3VubG9jaygmZXZlbnRfc3RvcmFnZV9tdXRleCk7CQkJXAorCQlpZiAocmV0KQkJCQkJCVwKKwkJCXJldHVybiByZXQ7CQkJCQlcCisJfSB3aGlsZSAoMCk7CiAKICN1bmRlZiBfX2R5bmFtaWNfYXJyYXkKICNkZWZpbmUgX19keW5hbWljX2FycmF5KHR5cGUsIGl0ZW0sIGxlbikJCQkJICAgICAgIFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdmlkZW8vczFkMTN4eHhmYi5oIGIvaW5jbHVkZS92aWRlby9zMWQxM3h4eGZiLmgKaW5kZXggZjA3MzZjZmYuLjU1ZjUzNDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdmlkZW8vczFkMTN4eHhmYi5oCisrKyBiL2luY2x1ZGUvdmlkZW8vczFkMTN4eHhmYi5oCkBAIC0xMzYsMTIgKzEzNiw2IEBACiAjZGVmaW5lIFMxRFJFR19ERUxBWU9GRgkJCTB4RkZGRQogI2RlZmluZSBTMURSRUdfREVMQVlPTgkJCTB4RkZGRgogCi0jZGVmaW5lIEJCTFRfRklGT19FTVBUWQkJCTB4MDAKLSNkZWZpbmUgQkJMVF9GSUZPX05PVF9FTVBUWQkJMHg0MAotI2RlZmluZSBCQkxUX0ZJRk9fTk9UX0ZVTEwJCTB4MzAKLSNkZWZpbmUgQkJMVF9GSUZPX0hBTEZfRlVMTAkJMHgyMAotI2RlZmluZSBCQkxUX0ZJRk9fRlVMTAkJCTB4MTAKLQogI2RlZmluZSBCQkxUX1NPTElEX0ZJTEwJCQkweDBjCiAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS92aWRlby9zaF9taXBpX2RzaS5oIGIvaW5jbHVkZS92aWRlby9zaF9taXBpX2RzaS5oCmluZGV4IDE4YmNhMDguLjZjYjk1YzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdmlkZW8vc2hfbWlwaV9kc2kuaAorKysgYi9pbmNsdWRlL3ZpZGVvL3NoX21pcGlfZHNpLmgKQEAgLTI3LDkgKzI3LDE1IEBACiAKIHN0cnVjdCBzaF9tb2JpbGVfbGNkY19jaGFuX2NmZzsKIAorI2RlZmluZSBTSF9NSVBJX0RTSV9IU0FCTQkoMSA8PCAwKQorI2RlZmluZSBTSF9NSVBJX0RTSV9IU1BCTQkoMSA8PCAxKQorCiBzdHJ1Y3Qgc2hfbWlwaV9kc2lfaW5mbyB7CiAJZW51bSBzaF9taXBpX2RzaV9kYXRhX2ZtdAlkYXRhX2Zvcm1hdDsKIAlzdHJ1Y3Qgc2hfbW9iaWxlX2xjZGNfY2hhbl9jZmcJKmxjZF9jaGFuOworCXVuc2lnbmVkIGxvbmcJCQlmbGFnczsKKwl1MzIJCQkJY2xrc3JjOworCXVuc2lnbmVkIGludAkJCXZzeW53X29mZnNldDsKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS92aWRlby9zaF9tb2JpbGVfaGRtaS5oIGIvaW5jbHVkZS92aWRlby9zaF9tb2JpbGVfaGRtaS5oCmluZGV4IDFlMWFhNTQuLmI1NjkzMjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdmlkZW8vc2hfbW9iaWxlX2hkbWkuaAorKysgYi9pbmNsdWRlL3ZpZGVvL3NoX21vYmlsZV9oZG1pLmgKQEAgLTEzLDYgKzEzLDcgQEAKIAogc3RydWN0IHNoX21vYmlsZV9sY2RjX2NoYW5fY2ZnOwogc3RydWN0IGRldmljZTsKK3N0cnVjdCBjbGs7CiAKIC8qCiAgKiBmbGFncyBmb3JtYXQKQEAgLTMzLDYgKzM0LDggQEAKIAlzdHJ1Y3Qgc2hfbW9iaWxlX2xjZGNfY2hhbl9jZmcJKmxjZF9jaGFuOwogCXN0cnVjdCBkZXZpY2UJCQkqbGNkX2RldjsKIAl1bnNpZ25lZCBpbnQJCQkgZmxhZ3M7CisJbG9uZyAoKmNsa19vcHRpbWl6ZV9wYXJlbnQpKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nICpiZXN0X2ZyZXEsCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgKnBhcmVudF9mcmVxKTsKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS92aWRlby91ZGxmYi5oIGIvaW5jbHVkZS92aWRlby91ZGxmYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5ZDQ4NWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3ZpZGVvL3VkbGZiLmgKQEAgLTAsMCArMSw5NSBAQAorI2lmbmRlZiBVRExGQl9ICisjZGVmaW5lIFVETEZCX0gKKworLyoKKyAqIFRPRE86IFByb3Bvc2Ugc3RhbmRhcmQgZmIuaCBpb2N0bCBmb3IgcmVwb3J0aW5nIGRhbWFnZSwKKyAqIHVzaW5nIF9JT1dSKCkgYW5kIG9uZSBvZiB0aGUgZXhpc3RpbmcgYXJlYSBzdHJ1Y3RzIGZyb20gZmIuaAorICogQ29uc2lkZXIgdGhlc2UgaW9jdGxzIGRlcHJlY2F0ZWQsIGJ1dCB0aGV5J3JlIHN0aWxsIHVzZWQgYnkgdGhlCisgKiBEaXNwbGF5TGluayBYIHNlcnZlciBhcyB5ZXQgLSBuZWVkIGJvdGggdG8gYmUgbW9kaWZpZWQgaW4gdGFuZGVtCisgKiB3aGVuIG5ldyBpb2N0bChzKSBhcmUgcmVhZHkuCisgKi8KKyNkZWZpbmUgRExGQl9JT0NUTF9SRVRVUk5fRURJRAkgMHhBRAorI2RlZmluZSBETEZCX0lPQ1RMX1JFUE9SVF9EQU1BR0UgMHhBQQorc3RydWN0IGRsb2FyZWEgeworCWludCB4LCB5OworCWludCB3LCBoOworCWludCB4MiwgeTI7Cit9OworCitzdHJ1Y3QgdXJiX25vZGUgeworCXN0cnVjdCBsaXN0X2hlYWQgZW50cnk7CisJc3RydWN0IGRsZmJfZGF0YSAqZGV2OworCXN0cnVjdCBkZWxheWVkX3dvcmsgcmVsZWFzZV91cmJfd29yazsKKwlzdHJ1Y3QgdXJiICp1cmI7Cit9OworCitzdHJ1Y3QgdXJiX2xpc3QgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzcGlubG9ja190IGxvY2s7CisJc3RydWN0IHNlbWFwaG9yZSBsaW1pdF9zZW07CisJaW50IGF2YWlsYWJsZTsKKwlpbnQgY291bnQ7CisJc2l6ZV90IHNpemU7Cit9OworCitzdHJ1Y3QgZGxmYl9kYXRhIHsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKKwlzdHJ1Y3QgZGV2aWNlICpnZGV2OyAvKiAmdWRldi0+ZGV2ICovCisJc3RydWN0IGZiX2luZm8gKmluZm87CisJc3RydWN0IHVyYl9saXN0IHVyYnM7CisJc3RydWN0IGtyZWYga3JlZjsKKwljaGFyICpiYWNraW5nX2J1ZmZlcjsKKwlpbnQgZmJfY291bnQ7CisJYm9vbCB2aXJ0dWFsaXplZDsgLyogdHJ1ZSB3aGVuIHBoeXNpY2FsIHVzYiBkZXZpY2Ugbm90IHByZXNlbnQgKi8KKwlzdHJ1Y3QgZGVsYXllZF93b3JrIGZyZWVfZnJhbWVidWZmZXJfd29yazsKKwlhdG9taWNfdCB1c2JfYWN0aXZlOyAvKiAwID0gdXBkYXRlIHZpcnR1YWwgYnVmZmVyLCBidXQgbm8gdXNiIHRyYWZmaWMgKi8KKwlhdG9taWNfdCBsb3N0X3BpeGVsczsgLyogMSA9IGEgcmVuZGVyIG9wIGZhaWxlZC4gTmVlZCBzY3JlZW4gcmVmcmVzaCAqLworCWNoYXIgKmVkaWQ7IC8qIG51bGwgdW50aWwgd2UgcmVhZCBlZGlkIGZyb20gaHcgb3IgZ2V0IGZyb20gc3lzZnMgKi8KKwlzaXplX3QgZWRpZF9zaXplOworCWludCBza3VfcGl4ZWxfbGltaXQ7CisJaW50IGJhc2UxNjsKKwlpbnQgYmFzZTg7CisJdTMyIHBzZXVkb19wYWxldHRlWzI1Nl07CisJLyogYmxpdC1vbmx5IHJlbmRlcmluZyBwYXRoIG1ldHJpY3MsIGV4cG9zZWQgdGhyb3VnaCBzeXNmcyAqLworCWF0b21pY190IGJ5dGVzX3JlbmRlcmVkOyAvKiByYXcgcGl4ZWwtYnl0ZXMgZHJpdmVyIGFza2VkIHRvIHJlbmRlciAqLworCWF0b21pY190IGJ5dGVzX2lkZW50aWNhbDsgLyogc2F2ZWQgZWZmb3J0IHdpdGggYmFja2J1ZmZlciBjb21wYXJpc29uICovCisJYXRvbWljX3QgYnl0ZXNfc2VudDsgLyogdG8gdXNiLCBhZnRlciBjb21wcmVzc2lvbiBpbmNsdWRpbmcgb3ZlcmhlYWQgKi8KKwlhdG9taWNfdCBjcHVfa2N5Y2xlc191c2VkOyAvKiB0cmFuc3BpcmVkIGR1cmluZyBwaXhlbCBwcm9jZXNzaW5nICovCit9OworCisjZGVmaW5lIE5SX1VTQl9SRVFVRVNUX0kyQ19TVUJfSU8gMHgwMgorI2RlZmluZSBOUl9VU0JfUkVRVUVTVF9DSEFOTkVMIDB4MTIKKworLyogLUJVTEtfU0laRSBhcyBwZXIgdXNiLXNrZWxldG9uLiBDYW4gd2UgZ2V0IGZ1bGwgcGFnZSBhbmQgYXZvaWQgb3ZlcmhlYWQ/ICovCisjZGVmaW5lIEJVTEtfU0laRSA1MTIKKyNkZWZpbmUgTUFYX1RSQU5TRkVSIChQQUdFX1NJWkUqMTYgLSBCVUxLX1NJWkUpCisjZGVmaW5lIFdSSVRFU19JTl9GTElHSFQgKDQpCisKKyNkZWZpbmUgTUFYX1ZFTkRPUl9ERVNDUklQVE9SX1NJWkUgMjU2CisKKyNkZWZpbmUgR0VUX1VSQl9USU1FT1VUCUhaCisjZGVmaW5lIEZSRUVfVVJCX1RJTUVPVVQgKEhaKjIpCisKKyNkZWZpbmUgQlBQICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBNQVhfQ01EX1BJWEVMUwkJMjU1CisKKyNkZWZpbmUgUkxYX0hFQURFUl9CWVRFUwk3CisjZGVmaW5lIE1JTl9STFhfUElYX0JZVEVTICAgICAgIDQKKyNkZWZpbmUgTUlOX1JMWF9DTURfQllURVMJKFJMWF9IRUFERVJfQllURVMgKyBNSU5fUkxYX1BJWF9CWVRFUykKKworI2RlZmluZSBSTEVfSEVBREVSX0JZVEVTCTYKKyNkZWZpbmUgTUlOX1JMRV9QSVhfQllURVMJMworI2RlZmluZSBNSU5fUkxFX0NNRF9CWVRFUwkoUkxFX0hFQURFUl9CWVRFUyArIE1JTl9STEVfUElYX0JZVEVTKQorCisjZGVmaW5lIFJBV19IRUFERVJfQllURVMJNgorI2RlZmluZSBNSU5fUkFXX1BJWF9CWVRFUwkyCisjZGVmaW5lIE1JTl9SQVdfQ01EX0JZVEVTCShSQVdfSEVBREVSX0JZVEVTICsgTUlOX1JBV19QSVhfQllURVMpCisKKyNkZWZpbmUgRExfREVGSU9fV1JJVEVfREVMQVkgICAgNSAvKiBmYl9kZWZlcnJlZF9pby5kZWxheSBpbiBqaWZmaWVzICovCisjZGVmaW5lIERMX0RFRklPX1dSSVRFX0RJU0FCTEUgIChIWio2MCkgLyogImRpc2FibGUiIHdpdGggbG9uZyBkZWxheSAqLworCisvKiByZW1vdmUgdGhlc2Ugb25jZSBhbGlnbi5oIHBhdGNoIGlzIHRha2VuIGludG8ga2VybmVsICovCisjZGVmaW5lIERMX0FMSUdOX1VQKHgsIGEpIEFMSUdOKHgsIGEpCisjZGVmaW5lIERMX0FMSUdOX0RPV04oeCwgYSkgQUxJR04oeC0oYS0xKSwgYSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbml0L0tjb25maWcgYi9pbml0L0tjb25maWcKaW5kZXggYzk3Mjg5OS4uOGRmZDA5NCAxMDA2NDQKLS0tIGEvaW5pdC9LY29uZmlnCisrKyBiL2luaXQvS2NvbmZpZwpAQCAtMzkzLDcgKzM5Myw2IEBACiAKIGNvbmZpZyBSQ1VfVFJBQ0UKIAlib29sICJFbmFibGUgdHJhY2luZyBmb3IgUkNVIgotCWRlcGVuZHMgb24gVFJFRV9SQ1UgfHwgVFJFRV9QUkVFTVBUX1JDVQogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIHByb3ZpZGVzIHRyYWNpbmcgaW4gUkNVIHdoaWNoIHByZXNlbnRzIHN0YXRzCiAJICBpbiBkZWJ1Z2ZzIGZvciBkZWJ1Z2dpbmcgUkNVIGltcGxlbWVudGF0aW9uLgpAQCAtNDU5LDYgKzQ1OCw2MCBAQAogCSAgVFJFRV9QUkVFTVBUX1JDVSBpbXBsZW1lbnRhdGlvbnMsIHBlcm1pdHRpbmcgTWFrZWZpbGUgdG8KIAkgIHRyaXZpYWxseSBzZWxlY3Qga2VybmVsL3JjdXRyZWVfdHJhY2UuYy4KIAorY29uZmlnIFJDVV9CT09TVAorCWJvb2wgIkVuYWJsZSBSQ1UgcHJpb3JpdHkgYm9vc3RpbmciCisJZGVwZW5kcyBvbiBSVF9NVVRFWEVTICYmIFRJTllfUFJFRU1QVF9SQ1UKKwlkZWZhdWx0IG4KKwloZWxwCisJICBUaGlzIG9wdGlvbiBib29zdHMgdGhlIHByaW9yaXR5IG9mIHByZWVtcHRlZCBSQ1UgcmVhZGVycyB0aGF0CisJICBibG9jayB0aGUgY3VycmVudCBwcmVlbXB0aWJsZSBSQ1UgZ3JhY2UgcGVyaW9kIGZvciB0b28gbG9uZy4KKwkgIFRoaXMgb3B0aW9uIGFsc28gcHJldmVudHMgaGVhdnkgbG9hZHMgZnJvbSBibG9ja2luZyBSQ1UKKwkgIGNhbGxiYWNrIGludm9jYXRpb24gZm9yIGFsbCBmbGF2b3JzIG9mIFJDVS4KKworCSAgU2F5IFkgaGVyZSBpZiB5b3UgYXJlIHdvcmtpbmcgd2l0aCByZWFsLXRpbWUgYXBwcyBvciBoZWF2eSBsb2FkcworCSAgU2F5IE4gaGVyZSBpZiB5b3UgYXJlIHVuc3VyZS4KKworY29uZmlnIFJDVV9CT09TVF9QUklPCisJaW50ICJSZWFsLXRpbWUgcHJpb3JpdHkgdG8gYm9vc3QgUkNVIHJlYWRlcnMgdG8iCisJcmFuZ2UgMSA5OQorCWRlcGVuZHMgb24gUkNVX0JPT1NUCisJZGVmYXVsdCAxCisJaGVscAorCSAgVGhpcyBvcHRpb24gc3BlY2lmaWVzIHRoZSByZWFsLXRpbWUgcHJpb3JpdHkgdG8gd2hpY2ggcHJlZW1wdGVkCisJICBSQ1UgcmVhZGVycyBhcmUgdG8gYmUgYm9vc3RlZC4gIElmIHlvdSBhcmUgd29ya2luZyB3aXRoIENQVS1ib3VuZAorCSAgcmVhbC10aW1lIGFwcGxpY2F0aW9ucywgeW91IHNob3VsZCBzcGVjaWZ5IGEgcHJpb3JpdHkgaGlnaGVyIHRoZW4KKwkgIHRoZSBoaWdoZXN0LXByaW9yaXR5IENQVS1ib3VuZCBhcHBsaWNhdGlvbi4KKworCSAgU3BlY2lmeSB0aGUgcmVhbC10aW1lIHByaW9yaXR5LCBvciB0YWtlIHRoZSBkZWZhdWx0IGlmIHVuc3VyZS4KKworY29uZmlnIFJDVV9CT09TVF9ERUxBWQorCWludCAiTWlsbGlzZWNvbmRzIHRvIGRlbGF5IGJvb3N0aW5nIGFmdGVyIFJDVSBncmFjZS1wZXJpb2Qgc3RhcnQiCisJcmFuZ2UgMCAzMDAwCisJZGVwZW5kcyBvbiBSQ1VfQk9PU1QKKwlkZWZhdWx0IDUwMAorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIHNwZWNpZmllcyB0aGUgdGltZSB0byB3YWl0IGFmdGVyIHRoZSBiZWdpbm5pbmcgb2YKKwkgIGEgZ2l2ZW4gZ3JhY2UgcGVyaW9kIGJlZm9yZSBwcmlvcml0eS1ib29zdGluZyBwcmVlbXB0ZWQgUkNVCisJICByZWFkZXJzIGJsb2NraW5nIHRoYXQgZ3JhY2UgcGVyaW9kLiAgTm90ZSB0aGF0IGFueSBSQ1UgcmVhZGVyCisJICBibG9ja2luZyBhbiBleHBlZGl0ZWQgUkNVIGdyYWNlIHBlcmlvZCBpcyBib29zdGVkIGltbWVkaWF0ZWx5LgorCisJICBBY2NlcHQgdGhlIGRlZmF1bHQgaWYgdW5zdXJlLgorCitjb25maWcgU1JDVV9TWU5DSFJPTklaRV9ERUxBWQorCWludCAiTWljcm9zZWNvbmRzIHRvIGRlbGF5IGJlZm9yZSB3YWl0aW5nIGZvciByZWFkZXJzIgorCXJhbmdlIDAgMjAKKwlkZWZhdWx0IDEwCisJaGVscAorCSAgVGhpcyBvcHRpb24gY29udHJvbHMgaG93IGxvbmcgU1JDVSBkZWxheXMgYmVmb3JlIGVudGVyaW5nIGl0cworCSAgbG9vcCB3YWl0aW5nIG9uIFNSQ1UgcmVhZGVycy4gIFRoZSBwdXJwb3NlIG9mIHRoaXMgbG9vcCBpcworCSAgdG8gYXZvaWQgdGhlIHVuY29uZGl0aW9uYWwgY29udGV4dC1zd2l0Y2ggcGVuYWx0eSB0aGF0IHdvdWxkCisJICBvdGhlcndpc2UgYmUgaW5jdXJyZWQgaWYgdGhlcmUgd2FzIGFuIGFjdGl2ZSBTUkNVIHJlYWRlciwKKwkgIGluIGEgbWFubmVyIHNpbWlsYXIgdG8gYWRhcHRpdmUgbG9ja2luZyBzY2hlbWVzLiAgVGhpcyBzaG91bGQKKwkgIGJlIHNldCB0byBiZSBhIGJpdCBsb25nZXIgdGhhbiB0aGUgY29tbW9uLWNhc2UgU1JDVSByZWFkLXNpZGUKKwkgIGNyaXRpY2FsLXNlY3Rpb24gb3ZlcmhlYWQuCisKKwkgIEFjY2VwdCB0aGUgZGVmYXVsdCBpZiB1bnN1cmUuCisKIGVuZG1lbnUgIyAiUkNVIFN1YnN5c3RlbSIKIAogY29uZmlnIElLQ09ORklHCkBAIC03NDEsNiArNzk0LDE5IEBACiAKIGVuZGlmICMgTkFNRVNQQUNFUwogCitjb25maWcgU0NIRURfQVVUT0dST1VQCisJYm9vbCAiQXV0b21hdGljIHByb2Nlc3MgZ3JvdXAgc2NoZWR1bGluZyIKKwlzZWxlY3QgRVZFTlRGRAorCXNlbGVjdCBDR1JPVVBTCisJc2VsZWN0IENHUk9VUF9TQ0hFRAorCXNlbGVjdCBGQUlSX0dST1VQX1NDSEVECisJaGVscAorCSAgVGhpcyBvcHRpb24gb3B0aW1pemVzIHRoZSBzY2hlZHVsZXIgZm9yIGNvbW1vbiBkZXNrdG9wIHdvcmtsb2FkcyBieQorCSAgYXV0b21hdGljYWxseSBjcmVhdGluZyBhbmQgcG9wdWxhdGluZyB0YXNrIGdyb3Vwcy4gIFRoaXMgc2VwYXJhdGlvbgorCSAgb2Ygd29ya2xvYWRzIGlzb2xhdGVzIGFnZ3Jlc3NpdmUgQ1BVIGJ1cm5lcnMgKGxpa2UgYnVpbGQgam9icykgZnJvbQorCSAgZGVza3RvcCBhcHBsaWNhdGlvbnMuICBUYXNrIGdyb3VwIGF1dG9nZW5lcmF0aW9uIGlzIGN1cnJlbnRseSBiYXNlZAorCSAgdXBvbiB0YXNrIHNlc3Npb24uCisKIGNvbmZpZyBNTV9PV05FUgogCWJvb2wKIApkaWZmIC0tZ2l0IGEvaW5pdC9tYWluLmMgYi9pbml0L21haW4uYwppbmRleCA4NjQ2NDAxLi4wMDc5OWMxIDEwMDY0NAotLS0gYS9pbml0L21haW4uYworKysgYi9pbml0L21haW4uYwpAQCAtNjcsNiArNjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NmaS5oPgogI2luY2x1ZGUgPGxpbnV4L3NobWVtX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmZfZXZlbnQuaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9idWdzLmg+CkBAIC02MDMsNiArNjA0LDggQEAKIAkJCQkiZW5hYmxlZCAqdmVyeSogZWFybHksIGZpeGluZyBpdFxuIik7CiAJCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAJfQorCWlkcl9pbml0X2NhY2hlKCk7CisJcGVyZl9ldmVudF9pbml0KCk7CiAJcmN1X2luaXQoKTsKIAlyYWRpeF90cmVlX2luaXQoKTsKIAkvKiBpbml0IHNvbWUgbGlua3MgYmVmb3JlIGluaXRfSVNBX2lycXMoKSAqLwpAQCAtNjU4LDcgKzY2MSw2IEBACiAJZW5hYmxlX2RlYnVnX3BhZ2VhbGxvYygpOwogCWttZW1sZWFrX2luaXQoKTsKIAlkZWJ1Z19vYmplY3RzX21lbV9pbml0KCk7Ci0JaWRyX2luaXRfY2FjaGUoKTsKIAlzZXR1cF9wZXJfY3B1X3BhZ2VzZXQoKTsKIAludW1hX3BvbGljeV9pbml0KCk7CiAJaWYgKGxhdGVfdGltZV9pbml0KQpAQCAtNzc1LDkgKzc3Nyw2IEBACiAKIAlmb3IgKGZuID0gX19lYXJseV9pbml0Y2FsbF9lbmQ7IGZuIDwgX19pbml0Y2FsbF9lbmQ7IGZuKyspCiAJCWRvX29uZV9pbml0Y2FsbCgqZm4pOwotCi0JLyogTWFrZSBzdXJlIHRoZXJlIGlzIG5vIHBlbmRpbmcgc3R1ZmYgZnJvbSB0aGUgaW5pdGNhbGwgc2VxdWVuY2UgKi8KLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwogfQogCiAvKgpAQCAtODgyLDYgKzg4MSw3IEBACiAJc21wX3ByZXBhcmVfY3B1cyhzZXR1cF9tYXhfY3B1cyk7CiAKIAlkb19wcmVfc21wX2luaXRjYWxscygpOworCWxvY2t1cF9kZXRlY3Rvcl9pbml0KCk7CiAKIAlzbXBfaW5pdCgpOwogCXNjaGVkX2luaXRfc21wKCk7CmRpZmYgLS1naXQgYS9pcGMvbXF1ZXVlLmMgYi9pcGMvbXF1ZXVlLmMKaW5kZXggMDM1ZjQzOS4uMTRmYjZkNiAxMDA2NDQKLS0tIGEvaXBjL21xdWV1ZS5jCisrKyBiL2lwYy9tcXVldWUuYwpAQCAtMjM3LDkgKzIzNywxNiBAQAogCXJldHVybiAmZWktPnZmc19pbm9kZTsKIH0KIAorc3RhdGljIHZvaWQgbXF1ZXVlX2lfY2FsbGJhY2soc3RydWN0IHJjdV9oZWFkICpoZWFkKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGlub2RlLCBpX3JjdSk7CisJSU5JVF9MSVNUX0hFQUQoJmlub2RlLT5pX2RlbnRyeSk7CisJa21lbV9jYWNoZV9mcmVlKG1xdWV1ZV9pbm9kZV9jYWNoZXAsIE1RVUVVRV9JKGlub2RlKSk7Cit9CisKIHN0YXRpYyB2b2lkIG1xdWV1ZV9kZXN0cm95X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7Ci0Ja21lbV9jYWNoZV9mcmVlKG1xdWV1ZV9pbm9kZV9jYWNoZXAsIE1RVUVVRV9JKGlub2RlKSk7CisJY2FsbF9yY3UoJmlub2RlLT5pX3JjdSwgbXF1ZXVlX2lfY2FsbGJhY2spOwogfQogCiBzdGF0aWMgdm9pZCBtcXVldWVfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKZGlmZiAtLWdpdCBhL2tlcm5lbC9NYWtlZmlsZSBiL2tlcm5lbC9NYWtlZmlsZQppbmRleCAwYjVmZjA4Li4zM2UwYTM5IDEwMDY0NAotLS0gYS9rZXJuZWwvTWFrZWZpbGUKKysrIGIva2VybmVsL01ha2VmaWxlCkBAIC0xMjEsNyArMTIxLDcgQEAKICMgY29uZmlnX2RhdGEuaCBjb250YWlucyB0aGUgc2FtZSBpbmZvcm1hdGlvbiBhcyBpa2NvbmZpZy5oIGJ1dCBnemlwcGVkLgogIyBJbmZvIGZyb20gY29uZmlnX2RhdGEgY2FuIGJlIGV4dHJhY3RlZCBmcm9tIC9wcm9jL2NvbmZpZyoKIHRhcmdldHMgKz0gY29uZmlnX2RhdGEuZ3oKLSQob2JqKS9jb25maWdfZGF0YS5nejogLmNvbmZpZyBGT1JDRQorJChvYmopL2NvbmZpZ19kYXRhLmd6OiAkKEtDT05GSUdfQ09ORklHKSBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLGd6aXApCiAKIHF1aWV0X2NtZF9pa2NvbmZpZ2d6ID0gSUtDRkcgICAkQApkaWZmIC0tZ2l0IGEva2VybmVsL2Nncm91cC5jIGIva2VybmVsL2Nncm91cC5jCmluZGV4IDY2YTQxNmIuLjUxY2RkYzEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jZ3JvdXAuYworKysgYi9rZXJuZWwvY2dyb3VwLmMKQEAgLTc2Myw2ICs3NjMsOCBAQAogICogLT4gY2dyb3VwX21rZGlyLgogICovCiAKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpjZ3JvdXBfbG9va3VwKHN0cnVjdCBpbm9kZSAqZGlyLAorCQkJc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCk7CiBzdGF0aWMgaW50IGNncm91cF9ta2RpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgbW9kZSk7CiBzdGF0aWMgaW50IGNncm91cF9ybWRpcihzdHJ1Y3QgaW5vZGUgKnVudXNlZF9kaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7CiBzdGF0aWMgaW50IGNncm91cF9wb3B1bGF0ZV9kaXIoc3RydWN0IGNncm91cCAqY2dycCk7CkBAIC04NzQsMjUgKzg3NiwyOSBAQAogCXN0cnVjdCBsaXN0X2hlYWQgKm5vZGU7CiAKIAlCVUdfT04oIW11dGV4X2lzX2xvY2tlZCgmZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KSk7Ci0Jc3Bpbl9sb2NrKCZkY2FjaGVfbG9jayk7CisJc3Bpbl9sb2NrKCZkZW50cnktPmRfbG9jayk7CiAJbm9kZSA9IGRlbnRyeS0+ZF9zdWJkaXJzLm5leHQ7CiAJd2hpbGUgKG5vZGUgIT0gJmRlbnRyeS0+ZF9zdWJkaXJzKSB7CiAJCXN0cnVjdCBkZW50cnkgKmQgPSBsaXN0X2VudHJ5KG5vZGUsIHN0cnVjdCBkZW50cnksIGRfdS5kX2NoaWxkKTsKKworCQlzcGluX2xvY2tfbmVzdGVkKCZkLT5kX2xvY2ssIERFTlRSWV9EX0xPQ0tfTkVTVEVEKTsKIAkJbGlzdF9kZWxfaW5pdChub2RlKTsKIAkJaWYgKGQtPmRfaW5vZGUpIHsKIAkJCS8qIFRoaXMgc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCBvbiBhIGNncm91cAogCQkJICogZGlyZWN0b3J5IHdpdGggY2hpbGQgY2dyb3VwcyAqLwogCQkJQlVHX09OKGQtPmRfaW5vZGUtPmlfbW9kZSAmIFNfSUZESVIpOwotCQkJZCA9IGRnZXRfbG9ja2VkKGQpOwotCQkJc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKKwkJCWRnZXRfZGxvY2soZCk7CisJCQlzcGluX3VubG9jaygmZC0+ZF9sb2NrKTsKKwkJCXNwaW5fdW5sb2NrKCZkZW50cnktPmRfbG9jayk7CiAJCQlkX2RlbGV0ZShkKTsKIAkJCXNpbXBsZV91bmxpbmsoZGVudHJ5LT5kX2lub2RlLCBkKTsKIAkJCWRwdXQoZCk7Ci0JCQlzcGluX2xvY2soJmRjYWNoZV9sb2NrKTsKLQkJfQorCQkJc3Bpbl9sb2NrKCZkZW50cnktPmRfbG9jayk7CisJCX0gZWxzZQorCQkJc3Bpbl91bmxvY2soJmQtPmRfbG9jayk7CiAJCW5vZGUgPSBkZW50cnktPmRfc3ViZGlycy5uZXh0OwogCX0KLQlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOworCXNwaW5fdW5sb2NrKCZkZW50cnktPmRfbG9jayk7CiB9CiAKIC8qCkBAIC05MDAsMTEgKzkwNiwxNiBAQAogICovCiBzdGF0aWMgdm9pZCBjZ3JvdXBfZF9yZW1vdmVfZGlyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIHsKKwlzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQ7CisKIAljZ3JvdXBfY2xlYXJfZGlyZWN0b3J5KGRlbnRyeSk7CiAKLQlzcGluX2xvY2soJmRjYWNoZV9sb2NrKTsKKwlwYXJlbnQgPSBkZW50cnktPmRfcGFyZW50OworCXNwaW5fbG9jaygmcGFyZW50LT5kX2xvY2spOworCXNwaW5fbG9jaygmZGVudHJ5LT5kX2xvY2spOwogCWxpc3RfZGVsX2luaXQoJmRlbnRyeS0+ZF91LmRfY2hpbGQpOwotCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7CisJc3Bpbl91bmxvY2soJmRlbnRyeS0+ZF9sb2NrKTsKKwlzcGluX3VubG9jaygmcGFyZW50LT5kX2xvY2spOwogCXJlbW92ZV9kaXIoZGVudHJ5KTsKIH0KIApAQCAtMjE4MCw3ICsyMTkxLDcgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBjZ3JvdXBfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7Ci0JLmxvb2t1cCA9IHNpbXBsZV9sb29rdXAsCisJLmxvb2t1cCA9IGNncm91cF9sb29rdXAsCiAJLm1rZGlyID0gY2dyb3VwX21rZGlyLAogCS5ybWRpciA9IGNncm91cF9ybWRpciwKIAkucmVuYW1lID0gY2dyb3VwX3JlbmFtZSwKQEAgLTIxOTYsMTMgKzIyMDcsMjkgQEAKIAlyZXR1cm4gX19kX2NmdChmaWxlLT5mX2RlbnRyeSk7CiB9CiAKLXN0YXRpYyBpbnQgY2dyb3VwX2NyZWF0ZV9maWxlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgbW9kZV90IG1vZGUsCi0JCQkJc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3N0YXRpYyBpbnQgY2dyb3VwX2RlbGV0ZV9kZW50cnkoY29uc3Qgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogewotCXN0YXRpYyBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgY2dyb3VwX2RvcHMgPSB7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpjZ3JvdXBfbG9va3VwKHN0cnVjdCBpbm9kZSAqZGlyLAorCQkJc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKK3sKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGNncm91cF9kZW50cnlfb3BlcmF0aW9ucyA9IHsKKwkJLmRfZGVsZXRlID0gY2dyb3VwX2RlbGV0ZV9kZW50cnksCiAJCS5kX2lwdXQgPSBjZ3JvdXBfZGlwdXQsCiAJfTsKIAorCWlmIChkZW50cnktPmRfbmFtZS5sZW4gPiBOQU1FX01BWCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOQU1FVE9PTE9ORyk7CisJZF9zZXRfZF9vcChkZW50cnksICZjZ3JvdXBfZGVudHJ5X29wZXJhdGlvbnMpOworCWRfYWRkKGRlbnRyeSwgTlVMTCk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgY2dyb3VwX2NyZWF0ZV9maWxlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgbW9kZV90IG1vZGUsCisJCQkJc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwogCiAJaWYgKCFkZW50cnkpCkBAIC0yMjI4LDcgKzIyNTUsNiBAQAogCQlpbm9kZS0+aV9zaXplID0gMDsKIAkJaW5vZGUtPmlfZm9wID0gJmNncm91cF9maWxlX29wZXJhdGlvbnM7CiAJfQotCWRlbnRyeS0+ZF9vcCA9ICZjZ3JvdXBfZG9wczsKIAlkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOwogCWRnZXQoZGVudHJ5KTsJLyogRXh0cmEgY291bnQgLSBwaW4gdGhlIGRlbnRyeSBpbiBjb3JlICovCiAJcmV0dXJuIDA7CkBAIC0zNjM4LDkgKzM2NjQsNyBAQAogCWxpc3RfZGVsKCZjZ3JwLT5zaWJsaW5nKTsKIAljZ3JvdXBfdW5sb2NrX2hpZXJhcmNoeShjZ3JwLT5yb290KTsKIAotCXNwaW5fbG9jaygmY2dycC0+ZGVudHJ5LT5kX2xvY2spOwogCWQgPSBkZ2V0KGNncnAtPmRlbnRyeSk7Ci0Jc3Bpbl91bmxvY2soJmQtPmRfbG9jayk7CiAKIAljZ3JvdXBfZF9yZW1vdmVfZGlyKGQpOwogCWRwdXQoZCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvY3B1LmMgYi9rZXJuZWwvY3B1LmMKaW5kZXggZjZlNzI2Zi4uMTU2Y2M1NSAxMDA2NDQKLS0tIGEva2VybmVsL2NwdS5jCisrKyBiL2tlcm5lbC9jcHUuYwpAQCAtMTg5LDcgKzE4OSw2IEBACiB9CiAKIHN0cnVjdCB0YWtlX2NwdV9kb3duX3BhcmFtIHsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNhbGxlcjsKIAl1bnNpZ25lZCBsb25nIG1vZDsKIAl2b2lkICpoY3B1OwogfTsKQEAgLTE5OCw3ICsxOTcsNiBAQAogc3RhdGljIGludCBfX3JlZiB0YWtlX2NwdV9kb3duKHZvaWQgKl9wYXJhbSkKIHsKIAlzdHJ1Y3QgdGFrZV9jcHVfZG93bl9wYXJhbSAqcGFyYW0gPSBfcGFyYW07Ci0JdW5zaWduZWQgaW50IGNwdSA9ICh1bnNpZ25lZCBsb25nKXBhcmFtLT5oY3B1OwogCWludCBlcnI7CiAKIAkvKiBFbnN1cmUgdGhpcyBDUFUgZG9lc24ndCBoYW5kbGUgYW55IG1vcmUgaW50ZXJydXB0cy4gKi8KQEAgLTIwOCwxMSArMjA2LDYgQEAKIAogCWNwdV9ub3RpZnkoQ1BVX0RZSU5HIHwgcGFyYW0tPm1vZCwgcGFyYW0tPmhjcHUpOwogCi0JaWYgKHRhc2tfY3B1KHBhcmFtLT5jYWxsZXIpID09IGNwdSkKLQkJbW92ZV90YXNrX29mZl9kZWFkX2NwdShjcHUsIHBhcmFtLT5jYWxsZXIpOwotCS8qIEZvcmNlIGlkbGUgdGFzayB0byBydW4gYXMgc29vbiBhcyB3ZSB5aWVsZDogaXQgc2hvdWxkCi0JICAgaW1tZWRpYXRlbHkgbm90aWNlIGNwdSBpcyBvZmZsaW5lIGFuZCBkaWUgcXVpY2tseS4gKi8KLQlzY2hlZF9pZGxlX25leHQoKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjIzLDcgKzIxNiw2IEBACiAJdm9pZCAqaGNwdSA9ICh2b2lkICopKGxvbmcpY3B1OwogCXVuc2lnbmVkIGxvbmcgbW9kID0gdGFza3NfZnJvemVuID8gQ1BVX1RBU0tTX0ZST1pFTiA6IDA7CiAJc3RydWN0IHRha2VfY3B1X2Rvd25fcGFyYW0gdGNkX3BhcmFtID0gewotCQkuY2FsbGVyID0gY3VycmVudCwKIAkJLm1vZCA9IG1vZCwKIAkJLmhjcHUgPSBoY3B1LAogCX07CkBAIC0yNTMsOSArMjQ1LDE1IEBACiAJfQogCUJVR19PTihjcHVfb25saW5lKGNwdSkpOwogCi0JLyogV2FpdCBmb3IgaXQgdG8gc2xlZXAgKGxlYXZpbmcgaWRsZSB0YXNrKS4gKi8KKwkvKgorCSAqIFRoZSBtaWdyYXRpb25fY2FsbCgpIENQVV9EWUlORyBjYWxsYmFjayB3aWxsIGhhdmUgcmVtb3ZlZCBhbGwKKwkgKiBydW5uYWJsZSB0YXNrcyBmcm9tIHRoZSBjcHUsIHRoZXJlJ3Mgb25seSB0aGUgaWRsZSB0YXNrIGxlZnQgbm93CisJICogdGhhdCB0aGUgbWlncmF0aW9uIHRocmVhZCBpcyBkb25lIGRvaW5nIHRoZSBzdG9wX21hY2hpbmUgdGhpbmcuCisJICoKKwkgKiBXYWl0IGZvciB0aGUgc3RvcCB0aHJlYWQgdG8gZ28gYXdheS4KKwkgKi8KIAl3aGlsZSAoIWlkbGVfY3B1KGNwdSkpCi0JCXlpZWxkKCk7CisJCWNwdV9yZWxheCgpOwogCiAJLyogVGhpcyBhY3R1YWxseSBraWxscyB0aGUgQ1BVLiAqLwogCV9fY3B1X2RpZShjcHUpOwpAQCAtMzg2LDYgKzM4NCwxNCBAQAogI2lmZGVmIENPTkZJR19QTV9TTEVFUF9TTVAKIHN0YXRpYyBjcHVtYXNrX3Zhcl90IGZyb3plbl9jcHVzOwogCit2b2lkIF9fd2VhayBhcmNoX2Rpc2FibGVfbm9uYm9vdF9jcHVzX2JlZ2luKHZvaWQpCit7Cit9CisKK3ZvaWQgX193ZWFrIGFyY2hfZGlzYWJsZV9ub25ib290X2NwdXNfZW5kKHZvaWQpCit7Cit9CisKIGludCBkaXNhYmxlX25vbmJvb3RfY3B1cyh2b2lkKQogewogCWludCBjcHUsIGZpcnN0X2NwdSwgZXJyb3IgPSAwOwpAQCAtMzk3LDYgKzQwMyw3IEBACiAJICogd2l0aCB0aGUgdXNlcnNwYWNlIHRyeWluZyB0byB1c2UgdGhlIENQVSBob3RwbHVnIGF0IHRoZSBzYW1lIHRpbWUKIAkgKi8KIAljcHVtYXNrX2NsZWFyKGZyb3plbl9jcHVzKTsKKwlhcmNoX2Rpc2FibGVfbm9uYm9vdF9jcHVzX2JlZ2luKCk7CiAKIAlwcmludGsoIkRpc2FibGluZyBub24tYm9vdCBDUFVzIC4uLlxuIik7CiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKQEAgLTQxMiw2ICs0MTksOCBAQAogCQl9CiAJfQogCisJYXJjaF9kaXNhYmxlX25vbmJvb3RfY3B1c19lbmQoKTsKKwogCWlmICghZXJyb3IpIHsKIAkJQlVHX09OKG51bV9vbmxpbmVfY3B1cygpID4gMSk7CiAJCS8qIE1ha2Ugc3VyZSB0aGUgQ1BVcyB3b24ndCBiZSBlbmFibGVkIGJ5IHNvbWVvbmUgZWxzZSAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL2V4aXQuYyBiL2tlcm5lbC9leGl0LmMKaW5kZXggNjc2MTQ5YS4uODljNzQ4NiAxMDA2NDQKLS0tIGEva2VybmVsL2V4aXQuYworKysgYi9rZXJuZWwvZXhpdC5jCkBAIC02OSw3ICs2OSw3IEBACiAKIAkJbGlzdF9kZWxfcmN1KCZwLT50YXNrcyk7CiAJCWxpc3RfZGVsX2luaXQoJnAtPnNpYmxpbmcpOwotCQlfX2dldF9jcHVfdmFyKHByb2Nlc3NfY291bnRzKS0tOworCQlfX3RoaXNfY3B1X2RlYyhwcm9jZXNzX2NvdW50cyk7CiAJfQogCWxpc3RfZGVsX3JjdSgmcC0+dGhyZWFkX2dyb3VwKTsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC9mb3JrLmMgYi9rZXJuZWwvZm9yay5jCmluZGV4IDU0NDdkYzcuLmQ5YjQ0ZjIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9mb3JrLmMKKysrIGIva2VybmVsL2ZvcmsuYwpAQCAtMTY5LDYgKzE2OSw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9zaWduYWxfc3RydWN0KHN0cnVjdCBzaWduYWxfc3RydWN0ICpzaWcpCiB7CiAJdGFza3N0YXRzX3RnaWRfZnJlZShzaWcpOworCXNjaGVkX2F1dG9ncm91cF9leGl0KHNpZyk7CiAJa21lbV9jYWNoZV9mcmVlKHNpZ25hbF9jYWNoZXAsIHNpZyk7CiB9CiAKQEAgLTkwNSw2ICs5MDYsNyBAQAogCXBvc2l4X2NwdV90aW1lcnNfaW5pdF9ncm91cChzaWcpOwogCiAJdHR5X2F1ZGl0X2Zvcmsoc2lnKTsKKwlzY2hlZF9hdXRvZ3JvdXBfZm9yayhzaWcpOwogCiAJc2lnLT5vb21fYWRqID0gY3VycmVudC0+c2lnbmFsLT5vb21fYWRqOwogCXNpZy0+b29tX3Njb3JlX2FkaiA9IGN1cnJlbnQtPnNpZ25hbC0+b29tX3Njb3JlX2FkajsKQEAgLTEyODMsNyArMTI4NSw3IEBACiAJCQlhdHRhY2hfcGlkKHAsIFBJRFRZUEVfU0lELCB0YXNrX3Nlc3Npb24oY3VycmVudCkpOwogCQkJbGlzdF9hZGRfdGFpbCgmcC0+c2libGluZywgJnAtPnJlYWxfcGFyZW50LT5jaGlsZHJlbik7CiAJCQlsaXN0X2FkZF90YWlsX3JjdSgmcC0+dGFza3MsICZpbml0X3Rhc2sudGFza3MpOwotCQkJX19nZXRfY3B1X3Zhcihwcm9jZXNzX2NvdW50cykrKzsKKwkJCV9fdGhpc19jcHVfaW5jKHByb2Nlc3NfY291bnRzKTsKIAkJfQogCQlhdHRhY2hfcGlkKHAsIFBJRFRZUEVfUElELCBwaWQpOwogCQlucl90aHJlYWRzKys7CmRpZmYgLS1naXQgYS9rZXJuZWwvZnJlZXplci5jIGIva2VybmVsL2ZyZWV6ZXIuYwppbmRleCBiZDFkNDJiLi42NmVjZDJlIDEwMDY0NAotLS0gYS9rZXJuZWwvZnJlZXplci5jCisrKyBiL2tlcm5lbC9mcmVlemVyLmMKQEAgLTEwNCw4ICsxMDQsMTMgQEAKIAl9CiAKIAlpZiAoc2hvdWxkX3NlbmRfc2lnbmFsKHApKSB7Ci0JCWlmICghc2lnbmFsX3BlbmRpbmcocCkpCi0JCQlmYWtlX3NpZ25hbF93YWtlX3VwKHApOworCQlmYWtlX3NpZ25hbF93YWtlX3VwKHApOworCQkvKgorCQkgKiBmYWtlX3NpZ25hbF93YWtlX3VwKCkgZ29lcyB0aHJvdWdoIHAncyBzY2hlZHVsZXIKKwkJICogbG9jayBhbmQgZ3VhcmFudGVlcyB0aGF0IFRBU0tfU1RPUFBFRC9UUkFDRUQgLT4KKwkJICogVEFTS19SVU5OSU5HIHRyYW5zaXRpb24gY2FuJ3QgcmFjZSB3aXRoIHRhc2sgc3RhdGUKKwkJICogdGVzdGluZyBpbiB0cnlfdG9fZnJlZXplX3Rhc2tzKCkuCisJCSAqLwogCX0gZWxzZSBpZiAoc2lnX29ubHkpIHsKIAkJcmV0dXJuIGZhbHNlOwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9rZXJuZWwvZnV0ZXguYyBiL2tlcm5lbC9mdXRleC5jCmluZGV4IDQwYTg3NzcuLjMwMTliOTIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9mdXRleC5jCisrKyBiL2tlcm5lbC9mdXRleC5jCkBAIC02OSw2ICs2OSwxNCBAQAogI2RlZmluZSBGVVRFWF9IQVNIQklUUyAoQ09ORklHX0JBU0VfU01BTEwgPyA0IDogOCkKIAogLyoKKyAqIEZ1dGV4IGZsYWdzIHVzZWQgdG8gZW5jb2RlIG9wdGlvbnMgdG8gZnVuY3Rpb25zIGFuZCBwcmVzZXJ2ZSB0aGVtIGFjcm9zcworICogcmVzdGFydHMuCisgKi8KKyNkZWZpbmUgRkxBR1NfU0hBUkVECQkweDAxCisjZGVmaW5lIEZMQUdTX0NMT0NLUlQJCTB4MDIKKyNkZWZpbmUgRkxBR1NfSEFTX1RJTUVPVVQJMHgwNAorCisvKgogICogUHJpb3JpdHkgSW5oZXJpdGFuY2Ugc3RhdGU6CiAgKi8KIHN0cnVjdCBmdXRleF9waV9zdGF0ZSB7CkBAIC0xMjMsNiArMTMxLDEyIEBACiAJdTMyIGJpdHNldDsKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZnV0ZXhfcSBmdXRleF9xX2luaXQgPSB7CisJLyogbGlzdCBnZXRzIGluaXRpYWxpemVkIGluIHF1ZXVlX21lKCkqLworCS5rZXkgPSBGVVRFWF9LRVlfSU5JVCwKKwkuYml0c2V0ID0gRlVURVhfQklUU0VUX01BVENIX0FOWQorfTsKKwogLyoKICAqIEhhc2ggYnVja2V0cyBhcmUgc2hhcmVkIGJ5IGFsbCB0aGUgZnV0ZXhfa2V5cyB0aGF0IGhhc2ggdG8gdGhlIHNhbWUKICAqIGxvY2F0aW9uLiAgRWFjaCBrZXkgbWF5IGhhdmUgbXVsdGlwbGUgZnV0ZXhfcSBzdHJ1Y3R1cmVzLCBvbmUgZm9yIGVhY2ggdGFzawpAQCAtMjgzLDggKzI5Nyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUKLXZvaWQgcHV0X2Z1dGV4X2tleShpbnQgZnNoYXJlZCwgdW5pb24gZnV0ZXhfa2V5ICprZXkpCitzdGF0aWMgaW5saW5lIHZvaWQgcHV0X2Z1dGV4X2tleSh1bmlvbiBmdXRleF9rZXkgKmtleSkKIHsKIAlkcm9wX2Z1dGV4X2tleV9yZWZzKGtleSk7CiB9CkBAIC04NzAsNyArODgzLDggQEAKIC8qCiAgKiBXYWtlIHVwIHdhaXRlcnMgbWF0Y2hpbmcgYml0c2V0IHF1ZXVlZCBvbiB0aGlzIGZ1dGV4ICh1YWRkcikuCiAgKi8KLXN0YXRpYyBpbnQgZnV0ZXhfd2FrZSh1MzIgX191c2VyICp1YWRkciwgaW50IGZzaGFyZWQsIGludCBucl93YWtlLCB1MzIgYml0c2V0KQorc3RhdGljIGludAorZnV0ZXhfd2FrZSh1MzIgX191c2VyICp1YWRkciwgdW5zaWduZWQgaW50IGZsYWdzLCBpbnQgbnJfd2FrZSwgdTMyIGJpdHNldCkKIHsKIAlzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiOwogCXN0cnVjdCBmdXRleF9xICp0aGlzLCAqbmV4dDsKQEAgLTg4MSw3ICs4OTUsNyBAQAogCWlmICghYml0c2V0KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJldCA9IGdldF9mdXRleF9rZXkodWFkZHIsIGZzaGFyZWQsICZrZXkpOworCXJldCA9IGdldF9mdXRleF9rZXkodWFkZHIsIGZsYWdzICYgRkxBR1NfU0hBUkVELCAma2V5KTsKIAlpZiAodW5saWtlbHkocmV0ICE9IDApKQogCQlnb3RvIG91dDsKIApAQCAtOTA3LDcgKzkyMSw3IEBACiAJfQogCiAJc3Bpbl91bmxvY2soJmhiLT5sb2NrKTsKLQlwdXRfZnV0ZXhfa2V5KGZzaGFyZWQsICZrZXkpOworCXB1dF9mdXRleF9rZXkoJmtleSk7CiBvdXQ6CiAJcmV0dXJuIHJldDsKIH0KQEAgLTkxNyw3ICs5MzEsNyBAQAogICogdG8gdGhpcyB2aXJ0dWFsIGFkZHJlc3M6CiAgKi8KIHN0YXRpYyBpbnQKLWZ1dGV4X3dha2Vfb3AodTMyIF9fdXNlciAqdWFkZHIxLCBpbnQgZnNoYXJlZCwgdTMyIF9fdXNlciAqdWFkZHIyLAorZnV0ZXhfd2FrZV9vcCh1MzIgX191c2VyICp1YWRkcjEsIHVuc2lnbmVkIGludCBmbGFncywgdTMyIF9fdXNlciAqdWFkZHIyLAogCSAgICAgIGludCBucl93YWtlLCBpbnQgbnJfd2FrZTIsIGludCBvcCkKIHsKIAl1bmlvbiBmdXRleF9rZXkga2V5MSA9IEZVVEVYX0tFWV9JTklULCBrZXkyID0gRlVURVhfS0VZX0lOSVQ7CkBAIC05MjcsMTAgKzk0MSwxMCBAQAogCWludCByZXQsIG9wX3JldDsKIAogcmV0cnk6Ci0JcmV0ID0gZ2V0X2Z1dGV4X2tleSh1YWRkcjEsIGZzaGFyZWQsICZrZXkxKTsKKwlyZXQgPSBnZXRfZnV0ZXhfa2V5KHVhZGRyMSwgZmxhZ3MgJiBGTEFHU19TSEFSRUQsICZrZXkxKTsKIAlpZiAodW5saWtlbHkocmV0ICE9IDApKQogCQlnb3RvIG91dDsKLQlyZXQgPSBnZXRfZnV0ZXhfa2V5KHVhZGRyMiwgZnNoYXJlZCwgJmtleTIpOworCXJldCA9IGdldF9mdXRleF9rZXkodWFkZHIyLCBmbGFncyAmIEZMQUdTX1NIQVJFRCwgJmtleTIpOwogCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCiAJCWdvdG8gb3V0X3B1dF9rZXkxOwogCkBAIC05NjIsMTEgKzk3NiwxMSBAQAogCQlpZiAocmV0KQogCQkJZ290byBvdXRfcHV0X2tleXM7CiAKLQkJaWYgKCFmc2hhcmVkKQorCQlpZiAoIShmbGFncyAmIEZMQUdTX1NIQVJFRCkpCiAJCQlnb3RvIHJldHJ5X3ByaXZhdGU7CiAKLQkJcHV0X2Z1dGV4X2tleShmc2hhcmVkLCAma2V5Mik7Ci0JCXB1dF9mdXRleF9rZXkoZnNoYXJlZCwgJmtleTEpOworCQlwdXRfZnV0ZXhfa2V5KCZrZXkyKTsKKwkJcHV0X2Z1dGV4X2tleSgma2V5MSk7CiAJCWdvdG8gcmV0cnk7CiAJfQogCkBAIC05OTYsOSArMTAxMCw5IEBACiAKIAlkb3VibGVfdW5sb2NrX2hiKGhiMSwgaGIyKTsKIG91dF9wdXRfa2V5czoKLQlwdXRfZnV0ZXhfa2V5KGZzaGFyZWQsICZrZXkyKTsKKwlwdXRfZnV0ZXhfa2V5KCZrZXkyKTsKIG91dF9wdXRfa2V5MToKLQlwdXRfZnV0ZXhfa2V5KGZzaGFyZWQsICZrZXkxKTsKKwlwdXRfZnV0ZXhfa2V5KCZrZXkxKTsKIG91dDoKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTEzMywxMyArMTE0NywxMyBAQAogLyoqCiAgKiBmdXRleF9yZXF1ZXVlKCkgLSBSZXF1ZXVlIHdhaXRlcnMgZnJvbSB1YWRkcjEgdG8gdWFkZHIyCiAgKiBAdWFkZHIxOglzb3VyY2UgZnV0ZXggdXNlciBhZGRyZXNzCi0gKiBAZnNoYXJlZDoJMCBmb3IgYSBQUk9DRVNTX1BSSVZBVEUgZnV0ZXgsIDEgZm9yIFBST0NFU1NfU0hBUkVECisgKiBAZmxhZ3M6CWZ1dGV4IGZsYWdzIChGTEFHU19TSEFSRUQsIGV0Yy4pCiAgKiBAdWFkZHIyOgl0YXJnZXQgZnV0ZXggdXNlciBhZGRyZXNzCiAgKiBAbnJfd2FrZToJbnVtYmVyIG9mIHdhaXRlcnMgdG8gd2FrZSAobXVzdCBiZSAxIGZvciByZXF1ZXVlX3BpKQogICogQG5yX3JlcXVldWU6CW51bWJlciBvZiB3YWl0ZXJzIHRvIHJlcXVldWUgKDAtSU5UX01BWCkKICAqIEBjbXB2YWw6CUB1YWRkcjEgZXhwZWN0ZWQgdmFsdWUgKG9yICVOVUxMKQogICogQHJlcXVldWVfcGk6CWlmIHdlIGFyZSBhdHRlbXB0aW5nIHRvIHJlcXVldWUgZnJvbSBhIG5vbi1waSBmdXRleCB0byBhCi0gKiAJCXBpIGZ1dGV4IChwaSB0byBwaSByZXF1ZXVlIGlzIG5vdCBzdXBwb3J0ZWQpCisgKgkJcGkgZnV0ZXggKHBpIHRvIHBpIHJlcXVldWUgaXMgbm90IHN1cHBvcnRlZCkKICAqCiAgKiBSZXF1ZXVlIHdhaXRlcnMgb24gdWFkZHIxIHRvIHVhZGRyMi4gSW4gdGhlIHJlcXVldWVfcGkgY2FzZSwgdHJ5IHRvIGFjcXVpcmUKICAqIHVhZGRyMiBhdG9taWNhbGx5IG9uIGJlaGFsZiBvZiB0aGUgdG9wIHdhaXRlci4KQEAgLTExNDgsOSArMTE2Miw5IEBACiAgKiA+PTAgLSBvbiBzdWNjZXNzLCB0aGUgbnVtYmVyIG9mIHRhc2tzIHJlcXVldWVkIG9yIHdva2VuCiAgKiAgPDAgLSBvbiBlcnJvcgogICovCi1zdGF0aWMgaW50IGZ1dGV4X3JlcXVldWUodTMyIF9fdXNlciAqdWFkZHIxLCBpbnQgZnNoYXJlZCwgdTMyIF9fdXNlciAqdWFkZHIyLAotCQkJIGludCBucl93YWtlLCBpbnQgbnJfcmVxdWV1ZSwgdTMyICpjbXB2YWwsCi0JCQkgaW50IHJlcXVldWVfcGkpCitzdGF0aWMgaW50IGZ1dGV4X3JlcXVldWUodTMyIF9fdXNlciAqdWFkZHIxLCB1bnNpZ25lZCBpbnQgZmxhZ3MsCisJCQkgdTMyIF9fdXNlciAqdWFkZHIyLCBpbnQgbnJfd2FrZSwgaW50IG5yX3JlcXVldWUsCisJCQkgdTMyICpjbXB2YWwsIGludCByZXF1ZXVlX3BpKQogewogCXVuaW9uIGZ1dGV4X2tleSBrZXkxID0gRlVURVhfS0VZX0lOSVQsIGtleTIgPSBGVVRFWF9LRVlfSU5JVDsKIAlpbnQgZHJvcF9jb3VudCA9IDAsIHRhc2tfY291bnQgPSAwLCByZXQ7CkBAIC0xMTkxLDEwICsxMjA1LDEwIEBACiAJCXBpX3N0YXRlID0gTlVMTDsKIAl9CiAKLQlyZXQgPSBnZXRfZnV0ZXhfa2V5KHVhZGRyMSwgZnNoYXJlZCwgJmtleTEpOworCXJldCA9IGdldF9mdXRleF9rZXkodWFkZHIxLCBmbGFncyAmIEZMQUdTX1NIQVJFRCwgJmtleTEpOwogCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCiAJCWdvdG8gb3V0OwotCXJldCA9IGdldF9mdXRleF9rZXkodWFkZHIyLCBmc2hhcmVkLCAma2V5Mik7CisJcmV0ID0gZ2V0X2Z1dGV4X2tleSh1YWRkcjIsIGZsYWdzICYgRkxBR1NfU0hBUkVELCAma2V5Mik7CiAJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKIAkJZ290byBvdXRfcHV0X2tleTE7CiAKQEAgLTEyMTYsMTEgKzEyMzAsMTEgQEAKIAkJCWlmIChyZXQpCiAJCQkJZ290byBvdXRfcHV0X2tleXM7CiAKLQkJCWlmICghZnNoYXJlZCkKKwkJCWlmICghKGZsYWdzICYgRkxBR1NfU0hBUkVEKSkKIAkJCQlnb3RvIHJldHJ5X3ByaXZhdGU7CiAKLQkJCXB1dF9mdXRleF9rZXkoZnNoYXJlZCwgJmtleTIpOwotCQkJcHV0X2Z1dGV4X2tleShmc2hhcmVkLCAma2V5MSk7CisJCQlwdXRfZnV0ZXhfa2V5KCZrZXkyKTsKKwkJCXB1dF9mdXRleF9rZXkoJmtleTEpOwogCQkJZ290byByZXRyeTsKIAkJfQogCQlpZiAoY3VydmFsICE9ICpjbXB2YWwpIHsKQEAgLTEyNjAsOCArMTI3NCw4IEBACiAJCQlicmVhazsKIAkJY2FzZSAtRUZBVUxUOgogCQkJZG91YmxlX3VubG9ja19oYihoYjEsIGhiMik7Ci0JCQlwdXRfZnV0ZXhfa2V5KGZzaGFyZWQsICZrZXkyKTsKLQkJCXB1dF9mdXRleF9rZXkoZnNoYXJlZCwgJmtleTEpOworCQkJcHV0X2Z1dGV4X2tleSgma2V5Mik7CisJCQlwdXRfZnV0ZXhfa2V5KCZrZXkxKTsKIAkJCXJldCA9IGZhdWx0X2luX3VzZXJfd3JpdGVhYmxlKHVhZGRyMik7CiAJCQlpZiAoIXJldCkKIAkJCQlnb3RvIHJldHJ5OwpAQCAtMTI2OSw4ICsxMjgzLDggQEAKIAkJY2FzZSAtRUFHQUlOOgogCQkJLyogVGhlIG93bmVyIHdhcyBleGl0aW5nLCB0cnkgYWdhaW4uICovCiAJCQlkb3VibGVfdW5sb2NrX2hiKGhiMSwgaGIyKTsKLQkJCXB1dF9mdXRleF9rZXkoZnNoYXJlZCwgJmtleTIpOwotCQkJcHV0X2Z1dGV4X2tleShmc2hhcmVkLCAma2V5MSk7CisJCQlwdXRfZnV0ZXhfa2V5KCZrZXkyKTsKKwkJCXB1dF9mdXRleF9rZXkoJmtleTEpOwogCQkJY29uZF9yZXNjaGVkKCk7CiAJCQlnb3RvIHJldHJ5OwogCQlkZWZhdWx0OgpAQCAtMTM1Miw5ICsxMzY2LDkgQEAKIAkJZHJvcF9mdXRleF9rZXlfcmVmcygma2V5MSk7CiAKIG91dF9wdXRfa2V5czoKLQlwdXRfZnV0ZXhfa2V5KGZzaGFyZWQsICZrZXkyKTsKKwlwdXRfZnV0ZXhfa2V5KCZrZXkyKTsKIG91dF9wdXRfa2V5MToKLQlwdXRfZnV0ZXhfa2V5KGZzaGFyZWQsICZrZXkxKTsKKwlwdXRfZnV0ZXhfa2V5KCZrZXkxKTsKIG91dDoKIAlpZiAocGlfc3RhdGUgIT0gTlVMTCkKIAkJZnJlZV9waV9zdGF0ZShwaV9zdGF0ZSk7CkBAIC0xNDk0LDcgKzE1MDgsNyBAQAogICogcHJpdmF0ZSBmdXRleGVzLgogICovCiBzdGF0aWMgaW50IGZpeHVwX3BpX3N0YXRlX293bmVyKHUzMiBfX3VzZXIgKnVhZGRyLCBzdHJ1Y3QgZnV0ZXhfcSAqcSwKLQkJCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5ld293bmVyLCBpbnQgZnNoYXJlZCkKKwkJCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5ld293bmVyKQogewogCXUzMiBuZXd0aWQgPSB0YXNrX3BpZF92bnIobmV3b3duZXIpIHwgRlVURVhfV0FJVEVSUzsKIAlzdHJ1Y3QgZnV0ZXhfcGlfc3RhdGUgKnBpX3N0YXRlID0gcS0+cGlfc3RhdGU7CkBAIC0xNTg3LDIwICsxNjAxLDExIEBACiAJZ290byByZXRyeTsKIH0KIAotLyoKLSAqIEluIGNhc2Ugd2UgbXVzdCB1c2UgcmVzdGFydF9ibG9jayB0byByZXN0YXJ0IGEgZnV0ZXhfd2FpdCwKLSAqIHdlIGVuY29kZSBpbiB0aGUgJ2ZsYWdzJyBzaGFyZWQgY2FwYWJpbGl0eQotICovCi0jZGVmaW5lIEZMQUdTX1NIQVJFRAkJMHgwMQotI2RlZmluZSBGTEFHU19DTE9DS1JUCQkweDAyCi0jZGVmaW5lIEZMQUdTX0hBU19USU1FT1VUCTB4MDQKLQogc3RhdGljIGxvbmcgZnV0ZXhfd2FpdF9yZXN0YXJ0KHN0cnVjdCByZXN0YXJ0X2Jsb2NrICpyZXN0YXJ0KTsKIAogLyoqCiAgKiBmaXh1cF9vd25lcigpIC0gUG9zdCBsb2NrIHBpX3N0YXRlIGFuZCBjb3JuZXIgY2FzZSBtYW5hZ2VtZW50CiAgKiBAdWFkZHI6CXVzZXIgYWRkcmVzcyBvZiB0aGUgZnV0ZXgKLSAqIEBmc2hhcmVkOgl3aGV0aGVyIHRoZSBmdXRleCBpcyBzaGFyZWQgKDEpIG9yIG5vdCAoMCkKICAqIEBxOgkJZnV0ZXhfcSAoY29udGFpbnMgcGlfc3RhdGUgYW5kIGFjY2VzcyB0byB0aGUgcnRfbXV0ZXgpCiAgKiBAbG9ja2VkOglpZiB0aGUgYXR0ZW1wdCB0byB0YWtlIHRoZSBydF9tdXRleCBzdWNjZWVkZWQgKDEpIG9yIG5vdCAoMCkKICAqCkBAIC0xNjEzLDggKzE2MTgsNyBAQAogICogIDAgLSBzdWNjZXNzLCBsb2NrIG5vdCB0YWtlbgogICogPDAgLSBvbiBlcnJvciAoLUVGQVVMVCkKICAqLwotc3RhdGljIGludCBmaXh1cF9vd25lcih1MzIgX191c2VyICp1YWRkciwgaW50IGZzaGFyZWQsIHN0cnVjdCBmdXRleF9xICpxLAotCQkgICAgICAgaW50IGxvY2tlZCkKK3N0YXRpYyBpbnQgZml4dXBfb3duZXIodTMyIF9fdXNlciAqdWFkZHIsIHN0cnVjdCBmdXRleF9xICpxLCBpbnQgbG9ja2VkKQogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqb3duZXI7CiAJaW50IHJldCA9IDA7CkBAIC0xNjI1LDcgKzE2MjksNyBAQAogCQkgKiBkaWQgYSBsb2NrLXN0ZWFsIC0gZml4IHVwIHRoZSBQSS1zdGF0ZSBpbiB0aGF0IGNhc2U6CiAJCSAqLwogCQlpZiAocS0+cGlfc3RhdGUtPm93bmVyICE9IGN1cnJlbnQpCi0JCQlyZXQgPSBmaXh1cF9waV9zdGF0ZV9vd25lcih1YWRkciwgcSwgY3VycmVudCwgZnNoYXJlZCk7CisJCQlyZXQgPSBmaXh1cF9waV9zdGF0ZV9vd25lcih1YWRkciwgcSwgY3VycmVudCk7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtMTY1Miw3ICsxNjU2LDcgQEAKIAkJICogbG9jay4gRml4IHRoZSBzdGF0ZSB1cC4KIAkJICovCiAJCW93bmVyID0gcnRfbXV0ZXhfb3duZXIoJnEtPnBpX3N0YXRlLT5waV9tdXRleCk7Ci0JCXJldCA9IGZpeHVwX3BpX3N0YXRlX293bmVyKHVhZGRyLCBxLCBvd25lciwgZnNoYXJlZCk7CisJCXJldCA9IGZpeHVwX3BpX3N0YXRlX293bmVyKHVhZGRyLCBxLCBvd25lcik7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtMTcxNSw3ICsxNzE5LDcgQEAKICAqIGZ1dGV4X3dhaXRfc2V0dXAoKSAtIFByZXBhcmUgdG8gd2FpdCBvbiBhIGZ1dGV4CiAgKiBAdWFkZHI6CXRoZSBmdXRleCB1c2Vyc3BhY2UgYWRkcmVzcwogICogQHZhbDoJdGhlIGV4cGVjdGVkIHZhbHVlCi0gKiBAZnNoYXJlZDoJd2hldGhlciB0aGUgZnV0ZXggaXMgc2hhcmVkICgxKSBvciBub3QgKDApCisgKiBAZmxhZ3M6CWZ1dGV4IGZsYWdzIChGTEFHU19TSEFSRUQsIGV0Yy4pCiAgKiBAcToJCXRoZSBhc3NvY2lhdGVkIGZ1dGV4X3EKICAqIEBoYjoJCXN0b3JhZ2UgZm9yIGhhc2hfYnVja2V0IHBvaW50ZXIgdG8gYmUgcmV0dXJuZWQgdG8gY2FsbGVyCiAgKgpAQCAtMTcyOCw3ICsxNzMyLDcgQEAKICAqICAwIC0gdWFkZHIgY29udGFpbnMgdmFsIGFuZCBoYiBoYXMgYmVlbiBsb2NrZWQKICAqIDwxIC0gLUVGQVVMVCBvciAtRVdPVUxEQkxPQ0sgKHVhZGRyIGRvZXMgbm90IGNvbnRhaW4gdmFsKSBhbmQgaGIgaXMgdW5sY29rZWQKICAqLwotc3RhdGljIGludCBmdXRleF93YWl0X3NldHVwKHUzMiBfX3VzZXIgKnVhZGRyLCB1MzIgdmFsLCBpbnQgZnNoYXJlZCwKK3N0YXRpYyBpbnQgZnV0ZXhfd2FpdF9zZXR1cCh1MzIgX191c2VyICp1YWRkciwgdTMyIHZhbCwgdW5zaWduZWQgaW50IGZsYWdzLAogCQkJICAgc3RydWN0IGZ1dGV4X3EgKnEsIHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqKmhiKQogewogCXUzMiB1dmFsOwpAQCAtMTc1Miw4ICsxNzU2LDcgQEAKIAkgKiByYXJlLCBidXQgbm9ybWFsLgogCSAqLwogcmV0cnk6Ci0JcS0+a2V5ID0gRlVURVhfS0VZX0lOSVQ7Ci0JcmV0ID0gZ2V0X2Z1dGV4X2tleSh1YWRkciwgZnNoYXJlZCwgJnEtPmtleSk7CisJcmV0ID0gZ2V0X2Z1dGV4X2tleSh1YWRkciwgZmxhZ3MgJiBGTEFHU19TSEFSRUQsICZxLT5rZXkpOwogCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCiAJCXJldHVybiByZXQ7CiAKQEAgLTE3NjksMTAgKzE3NzIsMTAgQEAKIAkJaWYgKHJldCkKIAkJCWdvdG8gb3V0OwogCi0JCWlmICghZnNoYXJlZCkKKwkJaWYgKCEoZmxhZ3MgJiBGTEFHU19TSEFSRUQpKQogCQkJZ290byByZXRyeV9wcml2YXRlOwogCi0JCXB1dF9mdXRleF9rZXkoZnNoYXJlZCwgJnEtPmtleSk7CisJCXB1dF9mdXRleF9rZXkoJnEtPmtleSk7CiAJCWdvdG8gcmV0cnk7CiAJfQogCkBAIC0xNzgzLDMyICsxNzg2LDI5IEBACiAKIG91dDoKIAlpZiAocmV0KQotCQlwdXRfZnV0ZXhfa2V5KGZzaGFyZWQsICZxLT5rZXkpOworCQlwdXRfZnV0ZXhfa2V5KCZxLT5rZXkpOwogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgZnV0ZXhfd2FpdCh1MzIgX191c2VyICp1YWRkciwgaW50IGZzaGFyZWQsCi0JCSAgICAgIHUzMiB2YWwsIGt0aW1lX3QgKmFic190aW1lLCB1MzIgYml0c2V0LCBpbnQgY2xvY2tydCkKK3N0YXRpYyBpbnQgZnV0ZXhfd2FpdCh1MzIgX191c2VyICp1YWRkciwgdW5zaWduZWQgaW50IGZsYWdzLCB1MzIgdmFsLAorCQkgICAgICBrdGltZV90ICphYnNfdGltZSwgdTMyIGJpdHNldCkKIHsKIAlzdHJ1Y3QgaHJ0aW1lcl9zbGVlcGVyIHRpbWVvdXQsICp0byA9IE5VTEw7CiAJc3RydWN0IHJlc3RhcnRfYmxvY2sgKnJlc3RhcnQ7CiAJc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYjsKLQlzdHJ1Y3QgZnV0ZXhfcSBxOworCXN0cnVjdCBmdXRleF9xIHEgPSBmdXRleF9xX2luaXQ7CiAJaW50IHJldDsKIAogCWlmICghYml0c2V0KQogCQlyZXR1cm4gLUVJTlZBTDsKLQotCXEucGlfc3RhdGUgPSBOVUxMOwogCXEuYml0c2V0ID0gYml0c2V0OwotCXEucnRfd2FpdGVyID0gTlVMTDsKLQlxLnJlcXVldWVfcGlfa2V5ID0gTlVMTDsKIAogCWlmIChhYnNfdGltZSkgewogCQl0byA9ICZ0aW1lb3V0OwogCi0JCWhydGltZXJfaW5pdF9vbl9zdGFjaygmdG8tPnRpbWVyLCBjbG9ja3J0ID8gQ0xPQ0tfUkVBTFRJTUUgOgotCQkJCSAgICAgIENMT0NLX01PTk9UT05JQywgSFJUSU1FUl9NT0RFX0FCUyk7CisJCWhydGltZXJfaW5pdF9vbl9zdGFjaygmdG8tPnRpbWVyLCAoZmxhZ3MgJiBGTEFHU19DTE9DS1JUKSA/CisJCQkJICAgICAgQ0xPQ0tfUkVBTFRJTUUgOiBDTE9DS19NT05PVE9OSUMsCisJCQkJICAgICAgSFJUSU1FUl9NT0RFX0FCUyk7CiAJCWhydGltZXJfaW5pdF9zbGVlcGVyKHRvLCBjdXJyZW50KTsKIAkJaHJ0aW1lcl9zZXRfZXhwaXJlc19yYW5nZV9ucygmdG8tPnRpbWVyLCAqYWJzX3RpbWUsCiAJCQkJCSAgICAgY3VycmVudC0+dGltZXJfc2xhY2tfbnMpOwpAQCAtMTgxOSw3ICsxODE5LDcgQEAKIAkgKiBQcmVwYXJlIHRvIHdhaXQgb24gdWFkZHIuIE9uIHN1Y2Nlc3MsIGhvbGRzIGhiIGxvY2sgYW5kIGluY3JlbWVudHMKIAkgKiBxLmtleSByZWZzLgogCSAqLwotCXJldCA9IGZ1dGV4X3dhaXRfc2V0dXAodWFkZHIsIHZhbCwgZnNoYXJlZCwgJnEsICZoYik7CisJcmV0ID0gZnV0ZXhfd2FpdF9zZXR1cCh1YWRkciwgdmFsLCBmbGFncywgJnEsICZoYik7CiAJaWYgKHJldCkKIAkJZ290byBvdXQ7CiAKQEAgLTE4NTIsMTIgKzE4NTIsNyBAQAogCXJlc3RhcnQtPmZ1dGV4LnZhbCA9IHZhbDsKIAlyZXN0YXJ0LT5mdXRleC50aW1lID0gYWJzX3RpbWUtPnR2NjQ7CiAJcmVzdGFydC0+ZnV0ZXguYml0c2V0ID0gYml0c2V0OwotCXJlc3RhcnQtPmZ1dGV4LmZsYWdzID0gRkxBR1NfSEFTX1RJTUVPVVQ7Ci0KLQlpZiAoZnNoYXJlZCkKLQkJcmVzdGFydC0+ZnV0ZXguZmxhZ3MgfD0gRkxBR1NfU0hBUkVEOwotCWlmIChjbG9ja3J0KQotCQlyZXN0YXJ0LT5mdXRleC5mbGFncyB8PSBGTEFHU19DTE9DS1JUOworCXJlc3RhcnQtPmZ1dGV4LmZsYWdzID0gZmxhZ3M7CiAKIAlyZXQgPSAtRVJFU1RBUlRfUkVTVEFSVEJMT0NLOwogCkBAIC0xODczLDcgKzE4NjgsNiBAQAogc3RhdGljIGxvbmcgZnV0ZXhfd2FpdF9yZXN0YXJ0KHN0cnVjdCByZXN0YXJ0X2Jsb2NrICpyZXN0YXJ0KQogewogCXUzMiBfX3VzZXIgKnVhZGRyID0gcmVzdGFydC0+ZnV0ZXgudWFkZHI7Ci0JaW50IGZzaGFyZWQgPSAwOwogCWt0aW1lX3QgdCwgKnRwID0gTlVMTDsKIAogCWlmIChyZXN0YXJ0LT5mdXRleC5mbGFncyAmIEZMQUdTX0hBU19USU1FT1VUKSB7CkBAIC0xODgxLDExICsxODc1LDkgQEAKIAkJdHAgPSAmdDsKIAl9CiAJcmVzdGFydC0+Zm4gPSBkb19ub19yZXN0YXJ0X3N5c2NhbGw7Ci0JaWYgKHJlc3RhcnQtPmZ1dGV4LmZsYWdzICYgRkxBR1NfU0hBUkVEKQotCQlmc2hhcmVkID0gMTsKLQlyZXR1cm4gKGxvbmcpZnV0ZXhfd2FpdCh1YWRkciwgZnNoYXJlZCwgcmVzdGFydC0+ZnV0ZXgudmFsLCB0cCwKLQkJCQlyZXN0YXJ0LT5mdXRleC5iaXRzZXQsCi0JCQkJcmVzdGFydC0+ZnV0ZXguZmxhZ3MgJiBGTEFHU19DTE9DS1JUKTsKKworCXJldHVybiAobG9uZylmdXRleF93YWl0KHVhZGRyLCByZXN0YXJ0LT5mdXRleC5mbGFncywKKwkJCQlyZXN0YXJ0LT5mdXRleC52YWwsIHRwLCByZXN0YXJ0LT5mdXRleC5iaXRzZXQpOwogfQogCiAKQEAgLTE4OTUsMTIgKzE4ODcsMTIgQEAKICAqIGlmIHRoZXJlIGFyZSB3YWl0ZXJzIHRoZW4gaXQgd2lsbCBibG9jaywgaXQgZG9lcyBQSSwgZXRjLiAoRHVlIHRvCiAgKiByYWNlcyB0aGUga2VybmVsIG1pZ2h0IHNlZSBhIDAgdmFsdWUgb2YgdGhlIGZ1dGV4IHRvby4pCiAgKi8KLXN0YXRpYyBpbnQgZnV0ZXhfbG9ja19waSh1MzIgX191c2VyICp1YWRkciwgaW50IGZzaGFyZWQsCi0JCQkgaW50IGRldGVjdCwga3RpbWVfdCAqdGltZSwgaW50IHRyeWxvY2spCitzdGF0aWMgaW50IGZ1dGV4X2xvY2tfcGkodTMyIF9fdXNlciAqdWFkZHIsIHVuc2lnbmVkIGludCBmbGFncywgaW50IGRldGVjdCwKKwkJCSBrdGltZV90ICp0aW1lLCBpbnQgdHJ5bG9jaykKIHsKIAlzdHJ1Y3QgaHJ0aW1lcl9zbGVlcGVyIHRpbWVvdXQsICp0byA9IE5VTEw7CiAJc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYjsKLQlzdHJ1Y3QgZnV0ZXhfcSBxOworCXN0cnVjdCBmdXRleF9xIHEgPSBmdXRleF9xX2luaXQ7CiAJaW50IHJlcywgcmV0OwogCiAJaWYgKHJlZmlsbF9waV9zdGF0ZV9jYWNoZSgpKQpAQCAtMTkxNCwxMiArMTkwNiw4IEBACiAJCWhydGltZXJfc2V0X2V4cGlyZXMoJnRvLT50aW1lciwgKnRpbWUpOwogCX0KIAotCXEucGlfc3RhdGUgPSBOVUxMOwotCXEucnRfd2FpdGVyID0gTlVMTDsKLQlxLnJlcXVldWVfcGlfa2V5ID0gTlVMTDsKIHJldHJ5OgotCXEua2V5ID0gRlVURVhfS0VZX0lOSVQ7Ci0JcmV0ID0gZ2V0X2Z1dGV4X2tleSh1YWRkciwgZnNoYXJlZCwgJnEua2V5KTsKKwlyZXQgPSBnZXRfZnV0ZXhfa2V5KHVhZGRyLCBmbGFncyAmIEZMQUdTX1NIQVJFRCwgJnEua2V5KTsKIAlpZiAodW5saWtlbHkocmV0ICE9IDApKQogCQlnb3RvIG91dDsKIApAQCAtMTk0MSw3ICsxOTI5LDcgQEAKIAkJCSAqIGV4aXQgdG8gY29tcGxldGUuCiAJCQkgKi8KIAkJCXF1ZXVlX3VubG9jaygmcSwgaGIpOwotCQkJcHV0X2Z1dGV4X2tleShmc2hhcmVkLCAmcS5rZXkpOworCQkJcHV0X2Z1dGV4X2tleSgmcS5rZXkpOwogCQkJY29uZF9yZXNjaGVkKCk7CiAJCQlnb3RvIHJldHJ5OwogCQlkZWZhdWx0OgpAQCAtMTk3MSw3ICsxOTU5LDcgQEAKIAkgKiBGaXh1cCB0aGUgcGlfc3RhdGUgb3duZXIgYW5kIHBvc3NpYmx5IGFjcXVpcmUgdGhlIGxvY2sgaWYgd2UKIAkgKiBoYXZlbid0IGFscmVhZHkuCiAJICovCi0JcmVzID0gZml4dXBfb3duZXIodWFkZHIsIGZzaGFyZWQsICZxLCAhcmV0KTsKKwlyZXMgPSBmaXh1cF9vd25lcih1YWRkciwgJnEsICFyZXQpOwogCS8qCiAJICogSWYgZml4dXBfb3duZXIoKSByZXR1cm5lZCBhbiBlcnJvciwgcHJvcHJvZ2F0ZSB0aGF0LiAgSWYgaXQgYWNxdWlyZWQKIAkgKiB0aGUgbG9jaywgY2xlYXIgb3VyIC1FVElNRURPVVQgb3IgLUVJTlRSLgpAQCAtMTk5NSw3ICsxOTgzLDcgQEAKIAlxdWV1ZV91bmxvY2soJnEsIGhiKTsKIAogb3V0X3B1dF9rZXk6Ci0JcHV0X2Z1dGV4X2tleShmc2hhcmVkLCAmcS5rZXkpOworCXB1dF9mdXRleF9rZXkoJnEua2V5KTsKIG91dDoKIAlpZiAodG8pCiAJCWRlc3Ryb3lfaHJ0aW1lcl9vbl9zdGFjaygmdG8tPnRpbWVyKTsKQEAgLTIwMDgsMTAgKzE5OTYsMTAgQEAKIAlpZiAocmV0KQogCQlnb3RvIG91dF9wdXRfa2V5OwogCi0JaWYgKCFmc2hhcmVkKQorCWlmICghKGZsYWdzICYgRkxBR1NfU0hBUkVEKSkKIAkJZ290byByZXRyeV9wcml2YXRlOwogCi0JcHV0X2Z1dGV4X2tleShmc2hhcmVkLCAmcS5rZXkpOworCXB1dF9mdXRleF9rZXkoJnEua2V5KTsKIAlnb3RvIHJldHJ5OwogfQogCkBAIC0yMDIwLDcgKzIwMDgsNyBAQAogICogVGhpcyBpcyB0aGUgaW4ta2VybmVsIHNsb3dwYXRoOiB3ZSBsb29rIHVwIHRoZSBQSSBzdGF0ZSAoaWYgYW55KSwKICAqIGFuZCBkbyB0aGUgcnQtbXV0ZXggdW5sb2NrLgogICovCi1zdGF0aWMgaW50IGZ1dGV4X3VubG9ja19waSh1MzIgX191c2VyICp1YWRkciwgaW50IGZzaGFyZWQpCitzdGF0aWMgaW50IGZ1dGV4X3VubG9ja19waSh1MzIgX191c2VyICp1YWRkciwgdW5zaWduZWQgaW50IGZsYWdzKQogewogCXN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGI7CiAJc3RydWN0IGZ1dGV4X3EgKnRoaXMsICpuZXh0OwpAQCAtMjAzOCw3ICsyMDI2LDcgQEAKIAlpZiAoKHV2YWwgJiBGVVRFWF9USURfTUFTSykgIT0gdGFza19waWRfdm5yKGN1cnJlbnQpKQogCQlyZXR1cm4gLUVQRVJNOwogCi0JcmV0ID0gZ2V0X2Z1dGV4X2tleSh1YWRkciwgZnNoYXJlZCwgJmtleSk7CisJcmV0ID0gZ2V0X2Z1dGV4X2tleSh1YWRkciwgZmxhZ3MgJiBGTEFHU19TSEFSRUQsICZrZXkpOwogCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCiAJCWdvdG8gb3V0OwogCkBAIC0yMDkzLDE0ICsyMDgxLDE0IEBACiAKIG91dF91bmxvY2s6CiAJc3Bpbl91bmxvY2soJmhiLT5sb2NrKTsKLQlwdXRfZnV0ZXhfa2V5KGZzaGFyZWQsICZrZXkpOworCXB1dF9mdXRleF9rZXkoJmtleSk7CiAKIG91dDoKIAlyZXR1cm4gcmV0OwogCiBwaV9mYXVsdGVkOgogCXNwaW5fdW5sb2NrKCZoYi0+bG9jayk7Ci0JcHV0X2Z1dGV4X2tleShmc2hhcmVkLCAma2V5KTsKKwlwdXRfZnV0ZXhfa2V5KCZrZXkpOwogCiAJcmV0ID0gZmF1bHRfaW5fdXNlcl93cml0ZWFibGUodWFkZHIpOwogCWlmICghcmV0KQpAQCAtMjE2MCw3ICsyMTQ4LDcgQEAKIC8qKgogICogZnV0ZXhfd2FpdF9yZXF1ZXVlX3BpKCkgLSBXYWl0IG9uIHVhZGRyIGFuZCB0YWtlIHVhZGRyMgogICogQHVhZGRyOgl0aGUgZnV0ZXggd2UgaW5pdGlhbGx5IHdhaXQgb24gKG5vbi1waSkKLSAqIEBmc2hhcmVkOgl3aGV0aGVyIHRoZSBmdXRleGVzIGFyZSBzaGFyZWQgKDEpIG9yIG5vdCAoMCkuICBUaGV5IG11c3QgYmUKKyAqIEBmbGFnczoJZnV0ZXggZmxhZ3MgKEZMQUdTX1NIQVJFRCwgRkxBR1NfQ0xPQ0tSVCwgZXRjLiksIHRoZXkgbXVzdCBiZQogICogCQl0aGUgc2FtZSB0eXBlLCBubyByZXF1ZXVlaW5nIGZyb20gcHJpdmF0ZSB0byBzaGFyZWQsIGV0Yy4KICAqIEB2YWw6CXRoZSBleHBlY3RlZCB2YWx1ZSBvZiB1YWRkcgogICogQGFic190aW1lOglhYnNvbHV0ZSB0aW1lb3V0CkBAIC0yMTk4LDE2ICsyMTg2LDE2IEBACiAgKiAgMCAtIE9uIHN1Y2Nlc3MKICAqIDwwIC0gT24gZXJyb3IKICAqLwotc3RhdGljIGludCBmdXRleF93YWl0X3JlcXVldWVfcGkodTMyIF9fdXNlciAqdWFkZHIsIGludCBmc2hhcmVkLAorc3RhdGljIGludCBmdXRleF93YWl0X3JlcXVldWVfcGkodTMyIF9fdXNlciAqdWFkZHIsIHVuc2lnbmVkIGludCBmbGFncywKIAkJCQkgdTMyIHZhbCwga3RpbWVfdCAqYWJzX3RpbWUsIHUzMiBiaXRzZXQsCi0JCQkJIGludCBjbG9ja3J0LCB1MzIgX191c2VyICp1YWRkcjIpCisJCQkJIHUzMiBfX3VzZXIgKnVhZGRyMikKIHsKIAlzdHJ1Y3QgaHJ0aW1lcl9zbGVlcGVyIHRpbWVvdXQsICp0byA9IE5VTEw7CiAJc3RydWN0IHJ0X211dGV4X3dhaXRlciBydF93YWl0ZXI7CiAJc3RydWN0IHJ0X211dGV4ICpwaV9tdXRleCA9IE5VTEw7CiAJc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYjsKLQl1bmlvbiBmdXRleF9rZXkga2V5MjsKLQlzdHJ1Y3QgZnV0ZXhfcSBxOworCXVuaW9uIGZ1dGV4X2tleSBrZXkyID0gRlVURVhfS0VZX0lOSVQ7CisJc3RydWN0IGZ1dGV4X3EgcSA9IGZ1dGV4X3FfaW5pdDsKIAlpbnQgcmVzLCByZXQ7CiAKIAlpZiAoIWJpdHNldCkKQEAgLTIyMTUsOCArMjIwMyw5IEBACiAKIAlpZiAoYWJzX3RpbWUpIHsKIAkJdG8gPSAmdGltZW91dDsKLQkJaHJ0aW1lcl9pbml0X29uX3N0YWNrKCZ0by0+dGltZXIsIGNsb2NrcnQgPyBDTE9DS19SRUFMVElNRSA6Ci0JCQkJICAgICAgQ0xPQ0tfTU9OT1RPTklDLCBIUlRJTUVSX01PREVfQUJTKTsKKwkJaHJ0aW1lcl9pbml0X29uX3N0YWNrKCZ0by0+dGltZXIsIChmbGFncyAmIEZMQUdTX0NMT0NLUlQpID8KKwkJCQkgICAgICBDTE9DS19SRUFMVElNRSA6IENMT0NLX01PTk9UT05JQywKKwkJCQkgICAgICBIUlRJTUVSX01PREVfQUJTKTsKIAkJaHJ0aW1lcl9pbml0X3NsZWVwZXIodG8sIGN1cnJlbnQpOwogCQlocnRpbWVyX3NldF9leHBpcmVzX3JhbmdlX25zKCZ0by0+dGltZXIsICphYnNfdGltZSwKIAkJCQkJICAgICBjdXJyZW50LT50aW1lcl9zbGFja19ucyk7CkBAIC0yMjI5LDEyICsyMjE4LDEwIEBACiAJZGVidWdfcnRfbXV0ZXhfaW5pdF93YWl0ZXIoJnJ0X3dhaXRlcik7CiAJcnRfd2FpdGVyLnRhc2sgPSBOVUxMOwogCi0Ja2V5MiA9IEZVVEVYX0tFWV9JTklUOwotCXJldCA9IGdldF9mdXRleF9rZXkodWFkZHIyLCBmc2hhcmVkLCAma2V5Mik7CisJcmV0ID0gZ2V0X2Z1dGV4X2tleSh1YWRkcjIsIGZsYWdzICYgRkxBR1NfU0hBUkVELCAma2V5Mik7CiAJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKIAkJZ290byBvdXQ7CiAKLQlxLnBpX3N0YXRlID0gTlVMTDsKIAlxLmJpdHNldCA9IGJpdHNldDsKIAlxLnJ0X3dhaXRlciA9ICZydF93YWl0ZXI7CiAJcS5yZXF1ZXVlX3BpX2tleSA9ICZrZXkyOwpAQCAtMjI0Myw3ICsyMjMwLDcgQEAKIAkgKiBQcmVwYXJlIHRvIHdhaXQgb24gdWFkZHIuIE9uIHN1Y2Nlc3MsIGluY3JlbWVudHMgcS5rZXkgKGtleTEpIHJlZgogCSAqIGNvdW50LgogCSAqLwotCXJldCA9IGZ1dGV4X3dhaXRfc2V0dXAodWFkZHIsIHZhbCwgZnNoYXJlZCwgJnEsICZoYik7CisJcmV0ID0gZnV0ZXhfd2FpdF9zZXR1cCh1YWRkciwgdmFsLCBmbGFncywgJnEsICZoYik7CiAJaWYgKHJldCkKIAkJZ290byBvdXRfa2V5MjsKIApAQCAtMjI3Myw4ICsyMjYwLDcgQEAKIAkJICovCiAJCWlmIChxLnBpX3N0YXRlICYmIChxLnBpX3N0YXRlLT5vd25lciAhPSBjdXJyZW50KSkgewogCQkJc3Bpbl9sb2NrKHEubG9ja19wdHIpOwotCQkJcmV0ID0gZml4dXBfcGlfc3RhdGVfb3duZXIodWFkZHIyLCAmcSwgY3VycmVudCwKLQkJCQkJCSAgIGZzaGFyZWQpOworCQkJcmV0ID0gZml4dXBfcGlfc3RhdGVfb3duZXIodWFkZHIyLCAmcSwgY3VycmVudCk7CiAJCQlzcGluX3VubG9jayhxLmxvY2tfcHRyKTsKIAkJfQogCX0gZWxzZSB7CkBAIC0yMjkzLDcgKzIyNzksNyBAQAogCQkgKiBGaXh1cCB0aGUgcGlfc3RhdGUgb3duZXIgYW5kIHBvc3NpYmx5IGFjcXVpcmUgdGhlIGxvY2sgaWYgd2UKIAkJICogaGF2ZW4ndCBhbHJlYWR5LgogCQkgKi8KLQkJcmVzID0gZml4dXBfb3duZXIodWFkZHIyLCBmc2hhcmVkLCAmcSwgIXJldCk7CisJCXJlcyA9IGZpeHVwX293bmVyKHVhZGRyMiwgJnEsICFyZXQpOwogCQkvKgogCQkgKiBJZiBmaXh1cF9vd25lcigpIHJldHVybmVkIGFuIGVycm9yLCBwcm9wcm9nYXRlIHRoYXQuICBJZiBpdAogCQkgKiBhY3F1aXJlZCB0aGUgbG9jaywgY2xlYXIgLUVUSU1FRE9VVCBvciAtRUlOVFIuCkBAIC0yMzI0LDkgKzIzMTAsOSBAQAogCX0KIAogb3V0X3B1dF9rZXlzOgotCXB1dF9mdXRleF9rZXkoZnNoYXJlZCwgJnEua2V5KTsKKwlwdXRfZnV0ZXhfa2V5KCZxLmtleSk7CiBvdXRfa2V5MjoKLQlwdXRfZnV0ZXhfa2V5KGZzaGFyZWQsICZrZXkyKTsKKwlwdXRfZnV0ZXhfa2V5KCZrZXkyKTsKIAogb3V0OgogCWlmICh0bykgewpAQCAtMjU1MSw1OCArMjUzNyw1NyBAQAogbG9uZyBkb19mdXRleCh1MzIgX191c2VyICp1YWRkciwgaW50IG9wLCB1MzIgdmFsLCBrdGltZV90ICp0aW1lb3V0LAogCQl1MzIgX191c2VyICp1YWRkcjIsIHUzMiB2YWwyLCB1MzIgdmFsMykKIHsKLQlpbnQgY2xvY2tydCwgcmV0ID0gLUVOT1NZUzsKLQlpbnQgY21kID0gb3AgJiBGVVRFWF9DTURfTUFTSzsKLQlpbnQgZnNoYXJlZCA9IDA7CisJaW50IHJldCA9IC1FTk9TWVMsIGNtZCA9IG9wICYgRlVURVhfQ01EX01BU0s7CisJdW5zaWduZWQgaW50IGZsYWdzID0gMDsKIAogCWlmICghKG9wICYgRlVURVhfUFJJVkFURV9GTEFHKSkKLQkJZnNoYXJlZCA9IDE7CisJCWZsYWdzIHw9IEZMQUdTX1NIQVJFRDsKIAotCWNsb2NrcnQgPSBvcCAmIEZVVEVYX0NMT0NLX1JFQUxUSU1FOwotCWlmIChjbG9ja3J0ICYmIGNtZCAhPSBGVVRFWF9XQUlUX0JJVFNFVCAmJiBjbWQgIT0gRlVURVhfV0FJVF9SRVFVRVVFX1BJKQotCQlyZXR1cm4gLUVOT1NZUzsKKwlpZiAob3AgJiBGVVRFWF9DTE9DS19SRUFMVElNRSkgeworCQlmbGFncyB8PSBGTEFHU19DTE9DS1JUOworCQlpZiAoY21kICE9IEZVVEVYX1dBSVRfQklUU0VUICYmIGNtZCAhPSBGVVRFWF9XQUlUX1JFUVVFVUVfUEkpCisJCQlyZXR1cm4gLUVOT1NZUzsKKwl9CiAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgRlVURVhfV0FJVDoKIAkJdmFsMyA9IEZVVEVYX0JJVFNFVF9NQVRDSF9BTlk7CiAJY2FzZSBGVVRFWF9XQUlUX0JJVFNFVDoKLQkJcmV0ID0gZnV0ZXhfd2FpdCh1YWRkciwgZnNoYXJlZCwgdmFsLCB0aW1lb3V0LCB2YWwzLCBjbG9ja3J0KTsKKwkJcmV0ID0gZnV0ZXhfd2FpdCh1YWRkciwgZmxhZ3MsIHZhbCwgdGltZW91dCwgdmFsMyk7CiAJCWJyZWFrOwogCWNhc2UgRlVURVhfV0FLRToKIAkJdmFsMyA9IEZVVEVYX0JJVFNFVF9NQVRDSF9BTlk7CiAJY2FzZSBGVVRFWF9XQUtFX0JJVFNFVDoKLQkJcmV0ID0gZnV0ZXhfd2FrZSh1YWRkciwgZnNoYXJlZCwgdmFsLCB2YWwzKTsKKwkJcmV0ID0gZnV0ZXhfd2FrZSh1YWRkciwgZmxhZ3MsIHZhbCwgdmFsMyk7CiAJCWJyZWFrOwogCWNhc2UgRlVURVhfUkVRVUVVRToKLQkJcmV0ID0gZnV0ZXhfcmVxdWV1ZSh1YWRkciwgZnNoYXJlZCwgdWFkZHIyLCB2YWwsIHZhbDIsIE5VTEwsIDApOworCQlyZXQgPSBmdXRleF9yZXF1ZXVlKHVhZGRyLCBmbGFncywgdWFkZHIyLCB2YWwsIHZhbDIsIE5VTEwsIDApOwogCQlicmVhazsKIAljYXNlIEZVVEVYX0NNUF9SRVFVRVVFOgotCQlyZXQgPSBmdXRleF9yZXF1ZXVlKHVhZGRyLCBmc2hhcmVkLCB1YWRkcjIsIHZhbCwgdmFsMiwgJnZhbDMsCi0JCQkJICAgIDApOworCQlyZXQgPSBmdXRleF9yZXF1ZXVlKHVhZGRyLCBmbGFncywgdWFkZHIyLCB2YWwsIHZhbDIsICZ2YWwzLCAwKTsKIAkJYnJlYWs7CiAJY2FzZSBGVVRFWF9XQUtFX09QOgotCQlyZXQgPSBmdXRleF93YWtlX29wKHVhZGRyLCBmc2hhcmVkLCB1YWRkcjIsIHZhbCwgdmFsMiwgdmFsMyk7CisJCXJldCA9IGZ1dGV4X3dha2Vfb3AodWFkZHIsIGZsYWdzLCB1YWRkcjIsIHZhbCwgdmFsMiwgdmFsMyk7CiAJCWJyZWFrOwogCWNhc2UgRlVURVhfTE9DS19QSToKIAkJaWYgKGZ1dGV4X2NtcHhjaGdfZW5hYmxlZCkKLQkJCXJldCA9IGZ1dGV4X2xvY2tfcGkodWFkZHIsIGZzaGFyZWQsIHZhbCwgdGltZW91dCwgMCk7CisJCQlyZXQgPSBmdXRleF9sb2NrX3BpKHVhZGRyLCBmbGFncywgdmFsLCB0aW1lb3V0LCAwKTsKIAkJYnJlYWs7CiAJY2FzZSBGVVRFWF9VTkxPQ0tfUEk6CiAJCWlmIChmdXRleF9jbXB4Y2hnX2VuYWJsZWQpCi0JCQlyZXQgPSBmdXRleF91bmxvY2tfcGkodWFkZHIsIGZzaGFyZWQpOworCQkJcmV0ID0gZnV0ZXhfdW5sb2NrX3BpKHVhZGRyLCBmbGFncyk7CiAJCWJyZWFrOwogCWNhc2UgRlVURVhfVFJZTE9DS19QSToKIAkJaWYgKGZ1dGV4X2NtcHhjaGdfZW5hYmxlZCkKLQkJCXJldCA9IGZ1dGV4X2xvY2tfcGkodWFkZHIsIGZzaGFyZWQsIDAsIHRpbWVvdXQsIDEpOworCQkJcmV0ID0gZnV0ZXhfbG9ja19waSh1YWRkciwgZmxhZ3MsIDAsIHRpbWVvdXQsIDEpOwogCQlicmVhazsKIAljYXNlIEZVVEVYX1dBSVRfUkVRVUVVRV9QSToKIAkJdmFsMyA9IEZVVEVYX0JJVFNFVF9NQVRDSF9BTlk7Ci0JCXJldCA9IGZ1dGV4X3dhaXRfcmVxdWV1ZV9waSh1YWRkciwgZnNoYXJlZCwgdmFsLCB0aW1lb3V0LCB2YWwzLAotCQkJCQkgICAgY2xvY2tydCwgdWFkZHIyKTsKKwkJcmV0ID0gZnV0ZXhfd2FpdF9yZXF1ZXVlX3BpKHVhZGRyLCBmbGFncywgdmFsLCB0aW1lb3V0LCB2YWwzLAorCQkJCQkgICAgdWFkZHIyKTsKIAkJYnJlYWs7CiAJY2FzZSBGVVRFWF9DTVBfUkVRVUVVRV9QSToKLQkJcmV0ID0gZnV0ZXhfcmVxdWV1ZSh1YWRkciwgZnNoYXJlZCwgdWFkZHIyLCB2YWwsIHZhbDIsICZ2YWwzLAotCQkJCSAgICAxKTsKKwkJcmV0ID0gZnV0ZXhfcmVxdWV1ZSh1YWRkciwgZmxhZ3MsIHVhZGRyMiwgdmFsLCB2YWwyLCAmdmFsMywgMSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldCA9IC1FTk9TWVM7CmRpZmYgLS1naXQgYS9rZXJuZWwvaHJ0aW1lci5jIGIva2VybmVsL2hydGltZXIuYwppbmRleCA3MjIwNmNmLi40NWRhMmI2IDEwMDY0NAotLS0gYS9rZXJuZWwvaHJ0aW1lci5jCisrKyBiL2tlcm5lbC9ocnRpbWVyLmMKQEAgLTQ5Nyw3ICs0OTcsNyBAQAogICovCiBzdGF0aWMgaW5saW5lIGludCBocnRpbWVyX2hyZXNfYWN0aXZlKHZvaWQpCiB7Ci0JcmV0dXJuIF9fZ2V0X2NwdV92YXIoaHJ0aW1lcl9iYXNlcykuaHJlc19hY3RpdmU7CisJcmV0dXJuIF9fdGhpc19jcHVfcmVhZChocnRpbWVyX2Jhc2VzLmhyZXNfYWN0aXZlKTsKIH0KIAogLyoKQEAgLTUxNiwxMCArNTE2LDEzIEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgSFJUSU1FUl9NQVhfQ0xPQ0tfQkFTRVM7IGkrKywgYmFzZSsrKSB7CiAJCXN0cnVjdCBocnRpbWVyICp0aW1lcjsKKwkJc3RydWN0IHRpbWVycXVldWVfbm9kZSAqbmV4dDsKIAotCQlpZiAoIWJhc2UtPmZpcnN0KQorCQluZXh0ID0gdGltZXJxdWV1ZV9nZXRuZXh0KCZiYXNlLT5hY3RpdmUpOworCQlpZiAoIW5leHQpCiAJCQljb250aW51ZTsKLQkJdGltZXIgPSByYl9lbnRyeShiYXNlLT5maXJzdCwgc3RydWN0IGhydGltZXIsIG5vZGUpOworCQl0aW1lciA9IGNvbnRhaW5lcl9vZihuZXh0LCBzdHJ1Y3QgaHJ0aW1lciwgbm9kZSk7CisKIAkJZXhwaXJlcyA9IGt0aW1lX3N1YihocnRpbWVyX2dldF9leHBpcmVzKHRpbWVyKSwgYmFzZS0+b2Zmc2V0KTsKIAkJLyoKIAkJICogY2xvY2tfd2FzX3NldCgpIGhhcyBjaGFuZ2VkIGJhc2UtPm9mZnNldCBzbyB0aGUKQEAgLTg0MCw0OCArODQzLDE3IEBACiBzdGF0aWMgaW50IGVucXVldWVfaHJ0aW1lcihzdHJ1Y3QgaHJ0aW1lciAqdGltZXIsCiAJCQkgICBzdHJ1Y3QgaHJ0aW1lcl9jbG9ja19iYXNlICpiYXNlKQogewotCXN0cnVjdCByYl9ub2RlICoqbGluayA9ICZiYXNlLT5hY3RpdmUucmJfbm9kZTsKLQlzdHJ1Y3QgcmJfbm9kZSAqcGFyZW50ID0gTlVMTDsKLQlzdHJ1Y3QgaHJ0aW1lciAqZW50cnk7Ci0JaW50IGxlZnRtb3N0ID0gMTsKLQogCWRlYnVnX2FjdGl2YXRlKHRpbWVyKTsKIAotCS8qCi0JICogRmluZCB0aGUgcmlnaHQgcGxhY2UgaW4gdGhlIHJidHJlZToKLQkgKi8KLQl3aGlsZSAoKmxpbmspIHsKLQkJcGFyZW50ID0gKmxpbms7Ci0JCWVudHJ5ID0gcmJfZW50cnkocGFyZW50LCBzdHJ1Y3QgaHJ0aW1lciwgbm9kZSk7Ci0JCS8qCi0JCSAqIFdlIGRvbnQgY2FyZSBhYm91dCBjb2xsaXNpb25zLiBOb2RlcyB3aXRoCi0JCSAqIHRoZSBzYW1lIGV4cGlyeSB0aW1lIHN0YXkgdG9nZXRoZXIuCi0JCSAqLwotCQlpZiAoaHJ0aW1lcl9nZXRfZXhwaXJlc190djY0KHRpbWVyKSA8Ci0JCQkJaHJ0aW1lcl9nZXRfZXhwaXJlc190djY0KGVudHJ5KSkgewotCQkJbGluayA9ICYoKmxpbmspLT5yYl9sZWZ0OwotCQl9IGVsc2UgewotCQkJbGluayA9ICYoKmxpbmspLT5yYl9yaWdodDsKLQkJCWxlZnRtb3N0ID0gMDsKLQkJfQotCX0KKwl0aW1lcnF1ZXVlX2FkZCgmYmFzZS0+YWN0aXZlLCAmdGltZXItPm5vZGUpOwogCiAJLyoKLQkgKiBJbnNlcnQgdGhlIHRpbWVyIHRvIHRoZSByYnRyZWUgYW5kIGNoZWNrIHdoZXRoZXIgaXQKLQkgKiByZXBsYWNlcyB0aGUgZmlyc3QgcGVuZGluZyB0aW1lcgotCSAqLwotCWlmIChsZWZ0bW9zdCkKLQkJYmFzZS0+Zmlyc3QgPSAmdGltZXItPm5vZGU7Ci0KLQlyYl9saW5rX25vZGUoJnRpbWVyLT5ub2RlLCBwYXJlbnQsIGxpbmspOwotCXJiX2luc2VydF9jb2xvcigmdGltZXItPm5vZGUsICZiYXNlLT5hY3RpdmUpOwotCS8qCiAJICogSFJUSU1FUl9TVEFURV9FTlFVRVVFRCBpcyBvcidlZCB0byB0aGUgY3VycmVudCBzdGF0ZSB0byBwcmVzZXJ2ZSB0aGUKIAkgKiBzdGF0ZSBvZiBhIHBvc3NpYmx5IHJ1bm5pbmcgY2FsbGJhY2suCiAJICovCiAJdGltZXItPnN0YXRlIHw9IEhSVElNRVJfU1RBVEVfRU5RVUVVRUQ7CiAKLQlyZXR1cm4gbGVmdG1vc3Q7CisJcmV0dXJuICgmdGltZXItPm5vZGUgPT0gYmFzZS0+YWN0aXZlLm5leHQpOwogfQogCiAvKgpAQCAtOTAxLDEyICs4NzMsNyBAQAogCWlmICghKHRpbWVyLT5zdGF0ZSAmIEhSVElNRVJfU1RBVEVfRU5RVUVVRUQpKQogCQlnb3RvIG91dDsKIAotCS8qCi0JICogUmVtb3ZlIHRoZSB0aW1lciBmcm9tIHRoZSByYnRyZWUgYW5kIHJlcGxhY2UgdGhlIGZpcnN0Ci0JICogZW50cnkgcG9pbnRlciBpZiBuZWNlc3NhcnkuCi0JICovCi0JaWYgKGJhc2UtPmZpcnN0ID09ICZ0aW1lci0+bm9kZSkgewotCQliYXNlLT5maXJzdCA9IHJiX25leHQoJnRpbWVyLT5ub2RlKTsKKwlpZiAoJnRpbWVyLT5ub2RlID09IHRpbWVycXVldWVfZ2V0bmV4dCgmYmFzZS0+YWN0aXZlKSkgewogI2lmZGVmIENPTkZJR19ISUdIX1JFU19USU1FUlMKIAkJLyogUmVwcm9ncmFtIHRoZSBjbG9jayBldmVudCBkZXZpY2UuIGlmIGVuYWJsZWQgKi8KIAkJaWYgKHJlcHJvZ3JhbSAmJiBocnRpbWVyX2hyZXNfYWN0aXZlKCkpIHsKQEAgLTkxOSw3ICs4ODYsNyBAQAogCQl9CiAjZW5kaWYKIAl9Ci0JcmJfZXJhc2UoJnRpbWVyLT5ub2RlLCAmYmFzZS0+YWN0aXZlKTsKKwl0aW1lcnF1ZXVlX2RlbCgmYmFzZS0+YWN0aXZlLCAmdGltZXItPm5vZGUpOwogb3V0OgogCXRpbWVyLT5zdGF0ZSA9IG5ld3N0YXRlOwogfQpAQCAtMTEyOCwxMSArMTA5NSwxMyBAQAogCWlmICghaHJ0aW1lcl9ocmVzX2FjdGl2ZSgpKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBIUlRJTUVSX01BWF9DTE9DS19CQVNFUzsgaSsrLCBiYXNlKyspIHsKIAkJCXN0cnVjdCBocnRpbWVyICp0aW1lcjsKKwkJCXN0cnVjdCB0aW1lcnF1ZXVlX25vZGUgKm5leHQ7CiAKLQkJCWlmICghYmFzZS0+Zmlyc3QpCisJCQluZXh0ID0gdGltZXJxdWV1ZV9nZXRuZXh0KCZiYXNlLT5hY3RpdmUpOworCQkJaWYgKCFuZXh0KQogCQkJCWNvbnRpbnVlOwogCi0JCQl0aW1lciA9IHJiX2VudHJ5KGJhc2UtPmZpcnN0LCBzdHJ1Y3QgaHJ0aW1lciwgbm9kZSk7CisJCQl0aW1lciA9IGNvbnRhaW5lcl9vZihuZXh0LCBzdHJ1Y3QgaHJ0aW1lciwgbm9kZSk7CiAJCQlkZWx0YS50djY0ID0gaHJ0aW1lcl9nZXRfZXhwaXJlc190djY0KHRpbWVyKTsKIAkJCWRlbHRhID0ga3RpbWVfc3ViKGRlbHRhLCBiYXNlLT5nZXRfdGltZSgpKTsKIAkJCWlmIChkZWx0YS50djY0IDwgbWluZGVsdGEudHY2NCkKQEAgLTExNjIsNiArMTEzMSw3IEBACiAKIAl0aW1lci0+YmFzZSA9ICZjcHVfYmFzZS0+Y2xvY2tfYmFzZVtjbG9ja19pZF07CiAJaHJ0aW1lcl9pbml0X3RpbWVyX2hyZXModGltZXIpOworCXRpbWVycXVldWVfaW5pdCgmdGltZXItPm5vZGUpOwogCiAjaWZkZWYgQ09ORklHX1RJTUVSX1NUQVRTCiAJdGltZXItPnN0YXJ0X3NpdGUgPSBOVUxMOwpAQCAtMTI3OCwxNCArMTI0OCwxNCBAQAogCiAJZm9yIChpID0gMDsgaSA8IEhSVElNRVJfTUFYX0NMT0NLX0JBU0VTOyBpKyspIHsKIAkJa3RpbWVfdCBiYXNlbm93OwotCQlzdHJ1Y3QgcmJfbm9kZSAqbm9kZTsKKwkJc3RydWN0IHRpbWVycXVldWVfbm9kZSAqbm9kZTsKIAogCQliYXNlbm93ID0ga3RpbWVfYWRkKG5vdywgYmFzZS0+b2Zmc2V0KTsKIAotCQl3aGlsZSAoKG5vZGUgPSBiYXNlLT5maXJzdCkpIHsKKwkJd2hpbGUgKChub2RlID0gdGltZXJxdWV1ZV9nZXRuZXh0KCZiYXNlLT5hY3RpdmUpKSkgewogCQkJc3RydWN0IGhydGltZXIgKnRpbWVyOwogCi0JCQl0aW1lciA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBocnRpbWVyLCBub2RlKTsKKwkJCXRpbWVyID0gY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBocnRpbWVyLCBub2RlKTsKIAogCQkJLyoKIAkJCSAqIFRoZSBpbW1lZGlhdGUgZ29hbCBmb3IgdXNpbmcgdGhlIHNvZnRleHBpcmVzIGlzCkBAIC0xNDQxLDcgKzE0MTEsNyBAQAogICovCiB2b2lkIGhydGltZXJfcnVuX3F1ZXVlcyh2b2lkKQogewotCXN0cnVjdCByYl9ub2RlICpub2RlOworCXN0cnVjdCB0aW1lcnF1ZXVlX25vZGUgKm5vZGU7CiAJc3RydWN0IGhydGltZXJfY3B1X2Jhc2UgKmNwdV9iYXNlID0gJl9fZ2V0X2NwdV92YXIoaHJ0aW1lcl9iYXNlcyk7CiAJc3RydWN0IGhydGltZXJfY2xvY2tfYmFzZSAqYmFzZTsKIAlpbnQgaW5kZXgsIGdldHRpbWUgPSAxOwpAQCAtMTQ1MSw4ICsxNDIxLDcgQEAKIAogCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IEhSVElNRVJfTUFYX0NMT0NLX0JBU0VTOyBpbmRleCsrKSB7CiAJCWJhc2UgPSAmY3B1X2Jhc2UtPmNsb2NrX2Jhc2VbaW5kZXhdOwotCi0JCWlmICghYmFzZS0+Zmlyc3QpCisJCWlmICghdGltZXJxdWV1ZV9nZXRuZXh0KCZiYXNlLT5hY3RpdmUpKQogCQkJY29udGludWU7CiAKIAkJaWYgKGdldHRpbWUpIHsKQEAgLTE0NjIsMTAgKzE0MzEsMTAgQEAKIAogCQlyYXdfc3Bpbl9sb2NrKCZjcHVfYmFzZS0+bG9jayk7CiAKLQkJd2hpbGUgKChub2RlID0gYmFzZS0+Zmlyc3QpKSB7CisJCXdoaWxlICgobm9kZSA9IHRpbWVycXVldWVfZ2V0bmV4dCgmYmFzZS0+YWN0aXZlKSkpIHsKIAkJCXN0cnVjdCBocnRpbWVyICp0aW1lcjsKIAotCQkJdGltZXIgPSByYl9lbnRyeShub2RlLCBzdHJ1Y3QgaHJ0aW1lciwgbm9kZSk7CisJCQl0aW1lciA9IGNvbnRhaW5lcl9vZihub2RlLCBzdHJ1Y3QgaHJ0aW1lciwgbm9kZSk7CiAJCQlpZiAoYmFzZS0+c29mdGlycV90aW1lLnR2NjQgPD0KIAkJCQkJaHJ0aW1lcl9nZXRfZXhwaXJlc190djY0KHRpbWVyKSkKIAkJCQlicmVhazsKQEAgLTE2MzAsOCArMTU5OSwxMCBAQAogCiAJcmF3X3NwaW5fbG9ja19pbml0KCZjcHVfYmFzZS0+bG9jayk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgSFJUSU1FUl9NQVhfQ0xPQ0tfQkFTRVM7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgSFJUSU1FUl9NQVhfQ0xPQ0tfQkFTRVM7IGkrKykgewogCQljcHVfYmFzZS0+Y2xvY2tfYmFzZVtpXS5jcHVfYmFzZSA9IGNwdV9iYXNlOworCQl0aW1lcnF1ZXVlX2luaXRfaGVhZCgmY3B1X2Jhc2UtPmNsb2NrX2Jhc2VbaV0uYWN0aXZlKTsKKwl9CiAKIAlocnRpbWVyX2luaXRfaHJlcyhjcHVfYmFzZSk7CiB9CkBAIC0xNjQyLDEwICsxNjEzLDEwIEBACiAJCQkJc3RydWN0IGhydGltZXJfY2xvY2tfYmFzZSAqbmV3X2Jhc2UpCiB7CiAJc3RydWN0IGhydGltZXIgKnRpbWVyOwotCXN0cnVjdCByYl9ub2RlICpub2RlOworCXN0cnVjdCB0aW1lcnF1ZXVlX25vZGUgKm5vZGU7CiAKLQl3aGlsZSAoKG5vZGUgPSByYl9maXJzdCgmb2xkX2Jhc2UtPmFjdGl2ZSkpKSB7Ci0JCXRpbWVyID0gcmJfZW50cnkobm9kZSwgc3RydWN0IGhydGltZXIsIG5vZGUpOworCXdoaWxlICgobm9kZSA9IHRpbWVycXVldWVfZ2V0bmV4dCgmb2xkX2Jhc2UtPmFjdGl2ZSkpKSB7CisJCXRpbWVyID0gY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBocnRpbWVyLCBub2RlKTsKIAkJQlVHX09OKGhydGltZXJfY2FsbGJhY2tfcnVubmluZyh0aW1lcikpOwogCQlkZWJ1Z19kZWFjdGl2YXRlKHRpbWVyKTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL2h3X2JyZWFrcG9pbnQuYyBiL2tlcm5lbC9od19icmVha3BvaW50LmMKaW5kZXggZTUzMjU4Mi4uMDg2YWRmMiAxMDA2NDQKLS0tIGEva2VybmVsL2h3X2JyZWFrcG9pbnQuYworKysgYi9rZXJuZWwvaHdfYnJlYWtwb2ludC5jCkBAIC02NDEsNyArNjQxLDcgQEAKIAogCWNvbnN0cmFpbnRzX2luaXRpYWxpemVkID0gMTsKIAotCXBlcmZfcG11X3JlZ2lzdGVyKCZwZXJmX2JyZWFrcG9pbnQpOworCXBlcmZfcG11X3JlZ2lzdGVyKCZwZXJmX2JyZWFrcG9pbnQsICJicmVha3BvaW50IiwgUEVSRl9UWVBFX0JSRUFLUE9JTlQpOwogCiAJcmV0dXJuIHJlZ2lzdGVyX2RpZV9ub3RpZmllcigmaHdfYnJlYWtwb2ludF9leGNlcHRpb25zX25iKTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9tYW5hZ2UuYyBiL2tlcm5lbC9pcnEvbWFuYWdlLmMKaW5kZXggNWY5MmFjYzUuLjBjYWE1OWYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvbWFuYWdlLmMKKysrIGIva2VybmVsL2lycS9tYW5hZ2UuYwpAQCAtNTc3LDcgKzU3Nyw5IEBACiAgKi8KIHN0YXRpYyBpbnQgaXJxX3RocmVhZCh2b2lkICpkYXRhKQogewotCXN0cnVjdCBzY2hlZF9wYXJhbSBwYXJhbSA9IHsgLnNjaGVkX3ByaW9yaXR5ID0gTUFYX1VTRVJfUlRfUFJJTy8yLCB9OworCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gcGFyYW0gPSB7CisJCS5zY2hlZF9wcmlvcml0eSA9IE1BWF9VU0VSX1JUX1BSSU8vMiwKKwl9OwogCXN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbiA9IGRhdGE7CiAJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoYWN0aW9uLT5pcnEpOwogCWludCB3YWtlLCBvbmVzaG90ID0gZGVzYy0+c3RhdHVzICYgSVJRX09ORVNIT1Q7CmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxX3dvcmsuYyBiL2tlcm5lbC9pcnFfd29yay5jCmluZGV4IDkwZjg4MTkuLmM1OGZhN2QgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnFfd29yay5jCisrKyBiL2tlcm5lbC9pcnFfd29yay5jCkBAIC03NywyMSArNzcsMjEgQEAKICAqLwogc3RhdGljIHZvaWQgX19pcnFfd29ya19xdWV1ZShzdHJ1Y3QgaXJxX3dvcmsgKmVudHJ5KQogewotCXN0cnVjdCBpcnFfd29yayAqKmhlYWQsICpuZXh0OworCXN0cnVjdCBpcnFfd29yayAqbmV4dDsKIAotCWhlYWQgPSAmZ2V0X2NwdV92YXIoaXJxX3dvcmtfbGlzdCk7CisJcHJlZW1wdF9kaXNhYmxlKCk7CiAKIAlkbyB7Ci0JCW5leHQgPSAqaGVhZDsKKwkJbmV4dCA9IF9fdGhpc19jcHVfcmVhZChpcnFfd29ya19saXN0KTsKIAkJLyogQ2FuIGFzc2lnbiBub24tYXRvbWljIGJlY2F1c2Ugd2Uga2VlcCB0aGUgZmxhZ3Mgc2V0LiAqLwogCQllbnRyeS0+bmV4dCA9IG5leHRfZmxhZ3MobmV4dCwgSVJRX1dPUktfRkxBR1MpOwotCX0gd2hpbGUgKGNtcHhjaGcoaGVhZCwgbmV4dCwgZW50cnkpICE9IG5leHQpOworCX0gd2hpbGUgKHRoaXNfY3B1X2NtcHhjaGcoaXJxX3dvcmtfbGlzdCwgbmV4dCwgZW50cnkpICE9IG5leHQpOwogCiAJLyogVGhlIGxpc3Qgd2FzIGVtcHR5LCByYWlzZSBzZWxmLWludGVycnVwdCB0byBzdGFydCBwcm9jZXNzaW5nLiAqLwogCWlmICghaXJxX3dvcmtfbmV4dChlbnRyeSkpCiAJCWFyY2hfaXJxX3dvcmtfcmFpc2UoKTsKIAotCXB1dF9jcHVfdmFyKGlycV93b3JrX2xpc3QpOworCXByZWVtcHRfZW5hYmxlKCk7CiB9CiAKIC8qCkBAIC0xMjAsMTYgKzEyMCwxNiBAQAogICovCiB2b2lkIGlycV93b3JrX3J1bih2b2lkKQogewotCXN0cnVjdCBpcnFfd29yayAqbGlzdCwgKipoZWFkOworCXN0cnVjdCBpcnFfd29yayAqbGlzdDsKIAotCWhlYWQgPSAmX19nZXRfY3B1X3ZhcihpcnFfd29ya19saXN0KTsKLQlpZiAoKmhlYWQgPT0gTlVMTCkKKwlpZiAodGhpc19jcHVfcmVhZChpcnFfd29ya19saXN0KSA9PSBOVUxMKQogCQlyZXR1cm47CiAKIAlCVUdfT04oIWluX2lycSgpKTsKIAlCVUdfT04oIWlycXNfZGlzYWJsZWQoKSk7CiAKLQlsaXN0ID0geGNoZyhoZWFkLCBOVUxMKTsKKwlsaXN0ID0gdGhpc19jcHVfeGNoZyhpcnFfd29ya19saXN0LCBOVUxMKTsKKwogCXdoaWxlIChsaXN0ICE9IE5VTEwpIHsKIAkJc3RydWN0IGlycV93b3JrICplbnRyeSA9IGxpc3Q7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9rcHJvYmVzLmMgYi9rZXJuZWwva3Byb2Jlcy5jCmluZGV4IDk3MzdhNzYuLjc3OTgxODEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9rcHJvYmVzLmMKKysrIGIva2VybmVsL2twcm9iZXMuYwpAQCAtMzE3LDEyICszMTcsMTIgQEAKIC8qIFdlIGhhdmUgcHJlZW1wdGlvbiBkaXNhYmxlZC4uIHNvIGl0IGlzIHNhZmUgdG8gdXNlIF9fIHZlcnNpb25zICovCiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2twcm9iZV9pbnN0YW5jZShzdHJ1Y3Qga3Byb2JlICprcCkKIHsKLQlfX2dldF9jcHVfdmFyKGtwcm9iZV9pbnN0YW5jZSkgPSBrcDsKKwlfX3RoaXNfY3B1X3dyaXRlKGtwcm9iZV9pbnN0YW5jZSwga3ApOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcmVzZXRfa3Byb2JlX2luc3RhbmNlKHZvaWQpCiB7Ci0JX19nZXRfY3B1X3ZhcihrcHJvYmVfaW5zdGFuY2UpID0gTlVMTDsKKwlfX3RoaXNfY3B1X3dyaXRlKGtwcm9iZV9pbnN0YW5jZSwgTlVMTCk7CiB9CiAKIC8qCkBAIC0zNTQsMTMgKzM1NCwyMCBAQAogCXJldHVybiBwLT5wcmVfaGFuZGxlciA9PSBhZ2dyX3ByZV9oYW5kbGVyOwogfQogCisvKiBSZXR1cm4gdHJ1ZSghMCkgaWYgdGhlIGtwcm9iZSBpcyB1bnVzZWQgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGtwcm9iZV91bnVzZWQoc3RydWN0IGtwcm9iZSAqcCkKK3sKKwlyZXR1cm4ga3Byb2JlX2FnZ3Jwcm9iZShwKSAmJiBrcHJvYmVfZGlzYWJsZWQocCkgJiYKKwkgICAgICAgbGlzdF9lbXB0eSgmcC0+bGlzdCk7Cit9CisKIC8qCiAgKiBLZWVwIGFsbCBmaWVsZHMgaW4gdGhlIGtwcm9iZSBjb25zaXN0ZW50CiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb3B5X2twcm9iZShzdHJ1Y3Qga3Byb2JlICpvbGRfcCwgc3RydWN0IGtwcm9iZSAqcCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5X2twcm9iZShzdHJ1Y3Qga3Byb2JlICphcCwgc3RydWN0IGtwcm9iZSAqcCkKIHsKLQltZW1jcHkoJnAtPm9wY29kZSwgJm9sZF9wLT5vcGNvZGUsIHNpemVvZihrcHJvYmVfb3Bjb2RlX3QpKTsKLQltZW1jcHkoJnAtPmFpbnNuLCAmb2xkX3AtPmFpbnNuLCBzaXplb2Yoc3RydWN0IGFyY2hfc3BlY2lmaWNfaW5zbikpOworCW1lbWNweSgmcC0+b3Bjb2RlLCAmYXAtPm9wY29kZSwgc2l6ZW9mKGtwcm9iZV9vcGNvZGVfdCkpOworCW1lbWNweSgmcC0+YWluc24sICZhcC0+YWluc24sIHNpemVvZihzdHJ1Y3QgYXJjaF9zcGVjaWZpY19pbnNuKSk7CiB9CiAKICNpZmRlZiBDT05GSUdfT1BUUFJPQkVTCkBAIC0zODQsNiArMzkxLDE3IEBACiAJfQogfQogCisvKiBGcmVlIG9wdGltaXplZCBpbnN0cnVjdGlvbnMgYW5kIG9wdGltaXplZF9rcHJvYmUgKi8KK3N0YXRpYyBfX2twcm9iZXMgdm9pZCBmcmVlX2FnZ3Jfa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnApCit7CisJc3RydWN0IG9wdGltaXplZF9rcHJvYmUgKm9wOworCisJb3AgPSBjb250YWluZXJfb2YocCwgc3RydWN0IG9wdGltaXplZF9rcHJvYmUsIGtwKTsKKwlhcmNoX3JlbW92ZV9vcHRpbWl6ZWRfa3Byb2JlKG9wKTsKKwlhcmNoX3JlbW92ZV9rcHJvYmUocCk7CisJa2ZyZWUob3ApOworfQorCiAvKiBSZXR1cm4gdHJ1ZSghMCkgaWYgdGhlIGtwcm9iZSBpcyByZWFkeSBmb3Igb3B0aW1pemF0aW9uLiAqLwogc3RhdGljIGlubGluZSBpbnQga3Byb2JlX29wdHJlYWR5KHN0cnVjdCBrcHJvYmUgKnApCiB7CkBAIC0zOTcsNiArNDE1LDMzIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qIFJldHVybiB0cnVlKCEwKSBpZiB0aGUga3Byb2JlIGlzIGRpc2FybWVkLiBOb3RlOiBwIG11c3QgYmUgb24gaGFzaCBsaXN0ICovCitzdGF0aWMgaW5saW5lIGludCBrcHJvYmVfZGlzYXJtZWQoc3RydWN0IGtwcm9iZSAqcCkKK3sKKwlzdHJ1Y3Qgb3B0aW1pemVkX2twcm9iZSAqb3A7CisKKwkvKiBJZiBrcHJvYmUgaXMgbm90IGFnZ3Ivb3B0IHByb2JlLCBqdXN0IHJldHVybiBrcHJvYmUgaXMgZGlzYWJsZWQgKi8KKwlpZiAoIWtwcm9iZV9hZ2dycHJvYmUocCkpCisJCXJldHVybiBrcHJvYmVfZGlzYWJsZWQocCk7CisKKwlvcCA9IGNvbnRhaW5lcl9vZihwLCBzdHJ1Y3Qgb3B0aW1pemVkX2twcm9iZSwga3ApOworCisJcmV0dXJuIGtwcm9iZV9kaXNhYmxlZChwKSAmJiBsaXN0X2VtcHR5KCZvcC0+bGlzdCk7Cit9CisKKy8qIFJldHVybiB0cnVlKCEwKSBpZiB0aGUgcHJvYmUgaXMgcXVldWVkIG9uICh1bilvcHRpbWl6aW5nIGxpc3RzICovCitzdGF0aWMgaW50IF9fa3Byb2JlcyBrcHJvYmVfcXVldWVkKHN0cnVjdCBrcHJvYmUgKnApCit7CisJc3RydWN0IG9wdGltaXplZF9rcHJvYmUgKm9wOworCisJaWYgKGtwcm9iZV9hZ2dycHJvYmUocCkpIHsKKwkJb3AgPSBjb250YWluZXJfb2YocCwgc3RydWN0IG9wdGltaXplZF9rcHJvYmUsIGtwKTsKKwkJaWYgKCFsaXN0X2VtcHR5KCZvcC0+bGlzdCkpCisJCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKIC8qCiAgKiBSZXR1cm4gYW4gb3B0aW1pemVkIGtwcm9iZSB3aG9zZSBvcHRpbWl6aW5nIGNvZGUgcmVwbGFjZXMKICAqIGluc3RydWN0aW9ucyBpbmNsdWRpbmcgYWRkciAoZXhjbHVkZSBicmVha3BvaW50KS4KQEAgLTQyMiwzMCArNDY3LDIzIEBACiAKIC8qIE9wdGltaXphdGlvbiBzdGFnaW5nIGxpc3QsIHByb3RlY3RlZCBieSBrcHJvYmVfbXV0ZXggKi8KIHN0YXRpYyBMSVNUX0hFQUQob3B0aW1pemluZ19saXN0KTsKK3N0YXRpYyBMSVNUX0hFQUQodW5vcHRpbWl6aW5nX2xpc3QpOwogCiBzdGF0aWMgdm9pZCBrcHJvYmVfb3B0aW1pemVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiBzdGF0aWMgREVDTEFSRV9ERUxBWUVEX1dPUksob3B0aW1pemluZ193b3JrLCBrcHJvYmVfb3B0aW1pemVyKTsKK3N0YXRpYyBERUNMQVJFX0NPTVBMRVRJT04ob3B0aW1pemVyX2NvbXApOwogI2RlZmluZSBPUFRJTUlaRV9ERUxBWSA1CiAKLS8qIEtwcm9iZSBqdW1wIG9wdGltaXplciAqLwotc3RhdGljIF9fa3Byb2JlcyB2b2lkIGtwcm9iZV9vcHRpbWl6ZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQorLyoKKyAqIE9wdGltaXplIChyZXBsYWNlIGEgYnJlYWtwb2ludCB3aXRoIGEganVtcCkga3Byb2JlcyBsaXN0ZWQgb24KKyAqIG9wdGltaXppbmdfbGlzdC4KKyAqLworc3RhdGljIF9fa3Byb2JlcyB2b2lkIGRvX29wdGltaXplX2twcm9iZXModm9pZCkKIHsKLQlzdHJ1Y3Qgb3B0aW1pemVkX2twcm9iZSAqb3AsICp0bXA7Ci0KLQkvKiBMb2NrIG1vZHVsZXMgd2hpbGUgb3B0aW1pemluZyBrcHJvYmVzICovCi0JbXV0ZXhfbG9jaygmbW9kdWxlX211dGV4KTsKLQltdXRleF9sb2NrKCZrcHJvYmVfbXV0ZXgpOwotCWlmIChrcHJvYmVzX2FsbF9kaXNhcm1lZCB8fCAha3Byb2Jlc19hbGxvd19vcHRpbWl6YXRpb24pCi0JCWdvdG8gZW5kOwotCi0JLyoKLQkgKiBXYWl0IGZvciBxdWllc2VuY2UgcGVyaW9kIHRvIGVuc3VyZSBhbGwgcnVubmluZyBpbnRlcnJ1cHRzCi0JICogYXJlIGRvbmUuIEJlY2F1c2Ugb3B0cHJvYmUgbWF5IG1vZGlmeSBtdWx0aXBsZSBpbnN0cnVjdGlvbnMKLQkgKiB0aGVyZSBpcyBhIGNoYW5jZSB0aGF0IE50aCBpbnN0cnVjdGlvbiBpcyBpbnRlcnJ1cHRlZC4gSW4gdGhhdAotCSAqIGNhc2UsIHJ1bm5pbmcgaW50ZXJydXB0IGNhbiByZXR1cm4gdG8gMm5kLU50aCBieXRlIG9mIGp1bXAKLQkgKiBpbnN0cnVjdGlvbi4gVGhpcyB3YWl0IGlzIGZvciBhdm9pZGluZyBpdC4KLQkgKi8KLQlzeW5jaHJvbml6ZV9zY2hlZCgpOworCS8qIE9wdGltaXphdGlvbiBuZXZlciBiZSBkb25lIHdoZW4gZGlzYXJtZWQgKi8KKwlpZiAoa3Byb2Jlc19hbGxfZGlzYXJtZWQgfHwgIWtwcm9iZXNfYWxsb3dfb3B0aW1pemF0aW9uIHx8CisJICAgIGxpc3RfZW1wdHkoJm9wdGltaXppbmdfbGlzdCkpCisJCXJldHVybjsKIAogCS8qCiAJICogVGhlIG9wdGltaXphdGlvbi91bm9wdGltaXphdGlvbiByZWZlcnMgb25saW5lX2NwdXMgdmlhCkBAIC00NTksMTcgKzQ5NywxMTEgQEAKIAkgKi8KIAlnZXRfb25saW5lX2NwdXMoKTsKIAltdXRleF9sb2NrKCZ0ZXh0X211dGV4KTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUob3AsIHRtcCwgJm9wdGltaXppbmdfbGlzdCwgbGlzdCkgewotCQlXQVJOX09OKGtwcm9iZV9kaXNhYmxlZCgmb3AtPmtwKSk7Ci0JCWlmIChhcmNoX29wdGltaXplX2twcm9iZShvcCkgPCAwKQotCQkJb3AtPmtwLmZsYWdzICY9IH5LUFJPQkVfRkxBR19PUFRJTUlaRUQ7Ci0JCWxpc3RfZGVsX2luaXQoJm9wLT5saXN0KTsKKwlhcmNoX29wdGltaXplX2twcm9iZXMoJm9wdGltaXppbmdfbGlzdCk7CisJbXV0ZXhfdW5sb2NrKCZ0ZXh0X211dGV4KTsKKwlwdXRfb25saW5lX2NwdXMoKTsKK30KKworLyoKKyAqIFVub3B0aW1pemUgKHJlcGxhY2UgYSBqdW1wIHdpdGggYSBicmVha3BvaW50IGFuZCByZW1vdmUgdGhlIGJyZWFrcG9pbnQKKyAqIGlmIG5lZWQpIGtwcm9iZXMgbGlzdGVkIG9uIHVub3B0aW1pemluZ19saXN0LgorICovCitzdGF0aWMgX19rcHJvYmVzIHZvaWQgZG9fdW5vcHRpbWl6ZV9rcHJvYmVzKHN0cnVjdCBsaXN0X2hlYWQgKmZyZWVfbGlzdCkKK3sKKwlzdHJ1Y3Qgb3B0aW1pemVkX2twcm9iZSAqb3AsICp0bXA7CisKKwkvKiBVbm9wdGltaXphdGlvbiBtdXN0IGJlIGRvbmUgYW55dGltZSAqLworCWlmIChsaXN0X2VtcHR5KCZ1bm9wdGltaXppbmdfbGlzdCkpCisJCXJldHVybjsKKworCS8qIERpdHRvIHRvIGRvX29wdGltaXplX2twcm9iZXMgKi8KKwlnZXRfb25saW5lX2NwdXMoKTsKKwltdXRleF9sb2NrKCZ0ZXh0X211dGV4KTsKKwlhcmNoX3Vub3B0aW1pemVfa3Byb2JlcygmdW5vcHRpbWl6aW5nX2xpc3QsIGZyZWVfbGlzdCk7CisJLyogTG9vcCBmcmVlX2xpc3QgZm9yIGRpc2FybWluZyAqLworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShvcCwgdG1wLCBmcmVlX2xpc3QsIGxpc3QpIHsKKwkJLyogRGlzYXJtIHByb2JlcyBpZiBtYXJrZWQgZGlzYWJsZWQgKi8KKwkJaWYgKGtwcm9iZV9kaXNhYmxlZCgmb3AtPmtwKSkKKwkJCWFyY2hfZGlzYXJtX2twcm9iZSgmb3AtPmtwKTsKKwkJaWYgKGtwcm9iZV91bnVzZWQoJm9wLT5rcCkpIHsKKwkJCS8qCisJCQkgKiBSZW1vdmUgdW51c2VkIHByb2JlcyBmcm9tIGhhc2ggbGlzdC4gQWZ0ZXIgd2FpdGluZworCQkJICogZm9yIHN5bmNocm9uaXphdGlvbiwgdGhlc2UgcHJvYmVzIGFyZSByZWNsYWltZWQuCisJCQkgKiAocmVjbGFpbWluZyBpcyBkb25lIGJ5IGRvX2ZyZWVfY2xlYW5lZF9rcHJvYmVzLikKKwkJCSAqLworCQkJaGxpc3RfZGVsX3JjdSgmb3AtPmtwLmhsaXN0KTsKKwkJfSBlbHNlCisJCQlsaXN0X2RlbF9pbml0KCZvcC0+bGlzdCk7CiAJfQogCW11dGV4X3VubG9jaygmdGV4dF9tdXRleCk7CiAJcHV0X29ubGluZV9jcHVzKCk7Ci1lbmQ6Cit9CisKKy8qIFJlY2xhaW0gYWxsIGtwcm9iZXMgb24gdGhlIGZyZWVfbGlzdCAqLworc3RhdGljIF9fa3Byb2JlcyB2b2lkIGRvX2ZyZWVfY2xlYW5lZF9rcHJvYmVzKHN0cnVjdCBsaXN0X2hlYWQgKmZyZWVfbGlzdCkKK3sKKwlzdHJ1Y3Qgb3B0aW1pemVkX2twcm9iZSAqb3AsICp0bXA7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUob3AsIHRtcCwgZnJlZV9saXN0LCBsaXN0KSB7CisJCUJVR19PTigha3Byb2JlX3VudXNlZCgmb3AtPmtwKSk7CisJCWxpc3RfZGVsX2luaXQoJm9wLT5saXN0KTsKKwkJZnJlZV9hZ2dyX2twcm9iZSgmb3AtPmtwKTsKKwl9Cit9CisKKy8qIFN0YXJ0IG9wdGltaXplciBhZnRlciBPUFRJTUlaRV9ERUxBWSBwYXNzZWQgKi8KK3N0YXRpYyBfX2twcm9iZXMgdm9pZCBraWNrX2twcm9iZV9vcHRpbWl6ZXIodm9pZCkKK3sKKwlpZiAoIWRlbGF5ZWRfd29ya19wZW5kaW5nKCZvcHRpbWl6aW5nX3dvcmspKQorCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJm9wdGltaXppbmdfd29yaywgT1BUSU1JWkVfREVMQVkpOworfQorCisvKiBLcHJvYmUganVtcCBvcHRpbWl6ZXIgKi8KK3N0YXRpYyBfX2twcm9iZXMgdm9pZCBrcHJvYmVfb3B0aW1pemVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlMSVNUX0hFQUQoZnJlZV9saXN0KTsKKworCS8qIExvY2sgbW9kdWxlcyB3aGlsZSBvcHRpbWl6aW5nIGtwcm9iZXMgKi8KKwltdXRleF9sb2NrKCZtb2R1bGVfbXV0ZXgpOworCW11dGV4X2xvY2soJmtwcm9iZV9tdXRleCk7CisKKwkvKgorCSAqIFN0ZXAgMTogVW5vcHRpbWl6ZSBrcHJvYmVzIGFuZCBjb2xsZWN0IGNsZWFuZWQgKHVudXNlZCBhbmQgZGlzYXJtZWQpCisJICoga3Byb2JlcyBiZWZvcmUgd2FpdGluZyBmb3IgcXVpZXNlbmNlIHBlcmlvZC4KKwkgKi8KKwlkb191bm9wdGltaXplX2twcm9iZXMoJmZyZWVfbGlzdCk7CisKKwkvKgorCSAqIFN0ZXAgMjogV2FpdCBmb3IgcXVpZXNlbmNlIHBlcmlvZCB0byBlbnN1cmUgYWxsIHJ1bm5pbmcgaW50ZXJydXB0cworCSAqIGFyZSBkb25lLiBCZWNhdXNlIG9wdHByb2JlIG1heSBtb2RpZnkgbXVsdGlwbGUgaW5zdHJ1Y3Rpb25zCisJICogdGhlcmUgaXMgYSBjaGFuY2UgdGhhdCBOdGggaW5zdHJ1Y3Rpb24gaXMgaW50ZXJydXB0ZWQuIEluIHRoYXQKKwkgKiBjYXNlLCBydW5uaW5nIGludGVycnVwdCBjYW4gcmV0dXJuIHRvIDJuZC1OdGggYnl0ZSBvZiBqdW1wCisJICogaW5zdHJ1Y3Rpb24uIFRoaXMgd2FpdCBpcyBmb3IgYXZvaWRpbmcgaXQuCisJICovCisJc3luY2hyb25pemVfc2NoZWQoKTsKKworCS8qIFN0ZXAgMzogT3B0aW1pemUga3Byb2JlcyBhZnRlciBxdWllc2VuY2UgcGVyaW9kICovCisJZG9fb3B0aW1pemVfa3Byb2JlcygpOworCisJLyogU3RlcCA0OiBGcmVlIGNsZWFuZWQga3Byb2JlcyBhZnRlciBxdWllc2VuY2UgcGVyaW9kICovCisJZG9fZnJlZV9jbGVhbmVkX2twcm9iZXMoJmZyZWVfbGlzdCk7CisKIAltdXRleF91bmxvY2soJmtwcm9iZV9tdXRleCk7CiAJbXV0ZXhfdW5sb2NrKCZtb2R1bGVfbXV0ZXgpOworCisJLyogU3RlcCA1OiBLaWNrIG9wdGltaXplciBhZ2FpbiBpZiBuZWVkZWQgKi8KKwlpZiAoIWxpc3RfZW1wdHkoJm9wdGltaXppbmdfbGlzdCkgfHwgIWxpc3RfZW1wdHkoJnVub3B0aW1pemluZ19saXN0KSkKKwkJa2lja19rcHJvYmVfb3B0aW1pemVyKCk7CisJZWxzZQorCQkvKiBXYWtlIHVwIGFsbCB3YWl0ZXJzICovCisJCWNvbXBsZXRlX2FsbCgmb3B0aW1pemVyX2NvbXApOworfQorCisvKiBXYWl0IGZvciBjb21wbGV0aW5nIG9wdGltaXphdGlvbiBhbmQgdW5vcHRpbWl6YXRpb24gKi8KK3N0YXRpYyBfX2twcm9iZXMgdm9pZCB3YWl0X2Zvcl9rcHJvYmVfb3B0aW1pemVyKHZvaWQpCit7CisJaWYgKGRlbGF5ZWRfd29ya19wZW5kaW5nKCZvcHRpbWl6aW5nX3dvcmspKQorCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZvcHRpbWl6ZXJfY29tcCk7CiB9CiAKIC8qIE9wdGltaXplIGtwcm9iZSBpZiBwIGlzIHJlYWR5IHRvIGJlIG9wdGltaXplZCAqLwpAQCAtNDk1LDI4ICs2MjcsODUgQEAKIAkvKiBDaGVjayBpZiBpdCBpcyBhbHJlYWR5IG9wdGltaXplZC4gKi8KIAlpZiAob3AtPmtwLmZsYWdzICYgS1BST0JFX0ZMQUdfT1BUSU1JWkVEKQogCQlyZXR1cm47Ci0KIAlvcC0+a3AuZmxhZ3MgfD0gS1BST0JFX0ZMQUdfT1BUSU1JWkVEOwotCWxpc3RfYWRkKCZvcC0+bGlzdCwgJm9wdGltaXppbmdfbGlzdCk7Ci0JaWYgKCFkZWxheWVkX3dvcmtfcGVuZGluZygmb3B0aW1pemluZ193b3JrKSkKLQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZvcHRpbWl6aW5nX3dvcmssIE9QVElNSVpFX0RFTEFZKTsKKworCWlmICghbGlzdF9lbXB0eSgmb3AtPmxpc3QpKQorCQkvKiBUaGlzIGlzIHVuZGVyIHVub3B0aW1pemluZy4gSnVzdCBkZXF1ZXVlIHRoZSBwcm9iZSAqLworCQlsaXN0X2RlbF9pbml0KCZvcC0+bGlzdCk7CisJZWxzZSB7CisJCWxpc3RfYWRkKCZvcC0+bGlzdCwgJm9wdGltaXppbmdfbGlzdCk7CisJCWtpY2tfa3Byb2JlX29wdGltaXplcigpOworCX0KK30KKworLyogU2hvcnQgY3V0IHRvIGRpcmVjdCB1bm9wdGltaXppbmcgKi8KK3N0YXRpYyBfX2twcm9iZXMgdm9pZCBmb3JjZV91bm9wdGltaXplX2twcm9iZShzdHJ1Y3Qgb3B0aW1pemVkX2twcm9iZSAqb3ApCit7CisJZ2V0X29ubGluZV9jcHVzKCk7CisJYXJjaF91bm9wdGltaXplX2twcm9iZShvcCk7CisJcHV0X29ubGluZV9jcHVzKCk7CisJaWYgKGtwcm9iZV9kaXNhYmxlZCgmb3AtPmtwKSkKKwkJYXJjaF9kaXNhcm1fa3Byb2JlKCZvcC0+a3ApOwogfQogCiAvKiBVbm9wdGltaXplIGEga3Byb2JlIGlmIHAgaXMgb3B0aW1pemVkICovCi1zdGF0aWMgX19rcHJvYmVzIHZvaWQgdW5vcHRpbWl6ZV9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcCkKK3N0YXRpYyBfX2twcm9iZXMgdm9pZCB1bm9wdGltaXplX2twcm9iZShzdHJ1Y3Qga3Byb2JlICpwLCBib29sIGZvcmNlKQogewogCXN0cnVjdCBvcHRpbWl6ZWRfa3Byb2JlICpvcDsKIAotCWlmICgocC0+ZmxhZ3MgJiBLUFJPQkVfRkxBR19PUFRJTUlaRUQpICYmIGtwcm9iZV9hZ2dycHJvYmUocCkpIHsKLQkJb3AgPSBjb250YWluZXJfb2YocCwgc3RydWN0IG9wdGltaXplZF9rcHJvYmUsIGtwKTsKLQkJaWYgKCFsaXN0X2VtcHR5KCZvcC0+bGlzdCkpCi0JCQkvKiBEZXF1ZXVlIGZyb20gdGhlIG9wdGltaXphdGlvbiBxdWV1ZSAqLworCWlmICgha3Byb2JlX2FnZ3Jwcm9iZShwKSB8fCBrcHJvYmVfZGlzYXJtZWQocCkpCisJCXJldHVybjsgLyogVGhpcyBpcyBub3QgYW4gb3B0cHJvYmUgbm9yIG9wdGltaXplZCAqLworCisJb3AgPSBjb250YWluZXJfb2YocCwgc3RydWN0IG9wdGltaXplZF9rcHJvYmUsIGtwKTsKKwlpZiAoIWtwcm9iZV9vcHRpbWl6ZWQocCkpIHsKKwkJLyogVW5vcHRpbWl6ZWQgb3IgdW5vcHRpbWl6aW5nIGNhc2UgKi8KKwkJaWYgKGZvcmNlICYmICFsaXN0X2VtcHR5KCZvcC0+bGlzdCkpIHsKKwkJCS8qCisJCQkgKiBPbmx5IGlmIHRoaXMgaXMgdW5vcHRpbWl6aW5nIGtwcm9iZSBhbmQgZm9yY2VkLAorCQkJICogZm9yY2libHkgdW5vcHRpbWl6ZSBpdC4gKE5vIG5lZWQgdG8gdW5vcHRpbWl6ZQorCQkJICogdW5vcHRpbWl6ZWQga3Byb2JlIGFnYWluIDopCisJCQkgKi8KIAkJCWxpc3RfZGVsX2luaXQoJm9wLT5saXN0KTsKLQkJZWxzZQotCQkJLyogUmVwbGFjZSBqdW1wIHdpdGggYnJlYWsgKi8KLQkJCWFyY2hfdW5vcHRpbWl6ZV9rcHJvYmUob3ApOwotCQlvcC0+a3AuZmxhZ3MgJj0gfktQUk9CRV9GTEFHX09QVElNSVpFRDsKKwkJCWZvcmNlX3Vub3B0aW1pemVfa3Byb2JlKG9wKTsKKwkJfQorCQlyZXR1cm47CiAJfQorCisJb3AtPmtwLmZsYWdzICY9IH5LUFJPQkVfRkxBR19PUFRJTUlaRUQ7CisJaWYgKCFsaXN0X2VtcHR5KCZvcC0+bGlzdCkpIHsKKwkJLyogRGVxdWV1ZSBmcm9tIHRoZSBvcHRpbWl6YXRpb24gcXVldWUgKi8KKwkJbGlzdF9kZWxfaW5pdCgmb3AtPmxpc3QpOworCQlyZXR1cm47CisJfQorCS8qIE9wdGltaXplZCBrcHJvYmUgY2FzZSAqLworCWlmIChmb3JjZSkKKwkJLyogRm9yY2libHkgdXBkYXRlIHRoZSBjb2RlOiB0aGlzIGlzIGEgc3BlY2lhbCBjYXNlICovCisJCWZvcmNlX3Vub3B0aW1pemVfa3Byb2JlKG9wKTsKKwllbHNlIHsKKwkJbGlzdF9hZGQoJm9wLT5saXN0LCAmdW5vcHRpbWl6aW5nX2xpc3QpOworCQlraWNrX2twcm9iZV9vcHRpbWl6ZXIoKTsKKwl9Cit9CisKKy8qIENhbmNlbCB1bm9wdGltaXppbmcgZm9yIHJldXNpbmcgKi8KK3N0YXRpYyB2b2lkIHJldXNlX3VudXNlZF9rcHJvYmUoc3RydWN0IGtwcm9iZSAqYXApCit7CisJc3RydWN0IG9wdGltaXplZF9rcHJvYmUgKm9wOworCisJQlVHX09OKCFrcHJvYmVfdW51c2VkKGFwKSk7CisJLyoKKwkgKiBVbnVzZWQga3Byb2JlIE1VU1QgYmUgb24gdGhlIHdheSBvZiBkZWxheWVkIHVub3B0aW1pemluZyAobWVhbnMKKwkgKiB0aGVyZSBpcyBzdGlsbCBhIHJlbGF0aXZlIGp1bXApIGFuZCBkaXNhYmxlZC4KKwkgKi8KKwlvcCA9IGNvbnRhaW5lcl9vZihhcCwgc3RydWN0IG9wdGltaXplZF9rcHJvYmUsIGtwKTsKKwlpZiAodW5saWtlbHkobGlzdF9lbXB0eSgmb3AtPmxpc3QpKSkKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiV2FybmluZzogZm91bmQgYSBzdHJheSB1bnVzZWQgIgorCQkJImFnZ3Jwcm9iZUAlcFxuIiwgYXAtPmFkZHIpOworCS8qIEVuYWJsZSB0aGUgcHJvYmUgYWdhaW4gKi8KKwlhcC0+ZmxhZ3MgJj0gfktQUk9CRV9GTEFHX0RJU0FCTEVEOworCS8qIE9wdGltaXplIGl0IGFnYWluIChyZW1vdmUgZnJvbSBvcC0+bGlzdCkgKi8KKwlCVUdfT04oIWtwcm9iZV9vcHRyZWFkeShhcCkpOworCW9wdGltaXplX2twcm9iZShhcCk7CiB9CiAKIC8qIFJlbW92ZSBvcHRpbWl6ZWQgaW5zdHJ1Y3Rpb25zICovCkBAIC01MjUsMTIgKzcxNCwxMiBAQAogCXN0cnVjdCBvcHRpbWl6ZWRfa3Byb2JlICpvcDsKIAogCW9wID0gY29udGFpbmVyX29mKHAsIHN0cnVjdCBvcHRpbWl6ZWRfa3Byb2JlLCBrcCk7Ci0JaWYgKCFsaXN0X2VtcHR5KCZvcC0+bGlzdCkpIHsKLQkJLyogRGVxdWV1ZSBmcm9tIHRoZSBvcHRpbWl6YXRpb24gcXVldWUgKi8KKwlpZiAoIWxpc3RfZW1wdHkoJm9wLT5saXN0KSkKKwkJLyogRGVxdWV1ZSBmcm9tIHRoZSAodW4pb3B0aW1pemF0aW9uIHF1ZXVlICovCiAJCWxpc3RfZGVsX2luaXQoJm9wLT5saXN0KTsKLQkJb3AtPmtwLmZsYWdzICY9IH5LUFJPQkVfRkxBR19PUFRJTUlaRUQ7Ci0JfQotCS8qIERvbid0IHVub3B0aW1pemUsIGJlY2F1c2UgdGhlIHRhcmdldCBjb2RlIHdpbGwgYmUgZnJlZWQuICovCisKKwlvcC0+a3AuZmxhZ3MgJj0gfktQUk9CRV9GTEFHX09QVElNSVpFRDsKKwkvKiBEb24ndCB0b3VjaCB0aGUgY29kZSwgYmVjYXVzZSBpdCBpcyBhbHJlYWR5IGZyZWVkLiAqLwogCWFyY2hfcmVtb3ZlX29wdGltaXplZF9rcHJvYmUob3ApOwogfQogCkBAIC01NDMsMTYgKzczMiw2IEBACiAJYXJjaF9wcmVwYXJlX29wdGltaXplZF9rcHJvYmUob3ApOwogfQogCi0vKiBGcmVlIG9wdGltaXplZCBpbnN0cnVjdGlvbnMgYW5kIG9wdGltaXplZF9rcHJvYmUgKi8KLXN0YXRpYyBfX2twcm9iZXMgdm9pZCBmcmVlX2FnZ3Jfa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnApCi17Ci0Jc3RydWN0IG9wdGltaXplZF9rcHJvYmUgKm9wOwotCi0Jb3AgPSBjb250YWluZXJfb2YocCwgc3RydWN0IG9wdGltaXplZF9rcHJvYmUsIGtwKTsKLQlhcmNoX3JlbW92ZV9vcHRpbWl6ZWRfa3Byb2JlKG9wKTsKLQlrZnJlZShvcCk7Ci19Ci0KIC8qIEFsbG9jYXRlIG5ldyBvcHRpbWl6ZWRfa3Byb2JlIGFuZCB0cnkgdG8gcHJlcGFyZSBvcHRpbWl6ZWQgaW5zdHJ1Y3Rpb25zICovCiBzdGF0aWMgX19rcHJvYmVzIHN0cnVjdCBrcHJvYmUgKmFsbG9jX2FnZ3Jfa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnApCiB7CkBAIC01ODcsNyArNzY2LDggQEAKIAlvcCA9IGNvbnRhaW5lcl9vZihhcCwgc3RydWN0IG9wdGltaXplZF9rcHJvYmUsIGtwKTsKIAlpZiAoIWFyY2hfcHJlcGFyZWRfb3B0aW5zbigmb3AtPm9wdGluc24pKSB7CiAJCS8qIElmIGZhaWxlZCB0byBzZXR1cCBvcHRpbWl6aW5nLCBmYWxsYmFjayB0byBrcHJvYmUgKi8KLQkJZnJlZV9hZ2dyX2twcm9iZShhcCk7CisJCWFyY2hfcmVtb3ZlX29wdGltaXplZF9rcHJvYmUob3ApOworCQlrZnJlZShvcCk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTYzMSwyMSArODExLDE2IEBACiAJCXJldHVybjsKIAogCWtwcm9iZXNfYWxsb3dfb3B0aW1pemF0aW9uID0gZmFsc2U7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiS3Byb2JlcyBnbG9iYWxseSB1bm9wdGltaXplZFxuIik7Ci0JZ2V0X29ubGluZV9jcHVzKCk7CS8qIEZvciBhdm9pZGluZyB0ZXh0X211dGV4IGRlYWRsb2NrICovCi0JbXV0ZXhfbG9jaygmdGV4dF9tdXRleCk7CiAJZm9yIChpID0gMDsgaSA8IEtQUk9CRV9UQUJMRV9TSVpFOyBpKyspIHsKIAkJaGVhZCA9ICZrcHJvYmVfdGFibGVbaV07CiAJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwLCBub2RlLCBoZWFkLCBobGlzdCkgewogCQkJaWYgKCFrcHJvYmVfZGlzYWJsZWQocCkpCi0JCQkJdW5vcHRpbWl6ZV9rcHJvYmUocCk7CisJCQkJdW5vcHRpbWl6ZV9rcHJvYmUocCwgZmFsc2UpOwogCQl9CiAJfQotCi0JbXV0ZXhfdW5sb2NrKCZ0ZXh0X211dGV4KTsKLQlwdXRfb25saW5lX2NwdXMoKTsKLQkvKiBBbGxvdyBhbGwgY3VycmVudGx5IHJ1bm5pbmcga3Byb2JlcyB0byBjb21wbGV0ZSAqLwotCXN5bmNocm9uaXplX3NjaGVkKCk7CisJLyogV2FpdCBmb3IgdW5vcHRpbWl6aW5nIGNvbXBsZXRpb24gKi8KKwl3YWl0X2Zvcl9rcHJvYmVfb3B0aW1pemVyKCk7CisJcHJpbnRrKEtFUk5fSU5GTyAiS3Byb2JlcyBnbG9iYWxseSB1bm9wdGltaXplZFxuIik7CiB9CiAKIGludCBzeXNjdGxfa3Byb2Jlc19vcHRpbWl6YXRpb247CkBAIC02NjksNDQgKzg0NCw2MCBAQAogfQogI2VuZGlmIC8qIENPTkZJR19TWVNDVEwgKi8KIAorLyogUHV0IGEgYnJlYWtwb2ludCBmb3IgYSBwcm9iZS4gTXVzdCBiZSBjYWxsZWQgd2l0aCB0ZXh0X211dGV4IGxvY2tlZCAqLwogc3RhdGljIHZvaWQgX19rcHJvYmVzIF9fYXJtX2twcm9iZShzdHJ1Y3Qga3Byb2JlICpwKQogewotCXN0cnVjdCBrcHJvYmUgKm9sZF9wOworCXN0cnVjdCBrcHJvYmUgKl9wOwogCiAJLyogQ2hlY2sgY29sbGlzaW9uIHdpdGggb3RoZXIgb3B0aW1pemVkIGtwcm9iZXMgKi8KLQlvbGRfcCA9IGdldF9vcHRpbWl6ZWRfa3Byb2JlKCh1bnNpZ25lZCBsb25nKXAtPmFkZHIpOwotCWlmICh1bmxpa2VseShvbGRfcCkpCi0JCXVub3B0aW1pemVfa3Byb2JlKG9sZF9wKTsgLyogRmFsbGJhY2sgdG8gdW5vcHRpbWl6ZWQga3Byb2JlICovCisJX3AgPSBnZXRfb3B0aW1pemVkX2twcm9iZSgodW5zaWduZWQgbG9uZylwLT5hZGRyKTsKKwlpZiAodW5saWtlbHkoX3ApKQorCQkvKiBGYWxsYmFjayB0byB1bm9wdGltaXplZCBrcHJvYmUgKi8KKwkJdW5vcHRpbWl6ZV9rcHJvYmUoX3AsIHRydWUpOwogCiAJYXJjaF9hcm1fa3Byb2JlKHApOwogCW9wdGltaXplX2twcm9iZShwKTsJLyogVHJ5IHRvIG9wdGltaXplIChhZGQga3Byb2JlIHRvIGEgbGlzdCkgKi8KIH0KIAotc3RhdGljIHZvaWQgX19rcHJvYmVzIF9fZGlzYXJtX2twcm9iZShzdHJ1Y3Qga3Byb2JlICpwKQorLyogUmVtb3ZlIHRoZSBicmVha3BvaW50IG9mIGEgcHJvYmUuIE11c3QgYmUgY2FsbGVkIHdpdGggdGV4dF9tdXRleCBsb2NrZWQgKi8KK3N0YXRpYyB2b2lkIF9fa3Byb2JlcyBfX2Rpc2FybV9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcCwgYm9vbCByZW9wdCkKIHsKLQlzdHJ1Y3Qga3Byb2JlICpvbGRfcDsKKwlzdHJ1Y3Qga3Byb2JlICpfcDsKIAotCXVub3B0aW1pemVfa3Byb2JlKHApOwkvKiBUcnkgdG8gdW5vcHRpbWl6ZSAqLwotCWFyY2hfZGlzYXJtX2twcm9iZShwKTsKKwl1bm9wdGltaXplX2twcm9iZShwLCBmYWxzZSk7CS8qIFRyeSB0byB1bm9wdGltaXplICovCiAKLQkvKiBJZiBhbm90aGVyIGtwcm9iZSB3YXMgYmxvY2tlZCwgb3B0aW1pemUgaXQuICovCi0Jb2xkX3AgPSBnZXRfb3B0aW1pemVkX2twcm9iZSgodW5zaWduZWQgbG9uZylwLT5hZGRyKTsKLQlpZiAodW5saWtlbHkob2xkX3ApKQotCQlvcHRpbWl6ZV9rcHJvYmUob2xkX3ApOworCWlmICgha3Byb2JlX3F1ZXVlZChwKSkgeworCQlhcmNoX2Rpc2FybV9rcHJvYmUocCk7CisJCS8qIElmIGFub3RoZXIga3Byb2JlIHdhcyBibG9ja2VkLCBvcHRpbWl6ZSBpdC4gKi8KKwkJX3AgPSBnZXRfb3B0aW1pemVkX2twcm9iZSgodW5zaWduZWQgbG9uZylwLT5hZGRyKTsKKwkJaWYgKHVubGlrZWx5KF9wKSAmJiByZW9wdCkKKwkJCW9wdGltaXplX2twcm9iZShfcCk7CisJfQorCS8qIFRPRE86IHJlb3B0aW1pemUgb3RoZXJzIGFmdGVyIHVub3B0aW1pemVkIHRoaXMgcHJvYmUgKi8KIH0KIAogI2Vsc2UgLyogIUNPTkZJR19PUFRQUk9CRVMgKi8KIAogI2RlZmluZSBvcHRpbWl6ZV9rcHJvYmUocCkJCQlkbyB7fSB3aGlsZSAoMCkKLSNkZWZpbmUgdW5vcHRpbWl6ZV9rcHJvYmUocCkJCQlkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgdW5vcHRpbWl6ZV9rcHJvYmUocCwgZikJCQlkbyB7fSB3aGlsZSAoMCkKICNkZWZpbmUga2lsbF9vcHRpbWl6ZWRfa3Byb2JlKHApCQlkbyB7fSB3aGlsZSAoMCkKICNkZWZpbmUgcHJlcGFyZV9vcHRpbWl6ZWRfa3Byb2JlKHApCQlkbyB7fSB3aGlsZSAoMCkKICNkZWZpbmUgdHJ5X3RvX29wdGltaXplX2twcm9iZShwKQkJZG8ge30gd2hpbGUgKDApCiAjZGVmaW5lIF9fYXJtX2twcm9iZShwKQkJCQlhcmNoX2FybV9rcHJvYmUocCkKLSNkZWZpbmUgX19kaXNhcm1fa3Byb2JlKHApCQkJYXJjaF9kaXNhcm1fa3Byb2JlKHApCisjZGVmaW5lIF9fZGlzYXJtX2twcm9iZShwLCBvKQkJCWFyY2hfZGlzYXJtX2twcm9iZShwKQorI2RlZmluZSBrcHJvYmVfZGlzYXJtZWQocCkJCQlrcHJvYmVfZGlzYWJsZWQocCkKKyNkZWZpbmUgd2FpdF9mb3Jfa3Byb2JlX29wdGltaXplcigpCQlkbyB7fSB3aGlsZSAoMCkKKworLyogVGhlcmUgc2hvdWxkIGJlIG5vIHVudXNlZCBrcHJvYmVzIGNhbiBiZSByZXVzZWQgd2l0aG91dCBvcHRpbWl6YXRpb24gKi8KK3N0YXRpYyB2b2lkIHJldXNlX3VudXNlZF9rcHJvYmUoc3RydWN0IGtwcm9iZSAqYXApCit7CisJcHJpbnRrKEtFUk5fRVJSICJFcnJvcjogVGhlcmUgc2hvdWxkIGJlIG5vIHVudXNlZCBrcHJvYmUgaGVyZS5cbiIpOworCUJVR19PTihrcHJvYmVfdW51c2VkKGFwKSk7Cit9CiAKIHN0YXRpYyBfX2twcm9iZXMgdm9pZCBmcmVlX2FnZ3Jfa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnApCiB7CisJYXJjaF9yZW1vdmVfa3Byb2JlKHApOwogCWtmcmVlKHApOwogfQogCkBAIC03MzIsMTEgKzkyMywxMCBAQAogLyogRGlzYXJtIGEga3Byb2JlIHdpdGggdGV4dF9tdXRleCAqLwogc3RhdGljIHZvaWQgX19rcHJvYmVzIGRpc2FybV9rcHJvYmUoc3RydWN0IGtwcm9iZSAqa3ApCiB7Ci0JZ2V0X29ubGluZV9jcHVzKCk7CS8qIEZvciBhdm9pZGluZyB0ZXh0X211dGV4IGRlYWRsb2NrICovCisJLyogRGl0dG8gKi8KIAltdXRleF9sb2NrKCZ0ZXh0X211dGV4KTsKLQlfX2Rpc2FybV9rcHJvYmUoa3ApOworCV9fZGlzYXJtX2twcm9iZShrcCwgdHJ1ZSk7CiAJbXV0ZXhfdW5sb2NrKCZ0ZXh0X211dGV4KTsKLQlwdXRfb25saW5lX2NwdXMoKTsKIH0KIAogLyoKQEAgLTc3NSw3ICs5NjUsNyBAQAogc3RhdGljIGludCBfX2twcm9iZXMgYWdncl9mYXVsdF9oYW5kbGVyKHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzLAogCQkJCQlpbnQgdHJhcG5yKQogewotCXN0cnVjdCBrcHJvYmUgKmN1ciA9IF9fZ2V0X2NwdV92YXIoa3Byb2JlX2luc3RhbmNlKTsKKwlzdHJ1Y3Qga3Byb2JlICpjdXIgPSBfX3RoaXNfY3B1X3JlYWQoa3Byb2JlX2luc3RhbmNlKTsKIAogCS8qCiAJICogaWYgd2UgZmF1bHRlZCAiZHVyaW5nIiB0aGUgZXhlY3V0aW9uIG9mIGEgdXNlciBzcGVjaWZpZWQKQEAgLTc5MCw3ICs5ODAsNyBAQAogCiBzdGF0aWMgaW50IF9fa3Byb2JlcyBhZ2dyX2JyZWFrX2hhbmRsZXIoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0Jc3RydWN0IGtwcm9iZSAqY3VyID0gX19nZXRfY3B1X3ZhcihrcHJvYmVfaW5zdGFuY2UpOworCXN0cnVjdCBrcHJvYmUgKmN1ciA9IF9fdGhpc19jcHVfcmVhZChrcHJvYmVfaW5zdGFuY2UpOwogCWludCByZXQgPSAwOwogCiAJaWYgKGN1ciAmJiBjdXItPmJyZWFrX2hhbmRsZXIpIHsKQEAgLTk0Miw3ICsxMTMyLDcgQEAKIAlCVUdfT04oa3Byb2JlX2dvbmUoYXApIHx8IGtwcm9iZV9nb25lKHApKTsKIAogCWlmIChwLT5icmVha19oYW5kbGVyIHx8IHAtPnBvc3RfaGFuZGxlcikKLQkJdW5vcHRpbWl6ZV9rcHJvYmUoYXApOwkvKiBGYWxsIGJhY2sgdG8gbm9ybWFsIGtwcm9iZSAqLworCQl1bm9wdGltaXplX2twcm9iZShhcCwgdHJ1ZSk7CS8qIEZhbGwgYmFjayB0byBub3JtYWwga3Byb2JlICovCiAKIAlpZiAocC0+YnJlYWtfaGFuZGxlcikgewogCQlpZiAoYXAtPmJyZWFrX2hhbmRsZXIpCkBAIC05OTMsMTkgKzExODMsMjEgQEAKICAqIFRoaXMgaXMgdGhlIHNlY29uZCBvciBzdWJzZXF1ZW50IGtwcm9iZSBhdCB0aGUgYWRkcmVzcyAtIGhhbmRsZQogICogdGhlIGludHJpY2FjaWVzCiAgKi8KLXN0YXRpYyBpbnQgX19rcHJvYmVzIHJlZ2lzdGVyX2FnZ3Jfa3Byb2JlKHN0cnVjdCBrcHJvYmUgKm9sZF9wLAorc3RhdGljIGludCBfX2twcm9iZXMgcmVnaXN0ZXJfYWdncl9rcHJvYmUoc3RydWN0IGtwcm9iZSAqb3JpZ19wLAogCQkJCQkgIHN0cnVjdCBrcHJvYmUgKnApCiB7CiAJaW50IHJldCA9IDA7Ci0Jc3RydWN0IGtwcm9iZSAqYXAgPSBvbGRfcDsKKwlzdHJ1Y3Qga3Byb2JlICphcCA9IG9yaWdfcDsKIAotCWlmICgha3Byb2JlX2FnZ3Jwcm9iZShvbGRfcCkpIHsKLQkJLyogSWYgb2xkX3AgaXMgbm90IGFuIGFnZ3Jfa3Byb2JlLCBjcmVhdGUgbmV3IGFnZ3Jfa3Byb2JlLiAqLwotCQlhcCA9IGFsbG9jX2FnZ3Jfa3Byb2JlKG9sZF9wKTsKKwlpZiAoIWtwcm9iZV9hZ2dycHJvYmUob3JpZ19wKSkgeworCQkvKiBJZiBvcmlnX3AgaXMgbm90IGFuIGFnZ3Jfa3Byb2JlLCBjcmVhdGUgbmV3IGFnZ3Jfa3Byb2JlLiAqLworCQlhcCA9IGFsbG9jX2FnZ3Jfa3Byb2JlKG9yaWdfcCk7CiAJCWlmICghYXApCiAJCQlyZXR1cm4gLUVOT01FTTsKLQkJaW5pdF9hZ2dyX2twcm9iZShhcCwgb2xkX3ApOwotCX0KKwkJaW5pdF9hZ2dyX2twcm9iZShhcCwgb3JpZ19wKTsKKwl9IGVsc2UgaWYgKGtwcm9iZV91bnVzZWQoYXApKQorCQkvKiBUaGlzIHByb2JlIGlzIGdvaW5nIHRvIGRpZS4gUmVzY3VlIGl0ICovCisJCXJldXNlX3VudXNlZF9rcHJvYmUoYXApOwogCiAJaWYgKGtwcm9iZV9nb25lKGFwKSkgewogCQkvKgpAQCAtMTAzOSwyMyArMTIzMSw2IEBACiAJcmV0dXJuIGFkZF9uZXdfa3Byb2JlKGFwLCBwKTsKIH0KIAotLyogVHJ5IHRvIGRpc2FibGUgYWdncl9rcHJvYmUsIGFuZCByZXR1cm4gMSBpZiBzdWNjZWVkZWQuKi8KLXN0YXRpYyBpbnQgX19rcHJvYmVzIHRyeV90b19kaXNhYmxlX2FnZ3Jfa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnApCi17Ci0Jc3RydWN0IGtwcm9iZSAqa3A7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShrcCwgJnAtPmxpc3QsIGxpc3QpIHsKLQkJaWYgKCFrcHJvYmVfZGlzYWJsZWQoa3ApKQotCQkJLyoKLQkJCSAqIFRoZXJlIGlzIGFuIGFjdGl2ZSBwcm9iZSBvbiB0aGUgbGlzdC4KLQkJCSAqIFdlIGNhbid0IGRpc2FibGUgYWdncl9rcHJvYmUuCi0JCQkgKi8KLQkJCXJldHVybiAwOwotCX0KLQlwLT5mbGFncyB8PSBLUFJPQkVfRkxBR19ESVNBQkxFRDsKLQlyZXR1cm4gMTsKLX0KLQogc3RhdGljIGludCBfX2twcm9iZXMgaW5fa3Byb2Jlc19mdW5jdGlvbnModW5zaWduZWQgbG9uZyBhZGRyKQogewogCXN0cnVjdCBrcHJvYmVfYmxhY2twb2ludCAqa2I7CkBAIC0xMDk4LDM0ICsxMjczLDMzIEBACiAvKiBDaGVjayBwYXNzZWQga3Byb2JlIGlzIHZhbGlkIGFuZCByZXR1cm4ga3Byb2JlIGluIGtwcm9iZV90YWJsZS4gKi8KIHN0YXRpYyBzdHJ1Y3Qga3Byb2JlICogX19rcHJvYmVzIF9fZ2V0X3ZhbGlkX2twcm9iZShzdHJ1Y3Qga3Byb2JlICpwKQogewotCXN0cnVjdCBrcHJvYmUgKm9sZF9wLCAqbGlzdF9wOworCXN0cnVjdCBrcHJvYmUgKmFwLCAqbGlzdF9wOwogCi0Jb2xkX3AgPSBnZXRfa3Byb2JlKHAtPmFkZHIpOwotCWlmICh1bmxpa2VseSghb2xkX3ApKQorCWFwID0gZ2V0X2twcm9iZShwLT5hZGRyKTsKKwlpZiAodW5saWtlbHkoIWFwKSkKIAkJcmV0dXJuIE5VTEw7CiAKLQlpZiAocCAhPSBvbGRfcCkgewotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShsaXN0X3AsICZvbGRfcC0+bGlzdCwgbGlzdCkKKwlpZiAocCAhPSBhcCkgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShsaXN0X3AsICZhcC0+bGlzdCwgbGlzdCkKIAkJCWlmIChsaXN0X3AgPT0gcCkKIAkJCS8qIGtwcm9iZSBwIGlzIGEgdmFsaWQgcHJvYmUgKi8KIAkJCQlnb3RvIHZhbGlkOwogCQlyZXR1cm4gTlVMTDsKIAl9CiB2YWxpZDoKLQlyZXR1cm4gb2xkX3A7CisJcmV0dXJuIGFwOwogfQogCiAvKiBSZXR1cm4gZXJyb3IgaWYgdGhlIGtwcm9iZSBpcyBiZWluZyByZS1yZWdpc3RlcmVkICovCiBzdGF0aWMgaW5saW5lIGludCBjaGVja19rcHJvYmVfcmVyZWcoc3RydWN0IGtwcm9iZSAqcCkKIHsKIAlpbnQgcmV0ID0gMDsKLQlzdHJ1Y3Qga3Byb2JlICpvbGRfcDsKIAogCW11dGV4X2xvY2soJmtwcm9iZV9tdXRleCk7Ci0Jb2xkX3AgPSBfX2dldF92YWxpZF9rcHJvYmUocCk7Ci0JaWYgKG9sZF9wKQorCWlmIChfX2dldF92YWxpZF9rcHJvYmUocCkpCiAJCXJldCA9IC1FSU5WQUw7CiAJbXV0ZXhfdW5sb2NrKCZrcHJvYmVfbXV0ZXgpOworCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTIyOSw2NyArMTQwMywxMjEgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJlZ2lzdGVyX2twcm9iZSk7CiAKKy8qIENoZWNrIGlmIGFsbCBwcm9iZXMgb24gdGhlIGFnZ3Jwcm9iZSBhcmUgZGlzYWJsZWQgKi8KK3N0YXRpYyBpbnQgX19rcHJvYmVzIGFnZ3Jfa3Byb2JlX2Rpc2FibGVkKHN0cnVjdCBrcHJvYmUgKmFwKQoreworCXN0cnVjdCBrcHJvYmUgKmtwOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoa3AsICZhcC0+bGlzdCwgbGlzdCkKKwkJaWYgKCFrcHJvYmVfZGlzYWJsZWQoa3ApKQorCQkJLyoKKwkJCSAqIFRoZXJlIGlzIGFuIGFjdGl2ZSBwcm9iZSBvbiB0aGUgbGlzdC4KKwkJCSAqIFdlIGNhbid0IGRpc2FibGUgdGhpcyBhcC4KKwkJCSAqLworCQkJcmV0dXJuIDA7CisKKwlyZXR1cm4gMTsKK30KKworLyogRGlzYWJsZSBvbmUga3Byb2JlOiBNYWtlIHN1cmUgY2FsbGVkIHVuZGVyIGtwcm9iZV9tdXRleCBpcyBsb2NrZWQgKi8KK3N0YXRpYyBzdHJ1Y3Qga3Byb2JlICpfX2twcm9iZXMgX19kaXNhYmxlX2twcm9iZShzdHJ1Y3Qga3Byb2JlICpwKQoreworCXN0cnVjdCBrcHJvYmUgKm9yaWdfcDsKKworCS8qIEdldCBhbiBvcmlnaW5hbCBrcHJvYmUgZm9yIHJldHVybiAqLworCW9yaWdfcCA9IF9fZ2V0X3ZhbGlkX2twcm9iZShwKTsKKwlpZiAodW5saWtlbHkob3JpZ19wID09IE5VTEwpKQorCQlyZXR1cm4gTlVMTDsKKworCWlmICgha3Byb2JlX2Rpc2FibGVkKHApKSB7CisJCS8qIERpc2FibGUgcHJvYmUgaWYgaXQgaXMgYSBjaGlsZCBwcm9iZSAqLworCQlpZiAocCAhPSBvcmlnX3ApCisJCQlwLT5mbGFncyB8PSBLUFJPQkVfRkxBR19ESVNBQkxFRDsKKworCQkvKiBUcnkgdG8gZGlzYXJtIGFuZCBkaXNhYmxlIHRoaXMvcGFyZW50IHByb2JlICovCisJCWlmIChwID09IG9yaWdfcCB8fCBhZ2dyX2twcm9iZV9kaXNhYmxlZChvcmlnX3ApKSB7CisJCQlkaXNhcm1fa3Byb2JlKG9yaWdfcCk7CisJCQlvcmlnX3AtPmZsYWdzIHw9IEtQUk9CRV9GTEFHX0RJU0FCTEVEOworCQl9CisJfQorCisJcmV0dXJuIG9yaWdfcDsKK30KKwogLyoKICAqIFVucmVnaXN0ZXIgYSBrcHJvYmUgd2l0aG91dCBhIHNjaGVkdWxlciBzeW5jaHJvbml6YXRpb24uCiAgKi8KIHN0YXRpYyBpbnQgX19rcHJvYmVzIF9fdW5yZWdpc3Rlcl9rcHJvYmVfdG9wKHN0cnVjdCBrcHJvYmUgKnApCiB7Ci0Jc3RydWN0IGtwcm9iZSAqb2xkX3AsICpsaXN0X3A7CisJc3RydWN0IGtwcm9iZSAqYXAsICpsaXN0X3A7CiAKLQlvbGRfcCA9IF9fZ2V0X3ZhbGlkX2twcm9iZShwKTsKLQlpZiAob2xkX3AgPT0gTlVMTCkKKwkvKiBEaXNhYmxlIGtwcm9iZS4gVGhpcyB3aWxsIGRpc2FybSBpdCBpZiBuZWVkZWQuICovCisJYXAgPSBfX2Rpc2FibGVfa3Byb2JlKHApOworCWlmIChhcCA9PSBOVUxMKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChvbGRfcCA9PSBwIHx8Ci0JICAgIChrcHJvYmVfYWdncnByb2JlKG9sZF9wKSAmJgotCSAgICAgbGlzdF9pc19zaW5ndWxhcigmb2xkX3AtPmxpc3QpKSkgeworCWlmIChhcCA9PSBwKQogCQkvKgotCQkgKiBPbmx5IHByb2JlIG9uIHRoZSBoYXNoIGxpc3QuIERpc2FybSBvbmx5IGlmIGtwcm9iZXMgYXJlCi0JCSAqIGVuYWJsZWQgYW5kIG5vdCBnb25lIC0gb3RoZXJ3aXNlLCB0aGUgYnJlYWtwb2ludCB3b3VsZAotCQkgKiBhbHJlYWR5IGhhdmUgYmVlbiByZW1vdmVkLiBXZSBzYXZlIG9uIGZsdXNoaW5nIGljYWNoZS4KKwkJICogVGhpcyBwcm9iZSBpcyBhbiBpbmRlcGVuZGVudChhbmQgbm9uLW9wdGltaXplZCkga3Byb2JlCisJCSAqIChub3QgYW4gYWdncnByb2JlKS4gUmVtb3ZlIGZyb20gdGhlIGhhc2ggbGlzdC4KIAkJICovCi0JCWlmICgha3Byb2Jlc19hbGxfZGlzYXJtZWQgJiYgIWtwcm9iZV9kaXNhYmxlZChvbGRfcCkpCi0JCQlkaXNhcm1fa3Byb2JlKG9sZF9wKTsKLQkJaGxpc3RfZGVsX3JjdSgmb2xkX3AtPmhsaXN0KTsKLQl9IGVsc2UgeworCQlnb3RvIGRpc2FybWVkOworCisJLyogRm9sbG93aW5nIHByb2Nlc3MgZXhwZWN0cyB0aGlzIHByb2JlIGlzIGFuIGFnZ3Jwcm9iZSAqLworCVdBUk5fT04oIWtwcm9iZV9hZ2dycHJvYmUoYXApKTsKKworCWlmIChsaXN0X2lzX3Npbmd1bGFyKCZhcC0+bGlzdCkgJiYga3Byb2JlX2Rpc2FybWVkKGFwKSkKKwkJLyoKKwkJICogIWRpc2FybWVkIGNvdWxkIGJlIGhhcHBlbiBpZiB0aGUgcHJvYmUgaXMgdW5kZXIgZGVsYXllZAorCQkgKiB1bm9wdGltaXppbmcuCisJCSAqLworCQlnb3RvIGRpc2FybWVkOworCWVsc2UgeworCQkvKiBJZiBkaXNhYmxpbmcgcHJvYmUgaGFzIHNwZWNpYWwgaGFuZGxlcnMsIHVwZGF0ZSBhZ2dycHJvYmUgKi8KIAkJaWYgKHAtPmJyZWFrX2hhbmRsZXIgJiYgIWtwcm9iZV9nb25lKHApKQotCQkJb2xkX3AtPmJyZWFrX2hhbmRsZXIgPSBOVUxMOworCQkJYXAtPmJyZWFrX2hhbmRsZXIgPSBOVUxMOwogCQlpZiAocC0+cG9zdF9oYW5kbGVyICYmICFrcHJvYmVfZ29uZShwKSkgewotCQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UobGlzdF9wLCAmb2xkX3AtPmxpc3QsIGxpc3QpIHsKKwkJCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGxpc3RfcCwgJmFwLT5saXN0LCBsaXN0KSB7CiAJCQkJaWYgKChsaXN0X3AgIT0gcCkgJiYgKGxpc3RfcC0+cG9zdF9oYW5kbGVyKSkKIAkJCQkJZ290byBub2NsZWFuOwogCQkJfQotCQkJb2xkX3AtPnBvc3RfaGFuZGxlciA9IE5VTEw7CisJCQlhcC0+cG9zdF9oYW5kbGVyID0gTlVMTDsKIAkJfQogbm9jbGVhbjoKKwkJLyoKKwkJICogUmVtb3ZlIGZyb20gdGhlIGFnZ3Jwcm9iZTogdGhpcyBwYXRoIHdpbGwgZG8gbm90aGluZyBpbgorCQkgKiBfX3VucmVnaXN0ZXJfa3Byb2JlX2JvdHRvbSgpLgorCQkgKi8KIAkJbGlzdF9kZWxfcmN1KCZwLT5saXN0KTsKLQkJaWYgKCFrcHJvYmVfZGlzYWJsZWQob2xkX3ApKSB7Ci0JCQl0cnlfdG9fZGlzYWJsZV9hZ2dyX2twcm9iZShvbGRfcCk7Ci0JCQlpZiAoIWtwcm9iZXNfYWxsX2Rpc2FybWVkKSB7Ci0JCQkJaWYgKGtwcm9iZV9kaXNhYmxlZChvbGRfcCkpCi0JCQkJCWRpc2FybV9rcHJvYmUob2xkX3ApOwotCQkJCWVsc2UKLQkJCQkJLyogVHJ5IHRvIG9wdGltaXplIHRoaXMgcHJvYmUgYWdhaW4gKi8KLQkJCQkJb3B0aW1pemVfa3Byb2JlKG9sZF9wKTsKLQkJCX0KLQkJfQorCQlpZiAoIWtwcm9iZV9kaXNhYmxlZChhcCkgJiYgIWtwcm9iZXNfYWxsX2Rpc2FybWVkKQorCQkJLyoKKwkJCSAqIFRyeSB0byBvcHRpbWl6ZSB0aGlzIHByb2JlIGFnYWluLCBiZWNhdXNlIHBvc3QKKwkJCSAqIGhhbmRsZXIgbWF5IGhhdmUgYmVlbiBjaGFuZ2VkLgorCQkJICovCisJCQlvcHRpbWl6ZV9rcHJvYmUoYXApOwogCX0KIAlyZXR1cm4gMDsKKworZGlzYXJtZWQ6CisJQlVHX09OKCFrcHJvYmVfZGlzYXJtZWQoYXApKTsKKwlobGlzdF9kZWxfcmN1KCZhcC0+aGxpc3QpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBfX2twcm9iZXMgX191bnJlZ2lzdGVyX2twcm9iZV9ib3R0b20oc3RydWN0IGtwcm9iZSAqcCkKIHsKLQlzdHJ1Y3Qga3Byb2JlICpvbGRfcDsKKwlzdHJ1Y3Qga3Byb2JlICphcDsKIAogCWlmIChsaXN0X2VtcHR5KCZwLT5saXN0KSkKKwkJLyogVGhpcyBpcyBhbiBpbmRlcGVuZGVudCBrcHJvYmUgKi8KIAkJYXJjaF9yZW1vdmVfa3Byb2JlKHApOwogCWVsc2UgaWYgKGxpc3RfaXNfc2luZ3VsYXIoJnAtPmxpc3QpKSB7Ci0JCS8qICJwIiBpcyB0aGUgbGFzdCBjaGlsZCBvZiBhbiBhZ2dyX2twcm9iZSAqLwotCQlvbGRfcCA9IGxpc3RfZW50cnkocC0+bGlzdC5uZXh0LCBzdHJ1Y3Qga3Byb2JlLCBsaXN0KTsKKwkJLyogVGhpcyBpcyB0aGUgbGFzdCBjaGlsZCBvZiBhbiBhZ2dycHJvYmUgKi8KKwkJYXAgPSBsaXN0X2VudHJ5KHAtPmxpc3QubmV4dCwgc3RydWN0IGtwcm9iZSwgbGlzdCk7CiAJCWxpc3RfZGVsKCZwLT5saXN0KTsKLQkJYXJjaF9yZW1vdmVfa3Byb2JlKG9sZF9wKTsKLQkJZnJlZV9hZ2dyX2twcm9iZShvbGRfcCk7CisJCWZyZWVfYWdncl9rcHJvYmUoYXApOwogCX0KKwkvKiBPdGhlcndpc2UsIGRvIG5vdGhpbmcuICovCiB9CiAKIGludCBfX2twcm9iZXMgcmVnaXN0ZXJfa3Byb2JlcyhzdHJ1Y3Qga3Byb2JlICoqa3BzLCBpbnQgbnVtKQpAQCAtMTYwNywyOSArMTgzNSwxMyBAQAogaW50IF9fa3Byb2JlcyBkaXNhYmxlX2twcm9iZShzdHJ1Y3Qga3Byb2JlICprcCkKIHsKIAlpbnQgcmV0ID0gMDsKLQlzdHJ1Y3Qga3Byb2JlICpwOwogCiAJbXV0ZXhfbG9jaygma3Byb2JlX211dGV4KTsKIAotCS8qIENoZWNrIHdoZXRoZXIgc3BlY2lmaWVkIHByb2JlIGlzIHZhbGlkLiAqLwotCXAgPSBfX2dldF92YWxpZF9rcHJvYmUoa3ApOwotCWlmICh1bmxpa2VseShwID09IE5VTEwpKSB7CisJLyogRGlzYWJsZSB0aGlzIGtwcm9iZSAqLworCWlmIChfX2Rpc2FibGVfa3Byb2JlKGtwKSA9PSBOVUxMKQogCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIG91dDsKLQl9CiAKLQkvKiBJZiB0aGUgcHJvYmUgaXMgYWxyZWFkeSBkaXNhYmxlZCAob3IgZ29uZSksIGp1c3QgcmV0dXJuICovCi0JaWYgKGtwcm9iZV9kaXNhYmxlZChrcCkpCi0JCWdvdG8gb3V0OwotCi0Ja3AtPmZsYWdzIHw9IEtQUk9CRV9GTEFHX0RJU0FCTEVEOwotCWlmIChwICE9IGtwKQotCQkvKiBXaGVuIGtwICE9IHAsIHAgaXMgYWx3YXlzIGVuYWJsZWQuICovCi0JCXRyeV90b19kaXNhYmxlX2FnZ3Jfa3Byb2JlKHApOwotCi0JaWYgKCFrcHJvYmVzX2FsbF9kaXNhcm1lZCAmJiBrcHJvYmVfZGlzYWJsZWQocCkpCi0JCWRpc2FybV9rcHJvYmUocCk7Ci1vdXQ6CiAJbXV0ZXhfdW5sb2NrKCZrcHJvYmVfbXV0ZXgpOwogCXJldHVybiByZXQ7CiB9CkBAIC0xOTI3LDM2ICsyMTM5LDI3IEBACiAJbXV0ZXhfbG9jaygma3Byb2JlX211dGV4KTsKIAogCS8qIElmIGtwcm9iZXMgYXJlIGFscmVhZHkgZGlzYXJtZWQsIGp1c3QgcmV0dXJuICovCi0JaWYgKGtwcm9iZXNfYWxsX2Rpc2FybWVkKQotCQlnb3RvIGFscmVhZHlfZGlzYWJsZWQ7CisJaWYgKGtwcm9iZXNfYWxsX2Rpc2FybWVkKSB7CisJCW11dGV4X3VubG9jaygma3Byb2JlX211dGV4KTsKKwkJcmV0dXJuOworCX0KIAogCWtwcm9iZXNfYWxsX2Rpc2FybWVkID0gdHJ1ZTsKIAlwcmludGsoS0VSTl9JTkZPICJLcHJvYmVzIGdsb2JhbGx5IGRpc2FibGVkXG4iKTsKIAotCS8qCi0JICogSGVyZSB3ZSBjYWxsIGdldF9vbmxpbmVfY3B1cygpIGZvciBhdm9pZGluZyB0ZXh0X211dGV4IGRlYWRsb2NrLAotCSAqIGJlY2F1c2UgZGlzYXJtaW5nIG1heSBhbHNvIHVub3B0aW1pemUga3Byb2Jlcy4KLQkgKi8KLQlnZXRfb25saW5lX2NwdXMoKTsKIAltdXRleF9sb2NrKCZ0ZXh0X211dGV4KTsKIAlmb3IgKGkgPSAwOyBpIDwgS1BST0JFX1RBQkxFX1NJWkU7IGkrKykgewogCQloZWFkID0gJmtwcm9iZV90YWJsZVtpXTsKIAkJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHAsIG5vZGUsIGhlYWQsIGhsaXN0KSB7CiAJCQlpZiAoIWFyY2hfdHJhbXBvbGluZV9rcHJvYmUocCkgJiYgIWtwcm9iZV9kaXNhYmxlZChwKSkKLQkJCQlfX2Rpc2FybV9rcHJvYmUocCk7CisJCQkJX19kaXNhcm1fa3Byb2JlKHAsIGZhbHNlKTsKIAkJfQogCX0KLQogCW11dGV4X3VubG9jaygmdGV4dF9tdXRleCk7Ci0JcHV0X29ubGluZV9jcHVzKCk7CiAJbXV0ZXhfdW5sb2NrKCZrcHJvYmVfbXV0ZXgpOwotCS8qIEFsbG93IGFsbCBjdXJyZW50bHkgcnVubmluZyBrcHJvYmVzIHRvIGNvbXBsZXRlICovCi0Jc3luY2hyb25pemVfc2NoZWQoKTsKLQlyZXR1cm47CiAKLWFscmVhZHlfZGlzYWJsZWQ6Ci0JbXV0ZXhfdW5sb2NrKCZrcHJvYmVfbXV0ZXgpOwotCXJldHVybjsKKwkvKiBXYWl0IGZvciBkaXNhcm1pbmcgYWxsIGtwcm9iZXMgYnkgb3B0aW1pemVyICovCisJd2FpdF9mb3Jfa3Byb2JlX29wdGltaXplcigpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEva2VybmVsL2t0aHJlYWQuYyBiL2tlcm5lbC9rdGhyZWFkLmMKaW5kZXggY2E2MWJiZC4uYzU1YWZiYSAxMDA2NDQKLS0tIGEva2VybmVsL2t0aHJlYWQuYworKysgYi9rZXJuZWwva3RocmVhZC5jCkBAIC0xNDgsNyArMTQ4LDcgQEAKIAl3YWl0X2Zvcl9jb21wbGV0aW9uKCZjcmVhdGUuZG9uZSk7CiAKIAlpZiAoIUlTX0VSUihjcmVhdGUucmVzdWx0KSkgewotCQlzdHJ1Y3Qgc2NoZWRfcGFyYW0gcGFyYW0gPSB7IC5zY2hlZF9wcmlvcml0eSA9IDAgfTsKKwkJc3RhdGljIGNvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSBwYXJhbSA9IHsgLnNjaGVkX3ByaW9yaXR5ID0gMCB9OwogCQl2YV9saXN0IGFyZ3M7CiAKIAkJdmFfc3RhcnQoYXJncywgbmFtZWZtdCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvbG9ja2RlcF9wcm9jLmMgYi9rZXJuZWwvbG9ja2RlcF9wcm9jLmMKaW5kZXggNTliNzZjOC4uMTk2OWQyZiAxMDA2NDQKLS0tIGEva2VybmVsL2xvY2tkZXBfcHJvYy5jCisrKyBiL2tlcm5lbC9sb2NrZGVwX3Byb2MuYwpAQCAtNDk0LDcgKzQ5NCw2IEBACiAJCW5hbWVsZW4gKz0gMjsKIAogCWZvciAoaSA9IDA7IGkgPCBMT0NLU1RBVF9QT0lOVFM7IGkrKykgewotCQljaGFyIHN5bVtLU1lNX1NZTUJPTF9MRU5dOwogCQljaGFyIGlwWzMyXTsKIAogCQlpZiAoY2xhc3MtPmNvbnRlbnRpb25fcG9pbnRbaV0gPT0gMCkKQEAgLTUwMywxNSArNTAyLDEzIEBACiAJCWlmICghaSkKIAkJCXNlcV9saW5lKG0sICctJywgNDAtbmFtZWxlbiwgbmFtZWxlbik7CiAKLQkJc3ByaW50X3N5bWJvbChzeW0sIGNsYXNzLT5jb250ZW50aW9uX3BvaW50W2ldKTsKIAkJc25wcmludGYoaXAsIHNpemVvZihpcCksICJbPCVwPl0iLAogCQkJCSh2b2lkICopY2xhc3MtPmNvbnRlbnRpb25fcG9pbnRbaV0pOwotCQlzZXFfcHJpbnRmKG0sICIlNDBzICUxNGx1ICUyOXMgJXNcbiIsIG5hbWUsCi0JCQkJc3RhdHMtPmNvbnRlbnRpb25fcG9pbnRbaV0sCi0JCQkJaXAsIHN5bSk7CisJCXNlcV9wcmludGYobSwgIiU0MHMgJTE0bHUgJTI5cyAlcFNcbiIsCisJCQkgICBuYW1lLCBzdGF0cy0+Y29udGVudGlvbl9wb2ludFtpXSwKKwkJCSAgIGlwLCAodm9pZCAqKWNsYXNzLT5jb250ZW50aW9uX3BvaW50W2ldKTsKIAl9CiAJZm9yIChpID0gMDsgaSA8IExPQ0tTVEFUX1BPSU5UUzsgaSsrKSB7Ci0JCWNoYXIgc3ltW0tTWU1fU1lNQk9MX0xFTl07CiAJCWNoYXIgaXBbMzJdOwogCiAJCWlmIChjbGFzcy0+Y29udGVuZGluZ19wb2ludFtpXSA9PSAwKQpAQCAtNTIwLDEyICs1MTcsMTEgQEAKIAkJaWYgKCFpKQogCQkJc2VxX2xpbmUobSwgJy0nLCA0MC1uYW1lbGVuLCBuYW1lbGVuKTsKIAotCQlzcHJpbnRfc3ltYm9sKHN5bSwgY2xhc3MtPmNvbnRlbmRpbmdfcG9pbnRbaV0pOwogCQlzbnByaW50ZihpcCwgc2l6ZW9mKGlwKSwgIls8JXA+XSIsCiAJCQkJKHZvaWQgKiljbGFzcy0+Y29udGVuZGluZ19wb2ludFtpXSk7Ci0JCXNlcV9wcmludGYobSwgIiU0MHMgJTE0bHUgJTI5cyAlc1xuIiwgbmFtZSwKLQkJCQlzdGF0cy0+Y29udGVuZGluZ19wb2ludFtpXSwKLQkJCQlpcCwgc3ltKTsKKwkJc2VxX3ByaW50ZihtLCAiJTQwcyAlMTRsdSAlMjlzICVwU1xuIiwKKwkJCSAgIG5hbWUsIHN0YXRzLT5jb250ZW5kaW5nX3BvaW50W2ldLAorCQkJICAgaXAsICh2b2lkICopY2xhc3MtPmNvbnRlbmRpbmdfcG9pbnRbaV0pOwogCX0KIAlpZiAoaSkgewogCQlzZXFfcHV0cyhtLCAiXG4iKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9tb2R1bGUuYyBiL2tlcm5lbC9tb2R1bGUuYwppbmRleCBkMTkwNjY0Li4zNGUwMGI3IDEwMDY0NAotLS0gYS9rZXJuZWwvbW9kdWxlLmMKKysrIGIva2VybmVsL21vZHVsZS5jCkBAIC01Niw2ICs1Niw3IEBACiAjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgva21lbWxlYWsuaD4KICNpbmNsdWRlIDxsaW51eC9qdW1wX2xhYmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGZuLmg+CiAKICNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UUwogI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9tb2R1bGUuaD4KQEAgLTcwLDYgKzcxLDI2IEBACiAjZGVmaW5lIEFSQ0hfU0hGX1NNQUxMIDAKICNlbmRpZgogCisvKgorICogTW9kdWxlcycgc2VjdGlvbnMgd2lsbCBiZSBhbGlnbmVkIG9uIHBhZ2UgYm91bmRhcmllcworICogdG8gZW5zdXJlIGNvbXBsZXRlIHNlcGFyYXRpb24gb2YgY29kZSBhbmQgZGF0YSwgYnV0CisgKiBvbmx5IHdoZW4gQ09ORklHX0RFQlVHX1NFVF9NT0RVTEVfUk9OWD15CisgKi8KKyNpZmRlZiBDT05GSUdfREVCVUdfU0VUX01PRFVMRV9ST05YCisjIGRlZmluZSBkZWJ1Z19hbGlnbihYKSBBTElHTihYLCBQQUdFX1NJWkUpCisjZWxzZQorIyBkZWZpbmUgZGVidWdfYWxpZ24oWCkgKFgpCisjZW5kaWYKKworLyoKKyAqIEdpdmVuIEJBU0UgYW5kIFNJWkUgdGhpcyBtYWNybyBjYWxjdWxhdGVzIHRoZSBudW1iZXIgb2YgcGFnZXMgdGhlCisgKiBtZW1vcnkgcmVnaW9ucyBvY2N1cGllcworICovCisjZGVmaW5lIE1PRF9OVU1CRVJfT0ZfUEFHRVMoQkFTRSwgU0laRSkgKCgoU0laRSkgPiAwKSA/CQlcCisJCShQRk5fRE9XTigodW5zaWduZWQgbG9uZykoQkFTRSkgKyAoU0laRSkgLSAxKSAtCVwKKwkJCSBQRk5fRE9XTigodW5zaWduZWQgbG9uZylCQVNFKSArIDEpCVwKKwkJOiAoMFVMKSkKKwogLyogSWYgdGhpcyBpcyBzZXQsIHRoZSBzZWN0aW9uIGJlbG9uZ3MgaW4gdGhlIGluaXQgcGFydCBvZiB0aGUgbW9kdWxlICovCiAjZGVmaW5lIElOSVRfT0ZGU0VUX01BU0sgKDFVTCA8PCAoQklUU19QRVJfTE9ORy0xKSkKIApAQCAtMTU0Miw2ICsxNTYzLDExNSBAQAogCXJldHVybiAwOwogfQogCisjaWZkZWYgQ09ORklHX0RFQlVHX1NFVF9NT0RVTEVfUk9OWAorLyoKKyAqIExLTSBSTy9OWCBwcm90ZWN0aW9uOiBwcm90ZWN0IG1vZHVsZSdzIHRleHQvcm8tZGF0YQorICogZnJvbSBtb2RpZmljYXRpb24gYW5kIGFueSBkYXRhIGZyb20gZXhlY3V0aW9uLgorICovCit2b2lkIHNldF9wYWdlX2F0dHJpYnV0ZXModm9pZCAqc3RhcnQsIHZvaWQgKmVuZCwgaW50ICgqc2V0KSh1bnNpZ25lZCBsb25nIHN0YXJ0LCBpbnQgbnVtX3BhZ2VzKSkKK3sKKwl1bnNpZ25lZCBsb25nIGJlZ2luX3BmbiA9IFBGTl9ET1dOKCh1bnNpZ25lZCBsb25nKXN0YXJ0KTsKKwl1bnNpZ25lZCBsb25nIGVuZF9wZm4gPSBQRk5fRE9XTigodW5zaWduZWQgbG9uZyllbmQpOworCisJaWYgKGVuZF9wZm4gPiBiZWdpbl9wZm4pCisJCXNldChiZWdpbl9wZm4gPDwgUEFHRV9TSElGVCwgZW5kX3BmbiAtIGJlZ2luX3Bmbik7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9zZWN0aW9uX3JvX254KHZvaWQgKmJhc2UsCisJCQl1bnNpZ25lZCBsb25nIHRleHRfc2l6ZSwKKwkJCXVuc2lnbmVkIGxvbmcgcm9fc2l6ZSwKKwkJCXVuc2lnbmVkIGxvbmcgdG90YWxfc2l6ZSkKK3sKKwkvKiBiZWdpbiBhbmQgZW5kIFBGTnMgb2YgdGhlIGN1cnJlbnQgc3Vic2VjdGlvbiAqLworCXVuc2lnbmVkIGxvbmcgYmVnaW5fcGZuOworCXVuc2lnbmVkIGxvbmcgZW5kX3BmbjsKKworCS8qCisJICogU2V0IFJPIGZvciBtb2R1bGUgdGV4dCBhbmQgUk8tZGF0YToKKwkgKiAtIEFsd2F5cyBwcm90ZWN0IGZpcnN0IHBhZ2UuCisJICogLSBEbyBub3QgcHJvdGVjdCBsYXN0IHBhcnRpYWwgcGFnZS4KKwkgKi8KKwlpZiAocm9fc2l6ZSA+IDApCisJCXNldF9wYWdlX2F0dHJpYnV0ZXMoYmFzZSwgYmFzZSArIHJvX3NpemUsIHNldF9tZW1vcnlfcm8pOworCisJLyoKKwkgKiBTZXQgTlggcGVybWlzc2lvbnMgZm9yIG1vZHVsZSBkYXRhOgorCSAqIC0gRG8gbm90IHByb3RlY3QgZmlyc3QgcGFydGlhbCBwYWdlLgorCSAqIC0gQWx3YXlzIHByb3RlY3QgbGFzdCBwYWdlLgorCSAqLworCWlmICh0b3RhbF9zaXplID4gdGV4dF9zaXplKSB7CisJCWJlZ2luX3BmbiA9IFBGTl9VUCgodW5zaWduZWQgbG9uZyliYXNlICsgdGV4dF9zaXplKTsKKwkJZW5kX3BmbiA9IFBGTl9VUCgodW5zaWduZWQgbG9uZyliYXNlICsgdG90YWxfc2l6ZSk7CisJCWlmIChlbmRfcGZuID4gYmVnaW5fcGZuKQorCQkJc2V0X21lbW9yeV9ueChiZWdpbl9wZm4gPDwgUEFHRV9TSElGVCwgZW5kX3BmbiAtIGJlZ2luX3Bmbik7CisJfQorfQorCisvKiBTZXR0aW5nIG1lbW9yeSBiYWNrIHRvIFJXK05YIGJlZm9yZSByZWxlYXNpbmcgaXQgKi8KK3ZvaWQgdW5zZXRfc2VjdGlvbl9yb19ueChzdHJ1Y3QgbW9kdWxlICptb2QsIHZvaWQgKm1vZHVsZV9yZWdpb24pCit7CisJdW5zaWduZWQgbG9uZyB0b3RhbF9wYWdlczsKKworCWlmIChtb2QtPm1vZHVsZV9jb3JlID09IG1vZHVsZV9yZWdpb24pIHsKKwkJLyogU2V0IGNvcmUgYXMgTlgrUlcgKi8KKwkJdG90YWxfcGFnZXMgPSBNT0RfTlVNQkVSX09GX1BBR0VTKG1vZC0+bW9kdWxlX2NvcmUsIG1vZC0+Y29yZV9zaXplKTsKKwkJc2V0X21lbW9yeV9ueCgodW5zaWduZWQgbG9uZyltb2QtPm1vZHVsZV9jb3JlLCB0b3RhbF9wYWdlcyk7CisJCXNldF9tZW1vcnlfcncoKHVuc2lnbmVkIGxvbmcpbW9kLT5tb2R1bGVfY29yZSwgdG90YWxfcGFnZXMpOworCisJfSBlbHNlIGlmIChtb2QtPm1vZHVsZV9pbml0ID09IG1vZHVsZV9yZWdpb24pIHsKKwkJLyogU2V0IGluaXQgYXMgTlgrUlcgKi8KKwkJdG90YWxfcGFnZXMgPSBNT0RfTlVNQkVSX09GX1BBR0VTKG1vZC0+bW9kdWxlX2luaXQsIG1vZC0+aW5pdF9zaXplKTsKKwkJc2V0X21lbW9yeV9ueCgodW5zaWduZWQgbG9uZyltb2QtPm1vZHVsZV9pbml0LCB0b3RhbF9wYWdlcyk7CisJCXNldF9tZW1vcnlfcncoKHVuc2lnbmVkIGxvbmcpbW9kLT5tb2R1bGVfaW5pdCwgdG90YWxfcGFnZXMpOworCX0KK30KKworLyogSXRlcmF0ZSB0aHJvdWdoIGFsbCBtb2R1bGVzIGFuZCBzZXQgZWFjaCBtb2R1bGUncyB0ZXh0IGFzIFJXICovCit2b2lkIHNldF9hbGxfbW9kdWxlc190ZXh0X3J3KCkKK3sKKwlzdHJ1Y3QgbW9kdWxlICptb2Q7CisKKwltdXRleF9sb2NrKCZtb2R1bGVfbXV0ZXgpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KG1vZCwgJm1vZHVsZXMsIGxpc3QpIHsKKwkJaWYgKChtb2QtPm1vZHVsZV9jb3JlKSAmJiAobW9kLT5jb3JlX3RleHRfc2l6ZSkpIHsKKwkJCXNldF9wYWdlX2F0dHJpYnV0ZXMobW9kLT5tb2R1bGVfY29yZSwKKwkJCQkJCW1vZC0+bW9kdWxlX2NvcmUgKyBtb2QtPmNvcmVfdGV4dF9zaXplLAorCQkJCQkJc2V0X21lbW9yeV9ydyk7CisJCX0KKwkJaWYgKChtb2QtPm1vZHVsZV9pbml0KSAmJiAobW9kLT5pbml0X3RleHRfc2l6ZSkpIHsKKwkJCXNldF9wYWdlX2F0dHJpYnV0ZXMobW9kLT5tb2R1bGVfaW5pdCwKKwkJCQkJCW1vZC0+bW9kdWxlX2luaXQgKyBtb2QtPmluaXRfdGV4dF9zaXplLAorCQkJCQkJc2V0X21lbW9yeV9ydyk7CisJCX0KKwl9CisJbXV0ZXhfdW5sb2NrKCZtb2R1bGVfbXV0ZXgpOworfQorCisvKiBJdGVyYXRlIHRocm91Z2ggYWxsIG1vZHVsZXMgYW5kIHNldCBlYWNoIG1vZHVsZSdzIHRleHQgYXMgUk8gKi8KK3ZvaWQgc2V0X2FsbF9tb2R1bGVzX3RleHRfcm8oKQoreworCXN0cnVjdCBtb2R1bGUgKm1vZDsKKworCW11dGV4X2xvY2soJm1vZHVsZV9tdXRleCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UobW9kLCAmbW9kdWxlcywgbGlzdCkgeworCQlpZiAoKG1vZC0+bW9kdWxlX2NvcmUpICYmIChtb2QtPmNvcmVfdGV4dF9zaXplKSkgeworCQkJc2V0X3BhZ2VfYXR0cmlidXRlcyhtb2QtPm1vZHVsZV9jb3JlLAorCQkJCQkJbW9kLT5tb2R1bGVfY29yZSArIG1vZC0+Y29yZV90ZXh0X3NpemUsCisJCQkJCQlzZXRfbWVtb3J5X3JvKTsKKwkJfQorCQlpZiAoKG1vZC0+bW9kdWxlX2luaXQpICYmIChtb2QtPmluaXRfdGV4dF9zaXplKSkgeworCQkJc2V0X3BhZ2VfYXR0cmlidXRlcyhtb2QtPm1vZHVsZV9pbml0LAorCQkJCQkJbW9kLT5tb2R1bGVfaW5pdCArIG1vZC0+aW5pdF90ZXh0X3NpemUsCisJCQkJCQlzZXRfbWVtb3J5X3JvKTsKKwkJfQorCX0KKwltdXRleF91bmxvY2soJm1vZHVsZV9tdXRleCk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHNldF9zZWN0aW9uX3JvX254KHZvaWQgKmJhc2UsIHVuc2lnbmVkIGxvbmcgdGV4dF9zaXplLCB1bnNpZ25lZCBsb25nIHJvX3NpemUsIHVuc2lnbmVkIGxvbmcgdG90YWxfc2l6ZSkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgdW5zZXRfc2VjdGlvbl9yb19ueChzdHJ1Y3QgbW9kdWxlICptb2QsIHZvaWQgKm1vZHVsZV9yZWdpb24pIHsgfQorI2VuZGlmCisKIC8qIEZyZWUgYSBtb2R1bGUsIHJlbW92ZSBmcm9tIGxpc3RzLCBldGMuICovCiBzdGF0aWMgdm9pZCBmcmVlX21vZHVsZShzdHJ1Y3QgbW9kdWxlICptb2QpCiB7CkBAIC0xNTY2LDYgKzE2OTYsNyBAQAogCWRlc3Ryb3lfcGFyYW1zKG1vZC0+a3AsIG1vZC0+bnVtX2twKTsKIAogCS8qIFRoaXMgbWF5IGJlIE5VTEwsIGJ1dCB0aGF0J3MgT0sgKi8KKwl1bnNldF9zZWN0aW9uX3JvX254KG1vZCwgbW9kLT5tb2R1bGVfaW5pdCk7CiAJbW9kdWxlX2ZyZWUobW9kLCBtb2QtPm1vZHVsZV9pbml0KTsKIAlrZnJlZShtb2QtPmFyZ3MpOwogCXBlcmNwdV9tb2RmcmVlKG1vZCk7CkBAIC0xNTc0LDYgKzE3MDUsNyBAQAogCWxvY2tkZXBfZnJlZV9rZXlfcmFuZ2UobW9kLT5tb2R1bGVfY29yZSwgbW9kLT5jb3JlX3NpemUpOwogCiAJLyogRmluYWxseSwgZnJlZSB0aGUgY29yZSAoY29udGFpbmluZyB0aGUgbW9kdWxlIHN0cnVjdHVyZSkgKi8KKwl1bnNldF9zZWN0aW9uX3JvX254KG1vZCwgbW9kLT5tb2R1bGVfY29yZSk7CiAJbW9kdWxlX2ZyZWUobW9kLCBtb2QtPm1vZHVsZV9jb3JlKTsKIAogI2lmZGVmIENPTkZJR19NUFUKQEAgLTE3NzcsOCArMTkwOSwxOSBAQAogCQkJcy0+c2hfZW50c2l6ZSA9IGdldF9vZmZzZXQobW9kLCAmbW9kLT5jb3JlX3NpemUsIHMsIGkpOwogCQkJREVCVUdQKCJcdCVzXG4iLCBuYW1lKTsKIAkJfQotCQlpZiAobSA9PSAwKQorCQlzd2l0Y2ggKG0pIHsKKwkJY2FzZSAwOiAvKiBleGVjdXRhYmxlICovCisJCQltb2QtPmNvcmVfc2l6ZSA9IGRlYnVnX2FsaWduKG1vZC0+Y29yZV9zaXplKTsKIAkJCW1vZC0+Y29yZV90ZXh0X3NpemUgPSBtb2QtPmNvcmVfc2l6ZTsKKwkJCWJyZWFrOworCQljYXNlIDE6IC8qIFJPOiB0ZXh0IGFuZCByby1kYXRhICovCisJCQltb2QtPmNvcmVfc2l6ZSA9IGRlYnVnX2FsaWduKG1vZC0+Y29yZV9zaXplKTsKKwkJCW1vZC0+Y29yZV9yb19zaXplID0gbW9kLT5jb3JlX3NpemU7CisJCQlicmVhazsKKwkJY2FzZSAzOiAvKiB3aG9sZSBjb3JlICovCisJCQltb2QtPmNvcmVfc2l6ZSA9IGRlYnVnX2FsaWduKG1vZC0+Y29yZV9zaXplKTsKKwkJCWJyZWFrOworCQl9CiAJfQogCiAJREVCVUdQKCJJbml0IHNlY3Rpb24gYWxsb2NhdGlvbiBvcmRlcjpcbiIpOwpAQCAtMTc5Niw4ICsxOTM5LDE5IEBACiAJCQkJCSB8IElOSVRfT0ZGU0VUX01BU0spOwogCQkJREVCVUdQKCJcdCVzXG4iLCBzbmFtZSk7CiAJCX0KLQkJaWYgKG0gPT0gMCkKKwkJc3dpdGNoIChtKSB7CisJCWNhc2UgMDogLyogZXhlY3V0YWJsZSAqLworCQkJbW9kLT5pbml0X3NpemUgPSBkZWJ1Z19hbGlnbihtb2QtPmluaXRfc2l6ZSk7CiAJCQltb2QtPmluaXRfdGV4dF9zaXplID0gbW9kLT5pbml0X3NpemU7CisJCQlicmVhazsKKwkJY2FzZSAxOiAvKiBSTzogdGV4dCBhbmQgcm8tZGF0YSAqLworCQkJbW9kLT5pbml0X3NpemUgPSBkZWJ1Z19hbGlnbihtb2QtPmluaXRfc2l6ZSk7CisJCQltb2QtPmluaXRfcm9fc2l6ZSA9IG1vZC0+aW5pdF9zaXplOworCQkJYnJlYWs7CisJCWNhc2UgMzogLyogd2hvbGUgaW5pdCAqLworCQkJbW9kLT5pbml0X3NpemUgPSBkZWJ1Z19hbGlnbihtb2QtPmluaXRfc2l6ZSk7CisJCQlicmVhazsKKwkJfQogCX0KIH0KIApAQCAtMjcyMiw2ICsyODc2LDE4IEBACiAJYmxvY2tpbmdfbm90aWZpZXJfY2FsbF9jaGFpbigmbW9kdWxlX25vdGlmeV9saXN0LAogCQkJTU9EVUxFX1NUQVRFX0NPTUlORywgbW9kKTsKIAorCS8qIFNldCBSTyBhbmQgTlggcmVnaW9ucyBmb3IgY29yZSAqLworCXNldF9zZWN0aW9uX3JvX254KG1vZC0+bW9kdWxlX2NvcmUsCisJCQkJbW9kLT5jb3JlX3RleHRfc2l6ZSwKKwkJCQltb2QtPmNvcmVfcm9fc2l6ZSwKKwkJCQltb2QtPmNvcmVfc2l6ZSk7CisKKwkvKiBTZXQgUk8gYW5kIE5YIHJlZ2lvbnMgZm9yIGluaXQgKi8KKwlzZXRfc2VjdGlvbl9yb19ueChtb2QtPm1vZHVsZV9pbml0LAorCQkJCW1vZC0+aW5pdF90ZXh0X3NpemUsCisJCQkJbW9kLT5pbml0X3JvX3NpemUsCisJCQkJbW9kLT5pbml0X3NpemUpOworCiAJZG9fbW9kX2N0b3JzKG1vZCk7CiAJLyogU3RhcnQgdGhlIG1vZHVsZSAqLwogCWlmIChtb2QtPmluaXQgIT0gTlVMTCkKQEAgLTI3NjUsNiArMjkzMSw3IEBACiAJbW9kLT5zeW10YWIgPSBtb2QtPmNvcmVfc3ltdGFiOwogCW1vZC0+c3RydGFiID0gbW9kLT5jb3JlX3N0cnRhYjsKICNlbmRpZgorCXVuc2V0X3NlY3Rpb25fcm9fbngobW9kLCBtb2QtPm1vZHVsZV9pbml0KTsKIAltb2R1bGVfZnJlZShtb2QsIG1vZC0+bW9kdWxlX2luaXQpOwogCW1vZC0+bW9kdWxlX2luaXQgPSBOVUxMOwogCW1vZC0+aW5pdF9zaXplID0gMDsKZGlmZiAtLWdpdCBhL2tlcm5lbC9tdXRleC5jIGIva2VybmVsL211dGV4LmMKaW5kZXggMjAwNDA3Yy4uYTU4ODlmYiAxMDA2NDQKLS0tIGEva2VybmVsL211dGV4LmMKKysrIGIva2VybmVsL211dGV4LmMKQEAgLTE5OSw3ICsxOTksNyBAQAogCQkgKiBtZW1vcnkgYmFycmllcnMgYXMgd2UnbGwgZXZlbnR1YWxseSBvYnNlcnZlIHRoZSByaWdodAogCQkgKiB2YWx1ZXMgYXQgdGhlIGNvc3Qgb2YgYSBmZXcgZXh0cmEgc3BpbnMuCiAJCSAqLwotCQljcHVfcmVsYXgoKTsKKwkJYXJjaF9tdXRleF9jcHVfcmVsYXgoKTsKIAl9CiAjZW5kaWYKIAlzcGluX2xvY2tfbXV0ZXgoJmxvY2stPndhaXRfbG9jaywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3BlcmZfZXZlbnQuYyBiL2tlcm5lbC9wZXJmX2V2ZW50LmMKaW5kZXggMjg3MGZlZS4uMTE4NDdiZiAxMDA2NDQKLS0tIGEva2VybmVsL3BlcmZfZXZlbnQuYworKysgYi9rZXJuZWwvcGVyZl9ldmVudC5jCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKyNpbmNsdWRlIDxsaW51eC9pZHIuaD4KICNpbmNsdWRlIDxsaW51eC9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KQEAgLTIxLDcgKzIyLDkgQEAKICNpbmNsdWRlIDxsaW51eC9kY2FjaGUuaD4KICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KICNpbmNsdWRlIDxsaW51eC92bXN0YXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPgogI2luY2x1ZGUgPGxpbnV4L3JjdWxpc3QuaD4KQEAgLTEzMyw2ICsxMzYsMjggQEAKIAl9CiB9CiAKK3N0YXRpYyB1MzIgcGVyZl9ldmVudF9waWQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCit7CisJLyoKKwkgKiBvbmx5IHRvcCBsZXZlbCBldmVudHMgaGF2ZSB0aGUgcGlkIG5hbWVzcGFjZSB0aGV5IHdlcmUgY3JlYXRlZCBpbgorCSAqLworCWlmIChldmVudC0+cGFyZW50KQorCQlldmVudCA9IGV2ZW50LT5wYXJlbnQ7CisKKwlyZXR1cm4gdGFza190Z2lkX25yX25zKHAsIGV2ZW50LT5ucyk7Cit9CisKK3N0YXRpYyB1MzIgcGVyZl9ldmVudF90aWQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCit7CisJLyoKKwkgKiBvbmx5IHRvcCBsZXZlbCBldmVudHMgaGF2ZSB0aGUgcGlkIG5hbWVzcGFjZSB0aGV5IHdlcmUgY3JlYXRlZCBpbgorCSAqLworCWlmIChldmVudC0+cGFyZW50KQorCQlldmVudCA9IGV2ZW50LT5wYXJlbnQ7CisKKwlyZXR1cm4gdGFza19waWRfbnJfbnMocCwgZXZlbnQtPm5zKTsKK30KKwogLyoKICAqIElmIHdlIGluaGVyaXQgZXZlbnRzIHdlIHdhbnQgdG8gcmV0dXJuIHRoZSBwYXJlbnQgZXZlbnQgaWQKICAqIHRvIHVzZXJzcGFjZS4KQEAgLTMxMiw5ICszMzcsODQgQEAKIAkJY3R4LT5ucl9zdGF0Kys7CiB9CiAKKy8qCisgKiBDYWxsZWQgYXQgcGVyZl9ldmVudCBjcmVhdGlvbiBhbmQgd2hlbiBldmVudHMgYXJlIGF0dGFjaGVkL2RldGFjaGVkIGZyb20gYQorICogZ3JvdXAuCisgKi8KK3N0YXRpYyB2b2lkIHBlcmZfZXZlbnRfX3JlYWRfc2l6ZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJaW50IGVudHJ5ID0gc2l6ZW9mKHU2NCk7IC8qIHZhbHVlICovCisJaW50IHNpemUgPSAwOworCWludCBuciA9IDE7CisKKwlpZiAoZXZlbnQtPmF0dHIucmVhZF9mb3JtYXQgJiBQRVJGX0ZPUk1BVF9UT1RBTF9USU1FX0VOQUJMRUQpCisJCXNpemUgKz0gc2l6ZW9mKHU2NCk7CisKKwlpZiAoZXZlbnQtPmF0dHIucmVhZF9mb3JtYXQgJiBQRVJGX0ZPUk1BVF9UT1RBTF9USU1FX1JVTk5JTkcpCisJCXNpemUgKz0gc2l6ZW9mKHU2NCk7CisKKwlpZiAoZXZlbnQtPmF0dHIucmVhZF9mb3JtYXQgJiBQRVJGX0ZPUk1BVF9JRCkKKwkJZW50cnkgKz0gc2l6ZW9mKHU2NCk7CisKKwlpZiAoZXZlbnQtPmF0dHIucmVhZF9mb3JtYXQgJiBQRVJGX0ZPUk1BVF9HUk9VUCkgeworCQluciArPSBldmVudC0+Z3JvdXBfbGVhZGVyLT5ucl9zaWJsaW5nczsKKwkJc2l6ZSArPSBzaXplb2YodTY0KTsKKwl9CisKKwlzaXplICs9IGVudHJ5ICogbnI7CisJZXZlbnQtPnJlYWRfc2l6ZSA9IHNpemU7Cit9CisKK3N0YXRpYyB2b2lkIHBlcmZfZXZlbnRfX2hlYWRlcl9zaXplKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSAqZGF0YTsKKwl1NjQgc2FtcGxlX3R5cGUgPSBldmVudC0+YXR0ci5zYW1wbGVfdHlwZTsKKwl1MTYgc2l6ZSA9IDA7CisKKwlwZXJmX2V2ZW50X19yZWFkX3NpemUoZXZlbnQpOworCisJaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfSVApCisJCXNpemUgKz0gc2l6ZW9mKGRhdGEtPmlwKTsKKworCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX0FERFIpCisJCXNpemUgKz0gc2l6ZW9mKGRhdGEtPmFkZHIpOworCisJaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfUEVSSU9EKQorCQlzaXplICs9IHNpemVvZihkYXRhLT5wZXJpb2QpOworCisJaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfUkVBRCkKKwkJc2l6ZSArPSBldmVudC0+cmVhZF9zaXplOworCisJZXZlbnQtPmhlYWRlcl9zaXplID0gc2l6ZTsKK30KKworc3RhdGljIHZvaWQgcGVyZl9ldmVudF9faWRfaGVhZGVyX3NpemUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhICpkYXRhOworCXU2NCBzYW1wbGVfdHlwZSA9IGV2ZW50LT5hdHRyLnNhbXBsZV90eXBlOworCXUxNiBzaXplID0gMDsKKworCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1RJRCkKKwkJc2l6ZSArPSBzaXplb2YoZGF0YS0+dGlkX2VudHJ5KTsKKworCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1RJTUUpCisJCXNpemUgKz0gc2l6ZW9mKGRhdGEtPnRpbWUpOworCisJaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfSUQpCisJCXNpemUgKz0gc2l6ZW9mKGRhdGEtPmlkKTsKKworCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1NUUkVBTV9JRCkKKwkJc2l6ZSArPSBzaXplb2YoZGF0YS0+c3RyZWFtX2lkKTsKKworCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX0NQVSkKKwkJc2l6ZSArPSBzaXplb2YoZGF0YS0+Y3B1X2VudHJ5KTsKKworCWV2ZW50LT5pZF9oZWFkZXJfc2l6ZSA9IHNpemU7Cit9CisKIHN0YXRpYyB2b2lkIHBlcmZfZ3JvdXBfYXR0YWNoKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIHsKLQlzdHJ1Y3QgcGVyZl9ldmVudCAqZ3JvdXBfbGVhZGVyID0gZXZlbnQtPmdyb3VwX2xlYWRlcjsKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqZ3JvdXBfbGVhZGVyID0gZXZlbnQtPmdyb3VwX2xlYWRlciwgKnBvczsKIAogCS8qCiAJICogV2UgY2FuIGhhdmUgZG91YmxlIGF0dGFjaCBkdWUgdG8gZ3JvdXAgbW92ZW1lbnQgaW4gcGVyZl9ldmVudF9vcGVuLgpAQCAtMzMzLDYgKzQzMywxMSBAQAogCiAJbGlzdF9hZGRfdGFpbCgmZXZlbnQtPmdyb3VwX2VudHJ5LCAmZ3JvdXBfbGVhZGVyLT5zaWJsaW5nX2xpc3QpOwogCWdyb3VwX2xlYWRlci0+bnJfc2libGluZ3MrKzsKKworCXBlcmZfZXZlbnRfX2hlYWRlcl9zaXplKGdyb3VwX2xlYWRlcik7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgJmdyb3VwX2xlYWRlci0+c2libGluZ19saXN0LCBncm91cF9lbnRyeSkKKwkJcGVyZl9ldmVudF9faGVhZGVyX3NpemUocG9zKTsKIH0KIAogLyoKQEAgLTM5MSw3ICs0OTYsNyBAQAogCWlmIChldmVudC0+Z3JvdXBfbGVhZGVyICE9IGV2ZW50KSB7CiAJCWxpc3RfZGVsX2luaXQoJmV2ZW50LT5ncm91cF9lbnRyeSk7CiAJCWV2ZW50LT5ncm91cF9sZWFkZXItPm5yX3NpYmxpbmdzLS07Ci0JCXJldHVybjsKKwkJZ290byBvdXQ7CiAJfQogCiAJaWYgKCFsaXN0X2VtcHR5KCZldmVudC0+Z3JvdXBfZW50cnkpKQpAQCAtNDEwLDYgKzUxNSwxMiBAQAogCQkvKiBJbmhlcml0IGdyb3VwIGZsYWdzIGZyb20gdGhlIHByZXZpb3VzIGxlYWRlciAqLwogCQlzaWJsaW5nLT5ncm91cF9mbGFncyA9IGV2ZW50LT5ncm91cF9mbGFnczsKIAl9CisKK291dDoKKwlwZXJmX2V2ZW50X19oZWFkZXJfc2l6ZShldmVudC0+Z3JvdXBfbGVhZGVyKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkodG1wLCAmZXZlbnQtPmdyb3VwX2xlYWRlci0+c2libGluZ19saXN0LCBncm91cF9lbnRyeSkKKwkJcGVyZl9ldmVudF9faGVhZGVyX3NpemUodG1wKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQKQEAgLTEwNzMsNyArMTE4NCw3IEBACiAJLyoKIAkgKiBub3Qgc3VwcG9ydGVkIG9uIGluaGVyaXRlZCBldmVudHMKIAkgKi8KLQlpZiAoZXZlbnQtPmF0dHIuaW5oZXJpdCkKKwlpZiAoZXZlbnQtPmF0dHIuaW5oZXJpdCB8fCAhaXNfc2FtcGxpbmdfZXZlbnQoZXZlbnQpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWF0b21pY19hZGQocmVmcmVzaCwgJmV2ZW50LT5ldmVudF9saW1pdCk7CkBAIC0yMjg5LDMxICsyNDAwLDYgQEAKIAlyZXR1cm4gcGVyZl9ldmVudF9yZWxlYXNlX2tlcm5lbChldmVudCk7CiB9CiAKLXN0YXRpYyBpbnQgcGVyZl9ldmVudF9yZWFkX3NpemUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQotewotCWludCBlbnRyeSA9IHNpemVvZih1NjQpOyAvKiB2YWx1ZSAqLwotCWludCBzaXplID0gMDsKLQlpbnQgbnIgPSAxOwotCi0JaWYgKGV2ZW50LT5hdHRyLnJlYWRfZm9ybWF0ICYgUEVSRl9GT1JNQVRfVE9UQUxfVElNRV9FTkFCTEVEKQotCQlzaXplICs9IHNpemVvZih1NjQpOwotCi0JaWYgKGV2ZW50LT5hdHRyLnJlYWRfZm9ybWF0ICYgUEVSRl9GT1JNQVRfVE9UQUxfVElNRV9SVU5OSU5HKQotCQlzaXplICs9IHNpemVvZih1NjQpOwotCi0JaWYgKGV2ZW50LT5hdHRyLnJlYWRfZm9ybWF0ICYgUEVSRl9GT1JNQVRfSUQpCi0JCWVudHJ5ICs9IHNpemVvZih1NjQpOwotCi0JaWYgKGV2ZW50LT5hdHRyLnJlYWRfZm9ybWF0ICYgUEVSRl9GT1JNQVRfR1JPVVApIHsKLQkJbnIgKz0gZXZlbnQtPmdyb3VwX2xlYWRlci0+bnJfc2libGluZ3M7Ci0JCXNpemUgKz0gc2l6ZW9mKHU2NCk7Ci0JfQotCi0Jc2l6ZSArPSBlbnRyeSAqIG5yOwotCi0JcmV0dXJuIHNpemU7Ci19Ci0KIHU2NCBwZXJmX2V2ZW50X3JlYWRfdmFsdWUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCB1NjQgKmVuYWJsZWQsIHU2NCAqcnVubmluZykKIHsKIAlzdHJ1Y3QgcGVyZl9ldmVudCAqY2hpbGQ7CkBAIC0yNDI4LDcgKzI1MTQsNyBAQAogCWlmIChldmVudC0+c3RhdGUgPT0gUEVSRl9FVkVOVF9TVEFURV9FUlJPUikKIAkJcmV0dXJuIDA7CiAKLQlpZiAoY291bnQgPCBwZXJmX2V2ZW50X3JlYWRfc2l6ZShldmVudCkpCisJaWYgKGNvdW50IDwgZXZlbnQtPnJlYWRfc2l6ZSkKIAkJcmV0dXJuIC1FTk9TUEM7CiAKIAlXQVJOX09OX09OQ0UoZXZlbnQtPmN0eC0+cGFyZW50X2N0eCk7CkBAIC0yNTE0LDcgKzI2MDAsNyBAQAogCWludCByZXQgPSAwOwogCXU2NCB2YWx1ZTsKIAotCWlmICghZXZlbnQtPmF0dHIuc2FtcGxlX3BlcmlvZCkKKwlpZiAoIWlzX3NhbXBsaW5nX2V2ZW50KGV2ZW50KSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoY29weV9mcm9tX3VzZXIoJnZhbHVlLCBhcmcsIHNpemVvZih2YWx1ZSkpKQpAQCAtMzMwNSw2ICszMzkxLDczIEBACiAJfSB3aGlsZSAobGVuKTsKIH0KIAorc3RhdGljIHZvaWQgX19wZXJmX2V2ZW50X2hlYWRlcl9faW5pdF9pZChzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIgKmhlYWRlciwKKwkJCQkJIHN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhICpkYXRhLAorCQkJCQkgc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXU2NCBzYW1wbGVfdHlwZSA9IGV2ZW50LT5hdHRyLnNhbXBsZV90eXBlOworCisJZGF0YS0+dHlwZSA9IHNhbXBsZV90eXBlOworCWhlYWRlci0+c2l6ZSArPSBldmVudC0+aWRfaGVhZGVyX3NpemU7CisKKwlpZiAoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9USUQpIHsKKwkJLyogbmFtZXNwYWNlIGlzc3VlcyAqLworCQlkYXRhLT50aWRfZW50cnkucGlkID0gcGVyZl9ldmVudF9waWQoZXZlbnQsIGN1cnJlbnQpOworCQlkYXRhLT50aWRfZW50cnkudGlkID0gcGVyZl9ldmVudF90aWQoZXZlbnQsIGN1cnJlbnQpOworCX0KKworCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1RJTUUpCisJCWRhdGEtPnRpbWUgPSBwZXJmX2Nsb2NrKCk7CisKKwlpZiAoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9JRCkKKwkJZGF0YS0+aWQgPSBwcmltYXJ5X2V2ZW50X2lkKGV2ZW50KTsKKworCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1NUUkVBTV9JRCkKKwkJZGF0YS0+c3RyZWFtX2lkID0gZXZlbnQtPmlkOworCisJaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfQ1BVKSB7CisJCWRhdGEtPmNwdV9lbnRyeS5jcHUJID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKKwkJZGF0YS0+Y3B1X2VudHJ5LnJlc2VydmVkID0gMDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHBlcmZfZXZlbnRfaGVhZGVyX19pbml0X2lkKHN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlciAqaGVhZGVyLAorCQkJCSAgICAgICBzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSAqZGF0YSwKKwkJCQkgICAgICAgc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCWlmIChldmVudC0+YXR0ci5zYW1wbGVfaWRfYWxsKQorCQlfX3BlcmZfZXZlbnRfaGVhZGVyX19pbml0X2lkKGhlYWRlciwgZGF0YSwgZXZlbnQpOworfQorCitzdGF0aWMgdm9pZCBfX3BlcmZfZXZlbnRfX291dHB1dF9pZF9zYW1wbGUoc3RydWN0IHBlcmZfb3V0cHV0X2hhbmRsZSAqaGFuZGxlLAorCQkJCQkgICBzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSAqZGF0YSkKK3sKKwl1NjQgc2FtcGxlX3R5cGUgPSBkYXRhLT50eXBlOworCisJaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfVElEKQorCQlwZXJmX291dHB1dF9wdXQoaGFuZGxlLCBkYXRhLT50aWRfZW50cnkpOworCisJaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfVElNRSkKKwkJcGVyZl9vdXRwdXRfcHV0KGhhbmRsZSwgZGF0YS0+dGltZSk7CisKKwlpZiAoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9JRCkKKwkJcGVyZl9vdXRwdXRfcHV0KGhhbmRsZSwgZGF0YS0+aWQpOworCisJaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfU1RSRUFNX0lEKQorCQlwZXJmX291dHB1dF9wdXQoaGFuZGxlLCBkYXRhLT5zdHJlYW1faWQpOworCisJaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfQ1BVKQorCQlwZXJmX291dHB1dF9wdXQoaGFuZGxlLCBkYXRhLT5jcHVfZW50cnkpOworfQorCitzdGF0aWMgdm9pZCBwZXJmX2V2ZW50X19vdXRwdXRfaWRfc2FtcGxlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwKKwkJCQkJIHN0cnVjdCBwZXJmX291dHB1dF9oYW5kbGUgKmhhbmRsZSwKKwkJCQkJIHN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhICpzYW1wbGUpCit7CisJaWYgKGV2ZW50LT5hdHRyLnNhbXBsZV9pZF9hbGwpCisJCV9fcGVyZl9ldmVudF9fb3V0cHV0X2lkX3NhbXBsZShoYW5kbGUsIHNhbXBsZSk7Cit9CisKIGludCBwZXJmX291dHB1dF9iZWdpbihzdHJ1Y3QgcGVyZl9vdXRwdXRfaGFuZGxlICpoYW5kbGUsCiAJCSAgICAgIHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgdW5zaWduZWQgaW50IHNpemUsCiAJCSAgICAgIGludCBubWksIGludCBzYW1wbGUpCkBAIC0zMzEyLDYgKzM0NjUsNyBAQAogCXN0cnVjdCBwZXJmX2J1ZmZlciAqYnVmZmVyOwogCXVuc2lnbmVkIGxvbmcgdGFpbCwgb2Zmc2V0LCBoZWFkOwogCWludCBoYXZlX2xvc3Q7CisJc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgc2FtcGxlX2RhdGE7CiAJc3RydWN0IHsKIAkJc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyIGhlYWRlcjsKIAkJdTY0CQkJIGlkOwpAQCAtMzMzOCw4ICszNDkyLDEyIEBACiAJCWdvdG8gb3V0OwogCiAJaGF2ZV9sb3N0ID0gbG9jYWxfcmVhZCgmYnVmZmVyLT5sb3N0KTsKLQlpZiAoaGF2ZV9sb3N0KQotCQlzaXplICs9IHNpemVvZihsb3N0X2V2ZW50KTsKKwlpZiAoaGF2ZV9sb3N0KSB7CisJCWxvc3RfZXZlbnQuaGVhZGVyLnNpemUgPSBzaXplb2YobG9zdF9ldmVudCk7CisJCXBlcmZfZXZlbnRfaGVhZGVyX19pbml0X2lkKCZsb3N0X2V2ZW50LmhlYWRlciwgJnNhbXBsZV9kYXRhLAorCQkJCQkgICBldmVudCk7CisJCXNpemUgKz0gbG9zdF9ldmVudC5oZWFkZXIuc2l6ZTsKKwl9CiAKIAlwZXJmX291dHB1dF9nZXRfaGFuZGxlKGhhbmRsZSk7CiAKQEAgLTMzNzAsMTEgKzM1MjgsMTEgQEAKIAlpZiAoaGF2ZV9sb3N0KSB7CiAJCWxvc3RfZXZlbnQuaGVhZGVyLnR5cGUgPSBQRVJGX1JFQ09SRF9MT1NUOwogCQlsb3N0X2V2ZW50LmhlYWRlci5taXNjID0gMDsKLQkJbG9zdF9ldmVudC5oZWFkZXIuc2l6ZSA9IHNpemVvZihsb3N0X2V2ZW50KTsKIAkJbG9zdF9ldmVudC5pZCAgICAgICAgICA9IGV2ZW50LT5pZDsKIAkJbG9zdF9ldmVudC5sb3N0ICAgICAgICA9IGxvY2FsX3hjaGcoJmJ1ZmZlci0+bG9zdCwgMCk7CiAKIAkJcGVyZl9vdXRwdXRfcHV0KGhhbmRsZSwgbG9zdF9ldmVudCk7CisJCXBlcmZfZXZlbnRfX291dHB1dF9pZF9zYW1wbGUoZXZlbnQsIGhhbmRsZSwgJnNhbXBsZV9kYXRhKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTM0MDcsMjggKzM1NjUsNiBAQAogCXJjdV9yZWFkX3VubG9jaygpOwogfQogCi1zdGF0aWMgdTMyIHBlcmZfZXZlbnRfcGlkKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgc3RydWN0IHRhc2tfc3RydWN0ICpwKQotewotCS8qCi0JICogb25seSB0b3AgbGV2ZWwgZXZlbnRzIGhhdmUgdGhlIHBpZCBuYW1lc3BhY2UgdGhleSB3ZXJlIGNyZWF0ZWQgaW4KLQkgKi8KLQlpZiAoZXZlbnQtPnBhcmVudCkKLQkJZXZlbnQgPSBldmVudC0+cGFyZW50OwotCi0JcmV0dXJuIHRhc2tfdGdpZF9ucl9ucyhwLCBldmVudC0+bnMpOwotfQotCi1zdGF0aWMgdTMyIHBlcmZfZXZlbnRfdGlkKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgc3RydWN0IHRhc2tfc3RydWN0ICpwKQotewotCS8qCi0JICogb25seSB0b3AgbGV2ZWwgZXZlbnRzIGhhdmUgdGhlIHBpZCBuYW1lc3BhY2UgdGhleSB3ZXJlIGNyZWF0ZWQgaW4KLQkgKi8KLQlpZiAoZXZlbnQtPnBhcmVudCkKLQkJZXZlbnQgPSBldmVudC0+cGFyZW50OwotCi0JcmV0dXJuIHRhc2tfcGlkX25yX25zKHAsIGV2ZW50LT5ucyk7Ci19Ci0KIHN0YXRpYyB2b2lkIHBlcmZfb3V0cHV0X3JlYWRfb25lKHN0cnVjdCBwZXJmX291dHB1dF9oYW5kbGUgKmhhbmRsZSwKIAkJCQkgc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LAogCQkJCSB1NjQgZW5hYmxlZCwgdTY0IHJ1bm5pbmcpCkBAIC0zNjAzLDYyICszNzM5LDE3IEBACiB7CiAJdTY0IHNhbXBsZV90eXBlID0gZXZlbnQtPmF0dHIuc2FtcGxlX3R5cGU7CiAKLQlkYXRhLT50eXBlID0gc2FtcGxlX3R5cGU7Ci0KIAloZWFkZXItPnR5cGUgPSBQRVJGX1JFQ09SRF9TQU1QTEU7Ci0JaGVhZGVyLT5zaXplID0gc2l6ZW9mKCpoZWFkZXIpOworCWhlYWRlci0+c2l6ZSA9IHNpemVvZigqaGVhZGVyKSArIGV2ZW50LT5oZWFkZXJfc2l6ZTsKIAogCWhlYWRlci0+bWlzYyA9IDA7CiAJaGVhZGVyLT5taXNjIHw9IHBlcmZfbWlzY19mbGFncyhyZWdzKTsKIAotCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX0lQKSB7CisJX19wZXJmX2V2ZW50X2hlYWRlcl9faW5pdF9pZChoZWFkZXIsIGRhdGEsIGV2ZW50KTsKKworCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX0lQKQogCQlkYXRhLT5pcCA9IHBlcmZfaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKTsKIAotCQloZWFkZXItPnNpemUgKz0gc2l6ZW9mKGRhdGEtPmlwKTsKLQl9Ci0KLQlpZiAoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9USUQpIHsKLQkJLyogbmFtZXNwYWNlIGlzc3VlcyAqLwotCQlkYXRhLT50aWRfZW50cnkucGlkID0gcGVyZl9ldmVudF9waWQoZXZlbnQsIGN1cnJlbnQpOwotCQlkYXRhLT50aWRfZW50cnkudGlkID0gcGVyZl9ldmVudF90aWQoZXZlbnQsIGN1cnJlbnQpOwotCi0JCWhlYWRlci0+c2l6ZSArPSBzaXplb2YoZGF0YS0+dGlkX2VudHJ5KTsKLQl9Ci0KLQlpZiAoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9USU1FKSB7Ci0JCWRhdGEtPnRpbWUgPSBwZXJmX2Nsb2NrKCk7Ci0KLQkJaGVhZGVyLT5zaXplICs9IHNpemVvZihkYXRhLT50aW1lKTsKLQl9Ci0KLQlpZiAoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9BRERSKQotCQloZWFkZXItPnNpemUgKz0gc2l6ZW9mKGRhdGEtPmFkZHIpOwotCi0JaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfSUQpIHsKLQkJZGF0YS0+aWQgPSBwcmltYXJ5X2V2ZW50X2lkKGV2ZW50KTsKLQotCQloZWFkZXItPnNpemUgKz0gc2l6ZW9mKGRhdGEtPmlkKTsKLQl9Ci0KLQlpZiAoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9TVFJFQU1fSUQpIHsKLQkJZGF0YS0+c3RyZWFtX2lkID0gZXZlbnQtPmlkOwotCi0JCWhlYWRlci0+c2l6ZSArPSBzaXplb2YoZGF0YS0+c3RyZWFtX2lkKTsKLQl9Ci0KLQlpZiAoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9DUFUpIHsKLQkJZGF0YS0+Y3B1X2VudHJ5LmNwdQkJPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOwotCQlkYXRhLT5jcHVfZW50cnkucmVzZXJ2ZWQJPSAwOwotCi0JCWhlYWRlci0+c2l6ZSArPSBzaXplb2YoZGF0YS0+Y3B1X2VudHJ5KTsKLQl9Ci0KLQlpZiAoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9QRVJJT0QpCi0JCWhlYWRlci0+c2l6ZSArPSBzaXplb2YoZGF0YS0+cGVyaW9kKTsKLQotCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1JFQUQpCi0JCWhlYWRlci0+c2l6ZSArPSBwZXJmX2V2ZW50X3JlYWRfc2l6ZShldmVudCk7Ci0KIAlpZiAoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9DQUxMQ0hBSU4pIHsKIAkJaW50IHNpemUgPSAxOwogCkBAIC0zNzIyLDIzICszODEzLDI2IEBACiAJCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCiB7CiAJc3RydWN0IHBlcmZfb3V0cHV0X2hhbmRsZSBoYW5kbGU7CisJc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgc2FtcGxlOwogCXN0cnVjdCBwZXJmX3JlYWRfZXZlbnQgcmVhZF9ldmVudCA9IHsKIAkJLmhlYWRlciA9IHsKIAkJCS50eXBlID0gUEVSRl9SRUNPUkRfUkVBRCwKIAkJCS5taXNjID0gMCwKLQkJCS5zaXplID0gc2l6ZW9mKHJlYWRfZXZlbnQpICsgcGVyZl9ldmVudF9yZWFkX3NpemUoZXZlbnQpLAorCQkJLnNpemUgPSBzaXplb2YocmVhZF9ldmVudCkgKyBldmVudC0+cmVhZF9zaXplLAogCQl9LAogCQkucGlkID0gcGVyZl9ldmVudF9waWQoZXZlbnQsIHRhc2spLAogCQkudGlkID0gcGVyZl9ldmVudF90aWQoZXZlbnQsIHRhc2spLAogCX07CiAJaW50IHJldDsKIAorCXBlcmZfZXZlbnRfaGVhZGVyX19pbml0X2lkKCZyZWFkX2V2ZW50LmhlYWRlciwgJnNhbXBsZSwgZXZlbnQpOwogCXJldCA9IHBlcmZfb3V0cHV0X2JlZ2luKCZoYW5kbGUsIGV2ZW50LCByZWFkX2V2ZW50LmhlYWRlci5zaXplLCAwLCAwKTsKIAlpZiAocmV0KQogCQlyZXR1cm47CiAKIAlwZXJmX291dHB1dF9wdXQoJmhhbmRsZSwgcmVhZF9ldmVudCk7CiAJcGVyZl9vdXRwdXRfcmVhZCgmaGFuZGxlLCBldmVudCk7CisJcGVyZl9ldmVudF9fb3V0cHV0X2lkX3NhbXBsZShldmVudCwgJmhhbmRsZSwgJnNhbXBsZSk7CiAKIAlwZXJmX291dHB1dF9lbmQoJmhhbmRsZSk7CiB9CkBAIC0zNzY4LDE0ICszODYyLDE2IEBACiAJCQkJICAgICBzdHJ1Y3QgcGVyZl90YXNrX2V2ZW50ICp0YXNrX2V2ZW50KQogewogCXN0cnVjdCBwZXJmX291dHB1dF9oYW5kbGUgaGFuZGxlOworCXN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhCXNhbXBsZTsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2sgPSB0YXNrX2V2ZW50LT50YXNrOwotCWludCBzaXplLCByZXQ7CisJaW50IHJldCwgc2l6ZSA9IHRhc2tfZXZlbnQtPmV2ZW50X2lkLmhlYWRlci5zaXplOwogCi0Jc2l6ZSAgPSB0YXNrX2V2ZW50LT5ldmVudF9pZC5oZWFkZXIuc2l6ZTsKLQlyZXQgPSBwZXJmX291dHB1dF9iZWdpbigmaGFuZGxlLCBldmVudCwgc2l6ZSwgMCwgMCk7CisJcGVyZl9ldmVudF9oZWFkZXJfX2luaXRfaWQoJnRhc2tfZXZlbnQtPmV2ZW50X2lkLmhlYWRlciwgJnNhbXBsZSwgZXZlbnQpOwogCisJcmV0ID0gcGVyZl9vdXRwdXRfYmVnaW4oJmhhbmRsZSwgZXZlbnQsCisJCQkJdGFza19ldmVudC0+ZXZlbnRfaWQuaGVhZGVyLnNpemUsIDAsIDApOwogCWlmIChyZXQpCi0JCXJldHVybjsKKwkJZ290byBvdXQ7CiAKIAl0YXNrX2V2ZW50LT5ldmVudF9pZC5waWQgPSBwZXJmX2V2ZW50X3BpZChldmVudCwgdGFzayk7CiAJdGFza19ldmVudC0+ZXZlbnRfaWQucHBpZCA9IHBlcmZfZXZlbnRfcGlkKGV2ZW50LCBjdXJyZW50KTsKQEAgLTM3ODUsNyArMzg4MSwxMSBAQAogCiAJcGVyZl9vdXRwdXRfcHV0KCZoYW5kbGUsIHRhc2tfZXZlbnQtPmV2ZW50X2lkKTsKIAorCXBlcmZfZXZlbnRfX291dHB1dF9pZF9zYW1wbGUoZXZlbnQsICZoYW5kbGUsICZzYW1wbGUpOworCiAJcGVyZl9vdXRwdXRfZW5kKCZoYW5kbGUpOworb3V0OgorCXRhc2tfZXZlbnQtPmV2ZW50X2lkLmhlYWRlci5zaXplID0gc2l6ZTsKIH0KIAogc3RhdGljIGludCBwZXJmX2V2ZW50X3Rhc2tfbWF0Y2goc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQpAQCAtMzkwMCwxMSArNDAwMCwxNiBAQAogCQkJCSAgICAgc3RydWN0IHBlcmZfY29tbV9ldmVudCAqY29tbV9ldmVudCkKIHsKIAlzdHJ1Y3QgcGVyZl9vdXRwdXRfaGFuZGxlIGhhbmRsZTsKKwlzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSBzYW1wbGU7CiAJaW50IHNpemUgPSBjb21tX2V2ZW50LT5ldmVudF9pZC5oZWFkZXIuc2l6ZTsKLQlpbnQgcmV0ID0gcGVyZl9vdXRwdXRfYmVnaW4oJmhhbmRsZSwgZXZlbnQsIHNpemUsIDAsIDApOworCWludCByZXQ7CisKKwlwZXJmX2V2ZW50X2hlYWRlcl9faW5pdF9pZCgmY29tbV9ldmVudC0+ZXZlbnRfaWQuaGVhZGVyLCAmc2FtcGxlLCBldmVudCk7CisJcmV0ID0gcGVyZl9vdXRwdXRfYmVnaW4oJmhhbmRsZSwgZXZlbnQsCisJCQkJY29tbV9ldmVudC0+ZXZlbnRfaWQuaGVhZGVyLnNpemUsIDAsIDApOwogCiAJaWYgKHJldCkKLQkJcmV0dXJuOworCQlnb3RvIG91dDsKIAogCWNvbW1fZXZlbnQtPmV2ZW50X2lkLnBpZCA9IHBlcmZfZXZlbnRfcGlkKGV2ZW50LCBjb21tX2V2ZW50LT50YXNrKTsKIAljb21tX2V2ZW50LT5ldmVudF9pZC50aWQgPSBwZXJmX2V2ZW50X3RpZChldmVudCwgY29tbV9ldmVudC0+dGFzayk7CkBAIC0zOTEyLDcgKzQwMTcsMTIgQEAKIAlwZXJmX291dHB1dF9wdXQoJmhhbmRsZSwgY29tbV9ldmVudC0+ZXZlbnRfaWQpOwogCXBlcmZfb3V0cHV0X2NvcHkoJmhhbmRsZSwgY29tbV9ldmVudC0+Y29tbSwKIAkJCQkgICBjb21tX2V2ZW50LT5jb21tX3NpemUpOworCisJcGVyZl9ldmVudF9fb3V0cHV0X2lkX3NhbXBsZShldmVudCwgJmhhbmRsZSwgJnNhbXBsZSk7CisKIAlwZXJmX291dHB1dF9lbmQoJmhhbmRsZSk7CitvdXQ6CisJY29tbV9ldmVudC0+ZXZlbnRfaWQuaGVhZGVyLnNpemUgPSBzaXplOwogfQogCiBzdGF0aWMgaW50IHBlcmZfZXZlbnRfY29tbV9tYXRjaChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCkBAIC0zOTU3LDcgKzQwNjcsNiBAQAogCWNvbW1fZXZlbnQtPmNvbW1fc2l6ZSA9IHNpemU7CiAKIAljb21tX2V2ZW50LT5ldmVudF9pZC5oZWFkZXIuc2l6ZSA9IHNpemVvZihjb21tX2V2ZW50LT5ldmVudF9pZCkgKyBzaXplOwotCiAJcmN1X3JlYWRfbG9jaygpOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBtdSwgJnBtdXMsIGVudHJ5KSB7CiAJCWNwdWN0eCA9IGdldF9jcHVfcHRyKHBtdS0+cG11X2NwdV9jb250ZXh0KTsKQEAgLTQwMzgsMTEgKzQxNDcsMTUgQEAKIAkJCQkgICAgIHN0cnVjdCBwZXJmX21tYXBfZXZlbnQgKm1tYXBfZXZlbnQpCiB7CiAJc3RydWN0IHBlcmZfb3V0cHV0X2hhbmRsZSBoYW5kbGU7CisJc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgc2FtcGxlOwogCWludCBzaXplID0gbW1hcF9ldmVudC0+ZXZlbnRfaWQuaGVhZGVyLnNpemU7Ci0JaW50IHJldCA9IHBlcmZfb3V0cHV0X2JlZ2luKCZoYW5kbGUsIGV2ZW50LCBzaXplLCAwLCAwKTsKKwlpbnQgcmV0OwogCisJcGVyZl9ldmVudF9oZWFkZXJfX2luaXRfaWQoJm1tYXBfZXZlbnQtPmV2ZW50X2lkLmhlYWRlciwgJnNhbXBsZSwgZXZlbnQpOworCXJldCA9IHBlcmZfb3V0cHV0X2JlZ2luKCZoYW5kbGUsIGV2ZW50LAorCQkJCW1tYXBfZXZlbnQtPmV2ZW50X2lkLmhlYWRlci5zaXplLCAwLCAwKTsKIAlpZiAocmV0KQotCQlyZXR1cm47CisJCWdvdG8gb3V0OwogCiAJbW1hcF9ldmVudC0+ZXZlbnRfaWQucGlkID0gcGVyZl9ldmVudF9waWQoZXZlbnQsIGN1cnJlbnQpOwogCW1tYXBfZXZlbnQtPmV2ZW50X2lkLnRpZCA9IHBlcmZfZXZlbnRfdGlkKGV2ZW50LCBjdXJyZW50KTsKQEAgLTQwNTAsNyArNDE2MywxMiBAQAogCXBlcmZfb3V0cHV0X3B1dCgmaGFuZGxlLCBtbWFwX2V2ZW50LT5ldmVudF9pZCk7CiAJcGVyZl9vdXRwdXRfY29weSgmaGFuZGxlLCBtbWFwX2V2ZW50LT5maWxlX25hbWUsCiAJCQkJICAgbW1hcF9ldmVudC0+ZmlsZV9zaXplKTsKKworCXBlcmZfZXZlbnRfX291dHB1dF9pZF9zYW1wbGUoZXZlbnQsICZoYW5kbGUsICZzYW1wbGUpOworCiAJcGVyZl9vdXRwdXRfZW5kKCZoYW5kbGUpOworb3V0OgorCW1tYXBfZXZlbnQtPmV2ZW50X2lkLmhlYWRlci5zaXplID0gc2l6ZTsKIH0KIAogc3RhdGljIGludCBwZXJmX2V2ZW50X21tYXBfbWF0Y2goc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LApAQCAtNDIwNSw2ICs0MzIzLDcgQEAKIHN0YXRpYyB2b2lkIHBlcmZfbG9nX3Rocm90dGxlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IGVuYWJsZSkKIHsKIAlzdHJ1Y3QgcGVyZl9vdXRwdXRfaGFuZGxlIGhhbmRsZTsKKwlzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSBzYW1wbGU7CiAJaW50IHJldDsKIAogCXN0cnVjdCB7CkBAIC00MjI2LDExICs0MzQ1LDE1IEBACiAJaWYgKGVuYWJsZSkKIAkJdGhyb3R0bGVfZXZlbnQuaGVhZGVyLnR5cGUgPSBQRVJGX1JFQ09SRF9VTlRIUk9UVExFOwogCi0JcmV0ID0gcGVyZl9vdXRwdXRfYmVnaW4oJmhhbmRsZSwgZXZlbnQsIHNpemVvZih0aHJvdHRsZV9ldmVudCksIDEsIDApOworCXBlcmZfZXZlbnRfaGVhZGVyX19pbml0X2lkKCZ0aHJvdHRsZV9ldmVudC5oZWFkZXIsICZzYW1wbGUsIGV2ZW50KTsKKworCXJldCA9IHBlcmZfb3V0cHV0X2JlZ2luKCZoYW5kbGUsIGV2ZW50LAorCQkJCXRocm90dGxlX2V2ZW50LmhlYWRlci5zaXplLCAxLCAwKTsKIAlpZiAocmV0KQogCQlyZXR1cm47CiAKIAlwZXJmX291dHB1dF9wdXQoJmhhbmRsZSwgdGhyb3R0bGVfZXZlbnQpOworCXBlcmZfZXZlbnRfX291dHB1dF9pZF9zYW1wbGUoZXZlbnQsICZoYW5kbGUsICZzYW1wbGUpOwogCXBlcmZfb3V0cHV0X2VuZCgmaGFuZGxlKTsKIH0KIApAQCAtNDI0Niw2ICs0MzY5LDEzIEBACiAJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7CiAJaW50IHJldCA9IDA7CiAKKwkvKgorCSAqIE5vbi1zYW1wbGluZyBjb3VudGVycyBtaWdodCBzdGlsbCB1c2UgdGhlIFBNSSB0byBmb2xkIHNob3J0CisJICogaGFyZHdhcmUgY291bnRlcnMsIGlnbm9yZSB0aG9zZS4KKwkgKi8KKwlpZiAodW5saWtlbHkoIWlzX3NhbXBsaW5nX2V2ZW50KGV2ZW50KSkpCisJCXJldHVybiAwOworCiAJaWYgKCF0aHJvdHRsZSkgewogCQlod2MtPmludGVycnVwdHMrKzsKIAl9IGVsc2UgewpAQCAtNDM5MSw3ICs0NTIxLDcgQEAKIAlpZiAoIXJlZ3MpCiAJCXJldHVybjsKIAotCWlmICghaHdjLT5zYW1wbGVfcGVyaW9kKQorCWlmICghaXNfc2FtcGxpbmdfZXZlbnQoZXZlbnQpKQogCQlyZXR1cm47CiAKIAlpZiAobnIgPT0gMSAmJiBod2MtPnNhbXBsZV9wZXJpb2QgPT0gMSAmJiAhZXZlbnQtPmF0dHIuZnJlcSkKQEAgLTQ1NTQsNyArNDY4NCw3IEBACiAJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7CiAJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7CiAKLQlpZiAoaHdjLT5zYW1wbGVfcGVyaW9kKSB7CisJaWYgKGlzX3NhbXBsaW5nX2V2ZW50KGV2ZW50KSkgewogCQlod2MtPmxhc3RfcGVyaW9kID0gaHdjLT5zYW1wbGVfcGVyaW9kOwogCQlwZXJmX3N3ZXZlbnRfc2V0X3BlcmlvZChldmVudCk7CiAJfQpAQCAtNDgxMSwxNSArNDk0MSw2IEBACiAJaWYgKGV2ZW50LT5hdHRyLnR5cGUgIT0gUEVSRl9UWVBFX1RSQUNFUE9JTlQpCiAJCXJldHVybiAtRU5PRU5UOwogCi0JLyoKLQkgKiBSYXcgdHJhY2Vwb2ludCBkYXRhIGlzIGEgc2V2ZXJlIGRhdGEgbGVhaywgb25seSBhbGxvdyByb290IHRvCi0JICogaGF2ZSB0aGVzZS4KLQkgKi8KLQlpZiAoKGV2ZW50LT5hdHRyLnNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfUkFXKSAmJgotCQkJcGVyZl9wYXJhbm9pZF90cmFjZXBvaW50X3JhdygpICYmCi0JCQkhY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKLQkJcmV0dXJuIC1FUEVSTTsKLQogCWVyciA9IHBlcmZfdHJhY2VfaW5pdChldmVudCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKQEAgLTQ4NDIsNyArNDk2Myw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX3RwX3JlZ2lzdGVyKHZvaWQpCiB7Ci0JcGVyZl9wbXVfcmVnaXN0ZXIoJnBlcmZfdHJhY2Vwb2ludCk7CisJcGVyZl9wbXVfcmVnaXN0ZXIoJnBlcmZfdHJhY2Vwb2ludCwgInRyYWNlcG9pbnQiLCBQRVJGX1RZUEVfVFJBQ0VQT0lOVCk7CiB9CiAKIHN0YXRpYyBpbnQgcGVyZl9ldmVudF9zZXRfZmlsdGVyKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgdm9pZCBfX3VzZXIgKmFyZykKQEAgLTQ5MzIsMzEgKzUwNTMsMzMgQEAKIHN0YXRpYyB2b2lkIHBlcmZfc3dldmVudF9zdGFydF9ocnRpbWVyKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIHsKIAlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKKwlzNjQgcGVyaW9kOworCisJaWYgKCFpc19zYW1wbGluZ19ldmVudChldmVudCkpCisJCXJldHVybjsKIAogCWhydGltZXJfaW5pdCgmaHdjLT5ocnRpbWVyLCBDTE9DS19NT05PVE9OSUMsIEhSVElNRVJfTU9ERV9SRUwpOwogCWh3Yy0+aHJ0aW1lci5mdW5jdGlvbiA9IHBlcmZfc3dldmVudF9ocnRpbWVyOwotCWlmIChod2MtPnNhbXBsZV9wZXJpb2QpIHsKLQkJczY0IHBlcmlvZCA9IGxvY2FsNjRfcmVhZCgmaHdjLT5wZXJpb2RfbGVmdCk7CiAKLQkJaWYgKHBlcmlvZCkgewotCQkJaWYgKHBlcmlvZCA8IDApCi0JCQkJcGVyaW9kID0gMTAwMDA7CisJcGVyaW9kID0gbG9jYWw2NF9yZWFkKCZod2MtPnBlcmlvZF9sZWZ0KTsKKwlpZiAocGVyaW9kKSB7CisJCWlmIChwZXJpb2QgPCAwKQorCQkJcGVyaW9kID0gMTAwMDA7CiAKLQkJCWxvY2FsNjRfc2V0KCZod2MtPnBlcmlvZF9sZWZ0LCAwKTsKLQkJfSBlbHNlIHsKLQkJCXBlcmlvZCA9IG1heF90KHU2NCwgMTAwMDAsIGh3Yy0+c2FtcGxlX3BlcmlvZCk7Ci0JCX0KLQkJX19ocnRpbWVyX3N0YXJ0X3JhbmdlX25zKCZod2MtPmhydGltZXIsCisJCWxvY2FsNjRfc2V0KCZod2MtPnBlcmlvZF9sZWZ0LCAwKTsKKwl9IGVsc2UgeworCQlwZXJpb2QgPSBtYXhfdCh1NjQsIDEwMDAwLCBod2MtPnNhbXBsZV9wZXJpb2QpOworCX0KKwlfX2hydGltZXJfc3RhcnRfcmFuZ2VfbnMoJmh3Yy0+aHJ0aW1lciwKIAkJCQluc190b19rdGltZShwZXJpb2QpLCAwLAogCQkJCUhSVElNRVJfTU9ERV9SRUxfUElOTkVELCAwKTsKLQl9CiB9CiAKIHN0YXRpYyB2b2lkIHBlcmZfc3dldmVudF9jYW5jZWxfaHJ0aW1lcihzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCiB7CiAJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7CiAKLQlpZiAoaHdjLT5zYW1wbGVfcGVyaW9kKSB7CisJaWYgKGlzX3NhbXBsaW5nX2V2ZW50KGV2ZW50KSkgewogCQlrdGltZV90IHJlbWFpbmluZyA9IGhydGltZXJfZ2V0X3JlbWFpbmluZygmaHdjLT5ocnRpbWVyKTsKIAkJbG9jYWw2NF9zZXQoJmh3Yy0+cGVyaW9kX2xlZnQsIGt0aW1lX3RvX25zKHJlbWFpbmluZykpOwogCkBAIC01MTg0LDggKzUzMDcsNjEgQEAKIG91dDoKIAltdXRleF91bmxvY2soJnBtdXNfbG9jayk7CiB9CitzdGF0aWMgc3RydWN0IGlkciBwbXVfaWRyOwogCi1pbnQgcGVyZl9wbXVfcmVnaXN0ZXIoc3RydWN0IHBtdSAqcG11KQorc3RhdGljIHNzaXplX3QKK3R5cGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpwYWdlKQoreworCXN0cnVjdCBwbXUgKnBtdSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJcmV0dXJuIHNucHJpbnRmKHBhZ2UsIFBBR0VfU0laRS0xLCAiJWRcbiIsIHBtdS0+dHlwZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBwbXVfZGV2X2F0dHJzW10gPSB7CisgICAgICAgX19BVFRSX1JPKHR5cGUpLAorICAgICAgIF9fQVRUUl9OVUxMLAorfTsKKworc3RhdGljIGludCBwbXVfYnVzX3J1bm5pbmc7CitzdGF0aWMgc3RydWN0IGJ1c190eXBlIHBtdV9idXMgPSB7CisJLm5hbWUJCT0gImV2ZW50X3NvdXJjZSIsCisJLmRldl9hdHRycwk9IHBtdV9kZXZfYXR0cnMsCit9OworCitzdGF0aWMgdm9pZCBwbXVfZGV2X3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQoreworCWtmcmVlKGRldik7Cit9CisKK3N0YXRpYyBpbnQgcG11X2Rldl9hbGxvYyhzdHJ1Y3QgcG11ICpwbXUpCit7CisJaW50IHJldCA9IC1FTk9NRU07CisKKwlwbXUtPmRldiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkZXZpY2UpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBtdS0+ZGV2KQorCQlnb3RvIG91dDsKKworCWRldmljZV9pbml0aWFsaXplKHBtdS0+ZGV2KTsKKwlyZXQgPSBkZXZfc2V0X25hbWUocG11LT5kZXYsICIlcyIsIHBtdS0+bmFtZSk7CisJaWYgKHJldCkKKwkJZ290byBmcmVlX2RldjsKKworCWRldl9zZXRfZHJ2ZGF0YShwbXUtPmRldiwgcG11KTsKKwlwbXUtPmRldi0+YnVzID0gJnBtdV9idXM7CisJcG11LT5kZXYtPnJlbGVhc2UgPSBwbXVfZGV2X3JlbGVhc2U7CisJcmV0ID0gZGV2aWNlX2FkZChwbXUtPmRldik7CisJaWYgKHJldCkKKwkJZ290byBmcmVlX2RldjsKKworb3V0OgorCXJldHVybiByZXQ7CisKK2ZyZWVfZGV2OgorCXB1dF9kZXZpY2UocG11LT5kZXYpOworCWdvdG8gb3V0OworfQorCitpbnQgcGVyZl9wbXVfcmVnaXN0ZXIoc3RydWN0IHBtdSAqcG11LCBjaGFyICpuYW1lLCBpbnQgdHlwZSkKIHsKIAlpbnQgY3B1LCByZXQ7CiAKQEAgLTUxOTUsMTMgKzUzNzEsMzggQEAKIAlpZiAoIXBtdS0+cG11X2Rpc2FibGVfY291bnQpCiAJCWdvdG8gdW5sb2NrOwogCisJcG11LT50eXBlID0gLTE7CisJaWYgKCFuYW1lKQorCQlnb3RvIHNraXBfdHlwZTsKKwlwbXUtPm5hbWUgPSBuYW1lOworCisJaWYgKHR5cGUgPCAwKSB7CisJCWludCBlcnIgPSBpZHJfcHJlX2dldCgmcG11X2lkciwgR0ZQX0tFUk5FTCk7CisJCWlmICghZXJyKQorCQkJZ290byBmcmVlX3BkYzsKKworCQllcnIgPSBpZHJfZ2V0X25ld19hYm92ZSgmcG11X2lkciwgcG11LCBQRVJGX1RZUEVfTUFYLCAmdHlwZSk7CisJCWlmIChlcnIpIHsKKwkJCXJldCA9IGVycjsKKwkJCWdvdG8gZnJlZV9wZGM7CisJCX0KKwl9CisJcG11LT50eXBlID0gdHlwZTsKKworCWlmIChwbXVfYnVzX3J1bm5pbmcpIHsKKwkJcmV0ID0gcG11X2Rldl9hbGxvYyhwbXUpOworCQlpZiAocmV0KQorCQkJZ290byBmcmVlX2lkcjsKKwl9CisKK3NraXBfdHlwZToKIAlwbXUtPnBtdV9jcHVfY29udGV4dCA9IGZpbmRfcG11X2NvbnRleHQocG11LT50YXNrX2N0eF9ucik7CiAJaWYgKHBtdS0+cG11X2NwdV9jb250ZXh0KQogCQlnb3RvIGdvdF9jcHVfY29udGV4dDsKIAogCXBtdS0+cG11X2NwdV9jb250ZXh0ID0gYWxsb2NfcGVyY3B1KHN0cnVjdCBwZXJmX2NwdV9jb250ZXh0KTsKIAlpZiAoIXBtdS0+cG11X2NwdV9jb250ZXh0KQotCQlnb3RvIGZyZWVfcGRjOworCQlnb3RvIGZyZWVfZGV2OwogCiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewogCQlzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4OwpAQCAtNTI0NSw2ICs1NDQ2LDE0IEBACiAKIAlyZXR1cm4gcmV0OwogCitmcmVlX2RldjoKKwlkZXZpY2VfZGVsKHBtdS0+ZGV2KTsKKwlwdXRfZGV2aWNlKHBtdS0+ZGV2KTsKKworZnJlZV9pZHI6CisJaWYgKHBtdS0+dHlwZSA+PSBQRVJGX1RZUEVfTUFYKQorCQlpZHJfcmVtb3ZlKCZwbXVfaWRyLCBwbXUtPnR5cGUpOworCiBmcmVlX3BkYzoKIAlmcmVlX3BlcmNwdShwbXUtPnBtdV9kaXNhYmxlX2NvdW50KTsKIAlnb3RvIHVubG9jazsKQEAgLTUyNjQsNiArNTQ3MywxMCBAQAogCXN5bmNocm9uaXplX3JjdSgpOwogCiAJZnJlZV9wZXJjcHUocG11LT5wbXVfZGlzYWJsZV9jb3VudCk7CisJaWYgKHBtdS0+dHlwZSA+PSBQRVJGX1RZUEVfTUFYKQorCQlpZHJfcmVtb3ZlKCZwbXVfaWRyLCBwbXUtPnR5cGUpOworCWRldmljZV9kZWwocG11LT5kZXYpOworCXB1dF9kZXZpY2UocG11LT5kZXYpOwogCWZyZWVfcG11X2NvbnRleHQocG11KTsKIH0KIApAQCAtNTI3Myw2ICs1NDg2LDEzIEBACiAJaW50IGlkeDsKIAogCWlkeCA9IHNyY3VfcmVhZF9sb2NrKCZwbXVzX3NyY3UpOworCisJcmN1X3JlYWRfbG9jaygpOworCXBtdSA9IGlkcl9maW5kKCZwbXVfaWRyLCBldmVudC0+YXR0ci50eXBlKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKKwlpZiAocG11KQorCQlnb3RvIHVubG9jazsKKwogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBtdSwgJnBtdXMsIGVudHJ5KSB7CiAJCWludCByZXQgPSBwbXUtPmV2ZW50X2luaXQoZXZlbnQpOwogCQlpZiAoIXJldCkKQEAgLTU3MzgsNiArNTk1OCwxMiBAQAogCW11dGV4X3VubG9jaygmY3VycmVudC0+cGVyZl9ldmVudF9tdXRleCk7CiAKIAkvKgorCSAqIFByZWNhbGN1bGF0ZSBzYW1wbGVfZGF0YSBzaXplcworCSAqLworCXBlcmZfZXZlbnRfX2hlYWRlcl9zaXplKGV2ZW50KTsKKwlwZXJmX2V2ZW50X19pZF9oZWFkZXJfc2l6ZShldmVudCk7CisKKwkvKgogCSAqIERyb3AgdGhlIHJlZmVyZW5jZSBvbiB0aGUgZ3JvdXBfZXZlbnQgYWZ0ZXIgcGxhY2luZyB0aGUKIAkgKiBuZXcgZXZlbnQgb24gdGhlIHNpYmxpbmdfbGlzdC4gVGhpcyBlbnN1cmVzIGRlc3RydWN0aW9uCiAJICogb2YgdGhlIGdyb3VwIGxlYWRlciB3aWxsIGZpbmQgdGhlIHBvaW50ZXIgdG8gaXRzZWxmIGluCkBAIC02MDkwLDYgKzYzMTYsMTIgQEAKIAljaGlsZF9ldmVudC0+b3ZlcmZsb3dfaGFuZGxlciA9IHBhcmVudF9ldmVudC0+b3ZlcmZsb3dfaGFuZGxlcjsKIAogCS8qCisJICogUHJlY2FsY3VsYXRlIHNhbXBsZV9kYXRhIHNpemVzCisJICovCisJcGVyZl9ldmVudF9faGVhZGVyX3NpemUoY2hpbGRfZXZlbnQpOworCXBlcmZfZXZlbnRfX2lkX2hlYWRlcl9zaXplKGNoaWxkX2V2ZW50KTsKKworCS8qCiAJICogTGluayBpdCB1cCBpbiB0aGUgY2hpbGQncyBjb250ZXh0OgogCSAqLwogCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmY2hpbGRfY3R4LT5sb2NrLCBmbGFncyk7CkBAIC02MzIwLDcgKzY1NTIsNyBAQAogCW11dGV4X3VubG9jaygmc3doYXNoLT5obGlzdF9tdXRleCk7CiB9CiAKLSNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKKyNpZiBkZWZpbmVkIENPTkZJR19IT1RQTFVHX0NQVSB8fCBkZWZpbmVkIENPTkZJR19LRVhFQwogc3RhdGljIHZvaWQgcGVyZl9wbXVfcm90YXRlX3N0b3Aoc3RydWN0IHBtdSAqcG11KQogewogCXN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHggPSB0aGlzX2NwdV9wdHIocG11LT5wbXVfY3B1X2NvbnRleHQpOwpAQCAtNjM3NCw2ICs2NjA2LDI2IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgcGVyZl9ldmVudF9leGl0X2NwdShpbnQgY3B1KSB7IH0KICNlbmRpZgogCitzdGF0aWMgaW50CitwZXJmX3JlYm9vdChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5vdGlmaWVyLCB1bnNpZ25lZCBsb25nIHZhbCwgdm9pZCAqdikKK3sKKwlpbnQgY3B1OworCisJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpCisJCXBlcmZfZXZlbnRfZXhpdF9jcHUoY3B1KTsKKworCXJldHVybiBOT1RJRllfT0s7Cit9CisKKy8qCisgKiBSdW4gdGhlIHBlcmYgcmVib290IG5vdGlmaWVyIGF0IHRoZSB2ZXJ5IGxhc3QgcG9zc2libGUgbW9tZW50IHNvIHRoYXQKKyAqIHRoZSBnZW5lcmljIHdhdGNoZG9nIGNvZGUgcnVucyBhcyBsb25nIGFzIHBvc3NpYmxlLgorICovCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHBlcmZfcmVib290X25vdGlmaWVyID0geworCS5ub3RpZmllcl9jYWxsID0gcGVyZl9yZWJvb3QsCisJLnByaW9yaXR5ID0gSU5UX01JTiwKK307CisKIHN0YXRpYyBpbnQgX19jcHVpbml0CiBwZXJmX2NwdV9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLCB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqaGNwdSkKIHsKQEAgLTY0MDIsMTQgKzY2NTQsNDUgQEAKIHsKIAlpbnQgcmV0OwogCisJaWRyX2luaXQoJnBtdV9pZHIpOworCiAJcGVyZl9ldmVudF9pbml0X2FsbF9jcHVzKCk7CiAJaW5pdF9zcmN1X3N0cnVjdCgmcG11c19zcmN1KTsKLQlwZXJmX3BtdV9yZWdpc3RlcigmcGVyZl9zd2V2ZW50KTsKLQlwZXJmX3BtdV9yZWdpc3RlcigmcGVyZl9jcHVfY2xvY2spOwotCXBlcmZfcG11X3JlZ2lzdGVyKCZwZXJmX3Rhc2tfY2xvY2spOworCXBlcmZfcG11X3JlZ2lzdGVyKCZwZXJmX3N3ZXZlbnQsICJzb2Z0d2FyZSIsIFBFUkZfVFlQRV9TT0ZUV0FSRSk7CisJcGVyZl9wbXVfcmVnaXN0ZXIoJnBlcmZfY3B1X2Nsb2NrLCBOVUxMLCAtMSk7CisJcGVyZl9wbXVfcmVnaXN0ZXIoJnBlcmZfdGFza19jbG9jaywgTlVMTCwgLTEpOwogCXBlcmZfdHBfcmVnaXN0ZXIoKTsKIAlwZXJmX2NwdV9ub3RpZmllcihwZXJmX2NwdV9ub3RpZnkpOworCXJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigmcGVyZl9yZWJvb3Rfbm90aWZpZXIpOwogCiAJcmV0ID0gaW5pdF9od19icmVha3BvaW50KCk7CiAJV0FSTihyZXQsICJod19icmVha3BvaW50IGluaXRpYWxpemF0aW9uIGZhaWxlZCB3aXRoOiAlZCIsIHJldCk7CiB9CisKK3N0YXRpYyBpbnQgX19pbml0IHBlcmZfZXZlbnRfc3lzZnNfaW5pdCh2b2lkKQoreworCXN0cnVjdCBwbXUgKnBtdTsKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmcG11c19sb2NrKTsKKworCXJldCA9IGJ1c19yZWdpc3RlcigmcG11X2J1cyk7CisJaWYgKHJldCkKKwkJZ290byB1bmxvY2s7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBtdSwgJnBtdXMsIGVudHJ5KSB7CisJCWlmICghcG11LT5uYW1lIHx8IHBtdS0+dHlwZSA8IDApCisJCQljb250aW51ZTsKKworCQlyZXQgPSBwbXVfZGV2X2FsbG9jKHBtdSk7CisJCVdBUk4ocmV0LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHBtdTogJXMsIHJlYXNvbiAlZFxuIiwgcG11LT5uYW1lLCByZXQpOworCX0KKwlwbXVfYnVzX3J1bm5pbmcgPSAxOworCXJldCA9IDA7CisKK3VubG9jazoKKwltdXRleF91bmxvY2soJnBtdXNfbG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorZGV2aWNlX2luaXRjYWxsKHBlcmZfZXZlbnRfc3lzZnNfaW5pdCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvcG9zaXgtdGltZXJzLmMgYi9rZXJuZWwvcG9zaXgtdGltZXJzLmMKaW5kZXggOWNhNDk3My4uOTNiZDJlYiAxMDA2NDQKLS0tIGEva2VybmVsL3Bvc2l4LXRpbWVycy5jCisrKyBiL2tlcm5lbC9wb3NpeC10aW1lcnMuYwpAQCAtMTQ1LDcgKzE0NSwxMyBAQAogCiBzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgcG9zaXhfdGltZXJfZm4oc3RydWN0IGhydGltZXIgKmRhdGEpOwogCi1zdGF0aWMgc3RydWN0IGtfaXRpbWVyICpsb2NrX3RpbWVyKHRpbWVyX3QgdGltZXJfaWQsIHVuc2lnbmVkIGxvbmcgKmZsYWdzKTsKK3N0YXRpYyBzdHJ1Y3Qga19pdGltZXIgKl9fbG9ja190aW1lcih0aW1lcl90IHRpbWVyX2lkLCB1bnNpZ25lZCBsb25nICpmbGFncyk7CisKKyNkZWZpbmUgbG9ja190aW1lcih0aWQsIGZsYWdzKQkJCQkJCSAgIFwKKyh7CXN0cnVjdCBrX2l0aW1lciAqX190aW1yOwkJCQkJICAgXAorCV9fY29uZF9sb2NrKCZfX3RpbXItPml0X2xvY2ssIF9fdGltciA9IF9fbG9ja190aW1lcih0aWQsIGZsYWdzKSk7ICBcCisJX190aW1yOwkJCQkJCQkJICAgXAorfSkKIAogc3RhdGljIGlubGluZSB2b2lkIHVubG9ja190aW1lcihzdHJ1Y3Qga19pdGltZXIgKnRpbXIsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7CkBAIC02MTksNyArNjI1LDcgQEAKICAqIHRoZSBmaW5kIHRvIHRoZSB0aW1lciBsb2NrLiAgVG8gYXZvaWQgYSBkZWFkIGxvY2ssIHRoZSB0aW1lciBpZCBNVVNUCiAgKiBiZSByZWxlYXNlIHdpdGggb3V0IGhvbGRpbmcgdGhlIHRpbWVyIGxvY2suCiAgKi8KLXN0YXRpYyBzdHJ1Y3Qga19pdGltZXIgKmxvY2tfdGltZXIodGltZXJfdCB0aW1lcl9pZCwgdW5zaWduZWQgbG9uZyAqZmxhZ3MpCitzdGF0aWMgc3RydWN0IGtfaXRpbWVyICpfX2xvY2tfdGltZXIodGltZXJfdCB0aW1lcl9pZCwgdW5zaWduZWQgbG9uZyAqZmxhZ3MpCiB7CiAJc3RydWN0IGtfaXRpbWVyICp0aW1yOwogCS8qCmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvTWFrZWZpbGUgYi9rZXJuZWwvcG93ZXIvTWFrZWZpbGUKaW5kZXggZjkwNjNjNi4uYjc1NTk3MiAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL01ha2VmaWxlCisrKyBiL2tlcm5lbC9wb3dlci9NYWtlZmlsZQpAQCAtMSw3ICsxLDQgQEAKLQotaWZlcSAoJChDT05GSUdfUE1fREVCVUcpLHkpCi1FWFRSQV9DRkxBR1MJKz0JLURERUJVRwotZW5kaWYKK2NjZmxhZ3MtJChDT05GSUdfUE1fREVCVUcpCTo9CS1EREVCVUcKIAogb2JqLSQoQ09ORklHX1BNKQkJKz0gbWFpbi5vCiBvYmotJChDT05GSUdfUE1fU0xFRVApCQkrPSBjb25zb2xlLm8KZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9oaWJlcm5hdGUuYyBiL2tlcm5lbC9wb3dlci9oaWJlcm5hdGUuYwppbmRleCAwNDhkMGI1Li44NzBmNzJiIDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvaGliZXJuYXRlLmMKKysrIGIva2VybmVsL3Bvd2VyL2hpYmVybmF0ZS5jCkBAIC02Miw3ICs2Miw3IEBACiB7CiAJaWYgKG9wcyAmJiAhKG9wcy0+YmVnaW4gJiYgb3BzLT5lbmQgJiYgIG9wcy0+cHJlX3NuYXBzaG90CiAJICAgICYmIG9wcy0+cHJlcGFyZSAmJiBvcHMtPmZpbmlzaCAmJiBvcHMtPmVudGVyICYmIG9wcy0+cHJlX3Jlc3RvcmUKLQkgICAgJiYgb3BzLT5yZXN0b3JlX2NsZWFudXApKSB7CisJICAgICYmIG9wcy0+cmVzdG9yZV9jbGVhbnVwICYmIG9wcy0+bGVhdmUpKSB7CiAJCVdBUk5fT04oMSk7CiAJCXJldHVybjsKIAl9CkBAIC0yNzgsNyArMjc4LDcgQEAKIAkJZ290byBFbmFibGVfaXJxczsKIAl9CiAKLQlpZiAoaGliZXJuYXRpb25fdGVzdChURVNUX0NPUkUpIHx8ICFwbV9jaGVja193YWtldXBfZXZlbnRzKCkpCisJaWYgKGhpYmVybmF0aW9uX3Rlc3QoVEVTVF9DT1JFKSB8fCBwbV93YWtldXBfcGVuZGluZygpKQogCQlnb3RvIFBvd2VyX3VwOwogCiAJaW5fc3VzcGVuZCA9IDE7CkBAIC01MTYsNyArNTE2LDcgQEAKIAogCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAJc3lzZGV2X3N1c3BlbmQoUE1TR19ISUJFUk5BVEUpOwotCWlmICghcG1fY2hlY2tfd2FrZXVwX2V2ZW50cygpKSB7CisJaWYgKHBtX3dha2V1cF9wZW5kaW5nKCkpIHsKIAkJZXJyb3IgPSAtRUFHQUlOOwogCQlnb3RvIFBvd2VyX3VwOwogCX0KQEAgLTY0Nyw2ICs2NDcsNyBAQAogCQlzd3N1c3BfZnJlZSgpOwogCQlpZiAoIWVycm9yKQogCQkJcG93ZXJfZG93bigpOworCQlpbl9zdXNwZW5kID0gMDsKIAkJcG1fcmVzdG9yZV9nZnBfbWFzaygpOwogCX0gZWxzZSB7CiAJCXByX2RlYnVnKCJQTTogSW1hZ2UgcmVzdG9yZWQgc3VjY2Vzc2Z1bGx5LlxuIik7CmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvcHJvY2Vzcy5jIGIva2VybmVsL3Bvd2VyL3Byb2Nlc3MuYwppbmRleCBlNTBiNGMxLi5kNmQyYTEwIDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvcHJvY2Vzcy5jCisrKyBiL2tlcm5lbC9wb3dlci9wcm9jZXNzLmMKQEAgLTY0LDYgKzY0LDEyIEBACiAJCQkgKiBwZXJ0dXJiIGEgdGFzayBpbiBUQVNLX1NUT1BQRUQgb3IgVEFTS19UUkFDRUQuCiAJCQkgKiBJdCBpcyAiZnJvemVuIGVub3VnaCIuICBJZiB0aGUgdGFzayBkb2VzIHdha2UKIAkJCSAqIHVwLCBpdCB3aWxsIGltbWVkaWF0ZWx5IGNhbGwgdHJ5X3RvX2ZyZWV6ZS4KKwkJCSAqCisJCQkgKiBCZWNhdXNlIGZyZWV6ZV90YXNrKCkgZ29lcyB0aHJvdWdoIHAncworCQkJICogc2NoZWR1bGVyIGxvY2sgYWZ0ZXIgc2V0dGluZyBUSUZfRlJFRVpFLCBpdCdzCisJCQkgKiBndWFyYW50ZWVkIHRoYXQgZWl0aGVyIHdlIHNlZSBUQVNLX1JVTk5JTkcgb3IKKwkJCSAqIHRyeV90b19zdG9wKCkgYWZ0ZXIgc2NoZWR1bGUoKSBpbiBwdHJhY2Uvc2lnbmFsCisJCQkgKiBzdG9wIHNlZXMgVElGX0ZSRUVaRS4KIAkJCSAqLwogCQkJaWYgKCF0YXNrX2lzX3N0b3BwZWRfb3JfdHJhY2VkKHApICYmCiAJCQkgICAgIWZyZWV6ZXJfc2hvdWxkX3NraXAocCkpCkBAIC03OSw3ICs4NSw3IEBACiAJCWlmICghdG9kbyB8fCB0aW1lX2FmdGVyKGppZmZpZXMsIGVuZF90aW1lKSkKIAkJCWJyZWFrOwogCi0JCWlmICghcG1fY2hlY2tfd2FrZXVwX2V2ZW50cygpKSB7CisJCWlmIChwbV93YWtldXBfcGVuZGluZygpKSB7CiAJCQl3YWtldXAgPSB0cnVlOwogCQkJYnJlYWs7CiAJCX0KZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9zdXNwZW5kLmMgYi9rZXJuZWwvcG93ZXIvc3VzcGVuZC5jCmluZGV4IGVjZjc3MDUuLjg4NTBkZjYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9zdXNwZW5kLmMKKysrIGIva2VybmVsL3Bvd2VyL3N1c3BlbmQuYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KKyNpbmNsdWRlIDx0cmFjZS9ldmVudHMvcG93ZXIuaD4KIAogI2luY2x1ZGUgInBvd2VyLmgiCiAKQEAgLTE2Myw3ICsxNjQsNyBAQAogCiAJZXJyb3IgPSBzeXNkZXZfc3VzcGVuZChQTVNHX1NVU1BFTkQpOwogCWlmICghZXJyb3IpIHsKLQkJaWYgKCFzdXNwZW5kX3Rlc3QoVEVTVF9DT1JFKSAmJiBwbV9jaGVja193YWtldXBfZXZlbnRzKCkpIHsKKwkJaWYgKCEoc3VzcGVuZF90ZXN0KFRFU1RfQ09SRSkgfHwgcG1fd2FrZXVwX3BlbmRpbmcoKSkpIHsKIAkJCWVycm9yID0gc3VzcGVuZF9vcHMtPmVudGVyKHN0YXRlKTsKIAkJCWV2ZW50c19jaGVja19lbmFibGVkID0gZmFsc2U7CiAJCX0KQEAgLTIwMSw2ICsyMDIsNyBAQAogCWlmICghc3VzcGVuZF9vcHMpCiAJCXJldHVybiAtRU5PU1lTOwogCisJdHJhY2VfbWFjaGluZV9zdXNwZW5kKHN0YXRlKTsKIAlpZiAoc3VzcGVuZF9vcHMtPmJlZ2luKSB7CiAJCWVycm9yID0gc3VzcGVuZF9vcHMtPmJlZ2luKHN0YXRlKTsKIAkJaWYgKGVycm9yKQpAQCAtMjI5LDYgKzIzMSw3IEBACiAgQ2xvc2U6CiAJaWYgKHN1c3BlbmRfb3BzLT5lbmQpCiAJCXN1c3BlbmRfb3BzLT5lbmQoKTsKKwl0cmFjZV9tYWNoaW5lX3N1c3BlbmQoUFdSX0VWRU5UX0VYSVQpOwogCXJldHVybiBlcnJvcjsKIAogIFJlY292ZXJfcGxhdGZvcm06CmRpZmYgLS1naXQgYS9rZXJuZWwvcHJpbnRrLmMgYi9rZXJuZWwvcHJpbnRrLmMKaW5kZXggYTIzMzE1ZC4uNDY0MmE1YyAxMDA2NDQKLS0tIGEva2VybmVsL3ByaW50ay5jCisrKyBiL2tlcm5lbC9wcmludGsuYwpAQCAtNDMsMTIgKzQzLDYgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCiAvKgotICogZm9yX2VhY2hfY29uc29sZSgpIGFsbG93cyB5b3UgdG8gaXRlcmF0ZSBvbiBlYWNoIGNvbnNvbGUKLSAqLwotI2RlZmluZSBmb3JfZWFjaF9jb25zb2xlKGNvbikgXAotCWZvciAoY29uID0gY29uc29sZV9kcml2ZXJzOyBjb24gIT0gTlVMTDsgY29uID0gY29uLT5uZXh0KQotCi0vKgogICogQXJjaGl0ZWN0dXJlcyBjYW4gb3ZlcnJpZGUgaXQ6CiAgKi8KIHZvaWQgYXNtbGlua2FnZSBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSkgZWFybHlfcHJpbnRrKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQpAQCAtMTA3NCwxNyArMTA2OCwxNyBAQAogCiB2b2lkIHByaW50a190aWNrKHZvaWQpCiB7Ci0JaWYgKF9fZ2V0X2NwdV92YXIocHJpbnRrX3BlbmRpbmcpKSB7Ci0JCV9fZ2V0X2NwdV92YXIocHJpbnRrX3BlbmRpbmcpID0gMDsKKwlpZiAoX190aGlzX2NwdV9yZWFkKHByaW50a19wZW5kaW5nKSkgeworCQlfX3RoaXNfY3B1X3dyaXRlKHByaW50a19wZW5kaW5nLCAwKTsKIAkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZsb2dfd2FpdCk7CiAJfQogfQogCiBpbnQgcHJpbnRrX25lZWRzX2NwdShpbnQgY3B1KQogewotCWlmICh1bmxpa2VseShjcHVfaXNfb2ZmbGluZShjcHUpKSkKKwlpZiAoY3B1X2lzX29mZmxpbmUoY3B1KSkKIAkJcHJpbnRrX3RpY2soKTsKLQlyZXR1cm4gcGVyX2NwdShwcmludGtfcGVuZGluZywgY3B1KTsKKwlyZXR1cm4gX190aGlzX2NwdV9yZWFkKHByaW50a19wZW5kaW5nKTsKIH0KIAogdm9pZCB3YWtlX3VwX2tsb2dkKHZvaWQpCkBAIC0xMzU5LDYgKzEzNTMsNyBAQAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2didWZfbG9jaywgZmxhZ3MpOwogCX0KIAlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9zeXNmc19ub3RpZnkoKTsKIAogCS8qCiAJICogQnkgdW5yZWdpc3RlcmluZyB0aGUgYm9vdGNvbnNvbGVzIGFmdGVyIHdlIGVuYWJsZSB0aGUgcmVhbCBjb25zb2xlCkBAIC0xNDE3LDYgKzE0MTIsNyBAQAogCQljb25zb2xlX2RyaXZlcnMtPmZsYWdzIHw9IENPTl9DT05TREVWOwogCiAJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfc3lzZnNfbm90aWZ5KCk7CiAJcmV0dXJuIHJlczsKIH0KIEVYUE9SVF9TWU1CT0wodW5yZWdpc3Rlcl9jb25zb2xlKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3V0aW55LmMgYi9rZXJuZWwvcmN1dGlueS5jCmluZGV4IGQ4MDY3MzUuLjAzNDQ5MzcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3V0aW55LmMKKysrIGIva2VybmVsL3JjdXRpbnkuYwpAQCAtMzYsMzEgKzM2LDE2IEBACiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogCi0vKiBHbG9iYWwgY29udHJvbCB2YXJpYWJsZXMgZm9yIHJjdXBkYXRlIGNhbGxiYWNrIG1lY2hhbmlzbS4gKi8KLXN0cnVjdCByY3VfY3RybGJsayB7Ci0Jc3RydWN0IHJjdV9oZWFkICpyY3VjYmxpc3Q7CS8qIExpc3Qgb2YgcGVuZGluZyBjYWxsYmFja3MgKENCcykuICovCi0Jc3RydWN0IHJjdV9oZWFkICoqZG9uZXRhaWw7CS8qIC0+bmV4dCBwb2ludGVyIG9mIGxhc3QgImRvbmUiIENCLiAqLwotCXN0cnVjdCByY3VfaGVhZCAqKmN1cnRhaWw7CS8qIC0+bmV4dCBwb2ludGVyIG9mIGxhc3QgQ0IuICovCi19OwotCi0vKiBEZWZpbml0aW9uIGZvciByY3VwZGF0ZSBjb250cm9sIGJsb2NrLiAqLwotc3RhdGljIHN0cnVjdCByY3VfY3RybGJsayByY3Vfc2NoZWRfY3RybGJsayA9IHsKLQkuZG9uZXRhaWwJPSAmcmN1X3NjaGVkX2N0cmxibGsucmN1Y2JsaXN0LAotCS5jdXJ0YWlsCT0gJnJjdV9zY2hlZF9jdHJsYmxrLnJjdWNibGlzdCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmN1X2N0cmxibGsgcmN1X2JoX2N0cmxibGsgPSB7Ci0JLmRvbmV0YWlsCT0gJnJjdV9iaF9jdHJsYmxrLnJjdWNibGlzdCwKLQkuY3VydGFpbAk9ICZyY3VfYmhfY3RybGJsay5yY3VjYmxpc3QsCi19OwotCi0jaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MKLWludCByY3Vfc2NoZWR1bGVyX2FjdGl2ZSBfX3JlYWRfbW9zdGx5OwotRVhQT1JUX1NZTUJPTF9HUEwocmN1X3NjaGVkdWxlcl9hY3RpdmUpOwotI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQyAqLworLyogQ29udHJvbHMgZm9yIHJjdV9rdGhyZWFkKCkga3RocmVhZCwgcmVwbGFjaW5nIFJDVV9TT0ZUSVJRIHVzZWQgcHJldmlvdXNseS4gKi8KK3N0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnJjdV9rdGhyZWFkX3Rhc2s7CitzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQocmN1X2t0aHJlYWRfd3EpOworc3RhdGljIHVuc2lnbmVkIGxvbmcgaGF2ZV9yY3Vfa3RocmVhZF93b3JrOworc3RhdGljIHZvaWQgaW52b2tlX3JjdV9rdGhyZWFkKHZvaWQpOwogCiAvKiBGb3J3YXJkIGRlY2xhcmF0aW9ucyBmb3IgcmN1dGlueV9wbHVnaW4uaC4gKi8KLXN0YXRpYyB2b2lkIF9fcmN1X3Byb2Nlc3NfY2FsbGJhY2tzKHN0cnVjdCByY3VfY3RybGJsayAqcmNwKTsKK3N0cnVjdCByY3VfY3RybGJsazsKK3N0YXRpYyB2b2lkIHJjdV9wcm9jZXNzX2NhbGxiYWNrcyhzdHJ1Y3QgcmN1X2N0cmxibGsgKnJjcCk7CitzdGF0aWMgaW50IHJjdV9rdGhyZWFkKHZvaWQgKmFyZyk7CiBzdGF0aWMgdm9pZCBfX2NhbGxfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZCwKIAkJICAgICAgIHZvaWQgKCpmdW5jKShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSksCiAJCSAgICAgICBzdHJ1Y3QgcmN1X2N0cmxibGsgKnJjcCk7CkBAIC0xMjMsNyArMTA4LDcgQEAKIHsKIAlpZiAocmN1X3FzY3RyX2hlbHAoJnJjdV9zY2hlZF9jdHJsYmxrKSArCiAJICAgIHJjdV9xc2N0cl9oZWxwKCZyY3VfYmhfY3RybGJsaykpCi0JCXJhaXNlX3NvZnRpcnEoUkNVX1NPRlRJUlEpOworCQlpbnZva2VfcmN1X2t0aHJlYWQoKTsKIH0KIAogLyoKQEAgLTEzMiw3ICsxMTcsNyBAQAogdm9pZCByY3VfYmhfcXMoaW50IGNwdSkKIHsKIAlpZiAocmN1X3FzY3RyX2hlbHAoJnJjdV9iaF9jdHJsYmxrKSkKLQkJcmFpc2Vfc29mdGlycShSQ1VfU09GVElSUSk7CisJCWludm9rZV9yY3Vfa3RocmVhZCgpOwogfQogCiAvKgpAQCAtMTUyLDEzICsxMzcsMTQgQEAKIH0KIAogLyoKLSAqIEhlbHBlciBmdW5jdGlvbiBmb3IgcmN1X3Byb2Nlc3NfY2FsbGJhY2tzKCkgdGhhdCBvcGVyYXRlcyBvbiB0aGUKLSAqIHNwZWNpZmllZCByY3VfY3RybGtibGsgc3RydWN0dXJlLgorICogSW52b2tlIHRoZSBSQ1UgY2FsbGJhY2tzIG9uIHRoZSBzcGVjaWZpZWQgcmN1X2N0cmxrYmxrIHN0cnVjdHVyZQorICogd2hvc2UgZ3JhY2UgcGVyaW9kIGhhcyBlbGFwc2VkLgogICovCi1zdGF0aWMgdm9pZCBfX3JjdV9wcm9jZXNzX2NhbGxiYWNrcyhzdHJ1Y3QgcmN1X2N0cmxibGsgKnJjcCkKK3N0YXRpYyB2b2lkIHJjdV9wcm9jZXNzX2NhbGxiYWNrcyhzdHJ1Y3QgcmN1X2N0cmxibGsgKnJjcCkKIHsKIAlzdHJ1Y3QgcmN1X2hlYWQgKm5leHQsICpsaXN0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJUkNVX1RSQUNFKGludCBjYl9jb3VudCA9IDApOwogCiAJLyogSWYgbm8gUkNVIGNhbGxiYWNrcyByZWFkeSB0byBpbnZva2UsIGp1c3QgcmV0dXJuLiAqLwogCWlmICgmcmNwLT5yY3VjYmxpc3QgPT0gcmNwLT5kb25ldGFpbCkKQEAgLTE4MCwxOSArMTY2LDU4IEBACiAJCW5leHQgPSBsaXN0LT5uZXh0OwogCQlwcmVmZXRjaChuZXh0KTsKIAkJZGVidWdfcmN1X2hlYWRfdW5xdWV1ZShsaXN0KTsKKwkJbG9jYWxfYmhfZGlzYWJsZSgpOwogCQlsaXN0LT5mdW5jKGxpc3QpOworCQlsb2NhbF9iaF9lbmFibGUoKTsKIAkJbGlzdCA9IG5leHQ7CisJCVJDVV9UUkFDRShjYl9jb3VudCsrKTsKIAl9CisJUkNVX1RSQUNFKHJjdV90cmFjZV9zdWJfcWxlbihyY3AsIGNiX2NvdW50KSk7CiB9CiAKIC8qCi0gKiBJbnZva2UgYW55IGNhbGxiYWNrcyB3aG9zZSBncmFjZSBwZXJpb2QgaGFzIGNvbXBsZXRlZC4KKyAqIFRoaXMga3RocmVhZCBpbnZva2VzIFJDVSBjYWxsYmFja3Mgd2hvc2UgZ3JhY2UgcGVyaW9kcyBoYXZlCisgKiBlbGFwc2VkLiAgSXQgaXMgYXdha2VuZWQgYXMgbmVlZGVkLCBhbmQgdGFrZXMgdGhlIHBsYWNlIG9mIHRoZQorICogUkNVX1NPRlRJUlEgdGhhdCB3YXMgdXNlZCBwcmV2aW91c2x5IGZvciB0aGlzIHB1cnBvc2UuCisgKiBUaGlzIGlzIGEga3RocmVhZCwgYnV0IGl0IGlzIG5ldmVyIHN0b3BwZWQsIGF0IGxlYXN0IG5vdCB1bnRpbAorICogdGhlIHN5c3RlbSBnb2VzIGRvd24uCiAgKi8KLXN0YXRpYyB2b2lkIHJjdV9wcm9jZXNzX2NhbGxiYWNrcyhzdHJ1Y3Qgc29mdGlycV9hY3Rpb24gKnVudXNlZCkKK3N0YXRpYyBpbnQgcmN1X2t0aHJlYWQodm9pZCAqYXJnKQogewotCV9fcmN1X3Byb2Nlc3NfY2FsbGJhY2tzKCZyY3Vfc2NoZWRfY3RybGJsayk7Ci0JX19yY3VfcHJvY2Vzc19jYWxsYmFja3MoJnJjdV9iaF9jdHJsYmxrKTsKLQlyY3VfcHJlZW1wdF9wcm9jZXNzX2NhbGxiYWNrcygpOworCXVuc2lnbmVkIGxvbmcgd29yazsKKwl1bnNpZ25lZCBsb25nIG1vcmV3b3JrOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlmb3IgKDs7KSB7CisJCXdhaXRfZXZlbnQocmN1X2t0aHJlYWRfd3EsIGhhdmVfcmN1X2t0aHJlYWRfd29yayAhPSAwKTsKKwkJbW9yZXdvcmsgPSByY3VfYm9vc3QoKTsKKwkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCQl3b3JrID0gaGF2ZV9yY3Vfa3RocmVhZF93b3JrOworCQloYXZlX3JjdV9rdGhyZWFkX3dvcmsgPSBtb3Jld29yazsKKwkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCQlpZiAod29yaykgeworCQkJcmN1X3Byb2Nlc3NfY2FsbGJhY2tzKCZyY3Vfc2NoZWRfY3RybGJsayk7CisJCQlyY3VfcHJvY2Vzc19jYWxsYmFja3MoJnJjdV9iaF9jdHJsYmxrKTsKKwkJCXJjdV9wcmVlbXB0X3Byb2Nlc3NfY2FsbGJhY2tzKCk7CisJCX0KKwkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKDEpOyAvKiBMZWF2ZSBDUFUgZm9yIG90aGVycy4gKi8KKwl9CisKKwlyZXR1cm4gMDsgIC8qIE5vdCByZWFjaGVkLCBidXQgbmVlZGVkIHRvIHNodXQgZ2NjIHVwLiAqLworfQorCisvKgorICogV2FrZSB1cCByY3Vfa3RocmVhZCgpIHRvIHByb2Nlc3MgY2FsbGJhY2tzIG5vdyBlbGlnaWJsZSBmb3IgaW52b2NhdGlvbgorICogb3IgdG8gYm9vc3QgcmVhZGVycy4KKyAqLworc3RhdGljIHZvaWQgaW52b2tlX3JjdV9rdGhyZWFkKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwloYXZlX3JjdV9rdGhyZWFkX3dvcmsgPSAxOworCXdha2VfdXAoJnJjdV9rdGhyZWFkX3dxKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKIC8qCkBAIC0yMzAsNiArMjU1LDcgQEAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJKnJjcC0+Y3VydGFpbCA9IGhlYWQ7CiAJcmNwLT5jdXJ0YWlsID0gJmhlYWQtPm5leHQ7CisJUkNVX1RSQUNFKHJjcC0+cWxlbisrKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKQEAgLTI4Miw3ICszMDgsMTYgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJjdV9iYXJyaWVyX3NjaGVkKTsKIAotdm9pZCBfX2luaXQgcmN1X2luaXQodm9pZCkKKy8qCisgKiBTcGF3biB0aGUga3RocmVhZCB0aGF0IGludm9rZXMgUkNVIGNhbGxiYWNrcy4KKyAqLworc3RhdGljIGludCBfX2luaXQgcmN1X3NwYXduX2t0aHJlYWRzKHZvaWQpCiB7Ci0Jb3Blbl9zb2Z0aXJxKFJDVV9TT0ZUSVJRLCByY3VfcHJvY2Vzc19jYWxsYmFja3MpOworCXN0cnVjdCBzY2hlZF9wYXJhbSBzcDsKKworCXJjdV9rdGhyZWFkX3Rhc2sgPSBrdGhyZWFkX3J1bihyY3Vfa3RocmVhZCwgTlVMTCwgInJjdV9rdGhyZWFkIik7CisJc3Auc2NoZWRfcHJpb3JpdHkgPSBSQ1VfQk9PU1RfUFJJTzsKKwlzY2hlZF9zZXRzY2hlZHVsZXJfbm9jaGVjayhyY3Vfa3RocmVhZF90YXNrLCBTQ0hFRF9GSUZPLCAmc3ApOworCXJldHVybiAwOwogfQorZWFybHlfaW5pdGNhbGwocmN1X3NwYXduX2t0aHJlYWRzKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3V0aW55X3BsdWdpbi5oIGIva2VybmVsL3JjdXRpbnlfcGx1Z2luLmgKaW5kZXggNmNlY2E0Zi4uMDE1YWJhZSAxMDA2NDQKLS0tIGEva2VybmVsL3JjdXRpbnlfcGx1Z2luLmgKKysrIGIva2VybmVsL3JjdXRpbnlfcGx1Z2luLmgKQEAgLTIyLDYgKzIyLDQwIEBACiAgKiBBdXRob3I6IFBhdWwgRS4gTWNLZW5uZXkgPHBhdWxtY2tAbGludXgudm5ldC5pYm0uY29tPgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisKKyNpZmRlZiBDT05GSUdfUkNVX1RSQUNFCisjZGVmaW5lIFJDVV9UUkFDRShzdG10KQlzdG10CisjZWxzZSAvKiAjaWZkZWYgQ09ORklHX1JDVV9UUkFDRSAqLworI2RlZmluZSBSQ1VfVFJBQ0Uoc3RtdCkKKyNlbmRpZiAvKiAjZWxzZSAjaWZkZWYgQ09ORklHX1JDVV9UUkFDRSAqLworCisvKiBHbG9iYWwgY29udHJvbCB2YXJpYWJsZXMgZm9yIHJjdXBkYXRlIGNhbGxiYWNrIG1lY2hhbmlzbS4gKi8KK3N0cnVjdCByY3VfY3RybGJsayB7CisJc3RydWN0IHJjdV9oZWFkICpyY3VjYmxpc3Q7CS8qIExpc3Qgb2YgcGVuZGluZyBjYWxsYmFja3MgKENCcykuICovCisJc3RydWN0IHJjdV9oZWFkICoqZG9uZXRhaWw7CS8qIC0+bmV4dCBwb2ludGVyIG9mIGxhc3QgImRvbmUiIENCLiAqLworCXN0cnVjdCByY3VfaGVhZCAqKmN1cnRhaWw7CS8qIC0+bmV4dCBwb2ludGVyIG9mIGxhc3QgQ0IuICovCisJUkNVX1RSQUNFKGxvbmcgcWxlbik7CQkvKiBOdW1iZXIgb2YgcGVuZGluZyBDQnMuICovCit9OworCisvKiBEZWZpbml0aW9uIGZvciByY3VwZGF0ZSBjb250cm9sIGJsb2NrLiAqLworc3RhdGljIHN0cnVjdCByY3VfY3RybGJsayByY3Vfc2NoZWRfY3RybGJsayA9IHsKKwkuZG9uZXRhaWwJPSAmcmN1X3NjaGVkX2N0cmxibGsucmN1Y2JsaXN0LAorCS5jdXJ0YWlsCT0gJnJjdV9zY2hlZF9jdHJsYmxrLnJjdWNibGlzdCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmN1X2N0cmxibGsgcmN1X2JoX2N0cmxibGsgPSB7CisJLmRvbmV0YWlsCT0gJnJjdV9iaF9jdHJsYmxrLnJjdWNibGlzdCwKKwkuY3VydGFpbAk9ICZyY3VfYmhfY3RybGJsay5yY3VjYmxpc3QsCit9OworCisjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MKK2ludCByY3Vfc2NoZWR1bGVyX2FjdGl2ZSBfX3JlYWRfbW9zdGx5OworRVhQT1JUX1NZTUJPTF9HUEwocmN1X3NjaGVkdWxlcl9hY3RpdmUpOworI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQyAqLworCiAjaWZkZWYgQ09ORklHX1RJTllfUFJFRU1QVF9SQ1UKIAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CkBAIC00NiwxNyArODAsNDUgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkICpncF90YXNrczsKIAkJCQkvKiBQb2ludGVyIHRvIHRoZSBmaXJzdCB0YXNrIGJsb2NraW5nIHRoZSAqLwogCQkJCS8qICBjdXJyZW50IGdyYWNlIHBlcmlvZCwgb3IgTlVMTCBpZiB0aGVyZSAqLwotCQkJCS8qICBpcyBub3Qgc3VjaCB0YXNrLiAqLworCQkJCS8qICBpcyBubyBzdWNoIHRhc2suICovCiAJc3RydWN0IGxpc3RfaGVhZCAqZXhwX3Rhc2tzOwogCQkJCS8qIFBvaW50ZXIgdG8gZmlyc3QgdGFzayBibG9ja2luZyB0aGUgKi8KIAkJCQkvKiAgY3VycmVudCBleHBlZGl0ZWQgZ3JhY2UgcGVyaW9kLCBvciBOVUxMICovCiAJCQkJLyogIGlmIHRoZXJlIGlzIG5vIHN1Y2ggdGFzay4gIElmIHRoZXJlICovCiAJCQkJLyogIGlzIG5vIGN1cnJlbnQgZXhwZWRpdGVkIGdyYWNlIHBlcmlvZCwgKi8KIAkJCQkvKiAgdGhlbiB0aGVyZSBjYW5ub3QgYmUgYW55IHN1Y2ggdGFzay4gKi8KKyNpZmRlZiBDT05GSUdfUkNVX0JPT1NUCisJc3RydWN0IGxpc3RfaGVhZCAqYm9vc3RfdGFza3M7CisJCQkJLyogUG9pbnRlciB0byBmaXJzdCB0YXNrIHRoYXQgbmVlZHMgdG8gYmUgKi8KKwkJCQkvKiAgcHJpb3JpdHktYm9vc3RlZCwgb3IgTlVMTCBpZiBubyBwcmlvcml0eSAqLworCQkJCS8qICBib29zdGluZyBpcyBuZWVkZWQuICBJZiB0aGVyZSBpcyBubyAqLworCQkJCS8qICBjdXJyZW50IG9yIGV4cGVkaXRlZCBncmFjZSBwZXJpb2QsIHRoZXJlICovCisJCQkJLyogIGNhbiBiZSBubyBzdWNoIHRhc2suICovCisjZW5kaWYgLyogI2lmZGVmIENPTkZJR19SQ1VfQk9PU1QgKi8KIAl1OCBncG51bTsJCS8qIEN1cnJlbnQgZ3JhY2UgcGVyaW9kLiAqLwogCXU4IGdwY3B1OwkJLyogTGFzdCBncmFjZSBwZXJpb2QgYmxvY2tlZCBieSB0aGUgQ1BVLiAqLwogCXU4IGNvbXBsZXRlZDsJCS8qIExhc3QgZ3JhY2UgcGVyaW9kIGNvbXBsZXRlZC4gKi8KIAkJCQkvKiAgSWYgYWxsIHRocmVlIGFyZSBlcXVhbCwgUkNVIGlzIGlkbGUuICovCisjaWZkZWYgQ09ORklHX1JDVV9CT09TVAorCXM4IGJvb3N0ZWRfdGhpc19ncDsJLyogSGFzIGJvb3N0aW5nIGFscmVhZHkgaGFwcGVuZWQ/ICovCisJdW5zaWduZWQgbG9uZyBib29zdF90aW1lOyAvKiBXaGVuIHRvIHN0YXJ0IGJvb3N0aW5nIChqaWZmaWVzKSAqLworI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfUkNVX0JPT1NUICovCisjaWZkZWYgQ09ORklHX1JDVV9UUkFDRQorCXVuc2lnbmVkIGxvbmcgbl9ncmFjZV9wZXJpb2RzOworI2lmZGVmIENPTkZJR19SQ1VfQk9PU1QKKwl1bnNpZ25lZCBsb25nIG5fdGFza3NfYm9vc3RlZDsKKwl1bnNpZ25lZCBsb25nIG5fZXhwX2Jvb3N0czsKKwl1bnNpZ25lZCBsb25nIG5fbm9ybWFsX2Jvb3N0czsKKwl1bnNpZ25lZCBsb25nIG5fbm9ybWFsX2JhbGtfYmxrZF90YXNrczsKKwl1bnNpZ25lZCBsb25nIG5fbm9ybWFsX2JhbGtfZ3BfdGFza3M7CisJdW5zaWduZWQgbG9uZyBuX25vcm1hbF9iYWxrX2Jvb3N0X3Rhc2tzOworCXVuc2lnbmVkIGxvbmcgbl9ub3JtYWxfYmFsa19ib29zdGVkOworCXVuc2lnbmVkIGxvbmcgbl9ub3JtYWxfYmFsa19ub3R5ZXQ7CisJdW5zaWduZWQgbG9uZyBuX25vcm1hbF9iYWxrX25vczsKKwl1bnNpZ25lZCBsb25nIG5fZXhwX2JhbGtfYmxrZF90YXNrczsKKwl1bnNpZ25lZCBsb25nIG5fZXhwX2JhbGtfbm9zOworI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfUkNVX0JPT1NUICovCisjZW5kaWYgLyogI2lmZGVmIENPTkZJR19SQ1VfVFJBQ0UgKi8KIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmN1X3ByZWVtcHRfY3RybGJsayByY3VfcHJlZW1wdF9jdHJsYmxrID0gewpAQCAtMTIyLDYgKzE4NCwyMTAgQEAKIH0KIAogLyoKKyAqIEFkdmFuY2UgYSAtPmJsa2RfdGFza3MtbGlzdCBwb2ludGVyIHRvIHRoZSBuZXh0IGVudHJ5LCBpbnN0ZWFkCisgKiByZXR1cm5pbmcgTlVMTCBpZiBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0LgorICovCitzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCAqcmN1X25leHRfbm9kZV9lbnRyeShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqbnA7CisKKwlucCA9IHQtPnJjdV9ub2RlX2VudHJ5Lm5leHQ7CisJaWYgKG5wID09ICZyY3VfcHJlZW1wdF9jdHJsYmxrLmJsa2RfdGFza3MpCisJCW5wID0gTlVMTDsKKwlyZXR1cm4gbnA7Cit9CisKKyNpZmRlZiBDT05GSUdfUkNVX1RSQUNFCisKKyNpZmRlZiBDT05GSUdfUkNVX0JPT1NUCitzdGF0aWMgdm9pZCByY3VfaW5pdGlhdGVfYm9vc3RfdHJhY2Uodm9pZCk7CitzdGF0aWMgdm9pZCByY3VfaW5pdGlhdGVfZXhwX2Jvb3N0X3RyYWNlKHZvaWQpOworI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfUkNVX0JPT1NUICovCisKKy8qCisgKiBEdW1wIGFkZGl0aW9uYWwgc3RhdGlzdGljZSBmb3IgVElOWV9QUkVFTVBUX1JDVS4KKyAqLworc3RhdGljIHZvaWQgc2hvd190aW55X3ByZWVtcHRfc3RhdHMoc3RydWN0IHNlcV9maWxlICptKQoreworCXNlcV9wcmludGYobSwgInJjdV9wcmVlbXB0OiBxbGVuPSVsZCBncD0lbHUgZyV1L3AldS9jJXUgdGFza3M9JWMlYyVjXG4iLAorCQkgICByY3VfcHJlZW1wdF9jdHJsYmxrLnJjYi5xbGVuLAorCQkgICByY3VfcHJlZW1wdF9jdHJsYmxrLm5fZ3JhY2VfcGVyaW9kcywKKwkJICAgcmN1X3ByZWVtcHRfY3RybGJsay5ncG51bSwKKwkJICAgcmN1X3ByZWVtcHRfY3RybGJsay5ncGNwdSwKKwkJICAgcmN1X3ByZWVtcHRfY3RybGJsay5jb21wbGV0ZWQsCisJCSAgICJULiJbbGlzdF9lbXB0eSgmcmN1X3ByZWVtcHRfY3RybGJsay5ibGtkX3Rhc2tzKV0sCisJCSAgICJOLiJbIXJjdV9wcmVlbXB0X2N0cmxibGsuZ3BfdGFza3NdLAorCQkgICAiRS4iWyFyY3VfcHJlZW1wdF9jdHJsYmxrLmV4cF90YXNrc10pOworI2lmZGVmIENPTkZJR19SQ1VfQk9PU1QKKwlzZXFfcHJpbnRmKG0sICIgICAgICAgICAgICAgdHRiPSVjIGJ0Zz0iLAorCQkgICAiQi4iWyFyY3VfcHJlZW1wdF9jdHJsYmxrLmJvb3N0X3Rhc2tzXSk7CisJc3dpdGNoIChyY3VfcHJlZW1wdF9jdHJsYmxrLmJvb3N0ZWRfdGhpc19ncCkgeworCWNhc2UgLTE6CisJCXNlcV9wdXRzKG0sICJleHAiKTsKKwkJYnJlYWs7CisJY2FzZSAwOgorCQlzZXFfcHV0cyhtLCAibm8iKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlzZXFfcHV0cyhtLCAiYmVndW4iKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlzZXFfcHV0cyhtLCAiZG9uZSIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlzZXFfcHJpbnRmKG0sICI/JWQ/IiwgcmN1X3ByZWVtcHRfY3RybGJsay5ib29zdGVkX3RoaXNfZ3ApOworCX0KKwlzZXFfcHJpbnRmKG0sICIgbnRiPSVsdSBuZWI9JWx1IG5uYj0lbHUgaj0lMDR4IGJ0PSUwNHhcbiIsCisJCSAgIHJjdV9wcmVlbXB0X2N0cmxibGsubl90YXNrc19ib29zdGVkLAorCQkgICByY3VfcHJlZW1wdF9jdHJsYmxrLm5fZXhwX2Jvb3N0cywKKwkJICAgcmN1X3ByZWVtcHRfY3RybGJsay5uX25vcm1hbF9ib29zdHMsCisJCSAgIChpbnQpKGppZmZpZXMgJiAweGZmZmYpLAorCQkgICAoaW50KShyY3VfcHJlZW1wdF9jdHJsYmxrLmJvb3N0X3RpbWUgJiAweGZmZmYpKTsKKwlzZXFfcHJpbnRmKG0sICIgICAgICAgICAgICAgJXM6IG50PSVsdSBndD0lbHUgYnQ9JWx1IGI9JWx1IG55PSVsdSBub3M9JWx1XG4iLAorCQkgICAibm9ybWFsIGJhbGsiLAorCQkgICByY3VfcHJlZW1wdF9jdHJsYmxrLm5fbm9ybWFsX2JhbGtfYmxrZF90YXNrcywKKwkJICAgcmN1X3ByZWVtcHRfY3RybGJsay5uX25vcm1hbF9iYWxrX2dwX3Rhc2tzLAorCQkgICByY3VfcHJlZW1wdF9jdHJsYmxrLm5fbm9ybWFsX2JhbGtfYm9vc3RfdGFza3MsCisJCSAgIHJjdV9wcmVlbXB0X2N0cmxibGsubl9ub3JtYWxfYmFsa19ib29zdGVkLAorCQkgICByY3VfcHJlZW1wdF9jdHJsYmxrLm5fbm9ybWFsX2JhbGtfbm90eWV0LAorCQkgICByY3VfcHJlZW1wdF9jdHJsYmxrLm5fbm9ybWFsX2JhbGtfbm9zKTsKKwlzZXFfcHJpbnRmKG0sICIgICAgICAgICAgICAgZXhwIGJhbGs6IGJ0PSVsdSBub3M9JWx1XG4iLAorCQkgICByY3VfcHJlZW1wdF9jdHJsYmxrLm5fZXhwX2JhbGtfYmxrZF90YXNrcywKKwkJICAgcmN1X3ByZWVtcHRfY3RybGJsay5uX2V4cF9iYWxrX25vcyk7CisjZW5kaWYgLyogI2lmZGVmIENPTkZJR19SQ1VfQk9PU1QgKi8KK30KKworI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfUkNVX1RSQUNFICovCisKKyNpZmRlZiBDT05GSUdfUkNVX0JPT1NUCisKKyNpbmNsdWRlICJydG11dGV4X2NvbW1vbi5oIgorCisvKgorICogQ2Fycnkgb3V0IFJDVSBwcmlvcml0eSBib29zdGluZyBvbiB0aGUgdGFzayBpbmRpY2F0ZWQgYnkgLT5ib29zdF90YXNrcywKKyAqIGFuZCBhZHZhbmNlIC0+Ym9vc3RfdGFza3MgdG8gdGhlIG5leHQgdGFzayBpbiB0aGUgLT5ibGtkX3Rhc2tzIGxpc3QuCisgKi8KK3N0YXRpYyBpbnQgcmN1X2Jvb3N0KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgcnRfbXV0ZXggbXR4OworCXN0cnVjdCBsaXN0X2hlYWQgKm5wOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdDsKKworCWlmIChyY3VfcHJlZW1wdF9jdHJsYmxrLmJvb3N0X3Rhc2tzID09IE5VTEwpCisJCXJldHVybiAwOyAgLyogTm90aGluZyB0byBib29zdC4gKi8KKwlyYXdfbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXJjdV9wcmVlbXB0X2N0cmxibGsuYm9vc3RlZF90aGlzX2dwKys7CisJdCA9IGNvbnRhaW5lcl9vZihyY3VfcHJlZW1wdF9jdHJsYmxrLmJvb3N0X3Rhc2tzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QsCisJCQkgcmN1X25vZGVfZW50cnkpOworCW5wID0gcmN1X25leHRfbm9kZV9lbnRyeSh0KTsKKwlydF9tdXRleF9pbml0X3Byb3h5X2xvY2tlZCgmbXR4LCB0KTsKKwl0LT5yY3VfYm9vc3RfbXV0ZXggPSAmbXR4OworCXQtPnJjdV9yZWFkX3VubG9ja19zcGVjaWFsIHw9IFJDVV9SRUFEX1VOTE9DS19CT09TVEVEOworCXJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJcnRfbXV0ZXhfbG9jaygmbXR4KTsKKwlSQ1VfVFJBQ0UocmN1X3ByZWVtcHRfY3RybGJsay5uX3Rhc2tzX2Jvb3N0ZWQrKyk7CisJcmN1X3ByZWVtcHRfY3RybGJsay5ib29zdGVkX3RoaXNfZ3ArKzsKKwlydF9tdXRleF91bmxvY2soJm10eCk7CisJcmV0dXJuIHJjdV9wcmVlbXB0X2N0cmxibGsuYm9vc3RfdGFza3MgIT0gTlVMTDsKK30KKworLyoKKyAqIENoZWNrIHRvIHNlZSBpZiBpdCBpcyBub3cgdGltZSB0byBzdGFydCBib29zdGluZyBSQ1UgcmVhZGVycyBibG9ja2luZworICogdGhlIGN1cnJlbnQgZ3JhY2UgcGVyaW9kLCBhbmQsIGlmIHNvLCB0ZWxsIHRoZSByY3Vfa3RocmVhZF90YXNrIHRvCisgKiBzdGFydCBib29zdGluZyB0aGVtLiAgSWYgdGhlcmUgaXMgYW4gZXhwZWRpdGVkIGJvb3N0IGluIHByb2dyZXNzLAorICogd2Ugd2FpdCBmb3IgaXQgdG8gY29tcGxldGUuCisgKgorICogSWYgdGhlcmUgYXJlIG5vIGJsb2NrZWQgcmVhZGVycyBibG9ja2luZyB0aGUgY3VycmVudCBncmFjZSBwZXJpb2QsCisgKiByZXR1cm4gMCB0byBsZXQgdGhlIGNhbGxlciBrbm93LCBvdGhlcndpc2UgcmV0dXJuIDEuICBOb3RlIHRoYXQgdGhpcworICogcmV0dXJuIHZhbHVlIGlzIGluZGVwZW5kZW50IG9mIHdoZXRoZXIgb3Igbm90IGJvb3N0aW5nIHdhcyBkb25lLgorICovCitzdGF0aWMgaW50IHJjdV9pbml0aWF0ZV9ib29zdCh2b2lkKQoreworCWlmICghcmN1X3ByZWVtcHRfYmxvY2tlZF9yZWFkZXJzX2NncCgpKSB7CisJCVJDVV9UUkFDRShyY3VfcHJlZW1wdF9jdHJsYmxrLm5fbm9ybWFsX2JhbGtfYmxrZF90YXNrcysrKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmIChyY3VfcHJlZW1wdF9jdHJsYmxrLmdwX3Rhc2tzICE9IE5VTEwgJiYKKwkgICAgcmN1X3ByZWVtcHRfY3RybGJsay5ib29zdF90YXNrcyA9PSBOVUxMICYmCisJICAgIHJjdV9wcmVlbXB0X2N0cmxibGsuYm9vc3RlZF90aGlzX2dwID09IDAgJiYKKwkgICAgVUxPTkdfQ01QX0dFKGppZmZpZXMsIHJjdV9wcmVlbXB0X2N0cmxibGsuYm9vc3RfdGltZSkpIHsKKwkJcmN1X3ByZWVtcHRfY3RybGJsay5ib29zdF90YXNrcyA9IHJjdV9wcmVlbXB0X2N0cmxibGsuZ3BfdGFza3M7CisJCWludm9rZV9yY3Vfa3RocmVhZCgpOworCQlSQ1VfVFJBQ0UocmN1X3ByZWVtcHRfY3RybGJsay5uX25vcm1hbF9ib29zdHMrKyk7CisJfSBlbHNlCisJCVJDVV9UUkFDRShyY3VfaW5pdGlhdGVfYm9vc3RfdHJhY2UoKSk7CisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBJbml0aWF0ZSBib29zdGluZyBmb3IgYW4gZXhwZWRpdGVkIGdyYWNlIHBlcmlvZC4KKyAqLworc3RhdGljIHZvaWQgcmN1X2luaXRpYXRlX2V4cGVkaXRlZF9ib29zdCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlyYXdfbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWlmICghbGlzdF9lbXB0eSgmcmN1X3ByZWVtcHRfY3RybGJsay5ibGtkX3Rhc2tzKSkgeworCQlyY3VfcHJlZW1wdF9jdHJsYmxrLmJvb3N0X3Rhc2tzID0KKwkJCXJjdV9wcmVlbXB0X2N0cmxibGsuYmxrZF90YXNrcy5uZXh0OworCQlyY3VfcHJlZW1wdF9jdHJsYmxrLmJvb3N0ZWRfdGhpc19ncCA9IC0xOworCQlpbnZva2VfcmN1X2t0aHJlYWQoKTsKKwkJUkNVX1RSQUNFKHJjdV9wcmVlbXB0X2N0cmxibGsubl9leHBfYm9vc3RzKyspOworCX0gZWxzZQorCQlSQ1VfVFJBQ0UocmN1X2luaXRpYXRlX2V4cF9ib29zdF90cmFjZSgpKTsKKwlyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCisjZGVmaW5lIFJDVV9CT09TVF9ERUxBWV9KSUZGSUVTIERJVl9ST1VORF9VUChDT05GSUdfUkNVX0JPT1NUX0RFTEFZICogSFosIDEwMDApOworCisvKgorICogRG8gcHJpb3JpdHktYm9vc3QgYWNjb3VudGluZyBmb3IgdGhlIHN0YXJ0IG9mIGEgbmV3IGdyYWNlIHBlcmlvZC4KKyAqLworc3RhdGljIHZvaWQgcmN1X3ByZWVtcHRfYm9vc3Rfc3RhcnRfZ3Aodm9pZCkKK3sKKwlyY3VfcHJlZW1wdF9jdHJsYmxrLmJvb3N0X3RpbWUgPSBqaWZmaWVzICsgUkNVX0JPT1NUX0RFTEFZX0pJRkZJRVM7CisJaWYgKHJjdV9wcmVlbXB0X2N0cmxibGsuYm9vc3RlZF90aGlzX2dwID4gMCkKKwkJcmN1X3ByZWVtcHRfY3RybGJsay5ib29zdGVkX3RoaXNfZ3AgPSAwOworfQorCisjZWxzZSAvKiAjaWZkZWYgQ09ORklHX1JDVV9CT09TVCAqLworCisvKgorICogSWYgdGhlcmUgaXMgbm8gUkNVIHByaW9yaXR5IGJvb3N0aW5nLCB3ZSBkb24ndCBib29zdC4KKyAqLworc3RhdGljIGludCByY3VfYm9vc3Qodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIElmIHRoZXJlIGlzIG5vIFJDVSBwcmlvcml0eSBib29zdGluZywgd2UgZG9uJ3QgaW5pdGlhdGUgYm9vc3RpbmcsCisgKiBidXQgd2UgZG8gaW5kaWNhdGUgd2hldGhlciB0aGVyZSBhcmUgYmxvY2tlZCByZWFkZXJzIGJsb2NraW5nIHRoZQorICogY3VycmVudCBncmFjZSBwZXJpb2QuCisgKi8KK3N0YXRpYyBpbnQgcmN1X2luaXRpYXRlX2Jvb3N0KHZvaWQpCit7CisJcmV0dXJuIHJjdV9wcmVlbXB0X2Jsb2NrZWRfcmVhZGVyc19jZ3AoKTsKK30KKworLyoKKyAqIElmIHRoZXJlIGlzIG5vIFJDVSBwcmlvcml0eSBib29zdGluZywgd2UgZG9uJ3QgaW5pdGlhdGUgZXhwZWRpdGVkIGJvb3N0aW5nLgorICovCitzdGF0aWMgdm9pZCByY3VfaW5pdGlhdGVfZXhwZWRpdGVkX2Jvb3N0KHZvaWQpCit7Cit9CisKKy8qCisgKiBJZiB0aGVyZSBpcyBubyBSQ1UgcHJpb3JpdHkgYm9vc3RpbmcsIG5vdGhpbmcgdG8gZG8gYXQgZ3JhY2UtcGVyaW9kIHN0YXJ0LgorICovCitzdGF0aWMgdm9pZCByY3VfcHJlZW1wdF9ib29zdF9zdGFydF9ncCh2b2lkKQoreworfQorCisjZW5kaWYgLyogZWxzZSAjaWZkZWYgQ09ORklHX1JDVV9CT09TVCAqLworCisvKgogICogUmVjb3JkIGEgcHJlZW1wdGlibGUtUkNVIHF1aWVzY2VudCBzdGF0ZSBmb3IgdGhlIHNwZWNpZmllZCBDUFUuICBOb3RlCiAgKiB0aGF0IHRoaXMganVzdCBtZWFucyB0aGF0IHRoZSB0YXNrIGN1cnJlbnRseSBydW5uaW5nIG9uIHRoZSBDUFUgaXMKICAqIGluIGEgcXVpZXNjZW50IHN0YXRlLiAgVGhlcmUgbWlnaHQgYmUgYW55IG51bWJlciBvZiB0YXNrcyBibG9ja2VkCkBAIC0xNDgsMTEgKzQxNCwxNCBAQAogCXJjdV9wcmVlbXB0X2N0cmxibGsuZ3BjcHUgPSByY3VfcHJlZW1wdF9jdHJsYmxrLmdwbnVtOwogCWN1cnJlbnQtPnJjdV9yZWFkX3VubG9ja19zcGVjaWFsICY9IH5SQ1VfUkVBRF9VTkxPQ0tfTkVFRF9RUzsKIAorCS8qIElmIHRoZXJlIGlzIG5vIEdQIHRoZW4gdGhlcmUgaXMgbm90aGluZyBtb3JlIHRvIGRvLiAgKi8KKwlpZiAoIXJjdV9wcmVlbXB0X2dwX2luX3Byb2dyZXNzKCkpCisJCXJldHVybjsKIAkvKgotCSAqIElmIHRoZXJlIGlzIG5vIEdQLCBvciBpZiBibG9ja2VkIHJlYWRlcnMgYXJlIHN0aWxsIGJsb2NraW5nIEdQLAotCSAqIHRoZW4gdGhlcmUgaXMgbm90aGluZyBtb3JlIHRvIGRvLgorCSAqIENoZWNrIHVwIG9uIGJvb3N0aW5nLiAgSWYgdGhlcmUgYXJlIG5vIHJlYWRlcnMgYmxvY2tpbmcgdGhlCisJICogY3VycmVudCBncmFjZSBwZXJpb2QsIGxlYXZlLgogCSAqLwotCWlmICghcmN1X3ByZWVtcHRfZ3BfaW5fcHJvZ3Jlc3MoKSB8fCByY3VfcHJlZW1wdF9ibG9ja2VkX3JlYWRlcnNfY2dwKCkpCisJaWYgKHJjdV9pbml0aWF0ZV9ib29zdCgpKQogCQlyZXR1cm47CiAKIAkvKiBBZHZhbmNlIGNhbGxiYWNrcy4gKi8KQEAgLTE2NCw5ICs0MzMsOSBAQAogCWlmICghcmN1X3ByZWVtcHRfYmxvY2tlZF9yZWFkZXJzX2FueSgpKQogCQlyY3VfcHJlZW1wdF9jdHJsYmxrLnJjYi5kb25ldGFpbCA9IHJjdV9wcmVlbXB0X2N0cmxibGsubmV4dHRhaWw7CiAKLQkvKiBJZiB0aGVyZSBhcmUgZG9uZSBjYWxsYmFja3MsIG1ha2UgUkNVX1NPRlRJUlEgcHJvY2VzcyB0aGVtLiAqLworCS8qIElmIHRoZXJlIGFyZSBkb25lIGNhbGxiYWNrcywgY2F1c2UgdGhlbSB0byBiZSBpbnZva2VkLiAqLwogCWlmICgqcmN1X3ByZWVtcHRfY3RybGJsay5yY2IuZG9uZXRhaWwgIT0gTlVMTCkKLQkJcmFpc2Vfc29mdGlycShSQ1VfU09GVElSUSk7CisJCWludm9rZV9yY3Vfa3RocmVhZCgpOwogfQogCiAvKgpAQCAtMTc4LDEyICs0NDcsMTYgQEAKIAogCQkvKiBPZmZpY2lhbCBzdGFydCBvZiBHUC4gKi8KIAkJcmN1X3ByZWVtcHRfY3RybGJsay5ncG51bSsrOworCQlSQ1VfVFJBQ0UocmN1X3ByZWVtcHRfY3RybGJsay5uX2dyYWNlX3BlcmlvZHMrKyk7CiAKIAkJLyogQW55IGJsb2NrZWQgUkNVIHJlYWRlcnMgYmxvY2sgbmV3IEdQLiAqLwogCQlpZiAocmN1X3ByZWVtcHRfYmxvY2tlZF9yZWFkZXJzX2FueSgpKQogCQkJcmN1X3ByZWVtcHRfY3RybGJsay5ncF90YXNrcyA9CiAJCQkJcmN1X3ByZWVtcHRfY3RybGJsay5ibGtkX3Rhc2tzLm5leHQ7CiAKKwkJLyogU2V0IHVwIGZvciBSQ1UgcHJpb3JpdHkgYm9vc3RpbmcuICovCisJCXJjdV9wcmVlbXB0X2Jvb3N0X3N0YXJ0X2dwKCk7CisKIAkJLyogSWYgdGhlcmUgaXMgbm8gcnVubmluZyByZWFkZXIsIENQVSBpcyBkb25lIHdpdGggR1AuICovCiAJCWlmICghcmN1X3ByZWVtcHRfcnVubmluZ19yZWFkZXIoKSkKIAkJCXJjdV9wcmVlbXB0X2NwdV9xcygpOwpAQCAtMzA0LDE0ICs1NzcsMTYgQEAKIAkJICovCiAJCWVtcHR5ID0gIXJjdV9wcmVlbXB0X2Jsb2NrZWRfcmVhZGVyc19jZ3AoKTsKIAkJZW1wdHlfZXhwID0gcmN1X3ByZWVtcHRfY3RybGJsay5leHBfdGFza3MgPT0gTlVMTDsKLQkJbnAgPSB0LT5yY3Vfbm9kZV9lbnRyeS5uZXh0OwotCQlpZiAobnAgPT0gJnJjdV9wcmVlbXB0X2N0cmxibGsuYmxrZF90YXNrcykKLQkJCW5wID0gTlVMTDsKKwkJbnAgPSByY3VfbmV4dF9ub2RlX2VudHJ5KHQpOwogCQlsaXN0X2RlbCgmdC0+cmN1X25vZGVfZW50cnkpOwogCQlpZiAoJnQtPnJjdV9ub2RlX2VudHJ5ID09IHJjdV9wcmVlbXB0X2N0cmxibGsuZ3BfdGFza3MpCiAJCQlyY3VfcHJlZW1wdF9jdHJsYmxrLmdwX3Rhc2tzID0gbnA7CiAJCWlmICgmdC0+cmN1X25vZGVfZW50cnkgPT0gcmN1X3ByZWVtcHRfY3RybGJsay5leHBfdGFza3MpCiAJCQlyY3VfcHJlZW1wdF9jdHJsYmxrLmV4cF90YXNrcyA9IG5wOworI2lmZGVmIENPTkZJR19SQ1VfQk9PU1QKKwkJaWYgKCZ0LT5yY3Vfbm9kZV9lbnRyeSA9PSByY3VfcHJlZW1wdF9jdHJsYmxrLmJvb3N0X3Rhc2tzKQorCQkJcmN1X3ByZWVtcHRfY3RybGJsay5ib29zdF90YXNrcyA9IG5wOworI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfUkNVX0JPT1NUICovCiAJCUlOSVRfTElTVF9IRUFEKCZ0LT5yY3Vfbm9kZV9lbnRyeSk7CiAKIAkJLyoKQEAgLTMzMSw2ICs2MDYsMTQgQEAKIAkJaWYgKCFlbXB0eV9leHAgJiYgcmN1X3ByZWVtcHRfY3RybGJsay5leHBfdGFza3MgPT0gTlVMTCkKIAkJCXJjdV9yZXBvcnRfZXhwX2RvbmUoKTsKIAl9CisjaWZkZWYgQ09ORklHX1JDVV9CT09TVAorCS8qIFVuYm9vc3Qgc2VsZiBpZiB3YXMgYm9vc3RlZC4gKi8KKwlpZiAoc3BlY2lhbCAmIFJDVV9SRUFEX1VOTE9DS19CT09TVEVEKSB7CisJCXQtPnJjdV9yZWFkX3VubG9ja19zcGVjaWFsICY9IH5SQ1VfUkVBRF9VTkxPQ0tfQk9PU1RFRDsKKwkJcnRfbXV0ZXhfdW5sb2NrKHQtPnJjdV9ib29zdF9tdXRleCk7CisJCXQtPnJjdV9ib29zdF9tdXRleCA9IE5VTEw7CisJfQorI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfUkNVX0JPT1NUICovCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCkBAIC0zNzQsNyArNjU3LDcgQEAKIAkJcmN1X3ByZWVtcHRfY3B1X3FzKCk7CiAJaWYgKCZyY3VfcHJlZW1wdF9jdHJsYmxrLnJjYi5yY3VjYmxpc3QgIT0KIAkgICAgcmN1X3ByZWVtcHRfY3RybGJsay5yY2IuZG9uZXRhaWwpCi0JCXJhaXNlX3NvZnRpcnEoUkNVX1NPRlRJUlEpOworCQlpbnZva2VfcmN1X2t0aHJlYWQoKTsKIAlpZiAocmN1X3ByZWVtcHRfZ3BfaW5fcHJvZ3Jlc3MoKSAmJgogCSAgICByY3VfY3B1X2Jsb2NraW5nX2N1cl9ncCgpICYmCiAJICAgIHJjdV9wcmVlbXB0X3J1bm5pbmdfcmVhZGVyKCkpCkBAIC0zODMsNyArNjY2LDcgQEAKIAogLyoKICAqIFRJTllfUFJFRU1QVF9SQ1UgaGFzIGFuIGV4dHJhIGNhbGxiYWNrLWxpc3QgdGFpbCBwb2ludGVyIHRvCi0gKiB1cGRhdGUsIHNvIHRoaXMgaXMgaW52b2tlZCBmcm9tIF9fcmN1X3Byb2Nlc3NfY2FsbGJhY2tzKCkgdG8KKyAqIHVwZGF0ZSwgc28gdGhpcyBpcyBpbnZva2VkIGZyb20gcmN1X3Byb2Nlc3NfY2FsbGJhY2tzKCkgdG8KICAqIGhhbmRsZSB0aGF0IGNhc2UuICBPZiBjb3Vyc2UsIGl0IGlzIGludm9rZWQgZm9yIGFsbCBmbGF2b3JzIG9mCiAgKiBSQ1UsIGJ1dCBSQ1UgY2FsbGJhY2tzIGNhbiBhcHBlYXIgb25seSBvbiBvbmUgb2YgdGhlIGxpc3RzLCBhbmQKICAqIG5laXRoZXIgLT5uZXh0dGFpbCBub3IgLT5kb25ldGFpbCBjYW4gcG9zc2libHkgYmUgTlVMTCwgc28gdGhlcmUKQEAgLTQwMCw3ICs2ODMsNyBAQAogICovCiBzdGF0aWMgdm9pZCByY3VfcHJlZW1wdF9wcm9jZXNzX2NhbGxiYWNrcyh2b2lkKQogewotCV9fcmN1X3Byb2Nlc3NfY2FsbGJhY2tzKCZyY3VfcHJlZW1wdF9jdHJsYmxrLnJjYik7CisJcmN1X3Byb2Nlc3NfY2FsbGJhY2tzKCZyY3VfcHJlZW1wdF9jdHJsYmxrLnJjYik7CiB9CiAKIC8qCkBAIC00MTcsNiArNzAwLDcgQEAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJKnJjdV9wcmVlbXB0X2N0cmxibGsubmV4dHRhaWwgPSBoZWFkOwogCXJjdV9wcmVlbXB0X2N0cmxibGsubmV4dHRhaWwgPSAmaGVhZC0+bmV4dDsKKwlSQ1VfVFJBQ0UocmN1X3ByZWVtcHRfY3RybGJsay5yY2IucWxlbisrKTsKIAlyY3VfcHJlZW1wdF9zdGFydF9ncCgpOyAgLyogY2hlY2tzIHRvIHNlZSBpZiBHUCBuZWVkZWQuICovCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQpAQCAtNTMyLDYgKzgxNiw3IEBACiAKIAkvKiBXYWl0IGZvciB0YWlsIG9mIC0+YmxrZF90YXNrcyBsaXN0IHRvIGRyYWluLiAqLwogCWlmIChyY3VfcHJlZW1wdGVkX3JlYWRlcnNfZXhwKCkpCisJCXJjdV9pbml0aWF0ZV9leHBlZGl0ZWRfYm9vc3QoKTsKIAkJd2FpdF9ldmVudChzeW5jX3JjdV9wcmVlbXB0X2V4cF93cSwKIAkJCSAgICFyY3VfcHJlZW1wdGVkX3JlYWRlcnNfZXhwKCkpOwogCkBAIC01NzIsNiArODU3LDI3IEBACiAKICNlbHNlIC8qICNpZmRlZiBDT05GSUdfVElOWV9QUkVFTVBUX1JDVSAqLwogCisjaWZkZWYgQ09ORklHX1JDVV9UUkFDRQorCisvKgorICogQmVjYXVzZSBwcmVlbXB0aWJsZSBSQ1UgZG9lcyBub3QgZXhpc3QsIGl0IGlzIG5vdCBuZWNlc3NhcnkgdG8KKyAqIGR1bXAgb3V0IGl0cyBzdGF0aXN0aWNzLgorICovCitzdGF0aWMgdm9pZCBzaG93X3RpbnlfcHJlZW1wdF9zdGF0cyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCit7Cit9CisKKyNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX1JDVV9UUkFDRSAqLworCisvKgorICogQmVjYXVzZSBwcmVlbXB0aWJsZSBSQ1UgZG9lcyBub3QgZXhpc3QsIGl0IGlzIG5ldmVyIG5lY2Vzc2FyeSB0bworICogYm9vc3QgcHJlZW1wdGVkIFJDVSByZWFkZXJzLgorICovCitzdGF0aWMgaW50IHJjdV9ib29zdCh2b2lkKQoreworCXJldHVybiAwOworfQorCiAvKgogICogQmVjYXVzZSBwcmVlbXB0aWJsZSBSQ1UgZG9lcyBub3QgZXhpc3QsIGl0IG5ldmVyIGhhcyBhbnkgY2FsbGJhY2tzCiAgKiB0byBjaGVjay4KQEAgLTU5OSwxNyArOTA1LDExNiBAQAogI2VuZGlmIC8qICNlbHNlICNpZmRlZiBDT05GSUdfVElOWV9QUkVFTVBUX1JDVSAqLwogCiAjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MKLQogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CiAKIC8qCiAgKiBEdXJpbmcgYm9vdCwgd2UgZm9yZ2l2ZSBSQ1UgbG9ja2RlcCBpc3N1ZXMuICBBZnRlciB0aGlzIGZ1bmN0aW9uIGlzCiAgKiBpbnZva2VkLCB3ZSBzdGFydCB0YWtpbmcgUkNVIGxvY2tkZXAgaXNzdWVzIHNlcmlvdXNseS4KICAqLwotdm9pZCByY3Vfc2NoZWR1bGVyX3N0YXJ0aW5nKHZvaWQpCit2b2lkIF9faW5pdCByY3Vfc2NoZWR1bGVyX3N0YXJ0aW5nKHZvaWQpCiB7CiAJV0FSTl9PTihucl9jb250ZXh0X3N3aXRjaGVzKCkgPiAwKTsKIAlyY3Vfc2NoZWR1bGVyX2FjdGl2ZSA9IDE7CiB9CiAKICNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgKi8KKworI2lmZGVmIENPTkZJR19SQ1VfQk9PU1QKKyNkZWZpbmUgUkNVX0JPT1NUX1BSSU8gQ09ORklHX1JDVV9CT09TVF9QUklPCisjZWxzZSAvKiAjaWZkZWYgQ09ORklHX1JDVV9CT09TVCAqLworI2RlZmluZSBSQ1VfQk9PU1RfUFJJTyAxCisjZW5kaWYgLyogI2Vsc2UgI2lmZGVmIENPTkZJR19SQ1VfQk9PU1QgKi8KKworI2lmZGVmIENPTkZJR19SQ1VfVFJBQ0UKKworI2lmZGVmIENPTkZJR19SQ1VfQk9PU1QKKworc3RhdGljIHZvaWQgcmN1X2luaXRpYXRlX2Jvb3N0X3RyYWNlKHZvaWQpCit7CisJaWYgKHJjdV9wcmVlbXB0X2N0cmxibGsuZ3BfdGFza3MgPT0gTlVMTCkKKwkJcmN1X3ByZWVtcHRfY3RybGJsay5uX25vcm1hbF9iYWxrX2dwX3Rhc2tzKys7CisJZWxzZSBpZiAocmN1X3ByZWVtcHRfY3RybGJsay5ib29zdF90YXNrcyAhPSBOVUxMKQorCQlyY3VfcHJlZW1wdF9jdHJsYmxrLm5fbm9ybWFsX2JhbGtfYm9vc3RfdGFza3MrKzsKKwllbHNlIGlmIChyY3VfcHJlZW1wdF9jdHJsYmxrLmJvb3N0ZWRfdGhpc19ncCAhPSAwKQorCQlyY3VfcHJlZW1wdF9jdHJsYmxrLm5fbm9ybWFsX2JhbGtfYm9vc3RlZCsrOworCWVsc2UgaWYgKCFVTE9OR19DTVBfR0UoamlmZmllcywgcmN1X3ByZWVtcHRfY3RybGJsay5ib29zdF90aW1lKSkKKwkJcmN1X3ByZWVtcHRfY3RybGJsay5uX25vcm1hbF9iYWxrX25vdHlldCsrOworCWVsc2UKKwkJcmN1X3ByZWVtcHRfY3RybGJsay5uX25vcm1hbF9iYWxrX25vcysrOworfQorCitzdGF0aWMgdm9pZCByY3VfaW5pdGlhdGVfZXhwX2Jvb3N0X3RyYWNlKHZvaWQpCit7CisJaWYgKGxpc3RfZW1wdHkoJnJjdV9wcmVlbXB0X2N0cmxibGsuYmxrZF90YXNrcykpCisJCXJjdV9wcmVlbXB0X2N0cmxibGsubl9leHBfYmFsa19ibGtkX3Rhc2tzKys7CisJZWxzZQorCQlyY3VfcHJlZW1wdF9jdHJsYmxrLm5fZXhwX2JhbGtfbm9zKys7Cit9CisKKyNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX1JDVV9CT09TVCAqLworCitzdGF0aWMgdm9pZCByY3VfdHJhY2Vfc3ViX3FsZW4oc3RydWN0IHJjdV9jdHJsYmxrICpyY3AsIGludCBuKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlyYXdfbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXJjcC0+cWxlbiAtPSBuOworCXJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKKy8qCisgKiBEdW1wIHN0YXRpc3RpY3MgZm9yIFRJTllfUkNVLCBzdWNoIGFzIHRoZXkgYXJlLgorICovCitzdGF0aWMgaW50IHNob3dfdGlueV9zdGF0cyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnVudXNlZCkKK3sKKwlzaG93X3RpbnlfcHJlZW1wdF9zdGF0cyhtKTsKKwlzZXFfcHJpbnRmKG0sICJyY3Vfc2NoZWQ6IHFsZW46ICVsZFxuIiwgcmN1X3NjaGVkX2N0cmxibGsucWxlbik7CisJc2VxX3ByaW50ZihtLCAicmN1X2JoOiBxbGVuOiAlbGRcbiIsIHJjdV9iaF9jdHJsYmxrLnFsZW4pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNob3dfdGlueV9zdGF0c19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBzaG93X3Rpbnlfc3RhdHMsIE5VTEwpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzaG93X3Rpbnlfc3RhdHNfZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkub3BlbiA9IHNob3dfdGlueV9zdGF0c19vcGVuLAorCS5yZWFkID0gc2VxX3JlYWQsCisJLmxsc2VlayA9IHNlcV9sc2VlaywKKwkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlLAorfTsKKworc3RhdGljIHN0cnVjdCBkZW50cnkgKnJjdWRpcjsKKworc3RhdGljIGludCBfX2luaXQgcmN1dGlueV90cmFjZV9pbml0KHZvaWQpCit7CisJc3RydWN0IGRlbnRyeSAqcmV0dmFsOworCisJcmN1ZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKCJyY3UiLCBOVUxMKTsKKwlpZiAoIXJjdWRpcikKKwkJZ290byBmcmVlX291dDsKKwlyZXR2YWwgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJyY3VkYXRhIiwgMDQ0NCwgcmN1ZGlyLAorCQkJCSAgICAgTlVMTCwgJnNob3dfdGlueV9zdGF0c19mb3BzKTsKKwlpZiAoIXJldHZhbCkKKwkJZ290byBmcmVlX291dDsKKwlyZXR1cm4gMDsKK2ZyZWVfb3V0OgorCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShyY3VkaXIpOworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgcmN1dGlueV90cmFjZV9jbGVhbnVwKHZvaWQpCit7CisJZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKHJjdWRpcik7Cit9CisKK21vZHVsZV9pbml0KHJjdXRpbnlfdHJhY2VfaW5pdCk7Cittb2R1bGVfZXhpdChyY3V0aW55X3RyYWNlX2NsZWFudXApOworCitNT0RVTEVfQVVUSE9SKCJQYXVsIEUuIE1jS2VubmV5Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlJlYWQtQ29weSBVcGRhdGUgdHJhY2luZyBmb3IgdGlueSBpbXBsZW1lbnRhdGlvbiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisjZW5kaWYgLyogI2lmZGVmIENPTkZJR19SQ1VfVFJBQ0UgKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3V0b3J0dXJlLmMgYi9rZXJuZWwvcmN1dG9ydHVyZS5jCmluZGV4IDlkOGU4ZmIuLjg5NjEzZjkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3V0b3J0dXJlLmMKKysrIGIva2VybmVsL3JjdXRvcnR1cmUuYwpAQCAtNDcsNiArNDcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NyY3UuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BVVRIT1IoIlBhdWwgRS4gTWNLZW5uZXkgPHBhdWxtY2tAdXMuaWJtLmNvbT4gYW5kICIKQEAgLTY0LDYgKzY1LDkgQEAKIHN0YXRpYyBpbnQgZnFzX2R1cmF0aW9uID0gMDsJLyogRHVyYXRpb24gb2YgYnVyc3RzICh1cyksIDAgdG8gZGlzYWJsZS4gKi8KIHN0YXRpYyBpbnQgZnFzX2hvbGRvZmYgPSAwOwkvKiBIb2xkIHRpbWUgd2l0aGluIGJ1cnN0ICh1cykuICovCiBzdGF0aWMgaW50IGZxc19zdHV0dGVyID0gMzsJLyogV2FpdCB0aW1lIGJldHdlZW4gYnVyc3RzIChzKS4gKi8KK3N0YXRpYyBpbnQgdGVzdF9ib29zdCA9IDE7CS8qIFRlc3QgUkNVIHByaW8gYm9vc3Q6IDA9bm8sIDE9bWF5YmUsIDI9eWVzLiAqLworc3RhdGljIGludCB0ZXN0X2Jvb3N0X2ludGVydmFsID0gNzsgLyogSW50ZXJ2YWwgYmV0d2VlbiBib29zdCB0ZXN0cywgc2Vjb25kcy4gKi8KK3N0YXRpYyBpbnQgdGVzdF9ib29zdF9kdXJhdGlvbiA9IDQ7IC8qIER1cmF0aW9uIG9mIGVhY2ggYm9vc3QgdGVzdCwgc2Vjb25kcy4gKi8KIHN0YXRpYyBjaGFyICp0b3J0dXJlX3R5cGUgPSAicmN1IjsgLyogV2hhdCBSQ1UgaW1wbGVtZW50YXRpb24gdG8gdG9ydHVyZS4gKi8KIAogbW9kdWxlX3BhcmFtKG5yZWFkZXJzLCBpbnQsIDA0NDQpOwpAQCAtODgsNiArOTIsMTIgQEAKIE1PRFVMRV9QQVJNX0RFU0MoZnFzX2hvbGRvZmYsICJIb2xkb2ZmIHRpbWUgd2l0aGluIGZxcyBidXJzdHMgKHVzKSIpOwogbW9kdWxlX3BhcmFtKGZxc19zdHV0dGVyLCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhmcXNfc3R1dHRlciwgIldhaXQgdGltZSBiZXR3ZWVuIGZxcyBidXJzdHMgKHMpIik7Cittb2R1bGVfcGFyYW0odGVzdF9ib29zdCwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0ModGVzdF9ib29zdCwgIlRlc3QgUkNVIHByaW8gYm9vc3Q6IDA9bm8sIDE9bWF5YmUsIDI9eWVzLiIpOworbW9kdWxlX3BhcmFtKHRlc3RfYm9vc3RfaW50ZXJ2YWwsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHRlc3RfYm9vc3RfaW50ZXJ2YWwsICJJbnRlcnZhbCBiZXR3ZWVuIGJvb3N0IHRlc3RzLCBzZWNvbmRzLiIpOworbW9kdWxlX3BhcmFtKHRlc3RfYm9vc3RfZHVyYXRpb24sIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHRlc3RfYm9vc3RfZHVyYXRpb24sICJEdXJhdGlvbiBvZiBlYWNoIGJvb3N0IHRlc3QsIHNlY29uZHMuIik7CiBtb2R1bGVfcGFyYW0odG9ydHVyZV90eXBlLCBjaGFycCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHRvcnR1cmVfdHlwZSwgIlR5cGUgb2YgUkNVIHRvIHRvcnR1cmUgKHJjdSwgcmN1X2JoLCBzcmN1KSIpOwogCkBAIC0xMDksNiArMTE5LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnNodWZmbGVyX3Rhc2s7CiBzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpzdHV0dGVyX3Rhc2s7CiBzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpmcXNfdGFzazsKK3N0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmJvb3N0X3Rhc2tzW05SX0NQVVNdOwogCiAjZGVmaW5lIFJDVV9UT1JUVVJFX1BJUEVfTEVOIDEwCiAKQEAgLTEzNCw2ICsxNDUsMTIgQEAKIHN0YXRpYyBhdG9taWNfdCBuX3JjdV90b3J0dXJlX2ZyZWU7CiBzdGF0aWMgYXRvbWljX3Qgbl9yY3VfdG9ydHVyZV9tYmVycm9yOwogc3RhdGljIGF0b21pY190IG5fcmN1X3RvcnR1cmVfZXJyb3I7CitzdGF0aWMgbG9uZyBuX3JjdV90b3J0dXJlX2Jvb3N0X2t0cmVycm9yOworc3RhdGljIGxvbmcgbl9yY3VfdG9ydHVyZV9ib29zdF9ydGVycm9yOworc3RhdGljIGxvbmcgbl9yY3VfdG9ydHVyZV9ib29zdF9hbGxvY2Vycm9yOworc3RhdGljIGxvbmcgbl9yY3VfdG9ydHVyZV9ib29zdF9hZmZlcnJvcjsKK3N0YXRpYyBsb25nIG5fcmN1X3RvcnR1cmVfYm9vc3RfZmFpbHVyZTsKK3N0YXRpYyBsb25nIG5fcmN1X3RvcnR1cmVfYm9vc3RzOwogc3RhdGljIGxvbmcgbl9yY3VfdG9ydHVyZV90aW1lcnM7CiBzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCByY3VfdG9ydHVyZV9yZW1vdmVkOwogc3RhdGljIGNwdW1hc2tfdmFyX3Qgc2h1ZmZsZV90bXBfbWFzazsKQEAgLTE0Nyw2ICsxNjQsMTYgQEAKICNlbmRpZgogaW50IHJjdXRvcnR1cmVfcnVubmFibGUgPSBSQ1VUT1JUVVJFX1JVTk5BQkxFX0lOSVQ7CiAKKyNpZmRlZiBDT05GSUdfUkNVX0JPT1NUCisjZGVmaW5lIHJjdV9jYW5fYm9vc3QoKSAxCisjZWxzZSAvKiAjaWZkZWYgQ09ORklHX1JDVV9CT09TVCAqLworI2RlZmluZSByY3VfY2FuX2Jvb3N0KCkgMAorI2VuZGlmIC8qICNlbHNlICNpZmRlZiBDT05GSUdfUkNVX0JPT1NUICovCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGJvb3N0X3N0YXJ0dGltZTsJLyogamlmZmllcyBvZiBuZXh0IGJvb3N0IHRlc3Qgc3RhcnQuICovCitERUZJTkVfTVVURVgoYm9vc3RfbXV0ZXgpOwkJLyogcHJvdGVjdCBzZXR0aW5nIGJvb3N0X3N0YXJ0dGltZSAqLworCQkJCQkvKiAgYW5kIGJvb3N0IHRhc2sgY3JlYXRlL2Rlc3Ryb3kuICovCisKIC8qIE1lZGlhdGUgcm1tb2QgYW5kIHN5c3RlbSBzaHV0ZG93bi4gIENvbmN1cnJlbnQgcm1tb2QgJiBzaHV0ZG93biBpbGxlZ2FsISAqLwogCiAjZGVmaW5lIEZVTExTVE9QX0RPTlRTVE9QIDAJLyogTm9ybWFsIG9wZXJhdGlvbi4gKi8KQEAgLTI3Nyw2ICszMDQsNyBAQAogCXZvaWQgKCpmcXMpKHZvaWQpOwogCWludCAoKnN0YXRzKShjaGFyICpwYWdlKTsKIAlpbnQgaXJxX2NhcGFibGU7CisJaW50IGNhbl9ib29zdDsKIAljaGFyICpuYW1lOwogfTsKIApAQCAtMzY2LDYgKzM5NCw3IEBACiAJLmZxcwkJPSByY3VfZm9yY2VfcXVpZXNjZW50X3N0YXRlLAogCS5zdGF0cwkJPSBOVUxMLAogCS5pcnFfY2FwYWJsZQk9IDEsCisJLmNhbl9ib29zdAk9IHJjdV9jYW5fYm9vc3QoKSwKIAkubmFtZQkJPSAicmN1IgogfTsKIApAQCAtNDA4LDYgKzQzNyw3IEBACiAJLmZxcwkJPSByY3VfZm9yY2VfcXVpZXNjZW50X3N0YXRlLAogCS5zdGF0cwkJPSBOVUxMLAogCS5pcnFfY2FwYWJsZQk9IDEsCisJLmNhbl9ib29zdAk9IHJjdV9jYW5fYm9vc3QoKSwKIAkubmFtZQkJPSAicmN1X3N5bmMiCiB9OwogCkBAIC00MjQsNiArNDU0LDcgQEAKIAkuZnFzCQk9IHJjdV9mb3JjZV9xdWllc2NlbnRfc3RhdGUsCiAJLnN0YXRzCQk9IE5VTEwsCiAJLmlycV9jYXBhYmxlCT0gMSwKKwkuY2FuX2Jvb3N0CT0gcmN1X2Nhbl9ib29zdCgpLAogCS5uYW1lCQk9ICJyY3VfZXhwZWRpdGVkIgogfTsKIApAQCAtNjg0LDYgKzcxNSwxMTAgQEAKIH07CiAKIC8qCisgKiBSQ1UgdG9ydHVyZSBwcmlvcml0eS1ib29zdCB0ZXN0aW5nLiAgUnVucyBvbmUgcmVhbC10aW1lIHRocmVhZCBwZXIKKyAqIENQVSBmb3IgbW9kZXJhdGUgYnVyc3RzLCByZXBlYXRlZGx5IHJlZ2lzdGVyaW5nIFJDVSBjYWxsYmFja3MgYW5kCisgKiBzcGlubmluZyB3YWl0aW5nIGZvciB0aGVtIHRvIGJlIGludm9rZWQuICBJZiBhIGdpdmVuIGNhbGxiYWNrIHRha2VzCisgKiB0b28gbG9uZyB0byBiZSBpbnZva2VkLCB3ZSBhc3N1bWUgdGhhdCBwcmlvcml0eSBpbnZlcnNpb24gaGFzIG9jY3VycmVkLgorICovCisKK3N0cnVjdCByY3VfYm9vc3RfaW5mbGlnaHQgeworCXN0cnVjdCByY3VfaGVhZCByY3U7CisJaW50IGluZmxpZ2h0OworfTsKKworc3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfYm9vc3RfY2Ioc3RydWN0IHJjdV9oZWFkICpoZWFkKQoreworCXN0cnVjdCByY3VfYm9vc3RfaW5mbGlnaHQgKnJiaXAgPQorCQljb250YWluZXJfb2YoaGVhZCwgc3RydWN0IHJjdV9ib29zdF9pbmZsaWdodCwgcmN1KTsKKworCXNtcF9tYigpOyAvKiBFbnN1cmUgUkNVLWNvcmUgYWNjZXNzZXMgcHJlY2VkZSBjbGVhcmluZyAtPmluZmxpZ2h0ICovCisJcmJpcC0+aW5mbGlnaHQgPSAwOworfQorCitzdGF0aWMgaW50IHJjdV90b3J0dXJlX2Jvb3N0KHZvaWQgKmFyZykKK3sKKwl1bnNpZ25lZCBsb25nIGNhbGxfcmN1X3RpbWU7CisJdW5zaWduZWQgbG9uZyBlbmR0aW1lOworCXVuc2lnbmVkIGxvbmcgb2xkc3RhcnR0aW1lOworCXN0cnVjdCByY3VfYm9vc3RfaW5mbGlnaHQgcmJpID0geyAuaW5mbGlnaHQgPSAwIH07CisJc3RydWN0IHNjaGVkX3BhcmFtIHNwOworCisJVkVSQk9TRV9QUklOVEtfU1RSSU5HKCJyY3VfdG9ydHVyZV9ib29zdCBzdGFydGVkIik7CisKKwkvKiBTZXQgcmVhbC10aW1lIHByaW9yaXR5LiAqLworCXNwLnNjaGVkX3ByaW9yaXR5ID0gMTsKKwlpZiAoc2NoZWRfc2V0c2NoZWR1bGVyKGN1cnJlbnQsIFNDSEVEX0ZJRk8sICZzcCkgPCAwKSB7CisJCVZFUkJPU0VfUFJJTlRLX1NUUklORygicmN1X3RvcnR1cmVfYm9vc3QgUlQgcHJpbyBmYWlsZWQhIik7CisJCW5fcmN1X3RvcnR1cmVfYm9vc3RfcnRlcnJvcisrOworCX0KKworCS8qIEVhY2ggcGFzcyB0aHJvdWdoIHRoZSBmb2xsb3dpbmcgbG9vcCBkb2VzIG9uZSBib29zdC10ZXN0IGN5Y2xlLiAqLworCWRvIHsKKwkJLyogV2FpdCBmb3IgdGhlIG5leHQgdGVzdCBpbnRlcnZhbC4gKi8KKwkJb2xkc3RhcnR0aW1lID0gYm9vc3Rfc3RhcnR0aW1lOworCQl3aGlsZSAoamlmZmllcyAtIG9sZHN0YXJ0dGltZSA+IFVMT05HX01BWCAvIDIpIHsKKwkJCXNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKDEpOworCQkJcmN1X3N0dXR0ZXJfd2FpdCgicmN1X3RvcnR1cmVfYm9vc3QiKTsKKwkJCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkgfHwKKwkJCSAgICBmdWxsc3RvcCAhPSBGVUxMU1RPUF9ET05UU1RPUCkKKwkJCQlnb3RvIGNoZWNrd2FpdDsKKwkJfQorCisJCS8qIERvIG9uZSBib29zdC10ZXN0IGludGVydmFsLiAqLworCQllbmR0aW1lID0gb2xkc3RhcnR0aW1lICsgdGVzdF9ib29zdF9kdXJhdGlvbiAqIEhaOworCQljYWxsX3JjdV90aW1lID0gamlmZmllczsKKwkJd2hpbGUgKGppZmZpZXMgLSBlbmR0aW1lID4gVUxPTkdfTUFYIC8gMikgeworCQkJLyogSWYgd2UgZG9uJ3QgaGF2ZSBhIGNhbGxiYWNrIGluIGZsaWdodCwgcG9zdCBvbmUuICovCisJCQlpZiAoIXJiaS5pbmZsaWdodCkgeworCQkJCXNtcF9tYigpOyAvKiBSQ1UgY29yZSBiZWZvcmUgLT5pbmZsaWdodCA9IDEuICovCisJCQkJcmJpLmluZmxpZ2h0ID0gMTsKKwkJCQljYWxsX3JjdSgmcmJpLnJjdSwgcmN1X3RvcnR1cmVfYm9vc3RfY2IpOworCQkJCWlmIChqaWZmaWVzIC0gY2FsbF9yY3VfdGltZSA+CisJCQkJCSB0ZXN0X2Jvb3N0X2R1cmF0aW9uICogSFogLSBIWiAvIDIpIHsKKwkJCQkJVkVSQk9TRV9QUklOVEtfU1RSSU5HKCJyY3VfdG9ydHVyZV9ib29zdCBib29zdGluZyBmYWlsZWQiKTsKKwkJCQkJbl9yY3VfdG9ydHVyZV9ib29zdF9mYWlsdXJlKys7CisJCQkJfQorCQkJCWNhbGxfcmN1X3RpbWUgPSBqaWZmaWVzOworCQkJfQorCQkJY29uZF9yZXNjaGVkKCk7CisJCQlyY3Vfc3R1dHRlcl93YWl0KCJyY3VfdG9ydHVyZV9ib29zdCIpOworCQkJaWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSB8fAorCQkJICAgIGZ1bGxzdG9wICE9IEZVTExTVE9QX0RPTlRTVE9QKQorCQkJCWdvdG8gY2hlY2t3YWl0OworCQl9CisKKwkJLyoKKwkJICogU2V0IHRoZSBzdGFydCB0aW1lIG9mIHRoZSBuZXh0IHRlc3QgaW50ZXJ2YWwuCisJCSAqIFllcywgdGhpcyBpcyB2dWxuZXJhYmxlIHRvIGxvbmcgZGVsYXlzLCBidXQgc3VjaAorCQkgKiBkZWxheXMgc2ltcGx5IGNhdXNlIGEgZmFsc2UgbmVnYXRpdmUgZm9yIHRoZSBuZXh0CisJCSAqIGludGVydmFsLiAgQmVzaWRlcywgd2UgYXJlIHJ1bm5pbmcgYXQgUlQgcHJpb3JpdHksCisJCSAqIHNvIGRlbGF5cyBzaG91bGQgYmUgcmVsYXRpdmVseSByYXJlLgorCQkgKi8KKwkJd2hpbGUgKG9sZHN0YXJ0dGltZSA9PSBib29zdF9zdGFydHRpbWUpIHsKKwkJCWlmIChtdXRleF90cnlsb2NrKCZib29zdF9tdXRleCkpIHsKKwkJCQlib29zdF9zdGFydHRpbWUgPSBqaWZmaWVzICsKKwkJCQkJCSAgdGVzdF9ib29zdF9pbnRlcnZhbCAqIEhaOworCQkJCW5fcmN1X3RvcnR1cmVfYm9vc3RzKys7CisJCQkJbXV0ZXhfdW5sb2NrKCZib29zdF9tdXRleCk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZSgxKTsKKwkJfQorCisJCS8qIEdvIGRvIHRoZSBzdHV0dGVyLiAqLworY2hlY2t3YWl0OglyY3Vfc3R1dHRlcl93YWl0KCJyY3VfdG9ydHVyZV9ib29zdCIpOworCX0gd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkgJiYgZnVsbHN0b3AgID09IEZVTExTVE9QX0RPTlRTVE9QKTsKKworCS8qIENsZWFuIHVwIGFuZCBleGl0LiAqLworCVZFUkJPU0VfUFJJTlRLX1NUUklORygicmN1X3RvcnR1cmVfYm9vc3QgdGFzayBzdG9wcGluZyIpOworCXJjdXRvcnR1cmVfc2h1dGRvd25fYWJzb3JiKCJyY3VfdG9ydHVyZV9ib29zdCIpOworCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpIHx8IHJiaS5pbmZsaWdodCkKKwkJc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUoMSk7CisJc21wX21iKCk7IC8qIG9yZGVyIGFjY2Vzc2VzIHRvIC0+aW5mbGlnaHQgYmVmb3JlIHN0YWNrLWZyYW1lIGRlYXRoLiAqLworCXJldHVybiAwOworfQorCisvKgogICogUkNVIHRvcnR1cmUgZm9yY2UtcXVpZXNjZW50LXN0YXRlIGt0aHJlYWQuICBSZXBlYXRlZGx5IGluZHVjZXMKICAqIGJ1cnN0cyBvZiBjYWxscyB0byBmb3JjZV9xdWllc2NlbnRfc3RhdGUoKSwgaW5jcmVhc2luZyB0aGUgcHJvYmFiaWxpdHkKICAqIG9mIG9jY3VycmVuY2Ugb2Ygc29tZSBpbXBvcnRhbnQgdHlwZXMgb2YgcmFjZSBjb25kaXRpb25zLgpAQCAtOTMzLDcgKzEwNjgsOCBAQAogCWNudCArPSBzcHJpbnRmKCZwYWdlW2NudF0sICIlcyVzICIsIHRvcnR1cmVfdHlwZSwgVE9SVFVSRV9GTEFHKTsKIAljbnQgKz0gc3ByaW50ZigmcGFnZVtjbnRdLAogCQkgICAgICAgInJ0YzogJXAgdmVyOiAlbGQgdGZsZTogJWQgcnRhOiAlZCBydGFmOiAlZCBydGY6ICVkICIKLQkJICAgICAgICJydG1iZTogJWQgbnQ6ICVsZCIsCisJCSAgICAgICAicnRtYmU6ICVkIHJ0YmtlOiAlbGQgcnRicmU6ICVsZCBydGJhZTogJWxkIHJ0YmFmZTogJWxkICIKKwkJICAgICAgICJydGJmOiAlbGQgcnRiOiAlbGQgbnQ6ICVsZCIsCiAJCSAgICAgICByY3VfdG9ydHVyZV9jdXJyZW50LAogCQkgICAgICAgcmN1X3RvcnR1cmVfY3VycmVudF92ZXJzaW9uLAogCQkgICAgICAgbGlzdF9lbXB0eSgmcmN1X3RvcnR1cmVfZnJlZWxpc3QpLApAQCAtOTQxLDggKzEwNzcsMTkgQEAKIAkJICAgICAgIGF0b21pY19yZWFkKCZuX3JjdV90b3J0dXJlX2FsbG9jX2ZhaWwpLAogCQkgICAgICAgYXRvbWljX3JlYWQoJm5fcmN1X3RvcnR1cmVfZnJlZSksCiAJCSAgICAgICBhdG9taWNfcmVhZCgmbl9yY3VfdG9ydHVyZV9tYmVycm9yKSwKKwkJICAgICAgIG5fcmN1X3RvcnR1cmVfYm9vc3Rfa3RyZXJyb3IsCisJCSAgICAgICBuX3JjdV90b3J0dXJlX2Jvb3N0X3J0ZXJyb3IsCisJCSAgICAgICBuX3JjdV90b3J0dXJlX2Jvb3N0X2FsbG9jZXJyb3IsCisJCSAgICAgICBuX3JjdV90b3J0dXJlX2Jvb3N0X2FmZmVycm9yLAorCQkgICAgICAgbl9yY3VfdG9ydHVyZV9ib29zdF9mYWlsdXJlLAorCQkgICAgICAgbl9yY3VfdG9ydHVyZV9ib29zdHMsCiAJCSAgICAgICBuX3JjdV90b3J0dXJlX3RpbWVycyk7Ci0JaWYgKGF0b21pY19yZWFkKCZuX3JjdV90b3J0dXJlX21iZXJyb3IpICE9IDApCisJaWYgKGF0b21pY19yZWFkKCZuX3JjdV90b3J0dXJlX21iZXJyb3IpICE9IDAgfHwKKwkgICAgbl9yY3VfdG9ydHVyZV9ib29zdF9rdHJlcnJvciAhPSAwIHx8CisJICAgIG5fcmN1X3RvcnR1cmVfYm9vc3RfcnRlcnJvciAhPSAwIHx8CisJICAgIG5fcmN1X3RvcnR1cmVfYm9vc3RfYWxsb2NlcnJvciAhPSAwIHx8CisJICAgIG5fcmN1X3RvcnR1cmVfYm9vc3RfYWZmZXJyb3IgIT0gMCB8fAorCSAgICBuX3JjdV90b3J0dXJlX2Jvb3N0X2ZhaWx1cmUgIT0gMCkKIAkJY250ICs9IHNwcmludGYoJnBhZ2VbY250XSwgIiAhISEiKTsKIAljbnQgKz0gc3ByaW50ZigmcGFnZVtjbnRdLCAiXG4lcyVzICIsIHRvcnR1cmVfdHlwZSwgVE9SVFVSRV9GTEFHKTsKIAlpZiAoaSA+IDEpIHsKQEAgLTEwOTQsMjIgKzEyNDEsOTEgQEAKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCi1yY3VfdG9ydHVyZV9wcmludF9tb2R1bGVfcGFybXMoY2hhciAqdGFnKQorcmN1X3RvcnR1cmVfcHJpbnRfbW9kdWxlX3Bhcm1zKHN0cnVjdCByY3VfdG9ydHVyZV9vcHMgKmN1cl9vcHMsIGNoYXIgKnRhZykKIHsKIAlwcmludGsoS0VSTl9BTEVSVCAiJXMiIFRPUlRVUkVfRkxBRwogCQkiLS0tICVzOiBucmVhZGVycz0lZCBuZmFrZXdyaXRlcnM9JWQgIgogCQkic3RhdF9pbnRlcnZhbD0lZCB2ZXJib3NlPSVkIHRlc3Rfbm9faWRsZV9oej0lZCAiCiAJCSJzaHVmZmxlX2ludGVydmFsPSVkIHN0dXR0ZXI9JWQgaXJxcmVhZGVyPSVkICIKLQkJImZxc19kdXJhdGlvbj0lZCBmcXNfaG9sZG9mZj0lZCBmcXNfc3R1dHRlcj0lZFxuIiwKKwkJImZxc19kdXJhdGlvbj0lZCBmcXNfaG9sZG9mZj0lZCBmcXNfc3R1dHRlcj0lZCAiCisJCSJ0ZXN0X2Jvb3N0PSVkLyVkIHRlc3RfYm9vc3RfaW50ZXJ2YWw9JWQgIgorCQkidGVzdF9ib29zdF9kdXJhdGlvbj0lZFxuIiwKIAkJdG9ydHVyZV90eXBlLCB0YWcsIG5yZWFscmVhZGVycywgbmZha2V3cml0ZXJzLAogCQlzdGF0X2ludGVydmFsLCB2ZXJib3NlLCB0ZXN0X25vX2lkbGVfaHosIHNodWZmbGVfaW50ZXJ2YWwsCi0JCXN0dXR0ZXIsIGlycXJlYWRlciwgZnFzX2R1cmF0aW9uLCBmcXNfaG9sZG9mZiwgZnFzX3N0dXR0ZXIpOworCQlzdHV0dGVyLCBpcnFyZWFkZXIsIGZxc19kdXJhdGlvbiwgZnFzX2hvbGRvZmYsIGZxc19zdHV0dGVyLAorCQl0ZXN0X2Jvb3N0LCBjdXJfb3BzLT5jYW5fYm9vc3QsCisJCXRlc3RfYm9vc3RfaW50ZXJ2YWwsIHRlc3RfYm9vc3RfZHVyYXRpb24pOwogfQogCi1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHJjdXRvcnR1cmVfbmIgPSB7CitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHJjdXRvcnR1cmVfc2h1dGRvd25fbmIgPSB7CiAJLm5vdGlmaWVyX2NhbGwgPSByY3V0b3J0dXJlX3NodXRkb3duX25vdGlmeSwKIH07CiAKK3N0YXRpYyB2b2lkIHJjdXRvcnR1cmVfYm9vc3Rlcl9jbGVhbnVwKGludCBjcHUpCit7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0OworCisJaWYgKGJvb3N0X3Rhc2tzW2NwdV0gPT0gTlVMTCkKKwkJcmV0dXJuOworCW11dGV4X2xvY2soJmJvb3N0X211dGV4KTsKKwlWRVJCT1NFX1BSSU5US19TVFJJTkcoIlN0b3BwaW5nIHJjdV90b3J0dXJlX2Jvb3N0IHRhc2siKTsKKwl0ID0gYm9vc3RfdGFza3NbY3B1XTsKKwlib29zdF90YXNrc1tjcHVdID0gTlVMTDsKKwltdXRleF91bmxvY2soJmJvb3N0X211dGV4KTsKKworCS8qIFRoaXMgbXVzdCBiZSBvdXRzaWRlIG9mIHRoZSBtdXRleCwgb3RoZXJ3aXNlIGRlYWRsb2NrISAqLworCWt0aHJlYWRfc3RvcCh0KTsKK30KKworc3RhdGljIGludCByY3V0b3J0dXJlX2Jvb3N0ZXJfaW5pdChpbnQgY3B1KQoreworCWludCByZXR2YWw7CisKKwlpZiAoYm9vc3RfdGFza3NbY3B1XSAhPSBOVUxMKQorCQlyZXR1cm4gMDsgIC8qIEFscmVhZHkgY3JlYXRlZCwgbm90aGluZyBtb3JlIHRvIGRvLiAqLworCisJLyogRG9uJ3QgYWxsb3cgdGltZSByZWNhbGN1bGF0aW9uIHdoaWxlIGNyZWF0aW5nIGEgbmV3IHRhc2suICovCisJbXV0ZXhfbG9jaygmYm9vc3RfbXV0ZXgpOworCVZFUkJPU0VfUFJJTlRLX1NUUklORygiQ3JlYXRpbmcgcmN1X3RvcnR1cmVfYm9vc3QgdGFzayIpOworCWJvb3N0X3Rhc2tzW2NwdV0gPSBrdGhyZWFkX2NyZWF0ZShyY3VfdG9ydHVyZV9ib29zdCwgTlVMTCwKKwkJCQkJICAicmN1X3RvcnR1cmVfYm9vc3QiKTsKKwlpZiAoSVNfRVJSKGJvb3N0X3Rhc2tzW2NwdV0pKSB7CisJCXJldHZhbCA9IFBUUl9FUlIoYm9vc3RfdGFza3NbY3B1XSk7CisJCVZFUkJPU0VfUFJJTlRLX1NUUklORygicmN1X3RvcnR1cmVfYm9vc3QgdGFzayBjcmVhdGUgZmFpbGVkIik7CisJCW5fcmN1X3RvcnR1cmVfYm9vc3Rfa3RyZXJyb3IrKzsKKwkJYm9vc3RfdGFza3NbY3B1XSA9IE5VTEw7CisJCW11dGV4X3VubG9jaygmYm9vc3RfbXV0ZXgpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKwlrdGhyZWFkX2JpbmQoYm9vc3RfdGFza3NbY3B1XSwgY3B1KTsKKwl3YWtlX3VwX3Byb2Nlc3MoYm9vc3RfdGFza3NbY3B1XSk7CisJbXV0ZXhfdW5sb2NrKCZib29zdF9tdXRleCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmN1dG9ydHVyZV9jcHVfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKKwkJCQkgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpCit7CisJbG9uZyBjcHUgPSAobG9uZyloY3B1OworCisJc3dpdGNoIChhY3Rpb24pIHsKKwljYXNlIENQVV9PTkxJTkU6CisJY2FzZSBDUFVfRE9XTl9GQUlMRUQ6CisJCSh2b2lkKXJjdXRvcnR1cmVfYm9vc3Rlcl9pbml0KGNwdSk7CisJCWJyZWFrOworCWNhc2UgQ1BVX0RPV05fUFJFUEFSRToKKwkJcmN1dG9ydHVyZV9ib29zdGVyX2NsZWFudXAoY3B1KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXJldHVybiBOT1RJRllfT0s7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgcmN1dG9ydHVyZV9jcHVfbmIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSByY3V0b3J0dXJlX2NwdV9ub3RpZnksCit9OworCiBzdGF0aWMgdm9pZAogcmN1X3RvcnR1cmVfY2xlYW51cCh2b2lkKQogewpAQCAtMTEyNyw3ICsxMzQzLDcgQEAKIAl9CiAJZnVsbHN0b3AgPSBGVUxMU1RPUF9STU1PRDsKIAltdXRleF91bmxvY2soJmZ1bGxzdG9wX211dGV4KTsKLQl1bnJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigmcmN1dG9ydHVyZV9uYik7CisJdW5yZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJnJjdXRvcnR1cmVfc2h1dGRvd25fbmIpOwogCWlmIChzdHV0dGVyX3Rhc2spIHsKIAkJVkVSQk9TRV9QUklOVEtfU1RSSU5HKCJTdG9wcGluZyByY3VfdG9ydHVyZV9zdHV0dGVyIHRhc2siKTsKIAkJa3RocmVhZF9zdG9wKHN0dXR0ZXJfdGFzayk7CkBAIC0xMTg0LDYgKzE0MDAsMTIgQEAKIAkJa3RocmVhZF9zdG9wKGZxc190YXNrKTsKIAl9CiAJZnFzX3Rhc2sgPSBOVUxMOworCWlmICgodGVzdF9ib29zdCA9PSAxICYmIGN1cl9vcHMtPmNhbl9ib29zdCkgfHwKKwkgICAgdGVzdF9ib29zdCA9PSAyKSB7CisJCXVucmVnaXN0ZXJfY3B1X25vdGlmaWVyKCZyY3V0b3J0dXJlX2NwdV9uYik7CisJCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKQorCQkJcmN1dG9ydHVyZV9ib29zdGVyX2NsZWFudXAoaSk7CisJfQogCiAJLyogV2FpdCBmb3IgYWxsIFJDVSBjYWxsYmFja3MgdG8gZmlyZS4gICovCiAKQEAgLTExOTUsOSArMTQxNyw5IEBACiAJaWYgKGN1cl9vcHMtPmNsZWFudXApCiAJCWN1cl9vcHMtPmNsZWFudXAoKTsKIAlpZiAoYXRvbWljX3JlYWQoJm5fcmN1X3RvcnR1cmVfZXJyb3IpKQotCQlyY3VfdG9ydHVyZV9wcmludF9tb2R1bGVfcGFybXMoIkVuZCBvZiB0ZXN0OiBGQUlMVVJFIik7CisJCXJjdV90b3J0dXJlX3ByaW50X21vZHVsZV9wYXJtcyhjdXJfb3BzLCAiRW5kIG9mIHRlc3Q6IEZBSUxVUkUiKTsKIAllbHNlCi0JCXJjdV90b3J0dXJlX3ByaW50X21vZHVsZV9wYXJtcygiRW5kIG9mIHRlc3Q6IFNVQ0NFU1MiKTsKKwkJcmN1X3RvcnR1cmVfcHJpbnRfbW9kdWxlX3Bhcm1zKGN1cl9vcHMsICJFbmQgb2YgdGVzdDogU1VDQ0VTUyIpOwogfQogCiBzdGF0aWMgaW50IF9faW5pdApAQCAtMTI0Miw3ICsxNDY0LDcgQEAKIAkJbnJlYWxyZWFkZXJzID0gbnJlYWRlcnM7CiAJZWxzZQogCQlucmVhbHJlYWRlcnMgPSAyICogbnVtX29ubGluZV9jcHVzKCk7Ci0JcmN1X3RvcnR1cmVfcHJpbnRfbW9kdWxlX3Bhcm1zKCJTdGFydCBvZiB0ZXN0Iik7CisJcmN1X3RvcnR1cmVfcHJpbnRfbW9kdWxlX3Bhcm1zKGN1cl9vcHMsICJTdGFydCBvZiB0ZXN0Iik7CiAJZnVsbHN0b3AgPSBGVUxMU1RPUF9ET05UU1RPUDsKIAogCS8qIFNldCB1cCB0aGUgZnJlZWxpc3QuICovCkBAIC0xMjYzLDYgKzE0ODUsMTIgQEAKIAlhdG9taWNfc2V0KCZuX3JjdV90b3J0dXJlX2ZyZWUsIDApOwogCWF0b21pY19zZXQoJm5fcmN1X3RvcnR1cmVfbWJlcnJvciwgMCk7CiAJYXRvbWljX3NldCgmbl9yY3VfdG9ydHVyZV9lcnJvciwgMCk7CisJbl9yY3VfdG9ydHVyZV9ib29zdF9rdHJlcnJvciA9IDA7CisJbl9yY3VfdG9ydHVyZV9ib29zdF9ydGVycm9yID0gMDsKKwluX3JjdV90b3J0dXJlX2Jvb3N0X2FsbG9jZXJyb3IgPSAwOworCW5fcmN1X3RvcnR1cmVfYm9vc3RfYWZmZXJyb3IgPSAwOworCW5fcmN1X3RvcnR1cmVfYm9vc3RfZmFpbHVyZSA9IDA7CisJbl9yY3VfdG9ydHVyZV9ib29zdHMgPSAwOwogCWZvciAoaSA9IDA7IGkgPCBSQ1VfVE9SVFVSRV9QSVBFX0xFTiArIDE7IGkrKykKIAkJYXRvbWljX3NldCgmcmN1X3RvcnR1cmVfd2NvdW50W2ldLCAwKTsKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CkBAIC0xMzc2LDcgKzE2MDQsMjcgQEAKIAkJCWdvdG8gdW53aW5kOwogCQl9CiAJfQotCXJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigmcmN1dG9ydHVyZV9uYik7CisJaWYgKHRlc3RfYm9vc3RfaW50ZXJ2YWwgPCAxKQorCQl0ZXN0X2Jvb3N0X2ludGVydmFsID0gMTsKKwlpZiAodGVzdF9ib29zdF9kdXJhdGlvbiA8IDIpCisJCXRlc3RfYm9vc3RfZHVyYXRpb24gPSAyOworCWlmICgodGVzdF9ib29zdCA9PSAxICYmIGN1cl9vcHMtPmNhbl9ib29zdCkgfHwKKwkgICAgdGVzdF9ib29zdCA9PSAyKSB7CisJCWludCByZXR2YWw7CisKKwkJYm9vc3Rfc3RhcnR0aW1lID0gamlmZmllcyArIHRlc3RfYm9vc3RfaW50ZXJ2YWwgKiBIWjsKKwkJcmVnaXN0ZXJfY3B1X25vdGlmaWVyKCZyY3V0b3J0dXJlX2NwdV9uYik7CisJCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CisJCQlpZiAoY3B1X2lzX29mZmxpbmUoaSkpCisJCQkJY29udGludWU7ICAvKiBIZXVyaXN0aWM6IENQVSBjYW4gZ28gb2ZmbGluZS4gKi8KKwkJCXJldHZhbCA9IHJjdXRvcnR1cmVfYm9vc3Rlcl9pbml0KGkpOworCQkJaWYgKHJldHZhbCA8IDApIHsKKwkJCQlmaXJzdGVyciA9IHJldHZhbDsKKwkJCQlnb3RvIHVud2luZDsKKwkJCX0KKwkJfQorCX0KKwlyZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJnJjdXRvcnR1cmVfc2h1dGRvd25fbmIpOwogCW11dGV4X3VubG9jaygmZnVsbHN0b3BfbXV0ZXgpOwogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1dHJlZS5jIGIva2VybmVsL3JjdXRyZWUuYwppbmRleCBjY2RjMDRjLi5kZDRhZWE4IDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1dHJlZS5jCisrKyBiL2tlcm5lbC9yY3V0cmVlLmMKQEAgLTY3LDkgKzY3LDYgQEAKIAkuZ3BudW0gPSAtMzAwLCBcCiAJLmNvbXBsZXRlZCA9IC0zMDAsIFwKIAkub25vZmZsb2NrID0gX19SQVdfU1BJTl9MT0NLX1VOTE9DS0VEKCZzdHJ1Y3RuYW1lLm9ub2ZmbG9jayksIFwKLQkub3JwaGFuX2Nic19saXN0ID0gTlVMTCwgXAotCS5vcnBoYW5fY2JzX3RhaWwgPSAmc3RydWN0bmFtZS5vcnBoYW5fY2JzX2xpc3QsIFwKLQkub3JwaGFuX3FsZW4gPSAwLCBcCiAJLmZxc2xvY2sgPSBfX1JBV19TUElOX0xPQ0tfVU5MT0NLRUQoJnN0cnVjdG5hbWUuZnFzbG9jayksIFwKIAkubl9mb3JjZV9xcyA9IDAsIFwKIAkubl9mb3JjZV9xc19uZ3AgPSAwLCBcCkBAIC0zNjcsOCArMzY0LDggQEAKIAlXQVJOX09OX09OQ0UocmR0cC0+ZHludGlja3MgJiAweDEpOwogCiAJLyogSWYgdGhlIGludGVycnVwdCBxdWV1ZWQgYSBjYWxsYmFjaywgZ2V0IG91dCBvZiBkeW50aWNrIG1vZGUuICovCi0JaWYgKF9fZ2V0X2NwdV92YXIocmN1X3NjaGVkX2RhdGEpLm54dGxpc3QgfHwKLQkgICAgX19nZXRfY3B1X3ZhcihyY3VfYmhfZGF0YSkubnh0bGlzdCkKKwlpZiAoX190aGlzX2NwdV9yZWFkKHJjdV9zY2hlZF9kYXRhLm54dGxpc3QpIHx8CisJICAgIF9fdGhpc19jcHVfcmVhZChyY3VfYmhfZGF0YS5ueHRsaXN0KSkKIAkJc2V0X25lZWRfcmVzY2hlZCgpOwogfQogCkBAIC02MjAsOSArNjE3LDE3IEBACiBzdGF0aWMgdm9pZCBfX25vdGVfbmV3X2dwbnVtKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwgc3RydWN0IHJjdV9ub2RlICpybnAsIHN0cnVjdCByY3VfZGF0YSAqcmRwKQogewogCWlmIChyZHAtPmdwbnVtICE9IHJucC0+Z3BudW0pIHsKLQkJcmRwLT5xc19wZW5kaW5nID0gMTsKLQkJcmRwLT5wYXNzZWRfcXVpZXNjID0gMDsKKwkJLyoKKwkJICogSWYgdGhlIGN1cnJlbnQgZ3JhY2UgcGVyaW9kIGlzIHdhaXRpbmcgZm9yIHRoaXMgQ1BVLAorCQkgKiBzZXQgdXAgdG8gZGV0ZWN0IGEgcXVpZXNjZW50IHN0YXRlLCBvdGhlcndpc2UgZG9uJ3QKKwkJICogZ28gbG9va2luZyBmb3Igb25lLgorCQkgKi8KIAkJcmRwLT5ncG51bSA9IHJucC0+Z3BudW07CisJCWlmIChybnAtPnFzbWFzayAmIHJkcC0+Z3JwbWFzaykgeworCQkJcmRwLT5xc19wZW5kaW5nID0gMTsKKwkJCXJkcC0+cGFzc2VkX3F1aWVzYyA9IDA7CisJCX0gZWxzZQorCQkJcmRwLT5xc19wZW5kaW5nID0gMDsKIAl9CiB9CiAKQEAgLTY4MSw2ICs2ODYsMjQgQEAKIAogCQkvKiBSZW1lbWJlciB0aGF0IHdlIHNhdyB0aGlzIGdyYWNlLXBlcmlvZCBjb21wbGV0aW9uLiAqLwogCQlyZHAtPmNvbXBsZXRlZCA9IHJucC0+Y29tcGxldGVkOworCisJCS8qCisJCSAqIElmIHdlIHdlcmUgaW4gYW4gZXh0ZW5kZWQgcXVpZXNjZW50IHN0YXRlLCB3ZSBtYXkgaGF2ZQorCQkgKiBtaXNzZWQgc29tZSBncmFjZSBwZXJpb2RzIHRoYXQgb3RoZXJzIENQVXMgaGFuZGxlZCBvbgorCQkgKiBvdXIgYmVoYWxmLiBDYXRjaCB1cCB3aXRoIHRoaXMgc3RhdGUgdG8gYXZvaWQgbm90aW5nCisJCSAqIHNwdXJpb3VzIG5ldyBncmFjZSBwZXJpb2RzLiAgSWYgYW5vdGhlciBncmFjZSBwZXJpb2QKKwkJICogaGFzIHN0YXJ0ZWQsIHRoZW4gcm5wLT5ncG51bSB3aWxsIGhhdmUgYWR2YW5jZWQsIHNvCisJCSAqIHdlIHdpbGwgZGV0ZWN0IHRoaXMgbGF0ZXIgb24uCisJCSAqLworCQlpZiAoVUxPTkdfQ01QX0xUKHJkcC0+Z3BudW0sIHJkcC0+Y29tcGxldGVkKSkKKwkJCXJkcC0+Z3BudW0gPSByZHAtPmNvbXBsZXRlZDsKKworCQkvKgorCQkgKiBJZiBSQ1UgZG9lcyBub3QgbmVlZCBhIHF1aWVzY2VudCBzdGF0ZSBmcm9tIHRoaXMgQ1BVLAorCQkgKiB0aGVuIG1ha2Ugc3VyZSB0aGF0IHRoaXMgQ1BVIGRvZXNuJ3QgZ28gbG9va2luZyBmb3Igb25lLgorCQkgKi8KKwkJaWYgKChybnAtPnFzbWFzayAmIHJkcC0+Z3JwbWFzaykgPT0gMCkKKwkJCXJkcC0+cXNfcGVuZGluZyA9IDA7CiAJfQogfQogCkBAIC05ODQsNTMgKzEwMDcsMzEgQEAKICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKIAogLyoKLSAqIE1vdmUgYSBkeWluZyBDUFUncyBSQ1UgY2FsbGJhY2tzIHRvIHRoZSAtPm9ycGhhbl9jYnNfbGlzdCBmb3IgdGhlCi0gKiBzcGVjaWZpZWQgZmxhdm9yIG9mIFJDVS4gIFRoZSBjYWxsYmFja3Mgd2lsbCBiZSBhZG9wdGVkIGJ5IHRoZSBuZXh0Ci0gKiBfcmN1X2JhcnJpZXIoKSBpbnZvY2F0aW9uIG9yIGJ5IHRoZSBDUFVfREVBRCBub3RpZmllciwgd2hpY2hldmVyCi0gKiBjb21lcyBmaXJzdC4gIEJlY2F1c2UgdGhpcyBpcyBpbnZva2VkIGZyb20gdGhlIENQVV9EWUlORyBub3RpZmllciwKLSAqIGlycXMgYXJlIGFscmVhZHkgZGlzYWJsZWQuCisgKiBNb3ZlIGEgZHlpbmcgQ1BVJ3MgUkNVIGNhbGxiYWNrcyB0byBvbmxpbmUgQ1BVJ3MgY2FsbGJhY2sgbGlzdC4KKyAqIFN5bmNocm9uaXphdGlvbiBpcyBub3QgcmVxdWlyZWQgYmVjYXVzZSB0aGlzIGZ1bmN0aW9uIGV4ZWN1dGVzCisgKiBpbiBzdG9wX21hY2hpbmUoKSBjb250ZXh0LgogICovCi1zdGF0aWMgdm9pZCByY3Vfc2VuZF9jYnNfdG9fb3JwaGFuYWdlKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCkKK3N0YXRpYyB2b2lkIHJjdV9zZW5kX2Nic190b19vbmxpbmUoc3RydWN0IHJjdV9zdGF0ZSAqcnNwKQogewogCWludCBpOworCS8qIGN1cnJlbnQgRFlJTkcgQ1BVIGlzIGNsZWFyZWQgaW4gdGhlIGNwdV9vbmxpbmVfbWFzayAqLworCWludCByZWNlaXZlX2NwdSA9IGNwdW1hc2tfYW55KGNwdV9vbmxpbmVfbWFzayk7CiAJc3RydWN0IHJjdV9kYXRhICpyZHAgPSB0aGlzX2NwdV9wdHIocnNwLT5yZGEpOworCXN0cnVjdCByY3VfZGF0YSAqcmVjZWl2ZV9yZHAgPSBwZXJfY3B1X3B0cihyc3AtPnJkYSwgcmVjZWl2ZV9jcHUpOwogCiAJaWYgKHJkcC0+bnh0bGlzdCA9PSBOVUxMKQogCQlyZXR1cm47ICAvKiBpcnFzIGRpc2FibGVkLCBzbyBjb21wYXJpc29uIGlzIHN0YWJsZS4gKi8KLQlyYXdfc3Bpbl9sb2NrKCZyc3AtPm9ub2ZmbG9jayk7ICAvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQuICovCi0JKnJzcC0+b3JwaGFuX2Nic190YWlsID0gcmRwLT5ueHRsaXN0OwotCXJzcC0+b3JwaGFuX2Nic190YWlsID0gcmRwLT5ueHR0YWlsW1JDVV9ORVhUX1RBSUxdOworCisJKnJlY2VpdmVfcmRwLT5ueHR0YWlsW1JDVV9ORVhUX1RBSUxdID0gcmRwLT5ueHRsaXN0OworCXJlY2VpdmVfcmRwLT5ueHR0YWlsW1JDVV9ORVhUX1RBSUxdID0gcmRwLT5ueHR0YWlsW1JDVV9ORVhUX1RBSUxdOworCXJlY2VpdmVfcmRwLT5xbGVuICs9IHJkcC0+cWxlbjsKKwlyZWNlaXZlX3JkcC0+bl9jYnNfYWRvcHRlZCArPSByZHAtPnFsZW47CisJcmRwLT5uX2Nic19vcnBoYW5lZCArPSByZHAtPnFsZW47CisKIAlyZHAtPm54dGxpc3QgPSBOVUxMOwogCWZvciAoaSA9IDA7IGkgPCBSQ1VfTkVYVF9TSVpFOyBpKyspCiAJCXJkcC0+bnh0dGFpbFtpXSA9ICZyZHAtPm54dGxpc3Q7Ci0JcnNwLT5vcnBoYW5fcWxlbiArPSByZHAtPnFsZW47Ci0JcmRwLT5uX2Nic19vcnBoYW5lZCArPSByZHAtPnFsZW47CiAJcmRwLT5xbGVuID0gMDsKLQlyYXdfc3Bpbl91bmxvY2soJnJzcC0+b25vZmZsb2NrKTsgIC8qIGlycXMgcmVtYWluIGRpc2FibGVkLiAqLwotfQotCi0vKgotICogQWRvcHQgcHJldmlvdXNseSBvcnBoYW5lZCBSQ1UgY2FsbGJhY2tzLgotICovCi1zdGF0aWMgdm9pZCByY3VfYWRvcHRfb3JwaGFuX2NicyhzdHJ1Y3QgcmN1X3N0YXRlICpyc3ApCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgcmN1X2RhdGEgKnJkcDsKLQotCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcnNwLT5vbm9mZmxvY2ssIGZsYWdzKTsKLQlyZHAgPSB0aGlzX2NwdV9wdHIocnNwLT5yZGEpOwotCWlmIChyc3AtPm9ycGhhbl9jYnNfbGlzdCA9PSBOVUxMKSB7Ci0JCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZyc3AtPm9ub2ZmbG9jaywgZmxhZ3MpOwotCQlyZXR1cm47Ci0JfQotCSpyZHAtPm54dHRhaWxbUkNVX05FWFRfVEFJTF0gPSByc3AtPm9ycGhhbl9jYnNfbGlzdDsKLQlyZHAtPm54dHRhaWxbUkNVX05FWFRfVEFJTF0gPSByc3AtPm9ycGhhbl9jYnNfdGFpbDsKLQlyZHAtPnFsZW4gKz0gcnNwLT5vcnBoYW5fcWxlbjsKLQlyZHAtPm5fY2JzX2Fkb3B0ZWQgKz0gcnNwLT5vcnBoYW5fcWxlbjsKLQlyc3AtPm9ycGhhbl9jYnNfbGlzdCA9IE5VTEw7Ci0JcnNwLT5vcnBoYW5fY2JzX3RhaWwgPSAmcnNwLT5vcnBoYW5fY2JzX2xpc3Q7Ci0JcnNwLT5vcnBoYW5fcWxlbiA9IDA7Ci0JcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJzcC0+b25vZmZsb2NrLCBmbGFncyk7CiB9CiAKIC8qCkBAIC0xMDgxLDggKzEwODIsNiBAQAogCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CiAJaWYgKG5lZWRfcmVwb3J0ICYgUkNVX09GTF9UQVNLU19FWFBfR1ApCiAJCXJjdV9yZXBvcnRfZXhwX3JucChyc3AsIHJucCk7Ci0KLQlyY3VfYWRvcHRfb3JwaGFuX2Nicyhyc3ApOwogfQogCiAvKgpAQCAtMTEwMCwxMSArMTA5OSw3IEBACiAKICNlbHNlIC8qICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUgKi8KIAotc3RhdGljIHZvaWQgcmN1X3NlbmRfY2JzX3RvX29ycGhhbmFnZShzdHJ1Y3QgcmN1X3N0YXRlICpyc3ApCi17Ci19Ci0KLXN0YXRpYyB2b2lkIHJjdV9hZG9wdF9vcnBoYW5fY2JzKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCkKK3N0YXRpYyB2b2lkIHJjdV9zZW5kX2Nic190b19vbmxpbmUoc3RydWN0IHJjdV9zdGF0ZSAqcnNwKQogewogfQogCkBAIC0xNDQwLDIyICsxNDM1LDExIEBACiAJICovCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCXJkcCA9IHRoaXNfY3B1X3B0cihyc3AtPnJkYSk7Ci0JcmN1X3Byb2Nlc3NfZ3BfZW5kKHJzcCwgcmRwKTsKLQljaGVja19mb3JfbmV3X2dyYWNlX3BlcmlvZChyc3AsIHJkcCk7CiAKIAkvKiBBZGQgdGhlIGNhbGxiYWNrIHRvIG91ciBsaXN0LiAqLwogCSpyZHAtPm54dHRhaWxbUkNVX05FWFRfVEFJTF0gPSBoZWFkOwogCXJkcC0+bnh0dGFpbFtSQ1VfTkVYVF9UQUlMXSA9ICZoZWFkLT5uZXh0OwogCi0JLyogU3RhcnQgYSBuZXcgZ3JhY2UgcGVyaW9kIGlmIG9uZSBub3QgYWxyZWFkeSBzdGFydGVkLiAqLwotCWlmICghcmN1X2dwX2luX3Byb2dyZXNzKHJzcCkpIHsKLQkJdW5zaWduZWQgbG9uZyBuZXN0ZmxhZzsKLQkJc3RydWN0IHJjdV9ub2RlICpybnBfcm9vdCA9IHJjdV9nZXRfcm9vdChyc3ApOwotCi0JCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcm5wX3Jvb3QtPmxvY2ssIG5lc3RmbGFnKTsKLQkJcmN1X3N0YXJ0X2dwKHJzcCwgbmVzdGZsYWcpOyAgLyogcmVsZWFzZXMgcm5wX3Jvb3QtPmxvY2suICovCi0JfQotCiAJLyoKIAkgKiBGb3JjZSB0aGUgZ3JhY2UgcGVyaW9kIGlmIHRvbyBtYW55IGNhbGxiYWNrcyBvciB0b28gbG9uZyB3YWl0aW5nLgogCSAqIEVuZm9yY2UgaHlzdGVyZXNpcywgYW5kIGRvbid0IGludm9rZSBmb3JjZV9xdWllc2NlbnRfc3RhdGUoKQpAQCAtMTQ2NCwxMiArMTQ0OCwyNyBAQAogCSAqIGlzIHRoZSBvbmx5IG9uZSB3YWl0aW5nIGZvciBhIGdyYWNlIHBlcmlvZCB0byBjb21wbGV0ZS4KIAkgKi8KIAlpZiAodW5saWtlbHkoKytyZHAtPnFsZW4gPiByZHAtPnFsZW5fbGFzdF9mcXNfY2hlY2sgKyBxaGltYXJrKSkgewotCQlyZHAtPmJsaW1pdCA9IExPTkdfTUFYOwotCQlpZiAocnNwLT5uX2ZvcmNlX3FzID09IHJkcC0+bl9mb3JjZV9xc19zbmFwICYmCi0JCSAgICAqcmRwLT5ueHR0YWlsW1JDVV9ET05FX1RBSUxdICE9IGhlYWQpCi0JCQlmb3JjZV9xdWllc2NlbnRfc3RhdGUocnNwLCAwKTsKLQkJcmRwLT5uX2ZvcmNlX3FzX3NuYXAgPSByc3AtPm5fZm9yY2VfcXM7Ci0JCXJkcC0+cWxlbl9sYXN0X2Zxc19jaGVjayA9IHJkcC0+cWxlbjsKKworCQkvKiBBcmUgd2UgaWdub3JpbmcgYSBjb21wbGV0ZWQgZ3JhY2UgcGVyaW9kPyAqLworCQlyY3VfcHJvY2Vzc19ncF9lbmQocnNwLCByZHApOworCQljaGVja19mb3JfbmV3X2dyYWNlX3BlcmlvZChyc3AsIHJkcCk7CisKKwkJLyogU3RhcnQgYSBuZXcgZ3JhY2UgcGVyaW9kIGlmIG9uZSBub3QgYWxyZWFkeSBzdGFydGVkLiAqLworCQlpZiAoIXJjdV9ncF9pbl9wcm9ncmVzcyhyc3ApKSB7CisJCQl1bnNpZ25lZCBsb25nIG5lc3RmbGFnOworCQkJc3RydWN0IHJjdV9ub2RlICpybnBfcm9vdCA9IHJjdV9nZXRfcm9vdChyc3ApOworCisJCQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnJucF9yb290LT5sb2NrLCBuZXN0ZmxhZyk7CisJCQlyY3Vfc3RhcnRfZ3AocnNwLCBuZXN0ZmxhZyk7ICAvKiBybHNlcyBybnBfcm9vdC0+bG9jayAqLworCQl9IGVsc2UgeworCQkJLyogR2l2ZSB0aGUgZ3JhY2UgcGVyaW9kIGEga2ljay4gKi8KKwkJCXJkcC0+YmxpbWl0ID0gTE9OR19NQVg7CisJCQlpZiAocnNwLT5uX2ZvcmNlX3FzID09IHJkcC0+bl9mb3JjZV9xc19zbmFwICYmCisJCQkgICAgKnJkcC0+bnh0dGFpbFtSQ1VfRE9ORV9UQUlMXSAhPSBoZWFkKQorCQkJCWZvcmNlX3F1aWVzY2VudF9zdGF0ZShyc3AsIDApOworCQkJcmRwLT5uX2ZvcmNlX3FzX3NuYXAgPSByc3AtPm5fZm9yY2VfcXM7CisJCQlyZHAtPnFsZW5fbGFzdF9mcXNfY2hlY2sgPSByZHAtPnFsZW47CisJCX0KIAl9IGVsc2UgaWYgKFVMT05HX0NNUF9MVChBQ0NFU1NfT05DRShyc3AtPmppZmZpZXNfZm9yY2VfcXMpLCBqaWZmaWVzKSkKIAkJZm9yY2VfcXVpZXNjZW50X3N0YXRlKHJzcCwgMSk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwpAQCAtMTY5OSwxMyArMTY5OCwxMiBAQAogCSAqIGRlY3JlbWVudCByY3VfYmFycmllcl9jcHVfY291bnQgLS0gb3RoZXJ3aXNlIHRoZSBmaXJzdCBDUFUKIAkgKiBtaWdodCBjb21wbGV0ZSBpdHMgZ3JhY2UgcGVyaW9kIGJlZm9yZSBhbGwgb2YgdGhlIG90aGVyIENQVXMKIAkgKiBkaWQgdGhlaXIgaW5jcmVtZW50LCBjYXVzaW5nIHRoaXMgZnVuY3Rpb24gdG8gcmV0dXJuIHRvbwotCSAqIGVhcmx5LgorCSAqIGVhcmx5LiAgTm90ZSB0aGF0IG9uX2VhY2hfY3B1KCkgZGlzYWJsZXMgaXJxcywgd2hpY2ggcHJldmVudHMKKwkgKiBhbnkgQ1BVcyBmcm9tIGNvbWluZyBvbmxpbmUgb3IgZ29pbmcgb2ZmbGluZSB1bnRpbCBlYWNoIG9ubGluZQorCSAqIENQVSBoYXMgcXVldWVkIGl0cyBSQ1UtYmFycmllciBjYWxsYmFjay4KIAkgKi8KIAlhdG9taWNfc2V0KCZyY3VfYmFycmllcl9jcHVfY291bnQsIDEpOwotCXByZWVtcHRfZGlzYWJsZSgpOyAvKiBzdG9wIENQVV9EWUlORyBmcm9tIGZpbGxpbmcgb3JwaGFuX2Nic19saXN0ICovCi0JcmN1X2Fkb3B0X29ycGhhbl9jYnMocnNwKTsKIAlvbl9lYWNoX2NwdShyY3VfYmFycmllcl9mdW5jLCAodm9pZCAqKWNhbGxfcmN1X2Z1bmMsIDEpOwotCXByZWVtcHRfZW5hYmxlKCk7IC8qIENQVV9EWUlORyBjYW4gYWdhaW4gZmlsbCBvcnBoYW5fY2JzX2xpc3QgKi8KIAlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmcmN1X2JhcnJpZXJfY3B1X2NvdW50KSkKIAkJY29tcGxldGUoJnJjdV9iYXJyaWVyX2NvbXBsZXRpb24pOwogCXdhaXRfZm9yX2NvbXBsZXRpb24oJnJjdV9iYXJyaWVyX2NvbXBsZXRpb24pOwpAQCAtMTgzMSwxOCArMTgyOSwxMyBAQAogCWNhc2UgQ1BVX0RZSU5HOgogCWNhc2UgQ1BVX0RZSU5HX0ZST1pFTjoKIAkJLyoKLQkJICogcHJlZW1wdF9kaXNhYmxlKCkgaW4gX3JjdV9iYXJyaWVyKCkgcHJldmVudHMgc3RvcF9tYWNoaW5lKCksCi0JCSAqIHNvIHdoZW4gIm9uX2VhY2hfY3B1KHJjdV9iYXJyaWVyX2Z1bmMsICh2b2lkICopdHlwZSwgMSk7IgotCQkgKiByZXR1cm5zLCBhbGwgb25saW5lIGNwdXMgaGF2ZSBxdWV1ZWQgcmN1X2JhcnJpZXJfZnVuYygpLgotCQkgKiBUaGUgZHlpbmcgQ1BVIGNsZWFycyBpdHMgY3B1X29ubGluZV9tYXNrIGJpdCBhbmQKLQkJICogbW92ZXMgYWxsIG9mIGl0cyBSQ1UgY2FsbGJhY2tzIHRvIC0+b3JwaGFuX2Nic19saXN0Ci0JCSAqIGluIHRoZSBjb250ZXh0IG9mIHN0b3BfbWFjaGluZSgpLCBzbyBzdWJzZXF1ZW50IGNhbGxzCi0JCSAqIHRvIF9yY3VfYmFycmllcigpIHdpbGwgYWRvcHQgdGhlc2UgY2FsbGJhY2tzIGFuZCBvbmx5Ci0JCSAqIHRoZW4gcXVldWUgcmN1X2JhcnJpZXJfZnVuYygpIG9uIGFsbCByZW1haW5pbmcgQ1BVcy4KKwkJICogVGhlIHdob2xlIG1hY2hpbmUgaXMgInN0b3BwZWQiIGV4Y2VwdCB0aGlzIENQVSwgc28gd2UgY2FuCisJCSAqIHRvdWNoIGFueSBkYXRhIHdpdGhvdXQgaW50cm9kdWNpbmcgY29ycnVwdGlvbi4gV2Ugc2VuZCB0aGUKKwkJICogZHlpbmcgQ1BVJ3MgY2FsbGJhY2tzIHRvIGFuIGFyYml0cmFyaWx5IGNob3NlbiBvbmxpbmUgQ1BVLgogCQkgKi8KLQkJcmN1X3NlbmRfY2JzX3RvX29ycGhhbmFnZSgmcmN1X2JoX3N0YXRlKTsKLQkJcmN1X3NlbmRfY2JzX3RvX29ycGhhbmFnZSgmcmN1X3NjaGVkX3N0YXRlKTsKLQkJcmN1X3ByZWVtcHRfc2VuZF9jYnNfdG9fb3JwaGFuYWdlKCk7CisJCXJjdV9zZW5kX2Nic190b19vbmxpbmUoJnJjdV9iaF9zdGF0ZSk7CisJCXJjdV9zZW5kX2Nic190b19vbmxpbmUoJnJjdV9zY2hlZF9zdGF0ZSk7CisJCXJjdV9wcmVlbXB0X3NlbmRfY2JzX3RvX29ubGluZSgpOwogCQlicmVhazsKIAljYXNlIENQVV9ERUFEOgogCWNhc2UgQ1BVX0RFQURfRlJPWkVOOgpAQCAtMTg4MCw4ICsxODczLDkgQEAKIHsKIAlpbnQgaTsKIAotCWZvciAoaSA9IE5VTV9SQ1VfTFZMUyAtIDE7IGkgPj0gMDsgaS0tKQorCWZvciAoaSA9IE5VTV9SQ1VfTFZMUyAtIDE7IGkgPiAwOyBpLS0pCiAJCXJzcC0+bGV2ZWxzcHJlYWRbaV0gPSBDT05GSUdfUkNVX0ZBTk9VVDsKKwlyc3AtPmxldmVsc3ByZWFkWzBdID0gUkNVX0ZBTk9VVF9MRUFGOwogfQogI2Vsc2UgLyogI2lmZGVmIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUICovCiBzdGF0aWMgdm9pZCBfX2luaXQgcmN1X2luaXRfbGV2ZWxzcHJlYWQoc3RydWN0IHJjdV9zdGF0ZSAqcnNwKQpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdXRyZWUuaCBiL2tlcm5lbC9yY3V0cmVlLmgKaW5kZXggOTFkNDE3MC4uZThmMDU3ZSAxMDA2NDQKLS0tIGEva2VybmVsL3JjdXRyZWUuaAorKysgYi9rZXJuZWwvcmN1dHJlZS5oCkBAIC0zMSw0NiArMzEsNTEgQEAKIC8qCiAgKiBEZWZpbmUgc2hhcGUgb2YgaGllcmFyY2h5IGJhc2VkIG9uIE5SX0NQVVMgYW5kIENPTkZJR19SQ1VfRkFOT1VULgogICogSW4gdGhlb3J5LCBpdCBzaG91bGQgYmUgcG9zc2libGUgdG8gYWRkIG1vcmUgbGV2ZWxzIHN0cmFpZ2h0Zm9yd2FyZGx5LgotICogSW4gcHJhY3RpY2UsIHRoaXMgaGFzIG5vdCBiZWVuIHRlc3RlZCwgc28gdGhlcmUgaXMgcHJvYmFibHkgc29tZQotICogYnVnIHNvbWV3aGVyZS4KKyAqIEluIHByYWN0aWNlLCB0aGlzIGRpZCB3b3JrIHdlbGwgZ29pbmcgZnJvbSB0aHJlZSBsZXZlbHMgdG8gZm91ci4KKyAqIE9mIGNvdXJzZSwgeW91ciBtaWxlYWdlIG1heSB2YXJ5LgogICovCiAjZGVmaW5lIE1BWF9SQ1VfTFZMUyA0Ci0jZGVmaW5lIFJDVV9GQU5PVVQJICAgICAgKENPTkZJR19SQ1VfRkFOT1VUKQotI2RlZmluZSBSQ1VfRkFOT1VUX1NRCSAgICAgIChSQ1VfRkFOT1VUICogUkNVX0ZBTk9VVCkKLSNkZWZpbmUgUkNVX0ZBTk9VVF9DVUJFCSAgICAgIChSQ1VfRkFOT1VUX1NRICogUkNVX0ZBTk9VVCkKLSNkZWZpbmUgUkNVX0ZBTk9VVF9GT1VSVEggICAgIChSQ1VfRkFOT1VUX0NVQkUgKiBSQ1VfRkFOT1VUKQorI2lmIENPTkZJR19SQ1VfRkFOT1VUID4gMTYKKyNkZWZpbmUgUkNVX0ZBTk9VVF9MRUFGICAgICAgIDE2CisjZWxzZSAvKiAjaWYgQ09ORklHX1JDVV9GQU5PVVQgPiAxNiAqLworI2RlZmluZSBSQ1VfRkFOT1VUX0xFQUYgICAgICAgKENPTkZJR19SQ1VfRkFOT1VUKQorI2VuZGlmIC8qICNlbHNlICNpZiBDT05GSUdfUkNVX0ZBTk9VVCA+IDE2ICovCisjZGVmaW5lIFJDVV9GQU5PVVRfMQkgICAgICAoUkNVX0ZBTk9VVF9MRUFGKQorI2RlZmluZSBSQ1VfRkFOT1VUXzIJICAgICAgKFJDVV9GQU5PVVRfMSAqIENPTkZJR19SQ1VfRkFOT1VUKQorI2RlZmluZSBSQ1VfRkFOT1VUXzMJICAgICAgKFJDVV9GQU5PVVRfMiAqIENPTkZJR19SQ1VfRkFOT1VUKQorI2RlZmluZSBSQ1VfRkFOT1VUXzQJICAgICAgKFJDVV9GQU5PVVRfMyAqIENPTkZJR19SQ1VfRkFOT1VUKQogCi0jaWYgTlJfQ1BVUyA8PSBSQ1VfRkFOT1VUCisjaWYgTlJfQ1BVUyA8PSBSQ1VfRkFOT1VUXzEKICMgIGRlZmluZSBOVU1fUkNVX0xWTFMJICAgICAgMQogIyAgZGVmaW5lIE5VTV9SQ1VfTFZMXzAJICAgICAgMQogIyAgZGVmaW5lIE5VTV9SQ1VfTFZMXzEJICAgICAgKE5SX0NQVVMpCiAjICBkZWZpbmUgTlVNX1JDVV9MVkxfMgkgICAgICAwCiAjICBkZWZpbmUgTlVNX1JDVV9MVkxfMwkgICAgICAwCiAjICBkZWZpbmUgTlVNX1JDVV9MVkxfNAkgICAgICAwCi0jZWxpZiBOUl9DUFVTIDw9IFJDVV9GQU5PVVRfU1EKKyNlbGlmIE5SX0NQVVMgPD0gUkNVX0ZBTk9VVF8yCiAjICBkZWZpbmUgTlVNX1JDVV9MVkxTCSAgICAgIDIKICMgIGRlZmluZSBOVU1fUkNVX0xWTF8wCSAgICAgIDEKLSMgIGRlZmluZSBOVU1fUkNVX0xWTF8xCSAgICAgIERJVl9ST1VORF9VUChOUl9DUFVTLCBSQ1VfRkFOT1VUKQorIyAgZGVmaW5lIE5VTV9SQ1VfTFZMXzEJICAgICAgRElWX1JPVU5EX1VQKE5SX0NQVVMsIFJDVV9GQU5PVVRfMSkKICMgIGRlZmluZSBOVU1fUkNVX0xWTF8yCSAgICAgIChOUl9DUFVTKQogIyAgZGVmaW5lIE5VTV9SQ1VfTFZMXzMJICAgICAgMAogIyAgZGVmaW5lIE5VTV9SQ1VfTFZMXzQJICAgICAgMAotI2VsaWYgTlJfQ1BVUyA8PSBSQ1VfRkFOT1VUX0NVQkUKKyNlbGlmIE5SX0NQVVMgPD0gUkNVX0ZBTk9VVF8zCiAjICBkZWZpbmUgTlVNX1JDVV9MVkxTCSAgICAgIDMKICMgIGRlZmluZSBOVU1fUkNVX0xWTF8wCSAgICAgIDEKLSMgIGRlZmluZSBOVU1fUkNVX0xWTF8xCSAgICAgIERJVl9ST1VORF9VUChOUl9DUFVTLCBSQ1VfRkFOT1VUX1NRKQotIyAgZGVmaW5lIE5VTV9SQ1VfTFZMXzIJICAgICAgRElWX1JPVU5EX1VQKE5SX0NQVVMsIFJDVV9GQU5PVVQpCi0jICBkZWZpbmUgTlVNX1JDVV9MVkxfMwkgICAgICBOUl9DUFVTCisjICBkZWZpbmUgTlVNX1JDVV9MVkxfMQkgICAgICBESVZfUk9VTkRfVVAoTlJfQ1BVUywgUkNVX0ZBTk9VVF8yKQorIyAgZGVmaW5lIE5VTV9SQ1VfTFZMXzIJICAgICAgRElWX1JPVU5EX1VQKE5SX0NQVVMsIFJDVV9GQU5PVVRfMSkKKyMgIGRlZmluZSBOVU1fUkNVX0xWTF8zCSAgICAgIChOUl9DUFVTKQogIyAgZGVmaW5lIE5VTV9SQ1VfTFZMXzQJICAgICAgMAotI2VsaWYgTlJfQ1BVUyA8PSBSQ1VfRkFOT1VUX0ZPVVJUSAorI2VsaWYgTlJfQ1BVUyA8PSBSQ1VfRkFOT1VUXzQKICMgIGRlZmluZSBOVU1fUkNVX0xWTFMJICAgICAgNAogIyAgZGVmaW5lIE5VTV9SQ1VfTFZMXzAJICAgICAgMQotIyAgZGVmaW5lIE5VTV9SQ1VfTFZMXzEJICAgICAgRElWX1JPVU5EX1VQKE5SX0NQVVMsIFJDVV9GQU5PVVRfQ1VCRSkKLSMgIGRlZmluZSBOVU1fUkNVX0xWTF8yCSAgICAgIERJVl9ST1VORF9VUChOUl9DUFVTLCBSQ1VfRkFOT1VUX1NRKQotIyAgZGVmaW5lIE5VTV9SQ1VfTFZMXzMJICAgICAgRElWX1JPVU5EX1VQKE5SX0NQVVMsIFJDVV9GQU5PVVQpCi0jICBkZWZpbmUgTlVNX1JDVV9MVkxfNAkgICAgICBOUl9DUFVTCisjICBkZWZpbmUgTlVNX1JDVV9MVkxfMQkgICAgICBESVZfUk9VTkRfVVAoTlJfQ1BVUywgUkNVX0ZBTk9VVF8zKQorIyAgZGVmaW5lIE5VTV9SQ1VfTFZMXzIJICAgICAgRElWX1JPVU5EX1VQKE5SX0NQVVMsIFJDVV9GQU5PVVRfMikKKyMgIGRlZmluZSBOVU1fUkNVX0xWTF8zCSAgICAgIERJVl9ST1VORF9VUChOUl9DUFVTLCBSQ1VfRkFOT1VUXzEpCisjICBkZWZpbmUgTlVNX1JDVV9MVkxfNAkgICAgICAoTlJfQ1BVUykKICNlbHNlCiAjIGVycm9yICJDT05GSUdfUkNVX0ZBTk9VVCBpbnN1ZmZpY2llbnQgZm9yIE5SX0NQVVMiCi0jZW5kaWYgLyogI2lmIChOUl9DUFVTKSA8PSBSQ1VfRkFOT1VUICovCisjZW5kaWYgLyogI2lmIChOUl9DUFVTKSA8PSBSQ1VfRkFOT1VUXzEgKi8KIAogI2RlZmluZSBSQ1VfU1VNIChOVU1fUkNVX0xWTF8wICsgTlVNX1JDVV9MVkxfMSArIE5VTV9SQ1VfTFZMXzIgKyBOVU1fUkNVX0xWTF8zICsgTlVNX1JDVV9MVkxfNCkKICNkZWZpbmUgTlVNX1JDVV9OT0RFUyAoUkNVX1NVTSAtIE5SX0NQVVMpCkBAIC0yMDMsOCArMjA4LDggQEAKIAlsb25nCQlxbGVuX2xhc3RfZnFzX2NoZWNrOwogCQkJCQkvKiBxbGVuIGF0IGxhc3QgY2hlY2sgZm9yIFFTIGZvcmNpbmcgKi8KIAl1bnNpZ25lZCBsb25nCW5fY2JzX2ludm9rZWQ7CS8qIGNvdW50IG9mIFJDVSBjYnMgaW52b2tlZC4gKi8KLQl1bnNpZ25lZCBsb25nCW5fY2JzX29ycGhhbmVkOwkvKiBSQ1UgY2JzIHNlbnQgdG8gb3JwaGFuYWdlLiAqLwotCXVuc2lnbmVkIGxvbmcJbl9jYnNfYWRvcHRlZDsJLyogUkNVIGNicyBhZG9wdGVkIGZyb20gb3JwaGFuYWdlLiAqLworCXVuc2lnbmVkIGxvbmcgICBuX2Nic19vcnBoYW5lZDsgLyogUkNVIGNicyBvcnBoYW5lZCBieSBkeWluZyBDUFUgKi8KKwl1bnNpZ25lZCBsb25nICAgbl9jYnNfYWRvcHRlZDsgIC8qIFJDVSBjYnMgYWRvcHRlZCBmcm9tIGR5aW5nIENQVSAqLwogCXVuc2lnbmVkIGxvbmcJbl9mb3JjZV9xc19zbmFwOwogCQkJCQkvKiBkaWQgb3RoZXIgQ1BVIGZvcmNlIFFTIHJlY2VudGx5PyAqLwogCWxvbmcJCWJsaW1pdDsJCS8qIFVwcGVyIGxpbWl0IG9uIGEgcHJvY2Vzc2VkIGJhdGNoICovCkBAIC0zMDksMTUgKzMxNCw3IEBACiAJLyogRW5kIG9mIGZpZWxkcyBndWFyZGVkIGJ5IHJvb3QgcmN1X25vZGUncyBsb2NrLiAqLwogCiAJcmF3X3NwaW5sb2NrX3Qgb25vZmZsb2NrOwkJLyogZXhjbHVkZSBvbi9vZmZsaW5lIGFuZCAqLwotCQkJCQkJLyogIHN0YXJ0aW5nIG5ldyBHUC4gIEFsc28gKi8KLQkJCQkJCS8qICBwcm90ZWN0cyB0aGUgZm9sbG93aW5nICovCi0JCQkJCQkvKiAgb3JwaGFuX2NicyBmaWVsZHMuICovCi0Jc3RydWN0IHJjdV9oZWFkICpvcnBoYW5fY2JzX2xpc3Q7CS8qIGxpc3Qgb2YgcmN1X2hlYWQgc3RydWN0cyAqLwotCQkJCQkJLyogIG9ycGhhbmVkIGJ5IGFsbCBDUFVzIGluICovCi0JCQkJCQkvKiAgYSBnaXZlbiBsZWFmIHJjdV9ub2RlICovCi0JCQkJCQkvKiAgZ29pbmcgb2ZmbGluZS4gKi8KLQlzdHJ1Y3QgcmN1X2hlYWQgKipvcnBoYW5fY2JzX3RhaWw7CS8qIEFuZCB0YWlsIHBvaW50ZXIuICovCi0JbG9uZyBvcnBoYW5fcWxlbjsJCQkvKiBOdW1iZXIgb2Ygb3JwaGFuZWQgY2JzLiAqLworCQkJCQkJLyogIHN0YXJ0aW5nIG5ldyBHUC4gKi8KIAlyYXdfc3BpbmxvY2tfdCBmcXNsb2NrOwkJCS8qIE9ubHkgb25lIHRhc2sgZm9yY2luZyAqLwogCQkJCQkJLyogIHF1aWVzY2VudCBzdGF0ZXMuICovCiAJdW5zaWduZWQgbG9uZyBqaWZmaWVzX2ZvcmNlX3FzOwkJLyogVGltZSBhdCB3aGljaCB0byBpbnZva2UgKi8KQEAgLTM5MCw3ICszODcsNyBAQAogc3RhdGljIGludCByY3VfcHJlZW1wdF9wZW5kaW5nKGludCBjcHUpOwogc3RhdGljIGludCByY3VfcHJlZW1wdF9uZWVkc19jcHUoaW50IGNwdSk7CiBzdGF0aWMgdm9pZCBfX2NwdWluaXQgcmN1X3ByZWVtcHRfaW5pdF9wZXJjcHVfZGF0YShpbnQgY3B1KTsKLXN0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X3NlbmRfY2JzX3RvX29ycGhhbmFnZSh2b2lkKTsKK3N0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X3NlbmRfY2JzX3RvX29ubGluZSh2b2lkKTsKIHN0YXRpYyB2b2lkIF9faW5pdCBfX3JjdV9pbml0X3ByZWVtcHQodm9pZCk7CiBzdGF0aWMgdm9pZCByY3VfbmVlZHNfY3B1X2ZsdXNoKHZvaWQpOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1dHJlZV9wbHVnaW4uaCBiL2tlcm5lbC9yY3V0cmVlX3BsdWdpbi5oCmluZGV4IDcxYTQxNDcuLmEzNjM4NzEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3V0cmVlX3BsdWdpbi5oCisrKyBiL2tlcm5lbC9yY3V0cmVlX3BsdWdpbi5oCkBAIC0yNSw2ICsyNSw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc3RvcF9tYWNoaW5lLmg+CiAKIC8qCiAgKiBDaGVjayB0aGUgUkNVIGtlcm5lbCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgYW5kIHByaW50IGluZm9ybWF0aXZlCkBAIC03NzMsMTEgKzc3NCwxMSBAQAogfQogCiAvKgotICogTW92ZSBwcmVlbXB0YWJsZSBSQ1UncyBjYWxsYmFja3MgdG8gLT5vcnBoYW5fY2JzX2xpc3QuCisgKiBNb3ZlIHByZWVtcHRhYmxlIFJDVSdzIGNhbGxiYWNrcyBmcm9tIGR5aW5nIENQVSB0byBvdGhlciBvbmxpbmUgQ1BVLgogICovCi1zdGF0aWMgdm9pZCByY3VfcHJlZW1wdF9zZW5kX2Nic190b19vcnBoYW5hZ2Uodm9pZCkKK3N0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X3NlbmRfY2JzX3RvX29ubGluZSh2b2lkKQogewotCXJjdV9zZW5kX2Nic190b19vcnBoYW5hZ2UoJnJjdV9wcmVlbXB0X3N0YXRlKTsKKwlyY3Vfc2VuZF9jYnNfdG9fb25saW5lKCZyY3VfcHJlZW1wdF9zdGF0ZSk7CiB9CiAKIC8qCkBAIC0xMDAxLDcgKzEwMDIsNyBAQAogLyoKICAqIEJlY2F1c2UgdGhlcmUgaXMgbm8gcHJlZW1wdGFibGUgUkNVLCB0aGVyZSBhcmUgbm8gY2FsbGJhY2tzIHRvIG1vdmUuCiAgKi8KLXN0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X3NlbmRfY2JzX3RvX29ycGhhbmFnZSh2b2lkKQorc3RhdGljIHZvaWQgcmN1X3ByZWVtcHRfc2VuZF9jYnNfdG9fb25saW5lKHZvaWQpCiB7CiB9CiAKQEAgLTEwMTQsNiArMTAxNSwxMzIgQEAKIAogI2VuZGlmIC8qICNlbHNlICNpZmRlZiBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSAqLwogCisjaWZuZGVmIENPTkZJR19TTVAKKwordm9pZCBzeW5jaHJvbml6ZV9zY2hlZF9leHBlZGl0ZWQodm9pZCkKK3sKKwljb25kX3Jlc2NoZWQoKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHN5bmNocm9uaXplX3NjaGVkX2V4cGVkaXRlZCk7CisKKyNlbHNlIC8qICNpZm5kZWYgQ09ORklHX1NNUCAqLworCitzdGF0aWMgYXRvbWljX3Qgc3luY19zY2hlZF9leHBlZGl0ZWRfc3RhcnRlZCA9IEFUT01JQ19JTklUKDApOworc3RhdGljIGF0b21pY190IHN5bmNfc2NoZWRfZXhwZWRpdGVkX2RvbmUgPSBBVE9NSUNfSU5JVCgwKTsKKworc3RhdGljIGludCBzeW5jaHJvbml6ZV9zY2hlZF9leHBlZGl0ZWRfY3B1X3N0b3Aodm9pZCAqZGF0YSkKK3sKKwkvKgorCSAqIFRoZXJlIG11c3QgYmUgYSBmdWxsIG1lbW9yeSBiYXJyaWVyIG9uIGVhY2ggYWZmZWN0ZWQgQ1BVCisJICogYmV0d2VlbiB0aGUgdGltZSB0aGF0IHRyeV9zdG9wX2NwdXMoKSBpcyBjYWxsZWQgYW5kIHRoZQorCSAqIHRpbWUgdGhhdCBpdCByZXR1cm5zLgorCSAqCisJICogSW4gdGhlIGN1cnJlbnQgaW5pdGlhbCBpbXBsZW1lbnRhdGlvbiBvZiBjcHVfc3RvcCwgdGhlCisJICogYWJvdmUgY29uZGl0aW9uIGlzIGFscmVhZHkgbWV0IHdoZW4gdGhlIGNvbnRyb2wgcmVhY2hlcworCSAqIHRoaXMgcG9pbnQgYW5kIHRoZSBmb2xsb3dpbmcgc21wX21iKCkgaXMgbm90IHN0cmljdGx5CisJICogbmVjZXNzYXJ5LiAgRG8gc21wX21iKCkgYW55d2F5IGZvciBkb2N1bWVudGF0aW9uIGFuZAorCSAqIHJvYnVzdG5lc3MgYWdhaW5zdCBmdXR1cmUgaW1wbGVtZW50YXRpb24gY2hhbmdlcy4KKwkgKi8KKwlzbXBfbWIoKTsgLyogU2VlIGFib3ZlIGNvbW1lbnQgYmxvY2suICovCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBXYWl0IGZvciBhbiByY3Utc2NoZWQgZ3JhY2UgcGVyaW9kIHRvIGVsYXBzZSwgYnV0IHVzZSAiYmlnIGhhbW1lciIKKyAqIGFwcHJvYWNoIHRvIGZvcmNlIGdyYWNlIHBlcmlvZCB0byBlbmQgcXVpY2tseS4gIFRoaXMgY29uc3VtZXMKKyAqIHNpZ25pZmljYW50IHRpbWUgb24gYWxsIENQVXMsIGFuZCBpcyB0aHVzIG5vdCByZWNvbW1lbmRlZCBmb3IKKyAqIGFueSBzb3J0IG9mIGNvbW1vbi1jYXNlIGNvZGUuCisgKgorICogTm90ZSB0aGF0IGl0IGlzIGlsbGVnYWwgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIHdoaWxlIGhvbGRpbmcgYW55CisgKiBsb2NrIHRoYXQgaXMgYWNxdWlyZWQgYnkgYSBDUFUtaG90cGx1ZyBub3RpZmllci4gIEZhaWxpbmcgdG8KKyAqIG9ic2VydmUgdGhpcyByZXN0cmljdGlvbiB3aWxsIHJlc3VsdCBpbiBkZWFkbG9jay4KKyAqCisgKiBUaGlzIGltcGxlbWVudGF0aW9uIGNhbiBiZSB0aG91Z2h0IG9mIGFzIGFuIGFwcGxpY2F0aW9uIG9mIHRpY2tldAorICogbG9ja2luZyB0byBSQ1UsIHdpdGggc3luY19zY2hlZF9leHBlZGl0ZWRfc3RhcnRlZCBhbmQKKyAqIHN5bmNfc2NoZWRfZXhwZWRpdGVkX2RvbmUgdGFraW5nIG9uIHRoZSByb2xlcyBvZiB0aGUgaGFsdmVzCisgKiBvZiB0aGUgdGlja2V0LWxvY2sgd29yZC4gIEVhY2ggdGFzayBhdG9taWNhbGx5IGluY3JlbWVudHMKKyAqIHN5bmNfc2NoZWRfZXhwZWRpdGVkX3N0YXJ0ZWQgdXBvbiBlbnRyeSwgc25hcHNob3R0aW5nIHRoZSBvbGQgdmFsdWUsCisgKiB0aGVuIGF0dGVtcHRzIHRvIHN0b3AgYWxsIHRoZSBDUFVzLiAgSWYgdGhpcyBzdWNjZWVkcywgdGhlbiBlYWNoCisgKiBDUFUgd2lsbCBoYXZlIGV4ZWN1dGVkIGEgY29udGV4dCBzd2l0Y2gsIHJlc3VsdGluZyBpbiBhbiBSQ1Utc2NoZWQKKyAqIGdyYWNlIHBlcmlvZC4gIFdlIGFyZSB0aGVuIGRvbmUsIHNvIHdlIHVzZSBhdG9taWNfY21weGNoZygpIHRvCisgKiB1cGRhdGUgc3luY19zY2hlZF9leHBlZGl0ZWRfZG9uZSB0byBtYXRjaCBvdXIgc25hcHNob3QgLS0gYnV0CisgKiBvbmx5IGlmIHNvbWVvbmUgZWxzZSBoYXMgbm90IGFscmVhZHkgYWR2YW5jZWQgcGFzdCBvdXIgc25hcHNob3QuCisgKgorICogT24gdGhlIG90aGVyIGhhbmQsIGlmIHRyeV9zdG9wX2NwdXMoKSBmYWlscywgd2UgY2hlY2sgdGhlIHZhbHVlCisgKiBvZiBzeW5jX3NjaGVkX2V4cGVkaXRlZF9kb25lLiAgSWYgaXQgaGFzIGFkdmFuY2VkIHBhc3Qgb3VyCisgKiBpbml0aWFsIHNuYXBzaG90LCB0aGVuIHNvbWVvbmUgZWxzZSBtdXN0IGhhdmUgZm9yY2VkIGEgZ3JhY2UgcGVyaW9kCisgKiBzb21lIHRpbWUgYWZ0ZXIgd2UgdG9vayBvdXIgc25hcHNob3QuICBJbiB0aGlzIGNhc2UsIG91ciB3b3JrIGlzCisgKiBkb25lIGZvciB1cywgYW5kIHdlIGNhbiBzaW1wbHkgcmV0dXJuLiAgT3RoZXJ3aXNlLCB3ZSB0cnkgYWdhaW4sCisgKiBidXQga2VlcCBvdXIgaW5pdGlhbCBzbmFwc2hvdCBmb3IgcHVycG9zZXMgb2YgY2hlY2tpbmcgZm9yIHNvbWVvbmUKKyAqIGRvaW5nIG91ciB3b3JrIGZvciB1cy4KKyAqCisgKiBJZiB3ZSBmYWlsIHRvbyBtYW55IHRpbWVzIGluIGEgcm93LCB3ZSBmYWxsIGJhY2sgdG8gc3luY2hyb25pemVfc2NoZWQoKS4KKyAqLwordm9pZCBzeW5jaHJvbml6ZV9zY2hlZF9leHBlZGl0ZWQodm9pZCkKK3sKKwlpbnQgZmlyc3RzbmFwLCBzLCBzbmFwLCB0cnljb3VudCA9IDA7CisKKwkvKiBOb3RlIHRoYXQgYXRvbWljX2luY19yZXR1cm4oKSBpbXBsaWVzIGZ1bGwgbWVtb3J5IGJhcnJpZXIuICovCisJZmlyc3RzbmFwID0gc25hcCA9IGF0b21pY19pbmNfcmV0dXJuKCZzeW5jX3NjaGVkX2V4cGVkaXRlZF9zdGFydGVkKTsKKwlnZXRfb25saW5lX2NwdXMoKTsKKworCS8qCisJICogRWFjaCBwYXNzIHRocm91Z2ggdGhlIGZvbGxvd2luZyBsb29wIGF0dGVtcHRzIHRvIGZvcmNlIGEKKwkgKiBjb250ZXh0IHN3aXRjaCBvbiBlYWNoIENQVS4KKwkgKi8KKwl3aGlsZSAodHJ5X3N0b3BfY3B1cyhjcHVfb25saW5lX21hc2ssCisJCQkgICAgIHN5bmNocm9uaXplX3NjaGVkX2V4cGVkaXRlZF9jcHVfc3RvcCwKKwkJCSAgICAgTlVMTCkgPT0gLUVBR0FJTikgeworCQlwdXRfb25saW5lX2NwdXMoKTsKKworCQkvKiBObyBqb3ksIHRyeSBhZ2FpbiBsYXRlci4gIE9yIGp1c3Qgc3luY2hyb25pemVfc2NoZWQoKS4gKi8KKwkJaWYgKHRyeWNvdW50KysgPCAxMCkKKwkJCXVkZWxheSh0cnljb3VudCAqIG51bV9vbmxpbmVfY3B1cygpKTsKKwkJZWxzZSB7CisJCQlzeW5jaHJvbml6ZV9zY2hlZCgpOworCQkJcmV0dXJuOworCQl9CisKKwkJLyogQ2hlY2sgdG8gc2VlIGlmIHNvbWVvbmUgZWxzZSBkaWQgb3VyIHdvcmsgZm9yIHVzLiAqLworCQlzID0gYXRvbWljX3JlYWQoJnN5bmNfc2NoZWRfZXhwZWRpdGVkX2RvbmUpOworCQlpZiAoVUlOVF9DTVBfR0UoKHVuc2lnbmVkKXMsICh1bnNpZ25lZClmaXJzdHNuYXApKSB7CisJCQlzbXBfbWIoKTsgLyogZW5zdXJlIHRlc3QgaGFwcGVucyBiZWZvcmUgY2FsbGVyIGtmcmVlICovCisJCQlyZXR1cm47CisJCX0KKworCQkvKgorCQkgKiBSZWZldGNoaW5nIHN5bmNfc2NoZWRfZXhwZWRpdGVkX3N0YXJ0ZWQgYWxsb3dzIGxhdGVyCisJCSAqIGNhbGxlcnMgdG8gcGlnZ3liYWNrIG9uIG91ciBncmFjZSBwZXJpb2QuICBXZSBzdWJ0cmFjdAorCQkgKiAxIHRvIGdldCB0aGUgc2FtZSB0b2tlbiB0aGF0IHRoZSBsYXN0IGluY3JlbWVudGVyIGdvdC4KKwkJICogV2UgcmV0cnkgYWZ0ZXIgdGhleSBzdGFydGVkLCBzbyBvdXIgZ3JhY2UgcGVyaW9kIHdvcmtzCisJCSAqIGZvciB0aGVtLCBhbmQgdGhleSBzdGFydGVkIGFmdGVyIG91ciBmaXJzdCB0cnksIHNvIHRoZWlyCisJCSAqIGdyYWNlIHBlcmlvZCB3b3JrcyBmb3IgdXMuCisJCSAqLworCQlnZXRfb25saW5lX2NwdXMoKTsKKwkJc25hcCA9IGF0b21pY19yZWFkKCZzeW5jX3NjaGVkX2V4cGVkaXRlZF9zdGFydGVkKSAtIDE7CisJCXNtcF9tYigpOyAvKiBlbnN1cmUgcmVhZCBpcyBiZWZvcmUgdHJ5X3N0b3BfY3B1cygpLiAqLworCX0KKworCS8qCisJICogRXZlcnlvbmUgdXAgdG8gb3VyIG1vc3QgcmVjZW50IGZldGNoIGlzIGNvdmVyZWQgYnkgb3VyIGdyYWNlCisJICogcGVyaW9kLiAgVXBkYXRlIHRoZSBjb3VudGVyLCBidXQgb25seSBpZiBvdXIgd29yayBpcyBzdGlsbAorCSAqIHJlbGV2YW50IC0tIHdoaWNoIGl0IHdvbid0IGJlIGlmIHNvbWVvbmUgd2hvIHN0YXJ0ZWQgbGF0ZXIKKwkgKiB0aGFuIHdlIGRpZCBiZWF0IHVzIHRvIHRoZSBwdW5jaC4KKwkgKi8KKwlkbyB7CisJCXMgPSBhdG9taWNfcmVhZCgmc3luY19zY2hlZF9leHBlZGl0ZWRfZG9uZSk7CisJCWlmIChVSU5UX0NNUF9HRSgodW5zaWduZWQpcywgKHVuc2lnbmVkKXNuYXApKSB7CisJCQlzbXBfbWIoKTsgLyogZW5zdXJlIHRlc3QgaGFwcGVucyBiZWZvcmUgY2FsbGVyIGtmcmVlICovCisJCQlicmVhazsKKwkJfQorCX0gd2hpbGUgKGF0b21pY19jbXB4Y2hnKCZzeW5jX3NjaGVkX2V4cGVkaXRlZF9kb25lLCBzLCBzbmFwKSAhPSBzKTsKKworCXB1dF9vbmxpbmVfY3B1cygpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc3luY2hyb25pemVfc2NoZWRfZXhwZWRpdGVkKTsKKworI2VuZGlmIC8qICNlbHNlICNpZm5kZWYgQ09ORklHX1NNUCAqLworCiAjaWYgIWRlZmluZWQoQ09ORklHX1JDVV9GQVNUX05PX0haKQogCiAvKgpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdXRyZWVfdHJhY2UuYyBiL2tlcm5lbC9yY3V0cmVlX3RyYWNlLmMKaW5kZXggZDE1NDMwYi4uYzhlOTc4NSAxMDA2NDQKLS0tIGEva2VybmVsL3JjdXRyZWVfdHJhY2UuYworKysgYi9rZXJuZWwvcmN1dHJlZV90cmFjZS5jCkBAIC0xNjYsMTMgKzE2NiwxMyBAQAogCiAJZ3BudW0gPSByc3AtPmdwbnVtOwogCXNlcV9wcmludGYobSwgImM9JWx1IGc9JWx1IHM9JWQgamZxPSVsZCBqPSV4ICIKLQkJICAgICAgIm5mcXM9JWx1L25mcXNuZz0lbHUoJWx1KSBmcWxoPSVsdSBvcWxlbj0lbGRcbiIsCisJCSAgICAgICJuZnFzPSVsdS9uZnFzbmc9JWx1KCVsdSkgZnFsaD0lbHVcbiIsCiAJCSAgIHJzcC0+Y29tcGxldGVkLCBncG51bSwgcnNwLT5zaWduYWxlZCwKIAkJICAgKGxvbmcpKHJzcC0+amlmZmllc19mb3JjZV9xcyAtIGppZmZpZXMpLAogCQkgICAoaW50KShqaWZmaWVzICYgMHhmZmZmKSwKIAkJICAgcnNwLT5uX2ZvcmNlX3FzLCByc3AtPm5fZm9yY2VfcXNfbmdwLAogCQkgICByc3AtPm5fZm9yY2VfcXMgLSByc3AtPm5fZm9yY2VfcXNfbmdwLAotCQkgICByc3AtPm5fZm9yY2VfcXNfbGgsIHJzcC0+b3JwaGFuX3FsZW4pOworCQkgICByc3AtPm5fZm9yY2VfcXNfbGgpOwogCWZvciAocm5wID0gJnJzcC0+bm9kZVswXTsgcm5wIC0gJnJzcC0+bm9kZVswXSA8IE5VTV9SQ1VfTk9ERVM7IHJucCsrKSB7CiAJCWlmIChybnAtPmxldmVsICE9IGxldmVsKSB7CiAJCQlzZXFfcHV0cyhtLCAiXG4iKTsKQEAgLTMwMCw3ICszMDAsNyBAQAogCiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqcmN1ZGlyOwogCi1zdGF0aWMgaW50IF9faW5pdCByY3VjbGFzc2ljX3RyYWNlX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IHJjdXRyZWVfdHJhY2VfaW5pdCh2b2lkKQogewogCXN0cnVjdCBkZW50cnkgKnJldHZhbDsKIApAQCAtMzM3LDE0ICszMzcsMTQgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIHZvaWQgX19leGl0IHJjdWNsYXNzaWNfdHJhY2VfY2xlYW51cCh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IHJjdXRyZWVfdHJhY2VfY2xlYW51cCh2b2lkKQogewogCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShyY3VkaXIpOwogfQogCiAKLW1vZHVsZV9pbml0KHJjdWNsYXNzaWNfdHJhY2VfaW5pdCk7Ci1tb2R1bGVfZXhpdChyY3VjbGFzc2ljX3RyYWNlX2NsZWFudXApOworbW9kdWxlX2luaXQocmN1dHJlZV90cmFjZV9pbml0KTsKK21vZHVsZV9leGl0KHJjdXRyZWVfdHJhY2VfY2xlYW51cCk7CiAKIE1PRFVMRV9BVVRIT1IoIlBhdWwgRS4gTWNLZW5uZXkiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiUmVhZC1Db3B5IFVwZGF0ZSB0cmFjaW5nIGZvciBoaWVyYXJjaGljYWwgaW1wbGVtZW50YXRpb24iKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC5jIGIva2VybmVsL3NjaGVkLmMKaW5kZXggMjk3ZDFhMC4uYTBlYjA5NCAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkLmMKKysrIGIva2VybmVsL3NjaGVkLmMKQEAgLTc1LDkgKzc1LDExIEBACiAKICNpbmNsdWRlIDxhc20vdGxiLmg+CiAjaW5jbHVkZSA8YXNtL2lycV9yZWdzLmg+CisjaW5jbHVkZSA8YXNtL211dGV4Lmg+CiAKICNpbmNsdWRlICJzY2hlZF9jcHVwcmkuaCIKICNpbmNsdWRlICJ3b3JrcXVldWVfc2NoZWQuaCIKKyNpbmNsdWRlICJzY2hlZF9hdXRvZ3JvdXAuaCIKIAogI2RlZmluZSBDUkVBVEVfVFJBQ0VfUE9JTlRTCiAjaW5jbHVkZSA8dHJhY2UvZXZlbnRzL3NjaGVkLmg+CkBAIC0yNTMsNiArMjU1LDggQEAKIAkvKiBydW5xdWV1ZSAib3duZWQiIGJ5IHRoaXMgZ3JvdXAgb24gZWFjaCBjcHUgKi8KIAlzdHJ1Y3QgY2ZzX3JxICoqY2ZzX3JxOwogCXVuc2lnbmVkIGxvbmcgc2hhcmVzOworCisJYXRvbWljX3QgbG9hZF93ZWlnaHQ7CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19SVF9HUk9VUF9TQ0hFRApAQCAtMjY4LDI1ICsyNzIsMTggQEAKIAlzdHJ1Y3QgdGFza19ncm91cCAqcGFyZW50OwogCXN0cnVjdCBsaXN0X2hlYWQgc2libGluZ3M7CiAJc3RydWN0IGxpc3RfaGVhZCBjaGlsZHJlbjsKKworI2lmZGVmIENPTkZJR19TQ0hFRF9BVVRPR1JPVVAKKwlzdHJ1Y3QgYXV0b2dyb3VwICphdXRvZ3JvdXA7CisjZW5kaWYKIH07CiAKLSNkZWZpbmUgcm9vdF90YXNrX2dyb3VwIGluaXRfdGFza19ncm91cAotCi0vKiB0YXNrX2dyb3VwX2xvY2sgc2VyaWFsaXplcyBhZGQvcmVtb3ZlIG9mIHRhc2sgZ3JvdXBzIGFuZCBhbHNvIGNoYW5nZXMgdG8KLSAqIGEgdGFzayBncm91cCdzIGNwdSBzaGFyZXMuCi0gKi8KKy8qIHRhc2tfZ3JvdXBfbG9jayBzZXJpYWxpemVzIHRoZSBhZGRpdGlvbi9yZW1vdmFsIG9mIHRhc2sgZ3JvdXBzICovCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHRhc2tfZ3JvdXBfbG9jayk7CiAKICNpZmRlZiBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRAogCi0jaWZkZWYgQ09ORklHX1NNUAotc3RhdGljIGludCByb290X3Rhc2tfZ3JvdXBfZW1wdHkodm9pZCkKLXsKLQlyZXR1cm4gbGlzdF9lbXB0eSgmcm9vdF90YXNrX2dyb3VwLmNoaWxkcmVuKTsKLX0KLSNlbmRpZgotCi0jIGRlZmluZSBJTklUX1RBU0tfR1JPVVBfTE9BRAlOSUNFXzBfTE9BRAorIyBkZWZpbmUgUk9PVF9UQVNLX0dST1VQX0xPQUQJTklDRV8wX0xPQUQKIAogLyoKICAqIEEgd2VpZ2h0IG9mIDAgb3IgMSBjYW4gY2F1c2UgYXJpdGhtZXRpY3MgcHJvYmxlbXMuCkBAIC0yOTksMTMgKzI5NiwxMyBAQAogI2RlZmluZSBNSU5fU0hBUkVTCTIKICNkZWZpbmUgTUFYX1NIQVJFUwkoMVVMIDw8IDE4KQogCi1zdGF0aWMgaW50IGluaXRfdGFza19ncm91cF9sb2FkID0gSU5JVF9UQVNLX0dST1VQX0xPQUQ7CitzdGF0aWMgaW50IHJvb3RfdGFza19ncm91cF9sb2FkID0gUk9PVF9UQVNLX0dST1VQX0xPQUQ7CiAjZW5kaWYKIAogLyogRGVmYXVsdCB0YXNrIGdyb3VwLgogICoJRXZlcnkgdGFzayBpbiBzeXN0ZW0gYmVsb25nIHRvIHRoaXMgZ3JvdXAgYXQgYm9vdHVwLgogICovCi1zdHJ1Y3QgdGFza19ncm91cCBpbml0X3Rhc2tfZ3JvdXA7CitzdHJ1Y3QgdGFza19ncm91cCByb290X3Rhc2tfZ3JvdXA7CiAKICNlbmRpZgkvKiBDT05GSUdfQ0dST1VQX1NDSEVEICovCiAKQEAgLTM0Miw2ICszMzksNyBAQAogCSAqIGxlYWZfY2ZzX3JxX2xpc3QgdGllcyB0b2dldGhlciBsaXN0IG9mIGxlYWYgY2ZzX3JxJ3MgaW4gYSBjcHUuIFRoaXMKIAkgKiBsaXN0IGlzIHVzZWQgZHVyaW5nIGxvYWQgYmFsYW5jZS4KIAkgKi8KKwlpbnQgb25fbGlzdDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxlYWZfY2ZzX3JxX2xpc3Q7CiAJc3RydWN0IHRhc2tfZ3JvdXAgKnRnOwkvKiBncm91cCB0aGF0ICJvd25zIiB0aGlzIHJ1bnF1ZXVlICovCiAKQEAgLTM2MCwxNCArMzU4LDE3IEBACiAJdW5zaWduZWQgbG9uZyBoX2xvYWQ7CiAKIAkvKgotCSAqIHRoaXMgY3B1J3MgcGFydCBvZiB0Zy0+c2hhcmVzCisJICogTWFpbnRhaW5pbmcgcGVyLWNwdSBzaGFyZXMgZGlzdHJpYnV0aW9uIGZvciBncm91cCBzY2hlZHVsaW5nCisJICoKKwkgKiBsb2FkX3N0YW1wIGlzIHRoZSBsYXN0IHRpbWUgd2UgdXBkYXRlZCB0aGUgbG9hZCBhdmVyYWdlCisJICogbG9hZF9sYXN0IGlzIHRoZSBsYXN0IHRpbWUgd2UgdXBkYXRlZCB0aGUgbG9hZCBhdmVyYWdlIGFuZCBzYXcgbG9hZAorCSAqIGxvYWRfdW5hY2NfZXhlY190aW1lIGlzIGN1cnJlbnRseSB1bmFjY291bnRlZCBleGVjdXRpb24gdGltZQogCSAqLwotCXVuc2lnbmVkIGxvbmcgc2hhcmVzOworCXU2NCBsb2FkX2F2ZzsKKwl1NjQgbG9hZF9wZXJpb2Q7CisJdTY0IGxvYWRfc3RhbXAsIGxvYWRfbGFzdCwgbG9hZF91bmFjY19leGVjX3RpbWU7CiAKLQkvKgotCSAqIGxvYWQud2VpZ2h0IGF0IHRoZSB0aW1lIHdlIHNldCBzaGFyZXMKLQkgKi8KLQl1bnNpZ25lZCBsb25nIHJxX3dlaWdodDsKKwl1bnNpZ25lZCBsb25nIGxvYWRfY29udHJpYnV0aW9uOwogI2VuZGlmCiAjZW5kaWYKIH07CkBAIC02MDUsMTEgKzYwNiwxNCBAQAogICovCiBzdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX2dyb3VwICp0YXNrX2dyb3VwKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKKwlzdHJ1Y3QgdGFza19ncm91cCAqdGc7CiAJc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzczsKIAogCWNzcyA9IHRhc2tfc3Vic3lzX3N0YXRlX2NoZWNrKHAsIGNwdV9jZ3JvdXBfc3Vic3lzX2lkLAogCQkJbG9ja2RlcF9pc19oZWxkKCZ0YXNrX3JxKHApLT5sb2NrKSk7Ci0JcmV0dXJuIGNvbnRhaW5lcl9vZihjc3MsIHN0cnVjdCB0YXNrX2dyb3VwLCBjc3MpOworCXRnID0gY29udGFpbmVyX29mKGNzcywgc3RydWN0IHRhc2tfZ3JvdXAsIGNzcyk7CisKKwlyZXR1cm4gYXV0b2dyb3VwX3Rhc2tfZ3JvdXAocCwgdGcpOwogfQogCiAvKiBDaGFuZ2UgYSB0YXNrJ3MgY2ZzX3JxIGFuZCBwYXJlbnQgZW50aXR5IGlmIGl0IG1vdmVzIGFjcm9zcyBDUFVzL2dyb3VwcyAqLwpAQCAtNzM3LDcgKzc0MSw3IEBACiAJYnVmW2NudF0gPSAwOwogCWNtcCA9IHN0cnN0cmlwKGJ1Zik7CiAKLQlpZiAoc3RybmNtcChidWYsICJOT18iLCAzKSA9PSAwKSB7CisJaWYgKHN0cm5jbXAoY21wLCAiTk9fIiwgMykgPT0gMCkgewogCQluZWcgPSAxOwogCQljbXAgKz0gMzsKIAl9CkBAIC03OTMsMjAgKzc5Nyw2IEBACiBjb25zdF9kZWJ1ZyB1bnNpZ25lZCBpbnQgc3lzY3RsX3NjaGVkX25yX21pZ3JhdGUgPSAzMjsKIAogLyoKLSAqIHJhdGVsaW1pdCBmb3IgdXBkYXRpbmcgdGhlIGdyb3VwIHNoYXJlcy4KLSAqIGRlZmF1bHQ6IDAuMjVtcwotICovCi11bnNpZ25lZCBpbnQgc3lzY3RsX3NjaGVkX3NoYXJlc19yYXRlbGltaXQgPSAyNTAwMDA7Ci11bnNpZ25lZCBpbnQgbm9ybWFsaXplZF9zeXNjdGxfc2NoZWRfc2hhcmVzX3JhdGVsaW1pdCA9IDI1MDAwMDsKLQotLyoKLSAqIEluamVjdCBzb21lIGZ1enp5bmVzcyBpbnRvIGNoYW5naW5nIHRoZSBwZXItY3B1IGdyb3VwIHNoYXJlcwotICogdGhpcyBhdm9pZHMgcmVtb3RlIHJxLWxvY2tzIGF0IHRoZSBleHBlbnNlIG9mIGZhaXJuZXNzLgotICogZGVmYXVsdDogNAotICovCi11bnNpZ25lZCBpbnQgc3lzY3RsX3NjaGVkX3NoYXJlc190aHJlc2ggPSA0OwotCi0vKgogICogcGVyaW9kIG92ZXIgd2hpY2ggd2UgYXZlcmFnZSB0aGUgUlQgdGltZSBjb25zdW1wdGlvbiwgbWVhc3VyZWQKICAqIGluIG1zLgogICoKQEAgLTEzNTUsNiArMTM0NSwxMiBAQAogCWx3LT5pbnZfd2VpZ2h0ID0gMDsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9sb2FkX3NldChzdHJ1Y3QgbG9hZF93ZWlnaHQgKmx3LCB1bnNpZ25lZCBsb25nIHcpCit7CisJbHctPndlaWdodCA9IHc7CisJbHctPmludl93ZWlnaHQgPSAwOworfQorCiAvKgogICogVG8gYWlkIGluIGF2b2lkaW5nIHRoZSBzdWJ2ZXJzaW9uIG9mICJuaWNlbmVzcyIgZHVlIHRvIHVuZXZlbiBkaXN0cmlidXRpb24KICAqIG9mIHRhc2tzIHdpdGggYWJub3JtYWwgIm5pY2UiIHZhbHVlcyBhY3Jvc3MgQ1BVcyB0aGUgY29udHJpYnV0aW9uIHRoYXQKQEAgLTE1NDMsMTAxICsxNTM5LDYgQEAKIAogI2lmZGVmIENPTkZJR19GQUlSX0dST1VQX1NDSEVECiAKLXN0YXRpYyBfX3JlYWRfbW9zdGx5IHVuc2lnbmVkIGxvbmcgX19wZXJjcHUgKnVwZGF0ZV9zaGFyZXNfZGF0YTsKLQotc3RhdGljIHZvaWQgX19zZXRfc2Vfc2hhcmVzKHN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlLCB1bnNpZ25lZCBsb25nIHNoYXJlcyk7Ci0KLS8qCi0gKiBDYWxjdWxhdGUgYW5kIHNldCB0aGUgY3B1J3MgZ3JvdXAgc2hhcmVzLgotICovCi1zdGF0aWMgdm9pZCB1cGRhdGVfZ3JvdXBfc2hhcmVzX2NwdShzdHJ1Y3QgdGFza19ncm91cCAqdGcsIGludCBjcHUsCi0JCQkJICAgIHVuc2lnbmVkIGxvbmcgc2Rfc2hhcmVzLAotCQkJCSAgICB1bnNpZ25lZCBsb25nIHNkX3JxX3dlaWdodCwKLQkJCQkgICAgdW5zaWduZWQgbG9uZyAqdXNkX3JxX3dlaWdodCkKLXsKLQl1bnNpZ25lZCBsb25nIHNoYXJlcywgcnFfd2VpZ2h0OwotCWludCBib29zdCA9IDA7Ci0KLQlycV93ZWlnaHQgPSB1c2RfcnFfd2VpZ2h0W2NwdV07Ci0JaWYgKCFycV93ZWlnaHQpIHsKLQkJYm9vc3QgPSAxOwotCQlycV93ZWlnaHQgPSBOSUNFXzBfTE9BRDsKLQl9Ci0KLQkvKgotCSAqICAgICAgICAgICAgIFxTdW1faiBzaGFyZXNfaiAqIHJxX3dlaWdodF9pCi0JICogc2hhcmVzX2kgPSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQkgKiAgICAgICAgICAgICAgICAgIFxTdW1faiBycV93ZWlnaHRfagotCSAqLwotCXNoYXJlcyA9IChzZF9zaGFyZXMgKiBycV93ZWlnaHQpIC8gc2RfcnFfd2VpZ2h0OwotCXNoYXJlcyA9IGNsYW1wX3QodW5zaWduZWQgbG9uZywgc2hhcmVzLCBNSU5fU0hBUkVTLCBNQVhfU0hBUkVTKTsKLQotCWlmIChhYnMoc2hhcmVzIC0gdGctPnNlW2NwdV0tPmxvYWQud2VpZ2h0KSA+Ci0JCQlzeXNjdGxfc2NoZWRfc2hhcmVzX3RocmVzaCkgewotCQlzdHJ1Y3QgcnEgKnJxID0gY3B1X3JxKGNwdSk7Ci0JCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZycS0+bG9jaywgZmxhZ3MpOwotCQl0Zy0+Y2ZzX3JxW2NwdV0tPnJxX3dlaWdodCA9IGJvb3N0ID8gMCA6IHJxX3dlaWdodDsKLQkJdGctPmNmc19ycVtjcHVdLT5zaGFyZXMgPSBib29zdCA/IDAgOiBzaGFyZXM7Ci0JCV9fc2V0X3NlX3NoYXJlcyh0Zy0+c2VbY3B1XSwgc2hhcmVzKTsKLQkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJxLT5sb2NrLCBmbGFncyk7Ci0JfQotfQotCi0vKgotICogUmUtY29tcHV0ZSB0aGUgdGFzayBncm91cCB0aGVpciBwZXIgY3B1IHNoYXJlcyBvdmVyIHRoZSBnaXZlbiBkb21haW4uCi0gKiBUaGlzIG5lZWRzIHRvIGJlIGRvbmUgaW4gYSBib3R0b20tdXAgZmFzaGlvbiBiZWNhdXNlIHRoZSBycSB3ZWlnaHQgb2YgYQotICogcGFyZW50IGdyb3VwIGRlcGVuZHMgb24gdGhlIHNoYXJlcyBvZiBpdHMgY2hpbGQgZ3JvdXBzLgotICovCi1zdGF0aWMgaW50IHRnX3NoYXJlc191cChzdHJ1Y3QgdGFza19ncm91cCAqdGcsIHZvaWQgKmRhdGEpCi17Ci0JdW5zaWduZWQgbG9uZyB3ZWlnaHQsIHJxX3dlaWdodCA9IDAsIHN1bV93ZWlnaHQgPSAwLCBzaGFyZXMgPSAwOwotCXVuc2lnbmVkIGxvbmcgKnVzZF9ycV93ZWlnaHQ7Ci0Jc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QgPSBkYXRhOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGk7Ci0KLQlpZiAoIXRnLT5zZVswXSkKLQkJcmV0dXJuIDA7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JdXNkX3JxX3dlaWdodCA9IHBlcl9jcHVfcHRyKHVwZGF0ZV9zaGFyZXNfZGF0YSwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQotCWZvcl9lYWNoX2NwdShpLCBzY2hlZF9kb21haW5fc3BhbihzZCkpIHsKLQkJd2VpZ2h0ID0gdGctPmNmc19ycVtpXS0+bG9hZC53ZWlnaHQ7Ci0JCXVzZF9ycV93ZWlnaHRbaV0gPSB3ZWlnaHQ7Ci0KLQkJcnFfd2VpZ2h0ICs9IHdlaWdodDsKLQkJLyoKLQkJICogSWYgdGhlcmUgYXJlIGN1cnJlbnRseSBubyB0YXNrcyBvbiB0aGUgY3B1IHByZXRlbmQgdGhlcmUKLQkJICogaXMgb25lIG9mIGF2ZXJhZ2UgbG9hZCBzbyB0aGF0IHdoZW4gYSBuZXcgdGFzayBnZXRzIHRvCi0JCSAqIHJ1biBoZXJlIGl0IHdpbGwgbm90IGdldCBkZWxheWVkIGJ5IGdyb3VwIHN0YXJ2YXRpb24uCi0JCSAqLwotCQlpZiAoIXdlaWdodCkKLQkJCXdlaWdodCA9IE5JQ0VfMF9MT0FEOwotCi0JCXN1bV93ZWlnaHQgKz0gd2VpZ2h0OwotCQlzaGFyZXMgKz0gdGctPmNmc19ycVtpXS0+c2hhcmVzOwotCX0KLQotCWlmICghcnFfd2VpZ2h0KQotCQlycV93ZWlnaHQgPSBzdW1fd2VpZ2h0OwotCi0JaWYgKCghc2hhcmVzICYmIHJxX3dlaWdodCkgfHwgc2hhcmVzID4gdGctPnNoYXJlcykKLQkJc2hhcmVzID0gdGctPnNoYXJlczsKLQotCWlmICghc2QtPnBhcmVudCB8fCAhKHNkLT5wYXJlbnQtPmZsYWdzICYgU0RfTE9BRF9CQUxBTkNFKSkKLQkJc2hhcmVzID0gdGctPnNoYXJlczsKLQotCWZvcl9lYWNoX2NwdShpLCBzY2hlZF9kb21haW5fc3BhbihzZCkpCi0JCXVwZGF0ZV9ncm91cF9zaGFyZXNfY3B1KHRnLCBpLCBzaGFyZXMsIHJxX3dlaWdodCwgdXNkX3JxX3dlaWdodCk7Ci0KLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQogLyoKICAqIENvbXB1dGUgdGhlIGNwdSdzIGhpZXJhcmNoaWNhbCBsb2FkIGZhY3RvciBmb3IgZWFjaCB0YXNrIGdyb3VwLgogICogVGhpcyBuZWVkcyB0byBiZSBkb25lIGluIGEgdG9wLWRvd24gZmFzaGlvbiBiZWNhdXNlIHRoZSBsb2FkIG9mIGEgY2hpbGQKQEAgLTE2NTIsNyArMTU1Myw3IEBACiAJCWxvYWQgPSBjcHVfcnEoY3B1KS0+bG9hZC53ZWlnaHQ7CiAJfSBlbHNlIHsKIAkJbG9hZCA9IHRnLT5wYXJlbnQtPmNmc19ycVtjcHVdLT5oX2xvYWQ7Ci0JCWxvYWQgKj0gdGctPmNmc19ycVtjcHVdLT5zaGFyZXM7CisJCWxvYWQgKj0gdGctPnNlW2NwdV0tPmxvYWQud2VpZ2h0OwogCQlsb2FkIC89IHRnLT5wYXJlbnQtPmNmc19ycVtjcHVdLT5sb2FkLndlaWdodCArIDE7CiAJfQogCkBAIC0xNjYxLDM0ICsxNTYyLDExIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHVwZGF0ZV9zaGFyZXMoc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QpCi17Ci0JczY0IGVsYXBzZWQ7Ci0JdTY0IG5vdzsKLQotCWlmIChyb290X3Rhc2tfZ3JvdXBfZW1wdHkoKSkKLQkJcmV0dXJuOwotCi0Jbm93ID0gbG9jYWxfY2xvY2soKTsKLQllbGFwc2VkID0gbm93IC0gc2QtPmxhc3RfdXBkYXRlOwotCi0JaWYgKGVsYXBzZWQgPj0gKHM2NCkodTY0KXN5c2N0bF9zY2hlZF9zaGFyZXNfcmF0ZWxpbWl0KSB7Ci0JCXNkLT5sYXN0X3VwZGF0ZSA9IG5vdzsKLQkJd2Fsa190Z190cmVlKHRnX25vcCwgdGdfc2hhcmVzX3VwLCBzZCk7Ci0JfQotfQotCiBzdGF0aWMgdm9pZCB1cGRhdGVfaF9sb2FkKGxvbmcgY3B1KQogewogCXdhbGtfdGdfdHJlZSh0Z19sb2FkX2Rvd24sIHRnX25vcCwgKHZvaWQgKiljcHUpOwogfQogCi0jZWxzZQotCi1zdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX3NoYXJlcyhzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCkKLXsKLX0KLQogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfUFJFRU1QVApAQCAtMTgxMCwxNSArMTY4OCw2IEBACiAKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQKLXN0YXRpYyB2b2lkIGNmc19ycV9zZXRfc2hhcmVzKHN0cnVjdCBjZnNfcnEgKmNmc19ycSwgdW5zaWduZWQgbG9uZyBzaGFyZXMpCi17Ci0jaWZkZWYgQ09ORklHX1NNUAotCWNmc19ycS0+c2hhcmVzID0gc2hhcmVzOwotI2VuZGlmCi19Ci0jZW5kaWYKLQogc3RhdGljIHZvaWQgY2FsY19sb2FkX2FjY291bnRfaWRsZShzdHJ1Y3QgcnEgKnRoaXNfcnEpOwogc3RhdGljIHZvaWQgdXBkYXRlX3N5c2N0bCh2b2lkKTsKIHN0YXRpYyBpbnQgZ2V0X3VwZGF0ZV9zeXNjdGxfZmFjdG9yKHZvaWQpOwpAQCAtMjA2Myw2ICsxOTMyLDcgQEAKICNpbmNsdWRlICJzY2hlZF9pZGxldGFzay5jIgogI2luY2x1ZGUgInNjaGVkX2ZhaXIuYyIKICNpbmNsdWRlICJzY2hlZF9ydC5jIgorI2luY2x1ZGUgInNjaGVkX2F1dG9ncm91cC5jIgogI2luY2x1ZGUgInNjaGVkX3N0b3B0YXNrLmMiCiAjaWZkZWYgQ09ORklHX1NDSEVEX0RFQlVHCiAjIGluY2x1ZGUgInNjaGVkX2RlYnVnLmMiCkBAIC0yMjU1LDEwICsyMTI1LDggQEAKICAqIFRoZSB0YXNrJ3MgcnVucXVldWUgbG9jayBtdXN0IGJlIGhlbGQuCiAgKiBSZXR1cm5zIHRydWUgaWYgeW91IGhhdmUgdG8gd2FpdCBmb3IgbWlncmF0aW9uIHRocmVhZC4KICAqLwotc3RhdGljIGJvb2wgbWlncmF0ZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IGRlc3RfY3B1KQorc3RhdGljIGJvb2wgbWlncmF0ZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IHJxICpycSkKIHsKLQlzdHJ1Y3QgcnEgKnJxID0gdGFza19ycShwKTsKLQogCS8qCiAJICogSWYgdGhlIHRhc2sgaXMgbm90IG9uIGEgcnVucXVldWUgKGFuZCBub3QgcnVubmluZyksIHRoZW4KIAkgKiB0aGUgbmV4dCB3YWtlLXVwIHdpbGwgcHJvcGVybHkgcGxhY2UgdGhlIHRhc2suCkBAIC0yNDM4LDE4ICsyMzA2LDE1IEBACiAJCXJldHVybiBkZXN0X2NwdTsKIAogCS8qIE5vIG1vcmUgTXIuIE5pY2UgR3V5LiAqLwotCWlmICh1bmxpa2VseShkZXN0X2NwdSA+PSBucl9jcHVfaWRzKSkgewotCQlkZXN0X2NwdSA9IGNwdXNldF9jcHVzX2FsbG93ZWRfZmFsbGJhY2socCk7Ci0JCS8qCi0JCSAqIERvbid0IHRlbGwgdGhlbSBhYm91dCBtb3ZpbmcgZXhpdGluZyB0YXNrcyBvcgotCQkgKiBrZXJuZWwgdGhyZWFkcyAoYm90aCBtbSBOVUxMKSwgc2luY2UgdGhleSBuZXZlcgotCQkgKiBsZWF2ZSBrZXJuZWwuCi0JCSAqLwotCQlpZiAocC0+bW0gJiYgcHJpbnRrX3JhdGVsaW1pdCgpKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJwcm9jZXNzICVkICglcykgbm8gIgotCQkJICAgICAgICJsb25nZXIgYWZmaW5lIHRvIGNwdSVkXG4iLAotCQkJICAgICAgIHRhc2tfcGlkX25yKHApLCBwLT5jb21tLCBjcHUpOwotCQl9CisJZGVzdF9jcHUgPSBjcHVzZXRfY3B1c19hbGxvd2VkX2ZhbGxiYWNrKHApOworCS8qCisJICogRG9uJ3QgdGVsbCB0aGVtIGFib3V0IG1vdmluZyBleGl0aW5nIHRhc2tzIG9yCisJICoga2VybmVsIHRocmVhZHMgKGJvdGggbW0gTlVMTCksIHNpbmNlIHRoZXkgbmV2ZXIKKwkgKiBsZWF2ZSBrZXJuZWwuCisJICovCisJaWYgKHAtPm1tICYmIHByaW50a19yYXRlbGltaXQoKSkgeworCQlwcmludGsoS0VSTl9JTkZPICJwcm9jZXNzICVkICglcykgbm8gbG9uZ2VyIGFmZmluZSB0byBjcHUlZFxuIiwKKwkJCQl0YXNrX3BpZF9ucihwKSwgcC0+Y29tbSwgY3B1KTsKIAl9CiAKIAlyZXR1cm4gZGVzdF9jcHU7CkBAIC0yNzg1LDcgKzI2NTAsOSBAQAogCS8qIFdhbnQgdG8gc3RhcnQgd2l0aCBrZXJuZWwgcHJlZW1wdGlvbiBkaXNhYmxlZC4gKi8KIAl0YXNrX3RocmVhZF9pbmZvKHApLT5wcmVlbXB0X2NvdW50ID0gMTsKICNlbmRpZgorI2lmZGVmIENPTkZJR19TTVAKIAlwbGlzdF9ub2RlX2luaXQoJnAtPnB1c2hhYmxlX3Rhc2tzLCBNQVhfUFJJTyk7CisjZW5kaWYKIAogCXB1dF9jcHUoKTsKIH0KQEAgLTM1NDksNyArMzQxNiw3IEBACiAJICogc2VsZWN0X3Rhc2tfcnEoKSBjYW4gcmFjZSBhZ2FpbnN0IC0+Y3B1c19hbGxvd2VkCiAJICovCiAJaWYgKGNwdW1hc2tfdGVzdF9jcHUoZGVzdF9jcHUsICZwLT5jcHVzX2FsbG93ZWQpICYmCi0JICAgIGxpa2VseShjcHVfYWN0aXZlKGRlc3RfY3B1KSkgJiYgbWlncmF0ZV90YXNrKHAsIGRlc3RfY3B1KSkgeworCSAgICBsaWtlbHkoY3B1X2FjdGl2ZShkZXN0X2NwdSkpICYmIG1pZ3JhdGVfdGFzayhwLCBycSkpIHsKIAkJc3RydWN0IG1pZ3JhdGlvbl9hcmcgYXJnID0geyBwLCBkZXN0X2NwdSB9OwogCiAJCXRhc2tfcnFfdW5sb2NrKHJxLCAmZmxhZ3MpOwpAQCAtNDIxNCw3ICs0MDgxLDcgQEAKIAkJaWYgKHRhc2tfdGhyZWFkX2luZm8ocnEtPmN1cnIpICE9IG93bmVyIHx8IG5lZWRfcmVzY2hlZCgpKQogCQkJcmV0dXJuIDA7CiAKLQkJY3B1X3JlbGF4KCk7CisJCWFyY2hfbXV0ZXhfY3B1X3JlbGF4KCk7CiAJfQogCiAJcmV0dXJuIDE7CkBAIC00NTI2LDcgKzQzOTMsNyBAQAogICogVGhpcyB3YWl0cyBmb3IgZWl0aGVyIGEgY29tcGxldGlvbiBvZiBhIHNwZWNpZmljIHRhc2sgdG8gYmUgc2lnbmFsZWQgb3IgZm9yIGEKICAqIHNwZWNpZmllZCB0aW1lb3V0IHRvIGV4cGlyZS4gSXQgaXMgaW50ZXJydXB0aWJsZS4gVGhlIHRpbWVvdXQgaXMgaW4gamlmZmllcy4KICAqLwotdW5zaWduZWQgbG9uZyBfX3NjaGVkCitsb25nIF9fc2NoZWQKIHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZV90aW1lb3V0KHN0cnVjdCBjb21wbGV0aW9uICp4LAogCQkJCQkgIHVuc2lnbmVkIGxvbmcgdGltZW91dCkKIHsKQEAgLTQ1NTksNyArNDQyNiw3IEBACiAgKiBzaWduYWxlZCBvciBmb3IgYSBzcGVjaWZpZWQgdGltZW91dCB0byBleHBpcmUuIEl0IGNhbiBiZQogICogaW50ZXJydXB0ZWQgYnkgYSBraWxsIHNpZ25hbC4gVGhlIHRpbWVvdXQgaXMgaW4gamlmZmllcy4KICAqLwotdW5zaWduZWQgbG9uZyBfX3NjaGVkCitsb25nIF9fc2NoZWQKIHdhaXRfZm9yX2NvbXBsZXRpb25fa2lsbGFibGVfdGltZW91dChzdHJ1Y3QgY29tcGxldGlvbiAqeCwKIAkJCQkgICAgIHVuc2lnbmVkIGxvbmcgdGltZW91dCkKIHsKQEAgLTQ5MDEsNyArNDc2OCw3IEBACiB9CiAKIHN0YXRpYyBpbnQgX19zY2hlZF9zZXRzY2hlZHVsZXIoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgcG9saWN5LAotCQkJCXN0cnVjdCBzY2hlZF9wYXJhbSAqcGFyYW0sIGJvb2wgdXNlcikKKwkJCQljb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKnBhcmFtLCBib29sIHVzZXIpCiB7CiAJaW50IHJldHZhbCwgb2xkcHJpbywgb2xkcG9saWN5ID0gLTEsIG9uX3JxLCBydW5uaW5nOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC01MDU2LDcgKzQ5MjMsNyBAQAogICogTk9URSB0aGF0IHRoZSB0YXNrIG1heSBiZSBhbHJlYWR5IGRlYWQuCiAgKi8KIGludCBzY2hlZF9zZXRzY2hlZHVsZXIoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgcG9saWN5LAotCQkgICAgICAgc3RydWN0IHNjaGVkX3BhcmFtICpwYXJhbSkKKwkJICAgICAgIGNvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqcGFyYW0pCiB7CiAJcmV0dXJuIF9fc2NoZWRfc2V0c2NoZWR1bGVyKHAsIHBvbGljeSwgcGFyYW0sIHRydWUpOwogfQpAQCAtNTA3NCw3ICs0OTQxLDcgQEAKICAqIGJ1dCBvdXIgY2FsbGVyIG1pZ2h0IG5vdCBoYXZlIHRoYXQgY2FwYWJpbGl0eS4KICAqLwogaW50IHNjaGVkX3NldHNjaGVkdWxlcl9ub2NoZWNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHBvbGljeSwKLQkJCSAgICAgICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKnBhcmFtKQorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqcGFyYW0pCiB7CiAJcmV0dXJuIF9fc2NoZWRfc2V0c2NoZWR1bGVyKHAsIHBvbGljeSwgcGFyYW0sIGZhbHNlKTsKIH0KQEAgLTU1OTAsNyArNTQ1Nyw3IEBACiAJdW5zaWduZWQgc3RhdGU7CiAKIAlzdGF0ZSA9IHAtPnN0YXRlID8gX19mZnMocC0+c3RhdGUpICsgMSA6IDA7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiJS0xMy4xM3MgJWMiLCBwLT5jb21tLAorCXByaW50ayhLRVJOX0lORk8gIiUtMTUuMTVzICVjIiwgcC0+Y29tbSwKIAkJc3RhdGUgPCBzaXplb2Yoc3RhdF9uYW0pIC0gMSA/IHN0YXRfbmFtW3N0YXRlXSA6ICc/Jyk7CiAjaWYgQklUU19QRVJfTE9ORyA9PSAzMgogCWlmIChzdGF0ZSA9PSBUQVNLX1JVTk5JTkcpCkBAIC01NzU0LDcgKzU2MjEsNiBAQAogCVNFVF9TWVNDVEwoc2NoZWRfbWluX2dyYW51bGFyaXR5KTsKIAlTRVRfU1lTQ1RMKHNjaGVkX2xhdGVuY3kpOwogCVNFVF9TWVNDVEwoc2NoZWRfd2FrZXVwX2dyYW51bGFyaXR5KTsKLQlTRVRfU1lTQ1RMKHNjaGVkX3NoYXJlc19yYXRlbGltaXQpOwogI3VuZGVmIFNFVF9TWVNDVEwKIH0KIApAQCAtNTgzMCw3ICs1Njk2LDcgQEAKIAkJZ290byBvdXQ7CiAKIAlkZXN0X2NwdSA9IGNwdW1hc2tfYW55X2FuZChjcHVfYWN0aXZlX21hc2ssIG5ld19tYXNrKTsKLQlpZiAobWlncmF0ZV90YXNrKHAsIGRlc3RfY3B1KSkgeworCWlmIChtaWdyYXRlX3Rhc2socCwgcnEpKSB7CiAJCXN0cnVjdCBtaWdyYXRpb25fYXJnIGFyZyA9IHsgcCwgZGVzdF9jcHUgfTsKIAkJLyogTmVlZCBoZWxwIGZyb20gbWlncmF0aW9uIHRocmVhZDogZHJvcCBsb2NrIGFuZCB3YWl0LiAqLwogCQl0YXNrX3JxX3VubG9jayhycSwgJmZsYWdzKTsKQEAgLTU5MTIsOTYgKzU3NzgsNiBAQAogfQogCiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCi0vKgotICogRmlndXJlIG91dCB3aGVyZSB0YXNrIG9uIGRlYWQgQ1BVIHNob3VsZCBnbywgdXNlIGZvcmNlIGlmIG5lY2Vzc2FyeS4KLSAqLwotdm9pZCBtb3ZlX3Rhc2tfb2ZmX2RlYWRfY3B1KGludCBkZWFkX2NwdSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKQotewotCXN0cnVjdCBycSAqcnEgPSBjcHVfcnEoZGVhZF9jcHUpOwotCWludCBuZWVkc19jcHUsIHVuaW5pdGlhbGl6ZWRfdmFyKGRlc3RfY3B1KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCi0JcmF3X3NwaW5fbG9jaygmcnEtPmxvY2spOwotCW5lZWRzX2NwdSA9ICh0YXNrX2NwdShwKSA9PSBkZWFkX2NwdSkgJiYgKHAtPnN0YXRlICE9IFRBU0tfV0FLSU5HKTsKLQlpZiAobmVlZHNfY3B1KQotCQlkZXN0X2NwdSA9IHNlbGVjdF9mYWxsYmFja19ycShkZWFkX2NwdSwgcCk7Ci0JcmF3X3NwaW5fdW5sb2NrKCZycS0+bG9jayk7Ci0JLyoKLQkgKiBJdCBjYW4gb25seSBmYWlsIGlmIHdlIHJhY2Ugd2l0aCBzZXRfY3B1c19hbGxvd2VkKCksCi0JICogaW4gdGhlIHJhY2VyIHNob3VsZCBtaWdyYXRlIHRoZSB0YXNrIGFueXdheS4KLQkgKi8KLQlpZiAobmVlZHNfY3B1KQotCQlfX21pZ3JhdGVfdGFzayhwLCBkZWFkX2NwdSwgZGVzdF9jcHUpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLQotLyoKLSAqIFdoaWxlIGEgZGVhZCBDUFUgaGFzIG5vIHVuaW50ZXJydXB0aWJsZSB0YXNrcyBxdWV1ZWQgYXQgdGhpcyBwb2ludCwKLSAqIGl0IG1pZ2h0IHN0aWxsIGhhdmUgYSBub256ZXJvIC0+bnJfdW5pbnRlcnJ1cHRpYmxlIGNvdW50ZXIsIGJlY2F1c2UKLSAqIGZvciBwZXJmb3JtYW5jZSByZWFzb25zIHRoZSBjb3VudGVyIGlzIG5vdCBzdHJpY2x5IHRyYWNraW5nIHRhc2tzIHRvCi0gKiB0aGVpciBob21lIENQVXMuIFNvIHdlIGp1c3QgYWRkIHRoZSBjb3VudGVyIHRvIGFub3RoZXIgQ1BVJ3MgY291bnRlciwKLSAqIHRvIGtlZXAgdGhlIGdsb2JhbCBzdW0gY29uc3RhbnQgYWZ0ZXIgQ1BVLWRvd246Ci0gKi8KLXN0YXRpYyB2b2lkIG1pZ3JhdGVfbnJfdW5pbnRlcnJ1cHRpYmxlKHN0cnVjdCBycSAqcnFfc3JjKQotewotCXN0cnVjdCBycSAqcnFfZGVzdCA9IGNwdV9ycShjcHVtYXNrX2FueShjcHVfYWN0aXZlX21hc2spKTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWRvdWJsZV9ycV9sb2NrKHJxX3NyYywgcnFfZGVzdCk7Ci0JcnFfZGVzdC0+bnJfdW5pbnRlcnJ1cHRpYmxlICs9IHJxX3NyYy0+bnJfdW5pbnRlcnJ1cHRpYmxlOwotCXJxX3NyYy0+bnJfdW5pbnRlcnJ1cHRpYmxlID0gMDsKLQlkb3VibGVfcnFfdW5sb2NrKHJxX3NyYywgcnFfZGVzdCk7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotfQotCi0vKiBSdW4gdGhyb3VnaCB0YXNrIGxpc3QgYW5kIG1pZ3JhdGUgdGFza3MgZnJvbSB0aGUgZGVhZCBjcHUuICovCi1zdGF0aWMgdm9pZCBtaWdyYXRlX2xpdmVfdGFza3MoaW50IHNyY19jcHUpCi17Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICpwLCAqdDsKLQotCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7Ci0KLQlkb19lYWNoX3RocmVhZCh0LCBwKSB7Ci0JCWlmIChwID09IGN1cnJlbnQpCi0JCQljb250aW51ZTsKLQotCQlpZiAodGFza19jcHUocCkgPT0gc3JjX2NwdSkKLQkJCW1vdmVfdGFza19vZmZfZGVhZF9jcHUoc3JjX2NwdSwgcCk7Ci0JfSB3aGlsZV9lYWNoX3RocmVhZCh0LCBwKTsKLQotCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKLX0KLQotLyoKLSAqIFNjaGVkdWxlcyBpZGxlIHRhc2sgdG8gYmUgdGhlIG5leHQgcnVubmFibGUgdGFzayBvbiBjdXJyZW50IENQVS4KLSAqIEl0IGRvZXMgc28gYnkgYm9vc3RpbmcgaXRzIHByaW9yaXR5IHRvIGhpZ2hlc3QgcG9zc2libGUuCi0gKiBVc2VkIGJ5IENQVSBvZmZsaW5lIGNvZGUuCi0gKi8KLXZvaWQgc2NoZWRfaWRsZV9uZXh0KHZvaWQpCi17Ci0JaW50IHRoaXNfY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCXN0cnVjdCBycSAqcnEgPSBjcHVfcnEodGhpc19jcHUpOwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqcCA9IHJxLT5pZGxlOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkvKiBjcHUgaGFzIHRvIGJlIG9mZmxpbmUgKi8KLQlCVUdfT04oY3B1X29ubGluZSh0aGlzX2NwdSkpOwotCi0JLyoKLQkgKiBTdHJpY3RseSBub3QgbmVjZXNzYXJ5IHNpbmNlIHJlc3Qgb2YgdGhlIENQVXMgYXJlIHN0b3BwZWQgYnkgbm93Ci0JICogYW5kIGludGVycnVwdHMgZGlzYWJsZWQgb24gdGhlIGN1cnJlbnQgY3B1LgotCSAqLwotCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcnEtPmxvY2ssIGZsYWdzKTsKLQotCV9fc2V0c2NoZWR1bGVyKHJxLCBwLCBTQ0hFRF9GSUZPLCBNQVhfUlRfUFJJTy0xKTsKLQotCWFjdGl2YXRlX3Rhc2socnEsIHAsIDApOwotCi0JcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJxLT5sb2NrLCBmbGFncyk7Ci19CiAKIC8qCiAgKiBFbnN1cmVzIHRoYXQgdGhlIGlkbGUgdGFzayBpcyB1c2luZyBpbml0X21tIHJpZ2h0IGJlZm9yZSBpdHMgY3B1IGdvZXMKQEAgLTYwMTgsNDcgKzU3OTQsMTkgQEAKIAltbWRyb3AobW0pOwogfQogCi0vKiBjYWxsZWQgdW5kZXIgcnEtPmxvY2sgd2l0aCBkaXNhYmxlZCBpbnRlcnJ1cHRzICovCi1zdGF0aWMgdm9pZCBtaWdyYXRlX2RlYWQodW5zaWduZWQgaW50IGRlYWRfY3B1LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCisvKgorICogV2hpbGUgYSBkZWFkIENQVSBoYXMgbm8gdW5pbnRlcnJ1cHRpYmxlIHRhc2tzIHF1ZXVlZCBhdCB0aGlzIHBvaW50LAorICogaXQgbWlnaHQgc3RpbGwgaGF2ZSBhIG5vbnplcm8gLT5ucl91bmludGVycnVwdGlibGUgY291bnRlciwgYmVjYXVzZQorICogZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMgdGhlIGNvdW50ZXIgaXMgbm90IHN0cmljbHkgdHJhY2tpbmcgdGFza3MgdG8KKyAqIHRoZWlyIGhvbWUgQ1BVcy4gU28gd2UganVzdCBhZGQgdGhlIGNvdW50ZXIgdG8gYW5vdGhlciBDUFUncyBjb3VudGVyLAorICogdG8ga2VlcCB0aGUgZ2xvYmFsIHN1bSBjb25zdGFudCBhZnRlciBDUFUtZG93bjoKKyAqLworc3RhdGljIHZvaWQgbWlncmF0ZV9ucl91bmludGVycnVwdGlibGUoc3RydWN0IHJxICpycV9zcmMpCiB7Ci0Jc3RydWN0IHJxICpycSA9IGNwdV9ycShkZWFkX2NwdSk7CisJc3RydWN0IHJxICpycV9kZXN0ID0gY3B1X3JxKGNwdW1hc2tfYW55KGNwdV9hY3RpdmVfbWFzaykpOwogCi0JLyogTXVzdCBiZSBleGl0aW5nLCBvdGhlcndpc2Ugd291bGQgYmUgb24gdGFza2xpc3QuICovCi0JQlVHX09OKCFwLT5leGl0X3N0YXRlKTsKLQotCS8qIENhbm5vdCBoYXZlIGRvbmUgZmluYWwgc2NoZWR1bGUgeWV0OiB3b3VsZCBoYXZlIHZhbmlzaGVkLiAqLwotCUJVR19PTihwLT5zdGF0ZSA9PSBUQVNLX0RFQUQpOwotCi0JZ2V0X3Rhc2tfc3RydWN0KHApOwotCi0JLyoKLQkgKiBEcm9wIGxvY2sgYXJvdW5kIG1pZ3JhdGlvbjsgaWYgc29tZW9uZSBlbHNlIG1vdmVzIGl0LAotCSAqIHRoYXQncyBPSy4gTm8gdGFzayBjYW4gYmUgYWRkZWQgdG8gdGhpcyBDUFUsIHNvIGl0ZXJhdGlvbiBpcwotCSAqIGZpbmUuCi0JICovCi0JcmF3X3NwaW5fdW5sb2NrX2lycSgmcnEtPmxvY2spOwotCW1vdmVfdGFza19vZmZfZGVhZF9jcHUoZGVhZF9jcHUsIHApOwotCXJhd19zcGluX2xvY2tfaXJxKCZycS0+bG9jayk7Ci0KLQlwdXRfdGFza19zdHJ1Y3QocCk7Ci19Ci0KLS8qIHJlbGVhc2VfdGFzaygpIHJlbW92ZXMgdGFzayBmcm9tIHRhc2tsaXN0LCBzbyB3ZSB3b24ndCBmaW5kIGRlYWQgdGFza3MuICovCi1zdGF0aWMgdm9pZCBtaWdyYXRlX2RlYWRfdGFza3ModW5zaWduZWQgaW50IGRlYWRfY3B1KQotewotCXN0cnVjdCBycSAqcnEgPSBjcHVfcnEoZGVhZF9jcHUpOwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dDsKLQotCWZvciAoIDsgOyApIHsKLQkJaWYgKCFycS0+bnJfcnVubmluZykKLQkJCWJyZWFrOwotCQluZXh0ID0gcGlja19uZXh0X3Rhc2socnEpOwotCQlpZiAoIW5leHQpCi0JCQlicmVhazsKLQkJbmV4dC0+c2NoZWRfY2xhc3MtPnB1dF9wcmV2X3Rhc2socnEsIG5leHQpOwotCQltaWdyYXRlX2RlYWQoZGVhZF9jcHUsIG5leHQpOwotCi0JfQorCXJxX2Rlc3QtPm5yX3VuaW50ZXJydXB0aWJsZSArPSBycV9zcmMtPm5yX3VuaW50ZXJydXB0aWJsZTsKKwlycV9zcmMtPm5yX3VuaW50ZXJydXB0aWJsZSA9IDA7CiB9CiAKIC8qCkBAIC02MDY5LDYgKzU4MTcsNTYgQEAKIAlhdG9taWNfbG9uZ19zdWIocnEtPmNhbGNfbG9hZF9hY3RpdmUsICZjYWxjX2xvYWRfdGFza3MpOwogCXJxLT5jYWxjX2xvYWRfYWN0aXZlID0gMDsKIH0KKworLyoKKyAqIE1pZ3JhdGUgYWxsIHRhc2tzIGZyb20gdGhlIHJxLCBzbGVlcGluZyB0YXNrcyB3aWxsIGJlIG1pZ3JhdGVkIGJ5CisgKiB0cnlfdG9fd2FrZV91cCgpLT5zZWxlY3RfdGFza19ycSgpLgorICoKKyAqIENhbGxlZCB3aXRoIHJxLT5sb2NrIGhlbGQgZXZlbiB0aG91Z2ggd2UnZXIgaW4gc3RvcF9tYWNoaW5lKCkgYW5kCisgKiB0aGVyZSdzIG5vIGNvbmN1cnJlbmN5IHBvc3NpYmxlLCB3ZSBob2xkIHRoZSByZXF1aXJlZCBsb2NrcyBhbnl3YXkKKyAqIGJlY2F1c2Ugb2YgbG9jayB2YWxpZGF0aW9uIGVmZm9ydHMuCisgKi8KK3N0YXRpYyB2b2lkIG1pZ3JhdGVfdGFza3ModW5zaWduZWQgaW50IGRlYWRfY3B1KQoreworCXN0cnVjdCBycSAqcnEgPSBjcHVfcnEoZGVhZF9jcHUpOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dCwgKnN0b3AgPSBycS0+c3RvcDsKKwlpbnQgZGVzdF9jcHU7CisKKwkvKgorCSAqIEZ1ZGdlIHRoZSBycSBzZWxlY3Rpb24gc3VjaCB0aGF0IHRoZSBiZWxvdyB0YXNrIHNlbGVjdGlvbiBsb29wCisJICogZG9lc24ndCBnZXQgc3R1Y2sgb24gdGhlIGN1cnJlbnRseSBlbGlnaWJsZSBzdG9wIHRhc2suCisJICoKKwkgKiBXZSdyZSBjdXJyZW50bHkgaW5zaWRlIHN0b3BfbWFjaGluZSgpIGFuZCB0aGUgcnEgaXMgZWl0aGVyIHN0dWNrCisJICogaW4gdGhlIHN0b3BfbWFjaGluZV9jcHVfc3RvcCgpIGxvb3AsIG9yIHdlJ3JlIGV4ZWN1dGluZyB0aGlzIGNvZGUsCisJICogZWl0aGVyIHdheSB3ZSBzaG91bGQgbmV2ZXIgZW5kIHVwIGNhbGxpbmcgc2NoZWR1bGUoKSB1bnRpbCB3ZSdyZQorCSAqIGRvbmUgaGVyZS4KKwkgKi8KKwlycS0+c3RvcCA9IE5VTEw7CisKKwlmb3IgKCA7IDsgKSB7CisJCS8qCisJCSAqIFRoZXJlJ3MgdGhpcyB0aHJlYWQgcnVubmluZywgYmFpbCB3aGVuIHRoYXQncyB0aGUgb25seQorCQkgKiByZW1haW5pbmcgdGhyZWFkLgorCQkgKi8KKwkJaWYgKHJxLT5ucl9ydW5uaW5nID09IDEpCisJCQlicmVhazsKKworCQluZXh0ID0gcGlja19uZXh0X3Rhc2socnEpOworCQlCVUdfT04oIW5leHQpOworCQluZXh0LT5zY2hlZF9jbGFzcy0+cHV0X3ByZXZfdGFzayhycSwgbmV4dCk7CisKKwkJLyogRmluZCBzdWl0YWJsZSBkZXN0aW5hdGlvbiBmb3IgQG5leHQsIHdpdGggZm9yY2UgaWYgbmVlZGVkLiAqLworCQlkZXN0X2NwdSA9IHNlbGVjdF9mYWxsYmFja19ycShkZWFkX2NwdSwgbmV4dCk7CisJCXJhd19zcGluX3VubG9jaygmcnEtPmxvY2spOworCisJCV9fbWlncmF0ZV90YXNrKG5leHQsIGRlYWRfY3B1LCBkZXN0X2NwdSk7CisKKwkJcmF3X3NwaW5fbG9jaygmcnEtPmxvY2spOworCX0KKworCXJxLT5zdG9wID0gc3RvcDsKK30KKwogI2VuZGlmIC8qIENPTkZJR19IT1RQTFVHX0NQVSAqLwogCiAjaWYgZGVmaW5lZChDT05GSUdfU0NIRURfREVCVUcpICYmIGRlZmluZWQoQ09ORklHX1NZU0NUTCkKQEAgLTYyNzgsMTUgKzYwNzYsMTMgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBycSAqcnEgPSBjcHVfcnEoY3B1KTsKIAotCXN3aXRjaCAoYWN0aW9uKSB7CisJc3dpdGNoIChhY3Rpb24gJiB+Q1BVX1RBU0tTX0ZST1pFTikgewogCiAJY2FzZSBDUFVfVVBfUFJFUEFSRToKLQljYXNlIENQVV9VUF9QUkVQQVJFX0ZST1pFTjoKIAkJcnEtPmNhbGNfbG9hZF91cGRhdGUgPSBjYWxjX2xvYWRfdXBkYXRlOwogCQlicmVhazsKIAogCWNhc2UgQ1BVX09OTElORToKLQljYXNlIENQVV9PTkxJTkVfRlJPWkVOOgogCQkvKiBVcGRhdGUgb3VyIHJvb3QtZG9tYWluICovCiAJCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcnEtPmxvY2ssIGZsYWdzKTsKIAkJaWYgKHJxLT5yZCkgewpAQCAtNjI5OCwzMCArNjA5NCwxOSBAQAogCQlicmVhazsKIAogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQotCWNhc2UgQ1BVX0RFQUQ6Ci0JY2FzZSBDUFVfREVBRF9GUk9aRU46Ci0JCW1pZ3JhdGVfbGl2ZV90YXNrcyhjcHUpOwotCQkvKiBJZGxlIHRhc2sgYmFjayB0byBub3JtYWwgKG9mZiBydW5xdWV1ZSwgbG93IHByaW8pICovCi0JCXJhd19zcGluX2xvY2tfaXJxKCZycS0+bG9jayk7Ci0JCWRlYWN0aXZhdGVfdGFzayhycSwgcnEtPmlkbGUsIDApOwotCQlfX3NldHNjaGVkdWxlcihycSwgcnEtPmlkbGUsIFNDSEVEX05PUk1BTCwgMCk7Ci0JCXJxLT5pZGxlLT5zY2hlZF9jbGFzcyA9ICZpZGxlX3NjaGVkX2NsYXNzOwotCQltaWdyYXRlX2RlYWRfdGFza3MoY3B1KTsKLQkJcmF3X3NwaW5fdW5sb2NrX2lycSgmcnEtPmxvY2spOwotCQltaWdyYXRlX25yX3VuaW50ZXJydXB0aWJsZShycSk7Ci0JCUJVR19PTihycS0+bnJfcnVubmluZyAhPSAwKTsKLQkJY2FsY19nbG9iYWxfbG9hZF9yZW1vdmUocnEpOwotCQlicmVhazsKLQogCWNhc2UgQ1BVX0RZSU5HOgotCWNhc2UgQ1BVX0RZSU5HX0ZST1pFTjoKIAkJLyogVXBkYXRlIG91ciByb290LWRvbWFpbiAqLwogCQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnJxLT5sb2NrLCBmbGFncyk7CiAJCWlmIChycS0+cmQpIHsKIAkJCUJVR19PTighY3B1bWFza190ZXN0X2NwdShjcHUsIHJxLT5yZC0+c3BhbikpOwogCQkJc2V0X3JxX29mZmxpbmUocnEpOwogCQl9CisJCW1pZ3JhdGVfdGFza3MoY3B1KTsKKwkJQlVHX09OKHJxLT5ucl9ydW5uaW5nICE9IDEpOyAvKiB0aGUgbWlncmF0aW9uIHRocmVhZCAqLwogCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnEtPmxvY2ssIGZsYWdzKTsKKworCQltaWdyYXRlX25yX3VuaW50ZXJydXB0aWJsZShycSk7CisJCWNhbGNfZ2xvYmFsX2xvYWRfcmVtb3ZlKHJxKTsKIAkJYnJlYWs7CiAjZW5kaWYKIAl9CkBAIC04MDUyLDE4ICs3ODM3LDE2IEBACiAKICNpZmRlZiBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRAogc3RhdGljIHZvaWQgaW5pdF90Z19jZnNfZW50cnkoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCBzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEsCi0JCQkJc3RydWN0IHNjaGVkX2VudGl0eSAqc2UsIGludCBjcHUsIGludCBhZGQsCisJCQkJc3RydWN0IHNjaGVkX2VudGl0eSAqc2UsIGludCBjcHUsCiAJCQkJc3RydWN0IHNjaGVkX2VudGl0eSAqcGFyZW50KQogewogCXN0cnVjdCBycSAqcnEgPSBjcHVfcnEoY3B1KTsKIAl0Zy0+Y2ZzX3JxW2NwdV0gPSBjZnNfcnE7CiAJaW5pdF9jZnNfcnEoY2ZzX3JxLCBycSk7CiAJY2ZzX3JxLT50ZyA9IHRnOwotCWlmIChhZGQpCi0JCWxpc3RfYWRkKCZjZnNfcnEtPmxlYWZfY2ZzX3JxX2xpc3QsICZycS0+bGVhZl9jZnNfcnFfbGlzdCk7CiAKIAl0Zy0+c2VbY3B1XSA9IHNlOwotCS8qIHNlIGNvdWxkIGJlIE5VTEwgZm9yIGluaXRfdGFza19ncm91cCAqLworCS8qIHNlIGNvdWxkIGJlIE5VTEwgZm9yIHJvb3RfdGFza19ncm91cCAqLwogCWlmICghc2UpCiAJCXJldHVybjsKIApAQCAtODA3MywxNSArNzg1NiwxNCBAQAogCQlzZS0+Y2ZzX3JxID0gcGFyZW50LT5teV9xOwogCiAJc2UtPm15X3EgPSBjZnNfcnE7Ci0Jc2UtPmxvYWQud2VpZ2h0ID0gdGctPnNoYXJlczsKLQlzZS0+bG9hZC5pbnZfd2VpZ2h0ID0gMDsKKwl1cGRhdGVfbG9hZF9zZXQoJnNlLT5sb2FkLCAwKTsKIAlzZS0+cGFyZW50ID0gcGFyZW50OwogfQogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfUlRfR1JPVVBfU0NIRUQKIHN0YXRpYyB2b2lkIGluaXRfdGdfcnRfZW50cnkoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCBzdHJ1Y3QgcnRfcnEgKnJ0X3JxLAotCQlzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSwgaW50IGNwdSwgaW50IGFkZCwKKwkJc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UsIGludCBjcHUsCiAJCXN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnBhcmVudCkKIHsKIAlzdHJ1Y3QgcnEgKnJxID0gY3B1X3JxKGNwdSk7CkBAIC04MDkwLDggKzc4NzIsNiBAQAogCWluaXRfcnRfcnEocnRfcnEsIHJxKTsKIAlydF9ycS0+dGcgPSB0ZzsKIAlydF9ycS0+cnRfcnVudGltZSA9IHRnLT5ydF9iYW5kd2lkdGgucnRfcnVudGltZTsKLQlpZiAoYWRkKQotCQlsaXN0X2FkZCgmcnRfcnEtPmxlYWZfcnRfcnFfbGlzdCwgJnJxLT5sZWFmX3J0X3JxX2xpc3QpOwogCiAJdGctPnJ0X3NlW2NwdV0gPSBydF9zZTsKIAlpZiAoIXJ0X3NlKQpAQCAtODEyNiwxOCArNzkwNiwxOCBAQAogCQlwdHIgPSAodW5zaWduZWQgbG9uZylremFsbG9jKGFsbG9jX3NpemUsIEdGUF9OT1dBSVQpOwogCiAjaWZkZWYgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQKLQkJaW5pdF90YXNrX2dyb3VwLnNlID0gKHN0cnVjdCBzY2hlZF9lbnRpdHkgKiopcHRyOworCQlyb290X3Rhc2tfZ3JvdXAuc2UgPSAoc3RydWN0IHNjaGVkX2VudGl0eSAqKilwdHI7CiAJCXB0ciArPSBucl9jcHVfaWRzICogc2l6ZW9mKHZvaWQgKiopOwogCi0JCWluaXRfdGFza19ncm91cC5jZnNfcnEgPSAoc3RydWN0IGNmc19ycSAqKilwdHI7CisJCXJvb3RfdGFza19ncm91cC5jZnNfcnEgPSAoc3RydWN0IGNmc19ycSAqKilwdHI7CiAJCXB0ciArPSBucl9jcHVfaWRzICogc2l6ZW9mKHZvaWQgKiopOwogCiAjZW5kaWYgLyogQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQgKi8KICNpZmRlZiBDT05GSUdfUlRfR1JPVVBfU0NIRUQKLQkJaW5pdF90YXNrX2dyb3VwLnJ0X3NlID0gKHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKiopcHRyOworCQlyb290X3Rhc2tfZ3JvdXAucnRfc2UgPSAoc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqKilwdHI7CiAJCXB0ciArPSBucl9jcHVfaWRzICogc2l6ZW9mKHZvaWQgKiopOwogCi0JCWluaXRfdGFza19ncm91cC5ydF9ycSA9IChzdHJ1Y3QgcnRfcnEgKiopcHRyOworCQlyb290X3Rhc2tfZ3JvdXAucnRfcnEgPSAoc3RydWN0IHJ0X3JxICoqKXB0cjsKIAkJcHRyICs9IG5yX2NwdV9pZHMgKiBzaXplb2Yodm9pZCAqKik7CiAKICNlbmRpZiAvKiBDT05GSUdfUlRfR1JPVVBfU0NIRUQgKi8KQEAgLTgxNTcsMjAgKzc5MzcsMTYgQEAKIAkJCWdsb2JhbF9ydF9wZXJpb2QoKSwgZ2xvYmFsX3J0X3J1bnRpbWUoKSk7CiAKICNpZmRlZiBDT05GSUdfUlRfR1JPVVBfU0NIRUQKLQlpbml0X3J0X2JhbmR3aWR0aCgmaW5pdF90YXNrX2dyb3VwLnJ0X2JhbmR3aWR0aCwKKwlpbml0X3J0X2JhbmR3aWR0aCgmcm9vdF90YXNrX2dyb3VwLnJ0X2JhbmR3aWR0aCwKIAkJCWdsb2JhbF9ydF9wZXJpb2QoKSwgZ2xvYmFsX3J0X3J1bnRpbWUoKSk7CiAjZW5kaWYgLyogQ09ORklHX1JUX0dST1VQX1NDSEVEICovCiAKICNpZmRlZiBDT05GSUdfQ0dST1VQX1NDSEVECi0JbGlzdF9hZGQoJmluaXRfdGFza19ncm91cC5saXN0LCAmdGFza19ncm91cHMpOwotCUlOSVRfTElTVF9IRUFEKCZpbml0X3Rhc2tfZ3JvdXAuY2hpbGRyZW4pOwotCisJbGlzdF9hZGQoJnJvb3RfdGFza19ncm91cC5saXN0LCAmdGFza19ncm91cHMpOworCUlOSVRfTElTVF9IRUFEKCZyb290X3Rhc2tfZ3JvdXAuY2hpbGRyZW4pOworCWF1dG9ncm91cF9pbml0KCZpbml0X3Rhc2spOwogI2VuZGlmIC8qIENPTkZJR19DR1JPVVBfU0NIRUQgKi8KIAotI2lmIGRlZmluZWQgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQgJiYgZGVmaW5lZCBDT05GSUdfU01QCi0JdXBkYXRlX3NoYXJlc19kYXRhID0gX19hbGxvY19wZXJjcHUobnJfY3B1X2lkcyAqIHNpemVvZih1bnNpZ25lZCBsb25nKSwKLQkJCQkJICAgIF9fYWxpZ25vZl9fKHVuc2lnbmVkIGxvbmcpKTsKLSNlbmRpZgogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CiAJCXN0cnVjdCBycSAqcnE7CiAKQEAgLTgxODIsMzggKzc5NTgsMzQgQEAKIAkJaW5pdF9jZnNfcnEoJnJxLT5jZnMsIHJxKTsKIAkJaW5pdF9ydF9ycSgmcnEtPnJ0LCBycSk7CiAjaWZkZWYgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQKLQkJaW5pdF90YXNrX2dyb3VwLnNoYXJlcyA9IGluaXRfdGFza19ncm91cF9sb2FkOworCQlyb290X3Rhc2tfZ3JvdXAuc2hhcmVzID0gcm9vdF90YXNrX2dyb3VwX2xvYWQ7CiAJCUlOSVRfTElTVF9IRUFEKCZycS0+bGVhZl9jZnNfcnFfbGlzdCk7Ci0jaWZkZWYgQ09ORklHX0NHUk9VUF9TQ0hFRAogCQkvKgotCQkgKiBIb3cgbXVjaCBjcHUgYmFuZHdpZHRoIGRvZXMgaW5pdF90YXNrX2dyb3VwIGdldD8KKwkJICogSG93IG11Y2ggY3B1IGJhbmR3aWR0aCBkb2VzIHJvb3RfdGFza19ncm91cCBnZXQ/CiAJCSAqCiAJCSAqIEluIGNhc2Ugb2YgdGFzay1ncm91cHMgZm9ybWVkIHRocicgdGhlIGNncm91cCBmaWxlc3lzdGVtLCBpdAogCQkgKiBnZXRzIDEwMCUgb2YgdGhlIGNwdSByZXNvdXJjZXMgaW4gdGhlIHN5c3RlbS4gVGhpcyBvdmVyYWxsCiAJCSAqIHN5c3RlbSBjcHUgcmVzb3VyY2UgaXMgZGl2aWRlZCBhbW9uZyB0aGUgdGFza3Mgb2YKLQkJICogaW5pdF90YXNrX2dyb3VwIGFuZCBpdHMgY2hpbGQgdGFzay1ncm91cHMgaW4gYSBmYWlyIG1hbm5lciwKKwkJICogcm9vdF90YXNrX2dyb3VwIGFuZCBpdHMgY2hpbGQgdGFzay1ncm91cHMgaW4gYSBmYWlyIG1hbm5lciwKIAkJICogYmFzZWQgb24gZWFjaCBlbnRpdHkncyAodGFzayBvciB0YXNrLWdyb3VwJ3MpIHdlaWdodAogCQkgKiAoc2UtPmxvYWQud2VpZ2h0KS4KIAkJICoKLQkJICogSW4gb3RoZXIgd29yZHMsIGlmIGluaXRfdGFza19ncm91cCBoYXMgMTAgdGFza3Mgb2Ygd2VpZ2h0CisJCSAqIEluIG90aGVyIHdvcmRzLCBpZiByb290X3Rhc2tfZ3JvdXAgaGFzIDEwIHRhc2tzIG9mIHdlaWdodAogCQkgKiAxMDI0KSBhbmQgdHdvIGNoaWxkIGdyb3VwcyBBMCBhbmQgQTEgKG9mIHdlaWdodCAxMDI0IGVhY2gpLAogCQkgKiB0aGVuIEEwJ3Mgc2hhcmUgb2YgdGhlIGNwdSByZXNvdXJjZSBpczoKIAkJICoKIAkJICoJQTAncyBiYW5kd2lkdGggPSAxMDI0IC8gKDEwKjEwMjQgKyAxMDI0ICsgMTAyNCkgPSA4LjMzJQogCQkgKgotCQkgKiBXZSBhY2hpZXZlIHRoaXMgYnkgbGV0dGluZyBpbml0X3Rhc2tfZ3JvdXAncyB0YXNrcyBzaXQKLQkJICogZGlyZWN0bHkgaW4gcnEtPmNmcyAoaS5lIGluaXRfdGFza19ncm91cC0+c2VbXSA9IE5VTEwpLgorCQkgKiBXZSBhY2hpZXZlIHRoaXMgYnkgbGV0dGluZyByb290X3Rhc2tfZ3JvdXAncyB0YXNrcyBzaXQKKwkJICogZGlyZWN0bHkgaW4gcnEtPmNmcyAoaS5lIHJvb3RfdGFza19ncm91cC0+c2VbXSA9IE5VTEwpLgogCQkgKi8KLQkJaW5pdF90Z19jZnNfZW50cnkoJmluaXRfdGFza19ncm91cCwgJnJxLT5jZnMsIE5VTEwsIGksIDEsIE5VTEwpOwotI2VuZGlmCisJCWluaXRfdGdfY2ZzX2VudHJ5KCZyb290X3Rhc2tfZ3JvdXAsICZycS0+Y2ZzLCBOVUxMLCBpLCBOVUxMKTsKICNlbmRpZiAvKiBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRCAqLwogCiAJCXJxLT5ydC5ydF9ydW50aW1lID0gZGVmX3J0X2JhbmR3aWR0aC5ydF9ydW50aW1lOwogI2lmZGVmIENPTkZJR19SVF9HUk9VUF9TQ0hFRAogCQlJTklUX0xJU1RfSEVBRCgmcnEtPmxlYWZfcnRfcnFfbGlzdCk7Ci0jaWZkZWYgQ09ORklHX0NHUk9VUF9TQ0hFRAotCQlpbml0X3RnX3J0X2VudHJ5KCZpbml0X3Rhc2tfZ3JvdXAsICZycS0+cnQsIE5VTEwsIGksIDEsIE5VTEwpOwotI2VuZGlmCisJCWluaXRfdGdfcnRfZW50cnkoJnJvb3RfdGFza19ncm91cCwgJnJxLT5ydCwgTlVMTCwgaSwgTlVMTCk7CiAjZW5kaWYKIAogCQlmb3IgKGogPSAwOyBqIDwgQ1BVX0xPQURfSURYX01BWDsgaisrKQpAQCAtODI5Myw4ICs4MDY1LDYgQEAKIAkJemFsbG9jX2NwdW1hc2tfdmFyKCZjcHVfaXNvbGF0ZWRfbWFwLCBHRlBfTk9XQUlUKTsKICNlbmRpZiAvKiBTTVAgKi8KIAotCXBlcmZfZXZlbnRfaW5pdCgpOwotCiAJc2NoZWR1bGVyX3J1bm5pbmcgPSAxOwogfQogCkBAIC04NDg4LDcgKzgyNTgsNyBAQAogCQlpZiAoIXNlKQogCQkJZ290byBlcnJfZnJlZV9ycTsKIAotCQlpbml0X3RnX2Nmc19lbnRyeSh0ZywgY2ZzX3JxLCBzZSwgaSwgMCwgcGFyZW50LT5zZVtpXSk7CisJCWluaXRfdGdfY2ZzX2VudHJ5KHRnLCBjZnNfcnEsIHNlLCBpLCBwYXJlbnQtPnNlW2ldKTsKIAl9CiAKIAlyZXR1cm4gMTsKQEAgLTg0OTksMTUgKzgyNjksMjEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHJlZ2lzdGVyX2ZhaXJfc2NoZWRfZ3JvdXAoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCBpbnQgY3B1KQotewotCWxpc3RfYWRkX3JjdSgmdGctPmNmc19ycVtjcHVdLT5sZWFmX2Nmc19ycV9saXN0LAotCQkJJmNwdV9ycShjcHUpLT5sZWFmX2Nmc19ycV9saXN0KTsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIHVucmVnaXN0ZXJfZmFpcl9zY2hlZF9ncm91cChzdHJ1Y3QgdGFza19ncm91cCAqdGcsIGludCBjcHUpCiB7Ci0JbGlzdF9kZWxfcmN1KCZ0Zy0+Y2ZzX3JxW2NwdV0tPmxlYWZfY2ZzX3JxX2xpc3QpOworCXN0cnVjdCBycSAqcnEgPSBjcHVfcnEoY3B1KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyoKKwkqIE9ubHkgZW1wdHkgdGFzayBncm91cHMgY2FuIGJlIGRlc3Ryb3llZDsgc28gd2UgY2FuIHNwZWN1bGF0aXZlbHkKKwkqIGNoZWNrIG9uX2xpc3Qgd2l0aG91dCBkYW5nZXIgb2YgaXQgYmVpbmcgcmUtYWRkZWQuCisJKi8KKwlpZiAoIXRnLT5jZnNfcnFbY3B1XS0+b25fbGlzdCkKKwkJcmV0dXJuOworCisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZycS0+bG9jaywgZmxhZ3MpOworCWxpc3RfZGVsX2xlYWZfY2ZzX3JxKHRnLT5jZnNfcnFbY3B1XSk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJxLT5sb2NrLCBmbGFncyk7CiB9CiAjZWxzZSAvKiAhQ09ORkdfRkFJUl9HUk9VUF9TQ0hFRCAqLwogc3RhdGljIGlubGluZSB2b2lkIGZyZWVfZmFpcl9zY2hlZF9ncm91cChzdHJ1Y3QgdGFza19ncm91cCAqdGcpCkBAIC04NTIwLDEwICs4Mjk2LDYgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHJlZ2lzdGVyX2ZhaXJfc2NoZWRfZ3JvdXAoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCBpbnQgY3B1KQotewotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgdW5yZWdpc3Rlcl9mYWlyX3NjaGVkX2dyb3VwKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgaW50IGNwdSkKIHsKIH0KQEAgLTg1NzgsNyArODM1MCw3IEBACiAJCWlmICghcnRfc2UpCiAJCQlnb3RvIGVycl9mcmVlX3JxOwogCi0JCWluaXRfdGdfcnRfZW50cnkodGcsIHJ0X3JxLCBydF9zZSwgaSwgMCwgcGFyZW50LT5ydF9zZVtpXSk7CisJCWluaXRfdGdfcnRfZW50cnkodGcsIHJ0X3JxLCBydF9zZSwgaSwgcGFyZW50LT5ydF9zZVtpXSk7CiAJfQogCiAJcmV0dXJuIDE7CkBAIC04NTg4LDE3ICs4MzYwLDYgQEAKIGVycjoKIAlyZXR1cm4gMDsKIH0KLQotc3RhdGljIGlubGluZSB2b2lkIHJlZ2lzdGVyX3J0X3NjaGVkX2dyb3VwKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgaW50IGNwdSkKLXsKLQlsaXN0X2FkZF9yY3UoJnRnLT5ydF9ycVtjcHVdLT5sZWFmX3J0X3JxX2xpc3QsCi0JCQkmY3B1X3JxKGNwdSktPmxlYWZfcnRfcnFfbGlzdCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB1bnJlZ2lzdGVyX3J0X3NjaGVkX2dyb3VwKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgaW50IGNwdSkKLXsKLQlsaXN0X2RlbF9yY3UoJnRnLT5ydF9ycVtjcHVdLT5sZWFmX3J0X3JxX2xpc3QpOwotfQogI2Vsc2UgLyogIUNPTkZJR19SVF9HUk9VUF9TQ0hFRCAqLwogc3RhdGljIGlubGluZSB2b2lkIGZyZWVfcnRfc2NoZWRfZ3JvdXAoc3RydWN0IHRhc2tfZ3JvdXAgKnRnKQogewpAQCAtODYwOSwxNCArODM3MCw2IEBACiB7CiAJcmV0dXJuIDE7CiB9Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCByZWdpc3Rlcl9ydF9zY2hlZF9ncm91cChzdHJ1Y3QgdGFza19ncm91cCAqdGcsIGludCBjcHUpCi17Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB1bnJlZ2lzdGVyX3J0X3NjaGVkX2dyb3VwKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgaW50IGNwdSkKLXsKLX0KICNlbmRpZiAvKiBDT05GSUdfUlRfR1JPVVBfU0NIRUQgKi8KIAogI2lmZGVmIENPTkZJR19DR1JPVVBfU0NIRUQKQEAgLTg2MjQsNiArODM3Nyw3IEBACiB7CiAJZnJlZV9mYWlyX3NjaGVkX2dyb3VwKHRnKTsKIAlmcmVlX3J0X3NjaGVkX2dyb3VwKHRnKTsKKwlhdXRvZ3JvdXBfZnJlZSh0Zyk7CiAJa2ZyZWUodGcpOwogfQogCkBAIC04NjMyLDcgKzgzODYsNiBAQAogewogCXN0cnVjdCB0YXNrX2dyb3VwICp0ZzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBpOwogCiAJdGcgPSBremFsbG9jKHNpemVvZigqdGcpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXRnKQpAQCAtODY0NSwxMCArODM5OCw2IEBACiAJCWdvdG8gZXJyOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnRhc2tfZ3JvdXBfbG9jaywgZmxhZ3MpOwotCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7Ci0JCXJlZ2lzdGVyX2ZhaXJfc2NoZWRfZ3JvdXAodGcsIGkpOwotCQlyZWdpc3Rlcl9ydF9zY2hlZF9ncm91cCh0ZywgaSk7Ci0JfQogCWxpc3RfYWRkX3JjdSgmdGctPmxpc3QsICZ0YXNrX2dyb3Vwcyk7CiAKIAlXQVJOX09OKCFwYXJlbnQpOyAvKiByb290IHNob3VsZCBhbHJlYWR5IGV4aXN0ICovCkBAIC04Njc4LDExICs4NDI3LDExIEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgaTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZ0YXNrX2dyb3VwX2xvY2ssIGZsYWdzKTsKLQlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgeworCS8qIGVuZCBwYXJ0aWNpcGF0aW9uIGluIHNoYXJlcyBkaXN0cmlidXRpb24gKi8KKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkKIAkJdW5yZWdpc3Rlcl9mYWlyX3NjaGVkX2dyb3VwKHRnLCBpKTsKLQkJdW5yZWdpc3Rlcl9ydF9zY2hlZF9ncm91cCh0ZywgaSk7Ci0JfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJnRhc2tfZ3JvdXBfbG9jaywgZmxhZ3MpOwogCWxpc3RfZGVsX3JjdSgmdGctPmxpc3QpOwogCWxpc3RfZGVsX3JjdSgmdGctPnNpYmxpbmdzKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0YXNrX2dyb3VwX2xvY2ssIGZsYWdzKTsKQEAgLTg3MjksMzMgKzg0NzgsNiBAQAogI2VuZGlmIC8qIENPTkZJR19DR1JPVVBfU0NIRUQgKi8KIAogI2lmZGVmIENPTkZJR19GQUlSX0dST1VQX1NDSEVECi1zdGF0aWMgdm9pZCBfX3NldF9zZV9zaGFyZXMoc3RydWN0IHNjaGVkX2VudGl0eSAqc2UsIHVuc2lnbmVkIGxvbmcgc2hhcmVzKQotewotCXN0cnVjdCBjZnNfcnEgKmNmc19ycSA9IHNlLT5jZnNfcnE7Ci0JaW50IG9uX3JxOwotCi0Jb25fcnEgPSBzZS0+b25fcnE7Ci0JaWYgKG9uX3JxKQotCQlkZXF1ZXVlX2VudGl0eShjZnNfcnEsIHNlLCAwKTsKLQotCXNlLT5sb2FkLndlaWdodCA9IHNoYXJlczsKLQlzZS0+bG9hZC5pbnZfd2VpZ2h0ID0gMDsKLQotCWlmIChvbl9ycSkKLQkJZW5xdWV1ZV9lbnRpdHkoY2ZzX3JxLCBzZSwgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldF9zZV9zaGFyZXMoc3RydWN0IHNjaGVkX2VudGl0eSAqc2UsIHVuc2lnbmVkIGxvbmcgc2hhcmVzKQotewotCXN0cnVjdCBjZnNfcnEgKmNmc19ycSA9IHNlLT5jZnNfcnE7Ci0Jc3RydWN0IHJxICpycSA9IGNmc19ycS0+cnE7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcnEtPmxvY2ssIGZsYWdzKTsKLQlfX3NldF9zZV9zaGFyZXMoc2UsIHNoYXJlcyk7Ci0JcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJxLT5sb2NrLCBmbGFncyk7Ci19Ci0KIHN0YXRpYyBERUZJTkVfTVVURVgoc2hhcmVzX211dGV4KTsKIAogaW50IHNjaGVkX2dyb3VwX3NldF9zaGFyZXMoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCB1bnNpZ25lZCBsb25nIHNoYXJlcykKQEAgLTg3NzgsMzcgKzg1MDAsMTkgQEAKIAlpZiAodGctPnNoYXJlcyA9PSBzaGFyZXMpCiAJCWdvdG8gZG9uZTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZ0YXNrX2dyb3VwX2xvY2ssIGZsYWdzKTsKLQlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkKLQkJdW5yZWdpc3Rlcl9mYWlyX3NjaGVkX2dyb3VwKHRnLCBpKTsKLQlsaXN0X2RlbF9yY3UoJnRnLT5zaWJsaW5ncyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGFza19ncm91cF9sb2NrLCBmbGFncyk7Ci0KLQkvKiB3YWl0IGZvciBhbnkgb25nb2luZyByZWZlcmVuY2UgdG8gdGhpcyBncm91cCB0byBmaW5pc2ggKi8KLQlzeW5jaHJvbml6ZV9zY2hlZCgpOwotCi0JLyoKLQkgKiBOb3cgd2UgYXJlIGZyZWUgdG8gbW9kaWZ5IHRoZSBncm91cCdzIHNoYXJlIG9uIGVhY2ggY3B1Ci0JICogdy9vIHRyaXBwaW5nIHJlYmFsYW5jZV9zaGFyZSBvciBsb2FkX2JhbGFuY2VfZmFpci4KLQkgKi8KIAl0Zy0+c2hhcmVzID0gc2hhcmVzOwogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7Ci0JCS8qCi0JCSAqIGZvcmNlIGEgcmViYWxhbmNlCi0JCSAqLwotCQljZnNfcnFfc2V0X3NoYXJlcyh0Zy0+Y2ZzX3JxW2ldLCAwKTsKLQkJc2V0X3NlX3NoYXJlcyh0Zy0+c2VbaV0sIHNoYXJlcyk7CisJCXN0cnVjdCBycSAqcnEgPSBjcHVfcnEoaSk7CisJCXN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlOworCisJCXNlID0gdGctPnNlW2ldOworCQkvKiBQcm9wYWdhdGUgY29udHJpYnV0aW9uIHRvIGhpZXJhcmNoeSAqLworCQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnJxLT5sb2NrLCBmbGFncyk7CisJCWZvcl9lYWNoX3NjaGVkX2VudGl0eShzZSkKKwkJCXVwZGF0ZV9jZnNfc2hhcmVzKGdyb3VwX2Nmc19ycShzZSksIDApOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnEtPmxvY2ssIGZsYWdzKTsKIAl9CiAKLQkvKgotCSAqIEVuYWJsZSBsb2FkIGJhbGFuY2UgYWN0aXZpdHkgb24gdGhpcyBncm91cCwgYnkgaW5zZXJ0aW5nIGl0IGJhY2sgb24KLQkgKiBlYWNoIGNwdSdzIHJxLT5sZWFmX2Nmc19ycV9saXN0LgotCSAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZ0YXNrX2dyb3VwX2xvY2ssIGZsYWdzKTsKLQlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkKLQkJcmVnaXN0ZXJfZmFpcl9zY2hlZF9ncm91cCh0ZywgaSk7Ci0JbGlzdF9hZGRfcmN1KCZ0Zy0+c2libGluZ3MsICZ0Zy0+cGFyZW50LT5jaGlsZHJlbik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGFza19ncm91cF9sb2NrLCBmbGFncyk7CiBkb25lOgogCW11dGV4X3VubG9jaygmc2hhcmVzX211dGV4KTsKIAlyZXR1cm4gMDsKQEAgLTkxMDcsNyArODgxMSw3IEBACiAKIAlpZiAoIWNncnAtPnBhcmVudCkgewogCQkvKiBUaGlzIGlzIGVhcmx5IGluaXRpYWxpemF0aW9uIGZvciB0aGUgdG9wIGNncm91cCAqLwotCQlyZXR1cm4gJmluaXRfdGFza19ncm91cC5jc3M7CisJCXJldHVybiAmcm9vdF90YXNrX2dyb3VwLmNzczsKIAl9CiAKIAlwYXJlbnQgPSBjZ3JvdXBfdGcoY2dycC0+cGFyZW50KTsKQEAgLTk1MzQsNzIgKzkyMzgsMyBAQAogfTsKICNlbmRpZgkvKiBDT05GSUdfQ0dST1VQX0NQVUFDQ1QgKi8KIAotI2lmbmRlZiBDT05GSUdfU01QCi0KLXZvaWQgc3luY2hyb25pemVfc2NoZWRfZXhwZWRpdGVkKHZvaWQpCi17Ci0JYmFycmllcigpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoc3luY2hyb25pemVfc2NoZWRfZXhwZWRpdGVkKTsKLQotI2Vsc2UgLyogI2lmbmRlZiBDT05GSUdfU01QICovCi0KLXN0YXRpYyBhdG9taWNfdCBzeW5jaHJvbml6ZV9zY2hlZF9leHBlZGl0ZWRfY291bnQgPSBBVE9NSUNfSU5JVCgwKTsKLQotc3RhdGljIGludCBzeW5jaHJvbml6ZV9zY2hlZF9leHBlZGl0ZWRfY3B1X3N0b3Aodm9pZCAqZGF0YSkKLXsKLQkvKgotCSAqIFRoZXJlIG11c3QgYmUgYSBmdWxsIG1lbW9yeSBiYXJyaWVyIG9uIGVhY2ggYWZmZWN0ZWQgQ1BVCi0JICogYmV0d2VlbiB0aGUgdGltZSB0aGF0IHRyeV9zdG9wX2NwdXMoKSBpcyBjYWxsZWQgYW5kIHRoZQotCSAqIHRpbWUgdGhhdCBpdCByZXR1cm5zLgotCSAqCi0JICogSW4gdGhlIGN1cnJlbnQgaW5pdGlhbCBpbXBsZW1lbnRhdGlvbiBvZiBjcHVfc3RvcCwgdGhlCi0JICogYWJvdmUgY29uZGl0aW9uIGlzIGFscmVhZHkgbWV0IHdoZW4gdGhlIGNvbnRyb2wgcmVhY2hlcwotCSAqIHRoaXMgcG9pbnQgYW5kIHRoZSBmb2xsb3dpbmcgc21wX21iKCkgaXMgbm90IHN0cmljdGx5Ci0JICogbmVjZXNzYXJ5LiAgRG8gc21wX21iKCkgYW55d2F5IGZvciBkb2N1bWVudGF0aW9uIGFuZAotCSAqIHJvYnVzdG5lc3MgYWdhaW5zdCBmdXR1cmUgaW1wbGVtZW50YXRpb24gY2hhbmdlcy4KLQkgKi8KLQlzbXBfbWIoKTsgLyogU2VlIGFib3ZlIGNvbW1lbnQgYmxvY2suICovCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBXYWl0IGZvciBhbiByY3Utc2NoZWQgZ3JhY2UgcGVyaW9kIHRvIGVsYXBzZSwgYnV0IHVzZSAiYmlnIGhhbW1lciIKLSAqIGFwcHJvYWNoIHRvIGZvcmNlIGdyYWNlIHBlcmlvZCB0byBlbmQgcXVpY2tseS4gIFRoaXMgY29uc3VtZXMKLSAqIHNpZ25pZmljYW50IHRpbWUgb24gYWxsIENQVXMsIGFuZCBpcyB0aHVzIG5vdCByZWNvbW1lbmRlZCBmb3IKLSAqIGFueSBzb3J0IG9mIGNvbW1vbi1jYXNlIGNvZGUuCi0gKgotICogTm90ZSB0aGF0IGl0IGlzIGlsbGVnYWwgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIHdoaWxlIGhvbGRpbmcgYW55Ci0gKiBsb2NrIHRoYXQgaXMgYWNxdWlyZWQgYnkgYSBDUFUtaG90cGx1ZyBub3RpZmllci4gIEZhaWxpbmcgdG8KLSAqIG9ic2VydmUgdGhpcyByZXN0cmljdGlvbiB3aWxsIHJlc3VsdCBpbiBkZWFkbG9jay4KLSAqLwotdm9pZCBzeW5jaHJvbml6ZV9zY2hlZF9leHBlZGl0ZWQodm9pZCkKLXsKLQlpbnQgc25hcCwgdHJ5Y291bnQgPSAwOwotCi0Jc21wX21iKCk7ICAvKiBlbnN1cmUgcHJpb3IgbW9kIGhhcHBlbnMgYmVmb3JlIGNhcHR1cmluZyBzbmFwLiAqLwotCXNuYXAgPSBhdG9taWNfcmVhZCgmc3luY2hyb25pemVfc2NoZWRfZXhwZWRpdGVkX2NvdW50KSArIDE7Ci0JZ2V0X29ubGluZV9jcHVzKCk7Ci0Jd2hpbGUgKHRyeV9zdG9wX2NwdXMoY3B1X29ubGluZV9tYXNrLAotCQkJICAgICBzeW5jaHJvbml6ZV9zY2hlZF9leHBlZGl0ZWRfY3B1X3N0b3AsCi0JCQkgICAgIE5VTEwpID09IC1FQUdBSU4pIHsKLQkJcHV0X29ubGluZV9jcHVzKCk7Ci0JCWlmICh0cnljb3VudCsrIDwgMTApCi0JCQl1ZGVsYXkodHJ5Y291bnQgKiBudW1fb25saW5lX2NwdXMoKSk7Ci0JCWVsc2UgewotCQkJc3luY2hyb25pemVfc2NoZWQoKTsKLQkJCXJldHVybjsKLQkJfQotCQlpZiAoYXRvbWljX3JlYWQoJnN5bmNocm9uaXplX3NjaGVkX2V4cGVkaXRlZF9jb3VudCkgLSBzbmFwID4gMCkgewotCQkJc21wX21iKCk7IC8qIGVuc3VyZSB0ZXN0IGhhcHBlbnMgYmVmb3JlIGNhbGxlciBrZnJlZSAqLwotCQkJcmV0dXJuOwotCQl9Ci0JCWdldF9vbmxpbmVfY3B1cygpOwotCX0KLQlhdG9taWNfaW5jKCZzeW5jaHJvbml6ZV9zY2hlZF9leHBlZGl0ZWRfY291bnQpOwotCXNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpOyAvKiBlbnN1cmUgcG9zdC1HUCBhY3Rpb25zIHNlZW4gYWZ0ZXIgR1AuICovCi0JcHV0X29ubGluZV9jcHVzKCk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChzeW5jaHJvbml6ZV9zY2hlZF9leHBlZGl0ZWQpOwotCi0jZW5kaWYgLyogI2Vsc2UgI2lmbmRlZiBDT05GSUdfU01QICovCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWRfYXV0b2dyb3VwLmMgYi9rZXJuZWwvc2NoZWRfYXV0b2dyb3VwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJhNzIzYgotLS0gL2Rldi9udWxsCisrKyBiL2tlcm5lbC9zY2hlZF9hdXRvZ3JvdXAuYwpAQCAtMCwwICsxLDIzOCBAQAorI2lmZGVmIENPTkZJR19TQ0hFRF9BVVRPR1JPVVAKKworI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CisjaW5jbHVkZSA8bGludXgvdXRzbmFtZS5oPgorCit1bnNpZ25lZCBpbnQgX19yZWFkX21vc3RseSBzeXNjdGxfc2NoZWRfYXV0b2dyb3VwX2VuYWJsZWQgPSAxOworc3RhdGljIHN0cnVjdCBhdXRvZ3JvdXAgYXV0b2dyb3VwX2RlZmF1bHQ7CitzdGF0aWMgYXRvbWljX3QgYXV0b2dyb3VwX3NlcV9ucjsKKworc3RhdGljIHZvaWQgX19pbml0IGF1dG9ncm91cF9pbml0KHN0cnVjdCB0YXNrX3N0cnVjdCAqaW5pdF90YXNrKQoreworCWF1dG9ncm91cF9kZWZhdWx0LnRnID0gJnJvb3RfdGFza19ncm91cDsKKwlyb290X3Rhc2tfZ3JvdXAuYXV0b2dyb3VwID0gJmF1dG9ncm91cF9kZWZhdWx0OworCWtyZWZfaW5pdCgmYXV0b2dyb3VwX2RlZmF1bHQua3JlZik7CisJaW5pdF9yd3NlbSgmYXV0b2dyb3VwX2RlZmF1bHQubG9jayk7CisJaW5pdF90YXNrLT5zaWduYWwtPmF1dG9ncm91cCA9ICZhdXRvZ3JvdXBfZGVmYXVsdDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGF1dG9ncm91cF9mcmVlKHN0cnVjdCB0YXNrX2dyb3VwICp0ZykKK3sKKwlrZnJlZSh0Zy0+YXV0b2dyb3VwKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGF1dG9ncm91cF9kZXN0cm95KHN0cnVjdCBrcmVmICprcmVmKQoreworCXN0cnVjdCBhdXRvZ3JvdXAgKmFnID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCBhdXRvZ3JvdXAsIGtyZWYpOworCisJc2NoZWRfZGVzdHJveV9ncm91cChhZy0+dGcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXV0b2dyb3VwX2tyZWZfcHV0KHN0cnVjdCBhdXRvZ3JvdXAgKmFnKQoreworCWtyZWZfcHV0KCZhZy0+a3JlZiwgYXV0b2dyb3VwX2Rlc3Ryb3kpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBhdXRvZ3JvdXAgKmF1dG9ncm91cF9rcmVmX2dldChzdHJ1Y3QgYXV0b2dyb3VwICphZykKK3sKKwlrcmVmX2dldCgmYWctPmtyZWYpOworCXJldHVybiBhZzsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgYXV0b2dyb3VwICphdXRvZ3JvdXBfdGFza19nZXQoc3RydWN0IHRhc2tfc3RydWN0ICpwKQoreworCXN0cnVjdCBhdXRvZ3JvdXAgKmFnOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIWxvY2tfdGFza19zaWdoYW5kKHAsICZmbGFncykpCisJCXJldHVybiBhdXRvZ3JvdXBfa3JlZl9nZXQoJmF1dG9ncm91cF9kZWZhdWx0KTsKKworCWFnID0gYXV0b2dyb3VwX2tyZWZfZ2V0KHAtPnNpZ25hbC0+YXV0b2dyb3VwKTsKKwl1bmxvY2tfdGFza19zaWdoYW5kKHAsICZmbGFncyk7CisKKwlyZXR1cm4gYWc7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGF1dG9ncm91cCAqYXV0b2dyb3VwX2NyZWF0ZSh2b2lkKQoreworCXN0cnVjdCBhdXRvZ3JvdXAgKmFnID0ga3phbGxvYyhzaXplb2YoKmFnKSwgR0ZQX0tFUk5FTCk7CisJc3RydWN0IHRhc2tfZ3JvdXAgKnRnOworCisJaWYgKCFhZykKKwkJZ290byBvdXRfZmFpbDsKKworCXRnID0gc2NoZWRfY3JlYXRlX2dyb3VwKCZyb290X3Rhc2tfZ3JvdXApOworCisJaWYgKElTX0VSUih0ZykpCisJCWdvdG8gb3V0X2ZyZWU7CisKKwlrcmVmX2luaXQoJmFnLT5rcmVmKTsKKwlpbml0X3J3c2VtKCZhZy0+bG9jayk7CisJYWctPmlkID0gYXRvbWljX2luY19yZXR1cm4oJmF1dG9ncm91cF9zZXFfbnIpOworCWFnLT50ZyA9IHRnOworCXRnLT5hdXRvZ3JvdXAgPSBhZzsKKworCXJldHVybiBhZzsKKworb3V0X2ZyZWU6CisJa2ZyZWUoYWcpOworb3V0X2ZhaWw6CisJaWYgKHByaW50a19yYXRlbGltaXQoKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJhdXRvZ3JvdXBfY3JlYXRlOiAlcyBmYWlsdXJlLlxuIiwKKwkJCWFnID8gInNjaGVkX2NyZWF0ZV9ncm91cCgpIiA6ICJrbWFsbG9jKCkiKTsKKwl9CisKKwlyZXR1cm4gYXV0b2dyb3VwX2tyZWZfZ2V0KCZhdXRvZ3JvdXBfZGVmYXVsdCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbAordGFza193YW50c19hdXRvZ3JvdXAoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgdGFza19ncm91cCAqdGcpCit7CisJaWYgKHRnICE9ICZyb290X3Rhc2tfZ3JvdXApCisJCXJldHVybiBmYWxzZTsKKworCWlmIChwLT5zY2hlZF9jbGFzcyAhPSAmZmFpcl9zY2hlZF9jbGFzcykKKwkJcmV0dXJuIGZhbHNlOworCisJLyoKKwkgKiBXZSBjYW4gb25seSBhc3N1bWUgdGhlIHRhc2sgZ3JvdXAgY2FuJ3QgZ28gYXdheSBvbiB1cyBpZgorCSAqIGF1dG9ncm91cF9tb3ZlX2dyb3VwKCkgY2FuIHNlZSB1cyBvbiAtPnRocmVhZF9ncm91cCBsaXN0LgorCSAqLworCWlmIChwLT5mbGFncyAmIFBGX0VYSVRJTkcpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX2dyb3VwICoKK2F1dG9ncm91cF90YXNrX2dyb3VwKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IHRhc2tfZ3JvdXAgKnRnKQoreworCWludCBlbmFibGVkID0gQUNDRVNTX09OQ0Uoc3lzY3RsX3NjaGVkX2F1dG9ncm91cF9lbmFibGVkKTsKKworCWlmIChlbmFibGVkICYmIHRhc2tfd2FudHNfYXV0b2dyb3VwKHAsIHRnKSkKKwkJcmV0dXJuIHAtPnNpZ25hbC0+YXV0b2dyb3VwLT50ZzsKKworCXJldHVybiB0ZzsKK30KKworc3RhdGljIHZvaWQKK2F1dG9ncm91cF9tb3ZlX2dyb3VwKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IGF1dG9ncm91cCAqYWcpCit7CisJc3RydWN0IGF1dG9ncm91cCAqcHJldjsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCUJVR19PTighbG9ja190YXNrX3NpZ2hhbmQocCwgJmZsYWdzKSk7CisKKwlwcmV2ID0gcC0+c2lnbmFsLT5hdXRvZ3JvdXA7CisJaWYgKHByZXYgPT0gYWcpIHsKKwkJdW5sb2NrX3Rhc2tfc2lnaGFuZChwLCAmZmxhZ3MpOworCQlyZXR1cm47CisJfQorCisJcC0+c2lnbmFsLT5hdXRvZ3JvdXAgPSBhdXRvZ3JvdXBfa3JlZl9nZXQoYWcpOworCisJdCA9IHA7CisJZG8geworCQlzY2hlZF9tb3ZlX3Rhc2sodCk7CisJfSB3aGlsZV9lYWNoX3RocmVhZChwLCB0KTsKKworCXVubG9ja190YXNrX3NpZ2hhbmQocCwgJmZsYWdzKTsKKwlhdXRvZ3JvdXBfa3JlZl9wdXQocHJldik7Cit9CisKKy8qIEFsbG9jYXRlcyBHRlBfS0VSTkVMLCBjYW5ub3QgYmUgY2FsbGVkIHVuZGVyIGFueSBzcGlubG9jayAqLwordm9pZCBzY2hlZF9hdXRvZ3JvdXBfY3JlYXRlX2F0dGFjaChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCit7CisJc3RydWN0IGF1dG9ncm91cCAqYWcgPSBhdXRvZ3JvdXBfY3JlYXRlKCk7CisKKwlhdXRvZ3JvdXBfbW92ZV9ncm91cChwLCBhZyk7CisJLyogZHJvcCBleHRyYSByZWZyZW5jZSBhZGRlZCBieSBhdXRvZ3JvdXBfY3JlYXRlKCkgKi8KKwlhdXRvZ3JvdXBfa3JlZl9wdXQoYWcpOworfQorRVhQT1JUX1NZTUJPTChzY2hlZF9hdXRvZ3JvdXBfY3JlYXRlX2F0dGFjaCk7CisKKy8qIENhbm5vdCBiZSBjYWxsZWQgdW5kZXIgc2lnbG9jay4gIEN1cnJlbnRseSBoYXMgbm8gdXNlcnMgKi8KK3ZvaWQgc2NoZWRfYXV0b2dyb3VwX2RldGFjaChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCit7CisJYXV0b2dyb3VwX21vdmVfZ3JvdXAocCwgJmF1dG9ncm91cF9kZWZhdWx0KTsKK30KK0VYUE9SVF9TWU1CT0woc2NoZWRfYXV0b2dyb3VwX2RldGFjaCk7CisKK3ZvaWQgc2NoZWRfYXV0b2dyb3VwX2Zvcmsoc3RydWN0IHNpZ25hbF9zdHJ1Y3QgKnNpZykKK3sKKwlzaWctPmF1dG9ncm91cCA9IGF1dG9ncm91cF90YXNrX2dldChjdXJyZW50KTsKK30KKwordm9pZCBzY2hlZF9hdXRvZ3JvdXBfZXhpdChzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCAqc2lnKQoreworCWF1dG9ncm91cF9rcmVmX3B1dChzaWctPmF1dG9ncm91cCk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHNldHVwX2F1dG9ncm91cChjaGFyICpzdHIpCit7CisJc3lzY3RsX3NjaGVkX2F1dG9ncm91cF9lbmFibGVkID0gMDsKKworCXJldHVybiAxOworfQorCitfX3NldHVwKCJub2F1dG9ncm91cCIsIHNldHVwX2F1dG9ncm91cCk7CisKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworCitpbnQgcHJvY19zY2hlZF9hdXRvZ3JvdXBfc2V0X25pY2Uoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgKm5pY2UpCit7CisJc3RhdGljIHVuc2lnbmVkIGxvbmcgbmV4dCA9IElOSVRJQUxfSklGRklFUzsKKwlzdHJ1Y3QgYXV0b2dyb3VwICphZzsKKwlpbnQgZXJyOworCisJaWYgKCpuaWNlIDwgLTIwIHx8ICpuaWNlID4gMTkpCisJCXJldHVybiAtRUlOVkFMOworCisJZXJyID0gc2VjdXJpdHlfdGFza19zZXRuaWNlKGN1cnJlbnQsICpuaWNlKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJaWYgKCpuaWNlIDwgMCAmJiAhY2FuX25pY2UoY3VycmVudCwgKm5pY2UpKQorCQlyZXR1cm4gLUVQRVJNOworCisJLyogdGhpcyBpcyBhIGhlYXZ5IG9wZXJhdGlvbiB0YWtpbmcgZ2xvYmFsIGxvY2tzLi4gKi8KKwlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikgJiYgdGltZV9iZWZvcmUoamlmZmllcywgbmV4dCkpCisJCXJldHVybiAtRUFHQUlOOworCisJbmV4dCA9IEhaIC8gMTAgKyBqaWZmaWVzOworCWFnID0gYXV0b2dyb3VwX3Rhc2tfZ2V0KHApOworCisJZG93bl93cml0ZSgmYWctPmxvY2spOworCWVyciA9IHNjaGVkX2dyb3VwX3NldF9zaGFyZXMoYWctPnRnLCBwcmlvX3RvX3dlaWdodFsqbmljZSArIDIwXSk7CisJaWYgKCFlcnIpCisJCWFnLT5uaWNlID0gKm5pY2U7CisJdXBfd3JpdGUoJmFnLT5sb2NrKTsKKworCWF1dG9ncm91cF9rcmVmX3B1dChhZyk7CisKKwlyZXR1cm4gZXJyOworfQorCit2b2lkIHByb2Nfc2NoZWRfYXV0b2dyb3VwX3Nob3dfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBzZXFfZmlsZSAqbSkKK3sKKwlzdHJ1Y3QgYXV0b2dyb3VwICphZyA9IGF1dG9ncm91cF90YXNrX2dldChwKTsKKworCWRvd25fcmVhZCgmYWctPmxvY2spOworCXNlcV9wcmludGYobSwgIi9hdXRvZ3JvdXAtJWxkIG5pY2UgJWRcbiIsIGFnLT5pZCwgYWctPm5pY2UpOworCXVwX3JlYWQoJmFnLT5sb2NrKTsKKworCWF1dG9ncm91cF9rcmVmX3B1dChhZyk7Cit9CisjZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi8KKworI2lmZGVmIENPTkZJR19TQ0hFRF9ERUJVRworc3RhdGljIGlubGluZSBpbnQgYXV0b2dyb3VwX3BhdGgoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCBjaGFyICpidWYsIGludCBidWZsZW4pCit7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgYnVmbGVuLCAiJXMtJWxkIiwgIi9hdXRvZ3JvdXAiLCB0Zy0+YXV0b2dyb3VwLT5pZCk7Cit9CisjZW5kaWYgLyogQ09ORklHX1NDSEVEX0RFQlVHICovCisKKyNlbmRpZiAvKiBDT05GSUdfU0NIRURfQVVUT0dST1VQICovCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWRfYXV0b2dyb3VwLmggYi9rZXJuZWwvc2NoZWRfYXV0b2dyb3VwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM1OGUyNAotLS0gL2Rldi9udWxsCisrKyBiL2tlcm5lbC9zY2hlZF9hdXRvZ3JvdXAuaApAQCAtMCwwICsxLDMyIEBACisjaWZkZWYgQ09ORklHX1NDSEVEX0FVVE9HUk9VUAorCitzdHJ1Y3QgYXV0b2dyb3VwIHsKKwlzdHJ1Y3Qga3JlZgkJa3JlZjsKKwlzdHJ1Y3QgdGFza19ncm91cAkqdGc7CisJc3RydWN0IHJ3X3NlbWFwaG9yZQlsb2NrOworCXVuc2lnbmVkIGxvbmcJCWlkOworCWludAkJCW5pY2U7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX2dyb3VwICoKK2F1dG9ncm91cF90YXNrX2dyb3VwKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IHRhc2tfZ3JvdXAgKnRnKTsKKworI2Vsc2UgLyogIUNPTkZJR19TQ0hFRF9BVVRPR1JPVVAgKi8KKworc3RhdGljIGlubGluZSB2b2lkIGF1dG9ncm91cF9pbml0KHN0cnVjdCB0YXNrX3N0cnVjdCAqaW5pdF90YXNrKSB7ICB9CitzdGF0aWMgaW5saW5lIHZvaWQgYXV0b2dyb3VwX2ZyZWUoc3RydWN0IHRhc2tfZ3JvdXAgKnRnKSB7IH0KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdGFza19ncm91cCAqCithdXRvZ3JvdXBfdGFza19ncm91cChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCB0YXNrX2dyb3VwICp0ZykKK3sKKwlyZXR1cm4gdGc7Cit9CisKKyNpZmRlZiBDT05GSUdfU0NIRURfREVCVUcKK3N0YXRpYyBpbmxpbmUgaW50IGF1dG9ncm91cF9wYXRoKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgY2hhciAqYnVmLCBpbnQgYnVmbGVuKQoreworCXJldHVybiAwOworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBDT05GSUdfU0NIRURfQVVUT0dST1VQICovCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWRfY2xvY2suYyBiL2tlcm5lbC9zY2hlZF9jbG9jay5jCmluZGV4IDUyZjFhMTQuLjlkOGFmMGIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZF9jbG9jay5jCisrKyBiL2tlcm5lbC9zY2hlZF9jbG9jay5jCkBAIC03OSw3ICs3OSw3IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzY2hlZF9jbG9jayk7CiAKLXN0YXRpYyBfX3JlYWRfbW9zdGx5IGludCBzY2hlZF9jbG9ja19ydW5uaW5nOworX19yZWFkX21vc3RseSBpbnQgc2NoZWRfY2xvY2tfcnVubmluZzsKIAogI2lmZGVmIENPTkZJR19IQVZFX1VOU1RBQkxFX1NDSEVEX0NMT0NLCiBfX3JlYWRfbW9zdGx5IGludCBzY2hlZF9jbG9ja19zdGFibGU7CmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWRfZGVidWcuYyBiL2tlcm5lbC9zY2hlZF9kZWJ1Zy5jCmluZGV4IDJlMWIwZDEuLjFkZmFlM2QgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZF9kZWJ1Zy5jCisrKyBiL2tlcm5lbC9zY2hlZF9kZWJ1Zy5jCkBAIC01NCw4ICs1NCw3IEBACiAjZGVmaW5lIFNQTElUX05TKHgpIG5zZWNfaGlnaCh4KSwgbnNlY19sb3coeCkKIAogI2lmZGVmIENPTkZJR19GQUlSX0dST1VQX1NDSEVECi1zdGF0aWMgdm9pZCBwcmludF9jZnNfZ3JvdXBfc3RhdHMoc3RydWN0IHNlcV9maWxlICptLCBpbnQgY3B1LAotCQlzdHJ1Y3QgdGFza19ncm91cCAqdGcpCitzdGF0aWMgdm9pZCBwcmludF9jZnNfZ3JvdXBfc3RhdHMoc3RydWN0IHNlcV9maWxlICptLCBpbnQgY3B1LCBzdHJ1Y3QgdGFza19ncm91cCAqdGcpCiB7CiAJc3RydWN0IHNjaGVkX2VudGl0eSAqc2UgPSB0Zy0+c2VbY3B1XTsKIAlpZiAoIXNlKQpAQCAtMTEwLDE2ICsxMDksNiBAQAogCQkwTEwsIDBMTCwgMExMLCAwTCwgMExMLCAwTCwgMExMLCAwTCk7CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19DR1JPVVBfU0NIRUQKLQl7Ci0JCWNoYXIgcGF0aFs2NF07Ci0KLQkJcmN1X3JlYWRfbG9jaygpOwotCQljZ3JvdXBfcGF0aCh0YXNrX2dyb3VwKHApLT5jc3MuY2dyb3VwLCBwYXRoLCBzaXplb2YocGF0aCkpOwotCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJU0VRX3ByaW50ZihtLCAiICVzIiwgcGF0aCk7Ci0JfQotI2VuZGlmCiAJU0VRX3ByaW50ZihtLCAiXG4iKTsKIH0KIApAQCAtMTQ3LDE5ICsxMzYsNiBAQAogCXJlYWRfdW5sb2NrX2lycXJlc3RvcmUoJnRhc2tsaXN0X2xvY2ssIGZsYWdzKTsKIH0KIAotI2lmIGRlZmluZWQoQ09ORklHX0NHUk9VUF9TQ0hFRCkgJiYgXAotCShkZWZpbmVkKENPTkZJR19GQUlSX0dST1VQX1NDSEVEKSB8fCBkZWZpbmVkKENPTkZJR19SVF9HUk9VUF9TQ0hFRCkpCi1zdGF0aWMgdm9pZCB0YXNrX2dyb3VwX3BhdGgoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCBjaGFyICpidWYsIGludCBidWZsZW4pCi17Ci0JLyogbWF5IGJlIE5VTEwgaWYgdGhlIHVuZGVybHlpbmcgY2dyb3VwIGlzbid0IGZ1bGx5LWNyZWF0ZWQgeWV0ICovCi0JaWYgKCF0Zy0+Y3NzLmNncm91cCkgewotCQlidWZbMF0gPSAnXDAnOwotCQlyZXR1cm47Ci0JfQotCWNncm91cF9wYXRoKHRnLT5jc3MuY2dyb3VwLCBidWYsIGJ1Zmxlbik7Ci19Ci0jZW5kaWYKLQogdm9pZCBwcmludF9jZnNfcnEoc3RydWN0IHNlcV9maWxlICptLCBpbnQgY3B1LCBzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEpCiB7CiAJczY0IE1JTl92cnVudGltZSA9IC0xLCBtaW5fdnJ1bnRpbWUsIG1heF92cnVudGltZSA9IC0xLApAQCAtMTY4LDE2ICsxNDQsNyBAQAogCXN0cnVjdCBzY2hlZF9lbnRpdHkgKmxhc3Q7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotI2lmIGRlZmluZWQoQ09ORklHX0NHUk9VUF9TQ0hFRCkgJiYgZGVmaW5lZChDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRCkKLQljaGFyIHBhdGhbMTI4XTsKLQlzdHJ1Y3QgdGFza19ncm91cCAqdGcgPSBjZnNfcnEtPnRnOwotCi0JdGFza19ncm91cF9wYXRoKHRnLCBwYXRoLCBzaXplb2YocGF0aCkpOwotCi0JU0VRX3ByaW50ZihtLCAiXG5jZnNfcnFbJWRdOiVzXG4iLCBjcHUsIHBhdGgpOwotI2Vsc2UKIAlTRVFfcHJpbnRmKG0sICJcbmNmc19ycVslZF06XG4iLCBjcHUpOwotI2VuZGlmCiAJU0VRX3ByaW50ZihtLCAiICAuJS0zMHM6ICVMZC4lMDZsZFxuIiwgImV4ZWNfY2xvY2siLAogCQkJU1BMSVRfTlMoY2ZzX3JxLT5leGVjX2Nsb2NrKSk7CiAKQEAgLTIwMiwzMiArMTY5LDI5IEBACiAJc3ByZWFkMCA9IG1pbl92cnVudGltZSAtIHJxMF9taW5fdnJ1bnRpbWU7CiAJU0VRX3ByaW50ZihtLCAiICAuJS0zMHM6ICVMZC4lMDZsZFxuIiwgInNwcmVhZDAiLAogCQkJU1BMSVRfTlMoc3ByZWFkMCkpOwotCVNFUV9wcmludGYobSwgIiAgLiUtMzBzOiAlbGRcbiIsICJucl9ydW5uaW5nIiwgY2ZzX3JxLT5ucl9ydW5uaW5nKTsKLQlTRVFfcHJpbnRmKG0sICIgIC4lLTMwczogJWxkXG4iLCAibG9hZCIsIGNmc19ycS0+bG9hZC53ZWlnaHQpOwotCiAJU0VRX3ByaW50ZihtLCAiICAuJS0zMHM6ICVkXG4iLCAibnJfc3ByZWFkX292ZXIiLAogCQkJY2ZzX3JxLT5ucl9zcHJlYWRfb3Zlcik7CisJU0VRX3ByaW50ZihtLCAiICAuJS0zMHM6ICVsZFxuIiwgIm5yX3J1bm5pbmciLCBjZnNfcnEtPm5yX3J1bm5pbmcpOworCVNFUV9wcmludGYobSwgIiAgLiUtMzBzOiAlbGRcbiIsICJsb2FkIiwgY2ZzX3JxLT5sb2FkLndlaWdodCk7CiAjaWZkZWYgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQKICNpZmRlZiBDT05GSUdfU01QCi0JU0VRX3ByaW50ZihtLCAiICAuJS0zMHM6ICVsdVxuIiwgInNoYXJlcyIsIGNmc19ycS0+c2hhcmVzKTsKKwlTRVFfcHJpbnRmKG0sICIgIC4lLTMwczogJUxkLiUwNmxkXG4iLCAibG9hZF9hdmciLAorCQkJU1BMSVRfTlMoY2ZzX3JxLT5sb2FkX2F2ZykpOworCVNFUV9wcmludGYobSwgIiAgLiUtMzBzOiAlTGQuJTA2bGRcbiIsICJsb2FkX3BlcmlvZCIsCisJCQlTUExJVF9OUyhjZnNfcnEtPmxvYWRfcGVyaW9kKSk7CisJU0VRX3ByaW50ZihtLCAiICAuJS0zMHM6ICVsZFxuIiwgImxvYWRfY29udHJpYiIsCisJCQljZnNfcnEtPmxvYWRfY29udHJpYnV0aW9uKTsKKwlTRVFfcHJpbnRmKG0sICIgIC4lLTMwczogJWRcbiIsICJsb2FkX3RnIiwKKwkJCWF0b21pY19yZWFkKCZjZnNfcnEtPnRnLT5sb2FkX3dlaWdodCkpOwogI2VuZGlmCisKIAlwcmludF9jZnNfZ3JvdXBfc3RhdHMobSwgY3B1LCBjZnNfcnEtPnRnKTsKICNlbmRpZgogfQogCiB2b2lkIHByaW50X3J0X3JxKHN0cnVjdCBzZXFfZmlsZSAqbSwgaW50IGNwdSwgc3RydWN0IHJ0X3JxICpydF9ycSkKIHsKLSNpZiBkZWZpbmVkKENPTkZJR19DR1JPVVBfU0NIRUQpICYmIGRlZmluZWQoQ09ORklHX1JUX0dST1VQX1NDSEVEKQotCWNoYXIgcGF0aFsxMjhdOwotCXN0cnVjdCB0YXNrX2dyb3VwICp0ZyA9IHJ0X3JxLT50ZzsKLQotCXRhc2tfZ3JvdXBfcGF0aCh0ZywgcGF0aCwgc2l6ZW9mKHBhdGgpKTsKLQotCVNFUV9wcmludGYobSwgIlxucnRfcnFbJWRdOiVzXG4iLCBjcHUsIHBhdGgpOwotI2Vsc2UKIAlTRVFfcHJpbnRmKG0sICJcbnJ0X3JxWyVkXTpcbiIsIGNwdSk7Ci0jZW5kaWYKLQogCiAjZGVmaW5lIFAoeCkgXAogCVNFUV9wcmludGYobSwgIiAgLiUtMzBzOiAlTGRcbiIsICN4LCAobG9uZyBsb25nKShydF9ycS0+eCkpCkBAIC0yNDMsNiArMjA3LDggQEAKICN1bmRlZiBQCiB9CiAKK2V4dGVybiBfX3JlYWRfbW9zdGx5IGludCBzY2hlZF9jbG9ja19ydW5uaW5nOworCiBzdGF0aWMgdm9pZCBwcmludF9jcHUoc3RydWN0IHNlcV9maWxlICptLCBpbnQgY3B1KQogewogCXN0cnVjdCBycSAqcnEgPSBjcHVfcnEoY3B1KTsKQEAgLTMxNCwyMSArMjgwLDQyIEBACiAKIHN0YXRpYyBpbnQgc2NoZWRfZGVidWdfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0JdTY0IG5vdyA9IGt0aW1lX3RvX25zKGt0aW1lX2dldCgpKTsKKwl1NjQga3RpbWUsIHNjaGVkX2NsaywgY3B1X2NsazsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBjcHU7CiAKLQlTRVFfcHJpbnRmKG0sICJTY2hlZCBEZWJ1ZyBWZXJzaW9uOiB2MC4wOSwgJXMgJS4qc1xuIiwKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJa3RpbWUgPSBrdGltZV90b19ucyhrdGltZV9nZXQoKSk7CisJc2NoZWRfY2xrID0gc2NoZWRfY2xvY2soKTsKKwljcHVfY2xrID0gbG9jYWxfY2xvY2soKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlTRVFfcHJpbnRmKG0sICJTY2hlZCBEZWJ1ZyBWZXJzaW9uOiB2MC4xMCwgJXMgJS4qc1xuIiwKIAkJaW5pdF91dHNuYW1lKCktPnJlbGVhc2UsCiAJCShpbnQpc3RyY3Nwbihpbml0X3V0c25hbWUoKS0+dmVyc2lvbiwgIiAiKSwKIAkJaW5pdF91dHNuYW1lKCktPnZlcnNpb24pOwogCi0JU0VRX3ByaW50ZihtLCAibm93IGF0ICVMdS4lMDZsZCBtc2Vjc1xuIiwgU1BMSVRfTlMobm93KSk7CisjZGVmaW5lIFAoeCkgXAorCVNFUV9wcmludGYobSwgIiUtNDBzOiAlTGRcbiIsICN4LCAobG9uZyBsb25nKSh4KSkKKyNkZWZpbmUgUE4oeCkgXAorCVNFUV9wcmludGYobSwgIiUtNDBzOiAlTGQuJTA2bGRcbiIsICN4LCBTUExJVF9OUyh4KSkKKwlQTihrdGltZSk7CisJUE4oc2NoZWRfY2xrKTsKKwlQTihjcHVfY2xrKTsKKwlQKGppZmZpZXMpOworI2lmZGVmIENPTkZJR19IQVZFX1VOU1RBQkxFX1NDSEVEX0NMT0NLCisJUChzY2hlZF9jbG9ja19zdGFibGUpOworI2VuZGlmCisjdW5kZWYgUE4KKyN1bmRlZiBQCisKKwlTRVFfcHJpbnRmKG0sICJcbiIpOworCVNFUV9wcmludGYobSwgInN5c2N0bF9zY2hlZFxuIik7CiAKICNkZWZpbmUgUCh4KSBcCiAJU0VRX3ByaW50ZihtLCAiICAuJS00MHM6ICVMZFxuIiwgI3gsIChsb25nIGxvbmcpKHgpKQogI2RlZmluZSBQTih4KSBcCiAJU0VRX3ByaW50ZihtLCAiICAuJS00MHM6ICVMZC4lMDZsZFxuIiwgI3gsIFNQTElUX05TKHgpKQotCVAoamlmZmllcyk7CiAJUE4oc3lzY3RsX3NjaGVkX2xhdGVuY3kpOwogCVBOKHN5c2N0bF9zY2hlZF9taW5fZ3JhbnVsYXJpdHkpOwogCVBOKHN5c2N0bF9zY2hlZF93YWtldXBfZ3JhbnVsYXJpdHkpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkX2ZhaXIuYyBiL2tlcm5lbC9zY2hlZF9mYWlyLmMKaW5kZXggMDBlYmQ3Ni4uYzYyZWJhZSAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkX2ZhaXIuYworKysgYi9rZXJuZWwvc2NoZWRfZmFpci5jCkBAIC04OSw2ICs4OSwxMyBAQAogCiBjb25zdF9kZWJ1ZyB1bnNpZ25lZCBpbnQgc3lzY3RsX3NjaGVkX21pZ3JhdGlvbl9jb3N0ID0gNTAwMDAwVUw7CiAKKy8qCisgKiBUaGUgZXhwb25lbnRpYWwgc2xpZGluZyAgd2luZG93IG92ZXIgd2hpY2ggbG9hZCBpcyBhdmVyYWdlZCBmb3Igc2hhcmVzCisgKiBkaXN0cmlidXRpb24uCisgKiAoZGVmYXVsdDogMTBtc2VjKQorICovCit1bnNpZ25lZCBpbnQgX19yZWFkX21vc3RseSBzeXNjdGxfc2NoZWRfc2hhcmVzX3dpbmRvdyA9IDEwMDAwMDAwVUw7CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2NoZWRfY2xhc3MgZmFpcl9zY2hlZF9jbGFzczsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xNDMsNiArMTUwLDM2IEBACiAJcmV0dXJuIGNmc19ycS0+dGctPmNmc19ycVt0aGlzX2NwdV07CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBsaXN0X2FkZF9sZWFmX2Nmc19ycShzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEpCit7CisJaWYgKCFjZnNfcnEtPm9uX2xpc3QpIHsKKwkJLyoKKwkJICogRW5zdXJlIHdlIGVpdGhlciBhcHBlYXIgYmVmb3JlIG91ciBwYXJlbnQgKGlmIGFscmVhZHkKKwkJICogZW5xdWV1ZWQpIG9yIGZvcmNlIG91ciBwYXJlbnQgdG8gYXBwZWFyIGFmdGVyIHVzIHdoZW4gaXQgaXMKKwkJICogZW5xdWV1ZWQuICBUaGUgZmFjdCB0aGF0IHdlIGFsd2F5cyBlbnF1ZXVlIGJvdHRvbS11cAorCQkgKiByZWR1Y2VzIHRoaXMgdG8gdHdvIGNhc2VzLgorCQkgKi8KKwkJaWYgKGNmc19ycS0+dGctPnBhcmVudCAmJgorCQkgICAgY2ZzX3JxLT50Zy0+cGFyZW50LT5jZnNfcnFbY3B1X29mKHJxX29mKGNmc19ycSkpXS0+b25fbGlzdCkgeworCQkJbGlzdF9hZGRfcmN1KCZjZnNfcnEtPmxlYWZfY2ZzX3JxX2xpc3QsCisJCQkJJnJxX29mKGNmc19ycSktPmxlYWZfY2ZzX3JxX2xpc3QpOworCQl9IGVsc2UgeworCQkJbGlzdF9hZGRfdGFpbF9yY3UoJmNmc19ycS0+bGVhZl9jZnNfcnFfbGlzdCwKKwkJCQkmcnFfb2YoY2ZzX3JxKS0+bGVhZl9jZnNfcnFfbGlzdCk7CisJCX0KKworCQljZnNfcnEtPm9uX2xpc3QgPSAxOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIGxpc3RfZGVsX2xlYWZfY2ZzX3JxKHN0cnVjdCBjZnNfcnEgKmNmc19ycSkKK3sKKwlpZiAoY2ZzX3JxLT5vbl9saXN0KSB7CisJCWxpc3RfZGVsX3JjdSgmY2ZzX3JxLT5sZWFmX2Nmc19ycV9saXN0KTsKKwkJY2ZzX3JxLT5vbl9saXN0ID0gMDsKKwl9Cit9CisKIC8qIEl0ZXJhdGUgdGhyJyBhbGwgbGVhZiBjZnNfcnEncyBvbiBhIHJ1bnF1ZXVlICovCiAjZGVmaW5lIGZvcl9lYWNoX2xlYWZfY2ZzX3JxKHJxLCBjZnNfcnEpIFwKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShjZnNfcnEsICZycS0+bGVhZl9jZnNfcnFfbGlzdCwgbGVhZl9jZnNfcnFfbGlzdCkKQEAgLTI0Niw2ICsyODMsMTQgQEAKIAlyZXR1cm4gJmNwdV9ycSh0aGlzX2NwdSktPmNmczsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGxpc3RfYWRkX2xlYWZfY2ZzX3JxKHN0cnVjdCBjZnNfcnEgKmNmc19ycSkKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIGxpc3RfZGVsX2xlYWZfY2ZzX3JxKHN0cnVjdCBjZnNfcnEgKmNmc19ycSkKK3sKK30KKwogI2RlZmluZSBmb3JfZWFjaF9sZWFmX2Nmc19ycShycSwgY2ZzX3JxKSBcCiAJCWZvciAoY2ZzX3JxID0gJnJxLT5jZnM7IGNmc19ycTsgY2ZzX3JxID0gTlVMTCkKIApAQCAtNDE3LDcgKzQ2Miw2IEBACiAJV1JUX1NZU0NUTChzY2hlZF9taW5fZ3JhbnVsYXJpdHkpOwogCVdSVF9TWVNDVEwoc2NoZWRfbGF0ZW5jeSk7CiAJV1JUX1NZU0NUTChzY2hlZF93YWtldXBfZ3JhbnVsYXJpdHkpOwotCVdSVF9TWVNDVEwoc2NoZWRfc2hhcmVzX3JhdGVsaW1pdCk7CiAjdW5kZWYgV1JUX1NZU0NUTAogCiAJcmV0dXJuIDA7CkBAIC00OTUsNiArNTM5LDkgQEAKIAlyZXR1cm4gY2FsY19kZWx0YV9mYWlyKHNjaGVkX3NsaWNlKGNmc19ycSwgc2UpLCBzZSk7CiB9CiAKK3N0YXRpYyB2b2lkIHVwZGF0ZV9jZnNfbG9hZChzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEsIGludCBnbG9iYWxfdXBkYXRlKTsKK3N0YXRpYyB2b2lkIHVwZGF0ZV9jZnNfc2hhcmVzKHN0cnVjdCBjZnNfcnEgKmNmc19ycSwgbG9uZyB3ZWlnaHRfZGVsdGEpOworCiAvKgogICogVXBkYXRlIHRoZSBjdXJyZW50IHRhc2sncyBydW50aW1lIHN0YXRpc3RpY3MuIFNraXAgY3VycmVudCB0YXNrcyB0aGF0CiAgKiBhcmUgbm90IGluIG91ciBzY2hlZHVsaW5nIGNsYXNzLgpAQCAtNTE0LDYgKzU2MSwxMCBAQAogCiAJY3Vyci0+dnJ1bnRpbWUgKz0gZGVsdGFfZXhlY193ZWlnaHRlZDsKIAl1cGRhdGVfbWluX3ZydW50aW1lKGNmc19ycSk7CisKKyNpZiBkZWZpbmVkIENPTkZJR19TTVAgJiYgZGVmaW5lZCBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRAorCWNmc19ycS0+bG9hZF91bmFjY19leGVjX3RpbWUgKz0gZGVsdGFfZXhlYzsKKyNlbmRpZgogfQogCiBzdGF0aWMgdm9pZCB1cGRhdGVfY3VycihzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEpCkBAIC02MzMsNyArNjg0LDYgQEAKIAkJbGlzdF9hZGQoJnNlLT5ncm91cF9ub2RlLCAmY2ZzX3JxLT50YXNrcyk7CiAJfQogCWNmc19ycS0+bnJfcnVubmluZysrOwotCXNlLT5vbl9ycSA9IDE7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC02NDcsOSArNjk3LDE0MCBAQAogCQlsaXN0X2RlbF9pbml0KCZzZS0+Z3JvdXBfbm9kZSk7CiAJfQogCWNmc19ycS0+bnJfcnVubmluZy0tOwotCXNlLT5vbl9ycSA9IDA7CiB9CiAKKyNpZiBkZWZpbmVkIENPTkZJR19TTVAgJiYgZGVmaW5lZCBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRAorc3RhdGljIHZvaWQgdXBkYXRlX2Nmc19ycV9sb2FkX2NvbnRyaWJ1dGlvbihzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEsCisJCQkJCSAgICBpbnQgZ2xvYmFsX3VwZGF0ZSkKK3sKKwlzdHJ1Y3QgdGFza19ncm91cCAqdGcgPSBjZnNfcnEtPnRnOworCWxvbmcgbG9hZF9hdmc7CisKKwlsb2FkX2F2ZyA9IGRpdjY0X3U2NChjZnNfcnEtPmxvYWRfYXZnLCBjZnNfcnEtPmxvYWRfcGVyaW9kKzEpOworCWxvYWRfYXZnIC09IGNmc19ycS0+bG9hZF9jb250cmlidXRpb247CisKKwlpZiAoZ2xvYmFsX3VwZGF0ZSB8fCBhYnMobG9hZF9hdmcpID4gY2ZzX3JxLT5sb2FkX2NvbnRyaWJ1dGlvbiAvIDgpIHsKKwkJYXRvbWljX2FkZChsb2FkX2F2ZywgJnRnLT5sb2FkX3dlaWdodCk7CisJCWNmc19ycS0+bG9hZF9jb250cmlidXRpb24gKz0gbG9hZF9hdmc7CisJfQorfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfY2ZzX2xvYWQoc3RydWN0IGNmc19ycSAqY2ZzX3JxLCBpbnQgZ2xvYmFsX3VwZGF0ZSkKK3sKKwl1NjQgcGVyaW9kID0gc3lzY3RsX3NjaGVkX3NoYXJlc193aW5kb3c7CisJdTY0IG5vdywgZGVsdGE7CisJdW5zaWduZWQgbG9uZyBsb2FkID0gY2ZzX3JxLT5sb2FkLndlaWdodDsKKworCWlmICghY2ZzX3JxKQorCQlyZXR1cm47CisKKwlub3cgPSBycV9vZihjZnNfcnEpLT5jbG9jazsKKwlkZWx0YSA9IG5vdyAtIGNmc19ycS0+bG9hZF9zdGFtcDsKKworCS8qIHRydW5jYXRlIGxvYWQgaGlzdG9yeSBhdCA0IGlkbGUgcGVyaW9kcyAqLworCWlmIChjZnNfcnEtPmxvYWRfc3RhbXAgPiBjZnNfcnEtPmxvYWRfbGFzdCAmJgorCSAgICBub3cgLSBjZnNfcnEtPmxvYWRfbGFzdCA+IDQgKiBwZXJpb2QpIHsKKwkJY2ZzX3JxLT5sb2FkX3BlcmlvZCA9IDA7CisJCWNmc19ycS0+bG9hZF9hdmcgPSAwOworCX0KKworCWNmc19ycS0+bG9hZF9zdGFtcCA9IG5vdzsKKwljZnNfcnEtPmxvYWRfdW5hY2NfZXhlY190aW1lID0gMDsKKwljZnNfcnEtPmxvYWRfcGVyaW9kICs9IGRlbHRhOworCWlmIChsb2FkKSB7CisJCWNmc19ycS0+bG9hZF9sYXN0ID0gbm93OworCQljZnNfcnEtPmxvYWRfYXZnICs9IGRlbHRhICogbG9hZDsKKwl9CisKKwkvKiBjb25zaWRlciB1cGRhdGluZyBsb2FkIGNvbnRyaWJ1dGlvbiBvbiBlYWNoIGZvbGQgb3IgdHJ1bmNhdGUgKi8KKwlpZiAoZ2xvYmFsX3VwZGF0ZSB8fCBjZnNfcnEtPmxvYWRfcGVyaW9kID4gcGVyaW9kCisJICAgIHx8ICFjZnNfcnEtPmxvYWRfcGVyaW9kKQorCQl1cGRhdGVfY2ZzX3JxX2xvYWRfY29udHJpYnV0aW9uKGNmc19ycSwgZ2xvYmFsX3VwZGF0ZSk7CisKKwl3aGlsZSAoY2ZzX3JxLT5sb2FkX3BlcmlvZCA+IHBlcmlvZCkgeworCQkvKgorCQkgKiBJbmxpbmUgYXNzZW1ibHkgcmVxdWlyZWQgdG8gcHJldmVudCB0aGUgY29tcGlsZXIKKwkJICogb3B0aW1pc2luZyB0aGlzIGxvb3AgaW50byBhIGRpdm1vZCBjYWxsLgorCQkgKiBTZWUgX19pdGVyX2Rpdl91NjRfcmVtKCkgZm9yIGFub3RoZXIgZXhhbXBsZSBvZiB0aGlzLgorCQkgKi8KKwkJYXNtKCIiIDogIitybSIgKGNmc19ycS0+bG9hZF9wZXJpb2QpKTsKKwkJY2ZzX3JxLT5sb2FkX3BlcmlvZCAvPSAyOworCQljZnNfcnEtPmxvYWRfYXZnIC89IDI7CisJfQorCisJaWYgKCFjZnNfcnEtPmN1cnIgJiYgIWNmc19ycS0+bnJfcnVubmluZyAmJiAhY2ZzX3JxLT5sb2FkX2F2ZykKKwkJbGlzdF9kZWxfbGVhZl9jZnNfcnEoY2ZzX3JxKTsKK30KKworc3RhdGljIHZvaWQgcmV3ZWlnaHRfZW50aXR5KHN0cnVjdCBjZnNfcnEgKmNmc19ycSwgc3RydWN0IHNjaGVkX2VudGl0eSAqc2UsCisJCQkgICAgdW5zaWduZWQgbG9uZyB3ZWlnaHQpCit7CisJaWYgKHNlLT5vbl9ycSkgeworCQkvKiBjb21taXQgb3V0c3RhbmRpbmcgZXhlY3V0aW9uIHRpbWUgKi8KKwkJaWYgKGNmc19ycS0+Y3VyciA9PSBzZSkKKwkJCXVwZGF0ZV9jdXJyKGNmc19ycSk7CisJCWFjY291bnRfZW50aXR5X2RlcXVldWUoY2ZzX3JxLCBzZSk7CisJfQorCisJdXBkYXRlX2xvYWRfc2V0KCZzZS0+bG9hZCwgd2VpZ2h0KTsKKworCWlmIChzZS0+b25fcnEpCisJCWFjY291bnRfZW50aXR5X2VucXVldWUoY2ZzX3JxLCBzZSk7Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZV9jZnNfc2hhcmVzKHN0cnVjdCBjZnNfcnEgKmNmc19ycSwgbG9uZyB3ZWlnaHRfZGVsdGEpCit7CisJc3RydWN0IHRhc2tfZ3JvdXAgKnRnOworCXN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlOworCWxvbmcgbG9hZF93ZWlnaHQsIGxvYWQsIHNoYXJlczsKKworCWlmICghY2ZzX3JxKQorCQlyZXR1cm47CisKKwl0ZyA9IGNmc19ycS0+dGc7CisJc2UgPSB0Zy0+c2VbY3B1X29mKHJxX29mKGNmc19ycSkpXTsKKwlpZiAoIXNlKQorCQlyZXR1cm47CisKKwlsb2FkID0gY2ZzX3JxLT5sb2FkLndlaWdodCArIHdlaWdodF9kZWx0YTsKKworCWxvYWRfd2VpZ2h0ID0gYXRvbWljX3JlYWQoJnRnLT5sb2FkX3dlaWdodCk7CisJbG9hZF93ZWlnaHQgLT0gY2ZzX3JxLT5sb2FkX2NvbnRyaWJ1dGlvbjsKKwlsb2FkX3dlaWdodCArPSBsb2FkOworCisJc2hhcmVzID0gKHRnLT5zaGFyZXMgKiBsb2FkKTsKKwlpZiAobG9hZF93ZWlnaHQpCisJCXNoYXJlcyAvPSBsb2FkX3dlaWdodDsKKworCWlmIChzaGFyZXMgPCBNSU5fU0hBUkVTKQorCQlzaGFyZXMgPSBNSU5fU0hBUkVTOworCWlmIChzaGFyZXMgPiB0Zy0+c2hhcmVzKQorCQlzaGFyZXMgPSB0Zy0+c2hhcmVzOworCisJcmV3ZWlnaHRfZW50aXR5KGNmc19ycV9vZihzZSksIHNlLCBzaGFyZXMpOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfZW50aXR5X3NoYXJlc190aWNrKHN0cnVjdCBjZnNfcnEgKmNmc19ycSkKK3sKKwlpZiAoY2ZzX3JxLT5sb2FkX3VuYWNjX2V4ZWNfdGltZSA+IHN5c2N0bF9zY2hlZF9zaGFyZXNfd2luZG93KSB7CisJCXVwZGF0ZV9jZnNfbG9hZChjZnNfcnEsIDApOworCQl1cGRhdGVfY2ZzX3NoYXJlcyhjZnNfcnEsIDApOworCX0KK30KKyNlbHNlIC8qIENPTkZJR19GQUlSX0dST1VQX1NDSEVEICovCitzdGF0aWMgdm9pZCB1cGRhdGVfY2ZzX2xvYWQoc3RydWN0IGNmc19ycSAqY2ZzX3JxLCBpbnQgZ2xvYmFsX3VwZGF0ZSkKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9jZnNfc2hhcmVzKHN0cnVjdCBjZnNfcnEgKmNmc19ycSwgbG9uZyB3ZWlnaHRfZGVsdGEpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfZW50aXR5X3NoYXJlc190aWNrKHN0cnVjdCBjZnNfcnEgKmNmc19ycSkKK3sKK30KKyNlbmRpZiAvKiBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRCAqLworCiBzdGF0aWMgdm9pZCBlbnF1ZXVlX3NsZWVwZXIoc3RydWN0IGNmc19ycSAqY2ZzX3JxLCBzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSkKIHsKICNpZmRlZiBDT05GSUdfU0NIRURTVEFUUwpAQCAtNzcxLDYgKzk1Miw4IEBACiAJICogVXBkYXRlIHJ1bi10aW1lIHN0YXRpc3RpY3Mgb2YgdGhlICdjdXJyZW50Jy4KIAkgKi8KIAl1cGRhdGVfY3VycihjZnNfcnEpOworCXVwZGF0ZV9jZnNfbG9hZChjZnNfcnEsIDApOworCXVwZGF0ZV9jZnNfc2hhcmVzKGNmc19ycSwgc2UtPmxvYWQud2VpZ2h0KTsKIAlhY2NvdW50X2VudGl0eV9lbnF1ZXVlKGNmc19ycSwgc2UpOwogCiAJaWYgKGZsYWdzICYgRU5RVUVVRV9XQUtFVVApIHsKQEAgLTc4Miw2ICs5NjUsMTAgQEAKIAljaGVja19zcHJlYWQoY2ZzX3JxLCBzZSk7CiAJaWYgKHNlICE9IGNmc19ycS0+Y3VycikKIAkJX19lbnF1ZXVlX2VudGl0eShjZnNfcnEsIHNlKTsKKwlzZS0+b25fcnEgPSAxOworCisJaWYgKGNmc19ycS0+bnJfcnVubmluZyA9PSAxKQorCQlsaXN0X2FkZF9sZWFmX2Nmc19ycShjZnNfcnEpOwogfQogCiBzdGF0aWMgdm9pZCBfX2NsZWFyX2J1ZGRpZXMoc3RydWN0IGNmc19ycSAqY2ZzX3JxLCBzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSkKQEAgLTgyNSw4ICsxMDEyLDExIEBACiAKIAlpZiAoc2UgIT0gY2ZzX3JxLT5jdXJyKQogCQlfX2RlcXVldWVfZW50aXR5KGNmc19ycSwgc2UpOworCXNlLT5vbl9ycSA9IDA7CisJdXBkYXRlX2Nmc19sb2FkKGNmc19ycSwgMCk7CiAJYWNjb3VudF9lbnRpdHlfZGVxdWV1ZShjZnNfcnEsIHNlKTsKIAl1cGRhdGVfbWluX3ZydW50aW1lKGNmc19ycSk7CisJdXBkYXRlX2Nmc19zaGFyZXMoY2ZzX3JxLCAwKTsKIAogCS8qCiAJICogTm9ybWFsaXplIHRoZSBlbnRpdHkgYWZ0ZXIgdXBkYXRpbmcgdGhlIG1pbl92cnVudGltZSBiZWNhdXNlIHRoZQpAQCAtOTU1LDYgKzExNDUsMTEgQEAKIAkgKi8KIAl1cGRhdGVfY3VycihjZnNfcnEpOwogCisJLyoKKwkgKiBVcGRhdGUgc2hhcmUgYWNjb3VudGluZyBmb3IgbG9uZy1ydW5uaW5nIGVudGl0aWVzLgorCSAqLworCXVwZGF0ZV9lbnRpdHlfc2hhcmVzX3RpY2soY2ZzX3JxKTsKKwogI2lmZGVmIENPTkZJR19TQ0hFRF9IUlRJQ0sKIAkvKgogCSAqIHF1ZXVlZCB0aWNrcyBhcmUgc2NoZWR1bGVkIHRvIG1hdGNoIHRoZSBzbGljZSwgc28gZG9uJ3QgYm90aGVyCkBAIC0xMDU1LDYgKzEyNTAsMTMgQEAKIAkJZmxhZ3MgPSBFTlFVRVVFX1dBS0VVUDsKIAl9CiAKKwlmb3JfZWFjaF9zY2hlZF9lbnRpdHkoc2UpIHsKKwkJc3RydWN0IGNmc19ycSAqY2ZzX3JxID0gY2ZzX3JxX29mKHNlKTsKKworCQl1cGRhdGVfY2ZzX2xvYWQoY2ZzX3JxLCAwKTsKKwkJdXBkYXRlX2Nmc19zaGFyZXMoY2ZzX3JxLCAwKTsKKwl9CisKIAlocnRpY2tfdXBkYXRlKHJxKTsKIH0KIApAQCAtMTA3MSwxMiArMTI3MywyMCBAQAogCWZvcl9lYWNoX3NjaGVkX2VudGl0eShzZSkgewogCQljZnNfcnEgPSBjZnNfcnFfb2Yoc2UpOwogCQlkZXF1ZXVlX2VudGl0eShjZnNfcnEsIHNlLCBmbGFncyk7CisKIAkJLyogRG9uJ3QgZGVxdWV1ZSBwYXJlbnQgaWYgaXQgaGFzIG90aGVyIGVudGl0aWVzIGJlc2lkZXMgdXMgKi8KIAkJaWYgKGNmc19ycS0+bG9hZC53ZWlnaHQpCiAJCQlicmVhazsKIAkJZmxhZ3MgfD0gREVRVUVVRV9TTEVFUDsKIAl9CiAKKwlmb3JfZWFjaF9zY2hlZF9lbnRpdHkoc2UpIHsKKwkJc3RydWN0IGNmc19ycSAqY2ZzX3JxID0gY2ZzX3JxX29mKHNlKTsKKworCQl1cGRhdGVfY2ZzX2xvYWQoY2ZzX3JxLCAwKTsKKwkJdXBkYXRlX2Nmc19zaGFyZXMoY2ZzX3JxLCAwKTsKKwl9CisKIAlocnRpY2tfdXBkYXRlKHJxKTsKIH0KIApAQCAtMTE0Myw1MSArMTM1MywyMCBAQAogICogQWRkaW5nIGxvYWQgdG8gYSBncm91cCBkb2Vzbid0IG1ha2UgYSBncm91cCBoZWF2aWVyLCBidXQgY2FuIGNhdXNlIG1vdmVtZW50CiAgKiBvZiBncm91cCBzaGFyZXMgYmV0d2VlbiBjcHVzLiBBc3N1bWluZyB0aGUgc2hhcmVzIHdlcmUgcGVyZmVjdGx5IGFsaWduZWQgb25lCiAgKiBjYW4gY2FsY3VsYXRlIHRoZSBzaGlmdCBpbiBzaGFyZXMuCi0gKgotICogVGhlIHByb2JsZW0gaXMgdGhhdCBwZXJmZWN0bHkgYWxpZ25pbmcgdGhlIHNoYXJlcyBpcyByYXRoZXIgZXhwZW5zaXZlLCBoZW5jZQotICogd2UgdHJ5IHRvIGF2b2lkIGRvaW5nIHRoYXQgdG9vIG9mdGVuIC0gc2VlIHVwZGF0ZV9zaGFyZXMoKSwgd2hpY2ggcmF0ZWxpbWl0cwotICogdGhpcyBjaGFuZ2UuCi0gKgotICogV2UgY29tcGVuc2F0ZSB0aGlzIGJ5IG5vdCBvbmx5IHRha2luZyB0aGUgY3VycmVudCBkZWx0YSBpbnRvIGFjY291bnQsIGJ1dAotICogYWxzbyBjb25zaWRlcmluZyB0aGUgZGVsdGEgYmV0d2VlbiB3aGVuIHRoZSBzaGFyZXMgd2VyZSBsYXN0IGFkanVzdGVkIGFuZAotICogbm93LgotICoKLSAqIFdlIHN0aWxsIHNhdyBhIHBlcmZvcm1hbmNlIGRpcCwgc29tZSB0cmFjaW5nIGxlYXJuZWQgdXMgdGhhdCBiZXR3ZWVuCi0gKiBjZ3JvdXA6LyBhbmQgY2dyb3VwOi9mb28gYmFsYW5jaW5nIHRoZSBudW1iZXIgb2YgYWZmaW5lIHdha2V1cHMgaW5jcmVhc2VkCi0gKiBzaWduaWZpY2FudGx5LiBUaGVyZWZvcmUgdHJ5IHRvIGJpYXMgdGhlIGVycm9yIGluIGRpcmVjdGlvbiBvZiBmYWlsaW5nCi0gKiB0aGUgYWZmaW5lIHdha2V1cC4KLSAqCiAgKi8KLXN0YXRpYyBsb25nIGVmZmVjdGl2ZV9sb2FkKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgaW50IGNwdSwKLQkJbG9uZyB3bCwgbG9uZyB3ZykKK3N0YXRpYyBsb25nIGVmZmVjdGl2ZV9sb2FkKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgaW50IGNwdSwgbG9uZyB3bCwgbG9uZyB3ZykKIHsKIAlzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSA9IHRnLT5zZVtjcHVdOwogCiAJaWYgKCF0Zy0+cGFyZW50KQogCQlyZXR1cm4gd2w7CiAKLQkvKgotCSAqIEJ5IG5vdCB0YWtpbmcgdGhlIGRlY3JlYXNlIG9mIHNoYXJlcyBvbiB0aGUgb3RoZXIgY3B1IGludG8KLQkgKiBhY2NvdW50IG91ciBlcnJvciBsZWFucyB0b3dhcmRzIHJlZHVjaW5nIHRoZSBhZmZpbmUgd2FrZXVwcy4KLQkgKi8KLQlpZiAoIXdsICYmIHNjaGVkX2ZlYXQoQVNZTV9FRkZfTE9BRCkpCi0JCXJldHVybiB3bDsKLQogCWZvcl9lYWNoX3NjaGVkX2VudGl0eShzZSkgewogCQlsb25nIFMsIHJ3LCBzLCBhLCBiOwotCQlsb25nIG1vcmVfdzsKLQotCQkvKgotCQkgKiBJbnN0ZWFkIG9mIHVzaW5nIHRoaXMgaW5jcmVtZW50LCBhbHNvIGFkZCB0aGUgZGlmZmVyZW5jZQotCQkgKiBiZXR3ZWVuIHdoZW4gdGhlIHNoYXJlcyB3ZXJlIGxhc3QgdXBkYXRlZCBhbmQgbm93LgotCQkgKi8KLQkJbW9yZV93ID0gc2UtPm15X3EtPmxvYWQud2VpZ2h0IC0gc2UtPm15X3EtPnJxX3dlaWdodDsKLQkJd2wgKz0gbW9yZV93OwotCQl3ZyArPSBtb3JlX3c7CiAKIAkJUyA9IHNlLT5teV9xLT50Zy0+c2hhcmVzOwotCQlzID0gc2UtPm15X3EtPnNoYXJlczsKLQkJcncgPSBzZS0+bXlfcS0+cnFfd2VpZ2h0OworCQlzID0gc2UtPmxvYWQud2VpZ2h0OworCQlydyA9IHNlLT5teV9xLT5sb2FkLndlaWdodDsKIAogCQlhID0gUyoocncgKyB3bCk7CiAJCWIgPSBTKnJ3ICsgcyp3ZzsKQEAgLTE1MDgsMjMgKzE2ODcsNiBAQAogCQkJc2QgPSB0bXA7CiAJfQogCi0jaWZkZWYgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQKLQlpZiAoc2NoZWRfZmVhdChMQl9TSEFSRVNfVVBEQVRFKSkgewotCQkvKgotCQkgKiBQaWNrIHRoZSBsYXJnZXN0IGRvbWFpbiB0byB1cGRhdGUgc2hhcmVzIG92ZXIKLQkJICovCi0JCXRtcCA9IHNkOwotCQlpZiAoYWZmaW5lX3NkICYmICghdG1wIHx8IGFmZmluZV9zZC0+c3Bhbl93ZWlnaHQgPiBzZC0+c3Bhbl93ZWlnaHQpKQotCQkJdG1wID0gYWZmaW5lX3NkOwotCi0JCWlmICh0bXApIHsKLQkJCXJhd19zcGluX3VubG9jaygmcnEtPmxvY2spOwotCQkJdXBkYXRlX3NoYXJlcyh0bXApOwotCQkJcmF3X3NwaW5fbG9jaygmcnEtPmxvY2spOwotCQl9Ci0JfQotI2VuZGlmCi0KIAlpZiAoYWZmaW5lX3NkKSB7CiAJCWlmIChjcHUgPT0gcHJldl9jcHUgfHwgd2FrZV9hZmZpbmUoYWZmaW5lX3NkLCBwLCBzeW5jKSkKIAkJCXJldHVybiBzZWxlY3RfaWRsZV9zaWJsaW5nKHAsIGNwdSk7CkBAIC0xOTA5LDYgKzIwNzEsNDggQEAKIH0KIAogI2lmZGVmIENPTkZJR19GQUlSX0dST1VQX1NDSEVECisvKgorICogdXBkYXRlIHRnLT5sb2FkX3dlaWdodCBieSBmb2xkaW5nIHRoaXMgY3B1J3MgbG9hZF9hdmcKKyAqLworc3RhdGljIGludCB1cGRhdGVfc2hhcmVzX2NwdShzdHJ1Y3QgdGFza19ncm91cCAqdGcsIGludCBjcHUpCit7CisJc3RydWN0IGNmc19ycSAqY2ZzX3JxOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHJxICpycTsKKworCWlmICghdGctPnNlW2NwdV0pCisJCXJldHVybiAwOworCisJcnEgPSBjcHVfcnEoY3B1KTsKKwljZnNfcnEgPSB0Zy0+Y2ZzX3JxW2NwdV07CisKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnJxLT5sb2NrLCBmbGFncyk7CisKKwl1cGRhdGVfcnFfY2xvY2socnEpOworCXVwZGF0ZV9jZnNfbG9hZChjZnNfcnEsIDEpOworCisJLyoKKwkgKiBXZSBuZWVkIHRvIHVwZGF0ZSBzaGFyZXMgYWZ0ZXIgdXBkYXRpbmcgdGctPmxvYWRfd2VpZ2h0IGluCisJICogb3JkZXIgdG8gYWRqdXN0IHRoZSB3ZWlnaHQgb2YgZ3JvdXBzIHdpdGggbG9uZyBydW5uaW5nIHRhc2tzLgorCSAqLworCXVwZGF0ZV9jZnNfc2hhcmVzKGNmc19ycSwgMCk7CisKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnEtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfc2hhcmVzKGludCBjcHUpCit7CisJc3RydWN0IGNmc19ycSAqY2ZzX3JxOworCXN0cnVjdCBycSAqcnEgPSBjcHVfcnEoY3B1KTsKKworCXJjdV9yZWFkX2xvY2soKTsKKwlmb3JfZWFjaF9sZWFmX2Nmc19ycShycSwgY2ZzX3JxKQorCQl1cGRhdGVfc2hhcmVzX2NwdShjZnNfcnEtPnRnLCBjcHUpOworCXJjdV9yZWFkX3VubG9jaygpOworfQorCiBzdGF0aWMgdW5zaWduZWQgbG9uZwogbG9hZF9iYWxhbmNlX2ZhaXIoc3RydWN0IHJxICp0aGlzX3JxLCBpbnQgdGhpc19jcHUsIHN0cnVjdCBycSAqYnVzaWVzdCwKIAkJICB1bnNpZ25lZCBsb25nIG1heF9sb2FkX21vdmUsCkBAIC0xOTU2LDYgKzIxNjAsMTAgQEAKIAlyZXR1cm4gbWF4X2xvYWRfbW92ZSAtIHJlbV9sb2FkX21vdmU7CiB9CiAjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9zaGFyZXMoaW50IGNwdSkKK3sKK30KKwogc3RhdGljIHVuc2lnbmVkIGxvbmcKIGxvYWRfYmFsYW5jZV9mYWlyKHN0cnVjdCBycSAqdGhpc19ycSwgaW50IHRoaXNfY3B1LCBzdHJ1Y3QgcnEgKmJ1c2llc3QsCiAJCSAgdW5zaWduZWQgbG9uZyBtYXhfbG9hZF9tb3ZlLApAQCAtMzAzMiw3ICszMjQwLDYgQEAKIAlzY2hlZHN0YXRfaW5jKHNkLCBsYl9jb3VudFtpZGxlXSk7CiAKIHJlZG86Ci0JdXBkYXRlX3NoYXJlcyhzZCk7CiAJZ3JvdXAgPSBmaW5kX2J1c2llc3RfZ3JvdXAoc2QsIHRoaXNfY3B1LCAmaW1iYWxhbmNlLCBpZGxlLCAmc2RfaWRsZSwKIAkJCQkgICBjcHVzLCBiYWxhbmNlKTsKIApAQCAtMzE3NCw4ICszMzgxLDYgQEAKIAllbHNlCiAJCWxkX21vdmVkID0gMDsKIG91dDoKLQlpZiAobGRfbW92ZWQpCi0JCXVwZGF0ZV9zaGFyZXMoc2QpOwogCXJldHVybiBsZF9tb3ZlZDsKIH0KIApAQCAtMzE5OSw2ICszNDA0LDcgQEAKIAkgKi8KIAlyYXdfc3Bpbl91bmxvY2soJnRoaXNfcnEtPmxvY2spOwogCisJdXBkYXRlX3NoYXJlcyh0aGlzX2NwdSk7CiAJZm9yX2VhY2hfZG9tYWluKHRoaXNfY3B1LCBzZCkgewogCQl1bnNpZ25lZCBsb25nIGludGVydmFsOwogCQlpbnQgYmFsYW5jZSA9IDE7CkBAIC0zNTY5LDYgKzM3NzUsOCBAQAogCWludCB1cGRhdGVfbmV4dF9iYWxhbmNlID0gMDsKIAlpbnQgbmVlZF9zZXJpYWxpemU7CiAKKwl1cGRhdGVfc2hhcmVzKGNwdSk7CisKIAlmb3JfZWFjaF9kb21haW4oY3B1LCBzZCkgewogCQlpZiAoIShzZC0+ZmxhZ3MgJiBTRF9MT0FEX0JBTEFOQ0UpKQogCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWRfZmVhdHVyZXMuaCBiL2tlcm5lbC9zY2hlZF9mZWF0dXJlcy5oCmluZGV4IDE4NWY5MjAuLjY4ZTY5YWMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZF9mZWF0dXJlcy5oCisrKyBiL2tlcm5lbC9zY2hlZF9mZWF0dXJlcy5oCkBAIC01Miw4ICs1Miw2IEBACiBTQ0hFRF9GRUFUKEhSVElDSywgMCkKIFNDSEVEX0ZFQVQoRE9VQkxFX1RJQ0ssIDApCiBTQ0hFRF9GRUFUKExCX0JJQVMsIDEpCi1TQ0hFRF9GRUFUKExCX1NIQVJFU19VUERBVEUsIDEpCi1TQ0hFRF9GRUFUKEFTWU1fRUZGX0xPQUQsIDEpCiAKIC8qCiAgKiBTcGluLXdhaXQgb24gbXV0ZXggYWNxdWlzaXRpb24gd2hlbiB0aGUgbXV0ZXggb3duZXIgaXMgcnVubmluZyBvbgpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkX3J0LmMgYi9rZXJuZWwvc2NoZWRfcnQuYwppbmRleCBiZWE3ZDc5Li5jOTE0ZWM3IDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWRfcnQuYworKysgYi9rZXJuZWwvc2NoZWRfcnQuYwpAQCAtMTgzLDYgKzE4MywxNyBAQAogCXJldHVybiBrdGltZV90b19ucyhydF9ycS0+dGctPnJ0X2JhbmR3aWR0aC5ydF9wZXJpb2QpOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgbGlzdF9hZGRfbGVhZl9ydF9ycShzdHJ1Y3QgcnRfcnEgKnJ0X3JxKQoreworCWxpc3RfYWRkX3JjdSgmcnRfcnEtPmxlYWZfcnRfcnFfbGlzdCwKKwkJCSZycV9vZl9ydF9ycShydF9ycSktPmxlYWZfcnRfcnFfbGlzdCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBsaXN0X2RlbF9sZWFmX3J0X3JxKHN0cnVjdCBydF9ycSAqcnRfcnEpCit7CisJbGlzdF9kZWxfcmN1KCZydF9ycS0+bGVhZl9ydF9ycV9saXN0KTsKK30KKwogI2RlZmluZSBmb3JfZWFjaF9sZWFmX3J0X3JxKHJ0X3JxLCBycSkgXAogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHJ0X3JxLCAmcnEtPmxlYWZfcnRfcnFfbGlzdCwgbGVhZl9ydF9ycV9saXN0KQogCkBAIC0yNzYsNiArMjg3LDE0IEBACiAJcmV0dXJuIGt0aW1lX3RvX25zKGRlZl9ydF9iYW5kd2lkdGgucnRfcGVyaW9kKTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGxpc3RfYWRkX2xlYWZfcnRfcnEoc3RydWN0IHJ0X3JxICpydF9ycSkKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIGxpc3RfZGVsX2xlYWZfcnRfcnEoc3RydWN0IHJ0X3JxICpydF9ycSkKK3sKK30KKwogI2RlZmluZSBmb3JfZWFjaF9sZWFmX3J0X3JxKHJ0X3JxLCBycSkgXAogCWZvciAocnRfcnEgPSAmcnEtPnJ0OyBydF9ycTsgcnRfcnEgPSBOVUxMKQogCkBAIC04MjUsNiArODQ0LDkgQEAKIAlpZiAoZ3JvdXBfcnEgJiYgKHJ0X3JxX3Rocm90dGxlZChncm91cF9ycSkgfHwgIWdyb3VwX3JxLT5ydF9ucl9ydW5uaW5nKSkKIAkJcmV0dXJuOwogCisJaWYgKCFydF9ycS0+cnRfbnJfcnVubmluZykKKwkJbGlzdF9hZGRfbGVhZl9ydF9ycShydF9ycSk7CisKIAlpZiAoaGVhZCkKIAkJbGlzdF9hZGQoJnJ0X3NlLT5ydW5fbGlzdCwgcXVldWUpOwogCWVsc2UKQEAgLTg0NCw2ICs4NjYsOCBAQAogCQlfX2NsZWFyX2JpdChydF9zZV9wcmlvKHJ0X3NlKSwgYXJyYXktPmJpdG1hcCk7CiAKIAlkZWNfcnRfdGFza3MocnRfc2UsIHJ0X3JxKTsKKwlpZiAoIXJ0X3JxLT5ydF9ucl9ydW5uaW5nKQorCQlsaXN0X2RlbF9sZWFmX3J0X3JxKHJ0X3JxKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2tlcm5lbC9zb2Z0aXJxLmMgYi9rZXJuZWwvc29mdGlycS5jCmluZGV4IDE4ZjRiZTAuLjA4MjM3NzggMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zb2Z0aXJxLmMKKysrIGIva2VybmVsL3NvZnRpcnEuYwpAQCAtNzAsNyArNzAsNyBAQAogc3RhdGljIHZvaWQgd2FrZXVwX3NvZnRpcnFkKHZvaWQpCiB7CiAJLyogSW50ZXJydXB0cyBhcmUgZGlzYWJsZWQ6IG5vIG5lZWQgdG8gc3RvcCBwcmVlbXB0aW9uICovCi0Jc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBfX2dldF9jcHVfdmFyKGtzb2Z0aXJxZCk7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBfX3RoaXNfY3B1X3JlYWQoa3NvZnRpcnFkKTsKIAogCWlmICh0c2sgJiYgdHNrLT5zdGF0ZSAhPSBUQVNLX1JVTk5JTkcpCiAJCXdha2VfdXBfcHJvY2Vzcyh0c2spOwpAQCAtMzg4LDggKzM4OCw4IEBACiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJdC0+bmV4dCA9IE5VTEw7Ci0JKl9fZ2V0X2NwdV92YXIodGFza2xldF92ZWMpLnRhaWwgPSB0OwotCV9fZ2V0X2NwdV92YXIodGFza2xldF92ZWMpLnRhaWwgPSAmKHQtPm5leHQpOworCSpfX3RoaXNfY3B1X3JlYWQodGFza2xldF92ZWMudGFpbCkgPSB0OworCV9fdGhpc19jcHVfd3JpdGUodGFza2xldF92ZWMudGFpbCwgJih0LT5uZXh0KSk7CiAJcmFpc2Vfc29mdGlycV9pcnFvZmYoVEFTS0xFVF9TT0ZUSVJRKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CkBAIC00MDIsOCArNDAyLDggQEAKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAl0LT5uZXh0ID0gTlVMTDsKLQkqX19nZXRfY3B1X3Zhcih0YXNrbGV0X2hpX3ZlYykudGFpbCA9IHQ7Ci0JX19nZXRfY3B1X3Zhcih0YXNrbGV0X2hpX3ZlYykudGFpbCA9ICYodC0+bmV4dCk7CisJKl9fdGhpc19jcHVfcmVhZCh0YXNrbGV0X2hpX3ZlYy50YWlsKSA9IHQ7CisJX190aGlzX2NwdV93cml0ZSh0YXNrbGV0X2hpX3ZlYy50YWlsLCAgJih0LT5uZXh0KSk7CiAJcmFpc2Vfc29mdGlycV9pcnFvZmYoSElfU09GVElSUSk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQpAQCAtNDE0LDggKzQxNCw4IEBACiB7CiAJQlVHX09OKCFpcnFzX2Rpc2FibGVkKCkpOwogCi0JdC0+bmV4dCA9IF9fZ2V0X2NwdV92YXIodGFza2xldF9oaV92ZWMpLmhlYWQ7Ci0JX19nZXRfY3B1X3Zhcih0YXNrbGV0X2hpX3ZlYykuaGVhZCA9IHQ7CisJdC0+bmV4dCA9IF9fdGhpc19jcHVfcmVhZCh0YXNrbGV0X2hpX3ZlYy5oZWFkKTsKKwlfX3RoaXNfY3B1X3dyaXRlKHRhc2tsZXRfaGlfdmVjLmhlYWQsIHQpOwogCV9fcmFpc2Vfc29mdGlycV9pcnFvZmYoSElfU09GVElSUSk7CiB9CiAKQEAgLTQyNiw5ICs0MjYsOSBAQAogCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqbGlzdDsKIAogCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0JbGlzdCA9IF9fZ2V0X2NwdV92YXIodGFza2xldF92ZWMpLmhlYWQ7Ci0JX19nZXRfY3B1X3Zhcih0YXNrbGV0X3ZlYykuaGVhZCA9IE5VTEw7Ci0JX19nZXRfY3B1X3Zhcih0YXNrbGV0X3ZlYykudGFpbCA9ICZfX2dldF9jcHVfdmFyKHRhc2tsZXRfdmVjKS5oZWFkOworCWxpc3QgPSBfX3RoaXNfY3B1X3JlYWQodGFza2xldF92ZWMuaGVhZCk7CisJX190aGlzX2NwdV93cml0ZSh0YXNrbGV0X3ZlYy5oZWFkLCBOVUxMKTsKKwlfX3RoaXNfY3B1X3dyaXRlKHRhc2tsZXRfdmVjLnRhaWwsICZfX2dldF9jcHVfdmFyKHRhc2tsZXRfdmVjKS5oZWFkKTsKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiAKIAl3aGlsZSAobGlzdCkgewpAQCAtNDQ5LDggKzQ0OSw4IEBACiAKIAkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAkJdC0+bmV4dCA9IE5VTEw7Ci0JCSpfX2dldF9jcHVfdmFyKHRhc2tsZXRfdmVjKS50YWlsID0gdDsKLQkJX19nZXRfY3B1X3Zhcih0YXNrbGV0X3ZlYykudGFpbCA9ICYodC0+bmV4dCk7CisJCSpfX3RoaXNfY3B1X3JlYWQodGFza2xldF92ZWMudGFpbCkgPSB0OworCQlfX3RoaXNfY3B1X3dyaXRlKHRhc2tsZXRfdmVjLnRhaWwsICYodC0+bmV4dCkpOwogCQlfX3JhaXNlX3NvZnRpcnFfaXJxb2ZmKFRBU0tMRVRfU09GVElSUSk7CiAJCWxvY2FsX2lycV9lbmFibGUoKTsKIAl9CkBAIC00NjEsOSArNDYxLDkgQEAKIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKmxpc3Q7CiAKIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCWxpc3QgPSBfX2dldF9jcHVfdmFyKHRhc2tsZXRfaGlfdmVjKS5oZWFkOwotCV9fZ2V0X2NwdV92YXIodGFza2xldF9oaV92ZWMpLmhlYWQgPSBOVUxMOwotCV9fZ2V0X2NwdV92YXIodGFza2xldF9oaV92ZWMpLnRhaWwgPSAmX19nZXRfY3B1X3Zhcih0YXNrbGV0X2hpX3ZlYykuaGVhZDsKKwlsaXN0ID0gX190aGlzX2NwdV9yZWFkKHRhc2tsZXRfaGlfdmVjLmhlYWQpOworCV9fdGhpc19jcHVfd3JpdGUodGFza2xldF9oaV92ZWMuaGVhZCwgTlVMTCk7CisJX190aGlzX2NwdV93cml0ZSh0YXNrbGV0X2hpX3ZlYy50YWlsLCAmX19nZXRfY3B1X3Zhcih0YXNrbGV0X2hpX3ZlYykuaGVhZCk7CiAJbG9jYWxfaXJxX2VuYWJsZSgpOwogCiAJd2hpbGUgKGxpc3QpIHsKQEAgLTQ4NCw4ICs0ODQsOCBAQAogCiAJCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAJCXQtPm5leHQgPSBOVUxMOwotCQkqX19nZXRfY3B1X3Zhcih0YXNrbGV0X2hpX3ZlYykudGFpbCA9IHQ7Ci0JCV9fZ2V0X2NwdV92YXIodGFza2xldF9oaV92ZWMpLnRhaWwgPSAmKHQtPm5leHQpOworCQkqX190aGlzX2NwdV9yZWFkKHRhc2tsZXRfaGlfdmVjLnRhaWwpID0gdDsKKwkJX190aGlzX2NwdV93cml0ZSh0YXNrbGV0X2hpX3ZlYy50YWlsLCAmKHQtPm5leHQpKTsKIAkJX19yYWlzZV9zb2Z0aXJxX2lycW9mZihISV9TT0ZUSVJRKTsKIAkJbG9jYWxfaXJxX2VuYWJsZSgpOwogCX0KQEAgLTgwMiwxNiArODAyLDE2IEBACiAKIAkvKiBGaW5kIGVuZCwgYXBwZW5kIGxpc3QgZm9yIHRoYXQgQ1BVLiAqLwogCWlmICgmcGVyX2NwdSh0YXNrbGV0X3ZlYywgY3B1KS5oZWFkICE9IHBlcl9jcHUodGFza2xldF92ZWMsIGNwdSkudGFpbCkgewotCQkqKF9fZ2V0X2NwdV92YXIodGFza2xldF92ZWMpLnRhaWwpID0gcGVyX2NwdSh0YXNrbGV0X3ZlYywgY3B1KS5oZWFkOwotCQlfX2dldF9jcHVfdmFyKHRhc2tsZXRfdmVjKS50YWlsID0gcGVyX2NwdSh0YXNrbGV0X3ZlYywgY3B1KS50YWlsOworCQkqX190aGlzX2NwdV9yZWFkKHRhc2tsZXRfdmVjLnRhaWwpID0gcGVyX2NwdSh0YXNrbGV0X3ZlYywgY3B1KS5oZWFkOworCQl0aGlzX2NwdV93cml0ZSh0YXNrbGV0X3ZlYy50YWlsLCBwZXJfY3B1KHRhc2tsZXRfdmVjLCBjcHUpLnRhaWwpOwogCQlwZXJfY3B1KHRhc2tsZXRfdmVjLCBjcHUpLmhlYWQgPSBOVUxMOwogCQlwZXJfY3B1KHRhc2tsZXRfdmVjLCBjcHUpLnRhaWwgPSAmcGVyX2NwdSh0YXNrbGV0X3ZlYywgY3B1KS5oZWFkOwogCX0KIAlyYWlzZV9zb2Z0aXJxX2lycW9mZihUQVNLTEVUX1NPRlRJUlEpOwogCiAJaWYgKCZwZXJfY3B1KHRhc2tsZXRfaGlfdmVjLCBjcHUpLmhlYWQgIT0gcGVyX2NwdSh0YXNrbGV0X2hpX3ZlYywgY3B1KS50YWlsKSB7Ci0JCSpfX2dldF9jcHVfdmFyKHRhc2tsZXRfaGlfdmVjKS50YWlsID0gcGVyX2NwdSh0YXNrbGV0X2hpX3ZlYywgY3B1KS5oZWFkOwotCQlfX2dldF9jcHVfdmFyKHRhc2tsZXRfaGlfdmVjKS50YWlsID0gcGVyX2NwdSh0YXNrbGV0X2hpX3ZlYywgY3B1KS50YWlsOworCQkqX190aGlzX2NwdV9yZWFkKHRhc2tsZXRfaGlfdmVjLnRhaWwpID0gcGVyX2NwdSh0YXNrbGV0X2hpX3ZlYywgY3B1KS5oZWFkOworCQlfX3RoaXNfY3B1X3dyaXRlKHRhc2tsZXRfaGlfdmVjLnRhaWwsIHBlcl9jcHUodGFza2xldF9oaV92ZWMsIGNwdSkudGFpbCk7CiAJCXBlcl9jcHUodGFza2xldF9oaV92ZWMsIGNwdSkuaGVhZCA9IE5VTEw7CiAJCXBlcl9jcHUodGFza2xldF9oaV92ZWMsIGNwdSkudGFpbCA9ICZwZXJfY3B1KHRhc2tsZXRfaGlfdmVjLCBjcHUpLmhlYWQ7CiAJfQpAQCAtODUzLDcgKzg1Myw5IEBACiAJCQkgICAgIGNwdW1hc2tfYW55KGNwdV9vbmxpbmVfbWFzaykpOwogCWNhc2UgQ1BVX0RFQUQ6CiAJY2FzZSBDUFVfREVBRF9GUk9aRU46IHsKLQkJc3RydWN0IHNjaGVkX3BhcmFtIHBhcmFtID0geyAuc2NoZWRfcHJpb3JpdHkgPSBNQVhfUlRfUFJJTy0xIH07CisJCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gcGFyYW0gPSB7CisJCQkuc2NoZWRfcHJpb3JpdHkgPSBNQVhfUlRfUFJJTy0xCisJCX07CiAKIAkJcCA9IHBlcl9jcHUoa3NvZnRpcnFkLCBob3RjcHUpOwogCQlwZXJfY3B1KGtzb2Z0aXJxZCwgaG90Y3B1KSA9IE5VTEw7CmRpZmYgLS1naXQgYS9rZXJuZWwvc3JjdS5jIGIva2VybmVsL3NyY3UuYwppbmRleCBjNzFlMDc1Li45OGQ4YzFlIDEwMDY0NAotLS0gYS9rZXJuZWwvc3JjdS5jCisrKyBiL2tlcm5lbC9zcmN1LmMKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9zcmN1Lmg+CiAKIHN0YXRpYyBpbnQgaW5pdF9zcmN1X3N0cnVjdF9maWVsZHMoc3RydWN0IHNyY3Vfc3RydWN0ICpzcCkKQEAgLTIwMyw5ICsyMDQsMTQgQEAKIAkgKiBhbGwgc3JjdV9yZWFkX2xvY2soKSBjYWxscyB1c2luZyB0aGUgb2xkIGNvdW50ZXJzIGhhdmUgY29tcGxldGVkLgogCSAqIFRoZWlyIGNvcnJlc3BvbmRpbmcgY3JpdGljYWwgc2VjdGlvbnMgbWlnaHQgd2VsbCBiZSBzdGlsbAogCSAqIGV4ZWN1dGluZywgYnV0IHRoZSBzcmN1X3JlYWRfbG9jaygpIHByaW1pdGl2ZXMgdGhlbXNlbHZlcwotCSAqIHdpbGwgaGF2ZSBmaW5pc2hlZCBleGVjdXRpbmcuCisJICogd2lsbCBoYXZlIGZpbmlzaGVkIGV4ZWN1dGluZy4gIFdlIGluaXRpYWxseSBnaXZlIHJlYWRlcnMKKwkgKiBhbiBhcmJpdHJhcmlseSBjaG9zZW4gMTAgbWljcm9zZWNvbmRzIHRvIGdldCBvdXQgb2YgdGhlaXIKKwkgKiBTUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucywgdGhlbiBsb29wIHdhaXRpbmcgMS9IWgorCSAqIHNlY29uZHMgcGVyIGl0ZXJhdGlvbi4KIAkgKi8KIAorCWlmIChzcmN1X3JlYWRlcnNfYWN0aXZlX2lkeChzcCwgaWR4KSkKKwkJdWRlbGF5KENPTkZJR19TUkNVX1NZTkNIUk9OSVpFX0RFTEFZKTsKIAl3aGlsZSAoc3JjdV9yZWFkZXJzX2FjdGl2ZV9pZHgoc3AsIGlkeCkpCiAJCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZSgxKTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3N5cy5jIGIva2VybmVsL3N5cy5jCmluZGV4IDdmNWEwY2QuLjI3NDVkY2QgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zeXMuYworKysgYi9rZXJuZWwvc3lzLmMKQEAgLTEwODAsOCArMTA4MCwxMCBAQAogCWVyciA9IHNlc3Npb247CiBvdXQ6CiAJd3JpdGVfdW5sb2NrX2lycSgmdGFza2xpc3RfbG9jayk7Ci0JaWYgKGVyciA+IDApCisJaWYgKGVyciA+IDApIHsKIAkJcHJvY19zaWRfY29ubmVjdG9yKGdyb3VwX2xlYWRlcik7CisJCXNjaGVkX2F1dG9ncm91cF9jcmVhdGVfYXR0YWNoKGdyb3VwX2xlYWRlcik7CisJfQogCXJldHVybiBlcnI7CiB9CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9zeXNjdGwuYyBiL2tlcm5lbC9zeXNjdGwuYwppbmRleCA1YWJmYTE1Li5hZTVjYmIxIDEwMDY0NAotLS0gYS9rZXJuZWwvc3lzY3RsLmMKKysrIGIva2VybmVsL3N5c2N0bC5jCkBAIC0yNTksOCArMjU5LDYgQEAKIHN0YXRpYyBpbnQgbWF4X3dha2V1cF9ncmFudWxhcml0eV9ucyA9IE5TRUNfUEVSX1NFQzsJLyogMSBzZWNvbmQgKi8KIHN0YXRpYyBpbnQgbWluX3NjaGVkX3R1bmFibGVfc2NhbGluZyA9IFNDSEVEX1RVTkFCTEVTQ0FMSU5HX05PTkU7CiBzdGF0aWMgaW50IG1heF9zY2hlZF90dW5hYmxlX3NjYWxpbmcgPSBTQ0hFRF9UVU5BQkxFU0NBTElOR19FTkQtMTsKLXN0YXRpYyBpbnQgbWluX3NjaGVkX3NoYXJlc19yYXRlbGltaXQgPSAxMDAwMDA7IC8qIDEwMCB1c2VjICovCi1zdGF0aWMgaW50IG1heF9zY2hlZF9zaGFyZXNfcmF0ZWxpbWl0ID0gTlNFQ19QRVJfU0VDOyAvKiAxIHNlY29uZCAqLwogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfQ09NUEFDVElPTgpAQCAtMzA1LDE1ICszMDMsNiBAQAogCQkuZXh0cmEyCQk9ICZtYXhfd2FrZXVwX2dyYW51bGFyaXR5X25zLAogCX0sCiAJewotCQkucHJvY25hbWUJPSAic2NoZWRfc2hhcmVzX3JhdGVsaW1pdCIsCi0JCS5kYXRhCQk9ICZzeXNjdGxfc2NoZWRfc2hhcmVzX3JhdGVsaW1pdCwKLQkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQgaW50KSwKLQkJLm1vZGUJCT0gMDY0NCwKLQkJLnByb2NfaGFuZGxlcgk9IHNjaGVkX3Byb2NfdXBkYXRlX2hhbmRsZXIsCi0JCS5leHRyYTEJCT0gJm1pbl9zY2hlZF9zaGFyZXNfcmF0ZWxpbWl0LAotCQkuZXh0cmEyCQk9ICZtYXhfc2NoZWRfc2hhcmVzX3JhdGVsaW1pdCwKLQl9LAotCXsKIAkJLnByb2NuYW1lCT0gInNjaGVkX3R1bmFibGVfc2NhbGluZyIsCiAJCS5kYXRhCQk9ICZzeXNjdGxfc2NoZWRfdHVuYWJsZV9zY2FsaW5nLAogCQkubWF4bGVuCQk9IHNpemVvZihlbnVtIHNjaGVkX3R1bmFibGVfc2NhbGluZyksCkBAIC0zMjMsMTQgKzMxMiw2IEBACiAJCS5leHRyYTIJCT0gJm1heF9zY2hlZF90dW5hYmxlX3NjYWxpbmcsCiAJfSwKIAl7Ci0JCS5wcm9jbmFtZQk9ICJzY2hlZF9zaGFyZXNfdGhyZXNoIiwKLQkJLmRhdGEJCT0gJnN5c2N0bF9zY2hlZF9zaGFyZXNfdGhyZXNoLAotCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBpbnQpLAotCQkubW9kZQkJPSAwNjQ0LAotCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlY19taW5tYXgsCi0JCS5leHRyYTEJCT0gJnplcm8sCi0JfSwKLQl7CiAJCS5wcm9jbmFtZQk9ICJzY2hlZF9taWdyYXRpb25fY29zdCIsCiAJCS5kYXRhCQk9ICZzeXNjdGxfc2NoZWRfbWlncmF0aW9uX2Nvc3QsCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCkBAIC0zNTIsNiArMzMzLDEzIEBACiAJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjLAogCX0sCiAJeworCQkucHJvY25hbWUJPSAic2NoZWRfc2hhcmVzX3dpbmRvdyIsCisJCS5kYXRhCQk9ICZzeXNjdGxfc2NoZWRfc2hhcmVzX3dpbmRvdywKKwkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQgaW50KSwKKwkJLm1vZGUJCT0gMDY0NCwKKwkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWMsCisJfSwKKwl7CiAJCS5wcm9jbmFtZQk9ICJ0aW1lcl9taWdyYXRpb24iLAogCQkuZGF0YQkJPSAmc3lzY3RsX3RpbWVyX21pZ3JhdGlvbiwKIAkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQgaW50KSwKQEAgLTM4Miw2ICszNzAsMTcgQEAKIAkJLm1vZGUJCT0gMDY0NCwKIAkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWMsCiAJfSwKKyNpZmRlZiBDT05GSUdfU0NIRURfQVVUT0dST1VQCisJeworCQkucHJvY25hbWUJPSAic2NoZWRfYXV0b2dyb3VwX2VuYWJsZWQiLAorCQkuZGF0YQkJPSAmc3lzY3RsX3NjaGVkX2F1dG9ncm91cF9lbmFibGVkLAorCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBpbnQpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlYywKKwkJLmV4dHJhMQkJPSAmemVybywKKwkJLmV4dHJhMgkJPSAmb25lLAorCX0sCisjZW5kaWYKICNpZmRlZiBDT05GSUdfUFJPVkVfTE9DS0lORwogCXsKIAkJLnByb2NuYW1lCT0gInByb3ZlX2xvY2tpbmciLApAQCAtNzQ1LDggKzc0NCwxNSBAQAogCQkuZXh0cmExCQk9ICZ6ZXJvLAogCQkuZXh0cmEyCQk9ICZvbmUsCiAJfSwKKwl7CisJCS5wcm9jbmFtZSAgICAgICA9ICJubWlfd2F0Y2hkb2ciLAorCQkuZGF0YSAgICAgICAgICAgPSAmd2F0Y2hkb2dfZW5hYmxlZCwKKwkJLm1heGxlbiAgICAgICAgID0gc2l6ZW9mIChpbnQpLAorCQkubW9kZSAgICAgICAgICAgPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyICAgPSBwcm9jX2Rvd2F0Y2hkb2dfZW5hYmxlZCwKKwl9LAogI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfWDg2X0xPQ0FMX0FQSUMpICYmIGRlZmluZWQoQ09ORklHX1g4NikgJiYgIWRlZmluZWQoQ09ORklHX0xPQ0tVUF9ERVRFQ1RPUikKKyNpZiBkZWZpbmVkKENPTkZJR19YODZfTE9DQUxfQVBJQykgJiYgZGVmaW5lZChDT05GSUdfWDg2KQogCXsKIAkJLnByb2NuYW1lICAgICAgID0gInVua25vd25fbm1pX3BhbmljIiwKIAkJLmRhdGEgICAgICAgICAgID0gJnVua25vd25fbm1pX3BhbmljLApAQCAtNzU0LDEzICs3NjAsNiBAQAogCQkubW9kZSAgICAgICAgICAgPSAwNjQ0LAogCQkucHJvY19oYW5kbGVyICAgPSBwcm9jX2RvaW50dmVjLAogCX0sCi0JewotCQkucHJvY25hbWUgICAgICAgPSAibm1pX3dhdGNoZG9nIiwKLQkJLmRhdGEgICAgICAgICAgID0gJm5taV93YXRjaGRvZ19lbmFibGVkLAotCQkubWF4bGVuICAgICAgICAgPSBzaXplb2YgKGludCksCi0JCS5tb2RlICAgICAgICAgICA9IDA2NDQsCi0JCS5wcm9jX2hhbmRsZXIgICA9IHByb2Nfbm1pX2VuYWJsZWQsCi0JfSwKICNlbmRpZgogI2lmIGRlZmluZWQoQ09ORklHX1g4NikKIAl7CmRpZmYgLS1naXQgYS9rZXJuZWwvc3lzY3RsX2JpbmFyeS5jIGIva2VybmVsL3N5c2N0bF9iaW5hcnkuYwppbmRleCAxMzU3YzU3Li40YjI1NDVhIDEwMDY0NAotLS0gYS9rZXJuZWwvc3lzY3RsX2JpbmFyeS5jCisrKyBiL2tlcm5lbC9zeXNjdGxfYmluYXJ5LmMKQEAgLTEzNiw3ICsxMzYsNiBAQAogCXsgQ1RMX0lOVCwJS0VSTl9JQTY0X1VOQUxJR05FRCwJCSJpZ25vcmUtdW5hbGlnbmVkLXVzZXJ0cmFwIiB9LAogCXsgQ1RMX0lOVCwJS0VSTl9DT01QQVRfTE9HLAkJImNvbXBhdC1sb2ciIH0sCiAJeyBDVExfSU5ULAlLRVJOX01BWF9MT0NLX0RFUFRILAkJIm1heF9sb2NrX2RlcHRoIiB9LAotCXsgQ1RMX0lOVCwJS0VSTl9OTUlfV0FUQ0hET0csCQkibm1pX3dhdGNoZG9nIiB9LAogCXsgQ1RMX0lOVCwJS0VSTl9QQU5JQ19PTl9OTUksCQkicGFuaWNfb25fdW5yZWNvdmVyZWRfbm1pIiB9LAogCXt9CiB9OwpkaWZmIC0tZ2l0IGEva2VybmVsL3Rhc2tzdGF0cy5jIGIva2VybmVsL3Rhc2tzdGF0cy5jCmluZGV4IDMzMDhmZDcuLjY5NjkxZWIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90YXNrc3RhdHMuYworKysgYi9rZXJuZWwvdGFza3N0YXRzLmMKQEAgLTg5LDggKzg5LDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlpZiAoIWluZm8pIHsKLQkJaW50IHNlcSA9IGdldF9jcHVfdmFyKHRhc2tzdGF0c19zZXFudW0pKys7Ci0JCXB1dF9jcHVfdmFyKHRhc2tzdGF0c19zZXFudW0pOworCQlpbnQgc2VxID0gdGhpc19jcHVfaW5jX3JldHVybih0YXNrc3RhdHNfc2VxbnVtKSAtIDE7CiAKIAkJcmVwbHkgPSBnZW5sbXNnX3B1dChza2IsIDAsIHNlcSwgJmZhbWlseSwgMCwgY21kKTsKIAl9IGVsc2UKQEAgLTYxMiw3ICs2MTEsNyBAQAogCQlmaWxsX3RnaWRfZXhpdCh0c2spOwogCX0KIAotCWxpc3RlbmVycyA9ICZfX3Jhd19nZXRfY3B1X3ZhcihsaXN0ZW5lcl9hcnJheSk7CisJbGlzdGVuZXJzID0gX190aGlzX2NwdV9wdHIoJmxpc3RlbmVyX2FycmF5KTsKIAlpZiAobGlzdF9lbXB0eSgmbGlzdGVuZXJzLT5saXN0KSkKIAkJcmV0dXJuOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS9jbG9ja3NvdXJjZS5jIGIva2VybmVsL3RpbWUvY2xvY2tzb3VyY2UuYwppbmRleCBjMThkN2VmLi5kZjE0MGNkIDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS9jbG9ja3NvdXJjZS5jCisrKyBiL2tlcm5lbC90aW1lL2Nsb2Nrc291cmNlLmMKQEAgLTE1Miw2ICsxNTIsNyBAQAogCSAqLwogCWZvciAoc2Z0ID0gMzI7IHNmdCA+IDA7IHNmdC0tKSB7CiAJCXRtcCA9ICh1NjQpIHRvIDw8IHNmdDsKKwkJdG1wICs9IGZyb20gLyAyOwogCQlkb19kaXYodG1wLCBmcm9tKTsKIAkJaWYgKCh0bXAgPj4gc2Z0YWNjKSA9PSAwKQogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS90aWNrLWNvbW1vbi5jIGIva2VybmVsL3RpbWUvdGljay1jb21tb24uYwppbmRleCBiNmI4OThkLi4wNTFiYzgwIDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS90aWNrLWNvbW1vbi5jCisrKyBiL2tlcm5lbC90aW1lL3RpY2stY29tbW9uLmMKQEAgLTQ5LDcgKzQ5LDcgQEAKICAqLwogaW50IHRpY2tfaXNfb25lc2hvdF9hdmFpbGFibGUodm9pZCkKIHsKLQlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpkZXYgPSBfX2dldF9jcHVfdmFyKHRpY2tfY3B1X2RldmljZSkuZXZ0ZGV2OworCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmRldiA9IF9fdGhpc19jcHVfcmVhZCh0aWNrX2NwdV9kZXZpY2UuZXZ0ZGV2KTsKIAogCXJldHVybiBkZXYgJiYgKGRldi0+ZmVhdHVyZXMgJiBDTE9DS19FVlRfRkVBVF9PTkVTSE9UKTsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL3RpY2stb25lc2hvdC5jIGIva2VybmVsL3RpbWUvdGljay1vbmVzaG90LmMKaW5kZXggYWFkYTBlNS4uNWNiYzEwMSAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvdGljay1vbmVzaG90LmMKKysrIGIva2VybmVsL3RpbWUvdGljay1vbmVzaG90LmMKQEAgLTk1LDcgKzk1LDcgQEAKICAqLwogaW50IHRpY2tfcHJvZ3JhbV9ldmVudChrdGltZV90IGV4cGlyZXMsIGludCBmb3JjZSkKIHsKLQlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpkZXYgPSBfX2dldF9jcHVfdmFyKHRpY2tfY3B1X2RldmljZSkuZXZ0ZGV2OworCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmRldiA9IF9fdGhpc19jcHVfcmVhZCh0aWNrX2NwdV9kZXZpY2UuZXZ0ZGV2KTsKIAogCXJldHVybiB0aWNrX2Rldl9wcm9ncmFtX2V2ZW50KGRldiwgZXhwaXJlcywgZm9yY2UpOwogfQpAQCAtMTY3LDcgKzE2Nyw3IEBACiAJaW50IHJldDsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlyZXQgPSBfX2dldF9jcHVfdmFyKHRpY2tfY3B1X2RldmljZSkubW9kZSA9PSBUSUNLREVWX01PREVfT05FU0hPVDsKKwlyZXQgPSBfX3RoaXNfY3B1X3JlYWQodGlja19jcHVfZGV2aWNlLm1vZGUpID09IFRJQ0tERVZfTU9ERV9PTkVTSE9UOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS90aW1lY29tcGFyZS5jIGIva2VybmVsL3RpbWUvdGltZWNvbXBhcmUuYwppbmRleCBhYzM4ZmJiLi5hOWFlMzY5IDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS90aW1lY29tcGFyZS5jCisrKyBiL2tlcm5lbC90aW1lL3RpbWVjb21wYXJlLmMKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvbWF0aDY0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAKIC8qCiAgKiBmaXhlZCBwb2ludCBhcml0aG1ldGljIHNjYWxlIGZhY3RvciBmb3Igc2tldwpAQCAtNTcsMTEgKzU4LDExIEBACiAJaW50IGluZGV4OwogCWludCBudW1fc2FtcGxlcyA9IHN5bmMtPm51bV9zYW1wbGVzOwogCi0JaWYgKG51bV9zYW1wbGVzID4gc2l6ZW9mKGJ1ZmZlcikvc2l6ZW9mKGJ1ZmZlclswXSkpIHsKKwlpZiAobnVtX3NhbXBsZXMgPiBBUlJBWV9TSVpFKGJ1ZmZlcikpIHsKIAkJc2FtcGxlcyA9IGttYWxsb2Moc2l6ZW9mKCpzYW1wbGVzKSAqIG51bV9zYW1wbGVzLCBHRlBfQVRPTUlDKTsKIAkJaWYgKCFzYW1wbGVzKSB7CiAJCQlzYW1wbGVzID0gYnVmZmVyOwotCQkJbnVtX3NhbXBsZXMgPSBzaXplb2YoYnVmZmVyKS9zaXplb2YoYnVmZmVyWzBdKTsKKwkJCW51bV9zYW1wbGVzID0gQVJSQVlfU0laRShidWZmZXIpOwogCQl9CiAJfSBlbHNlIHsKIAkJc2FtcGxlcyA9IGJ1ZmZlcjsKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmMgYi9rZXJuZWwvdGltZS90aW1la2VlcGluZy5jCmluZGV4IDQ5MDEwZDguLjViYjg2ZGEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmMKKysrIGIva2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYwpAQCAtMzIsNiArMzIsOCBAQAogCWN5Y2xlX3QgY3ljbGVfaW50ZXJ2YWw7CiAJLyogTnVtYmVyIG9mIGNsb2NrIHNoaWZ0ZWQgbmFubyBzZWNvbmRzIGluIG9uZSBOVFAgaW50ZXJ2YWwuICovCiAJdTY0CXh0aW1lX2ludGVydmFsOworCS8qIHNoaWZ0ZWQgbmFubyBzZWNvbmRzIGxlZnQgb3ZlciB3aGVuIHJvdW5kaW5nIGN5Y2xlX2ludGVydmFsICovCisJczY0CXh0aW1lX3JlbWFpbmRlcjsKIAkvKiBSYXcgbmFubyBzZWNvbmRzIGFjY3VtdWxhdGVkIHBlciBOVFAgaW50ZXJ2YWwuICovCiAJdTMyCXJhd19pbnRlcnZhbDsKIApAQCAtNjIsNyArNjQsNyBAQAogc3RhdGljIHZvaWQgdGltZWtlZXBlcl9zZXR1cF9pbnRlcm5hbHMoc3RydWN0IGNsb2Nrc291cmNlICpjbG9jaykKIHsKIAljeWNsZV90IGludGVydmFsOwotCXU2NCB0bXA7CisJdTY0IHRtcCwgbnRwaW50ZXJ2YWw7CiAKIAl0aW1la2VlcGVyLmNsb2NrID0gY2xvY2s7CiAJY2xvY2stPmN5Y2xlX2xhc3QgPSBjbG9jay0+cmVhZChjbG9jayk7CkBAIC03MCw2ICs3Miw3IEBACiAJLyogRG8gdGhlIG5zIC0+IGN5Y2xlIGNvbnZlcnNpb24gZmlyc3QsIHVzaW5nIG9yaWdpbmFsIG11bHQgKi8KIAl0bXAgPSBOVFBfSU5URVJWQUxfTEVOR1RIOwogCXRtcCA8PD0gY2xvY2stPnNoaWZ0OworCW50cGludGVydmFsID0gdG1wOwogCXRtcCArPSBjbG9jay0+bXVsdC8yOwogCWRvX2Rpdih0bXAsIGNsb2NrLT5tdWx0KTsKIAlpZiAodG1wID09IDApCkBAIC04MCw2ICs4Myw3IEBACiAKIAkvKiBHbyBiYWNrIGZyb20gY3ljbGVzIC0+IHNoaWZ0ZWQgbnMgKi8KIAl0aW1la2VlcGVyLnh0aW1lX2ludGVydmFsID0gKHU2NCkgaW50ZXJ2YWwgKiBjbG9jay0+bXVsdDsKKwl0aW1la2VlcGVyLnh0aW1lX3JlbWFpbmRlciA9IG50cGludGVydmFsIC0gdGltZWtlZXBlci54dGltZV9pbnRlcnZhbDsKIAl0aW1la2VlcGVyLnJhd19pbnRlcnZhbCA9CiAJCSgodTY0KSBpbnRlcnZhbCAqIGNsb2NrLT5tdWx0KSA+PiBjbG9jay0+c2hpZnQ7CiAKQEAgLTcxOSw3ICs3MjMsOCBAQAogCiAJLyogQWNjdW11bGF0ZSBlcnJvciBiZXR3ZWVuIE5UUCBhbmQgY2xvY2sgaW50ZXJ2YWwgKi8KIAl0aW1la2VlcGVyLm50cF9lcnJvciArPSB0aWNrX2xlbmd0aCA8PCBzaGlmdDsKLQl0aW1la2VlcGVyLm50cF9lcnJvciAtPSB0aW1la2VlcGVyLnh0aW1lX2ludGVydmFsIDw8CisJdGltZWtlZXBlci5udHBfZXJyb3IgLT0KKwkgICAgKHRpbWVrZWVwZXIueHRpbWVfaW50ZXJ2YWwgKyB0aW1la2VlcGVyLnh0aW1lX3JlbWFpbmRlcikgPDwKIAkJCQkodGltZWtlZXBlci5udHBfZXJyb3Jfc2hpZnQgKyBzaGlmdCk7CiAKIAlyZXR1cm4gb2Zmc2V0OwpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvdGltZXJfbGlzdC5jIGIva2VybmVsL3RpbWUvdGltZXJfbGlzdC5jCmluZGV4IGFiOGY1ZTMuLjMyYTE5ZjkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL3RpbWVyX2xpc3QuYworKysgYi9rZXJuZWwvdGltZS90aW1lcl9saXN0LmMKQEAgLTc5LDI2ICs3OSwyNiBAQAogewogCXN0cnVjdCBocnRpbWVyICp0aW1lciwgdG1wOwogCXVuc2lnbmVkIGxvbmcgbmV4dCA9IDAsIGk7Ci0Jc3RydWN0IHJiX25vZGUgKmN1cnI7CisJc3RydWN0IHRpbWVycXVldWVfbm9kZSAqY3VycjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiBuZXh0X29uZToKIAlpID0gMDsKIAlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmJhc2UtPmNwdV9iYXNlLT5sb2NrLCBmbGFncyk7CiAKLQljdXJyID0gYmFzZS0+Zmlyc3Q7CisJY3VyciA9IHRpbWVycXVldWVfZ2V0bmV4dCgmYmFzZS0+YWN0aXZlKTsKIAkvKgogCSAqIENydWRlIGJ1dCB3ZSBoYXZlIHRvIGRvIHRoaXMgTyhOKk4pIHRoaW5nLCBiZWNhdXNlCiAJICogd2UgaGF2ZSB0byB1bmxvY2sgdGhlIGJhc2Ugd2hlbiBwcmludGluZzoKIAkgKi8KIAl3aGlsZSAoY3VyciAmJiBpIDwgbmV4dCkgewotCQljdXJyID0gcmJfbmV4dChjdXJyKTsKKwkJY3VyciA9IHRpbWVycXVldWVfaXRlcmF0ZV9uZXh0KGN1cnIpOwogCQlpKys7CiAJfQogCiAJaWYgKGN1cnIpIHsKIAotCQl0aW1lciA9IHJiX2VudHJ5KGN1cnIsIHN0cnVjdCBocnRpbWVyLCBub2RlKTsKKwkJdGltZXIgPSBjb250YWluZXJfb2YoY3Vyciwgc3RydWN0IGhydGltZXIsIG5vZGUpOwogCQl0bXAgPSAqdGltZXI7CiAJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZiYXNlLT5jcHVfYmFzZS0+bG9jaywgZmxhZ3MpOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZXIuYyBiL2tlcm5lbC90aW1lci5jCmluZGV4IDM1M2I5MjIuLjQzY2E5OTMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lci5jCisrKyBiL2tlcm5lbC90aW1lci5jCkBAIC04OCwxOCArODgsNiBAQAogRVhQT1JUX1NZTUJPTChib290X3R2ZWNfYmFzZXMpOwogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCB0dmVjX2Jhc2UgKiwgdHZlY19iYXNlcykgPSAmYm9vdF90dmVjX2Jhc2VzOwogCi0vKgotICogTm90ZSB0aGF0IGFsbCB0dmVjX2Jhc2VzIGFyZSAyIGJ5dGUgYWxpZ25lZCBhbmQgbG93ZXIgYml0IG9mCi0gKiBiYXNlIGluIHRpbWVyX2xpc3QgaXMgZ3VhcmFudGVlZCB0byBiZSB6ZXJvLiBVc2UgdGhlIExTQiB0bwotICogaW5kaWNhdGUgd2hldGhlciB0aGUgdGltZXIgaXMgZGVmZXJyYWJsZS4KLSAqCi0gKiBBIGRlZmVycmFibGUgdGltZXIgd2lsbCB3b3JrIG5vcm1hbGx5IHdoZW4gdGhlIHN5c3RlbSBpcyBidXN5LCBidXQKLSAqIHdpbGwgbm90IGNhdXNlIGEgQ1BVIHRvIGNvbWUgb3V0IG9mIGlkbGUganVzdCB0byBzZXJ2aWNlIGl0OyBpbnN0ZWFkLAotICogdGhlIHRpbWVyIHdpbGwgYmUgc2VydmljZWQgd2hlbiB0aGUgQ1BVIGV2ZW50dWFsbHkgd2FrZXMgdXAgd2l0aCBhCi0gKiBzdWJzZXF1ZW50IG5vbi1kZWZlcnJhYmxlIHRpbWVyLgotICovCi0jZGVmaW5lIFRCQVNFX0RFRkVSUkFCTEVfRkxBRwkJKDB4MSkKLQogLyogRnVuY3Rpb25zIGJlbG93IGhlbHAgdXMgbWFuYWdlICdkZWZlcnJhYmxlJyBmbGFnICovCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB0YmFzZV9nZXRfZGVmZXJyYWJsZShzdHJ1Y3QgdHZlY19iYXNlICpiYXNlKQogewpAQCAtMTEzLDggKzEwMSw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB0aW1lcl9zZXRfZGVmZXJyYWJsZShzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpCiB7Ci0JdGltZXItPmJhc2UgPSAoKHN0cnVjdCB0dmVjX2Jhc2UgKikoKHVuc2lnbmVkIGxvbmcpKHRpbWVyLT5iYXNlKSB8Ci0JCQkJICAgICAgIFRCQVNFX0RFRkVSUkFCTEVfRkxBRykpOworCXRpbWVyLT5iYXNlID0gVEJBU0VfTUFLRV9ERUZFUlJFRCh0aW1lci0+YmFzZSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZApAQCAtMzQzLDE1ICszMzAsNiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoc2V0X3RpbWVyX3NsYWNrKTsKIAotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X3J1bm5pbmdfdGltZXIoc3RydWN0IHR2ZWNfYmFzZSAqYmFzZSwKLQkJCQkJc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKQotewotI2lmZGVmIENPTkZJR19TTVAKLQliYXNlLT5ydW5uaW5nX3RpbWVyID0gdGltZXI7Ci0jZW5kaWYKLX0KLQogc3RhdGljIHZvaWQgaW50ZXJuYWxfYWRkX3RpbWVyKHN0cnVjdCB0dmVjX2Jhc2UgKmJhc2UsIHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcikKIHsKIAl1bnNpZ25lZCBsb25nIGV4cGlyZXMgPSB0aW1lci0+ZXhwaXJlczsKQEAgLTkzNiwxNSArOTE0LDEyIEBACiB9CiBFWFBPUlRfU1lNQk9MKGRlbF90aW1lcik7CiAKLSNpZmRlZiBDT05GSUdfU01QCiAvKioKICAqIHRyeV90b19kZWxfdGltZXJfc3luYyAtIFRyeSB0byBkZWFjdGl2YXRlIGEgdGltZXIKICAqIEB0aW1lcjogdGltZXIgZG8gZGVsCiAgKgogICogVGhpcyBmdW5jdGlvbiB0cmllcyB0byBkZWFjdGl2YXRlIGEgdGltZXIuIFVwb24gc3VjY2Vzc2Z1bCAocmV0ID49IDApCiAgKiBleGl0IHRoZSB0aW1lciBpcyBub3QgcXVldWVkIGFuZCB0aGUgaGFuZGxlciBpcyBub3QgcnVubmluZyBvbiBhbnkgQ1BVLgotICoKLSAqIEl0IG11c3Qgbm90IGJlIGNhbGxlZCBmcm9tIGludGVycnVwdCBjb250ZXh0cy4KICAqLwogaW50IHRyeV90b19kZWxfdGltZXJfc3luYyhzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpCiB7CkBAIC05NzMsNiArOTQ4LDcgQEAKIH0KIEVYUE9SVF9TWU1CT0wodHJ5X3RvX2RlbF90aW1lcl9zeW5jKTsKIAorI2lmZGVmIENPTkZJR19TTVAKIC8qKgogICogZGVsX3RpbWVyX3N5bmMgLSBkZWFjdGl2YXRlIGEgdGltZXIgYW5kIHdhaXQgZm9yIHRoZSBoYW5kbGVyIHRvIGZpbmlzaC4KICAqIEB0aW1lcjogdGhlIHRpbWVyIHRvIGJlIGRlYWN0aXZhdGVkCkBAIC05ODMsNyArOTU5LDcgQEAKICAqCiAgKiBTeW5jaHJvbml6YXRpb24gcnVsZXM6IENhbGxlcnMgbXVzdCBwcmV2ZW50IHJlc3RhcnRpbmcgb2YgdGhlIHRpbWVyLAogICogb3RoZXJ3aXNlIHRoaXMgZnVuY3Rpb24gaXMgbWVhbmluZ2xlc3MuIEl0IG11c3Qgbm90IGJlIGNhbGxlZCBmcm9tCi0gKiBpbnRlcnJ1cHQgY29udGV4dHMuIFRoZSBjYWxsZXIgbXVzdCBub3QgaG9sZCBsb2NrcyB3aGljaCB3b3VsZCBwcmV2ZW50CisgKiBoYXJkaXJxIGNvbnRleHRzLiBUaGUgY2FsbGVyIG11c3Qgbm90IGhvbGQgbG9ja3Mgd2hpY2ggd291bGQgcHJldmVudAogICogY29tcGxldGlvbiBvZiB0aGUgdGltZXIncyBoYW5kbGVyLiBUaGUgdGltZXIncyBoYW5kbGVyIG11c3Qgbm90IGNhbGwKICAqIGFkZF90aW1lcl9vbigpLiBVcG9uIGV4aXQgdGhlIHRpbWVyIGlzIG5vdCBxdWV1ZWQgYW5kIHRoZSBoYW5kbGVyIGlzCiAgKiBub3QgcnVubmluZyBvbiBhbnkgQ1BVLgpAQCAtOTkzLDE0ICs5NjksMTYgQEAKIGludCBkZWxfdGltZXJfc3luYyhzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpCiB7CiAjaWZkZWYgQ09ORklHX0xPQ0tERVAKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWxvY2FsX2JoX2Rpc2FibGUoKTsKIAlsb2NrX21hcF9hY3F1aXJlKCZ0aW1lci0+bG9ja2RlcF9tYXApOwogCWxvY2tfbWFwX3JlbGVhc2UoJnRpbWVyLT5sb2NrZGVwX21hcCk7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCWxvY2FsX2JoX2VuYWJsZSgpOwogI2VuZGlmCi0KKwkvKgorCSAqIGRvbid0IHVzZSBpdCBpbiBoYXJkaXJxIGNvbnRleHQsIGJlY2F1c2UgaXQKKwkgKiBjb3VsZCBsZWFkIHRvIGRlYWRsb2NrLgorCSAqLworCVdBUk5fT04oaW5faXJxKCkpOwogCWZvciAoOzspIHsKIAkJaW50IHJldCA9IHRyeV90b19kZWxfdGltZXJfc3luYyh0aW1lcik7CiAJCWlmIChyZXQgPj0gMCkKQEAgLTExMTEsNyArMTA4OSw3IEBACiAKIAkJCXRpbWVyX3N0YXRzX2FjY291bnRfdGltZXIodGltZXIpOwogCi0JCQlzZXRfcnVubmluZ190aW1lcihiYXNlLCB0aW1lcik7CisJCQliYXNlLT5ydW5uaW5nX3RpbWVyID0gdGltZXI7CiAJCQlkZXRhY2hfdGltZXIodGltZXIsIDEpOwogCiAJCQlzcGluX3VubG9ja19pcnEoJmJhc2UtPmxvY2spOwpAQCAtMTExOSw3ICsxMDk3LDcgQEAKIAkJCXNwaW5fbG9ja19pcnEoJmJhc2UtPmxvY2spOwogCQl9CiAJfQotCXNldF9ydW5uaW5nX3RpbWVyKGJhc2UsIE5VTEwpOworCWJhc2UtPnJ1bm5pbmdfdGltZXIgPSBOVUxMOwogCXNwaW5fdW5sb2NrX2lycSgmYmFzZS0+bG9jayk7CiB9CiAKQEAgLTEyNDksNyArMTIyNyw3IEBACiAgKi8KIHVuc2lnbmVkIGxvbmcgZ2V0X25leHRfdGltZXJfaW50ZXJydXB0KHVuc2lnbmVkIGxvbmcgbm93KQogewotCXN0cnVjdCB0dmVjX2Jhc2UgKmJhc2UgPSBfX2dldF9jcHVfdmFyKHR2ZWNfYmFzZXMpOworCXN0cnVjdCB0dmVjX2Jhc2UgKmJhc2UgPSBfX3RoaXNfY3B1X3JlYWQodHZlY19iYXNlcyk7CiAJdW5zaWduZWQgbG9uZyBleHBpcmVzOwogCiAJLyoKQEAgLTEyOTgsNyArMTI3Niw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIHJ1bl90aW1lcl9zb2Z0aXJxKHN0cnVjdCBzb2Z0aXJxX2FjdGlvbiAqaCkKIHsKLQlzdHJ1Y3QgdHZlY19iYXNlICpiYXNlID0gX19nZXRfY3B1X3Zhcih0dmVjX2Jhc2VzKTsKKwlzdHJ1Y3QgdHZlY19iYXNlICpiYXNlID0gX190aGlzX2NwdV9yZWFkKHR2ZWNfYmFzZXMpOwogCiAJaHJ0aW1lcl9ydW5fcGVuZGluZygpOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvS2NvbmZpZyBiL2tlcm5lbC90cmFjZS9LY29uZmlnCmluZGV4IGVhMzdlMmYuLjE0Njc0ZGMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9LY29uZmlnCisrKyBiL2tlcm5lbC90cmFjZS9LY29uZmlnCkBAIC02OSw2ICs2OSwyMSBAQAogCXNlbGVjdCBDT05URVhUX1NXSVRDSF9UUkFDRVIKIAlib29sCiAKK2NvbmZpZyBFVkVOVF9QT1dFUl9UUkFDSU5HX0RFUFJFQ0FURUQKKwlkZXBlbmRzIG9uIEVWRU5UX1RSQUNJTkcKKwlib29sICJEZXByZWNhdGVkIHBvd2VyIGV2ZW50IHRyYWNlIEFQSSwgdG8gYmUgcmVtb3ZlZCIKKwlkZWZhdWx0IHkKKwloZWxwCisJICBQcm92aWRlcyBvbGQgcG93ZXIgZXZlbnQgdHlwZXM6CisJICBDLXN0YXRlL2lkbGUgYWNjb3VudGluZyBldmVudHM6CisJICBwb3dlcjpwb3dlcl9zdGFydAorCSAgcG93ZXI6cG93ZXJfZW5kCisJICBhbmQgb2xkIGNwdWZyZXEgYWNjb3VudGluZyBldmVudDoKKwkgIHBvd2VyOnBvd2VyX2ZyZXF1ZW5jeQorCSAgVGhpcyBpcyBmb3IgdXNlcnNwYWNlIGNvbXBhdGliaWxpdHkKKwkgIGFuZCB3aWxsIHZhbmlzaCBhZnRlciA1IGtlcm5lbCBpdGVyYXRpb25zLAorCSAgbmFtZWx5IDIuNi40MS4KKwogY29uZmlnIENPTlRFWFRfU1dJVENIX1RSQUNFUgogCWJvb2wKIApkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3Bvd2VyLXRyYWNlcy5jIGIva2VybmVsL3RyYWNlL3Bvd2VyLXRyYWNlcy5jCmluZGV4IGEyMjU4MmEuLmY1NWZjZjYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9wb3dlci10cmFjZXMuYworKysgYi9rZXJuZWwvdHJhY2UvcG93ZXItdHJhY2VzLmMKQEAgLTEzLDUgKzEzLDggQEAKICNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UUwogI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9wb3dlci5oPgogCi1FWFBPUlRfVFJBQ0VQT0lOVF9TWU1CT0xfR1BMKHBvd2VyX2ZyZXF1ZW5jeSk7CisjaWZkZWYgRVZFTlRfUE9XRVJfVFJBQ0lOR19ERVBSRUNBVEVECitFWFBPUlRfVFJBQ0VQT0lOVF9TWU1CT0xfR1BMKHBvd2VyX3N0YXJ0KTsKKyNlbmRpZgorRVhQT1JUX1RSQUNFUE9JTlRfU1lNQk9MX0dQTChjcHVfaWRsZSk7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudF9wZXJmLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRfcGVyZi5jCmluZGV4IDM5YzA1OWMuLjE5YTM1OWQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudF9wZXJmLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50X3BlcmYuYwpAQCAtMjEsMTcgKzIxLDQ2IEBACiAvKiBDb3VudCB0aGUgZXZlbnRzIGluIHVzZSAocGVyIGV2ZW50IGlkLCBub3QgcGVyIGluc3RhbmNlKSAqLwogc3RhdGljIGludAl0b3RhbF9yZWZfY291bnQ7CiAKK3N0YXRpYyBpbnQgcGVyZl90cmFjZV9ldmVudF9wZXJtKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqdHBfZXZlbnQsCisJCQkJIHN0cnVjdCBwZXJmX2V2ZW50ICpwX2V2ZW50KQoreworCS8qIE5vIHRyYWNpbmcsIGp1c3QgY291bnRpbmcsIHNvIG5vIG9idmlvdXMgbGVhayAqLworCWlmICghKHBfZXZlbnQtPmF0dHIuc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9SQVcpKQorCQlyZXR1cm4gMDsKKworCS8qIFNvbWUgZXZlbnRzIGFyZSBvayB0byBiZSB0cmFjZWQgYnkgbm9uLXJvb3QgdXNlcnMuLi4gKi8KKwlpZiAocF9ldmVudC0+YXR0YWNoX3N0YXRlID09IFBFUkZfQVRUQUNIX1RBU0spIHsKKwkJaWYgKHRwX2V2ZW50LT5mbGFncyAmIFRSQUNFX0VWRU5UX0ZMX0NBUF9BTlkpCisJCQlyZXR1cm4gMDsKKwl9CisKKwkvKgorCSAqIC4uLm90aGVyd2lzZSByYXcgdHJhY2Vwb2ludCBkYXRhIGNhbiBiZSBhIHNldmVyZSBkYXRhIGxlYWssCisJICogb25seSBhbGxvdyByb290IHRvIGhhdmUgdGhlc2UuCisJICovCisJaWYgKHBlcmZfcGFyYW5vaWRfdHJhY2Vwb2ludF9yYXcoKSAmJiAhY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKKwkJcmV0dXJuIC1FUEVSTTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHBlcmZfdHJhY2VfZXZlbnRfaW5pdChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKnRwX2V2ZW50LAogCQkJCSBzdHJ1Y3QgcGVyZl9ldmVudCAqcF9ldmVudCkKIHsKIAlzdHJ1Y3QgaGxpc3RfaGVhZCBfX3BlcmNwdSAqbGlzdDsKLQlpbnQgcmV0ID0gLUVOT01FTTsKKwlpbnQgcmV0OwogCWludCBjcHU7CiAKKwlyZXQgPSBwZXJmX3RyYWNlX2V2ZW50X3Blcm0odHBfZXZlbnQsIHBfZXZlbnQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKIAlwX2V2ZW50LT50cF9ldmVudCA9IHRwX2V2ZW50OwogCWlmICh0cF9ldmVudC0+cGVyZl9yZWZjb3VudCsrID4gMCkKIAkJcmV0dXJuIDA7CiAKKwlyZXQgPSAtRU5PTUVNOworCiAJbGlzdCA9IGFsbG9jX3BlcmNwdShzdHJ1Y3QgaGxpc3RfaGVhZCk7CiAJaWYgKCFsaXN0KQogCQlnb3RvIGZhaWw7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzLmMKaW5kZXggMDcyNWVlYS4uMzVmZGUwOSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50cy5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHMuYwpAQCAtMjcsNiArMjcsMTIgQEAKIAogREVGSU5FX01VVEVYKGV2ZW50X211dGV4KTsKIAorREVGSU5FX01VVEVYKGV2ZW50X3N0b3JhZ2VfbXV0ZXgpOworRVhQT1JUX1NZTUJPTF9HUEwoZXZlbnRfc3RvcmFnZV9tdXRleCk7CisKK2NoYXIgZXZlbnRfc3RvcmFnZVtFVkVOVF9TVE9SQUdFX1NJWkVdOworRVhQT1JUX1NZTUJPTF9HUEwoZXZlbnRfc3RvcmFnZSk7CisKIExJU1RfSEVBRChmdHJhY2VfZXZlbnRzKTsKIExJU1RfSEVBRChmdHJhY2VfY29tbW9uX2ZpZWxkcyk7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9leHBvcnQuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9leHBvcnQuYwppbmRleCA0YmE0NGRlLi40Yjc0ZDcxIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2VfZXhwb3J0LmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2V4cG9ydC5jCkBAIC04MywxMyArODMsMTkgQEAKIAogI3VuZGVmIF9fYXJyYXkKICNkZWZpbmUgX19hcnJheSh0eXBlLCBpdGVtLCBsZW4pCQkJCQlcCi0JQlVJTERfQlVHX09OKGxlbiA+IE1BWF9GSUxURVJfU1RSX1ZBTCk7CQkJCVwKLQlyZXQgPSB0cmFjZV9kZWZpbmVfZmllbGQoZXZlbnRfY2FsbCwgI3R5cGUgIlsiICNsZW4gIl0iLCAjaXRlbSwJXAorCWRvIHsJCQkJCQkJCVwKKwkJQlVJTERfQlVHX09OKGxlbiA+IE1BWF9GSUxURVJfU1RSX1ZBTCk7CQkJXAorCQltdXRleF9sb2NrKCZldmVudF9zdG9yYWdlX211dGV4KTsJCQlcCisJCXNucHJpbnRmKGV2ZW50X3N0b3JhZ2UsIHNpemVvZihldmVudF9zdG9yYWdlKSwJCVwKKwkJCSAiJXNbJWRdIiwgI3R5cGUsIGxlbik7CQkJCVwKKwkJcmV0ID0gdHJhY2VfZGVmaW5lX2ZpZWxkKGV2ZW50X2NhbGwsIGV2ZW50X3N0b3JhZ2UsICNpdGVtLCBcCiAJCQkJIG9mZnNldG9mKHR5cGVvZihmaWVsZCksIGl0ZW0pLAkJXAogCQkJCSBzaXplb2YoZmllbGQuaXRlbSksCQkJXAogCQkJCSBpc19zaWduZWRfdHlwZSh0eXBlKSwgRklMVEVSX09USEVSKTsJXAotCWlmIChyZXQpCQkJCQkJCVwKLQkJcmV0dXJuIHJldDsKKwkJbXV0ZXhfdW5sb2NrKCZldmVudF9zdG9yYWdlX211dGV4KTsJCQlcCisJCWlmIChyZXQpCQkJCQkJXAorCQkJcmV0dXJuIHJldDsJCQkJCVwKKwl9IHdoaWxlICgwKTsKIAogI3VuZGVmIF9fYXJyYXlfZGVzYwogI2RlZmluZSBfX2FycmF5X2Rlc2ModHlwZSwgY29udGFpbmVyLCBpdGVtLCBsZW4pCQkJXApkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmMgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYwppbmRleCAxNTVhNDE1Li42NTk3MzJlIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYwpAQCAtNTU4LDcgKzU1OCw3IEBACiBzdGF0aWMgaW50IHRyYWNlX3dha2V1cF90ZXN0X3RocmVhZCh2b2lkICpkYXRhKQogewogCS8qIE1ha2UgdGhpcyBhIFJUIHRocmVhZCwgZG9lc24ndCBuZWVkIHRvIGJlIHRvbyBoaWdoICovCi0Jc3RydWN0IHNjaGVkX3BhcmFtIHBhcmFtID0geyAuc2NoZWRfcHJpb3JpdHkgPSA1IH07CisJc3RhdGljIGNvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSBwYXJhbSA9IHsgLnNjaGVkX3ByaW9yaXR5ID0gNSB9OwogCXN0cnVjdCBjb21wbGV0aW9uICp4ID0gZGF0YTsKIAogCXNjaGVkX3NldHNjaGVkdWxlcihjdXJyZW50LCBTQ0hFRF9GSUZPLCAmcGFyYW0pOwpkaWZmIC0tZ2l0IGEva2VybmVsL3dhdGNoZG9nLmMgYi9rZXJuZWwvd2F0Y2hkb2cuYwppbmRleCA1YjA4MjE1Li5kN2ViZGY0IDEwMDY0NAotLS0gYS9rZXJuZWwvd2F0Y2hkb2cuYworKysgYi9rZXJuZWwvd2F0Y2hkb2cuYwpAQCAtNTcsNiArNTcsOCBAQAogewogCWlmICghc3RybmNtcChzdHIsICJwYW5pYyIsIDUpKQogCQloYXJkbG9ja3VwX3BhbmljID0gMTsKKwllbHNlIGlmICghc3RybmNtcChzdHIsICIwIiwgMSkpCisJCW5vX3dhdGNoZG9nID0gMTsKIAlyZXR1cm4gMTsKIH0KIF9fc2V0dXAoIm5taV93YXRjaGRvZz0iLCBoYXJkbG9ja3VwX3BhbmljX3NldHVwKTsKQEAgLTExNiwxMiArMTE4LDEyIEBACiB7CiAJaW50IHRoaXNfY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCi0JX19nZXRfY3B1X3Zhcih3YXRjaGRvZ190b3VjaF90cykgPSBnZXRfdGltZXN0YW1wKHRoaXNfY3B1KTsKKwlfX3RoaXNfY3B1X3dyaXRlKHdhdGNoZG9nX3RvdWNoX3RzLCBnZXRfdGltZXN0YW1wKHRoaXNfY3B1KSk7CiB9CiAKIHZvaWQgdG91Y2hfc29mdGxvY2t1cF93YXRjaGRvZyh2b2lkKQogewotCV9fcmF3X2dldF9jcHVfdmFyKHdhdGNoZG9nX3RvdWNoX3RzKSA9IDA7CisJX190aGlzX2NwdV93cml0ZSh3YXRjaGRvZ190b3VjaF90cywgMCk7CiB9CiBFWFBPUlRfU1lNQk9MKHRvdWNoX3NvZnRsb2NrdXBfd2F0Y2hkb2cpOwogCkBAIC0xNjUsMTIgKzE2NywxMiBAQAogLyogd2F0Y2hkb2cgZGV0ZWN0b3IgZnVuY3Rpb25zICovCiBzdGF0aWMgaW50IGlzX2hhcmRsb2NrdXAodm9pZCkKIHsKLQl1bnNpZ25lZCBsb25nIGhyaW50ID0gX19nZXRfY3B1X3ZhcihocnRpbWVyX2ludGVycnVwdHMpOworCXVuc2lnbmVkIGxvbmcgaHJpbnQgPSBfX3RoaXNfY3B1X3JlYWQoaHJ0aW1lcl9pbnRlcnJ1cHRzKTsKIAotCWlmIChfX2dldF9jcHVfdmFyKGhydGltZXJfaW50ZXJydXB0c19zYXZlZCkgPT0gaHJpbnQpCisJaWYgKF9fdGhpc19jcHVfcmVhZChocnRpbWVyX2ludGVycnVwdHNfc2F2ZWQpID09IGhyaW50KQogCQlyZXR1cm4gMTsKIAotCV9fZ2V0X2NwdV92YXIoaHJ0aW1lcl9pbnRlcnJ1cHRzX3NhdmVkKSA9IGhyaW50OworCV9fdGhpc19jcHVfd3JpdGUoaHJ0aW1lcl9pbnRlcnJ1cHRzX3NhdmVkLCBocmludCk7CiAJcmV0dXJuIDA7CiB9CiAjZW5kaWYKQEAgLTIwMyw4ICsyMDUsOCBAQAogCS8qIEVuc3VyZSB0aGUgd2F0Y2hkb2cgbmV2ZXIgZ2V0cyB0aHJvdHRsZWQgKi8KIAlldmVudC0+aHcuaW50ZXJydXB0cyA9IDA7CiAKLQlpZiAoX19nZXRfY3B1X3Zhcih3YXRjaGRvZ19ubWlfdG91Y2gpID09IHRydWUpIHsKLQkJX19nZXRfY3B1X3Zhcih3YXRjaGRvZ19ubWlfdG91Y2gpID0gZmFsc2U7CisJaWYgKF9fdGhpc19jcHVfcmVhZCh3YXRjaGRvZ19ubWlfdG91Y2gpID09IHRydWUpIHsKKwkJX190aGlzX2NwdV93cml0ZSh3YXRjaGRvZ19ubWlfdG91Y2gsIGZhbHNlKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMjE4LDcgKzIyMCw3IEBACiAJCWludCB0aGlzX2NwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAogCQkvKiBvbmx5IHByaW50IGhhcmRsb2NrdXBzIG9uY2UgKi8KLQkJaWYgKF9fZ2V0X2NwdV92YXIoaGFyZF93YXRjaGRvZ193YXJuKSA9PSB0cnVlKQorCQlpZiAoX190aGlzX2NwdV9yZWFkKGhhcmRfd2F0Y2hkb2dfd2FybikgPT0gdHJ1ZSkKIAkJCXJldHVybjsKIAogCQlpZiAoaGFyZGxvY2t1cF9wYW5pYykKQEAgLTIyNiwxNiArMjI4LDE2IEBACiAJCWVsc2UKIAkJCVdBUk4oMSwgIldhdGNoZG9nIGRldGVjdGVkIGhhcmQgTE9DS1VQIG9uIGNwdSAlZCIsIHRoaXNfY3B1KTsKIAotCQlfX2dldF9jcHVfdmFyKGhhcmRfd2F0Y2hkb2dfd2FybikgPSB0cnVlOworCQlfX3RoaXNfY3B1X3dyaXRlKGhhcmRfd2F0Y2hkb2dfd2FybiwgdHJ1ZSk7CiAJCXJldHVybjsKIAl9CiAKLQlfX2dldF9jcHVfdmFyKGhhcmRfd2F0Y2hkb2dfd2FybikgPSBmYWxzZTsKKwlfX3RoaXNfY3B1X3dyaXRlKGhhcmRfd2F0Y2hkb2dfd2FybiwgZmFsc2UpOwogCXJldHVybjsKIH0KIHN0YXRpYyB2b2lkIHdhdGNoZG9nX2ludGVycnVwdF9jb3VudCh2b2lkKQogewotCV9fZ2V0X2NwdV92YXIoaHJ0aW1lcl9pbnRlcnJ1cHRzKSsrOworCV9fdGhpc19jcHVfaW5jKGhydGltZXJfaW50ZXJydXB0cyk7CiB9CiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIHdhdGNoZG9nX2ludGVycnVwdF9jb3VudCh2b2lkKSB7IHJldHVybjsgfQpAQCAtMjQ0LDcgKzI0Niw3IEBACiAvKiB3YXRjaGRvZyBraWNrZXIgZnVuY3Rpb25zICovCiBzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgd2F0Y2hkb2dfdGltZXJfZm4oc3RydWN0IGhydGltZXIgKmhydGltZXIpCiB7Ci0JdW5zaWduZWQgbG9uZyB0b3VjaF90cyA9IF9fZ2V0X2NwdV92YXIod2F0Y2hkb2dfdG91Y2hfdHMpOworCXVuc2lnbmVkIGxvbmcgdG91Y2hfdHMgPSBfX3RoaXNfY3B1X3JlYWQod2F0Y2hkb2dfdG91Y2hfdHMpOwogCXN0cnVjdCBwdF9yZWdzICpyZWdzID0gZ2V0X2lycV9yZWdzKCk7CiAJaW50IGR1cmF0aW9uOwogCkBAIC0yNTIsMTggKzI1NCwxOCBAQAogCXdhdGNoZG9nX2ludGVycnVwdF9jb3VudCgpOwogCiAJLyoga2ljayB0aGUgc29mdGxvY2t1cCBkZXRlY3RvciAqLwotCXdha2VfdXBfcHJvY2VzcyhfX2dldF9jcHVfdmFyKHNvZnRsb2NrdXBfd2F0Y2hkb2cpKTsKKwl3YWtlX3VwX3Byb2Nlc3MoX190aGlzX2NwdV9yZWFkKHNvZnRsb2NrdXBfd2F0Y2hkb2cpKTsKIAogCS8qIC4uIGFuZCByZXBlYXQgKi8KIAlocnRpbWVyX2ZvcndhcmRfbm93KGhydGltZXIsIG5zX3RvX2t0aW1lKGdldF9zYW1wbGVfcGVyaW9kKCkpKTsKIAogCWlmICh0b3VjaF90cyA9PSAwKSB7Ci0JCWlmICh1bmxpa2VseShfX2dldF9jcHVfdmFyKHNvZnRsb2NrdXBfdG91Y2hfc3luYykpKSB7CisJCWlmICh1bmxpa2VseShfX3RoaXNfY3B1X3JlYWQoc29mdGxvY2t1cF90b3VjaF9zeW5jKSkpIHsKIAkJCS8qCiAJCQkgKiBJZiB0aGUgdGltZSBzdGFtcCB3YXMgdG91Y2hlZCBhdG9taWNhbGx5CiAJCQkgKiBtYWtlIHN1cmUgdGhlIHNjaGVkdWxlciB0aWNrIGlzIHVwIHRvIGRhdGUuCiAJCQkgKi8KLQkJCV9fZ2V0X2NwdV92YXIoc29mdGxvY2t1cF90b3VjaF9zeW5jKSA9IGZhbHNlOworCQkJX190aGlzX2NwdV93cml0ZShzb2Z0bG9ja3VwX3RvdWNoX3N5bmMsIGZhbHNlKTsKIAkJCXNjaGVkX2Nsb2NrX3RpY2soKTsKIAkJfQogCQlfX3RvdWNoX3dhdGNoZG9nKCk7CkBAIC0yNzksNyArMjgxLDcgQEAKIAlkdXJhdGlvbiA9IGlzX3NvZnRsb2NrdXAodG91Y2hfdHMpOwogCWlmICh1bmxpa2VseShkdXJhdGlvbikpIHsKIAkJLyogb25seSB3YXJuIG9uY2UgKi8KLQkJaWYgKF9fZ2V0X2NwdV92YXIoc29mdF93YXRjaGRvZ193YXJuKSA9PSB0cnVlKQorCQlpZiAoX190aGlzX2NwdV9yZWFkKHNvZnRfd2F0Y2hkb2dfd2FybikgPT0gdHJ1ZSkKIAkJCXJldHVybiBIUlRJTUVSX1JFU1RBUlQ7CiAKIAkJcHJpbnRrKEtFUk5fRVJSICJCVUc6IHNvZnQgbG9ja3VwIC0gQ1BVIyVkIHN0dWNrIGZvciAldXMhIFslczolZF1cbiIsCkBAIC0yOTQsOSArMjk2LDkgQEAKIAogCQlpZiAoc29mdGxvY2t1cF9wYW5pYykKIAkJCXBhbmljKCJzb2Z0bG9ja3VwOiBodW5nIHRhc2tzIik7Ci0JCV9fZ2V0X2NwdV92YXIoc29mdF93YXRjaGRvZ193YXJuKSA9IHRydWU7CisJCV9fdGhpc19jcHVfd3JpdGUoc29mdF93YXRjaGRvZ193YXJuLCB0cnVlKTsKIAl9IGVsc2UKLQkJX19nZXRfY3B1X3Zhcihzb2Z0X3dhdGNoZG9nX3dhcm4pID0gZmFsc2U7CisJCV9fdGhpc19jcHVfd3JpdGUoc29mdF93YXRjaGRvZ193YXJuLCBmYWxzZSk7CiAKIAlyZXR1cm4gSFJUSU1FUl9SRVNUQVJUOwogfQpAQCAtMzA3LDcgKzMwOSw3IEBACiAgKi8KIHN0YXRpYyBpbnQgd2F0Y2hkb2codm9pZCAqdW51c2VkKQogewotCXN0cnVjdCBzY2hlZF9wYXJhbSBwYXJhbSA9IHsgLnNjaGVkX3ByaW9yaXR5ID0gTUFYX1JUX1BSSU8tMSB9OworCXN0YXRpYyBzdHJ1Y3Qgc2NoZWRfcGFyYW0gcGFyYW0gPSB7IC5zY2hlZF9wcmlvcml0eSA9IE1BWF9SVF9QUklPLTEgfTsKIAlzdHJ1Y3QgaHJ0aW1lciAqaHJ0aW1lciA9ICZfX3Jhd19nZXRfY3B1X3Zhcih3YXRjaGRvZ19ocnRpbWVyKTsKIAogCXNjaGVkX3NldHNjaGVkdWxlcihjdXJyZW50LCBTQ0hFRF9GSUZPLCAmcGFyYW0pOwpAQCAtNTQ4LDEzICs1NTAsMTMgQEAKIAkubm90aWZpZXJfY2FsbCA9IGNwdV9jYWxsYmFjawogfTsKIAotc3RhdGljIGludCBfX2luaXQgc3Bhd25fd2F0Y2hkb2dfdGFzayh2b2lkKQordm9pZCBfX2luaXQgbG9ja3VwX2RldGVjdG9yX2luaXQodm9pZCkKIHsKIAl2b2lkICpjcHUgPSAodm9pZCAqKShsb25nKXNtcF9wcm9jZXNzb3JfaWQoKTsKIAlpbnQgZXJyOwogCiAJaWYgKG5vX3dhdGNoZG9nKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuOwogCiAJZXJyID0gY3B1X2NhbGxiYWNrKCZjcHVfbmZiLCBDUFVfVVBfUFJFUEFSRSwgY3B1KTsKIAlXQVJOX09OKG5vdGlmaWVyX3RvX2Vycm5vKGVycikpOwpAQCAtNTYyLDYgKzU2NCw1IEBACiAJY3B1X2NhbGxiYWNrKCZjcHVfbmZiLCBDUFVfT05MSU5FLCBjcHUpOwogCXJlZ2lzdGVyX2NwdV9ub3RpZmllcigmY3B1X25mYik7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm47CiB9Ci1lYXJseV9pbml0Y2FsbChzcGF3bl93YXRjaGRvZ190YXNrKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC93b3JrcXVldWUuYyBiL2tlcm5lbC93b3JrcXVldWUuYwppbmRleCBlNzg1YjBmLi44ZWU2ZWM4IDEwMDY0NAotLS0gYS9rZXJuZWwvd29ya3F1ZXVlLmMKKysrIGIva2VybmVsL3dvcmtxdWV1ZS5jCkBAIC05MzIsNiArOTMyLDM4IEBACiAJCXdha2VfdXBfd29ya2VyKGdjd3EpOwogfQogCisvKgorICogVGVzdCB3aGV0aGVyIEB3b3JrIGlzIGJlaW5nIHF1ZXVlZCBmcm9tIGFub3RoZXIgd29yayBleGVjdXRpbmcgb24gdGhlCisgKiBzYW1lIHdvcmtxdWV1ZS4gIFRoaXMgaXMgcmF0aGVyIGV4cGVuc2l2ZSBhbmQgc2hvdWxkIG9ubHkgYmUgdXNlZCBmcm9tCisgKiBjb2xkIHBhdGhzLgorICovCitzdGF0aWMgYm9vbCBpc19jaGFpbmVkX3dvcmsoc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IGNwdTsKKworCWZvcl9lYWNoX2djd3FfY3B1KGNwdSkgeworCQlzdHJ1Y3QgZ2xvYmFsX2N3cSAqZ2N3cSA9IGdldF9nY3dxKGNwdSk7CisJCXN0cnVjdCB3b3JrZXIgKndvcmtlcjsKKwkJc3RydWN0IGhsaXN0X25vZGUgKnBvczsKKwkJaW50IGk7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmdjd3EtPmxvY2ssIGZsYWdzKTsKKwkJZm9yX2VhY2hfYnVzeV93b3JrZXIod29ya2VyLCBpLCBwb3MsIGdjd3EpIHsKKwkJCWlmICh3b3JrZXItPnRhc2sgIT0gY3VycmVudCkKKwkJCQljb250aW51ZTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdjd3EtPmxvY2ssIGZsYWdzKTsKKwkJCS8qCisJCQkgKiBJJ20gQHdvcmtlciwgbm8gbG9ja2luZyBuZWNlc3NhcnkuICBTZWUgaWYgQHdvcmsKKwkJCSAqIGlzIGhlYWRlZCB0byB0aGUgc2FtZSB3b3JrcXVldWUuCisJCQkgKi8KKwkJCXJldHVybiB3b3JrZXItPmN1cnJlbnRfY3dxLT53cSA9PSB3cTsKKwkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZnY3dxLT5sb2NrLCBmbGFncyk7CisJfQorCXJldHVybiBmYWxzZTsKK30KKwogc3RhdGljIHZvaWQgX19xdWV1ZV93b3JrKHVuc2lnbmVkIGludCBjcHUsIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cSwKIAkJCSBzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CkBAIC05NDMsNyArOTc1LDkgQEAKIAogCWRlYnVnX3dvcmtfYWN0aXZhdGUod29yayk7CiAKLQlpZiAoV0FSTl9PTl9PTkNFKHdxLT5mbGFncyAmIFdRX0RZSU5HKSkKKwkvKiBpZiBkeWluZywgb25seSB3b3JrcyBmcm9tIHRoZSBzYW1lIHdvcmtxdWV1ZSBhcmUgYWxsb3dlZCAqLworCWlmICh1bmxpa2VseSh3cS0+ZmxhZ3MgJiBXUV9EWUlORykgJiYKKwkgICAgV0FSTl9PTl9PTkNFKCFpc19jaGFpbmVkX3dvcmsod3EpKSkKIAkJcmV0dXJuOwogCiAJLyogZGV0ZXJtaW5lIGdjd3EgdG8gdXNlICovCkBAIC0yOTM2LDExICsyOTcwLDM1IEBACiAgKi8KIHZvaWQgZGVzdHJveV93b3JrcXVldWUoc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxKQogeworCXVuc2lnbmVkIGludCBmbHVzaF9jbnQgPSAwOwogCXVuc2lnbmVkIGludCBjcHU7CiAKKwkvKgorCSAqIE1hcmsgQHdxIGR5aW5nIGFuZCBkcmFpbiBhbGwgcGVuZGluZyB3b3Jrcy4gIE9uY2UgV1FfRFlJTkcgaXMKKwkgKiBzZXQsIG9ubHkgY2hhaW4gcXVldWVpbmcgaXMgYWxsb3dlZC4gIElPVywgb25seSBjdXJyZW50bHkKKwkgKiBwZW5kaW5nIG9yIHJ1bm5pbmcgd29yayBpdGVtcyBvbiBAd3EgY2FuIHF1ZXVlIGZ1cnRoZXIgd29yaworCSAqIGl0ZW1zIG9uIGl0LiAgQHdxIGlzIGZsdXNoZWQgcmVwZWF0ZWRseSB1bnRpbCBpdCBiZWNvbWVzIGVtcHR5LgorCSAqIFRoZSBudW1iZXIgb2YgZmx1c2hpbmcgaXMgZGV0ZW1pbmVkIGJ5IHRoZSBkZXB0aCBvZiBjaGFpbmluZyBhbmQKKwkgKiBzaG91bGQgYmUgcmVsYXRpdmVseSBzaG9ydC4gIFdoaW5lIGlmIGl0IHRha2VzIHRvbyBsb25nLgorCSAqLwogCXdxLT5mbGFncyB8PSBXUV9EWUlORzsKK3JlZmx1c2g6CiAJZmx1c2hfd29ya3F1ZXVlKHdxKTsKIAorCWZvcl9lYWNoX2N3cV9jcHUoY3B1LCB3cSkgeworCQlzdHJ1Y3QgY3B1X3dvcmtxdWV1ZV9zdHJ1Y3QgKmN3cSA9IGdldF9jd3EoY3B1LCB3cSk7CisKKwkJaWYgKCFjd3EtPm5yX2FjdGl2ZSAmJiBsaXN0X2VtcHR5KCZjd3EtPmRlbGF5ZWRfd29ya3MpKQorCQkJY29udGludWU7CisKKwkJaWYgKCsrZmx1c2hfY250ID09IDEwIHx8CisJCSAgICAoZmx1c2hfY250ICUgMTAwID09IDAgJiYgZmx1c2hfY250IDw9IDEwMDApKQorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAid29ya3F1ZXVlICVzOiBmbHVzaCBvbiAiCisJCQkgICAgICAgImRlc3RydWN0aW9uIGlzbid0IGNvbXBsZXRlIGFmdGVyICV1IHRyaWVzXG4iLAorCQkJICAgICAgIHdxLT5uYW1lLCBmbHVzaF9jbnQpOworCQlnb3RvIHJlZmx1c2g7CisJfQorCiAJLyoKIAkgKiB3cSBsaXN0IGlzIHVzZWQgdG8gZnJlZXplIHdxLCByZW1vdmUgZnJvbSBsaXN0IGFmdGVyCiAJICogZmx1c2hpbmcgaXMgY29tcGxldGUgaW4gY2FzZSBmcmVlemUgcmFjZXMgdXMuCmRpZmYgLS1naXQgYS9saWIvS2NvbmZpZyBiL2xpYi9LY29uZmlnCmluZGV4IGZhOWJmMmMuLjMxMTZhYTYgMTAwNjQ0Ci0tLSBhL2xpYi9LY29uZmlnCisrKyBiL2xpYi9LY29uZmlnCkBAIC0yMTAsNCArMjEwLDcgQEAKIGNvbmZpZyBMUlVfQ0FDSEUKIAl0cmlzdGF0ZQogCitjb25maWcgQVZFUkFHRQorCWJvb2wKKwogZW5kbWVudQpkaWZmIC0tZ2l0IGEvbGliL0tjb25maWcuZGVidWcgYi9saWIvS2NvbmZpZy5kZWJ1ZwppbmRleCAyOGI0MmI5Li4yZDA1YWRiIDEwMDY0NAotLS0gYS9saWIvS2NvbmZpZy5kZWJ1ZworKysgYi9saWIvS2NvbmZpZy5kZWJ1ZwpAQCAtMTczLDcgKzE3Myw4IEBACiAJICBBbiBOTUkgaXMgZ2VuZXJhdGVkIGV2ZXJ5IDYwIHNlY29uZHMgb3Igc28gdG8gY2hlY2sgZm9yIGhhcmRsb2NrdXBzLgogCiBjb25maWcgSEFSRExPQ0tVUF9ERVRFQ1RPUgotCWRlZl9ib29sIExPQ0tVUF9ERVRFQ1RPUiAmJiBQRVJGX0VWRU5UUyAmJiBIQVZFX1BFUkZfRVZFTlRTX05NSQorCWRlZl9ib29sIExPQ0tVUF9ERVRFQ1RPUiAmJiBQRVJGX0VWRU5UUyAmJiBIQVZFX1BFUkZfRVZFTlRTX05NSSAmJiBcCisJCSAhQVJDSF9IQVNfTk1JX1dBVENIRE9HCiAKIGNvbmZpZyBCT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQwogCWJvb2wgIlBhbmljIChSZWJvb3QpIE9uIFNvZnQgTG9ja3VwcyIKZGlmZiAtLWdpdCBhL2xpYi9NYWtlZmlsZSBiL2xpYi9NYWtlZmlsZQppbmRleCBlNmEzNzYzLi5kN2I2ZTMwIDEwMDY0NAotLS0gYS9saWIvTWFrZWZpbGUKKysrIGIvbGliL01ha2VmaWxlCkBAIC04LDcgKzgsNyBAQAogZW5kaWYKIAogbGliLXkgOj0gY3R5cGUubyBzdHJpbmcubyB2c3ByaW50Zi5vIGNtZGxpbmUubyBcCi0JIHJidHJlZS5vIHJhZGl4LXRyZWUubyBkdW1wX3N0YWNrLm8gXAorCSByYnRyZWUubyByYWRpeC10cmVlLm8gZHVtcF9zdGFjay5vIHRpbWVycXVldWUub1wKIAkgaWRyLm8gaW50X3NxcnQubyBleHRhYmxlLm8gcHJpb190cmVlLm8gXAogCSBzaGExLm8gaXJxX3JlZ3MubyByZWNpcHJvY2FsX2Rpdi5vIGFyZ3Zfc3BsaXQubyBcCiAJIHByb3BvcnRpb25zLm8gcHJpb19oZWFwLm8gcmF0ZWxpbWl0Lm8gc2hvd19tZW0ubyBcCkBAIC0xMDYsNiArMTA2LDggQEAKIAogb2JqLSQoQ09ORklHX0FUT01JQzY0X1NFTEZURVNUKSArPSBhdG9taWM2NF90ZXN0Lm8KIAorb2JqLSQoQ09ORklHX0FWRVJBR0UpICs9IGF2ZXJhZ2UubworCiBob3N0cHJvZ3MteQk6PSBnZW5fY3JjMzJ0YWJsZQogY2xlYW4tZmlsZXMJOj0gY3JjMzJ0YWJsZS5oCiAKZGlmZiAtLWdpdCBhL2xpYi9hdmVyYWdlLmMgYi9saWIvYXZlcmFnZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1NzZjMjgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvYXZlcmFnZS5jCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBsaWIvYXZlcmFnZS5jCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiBWZXJzaW9uIDIuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9hdmVyYWdlLmg+CisjaW5jbHVkZSA8bGludXgvYnVnLmg+CisjaW5jbHVkZSA8bGludXgvbG9nMi5oPgorCisvKioKKyAqIERPQzogRXhwb25lbnRpYWxseSBXZWlnaHRlZCBNb3ZpbmcgQXZlcmFnZSAoRVdNQSkKKyAqCisgKiBUaGVzZSBhcmUgZ2VuZXJpYyBmdW5jdGlvbnMgZm9yIGNhbGN1bGF0aW5nIEV4cG9uZW50aWFsbHkgV2VpZ2h0ZWQgTW92aW5nCisgKiBBdmVyYWdlcyAoRVdNQSkuIFdlIGtlZXAgYSBzdHJ1Y3R1cmUgd2l0aCB0aGUgRVdNQSBwYXJhbWV0ZXJzIGFuZCBhIHNjYWxlZAorICogdXAgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIGF2ZXJhZ2UgdmFsdWUgdG8gcHJldmVudCByb3VuZGluZyBlcnJvcnMuCisgKiBUaGUgZmFjdG9yIGZvciBzY2FsaW5nIHVwIGFuZCB0aGUgZXhwb25lbnRpYWwgd2VpZ2h0IChvciBkZWNheSByYXRlKSBoYXZlIHRvCisgKiBiZSBzcGVjaWZpZWQgdGhydSB0aGUgaW5pdCBmdWN0aW9uLiBUaGUgc3RydWN0dXJlIHNob3VsZCBub3QgYmUgYWNjZXNzZWQKKyAqIGRpcmVjdGx5IGJ1dCBvbmx5IHRocnUgdGhlIGhlbHBlciBmdW5jdGlvbnMuCisgKi8KKworLyoqCisgKiBld21hX2luaXQoKSAtIEluaXRpYWxpemUgRVdNQSBwYXJhbWV0ZXJzCisgKiBAYXZnOiBBdmVyYWdlIHN0cnVjdHVyZQorICogQGZhY3RvcjogRmFjdG9yIHRvIHVzZSBmb3IgdGhlIHNjYWxlZCB1cCBpbnRlcm5hbCB2YWx1ZS4gVGhlIG1heGltdW0gdmFsdWUKKyAqCW9mIGF2ZXJhZ2VzIGNhbiBiZSBVTE9OR19NQVgvKGZhY3Rvcip3ZWlnaHQpLiBGb3IgcGVyZm9ybWFuY2UgcmVhc29ucworICoJZmFjdG9yIGhhcyB0byBiZSBhIHBvd2VyIG9mIDIuCisgKiBAd2VpZ2h0OiBFeHBvbmVudGlhbCB3ZWlnaHQsIG9yIGRlY2F5IHJhdGUuIFRoaXMgZGVmaW5lcyBob3cgZmFzdCB0aGUKKyAqCWluZmx1ZW5jZSBvZiBvbGRlciB2YWx1ZXMgZGVjcmVhc2VzLiBGb3IgcGVyZm9ybWFuY2UgcmVhc29ucyB3ZWlnaHQgaGFzCisgKgl0byBiZSBhIHBvd2VyIG9mIDIuCisgKgorICogSW5pdGlhbGl6ZSB0aGUgRVdNQSBwYXJhbWV0ZXJzIGZvciBhIGdpdmVuIHN0cnVjdCBld21hIEBhdmcuCisgKi8KK3ZvaWQgZXdtYV9pbml0KHN0cnVjdCBld21hICphdmcsIHVuc2lnbmVkIGxvbmcgZmFjdG9yLCB1bnNpZ25lZCBsb25nIHdlaWdodCkKK3sKKwlXQVJOX09OKCFpc19wb3dlcl9vZl8yKHdlaWdodCkgfHwgIWlzX3Bvd2VyX29mXzIoZmFjdG9yKSk7CisKKwlhdmctPndlaWdodCA9IGlsb2cyKHdlaWdodCk7CisJYXZnLT5mYWN0b3IgPSBpbG9nMihmYWN0b3IpOworCWF2Zy0+aW50ZXJuYWwgPSAwOworfQorRVhQT1JUX1NZTUJPTChld21hX2luaXQpOworCisvKioKKyAqIGV3bWFfYWRkKCkgLSBFeHBvbmVudGlhbGx5IHdlaWdodGVkIG1vdmluZyBhdmVyYWdlIChFV01BKQorICogQGF2ZzogQXZlcmFnZSBzdHJ1Y3R1cmUKKyAqIEB2YWw6IEN1cnJlbnQgdmFsdWUKKyAqCisgKiBBZGQgYSBzYW1wbGUgdG8gdGhlIGF2ZXJhZ2UuCisgKi8KK3N0cnVjdCBld21hICpld21hX2FkZChzdHJ1Y3QgZXdtYSAqYXZnLCB1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwlhdmctPmludGVybmFsID0gYXZnLT5pbnRlcm5hbCAgPworCQkoKChhdmctPmludGVybmFsIDw8IGF2Zy0+d2VpZ2h0KSAtIGF2Zy0+aW50ZXJuYWwpICsKKwkJCSh2YWwgPDwgYXZnLT5mYWN0b3IpKSA+PiBhdmctPndlaWdodCA6CisJCSh2YWwgPDwgYXZnLT5mYWN0b3IpOworCXJldHVybiBhdmc7Cit9CitFWFBPUlRfU1lNQk9MKGV3bWFfYWRkKTsKZGlmZiAtLWdpdCBhL2xpYi9ubGF0dHIuYyBiL2xpYi9ubGF0dHIuYwppbmRleCBjNDcwNmViLi4wMGU4YTAyIDEwMDY0NAotLS0gYS9saWIvbmxhdHRyLmMKKysrIGIvbGliL25sYXR0ci5jCkBAIC0xNSw3ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxuZXQvbmV0bGluay5oPgogCi1zdGF0aWMgdTE2IG5sYV9hdHRyX21pbmxlbltOTEFfVFlQRV9NQVgrMV0gX19yZWFkX21vc3RseSA9IHsKK3N0YXRpYyBjb25zdCB1MTYgbmxhX2F0dHJfbWlubGVuW05MQV9UWVBFX01BWCsxXSA9IHsKIAlbTkxBX1U4XQk9IHNpemVvZih1OCksCiAJW05MQV9VMTZdCT0gc2l6ZW9mKHUxNiksCiAJW05MQV9VMzJdCT0gc2l6ZW9mKHUzMiksCkBAIC0yMyw3ICsyMyw3IEBACiAJW05MQV9ORVNURURdCT0gTkxBX0hEUkxFTiwKIH07CiAKLXN0YXRpYyBpbnQgdmFsaWRhdGVfbmxhKHN0cnVjdCBubGF0dHIgKm5sYSwgaW50IG1heHR5cGUsCitzdGF0aWMgaW50IHZhbGlkYXRlX25sYShjb25zdCBzdHJ1Y3QgbmxhdHRyICpubGEsIGludCBtYXh0eXBlLAogCQkJY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgKnBvbGljeSkKIHsKIAljb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSAqcHQ7CkBAIC0xMTUsMTAgKzExNSwxMCBAQAogICoKICAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZS4KICAqLwotaW50IG5sYV92YWxpZGF0ZShzdHJ1Y3QgbmxhdHRyICpoZWFkLCBpbnQgbGVuLCBpbnQgbWF4dHlwZSwKK2ludCBubGFfdmFsaWRhdGUoY29uc3Qgc3RydWN0IG5sYXR0ciAqaGVhZCwgaW50IGxlbiwgaW50IG1heHR5cGUsCiAJCSBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSAqcG9saWN5KQogewotCXN0cnVjdCBubGF0dHIgKm5sYTsKKwljb25zdCBzdHJ1Y3QgbmxhdHRyICpubGE7CiAJaW50IHJlbSwgZXJyOwogCiAJbmxhX2Zvcl9lYWNoX2F0dHIobmxhLCBoZWFkLCBsZW4sIHJlbSkgewpAQCAtMTczLDEwICsxNzMsMTAgQEAKICAqCiAgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuCiAgKi8KLWludCBubGFfcGFyc2Uoc3RydWN0IG5sYXR0ciAqdGJbXSwgaW50IG1heHR5cGUsIHN0cnVjdCBubGF0dHIgKmhlYWQsIGludCBsZW4sCi0JICAgICAgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgKnBvbGljeSkKK2ludCBubGFfcGFyc2Uoc3RydWN0IG5sYXR0ciAqKnRiLCBpbnQgbWF4dHlwZSwgY29uc3Qgc3RydWN0IG5sYXR0ciAqaGVhZCwKKwkgICAgICBpbnQgbGVuLCBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSAqcG9saWN5KQogewotCXN0cnVjdCBubGF0dHIgKm5sYTsKKwljb25zdCBzdHJ1Y3QgbmxhdHRyICpubGE7CiAJaW50IHJlbSwgZXJyOwogCiAJbWVtc2V0KHRiLCAwLCBzaXplb2Yoc3RydWN0IG5sYXR0ciAqKSAqIChtYXh0eXBlICsgMSkpOwpAQCAtMTkxLDcgKzE5MSw3IEBACiAJCQkJCWdvdG8gZXJyb3V0OwogCQkJfQogCi0JCQl0Ylt0eXBlXSA9IG5sYTsKKwkJCXRiW3R5cGVdID0gKHN0cnVjdCBubGF0dHIgKilubGE7CiAJCX0KIAl9CiAKQEAgLTIxMiwxNCArMjEyLDE0IEBACiAgKgogICogUmV0dXJucyB0aGUgZmlyc3QgYXR0cmlidXRlIGluIHRoZSBzdHJlYW0gbWF0Y2hpbmcgdGhlIHNwZWNpZmllZCB0eXBlLgogICovCi1zdHJ1Y3QgbmxhdHRyICpubGFfZmluZChzdHJ1Y3QgbmxhdHRyICpoZWFkLCBpbnQgbGVuLCBpbnQgYXR0cnR5cGUpCitzdHJ1Y3QgbmxhdHRyICpubGFfZmluZChjb25zdCBzdHJ1Y3QgbmxhdHRyICpoZWFkLCBpbnQgbGVuLCBpbnQgYXR0cnR5cGUpCiB7Ci0Jc3RydWN0IG5sYXR0ciAqbmxhOworCWNvbnN0IHN0cnVjdCBubGF0dHIgKm5sYTsKIAlpbnQgcmVtOwogCiAJbmxhX2Zvcl9lYWNoX2F0dHIobmxhLCBoZWFkLCBsZW4sIHJlbSkKIAkJaWYgKG5sYV90eXBlKG5sYSkgPT0gYXR0cnR5cGUpCi0JCQlyZXR1cm4gbmxhOworCQkJcmV0dXJuIChzdHJ1Y3QgbmxhdHRyICopbmxhOwogCiAJcmV0dXJuIE5VTEw7CiB9CmRpZmYgLS1naXQgYS9saWIvcGVyY3B1X2NvdW50ZXIuYyBiL2xpYi9wZXJjcHVfY291bnRlci5jCmluZGV4IDYwNDY3OGQuLjI4ZjJjMzMgMTAwNjQ0Ci0tLSBhL2xpYi9wZXJjcHVfY291bnRlci5jCisrKyBiL2xpYi9wZXJjcHVfY291bnRlci5jCkBAIC03MiwxOCArNzIsMTYgQEAKIHZvaWQgX19wZXJjcHVfY291bnRlcl9hZGQoc3RydWN0IHBlcmNwdV9jb3VudGVyICpmYmMsIHM2NCBhbW91bnQsIHMzMiBiYXRjaCkKIHsKIAlzNjQgY291bnQ7Ci0JczMyICpwY291bnQ7CiAKIAlwcmVlbXB0X2Rpc2FibGUoKTsKLQlwY291bnQgPSB0aGlzX2NwdV9wdHIoZmJjLT5jb3VudGVycyk7Ci0JY291bnQgPSAqcGNvdW50ICsgYW1vdW50OworCWNvdW50ID0gX190aGlzX2NwdV9yZWFkKCpmYmMtPmNvdW50ZXJzKSArIGFtb3VudDsKIAlpZiAoY291bnQgPj0gYmF0Y2ggfHwgY291bnQgPD0gLWJhdGNoKSB7CiAJCXNwaW5fbG9jaygmZmJjLT5sb2NrKTsKIAkJZmJjLT5jb3VudCArPSBjb3VudDsKLQkJKnBjb3VudCA9IDA7CisJCV9fdGhpc19jcHVfd3JpdGUoKmZiYy0+Y291bnRlcnMsIDApOwogCQlzcGluX3VubG9jaygmZmJjLT5sb2NrKTsKIAl9IGVsc2UgewotCQkqcGNvdW50ID0gY291bnQ7CisJCV9fdGhpc19jcHVfd3JpdGUoKmZiYy0+Y291bnRlcnMsIGNvdW50KTsKIAl9CiAJcHJlZW1wdF9lbmFibGUoKTsKIH0KZGlmZiAtLWdpdCBhL2xpYi90aW1lcnF1ZXVlLmMgYi9saWIvdGltZXJxdWV1ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzYTEwNTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvdGltZXJxdWV1ZS5jCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogIEdlbmVyaWMgVGltZXItcXVldWUKKyAqCisgKiAgTWFuYWdlcyBhIHNpbXBsZSBxdWV1ZSBvZiB0aW1lcnMsIG9yZGVyZWQgYnkgZXhwaXJhdGlvbiB0aW1lLgorICogIFVzZXMgcmJ0cmVlcyBmb3IgcXVpY2sgbGlzdCBhZGRzIGFuZCBleHBpcmF0aW9uLgorICoKKyAqICBOT1RFOiBBbGwgb2YgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgbmVlZCB0byBiZSBzZXJpYWxpemVkCisgKiAgdG8gYXZvaWQgcmFjZXMuIE5vIGxvY2tpbmcgaXMgZG9uZSBieSB0aGlzIGxpYmFyeSBjb2RlLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC90aW1lcnF1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvcmJ0cmVlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKKy8qKgorICogdGltZXJxdWV1ZV9hZGQgLSBBZGRzIHRpbWVyIHRvIHRpbWVycXVldWUuCisgKgorICogQGhlYWQ6IGhlYWQgb2YgdGltZXJxdWV1ZQorICogQG5vZGU6IHRpbWVyIG5vZGUgdG8gYmUgYWRkZWQKKyAqCisgKiBBZGRzIHRoZSB0aW1lciBub2RlIHRvIHRoZSB0aW1lcnF1ZXVlLCBzb3J0ZWQgYnkgdGhlCisgKiBub2RlJ3MgZXhwaXJlcyB2YWx1ZS4KKyAqLwordm9pZCB0aW1lcnF1ZXVlX2FkZChzdHJ1Y3QgdGltZXJxdWV1ZV9oZWFkICpoZWFkLCBzdHJ1Y3QgdGltZXJxdWV1ZV9ub2RlICpub2RlKQoreworCXN0cnVjdCByYl9ub2RlICoqcCA9ICZoZWFkLT5oZWFkLnJiX25vZGU7CisJc3RydWN0IHJiX25vZGUgKnBhcmVudCA9IE5VTEw7CisJc3RydWN0IHRpbWVycXVldWVfbm9kZSAgKnB0cjsKKworCS8qIE1ha2Ugc3VyZSB3ZSBkb24ndCBhZGQgbm9kZXMgdGhhdCBhcmUgYWxyZWFkeSBhZGRlZCAqLworCVdBUk5fT05fT05DRSghUkJfRU1QVFlfTk9ERSgmbm9kZS0+bm9kZSkpOworCisJd2hpbGUgKCpwKSB7CisJCXBhcmVudCA9ICpwOworCQlwdHIgPSByYl9lbnRyeShwYXJlbnQsIHN0cnVjdCB0aW1lcnF1ZXVlX25vZGUsIG5vZGUpOworCQlpZiAobm9kZS0+ZXhwaXJlcy50djY0IDwgcHRyLT5leHBpcmVzLnR2NjQpCisJCQlwID0gJigqcCktPnJiX2xlZnQ7CisJCWVsc2UKKwkJCXAgPSAmKCpwKS0+cmJfcmlnaHQ7CisJfQorCXJiX2xpbmtfbm9kZSgmbm9kZS0+bm9kZSwgcGFyZW50LCBwKTsKKwlyYl9pbnNlcnRfY29sb3IoJm5vZGUtPm5vZGUsICZoZWFkLT5oZWFkKTsKKworCWlmICghaGVhZC0+bmV4dCB8fCBub2RlLT5leHBpcmVzLnR2NjQgPCBoZWFkLT5uZXh0LT5leHBpcmVzLnR2NjQpCisJCWhlYWQtPm5leHQgPSBub2RlOworfQorRVhQT1JUX1NZTUJPTF9HUEwodGltZXJxdWV1ZV9hZGQpOworCisvKioKKyAqIHRpbWVycXVldWVfZGVsIC0gUmVtb3ZlcyBhIHRpbWVyIGZyb20gdGhlIHRpbWVycXVldWUuCisgKgorICogQGhlYWQ6IGhlYWQgb2YgdGltZXJxdWV1ZQorICogQG5vZGU6IHRpbWVyIG5vZGUgdG8gYmUgcmVtb3ZlZAorICoKKyAqIFJlbW92ZXMgdGhlIHRpbWVyIG5vZGUgZnJvbSB0aGUgdGltZXJxdWV1ZS4KKyAqLwordm9pZCB0aW1lcnF1ZXVlX2RlbChzdHJ1Y3QgdGltZXJxdWV1ZV9oZWFkICpoZWFkLCBzdHJ1Y3QgdGltZXJxdWV1ZV9ub2RlICpub2RlKQoreworCVdBUk5fT05fT05DRShSQl9FTVBUWV9OT0RFKCZub2RlLT5ub2RlKSk7CisKKwkvKiB1cGRhdGUgbmV4dCBwb2ludGVyICovCisJaWYgKGhlYWQtPm5leHQgPT0gbm9kZSkgeworCQlzdHJ1Y3QgcmJfbm9kZSAqcmJuID0gcmJfbmV4dCgmbm9kZS0+bm9kZSk7CisKKwkJaGVhZC0+bmV4dCA9IHJibiA/CisJCQlyYl9lbnRyeShyYm4sIHN0cnVjdCB0aW1lcnF1ZXVlX25vZGUsIG5vZGUpIDogTlVMTDsKKwl9CisJcmJfZXJhc2UoJm5vZGUtPm5vZGUsICZoZWFkLT5oZWFkKTsKKwlSQl9DTEVBUl9OT0RFKCZub2RlLT5ub2RlKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHRpbWVycXVldWVfZGVsKTsKKworLyoqCisgKiB0aW1lcnF1ZXVlX2l0ZXJhdGVfbmV4dCAtIFJldHVybnMgdGhlIHRpbWVyIGFmdGVyIHRoZSBwcm92aWRlZCB0aW1lcgorICoKKyAqIEBub2RlOiBQb2ludGVyIHRvIGEgdGltZXIuCisgKgorICogUHJvdmlkZXMgdGhlIHRpbWVyIHRoYXQgaXMgYWZ0ZXIgdGhlIGdpdmVuIG5vZGUuIFRoaXMgaXMgdXNlZCwgd2hlbgorICogbmVjZXNzYXJ5LCB0byBpdGVyYXRlIHRocm91Z2ggdGhlIGxpc3Qgb2YgdGltZXJzIGluIGEgdGltZXIgbGlzdAorICogd2l0aG91dCBtb2RpZnlpbmcgdGhlIGxpc3QuCisgKi8KK3N0cnVjdCB0aW1lcnF1ZXVlX25vZGUgKnRpbWVycXVldWVfaXRlcmF0ZV9uZXh0KHN0cnVjdCB0aW1lcnF1ZXVlX25vZGUgKm5vZGUpCit7CisJc3RydWN0IHJiX25vZGUgKm5leHQ7CisKKwlpZiAoIW5vZGUpCisJCXJldHVybiBOVUxMOworCW5leHQgPSByYl9uZXh0KCZub2RlLT5ub2RlKTsKKwlpZiAoIW5leHQpCisJCXJldHVybiBOVUxMOworCXJldHVybiBjb250YWluZXJfb2YobmV4dCwgc3RydWN0IHRpbWVycXVldWVfbm9kZSwgbm9kZSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh0aW1lcnF1ZXVlX2l0ZXJhdGVfbmV4dCk7CmRpZmYgLS1naXQgYS9tbS9maWxlbWFwLmMgYi9tbS9maWxlbWFwLmMKaW5kZXggNmI5YWVlMi4uY2EzODkzOSAxMDA2NDQKLS0tIGEvbW0vZmlsZW1hcC5jCisrKyBiL21tL2ZpbGVtYXAuYwpAQCAtMTAyLDkgKzEwMiw2IEBACiAgKiAgICAtPmlub2RlX2xvY2sJCSh6YXBfcHRlX3JhbmdlLT5zZXRfcGFnZV9kaXJ0eSkKICAqICAgIC0+cHJpdmF0ZV9sb2NrCQkoemFwX3B0ZV9yYW5nZS0+X19zZXRfcGFnZV9kaXJ0eV9idWZmZXJzKQogICoKLSAqICAtPnRhc2stPnByb2NfbG9jawotICogICAgLT5kY2FjaGVfbG9jawkJKHByb2NfcGlkX2xvb2t1cCkKLSAqCiAgKiAgKGNvZGUgZG9lc24ndCByZWx5IG9uIHRoYXQgb3JkZXIsIHNvIHlvdSBjb3VsZCBzd2l0Y2ggaXQgYXJvdW5kKQogICogIC0+dGFza2xpc3RfbG9jayAgICAgICAgICAgICAobWVtb3J5X2ZhaWx1cmUsIGNvbGxlY3RfcHJvY3NfYW8pCiAgKiAgICAtPmlfbW1hcF9sb2NrCmRpZmYgLS1naXQgYS9tbS9wZXJjcHUuYyBiL21tL3BlcmNwdS5jCmluZGV4IDAyYmE5MTIuLjNkZDQ5ODQgMTAwNjQ0Ci0tLSBhL21tL3BlcmNwdS5jCisrKyBiL21tL3BlcmNwdS5jCkBAIC0yOTMsMTIgKzI5Myw4IEBACiAKIAlpZiAoc2l6ZSA8PSBQQUdFX1NJWkUpCiAJCXJldHVybiBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwotCWVsc2UgewotCQl2b2lkICpwdHIgPSB2bWFsbG9jKHNpemUpOwotCQlpZiAocHRyKQotCQkJbWVtc2V0KHB0ciwgMCwgc2l6ZSk7Ci0JCXJldHVybiBwdHI7Ci0JfQorCWVsc2UKKwkJcmV0dXJuIHZ6YWxsb2Moc2l6ZSk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmMKaW5kZXggNDdmZGVlYi4uNWVlNjdjOSAxMDA2NDQKLS0tIGEvbW0vc2htZW0uYworKysgYi9tbS9zaG1lbS5jCkBAIC0yNDE1LDEzICsyNDE1LDIwIEBACiAJcmV0dXJuICZwLT52ZnNfaW5vZGU7CiB9CiAKK3N0YXRpYyB2b2lkIHNobWVtX2lfY2FsbGJhY2soc3RydWN0IHJjdV9oZWFkICpoZWFkKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGlub2RlLCBpX3JjdSk7CisJSU5JVF9MSVNUX0hFQUQoJmlub2RlLT5pX2RlbnRyeSk7CisJa21lbV9jYWNoZV9mcmVlKHNobWVtX2lub2RlX2NhY2hlcCwgU0hNRU1fSShpbm9kZSkpOworfQorCiBzdGF0aWMgdm9pZCBzaG1lbV9kZXN0cm95X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJaWYgKChpbm9kZS0+aV9tb2RlICYgU19JRk1UKSA9PSBTX0lGUkVHKSB7CiAJCS8qIG9ubHkgc3RydWN0IGlub2RlIGlzIHZhbGlkIGlmIGl0J3MgYW4gaW5saW5lIHN5bWxpbmsgKi8KIAkJbXBvbF9mcmVlX3NoYXJlZF9wb2xpY3koJlNITUVNX0koaW5vZGUpLT5wb2xpY3kpOwogCX0KLQlrbWVtX2NhY2hlX2ZyZWUoc2htZW1faW5vZGVfY2FjaGVwLCBTSE1FTV9JKGlub2RlKSk7CisJY2FsbF9yY3UoJmlub2RlLT5pX3JjdSwgc2htZW1faV9jYWxsYmFjayk7CiB9CiAKIHN0YXRpYyB2b2lkIGluaXRfb25jZSh2b2lkICpmb28pCmRpZmYgLS1naXQgYS9tbS9zbGFiLmMgYi9tbS9zbGFiLmMKaW5kZXggZGZjYzg4OC4uMjY0MDM3NCAxMDA2NDQKLS0tIGEvbW0vc2xhYi5jCisrKyBiL21tL3NsYWIuYwpAQCAtODI5LDEyICs4MjksMTIgQEAKIAogc3RhdGljIHZvaWQgbmV4dF9yZWFwX25vZGUodm9pZCkKIHsKLQlpbnQgbm9kZSA9IF9fZ2V0X2NwdV92YXIoc2xhYl9yZWFwX25vZGUpOworCWludCBub2RlID0gX190aGlzX2NwdV9yZWFkKHNsYWJfcmVhcF9ub2RlKTsKIAogCW5vZGUgPSBuZXh0X25vZGUobm9kZSwgbm9kZV9vbmxpbmVfbWFwKTsKIAlpZiAodW5saWtlbHkobm9kZSA+PSBNQVhfTlVNTk9ERVMpKQogCQlub2RlID0gZmlyc3Rfbm9kZShub2RlX29ubGluZV9tYXApOwotCV9fZ2V0X2NwdV92YXIoc2xhYl9yZWFwX25vZGUpID0gbm9kZTsKKwlfX3RoaXNfY3B1X3dyaXRlKHNsYWJfcmVhcF9ub2RlLCBub2RlKTsKIH0KIAogI2Vsc2UKQEAgLTEwMTIsNyArMTAxMiw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIHJlYXBfYWxpZW4oc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwgc3RydWN0IGttZW1fbGlzdDMgKmwzKQogewotCWludCBub2RlID0gX19nZXRfY3B1X3ZhcihzbGFiX3JlYXBfbm9kZSk7CisJaW50IG5vZGUgPSBfX3RoaXNfY3B1X3JlYWQoc2xhYl9yZWFwX25vZGUpOwogCiAJaWYgKGwzLT5hbGllbikgewogCQlzdHJ1Y3QgYXJyYXlfY2FjaGUgKmFjID0gbDMtPmFsaWVuW25vZGVdOwpAQCAtMTI5Myw3ICsxMjkzLDcgQEAKIAkJICogYW55dGhpbmcgZXhwZW5zaXZlIGJ1dCB3aWxsIG9ubHkgbW9kaWZ5IHJlYXBfd29yawogCQkgKiBhbmQgcmVzY2hlZHVsZSB0aGUgdGltZXIuCiAJCSovCi0JCWNhbmNlbF9yZWFybWluZ19kZWxheWVkX3dvcmsoJnBlcl9jcHUoc2xhYl9yZWFwX3dvcmssIGNwdSkpOworCQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnBlcl9jcHUoc2xhYl9yZWFwX3dvcmssIGNwdSkpOwogCQkvKiBOb3cgdGhlIGNhY2hlX3JlYXBlciBpcyBndWFyYW50ZWVkIHRvIGJlIG5vdCBydW5uaW5nLiAqLwogCQlwZXJfY3B1KHNsYWJfcmVhcF93b3JrLCBjcHUpLndvcmsuZnVuYyA9IE5VTEw7CiAgIAkJYnJlYWs7CkBAIC0yNzgxLDcgKzI3ODEsNyBAQAogLyoKICAqIE1hcCBwYWdlcyBiZWdpbm5pbmcgYXQgYWRkciB0byB0aGUgZ2l2ZW4gY2FjaGUgYW5kIHNsYWIuIFRoaXMgaXMgcmVxdWlyZWQKICAqIGZvciB0aGUgc2xhYiBhbGxvY2F0b3IgdG8gYmUgYWJsZSB0byBsb29rdXAgdGhlIGNhY2hlIGFuZCBzbGFiIG9mIGEKLSAqIHZpcnR1YWwgYWRkcmVzcyBmb3Iga2ZyZWUsIGtzaXplLCBrbWVtX3B0cl92YWxpZGF0ZSwgYW5kIHNsYWIgZGVidWdnaW5nLgorICogdmlydHVhbCBhZGRyZXNzIGZvciBrZnJlZSwga3NpemUsIGFuZCBzbGFiIGRlYnVnZ2luZy4KICAqLwogc3RhdGljIHZvaWQgc2xhYl9tYXBfcGFnZXMoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwKIAkJCSAgIHZvaWQgKmFkZHIpCkBAIC0zNjY3LDM2ICszNjY3LDYgQEAKIEVYUE9SVF9TWU1CT0woa21lbV9jYWNoZV9hbGxvY190cmFjZSk7CiAjZW5kaWYKIAotLyoqCi0gKiBrbWVtX3B0cl92YWxpZGF0ZSAtIGNoZWNrIGlmIGFuIHVudHJ1c3RlZCBwb2ludGVyIG1pZ2h0IGJlIGEgc2xhYiBlbnRyeS4KLSAqIEBjYWNoZXA6IHRoZSBjYWNoZSB3ZSdyZSBjaGVja2luZyBhZ2FpbnN0Ci0gKiBAcHRyOiBwb2ludGVyIHRvIHZhbGlkYXRlCi0gKgotICogVGhpcyB2ZXJpZmllcyB0aGF0IHRoZSB1bnRydXN0ZWQgcG9pbnRlciBsb29rcyBzYW5lOwotICogaXQgaXMgX25vdF8gYSBndWFyYW50ZWUgdGhhdCB0aGUgcG9pbnRlciBpcyBhY3R1YWxseQotICogcGFydCBvZiB0aGUgc2xhYiBjYWNoZSBpbiBxdWVzdGlvbiwgYnV0IGl0IGF0IGxlYXN0Ci0gKiB2YWxpZGF0ZXMgdGhhdCB0aGUgcG9pbnRlciBjYW4gYmUgZGVyZWZlcmVuY2VkIGFuZAotICogbG9va3MgaGFsZi13YXkgc2FuZS4KLSAqCi0gKiBDdXJyZW50bHkgb25seSB1c2VkIGZvciBkZW50cnkgdmFsaWRhdGlvbi4KLSAqLwotaW50IGttZW1fcHRyX3ZhbGlkYXRlKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAsIGNvbnN0IHZvaWQgKnB0cikKLXsKLQl1bnNpZ25lZCBsb25nIHNpemUgPSBjYWNoZXAtPmJ1ZmZlcl9zaXplOwotCXN0cnVjdCBwYWdlICpwYWdlOwotCi0JaWYgKHVubGlrZWx5KCFrZXJuX3B0cl92YWxpZGF0ZShwdHIsIHNpemUpKSkKLQkJZ290byBvdXQ7Ci0JcGFnZSA9IHZpcnRfdG9fcGFnZShwdHIpOwotCWlmICh1bmxpa2VseSghUGFnZVNsYWIocGFnZSkpKQotCQlnb3RvIG91dDsKLQlpZiAodW5saWtlbHkocGFnZV9nZXRfY2FjaGUocGFnZSkgIT0gY2FjaGVwKSkKLQkJZ290byBvdXQ7Ci0JcmV0dXJuIDE7Ci1vdXQ6Ci0JcmV0dXJuIDA7Ci19Ci0KICNpZmRlZiBDT05GSUdfTlVNQQogdm9pZCAqa21lbV9jYWNoZV9hbGxvY19ub2RlKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAsIGdmcF90IGZsYWdzLCBpbnQgbm9kZWlkKQogewpkaWZmIC0tZ2l0IGEvbW0vc2xvYi5jIGIvbW0vc2xvYi5jCmluZGV4IDYxN2I2ZDYuLjM1ODhlYWEgMTAwNjQ0Ci0tLSBhL21tL3Nsb2IuYworKysgYi9tbS9zbG9iLmMKQEAgLTY3OCwxMSArNjc4LDYgQEAKIH0KIEVYUE9SVF9TWU1CT0woa21lbV9jYWNoZV9zaHJpbmspOwogCi1pbnQga21lbV9wdHJfdmFsaWRhdGUoc3RydWN0IGttZW1fY2FjaGUgKmEsIGNvbnN0IHZvaWQgKmIpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2xvYl9yZWFkeSBfX3JlYWRfbW9zdGx5OwogCiBpbnQgc2xhYl9pc19hdmFpbGFibGUodm9pZCkKZGlmZiAtLWdpdCBhL21tL3NsdWIuYyBiL21tL3NsdWIuYwppbmRleCA0OGQ4MmE1Li4wMDhjZDc0IDEwMDY0NAotLS0gYS9tbS9zbHViLmMKKysrIGIvbW0vc2x1Yi5jCkBAIC0xOTMzLDE3ICsxOTMzLDYgQEAKIH0KIEVYUE9SVF9TWU1CT0woa21lbV9jYWNoZV9mcmVlKTsKIAotLyogRmlndXJlIG91dCBvbiB3aGljaCBzbGFiIHBhZ2UgdGhlIG9iamVjdCByZXNpZGVzICovCi1zdGF0aWMgc3RydWN0IHBhZ2UgKmdldF9vYmplY3RfcGFnZShjb25zdCB2b2lkICp4KQotewotCXN0cnVjdCBwYWdlICpwYWdlID0gdmlydF90b19oZWFkX3BhZ2UoeCk7Ci0KLQlpZiAoIVBhZ2VTbGFiKHBhZ2UpKQotCQlyZXR1cm4gTlVMTDsKLQotCXJldHVybiBwYWdlOwotfQotCiAvKgogICogT2JqZWN0IHBsYWNlbWVudCBpbiBhIHNsYWIgaXMgbWFkZSB2ZXJ5IGVhc3kgYmVjYXVzZSB3ZSBhbHdheXMgc3RhcnQgYXQKICAqIG9mZnNldCAwLiBJZiB3ZSB0dW5lIHRoZSBzaXplIG9mIHRoZSBvYmplY3QgdG8gdGhlIGFsaWdubWVudCB0aGVuIHdlIGNhbgpAQCAtMjQwMiwzNSArMjM5MSw2IEBACiB9CiAKIC8qCi0gKiBDaGVjayBpZiBhIGdpdmVuIHBvaW50ZXIgaXMgdmFsaWQKLSAqLwotaW50IGttZW1fcHRyX3ZhbGlkYXRlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBjb25zdCB2b2lkICpvYmplY3QpCi17Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7Ci0KLQlpZiAoIWtlcm5fcHRyX3ZhbGlkYXRlKG9iamVjdCwgcy0+c2l6ZSkpCi0JCXJldHVybiAwOwotCi0JcGFnZSA9IGdldF9vYmplY3RfcGFnZShvYmplY3QpOwotCi0JaWYgKCFwYWdlIHx8IHMgIT0gcGFnZS0+c2xhYikKLQkJLyogTm8gc2xhYiBvciB3cm9uZyBzbGFiICovCi0JCXJldHVybiAwOwotCi0JaWYgKCFjaGVja192YWxpZF9wb2ludGVyKHMsIHBhZ2UsIG9iamVjdCkpCi0JCXJldHVybiAwOwotCi0JLyoKLQkgKiBXZSBjb3VsZCBhbHNvIGNoZWNrIGlmIHRoZSBvYmplY3QgaXMgb24gdGhlIHNsYWJzIGZyZWVsaXN0LgotCSAqIEJ1dCB0aGlzIHdvdWxkIGJlIHRvbyBleHBlbnNpdmUgYW5kIGl0IHNlZW1zIHRoYXQgdGhlIG1haW4KLQkgKiBwdXJwb3NlIG9mIGttZW1fcHRyX3ZhbGlkKCkgaXMgdG8gY2hlY2sgaWYgdGhlIG9iamVjdCBiZWxvbmdzCi0JICogdG8gYSBjZXJ0YWluIHNsYWIuCi0JICovCi0JcmV0dXJuIDE7Ci19Ci1FWFBPUlRfU1lNQk9MKGttZW1fcHRyX3ZhbGlkYXRlKTsKLQotLyoKICAqIERldGVybWluZSB0aGUgc2l6ZSBvZiBhIHNsYWIgb2JqZWN0CiAgKi8KIHVuc2lnbmVkIGludCBrbWVtX2NhY2hlX3NpemUoc3RydWN0IGttZW1fY2FjaGUgKnMpCmRpZmYgLS1naXQgYS9tbS91dGlsLmMgYi9tbS91dGlsLmMKaW5kZXggNzNkYWM4MS4uZjEyNjk3NSAxMDA2NDQKLS0tIGEvbW0vdXRpbC5jCisrKyBiL21tL3V0aWwuYwpAQCAtMTg2LDI3ICsxODYsNiBAQAogfQogRVhQT1JUX1NZTUJPTChremZyZWUpOwogCi1pbnQga2Vybl9wdHJfdmFsaWRhdGUoY29uc3Qgdm9pZCAqcHRyLCB1bnNpZ25lZCBsb25nIHNpemUpCi17Ci0JdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpcHRyOwotCXVuc2lnbmVkIGxvbmcgbWluX2FkZHIgPSBQQUdFX09GRlNFVDsKLQl1bnNpZ25lZCBsb25nIGFsaWduX21hc2sgPSBzaXplb2Yodm9pZCAqKSAtIDE7Ci0KLQlpZiAodW5saWtlbHkoYWRkciA8IG1pbl9hZGRyKSkKLQkJZ290byBvdXQ7Ci0JaWYgKHVubGlrZWx5KGFkZHIgPiAodW5zaWduZWQgbG9uZyloaWdoX21lbW9yeSAtIHNpemUpKQotCQlnb3RvIG91dDsKLQlpZiAodW5saWtlbHkoYWRkciAmIGFsaWduX21hc2spKQotCQlnb3RvIG91dDsKLQlpZiAodW5saWtlbHkoIWtlcm5fYWRkcl92YWxpZChhZGRyKSkpCi0JCWdvdG8gb3V0OwotCWlmICh1bmxpa2VseSgha2Vybl9hZGRyX3ZhbGlkKGFkZHIgKyBzaXplIC0gMSkpKQotCQlnb3RvIG91dDsKLQlyZXR1cm4gMTsKLW91dDoKLQlyZXR1cm4gMDsKLX0KLQogLyoKICAqIHN0cm5kdXBfdXNlciAtIGR1cGxpY2F0ZSBhbiBleGlzdGluZyBzdHJpbmcgZnJvbSB1c2VyIHNwYWNlCiAgKiBAczogVGhlIHN0cmluZyB0byBkdXBsaWNhdGUKZGlmZiAtLWdpdCBhL21tL3Ztc3RhdC5jIGIvbW0vdm1zdGF0LmMKaW5kZXggOGY2MmYxNy4uMzEyZDcyOCAxMDA2NDQKLS0tIGEvbW0vdm1zdGF0LmMKKysrIGIvbW0vdm1zdGF0LmMKQEAgLTE2NywzNiArMTY3LDI0IEBACiB2b2lkIF9fbW9kX3pvbmVfcGFnZV9zdGF0ZShzdHJ1Y3Qgem9uZSAqem9uZSwgZW51bSB6b25lX3N0YXRfaXRlbSBpdGVtLAogCQkJCWludCBkZWx0YSkKIHsKLQlzdHJ1Y3QgcGVyX2NwdV9wYWdlc2V0ICpwY3AgPSB0aGlzX2NwdV9wdHIoem9uZS0+cGFnZXNldCk7Ci0KLQlzOCAqcCA9IHBjcC0+dm1fc3RhdF9kaWZmICsgaXRlbTsKKwlzdHJ1Y3QgcGVyX2NwdV9wYWdlc2V0IF9fcGVyY3B1ICpwY3AgPSB6b25lLT5wYWdlc2V0OworCXM4IF9fcGVyY3B1ICpwID0gcGNwLT52bV9zdGF0X2RpZmYgKyBpdGVtOwogCWxvbmcgeDsKKwlsb25nIHQ7CiAKLQl4ID0gZGVsdGEgKyAqcDsKKwl4ID0gZGVsdGEgKyBfX3RoaXNfY3B1X3JlYWQoKnApOwogCi0JaWYgKHVubGlrZWx5KHggPiBwY3AtPnN0YXRfdGhyZXNob2xkIHx8IHggPCAtcGNwLT5zdGF0X3RocmVzaG9sZCkpIHsKKwl0ID0gX190aGlzX2NwdV9yZWFkKHBjcC0+c3RhdF90aHJlc2hvbGQpOworCisJaWYgKHVubGlrZWx5KHggPiB0IHx8IHggPCAtdCkpIHsKIAkJem9uZV9wYWdlX3N0YXRlX2FkZCh4LCB6b25lLCBpdGVtKTsKIAkJeCA9IDA7CiAJfQotCSpwID0geDsKKwlfX3RoaXNfY3B1X3dyaXRlKCpwLCB4KTsKIH0KIEVYUE9SVF9TWU1CT0woX19tb2Rfem9uZV9wYWdlX3N0YXRlKTsKIAogLyoKLSAqIEZvciBhbiB1bmtub3duIGludGVycnVwdCBzdGF0ZQotICovCi12b2lkIG1vZF96b25lX3BhZ2Vfc3RhdGUoc3RydWN0IHpvbmUgKnpvbmUsIGVudW0gem9uZV9zdGF0X2l0ZW0gaXRlbSwKLQkJCQkJaW50IGRlbHRhKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JX19tb2Rfem9uZV9wYWdlX3N0YXRlKHpvbmUsIGl0ZW0sIGRlbHRhKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci19Ci1FWFBPUlRfU1lNQk9MKG1vZF96b25lX3BhZ2Vfc3RhdGUpOwotCi0vKgogICogT3B0aW1pemVkIGluY3JlbWVudCBhbmQgZGVjcmVtZW50IGZ1bmN0aW9ucy4KICAqCiAgKiBUaGVzZSBhcmUgb25seSBmb3IgYSBzaW5nbGUgcGFnZSBhbmQgdGhlcmVmb3JlIGNhbiB0YWtlIGEgc3RydWN0IHBhZ2UgKgpAQCAtMjIxLDE2ICsyMDksMTcgQEAKICAqLwogdm9pZCBfX2luY196b25lX3N0YXRlKHN0cnVjdCB6b25lICp6b25lLCBlbnVtIHpvbmVfc3RhdF9pdGVtIGl0ZW0pCiB7Ci0Jc3RydWN0IHBlcl9jcHVfcGFnZXNldCAqcGNwID0gdGhpc19jcHVfcHRyKHpvbmUtPnBhZ2VzZXQpOwotCXM4ICpwID0gcGNwLT52bV9zdGF0X2RpZmYgKyBpdGVtOworCXN0cnVjdCBwZXJfY3B1X3BhZ2VzZXQgX19wZXJjcHUgKnBjcCA9IHpvbmUtPnBhZ2VzZXQ7CisJczggX19wZXJjcHUgKnAgPSBwY3AtPnZtX3N0YXRfZGlmZiArIGl0ZW07CisJczggdiwgdDsKIAotCSgqcCkrKzsKKwl2ID0gX190aGlzX2NwdV9pbmNfcmV0dXJuKCpwKTsKKwl0ID0gX190aGlzX2NwdV9yZWFkKHBjcC0+c3RhdF90aHJlc2hvbGQpOworCWlmICh1bmxpa2VseSh2ID4gdCkpIHsKKwkJczggb3ZlcnN0ZXAgPSB0ID4+IDE7CiAKLQlpZiAodW5saWtlbHkoKnAgPiBwY3AtPnN0YXRfdGhyZXNob2xkKSkgewotCQlpbnQgb3ZlcnN0ZXAgPSBwY3AtPnN0YXRfdGhyZXNob2xkIC8gMjsKLQotCQl6b25lX3BhZ2Vfc3RhdGVfYWRkKCpwICsgb3ZlcnN0ZXAsIHpvbmUsIGl0ZW0pOwotCQkqcCA9IC1vdmVyc3RlcDsKKwkJem9uZV9wYWdlX3N0YXRlX2FkZCh2ICsgb3ZlcnN0ZXAsIHpvbmUsIGl0ZW0pOworCQlfX3RoaXNfY3B1X3dyaXRlKCpwLCAtb3ZlcnN0ZXApOwogCX0KIH0KIApAQCAtMjQyLDE2ICsyMzEsMTcgQEAKIAogdm9pZCBfX2RlY196b25lX3N0YXRlKHN0cnVjdCB6b25lICp6b25lLCBlbnVtIHpvbmVfc3RhdF9pdGVtIGl0ZW0pCiB7Ci0Jc3RydWN0IHBlcl9jcHVfcGFnZXNldCAqcGNwID0gdGhpc19jcHVfcHRyKHpvbmUtPnBhZ2VzZXQpOwotCXM4ICpwID0gcGNwLT52bV9zdGF0X2RpZmYgKyBpdGVtOworCXN0cnVjdCBwZXJfY3B1X3BhZ2VzZXQgX19wZXJjcHUgKnBjcCA9IHpvbmUtPnBhZ2VzZXQ7CisJczggX19wZXJjcHUgKnAgPSBwY3AtPnZtX3N0YXRfZGlmZiArIGl0ZW07CisJczggdiwgdDsKIAotCSgqcCktLTsKKwl2ID0gX190aGlzX2NwdV9kZWNfcmV0dXJuKCpwKTsKKwl0ID0gX190aGlzX2NwdV9yZWFkKHBjcC0+c3RhdF90aHJlc2hvbGQpOworCWlmICh1bmxpa2VseSh2IDwgLSB0KSkgeworCQlzOCBvdmVyc3RlcCA9IHQgPj4gMTsKIAotCWlmICh1bmxpa2VseSgqcCA8IC0gcGNwLT5zdGF0X3RocmVzaG9sZCkpIHsKLQkJaW50IG92ZXJzdGVwID0gcGNwLT5zdGF0X3RocmVzaG9sZCAvIDI7Ci0KLQkJem9uZV9wYWdlX3N0YXRlX2FkZCgqcCAtIG92ZXJzdGVwLCB6b25lLCBpdGVtKTsKLQkJKnAgPSBvdmVyc3RlcDsKKwkJem9uZV9wYWdlX3N0YXRlX2FkZCh2IC0gb3ZlcnN0ZXAsIHpvbmUsIGl0ZW0pOworCQlfX3RoaXNfY3B1X3dyaXRlKCpwLCBvdmVyc3RlcCk7CiAJfQogfQogCkBAIC0yNjEsNiArMjUxLDkyIEBACiB9CiBFWFBPUlRfU1lNQk9MKF9fZGVjX3pvbmVfcGFnZV9zdGF0ZSk7CiAKKyNpZmRlZiBDT05GSUdfQ01QWENIR19MT0NBTAorLyoKKyAqIElmIHdlIGhhdmUgY21weGNoZ19sb2NhbCBzdXBwb3J0IHRoZW4gd2UgZG8gbm90IG5lZWQgdG8gaW5jdXIgdGhlIG92ZXJoZWFkCisgKiB0aGF0IGNvbWVzIHdpdGggbG9jYWxfaXJxX3NhdmUvcmVzdG9yZSBpZiB3ZSB1c2UgdGhpc19jcHVfY21weGNoZy4KKyAqCisgKiBtb2Rfc3RhdGUoKSBtb2RpZmllcyB0aGUgem9uZSBjb3VudGVyIHN0YXRlIHRocm91Z2ggYXRvbWljIHBlciBjcHUKKyAqIG9wZXJhdGlvbnMuCisgKgorICogT3ZlcnN0ZXAgbW9kZSBzcGVjaWZpZXMgaG93IG92ZXJzdGVwIHNob3VsZCBoYW5kbGVkOgorICogICAgIDAgICAgICAgTm8gb3ZlcnN0ZXBwaW5nCisgKiAgICAgMSAgICAgICBPdmVyc3RlcHBpbmcgaGFsZiBvZiB0aHJlc2hvbGQKKyAqICAgICAtMSAgICAgIE92ZXJzdGVwcGluZyBtaW51cyBoYWxmIG9mIHRocmVzaG9sZAorKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBtb2Rfc3RhdGUoc3RydWN0IHpvbmUgKnpvbmUsCisgICAgICAgZW51bSB6b25lX3N0YXRfaXRlbSBpdGVtLCBpbnQgZGVsdGEsIGludCBvdmVyc3RlcF9tb2RlKQoreworCXN0cnVjdCBwZXJfY3B1X3BhZ2VzZXQgX19wZXJjcHUgKnBjcCA9IHpvbmUtPnBhZ2VzZXQ7CisJczggX19wZXJjcHUgKnAgPSBwY3AtPnZtX3N0YXRfZGlmZiArIGl0ZW07CisJbG9uZyBvLCBuLCB0LCB6OworCisJZG8geworCQl6ID0gMDsgIC8qIG92ZXJmbG93IHRvIHpvbmUgY291bnRlcnMgKi8KKworCQkvKgorCQkgKiBUaGUgZmV0Y2hpbmcgb2YgdGhlIHN0YXRfdGhyZXNob2xkIGlzIHJhY3kuIFdlIG1heSBhcHBseQorCQkgKiBhIGNvdW50ZXIgdGhyZXNob2xkIHRvIHRoZSB3cm9uZyB0aGUgY3B1IGlmIHdlIGdldAorCQkgKiByZXNjaGVkdWxlZCB3aGlsZSBleGVjdXRpbmcgaGVyZS4gSG93ZXZlciwgdGhlIGZvbGxvd2luZworCQkgKiB3aWxsIGFwcGx5IHRoZSB0aHJlc2hvbGQgYWdhaW4gYW5kIHRoZXJlZm9yZSBicmluZyB0aGUKKwkJICogY291bnRlciB1bmRlciB0aGUgdGhyZXNob2xkLgorCQkgKi8KKwkJdCA9IHRoaXNfY3B1X3JlYWQocGNwLT5zdGF0X3RocmVzaG9sZCk7CisKKwkJbyA9IHRoaXNfY3B1X3JlYWQoKnApOworCQluID0gZGVsdGEgKyBvOworCisJCWlmIChuID4gdCB8fCBuIDwgLXQpIHsKKwkJCWludCBvcyA9IG92ZXJzdGVwX21vZGUgKiAodCA+PiAxKSA7CisKKwkJCS8qIE92ZXJmbG93IG11c3QgYmUgYWRkZWQgdG8gem9uZSBjb3VudGVycyAqLworCQkJeiA9IG4gKyBvczsKKwkJCW4gPSAtb3M7CisJCX0KKwl9IHdoaWxlICh0aGlzX2NwdV9jbXB4Y2hnKCpwLCBvLCBuKSAhPSBvKTsKKworCWlmICh6KQorCQl6b25lX3BhZ2Vfc3RhdGVfYWRkKHosIHpvbmUsIGl0ZW0pOworfQorCit2b2lkIG1vZF96b25lX3BhZ2Vfc3RhdGUoc3RydWN0IHpvbmUgKnpvbmUsIGVudW0gem9uZV9zdGF0X2l0ZW0gaXRlbSwKKwkJCQkJaW50IGRlbHRhKQoreworCW1vZF9zdGF0ZSh6b25lLCBpdGVtLCBkZWx0YSwgMCk7Cit9CitFWFBPUlRfU1lNQk9MKG1vZF96b25lX3BhZ2Vfc3RhdGUpOworCit2b2lkIGluY196b25lX3N0YXRlKHN0cnVjdCB6b25lICp6b25lLCBlbnVtIHpvbmVfc3RhdF9pdGVtIGl0ZW0pCit7CisJbW9kX3N0YXRlKHpvbmUsIGl0ZW0sIDEsIDEpOworfQorCit2b2lkIGluY196b25lX3BhZ2Vfc3RhdGUoc3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0gem9uZV9zdGF0X2l0ZW0gaXRlbSkKK3sKKwltb2Rfc3RhdGUocGFnZV96b25lKHBhZ2UpLCBpdGVtLCAxLCAxKTsKK30KK0VYUE9SVF9TWU1CT0woaW5jX3pvbmVfcGFnZV9zdGF0ZSk7CisKK3ZvaWQgZGVjX3pvbmVfcGFnZV9zdGF0ZShzdHJ1Y3QgcGFnZSAqcGFnZSwgZW51bSB6b25lX3N0YXRfaXRlbSBpdGVtKQoreworCW1vZF9zdGF0ZShwYWdlX3pvbmUocGFnZSksIGl0ZW0sIC0xLCAtMSk7Cit9CitFWFBPUlRfU1lNQk9MKGRlY196b25lX3BhZ2Vfc3RhdGUpOworI2Vsc2UKKy8qCisgKiBVc2UgaW50ZXJydXB0IGRpc2FibGUgdG8gc2VyaWFsaXplIGNvdW50ZXIgdXBkYXRlcworICovCit2b2lkIG1vZF96b25lX3BhZ2Vfc3RhdGUoc3RydWN0IHpvbmUgKnpvbmUsIGVudW0gem9uZV9zdGF0X2l0ZW0gaXRlbSwKKwkJCQkJaW50IGRlbHRhKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJX19tb2Rfem9uZV9wYWdlX3N0YXRlKHpvbmUsIGl0ZW0sIGRlbHRhKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MKG1vZF96b25lX3BhZ2Vfc3RhdGUpOworCiB2b2lkIGluY196b25lX3N0YXRlKHN0cnVjdCB6b25lICp6b25lLCBlbnVtIHpvbmVfc3RhdF9pdGVtIGl0ZW0pCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTI5MSw2ICszNjcsNyBAQAogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIEVYUE9SVF9TWU1CT0woZGVjX3pvbmVfcGFnZV9zdGF0ZSk7CisjZW5kaWYKIAogLyoKICAqIFVwZGF0ZSB0aGUgem9uZSBjb3VudGVycyBmb3Igb25lIGNwdS4KQEAgLTEwMzMsNyArMTExMCw3IEBACiAJCWJyZWFrOwogCWNhc2UgQ1BVX0RPV05fUFJFUEFSRToKIAljYXNlIENQVV9ET1dOX1BSRVBBUkVfRlJPWkVOOgotCQljYW5jZWxfcmVhcm1pbmdfZGVsYXllZF93b3JrKCZwZXJfY3B1KHZtc3RhdF93b3JrLCBjcHUpKTsKKwkJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZwZXJfY3B1KHZtc3RhdF93b3JrLCBjcHUpKTsKIAkJcGVyX2NwdSh2bXN0YXRfd29yaywgY3B1KS53b3JrLmZ1bmMgPSBOVUxMOwogCQlicmVhazsKIAljYXNlIENQVV9ET1dOX0ZBSUxFRDoKZGlmZiAtLWdpdCBhL25ldC84MDIxcS92bGFuLmMgYi9uZXQvODAyMXEvdmxhbi5jCmluZGV4IDUyMDc3Y2EuLjZlNjRmN2MgMTAwNjQ0Ci0tLSBhL25ldC84MDIxcS92bGFuLmMKKysrIGIvbmV0LzgwMjFxL3ZsYW4uYwpAQCAtMjcyLDEzICsyNzIsMTEgQEAKIAkJc25wcmludGYobmFtZSwgSUZOQU1TSVosICJ2bGFuJS40aSIsIHZsYW5faWQpOwogCX0KIAotCW5ld19kZXYgPSBhbGxvY19uZXRkZXZfbXEoc2l6ZW9mKHN0cnVjdCB2bGFuX2Rldl9pbmZvKSwgbmFtZSwKLQkJCQkgIHZsYW5fc2V0dXAsIHJlYWxfZGV2LT5udW1fdHhfcXVldWVzKTsKKwluZXdfZGV2ID0gYWxsb2NfbmV0ZGV2KHNpemVvZihzdHJ1Y3Qgdmxhbl9kZXZfaW5mbyksIG5hbWUsIHZsYW5fc2V0dXApOwogCiAJaWYgKG5ld19kZXYgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9CVUZTOwogCi0JbmV0aWZfY29weV9yZWFsX251bV9xdWV1ZXMobmV3X2RldiwgcmVhbF9kZXYpOwogCWRldl9uZXRfc2V0KG5ld19kZXYsIG5ldCk7CiAJLyogbmVlZCA0IGJ5dGVzIGZvciBleHRyYSBWTEFOIGhlYWRlciBpbmZvLAogCSAqIGhvcGUgdGhlIHVuZGVybHlpbmcgZGV2aWNlIGNhbiBoYW5kbGUgaXQuCkBAIC0zMzQsMTIgKzMzMiwxNSBAQAogCXZsYW5kZXYtPmZlYXR1cmVzICY9IH5kZXYtPnZsYW5fZmVhdHVyZXM7CiAJdmxhbmRldi0+ZmVhdHVyZXMgfD0gZGV2LT5mZWF0dXJlcyAmIGRldi0+dmxhbl9mZWF0dXJlczsKIAl2bGFuZGV2LT5nc29fbWF4X3NpemUgPSBkZXYtPmdzb19tYXhfc2l6ZTsKKworCWlmIChkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9IV19WTEFOX1RYKQorCQl2bGFuZGV2LT5oYXJkX2hlYWRlcl9sZW4gPSBkZXYtPmhhcmRfaGVhZGVyX2xlbjsKKwllbHNlCisJCXZsYW5kZXYtPmhhcmRfaGVhZGVyX2xlbiA9IGRldi0+aGFyZF9oZWFkZXJfbGVuICsgVkxBTl9ITEVOOworCiAjaWYgZGVmaW5lZChDT05GSUdfRkNPRSkgfHwgZGVmaW5lZChDT05GSUdfRkNPRV9NT0RVTEUpCiAJdmxhbmRldi0+ZmNvZV9kZHBfeGlkID0gZGV2LT5mY29lX2RkcF94aWQ7CiAjZW5kaWYKLQl2bGFuZGV2LT5yZWFsX251bV90eF9xdWV1ZXMgPSBkZXYtPnJlYWxfbnVtX3R4X3F1ZXVlczsKLQlCVUdfT04odmxhbmRldi0+cmVhbF9udW1fdHhfcXVldWVzID4gdmxhbmRldi0+bnVtX3R4X3F1ZXVlcyk7Ci0KIAlpZiAob2xkX2ZlYXR1cmVzICE9IHZsYW5kZXYtPmZlYXR1cmVzKQogCQluZXRkZXZfZmVhdHVyZXNfY2hhbmdlKHZsYW5kZXYpOwogfQpkaWZmIC0tZ2l0IGEvbmV0LzgwMjFxL3ZsYW4uaCBiL25ldC84MDIxcS92bGFuLmgKaW5kZXggZGIwMWIzMS4uNTY4N2M5YiAxMDA2NDQKLS0tIGEvbmV0LzgwMjFxL3ZsYW4uaAorKysgYi9uZXQvODAyMXEvdmxhbi5oCkBAIC0xOSwxOSArMTksMjUgQEAKIAogCiAvKioKLSAqCXN0cnVjdCB2bGFuX3J4X3N0YXRzIC0gVkxBTiBwZXJjcHUgcnggc3RhdHMKKyAqCXN0cnVjdCB2bGFuX3BjcHVfc3RhdHMgLSBWTEFOIHBlcmNwdSByeC90eCBzdGF0cwogICoJQHJ4X3BhY2tldHM6IG51bWJlciBvZiByZWNlaXZlZCBwYWNrZXRzCiAgKglAcnhfYnl0ZXM6IG51bWJlciBvZiByZWNlaXZlZCBieXRlcwogICoJQHJ4X211bHRpY2FzdDogbnVtYmVyIG9mIHJlY2VpdmVkIG11bHRpY2FzdCBwYWNrZXRzCisgKglAdHhfcGFja2V0czogbnVtYmVyIG9mIHRyYW5zbWl0dGVkIHBhY2tldHMKKyAqCUB0eF9ieXRlczogbnVtYmVyIG9mIHRyYW5zbWl0dGVkIGJ5dGVzCiAgKglAc3luY3A6IHN5bmNocm9uaXphdGlvbiBwb2ludCBmb3IgNjRiaXQgY291bnRlcnMKLSAqCUByeF9lcnJvcnM6IG51bWJlciBvZiBlcnJvcnMKKyAqCUByeF9lcnJvcnM6IG51bWJlciBvZiByeCBlcnJvcnMKKyAqCUB0eF9kcm9wcGVkOiBudW1iZXIgb2YgdHggZHJvcHMKICAqLwotc3RydWN0IHZsYW5fcnhfc3RhdHMgeworc3RydWN0IHZsYW5fcGNwdV9zdGF0cyB7CiAJdTY0CQkJcnhfcGFja2V0czsKIAl1NjQJCQlyeF9ieXRlczsKIAl1NjQJCQlyeF9tdWx0aWNhc3Q7CisJdTY0CQkJdHhfcGFja2V0czsKKwl1NjQJCQl0eF9ieXRlczsKIAlzdHJ1Y3QgdTY0X3N0YXRzX3N5bmMJc3luY3A7Ci0JdW5zaWduZWQgbG9uZwkJcnhfZXJyb3JzOworCXUzMgkJCXJ4X2Vycm9yczsKKwl1MzIJCQl0eF9kcm9wcGVkOwogfTsKIAogLyoqCkBAIC00NSw5ICs1MSw3IEBACiAgKglAcmVhbF9kZXY6IHVuZGVybHlpbmcgbmV0ZGV2aWNlCiAgKglAcmVhbF9kZXZfYWRkcjogYWRkcmVzcyBvZiB1bmRlcmx5aW5nIG5ldGRldmljZQogICoJQGRlbnQ6IHByb2MgZGlyIGVudHJ5Ci0gKglAY250X2luY19oZWFkcm9vbV9vbl90eDogc3RhdGlzdGljIC0gbnVtYmVyIG9mIHNrYiBleHBhbnNpb25zIG9uIFRYCi0gKglAY250X2VuY2FwX29uX3htaXQ6IHN0YXRpc3RpYyAtIG51bWJlciBvZiBza2IgZW5jYXBzdWxhdGlvbnMgb24gVFgKLSAqCUB2bGFuX3J4X3N0YXRzOiBwdHIgdG8gcGVyY3B1IHJ4IHN0YXRzCisgKglAdmxhbl9wY3B1X3N0YXRzOiBwdHIgdG8gcGVyY3B1IHJ4IHN0YXRzCiAgKi8KIHN0cnVjdCB2bGFuX2Rldl9pbmZvIHsKIAl1bnNpZ25lZCBpbnQJCQkJbnJfaW5ncmVzc19tYXBwaW5nczsKQEAgLTYyLDkgKzY2LDcgQEAKIAl1bnNpZ25lZCBjaGFyCQkJCXJlYWxfZGV2X2FkZHJbRVRIX0FMRU5dOwogCiAJc3RydWN0IHByb2NfZGlyX2VudHJ5CQkJKmRlbnQ7Ci0JdW5zaWduZWQgbG9uZwkJCQljbnRfaW5jX2hlYWRyb29tX29uX3R4OwotCXVuc2lnbmVkIGxvbmcJCQkJY250X2VuY2FwX29uX3htaXQ7Ci0Jc3RydWN0IHZsYW5fcnhfc3RhdHMgX19wZXJjcHUJCSp2bGFuX3J4X3N0YXRzOworCXN0cnVjdCB2bGFuX3BjcHVfc3RhdHMgX19wZXJjcHUJCSp2bGFuX3BjcHVfc3RhdHM7CiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCB2bGFuX2Rldl9pbmZvICp2bGFuX2Rldl9pbmZvKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9uZXQvODAyMXEvdmxhbl9jb3JlLmMgYi9uZXQvODAyMXEvdmxhbl9jb3JlLmMKaW5kZXggNjliMmY3OS4uY2U4ZTNhYiAxMDA2NDQKLS0tIGEvbmV0LzgwMjFxL3ZsYW5fY29yZS5jCisrKyBiL25ldC84MDIxcS92bGFuX2NvcmUuYwpAQCAtOSw3ICs5LDcgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gKnNrYnA7CiAJdTE2IHZsYW5faWQgPSBza2ItPnZsYW5fdGNpICYgVkxBTl9WSURfTUFTSzsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqdmxhbl9kZXY7Ci0Jc3RydWN0IHZsYW5fcnhfc3RhdHMgKnJ4X3N0YXRzOworCXN0cnVjdCB2bGFuX3BjcHVfc3RhdHMgKnJ4X3N0YXRzOwogCiAJdmxhbl9kZXYgPSB2bGFuX2ZpbmRfZGV2KHNrYi0+ZGV2LCB2bGFuX2lkKTsKIAlpZiAoIXZsYW5fZGV2KSB7CkBAIC0yNiw3ICsyNiw3IEBACiAJc2tiLT5wcmlvcml0eSA9IHZsYW5fZ2V0X2luZ3Jlc3NfcHJpb3JpdHkodmxhbl9kZXYsIHNrYi0+dmxhbl90Y2kpOwogCXNrYi0+dmxhbl90Y2kgPSAwOwogCi0Jcnhfc3RhdHMgPSB0aGlzX2NwdV9wdHIodmxhbl9kZXZfaW5mbyh2bGFuX2RldiktPnZsYW5fcnhfc3RhdHMpOworCXJ4X3N0YXRzID0gdGhpc19jcHVfcHRyKHZsYW5fZGV2X2luZm8odmxhbl9kZXYpLT52bGFuX3BjcHVfc3RhdHMpOwogCiAJdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbigmcnhfc3RhdHMtPnN5bmNwKTsKIAlyeF9zdGF0cy0+cnhfcGFja2V0cysrOwpkaWZmIC0tZ2l0IGEvbmV0LzgwMjFxL3ZsYW5fZGV2LmMgYi9uZXQvODAyMXEvdmxhbl9kZXYuYwppbmRleCAxNGUzZDFmLi5iZTczNzUzIDEwMDY0NAotLS0gYS9uZXQvODAyMXEvdmxhbl9kZXYuYworKysgYi9uZXQvODAyMXEvdmxhbl9kZXYuYwpAQCAtMTQxLDcgKzE0MSw3IEBACiAJCSAgc3RydWN0IHBhY2tldF90eXBlICpwdHlwZSwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KQogewogCXN0cnVjdCB2bGFuX2hkciAqdmhkcjsKLQlzdHJ1Y3Qgdmxhbl9yeF9zdGF0cyAqcnhfc3RhdHM7CisJc3RydWN0IHZsYW5fcGNwdV9zdGF0cyAqcnhfc3RhdHM7CiAJc3RydWN0IG5ldF9kZXZpY2UgKnZsYW5fZGV2OwogCXUxNiB2bGFuX2lkOwogCXUxNiB2bGFuX3RjaTsKQEAgLTE3Nyw3ICsxNzcsNyBAQAogCX0gZWxzZSB7CiAJCXNrYi0+ZGV2ID0gdmxhbl9kZXY7CiAKLQkJcnhfc3RhdHMgPSB0aGlzX2NwdV9wdHIodmxhbl9kZXZfaW5mbyhza2ItPmRldiktPnZsYW5fcnhfc3RhdHMpOworCQlyeF9zdGF0cyA9IHRoaXNfY3B1X3B0cih2bGFuX2Rldl9pbmZvKHNrYi0+ZGV2KS0+dmxhbl9wY3B1X3N0YXRzKTsKIAogCQl1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKCZyeF9zdGF0cy0+c3luY3ApOwogCQlyeF9zdGF0cy0+cnhfcGFja2V0cysrOwpAQCAtMjc0LDkgKzI3NCw2IEBACiAJdTE2IHZsYW5fdGNpID0gMDsKIAlpbnQgcmM7CiAKLQlpZiAoV0FSTl9PTihza2JfaGVhZHJvb20oc2tiKSA8IGRldi0+aGFyZF9oZWFkZXJfbGVuKSkKLQkJcmV0dXJuIC1FTk9TUEM7Ci0KIAlpZiAoISh2bGFuX2Rldl9pbmZvKGRldiktPmZsYWdzICYgVkxBTl9GTEFHX1JFT1JERVJfSERSKSkgewogCQl2aGRyID0gKHN0cnVjdCB2bGFuX2hkciAqKSBza2JfcHVzaChza2IsIFZMQU5fSExFTik7CiAKQEAgLTMxMyw4ICszMTAsNiBAQAogc3RhdGljIG5ldGRldl90eF90IHZsYW5fZGV2X2hhcmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlpbnQgaSA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpOwotCXN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCBpKTsKIAlzdHJ1Y3Qgdmxhbl9ldGhoZHIgKnZldGggPSAoc3RydWN0IHZsYW5fZXRoaGRyICopKHNrYi0+ZGF0YSk7CiAJdW5zaWduZWQgaW50IGxlbjsKIAlpbnQgcmV0OwpAQCAtMzI2LDcxICszMjEsMzEgQEAKIAkgKi8KIAlpZiAodmV0aC0+aF92bGFuX3Byb3RvICE9IGh0b25zKEVUSF9QXzgwMjFRKSB8fAogCSAgICB2bGFuX2Rldl9pbmZvKGRldiktPmZsYWdzICYgVkxBTl9GTEFHX1JFT1JERVJfSERSKSB7Ci0JCXVuc2lnbmVkIGludCBvcmlnX2hlYWRyb29tID0gc2tiX2hlYWRyb29tKHNrYik7CiAJCXUxNiB2bGFuX3RjaTsKLQotCQl2bGFuX2Rldl9pbmZvKGRldiktPmNudF9lbmNhcF9vbl94bWl0Kys7Ci0KIAkJdmxhbl90Y2kgPSB2bGFuX2Rldl9pbmZvKGRldiktPnZsYW5faWQ7CiAJCXZsYW5fdGNpIHw9IHZsYW5fZGV2X2dldF9lZ3Jlc3NfcW9zX21hc2soZGV2LCBza2IpOwotCQlza2IgPSBfX3ZsYW5fcHV0X3RhZyhza2IsIHZsYW5fdGNpKTsKLQkJaWYgKCFza2IpIHsKLQkJCXR4cS0+dHhfZHJvcHBlZCsrOwotCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKLQkJfQotCi0JCWlmIChvcmlnX2hlYWRyb29tIDwgVkxBTl9ITEVOKQotCQkJdmxhbl9kZXZfaW5mbyhkZXYpLT5jbnRfaW5jX2hlYWRyb29tX29uX3R4Kys7CisJCXNrYiA9IF9fdmxhbl9od2FjY2VsX3B1dF90YWcoc2tiLCB2bGFuX3RjaSk7CiAJfQogCi0KIAlza2Jfc2V0X2Rldihza2IsIHZsYW5fZGV2X2luZm8oZGV2KS0+cmVhbF9kZXYpOwogCWxlbiA9IHNrYi0+bGVuOwogCXJldCA9IGRldl9xdWV1ZV94bWl0KHNrYik7CiAKIAlpZiAobGlrZWx5KHJldCA9PSBORVRfWE1JVF9TVUNDRVNTIHx8IHJldCA9PSBORVRfWE1JVF9DTikpIHsKLQkJdHhxLT50eF9wYWNrZXRzKys7Ci0JCXR4cS0+dHhfYnl0ZXMgKz0gbGVuOwotCX0gZWxzZQotCQl0eHEtPnR4X2Ryb3BwZWQrKzsKKwkJc3RydWN0IHZsYW5fcGNwdV9zdGF0cyAqc3RhdHM7CisKKwkJc3RhdHMgPSB0aGlzX2NwdV9wdHIodmxhbl9kZXZfaW5mbyhkZXYpLT52bGFuX3BjcHVfc3RhdHMpOworCQl1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKCZzdGF0cy0+c3luY3ApOworCQlzdGF0cy0+dHhfcGFja2V0cysrOworCQlzdGF0cy0+dHhfYnl0ZXMgKz0gbGVuOworCQl1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKCZzdGF0cy0+c3luY3ApOworCX0gZWxzZSB7CisJCXRoaXNfY3B1X2luYyh2bGFuX2Rldl9pbmZvKGRldiktPnZsYW5fcGNwdV9zdGF0cy0+dHhfZHJvcHBlZCk7CisJfQogCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIG5ldGRldl90eF90IHZsYW5fZGV2X2h3YWNjZWxfaGFyZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlpbnQgaSA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpOwotCXN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCBpKTsKLQl1MTYgdmxhbl90Y2k7Ci0JdW5zaWduZWQgaW50IGxlbjsKLQlpbnQgcmV0OwotCi0Jdmxhbl90Y2kgPSB2bGFuX2Rldl9pbmZvKGRldiktPnZsYW5faWQ7Ci0Jdmxhbl90Y2kgfD0gdmxhbl9kZXZfZ2V0X2VncmVzc19xb3NfbWFzayhkZXYsIHNrYik7Ci0Jc2tiID0gX192bGFuX2h3YWNjZWxfcHV0X3RhZyhza2IsIHZsYW5fdGNpKTsKLQotCXNrYi0+ZGV2ID0gdmxhbl9kZXZfaW5mbyhkZXYpLT5yZWFsX2RldjsKLQlsZW4gPSBza2ItPmxlbjsKLQlyZXQgPSBkZXZfcXVldWVfeG1pdChza2IpOwotCi0JaWYgKGxpa2VseShyZXQgPT0gTkVUX1hNSVRfU1VDQ0VTUyB8fCByZXQgPT0gTkVUX1hNSVRfQ04pKSB7Ci0JCXR4cS0+dHhfcGFja2V0cysrOwotCQl0eHEtPnR4X2J5dGVzICs9IGxlbjsKLQl9IGVsc2UKLQkJdHhxLT50eF9kcm9wcGVkKys7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdTE2IHZsYW5fZGV2X3NlbGVjdF9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpyZGV2ID0gdmxhbl9kZXZfaW5mbyhkZXYpLT5yZWFsX2RldjsKLQljb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgKm9wcyA9IHJkZXYtPm5ldGRldl9vcHM7Ci0KLQlyZXR1cm4gb3BzLT5uZG9fc2VsZWN0X3F1ZXVlKHJkZXYsIHNrYik7Ci19Ci0KIHN0YXRpYyBpbnQgdmxhbl9kZXZfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSkKIHsKIAkvKiBUT0RPOiBnb3R0YSBtYWtlIHN1cmUgdGhlIHVuZGVybHlpbmcgbGF5ZXIgY2FuIGhhbmRsZSBpdCwKQEAgLTcxOSw4ICs2NzQsNyBAQAogCS5wYXJzZQkgPSBldGhfaGVhZGVyX3BhcnNlLAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB2bGFuX25ldGRldl9vcHMsIHZsYW5fbmV0ZGV2X2FjY2VsX29wcywKLQkJICAgIHZsYW5fbmV0ZGV2X29wc19zcSwgdmxhbl9uZXRkZXZfYWNjZWxfb3BzX3NxOworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB2bGFuX25ldGRldl9vcHM7CiAKIHN0YXRpYyBpbnQgdmxhbl9kZXZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewpAQCAtNzM4LDYgKzY5Miw3IEBACiAJCSAgICAgICgxPDxfX0xJTktfU1RBVEVfUFJFU0VOVCk7CiAKIAlkZXYtPmZlYXR1cmVzIHw9IHJlYWxfZGV2LT5mZWF0dXJlcyAmIHJlYWxfZGV2LT52bGFuX2ZlYXR1cmVzOworCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9MTFRYOwogCWRldi0+Z3NvX21heF9zaXplID0gcmVhbF9kZXYtPmdzb19tYXhfc2l6ZTsKIAogCS8qIGlwdjYgc2hhcmVkIGNhcmQgcmVsYXRlZCBzdHVmZiAqLwpAQCAtNzU1LDI2ICs3MTAsMjAgQEAKIAlpZiAocmVhbF9kZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9IV19WTEFOX1RYKSB7CiAJCWRldi0+aGVhZGVyX29wcyAgICAgID0gcmVhbF9kZXYtPmhlYWRlcl9vcHM7CiAJCWRldi0+aGFyZF9oZWFkZXJfbGVuID0gcmVhbF9kZXYtPmhhcmRfaGVhZGVyX2xlbjsKLQkJaWYgKHJlYWxfZGV2LT5uZXRkZXZfb3BzLT5uZG9fc2VsZWN0X3F1ZXVlKQotCQkJZGV2LT5uZXRkZXZfb3BzID0gJnZsYW5fbmV0ZGV2X2FjY2VsX29wc19zcTsKLQkJZWxzZQotCQkJZGV2LT5uZXRkZXZfb3BzID0gJnZsYW5fbmV0ZGV2X2FjY2VsX29wczsKIAl9IGVsc2UgewogCQlkZXYtPmhlYWRlcl9vcHMgICAgICA9ICZ2bGFuX2hlYWRlcl9vcHM7CiAJCWRldi0+aGFyZF9oZWFkZXJfbGVuID0gcmVhbF9kZXYtPmhhcmRfaGVhZGVyX2xlbiArIFZMQU5fSExFTjsKLQkJaWYgKHJlYWxfZGV2LT5uZXRkZXZfb3BzLT5uZG9fc2VsZWN0X3F1ZXVlKQotCQkJZGV2LT5uZXRkZXZfb3BzID0gJnZsYW5fbmV0ZGV2X29wc19zcTsKLQkJZWxzZQotCQkJZGV2LT5uZXRkZXZfb3BzID0gJnZsYW5fbmV0ZGV2X29wczsKIAl9CiAKKwlkZXYtPm5ldGRldl9vcHMgPSAmdmxhbl9uZXRkZXZfb3BzOworCiAJaWYgKGlzX3ZsYW5fZGV2KHJlYWxfZGV2KSkKIAkJc3ViY2xhc3MgPSAxOwogCiAJdmxhbl9kZXZfc2V0X2xvY2tkZXBfY2xhc3MoZGV2LCBzdWJjbGFzcyk7CiAKLQl2bGFuX2Rldl9pbmZvKGRldiktPnZsYW5fcnhfc3RhdHMgPSBhbGxvY19wZXJjcHUoc3RydWN0IHZsYW5fcnhfc3RhdHMpOwotCWlmICghdmxhbl9kZXZfaW5mbyhkZXYpLT52bGFuX3J4X3N0YXRzKQorCXZsYW5fZGV2X2luZm8oZGV2KS0+dmxhbl9wY3B1X3N0YXRzID0gYWxsb2NfcGVyY3B1KHN0cnVjdCB2bGFuX3BjcHVfc3RhdHMpOworCWlmICghdmxhbl9kZXZfaW5mbyhkZXYpLT52bGFuX3BjcHVfc3RhdHMpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJcmV0dXJuIDA7CkBAIC03ODYsOCArNzM1LDggQEAKIAlzdHJ1Y3Qgdmxhbl9kZXZfaW5mbyAqdmxhbiA9IHZsYW5fZGV2X2luZm8oZGV2KTsKIAlpbnQgaTsKIAotCWZyZWVfcGVyY3B1KHZsYW4tPnZsYW5fcnhfc3RhdHMpOwotCXZsYW4tPnZsYW5fcnhfc3RhdHMgPSBOVUxMOworCWZyZWVfcGVyY3B1KHZsYW4tPnZsYW5fcGNwdV9zdGF0cyk7CisJdmxhbi0+dmxhbl9wY3B1X3N0YXRzID0gTlVMTDsKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2bGFuLT5lZ3Jlc3NfcHJpb3JpdHlfbWFwKTsgaSsrKSB7CiAJCXdoaWxlICgocG0gPSB2bGFuLT5lZ3Jlc3NfcHJpb3JpdHlfbWFwW2ldKSAhPSBOVUxMKSB7CiAJCQl2bGFuLT5lZ3Jlc3NfcHJpb3JpdHlfbWFwW2ldID0gcG0tPm5leHQ7CkBAIC04MjUsMzMgKzc3NCwzNyBAQAogCiBzdGF0aWMgc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICp2bGFuX2Rldl9nZXRfc3RhdHM2NChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKnN0YXRzKQogewotCWRldl90eHFfc3RhdHNfZm9sZChkZXYsIHN0YXRzKTsKIAotCWlmICh2bGFuX2Rldl9pbmZvKGRldiktPnZsYW5fcnhfc3RhdHMpIHsKLQkJc3RydWN0IHZsYW5fcnhfc3RhdHMgKnAsIGFjY3VtID0gezB9OworCWlmICh2bGFuX2Rldl9pbmZvKGRldiktPnZsYW5fcGNwdV9zdGF0cykgeworCQlzdHJ1Y3Qgdmxhbl9wY3B1X3N0YXRzICpwOworCQl1MzIgcnhfZXJyb3JzID0gMCwgdHhfZHJvcHBlZCA9IDA7CiAJCWludCBpOwogCiAJCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7Ci0JCQl1NjQgcnhwYWNrZXRzLCByeGJ5dGVzLCByeG11bHRpY2FzdDsKKwkJCXU2NCByeHBhY2tldHMsIHJ4Ynl0ZXMsIHJ4bXVsdGljYXN0LCB0eHBhY2tldHMsIHR4Ynl0ZXM7CiAJCQl1bnNpZ25lZCBpbnQgc3RhcnQ7CiAKLQkJCXAgPSBwZXJfY3B1X3B0cih2bGFuX2Rldl9pbmZvKGRldiktPnZsYW5fcnhfc3RhdHMsIGkpOworCQkJcCA9IHBlcl9jcHVfcHRyKHZsYW5fZGV2X2luZm8oZGV2KS0+dmxhbl9wY3B1X3N0YXRzLCBpKTsKIAkJCWRvIHsKIAkJCQlzdGFydCA9IHU2NF9zdGF0c19mZXRjaF9iZWdpbl9iaCgmcC0+c3luY3ApOwogCQkJCXJ4cGFja2V0cwk9IHAtPnJ4X3BhY2tldHM7CiAJCQkJcnhieXRlcwkJPSBwLT5yeF9ieXRlczsKIAkJCQlyeG11bHRpY2FzdAk9IHAtPnJ4X211bHRpY2FzdDsKKwkJCQl0eHBhY2tldHMJPSBwLT50eF9wYWNrZXRzOworCQkJCXR4Ynl0ZXMJCT0gcC0+dHhfYnl0ZXM7CiAJCQl9IHdoaWxlICh1NjRfc3RhdHNfZmV0Y2hfcmV0cnlfYmgoJnAtPnN5bmNwLCBzdGFydCkpOwotCQkJYWNjdW0ucnhfcGFja2V0cyArPSByeHBhY2tldHM7Ci0JCQlhY2N1bS5yeF9ieXRlcyAgICs9IHJ4Ynl0ZXM7Ci0JCQlhY2N1bS5yeF9tdWx0aWNhc3QgKz0gcnhtdWx0aWNhc3Q7Ci0JCQkvKiByeF9lcnJvcnMgaXMgdWxvbmcsIG5vdCBwcm90ZWN0ZWQgYnkgc3luY3AgKi8KLQkJCWFjY3VtLnJ4X2Vycm9ycyAgKz0gcC0+cnhfZXJyb3JzOworCisJCQlzdGF0cy0+cnhfcGFja2V0cwkrPSByeHBhY2tldHM7CisJCQlzdGF0cy0+cnhfYnl0ZXMJCSs9IHJ4Ynl0ZXM7CisJCQlzdGF0cy0+bXVsdGljYXN0CSs9IHJ4bXVsdGljYXN0OworCQkJc3RhdHMtPnR4X3BhY2tldHMJKz0gdHhwYWNrZXRzOworCQkJc3RhdHMtPnR4X2J5dGVzCQkrPSB0eGJ5dGVzOworCQkJLyogcnhfZXJyb3JzICYgdHhfZHJvcHBlZCBhcmUgdTMyICovCisJCQlyeF9lcnJvcnMJKz0gcC0+cnhfZXJyb3JzOworCQkJdHhfZHJvcHBlZAkrPSBwLT50eF9kcm9wcGVkOwogCQl9Ci0JCXN0YXRzLT5yeF9wYWNrZXRzID0gYWNjdW0ucnhfcGFja2V0czsKLQkJc3RhdHMtPnJ4X2J5dGVzICAgPSBhY2N1bS5yeF9ieXRlczsKLQkJc3RhdHMtPnJ4X2Vycm9ycyAgPSBhY2N1bS5yeF9lcnJvcnM7Ci0JCXN0YXRzLT5tdWx0aWNhc3QgID0gYWNjdW0ucnhfbXVsdGljYXN0OworCQlzdGF0cy0+cnhfZXJyb3JzICA9IHJ4X2Vycm9yczsKKwkJc3RhdHMtPnR4X2Ryb3BwZWQgPSB0eF9kcm9wcGVkOwogCX0KIAlyZXR1cm4gc3RhdHM7CiB9CkBAIC05MDgsODAgKzg2MSw2IEBACiAjZW5kaWYKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdmxhbl9uZXRkZXZfYWNjZWxfb3BzID0gewotCS5uZG9fY2hhbmdlX210dQkJPSB2bGFuX2Rldl9jaGFuZ2VfbXR1LAotCS5uZG9faW5pdAkJPSB2bGFuX2Rldl9pbml0LAotCS5uZG9fdW5pbml0CQk9IHZsYW5fZGV2X3VuaW5pdCwKLQkubmRvX29wZW4JCT0gdmxhbl9kZXZfb3BlbiwKLQkubmRvX3N0b3AJCT0gdmxhbl9kZXZfc3RvcCwKLQkubmRvX3N0YXJ0X3htaXQgPSAgdmxhbl9kZXZfaHdhY2NlbF9oYXJkX3N0YXJ0X3htaXQsCi0JLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCi0JLm5kb19zZXRfbWFjX2FkZHJlc3MJPSB2bGFuX2Rldl9zZXRfbWFjX2FkZHJlc3MsCi0JLm5kb19zZXRfcnhfbW9kZQk9IHZsYW5fZGV2X3NldF9yeF9tb2RlLAotCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gdmxhbl9kZXZfc2V0X3J4X21vZGUsCi0JLm5kb19jaGFuZ2VfcnhfZmxhZ3MJPSB2bGFuX2Rldl9jaGFuZ2VfcnhfZmxhZ3MsCi0JLm5kb19kb19pb2N0bAkJPSB2bGFuX2Rldl9pb2N0bCwKLQkubmRvX25laWdoX3NldHVwCT0gdmxhbl9kZXZfbmVpZ2hfc2V0dXAsCi0JLm5kb19nZXRfc3RhdHM2NAk9IHZsYW5fZGV2X2dldF9zdGF0czY0LAotI2lmIGRlZmluZWQoQ09ORklHX0ZDT0UpIHx8IGRlZmluZWQoQ09ORklHX0ZDT0VfTU9EVUxFKQotCS5uZG9fZmNvZV9kZHBfc2V0dXAJPSB2bGFuX2Rldl9mY29lX2RkcF9zZXR1cCwKLQkubmRvX2Zjb2VfZGRwX2RvbmUJPSB2bGFuX2Rldl9mY29lX2RkcF9kb25lLAotCS5uZG9fZmNvZV9lbmFibGUJPSB2bGFuX2Rldl9mY29lX2VuYWJsZSwKLQkubmRvX2Zjb2VfZGlzYWJsZQk9IHZsYW5fZGV2X2Zjb2VfZGlzYWJsZSwKLQkubmRvX2Zjb2VfZ2V0X3d3bgk9IHZsYW5fZGV2X2Zjb2VfZ2V0X3d3biwKLSNlbmRpZgotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB2bGFuX25ldGRldl9vcHNfc3EgPSB7Ci0JLm5kb19zZWxlY3RfcXVldWUJPSB2bGFuX2Rldl9zZWxlY3RfcXVldWUsCi0JLm5kb19jaGFuZ2VfbXR1CQk9IHZsYW5fZGV2X2NoYW5nZV9tdHUsCi0JLm5kb19pbml0CQk9IHZsYW5fZGV2X2luaXQsCi0JLm5kb191bmluaXQJCT0gdmxhbl9kZXZfdW5pbml0LAotCS5uZG9fb3BlbgkJPSB2bGFuX2Rldl9vcGVuLAotCS5uZG9fc3RvcAkJPSB2bGFuX2Rldl9zdG9wLAotCS5uZG9fc3RhcnRfeG1pdCA9ICB2bGFuX2Rldl9oYXJkX3N0YXJ0X3htaXQsCi0JLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCi0JLm5kb19zZXRfbWFjX2FkZHJlc3MJPSB2bGFuX2Rldl9zZXRfbWFjX2FkZHJlc3MsCi0JLm5kb19zZXRfcnhfbW9kZQk9IHZsYW5fZGV2X3NldF9yeF9tb2RlLAotCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gdmxhbl9kZXZfc2V0X3J4X21vZGUsCi0JLm5kb19jaGFuZ2VfcnhfZmxhZ3MJPSB2bGFuX2Rldl9jaGFuZ2VfcnhfZmxhZ3MsCi0JLm5kb19kb19pb2N0bAkJPSB2bGFuX2Rldl9pb2N0bCwKLQkubmRvX25laWdoX3NldHVwCT0gdmxhbl9kZXZfbmVpZ2hfc2V0dXAsCi0JLm5kb19nZXRfc3RhdHM2NAk9IHZsYW5fZGV2X2dldF9zdGF0czY0LAotI2lmIGRlZmluZWQoQ09ORklHX0ZDT0UpIHx8IGRlZmluZWQoQ09ORklHX0ZDT0VfTU9EVUxFKQotCS5uZG9fZmNvZV9kZHBfc2V0dXAJPSB2bGFuX2Rldl9mY29lX2RkcF9zZXR1cCwKLQkubmRvX2Zjb2VfZGRwX2RvbmUJPSB2bGFuX2Rldl9mY29lX2RkcF9kb25lLAotCS5uZG9fZmNvZV9lbmFibGUJPSB2bGFuX2Rldl9mY29lX2VuYWJsZSwKLQkubmRvX2Zjb2VfZGlzYWJsZQk9IHZsYW5fZGV2X2Zjb2VfZGlzYWJsZSwKLQkubmRvX2Zjb2VfZ2V0X3d3bgk9IHZsYW5fZGV2X2Zjb2VfZ2V0X3d3biwKLSNlbmRpZgotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB2bGFuX25ldGRldl9hY2NlbF9vcHNfc3EgPSB7Ci0JLm5kb19zZWxlY3RfcXVldWUJPSB2bGFuX2Rldl9zZWxlY3RfcXVldWUsCi0JLm5kb19jaGFuZ2VfbXR1CQk9IHZsYW5fZGV2X2NoYW5nZV9tdHUsCi0JLm5kb19pbml0CQk9IHZsYW5fZGV2X2luaXQsCi0JLm5kb191bmluaXQJCT0gdmxhbl9kZXZfdW5pbml0LAotCS5uZG9fb3BlbgkJPSB2bGFuX2Rldl9vcGVuLAotCS5uZG9fc3RvcAkJPSB2bGFuX2Rldl9zdG9wLAotCS5uZG9fc3RhcnRfeG1pdCA9ICB2bGFuX2Rldl9od2FjY2VsX2hhcmRfc3RhcnRfeG1pdCwKLQkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKLQkubmRvX3NldF9tYWNfYWRkcmVzcwk9IHZsYW5fZGV2X3NldF9tYWNfYWRkcmVzcywKLQkubmRvX3NldF9yeF9tb2RlCT0gdmxhbl9kZXZfc2V0X3J4X21vZGUsCi0JLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJPSB2bGFuX2Rldl9zZXRfcnhfbW9kZSwKLQkubmRvX2NoYW5nZV9yeF9mbGFncwk9IHZsYW5fZGV2X2NoYW5nZV9yeF9mbGFncywKLQkubmRvX2RvX2lvY3RsCQk9IHZsYW5fZGV2X2lvY3RsLAotCS5uZG9fbmVpZ2hfc2V0dXAJPSB2bGFuX2Rldl9uZWlnaF9zZXR1cCwKLQkubmRvX2dldF9zdGF0czY0CT0gdmxhbl9kZXZfZ2V0X3N0YXRzNjQsCi0jaWYgZGVmaW5lZChDT05GSUdfRkNPRSkgfHwgZGVmaW5lZChDT05GSUdfRkNPRV9NT0RVTEUpCi0JLm5kb19mY29lX2RkcF9zZXR1cAk9IHZsYW5fZGV2X2Zjb2VfZGRwX3NldHVwLAotCS5uZG9fZmNvZV9kZHBfZG9uZQk9IHZsYW5fZGV2X2Zjb2VfZGRwX2RvbmUsCi0JLm5kb19mY29lX2VuYWJsZQk9IHZsYW5fZGV2X2Zjb2VfZW5hYmxlLAotCS5uZG9fZmNvZV9kaXNhYmxlCT0gdmxhbl9kZXZfZmNvZV9kaXNhYmxlLAotCS5uZG9fZmNvZV9nZXRfd3duCT0gdmxhbl9kZXZfZmNvZV9nZXRfd3duLAotI2VuZGlmCi19OwotCiB2b2lkIHZsYW5fc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlldGhlcl9zZXR1cChkZXYpOwpkaWZmIC0tZ2l0IGEvbmV0LzgwMjFxL3ZsYW5fbmV0bGluay5jIGIvbmV0LzgwMjFxL3ZsYW5fbmV0bGluay5jCmluZGV4IGRkYzEwNTcuLmJlOWE1YzEgMTAwNjQ0Ci0tLSBhL25ldC84MDIxcS92bGFuX25ldGxpbmsuYworKysgYi9uZXQvODAyMXEvdmxhbl9uZXRsaW5rLmMKQEAgLTEwMSwyNSArMTAxLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2bGFuX2dldF90eF9xdWV1ZXMoc3RydWN0IG5ldCAqbmV0LAotCQkJICAgICAgc3RydWN0IG5sYXR0ciAqdGJbXSwKLQkJCSAgICAgIHVuc2lnbmVkIGludCAqbnVtX3R4X3F1ZXVlcywKLQkJCSAgICAgIHVuc2lnbmVkIGludCAqcmVhbF9udW1fdHhfcXVldWVzKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpyZWFsX2RldjsKLQotCWlmICghdGJbSUZMQV9MSU5LXSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZWFsX2RldiA9IF9fZGV2X2dldF9ieV9pbmRleChuZXQsIG5sYV9nZXRfdTMyKHRiW0lGTEFfTElOS10pKTsKLQlpZiAoIXJlYWxfZGV2KQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCSpudW1fdHhfcXVldWVzICAgICAgPSByZWFsX2Rldi0+bnVtX3R4X3F1ZXVlczsKLQkqcmVhbF9udW1fdHhfcXVldWVzID0gcmVhbF9kZXYtPnJlYWxfbnVtX3R4X3F1ZXVlczsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCB2bGFuX25ld2xpbmsoc3RydWN0IG5ldCAqc3JjX25ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCXN0cnVjdCBubGF0dHIgKnRiW10sIHN0cnVjdCBubGF0dHIgKmRhdGFbXSkKIHsKQEAgLTIzNyw3ICsyMTgsNiBAQAogCS5tYXh0eXBlCT0gSUZMQV9WTEFOX01BWCwKIAkucG9saWN5CQk9IHZsYW5fcG9saWN5LAogCS5wcml2X3NpemUJPSBzaXplb2Yoc3RydWN0IHZsYW5fZGV2X2luZm8pLAotCS5nZXRfdHhfcXVldWVzICA9IHZsYW5fZ2V0X3R4X3F1ZXVlcywKIAkuc2V0dXAJCT0gdmxhbl9zZXR1cCwKIAkudmFsaWRhdGUJPSB2bGFuX3ZhbGlkYXRlLAogCS5uZXdsaW5rCT0gdmxhbl9uZXdsaW5rLApkaWZmIC0tZ2l0IGEvbmV0LzgwMjFxL3ZsYW5wcm9jLmMgYi9uZXQvODAyMXEvdmxhbnByb2MuYwppbmRleCA4MGUyODBmLi5kMTMxNGNmIDEwMDY0NAotLS0gYS9uZXQvODAyMXEvdmxhbnByb2MuYworKysgYi9uZXQvODAyMXEvdmxhbnByb2MuYwpAQCAtMjgwLDcgKzI4MCw2IEBACiAJY29uc3Qgc3RydWN0IHZsYW5fZGV2X2luZm8gKmRldl9pbmZvID0gdmxhbl9kZXZfaW5mbyh2bGFuZGV2KTsKIAlzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgdGVtcDsKIAljb25zdCBzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKnN0YXRzOwotCXN0YXRpYyBjb25zdCBjaGFyIGZtdFtdID0gIiUzMHMgJTEybHVcbiI7CiAJc3RhdGljIGNvbnN0IGNoYXIgZm10NjRbXSA9ICIlMzBzICUxMmxsdVxuIjsKIAlpbnQgaTsKIApAQCAtMjk5LDEwICsyOTgsNiBAQAogCXNlcV9wdXRzKHNlcSwgIlxuIik7CiAJc2VxX3ByaW50ZihzZXEsIGZtdDY0LCAidG90YWwgZnJhbWVzIHRyYW5zbWl0dGVkIiwgc3RhdHMtPnR4X3BhY2tldHMpOwogCXNlcV9wcmludGYoc2VxLCBmbXQ2NCwgInRvdGFsIGJ5dGVzIHRyYW5zbWl0dGVkIiwgc3RhdHMtPnR4X2J5dGVzKTsKLQlzZXFfcHJpbnRmKHNlcSwgZm10LCAidG90YWwgaGVhZHJvb20gaW5jIiwKLQkJICAgZGV2X2luZm8tPmNudF9pbmNfaGVhZHJvb21fb25fdHgpOwotCXNlcV9wcmludGYoc2VxLCBmbXQsICJ0b3RhbCBlbmNhcCBvbiB4bWl0IiwKLQkJICAgZGV2X2luZm8tPmNudF9lbmNhcF9vbl94bWl0KTsKIAlzZXFfcHJpbnRmKHNlcSwgIkRldmljZTogJXMiLCBkZXZfaW5mby0+cmVhbF9kZXYtPm5hbWUpOwogCS8qIG5vdyBzaG93IGFsbCBQUklPUklUWSBtYXBwaW5ncyByZWxhdGluZyB0byB0aGlzIFZMQU4gKi8KIAlzZXFfcHJpbnRmKHNlcSwgIlxuSU5HUkVTUyBwcmlvcml0eSBtYXBwaW5nczogIgpkaWZmIC0tZ2l0IGEvbmV0LzlwL3Byb3RvY29sLmMgYi9uZXQvOXAvcHJvdG9jb2wuYwppbmRleCA0NWMxNWY0Li43OThiZWFjIDEwMDY0NAotLS0gYS9uZXQvOXAvcHJvdG9jb2wuYworKysgYi9uZXQvOXAvcHJvdG9jb2wuYwpAQCAtMjcsMzEgKzI3LDE2IEBACiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPG5ldC85cC85cC5oPgogI2luY2x1ZGUgPG5ldC85cC9jbGllbnQuaD4KICNpbmNsdWRlICJwcm90b2NvbC5oIgogCi0jaWZuZGVmIE1JTgotI2RlZmluZSBNSU4oYSwgYikgKCgoYSkgPCAoYikpID8gKGEpIDogKGIpKQotI2VuZGlmCi0KLSNpZm5kZWYgTUFYCi0jZGVmaW5lIE1BWChhLCBiKSAoKChhKSA+IChiKSkgPyAoYSkgOiAoYikpCi0jZW5kaWYKLQotI2lmbmRlZiBvZmZzZXRfb2YKLSNkZWZpbmUgb2Zmc2V0X29mKHR5cGUsIG1lbWIpIFwKLQkoKHVuc2lnbmVkIGxvbmcpKCYoKHR5cGUgKikwKS0+bWVtYikpCi0jZW5kaWYKLSNpZm5kZWYgY29udGFpbmVyX29mCi0jZGVmaW5lIGNvbnRhaW5lcl9vZihvYmosIHR5cGUsIG1lbWIpIFwKLQkoKHR5cGUgKikoKChjaGFyICopb2JqKSAtIG9mZnNldF9vZih0eXBlLCBtZW1iKSkpCi0jZW5kaWYKLQogc3RhdGljIGludAogcDlwZHVfd3JpdGVmKHN0cnVjdCBwOV9mY2FsbCAqcGR1LCBpbnQgcHJvdG9fdmVyc2lvbiwgY29uc3QgY2hhciAqZm10LCAuLi4pOwogCkBAIC0xMDQsNyArODksNyBAQAogCiBzdGF0aWMgc2l6ZV90IHBkdV9yZWFkKHN0cnVjdCBwOV9mY2FsbCAqcGR1LCB2b2lkICpkYXRhLCBzaXplX3Qgc2l6ZSkKIHsKLQlzaXplX3QgbGVuID0gTUlOKHBkdS0+c2l6ZSAtIHBkdS0+b2Zmc2V0LCBzaXplKTsKKwlzaXplX3QgbGVuID0gbWluKHBkdS0+c2l6ZSAtIHBkdS0+b2Zmc2V0LCBzaXplKTsKIAltZW1jcHkoZGF0YSwgJnBkdS0+c2RhdGFbcGR1LT5vZmZzZXRdLCBsZW4pOwogCXBkdS0+b2Zmc2V0ICs9IGxlbjsKIAlyZXR1cm4gc2l6ZSAtIGxlbjsKQEAgLTExMiw3ICs5Nyw3IEBACiAKIHN0YXRpYyBzaXplX3QgcGR1X3dyaXRlKHN0cnVjdCBwOV9mY2FsbCAqcGR1LCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3Qgc2l6ZSkKIHsKLQlzaXplX3QgbGVuID0gTUlOKHBkdS0+Y2FwYWNpdHkgLSBwZHUtPnNpemUsIHNpemUpOworCXNpemVfdCBsZW4gPSBtaW4ocGR1LT5jYXBhY2l0eSAtIHBkdS0+c2l6ZSwgc2l6ZSk7CiAJbWVtY3B5KCZwZHUtPnNkYXRhW3BkdS0+c2l6ZV0sIGRhdGEsIGxlbik7CiAJcGR1LT5zaXplICs9IGxlbjsKIAlyZXR1cm4gc2l6ZSAtIGxlbjsKQEAgLTEyMSw3ICsxMDYsNyBAQAogc3RhdGljIHNpemVfdAogcGR1X3dyaXRlX3Uoc3RydWN0IHA5X2ZjYWxsICpwZHUsIGNvbnN0IGNoYXIgX191c2VyICp1ZGF0YSwgc2l6ZV90IHNpemUpCiB7Ci0Jc2l6ZV90IGxlbiA9IE1JTihwZHUtPmNhcGFjaXR5IC0gcGR1LT5zaXplLCBzaXplKTsKKwlzaXplX3QgbGVuID0gbWluKHBkdS0+Y2FwYWNpdHkgLSBwZHUtPnNpemUsIHNpemUpOwogCWlmIChjb3B5X2Zyb21fdXNlcigmcGR1LT5zZGF0YVtwZHUtPnNpemVdLCB1ZGF0YSwgbGVuKSkKIAkJbGVuID0gMDsKIApAQCAtMjAxLDcgKzE4Niw3IEBACiAJCQkJaWYgKGVycmNvZGUpCiAJCQkJCWJyZWFrOwogCi0JCQkJc2l6ZSA9IE1BWChsZW4sIDApOworCQkJCXNpemUgPSBtYXhfdChpbnQxNl90LCBsZW4sIDApOwogCiAJCQkJKnNwdHIgPSBrbWFsbG9jKHNpemUgKyAxLCBHRlBfS0VSTkVMKTsKIAkJCQlpZiAoKnNwdHIgPT0gTlVMTCkgewpAQCAtMjU2LDggKzI0MSw4IEBACiAJCQkJICAgIHA5cGR1X3JlYWRmKHBkdSwgcHJvdG9fdmVyc2lvbiwgImQiLCBjb3VudCk7CiAJCQkJaWYgKCFlcnJjb2RlKSB7CiAJCQkJCSpjb3VudCA9Ci0JCQkJCSAgICBNSU4oKmNvdW50LAotCQkJCQkJcGR1LT5zaXplIC0gcGR1LT5vZmZzZXQpOworCQkJCQkgICAgbWluX3QoaW50MzJfdCwgKmNvdW50LAorCQkJCQkJICBwZHUtPnNpemUgLSBwZHUtPm9mZnNldCk7CiAJCQkJCSpkYXRhID0gJnBkdS0+c2RhdGFbcGR1LT5vZmZzZXRdOwogCQkJCX0KIAkJCX0KQEAgLTQyMSw3ICs0MDYsNyBAQAogCQkJCWNvbnN0IGNoYXIgKnNwdHIgPSB2YV9hcmcoYXAsIGNvbnN0IGNoYXIgKik7CiAJCQkJaW50MTZfdCBsZW4gPSAwOwogCQkJCWlmIChzcHRyKQotCQkJCQlsZW4gPSBNSU4oc3RybGVuKHNwdHIpLCBVU0hSVF9NQVgpOworCQkJCQlsZW4gPSBtaW5fdChpbnQxNl90LCBzdHJsZW4oc3B0ciksIFVTSFJUX01BWCk7CiAKIAkJCQllcnJjb2RlID0gcDlwZHVfd3JpdGVmKHBkdSwgcHJvdG9fdmVyc2lvbiwKIAkJCQkJCQkJInciLCBsZW4pOwpkaWZmIC0tZ2l0IGEvbmV0L0tjb25maWcgYi9uZXQvS2NvbmZpZwppbmRleCA1NWZkODJlLi5hZDBhYWZlIDEwMDY0NAotLS0gYS9uZXQvS2NvbmZpZworKysgYi9uZXQvS2NvbmZpZwpAQCAtMjE0LDEyICsyMTQsMTggQEAKIHNvdXJjZSAibmV0L3NjaGVkL0tjb25maWciCiBzb3VyY2UgIm5ldC9kY2IvS2NvbmZpZyIKIHNvdXJjZSAibmV0L2Ruc19yZXNvbHZlci9LY29uZmlnIgorc291cmNlICJuZXQvYmF0bWFuLWFkdi9LY29uZmlnIgogCiBjb25maWcgUlBTCiAJYm9vbGVhbgogCWRlcGVuZHMgb24gU01QICYmIFNZU0ZTICYmIFVTRV9HRU5FUklDX1NNUF9IRUxQRVJTCiAJZGVmYXVsdCB5CiAKK2NvbmZpZyBYUFMKKwlib29sZWFuCisJZGVwZW5kcyBvbiBTTVAgJiYgU1lTRlMgJiYgVVNFX0dFTkVSSUNfU01QX0hFTFBFUlMKKwlkZWZhdWx0IHkKKwogbWVudSAiTmV0d29yayB0ZXN0aW5nIgogCiBjb25maWcgTkVUX1BLVEdFTgpkaWZmIC0tZ2l0IGEvbmV0L01ha2VmaWxlIGIvbmV0L01ha2VmaWxlCmluZGV4IDZiN2JmZDcuLmEzMzMwZWIgMTAwNjQ0Ci0tLSBhL25ldC9NYWtlZmlsZQorKysgYi9uZXQvTWFrZWZpbGUKQEAgLTY5LDMgKzY5LDQgQEAKIG9iai0kKENPTkZJR19XSU1BWCkJCSs9IHdpbWF4Lwogb2JqLSQoQ09ORklHX0ROU19SRVNPTFZFUikJKz0gZG5zX3Jlc29sdmVyLwogb2JqLSQoQ09ORklHX0NFUEhfTElCKQkJKz0gY2VwaC8KK29iai0kKENPTkZJR19CQVRNQU5fQURWKQkrPSBiYXRtYW4tYWR2LwpkaWZmIC0tZ2l0IGEvbmV0L2F0bS9icjI2ODQuYyBiL25ldC9hdG0vYnIyNjg0LmMKaW5kZXggYWQyYjIzMi4uZmNlMmVhZSAxMDA2NDQKLS0tIGEvbmV0L2F0bS9icjI2ODQuYworKysgYi9uZXQvYXRtL2JyMjY4NC5jCkBAIC05Nyw3ICs5Nyw3IEBACiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGJyMjY4NF9kZXYgKkJSUFJJVihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldikKIHsKLQlyZXR1cm4gKHN0cnVjdCBicjI2ODRfZGV2ICopbmV0ZGV2X3ByaXYobmV0X2Rldik7CisJcmV0dXJuIG5ldGRldl9wcml2KG5ldF9kZXYpOwogfQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2aWNlICpsaXN0X2VudHJ5X2JyZGV2KGNvbnN0IHN0cnVjdCBsaXN0X2hlYWQgKmxlKQpkaWZmIC0tZ2l0IGEvbmV0L2F0bS9jbGlwLmMgYi9uZXQvYXRtL2NsaXAuYwppbmRleCBmZjk1NmQxLi5kMjU3ZGE1IDEwMDY0NAotLS0gYS9uZXQvYXRtL2NsaXAuYworKysgYi9uZXQvYXRtL2NsaXAuYwpAQCAtNTAyLDcgKzUwMiw4IEBACiAJc3RydWN0IGF0bWFycF9lbnRyeSAqZW50cnk7CiAJaW50IGVycm9yOwogCXN0cnVjdCBjbGlwX3ZjYyAqY2xpcF92Y2M7Ci0Jc3RydWN0IGZsb3dpIGZsID0geyAubmxfdSA9IHsgLmlwNF91ID0geyAuZGFkZHIgPSBpcCwgLnRvcyA9IDF9fSB9OworCXN0cnVjdCBmbG93aSBmbCA9IHsgLmZsNF9kc3QgPSBpcCwKKwkJCSAgICAuZmw0X3RvcyA9IDEgfTsKIAlzdHJ1Y3QgcnRhYmxlICpydDsKIAogCWlmICh2Y2MtPnB1c2ggIT0gY2xpcF9wdXNoKSB7CmRpZmYgLS1naXQgYS9uZXQvYXRtL2xlYy5jIGIvbmV0L2F0bS9sZWMuYwppbmRleCAxODFkNzBjLi4zODc1NGZkIDEwMDY0NAotLS0gYS9uZXQvYXRtL2xlYy5jCisrKyBiL25ldC9hdG0vbGVjLmMKQEAgLTgxNiw4ICs4MTYsNyBAQAogCWlmIChhcmcgPCAwIHx8IGFyZyA+PSBNQVhfTEVDX0lURiB8fCAhZGV2X2xlY1thcmddKQogCQlyZXR1cm4gLUVJTlZBTDsKIAl2Y2MtPnByb3RvX2RhdGEgPSBkZXZfbGVjW2FyZ107Ci0JcmV0dXJuIGxlY19tY2FzdF9tYWtlKChzdHJ1Y3QgbGVjX3ByaXYgKiluZXRkZXZfcHJpdihkZXZfbGVjW2FyZ10pLAotCQkJCXZjYyk7CisJcmV0dXJuIGxlY19tY2FzdF9tYWtlKG5ldGRldl9wcml2KGRldl9sZWNbYXJnXSksIHZjYyk7CiB9CiAKIC8qIEluaXRpYWxpemUgZGV2aWNlLiAqLwpAQCAtMTYwOCw3ICsxNjA3LDcgQEAKIAlzdHJ1Y3QgbGVjX2FycF90YWJsZSAqZW50cnk7CiAJaW50IGk7CiAKLQljYW5jZWxfcmVhcm1pbmdfZGVsYXllZF93b3JrKCZwcml2LT5sZWNfYXJwX3dvcmspOworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcHJpdi0+bGVjX2FycF93b3JrKTsKIAogCS8qCiAJICogUmVtb3ZlIGFsbCBlbnRyaWVzCmRpZmYgLS1naXQgYS9uZXQvYXRtL21wYy5jIGIvbmV0L2F0bS9tcGMuYwppbmRleCA3NGJjYzY2Li42NDRjZGYwIDEwMDY0NAotLS0gYS9uZXQvYXRtL21wYy5jCisrKyBiL25ldC9hdG0vbXBjLmMKQEAgLTY0LDggKzY0LDYgQEAKIAlkbyB7IGlmICgwKSBwcmludGsoS0VSTl9DT05UIGZvcm1hdCwgIyNhcmdzKTsgfSB3aGlsZSAoMCkKICNlbmRpZgogCi0jZGVmaW5lIE1QT0FfVEFHX0xFTiA0Ci0KIC8qIG1wY19kYWVtb24gLT4ga2VybmVsICovCiBzdGF0aWMgdm9pZCBNUE9BX3RyaWdnZXJfcmN2ZChzdHJ1Y3Qga19tZXNzYWdlICptc2csIHN0cnVjdCBtcG9hX2NsaWVudCAqbXBjKTsKIHN0YXRpYyB2b2lkIE1QT0FfcmVzX3JlcGx5X3JjdmQoc3RydWN0IGtfbWVzc2FnZSAqbXNnLCBzdHJ1Y3QgbXBvYV9jbGllbnQgKm1wYyk7CmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9LY29uZmlnIGIvbmV0L2JhdG1hbi1hZHYvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzA1MWFkCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L2JhdG1hbi1hZHYvS2NvbmZpZwpAQCAtMCwwICsxLDI1IEBACisjCisjIEIuQS5ULk0uQS5OIG1lc2hpbmcgcHJvdG9jb2wKKyMKKworY29uZmlnIEJBVE1BTl9BRFYKKwl0cmlzdGF0ZSAiQi5BLlQuTS5BLk4uIEFkdmFuY2VkIE1lc2hpbmcgUHJvdG9jb2wiCisJZGVwZW5kcyBvbiBORVQKKyAgICAgICAgZGVmYXVsdCBuCisJLS0taGVscC0tLQorCisgICAgICAgIEIuQS5ULk0uQS5OLiAoYmV0dGVyIGFwcHJvYWNoIHRvIG1vYmlsZSBhZC1ob2MgbmV0d29ya2luZykgaXMKKyAgICAgICAgYSByb3V0aW5nIHByb3RvY29sIGZvciBtdWx0aS1ob3AgYWQtaG9jIG1lc2ggbmV0d29ya3MuIFRoZQorICAgICAgICBuZXR3b3JrcyBtYXkgYmUgd2lyZWQgb3Igd2lyZWxlc3MuIFNlZQorICAgICAgICBodHRwOi8vd3d3Lm9wZW4tbWVzaC5vcmcvIGZvciBtb3JlIGluZm9ybWF0aW9uIGFuZCB1c2VyIHNwYWNlCisgICAgICAgIHRvb2xzLgorCitjb25maWcgQkFUTUFOX0FEVl9ERUJVRworCWJvb2wgIkIuQS5ULk0uQS5OLiBkZWJ1Z2dpbmciCisJZGVwZW5kcyBvbiBCQVRNQU5fQURWICE9IG4KKwktLS1oZWxwLS0tCisKKwkgIFRoaXMgaXMgYW4gb3B0aW9uIGZvciB1c2UgYnkgZGV2ZWxvcGVyczsgbW9zdCBwZW9wbGUgc2hvdWxkCisJICBzYXkgTiBoZXJlLiBUaGlzIGVuYWJsZXMgY29tcGlsYXRpb24gb2Ygc3VwcG9ydCBmb3IKKwkgIG91dHB1dHRpbmcgZGVidWdnaW5nIGluZm9ybWF0aW9uIHRvIHRoZSBrZXJuZWwgbG9nLiBUaGUKKwkgIG91dHB1dCBpcyBjb250cm9sbGVkIHZpYSB0aGUgbW9kdWxlIHBhcmFtZXRlciBkZWJ1Zy4KZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L01ha2VmaWxlIGIvbmV0L2JhdG1hbi1hZHYvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkzNmFlYwotLS0gL2Rldi9udWxsCisrKyBiL25ldC9iYXRtYW4tYWR2L01ha2VmaWxlCkBAIC0wLDAgKzEsMzkgQEAKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA3LTIwMTAgQi5BLlQuTS5BLk4uIGNvbnRyaWJ1dG9yczoKKyMKKyMgTWFyZWsgTGluZG5lciwgU2ltb24gV3VuZGVybGljaAorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUKKyMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisjIDAyMTEwLTEzMDEsIFVTQQorIworCitvYmotJChDT05GSUdfQkFUTUFOX0FEVikgKz0gYmF0bWFuLWFkdi5vCitiYXRtYW4tYWR2LXkgKz0gYWdncmVnYXRpb24ubworYmF0bWFuLWFkdi15ICs9IGJhdF9kZWJ1Z2ZzLm8KK2JhdG1hbi1hZHYteSArPSBiYXRfc3lzZnMubworYmF0bWFuLWFkdi15ICs9IGJpdGFycmF5Lm8KK2JhdG1hbi1hZHYteSArPSBnYXRld2F5X2NsaWVudC5vCitiYXRtYW4tYWR2LXkgKz0gZ2F0ZXdheV9jb21tb24ubworYmF0bWFuLWFkdi15ICs9IGhhcmQtaW50ZXJmYWNlLm8KK2JhdG1hbi1hZHYteSArPSBoYXNoLm8KK2JhdG1hbi1hZHYteSArPSBpY21wX3NvY2tldC5vCitiYXRtYW4tYWR2LXkgKz0gbWFpbi5vCitiYXRtYW4tYWR2LXkgKz0gb3JpZ2luYXRvci5vCitiYXRtYW4tYWR2LXkgKz0gcmluZ19idWZmZXIubworYmF0bWFuLWFkdi15ICs9IHJvdXRpbmcubworYmF0bWFuLWFkdi15ICs9IHNlbmQubworYmF0bWFuLWFkdi15ICs9IHNvZnQtaW50ZXJmYWNlLm8KK2JhdG1hbi1hZHYteSArPSB0cmFuc2xhdGlvbi10YWJsZS5vCitiYXRtYW4tYWR2LXkgKz0gdW5pY2FzdC5vCitiYXRtYW4tYWR2LXkgKz0gdmlzLm8KZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L2FnZ3JlZ2F0aW9uLmMgYi9uZXQvYmF0bWFuLWFkdi9hZ2dyZWdhdGlvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4NTBhM2UKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvYmF0bWFuLWFkdi9hZ2dyZWdhdGlvbi5jCkBAIC0wLDAgKzEsMjczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTAgQi5BLlQuTS5BLk4uIGNvbnRyaWJ1dG9yczoKKyAqCisgKiBNYXJlayBMaW5kbmVyLCBTaW1vbiBXdW5kZXJsaWNoCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxLCBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgIm1haW4uaCIKKyNpbmNsdWRlICJhZ2dyZWdhdGlvbi5oIgorI2luY2x1ZGUgInNlbmQuaCIKKyNpbmNsdWRlICJyb3V0aW5nLmgiCisKKy8qIGNhbGN1bGF0ZSB0aGUgc2l6ZSBvZiB0aGUgaG5hIGluZm9ybWF0aW9uIGZvciBhIGdpdmVuIHBhY2tldCAqLworc3RhdGljIGludCBobmFfbGVuKHN0cnVjdCBiYXRtYW5fcGFja2V0ICpiYXRtYW5fcGFja2V0KQoreworCXJldHVybiBiYXRtYW5fcGFja2V0LT5udW1faG5hICogRVRIX0FMRU47Cit9CisKKy8qIHJldHVybiB0cnVlIGlmIG5ld19wYWNrZXQgY2FuIGJlIGFnZ3JlZ2F0ZWQgd2l0aCBmb3J3X3BhY2tldCAqLworc3RhdGljIGJvb2wgY2FuX2FnZ3JlZ2F0ZV93aXRoKHN0cnVjdCBiYXRtYW5fcGFja2V0ICpuZXdfYmF0bWFuX3BhY2tldCwKKwkJCSAgICAgICBpbnQgcGFja2V0X2xlbiwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIHNlbmRfdGltZSwKKwkJCSAgICAgICBib29sIGRpcmVjdGxpbmssCisJCQkgICAgICAgc3RydWN0IGJhdG1hbl9pZiAqaWZfaW5jb21pbmcsCisJCQkgICAgICAgc3RydWN0IGZvcndfcGFja2V0ICpmb3J3X3BhY2tldCkKK3sKKwlzdHJ1Y3QgYmF0bWFuX3BhY2tldCAqYmF0bWFuX3BhY2tldCA9CisJCShzdHJ1Y3QgYmF0bWFuX3BhY2tldCAqKWZvcndfcGFja2V0LT5za2ItPmRhdGE7CisJaW50IGFnZ3JlZ2F0ZWRfYnl0ZXMgPSBmb3J3X3BhY2tldC0+cGFja2V0X2xlbiArIHBhY2tldF9sZW47CisKKwkvKioKKwkgKiB3ZSBjYW4gYWdncmVnYXRlIHRoZSBjdXJyZW50IHBhY2tldCB0byB0aGlzIGFnZ3JlZ2F0ZWQgcGFja2V0CisJICogaWY6CisJICoKKwkgKiAtIHRoZSBzZW5kIHRpbWUgaXMgd2l0aGluIG91ciBNQVhfQUdHUkVHQVRJT05fTVMgdGltZQorCSAqIC0gdGhlIHJlc3VsdGluZyBwYWNrZXQgd29udCBiZSBiaWdnZXIgdGhhbgorCSAqICAgTUFYX0FHR1JFR0FUSU9OX0JZVEVTCisJICovCisKKwlpZiAodGltZV9iZWZvcmUoc2VuZF90aW1lLCBmb3J3X3BhY2tldC0+c2VuZF90aW1lKSAmJgorCSAgICB0aW1lX2FmdGVyX2VxKHNlbmRfdGltZSArIG1zZWNzX3RvX2ppZmZpZXMoTUFYX0FHR1JFR0FUSU9OX01TKSwKKwkJCQkJZm9yd19wYWNrZXQtPnNlbmRfdGltZSkgJiYKKwkgICAgKGFnZ3JlZ2F0ZWRfYnl0ZXMgPD0gTUFYX0FHR1JFR0FUSU9OX0JZVEVTKSkgeworCisJCS8qKgorCQkgKiBjaGVjayBhZ2dyZWdhdGlvbiBjb21wYXRpYmlsaXR5CisJCSAqIC0+IGRpcmVjdCBsaW5rIHBhY2tldHMgYXJlIGJyb2FkY2FzdGVkIG9uCisJCSAqICAgIHRoZWlyIGludGVyZmFjZSBvbmx5CisJCSAqIC0+IGFnZ3JlZ2F0ZSBwYWNrZXQgaWYgdGhlIGN1cnJlbnQgcGFja2V0IGlzCisJCSAqICAgIGEgImdsb2JhbCIgcGFja2V0IGFzIHdlbGwgYXMgdGhlIGJhc2UKKwkJICogICAgcGFja2V0CisJCSAqLworCisJCS8qIHBhY2tldHMgd2l0aG91dCBkaXJlY3QgbGluayBmbGFnIGFuZCBoaWdoIFRUTAorCQkgKiBhcmUgZmxvb2RlZCB0aHJvdWdoIHRoZSBuZXQgICovCisJCWlmICgoIWRpcmVjdGxpbmspICYmCisJCSAgICAoIShiYXRtYW5fcGFja2V0LT5mbGFncyAmIERJUkVDVExJTkspKSAmJgorCQkgICAgKGJhdG1hbl9wYWNrZXQtPnR0bCAhPSAxKSAmJgorCisJCSAgICAvKiBvd24gcGFja2V0cyBvcmlnaW5hdGluZyBub24tcHJpbWFyeQorCQkgICAgICogaW50ZXJmYWNlcyBsZWF2ZSBvbmx5IHRoYXQgaW50ZXJmYWNlICovCisJCSAgICAoKCFmb3J3X3BhY2tldC0+b3duKSB8fAorCQkgICAgIChmb3J3X3BhY2tldC0+aWZfaW5jb21pbmctPmlmX251bSA9PSAwKSkpCisJCQlyZXR1cm4gdHJ1ZTsKKworCQkvKiBpZiB0aGUgaW5jb21pbmcgcGFja2V0IGlzIHNlbnQgdmlhIHRoaXMgb25lCisJCSAqIGludGVyZmFjZSBvbmx5IC0gd2Ugc3RpbGwgY2FuIGFnZ3JlZ2F0ZSAqLworCQlpZiAoKGRpcmVjdGxpbmspICYmCisJCSAgICAobmV3X2JhdG1hbl9wYWNrZXQtPnR0bCA9PSAxKSAmJgorCQkgICAgKGZvcndfcGFja2V0LT5pZl9pbmNvbWluZyA9PSBpZl9pbmNvbWluZykgJiYKKworCQkgICAgLyogcGFja2V0cyBmcm9tIGRpcmVjdCBuZWlnaGJvcnMgb3IKKwkJICAgICAqIG93biBzZWNvbmRhcnkgaW50ZXJmYWNlIHBhY2tldHMKKwkJICAgICAqICg9IHNlY29uZGFyeSBpbnRlcmZhY2UgcGFja2V0cyBpbiBnZW5lcmFsKSAqLworCQkgICAgKGJhdG1hbl9wYWNrZXQtPmZsYWdzICYgRElSRUNUTElOSyB8fAorCQkgICAgIChmb3J3X3BhY2tldC0+b3duICYmCisJCSAgICAgIGZvcndfcGFja2V0LT5pZl9pbmNvbWluZy0+aWZfbnVtICE9IDApKSkKKwkJCXJldHVybiB0cnVlOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKworI2RlZmluZSBhdG9taWNfZGVjX25vdF96ZXJvKHYpICAgICAgICAgIGF0b21pY19hZGRfdW5sZXNzKCh2KSwgLTEsIDApCisvKiBjcmVhdGUgYSBuZXcgYWdncmVnYXRlZCBwYWNrZXQgYW5kIGFkZCB0aGlzIHBhY2tldCB0byBpdCAqLworc3RhdGljIHZvaWQgbmV3X2FnZ3JlZ2F0ZWRfcGFja2V0KHVuc2lnbmVkIGNoYXIgKnBhY2tldF9idWZmLCBpbnQgcGFja2V0X2xlbiwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgc2VuZF90aW1lLCBib29sIGRpcmVjdF9saW5rLAorCQkJCSAgc3RydWN0IGJhdG1hbl9pZiAqaWZfaW5jb21pbmcsCisJCQkJICBpbnQgb3duX3BhY2tldCkKK3sKKwlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYoaWZfaW5jb21pbmctPnNvZnRfaWZhY2UpOworCXN0cnVjdCBmb3J3X3BhY2tldCAqZm9yd19wYWNrZXRfYWdncjsKKwl1bnNpZ25lZCBjaGFyICpza2JfYnVmZjsKKworCS8qIG93biBwYWNrZXQgc2hvdWxkIGFsd2F5cyBiZSBzY2hlZHVsZWQgKi8KKwlpZiAoIW93bl9wYWNrZXQpIHsKKwkJaWYgKCFhdG9taWNfZGVjX25vdF96ZXJvKCZiYXRfcHJpdi0+YmF0bWFuX3F1ZXVlX2xlZnQpKSB7CisJCQliYXRfZGJnKERCR19CQVRNQU4sIGJhdF9wcml2LAorCQkJCSJiYXRtYW4gcGFja2V0IHF1ZXVlIGZ1bGxcbiIpOworCQkJcmV0dXJuOworCQl9CisJfQorCisJZm9yd19wYWNrZXRfYWdnciA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBmb3J3X3BhY2tldCksIEdGUF9BVE9NSUMpOworCWlmICghZm9yd19wYWNrZXRfYWdncikgeworCQlpZiAoIW93bl9wYWNrZXQpCisJCQlhdG9taWNfaW5jKCZiYXRfcHJpdi0+YmF0bWFuX3F1ZXVlX2xlZnQpOworCQlyZXR1cm47CisJfQorCisJaWYgKChhdG9taWNfcmVhZCgmYmF0X3ByaXYtPmFnZ3JlZ2F0ZWRfb2dtcykpICYmCisJICAgIChwYWNrZXRfbGVuIDwgTUFYX0FHR1JFR0FUSU9OX0JZVEVTKSkKKwkJZm9yd19wYWNrZXRfYWdnci0+c2tiID0gZGV2X2FsbG9jX3NrYihNQVhfQUdHUkVHQVRJT05fQllURVMgKworCQkJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBldGhoZHIpKTsKKwllbHNlCisJCWZvcndfcGFja2V0X2FnZ3ItPnNrYiA9IGRldl9hbGxvY19za2IocGFja2V0X2xlbiArCisJCQkJCQkgICAgICBzaXplb2Yoc3RydWN0IGV0aGhkcikpOworCisJaWYgKCFmb3J3X3BhY2tldF9hZ2dyLT5za2IpIHsKKwkJaWYgKCFvd25fcGFja2V0KQorCQkJYXRvbWljX2luYygmYmF0X3ByaXYtPmJhdG1hbl9xdWV1ZV9sZWZ0KTsKKwkJa2ZyZWUoZm9yd19wYWNrZXRfYWdncik7CisJCXJldHVybjsKKwl9CisJc2tiX3Jlc2VydmUoZm9yd19wYWNrZXRfYWdnci0+c2tiLCBzaXplb2Yoc3RydWN0IGV0aGhkcikpOworCisJSU5JVF9ITElTVF9OT0RFKCZmb3J3X3BhY2tldF9hZ2dyLT5saXN0KTsKKworCXNrYl9idWZmID0gc2tiX3B1dChmb3J3X3BhY2tldF9hZ2dyLT5za2IsIHBhY2tldF9sZW4pOworCWZvcndfcGFja2V0X2FnZ3ItPnBhY2tldF9sZW4gPSBwYWNrZXRfbGVuOworCW1lbWNweShza2JfYnVmZiwgcGFja2V0X2J1ZmYsIHBhY2tldF9sZW4pOworCisJZm9yd19wYWNrZXRfYWdnci0+b3duID0gb3duX3BhY2tldDsKKwlmb3J3X3BhY2tldF9hZ2dyLT5pZl9pbmNvbWluZyA9IGlmX2luY29taW5nOworCWZvcndfcGFja2V0X2FnZ3ItPm51bV9wYWNrZXRzID0gMDsKKwlmb3J3X3BhY2tldF9hZ2dyLT5kaXJlY3RfbGlua19mbGFncyA9IDA7CisJZm9yd19wYWNrZXRfYWdnci0+c2VuZF90aW1lID0gc2VuZF90aW1lOworCisJLyogc2F2ZSBwYWNrZXQgZGlyZWN0IGxpbmsgZmxhZyBzdGF0dXMgKi8KKwlpZiAoZGlyZWN0X2xpbmspCisJCWZvcndfcGFja2V0X2FnZ3ItPmRpcmVjdF9saW5rX2ZsYWdzIHw9IDE7CisKKwkvKiBhZGQgbmV3IHBhY2tldCB0byBwYWNrZXQgbGlzdCAqLworCXNwaW5fbG9ja19iaCgmYmF0X3ByaXYtPmZvcndfYmF0X2xpc3RfbG9jayk7CisJaGxpc3RfYWRkX2hlYWQoJmZvcndfcGFja2V0X2FnZ3ItPmxpc3QsICZiYXRfcHJpdi0+Zm9yd19iYXRfbGlzdCk7CisJc3Bpbl91bmxvY2tfYmgoJmJhdF9wcml2LT5mb3J3X2JhdF9saXN0X2xvY2spOworCisJLyogc3RhcnQgdGltZXIgZm9yIHRoaXMgcGFja2V0ICovCisJSU5JVF9ERUxBWUVEX1dPUksoJmZvcndfcGFja2V0X2FnZ3ItPmRlbGF5ZWRfd29yaywKKwkJCSAgc2VuZF9vdXRzdGFuZGluZ19iYXRfcGFja2V0KTsKKwlxdWV1ZV9kZWxheWVkX3dvcmsoYmF0X2V2ZW50X3dvcmtxdWV1ZSwKKwkJCSAgICZmb3J3X3BhY2tldF9hZ2dyLT5kZWxheWVkX3dvcmssCisJCQkgICBzZW5kX3RpbWUgLSBqaWZmaWVzKTsKK30KKworLyogYWdncmVnYXRlIGEgbmV3IHBhY2tldCBpbnRvIHRoZSBleGlzdGluZyBhZ2dyZWdhdGlvbiAqLworc3RhdGljIHZvaWQgYWdncmVnYXRlKHN0cnVjdCBmb3J3X3BhY2tldCAqZm9yd19wYWNrZXRfYWdnciwKKwkJICAgICAgdW5zaWduZWQgY2hhciAqcGFja2V0X2J1ZmYsCisJCSAgICAgIGludCBwYWNrZXRfbGVuLAorCQkgICAgICBib29sIGRpcmVjdF9saW5rKQoreworCXVuc2lnbmVkIGNoYXIgKnNrYl9idWZmOworCisJc2tiX2J1ZmYgPSBza2JfcHV0KGZvcndfcGFja2V0X2FnZ3ItPnNrYiwgcGFja2V0X2xlbik7CisJbWVtY3B5KHNrYl9idWZmLCBwYWNrZXRfYnVmZiwgcGFja2V0X2xlbik7CisJZm9yd19wYWNrZXRfYWdnci0+cGFja2V0X2xlbiArPSBwYWNrZXRfbGVuOworCWZvcndfcGFja2V0X2FnZ3ItPm51bV9wYWNrZXRzKys7CisKKwkvKiBzYXZlIHBhY2tldCBkaXJlY3QgbGluayBmbGFnIHN0YXR1cyAqLworCWlmIChkaXJlY3RfbGluaykKKwkJZm9yd19wYWNrZXRfYWdnci0+ZGlyZWN0X2xpbmtfZmxhZ3MgfD0KKwkJCSgxIDw8IGZvcndfcGFja2V0X2FnZ3ItPm51bV9wYWNrZXRzKTsKK30KKwordm9pZCBhZGRfYmF0X3BhY2tldF90b19saXN0KHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYsCisJCQkgICAgdW5zaWduZWQgY2hhciAqcGFja2V0X2J1ZmYsIGludCBwYWNrZXRfbGVuLAorCQkJICAgIHN0cnVjdCBiYXRtYW5faWYgKmlmX2luY29taW5nLCBjaGFyIG93bl9wYWNrZXQsCisJCQkgICAgdW5zaWduZWQgbG9uZyBzZW5kX3RpbWUpCit7CisJLyoqCisJICogX2FnZ3IgLT4gcG9pbnRlciB0byB0aGUgcGFja2V0IHdlIHdhbnQgdG8gYWdncmVnYXRlIHdpdGgKKwkgKiBfcG9zIC0+IHBvaW50ZXIgdG8gdGhlIHBvc2l0aW9uIGluIHRoZSBxdWV1ZQorCSAqLworCXN0cnVjdCBmb3J3X3BhY2tldCAqZm9yd19wYWNrZXRfYWdnciA9IE5VTEwsICpmb3J3X3BhY2tldF9wb3MgPSBOVUxMOworCXN0cnVjdCBobGlzdF9ub2RlICp0bXBfbm9kZTsKKwlzdHJ1Y3QgYmF0bWFuX3BhY2tldCAqYmF0bWFuX3BhY2tldCA9CisJCShzdHJ1Y3QgYmF0bWFuX3BhY2tldCAqKXBhY2tldF9idWZmOworCWJvb2wgZGlyZWN0X2xpbmsgPSBiYXRtYW5fcGFja2V0LT5mbGFncyAmIERJUkVDVExJTksgPyAxIDogMDsKKworCS8qIGZpbmQgcG9zaXRpb24gZm9yIHRoZSBwYWNrZXQgaW4gdGhlIGZvcndhcmQgcXVldWUgKi8KKwlzcGluX2xvY2tfYmgoJmJhdF9wcml2LT5mb3J3X2JhdF9saXN0X2xvY2spOworCS8qIG93biBwYWNrZXRzIGFyZSBub3QgdG8gYmUgYWdncmVnYXRlZCAqLworCWlmICgoYXRvbWljX3JlYWQoJmJhdF9wcml2LT5hZ2dyZWdhdGVkX29nbXMpKSAmJiAoIW93bl9wYWNrZXQpKSB7CisJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGZvcndfcGFja2V0X3BvcywgdG1wX25vZGUsCisJCQkJICAgICAmYmF0X3ByaXYtPmZvcndfYmF0X2xpc3QsIGxpc3QpIHsKKwkJCWlmIChjYW5fYWdncmVnYXRlX3dpdGgoYmF0bWFuX3BhY2tldCwKKwkJCQkJICAgICAgIHBhY2tldF9sZW4sCisJCQkJCSAgICAgICBzZW5kX3RpbWUsCisJCQkJCSAgICAgICBkaXJlY3RfbGluaywKKwkJCQkJICAgICAgIGlmX2luY29taW5nLAorCQkJCQkgICAgICAgZm9yd19wYWNrZXRfcG9zKSkgeworCQkJCWZvcndfcGFja2V0X2FnZ3IgPSBmb3J3X3BhY2tldF9wb3M7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwkvKiBub3RoaW5nIHRvIGFnZ3JlZ2F0ZSB3aXRoIC0gZWl0aGVyIGFnZ3JlZ2F0aW9uIGRpc2FibGVkIG9yIG5vCisJICogc3VpdGFibGUgYWdncmVnYXRpb24gcGFja2V0IGZvdW5kICovCisJaWYgKCFmb3J3X3BhY2tldF9hZ2dyKSB7CisJCS8qIHRoZSBmb2xsb3dpbmcgc2VjdGlvbiBjYW4gcnVuIHdpdGhvdXQgdGhlIGxvY2sgKi8KKwkJc3Bpbl91bmxvY2tfYmgoJmJhdF9wcml2LT5mb3J3X2JhdF9saXN0X2xvY2spOworCisJCS8qKgorCQkgKiBpZiB3ZSBjb3VsZCBub3QgYWdncmVnYXRlIHRoaXMgcGFja2V0IHdpdGggb25lIG9mIHRoZSBvdGhlcnMKKwkJICogd2UgaG9sZCBpdCBiYWNrIGZvciBhIHdoaWxlLCBzbyB0aGF0IGl0IG1pZ2h0IGJlIGFnZ3JlZ2F0ZWQKKwkJICogbGF0ZXIgb24KKwkJICovCisJCWlmICgoIW93bl9wYWNrZXQpICYmCisJCSAgICAoYXRvbWljX3JlYWQoJmJhdF9wcml2LT5hZ2dyZWdhdGVkX29nbXMpKSkKKwkJCXNlbmRfdGltZSArPSBtc2Vjc190b19qaWZmaWVzKE1BWF9BR0dSRUdBVElPTl9NUyk7CisKKwkJbmV3X2FnZ3JlZ2F0ZWRfcGFja2V0KHBhY2tldF9idWZmLCBwYWNrZXRfbGVuLAorCQkJCSAgICAgIHNlbmRfdGltZSwgZGlyZWN0X2xpbmssCisJCQkJICAgICAgaWZfaW5jb21pbmcsIG93bl9wYWNrZXQpOworCX0gZWxzZSB7CisJCWFnZ3JlZ2F0ZShmb3J3X3BhY2tldF9hZ2dyLAorCQkJICBwYWNrZXRfYnVmZiwgcGFja2V0X2xlbiwKKwkJCSAgZGlyZWN0X2xpbmspOworCQlzcGluX3VubG9ja19iaCgmYmF0X3ByaXYtPmZvcndfYmF0X2xpc3RfbG9jayk7CisJfQorfQorCisvKiB1bnBhY2sgdGhlIGFnZ3JlZ2F0ZWQgcGFja2V0cyBhbmQgcHJvY2VzcyB0aGVtIG9uZSBieSBvbmUgKi8KK3ZvaWQgcmVjZWl2ZV9hZ2dyX2JhdF9wYWNrZXQoc3RydWN0IGV0aGhkciAqZXRoaGRyLCB1bnNpZ25lZCBjaGFyICpwYWNrZXRfYnVmZiwKKwkJCSAgICAgaW50IHBhY2tldF9sZW4sIHN0cnVjdCBiYXRtYW5faWYgKmlmX2luY29taW5nKQoreworCXN0cnVjdCBiYXRtYW5fcGFja2V0ICpiYXRtYW5fcGFja2V0OworCWludCBidWZmX3BvcyA9IDA7CisJdW5zaWduZWQgY2hhciAqaG5hX2J1ZmY7CisKKwliYXRtYW5fcGFja2V0ID0gKHN0cnVjdCBiYXRtYW5fcGFja2V0ICopcGFja2V0X2J1ZmY7CisKKwlkbyB7CisJCS8qIG5ldHdvcmsgdG8gaG9zdCBvcmRlciBmb3Igb3VyIDMyYml0IHNlcW5vLCBhbmQgdGhlCisJCSAgIG9yaWdfaW50ZXJ2YWwuICovCisJCWJhdG1hbl9wYWNrZXQtPnNlcW5vID0gbnRvaGwoYmF0bWFuX3BhY2tldC0+c2Vxbm8pOworCisJCWhuYV9idWZmID0gcGFja2V0X2J1ZmYgKyBidWZmX3BvcyArIEJBVF9QQUNLRVRfTEVOOworCQlyZWNlaXZlX2JhdF9wYWNrZXQoZXRoaGRyLCBiYXRtYW5fcGFja2V0LAorCQkJCSAgIGhuYV9idWZmLCBobmFfbGVuKGJhdG1hbl9wYWNrZXQpLAorCQkJCSAgIGlmX2luY29taW5nKTsKKworCQlidWZmX3BvcyArPSBCQVRfUEFDS0VUX0xFTiArIGhuYV9sZW4oYmF0bWFuX3BhY2tldCk7CisJCWJhdG1hbl9wYWNrZXQgPSAoc3RydWN0IGJhdG1hbl9wYWNrZXQgKikKKwkJCShwYWNrZXRfYnVmZiArIGJ1ZmZfcG9zKTsKKwl9IHdoaWxlIChhZ2dyZWdhdGVkX3BhY2tldChidWZmX3BvcywgcGFja2V0X2xlbiwKKwkJCQkgICBiYXRtYW5fcGFja2V0LT5udW1faG5hKSk7Cit9CmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9hZ2dyZWdhdGlvbi5oIGIvbmV0L2JhdG1hbi1hZHYvYWdncmVnYXRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWE5MWIzCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L2JhdG1hbi1hZHYvYWdncmVnYXRpb24uaApAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTAgQi5BLlQuTS5BLk4uIGNvbnRyaWJ1dG9yczoKKyAqCisgKiBNYXJlayBMaW5kbmVyLCBTaW1vbiBXdW5kZXJsaWNoCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxLCBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBfTkVUX0JBVE1BTl9BRFZfQUdHUkVHQVRJT05fSF8KKyNkZWZpbmUgX05FVF9CQVRNQU5fQURWX0FHR1JFR0FUSU9OX0hfCisKKyNpbmNsdWRlICJtYWluLmgiCisKKy8qIGlzIHRoZXJlIGFub3RoZXIgYWdncmVnYXRlZCBwYWNrZXQgaGVyZT8gKi8KK3N0YXRpYyBpbmxpbmUgaW50IGFnZ3JlZ2F0ZWRfcGFja2V0KGludCBidWZmX3BvcywgaW50IHBhY2tldF9sZW4sIGludCBudW1faG5hKQoreworCWludCBuZXh0X2J1ZmZfcG9zID0gYnVmZl9wb3MgKyBCQVRfUEFDS0VUX0xFTiArIChudW1faG5hICogRVRIX0FMRU4pOworCisJcmV0dXJuIChuZXh0X2J1ZmZfcG9zIDw9IHBhY2tldF9sZW4pICYmCisJCShuZXh0X2J1ZmZfcG9zIDw9IE1BWF9BR0dSRUdBVElPTl9CWVRFUyk7Cit9CisKK3ZvaWQgYWRkX2JhdF9wYWNrZXRfdG9fbGlzdChzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2LAorCQkJICAgIHVuc2lnbmVkIGNoYXIgKnBhY2tldF9idWZmLCBpbnQgcGFja2V0X2xlbiwKKwkJCSAgICBzdHJ1Y3QgYmF0bWFuX2lmICppZl9pbmNvbWluZywgY2hhciBvd25fcGFja2V0LAorCQkJICAgIHVuc2lnbmVkIGxvbmcgc2VuZF90aW1lKTsKK3ZvaWQgcmVjZWl2ZV9hZ2dyX2JhdF9wYWNrZXQoc3RydWN0IGV0aGhkciAqZXRoaGRyLCB1bnNpZ25lZCBjaGFyICpwYWNrZXRfYnVmZiwKKwkJCSAgICAgaW50IHBhY2tldF9sZW4sIHN0cnVjdCBiYXRtYW5faWYgKmlmX2luY29taW5nKTsKKworI2VuZGlmIC8qIF9ORVRfQkFUTUFOX0FEVl9BR0dSRUdBVElPTl9IXyAqLwpkaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvYmF0X2RlYnVnZnMuYyBiL25ldC9iYXRtYW4tYWR2L2JhdF9kZWJ1Z2ZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFlODFkMAotLS0gL2Rldi9udWxsCisrKyBiL25ldC9iYXRtYW4tYWR2L2JhdF9kZWJ1Z2ZzLmMKQEAgLTAsMCArMSwzNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQi5BLlQuTS5BLk4uIGNvbnRyaWJ1dG9yczoKKyAqCisgKiBNYXJlayBMaW5kbmVyCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxLCBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgIm1haW4uaCIKKworI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKworI2luY2x1ZGUgImJhdF9kZWJ1Z2ZzLmgiCisjaW5jbHVkZSAidHJhbnNsYXRpb24tdGFibGUuaCIKKyNpbmNsdWRlICJvcmlnaW5hdG9yLmgiCisjaW5jbHVkZSAiaGFyZC1pbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJnYXRld2F5X2NvbW1vbi5oIgorI2luY2x1ZGUgImdhdGV3YXlfY2xpZW50LmgiCisjaW5jbHVkZSAic29mdC1pbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJ2aXMuaCIKKyNpbmNsdWRlICJpY21wX3NvY2tldC5oIgorCitzdGF0aWMgc3RydWN0IGRlbnRyeSAqYmF0X2RlYnVnZnM7CisKKyNpZmRlZiBDT05GSUdfQkFUTUFOX0FEVl9ERUJVRworI2RlZmluZSBMT0dfQlVGRl9NQVNLIChsb2dfYnVmZl9sZW4tMSkKKyNkZWZpbmUgTE9HX0JVRkYoaWR4KSAoZGVidWdfbG9nLT5sb2dfYnVmZlsoaWR4KSAmIExPR19CVUZGX01BU0tdKQorCitzdGF0aWMgaW50IGxvZ19idWZmX2xlbiA9IExPR19CVUZfTEVOOworCitzdGF0aWMgdm9pZCBlbWl0X2xvZ19jaGFyKHN0cnVjdCBkZWJ1Z19sb2cgKmRlYnVnX2xvZywgY2hhciBjKQoreworCUxPR19CVUZGKGRlYnVnX2xvZy0+bG9nX2VuZCkgPSBjOworCWRlYnVnX2xvZy0+bG9nX2VuZCsrOworCisJaWYgKGRlYnVnX2xvZy0+bG9nX2VuZCAtIGRlYnVnX2xvZy0+bG9nX3N0YXJ0ID4gbG9nX2J1ZmZfbGVuKQorCQlkZWJ1Z19sb2ctPmxvZ19zdGFydCA9IGRlYnVnX2xvZy0+bG9nX2VuZCAtIGxvZ19idWZmX2xlbjsKK30KKworc3RhdGljIGludCBmZGVidWdfbG9nKHN0cnVjdCBkZWJ1Z19sb2cgKmRlYnVnX2xvZywgY2hhciAqZm10LCAuLi4pCit7CisJaW50IHByaW50ZWRfbGVuOworCXZhX2xpc3QgYXJnczsKKwlzdGF0aWMgY2hhciBkZWJ1Z19sb2dfYnVmWzI1Nl07CisJY2hhciAqcDsKKworCWlmICghZGVidWdfbG9nKQorCQlyZXR1cm4gMDsKKworCXNwaW5fbG9ja19iaCgmZGVidWdfbG9nLT5sb2NrKTsKKwl2YV9zdGFydChhcmdzLCBmbXQpOworCXByaW50ZWRfbGVuID0gdnNjbnByaW50ZihkZWJ1Z19sb2dfYnVmLCBzaXplb2YoZGVidWdfbG9nX2J1ZiksCisJCQkJIGZtdCwgYXJncyk7CisJdmFfZW5kKGFyZ3MpOworCisJZm9yIChwID0gZGVidWdfbG9nX2J1ZjsgKnAgIT0gMDsgcCsrKQorCQllbWl0X2xvZ19jaGFyKGRlYnVnX2xvZywgKnApOworCisJc3Bpbl91bmxvY2tfYmgoJmRlYnVnX2xvZy0+bG9jayk7CisKKwl3YWtlX3VwKCZkZWJ1Z19sb2ctPnF1ZXVlX3dhaXQpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBkZWJ1Z19sb2coc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiwgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcmdzOworCWNoYXIgdG1wX2xvZ19idWZbMjU2XTsKKworCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisJdnNjbnByaW50Zih0bXBfbG9nX2J1Ziwgc2l6ZW9mKHRtcF9sb2dfYnVmKSwgZm10LCBhcmdzKTsKKwlmZGVidWdfbG9nKGJhdF9wcml2LT5kZWJ1Z19sb2csICJbJTEwdV0gJXMiLAorCQkgICAoamlmZmllcyAvIEhaKSwgdG1wX2xvZ19idWYpOworCXZhX2VuZChhcmdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxvZ19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCW5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbGUpOworCWZpbGUtPnByaXZhdGVfZGF0YSA9IGlub2RlLT5pX3ByaXZhdGU7CisJaW5jX21vZHVsZV9jb3VudCgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxvZ19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWRlY19tb2R1bGVfY291bnQoKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QgbG9nX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCisJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBkZWJ1Z19sb2cgKmRlYnVnX2xvZyA9IGJhdF9wcml2LT5kZWJ1Z19sb2c7CisJaW50IGVycm9yLCBpID0gMDsKKwljaGFyIGM7CisKKwlpZiAoKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSAmJgorCSAgICAhKGRlYnVnX2xvZy0+bG9nX2VuZCAtIGRlYnVnX2xvZy0+bG9nX3N0YXJ0KSkKKwkJcmV0dXJuIC1FQUdBSU47CisKKwlpZiAoKCFidWYpIHx8IChjb3VudCA8IDApKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjb3VudCA9PSAwKQorCQlyZXR1cm4gMDsKKworCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgYnVmLCBjb3VudCkpCisJCXJldHVybiAtRUZBVUxUOworCisJZXJyb3IgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoZGVidWdfbG9nLT5xdWV1ZV93YWl0LAorCQkJCShkZWJ1Z19sb2ctPmxvZ19zdGFydCAtIGRlYnVnX2xvZy0+bG9nX2VuZCkpOworCisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisKKwlzcGluX2xvY2tfYmgoJmRlYnVnX2xvZy0+bG9jayk7CisKKwl3aGlsZSAoKCFlcnJvcikgJiYgKGkgPCBjb3VudCkgJiYKKwkgICAgICAgKGRlYnVnX2xvZy0+bG9nX3N0YXJ0ICE9IGRlYnVnX2xvZy0+bG9nX2VuZCkpIHsKKwkJYyA9IExPR19CVUZGKGRlYnVnX2xvZy0+bG9nX3N0YXJ0KTsKKworCQlkZWJ1Z19sb2ctPmxvZ19zdGFydCsrOworCisJCXNwaW5fdW5sb2NrX2JoKCZkZWJ1Z19sb2ctPmxvY2spOworCisJCWVycm9yID0gX19wdXRfdXNlcihjLCBidWYpOworCisJCXNwaW5fbG9ja19iaCgmZGVidWdfbG9nLT5sb2NrKTsKKworCQlidWYrKzsKKwkJaSsrOworCisJfQorCisJc3Bpbl91bmxvY2tfYmgoJmRlYnVnX2xvZy0+bG9jayk7CisKKwlpZiAoIWVycm9yKQorCQlyZXR1cm4gaTsKKworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBsb2dfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCkKK3sKKwlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBkZWJ1Z19sb2cgKmRlYnVnX2xvZyA9IGJhdF9wcml2LT5kZWJ1Z19sb2c7CisKKwlwb2xsX3dhaXQoZmlsZSwgJmRlYnVnX2xvZy0+cXVldWVfd2FpdCwgd2FpdCk7CisKKwlpZiAoZGVidWdfbG9nLT5sb2dfZW5kIC0gZGVidWdfbG9nLT5sb2dfc3RhcnQpCisJCXJldHVybiBQT0xMSU4gfCBQT0xMUkROT1JNOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxvZ19mb3BzID0geworCS5vcGVuICAgICAgICAgICA9IGxvZ19vcGVuLAorCS5yZWxlYXNlICAgICAgICA9IGxvZ19yZWxlYXNlLAorCS5yZWFkICAgICAgICAgICA9IGxvZ19yZWFkLAorCS5wb2xsICAgICAgICAgICA9IGxvZ19wb2xsLAorCS5sbHNlZWsgICAgICAgICA9IG5vX2xsc2VlaywKK307CisKK3N0YXRpYyBpbnQgZGVidWdfbG9nX3NldHVwKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYpCit7CisJc3RydWN0IGRlbnRyeSAqZDsKKworCWlmICghYmF0X3ByaXYtPmRlYnVnX2RpcikKKwkJZ290byBlcnI7CisKKwliYXRfcHJpdi0+ZGVidWdfbG9nID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRlYnVnX2xvZyksIEdGUF9BVE9NSUMpOworCWlmICghYmF0X3ByaXYtPmRlYnVnX2xvZykKKwkJZ290byBlcnI7CisKKwlzcGluX2xvY2tfaW5pdCgmYmF0X3ByaXYtPmRlYnVnX2xvZy0+bG9jayk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmYmF0X3ByaXYtPmRlYnVnX2xvZy0+cXVldWVfd2FpdCk7CisKKwlkID0gZGVidWdmc19jcmVhdGVfZmlsZSgibG9nIiwgU19JRlJFRyB8IFNfSVJVU1IsCisJCQkJYmF0X3ByaXYtPmRlYnVnX2RpciwgYmF0X3ByaXYsICZsb2dfZm9wcyk7CisJaWYgKGQpCisJCWdvdG8gZXJyOworCisJcmV0dXJuIDA7CisKK2VycjoKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgZGVidWdfbG9nX2NsZWFudXAoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdikKK3sKKwlrZnJlZShiYXRfcHJpdi0+ZGVidWdfbG9nKTsKKwliYXRfcHJpdi0+ZGVidWdfbG9nID0gTlVMTDsKK30KKyNlbHNlIC8qIENPTkZJR19CQVRNQU5fQURWX0RFQlVHICovCitzdGF0aWMgaW50IGRlYnVnX2xvZ19zZXR1cChzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2KQoreworCWJhdF9wcml2LT5kZWJ1Z19sb2cgPSBOVUxMOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkZWJ1Z19sb2dfY2xlYW51cChzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2KQoreworCXJldHVybjsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IG9yaWdpbmF0b3JzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilpbm9kZS0+aV9wcml2YXRlOworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBvcmlnX3NlcV9wcmludF90ZXh0LCBuZXRfZGV2KTsKK30KKworc3RhdGljIGludCBnYXRld2F5c19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopaW5vZGUtPmlfcHJpdmF0ZTsKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgZ3dfY2xpZW50X3NlcV9wcmludF90ZXh0LCBuZXRfZGV2KTsKK30KKworc3RhdGljIGludCBzb2Z0aWZfbmVpZ2hfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWlub2RlLT5pX3ByaXZhdGU7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHNvZnRpZl9uZWlnaF9zZXFfcHJpbnRfdGV4dCwgbmV0X2Rldik7Cit9CisKK3N0YXRpYyBpbnQgdHJhbnN0YWJsZV9nbG9iYWxfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWlub2RlLT5pX3ByaXZhdGU7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGhuYV9nbG9iYWxfc2VxX3ByaW50X3RleHQsIG5ldF9kZXYpOworfQorCitzdGF0aWMgaW50IHRyYW5zdGFibGVfbG9jYWxfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWlub2RlLT5pX3ByaXZhdGU7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGhuYV9sb2NhbF9zZXFfcHJpbnRfdGV4dCwgbmV0X2Rldik7Cit9CisKK3N0YXRpYyBpbnQgdmlzX2RhdGFfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWlub2RlLT5pX3ByaXZhdGU7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHZpc19zZXFfcHJpbnRfdGV4dCwgbmV0X2Rldik7Cit9CisKK3N0cnVjdCBiYXRfZGVidWdpbmZvIHsKKwlzdHJ1Y3QgYXR0cmlidXRlIGF0dHI7CisJY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzOworfTsKKworI2RlZmluZSBCQVRfREVCVUdJTkZPKF9uYW1lLCBfbW9kZSwgX29wZW4pCVwKK3N0cnVjdCBiYXRfZGVidWdpbmZvIGJhdF9kZWJ1Z2luZm9fIyNfbmFtZSA9IHsJXAorCS5hdHRyID0geyAubmFtZSA9IF9fc3RyaW5naWZ5KF9uYW1lKSwJXAorCQkgIC5tb2RlID0gX21vZGUsIH0sCQlcCisJLmZvcHMgPSB7IC5vd25lciA9IFRISVNfTU9EVUxFLAkJXAorCQkgIC5vcGVuID0gX29wZW4sCQlcCisJCSAgLnJlYWQJPSBzZXFfcmVhZCwJCVwKKwkJICAubGxzZWVrID0gc2VxX2xzZWVrLAkJXAorCQkgIC5yZWxlYXNlID0gc2luZ2xlX3JlbGVhc2UsCVwKKwkJfQkJCQlcCit9OworCitzdGF0aWMgQkFUX0RFQlVHSU5GTyhvcmlnaW5hdG9ycywgU19JUlVHTywgb3JpZ2luYXRvcnNfb3Blbik7CitzdGF0aWMgQkFUX0RFQlVHSU5GTyhnYXRld2F5cywgU19JUlVHTywgZ2F0ZXdheXNfb3Blbik7CitzdGF0aWMgQkFUX0RFQlVHSU5GTyhzb2Z0aWZfbmVpZ2gsIFNfSVJVR08sIHNvZnRpZl9uZWlnaF9vcGVuKTsKK3N0YXRpYyBCQVRfREVCVUdJTkZPKHRyYW5zdGFibGVfZ2xvYmFsLCBTX0lSVUdPLCB0cmFuc3RhYmxlX2dsb2JhbF9vcGVuKTsKK3N0YXRpYyBCQVRfREVCVUdJTkZPKHRyYW5zdGFibGVfbG9jYWwsIFNfSVJVR08sIHRyYW5zdGFibGVfbG9jYWxfb3Blbik7CitzdGF0aWMgQkFUX0RFQlVHSU5GTyh2aXNfZGF0YSwgU19JUlVHTywgdmlzX2RhdGFfb3Blbik7CisKK3N0YXRpYyBzdHJ1Y3QgYmF0X2RlYnVnaW5mbyAqbWVzaF9kZWJ1Z2luZm9zW10gPSB7CisJJmJhdF9kZWJ1Z2luZm9fb3JpZ2luYXRvcnMsCisJJmJhdF9kZWJ1Z2luZm9fZ2F0ZXdheXMsCisJJmJhdF9kZWJ1Z2luZm9fc29mdGlmX25laWdoLAorCSZiYXRfZGVidWdpbmZvX3RyYW5zdGFibGVfZ2xvYmFsLAorCSZiYXRfZGVidWdpbmZvX3RyYW5zdGFibGVfbG9jYWwsCisJJmJhdF9kZWJ1Z2luZm9fdmlzX2RhdGEsCisJTlVMTCwKK307CisKK3ZvaWQgZGVidWdmc19pbml0KHZvaWQpCit7CisJYmF0X2RlYnVnZnMgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoREVCVUdGU19CQVRfU1VCRElSLCBOVUxMKTsKKwlpZiAoYmF0X2RlYnVnZnMgPT0gRVJSX1BUUigtRU5PREVWKSkKKwkJYmF0X2RlYnVnZnMgPSBOVUxMOworfQorCit2b2lkIGRlYnVnZnNfZGVzdHJveSh2b2lkKQoreworCWlmIChiYXRfZGVidWdmcykgeworCQlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoYmF0X2RlYnVnZnMpOworCQliYXRfZGVidWdmcyA9IE5VTEw7CisJfQorfQorCitpbnQgZGVidWdmc19hZGRfbWVzaGlmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGJhdF9kZWJ1Z2luZm8gKipiYXRfZGVidWc7CisJc3RydWN0IGRlbnRyeSAqZmlsZTsKKworCWlmICghYmF0X2RlYnVnZnMpCisJCWdvdG8gb3V0OworCisJYmF0X3ByaXYtPmRlYnVnX2RpciA9IGRlYnVnZnNfY3JlYXRlX2RpcihkZXYtPm5hbWUsIGJhdF9kZWJ1Z2ZzKTsKKwlpZiAoIWJhdF9wcml2LT5kZWJ1Z19kaXIpCisJCWdvdG8gb3V0OworCisJYmF0X3NvY2tldF9zZXR1cChiYXRfcHJpdik7CisJZGVidWdfbG9nX3NldHVwKGJhdF9wcml2KTsKKworCWZvciAoYmF0X2RlYnVnID0gbWVzaF9kZWJ1Z2luZm9zOyAqYmF0X2RlYnVnOyArK2JhdF9kZWJ1ZykgeworCQlmaWxlID0gZGVidWdmc19jcmVhdGVfZmlsZSgoKCpiYXRfZGVidWcpLT5hdHRyKS5uYW1lLAorCQkJCQkgIFNfSUZSRUcgfCAoKCpiYXRfZGVidWcpLT5hdHRyKS5tb2RlLAorCQkJCQkgIGJhdF9wcml2LT5kZWJ1Z19kaXIsCisJCQkJCSAgZGV2LCAmKCpiYXRfZGVidWcpLT5mb3BzKTsKKwkJaWYgKCFmaWxlKSB7CisJCQliYXRfZXJyKGRldiwgIkNhbid0IGFkZCBkZWJ1Z2ZzIGZpbGU6ICVzLyVzXG4iLAorCQkJCWRldi0+bmFtZSwgKCgqYmF0X2RlYnVnKS0+YXR0cikubmFtZSk7CisJCQlnb3RvIHJlbV9hdHRyOworCQl9CisJfQorCisJcmV0dXJuIDA7CityZW1fYXR0cjoKKwlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoYmF0X3ByaXYtPmRlYnVnX2Rpcik7CisJYmF0X3ByaXYtPmRlYnVnX2RpciA9IE5VTEw7CitvdXQ6CisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCisJcmV0dXJuIC1FTk9NRU07CisjZWxzZQorCXJldHVybiAwOworI2VuZGlmIC8qIENPTkZJR19ERUJVR19GUyAqLworfQorCit2b2lkIGRlYnVnZnNfZGVsX21lc2hpZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJZGVidWdfbG9nX2NsZWFudXAoYmF0X3ByaXYpOworCisJaWYgKGJhdF9kZWJ1Z2ZzKSB7CisJCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShiYXRfcHJpdi0+ZGVidWdfZGlyKTsKKwkJYmF0X3ByaXYtPmRlYnVnX2RpciA9IE5VTEw7CisJfQorfQpkaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvYmF0X2RlYnVnZnMuaCBiL25ldC9iYXRtYW4tYWR2L2JhdF9kZWJ1Z2ZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJkZjUzMgotLS0gL2Rldi9udWxsCisrKyBiL25ldC9iYXRtYW4tYWR2L2JhdF9kZWJ1Z2ZzLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBCLkEuVC5NLkEuTi4gY29udHJpYnV0b3JzOgorICoKKyAqIE1hcmVrIExpbmRuZXIKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEsIFVTQQorICoKKyAqLworCisKKyNpZm5kZWYgX05FVF9CQVRNQU5fQURWX0RFQlVHRlNfSF8KKyNkZWZpbmUgX05FVF9CQVRNQU5fQURWX0RFQlVHRlNfSF8KKworI2RlZmluZSBERUJVR0ZTX0JBVF9TVUJESVIgImJhdG1hbl9hZHYiCisKK3ZvaWQgZGVidWdmc19pbml0KHZvaWQpOwordm9pZCBkZWJ1Z2ZzX2Rlc3Ryb3kodm9pZCk7CitpbnQgZGVidWdmc19hZGRfbWVzaGlmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwordm9pZCBkZWJ1Z2ZzX2RlbF9tZXNoaWYoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisKKyNlbmRpZiAvKiBfTkVUX0JBVE1BTl9BRFZfREVCVUdGU19IXyAqLwpkaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvYmF0X3N5c2ZzLmMgYi9uZXQvYmF0bWFuLWFkdi9iYXRfc3lzZnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDdiYjUxCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L2JhdG1hbi1hZHYvYmF0X3N5c2ZzLmMKQEAgLTAsMCArMSw1OTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQi5BLlQuTS5BLk4uIGNvbnRyaWJ1dG9yczoKKyAqCisgKiBNYXJlayBMaW5kbmVyCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxLCBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgIm1haW4uaCIKKyNpbmNsdWRlICJiYXRfc3lzZnMuaCIKKyNpbmNsdWRlICJ0cmFuc2xhdGlvbi10YWJsZS5oIgorI2luY2x1ZGUgIm9yaWdpbmF0b3IuaCIKKyNpbmNsdWRlICJoYXJkLWludGVyZmFjZS5oIgorI2luY2x1ZGUgImdhdGV3YXlfY29tbW9uLmgiCisjaW5jbHVkZSAiZ2F0ZXdheV9jbGllbnQuaCIKKyNpbmNsdWRlICJ2aXMuaCIKKworI2RlZmluZSB0b19kZXYob2JqKQkJY29udGFpbmVyX29mKG9iaiwgc3RydWN0IGRldmljZSwga29iaikKKyNkZWZpbmUga29ial90b19uZXRkZXYob2JqKQl0b19uZXRfZGV2KHRvX2RldihvYmotPnBhcmVudCkpCisjZGVmaW5lIGtvYmpfdG9fYmF0cHJpdihvYmopCW5ldGRldl9wcml2KGtvYmpfdG9fbmV0ZGV2KG9iaikpCisKKy8qIFVzZSB0aGlzLCBpZiB5b3UgaGF2ZSBjdXN0b21pemVkIHNob3cgYW5kIHN0b3JlIGZ1bmN0aW9ucyAqLworI2RlZmluZSBCQVRfQVRUUihfbmFtZSwgX21vZGUsIF9zaG93LCBfc3RvcmUpCVwKK3N0cnVjdCBiYXRfYXR0cmlidXRlIGJhdF9hdHRyXyMjX25hbWUgPSB7CVwKKwkuYXR0ciA9IHsubmFtZSA9IF9fc3RyaW5naWZ5KF9uYW1lKSwJXAorCQkgLm1vZGUgPSBfbW9kZSB9LAkJXAorCS5zaG93ICAgPSBfc2hvdywJCQlcCisJLnN0b3JlICA9IF9zdG9yZSwJCQlcCit9OworCisjZGVmaW5lIEJBVF9BVFRSX1NUT1JFX0JPT0woX25hbWUsIF9wb3N0X2Z1bmMpCQkJCVwKK3NzaXplX3Qgc3RvcmVfIyNfbmFtZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwJXAorCQkgICAgICBjaGFyICpidWZmLCBzaXplX3QgY291bnQpCQkJCVwKK3sJCQkJCQkJCQlcCisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYgPSBrb2JqX3RvX25ldGRldihrb2JqKTsJCVwKKwlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYobmV0X2Rldik7CQlcCisJcmV0dXJuIF9fc3RvcmVfYm9vbF9hdHRyKGJ1ZmYsIGNvdW50LCBfcG9zdF9mdW5jLCBhdHRyLAkJXAorCQkJCSAmYmF0X3ByaXYtPl9uYW1lLCBuZXRfZGV2KTsJCVwKK30KKworI2RlZmluZSBCQVRfQVRUUl9TSE9XX0JPT0woX25hbWUpCQkJCQlcCitzc2l6ZV90IHNob3dfIyNfbmFtZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwJXAorCQkJICAgIGNoYXIgKmJ1ZmYpCQkJCQlcCit7CQkJCQkJCQkJXAorCXN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYgPSBrb2JqX3RvX2JhdHByaXYoa29iaik7CQlcCisJcmV0dXJuIHNwcmludGYoYnVmZiwgIiVzXG4iLAkJCQkJXAorCQkgICAgICAgYXRvbWljX3JlYWQoJmJhdF9wcml2LT5fbmFtZSkgPT0gMCA/CQlcCisJCSAgICAgICAiZGlzYWJsZWQiIDogImVuYWJsZWQiKTsJCQkJXAorfQkJCQkJCQkJCVwKKworLyogVXNlIHRoaXMsIGlmIHlvdSBhcmUgZ29pbmcgdG8gdHVybiBhIFtuYW1lXSBpbiBiYXRfcHJpdiBvbiBvciBvZmYgKi8KKyNkZWZpbmUgQkFUX0FUVFJfQk9PTChfbmFtZSwgX21vZGUsIF9wb3N0X2Z1bmMpCQkJCVwKKwlzdGF0aWMgQkFUX0FUVFJfU1RPUkVfQk9PTChfbmFtZSwgX3Bvc3RfZnVuYykJCQlcCisJc3RhdGljIEJBVF9BVFRSX1NIT1dfQk9PTChfbmFtZSkJCQkJXAorCXN0YXRpYyBCQVRfQVRUUihfbmFtZSwgX21vZGUsIHNob3dfIyNfbmFtZSwgc3RvcmVfIyNfbmFtZSkKKworCisjZGVmaW5lIEJBVF9BVFRSX1NUT1JFX1VJTlQoX25hbWUsIF9taW4sIF9tYXgsIF9wb3N0X2Z1bmMpCQlcCitzc2l6ZV90IHN0b3JlXyMjX25hbWUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsCVwKKwkJCSAgICAgY2hhciAqYnVmZiwgc2l6ZV90IGNvdW50KQkJCVwKK3sJCQkJCQkJCQlcCisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYgPSBrb2JqX3RvX25ldGRldihrb2JqKTsJCVwKKwlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYobmV0X2Rldik7CQlcCisJcmV0dXJuIF9fc3RvcmVfdWludF9hdHRyKGJ1ZmYsIGNvdW50LCBfbWluLCBfbWF4LCBfcG9zdF9mdW5jLAlcCisJCQkJIGF0dHIsICZiYXRfcHJpdi0+X25hbWUsIG5ldF9kZXYpOwlcCit9CisKKyNkZWZpbmUgQkFUX0FUVFJfU0hPV19VSU5UKF9uYW1lKQkJCQkJXAorc3NpemVfdCBzaG93XyMjX25hbWUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsCVwKKwkJCSAgICBjaGFyICpidWZmKQkJCQkJXAorewkJCQkJCQkJCVwKKwlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2ID0ga29ial90b19iYXRwcml2KGtvYmopOwkJXAorCXJldHVybiBzcHJpbnRmKGJ1ZmYsICIlaVxuIiwgYXRvbWljX3JlYWQoJmJhdF9wcml2LT5fbmFtZSkpOwlcCit9CQkJCQkJCQkJXAorCisvKiBVc2UgdGhpcywgaWYgeW91IGFyZSBnb2luZyB0byBzZXQgW25hbWVdIGluIGJhdF9wcml2IHRvIHVuc2lnbmVkIGludGVnZXIKKyAqIHZhbHVlcyBvbmx5ICovCisjZGVmaW5lIEJBVF9BVFRSX1VJTlQoX25hbWUsIF9tb2RlLCBfbWluLCBfbWF4LCBfcG9zdF9mdW5jKQkJXAorCXN0YXRpYyBCQVRfQVRUUl9TVE9SRV9VSU5UKF9uYW1lLCBfbWluLCBfbWF4LCBfcG9zdF9mdW5jKQlcCisJc3RhdGljIEJBVF9BVFRSX1NIT1dfVUlOVChfbmFtZSkJCQkJXAorCXN0YXRpYyBCQVRfQVRUUihfbmFtZSwgX21vZGUsIHNob3dfIyNfbmFtZSwgc3RvcmVfIyNfbmFtZSkKKworCitzdGF0aWMgaW50IHN0b3JlX2Jvb2xfYXR0cihjaGFyICpidWZmLCBzaXplX3QgY291bnQsCisJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiwKKwkJCSAgIGNoYXIgKmF0dHJfbmFtZSwgYXRvbWljX3QgKmF0dHIpCit7CisJaW50IGVuYWJsZWQgPSAtMTsKKworCWlmIChidWZmW2NvdW50IC0gMV0gPT0gJ1xuJykKKwkJYnVmZltjb3VudCAtIDFdID0gJ1wwJzsKKworCWlmICgoc3RybmNtcChidWZmLCAiMSIsIDIpID09IDApIHx8CisJICAgIChzdHJuY21wKGJ1ZmYsICJlbmFibGUiLCA3KSA9PSAwKSB8fAorCSAgICAoc3RybmNtcChidWZmLCAiZW5hYmxlZCIsIDgpID09IDApKQorCQllbmFibGVkID0gMTsKKworCWlmICgoc3RybmNtcChidWZmLCAiMCIsIDIpID09IDApIHx8CisJICAgIChzdHJuY21wKGJ1ZmYsICJkaXNhYmxlIiwgOCkgPT0gMCkgfHwKKwkgICAgKHN0cm5jbXAoYnVmZiwgImRpc2FibGVkIiwgOSkgPT0gMCkpCisJCWVuYWJsZWQgPSAwOworCisJaWYgKGVuYWJsZWQgPCAwKSB7CisJCWJhdF9pbmZvKG5ldF9kZXYsCisJCQkgIiVzOiBJbnZhbGlkIHBhcmFtZXRlciByZWNlaXZlZDogJXNcbiIsCisJCQkgYXR0cl9uYW1lLCBidWZmKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGF0b21pY19yZWFkKGF0dHIpID09IGVuYWJsZWQpCisJCXJldHVybiBjb3VudDsKKworCWJhdF9pbmZvKG5ldF9kZXYsICIlczogQ2hhbmdpbmcgZnJvbTogJXMgdG86ICVzXG4iLCBhdHRyX25hbWUsCisJCSBhdG9taWNfcmVhZChhdHRyKSA9PSAxID8gImVuYWJsZWQiIDogImRpc2FibGVkIiwKKwkJIGVuYWJsZWQgPT0gMSA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpOworCisJYXRvbWljX3NldChhdHRyLCAodW5zaWduZWQpZW5hYmxlZCk7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgaW5saW5lIHNzaXplX3QgX19zdG9yZV9ib29sX2F0dHIoY2hhciAqYnVmZiwgc2l6ZV90IGNvdW50LAorCQkJdm9pZCAoKnBvc3RfZnVuYykoc3RydWN0IG5ldF9kZXZpY2UgKiksCisJCQlzdHJ1Y3QgYXR0cmlidXRlICphdHRyLAorCQkJYXRvbWljX3QgKmF0dHJfc3RvcmUsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2KQoreworCWludCByZXQ7CisKKwlyZXQgPSBzdG9yZV9ib29sX2F0dHIoYnVmZiwgY291bnQsIG5ldF9kZXYsIChjaGFyICopYXR0ci0+bmFtZSwKKwkJCSAgICAgIGF0dHJfc3RvcmUpOworCWlmIChwb3N0X2Z1bmMgJiYgcmV0KQorCQlwb3N0X2Z1bmMobmV0X2Rldik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHN0b3JlX3VpbnRfYXR0cihjaGFyICpidWZmLCBzaXplX3QgY291bnQsCisJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiwgY2hhciAqYXR0cl9uYW1lLAorCQkJICAgdW5zaWduZWQgaW50IG1pbiwgdW5zaWduZWQgaW50IG1heCwgYXRvbWljX3QgKmF0dHIpCit7CisJdW5zaWduZWQgbG9uZyB1aW50X3ZhbDsKKwlpbnQgcmV0OworCisJcmV0ID0gc3RyaWN0X3N0cnRvdWwoYnVmZiwgMTAsICZ1aW50X3ZhbCk7CisJaWYgKHJldCkgeworCQliYXRfaW5mbyhuZXRfZGV2LAorCQkJICIlczogSW52YWxpZCBwYXJhbWV0ZXIgcmVjZWl2ZWQ6ICVzXG4iLAorCQkJIGF0dHJfbmFtZSwgYnVmZik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICh1aW50X3ZhbCA8IG1pbikgeworCQliYXRfaW5mbyhuZXRfZGV2LCAiJXM6IFZhbHVlIGlzIHRvbyBzbWFsbDogJWx1IG1pbjogJXVcbiIsCisJCQkgYXR0cl9uYW1lLCB1aW50X3ZhbCwgbWluKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHVpbnRfdmFsID4gbWF4KSB7CisJCWJhdF9pbmZvKG5ldF9kZXYsICIlczogVmFsdWUgaXMgdG9vIGJpZzogJWx1IG1heDogJXVcbiIsCisJCQkgYXR0cl9uYW1lLCB1aW50X3ZhbCwgbWF4KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGF0b21pY19yZWFkKGF0dHIpID09IHVpbnRfdmFsKQorCQlyZXR1cm4gY291bnQ7CisKKwliYXRfaW5mbyhuZXRfZGV2LCAiJXM6IENoYW5naW5nIGZyb206ICVpIHRvOiAlbHVcbiIsCisJCSBhdHRyX25hbWUsIGF0b21pY19yZWFkKGF0dHIpLCB1aW50X3ZhbCk7CisKKwlhdG9taWNfc2V0KGF0dHIsIHVpbnRfdmFsKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3NpemVfdCBfX3N0b3JlX3VpbnRfYXR0cihjaGFyICpidWZmLCBzaXplX3QgY291bnQsCisJCQlpbnQgbWluLCBpbnQgbWF4LAorCQkJdm9pZCAoKnBvc3RfZnVuYykoc3RydWN0IG5ldF9kZXZpY2UgKiksCisJCQlzdHJ1Y3QgYXR0cmlidXRlICphdHRyLAorCQkJYXRvbWljX3QgKmF0dHJfc3RvcmUsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2KQoreworCWludCByZXQ7CisKKwlyZXQgPSBzdG9yZV91aW50X2F0dHIoYnVmZiwgY291bnQsIG5ldF9kZXYsIChjaGFyICopYXR0ci0+bmFtZSwKKwkJCSAgICAgIG1pbiwgbWF4LCBhdHRyX3N0b3JlKTsKKwlpZiAocG9zdF9mdW5jICYmIHJldCkKKwkJcG9zdF9mdW5jKG5ldF9kZXYpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd192aXNfbW9kZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICAgY2hhciAqYnVmZikKK3sKKwlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2ID0ga29ial90b19iYXRwcml2KGtvYmopOworCWludCB2aXNfbW9kZSA9IGF0b21pY19yZWFkKCZiYXRfcHJpdi0+dmlzX21vZGUpOworCisJcmV0dXJuIHNwcmludGYoYnVmZiwgIiVzXG4iLAorCQkgICAgICAgdmlzX21vZGUgPT0gVklTX1RZUEVfQ0xJRU5UX1VQREFURSA/CisJCQkJCQkJImNsaWVudCIgOiAic2VydmVyIik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX3Zpc19tb2RlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLAorCQkJICAgICAgY2hhciAqYnVmZiwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2ID0ga29ial90b19uZXRkZXYoa29iaik7CisJc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KG5ldF9kZXYpOworCXVuc2lnbmVkIGxvbmcgdmFsOworCWludCByZXQsIHZpc19tb2RlX3RtcCA9IC0xOworCisJcmV0ID0gc3RyaWN0X3N0cnRvdWwoYnVmZiwgMTAsICZ2YWwpOworCisJaWYgKCgoY291bnQgPT0gMikgJiYgKCFyZXQpICYmICh2YWwgPT0gVklTX1RZUEVfQ0xJRU5UX1VQREFURSkpIHx8CisJICAgIChzdHJuY21wKGJ1ZmYsICJjbGllbnQiLCA2KSA9PSAwKSB8fAorCSAgICAoc3RybmNtcChidWZmLCAib2ZmIiwgMykgPT0gMCkpCisJCXZpc19tb2RlX3RtcCA9IFZJU19UWVBFX0NMSUVOVF9VUERBVEU7CisKKwlpZiAoKChjb3VudCA9PSAyKSAmJiAoIXJldCkgJiYgKHZhbCA9PSBWSVNfVFlQRV9TRVJWRVJfU1lOQykpIHx8CisJICAgIChzdHJuY21wKGJ1ZmYsICJzZXJ2ZXIiLCA2KSA9PSAwKSkKKwkJdmlzX21vZGVfdG1wID0gVklTX1RZUEVfU0VSVkVSX1NZTkM7CisKKwlpZiAodmlzX21vZGVfdG1wIDwgMCkgeworCQlpZiAoYnVmZltjb3VudCAtIDFdID09ICdcbicpCisJCQlidWZmW2NvdW50IC0gMV0gPSAnXDAnOworCisJCWJhdF9pbmZvKG5ldF9kZXYsCisJCQkgIkludmFsaWQgcGFyYW1ldGVyIGZvciAndmlzIG1vZGUnIHNldHRpbmcgcmVjZWl2ZWQ6ICIKKwkJCSAiJXNcbiIsIGJ1ZmYpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoYXRvbWljX3JlYWQoJmJhdF9wcml2LT52aXNfbW9kZSkgPT0gdmlzX21vZGVfdG1wKQorCQlyZXR1cm4gY291bnQ7CisKKwliYXRfaW5mbyhuZXRfZGV2LCAiQ2hhbmdpbmcgdmlzIG1vZGUgZnJvbTogJXMgdG86ICVzXG4iLAorCQkgYXRvbWljX3JlYWQoJmJhdF9wcml2LT52aXNfbW9kZSkgPT0gVklTX1RZUEVfQ0xJRU5UX1VQREFURSA/CisJCSAiY2xpZW50IiA6ICJzZXJ2ZXIiLCB2aXNfbW9kZV90bXAgPT0gVklTX1RZUEVfQ0xJRU5UX1VQREFURSA/CisJCSAiY2xpZW50IiA6ICJzZXJ2ZXIiKTsKKworCWF0b21pY19zZXQoJmJhdF9wcml2LT52aXNfbW9kZSwgKHVuc2lnbmVkKXZpc19tb2RlX3RtcCk7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgdm9pZCBwb3N0X2d3X2Rlc2VsZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2KQoreworCXN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYgPSBuZXRkZXZfcHJpdihuZXRfZGV2KTsKKwlnd19kZXNlbGVjdChiYXRfcHJpdik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfZ3dfbW9kZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICBjaGFyICpidWZmKQoreworCXN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYgPSBrb2JqX3RvX2JhdHByaXYoa29iaik7CisJaW50IGJ5dGVzX3dyaXR0ZW47CisKKwlzd2l0Y2ggKGF0b21pY19yZWFkKCZiYXRfcHJpdi0+Z3dfbW9kZSkpIHsKKwljYXNlIEdXX01PREVfQ0xJRU5UOgorCQlieXRlc193cml0dGVuID0gc3ByaW50ZihidWZmLCAiJXNcbiIsIEdXX01PREVfQ0xJRU5UX05BTUUpOworCQlicmVhazsKKwljYXNlIEdXX01PREVfU0VSVkVSOgorCQlieXRlc193cml0dGVuID0gc3ByaW50ZihidWZmLCAiJXNcbiIsIEdXX01PREVfU0VSVkVSX05BTUUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlieXRlc193cml0dGVuID0gc3ByaW50ZihidWZmLCAiJXNcbiIsIEdXX01PREVfT0ZGX05BTUUpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gYnl0ZXNfd3JpdHRlbjsKK30KKworc3RhdGljIHNzaXplX3Qgc3RvcmVfZ3dfbW9kZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICAgY2hhciAqYnVmZiwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2ID0ga29ial90b19uZXRkZXYoa29iaik7CisJc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KG5ldF9kZXYpOworCWNoYXIgKmN1cnJfZ3dfbW9kZV9zdHI7CisJaW50IGd3X21vZGVfdG1wID0gLTE7CisKKwlpZiAoYnVmZltjb3VudCAtIDFdID09ICdcbicpCisJCWJ1ZmZbY291bnQgLSAxXSA9ICdcMCc7CisKKwlpZiAoc3RybmNtcChidWZmLCBHV19NT0RFX09GRl9OQU1FLCBzdHJsZW4oR1dfTU9ERV9PRkZfTkFNRSkpID09IDApCisJCWd3X21vZGVfdG1wID0gR1dfTU9ERV9PRkY7CisKKwlpZiAoc3RybmNtcChidWZmLCBHV19NT0RFX0NMSUVOVF9OQU1FLAorCQkgICBzdHJsZW4oR1dfTU9ERV9DTElFTlRfTkFNRSkpID09IDApCisJCWd3X21vZGVfdG1wID0gR1dfTU9ERV9DTElFTlQ7CisKKwlpZiAoc3RybmNtcChidWZmLCBHV19NT0RFX1NFUlZFUl9OQU1FLAorCQkgICBzdHJsZW4oR1dfTU9ERV9TRVJWRVJfTkFNRSkpID09IDApCisJCWd3X21vZGVfdG1wID0gR1dfTU9ERV9TRVJWRVI7CisKKwlpZiAoZ3dfbW9kZV90bXAgPCAwKSB7CisJCWJhdF9pbmZvKG5ldF9kZXYsCisJCQkgIkludmFsaWQgcGFyYW1ldGVyIGZvciAnZ3cgbW9kZScgc2V0dGluZyByZWNlaXZlZDogIgorCQkJICIlc1xuIiwgYnVmZik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChhdG9taWNfcmVhZCgmYmF0X3ByaXYtPmd3X21vZGUpID09IGd3X21vZGVfdG1wKQorCQlyZXR1cm4gY291bnQ7CisKKwlzd2l0Y2ggKGF0b21pY19yZWFkKCZiYXRfcHJpdi0+Z3dfbW9kZSkpIHsKKwljYXNlIEdXX01PREVfQ0xJRU5UOgorCQljdXJyX2d3X21vZGVfc3RyID0gR1dfTU9ERV9DTElFTlRfTkFNRTsKKwkJYnJlYWs7CisJY2FzZSBHV19NT0RFX1NFUlZFUjoKKwkJY3Vycl9nd19tb2RlX3N0ciA9IEdXX01PREVfU0VSVkVSX05BTUU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWN1cnJfZ3dfbW9kZV9zdHIgPSBHV19NT0RFX09GRl9OQU1FOworCQlicmVhazsKKwl9CisKKwliYXRfaW5mbyhuZXRfZGV2LCAiQ2hhbmdpbmcgZ3cgbW9kZSBmcm9tOiAlcyB0bzogJXNcbiIsCisJCSBjdXJyX2d3X21vZGVfc3RyLCBidWZmKTsKKworCWd3X2Rlc2VsZWN0KGJhdF9wcml2KTsKKwlhdG9taWNfc2V0KCZiYXRfcHJpdi0+Z3dfbW9kZSwgKHVuc2lnbmVkKWd3X21vZGVfdG1wKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfZ3dfYndpZHRoKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLAorCQkJICAgICAgY2hhciAqYnVmZikKK3sKKwlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2ID0ga29ial90b19iYXRwcml2KGtvYmopOworCWludCBkb3duLCB1cDsKKwlpbnQgZ3dfYmFuZHdpZHRoID0gYXRvbWljX3JlYWQoJmJhdF9wcml2LT5nd19iYW5kd2lkdGgpOworCisJZ3dfYmFuZHdpZHRoX3RvX2tiaXQoZ3dfYmFuZHdpZHRoLCAmZG93biwgJnVwKTsKKwlyZXR1cm4gc3ByaW50ZihidWZmLCAiJWklcy8laSVzXG4iLAorCQkgICAgICAgKGRvd24gPiAyMDQ4ID8gZG93biAvIDEwMjQgOiBkb3duKSwKKwkJICAgICAgIChkb3duID4gMjA0OCA/ICJNQml0IiA6ICJLQml0IiksCisJCSAgICAgICAodXAgPiAyMDQ4ID8gdXAgLyAxMDI0IDogdXApLAorCQkgICAgICAgKHVwID4gMjA0OCA/ICJNQml0IiA6ICJLQml0IikpOworfQorCitzdGF0aWMgc3NpemVfdCBzdG9yZV9nd19id2lkdGgoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgICAgY2hhciAqYnVmZiwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2ID0ga29ial90b19uZXRkZXYoa29iaik7CisKKwlpZiAoYnVmZltjb3VudCAtIDFdID09ICdcbicpCisJCWJ1ZmZbY291bnQgLSAxXSA9ICdcMCc7CisKKwlyZXR1cm4gZ3dfYmFuZHdpZHRoX3NldChuZXRfZGV2LCBidWZmLCBjb3VudCk7Cit9CisKK0JBVF9BVFRSX0JPT0woYWdncmVnYXRlZF9vZ21zLCBTX0lSVUdPIHwgU19JV1VTUiwgTlVMTCk7CitCQVRfQVRUUl9CT09MKGJvbmRpbmcsIFNfSVJVR08gfCBTX0lXVVNSLCBOVUxMKTsKK0JBVF9BVFRSX0JPT0woZnJhZ21lbnRhdGlvbiwgU19JUlVHTyB8IFNfSVdVU1IsIHVwZGF0ZV9taW5fbXR1KTsKK3N0YXRpYyBCQVRfQVRUUih2aXNfbW9kZSwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfdmlzX21vZGUsIHN0b3JlX3Zpc19tb2RlKTsKK3N0YXRpYyBCQVRfQVRUUihnd19tb2RlLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19nd19tb2RlLCBzdG9yZV9nd19tb2RlKTsKK0JBVF9BVFRSX1VJTlQob3JpZ19pbnRlcnZhbCwgU19JUlVHTyB8IFNfSVdVU1IsIDIgKiBKSVRURVIsIElOVF9NQVgsIE5VTEwpOworQkFUX0FUVFJfVUlOVChob3BfcGVuYWx0eSwgU19JUlVHTyB8IFNfSVdVU1IsIDAsIFRRX01BWF9WQUxVRSwgTlVMTCk7CitCQVRfQVRUUl9VSU5UKGd3X3NlbF9jbGFzcywgU19JUlVHTyB8IFNfSVdVU1IsIDEsIFRRX01BWF9WQUxVRSwKKwkgICAgICBwb3N0X2d3X2Rlc2VsZWN0KTsKK3N0YXRpYyBCQVRfQVRUUihnd19iYW5kd2lkdGgsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X2d3X2J3aWR0aCwKKwkJc3RvcmVfZ3dfYndpZHRoKTsKKyNpZmRlZiBDT05GSUdfQkFUTUFOX0FEVl9ERUJVRworQkFUX0FUVFJfVUlOVChsb2dfbGV2ZWwsIFNfSVJVR08gfCBTX0lXVVNSLCAwLCAzLCBOVUxMKTsKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IGJhdF9hdHRyaWJ1dGUgKm1lc2hfYXR0cnNbXSA9IHsKKwkmYmF0X2F0dHJfYWdncmVnYXRlZF9vZ21zLAorCSZiYXRfYXR0cl9ib25kaW5nLAorCSZiYXRfYXR0cl9mcmFnbWVudGF0aW9uLAorCSZiYXRfYXR0cl92aXNfbW9kZSwKKwkmYmF0X2F0dHJfZ3dfbW9kZSwKKwkmYmF0X2F0dHJfb3JpZ19pbnRlcnZhbCwKKwkmYmF0X2F0dHJfaG9wX3BlbmFsdHksCisJJmJhdF9hdHRyX2d3X3NlbF9jbGFzcywKKwkmYmF0X2F0dHJfZ3dfYmFuZHdpZHRoLAorI2lmZGVmIENPTkZJR19CQVRNQU5fQURWX0RFQlVHCisJJmJhdF9hdHRyX2xvZ19sZXZlbCwKKyNlbmRpZgorCU5VTEwsCit9OworCitpbnQgc3lzZnNfYWRkX21lc2hpZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBrb2JqZWN0ICpiYXRpZl9rb2JqZWN0ID0gJmRldi0+ZGV2LmtvYmo7CisJc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGJhdF9hdHRyaWJ1dGUgKipiYXRfYXR0cjsKKwlpbnQgZXJyOworCisJYmF0X3ByaXYtPm1lc2hfb2JqID0ga29iamVjdF9jcmVhdGVfYW5kX2FkZChTWVNGU19JRl9NRVNIX1NVQkRJUiwKKwkJCQkJCSAgICBiYXRpZl9rb2JqZWN0KTsKKwlpZiAoIWJhdF9wcml2LT5tZXNoX29iaikgeworCQliYXRfZXJyKGRldiwgIkNhbid0IGFkZCBzeXNmcyBkaXJlY3Rvcnk6ICVzLyVzXG4iLCBkZXYtPm5hbWUsCisJCQlTWVNGU19JRl9NRVNIX1NVQkRJUik7CisJCWdvdG8gb3V0OworCX0KKworCWZvciAoYmF0X2F0dHIgPSBtZXNoX2F0dHJzOyAqYmF0X2F0dHI7ICsrYmF0X2F0dHIpIHsKKwkJZXJyID0gc3lzZnNfY3JlYXRlX2ZpbGUoYmF0X3ByaXYtPm1lc2hfb2JqLAorCQkJCQkmKCgqYmF0X2F0dHIpLT5hdHRyKSk7CisJCWlmIChlcnIpIHsKKwkJCWJhdF9lcnIoZGV2LCAiQ2FuJ3QgYWRkIHN5c2ZzIGZpbGU6ICVzLyVzLyVzXG4iLAorCQkJCWRldi0+bmFtZSwgU1lTRlNfSUZfTUVTSF9TVUJESVIsCisJCQkJKCgqYmF0X2F0dHIpLT5hdHRyKS5uYW1lKTsKKwkJCWdvdG8gcmVtX2F0dHI7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKKworcmVtX2F0dHI6CisJZm9yIChiYXRfYXR0ciA9IG1lc2hfYXR0cnM7ICpiYXRfYXR0cjsgKytiYXRfYXR0cikKKwkJc3lzZnNfcmVtb3ZlX2ZpbGUoYmF0X3ByaXYtPm1lc2hfb2JqLCAmKCgqYmF0X2F0dHIpLT5hdHRyKSk7CisKKwlrb2JqZWN0X3B1dChiYXRfcHJpdi0+bWVzaF9vYmopOworCWJhdF9wcml2LT5tZXNoX29iaiA9IE5VTEw7CitvdXQ6CisJcmV0dXJuIC1FTk9NRU07Cit9CisKK3ZvaWQgc3lzZnNfZGVsX21lc2hpZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBiYXRfYXR0cmlidXRlICoqYmF0X2F0dHI7CisKKwlmb3IgKGJhdF9hdHRyID0gbWVzaF9hdHRyczsgKmJhdF9hdHRyOyArK2JhdF9hdHRyKQorCQlzeXNmc19yZW1vdmVfZmlsZShiYXRfcHJpdi0+bWVzaF9vYmosICYoKCpiYXRfYXR0ciktPmF0dHIpKTsKKworCWtvYmplY3RfcHV0KGJhdF9wcml2LT5tZXNoX29iaik7CisJYmF0X3ByaXYtPm1lc2hfb2JqID0gTlVMTDsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19tZXNoX2lmYWNlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLAorCQkJICAgICAgIGNoYXIgKmJ1ZmYpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYgPSBrb2JqX3RvX25ldGRldihrb2JqKTsKKwlzdHJ1Y3QgYmF0bWFuX2lmICpiYXRtYW5faWYgPSBnZXRfYmF0bWFuX2lmX2J5X25ldGRldihuZXRfZGV2KTsKKwlzc2l6ZV90IGxlbmd0aDsKKworCWlmICghYmF0bWFuX2lmKQorCQlyZXR1cm4gMDsKKworCWxlbmd0aCA9IHNwcmludGYoYnVmZiwgIiVzXG4iLCBiYXRtYW5faWYtPmlmX3N0YXR1cyA9PSBJRl9OT1RfSU5fVVNFID8KKwkJCSAibm9uZSIgOiBiYXRtYW5faWYtPnNvZnRfaWZhY2UtPm5hbWUpOworCisJa3JlZl9wdXQoJmJhdG1hbl9pZi0+cmVmY291bnQsIGhhcmRpZl9mcmVlX3JlZik7CisKKwlyZXR1cm4gbGVuZ3RoOworfQorCitzdGF0aWMgc3NpemVfdCBzdG9yZV9tZXNoX2lmYWNlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLAorCQkJCWNoYXIgKmJ1ZmYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiA9IGtvYmpfdG9fbmV0ZGV2KGtvYmopOworCXN0cnVjdCBiYXRtYW5faWYgKmJhdG1hbl9pZiA9IGdldF9iYXRtYW5faWZfYnlfbmV0ZGV2KG5ldF9kZXYpOworCWludCBzdGF0dXNfdG1wID0gLTE7CisJaW50IHJldDsKKworCWlmICghYmF0bWFuX2lmKQorCQlyZXR1cm4gY291bnQ7CisKKwlpZiAoYnVmZltjb3VudCAtIDFdID09ICdcbicpCisJCWJ1ZmZbY291bnQgLSAxXSA9ICdcMCc7CisKKwlpZiAoc3RybGVuKGJ1ZmYpID49IElGTkFNU0laKSB7CisJCXByX2VycigiSW52YWxpZCBwYXJhbWV0ZXIgZm9yICdtZXNoX2lmYWNlJyBzZXR0aW5nIHJlY2VpdmVkOiAiCisJCSAgICAgICAiaW50ZXJmYWNlIG5hbWUgdG9vIGxvbmcgJyVzJ1xuIiwgYnVmZik7CisJCWtyZWZfcHV0KCZiYXRtYW5faWYtPnJlZmNvdW50LCBoYXJkaWZfZnJlZV9yZWYpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoc3RybmNtcChidWZmLCAibm9uZSIsIDQpID09IDApCisJCXN0YXR1c190bXAgPSBJRl9OT1RfSU5fVVNFOworCWVsc2UKKwkJc3RhdHVzX3RtcCA9IElGX0lfV0FOVF9ZT1U7CisKKwlpZiAoKGJhdG1hbl9pZi0+aWZfc3RhdHVzID09IHN0YXR1c190bXApIHx8ICgoYmF0bWFuX2lmLT5zb2Z0X2lmYWNlKSAmJgorCSAgICAoc3RybmNtcChiYXRtYW5faWYtPnNvZnRfaWZhY2UtPm5hbWUsIGJ1ZmYsIElGTkFNU0laKSA9PSAwKSkpIHsKKwkJa3JlZl9wdXQoJmJhdG1hbl9pZi0+cmVmY291bnQsIGhhcmRpZl9mcmVlX3JlZik7CisJCXJldHVybiBjb3VudDsKKwl9CisKKwlpZiAoc3RhdHVzX3RtcCA9PSBJRl9OT1RfSU5fVVNFKSB7CisJCXJ0bmxfbG9jaygpOworCQloYXJkaWZfZGlzYWJsZV9pbnRlcmZhY2UoYmF0bWFuX2lmKTsKKwkJcnRubF91bmxvY2soKTsKKwkJa3JlZl9wdXQoJmJhdG1hbl9pZi0+cmVmY291bnQsIGhhcmRpZl9mcmVlX3JlZik7CisJCXJldHVybiBjb3VudDsKKwl9CisKKwkvKiBpZiB0aGUgaW50ZXJmYWNlIGFscmVhZHkgaXMgaW4gdXNlICovCisJaWYgKGJhdG1hbl9pZi0+aWZfc3RhdHVzICE9IElGX05PVF9JTl9VU0UpIHsKKwkJcnRubF9sb2NrKCk7CisJCWhhcmRpZl9kaXNhYmxlX2ludGVyZmFjZShiYXRtYW5faWYpOworCQlydG5sX3VubG9jaygpOworCX0KKworCXJldCA9IGhhcmRpZl9lbmFibGVfaW50ZXJmYWNlKGJhdG1hbl9pZiwgYnVmZik7CisJa3JlZl9wdXQoJmJhdG1hbl9pZi0+cmVmY291bnQsIGhhcmRpZl9mcmVlX3JlZik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X2lmYWNlX3N0YXR1cyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgY2hhciAqYnVmZikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiA9IGtvYmpfdG9fbmV0ZGV2KGtvYmopOworCXN0cnVjdCBiYXRtYW5faWYgKmJhdG1hbl9pZiA9IGdldF9iYXRtYW5faWZfYnlfbmV0ZGV2KG5ldF9kZXYpOworCXNzaXplX3QgbGVuZ3RoOworCisJaWYgKCFiYXRtYW5faWYpCisJCXJldHVybiAwOworCisJc3dpdGNoIChiYXRtYW5faWYtPmlmX3N0YXR1cykgeworCWNhc2UgSUZfVE9fQkVfUkVNT1ZFRDoKKwkJbGVuZ3RoID0gc3ByaW50ZihidWZmLCAiZGlzYWJsaW5nXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBJRl9JTkFDVElWRToKKwkJbGVuZ3RoID0gc3ByaW50ZihidWZmLCAiaW5hY3RpdmVcbiIpOworCQlicmVhazsKKwljYXNlIElGX0FDVElWRToKKwkJbGVuZ3RoID0gc3ByaW50ZihidWZmLCAiYWN0aXZlXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBJRl9UT19CRV9BQ1RJVkFURUQ6CisJCWxlbmd0aCA9IHNwcmludGYoYnVmZiwgImVuYWJsaW5nXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBJRl9OT1RfSU5fVVNFOgorCWRlZmF1bHQ6CisJCWxlbmd0aCA9IHNwcmludGYoYnVmZiwgIm5vdCBpbiB1c2VcbiIpOworCQlicmVhazsKKwl9CisKKwlrcmVmX3B1dCgmYmF0bWFuX2lmLT5yZWZjb3VudCwgaGFyZGlmX2ZyZWVfcmVmKTsKKworCXJldHVybiBsZW5ndGg7Cit9CisKK3N0YXRpYyBCQVRfQVRUUihtZXNoX2lmYWNlLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJc2hvd19tZXNoX2lmYWNlLCBzdG9yZV9tZXNoX2lmYWNlKTsKK3N0YXRpYyBCQVRfQVRUUihpZmFjZV9zdGF0dXMsIFNfSVJVR08sIHNob3dfaWZhY2Vfc3RhdHVzLCBOVUxMKTsKKworc3RhdGljIHN0cnVjdCBiYXRfYXR0cmlidXRlICpiYXRtYW5fYXR0cnNbXSA9IHsKKwkmYmF0X2F0dHJfbWVzaF9pZmFjZSwKKwkmYmF0X2F0dHJfaWZhY2Vfc3RhdHVzLAorCU5VTEwsCit9OworCitpbnQgc3lzZnNfYWRkX2hhcmRpZihzdHJ1Y3Qga29iamVjdCAqKmhhcmRpZl9vYmosIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGtvYmplY3QgKmhhcmRpZl9rb2JqZWN0ID0gJmRldi0+ZGV2LmtvYmo7CisJc3RydWN0IGJhdF9hdHRyaWJ1dGUgKipiYXRfYXR0cjsKKwlpbnQgZXJyOworCisJKmhhcmRpZl9vYmogPSBrb2JqZWN0X2NyZWF0ZV9hbmRfYWRkKFNZU0ZTX0lGX0JBVF9TVUJESVIsCisJCQkJCQkgICAgaGFyZGlmX2tvYmplY3QpOworCisJaWYgKCEqaGFyZGlmX29iaikgeworCQliYXRfZXJyKGRldiwgIkNhbid0IGFkZCBzeXNmcyBkaXJlY3Rvcnk6ICVzLyVzXG4iLCBkZXYtPm5hbWUsCisJCQlTWVNGU19JRl9CQVRfU1VCRElSKTsKKwkJZ290byBvdXQ7CisJfQorCisJZm9yIChiYXRfYXR0ciA9IGJhdG1hbl9hdHRyczsgKmJhdF9hdHRyOyArK2JhdF9hdHRyKSB7CisJCWVyciA9IHN5c2ZzX2NyZWF0ZV9maWxlKCpoYXJkaWZfb2JqLCAmKCgqYmF0X2F0dHIpLT5hdHRyKSk7CisJCWlmIChlcnIpIHsKKwkJCWJhdF9lcnIoZGV2LCAiQ2FuJ3QgYWRkIHN5c2ZzIGZpbGU6ICVzLyVzLyVzXG4iLAorCQkJCWRldi0+bmFtZSwgU1lTRlNfSUZfQkFUX1NVQkRJUiwKKwkJCQkoKCpiYXRfYXR0ciktPmF0dHIpLm5hbWUpOworCQkJZ290byByZW1fYXR0cjsKKwkJfQorCX0KKworCXJldHVybiAwOworCityZW1fYXR0cjoKKwlmb3IgKGJhdF9hdHRyID0gYmF0bWFuX2F0dHJzOyAqYmF0X2F0dHI7ICsrYmF0X2F0dHIpCisJCXN5c2ZzX3JlbW92ZV9maWxlKCpoYXJkaWZfb2JqLCAmKCgqYmF0X2F0dHIpLT5hdHRyKSk7CitvdXQ6CisJcmV0dXJuIC1FTk9NRU07Cit9CisKK3ZvaWQgc3lzZnNfZGVsX2hhcmRpZihzdHJ1Y3Qga29iamVjdCAqKmhhcmRpZl9vYmopCit7CisJa29iamVjdF9wdXQoKmhhcmRpZl9vYmopOworCSpoYXJkaWZfb2JqID0gTlVMTDsKK30KZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L2JhdF9zeXNmcy5oIGIvbmV0L2JhdG1hbi1hZHYvYmF0X3N5c2ZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2YxODZjMAotLS0gL2Rldi9udWxsCisrKyBiL25ldC9iYXRtYW4tYWR2L2JhdF9zeXNmcy5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQi5BLlQuTS5BLk4uIGNvbnRyaWJ1dG9yczoKKyAqCisgKiBNYXJlayBMaW5kbmVyCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxLCBVU0EKKyAqCisgKi8KKworCisjaWZuZGVmIF9ORVRfQkFUTUFOX0FEVl9TWVNGU19IXworI2RlZmluZSBfTkVUX0JBVE1BTl9BRFZfU1lTRlNfSF8KKworI2RlZmluZSBTWVNGU19JRl9NRVNIX1NVQkRJUiAibWVzaCIKKyNkZWZpbmUgU1lTRlNfSUZfQkFUX1NVQkRJUiAiYmF0bWFuX2FkdiIKKworc3RydWN0IGJhdF9hdHRyaWJ1dGUgeworCXN0cnVjdCBhdHRyaWJ1dGUgYXR0cjsKKwlzc2l6ZV90ICgqc2hvdykoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsCisJCQljaGFyICpidWYpOworCXNzaXplX3QgKCpzdG9yZSkoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsCisJCQkgY2hhciAqYnVmLCBzaXplX3QgY291bnQpOworfTsKKworaW50IHN5c2ZzX2FkZF9tZXNoaWYoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Cit2b2lkIHN5c2ZzX2RlbF9tZXNoaWYoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitpbnQgc3lzZnNfYWRkX2hhcmRpZihzdHJ1Y3Qga29iamVjdCAqKmhhcmRpZl9vYmosIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwordm9pZCBzeXNmc19kZWxfaGFyZGlmKHN0cnVjdCBrb2JqZWN0ICoqaGFyZGlmX29iaik7CisKKyNlbmRpZiAvKiBfTkVUX0JBVE1BTl9BRFZfU1lTRlNfSF8gKi8KZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L2JpdGFycmF5LmMgYi9uZXQvYmF0bWFuLWFkdi9iaXRhcnJheS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiY2Q4ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvYmF0bWFuLWFkdi9iaXRhcnJheS5jCkBAIC0wLDAgKzEsMjAxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTAgQi5BLlQuTS5BLk4uIGNvbnRyaWJ1dG9yczoKKyAqCisgKiBTaW1vbiBXdW5kZXJsaWNoLCBNYXJlayBMaW5kbmVyCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxLCBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgIm1haW4uaCIKKyNpbmNsdWRlICJiaXRhcnJheS5oIgorCisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisKKy8qIHJldHVybnMgdHJ1ZSBpZiB0aGUgY29ycmVzcG9uZGluZyBiaXQgaW4gdGhlIGdpdmVuIHNlcV9iaXRzIGluZGljYXRlcyB0cnVlCisgKiBhbmQgY3Vycl9zZXFubyBpcyB3aXRoaW4gcmFuZ2Ugb2YgbGFzdF9zZXFubyAqLwordWludDhfdCBnZXRfYml0X3N0YXR1cyh1bnNpZ25lZCBsb25nICpzZXFfYml0cywgdWludDMyX3QgbGFzdF9zZXFubywKKwkJICAgICAgIHVpbnQzMl90IGN1cnJfc2Vxbm8pCit7CisJaW50MzJfdCBkaWZmLCB3b3JkX29mZnNldCwgd29yZF9udW07CisKKwlkaWZmID0gbGFzdF9zZXFubyAtIGN1cnJfc2Vxbm87CisJaWYgKGRpZmYgPCAwIHx8IGRpZmYgPj0gVFFfTE9DQUxfV0lORE9XX1NJWkUpIHsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJLyogd2hpY2ggd29yZCAqLworCQl3b3JkX251bSA9IChsYXN0X3NlcW5vIC0gY3Vycl9zZXFubykgLyBXT1JEX0JJVF9TSVpFOworCQkvKiB3aGljaCBwb3NpdGlvbiBpbiB0aGUgc2VsZWN0ZWQgd29yZCAqLworCQl3b3JkX29mZnNldCA9IChsYXN0X3NlcW5vIC0gY3Vycl9zZXFubykgJSBXT1JEX0JJVF9TSVpFOworCisJCWlmICh0ZXN0X2JpdCh3b3JkX29mZnNldCwgJnNlcV9iaXRzW3dvcmRfbnVtXSkpCisJCQlyZXR1cm4gMTsKKwkJZWxzZQorCQkJcmV0dXJuIDA7CisJfQorfQorCisvKiB0dXJuIGNvcnJlc3BvbmRpbmcgYml0IG9uLCBzbyB3ZSBjYW4gcmVtZW1iZXIgdGhhdCB3ZSBnb3QgdGhlIHBhY2tldCAqLwordm9pZCBiaXRfbWFyayh1bnNpZ25lZCBsb25nICpzZXFfYml0cywgaW50MzJfdCBuKQoreworCWludDMyX3Qgd29yZF9vZmZzZXQsIHdvcmRfbnVtOworCisJLyogaWYgdG9vIG9sZCwganVzdCBkcm9wIGl0ICovCisJaWYgKG4gPCAwIHx8IG4gPj0gVFFfTE9DQUxfV0lORE9XX1NJWkUpCisJCXJldHVybjsKKworCS8qIHdoaWNoIHdvcmQgKi8KKwl3b3JkX251bSA9IG4gLyBXT1JEX0JJVF9TSVpFOworCS8qIHdoaWNoIHBvc2l0aW9uIGluIHRoZSBzZWxlY3RlZCB3b3JkICovCisJd29yZF9vZmZzZXQgPSBuICUgV09SRF9CSVRfU0laRTsKKworCXNldF9iaXQod29yZF9vZmZzZXQsICZzZXFfYml0c1t3b3JkX251bV0pOyAvKiB0dXJuIHRoZSBwb3NpdGlvbiBvbiAqLworfQorCisvKiBzaGlmdCB0aGUgcGFja2V0IGFycmF5IGJ5IG4gcGxhY2VzLiAqLworc3RhdGljIHZvaWQgYml0X3NoaWZ0KHVuc2lnbmVkIGxvbmcgKnNlcV9iaXRzLCBpbnQzMl90IG4pCit7CisJaW50MzJfdCB3b3JkX29mZnNldCwgd29yZF9udW07CisJaW50MzJfdCBpOworCisJaWYgKG4gPD0gMCB8fCBuID49IFRRX0xPQ0FMX1dJTkRPV19TSVpFKQorCQlyZXR1cm47CisKKwl3b3JkX29mZnNldCA9IG4gJSBXT1JEX0JJVF9TSVpFOy8qIHNoaWZ0IGhvdyBtdWNoIGluc2lkZSBlYWNoIHdvcmQgKi8KKwl3b3JkX251bSA9IG4gLyBXT1JEX0JJVF9TSVpFOwkvKiBzaGlmdCBvdmVyIGhvdyBtdWNoIChmdWxsKSB3b3JkcyAqLworCisJZm9yIChpID0gTlVNX1dPUkRTIC0gMTsgaSA+IHdvcmRfbnVtOyBpLS0pIHsKKwkJLyogZ29pbmcgZnJvbSBvbGQgdG8gbmV3LCBzbyB3ZSBkb24ndCBvdmVyd3JpdGUgdGhlIGRhdGEgd2UgY29weQorCQkgKiBmcm9tLgorCQkgKgorCQkgKiBsZWZ0IGlzIGhpZ2gsIHJpZ2h0IGlzIGxvdzogRkVEQyBCQTk4IDc2NTQgMzIxMAorCQkgKgkJCQkJICBeXiBeXgorCQkgKgkJCSAgICAgICB2dnZ2CisJCSAqIF5eXl4gPSBmcm9tLCB2dnZ2diA9dG8sIHdlJ2QgaGF2ZSB3b3JkX251bT09MSBhbmQKKwkJICogd29yZF9vZmZzZXQ9PVdPUkRfQklUX1NJWkUvMiA/Pz8/PyBpbiB0aGlzIGV4YW1wbGUuCisJCSAqICg9MjQgYml0cykKKwkJICoKKwkJICogb3VyIGRlc2lyZWQgb3V0cHV0IHdvdWxkIGJlOiA5ODc2IDU0MzIgMTAwMCAwMDAwCisJCSAqICovCisKKwkJc2VxX2JpdHNbaV0gPQorCQkJKHNlcV9iaXRzW2kgLSB3b3JkX251bV0gPDwgd29yZF9vZmZzZXQpICsKKwkJCS8qIHRha2UgdGhlIGxvd2VyIHBvcnQgZnJvbSB0aGUgbGVmdCBoYWxmLCBzaGlmdCBpdCBsZWZ0CisJCQkgKiB0byBpdHMgZmluYWwgcG9zaXRpb24gKi8KKwkJCShzZXFfYml0c1tpIC0gd29yZF9udW0gLSAxXSA+PgorCQkJIChXT1JEX0JJVF9TSVpFLXdvcmRfb2Zmc2V0KSk7CisJCS8qIGFuZCB0aGUgdXBwZXIgcGFydCBvZiB0aGUgcmlnaHQgaGFsZiBhbmQgc2hpZnQgaXQgbGVmdCB0bworCQkgKiBpdCdzIHBvc2l0aW9uICovCisJCS8qIGZvciBvdXIgZXhhbXBsZSB0aGF0IHdvdWxkIGJlOiB3b3JkWzBdID0gOTgwMCArIDAwNzYgPQorCQkgKiA5ODc2ICovCisJfQorCS8qIG5vdyBmb3Igb3VyIGxhc3Qgd29yZCwgaT09d29yZF9udW0sIHdlIG9ubHkgaGF2ZSB0aGUgaXQncyAibGVmdCIKKwkgKiBoYWxmLiB0aGF0J3MgdGhlIDEwMDAgd29yZCBpbiBvdXIgZXhhbXBsZS4qLworCisJc2VxX2JpdHNbaV0gPSAoc2VxX2JpdHNbaSAtIHdvcmRfbnVtXSA8PCB3b3JkX29mZnNldCk7CisKKwkvKiBwYWQgdGhlIHJlc3Qgd2l0aCAwLCBpZiB0aGVyZSBpcyBhbnl0aGluZyAqLworCWktLTsKKworCWZvciAoOyBpID49IDA7IGktLSkKKwkJc2VxX2JpdHNbaV0gPSAwOworfQorCitzdGF0aWMgdm9pZCBiaXRfcmVzZXRfd2luZG93KHVuc2lnbmVkIGxvbmcgKnNlcV9iaXRzKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBOVU1fV09SRFM7IGkrKykKKwkJc2VxX2JpdHNbaV0gPSAwOworfQorCisKKy8qIHJlY2VpdmUgYW5kIHByb2Nlc3Mgb25lIHBhY2tldCB3aXRoaW4gdGhlIHNlcXVlbmNlIG51bWJlciB3aW5kb3cuCisgKgorICogcmV0dXJuczoKKyAqICAxIGlmIHRoZSB3aW5kb3cgd2FzIG1vdmVkIChlaXRoZXIgbmV3IG9yIHZlcnkgb2xkKQorICogIDAgaWYgdGhlIHdpbmRvdyB3YXMgbm90IG1vdmVkL3NoaWZ0ZWQuCisgKi8KK2NoYXIgYml0X2dldF9wYWNrZXQodm9pZCAqcHJpdiwgdW5zaWduZWQgbG9uZyAqc2VxX2JpdHMsCisJCSAgICBpbnQzMl90IHNlcV9udW1fZGlmZiwgaW50OF90IHNldF9tYXJrKQoreworCXN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYgPSAoc3RydWN0IGJhdF9wcml2ICopcHJpdjsKKworCS8qIHNlcXVlbmNlIG51bWJlciBpcyBzbGlnaHRseSBvbGRlci4gV2UgYWxyZWFkeSBnb3QgYSBzZXF1ZW5jZSBudW1iZXIKKwkgKiBoaWdoZXIgdGhhbiB0aGlzIG9uZSwgc28gd2UganVzdCBtYXJrIGl0LiAqLworCisJaWYgKChzZXFfbnVtX2RpZmYgPD0gMCkgJiYgKHNlcV9udW1fZGlmZiA+IC1UUV9MT0NBTF9XSU5ET1dfU0laRSkpIHsKKwkJaWYgKHNldF9tYXJrKQorCQkJYml0X21hcmsoc2VxX2JpdHMsIC1zZXFfbnVtX2RpZmYpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBzZXF1ZW5jZSBudW1iZXIgaXMgc2xpZ2h0bHkgbmV3ZXIsIHNvIHdlIHNoaWZ0IHRoZSB3aW5kb3cgYW5kCisJICogc2V0IHRoZSBtYXJrIGlmIHJlcXVpcmVkICovCisKKwlpZiAoKHNlcV9udW1fZGlmZiA+IDApICYmIChzZXFfbnVtX2RpZmYgPCBUUV9MT0NBTF9XSU5ET1dfU0laRSkpIHsKKwkJYml0X3NoaWZ0KHNlcV9iaXRzLCBzZXFfbnVtX2RpZmYpOworCisJCWlmIChzZXRfbWFyaykKKwkJCWJpdF9tYXJrKHNlcV9iaXRzLCAwKTsKKwkJcmV0dXJuIDE7CisJfQorCisJLyogc2VxdWVuY2UgbnVtYmVyIGlzIG11Y2ggbmV3ZXIsIHByb2JhYmx5IG1pc3NlZCBhIGxvdCBvZiBwYWNrZXRzICovCisKKwlpZiAoKHNlcV9udW1fZGlmZiA+PSBUUV9MT0NBTF9XSU5ET1dfU0laRSkKKwkJfHwgKHNlcV9udW1fZGlmZiA8IEVYUEVDVEVEX1NFUU5PX1JBTkdFKSkgeworCQliYXRfZGJnKERCR19CQVRNQU4sIGJhdF9wcml2LAorCQkJIldlIG1pc3NlZCBhIGxvdCBvZiBwYWNrZXRzICglaSkgIVxuIiwKKwkJCXNlcV9udW1fZGlmZiAtIDEpOworCQliaXRfcmVzZXRfd2luZG93KHNlcV9iaXRzKTsKKwkJaWYgKHNldF9tYXJrKQorCQkJYml0X21hcmsoc2VxX2JpdHMsIDApOworCQlyZXR1cm4gMTsKKwl9CisKKwkvKiByZWNlaXZlZCBhIG11Y2ggb2xkZXIgcGFja2V0LiBUaGUgb3RoZXIgaG9zdCBlaXRoZXIgcmVzdGFydGVkCisJICogb3IgdGhlIG9sZCBwYWNrZXQgZ290IGRlbGF5ZWQgc29tZXdoZXJlIGluIHRoZSBuZXR3b3JrLiBUaGUKKwkgKiBwYWNrZXQgc2hvdWxkIGJlIGRyb3BwZWQgd2l0aG91dCBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gaWYgdGhlCisJICogc2Vxbm8gd2luZG93IGlzIHByb3RlY3RlZC4gKi8KKworCWlmICgoc2VxX251bV9kaWZmIDw9IC1UUV9MT0NBTF9XSU5ET1dfU0laRSkKKwkJfHwgKHNlcV9udW1fZGlmZiA+PSBFWFBFQ1RFRF9TRVFOT19SQU5HRSkpIHsKKworCQliYXRfZGJnKERCR19CQVRNQU4sIGJhdF9wcml2LAorCQkJIk90aGVyIGhvc3QgcHJvYmFibHkgcmVzdGFydGVkIVxuIik7CisKKwkJYml0X3Jlc2V0X3dpbmRvdyhzZXFfYml0cyk7CisJCWlmIChzZXRfbWFyaykKKwkJCWJpdF9tYXJrKHNlcV9iaXRzLCAwKTsKKworCQlyZXR1cm4gMTsKKwl9CisKKwkvKiBuZXZlciByZWFjaGVkICovCisJcmV0dXJuIDA7Cit9CisKKy8qIGNvdW50IHRoZSBoYW1taW5nIHdlaWdodCwgaG93IG1hbnkgZ29vZCBwYWNrZXRzIGRpZCB3ZSByZWNlaXZlPyBqdXN0IGNvdW50CisgKiB0aGUgMSdzLgorICovCitpbnQgYml0X3BhY2tldF9jb3VudCh1bnNpZ25lZCBsb25nICpzZXFfYml0cykKK3sKKwlpbnQgaSwgaGFtbWluZyA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX1dPUkRTOyBpKyspCisJCWhhbW1pbmcgKz0gaHdlaWdodF9sb25nKHNlcV9iaXRzW2ldKTsKKworCXJldHVybiBoYW1taW5nOworfQpkaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvYml0YXJyYXkuaCBiL25ldC9iYXRtYW4tYWR2L2JpdGFycmF5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM1NDAxNwotLS0gL2Rldi9udWxsCisrKyBiL25ldC9iYXRtYW4tYWR2L2JpdGFycmF5LmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDEwIEIuQS5ULk0uQS5OLiBjb250cmlidXRvcnM6CisgKgorICogU2ltb24gV3VuZGVybGljaCwgTWFyZWsgTGluZG5lcgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSwgVVNBCisgKgorICovCisKKyNpZm5kZWYgX05FVF9CQVRNQU5fQURWX0JJVEFSUkFZX0hfCisjZGVmaW5lIF9ORVRfQkFUTUFOX0FEVl9CSVRBUlJBWV9IXworCisjZGVmaW5lIFdPUkRfQklUX1NJWkUgKHNpemVvZih1bnNpZ25lZCBsb25nKSAqIDgpCisKKy8qIHJldHVybnMgdHJ1ZSBpZiB0aGUgY29ycmVzcG9uZGluZyBiaXQgaW4gdGhlIGdpdmVuIHNlcV9iaXRzIGluZGljYXRlcyB0cnVlCisgKiBhbmQgY3Vycl9zZXFubyBpcyB3aXRoaW4gcmFuZ2Ugb2YgbGFzdF9zZXFubyAqLwordWludDhfdCBnZXRfYml0X3N0YXR1cyh1bnNpZ25lZCBsb25nICpzZXFfYml0cywgdWludDMyX3QgbGFzdF9zZXFubywKKwkJCQkJICAgdWludDMyX3QgY3Vycl9zZXFubyk7CisKKy8qIHR1cm4gY29ycmVzcG9uZGluZyBiaXQgb24sIHNvIHdlIGNhbiByZW1lbWJlciB0aGF0IHdlIGdvdCB0aGUgcGFja2V0ICovCit2b2lkIGJpdF9tYXJrKHVuc2lnbmVkIGxvbmcgKnNlcV9iaXRzLCBpbnQzMl90IG4pOworCisKKy8qIHJlY2VpdmUgYW5kIHByb2Nlc3Mgb25lIHBhY2tldCwgcmV0dXJucyAxIGlmIHJlY2VpdmVkIHNlcV9udW0gaXMgY29uc2lkZXJlZAorICogbmV3LCAwIGlmIG9sZCAgKi8KK2NoYXIgYml0X2dldF9wYWNrZXQodm9pZCAqcHJpdiwgdW5zaWduZWQgbG9uZyAqc2VxX2JpdHMsCisJCSAgICBpbnQzMl90IHNlcV9udW1fZGlmZiwgaW50OF90IHNldF9tYXJrKTsKKworLyogY291bnQgdGhlIGhhbW1pbmcgd2VpZ2h0LCBob3cgbWFueSBnb29kIHBhY2tldHMgZGlkIHdlIHJlY2VpdmU/ICovCitpbnQgIGJpdF9wYWNrZXRfY291bnQodW5zaWduZWQgbG9uZyAqc2VxX2JpdHMpOworCisjZW5kaWYgLyogX05FVF9CQVRNQU5fQURWX0JJVEFSUkFZX0hfICovCmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9nYXRld2F5X2NsaWVudC5jIGIvbmV0L2JhdG1hbi1hZHYvZ2F0ZXdheV9jbGllbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDY1ZmZiCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L2JhdG1hbi1hZHYvZ2F0ZXdheV9jbGllbnQuYwpAQCAtMCwwICsxLDQ3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIEIuQS5ULk0uQS5OLiBjb250cmlidXRvcnM6CisgKgorICogTWFyZWsgTGluZG5lcgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSwgVVNBCisgKgorICovCisKKyNpbmNsdWRlICJtYWluLmgiCisjaW5jbHVkZSAiZ2F0ZXdheV9jbGllbnQuaCIKKyNpbmNsdWRlICJnYXRld2F5X2NvbW1vbi5oIgorI2luY2x1ZGUgImhhcmQtaW50ZXJmYWNlLmgiCisjaW5jbHVkZSA8bGludXgvaXAuaD4KKyNpbmNsdWRlIDxsaW51eC9pcHY2Lmg+CisjaW5jbHVkZSA8bGludXgvdWRwLmg+CisjaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgorCitzdGF0aWMgdm9pZCBnd19ub2RlX2ZyZWVfcmVmKHN0cnVjdCBrcmVmICpyZWZjb3VudCkKK3sKKwlzdHJ1Y3QgZ3dfbm9kZSAqZ3dfbm9kZTsKKworCWd3X25vZGUgPSBjb250YWluZXJfb2YocmVmY291bnQsIHN0cnVjdCBnd19ub2RlLCByZWZjb3VudCk7CisJa2ZyZWUoZ3dfbm9kZSk7Cit9CisKK3N0YXRpYyB2b2lkIGd3X25vZGVfZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpyY3UpCit7CisJc3RydWN0IGd3X25vZGUgKmd3X25vZGU7CisKKwlnd19ub2RlID0gY29udGFpbmVyX29mKHJjdSwgc3RydWN0IGd3X25vZGUsIHJjdSk7CisJa3JlZl9wdXQoJmd3X25vZGUtPnJlZmNvdW50LCBnd19ub2RlX2ZyZWVfcmVmKTsKK30KKwordm9pZCAqZ3dfZ2V0X3NlbGVjdGVkKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYpCit7CisJc3RydWN0IGd3X25vZGUgKmN1cnJfZ2F0ZXdheV90bXAgPSBiYXRfcHJpdi0+Y3Vycl9ndzsKKworCWlmICghY3Vycl9nYXRld2F5X3RtcCkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gY3Vycl9nYXRld2F5X3RtcC0+b3JpZ19ub2RlOworfQorCit2b2lkIGd3X2Rlc2VsZWN0KHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYpCit7CisJc3RydWN0IGd3X25vZGUgKmd3X25vZGUgPSBiYXRfcHJpdi0+Y3Vycl9ndzsKKworCWJhdF9wcml2LT5jdXJyX2d3ID0gTlVMTDsKKworCWlmIChnd19ub2RlKQorCQlrcmVmX3B1dCgmZ3dfbm9kZS0+cmVmY291bnQsIGd3X25vZGVfZnJlZV9yZWYpOworfQorCitzdGF0aWMgc3RydWN0IGd3X25vZGUgKmd3X3NlbGVjdChzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2LAorCQkJICBzdHJ1Y3QgZ3dfbm9kZSAqbmV3X2d3X25vZGUpCit7CisJc3RydWN0IGd3X25vZGUgKmN1cnJfZ3dfbm9kZSA9IGJhdF9wcml2LT5jdXJyX2d3OworCisJaWYgKG5ld19nd19ub2RlKQorCQlrcmVmX2dldCgmbmV3X2d3X25vZGUtPnJlZmNvdW50KTsKKworCWJhdF9wcml2LT5jdXJyX2d3ID0gbmV3X2d3X25vZGU7CisJcmV0dXJuIGN1cnJfZ3dfbm9kZTsKK30KKwordm9pZCBnd19lbGVjdGlvbihzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2KQoreworCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOworCXN0cnVjdCBnd19ub2RlICpnd19ub2RlLCAqY3Vycl9nd190bXAgPSBOVUxMLCAqb2xkX2d3X25vZGUgPSBOVUxMOworCXVpbnQ4X3QgbWF4X3RxID0gMDsKKwl1aW50MzJfdCBtYXhfZ3dfZmFjdG9yID0gMCwgdG1wX2d3X2ZhY3RvciA9IDA7CisJaW50IGRvd24sIHVwOworCisJLyoqCisJICogVGhlIGJhdG1hbiBkYWVtb24gY2hlY2tzIGhlcmUgaWYgd2UgYWxyZWFkeSBwYXNzZWQgYSBmdWxsIG9yaWdpbmF0b3IKKwkgKiBjeWNsZSBpbiBvcmRlciB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgY2hvb3NlIHRoZSBmaXJzdCBnYXRld2F5IHdlCisJICogaGVhciBhYm91dC4gVGhpcyBjaGVjayBpcyBiYXNlZCBvbiB0aGUgZGFlbW9uJ3MgdXB0aW1lIHdoaWNoIHdlCisJICogZG9uJ3QgaGF2ZS4KKwkgKiovCisJaWYgKGF0b21pY19yZWFkKCZiYXRfcHJpdi0+Z3dfbW9kZSkgIT0gR1dfTU9ERV9DTElFTlQpCisJCXJldHVybjsKKworCWlmIChiYXRfcHJpdi0+Y3Vycl9ndykKKwkJcmV0dXJuOworCisJcmN1X3JlYWRfbG9jaygpOworCWlmIChobGlzdF9lbXB0eSgmYmF0X3ByaXYtPmd3X2xpc3QpKSB7CisJCXJjdV9yZWFkX3VubG9jaygpOworCisJCWlmIChiYXRfcHJpdi0+Y3Vycl9ndykgeworCQkJYmF0X2RiZyhEQkdfQkFUTUFOLCBiYXRfcHJpdiwKKwkJCQkiUmVtb3Zpbmcgc2VsZWN0ZWQgZ2F0ZXdheSAtICIKKwkJCQkibm8gZ2F0ZXdheSBpbiByYW5nZVxuIik7CisJCQlnd19kZXNlbGVjdChiYXRfcHJpdik7CisJCX0KKworCQlyZXR1cm47CisJfQorCisJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGd3X25vZGUsIG5vZGUsICZiYXRfcHJpdi0+Z3dfbGlzdCwgbGlzdCkgeworCQlpZiAoIWd3X25vZGUtPm9yaWdfbm9kZS0+cm91dGVyKQorCQkJY29udGludWU7CisKKwkJaWYgKGd3X25vZGUtPmRlbGV0ZWQpCisJCQljb250aW51ZTsKKworCQlzd2l0Y2ggKGF0b21pY19yZWFkKCZiYXRfcHJpdi0+Z3dfc2VsX2NsYXNzKSkgeworCQljYXNlIDE6IC8qIGZhc3QgY29ubmVjdGlvbiAqLworCQkJZ3dfYmFuZHdpZHRoX3RvX2tiaXQoZ3dfbm9kZS0+b3JpZ19ub2RlLT5nd19mbGFncywKKwkJCQkJICAgICAmZG93biwgJnVwKTsKKworCQkJdG1wX2d3X2ZhY3RvciA9IChnd19ub2RlLT5vcmlnX25vZGUtPnJvdXRlci0+dHFfYXZnICoKKwkJCQkJIGd3X25vZGUtPm9yaWdfbm9kZS0+cm91dGVyLT50cV9hdmcgKgorCQkJCQkgZG93biAqIDEwMCAqIDEwMCkgLworCQkJCQkgKFRRX0xPQ0FMX1dJTkRPV19TSVpFICoKKwkJCQkJIFRRX0xPQ0FMX1dJTkRPV19TSVpFICogNjQpOworCisJCQlpZiAoKHRtcF9nd19mYWN0b3IgPiBtYXhfZ3dfZmFjdG9yKSB8fAorCQkJICAgICgodG1wX2d3X2ZhY3RvciA9PSBtYXhfZ3dfZmFjdG9yKSAmJgorCQkJICAgICAoZ3dfbm9kZS0+b3JpZ19ub2RlLT5yb3V0ZXItPnRxX2F2ZyA+IG1heF90cSkpKQorCQkJCWN1cnJfZ3dfdG1wID0gZ3dfbm9kZTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6IC8qKgorCQkJICAqIDI6ICBzdGFibGUgY29ubmVjdGlvbiAodXNlIGJlc3Qgc3RhdGlzdGljKQorCQkJICAqIDM6ICBmYXN0LXN3aXRjaCAodXNlIGJlc3Qgc3RhdGlzdGljIGJ1dCBjaGFuZ2UgYXMKKwkJCSAgKiAgICAgc29vbiBhcyBhIGJldHRlciBnYXRld2F5IGFwcGVhcnMpCisJCQkgICogWFg6IGxhdGUtc3dpdGNoICh1c2UgYmVzdCBzdGF0aXN0aWMgYnV0IGNoYW5nZSBhcworCQkJICAqICAgICBzb29uIGFzIGEgYmV0dGVyIGdhdGV3YXkgYXBwZWFycyB3aGljaCBoYXMKKwkJCSAgKiAgICAgJHJvdXRpbmdfY2xhc3MgbW9yZSB0cSBwb2ludHMpCisJCQkgICoqLworCQkJaWYgKGd3X25vZGUtPm9yaWdfbm9kZS0+cm91dGVyLT50cV9hdmcgPiBtYXhfdHEpCisJCQkJY3Vycl9nd190bXAgPSBnd19ub2RlOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoZ3dfbm9kZS0+b3JpZ19ub2RlLT5yb3V0ZXItPnRxX2F2ZyA+IG1heF90cSkKKwkJCW1heF90cSA9IGd3X25vZGUtPm9yaWdfbm9kZS0+cm91dGVyLT50cV9hdmc7CisKKwkJaWYgKHRtcF9nd19mYWN0b3IgPiBtYXhfZ3dfZmFjdG9yKQorCQkJbWF4X2d3X2ZhY3RvciA9IHRtcF9nd19mYWN0b3I7CisJfQorCisJaWYgKGJhdF9wcml2LT5jdXJyX2d3ICE9IGN1cnJfZ3dfdG1wKSB7CisJCWlmICgoYmF0X3ByaXYtPmN1cnJfZ3cpICYmICghY3Vycl9nd190bXApKQorCQkJYmF0X2RiZyhEQkdfQkFUTUFOLCBiYXRfcHJpdiwKKwkJCQkiUmVtb3Zpbmcgc2VsZWN0ZWQgZ2F0ZXdheSAtICIKKwkJCQkibm8gZ2F0ZXdheSBpbiByYW5nZVxuIik7CisJCWVsc2UgaWYgKCghYmF0X3ByaXYtPmN1cnJfZ3cpICYmIChjdXJyX2d3X3RtcCkpCisJCQliYXRfZGJnKERCR19CQVRNQU4sIGJhdF9wcml2LAorCQkJCSJBZGRpbmcgcm91dGUgdG8gZ2F0ZXdheSAlcE0gIgorCQkJCSIoZ3dfZmxhZ3M6ICVpLCB0cTogJWkpXG4iLAorCQkJCWN1cnJfZ3dfdG1wLT5vcmlnX25vZGUtPm9yaWcsCisJCQkJY3Vycl9nd190bXAtPm9yaWdfbm9kZS0+Z3dfZmxhZ3MsCisJCQkJY3Vycl9nd190bXAtPm9yaWdfbm9kZS0+cm91dGVyLT50cV9hdmcpOworCQllbHNlCisJCQliYXRfZGJnKERCR19CQVRNQU4sIGJhdF9wcml2LAorCQkJCSJDaGFuZ2luZyByb3V0ZSB0byBnYXRld2F5ICVwTSAiCisJCQkJIihnd19mbGFnczogJWksIHRxOiAlaSlcbiIsCisJCQkJY3Vycl9nd190bXAtPm9yaWdfbm9kZS0+b3JpZywKKwkJCQljdXJyX2d3X3RtcC0+b3JpZ19ub2RlLT5nd19mbGFncywKKwkJCQljdXJyX2d3X3RtcC0+b3JpZ19ub2RlLT5yb3V0ZXItPnRxX2F2Zyk7CisKKwkJb2xkX2d3X25vZGUgPSBnd19zZWxlY3QoYmF0X3ByaXYsIGN1cnJfZ3dfdG1wKTsKKwl9CisKKwlyY3VfcmVhZF91bmxvY2soKTsKKworCS8qIHRoZSBrZnJlZSgpIGhhcyB0byBiZSBvdXRzaWRlIG9mIHRoZSByY3UgbG9jayAqLworCWlmIChvbGRfZ3dfbm9kZSkKKwkJa3JlZl9wdXQoJm9sZF9nd19ub2RlLT5yZWZjb3VudCwgZ3dfbm9kZV9mcmVlX3JlZik7Cit9CisKK3ZvaWQgZ3dfY2hlY2tfZWxlY3Rpb24oc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiwgc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlKQoreworCXN0cnVjdCBnd19ub2RlICpjdXJyX2dhdGV3YXlfdG1wID0gYmF0X3ByaXYtPmN1cnJfZ3c7CisJdWludDhfdCBnd190cV9hdmcsIG9yaWdfdHFfYXZnOworCisJaWYgKCFjdXJyX2dhdGV3YXlfdG1wKQorCQlyZXR1cm47CisKKwlpZiAoIWN1cnJfZ2F0ZXdheV90bXAtPm9yaWdfbm9kZSkKKwkJZ290byBkZXNlbGVjdDsKKworCWlmICghY3Vycl9nYXRld2F5X3RtcC0+b3JpZ19ub2RlLT5yb3V0ZXIpCisJCWdvdG8gZGVzZWxlY3Q7CisKKwkvKiB0aGlzIG5vZGUgYWxyZWFkeSBpcyB0aGUgZ2F0ZXdheSAqLworCWlmIChjdXJyX2dhdGV3YXlfdG1wLT5vcmlnX25vZGUgPT0gb3JpZ19ub2RlKQorCQlyZXR1cm47CisKKwlpZiAoIW9yaWdfbm9kZS0+cm91dGVyKQorCQlyZXR1cm47CisKKwlnd190cV9hdmcgPSBjdXJyX2dhdGV3YXlfdG1wLT5vcmlnX25vZGUtPnJvdXRlci0+dHFfYXZnOworCW9yaWdfdHFfYXZnID0gb3JpZ19ub2RlLT5yb3V0ZXItPnRxX2F2ZzsKKworCS8qIHRoZSBUUSB2YWx1ZSBoYXMgdG8gYmUgYmV0dGVyICovCisJaWYgKG9yaWdfdHFfYXZnIDwgZ3dfdHFfYXZnKQorCQlyZXR1cm47CisKKwkvKioKKwkgKiBpZiB0aGUgcm91dGluZyBjbGFzcyBpcyBncmVhdGVyIHRoYW4gMyB0aGUgdmFsdWUgdGVsbHMgdXMgaG93IG11Y2gKKwkgKiBncmVhdGVyIHRoZSBUUSB2YWx1ZSBvZiB0aGUgbmV3IGdhdGV3YXkgbXVzdCBiZQorCSAqKi8KKwlpZiAoKGF0b21pY19yZWFkKCZiYXRfcHJpdi0+Z3dfc2VsX2NsYXNzKSA+IDMpICYmCisJICAgIChvcmlnX3RxX2F2ZyAtIGd3X3RxX2F2ZyA8IGF0b21pY19yZWFkKCZiYXRfcHJpdi0+Z3dfc2VsX2NsYXNzKSkpCisJCXJldHVybjsKKworCWJhdF9kYmcoREJHX0JBVE1BTiwgYmF0X3ByaXYsCisJCSJSZXN0YXJ0aW5nIGdhdGV3YXkgc2VsZWN0aW9uOiBiZXR0ZXIgZ2F0ZXdheSBmb3VuZCAodHEgY3VycjogIgorCQkiJWksIHRxIG5ldzogJWkpXG4iLAorCQlnd190cV9hdmcsIG9yaWdfdHFfYXZnKTsKKworZGVzZWxlY3Q6CisJZ3dfZGVzZWxlY3QoYmF0X3ByaXYpOworfQorCitzdGF0aWMgdm9pZCBnd19ub2RlX2FkZChzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2LAorCQkJc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlLCB1aW50OF90IG5ld19nd2ZsYWdzKQoreworCXN0cnVjdCBnd19ub2RlICpnd19ub2RlOworCWludCBkb3duLCB1cDsKKworCWd3X25vZGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZ3dfbm9kZSksIEdGUF9BVE9NSUMpOworCWlmICghZ3dfbm9kZSkKKwkJcmV0dXJuOworCisJbWVtc2V0KGd3X25vZGUsIDAsIHNpemVvZihzdHJ1Y3QgZ3dfbm9kZSkpOworCUlOSVRfSExJU1RfTk9ERSgmZ3dfbm9kZS0+bGlzdCk7CisJZ3dfbm9kZS0+b3JpZ19ub2RlID0gb3JpZ19ub2RlOworCWtyZWZfaW5pdCgmZ3dfbm9kZS0+cmVmY291bnQpOworCisJc3Bpbl9sb2NrX2JoKCZiYXRfcHJpdi0+Z3dfbGlzdF9sb2NrKTsKKwlobGlzdF9hZGRfaGVhZF9yY3UoJmd3X25vZGUtPmxpc3QsICZiYXRfcHJpdi0+Z3dfbGlzdCk7CisJc3Bpbl91bmxvY2tfYmgoJmJhdF9wcml2LT5nd19saXN0X2xvY2spOworCisJZ3dfYmFuZHdpZHRoX3RvX2tiaXQobmV3X2d3ZmxhZ3MsICZkb3duLCAmdXApOworCWJhdF9kYmcoREJHX0JBVE1BTiwgYmF0X3ByaXYsCisJCSJGb3VuZCBuZXcgZ2F0ZXdheSAlcE0gLT4gZ3dfY2xhc3M6ICVpIC0gJWklcy8laSVzXG4iLAorCQlvcmlnX25vZGUtPm9yaWcsIG5ld19nd2ZsYWdzLAorCQkoZG93biA+IDIwNDggPyBkb3duIC8gMTAyNCA6IGRvd24pLAorCQkoZG93biA+IDIwNDggPyAiTUJpdCIgOiAiS0JpdCIpLAorCQkodXAgPiAyMDQ4ID8gdXAgLyAxMDI0IDogdXApLAorCQkodXAgPiAyMDQ4ID8gIk1CaXQiIDogIktCaXQiKSk7Cit9CisKK3ZvaWQgZ3dfbm9kZV91cGRhdGUoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiwKKwkJICAgIHN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZSwgdWludDhfdCBuZXdfZ3dmbGFncykKK3sKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKKwlzdHJ1Y3QgZ3dfbm9kZSAqZ3dfbm9kZTsKKworCXJjdV9yZWFkX2xvY2soKTsKKwlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZ3dfbm9kZSwgbm9kZSwgJmJhdF9wcml2LT5nd19saXN0LCBsaXN0KSB7CisJCWlmIChnd19ub2RlLT5vcmlnX25vZGUgIT0gb3JpZ19ub2RlKQorCQkJY29udGludWU7CisKKwkJYmF0X2RiZyhEQkdfQkFUTUFOLCBiYXRfcHJpdiwKKwkJCSJHYXRld2F5IGNsYXNzIG9mIG9yaWdpbmF0b3IgJXBNIGNoYW5nZWQgZnJvbSAiCisJCQkiJWkgdG8gJWlcbiIsCisJCQlvcmlnX25vZGUtPm9yaWcsIGd3X25vZGUtPm9yaWdfbm9kZS0+Z3dfZmxhZ3MsCisJCQluZXdfZ3dmbGFncyk7CisKKwkJZ3dfbm9kZS0+ZGVsZXRlZCA9IDA7CisKKwkJaWYgKG5ld19nd2ZsYWdzID09IDApIHsKKwkJCWd3X25vZGUtPmRlbGV0ZWQgPSBqaWZmaWVzOworCQkJYmF0X2RiZyhEQkdfQkFUTUFOLCBiYXRfcHJpdiwKKwkJCQkiR2F0ZXdheSAlcE0gcmVtb3ZlZCBmcm9tIGdhdGV3YXkgbGlzdFxuIiwKKwkJCQlvcmlnX25vZGUtPm9yaWcpOworCisJCQlpZiAoZ3dfbm9kZSA9PSBiYXRfcHJpdi0+Y3Vycl9ndykgeworCQkJCXJjdV9yZWFkX3VubG9jaygpOworCQkJCWd3X2Rlc2VsZWN0KGJhdF9wcml2KTsKKwkJCQlyZXR1cm47CisJCQl9CisJCX0KKworCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJcmV0dXJuOworCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKKworCWlmIChuZXdfZ3dmbGFncyA9PSAwKQorCQlyZXR1cm47CisKKwlnd19ub2RlX2FkZChiYXRfcHJpdiwgb3JpZ19ub2RlLCBuZXdfZ3dmbGFncyk7Cit9CisKK3ZvaWQgZ3dfbm9kZV9kZWxldGUoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiwgc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlKQoreworCXJldHVybiBnd19ub2RlX3VwZGF0ZShiYXRfcHJpdiwgb3JpZ19ub2RlLCAwKTsKK30KKwordm9pZCBnd19ub2RlX3B1cmdlKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYpCit7CisJc3RydWN0IGd3X25vZGUgKmd3X25vZGU7CisJc3RydWN0IGhsaXN0X25vZGUgKm5vZGUsICpub2RlX3RtcDsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSAyICogUFVSR0VfVElNRU9VVCAqIEhaOworCisJc3Bpbl9sb2NrX2JoKCZiYXRfcHJpdi0+Z3dfbGlzdF9sb2NrKTsKKworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZ3dfbm9kZSwgbm9kZSwgbm9kZV90bXAsCisJCQkJICAmYmF0X3ByaXYtPmd3X2xpc3QsIGxpc3QpIHsKKwkJaWYgKCgoIWd3X25vZGUtPmRlbGV0ZWQpIHx8CisJCSAgICAgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGd3X25vZGUtPmRlbGV0ZWQgKyB0aW1lb3V0KSkpICYmCisJCSAgICBhdG9taWNfcmVhZCgmYmF0X3ByaXYtPm1lc2hfc3RhdGUpID09IE1FU0hfQUNUSVZFKQorCQkJY29udGludWU7CisKKwkJaWYgKGJhdF9wcml2LT5jdXJyX2d3ID09IGd3X25vZGUpCisJCQlnd19kZXNlbGVjdChiYXRfcHJpdik7CisKKwkJaGxpc3RfZGVsX3JjdSgmZ3dfbm9kZS0+bGlzdCk7CisJCWNhbGxfcmN1KCZnd19ub2RlLT5yY3UsIGd3X25vZGVfZnJlZV9yY3UpOworCX0KKworCisJc3Bpbl91bmxvY2tfYmgoJmJhdF9wcml2LT5nd19saXN0X2xvY2spOworfQorCitzdGF0aWMgaW50IF93cml0ZV9idWZmZXJfdGV4dChzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2LAorCQkJICAgICAgc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBnd19ub2RlICpnd19ub2RlKQoreworCWludCBkb3duLCB1cDsKKworCWd3X2JhbmR3aWR0aF90b19rYml0KGd3X25vZGUtPm9yaWdfbm9kZS0+Z3dfZmxhZ3MsICZkb3duLCAmdXApOworCisJcmV0dXJuIHNlcV9wcmludGYoc2VxLCAiJXMgJXBNICglM2kpICVwTSBbJTEwc106ICUzaSAtICVpJXMvJWklc1xuIiwKKwkJICAgICAgIChiYXRfcHJpdi0+Y3Vycl9ndyA9PSBnd19ub2RlID8gIj0+IiA6ICIgICIpLAorCQkgICAgICAgZ3dfbm9kZS0+b3JpZ19ub2RlLT5vcmlnLAorCQkgICAgICAgZ3dfbm9kZS0+b3JpZ19ub2RlLT5yb3V0ZXItPnRxX2F2ZywKKwkJICAgICAgIGd3X25vZGUtPm9yaWdfbm9kZS0+cm91dGVyLT5hZGRyLAorCQkgICAgICAgZ3dfbm9kZS0+b3JpZ19ub2RlLT5yb3V0ZXItPmlmX2luY29taW5nLT5uZXRfZGV2LT5uYW1lLAorCQkgICAgICAgZ3dfbm9kZS0+b3JpZ19ub2RlLT5nd19mbGFncywKKwkJICAgICAgIChkb3duID4gMjA0OCA/IGRvd24gLyAxMDI0IDogZG93biksCisJCSAgICAgICAoZG93biA+IDIwNDggPyAiTUJpdCIgOiAiS0JpdCIpLAorCQkgICAgICAgKHVwID4gMjA0OCA/IHVwIC8gMTAyNCA6IHVwKSwKKwkJICAgICAgICh1cCA+IDIwNDggPyAiTUJpdCIgOiAiS0JpdCIpKTsKK30KKworaW50IGd3X2NsaWVudF9zZXFfcHJpbnRfdGV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqb2Zmc2V0KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopc2VxLT5wcml2YXRlOworCXN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYgPSBuZXRkZXZfcHJpdihuZXRfZGV2KTsKKwlzdHJ1Y3QgZ3dfbm9kZSAqZ3dfbm9kZTsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKKwlpbnQgZ3dfY291bnQgPSAwOworCisJaWYgKCFiYXRfcHJpdi0+cHJpbWFyeV9pZikgeworCisJCXJldHVybiBzZXFfcHJpbnRmKHNlcSwgIkJBVE1BTiBtZXNoICVzIGRpc2FibGVkIC0gcGxlYXNlICIKKwkJCQkgICJzcGVjaWZ5IGludGVyZmFjZXMgdG8gZW5hYmxlIGl0XG4iLAorCQkJCSAgbmV0X2Rldi0+bmFtZSk7CisJfQorCisJaWYgKGJhdF9wcml2LT5wcmltYXJ5X2lmLT5pZl9zdGF0dXMgIT0gSUZfQUNUSVZFKSB7CisKKwkJcmV0dXJuIHNlcV9wcmludGYoc2VxLCAiQkFUTUFOIG1lc2ggJXMgZGlzYWJsZWQgLSAiCisJCQkJICAgICAgICJwcmltYXJ5IGludGVyZmFjZSBub3QgYWN0aXZlXG4iLAorCQkJCSAgICAgICBuZXRfZGV2LT5uYW1lKTsKKwl9CisKKwlzZXFfcHJpbnRmKHNlcSwgIiAgICAgICUtMTJzICglcy8laSkgJTE3cyBbJTEwc106IGd3X2NsYXNzIC4uLiAiCisJCSAgICJbQi5BLlQuTS5BLk4uIGFkdiAlcyVzLCBNYWluSUYvTUFDOiAlcy8lcE0gKCVzKV1cbiIsCisJCSAgICJHYXRld2F5IiwgIiMiLCBUUV9NQVhfVkFMVUUsICJOZXh0aG9wIiwKKwkJICAgIm91dGdvaW5nSUYiLCBTT1VSQ0VfVkVSU0lPTiwgUkVWSVNJT05fVkVSU0lPTl9TVFIsCisJCSAgIGJhdF9wcml2LT5wcmltYXJ5X2lmLT5uZXRfZGV2LT5uYW1lLAorCQkgICBiYXRfcHJpdi0+cHJpbWFyeV9pZi0+bmV0X2Rldi0+ZGV2X2FkZHIsIG5ldF9kZXYtPm5hbWUpOworCisJcmN1X3JlYWRfbG9jaygpOworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShnd19ub2RlLCBub2RlLCAmYmF0X3ByaXYtPmd3X2xpc3QsIGxpc3QpIHsKKwkJaWYgKGd3X25vZGUtPmRlbGV0ZWQpCisJCQljb250aW51ZTsKKworCQlpZiAoIWd3X25vZGUtPm9yaWdfbm9kZS0+cm91dGVyKQorCQkJY29udGludWU7CisKKwkJX3dyaXRlX2J1ZmZlcl90ZXh0KGJhdF9wcml2LCBzZXEsIGd3X25vZGUpOworCQlnd19jb3VudCsrOworCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKKworCWlmIChnd19jb3VudCA9PSAwKQorCQlzZXFfcHJpbnRmKHNlcSwgIk5vIGdhdGV3YXlzIGluIHJhbmdlIC4uLlxuIik7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGd3X2lzX3RhcmdldChzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBldGhoZHIgKmV0aGhkcjsKKwlzdHJ1Y3QgaXBoZHIgKmlwaGRyOworCXN0cnVjdCBpcHY2aGRyICppcHY2aGRyOworCXN0cnVjdCB1ZHBoZHIgKnVkcGhkcjsKKwl1bnNpZ25lZCBpbnQgaGVhZGVyX2xlbiA9IDA7CisKKwlpZiAoYXRvbWljX3JlYWQoJmJhdF9wcml2LT5nd19tb2RlKSA9PSBHV19NT0RFX09GRikKKwkJcmV0dXJuIDA7CisKKwkvKiBjaGVjayBmb3IgZXRoZXJuZXQgaGVhZGVyICovCisJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgaGVhZGVyX2xlbiArIEVUSF9ITEVOKSkKKwkJcmV0dXJuIDA7CisJZXRoaGRyID0gKHN0cnVjdCBldGhoZHIgKilza2ItPmRhdGE7CisJaGVhZGVyX2xlbiArPSBFVEhfSExFTjsKKworCS8qIGNoZWNrIGZvciBpbml0aWFsIHZsYW4gaGVhZGVyICovCisJaWYgKG50b2hzKGV0aGhkci0+aF9wcm90bykgPT0gRVRIX1BfODAyMVEpIHsKKwkJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgaGVhZGVyX2xlbiArIFZMQU5fSExFTikpCisJCQlyZXR1cm4gMDsKKwkJZXRoaGRyID0gKHN0cnVjdCBldGhoZHIgKikoc2tiLT5kYXRhICsgVkxBTl9ITEVOKTsKKwkJaGVhZGVyX2xlbiArPSBWTEFOX0hMRU47CisJfQorCisJLyogY2hlY2sgZm9yIGlwIGhlYWRlciAqLworCXN3aXRjaCAobnRvaHMoZXRoaGRyLT5oX3Byb3RvKSkgeworCWNhc2UgRVRIX1BfSVA6CisJCWlmICghcHNrYl9tYXlfcHVsbChza2IsIGhlYWRlcl9sZW4gKyBzaXplb2Yoc3RydWN0IGlwaGRyKSkpCisJCQlyZXR1cm4gMDsKKwkJaXBoZHIgPSAoc3RydWN0IGlwaGRyICopKHNrYi0+ZGF0YSArIGhlYWRlcl9sZW4pOworCQloZWFkZXJfbGVuICs9IGlwaGRyLT5paGwgKiA0OworCisJCS8qIGNoZWNrIGZvciB1ZHAgaGVhZGVyICovCisJCWlmIChpcGhkci0+cHJvdG9jb2wgIT0gSVBQUk9UT19VRFApCisJCQlyZXR1cm4gMDsKKworCQlicmVhazsKKwljYXNlIEVUSF9QX0lQVjY6CisJCWlmICghcHNrYl9tYXlfcHVsbChza2IsIGhlYWRlcl9sZW4gKyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKSkKKwkJCXJldHVybiAwOworCQlpcHY2aGRyID0gKHN0cnVjdCBpcHY2aGRyICopKHNrYi0+ZGF0YSArIGhlYWRlcl9sZW4pOworCQloZWFkZXJfbGVuICs9IHNpemVvZihzdHJ1Y3QgaXB2Nmhkcik7CisKKwkJLyogY2hlY2sgZm9yIHVkcCBoZWFkZXIgKi8KKwkJaWYgKGlwdjZoZHItPm5leHRoZHIgIT0gSVBQUk9UT19VRFApCisJCQlyZXR1cm4gMDsKKworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBoZWFkZXJfbGVuICsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpKSkKKwkJcmV0dXJuIDA7CisJdWRwaGRyID0gKHN0cnVjdCB1ZHBoZHIgKikoc2tiLT5kYXRhICsgaGVhZGVyX2xlbik7CisJaGVhZGVyX2xlbiArPSBzaXplb2Yoc3RydWN0IHVkcGhkcik7CisKKwkvKiBjaGVjayBmb3IgYm9vdHAgcG9ydCAqLworCWlmICgobnRvaHMoZXRoaGRyLT5oX3Byb3RvKSA9PSBFVEhfUF9JUCkgJiYKKwkgICAgIChudG9ocyh1ZHBoZHItPmRlc3QpICE9IDY3KSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoKG50b2hzKGV0aGhkci0+aF9wcm90bykgPT0gRVRIX1BfSVBWNikgJiYKKwkgICAgKG50b2hzKHVkcGhkci0+ZGVzdCkgIT0gNTQ3KSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoYXRvbWljX3JlYWQoJmJhdF9wcml2LT5nd19tb2RlKSA9PSBHV19NT0RFX1NFUlZFUikKKwkJcmV0dXJuIC0xOworCisJaWYgKCFiYXRfcHJpdi0+Y3Vycl9ndykKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gMTsKK30KZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L2dhdGV3YXlfY2xpZW50LmggYi9uZXQvYmF0bWFuLWFkdi9nYXRld2F5X2NsaWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1ODVlNjUKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvYmF0bWFuLWFkdi9nYXRld2F5X2NsaWVudC5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBCLkEuVC5NLkEuTi4gY29udHJpYnV0b3JzOgorICoKKyAqIE1hcmVrIExpbmRuZXIKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEsIFVTQQorICoKKyAqLworCisjaWZuZGVmIF9ORVRfQkFUTUFOX0FEVl9HQVRFV0FZX0NMSUVOVF9IXworI2RlZmluZSBfTkVUX0JBVE1BTl9BRFZfR0FURVdBWV9DTElFTlRfSF8KKwordm9pZCBnd19kZXNlbGVjdChzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2KTsKK3ZvaWQgZ3dfZWxlY3Rpb24oc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdik7Cit2b2lkICpnd19nZXRfc2VsZWN0ZWQoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdik7Cit2b2lkIGd3X2NoZWNrX2VsZWN0aW9uKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYsIHN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZSk7Cit2b2lkIGd3X25vZGVfdXBkYXRlKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYsCisJCSAgICBzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGUsIHVpbnQ4X3QgbmV3X2d3ZmxhZ3MpOwordm9pZCBnd19ub2RlX2RlbGV0ZShzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2LCBzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGUpOwordm9pZCBnd19ub2RlX3B1cmdlKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYpOworaW50IGd3X2NsaWVudF9zZXFfcHJpbnRfdGV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqb2Zmc2V0KTsKK2ludCBnd19pc190YXJnZXQoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKKyNlbmRpZiAvKiBfTkVUX0JBVE1BTl9BRFZfR0FURVdBWV9DTElFTlRfSF8gKi8KZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L2dhdGV3YXlfY29tbW9uLmMgYi9uZXQvYmF0bWFuLWFkdi9nYXRld2F5X2NvbW1vbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5NjI5ODIKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvYmF0bWFuLWFkdi9nYXRld2F5X2NvbW1vbi5jCkBAIC0wLDAgKzEsMTc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgQi5BLlQuTS5BLk4uIGNvbnRyaWJ1dG9yczoKKyAqCisgKiBNYXJlayBMaW5kbmVyCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxLCBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgIm1haW4uaCIKKyNpbmNsdWRlICJnYXRld2F5X2NvbW1vbi5oIgorI2luY2x1ZGUgImdhdGV3YXlfY2xpZW50LmgiCisKKy8qIGNhbGN1bGF0ZXMgdGhlIGdhdGV3YXkgY2xhc3MgZnJvbSBrYml0ICovCitzdGF0aWMgdm9pZCBrYml0X3RvX2d3X2JhbmR3aWR0aChpbnQgZG93biwgaW50IHVwLCBsb25nICpnd19zcnZfY2xhc3MpCit7CisJaW50IG1kb3duID0gMCwgdGRvd24sIHR1cCwgZGlmZmVyZW5jZTsKKwl1aW50OF90IHNiaXQsIHBhcnQ7CisKKwkqZ3dfc3J2X2NsYXNzID0gMDsKKwlkaWZmZXJlbmNlID0gMHgwRkZGRkZGRjsKKworCS8qIHRlc3QgYWxsIGRvd25zcGVlZHMgKi8KKwlmb3IgKHNiaXQgPSAwOyBzYml0IDwgMjsgc2JpdCsrKSB7CisJCWZvciAocGFydCA9IDA7IHBhcnQgPCAxNjsgcGFydCsrKSB7CisJCQl0ZG93biA9IDMyICogKHNiaXQgKyAyKSAqICgxIDw8IHBhcnQpOworCisJCQlpZiAoYWJzKHRkb3duIC0gZG93bikgPCBkaWZmZXJlbmNlKSB7CisJCQkJKmd3X3Nydl9jbGFzcyA9IChzYml0IDw8IDcpICsgKHBhcnQgPDwgMyk7CisJCQkJZGlmZmVyZW5jZSA9IGFicyh0ZG93biAtIGRvd24pOworCQkJCW1kb3duID0gdGRvd247CisJCQl9CisJCX0KKwl9CisKKwkvKiB0ZXN0IGFsbCB1cHNwZWVkcyAqLworCWRpZmZlcmVuY2UgPSAweDBGRkZGRkZGOworCisJZm9yIChwYXJ0ID0gMDsgcGFydCA8IDg7IHBhcnQrKykgeworCQl0dXAgPSAoKHBhcnQgKyAxKSAqIChtZG93bikpIC8gODsKKworCQlpZiAoYWJzKHR1cCAtIHVwKSA8IGRpZmZlcmVuY2UpIHsKKwkJCSpnd19zcnZfY2xhc3MgPSAoKmd3X3Nydl9jbGFzcyAmIDB4RjgpIHwgcGFydDsKKwkJCWRpZmZlcmVuY2UgPSBhYnModHVwIC0gdXApOworCQl9CisJfQorfQorCisvKiByZXR1cm5zIHRoZSB1cCBhbmQgZG93bnNwZWVkcyBpbiBrYml0LCBjYWxjdWxhdGVkIGZyb20gdGhlIGNsYXNzICovCit2b2lkIGd3X2JhbmR3aWR0aF90b19rYml0KHVpbnQ4X3QgZ3dfc3J2X2NsYXNzLCBpbnQgKmRvd24sIGludCAqdXApCit7CisJY2hhciBzYml0ID0gKGd3X3Nydl9jbGFzcyAmIDB4ODApID4+IDc7CisJY2hhciBkcGFydCA9IChnd19zcnZfY2xhc3MgJiAweDc4KSA+PiAzOworCWNoYXIgdXBhcnQgPSAoZ3dfc3J2X2NsYXNzICYgMHgwNyk7CisKKwlpZiAoIWd3X3Nydl9jbGFzcykgeworCQkqZG93biA9IDA7CisJCSp1cCA9IDA7CisJCXJldHVybjsKKwl9CisKKwkqZG93biA9IDMyICogKHNiaXQgKyAyKSAqICgxIDw8IGRwYXJ0KTsKKwkqdXAgPSAoKHVwYXJ0ICsgMSkgKiAoKmRvd24pKSAvIDg7Cit9CisKK3N0YXRpYyBib29sIHBhcnNlX2d3X2JhbmR3aWR0aChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiwgY2hhciAqYnVmZiwKKwkJCSAgICAgICBsb25nICp1cCwgbG9uZyAqZG93bikKK3sKKwlpbnQgcmV0LCBtdWx0aSA9IDE7CisJY2hhciAqc2xhc2hfcHRyLCAqdG1wX3B0cjsKKworCXNsYXNoX3B0ciA9IHN0cmNocihidWZmLCAnLycpOworCWlmIChzbGFzaF9wdHIpCisJCSpzbGFzaF9wdHIgPSAwOworCisJaWYgKHN0cmxlbihidWZmKSA+IDQpIHsKKwkJdG1wX3B0ciA9IGJ1ZmYgKyBzdHJsZW4oYnVmZikgLSA0OworCisJCWlmIChzdHJuaWNtcCh0bXBfcHRyLCAibWJpdCIsIDQpID09IDApCisJCQltdWx0aSA9IDEwMjQ7CisKKwkJaWYgKChzdHJuaWNtcCh0bXBfcHRyLCAia2JpdCIsIDQpID09IDApIHx8CisJCQkobXVsdGkgPiAxKSkKKwkJCSp0bXBfcHRyID0gJ1wwJzsKKwl9CisKKwlyZXQgPSBzdHJpY3Rfc3RydG91bChidWZmLCAxMCwgZG93bik7CisJaWYgKHJldCkgeworCQliYXRfZXJyKG5ldF9kZXYsCisJCQkiRG93bmxvYWQgc3BlZWQgb2YgZ2F0ZXdheSBtb2RlIGludmFsaWQ6ICVzXG4iLAorCQkJYnVmZik7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkqZG93biAqPSBtdWx0aTsKKworCS8qIHdlIGFsc28gZ290IHNvbWUgdXBsb2FkIGluZm8gKi8KKwlpZiAoc2xhc2hfcHRyKSB7CisJCW11bHRpID0gMTsKKworCQlpZiAoc3RybGVuKHNsYXNoX3B0ciArIDEpID4gNCkgeworCQkJdG1wX3B0ciA9IHNsYXNoX3B0ciArIDEgLSA0ICsgc3RybGVuKHNsYXNoX3B0ciArIDEpOworCisJCQlpZiAoc3RybmljbXAodG1wX3B0ciwgIm1iaXQiLCA0KSA9PSAwKQorCQkJCW11bHRpID0gMTAyNDsKKworCQkJaWYgKChzdHJuaWNtcCh0bXBfcHRyLCAia2JpdCIsIDQpID09IDApIHx8CisJCQkJKG11bHRpID4gMSkpCisJCQkJKnRtcF9wdHIgPSAnXDAnOworCQl9CisKKwkJcmV0ID0gc3RyaWN0X3N0cnRvdWwoc2xhc2hfcHRyICsgMSwgMTAsIHVwKTsKKwkJaWYgKHJldCkgeworCQkJYmF0X2VycihuZXRfZGV2LAorCQkJCSJVcGxvYWQgc3BlZWQgb2YgZ2F0ZXdheSBtb2RlIGludmFsaWQ6ICIKKwkJCQkiJXNcbiIsIHNsYXNoX3B0ciArIDEpOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisKKwkJKnVwICo9IG11bHRpOworCX0KKworCXJldHVybiB0cnVlOworfQorCitzc2l6ZV90IGd3X2JhbmR3aWR0aF9zZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYsIGNoYXIgKmJ1ZmYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYobmV0X2Rldik7CisJbG9uZyBnd19iYW5kd2lkdGhfdG1wID0gMCwgdXAgPSAwLCBkb3duID0gMDsKKwlib29sIHJldDsKKworCXJldCA9IHBhcnNlX2d3X2JhbmR3aWR0aChuZXRfZGV2LCBidWZmLCAmdXAsICZkb3duKTsKKwlpZiAoIXJldCkKKwkJZ290byBlbmQ7CisKKwlpZiAoKCFkb3duKSB8fCAoZG93biA8IDI1NikpCisJCWRvd24gPSAyMDAwOworCisJaWYgKCF1cCkKKwkJdXAgPSBkb3duIC8gNTsKKworCWtiaXRfdG9fZ3dfYmFuZHdpZHRoKGRvd24sIHVwLCAmZ3dfYmFuZHdpZHRoX3RtcCk7CisKKwkvKioKKwkgKiB0aGUgZ3cgYmFuZHdpZHRoIHdlIGd1ZXNzZWQgYWJvdmUgbWlnaHQgbm90IG1hdGNoIHRoZSBnaXZlbgorCSAqIHNwZWVkcywgaGVuY2Ugd2UgbmVlZCB0byBjYWxjdWxhdGUgaXQgYmFjayB0byBzaG93IHRoZSBudW1iZXIKKwkgKiB0aGF0IGlzIGdvaW5nIHRvIGJlIHByb3BhZ2F0ZWQKKwkgKiovCisJZ3dfYmFuZHdpZHRoX3RvX2tiaXQoKHVpbnQ4X3QpZ3dfYmFuZHdpZHRoX3RtcCwKKwkJCSAgICAgKGludCAqKSZkb3duLCAoaW50ICopJnVwKTsKKworCWd3X2Rlc2VsZWN0KGJhdF9wcml2KTsKKwliYXRfaW5mbyhuZXRfZGV2LCAiQ2hhbmdpbmcgZ2F0ZXdheSBiYW5kd2lkdGggZnJvbTogJyVpJyB0bzogJyVsZCcgIgorCQkgIihwcm9wYWdhdGluZzogJWxkJXMvJWxkJXMpXG4iLAorCQkgYXRvbWljX3JlYWQoJmJhdF9wcml2LT5nd19iYW5kd2lkdGgpLCBnd19iYW5kd2lkdGhfdG1wLAorCQkgKGRvd24gPiAyMDQ4ID8gZG93biAvIDEwMjQgOiBkb3duKSwKKwkJIChkb3duID4gMjA0OCA/ICJNQml0IiA6ICJLQml0IiksCisJCSAodXAgPiAyMDQ4ID8gdXAgLyAxMDI0IDogdXApLAorCQkgKHVwID4gMjA0OCA/ICJNQml0IiA6ICJLQml0IikpOworCisJYXRvbWljX3NldCgmYmF0X3ByaXYtPmd3X2JhbmR3aWR0aCwgZ3dfYmFuZHdpZHRoX3RtcCk7CisKK2VuZDoKKwlyZXR1cm4gY291bnQ7Cit9CmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9nYXRld2F5X2NvbW1vbi5oIGIvbmV0L2JhdG1hbi1hZHYvZ2F0ZXdheV9jb21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTcyOGQwCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L2JhdG1hbi1hZHYvZ2F0ZXdheV9jb21tb24uaApAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgQi5BLlQuTS5BLk4uIGNvbnRyaWJ1dG9yczoKKyAqCisgKiBNYXJlayBMaW5kbmVyCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxLCBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBfTkVUX0JBVE1BTl9BRFZfR0FURVdBWV9DT01NT05fSF8KKyNkZWZpbmUgX05FVF9CQVRNQU5fQURWX0dBVEVXQVlfQ09NTU9OX0hfCisKK2VudW0gZ3dfbW9kZXMgeworCUdXX01PREVfT0ZGLAorCUdXX01PREVfQ0xJRU5ULAorCUdXX01PREVfU0VSVkVSLAorfTsKKworI2RlZmluZSBHV19NT0RFX09GRl9OQU1FCSJvZmYiCisjZGVmaW5lIEdXX01PREVfQ0xJRU5UX05BTUUJImNsaWVudCIKKyNkZWZpbmUgR1dfTU9ERV9TRVJWRVJfTkFNRQkic2VydmVyIgorCit2b2lkIGd3X2JhbmR3aWR0aF90b19rYml0KHVpbnQ4X3QgZ3dfY2xhc3MsIGludCAqZG93biwgaW50ICp1cCk7Citzc2l6ZV90IGd3X2JhbmR3aWR0aF9zZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYsIGNoYXIgKmJ1ZmYsIHNpemVfdCBjb3VudCk7CisKKyNlbmRpZiAvKiBfTkVUX0JBVE1BTl9BRFZfR0FURVdBWV9DT01NT05fSF8gKi8KZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmMgYi9uZXQvYmF0bWFuLWFkdi9oYXJkLWludGVyZmFjZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmOTU3NzcKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvYmF0bWFuLWFkdi9oYXJkLWludGVyZmFjZS5jCkBAIC0wLDAgKzEsNjUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTAgQi5BLlQuTS5BLk4uIGNvbnRyaWJ1dG9yczoKKyAqCisgKiBNYXJlayBMaW5kbmVyLCBTaW1vbiBXdW5kZXJsaWNoCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxLCBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgIm1haW4uaCIKKyNpbmNsdWRlICJoYXJkLWludGVyZmFjZS5oIgorI2luY2x1ZGUgInNvZnQtaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAic2VuZC5oIgorI2luY2x1ZGUgInRyYW5zbGF0aW9uLXRhYmxlLmgiCisjaW5jbHVkZSAicm91dGluZy5oIgorI2luY2x1ZGUgImJhdF9zeXNmcy5oIgorI2luY2x1ZGUgIm9yaWdpbmF0b3IuaCIKKyNpbmNsdWRlICJoYXNoLmgiCisKKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKworLyogcHJvdGVjdCB1cGRhdGUgY3JpdGljYWwgc2lkZSBvZiBpZl9saXN0IC0gYnV0IG5vdCB0aGUgY29udGVudCAqLworc3RhdGljIERFRklORV9TUElOTE9DSyhpZl9saXN0X2xvY2spOworCitzdGF0aWMgdm9pZCBoYXJkaWZfZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpyY3UpCit7CisJc3RydWN0IGJhdG1hbl9pZiAqYmF0bWFuX2lmOworCisJYmF0bWFuX2lmID0gY29udGFpbmVyX29mKHJjdSwgc3RydWN0IGJhdG1hbl9pZiwgcmN1KTsKKwlkZXZfcHV0KGJhdG1hbl9pZi0+bmV0X2Rldik7CisJa3JlZl9wdXQoJmJhdG1hbl9pZi0+cmVmY291bnQsIGhhcmRpZl9mcmVlX3JlZik7Cit9CisKK3N0cnVjdCBiYXRtYW5faWYgKmdldF9iYXRtYW5faWZfYnlfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2KQoreworCXN0cnVjdCBiYXRtYW5faWYgKmJhdG1hbl9pZjsKKworCXJjdV9yZWFkX2xvY2soKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShiYXRtYW5faWYsICZpZl9saXN0LCBsaXN0KSB7CisJCWlmIChiYXRtYW5faWYtPm5ldF9kZXYgPT0gbmV0X2RldikKKwkJCWdvdG8gb3V0OworCX0KKworCWJhdG1hbl9pZiA9IE5VTEw7CisKK291dDoKKwlpZiAoYmF0bWFuX2lmKQorCQlrcmVmX2dldCgmYmF0bWFuX2lmLT5yZWZjb3VudCk7CisKKwlyY3VfcmVhZF91bmxvY2soKTsKKwlyZXR1cm4gYmF0bWFuX2lmOworfQorCitzdGF0aWMgaW50IGlzX3ZhbGlkX2lmYWNlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2KQoreworCWlmIChuZXRfZGV2LT5mbGFncyAmIElGRl9MT09QQkFDSykKKwkJcmV0dXJuIDA7CisKKwlpZiAobmV0X2Rldi0+dHlwZSAhPSBBUlBIUkRfRVRIRVIpCisJCXJldHVybiAwOworCisJaWYgKG5ldF9kZXYtPmFkZHJfbGVuICE9IEVUSF9BTEVOKQorCQlyZXR1cm4gMDsKKworCS8qIG5vIGJhdG1hbiBvdmVyIGJhdG1hbiAqLworI2lmZGVmIEhBVkVfTkVUX0RFVklDRV9PUFMKKwlpZiAobmV0X2Rldi0+bmV0ZGV2X29wcy0+bmRvX3N0YXJ0X3htaXQgPT0gaW50ZXJmYWNlX3R4KQorCQlyZXR1cm4gMDsKKyNlbHNlCisJaWYgKG5ldF9kZXYtPmhhcmRfc3RhcnRfeG1pdCA9PSBpbnRlcmZhY2VfdHgpCisJCXJldHVybiAwOworI2VuZGlmCisKKwkvKiBEZXZpY2UgaXMgYmVpbmcgYnJpZGdlZCAqLworCS8qIGlmIChuZXRfZGV2LT5wcml2X2ZsYWdzICYgSUZGX0JSSURHRV9QT1JUKQorCQlyZXR1cm4gMDsgKi8KKworCXJldHVybiAxOworfQorCitzdGF0aWMgc3RydWN0IGJhdG1hbl9pZiAqZ2V0X2FjdGl2ZV9iYXRtYW5faWYoc3RydWN0IG5ldF9kZXZpY2UgKnNvZnRfaWZhY2UpCit7CisJc3RydWN0IGJhdG1hbl9pZiAqYmF0bWFuX2lmOworCisJcmN1X3JlYWRfbG9jaygpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGJhdG1hbl9pZiwgJmlmX2xpc3QsIGxpc3QpIHsKKwkJaWYgKGJhdG1hbl9pZi0+c29mdF9pZmFjZSAhPSBzb2Z0X2lmYWNlKQorCQkJY29udGludWU7CisKKwkJaWYgKGJhdG1hbl9pZi0+aWZfc3RhdHVzID09IElGX0FDVElWRSkKKwkJCWdvdG8gb3V0OworCX0KKworCWJhdG1hbl9pZiA9IE5VTEw7CisKK291dDoKKwlpZiAoYmF0bWFuX2lmKQorCQlrcmVmX2dldCgmYmF0bWFuX2lmLT5yZWZjb3VudCk7CisKKwlyY3VfcmVhZF91bmxvY2soKTsKKwlyZXR1cm4gYmF0bWFuX2lmOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfcHJpbWFyeV9hZGRyKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYpCit7CisJc3RydWN0IHZpc19wYWNrZXQgKnZpc19wYWNrZXQ7CisKKwl2aXNfcGFja2V0ID0gKHN0cnVjdCB2aXNfcGFja2V0ICopCisJCQkJYmF0X3ByaXYtPm15X3Zpc19pbmZvLT5za2JfcGFja2V0LT5kYXRhOworCW1lbWNweSh2aXNfcGFja2V0LT52aXNfb3JpZywKKwkgICAgICAgYmF0X3ByaXYtPnByaW1hcnlfaWYtPm5ldF9kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJbWVtY3B5KHZpc19wYWNrZXQtPnNlbmRlcl9vcmlnLAorCSAgICAgICBiYXRfcHJpdi0+cHJpbWFyeV9pZi0+bmV0X2Rldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKK30KKworc3RhdGljIHZvaWQgc2V0X3ByaW1hcnlfaWYoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiwKKwkJCSAgIHN0cnVjdCBiYXRtYW5faWYgKmJhdG1hbl9pZikKK3sKKwlzdHJ1Y3QgYmF0bWFuX3BhY2tldCAqYmF0bWFuX3BhY2tldDsKKwlzdHJ1Y3QgYmF0bWFuX2lmICpvbGRfaWY7CisKKwlpZiAoYmF0bWFuX2lmKQorCQlrcmVmX2dldCgmYmF0bWFuX2lmLT5yZWZjb3VudCk7CisKKwlvbGRfaWYgPSBiYXRfcHJpdi0+cHJpbWFyeV9pZjsKKwliYXRfcHJpdi0+cHJpbWFyeV9pZiA9IGJhdG1hbl9pZjsKKworCWlmIChvbGRfaWYpCisJCWtyZWZfcHV0KCZvbGRfaWYtPnJlZmNvdW50LCBoYXJkaWZfZnJlZV9yZWYpOworCisJaWYgKCFiYXRfcHJpdi0+cHJpbWFyeV9pZikKKwkJcmV0dXJuOworCisJYmF0bWFuX3BhY2tldCA9IChzdHJ1Y3QgYmF0bWFuX3BhY2tldCAqKShiYXRtYW5faWYtPnBhY2tldF9idWZmKTsKKwliYXRtYW5fcGFja2V0LT5mbGFncyA9IFBSSU1BUklFU19GSVJTVF9IT1A7CisJYmF0bWFuX3BhY2tldC0+dHRsID0gVFRMOworCisJdXBkYXRlX3ByaW1hcnlfYWRkcihiYXRfcHJpdik7CisKKwkvKioqCisJICogaGFja3kgdHJpY2sgdG8gbWFrZSBzdXJlIHRoYXQgd2Ugc2VuZCB0aGUgSE5BIGluZm9ybWF0aW9uIHZpYQorCSAqIG91ciBuZXcgcHJpbWFyeSBpbnRlcmZhY2UKKwkgKi8KKwlhdG9taWNfc2V0KCZiYXRfcHJpdi0+aG5hX2xvY2FsX2NoYW5nZWQsIDEpOworfQorCitzdGF0aWMgYm9vbCBoYXJkaWZfaXNfaWZhY2VfdXAoc3RydWN0IGJhdG1hbl9pZiAqYmF0bWFuX2lmKQoreworCWlmIChiYXRtYW5faWYtPm5ldF9kZXYtPmZsYWdzICYgSUZGX1VQKQorCQlyZXR1cm4gdHJ1ZTsKKworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlX21hY19hZGRyZXNzZXMoc3RydWN0IGJhdG1hbl9pZiAqYmF0bWFuX2lmKQoreworCW1lbWNweSgoKHN0cnVjdCBiYXRtYW5fcGFja2V0ICopKGJhdG1hbl9pZi0+cGFja2V0X2J1ZmYpKS0+b3JpZywKKwkgICAgICAgYmF0bWFuX2lmLT5uZXRfZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCW1lbWNweSgoKHN0cnVjdCBiYXRtYW5fcGFja2V0ICopKGJhdG1hbl9pZi0+cGFja2V0X2J1ZmYpKS0+cHJldl9zZW5kZXIsCisJICAgICAgIGJhdG1hbl9pZi0+bmV0X2Rldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKK30KKworc3RhdGljIHZvaWQgY2hlY2tfa25vd25fbWFjX2FkZHIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpCit7CisJc3RydWN0IGJhdG1hbl9pZiAqYmF0bWFuX2lmOworCisJcmN1X3JlYWRfbG9jaygpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGJhdG1hbl9pZiwgJmlmX2xpc3QsIGxpc3QpIHsKKwkJaWYgKChiYXRtYW5faWYtPmlmX3N0YXR1cyAhPSBJRl9BQ1RJVkUpICYmCisJCSAgICAoYmF0bWFuX2lmLT5pZl9zdGF0dXMgIT0gSUZfVE9fQkVfQUNUSVZBVEVEKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChiYXRtYW5faWYtPm5ldF9kZXYgPT0gbmV0X2RldikKKwkJCWNvbnRpbnVlOworCisJCWlmICghY29tcGFyZV9vcmlnKGJhdG1hbl9pZi0+bmV0X2Rldi0+ZGV2X2FkZHIsCisJCQkJICBuZXRfZGV2LT5kZXZfYWRkcikpCisJCQljb250aW51ZTsKKworCQlwcl93YXJuaW5nKCJUaGUgbmV3bHkgYWRkZWQgbWFjIGFkZHJlc3MgKCVwTSkgYWxyZWFkeSBleGlzdHMgIgorCQkJICAgIm9uOiAlc1xuIiwgbmV0X2Rldi0+ZGV2X2FkZHIsCisJCQkgICBiYXRtYW5faWYtPm5ldF9kZXYtPm5hbWUpOworCQlwcl93YXJuaW5nKCJJdCBpcyBzdHJvbmdseSByZWNvbW1lbmRlZCB0byBrZWVwIG1hYyBhZGRyZXNzZXMgIgorCQkJICAgInVuaXF1ZSB0byBhdm9pZCBwcm9ibGVtcyFcbiIpOworCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKK30KKworaW50IGhhcmRpZl9taW5fbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpzb2Z0X2lmYWNlKQoreworCXN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYgPSBuZXRkZXZfcHJpdihzb2Z0X2lmYWNlKTsKKwlzdHJ1Y3QgYmF0bWFuX2lmICpiYXRtYW5faWY7CisJLyogYWxsb3cgYmlnIGZyYW1lcyBpZiBhbGwgZGV2aWNlcyBhcmUgY2FwYWJsZSB0byBkbyBzbworCSAqIChoYXZlIE1UVSA+IDE1MDAgKyBCQVRfSEVBREVSX0xFTikgKi8KKwlpbnQgbWluX210dSA9IEVUSF9EQVRBX0xFTjsKKworCWlmIChhdG9taWNfcmVhZCgmYmF0X3ByaXYtPmZyYWdtZW50YXRpb24pKQorCQlnb3RvIG91dDsKKworCXJjdV9yZWFkX2xvY2soKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShiYXRtYW5faWYsICZpZl9saXN0LCBsaXN0KSB7CisJCWlmICgoYmF0bWFuX2lmLT5pZl9zdGF0dXMgIT0gSUZfQUNUSVZFKSAmJgorCQkgICAgKGJhdG1hbl9pZi0+aWZfc3RhdHVzICE9IElGX1RPX0JFX0FDVElWQVRFRCkpCisJCQljb250aW51ZTsKKworCQlpZiAoYmF0bWFuX2lmLT5zb2Z0X2lmYWNlICE9IHNvZnRfaWZhY2UpCisJCQljb250aW51ZTsKKworCQltaW5fbXR1ID0gbWluX3QoaW50LCBiYXRtYW5faWYtPm5ldF9kZXYtPm10dSAtIEJBVF9IRUFERVJfTEVOLAorCQkJCW1pbl9tdHUpOworCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKK291dDoKKwlyZXR1cm4gbWluX210dTsKK30KKworLyogYWRqdXN0cyB0aGUgTVRVIGlmIGEgbmV3IGludGVyZmFjZSB3aXRoIGEgc21hbGxlciBNVFUgYXBwZWFyZWQuICovCit2b2lkIHVwZGF0ZV9taW5fbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpzb2Z0X2lmYWNlKQoreworCWludCBtaW5fbXR1OworCisJbWluX210dSA9IGhhcmRpZl9taW5fbXR1KHNvZnRfaWZhY2UpOworCWlmIChzb2Z0X2lmYWNlLT5tdHUgIT0gbWluX210dSkKKwkJc29mdF9pZmFjZS0+bXR1ID0gbWluX210dTsKK30KKworc3RhdGljIHZvaWQgaGFyZGlmX2FjdGl2YXRlX2ludGVyZmFjZShzdHJ1Y3QgYmF0bWFuX2lmICpiYXRtYW5faWYpCit7CisJc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdjsKKworCWlmIChiYXRtYW5faWYtPmlmX3N0YXR1cyAhPSBJRl9JTkFDVElWRSkKKwkJcmV0dXJuOworCisJYmF0X3ByaXYgPSBuZXRkZXZfcHJpdihiYXRtYW5faWYtPnNvZnRfaWZhY2UpOworCisJdXBkYXRlX21hY19hZGRyZXNzZXMoYmF0bWFuX2lmKTsKKwliYXRtYW5faWYtPmlmX3N0YXR1cyA9IElGX1RPX0JFX0FDVElWQVRFRDsKKworCS8qKgorCSAqIHRoZSBmaXJzdCBhY3RpdmUgaW50ZXJmYWNlIGJlY29tZXMgb3VyIHByaW1hcnkgaW50ZXJmYWNlIG9yCisJICogdGhlIG5leHQgYWN0aXZlIGludGVyZmFjZSBhZnRlciB0aGUgb2xkIHByaW1heSBpbnRlcmZhY2Ugd2FzIHJlbW92ZWQKKwkgKi8KKwlpZiAoIWJhdF9wcml2LT5wcmltYXJ5X2lmKQorCQlzZXRfcHJpbWFyeV9pZihiYXRfcHJpdiwgYmF0bWFuX2lmKTsKKworCWJhdF9pbmZvKGJhdG1hbl9pZi0+c29mdF9pZmFjZSwgIkludGVyZmFjZSBhY3RpdmF0ZWQ6ICVzXG4iLAorCQkgYmF0bWFuX2lmLT5uZXRfZGV2LT5uYW1lKTsKKworCXVwZGF0ZV9taW5fbXR1KGJhdG1hbl9pZi0+c29mdF9pZmFjZSk7CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBoYXJkaWZfZGVhY3RpdmF0ZV9pbnRlcmZhY2Uoc3RydWN0IGJhdG1hbl9pZiAqYmF0bWFuX2lmKQoreworCWlmICgoYmF0bWFuX2lmLT5pZl9zdGF0dXMgIT0gSUZfQUNUSVZFKSAmJgorCSAgIChiYXRtYW5faWYtPmlmX3N0YXR1cyAhPSBJRl9UT19CRV9BQ1RJVkFURUQpKQorCQlyZXR1cm47CisKKwliYXRtYW5faWYtPmlmX3N0YXR1cyA9IElGX0lOQUNUSVZFOworCisJYmF0X2luZm8oYmF0bWFuX2lmLT5zb2Z0X2lmYWNlLCAiSW50ZXJmYWNlIGRlYWN0aXZhdGVkOiAlc1xuIiwKKwkJIGJhdG1hbl9pZi0+bmV0X2Rldi0+bmFtZSk7CisKKwl1cGRhdGVfbWluX210dShiYXRtYW5faWYtPnNvZnRfaWZhY2UpOworfQorCitpbnQgaGFyZGlmX2VuYWJsZV9pbnRlcmZhY2Uoc3RydWN0IGJhdG1hbl9pZiAqYmF0bWFuX2lmLCBjaGFyICppZmFjZV9uYW1lKQoreworCXN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXY7CisJc3RydWN0IGJhdG1hbl9wYWNrZXQgKmJhdG1hbl9wYWNrZXQ7CisKKwlpZiAoYmF0bWFuX2lmLT5pZl9zdGF0dXMgIT0gSUZfTk9UX0lOX1VTRSkKKwkJZ290byBvdXQ7CisKKwliYXRtYW5faWYtPnNvZnRfaWZhY2UgPSBkZXZfZ2V0X2J5X25hbWUoJmluaXRfbmV0LCBpZmFjZV9uYW1lKTsKKworCWlmICghYmF0bWFuX2lmLT5zb2Z0X2lmYWNlKSB7CisJCWJhdG1hbl9pZi0+c29mdF9pZmFjZSA9IHNvZnRpZl9jcmVhdGUoaWZhY2VfbmFtZSk7CisKKwkJaWYgKCFiYXRtYW5faWYtPnNvZnRfaWZhY2UpCisJCQlnb3RvIGVycjsKKworCQkvKiBkZXZfZ2V0X2J5X25hbWUoKSBpbmNyZWFzZXMgdGhlIHJlZmVyZW5jZSBjb3VudGVyIGZvciB1cyAqLworCQlkZXZfaG9sZChiYXRtYW5faWYtPnNvZnRfaWZhY2UpOworCX0KKworCWJhdF9wcml2ID0gbmV0ZGV2X3ByaXYoYmF0bWFuX2lmLT5zb2Z0X2lmYWNlKTsKKwliYXRtYW5faWYtPnBhY2tldF9sZW4gPSBCQVRfUEFDS0VUX0xFTjsKKwliYXRtYW5faWYtPnBhY2tldF9idWZmID0ga21hbGxvYyhiYXRtYW5faWYtPnBhY2tldF9sZW4sIEdGUF9BVE9NSUMpOworCisJaWYgKCFiYXRtYW5faWYtPnBhY2tldF9idWZmKSB7CisJCWJhdF9lcnIoYmF0bWFuX2lmLT5zb2Z0X2lmYWNlLCAiQ2FuJ3QgYWRkIGludGVyZmFjZSBwYWNrZXQgIgorCQkJIiglcyk6IG91dCBvZiBtZW1vcnlcbiIsIGJhdG1hbl9pZi0+bmV0X2Rldi0+bmFtZSk7CisJCWdvdG8gZXJyOworCX0KKworCWJhdG1hbl9wYWNrZXQgPSAoc3RydWN0IGJhdG1hbl9wYWNrZXQgKikoYmF0bWFuX2lmLT5wYWNrZXRfYnVmZik7CisJYmF0bWFuX3BhY2tldC0+cGFja2V0X3R5cGUgPSBCQVRfUEFDS0VUOworCWJhdG1hbl9wYWNrZXQtPnZlcnNpb24gPSBDT01QQVRfVkVSU0lPTjsKKwliYXRtYW5fcGFja2V0LT5mbGFncyA9IDA7CisJYmF0bWFuX3BhY2tldC0+dHRsID0gMjsKKwliYXRtYW5fcGFja2V0LT50cSA9IFRRX01BWF9WQUxVRTsKKwliYXRtYW5fcGFja2V0LT5udW1faG5hID0gMDsKKworCWJhdG1hbl9pZi0+aWZfbnVtID0gYmF0X3ByaXYtPm51bV9pZmFjZXM7CisJYmF0X3ByaXYtPm51bV9pZmFjZXMrKzsKKwliYXRtYW5faWYtPmlmX3N0YXR1cyA9IElGX0lOQUNUSVZFOworCW9yaWdfaGFzaF9hZGRfaWYoYmF0bWFuX2lmLCBiYXRfcHJpdi0+bnVtX2lmYWNlcyk7CisKKwliYXRtYW5faWYtPmJhdG1hbl9hZHZfcHR5cGUudHlwZSA9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfQkFUTUFOKTsKKwliYXRtYW5faWYtPmJhdG1hbl9hZHZfcHR5cGUuZnVuYyA9IGJhdG1hbl9za2JfcmVjdjsKKwliYXRtYW5faWYtPmJhdG1hbl9hZHZfcHR5cGUuZGV2ID0gYmF0bWFuX2lmLT5uZXRfZGV2OworCWtyZWZfZ2V0KCZiYXRtYW5faWYtPnJlZmNvdW50KTsKKwlkZXZfYWRkX3BhY2soJmJhdG1hbl9pZi0+YmF0bWFuX2Fkdl9wdHlwZSk7CisKKwlhdG9taWNfc2V0KCZiYXRtYW5faWYtPnNlcW5vLCAxKTsKKwlhdG9taWNfc2V0KCZiYXRtYW5faWYtPmZyYWdfc2Vxbm8sIDEpOworCWJhdF9pbmZvKGJhdG1hbl9pZi0+c29mdF9pZmFjZSwgIkFkZGluZyBpbnRlcmZhY2U6ICVzXG4iLAorCQkgYmF0bWFuX2lmLT5uZXRfZGV2LT5uYW1lKTsKKworCWlmIChhdG9taWNfcmVhZCgmYmF0X3ByaXYtPmZyYWdtZW50YXRpb24pICYmIGJhdG1hbl9pZi0+bmV0X2Rldi0+bXR1IDwKKwkJRVRIX0RBVEFfTEVOICsgQkFUX0hFQURFUl9MRU4pCisJCWJhdF9pbmZvKGJhdG1hbl9pZi0+c29mdF9pZmFjZSwKKwkJCSJUaGUgTVRVIG9mIGludGVyZmFjZSAlcyBpcyB0b28gc21hbGwgKCVpKSB0byBoYW5kbGUgIgorCQkJInRoZSB0cmFuc3BvcnQgb2YgYmF0bWFuLWFkdiBwYWNrZXRzLiBQYWNrZXRzIGdvaW5nICIKKwkJCSJvdmVyIHRoaXMgaW50ZXJmYWNlIHdpbGwgYmUgZnJhZ21lbnRlZCBvbiBsYXllcjIgIgorCQkJIndoaWNoIGNvdWxkIGltcGFjdCB0aGUgcGVyZm9ybWFuY2UuIFNldHRpbmcgdGhlIE1UVSAiCisJCQkidG8gJXppIHdvdWxkIHNvbHZlIHRoZSBwcm9ibGVtLlxuIiwKKwkJCWJhdG1hbl9pZi0+bmV0X2Rldi0+bmFtZSwgYmF0bWFuX2lmLT5uZXRfZGV2LT5tdHUsCisJCQlFVEhfREFUQV9MRU4gKyBCQVRfSEVBREVSX0xFTik7CisKKwlpZiAoIWF0b21pY19yZWFkKCZiYXRfcHJpdi0+ZnJhZ21lbnRhdGlvbikgJiYgYmF0bWFuX2lmLT5uZXRfZGV2LT5tdHUgPAorCQlFVEhfREFUQV9MRU4gKyBCQVRfSEVBREVSX0xFTikKKwkJYmF0X2luZm8oYmF0bWFuX2lmLT5zb2Z0X2lmYWNlLAorCQkJIlRoZSBNVFUgb2YgaW50ZXJmYWNlICVzIGlzIHRvbyBzbWFsbCAoJWkpIHRvIGhhbmRsZSAiCisJCQkidGhlIHRyYW5zcG9ydCBvZiBiYXRtYW4tYWR2IHBhY2tldHMuIElmIHlvdSBleHBlcmllbmNlIgorCQkJIiBwcm9ibGVtcyBnZXR0aW5nIHRyYWZmaWMgdGhyb3VnaCB0cnkgaW5jcmVhc2luZyB0aGUgIgorCQkJIk1UVSB0byAlemkuXG4iLAorCQkJYmF0bWFuX2lmLT5uZXRfZGV2LT5uYW1lLCBiYXRtYW5faWYtPm5ldF9kZXYtPm10dSwKKwkJCUVUSF9EQVRBX0xFTiArIEJBVF9IRUFERVJfTEVOKTsKKworCWlmIChoYXJkaWZfaXNfaWZhY2VfdXAoYmF0bWFuX2lmKSkKKwkJaGFyZGlmX2FjdGl2YXRlX2ludGVyZmFjZShiYXRtYW5faWYpOworCWVsc2UKKwkJYmF0X2VycihiYXRtYW5faWYtPnNvZnRfaWZhY2UsICJOb3QgdXNpbmcgaW50ZXJmYWNlICVzICIKKwkJCSIocmV0cnlpbmcgbGF0ZXIpOiBpbnRlcmZhY2Ugbm90IGFjdGl2ZVxuIiwKKwkJCWJhdG1hbl9pZi0+bmV0X2Rldi0+bmFtZSk7CisKKwkvKiBiZWdpbiBzY2hlZHVsaW5nIG9yaWdpbmF0b3IgbWVzc2FnZXMgb24gdGhhdCBpbnRlcmZhY2UgKi8KKwlzY2hlZHVsZV9vd25fcGFja2V0KGJhdG1hbl9pZik7CisKK291dDoKKwlyZXR1cm4gMDsKKworZXJyOgorCXJldHVybiAtRU5PTUVNOworfQorCit2b2lkIGhhcmRpZl9kaXNhYmxlX2ludGVyZmFjZShzdHJ1Y3QgYmF0bWFuX2lmICpiYXRtYW5faWYpCit7CisJc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KGJhdG1hbl9pZi0+c29mdF9pZmFjZSk7CisKKwlpZiAoYmF0bWFuX2lmLT5pZl9zdGF0dXMgPT0gSUZfQUNUSVZFKQorCQloYXJkaWZfZGVhY3RpdmF0ZV9pbnRlcmZhY2UoYmF0bWFuX2lmKTsKKworCWlmIChiYXRtYW5faWYtPmlmX3N0YXR1cyAhPSBJRl9JTkFDVElWRSkKKwkJcmV0dXJuOworCisJYmF0X2luZm8oYmF0bWFuX2lmLT5zb2Z0X2lmYWNlLCAiUmVtb3ZpbmcgaW50ZXJmYWNlOiAlc1xuIiwKKwkJIGJhdG1hbl9pZi0+bmV0X2Rldi0+bmFtZSk7CisJZGV2X3JlbW92ZV9wYWNrKCZiYXRtYW5faWYtPmJhdG1hbl9hZHZfcHR5cGUpOworCWtyZWZfcHV0KCZiYXRtYW5faWYtPnJlZmNvdW50LCBoYXJkaWZfZnJlZV9yZWYpOworCisJYmF0X3ByaXYtPm51bV9pZmFjZXMtLTsKKwlvcmlnX2hhc2hfZGVsX2lmKGJhdG1hbl9pZiwgYmF0X3ByaXYtPm51bV9pZmFjZXMpOworCisJaWYgKGJhdG1hbl9pZiA9PSBiYXRfcHJpdi0+cHJpbWFyeV9pZikgeworCQlzdHJ1Y3QgYmF0bWFuX2lmICpuZXdfaWY7CisKKwkJbmV3X2lmID0gZ2V0X2FjdGl2ZV9iYXRtYW5faWYoYmF0bWFuX2lmLT5zb2Z0X2lmYWNlKTsKKwkJc2V0X3ByaW1hcnlfaWYoYmF0X3ByaXYsIG5ld19pZik7CisKKwkJaWYgKG5ld19pZikKKwkJCWtyZWZfcHV0KCZuZXdfaWYtPnJlZmNvdW50LCBoYXJkaWZfZnJlZV9yZWYpOworCX0KKworCWtmcmVlKGJhdG1hbl9pZi0+cGFja2V0X2J1ZmYpOworCWJhdG1hbl9pZi0+cGFja2V0X2J1ZmYgPSBOVUxMOworCWJhdG1hbl9pZi0+aWZfc3RhdHVzID0gSUZfTk9UX0lOX1VTRTsKKworCS8qIGRlbGV0ZSBhbGwgcmVmZXJlbmNlcyB0byB0aGlzIGJhdG1hbl9pZiAqLworCXB1cmdlX29yaWdfcmVmKGJhdF9wcml2KTsKKwlwdXJnZV9vdXRzdGFuZGluZ19wYWNrZXRzKGJhdF9wcml2LCBiYXRtYW5faWYpOworCWRldl9wdXQoYmF0bWFuX2lmLT5zb2Z0X2lmYWNlKTsKKworCS8qIG5vYm9keSB1c2VzIHRoaXMgaW50ZXJmYWNlIGFueW1vcmUgKi8KKwlpZiAoIWJhdF9wcml2LT5udW1faWZhY2VzKQorCQlzb2Z0aWZfZGVzdHJveShiYXRtYW5faWYtPnNvZnRfaWZhY2UpOworCisJYmF0bWFuX2lmLT5zb2Z0X2lmYWNlID0gTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCBiYXRtYW5faWYgKmhhcmRpZl9hZGRfaW50ZXJmYWNlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2KQoreworCXN0cnVjdCBiYXRtYW5faWYgKmJhdG1hbl9pZjsKKwlpbnQgcmV0OworCisJcmV0ID0gaXNfdmFsaWRfaWZhY2UobmV0X2Rldik7CisJaWYgKHJldCAhPSAxKQorCQlnb3RvIG91dDsKKworCWRldl9ob2xkKG5ldF9kZXYpOworCisJYmF0bWFuX2lmID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGJhdG1hbl9pZiksIEdGUF9BVE9NSUMpOworCWlmICghYmF0bWFuX2lmKSB7CisJCXByX2VycigiQ2FuJ3QgYWRkIGludGVyZmFjZSAoJXMpOiBvdXQgb2YgbWVtb3J5XG4iLAorCQkgICAgICAgbmV0X2Rldi0+bmFtZSk7CisJCWdvdG8gcmVsZWFzZV9kZXY7CisJfQorCisJcmV0ID0gc3lzZnNfYWRkX2hhcmRpZigmYmF0bWFuX2lmLT5oYXJkaWZfb2JqLCBuZXRfZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIGZyZWVfaWY7CisKKwliYXRtYW5faWYtPmlmX251bSA9IC0xOworCWJhdG1hbl9pZi0+bmV0X2RldiA9IG5ldF9kZXY7CisJYmF0bWFuX2lmLT5zb2Z0X2lmYWNlID0gTlVMTDsKKwliYXRtYW5faWYtPmlmX3N0YXR1cyA9IElGX05PVF9JTl9VU0U7CisJSU5JVF9MSVNUX0hFQUQoJmJhdG1hbl9pZi0+bGlzdCk7CisJa3JlZl9pbml0KCZiYXRtYW5faWYtPnJlZmNvdW50KTsKKworCWNoZWNrX2tub3duX21hY19hZGRyKGJhdG1hbl9pZi0+bmV0X2Rldik7CisKKwlzcGluX2xvY2soJmlmX2xpc3RfbG9jayk7CisJbGlzdF9hZGRfdGFpbF9yY3UoJmJhdG1hbl9pZi0+bGlzdCwgJmlmX2xpc3QpOworCXNwaW5fdW5sb2NrKCZpZl9saXN0X2xvY2spOworCisJLyogZXh0cmEgcmVmZXJlbmNlIGZvciByZXR1cm4gKi8KKwlrcmVmX2dldCgmYmF0bWFuX2lmLT5yZWZjb3VudCk7CisJcmV0dXJuIGJhdG1hbl9pZjsKKworZnJlZV9pZjoKKwlrZnJlZShiYXRtYW5faWYpOworcmVsZWFzZV9kZXY6CisJZGV2X3B1dChuZXRfZGV2KTsKK291dDoKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgaGFyZGlmX3JlbW92ZV9pbnRlcmZhY2Uoc3RydWN0IGJhdG1hbl9pZiAqYmF0bWFuX2lmKQoreworCS8qIGZpcnN0IGRlYWN0aXZhdGUgaW50ZXJmYWNlICovCisJaWYgKGJhdG1hbl9pZi0+aWZfc3RhdHVzICE9IElGX05PVF9JTl9VU0UpCisJCWhhcmRpZl9kaXNhYmxlX2ludGVyZmFjZShiYXRtYW5faWYpOworCisJaWYgKGJhdG1hbl9pZi0+aWZfc3RhdHVzICE9IElGX05PVF9JTl9VU0UpCisJCXJldHVybjsKKworCWJhdG1hbl9pZi0+aWZfc3RhdHVzID0gSUZfVE9fQkVfUkVNT1ZFRDsKKwlzeXNmc19kZWxfaGFyZGlmKCZiYXRtYW5faWYtPmhhcmRpZl9vYmopOworCWNhbGxfcmN1KCZiYXRtYW5faWYtPnJjdSwgaGFyZGlmX2ZyZWVfcmN1KTsKK30KKwordm9pZCBoYXJkaWZfcmVtb3ZlX2ludGVyZmFjZXModm9pZCkKK3sKKwlzdHJ1Y3QgYmF0bWFuX2lmICpiYXRtYW5faWYsICpiYXRtYW5faWZfdG1wOworCXN0cnVjdCBsaXN0X2hlYWQgaWZfcXVldWU7CisKKwlJTklUX0xJU1RfSEVBRCgmaWZfcXVldWUpOworCisJc3Bpbl9sb2NrKCZpZl9saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShiYXRtYW5faWYsIGJhdG1hbl9pZl90bXAsICZpZl9saXN0LCBsaXN0KSB7CisJCWxpc3RfZGVsX3JjdSgmYmF0bWFuX2lmLT5saXN0KTsKKwkJbGlzdF9hZGRfdGFpbCgmYmF0bWFuX2lmLT5saXN0LCAmaWZfcXVldWUpOworCX0KKwlzcGluX3VubG9jaygmaWZfbGlzdF9sb2NrKTsKKworCXJ0bmxfbG9jaygpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShiYXRtYW5faWYsIGJhdG1hbl9pZl90bXAsICZpZl9xdWV1ZSwgbGlzdCkgeworCQloYXJkaWZfcmVtb3ZlX2ludGVyZmFjZShiYXRtYW5faWYpOworCX0KKwlydG5sX3VubG9jaygpOworfQorCitzdGF0aWMgaW50IGhhcmRfaWZfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLAorCQkJIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKXB0cjsKKwlzdHJ1Y3QgYmF0bWFuX2lmICpiYXRtYW5faWYgPSBnZXRfYmF0bWFuX2lmX2J5X25ldGRldihuZXRfZGV2KTsKKwlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2OworCisJaWYgKCFiYXRtYW5faWYgJiYgZXZlbnQgPT0gTkVUREVWX1JFR0lTVEVSKQorCQliYXRtYW5faWYgPSBoYXJkaWZfYWRkX2ludGVyZmFjZShuZXRfZGV2KTsKKworCWlmICghYmF0bWFuX2lmKQorCQlnb3RvIG91dDsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIE5FVERFVl9VUDoKKwkJaGFyZGlmX2FjdGl2YXRlX2ludGVyZmFjZShiYXRtYW5faWYpOworCQlicmVhazsKKwljYXNlIE5FVERFVl9HT0lOR19ET1dOOgorCWNhc2UgTkVUREVWX0RPV046CisJCWhhcmRpZl9kZWFjdGl2YXRlX2ludGVyZmFjZShiYXRtYW5faWYpOworCQlicmVhazsKKwljYXNlIE5FVERFVl9VTlJFR0lTVEVSOgorCQlzcGluX2xvY2soJmlmX2xpc3RfbG9jayk7CisJCWxpc3RfZGVsX3JjdSgmYmF0bWFuX2lmLT5saXN0KTsKKwkJc3Bpbl91bmxvY2soJmlmX2xpc3RfbG9jayk7CisKKwkJaGFyZGlmX3JlbW92ZV9pbnRlcmZhY2UoYmF0bWFuX2lmKTsKKwkJYnJlYWs7CisJY2FzZSBORVRERVZfQ0hBTkdFTVRVOgorCQlpZiAoYmF0bWFuX2lmLT5zb2Z0X2lmYWNlKQorCQkJdXBkYXRlX21pbl9tdHUoYmF0bWFuX2lmLT5zb2Z0X2lmYWNlKTsKKwkJYnJlYWs7CisJY2FzZSBORVRERVZfQ0hBTkdFQUREUjoKKwkJaWYgKGJhdG1hbl9pZi0+aWZfc3RhdHVzID09IElGX05PVF9JTl9VU0UpCisJCQlnb3RvIGhhcmRpZl9wdXQ7CisKKwkJY2hlY2tfa25vd25fbWFjX2FkZHIoYmF0bWFuX2lmLT5uZXRfZGV2KTsKKwkJdXBkYXRlX21hY19hZGRyZXNzZXMoYmF0bWFuX2lmKTsKKworCQliYXRfcHJpdiA9IG5ldGRldl9wcml2KGJhdG1hbl9pZi0+c29mdF9pZmFjZSk7CisJCWlmIChiYXRtYW5faWYgPT0gYmF0X3ByaXYtPnByaW1hcnlfaWYpCisJCQl1cGRhdGVfcHJpbWFyeV9hZGRyKGJhdF9wcml2KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfTsKKworaGFyZGlmX3B1dDoKKwlrcmVmX3B1dCgmYmF0bWFuX2lmLT5yZWZjb3VudCwgaGFyZGlmX2ZyZWVfcmVmKTsKK291dDoKKwlyZXR1cm4gTk9USUZZX0RPTkU7Cit9CisKKy8qIHJlY2VpdmUgYSBwYWNrZXQgd2l0aCB0aGUgYmF0bWFuIGV0aGVydHlwZSBjb21pbmcgb24gYSBoYXJkCisgKiBpbnRlcmZhY2UgKi8KK2ludCBiYXRtYW5fc2tiX3JlY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwlzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0eXBlLCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpCit7CisJc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdjsKKwlzdHJ1Y3QgYmF0bWFuX3BhY2tldCAqYmF0bWFuX3BhY2tldDsKKwlzdHJ1Y3QgYmF0bWFuX2lmICpiYXRtYW5faWY7CisJaW50IHJldDsKKworCWJhdG1hbl9pZiA9IGNvbnRhaW5lcl9vZihwdHlwZSwgc3RydWN0IGJhdG1hbl9pZiwgYmF0bWFuX2Fkdl9wdHlwZSk7CisJc2tiID0gc2tiX3NoYXJlX2NoZWNrKHNrYiwgR0ZQX0FUT01JQyk7CisKKwkvKiBza2Igd2FzIHJlbGVhc2VkIGJ5IHNrYl9zaGFyZV9jaGVjaygpICovCisJaWYgKCFza2IpCisJCWdvdG8gZXJyX291dDsKKworCS8qIHBhY2tldCBzaG91bGQgaG9sZCBhdCBsZWFzdCB0eXBlIGFuZCB2ZXJzaW9uICovCisJaWYgKHVubGlrZWx5KCFwc2tiX21heV9wdWxsKHNrYiwgMikpKQorCQlnb3RvIGVycl9mcmVlOworCisJLyogZXhwZWN0IGEgdmFsaWQgZXRoZXJuZXQgaGVhZGVyIGhlcmUuICovCisJaWYgKHVubGlrZWx5KHNrYi0+bWFjX2xlbiAhPSBzaXplb2Yoc3RydWN0IGV0aGhkcikKKwkJCQl8fCAhc2tiX21hY19oZWFkZXIoc2tiKSkpCisJCWdvdG8gZXJyX2ZyZWU7CisKKwlpZiAoIWJhdG1hbl9pZi0+c29mdF9pZmFjZSkKKwkJZ290byBlcnJfZnJlZTsKKworCWJhdF9wcml2ID0gbmV0ZGV2X3ByaXYoYmF0bWFuX2lmLT5zb2Z0X2lmYWNlKTsKKworCWlmIChhdG9taWNfcmVhZCgmYmF0X3ByaXYtPm1lc2hfc3RhdGUpICE9IE1FU0hfQUNUSVZFKQorCQlnb3RvIGVycl9mcmVlOworCisJLyogZGlzY2FyZCBmcmFtZXMgb24gbm90IGFjdGl2ZSBpbnRlcmZhY2VzICovCisJaWYgKGJhdG1hbl9pZi0+aWZfc3RhdHVzICE9IElGX0FDVElWRSkKKwkJZ290byBlcnJfZnJlZTsKKworCWJhdG1hbl9wYWNrZXQgPSAoc3RydWN0IGJhdG1hbl9wYWNrZXQgKilza2ItPmRhdGE7CisKKwlpZiAoYmF0bWFuX3BhY2tldC0+dmVyc2lvbiAhPSBDT01QQVRfVkVSU0lPTikgeworCQliYXRfZGJnKERCR19CQVRNQU4sIGJhdF9wcml2LAorCQkJIkRyb3AgcGFja2V0OiBpbmNvbXBhdGlibGUgYmF0bWFuIHZlcnNpb24gKCVpKVxuIiwKKwkJCWJhdG1hbl9wYWNrZXQtPnZlcnNpb24pOworCQlnb3RvIGVycl9mcmVlOworCX0KKworCS8qIGFsbCByZWNlaXZlIGhhbmRsZXJzIHJldHVybiB3aGV0aGVyIHRoZXkgcmVjZWl2ZWQgb3IgcmV1c2VkCisJICogdGhlIHN1cHBsaWVkIHNrYi4gaWYgbm90LCB3ZSBoYXZlIHRvIGZyZWUgdGhlIHNrYi4gKi8KKworCXN3aXRjaCAoYmF0bWFuX3BhY2tldC0+cGFja2V0X3R5cGUpIHsKKwkJLyogYmF0bWFuIG9yaWdpbmF0b3IgcGFja2V0ICovCisJY2FzZSBCQVRfUEFDS0VUOgorCQlyZXQgPSByZWN2X2JhdF9wYWNrZXQoc2tiLCBiYXRtYW5faWYpOworCQlicmVhazsKKworCQkvKiBiYXRtYW4gaWNtcCBwYWNrZXQgKi8KKwljYXNlIEJBVF9JQ01QOgorCQlyZXQgPSByZWN2X2ljbXBfcGFja2V0KHNrYiwgYmF0bWFuX2lmKTsKKwkJYnJlYWs7CisKKwkJLyogdW5pY2FzdCBwYWNrZXQgKi8KKwljYXNlIEJBVF9VTklDQVNUOgorCQlyZXQgPSByZWN2X3VuaWNhc3RfcGFja2V0KHNrYiwgYmF0bWFuX2lmKTsKKwkJYnJlYWs7CisKKwkJLyogZnJhZ21lbnRlZCB1bmljYXN0IHBhY2tldCAqLworCWNhc2UgQkFUX1VOSUNBU1RfRlJBRzoKKwkJcmV0ID0gcmVjdl91Y2FzdF9mcmFnX3BhY2tldChza2IsIGJhdG1hbl9pZik7CisJCWJyZWFrOworCisJCS8qIGJyb2FkY2FzdCBwYWNrZXQgKi8KKwljYXNlIEJBVF9CQ0FTVDoKKwkJcmV0ID0gcmVjdl9iY2FzdF9wYWNrZXQoc2tiLCBiYXRtYW5faWYpOworCQlicmVhazsKKworCQkvKiB2aXMgcGFja2V0ICovCisJY2FzZSBCQVRfVklTOgorCQlyZXQgPSByZWN2X3Zpc19wYWNrZXQoc2tiLCBiYXRtYW5faWYpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSBORVRfUlhfRFJPUDsKKwl9CisKKwlpZiAocmV0ID09IE5FVF9SWF9EUk9QKQorCQlrZnJlZV9za2Ioc2tiKTsKKworCS8qIHJldHVybiBORVRfUlhfU1VDQ0VTUyBpbiBhbnkgY2FzZSBhcyB3ZQorCSAqIG1vc3QgcHJvYmFibHkgZHJvcHBlZCB0aGUgcGFja2V0IGZvcgorCSAqIHJvdXRpbmctbG9naWNhbCByZWFzb25zLiAqLworCisJcmV0dXJuIE5FVF9SWF9TVUNDRVNTOworCitlcnJfZnJlZToKKwlrZnJlZV9za2Ioc2tiKTsKK2Vycl9vdXQ6CisJcmV0dXJuIE5FVF9SWF9EUk9QOworfQorCitzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgaGFyZF9pZl9ub3RpZmllciA9IHsKKwkubm90aWZpZXJfY2FsbCA9IGhhcmRfaWZfZXZlbnQsCit9OwpkaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuaCBiL25ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBlYzNiOAotLS0gL2Rldi9udWxsCisrKyBiL25ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmgKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDEwIEIuQS5ULk0uQS5OLiBjb250cmlidXRvcnM6CisgKgorICogTWFyZWsgTGluZG5lciwgU2ltb24gV3VuZGVybGljaAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSwgVVNBCisgKgorICovCisKKyNpZm5kZWYgX05FVF9CQVRNQU5fQURWX0hBUkRfSU5URVJGQUNFX0hfCisjZGVmaW5lIF9ORVRfQkFUTUFOX0FEVl9IQVJEX0lOVEVSRkFDRV9IXworCisjZGVmaW5lIElGX05PVF9JTl9VU0UgMAorI2RlZmluZSBJRl9UT19CRV9SRU1PVkVEIDEKKyNkZWZpbmUgSUZfSU5BQ1RJVkUgMgorI2RlZmluZSBJRl9BQ1RJVkUgMworI2RlZmluZSBJRl9UT19CRV9BQ1RJVkFURUQgNAorI2RlZmluZSBJRl9JX1dBTlRfWU9VIDUKKworZXh0ZXJuIHN0cnVjdCBub3RpZmllcl9ibG9jayBoYXJkX2lmX25vdGlmaWVyOworCitzdHJ1Y3QgYmF0bWFuX2lmICpnZXRfYmF0bWFuX2lmX2J5X25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2Rldik7CitpbnQgaGFyZGlmX2VuYWJsZV9pbnRlcmZhY2Uoc3RydWN0IGJhdG1hbl9pZiAqYmF0bWFuX2lmLCBjaGFyICppZmFjZV9uYW1lKTsKK3ZvaWQgaGFyZGlmX2Rpc2FibGVfaW50ZXJmYWNlKHN0cnVjdCBiYXRtYW5faWYgKmJhdG1hbl9pZik7Cit2b2lkIGhhcmRpZl9yZW1vdmVfaW50ZXJmYWNlcyh2b2lkKTsKK2ludCBiYXRtYW5fc2tiX3JlY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCXN0cnVjdCBwYWNrZXRfdHlwZSAqcHR5cGUsCisJCQkJc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KTsKK2ludCBoYXJkaWZfbWluX210dShzdHJ1Y3QgbmV0X2RldmljZSAqc29mdF9pZmFjZSk7Cit2b2lkIHVwZGF0ZV9taW5fbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpzb2Z0X2lmYWNlKTsKKworc3RhdGljIGlubGluZSB2b2lkIGhhcmRpZl9mcmVlX3JlZihzdHJ1Y3Qga3JlZiAqcmVmY291bnQpCit7CisJc3RydWN0IGJhdG1hbl9pZiAqYmF0bWFuX2lmOworCisJYmF0bWFuX2lmID0gY29udGFpbmVyX29mKHJlZmNvdW50LCBzdHJ1Y3QgYmF0bWFuX2lmLCByZWZjb3VudCk7CisJa2ZyZWUoYmF0bWFuX2lmKTsKK30KKworI2VuZGlmIC8qIF9ORVRfQkFUTUFOX0FEVl9IQVJEX0lOVEVSRkFDRV9IXyAqLwpkaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvaGFzaC5jIGIvbmV0L2JhdG1hbi1hZHYvaGFzaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2ZTYyM2UKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvYmF0bWFuLWFkdi9oYXNoLmMKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDEwIEIuQS5ULk0uQS5OLiBjb250cmlidXRvcnM6CisgKgorICogU2ltb24gV3VuZGVybGljaCwgTWFyZWsgTGluZG5lcgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSwgVVNBCisgKgorICovCisKKyNpbmNsdWRlICJtYWluLmgiCisjaW5jbHVkZSAiaGFzaC5oIgorCisvKiBjbGVhcnMgdGhlIGhhc2ggKi8KK3N0YXRpYyB2b2lkIGhhc2hfaW5pdChzdHJ1Y3QgaGFzaHRhYmxlX3QgKmhhc2gpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwIDsgaSA8IGhhc2gtPnNpemU7IGkrKykKKwkJSU5JVF9ITElTVF9IRUFEKCZoYXNoLT50YWJsZVtpXSk7Cit9CisKKy8qIGZyZWUgb25seSB0aGUgaGFzaHRhYmxlIGFuZCB0aGUgaGFzaCBpdHNlbGYuICovCit2b2lkIGhhc2hfZGVzdHJveShzdHJ1Y3QgaGFzaHRhYmxlX3QgKmhhc2gpCit7CisJa2ZyZWUoaGFzaC0+dGFibGUpOworCWtmcmVlKGhhc2gpOworfQorCisvKiBhbGxvY2F0ZXMgYW5kIGNsZWFycyB0aGUgaGFzaCAqLworc3RydWN0IGhhc2h0YWJsZV90ICpoYXNoX25ldyhpbnQgc2l6ZSkKK3sKKwlzdHJ1Y3QgaGFzaHRhYmxlX3QgKmhhc2g7CisKKwloYXNoID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGhhc2h0YWJsZV90KSAsIEdGUF9BVE9NSUMpOworCisJaWYgKCFoYXNoKQorCQlyZXR1cm4gTlVMTDsKKworCWhhc2gtPnNpemUgPSBzaXplOworCWhhc2gtPnRhYmxlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGVsZW1lbnRfdCAqKSAqIHNpemUsIEdGUF9BVE9NSUMpOworCisJaWYgKCFoYXNoLT50YWJsZSkgeworCQlrZnJlZShoYXNoKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaGFzaF9pbml0KGhhc2gpOworCisJcmV0dXJuIGhhc2g7Cit9CmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9oYXNoLmggYi9uZXQvYmF0bWFuLWFkdi9oYXNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDkyMTZhZAotLS0gL2Rldi9udWxsCisrKyBiL25ldC9iYXRtYW4tYWR2L2hhc2guaApAQCAtMCwwICsxLDE3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDEwIEIuQS5ULk0uQS5OLiBjb250cmlidXRvcnM6CisgKgorICogU2ltb24gV3VuZGVybGljaCwgTWFyZWsgTGluZG5lcgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSwgVVNBCisgKgorICovCisKKyNpZm5kZWYgX05FVF9CQVRNQU5fQURWX0hBU0hfSF8KKyNkZWZpbmUgX05FVF9CQVRNQU5fQURWX0hBU0hfSF8KKworI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKworLyogY2FsbGJhY2sgdG8gYSBjb21wYXJlIGZ1bmN0aW9uLiAgc2hvdWxkCisgKiBjb21wYXJlIDIgZWxlbWVudCBkYXRhcyBmb3IgdGhlaXIga2V5cywKKyAqIHJldHVybiAwIGlmIHNhbWUgYW5kIG5vdCAwIGlmIG5vdAorICogc2FtZSAqLwordHlwZWRlZiBpbnQgKCpoYXNoZGF0YV9jb21wYXJlX2NiKSh2b2lkICosIHZvaWQgKik7CisKKy8qIHRoZSBoYXNoZnVuY3Rpb24sIHNob3VsZCByZXR1cm4gYW4gaW5kZXgKKyAqIGJhc2VkIG9uIHRoZSBrZXkgaW4gdGhlIGRhdGEgb2YgdGhlIGZpcnN0CisgKiBhcmd1bWVudCBhbmQgdGhlIHNpemUgdGhlIHNlY29uZCAqLwordHlwZWRlZiBpbnQgKCpoYXNoZGF0YV9jaG9vc2VfY2IpKHZvaWQgKiwgaW50KTsKK3R5cGVkZWYgdm9pZCAoKmhhc2hkYXRhX2ZyZWVfY2IpKHZvaWQgKiwgdm9pZCAqKTsKKworc3RydWN0IGVsZW1lbnRfdCB7CisJdm9pZCAqZGF0YTsJCS8qIHBvaW50ZXIgdG8gdGhlIGRhdGEgKi8KKwlzdHJ1Y3QgaGxpc3Rfbm9kZSBobGlzdDsJLyogYnVja2V0IGxpc3QgcG9pbnRlciAqLworfTsKKworc3RydWN0IGhhc2h0YWJsZV90IHsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqdGFibGU7ICAgLyogdGhlIGhhc2h0YWJsZSBpdHNlbGYsIHdpdGggdGhlIGJ1Y2tldHMgKi8KKwlpbnQgc2l6ZTsJCSAgICAvKiBzaXplIG9mIGhhc2h0YWJsZSAqLworfTsKKworLyogYWxsb2NhdGVzIGFuZCBjbGVhcnMgdGhlIGhhc2ggKi8KK3N0cnVjdCBoYXNodGFibGVfdCAqaGFzaF9uZXcoaW50IHNpemUpOworCisvKiByZW1vdmUgZWxlbWVudCBpZiB5b3UgYWxyZWFkeSBmb3VuZCB0aGUgZWxlbWVudCB5b3Ugd2FudCB0byBkZWxldGUgYW5kIGRvbid0CisgKiBuZWVkIHRoZSBvdmVyaGVhZCB0byBmaW5kIGl0IGFnYWluIHdpdGggaGFzaF9yZW1vdmUoKS4gIEJ1dCB1c3VhbGx5LCB5b3UKKyAqIGRvbid0IHdhbnQgdG8gdXNlIHRoaXMgZnVuY3Rpb24sIGFzIGl0IGZpZGRsZXMgd2l0aCBoYXNoLWludGVybmFscy4gKi8KK3ZvaWQgKmhhc2hfcmVtb3ZlX2VsZW1lbnQoc3RydWN0IGhhc2h0YWJsZV90ICpoYXNoLCBzdHJ1Y3QgZWxlbWVudF90ICplbGVtKTsKKworLyogZnJlZSBvbmx5IHRoZSBoYXNodGFibGUgYW5kIHRoZSBoYXNoIGl0c2VsZi4gKi8KK3ZvaWQgaGFzaF9kZXN0cm95KHN0cnVjdCBoYXNodGFibGVfdCAqaGFzaCk7CisKKy8qIHJlbW92ZSB0aGUgaGFzaCBzdHJ1Y3R1cmUuIGlmIGhhc2hkYXRhX2ZyZWVfY2IgIT0gTlVMTCwgdGhpcyBmdW5jdGlvbiB3aWxsIGJlCisgKiBjYWxsZWQgdG8gcmVtb3ZlIHRoZSBlbGVtZW50cyBpbnNpZGUgb2YgdGhlIGhhc2guICBpZiB5b3UgZG9uJ3QgcmVtb3ZlIHRoZQorICogZWxlbWVudHMsIG1lbW9yeSBtaWdodCBiZSBsZWFrZWQuICovCitzdGF0aWMgaW5saW5lIHZvaWQgaGFzaF9kZWxldGUoc3RydWN0IGhhc2h0YWJsZV90ICpoYXNoLAorCQkJICAgICAgIGhhc2hkYXRhX2ZyZWVfY2IgZnJlZV9jYiwgdm9pZCAqYXJnKQoreworCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkOworCXN0cnVjdCBobGlzdF9ub2RlICp3YWxrLCAqc2FmZTsKKwlzdHJ1Y3QgZWxlbWVudF90ICpidWNrZXQ7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaGFzaC0+c2l6ZTsgaSsrKSB7CisJCWhlYWQgPSAmaGFzaC0+dGFibGVbaV07CisKKwkJaGxpc3RfZm9yX2VhY2hfc2FmZSh3YWxrLCBzYWZlLCBoZWFkKSB7CisJCQlidWNrZXQgPSBobGlzdF9lbnRyeSh3YWxrLCBzdHJ1Y3QgZWxlbWVudF90LCBobGlzdCk7CisJCQlpZiAoZnJlZV9jYikKKwkJCQlmcmVlX2NiKGJ1Y2tldC0+ZGF0YSwgYXJnKTsKKworCQkJaGxpc3RfZGVsKHdhbGspOworCQkJa2ZyZWUoYnVja2V0KTsKKwkJfQorCX0KKworCWhhc2hfZGVzdHJveShoYXNoKTsKK30KKworLyogYWRkcyBkYXRhIHRvIHRoZSBoYXNodGFibGUuIHJldHVybnMgMCBvbiBzdWNjZXNzLCAtMSBvbiBlcnJvciAqLworc3RhdGljIGlubGluZSBpbnQgaGFzaF9hZGQoc3RydWN0IGhhc2h0YWJsZV90ICpoYXNoLAorCQkJICAgaGFzaGRhdGFfY29tcGFyZV9jYiBjb21wYXJlLAorCQkJICAgaGFzaGRhdGFfY2hvb3NlX2NiIGNob29zZSwgdm9pZCAqZGF0YSkKK3sKKwlpbnQgaW5kZXg7CisJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7CisJc3RydWN0IGhsaXN0X25vZGUgKndhbGssICpzYWZlOworCXN0cnVjdCBlbGVtZW50X3QgKmJ1Y2tldDsKKworCWlmICghaGFzaCkKKwkJcmV0dXJuIC0xOworCisJaW5kZXggPSBjaG9vc2UoZGF0YSwgaGFzaC0+c2l6ZSk7CisJaGVhZCA9ICZoYXNoLT50YWJsZVtpbmRleF07CisKKwlobGlzdF9mb3JfZWFjaF9zYWZlKHdhbGssIHNhZmUsIGhlYWQpIHsKKwkJYnVja2V0ID0gaGxpc3RfZW50cnkod2Fsaywgc3RydWN0IGVsZW1lbnRfdCwgaGxpc3QpOworCQlpZiAoY29tcGFyZShidWNrZXQtPmRhdGEsIGRhdGEpKQorCQkJcmV0dXJuIC0xOworCX0KKworCS8qIG5vIGR1cGxpY2F0ZSBmb3VuZCBpbiBsaXN0LCBhZGQgbmV3IGVsZW1lbnQgKi8KKwlidWNrZXQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZWxlbWVudF90KSwgR0ZQX0FUT01JQyk7CisKKwlpZiAoIWJ1Y2tldCkKKwkJcmV0dXJuIC0xOworCisJYnVja2V0LT5kYXRhID0gZGF0YTsKKwlobGlzdF9hZGRfaGVhZCgmYnVja2V0LT5obGlzdCwgaGVhZCk7CisKKwlyZXR1cm4gMDsKK30KKworLyogcmVtb3ZlcyBkYXRhIGZyb20gaGFzaCwgaWYgZm91bmQuIHJldHVybnMgcG9pbnRlciBkbyBkYXRhIG9uIHN1Y2Nlc3MsIHNvIHlvdQorICogY2FuIHJlbW92ZSB0aGUgdXNlZCBzdHJ1Y3R1cmUgeW91cnNlbGYsIG9yIE5VTEwgb24gZXJyb3IgLiAgZGF0YSBjb3VsZCBiZSB0aGUKKyAqIHN0cnVjdHVyZSB5b3UgdXNlIHdpdGgganVzdCB0aGUga2V5IGZpbGxlZCwgd2UganVzdCBuZWVkIHRoZSBrZXkgZm9yCisgKiBjb21wYXJpbmcuICovCitzdGF0aWMgaW5saW5lIHZvaWQgKmhhc2hfcmVtb3ZlKHN0cnVjdCBoYXNodGFibGVfdCAqaGFzaCwKKwkJCQloYXNoZGF0YV9jb21wYXJlX2NiIGNvbXBhcmUsCisJCQkJaGFzaGRhdGFfY2hvb3NlX2NiIGNob29zZSwgdm9pZCAqZGF0YSkKK3sKKwlzaXplX3QgaW5kZXg7CisJc3RydWN0IGhsaXN0X25vZGUgKndhbGs7CisJc3RydWN0IGVsZW1lbnRfdCAqYnVja2V0OworCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkOworCXZvaWQgKmRhdGFfc2F2ZTsKKworCWluZGV4ID0gY2hvb3NlKGRhdGEsIGhhc2gtPnNpemUpOworCWhlYWQgPSAmaGFzaC0+dGFibGVbaW5kZXhdOworCisJaGxpc3RfZm9yX2VhY2hfZW50cnkoYnVja2V0LCB3YWxrLCBoZWFkLCBobGlzdCkgeworCQlpZiAoY29tcGFyZShidWNrZXQtPmRhdGEsIGRhdGEpKSB7CisJCQlkYXRhX3NhdmUgPSBidWNrZXQtPmRhdGE7CisJCQlobGlzdF9kZWwod2Fsayk7CisJCQlrZnJlZShidWNrZXQpOworCQkJcmV0dXJuIGRhdGFfc2F2ZTsKKwkJfQorCX0KKworCXJldHVybiBOVUxMOworfQorCisvKiBmaW5kcyBkYXRhLCBiYXNlZCBvbiB0aGUga2V5IGluIGtleWRhdGEuIHJldHVybnMgdGhlIGZvdW5kIGRhdGEgb24gc3VjY2VzcywKKyAqIG9yIE5VTEwgb24gZXJyb3IgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCAqaGFzaF9maW5kKHN0cnVjdCBoYXNodGFibGVfdCAqaGFzaCwKKwkJCSAgICAgIGhhc2hkYXRhX2NvbXBhcmVfY2IgY29tcGFyZSwKKwkJCSAgICAgIGhhc2hkYXRhX2Nob29zZV9jYiBjaG9vc2UsIHZvaWQgKmtleWRhdGEpCit7CisJaW50IGluZGV4OworCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkOworCXN0cnVjdCBobGlzdF9ub2RlICp3YWxrOworCXN0cnVjdCBlbGVtZW50X3QgKmJ1Y2tldDsKKworCWlmICghaGFzaCkKKwkJcmV0dXJuIE5VTEw7CisKKwlpbmRleCA9IGNob29zZShrZXlkYXRhICwgaGFzaC0+c2l6ZSk7CisJaGVhZCA9ICZoYXNoLT50YWJsZVtpbmRleF07CisKKwlobGlzdF9mb3JfZWFjaCh3YWxrLCBoZWFkKSB7CisJCWJ1Y2tldCA9IGhsaXN0X2VudHJ5KHdhbGssIHN0cnVjdCBlbGVtZW50X3QsIGhsaXN0KTsKKwkJaWYgKGNvbXBhcmUoYnVja2V0LT5kYXRhLCBrZXlkYXRhKSkKKwkJCXJldHVybiBidWNrZXQtPmRhdGE7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKKyNlbmRpZiAvKiBfTkVUX0JBVE1BTl9BRFZfSEFTSF9IXyAqLwpkaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvaWNtcF9zb2NrZXQuYyBiL25ldC9iYXRtYW4tYWR2L2ljbXBfc29ja2V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNmNmQ3ZgotLS0gL2Rldi9udWxsCisrKyBiL25ldC9iYXRtYW4tYWR2L2ljbXBfc29ja2V0LmMKQEAgLTAsMCArMSwzNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMCBCLkEuVC5NLkEuTi4gY29udHJpYnV0b3JzOgorICoKKyAqIE1hcmVrIExpbmRuZXIKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEsIFVTQQorICoKKyAqLworCisjaW5jbHVkZSAibWFpbi5oIgorI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSAiaWNtcF9zb2NrZXQuaCIKKyNpbmNsdWRlICJzZW5kLmgiCisjaW5jbHVkZSAidHlwZXMuaCIKKyNpbmNsdWRlICJoYXNoLmgiCisjaW5jbHVkZSAib3JpZ2luYXRvci5oIgorI2luY2x1ZGUgImhhcmQtaW50ZXJmYWNlLmgiCisKK3N0YXRpYyBzdHJ1Y3Qgc29ja2V0X2NsaWVudCAqc29ja2V0X2NsaWVudF9oYXNoWzI1Nl07CisKK3N0YXRpYyB2b2lkIGJhdF9zb2NrZXRfYWRkX3BhY2tldChzdHJ1Y3Qgc29ja2V0X2NsaWVudCAqc29ja2V0X2NsaWVudCwKKwkJCQkgIHN0cnVjdCBpY21wX3BhY2tldF9yciAqaWNtcF9wYWNrZXQsCisJCQkJICBzaXplX3QgaWNtcF9sZW4pOworCit2b2lkIGJhdF9zb2NrZXRfaW5pdCh2b2lkKQoreworCW1lbXNldChzb2NrZXRfY2xpZW50X2hhc2gsIDAsIHNpemVvZihzb2NrZXRfY2xpZW50X2hhc2gpKTsKK30KKworc3RhdGljIGludCBiYXRfc29ja2V0X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJdW5zaWduZWQgaW50IGk7CisJc3RydWN0IHNvY2tldF9jbGllbnQgKnNvY2tldF9jbGllbnQ7CisKKwlub25zZWVrYWJsZV9vcGVuKGlub2RlLCBmaWxlKTsKKworCXNvY2tldF9jbGllbnQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc29ja2V0X2NsaWVudCksIEdGUF9LRVJORUwpOworCisJaWYgKCFzb2NrZXRfY2xpZW50KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNvY2tldF9jbGllbnRfaGFzaCk7IGkrKykgeworCQlpZiAoIXNvY2tldF9jbGllbnRfaGFzaFtpXSkgeworCQkJc29ja2V0X2NsaWVudF9oYXNoW2ldID0gc29ja2V0X2NsaWVudDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGkgPT0gQVJSQVlfU0laRShzb2NrZXRfY2xpZW50X2hhc2gpKSB7CisJCXByX2VycigiRXJyb3IgLSBjYW4ndCBhZGQgYW5vdGhlciBwYWNrZXQgY2xpZW50OiAiCisJCSAgICAgICAibWF4aW11bSBudW1iZXIgb2YgY2xpZW50cyByZWFjaGVkXG4iKTsKKwkJa2ZyZWUoc29ja2V0X2NsaWVudCk7CisJCXJldHVybiAtRVhGVUxMOworCX0KKworCUlOSVRfTElTVF9IRUFEKCZzb2NrZXRfY2xpZW50LT5xdWV1ZV9saXN0KTsKKwlzb2NrZXRfY2xpZW50LT5xdWV1ZV9sZW4gPSAwOworCXNvY2tldF9jbGllbnQtPmluZGV4ID0gaTsKKwlzb2NrZXRfY2xpZW50LT5iYXRfcHJpdiA9IGlub2RlLT5pX3ByaXZhdGU7CisJc3Bpbl9sb2NrX2luaXQoJnNvY2tldF9jbGllbnQtPmxvY2spOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnNvY2tldF9jbGllbnQtPnF1ZXVlX3dhaXQpOworCisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gc29ja2V0X2NsaWVudDsKKworCWluY19tb2R1bGVfY291bnQoKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBiYXRfc29ja2V0X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHNvY2tldF9jbGllbnQgKnNvY2tldF9jbGllbnQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNvY2tldF9wYWNrZXQgKnNvY2tldF9wYWNrZXQ7CisJc3RydWN0IGxpc3RfaGVhZCAqbGlzdF9wb3MsICpsaXN0X3Bvc190bXA7CisKKwlzcGluX2xvY2tfYmgoJnNvY2tldF9jbGllbnQtPmxvY2spOworCisJLyogZm9yIGFsbCBwYWNrZXRzIGluIHRoZSBxdWV1ZSAuLi4gKi8KKwlsaXN0X2Zvcl9lYWNoX3NhZmUobGlzdF9wb3MsIGxpc3RfcG9zX3RtcCwgJnNvY2tldF9jbGllbnQtPnF1ZXVlX2xpc3QpIHsKKwkJc29ja2V0X3BhY2tldCA9IGxpc3RfZW50cnkobGlzdF9wb3MsCisJCQkJCSAgIHN0cnVjdCBzb2NrZXRfcGFja2V0LCBsaXN0KTsKKworCQlsaXN0X2RlbChsaXN0X3Bvcyk7CisJCWtmcmVlKHNvY2tldF9wYWNrZXQpOworCX0KKworCXNvY2tldF9jbGllbnRfaGFzaFtzb2NrZXRfY2xpZW50LT5pbmRleF0gPSBOVUxMOworCXNwaW5fdW5sb2NrX2JoKCZzb2NrZXRfY2xpZW50LT5sb2NrKTsKKworCWtmcmVlKHNvY2tldF9jbGllbnQpOworCWRlY19tb2R1bGVfY291bnQoKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCBiYXRfc29ja2V0X3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCisJCQkgICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IHNvY2tldF9jbGllbnQgKnNvY2tldF9jbGllbnQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNvY2tldF9wYWNrZXQgKnNvY2tldF9wYWNrZXQ7CisJc2l6ZV90IHBhY2tldF9sZW47CisJaW50IGVycm9yOworCisJaWYgKChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgJiYgKHNvY2tldF9jbGllbnQtPnF1ZXVlX2xlbiA9PSAwKSkKKwkJcmV0dXJuIC1FQUdBSU47CisKKwlpZiAoKCFidWYpIHx8IChjb3VudCA8IHNpemVvZihzdHJ1Y3QgaWNtcF9wYWNrZXQpKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIGJ1ZiwgY291bnQpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWVycm9yID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHNvY2tldF9jbGllbnQtPnF1ZXVlX3dhaXQsCisJCQkJCSBzb2NrZXRfY2xpZW50LT5xdWV1ZV9sZW4pOworCisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisKKwlzcGluX2xvY2tfYmgoJnNvY2tldF9jbGllbnQtPmxvY2spOworCisJc29ja2V0X3BhY2tldCA9IGxpc3RfZmlyc3RfZW50cnkoJnNvY2tldF9jbGllbnQtPnF1ZXVlX2xpc3QsCisJCQkJCSBzdHJ1Y3Qgc29ja2V0X3BhY2tldCwgbGlzdCk7CisJbGlzdF9kZWwoJnNvY2tldF9wYWNrZXQtPmxpc3QpOworCXNvY2tldF9jbGllbnQtPnF1ZXVlX2xlbi0tOworCisJc3Bpbl91bmxvY2tfYmgoJnNvY2tldF9jbGllbnQtPmxvY2spOworCisJZXJyb3IgPSBfX2NvcHlfdG9fdXNlcihidWYsICZzb2NrZXRfcGFja2V0LT5pY21wX3BhY2tldCwKKwkJCSAgICAgICBzb2NrZXRfcGFja2V0LT5pY21wX2xlbik7CisKKwlwYWNrZXRfbGVuID0gc29ja2V0X3BhY2tldC0+aWNtcF9sZW47CisJa2ZyZWUoc29ja2V0X3BhY2tldCk7CisKKwlpZiAoZXJyb3IpCisJCXJldHVybiAtRUZBVUxUOworCisJcmV0dXJuIHBhY2tldF9sZW47Cit9CisKK3N0YXRpYyBzc2l6ZV90IGJhdF9zb2NrZXRfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmLAorCQkJCXNpemVfdCBsZW4sIGxvZmZfdCAqb2ZmKQoreworCXN0cnVjdCBzb2NrZXRfY2xpZW50ICpzb2NrZXRfY2xpZW50ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYgPSBzb2NrZXRfY2xpZW50LT5iYXRfcHJpdjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBpY21wX3BhY2tldF9yciAqaWNtcF9wYWNrZXQ7CisKKwlzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGU7CisJc3RydWN0IGJhdG1hbl9pZiAqYmF0bWFuX2lmOworCXNpemVfdCBwYWNrZXRfbGVuID0gc2l6ZW9mKHN0cnVjdCBpY21wX3BhY2tldCk7CisJdWludDhfdCBkc3RhZGRyW0VUSF9BTEVOXTsKKworCWlmIChsZW4gPCBzaXplb2Yoc3RydWN0IGljbXBfcGFja2V0KSkgeworCQliYXRfZGJnKERCR19CQVRNQU4sIGJhdF9wcml2LAorCQkJIkVycm9yIC0gY2FuJ3Qgc2VuZCBwYWNrZXQgZnJvbSBjaGFyIGRldmljZTogIgorCQkJImludmFsaWQgcGFja2V0IHNpemVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoIWJhdF9wcml2LT5wcmltYXJ5X2lmKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmIChsZW4gPj0gc2l6ZW9mKHN0cnVjdCBpY21wX3BhY2tldF9ycikpCisJCXBhY2tldF9sZW4gPSBzaXplb2Yoc3RydWN0IGljbXBfcGFja2V0X3JyKTsKKworCXNrYiA9IGRldl9hbGxvY19za2IocGFja2V0X2xlbiArIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSk7CisJaWYgKCFza2IpCisJCXJldHVybiAtRU5PTUVNOworCisJc2tiX3Jlc2VydmUoc2tiLCBzaXplb2Yoc3RydWN0IGV0aGhkcikpOworCWljbXBfcGFja2V0ID0gKHN0cnVjdCBpY21wX3BhY2tldF9yciAqKXNrYl9wdXQoc2tiLCBwYWNrZXRfbGVuKTsKKworCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBidWZmLCBwYWNrZXRfbGVuKSkgeworCQlsZW4gPSAtRUZBVUxUOworCQlnb3RvIGZyZWVfc2tiOworCX0KKworCWlmIChfX2NvcHlfZnJvbV91c2VyKGljbXBfcGFja2V0LCBidWZmLCBwYWNrZXRfbGVuKSkgeworCQlsZW4gPSAtRUZBVUxUOworCQlnb3RvIGZyZWVfc2tiOworCX0KKworCWlmIChpY21wX3BhY2tldC0+cGFja2V0X3R5cGUgIT0gQkFUX0lDTVApIHsKKwkJYmF0X2RiZyhEQkdfQkFUTUFOLCBiYXRfcHJpdiwKKwkJCSJFcnJvciAtIGNhbid0IHNlbmQgcGFja2V0IGZyb20gY2hhciBkZXZpY2U6ICIKKwkJCSJnb3QgYm9ndXMgcGFja2V0IHR5cGUgKGV4cGVjdGVkOiBCQVRfSUNNUClcbiIpOworCQlsZW4gPSAtRUlOVkFMOworCQlnb3RvIGZyZWVfc2tiOworCX0KKworCWlmIChpY21wX3BhY2tldC0+bXNnX3R5cGUgIT0gRUNIT19SRVFVRVNUKSB7CisJCWJhdF9kYmcoREJHX0JBVE1BTiwgYmF0X3ByaXYsCisJCQkiRXJyb3IgLSBjYW4ndCBzZW5kIHBhY2tldCBmcm9tIGNoYXIgZGV2aWNlOiAiCisJCQkiZ290IGJvZ3VzIG1lc3NhZ2UgdHlwZSAoZXhwZWN0ZWQ6IEVDSE9fUkVRVUVTVClcbiIpOworCQlsZW4gPSAtRUlOVkFMOworCQlnb3RvIGZyZWVfc2tiOworCX0KKworCWljbXBfcGFja2V0LT51aWQgPSBzb2NrZXRfY2xpZW50LT5pbmRleDsKKworCWlmIChpY21wX3BhY2tldC0+dmVyc2lvbiAhPSBDT01QQVRfVkVSU0lPTikgeworCQlpY21wX3BhY2tldC0+bXNnX3R5cGUgPSBQQVJBTUVURVJfUFJPQkxFTTsKKwkJaWNtcF9wYWNrZXQtPnR0bCA9IENPTVBBVF9WRVJTSU9OOworCQliYXRfc29ja2V0X2FkZF9wYWNrZXQoc29ja2V0X2NsaWVudCwgaWNtcF9wYWNrZXQsIHBhY2tldF9sZW4pOworCQlnb3RvIGZyZWVfc2tiOworCX0KKworCWlmIChhdG9taWNfcmVhZCgmYmF0X3ByaXYtPm1lc2hfc3RhdGUpICE9IE1FU0hfQUNUSVZFKQorCQlnb3RvIGRzdF91bnJlYWNoOworCisJc3Bpbl9sb2NrX2JoKCZiYXRfcHJpdi0+b3JpZ19oYXNoX2xvY2spOworCW9yaWdfbm9kZSA9ICgoc3RydWN0IG9yaWdfbm9kZSAqKWhhc2hfZmluZChiYXRfcHJpdi0+b3JpZ19oYXNoLAorCQkJCQkJICAgY29tcGFyZV9vcmlnLCBjaG9vc2Vfb3JpZywKKwkJCQkJCSAgIGljbXBfcGFja2V0LT5kc3QpKTsKKworCWlmICghb3JpZ19ub2RlKQorCQlnb3RvIHVubG9jazsKKworCWlmICghb3JpZ19ub2RlLT5yb3V0ZXIpCisJCWdvdG8gdW5sb2NrOworCisJYmF0bWFuX2lmID0gb3JpZ19ub2RlLT5yb3V0ZXItPmlmX2luY29taW5nOworCW1lbWNweShkc3RhZGRyLCBvcmlnX25vZGUtPnJvdXRlci0+YWRkciwgRVRIX0FMRU4pOworCisJc3Bpbl91bmxvY2tfYmgoJmJhdF9wcml2LT5vcmlnX2hhc2hfbG9jayk7CisKKwlpZiAoIWJhdG1hbl9pZikKKwkJZ290byBkc3RfdW5yZWFjaDsKKworCWlmIChiYXRtYW5faWYtPmlmX3N0YXR1cyAhPSBJRl9BQ1RJVkUpCisJCWdvdG8gZHN0X3VucmVhY2g7CisKKwltZW1jcHkoaWNtcF9wYWNrZXQtPm9yaWcsCisJICAgICAgIGJhdF9wcml2LT5wcmltYXJ5X2lmLT5uZXRfZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCisJaWYgKHBhY2tldF9sZW4gPT0gc2l6ZW9mKHN0cnVjdCBpY21wX3BhY2tldF9ycikpCisJCW1lbWNweShpY21wX3BhY2tldC0+cnIsIGJhdG1hbl9pZi0+bmV0X2Rldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKworCisJc2VuZF9za2JfcGFja2V0KHNrYiwgYmF0bWFuX2lmLCBkc3RhZGRyKTsKKworCWdvdG8gb3V0OworCit1bmxvY2s6CisJc3Bpbl91bmxvY2tfYmgoJmJhdF9wcml2LT5vcmlnX2hhc2hfbG9jayk7Citkc3RfdW5yZWFjaDoKKwlpY21wX3BhY2tldC0+bXNnX3R5cGUgPSBERVNUSU5BVElPTl9VTlJFQUNIQUJMRTsKKwliYXRfc29ja2V0X2FkZF9wYWNrZXQoc29ja2V0X2NsaWVudCwgaWNtcF9wYWNrZXQsIHBhY2tldF9sZW4pOworZnJlZV9za2I6CisJa2ZyZWVfc2tiKHNrYik7CitvdXQ6CisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBiYXRfc29ja2V0X3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQpCit7CisJc3RydWN0IHNvY2tldF9jbGllbnQgKnNvY2tldF9jbGllbnQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlwb2xsX3dhaXQoZmlsZSwgJnNvY2tldF9jbGllbnQtPnF1ZXVlX3dhaXQsIHdhaXQpOworCisJaWYgKHNvY2tldF9jbGllbnQtPnF1ZXVlX2xlbiA+IDApCisJCXJldHVybiBQT0xMSU4gfCBQT0xMUkROT1JNOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZvcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm9wZW4gPSBiYXRfc29ja2V0X29wZW4sCisJLnJlbGVhc2UgPSBiYXRfc29ja2V0X3JlbGVhc2UsCisJLnJlYWQgPSBiYXRfc29ja2V0X3JlYWQsCisJLndyaXRlID0gYmF0X3NvY2tldF93cml0ZSwKKwkucG9sbCA9IGJhdF9zb2NrZXRfcG9sbCwKKwkubGxzZWVrID0gbm9fbGxzZWVrLAorfTsKKworaW50IGJhdF9zb2NrZXRfc2V0dXAoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdikKK3sKKwlzdHJ1Y3QgZGVudHJ5ICpkOworCisJaWYgKCFiYXRfcHJpdi0+ZGVidWdfZGlyKQorCQlnb3RvIGVycjsKKworCWQgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKElDTVBfU09DS0VULCBTX0lGUkVHIHwgU19JV1VTUiB8IFNfSVJVU1IsCisJCQkJYmF0X3ByaXYtPmRlYnVnX2RpciwgYmF0X3ByaXYsICZmb3BzKTsKKwlpZiAoZCkKKwkJZ290byBlcnI7CisKKwlyZXR1cm4gMDsKKworZXJyOgorCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBiYXRfc29ja2V0X2FkZF9wYWNrZXQoc3RydWN0IHNvY2tldF9jbGllbnQgKnNvY2tldF9jbGllbnQsCisJCQkJICBzdHJ1Y3QgaWNtcF9wYWNrZXRfcnIgKmljbXBfcGFja2V0LAorCQkJCSAgc2l6ZV90IGljbXBfbGVuKQoreworCXN0cnVjdCBzb2NrZXRfcGFja2V0ICpzb2NrZXRfcGFja2V0OworCisJc29ja2V0X3BhY2tldCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzb2NrZXRfcGFja2V0KSwgR0ZQX0FUT01JQyk7CisKKwlpZiAoIXNvY2tldF9wYWNrZXQpCisJCXJldHVybjsKKworCUlOSVRfTElTVF9IRUFEKCZzb2NrZXRfcGFja2V0LT5saXN0KTsKKwltZW1jcHkoJnNvY2tldF9wYWNrZXQtPmljbXBfcGFja2V0LCBpY21wX3BhY2tldCwgaWNtcF9sZW4pOworCXNvY2tldF9wYWNrZXQtPmljbXBfbGVuID0gaWNtcF9sZW47CisKKwlzcGluX2xvY2tfYmgoJnNvY2tldF9jbGllbnQtPmxvY2spOworCisJLyogd2hpbGUgd2FpdGluZyBmb3IgdGhlIGxvY2sgdGhlIHNvY2tldF9jbGllbnQgY291bGQgaGF2ZSBiZWVuCisJICogZGVsZXRlZCAqLworCWlmICghc29ja2V0X2NsaWVudF9oYXNoW2ljbXBfcGFja2V0LT51aWRdKSB7CisJCXNwaW5fdW5sb2NrX2JoKCZzb2NrZXRfY2xpZW50LT5sb2NrKTsKKwkJa2ZyZWUoc29ja2V0X3BhY2tldCk7CisJCXJldHVybjsKKwl9CisKKwlsaXN0X2FkZF90YWlsKCZzb2NrZXRfcGFja2V0LT5saXN0LCAmc29ja2V0X2NsaWVudC0+cXVldWVfbGlzdCk7CisJc29ja2V0X2NsaWVudC0+cXVldWVfbGVuKys7CisKKwlpZiAoc29ja2V0X2NsaWVudC0+cXVldWVfbGVuID4gMTAwKSB7CisJCXNvY2tldF9wYWNrZXQgPSBsaXN0X2ZpcnN0X2VudHJ5KCZzb2NrZXRfY2xpZW50LT5xdWV1ZV9saXN0LAorCQkJCQkJIHN0cnVjdCBzb2NrZXRfcGFja2V0LCBsaXN0KTsKKworCQlsaXN0X2RlbCgmc29ja2V0X3BhY2tldC0+bGlzdCk7CisJCWtmcmVlKHNvY2tldF9wYWNrZXQpOworCQlzb2NrZXRfY2xpZW50LT5xdWV1ZV9sZW4tLTsKKwl9CisKKwlzcGluX3VubG9ja19iaCgmc29ja2V0X2NsaWVudC0+bG9jayk7CisKKwl3YWtlX3VwKCZzb2NrZXRfY2xpZW50LT5xdWV1ZV93YWl0KTsKK30KKwordm9pZCBiYXRfc29ja2V0X3JlY2VpdmVfcGFja2V0KHN0cnVjdCBpY21wX3BhY2tldF9yciAqaWNtcF9wYWNrZXQsCisJCQkgICAgICAgc2l6ZV90IGljbXBfbGVuKQoreworCXN0cnVjdCBzb2NrZXRfY2xpZW50ICpoYXNoID0gc29ja2V0X2NsaWVudF9oYXNoW2ljbXBfcGFja2V0LT51aWRdOworCisJaWYgKGhhc2gpCisJCWJhdF9zb2NrZXRfYWRkX3BhY2tldChoYXNoLCBpY21wX3BhY2tldCwgaWNtcF9sZW4pOworfQpkaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvaWNtcF9zb2NrZXQuaCBiL25ldC9iYXRtYW4tYWR2L2ljbXBfc29ja2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY5YjM0OAotLS0gL2Rldi9udWxsCisrKyBiL25ldC9iYXRtYW4tYWR2L2ljbXBfc29ja2V0LmgKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDEwIEIuQS5ULk0uQS5OLiBjb250cmlidXRvcnM6CisgKgorICogTWFyZWsgTGluZG5lcgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSwgVVNBCisgKgorICovCisKKyNpZm5kZWYgX05FVF9CQVRNQU5fQURWX0lDTVBfU09DS0VUX0hfCisjZGVmaW5lIF9ORVRfQkFUTUFOX0FEVl9JQ01QX1NPQ0tFVF9IXworCisjaW5jbHVkZSAidHlwZXMuaCIKKworI2RlZmluZSBJQ01QX1NPQ0tFVCAic29ja2V0IgorCit2b2lkIGJhdF9zb2NrZXRfaW5pdCh2b2lkKTsKK2ludCBiYXRfc29ja2V0X3NldHVwKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYpOwordm9pZCBiYXRfc29ja2V0X3JlY2VpdmVfcGFja2V0KHN0cnVjdCBpY21wX3BhY2tldF9yciAqaWNtcF9wYWNrZXQsCisJCQkgICAgICAgc2l6ZV90IGljbXBfbGVuKTsKKworI2VuZGlmIC8qIF9ORVRfQkFUTUFOX0FEVl9JQ01QX1NPQ0tFVF9IXyAqLwpkaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvbWFpbi5jIGIvbmV0L2JhdG1hbi1hZHYvbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4MjdmNmEKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvYmF0bWFuLWFkdi9tYWluLmMKQEAgLTAsMCArMSwxODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMCBCLkEuVC5NLkEuTi4gY29udHJpYnV0b3JzOgorICoKKyAqIE1hcmVrIExpbmRuZXIsIFNpbW9uIFd1bmRlcmxpY2gKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEsIFVTQQorICoKKyAqLworCisjaW5jbHVkZSAibWFpbi5oIgorI2luY2x1ZGUgImJhdF9zeXNmcy5oIgorI2luY2x1ZGUgImJhdF9kZWJ1Z2ZzLmgiCisjaW5jbHVkZSAicm91dGluZy5oIgorI2luY2x1ZGUgInNlbmQuaCIKKyNpbmNsdWRlICJvcmlnaW5hdG9yLmgiCisjaW5jbHVkZSAic29mdC1pbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJpY21wX3NvY2tldC5oIgorI2luY2x1ZGUgInRyYW5zbGF0aW9uLXRhYmxlLmgiCisjaW5jbHVkZSAiaGFyZC1pbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJnYXRld2F5X2NsaWVudC5oIgorI2luY2x1ZGUgInR5cGVzLmgiCisjaW5jbHVkZSAidmlzLmgiCisjaW5jbHVkZSAiaGFzaC5oIgorCitzdHJ1Y3QgbGlzdF9oZWFkIGlmX2xpc3Q7CisKK3Vuc2lnbmVkIGNoYXIgYnJvYWRjYXN0X2FkZHJbXSA9IHsweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmfTsKKworc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmJhdF9ldmVudF93b3JrcXVldWU7CisKK3N0YXRpYyBpbnQgX19pbml0IGJhdG1hbl9pbml0KHZvaWQpCit7CisJSU5JVF9MSVNUX0hFQUQoJmlmX2xpc3QpOworCisJLyogdGhlIG5hbWUgc2hvdWxkIG5vdCBiZSBsb25nZXIgdGhhbiAxMCBjaGFycyAtIHNlZQorCSAqIGh0dHA6Ly9sd24ubmV0L0FydGljbGVzLzIzNjM0LyAqLworCWJhdF9ldmVudF93b3JrcXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgiYmF0X2V2ZW50cyIpOworCisJaWYgKCFiYXRfZXZlbnRfd29ya3F1ZXVlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWJhdF9zb2NrZXRfaW5pdCgpOworCWRlYnVnZnNfaW5pdCgpOworCisJcmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZoYXJkX2lmX25vdGlmaWVyKTsKKworCXByX2luZm8oIkIuQS5ULk0uQS5OLiBhZHZhbmNlZCAlcyVzIChjb21wYXRpYmlsaXR5IHZlcnNpb24gJWkpICIKKwkJImxvYWRlZFxuIiwgU09VUkNFX1ZFUlNJT04sIFJFVklTSU9OX1ZFUlNJT05fU1RSLAorCQlDT01QQVRfVkVSU0lPTik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGJhdG1hbl9leGl0KHZvaWQpCit7CisJZGVidWdmc19kZXN0cm95KCk7CisJdW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJmhhcmRfaWZfbm90aWZpZXIpOworCWhhcmRpZl9yZW1vdmVfaW50ZXJmYWNlcygpOworCisJZmx1c2hfd29ya3F1ZXVlKGJhdF9ldmVudF93b3JrcXVldWUpOworCWRlc3Ryb3lfd29ya3F1ZXVlKGJhdF9ldmVudF93b3JrcXVldWUpOworCWJhdF9ldmVudF93b3JrcXVldWUgPSBOVUxMOworCisJcmN1X2JhcnJpZXIoKTsKK30KKworaW50IG1lc2hfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqc29mdF9pZmFjZSkKK3sKKwlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYoc29mdF9pZmFjZSk7CisKKwlzcGluX2xvY2tfaW5pdCgmYmF0X3ByaXYtPm9yaWdfaGFzaF9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmYmF0X3ByaXYtPmZvcndfYmF0X2xpc3RfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmJhdF9wcml2LT5mb3J3X2JjYXN0X2xpc3RfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmJhdF9wcml2LT5obmFfbGhhc2hfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmJhdF9wcml2LT5obmFfZ2hhc2hfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmJhdF9wcml2LT5nd19saXN0X2xvY2spOworCXNwaW5fbG9ja19pbml0KCZiYXRfcHJpdi0+dmlzX2hhc2hfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmJhdF9wcml2LT52aXNfbGlzdF9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmYmF0X3ByaXYtPnNvZnRpZl9uZWlnaF9sb2NrKTsKKworCUlOSVRfSExJU1RfSEVBRCgmYmF0X3ByaXYtPmZvcndfYmF0X2xpc3QpOworCUlOSVRfSExJU1RfSEVBRCgmYmF0X3ByaXYtPmZvcndfYmNhc3RfbGlzdCk7CisJSU5JVF9ITElTVF9IRUFEKCZiYXRfcHJpdi0+Z3dfbGlzdCk7CisJSU5JVF9ITElTVF9IRUFEKCZiYXRfcHJpdi0+c29mdGlmX25laWdoX2xpc3QpOworCisJaWYgKG9yaWdpbmF0b3JfaW5pdChiYXRfcHJpdikgPCAxKQorCQlnb3RvIGVycjsKKworCWlmIChobmFfbG9jYWxfaW5pdChiYXRfcHJpdikgPCAxKQorCQlnb3RvIGVycjsKKworCWlmIChobmFfZ2xvYmFsX2luaXQoYmF0X3ByaXYpIDwgMSkKKwkJZ290byBlcnI7CisKKwlobmFfbG9jYWxfYWRkKHNvZnRfaWZhY2UsIHNvZnRfaWZhY2UtPmRldl9hZGRyKTsKKworCWlmICh2aXNfaW5pdChiYXRfcHJpdikgPCAxKQorCQlnb3RvIGVycjsKKworCWF0b21pY19zZXQoJmJhdF9wcml2LT5tZXNoX3N0YXRlLCBNRVNIX0FDVElWRSk7CisJZ290byBlbmQ7CisKK2VycjoKKwlwcl9lcnIoIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIG1lc2ggaW5mb3JtYXRpb24gc3RydWN0dXJlczogIgorCSAgICAgICAib3V0IG9mIG1lbSA/XG4iKTsKKwltZXNoX2ZyZWUoc29mdF9pZmFjZSk7CisJcmV0dXJuIC0xOworCitlbmQ6CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgbWVzaF9mcmVlKHN0cnVjdCBuZXRfZGV2aWNlICpzb2Z0X2lmYWNlKQoreworCXN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYgPSBuZXRkZXZfcHJpdihzb2Z0X2lmYWNlKTsKKworCWF0b21pY19zZXQoJmJhdF9wcml2LT5tZXNoX3N0YXRlLCBNRVNIX0RFQUNUSVZBVElORyk7CisKKwlwdXJnZV9vdXRzdGFuZGluZ19wYWNrZXRzKGJhdF9wcml2LCBOVUxMKTsKKworCXZpc19xdWl0KGJhdF9wcml2KTsKKworCWd3X25vZGVfcHVyZ2UoYmF0X3ByaXYpOworCW9yaWdpbmF0b3JfZnJlZShiYXRfcHJpdik7CisKKwlobmFfbG9jYWxfZnJlZShiYXRfcHJpdik7CisJaG5hX2dsb2JhbF9mcmVlKGJhdF9wcml2KTsKKworCXNvZnRpZl9uZWlnaF9wdXJnZShiYXRfcHJpdik7CisKKwlhdG9taWNfc2V0KCZiYXRfcHJpdi0+bWVzaF9zdGF0ZSwgTUVTSF9JTkFDVElWRSk7Cit9CisKK3ZvaWQgaW5jX21vZHVsZV9jb3VudCh2b2lkKQoreworCXRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKTsKK30KKwordm9pZCBkZWNfbW9kdWxlX2NvdW50KHZvaWQpCit7CisJbW9kdWxlX3B1dChUSElTX01PRFVMRSk7Cit9CisKK2ludCBpc19teV9tYWModWludDhfdCAqYWRkcikKK3sKKwlzdHJ1Y3QgYmF0bWFuX2lmICpiYXRtYW5faWY7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoYmF0bWFuX2lmLCAmaWZfbGlzdCwgbGlzdCkgeworCQlpZiAoYmF0bWFuX2lmLT5pZl9zdGF0dXMgIT0gSUZfQUNUSVZFKQorCQkJY29udGludWU7CisKKwkJaWYgKGNvbXBhcmVfb3JpZyhiYXRtYW5faWYtPm5ldF9kZXYtPmRldl9hZGRyLCBhZGRyKSkgeworCQkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKKwlyZXR1cm4gMDsKKworfQorCittb2R1bGVfaW5pdChiYXRtYW5faW5pdCk7Cittb2R1bGVfZXhpdChiYXRtYW5fZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfU1VQUE9SVEVEX0RFVklDRShEUklWRVJfREVWSUNFKTsKKyNpZmRlZiBSRVZJU0lPTl9WRVJTSU9OCitNT0RVTEVfVkVSU0lPTihTT1VSQ0VfVkVSU0lPTiAiLSIgUkVWSVNJT05fVkVSU0lPTik7CisjZWxzZQorTU9EVUxFX1ZFUlNJT04oU09VUkNFX1ZFUlNJT04pOworI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9tYWluLmggYi9uZXQvYmF0bWFuLWFkdi9tYWluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRkOTkyNgotLS0gL2Rldi9udWxsCisrKyBiL25ldC9iYXRtYW4tYWR2L21haW4uaApAQCAtMCwwICsxLDE4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDEwIEIuQS5ULk0uQS5OLiBjb250cmlidXRvcnM6CisgKgorICogTWFyZWsgTGluZG5lciwgU2ltb24gV3VuZGVybGljaAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSwgVVNBCisgKgorICovCisKKyNpZm5kZWYgX05FVF9CQVRNQU5fQURWX01BSU5fSF8KKyNkZWZpbmUgX05FVF9CQVRNQU5fQURWX01BSU5fSF8KKworLyogS2VybmVsIFByb2dyYW1taW5nICovCisjZGVmaW5lIExJTlVYCisKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiTWFyZWsgTGluZG5lciA8bGluZG5lcl9tYXJla0B5YWhvby5kZT4sICIgXAorCQkgICAgICAiU2ltb24gV3VuZGVybGljaCA8c2l3dUBocnoudHUtY2hlbW5pdHouZGU+IgorI2RlZmluZSBEUklWRVJfREVTQyAgICJCLkEuVC5NLkEuTi4gYWR2YW5jZWQiCisjZGVmaW5lIERSSVZFUl9ERVZJQ0UgImJhdG1hbi1hZHYiCisKKyNkZWZpbmUgU09VUkNFX1ZFUlNJT04gIm5leHQiCisKKworLyogQi5BLlQuTS5BLk4uIHBhcmFtZXRlcnMgKi8KKworI2RlZmluZSBUUV9NQVhfVkFMVUUgMjU1CisjZGVmaW5lIEpJVFRFUiAyMAorI2RlZmluZSBUVEwgNTAJCQkgIC8qIFRpbWUgVG8gTGl2ZSBvZiBicm9hZGNhc3QgbWVzc2FnZXMgKi8KKworI2RlZmluZSBQVVJHRV9USU1FT1VUIDIwMAkvKiBwdXJnZSBvcmlnaW5hdG9ycyBhZnRlciB0aW1lIGluIHNlY29uZHMgaWYgbm8KKwkJCQkgICAqIHZhbGlkIHBhY2tldCBjb21lcyBpbiAtPiBUT0RPOiBjaGVjaworCQkJCSAgICogaW5mbHVlbmNlIG9uIFRRX0xPQ0FMX1dJTkRPV19TSVpFICovCisjZGVmaW5lIExPQ0FMX0hOQV9USU1FT1VUIDM2MDAgLyogaW4gc2Vjb25kcyAqLworCisjZGVmaW5lIFRRX0xPQ0FMX1dJTkRPV19TSVpFIDY0CSAgLyogc2xpZGluZyBwYWNrZXQgcmFuZ2Ugb2YgcmVjZWl2ZWQgb3JpZ2luYXRvcgorCQkJCSAgICogbWVzc2FnZXMgaW4gc3F1ZW5jZSBudW1iZXJzIChzaG91bGQgYmUgYQorCQkJCSAgICogbXVsdGlwbGUgb2Ygb3VyIHdvcmQgc2l6ZSkgKi8KKyNkZWZpbmUgVFFfR0xPQkFMX1dJTkRPV19TSVpFIDUKKyNkZWZpbmUgVFFfTE9DQUxfQklEUkVDVF9TRU5EX01JTklNVU0gMQorI2RlZmluZSBUUV9MT0NBTF9CSURSRUNUX1JFQ1ZfTUlOSU1VTSAxCisjZGVmaW5lIFRRX1RPVEFMX0JJRFJFQ1RfTElNSVQgMQorCisjZGVmaW5lIE5VTV9XT1JEUyAoVFFfTE9DQUxfV0lORE9XX1NJWkUgLyBXT1JEX0JJVF9TSVpFKQorCisjZGVmaW5lIFBBQ0tCVUZGX1NJWkUgMjAwMAorI2RlZmluZSBMT0dfQlVGX0xFTiA4MTkyCSAgLyogaGFzIHRvIGJlIGEgcG93ZXIgb2YgMiAqLworCisjZGVmaW5lIFZJU19JTlRFUlZBTCA1MDAwCS8qIDUgc2Vjb25kcyAqLworCisvKiBob3cgbXVjaCB3b3JzZSBzZWNvbmRhcnkgaW50ZXJmYWNlcyBtYXkgYmUgdG8KKyAqIHRvIGJlIGNvbnNpZGVyZWQgYXMgYm9uZGluZyBjYW5kaWRhdGVzICovCisKKyNkZWZpbmUgQk9ORElOR19UUV9USFJFU0hPTEQJNTAKKworI2RlZmluZSBNQVhfQUdHUkVHQVRJT05fQllURVMgNTEyIC8qIHNob3VsZCBub3QgYmUgYmlnZ2VyIHRoYW4gNTEyIGJ5dGVzIG9yCisJCQkJICAgKiBjaGFuZ2UgdGhlIHNpemUgb2YKKwkJCQkgICAqIGZvcndfcGFja2V0LT5kaXJlY3RfbGlua19mbGFncyAqLworI2RlZmluZSBNQVhfQUdHUkVHQVRJT05fTVMgMTAwCisKKyNkZWZpbmUgU09GVElGX05FSUdIX1RJTUVPVVQgMTgwMDAwIC8qIDMgbWludXRlcyAqLworCisjZGVmaW5lIFJFU0VUX1BST1RFQ1RJT05fTVMgMzAwMDAKKyNkZWZpbmUgRVhQRUNURURfU0VRTk9fUkFOR0UJNjU1MzYKKy8qIGRvbid0IHJlc2V0IGFnYWluIHdpdGhpbiAzMCBzZWNvbmRzICovCisKKyNkZWZpbmUgTUVTSF9JTkFDVElWRSAwCisjZGVmaW5lIE1FU0hfQUNUSVZFIDEKKyNkZWZpbmUgTUVTSF9ERUFDVElWQVRJTkcgMgorCisjZGVmaW5lIEJDQVNUX1FVRVVFX0xFTgkJMjU2CisjZGVmaW5lIEJBVE1BTl9RVUVVRV9MRU4JMjU2CisKKy8qCisgKiBEZWJ1ZyBNZXNzYWdlcworICovCisjaWZkZWYgcHJfZm10CisjdW5kZWYgcHJfZm10CisjZW5kaWYKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQgLyogQXBwZW5kICdiYXRtYW4tYWR2OiAnIGJlZm9yZQorCQkJCQkgICAgICoga2VybmVsIG1lc3NhZ2VzICovCisKKyNkZWZpbmUgREJHX0JBVE1BTiAxCS8qIGFsbCBtZXNzYWdlcyByZWxhdGVkIHRvIHJvdXRpbmcgLyBmbG9vZGluZyAvCisJCQkgKiBicm9hZGNhc3RpbmcgLyBldGMgKi8KKyNkZWZpbmUgREJHX1JPVVRFUyAyCS8qIHJvdXRlIG9yIGhuYSBhZGRlZCAvIGNoYW5nZWQgLyBkZWxldGVkICovCisjZGVmaW5lIERCR19BTEwgMworCisjZGVmaW5lIExPR19CVUZfTEVOIDgxOTIgICAgICAgICAgLyogaGFzIHRvIGJlIGEgcG93ZXIgb2YgMiAqLworCisKKy8qCisgKiAgVmlzCisgKi8KKworLyogI2RlZmluZSBWSVNfU1VCQ0xVU1RFUlNfRElTQUJMRUQgKi8KKworLyoKKyAqIEtlcm5lbCBoZWFkZXJzCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CS8qIG11dGV4ICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CS8qIG5lZWRlZCBieSBhbGwgbW9kdWxlcyAqLworI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgkvKiBuZXRkZXZpY2UgKi8KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPiAgLyogZXRoZXJuZXQgYWRkcmVzcyBjbGFzc2lmYWN0aW9uICovCisjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4JLyogZXRoZXJuZXQgaGVhZGVyICovCisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgkJLyogcG9sbF90YWJsZSAqLworI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4JLyoga2VybmVsIHRocmVhZHMgKi8KKyNpbmNsdWRlIDxsaW51eC9wa3Rfc2NoZWQuaD4JLyogc2NoZWR1bGUgdHlwZXMgKi8KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4JLyogd29ya3F1ZXVlICovCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPG5ldC9zb2NrLmg+CQkvKiBzdHJ1Y3Qgc29jayAqLworI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgInR5cGVzLmgiCisKKyNpZm5kZWYgUkVWSVNJT05fVkVSU0lPTgorI2RlZmluZSBSRVZJU0lPTl9WRVJTSU9OX1NUUiAiIgorI2Vsc2UKKyNkZWZpbmUgUkVWSVNJT05fVkVSU0lPTl9TVFIgIiAiUkVWSVNJT05fVkVSU0lPTgorI2VuZGlmCisKK2V4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIGlmX2xpc3Q7CisKK2V4dGVybiB1bnNpZ25lZCBjaGFyIGJyb2FkY2FzdF9hZGRyW107CitleHRlcm4gc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmJhdF9ldmVudF93b3JrcXVldWU7CisKK2ludCBtZXNoX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKnNvZnRfaWZhY2UpOwordm9pZCBtZXNoX2ZyZWUoc3RydWN0IG5ldF9kZXZpY2UgKnNvZnRfaWZhY2UpOwordm9pZCBpbmNfbW9kdWxlX2NvdW50KHZvaWQpOwordm9pZCBkZWNfbW9kdWxlX2NvdW50KHZvaWQpOworaW50IGlzX215X21hYyh1aW50OF90ICphZGRyKTsKKworI2lmZGVmIENPTkZJR19CQVRNQU5fQURWX0RFQlVHCitpbnQgZGVidWdfbG9nKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYsIGNoYXIgKmZtdCwgLi4uKTsKKworI2RlZmluZSBiYXRfZGJnKHR5cGUsIGJhdF9wcml2LCBmbXQsIGFyZy4uLikJCQlcCisJZG8gewkJCQkJCQlcCisJCWlmIChhdG9taWNfcmVhZCgmYmF0X3ByaXYtPmxvZ19sZXZlbCkgJiB0eXBlKQlcCisJCQlkZWJ1Z19sb2coYmF0X3ByaXYsIGZtdCwgIyMgYXJnKTsJXAorCX0JCQkJCQkJXAorCXdoaWxlICgwKQorI2Vsc2UgLyogIUNPTkZJR19CQVRNQU5fQURWX0RFQlVHICovCitzdGF0aWMgaW5saW5lIHZvaWQgYmF0X2RiZyhjaGFyIHR5cGUgX19hdHRyaWJ1dGVfXygodW51c2VkKSksCisJCQkgICBzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2IF9fYXR0cmlidXRlX18oKHVudXNlZCkpLAorCQkJICAgY2hhciAqZm10IF9fYXR0cmlidXRlX18oKHVudXNlZCkpLCAuLi4pCit7Cit9CisjZW5kaWYKKworI2RlZmluZSBiYXRfd2FybmluZyhuZXRfZGV2LCBmbXQsIGFyZy4uLikJCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJc3RydWN0IG5ldF9kZXZpY2UgKl9uZXRkZXYgPSAobmV0X2Rldik7ICAgICAgICAgICAgICAgICBcCisJCXN0cnVjdCBiYXRfcHJpdiAqX2JhdHByaXYgPSBuZXRkZXZfcHJpdihfbmV0ZGV2KTsgICAgICAgXAorCQliYXRfZGJnKERCR19BTEwsIF9iYXRwcml2LCBmbXQsICMjIGFyZyk7CQlcCisJCXByX3dhcm5pbmcoIiVzOiAiIGZtdCwgX25ldGRldi0+bmFtZSwgIyMgYXJnKTsJCVwKKwl9IHdoaWxlICgwKQorI2RlZmluZSBiYXRfaW5mbyhuZXRfZGV2LCBmbXQsIGFyZy4uLikJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCXN0cnVjdCBuZXRfZGV2aWNlICpfbmV0ZGV2ID0gKG5ldF9kZXYpOyAgICAgICAgICAgICAgICAgXAorCQlzdHJ1Y3QgYmF0X3ByaXYgKl9iYXRwcml2ID0gbmV0ZGV2X3ByaXYoX25ldGRldik7ICAgICAgIFwKKwkJYmF0X2RiZyhEQkdfQUxMLCBfYmF0cHJpdiwgZm10LCAjIyBhcmcpOwkJXAorCQlwcl9pbmZvKCIlczogIiBmbXQsIF9uZXRkZXYtPm5hbWUsICMjIGFyZyk7CQlcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgYmF0X2VycihuZXRfZGV2LCBmbXQsIGFyZy4uLikJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCXN0cnVjdCBuZXRfZGV2aWNlICpfbmV0ZGV2ID0gKG5ldF9kZXYpOyAgICAgICAgICAgICAgICAgXAorCQlzdHJ1Y3QgYmF0X3ByaXYgKl9iYXRwcml2ID0gbmV0ZGV2X3ByaXYoX25ldGRldik7ICAgICAgIFwKKwkJYmF0X2RiZyhEQkdfQUxMLCBfYmF0cHJpdiwgZm10LCAjIyBhcmcpOwkJXAorCQlwcl9lcnIoIiVzOiAiIGZtdCwgX25ldGRldi0+bmFtZSwgIyMgYXJnKTsJCVwKKwl9IHdoaWxlICgwKQorCisjZW5kaWYgLyogX05FVF9CQVRNQU5fQURWX01BSU5fSF8gKi8KZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L29yaWdpbmF0b3IuYyBiL25ldC9iYXRtYW4tYWR2L29yaWdpbmF0b3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjdmYjZiCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L2JhdG1hbi1hZHYvb3JpZ2luYXRvci5jCkBAIC0wLDAgKzEsNTY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgQi5BLlQuTS5BLk4uIGNvbnRyaWJ1dG9yczoKKyAqCisgKiBNYXJlayBMaW5kbmVyLCBTaW1vbiBXdW5kZXJsaWNoCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxLCBVU0EKKyAqCisgKi8KKworLyogaW5jcmVhc2UgdGhlIHJlZmVyZW5jZSBjb3VudGVyIGZvciB0aGlzIG9yaWdpbmF0b3IgKi8KKworI2luY2x1ZGUgIm1haW4uaCIKKyNpbmNsdWRlICJvcmlnaW5hdG9yLmgiCisjaW5jbHVkZSAiaGFzaC5oIgorI2luY2x1ZGUgInRyYW5zbGF0aW9uLXRhYmxlLmgiCisjaW5jbHVkZSAicm91dGluZy5oIgorI2luY2x1ZGUgImdhdGV3YXlfY2xpZW50LmgiCisjaW5jbHVkZSAiaGFyZC1pbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJ1bmljYXN0LmgiCisjaW5jbHVkZSAic29mdC1pbnRlcmZhY2UuaCIKKworc3RhdGljIHZvaWQgcHVyZ2Vfb3JpZyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworCitzdGF0aWMgdm9pZCBzdGFydF9wdXJnZV90aW1lcihzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2KQoreworCUlOSVRfREVMQVlFRF9XT1JLKCZiYXRfcHJpdi0+b3JpZ193b3JrLCBwdXJnZV9vcmlnKTsKKwlxdWV1ZV9kZWxheWVkX3dvcmsoYmF0X2V2ZW50X3dvcmtxdWV1ZSwgJmJhdF9wcml2LT5vcmlnX3dvcmssIDEgKiBIWik7Cit9CisKK2ludCBvcmlnaW5hdG9yX2luaXQoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdikKK3sKKwlpZiAoYmF0X3ByaXYtPm9yaWdfaGFzaCkKKwkJcmV0dXJuIDE7CisKKwlzcGluX2xvY2tfYmgoJmJhdF9wcml2LT5vcmlnX2hhc2hfbG9jayk7CisJYmF0X3ByaXYtPm9yaWdfaGFzaCA9IGhhc2hfbmV3KDEwMjQpOworCisJaWYgKCFiYXRfcHJpdi0+b3JpZ19oYXNoKQorCQlnb3RvIGVycjsKKworCXNwaW5fdW5sb2NrX2JoKCZiYXRfcHJpdi0+b3JpZ19oYXNoX2xvY2spOworCXN0YXJ0X3B1cmdlX3RpbWVyKGJhdF9wcml2KTsKKwlyZXR1cm4gMTsKKworZXJyOgorCXNwaW5fdW5sb2NrX2JoKCZiYXRfcHJpdi0+b3JpZ19oYXNoX2xvY2spOworCXJldHVybiAwOworfQorCitzdHJ1Y3QgbmVpZ2hfbm9kZSAqCitjcmVhdGVfbmVpZ2hib3Ioc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlLCBzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25laWdoX25vZGUsCisJCXVpbnQ4X3QgKm5laWdoLCBzdHJ1Y3QgYmF0bWFuX2lmICppZl9pbmNvbWluZykKK3sKKwlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYoaWZfaW5jb21pbmctPnNvZnRfaWZhY2UpOworCXN0cnVjdCBuZWlnaF9ub2RlICpuZWlnaF9ub2RlOworCisJYmF0X2RiZyhEQkdfQkFUTUFOLCBiYXRfcHJpdiwKKwkJIkNyZWF0aW5nIG5ldyBsYXN0LWhvcCBuZWlnaGJvciBvZiBvcmlnaW5hdG9yXG4iKTsKKworCW5laWdoX25vZGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbmVpZ2hfbm9kZSksIEdGUF9BVE9NSUMpOworCWlmICghbmVpZ2hfbm9kZSkKKwkJcmV0dXJuIE5VTEw7CisKKwlJTklUX0xJU1RfSEVBRCgmbmVpZ2hfbm9kZS0+bGlzdCk7CisKKwltZW1jcHkobmVpZ2hfbm9kZS0+YWRkciwgbmVpZ2gsIEVUSF9BTEVOKTsKKwluZWlnaF9ub2RlLT5vcmlnX25vZGUgPSBvcmlnX25laWdoX25vZGU7CisJbmVpZ2hfbm9kZS0+aWZfaW5jb21pbmcgPSBpZl9pbmNvbWluZzsKKworCWxpc3RfYWRkX3RhaWwoJm5laWdoX25vZGUtPmxpc3QsICZvcmlnX25vZGUtPm5laWdoX2xpc3QpOworCXJldHVybiBuZWlnaF9ub2RlOworfQorCitzdGF0aWMgdm9pZCBmcmVlX29yaWdfbm9kZSh2b2lkICpkYXRhLCB2b2lkICphcmcpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqbGlzdF9wb3MsICpsaXN0X3Bvc190bXA7CisJc3RydWN0IG5laWdoX25vZGUgKm5laWdoX25vZGU7CisJc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlID0gKHN0cnVjdCBvcmlnX25vZGUgKilkYXRhOworCXN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYgPSAoc3RydWN0IGJhdF9wcml2ICopYXJnOworCisJLyogZm9yIGFsbCBuZWlnaGJvcnMgdG93YXJkcyB0aGlzIG9yaWdpbmF0b3IgLi4uICovCisJbGlzdF9mb3JfZWFjaF9zYWZlKGxpc3RfcG9zLCBsaXN0X3Bvc190bXAsICZvcmlnX25vZGUtPm5laWdoX2xpc3QpIHsKKwkJbmVpZ2hfbm9kZSA9IGxpc3RfZW50cnkobGlzdF9wb3MsIHN0cnVjdCBuZWlnaF9ub2RlLCBsaXN0KTsKKworCQlsaXN0X2RlbChsaXN0X3Bvcyk7CisJCWtmcmVlKG5laWdoX25vZGUpOworCX0KKworCWZyYWdfbGlzdF9mcmVlKCZvcmlnX25vZGUtPmZyYWdfbGlzdCk7CisJaG5hX2dsb2JhbF9kZWxfb3JpZyhiYXRfcHJpdiwgb3JpZ19ub2RlLCAib3JpZ2luYXRvciB0aW1lZCBvdXQiKTsKKworCWtmcmVlKG9yaWdfbm9kZS0+YmNhc3Rfb3duKTsKKwlrZnJlZShvcmlnX25vZGUtPmJjYXN0X293bl9zdW0pOworCWtmcmVlKG9yaWdfbm9kZSk7Cit9CisKK3ZvaWQgb3JpZ2luYXRvcl9mcmVlKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYpCit7CisJaWYgKCFiYXRfcHJpdi0+b3JpZ19oYXNoKQorCQlyZXR1cm47CisKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmJhdF9wcml2LT5vcmlnX3dvcmspOworCisJc3Bpbl9sb2NrX2JoKCZiYXRfcHJpdi0+b3JpZ19oYXNoX2xvY2spOworCWhhc2hfZGVsZXRlKGJhdF9wcml2LT5vcmlnX2hhc2gsIGZyZWVfb3JpZ19ub2RlLCBiYXRfcHJpdik7CisJYmF0X3ByaXYtPm9yaWdfaGFzaCA9IE5VTEw7CisJc3Bpbl91bmxvY2tfYmgoJmJhdF9wcml2LT5vcmlnX2hhc2hfbG9jayk7Cit9CisKKy8qIHRoaXMgZnVuY3Rpb24gZmluZHMgb3IgY3JlYXRlcyBhbiBvcmlnaW5hdG9yIGVudHJ5IGZvciB0aGUgZ2l2ZW4KKyAqIGFkZHJlc3MgaWYgaXQgZG9lcyBub3QgZXhpdHMgKi8KK3N0cnVjdCBvcmlnX25vZGUgKmdldF9vcmlnX25vZGUoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiwgdWludDhfdCAqYWRkcikKK3sKKwlzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGU7CisJaW50IHNpemU7CisJaW50IGhhc2hfYWRkZWQ7CisKKwlvcmlnX25vZGUgPSAoKHN0cnVjdCBvcmlnX25vZGUgKiloYXNoX2ZpbmQoYmF0X3ByaXYtPm9yaWdfaGFzaCwKKwkJCQkJCSAgIGNvbXBhcmVfb3JpZywgY2hvb3NlX29yaWcsCisJCQkJCQkgICBhZGRyKSk7CisKKwlpZiAob3JpZ19ub2RlKQorCQlyZXR1cm4gb3JpZ19ub2RlOworCisJYmF0X2RiZyhEQkdfQkFUTUFOLCBiYXRfcHJpdiwKKwkJIkNyZWF0aW5nIG5ldyBvcmlnaW5hdG9yOiAlcE1cbiIsIGFkZHIpOworCisJb3JpZ19ub2RlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG9yaWdfbm9kZSksIEdGUF9BVE9NSUMpOworCWlmICghb3JpZ19ub2RlKQorCQlyZXR1cm4gTlVMTDsKKworCUlOSVRfTElTVF9IRUFEKCZvcmlnX25vZGUtPm5laWdoX2xpc3QpOworCisJbWVtY3B5KG9yaWdfbm9kZS0+b3JpZywgYWRkciwgRVRIX0FMRU4pOworCW9yaWdfbm9kZS0+cm91dGVyID0gTlVMTDsKKwlvcmlnX25vZGUtPmhuYV9idWZmID0gTlVMTDsKKwlvcmlnX25vZGUtPmJjYXN0X3NlcW5vX3Jlc2V0ID0gamlmZmllcyAtIDEKKwkJCQkJLSBtc2Vjc190b19qaWZmaWVzKFJFU0VUX1BST1RFQ1RJT05fTVMpOworCW9yaWdfbm9kZS0+YmF0bWFuX3NlcW5vX3Jlc2V0ID0gamlmZmllcyAtIDEKKwkJCQkJLSBtc2Vjc190b19qaWZmaWVzKFJFU0VUX1BST1RFQ1RJT05fTVMpOworCisJc2l6ZSA9IGJhdF9wcml2LT5udW1faWZhY2VzICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpICogTlVNX1dPUkRTOworCisJb3JpZ19ub2RlLT5iY2FzdF9vd24gPSBremFsbG9jKHNpemUsIEdGUF9BVE9NSUMpOworCWlmICghb3JpZ19ub2RlLT5iY2FzdF9vd24pCisJCWdvdG8gZnJlZV9vcmlnX25vZGU7CisKKwlzaXplID0gYmF0X3ByaXYtPm51bV9pZmFjZXMgKiBzaXplb2YodWludDhfdCk7CisJb3JpZ19ub2RlLT5iY2FzdF9vd25fc3VtID0ga3phbGxvYyhzaXplLCBHRlBfQVRPTUlDKTsKKworCUlOSVRfTElTVF9IRUFEKCZvcmlnX25vZGUtPmZyYWdfbGlzdCk7CisJb3JpZ19ub2RlLT5sYXN0X2ZyYWdfcGFja2V0ID0gMDsKKworCWlmICghb3JpZ19ub2RlLT5iY2FzdF9vd25fc3VtKQorCQlnb3RvIGZyZWVfYmNhc3Rfb3duOworCisJaGFzaF9hZGRlZCA9IGhhc2hfYWRkKGJhdF9wcml2LT5vcmlnX2hhc2gsIGNvbXBhcmVfb3JpZywgY2hvb3NlX29yaWcsCisJCQkgICAgICBvcmlnX25vZGUpOworCWlmIChoYXNoX2FkZGVkIDwgMCkKKwkJZ290byBmcmVlX2JjYXN0X293bl9zdW07CisKKwlyZXR1cm4gb3JpZ19ub2RlOworZnJlZV9iY2FzdF9vd25fc3VtOgorCWtmcmVlKG9yaWdfbm9kZS0+YmNhc3Rfb3duX3N1bSk7CitmcmVlX2JjYXN0X293bjoKKwlrZnJlZShvcmlnX25vZGUtPmJjYXN0X293bik7CitmcmVlX29yaWdfbm9kZToKKwlrZnJlZShvcmlnX25vZGUpOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgYm9vbCBwdXJnZV9vcmlnX25laWdoYm9ycyhzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2LAorCQkJCSBzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGUsCisJCQkJIHN0cnVjdCBuZWlnaF9ub2RlICoqYmVzdF9uZWlnaF9ub2RlKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3RfcG9zLCAqbGlzdF9wb3NfdG1wOworCXN0cnVjdCBuZWlnaF9ub2RlICpuZWlnaF9ub2RlOworCWJvb2wgbmVpZ2hfcHVyZ2VkID0gZmFsc2U7CisKKwkqYmVzdF9uZWlnaF9ub2RlID0gTlVMTDsKKworCS8qIGZvciBhbGwgbmVpZ2hib3JzIHRvd2FyZHMgdGhpcyBvcmlnaW5hdG9yIC4uLiAqLworCWxpc3RfZm9yX2VhY2hfc2FmZShsaXN0X3BvcywgbGlzdF9wb3NfdG1wLCAmb3JpZ19ub2RlLT5uZWlnaF9saXN0KSB7CisJCW5laWdoX25vZGUgPSBsaXN0X2VudHJ5KGxpc3RfcG9zLCBzdHJ1Y3QgbmVpZ2hfbm9kZSwgbGlzdCk7CisKKwkJaWYgKCh0aW1lX2FmdGVyKGppZmZpZXMsCisJCQluZWlnaF9ub2RlLT5sYXN0X3ZhbGlkICsgUFVSR0VfVElNRU9VVCAqIEhaKSkgfHwKKwkJICAgIChuZWlnaF9ub2RlLT5pZl9pbmNvbWluZy0+aWZfc3RhdHVzID09IElGX0lOQUNUSVZFKSB8fAorCQkgICAgKG5laWdoX25vZGUtPmlmX2luY29taW5nLT5pZl9zdGF0dXMgPT0gSUZfVE9fQkVfUkVNT1ZFRCkpIHsKKworCQkJaWYgKG5laWdoX25vZGUtPmlmX2luY29taW5nLT5pZl9zdGF0dXMgPT0KKwkJCQkJCQlJRl9UT19CRV9SRU1PVkVEKQorCQkJCWJhdF9kYmcoREJHX0JBVE1BTiwgYmF0X3ByaXYsCisJCQkJCSJuZWlnaGJvciBwdXJnZTogb3JpZ2luYXRvciAlcE0sICIKKwkJCQkJIm5laWdoYm9yOiAlcE0sIGlmYWNlOiAlc1xuIiwKKwkJCQkJb3JpZ19ub2RlLT5vcmlnLCBuZWlnaF9ub2RlLT5hZGRyLAorCQkJCQluZWlnaF9ub2RlLT5pZl9pbmNvbWluZy0+bmV0X2Rldi0+bmFtZSk7CisJCQllbHNlCisJCQkJYmF0X2RiZyhEQkdfQkFUTUFOLCBiYXRfcHJpdiwKKwkJCQkJIm5laWdoYm9yIHRpbWVvdXQ6IG9yaWdpbmF0b3IgJXBNLCAiCisJCQkJCSJuZWlnaGJvcjogJXBNLCBsYXN0X3ZhbGlkOiAlbHVcbiIsCisJCQkJCW9yaWdfbm9kZS0+b3JpZywgbmVpZ2hfbm9kZS0+YWRkciwKKwkJCQkJKG5laWdoX25vZGUtPmxhc3RfdmFsaWQgLyBIWikpOworCisJCQluZWlnaF9wdXJnZWQgPSB0cnVlOworCQkJbGlzdF9kZWwobGlzdF9wb3MpOworCQkJa2ZyZWUobmVpZ2hfbm9kZSk7CisJCX0gZWxzZSB7CisJCQlpZiAoKCEqYmVzdF9uZWlnaF9ub2RlKSB8fAorCQkJICAgIChuZWlnaF9ub2RlLT50cV9hdmcgPiAoKmJlc3RfbmVpZ2hfbm9kZSktPnRxX2F2ZykpCisJCQkJKmJlc3RfbmVpZ2hfbm9kZSA9IG5laWdoX25vZGU7CisJCX0KKwl9CisJcmV0dXJuIG5laWdoX3B1cmdlZDsKK30KKworc3RhdGljIGJvb2wgcHVyZ2Vfb3JpZ19ub2RlKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYsCisJCQkgICAgc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlKQoreworCXN0cnVjdCBuZWlnaF9ub2RlICpiZXN0X25laWdoX25vZGU7CisKKwlpZiAodGltZV9hZnRlcihqaWZmaWVzLAorCQlvcmlnX25vZGUtPmxhc3RfdmFsaWQgKyAyICogUFVSR0VfVElNRU9VVCAqIEhaKSkgeworCisJCWJhdF9kYmcoREJHX0JBVE1BTiwgYmF0X3ByaXYsCisJCQkiT3JpZ2luYXRvciB0aW1lb3V0OiBvcmlnaW5hdG9yICVwTSwgbGFzdF92YWxpZCAlbHVcbiIsCisJCQlvcmlnX25vZGUtPm9yaWcsIChvcmlnX25vZGUtPmxhc3RfdmFsaWQgLyBIWikpOworCQlyZXR1cm4gdHJ1ZTsKKwl9IGVsc2UgeworCQlpZiAocHVyZ2Vfb3JpZ19uZWlnaGJvcnMoYmF0X3ByaXYsIG9yaWdfbm9kZSwKKwkJCQkJCQkmYmVzdF9uZWlnaF9ub2RlKSkgeworCQkJdXBkYXRlX3JvdXRlcyhiYXRfcHJpdiwgb3JpZ19ub2RlLAorCQkJCSAgICAgIGJlc3RfbmVpZ2hfbm9kZSwKKwkJCQkgICAgICBvcmlnX25vZGUtPmhuYV9idWZmLAorCQkJCSAgICAgIG9yaWdfbm9kZS0+aG5hX2J1ZmZfbGVuKTsKKwkJCS8qIHVwZGF0ZSBib25kaW5nIGNhbmRpZGF0ZXMsIHdlIGNvdWxkIGhhdmUgbG9zdAorCQkJICogc29tZSBjYW5kaWRhdGVzLiAqLworCQkJdXBkYXRlX2JvbmRpbmdfY2FuZGlkYXRlcyhiYXRfcHJpdiwgb3JpZ19ub2RlKTsKKwkJfQorCX0KKworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIHZvaWQgX3B1cmdlX29yaWcoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdikKK3sKKwlzdHJ1Y3QgaGFzaHRhYmxlX3QgKmhhc2ggPSBiYXRfcHJpdi0+b3JpZ19oYXNoOworCXN0cnVjdCBobGlzdF9ub2RlICp3YWxrLCAqc2FmZTsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKKwlzdHJ1Y3QgZWxlbWVudF90ICpidWNrZXQ7CisJc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlOworCWludCBpOworCisJaWYgKCFoYXNoKQorCQlyZXR1cm47CisKKwlzcGluX2xvY2tfYmgoJmJhdF9wcml2LT5vcmlnX2hhc2hfbG9jayk7CisKKwkvKiBmb3IgYWxsIG9yaWdpbnMuLi4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgaGFzaC0+c2l6ZTsgaSsrKSB7CisJCWhlYWQgPSAmaGFzaC0+dGFibGVbaV07CisKKwkJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShidWNrZXQsIHdhbGssIHNhZmUsIGhlYWQsIGhsaXN0KSB7CisJCQlvcmlnX25vZGUgPSBidWNrZXQtPmRhdGE7CisKKwkJCWlmIChwdXJnZV9vcmlnX25vZGUoYmF0X3ByaXYsIG9yaWdfbm9kZSkpIHsKKwkJCQlpZiAob3JpZ19ub2RlLT5nd19mbGFncykKKwkJCQkJZ3dfbm9kZV9kZWxldGUoYmF0X3ByaXYsIG9yaWdfbm9kZSk7CisJCQkJaGxpc3RfZGVsKHdhbGspOworCQkJCWtmcmVlKGJ1Y2tldCk7CisJCQkJZnJlZV9vcmlnX25vZGUob3JpZ19ub2RlLCBiYXRfcHJpdik7CisJCQl9CisKKwkJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIG9yaWdfbm9kZS0+bGFzdF9mcmFnX3BhY2tldCArCisJCQkJCQltc2Vjc190b19qaWZmaWVzKEZSQUdfVElNRU9VVCkpKQorCQkJCWZyYWdfbGlzdF9mcmVlKCZvcmlnX25vZGUtPmZyYWdfbGlzdCk7CisJCX0KKwl9CisKKwlzcGluX3VubG9ja19iaCgmYmF0X3ByaXYtPm9yaWdfaGFzaF9sb2NrKTsKKworCWd3X25vZGVfcHVyZ2UoYmF0X3ByaXYpOworCWd3X2VsZWN0aW9uKGJhdF9wcml2KTsKKworCXNvZnRpZl9uZWlnaF9wdXJnZShiYXRfcHJpdik7Cit9CisKK3N0YXRpYyB2b2lkIHB1cmdlX29yaWcoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBkZWxheWVkX3dvcmsgKmRlbGF5ZWRfd29yayA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZGVsYXllZF93b3JrLCB3b3JrKTsKKwlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2ID0KKwkJY29udGFpbmVyX29mKGRlbGF5ZWRfd29yaywgc3RydWN0IGJhdF9wcml2LCBvcmlnX3dvcmspOworCisJX3B1cmdlX29yaWcoYmF0X3ByaXYpOworCXN0YXJ0X3B1cmdlX3RpbWVyKGJhdF9wcml2KTsKK30KKwordm9pZCBwdXJnZV9vcmlnX3JlZihzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2KQoreworCV9wdXJnZV9vcmlnKGJhdF9wcml2KTsKK30KKworaW50IG9yaWdfc2VxX3ByaW50X3RleHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKm9mZnNldCkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKXNlcS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYobmV0X2Rldik7CisJc3RydWN0IGhhc2h0YWJsZV90ICpoYXNoID0gYmF0X3ByaXYtPm9yaWdfaGFzaDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqd2FsazsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKKwlzdHJ1Y3QgZWxlbWVudF90ICpidWNrZXQ7CisJc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlOworCXN0cnVjdCBuZWlnaF9ub2RlICpuZWlnaF9ub2RlOworCWludCBiYXRtYW5fY291bnQgPSAwOworCWludCBsYXN0X3NlZW5fc2VjczsKKwlpbnQgbGFzdF9zZWVuX21zZWNzOworCWludCBpOworCisJaWYgKCghYmF0X3ByaXYtPnByaW1hcnlfaWYpIHx8CisJICAgIChiYXRfcHJpdi0+cHJpbWFyeV9pZi0+aWZfc3RhdHVzICE9IElGX0FDVElWRSkpIHsKKwkJaWYgKCFiYXRfcHJpdi0+cHJpbWFyeV9pZikKKwkJCXJldHVybiBzZXFfcHJpbnRmKHNlcSwgIkJBVE1BTiBtZXNoICVzIGRpc2FibGVkIC0gIgorCQkJCSAgICAgInBsZWFzZSBzcGVjaWZ5IGludGVyZmFjZXMgdG8gZW5hYmxlIGl0XG4iLAorCQkJCSAgICAgbmV0X2Rldi0+bmFtZSk7CisKKwkJcmV0dXJuIHNlcV9wcmludGYoc2VxLCAiQkFUTUFOIG1lc2ggJXMgIgorCQkJCSAgImRpc2FibGVkIC0gcHJpbWFyeSBpbnRlcmZhY2Ugbm90IGFjdGl2ZVxuIiwKKwkJCQkgIG5ldF9kZXYtPm5hbWUpOworCX0KKworCXNlcV9wcmludGYoc2VxLCAiW0IuQS5ULk0uQS5OLiBhZHYgJXMlcywgTWFpbklGL01BQzogJXMvJXBNICglcyldXG4iLAorCQkgICBTT1VSQ0VfVkVSU0lPTiwgUkVWSVNJT05fVkVSU0lPTl9TVFIsCisJCSAgIGJhdF9wcml2LT5wcmltYXJ5X2lmLT5uZXRfZGV2LT5uYW1lLAorCQkgICBiYXRfcHJpdi0+cHJpbWFyeV9pZi0+bmV0X2Rldi0+ZGV2X2FkZHIsIG5ldF9kZXYtPm5hbWUpOworCXNlcV9wcmludGYoc2VxLCAiICAlLTE1cyAlcyAoJXMvJWkpICUxN3MgWyUxMHNdOiAlMjBzIC4uLlxuIiwKKwkJICAgIk9yaWdpbmF0b3IiLCAibGFzdC1zZWVuIiwgIiMiLCBUUV9NQVhfVkFMVUUsICJOZXh0aG9wIiwKKwkJICAgIm91dGdvaW5nSUYiLCAiUG90ZW50aWFsIG5leHRob3BzIik7CisKKwlzcGluX2xvY2tfYmgoJmJhdF9wcml2LT5vcmlnX2hhc2hfbG9jayk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaGFzaC0+c2l6ZTsgaSsrKSB7CisJCWhlYWQgPSAmaGFzaC0+dGFibGVbaV07CisKKwkJaGxpc3RfZm9yX2VhY2hfZW50cnkoYnVja2V0LCB3YWxrLCBoZWFkLCBobGlzdCkgeworCQkJb3JpZ19ub2RlID0gYnVja2V0LT5kYXRhOworCisJCQlpZiAoIW9yaWdfbm9kZS0+cm91dGVyKQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAob3JpZ19ub2RlLT5yb3V0ZXItPnRxX2F2ZyA9PSAwKQorCQkJCWNvbnRpbnVlOworCisJCQlsYXN0X3NlZW5fc2VjcyA9IGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtCisJCQkJCQlvcmlnX25vZGUtPmxhc3RfdmFsaWQpIC8gMTAwMDsKKwkJCWxhc3Rfc2Vlbl9tc2VjcyA9IGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtCisJCQkJCQlvcmlnX25vZGUtPmxhc3RfdmFsaWQpICUgMTAwMDsKKworCQkJbmVpZ2hfbm9kZSA9IG9yaWdfbm9kZS0+cm91dGVyOworCQkJc2VxX3ByaW50ZihzZXEsICIlcE0gJTRpLiUwM2lzICAgKCUzaSkgJXBNIFslMTBzXToiLAorCQkJCSAgIG9yaWdfbm9kZS0+b3JpZywgbGFzdF9zZWVuX3NlY3MsCisJCQkJICAgbGFzdF9zZWVuX21zZWNzLCBuZWlnaF9ub2RlLT50cV9hdmcsCisJCQkJICAgbmVpZ2hfbm9kZS0+YWRkciwKKwkJCQkgICBuZWlnaF9ub2RlLT5pZl9pbmNvbWluZy0+bmV0X2Rldi0+bmFtZSk7CisKKwkJCWxpc3RfZm9yX2VhY2hfZW50cnkobmVpZ2hfbm9kZSwgJm9yaWdfbm9kZS0+bmVpZ2hfbGlzdCwKKwkJCQkJICAgIGxpc3QpIHsKKwkJCQlzZXFfcHJpbnRmKHNlcSwgIiAlcE0gKCUzaSkiLCBuZWlnaF9ub2RlLT5hZGRyLAorCQkJCQkJbmVpZ2hfbm9kZS0+dHFfYXZnKTsKKwkJCX0KKworCQkJc2VxX3ByaW50ZihzZXEsICJcbiIpOworCQkJYmF0bWFuX2NvdW50Kys7CisJCX0KKwl9CisKKwlzcGluX3VubG9ja19iaCgmYmF0X3ByaXYtPm9yaWdfaGFzaF9sb2NrKTsKKworCWlmICgoYmF0bWFuX2NvdW50ID09IDApKQorCQlzZXFfcHJpbnRmKHNlcSwgIk5vIGJhdG1hbiBub2RlcyBpbiByYW5nZSAuLi5cbiIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3JpZ19ub2RlX2FkZF9pZihzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGUsIGludCBtYXhfaWZfbnVtKQoreworCXZvaWQgKmRhdGFfcHRyOworCisJZGF0YV9wdHIgPSBrbWFsbG9jKG1heF9pZl9udW0gKiBzaXplb2YodW5zaWduZWQgbG9uZykgKiBOVU1fV09SRFMsCisJCQkgICBHRlBfQVRPTUlDKTsKKwlpZiAoIWRhdGFfcHRyKSB7CisJCXByX2VycigiQ2FuJ3QgcmVzaXplIG9yaWc6IG91dCBvZiBtZW1vcnlcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJbWVtY3B5KGRhdGFfcHRyLCBvcmlnX25vZGUtPmJjYXN0X293biwKKwkgICAgICAgKG1heF9pZl9udW0gLSAxKSAqIHNpemVvZih1bnNpZ25lZCBsb25nKSAqIE5VTV9XT1JEUyk7CisJa2ZyZWUob3JpZ19ub2RlLT5iY2FzdF9vd24pOworCW9yaWdfbm9kZS0+YmNhc3Rfb3duID0gZGF0YV9wdHI7CisKKwlkYXRhX3B0ciA9IGttYWxsb2MobWF4X2lmX251bSAqIHNpemVvZih1aW50OF90KSwgR0ZQX0FUT01JQyk7CisJaWYgKCFkYXRhX3B0cikgeworCQlwcl9lcnIoIkNhbid0IHJlc2l6ZSBvcmlnOiBvdXQgb2YgbWVtb3J5XG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCW1lbWNweShkYXRhX3B0ciwgb3JpZ19ub2RlLT5iY2FzdF9vd25fc3VtLAorCSAgICAgICAobWF4X2lmX251bSAtIDEpICogc2l6ZW9mKHVpbnQ4X3QpKTsKKwlrZnJlZShvcmlnX25vZGUtPmJjYXN0X293bl9zdW0pOworCW9yaWdfbm9kZS0+YmNhc3Rfb3duX3N1bSA9IGRhdGFfcHRyOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBvcmlnX2hhc2hfYWRkX2lmKHN0cnVjdCBiYXRtYW5faWYgKmJhdG1hbl9pZiwgaW50IG1heF9pZl9udW0pCit7CisJc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KGJhdG1hbl9pZi0+c29mdF9pZmFjZSk7CisJc3RydWN0IGhhc2h0YWJsZV90ICpoYXNoID0gYmF0X3ByaXYtPm9yaWdfaGFzaDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqd2FsazsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKKwlzdHJ1Y3QgZWxlbWVudF90ICpidWNrZXQ7CisJc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlOworCWludCBpOworCisJLyogcmVzaXplIGFsbCBvcmlnIG5vZGVzIGJlY2F1c2Ugb3JpZ19ub2RlLT5iY2FzdF9vd24oX3N1bSkgZGVwZW5kIG9uCisJICogaWZfbnVtICovCisJc3Bpbl9sb2NrX2JoKCZiYXRfcHJpdi0+b3JpZ19oYXNoX2xvY2spOworCisJZm9yIChpID0gMDsgaSA8IGhhc2gtPnNpemU7IGkrKykgeworCQloZWFkID0gJmhhc2gtPnRhYmxlW2ldOworCisJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGJ1Y2tldCwgd2FsaywgaGVhZCwgaGxpc3QpIHsKKwkJCW9yaWdfbm9kZSA9IGJ1Y2tldC0+ZGF0YTsKKworCQkJaWYgKG9yaWdfbm9kZV9hZGRfaWYob3JpZ19ub2RlLCBtYXhfaWZfbnVtKSA9PSAtMSkKKwkJCQlnb3RvIGVycjsKKwkJfQorCX0KKworCXNwaW5fdW5sb2NrX2JoKCZiYXRfcHJpdi0+b3JpZ19oYXNoX2xvY2spOworCXJldHVybiAwOworCitlcnI6CisJc3Bpbl91bmxvY2tfYmgoJmJhdF9wcml2LT5vcmlnX2hhc2hfbG9jayk7CisJcmV0dXJuIC1FTk9NRU07Cit9CisKK3N0YXRpYyBpbnQgb3JpZ19ub2RlX2RlbF9pZihzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGUsCisJCSAgICAgaW50IG1heF9pZl9udW0sIGludCBkZWxfaWZfbnVtKQoreworCXZvaWQgKmRhdGFfcHRyID0gTlVMTDsKKwlpbnQgY2h1bmtfc2l6ZTsKKworCS8qIGxhc3QgaW50ZXJmYWNlIHdhcyByZW1vdmVkICovCisJaWYgKG1heF9pZl9udW0gPT0gMCkKKwkJZ290byBmcmVlX2JjYXN0X293bjsKKworCWNodW5rX3NpemUgPSBzaXplb2YodW5zaWduZWQgbG9uZykgKiBOVU1fV09SRFM7CisJZGF0YV9wdHIgPSBrbWFsbG9jKG1heF9pZl9udW0gKiBjaHVua19zaXplLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWRhdGFfcHRyKSB7CisJCXByX2VycigiQ2FuJ3QgcmVzaXplIG9yaWc6IG91dCBvZiBtZW1vcnlcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJLyogY29weSBmaXJzdCBwYXJ0ICovCisJbWVtY3B5KGRhdGFfcHRyLCBvcmlnX25vZGUtPmJjYXN0X293biwgZGVsX2lmX251bSAqIGNodW5rX3NpemUpOworCisJLyogY29weSBzZWNvbmQgcGFydCAqLworCW1lbWNweShkYXRhX3B0ciArIGRlbF9pZl9udW0gKiBjaHVua19zaXplLAorCSAgICAgICBvcmlnX25vZGUtPmJjYXN0X293biArICgoZGVsX2lmX251bSArIDEpICogY2h1bmtfc2l6ZSksCisJICAgICAgIChtYXhfaWZfbnVtIC0gZGVsX2lmX251bSkgKiBjaHVua19zaXplKTsKKworZnJlZV9iY2FzdF9vd246CisJa2ZyZWUob3JpZ19ub2RlLT5iY2FzdF9vd24pOworCW9yaWdfbm9kZS0+YmNhc3Rfb3duID0gZGF0YV9wdHI7CisKKwlpZiAobWF4X2lmX251bSA9PSAwKQorCQlnb3RvIGZyZWVfb3duX3N1bTsKKworCWRhdGFfcHRyID0ga21hbGxvYyhtYXhfaWZfbnVtICogc2l6ZW9mKHVpbnQ4X3QpLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWRhdGFfcHRyKSB7CisJCXByX2VycigiQ2FuJ3QgcmVzaXplIG9yaWc6IG91dCBvZiBtZW1vcnlcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJbWVtY3B5KGRhdGFfcHRyLCBvcmlnX25vZGUtPmJjYXN0X293bl9zdW0sCisJICAgICAgIGRlbF9pZl9udW0gKiBzaXplb2YodWludDhfdCkpOworCisJbWVtY3B5KGRhdGFfcHRyICsgZGVsX2lmX251bSAqIHNpemVvZih1aW50OF90KSwKKwkgICAgICAgb3JpZ19ub2RlLT5iY2FzdF9vd25fc3VtICsgKChkZWxfaWZfbnVtICsgMSkgKiBzaXplb2YodWludDhfdCkpLAorCSAgICAgICAobWF4X2lmX251bSAtIGRlbF9pZl9udW0pICogc2l6ZW9mKHVpbnQ4X3QpKTsKKworZnJlZV9vd25fc3VtOgorCWtmcmVlKG9yaWdfbm9kZS0+YmNhc3Rfb3duX3N1bSk7CisJb3JpZ19ub2RlLT5iY2FzdF9vd25fc3VtID0gZGF0YV9wdHI7CisKKwlyZXR1cm4gMDsKK30KKworaW50IG9yaWdfaGFzaF9kZWxfaWYoc3RydWN0IGJhdG1hbl9pZiAqYmF0bWFuX2lmLCBpbnQgbWF4X2lmX251bSkKK3sKKwlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYoYmF0bWFuX2lmLT5zb2Z0X2lmYWNlKTsKKwlzdHJ1Y3QgaGFzaHRhYmxlX3QgKmhhc2ggPSBiYXRfcHJpdi0+b3JpZ19oYXNoOworCXN0cnVjdCBobGlzdF9ub2RlICp3YWxrOworCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkOworCXN0cnVjdCBlbGVtZW50X3QgKmJ1Y2tldDsKKwlzdHJ1Y3QgYmF0bWFuX2lmICpiYXRtYW5faWZfdG1wOworCXN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZTsKKwlpbnQgaSwgcmV0OworCisJLyogcmVzaXplIGFsbCBvcmlnIG5vZGVzIGJlY2F1c2Ugb3JpZ19ub2RlLT5iY2FzdF9vd24oX3N1bSkgZGVwZW5kIG9uCisJICogaWZfbnVtICovCisJc3Bpbl9sb2NrX2JoKCZiYXRfcHJpdi0+b3JpZ19oYXNoX2xvY2spOworCisJZm9yIChpID0gMDsgaSA8IGhhc2gtPnNpemU7IGkrKykgeworCQloZWFkID0gJmhhc2gtPnRhYmxlW2ldOworCisJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGJ1Y2tldCwgd2FsaywgaGVhZCwgaGxpc3QpIHsKKwkJCW9yaWdfbm9kZSA9IGJ1Y2tldC0+ZGF0YTsKKworCQkJcmV0ID0gb3JpZ19ub2RlX2RlbF9pZihvcmlnX25vZGUsIG1heF9pZl9udW0sCisJCQkJCWJhdG1hbl9pZi0+aWZfbnVtKTsKKworCQkJaWYgKHJldCA9PSAtMSkKKwkJCQlnb3RvIGVycjsKKwkJfQorCX0KKworCS8qIHJlbnVtYmVyIHJlbWFpbmluZyBiYXRtYW4gaW50ZXJmYWNlcyBfaW5zaWRlXyBvZiBvcmlnX2hhc2hfbG9jayAqLworCXJjdV9yZWFkX2xvY2soKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShiYXRtYW5faWZfdG1wLCAmaWZfbGlzdCwgbGlzdCkgeworCQlpZiAoYmF0bWFuX2lmX3RtcC0+aWZfc3RhdHVzID09IElGX05PVF9JTl9VU0UpCisJCQljb250aW51ZTsKKworCQlpZiAoYmF0bWFuX2lmID09IGJhdG1hbl9pZl90bXApCisJCQljb250aW51ZTsKKworCQlpZiAoYmF0bWFuX2lmLT5zb2Z0X2lmYWNlICE9IGJhdG1hbl9pZl90bXAtPnNvZnRfaWZhY2UpCisJCQljb250aW51ZTsKKworCQlpZiAoYmF0bWFuX2lmX3RtcC0+aWZfbnVtID4gYmF0bWFuX2lmLT5pZl9udW0pCisJCQliYXRtYW5faWZfdG1wLT5pZl9udW0tLTsKKwl9CisJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwliYXRtYW5faWYtPmlmX251bSA9IC0xOworCXNwaW5fdW5sb2NrX2JoKCZiYXRfcHJpdi0+b3JpZ19oYXNoX2xvY2spOworCXJldHVybiAwOworCitlcnI6CisJc3Bpbl91bmxvY2tfYmgoJmJhdF9wcml2LT5vcmlnX2hhc2hfbG9jayk7CisJcmV0dXJuIC1FTk9NRU07Cit9CmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9vcmlnaW5hdG9yLmggYi9uZXQvYmF0bWFuLWFkdi9vcmlnaW5hdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ3NGNlYgotLS0gL2Rldi9udWxsCisrKyBiL25ldC9iYXRtYW4tYWR2L29yaWdpbmF0b3IuaApAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTAgQi5BLlQuTS5BLk4uIGNvbnRyaWJ1dG9yczoKKyAqCisgKiBNYXJlayBMaW5kbmVyLCBTaW1vbiBXdW5kZXJsaWNoCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxLCBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBfTkVUX0JBVE1BTl9BRFZfT1JJR0lOQVRPUl9IXworI2RlZmluZSBfTkVUX0JBVE1BTl9BRFZfT1JJR0lOQVRPUl9IXworCitpbnQgb3JpZ2luYXRvcl9pbml0KHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYpOwordm9pZCBvcmlnaW5hdG9yX2ZyZWUoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdik7Cit2b2lkIHB1cmdlX29yaWdfcmVmKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYpOworc3RydWN0IG9yaWdfbm9kZSAqZ2V0X29yaWdfbm9kZShzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2LCB1aW50OF90ICphZGRyKTsKK3N0cnVjdCBuZWlnaF9ub2RlICoKK2NyZWF0ZV9uZWlnaGJvcihzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGUsIHN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbmVpZ2hfbm9kZSwKKwkJdWludDhfdCAqbmVpZ2gsIHN0cnVjdCBiYXRtYW5faWYgKmlmX2luY29taW5nKTsKK2ludCBvcmlnX3NlcV9wcmludF90ZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICpvZmZzZXQpOworaW50IG9yaWdfaGFzaF9hZGRfaWYoc3RydWN0IGJhdG1hbl9pZiAqYmF0bWFuX2lmLCBpbnQgbWF4X2lmX251bSk7CitpbnQgb3JpZ19oYXNoX2RlbF9pZihzdHJ1Y3QgYmF0bWFuX2lmICpiYXRtYW5faWYsIGludCBtYXhfaWZfbnVtKTsKKworCisvKiByZXR1cm5zIDEgaWYgdGhleSBhcmUgdGhlIHNhbWUgb3JpZ2luYXRvciAqLworc3RhdGljIGlubGluZSBpbnQgY29tcGFyZV9vcmlnKHZvaWQgKmRhdGExLCB2b2lkICpkYXRhMikKK3sKKwlyZXR1cm4gKG1lbWNtcChkYXRhMSwgZGF0YTIsIEVUSF9BTEVOKSA9PSAwID8gMSA6IDApOworfQorCisvKiBoYXNoZnVuY3Rpb24gdG8gY2hvb3NlIGFuIGVudHJ5IGluIGEgaGFzaCB0YWJsZSBvZiBnaXZlbiBzaXplICovCisvKiBoYXNoIGFsZ29yaXRobSBmcm9tIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSGFzaF90YWJsZSAqLworc3RhdGljIGlubGluZSBpbnQgY2hvb3NlX29yaWcodm9pZCAqZGF0YSwgaW50MzJfdCBzaXplKQoreworCXVuc2lnbmVkIGNoYXIgKmtleSA9IGRhdGE7CisJdWludDMyX3QgaGFzaCA9IDA7CisJc2l6ZV90IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKSB7CisJCWhhc2ggKz0ga2V5W2ldOworCQloYXNoICs9IChoYXNoIDw8IDEwKTsKKwkJaGFzaCBePSAoaGFzaCA+PiA2KTsKKwl9CisKKwloYXNoICs9IChoYXNoIDw8IDMpOworCWhhc2ggXj0gKGhhc2ggPj4gMTEpOworCWhhc2ggKz0gKGhhc2ggPDwgMTUpOworCisJcmV0dXJuIGhhc2ggJSBzaXplOworfQorCisjZW5kaWYgLyogX05FVF9CQVRNQU5fQURWX09SSUdJTkFUT1JfSF8gKi8KZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L3BhY2tldC5oIGIvbmV0L2JhdG1hbi1hZHYvcGFja2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ5ZmRmNwotLS0gL2Rldi9udWxsCisrKyBiL25ldC9iYXRtYW4tYWR2L3BhY2tldC5oCkBAIC0wLDAgKzEsMTM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTAgQi5BLlQuTS5BLk4uIGNvbnRyaWJ1dG9yczoKKyAqCisgKiBNYXJlayBMaW5kbmVyLCBTaW1vbiBXdW5kZXJsaWNoCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxLCBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBfTkVUX0JBVE1BTl9BRFZfUEFDS0VUX0hfCisjZGVmaW5lIF9ORVRfQkFUTUFOX0FEVl9QQUNLRVRfSF8KKworI2RlZmluZSBFVEhfUF9CQVRNQU4gIDB4NDMwNQkvKiB1bm9mZmljaWFsL25vdCByZWdpc3RlcmVkIEV0aGVydHlwZSAqLworCisjZGVmaW5lIEJBVF9QQUNLRVQgICAgICAgMHgwMQorI2RlZmluZSBCQVRfSUNNUCAgICAgICAgIDB4MDIKKyNkZWZpbmUgQkFUX1VOSUNBU1QgICAgICAweDAzCisjZGVmaW5lIEJBVF9CQ0FTVCAgICAgICAgMHgwNAorI2RlZmluZSBCQVRfVklTICAgICAgICAgIDB4MDUKKyNkZWZpbmUgQkFUX1VOSUNBU1RfRlJBRyAweDA2CisKKy8qIHRoaXMgZmlsZSBpcyBpbmNsdWRlZCBieSBiYXRjdGwgd2hpY2ggbmVlZHMgdGhlc2UgZGVmaW5lcyAqLworI2RlZmluZSBDT01QQVRfVkVSU0lPTiAxMgorI2RlZmluZSBESVJFQ1RMSU5LIDB4NDAKKyNkZWZpbmUgVklTX1NFUlZFUiAweDIwCisjZGVmaW5lIFBSSU1BUklFU19GSVJTVF9IT1AgMHgxMAorCisvKiBJQ01QIG1lc3NhZ2UgdHlwZXMgKi8KKyNkZWZpbmUgRUNIT19SRVBMWSAwCisjZGVmaW5lIERFU1RJTkFUSU9OX1VOUkVBQ0hBQkxFIDMKKyNkZWZpbmUgRUNIT19SRVFVRVNUIDgKKyNkZWZpbmUgVFRMX0VYQ0VFREVEIDExCisjZGVmaW5lIFBBUkFNRVRFUl9QUk9CTEVNIDEyCisKKy8qIHZpcyBkZWZpbmVzICovCisjZGVmaW5lIFZJU19UWVBFX1NFUlZFUl9TWU5DCQkwCisjZGVmaW5lIFZJU19UWVBFX0NMSUVOVF9VUERBVEUJCTEKKworLyogZnJhZ21lbnRhdGlvbiBkZWZpbmVzICovCisjZGVmaW5lIFVOSV9GUkFHX0hFQUQgMHgwMQorCitzdHJ1Y3QgYmF0bWFuX3BhY2tldCB7CisJdWludDhfdCAgcGFja2V0X3R5cGU7CisJdWludDhfdCAgdmVyc2lvbjsgIC8qIGJhdG1hbiB2ZXJzaW9uIGZpZWxkICovCisJdWludDhfdCAgZmxhZ3M7ICAgIC8qIDB4NDA6IERJUkVDVExJTksgZmxhZywgMHgyMCBWSVNfU0VSVkVSIGZsYWcuLi4gKi8KKwl1aW50OF90ICB0cTsKKwl1aW50MzJfdCBzZXFubzsKKwl1aW50OF90ICBvcmlnWzZdOworCXVpbnQ4X3QgIHByZXZfc2VuZGVyWzZdOworCXVpbnQ4X3QgIHR0bDsKKwl1aW50OF90ICBudW1faG5hOworCXVpbnQ4X3QgIGd3X2ZsYWdzOyAgLyogZmxhZ3MgcmVsYXRlZCB0byBnYXRld2F5IGNsYXNzICovCisJdWludDhfdCAgYWxpZ247Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIEJBVF9QQUNLRVRfTEVOIHNpemVvZihzdHJ1Y3QgYmF0bWFuX3BhY2tldCkKKworc3RydWN0IGljbXBfcGFja2V0IHsKKwl1aW50OF90ICBwYWNrZXRfdHlwZTsKKwl1aW50OF90ICB2ZXJzaW9uOyAgLyogYmF0bWFuIHZlcnNpb24gZmllbGQgKi8KKwl1aW50OF90ICBtc2dfdHlwZTsgLyogc2VlIElDTVAgbWVzc2FnZSB0eXBlcyBhYm92ZSAqLworCXVpbnQ4X3QgIHR0bDsKKwl1aW50OF90ICBkc3RbNl07CisJdWludDhfdCAgb3JpZ1s2XTsKKwl1aW50MTZfdCBzZXFubzsKKwl1aW50OF90ICB1aWQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIEJBVF9SUl9MRU4gMTYKKworLyogaWNtcF9wYWNrZXRfcnIgbXVzdCBzdGFydCB3aXRoIGFsbCBmaWVsZHMgZnJvbSBpbWNwX3BhY2tldAorICogYXMgdGhpcyBpcyBhc3N1bWVkIGJ5IGNvZGUgdGhhdCBoYW5kbGVzIElDTVAgcGFja2V0cyAqLworc3RydWN0IGljbXBfcGFja2V0X3JyIHsKKwl1aW50OF90ICBwYWNrZXRfdHlwZTsKKwl1aW50OF90ICB2ZXJzaW9uOyAgLyogYmF0bWFuIHZlcnNpb24gZmllbGQgKi8KKwl1aW50OF90ICBtc2dfdHlwZTsgLyogc2VlIElDTVAgbWVzc2FnZSB0eXBlcyBhYm92ZSAqLworCXVpbnQ4X3QgIHR0bDsKKwl1aW50OF90ICBkc3RbNl07CisJdWludDhfdCAgb3JpZ1s2XTsKKwl1aW50MTZfdCBzZXFubzsKKwl1aW50OF90ICB1aWQ7CisJdWludDhfdCAgcnJfY3VyOworCXVpbnQ4X3QgIHJyW0JBVF9SUl9MRU5dW0VUSF9BTEVOXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCB1bmljYXN0X3BhY2tldCB7CisJdWludDhfdCAgcGFja2V0X3R5cGU7CisJdWludDhfdCAgdmVyc2lvbjsgIC8qIGJhdG1hbiB2ZXJzaW9uIGZpZWxkICovCisJdWludDhfdCAgZGVzdFs2XTsKKwl1aW50OF90ICB0dGw7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgdW5pY2FzdF9mcmFnX3BhY2tldCB7CisJdWludDhfdCAgcGFja2V0X3R5cGU7CisJdWludDhfdCAgdmVyc2lvbjsgIC8qIGJhdG1hbiB2ZXJzaW9uIGZpZWxkICovCisJdWludDhfdCAgZGVzdFs2XTsKKwl1aW50OF90ICB0dGw7CisJdWludDhfdCAgZmxhZ3M7CisJdWludDhfdCAgb3JpZ1s2XTsKKwl1aW50MTZfdCBzZXFubzsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBiY2FzdF9wYWNrZXQgeworCXVpbnQ4X3QgIHBhY2tldF90eXBlOworCXVpbnQ4X3QgIHZlcnNpb247ICAvKiBiYXRtYW4gdmVyc2lvbiBmaWVsZCAqLworCXVpbnQ4X3QgIG9yaWdbNl07CisJdWludDhfdCAgdHRsOworCXVpbnQzMl90IHNlcW5vOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IHZpc19wYWNrZXQgeworCXVpbnQ4X3QgIHBhY2tldF90eXBlOworCXVpbnQ4X3QgIHZlcnNpb247ICAgICAgICAvKiBiYXRtYW4gdmVyc2lvbiBmaWVsZCAqLworCXVpbnQ4X3QgIHZpc190eXBlOwkgLyogd2hpY2ggdHlwZSBvZiB2aXMtcGFydGljaXBhbnQgc2VudCB0aGlzPyAqLworCXVpbnQ4X3QgIGVudHJpZXM7CSAvKiBudW1iZXIgb2YgZW50cmllcyBiZWhpbmQgdGhpcyBzdHJ1Y3QgKi8KKwl1aW50MzJfdCBzZXFubzsJCSAvKiBzZXF1ZW5jZSBudW1iZXIgKi8KKwl1aW50OF90ICB0dGw7CQkgLyogVFRMICovCisJdWludDhfdCAgdmlzX29yaWdbNl07CSAvKiBvcmlnaW5hdG9yIHRoYXQgaW5mb3JtcyBhYm91dCBpdHMKKwkJCQkgICogbmVpZ2hib3JzICovCisJdWludDhfdCAgdGFyZ2V0X29yaWdbNl07IC8qIHdobyBzaG91bGQgcmVjZWl2ZSB0aGlzIHBhY2tldCAqLworCXVpbnQ4X3QgIHNlbmRlcl9vcmlnWzZdOyAvKiB3aG8gc2VudCBvciByZWJyb2FkY2FzdGVkIHRoaXMgcGFja2V0ICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZW5kaWYgLyogX05FVF9CQVRNQU5fQURWX1BBQ0tFVF9IXyAqLwpkaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvcmluZ19idWZmZXIuYyBiL25ldC9iYXRtYW4tYWR2L3JpbmdfYnVmZmVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVmZDM3YwotLS0gL2Rldi9udWxsCisrKyBiL25ldC9iYXRtYW4tYWR2L3JpbmdfYnVmZmVyLmMKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDEwIEIuQS5ULk0uQS5OLiBjb250cmlidXRvcnM6CisgKgorICogTWFyZWsgTGluZG5lcgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSwgVVNBCisgKgorICovCisKKyNpbmNsdWRlICJtYWluLmgiCisjaW5jbHVkZSAicmluZ19idWZmZXIuaCIKKwordm9pZCByaW5nX2J1ZmZlcl9zZXQodWludDhfdCBscV9yZWN2W10sIHVpbnQ4X3QgKmxxX2luZGV4LCB1aW50OF90IHZhbHVlKQoreworCWxxX3JlY3ZbKmxxX2luZGV4XSA9IHZhbHVlOworCSpscV9pbmRleCA9ICgqbHFfaW5kZXggKyAxKSAlIFRRX0dMT0JBTF9XSU5ET1dfU0laRTsKK30KKwordWludDhfdCByaW5nX2J1ZmZlcl9hdmcodWludDhfdCBscV9yZWN2W10pCit7CisJdWludDhfdCAqcHRyOworCXVpbnQxNl90IGNvdW50ID0gMCwgaSA9IDAsIHN1bSA9IDA7CisKKwlwdHIgPSBscV9yZWN2OworCisJd2hpbGUgKGkgPCBUUV9HTE9CQUxfV0lORE9XX1NJWkUpIHsKKwkJaWYgKCpwdHIgIT0gMCkgeworCQkJY291bnQrKzsKKwkJCXN1bSArPSAqcHRyOworCQl9CisKKwkJaSsrOworCQlwdHIrKzsKKwl9CisKKwlpZiAoY291bnQgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gKHVpbnQ4X3QpKHN1bSAvIGNvdW50KTsKK30KZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L3JpbmdfYnVmZmVyLmggYi9uZXQvYmF0bWFuLWFkdi9yaW5nX2J1ZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiMGNiOWEKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvYmF0bWFuLWFkdi9yaW5nX2J1ZmZlci5oCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMCBCLkEuVC5NLkEuTi4gY29udHJpYnV0b3JzOgorICoKKyAqIE1hcmVrIExpbmRuZXIKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEsIFVTQQorICoKKyAqLworCisjaWZuZGVmIF9ORVRfQkFUTUFOX0FEVl9SSU5HX0JVRkZFUl9IXworI2RlZmluZSBfTkVUX0JBVE1BTl9BRFZfUklOR19CVUZGRVJfSF8KKwordm9pZCByaW5nX2J1ZmZlcl9zZXQodWludDhfdCBscV9yZWN2W10sIHVpbnQ4X3QgKmxxX2luZGV4LCB1aW50OF90IHZhbHVlKTsKK3VpbnQ4X3QgcmluZ19idWZmZXJfYXZnKHVpbnQ4X3QgbHFfcmVjdltdKTsKKworI2VuZGlmIC8qIF9ORVRfQkFUTUFOX0FEVl9SSU5HX0JVRkZFUl9IXyAqLwpkaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvcm91dGluZy5jIGIvbmV0L2JhdG1hbi1hZHYvcm91dGluZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4MjhlZGQKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvYmF0bWFuLWFkdi9yb3V0aW5nLmMKQEAgLTAsMCArMSwxMzk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTAgQi5BLlQuTS5BLk4uIGNvbnRyaWJ1dG9yczoKKyAqCisgKiBNYXJlayBMaW5kbmVyLCBTaW1vbiBXdW5kZXJsaWNoCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxLCBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgIm1haW4uaCIKKyNpbmNsdWRlICJyb3V0aW5nLmgiCisjaW5jbHVkZSAic2VuZC5oIgorI2luY2x1ZGUgImhhc2guaCIKKyNpbmNsdWRlICJzb2Z0LWludGVyZmFjZS5oIgorI2luY2x1ZGUgImhhcmQtaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiaWNtcF9zb2NrZXQuaCIKKyNpbmNsdWRlICJ0cmFuc2xhdGlvbi10YWJsZS5oIgorI2luY2x1ZGUgIm9yaWdpbmF0b3IuaCIKKyNpbmNsdWRlICJ0eXBlcy5oIgorI2luY2x1ZGUgInJpbmdfYnVmZmVyLmgiCisjaW5jbHVkZSAidmlzLmgiCisjaW5jbHVkZSAiYWdncmVnYXRpb24uaCIKKyNpbmNsdWRlICJnYXRld2F5X2NvbW1vbi5oIgorI2luY2x1ZGUgImdhdGV3YXlfY2xpZW50LmgiCisjaW5jbHVkZSAidW5pY2FzdC5oIgorCit2b2lkIHNsaWRlX293bl9iY2FzdF93aW5kb3coc3RydWN0IGJhdG1hbl9pZiAqYmF0bWFuX2lmKQoreworCXN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYgPSBuZXRkZXZfcHJpdihiYXRtYW5faWYtPnNvZnRfaWZhY2UpOworCXN0cnVjdCBoYXNodGFibGVfdCAqaGFzaCA9IGJhdF9wcml2LT5vcmlnX2hhc2g7CisJc3RydWN0IGhsaXN0X25vZGUgKndhbGs7CisJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7CisJc3RydWN0IGVsZW1lbnRfdCAqYnVja2V0OworCXN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZTsKKwl1bnNpZ25lZCBsb25nICp3b3JkOworCWludCBpOworCXNpemVfdCB3b3JkX2luZGV4OworCisJc3Bpbl9sb2NrX2JoKCZiYXRfcHJpdi0+b3JpZ19oYXNoX2xvY2spOworCisJZm9yIChpID0gMDsgaSA8IGhhc2gtPnNpemU7IGkrKykgeworCQloZWFkID0gJmhhc2gtPnRhYmxlW2ldOworCisJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGJ1Y2tldCwgd2FsaywgaGVhZCwgaGxpc3QpIHsKKwkJCW9yaWdfbm9kZSA9IGJ1Y2tldC0+ZGF0YTsKKwkJCXdvcmRfaW5kZXggPSBiYXRtYW5faWYtPmlmX251bSAqIE5VTV9XT1JEUzsKKwkJCXdvcmQgPSAmKG9yaWdfbm9kZS0+YmNhc3Rfb3duW3dvcmRfaW5kZXhdKTsKKworCQkJYml0X2dldF9wYWNrZXQoYmF0X3ByaXYsIHdvcmQsIDEsIDApOworCQkJb3JpZ19ub2RlLT5iY2FzdF9vd25fc3VtW2JhdG1hbl9pZi0+aWZfbnVtXSA9CisJCQkJYml0X3BhY2tldF9jb3VudCh3b3JkKTsKKwkJfQorCX0KKworCXNwaW5fdW5sb2NrX2JoKCZiYXRfcHJpdi0+b3JpZ19oYXNoX2xvY2spOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfSE5BKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYsIHN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZSwKKwkJICAgICAgIHVuc2lnbmVkIGNoYXIgKmhuYV9idWZmLCBpbnQgaG5hX2J1ZmZfbGVuKQoreworCWlmICgoaG5hX2J1ZmZfbGVuICE9IG9yaWdfbm9kZS0+aG5hX2J1ZmZfbGVuKSB8fAorCSAgICAoKGhuYV9idWZmX2xlbiA+IDApICYmCisJICAgICAob3JpZ19ub2RlLT5obmFfYnVmZl9sZW4gPiAwKSAmJgorCSAgICAgKG1lbWNtcChvcmlnX25vZGUtPmhuYV9idWZmLCBobmFfYnVmZiwgaG5hX2J1ZmZfbGVuKSAhPSAwKSkpIHsKKworCQlpZiAob3JpZ19ub2RlLT5obmFfYnVmZl9sZW4gPiAwKQorCQkJaG5hX2dsb2JhbF9kZWxfb3JpZyhiYXRfcHJpdiwgb3JpZ19ub2RlLAorCQkJCQkgICAgIm9yaWdpbmF0b3IgY2hhbmdlZCBobmEiKTsKKworCQlpZiAoKGhuYV9idWZmX2xlbiA+IDApICYmIChobmFfYnVmZikpCisJCQlobmFfZ2xvYmFsX2FkZF9vcmlnKGJhdF9wcml2LCBvcmlnX25vZGUsCisJCQkJCSAgICBobmFfYnVmZiwgaG5hX2J1ZmZfbGVuKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZV9yb3V0ZShzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2LAorCQkJIHN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZSwKKwkJCSBzdHJ1Y3QgbmVpZ2hfbm9kZSAqbmVpZ2hfbm9kZSwKKwkJCSB1bnNpZ25lZCBjaGFyICpobmFfYnVmZiwgaW50IGhuYV9idWZmX2xlbikKK3sKKwkvKiByb3V0ZSBkZWxldGVkICovCisJaWYgKChvcmlnX25vZGUtPnJvdXRlcikgJiYgKCFuZWlnaF9ub2RlKSkgeworCisJCWJhdF9kYmcoREJHX1JPVVRFUywgYmF0X3ByaXYsICJEZWxldGluZyByb3V0ZSB0b3dhcmRzOiAlcE1cbiIsCisJCQlvcmlnX25vZGUtPm9yaWcpOworCQlobmFfZ2xvYmFsX2RlbF9vcmlnKGJhdF9wcml2LCBvcmlnX25vZGUsCisJCQkJICAgICJvcmlnaW5hdG9yIHRpbWVkIG91dCIpOworCisJCS8qIHJvdXRlIGFkZGVkICovCisJfSBlbHNlIGlmICgoIW9yaWdfbm9kZS0+cm91dGVyKSAmJiAobmVpZ2hfbm9kZSkpIHsKKworCQliYXRfZGJnKERCR19ST1VURVMsIGJhdF9wcml2LAorCQkJIkFkZGluZyByb3V0ZSB0b3dhcmRzOiAlcE0gKHZpYSAlcE0pXG4iLAorCQkJb3JpZ19ub2RlLT5vcmlnLCBuZWlnaF9ub2RlLT5hZGRyKTsKKwkJaG5hX2dsb2JhbF9hZGRfb3JpZyhiYXRfcHJpdiwgb3JpZ19ub2RlLAorCQkJCSAgICBobmFfYnVmZiwgaG5hX2J1ZmZfbGVuKTsKKworCQkvKiByb3V0ZSBjaGFuZ2VkICovCisJfSBlbHNlIHsKKwkJYmF0X2RiZyhEQkdfUk9VVEVTLCBiYXRfcHJpdiwKKwkJCSJDaGFuZ2luZyByb3V0ZSB0b3dhcmRzOiAlcE0gIgorCQkJIihub3cgdmlhICVwTSAtIHdhcyB2aWEgJXBNKVxuIiwKKwkJCW9yaWdfbm9kZS0+b3JpZywgbmVpZ2hfbm9kZS0+YWRkciwKKwkJCW9yaWdfbm9kZS0+cm91dGVyLT5hZGRyKTsKKwl9CisKKwlvcmlnX25vZGUtPnJvdXRlciA9IG5laWdoX25vZGU7Cit9CisKKwordm9pZCB1cGRhdGVfcm91dGVzKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYsIHN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZSwKKwkJICAgc3RydWN0IG5laWdoX25vZGUgKm5laWdoX25vZGUsIHVuc2lnbmVkIGNoYXIgKmhuYV9idWZmLAorCQkgICBpbnQgaG5hX2J1ZmZfbGVuKQoreworCisJaWYgKCFvcmlnX25vZGUpCisJCXJldHVybjsKKworCWlmIChvcmlnX25vZGUtPnJvdXRlciAhPSBuZWlnaF9ub2RlKQorCQl1cGRhdGVfcm91dGUoYmF0X3ByaXYsIG9yaWdfbm9kZSwgbmVpZ2hfbm9kZSwKKwkJCSAgICAgaG5hX2J1ZmYsIGhuYV9idWZmX2xlbik7CisJLyogbWF5IGJlIGp1c3QgSE5BIGNoYW5nZWQgKi8KKwllbHNlCisJCXVwZGF0ZV9ITkEoYmF0X3ByaXYsIG9yaWdfbm9kZSwgaG5hX2J1ZmYsIGhuYV9idWZmX2xlbik7Cit9CisKK3N0YXRpYyBpbnQgaXNfYmlkaXJlY3Rpb25hbF9uZWlnaChzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGUsCisJCQkJc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19uZWlnaF9ub2RlLAorCQkJCXN0cnVjdCBiYXRtYW5fcGFja2V0ICpiYXRtYW5fcGFja2V0LAorCQkJCXN0cnVjdCBiYXRtYW5faWYgKmlmX2luY29taW5nKQoreworCXN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYgPSBuZXRkZXZfcHJpdihpZl9pbmNvbWluZy0+c29mdF9pZmFjZSk7CisJc3RydWN0IG5laWdoX25vZGUgKm5laWdoX25vZGUgPSBOVUxMLCAqdG1wX25laWdoX25vZGUgPSBOVUxMOworCXVuc2lnbmVkIGNoYXIgdG90YWxfY291bnQ7CisKKwlpZiAob3JpZ19ub2RlID09IG9yaWdfbmVpZ2hfbm9kZSkgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRtcF9uZWlnaF9ub2RlLAorCQkJCSAgICAmb3JpZ19ub2RlLT5uZWlnaF9saXN0LAorCQkJCSAgICBsaXN0KSB7CisKKwkJCWlmIChjb21wYXJlX29yaWcodG1wX25laWdoX25vZGUtPmFkZHIsCisJCQkJCSBvcmlnX25laWdoX25vZGUtPm9yaWcpICYmCisJCQkgICAgKHRtcF9uZWlnaF9ub2RlLT5pZl9pbmNvbWluZyA9PSBpZl9pbmNvbWluZykpCisJCQkJbmVpZ2hfbm9kZSA9IHRtcF9uZWlnaF9ub2RlOworCQl9CisKKwkJaWYgKCFuZWlnaF9ub2RlKQorCQkJbmVpZ2hfbm9kZSA9IGNyZWF0ZV9uZWlnaGJvcihvcmlnX25vZGUsCisJCQkJCQkgICAgIG9yaWdfbmVpZ2hfbm9kZSwKKwkJCQkJCSAgICAgb3JpZ19uZWlnaF9ub2RlLT5vcmlnLAorCQkJCQkJICAgICBpZl9pbmNvbWluZyk7CisJCS8qIGNyZWF0ZV9uZWlnaGJvciBmYWlsZWQsIHJldHVybiAwICovCisJCWlmICghbmVpZ2hfbm9kZSkKKwkJCXJldHVybiAwOworCisJCW5laWdoX25vZGUtPmxhc3RfdmFsaWQgPSBqaWZmaWVzOworCX0gZWxzZSB7CisJCS8qIGZpbmQgcGFja2V0IGNvdW50IG9mIGNvcnJlc3BvbmRpbmcgb25lIGhvcCBuZWlnaGJvciAqLworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRtcF9uZWlnaF9ub2RlLAorCQkJCSAgICAmb3JpZ19uZWlnaF9ub2RlLT5uZWlnaF9saXN0LCBsaXN0KSB7CisKKwkJCWlmIChjb21wYXJlX29yaWcodG1wX25laWdoX25vZGUtPmFkZHIsCisJCQkJCSBvcmlnX25laWdoX25vZGUtPm9yaWcpICYmCisJCQkgICAgKHRtcF9uZWlnaF9ub2RlLT5pZl9pbmNvbWluZyA9PSBpZl9pbmNvbWluZykpCisJCQkJbmVpZ2hfbm9kZSA9IHRtcF9uZWlnaF9ub2RlOworCQl9CisKKwkJaWYgKCFuZWlnaF9ub2RlKQorCQkJbmVpZ2hfbm9kZSA9IGNyZWF0ZV9uZWlnaGJvcihvcmlnX25laWdoX25vZGUsCisJCQkJCQkgICAgIG9yaWdfbmVpZ2hfbm9kZSwKKwkJCQkJCSAgICAgb3JpZ19uZWlnaF9ub2RlLT5vcmlnLAorCQkJCQkJICAgICBpZl9pbmNvbWluZyk7CisJCS8qIGNyZWF0ZV9uZWlnaGJvciBmYWlsZWQsIHJldHVybiAwICovCisJCWlmICghbmVpZ2hfbm9kZSkKKwkJCXJldHVybiAwOworCX0KKworCW9yaWdfbm9kZS0+bGFzdF92YWxpZCA9IGppZmZpZXM7CisKKwkvKiBwYXkgYXR0ZW50aW9uIHRvIG5vdCBnZXQgYSB2YWx1ZSBiaWdnZXIgdGhhbiAxMDAgJSAqLworCXRvdGFsX2NvdW50ID0gKG9yaWdfbmVpZ2hfbm9kZS0+YmNhc3Rfb3duX3N1bVtpZl9pbmNvbWluZy0+aWZfbnVtXSA+CisJCSAgICAgICBuZWlnaF9ub2RlLT5yZWFsX3BhY2tldF9jb3VudCA/CisJCSAgICAgICBuZWlnaF9ub2RlLT5yZWFsX3BhY2tldF9jb3VudCA6CisJCSAgICAgICBvcmlnX25laWdoX25vZGUtPmJjYXN0X293bl9zdW1baWZfaW5jb21pbmctPmlmX251bV0pOworCisJLyogaWYgd2UgaGF2ZSB0b28gZmV3IHBhY2tldHMgKHRvbyBsZXNzIGRhdGEpIHdlIHNldCB0cV9vd24gdG8gemVybyAqLworCS8qIGlmIHdlIHJlY2VpdmUgdG9vIGZldyBwYWNrZXRzIGl0IGlzIG5vdCBjb25zaWRlcmVkIGJpZGlyZWN0aW9uYWwgKi8KKwlpZiAoKHRvdGFsX2NvdW50IDwgVFFfTE9DQUxfQklEUkVDVF9TRU5EX01JTklNVU0pIHx8CisJICAgIChuZWlnaF9ub2RlLT5yZWFsX3BhY2tldF9jb3VudCA8IFRRX0xPQ0FMX0JJRFJFQ1RfUkVDVl9NSU5JTVVNKSkKKwkJb3JpZ19uZWlnaF9ub2RlLT50cV9vd24gPSAwOworCWVsc2UKKwkJLyogbmVpZ2hfbm9kZS0+cmVhbF9wYWNrZXRfY291bnQgaXMgbmV2ZXIgemVybyBhcyB3ZQorCQkgKiBvbmx5IHB1cmdlIG9sZCBpbmZvcm1hdGlvbiB3aGVuIGdldHRpbmcgbmV3CisJCSAqIGluZm9ybWF0aW9uICovCisJCW9yaWdfbmVpZ2hfbm9kZS0+dHFfb3duID0gKFRRX01BWF9WQUxVRSAqIHRvdGFsX2NvdW50KSAvCisJCQluZWlnaF9ub2RlLT5yZWFsX3BhY2tldF9jb3VudDsKKworCS8qCisJICogMSAtICgoMS14KSAqKiAzKSwgbm9ybWFsaXplZCB0byBUUV9NQVhfVkFMVUUgdGhpcyBkb2VzCisJICogYWZmZWN0IHRoZSBuZWFybHktc3ltbWV0cmljIGxpbmtzIG9ubHkgYSBsaXR0bGUsIGJ1dAorCSAqIHB1bmlzaGVzIGFzeW1tZXRyaWMgbGlua3MgbW9yZS4gIFRoaXMgd2lsbCBnaXZlIGEgdmFsdWUKKwkgKiBiZXR3ZWVuIDAgYW5kIFRRX01BWF9WQUxVRQorCSAqLworCW9yaWdfbmVpZ2hfbm9kZS0+dHFfYXN5bV9wZW5hbHR5ID0KKwkJVFFfTUFYX1ZBTFVFIC0KKwkJKFRRX01BWF9WQUxVRSAqCisJCSAoVFFfTE9DQUxfV0lORE9XX1NJWkUgLSBuZWlnaF9ub2RlLT5yZWFsX3BhY2tldF9jb3VudCkgKgorCQkgKFRRX0xPQ0FMX1dJTkRPV19TSVpFIC0gbmVpZ2hfbm9kZS0+cmVhbF9wYWNrZXRfY291bnQpICoKKwkJIChUUV9MT0NBTF9XSU5ET1dfU0laRSAtIG5laWdoX25vZGUtPnJlYWxfcGFja2V0X2NvdW50KSkgLworCQkoVFFfTE9DQUxfV0lORE9XX1NJWkUgKgorCQkgVFFfTE9DQUxfV0lORE9XX1NJWkUgKgorCQkgVFFfTE9DQUxfV0lORE9XX1NJWkUpOworCisJYmF0bWFuX3BhY2tldC0+dHEgPSAoKGJhdG1hbl9wYWNrZXQtPnRxICoKKwkJCSAgICAgIG9yaWdfbmVpZ2hfbm9kZS0+dHFfb3duICoKKwkJCSAgICAgIG9yaWdfbmVpZ2hfbm9kZS0+dHFfYXN5bV9wZW5hbHR5KSAvCisJCQkgICAgIChUUV9NQVhfVkFMVUUgKiBUUV9NQVhfVkFMVUUpKTsKKworCWJhdF9kYmcoREJHX0JBVE1BTiwgYmF0X3ByaXYsCisJCSJiaWRpcmVjdGlvbmFsOiAiCisJCSJvcmlnID0gJS0xNXBNIG5laWdoID0gJS0xNXBNID0+IG93bl9iY2FzdCA9ICUyaSwgIgorCQkicmVhbCByZWN2ID0gJTJpLCBsb2NhbCB0cTogJTNpLCBhc3ltX3BlbmFsdHk6ICUzaSwgIgorCQkidG90YWwgdHE6ICUzaVxuIiwKKwkJb3JpZ19ub2RlLT5vcmlnLCBvcmlnX25laWdoX25vZGUtPm9yaWcsIHRvdGFsX2NvdW50LAorCQluZWlnaF9ub2RlLT5yZWFsX3BhY2tldF9jb3VudCwgb3JpZ19uZWlnaF9ub2RlLT50cV9vd24sCisJCW9yaWdfbmVpZ2hfbm9kZS0+dHFfYXN5bV9wZW5hbHR5LCBiYXRtYW5fcGFja2V0LT50cSk7CisKKwkvKiBpZiBsaW5rIGhhcyB0aGUgbWluaW11bSByZXF1aXJlZCB0cmFuc21pc3Npb24gcXVhbGl0eQorCSAqIGNvbnNpZGVyIGl0IGJpZGlyZWN0aW9uYWwgKi8KKwlpZiAoYmF0bWFuX3BhY2tldC0+dHEgPj0gVFFfVE9UQUxfQklEUkVDVF9MSU1JVCkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlX29yaWcoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiwKKwkJCXN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZSwKKwkJCXN0cnVjdCBldGhoZHIgKmV0aGhkciwKKwkJCXN0cnVjdCBiYXRtYW5fcGFja2V0ICpiYXRtYW5fcGFja2V0LAorCQkJc3RydWN0IGJhdG1hbl9pZiAqaWZfaW5jb21pbmcsCisJCQl1bnNpZ25lZCBjaGFyICpobmFfYnVmZiwgaW50IGhuYV9idWZmX2xlbiwKKwkJCWNoYXIgaXNfZHVwbGljYXRlKQoreworCXN0cnVjdCBuZWlnaF9ub2RlICpuZWlnaF9ub2RlID0gTlVMTCwgKnRtcF9uZWlnaF9ub2RlID0gTlVMTDsKKwlpbnQgdG1wX2huYV9idWZmX2xlbjsKKworCWJhdF9kYmcoREJHX0JBVE1BTiwgYmF0X3ByaXYsICJ1cGRhdGVfb3JpZ2luYXRvcigpOiAiCisJCSJTZWFyY2hpbmcgYW5kIHVwZGF0aW5nIG9yaWdpbmF0b3IgZW50cnkgb2YgcmVjZWl2ZWQgcGFja2V0XG4iKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkodG1wX25laWdoX25vZGUsICZvcmlnX25vZGUtPm5laWdoX2xpc3QsIGxpc3QpIHsKKwkJaWYgKGNvbXBhcmVfb3JpZyh0bXBfbmVpZ2hfbm9kZS0+YWRkciwgZXRoaGRyLT5oX3NvdXJjZSkgJiYKKwkJICAgICh0bXBfbmVpZ2hfbm9kZS0+aWZfaW5jb21pbmcgPT0gaWZfaW5jb21pbmcpKSB7CisJCQluZWlnaF9ub2RlID0gdG1wX25laWdoX25vZGU7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChpc19kdXBsaWNhdGUpCisJCQljb250aW51ZTsKKworCQlyaW5nX2J1ZmZlcl9zZXQodG1wX25laWdoX25vZGUtPnRxX3JlY3YsCisJCQkJJnRtcF9uZWlnaF9ub2RlLT50cV9pbmRleCwgMCk7CisJCXRtcF9uZWlnaF9ub2RlLT50cV9hdmcgPQorCQkJcmluZ19idWZmZXJfYXZnKHRtcF9uZWlnaF9ub2RlLT50cV9yZWN2KTsKKwl9CisKKwlpZiAoIW5laWdoX25vZGUpIHsKKwkJc3RydWN0IG9yaWdfbm9kZSAqb3JpZ190bXA7CisKKwkJb3JpZ190bXAgPSBnZXRfb3JpZ19ub2RlKGJhdF9wcml2LCBldGhoZHItPmhfc291cmNlKTsKKwkJaWYgKCFvcmlnX3RtcCkKKwkJCXJldHVybjsKKworCQluZWlnaF9ub2RlID0gY3JlYXRlX25laWdoYm9yKG9yaWdfbm9kZSwgb3JpZ190bXAsCisJCQkJCSAgICAgZXRoaGRyLT5oX3NvdXJjZSwgaWZfaW5jb21pbmcpOworCQlpZiAoIW5laWdoX25vZGUpCisJCQlyZXR1cm47CisJfSBlbHNlCisJCWJhdF9kYmcoREJHX0JBVE1BTiwgYmF0X3ByaXYsCisJCQkiVXBkYXRpbmcgZXhpc3RpbmcgbGFzdC1ob3AgbmVpZ2hib3Igb2Ygb3JpZ2luYXRvclxuIik7CisKKwlvcmlnX25vZGUtPmZsYWdzID0gYmF0bWFuX3BhY2tldC0+ZmxhZ3M7CisJbmVpZ2hfbm9kZS0+bGFzdF92YWxpZCA9IGppZmZpZXM7CisKKwlyaW5nX2J1ZmZlcl9zZXQobmVpZ2hfbm9kZS0+dHFfcmVjdiwKKwkJCSZuZWlnaF9ub2RlLT50cV9pbmRleCwKKwkJCWJhdG1hbl9wYWNrZXQtPnRxKTsKKwluZWlnaF9ub2RlLT50cV9hdmcgPSByaW5nX2J1ZmZlcl9hdmcobmVpZ2hfbm9kZS0+dHFfcmVjdik7CisKKwlpZiAoIWlzX2R1cGxpY2F0ZSkgeworCQlvcmlnX25vZGUtPmxhc3RfdHRsID0gYmF0bWFuX3BhY2tldC0+dHRsOworCQluZWlnaF9ub2RlLT5sYXN0X3R0bCA9IGJhdG1hbl9wYWNrZXQtPnR0bDsKKwl9CisKKwl0bXBfaG5hX2J1ZmZfbGVuID0gKGhuYV9idWZmX2xlbiA+IGJhdG1hbl9wYWNrZXQtPm51bV9obmEgKiBFVEhfQUxFTiA/CisJCQkgICAgYmF0bWFuX3BhY2tldC0+bnVtX2huYSAqIEVUSF9BTEVOIDogaG5hX2J1ZmZfbGVuKTsKKworCS8qIGlmIHRoaXMgbmVpZ2hib3IgYWxyZWFkeSBpcyBvdXIgbmV4dCBob3AgdGhlcmUgaXMgbm90aGluZworCSAqIHRvIGNoYW5nZSAqLworCWlmIChvcmlnX25vZGUtPnJvdXRlciA9PSBuZWlnaF9ub2RlKQorCQlnb3RvIHVwZGF0ZV9obmE7CisKKwkvKiBpZiB0aGlzIG5laWdoYm9yIGRvZXMgbm90IG9mZmVyIGEgYmV0dGVyIFRRIHdlIHdvbid0IGNvbnNpZGVyIGl0ICovCisJaWYgKChvcmlnX25vZGUtPnJvdXRlcikgJiYKKwkgICAgKG9yaWdfbm9kZS0+cm91dGVyLT50cV9hdmcgPiBuZWlnaF9ub2RlLT50cV9hdmcpKQorCQlnb3RvIHVwZGF0ZV9obmE7CisKKwkvKiBpZiB0aGUgVFEgaXMgdGhlIHNhbWUgYW5kIHRoZSBsaW5rIG5vdCBtb3JlIHN5bWV0cmljIHdlCisJICogd29uJ3QgY29uc2lkZXIgaXQgZWl0aGVyICovCisJaWYgKChvcmlnX25vZGUtPnJvdXRlcikgJiYKKwkgICAgICgobmVpZ2hfbm9kZS0+dHFfYXZnID09IG9yaWdfbm9kZS0+cm91dGVyLT50cV9hdmcpICYmCisJICAgICAob3JpZ19ub2RlLT5yb3V0ZXItPm9yaWdfbm9kZS0+YmNhc3Rfb3duX3N1bVtpZl9pbmNvbWluZy0+aWZfbnVtXQorCSAgICAgID49IG5laWdoX25vZGUtPm9yaWdfbm9kZS0+YmNhc3Rfb3duX3N1bVtpZl9pbmNvbWluZy0+aWZfbnVtXSkpKQorCQlnb3RvIHVwZGF0ZV9obmE7CisKKwl1cGRhdGVfcm91dGVzKGJhdF9wcml2LCBvcmlnX25vZGUsIG5laWdoX25vZGUsCisJCSAgICAgIGhuYV9idWZmLCB0bXBfaG5hX2J1ZmZfbGVuKTsKKwlnb3RvIHVwZGF0ZV9ndzsKKwordXBkYXRlX2huYToKKwl1cGRhdGVfcm91dGVzKGJhdF9wcml2LCBvcmlnX25vZGUsIG9yaWdfbm9kZS0+cm91dGVyLAorCQkgICAgICBobmFfYnVmZiwgdG1wX2huYV9idWZmX2xlbik7CisKK3VwZGF0ZV9ndzoKKwlpZiAob3JpZ19ub2RlLT5nd19mbGFncyAhPSBiYXRtYW5fcGFja2V0LT5nd19mbGFncykKKwkJZ3dfbm9kZV91cGRhdGUoYmF0X3ByaXYsIG9yaWdfbm9kZSwgYmF0bWFuX3BhY2tldC0+Z3dfZmxhZ3MpOworCisJb3JpZ19ub2RlLT5nd19mbGFncyA9IGJhdG1hbl9wYWNrZXQtPmd3X2ZsYWdzOworCisJLyogcmVzdGFydCBnYXRld2F5IHNlbGVjdGlvbiBpZiBmYXN0IG9yIGxhdGUgc3dpdGNoaW5nIHdhcyBlbmFibGVkICovCisJaWYgKChvcmlnX25vZGUtPmd3X2ZsYWdzKSAmJgorCSAgICAoYXRvbWljX3JlYWQoJmJhdF9wcml2LT5nd19tb2RlKSA9PSBHV19NT0RFX0NMSUVOVCkgJiYKKwkgICAgKGF0b21pY19yZWFkKCZiYXRfcHJpdi0+Z3dfc2VsX2NsYXNzKSA+IDIpKQorCQlnd19jaGVja19lbGVjdGlvbihiYXRfcHJpdiwgb3JpZ19ub2RlKTsKK30KKworLyogY2hlY2tzIHdoZXRoZXIgdGhlIGhvc3QgcmVzdGFydGVkIGFuZCBpcyBpbiB0aGUgcHJvdGVjdGlvbiB0aW1lLgorICogcmV0dXJuczoKKyAqICAwIGlmIHRoZSBwYWNrZXQgaXMgdG8gYmUgYWNjZXB0ZWQKKyAqICAxIGlmIHRoZSBwYWNrZXQgaXMgdG8gYmUgaWdub3JlZC4KKyAqLworc3RhdGljIGludCB3aW5kb3dfcHJvdGVjdGVkKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYsCisJCQkgICAgaW50MzJfdCBzZXFfbnVtX2RpZmYsCisJCQkgICAgdW5zaWduZWQgbG9uZyAqbGFzdF9yZXNldCkKK3sKKwlpZiAoKHNlcV9udW1fZGlmZiA8PSAtVFFfTE9DQUxfV0lORE9XX1NJWkUpCisJCXx8IChzZXFfbnVtX2RpZmYgPj0gRVhQRUNURURfU0VRTk9fUkFOR0UpKSB7CisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsICpsYXN0X3Jlc2V0ICsKKwkJCW1zZWNzX3RvX2ppZmZpZXMoUkVTRVRfUFJPVEVDVElPTl9NUykpKSB7CisKKwkJCSpsYXN0X3Jlc2V0ID0gamlmZmllczsKKwkJCWJhdF9kYmcoREJHX0JBVE1BTiwgYmF0X3ByaXYsCisJCQkJIm9sZCBwYWNrZXQgcmVjZWl2ZWQsIHN0YXJ0IHByb3RlY3Rpb25cbiIpOworCisJCQlyZXR1cm4gMDsKKwkJfSBlbHNlCisJCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIHByb2Nlc3NlcyBhIGJhdG1hbiBwYWNrZXQgZm9yIGFsbCBpbnRlcmZhY2VzLCBhZGp1c3RzIHRoZSBzZXF1ZW5jZSBudW1iZXIgYW5kCisgKiBmaW5kcyBvdXQgd2hldGhlciBpdCBpcyBhIGR1cGxpY2F0ZS4KKyAqIHJldHVybnM6CisgKiAgIDEgdGhlIHBhY2tldCBpcyBhIGR1cGxpY2F0ZQorICogICAwIHRoZSBwYWNrZXQgaGFzIG5vdCB5ZXQgYmVlbiByZWNlaXZlZAorICogIC0xIHRoZSBwYWNrZXQgaXMgb2xkIGFuZCBoYXMgYmVlbiByZWNlaXZlZCB3aGlsZSB0aGUgc2Vxbm8gd2luZG93CisgKiAgICAgd2FzIHByb3RlY3RlZC4gQ2FsbGVyIHNob3VsZCBkcm9wIGl0LgorICovCitzdGF0aWMgY2hhciBjb3VudF9yZWFsX3BhY2tldHMoc3RydWN0IGV0aGhkciAqZXRoaGRyLAorCQkJICAgICAgIHN0cnVjdCBiYXRtYW5fcGFja2V0ICpiYXRtYW5fcGFja2V0LAorCQkJICAgICAgIHN0cnVjdCBiYXRtYW5faWYgKmlmX2luY29taW5nKQoreworCXN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYgPSBuZXRkZXZfcHJpdihpZl9pbmNvbWluZy0+c29mdF9pZmFjZSk7CisJc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlOworCXN0cnVjdCBuZWlnaF9ub2RlICp0bXBfbmVpZ2hfbm9kZTsKKwljaGFyIGlzX2R1cGxpY2F0ZSA9IDA7CisJaW50MzJfdCBzZXFfZGlmZjsKKwlpbnQgbmVlZF91cGRhdGUgPSAwOworCWludCBzZXRfbWFyazsKKworCW9yaWdfbm9kZSA9IGdldF9vcmlnX25vZGUoYmF0X3ByaXYsIGJhdG1hbl9wYWNrZXQtPm9yaWcpOworCWlmICghb3JpZ19ub2RlKQorCQlyZXR1cm4gMDsKKworCXNlcV9kaWZmID0gYmF0bWFuX3BhY2tldC0+c2Vxbm8gLSBvcmlnX25vZGUtPmxhc3RfcmVhbF9zZXFubzsKKworCS8qIHNpZ25hbGl6ZSBjYWxsZXIgdGhhdCB0aGUgcGFja2V0IGlzIHRvIGJlIGRyb3BwZWQuICovCisJaWYgKHdpbmRvd19wcm90ZWN0ZWQoYmF0X3ByaXYsIHNlcV9kaWZmLAorCQkJICAgICAmb3JpZ19ub2RlLT5iYXRtYW5fc2Vxbm9fcmVzZXQpKQorCQlyZXR1cm4gLTE7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRtcF9uZWlnaF9ub2RlLCAmb3JpZ19ub2RlLT5uZWlnaF9saXN0LCBsaXN0KSB7CisKKwkJaXNfZHVwbGljYXRlIHw9IGdldF9iaXRfc3RhdHVzKHRtcF9uZWlnaF9ub2RlLT5yZWFsX2JpdHMsCisJCQkJCSAgICAgICBvcmlnX25vZGUtPmxhc3RfcmVhbF9zZXFubywKKwkJCQkJICAgICAgIGJhdG1hbl9wYWNrZXQtPnNlcW5vKTsKKworCQlpZiAoY29tcGFyZV9vcmlnKHRtcF9uZWlnaF9ub2RlLT5hZGRyLCBldGhoZHItPmhfc291cmNlKSAmJgorCQkgICAgKHRtcF9uZWlnaF9ub2RlLT5pZl9pbmNvbWluZyA9PSBpZl9pbmNvbWluZykpCisJCQlzZXRfbWFyayA9IDE7CisJCWVsc2UKKwkJCXNldF9tYXJrID0gMDsKKworCQkvKiBpZiB0aGUgd2luZG93IG1vdmVkLCBzZXQgdGhlIHVwZGF0ZSBmbGFnLiAqLworCQluZWVkX3VwZGF0ZSB8PSBiaXRfZ2V0X3BhY2tldChiYXRfcHJpdiwKKwkJCQkJICAgICAgdG1wX25laWdoX25vZGUtPnJlYWxfYml0cywKKwkJCQkJICAgICAgc2VxX2RpZmYsIHNldF9tYXJrKTsKKworCQl0bXBfbmVpZ2hfbm9kZS0+cmVhbF9wYWNrZXRfY291bnQgPQorCQkJYml0X3BhY2tldF9jb3VudCh0bXBfbmVpZ2hfbm9kZS0+cmVhbF9iaXRzKTsKKwl9CisKKwlpZiAobmVlZF91cGRhdGUpIHsKKwkJYmF0X2RiZyhEQkdfQkFUTUFOLCBiYXRfcHJpdiwKKwkJCSJ1cGRhdGluZyBsYXN0X3NlcW5vOiBvbGQgJWQsIG5ldyAlZFxuIiwKKwkJCW9yaWdfbm9kZS0+bGFzdF9yZWFsX3NlcW5vLCBiYXRtYW5fcGFja2V0LT5zZXFubyk7CisJCW9yaWdfbm9kZS0+bGFzdF9yZWFsX3NlcW5vID0gYmF0bWFuX3BhY2tldC0+c2Vxbm87CisJfQorCisJcmV0dXJuIGlzX2R1cGxpY2F0ZTsKK30KKworLyogY29weSBwcmltYXJ5IGFkZHJlc3MgZm9yIGJvbmRpbmcgKi8KK3N0YXRpYyB2b2lkIG1hcmtfYm9uZGluZ19hZGRyZXNzKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYsCisJCQkJIHN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZSwKKwkJCQkgc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19uZWlnaF9ub2RlLAorCQkJCSBzdHJ1Y3QgYmF0bWFuX3BhY2tldCAqYmF0bWFuX3BhY2tldCkKKworeworCWlmIChiYXRtYW5fcGFja2V0LT5mbGFncyAmIFBSSU1BUklFU19GSVJTVF9IT1ApCisJCW1lbWNweShvcmlnX25laWdoX25vZGUtPnByaW1hcnlfYWRkciwKKwkJICAgICAgIG9yaWdfbm9kZS0+b3JpZywgRVRIX0FMRU4pOworCisJcmV0dXJuOworfQorCisvKiBtYXJrIHBvc3NpYmxlIGJvbmQuY2FuZGlkYXRlcyBpbiB0aGUgbmVpZ2hib3IgbGlzdCAqLwordm9pZCB1cGRhdGVfYm9uZGluZ19jYW5kaWRhdGVzKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYsCisJCQkgICAgICAgc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlKQoreworCWludCBjYW5kaWRhdGVzOworCWludCBpbnRlcmZlcmVuY2VfY2FuZGlkYXRlOworCWludCBiZXN0X3RxOworCXN0cnVjdCBuZWlnaF9ub2RlICp0bXBfbmVpZ2hfbm9kZSwgKnRtcF9uZWlnaF9ub2RlMjsKKwlzdHJ1Y3QgbmVpZ2hfbm9kZSAqZmlyc3RfY2FuZGlkYXRlLCAqbGFzdF9jYW5kaWRhdGU7CisKKwkvKiB1cGRhdGUgdGhlIGNhbmRpZGF0ZXMgZm9yIHRoaXMgb3JpZ2luYXRvciAqLworCWlmICghb3JpZ19ub2RlLT5yb3V0ZXIpIHsKKwkJb3JpZ19ub2RlLT5ib25kLmNhbmRpZGF0ZXMgPSAwOworCQlyZXR1cm47CisJfQorCisJYmVzdF90cSA9IG9yaWdfbm9kZS0+cm91dGVyLT50cV9hdmc7CisKKwkvKiB1cGRhdGUgYm9uZC5jYW5kaWRhdGVzICovCisKKwljYW5kaWRhdGVzID0gMDsKKworCS8qIG1hcmsgb3RoZXIgbm9kZXMgd2hpY2ggYWxzbyByZWNlaXZlZCAiUFJJTUFSSUVTIEZJUlNUIEhPUCIgcGFja2V0cworCSAqIGFzICJib25kaW5nIHBhcnRuZXIiICovCisKKwkvKiBmaXJzdCwgemVybyB0aGUgbGlzdCAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkodG1wX25laWdoX25vZGUsICZvcmlnX25vZGUtPm5laWdoX2xpc3QsIGxpc3QpIHsKKwkJdG1wX25laWdoX25vZGUtPm5leHRfYm9uZF9jYW5kaWRhdGUgPSBOVUxMOworCX0KKworCWZpcnN0X2NhbmRpZGF0ZSA9IE5VTEw7CisJbGFzdF9jYW5kaWRhdGUgPSBOVUxMOworCWxpc3RfZm9yX2VhY2hfZW50cnkodG1wX25laWdoX25vZGUsICZvcmlnX25vZGUtPm5laWdoX2xpc3QsIGxpc3QpIHsKKworCQkvKiBvbmx5IGNvbnNpZGVyIGlmIGl0IGhhcyB0aGUgc2FtZSBwcmltYXJ5IGFkZHJlc3MgLi4uICAqLworCQlpZiAobWVtY21wKG9yaWdfbm9kZS0+b3JpZywKKwkJCQl0bXBfbmVpZ2hfbm9kZS0+b3JpZ19ub2RlLT5wcmltYXJ5X2FkZHIsCisJCQkJRVRIX0FMRU4pICE9IDApCisJCQljb250aW51ZTsKKworCQkvKiAuLi4gYW5kIGlzIGdvb2QgZW5vdWdoIHRvIGJlIGNvbnNpZGVyZWQgKi8KKwkJaWYgKHRtcF9uZWlnaF9ub2RlLT50cV9hdmcgPCBiZXN0X3RxIC0gQk9ORElOR19UUV9USFJFU0hPTEQpCisJCQljb250aW51ZTsKKworCQkvKiBjaGVjayBpZiB3ZSBoYXZlIGFub3RoZXIgY2FuZGlkYXRlIHdpdGggdGhlIHNhbWUKKwkJICogbWFjIGFkZHJlc3Mgb3IgaW50ZXJmYWNlLiBJZiB3ZSBkbywgd2Ugd29uJ3QKKwkJICogc2VsZWN0IHRoaXMgY2FuZGlkYXRlIGJlY2F1c2Ugb2YgcG9zc2libGUgaW50ZXJmZXJlbmNlLiAqLworCisJCWludGVyZmVyZW5jZV9jYW5kaWRhdGUgPSAwOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRtcF9uZWlnaF9ub2RlMiwKKwkJCQkmb3JpZ19ub2RlLT5uZWlnaF9saXN0LCBsaXN0KSB7CisKKwkJCWlmICh0bXBfbmVpZ2hfbm9kZTIgPT0gdG1wX25laWdoX25vZGUpCisJCQkJY29udGludWU7CisKKwkJCS8qIHdlIG9ubHkgY2FyZSBpZiB0aGUgb3RoZXIgY2FuZGlkYXRlIGlzIGV2ZW4KKwkJCSAqIGNvbnNpZGVyZWQgYXMgY2FuZGlkYXRlLiAqLworCQkJaWYgKCF0bXBfbmVpZ2hfbm9kZTItPm5leHRfYm9uZF9jYW5kaWRhdGUpCisJCQkJY29udGludWU7CisKKworCQkJaWYgKCh0bXBfbmVpZ2hfbm9kZS0+aWZfaW5jb21pbmcgPT0KKwkJCQl0bXBfbmVpZ2hfbm9kZTItPmlmX2luY29taW5nKQorCQkJCXx8IChtZW1jbXAodG1wX25laWdoX25vZGUtPmFkZHIsCisJCQkJdG1wX25laWdoX25vZGUyLT5hZGRyLCBFVEhfQUxFTikgPT0gMCkpIHsKKworCQkJCWludGVyZmVyZW5jZV9jYW5kaWRhdGUgPSAxOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCS8qIGRvbid0IGNhcmUgZnVydGhlciBpZiBpdCBpcyBhbiBpbnRlcmZlcmVuY2UgY2FuZGlkYXRlICovCisJCWlmIChpbnRlcmZlcmVuY2VfY2FuZGlkYXRlKQorCQkJY29udGludWU7CisKKwkJaWYgKCFmaXJzdF9jYW5kaWRhdGUpIHsKKwkJCWZpcnN0X2NhbmRpZGF0ZSA9IHRtcF9uZWlnaF9ub2RlOworCQkJdG1wX25laWdoX25vZGUtPm5leHRfYm9uZF9jYW5kaWRhdGUgPSBmaXJzdF9jYW5kaWRhdGU7CisJCX0gZWxzZQorCQkJdG1wX25laWdoX25vZGUtPm5leHRfYm9uZF9jYW5kaWRhdGUgPSBsYXN0X2NhbmRpZGF0ZTsKKworCQlsYXN0X2NhbmRpZGF0ZSA9IHRtcF9uZWlnaF9ub2RlOworCisJCWNhbmRpZGF0ZXMrKzsKKwl9CisKKwlpZiAoY2FuZGlkYXRlcyA+IDApIHsKKwkJZmlyc3RfY2FuZGlkYXRlLT5uZXh0X2JvbmRfY2FuZGlkYXRlID0gbGFzdF9jYW5kaWRhdGU7CisJCW9yaWdfbm9kZS0+Ym9uZC5zZWxlY3RlZCA9IGZpcnN0X2NhbmRpZGF0ZTsKKwl9CisKKwlvcmlnX25vZGUtPmJvbmQuY2FuZGlkYXRlcyA9IGNhbmRpZGF0ZXM7Cit9CisKK3ZvaWQgcmVjZWl2ZV9iYXRfcGFja2V0KHN0cnVjdCBldGhoZHIgKmV0aGhkciwKKwkJCQlzdHJ1Y3QgYmF0bWFuX3BhY2tldCAqYmF0bWFuX3BhY2tldCwKKwkJCQl1bnNpZ25lZCBjaGFyICpobmFfYnVmZiwgaW50IGhuYV9idWZmX2xlbiwKKwkJCQlzdHJ1Y3QgYmF0bWFuX2lmICppZl9pbmNvbWluZykKK3sKKwlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYoaWZfaW5jb21pbmctPnNvZnRfaWZhY2UpOworCXN0cnVjdCBiYXRtYW5faWYgKmJhdG1hbl9pZjsKKwlzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25laWdoX25vZGUsICpvcmlnX25vZGU7CisJY2hhciBoYXNfZGlyZWN0bGlua19mbGFnOworCWNoYXIgaXNfbXlfYWRkciA9IDAsIGlzX215X29yaWcgPSAwLCBpc19teV9vbGRvcmlnID0gMDsKKwljaGFyIGlzX2Jyb2FkY2FzdCA9IDAsIGlzX2JpZGlyZWN0aW9uYWwsIGlzX3NpbmdsZV9ob3BfbmVpZ2g7CisJY2hhciBpc19kdXBsaWNhdGU7CisJdWludDMyX3QgaWZfaW5jb21pbmdfc2Vxbm87CisKKwkvKiBTaWxlbnRseSBkcm9wIHdoZW4gdGhlIGJhdG1hbiBwYWNrZXQgaXMgYWN0dWFsbHkgbm90IGEKKwkgKiBjb3JyZWN0IHBhY2tldC4KKwkgKgorCSAqIFRoaXMgbWlnaHQgaGFwcGVuIGlmIGEgcGFja2V0IGlzIHBhZGRlZCAoZS5nLiBFdGhlcm5ldCBoYXMgYQorCSAqIG1pbmltdW0gZnJhbWUgbGVuZ3RoIG9mIDY0IGJ5dGUpIGFuZCB0aGUgYWdncmVnYXRpb24gaW50ZXJwcmV0cworCSAqIGl0IGFzIGFuIGFkZGl0aW9uYWwgbGVuZ3RoLgorCSAqCisJICogVE9ETzogQSBtb3JlIHNhbmUgc29sdXRpb24gd291bGQgYmUgdG8gaGF2ZSBhIGJpdCBpbiB0aGUKKwkgKiBiYXRtYW5fcGFja2V0IHRvIGRldGVjdCB3aGV0aGVyIHRoZSBwYWNrZXQgaXMgdGhlIGxhc3QKKwkgKiBwYWNrZXQgaW4gYW4gYWdncmVnYXRpb24uICBIZXJlIHdlIGV4cGVjdCB0aGF0IHRoZSBwYWRkaW5nCisJICogaXMgYWx3YXlzIHplcm8gKG9yIG5vdCAweDAxKQorCSAqLworCWlmIChiYXRtYW5fcGFja2V0LT5wYWNrZXRfdHlwZSAhPSBCQVRfUEFDS0VUKQorCQlyZXR1cm47CisKKwkvKiBjb3VsZCBiZSBjaGFuZ2VkIGJ5IHNjaGVkdWxlX293bl9wYWNrZXQoKSAqLworCWlmX2luY29taW5nX3NlcW5vID0gYXRvbWljX3JlYWQoJmlmX2luY29taW5nLT5zZXFubyk7CisKKwloYXNfZGlyZWN0bGlua19mbGFnID0gKGJhdG1hbl9wYWNrZXQtPmZsYWdzICYgRElSRUNUTElOSyA/IDEgOiAwKTsKKworCWlzX3NpbmdsZV9ob3BfbmVpZ2ggPSAoY29tcGFyZV9vcmlnKGV0aGhkci0+aF9zb3VyY2UsCisJCQkJCSAgICBiYXRtYW5fcGFja2V0LT5vcmlnKSA/IDEgOiAwKTsKKworCWJhdF9kYmcoREJHX0JBVE1BTiwgYmF0X3ByaXYsCisJCSJSZWNlaXZlZCBCQVRNQU4gcGFja2V0IHZpYSBOQjogJXBNLCBJRjogJXMgWyVwTV0gIgorCQkiKGZyb20gT0c6ICVwTSwgdmlhIHByZXYgT0c6ICVwTSwgc2Vxbm8gJWQsIHRxICVkLCAiCisJCSJUVEwgJWQsIFYgJWQsIElERiAlZClcbiIsCisJCWV0aGhkci0+aF9zb3VyY2UsIGlmX2luY29taW5nLT5uZXRfZGV2LT5uYW1lLAorCQlpZl9pbmNvbWluZy0+bmV0X2Rldi0+ZGV2X2FkZHIsIGJhdG1hbl9wYWNrZXQtPm9yaWcsCisJCWJhdG1hbl9wYWNrZXQtPnByZXZfc2VuZGVyLCBiYXRtYW5fcGFja2V0LT5zZXFubywKKwkJYmF0bWFuX3BhY2tldC0+dHEsIGJhdG1hbl9wYWNrZXQtPnR0bCwgYmF0bWFuX3BhY2tldC0+dmVyc2lvbiwKKwkJaGFzX2RpcmVjdGxpbmtfZmxhZyk7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoYmF0bWFuX2lmLCAmaWZfbGlzdCwgbGlzdCkgeworCQlpZiAoYmF0bWFuX2lmLT5pZl9zdGF0dXMgIT0gSUZfQUNUSVZFKQorCQkJY29udGludWU7CisKKwkJaWYgKGJhdG1hbl9pZi0+c29mdF9pZmFjZSAhPSBpZl9pbmNvbWluZy0+c29mdF9pZmFjZSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChjb21wYXJlX29yaWcoZXRoaGRyLT5oX3NvdXJjZSwKKwkJCQkgYmF0bWFuX2lmLT5uZXRfZGV2LT5kZXZfYWRkcikpCisJCQlpc19teV9hZGRyID0gMTsKKworCQlpZiAoY29tcGFyZV9vcmlnKGJhdG1hbl9wYWNrZXQtPm9yaWcsCisJCQkJIGJhdG1hbl9pZi0+bmV0X2Rldi0+ZGV2X2FkZHIpKQorCQkJaXNfbXlfb3JpZyA9IDE7CisKKwkJaWYgKGNvbXBhcmVfb3JpZyhiYXRtYW5fcGFja2V0LT5wcmV2X3NlbmRlciwKKwkJCQkgYmF0bWFuX2lmLT5uZXRfZGV2LT5kZXZfYWRkcikpCisJCQlpc19teV9vbGRvcmlnID0gMTsKKworCQlpZiAoY29tcGFyZV9vcmlnKGV0aGhkci0+aF9zb3VyY2UsIGJyb2FkY2FzdF9hZGRyKSkKKwkJCWlzX2Jyb2FkY2FzdCA9IDE7CisJfQorCXJjdV9yZWFkX3VubG9jaygpOworCisJaWYgKGJhdG1hbl9wYWNrZXQtPnZlcnNpb24gIT0gQ09NUEFUX1ZFUlNJT04pIHsKKwkJYmF0X2RiZyhEQkdfQkFUTUFOLCBiYXRfcHJpdiwKKwkJCSJEcm9wIHBhY2tldDogaW5jb21wYXRpYmxlIGJhdG1hbiB2ZXJzaW9uICglaSlcbiIsCisJCQliYXRtYW5fcGFja2V0LT52ZXJzaW9uKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChpc19teV9hZGRyKSB7CisJCWJhdF9kYmcoREJHX0JBVE1BTiwgYmF0X3ByaXYsCisJCQkiRHJvcCBwYWNrZXQ6IHJlY2VpdmVkIG15IG93biBicm9hZGNhc3QgKHNlbmRlcjogJXBNIgorCQkJIilcbiIsCisJCQlldGhoZHItPmhfc291cmNlKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChpc19icm9hZGNhc3QpIHsKKwkJYmF0X2RiZyhEQkdfQkFUTUFOLCBiYXRfcHJpdiwgIkRyb3AgcGFja2V0OiAiCisJCSJpZ25vcmluZyBhbGwgcGFja2V0cyB3aXRoIGJyb2FkY2FzdCBzb3VyY2UgYWRkciAoc2VuZGVyOiAlcE0iCisJCSIpXG4iLCBldGhoZHItPmhfc291cmNlKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChpc19teV9vcmlnKSB7CisJCXVuc2lnbmVkIGxvbmcgKndvcmQ7CisJCWludCBvZmZzZXQ7CisKKwkJb3JpZ19uZWlnaF9ub2RlID0gZ2V0X29yaWdfbm9kZShiYXRfcHJpdiwgZXRoaGRyLT5oX3NvdXJjZSk7CisKKwkJaWYgKCFvcmlnX25laWdoX25vZGUpCisJCQlyZXR1cm47CisKKwkJLyogbmVpZ2hib3IgaGFzIHRvIGluZGljYXRlIGRpcmVjdCBsaW5rIGFuZCBpdCBoYXMgdG8KKwkJICogY29tZSB2aWEgdGhlIGNvcnJlc3BvbmRpbmcgaW50ZXJmYWNlICovCisJCS8qIGlmIHJlY2VpdmVkIHNlcW5vIGVxdWFscyBsYXN0IHNlbmQgc2Vxbm8gc2F2ZSBuZXcKKwkJICogc2Vxbm8gZm9yIGJpZGlyZWN0aW9uYWwgY2hlY2sgKi8KKwkJaWYgKGhhc19kaXJlY3RsaW5rX2ZsYWcgJiYKKwkJICAgIGNvbXBhcmVfb3JpZyhpZl9pbmNvbWluZy0+bmV0X2Rldi0+ZGV2X2FkZHIsCisJCQkJIGJhdG1hbl9wYWNrZXQtPm9yaWcpICYmCisJCSAgICAoYmF0bWFuX3BhY2tldC0+c2Vxbm8gLSBpZl9pbmNvbWluZ19zZXFubyArIDIgPT0gMCkpIHsKKwkJCW9mZnNldCA9IGlmX2luY29taW5nLT5pZl9udW0gKiBOVU1fV09SRFM7CisJCQl3b3JkID0gJihvcmlnX25laWdoX25vZGUtPmJjYXN0X293bltvZmZzZXRdKTsKKwkJCWJpdF9tYXJrKHdvcmQsIDApOworCQkJb3JpZ19uZWlnaF9ub2RlLT5iY2FzdF9vd25fc3VtW2lmX2luY29taW5nLT5pZl9udW1dID0KKwkJCQliaXRfcGFja2V0X2NvdW50KHdvcmQpOworCQl9CisKKwkJYmF0X2RiZyhEQkdfQkFUTUFOLCBiYXRfcHJpdiwgIkRyb3AgcGFja2V0OiAiCisJCQkib3JpZ2luYXRvciBwYWNrZXQgZnJvbSBteXNlbGYgKHZpYSBuZWlnaGJvcilcbiIpOworCQlyZXR1cm47CisJfQorCisJaWYgKGlzX215X29sZG9yaWcpIHsKKwkJYmF0X2RiZyhEQkdfQkFUTUFOLCBiYXRfcHJpdiwKKwkJCSJEcm9wIHBhY2tldDogaWdub3JpbmcgYWxsIHJlYnJvYWRjYXN0IGVjaG9zIChzZW5kZXI6ICIKKwkJCSIlcE0pXG4iLCBldGhoZHItPmhfc291cmNlKTsKKwkJcmV0dXJuOworCX0KKworCW9yaWdfbm9kZSA9IGdldF9vcmlnX25vZGUoYmF0X3ByaXYsIGJhdG1hbl9wYWNrZXQtPm9yaWcpOworCWlmICghb3JpZ19ub2RlKQorCQlyZXR1cm47CisKKwlpc19kdXBsaWNhdGUgPSBjb3VudF9yZWFsX3BhY2tldHMoZXRoaGRyLCBiYXRtYW5fcGFja2V0LCBpZl9pbmNvbWluZyk7CisKKwlpZiAoaXNfZHVwbGljYXRlID09IC0xKSB7CisJCWJhdF9kYmcoREJHX0JBVE1BTiwgYmF0X3ByaXYsCisJCQkiRHJvcCBwYWNrZXQ6IHBhY2tldCB3aXRoaW4gc2Vxbm8gcHJvdGVjdGlvbiB0aW1lICIKKwkJCSIoc2VuZGVyOiAlcE0pXG4iLCBldGhoZHItPmhfc291cmNlKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChiYXRtYW5fcGFja2V0LT50cSA9PSAwKSB7CisJCWJhdF9kYmcoREJHX0JBVE1BTiwgYmF0X3ByaXYsCisJCQkiRHJvcCBwYWNrZXQ6IG9yaWdpbmF0b3IgcGFja2V0IHdpdGggdHEgZXF1YWwgMFxuIik7CisJCXJldHVybjsKKwl9CisKKwkvKiBhdm9pZCB0ZW1wb3Jhcnkgcm91dGluZyBsb29wcyAqLworCWlmICgob3JpZ19ub2RlLT5yb3V0ZXIpICYmCisJICAgIChvcmlnX25vZGUtPnJvdXRlci0+b3JpZ19ub2RlLT5yb3V0ZXIpICYmCisJICAgIChjb21wYXJlX29yaWcob3JpZ19ub2RlLT5yb3V0ZXItPmFkZHIsCisJCQkgIGJhdG1hbl9wYWNrZXQtPnByZXZfc2VuZGVyKSkgJiYKKwkgICAgIShjb21wYXJlX29yaWcoYmF0bWFuX3BhY2tldC0+b3JpZywgYmF0bWFuX3BhY2tldC0+cHJldl9zZW5kZXIpKSAmJgorCSAgICAoY29tcGFyZV9vcmlnKG9yaWdfbm9kZS0+cm91dGVyLT5hZGRyLAorCQkJICBvcmlnX25vZGUtPnJvdXRlci0+b3JpZ19ub2RlLT5yb3V0ZXItPmFkZHIpKSkgeworCQliYXRfZGJnKERCR19CQVRNQU4sIGJhdF9wcml2LAorCQkJIkRyb3AgcGFja2V0OiBpZ25vcmluZyBhbGwgcmVicm9hZGNhc3QgcGFja2V0cyB0aGF0ICIKKwkJCSJtYXkgbWFrZSBtZSBsb29wIChzZW5kZXI6ICVwTSlcbiIsIGV0aGhkci0+aF9zb3VyY2UpOworCQlyZXR1cm47CisJfQorCisJLyogaWYgc2VuZGVyIGlzIGEgZGlyZWN0IG5laWdoYm9yIHRoZSBzZW5kZXIgbWFjIGVxdWFscworCSAqIG9yaWdpbmF0b3IgbWFjICovCisJb3JpZ19uZWlnaF9ub2RlID0gKGlzX3NpbmdsZV9ob3BfbmVpZ2ggPworCQkJICAgb3JpZ19ub2RlIDoKKwkJCSAgIGdldF9vcmlnX25vZGUoYmF0X3ByaXYsIGV0aGhkci0+aF9zb3VyY2UpKTsKKwlpZiAoIW9yaWdfbmVpZ2hfbm9kZSkKKwkJcmV0dXJuOworCisJLyogZHJvcCBwYWNrZXQgaWYgc2VuZGVyIGlzIG5vdCBhIGRpcmVjdCBuZWlnaGJvciBhbmQgaWYgd2UKKwkgKiBkb24ndCByb3V0ZSB0b3dhcmRzIGl0ICovCisJaWYgKCFpc19zaW5nbGVfaG9wX25laWdoICYmICghb3JpZ19uZWlnaF9ub2RlLT5yb3V0ZXIpKSB7CisJCWJhdF9kYmcoREJHX0JBVE1BTiwgYmF0X3ByaXYsCisJCQkiRHJvcCBwYWNrZXQ6IE9HTSB2aWEgdW5rbm93biBuZWlnaGJvciFcbiIpOworCQlyZXR1cm47CisJfQorCisJaXNfYmlkaXJlY3Rpb25hbCA9IGlzX2JpZGlyZWN0aW9uYWxfbmVpZ2gob3JpZ19ub2RlLCBvcmlnX25laWdoX25vZGUsCisJCQkJCQliYXRtYW5fcGFja2V0LCBpZl9pbmNvbWluZyk7CisKKwkvKiB1cGRhdGUgcmFua2luZyBpZiBpdCBpcyBub3QgYSBkdXBsaWNhdGUgb3IgaGFzIHRoZSBzYW1lCisJICogc2Vxbm8gYW5kIHNpbWlsYXIgdHRsIGFzIHRoZSBub24tZHVwbGljYXRlICovCisJaWYgKGlzX2JpZGlyZWN0aW9uYWwgJiYKKwkgICAgKCFpc19kdXBsaWNhdGUgfHwKKwkgICAgICgob3JpZ19ub2RlLT5sYXN0X3JlYWxfc2Vxbm8gPT0gYmF0bWFuX3BhY2tldC0+c2Vxbm8pICYmCisJICAgICAgKG9yaWdfbm9kZS0+bGFzdF90dGwgLSAzIDw9IGJhdG1hbl9wYWNrZXQtPnR0bCkpKSkKKwkJdXBkYXRlX29yaWcoYmF0X3ByaXYsIG9yaWdfbm9kZSwgZXRoaGRyLCBiYXRtYW5fcGFja2V0LAorCQkJICAgIGlmX2luY29taW5nLCBobmFfYnVmZiwgaG5hX2J1ZmZfbGVuLCBpc19kdXBsaWNhdGUpOworCisJbWFya19ib25kaW5nX2FkZHJlc3MoYmF0X3ByaXYsIG9yaWdfbm9kZSwKKwkJCSAgICAgb3JpZ19uZWlnaF9ub2RlLCBiYXRtYW5fcGFja2V0KTsKKwl1cGRhdGVfYm9uZGluZ19jYW5kaWRhdGVzKGJhdF9wcml2LCBvcmlnX25vZGUpOworCisJLyogaXMgc2luZ2xlIGhvcCAoZGlyZWN0KSBuZWlnaGJvciAqLworCWlmIChpc19zaW5nbGVfaG9wX25laWdoKSB7CisKKwkJLyogbWFyayBkaXJlY3QgbGluayBvbiBpbmNvbWluZyBpbnRlcmZhY2UgKi8KKwkJc2NoZWR1bGVfZm9yd2FyZF9wYWNrZXQob3JpZ19ub2RlLCBldGhoZHIsIGJhdG1hbl9wYWNrZXQsCisJCQkJCTEsIGhuYV9idWZmX2xlbiwgaWZfaW5jb21pbmcpOworCisJCWJhdF9kYmcoREJHX0JBVE1BTiwgYmF0X3ByaXYsICJGb3J3YXJkaW5nIHBhY2tldDogIgorCQkJInJlYnJvYWRjYXN0IG5laWdoYm9yIHBhY2tldCB3aXRoIGRpcmVjdCBsaW5rIGZsYWdcbiIpOworCQlyZXR1cm47CisJfQorCisJLyogbXVsdGlob3Agb3JpZ2luYXRvciAqLworCWlmICghaXNfYmlkaXJlY3Rpb25hbCkgeworCQliYXRfZGJnKERCR19CQVRNQU4sIGJhdF9wcml2LAorCQkJIkRyb3AgcGFja2V0OiBub3QgcmVjZWl2ZWQgdmlhIGJpZGlyZWN0aW9uYWwgbGlua1xuIik7CisJCXJldHVybjsKKwl9CisKKwlpZiAoaXNfZHVwbGljYXRlKSB7CisJCWJhdF9kYmcoREJHX0JBVE1BTiwgYmF0X3ByaXYsCisJCQkiRHJvcCBwYWNrZXQ6IGR1cGxpY2F0ZSBwYWNrZXQgcmVjZWl2ZWRcbiIpOworCQlyZXR1cm47CisJfQorCisJYmF0X2RiZyhEQkdfQkFUTUFOLCBiYXRfcHJpdiwKKwkJIkZvcndhcmRpbmcgcGFja2V0OiByZWJyb2FkY2FzdCBvcmlnaW5hdG9yIHBhY2tldFxuIik7CisJc2NoZWR1bGVfZm9yd2FyZF9wYWNrZXQob3JpZ19ub2RlLCBldGhoZHIsIGJhdG1hbl9wYWNrZXQsCisJCQkJMCwgaG5hX2J1ZmZfbGVuLCBpZl9pbmNvbWluZyk7Cit9CisKK2ludCByZWN2X2JhdF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJhdG1hbl9pZiAqYmF0bWFuX2lmKQoreworCXN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYgPSBuZXRkZXZfcHJpdihiYXRtYW5faWYtPnNvZnRfaWZhY2UpOworCXN0cnVjdCBldGhoZHIgKmV0aGhkcjsKKworCS8qIGRyb3AgcGFja2V0IGlmIGl0IGhhcyBub3QgbmVjZXNzYXJ5IG1pbmltdW0gc2l6ZSAqLworCWlmICh1bmxpa2VseSghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgYmF0bWFuX3BhY2tldCkpKSkKKwkJcmV0dXJuIE5FVF9SWF9EUk9QOworCisJZXRoaGRyID0gKHN0cnVjdCBldGhoZHIgKilza2JfbWFjX2hlYWRlcihza2IpOworCisJLyogcGFja2V0IHdpdGggYnJvYWRjYXN0IGluZGljYXRpb24gYnV0IHVuaWNhc3QgcmVjaXBpZW50ICovCisJaWYgKCFpc19icm9hZGNhc3RfZXRoZXJfYWRkcihldGhoZHItPmhfZGVzdCkpCisJCXJldHVybiBORVRfUlhfRFJPUDsKKworCS8qIHBhY2tldCB3aXRoIGJyb2FkY2FzdCBzZW5kZXIgYWRkcmVzcyAqLworCWlmIChpc19icm9hZGNhc3RfZXRoZXJfYWRkcihldGhoZHItPmhfc291cmNlKSkKKwkJcmV0dXJuIE5FVF9SWF9EUk9QOworCisJLyogY3JlYXRlIGEgY29weSBvZiB0aGUgc2tiLCBpZiBuZWVkZWQsIHRvIG1vZGlmeSBpdC4gKi8KKwlpZiAoc2tiX2Nvdyhza2IsIDApIDwgMCkKKwkJcmV0dXJuIE5FVF9SWF9EUk9QOworCisJLyoga2VlcCBza2IgbGluZWFyICovCisJaWYgKHNrYl9saW5lYXJpemUoc2tiKSA8IDApCisJCXJldHVybiBORVRfUlhfRFJPUDsKKworCWV0aGhkciA9IChzdHJ1Y3QgZXRoaGRyICopc2tiX21hY19oZWFkZXIoc2tiKTsKKworCXNwaW5fbG9ja19iaCgmYmF0X3ByaXYtPm9yaWdfaGFzaF9sb2NrKTsKKwlyZWNlaXZlX2FnZ3JfYmF0X3BhY2tldChldGhoZHIsCisJCQkJc2tiLT5kYXRhLAorCQkJCXNrYl9oZWFkbGVuKHNrYiksCisJCQkJYmF0bWFuX2lmKTsKKwlzcGluX3VubG9ja19iaCgmYmF0X3ByaXYtPm9yaWdfaGFzaF9sb2NrKTsKKworCWtmcmVlX3NrYihza2IpOworCXJldHVybiBORVRfUlhfU1VDQ0VTUzsKK30KKworc3RhdGljIGludCByZWN2X215X2ljbXBfcGFja2V0KHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYsCisJCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc2l6ZV90IGljbXBfbGVuKQoreworCXN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZTsKKwlzdHJ1Y3QgaWNtcF9wYWNrZXRfcnIgKmljbXBfcGFja2V0OworCXN0cnVjdCBldGhoZHIgKmV0aGhkcjsKKwlzdHJ1Y3QgYmF0bWFuX2lmICpiYXRtYW5faWY7CisJaW50IHJldDsKKwl1aW50OF90IGRzdGFkZHJbRVRIX0FMRU5dOworCisJaWNtcF9wYWNrZXQgPSAoc3RydWN0IGljbXBfcGFja2V0X3JyICopc2tiLT5kYXRhOworCWV0aGhkciA9IChzdHJ1Y3QgZXRoaGRyICopc2tiX21hY19oZWFkZXIoc2tiKTsKKworCS8qIGFkZCBkYXRhIHRvIGRldmljZSBxdWV1ZSAqLworCWlmIChpY21wX3BhY2tldC0+bXNnX3R5cGUgIT0gRUNIT19SRVFVRVNUKSB7CisJCWJhdF9zb2NrZXRfcmVjZWl2ZV9wYWNrZXQoaWNtcF9wYWNrZXQsIGljbXBfbGVuKTsKKwkJcmV0dXJuIE5FVF9SWF9EUk9QOworCX0KKworCWlmICghYmF0X3ByaXYtPnByaW1hcnlfaWYpCisJCXJldHVybiBORVRfUlhfRFJPUDsKKworCS8qIGFuc3dlciBlY2hvIHJlcXVlc3QgKHBpbmcpICovCisJLyogZ2V0IHJvdXRpbmcgaW5mb3JtYXRpb24gKi8KKwlzcGluX2xvY2tfYmgoJmJhdF9wcml2LT5vcmlnX2hhc2hfbG9jayk7CisJb3JpZ19ub2RlID0gKChzdHJ1Y3Qgb3JpZ19ub2RlICopaGFzaF9maW5kKGJhdF9wcml2LT5vcmlnX2hhc2gsCisJCQkJCQkgICBjb21wYXJlX29yaWcsIGNob29zZV9vcmlnLAorCQkJCQkJICAgaWNtcF9wYWNrZXQtPm9yaWcpKTsKKwlyZXQgPSBORVRfUlhfRFJPUDsKKworCWlmICgob3JpZ19ub2RlKSAmJiAob3JpZ19ub2RlLT5yb3V0ZXIpKSB7CisKKwkJLyogZG9uJ3QgbG9jayB3aGlsZSBzZW5kaW5nIHRoZSBwYWNrZXRzIC4uLiB3ZSB0aGVyZWZvcmUKKwkJICogY29weSB0aGUgcmVxdWlyZWQgZGF0YSBiZWZvcmUgc2VuZGluZyAqLworCQliYXRtYW5faWYgPSBvcmlnX25vZGUtPnJvdXRlci0+aWZfaW5jb21pbmc7CisJCW1lbWNweShkc3RhZGRyLCBvcmlnX25vZGUtPnJvdXRlci0+YWRkciwgRVRIX0FMRU4pOworCQlzcGluX3VubG9ja19iaCgmYmF0X3ByaXYtPm9yaWdfaGFzaF9sb2NrKTsKKworCQkvKiBjcmVhdGUgYSBjb3B5IG9mIHRoZSBza2IsIGlmIG5lZWRlZCwgdG8gbW9kaWZ5IGl0LiAqLworCQlpZiAoc2tiX2Nvdyhza2IsIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSkgPCAwKQorCQkJcmV0dXJuIE5FVF9SWF9EUk9QOworCisJCWljbXBfcGFja2V0ID0gKHN0cnVjdCBpY21wX3BhY2tldF9yciAqKXNrYi0+ZGF0YTsKKwkJZXRoaGRyID0gKHN0cnVjdCBldGhoZHIgKilza2JfbWFjX2hlYWRlcihza2IpOworCisJCW1lbWNweShpY21wX3BhY2tldC0+ZHN0LCBpY21wX3BhY2tldC0+b3JpZywgRVRIX0FMRU4pOworCQltZW1jcHkoaWNtcF9wYWNrZXQtPm9yaWcsCisJCSAgICAgICBiYXRfcHJpdi0+cHJpbWFyeV9pZi0+bmV0X2Rldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwkJaWNtcF9wYWNrZXQtPm1zZ190eXBlID0gRUNIT19SRVBMWTsKKwkJaWNtcF9wYWNrZXQtPnR0bCA9IFRUTDsKKworCQlzZW5kX3NrYl9wYWNrZXQoc2tiLCBiYXRtYW5faWYsIGRzdGFkZHIpOworCQlyZXQgPSBORVRfUlhfU1VDQ0VTUzsKKworCX0gZWxzZQorCQlzcGluX3VubG9ja19iaCgmYmF0X3ByaXYtPm9yaWdfaGFzaF9sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcmVjdl9pY21wX3R0bF9leGNlZWRlZChzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2LAorCQkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc2l6ZV90IGljbXBfbGVuKQoreworCXN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZTsKKwlzdHJ1Y3QgaWNtcF9wYWNrZXQgKmljbXBfcGFja2V0OworCXN0cnVjdCBldGhoZHIgKmV0aGhkcjsKKwlzdHJ1Y3QgYmF0bWFuX2lmICpiYXRtYW5faWY7CisJaW50IHJldDsKKwl1aW50OF90IGRzdGFkZHJbRVRIX0FMRU5dOworCisJaWNtcF9wYWNrZXQgPSAoc3RydWN0IGljbXBfcGFja2V0ICopc2tiLT5kYXRhOworCWV0aGhkciA9IChzdHJ1Y3QgZXRoaGRyICopc2tiX21hY19oZWFkZXIoc2tiKTsKKworCS8qIHNlbmQgVFRMIGV4Y2VlZGVkIGlmIHBhY2tldCBpcyBhbiBlY2hvIHJlcXVlc3QgKHRyYWNlcm91dGUpICovCisJaWYgKGljbXBfcGFja2V0LT5tc2dfdHlwZSAhPSBFQ0hPX1JFUVVFU1QpIHsKKwkJcHJfZGVidWcoIldhcm5pbmcgLSBjYW4ndCBmb3J3YXJkIGljbXAgcGFja2V0IGZyb20gJXBNIHRvICIKKwkJCSAiJXBNOiB0dGwgZXhjZWVkZWRcbiIsIGljbXBfcGFja2V0LT5vcmlnLAorCQkJIGljbXBfcGFja2V0LT5kc3QpOworCQlyZXR1cm4gTkVUX1JYX0RST1A7CisJfQorCisJaWYgKCFiYXRfcHJpdi0+cHJpbWFyeV9pZikKKwkJcmV0dXJuIE5FVF9SWF9EUk9QOworCisJLyogZ2V0IHJvdXRpbmcgaW5mb3JtYXRpb24gKi8KKwlzcGluX2xvY2tfYmgoJmJhdF9wcml2LT5vcmlnX2hhc2hfbG9jayk7CisJb3JpZ19ub2RlID0gKChzdHJ1Y3Qgb3JpZ19ub2RlICopCisJCSAgICAgaGFzaF9maW5kKGJhdF9wcml2LT5vcmlnX2hhc2gsIGNvbXBhcmVfb3JpZywgY2hvb3NlX29yaWcsCisJCQkgICAgICAgaWNtcF9wYWNrZXQtPm9yaWcpKTsKKwlyZXQgPSBORVRfUlhfRFJPUDsKKworCWlmICgob3JpZ19ub2RlKSAmJiAob3JpZ19ub2RlLT5yb3V0ZXIpKSB7CisKKwkJLyogZG9uJ3QgbG9jayB3aGlsZSBzZW5kaW5nIHRoZSBwYWNrZXRzIC4uLiB3ZSB0aGVyZWZvcmUKKwkJICogY29weSB0aGUgcmVxdWlyZWQgZGF0YSBiZWZvcmUgc2VuZGluZyAqLworCQliYXRtYW5faWYgPSBvcmlnX25vZGUtPnJvdXRlci0+aWZfaW5jb21pbmc7CisJCW1lbWNweShkc3RhZGRyLCBvcmlnX25vZGUtPnJvdXRlci0+YWRkciwgRVRIX0FMRU4pOworCQlzcGluX3VubG9ja19iaCgmYmF0X3ByaXYtPm9yaWdfaGFzaF9sb2NrKTsKKworCQkvKiBjcmVhdGUgYSBjb3B5IG9mIHRoZSBza2IsIGlmIG5lZWRlZCwgdG8gbW9kaWZ5IGl0LiAqLworCQlpZiAoc2tiX2Nvdyhza2IsIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSkgPCAwKQorCQkJcmV0dXJuIE5FVF9SWF9EUk9QOworCisJCWljbXBfcGFja2V0ID0gKHN0cnVjdCBpY21wX3BhY2tldCAqKSBza2ItPmRhdGE7CisJCWV0aGhkciA9IChzdHJ1Y3QgZXRoaGRyICopc2tiX21hY19oZWFkZXIoc2tiKTsKKworCQltZW1jcHkoaWNtcF9wYWNrZXQtPmRzdCwgaWNtcF9wYWNrZXQtPm9yaWcsIEVUSF9BTEVOKTsKKwkJbWVtY3B5KGljbXBfcGFja2V0LT5vcmlnLAorCQkgICAgICAgYmF0X3ByaXYtPnByaW1hcnlfaWYtPm5ldF9kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJCWljbXBfcGFja2V0LT5tc2dfdHlwZSA9IFRUTF9FWENFRURFRDsKKwkJaWNtcF9wYWNrZXQtPnR0bCA9IFRUTDsKKworCQlzZW5kX3NrYl9wYWNrZXQoc2tiLCBiYXRtYW5faWYsIGRzdGFkZHIpOworCQlyZXQgPSBORVRfUlhfU1VDQ0VTUzsKKworCX0gZWxzZQorCQlzcGluX3VubG9ja19iaCgmYmF0X3ByaXYtPm9yaWdfaGFzaF9sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKKworaW50IHJlY3ZfaWNtcF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJhdG1hbl9pZiAqcmVjdl9pZikKK3sKKwlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYocmVjdl9pZi0+c29mdF9pZmFjZSk7CisJc3RydWN0IGljbXBfcGFja2V0X3JyICppY21wX3BhY2tldDsKKwlzdHJ1Y3QgZXRoaGRyICpldGhoZHI7CisJc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlOworCXN0cnVjdCBiYXRtYW5faWYgKmJhdG1hbl9pZjsKKwlpbnQgaGRyX3NpemUgPSBzaXplb2Yoc3RydWN0IGljbXBfcGFja2V0KTsKKwlpbnQgcmV0OworCXVpbnQ4X3QgZHN0YWRkcltFVEhfQUxFTl07CisKKwkvKioKKwkgKiB3ZSB0cnVuY2F0ZSBhbGwgaW5jb21pbmcgaWNtcCBwYWNrZXRzIGlmIHRoZXkgZG9uJ3QgbWF0Y2ggb3VyIHNpemUKKwkgKi8KKwlpZiAoc2tiLT5sZW4gPj0gc2l6ZW9mKHN0cnVjdCBpY21wX3BhY2tldF9ycikpCisJCWhkcl9zaXplID0gc2l6ZW9mKHN0cnVjdCBpY21wX3BhY2tldF9ycik7CisKKwkvKiBkcm9wIHBhY2tldCBpZiBpdCBoYXMgbm90IG5lY2Vzc2FyeSBtaW5pbXVtIHNpemUgKi8KKwlpZiAodW5saWtlbHkoIXBza2JfbWF5X3B1bGwoc2tiLCBoZHJfc2l6ZSkpKQorCQlyZXR1cm4gTkVUX1JYX0RST1A7CisKKwlldGhoZHIgPSAoc3RydWN0IGV0aGhkciAqKXNrYl9tYWNfaGVhZGVyKHNrYik7CisKKwkvKiBwYWNrZXQgd2l0aCB1bmljYXN0IGluZGljYXRpb24gYnV0IGJyb2FkY2FzdCByZWNpcGllbnQgKi8KKwlpZiAoaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIoZXRoaGRyLT5oX2Rlc3QpKQorCQlyZXR1cm4gTkVUX1JYX0RST1A7CisKKwkvKiBwYWNrZXQgd2l0aCBicm9hZGNhc3Qgc2VuZGVyIGFkZHJlc3MgKi8KKwlpZiAoaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIoZXRoaGRyLT5oX3NvdXJjZSkpCisJCXJldHVybiBORVRfUlhfRFJPUDsKKworCS8qIG5vdCBmb3IgbWUgKi8KKwlpZiAoIWlzX215X21hYyhldGhoZHItPmhfZGVzdCkpCisJCXJldHVybiBORVRfUlhfRFJPUDsKKworCWljbXBfcGFja2V0ID0gKHN0cnVjdCBpY21wX3BhY2tldF9yciAqKXNrYi0+ZGF0YTsKKworCS8qIGFkZCByZWNvcmQgcm91dGUgaW5mb3JtYXRpb24gaWYgbm90IGZ1bGwgKi8KKwlpZiAoKGhkcl9zaXplID09IHNpemVvZihzdHJ1Y3QgaWNtcF9wYWNrZXRfcnIpKSAmJgorCSAgICAoaWNtcF9wYWNrZXQtPnJyX2N1ciA8IEJBVF9SUl9MRU4pKSB7CisJCW1lbWNweSgmKGljbXBfcGFja2V0LT5ycltpY21wX3BhY2tldC0+cnJfY3VyXSksCisJCQlldGhoZHItPmhfZGVzdCwgRVRIX0FMRU4pOworCQlpY21wX3BhY2tldC0+cnJfY3VyKys7CisJfQorCisJLyogcGFja2V0IGZvciBtZSAqLworCWlmIChpc19teV9tYWMoaWNtcF9wYWNrZXQtPmRzdCkpCisJCXJldHVybiByZWN2X215X2ljbXBfcGFja2V0KGJhdF9wcml2LCBza2IsIGhkcl9zaXplKTsKKworCS8qIFRUTCBleGNlZWRlZCAqLworCWlmIChpY21wX3BhY2tldC0+dHRsIDwgMikKKwkJcmV0dXJuIHJlY3ZfaWNtcF90dGxfZXhjZWVkZWQoYmF0X3ByaXYsIHNrYiwgaGRyX3NpemUpOworCisJcmV0ID0gTkVUX1JYX0RST1A7CisKKwkvKiBnZXQgcm91dGluZyBpbmZvcm1hdGlvbiAqLworCXNwaW5fbG9ja19iaCgmYmF0X3ByaXYtPm9yaWdfaGFzaF9sb2NrKTsKKwlvcmlnX25vZGUgPSAoKHN0cnVjdCBvcmlnX25vZGUgKikKKwkJICAgICBoYXNoX2ZpbmQoYmF0X3ByaXYtPm9yaWdfaGFzaCwgY29tcGFyZV9vcmlnLCBjaG9vc2Vfb3JpZywKKwkJCSAgICAgICBpY21wX3BhY2tldC0+ZHN0KSk7CisKKwlpZiAoKG9yaWdfbm9kZSkgJiYgKG9yaWdfbm9kZS0+cm91dGVyKSkgeworCisJCS8qIGRvbid0IGxvY2sgd2hpbGUgc2VuZGluZyB0aGUgcGFja2V0cyAuLi4gd2UgdGhlcmVmb3JlCisJCSAqIGNvcHkgdGhlIHJlcXVpcmVkIGRhdGEgYmVmb3JlIHNlbmRpbmcgKi8KKwkJYmF0bWFuX2lmID0gb3JpZ19ub2RlLT5yb3V0ZXItPmlmX2luY29taW5nOworCQltZW1jcHkoZHN0YWRkciwgb3JpZ19ub2RlLT5yb3V0ZXItPmFkZHIsIEVUSF9BTEVOKTsKKwkJc3Bpbl91bmxvY2tfYmgoJmJhdF9wcml2LT5vcmlnX2hhc2hfbG9jayk7CisKKwkJLyogY3JlYXRlIGEgY29weSBvZiB0aGUgc2tiLCBpZiBuZWVkZWQsIHRvIG1vZGlmeSBpdC4gKi8KKwkJaWYgKHNrYl9jb3coc2tiLCBzaXplb2Yoc3RydWN0IGV0aGhkcikpIDwgMCkKKwkJCXJldHVybiBORVRfUlhfRFJPUDsKKworCQlpY21wX3BhY2tldCA9IChzdHJ1Y3QgaWNtcF9wYWNrZXRfcnIgKilza2ItPmRhdGE7CisJCWV0aGhkciA9IChzdHJ1Y3QgZXRoaGRyICopc2tiX21hY19oZWFkZXIoc2tiKTsKKworCQkvKiBkZWNyZW1lbnQgdHRsICovCisJCWljbXBfcGFja2V0LT50dGwtLTsKKworCQkvKiByb3V0ZSBpdCAqLworCQlzZW5kX3NrYl9wYWNrZXQoc2tiLCBiYXRtYW5faWYsIGRzdGFkZHIpOworCQlyZXQgPSBORVRfUlhfU1VDQ0VTUzsKKworCX0gZWxzZQorCQlzcGluX3VubG9ja19iaCgmYmF0X3ByaXYtPm9yaWdfaGFzaF9sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIGZpbmQgYSBzdWl0YWJsZSByb3V0ZXIgZm9yIHRoaXMgb3JpZ2luYXRvciwgYW5kIHVzZQorICogYm9uZGluZyBpZiBwb3NzaWJsZS4gKi8KK3N0cnVjdCBuZWlnaF9ub2RlICpmaW5kX3JvdXRlcihzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2LAorCQkJICAgICAgIHN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZSwKKwkJCSAgICAgICBzdHJ1Y3QgYmF0bWFuX2lmICpyZWN2X2lmKQoreworCXN0cnVjdCBvcmlnX25vZGUgKnByaW1hcnlfb3JpZ19ub2RlOworCXN0cnVjdCBvcmlnX25vZGUgKnJvdXRlcl9vcmlnOworCXN0cnVjdCBuZWlnaF9ub2RlICpyb3V0ZXIsICpmaXJzdF9jYW5kaWRhdGUsICpiZXN0X3JvdXRlcjsKKwlzdGF0aWMgdWludDhfdCB6ZXJvX21hY1tFVEhfQUxFTl0gPSB7MCwgMCwgMCwgMCwgMCwgMH07CisJaW50IGJvbmRpbmdfZW5hYmxlZDsKKworCWlmICghb3JpZ19ub2RlKQorCQlyZXR1cm4gTlVMTDsKKworCWlmICghb3JpZ19ub2RlLT5yb3V0ZXIpCisJCXJldHVybiBOVUxMOworCisJLyogd2l0aG91dCBib25kaW5nLCB0aGUgZmlyc3Qgbm9kZSBzaG91bGQKKwkgKiBhbHdheXMgY2hvb3NlIHRoZSBkZWZhdWx0IHJvdXRlci4gKi8KKworCWJvbmRpbmdfZW5hYmxlZCA9IGF0b21pY19yZWFkKCZiYXRfcHJpdi0+Ym9uZGluZyk7CisKKwlpZiAoKCFyZWN2X2lmKSAmJiAoIWJvbmRpbmdfZW5hYmxlZCkpCisJCXJldHVybiBvcmlnX25vZGUtPnJvdXRlcjsKKworCXJvdXRlcl9vcmlnID0gb3JpZ19ub2RlLT5yb3V0ZXItPm9yaWdfbm9kZTsKKworCS8qIGlmIHdlIGhhdmUgc29tZXRoaW5nIGluIHRoZSBwcmltYXJ5X2FkZHIsIHdlIGNhbiBzZWFyY2gKKwkgKiBmb3IgYSBwb3RlbnRpYWwgYm9uZGluZyBjYW5kaWRhdGUuICovCisJaWYgKG1lbWNtcChyb3V0ZXJfb3JpZy0+cHJpbWFyeV9hZGRyLCB6ZXJvX21hYywgRVRIX0FMRU4pID09IDApCisJCXJldHVybiBvcmlnX25vZGUtPnJvdXRlcjsKKworCS8qIGZpbmQgdGhlIG9yaWdfbm9kZSB3aGljaCBoYXMgdGhlIHByaW1hcnkgaW50ZXJmYWNlLiBtaWdodAorCSAqIGV2ZW4gYmUgdGhlIHNhbWUgYXMgb3VyIHJvdXRlcl9vcmlnIGluIG1hbnkgY2FzZXMgKi8KKworCWlmIChtZW1jbXAocm91dGVyX29yaWctPnByaW1hcnlfYWRkciwKKwkJCQlyb3V0ZXJfb3JpZy0+b3JpZywgRVRIX0FMRU4pID09IDApIHsKKwkJcHJpbWFyeV9vcmlnX25vZGUgPSByb3V0ZXJfb3JpZzsKKwl9IGVsc2UgeworCQlwcmltYXJ5X29yaWdfbm9kZSA9IGhhc2hfZmluZChiYXRfcHJpdi0+b3JpZ19oYXNoLCBjb21wYXJlX29yaWcsCisJCQkJCSAgICAgICBjaG9vc2Vfb3JpZywKKwkJCQkJICAgICAgIHJvdXRlcl9vcmlnLT5wcmltYXJ5X2FkZHIpOworCisJCWlmICghcHJpbWFyeV9vcmlnX25vZGUpCisJCQlyZXR1cm4gb3JpZ19ub2RlLT5yb3V0ZXI7CisJfQorCisJLyogd2l0aCBsZXNzIHRoYW4gMiBjYW5kaWRhdGVzLCB3ZSBjYW4ndCBkbyBhbnkKKwkgKiBib25kaW5nIGFuZCBwcmVmZXIgdGhlIG9yaWdpbmFsIHJvdXRlci4gKi8KKworCWlmIChwcmltYXJ5X29yaWdfbm9kZS0+Ym9uZC5jYW5kaWRhdGVzIDwgMikKKwkJcmV0dXJuIG9yaWdfbm9kZS0+cm91dGVyOworCisKKwkvKiBhbGwgbm9kZXMgYmV0d2VlbiBzaG91bGQgY2hvb3NlIGEgY2FuZGlkYXRlIHdoaWNoCisJICogaXMgaXMgbm90IG9uIHRoZSBpbnRlcmZhY2Ugd2hlcmUgdGhlIHBhY2tldCBjYW1lCisJICogaW4uICovCisJZmlyc3RfY2FuZGlkYXRlID0gcHJpbWFyeV9vcmlnX25vZGUtPmJvbmQuc2VsZWN0ZWQ7CisJcm91dGVyID0gZmlyc3RfY2FuZGlkYXRlOworCisJaWYgKGJvbmRpbmdfZW5hYmxlZCkgeworCQkvKiBpbiB0aGUgYm9uZGluZyBjYXNlLCBzZW5kIHRoZSBwYWNrZXRzIGluIGEgcm91bmQKKwkJICogcm9iaW4gZmFzaGlvbiBvdmVyIHRoZSByZW1haW5pbmcgaW50ZXJmYWNlcy4gKi8KKwkJZG8geworCQkJLyogcmVjdl9pZiA9PSBOVUxMIG9uIHRoZSBmaXJzdCBub2RlLiAqLworCQkJaWYgKHJvdXRlci0+aWZfaW5jb21pbmcgIT0gcmVjdl9pZikKKwkJCQlicmVhazsKKworCQkJcm91dGVyID0gcm91dGVyLT5uZXh0X2JvbmRfY2FuZGlkYXRlOworCQl9IHdoaWxlIChyb3V0ZXIgIT0gZmlyc3RfY2FuZGlkYXRlKTsKKworCQlwcmltYXJ5X29yaWdfbm9kZS0+Ym9uZC5zZWxlY3RlZCA9IHJvdXRlci0+bmV4dF9ib25kX2NhbmRpZGF0ZTsKKworCX0gZWxzZSB7CisJCS8qIGlmIGJvbmRpbmcgaXMgZGlzYWJsZWQsIHVzZSB0aGUgYmVzdCBvZiB0aGUKKwkJICogcmVtYWluaW5nIGNhbmRpZGF0ZXMgd2hpY2ggYXJlIG5vdCB1c2luZworCQkgKiB0aGlzIGludGVyZmFjZS4gKi8KKwkJYmVzdF9yb3V0ZXIgPSBmaXJzdF9jYW5kaWRhdGU7CisKKwkJZG8geworCQkJLyogcmVjdl9pZiA9PSBOVUxMIG9uIHRoZSBmaXJzdCBub2RlLiAqLworCQkJaWYgKChyb3V0ZXItPmlmX2luY29taW5nICE9IHJlY3ZfaWYpICYmCisJCQkJKHJvdXRlci0+dHFfYXZnID4gYmVzdF9yb3V0ZXItPnRxX2F2ZykpCisJCQkJCWJlc3Rfcm91dGVyID0gcm91dGVyOworCisJCQlyb3V0ZXIgPSByb3V0ZXItPm5leHRfYm9uZF9jYW5kaWRhdGU7CisJCX0gd2hpbGUgKHJvdXRlciAhPSBmaXJzdF9jYW5kaWRhdGUpOworCisJCXJvdXRlciA9IGJlc3Rfcm91dGVyOworCX0KKworCXJldHVybiByb3V0ZXI7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfdW5pY2FzdF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGhkcl9zaXplKQoreworCXN0cnVjdCBldGhoZHIgKmV0aGhkcjsKKworCS8qIGRyb3AgcGFja2V0IGlmIGl0IGhhcyBub3QgbmVjZXNzYXJ5IG1pbmltdW0gc2l6ZSAqLworCWlmICh1bmxpa2VseSghcHNrYl9tYXlfcHVsbChza2IsIGhkcl9zaXplKSkpCisJCXJldHVybiAtMTsKKworCWV0aGhkciA9IChzdHJ1Y3QgZXRoaGRyICopc2tiX21hY19oZWFkZXIoc2tiKTsKKworCS8qIHBhY2tldCB3aXRoIHVuaWNhc3QgaW5kaWNhdGlvbiBidXQgYnJvYWRjYXN0IHJlY2lwaWVudCAqLworCWlmIChpc19icm9hZGNhc3RfZXRoZXJfYWRkcihldGhoZHItPmhfZGVzdCkpCisJCXJldHVybiAtMTsKKworCS8qIHBhY2tldCB3aXRoIGJyb2FkY2FzdCBzZW5kZXIgYWRkcmVzcyAqLworCWlmIChpc19icm9hZGNhc3RfZXRoZXJfYWRkcihldGhoZHItPmhfc291cmNlKSkKKwkJcmV0dXJuIC0xOworCisJLyogbm90IGZvciBtZSAqLworCWlmICghaXNfbXlfbWFjKGV0aGhkci0+aF9kZXN0KSkKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIDA7Cit9CisKK2ludCByb3V0ZV91bmljYXN0X3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYmF0bWFuX2lmICpyZWN2X2lmLAorCQkJIGludCBoZHJfc2l6ZSkKK3sKKwlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYocmVjdl9pZi0+c29mdF9pZmFjZSk7CisJc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlOworCXN0cnVjdCBuZWlnaF9ub2RlICpyb3V0ZXI7CisJc3RydWN0IGJhdG1hbl9pZiAqYmF0bWFuX2lmOworCXVpbnQ4X3QgZHN0YWRkcltFVEhfQUxFTl07CisJc3RydWN0IHVuaWNhc3RfcGFja2V0ICp1bmljYXN0X3BhY2tldDsKKwlzdHJ1Y3QgZXRoaGRyICpldGhoZHIgPSAoc3RydWN0IGV0aGhkciAqKXNrYl9tYWNfaGVhZGVyKHNrYik7CisJaW50IHJldDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqbmV3X3NrYjsKKworCXVuaWNhc3RfcGFja2V0ID0gKHN0cnVjdCB1bmljYXN0X3BhY2tldCAqKXNrYi0+ZGF0YTsKKworCS8qIFRUTCBleGNlZWRlZCAqLworCWlmICh1bmljYXN0X3BhY2tldC0+dHRsIDwgMikgeworCQlwcl9kZWJ1ZygiV2FybmluZyAtIGNhbid0IGZvcndhcmQgdW5pY2FzdCBwYWNrZXQgZnJvbSAlcE0gdG8gIgorCQkJICIlcE06IHR0bCBleGNlZWRlZFxuIiwgZXRoaGRyLT5oX3NvdXJjZSwKKwkJCSB1bmljYXN0X3BhY2tldC0+ZGVzdCk7CisJCXJldHVybiBORVRfUlhfRFJPUDsKKwl9CisKKwkvKiBnZXQgcm91dGluZyBpbmZvcm1hdGlvbiAqLworCXNwaW5fbG9ja19iaCgmYmF0X3ByaXYtPm9yaWdfaGFzaF9sb2NrKTsKKwlvcmlnX25vZGUgPSAoKHN0cnVjdCBvcmlnX25vZGUgKikKKwkJICAgICBoYXNoX2ZpbmQoYmF0X3ByaXYtPm9yaWdfaGFzaCwgY29tcGFyZV9vcmlnLCBjaG9vc2Vfb3JpZywKKwkJCSAgICAgICB1bmljYXN0X3BhY2tldC0+ZGVzdCkpOworCisJcm91dGVyID0gZmluZF9yb3V0ZXIoYmF0X3ByaXYsIG9yaWdfbm9kZSwgcmVjdl9pZik7CisKKwlpZiAoIXJvdXRlcikgeworCQlzcGluX3VubG9ja19iaCgmYmF0X3ByaXYtPm9yaWdfaGFzaF9sb2NrKTsKKwkJcmV0dXJuIE5FVF9SWF9EUk9QOworCX0KKworCS8qIGRvbid0IGxvY2sgd2hpbGUgc2VuZGluZyB0aGUgcGFja2V0cyAuLi4gd2UgdGhlcmVmb3JlCisJICogY29weSB0aGUgcmVxdWlyZWQgZGF0YSBiZWZvcmUgc2VuZGluZyAqLworCisJYmF0bWFuX2lmID0gcm91dGVyLT5pZl9pbmNvbWluZzsKKwltZW1jcHkoZHN0YWRkciwgcm91dGVyLT5hZGRyLCBFVEhfQUxFTik7CisKKwlzcGluX3VubG9ja19iaCgmYmF0X3ByaXYtPm9yaWdfaGFzaF9sb2NrKTsKKworCS8qIGNyZWF0ZSBhIGNvcHkgb2YgdGhlIHNrYiwgaWYgbmVlZGVkLCB0byBtb2RpZnkgaXQuICovCisJaWYgKHNrYl9jb3coc2tiLCBzaXplb2Yoc3RydWN0IGV0aGhkcikpIDwgMCkKKwkJcmV0dXJuIE5FVF9SWF9EUk9QOworCisJdW5pY2FzdF9wYWNrZXQgPSAoc3RydWN0IHVuaWNhc3RfcGFja2V0ICopc2tiLT5kYXRhOworCisJaWYgKHVuaWNhc3RfcGFja2V0LT5wYWNrZXRfdHlwZSA9PSBCQVRfVU5JQ0FTVCAmJgorCSAgICBhdG9taWNfcmVhZCgmYmF0X3ByaXYtPmZyYWdtZW50YXRpb24pICYmCisJICAgIHNrYi0+bGVuID4gYmF0bWFuX2lmLT5uZXRfZGV2LT5tdHUpCisJCXJldHVybiBmcmFnX3NlbmRfc2tiKHNrYiwgYmF0X3ByaXYsIGJhdG1hbl9pZiwKKwkJCQkgICAgIGRzdGFkZHIpOworCisJaWYgKHVuaWNhc3RfcGFja2V0LT5wYWNrZXRfdHlwZSA9PSBCQVRfVU5JQ0FTVF9GUkFHICYmCisJICAgIDIgKiBza2ItPmxlbiAtIGhkcl9zaXplIDw9IGJhdG1hbl9pZi0+bmV0X2Rldi0+bXR1KSB7CisKKwkJcmV0ID0gZnJhZ19yZWFzc2VtYmxlX3NrYihza2IsIGJhdF9wcml2LCAmbmV3X3NrYik7CisKKwkJaWYgKHJldCA9PSBORVRfUlhfRFJPUCkKKwkJCXJldHVybiBORVRfUlhfRFJPUDsKKworCQkvKiBwYWNrZXQgd2FzIGJ1ZmZlcmVkIGZvciBsYXRlIG1lcmdlICovCisJCWlmICghbmV3X3NrYikKKwkJCXJldHVybiBORVRfUlhfU1VDQ0VTUzsKKworCQlza2IgPSBuZXdfc2tiOworCQl1bmljYXN0X3BhY2tldCA9IChzdHJ1Y3QgdW5pY2FzdF9wYWNrZXQgKilza2ItPmRhdGE7CisJfQorCisJLyogZGVjcmVtZW50IHR0bCAqLworCXVuaWNhc3RfcGFja2V0LT50dGwtLTsKKworCS8qIHJvdXRlIGl0ICovCisJc2VuZF9za2JfcGFja2V0KHNrYiwgYmF0bWFuX2lmLCBkc3RhZGRyKTsKKworCXJldHVybiBORVRfUlhfU1VDQ0VTUzsKK30KKworaW50IHJlY3ZfdW5pY2FzdF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJhdG1hbl9pZiAqcmVjdl9pZikKK3sKKwlzdHJ1Y3QgdW5pY2FzdF9wYWNrZXQgKnVuaWNhc3RfcGFja2V0OworCWludCBoZHJfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdW5pY2FzdF9wYWNrZXQpOworCisJaWYgKGNoZWNrX3VuaWNhc3RfcGFja2V0KHNrYiwgaGRyX3NpemUpIDwgMCkKKwkJcmV0dXJuIE5FVF9SWF9EUk9QOworCisJdW5pY2FzdF9wYWNrZXQgPSAoc3RydWN0IHVuaWNhc3RfcGFja2V0ICopc2tiLT5kYXRhOworCisJLyogcGFja2V0IGZvciBtZSAqLworCWlmIChpc19teV9tYWModW5pY2FzdF9wYWNrZXQtPmRlc3QpKSB7CisJCWludGVyZmFjZV9yeChyZWN2X2lmLT5zb2Z0X2lmYWNlLCBza2IsIHJlY3ZfaWYsIGhkcl9zaXplKTsKKwkJcmV0dXJuIE5FVF9SWF9TVUNDRVNTOworCX0KKworCXJldHVybiByb3V0ZV91bmljYXN0X3BhY2tldChza2IsIHJlY3ZfaWYsIGhkcl9zaXplKTsKK30KKworaW50IHJlY3ZfdWNhc3RfZnJhZ19wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJhdG1hbl9pZiAqcmVjdl9pZikKK3sKKwlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYocmVjdl9pZi0+c29mdF9pZmFjZSk7CisJc3RydWN0IHVuaWNhc3RfZnJhZ19wYWNrZXQgKnVuaWNhc3RfcGFja2V0OworCWludCBoZHJfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdW5pY2FzdF9mcmFnX3BhY2tldCk7CisJc3RydWN0IHNrX2J1ZmYgKm5ld19za2IgPSBOVUxMOworCWludCByZXQ7CisKKwlpZiAoY2hlY2tfdW5pY2FzdF9wYWNrZXQoc2tiLCBoZHJfc2l6ZSkgPCAwKQorCQlyZXR1cm4gTkVUX1JYX0RST1A7CisKKwl1bmljYXN0X3BhY2tldCA9IChzdHJ1Y3QgdW5pY2FzdF9mcmFnX3BhY2tldCAqKXNrYi0+ZGF0YTsKKworCS8qIHBhY2tldCBmb3IgbWUgKi8KKwlpZiAoaXNfbXlfbWFjKHVuaWNhc3RfcGFja2V0LT5kZXN0KSkgeworCisJCXJldCA9IGZyYWdfcmVhc3NlbWJsZV9za2Ioc2tiLCBiYXRfcHJpdiwgJm5ld19za2IpOworCisJCWlmIChyZXQgPT0gTkVUX1JYX0RST1ApCisJCQlyZXR1cm4gTkVUX1JYX0RST1A7CisKKwkJLyogcGFja2V0IHdhcyBidWZmZXJlZCBmb3IgbGF0ZSBtZXJnZSAqLworCQlpZiAoIW5ld19za2IpCisJCQlyZXR1cm4gTkVUX1JYX1NVQ0NFU1M7CisKKwkJaW50ZXJmYWNlX3J4KHJlY3ZfaWYtPnNvZnRfaWZhY2UsIG5ld19za2IsIHJlY3ZfaWYsCisJCQkgICAgIHNpemVvZihzdHJ1Y3QgdW5pY2FzdF9wYWNrZXQpKTsKKwkJcmV0dXJuIE5FVF9SWF9TVUNDRVNTOworCX0KKworCXJldHVybiByb3V0ZV91bmljYXN0X3BhY2tldChza2IsIHJlY3ZfaWYsIGhkcl9zaXplKTsKK30KKworCitpbnQgcmVjdl9iY2FzdF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJhdG1hbl9pZiAqcmVjdl9pZikKK3sKKwlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYocmVjdl9pZi0+c29mdF9pZmFjZSk7CisJc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlOworCXN0cnVjdCBiY2FzdF9wYWNrZXQgKmJjYXN0X3BhY2tldDsKKwlzdHJ1Y3QgZXRoaGRyICpldGhoZHI7CisJaW50IGhkcl9zaXplID0gc2l6ZW9mKHN0cnVjdCBiY2FzdF9wYWNrZXQpOworCWludDMyX3Qgc2VxX2RpZmY7CisKKwkvKiBkcm9wIHBhY2tldCBpZiBpdCBoYXMgbm90IG5lY2Vzc2FyeSBtaW5pbXVtIHNpemUgKi8KKwlpZiAodW5saWtlbHkoIXBza2JfbWF5X3B1bGwoc2tiLCBoZHJfc2l6ZSkpKQorCQlyZXR1cm4gTkVUX1JYX0RST1A7CisKKwlldGhoZHIgPSAoc3RydWN0IGV0aGhkciAqKXNrYl9tYWNfaGVhZGVyKHNrYik7CisKKwkvKiBwYWNrZXQgd2l0aCBicm9hZGNhc3QgaW5kaWNhdGlvbiBidXQgdW5pY2FzdCByZWNpcGllbnQgKi8KKwlpZiAoIWlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKGV0aGhkci0+aF9kZXN0KSkKKwkJcmV0dXJuIE5FVF9SWF9EUk9QOworCisJLyogcGFja2V0IHdpdGggYnJvYWRjYXN0IHNlbmRlciBhZGRyZXNzICovCisJaWYgKGlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKGV0aGhkci0+aF9zb3VyY2UpKQorCQlyZXR1cm4gTkVUX1JYX0RST1A7CisKKwkvKiBpZ25vcmUgYnJvYWRjYXN0cyBzZW50IGJ5IG15c2VsZiAqLworCWlmIChpc19teV9tYWMoZXRoaGRyLT5oX3NvdXJjZSkpCisJCXJldHVybiBORVRfUlhfRFJPUDsKKworCWJjYXN0X3BhY2tldCA9IChzdHJ1Y3QgYmNhc3RfcGFja2V0ICopc2tiLT5kYXRhOworCisJLyogaWdub3JlIGJyb2FkY2FzdHMgb3JpZ2luYXRlZCBieSBteXNlbGYgKi8KKwlpZiAoaXNfbXlfbWFjKGJjYXN0X3BhY2tldC0+b3JpZykpCisJCXJldHVybiBORVRfUlhfRFJPUDsKKworCWlmIChiY2FzdF9wYWNrZXQtPnR0bCA8IDIpCisJCXJldHVybiBORVRfUlhfRFJPUDsKKworCXNwaW5fbG9ja19iaCgmYmF0X3ByaXYtPm9yaWdfaGFzaF9sb2NrKTsKKwlvcmlnX25vZGUgPSAoKHN0cnVjdCBvcmlnX25vZGUgKikKKwkJICAgICBoYXNoX2ZpbmQoYmF0X3ByaXYtPm9yaWdfaGFzaCwgY29tcGFyZV9vcmlnLCBjaG9vc2Vfb3JpZywKKwkJCSAgICAgICBiY2FzdF9wYWNrZXQtPm9yaWcpKTsKKworCWlmICghb3JpZ19ub2RlKSB7CisJCXNwaW5fdW5sb2NrX2JoKCZiYXRfcHJpdi0+b3JpZ19oYXNoX2xvY2spOworCQlyZXR1cm4gTkVUX1JYX0RST1A7CisJfQorCisJLyogY2hlY2sgd2hldGhlciB0aGUgcGFja2V0IGlzIGEgZHVwbGljYXRlICovCisJaWYgKGdldF9iaXRfc3RhdHVzKG9yaWdfbm9kZS0+YmNhc3RfYml0cywKKwkJCSAgIG9yaWdfbm9kZS0+bGFzdF9iY2FzdF9zZXFubywKKwkJCSAgIG50b2hsKGJjYXN0X3BhY2tldC0+c2Vxbm8pKSkgeworCQlzcGluX3VubG9ja19iaCgmYmF0X3ByaXYtPm9yaWdfaGFzaF9sb2NrKTsKKwkJcmV0dXJuIE5FVF9SWF9EUk9QOworCX0KKworCXNlcV9kaWZmID0gbnRvaGwoYmNhc3RfcGFja2V0LT5zZXFubykgLSBvcmlnX25vZGUtPmxhc3RfYmNhc3Rfc2Vxbm87CisKKwkvKiBjaGVjayB3aGV0aGVyIHRoZSBwYWNrZXQgaXMgb2xkIGFuZCB0aGUgaG9zdCBqdXN0IHJlc3RhcnRlZC4gKi8KKwlpZiAod2luZG93X3Byb3RlY3RlZChiYXRfcHJpdiwgc2VxX2RpZmYsCisJCQkgICAgICZvcmlnX25vZGUtPmJjYXN0X3NlcW5vX3Jlc2V0KSkgeworCQlzcGluX3VubG9ja19iaCgmYmF0X3ByaXYtPm9yaWdfaGFzaF9sb2NrKTsKKwkJcmV0dXJuIE5FVF9SWF9EUk9QOworCX0KKworCS8qIG1hcmsgYnJvYWRjYXN0IGluIGZsb29kIGhpc3RvcnksIHVwZGF0ZSB3aW5kb3cgcG9zaXRpb24KKwkgKiBpZiByZXF1aXJlZC4gKi8KKwlpZiAoYml0X2dldF9wYWNrZXQoYmF0X3ByaXYsIG9yaWdfbm9kZS0+YmNhc3RfYml0cywgc2VxX2RpZmYsIDEpKQorCQlvcmlnX25vZGUtPmxhc3RfYmNhc3Rfc2Vxbm8gPSBudG9obChiY2FzdF9wYWNrZXQtPnNlcW5vKTsKKworCXNwaW5fdW5sb2NrX2JoKCZiYXRfcHJpdi0+b3JpZ19oYXNoX2xvY2spOworCS8qIHJlYnJvYWRjYXN0IHBhY2tldCAqLworCWFkZF9iY2FzdF9wYWNrZXRfdG9fbGlzdChiYXRfcHJpdiwgc2tiKTsKKworCS8qIGJyb2FkY2FzdCBmb3IgbWUgKi8KKwlpbnRlcmZhY2VfcngocmVjdl9pZi0+c29mdF9pZmFjZSwgc2tiLCByZWN2X2lmLCBoZHJfc2l6ZSk7CisKKwlyZXR1cm4gTkVUX1JYX1NVQ0NFU1M7Cit9CisKK2ludCByZWN2X3Zpc19wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJhdG1hbl9pZiAqcmVjdl9pZikKK3sKKwlzdHJ1Y3QgdmlzX3BhY2tldCAqdmlzX3BhY2tldDsKKwlzdHJ1Y3QgZXRoaGRyICpldGhoZHI7CisJc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KHJlY3ZfaWYtPnNvZnRfaWZhY2UpOworCWludCBoZHJfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdmlzX3BhY2tldCk7CisKKwkvKiBrZWVwIHNrYiBsaW5lYXIgKi8KKwlpZiAoc2tiX2xpbmVhcml6ZShza2IpIDwgMCkKKwkJcmV0dXJuIE5FVF9SWF9EUk9QOworCisJaWYgKHVubGlrZWx5KCFwc2tiX21heV9wdWxsKHNrYiwgaGRyX3NpemUpKSkKKwkJcmV0dXJuIE5FVF9SWF9EUk9QOworCisJdmlzX3BhY2tldCA9IChzdHJ1Y3QgdmlzX3BhY2tldCAqKXNrYi0+ZGF0YTsKKwlldGhoZHIgPSAoc3RydWN0IGV0aGhkciAqKXNrYl9tYWNfaGVhZGVyKHNrYik7CisKKwkvKiBub3QgZm9yIG1lICovCisJaWYgKCFpc19teV9tYWMoZXRoaGRyLT5oX2Rlc3QpKQorCQlyZXR1cm4gTkVUX1JYX0RST1A7CisKKwkvKiBpZ25vcmUgb3duIHBhY2tldHMgKi8KKwlpZiAoaXNfbXlfbWFjKHZpc19wYWNrZXQtPnZpc19vcmlnKSkKKwkJcmV0dXJuIE5FVF9SWF9EUk9QOworCisJaWYgKGlzX215X21hYyh2aXNfcGFja2V0LT5zZW5kZXJfb3JpZykpCisJCXJldHVybiBORVRfUlhfRFJPUDsKKworCXN3aXRjaCAodmlzX3BhY2tldC0+dmlzX3R5cGUpIHsKKwljYXNlIFZJU19UWVBFX1NFUlZFUl9TWU5DOgorCQlyZWNlaXZlX3NlcnZlcl9zeW5jX3BhY2tldChiYXRfcHJpdiwgdmlzX3BhY2tldCwKKwkJCQkJICAgc2tiX2hlYWRsZW4oc2tiKSk7CisJCWJyZWFrOworCisJY2FzZSBWSVNfVFlQRV9DTElFTlRfVVBEQVRFOgorCQlyZWNlaXZlX2NsaWVudF91cGRhdGVfcGFja2V0KGJhdF9wcml2LCB2aXNfcGFja2V0LAorCQkJCQkgICAgIHNrYl9oZWFkbGVuKHNrYikpOworCQlicmVhazsKKworCWRlZmF1bHQ6CS8qIGlnbm9yZSB1bmtub3duIHBhY2tldCAqLworCQlicmVhazsKKwl9CisKKwkvKiBXZSB0YWtlIGEgY29weSBvZiB0aGUgZGF0YSBpbiB0aGUgcGFja2V0LCBzbyB3ZSBzaG91bGQKKwkgICBhbHdheXMgZnJlZSB0aGUgc2tidWYuICovCisJcmV0dXJuIE5FVF9SWF9EUk9QOworfQpkaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvcm91dGluZy5oIGIvbmV0L2JhdG1hbi1hZHYvcm91dGluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxMDhmMjMKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvYmF0bWFuLWFkdi9yb3V0aW5nLmgKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDEwIEIuQS5ULk0uQS5OLiBjb250cmlidXRvcnM6CisgKgorICogTWFyZWsgTGluZG5lciwgU2ltb24gV3VuZGVybGljaAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSwgVVNBCisgKgorICovCisKKyNpZm5kZWYgX05FVF9CQVRNQU5fQURWX1JPVVRJTkdfSF8KKyNkZWZpbmUgX05FVF9CQVRNQU5fQURWX1JPVVRJTkdfSF8KKworI2luY2x1ZGUgInR5cGVzLmgiCisKK3ZvaWQgc2xpZGVfb3duX2JjYXN0X3dpbmRvdyhzdHJ1Y3QgYmF0bWFuX2lmICpiYXRtYW5faWYpOwordm9pZCByZWNlaXZlX2JhdF9wYWNrZXQoc3RydWN0IGV0aGhkciAqZXRoaGRyLAorCQkJCXN0cnVjdCBiYXRtYW5fcGFja2V0ICpiYXRtYW5fcGFja2V0LAorCQkJCXVuc2lnbmVkIGNoYXIgKmhuYV9idWZmLCBpbnQgaG5hX2J1ZmZfbGVuLAorCQkJCXN0cnVjdCBiYXRtYW5faWYgKmlmX2luY29taW5nKTsKK3ZvaWQgdXBkYXRlX3JvdXRlcyhzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2LCBzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGUsCisJCSAgIHN0cnVjdCBuZWlnaF9ub2RlICpuZWlnaF9ub2RlLCB1bnNpZ25lZCBjaGFyICpobmFfYnVmZiwKKwkJICAgaW50IGhuYV9idWZmX2xlbik7CitpbnQgcm91dGVfdW5pY2FzdF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJhdG1hbl9pZiAqcmVjdl9pZiwKKwkJCSBpbnQgaGRyX3NpemUpOworaW50IHJlY3ZfaWNtcF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJhdG1hbl9pZiAqcmVjdl9pZik7CitpbnQgcmVjdl91bmljYXN0X3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYmF0bWFuX2lmICpyZWN2X2lmKTsKK2ludCByZWN2X3VjYXN0X2ZyYWdfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBiYXRtYW5faWYgKnJlY3ZfaWYpOworaW50IHJlY3ZfYmNhc3RfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBiYXRtYW5faWYgKnJlY3ZfaWYpOworaW50IHJlY3ZfdmlzX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYmF0bWFuX2lmICpyZWN2X2lmKTsKK2ludCByZWN2X2JhdF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJhdG1hbl9pZiAqcmVjdl9pZik7CitzdHJ1Y3QgbmVpZ2hfbm9kZSAqZmluZF9yb3V0ZXIoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiwKKwkJc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlLCBzdHJ1Y3QgYmF0bWFuX2lmICpyZWN2X2lmKTsKK3ZvaWQgdXBkYXRlX2JvbmRpbmdfY2FuZGlkYXRlcyhzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2LAorCQkJICAgICAgIHN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZSk7CisKKyNlbmRpZiAvKiBfTkVUX0JBVE1BTl9BRFZfUk9VVElOR19IXyAqLwpkaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvc2VuZC5jIGIvbmV0L2JhdG1hbi1hZHYvc2VuZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4OWI5ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvYmF0bWFuLWFkdi9zZW5kLmMKQEAgLTAsMCArMSw1ODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMCBCLkEuVC5NLkEuTi4gY29udHJpYnV0b3JzOgorICoKKyAqIE1hcmVrIExpbmRuZXIsIFNpbW9uIFd1bmRlcmxpY2gKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEsIFVTQQorICoKKyAqLworCisjaW5jbHVkZSAibWFpbi5oIgorI2luY2x1ZGUgInNlbmQuaCIKKyNpbmNsdWRlICJyb3V0aW5nLmgiCisjaW5jbHVkZSAidHJhbnNsYXRpb24tdGFibGUuaCIKKyNpbmNsdWRlICJzb2Z0LWludGVyZmFjZS5oIgorI2luY2x1ZGUgImhhcmQtaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAidHlwZXMuaCIKKyNpbmNsdWRlICJ2aXMuaCIKKyNpbmNsdWRlICJhZ2dyZWdhdGlvbi5oIgorI2luY2x1ZGUgImdhdGV3YXlfY29tbW9uLmgiCisjaW5jbHVkZSAib3JpZ2luYXRvci5oIgorCitzdGF0aWMgdm9pZCBzZW5kX291dHN0YW5kaW5nX2JjYXN0X3BhY2tldChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworCisvKiBhcHBseSBob3AgcGVuYWx0eSBmb3IgYSBub3JtYWwgbGluayAqLworc3RhdGljIHVpbnQ4X3QgaG9wX3BlbmFsdHkoY29uc3QgdWludDhfdCB0cSwgc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdikKK3sKKwlpbnQgaG9wX3BlbmFsdHkgPSBhdG9taWNfcmVhZCgmYmF0X3ByaXYtPmhvcF9wZW5hbHR5KTsKKwlyZXR1cm4gKHRxICogKFRRX01BWF9WQUxVRSAtIGhvcF9wZW5hbHR5KSkgLyAoVFFfTUFYX1ZBTFVFKTsKK30KKworLyogd2hlbiBkbyB3ZSBzY2hlZHVsZSBvdXIgb3duIHBhY2tldCB0byBiZSBzZW50ICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBvd25fc2VuZF90aW1lKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYpCit7CisJcmV0dXJuIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKAorCQkgICBhdG9taWNfcmVhZCgmYmF0X3ByaXYtPm9yaWdfaW50ZXJ2YWwpIC0KKwkJICAgSklUVEVSICsgKHJhbmRvbTMyKCkgJSAyKkpJVFRFUikpOworfQorCisvKiB3aGVuIGRvIHdlIHNjaGVkdWxlIGEgZm9yd2FyZGVkIHBhY2tldCB0byBiZSBzZW50ICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBmb3J3YXJkX3NlbmRfdGltZShzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2KQoreworCXJldHVybiBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhyYW5kb20zMigpICUgKEpJVFRFUi8yKSk7Cit9CisKKy8qIHNlbmQgb3V0IGFuIGFscmVhZHkgcHJlcGFyZWQgcGFja2V0IHRvIHRoZSBnaXZlbiBhZGRyZXNzIHZpYSB0aGUKKyAqIHNwZWNpZmllZCBiYXRtYW4gaW50ZXJmYWNlICovCitpbnQgc2VuZF9za2JfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJc3RydWN0IGJhdG1hbl9pZiAqYmF0bWFuX2lmLAorCQkJCXVpbnQ4X3QgKmRzdF9hZGRyKQoreworCXN0cnVjdCBldGhoZHIgKmV0aGhkcjsKKworCWlmIChiYXRtYW5faWYtPmlmX3N0YXR1cyAhPSBJRl9BQ1RJVkUpCisJCWdvdG8gc2VuZF9za2JfZXJyOworCisJaWYgKHVubGlrZWx5KCFiYXRtYW5faWYtPm5ldF9kZXYpKQorCQlnb3RvIHNlbmRfc2tiX2VycjsKKworCWlmICghKGJhdG1hbl9pZi0+bmV0X2Rldi0+ZmxhZ3MgJiBJRkZfVVApKSB7CisJCXByX3dhcm5pbmcoIkludGVyZmFjZSAlcyBpcyBub3QgdXAgLSBjYW4ndCBzZW5kIHBhY2tldCB2aWEgIgorCQkJICAgInRoYXQgaW50ZXJmYWNlIVxuIiwgYmF0bWFuX2lmLT5uZXRfZGV2LT5uYW1lKTsKKwkJZ290byBzZW5kX3NrYl9lcnI7CisJfQorCisJLyogcHVzaCB0byB0aGUgZXRoZXJuZXQgaGVhZGVyLiAqLworCWlmIChteV9za2JfaGVhZF9wdXNoKHNrYiwgc2l6ZW9mKHN0cnVjdCBldGhoZHIpKSA8IDApCisJCWdvdG8gc2VuZF9za2JfZXJyOworCisJc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKKworCWV0aGhkciA9IChzdHJ1Y3QgZXRoaGRyICopIHNrYl9tYWNfaGVhZGVyKHNrYik7CisJbWVtY3B5KGV0aGhkci0+aF9zb3VyY2UsIGJhdG1hbl9pZi0+bmV0X2Rldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwltZW1jcHkoZXRoaGRyLT5oX2Rlc3QsIGRzdF9hZGRyLCBFVEhfQUxFTik7CisJZXRoaGRyLT5oX3Byb3RvID0gX19jb25zdGFudF9odG9ucyhFVEhfUF9CQVRNQU4pOworCisJc2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIEVUSF9ITEVOKTsKKwlza2ItPnByaW9yaXR5ID0gVENfUFJJT19DT05UUk9MOworCXNrYi0+cHJvdG9jb2wgPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0JBVE1BTik7CisKKwlza2ItPmRldiA9IGJhdG1hbl9pZi0+bmV0X2RldjsKKworCS8qIGRldl9xdWV1ZV94bWl0KCkgcmV0dXJucyBhIG5lZ2F0aXZlIHJlc3VsdCBvbiBlcnJvci4JIEhvd2V2ZXIgb24KKwkgKiBjb25nZXN0aW9uIGFuZCB0cmFmZmljIHNoYXBpbmcsIGl0IGRyb3BzIGFuZCByZXR1cm5zIE5FVF9YTUlUX0RST1AKKwkgKiAod2hpY2ggaXMgPiAwKS4gVGhpcyB3aWxsIG5vdCBiZSB0cmVhdGVkIGFzIGFuIGVycm9yLiAqLworCisJcmV0dXJuIGRldl9xdWV1ZV94bWl0KHNrYik7CitzZW5kX3NrYl9lcnI6CisJa2ZyZWVfc2tiKHNrYik7CisJcmV0dXJuIE5FVF9YTUlUX0RST1A7Cit9CisKKy8qIFNlbmQgYSBwYWNrZXQgdG8gYSBnaXZlbiBpbnRlcmZhY2UgKi8KK3N0YXRpYyB2b2lkIHNlbmRfcGFja2V0X3RvX2lmKHN0cnVjdCBmb3J3X3BhY2tldCAqZm9yd19wYWNrZXQsCisJCQkgICAgICBzdHJ1Y3QgYmF0bWFuX2lmICpiYXRtYW5faWYpCit7CisJc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KGJhdG1hbl9pZi0+c29mdF9pZmFjZSk7CisJY2hhciAqZndkX3N0cjsKKwl1aW50OF90IHBhY2tldF9udW07CisJaW50MTZfdCBidWZmX3BvczsKKwlzdHJ1Y3QgYmF0bWFuX3BhY2tldCAqYmF0bWFuX3BhY2tldDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJaWYgKGJhdG1hbl9pZi0+aWZfc3RhdHVzICE9IElGX0FDVElWRSkKKwkJcmV0dXJuOworCisJcGFja2V0X251bSA9IDA7CisJYnVmZl9wb3MgPSAwOworCWJhdG1hbl9wYWNrZXQgPSAoc3RydWN0IGJhdG1hbl9wYWNrZXQgKilmb3J3X3BhY2tldC0+c2tiLT5kYXRhOworCisJLyogYWRqdXN0IGFsbCBmbGFncyBhbmQgbG9nIHBhY2tldHMgKi8KKwl3aGlsZSAoYWdncmVnYXRlZF9wYWNrZXQoYnVmZl9wb3MsCisJCQkJIGZvcndfcGFja2V0LT5wYWNrZXRfbGVuLAorCQkJCSBiYXRtYW5fcGFja2V0LT5udW1faG5hKSkgeworCisJCS8qIHdlIG1pZ2h0IGhhdmUgYWdncmVnYXRlZCBkaXJlY3QgbGluayBwYWNrZXRzIHdpdGggYW4KKwkJICogb3JkaW5hcnkgYmFzZSBwYWNrZXQgKi8KKwkJaWYgKChmb3J3X3BhY2tldC0+ZGlyZWN0X2xpbmtfZmxhZ3MgJiAoMSA8PCBwYWNrZXRfbnVtKSkgJiYKKwkJICAgIChmb3J3X3BhY2tldC0+aWZfaW5jb21pbmcgPT0gYmF0bWFuX2lmKSkKKwkJCWJhdG1hbl9wYWNrZXQtPmZsYWdzIHw9IERJUkVDVExJTks7CisJCWVsc2UKKwkJCWJhdG1hbl9wYWNrZXQtPmZsYWdzICY9IH5ESVJFQ1RMSU5LOworCisJCWZ3ZF9zdHIgPSAocGFja2V0X251bSA+IDAgPyAiRm9yd2FyZGluZyIgOiAoZm9yd19wYWNrZXQtPm93biA/CisJCQkJCQkJICAgICJTZW5kaW5nIG93biIgOgorCQkJCQkJCSAgICAiRm9yd2FyZGluZyIpKTsKKwkJYmF0X2RiZyhEQkdfQkFUTUFOLCBiYXRfcHJpdiwKKwkJCSIlcyAlc3BhY2tldCAob3JpZ2luYXRvciAlcE0sIHNlcW5vICVkLCBUUSAlZCwgVFRMICVkLCIKKwkJCSIgSURGICVzKSBvbiBpbnRlcmZhY2UgJXMgWyVwTV1cbiIsCisJCQlmd2Rfc3RyLCAocGFja2V0X251bSA+IDAgPyAiYWdncmVnYXRlZCAiIDogIiIpLAorCQkJYmF0bWFuX3BhY2tldC0+b3JpZywgbnRvaGwoYmF0bWFuX3BhY2tldC0+c2Vxbm8pLAorCQkJYmF0bWFuX3BhY2tldC0+dHEsIGJhdG1hbl9wYWNrZXQtPnR0bCwKKwkJCShiYXRtYW5fcGFja2V0LT5mbGFncyAmIERJUkVDVExJTksgPworCQkJICJvbiIgOiAib2ZmIiksCisJCQliYXRtYW5faWYtPm5ldF9kZXYtPm5hbWUsIGJhdG1hbl9pZi0+bmV0X2Rldi0+ZGV2X2FkZHIpOworCisJCWJ1ZmZfcG9zICs9IHNpemVvZihzdHJ1Y3QgYmF0bWFuX3BhY2tldCkgKworCQkJKGJhdG1hbl9wYWNrZXQtPm51bV9obmEgKiBFVEhfQUxFTik7CisJCXBhY2tldF9udW0rKzsKKwkJYmF0bWFuX3BhY2tldCA9IChzdHJ1Y3QgYmF0bWFuX3BhY2tldCAqKQorCQkJKGZvcndfcGFja2V0LT5za2ItPmRhdGEgKyBidWZmX3Bvcyk7CisJfQorCisJLyogY3JlYXRlIGNsb25lIGJlY2F1c2UgZnVuY3Rpb24gaXMgY2FsbGVkIG1vcmUgdGhhbiBvbmNlICovCisJc2tiID0gc2tiX2Nsb25lKGZvcndfcGFja2V0LT5za2IsIEdGUF9BVE9NSUMpOworCWlmIChza2IpCisJCXNlbmRfc2tiX3BhY2tldChza2IsIGJhdG1hbl9pZiwgYnJvYWRjYXN0X2FkZHIpOworfQorCisvKiBzZW5kIGEgYmF0bWFuIHBhY2tldCAqLworc3RhdGljIHZvaWQgc2VuZF9wYWNrZXQoc3RydWN0IGZvcndfcGFja2V0ICpmb3J3X3BhY2tldCkKK3sKKwlzdHJ1Y3QgYmF0bWFuX2lmICpiYXRtYW5faWY7CisJc3RydWN0IG5ldF9kZXZpY2UgKnNvZnRfaWZhY2U7CisJc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdjsKKwlzdHJ1Y3QgYmF0bWFuX3BhY2tldCAqYmF0bWFuX3BhY2tldCA9CisJCShzdHJ1Y3QgYmF0bWFuX3BhY2tldCAqKShmb3J3X3BhY2tldC0+c2tiLT5kYXRhKTsKKwl1bnNpZ25lZCBjaGFyIGRpcmVjdGxpbmsgPSAoYmF0bWFuX3BhY2tldC0+ZmxhZ3MgJiBESVJFQ1RMSU5LID8gMSA6IDApOworCisJaWYgKCFmb3J3X3BhY2tldC0+aWZfaW5jb21pbmcpIHsKKwkJcHJfZXJyKCJFcnJvciAtIGNhbid0IGZvcndhcmQgcGFja2V0OiBpbmNvbWluZyBpZmFjZSBub3QgIgorCQkgICAgICAgInNwZWNpZmllZFxuIik7CisJCXJldHVybjsKKwl9CisKKwlzb2Z0X2lmYWNlID0gZm9yd19wYWNrZXQtPmlmX2luY29taW5nLT5zb2Z0X2lmYWNlOworCWJhdF9wcml2ID0gbmV0ZGV2X3ByaXYoc29mdF9pZmFjZSk7CisKKwlpZiAoZm9yd19wYWNrZXQtPmlmX2luY29taW5nLT5pZl9zdGF0dXMgIT0gSUZfQUNUSVZFKQorCQlyZXR1cm47CisKKwkvKiBtdWx0aWhvbWVkIHBlZXIgYXNzdW1lZCAqLworCS8qIG5vbi1wcmltYXJ5IE9HTXMgYXJlIG9ubHkgYnJvYWRjYXN0ZWQgb24gdGhlaXIgaW50ZXJmYWNlICovCisJaWYgKChkaXJlY3RsaW5rICYmIChiYXRtYW5fcGFja2V0LT50dGwgPT0gMSkpIHx8CisJICAgIChmb3J3X3BhY2tldC0+b3duICYmIChmb3J3X3BhY2tldC0+aWZfaW5jb21pbmctPmlmX251bSA+IDApKSkgeworCisJCS8qIEZJWE1FOiB3aGF0IGFib3V0IGFnZ3JlZ2F0ZWQgcGFja2V0cyA/ICovCisJCWJhdF9kYmcoREJHX0JBVE1BTiwgYmF0X3ByaXYsCisJCQkiJXMgcGFja2V0IChvcmlnaW5hdG9yICVwTSwgc2Vxbm8gJWQsIFRUTCAlZCkgIgorCQkJIm9uIGludGVyZmFjZSAlcyBbJXBNXVxuIiwKKwkJCShmb3J3X3BhY2tldC0+b3duID8gIlNlbmRpbmcgb3duIiA6ICJGb3J3YXJkaW5nIiksCisJCQliYXRtYW5fcGFja2V0LT5vcmlnLCBudG9obChiYXRtYW5fcGFja2V0LT5zZXFubyksCisJCQliYXRtYW5fcGFja2V0LT50dGwsCisJCQlmb3J3X3BhY2tldC0+aWZfaW5jb21pbmctPm5ldF9kZXYtPm5hbWUsCisJCQlmb3J3X3BhY2tldC0+aWZfaW5jb21pbmctPm5ldF9kZXYtPmRldl9hZGRyKTsKKworCQkvKiBza2IgaXMgb25seSB1c2VkIG9uY2UgYW5kIHRoYW4gZm9yd19wYWNrZXQgaXMgZnJlZSdkICovCisJCXNlbmRfc2tiX3BhY2tldChmb3J3X3BhY2tldC0+c2tiLCBmb3J3X3BhY2tldC0+aWZfaW5jb21pbmcsCisJCQkJYnJvYWRjYXN0X2FkZHIpOworCQlmb3J3X3BhY2tldC0+c2tiID0gTlVMTDsKKworCQlyZXR1cm47CisJfQorCisJLyogYnJvYWRjYXN0IG9uIGV2ZXJ5IGludGVyZmFjZSAqLworCXJjdV9yZWFkX2xvY2soKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShiYXRtYW5faWYsICZpZl9saXN0LCBsaXN0KSB7CisJCWlmIChiYXRtYW5faWYtPnNvZnRfaWZhY2UgIT0gc29mdF9pZmFjZSkKKwkJCWNvbnRpbnVlOworCisJCXNlbmRfcGFja2V0X3RvX2lmKGZvcndfcGFja2V0LCBiYXRtYW5faWYpOworCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKK30KKworc3RhdGljIHZvaWQgcmVidWlsZF9iYXRtYW5fcGFja2V0KHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYsCisJCQkJICBzdHJ1Y3QgYmF0bWFuX2lmICpiYXRtYW5faWYpCit7CisJaW50IG5ld19sZW47CisJdW5zaWduZWQgY2hhciAqbmV3X2J1ZmY7CisJc3RydWN0IGJhdG1hbl9wYWNrZXQgKmJhdG1hbl9wYWNrZXQ7CisKKwluZXdfbGVuID0gc2l6ZW9mKHN0cnVjdCBiYXRtYW5fcGFja2V0KSArCisJCQkoYmF0X3ByaXYtPm51bV9sb2NhbF9obmEgKiBFVEhfQUxFTik7CisJbmV3X2J1ZmYgPSBrbWFsbG9jKG5ld19sZW4sIEdGUF9BVE9NSUMpOworCisJLyoga2VlcCBvbGQgYnVmZmVyIGlmIGttYWxsb2Mgc2hvdWxkIGZhaWwgKi8KKwlpZiAobmV3X2J1ZmYpIHsKKwkJbWVtY3B5KG5ld19idWZmLCBiYXRtYW5faWYtPnBhY2tldF9idWZmLAorCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBiYXRtYW5fcGFja2V0KSk7CisJCWJhdG1hbl9wYWNrZXQgPSAoc3RydWN0IGJhdG1hbl9wYWNrZXQgKiluZXdfYnVmZjsKKworCQliYXRtYW5fcGFja2V0LT5udW1faG5hID0gaG5hX2xvY2FsX2ZpbGxfYnVmZmVyKGJhdF9wcml2LAorCQkJCW5ld19idWZmICsgc2l6ZW9mKHN0cnVjdCBiYXRtYW5fcGFja2V0KSwKKwkJCQluZXdfbGVuIC0gc2l6ZW9mKHN0cnVjdCBiYXRtYW5fcGFja2V0KSk7CisKKwkJa2ZyZWUoYmF0bWFuX2lmLT5wYWNrZXRfYnVmZik7CisJCWJhdG1hbl9pZi0+cGFja2V0X2J1ZmYgPSBuZXdfYnVmZjsKKwkJYmF0bWFuX2lmLT5wYWNrZXRfbGVuID0gbmV3X2xlbjsKKwl9Cit9CisKK3ZvaWQgc2NoZWR1bGVfb3duX3BhY2tldChzdHJ1Y3QgYmF0bWFuX2lmICpiYXRtYW5faWYpCit7CisJc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KGJhdG1hbl9pZi0+c29mdF9pZmFjZSk7CisJdW5zaWduZWQgbG9uZyBzZW5kX3RpbWU7CisJc3RydWN0IGJhdG1hbl9wYWNrZXQgKmJhdG1hbl9wYWNrZXQ7CisJaW50IHZpc19zZXJ2ZXI7CisKKwlpZiAoKGJhdG1hbl9pZi0+aWZfc3RhdHVzID09IElGX05PVF9JTl9VU0UpIHx8CisJICAgIChiYXRtYW5faWYtPmlmX3N0YXR1cyA9PSBJRl9UT19CRV9SRU1PVkVEKSkKKwkJcmV0dXJuOworCisJdmlzX3NlcnZlciA9IGF0b21pY19yZWFkKCZiYXRfcHJpdi0+dmlzX21vZGUpOworCisJLyoqCisJICogdGhlIGludGVyZmFjZSBnZXRzIGFjdGl2YXRlZCBoZXJlIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucyBiZXR3ZWVuCisJICogdGhlIG1vbWVudCBvZiBhY3RpdmF0aW5nIHRoZSBpbnRlcmZhY2UgaW4KKwkgKiBoYXJkaWZfYWN0aXZhdGVfaW50ZXJmYWNlKCkgd2hlcmUgdGhlIG9yaWdpbmF0b3IgbWFjIGlzIHNldCBhbmQKKwkgKiBvdXRkYXRlZCBwYWNrZXRzIChlc3BlY2lhbGx5IHVuaW5pdGlhbGl6ZWQgbWFjIGFkZHJlc3NlcykgaW4gdGhlCisJICogcGFja2V0IHF1ZXVlCisJICovCisJaWYgKGJhdG1hbl9pZi0+aWZfc3RhdHVzID09IElGX1RPX0JFX0FDVElWQVRFRCkKKwkJYmF0bWFuX2lmLT5pZl9zdGF0dXMgPSBJRl9BQ1RJVkU7CisKKwkvKiBpZiBsb2NhbCBobmEgaGFzIGNoYW5nZWQgYW5kIGludGVyZmFjZSBpcyBhIHByaW1hcnkgaW50ZXJmYWNlICovCisJaWYgKChhdG9taWNfcmVhZCgmYmF0X3ByaXYtPmhuYV9sb2NhbF9jaGFuZ2VkKSkgJiYKKwkgICAgKGJhdG1hbl9pZiA9PSBiYXRfcHJpdi0+cHJpbWFyeV9pZikpCisJCXJlYnVpbGRfYmF0bWFuX3BhY2tldChiYXRfcHJpdiwgYmF0bWFuX2lmKTsKKworCS8qKgorCSAqIE5PVEU6IHBhY2tldF9idWZmIG1pZ2h0IGp1c3QgaGF2ZSBiZWVuIHJlLWFsbG9jYXRlZCBpbgorCSAqIHJlYnVpbGRfYmF0bWFuX3BhY2tldCgpCisJICovCisJYmF0bWFuX3BhY2tldCA9IChzdHJ1Y3QgYmF0bWFuX3BhY2tldCAqKWJhdG1hbl9pZi0+cGFja2V0X2J1ZmY7CisKKwkvKiBjaGFuZ2Ugc2VxdWVuY2UgbnVtYmVyIHRvIG5ldHdvcmsgb3JkZXIgKi8KKwliYXRtYW5fcGFja2V0LT5zZXFubyA9CisJCWh0b25sKCh1aW50MzJfdClhdG9taWNfcmVhZCgmYmF0bWFuX2lmLT5zZXFubykpOworCisJaWYgKHZpc19zZXJ2ZXIgPT0gVklTX1RZUEVfU0VSVkVSX1NZTkMpCisJCWJhdG1hbl9wYWNrZXQtPmZsYWdzIHw9IFZJU19TRVJWRVI7CisJZWxzZQorCQliYXRtYW5fcGFja2V0LT5mbGFncyAmPSB+VklTX1NFUlZFUjsKKworCWlmICgoYmF0bWFuX2lmID09IGJhdF9wcml2LT5wcmltYXJ5X2lmKSAmJgorCSAgICAoYXRvbWljX3JlYWQoJmJhdF9wcml2LT5nd19tb2RlKSA9PSBHV19NT0RFX1NFUlZFUikpCisJCWJhdG1hbl9wYWNrZXQtPmd3X2ZsYWdzID0KKwkJCQkodWludDhfdClhdG9taWNfcmVhZCgmYmF0X3ByaXYtPmd3X2JhbmR3aWR0aCk7CisJZWxzZQorCQliYXRtYW5fcGFja2V0LT5nd19mbGFncyA9IDA7CisKKwlhdG9taWNfaW5jKCZiYXRtYW5faWYtPnNlcW5vKTsKKworCXNsaWRlX293bl9iY2FzdF93aW5kb3coYmF0bWFuX2lmKTsKKwlzZW5kX3RpbWUgPSBvd25fc2VuZF90aW1lKGJhdF9wcml2KTsKKwlhZGRfYmF0X3BhY2tldF90b19saXN0KGJhdF9wcml2LAorCQkJICAgICAgIGJhdG1hbl9pZi0+cGFja2V0X2J1ZmYsCisJCQkgICAgICAgYmF0bWFuX2lmLT5wYWNrZXRfbGVuLAorCQkJICAgICAgIGJhdG1hbl9pZiwgMSwgc2VuZF90aW1lKTsKK30KKwordm9pZCBzY2hlZHVsZV9mb3J3YXJkX3BhY2tldChzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGUsCisJCQkgICAgIHN0cnVjdCBldGhoZHIgKmV0aGhkciwKKwkJCSAgICAgc3RydWN0IGJhdG1hbl9wYWNrZXQgKmJhdG1hbl9wYWNrZXQsCisJCQkgICAgIHVpbnQ4X3QgZGlyZWN0bGluaywgaW50IGhuYV9idWZmX2xlbiwKKwkJCSAgICAgc3RydWN0IGJhdG1hbl9pZiAqaWZfaW5jb21pbmcpCit7CisJc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KGlmX2luY29taW5nLT5zb2Z0X2lmYWNlKTsKKwl1bnNpZ25lZCBjaGFyIGluX3RxLCBpbl90dGwsIHRxX2F2ZyA9IDA7CisJdW5zaWduZWQgbG9uZyBzZW5kX3RpbWU7CisKKwlpZiAoYmF0bWFuX3BhY2tldC0+dHRsIDw9IDEpIHsKKwkJYmF0X2RiZyhEQkdfQkFUTUFOLCBiYXRfcHJpdiwgInR0bCBleGNlZWRlZFxuIik7CisJCXJldHVybjsKKwl9CisKKwlpbl90cSA9IGJhdG1hbl9wYWNrZXQtPnRxOworCWluX3R0bCA9IGJhdG1hbl9wYWNrZXQtPnR0bDsKKworCWJhdG1hbl9wYWNrZXQtPnR0bC0tOworCW1lbWNweShiYXRtYW5fcGFja2V0LT5wcmV2X3NlbmRlciwgZXRoaGRyLT5oX3NvdXJjZSwgRVRIX0FMRU4pOworCisJLyogcmVicm9hZGNhc3QgdHEgb2Ygb3VyIGJlc3QgcmFua2luZyBuZWlnaGJvciB0byBlbnN1cmUgdGhlIHJlYnJvYWRjYXN0CisJICogb2Ygb3VyIGJlc3QgdHEgdmFsdWUgKi8KKwlpZiAoKG9yaWdfbm9kZS0+cm91dGVyKSAmJiAob3JpZ19ub2RlLT5yb3V0ZXItPnRxX2F2ZyAhPSAwKSkgeworCisJCS8qIHJlYnJvYWRjYXN0IG9nbSBvZiBiZXN0IHJhbmtpbmcgbmVpZ2hib3IgYXMgaXMgKi8KKwkJaWYgKCFjb21wYXJlX29yaWcob3JpZ19ub2RlLT5yb3V0ZXItPmFkZHIsIGV0aGhkci0+aF9zb3VyY2UpKSB7CisJCQliYXRtYW5fcGFja2V0LT50cSA9IG9yaWdfbm9kZS0+cm91dGVyLT50cV9hdmc7CisKKwkJCWlmIChvcmlnX25vZGUtPnJvdXRlci0+bGFzdF90dGwpCisJCQkJYmF0bWFuX3BhY2tldC0+dHRsID0gb3JpZ19ub2RlLT5yb3V0ZXItPmxhc3RfdHRsCisJCQkJCQkJLSAxOworCQl9CisKKwkJdHFfYXZnID0gb3JpZ19ub2RlLT5yb3V0ZXItPnRxX2F2ZzsKKwl9CisKKwkvKiBhcHBseSBob3AgcGVuYWx0eSAqLworCWJhdG1hbl9wYWNrZXQtPnRxID0gaG9wX3BlbmFsdHkoYmF0bWFuX3BhY2tldC0+dHEsIGJhdF9wcml2KTsKKworCWJhdF9kYmcoREJHX0JBVE1BTiwgYmF0X3ByaXYsCisJCSJGb3J3YXJkaW5nIHBhY2tldDogdHFfb3JpZzogJWksIHRxX2F2ZzogJWksICIKKwkJInRxX2Zvcnc6ICVpLCB0dGxfb3JpZzogJWksIHR0bF9mb3J3OiAlaVxuIiwKKwkJaW5fdHEsIHRxX2F2ZywgYmF0bWFuX3BhY2tldC0+dHEsIGluX3R0bCAtIDEsCisJCWJhdG1hbl9wYWNrZXQtPnR0bCk7CisKKwliYXRtYW5fcGFja2V0LT5zZXFubyA9IGh0b25sKGJhdG1hbl9wYWNrZXQtPnNlcW5vKTsKKworCS8qIHN3aXRjaCBvZiBwcmltYXJpZXMgZmlyc3QgaG9wIGZsYWcgd2hlbiBmb3J3YXJkaW5nICovCisJYmF0bWFuX3BhY2tldC0+ZmxhZ3MgJj0gflBSSU1BUklFU19GSVJTVF9IT1A7CisJaWYgKGRpcmVjdGxpbmspCisJCWJhdG1hbl9wYWNrZXQtPmZsYWdzIHw9IERJUkVDVExJTks7CisJZWxzZQorCQliYXRtYW5fcGFja2V0LT5mbGFncyAmPSB+RElSRUNUTElOSzsKKworCXNlbmRfdGltZSA9IGZvcndhcmRfc2VuZF90aW1lKGJhdF9wcml2KTsKKwlhZGRfYmF0X3BhY2tldF90b19saXN0KGJhdF9wcml2LAorCQkJICAgICAgICh1bnNpZ25lZCBjaGFyICopYmF0bWFuX3BhY2tldCwKKwkJCSAgICAgICBzaXplb2Yoc3RydWN0IGJhdG1hbl9wYWNrZXQpICsgaG5hX2J1ZmZfbGVuLAorCQkJICAgICAgIGlmX2luY29taW5nLCAwLCBzZW5kX3RpbWUpOworfQorCitzdGF0aWMgdm9pZCBmb3J3X3BhY2tldF9mcmVlKHN0cnVjdCBmb3J3X3BhY2tldCAqZm9yd19wYWNrZXQpCit7CisJaWYgKGZvcndfcGFja2V0LT5za2IpCisJCWtmcmVlX3NrYihmb3J3X3BhY2tldC0+c2tiKTsKKwlrZnJlZShmb3J3X3BhY2tldCk7Cit9CisKK3N0YXRpYyB2b2lkIF9hZGRfYmNhc3RfcGFja2V0X3RvX2xpc3Qoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiwKKwkJCQkgICAgICBzdHJ1Y3QgZm9yd19wYWNrZXQgKmZvcndfcGFja2V0LAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgc2VuZF90aW1lKQoreworCUlOSVRfSExJU1RfTk9ERSgmZm9yd19wYWNrZXQtPmxpc3QpOworCisJLyogYWRkIG5ldyBwYWNrZXQgdG8gcGFja2V0IGxpc3QgKi8KKwlzcGluX2xvY2tfYmgoJmJhdF9wcml2LT5mb3J3X2JjYXN0X2xpc3RfbG9jayk7CisJaGxpc3RfYWRkX2hlYWQoJmZvcndfcGFja2V0LT5saXN0LCAmYmF0X3ByaXYtPmZvcndfYmNhc3RfbGlzdCk7CisJc3Bpbl91bmxvY2tfYmgoJmJhdF9wcml2LT5mb3J3X2JjYXN0X2xpc3RfbG9jayk7CisKKwkvKiBzdGFydCB0aW1lciBmb3IgdGhpcyBwYWNrZXQgKi8KKwlJTklUX0RFTEFZRURfV09SSygmZm9yd19wYWNrZXQtPmRlbGF5ZWRfd29yaywKKwkJCSAgc2VuZF9vdXRzdGFuZGluZ19iY2FzdF9wYWNrZXQpOworCXF1ZXVlX2RlbGF5ZWRfd29yayhiYXRfZXZlbnRfd29ya3F1ZXVlLCAmZm9yd19wYWNrZXQtPmRlbGF5ZWRfd29yaywKKwkJCSAgIHNlbmRfdGltZSk7Cit9CisKKyNkZWZpbmUgYXRvbWljX2RlY19ub3RfemVybyh2KSAgICAgICAgICBhdG9taWNfYWRkX3VubGVzcygodiksIC0xLCAwKQorLyogYWRkIGEgYnJvYWRjYXN0IHBhY2tldCB0byB0aGUgcXVldWUgYW5kIHNldHVwIHRpbWVycy4gYnJvYWRjYXN0IHBhY2tldHMKKyAqIGFyZSBzZW50IG11bHRpcGxlIHRpbWVzIHRvIGluY3JlYXNlIHByb2JhYmlsaXR5IGZvciBiZWVpbmcgcmVjZWl2ZWQuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIE5FVERFVl9UWF9PSyBvbiBzdWNjZXNzIGFuZCBORVRERVZfVFhfQlVTWSBvbgorICogZXJyb3JzLgorICoKKyAqIFRoZSBza2IgaXMgbm90IGNvbnN1bWVkLCBzbyB0aGUgY2FsbGVyIHNob3VsZCBtYWtlIHN1cmUgdGhhdCB0aGUKKyAqIHNrYiBpcyBmcmVlZC4gKi8KK2ludCBhZGRfYmNhc3RfcGFja2V0X3RvX2xpc3Qoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgZm9yd19wYWNrZXQgKmZvcndfcGFja2V0OworCXN0cnVjdCBiY2FzdF9wYWNrZXQgKmJjYXN0X3BhY2tldDsKKworCWlmICghYXRvbWljX2RlY19ub3RfemVybygmYmF0X3ByaXYtPmJjYXN0X3F1ZXVlX2xlZnQpKSB7CisJCWJhdF9kYmcoREJHX0JBVE1BTiwgYmF0X3ByaXYsICJiY2FzdCBwYWNrZXQgcXVldWUgZnVsbFxuIik7CisJCWdvdG8gb3V0OworCX0KKworCWlmICghYmF0X3ByaXYtPnByaW1hcnlfaWYpCisJCWdvdG8gb3V0OworCisJZm9yd19wYWNrZXQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZm9yd19wYWNrZXQpLCBHRlBfQVRPTUlDKTsKKworCWlmICghZm9yd19wYWNrZXQpCisJCWdvdG8gb3V0X2FuZF9pbmM7CisKKwlza2IgPSBza2JfY29weShza2IsIEdGUF9BVE9NSUMpOworCWlmICghc2tiKQorCQlnb3RvIHBhY2tldF9mcmVlOworCisJLyogYXMgd2UgaGF2ZSBhIGNvcHkgbm93LCBpdCBpcyBzYWZlIHRvIGRlY3JlYXNlIHRoZSBUVEwgKi8KKwliY2FzdF9wYWNrZXQgPSAoc3RydWN0IGJjYXN0X3BhY2tldCAqKXNrYi0+ZGF0YTsKKwliY2FzdF9wYWNrZXQtPnR0bC0tOworCisJc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKKworCWZvcndfcGFja2V0LT5za2IgPSBza2I7CisJZm9yd19wYWNrZXQtPmlmX2luY29taW5nID0gYmF0X3ByaXYtPnByaW1hcnlfaWY7CisKKwkvKiBob3cgb2Z0ZW4gZGlkIHdlIHNlbmQgdGhlIGJjYXN0IHBhY2tldCA/ICovCisJZm9yd19wYWNrZXQtPm51bV9wYWNrZXRzID0gMDsKKworCV9hZGRfYmNhc3RfcGFja2V0X3RvX2xpc3QoYmF0X3ByaXYsIGZvcndfcGFja2V0LCAxKTsKKwlyZXR1cm4gTkVUREVWX1RYX09LOworCitwYWNrZXRfZnJlZToKKwlrZnJlZShmb3J3X3BhY2tldCk7CitvdXRfYW5kX2luYzoKKwlhdG9taWNfaW5jKCZiYXRfcHJpdi0+YmNhc3RfcXVldWVfbGVmdCk7CitvdXQ6CisJcmV0dXJuIE5FVERFVl9UWF9CVVNZOworfQorCitzdGF0aWMgdm9pZCBzZW5kX291dHN0YW5kaW5nX2JjYXN0X3BhY2tldChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGJhdG1hbl9pZiAqYmF0bWFuX2lmOworCXN0cnVjdCBkZWxheWVkX3dvcmsgKmRlbGF5ZWRfd29yayA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZGVsYXllZF93b3JrLCB3b3JrKTsKKwlzdHJ1Y3QgZm9yd19wYWNrZXQgKmZvcndfcGFja2V0ID0KKwkJY29udGFpbmVyX29mKGRlbGF5ZWRfd29yaywgc3RydWN0IGZvcndfcGFja2V0LCBkZWxheWVkX3dvcmspOworCXN0cnVjdCBza19idWZmICpza2IxOworCXN0cnVjdCBuZXRfZGV2aWNlICpzb2Z0X2lmYWNlID0gZm9yd19wYWNrZXQtPmlmX2luY29taW5nLT5zb2Z0X2lmYWNlOworCXN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYgPSBuZXRkZXZfcHJpdihzb2Z0X2lmYWNlKTsKKworCXNwaW5fbG9ja19iaCgmYmF0X3ByaXYtPmZvcndfYmNhc3RfbGlzdF9sb2NrKTsKKwlobGlzdF9kZWwoJmZvcndfcGFja2V0LT5saXN0KTsKKwlzcGluX3VubG9ja19iaCgmYmF0X3ByaXYtPmZvcndfYmNhc3RfbGlzdF9sb2NrKTsKKworCWlmIChhdG9taWNfcmVhZCgmYmF0X3ByaXYtPm1lc2hfc3RhdGUpID09IE1FU0hfREVBQ1RJVkFUSU5HKQorCQlnb3RvIG91dDsKKworCS8qIHJlYnJvYWRjYXN0IHBhY2tldCAqLworCXJjdV9yZWFkX2xvY2soKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShiYXRtYW5faWYsICZpZl9saXN0LCBsaXN0KSB7CisJCWlmIChiYXRtYW5faWYtPnNvZnRfaWZhY2UgIT0gc29mdF9pZmFjZSkKKwkJCWNvbnRpbnVlOworCisJCS8qIHNlbmQgYSBjb3B5IG9mIHRoZSBzYXZlZCBza2IgKi8KKwkJc2tiMSA9IHNrYl9jbG9uZShmb3J3X3BhY2tldC0+c2tiLCBHRlBfQVRPTUlDKTsKKwkJaWYgKHNrYjEpCisJCQlzZW5kX3NrYl9wYWNrZXQoc2tiMSwgYmF0bWFuX2lmLCBicm9hZGNhc3RfYWRkcik7CisJfQorCXJjdV9yZWFkX3VubG9jaygpOworCisJZm9yd19wYWNrZXQtPm51bV9wYWNrZXRzKys7CisKKwkvKiBpZiB3ZSBzdGlsbCBoYXZlIHNvbWUgbW9yZSBiY2FzdHMgdG8gc2VuZCAqLworCWlmIChmb3J3X3BhY2tldC0+bnVtX3BhY2tldHMgPCAzKSB7CisJCV9hZGRfYmNhc3RfcGFja2V0X3RvX2xpc3QoYmF0X3ByaXYsIGZvcndfcGFja2V0LAorCQkJCQkgICgoNSAqIEhaKSAvIDEwMDApKTsKKwkJcmV0dXJuOworCX0KKworb3V0OgorCWZvcndfcGFja2V0X2ZyZWUoZm9yd19wYWNrZXQpOworCWF0b21pY19pbmMoJmJhdF9wcml2LT5iY2FzdF9xdWV1ZV9sZWZ0KTsKK30KKwordm9pZCBzZW5kX291dHN0YW5kaW5nX2JhdF9wYWNrZXQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBkZWxheWVkX3dvcmsgKmRlbGF5ZWRfd29yayA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZGVsYXllZF93b3JrLCB3b3JrKTsKKwlzdHJ1Y3QgZm9yd19wYWNrZXQgKmZvcndfcGFja2V0ID0KKwkJY29udGFpbmVyX29mKGRlbGF5ZWRfd29yaywgc3RydWN0IGZvcndfcGFja2V0LCBkZWxheWVkX3dvcmspOworCXN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXY7CisKKwliYXRfcHJpdiA9IG5ldGRldl9wcml2KGZvcndfcGFja2V0LT5pZl9pbmNvbWluZy0+c29mdF9pZmFjZSk7CisJc3Bpbl9sb2NrX2JoKCZiYXRfcHJpdi0+Zm9yd19iYXRfbGlzdF9sb2NrKTsKKwlobGlzdF9kZWwoJmZvcndfcGFja2V0LT5saXN0KTsKKwlzcGluX3VubG9ja19iaCgmYmF0X3ByaXYtPmZvcndfYmF0X2xpc3RfbG9jayk7CisKKwlpZiAoYXRvbWljX3JlYWQoJmJhdF9wcml2LT5tZXNoX3N0YXRlKSA9PSBNRVNIX0RFQUNUSVZBVElORykKKwkJZ290byBvdXQ7CisKKwlzZW5kX3BhY2tldChmb3J3X3BhY2tldCk7CisKKwkvKioKKwkgKiB3ZSBoYXZlIHRvIGhhdmUgYXQgbGVhc3Qgb25lIHBhY2tldCBpbiB0aGUgcXVldWUKKwkgKiB0byBkZXRlcm1pbmUgdGhlIHF1ZXVlcyB3YWtlIHVwIHRpbWUgdW5sZXNzIHdlIGFyZQorCSAqIHNodXR0aW5nIGRvd24KKwkgKi8KKwlpZiAoZm9yd19wYWNrZXQtPm93bikKKwkJc2NoZWR1bGVfb3duX3BhY2tldChmb3J3X3BhY2tldC0+aWZfaW5jb21pbmcpOworCitvdXQ6CisJLyogZG9uJ3QgY291bnQgb3duIHBhY2tldCAqLworCWlmICghZm9yd19wYWNrZXQtPm93bikKKwkJYXRvbWljX2luYygmYmF0X3ByaXYtPmJhdG1hbl9xdWV1ZV9sZWZ0KTsKKworCWZvcndfcGFja2V0X2ZyZWUoZm9yd19wYWNrZXQpOworfQorCit2b2lkIHB1cmdlX291dHN0YW5kaW5nX3BhY2tldHMoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiwKKwkJCSAgICAgICBzdHJ1Y3QgYmF0bWFuX2lmICpiYXRtYW5faWYpCit7CisJc3RydWN0IGZvcndfcGFja2V0ICpmb3J3X3BhY2tldDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqdG1wX25vZGUsICpzYWZlX3RtcF9ub2RlOworCisJaWYgKGJhdG1hbl9pZikKKwkJYmF0X2RiZyhEQkdfQkFUTUFOLCBiYXRfcHJpdiwKKwkJCSJwdXJnZV9vdXRzdGFuZGluZ19wYWNrZXRzKCk6ICVzXG4iLAorCQkJYmF0bWFuX2lmLT5uZXRfZGV2LT5uYW1lKTsKKwllbHNlCisJCWJhdF9kYmcoREJHX0JBVE1BTiwgYmF0X3ByaXYsCisJCQkicHVyZ2Vfb3V0c3RhbmRpbmdfcGFja2V0cygpXG4iKTsKKworCS8qIGZyZWUgYmNhc3QgbGlzdCAqLworCXNwaW5fbG9ja19iaCgmYmF0X3ByaXYtPmZvcndfYmNhc3RfbGlzdF9sb2NrKTsKKwlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZvcndfcGFja2V0LCB0bXBfbm9kZSwgc2FmZV90bXBfbm9kZSwKKwkJCQkgICZiYXRfcHJpdi0+Zm9yd19iY2FzdF9saXN0LCBsaXN0KSB7CisKKwkJLyoqCisJCSAqIGlmIHB1cmdlX291dHN0YW5kaW5nX3BhY2tldHMoKSB3YXMgY2FsbGVkIHdpdGggYW4gYXJnbXVtZW50CisJCSAqIHdlIGRlbGV0ZSBvbmx5IHBhY2tldHMgYmVsb25naW5nIHRvIHRoZSBnaXZlbiBpbnRlcmZhY2UKKwkJICovCisJCWlmICgoYmF0bWFuX2lmKSAmJgorCQkgICAgKGZvcndfcGFja2V0LT5pZl9pbmNvbWluZyAhPSBiYXRtYW5faWYpKQorCQkJY29udGludWU7CisKKwkJc3Bpbl91bmxvY2tfYmgoJmJhdF9wcml2LT5mb3J3X2JjYXN0X2xpc3RfbG9jayk7CisKKwkJLyoqCisJCSAqIHNlbmRfb3V0c3RhbmRpbmdfYmNhc3RfcGFja2V0KCkgd2lsbCBsb2NrIHRoZSBsaXN0IHRvCisJCSAqIGRlbGV0ZSB0aGUgaXRlbSBmcm9tIHRoZSBsaXN0CisJCSAqLworCQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmZvcndfcGFja2V0LT5kZWxheWVkX3dvcmspOworCQlzcGluX2xvY2tfYmgoJmJhdF9wcml2LT5mb3J3X2JjYXN0X2xpc3RfbG9jayk7CisJfQorCXNwaW5fdW5sb2NrX2JoKCZiYXRfcHJpdi0+Zm9yd19iY2FzdF9saXN0X2xvY2spOworCisJLyogZnJlZSBiYXRtYW4gcGFja2V0IGxpc3QgKi8KKwlzcGluX2xvY2tfYmgoJmJhdF9wcml2LT5mb3J3X2JhdF9saXN0X2xvY2spOworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZm9yd19wYWNrZXQsIHRtcF9ub2RlLCBzYWZlX3RtcF9ub2RlLAorCQkJCSAgJmJhdF9wcml2LT5mb3J3X2JhdF9saXN0LCBsaXN0KSB7CisKKwkJLyoqCisJCSAqIGlmIHB1cmdlX291dHN0YW5kaW5nX3BhY2tldHMoKSB3YXMgY2FsbGVkIHdpdGggYW4gYXJnbXVtZW50CisJCSAqIHdlIGRlbGV0ZSBvbmx5IHBhY2tldHMgYmVsb25naW5nIHRvIHRoZSBnaXZlbiBpbnRlcmZhY2UKKwkJICovCisJCWlmICgoYmF0bWFuX2lmKSAmJgorCQkgICAgKGZvcndfcGFja2V0LT5pZl9pbmNvbWluZyAhPSBiYXRtYW5faWYpKQorCQkJY29udGludWU7CisKKwkJc3Bpbl91bmxvY2tfYmgoJmJhdF9wcml2LT5mb3J3X2JhdF9saXN0X2xvY2spOworCisJCS8qKgorCQkgKiBzZW5kX291dHN0YW5kaW5nX2JhdF9wYWNrZXQoKSB3aWxsIGxvY2sgdGhlIGxpc3QgdG8KKwkJICogZGVsZXRlIHRoZSBpdGVtIGZyb20gdGhlIGxpc3QKKwkJICovCisJCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmZm9yd19wYWNrZXQtPmRlbGF5ZWRfd29yayk7CisJCXNwaW5fbG9ja19iaCgmYmF0X3ByaXYtPmZvcndfYmF0X2xpc3RfbG9jayk7CisJfQorCXNwaW5fdW5sb2NrX2JoKCZiYXRfcHJpdi0+Zm9yd19iYXRfbGlzdF9sb2NrKTsKK30KZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L3NlbmQuaCBiL25ldC9iYXRtYW4tYWR2L3NlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGNlZmE4Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L2JhdG1hbi1hZHYvc2VuZC5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMCBCLkEuVC5NLkEuTi4gY29udHJpYnV0b3JzOgorICoKKyAqIE1hcmVrIExpbmRuZXIsIFNpbW9uIFd1bmRlcmxpY2gKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEsIFVTQQorICoKKyAqLworCisjaWZuZGVmIF9ORVRfQkFUTUFOX0FEVl9TRU5EX0hfCisjZGVmaW5lIF9ORVRfQkFUTUFOX0FEVl9TRU5EX0hfCisKKyNpbmNsdWRlICJ0eXBlcy5oIgorCitpbnQgc2VuZF9za2JfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJc3RydWN0IGJhdG1hbl9pZiAqYmF0bWFuX2lmLAorCQkJCXVpbnQ4X3QgKmRzdF9hZGRyKTsKK3ZvaWQgc2NoZWR1bGVfb3duX3BhY2tldChzdHJ1Y3QgYmF0bWFuX2lmICpiYXRtYW5faWYpOwordm9pZCBzY2hlZHVsZV9mb3J3YXJkX3BhY2tldChzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGUsCisJCQkgICAgIHN0cnVjdCBldGhoZHIgKmV0aGhkciwKKwkJCSAgICAgc3RydWN0IGJhdG1hbl9wYWNrZXQgKmJhdG1hbl9wYWNrZXQsCisJCQkgICAgIHVpbnQ4X3QgZGlyZWN0bGluaywgaW50IGhuYV9idWZmX2xlbiwKKwkJCSAgICAgc3RydWN0IGJhdG1hbl9pZiAqaWZfb3V0Z29pbmcpOworaW50IGFkZF9iY2FzdF9wYWNrZXRfdG9fbGlzdChzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK3ZvaWQgc2VuZF9vdXRzdGFuZGluZ19iYXRfcGFja2V0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Cit2b2lkIHB1cmdlX291dHN0YW5kaW5nX3BhY2tldHMoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiwKKwkJCSAgICAgICBzdHJ1Y3QgYmF0bWFuX2lmICpiYXRtYW5faWYpOworCisjZW5kaWYgLyogX05FVF9CQVRNQU5fQURWX1NFTkRfSF8gKi8KZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L3NvZnQtaW50ZXJmYWNlLmMgYi9uZXQvYmF0bWFuLWFkdi9zb2Z0LWludGVyZmFjZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4OWVkZTEKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvYmF0bWFuLWFkdi9zb2Z0LWludGVyZmFjZS5jCkBAIC0wLDAgKzEsNjk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTAgQi5BLlQuTS5BLk4uIGNvbnRyaWJ1dG9yczoKKyAqCisgKiBNYXJlayBMaW5kbmVyLCBTaW1vbiBXdW5kZXJsaWNoCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxLCBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgIm1haW4uaCIKKyNpbmNsdWRlICJzb2Z0LWludGVyZmFjZS5oIgorI2luY2x1ZGUgImhhcmQtaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAicm91dGluZy5oIgorI2luY2x1ZGUgInNlbmQuaCIKKyNpbmNsdWRlICJiYXRfZGVidWdmcy5oIgorI2luY2x1ZGUgInRyYW5zbGF0aW9uLXRhYmxlLmgiCisjaW5jbHVkZSAidHlwZXMuaCIKKyNpbmNsdWRlICJoYXNoLmgiCisjaW5jbHVkZSAiZ2F0ZXdheV9jb21tb24uaCIKKyNpbmNsdWRlICJnYXRld2F5X2NsaWVudC5oIgorI2luY2x1ZGUgInNlbmQuaCIKKyNpbmNsdWRlICJiYXRfc3lzZnMuaCIKKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgorI2luY2x1ZGUgInVuaWNhc3QuaCIKKyNpbmNsdWRlICJyb3V0aW5nLmgiCisKKworc3RhdGljIGludCBiYXRfZ2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKTsKK3N0YXRpYyB2b2lkIGJhdF9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgIHN0cnVjdCBldGh0b29sX2RydmluZm8gKmluZm8pOworc3RhdGljIHUzMiBiYXRfZ2V0X21zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIHZvaWQgYmF0X3NldF9tc2dsZXZlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgdmFsdWUpOworc3RhdGljIHUzMiBiYXRfZ2V0X2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgdTMyIGJhdF9nZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBpbnQgYmF0X3NldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBiYXRfZXRodG9vbF9vcHMgPSB7CisJLmdldF9zZXR0aW5ncyA9IGJhdF9nZXRfc2V0dGluZ3MsCisJLmdldF9kcnZpbmZvID0gYmF0X2dldF9kcnZpbmZvLAorCS5nZXRfbXNnbGV2ZWwgPSBiYXRfZ2V0X21zZ2xldmVsLAorCS5zZXRfbXNnbGV2ZWwgPSBiYXRfc2V0X21zZ2xldmVsLAorCS5nZXRfbGluayA9IGJhdF9nZXRfbGluaywKKwkuZ2V0X3J4X2NzdW0gPSBiYXRfZ2V0X3J4X2NzdW0sCisJLnNldF9yeF9jc3VtID0gYmF0X3NldF9yeF9jc3VtCit9OworCitpbnQgbXlfc2tiX2hlYWRfcHVzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbGVuKQoreworCWludCByZXN1bHQ7CisKKwkvKioKKwkgKiBUT0RPOiBXZSBtdXN0IGNoZWNrIGlmIHdlIGNhbiByZWxlYXNlIGFsbCByZWZlcmVuY2VzIHRvIG5vbi1wYXlsb2FkCisJICogZGF0YSB1c2luZyBza2JfaGVhZGVyX3JlbGVhc2UgaW4gb3VyIHNrYnMgdG8gYWxsb3cgc2tiX2Nvd19oZWFkZXIgdG8KKwkgKiB3b3JrIG9wdGltYWxseS4gVGhpcyBtZWFucyB0aGF0IHRob3NlIHNrYnMgYXJlIG5vdCBhbGxvd2VkIHRvIHJlYWQKKwkgKiBvciB3cml0ZSBhbnkgZGF0YSB3aGljaCBpcyBiZWZvcmUgdGhlIGN1cnJlbnQgcG9zaXRpb24gb2Ygc2tiLT5kYXRhCisJICogYWZ0ZXIgdGhhdCBjYWxsIGFuZCB0aHVzIGFsbG93IG90aGVyIHNrYnMgd2l0aCB0aGUgc2FtZSBkYXRhIGJ1ZmZlcgorCSAqIHRvIHdyaXRlIGZyZWVseSBpbiB0aGF0IGFyZWEuCisJICovCisJcmVzdWx0ID0gc2tiX2Nvd19oZWFkKHNrYiwgbGVuKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCXNrYl9wdXNoKHNrYiwgbGVuKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc29mdGlmX25laWdoX2ZyZWVfcmVmKHN0cnVjdCBrcmVmICpyZWZjb3VudCkKK3sKKwlzdHJ1Y3Qgc29mdGlmX25laWdoICpzb2Z0aWZfbmVpZ2g7CisKKwlzb2Z0aWZfbmVpZ2ggPSBjb250YWluZXJfb2YocmVmY291bnQsIHN0cnVjdCBzb2Z0aWZfbmVpZ2gsIHJlZmNvdW50KTsKKwlrZnJlZShzb2Z0aWZfbmVpZ2gpOworfQorCitzdGF0aWMgdm9pZCBzb2Z0aWZfbmVpZ2hfZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpyY3UpCit7CisJc3RydWN0IHNvZnRpZl9uZWlnaCAqc29mdGlmX25laWdoOworCisJc29mdGlmX25laWdoID0gY29udGFpbmVyX29mKHJjdSwgc3RydWN0IHNvZnRpZl9uZWlnaCwgcmN1KTsKKwlrcmVmX3B1dCgmc29mdGlmX25laWdoLT5yZWZjb3VudCwgc29mdGlmX25laWdoX2ZyZWVfcmVmKTsKK30KKwordm9pZCBzb2Z0aWZfbmVpZ2hfcHVyZ2Uoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdikKK3sKKwlzdHJ1Y3Qgc29mdGlmX25laWdoICpzb2Z0aWZfbmVpZ2gsICpzb2Z0aWZfbmVpZ2hfdG1wOworCXN0cnVjdCBobGlzdF9ub2RlICpub2RlLCAqbm9kZV90bXA7CisKKwlzcGluX2xvY2tfYmgoJmJhdF9wcml2LT5zb2Z0aWZfbmVpZ2hfbG9jayk7CisKKwlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNvZnRpZl9uZWlnaCwgbm9kZSwgbm9kZV90bXAsCisJCQkJICAmYmF0X3ByaXYtPnNvZnRpZl9uZWlnaF9saXN0LCBsaXN0KSB7CisKKwkJaWYgKCghdGltZV9hZnRlcihqaWZmaWVzLCBzb2Z0aWZfbmVpZ2gtPmxhc3Rfc2VlbiArCisJCQkJbXNlY3NfdG9famlmZmllcyhTT0ZUSUZfTkVJR0hfVElNRU9VVCkpKSAmJgorCQkgICAgKGF0b21pY19yZWFkKCZiYXRfcHJpdi0+bWVzaF9zdGF0ZSkgPT0gTUVTSF9BQ1RJVkUpKQorCQkJY29udGludWU7CisKKwkJaGxpc3RfZGVsX3JjdSgmc29mdGlmX25laWdoLT5saXN0KTsKKworCQlpZiAoYmF0X3ByaXYtPnNvZnRpZl9uZWlnaCA9PSBzb2Z0aWZfbmVpZ2gpIHsKKwkJCWJhdF9kYmcoREJHX1JPVVRFUywgYmF0X3ByaXYsCisJCQkJICJDdXJyZW50IG1lc2ggZXhpdCBwb2ludCAnJXBNJyB2YW5pc2hlZCAiCisJCQkJICIodmlkOiAlZCkuXG4iLAorCQkJCSBzb2Z0aWZfbmVpZ2gtPmFkZHIsIHNvZnRpZl9uZWlnaC0+dmlkKTsKKwkJCXNvZnRpZl9uZWlnaF90bXAgPSBiYXRfcHJpdi0+c29mdGlmX25laWdoOworCQkJYmF0X3ByaXYtPnNvZnRpZl9uZWlnaCA9IE5VTEw7CisJCQlrcmVmX3B1dCgmc29mdGlmX25laWdoX3RtcC0+cmVmY291bnQsCisJCQkJIHNvZnRpZl9uZWlnaF9mcmVlX3JlZik7CisJCX0KKworCQljYWxsX3JjdSgmc29mdGlmX25laWdoLT5yY3UsIHNvZnRpZl9uZWlnaF9mcmVlX3JjdSk7CisJfQorCisJc3Bpbl91bmxvY2tfYmgoJmJhdF9wcml2LT5zb2Z0aWZfbmVpZ2hfbG9jayk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc29mdGlmX25laWdoICpzb2Z0aWZfbmVpZ2hfZ2V0KHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYsCisJCQkJCSAgICAgdWludDhfdCAqYWRkciwgc2hvcnQgdmlkKQoreworCXN0cnVjdCBzb2Z0aWZfbmVpZ2ggKnNvZnRpZl9uZWlnaDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKKworCXJjdV9yZWFkX2xvY2soKTsKKwlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc29mdGlmX25laWdoLCBub2RlLAorCQkJCSAmYmF0X3ByaXYtPnNvZnRpZl9uZWlnaF9saXN0LCBsaXN0KSB7CisJCWlmIChtZW1jbXAoc29mdGlmX25laWdoLT5hZGRyLCBhZGRyLCBFVEhfQUxFTikgIT0gMCkKKwkJCWNvbnRpbnVlOworCisJCWlmIChzb2Z0aWZfbmVpZ2gtPnZpZCAhPSB2aWQpCisJCQljb250aW51ZTsKKworCQlzb2Z0aWZfbmVpZ2gtPmxhc3Rfc2VlbiA9IGppZmZpZXM7CisJCWdvdG8gZm91bmQ7CisJfQorCisJc29mdGlmX25laWdoID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNvZnRpZl9uZWlnaCksIEdGUF9BVE9NSUMpOworCWlmICghc29mdGlmX25laWdoKQorCQlnb3RvIG91dDsKKworCW1lbWNweShzb2Z0aWZfbmVpZ2gtPmFkZHIsIGFkZHIsIEVUSF9BTEVOKTsKKwlzb2Z0aWZfbmVpZ2gtPnZpZCA9IHZpZDsKKwlzb2Z0aWZfbmVpZ2gtPmxhc3Rfc2VlbiA9IGppZmZpZXM7CisJa3JlZl9pbml0KCZzb2Z0aWZfbmVpZ2gtPnJlZmNvdW50KTsKKworCUlOSVRfSExJU1RfTk9ERSgmc29mdGlmX25laWdoLT5saXN0KTsKKwlzcGluX2xvY2tfYmgoJmJhdF9wcml2LT5zb2Z0aWZfbmVpZ2hfbG9jayk7CisJaGxpc3RfYWRkX2hlYWRfcmN1KCZzb2Z0aWZfbmVpZ2gtPmxpc3QsICZiYXRfcHJpdi0+c29mdGlmX25laWdoX2xpc3QpOworCXNwaW5fdW5sb2NrX2JoKCZiYXRfcHJpdi0+c29mdGlmX25laWdoX2xvY2spOworCitmb3VuZDoKKwlrcmVmX2dldCgmc29mdGlmX25laWdoLT5yZWZjb3VudCk7CitvdXQ6CisJcmN1X3JlYWRfdW5sb2NrKCk7CisJcmV0dXJuIHNvZnRpZl9uZWlnaDsKK30KKworaW50IHNvZnRpZl9uZWlnaF9zZXFfcHJpbnRfdGV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqb2Zmc2V0KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopc2VxLT5wcml2YXRlOworCXN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYgPSBuZXRkZXZfcHJpdihuZXRfZGV2KTsKKwlzdHJ1Y3Qgc29mdGlmX25laWdoICpzb2Z0aWZfbmVpZ2g7CisJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CisJc2l6ZV90IGJ1Zl9zaXplLCBwb3M7CisJY2hhciAqYnVmZjsKKworCWlmICghYmF0X3ByaXYtPnByaW1hcnlfaWYpIHsKKwkJcmV0dXJuIHNlcV9wcmludGYoc2VxLCAiQkFUTUFOIG1lc2ggJXMgZGlzYWJsZWQgLSAiCisJCQkgICAgICAgInBsZWFzZSBzcGVjaWZ5IGludGVyZmFjZXMgdG8gZW5hYmxlIGl0XG4iLAorCQkJICAgICAgIG5ldF9kZXYtPm5hbWUpOworCX0KKworCXNlcV9wcmludGYoc2VxLCAiU29mdGlmIG5laWdoYm9yIGxpc3QgKCVzKVxuIiwgbmV0X2Rldi0+bmFtZSk7CisKKwlidWZfc2l6ZSA9IDE7CisJLyogRXN0aW1hdGUgbGVuZ3RoIGZvcjogIiAgIHh4Onh4Onh4Onh4Onh4Onh4XG4iICovCisJcmN1X3JlYWRfbG9jaygpOworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzb2Z0aWZfbmVpZ2gsIG5vZGUsCisJCQkJICZiYXRfcHJpdi0+c29mdGlmX25laWdoX2xpc3QsIGxpc3QpCisJCWJ1Zl9zaXplICs9IDMwOworCXJjdV9yZWFkX3VubG9jaygpOworCisJYnVmZiA9IGttYWxsb2MoYnVmX3NpemUsIEdGUF9BVE9NSUMpOworCWlmICghYnVmZikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlidWZmWzBdID0gJ1wwJzsKKwlwb3MgPSAwOworCisJcmN1X3JlYWRfbG9jaygpOworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzb2Z0aWZfbmVpZ2gsIG5vZGUsCisJCQkJICZiYXRfcHJpdi0+c29mdGlmX25laWdoX2xpc3QsIGxpc3QpIHsKKwkJcG9zICs9IHNucHJpbnRmKGJ1ZmYgKyBwb3MsIDMxLCAiJXMgJXBNICh2aWQ6ICVkKVxuIiwKKwkJCQliYXRfcHJpdi0+c29mdGlmX25laWdoID09IHNvZnRpZl9uZWlnaAorCQkJCT8gIj0+IiA6ICIgICIsIHNvZnRpZl9uZWlnaC0+YWRkciwKKwkJCQlzb2Z0aWZfbmVpZ2gtPnZpZCk7CisJfQorCXJjdV9yZWFkX3VubG9jaygpOworCisJc2VxX3ByaW50ZihzZXEsICIlcyIsIGJ1ZmYpOworCWtmcmVlKGJ1ZmYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzb2Z0aWZfYmF0bWFuX3JlY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICAgICBzaG9ydCB2aWQpCit7CisJc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGV0aGhkciAqZXRoaGRyID0gKHN0cnVjdCBldGhoZHIgKilza2ItPmRhdGE7CisJc3RydWN0IGJhdG1hbl9wYWNrZXQgKmJhdG1hbl9wYWNrZXQ7CisJc3RydWN0IHNvZnRpZl9uZWlnaCAqc29mdGlmX25laWdoLCAqc29mdGlmX25laWdoX3RtcDsKKworCWlmIChudG9ocyhldGhoZHItPmhfcHJvdG8pID09IEVUSF9QXzgwMjFRKQorCQliYXRtYW5fcGFja2V0ID0gKHN0cnVjdCBiYXRtYW5fcGFja2V0ICopCisJCQkJCShza2ItPmRhdGEgKyBFVEhfSExFTiArIFZMQU5fSExFTik7CisJZWxzZQorCQliYXRtYW5fcGFja2V0ID0gKHN0cnVjdCBiYXRtYW5fcGFja2V0ICopKHNrYi0+ZGF0YSArIEVUSF9ITEVOKTsKKworCWlmIChiYXRtYW5fcGFja2V0LT52ZXJzaW9uICE9IENPTVBBVF9WRVJTSU9OKQorCQlnb3RvIGVycjsKKworCWlmIChiYXRtYW5fcGFja2V0LT5wYWNrZXRfdHlwZSAhPSBCQVRfUEFDS0VUKQorCQlnb3RvIGVycjsKKworCWlmICghKGJhdG1hbl9wYWNrZXQtPmZsYWdzICYgUFJJTUFSSUVTX0ZJUlNUX0hPUCkpCisJCWdvdG8gZXJyOworCisJaWYgKGlzX215X21hYyhiYXRtYW5fcGFja2V0LT5vcmlnKSkKKwkJZ290byBlcnI7CisKKwlzb2Z0aWZfbmVpZ2ggPSBzb2Z0aWZfbmVpZ2hfZ2V0KGJhdF9wcml2LCBiYXRtYW5fcGFja2V0LT5vcmlnLCB2aWQpOworCisJaWYgKCFzb2Z0aWZfbmVpZ2gpCisJCWdvdG8gZXJyOworCisJaWYgKGJhdF9wcml2LT5zb2Z0aWZfbmVpZ2ggPT0gc29mdGlmX25laWdoKQorCQlnb3RvIG91dDsKKworCS8qIHdlIGdvdCBhIG5laWdoYm9yIGJ1dCBpdHMgbWFjIGlzICdiaWdnZXInIHRoYW4gb3VycyAgKi8KKwlpZiAobWVtY21wKGJhdF9wcml2LT5wcmltYXJ5X2lmLT5uZXRfZGV2LT5kZXZfYWRkciwKKwkJICAgc29mdGlmX25laWdoLT5hZGRyLCBFVEhfQUxFTikgPCAwKQorCQlnb3RvIG91dDsKKworCS8qIHN3aXRjaCB0byBuZXcgJ3NtYWxsZXN0IG5laWdoYm9yJyAqLworCWlmICgoYmF0X3ByaXYtPnNvZnRpZl9uZWlnaCkgJiYKKwkgICAgKG1lbWNtcChzb2Z0aWZfbmVpZ2gtPmFkZHIsIGJhdF9wcml2LT5zb2Z0aWZfbmVpZ2gtPmFkZHIsCisJCQkJCQkJRVRIX0FMRU4pIDwgMCkpIHsKKwkJYmF0X2RiZyhEQkdfUk9VVEVTLCBiYXRfcHJpdiwKKwkJCSJDaGFuZ2luZyBtZXNoIGV4aXQgcG9pbnQgZnJvbSAlcE0gKHZpZDogJWQpICIKKwkJCSJ0byAlcE0gKHZpZDogJWQpLlxuIiwKKwkJCSBiYXRfcHJpdi0+c29mdGlmX25laWdoLT5hZGRyLAorCQkJIGJhdF9wcml2LT5zb2Z0aWZfbmVpZ2gtPnZpZCwKKwkJCSBzb2Z0aWZfbmVpZ2gtPmFkZHIsIHNvZnRpZl9uZWlnaC0+dmlkKTsKKwkJc29mdGlmX25laWdoX3RtcCA9IGJhdF9wcml2LT5zb2Z0aWZfbmVpZ2g7CisJCWJhdF9wcml2LT5zb2Z0aWZfbmVpZ2ggPSBzb2Z0aWZfbmVpZ2g7CisJCWtyZWZfcHV0KCZzb2Z0aWZfbmVpZ2hfdG1wLT5yZWZjb3VudCwgc29mdGlmX25laWdoX2ZyZWVfcmVmKTsKKwkJLyogd2UgbmVlZCB0byBob2xkIHRoZSBhZGRpdGlvbmFsIHJlZmVyZW5jZSAqLworCQlnb3RvIGVycjsKKwl9CisKKwkvKiBjbG9zZSBvd24gYmF0WCBkZXZpY2UgYW5kIHVzZSBzb2Z0aWZfbmVpZ2ggYXMgZXhpdCBub2RlICovCisJaWYgKCghYmF0X3ByaXYtPnNvZnRpZl9uZWlnaCkgJiYKKwkgICAgKG1lbWNtcChzb2Z0aWZfbmVpZ2gtPmFkZHIsCisJCSAgICBiYXRfcHJpdi0+cHJpbWFyeV9pZi0+bmV0X2Rldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKSA8IDApKSB7CisJCWJhdF9kYmcoREJHX1JPVVRFUywgYmF0X3ByaXYsCisJCQkiU2V0dGluZyBtZXNoIGV4aXQgcG9pbnQgdG8gJXBNICh2aWQ6ICVkKS5cbiIsCisJCQlzb2Z0aWZfbmVpZ2gtPmFkZHIsIHNvZnRpZl9uZWlnaC0+dmlkKTsKKwkJYmF0X3ByaXYtPnNvZnRpZl9uZWlnaCA9IHNvZnRpZl9uZWlnaDsKKwkJLyogd2UgbmVlZCB0byBob2xkIHRoZSBhZGRpdGlvbmFsIHJlZmVyZW5jZSAqLworCQlnb3RvIGVycjsKKwl9CisKK291dDoKKwlrcmVmX3B1dCgmc29mdGlmX25laWdoLT5yZWZjb3VudCwgc29mdGlmX25laWdoX2ZyZWVfcmVmKTsKK2VycjoKKwlrZnJlZV9za2Ioc2tiKTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgaW50ZXJmYWNlX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwluZXRpZl9zdGFydF9xdWV1ZShkZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGludGVyZmFjZV9yZWxlYXNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmludGVyZmFjZV9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXJldHVybiAmYmF0X3ByaXYtPnN0YXRzOworfQorCitzdGF0aWMgaW50IGludGVyZmFjZV9zZXRfbWFjX2FkZHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcCkKK3sKKwlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIgPSBwOworCisJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGFkZHItPnNhX2RhdGEpKQorCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CisKKwkvKiBvbmx5IG1vZGlmeSBobmEtdGFibGUgaWYgaXQgaGFzIGJlZW4gaW5pdGlhbGlzZWQgYmVmb3JlICovCisJaWYgKGF0b21pY19yZWFkKCZiYXRfcHJpdi0+bWVzaF9zdGF0ZSkgPT0gTUVTSF9BQ1RJVkUpIHsKKwkJaG5hX2xvY2FsX3JlbW92ZShiYXRfcHJpdiwgZGV2LT5kZXZfYWRkciwKKwkJCQkgIm1hYyBhZGRyZXNzIGNoYW5nZWQiKTsKKwkJaG5hX2xvY2FsX2FkZChkZXYsIGFkZHItPnNhX2RhdGEpOworCX0KKworCW1lbWNweShkZXYtPmRldl9hZGRyLCBhZGRyLT5zYV9kYXRhLCBFVEhfQUxFTik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaW50ZXJmYWNlX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpCit7CisJLyogY2hlY2sgcmFuZ2VzICovCisJaWYgKChuZXdfbXR1IDwgNjgpIHx8IChuZXdfbXR1ID4gaGFyZGlmX21pbl9tdHUoZGV2KSkpCisJCXJldHVybiAtRUlOVkFMOworCisJZGV2LT5tdHUgPSBuZXdfbXR1OworCisJcmV0dXJuIDA7Cit9CisKK2ludCBpbnRlcmZhY2VfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKnNvZnRfaWZhY2UpCit7CisJc3RydWN0IGV0aGhkciAqZXRoaGRyID0gKHN0cnVjdCBldGhoZHIgKilza2ItPmRhdGE7CisJc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KHNvZnRfaWZhY2UpOworCXN0cnVjdCBiY2FzdF9wYWNrZXQgKmJjYXN0X3BhY2tldDsKKwlzdHJ1Y3Qgdmxhbl9ldGhoZHIgKnZoZHI7CisJaW50IGRhdGFfbGVuID0gc2tiLT5sZW4sIHJldDsKKwlzaG9ydCB2aWQgPSAtMTsKKwlib29sIGRvX2JjYXN0ID0gZmFsc2U7CisKKwlpZiAoYXRvbWljX3JlYWQoJmJhdF9wcml2LT5tZXNoX3N0YXRlKSAhPSBNRVNIX0FDVElWRSkKKwkJZ290byBkcm9wcGVkOworCisJc29mdF9pZmFjZS0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCisJc3dpdGNoIChudG9ocyhldGhoZHItPmhfcHJvdG8pKSB7CisJY2FzZSBFVEhfUF84MDIxUToKKwkJdmhkciA9IChzdHJ1Y3Qgdmxhbl9ldGhoZHIgKilza2ItPmRhdGE7CisJCXZpZCA9IG50b2hzKHZoZHItPmhfdmxhbl9UQ0kpICYgVkxBTl9WSURfTUFTSzsKKworCQlpZiAobnRvaHModmhkci0+aF92bGFuX2VuY2Fwc3VsYXRlZF9wcm90bykgIT0gRVRIX1BfQkFUTUFOKQorCQkJYnJlYWs7CisKKwkJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBFVEhfUF9CQVRNQU46CisJCXNvZnRpZl9iYXRtYW5fcmVjdihza2IsIHNvZnRfaWZhY2UsIHZpZCk7CisJCWdvdG8gZW5kOworCX0KKworCS8qKgorCSAqIGlmIHdlIGhhdmUgYSBhbm90aGVyIGNob3NlbiBtZXNoIGV4aXQgbm9kZSBpbiByYW5nZQorCSAqIGl0IHdpbGwgdHJhbnNwb3J0IHRoZSBwYWNrZXRzIHRvIHRoZSBtZXNoCisJICovCisJaWYgKChiYXRfcHJpdi0+c29mdGlmX25laWdoKSAmJiAoYmF0X3ByaXYtPnNvZnRpZl9uZWlnaC0+dmlkID09IHZpZCkpCisJCWdvdG8gZHJvcHBlZDsKKworCS8qIFRPRE86IGNoZWNrIHRoaXMgZm9yIGxvY2tzICovCisJaG5hX2xvY2FsX2FkZChzb2Z0X2lmYWNlLCBldGhoZHItPmhfc291cmNlKTsKKworCWlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihldGhoZHItPmhfZGVzdCkpIHsKKwkJcmV0ID0gZ3dfaXNfdGFyZ2V0KGJhdF9wcml2LCBza2IpOworCisJCWlmIChyZXQgPCAwKQorCQkJZ290byBkcm9wcGVkOworCisJCWlmIChyZXQgPT0gMCkKKwkJCWRvX2JjYXN0ID0gdHJ1ZTsKKwl9CisKKwkvKiBldGhlcm5ldCBwYWNrZXQgc2hvdWxkIGJlIGJyb2FkY2FzdGVkICovCisJaWYgKGRvX2JjYXN0KSB7CisJCWlmICghYmF0X3ByaXYtPnByaW1hcnlfaWYpCisJCQlnb3RvIGRyb3BwZWQ7CisKKwkJaWYgKG15X3NrYl9oZWFkX3B1c2goc2tiLCBzaXplb2Yoc3RydWN0IGJjYXN0X3BhY2tldCkpIDwgMCkKKwkJCWdvdG8gZHJvcHBlZDsKKworCQliY2FzdF9wYWNrZXQgPSAoc3RydWN0IGJjYXN0X3BhY2tldCAqKXNrYi0+ZGF0YTsKKwkJYmNhc3RfcGFja2V0LT52ZXJzaW9uID0gQ09NUEFUX1ZFUlNJT047CisJCWJjYXN0X3BhY2tldC0+dHRsID0gVFRMOworCisJCS8qIGJhdG1hbiBwYWNrZXQgdHlwZTogYnJvYWRjYXN0ICovCisJCWJjYXN0X3BhY2tldC0+cGFja2V0X3R5cGUgPSBCQVRfQkNBU1Q7CisKKwkJLyogaHcgYWRkcmVzcyBvZiBmaXJzdCBpbnRlcmZhY2UgaXMgdGhlIG9yaWcgbWFjIGJlY2F1c2Ugb25seQorCQkgKiB0aGlzIG1hYyBpcyBrbm93biB0aHJvdWdob3V0IHRoZSBtZXNoICovCisJCW1lbWNweShiY2FzdF9wYWNrZXQtPm9yaWcsCisJCSAgICAgICBiYXRfcHJpdi0+cHJpbWFyeV9pZi0+bmV0X2Rldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKworCQkvKiBzZXQgYnJvYWRjYXN0IHNlcXVlbmNlIG51bWJlciAqLworCQliY2FzdF9wYWNrZXQtPnNlcW5vID0KKwkJCWh0b25sKGF0b21pY19pbmNfcmV0dXJuKCZiYXRfcHJpdi0+YmNhc3Rfc2Vxbm8pKTsKKworCQlhZGRfYmNhc3RfcGFja2V0X3RvX2xpc3QoYmF0X3ByaXYsIHNrYik7CisKKwkJLyogYSBjb3B5IGlzIHN0b3JlZCBpbiB0aGUgYmNhc3QgbGlzdCwgdGhlcmVmb3JlIHJlbW92aW5nCisJCSAqIHRoZSBvcmlnaW5hbCBza2IuICovCisJCWtmcmVlX3NrYihza2IpOworCisJLyogdW5pY2FzdCBwYWNrZXQgKi8KKwl9IGVsc2UgeworCQlyZXQgPSB1bmljYXN0X3NlbmRfc2tiKHNrYiwgYmF0X3ByaXYpOworCQlpZiAocmV0ICE9IDApCisJCQlnb3RvIGRyb3BwZWRfZnJlZWQ7CisJfQorCisJYmF0X3ByaXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwliYXRfcHJpdi0+c3RhdHMudHhfYnl0ZXMgKz0gZGF0YV9sZW47CisJZ290byBlbmQ7CisKK2Ryb3BwZWQ6CisJa2ZyZWVfc2tiKHNrYik7Citkcm9wcGVkX2ZyZWVkOgorCWJhdF9wcml2LT5zdGF0cy50eF9kcm9wcGVkKys7CitlbmQ6CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKK30KKwordm9pZCBpbnRlcmZhY2Vfcngoc3RydWN0IG5ldF9kZXZpY2UgKnNvZnRfaWZhY2UsCisJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJhdG1hbl9pZiAqcmVjdl9pZiwKKwkJICBpbnQgaGRyX3NpemUpCit7CisJc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KHNvZnRfaWZhY2UpOworCXN0cnVjdCB1bmljYXN0X3BhY2tldCAqdW5pY2FzdF9wYWNrZXQ7CisJc3RydWN0IGV0aGhkciAqZXRoaGRyOworCXN0cnVjdCB2bGFuX2V0aGhkciAqdmhkcjsKKwlzaG9ydCB2aWQgPSAtMTsKKwlpbnQgcmV0OworCisJLyogY2hlY2sgaWYgZW5vdWdoIHNwYWNlIGlzIGF2YWlsYWJsZSBmb3IgcHVsbGluZywgYW5kIHB1bGwgKi8KKwlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBoZHJfc2l6ZSkpCisJCWdvdG8gZHJvcHBlZDsKKworCXNrYl9wdWxsX3Jjc3VtKHNrYiwgaGRyX3NpemUpOworCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7CisKKwlldGhoZHIgPSAoc3RydWN0IGV0aGhkciAqKXNrYl9tYWNfaGVhZGVyKHNrYik7CisKKwlzd2l0Y2ggKG50b2hzKGV0aGhkci0+aF9wcm90bykpIHsKKwljYXNlIEVUSF9QXzgwMjFROgorCQl2aGRyID0gKHN0cnVjdCB2bGFuX2V0aGhkciAqKXNrYi0+ZGF0YTsKKwkJdmlkID0gbnRvaHModmhkci0+aF92bGFuX1RDSSkgJiBWTEFOX1ZJRF9NQVNLOworCisJCWlmIChudG9ocyh2aGRyLT5oX3ZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvKSAhPSBFVEhfUF9CQVRNQU4pCisJCQlicmVhazsKKworCQkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIEVUSF9QX0JBVE1BTjoKKwkJZ290byBkcm9wcGVkOworCX0KKworCS8qKgorCSAqIGlmIHdlIGhhdmUgYSBhbm90aGVyIGNob3NlbiBtZXNoIGV4aXQgbm9kZSBpbiByYW5nZQorCSAqIGl0IHdpbGwgdHJhbnNwb3J0IHRoZSBwYWNrZXRzIHRvIHRoZSBub24tbWVzaCBuZXR3b3JrCisJICovCisJaWYgKChiYXRfcHJpdi0+c29mdGlmX25laWdoKSAmJiAoYmF0X3ByaXYtPnNvZnRpZl9uZWlnaC0+dmlkID09IHZpZCkpIHsKKwkJc2tiX3B1c2goc2tiLCBoZHJfc2l6ZSk7CisJCXVuaWNhc3RfcGFja2V0ID0gKHN0cnVjdCB1bmljYXN0X3BhY2tldCAqKXNrYi0+ZGF0YTsKKworCQlpZiAoKHVuaWNhc3RfcGFja2V0LT5wYWNrZXRfdHlwZSAhPSBCQVRfVU5JQ0FTVCkgJiYKKwkJICAgICh1bmljYXN0X3BhY2tldC0+cGFja2V0X3R5cGUgIT0gQkFUX1VOSUNBU1RfRlJBRykpCisJCQlnb3RvIGRyb3BwZWQ7CisKKwkJc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKKworCQltZW1jcHkodW5pY2FzdF9wYWNrZXQtPmRlc3QsCisJCSAgICAgICBiYXRfcHJpdi0+c29mdGlmX25laWdoLT5hZGRyLCBFVEhfQUxFTik7CisJCXJldCA9IHJvdXRlX3VuaWNhc3RfcGFja2V0KHNrYiwgcmVjdl9pZiwgaGRyX3NpemUpOworCQlpZiAocmV0ID09IE5FVF9SWF9EUk9QKQorCQkJZ290byBkcm9wcGVkOworCisJCWdvdG8gb3V0OworCX0KKworCS8qIHNrYi0+ZGV2ICYgc2tiLT5wa3RfdHlwZSBhcmUgc2V0IGhlcmUgKi8KKwlpZiAodW5saWtlbHkoIXBza2JfbWF5X3B1bGwoc2tiLCBFVEhfSExFTikpKQorCQlnb3RvIGRyb3BwZWQ7CisJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgc29mdF9pZmFjZSk7CisKKwkvKiBzaG91bGQgbm90IGJlIG5lY2Nlc2FyeSBhbnltb3JlIGFzIHdlIHVzZSBza2JfcHVsbF9yY3N1bSgpCisJICogVE9ETzogcGxlYXNlIHZlcmlmeSB0aGlzIGFuZCByZW1vdmUgdGhpcyBUT0RPCisJICogLS0gRGVjIDIxc3QgMjAwOSwgU2ltb24gV3VuZGVybGljaCAqLworCisvKglza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOyovCisKKwliYXRfcHJpdi0+c3RhdHMucnhfcGFja2V0cysrOworCWJhdF9wcml2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbiArIHNpemVvZihzdHJ1Y3QgZXRoaGRyKTsKKworCXNvZnRfaWZhY2UtPmxhc3RfcnggPSBqaWZmaWVzOworCisJbmV0aWZfcngoc2tiKTsKKwlyZXR1cm47CisKK2Ryb3BwZWQ6CisJa2ZyZWVfc2tiKHNrYik7CitvdXQ6CisJcmV0dXJuOworfQorCisjaWZkZWYgSEFWRV9ORVRfREVWSUNFX09QUworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBiYXRfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gPSBpbnRlcmZhY2Vfb3BlbiwKKwkubmRvX3N0b3AgPSBpbnRlcmZhY2VfcmVsZWFzZSwKKwkubmRvX2dldF9zdGF0cyA9IGludGVyZmFjZV9zdGF0cywKKwkubmRvX3NldF9tYWNfYWRkcmVzcyA9IGludGVyZmFjZV9zZXRfbWFjX2FkZHIsCisJLm5kb19jaGFuZ2VfbXR1ID0gaW50ZXJmYWNlX2NoYW5nZV9tdHUsCisJLm5kb19zdGFydF94bWl0ID0gaW50ZXJmYWNlX3R4LAorCS5uZG9fdmFsaWRhdGVfYWRkciA9IGV0aF92YWxpZGF0ZV9hZGRyCit9OworI2VuZGlmCisKK3N0YXRpYyB2b2lkIGludGVyZmFjZV9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBiYXRfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJY2hhciBkZXZfYWRkcltFVEhfQUxFTl07CisKKwlldGhlcl9zZXR1cChkZXYpOworCisjaWZkZWYgSEFWRV9ORVRfREVWSUNFX09QUworCWRldi0+bmV0ZGV2X29wcyA9ICZiYXRfbmV0ZGV2X29wczsKKyNlbHNlCisJZGV2LT5vcGVuID0gaW50ZXJmYWNlX29wZW47CisJZGV2LT5zdG9wID0gaW50ZXJmYWNlX3JlbGVhc2U7CisJZGV2LT5nZXRfc3RhdHMgPSBpbnRlcmZhY2Vfc3RhdHM7CisJZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBpbnRlcmZhY2Vfc2V0X21hY19hZGRyOworCWRldi0+Y2hhbmdlX210dSA9IGludGVyZmFjZV9jaGFuZ2VfbXR1OworCWRldi0+aGFyZF9zdGFydF94bWl0ID0gaW50ZXJmYWNlX3R4OworI2VuZGlmCisJZGV2LT5kZXN0cnVjdG9yID0gZnJlZV9uZXRkZXY7CisKKwkvKioKKwkgKiBjYW4ndCBjYWxsIG1pbl9tdHUsIGJlY2F1c2UgdGhlIG5lZWRlZCB2YXJpYWJsZXMKKwkgKiBoYXZlIG5vdCBiZWVuIGluaXRpYWxpemVkIHlldAorCSAqLworCWRldi0+bXR1ID0gRVRIX0RBVEFfTEVOOworCWRldi0+aGFyZF9oZWFkZXJfbGVuID0gQkFUX0hFQURFUl9MRU47IC8qIHJlc2VydmUgbW9yZSBzcGFjZSBpbiB0aGUKKwkJCQkJCSogc2tidWZmIGZvciBvdXIgaGVhZGVyICovCisKKwkvKiBnZW5lcmF0ZSByYW5kb20gYWRkcmVzcyAqLworCXJhbmRvbV9ldGhlcl9hZGRyKGRldl9hZGRyKTsKKwltZW1jcHkoZGV2LT5kZXZfYWRkciwgZGV2X2FkZHIsIEVUSF9BTEVOKTsKKworCVNFVF9FVEhUT09MX09QUyhkZXYsICZiYXRfZXRodG9vbF9vcHMpOworCisJbWVtc2V0KHByaXYsIDAsIHNpemVvZihzdHJ1Y3QgYmF0X3ByaXYpKTsKK30KKworc3RydWN0IG5ldF9kZXZpY2UgKnNvZnRpZl9jcmVhdGUoY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqc29mdF9pZmFjZTsKKwlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2OworCWludCByZXQ7CisKKwlzb2Z0X2lmYWNlID0gYWxsb2NfbmV0ZGV2KHNpemVvZihzdHJ1Y3QgYmF0X3ByaXYpICwgbmFtZSwKKwkJCQkgICBpbnRlcmZhY2Vfc2V0dXApOworCisJaWYgKCFzb2Z0X2lmYWNlKSB7CisJCXByX2VycigiVW5hYmxlIHRvIGFsbG9jYXRlIHRoZSBiYXRtYW4gaW50ZXJmYWNlOiAlc1xuIiwgbmFtZSk7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IHJlZ2lzdGVyX25ldGRldihzb2Z0X2lmYWNlKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcl9lcnIoIlVuYWJsZSB0byByZWdpc3RlciB0aGUgYmF0bWFuIGludGVyZmFjZSAnJXMnOiAlaVxuIiwKKwkJICAgICAgIG5hbWUsIHJldCk7CisJCWdvdG8gZnJlZV9zb2Z0X2lmYWNlOworCX0KKworCWJhdF9wcml2ID0gbmV0ZGV2X3ByaXYoc29mdF9pZmFjZSk7CisKKwlhdG9taWNfc2V0KCZiYXRfcHJpdi0+YWdncmVnYXRlZF9vZ21zLCAxKTsKKwlhdG9taWNfc2V0KCZiYXRfcHJpdi0+Ym9uZGluZywgMCk7CisJYXRvbWljX3NldCgmYmF0X3ByaXYtPnZpc19tb2RlLCBWSVNfVFlQRV9DTElFTlRfVVBEQVRFKTsKKwlhdG9taWNfc2V0KCZiYXRfcHJpdi0+Z3dfbW9kZSwgR1dfTU9ERV9PRkYpOworCWF0b21pY19zZXQoJmJhdF9wcml2LT5nd19zZWxfY2xhc3MsIDIwKTsKKwlhdG9taWNfc2V0KCZiYXRfcHJpdi0+Z3dfYmFuZHdpZHRoLCA0MSk7CisJYXRvbWljX3NldCgmYmF0X3ByaXYtPm9yaWdfaW50ZXJ2YWwsIDEwMDApOworCWF0b21pY19zZXQoJmJhdF9wcml2LT5ob3BfcGVuYWx0eSwgMTApOworCWF0b21pY19zZXQoJmJhdF9wcml2LT5sb2dfbGV2ZWwsIDApOworCWF0b21pY19zZXQoJmJhdF9wcml2LT5mcmFnbWVudGF0aW9uLCAxKTsKKwlhdG9taWNfc2V0KCZiYXRfcHJpdi0+YmNhc3RfcXVldWVfbGVmdCwgQkNBU1RfUVVFVUVfTEVOKTsKKwlhdG9taWNfc2V0KCZiYXRfcHJpdi0+YmF0bWFuX3F1ZXVlX2xlZnQsIEJBVE1BTl9RVUVVRV9MRU4pOworCisJYXRvbWljX3NldCgmYmF0X3ByaXYtPm1lc2hfc3RhdGUsIE1FU0hfSU5BQ1RJVkUpOworCWF0b21pY19zZXQoJmJhdF9wcml2LT5iY2FzdF9zZXFubywgMSk7CisJYXRvbWljX3NldCgmYmF0X3ByaXYtPmhuYV9sb2NhbF9jaGFuZ2VkLCAwKTsKKworCWJhdF9wcml2LT5wcmltYXJ5X2lmID0gTlVMTDsKKwliYXRfcHJpdi0+bnVtX2lmYWNlcyA9IDA7CisJYmF0X3ByaXYtPnNvZnRpZl9uZWlnaCA9IE5VTEw7CisKKwlyZXQgPSBzeXNmc19hZGRfbWVzaGlmKHNvZnRfaWZhY2UpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIHVucmVnX3NvZnRfaWZhY2U7CisKKwlyZXQgPSBkZWJ1Z2ZzX2FkZF9tZXNoaWYoc29mdF9pZmFjZSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gdW5yZWdfc3lzZnM7CisKKwlyZXQgPSBtZXNoX2luaXQoc29mdF9pZmFjZSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gdW5yZWdfZGVidWdmczsKKworCXJldHVybiBzb2Z0X2lmYWNlOworCit1bnJlZ19kZWJ1Z2ZzOgorCWRlYnVnZnNfZGVsX21lc2hpZihzb2Z0X2lmYWNlKTsKK3VucmVnX3N5c2ZzOgorCXN5c2ZzX2RlbF9tZXNoaWYoc29mdF9pZmFjZSk7Cit1bnJlZ19zb2Z0X2lmYWNlOgorCXVucmVnaXN0ZXJfbmV0ZGV2KHNvZnRfaWZhY2UpOworCXJldHVybiBOVUxMOworCitmcmVlX3NvZnRfaWZhY2U6CisJZnJlZV9uZXRkZXYoc29mdF9pZmFjZSk7CitvdXQ6CisJcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQgc29mdGlmX2Rlc3Ryb3koc3RydWN0IG5ldF9kZXZpY2UgKnNvZnRfaWZhY2UpCit7CisJZGVidWdmc19kZWxfbWVzaGlmKHNvZnRfaWZhY2UpOworCXN5c2ZzX2RlbF9tZXNoaWYoc29mdF9pZmFjZSk7CisJbWVzaF9mcmVlKHNvZnRfaWZhY2UpOworCXVucmVnaXN0ZXJfbmV0ZGV2aWNlKHNvZnRfaWZhY2UpOworfQorCisvKiBldGh0b29sICovCitzdGF0aWMgaW50IGJhdF9nZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCit7CisJY21kLT5zdXBwb3J0ZWQgPSAwOworCWNtZC0+YWR2ZXJ0aXNpbmcgPSAwOworCWNtZC0+c3BlZWQgPSBTUEVFRF8xMDsKKwljbWQtPmR1cGxleCA9IERVUExFWF9GVUxMOworCWNtZC0+cG9ydCA9IFBPUlRfVFA7CisJY21kLT5waHlfYWRkcmVzcyA9IDA7CisJY21kLT50cmFuc2NlaXZlciA9IFhDVlJfSU5URVJOQUw7CisJY21kLT5hdXRvbmVnID0gQVVUT05FR19ESVNBQkxFOworCWNtZC0+bWF4dHhwa3QgPSAwOworCWNtZC0+bWF4cnhwa3QgPSAwOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGJhdF9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgIHN0cnVjdCBldGh0b29sX2RydmluZm8gKmluZm8pCit7CisJc3RyY3B5KGluZm8tPmRyaXZlciwgIkIuQS5ULk0uQS5OLiBhZHZhbmNlZCIpOworCXN0cmNweShpbmZvLT52ZXJzaW9uLCBTT1VSQ0VfVkVSU0lPTik7CisJc3RyY3B5KGluZm8tPmZ3X3ZlcnNpb24sICJOL0EiKTsKKwlzdHJjcHkoaW5mby0+YnVzX2luZm8sICJiYXRtYW4iKTsKK30KKworc3RhdGljIHUzMiBiYXRfZ2V0X21zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIC1FT1BOT1RTVVBQOworfQorCitzdGF0aWMgdm9pZCBiYXRfc2V0X21zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiB2YWx1ZSkKK3sKK30KKworc3RhdGljIHUzMiBiYXRfZ2V0X2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHUzMiBiYXRfZ2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBiYXRfc2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCit7CisJcmV0dXJuIC1FT1BOT1RTVVBQOworfQpkaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvc29mdC1pbnRlcmZhY2UuaCBiL25ldC9iYXRtYW4tYWR2L3NvZnQtaW50ZXJmYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJiNzczMwotLS0gL2Rldi9udWxsCisrKyBiL25ldC9iYXRtYW4tYWR2L3NvZnQtaW50ZXJmYWNlLmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDEwIEIuQS5ULk0uQS5OLiBjb250cmlidXRvcnM6CisgKgorICogTWFyZWsgTGluZG5lcgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSwgVVNBCisgKgorICovCisKKyNpZm5kZWYgX05FVF9CQVRNQU5fQURWX1NPRlRfSU5URVJGQUNFX0hfCisjZGVmaW5lIF9ORVRfQkFUTUFOX0FEVl9TT0ZUX0lOVEVSRkFDRV9IXworCitpbnQgbXlfc2tiX2hlYWRfcHVzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbGVuKTsKK2ludCBzb2Z0aWZfbmVpZ2hfc2VxX3ByaW50X3RleHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKm9mZnNldCk7Cit2b2lkIHNvZnRpZl9uZWlnaF9wdXJnZShzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2KTsKK2ludCBpbnRlcmZhY2VfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKnNvZnRfaWZhY2UpOwordm9pZCBpbnRlcmZhY2Vfcngoc3RydWN0IG5ldF9kZXZpY2UgKnNvZnRfaWZhY2UsCisJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJhdG1hbl9pZiAqcmVjdl9pZiwKKwkJICBpbnQgaGRyX3NpemUpOworc3RydWN0IG5ldF9kZXZpY2UgKnNvZnRpZl9jcmVhdGUoY2hhciAqbmFtZSk7Cit2b2lkIHNvZnRpZl9kZXN0cm95KHN0cnVjdCBuZXRfZGV2aWNlICpzb2Z0X2lmYWNlKTsKKworI2VuZGlmIC8qIF9ORVRfQkFUTUFOX0FEVl9TT0ZUX0lOVEVSRkFDRV9IXyAqLwpkaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYyBiL25ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTYzM2I1YTQKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jCkBAIC0wLDAgKzEsNTM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTAgQi5BLlQuTS5BLk4uIGNvbnRyaWJ1dG9yczoKKyAqCisgKiBNYXJlayBMaW5kbmVyLCBTaW1vbiBXdW5kZXJsaWNoCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxLCBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgIm1haW4uaCIKKyNpbmNsdWRlICJ0cmFuc2xhdGlvbi10YWJsZS5oIgorI2luY2x1ZGUgInNvZnQtaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAidHlwZXMuaCIKKyNpbmNsdWRlICJoYXNoLmgiCisjaW5jbHVkZSAib3JpZ2luYXRvci5oIgorCitzdGF0aWMgdm9pZCBobmFfbG9jYWxfcHVyZ2Uoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKK3N0YXRpYyB2b2lkIF9obmFfZ2xvYmFsX2RlbF9vcmlnKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYsCisJCQkJIHN0cnVjdCBobmFfZ2xvYmFsX2VudHJ5ICpobmFfZ2xvYmFsX2VudHJ5LAorCQkJCSBjaGFyICptZXNzYWdlKTsKKworc3RhdGljIHZvaWQgaG5hX2xvY2FsX3N0YXJ0X3RpbWVyKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYpCit7CisJSU5JVF9ERUxBWUVEX1dPUksoJmJhdF9wcml2LT5obmFfd29yaywgaG5hX2xvY2FsX3B1cmdlKTsKKwlxdWV1ZV9kZWxheWVkX3dvcmsoYmF0X2V2ZW50X3dvcmtxdWV1ZSwgJmJhdF9wcml2LT5obmFfd29yaywgMTAgKiBIWik7Cit9CisKK2ludCBobmFfbG9jYWxfaW5pdChzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2KQoreworCWlmIChiYXRfcHJpdi0+aG5hX2xvY2FsX2hhc2gpCisJCXJldHVybiAxOworCisJYmF0X3ByaXYtPmhuYV9sb2NhbF9oYXNoID0gaGFzaF9uZXcoMTAyNCk7CisKKwlpZiAoIWJhdF9wcml2LT5obmFfbG9jYWxfaGFzaCkKKwkJcmV0dXJuIDA7CisKKwlhdG9taWNfc2V0KCZiYXRfcHJpdi0+aG5hX2xvY2FsX2NoYW5nZWQsIDApOworCWhuYV9sb2NhbF9zdGFydF90aW1lcihiYXRfcHJpdik7CisKKwlyZXR1cm4gMTsKK30KKwordm9pZCBobmFfbG9jYWxfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpzb2Z0X2lmYWNlLCB1aW50OF90ICphZGRyKQoreworCXN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYgPSBuZXRkZXZfcHJpdihzb2Z0X2lmYWNlKTsKKwlzdHJ1Y3QgaG5hX2xvY2FsX2VudHJ5ICpobmFfbG9jYWxfZW50cnk7CisJc3RydWN0IGhuYV9nbG9iYWxfZW50cnkgKmhuYV9nbG9iYWxfZW50cnk7CisJaW50IHJlcXVpcmVkX2J5dGVzOworCisJc3Bpbl9sb2NrX2JoKCZiYXRfcHJpdi0+aG5hX2xoYXNoX2xvY2spOworCWhuYV9sb2NhbF9lbnRyeSA9CisJCSgoc3RydWN0IGhuYV9sb2NhbF9lbnRyeSAqKWhhc2hfZmluZChiYXRfcHJpdi0+aG5hX2xvY2FsX2hhc2gsCisJCQkJCQkgICAgIGNvbXBhcmVfb3JpZywgY2hvb3NlX29yaWcsCisJCQkJCQkgICAgIGFkZHIpKTsKKwlzcGluX3VubG9ja19iaCgmYmF0X3ByaXYtPmhuYV9saGFzaF9sb2NrKTsKKworCWlmIChobmFfbG9jYWxfZW50cnkpIHsKKwkJaG5hX2xvY2FsX2VudHJ5LT5sYXN0X3NlZW4gPSBqaWZmaWVzOworCQlyZXR1cm47CisJfQorCisJLyogb25seSBhbm5vdW5jZSBhcyBtYW55IGhvc3RzIGFzIHBvc3NpYmxlIGluIHRoZSBiYXRtYW4tcGFja2V0IGFuZAorCSAgIHNwYWNlIGluIGJhdG1hbl9wYWNrZXQtPm51bV9obmEgVGhhdCBhbHNvIHNob3VsZCBnaXZlIGEgbGltaXQgdG8KKwkgICBNQUMtZmxvb2RpbmcuICovCisJcmVxdWlyZWRfYnl0ZXMgPSAoYmF0X3ByaXYtPm51bV9sb2NhbF9obmEgKyAxKSAqIEVUSF9BTEVOOworCXJlcXVpcmVkX2J5dGVzICs9IEJBVF9QQUNLRVRfTEVOOworCisJaWYgKChyZXF1aXJlZF9ieXRlcyA+IEVUSF9EQVRBX0xFTikgfHwKKwkgICAgKGF0b21pY19yZWFkKCZiYXRfcHJpdi0+YWdncmVnYXRlZF9vZ21zKSAmJgorCSAgICAgcmVxdWlyZWRfYnl0ZXMgPiBNQVhfQUdHUkVHQVRJT05fQllURVMpIHx8CisJICAgIChiYXRfcHJpdi0+bnVtX2xvY2FsX2huYSArIDEgPiAyNTUpKSB7CisJCWJhdF9kYmcoREJHX1JPVVRFUywgYmF0X3ByaXYsCisJCQkiQ2FuJ3QgYWRkIG5ldyBsb2NhbCBobmEgZW50cnkgKCVwTSk6ICIKKwkJCSJudW1iZXIgb2YgbG9jYWwgaG5hIGVudHJpZXMgZXhjZWVkcyBwYWNrZXQgc2l6ZVxuIiwKKwkJCWFkZHIpOworCQlyZXR1cm47CisJfQorCisJYmF0X2RiZyhEQkdfUk9VVEVTLCBiYXRfcHJpdiwKKwkJIkNyZWF0aW5nIG5ldyBsb2NhbCBobmEgZW50cnk6ICVwTVxuIiwgYWRkcik7CisKKwlobmFfbG9jYWxfZW50cnkgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaG5hX2xvY2FsX2VudHJ5KSwgR0ZQX0FUT01JQyk7CisJaWYgKCFobmFfbG9jYWxfZW50cnkpCisJCXJldHVybjsKKworCW1lbWNweShobmFfbG9jYWxfZW50cnktPmFkZHIsIGFkZHIsIEVUSF9BTEVOKTsKKwlobmFfbG9jYWxfZW50cnktPmxhc3Rfc2VlbiA9IGppZmZpZXM7CisKKwkvKiB0aGUgYmF0bWFuIGludGVyZmFjZSBtYWMgYWRkcmVzcyBzaG91bGQgbmV2ZXIgYmUgcHVyZ2VkICovCisJaWYgKGNvbXBhcmVfb3JpZyhhZGRyLCBzb2Z0X2lmYWNlLT5kZXZfYWRkcikpCisJCWhuYV9sb2NhbF9lbnRyeS0+bmV2ZXJfcHVyZ2UgPSAxOworCWVsc2UKKwkJaG5hX2xvY2FsX2VudHJ5LT5uZXZlcl9wdXJnZSA9IDA7CisKKwlzcGluX2xvY2tfYmgoJmJhdF9wcml2LT5obmFfbGhhc2hfbG9jayk7CisKKwloYXNoX2FkZChiYXRfcHJpdi0+aG5hX2xvY2FsX2hhc2gsIGNvbXBhcmVfb3JpZywgY2hvb3NlX29yaWcsCisJCSBobmFfbG9jYWxfZW50cnkpOworCWJhdF9wcml2LT5udW1fbG9jYWxfaG5hKys7CisJYXRvbWljX3NldCgmYmF0X3ByaXYtPmhuYV9sb2NhbF9jaGFuZ2VkLCAxKTsKKworCXNwaW5fdW5sb2NrX2JoKCZiYXRfcHJpdi0+aG5hX2xoYXNoX2xvY2spOworCisJLyogcmVtb3ZlIGFkZHJlc3MgZnJvbSBnbG9iYWwgaGFzaCBpZiBwcmVzZW50ICovCisJc3Bpbl9sb2NrX2JoKCZiYXRfcHJpdi0+aG5hX2doYXNoX2xvY2spOworCisJaG5hX2dsb2JhbF9lbnRyeSA9ICgoc3RydWN0IGhuYV9nbG9iYWxfZW50cnkgKikKKwkJCQloYXNoX2ZpbmQoYmF0X3ByaXYtPmhuYV9nbG9iYWxfaGFzaCwKKwkJCQkJICBjb21wYXJlX29yaWcsIGNob29zZV9vcmlnLCBhZGRyKSk7CisKKwlpZiAoaG5hX2dsb2JhbF9lbnRyeSkKKwkJX2huYV9nbG9iYWxfZGVsX29yaWcoYmF0X3ByaXYsIGhuYV9nbG9iYWxfZW50cnksCisJCQkJICAgICAibG9jYWwgaG5hIHJlY2VpdmVkIik7CisKKwlzcGluX3VubG9ja19iaCgmYmF0X3ByaXYtPmhuYV9naGFzaF9sb2NrKTsKK30KKworaW50IGhuYV9sb2NhbF9maWxsX2J1ZmZlcihzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2LAorCQkJICB1bnNpZ25lZCBjaGFyICpidWZmLCBpbnQgYnVmZl9sZW4pCit7CisJc3RydWN0IGhhc2h0YWJsZV90ICpoYXNoID0gYmF0X3ByaXYtPmhuYV9sb2NhbF9oYXNoOworCXN0cnVjdCBobmFfbG9jYWxfZW50cnkgKmhuYV9sb2NhbF9lbnRyeTsKKwlzdHJ1Y3QgZWxlbWVudF90ICpidWNrZXQ7CisJaW50IGk7CisJc3RydWN0IGhsaXN0X25vZGUgKndhbGs7CisJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7CisJaW50IGNvdW50ID0gMDsKKworCXNwaW5fbG9ja19iaCgmYmF0X3ByaXYtPmhuYV9saGFzaF9sb2NrKTsKKworCWZvciAoaSA9IDA7IGkgPCBoYXNoLT5zaXplOyBpKyspIHsKKwkJaGVhZCA9ICZoYXNoLT50YWJsZVtpXTsKKworCQlobGlzdF9mb3JfZWFjaF9lbnRyeShidWNrZXQsIHdhbGssIGhlYWQsIGhsaXN0KSB7CisKKwkJCWlmIChidWZmX2xlbiA8IChjb3VudCArIDEpICogRVRIX0FMRU4pCisJCQkJYnJlYWs7CisKKwkJCWhuYV9sb2NhbF9lbnRyeSA9IGJ1Y2tldC0+ZGF0YTsKKwkJCW1lbWNweShidWZmICsgKGNvdW50ICogRVRIX0FMRU4pLCBobmFfbG9jYWxfZW50cnktPmFkZHIsCisJCQkgICAgICAgRVRIX0FMRU4pOworCisJCQljb3VudCsrOworCQl9CisJfQorCisJLyogaWYgd2UgZGlkIG5vdCBnZXQgYWxsIG5ldyBsb2NhbCBobmFzIHNlZSB5b3UgbmV4dCB0aW1lICA7LSkgKi8KKwlpZiAoY291bnQgPT0gYmF0X3ByaXYtPm51bV9sb2NhbF9obmEpCisJCWF0b21pY19zZXQoJmJhdF9wcml2LT5obmFfbG9jYWxfY2hhbmdlZCwgMCk7CisKKwlzcGluX3VubG9ja19iaCgmYmF0X3ByaXYtPmhuYV9saGFzaF9sb2NrKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK2ludCBobmFfbG9jYWxfc2VxX3ByaW50X3RleHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKm9mZnNldCkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKXNlcS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYobmV0X2Rldik7CisJc3RydWN0IGhhc2h0YWJsZV90ICpoYXNoID0gYmF0X3ByaXYtPmhuYV9sb2NhbF9oYXNoOworCXN0cnVjdCBobmFfbG9jYWxfZW50cnkgKmhuYV9sb2NhbF9lbnRyeTsKKwlpbnQgaTsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqd2FsazsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKKwlzdHJ1Y3QgZWxlbWVudF90ICpidWNrZXQ7CisJc2l6ZV90IGJ1Zl9zaXplLCBwb3M7CisJY2hhciAqYnVmZjsKKworCWlmICghYmF0X3ByaXYtPnByaW1hcnlfaWYpIHsKKwkJcmV0dXJuIHNlcV9wcmludGYoc2VxLCAiQkFUTUFOIG1lc2ggJXMgZGlzYWJsZWQgLSAiCisJCQkgICAgICAgInBsZWFzZSBzcGVjaWZ5IGludGVyZmFjZXMgdG8gZW5hYmxlIGl0XG4iLAorCQkJICAgICAgIG5ldF9kZXYtPm5hbWUpOworCX0KKworCXNlcV9wcmludGYoc2VxLCAiTG9jYWxseSByZXRyaWV2ZWQgYWRkcmVzc2VzIChmcm9tICVzKSAiCisJCSAgICJhbm5vdW5jZWQgdmlhIEhOQTpcbiIsCisJCSAgIG5ldF9kZXYtPm5hbWUpOworCisJc3Bpbl9sb2NrX2JoKCZiYXRfcHJpdi0+aG5hX2xoYXNoX2xvY2spOworCisJYnVmX3NpemUgPSAxOworCS8qIEVzdGltYXRlIGxlbmd0aCBmb3I6ICIgKiB4eDp4eDp4eDp4eDp4eDp4eFxuIiAqLworCWZvciAoaSA9IDA7IGkgPCBoYXNoLT5zaXplOyBpKyspIHsKKwkJaGVhZCA9ICZoYXNoLT50YWJsZVtpXTsKKworCQlobGlzdF9mb3JfZWFjaCh3YWxrLCBoZWFkKQorCQkJYnVmX3NpemUgKz0gMjE7CisJfQorCisJYnVmZiA9IGttYWxsb2MoYnVmX3NpemUsIEdGUF9BVE9NSUMpOworCWlmICghYnVmZikgeworCQlzcGluX3VubG9ja19iaCgmYmF0X3ByaXYtPmhuYV9saGFzaF9sb2NrKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWJ1ZmZbMF0gPSAnXDAnOworCXBvcyA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgaGFzaC0+c2l6ZTsgaSsrKSB7CisJCWhlYWQgPSAmaGFzaC0+dGFibGVbaV07CisKKwkJaGxpc3RfZm9yX2VhY2hfZW50cnkoYnVja2V0LCB3YWxrLCBoZWFkLCBobGlzdCkgeworCQkJaG5hX2xvY2FsX2VudHJ5ID0gYnVja2V0LT5kYXRhOworCisJCQlwb3MgKz0gc25wcmludGYoYnVmZiArIHBvcywgMjIsICIgKiAlcE1cbiIsCisJCQkJCWhuYV9sb2NhbF9lbnRyeS0+YWRkcik7CisJCX0KKwl9CisKKwlzcGluX3VubG9ja19iaCgmYmF0X3ByaXYtPmhuYV9saGFzaF9sb2NrKTsKKworCXNlcV9wcmludGYoc2VxLCAiJXMiLCBidWZmKTsKKwlrZnJlZShidWZmKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX2huYV9sb2NhbF9kZWwodm9pZCAqZGF0YSwgdm9pZCAqYXJnKQoreworCXN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYgPSAoc3RydWN0IGJhdF9wcml2ICopYXJnOworCisJa2ZyZWUoZGF0YSk7CisJYmF0X3ByaXYtPm51bV9sb2NhbF9obmEtLTsKKwlhdG9taWNfc2V0KCZiYXRfcHJpdi0+aG5hX2xvY2FsX2NoYW5nZWQsIDEpOworfQorCitzdGF0aWMgdm9pZCBobmFfbG9jYWxfZGVsKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYsCisJCQkgIHN0cnVjdCBobmFfbG9jYWxfZW50cnkgKmhuYV9sb2NhbF9lbnRyeSwKKwkJCSAgY2hhciAqbWVzc2FnZSkKK3sKKwliYXRfZGJnKERCR19ST1VURVMsIGJhdF9wcml2LCAiRGVsZXRpbmcgbG9jYWwgaG5hIGVudHJ5ICglcE0pOiAlc1xuIiwKKwkJaG5hX2xvY2FsX2VudHJ5LT5hZGRyLCBtZXNzYWdlKTsKKworCWhhc2hfcmVtb3ZlKGJhdF9wcml2LT5obmFfbG9jYWxfaGFzaCwgY29tcGFyZV9vcmlnLCBjaG9vc2Vfb3JpZywKKwkJICAgIGhuYV9sb2NhbF9lbnRyeS0+YWRkcik7CisJX2huYV9sb2NhbF9kZWwoaG5hX2xvY2FsX2VudHJ5LCBiYXRfcHJpdik7Cit9CisKK3ZvaWQgaG5hX2xvY2FsX3JlbW92ZShzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2LAorCQkgICAgICB1aW50OF90ICphZGRyLCBjaGFyICptZXNzYWdlKQoreworCXN0cnVjdCBobmFfbG9jYWxfZW50cnkgKmhuYV9sb2NhbF9lbnRyeTsKKworCXNwaW5fbG9ja19iaCgmYmF0X3ByaXYtPmhuYV9saGFzaF9sb2NrKTsKKworCWhuYV9sb2NhbF9lbnRyeSA9IChzdHJ1Y3QgaG5hX2xvY2FsX2VudHJ5ICopCisJCWhhc2hfZmluZChiYXRfcHJpdi0+aG5hX2xvY2FsX2hhc2gsIGNvbXBhcmVfb3JpZywgY2hvb3NlX29yaWcsCisJCQkgIGFkZHIpOworCisJaWYgKGhuYV9sb2NhbF9lbnRyeSkKKwkJaG5hX2xvY2FsX2RlbChiYXRfcHJpdiwgaG5hX2xvY2FsX2VudHJ5LCBtZXNzYWdlKTsKKworCXNwaW5fdW5sb2NrX2JoKCZiYXRfcHJpdi0+aG5hX2xoYXNoX2xvY2spOworfQorCitzdGF0aWMgdm9pZCBobmFfbG9jYWxfcHVyZ2Uoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBkZWxheWVkX3dvcmsgKmRlbGF5ZWRfd29yayA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZGVsYXllZF93b3JrLCB3b3JrKTsKKwlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2ID0KKwkJY29udGFpbmVyX29mKGRlbGF5ZWRfd29yaywgc3RydWN0IGJhdF9wcml2LCBobmFfd29yayk7CisJc3RydWN0IGhhc2h0YWJsZV90ICpoYXNoID0gYmF0X3ByaXYtPmhuYV9sb2NhbF9oYXNoOworCXN0cnVjdCBobmFfbG9jYWxfZW50cnkgKmhuYV9sb2NhbF9lbnRyeTsKKwlpbnQgaTsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqd2FsaywgKnNhZmU7CisJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7CisJc3RydWN0IGVsZW1lbnRfdCAqYnVja2V0OworCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKKworCXNwaW5fbG9ja19iaCgmYmF0X3ByaXYtPmhuYV9saGFzaF9sb2NrKTsKKworCWZvciAoaSA9IDA7IGkgPCBoYXNoLT5zaXplOyBpKyspIHsKKwkJaGVhZCA9ICZoYXNoLT50YWJsZVtpXTsKKworCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGJ1Y2tldCwgd2Fsaywgc2FmZSwgaGVhZCwgaGxpc3QpIHsKKwkJCWhuYV9sb2NhbF9lbnRyeSA9IGJ1Y2tldC0+ZGF0YTsKKworCQkJdGltZW91dCA9IGhuYV9sb2NhbF9lbnRyeS0+bGFzdF9zZWVuOworCQkJdGltZW91dCArPSBMT0NBTF9ITkFfVElNRU9VVCAqIEhaOworCisJCQlpZiAoKCFobmFfbG9jYWxfZW50cnktPm5ldmVyX3B1cmdlKSAmJgorCQkJICAgIHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpCisJCQkJaG5hX2xvY2FsX2RlbChiYXRfcHJpdiwgaG5hX2xvY2FsX2VudHJ5LAorCQkJCQkiYWRkcmVzcyB0aW1lZCBvdXQiKTsKKwkJfQorCX0KKworCXNwaW5fdW5sb2NrX2JoKCZiYXRfcHJpdi0+aG5hX2xoYXNoX2xvY2spOworCWhuYV9sb2NhbF9zdGFydF90aW1lcihiYXRfcHJpdik7Cit9CisKK3ZvaWQgaG5hX2xvY2FsX2ZyZWUoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdikKK3sKKwlpZiAoIWJhdF9wcml2LT5obmFfbG9jYWxfaGFzaCkKKwkJcmV0dXJuOworCisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZiYXRfcHJpdi0+aG5hX3dvcmspOworCWhhc2hfZGVsZXRlKGJhdF9wcml2LT5obmFfbG9jYWxfaGFzaCwgX2huYV9sb2NhbF9kZWwsIGJhdF9wcml2KTsKKwliYXRfcHJpdi0+aG5hX2xvY2FsX2hhc2ggPSBOVUxMOworfQorCitpbnQgaG5hX2dsb2JhbF9pbml0KHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYpCit7CisJaWYgKGJhdF9wcml2LT5obmFfZ2xvYmFsX2hhc2gpCisJCXJldHVybiAxOworCisJYmF0X3ByaXYtPmhuYV9nbG9iYWxfaGFzaCA9IGhhc2hfbmV3KDEwMjQpOworCisJaWYgKCFiYXRfcHJpdi0+aG5hX2dsb2JhbF9oYXNoKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCit2b2lkIGhuYV9nbG9iYWxfYWRkX29yaWcoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiwKKwkJCSBzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGUsCisJCQkgdW5zaWduZWQgY2hhciAqaG5hX2J1ZmYsIGludCBobmFfYnVmZl9sZW4pCit7CisJc3RydWN0IGhuYV9nbG9iYWxfZW50cnkgKmhuYV9nbG9iYWxfZW50cnk7CisJc3RydWN0IGhuYV9sb2NhbF9lbnRyeSAqaG5hX2xvY2FsX2VudHJ5OworCWludCBobmFfYnVmZl9jb3VudCA9IDA7CisJdW5zaWduZWQgY2hhciAqaG5hX3B0cjsKKworCXdoaWxlICgoaG5hX2J1ZmZfY291bnQgKyAxKSAqIEVUSF9BTEVOIDw9IGhuYV9idWZmX2xlbikgeworCQlzcGluX2xvY2tfYmgoJmJhdF9wcml2LT5obmFfZ2hhc2hfbG9jayk7CisKKwkJaG5hX3B0ciA9IGhuYV9idWZmICsgKGhuYV9idWZmX2NvdW50ICogRVRIX0FMRU4pOworCQlobmFfZ2xvYmFsX2VudHJ5ID0gKHN0cnVjdCBobmFfZ2xvYmFsX2VudHJ5ICopCisJCQloYXNoX2ZpbmQoYmF0X3ByaXYtPmhuYV9nbG9iYWxfaGFzaCwgY29tcGFyZV9vcmlnLAorCQkJCSAgY2hvb3NlX29yaWcsIGhuYV9wdHIpOworCisJCWlmICghaG5hX2dsb2JhbF9lbnRyeSkgeworCQkJc3Bpbl91bmxvY2tfYmgoJmJhdF9wcml2LT5obmFfZ2hhc2hfbG9jayk7CisKKwkJCWhuYV9nbG9iYWxfZW50cnkgPQorCQkJCWttYWxsb2Moc2l6ZW9mKHN0cnVjdCBobmFfZ2xvYmFsX2VudHJ5KSwKKwkJCQkJR0ZQX0FUT01JQyk7CisKKwkJCWlmICghaG5hX2dsb2JhbF9lbnRyeSkKKwkJCQlicmVhazsKKworCQkJbWVtY3B5KGhuYV9nbG9iYWxfZW50cnktPmFkZHIsIGhuYV9wdHIsIEVUSF9BTEVOKTsKKworCQkJYmF0X2RiZyhEQkdfUk9VVEVTLCBiYXRfcHJpdiwKKwkJCQkiQ3JlYXRpbmcgbmV3IGdsb2JhbCBobmEgZW50cnk6ICIKKwkJCQkiJXBNICh2aWEgJXBNKVxuIiwKKwkJCQlobmFfZ2xvYmFsX2VudHJ5LT5hZGRyLCBvcmlnX25vZGUtPm9yaWcpOworCisJCQlzcGluX2xvY2tfYmgoJmJhdF9wcml2LT5obmFfZ2hhc2hfbG9jayk7CisJCQloYXNoX2FkZChiYXRfcHJpdi0+aG5hX2dsb2JhbF9oYXNoLCBjb21wYXJlX29yaWcsCisJCQkJIGNob29zZV9vcmlnLCBobmFfZ2xvYmFsX2VudHJ5KTsKKworCQl9CisKKwkJaG5hX2dsb2JhbF9lbnRyeS0+b3JpZ19ub2RlID0gb3JpZ19ub2RlOworCQlzcGluX3VubG9ja19iaCgmYmF0X3ByaXYtPmhuYV9naGFzaF9sb2NrKTsKKworCQkvKiByZW1vdmUgYWRkcmVzcyBmcm9tIGxvY2FsIGhhc2ggaWYgcHJlc2VudCAqLworCQlzcGluX2xvY2tfYmgoJmJhdF9wcml2LT5obmFfbGhhc2hfbG9jayk7CisKKwkJaG5hX3B0ciA9IGhuYV9idWZmICsgKGhuYV9idWZmX2NvdW50ICogRVRIX0FMRU4pOworCQlobmFfbG9jYWxfZW50cnkgPSAoc3RydWN0IGhuYV9sb2NhbF9lbnRyeSAqKQorCQkJaGFzaF9maW5kKGJhdF9wcml2LT5obmFfbG9jYWxfaGFzaCwgY29tcGFyZV9vcmlnLAorCQkJCSAgY2hvb3NlX29yaWcsIGhuYV9wdHIpOworCisJCWlmIChobmFfbG9jYWxfZW50cnkpCisJCQlobmFfbG9jYWxfZGVsKGJhdF9wcml2LCBobmFfbG9jYWxfZW50cnksCisJCQkJICAgICAgImdsb2JhbCBobmEgcmVjZWl2ZWQiKTsKKworCQlzcGluX3VubG9ja19iaCgmYmF0X3ByaXYtPmhuYV9saGFzaF9sb2NrKTsKKworCQlobmFfYnVmZl9jb3VudCsrOworCX0KKworCS8qIGluaXRpYWxpemUsIGFuZCBvdmVyd3JpdGUgaWYgbWFsbG9jIHN1Y2NlZWRzICovCisJb3JpZ19ub2RlLT5obmFfYnVmZiA9IE5VTEw7CisJb3JpZ19ub2RlLT5obmFfYnVmZl9sZW4gPSAwOworCisJaWYgKGhuYV9idWZmX2xlbiA+IDApIHsKKwkJb3JpZ19ub2RlLT5obmFfYnVmZiA9IGttYWxsb2MoaG5hX2J1ZmZfbGVuLCBHRlBfQVRPTUlDKTsKKwkJaWYgKG9yaWdfbm9kZS0+aG5hX2J1ZmYpIHsKKwkJCW1lbWNweShvcmlnX25vZGUtPmhuYV9idWZmLCBobmFfYnVmZiwgaG5hX2J1ZmZfbGVuKTsKKwkJCW9yaWdfbm9kZS0+aG5hX2J1ZmZfbGVuID0gaG5hX2J1ZmZfbGVuOworCQl9CisJfQorfQorCitpbnQgaG5hX2dsb2JhbF9zZXFfcHJpbnRfdGV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqb2Zmc2V0KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopc2VxLT5wcml2YXRlOworCXN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYgPSBuZXRkZXZfcHJpdihuZXRfZGV2KTsKKwlzdHJ1Y3QgaGFzaHRhYmxlX3QgKmhhc2ggPSBiYXRfcHJpdi0+aG5hX2dsb2JhbF9oYXNoOworCXN0cnVjdCBobmFfZ2xvYmFsX2VudHJ5ICpobmFfZ2xvYmFsX2VudHJ5OworCWludCBpOworCXN0cnVjdCBobGlzdF9ub2RlICp3YWxrOworCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkOworCXN0cnVjdCBlbGVtZW50X3QgKmJ1Y2tldDsKKwlzaXplX3QgYnVmX3NpemUsIHBvczsKKwljaGFyICpidWZmOworCisJaWYgKCFiYXRfcHJpdi0+cHJpbWFyeV9pZikgeworCQlyZXR1cm4gc2VxX3ByaW50ZihzZXEsICJCQVRNQU4gbWVzaCAlcyBkaXNhYmxlZCAtICIKKwkJCQkgICJwbGVhc2Ugc3BlY2lmeSBpbnRlcmZhY2VzIHRvIGVuYWJsZSBpdFxuIiwKKwkJCQkgIG5ldF9kZXYtPm5hbWUpOworCX0KKworCXNlcV9wcmludGYoc2VxLCAiR2xvYmFsbHkgYW5ub3VuY2VkIEhOQXMgcmVjZWl2ZWQgdmlhIHRoZSBtZXNoICVzXG4iLAorCQkgICBuZXRfZGV2LT5uYW1lKTsKKworCXNwaW5fbG9ja19iaCgmYmF0X3ByaXYtPmhuYV9naGFzaF9sb2NrKTsKKworCWJ1Zl9zaXplID0gMTsKKwkvKiBFc3RpbWF0ZSBsZW5ndGggZm9yOiAiICogeHg6eHg6eHg6eHg6eHg6eHggdmlhIHh4Onh4Onh4Onh4Onh4Onh4XG4iKi8KKwlmb3IgKGkgPSAwOyBpIDwgaGFzaC0+c2l6ZTsgaSsrKSB7CisJCWhlYWQgPSAmaGFzaC0+dGFibGVbaV07CisKKwkJaGxpc3RfZm9yX2VhY2god2FsaywgaGVhZCkKKwkJCWJ1Zl9zaXplICs9IDQzOworCX0KKworCWJ1ZmYgPSBrbWFsbG9jKGJ1Zl9zaXplLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWJ1ZmYpIHsKKwkJc3Bpbl91bmxvY2tfYmgoJmJhdF9wcml2LT5obmFfZ2hhc2hfbG9jayk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlidWZmWzBdID0gJ1wwJzsKKwlwb3MgPSAwOworCisJZm9yIChpID0gMDsgaSA8IGhhc2gtPnNpemU7IGkrKykgeworCQloZWFkID0gJmhhc2gtPnRhYmxlW2ldOworCisJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGJ1Y2tldCwgd2FsaywgaGVhZCwgaGxpc3QpIHsKKwkJCWhuYV9nbG9iYWxfZW50cnkgPSBidWNrZXQtPmRhdGE7CisKKwkJCXBvcyArPSBzbnByaW50ZihidWZmICsgcG9zLCA0NCwKKwkJCQkJIiAqICVwTSB2aWEgJXBNXG4iLAorCQkJCQlobmFfZ2xvYmFsX2VudHJ5LT5hZGRyLAorCQkJCQlobmFfZ2xvYmFsX2VudHJ5LT5vcmlnX25vZGUtPm9yaWcpOworCQl9CisJfQorCisJc3Bpbl91bmxvY2tfYmgoJmJhdF9wcml2LT5obmFfZ2hhc2hfbG9jayk7CisKKwlzZXFfcHJpbnRmKHNlcSwgIiVzIiwgYnVmZik7CisJa2ZyZWUoYnVmZik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9obmFfZ2xvYmFsX2RlbF9vcmlnKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYsCisJCQkJIHN0cnVjdCBobmFfZ2xvYmFsX2VudHJ5ICpobmFfZ2xvYmFsX2VudHJ5LAorCQkJCSBjaGFyICptZXNzYWdlKQoreworCWJhdF9kYmcoREJHX1JPVVRFUywgYmF0X3ByaXYsCisJCSJEZWxldGluZyBnbG9iYWwgaG5hIGVudHJ5ICVwTSAodmlhICVwTSk6ICVzXG4iLAorCQlobmFfZ2xvYmFsX2VudHJ5LT5hZGRyLCBobmFfZ2xvYmFsX2VudHJ5LT5vcmlnX25vZGUtPm9yaWcsCisJCW1lc3NhZ2UpOworCisJaGFzaF9yZW1vdmUoYmF0X3ByaXYtPmhuYV9nbG9iYWxfaGFzaCwgY29tcGFyZV9vcmlnLCBjaG9vc2Vfb3JpZywKKwkJICAgIGhuYV9nbG9iYWxfZW50cnktPmFkZHIpOworCWtmcmVlKGhuYV9nbG9iYWxfZW50cnkpOworfQorCit2b2lkIGhuYV9nbG9iYWxfZGVsX29yaWcoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiwKKwkJCSBzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGUsIGNoYXIgKm1lc3NhZ2UpCit7CisJc3RydWN0IGhuYV9nbG9iYWxfZW50cnkgKmhuYV9nbG9iYWxfZW50cnk7CisJaW50IGhuYV9idWZmX2NvdW50ID0gMDsKKwl1bnNpZ25lZCBjaGFyICpobmFfcHRyOworCisJaWYgKG9yaWdfbm9kZS0+aG5hX2J1ZmZfbGVuID09IDApCisJCXJldHVybjsKKworCXNwaW5fbG9ja19iaCgmYmF0X3ByaXYtPmhuYV9naGFzaF9sb2NrKTsKKworCXdoaWxlICgoaG5hX2J1ZmZfY291bnQgKyAxKSAqIEVUSF9BTEVOIDw9IG9yaWdfbm9kZS0+aG5hX2J1ZmZfbGVuKSB7CisJCWhuYV9wdHIgPSBvcmlnX25vZGUtPmhuYV9idWZmICsgKGhuYV9idWZmX2NvdW50ICogRVRIX0FMRU4pOworCQlobmFfZ2xvYmFsX2VudHJ5ID0gKHN0cnVjdCBobmFfZ2xvYmFsX2VudHJ5ICopCisJCQloYXNoX2ZpbmQoYmF0X3ByaXYtPmhuYV9nbG9iYWxfaGFzaCwgY29tcGFyZV9vcmlnLAorCQkJCSAgY2hvb3NlX29yaWcsIGhuYV9wdHIpOworCisJCWlmICgoaG5hX2dsb2JhbF9lbnRyeSkgJiYKKwkJICAgIChobmFfZ2xvYmFsX2VudHJ5LT5vcmlnX25vZGUgPT0gb3JpZ19ub2RlKSkKKwkJCV9obmFfZ2xvYmFsX2RlbF9vcmlnKGJhdF9wcml2LCBobmFfZ2xvYmFsX2VudHJ5LAorCQkJCQkgICAgIG1lc3NhZ2UpOworCisJCWhuYV9idWZmX2NvdW50Kys7CisJfQorCisJc3Bpbl91bmxvY2tfYmgoJmJhdF9wcml2LT5obmFfZ2hhc2hfbG9jayk7CisKKwlvcmlnX25vZGUtPmhuYV9idWZmX2xlbiA9IDA7CisJa2ZyZWUob3JpZ19ub2RlLT5obmFfYnVmZik7CisJb3JpZ19ub2RlLT5obmFfYnVmZiA9IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIGhuYV9nbG9iYWxfZGVsKHZvaWQgKmRhdGEsIHZvaWQgKmFyZykKK3sKKwlrZnJlZShkYXRhKTsKK30KKwordm9pZCBobmFfZ2xvYmFsX2ZyZWUoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdikKK3sKKwlpZiAoIWJhdF9wcml2LT5obmFfZ2xvYmFsX2hhc2gpCisJCXJldHVybjsKKworCWhhc2hfZGVsZXRlKGJhdF9wcml2LT5obmFfZ2xvYmFsX2hhc2gsIGhuYV9nbG9iYWxfZGVsLCBOVUxMKTsKKwliYXRfcHJpdi0+aG5hX2dsb2JhbF9oYXNoID0gTlVMTDsKK30KKworc3RydWN0IG9yaWdfbm9kZSAqdHJhbnN0YWJsZV9zZWFyY2goc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiwgdWludDhfdCAqYWRkcikKK3sKKwlzdHJ1Y3QgaG5hX2dsb2JhbF9lbnRyeSAqaG5hX2dsb2JhbF9lbnRyeTsKKworCXNwaW5fbG9ja19iaCgmYmF0X3ByaXYtPmhuYV9naGFzaF9sb2NrKTsKKwlobmFfZ2xvYmFsX2VudHJ5ID0gKHN0cnVjdCBobmFfZ2xvYmFsX2VudHJ5ICopCisJCQkJaGFzaF9maW5kKGJhdF9wcml2LT5obmFfZ2xvYmFsX2hhc2gsCisJCQkJCSAgY29tcGFyZV9vcmlnLCBjaG9vc2Vfb3JpZywgYWRkcik7CisJc3Bpbl91bmxvY2tfYmgoJmJhdF9wcml2LT5obmFfZ2hhc2hfbG9jayk7CisKKwlpZiAoIWhuYV9nbG9iYWxfZW50cnkpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIGhuYV9nbG9iYWxfZW50cnktPm9yaWdfbm9kZTsKK30KZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmggYi9uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwYzRjNWMKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMCBCLkEuVC5NLkEuTi4gY29udHJpYnV0b3JzOgorICoKKyAqIE1hcmVrIExpbmRuZXIsIFNpbW9uIFd1bmRlcmxpY2gKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEsIFVTQQorICoKKyAqLworCisjaWZuZGVmIF9ORVRfQkFUTUFOX0FEVl9UUkFOU0xBVElPTl9UQUJMRV9IXworI2RlZmluZSBfTkVUX0JBVE1BTl9BRFZfVFJBTlNMQVRJT05fVEFCTEVfSF8KKworI2luY2x1ZGUgInR5cGVzLmgiCisKK2ludCBobmFfbG9jYWxfaW5pdChzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2KTsKK3ZvaWQgaG5hX2xvY2FsX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqc29mdF9pZmFjZSwgdWludDhfdCAqYWRkcik7Cit2b2lkIGhuYV9sb2NhbF9yZW1vdmUoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiwKKwkJICAgICAgdWludDhfdCAqYWRkciwgY2hhciAqbWVzc2FnZSk7CitpbnQgaG5hX2xvY2FsX2ZpbGxfYnVmZmVyKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYsCisJCQkgIHVuc2lnbmVkIGNoYXIgKmJ1ZmYsIGludCBidWZmX2xlbik7CitpbnQgaG5hX2xvY2FsX3NlcV9wcmludF90ZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICpvZmZzZXQpOwordm9pZCBobmFfbG9jYWxfZnJlZShzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2KTsKK2ludCBobmFfZ2xvYmFsX2luaXQoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdik7Cit2b2lkIGhuYV9nbG9iYWxfYWRkX29yaWcoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiwKKwkJCSBzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGUsCisJCQkgdW5zaWduZWQgY2hhciAqaG5hX2J1ZmYsIGludCBobmFfYnVmZl9sZW4pOworaW50IGhuYV9nbG9iYWxfc2VxX3ByaW50X3RleHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKm9mZnNldCk7Cit2b2lkIGhuYV9nbG9iYWxfZGVsX29yaWcoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiwKKwkJCSBzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGUsIGNoYXIgKm1lc3NhZ2UpOwordm9pZCBobmFfZ2xvYmFsX2ZyZWUoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdik7CitzdHJ1Y3Qgb3JpZ19ub2RlICp0cmFuc3RhYmxlX3NlYXJjaChzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2LCB1aW50OF90ICphZGRyKTsKKworI2VuZGlmIC8qIF9ORVRfQkFUTUFOX0FEVl9UUkFOU0xBVElPTl9UQUJMRV9IXyAqLwpkaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvdHlwZXMuaCBiL25ldC9iYXRtYW4tYWR2L3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdjYjIzZAotLS0gL2Rldi9udWxsCisrKyBiL25ldC9iYXRtYW4tYWR2L3R5cGVzLmgKQEAgLTAsMCArMSwyNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMCBCLkEuVC5NLkEuTi4gY29udHJpYnV0b3JzOgorICoKKyAqIE1hcmVrIExpbmRuZXIsIFNpbW9uIFd1bmRlcmxpY2gKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEsIFVTQQorICoKKyAqLworCisKKworI2lmbmRlZiBfTkVUX0JBVE1BTl9BRFZfVFlQRVNfSF8KKyNkZWZpbmUgX05FVF9CQVRNQU5fQURWX1RZUEVTX0hfCisKKyNpbmNsdWRlICJwYWNrZXQuaCIKKyNpbmNsdWRlICJiaXRhcnJheS5oIgorCisjZGVmaW5lIEJBVF9IRUFERVJfTEVOIChzaXplb2Yoc3RydWN0IGV0aGhkcikgKyBcCisJKChzaXplb2Yoc3RydWN0IHVuaWNhc3RfcGFja2V0KSA+IHNpemVvZihzdHJ1Y3QgYmNhc3RfcGFja2V0KSA/IFwKKwkgc2l6ZW9mKHN0cnVjdCB1bmljYXN0X3BhY2tldCkgOiBcCisJIHNpemVvZihzdHJ1Y3QgYmNhc3RfcGFja2V0KSkpKQorCisKK3N0cnVjdCBiYXRtYW5faWYgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlpbnQxNl90IGlmX251bTsKKwljaGFyIGlmX3N0YXR1czsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldjsKKwlhdG9taWNfdCBzZXFubzsKKwlhdG9taWNfdCBmcmFnX3NlcW5vOworCXVuc2lnbmVkIGNoYXIgKnBhY2tldF9idWZmOworCWludCBwYWNrZXRfbGVuOworCXN0cnVjdCBrb2JqZWN0ICpoYXJkaWZfb2JqOworCXN0cnVjdCBrcmVmIHJlZmNvdW50OworCXN0cnVjdCBwYWNrZXRfdHlwZSBiYXRtYW5fYWR2X3B0eXBlOworCXN0cnVjdCBuZXRfZGV2aWNlICpzb2Z0X2lmYWNlOworCXN0cnVjdCByY3VfaGVhZCByY3U7Cit9OworCisvKioKKyAqCW9yaWdfbm9kZSAtIHN0cnVjdHVyZSBmb3Igb3JpZ19saXN0IG1haW50YWluaW5nIG5vZGVzIG9mIG1lc2gKKyAqCUBwcmltYXJ5X2FkZHI6IGhvc3RzIHByaW1hcnkgaW50ZXJmYWNlIGFkZHJlc3MKKyAqCUBsYXN0X3ZhbGlkOiB3aGVuIGxhc3QgcGFja2V0IGZyb20gdGhpcyBub2RlIHdhcyByZWNlaXZlZAorICoJQGJjYXN0X3NlcW5vX3Jlc2V0OiB0aW1lIHdoZW4gdGhlIGJyb2FkY2FzdCBzZXFubyB3aW5kb3cgd2FzIHJlc2V0CisgKglAYmF0bWFuX3NlcW5vX3Jlc2V0OiB0aW1lIHdoZW4gdGhlIGJhdG1hbiBzZXFubyB3aW5kb3cgd2FzIHJlc2V0CisgKglAZ3dfZmxhZ3M6IGZsYWdzIHJlbGF0ZWQgdG8gZ2F0ZXdheSBjbGFzcworICoJQGZsYWdzOiBmb3Igbm93IG9ubHkgVklTX1NFUlZFUiBmbGFnCisgKglAbGFzdF9yZWFsX3NlcW5vOiBsYXN0IGFuZCBiZXN0IGtub3duIHNxdWVuY2UgbnVtYmVyCisgKglAbGFzdF90dGw6IHR0bCBvZiBsYXN0IHJlY2VpdmVkIHBhY2tldAorICoJQGxhc3RfYmNhc3Rfc2Vxbm86IGxhc3QgYnJvYWRjYXN0IHNlcXVlbmNlIG51bWJlciByZWNlaXZlZCBieSB0aGlzIGhvc3QKKyAqCisgKglAY2FuZGlkYXRlczogaG93IG1hbnkgY2FuZGlkYXRlcyBhcmUgYXZhaWxhYmxlCisgKglAc2VsZWN0ZWQ6IG5leHQgYm9uZGluZyBjYW5kaWRhdGUKKyAqLworc3RydWN0IG9yaWdfbm9kZSB7CisJdWludDhfdCBvcmlnW0VUSF9BTEVOXTsKKwl1aW50OF90IHByaW1hcnlfYWRkcltFVEhfQUxFTl07CisJc3RydWN0IG5laWdoX25vZGUgKnJvdXRlcjsKKwl1bnNpZ25lZCBsb25nICpiY2FzdF9vd247CisJdWludDhfdCAqYmNhc3Rfb3duX3N1bTsKKwl1aW50OF90IHRxX293bjsKKwlpbnQgdHFfYXN5bV9wZW5hbHR5OworCXVuc2lnbmVkIGxvbmcgbGFzdF92YWxpZDsKKwl1bnNpZ25lZCBsb25nIGJjYXN0X3NlcW5vX3Jlc2V0OworCXVuc2lnbmVkIGxvbmcgYmF0bWFuX3NlcW5vX3Jlc2V0OworCXVpbnQ4X3QgZ3dfZmxhZ3M7CisJdWludDhfdCBmbGFnczsKKwl1bnNpZ25lZCBjaGFyICpobmFfYnVmZjsKKwlpbnQxNl90IGhuYV9idWZmX2xlbjsKKwl1aW50MzJfdCBsYXN0X3JlYWxfc2Vxbm87CisJdWludDhfdCBsYXN0X3R0bDsKKwl1bnNpZ25lZCBsb25nIGJjYXN0X2JpdHNbTlVNX1dPUkRTXTsKKwl1aW50MzJfdCBsYXN0X2JjYXN0X3NlcW5vOworCXN0cnVjdCBsaXN0X2hlYWQgbmVpZ2hfbGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGZyYWdfbGlzdDsKKwl1bnNpZ25lZCBsb25nIGxhc3RfZnJhZ19wYWNrZXQ7CisJc3RydWN0IHsKKwkJdWludDhfdCBjYW5kaWRhdGVzOworCQlzdHJ1Y3QgbmVpZ2hfbm9kZSAqc2VsZWN0ZWQ7CisJfSBib25kOworfTsKKworc3RydWN0IGd3X25vZGUgeworCXN0cnVjdCBobGlzdF9ub2RlIGxpc3Q7CisJc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlOworCXVuc2lnbmVkIGxvbmcgZGVsZXRlZDsKKwlzdHJ1Y3Qga3JlZiByZWZjb3VudDsKKwlzdHJ1Y3QgcmN1X2hlYWQgcmN1OworfTsKKworLyoqCisgKgluZWlnaF9ub2RlCisgKglAbGFzdF92YWxpZDogd2hlbiBsYXN0IHBhY2tldCB2aWEgdGhpcyBuZWlnaGJvciB3YXMgcmVjZWl2ZWQKKyAqLworc3RydWN0IG5laWdoX25vZGUgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwl1aW50OF90IGFkZHJbRVRIX0FMRU5dOworCXVpbnQ4X3QgcmVhbF9wYWNrZXRfY291bnQ7CisJdWludDhfdCB0cV9yZWN2W1RRX0dMT0JBTF9XSU5ET1dfU0laRV07CisJdWludDhfdCB0cV9pbmRleDsKKwl1aW50OF90IHRxX2F2ZzsKKwl1aW50OF90IGxhc3RfdHRsOworCXN0cnVjdCBuZWlnaF9ub2RlICpuZXh0X2JvbmRfY2FuZGlkYXRlOworCXVuc2lnbmVkIGxvbmcgbGFzdF92YWxpZDsKKwl1bnNpZ25lZCBsb25nIHJlYWxfYml0c1tOVU1fV09SRFNdOworCXN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZTsKKwlzdHJ1Y3QgYmF0bWFuX2lmICppZl9pbmNvbWluZzsKK307CisKKworc3RydWN0IGJhdF9wcml2IHsKKwlhdG9taWNfdCBtZXNoX3N0YXRlOworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOworCWF0b21pY190IGFnZ3JlZ2F0ZWRfb2dtczsJLyogYm9vbGVhbiAqLworCWF0b21pY190IGJvbmRpbmc7CQkvKiBib29sZWFuICovCisJYXRvbWljX3QgZnJhZ21lbnRhdGlvbjsJCS8qIGJvb2xlYW4gKi8KKwlhdG9taWNfdCB2aXNfbW9kZTsJCS8qIFZJU19UWVBFXyogKi8KKwlhdG9taWNfdCBnd19tb2RlOwkJLyogR1dfTU9ERV8qICovCisJYXRvbWljX3QgZ3dfc2VsX2NsYXNzOwkJLyogdWludCAqLworCWF0b21pY190IGd3X2JhbmR3aWR0aDsJCS8qIGd3IGJhbmR3aWR0aCAqLworCWF0b21pY190IG9yaWdfaW50ZXJ2YWw7CQkvKiB1aW50ICovCisJYXRvbWljX3QgaG9wX3BlbmFsdHk7CQkvKiB1aW50ICovCisJYXRvbWljX3QgbG9nX2xldmVsOwkJLyogdWludCAqLworCWF0b21pY190IGJjYXN0X3NlcW5vOworCWF0b21pY190IGJjYXN0X3F1ZXVlX2xlZnQ7CisJYXRvbWljX3QgYmF0bWFuX3F1ZXVlX2xlZnQ7CisJY2hhciBudW1faWZhY2VzOworCXN0cnVjdCBobGlzdF9oZWFkIHNvZnRpZl9uZWlnaF9saXN0OworCXN0cnVjdCBzb2Z0aWZfbmVpZ2ggKnNvZnRpZl9uZWlnaDsKKwlzdHJ1Y3QgZGVidWdfbG9nICpkZWJ1Z19sb2c7CisJc3RydWN0IGJhdG1hbl9pZiAqcHJpbWFyeV9pZjsKKwlzdHJ1Y3Qga29iamVjdCAqbWVzaF9vYmo7CisJc3RydWN0IGRlbnRyeSAqZGVidWdfZGlyOworCXN0cnVjdCBobGlzdF9oZWFkIGZvcndfYmF0X2xpc3Q7CisJc3RydWN0IGhsaXN0X2hlYWQgZm9yd19iY2FzdF9saXN0OworCXN0cnVjdCBobGlzdF9oZWFkIGd3X2xpc3Q7CisJc3RydWN0IGxpc3RfaGVhZCB2aXNfc2VuZF9saXN0OworCXN0cnVjdCBoYXNodGFibGVfdCAqb3JpZ19oYXNoOworCXN0cnVjdCBoYXNodGFibGVfdCAqaG5hX2xvY2FsX2hhc2g7CisJc3RydWN0IGhhc2h0YWJsZV90ICpobmFfZ2xvYmFsX2hhc2g7CisJc3RydWN0IGhhc2h0YWJsZV90ICp2aXNfaGFzaDsKKwlzcGlubG9ja190IG9yaWdfaGFzaF9sb2NrOyAvKiBwcm90ZWN0cyBvcmlnX2hhc2ggKi8KKwlzcGlubG9ja190IGZvcndfYmF0X2xpc3RfbG9jazsgLyogcHJvdGVjdHMgZm9yd19iYXRfbGlzdCAqLworCXNwaW5sb2NrX3QgZm9yd19iY2FzdF9saXN0X2xvY2s7IC8qIHByb3RlY3RzICAqLworCXNwaW5sb2NrX3QgaG5hX2xoYXNoX2xvY2s7IC8qIHByb3RlY3RzIGhuYV9sb2NhbF9oYXNoICovCisJc3BpbmxvY2tfdCBobmFfZ2hhc2hfbG9jazsgLyogcHJvdGVjdHMgaG5hX2dsb2JhbF9oYXNoICovCisJc3BpbmxvY2tfdCBnd19saXN0X2xvY2s7IC8qIHByb3RlY3RzIGd3X2xpc3QgKi8KKwlzcGlubG9ja190IHZpc19oYXNoX2xvY2s7IC8qIHByb3RlY3RzIHZpc19oYXNoICovCisJc3BpbmxvY2tfdCB2aXNfbGlzdF9sb2NrOyAvKiBwcm90ZWN0cyB2aXNfaW5mbzo6cmVjdl9saXN0ICovCisJc3BpbmxvY2tfdCBzb2Z0aWZfbmVpZ2hfbG9jazsgLyogcHJvdGVjdHMgc29mdC1pbnRlcmZhY2UgbmVpZ2ggbGlzdCAqLworCWludDE2X3QgbnVtX2xvY2FsX2huYTsKKwlhdG9taWNfdCBobmFfbG9jYWxfY2hhbmdlZDsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIGhuYV93b3JrOworCXN0cnVjdCBkZWxheWVkX3dvcmsgb3JpZ193b3JrOworCXN0cnVjdCBkZWxheWVkX3dvcmsgdmlzX3dvcms7CisJc3RydWN0IGd3X25vZGUgKmN1cnJfZ3c7CisJc3RydWN0IHZpc19pbmZvICpteV92aXNfaW5mbzsKK307CisKK3N0cnVjdCBzb2NrZXRfY2xpZW50IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHF1ZXVlX2xpc3Q7CisJdW5zaWduZWQgaW50IHF1ZXVlX2xlbjsKKwl1bnNpZ25lZCBjaGFyIGluZGV4OworCXNwaW5sb2NrX3QgbG9jazsgLyogcHJvdGVjdHMgcXVldWVfbGlzdCwgcXVldWVfbGVuLCBpbmRleCAqLworCXdhaXRfcXVldWVfaGVhZF90IHF1ZXVlX3dhaXQ7CisJc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdjsKK307CisKK3N0cnVjdCBzb2NrZXRfcGFja2V0IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc2l6ZV90IGljbXBfbGVuOworCXN0cnVjdCBpY21wX3BhY2tldF9yciBpY21wX3BhY2tldDsKK307CisKK3N0cnVjdCBobmFfbG9jYWxfZW50cnkgeworCXVpbnQ4X3QgYWRkcltFVEhfQUxFTl07CisJdW5zaWduZWQgbG9uZyBsYXN0X3NlZW47CisJY2hhciBuZXZlcl9wdXJnZTsKK307CisKK3N0cnVjdCBobmFfZ2xvYmFsX2VudHJ5IHsKKwl1aW50OF90IGFkZHJbRVRIX0FMRU5dOworCXN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZTsKK307CisKKy8qKgorICoJZm9yd19wYWNrZXQgLSBzdHJ1Y3R1cmUgZm9yIGZvcndfbGlzdCBtYWludGFpbmluZyBwYWNrZXRzIHRvIGJlCisgKgkgICAgICAgICAgICAgIHNlbmQvZm9yd2FyZGVkCisgKi8KK3N0cnVjdCBmb3J3X3BhY2tldCB7CisJc3RydWN0IGhsaXN0X25vZGUgbGlzdDsKKwl1bnNpZ25lZCBsb25nIHNlbmRfdGltZTsKKwl1aW50OF90IG93bjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXVpbnQxNl90IHBhY2tldF9sZW47CisJdWludDMyX3QgZGlyZWN0X2xpbmtfZmxhZ3M7CisJdWludDhfdCBudW1fcGFja2V0czsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIGRlbGF5ZWRfd29yazsKKwlzdHJ1Y3QgYmF0bWFuX2lmICppZl9pbmNvbWluZzsKK307CisKKy8qIFdoaWxlIHNjYW5uaW5nIGZvciB2aXMtZW50cmllcyBvZiBhIHBhcnRpY3VsYXIgdmlzLW9yaWdpbmF0b3IKKyAqIHRoaXMgbGlzdCBjb2xsZWN0cyBpdHMgaW50ZXJmYWNlcyB0byBjcmVhdGUgYSBzdWJncmFwaC9jbHVzdGVyCisgKiBvdXQgb2YgdGhlbSBsYXRlcgorICovCitzdHJ1Y3QgaWZfbGlzdF9lbnRyeSB7CisJdWludDhfdCBhZGRyW0VUSF9BTEVOXTsKKwlib29sIHByaW1hcnk7CisJc3RydWN0IGhsaXN0X25vZGUgbGlzdDsKK307CisKK3N0cnVjdCBkZWJ1Z19sb2cgeworCWNoYXIgbG9nX2J1ZmZbTE9HX0JVRl9MRU5dOworCXVuc2lnbmVkIGxvbmcgbG9nX3N0YXJ0OworCXVuc2lnbmVkIGxvbmcgbG9nX2VuZDsKKwlzcGlubG9ja190IGxvY2s7IC8qIHByb3RlY3RzIGxvZ19idWZmLCBsb2dfc3RhcnQgYW5kIGxvZ19lbmQgKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdCBxdWV1ZV93YWl0OworfTsKKworc3RydWN0IGZyYWdfcGFja2V0X2xpc3RfZW50cnkgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwl1aW50MTZfdCBzZXFubzsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworfTsKKworc3RydWN0IHZpc19pbmZvIHsKKwl1bnNpZ25lZCBsb25nICAgICAgIGZpcnN0X3NlZW47CisJc3RydWN0IGxpc3RfaGVhZCAgICByZWN2X2xpc3Q7CisJCQkgICAgLyogbGlzdCBvZiBzZXJ2ZXItbmVpZ2hib3JzIHdlIHJlY2VpdmVkIGEgdmlzLXBhY2tldAorCQkJICAgICAqIGZyb20uICB3ZSBzaG91bGQgbm90IHJlcGx5IHRvIHRoZW0uICovCisJc3RydWN0IGxpc3RfaGVhZCBzZW5kX2xpc3Q7CisJc3RydWN0IGtyZWYgcmVmY291bnQ7CisJc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdjsKKwkvKiB0aGlzIHBhY2tldCBtaWdodCBiZSBwYXJ0IG9mIHRoZSB2aXMgc2VuZCBxdWV1ZS4gKi8KKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiX3BhY2tldDsKKwkvKiB2aXNfaW5mbyBtYXkgZm9sbG93IGhlcmUqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IHZpc19pbmZvX2VudHJ5IHsKKwl1aW50OF90ICBzcmNbRVRIX0FMRU5dOworCXVpbnQ4X3QgIGRlc3RbRVRIX0FMRU5dOworCXVpbnQ4X3QgIHF1YWxpdHk7CS8qIHF1YWxpdHkgPSAwIG1lYW5zIEhOQSAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IHJlY3ZsaXN0X25vZGUgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwl1aW50OF90IG1hY1tFVEhfQUxFTl07Cit9OworCitzdHJ1Y3Qgc29mdGlmX25laWdoIHsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSBsaXN0OworCXVpbnQ4X3QgYWRkcltFVEhfQUxFTl07CisJdW5zaWduZWQgbG9uZyBsYXN0X3NlZW47CisJc2hvcnQgdmlkOworCXN0cnVjdCBrcmVmIHJlZmNvdW50OworCXN0cnVjdCByY3VfaGVhZCByY3U7Cit9OworCisjZW5kaWYgLyogX05FVF9CQVRNQU5fQURWX1RZUEVTX0hfICovCmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi91bmljYXN0LmMgYi9uZXQvYmF0bWFuLWFkdi91bmljYXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGMyZTI4YgotLS0gL2Rldi9udWxsCisrKyBiL25ldC9iYXRtYW4tYWR2L3VuaWNhc3QuYwpAQCAtMCwwICsxLDM0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBCLkEuVC5NLkEuTi4gY29udHJpYnV0b3JzOgorICoKKyAqIEFuZHJlYXMgTGFuZ2VyCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxLCBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgIm1haW4uaCIKKyNpbmNsdWRlICJ1bmljYXN0LmgiCisjaW5jbHVkZSAic2VuZC5oIgorI2luY2x1ZGUgInNvZnQtaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiZ2F0ZXdheV9jbGllbnQuaCIKKyNpbmNsdWRlICJvcmlnaW5hdG9yLmgiCisjaW5jbHVkZSAiaGFzaC5oIgorI2luY2x1ZGUgInRyYW5zbGF0aW9uLXRhYmxlLmgiCisjaW5jbHVkZSAicm91dGluZy5oIgorI2luY2x1ZGUgImhhcmQtaW50ZXJmYWNlLmgiCisKKworc3RhdGljIHN0cnVjdCBza19idWZmICpmcmFnX21lcmdlX3BhY2tldChzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLAorCQkJCQkgc3RydWN0IGZyYWdfcGFja2V0X2xpc3RfZW50cnkgKnRmcCwKKwkJCQkJIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IHVuaWNhc3RfZnJhZ19wYWNrZXQgKnVwID0KKwkJKHN0cnVjdCB1bmljYXN0X2ZyYWdfcGFja2V0ICopc2tiLT5kYXRhOworCXN0cnVjdCBza19idWZmICp0bXBfc2tiOworCXN0cnVjdCB1bmljYXN0X3BhY2tldCAqdW5pY2FzdF9wYWNrZXQ7CisJaW50IGhkcl9sZW4gPSBzaXplb2Yoc3RydWN0IHVuaWNhc3RfcGFja2V0KSwKKwkgICAgdW5pX2RpZmYgPSBzaXplb2Yoc3RydWN0IHVuaWNhc3RfZnJhZ19wYWNrZXQpIC0gaGRyX2xlbjsKKworCS8qIHNldCBza2IgdG8gdGhlIGZpcnN0IHBhcnQgYW5kIHRtcF9za2IgdG8gdGhlIHNlY29uZCBwYXJ0ICovCisJaWYgKHVwLT5mbGFncyAmIFVOSV9GUkFHX0hFQUQpIHsKKwkJdG1wX3NrYiA9IHRmcC0+c2tiOworCX0gZWxzZSB7CisJCXRtcF9za2IgPSBza2I7CisJCXNrYiA9IHRmcC0+c2tiOworCX0KKworCXNrYl9wdWxsKHRtcF9za2IsIHNpemVvZihzdHJ1Y3QgdW5pY2FzdF9mcmFnX3BhY2tldCkpOworCWlmIChwc2tiX2V4cGFuZF9oZWFkKHNrYiwgMCwgdG1wX3NrYi0+bGVuLCBHRlBfQVRPTUlDKSA8IDApIHsKKwkJLyogZnJlZSBidWZmZXJlZCBza2IsIHNrYiB3aWxsIGJlIGZyZWVkIGxhdGVyICovCisJCWtmcmVlX3NrYih0ZnAtPnNrYik7CisJCXJldHVybiBOVUxMOworCX0KKworCS8qIG1vdmUgZnJlZSBlbnRyeSB0byBlbmQgKi8KKwl0ZnAtPnNrYiA9IE5VTEw7CisJdGZwLT5zZXFubyA9IDA7CisJbGlzdF9tb3ZlX3RhaWwoJnRmcC0+bGlzdCwgaGVhZCk7CisKKwltZW1jcHkoc2tiX3B1dChza2IsIHRtcF9za2ItPmxlbiksIHRtcF9za2ItPmRhdGEsIHRtcF9za2ItPmxlbik7CisJa2ZyZWVfc2tiKHRtcF9za2IpOworCisJbWVtbW92ZShza2ItPmRhdGEgKyB1bmlfZGlmZiwgc2tiLT5kYXRhLCBoZHJfbGVuKTsKKwl1bmljYXN0X3BhY2tldCA9IChzdHJ1Y3QgdW5pY2FzdF9wYWNrZXQgKikgc2tiX3B1bGwoc2tiLCB1bmlfZGlmZik7CisJdW5pY2FzdF9wYWNrZXQtPnBhY2tldF90eXBlID0gQkFUX1VOSUNBU1Q7CisKKwlyZXR1cm4gc2tiOworfQorCitzdGF0aWMgdm9pZCBmcmFnX2NyZWF0ZV9lbnRyeShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBmcmFnX3BhY2tldF9saXN0X2VudHJ5ICp0ZnA7CisJc3RydWN0IHVuaWNhc3RfZnJhZ19wYWNrZXQgKnVwID0KKwkJKHN0cnVjdCB1bmljYXN0X2ZyYWdfcGFja2V0ICopc2tiLT5kYXRhOworCisJLyogZnJlZSBhbmQgb2xkZXN0IHBhY2tldHMgc3RhbmQgYXQgdGhlIGVuZCAqLworCXRmcCA9IGxpc3RfZW50cnkoKGhlYWQpLT5wcmV2LCB0eXBlb2YoKnRmcCksIGxpc3QpOworCWtmcmVlX3NrYih0ZnAtPnNrYik7CisKKwl0ZnAtPnNlcW5vID0gbnRvaHModXAtPnNlcW5vKTsKKwl0ZnAtPnNrYiA9IHNrYjsKKwlsaXN0X21vdmUoJnRmcC0+bGlzdCwgaGVhZCk7CisJcmV0dXJuOworfQorCitzdGF0aWMgaW50IGZyYWdfY3JlYXRlX2J1ZmZlcihzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQoreworCWludCBpOworCXN0cnVjdCBmcmFnX3BhY2tldF9saXN0X2VudHJ5ICp0ZnA7CisKKwlmb3IgKGkgPSAwOyBpIDwgRlJBR19CVUZGRVJfU0laRTsgaSsrKSB7CisJCXRmcCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBmcmFnX3BhY2tldF9saXN0X2VudHJ5KSwKKwkJCUdGUF9BVE9NSUMpOworCQlpZiAoIXRmcCkgeworCQkJZnJhZ19saXN0X2ZyZWUoaGVhZCk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQl0ZnAtPnNrYiA9IE5VTEw7CisJCXRmcC0+c2Vxbm8gPSAwOworCQlJTklUX0xJU1RfSEVBRCgmdGZwLT5saXN0KTsKKwkJbGlzdF9hZGQoJnRmcC0+bGlzdCwgaGVhZCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZnJhZ19wYWNrZXRfbGlzdF9lbnRyeSAqZnJhZ19zZWFyY2hfcGFja2V0KHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsCisJCQkJCQkgc3RydWN0IHVuaWNhc3RfZnJhZ19wYWNrZXQgKnVwKQoreworCXN0cnVjdCBmcmFnX3BhY2tldF9saXN0X2VudHJ5ICp0ZnA7CisJc3RydWN0IHVuaWNhc3RfZnJhZ19wYWNrZXQgKnRtcF91cCA9IE5VTEw7CisJdWludDE2X3Qgc2VhcmNoX3NlcW5vOworCisJaWYgKHVwLT5mbGFncyAmIFVOSV9GUkFHX0hFQUQpCisJCXNlYXJjaF9zZXFubyA9IG50b2hzKHVwLT5zZXFubykrMTsKKwllbHNlCisJCXNlYXJjaF9zZXFubyA9IG50b2hzKHVwLT5zZXFubyktMTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkodGZwLCBoZWFkLCBsaXN0KSB7CisKKwkJaWYgKCF0ZnAtPnNrYikKKwkJCWNvbnRpbnVlOworCisJCWlmICh0ZnAtPnNlcW5vID09IG50b2hzKHVwLT5zZXFubykpCisJCQlnb3RvIG1vdl90YWlsOworCisJCXRtcF91cCA9IChzdHJ1Y3QgdW5pY2FzdF9mcmFnX3BhY2tldCAqKXRmcC0+c2tiLT5kYXRhOworCisJCWlmICh0ZnAtPnNlcW5vID09IHNlYXJjaF9zZXFubykgeworCisJCQlpZiAoKHRtcF91cC0+ZmxhZ3MgJiBVTklfRlJBR19IRUFEKSAhPQorCQkJICAgICh1cC0+ZmxhZ3MgJiBVTklfRlJBR19IRUFEKSkKKwkJCQlyZXR1cm4gdGZwOworCQkJZWxzZQorCQkJCWdvdG8gbW92X3RhaWw7CisJCX0KKwl9CisJcmV0dXJuIE5VTEw7CisKK21vdl90YWlsOgorCWxpc3RfbW92ZV90YWlsKCZ0ZnAtPmxpc3QsIGhlYWQpOworCXJldHVybiBOVUxMOworfQorCit2b2lkIGZyYWdfbGlzdF9mcmVlKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJc3RydWN0IGZyYWdfcGFja2V0X2xpc3RfZW50cnkgKnBmLCAqdG1wX3BmOworCisJaWYgKCFsaXN0X2VtcHR5KGhlYWQpKSB7CisKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBmLCB0bXBfcGYsIGhlYWQsIGxpc3QpIHsKKwkJCWtmcmVlX3NrYihwZi0+c2tiKTsKKwkJCWxpc3RfZGVsKCZwZi0+bGlzdCk7CisJCQlrZnJlZShwZik7CisJCX0KKwl9CisJcmV0dXJuOworfQorCisvKiBmcmFnX3JlYXNzZW1ibGVfc2tiKCk6CisgKiByZXR1cm5zIE5FVF9SWF9EUk9QIGlmIHRoZSBvcGVyYXRpb24gZmFpbGVkIC0gc2tiIGlzIGxlZnQgaW50YWN0CisgKiByZXR1cm5zIE5FVF9SWF9TVUNDRVNTIGlmIHRoZSBmcmFnbWVudCB3YXMgYnVmZmVyZWQgKHNrYl9uZXcgd2lsbCBiZSBOVUxMKQorICogb3IgdGhlIHNrYiBjb3VsZCBiZSByZWFzc2VtYmxlZCAoc2tiX25ldyB3aWxsIHBvaW50IHRvIHRoZSBuZXcgcGFja2V0IGFuZAorICogc2tiIHdhcyBmcmVlZCkKKyAqLworaW50IGZyYWdfcmVhc3NlbWJsZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiwKKwkJCXN0cnVjdCBza19idWZmICoqbmV3X3NrYikKK3sKKwlzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGU7CisJc3RydWN0IGZyYWdfcGFja2V0X2xpc3RfZW50cnkgKnRtcF9mcmFnX2VudHJ5OworCWludCByZXQgPSBORVRfUlhfRFJPUDsKKwlzdHJ1Y3QgdW5pY2FzdF9mcmFnX3BhY2tldCAqdW5pY2FzdF9wYWNrZXQgPQorCQkoc3RydWN0IHVuaWNhc3RfZnJhZ19wYWNrZXQgKilza2ItPmRhdGE7CisKKwkqbmV3X3NrYiA9IE5VTEw7CisJc3Bpbl9sb2NrX2JoKCZiYXRfcHJpdi0+b3JpZ19oYXNoX2xvY2spOworCW9yaWdfbm9kZSA9ICgoc3RydWN0IG9yaWdfbm9kZSAqKQorCQkgICAgaGFzaF9maW5kKGJhdF9wcml2LT5vcmlnX2hhc2gsIGNvbXBhcmVfb3JpZywgY2hvb3NlX29yaWcsCisJCQkgICAgICB1bmljYXN0X3BhY2tldC0+b3JpZykpOworCisJaWYgKCFvcmlnX25vZGUpIHsKKwkJcHJfZGVidWcoImNvdWxkbid0IGZpbmQgb3JpZ2luYXRvciBpbiBvcmlnX2hhc2hcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlvcmlnX25vZGUtPmxhc3RfZnJhZ19wYWNrZXQgPSBqaWZmaWVzOworCisJaWYgKGxpc3RfZW1wdHkoJm9yaWdfbm9kZS0+ZnJhZ19saXN0KSAmJgorCSAgICBmcmFnX2NyZWF0ZV9idWZmZXIoJm9yaWdfbm9kZS0+ZnJhZ19saXN0KSkgeworCQlwcl9kZWJ1ZygiY291bGRuJ3QgY3JlYXRlIGZyYWcgYnVmZmVyXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJdG1wX2ZyYWdfZW50cnkgPSBmcmFnX3NlYXJjaF9wYWNrZXQoJm9yaWdfbm9kZS0+ZnJhZ19saXN0LAorCQkJCQkgICAgdW5pY2FzdF9wYWNrZXQpOworCisJaWYgKCF0bXBfZnJhZ19lbnRyeSkgeworCQlmcmFnX2NyZWF0ZV9lbnRyeSgmb3JpZ19ub2RlLT5mcmFnX2xpc3QsIHNrYik7CisJCXJldCA9IE5FVF9SWF9TVUNDRVNTOworCQlnb3RvIG91dDsKKwl9CisKKwkqbmV3X3NrYiA9IGZyYWdfbWVyZ2VfcGFja2V0KCZvcmlnX25vZGUtPmZyYWdfbGlzdCwgdG1wX2ZyYWdfZW50cnksCisJCQkJICAgICBza2IpOworCS8qIGlmIG5vdCwgbWVyZ2UgZmFpbGVkICovCisJaWYgKCpuZXdfc2tiKQorCQlyZXQgPSBORVRfUlhfU1VDQ0VTUzsKK291dDoKKwlzcGluX3VubG9ja19iaCgmYmF0X3ByaXYtPm9yaWdfaGFzaF9sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCBmcmFnX3NlbmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYsCisJCSAgc3RydWN0IGJhdG1hbl9pZiAqYmF0bWFuX2lmLCB1aW50OF90IGRzdGFkZHJbXSkKK3sKKwlzdHJ1Y3QgdW5pY2FzdF9wYWNrZXQgdG1wX3VjLCAqdW5pY2FzdF9wYWNrZXQ7CisJc3RydWN0IHNrX2J1ZmYgKmZyYWdfc2tiOworCXN0cnVjdCB1bmljYXN0X2ZyYWdfcGFja2V0ICpmcmFnMSwgKmZyYWcyOworCWludCB1Y19oZHJfbGVuID0gc2l6ZW9mKHN0cnVjdCB1bmljYXN0X3BhY2tldCk7CisJaW50IHVjZl9oZHJfbGVuID0gc2l6ZW9mKHN0cnVjdCB1bmljYXN0X2ZyYWdfcGFja2V0KTsKKwlpbnQgZGF0YV9sZW4gPSBza2ItPmxlbjsKKworCWlmICghYmF0X3ByaXYtPnByaW1hcnlfaWYpCisJCWdvdG8gZHJvcHBlZDsKKworCXVuaWNhc3RfcGFja2V0ID0gKHN0cnVjdCB1bmljYXN0X3BhY2tldCAqKSBza2ItPmRhdGE7CisKKwltZW1jcHkoJnRtcF91YywgdW5pY2FzdF9wYWNrZXQsIHVjX2hkcl9sZW4pOworCWZyYWdfc2tiID0gZGV2X2FsbG9jX3NrYihkYXRhX2xlbiAtIChkYXRhX2xlbiAvIDIpICsgdWNmX2hkcl9sZW4pOworCXNrYl9zcGxpdChza2IsIGZyYWdfc2tiLCBkYXRhX2xlbiAvIDIpOworCisJaWYgKG15X3NrYl9oZWFkX3B1c2goc2tiLCB1Y2ZfaGRyX2xlbiAtIHVjX2hkcl9sZW4pIDwgMCB8fAorCSAgICBteV9za2JfaGVhZF9wdXNoKGZyYWdfc2tiLCB1Y2ZfaGRyX2xlbikgPCAwKQorCQlnb3RvIGRyb3BfZnJhZzsKKworCWZyYWcxID0gKHN0cnVjdCB1bmljYXN0X2ZyYWdfcGFja2V0ICopc2tiLT5kYXRhOworCWZyYWcyID0gKHN0cnVjdCB1bmljYXN0X2ZyYWdfcGFja2V0ICopZnJhZ19za2ItPmRhdGE7CisKKwltZW1jcHkoZnJhZzEsICZ0bXBfdWMsIHNpemVvZihzdHJ1Y3QgdW5pY2FzdF9wYWNrZXQpKTsKKworCWZyYWcxLT50dGwtLTsKKwlmcmFnMS0+dmVyc2lvbiA9IENPTVBBVF9WRVJTSU9OOworCWZyYWcxLT5wYWNrZXRfdHlwZSA9IEJBVF9VTklDQVNUX0ZSQUc7CisKKwltZW1jcHkoZnJhZzEtPm9yaWcsIGJhdF9wcml2LT5wcmltYXJ5X2lmLT5uZXRfZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCW1lbWNweShmcmFnMiwgZnJhZzEsIHNpemVvZihzdHJ1Y3QgdW5pY2FzdF9mcmFnX3BhY2tldCkpOworCisJZnJhZzEtPmZsYWdzIHw9IFVOSV9GUkFHX0hFQUQ7CisJZnJhZzItPmZsYWdzICY9IH5VTklfRlJBR19IRUFEOworCisJZnJhZzEtPnNlcW5vID0gaHRvbnMoKHVpbnQxNl90KWF0b21pY19pbmNfcmV0dXJuKAorCQkJICAgICAmYmF0bWFuX2lmLT5mcmFnX3NlcW5vKSk7CisJZnJhZzItPnNlcW5vID0gaHRvbnMoKHVpbnQxNl90KWF0b21pY19pbmNfcmV0dXJuKAorCQkJICAgICAmYmF0bWFuX2lmLT5mcmFnX3NlcW5vKSk7CisKKwlzZW5kX3NrYl9wYWNrZXQoc2tiLCBiYXRtYW5faWYsIGRzdGFkZHIpOworCXNlbmRfc2tiX3BhY2tldChmcmFnX3NrYiwgYmF0bWFuX2lmLCBkc3RhZGRyKTsKKwlyZXR1cm4gTkVUX1JYX1NVQ0NFU1M7CisKK2Ryb3BfZnJhZzoKKwlrZnJlZV9za2IoZnJhZ19za2IpOworZHJvcHBlZDoKKwlrZnJlZV9za2Ioc2tiKTsKKwlyZXR1cm4gTkVUX1JYX0RST1A7Cit9CisKK2ludCB1bmljYXN0X3NlbmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYpCit7CisJc3RydWN0IGV0aGhkciAqZXRoaGRyID0gKHN0cnVjdCBldGhoZHIgKilza2ItPmRhdGE7CisJc3RydWN0IHVuaWNhc3RfcGFja2V0ICp1bmljYXN0X3BhY2tldDsKKwlzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGU7CisJc3RydWN0IGJhdG1hbl9pZiAqYmF0bWFuX2lmOworCXN0cnVjdCBuZWlnaF9ub2RlICpyb3V0ZXI7CisJaW50IGRhdGFfbGVuID0gc2tiLT5sZW47CisJdWludDhfdCBkc3RhZGRyWzZdOworCisJc3Bpbl9sb2NrX2JoKCZiYXRfcHJpdi0+b3JpZ19oYXNoX2xvY2spOworCisJLyogZ2V0IHJvdXRpbmcgaW5mb3JtYXRpb24gKi8KKwlpZiAoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoZXRoaGRyLT5oX2Rlc3QpKQorCQlvcmlnX25vZGUgPSAoc3RydWN0IG9yaWdfbm9kZSAqKWd3X2dldF9zZWxlY3RlZChiYXRfcHJpdik7CisJZWxzZQorCQlvcmlnX25vZGUgPSAoKHN0cnVjdCBvcmlnX25vZGUgKiloYXNoX2ZpbmQoYmF0X3ByaXYtPm9yaWdfaGFzaCwKKwkJCQkJCQkgICBjb21wYXJlX29yaWcsCisJCQkJCQkJICAgY2hvb3NlX29yaWcsCisJCQkJCQkJICAgZXRoaGRyLT5oX2Rlc3QpKTsKKworCS8qIGNoZWNrIGZvciBobmEgaG9zdCAqLworCWlmICghb3JpZ19ub2RlKQorCQlvcmlnX25vZGUgPSB0cmFuc3RhYmxlX3NlYXJjaChiYXRfcHJpdiwgZXRoaGRyLT5oX2Rlc3QpOworCisJcm91dGVyID0gZmluZF9yb3V0ZXIoYmF0X3ByaXYsIG9yaWdfbm9kZSwgTlVMTCk7CisKKwlpZiAoIXJvdXRlcikKKwkJZ290byB1bmxvY2s7CisKKwkvKiBkb24ndCBsb2NrIHdoaWxlIHNlbmRpbmcgdGhlIHBhY2tldHMgLi4uIHdlIHRoZXJlZm9yZQorCQkqIGNvcHkgdGhlIHJlcXVpcmVkIGRhdGEgYmVmb3JlIHNlbmRpbmcgKi8KKworCWJhdG1hbl9pZiA9IHJvdXRlci0+aWZfaW5jb21pbmc7CisJbWVtY3B5KGRzdGFkZHIsIHJvdXRlci0+YWRkciwgRVRIX0FMRU4pOworCisJc3Bpbl91bmxvY2tfYmgoJmJhdF9wcml2LT5vcmlnX2hhc2hfbG9jayk7CisKKwlpZiAoYmF0bWFuX2lmLT5pZl9zdGF0dXMgIT0gSUZfQUNUSVZFKQorCQlnb3RvIGRyb3BwZWQ7CisKKwlpZiAobXlfc2tiX2hlYWRfcHVzaChza2IsIHNpemVvZihzdHJ1Y3QgdW5pY2FzdF9wYWNrZXQpKSA8IDApCisJCWdvdG8gZHJvcHBlZDsKKworCXVuaWNhc3RfcGFja2V0ID0gKHN0cnVjdCB1bmljYXN0X3BhY2tldCAqKXNrYi0+ZGF0YTsKKworCXVuaWNhc3RfcGFja2V0LT52ZXJzaW9uID0gQ09NUEFUX1ZFUlNJT047CisJLyogYmF0bWFuIHBhY2tldCB0eXBlOiB1bmljYXN0ICovCisJdW5pY2FzdF9wYWNrZXQtPnBhY2tldF90eXBlID0gQkFUX1VOSUNBU1Q7CisJLyogc2V0IHVuaWNhc3QgdHRsICovCisJdW5pY2FzdF9wYWNrZXQtPnR0bCA9IFRUTDsKKwkvKiBjb3B5IHRoZSBkZXN0aW5hdGlvbiBmb3IgZmFzdGVyIHJvdXRpbmcgKi8KKwltZW1jcHkodW5pY2FzdF9wYWNrZXQtPmRlc3QsIG9yaWdfbm9kZS0+b3JpZywgRVRIX0FMRU4pOworCisJaWYgKGF0b21pY19yZWFkKCZiYXRfcHJpdi0+ZnJhZ21lbnRhdGlvbikgJiYKKwkgICAgZGF0YV9sZW4gKyBzaXplb2Yoc3RydWN0IHVuaWNhc3RfcGFja2V0KSA+CisJICAgIGJhdG1hbl9pZi0+bmV0X2Rldi0+bXR1KSB7CisJCS8qIHNlbmQgZnJhZyBza2IgZGVjcmVhc2VzIHR0bCAqLworCQl1bmljYXN0X3BhY2tldC0+dHRsKys7CisJCXJldHVybiBmcmFnX3NlbmRfc2tiKHNrYiwgYmF0X3ByaXYsIGJhdG1hbl9pZiwKKwkJCQkgICAgIGRzdGFkZHIpOworCX0KKwlzZW5kX3NrYl9wYWNrZXQoc2tiLCBiYXRtYW5faWYsIGRzdGFkZHIpOworCXJldHVybiAwOworCit1bmxvY2s6CisJc3Bpbl91bmxvY2tfYmgoJmJhdF9wcml2LT5vcmlnX2hhc2hfbG9jayk7Citkcm9wcGVkOgorCWtmcmVlX3NrYihza2IpOworCXJldHVybiAxOworfQpkaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvdW5pY2FzdC5oIGIvbmV0L2JhdG1hbi1hZHYvdW5pY2FzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzMmI3ODYKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvYmF0bWFuLWFkdi91bmljYXN0LmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBCLkEuVC5NLkEuTi4gY29udHJpYnV0b3JzOgorICoKKyAqIEFuZHJlYXMgTGFuZ2VyCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxLCBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBfTkVUX0JBVE1BTl9BRFZfVU5JQ0FTVF9IXworI2RlZmluZSBfTkVUX0JBVE1BTl9BRFZfVU5JQ0FTVF9IXworCisjZGVmaW5lIEZSQUdfVElNRU9VVCAxMDAwMAkvKiBwdXJnZSBmcmFnIGxpc3QgZW50cnlzIGFmdGVyIHRpbWUgaW4gbXMgKi8KKyNkZWZpbmUgRlJBR19CVUZGRVJfU0laRSA2CS8qIG51bWJlciBvZiBsaXN0IGVsZW1lbnRzIGluIGJ1ZmZlciAqLworCitpbnQgZnJhZ19yZWFzc2VtYmxlX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2LAorCQkJc3RydWN0IHNrX2J1ZmYgKipuZXdfc2tiKTsKK3ZvaWQgZnJhZ19saXN0X2ZyZWUoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCk7CitpbnQgdW5pY2FzdF9zZW5kX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2KTsKK2ludCBmcmFnX3NlbmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYsCisJCSAgc3RydWN0IGJhdG1hbl9pZiAqYmF0bWFuX2lmLCB1aW50OF90IGRzdGFkZHJbXSk7CisKKyNlbmRpZiAvKiBfTkVUX0JBVE1BTl9BRFZfVU5JQ0FTVF9IXyAqLwpkaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvdmlzLmMgYi9uZXQvYmF0bWFuLWFkdi92aXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDRjNDIzCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L2JhdG1hbi1hZHYvdmlzLmMKQEAgLTAsMCArMSw5NDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMCBCLkEuVC5NLkEuTi4gY29udHJpYnV0b3JzOgorICoKKyAqIFNpbW9uIFd1bmRlcmxpY2gKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEsIFVTQQorICoKKyAqLworCisjaW5jbHVkZSAibWFpbi5oIgorI2luY2x1ZGUgInNlbmQuaCIKKyNpbmNsdWRlICJ0cmFuc2xhdGlvbi10YWJsZS5oIgorI2luY2x1ZGUgInZpcy5oIgorI2luY2x1ZGUgInNvZnQtaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiaGFyZC1pbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJoYXNoLmgiCisjaW5jbHVkZSAib3JpZ2luYXRvci5oIgorCisjZGVmaW5lIE1BWF9WSVNfUEFDS0VUX1NJWkUgMTAwMAorCisvKiBSZXR1cm5zIHRoZSBzbWFsbGVzdCBzaWduZWQgaW50ZWdlciBpbiB0d28ncyBjb21wbGVtZW50IHdpdGggdGhlIHNpemVvZiB4ICovCisjZGVmaW5lIHNtYWxsZXN0X3NpZ25lZF9pbnQoeCkgKDF1IDw8ICg3dSArIDh1ICogKHNpemVvZih4KSAtIDF1KSkpCisKKy8qIENoZWNrcyBpZiBhIHNlcXVlbmNlIG51bWJlciB4IGlzIGEgcHJlZGVjZXNzb3Ivc3VjY2Vzc29yIG9mIHkuCisgKiB0aGV5IGhhbmRsZSBvdmVyZmxvd3MvdW5kZXJmbG93cyBhbmQgY2FuIGNvcnJlY3RseSBjaGVjayBmb3IgYQorICogcHJlZGVjZXNzb3Ivc3VjY2Vzc29yIHVubGVzcyB0aGUgdmFyaWFibGUgc2VxdWVuY2UgbnVtYmVyIGhhcyBncm93biBieQorICogbW9yZSB0aGVuIDIqKihiaXR3aWR0aCh4KS0xKS0xLgorICogVGhpcyBtZWFucyB0aGF0IGZvciBhIHVpbnQ4X3Qgd2l0aCB0aGUgbWF4aW11bSB2YWx1ZSAyNTUsIGl0IHdvdWxkIHRoaW5rOgorICogIC0gd2hlbiBhZGRpbmcgbm90aGluZyAtIGl0IGlzIG5laXRoZXIgYSBwcmVkZWNlc3NvciBub3IgYSBzdWNjZXNzb3IKKyAqICAtIGJlZm9yZSBhZGRpbmcgbW9yZSB0aGFuIDEyNyB0byB0aGUgc3RhcnRpbmcgdmFsdWUgLSBpdCBpcyBhIHByZWRlY2Vzc29yLAorICogIC0gd2hlbiBhZGRpbmcgMTI4IC0gaXQgaXMgbmVpdGhlciBhIHByZWRlY2Vzc29yIG5vciBhIHN1Y2Nlc3NvciwKKyAqICAtIGFmdGVyIGFkZGluZyBtb3JlIHRoYW4gMTI3IHRvIHRoZSBzdGFydGluZyB2YWx1ZSAtIGl0IGlzIGEgc3VjY2Vzc29yICovCisjZGVmaW5lIHNlcV9iZWZvcmUoeCwgeSkgKHt0eXBlb2YoeCkgX2R1bW15ID0gKHggLSB5KTsgXAorCQkJX2R1bW15ID4gc21hbGxlc3Rfc2lnbmVkX2ludChfZHVtbXkpOyB9KQorI2RlZmluZSBzZXFfYWZ0ZXIoeCwgeSkgc2VxX2JlZm9yZSh5LCB4KQorCitzdGF0aWMgdm9pZCBzdGFydF92aXNfdGltZXIoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdik7CisKKy8qIGZyZWUgdGhlIGluZm8gKi8KK3N0YXRpYyB2b2lkIGZyZWVfaW5mbyhzdHJ1Y3Qga3JlZiAqcmVmKQoreworCXN0cnVjdCB2aXNfaW5mbyAqaW5mbyA9IGNvbnRhaW5lcl9vZihyZWYsIHN0cnVjdCB2aXNfaW5mbywgcmVmY291bnQpOworCXN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYgPSBpbmZvLT5iYXRfcHJpdjsKKwlzdHJ1Y3QgcmVjdmxpc3Rfbm9kZSAqZW50cnksICp0bXA7CisKKwlsaXN0X2RlbF9pbml0KCZpbmZvLT5zZW5kX2xpc3QpOworCXNwaW5fbG9ja19iaCgmYmF0X3ByaXYtPnZpc19saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlbnRyeSwgdG1wLCAmaW5mby0+cmVjdl9saXN0LCBsaXN0KSB7CisJCWxpc3RfZGVsKCZlbnRyeS0+bGlzdCk7CisJCWtmcmVlKGVudHJ5KTsKKwl9CisKKwlzcGluX3VubG9ja19iaCgmYmF0X3ByaXYtPnZpc19saXN0X2xvY2spOworCWtmcmVlX3NrYihpbmZvLT5za2JfcGFja2V0KTsKK30KKworLyogQ29tcGFyZSB0d28gdmlzIHBhY2tldHMsIHVzZWQgYnkgdGhlIGhhc2hpbmcgYWxnb3JpdGhtICovCitzdGF0aWMgaW50IHZpc19pbmZvX2NtcCh2b2lkICpkYXRhMSwgdm9pZCAqZGF0YTIpCit7CisJc3RydWN0IHZpc19pbmZvICpkMSwgKmQyOworCXN0cnVjdCB2aXNfcGFja2V0ICpwMSwgKnAyOworCWQxID0gZGF0YTE7CisJZDIgPSBkYXRhMjsKKwlwMSA9IChzdHJ1Y3QgdmlzX3BhY2tldCAqKWQxLT5za2JfcGFja2V0LT5kYXRhOworCXAyID0gKHN0cnVjdCB2aXNfcGFja2V0ICopZDItPnNrYl9wYWNrZXQtPmRhdGE7CisJcmV0dXJuIGNvbXBhcmVfb3JpZyhwMS0+dmlzX29yaWcsIHAyLT52aXNfb3JpZyk7Cit9CisKKy8qIGhhc2ggZnVuY3Rpb24gdG8gY2hvb3NlIGFuIGVudHJ5IGluIGEgaGFzaCB0YWJsZSBvZiBnaXZlbiBzaXplICovCisvKiBoYXNoIGFsZ29yaXRobSBmcm9tIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSGFzaF90YWJsZSAqLworc3RhdGljIGludCB2aXNfaW5mb19jaG9vc2Uodm9pZCAqZGF0YSwgaW50IHNpemUpCit7CisJc3RydWN0IHZpc19pbmZvICp2aXNfaW5mbyA9IGRhdGE7CisJc3RydWN0IHZpc19wYWNrZXQgKnBhY2tldDsKKwl1bnNpZ25lZCBjaGFyICprZXk7CisJdWludDMyX3QgaGFzaCA9IDA7CisJc2l6ZV90IGk7CisKKwlwYWNrZXQgPSAoc3RydWN0IHZpc19wYWNrZXQgKil2aXNfaW5mby0+c2tiX3BhY2tldC0+ZGF0YTsKKwlrZXkgPSBwYWNrZXQtPnZpc19vcmlnOworCWZvciAoaSA9IDA7IGkgPCBFVEhfQUxFTjsgaSsrKSB7CisJCWhhc2ggKz0ga2V5W2ldOworCQloYXNoICs9IChoYXNoIDw8IDEwKTsKKwkJaGFzaCBePSAoaGFzaCA+PiA2KTsKKwl9CisKKwloYXNoICs9IChoYXNoIDw8IDMpOworCWhhc2ggXj0gKGhhc2ggPj4gMTEpOworCWhhc2ggKz0gKGhhc2ggPDwgMTUpOworCisJcmV0dXJuIGhhc2ggJSBzaXplOworfQorCisvKiBpbnNlcnQgaW50ZXJmYWNlIHRvIHRoZSBsaXN0IG9mIGludGVyZmFjZXMgb2Ygb25lIG9yaWdpbmF0b3IsIGlmIGl0CisgKiBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0IGluIHRoZSBsaXN0ICovCitzdGF0aWMgdm9pZCB2aXNfZGF0YV9pbnNlcnRfaW50ZXJmYWNlKGNvbnN0IHVpbnQ4X3QgKmludGVyZmFjZSwKKwkJCQkgICAgICBzdHJ1Y3QgaGxpc3RfaGVhZCAqaWZfbGlzdCwKKwkJCQkgICAgICBib29sIHByaW1hcnkpCit7CisJc3RydWN0IGlmX2xpc3RfZW50cnkgKmVudHJ5OworCXN0cnVjdCBobGlzdF9ub2RlICpwb3M7CisKKwlobGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgcG9zLCBpZl9saXN0LCBsaXN0KSB7CisJCWlmIChjb21wYXJlX29yaWcoZW50cnktPmFkZHIsICh2b2lkICopaW50ZXJmYWNlKSkKKwkJCXJldHVybjsKKwl9CisKKwkvKiBpdHMgYSBuZXcgYWRkcmVzcywgYWRkIGl0IHRvIHRoZSBsaXN0ICovCisJZW50cnkgPSBrbWFsbG9jKHNpemVvZigqZW50cnkpLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWVudHJ5KQorCQlyZXR1cm47CisJbWVtY3B5KGVudHJ5LT5hZGRyLCBpbnRlcmZhY2UsIEVUSF9BTEVOKTsKKwllbnRyeS0+cHJpbWFyeSA9IHByaW1hcnk7CisJaGxpc3RfYWRkX2hlYWQoJmVudHJ5LT5saXN0LCBpZl9saXN0KTsKK30KKworc3RhdGljIHNzaXplX3QgdmlzX2RhdGFfcmVhZF9wcmltX3NlYyhjaGFyICpidWZmLCBzdHJ1Y3QgaGxpc3RfaGVhZCAqaWZfbGlzdCkKK3sKKwlzdHJ1Y3QgaWZfbGlzdF9lbnRyeSAqZW50cnk7CisJc3RydWN0IGhsaXN0X25vZGUgKnBvczsKKwlzaXplX3QgbGVuID0gMDsKKworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCBwb3MsIGlmX2xpc3QsIGxpc3QpIHsKKwkJaWYgKGVudHJ5LT5wcmltYXJ5KQorCQkJbGVuICs9IHNwcmludGYoYnVmZiArIGxlbiwgIlBSSU1BUlksICIpOworCQllbHNlCisJCQlsZW4gKz0gc3ByaW50ZihidWZmICsgbGVuLCAgIlNFQyAlcE0sICIsIGVudHJ5LT5hZGRyKTsKKwl9CisKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgc2l6ZV90IHZpc19kYXRhX2NvdW50X3ByaW1fc2VjKHN0cnVjdCBobGlzdF9oZWFkICppZl9saXN0KQoreworCXN0cnVjdCBpZl9saXN0X2VudHJ5ICplbnRyeTsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqcG9zOworCXNpemVfdCBjb3VudCA9IDA7CisKKwlobGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgcG9zLCBpZl9saXN0LCBsaXN0KSB7CisJCWlmIChlbnRyeS0+cHJpbWFyeSkKKwkJCWNvdW50ICs9IDk7CisJCWVsc2UKKwkJCWNvdW50ICs9IDIzOworCX0KKworCXJldHVybiBjb3VudDsKK30KKworLyogcmVhZCBhbiBlbnRyeSAgKi8KK3N0YXRpYyBzc2l6ZV90IHZpc19kYXRhX3JlYWRfZW50cnkoY2hhciAqYnVmZiwgc3RydWN0IHZpc19pbmZvX2VudHJ5ICplbnRyeSwKKwkJCQkgICB1aW50OF90ICpzcmMsIGJvb2wgcHJpbWFyeSkKK3sKKwkvKiBtYXhpbWFsIGxlbmd0aDogbWF4KDQrMTcrMiwgMysxNysxKzMrMikgPT0gMjYgKi8KKwlpZiAocHJpbWFyeSAmJiBlbnRyeS0+cXVhbGl0eSA9PSAwKQorCQlyZXR1cm4gc3ByaW50ZihidWZmLCAiSE5BICVwTSwgIiwgZW50cnktPmRlc3QpOworCWVsc2UgaWYgKGNvbXBhcmVfb3JpZyhlbnRyeS0+c3JjLCBzcmMpKQorCQlyZXR1cm4gc3ByaW50ZihidWZmLCAiVFEgJXBNICVkLCAiLCBlbnRyeS0+ZGVzdCwKKwkJCSAgICAgICBlbnRyeS0+cXVhbGl0eSk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHZpc19zZXFfcHJpbnRfdGV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqb2Zmc2V0KQoreworCXN0cnVjdCBobGlzdF9ub2RlICp3YWxrOworCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkOworCXN0cnVjdCBlbGVtZW50X3QgKmJ1Y2tldDsKKwlzdHJ1Y3QgdmlzX2luZm8gKmluZm87CisJc3RydWN0IHZpc19wYWNrZXQgKnBhY2tldDsKKwlzdHJ1Y3QgdmlzX2luZm9fZW50cnkgKmVudHJpZXM7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilzZXEtPnByaXZhdGU7CisJc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KG5ldF9kZXYpOworCXN0cnVjdCBoYXNodGFibGVfdCAqaGFzaCA9IGJhdF9wcml2LT52aXNfaGFzaDsKKwlITElTVF9IRUFEKHZpc19pZl9saXN0KTsKKwlzdHJ1Y3QgaWZfbGlzdF9lbnRyeSAqZW50cnk7CisJc3RydWN0IGhsaXN0X25vZGUgKnBvcywgKm47CisJaW50IGksIGo7CisJaW50IHZpc19zZXJ2ZXIgPSBhdG9taWNfcmVhZCgmYmF0X3ByaXYtPnZpc19tb2RlKTsKKwlzaXplX3QgYnVmZl9wb3MsIGJ1Zl9zaXplOworCWNoYXIgKmJ1ZmY7CisJaW50IGNvbXBhcmU7CisKKwlpZiAoKCFiYXRfcHJpdi0+cHJpbWFyeV9pZikgfHwKKwkgICAgKHZpc19zZXJ2ZXIgPT0gVklTX1RZUEVfQ0xJRU5UX1VQREFURSkpCisJCXJldHVybiAwOworCisJYnVmX3NpemUgPSAxOworCS8qIEVzdGltYXRlIGxlbmd0aCAqLworCXNwaW5fbG9ja19iaCgmYmF0X3ByaXYtPnZpc19oYXNoX2xvY2spOworCWZvciAoaSA9IDA7IGkgPCBoYXNoLT5zaXplOyBpKyspIHsKKwkJaGVhZCA9ICZoYXNoLT50YWJsZVtpXTsKKworCQlobGlzdF9mb3JfZWFjaF9lbnRyeShidWNrZXQsIHdhbGssIGhlYWQsIGhsaXN0KSB7CisJCQlpbmZvID0gYnVja2V0LT5kYXRhOworCQkJcGFja2V0ID0gKHN0cnVjdCB2aXNfcGFja2V0ICopaW5mby0+c2tiX3BhY2tldC0+ZGF0YTsKKwkJCWVudHJpZXMgPSAoc3RydWN0IHZpc19pbmZvX2VudHJ5ICopCisJCQkJKChjaGFyICopcGFja2V0ICsgc2l6ZW9mKHN0cnVjdCB2aXNfcGFja2V0KSk7CisKKwkJCWZvciAoaiA9IDA7IGogPCBwYWNrZXQtPmVudHJpZXM7IGorKykgeworCQkJCWlmIChlbnRyaWVzW2pdLnF1YWxpdHkgPT0gMCkKKwkJCQkJY29udGludWU7CisJCQkJY29tcGFyZSA9CisJCQkJIGNvbXBhcmVfb3JpZyhlbnRyaWVzW2pdLnNyYywgcGFja2V0LT52aXNfb3JpZyk7CisJCQkJdmlzX2RhdGFfaW5zZXJ0X2ludGVyZmFjZShlbnRyaWVzW2pdLnNyYywKKwkJCQkJCQkgICZ2aXNfaWZfbGlzdCwKKwkJCQkJCQkgIGNvbXBhcmUpOworCQkJfQorCisJCQlobGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgcG9zLCAmdmlzX2lmX2xpc3QsIGxpc3QpIHsKKwkJCQlidWZfc2l6ZSArPSAxOCArIDI2ICogcGFja2V0LT5lbnRyaWVzOworCisJCQkJLyogYWRkIHByaW1hcnkvc2Vjb25kYXJ5IHJlY29yZHMgKi8KKwkJCQlpZiAoY29tcGFyZV9vcmlnKGVudHJ5LT5hZGRyLCBwYWNrZXQtPnZpc19vcmlnKSkKKwkJCQkJYnVmX3NpemUgKz0KKwkJCQkJICB2aXNfZGF0YV9jb3VudF9wcmltX3NlYygmdmlzX2lmX2xpc3QpOworCisJCQkJYnVmX3NpemUgKz0gMTsKKwkJCX0KKworCQkJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlbnRyeSwgcG9zLCBuLCAmdmlzX2lmX2xpc3QsCisJCQkJCQkgIGxpc3QpIHsKKwkJCQlobGlzdF9kZWwoJmVudHJ5LT5saXN0KTsKKwkJCQlrZnJlZShlbnRyeSk7CisJCQl9CisJCX0KKwl9CisKKwlidWZmID0ga21hbGxvYyhidWZfc2l6ZSwgR0ZQX0FUT01JQyk7CisJaWYgKCFidWZmKSB7CisJCXNwaW5fdW5sb2NrX2JoKCZiYXRfcHJpdi0+dmlzX2hhc2hfbG9jayk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlidWZmWzBdID0gJ1wwJzsKKwlidWZmX3BvcyA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgaGFzaC0+c2l6ZTsgaSsrKSB7CisJCWhlYWQgPSAmaGFzaC0+dGFibGVbaV07CisKKwkJaGxpc3RfZm9yX2VhY2hfZW50cnkoYnVja2V0LCB3YWxrLCBoZWFkLCBobGlzdCkgeworCQkJaW5mbyA9IGJ1Y2tldC0+ZGF0YTsKKwkJCXBhY2tldCA9IChzdHJ1Y3QgdmlzX3BhY2tldCAqKWluZm8tPnNrYl9wYWNrZXQtPmRhdGE7CisJCQllbnRyaWVzID0gKHN0cnVjdCB2aXNfaW5mb19lbnRyeSAqKQorCQkJCSgoY2hhciAqKXBhY2tldCArIHNpemVvZihzdHJ1Y3QgdmlzX3BhY2tldCkpOworCisJCQlmb3IgKGogPSAwOyBqIDwgcGFja2V0LT5lbnRyaWVzOyBqKyspIHsKKwkJCQlpZiAoZW50cmllc1tqXS5xdWFsaXR5ID09IDApCisJCQkJCWNvbnRpbnVlOworCQkJCWNvbXBhcmUgPQorCQkJCSBjb21wYXJlX29yaWcoZW50cmllc1tqXS5zcmMsIHBhY2tldC0+dmlzX29yaWcpOworCQkJCXZpc19kYXRhX2luc2VydF9pbnRlcmZhY2UoZW50cmllc1tqXS5zcmMsCisJCQkJCQkJICAmdmlzX2lmX2xpc3QsCisJCQkJCQkJICBjb21wYXJlKTsKKwkJCX0KKworCQkJaGxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksIHBvcywgJnZpc19pZl9saXN0LCBsaXN0KSB7CisJCQkJYnVmZl9wb3MgKz0gc3ByaW50ZihidWZmICsgYnVmZl9wb3MsICIlcE0sIiwKKwkJCQkJCWVudHJ5LT5hZGRyKTsKKworCQkJCWZvciAoaSA9IDA7IGkgPCBwYWNrZXQtPmVudHJpZXM7IGkrKykKKwkJCQkJYnVmZl9wb3MgKz0gdmlzX2RhdGFfcmVhZF9lbnRyeSgKKwkJCQkJCQlidWZmICsgYnVmZl9wb3MsCisJCQkJCQkJJmVudHJpZXNbaV0sCisJCQkJCQkJZW50cnktPmFkZHIsCisJCQkJCQkJZW50cnktPnByaW1hcnkpOworCisJCQkJLyogYWRkIHByaW1hcnkvc2Vjb25kYXJ5IHJlY29yZHMgKi8KKwkJCQlpZiAoY29tcGFyZV9vcmlnKGVudHJ5LT5hZGRyLCBwYWNrZXQtPnZpc19vcmlnKSkKKwkJCQkJYnVmZl9wb3MgKz0KKwkJCQkJIHZpc19kYXRhX3JlYWRfcHJpbV9zZWMoYnVmZiArIGJ1ZmZfcG9zLAorCQkJCQkJCQkmdmlzX2lmX2xpc3QpOworCisJCQkJYnVmZl9wb3MgKz0gc3ByaW50ZihidWZmICsgYnVmZl9wb3MsICJcbiIpOworCQkJfQorCisJCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5LCBwb3MsIG4sICZ2aXNfaWZfbGlzdCwKKwkJCQkJCSAgbGlzdCkgeworCQkJCWhsaXN0X2RlbCgmZW50cnktPmxpc3QpOworCQkJCWtmcmVlKGVudHJ5KTsKKwkJCX0KKwkJfQorCX0KKworCXNwaW5fdW5sb2NrX2JoKCZiYXRfcHJpdi0+dmlzX2hhc2hfbG9jayk7CisKKwlzZXFfcHJpbnRmKHNlcSwgIiVzIiwgYnVmZik7CisJa2ZyZWUoYnVmZik7CisKKwlyZXR1cm4gMDsKK30KKworLyogYWRkIHRoZSBpbmZvIHBhY2tldCB0byB0aGUgc2VuZCBsaXN0LCBpZiBpdCB3YXMgbm90CisgKiBhbHJlYWR5IGxpbmtlZCBpbi4gKi8KK3N0YXRpYyB2b2lkIHNlbmRfbGlzdF9hZGQoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiwgc3RydWN0IHZpc19pbmZvICppbmZvKQoreworCWlmIChsaXN0X2VtcHR5KCZpbmZvLT5zZW5kX2xpc3QpKSB7CisJCWtyZWZfZ2V0KCZpbmZvLT5yZWZjb3VudCk7CisJCWxpc3RfYWRkX3RhaWwoJmluZm8tPnNlbmRfbGlzdCwgJmJhdF9wcml2LT52aXNfc2VuZF9saXN0KTsKKwl9Cit9CisKKy8qIGRlbGV0ZSB0aGUgaW5mbyBwYWNrZXQgZnJvbSB0aGUgc2VuZCBsaXN0LCBpZiBpdCB3YXMKKyAqIGxpbmtlZCBpbi4gKi8KK3N0YXRpYyB2b2lkIHNlbmRfbGlzdF9kZWwoc3RydWN0IHZpc19pbmZvICppbmZvKQoreworCWlmICghbGlzdF9lbXB0eSgmaW5mby0+c2VuZF9saXN0KSkgeworCQlsaXN0X2RlbF9pbml0KCZpbmZvLT5zZW5kX2xpc3QpOworCQlrcmVmX3B1dCgmaW5mby0+cmVmY291bnQsIGZyZWVfaW5mbyk7CisJfQorfQorCisvKiB0cmllcyB0byBhZGQgb25lIGVudHJ5IHRvIHRoZSByZWNlaXZlIGxpc3QuICovCitzdGF0aWMgdm9pZCByZWN2X2xpc3RfYWRkKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYsCisJCQkgIHN0cnVjdCBsaXN0X2hlYWQgKnJlY3ZfbGlzdCwgY2hhciAqbWFjKQoreworCXN0cnVjdCByZWN2bGlzdF9ub2RlICplbnRyeTsKKworCWVudHJ5ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHJlY3ZsaXN0X25vZGUpLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWVudHJ5KQorCQlyZXR1cm47CisKKwltZW1jcHkoZW50cnktPm1hYywgbWFjLCBFVEhfQUxFTik7CisJc3Bpbl9sb2NrX2JoKCZiYXRfcHJpdi0+dmlzX2xpc3RfbG9jayk7CisJbGlzdF9hZGRfdGFpbCgmZW50cnktPmxpc3QsIHJlY3ZfbGlzdCk7CisJc3Bpbl91bmxvY2tfYmgoJmJhdF9wcml2LT52aXNfbGlzdF9sb2NrKTsKK30KKworLyogcmV0dXJucyAxIGlmIHRoaXMgbWFjIGlzIGluIHRoZSByZWN2X2xpc3QgKi8KK3N0YXRpYyBpbnQgcmVjdl9saXN0X2lzX2luKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYsCisJCQkgICBzdHJ1Y3QgbGlzdF9oZWFkICpyZWN2X2xpc3QsIGNoYXIgKm1hYykKK3sKKwlzdHJ1Y3QgcmVjdmxpc3Rfbm9kZSAqZW50cnk7CisKKwlzcGluX2xvY2tfYmgoJmJhdF9wcml2LT52aXNfbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCByZWN2X2xpc3QsIGxpc3QpIHsKKwkJaWYgKG1lbWNtcChlbnRyeS0+bWFjLCBtYWMsIEVUSF9BTEVOKSA9PSAwKSB7CisJCQlzcGluX3VubG9ja19iaCgmYmF0X3ByaXYtPnZpc19saXN0X2xvY2spOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfYmgoJmJhdF9wcml2LT52aXNfbGlzdF9sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworLyogdHJ5IHRvIGFkZCB0aGUgcGFja2V0IHRvIHRoZSB2aXNfaGFzaC4gcmV0dXJuIE5VTEwgaWYgaW52YWxpZCAoZS5nLiB0b28gb2xkLAorICogYnJva2VuLi4gKS4JdmlzIGhhc2ggbXVzdCBiZSBsb2NrZWQgb3V0c2lkZS4gIGlzX25ldyBpcyBzZXQgd2hlbiB0aGUgcGFja2V0CisgKiBpcyBuZXdlciB0aGFuIG9sZCBlbnRyaWVzIGluIHRoZSBoYXNoLiAqLworc3RhdGljIHN0cnVjdCB2aXNfaW5mbyAqYWRkX3BhY2tldChzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2LAorCQkJCSAgIHN0cnVjdCB2aXNfcGFja2V0ICp2aXNfcGFja2V0LAorCQkJCSAgIGludCB2aXNfaW5mb19sZW4sIGludCAqaXNfbmV3LAorCQkJCSAgIGludCBtYWtlX2Jyb2FkY2FzdCkKK3sKKwlzdHJ1Y3QgdmlzX2luZm8gKmluZm8sICpvbGRfaW5mbzsKKwlzdHJ1Y3QgdmlzX3BhY2tldCAqc2VhcmNoX3BhY2tldCwgKm9sZF9wYWNrZXQ7CisJc3RydWN0IHZpc19pbmZvIHNlYXJjaF9lbGVtOworCXN0cnVjdCB2aXNfcGFja2V0ICpwYWNrZXQ7CisJaW50IGhhc2hfYWRkZWQ7CisKKwkqaXNfbmV3ID0gMDsKKwkvKiBzYW5pdHkgY2hlY2sgKi8KKwlpZiAoIWJhdF9wcml2LT52aXNfaGFzaCkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBzZWUgaWYgdGhlIHBhY2tldCBpcyBhbHJlYWR5IGluIHZpc19oYXNoICovCisJc2VhcmNoX2VsZW0uc2tiX3BhY2tldCA9IGRldl9hbGxvY19za2Ioc2l6ZW9mKHN0cnVjdCB2aXNfcGFja2V0KSk7CisJaWYgKCFzZWFyY2hfZWxlbS5za2JfcGFja2V0KQorCQlyZXR1cm4gTlVMTDsKKwlzZWFyY2hfcGFja2V0ID0gKHN0cnVjdCB2aXNfcGFja2V0ICopc2tiX3B1dChzZWFyY2hfZWxlbS5za2JfcGFja2V0LAorCQkJCQkJICAgICBzaXplb2Yoc3RydWN0IHZpc19wYWNrZXQpKTsKKworCW1lbWNweShzZWFyY2hfcGFja2V0LT52aXNfb3JpZywgdmlzX3BhY2tldC0+dmlzX29yaWcsIEVUSF9BTEVOKTsKKwlvbGRfaW5mbyA9IGhhc2hfZmluZChiYXRfcHJpdi0+dmlzX2hhc2gsIHZpc19pbmZvX2NtcCwgdmlzX2luZm9fY2hvb3NlLAorCQkJICAgICAmc2VhcmNoX2VsZW0pOworCWtmcmVlX3NrYihzZWFyY2hfZWxlbS5za2JfcGFja2V0KTsKKworCWlmIChvbGRfaW5mbykgeworCQlvbGRfcGFja2V0ID0gKHN0cnVjdCB2aXNfcGFja2V0ICopb2xkX2luZm8tPnNrYl9wYWNrZXQtPmRhdGE7CisJCWlmICghc2VxX2FmdGVyKG50b2hsKHZpc19wYWNrZXQtPnNlcW5vKSwKKwkJCSAgICAgICBudG9obChvbGRfcGFja2V0LT5zZXFubykpKSB7CisJCQlpZiAob2xkX3BhY2tldC0+c2Vxbm8gPT0gdmlzX3BhY2tldC0+c2Vxbm8pIHsKKwkJCQlyZWN2X2xpc3RfYWRkKGJhdF9wcml2LCAmb2xkX2luZm8tPnJlY3ZfbGlzdCwKKwkJCQkJICAgICAgdmlzX3BhY2tldC0+c2VuZGVyX29yaWcpOworCQkJCXJldHVybiBvbGRfaW5mbzsKKwkJCX0gZWxzZSB7CisJCQkJLyogbmV3ZXIgcGFja2V0IGlzIGFscmVhZHkgaW4gaGFzaC4gKi8KKwkJCQlyZXR1cm4gTlVMTDsKKwkJCX0KKwkJfQorCQkvKiByZW1vdmUgb2xkIGVudHJ5ICovCisJCWhhc2hfcmVtb3ZlKGJhdF9wcml2LT52aXNfaGFzaCwgdmlzX2luZm9fY21wLCB2aXNfaW5mb19jaG9vc2UsCisJCQkgICAgb2xkX2luZm8pOworCQlzZW5kX2xpc3RfZGVsKG9sZF9pbmZvKTsKKwkJa3JlZl9wdXQoJm9sZF9pbmZvLT5yZWZjb3VudCwgZnJlZV9pbmZvKTsKKwl9CisKKwlpbmZvID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHZpc19pbmZvKSwgR0ZQX0FUT01JQyk7CisJaWYgKCFpbmZvKQorCQlyZXR1cm4gTlVMTDsKKworCWluZm8tPnNrYl9wYWNrZXQgPSBkZXZfYWxsb2Nfc2tiKHNpemVvZihzdHJ1Y3QgdmlzX3BhY2tldCkgKworCQkJCQkgdmlzX2luZm9fbGVuICsgc2l6ZW9mKHN0cnVjdCBldGhoZHIpKTsKKwlpZiAoIWluZm8tPnNrYl9wYWNrZXQpIHsKKwkJa2ZyZWUoaW5mbyk7CisJCXJldHVybiBOVUxMOworCX0KKwlza2JfcmVzZXJ2ZShpbmZvLT5za2JfcGFja2V0LCBzaXplb2Yoc3RydWN0IGV0aGhkcikpOworCXBhY2tldCA9IChzdHJ1Y3QgdmlzX3BhY2tldCAqKXNrYl9wdXQoaW5mby0+c2tiX3BhY2tldCwKKwkJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCB2aXNfcGFja2V0KSArCisJCQkJCSAgICAgIHZpc19pbmZvX2xlbik7CisKKwlrcmVmX2luaXQoJmluZm8tPnJlZmNvdW50KTsKKwlJTklUX0xJU1RfSEVBRCgmaW5mby0+c2VuZF9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmaW5mby0+cmVjdl9saXN0KTsKKwlpbmZvLT5maXJzdF9zZWVuID0gamlmZmllczsKKwlpbmZvLT5iYXRfcHJpdiA9IGJhdF9wcml2OworCW1lbWNweShwYWNrZXQsIHZpc19wYWNrZXQsIHNpemVvZihzdHJ1Y3QgdmlzX3BhY2tldCkgKyB2aXNfaW5mb19sZW4pOworCisJLyogaW5pdGlhbGl6ZSBhbmQgYWRkIG5ldyBwYWNrZXQuICovCisJKmlzX25ldyA9IDE7CisKKwkvKiBNYWtlIGl0IGEgYnJvYWRjYXN0IHBhY2tldCwgaWYgcmVxdWlyZWQgKi8KKwlpZiAobWFrZV9icm9hZGNhc3QpCisJCW1lbWNweShwYWNrZXQtPnRhcmdldF9vcmlnLCBicm9hZGNhc3RfYWRkciwgRVRIX0FMRU4pOworCisJLyogcmVwYWlyIGlmIGVudHJpZXMgaXMgbG9uZ2VyIHRoYW4gcGFja2V0LiAqLworCWlmIChwYWNrZXQtPmVudHJpZXMgKiBzaXplb2Yoc3RydWN0IHZpc19pbmZvX2VudHJ5KSA+IHZpc19pbmZvX2xlbikKKwkJcGFja2V0LT5lbnRyaWVzID0gdmlzX2luZm9fbGVuIC8gc2l6ZW9mKHN0cnVjdCB2aXNfaW5mb19lbnRyeSk7CisKKwlyZWN2X2xpc3RfYWRkKGJhdF9wcml2LCAmaW5mby0+cmVjdl9saXN0LCBwYWNrZXQtPnNlbmRlcl9vcmlnKTsKKworCS8qIHRyeSB0byBhZGQgaXQgKi8KKwloYXNoX2FkZGVkID0gaGFzaF9hZGQoYmF0X3ByaXYtPnZpc19oYXNoLCB2aXNfaW5mb19jbXAsIHZpc19pbmZvX2Nob29zZSwKKwkJCSAgICAgIGluZm8pOworCWlmIChoYXNoX2FkZGVkIDwgMCkgeworCQkvKiBkaWQgbm90IHdvcmsgKGZvciBzb21lIHJlYXNvbikgKi8KKwkJa3JlZl9wdXQoJm9sZF9pbmZvLT5yZWZjb3VudCwgZnJlZV9pbmZvKTsKKwkJaW5mbyA9IE5VTEw7CisJfQorCisJcmV0dXJuIGluZm87Cit9CisKKy8qIGhhbmRsZSB0aGUgc2VydmVyIHN5bmMgcGFja2V0LCBmb3J3YXJkIGlmIG5lZWRlZC4gKi8KK3ZvaWQgcmVjZWl2ZV9zZXJ2ZXJfc3luY19wYWNrZXQoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiwKKwkJCQlzdHJ1Y3QgdmlzX3BhY2tldCAqdmlzX3BhY2tldCwKKwkJCQlpbnQgdmlzX2luZm9fbGVuKQoreworCXN0cnVjdCB2aXNfaW5mbyAqaW5mbzsKKwlpbnQgaXNfbmV3LCBtYWtlX2Jyb2FkY2FzdDsKKwlpbnQgdmlzX3NlcnZlciA9IGF0b21pY19yZWFkKCZiYXRfcHJpdi0+dmlzX21vZGUpOworCisJbWFrZV9icm9hZGNhc3QgPSAodmlzX3NlcnZlciA9PSBWSVNfVFlQRV9TRVJWRVJfU1lOQyk7CisKKwlzcGluX2xvY2tfYmgoJmJhdF9wcml2LT52aXNfaGFzaF9sb2NrKTsKKwlpbmZvID0gYWRkX3BhY2tldChiYXRfcHJpdiwgdmlzX3BhY2tldCwgdmlzX2luZm9fbGVuLAorCQkJICAmaXNfbmV3LCBtYWtlX2Jyb2FkY2FzdCk7CisJaWYgKCFpbmZvKQorCQlnb3RvIGVuZDsKKworCS8qIG9ubHkgaWYgd2UgYXJlIHNlcnZlciBvdXJzZWx2ZXMgYW5kIHBhY2tldCBpcyBuZXdlciB0aGFuIHRoZSBvbmUgaW4KKwkgKiBoYXNoLiovCisJaWYgKHZpc19zZXJ2ZXIgPT0gVklTX1RZUEVfU0VSVkVSX1NZTkMgJiYgaXNfbmV3KQorCQlzZW5kX2xpc3RfYWRkKGJhdF9wcml2LCBpbmZvKTsKK2VuZDoKKwlzcGluX3VubG9ja19iaCgmYmF0X3ByaXYtPnZpc19oYXNoX2xvY2spOworfQorCisvKiBoYW5kbGUgYW4gaW5jb21pbmcgY2xpZW50IHVwZGF0ZSBwYWNrZXQgYW5kIHNjaGVkdWxlIGZvcndhcmQgaWYgbmVlZGVkLiAqLwordm9pZCByZWNlaXZlX2NsaWVudF91cGRhdGVfcGFja2V0KHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYsCisJCQkJICBzdHJ1Y3QgdmlzX3BhY2tldCAqdmlzX3BhY2tldCwKKwkJCQkgIGludCB2aXNfaW5mb19sZW4pCit7CisJc3RydWN0IHZpc19pbmZvICppbmZvOworCXN0cnVjdCB2aXNfcGFja2V0ICpwYWNrZXQ7CisJaW50IGlzX25ldzsKKwlpbnQgdmlzX3NlcnZlciA9IGF0b21pY19yZWFkKCZiYXRfcHJpdi0+dmlzX21vZGUpOworCWludCBhcmVfdGFyZ2V0ID0gMDsKKworCS8qIGNsaWVudHMgc2hhbGwgbm90IGJyb2FkY2FzdC4gKi8KKwlpZiAoaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIodmlzX3BhY2tldC0+dGFyZ2V0X29yaWcpKQorCQlyZXR1cm47CisKKwkvKiBBcmUgd2UgdGhlIHRhcmdldCBmb3IgdGhpcyBWSVMgcGFja2V0PyAqLworCWlmICh2aXNfc2VydmVyID09IFZJU19UWVBFX1NFUlZFUl9TWU5DCSYmCisJICAgIGlzX215X21hYyh2aXNfcGFja2V0LT50YXJnZXRfb3JpZykpCisJCWFyZV90YXJnZXQgPSAxOworCisJc3Bpbl9sb2NrX2JoKCZiYXRfcHJpdi0+dmlzX2hhc2hfbG9jayk7CisJaW5mbyA9IGFkZF9wYWNrZXQoYmF0X3ByaXYsIHZpc19wYWNrZXQsIHZpc19pbmZvX2xlbiwKKwkJCSAgJmlzX25ldywgYXJlX3RhcmdldCk7CisKKwlpZiAoIWluZm8pCisJCWdvdG8gZW5kOworCS8qIG5vdGUgdGhhdCBvdXRkYXRlZCBwYWNrZXRzIHdpbGwgYmUgZHJvcHBlZCBhdCB0aGlzIHBvaW50LiAqLworCisJcGFja2V0ID0gKHN0cnVjdCB2aXNfcGFja2V0ICopaW5mby0+c2tiX3BhY2tldC0+ZGF0YTsKKworCS8qIHNlbmQgb25seSBpZiB3ZSdyZSB0aGUgdGFyZ2V0IHNlcnZlciBvciAuLi4gKi8KKwlpZiAoYXJlX3RhcmdldCAmJiBpc19uZXcpIHsKKwkJcGFja2V0LT52aXNfdHlwZSA9IFZJU19UWVBFX1NFUlZFUl9TWU5DOwkvKiB1cGdyYWRlISAqLworCQlzZW5kX2xpc3RfYWRkKGJhdF9wcml2LCBpbmZvKTsKKworCQkvKiAuLi4gd2UncmUgbm90IHRoZSByZWNpcGllbnQgKGFuZCB0aHVzIG5lZWQgdG8gZm9yd2FyZCkuICovCisJfSBlbHNlIGlmICghaXNfbXlfbWFjKHBhY2tldC0+dGFyZ2V0X29yaWcpKSB7CisJCXNlbmRfbGlzdF9hZGQoYmF0X3ByaXYsIGluZm8pOworCX0KKworZW5kOgorCXNwaW5fdW5sb2NrX2JoKCZiYXRfcHJpdi0+dmlzX2hhc2hfbG9jayk7Cit9CisKKy8qIFdhbGsgdGhlIG9yaWdpbmF0b3JzIGFuZCBmaW5kIHRoZSBWSVMgc2VydmVyIHdpdGggdGhlIGJlc3QgdHEuIFNldCB0aGUgcGFja2V0CisgKiBhZGRyZXNzIHRvIGl0cyBhZGRyZXNzIGFuZCByZXR1cm4gdGhlIGJlc3RfdHEuCisgKgorICogTXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgb3JpZ2luYXRvciBoYXNoIGxvY2tlZCAqLworc3RhdGljIGludCBmaW5kX2Jlc3RfdmlzX3NlcnZlcihzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2LAorCQkJCXN0cnVjdCB2aXNfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgaGFzaHRhYmxlX3QgKmhhc2ggPSBiYXRfcHJpdi0+b3JpZ19oYXNoOworCXN0cnVjdCBobGlzdF9ub2RlICp3YWxrOworCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkOworCXN0cnVjdCBlbGVtZW50X3QgKmJ1Y2tldDsKKwlzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGU7CisJc3RydWN0IHZpc19wYWNrZXQgKnBhY2tldDsKKwlpbnQgYmVzdF90cSA9IC0xLCBpOworCisJcGFja2V0ID0gKHN0cnVjdCB2aXNfcGFja2V0ICopaW5mby0+c2tiX3BhY2tldC0+ZGF0YTsKKworCWZvciAoaSA9IDA7IGkgPCBoYXNoLT5zaXplOyBpKyspIHsKKwkJaGVhZCA9ICZoYXNoLT50YWJsZVtpXTsKKworCQlobGlzdF9mb3JfZWFjaF9lbnRyeShidWNrZXQsIHdhbGssIGhlYWQsIGhsaXN0KSB7CisJCQlvcmlnX25vZGUgPSBidWNrZXQtPmRhdGE7CisJCQlpZiAoKG9yaWdfbm9kZSkgJiYgKG9yaWdfbm9kZS0+cm91dGVyKSAmJgorCQkJKG9yaWdfbm9kZS0+ZmxhZ3MgJiBWSVNfU0VSVkVSKSAmJgorCQkJKG9yaWdfbm9kZS0+cm91dGVyLT50cV9hdmcgPiBiZXN0X3RxKSkgeworCQkJCWJlc3RfdHEgPSBvcmlnX25vZGUtPnJvdXRlci0+dHFfYXZnOworCQkJCW1lbWNweShwYWNrZXQtPnRhcmdldF9vcmlnLCBvcmlnX25vZGUtPm9yaWcsCisJCQkJICAgICAgIEVUSF9BTEVOKTsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiBiZXN0X3RxOworfQorCisvKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmlzIHBhY2tldCBpcyBmdWxsLiAqLworc3RhdGljIGJvb2wgdmlzX3BhY2tldF9mdWxsKHN0cnVjdCB2aXNfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgdmlzX3BhY2tldCAqcGFja2V0OworCXBhY2tldCA9IChzdHJ1Y3QgdmlzX3BhY2tldCAqKWluZm8tPnNrYl9wYWNrZXQtPmRhdGE7CisKKwlpZiAoTUFYX1ZJU19QQUNLRVRfU0laRSAvIHNpemVvZihzdHJ1Y3QgdmlzX2luZm9fZW50cnkpCisJCTwgcGFja2V0LT5lbnRyaWVzICsgMSkKKwkJcmV0dXJuIHRydWU7CisJcmV0dXJuIGZhbHNlOworfQorCisvKiBnZW5lcmF0ZXMgYSBwYWNrZXQgb2Ygb3duIHZpcyBkYXRhLAorICogcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0xIGlmIG5vIHBhY2tldCBjb3VsZCBiZSBnZW5lcmF0ZWQgKi8KK3N0YXRpYyBpbnQgZ2VuZXJhdGVfdmlzX3BhY2tldChzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2KQoreworCXN0cnVjdCBoYXNodGFibGVfdCAqaGFzaCA9IGJhdF9wcml2LT5vcmlnX2hhc2g7CisJc3RydWN0IGhsaXN0X25vZGUgKndhbGs7CisJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7CisJc3RydWN0IGVsZW1lbnRfdCAqYnVja2V0OworCXN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZTsKKwlzdHJ1Y3QgbmVpZ2hfbm9kZSAqbmVpZ2hfbm9kZTsKKwlzdHJ1Y3QgdmlzX2luZm8gKmluZm8gPSAoc3RydWN0IHZpc19pbmZvICopYmF0X3ByaXYtPm15X3Zpc19pbmZvOworCXN0cnVjdCB2aXNfcGFja2V0ICpwYWNrZXQgPSAoc3RydWN0IHZpc19wYWNrZXQgKilpbmZvLT5za2JfcGFja2V0LT5kYXRhOworCXN0cnVjdCB2aXNfaW5mb19lbnRyeSAqZW50cnk7CisJc3RydWN0IGhuYV9sb2NhbF9lbnRyeSAqaG5hX2xvY2FsX2VudHJ5OworCWludCBiZXN0X3RxID0gLTEsIGk7CisKKwlpbmZvLT5maXJzdF9zZWVuID0gamlmZmllczsKKwlwYWNrZXQtPnZpc190eXBlID0gYXRvbWljX3JlYWQoJmJhdF9wcml2LT52aXNfbW9kZSk7CisKKwlzcGluX2xvY2tfYmgoJmJhdF9wcml2LT5vcmlnX2hhc2hfbG9jayk7CisJbWVtY3B5KHBhY2tldC0+dGFyZ2V0X29yaWcsIGJyb2FkY2FzdF9hZGRyLCBFVEhfQUxFTik7CisJcGFja2V0LT50dGwgPSBUVEw7CisJcGFja2V0LT5zZXFubyA9IGh0b25sKG50b2hsKHBhY2tldC0+c2Vxbm8pICsgMSk7CisJcGFja2V0LT5lbnRyaWVzID0gMDsKKwlza2JfdHJpbShpbmZvLT5za2JfcGFja2V0LCBzaXplb2Yoc3RydWN0IHZpc19wYWNrZXQpKTsKKworCWlmIChwYWNrZXQtPnZpc190eXBlID09IFZJU19UWVBFX0NMSUVOVF9VUERBVEUpIHsKKwkJYmVzdF90cSA9IGZpbmRfYmVzdF92aXNfc2VydmVyKGJhdF9wcml2LCBpbmZvKTsKKworCQlpZiAoYmVzdF90cSA8IDApIHsKKwkJCXNwaW5fdW5sb2NrX2JoKCZiYXRfcHJpdi0+b3JpZ19oYXNoX2xvY2spOworCQkJcmV0dXJuIC0xOworCQl9CisJfQorCisJZm9yIChpID0gMDsgaSA8IGhhc2gtPnNpemU7IGkrKykgeworCQloZWFkID0gJmhhc2gtPnRhYmxlW2ldOworCisJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGJ1Y2tldCwgd2FsaywgaGVhZCwgaGxpc3QpIHsKKwkJCW9yaWdfbm9kZSA9IGJ1Y2tldC0+ZGF0YTsKKwkJCW5laWdoX25vZGUgPSBvcmlnX25vZGUtPnJvdXRlcjsKKworCQkJaWYgKCFuZWlnaF9ub2RlKQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAoIWNvbXBhcmVfb3JpZyhuZWlnaF9ub2RlLT5hZGRyLCBvcmlnX25vZGUtPm9yaWcpKQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAobmVpZ2hfbm9kZS0+aWZfaW5jb21pbmctPmlmX3N0YXR1cyAhPSBJRl9BQ1RJVkUpCisJCQkJY29udGludWU7CisKKwkJCWlmIChuZWlnaF9ub2RlLT50cV9hdmcgPCAxKQorCQkJCWNvbnRpbnVlOworCisJCQkvKiBmaWxsIG9uZSBlbnRyeSBpbnRvIGJ1ZmZlci4gKi8KKwkJCWVudHJ5ID0gKHN0cnVjdCB2aXNfaW5mb19lbnRyeSAqKQorCQkJCSAgICAgIHNrYl9wdXQoaW5mby0+c2tiX3BhY2tldCwgc2l6ZW9mKCplbnRyeSkpOworCQkJbWVtY3B5KGVudHJ5LT5zcmMsCisJCQkgICAgICAgbmVpZ2hfbm9kZS0+aWZfaW5jb21pbmctPm5ldF9kZXYtPmRldl9hZGRyLAorCQkJICAgICAgIEVUSF9BTEVOKTsKKwkJCW1lbWNweShlbnRyeS0+ZGVzdCwgb3JpZ19ub2RlLT5vcmlnLCBFVEhfQUxFTik7CisJCQllbnRyeS0+cXVhbGl0eSA9IG5laWdoX25vZGUtPnRxX2F2ZzsKKwkJCXBhY2tldC0+ZW50cmllcysrOworCisJCQlpZiAodmlzX3BhY2tldF9mdWxsKGluZm8pKSB7CisJCQkJc3Bpbl91bmxvY2tfYmgoJmJhdF9wcml2LT5vcmlnX2hhc2hfbG9jayk7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCX0KKwl9CisKKwlzcGluX3VubG9ja19iaCgmYmF0X3ByaXYtPm9yaWdfaGFzaF9sb2NrKTsKKworCWhhc2ggPSBiYXRfcHJpdi0+aG5hX2xvY2FsX2hhc2g7CisKKwlzcGluX2xvY2tfYmgoJmJhdF9wcml2LT5obmFfbGhhc2hfbG9jayk7CisJZm9yIChpID0gMDsgaSA8IGhhc2gtPnNpemU7IGkrKykgeworCQloZWFkID0gJmhhc2gtPnRhYmxlW2ldOworCisJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGJ1Y2tldCwgd2FsaywgaGVhZCwgaGxpc3QpIHsKKwkJCWhuYV9sb2NhbF9lbnRyeSA9IGJ1Y2tldC0+ZGF0YTsKKwkJCWVudHJ5ID0gKHN0cnVjdCB2aXNfaW5mb19lbnRyeSAqKQorCQkJCQlza2JfcHV0KGluZm8tPnNrYl9wYWNrZXQsCisJCQkJCQlzaXplb2YoKmVudHJ5KSk7CisJCQltZW1zZXQoZW50cnktPnNyYywgMCwgRVRIX0FMRU4pOworCQkJbWVtY3B5KGVudHJ5LT5kZXN0LCBobmFfbG9jYWxfZW50cnktPmFkZHIsIEVUSF9BTEVOKTsKKwkJCWVudHJ5LT5xdWFsaXR5ID0gMDsgLyogMCBtZWFucyBITkEgKi8KKwkJCXBhY2tldC0+ZW50cmllcysrOworCisJCQlpZiAodmlzX3BhY2tldF9mdWxsKGluZm8pKSB7CisJCQkJc3Bpbl91bmxvY2tfYmgoJmJhdF9wcml2LT5obmFfbGhhc2hfbG9jayk7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCX0KKwl9CisKKwlzcGluX3VubG9ja19iaCgmYmF0X3ByaXYtPmhuYV9saGFzaF9sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworLyogZnJlZSBvbGQgdmlzIHBhY2tldHMuIE11c3QgYmUgY2FsbGVkIHdpdGggdGhpcyB2aXNfaGFzaF9sb2NrCisgKiBoZWxkICovCitzdGF0aWMgdm9pZCBwdXJnZV92aXNfcGFja2V0cyhzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2KQoreworCWludCBpOworCXN0cnVjdCBoYXNodGFibGVfdCAqaGFzaCA9IGJhdF9wcml2LT52aXNfaGFzaDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqd2FsaywgKnNhZmU7CisJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7CisJc3RydWN0IGVsZW1lbnRfdCAqYnVja2V0OworCXN0cnVjdCB2aXNfaW5mbyAqaW5mbzsKKworCWZvciAoaSA9IDA7IGkgPCBoYXNoLT5zaXplOyBpKyspIHsKKwkJaGVhZCA9ICZoYXNoLT50YWJsZVtpXTsKKworCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGJ1Y2tldCwgd2Fsaywgc2FmZSwgaGVhZCwgaGxpc3QpIHsKKwkJCWluZm8gPSBidWNrZXQtPmRhdGE7CisKKwkJCS8qIG5ldmVyIHB1cmdlIG93biBkYXRhLiAqLworCQkJaWYgKGluZm8gPT0gYmF0X3ByaXYtPm15X3Zpc19pbmZvKQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLAorCQkJCSAgICAgICBpbmZvLT5maXJzdF9zZWVuICsgVklTX1RJTUVPVVQgKiBIWikpIHsKKwkJCQlobGlzdF9kZWwod2Fsayk7CisJCQkJa2ZyZWUoYnVja2V0KTsKKwkJCQlzZW5kX2xpc3RfZGVsKGluZm8pOworCQkJCWtyZWZfcHV0KCZpbmZvLT5yZWZjb3VudCwgZnJlZV9pbmZvKTsKKwkJCX0KKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgYnJvYWRjYXN0X3Zpc19wYWNrZXQoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiwKKwkJCQkgc3RydWN0IHZpc19pbmZvICppbmZvKQoreworCXN0cnVjdCBoYXNodGFibGVfdCAqaGFzaCA9IGJhdF9wcml2LT5vcmlnX2hhc2g7CisJc3RydWN0IGhsaXN0X25vZGUgKndhbGs7CisJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7CisJc3RydWN0IGVsZW1lbnRfdCAqYnVja2V0OworCXN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZTsKKwlzdHJ1Y3QgdmlzX3BhY2tldCAqcGFja2V0OworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGJhdG1hbl9pZiAqYmF0bWFuX2lmOworCXVpbnQ4X3QgZHN0YWRkcltFVEhfQUxFTl07CisJaW50IGk7CisKKworCXNwaW5fbG9ja19iaCgmYmF0X3ByaXYtPm9yaWdfaGFzaF9sb2NrKTsKKwlwYWNrZXQgPSAoc3RydWN0IHZpc19wYWNrZXQgKilpbmZvLT5za2JfcGFja2V0LT5kYXRhOworCisJLyogc2VuZCB0byBhbGwgcm91dGVycyBpbiByYW5nZS4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgaGFzaC0+c2l6ZTsgaSsrKSB7CisJCWhlYWQgPSAmaGFzaC0+dGFibGVbaV07CisKKwkJaGxpc3RfZm9yX2VhY2hfZW50cnkoYnVja2V0LCB3YWxrLCBoZWFkLCBobGlzdCkgeworCQkJb3JpZ19ub2RlID0gYnVja2V0LT5kYXRhOworCisJCQkvKiBpZiBpdCdzIGEgdmlzIHNlcnZlciBhbmQgcmVhY2hhYmxlLCBzZW5kIGl0LiAqLworCQkJaWYgKCghb3JpZ19ub2RlKSB8fCAoIW9yaWdfbm9kZS0+cm91dGVyKSkKKwkJCQljb250aW51ZTsKKwkJCWlmICghKG9yaWdfbm9kZS0+ZmxhZ3MgJiBWSVNfU0VSVkVSKSkKKwkJCQljb250aW51ZTsKKwkJCS8qIGRvbid0IHNlbmQgaXQgaWYgd2UgYWxyZWFkeSByZWNlaXZlZCB0aGUgcGFja2V0IGZyb20KKwkJCSogdGhpcyBub2RlLiAqLworCQkJaWYgKHJlY3ZfbGlzdF9pc19pbihiYXRfcHJpdiwgJmluZm8tPnJlY3ZfbGlzdCwKKwkJCQkJICAgIG9yaWdfbm9kZS0+b3JpZykpCisJCQkJY29udGludWU7CisKKwkJCW1lbWNweShwYWNrZXQtPnRhcmdldF9vcmlnLCBvcmlnX25vZGUtPm9yaWcsIEVUSF9BTEVOKTsKKwkJCWJhdG1hbl9pZiA9IG9yaWdfbm9kZS0+cm91dGVyLT5pZl9pbmNvbWluZzsKKwkJCW1lbWNweShkc3RhZGRyLCBvcmlnX25vZGUtPnJvdXRlci0+YWRkciwgRVRIX0FMRU4pOworCQkJc3Bpbl91bmxvY2tfYmgoJmJhdF9wcml2LT5vcmlnX2hhc2hfbG9jayk7CisKKwkJCXNrYiA9IHNrYl9jbG9uZShpbmZvLT5za2JfcGFja2V0LCBHRlBfQVRPTUlDKTsKKwkJCWlmIChza2IpCisJCQkJc2VuZF9za2JfcGFja2V0KHNrYiwgYmF0bWFuX2lmLCBkc3RhZGRyKTsKKworCQkJc3Bpbl9sb2NrX2JoKCZiYXRfcHJpdi0+b3JpZ19oYXNoX2xvY2spOworCQl9CisKKwl9CisKKwlzcGluX3VubG9ja19iaCgmYmF0X3ByaXYtPm9yaWdfaGFzaF9sb2NrKTsKK30KKworc3RhdGljIHZvaWQgdW5pY2FzdF92aXNfcGFja2V0KHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYsCisJCQkgICAgICAgc3RydWN0IHZpc19pbmZvICppbmZvKQoreworCXN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCB2aXNfcGFja2V0ICpwYWNrZXQ7CisJc3RydWN0IGJhdG1hbl9pZiAqYmF0bWFuX2lmOworCXVpbnQ4X3QgZHN0YWRkcltFVEhfQUxFTl07CisKKwlzcGluX2xvY2tfYmgoJmJhdF9wcml2LT5vcmlnX2hhc2hfbG9jayk7CisJcGFja2V0ID0gKHN0cnVjdCB2aXNfcGFja2V0ICopaW5mby0+c2tiX3BhY2tldC0+ZGF0YTsKKwlvcmlnX25vZGUgPSAoKHN0cnVjdCBvcmlnX25vZGUgKiloYXNoX2ZpbmQoYmF0X3ByaXYtPm9yaWdfaGFzaCwKKwkJCQkJCSAgIGNvbXBhcmVfb3JpZywgY2hvb3NlX29yaWcsCisJCQkJCQkgICBwYWNrZXQtPnRhcmdldF9vcmlnKSk7CisKKwlpZiAoKCFvcmlnX25vZGUpIHx8ICghb3JpZ19ub2RlLT5yb3V0ZXIpKQorCQlnb3RvIG91dDsKKworCS8qIGRvbid0IGxvY2sgd2hpbGUgc2VuZGluZyB0aGUgcGFja2V0cyAuLi4gd2UgdGhlcmVmb3JlCisJICogY29weSB0aGUgcmVxdWlyZWQgZGF0YSBiZWZvcmUgc2VuZGluZyAqLworCWJhdG1hbl9pZiA9IG9yaWdfbm9kZS0+cm91dGVyLT5pZl9pbmNvbWluZzsKKwltZW1jcHkoZHN0YWRkciwgb3JpZ19ub2RlLT5yb3V0ZXItPmFkZHIsIEVUSF9BTEVOKTsKKwlzcGluX3VubG9ja19iaCgmYmF0X3ByaXYtPm9yaWdfaGFzaF9sb2NrKTsKKworCXNrYiA9IHNrYl9jbG9uZShpbmZvLT5za2JfcGFja2V0LCBHRlBfQVRPTUlDKTsKKwlpZiAoc2tiKQorCQlzZW5kX3NrYl9wYWNrZXQoc2tiLCBiYXRtYW5faWYsIGRzdGFkZHIpOworCisJcmV0dXJuOworCitvdXQ6CisJc3Bpbl91bmxvY2tfYmgoJmJhdF9wcml2LT5vcmlnX2hhc2hfbG9jayk7Cit9CisKKy8qIG9ubHkgc2VuZCBvbmUgdmlzIHBhY2tldC4gY2FsbGVkIGZyb20gc2VuZF92aXNfcGFja2V0cygpICovCitzdGF0aWMgdm9pZCBzZW5kX3Zpc19wYWNrZXQoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiwgc3RydWN0IHZpc19pbmZvICppbmZvKQoreworCXN0cnVjdCB2aXNfcGFja2V0ICpwYWNrZXQ7CisKKwlwYWNrZXQgPSAoc3RydWN0IHZpc19wYWNrZXQgKilpbmZvLT5za2JfcGFja2V0LT5kYXRhOworCWlmIChwYWNrZXQtPnR0bCA8IDIpIHsKKwkJcHJfZGVidWcoIkVycm9yIC0gY2FuJ3Qgc2VuZCB2aXMgcGFja2V0OiB0dGwgZXhjZWVkZWRcbiIpOworCQlyZXR1cm47CisJfQorCisJbWVtY3B5KHBhY2tldC0+c2VuZGVyX29yaWcsIGJhdF9wcml2LT5wcmltYXJ5X2lmLT5uZXRfZGV2LT5kZXZfYWRkciwKKwkgICAgICAgRVRIX0FMRU4pOworCXBhY2tldC0+dHRsLS07CisKKwlpZiAoaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIocGFja2V0LT50YXJnZXRfb3JpZykpCisJCWJyb2FkY2FzdF92aXNfcGFja2V0KGJhdF9wcml2LCBpbmZvKTsKKwllbHNlCisJCXVuaWNhc3RfdmlzX3BhY2tldChiYXRfcHJpdiwgaW5mbyk7CisJcGFja2V0LT50dGwrKzsgLyogcmVzdG9yZSBUVEwgKi8KK30KKworLyogY2FsbGVkIGZyb20gdGltZXI7IHNlbmQgKGFuZCBtYXliZSBnZW5lcmF0ZSkgdmlzIHBhY2tldC4gKi8KK3N0YXRpYyB2b2lkIHNlbmRfdmlzX3BhY2tldHMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBkZWxheWVkX3dvcmsgKmRlbGF5ZWRfd29yayA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZGVsYXllZF93b3JrLCB3b3JrKTsKKwlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2ID0KKwkJY29udGFpbmVyX29mKGRlbGF5ZWRfd29yaywgc3RydWN0IGJhdF9wcml2LCB2aXNfd29yayk7CisJc3RydWN0IHZpc19pbmZvICppbmZvLCAqdGVtcDsKKworCXNwaW5fbG9ja19iaCgmYmF0X3ByaXYtPnZpc19oYXNoX2xvY2spOworCXB1cmdlX3Zpc19wYWNrZXRzKGJhdF9wcml2KTsKKworCWlmIChnZW5lcmF0ZV92aXNfcGFja2V0KGJhdF9wcml2KSA9PSAwKSB7CisJCS8qIHNjaGVkdWxlIGlmIGdlbmVyYXRpb24gd2FzIHN1Y2Nlc3NmdWwgKi8KKwkJc2VuZF9saXN0X2FkZChiYXRfcHJpdiwgYmF0X3ByaXYtPm15X3Zpc19pbmZvKTsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaW5mbywgdGVtcCwgJmJhdF9wcml2LT52aXNfc2VuZF9saXN0LAorCQkJCSBzZW5kX2xpc3QpIHsKKworCQlrcmVmX2dldCgmaW5mby0+cmVmY291bnQpOworCQlzcGluX3VubG9ja19iaCgmYmF0X3ByaXYtPnZpc19oYXNoX2xvY2spOworCisJCWlmIChiYXRfcHJpdi0+cHJpbWFyeV9pZikKKwkJCXNlbmRfdmlzX3BhY2tldChiYXRfcHJpdiwgaW5mbyk7CisKKwkJc3Bpbl9sb2NrX2JoKCZiYXRfcHJpdi0+dmlzX2hhc2hfbG9jayk7CisJCXNlbmRfbGlzdF9kZWwoaW5mbyk7CisJCWtyZWZfcHV0KCZpbmZvLT5yZWZjb3VudCwgZnJlZV9pbmZvKTsKKwl9CisJc3Bpbl91bmxvY2tfYmgoJmJhdF9wcml2LT52aXNfaGFzaF9sb2NrKTsKKwlzdGFydF92aXNfdGltZXIoYmF0X3ByaXYpOworfQorCisvKiBpbml0IHRoZSB2aXMgc2VydmVyLiB0aGlzIG1heSBvbmx5IGJlIGNhbGxlZCB3aGVuIGlmX2xpc3QgaXMgYWxyZWFkeQorICogaW5pdGlhbGl6ZWQgKGUuZy4gYmF0MCBpcyBpbml0aWFsaXplZCwgaW50ZXJmYWNlcyBoYXZlIGJlZW4gYWRkZWQpICovCitpbnQgdmlzX2luaXQoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdikKK3sKKwlzdHJ1Y3QgdmlzX3BhY2tldCAqcGFja2V0OworCWludCBoYXNoX2FkZGVkOworCisJaWYgKGJhdF9wcml2LT52aXNfaGFzaCkKKwkJcmV0dXJuIDE7CisKKwlzcGluX2xvY2tfYmgoJmJhdF9wcml2LT52aXNfaGFzaF9sb2NrKTsKKworCWJhdF9wcml2LT52aXNfaGFzaCA9IGhhc2hfbmV3KDI1Nik7CisJaWYgKCFiYXRfcHJpdi0+dmlzX2hhc2gpIHsKKwkJcHJfZXJyKCJDYW4ndCBpbml0aWFsaXplIHZpc19oYXNoXG4iKTsKKwkJZ290byBlcnI7CisJfQorCisJYmF0X3ByaXYtPm15X3Zpc19pbmZvID0ga21hbGxvYyhNQVhfVklTX1BBQ0tFVF9TSVpFLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWJhdF9wcml2LT5teV92aXNfaW5mbykgeworCQlwcl9lcnIoIkNhbid0IGluaXRpYWxpemUgdmlzIHBhY2tldFxuIik7CisJCWdvdG8gZXJyOworCX0KKworCWJhdF9wcml2LT5teV92aXNfaW5mby0+c2tiX3BhY2tldCA9IGRldl9hbGxvY19za2IoCisJCQkJCQlzaXplb2Yoc3RydWN0IHZpc19wYWNrZXQpICsKKwkJCQkJCU1BWF9WSVNfUEFDS0VUX1NJWkUgKworCQkJCQkJc2l6ZW9mKHN0cnVjdCBldGhoZHIpKTsKKwlpZiAoIWJhdF9wcml2LT5teV92aXNfaW5mby0+c2tiX3BhY2tldCkKKwkJZ290byBmcmVlX2luZm87CisKKwlza2JfcmVzZXJ2ZShiYXRfcHJpdi0+bXlfdmlzX2luZm8tPnNrYl9wYWNrZXQsIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSk7CisJcGFja2V0ID0gKHN0cnVjdCB2aXNfcGFja2V0ICopc2tiX3B1dCgKKwkJCQkJYmF0X3ByaXYtPm15X3Zpc19pbmZvLT5za2JfcGFja2V0LAorCQkJCQlzaXplb2Yoc3RydWN0IHZpc19wYWNrZXQpKTsKKworCS8qIHByZWZpbGwgdGhlIHZpcyBpbmZvICovCisJYmF0X3ByaXYtPm15X3Zpc19pbmZvLT5maXJzdF9zZWVuID0gamlmZmllcyAtCisJCQkJCQltc2Vjc190b19qaWZmaWVzKFZJU19JTlRFUlZBTCk7CisJSU5JVF9MSVNUX0hFQUQoJmJhdF9wcml2LT5teV92aXNfaW5mby0+cmVjdl9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmYmF0X3ByaXYtPm15X3Zpc19pbmZvLT5zZW5kX2xpc3QpOworCWtyZWZfaW5pdCgmYmF0X3ByaXYtPm15X3Zpc19pbmZvLT5yZWZjb3VudCk7CisJYmF0X3ByaXYtPm15X3Zpc19pbmZvLT5iYXRfcHJpdiA9IGJhdF9wcml2OworCXBhY2tldC0+dmVyc2lvbiA9IENPTVBBVF9WRVJTSU9OOworCXBhY2tldC0+cGFja2V0X3R5cGUgPSBCQVRfVklTOworCXBhY2tldC0+dHRsID0gVFRMOworCXBhY2tldC0+c2Vxbm8gPSAwOworCXBhY2tldC0+ZW50cmllcyA9IDA7CisKKwlJTklUX0xJU1RfSEVBRCgmYmF0X3ByaXYtPnZpc19zZW5kX2xpc3QpOworCisJaGFzaF9hZGRlZCA9IGhhc2hfYWRkKGJhdF9wcml2LT52aXNfaGFzaCwgdmlzX2luZm9fY21wLCB2aXNfaW5mb19jaG9vc2UsCisJCQkgICAgICBiYXRfcHJpdi0+bXlfdmlzX2luZm8pOworCWlmIChoYXNoX2FkZGVkIDwgMCkgeworCQlwcl9lcnIoIkNhbid0IGFkZCBvd24gdmlzIHBhY2tldCBpbnRvIGhhc2hcbiIpOworCQkvKiBub3QgaW4gaGFzaCwgbmVlZCB0byByZW1vdmUgaXQgbWFudWFsbHkuICovCisJCWtyZWZfcHV0KCZiYXRfcHJpdi0+bXlfdmlzX2luZm8tPnJlZmNvdW50LCBmcmVlX2luZm8pOworCQlnb3RvIGVycjsKKwl9CisKKwlzcGluX3VubG9ja19iaCgmYmF0X3ByaXYtPnZpc19oYXNoX2xvY2spOworCXN0YXJ0X3Zpc190aW1lcihiYXRfcHJpdik7CisJcmV0dXJuIDE7CisKK2ZyZWVfaW5mbzoKKwlrZnJlZShiYXRfcHJpdi0+bXlfdmlzX2luZm8pOworCWJhdF9wcml2LT5teV92aXNfaW5mbyA9IE5VTEw7CitlcnI6CisJc3Bpbl91bmxvY2tfYmgoJmJhdF9wcml2LT52aXNfaGFzaF9sb2NrKTsKKwl2aXNfcXVpdChiYXRfcHJpdik7CisJcmV0dXJuIDA7Cit9CisKKy8qIERlY3JlYXNlIHRoZSByZWZlcmVuY2UgY291bnQgb24gYSBoYXNoIGl0ZW0gaW5mbyAqLworc3RhdGljIHZvaWQgZnJlZV9pbmZvX3JlZih2b2lkICpkYXRhLCB2b2lkICphcmcpCit7CisJc3RydWN0IHZpc19pbmZvICppbmZvID0gZGF0YTsKKworCXNlbmRfbGlzdF9kZWwoaW5mbyk7CisJa3JlZl9wdXQoJmluZm8tPnJlZmNvdW50LCBmcmVlX2luZm8pOworfQorCisvKiBzaHV0ZG93biB2aXMtc2VydmVyICovCit2b2lkIHZpc19xdWl0KHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYpCit7CisJaWYgKCFiYXRfcHJpdi0+dmlzX2hhc2gpCisJCXJldHVybjsKKworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmYmF0X3ByaXYtPnZpc193b3JrKTsKKworCXNwaW5fbG9ja19iaCgmYmF0X3ByaXYtPnZpc19oYXNoX2xvY2spOworCS8qIHByb3Blcmx5IHJlbW92ZSwga2lsbCB0aW1lcnMgLi4uICovCisJaGFzaF9kZWxldGUoYmF0X3ByaXYtPnZpc19oYXNoLCBmcmVlX2luZm9fcmVmLCBOVUxMKTsKKwliYXRfcHJpdi0+dmlzX2hhc2ggPSBOVUxMOworCWJhdF9wcml2LT5teV92aXNfaW5mbyA9IE5VTEw7CisJc3Bpbl91bmxvY2tfYmgoJmJhdF9wcml2LT52aXNfaGFzaF9sb2NrKTsKK30KKworLyogc2NoZWR1bGUgcGFja2V0cyBmb3IgKHJlKXRyYW5zbWlzc2lvbiAqLworc3RhdGljIHZvaWQgc3RhcnRfdmlzX3RpbWVyKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYpCit7CisJSU5JVF9ERUxBWUVEX1dPUksoJmJhdF9wcml2LT52aXNfd29yaywgc2VuZF92aXNfcGFja2V0cyk7CisJcXVldWVfZGVsYXllZF93b3JrKGJhdF9ldmVudF93b3JrcXVldWUsICZiYXRfcHJpdi0+dmlzX3dvcmssCisJCQkgICBtc2Vjc190b19qaWZmaWVzKFZJU19JTlRFUlZBTCkpOworfQpkaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvdmlzLmggYi9uZXQvYmF0bWFuLWFkdi92aXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzNiMzMwCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L2JhdG1hbi1hZHYvdmlzLmgKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDEwIEIuQS5ULk0uQS5OLiBjb250cmlidXRvcnM6CisgKgorICogU2ltb24gV3VuZGVybGljaCwgTWFyZWsgTGluZG5lcgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSwgVVNBCisgKgorICovCisKKyNpZm5kZWYgX05FVF9CQVRNQU5fQURWX1ZJU19IXworI2RlZmluZSBfTkVUX0JBVE1BTl9BRFZfVklTX0hfCisKKyNkZWZpbmUgVklTX1RJTUVPVVQJCTIwMAkvKiB0aW1lb3V0IG9mIHZpcyBwYWNrZXRzIGluIHNlY29uZHMgKi8KKworaW50IHZpc19zZXFfcHJpbnRfdGV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqb2Zmc2V0KTsKK3ZvaWQgcmVjZWl2ZV9zZXJ2ZXJfc3luY19wYWNrZXQoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiwKKwkJCQlzdHJ1Y3QgdmlzX3BhY2tldCAqdmlzX3BhY2tldCwKKwkJCQlpbnQgdmlzX2luZm9fbGVuKTsKK3ZvaWQgcmVjZWl2ZV9jbGllbnRfdXBkYXRlX3BhY2tldChzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2LAorCQkJCSAgc3RydWN0IHZpc19wYWNrZXQgKnZpc19wYWNrZXQsCisJCQkJICBpbnQgdmlzX2luZm9fbGVuKTsKK2ludCB2aXNfaW5pdChzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2KTsKK3ZvaWQgdmlzX3F1aXQoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdik7CisKKyNlbmRpZiAvKiBfTkVUX0JBVE1BTl9BRFZfVklTX0hfICovCmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL01ha2VmaWxlIGIvbmV0L2JsdWV0b290aC9NYWtlZmlsZQppbmRleCBkMWU0MzNmLi4yNTBmOTU0IDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL01ha2VmaWxlCisrKyBiL25ldC9ibHVldG9vdGgvTWFrZWZpbGUKQEAgLTEwLDQgKzEwLDQgQEAKIG9iai0kKENPTkZJR19CVF9DTVRQKQkrPSBjbXRwLwogb2JqLSQoQ09ORklHX0JUX0hJRFApCSs9IGhpZHAvCiAKLWJsdWV0b290aC1vYmpzIDo9IGFmX2JsdWV0b290aC5vIGhjaV9jb3JlLm8gaGNpX2Nvbm4ubyBoY2lfZXZlbnQubyBoY2lfc29jay5vIGhjaV9zeXNmcy5vIGxpYi5vCitibHVldG9vdGgteSA6PSBhZl9ibHVldG9vdGgubyBoY2lfY29yZS5vIGhjaV9jb25uLm8gaGNpX2V2ZW50Lm8gbWdtdC5vIGhjaV9zb2NrLm8gaGNpX3N5c2ZzLm8gbGliLm8KZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvYm5lcC9jb3JlLmMgYi9uZXQvYmx1ZXRvb3RoL2JuZXAvY29yZS5jCmluZGV4IGYxMGI0MWYuLjU4Njg1OTcgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvYm5lcC9jb3JlLmMKKysrIGIvbmV0L2JsdWV0b290aC9ibmVwL2NvcmUuYwpAQCAtNjQ4LDYgKzY0OCw3IEBACiAKIHN0YXRpYyB2b2lkIF9fYm5lcF9jb3B5X2NpKHN0cnVjdCBibmVwX2Nvbm5pbmZvICpjaSwgc3RydWN0IGJuZXBfc2Vzc2lvbiAqcykKIHsKKwltZW1zZXQoY2ksIDAsIHNpemVvZigqY2kpKTsKIAltZW1jcHkoY2ktPmRzdCwgcy0+ZWguaF9zb3VyY2UsIEVUSF9BTEVOKTsKIAlzdHJjcHkoY2ktPmRldmljZSwgcy0+ZGV2LT5uYW1lKTsKIAljaS0+ZmxhZ3MgPSBzLT5mbGFnczsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvY210cC9jb3JlLmMgYi9uZXQvYmx1ZXRvb3RoL2NtdHAvY29yZS5jCmluZGV4IGVjMGExMzQuLjhlNWYyOTIgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvY210cC9jb3JlLmMKKysrIGIvbmV0L2JsdWV0b290aC9jbXRwL2NvcmUuYwpAQCAtNzgsNiArNzgsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2NtdHBfY29weV9zZXNzaW9uKHN0cnVjdCBjbXRwX3Nlc3Npb24gKnNlc3Npb24sIHN0cnVjdCBjbXRwX2Nvbm5pbmZvICpjaSkKIHsKKwltZW1zZXQoY2ksIDAsIHNpemVvZigqY2kpKTsKIAliYWNweSgmY2ktPmJkYWRkciwgJnNlc3Npb24tPmJkYWRkcik7CiAKIAljaS0+ZmxhZ3MgPSBzZXNzaW9uLT5mbGFnczsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvaGNpX2Nvbm4uYyBiL25ldC9ibHVldG9vdGgvaGNpX2Nvbm4uYwppbmRleCAwYjFlNDYwLi42YjkwYTQxIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2hjaV9jb25uLmMKKysrIGIvbmV0L2JsdWV0b290aC9oY2lfY29ubi5jCkBAIC0zOSw3ICszOSw3IEBACiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CiAKICNpbmNsdWRlIDxuZXQvYmx1ZXRvb3RoL2JsdWV0b290aC5oPgpAQCAtNjYsNyArNjYsOCBAQAogCWJhY3B5KCZjcC5iZGFkZHIsICZjb25uLT5kc3QpOwogCWNwLnBzY2FuX3JlcF9tb2RlID0gMHgwMjsKIAotCWlmICgoaWUgPSBoY2lfaW5xdWlyeV9jYWNoZV9sb29rdXAoaGRldiwgJmNvbm4tPmRzdCkpKSB7CisJaWUgPSBoY2lfaW5xdWlyeV9jYWNoZV9sb29rdXAoaGRldiwgJmNvbm4tPmRzdCk7CisJaWYgKGllKSB7CiAJCWlmIChpbnF1aXJ5X2VudHJ5X2FnZShpZSkgPD0gSU5RVUlSWV9FTlRSWV9BR0VfTUFYKSB7CiAJCQljcC5wc2Nhbl9yZXBfbW9kZSA9IGllLT5kYXRhLnBzY2FuX3JlcF9tb2RlOwogCQkJY3AucHNjYW5fbW9kZSAgICAgPSBpZS0+ZGF0YS5wc2Nhbl9tb2RlOwpAQCAtMzY4LDggKzM2OSwxMCBAQAogCiAJQlRfREJHKCIlcyBkc3QgJXMiLCBoZGV2LT5uYW1lLCBiYXRvc3RyKGRzdCkpOwogCi0JaWYgKCEoYWNsID0gaGNpX2Nvbm5faGFzaF9sb29rdXBfYmEoaGRldiwgQUNMX0xJTkssIGRzdCkpKSB7Ci0JCWlmICghKGFjbCA9IGhjaV9jb25uX2FkZChoZGV2LCBBQ0xfTElOSywgZHN0KSkpCisJYWNsID0gaGNpX2Nvbm5faGFzaF9sb29rdXBfYmEoaGRldiwgQUNMX0xJTkssIGRzdCk7CisJaWYgKCFhY2wpIHsKKwkJYWNsID0gaGNpX2Nvbm5fYWRkKGhkZXYsIEFDTF9MSU5LLCBkc3QpOworCQlpZiAoIWFjbCkKIAkJCXJldHVybiBOVUxMOwogCX0KIApAQCAtMzg5LDggKzM5MiwxMCBAQAogCWlmICh0eXBlID09IEFDTF9MSU5LKQogCQlyZXR1cm4gYWNsOwogCi0JaWYgKCEoc2NvID0gaGNpX2Nvbm5faGFzaF9sb29rdXBfYmEoaGRldiwgdHlwZSwgZHN0KSkpIHsKLQkJaWYgKCEoc2NvID0gaGNpX2Nvbm5fYWRkKGhkZXYsIHR5cGUsIGRzdCkpKSB7CisJc2NvID0gaGNpX2Nvbm5faGFzaF9sb29rdXBfYmEoaGRldiwgdHlwZSwgZHN0KTsKKwlpZiAoIXNjbykgeworCQlzY28gPSBoY2lfY29ubl9hZGQoaGRldiwgdHlwZSwgZHN0KTsKKwkJaWYgKCFzY28pIHsKIAkJCWhjaV9jb25uX3B1dChhY2wpOwogCQkJcmV0dXJuIE5VTEw7CiAJCX0KQEAgLTY0NywxMCArNjUyLDEyIEBACiAKIAlzaXplID0gc2l6ZW9mKHJlcSkgKyByZXEuY29ubl9udW0gKiBzaXplb2YoKmNpKTsKIAotCWlmICghKGNsID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKSkpCisJY2wgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCWlmICghY2wpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JaWYgKCEoaGRldiA9IGhjaV9kZXZfZ2V0KHJlcS5kZXZfaWQpKSkgeworCWhkZXYgPSBoY2lfZGV2X2dldChyZXEuZGV2X2lkKTsKKwlpZiAoIWhkZXYpIHsKIAkJa2ZyZWUoY2wpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMgYi9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMKaW5kZXggYmMyYTA1Mi4uOGI2MDJkOCAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jCisrKyBiL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuYwpAQCAtNDQsNyArNDQsNyBAQAogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CiAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgogCiAjaW5jbHVkZSA8bmV0L2JsdWV0b290aC9ibHVldG9vdGguaD4KQEAgLTkxLDkgKzkxLDE2IEBACiAKIC8qIC0tLS0gSENJIHJlcXVlc3RzIC0tLS0gKi8KIAotdm9pZCBoY2lfcmVxX2NvbXBsZXRlKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBpbnQgcmVzdWx0KQordm9pZCBoY2lfcmVxX2NvbXBsZXRlKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBfX3UxNiBjbWQsIGludCByZXN1bHQpCiB7Ci0JQlRfREJHKCIlcyByZXN1bHQgMHglMi4yeCIsIGhkZXYtPm5hbWUsIHJlc3VsdCk7CisJQlRfREJHKCIlcyBjb21tYW5kIDB4JTA0eCByZXN1bHQgMHglMi4yeCIsIGhkZXYtPm5hbWUsIGNtZCwgcmVzdWx0KTsKKworCS8qIElmIHRoZSByZXF1ZXN0IGhhcyBzZXQgcmVxX2xhc3RfY21kICh0eXBpY2FsIGZvciBtdWx0aS1IQ0kKKwkgKiBjb21tYW5kIHJlcXVlc3RzKSBjaGVjayBpZiB0aGUgY29tcGxldGVkIGNvbW1hbmQgbWF0Y2hlcworCSAqIHRoaXMsIGFuZCBpZiBub3QganVzdCByZXR1cm4uIFNpbmdsZSBIQ0kgY29tbWFuZCByZXF1ZXN0cworCSAqIHR5cGljYWxseSBsZWF2ZSByZXFfbGFzdF9jbWQgYXMgMCAqLworCWlmIChoZGV2LT5yZXFfbGFzdF9jbWQgJiYgY21kICE9IGhkZXYtPnJlcV9sYXN0X2NtZCkKKwkJcmV0dXJuOwogCiAJaWYgKGhkZXYtPnJlcV9zdGF0dXMgPT0gSENJX1JFUV9QRU5EKSB7CiAJCWhkZXYtPnJlcV9yZXN1bHQgPSByZXN1bHQ7CkBAIC0xNDksNyArMTU2LDcgQEAKIAkJYnJlYWs7CiAJfQogCi0JaGRldi0+cmVxX3N0YXR1cyA9IGhkZXYtPnJlcV9yZXN1bHQgPSAwOworCWhkZXYtPnJlcV9sYXN0X2NtZCA9IGhkZXYtPnJlcV9zdGF0dXMgPSBoZGV2LT5yZXFfcmVzdWx0ID0gMDsKIAogCUJUX0RCRygiJXMgZW5kOiBlcnIgJWQiLCBoZGV2LT5uYW1lLCBlcnIpOwogCkBAIC0yNTIsNiArMjU5LDggQEAKIAkvKiBDb25uZWN0aW9uIGFjY2VwdCB0aW1lb3V0IH4yMCBzZWNzICovCiAJcGFyYW0gPSBjcHVfdG9fbGUxNigweDdkMDApOwogCWhjaV9zZW5kX2NtZChoZGV2LCBIQ0lfT1BfV1JJVEVfQ0FfVElNRU9VVCwgMiwgJnBhcmFtKTsKKworCWhkZXYtPnJlcV9sYXN0X2NtZCA9IEhDSV9PUF9XUklURV9DQV9USU1FT1VUOwogfQogCiBzdGF0aWMgdm9pZCBoY2lfc2Nhbl9yZXEoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHVuc2lnbmVkIGxvbmcgb3B0KQpAQCAtMzQ5LDIwICszNTgsMjMgQEAKIHZvaWQgaGNpX2lucXVpcnlfY2FjaGVfdXBkYXRlKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBzdHJ1Y3QgaW5xdWlyeV9kYXRhICpkYXRhKQogewogCXN0cnVjdCBpbnF1aXJ5X2NhY2hlICpjYWNoZSA9ICZoZGV2LT5pbnFfY2FjaGU7Ci0Jc3RydWN0IGlucXVpcnlfZW50cnkgKmU7CisJc3RydWN0IGlucXVpcnlfZW50cnkgKmllOwogCiAJQlRfREJHKCJjYWNoZSAlcCwgJXMiLCBjYWNoZSwgYmF0b3N0cigmZGF0YS0+YmRhZGRyKSk7CiAKLQlpZiAoIShlID0gaGNpX2lucXVpcnlfY2FjaGVfbG9va3VwKGhkZXYsICZkYXRhLT5iZGFkZHIpKSkgeworCWllID0gaGNpX2lucXVpcnlfY2FjaGVfbG9va3VwKGhkZXYsICZkYXRhLT5iZGFkZHIpOworCWlmICghaWUpIHsKIAkJLyogRW50cnkgbm90IGluIHRoZSBjYWNoZS4gQWRkIG5ldyBvbmUuICovCi0JCWlmICghKGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaW5xdWlyeV9lbnRyeSksIEdGUF9BVE9NSUMpKSkKKwkJaWUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaW5xdWlyeV9lbnRyeSksIEdGUF9BVE9NSUMpOworCQlpZiAoIWllKQogCQkJcmV0dXJuOwotCQllLT5uZXh0ICAgICA9IGNhY2hlLT5saXN0OwotCQljYWNoZS0+bGlzdCA9IGU7CisKKwkJaWUtPm5leHQgPSBjYWNoZS0+bGlzdDsKKwkJY2FjaGUtPmxpc3QgPSBpZTsKIAl9CiAKLQltZW1jcHkoJmUtPmRhdGEsIGRhdGEsIHNpemVvZigqZGF0YSkpOwotCWUtPnRpbWVzdGFtcCA9IGppZmZpZXM7CisJbWVtY3B5KCZpZS0+ZGF0YSwgZGF0YSwgc2l6ZW9mKCpkYXRhKSk7CisJaWUtPnRpbWVzdGFtcCA9IGppZmZpZXM7CiAJY2FjaGUtPnRpbWVzdGFtcCA9IGppZmZpZXM7CiB9CiAKQEAgLTQyMiwxNiArNDM0LDIwIEBACiAKIAloY2lfZGV2X2xvY2tfYmgoaGRldik7CiAJaWYgKGlucXVpcnlfY2FjaGVfYWdlKGhkZXYpID4gSU5RVUlSWV9DQUNIRV9BR0VfTUFYIHx8Ci0JCQkJCWlucXVpcnlfY2FjaGVfZW1wdHkoaGRldikgfHwKLQkJCQkJaXIuZmxhZ3MgJiBJUkVRX0NBQ0hFX0ZMVVNIKSB7CisJCQkJaW5xdWlyeV9jYWNoZV9lbXB0eShoZGV2KSB8fAorCQkJCWlyLmZsYWdzICYgSVJFUV9DQUNIRV9GTFVTSCkgewogCQlpbnF1aXJ5X2NhY2hlX2ZsdXNoKGhkZXYpOwogCQlkb19pbnF1aXJ5ID0gMTsKIAl9CiAJaGNpX2Rldl91bmxvY2tfYmgoaGRldik7CiAKIAl0aW1lbyA9IGlyLmxlbmd0aCAqIG1zZWNzX3RvX2ppZmZpZXMoMjAwMCk7Ci0JaWYgKGRvX2lucXVpcnkgJiYgKGVyciA9IGhjaV9yZXF1ZXN0KGhkZXYsIGhjaV9pbnFfcmVxLCAodW5zaWduZWQgbG9uZykmaXIsIHRpbWVvKSkgPCAwKQotCQlnb3RvIGRvbmU7CisKKwlpZiAoZG9faW5xdWlyeSkgeworCQllcnIgPSBoY2lfcmVxdWVzdChoZGV2LCBoY2lfaW5xX3JlcSwgKHVuc2lnbmVkIGxvbmcpJmlyLCB0aW1lbyk7CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBkb25lOworCX0KIAogCS8qIGZvciB1bmxpbWl0ZWQgbnVtYmVyIG9mIHJlc3BvbnNlcyB3ZSB3aWxsIHVzZSBidWZmZXIgd2l0aCAyNTUgZW50cmllcyAqLwogCW1heF9yc3AgPSAoaXIubnVtX3JzcCA9PSAwKSA/IDI1NSA6IGlyLm51bV9yc3A7CkBAIC00MzksNyArNDU1LDggQEAKIAkvKiBjYWNoZV9kdW1wIGNhbid0IHNsZWVwLiBUaGVyZWZvcmUgd2UgYWxsb2NhdGUgdGVtcCBidWZmZXIgYW5kIHRoZW4KIAkgKiBjb3B5IGl0IHRvIHRoZSB1c2VyIHNwYWNlLgogCSAqLwotCWlmICghKGJ1ZiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpbnF1aXJ5X2luZm8pICogbWF4X3JzcCwgR0ZQX0tFUk5FTCkpKSB7CisJYnVmID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGlucXVpcnlfaW5mbykgKm1heF9yc3AsIEdGUF9LRVJORUwpOworCWlmICghYnVmKSB7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZG9uZTsKIAl9CkBAIC02MTEsNyArNjI4LDggQEAKIAlzdHJ1Y3QgaGNpX2RldiAqaGRldjsKIAlpbnQgZXJyOwogCi0JaWYgKCEoaGRldiA9IGhjaV9kZXZfZ2V0KGRldikpKQorCWhkZXYgPSBoY2lfZGV2X2dldChkZXYpOworCWlmICghaGRldikKIAkJcmV0dXJuIC1FTk9ERVY7CiAJZXJyID0gaGNpX2Rldl9kb19jbG9zZShoZGV2KTsKIAloY2lfZGV2X3B1dChoZGV2KTsKQEAgLTYyMyw3ICs2NDEsOCBAQAogCXN0cnVjdCBoY2lfZGV2ICpoZGV2OwogCWludCByZXQgPSAwOwogCi0JaWYgKCEoaGRldiA9IGhjaV9kZXZfZ2V0KGRldikpKQorCWhkZXYgPSBoY2lfZGV2X2dldChkZXYpOworCWlmICghaGRldikKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAloY2lfcmVxX2xvY2soaGRldik7CkBAIC02NjMsNyArNjgyLDggQEAKIAlzdHJ1Y3QgaGNpX2RldiAqaGRldjsKIAlpbnQgcmV0ID0gMDsKIAotCWlmICghKGhkZXYgPSBoY2lfZGV2X2dldChkZXYpKSkKKwloZGV2ID0gaGNpX2Rldl9nZXQoZGV2KTsKKwlpZiAoIWhkZXYpCiAJCXJldHVybiAtRU5PREVWOwogCiAJbWVtc2V0KCZoZGV2LT5zdGF0LCAwLCBzaXplb2Yoc3RydWN0IGhjaV9kZXZfc3RhdHMpKTsKQEAgLTY4Miw3ICs3MDIsOCBAQAogCWlmIChjb3B5X2Zyb21fdXNlcigmZHIsIGFyZywgc2l6ZW9mKGRyKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JaWYgKCEoaGRldiA9IGhjaV9kZXZfZ2V0KGRyLmRldl9pZCkpKQorCWhkZXYgPSBoY2lfZGV2X2dldChkci5kZXZfaWQpOworCWlmICghaGRldikKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlzd2l0Y2ggKGNtZCkgewpAQCAtNzYzLDcgKzc4NCw4IEBACiAKIAlzaXplID0gc2l6ZW9mKCpkbCkgKyBkZXZfbnVtICogc2l6ZW9mKCpkcik7CiAKLQlpZiAoIShkbCA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCkpKQorCWRsID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRsKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCWRyID0gZGwtPmRldl9yZXE7CkBAIC03OTcsNyArODE5LDggQEAKIAlpZiAoY29weV9mcm9tX3VzZXIoJmRpLCBhcmcsIHNpemVvZihkaSkpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWlmICghKGhkZXYgPSBoY2lfZGV2X2dldChkaS5kZXZfaWQpKSkKKwloZGV2ID0gaGNpX2Rldl9nZXQoZGkuZGV2X2lkKTsKKwlpZiAoIWhkZXYpCiAJCXJldHVybiAtRU5PREVWOwogCiAJc3RyY3B5KGRpLm5hbWUsIGhkZXYtPm5hbWUpOwpAQCAtOTA1LDcgKzkyOCw3IEBACiAJaGRldi0+c25pZmZfbWF4X2ludGVydmFsID0gODAwOwogCWhkZXYtPnNuaWZmX21pbl9pbnRlcnZhbCA9IDgwOwogCi0JdGFza2xldF9pbml0KCZoZGV2LT5jbWRfdGFzaywgaGNpX2NtZF90YXNrLCh1bnNpZ25lZCBsb25nKSBoZGV2KTsKKwl0YXNrbGV0X2luaXQoJmhkZXYtPmNtZF90YXNrLCBoY2lfY21kX3Rhc2ssICh1bnNpZ25lZCBsb25nKSBoZGV2KTsKIAl0YXNrbGV0X2luaXQoJmhkZXYtPnJ4X3Rhc2ssIGhjaV9yeF90YXNrLCAodW5zaWduZWQgbG9uZykgaGRldik7CiAJdGFza2xldF9pbml0KCZoZGV2LT50eF90YXNrLCBoY2lfdHhfdGFzaywgKHVuc2lnbmVkIGxvbmcpIGhkZXYpOwogCkBAIC05NDYsNiArOTY5LDcgQEAKIAkJfQogCX0KIAorCW1nbXRfaW5kZXhfYWRkZWQoaGRldi0+aWQpOwogCWhjaV9ub3RpZnkoaGRldiwgSENJX0RFVl9SRUcpOwogCiAJcmV0dXJuIGlkOwpAQCAtOTc1LDYgKzk5OSw3IEBACiAJZm9yIChpID0gMDsgaSA8IE5VTV9SRUFTU0VNQkxZOyBpKyspCiAJCWtmcmVlX3NrYihoZGV2LT5yZWFzc2VtYmx5W2ldKTsKIAorCW1nbXRfaW5kZXhfcmVtb3ZlZChoZGV2LT5pZCk7CiAJaGNpX25vdGlmeShoZGV2LCBIQ0lfREVWX1VOUkVHKTsKIAogCWlmIChoZGV2LT5yZmtpbGwpIHsKQEAgLTEzNjgsNyArMTM5Myw4IEBACiAJYnRfY2Ioc2tiKS0+cGt0X3R5cGUgPSBIQ0lfQUNMREFUQV9QS1Q7CiAJaGNpX2FkZF9hY2xfaGRyKHNrYiwgY29ubi0+aGFuZGxlLCBmbGFncyB8IEFDTF9TVEFSVCk7CiAKLQlpZiAoIShsaXN0ID0gc2tiX3NoaW5mbyhza2IpLT5mcmFnX2xpc3QpKSB7CisJbGlzdCA9IHNrYl9zaGluZm8oc2tiKS0+ZnJhZ19saXN0OworCWlmICghbGlzdCkgewogCQkvKiBOb24gZnJhZ21lbnRlZCAqLwogCQlCVF9EQkcoIiVzIG5vbmZyYWcgc2tiICVwIGxlbiAlZCIsIGhkZXYtPm5hbWUsIHNrYiwgc2tiLT5sZW4pOwogCkBAIC0xNjA5LDcgKzE2MzUsOCBAQAogCQloY2lfY29ubl9lbnRlcl9hY3RpdmVfbW9kZShjb25uKTsKIAogCQkvKiBTZW5kIHRvIHVwcGVyIHByb3RvY29sICovCi0JCWlmICgoaHAgPSBoY2lfcHJvdG9bSENJX1BST1RPX0wyQ0FQXSkgJiYgaHAtPnJlY3ZfYWNsZGF0YSkgeworCQlocCA9IGhjaV9wcm90b1tIQ0lfUFJPVE9fTDJDQVBdOworCQlpZiAoaHAgJiYgaHAtPnJlY3ZfYWNsZGF0YSkgewogCQkJaHAtPnJlY3ZfYWNsZGF0YShjb25uLCBza2IsIGZsYWdzKTsKIAkJCXJldHVybjsKIAkJfQpAQCAtMTY0NCw3ICsxNjcxLDggQEAKIAkJcmVnaXN0ZXIgc3RydWN0IGhjaV9wcm90byAqaHA7CiAKIAkJLyogU2VuZCB0byB1cHBlciBwcm90b2NvbCAqLwotCQlpZiAoKGhwID0gaGNpX3Byb3RvW0hDSV9QUk9UT19TQ09dKSAmJiBocC0+cmVjdl9zY29kYXRhKSB7CisJCWhwID0gaGNpX3Byb3RvW0hDSV9QUk9UT19TQ09dOworCQlpZiAoaHAgJiYgaHAtPnJlY3Zfc2NvZGF0YSkgewogCQkJaHAtPnJlY3Zfc2NvZGF0YShjb25uLCBza2IpOwogCQkJcmV0dXJuOwogCQl9CkBAIC0xNzI3LDcgKzE3NTUsOCBAQAogCWlmIChhdG9taWNfcmVhZCgmaGRldi0+Y21kX2NudCkgJiYgKHNrYiA9IHNrYl9kZXF1ZXVlKCZoZGV2LT5jbWRfcSkpKSB7CiAJCWtmcmVlX3NrYihoZGV2LT5zZW50X2NtZCk7CiAKLQkJaWYgKChoZGV2LT5zZW50X2NtZCA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpKSkgeworCQloZGV2LT5zZW50X2NtZCA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpOworCQlpZiAoaGRldi0+c2VudF9jbWQpIHsKIAkJCWF0b21pY19kZWMoJmhkZXYtPmNtZF9jbnQpOwogCQkJaGNpX3NlbmRfZnJhbWUoc2tiKTsKIAkJCWhkZXYtPmNtZF9sYXN0X3R4ID0gamlmZmllczsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMgYi9uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jCmluZGV4IDg0MDkzYjAuLjM4MTAwMTcgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMKKysrIGIvbmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYwpAQCAtMzksNyArMzksNyBAQAogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CiAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgogCiAjaW5jbHVkZSA8bmV0L2JsdWV0b290aC9ibHVldG9vdGguaD4KQEAgLTU4LDcgKzU4LDcgQEAKIAogCWNsZWFyX2JpdChIQ0lfSU5RVUlSWSwgJmhkZXYtPmZsYWdzKTsKIAotCWhjaV9yZXFfY29tcGxldGUoaGRldiwgc3RhdHVzKTsKKwloY2lfcmVxX2NvbXBsZXRlKGhkZXYsIEhDSV9PUF9JTlFVSVJZX0NBTkNFTCwgc3RhdHVzKTsKIAogCWhjaV9jb25uX2NoZWNrX3BlbmRpbmcoaGRldik7CiB9CkBAIC0xNzQsNyArMTc0LDcgQEAKIAlpZiAoIXN0YXR1cykKIAkJaGRldi0+bGlua19wb2xpY3kgPSBnZXRfdW5hbGlnbmVkX2xlMTYoc2VudCk7CiAKLQloY2lfcmVxX2NvbXBsZXRlKGhkZXYsIHN0YXR1cyk7CisJaGNpX3JlcV9jb21wbGV0ZShoZGV2LCBIQ0lfT1BfV1JJVEVfREVGX0xJTktfUE9MSUNZLCBzdGF0dXMpOwogfQogCiBzdGF0aWMgdm9pZCBoY2lfY2NfcmVzZXQoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHN0cnVjdCBza19idWZmICpza2IpCkBAIC0xODMsNyArMTgzLDcgQEAKIAogCUJUX0RCRygiJXMgc3RhdHVzIDB4JXgiLCBoZGV2LT5uYW1lLCBzdGF0dXMpOwogCi0JaGNpX3JlcV9jb21wbGV0ZShoZGV2LCBzdGF0dXMpOworCWhjaV9yZXFfY29tcGxldGUoaGRldiwgSENJX09QX1JFU0VULCBzdGF0dXMpOwogfQogCiBzdGF0aWMgdm9pZCBoY2lfY2Nfd3JpdGVfbG9jYWxfbmFtZShzdHJ1Y3QgaGNpX2RldiAqaGRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKQEAgLTIzNSw3ICsyMzUsNyBAQAogCQkJY2xlYXJfYml0KEhDSV9BVVRILCAmaGRldi0+ZmxhZ3MpOwogCX0KIAotCWhjaV9yZXFfY29tcGxldGUoaGRldiwgc3RhdHVzKTsKKwloY2lfcmVxX2NvbXBsZXRlKGhkZXYsIEhDSV9PUF9XUklURV9BVVRIX0VOQUJMRSwgc3RhdHVzKTsKIH0KIAogc3RhdGljIHZvaWQgaGNpX2NjX3dyaXRlX2VuY3J5cHRfbW9kZShzdHJ1Y3QgaGNpX2RldiAqaGRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKQEAgLTI1OCw3ICsyNTgsNyBAQAogCQkJY2xlYXJfYml0KEhDSV9FTkNSWVBULCAmaGRldi0+ZmxhZ3MpOwogCX0KIAotCWhjaV9yZXFfY29tcGxldGUoaGRldiwgc3RhdHVzKTsKKwloY2lfcmVxX2NvbXBsZXRlKGhkZXYsIEhDSV9PUF9XUklURV9FTkNSWVBUX01PREUsIHN0YXR1cyk7CiB9CiAKIHN0YXRpYyB2b2lkIGhjaV9jY193cml0ZV9zY2FuX2VuYWJsZShzdHJ1Y3QgaGNpX2RldiAqaGRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKQEAgLTI4NSw3ICsyODUsNyBAQAogCQkJc2V0X2JpdChIQ0lfUFNDQU4sICZoZGV2LT5mbGFncyk7CiAJfQogCi0JaGNpX3JlcV9jb21wbGV0ZShoZGV2LCBzdGF0dXMpOworCWhjaV9yZXFfY29tcGxldGUoaGRldiwgSENJX09QX1dSSVRFX1NDQU5fRU5BQkxFLCBzdGF0dXMpOwogfQogCiBzdGF0aWMgdm9pZCBoY2lfY2NfcmVhZF9jbGFzc19vZl9kZXYoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHN0cnVjdCBza19idWZmICpza2IpCkBAIC0zODMsNyArMzgzLDcgQEAKIAogCUJUX0RCRygiJXMgc3RhdHVzIDB4JXgiLCBoZGV2LT5uYW1lLCBzdGF0dXMpOwogCi0JaGNpX3JlcV9jb21wbGV0ZShoZGV2LCBzdGF0dXMpOworCWhjaV9yZXFfY29tcGxldGUoaGRldiwgSENJX09QX0hPU1RfQlVGRkVSX1NJWkUsIHN0YXR1cyk7CiB9CiAKIHN0YXRpYyB2b2lkIGhjaV9jY19yZWFkX3NzcF9tb2RlKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpAQCAtNTM2LDcgKzUzNiwxNiBAQAogCWlmICghcnAtPnN0YXR1cykKIAkJYmFjcHkoJmhkZXYtPmJkYWRkciwgJnJwLT5iZGFkZHIpOwogCi0JaGNpX3JlcV9jb21wbGV0ZShoZGV2LCBycC0+c3RhdHVzKTsKKwloY2lfcmVxX2NvbXBsZXRlKGhkZXYsIEhDSV9PUF9SRUFEX0JEX0FERFIsIHJwLT5zdGF0dXMpOworfQorCitzdGF0aWMgdm9pZCBoY2lfY2Nfd3JpdGVfY2FfdGltZW91dChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlfX3U4IHN0YXR1cyA9ICooKF9fdTggKikgc2tiLT5kYXRhKTsKKworCUJUX0RCRygiJXMgc3RhdHVzIDB4JXgiLCBoZGV2LT5uYW1lLCBzdGF0dXMpOworCisJaGNpX3JlcV9jb21wbGV0ZShoZGV2LCBIQ0lfT1BfV1JJVEVfQ0FfVElNRU9VVCwgc3RhdHVzKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGhjaV9jc19pbnF1aXJ5KHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBfX3U4IHN0YXR1cykKQEAgLTU0NCw3ICs1NTMsNyBAQAogCUJUX0RCRygiJXMgc3RhdHVzIDB4JXgiLCBoZGV2LT5uYW1lLCBzdGF0dXMpOwogCiAJaWYgKHN0YXR1cykgewotCQloY2lfcmVxX2NvbXBsZXRlKGhkZXYsIHN0YXR1cyk7CisJCWhjaV9yZXFfY29tcGxldGUoaGRldiwgSENJX09QX0lOUVVJUlksIHN0YXR1cyk7CiAKIAkJaGNpX2Nvbm5fY2hlY2tfcGVuZGluZyhoZGV2KTsKIAl9IGVsc2UKQEAgLTY3Nyw5ICs2ODYsNTAgQEAKIAloY2lfZGV2X3VubG9jayhoZGV2KTsKIH0KIAorc3RhdGljIGludCBoY2lfb3V0Z29pbmdfYXV0aF9uZWVkZWQoc3RydWN0IGhjaV9kZXYgKmhkZXYsCisJCQkJCQlzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4pCit7CisJaWYgKGNvbm4tPnN0YXRlICE9IEJUX0NPTkZJRyB8fCAhY29ubi0+b3V0KQorCQlyZXR1cm4gMDsKKworCWlmIChjb25uLT5zZWNfbGV2ZWwgPT0gQlRfU0VDVVJJVFlfU0RQKQorCQlyZXR1cm4gMDsKKworCS8qIE9ubHkgcmVxdWVzdCBhdXRoZW50aWNhdGlvbiBmb3IgU1NQIGNvbm5lY3Rpb25zIG9yIG5vbi1TU1AKKwkgKiBkZXZpY2VzIHdpdGggc2VjX2xldmVsIEhJR0ggKi8KKwlpZiAoIShoZGV2LT5zc3BfbW9kZSA+IDAgJiYgY29ubi0+c3NwX21vZGUgPiAwKSAmJgorCQkJCQljb25uLT5zZWNfbGV2ZWwgIT0gQlRfU0VDVVJJVFlfSElHSCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gMTsKK30KKwogc3RhdGljIHZvaWQgaGNpX2NzX3JlbW90ZV9uYW1lX3JlcShzdHJ1Y3QgaGNpX2RldiAqaGRldiwgX191OCBzdGF0dXMpCiB7CisJc3RydWN0IGhjaV9jcF9yZW1vdGVfbmFtZV9yZXEgKmNwOworCXN0cnVjdCBoY2lfY29ubiAqY29ubjsKKwogCUJUX0RCRygiJXMgc3RhdHVzIDB4JXgiLCBoZGV2LT5uYW1lLCBzdGF0dXMpOworCisJLyogSWYgc3VjY2Vzc2Z1bCB3YWl0IGZvciB0aGUgbmFtZSByZXEgY29tcGxldGUgZXZlbnQgYmVmb3JlCisJICogY2hlY2tpbmcgZm9yIHRoZSBuZWVkIHRvIGRvIGF1dGhlbnRpY2F0aW9uICovCisJaWYgKCFzdGF0dXMpCisJCXJldHVybjsKKworCWNwID0gaGNpX3NlbnRfY21kX2RhdGEoaGRldiwgSENJX09QX1JFTU9URV9OQU1FX1JFUSk7CisJaWYgKCFjcCkKKwkJcmV0dXJuOworCisJaGNpX2Rldl9sb2NrKGhkZXYpOworCisJY29ubiA9IGhjaV9jb25uX2hhc2hfbG9va3VwX2JhKGhkZXYsIEFDTF9MSU5LLCAmY3AtPmJkYWRkcik7CisJaWYgKGNvbm4gJiYgaGNpX291dGdvaW5nX2F1dGhfbmVlZGVkKGhkZXYsIGNvbm4pKSB7CisJCXN0cnVjdCBoY2lfY3BfYXV0aF9yZXF1ZXN0ZWQgY3A7CisJCWNwLmhhbmRsZSA9IF9fY3B1X3RvX2xlMTYoY29ubi0+aGFuZGxlKTsKKwkJaGNpX3NlbmRfY21kKGhkZXYsIEhDSV9PUF9BVVRIX1JFUVVFU1RFRCwgc2l6ZW9mKGNwKSwgJmNwKTsKKwl9CisKKwloY2lfZGV2X3VubG9jayhoZGV2KTsKIH0KIAogc3RhdGljIHZvaWQgaGNpX2NzX3JlYWRfcmVtb3RlX2ZlYXR1cmVzKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBfX3U4IHN0YXR1cykKQEAgLTgzMCw3ICs4ODAsNyBAQAogCiAJY2xlYXJfYml0KEhDSV9JTlFVSVJZLCAmaGRldi0+ZmxhZ3MpOwogCi0JaGNpX3JlcV9jb21wbGV0ZShoZGV2LCBzdGF0dXMpOworCWhjaV9yZXFfY29tcGxldGUoaGRldiwgSENJX09QX0lOUVVJUlksIHN0YXR1cyk7CiAKIAloY2lfY29ubl9jaGVja19wZW5kaW5nKGhkZXYpOwogfQpAQCAtOTU1LDEyICsxMDA1LDE0IEBACiAKIAkJaGNpX2Rldl9sb2NrKGhkZXYpOwogCi0JCWlmICgoaWUgPSBoY2lfaW5xdWlyeV9jYWNoZV9sb29rdXAoaGRldiwgJmV2LT5iZGFkZHIpKSkKKwkJaWUgPSBoY2lfaW5xdWlyeV9jYWNoZV9sb29rdXAoaGRldiwgJmV2LT5iZGFkZHIpOworCQlpZiAoaWUpCiAJCQltZW1jcHkoaWUtPmRhdGEuZGV2X2NsYXNzLCBldi0+ZGV2X2NsYXNzLCAzKTsKIAogCQljb25uID0gaGNpX2Nvbm5faGFzaF9sb29rdXBfYmEoaGRldiwgZXYtPmxpbmtfdHlwZSwgJmV2LT5iZGFkZHIpOwogCQlpZiAoIWNvbm4pIHsKLQkJCWlmICghKGNvbm4gPSBoY2lfY29ubl9hZGQoaGRldiwgZXYtPmxpbmtfdHlwZSwgJmV2LT5iZGFkZHIpKSkgeworCQkJY29ubiA9IGhjaV9jb25uX2FkZChoZGV2LCBldi0+bGlua190eXBlLCAmZXYtPmJkYWRkcik7CisJCQlpZiAoIWNvbm4pIHsKIAkJCQlCVF9FUlIoIk5vIG1lbW9yeSBmb3IgbmV3IGNvbm5lY3Rpb24iKTsKIAkJCQloY2lfZGV2X3VubG9jayhoZGV2KTsKIAkJCQlyZXR1cm47CkBAIC0xMDkwLDkgKzExNDIsMjMgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGhjaV9yZW1vdGVfbmFtZV9ldnQoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHN0cnVjdCBza19idWZmICpza2IpCiB7CisJc3RydWN0IGhjaV9ldl9yZW1vdGVfbmFtZSAqZXYgPSAodm9pZCAqKSBza2ItPmRhdGE7CisJc3RydWN0IGhjaV9jb25uICpjb25uOworCiAJQlRfREJHKCIlcyIsIGhkZXYtPm5hbWUpOwogCiAJaGNpX2Nvbm5fY2hlY2tfcGVuZGluZyhoZGV2KTsKKworCWhjaV9kZXZfbG9jayhoZGV2KTsKKworCWNvbm4gPSBoY2lfY29ubl9oYXNoX2xvb2t1cF9iYShoZGV2LCBBQ0xfTElOSywgJmV2LT5iZGFkZHIpOworCWlmIChjb25uICYmIGhjaV9vdXRnb2luZ19hdXRoX25lZWRlZChoZGV2LCBjb25uKSkgeworCQlzdHJ1Y3QgaGNpX2NwX2F1dGhfcmVxdWVzdGVkIGNwOworCQljcC5oYW5kbGUgPSBfX2NwdV90b19sZTE2KGNvbm4tPmhhbmRsZSk7CisJCWhjaV9zZW5kX2NtZChoZGV2LCBIQ0lfT1BfQVVUSF9SRVFVRVNURUQsIHNpemVvZihjcCksICZjcCk7CisJfQorCisJaGNpX2Rldl91bmxvY2soaGRldik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBoY2lfZW5jcnlwdF9jaGFuZ2VfZXZ0KHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpAQCAtMTE2MiwzMyArMTIyOCwzOSBAQAogCWhjaV9kZXZfbG9jayhoZGV2KTsKIAogCWNvbm4gPSBoY2lfY29ubl9oYXNoX2xvb2t1cF9oYW5kbGUoaGRldiwgX19sZTE2X3RvX2NwdShldi0+aGFuZGxlKSk7Ci0JaWYgKGNvbm4pIHsKLQkJaWYgKCFldi0+c3RhdHVzKQotCQkJbWVtY3B5KGNvbm4tPmZlYXR1cmVzLCBldi0+ZmVhdHVyZXMsIDgpOworCWlmICghY29ubikKKwkJZ290byB1bmxvY2s7CiAKLQkJaWYgKGNvbm4tPnN0YXRlID09IEJUX0NPTkZJRykgewotCQkJaWYgKCFldi0+c3RhdHVzICYmIGxtcF9zc3BfY2FwYWJsZShoZGV2KSAmJgotCQkJCQkJbG1wX3NzcF9jYXBhYmxlKGNvbm4pKSB7Ci0JCQkJc3RydWN0IGhjaV9jcF9yZWFkX3JlbW90ZV9leHRfZmVhdHVyZXMgY3A7Ci0JCQkJY3AuaGFuZGxlID0gZXYtPmhhbmRsZTsKLQkJCQljcC5wYWdlID0gMHgwMTsKLQkJCQloY2lfc2VuZF9jbWQoaGRldiwKLQkJCQkJSENJX09QX1JFQURfUkVNT1RFX0VYVF9GRUFUVVJFUywKKwlpZiAoIWV2LT5zdGF0dXMpCisJCW1lbWNweShjb25uLT5mZWF0dXJlcywgZXYtPmZlYXR1cmVzLCA4KTsKKworCWlmIChjb25uLT5zdGF0ZSAhPSBCVF9DT05GSUcpCisJCWdvdG8gdW5sb2NrOworCisJaWYgKCFldi0+c3RhdHVzICYmIGxtcF9zc3BfY2FwYWJsZShoZGV2KSAmJiBsbXBfc3NwX2NhcGFibGUoY29ubikpIHsKKwkJc3RydWN0IGhjaV9jcF9yZWFkX3JlbW90ZV9leHRfZmVhdHVyZXMgY3A7CisJCWNwLmhhbmRsZSA9IGV2LT5oYW5kbGU7CisJCWNwLnBhZ2UgPSAweDAxOworCQloY2lfc2VuZF9jbWQoaGRldiwgSENJX09QX1JFQURfUkVNT1RFX0VYVF9GRUFUVVJFUywKIAkJCQkJCQlzaXplb2YoY3ApLCAmY3ApOwotCQkJfSBlbHNlIGlmICghZXYtPnN0YXR1cyAmJiBjb25uLT5vdXQgJiYKLQkJCQkJY29ubi0+c2VjX2xldmVsID09IEJUX1NFQ1VSSVRZX0hJR0gpIHsKLQkJCQlzdHJ1Y3QgaGNpX2NwX2F1dGhfcmVxdWVzdGVkIGNwOwotCQkJCWNwLmhhbmRsZSA9IGV2LT5oYW5kbGU7Ci0JCQkJaGNpX3NlbmRfY21kKGhkZXYsIEhDSV9PUF9BVVRIX1JFUVVFU1RFRCwKLQkJCQkJCQlzaXplb2YoY3ApLCAmY3ApOwotCQkJfSBlbHNlIHsKLQkJCQljb25uLT5zdGF0ZSA9IEJUX0NPTk5FQ1RFRDsKLQkJCQloY2lfcHJvdG9fY29ubmVjdF9jZm0oY29ubiwgZXYtPnN0YXR1cyk7Ci0JCQkJaGNpX2Nvbm5fcHV0KGNvbm4pOwotCQkJfQotCQl9CisJCWdvdG8gdW5sb2NrOwogCX0KIAorCWlmICghZXYtPnN0YXR1cykgeworCQlzdHJ1Y3QgaGNpX2NwX3JlbW90ZV9uYW1lX3JlcSBjcDsKKwkJbWVtc2V0KCZjcCwgMCwgc2l6ZW9mKGNwKSk7CisJCWJhY3B5KCZjcC5iZGFkZHIsICZjb25uLT5kc3QpOworCQljcC5wc2Nhbl9yZXBfbW9kZSA9IDB4MDI7CisJCWhjaV9zZW5kX2NtZChoZGV2LCBIQ0lfT1BfUkVNT1RFX05BTUVfUkVRLCBzaXplb2YoY3ApLCAmY3ApOworCX0KKworCWlmICghaGNpX291dGdvaW5nX2F1dGhfbmVlZGVkKGhkZXYsIGNvbm4pKSB7CisJCWNvbm4tPnN0YXRlID0gQlRfQ09OTkVDVEVEOworCQloY2lfcHJvdG9fY29ubmVjdF9jZm0oY29ubiwgZXYtPnN0YXR1cyk7CisJCWhjaV9jb25uX3B1dChjb25uKTsKKwl9CisKK3VubG9jazoKIAloY2lfZGV2X3VubG9jayhoZGV2KTsKIH0KIApAQCAtMTMxNiw2ICsxMzg4LDEwIEBACiAJCWhjaV9jY19yZWFkX2JkX2FkZHIoaGRldiwgc2tiKTsKIAkJYnJlYWs7CiAKKwljYXNlIEhDSV9PUF9XUklURV9DQV9USU1FT1VUOgorCQloY2lfY2Nfd3JpdGVfY2FfdGltZW91dChoZGV2LCBza2IpOworCQlicmVhazsKKwogCWRlZmF1bHQ6CiAJCUJUX0RCRygiJXMgb3Bjb2RlIDB4JXgiLCBoZGV2LT5uYW1lLCBvcGNvZGUpOwogCQlicmVhazsKQEAgLTE0NDksMTAgKzE1MjUsMTIgQEAKIAkJCWNvbm4tPnNlbnQgLT0gY291bnQ7CiAKIAkJCWlmIChjb25uLT50eXBlID09IEFDTF9MSU5LKSB7Ci0JCQkJaWYgKChoZGV2LT5hY2xfY250ICs9IGNvdW50KSA+IGhkZXYtPmFjbF9wa3RzKQorCQkJCWhkZXYtPmFjbF9jbnQgKz0gY291bnQ7CisJCQkJaWYgKGhkZXYtPmFjbF9jbnQgPiBoZGV2LT5hY2xfcGt0cykKIAkJCQkJaGRldi0+YWNsX2NudCA9IGhkZXYtPmFjbF9wa3RzOwogCQkJfSBlbHNlIHsKLQkJCQlpZiAoKGhkZXYtPnNjb19jbnQgKz0gY291bnQpID4gaGRldi0+c2NvX3BrdHMpCisJCQkJaGRldi0+c2NvX2NudCArPSBjb3VudDsKKwkJCQlpZiAoaGRldi0+c2NvX2NudCA+IGhkZXYtPnNjb19wa3RzKQogCQkJCQloZGV2LT5zY29fY250ID0gaGRldi0+c2NvX3BrdHM7CiAJCQl9CiAJCX0KQEAgLTE1NDcsNyArMTYyNSw4IEBACiAJaWYgKGNvbm4gJiYgIWV2LT5zdGF0dXMpIHsKIAkJc3RydWN0IGlucXVpcnlfZW50cnkgKmllOwogCi0JCWlmICgoaWUgPSBoY2lfaW5xdWlyeV9jYWNoZV9sb29rdXAoaGRldiwgJmNvbm4tPmRzdCkpKSB7CisJCWllID0gaGNpX2lucXVpcnlfY2FjaGVfbG9va3VwKGhkZXYsICZjb25uLT5kc3QpOworCQlpZiAoaWUpIHsKIAkJCWllLT5kYXRhLmNsb2NrX29mZnNldCA9IGV2LT5jbG9ja19vZmZzZXQ7CiAJCQlpZS0+dGltZXN0YW1wID0gamlmZmllczsKIAkJfQpAQCAtMTU4MSw3ICsxNjYwLDggQEAKIAogCWhjaV9kZXZfbG9jayhoZGV2KTsKIAotCWlmICgoaWUgPSBoY2lfaW5xdWlyeV9jYWNoZV9sb29rdXAoaGRldiwgJmV2LT5iZGFkZHIpKSkgeworCWllID0gaGNpX2lucXVpcnlfY2FjaGVfbG9va3VwKGhkZXYsICZldi0+YmRhZGRyKTsKKwlpZiAoaWUpIHsKIAkJaWUtPmRhdGEucHNjYW5fcmVwX21vZGUgPSBldi0+cHNjYW5fcmVwX21vZGU7CiAJCWllLT50aW1lc3RhbXAgPSBqaWZmaWVzOwogCX0KQEAgLTE2NDYsMzIgKzE3MjYsMzcgQEAKIAloY2lfZGV2X2xvY2soaGRldik7CiAKIAljb25uID0gaGNpX2Nvbm5faGFzaF9sb29rdXBfaGFuZGxlKGhkZXYsIF9fbGUxNl90b19jcHUoZXYtPmhhbmRsZSkpOwotCWlmIChjb25uKSB7Ci0JCWlmICghZXYtPnN0YXR1cyAmJiBldi0+cGFnZSA9PSAweDAxKSB7Ci0JCQlzdHJ1Y3QgaW5xdWlyeV9lbnRyeSAqaWU7CisJaWYgKCFjb25uKQorCQlnb3RvIHVubG9jazsKIAotCQkJaWYgKChpZSA9IGhjaV9pbnF1aXJ5X2NhY2hlX2xvb2t1cChoZGV2LCAmY29ubi0+ZHN0KSkpCi0JCQkJaWUtPmRhdGEuc3NwX21vZGUgPSAoZXYtPmZlYXR1cmVzWzBdICYgMHgwMSk7CisJaWYgKCFldi0+c3RhdHVzICYmIGV2LT5wYWdlID09IDB4MDEpIHsKKwkJc3RydWN0IGlucXVpcnlfZW50cnkgKmllOwogCi0JCQljb25uLT5zc3BfbW9kZSA9IChldi0+ZmVhdHVyZXNbMF0gJiAweDAxKTsKLQkJfQorCQlpZSA9IGhjaV9pbnF1aXJ5X2NhY2hlX2xvb2t1cChoZGV2LCAmY29ubi0+ZHN0KTsKKwkJaWYgKGllKQorCQkJaWUtPmRhdGEuc3NwX21vZGUgPSAoZXYtPmZlYXR1cmVzWzBdICYgMHgwMSk7CiAKLQkJaWYgKGNvbm4tPnN0YXRlID09IEJUX0NPTkZJRykgewotCQkJaWYgKCFldi0+c3RhdHVzICYmIGhkZXYtPnNzcF9tb2RlID4gMCAmJgotCQkJCQljb25uLT5zc3BfbW9kZSA+IDAgJiYgY29ubi0+b3V0ICYmCi0JCQkJCWNvbm4tPnNlY19sZXZlbCAhPSBCVF9TRUNVUklUWV9TRFApIHsKLQkJCQlzdHJ1Y3QgaGNpX2NwX2F1dGhfcmVxdWVzdGVkIGNwOwotCQkJCWNwLmhhbmRsZSA9IGV2LT5oYW5kbGU7Ci0JCQkJaGNpX3NlbmRfY21kKGhkZXYsIEhDSV9PUF9BVVRIX1JFUVVFU1RFRCwKLQkJCQkJCQlzaXplb2YoY3ApLCAmY3ApOwotCQkJfSBlbHNlIHsKLQkJCQljb25uLT5zdGF0ZSA9IEJUX0NPTk5FQ1RFRDsKLQkJCQloY2lfcHJvdG9fY29ubmVjdF9jZm0oY29ubiwgZXYtPnN0YXR1cyk7Ci0JCQkJaGNpX2Nvbm5fcHV0KGNvbm4pOwotCQkJfQotCQl9CisJCWNvbm4tPnNzcF9tb2RlID0gKGV2LT5mZWF0dXJlc1swXSAmIDB4MDEpOwogCX0KIAorCWlmIChjb25uLT5zdGF0ZSAhPSBCVF9DT05GSUcpCisJCWdvdG8gdW5sb2NrOworCisJaWYgKCFldi0+c3RhdHVzKSB7CisJCXN0cnVjdCBoY2lfY3BfcmVtb3RlX25hbWVfcmVxIGNwOworCQltZW1zZXQoJmNwLCAwLCBzaXplb2YoY3ApKTsKKwkJYmFjcHkoJmNwLmJkYWRkciwgJmNvbm4tPmRzdCk7CisJCWNwLnBzY2FuX3JlcF9tb2RlID0gMHgwMjsKKwkJaGNpX3NlbmRfY21kKGhkZXYsIEhDSV9PUF9SRU1PVEVfTkFNRV9SRVEsIHNpemVvZihjcCksICZjcCk7CisJfQorCisJaWYgKCFoY2lfb3V0Z29pbmdfYXV0aF9uZWVkZWQoaGRldiwgY29ubikpIHsKKwkJY29ubi0+c3RhdGUgPSBCVF9DT05ORUNURUQ7CisJCWhjaV9wcm90b19jb25uZWN0X2NmbShjb25uLCBldi0+c3RhdHVzKTsKKwkJaGNpX2Nvbm5fcHV0KGNvbm4pOworCX0KKwordW5sb2NrOgogCWhjaV9kZXZfdW5sb2NrKGhkZXYpOwogfQogCkBAIC0xODIxLDcgKzE5MDYsOCBAQAogCiAJaGNpX2Rldl9sb2NrKGhkZXYpOwogCi0JaWYgKChpZSA9IGhjaV9pbnF1aXJ5X2NhY2hlX2xvb2t1cChoZGV2LCAmZXYtPmJkYWRkcikpKQorCWllID0gaGNpX2lucXVpcnlfY2FjaGVfbG9va3VwKGhkZXYsICZldi0+YmRhZGRyKTsKKwlpZiAoaWUpCiAJCWllLT5kYXRhLnNzcF9tb2RlID0gKGV2LT5mZWF0dXJlc1swXSAmIDB4MDEpOwogCiAJaGNpX2Rldl91bmxvY2soaGRldik7CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2hjaV9zb2NrLmMgYi9uZXQvYmx1ZXRvb3RoL2hjaV9zb2NrLmMKaW5kZXggODNhY2QxNi4uMjk4MjdjNyAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9oY2lfc29jay5jCisrKyBiL25ldC9ibHVldG9vdGgvaGNpX3NvY2suYwpAQCAtNDMsMTIgKzQzLDE0IEBACiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CiAKICNpbmNsdWRlIDxuZXQvYmx1ZXRvb3RoL2JsdWV0b290aC5oPgogI2luY2x1ZGUgPG5ldC9ibHVldG9vdGgvaGNpX2NvcmUuaD4KIAorc3RhdGljIGludCBlbmFibGVfbWdtdDsKKwogLyogLS0tLS0gSENJIHNvY2tldCBpbnRlcmZhY2UgLS0tLS0gKi8KIAogc3RhdGljIGlubGluZSBpbnQgaGNpX3Rlc3RfYml0KGludCBuciwgdm9pZCAqYWRkcikKQEAgLTEwMiw2ICsxMDQsMTIgQEAKIAkJaWYgKHNrYi0+c2sgPT0gc2spCiAJCQljb250aW51ZTsKIAorCQlpZiAoYnRfY2Ioc2tiKS0+Y2hhbm5lbCAhPSBoY2lfcGkoc2spLT5jaGFubmVsKQorCQkJY29udGludWU7CisKKwkJaWYgKGJ0X2NiKHNrYiktPmNoYW5uZWwgPT0gSENJX0NIQU5ORUxfQ09OVFJPTCkKKwkJCWdvdG8gY2xvbmU7CisKIAkJLyogQXBwbHkgZmlsdGVyICovCiAJCWZsdCA9ICZoY2lfcGkoc2spLT5maWx0ZXI7CiAKQEAgLTEyNSwxMSArMTMzLDE0IEBACiAJCQkJY29udGludWU7CiAJCX0KIAotCQlpZiAoIShuc2tiID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQykpKQorY2xvbmU6CisJCW5za2IgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTsKKwkJaWYgKCFuc2tiKQogCQkJY29udGludWU7CiAKIAkJLyogUHV0IHR5cGUgYnl0ZSBiZWZvcmUgdGhlIGRhdGEgKi8KLQkJbWVtY3B5KHNrYl9wdXNoKG5za2IsIDEpLCAmYnRfY2IobnNrYiktPnBrdF90eXBlLCAxKTsKKwkJaWYgKGJ0X2NiKHNrYiktPmNoYW5uZWwgPT0gSENJX0NIQU5ORUxfUkFXKQorCQkJbWVtY3B5KHNrYl9wdXNoKG5za2IsIDEpLCAmYnRfY2IobnNrYiktPnBrdF90eXBlLCAxKTsKIAogCQlpZiAoc29ja19xdWV1ZV9yY3Zfc2tiKHNrLCBuc2tiKSkKIAkJCWtmcmVlX3NrYihuc2tiKTsKQEAgLTM1MiwyNSArMzYzLDM5IEBACiAKIHN0YXRpYyBpbnQgaGNpX3NvY2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIGludCBhZGRyX2xlbikKIHsKLQlzdHJ1Y3Qgc29ja2FkZHJfaGNpICpoYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHJfaGNpICopIGFkZHI7CisJc3RydWN0IHNvY2thZGRyX2hjaSBoYWRkcjsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKIAlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IE5VTEw7Ci0JaW50IGVyciA9IDA7CisJaW50IGxlbiwgZXJyID0gMDsKIAogCUJUX0RCRygic29jayAlcCBzayAlcCIsIHNvY2ssIHNrKTsKIAotCWlmICghaGFkZHIgfHwgaGFkZHItPmhjaV9mYW1pbHkgIT0gQUZfQkxVRVRPT1RIKQorCWlmICghYWRkcikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltZW1zZXQoJmhhZGRyLCAwLCBzaXplb2YoaGFkZHIpKTsKKwlsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHNpemVvZihoYWRkciksIGFkZHJfbGVuKTsKKwltZW1jcHkoJmhhZGRyLCBhZGRyLCBsZW4pOworCisJaWYgKGhhZGRyLmhjaV9mYW1pbHkgIT0gQUZfQkxVRVRPT1RIKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChoYWRkci5oY2lfY2hhbm5lbCA+IEhDSV9DSEFOTkVMX0NPTlRST0wpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGhhZGRyLmhjaV9jaGFubmVsID09IEhDSV9DSEFOTkVMX0NPTlRST0wgJiYgIWVuYWJsZV9tZ210KQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWxvY2tfc29jayhzayk7CiAKLQlpZiAoaGNpX3BpKHNrKS0+aGRldikgeworCWlmIChzay0+c2tfc3RhdGUgPT0gQlRfQk9VTkQgfHwgaGNpX3BpKHNrKS0+aGRldikgewogCQllcnIgPSAtRUFMUkVBRFk7CiAJCWdvdG8gZG9uZTsKIAl9CiAKLQlpZiAoaGFkZHItPmhjaV9kZXYgIT0gSENJX0RFVl9OT05FKSB7Ci0JCWlmICghKGhkZXYgPSBoY2lfZGV2X2dldChoYWRkci0+aGNpX2RldikpKSB7CisJaWYgKGhhZGRyLmhjaV9kZXYgIT0gSENJX0RFVl9OT05FKSB7CisJCWhkZXYgPSBoY2lfZGV2X2dldChoYWRkci5oY2lfZGV2KTsKKwkJaWYgKCFoZGV2KSB7CiAJCQllcnIgPSAtRU5PREVWOwogCQkJZ290byBkb25lOwogCQl9CkBAIC0zNzgsNiArNDAzLDcgQEAKIAkJYXRvbWljX2luYygmaGRldi0+cHJvbWlzYyk7CiAJfQogCisJaGNpX3BpKHNrKS0+Y2hhbm5lbCA9IGhhZGRyLmhjaV9jaGFubmVsOwogCWhjaV9waShzayktPmhkZXYgPSBoZGV2OwogCXNrLT5za19zdGF0ZSA9IEJUX0JPVU5EOwogCkBAIC00NTcsNyArNDgzLDggQEAKIAlpZiAoc2stPnNrX3N0YXRlID09IEJUX0NMT1NFRCkKIAkJcmV0dXJuIDA7CiAKLQlpZiAoIShza2IgPSBza2JfcmVjdl9kYXRhZ3JhbShzaywgZmxhZ3MsIG5vYmxvY2ssICZlcnIpKSkKKwlza2IgPSBza2JfcmVjdl9kYXRhZ3JhbShzaywgZmxhZ3MsIG5vYmxvY2ssICZlcnIpOworCWlmICghc2tiKQogCQlyZXR1cm4gZXJyOwogCiAJbXNnLT5tc2dfbmFtZWxlbiA9IDA7CkBAIC00OTksNyArNTI2LDE5IEBACiAKIAlsb2NrX3NvY2soc2spOwogCi0JaWYgKCEoaGRldiA9IGhjaV9waShzayktPmhkZXYpKSB7CisJc3dpdGNoIChoY2lfcGkoc2spLT5jaGFubmVsKSB7CisJY2FzZSBIQ0lfQ0hBTk5FTF9SQVc6CisJCWJyZWFrOworCWNhc2UgSENJX0NIQU5ORUxfQ09OVFJPTDoKKwkJZXJyID0gbWdtdF9jb250cm9sKHNrLCBtc2csIGxlbik7CisJCWdvdG8gZG9uZTsKKwlkZWZhdWx0OgorCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIGRvbmU7CisJfQorCisJaGRldiA9IGhjaV9waShzayktPmhkZXY7CisJaWYgKCFoZGV2KSB7CiAJCWVyciA9IC1FQkFERkQ7CiAJCWdvdG8gZG9uZTsKIAl9CkBAIC01MDksNyArNTQ4LDggQEAKIAkJZ290byBkb25lOwogCX0KIAotCWlmICghKHNrYiA9IGJ0X3NrYl9zZW5kX2FsbG9jKHNrLCBsZW4sIG1zZy0+bXNnX2ZsYWdzICYgTVNHX0RPTlRXQUlULCAmZXJyKSkpCisJc2tiID0gYnRfc2tiX3NlbmRfYWxsb2Moc2ssIGxlbiwgbXNnLT5tc2dfZmxhZ3MgJiBNU0dfRE9OVFdBSVQsICZlcnIpOworCWlmICghc2tiKQogCQlnb3RvIGRvbmU7CiAKIAlpZiAobWVtY3B5X2Zyb21pb3ZlYyhza2JfcHV0KHNrYiwgbGVuKSwgbXNnLT5tc2dfaW92LCBsZW4pKSB7CkBAIC04MjYsMyArODY2LDYgQEAKIAogCXByb3RvX3VucmVnaXN0ZXIoJmhjaV9za19wcm90byk7CiB9CisKK21vZHVsZV9wYXJhbShlbmFibGVfbWdtdCwgYm9vbCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGVuYWJsZV9tZ210LCAiRW5hYmxlIE1hbmFnZW1lbnQgaW50ZXJmYWNlIik7CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2hpZHAvY29yZS5jIGIvbmV0L2JsdWV0b290aC9oaWRwL2NvcmUuYwppbmRleCBjMGVlOGIzLi4yOTU0NGMyIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2hpZHAvY29yZS5jCisrKyBiL25ldC9ibHVldG9vdGgvaGlkcC9jb3JlLmMKQEAgLTEwNyw2ICsxMDcsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2hpZHBfY29weV9zZXNzaW9uKHN0cnVjdCBoaWRwX3Nlc3Npb24gKnNlc3Npb24sIHN0cnVjdCBoaWRwX2Nvbm5pbmZvICpjaSkKIHsKKwltZW1zZXQoY2ksIDAsIHNpemVvZigqY2kpKTsKIAliYWNweSgmY2ktPmJkYWRkciwgJnNlc3Npb24tPmJkYWRkcik7CiAKIAljaS0+ZmxhZ3MgPSBzZXNzaW9uLT5mbGFnczsKQEAgLTExNSw3ICsxMTYsNiBAQAogCWNpLT52ZW5kb3IgID0gMHgwMDAwOwogCWNpLT5wcm9kdWN0ID0gMHgwMDAwOwogCWNpLT52ZXJzaW9uID0gMHgwMDAwOwotCW1lbXNldChjaS0+bmFtZSwgMCwgMTI4KTsKIAogCWlmIChzZXNzaW9uLT5pbnB1dCkgewogCQljaS0+dmVuZG9yICA9IHNlc3Npb24tPmlucHV0LT5pZC52ZW5kb3I7CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2wyY2FwLmMgYi9uZXQvYmx1ZXRvb3RoL2wyY2FwLmMKaW5kZXggY2Q4ZjZlYS4uYzc5MWZjZCAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9sMmNhcC5jCisrKyBiL25ldC9ibHVldG9vdGgvbDJjYXAuYwpAQCAtNTcsNyArNTcsNyBAQAogCiAjZGVmaW5lIFZFUlNJT04gIjIuMTUiCiAKLXN0YXRpYyBpbnQgZGlzYWJsZV9lcnRtID0gMDsKK3N0YXRpYyBpbnQgZGlzYWJsZV9lcnRtOwogCiBzdGF0aWMgdTMyIGwyY2FwX2ZlYXRfbWFzayA9IEwyQ0FQX0ZFQVRfRklYRURfQ0hBTjsKIHN0YXRpYyB1OCBsMmNhcF9maXhlZF9jaGFuWzhdID0geyAweDAyLCB9OwpAQCAtODMsNiArODMsMTggQEAKIHN0YXRpYyBpbnQgbDJjYXBfZXJ0bV9kYXRhX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpOwogCiAvKiAtLS0tIEwyQ0FQIHRpbWVycyAtLS0tICovCitzdGF0aWMgdm9pZCBsMmNhcF9zb2NrX3NldF90aW1lcihzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgdGltZW91dCkKK3sKKwlCVF9EQkcoInNrICVwIHN0YXRlICVkIHRpbWVvdXQgJWxkIiwgc2ssIHNrLT5za19zdGF0ZSwgdGltZW91dCk7CisJc2tfcmVzZXRfdGltZXIoc2ssICZzay0+c2tfdGltZXIsIGppZmZpZXMgKyB0aW1lb3V0KTsKK30KKworc3RhdGljIHZvaWQgbDJjYXBfc29ja19jbGVhcl90aW1lcihzdHJ1Y3Qgc29jayAqc2spCit7CisJQlRfREJHKCJzb2NrICVwIHN0YXRlICVkIiwgc2ssIHNrLT5za19zdGF0ZSk7CisJc2tfc3RvcF90aW1lcihzaywgJnNrLT5za190aW1lcik7Cit9CisKIHN0YXRpYyB2b2lkIGwyY2FwX3NvY2tfdGltZW91dCh1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKikgYXJnOwpAQCAtOTIsNiArMTA0LDE0IEBACiAKIAliaF9sb2NrX3NvY2soc2spOwogCisJaWYgKHNvY2tfb3duZWRfYnlfdXNlcihzaykpIHsKKwkJLyogc2sgaXMgb3duZWQgYnkgdXNlci4gVHJ5IGFnYWluIGxhdGVyICovCisJCWwyY2FwX3NvY2tfc2V0X3RpbWVyKHNrLCBIWiAvIDUpOworCQliaF91bmxvY2tfc29jayhzayk7CisJCXNvY2tfcHV0KHNrKTsKKwkJcmV0dXJuOworCX0KKwogCWlmIChzay0+c2tfc3RhdGUgPT0gQlRfQ09OTkVDVEVEIHx8IHNrLT5za19zdGF0ZSA9PSBCVF9DT05GSUcpCiAJCXJlYXNvbiA9IEVDT05OUkVGVVNFRDsKIAllbHNlIGlmIChzay0+c2tfc3RhdGUgPT0gQlRfQ09OTkVDVCAmJgpAQCAtMTA4LDE4ICsxMjgsNiBAQAogCXNvY2tfcHV0KHNrKTsKIH0KIAotc3RhdGljIHZvaWQgbDJjYXBfc29ja19zZXRfdGltZXIoc3RydWN0IHNvY2sgKnNrLCBsb25nIHRpbWVvdXQpCi17Ci0JQlRfREJHKCJzayAlcCBzdGF0ZSAlZCB0aW1lb3V0ICVsZCIsIHNrLCBzay0+c2tfc3RhdGUsIHRpbWVvdXQpOwotCXNrX3Jlc2V0X3RpbWVyKHNrLCAmc2stPnNrX3RpbWVyLCBqaWZmaWVzICsgdGltZW91dCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGwyY2FwX3NvY2tfY2xlYXJfdGltZXIoc3RydWN0IHNvY2sgKnNrKQotewotCUJUX0RCRygic29jayAlcCBzdGF0ZSAlZCIsIHNrLCBzay0+c2tfc3RhdGUpOwotCXNrX3N0b3BfdGltZXIoc2ssICZzay0+c2tfdGltZXIpOwotfQotCiAvKiAtLS0tIEwyQ0FQIGNoYW5uZWxzIC0tLS0gKi8KIHN0YXRpYyBzdHJ1Y3Qgc29jayAqX19sMmNhcF9nZXRfY2hhbl9ieV9kY2lkKHN0cnVjdCBsMmNhcF9jaGFuX2xpc3QgKmwsIHUxNiBjaWQpCiB7CkBAIC03NDMsMTEgKzc1MSwxMyBAQAogLyogRmluZCBzb2NrZXQgd2l0aCBwc20gYW5kIHNvdXJjZSBiZGFkZHIuCiAgKiBSZXR1cm5zIGNsb3Nlc3QgbWF0Y2guCiAgKi8KLXN0YXRpYyBzdHJ1Y3Qgc29jayAqX19sMmNhcF9nZXRfc29ja19ieV9wc20oaW50IHN0YXRlLCBfX2xlMTYgcHNtLCBiZGFkZHJfdCAqc3JjKQorc3RhdGljIHN0cnVjdCBzb2NrICpsMmNhcF9nZXRfc29ja19ieV9wc20oaW50IHN0YXRlLCBfX2xlMTYgcHNtLCBiZGFkZHJfdCAqc3JjKQogewogCXN0cnVjdCBzb2NrICpzayA9IE5VTEwsICpzazEgPSBOVUxMOwogCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOwogCisJcmVhZF9sb2NrKCZsMmNhcF9za19saXN0LmxvY2spOworCiAJc2tfZm9yX2VhY2goc2ssIG5vZGUsICZsMmNhcF9za19saXN0LmhlYWQpIHsKIAkJaWYgKHN0YXRlICYmIHNrLT5za19zdGF0ZSAhPSBzdGF0ZSkKIAkJCWNvbnRpbnVlOwpAQCAtNzYyLDIwICs3NzIsMTAgQEAKIAkJCQlzazEgPSBzazsKIAkJfQogCX0KLQlyZXR1cm4gbm9kZSA/IHNrIDogc2sxOwotfQogCi0vKiBGaW5kIHNvY2tldCB3aXRoIGdpdmVuIGFkZHJlc3MgKHBzbSwgc3JjKS4KLSAqIFJldHVybnMgbG9ja2VkIHNvY2tldCAqLwotc3RhdGljIGlubGluZSBzdHJ1Y3Qgc29jayAqbDJjYXBfZ2V0X3NvY2tfYnlfcHNtKGludCBzdGF0ZSwgX19sZTE2IHBzbSwgYmRhZGRyX3QgKnNyYykKLXsKLQlzdHJ1Y3Qgc29jayAqczsKLQlyZWFkX2xvY2soJmwyY2FwX3NrX2xpc3QubG9jayk7Ci0JcyA9IF9fbDJjYXBfZ2V0X3NvY2tfYnlfcHNtKHN0YXRlLCBwc20sIHNyYyk7Ci0JaWYgKHMpCi0JCWJoX2xvY2tfc29jayhzKTsKIAlyZWFkX3VubG9jaygmbDJjYXBfc2tfbGlzdC5sb2NrKTsKLQlyZXR1cm4gczsKKworCXJldHVybiBub2RlID8gc2sgOiBzazE7CiB9CiAKIHN0YXRpYyB2b2lkIGwyY2FwX3NvY2tfZGVzdHJ1Y3Qoc3RydWN0IHNvY2sgKnNrKQpAQCAtMjkyNiw2ICsyOTI2LDggQEAKIAkJZ290byBzZW5kcmVzcDsKIAl9CiAKKwliaF9sb2NrX3NvY2socGFyZW50KTsKKwogCS8qIENoZWNrIGlmIHRoZSBBQ0wgaXMgc2VjdXJlIGVub3VnaCAoaWYgbm90IFNEUCkgKi8KIAlpZiAocHNtICE9IGNwdV90b19sZTE2KDB4MDAwMSkgJiYKIAkJCQkhaGNpX2Nvbm5fY2hlY2tfbGlua19tb2RlKGNvbm4tPmhjb24pKSB7CkBAIC0zMDc4LDYgKzMwODAsMTQgQEAKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgorCQkvKiBkb24ndCBkZWxldGUgbDJjYXAgY2hhbm5lbCBpZiBzayBpcyBvd25lZCBieSB1c2VyICovCisJCWlmIChzb2NrX293bmVkX2J5X3VzZXIoc2spKSB7CisJCQlzay0+c2tfc3RhdGUgPSBCVF9ESVNDT05OOworCQkJbDJjYXBfc29ja19jbGVhcl90aW1lcihzayk7CisJCQlsMmNhcF9zb2NrX3NldF90aW1lcihzaywgSFogLyA1KTsKKwkJCWJyZWFrOworCQl9CisKIAkJbDJjYXBfY2hhbl9kZWwoc2ssIEVDT05OUkVGVVNFRCk7CiAJCWJyZWFrOwogCX0KQEAgLTMxMTQsOCArMzEyNCwxNCBAQAogCWlmICghc2spCiAJCXJldHVybiAtRU5PRU5UOwogCi0JaWYgKHNrLT5za19zdGF0ZSA9PSBCVF9ESVNDT05OKQorCWlmIChzay0+c2tfc3RhdGUgIT0gQlRfQ09ORklHKSB7CisJCXN0cnVjdCBsMmNhcF9jbWRfcmVqIHJlajsKKworCQlyZWoucmVhc29uID0gY3B1X3RvX2xlMTYoMHgwMDAyKTsKKwkJbDJjYXBfc2VuZF9jbWQoY29ubiwgY21kLT5pZGVudCwgTDJDQVBfQ09NTUFORF9SRUosCisJCQkJc2l6ZW9mKHJlaiksICZyZWopOwogCQlnb3RvIHVubG9jazsKKwl9CiAKIAkvKiBSZWplY3QgaWYgY29uZmlnIGJ1ZmZlciBpcyB0b28gc21hbGwuICovCiAJbGVuID0gY21kX2xlbiAtIHNpemVvZigqcmVxKTsKQEAgLTMyODMsNiArMzI5OSwxNSBAQAogCiAJc2stPnNrX3NodXRkb3duID0gU0hVVERPV05fTUFTSzsKIAorCS8qIGRvbid0IGRlbGV0ZSBsMmNhcCBjaGFubmVsIGlmIHNrIGlzIG93bmVkIGJ5IHVzZXIgKi8KKwlpZiAoc29ja19vd25lZF9ieV91c2VyKHNrKSkgeworCQlzay0+c2tfc3RhdGUgPSBCVF9ESVNDT05OOworCQlsMmNhcF9zb2NrX2NsZWFyX3RpbWVyKHNrKTsKKwkJbDJjYXBfc29ja19zZXRfdGltZXIoc2ssIEhaIC8gNSk7CisJCWJoX3VubG9ja19zb2NrKHNrKTsKKwkJcmV0dXJuIDA7CisJfQorCiAJbDJjYXBfY2hhbl9kZWwoc2ssIEVDT05OUkVTRVQpOwogCWJoX3VubG9ja19zb2NrKHNrKTsKIApAQCAtMzMwNSw2ICszMzMwLDE1IEBACiAJaWYgKCFzaykKIAkJcmV0dXJuIDA7CiAKKwkvKiBkb24ndCBkZWxldGUgbDJjYXAgY2hhbm5lbCBpZiBzayBpcyBvd25lZCBieSB1c2VyICovCisJaWYgKHNvY2tfb3duZWRfYnlfdXNlcihzaykpIHsKKwkJc2stPnNrX3N0YXRlID0gQlRfRElTQ09OTjsKKwkJbDJjYXBfc29ja19jbGVhcl90aW1lcihzayk7CisJCWwyY2FwX3NvY2tfc2V0X3RpbWVyKHNrLCBIWiAvIDUpOworCQliaF91bmxvY2tfc29jayhzayk7CisJCXJldHVybiAwOworCX0KKwogCWwyY2FwX2NoYW5fZGVsKHNrLCAwKTsKIAliaF91bmxvY2tfc29jayhzayk7CiAKQEAgLTQxMzQsMTEgKzQxNjgsMTAgQEAKIAkJCV9fbW9kX3JldHJhbnNfdGltZXIoKTsKIAogCQlwaS0+Y29ubl9zdGF0ZSAmPSB+TDJDQVBfQ09OTl9SRU1PVEVfQlVTWTsKLQkJaWYgKHBpLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9TUkVKX1NFTlQpIHsKKwkJaWYgKHBpLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9TUkVKX1NFTlQpCiAJCQlsMmNhcF9zZW5kX2FjayhwaSk7Ci0JCX0gZWxzZSB7CisJCWVsc2UKIAkJCWwyY2FwX2VydG1fc2VuZChzayk7Ci0JCX0KIAl9CiB9CiAKQEAgLTQ0MzAsNiArNDQ2Myw4IEBACiAJaWYgKCFzaykKIAkJZ290byBkcm9wOwogCisJYmhfbG9ja19zb2NrKHNrKTsKKwogCUJUX0RCRygic2sgJXAsIGxlbiAlZCIsIHNrLCBza2ItPmxlbik7CiAKIAlpZiAoc2stPnNrX3N0YXRlICE9IEJUX0JPVU5EICYmIHNrLT5za19zdGF0ZSAhPSBCVF9DT05ORUNURUQpCkBAIC00ODQxLDggKzQ4NzYsMTAgQEAKIAkJcmV0dXJuIGVycjsKIAogCV9idXN5X3dxID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoImwyY2FwIik7Ci0JaWYgKCFfYnVzeV93cSkKLQkJZ290byBlcnJvcjsKKwlpZiAoIV9idXN5X3dxKSB7CisJCXByb3RvX3VucmVnaXN0ZXIoJmwyY2FwX3Byb3RvKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQogCiAJZXJyID0gYnRfc29ja19yZWdpc3RlcihCVFBST1RPX0wyQ0FQLCAmbDJjYXBfc29ja19mYW1pbHlfb3BzKTsKIAlpZiAoZXJyIDwgMCkgewpAQCAtNDg3MCw2ICs0OTA3LDcgQEAKIAlyZXR1cm4gMDsKIAogZXJyb3I6CisJZGVzdHJveV93b3JrcXVldWUoX2J1c3lfd3EpOwogCXByb3RvX3VucmVnaXN0ZXIoJmwyY2FwX3Byb3RvKTsKIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9tZ210LmMgYi9uZXQvYmx1ZXRvb3RoL21nbXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODI3ZmQ5MAotLS0gL2Rldi9udWxsCisrKyBiL25ldC9ibHVldG9vdGgvbWdtdC5jCkBAIC0wLDAgKzEsMzA4IEBACisvKgorICAgQmx1ZVogLSBCbHVldG9vdGggcHJvdG9jb2wgc3RhY2sgZm9yIExpbnV4CisgICBDb3B5cmlnaHQgKEMpIDIwMTAgIE5va2lhIENvcnBvcmF0aW9uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247CisKKyAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTCisgICBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAgIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQgT0YgVEhJUkQgUEFSVFkgUklHSFRTLgorICAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIoUykgQU5EIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWQorICAgQ0xBSU0sIE9SIEFOWSBTUEVDSUFMIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgT1IgQU5ZIERBTUFHRVMKKyAgIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICAgQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAgIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisKKyAgIEFMTCBMSUFCSUxJVFksIElOQ0xVRElORyBMSUFCSUxJVFkgRk9SIElORlJJTkdFTUVOVCBPRiBBTlkgUEFURU5UUywKKyAgIENPUFlSSUdIVFMsIFRSQURFTUFSS1MgT1IgT1RIRVIgUklHSFRTLCBSRUxBVElORyBUTyBVU0UgT0YgVEhJUworICAgU09GVFdBUkUgSVMgRElTQ0xBSU1FRC4KKyovCisKKy8qIEJsdWV0b290aCBIQ0kgTWFuYWdlbWVudCBpbnRlcmZhY2UgKi8KKworI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorCisjaW5jbHVkZSA8bmV0L2JsdWV0b290aC9ibHVldG9vdGguaD4KKyNpbmNsdWRlIDxuZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmg+CisjaW5jbHVkZSA8bmV0L2JsdWV0b290aC9tZ210Lmg+CisKKyNkZWZpbmUgTUdNVF9WRVJTSU9OCTAKKyNkZWZpbmUgTUdNVF9SRVZJU0lPTgkxCisKK3N0YXRpYyBpbnQgY21kX3N0YXR1cyhzdHJ1Y3Qgc29jayAqc2ssIHUxNiBjbWQsIHU4IHN0YXR1cykKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBtZ210X2hkciAqaGRyOworCXN0cnVjdCBtZ210X2V2X2NtZF9zdGF0dXMgKmV2OworCisJQlRfREJHKCJzb2NrICVwIiwgc2spOworCisJc2tiID0gYWxsb2Nfc2tiKHNpemVvZigqaGRyKSArIHNpemVvZigqZXYpLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwloZHIgPSAodm9pZCAqKSBza2JfcHV0KHNrYiwgc2l6ZW9mKCpoZHIpKTsKKworCWhkci0+b3Bjb2RlID0gY3B1X3RvX2xlMTYoTUdNVF9FVl9DTURfU1RBVFVTKTsKKwloZHItPmxlbiA9IGNwdV90b19sZTE2KHNpemVvZigqZXYpKTsKKworCWV2ID0gKHZvaWQgKikgc2tiX3B1dChza2IsIHNpemVvZigqZXYpKTsKKwlldi0+c3RhdHVzID0gc3RhdHVzOworCXB1dF91bmFsaWduZWRfbGUxNihjbWQsICZldi0+b3Bjb2RlKTsKKworCWlmIChzb2NrX3F1ZXVlX3Jjdl9za2Ioc2ssIHNrYikgPCAwKQorCQlrZnJlZV9za2Ioc2tiKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlYWRfdmVyc2lvbihzdHJ1Y3Qgc29jayAqc2spCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgbWdtdF9oZHIgKmhkcjsKKwlzdHJ1Y3QgbWdtdF9ldl9jbWRfY29tcGxldGUgKmV2OworCXN0cnVjdCBtZ210X3JwX3JlYWRfdmVyc2lvbiAqcnA7CisKKwlCVF9EQkcoInNvY2sgJXAiLCBzayk7CisKKwlza2IgPSBhbGxvY19za2Ioc2l6ZW9mKCpoZHIpICsgc2l6ZW9mKCpldikgKyBzaXplb2YoKnJwKSwgR0ZQX0FUT01JQyk7CisJaWYgKCFza2IpCisJCXJldHVybiAtRU5PTUVNOworCisJaGRyID0gKHZvaWQgKikgc2tiX3B1dChza2IsIHNpemVvZigqaGRyKSk7CisJaGRyLT5vcGNvZGUgPSBjcHVfdG9fbGUxNihNR01UX0VWX0NNRF9DT01QTEVURSk7CisJaGRyLT5sZW4gPSBjcHVfdG9fbGUxNihzaXplb2YoKmV2KSArIHNpemVvZigqcnApKTsKKworCWV2ID0gKHZvaWQgKikgc2tiX3B1dChza2IsIHNpemVvZigqZXYpKTsKKwlwdXRfdW5hbGlnbmVkX2xlMTYoTUdNVF9PUF9SRUFEX1ZFUlNJT04sICZldi0+b3Bjb2RlKTsKKworCXJwID0gKHZvaWQgKikgc2tiX3B1dChza2IsIHNpemVvZigqcnApKTsKKwlycC0+dmVyc2lvbiA9IE1HTVRfVkVSU0lPTjsKKwlwdXRfdW5hbGlnbmVkX2xlMTYoTUdNVF9SRVZJU0lPTiwgJnJwLT5yZXZpc2lvbik7CisKKwlpZiAoc29ja19xdWV1ZV9yY3Zfc2tiKHNrLCBza2IpIDwgMCkKKwkJa2ZyZWVfc2tiKHNrYik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByZWFkX2luZGV4X2xpc3Qoc3RydWN0IHNvY2sgKnNrKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IG1nbXRfaGRyICpoZHI7CisJc3RydWN0IG1nbXRfZXZfY21kX2NvbXBsZXRlICpldjsKKwlzdHJ1Y3QgbWdtdF9ycF9yZWFkX2luZGV4X2xpc3QgKnJwOworCXN0cnVjdCBsaXN0X2hlYWQgKnA7CisJc2l6ZV90IGJvZHlfbGVuOworCXUxNiBjb3VudDsKKwlpbnQgaTsKKworCUJUX0RCRygic29jayAlcCIsIHNrKTsKKworCXJlYWRfbG9jaygmaGNpX2Rldl9saXN0X2xvY2spOworCisJY291bnQgPSAwOworCWxpc3RfZm9yX2VhY2gocCwgJmhjaV9kZXZfbGlzdCkgeworCQljb3VudCsrOworCX0KKworCWJvZHlfbGVuID0gc2l6ZW9mKCpldikgKyBzaXplb2YoKnJwKSArICgyICogY291bnQpOworCXNrYiA9IGFsbG9jX3NrYihzaXplb2YoKmhkcikgKyBib2R5X2xlbiwgR0ZQX0FUT01JQyk7CisJaWYgKCFza2IpCisJCXJldHVybiAtRU5PTUVNOworCisJaGRyID0gKHZvaWQgKikgc2tiX3B1dChza2IsIHNpemVvZigqaGRyKSk7CisJaGRyLT5vcGNvZGUgPSBjcHVfdG9fbGUxNihNR01UX0VWX0NNRF9DT01QTEVURSk7CisJaGRyLT5sZW4gPSBjcHVfdG9fbGUxNihib2R5X2xlbik7CisKKwlldiA9ICh2b2lkICopIHNrYl9wdXQoc2tiLCBzaXplb2YoKmV2KSk7CisJcHV0X3VuYWxpZ25lZF9sZTE2KE1HTVRfT1BfUkVBRF9JTkRFWF9MSVNULCAmZXYtPm9wY29kZSk7CisKKwlycCA9ICh2b2lkICopIHNrYl9wdXQoc2tiLCBzaXplb2YoKnJwKSArICgyICogY291bnQpKTsKKwlwdXRfdW5hbGlnbmVkX2xlMTYoY291bnQsICZycC0+bnVtX2NvbnRyb2xsZXJzKTsKKworCWkgPSAwOworCWxpc3RfZm9yX2VhY2gocCwgJmhjaV9kZXZfbGlzdCkgeworCQlzdHJ1Y3QgaGNpX2RldiAqZCA9IGxpc3RfZW50cnkocCwgc3RydWN0IGhjaV9kZXYsIGxpc3QpOworCQlwdXRfdW5hbGlnbmVkX2xlMTYoZC0+aWQsICZycC0+aW5kZXhbaSsrXSk7CisJCUJUX0RCRygiQWRkZWQgaGNpJXUiLCBkLT5pZCk7CisJfQorCisJcmVhZF91bmxvY2soJmhjaV9kZXZfbGlzdF9sb2NrKTsKKworCWlmIChzb2NrX3F1ZXVlX3Jjdl9za2Ioc2ssIHNrYikgPCAwKQorCQlrZnJlZV9za2Ioc2tiKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlYWRfY29udHJvbGxlcl9pbmZvKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgY2hhciAqZGF0YSwgdTE2IGxlbikKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBtZ210X2hkciAqaGRyOworCXN0cnVjdCBtZ210X2V2X2NtZF9jb21wbGV0ZSAqZXY7CisJc3RydWN0IG1nbXRfcnBfcmVhZF9pbmZvICpycDsKKwlzdHJ1Y3QgbWdtdF9jcF9yZWFkX2luZm8gKmNwOworCXN0cnVjdCBoY2lfZGV2ICpoZGV2OworCXUxNiBkZXZfaWQ7CisKKwlCVF9EQkcoInNvY2sgJXAiLCBzayk7CisKKwlpZiAobGVuICE9IDIpCisJCXJldHVybiBjbWRfc3RhdHVzKHNrLCBNR01UX09QX1JFQURfSU5GTywgRUlOVkFMKTsKKworCXNrYiA9IGFsbG9jX3NrYihzaXplb2YoKmhkcikgKyBzaXplb2YoKmV2KSArIHNpemVvZigqcnApLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwloZHIgPSAodm9pZCAqKSBza2JfcHV0KHNrYiwgc2l6ZW9mKCpoZHIpKTsKKwloZHItPm9wY29kZSA9IGNwdV90b19sZTE2KE1HTVRfRVZfQ01EX0NPTVBMRVRFKTsKKwloZHItPmxlbiA9IGNwdV90b19sZTE2KHNpemVvZigqZXYpICsgc2l6ZW9mKCpycCkpOworCisJZXYgPSAodm9pZCAqKSBza2JfcHV0KHNrYiwgc2l6ZW9mKCpldikpOworCXB1dF91bmFsaWduZWRfbGUxNihNR01UX09QX1JFQURfSU5GTywgJmV2LT5vcGNvZGUpOworCisJcnAgPSAodm9pZCAqKSBza2JfcHV0KHNrYiwgc2l6ZW9mKCpycCkpOworCisJY3AgPSAodm9pZCAqKSBkYXRhOworCWRldl9pZCA9IGdldF91bmFsaWduZWRfbGUxNigmY3AtPmluZGV4KTsKKworCUJUX0RCRygicmVxdWVzdCBmb3IgaGNpJXUiLCBkZXZfaWQpOworCisJaGRldiA9IGhjaV9kZXZfZ2V0KGRldl9pZCk7CisJaWYgKCFoZGV2KSB7CisJCWtmcmVlX3NrYihza2IpOworCQlyZXR1cm4gY21kX3N0YXR1cyhzaywgTUdNVF9PUF9SRUFEX0lORk8sIEVOT0RFVik7CisJfQorCisJaGNpX2Rldl9sb2NrX2JoKGhkZXYpOworCisJcHV0X3VuYWxpZ25lZF9sZTE2KGhkZXYtPmlkLCAmcnAtPmluZGV4KTsKKwlycC0+dHlwZSA9IGhkZXYtPmRldl90eXBlOworCisJcnAtPnBvd2VyZWQgPSB0ZXN0X2JpdChIQ0lfVVAsICZoZGV2LT5mbGFncyk7CisJcnAtPmRpc2NvdmVyYWJsZSA9IHRlc3RfYml0KEhDSV9JU0NBTiwgJmhkZXYtPmZsYWdzKTsKKwlycC0+cGFpcmFibGUgPSB0ZXN0X2JpdChIQ0lfUFNDQU4sICZoZGV2LT5mbGFncyk7CisKKwlpZiAodGVzdF9iaXQoSENJX0FVVEgsICZoZGV2LT5mbGFncykpCisJCXJwLT5zZWNfbW9kZSA9IDM7CisJZWxzZSBpZiAoaGRldi0+c3NwX21vZGUgPiAwKQorCQlycC0+c2VjX21vZGUgPSA0OworCWVsc2UKKwkJcnAtPnNlY19tb2RlID0gMjsKKworCWJhY3B5KCZycC0+YmRhZGRyLCAmaGRldi0+YmRhZGRyKTsKKwltZW1jcHkocnAtPmZlYXR1cmVzLCBoZGV2LT5mZWF0dXJlcywgOCk7CisJbWVtY3B5KHJwLT5kZXZfY2xhc3MsIGhkZXYtPmRldl9jbGFzcywgMyk7CisJcHV0X3VuYWxpZ25lZF9sZTE2KGhkZXYtPm1hbnVmYWN0dXJlciwgJnJwLT5tYW51ZmFjdHVyZXIpOworCXJwLT5oY2lfdmVyID0gaGRldi0+aGNpX3ZlcjsKKwlwdXRfdW5hbGlnbmVkX2xlMTYoaGRldi0+aGNpX3JldiwgJnJwLT5oY2lfcmV2KTsKKworCWhjaV9kZXZfdW5sb2NrX2JoKGhkZXYpOworCWhjaV9kZXZfcHV0KGhkZXYpOworCisJaWYgKHNvY2tfcXVldWVfcmN2X3NrYihzaywgc2tiKSA8IDApCisJCWtmcmVlX3NrYihza2IpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBtZ210X2NvbnRyb2woc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBtc2dsZW4pCit7CisJdW5zaWduZWQgY2hhciAqYnVmOworCXN0cnVjdCBtZ210X2hkciAqaGRyOworCXUxNiBvcGNvZGUsIGxlbjsKKwlpbnQgZXJyOworCisJQlRfREJHKCJnb3QgJXp1IGJ5dGVzIiwgbXNnbGVuKTsKKworCWlmIChtc2dsZW4gPCBzaXplb2YoKmhkcikpCisJCXJldHVybiAtRUlOVkFMOworCisJYnVmID0ga21hbGxvYyhtc2dsZW4sIEdGUF9BVE9NSUMpOworCWlmICghYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChtZW1jcHlfZnJvbWlvdmVjKGJ1ZiwgbXNnLT5tc2dfaW92LCBtc2dsZW4pKSB7CisJCWVyciA9IC1FRkFVTFQ7CisJCWdvdG8gZG9uZTsKKwl9CisKKwloZHIgPSAoc3RydWN0IG1nbXRfaGRyICopIGJ1ZjsKKwlvcGNvZGUgPSBnZXRfdW5hbGlnbmVkX2xlMTYoJmhkci0+b3Bjb2RlKTsKKwlsZW4gPSBnZXRfdW5hbGlnbmVkX2xlMTYoJmhkci0+bGVuKTsKKworCWlmIChsZW4gIT0gbXNnbGVuIC0gc2l6ZW9mKCpoZHIpKSB7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlzd2l0Y2ggKG9wY29kZSkgeworCWNhc2UgTUdNVF9PUF9SRUFEX1ZFUlNJT046CisJCWVyciA9IHJlYWRfdmVyc2lvbihzayk7CisJCWJyZWFrOworCWNhc2UgTUdNVF9PUF9SRUFEX0lOREVYX0xJU1Q6CisJCWVyciA9IHJlYWRfaW5kZXhfbGlzdChzayk7CisJCWJyZWFrOworCWNhc2UgTUdNVF9PUF9SRUFEX0lORk86CisJCWVyciA9IHJlYWRfY29udHJvbGxlcl9pbmZvKHNrLCBidWYgKyBzaXplb2YoKmhkciksIGxlbik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJUX0RCRygiVW5rbm93biBvcCAldSIsIG9wY29kZSk7CisJCWVyciA9IGNtZF9zdGF0dXMoc2ssIG9wY29kZSwgMHgwMSk7CisJCWJyZWFrOworCX0KKworCWlmIChlcnIgPCAwKQorCQlnb3RvIGRvbmU7CisKKwllcnIgPSBtc2dsZW47CisKK2RvbmU6CisJa2ZyZWUoYnVmKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IG1nbXRfZXZlbnQodTE2IGV2ZW50LCB2b2lkICpkYXRhLCB1MTYgZGF0YV9sZW4pCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgbWdtdF9oZHIgKmhkcjsKKworCXNrYiA9IGFsbG9jX3NrYihzaXplb2YoKmhkcikgKyBkYXRhX2xlbiwgR0ZQX0FUT01JQyk7CisJaWYgKCFza2IpCisJCXJldHVybiAtRU5PTUVNOworCisJYnRfY2Ioc2tiKS0+Y2hhbm5lbCA9IEhDSV9DSEFOTkVMX0NPTlRST0w7CisKKwloZHIgPSAodm9pZCAqKSBza2JfcHV0KHNrYiwgc2l6ZW9mKCpoZHIpKTsKKwloZHItPm9wY29kZSA9IGNwdV90b19sZTE2KGV2ZW50KTsKKwloZHItPmxlbiA9IGNwdV90b19sZTE2KGRhdGFfbGVuKTsKKworCW1lbWNweShza2JfcHV0KHNrYiwgZGF0YV9sZW4pLCBkYXRhLCBkYXRhX2xlbik7CisKKwloY2lfc2VuZF90b19zb2NrKE5VTEwsIHNrYik7CisJa2ZyZWVfc2tiKHNrYik7CisKKwlyZXR1cm4gMDsKK30KKworaW50IG1nbXRfaW5kZXhfYWRkZWQodTE2IGluZGV4KQoreworCXN0cnVjdCBtZ210X2V2X2luZGV4X2FkZGVkIGV2OworCisJcHV0X3VuYWxpZ25lZF9sZTE2KGluZGV4LCAmZXYuaW5kZXgpOworCisJcmV0dXJuIG1nbXRfZXZlbnQoTUdNVF9FVl9JTkRFWF9BRERFRCwgJmV2LCBzaXplb2YoZXYpKTsKK30KKworaW50IG1nbXRfaW5kZXhfcmVtb3ZlZCh1MTYgaW5kZXgpCit7CisJc3RydWN0IG1nbXRfZXZfaW5kZXhfYWRkZWQgZXY7CisKKwlwdXRfdW5hbGlnbmVkX2xlMTYoaW5kZXgsICZldi5pbmRleCk7CisKKwlyZXR1cm4gbWdtdF9ldmVudChNR01UX0VWX0lOREVYX1JFTU9WRUQsICZldiwgc2l6ZW9mKGV2KSk7Cit9CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL3JmY29tbS9jb3JlLmMgYi9uZXQvYmx1ZXRvb3RoL3JmY29tbS9jb3JlLmMKaW5kZXggNDMyYTlhNi4uZmY4YWFhNyAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9yZmNvbW0vY29yZS5jCisrKyBiL25ldC9ibHVldG9vdGgvcmZjb21tL2NvcmUuYwpAQCAtNDEsNyArNDEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAogI2luY2x1ZGUgPG5ldC9zb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgogCiAjaW5jbHVkZSA8bmV0L2JsdWV0b290aC9ibHVldG9vdGguaD4KQEAgLTUxLDEwICs1MSwxMCBAQAogCiAjZGVmaW5lIFZFUlNJT04gIjEuMTEiCiAKLXN0YXRpYyBpbnQgZGlzYWJsZV9jZmMgPSAwOworc3RhdGljIGludCBkaXNhYmxlX2NmYzsKK3N0YXRpYyBpbnQgbDJjYXBfZXJ0bTsKIHN0YXRpYyBpbnQgY2hhbm5lbF9tdHUgPSAtMTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbDJjYXBfbXR1ID0gUkZDT01NX01BWF9MMkNBUF9NVFU7Ci1zdGF0aWMgaW50IGwyY2FwX2VydG0gPSAwOwogCiBzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpyZmNvbW1fdGhyZWFkOwogCkBAIC0xOTAyLDcgKzE5MDIsNyBAQAogCiAJQlRfREJHKCIlcCBzdGF0ZSAlbGQiLCBzLCBzLT5zdGF0ZSk7CiAKLQlzd2l0Y2goc2stPnNrX3N0YXRlKSB7CisJc3dpdGNoIChzay0+c2tfc3RhdGUpIHsKIAljYXNlIEJUX0NPTk5FQ1RFRDoKIAkJcy0+c3RhdGUgPSBCVF9DT05ORUNUOwogCmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL3JmY29tbS9zb2NrLmMgYi9uZXQvYmx1ZXRvb3RoL3JmY29tbS9zb2NrLmMKaW5kZXggYWVjNTA1Zi4uNjZjYzFmMCAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9yZmNvbW0vc29jay5jCisrKyBiL25ldC9ibHVldG9vdGgvcmZjb21tL3NvY2suYwpAQCAtNDUsNyArNDUsNyBAQAogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CiAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAKICNpbmNsdWRlIDxuZXQvYmx1ZXRvb3RoL2JsdWV0b290aC5oPgogI2luY2x1ZGUgPG5ldC9ibHVldG9vdGgvaGNpX2NvcmUuaD4KQEAgLTE0MCwxMSArMTQwLDEzIEBACiAvKiBGaW5kIHNvY2tldCB3aXRoIGNoYW5uZWwgYW5kIHNvdXJjZSBiZGFkZHIuCiAgKiBSZXR1cm5zIGNsb3Nlc3QgbWF0Y2guCiAgKi8KLXN0YXRpYyBzdHJ1Y3Qgc29jayAqX19yZmNvbW1fZ2V0X3NvY2tfYnlfY2hhbm5lbChpbnQgc3RhdGUsIHU4IGNoYW5uZWwsIGJkYWRkcl90ICpzcmMpCitzdGF0aWMgc3RydWN0IHNvY2sgKnJmY29tbV9nZXRfc29ja19ieV9jaGFubmVsKGludCBzdGF0ZSwgdTggY2hhbm5lbCwgYmRhZGRyX3QgKnNyYykKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBOVUxMLCAqc2sxID0gTlVMTDsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKIAorCXJlYWRfbG9jaygmcmZjb21tX3NrX2xpc3QubG9jayk7CisKIAlza19mb3JfZWFjaChzaywgbm9kZSwgJnJmY29tbV9za19saXN0LmhlYWQpIHsKIAkJaWYgKHN0YXRlICYmIHNrLT5za19zdGF0ZSAhPSBzdGF0ZSkKIAkJCWNvbnRpbnVlOwpAQCAtMTU5LDE5ICsxNjEsMTAgQEAKIAkJCQlzazEgPSBzazsKIAkJfQogCX0KLQlyZXR1cm4gbm9kZSA/IHNrIDogc2sxOwotfQogCi0vKiBGaW5kIHNvY2tldCB3aXRoIGdpdmVuIGFkZHJlc3MgKGNoYW5uZWwsIHNyYykuCi0gKiBSZXR1cm5zIGxvY2tlZCBzb2NrZXQgKi8KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHNvY2sgKnJmY29tbV9nZXRfc29ja19ieV9jaGFubmVsKGludCBzdGF0ZSwgdTggY2hhbm5lbCwgYmRhZGRyX3QgKnNyYykKLXsKLQlzdHJ1Y3Qgc29jayAqczsKLQlyZWFkX2xvY2soJnJmY29tbV9za19saXN0LmxvY2spOwotCXMgPSBfX3JmY29tbV9nZXRfc29ja19ieV9jaGFubmVsKHN0YXRlLCBjaGFubmVsLCBzcmMpOwotCWlmIChzKSBiaF9sb2NrX3NvY2socyk7CiAJcmVhZF91bmxvY2soJnJmY29tbV9za19saXN0LmxvY2spOwotCXJldHVybiBzOworCisJcmV0dXJuIG5vZGUgPyBzayA6IHNrMTsKIH0KIAogc3RhdGljIHZvaWQgcmZjb21tX3NvY2tfZGVzdHJ1Y3Qoc3RydWN0IHNvY2sgKnNrKQpAQCAtODk1LDcgKzg4OCw4IEBACiAKIAlCVF9EQkcoInNvY2sgJXAsIHNrICVwIiwgc29jaywgc2spOwogCi0JaWYgKCFzaykgcmV0dXJuIDA7CisJaWYgKCFzaykKKwkJcmV0dXJuIDA7CiAKIAlsb2NrX3NvY2soc2spOwogCWlmICghc2stPnNrX3NodXRkb3duKSB7CkBAIC05NDUsNiArOTM5LDggQEAKIAlpZiAoIXBhcmVudCkKIAkJcmV0dXJuIDA7CiAKKwliaF9sb2NrX3NvY2socGFyZW50KTsKKwogCS8qIENoZWNrIGZvciBiYWNrbG9nIHNpemUgKi8KIAlpZiAoc2tfYWNjZXB0cV9pc19mdWxsKHBhcmVudCkpIHsKIAkJQlRfREJHKCJiYWNrbG9nIGZ1bGwgJWQiLCBwYXJlbnQtPnNrX2Fja19iYWNrbG9nKTsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvcmZjb21tL3R0eS5jIGIvbmV0L2JsdWV0b290aC9yZmNvbW0vdHR5LmMKaW5kZXggYTliODFmNS4uMjU3NWMyZCAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9yZmNvbW0vdHR5LmMKKysrIGIvbmV0L2JsdWV0b290aC9yZmNvbW0vdHR5LmMKQEAgLTU4LDkgKzU4LDkgQEAKIAogCWJkYWRkcl90CQlzcmM7CiAJYmRhZGRyX3QJCWRzdDsKLQl1OCAJCQljaGFubmVsOworCXU4CQkJY2hhbm5lbDsKIAotCXVpbnQgCQkJbW9kZW1fc3RhdHVzOworCXVpbnQJCQltb2RlbV9zdGF0dXM7CiAKIAlzdHJ1Y3QgcmZjb21tX2RsYwkqZGxjOwogCXN0cnVjdCB0dHlfc3RydWN0CSp0dHk7CkBAIC02OSw3ICs2OSw3IEBACiAKIAlzdHJ1Y3QgZGV2aWNlCQkqdHR5X2RldjsKIAotCWF0b21pY190IAkJd21lbV9hbGxvYzsKKwlhdG9taWNfdAkJd21lbV9hbGxvYzsKIAogCXN0cnVjdCBza19idWZmX2hlYWQJcGVuZGluZzsKIH07CkBAIC00MzEsNyArNDMxLDggQEAKIAogCUJUX0RCRygiZGV2X2lkICVkIGZsYWdzIDB4JXgiLCByZXEuZGV2X2lkLCByZXEuZmxhZ3MpOwogCi0JaWYgKCEoZGV2ID0gcmZjb21tX2Rldl9nZXQocmVxLmRldl9pZCkpKQorCWRldiA9IHJmY29tbV9kZXZfZ2V0KHJlcS5kZXZfaWQpOworCWlmICghZGV2KQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCWlmIChkZXYtPmZsYWdzICE9IE5PQ0FQX0ZMQUdTICYmICFjYXBhYmxlKENBUF9ORVRfQURNSU4pKSB7CkBAIC00NzAsNyArNDcxLDggQEAKIAogCXNpemUgPSBzaXplb2YoKmRsKSArIGRldl9udW0gKiBzaXplb2YoKmRpKTsKIAotCWlmICghKGRsID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKSkpCisJZGwgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCWlmICghZGwpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJZGkgPSBkbC0+ZGV2X2luZm87CkBAIC01MTMsNyArNTE1LDggQEAKIAlpZiAoY29weV9mcm9tX3VzZXIoJmRpLCBhcmcsIHNpemVvZihkaSkpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWlmICghKGRldiA9IHJmY29tbV9kZXZfZ2V0KGRpLmlkKSkpCisJZGV2ID0gcmZjb21tX2Rldl9nZXQoZGkuaWQpOworCWlmICghZGV2KQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCWRpLmZsYWdzICAgPSBkZXYtPmZsYWdzOwpAQCAtNTYxLDcgKzU2NCw4IEBACiAJCXJldHVybjsKIAl9CiAKLQlpZiAoISh0dHkgPSBkZXYtPnR0eSkgfHwgIXNrYl9xdWV1ZV9lbXB0eSgmZGV2LT5wZW5kaW5nKSkgeworCXR0eSA9IGRldi0+dHR5OworCWlmICghdHR5IHx8ICFza2JfcXVldWVfZW1wdHkoJmRldi0+cGVuZGluZykpIHsKIAkJc2tiX3F1ZXVlX3RhaWwoJmRldi0+cGVuZGluZywgc2tiKTsKIAkJcmV0dXJuOwogCX0KQEAgLTc5Niw3ICs4MDAsOCBAQAogCiAJCW1lbWNweShza2JfcHV0KHNrYiwgc2l6ZSksIGJ1ZiArIHNlbnQsIHNpemUpOwogCi0JCWlmICgoZXJyID0gcmZjb21tX2RsY19zZW5kKGRsYywgc2tiKSkgPCAwKSB7CisJCWVyciA9IHJmY29tbV9kbGNfc2VuZChkbGMsIHNrYik7CisJCWlmIChlcnIgPCAwKSB7CiAJCQlrZnJlZV9za2Ioc2tiKTsKIAkJCWJyZWFrOwogCQl9CkBAIC04OTIsNyArODk3LDcgQEAKIAogCS8qIFBhcml0eSBvbi9vZmYgYW5kIHdoZW4gb24sIG9kZC9ldmVuICovCiAJaWYgKCgob2xkLT5jX2NmbGFnICYgUEFSRU5CKSAhPSAobmV3LT5jX2NmbGFnICYgUEFSRU5CKSkgfHwKLQkJCSgob2xkLT5jX2NmbGFnICYgUEFST0REKSAhPSAobmV3LT5jX2NmbGFnICYgUEFST0REKSkgKSB7CisJCQkoKG9sZC0+Y19jZmxhZyAmIFBBUk9ERCkgIT0gKG5ldy0+Y19jZmxhZyAmIFBBUk9ERCkpKSB7CiAJCWNoYW5nZXMgfD0gUkZDT01NX1JQTl9QTV9QQVJJVFk7CiAJCUJUX0RCRygiUGFyaXR5IGNoYW5nZSBkZXRlY3RlZC4iKTsKIAl9CkBAIC05MzcsMTEgKzk0MiwxMCBAQAogCS8qIFBPU0lYIGRvZXMgbm90IHN1cHBvcnQgMS41IHN0b3AgYml0cyBhbmQgUkZDT01NIGRvZXMgbm90CiAJICogc3VwcG9ydCAyIHN0b3AgYml0cy4gU28gYSByZXF1ZXN0IGZvciAyIHN0b3AgYml0cyBnZXRzCiAJICogdHJhbnNsYXRlZCB0byAxLjUgc3RvcCBiaXRzICovCi0JaWYgKG5ldy0+Y19jZmxhZyAmIENTVE9QQikgeworCWlmIChuZXctPmNfY2ZsYWcgJiBDU1RPUEIpCiAJCXN0b3BfYml0cyA9IFJGQ09NTV9SUE5fU1RPUF8xNTsKLQl9IGVsc2UgeworCWVsc2UKIAkJc3RvcF9iaXRzID0gUkZDT01NX1JQTl9TVE9QXzE7Ci0JfQogCiAJLyogSGFuZGxlIG51bWJlciBvZiBkYXRhIGJpdHMgWzUtOF0gKi8KIAlpZiAoKG9sZC0+Y19jZmxhZyAmIENTSVpFKSAhPSAobmV3LT5jX2NmbGFnICYgQ1NJWkUpKQpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9zY28uYyBiL25ldC9ibHVldG9vdGgvc2NvLmMKaW5kZXggNjZiOWU1Yy4uOTYwYzZkMSAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9zY28uYworKysgYi9uZXQvYmx1ZXRvb3RoL3Njby5jCkBAIC00NCw3ICs0NCw3IEBACiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KIAogI2luY2x1ZGUgPG5ldC9ibHVldG9vdGgvYmx1ZXRvb3RoLmg+CiAjaW5jbHVkZSA8bmV0L2JsdWV0b290aC9oY2lfY29yZS5oPgpAQCAtNTIsNyArNTIsNyBAQAogCiAjZGVmaW5lIFZFUlNJT04gIjAuNiIKIAotc3RhdGljIGludCBkaXNhYmxlX2VzY28gPSAwOworc3RhdGljIGludCBkaXNhYmxlX2VzY287CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHNjb19zb2NrX29wczsKIApAQCAtMTM4LDE2ICsxMzgsMTcgQEAKIAogc3RhdGljIGludCBzY29fY29ubl9kZWwoc3RydWN0IGhjaV9jb25uICpoY29uLCBpbnQgZXJyKQogewotCXN0cnVjdCBzY29fY29ubiAqY29ubjsKKwlzdHJ1Y3Qgc2NvX2Nvbm4gKmNvbm4gPSBoY29uLT5zY29fZGF0YTsKIAlzdHJ1Y3Qgc29jayAqc2s7CiAKLQlpZiAoIShjb25uID0gaGNvbi0+c2NvX2RhdGEpKQorCWlmICghY29ubikKIAkJcmV0dXJuIDA7CiAKIAlCVF9EQkcoImhjb24gJXAgY29ubiAlcCwgZXJyICVkIiwgaGNvbiwgY29ubiwgZXJyKTsKIAogCS8qIEtpbGwgc29ja2V0ICovCi0JaWYgKChzayA9IHNjb19jaGFuX2dldChjb25uKSkpIHsKKwlzayA9IHNjb19jaGFuX2dldChjb25uKTsKKwlpZiAoc2spIHsKIAkJYmhfbG9ja19zb2NrKHNrKTsKIAkJc2NvX3NvY2tfY2xlYXJfdGltZXIoc2spOwogCQlzY29fY2hhbl9kZWwoc2ssIGVycik7CkBAIC0xODUsNyArMTg2LDggQEAKIAogCUJUX0RCRygiJXMgLT4gJXMiLCBiYXRvc3RyKHNyYyksIGJhdG9zdHIoZHN0KSk7CiAKLQlpZiAoIShoZGV2ID0gaGNpX2dldF9yb3V0ZShkc3QsIHNyYykpKQorCWhkZXYgPSBoY2lfZ2V0X3JvdXRlKGRzdCwgc3JjKTsKKwlpZiAoIWhkZXYpCiAJCXJldHVybiAtRUhPU1RVTlJFQUNIOwogCiAJaGNpX2Rldl9sb2NrX2JoKGhkZXYpOwpAQCAtNTEwLDcgKzUxMiw4IEBACiAJLyogU2V0IGRlc3RpbmF0aW9uIGFkZHJlc3MgYW5kIHBzbSAqLwogCWJhY3B5KCZidF9zayhzayktPmRzdCwgJnNhLT5zY29fYmRhZGRyKTsKIAotCWlmICgoZXJyID0gc2NvX2Nvbm5lY3Qoc2spKSkKKwllcnIgPSBzY29fY29ubmVjdChzayk7CisJaWYgKGVycikKIAkJZ290byBkb25lOwogCiAJZXJyID0gYnRfc29ja193YWl0X3N0YXRlKHNrLCBCVF9DT05ORUNURUQsCkBAIC04MjgsMTMgKzgzMSwxNCBAQAogCiBzdGF0aWMgdm9pZCBzY29fY29ubl9yZWFkeShzdHJ1Y3Qgc2NvX2Nvbm4gKmNvbm4pCiB7Ci0Jc3RydWN0IHNvY2sgKnBhcmVudCwgKnNrOworCXN0cnVjdCBzb2NrICpwYXJlbnQ7CisJc3RydWN0IHNvY2sgKnNrID0gY29ubi0+c2s7CiAKIAlCVF9EQkcoImNvbm4gJXAiLCBjb25uKTsKIAogCXNjb19jb25uX2xvY2soY29ubik7CiAKLQlpZiAoKHNrID0gY29ubi0+c2spKSB7CisJaWYgKHNrKSB7CiAJCXNjb19zb2NrX2NsZWFyX3RpbWVyKHNrKTsKIAkJYmhfbG9ja19zb2NrKHNrKTsKIAkJc2stPnNrX3N0YXRlID0gQlRfQ09OTkVDVEVEOwpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9ici5jIGIvbmV0L2JyaWRnZS9ici5jCmluZGV4IGM4NDM2ZmEuLjg0YmJiODIgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnIuYworKysgYi9uZXQvYnJpZGdlL2JyLmMKQEAgLTIyLDggKzIyLDYgQEAKIAogI2luY2x1ZGUgImJyX3ByaXZhdGUuaCIKIAotaW50ICgqYnJfc2hvdWxkX3JvdXRlX2hvb2spKHN0cnVjdCBza19idWZmICpza2IpOwotCiBzdGF0aWMgY29uc3Qgc3RydWN0IHN0cF9wcm90byBicl9zdHBfcHJvdG8gPSB7CiAJLnJjdgk9IGJyX3N0cF9yY3YsCiB9OwpAQCAtMTAyLDggKzEwMCw2IEBACiAJYnJfZmRiX2ZpbmkoKTsKIH0KIAotRVhQT1JUX1NZTUJPTChicl9zaG91bGRfcm91dGVfaG9vayk7Ci0KIG1vZHVsZV9pbml0KGJyX2luaXQpCiBtb2R1bGVfZXhpdChicl9kZWluaXQpCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2RldmljZS5jIGIvbmV0L2JyaWRnZS9icl9kZXZpY2UuYwppbmRleCAxN2NiMGI2Li41NTY0NDM1IDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX2RldmljZS5jCisrKyBiL25ldC9icmlkZ2UvYnJfZGV2aWNlLmMKQEAgLTE0MSw3ICsxNDEsNyBAQAogCiAjaWZkZWYgQ09ORklHX0JSSURHRV9ORVRGSUxURVIKIAkvKiByZW1lbWJlciB0aGUgTVRVIGluIHRoZSBydGFibGUgZm9yIFBNVFUgKi8KLQlici0+ZmFrZV9ydGFibGUuZHN0Lm1ldHJpY3NbUlRBWF9NVFUgLSAxXSA9IG5ld19tdHU7CisJZHN0X21ldHJpY19zZXQoJmJyLT5mYWtlX3J0YWJsZS5kc3QsIFJUQVhfTVRVLCBuZXdfbXR1KTsKICNlbmRpZgogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2ZkYi5jIGIvbmV0L2JyaWRnZS9icl9mZGIuYwppbmRleCA5MDUxMmNjLi4yODcyMzkzIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX2ZkYi5jCisrKyBiL25ldC9icmlkZ2UvYnJfZmRiLmMKQEAgLTIzOCwxNSArMjM4LDE4IEBACiBpbnQgYnJfZmRiX3Rlc3RfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBjaGFyICphZGRyKQogewogCXN0cnVjdCBuZXRfYnJpZGdlX2ZkYl9lbnRyeSAqZmRiOworCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQ7CiAJaW50IHJldDsKIAotCWlmICghYnJfcG9ydF9leGlzdHMoZGV2KSkKLQkJcmV0dXJuIDA7Ci0KIAlyY3VfcmVhZF9sb2NrKCk7Ci0JZmRiID0gX19icl9mZGJfZ2V0KGJyX3BvcnRfZ2V0X3JjdShkZXYpLT5iciwgYWRkcik7Ci0JcmV0ID0gZmRiICYmIGZkYi0+ZHN0LT5kZXYgIT0gZGV2ICYmCi0JCWZkYi0+ZHN0LT5zdGF0ZSA9PSBCUl9TVEFURV9GT1JXQVJESU5HOworCXBvcnQgPSBicl9wb3J0X2dldF9yY3UoZGV2KTsKKwlpZiAoIXBvcnQpCisJCXJldCA9IDA7CisJZWxzZSB7CisJCWZkYiA9IF9fYnJfZmRiX2dldChwb3J0LT5iciwgYWRkcik7CisJCXJldCA9IGZkYiAmJiBmZGItPmRzdC0+ZGV2ICE9IGRldiAmJgorCQkJZmRiLT5kc3QtPnN0YXRlID09IEJSX1NUQVRFX0ZPUldBUkRJTkc7CisJfQogCXJjdV9yZWFkX3VubG9jaygpOwogCiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfZm9yd2FyZC5jIGIvbmV0L2JyaWRnZS9icl9mb3J3YXJkLmMKaW5kZXggY2JmZTg3Zi4uZWU2NDI4NyAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9mb3J3YXJkLmMKKysrIGIvbmV0L2JyaWRnZS9icl9mb3J3YXJkLmMKQEAgLTQxLDE3ICs0MSwxMyBAQAogCiBpbnQgYnJfZGV2X3F1ZXVlX3B1c2hfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCS8qIGRyb3AgbXR1IG92ZXJzaXplZCBwYWNrZXRzIGV4Y2VwdCBnc28gKi8KLQlpZiAocGFja2V0X2xlbmd0aChza2IpID4gc2tiLT5kZXYtPm10dSAmJiAhc2tiX2lzX2dzbyhza2IpKQorCS8qIGlwX2ZyYWdtZW50IGRvZXNuJ3QgY29weSB0aGUgTUFDIGhlYWRlciAqLworCWlmIChuZl9icmlkZ2VfbWF5YmVfY29weV9oZWFkZXIoc2tiKSB8fAorCSAgICAocGFja2V0X2xlbmd0aChza2IpID4gc2tiLT5kZXYtPm10dSAmJiAhc2tiX2lzX2dzbyhza2IpKSkgewogCQlrZnJlZV9za2Ioc2tiKTsKLQllbHNlIHsKLQkJLyogaXBfZnJhZ21lbnQgZG9lc24ndCBjb3B5IHRoZSBNQUMgaGVhZGVyICovCi0JCWlmIChuZl9icmlkZ2VfbWF5YmVfY29weV9oZWFkZXIoc2tiKSkKLQkJCWtmcmVlX3NrYihza2IpOwotCQllbHNlIHsKLQkJCXNrYl9wdXNoKHNrYiwgRVRIX0hMRU4pOwotCQkJZGV2X3F1ZXVlX3htaXQoc2tiKTsKLQkJfQorCX0gZWxzZSB7CisJCXNrYl9wdXNoKHNrYiwgRVRIX0hMRU4pOworCQlkZXZfcXVldWVfeG1pdChza2IpOwogCX0KIAogCXJldHVybiAwOwpAQCAtMjIzLDcgKzIxOSw3IEBACiAJc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCAqcDsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqcnA7CiAKLQlycCA9IHJjdV9kZXJlZmVyZW5jZShici0+cm91dGVyX2xpc3QuZmlyc3QpOworCXJwID0gcmN1X2RlcmVmZXJlbmNlKGhsaXN0X2ZpcnN0X3JjdSgmYnItPnJvdXRlcl9saXN0KSk7CiAJcCA9IG1kc3QgPyByY3VfZGVyZWZlcmVuY2UobWRzdC0+cG9ydHMpIDogTlVMTDsKIAl3aGlsZSAocCB8fCBycCkgewogCQlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCAqbHBvcnQsICpycG9ydDsKQEAgLTI0Miw3ICsyMzgsNyBAQAogCQlpZiAoKHVuc2lnbmVkIGxvbmcpbHBvcnQgPj0gKHVuc2lnbmVkIGxvbmcpcG9ydCkKIAkJCXAgPSByY3VfZGVyZWZlcmVuY2UocC0+bmV4dCk7CiAJCWlmICgodW5zaWduZWQgbG9uZylycG9ydCA+PSAodW5zaWduZWQgbG9uZylwb3J0KQotCQkJcnAgPSByY3VfZGVyZWZlcmVuY2UocnAtPm5leHQpOworCQkJcnAgPSByY3VfZGVyZWZlcmVuY2UoaGxpc3RfbmV4dF9yY3UocnApKTsKIAl9CiAKIAlpZiAoIXByZXYpCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2lmLmMgYi9uZXQvYnJpZGdlL2JyX2lmLmMKaW5kZXggODlhZDI1YS4uZDlkMWUyYiAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9pZi5jCisrKyBiL25ldC9icmlkZ2UvYnJfaWYuYwpAQCAtNDc1LDExICs0NzUsOCBAQAogewogCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnA7CiAKLQlpZiAoIWJyX3BvcnRfZXhpc3RzKGRldikpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcCA9IGJyX3BvcnRfZ2V0KGRldik7Ci0JaWYgKHAtPmJyICE9IGJyKQorCXAgPSBicl9wb3J0X2dldF9ydG5sKGRldik7CisJaWYgKCFwIHx8IHAtPmJyICE9IGJyKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWRlbF9uYnAocCk7CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2lucHV0LmMgYi9uZXQvYnJpZGdlL2JyX2lucHV0LmMKaW5kZXggMjUyMDdhMS4uNmY2ZDhlMSAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9pbnB1dC5jCisrKyBiL25ldC9icmlkZ2UvYnJfaW5wdXQuYwpAQCAtMjEsNiArMjEsMTAgQEAKIC8qIEJyaWRnZSBncm91cCBtdWx0aWNhc3QgYWRkcmVzcyA4MDIuMWQgKHBnIDUxKS4gKi8KIGNvbnN0IHU4IGJyX2dyb3VwX2FkZHJlc3NbRVRIX0FMRU5dID0geyAweDAxLCAweDgwLCAweGMyLCAweDAwLCAweDAwLCAweDAwIH07CiAKKy8qIEhvb2sgZm9yIGJyb3V0ZXIgKi8KK2JyX3Nob3VsZF9yb3V0ZV9ob29rX3QgX19yY3UgKmJyX3Nob3VsZF9yb3V0ZV9ob29rIF9fcmVhZF9tb3N0bHk7CitFWFBPUlRfU1lNQk9MKGJyX3Nob3VsZF9yb3V0ZV9ob29rKTsKKwogc3RhdGljIGludCBicl9wYXNzX2ZyYW1lX3VwKHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmluZGV2LCAqYnJkZXYgPSBCUl9JTlBVVF9TS0JfQ0Ioc2tiKS0+YnJkZXY7CkBAIC0xMzksNyArMTQzLDcgQEAKIHsKIAlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwOwogCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBldGhfaGRyKHNrYiktPmhfZGVzdDsKLQlpbnQgKCpyaG9vaykoc3RydWN0IHNrX2J1ZmYgKnNrYik7CisJYnJfc2hvdWxkX3JvdXRlX2hvb2tfdCAqcmhvb2s7CiAKIAlpZiAodW5saWtlbHkoc2tiLT5wa3RfdHlwZSA9PSBQQUNLRVRfTE9PUEJBQ0spKQogCQlyZXR1cm4gc2tiOwpAQCAtMTczLDggKzE3Nyw4IEBACiAJc3dpdGNoIChwLT5zdGF0ZSkgewogCWNhc2UgQlJfU1RBVEVfRk9SV0FSRElORzoKIAkJcmhvb2sgPSByY3VfZGVyZWZlcmVuY2UoYnJfc2hvdWxkX3JvdXRlX2hvb2spOwotCQlpZiAocmhvb2sgIT0gTlVMTCkgewotCQkJaWYgKHJob29rKHNrYikpCisJCWlmIChyaG9vaykgeworCQkJaWYgKCgqcmhvb2spKHNrYikpCiAJCQkJcmV0dXJuIHNrYjsKIAkJCWRlc3QgPSBldGhfaGRyKHNrYiktPmhfZGVzdDsKIAkJfQpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYyBiL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMKaW5kZXggNTQzYjMyNi4uZjcwMWEyMSAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYworKysgYi9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jCkBAIC0zMyw2ICszMyw5IEBACiAKICNpbmNsdWRlICJicl9wcml2YXRlLmgiCiAKKyNkZWZpbmUgbWxvY2tfZGVyZWZlcmVuY2UoWCwgYnIpIFwKKwlyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKFgsIGxvY2tkZXBfaXNfaGVsZCgmYnItPm11bHRpY2FzdF9sb2NrKSkKKwogI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQogc3RhdGljIGlubGluZSBpbnQgaXB2Nl9pc19sb2NhbF9tdWx0aWNhc3QoY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKQogewpAQCAtMTM1LDcgKzEzOCw3IEBACiBzdHJ1Y3QgbmV0X2JyaWRnZV9tZGJfZW50cnkgKmJyX21kYl9nZXQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLAogCQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBuZXRfYnJpZGdlX21kYl9odGFibGUgKm1kYiA9IGJyLT5tZGI7CisJc3RydWN0IG5ldF9icmlkZ2VfbWRiX2h0YWJsZSAqbWRiID0gcmN1X2RlcmVmZXJlbmNlKGJyLT5tZGIpOwogCXN0cnVjdCBicl9pcCBpcDsKIAogCWlmIChici0+bXVsdGljYXN0X2Rpc2FibGVkKQpAQCAtMjM1LDcgKzIzOCw4IEBACiAJaWYgKG1wLT5wb3J0cykKIAkJZ290byBvdXQ7CiAKLQltZGIgPSBici0+bWRiOworCW1kYiA9IG1sb2NrX2RlcmVmZXJlbmNlKGJyLT5tZGIsIGJyKTsKKwogCWhsaXN0X2RlbF9yY3UoJm1wLT5obGlzdFttZGItPnZlcl0pOwogCW1kYi0+c2l6ZS0tOwogCkBAIC0yNDksMTYgKzI1MywyMCBAQAogc3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X2RlbF9wZyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsCiAJCQkJc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCAqcGcpCiB7Ci0Jc3RydWN0IG5ldF9icmlkZ2VfbWRiX2h0YWJsZSAqbWRiID0gYnItPm1kYjsKKwlzdHJ1Y3QgbmV0X2JyaWRnZV9tZGJfaHRhYmxlICptZGI7CiAJc3RydWN0IG5ldF9icmlkZ2VfbWRiX2VudHJ5ICptcDsKIAlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpwOwotCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKipwcDsKKwlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwIF9fcmN1ICoqcHA7CisKKwltZGIgPSBtbG9ja19kZXJlZmVyZW5jZShici0+bWRiLCBicik7CiAKIAltcCA9IGJyX21kYl9pcF9nZXQobWRiLCAmcGctPmFkZHIpOwogCWlmIChXQVJOX09OKCFtcCkpCiAJCXJldHVybjsKIAotCWZvciAocHAgPSAmbXAtPnBvcnRzOyAocCA9ICpwcCk7IHBwID0gJnAtPm5leHQpIHsKKwlmb3IgKHBwID0gJm1wLT5wb3J0czsKKwkgICAgIChwID0gbWxvY2tfZGVyZWZlcmVuY2UoKnBwLCBicikpICE9IE5VTEw7CisJICAgICBwcCA9ICZwLT5uZXh0KSB7CiAJCWlmIChwICE9IHBnKQogCQkJY29udGludWU7CiAKQEAgLTI5NCwxMCArMzAyLDEwIEBACiAJc3Bpbl91bmxvY2soJmJyLT5tdWx0aWNhc3RfbG9jayk7CiB9CiAKLXN0YXRpYyBpbnQgYnJfbWRiX3JlaGFzaChzdHJ1Y3QgbmV0X2JyaWRnZV9tZGJfaHRhYmxlICoqbWRicCwgaW50IG1heCwKK3N0YXRpYyBpbnQgYnJfbWRiX3JlaGFzaChzdHJ1Y3QgbmV0X2JyaWRnZV9tZGJfaHRhYmxlIF9fcmN1ICoqbWRicCwgaW50IG1heCwKIAkJCSBpbnQgZWxhc3RpY2l0eSkKIHsKLQlzdHJ1Y3QgbmV0X2JyaWRnZV9tZGJfaHRhYmxlICpvbGQgPSAqbWRicDsKKwlzdHJ1Y3QgbmV0X2JyaWRnZV9tZGJfaHRhYmxlICpvbGQgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKCptZGJwLCAxKTsKIAlzdHJ1Y3QgbmV0X2JyaWRnZV9tZGJfaHRhYmxlICptZGI7CiAJaW50IGVycjsKIApAQCAtNTY5LDcgKzU3Nyw3IEBACiAJc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LAogCXN0cnVjdCBicl9pcCAqZ3JvdXAsIGludCBoYXNoKQogewotCXN0cnVjdCBuZXRfYnJpZGdlX21kYl9odGFibGUgKm1kYiA9IGJyLT5tZGI7CisJc3RydWN0IG5ldF9icmlkZ2VfbWRiX2h0YWJsZSAqbWRiOwogCXN0cnVjdCBuZXRfYnJpZGdlX21kYl9lbnRyeSAqbXA7CiAJc3RydWN0IGhsaXN0X25vZGUgKnA7CiAJdW5zaWduZWQgY291bnQgPSAwOwpAQCAtNTc3LDYgKzU4NSw3IEBACiAJaW50IGVsYXN0aWNpdHk7CiAJaW50IGVycjsKIAorCW1kYiA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoYnItPm1kYiwgMSk7CiAJaGxpc3RfZm9yX2VhY2hfZW50cnkobXAsIHAsICZtZGItPm1oYXNoW2hhc2hdLCBobGlzdFttZGItPnZlcl0pIHsKIAkJY291bnQrKzsKIAkJaWYgKHVubGlrZWx5KGJyX2lwX2VxdWFsKGdyb3VwLCAmbXAtPmFkZHIpKSkKQEAgLTY0MiwxMyArNjUxLDE2IEBACiAJc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LAogCXN0cnVjdCBicl9pcCAqZ3JvdXApCiB7Ci0Jc3RydWN0IG5ldF9icmlkZ2VfbWRiX2h0YWJsZSAqbWRiID0gYnItPm1kYjsKKwlzdHJ1Y3QgbmV0X2JyaWRnZV9tZGJfaHRhYmxlICptZGI7CiAJc3RydWN0IG5ldF9icmlkZ2VfbWRiX2VudHJ5ICptcDsKIAlpbnQgaGFzaDsKKwlpbnQgZXJyOwogCisJbWRiID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChici0+bWRiLCAxKTsKIAlpZiAoIW1kYikgewotCQlpZiAoYnJfbWRiX3JlaGFzaCgmYnItPm1kYiwgQlJfSEFTSF9TSVpFLCAwKSkKLQkJCXJldHVybiBOVUxMOworCQllcnIgPSBicl9tZGJfcmVoYXNoKCZici0+bWRiLCBCUl9IQVNIX1NJWkUsIDApOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIAkJZ290byByZWhhc2g7CiAJfQogCkBAIC02NjAsNyArNjcyLDcgQEAKIAogCWNhc2UgLUVBR0FJTjoKIHJlaGFzaDoKLQkJbWRiID0gYnItPm1kYjsKKwkJbWRiID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChici0+bWRiLCAxKTsKIAkJaGFzaCA9IGJyX2lwX2hhc2gobWRiLCBncm91cCk7CiAJCWJyZWFrOwogCkBAIC02NzAsNyArNjgyLDcgQEAKIAogCW1wID0ga3phbGxvYyhzaXplb2YoKm1wKSwgR0ZQX0FUT01JQyk7CiAJaWYgKHVubGlrZWx5KCFtcCkpCi0JCWdvdG8gb3V0OworCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAogCW1wLT5iciA9IGJyOwogCW1wLT5hZGRyID0gKmdyb3VwOwpAQCAtNjkyLDcgKzcwNCw3IEBACiB7CiAJc3RydWN0IG5ldF9icmlkZ2VfbWRiX2VudHJ5ICptcDsKIAlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpwOwotCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKipwcDsKKwlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwIF9fcmN1ICoqcHA7CiAJdW5zaWduZWQgbG9uZyBub3cgPSBqaWZmaWVzOwogCWludCBlcnI7CiAKQEAgLTcwMyw3ICs3MTUsNyBAQAogCiAJbXAgPSBicl9tdWx0aWNhc3RfbmV3X2dyb3VwKGJyLCBwb3J0LCBncm91cCk7CiAJZXJyID0gUFRSX0VSUihtcCk7Ci0JaWYgKHVubGlrZWx5KElTX0VSUihtcCkgfHwgIW1wKSkKKwlpZiAoSVNfRVJSKG1wKSkKIAkJZ290byBlcnI7CiAKIAlpZiAoIXBvcnQpIHsKQEAgLTcxMiw3ICs3MjQsOSBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlmb3IgKHBwID0gJm1wLT5wb3J0czsgKHAgPSAqcHApOyBwcCA9ICZwLT5uZXh0KSB7CisJZm9yIChwcCA9ICZtcC0+cG9ydHM7CisJICAgICAocCA9IG1sb2NrX2RlcmVmZXJlbmNlKCpwcCwgYnIpKSAhPSBOVUxMOworCSAgICAgcHAgPSAmcC0+bmV4dCkgewogCQlpZiAocC0+cG9ydCA9PSBwb3J0KQogCQkJZ290byBmb3VuZDsKIAkJaWYgKCh1bnNpZ25lZCBsb25nKXAtPnBvcnQgPCAodW5zaWduZWQgbG9uZylwb3J0KQpAQCAtMTEwNiw3ICsxMTIwLDcgQEAKIAlzdHJ1Y3QgbmV0X2JyaWRnZV9tZGJfZW50cnkgKm1wOwogCXN0cnVjdCBpZ21wdjNfcXVlcnkgKmloMzsKIAlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpwOwotCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKipwcDsKKwlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwIF9fcmN1ICoqcHA7CiAJdW5zaWduZWQgbG9uZyBtYXhfZGVsYXk7CiAJdW5zaWduZWQgbG9uZyBub3cgPSBqaWZmaWVzOwogCV9fYmUzMiBncm91cDsKQEAgLTExNDUsNyArMTE1OSw3IEBACiAJaWYgKCFncm91cCkKIAkJZ290byBvdXQ7CiAKLQltcCA9IGJyX21kYl9pcDRfZ2V0KGJyLT5tZGIsIGdyb3VwKTsKKwltcCA9IGJyX21kYl9pcDRfZ2V0KG1sb2NrX2RlcmVmZXJlbmNlKGJyLT5tZGIsIGJyKSwgZ3JvdXApOwogCWlmICghbXApCiAJCWdvdG8gb3V0OwogCkBAIC0xMTU3LDcgKzExNzEsOSBAQAogCSAgICAgdHJ5X3RvX2RlbF90aW1lcl9zeW5jKCZtcC0+dGltZXIpID49IDApKQogCQltb2RfdGltZXIoJm1wLT50aW1lciwgbm93ICsgbWF4X2RlbGF5KTsKIAotCWZvciAocHAgPSAmbXAtPnBvcnRzOyAocCA9ICpwcCk7IHBwID0gJnAtPm5leHQpIHsKKwlmb3IgKHBwID0gJm1wLT5wb3J0czsKKwkgICAgIChwID0gbWxvY2tfZGVyZWZlcmVuY2UoKnBwLCBicikpICE9IE5VTEw7CisJICAgICBwcCA9ICZwLT5uZXh0KSB7CiAJCWlmICh0aW1lcl9wZW5kaW5nKCZwLT50aW1lcikgPwogCQkgICAgdGltZV9hZnRlcihwLT50aW1lci5leHBpcmVzLCBub3cgKyBtYXhfZGVsYXkpIDoKIAkJICAgIHRyeV90b19kZWxfdGltZXJfc3luYygmcC0+dGltZXIpID49IDApCkBAIC0xMTc4LDcgKzExOTQsOCBAQAogCXN0cnVjdCBtbGRfbXNnICptbGQgPSAoc3RydWN0IG1sZF9tc2cgKikgaWNtcDZfaGRyKHNrYik7CiAJc3RydWN0IG5ldF9icmlkZ2VfbWRiX2VudHJ5ICptcDsKIAlzdHJ1Y3QgbWxkMl9xdWVyeSAqbWxkMnE7Ci0Jc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCAqcCwgKipwcDsKKwlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpwOworCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgX19yY3UgKipwcDsKIAl1bnNpZ25lZCBsb25nIG1heF9kZWxheTsKIAl1bnNpZ25lZCBsb25nIG5vdyA9IGppZmZpZXM7CiAJc3RydWN0IGluNl9hZGRyICpncm91cCA9IE5VTEw7CkBAIC0xMjE0LDcgKzEyMzEsNyBAQAogCWlmICghZ3JvdXApCiAJCWdvdG8gb3V0OwogCi0JbXAgPSBicl9tZGJfaXA2X2dldChici0+bWRiLCBncm91cCk7CisJbXAgPSBicl9tZGJfaXA2X2dldChtbG9ja19kZXJlZmVyZW5jZShici0+bWRiLCBiciksIGdyb3VwKTsKIAlpZiAoIW1wKQogCQlnb3RvIG91dDsKIApAQCAtMTIyNSw3ICsxMjQyLDkgQEAKIAkgICAgIHRyeV90b19kZWxfdGltZXJfc3luYygmbXAtPnRpbWVyKSA+PSAwKSkKIAkJbW9kX3RpbWVyKCZtcC0+dGltZXIsIG5vdyArIG1heF9kZWxheSk7CiAKLQlmb3IgKHBwID0gJm1wLT5wb3J0czsgKHAgPSAqcHApOyBwcCA9ICZwLT5uZXh0KSB7CisJZm9yIChwcCA9ICZtcC0+cG9ydHM7CisJICAgICAocCA9IG1sb2NrX2RlcmVmZXJlbmNlKCpwcCwgYnIpKSAhPSBOVUxMOworCSAgICAgcHAgPSAmcC0+bmV4dCkgewogCQlpZiAodGltZXJfcGVuZGluZygmcC0+dGltZXIpID8KIAkJICAgIHRpbWVfYWZ0ZXIocC0+dGltZXIuZXhwaXJlcywgbm93ICsgbWF4X2RlbGF5KSA6CiAJCSAgICB0cnlfdG9fZGVsX3RpbWVyX3N5bmMoJnAtPnRpbWVyKSA+PSAwKQpAQCAtMTI1NCw3ICsxMjczLDcgQEAKIAkgICAgdGltZXJfcGVuZGluZygmYnItPm11bHRpY2FzdF9xdWVyaWVyX3RpbWVyKSkKIAkJZ290byBvdXQ7CiAKLQltZGIgPSBici0+bWRiOworCW1kYiA9IG1sb2NrX2RlcmVmZXJlbmNlKGJyLT5tZGIsIGJyKTsKIAltcCA9IGJyX21kYl9pcF9nZXQobWRiLCBncm91cCk7CiAJaWYgKCFtcCkKIAkJZ290byBvdXQ7CkBAIC0xMjc3LDcgKzEyOTYsOSBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlmb3IgKHAgPSBtcC0+cG9ydHM7IHA7IHAgPSBwLT5uZXh0KSB7CisJZm9yIChwID0gbWxvY2tfZGVyZWZlcmVuY2UobXAtPnBvcnRzLCBicik7CisJICAgICBwICE9IE5VTEw7CisJICAgICBwID0gbWxvY2tfZGVyZWZlcmVuY2UocC0+bmV4dCwgYnIpKSB7CiAJCWlmIChwLT5wb3J0ICE9IHBvcnQpCiAJCQljb250aW51ZTsKIApAQCAtMTYzMyw3ICsxNjU0LDcgQEAKIAlkZWxfdGltZXJfc3luYygmYnItPm11bHRpY2FzdF9xdWVyeV90aW1lcik7CiAKIAlzcGluX2xvY2tfYmgoJmJyLT5tdWx0aWNhc3RfbG9jayk7Ci0JbWRiID0gYnItPm1kYjsKKwltZGIgPSBtbG9ja19kZXJlZmVyZW5jZShici0+bWRiLCBicik7CiAJaWYgKCFtZGIpCiAJCWdvdG8gb3V0OwogCkBAIC0xNzM3LDYgKzE3NTgsNyBAQAogewogCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQ7CiAJaW50IGVyciA9IDA7CisJc3RydWN0IG5ldF9icmlkZ2VfbWRiX2h0YWJsZSAqbWRiOwogCiAJc3Bpbl9sb2NrKCZici0+bXVsdGljYXN0X2xvY2spOwogCWlmIChici0+bXVsdGljYXN0X2Rpc2FibGVkID09ICF2YWwpCkBAIC0xNzQ5LDE1ICsxNzcxLDE2IEBACiAJaWYgKCFuZXRpZl9ydW5uaW5nKGJyLT5kZXYpKQogCQlnb3RvIHVubG9jazsKIAotCWlmIChici0+bWRiKSB7Ci0JCWlmIChici0+bWRiLT5vbGQpIHsKKwltZGIgPSBtbG9ja19kZXJlZmVyZW5jZShici0+bWRiLCBicik7CisJaWYgKG1kYikgeworCQlpZiAobWRiLT5vbGQpIHsKIAkJCWVyciA9IC1FRVhJU1Q7CiByb2xsYmFjazoKIAkJCWJyLT5tdWx0aWNhc3RfZGlzYWJsZWQgPSAhIXZhbDsKIAkJCWdvdG8gdW5sb2NrOwogCQl9CiAKLQkJZXJyID0gYnJfbWRiX3JlaGFzaCgmYnItPm1kYiwgYnItPm1kYi0+bWF4LAorCQllcnIgPSBicl9tZGJfcmVoYXNoKCZici0+bWRiLCBtZGItPm1heCwKIAkJCQkgICAgYnItPmhhc2hfZWxhc3RpY2l0eSk7CiAJCWlmIChlcnIpCiAJCQlnb3RvIHJvbGxiYWNrOwpAQCAtMTc4Miw2ICsxODA1LDcgQEAKIHsKIAlpbnQgZXJyID0gLUVOT0VOVDsKIAl1MzIgb2xkOworCXN0cnVjdCBuZXRfYnJpZGdlX21kYl9odGFibGUgKm1kYjsKIAogCXNwaW5fbG9jaygmYnItPm11bHRpY2FzdF9sb2NrKTsKIAlpZiAoIW5ldGlmX3J1bm5pbmcoYnItPmRldikpCkBAIC0xNzkwLDcgKzE4MTQsOSBAQAogCWVyciA9IC1FSU5WQUw7CiAJaWYgKCFpc19wb3dlcl9vZl8yKHZhbCkpCiAJCWdvdG8gdW5sb2NrOwotCWlmIChici0+bWRiICYmIHZhbCA8IGJyLT5tZGItPnNpemUpCisKKwltZGIgPSBtbG9ja19kZXJlZmVyZW5jZShici0+bWRiLCBicik7CisJaWYgKG1kYiAmJiB2YWwgPCBtZGItPnNpemUpCiAJCWdvdG8gdW5sb2NrOwogCiAJZXJyID0gMDsKQEAgLTE3OTgsOCArMTgyNCw4IEBACiAJb2xkID0gYnItPmhhc2hfbWF4OwogCWJyLT5oYXNoX21heCA9IHZhbDsKIAotCWlmIChici0+bWRiKSB7Ci0JCWlmIChici0+bWRiLT5vbGQpIHsKKwlpZiAobWRiKSB7CisJCWlmIChtZGItPm9sZCkgewogCQkJZXJyID0gLUVFWElTVDsKIHJvbGxiYWNrOgogCQkJYnItPmhhc2hfbWF4ID0gb2xkOwpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXIuYyBiL25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyLmMKaW5kZXggODY1ZmQ3Ni4uNGI1YjY2ZCAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXIuYworKysgYi9uZXQvYnJpZGdlL2JyX25ldGZpbHRlci5jCkBAIC0xMjQsMjQgKzEyNCwyNSBAQAogCWF0b21pY19zZXQoJnJ0LT5kc3QuX19yZWZjbnQsIDEpOwogCXJ0LT5kc3QuZGV2ID0gYnItPmRldjsKIAlydC0+ZHN0LnBhdGggPSAmcnQtPmRzdDsKLQlydC0+ZHN0Lm1ldHJpY3NbUlRBWF9NVFUgLSAxXSA9IDE1MDA7CisJZHN0X21ldHJpY19zZXQoJnJ0LT5kc3QsIFJUQVhfTVRVLCAxNTAwKTsKIAlydC0+ZHN0LmZsYWdzCT0gRFNUX05PWEZSTTsKIAlydC0+ZHN0Lm9wcyA9ICZmYWtlX2RzdF9vcHM7CiB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJ0YWJsZSAqYnJpZGdlX3BhcmVudF9ydGFibGUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlpZiAoIWJyX3BvcnRfZXhpc3RzKGRldikpCi0JCXJldHVybiBOVUxMOwotCXJldHVybiAmYnJfcG9ydF9nZXRfcmN1KGRldiktPmJyLT5mYWtlX3J0YWJsZTsKKwlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0OworCisJcG9ydCA9IGJyX3BvcnRfZ2V0X3JjdShkZXYpOworCXJldHVybiBwb3J0ID8gJnBvcnQtPmJyLT5mYWtlX3J0YWJsZSA6IE5VTEw7CiB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9kZXZpY2UgKmJyaWRnZV9wYXJlbnQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlpZiAoIWJyX3BvcnRfZXhpc3RzKGRldikpCi0JCXJldHVybiBOVUxMOworCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQ7CiAKLQlyZXR1cm4gYnJfcG9ydF9nZXRfcmN1KGRldiktPmJyLT5kZXY7CisJcG9ydCA9IGJyX3BvcnRfZ2V0X3JjdShkZXYpOworCXJldHVybiBwb3J0ID8gcG9ydC0+YnItPmRldiA6IE5VTEw7CiB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IG5mX2JyaWRnZV9pbmZvICpuZl9icmlkZ2VfYWxsb2Moc3RydWN0IHNrX2J1ZmYgKnNrYikKQEAgLTQxMiwxMyArNDEzLDggQEAKIAlpZiAoZG5hdF90b29rX3BsYWNlKHNrYikpIHsKIAkJaWYgKChlcnIgPSBpcF9yb3V0ZV9pbnB1dChza2IsIGlwaC0+ZGFkZHIsIGlwaC0+c2FkZHIsIGlwaC0+dG9zLCBkZXYpKSkgewogCQkJc3RydWN0IGZsb3dpIGZsID0gewotCQkJCS5ubF91ID0gewotCQkJCQkuaXA0X3UgPSB7Ci0JCQkJCQkgLmRhZGRyID0gaXBoLT5kYWRkciwKLQkJCQkJCSAuc2FkZHIgPSAwLAotCQkJCQkJIC50b3MgPSBSVF9UT1MoaXBoLT50b3MpIH0sCi0JCQkJfSwKLQkJCQkucHJvdG8gPSAwLAorCQkJCS5mbDRfZHN0ID0gaXBoLT5kYWRkciwKKwkJCQkuZmw0X3RvcyA9IFJUX1RPUyhpcGgtPnRvcyksCiAJCQl9OwogCQkJc3RydWN0IGluX2RldmljZSAqaW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpOwogCkBAIC01NjYsMjYgKzU2MiwyNiBAQAogCXUzMiBwa3RfbGVuOwogCiAJaWYgKHNrYi0+bGVuIDwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSkKLQkJZ290byBpbmhkcl9lcnJvcjsKKwkJcmV0dXJuIE5GX0RST1A7CiAKIAlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKSkKLQkJZ290byBpbmhkcl9lcnJvcjsKKwkJcmV0dXJuIE5GX0RST1A7CiAKIAloZHIgPSBpcHY2X2hkcihza2IpOwogCiAJaWYgKGhkci0+dmVyc2lvbiAhPSA2KQotCQlnb3RvIGluaGRyX2Vycm9yOworCQlyZXR1cm4gTkZfRFJPUDsKIAogCXBrdF9sZW4gPSBudG9ocyhoZHItPnBheWxvYWRfbGVuKTsKIAogCWlmIChwa3RfbGVuIHx8IGhkci0+bmV4dGhkciAhPSBORVhUSERSX0hPUCkgewogCQlpZiAocGt0X2xlbiArIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgPiBza2ItPmxlbikKLQkJCWdvdG8gaW5oZHJfZXJyb3I7CisJCQlyZXR1cm4gTkZfRFJPUDsKIAkJaWYgKHBza2JfdHJpbV9yY3N1bShza2IsIHBrdF9sZW4gKyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKSkKLQkJCWdvdG8gaW5oZHJfZXJyb3I7CisJCQlyZXR1cm4gTkZfRFJPUDsKIAl9CiAJaWYgKGhkci0+bmV4dGhkciA9PSBORVhUSERSX0hPUCAmJiBjaGVja19oYmhfbGVuKHNrYikpCi0JCWdvdG8gaW5oZHJfZXJyb3I7CisJCXJldHVybiBORl9EUk9QOwogCiAJbmZfYnJpZGdlX3B1dChza2ItPm5mX2JyaWRnZSk7CiAJaWYgKCFuZl9icmlkZ2VfYWxsb2Moc2tiKSkKQEAgLTU5OCw5ICs1OTQsNiBAQAogCQlicl9uZl9wcmVfcm91dGluZ19maW5pc2hfaXB2Nik7CiAKIAlyZXR1cm4gTkZfU1RPTEVOOwotCi1pbmhkcl9lcnJvcjoKLQlyZXR1cm4gTkZfRFJPUDsKIH0KIAogLyogRGlyZWN0IElQdjYgdHJhZmZpYyB0byBicl9uZl9wcmVfcm91dGluZ19pcHY2LgpAQCAtNjE5LDExICs2MTIsMTEgQEAKIAlfX3UzMiBsZW4gPSBuZl9icmlkZ2VfZW5jYXBfaGVhZGVyX2xlbihza2IpOwogCiAJaWYgKHVubGlrZWx5KCFwc2tiX21heV9wdWxsKHNrYiwgbGVuKSkpCi0JCWdvdG8gb3V0OworCQlyZXR1cm4gTkZfRFJPUDsKIAogCXAgPSBicl9wb3J0X2dldF9yY3UoaW4pOwogCWlmIChwID09IE5VTEwpCi0JCWdvdG8gb3V0OworCQlyZXR1cm4gTkZfRFJPUDsKIAliciA9IHAtPmJyOwogCiAJaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVBWNikgfHwgSVNfVkxBTl9JUFY2KHNrYikgfHwKQEAgLTY0NSw4ICs2MzgsNyBAQAogCW5mX2JyaWRnZV9wdWxsX2VuY2FwX2hlYWRlcl9yY3N1bShza2IpOwogCiAJaWYgKGJyX3BhcnNlX2lwX29wdGlvbnMoc2tiKSkKLQkJLyogRHJvcCBpbnZhbGlkIHBhY2tldCAqLwotCQlnb3RvIG91dDsKKwkJcmV0dXJuIE5GX0RST1A7CiAKIAluZl9icmlkZ2VfcHV0KHNrYi0+bmZfYnJpZGdlKTsKIAlpZiAoIW5mX2JyaWRnZV9hbGxvYyhza2IpKQpAQCAtNjYwLDkgKzY1Miw2IEBACiAJCWJyX25mX3ByZV9yb3V0aW5nX2ZpbmlzaCk7CiAKIAlyZXR1cm4gTkZfU1RPTEVOOwotCi1vdXQ6Ci0JcmV0dXJuIE5GX0RST1A7CiB9CiAKIApkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9uZXRsaW5rLmMgYi9uZXQvYnJpZGdlL2JyX25ldGxpbmsuYwppbmRleCA0YTZhMzc4Li5mOGJmNGM3IDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX25ldGxpbmsuYworKysgYi9uZXQvYnJpZGdlL2JyX25ldGxpbmsuYwpAQCAtMTE5LDExICsxMTksMTMgQEAKIAogCWlkeCA9IDA7CiAJZm9yX2VhY2hfbmV0ZGV2KG5ldCwgZGV2KSB7CisJCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQgPSBicl9wb3J0X2dldF9ydG5sKGRldik7CisKIAkJLyogbm90IGEgYnJpZGdlIHBvcnQgKi8KLQkJaWYgKCFicl9wb3J0X2V4aXN0cyhkZXYpIHx8IGlkeCA8IGNiLT5hcmdzWzBdKQorCQlpZiAoIXBvcnQgfHwgaWR4IDwgY2ItPmFyZ3NbMF0pCiAJCQlnb3RvIHNraXA7CiAKLQkJaWYgKGJyX2ZpbGxfaWZpbmZvKHNrYiwgYnJfcG9ydF9nZXQoZGV2KSwKKwkJaWYgKGJyX2ZpbGxfaWZpbmZvKHNrYiwgcG9ydCwKIAkJCQkgICBORVRMSU5LX0NCKGNiLT5za2IpLnBpZCwKIAkJCQkgICBjYi0+bmxoLT5ubG1zZ19zZXEsIFJUTV9ORVdMSU5LLAogCQkJCSAgIE5MTV9GX01VTFRJKSA8IDApCkBAIC0xNjksOSArMTcxLDkgQEAKIAlpZiAoIWRldikKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlpZiAoIWJyX3BvcnRfZXhpc3RzKGRldikpCisJcCA9IGJyX3BvcnRfZ2V0X3J0bmwoZGV2KTsKKwlpZiAoIXApCiAJCXJldHVybiAtRUlOVkFMOwotCXAgPSBicl9wb3J0X2dldChkZXYpOwogCiAJLyogaWYga2VybmVsIFNUUCBpcyBydW5uaW5nLCBkb24ndCBhbGxvdyBjaGFuZ2VzICovCiAJaWYgKHAtPmJyLT5zdHBfZW5hYmxlZCA9PSBCUl9LRVJORUxfU1RQKQpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9ub3RpZnkuYyBiL25ldC9icmlkZ2UvYnJfbm90aWZ5LmMKaW5kZXggNDA0ZDRlMS4uN2QzMzdjOSAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9ub3RpZnkuYworKysgYi9uZXQvYnJpZGdlL2JyX25vdGlmeS5jCkBAIC0zMiwxNSArMzIsMTUgQEAKIHN0YXRpYyBpbnQgYnJfZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdW51c2VkLCB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHB0cjsKLQlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwID0gYnJfcG9ydF9nZXQoZGV2KTsKKwlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwOwogCXN0cnVjdCBuZXRfYnJpZGdlICpicjsKIAlpbnQgZXJyOwogCiAJLyogbm90IGEgcG9ydCBvZiBhIGJyaWRnZSAqLwotCWlmICghYnJfcG9ydF9leGlzdHMoZGV2KSkKKwlwID0gYnJfcG9ydF9nZXRfcnRubChkZXYpOworCWlmICghcCkKIAkJcmV0dXJuIE5PVElGWV9ET05FOwogCi0JcCA9IGJyX3BvcnRfZ2V0KGRldik7CiAJYnIgPSBwLT5icjsKIAogCXN3aXRjaCAoZXZlbnQpIHsKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oIGIvbmV0L2JyaWRnZS9icl9wcml2YXRlLmgKaW5kZXggNzVjOTBlZC4uODRhYWM3NyAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9wcml2YXRlLmgKKysrIGIvbmV0L2JyaWRnZS9icl9wcml2YXRlLmgKQEAgLTcyLDcgKzcyLDcgQEAKIAogc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCB7CiAJc3RydWN0IG5ldF9icmlkZ2VfcG9ydAkJKnBvcnQ7Ci0Jc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cAkqbmV4dDsKKwlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwIF9fcmN1ICpuZXh0OwogCXN0cnVjdCBobGlzdF9ub2RlCQltZ2xpc3Q7CiAJc3RydWN0IHJjdV9oZWFkCQkJcmN1OwogCXN0cnVjdCB0aW1lcl9saXN0CQl0aW1lcjsKQEAgLTg2LDcgKzg2LDcgQEAKIAlzdHJ1Y3QgaGxpc3Rfbm9kZQkJaGxpc3RbMl07CiAJc3RydWN0IGhsaXN0X25vZGUJCW1nbGlzdDsKIAlzdHJ1Y3QgbmV0X2JyaWRnZQkJKmJyOwotCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAJKnBvcnRzOworCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgX19yY3UgKnBvcnRzOwogCXN0cnVjdCByY3VfaGVhZAkJCXJjdTsKIAlzdHJ1Y3QgdGltZXJfbGlzdAkJdGltZXI7CiAJc3RydWN0IHRpbWVyX2xpc3QJCXF1ZXJ5X3RpbWVyOwpAQCAtMTUxLDExICsxNTEsMjAgQEAKICNlbmRpZgogfTsKIAotI2RlZmluZSBicl9wb3J0X2dldF9yY3UoZGV2KSBcCi0JKChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICopIHJjdV9kZXJlZmVyZW5jZShkZXYtPnJ4X2hhbmRsZXJfZGF0YSkpCi0jZGVmaW5lIGJyX3BvcnRfZ2V0KGRldikgKChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICopIGRldi0+cnhfaGFuZGxlcl9kYXRhKQogI2RlZmluZSBicl9wb3J0X2V4aXN0cyhkZXYpIChkZXYtPnByaXZfZmxhZ3MgJiBJRkZfQlJJREdFX1BPUlQpCiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqYnJfcG9ydF9nZXRfcmN1KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCA9IHJjdV9kZXJlZmVyZW5jZShkZXYtPnJ4X2hhbmRsZXJfZGF0YSk7CisJcmV0dXJuIGJyX3BvcnRfZXhpc3RzKGRldikgPyBwb3J0IDogTlVMTDsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpicl9wb3J0X2dldF9ydG5sKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIGJyX3BvcnRfZXhpc3RzKGRldikgPworCQlydG5sX2RlcmVmZXJlbmNlKGRldi0+cnhfaGFuZGxlcl9kYXRhKSA6IE5VTEw7Cit9CisKIHN0cnVjdCBicl9jcHVfbmV0c3RhdHMgewogCXU2NAkJCXJ4X3BhY2tldHM7CiAJdTY0CQkJcnhfYnl0ZXM7CkBAIC0yMjcsNyArMjM2LDcgQEAKIAl1bnNpZ25lZCBsb25nCQkJbXVsdGljYXN0X3N0YXJ0dXBfcXVlcnlfaW50ZXJ2YWw7CiAKIAlzcGlubG9ja190CQkJbXVsdGljYXN0X2xvY2s7Ci0Jc3RydWN0IG5ldF9icmlkZ2VfbWRiX2h0YWJsZQkqbWRiOworCXN0cnVjdCBuZXRfYnJpZGdlX21kYl9odGFibGUgX19yY3UgKm1kYjsKIAlzdHJ1Y3QgaGxpc3RfaGVhZAkJcm91dGVyX2xpc3Q7CiAJc3RydWN0IGhsaXN0X2hlYWQJCW1nbGlzdDsKIApkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9zdHBfYnBkdS5jIGIvbmV0L2JyaWRnZS9icl9zdHBfYnBkdS5jCmluZGV4IGUzZDdhZWYuLjI4OTY0NmUgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfc3RwX2JwZHUuYworKysgYi9uZXQvYnJpZGdlL2JyX3N0cF9icGR1LmMKQEAgLTE0MywxMCArMTQzLDYgQEAKIAlzdHJ1Y3QgbmV0X2JyaWRnZSAqYnI7CiAJY29uc3QgdW5zaWduZWQgY2hhciAqYnVmOwogCi0JaWYgKCFicl9wb3J0X2V4aXN0cyhkZXYpKQotCQlnb3RvIGVycjsKLQlwID0gYnJfcG9ydF9nZXRfcmN1KGRldik7Ci0KIAlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCA0KSkKIAkJZ290byBlcnI7CiAKQEAgLTE1NSw2ICsxNTEsMTAgQEAKIAlpZiAoYnVmWzBdICE9IDAgfHwgYnVmWzFdICE9IDAgfHwgYnVmWzJdICE9IDApCiAJCWdvdG8gZXJyOwogCisJcCA9IGJyX3BvcnRfZ2V0X3JjdShkZXYpOworCWlmICghcCkKKwkJZ290byBlcnI7CisKIAliciA9IHAtPmJyOwogCXNwaW5fbG9jaygmYnItPmxvY2spOwogCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX3N0cF9pZi5jIGIvbmV0L2JyaWRnZS9icl9zdHBfaWYuYwppbmRleCAxZDg4MjY5Li43OTM3MmQ0IDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX3N0cF9pZi5jCisrKyBiL25ldC9icmlkZ2UvYnJfc3RwX2lmLmMKQEAgLTE0NSw3ICsxNDUsNyBAQAogCWNoYXIgKmVudnBbXSA9IHsgTlVMTCB9OwogCiAJaWYgKGJyLT5zdHBfZW5hYmxlZCA9PSBCUl9VU0VSX1NUUCkgewotCQlyID0gY2FsbF91c2VybW9kZWhlbHBlcihCUl9TVFBfUFJPRywgYXJndiwgZW52cCwgMSk7CisJCXIgPSBjYWxsX3VzZXJtb2RlaGVscGVyKEJSX1NUUF9QUk9HLCBhcmd2LCBlbnZwLCBVTUhfV0FJVF9QUk9DKTsKIAkJYnJfaW5mbyhiciwgInVzZXJzcGFjZSBTVFAgc3RvcHBlZCwgcmV0dXJuIGNvZGUgJWRcbiIsIHIpOwogCiAJCS8qIFRvIHN0YXJ0IHRpbWVycyBvbiBhbnkgcG9ydHMgbGVmdCBpbiBibG9ja2luZyAqLwpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZV9icm91dGUuYyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfYnJvdXRlLmMKaW5kZXggYWUzZjEwNi4uMWJjYWYzNiAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZV9icm91dGUuYworKysgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlX2Jyb3V0ZS5jCkBAIC04Nyw3ICs4Nyw4IEBACiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAJLyogc2VlIGJyX2lucHV0LmMgKi8KLQlyY3VfYXNzaWduX3BvaW50ZXIoYnJfc2hvdWxkX3JvdXRlX2hvb2ssIGVidF9icm91dGUpOworCXJjdV9hc3NpZ25fcG9pbnRlcihicl9zaG91bGRfcm91dGVfaG9vaywKKwkJCSAgIChicl9zaG91bGRfcm91dGVfaG9va190ICopZWJ0X2Jyb3V0ZSk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jCmluZGV4IGExZGNmODMuLjE2ZGYwNTMgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMKKysrIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYwpAQCAtMTI4LDYgKzEyOCw3IEBACiAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0KQogewogCWNvbnN0IHN0cnVjdCBldGhoZHIgKmggPSBldGhfaGRyKHNrYik7CisJY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcDsKIAlfX2JlMTYgZXRocHJvdG87CiAJaW50IHZlcmRpY3QsIGk7CiAKQEAgLTE0OCwxMyArMTQ5LDExIEBACiAJaWYgKEZXSU5WMihlYnRfZGV2X2NoZWNrKGUtPm91dCwgb3V0KSwgRUJUX0lPVVQpKQogCQlyZXR1cm4gMTsKIAkvKiByY3VfcmVhZF9sb2NrKCllZCBieSBuZl9ob29rX3Nsb3cgKi8KLQlpZiAoaW4gJiYgYnJfcG9ydF9leGlzdHMoaW4pICYmCi0JICAgIEZXSU5WMihlYnRfZGV2X2NoZWNrKGUtPmxvZ2ljYWxfaW4sIGJyX3BvcnRfZ2V0X3JjdShpbiktPmJyLT5kZXYpLAotCQkgICBFQlRfSUxPR0lDQUxJTikpCisJaWYgKGluICYmIChwID0gYnJfcG9ydF9nZXRfcmN1KGluKSkgIT0gTlVMTCAmJgorCSAgICBGV0lOVjIoZWJ0X2Rldl9jaGVjayhlLT5sb2dpY2FsX2luLCBwLT5ici0+ZGV2KSwgRUJUX0lMT0dJQ0FMSU4pKQogCQlyZXR1cm4gMTsKLQlpZiAob3V0ICYmIGJyX3BvcnRfZXhpc3RzKG91dCkgJiYKLQkgICAgRldJTlYyKGVidF9kZXZfY2hlY2soZS0+bG9naWNhbF9vdXQsIGJyX3BvcnRfZ2V0X3JjdShvdXQpLT5ici0+ZGV2KSwKLQkJICAgRUJUX0lMT0dJQ0FMT1VUKSkKKwlpZiAob3V0ICYmIChwID0gYnJfcG9ydF9nZXRfcmN1KG91dCkpICE9IE5VTEwgJiYKKwkgICAgRldJTlYyKGVidF9kZXZfY2hlY2soZS0+bG9naWNhbF9vdXQsIHAtPmJyLT5kZXYpLCBFQlRfSUxPR0lDQUxPVVQpKQogCQlyZXR1cm4gMTsKIAogCWlmIChlLT5iaXRtYXNrICYgRUJUX1NPVVJDRU1BQykgewpAQCAtMTE0OCw3ICsxMTQ3LDcgQEAKIAl2b2lkICpwOwogCiAJaWYgKGlucHV0X3RhYmxlID09IE5VTEwgfHwgKHJlcGwgPSBpbnB1dF90YWJsZS0+dGFibGUpID09IE5VTEwgfHwKLQkgICAgcmVwbC0+ZW50cmllcyA9PSAwIHx8IHJlcGwtPmVudHJpZXNfc2l6ZSA9PSAwIHx8CisJICAgIHJlcGwtPmVudHJpZXMgPT0gTlVMTCB8fCByZXBsLT5lbnRyaWVzX3NpemUgPT0gMCB8fAogCSAgICByZXBsLT5jb3VudGVycyAhPSBOVUxMIHx8IGlucHV0X3RhYmxlLT5wcml2YXRlICE9IE5VTEwpIHsKIAkJQlVHUFJJTlQoIkJhZCB0YWJsZSBkYXRhIGZvciBlYnRfcmVnaXN0ZXJfdGFibGUhISFcbiIpOwogCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKZGlmZiAtLWdpdCBhL25ldC9jYWlmL01ha2VmaWxlIGIvbmV0L2NhaWYvTWFrZWZpbGUKaW5kZXggZjg3NDgxZi4uOWQzOGU0MCAxMDA2NDQKLS0tIGEvbmV0L2NhaWYvTWFrZWZpbGUKKysrIGIvbmV0L2NhaWYvTWFrZWZpbGUKQEAgLTEsOCArMSw2IEBACi1pZmVxICgkKENPTkZJR19DQUlGX0RFQlVHKSx5KQotRVhUUkFfQ0ZMQUdTICs9IC1EREVCVUcKLWVuZGlmCitjY2ZsYWdzLSQoQ09ORklHX0NBSUZfREVCVUcpICAgICA6PSAgICAgIC1EREVCVUcKIAotY2FpZi1vYmpzIDo9IGNhaWZfZGV2Lm8gXAorY2FpZi15IDo9IGNhaWZfZGV2Lm8gXAogCWNmY25mZy5vIGNmbXV4bC5vIGNmY3RybC5vICBcCiAJY2Zmcm1sLm8gY2Z2ZWlsLm8gY2ZkYmdsLm9cCiAJY2ZzZXJsLm8gY2ZkZ21sLm8gIFwKQEAgLTEzLDQgKzExLDQgQEAKIG9iai0kKENPTkZJR19DQUlGX05FVERFVikgKz0gY2hubF9uZXQubwogb2JqLSQoQ09ORklHX0NBSUYpICs9IGNhaWZfc29ja2V0Lm8KIAotZXhwb3J0LW9ianMgOj0gY2FpZi5vCitleHBvcnQteSA6PSBjYWlmLm8KZGlmZiAtLWdpdCBhL25ldC9jYW4vTWFrZWZpbGUgYi9uZXQvY2FuL01ha2VmaWxlCmluZGV4IDljZDNjNGIuLjJkMzg5NGIzIDEwMDY0NAotLS0gYS9uZXQvY2FuL01ha2VmaWxlCisrKyBiL25ldC9jYW4vTWFrZWZpbGUKQEAgLTMsMTAgKzMsMTAgQEAKICMKIAogb2JqLSQoQ09ORklHX0NBTikJKz0gY2FuLm8KLWNhbi1vYmpzCQk6PSBhZl9jYW4ubyBwcm9jLm8KK2Nhbi15CQkJOj0gYWZfY2FuLm8gcHJvYy5vCiAKIG9iai0kKENPTkZJR19DQU5fUkFXKQkrPSBjYW4tcmF3Lm8KLWNhbi1yYXctb2JqcwkJOj0gcmF3Lm8KK2Nhbi1yYXcteQkJOj0gcmF3Lm8KIAogb2JqLSQoQ09ORklHX0NBTl9CQ00pCSs9IGNhbi1iY20ubwotY2FuLWJjbS1vYmpzCQk6PSBiY20ubworY2FuLWJjbS15CQk6PSBiY20ubwpkaWZmIC0tZ2l0IGEvbmV0L2NlcGgvTWFrZWZpbGUgYi9uZXQvY2VwaC9NYWtlZmlsZQppbmRleCA1ZjE5NDE1Li5lODdlZjQzIDEwMDY0NAotLS0gYS9uZXQvY2VwaC9NYWtlZmlsZQorKysgYi9uZXQvY2VwaC9NYWtlZmlsZQpAQCAtMyw3ICszLDcgQEAKICMKIG9iai0kKENPTkZJR19DRVBIX0xJQikgKz0gbGliY2VwaC5vCiAKLWxpYmNlcGgtb2JqcyA6PSBjZXBoX2NvbW1vbi5vIG1lc3Nlbmdlci5vIG1zZ3Bvb2wubyBidWZmZXIubyBwYWdlbGlzdC5vIFwKK2xpYmNlcGgteSA6PSBjZXBoX2NvbW1vbi5vIG1lc3Nlbmdlci5vIG1zZ3Bvb2wubyBidWZmZXIubyBwYWdlbGlzdC5vIFwKIAltb25fY2xpZW50Lm8gXAogCW9zZF9jbGllbnQubyBvc2RtYXAubyBjcnVzaC9jcnVzaC5vIGNydXNoL21hcHBlci5vIGNydXNoL2hhc2gubyBcCiAJZGVidWdmcy5vIFwKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2RhdGFncmFtLmMgYi9uZXQvY29yZS9kYXRhZ3JhbS5jCmluZGV4IGNkMWUwMzkuLjE4YWMxMTIgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2RhdGFncmFtLmMKKysrIGIvbmV0L2NvcmUvZGF0YWdyYW0uYwpAQCAtMTc3LDcgKzE3Nyw3IEBACiAJCSAqIGludGVycnVwdCBsZXZlbCB3aWxsIHN1ZGRlbmx5IGVhdCB0aGUgcmVjZWl2ZV9xdWV1ZS4KIAkJICoKIAkJICogTG9vayBhdCBjdXJyZW50IG5mcyBjbGllbnQgYnkgdGhlIHdheS4uLgotCQkgKiBIb3dldmVyLCB0aGlzIGZ1bmN0aW9uIHdhcyBjb3JyZW50IGluIGFueSBjYXNlLiA4KQorCQkgKiBIb3dldmVyLCB0aGlzIGZ1bmN0aW9uIHdhcyBjb3JyZWN0IGluIGFueSBjYXNlLiA4KQogCQkgKi8KIAkJdW5zaWduZWQgbG9uZyBjcHVfZmxhZ3M7CiAKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmMKaW5kZXggMGRkNTRhNi4uYTIxNTI2OSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGV2LmMKKysrIGIvbmV0L2NvcmUvZGV2LmMKQEAgLTc0MywzNCArNzQzLDMxIEBACiBFWFBPUlRfU1lNQk9MKGRldl9nZXRfYnlfaW5kZXgpOwogCiAvKioKLSAqCWRldl9nZXRieWh3YWRkciAtIGZpbmQgYSBkZXZpY2UgYnkgaXRzIGhhcmR3YXJlIGFkZHJlc3MKKyAqCWRldl9nZXRieWh3YWRkcl9yY3UgLSBmaW5kIGEgZGV2aWNlIGJ5IGl0cyBoYXJkd2FyZSBhZGRyZXNzCiAgKglAbmV0OiB0aGUgYXBwbGljYWJsZSBuZXQgbmFtZXNwYWNlCiAgKglAdHlwZTogbWVkaWEgdHlwZSBvZiBkZXZpY2UKICAqCUBoYTogaGFyZHdhcmUgYWRkcmVzcwogICoKICAqCVNlYXJjaCBmb3IgYW4gaW50ZXJmYWNlIGJ5IE1BQyBhZGRyZXNzLiBSZXR1cm5zIE5VTEwgaWYgdGhlIGRldmljZQotICoJaXMgbm90IGZvdW5kIG9yIGEgcG9pbnRlciB0byB0aGUgZGV2aWNlLiBUaGUgY2FsbGVyIG11c3QgaG9sZCB0aGUKLSAqCXJ0bmwgc2VtYXBob3JlLiBUaGUgcmV0dXJuZWQgZGV2aWNlIGhhcyBub3QgaGFkIGl0cyByZWYgY291bnQgaW5jcmVhc2VkCisgKglpcyBub3QgZm91bmQgb3IgYSBwb2ludGVyIHRvIHRoZSBkZXZpY2UuIFRoZSBjYWxsZXIgbXVzdCBob2xkIFJDVQorICoJVGhlIHJldHVybmVkIGRldmljZSBoYXMgbm90IGhhZCBpdHMgcmVmIGNvdW50IGluY3JlYXNlZAogICoJYW5kIHRoZSBjYWxsZXIgbXVzdCB0aGVyZWZvcmUgYmUgY2FyZWZ1bCBhYm91dCBsb2NraW5nCiAgKgotICoJQlVHUzoKLSAqCUlmIHRoZSBBUEkgd2FzIGNvbnNpc3RlbnQgdGhpcyB3b3VsZCBiZSBfX2Rldl9nZXRfYnlfaHdhZGRyCiAgKi8KIAotc3RydWN0IG5ldF9kZXZpY2UgKmRldl9nZXRieWh3YWRkcihzdHJ1Y3QgbmV0ICpuZXQsIHVuc2lnbmVkIHNob3J0IHR5cGUsIGNoYXIgKmhhKQorc3RydWN0IG5ldF9kZXZpY2UgKmRldl9nZXRieWh3YWRkcl9yY3Uoc3RydWN0IG5ldCAqbmV0LCB1bnNpZ25lZCBzaG9ydCB0eXBlLAorCQkJCSAgICAgICBjb25zdCBjaGFyICpoYSkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCi0JQVNTRVJUX1JUTkwoKTsKLQotCWZvcl9lYWNoX25ldGRldihuZXQsIGRldikKKwlmb3JfZWFjaF9uZXRkZXZfcmN1KG5ldCwgZGV2KQogCQlpZiAoZGV2LT50eXBlID09IHR5cGUgJiYKIAkJICAgICFtZW1jbXAoZGV2LT5kZXZfYWRkciwgaGEsIGRldi0+YWRkcl9sZW4pKQogCQkJcmV0dXJuIGRldjsKIAogCXJldHVybiBOVUxMOwogfQotRVhQT1JUX1NZTUJPTChkZXZfZ2V0Ynlod2FkZHIpOworRVhQT1JUX1NZTUJPTChkZXZfZ2V0Ynlod2FkZHJfcmN1KTsKIAogc3RydWN0IG5ldF9kZXZpY2UgKl9fZGV2X2dldGZpcnN0Ynlod3R5cGUoc3RydWN0IG5ldCAqbmV0LCB1bnNpZ25lZCBzaG9ydCB0eXBlKQogewpAQCAtMTIyNSw1MiArMTIyMiw5MCBAQAogfQogRVhQT1JUX1NZTUJPTChkZXZfb3Blbik7CiAKLXN0YXRpYyBpbnQgX19kZXZfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19kZXZfY2xvc2VfbWFueShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQogewotCWNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyAqb3BzID0gZGV2LT5uZXRkZXZfb3BzOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAKIAlBU1NFUlRfUlROTCgpOwogCW1pZ2h0X3NsZWVwKCk7CiAKLQkvKgotCSAqCVRlbGwgcGVvcGxlIHdlIGFyZSBnb2luZyBkb3duLCBzbyB0aGF0IHRoZXkgY2FuCi0JICoJcHJlcGFyZSB0byBkZWF0aCwgd2hlbiBkZXZpY2UgaXMgc3RpbGwgb3BlcmF0aW5nLgotCSAqLwotCWNhbGxfbmV0ZGV2aWNlX25vdGlmaWVycyhORVRERVZfR09JTkdfRE9XTiwgZGV2KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgaGVhZCwgdW5yZWdfbGlzdCkgeworCQkvKgorCQkgKglUZWxsIHBlb3BsZSB3ZSBhcmUgZ29pbmcgZG93biwgc28gdGhhdCB0aGV5IGNhbgorCQkgKglwcmVwYXJlIHRvIGRlYXRoLCB3aGVuIGRldmljZSBpcyBzdGlsbCBvcGVyYXRpbmcuCisJCSAqLworCQljYWxsX25ldGRldmljZV9ub3RpZmllcnMoTkVUREVWX0dPSU5HX0RPV04sIGRldik7CiAKLQljbGVhcl9iaXQoX19MSU5LX1NUQVRFX1NUQVJULCAmZGV2LT5zdGF0ZSk7CisJCWNsZWFyX2JpdChfX0xJTktfU1RBVEVfU1RBUlQsICZkZXYtPnN0YXRlKTsKIAotCS8qIFN5bmNocm9uaXplIHRvIHNjaGVkdWxlZCBwb2xsLiBXZSBjYW5ub3QgdG91Y2ggcG9sbCBsaXN0LAotCSAqIGl0IGNhbiBiZSBldmVuIG9uIGRpZmZlcmVudCBjcHUuIFNvIGp1c3QgY2xlYXIgbmV0aWZfcnVubmluZygpLgotCSAqCi0JICogZGV2LT5zdG9wKCkgd2lsbCBpbnZva2UgbmFwaV9kaXNhYmxlKCkgb24gYWxsIG9mIGl0J3MKLQkgKiBuYXBpX3N0cnVjdCBpbnN0YW5jZXMgb24gdGhpcyBkZXZpY2UuCi0JICovCi0Jc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsgLyogQ29tbWl0IG5ldGlmX3J1bm5pbmcoKS4gKi8KKwkJLyogU3luY2hyb25pemUgdG8gc2NoZWR1bGVkIHBvbGwuIFdlIGNhbm5vdCB0b3VjaCBwb2xsIGxpc3QsIGl0CisJCSAqIGNhbiBiZSBldmVuIG9uIGRpZmZlcmVudCBjcHUuIFNvIGp1c3QgY2xlYXIgbmV0aWZfcnVubmluZygpLgorCQkgKgorCQkgKiBkZXYtPnN0b3AoKSB3aWxsIGludm9rZSBuYXBpX2Rpc2FibGUoKSBvbiBhbGwgb2YgaXQncworCQkgKiBuYXBpX3N0cnVjdCBpbnN0YW5jZXMgb24gdGhpcyBkZXZpY2UuCisJCSAqLworCQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOyAvKiBDb21taXQgbmV0aWZfcnVubmluZygpLiAqLworCX0KIAotCWRldl9kZWFjdGl2YXRlKGRldik7CisJZGV2X2RlYWN0aXZhdGVfbWFueShoZWFkKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCBoZWFkLCB1bnJlZ19saXN0KSB7CisJCWNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyAqb3BzID0gZGV2LT5uZXRkZXZfb3BzOworCisJCS8qCisJCSAqCUNhbGwgdGhlIGRldmljZSBzcGVjaWZpYyBjbG9zZS4gVGhpcyBjYW5ub3QgZmFpbC4KKwkJICoJT25seSBpZiBkZXZpY2UgaXMgVVAKKwkJICoKKwkJICoJV2UgYWxsb3cgaXQgdG8gYmUgY2FsbGVkIGV2ZW4gYWZ0ZXIgYSBERVRBQ0ggaG90LXBsdWcKKwkJICoJZXZlbnQuCisJCSAqLworCQlpZiAob3BzLT5uZG9fc3RvcCkKKwkJCW9wcy0+bmRvX3N0b3AoZGV2KTsKKworCQkvKgorCQkgKglEZXZpY2UgaXMgbm93IGRvd24uCisJCSAqLworCisJCWRldi0+ZmxhZ3MgJj0gfklGRl9VUDsKKworCQkvKgorCQkgKglTaHV0ZG93biBORVRfRE1BCisJCSAqLworCQluZXRfZG1hZW5naW5lX3B1dCgpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJTElTVF9IRUFEKHNpbmdsZSk7CisKKwlsaXN0X2FkZCgmZGV2LT51bnJlZ19saXN0LCAmc2luZ2xlKTsKKwlyZXR1cm4gX19kZXZfY2xvc2VfbWFueSgmc2luZ2xlKTsKK30KKworaW50IGRldl9jbG9zZV9tYW55KHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgKnRtcDsKKwlMSVNUX0hFQUQodG1wX2xpc3QpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRldiwgdG1wLCBoZWFkLCB1bnJlZ19saXN0KQorCQlpZiAoIShkZXYtPmZsYWdzICYgSUZGX1VQKSkKKwkJCWxpc3RfbW92ZSgmZGV2LT51bnJlZ19saXN0LCAmdG1wX2xpc3QpOworCisJX19kZXZfY2xvc2VfbWFueShoZWFkKTsKIAogCS8qCi0JICoJQ2FsbCB0aGUgZGV2aWNlIHNwZWNpZmljIGNsb3NlLiBUaGlzIGNhbm5vdCBmYWlsLgotCSAqCU9ubHkgaWYgZGV2aWNlIGlzIFVQCi0JICoKLQkgKglXZSBhbGxvdyBpdCB0byBiZSBjYWxsZWQgZXZlbiBhZnRlciBhIERFVEFDSCBob3QtcGx1ZwotCSAqCWV2ZW50LgorCSAqIFRlbGwgcGVvcGxlIHdlIGFyZSBkb3duCiAJICovCi0JaWYgKG9wcy0+bmRvX3N0b3ApCi0JCW9wcy0+bmRvX3N0b3AoZGV2KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgaGVhZCwgdW5yZWdfbGlzdCkgeworCQlydG1zZ19pZmluZm8oUlRNX05FV0xJTkssIGRldiwgSUZGX1VQfElGRl9SVU5OSU5HKTsKKwkJY2FsbF9uZXRkZXZpY2Vfbm90aWZpZXJzKE5FVERFVl9ET1dOLCBkZXYpOworCX0KIAotCS8qCi0JICoJRGV2aWNlIGlzIG5vdyBkb3duLgotCSAqLwotCi0JZGV2LT5mbGFncyAmPSB+SUZGX1VQOwotCi0JLyoKLQkgKglTaHV0ZG93biBORVRfRE1BCi0JICovCi0JbmV0X2RtYWVuZ2luZV9wdXQoKTsKLQorCS8qIHJvbGxiYWNrX3JlZ2lzdGVyZWRfbWFueSBuZWVkcyB0aGUgY29tcGxldGUgb3JpZ2luYWwgbGlzdCAqLworCWxpc3Rfc3BsaWNlKCZ0bXBfbGlzdCwgaGVhZCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEyODUsMTYgKzEzMjAsMTAgQEAKICAqLwogaW50IGRldl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCWlmICghKGRldi0+ZmxhZ3MgJiBJRkZfVVApKQotCQlyZXR1cm4gMDsKKwlMSVNUX0hFQUQoc2luZ2xlKTsKIAotCV9fZGV2X2Nsb3NlKGRldik7Ci0KLQkvKgotCSAqIFRlbGwgcGVvcGxlIHdlIGFyZSBkb3duCi0JICovCi0JcnRtc2dfaWZpbmZvKFJUTV9ORVdMSU5LLCBkZXYsIElGRl9VUHxJRkZfUlVOTklORyk7Ci0JY2FsbF9uZXRkZXZpY2Vfbm90aWZpZXJzKE5FVERFVl9ET1dOLCBkZXYpOworCWxpc3RfYWRkKCZkZXYtPnVucmVnX2xpc3QsICZzaW5nbGUpOworCWRldl9jbG9zZV9tYW55KCZzaW5nbGUpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNDk5LDYgKzE1MjgsMTQgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGRldl9mb3J3YXJkX3NrYik7CiAKK3N0YXRpYyBpbmxpbmUgaW50IGRlbGl2ZXJfc2tiKHN0cnVjdCBza19idWZmICpza2IsCisJCQkgICAgICBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0X3ByZXYsCisJCQkgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpCit7CisJYXRvbWljX2luYygmc2tiLT51c2Vycyk7CisJcmV0dXJuIHB0X3ByZXYtPmZ1bmMoc2tiLCBza2ItPmRldiwgcHRfcHJldiwgb3JpZ19kZXYpOworfQorCiAvKgogICoJU3VwcG9ydCByb3V0aW5lLiBTZW5kcyBvdXRnb2luZyBmcmFtZXMgdG8gYW55IG5ldHdvcmsKICAqCXRhcHMgY3VycmVudGx5IGluIHVzZS4KQEAgLTE1MDcsMTMgKzE1NDQsOCBAQAogc3RhdGljIHZvaWQgZGV2X3F1ZXVlX3htaXRfbml0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHBhY2tldF90eXBlICpwdHlwZTsKLQotI2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVAotCWlmICghKHNrYi0+dHN0YW1wLnR2NjQgJiYgKEdfVENfRlJPTShza2ItPnRjX3ZlcmQpICYgQVRfSU5HUkVTUykpKQotCQluZXRfdGltZXN0YW1wX3NldChza2IpOwotI2Vsc2UKLQluZXRfdGltZXN0YW1wX3NldChza2IpOwotI2VuZGlmCisJc3RydWN0IHNrX2J1ZmYgKnNrYjIgPSBOVUxMOworCXN0cnVjdCBwYWNrZXRfdHlwZSAqcHRfcHJldiA9IE5VTEw7CiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocHR5cGUsICZwdHlwZV9hbGwsIGxpc3QpIHsKQEAgLTE1MjMsMTAgKzE1NTUsMTggQEAKIAkJaWYgKChwdHlwZS0+ZGV2ID09IGRldiB8fCAhcHR5cGUtPmRldikgJiYKIAkJICAgIChwdHlwZS0+YWZfcGFja2V0X3ByaXYgPT0gTlVMTCB8fAogCQkgICAgIChzdHJ1Y3Qgc29jayAqKXB0eXBlLT5hZl9wYWNrZXRfcHJpdiAhPSBza2ItPnNrKSkgewotCQkJc3RydWN0IHNrX2J1ZmYgKnNrYjIgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTsKKwkJCWlmIChwdF9wcmV2KSB7CisJCQkJZGVsaXZlcl9za2Ioc2tiMiwgcHRfcHJldiwgc2tiLT5kZXYpOworCQkJCXB0X3ByZXYgPSBwdHlwZTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJc2tiMiA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpOwogCQkJaWYgKCFza2IyKQogCQkJCWJyZWFrOwogCisJCQluZXRfdGltZXN0YW1wX3NldChza2IyKTsKKwogCQkJLyogc2tiLT5uaCBzaG91bGQgYmUgY29ycmVjdGx5CiAJCQkgICBzZXQgYnkgc2VuZGVyLCBzbyB0aGF0IHRoZSBzZWNvbmQgc3RhdGVtZW50IGlzCiAJCQkgICBqdXN0IHByb3RlY3Rpb24gYWdhaW5zdCBidWdneSBwcm90b2NvbHMuCkBAIC0xNTQ1LDkgKzE1ODUsMTEgQEAKIAogCQkJc2tiMi0+dHJhbnNwb3J0X2hlYWRlciA9IHNrYjItPm5ldHdvcmtfaGVhZGVyOwogCQkJc2tiMi0+cGt0X3R5cGUgPSBQQUNLRVRfT1VUR09JTkc7Ci0JCQlwdHlwZS0+ZnVuYyhza2IyLCBza2ItPmRldiwgcHR5cGUsIHNrYi0+ZGV2KTsKKwkJCXB0X3ByZXYgPSBwdHlwZTsKIAkJfQogCX0KKwlpZiAocHRfcHJldikKKwkJcHRfcHJldi0+ZnVuYyhza2IyLCBza2ItPmRldiwgcHRfcHJldiwgc2tiLT5kZXYpOwogCXJjdV9yZWFkX3VubG9jaygpOwogfQogCkBAIC0xNTU3LDEyICsxNTk5LDE5IEBACiAgKi8KIGludCBuZXRpZl9zZXRfcmVhbF9udW1fdHhfcXVldWVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCB0eHEpCiB7CisJaW50IHJjOworCiAJaWYgKHR4cSA8IDEgfHwgdHhxID4gZGV2LT5udW1fdHhfcXVldWVzKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChkZXYtPnJlZ19zdGF0ZSA9PSBORVRSRUdfUkVHSVNURVJFRCkgewogCQlBU1NFUlRfUlROTCgpOwogCisJCXJjID0gbmV0ZGV2X3F1ZXVlX3VwZGF0ZV9rb2JqZWN0cyhkZXYsIGRldi0+cmVhbF9udW1fdHhfcXVldWVzLAorCQkJCQkJICB0eHEpOworCQlpZiAocmMpCisJCQlyZXR1cm4gcmM7CisKIAkJaWYgKHR4cSA8IGRldi0+cmVhbF9udW1fdHhfcXVldWVzKQogCQkJcWRpc2NfcmVzZXRfYWxsX3R4X2d0KGRldiwgdHhxKTsKIAl9CkBAIC0xNzU3LDcgKzE4MDYsNyBAQAogCQlnb3RvIG91dF9zZXRfc3VtbWVkOwogCX0KIAotCW9mZnNldCA9IHNrYi0+Y3N1bV9zdGFydCAtIHNrYl9oZWFkcm9vbShza2IpOworCW9mZnNldCA9IHNrYl9jaGVja3N1bV9zdGFydF9vZmZzZXQoc2tiKTsKIAlCVUdfT04ob2Zmc2V0ID49IHNrYl9oZWFkbGVuKHNrYikpOwogCWNzdW0gPSBza2JfY2hlY2tzdW0oc2tiLCBvZmZzZXQsIHNrYi0+bGVuIC0gb2Zmc2V0LCAwKTsKIApAQCAtMTc5NCwxNiArMTg0MywxOCBAQAogCXN0cnVjdCBza19idWZmICpzZWdzID0gRVJSX1BUUigtRVBST1RPTk9TVVBQT1JUKTsKIAlzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0eXBlOwogCV9fYmUxNiB0eXBlID0gc2tiLT5wcm90b2NvbDsKKwlpbnQgdmxhbl9kZXB0aCA9IEVUSF9ITEVOOwogCWludCBlcnI7CiAKLQlpZiAodHlwZSA9PSBodG9ucyhFVEhfUF84MDIxUSkpIHsKLQkJc3RydWN0IHZsYW5fZXRoaGRyICp2ZWg7CisJd2hpbGUgKHR5cGUgPT0gaHRvbnMoRVRIX1BfODAyMVEpKSB7CisJCXN0cnVjdCB2bGFuX2hkciAqdmg7CiAKLQkJaWYgKHVubGlrZWx5KCFwc2tiX21heV9wdWxsKHNrYiwgVkxBTl9FVEhfSExFTikpKQorCQlpZiAodW5saWtlbHkoIXBza2JfbWF5X3B1bGwoc2tiLCB2bGFuX2RlcHRoICsgVkxBTl9ITEVOKSkpCiAJCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAotCQl2ZWggPSAoc3RydWN0IHZsYW5fZXRoaGRyICopc2tiLT5kYXRhOwotCQl0eXBlID0gdmVoLT5oX3ZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvOworCQl2aCA9IChzdHJ1Y3Qgdmxhbl9oZHIgKikoc2tiLT5kYXRhICsgdmxhbl9kZXB0aCk7CisJCXR5cGUgPSB2aC0+aF92bGFuX2VuY2Fwc3VsYXRlZF9wcm90bzsKKwkJdmxhbl9kZXB0aCArPSBWTEFOX0hMRU47CiAJfQogCiAJc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKQEAgLTE4MTcsOCArMTg2OCw3IEBACiAJCWlmIChkZXYgJiYgZGV2LT5ldGh0b29sX29wcyAmJiBkZXYtPmV0aHRvb2xfb3BzLT5nZXRfZHJ2aW5mbykKIAkJCWRldi0+ZXRodG9vbF9vcHMtPmdldF9kcnZpbmZvKGRldiwgJmluZm8pOwogCi0JCVdBUk4oMSwgIiVzOiBjYXBzPSgweCVseCwgMHglbHgpIGxlbj0lZCBkYXRhX2xlbj0lZCAiCi0JCQkiaXBfc3VtbWVkPSVkIiwKKwkJV0FSTigxLCAiJXM6IGNhcHM9KDB4JWx4LCAweCVseCkgbGVuPSVkIGRhdGFfbGVuPSVkIGlwX3N1bW1lZD0lZFxuIiwKIAkJICAgICBpbmZvLmRyaXZlciwgZGV2ID8gZGV2LT5mZWF0dXJlcyA6IDBMLAogCQkgICAgIHNrYi0+c2sgPyBza2ItPnNrLT5za19yb3V0ZV9jYXBzIDogMEwsCiAJCSAgICAgc2tiLT5sZW4sIHNrYi0+ZGF0YV9sZW4sIHNrYi0+aXBfc3VtbWVkKTsKQEAgLTE5NjcsNiArMjAxNywyMyBAQAogCX0KIH0KIAoraW50IG5ldGlmX2dldF92bGFuX2ZlYXR1cmVzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJX19iZTE2IHByb3RvY29sID0gc2tiLT5wcm90b2NvbDsKKworCWlmIChwcm90b2NvbCA9PSBodG9ucyhFVEhfUF84MDIxUSkpIHsKKwkJc3RydWN0IHZsYW5fZXRoaGRyICp2ZWggPSAoc3RydWN0IHZsYW5fZXRoaGRyICopc2tiLT5kYXRhOworCQlwcm90b2NvbCA9IHZlaC0+aF92bGFuX2VuY2Fwc3VsYXRlZF9wcm90bzsKKwl9IGVsc2UgaWYgKCFza2ItPnZsYW5fdGNpKQorCQlyZXR1cm4gZGV2LT5mZWF0dXJlczsKKworCWlmIChwcm90b2NvbCAhPSBodG9ucyhFVEhfUF84MDIxUSkpCisJCXJldHVybiBkZXYtPmZlYXR1cmVzICYgZGV2LT52bGFuX2ZlYXR1cmVzOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKG5ldGlmX2dldF92bGFuX2ZlYXR1cmVzKTsKKwogLyoKICAqIFJldHVybnMgdHJ1ZSBpZiBlaXRoZXI6CiAgKgkxLiBza2IgaGFzIGZyYWdfbGlzdCBhbmQgdGhlIGRldmljZSBkb2Vzbid0IHN1cHBvcnQgRlJBR0xJU1QsIG9yCkBAIC0xOTc3LDE1ICsyMDQ0LDIwIEBACiBzdGF0aWMgaW5saW5lIGludCBza2JfbmVlZHNfbGluZWFyaXplKHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlpbnQgZmVhdHVyZXMgPSBkZXYtPmZlYXR1cmVzOworCWlmIChza2JfaXNfbm9ubGluZWFyKHNrYikpIHsKKwkJaW50IGZlYXR1cmVzID0gZGV2LT5mZWF0dXJlczsKIAotCWlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QXzgwMjFRKSB8fCB2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpCi0JCWZlYXR1cmVzICY9IGRldi0+dmxhbl9mZWF0dXJlczsKKwkJaWYgKHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkKKwkJCWZlYXR1cmVzICY9IGRldi0+dmxhbl9mZWF0dXJlczsKIAotCXJldHVybiBza2JfaXNfbm9ubGluZWFyKHNrYikgJiYKLQkgICAgICAgKChza2JfaGFzX2ZyYWdfbGlzdChza2IpICYmICEoZmVhdHVyZXMgJiBORVRJRl9GX0ZSQUdMSVNUKSkgfHwKLQkJKHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgJiYgKCEoZmVhdHVyZXMgJiBORVRJRl9GX1NHKSB8fAotCQkJCQkgICAgICBpbGxlZ2FsX2hpZ2hkbWEoZGV2LCBza2IpKSkpOworCQlyZXR1cm4gKHNrYl9oYXNfZnJhZ19saXN0KHNrYikgJiYKKwkJCSEoZmVhdHVyZXMgJiBORVRJRl9GX0ZSQUdMSVNUKSkgfHwKKwkJCShza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzICYmCisJCQkoIShmZWF0dXJlcyAmIE5FVElGX0ZfU0cpIHx8CisJCQlpbGxlZ2FsX2hpZ2hkbWEoZGV2LCBza2IpKSk7CisJfQorCisJcmV0dXJuIDA7CiB9CiAKIGludCBkZXZfaGFyZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCkBAIC0xOTk1LDkgKzIwNjcsNiBAQAogCWludCByYyA9IE5FVERFVl9UWF9PSzsKIAogCWlmIChsaWtlbHkoIXNrYi0+bmV4dCkpIHsKLQkJaWYgKCFsaXN0X2VtcHR5KCZwdHlwZV9hbGwpKQotCQkJZGV2X3F1ZXVlX3htaXRfbml0KHNrYiwgZGV2KTsKLQogCQkvKgogCQkgKiBJZiBkZXZpY2UgZG9lc250IG5lZWQgc2tiLT5kc3QsIHJlbGVhc2UgaXQgcmlnaHQgbm93IHdoaWxlCiAJCSAqIGl0cyBob3QgaW4gdGhpcyBjcHUgY2FjaGUKQEAgLTIwMDUsNiArMjA3NCw5IEBACiAJCWlmIChkZXYtPnByaXZfZmxhZ3MgJiBJRkZfWE1JVF9EU1RfUkVMRUFTRSkKIAkJCXNrYl9kc3RfZHJvcChza2IpOwogCisJCWlmICghbGlzdF9lbXB0eSgmcHR5cGVfYWxsKSkKKwkJCWRldl9xdWV1ZV94bWl0X25pdChza2IsIGRldik7CisKIAkJc2tiX29ycGhhbl90cnkoc2tiKTsKIAogCQlpZiAodmxhbl90eF90YWdfcHJlc2VudChza2IpICYmCkBAIC0yMDMxLDggKzIxMDMsOCBAQAogCQkJICogY2hlY2tzdW1taW5nIGhlcmUuCiAJCQkgKi8KIAkJCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7Ci0JCQkJc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyKHNrYiwgc2tiLT5jc3VtX3N0YXJ0IC0KLQkJCQkJICAgICAgc2tiX2hlYWRyb29tKHNrYikpOworCQkJCXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcihza2IsCisJCQkJCXNrYl9jaGVja3N1bV9zdGFydF9vZmZzZXQoc2tiKSk7CiAJCQkJaWYgKCFkZXZfY2FuX2NoZWNrc3VtKGRldiwgc2tiKSAmJgogCQkJCSAgICAgc2tiX2NoZWNrc3VtX2hlbHAoc2tiKSkKIAkJCQkJZ290byBvdXRfa2ZyZWVfc2tiOwpAQCAtMjA4NSwxNCArMjE1NywxOSBAQAogCiBzdGF0aWMgdTMyIGhhc2hybmQgX19yZWFkX21vc3RseTsKIAotdTE2IHNrYl90eF9oYXNoKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCisvKgorICogUmV0dXJucyBhIFR4IGhhc2ggYmFzZWQgb24gdGhlIGdpdmVuIHBhY2tldCBkZXNjcmlwdG9yIGEgVHggcXVldWVzJyBudW1iZXIKKyAqIHRvIGJlIHVzZWQgYXMgYSBkaXN0cmlidXRpb24gcmFuZ2UuCisgKi8KK3UxNiBfX3NrYl90eF9oYXNoKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCisJCSAgdW5zaWduZWQgaW50IG51bV90eF9xdWV1ZXMpCiB7CiAJdTMyIGhhc2g7CiAKIAlpZiAoc2tiX3J4X3F1ZXVlX3JlY29yZGVkKHNrYikpIHsKIAkJaGFzaCA9IHNrYl9nZXRfcnhfcXVldWUoc2tiKTsKLQkJd2hpbGUgKHVubGlrZWx5KGhhc2ggPj0gZGV2LT5yZWFsX251bV90eF9xdWV1ZXMpKQotCQkJaGFzaCAtPSBkZXYtPnJlYWxfbnVtX3R4X3F1ZXVlczsKKwkJd2hpbGUgKHVubGlrZWx5KGhhc2ggPj0gbnVtX3R4X3F1ZXVlcykpCisJCQloYXNoIC09IG51bV90eF9xdWV1ZXM7CiAJCXJldHVybiBoYXNoOwogCX0KIApAQCAtMjEwMiw5ICsyMTc5LDkgQEAKIAkJaGFzaCA9IChfX2ZvcmNlIHUxNikgc2tiLT5wcm90b2NvbCBeIHNrYi0+cnhoYXNoOwogCWhhc2ggPSBqaGFzaF8xd29yZChoYXNoLCBoYXNocm5kKTsKIAotCXJldHVybiAodTE2KSAoKCh1NjQpIGhhc2ggKiBkZXYtPnJlYWxfbnVtX3R4X3F1ZXVlcykgPj4gMzIpOworCXJldHVybiAodTE2KSAoKCh1NjQpIGhhc2ggKiBudW1fdHhfcXVldWVzKSA+PiAzMik7CiB9Ci1FWFBPUlRfU1lNQk9MKHNrYl90eF9oYXNoKTsKK0VYUE9SVF9TWU1CT0woX19za2JfdHhfaGFzaCk7CiAKIHN0YXRpYyBpbmxpbmUgdTE2IGRldl9jYXBfdHhxdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgcXVldWVfaW5kZXgpCiB7CkBAIC0yMTE5LDI2ICsyMTk2LDcwIEBACiAJcmV0dXJuIHF1ZXVlX2luZGV4OwogfQogCitzdGF0aWMgaW5saW5lIGludCBnZXRfeHBzX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCit7CisjaWZkZWYgQ09ORklHX1hQUworCXN0cnVjdCB4cHNfZGV2X21hcHMgKmRldl9tYXBzOworCXN0cnVjdCB4cHNfbWFwICptYXA7CisJaW50IHF1ZXVlX2luZGV4ID0gLTE7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJZGV2X21hcHMgPSByY3VfZGVyZWZlcmVuY2UoZGV2LT54cHNfbWFwcyk7CisJaWYgKGRldl9tYXBzKSB7CisJCW1hcCA9IHJjdV9kZXJlZmVyZW5jZSgKKwkJICAgIGRldl9tYXBzLT5jcHVfbWFwW3Jhd19zbXBfcHJvY2Vzc29yX2lkKCldKTsKKwkJaWYgKG1hcCkgeworCQkJaWYgKG1hcC0+bGVuID09IDEpCisJCQkJcXVldWVfaW5kZXggPSBtYXAtPnF1ZXVlc1swXTsKKwkJCWVsc2UgeworCQkJCXUzMiBoYXNoOworCQkJCWlmIChza2ItPnNrICYmIHNrYi0+c2stPnNrX2hhc2gpCisJCQkJCWhhc2ggPSBza2ItPnNrLT5za19oYXNoOworCQkJCWVsc2UKKwkJCQkJaGFzaCA9IChfX2ZvcmNlIHUxNikgc2tiLT5wcm90b2NvbCBeCisJCQkJCSAgICBza2ItPnJ4aGFzaDsKKwkJCQloYXNoID0gamhhc2hfMXdvcmQoaGFzaCwgaGFzaHJuZCk7CisJCQkJcXVldWVfaW5kZXggPSBtYXAtPnF1ZXVlc1sKKwkJCQkgICAgKCh1NjQpaGFzaCAqIG1hcC0+bGVuKSA+PiAzMl07CisJCQl9CisJCQlpZiAodW5saWtlbHkocXVldWVfaW5kZXggPj0gZGV2LT5yZWFsX251bV90eF9xdWV1ZXMpKQorCQkJCXF1ZXVlX2luZGV4ID0gLTE7CisJCX0KKwl9CisJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwlyZXR1cm4gcXVldWVfaW5kZXg7CisjZWxzZQorCXJldHVybiAtMTsKKyNlbmRpZgorfQorCiBzdGF0aWMgc3RydWN0IG5ldGRldl9xdWV1ZSAqZGV2X3BpY2tfdHgoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlpbnQgcXVldWVfaW5kZXg7CiAJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvcHMgPSBkZXYtPm5ldGRldl9vcHM7CiAKLQlpZiAob3BzLT5uZG9fc2VsZWN0X3F1ZXVlKSB7CisJaWYgKGRldi0+cmVhbF9udW1fdHhfcXVldWVzID09IDEpCisJCXF1ZXVlX2luZGV4ID0gMDsKKwllbHNlIGlmIChvcHMtPm5kb19zZWxlY3RfcXVldWUpIHsKIAkJcXVldWVfaW5kZXggPSBvcHMtPm5kb19zZWxlY3RfcXVldWUoZGV2LCBza2IpOwogCQlxdWV1ZV9pbmRleCA9IGRldl9jYXBfdHhxdWV1ZShkZXYsIHF1ZXVlX2luZGV4KTsKIAl9IGVsc2UgewogCQlzdHJ1Y3Qgc29jayAqc2sgPSBza2ItPnNrOwogCQlxdWV1ZV9pbmRleCA9IHNrX3R4X3F1ZXVlX2dldChzayk7Ci0JCWlmIChxdWV1ZV9pbmRleCA8IDAgfHwgcXVldWVfaW5kZXggPj0gZGV2LT5yZWFsX251bV90eF9xdWV1ZXMpIHsKIAotCQkJcXVldWVfaW5kZXggPSAwOwotCQkJaWYgKGRldi0+cmVhbF9udW1fdHhfcXVldWVzID4gMSkKKwkJaWYgKHF1ZXVlX2luZGV4IDwgMCB8fCBza2ItPm9vb19va2F5IHx8CisJCSAgICBxdWV1ZV9pbmRleCA+PSBkZXYtPnJlYWxfbnVtX3R4X3F1ZXVlcykgeworCQkJaW50IG9sZF9pbmRleCA9IHF1ZXVlX2luZGV4OworCisJCQlxdWV1ZV9pbmRleCA9IGdldF94cHNfcXVldWUoZGV2LCBza2IpOworCQkJaWYgKHF1ZXVlX2luZGV4IDwgMCkKIAkJCQlxdWV1ZV9pbmRleCA9IHNrYl90eF9oYXNoKGRldiwgc2tiKTsKIAotCQkJaWYgKHNrKSB7Ci0JCQkJc3RydWN0IGRzdF9lbnRyeSAqZHN0ID0gcmN1X2RlcmVmZXJlbmNlX2NoZWNrKHNrLT5za19kc3RfY2FjaGUsIDEpOworCQkJaWYgKHF1ZXVlX2luZGV4ICE9IG9sZF9pbmRleCAmJiBzaykgeworCQkJCXN0cnVjdCBkc3RfZW50cnkgKmRzdCA9CisJCQkJICAgIHJjdV9kZXJlZmVyZW5jZV9jaGVjayhzay0+c2tfZHN0X2NhY2hlLCAxKTsKIAogCQkJCWlmIChkc3QgJiYgc2tiX2RzdChza2IpID09IGRzdCkKIAkJCQkJc2tfdHhfcXVldWVfc2V0KHNrLCBxdWV1ZV9pbmRleCk7CkBAIC0yNzEyLDE0ICsyODMzLDYgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGRlbGl2ZXJfc2tiKHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgICAgICBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0X3ByZXYsCi0JCQkgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpCi17Ci0JYXRvbWljX2luYygmc2tiLT51c2Vycyk7Ci0JcmV0dXJuIHB0X3ByZXYtPmZ1bmMoc2tiLCBza2ItPmRldiwgcHRfcHJldiwgb3JpZ19kZXYpOwotfQotCiAjaWYgKGRlZmluZWQoQ09ORklHX0JSSURHRSkgfHwgZGVmaW5lZChDT05GSUdfQlJJREdFX01PRFVMRSkpICYmIFwKICAgICAoZGVmaW5lZChDT05GSUdfQVRNX0xBTkUpIHx8IGRlZmluZWQoQ09ORklHX0FUTV9MQU5FX01PRFVMRSkpCiAvKiBUaGlzIGhvb2sgaXMgZGVmaW5lZCBoZXJlIGZvciBBVE0gTEFORSAqLwpAQCAtNDg4NywxMCArNTAwMCwxMiBAQAogCQl9CiAKIAkJQlVHX09OKGRldi0+cmVnX3N0YXRlICE9IE5FVFJFR19SRUdJU1RFUkVEKTsKKwl9CiAKLQkJLyogSWYgZGV2aWNlIGlzIHJ1bm5pbmcsIGNsb3NlIGl0IGZpcnN0LiAqLwotCQlkZXZfY2xvc2UoZGV2KTsKKwkvKiBJZiBkZXZpY2UgaXMgcnVubmluZywgY2xvc2UgaXQgZmlyc3QuICovCisJZGV2X2Nsb3NlX21hbnkoaGVhZCk7CiAKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgaGVhZCwgdW5yZWdfbGlzdCkgewogCQkvKiBBbmQgdW5saW5rIGl0IGZyb20gZGV2aWNlIGNoYWluLiAqLwogCQl1bmxpc3RfbmV0ZGV2aWNlKGRldik7CiAKQEAgLTQ5NjcsMTAgKzUwODIsMTMgQEAKIAl9CiAKIAlpZiAoZmVhdHVyZXMgJiBORVRJRl9GX1VGTykgewotCQlpZiAoIShmZWF0dXJlcyAmIE5FVElGX0ZfR0VOX0NTVU0pKSB7CisJCS8qIG1heWJlIHNwbGl0IFVGTyBpbnRvIFY0IGFuZCBWNj8gKi8KKwkJaWYgKCEoKGZlYXR1cmVzICYgTkVUSUZfRl9HRU5fQ1NVTSkgfHwKKwkJICAgIChmZWF0dXJlcyAmIChORVRJRl9GX0lQX0NTVU18TkVUSUZfRl9JUFY2X0NTVU0pKQorCQkJICAgID09IChORVRJRl9GX0lQX0NTVU18TkVUSUZfRl9JUFY2X0NTVU0pKSkgewogCQkJaWYgKG5hbWUpCiAJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRHJvcHBpbmcgTkVUSUZfRl9VRk8gIgotCQkJCSAgICAgICAic2luY2Ugbm8gTkVUSUZfRl9IV19DU1VNIGZlYXR1cmUuXG4iLAorCQkJCSAgICAgICAic2luY2Ugbm8gY2hlY2tzdW0gb2ZmbG9hZCBmZWF0dXJlcy5cbiIsCiAJCQkJICAgICAgIG5hbWUpOwogCQkJZmVhdHVyZXMgJj0gfk5FVElGX0ZfVUZPOwogCQl9CkBAIC01MDE0LDkgKzUxMzIsOSBAQAogfQogRVhQT1JUX1NZTUJPTChuZXRpZl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZSk7CiAKKyNpZmRlZiBDT05GSUdfUlBTCiBzdGF0aWMgaW50IG5ldGlmX2FsbG9jX3J4X3F1ZXVlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotI2lmZGVmIENPTkZJR19SUFMKIAl1bnNpZ25lZCBpbnQgaSwgY291bnQgPSBkZXYtPm51bV9yeF9xdWV1ZXM7CiAJc3RydWN0IG5ldGRldl9yeF9xdWV1ZSAqcng7CiAKQEAgLTUwMjksMTUgKzUxNDcsMjIgQEAKIAl9CiAJZGV2LT5fcnggPSByeDsKIAotCS8qCi0JICogU2V0IGEgcG9pbnRlciB0byBmaXJzdCBlbGVtZW50IGluIHRoZSBhcnJheSB3aGljaCBob2xkcyB0aGUKLQkgKiByZWZlcmVuY2UgY291bnQuCi0JICovCiAJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCi0JCXJ4W2ldLmZpcnN0ID0gcng7Ci0jZW5kaWYKKwkJcnhbaV0uZGV2ID0gZGV2OwogCXJldHVybiAwOwogfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIG5ldGRldl9pbml0X29uZV9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgc3RydWN0IG5ldGRldl9xdWV1ZSAqcXVldWUsIHZvaWQgKl91bnVzZWQpCit7CisJLyogSW5pdGlhbGl6ZSBxdWV1ZSBsb2NrICovCisJc3Bpbl9sb2NrX2luaXQoJnF1ZXVlLT5feG1pdF9sb2NrKTsKKwluZXRkZXZfc2V0X3htaXRfbG9ja2RlcF9jbGFzcygmcXVldWUtPl94bWl0X2xvY2ssIGRldi0+dHlwZSk7CisJcXVldWUtPnhtaXRfbG9ja19vd25lciA9IC0xOworCW5ldGRldl9xdWV1ZV9udW1hX25vZGVfd3JpdGUocXVldWUsIE5VTUFfTk9fTk9ERSk7CisJcXVldWUtPmRldiA9IGRldjsKK30KIAogc3RhdGljIGludCBuZXRpZl9hbGxvY19uZXRkZXZfcXVldWVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CkBAIC01MDUzLDI1ICs1MTc4LDExIEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAlkZXYtPl90eCA9IHR4OwotCXJldHVybiAwOwotfQogCi1zdGF0aWMgdm9pZCBuZXRkZXZfaW5pdF9vbmVfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgIHN0cnVjdCBuZXRkZXZfcXVldWUgKnF1ZXVlLAotCQkJCSAgdm9pZCAqX3VudXNlZCkKLXsKLQlxdWV1ZS0+ZGV2ID0gZGV2OwotCi0JLyogSW5pdGlhbGl6ZSBxdWV1ZSBsb2NrICovCi0Jc3Bpbl9sb2NrX2luaXQoJnF1ZXVlLT5feG1pdF9sb2NrKTsKLQluZXRkZXZfc2V0X3htaXRfbG9ja2RlcF9jbGFzcygmcXVldWUtPl94bWl0X2xvY2ssIGRldi0+dHlwZSk7Ci0JcXVldWUtPnhtaXRfbG9ja19vd25lciA9IC0xOwotfQotCi1zdGF0aWMgdm9pZCBuZXRkZXZfaW5pdF9xdWV1ZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKIAluZXRkZXZfZm9yX2VhY2hfdHhfcXVldWUoZGV2LCBuZXRkZXZfaW5pdF9vbmVfcXVldWUsIE5VTEwpOwogCXNwaW5fbG9ja19pbml0KCZkZXYtPnR4X2dsb2JhbF9sb2NrKTsKKworCXJldHVybiAwOwogfQogCiAvKioKQEAgLTUxMTAsMTYgKzUyMjEsNiBAQAogCiAJZGV2LT5pZmxpbmsgPSAtMTsKIAotCXJldCA9IG5ldGlmX2FsbG9jX3J4X3F1ZXVlcyhkZXYpOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0OwotCi0JcmV0ID0gbmV0aWZfYWxsb2NfbmV0ZGV2X3F1ZXVlcyhkZXYpOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0OwotCi0JbmV0ZGV2X2luaXRfcXVldWVzKGRldik7Ci0KIAkvKiBJbml0LCBpZiB0aGlzIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZSAqLwogCWlmIChkZXYtPm5ldGRldl9vcHMtPm5kb19pbml0KSB7CiAJCXJldCA9IGRldi0+bmV0ZGV2X29wcy0+bmRvX2luaXQoZGV2KTsKQEAgLTU1NzcsMTAgKzU2NzgsMTQgQEAKIAogCWRldi0+bnVtX3R4X3F1ZXVlcyA9IHF1ZXVlX2NvdW50OwogCWRldi0+cmVhbF9udW1fdHhfcXVldWVzID0gcXVldWVfY291bnQ7CisJaWYgKG5ldGlmX2FsbG9jX25ldGRldl9xdWV1ZXMoZGV2KSkKKwkJZ290byBmcmVlX3BjcHU7CiAKICNpZmRlZiBDT05GSUdfUlBTCiAJZGV2LT5udW1fcnhfcXVldWVzID0gcXVldWVfY291bnQ7CiAJZGV2LT5yZWFsX251bV9yeF9xdWV1ZXMgPSBxdWV1ZV9jb3VudDsKKwlpZiAobmV0aWZfYWxsb2NfcnhfcXVldWVzKGRldikpCisJCWdvdG8gZnJlZV9wY3B1OwogI2VuZGlmCiAKIAlkZXYtPmdzb19tYXhfc2l6ZSA9IEdTT19NQVhfU0laRTsKQEAgLTU1OTcsNiArNTcwMiwxMSBAQAogCiBmcmVlX3BjcHU6CiAJZnJlZV9wZXJjcHUoZGV2LT5wY3B1X3JlZmNudCk7CisJa2ZyZWUoZGV2LT5fdHgpOworI2lmZGVmIENPTkZJR19SUFMKKwlrZnJlZShkZXYtPl9yeCk7CisjZW5kaWYKKwogZnJlZV9wOgogCWtmcmVlKHApOwogCXJldHVybiBOVUxMOwpAQCAtNTYxOCw2ICs1NzI4LDkgQEAKIAlyZWxlYXNlX25ldChkZXZfbmV0KGRldikpOwogCiAJa2ZyZWUoZGV2LT5fdHgpOworI2lmZGVmIENPTkZJR19SUFMKKwlrZnJlZShkZXYtPl9yeCk7CisjZW5kaWYKIAogCWtmcmVlKHJjdV9kZXJlZmVyZW5jZV9yYXcoZGV2LT5pbmdyZXNzX3F1ZXVlKSk7CiAKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2V0aHRvb2wuYyBiL25ldC9jb3JlL2V0aHRvb2wuYwppbmRleCA5NTZhOWY0Li4xNzc0MTc4IDEwMDY0NAotLS0gYS9uZXQvY29yZS9ldGh0b29sLmMKKysrIGIvbmV0L2NvcmUvZXRodG9vbC5jCkBAIC04OTEsNiArODkxLDIwIEBACiAJcmV0dXJuIGRldi0+ZXRodG9vbF9vcHMtPm53YXlfcmVzZXQoZGV2KTsKIH0KIAorc3RhdGljIGludCBldGh0b29sX2dldF9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNoYXIgX191c2VyICp1c2VyYWRkcikKK3sKKwlzdHJ1Y3QgZXRodG9vbF92YWx1ZSBlZGF0YSA9IHsgLmNtZCA9IEVUSFRPT0xfR0xJTksgfTsKKworCWlmICghZGV2LT5ldGh0b29sX29wcy0+Z2V0X2xpbmspCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWVkYXRhLmRhdGEgPSBuZXRpZl9ydW5uaW5nKGRldikgJiYgZGV2LT5ldGh0b29sX29wcy0+Z2V0X2xpbmsoZGV2KTsKKworCWlmIChjb3B5X3RvX3VzZXIodXNlcmFkZHIsICZlZGF0YSwgc2l6ZW9mKGVkYXRhKSkpCisJCXJldHVybiAtRUZBVUxUOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGV0aHRvb2xfZ2V0X2VlcHJvbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkIF9fdXNlciAqdXNlcmFkZHIpCiB7CiAJc3RydWN0IGV0aHRvb2xfZWVwcm9tIGVlcHJvbTsKQEAgLTExNzEsNyArMTE4NSw5IEBACiAJCXJldHVybiAtRUZBVUxUOwogCWlmIChlZGF0YS5kYXRhICYmICEoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfU0cpKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoZWRhdGEuZGF0YSAmJiAhKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0hXX0NTVU0pKQorCWlmIChlZGF0YS5kYXRhICYmICEoKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0dFTl9DU1VNKSB8fAorCQkoZGV2LT5mZWF0dXJlcyAmIChORVRJRl9GX0lQX0NTVU18TkVUSUZfRl9JUFY2X0NTVU0pKQorCQkJPT0gKE5FVElGX0ZfSVBfQ1NVTXxORVRJRl9GX0lQVjZfQ1NVTSkpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlyZXR1cm4gZGV2LT5ldGh0b29sX29wcy0+c2V0X3VmbyhkZXYsIGVkYXRhLmRhdGEpOwogfQpAQCAtMTUyOCw4ICsxNTQ0LDcgQEAKIAkJcmMgPSBldGh0b29sX253YXlfcmVzZXQoZGV2KTsKIAkJYnJlYWs7CiAJY2FzZSBFVEhUT09MX0dMSU5LOgotCQlyYyA9IGV0aHRvb2xfZ2V0X3ZhbHVlKGRldiwgdXNlcmFkZHIsIGV0aGNtZCwKLQkJCQkgICAgICAgZGV2LT5ldGh0b29sX29wcy0+Z2V0X2xpbmspOworCQlyYyA9IGV0aHRvb2xfZ2V0X2xpbmsoZGV2LCB1c2VyYWRkcik7CiAJCWJyZWFrOwogCWNhc2UgRVRIVE9PTF9HRUVQUk9NOgogCQlyYyA9IGV0aHRvb2xfZ2V0X2VlcHJvbShkZXYsIHVzZXJhZGRyKTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmMKaW5kZXggYWUyMWEwZC4uMmIyN2Q0ZSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmMKKysrIGIvbmV0L2NvcmUvZmlsdGVyLmMKQEAgLTM3LDkgKzM3LDY5IEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CiAjaW5jbHVkZSA8bGludXgvZmlsdGVyLmg+CisjaW5jbHVkZSA8bGludXgvcmVjaXByb2NhbF9kaXYuaD4KKworZW51bSB7CisJQlBGX1NfUkVUX0sgPSAxLAorCUJQRl9TX1JFVF9BLAorCUJQRl9TX0FMVV9BRERfSywKKwlCUEZfU19BTFVfQUREX1gsCisJQlBGX1NfQUxVX1NVQl9LLAorCUJQRl9TX0FMVV9TVUJfWCwKKwlCUEZfU19BTFVfTVVMX0ssCisJQlBGX1NfQUxVX01VTF9YLAorCUJQRl9TX0FMVV9ESVZfWCwKKwlCUEZfU19BTFVfQU5EX0ssCisJQlBGX1NfQUxVX0FORF9YLAorCUJQRl9TX0FMVV9PUl9LLAorCUJQRl9TX0FMVV9PUl9YLAorCUJQRl9TX0FMVV9MU0hfSywKKwlCUEZfU19BTFVfTFNIX1gsCisJQlBGX1NfQUxVX1JTSF9LLAorCUJQRl9TX0FMVV9SU0hfWCwKKwlCUEZfU19BTFVfTkVHLAorCUJQRl9TX0xEX1dfQUJTLAorCUJQRl9TX0xEX0hfQUJTLAorCUJQRl9TX0xEX0JfQUJTLAorCUJQRl9TX0xEX1dfTEVOLAorCUJQRl9TX0xEX1dfSU5ELAorCUJQRl9TX0xEX0hfSU5ELAorCUJQRl9TX0xEX0JfSU5ELAorCUJQRl9TX0xEX0lNTSwKKwlCUEZfU19MRFhfV19MRU4sCisJQlBGX1NfTERYX0JfTVNILAorCUJQRl9TX0xEWF9JTU0sCisJQlBGX1NfTUlTQ19UQVgsCisJQlBGX1NfTUlTQ19UWEEsCisJQlBGX1NfQUxVX0RJVl9LLAorCUJQRl9TX0xEX01FTSwKKwlCUEZfU19MRFhfTUVNLAorCUJQRl9TX1NULAorCUJQRl9TX1NUWCwKKwlCUEZfU19KTVBfSkEsCisJQlBGX1NfSk1QX0pFUV9LLAorCUJQRl9TX0pNUF9KRVFfWCwKKwlCUEZfU19KTVBfSkdFX0ssCisJQlBGX1NfSk1QX0pHRV9YLAorCUJQRl9TX0pNUF9KR1RfSywKKwlCUEZfU19KTVBfSkdUX1gsCisJQlBGX1NfSk1QX0pTRVRfSywKKwlCUEZfU19KTVBfSlNFVF9YLAorCS8qIEFuY2lsbGFyeSBkYXRhICovCisJQlBGX1NfQU5DX1BST1RPQ09MLAorCUJQRl9TX0FOQ19QS1RUWVBFLAorCUJQRl9TX0FOQ19JRklOREVYLAorCUJQRl9TX0FOQ19OTEFUVFIsCisJQlBGX1NfQU5DX05MQVRUUl9ORVNULAorCUJQRl9TX0FOQ19NQVJLLAorCUJQRl9TX0FOQ19RVUVVRSwKKwlCUEZfU19BTkNfSEFUWVBFLAorCUJQRl9TX0FOQ19SWEhBU0gsCisJQlBGX1NfQU5DX0NQVSwKK307CiAKIC8qIE5vIGh1cnJ5IGluIHRoaXMgYnJhbmNoICovCi1zdGF0aWMgdm9pZCAqX19sb2FkX3BvaW50ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGspCitzdGF0aWMgdm9pZCAqX19sb2FkX3BvaW50ZXIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGssIHVuc2lnbmVkIGludCBzaXplKQogewogCXU4ICpwdHIgPSBOVUxMOwogCkBAIC00OCwyMSArMTA4LDE3IEBACiAJZWxzZSBpZiAoayA+PSBTS0ZfTExfT0ZGKQogCQlwdHIgPSBza2JfbWFjX2hlYWRlcihza2IpICsgayAtIFNLRl9MTF9PRkY7CiAKLQlpZiAocHRyID49IHNrYi0+aGVhZCAmJiBwdHIgPCBza2JfdGFpbF9wb2ludGVyKHNrYikpCisJaWYgKHB0ciA+PSBza2ItPmhlYWQgJiYgcHRyICsgc2l6ZSA8PSBza2JfdGFpbF9wb2ludGVyKHNrYikpCiAJCXJldHVybiBwdHI7CiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCAqbG9hZF9wb2ludGVyKHN0cnVjdCBza19idWZmICpza2IsIGludCBrLAorc3RhdGljIGlubGluZSB2b2lkICpsb2FkX3BvaW50ZXIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGssCiAJCQkJIHVuc2lnbmVkIGludCBzaXplLCB2b2lkICpidWZmZXIpCiB7CiAJaWYgKGsgPj0gMCkKIAkJcmV0dXJuIHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIGssIHNpemUsIGJ1ZmZlcik7Ci0JZWxzZSB7Ci0JCWlmIChrID49IFNLRl9BRF9PRkYpCi0JCQlyZXR1cm4gTlVMTDsKLQkJcmV0dXJuIF9fbG9hZF9wb2ludGVyKHNrYiwgayk7Ci0JfQorCXJldHVybiBfX2xvYWRfcG9pbnRlcihza2IsIGssIHNpemUpOwogfQogCiAvKioKQEAgLTg5LDcgKzE0NSw3IEBACiAJcmN1X3JlYWRfbG9ja19iaCgpOwogCWZpbHRlciA9IHJjdV9kZXJlZmVyZW5jZV9iaChzay0+c2tfZmlsdGVyKTsKIAlpZiAoZmlsdGVyKSB7Ci0JCXVuc2lnbmVkIGludCBwa3RfbGVuID0gc2tfcnVuX2ZpbHRlcihza2IsIGZpbHRlci0+aW5zbnMsIGZpbHRlci0+bGVuKTsKKwkJdW5zaWduZWQgaW50IHBrdF9sZW4gPSBza19ydW5fZmlsdGVyKHNrYiwgZmlsdGVyLT5pbnNucyk7CiAKIAkJZXJyID0gcGt0X2xlbiA/IHBza2JfdHJpbShza2IsIHBrdF9sZW4pIDogLUVQRVJNOwogCX0KQEAgLTEwMyw1MCArMTU5LDUyIEBACiAgKglza19ydW5fZmlsdGVyIC0gcnVuIGEgZmlsdGVyIG9uIGEgc29ja2V0CiAgKglAc2tiOiBidWZmZXIgdG8gcnVuIHRoZSBmaWx0ZXIgb24KICAqCUBmaWx0ZXI6IGZpbHRlciB0byBhcHBseQotICoJQGZsZW46IGxlbmd0aCBvZiBmaWx0ZXIKICAqCiAgKiBEZWNvZGUgYW5kIGFwcGx5IGZpbHRlciBpbnN0cnVjdGlvbnMgdG8gdGhlIHNrYi0+ZGF0YS4KLSAqIFJldHVybiBsZW5ndGggdG8ga2VlcCwgMCBmb3Igbm9uZS4gc2tiIGlzIHRoZSBkYXRhIHdlIGFyZQotICogZmlsdGVyaW5nLCBmaWx0ZXIgaXMgdGhlIGFycmF5IG9mIGZpbHRlciBpbnN0cnVjdGlvbnMsIGFuZAotICogbGVuIGlzIHRoZSBudW1iZXIgb2YgZmlsdGVyIGJsb2NrcyBpbiB0aGUgYXJyYXkuCisgKiBSZXR1cm4gbGVuZ3RoIHRvIGtlZXAsIDAgZm9yIG5vbmUuIEBza2IgaXMgdGhlIGRhdGEgd2UgYXJlCisgKiBmaWx0ZXJpbmcsIEBmaWx0ZXIgaXMgdGhlIGFycmF5IG9mIGZpbHRlciBpbnN0cnVjdGlvbnMuCisgKiBCZWNhdXNlIGFsbCBqdW1wcyBhcmUgZ3VhcmFudGVlZCB0byBiZSBiZWZvcmUgbGFzdCBpbnN0cnVjdGlvbiwKKyAqIGFuZCBsYXN0IGluc3RydWN0aW9uIGd1YXJhbnRlZWQgdG8gYmUgYSBSRVQsIHdlIGRvbnQgbmVlZCB0byBjaGVjaworICogZmxlbi4gKFdlIHVzZWQgdG8gcGFzcyB0byB0aGlzIGZ1bmN0aW9uIHRoZSBsZW5ndGggb2YgZmlsdGVyKQogICovCi11bnNpZ25lZCBpbnQgc2tfcnVuX2ZpbHRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29ja19maWx0ZXIgKmZpbHRlciwgaW50IGZsZW4pCit1bnNpZ25lZCBpbnQgc2tfcnVuX2ZpbHRlcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgY29uc3Qgc3RydWN0IHNvY2tfZmlsdGVyICpmZW50cnkpCiB7CiAJdm9pZCAqcHRyOwogCXUzMiBBID0gMDsJCQkvKiBBY2N1bXVsYXRvciAqLwogCXUzMiBYID0gMDsJCQkvKiBJbmRleCBSZWdpc3RlciAqLwogCXUzMiBtZW1bQlBGX01FTVdPUkRTXTsJCS8qIFNjcmF0Y2ggTWVtb3J5IFN0b3JlICovCi0JdW5zaWduZWQgbG9uZyBtZW12YWxpZCA9IDA7CiAJdTMyIHRtcDsKIAlpbnQgazsKLQlpbnQgcGM7CiAKLQlCVUlMRF9CVUdfT04oQlBGX01FTVdPUkRTID4gQklUU19QRVJfTE9ORyk7CiAJLyoKIAkgKiBQcm9jZXNzIGFycmF5IG9mIGZpbHRlciBpbnN0cnVjdGlvbnMuCiAJICovCi0JZm9yIChwYyA9IDA7IHBjIDwgZmxlbjsgcGMrKykgewotCQljb25zdCBzdHJ1Y3Qgc29ja19maWx0ZXIgKmZlbnRyeSA9ICZmaWx0ZXJbcGNdOwotCQl1MzIgZl9rID0gZmVudHJ5LT5rOworCWZvciAoOzsgZmVudHJ5KyspIHsKKyNpZiBkZWZpbmVkKENPTkZJR19YODZfMzIpCisjZGVmaW5lCUsgKGZlbnRyeS0+aykKKyNlbHNlCisJCWNvbnN0IHUzMiBLID0gZmVudHJ5LT5rOworI2VuZGlmCiAKIAkJc3dpdGNoIChmZW50cnktPmNvZGUpIHsKIAkJY2FzZSBCUEZfU19BTFVfQUREX1g6CiAJCQlBICs9IFg7CiAJCQljb250aW51ZTsKIAkJY2FzZSBCUEZfU19BTFVfQUREX0s6Ci0JCQlBICs9IGZfazsKKwkJCUEgKz0gSzsKIAkJCWNvbnRpbnVlOwogCQljYXNlIEJQRl9TX0FMVV9TVUJfWDoKIAkJCUEgLT0gWDsKIAkJCWNvbnRpbnVlOwogCQljYXNlIEJQRl9TX0FMVV9TVUJfSzoKLQkJCUEgLT0gZl9rOworCQkJQSAtPSBLOwogCQkJY29udGludWU7CiAJCWNhc2UgQlBGX1NfQUxVX01VTF9YOgogCQkJQSAqPSBYOwogCQkJY29udGludWU7CiAJCWNhc2UgQlBGX1NfQUxVX01VTF9LOgotCQkJQSAqPSBmX2s7CisJCQlBICo9IEs7CiAJCQljb250aW51ZTsKIAkJY2FzZSBCUEZfU19BTFVfRElWX1g6CiAJCQlpZiAoWCA9PSAwKQpAQCAtMTU0LDg5ICsyMTIsODkgQEAKIAkJCUEgLz0gWDsKIAkJCWNvbnRpbnVlOwogCQljYXNlIEJQRl9TX0FMVV9ESVZfSzoKLQkJCUEgLz0gZl9rOworCQkJQSA9IHJlY2lwcm9jYWxfZGl2aWRlKEEsIEspOwogCQkJY29udGludWU7CiAJCWNhc2UgQlBGX1NfQUxVX0FORF9YOgogCQkJQSAmPSBYOwogCQkJY29udGludWU7CiAJCWNhc2UgQlBGX1NfQUxVX0FORF9LOgotCQkJQSAmPSBmX2s7CisJCQlBICY9IEs7CiAJCQljb250aW51ZTsKIAkJY2FzZSBCUEZfU19BTFVfT1JfWDoKIAkJCUEgfD0gWDsKIAkJCWNvbnRpbnVlOwogCQljYXNlIEJQRl9TX0FMVV9PUl9LOgotCQkJQSB8PSBmX2s7CisJCQlBIHw9IEs7CiAJCQljb250aW51ZTsKIAkJY2FzZSBCUEZfU19BTFVfTFNIX1g6CiAJCQlBIDw8PSBYOwogCQkJY29udGludWU7CiAJCWNhc2UgQlBGX1NfQUxVX0xTSF9LOgotCQkJQSA8PD0gZl9rOworCQkJQSA8PD0gSzsKIAkJCWNvbnRpbnVlOwogCQljYXNlIEJQRl9TX0FMVV9SU0hfWDoKIAkJCUEgPj49IFg7CiAJCQljb250aW51ZTsKIAkJY2FzZSBCUEZfU19BTFVfUlNIX0s6Ci0JCQlBID4+PSBmX2s7CisJCQlBID4+PSBLOwogCQkJY29udGludWU7CiAJCWNhc2UgQlBGX1NfQUxVX05FRzoKIAkJCUEgPSAtQTsKIAkJCWNvbnRpbnVlOwogCQljYXNlIEJQRl9TX0pNUF9KQToKLQkJCXBjICs9IGZfazsKKwkJCWZlbnRyeSArPSBLOwogCQkJY29udGludWU7CiAJCWNhc2UgQlBGX1NfSk1QX0pHVF9LOgotCQkJcGMgKz0gKEEgPiBmX2spID8gZmVudHJ5LT5qdCA6IGZlbnRyeS0+amY7CisJCQlmZW50cnkgKz0gKEEgPiBLKSA/IGZlbnRyeS0+anQgOiBmZW50cnktPmpmOwogCQkJY29udGludWU7CiAJCWNhc2UgQlBGX1NfSk1QX0pHRV9LOgotCQkJcGMgKz0gKEEgPj0gZl9rKSA/IGZlbnRyeS0+anQgOiBmZW50cnktPmpmOworCQkJZmVudHJ5ICs9IChBID49IEspID8gZmVudHJ5LT5qdCA6IGZlbnRyeS0+amY7CiAJCQljb250aW51ZTsKIAkJY2FzZSBCUEZfU19KTVBfSkVRX0s6Ci0JCQlwYyArPSAoQSA9PSBmX2spID8gZmVudHJ5LT5qdCA6IGZlbnRyeS0+amY7CisJCQlmZW50cnkgKz0gKEEgPT0gSykgPyBmZW50cnktPmp0IDogZmVudHJ5LT5qZjsKIAkJCWNvbnRpbnVlOwogCQljYXNlIEJQRl9TX0pNUF9KU0VUX0s6Ci0JCQlwYyArPSAoQSAmIGZfaykgPyBmZW50cnktPmp0IDogZmVudHJ5LT5qZjsKKwkJCWZlbnRyeSArPSAoQSAmIEspID8gZmVudHJ5LT5qdCA6IGZlbnRyeS0+amY7CiAJCQljb250aW51ZTsKIAkJY2FzZSBCUEZfU19KTVBfSkdUX1g6Ci0JCQlwYyArPSAoQSA+IFgpID8gZmVudHJ5LT5qdCA6IGZlbnRyeS0+amY7CisJCQlmZW50cnkgKz0gKEEgPiBYKSA/IGZlbnRyeS0+anQgOiBmZW50cnktPmpmOwogCQkJY29udGludWU7CiAJCWNhc2UgQlBGX1NfSk1QX0pHRV9YOgotCQkJcGMgKz0gKEEgPj0gWCkgPyBmZW50cnktPmp0IDogZmVudHJ5LT5qZjsKKwkJCWZlbnRyeSArPSAoQSA+PSBYKSA/IGZlbnRyeS0+anQgOiBmZW50cnktPmpmOwogCQkJY29udGludWU7CiAJCWNhc2UgQlBGX1NfSk1QX0pFUV9YOgotCQkJcGMgKz0gKEEgPT0gWCkgPyBmZW50cnktPmp0IDogZmVudHJ5LT5qZjsKKwkJCWZlbnRyeSArPSAoQSA9PSBYKSA/IGZlbnRyeS0+anQgOiBmZW50cnktPmpmOwogCQkJY29udGludWU7CiAJCWNhc2UgQlBGX1NfSk1QX0pTRVRfWDoKLQkJCXBjICs9IChBICYgWCkgPyBmZW50cnktPmp0IDogZmVudHJ5LT5qZjsKKwkJCWZlbnRyeSArPSAoQSAmIFgpID8gZmVudHJ5LT5qdCA6IGZlbnRyeS0+amY7CiAJCQljb250aW51ZTsKIAkJY2FzZSBCUEZfU19MRF9XX0FCUzoKLQkJCWsgPSBmX2s7CisJCQlrID0gSzsKIGxvYWRfdzoKIAkJCXB0ciA9IGxvYWRfcG9pbnRlcihza2IsIGssIDQsICZ0bXApOwogCQkJaWYgKHB0ciAhPSBOVUxMKSB7CiAJCQkJQSA9IGdldF91bmFsaWduZWRfYmUzMihwdHIpOwogCQkJCWNvbnRpbnVlOwogCQkJfQotCQkJYnJlYWs7CisJCQlyZXR1cm4gMDsKIAkJY2FzZSBCUEZfU19MRF9IX0FCUzoKLQkJCWsgPSBmX2s7CisJCQlrID0gSzsKIGxvYWRfaDoKIAkJCXB0ciA9IGxvYWRfcG9pbnRlcihza2IsIGssIDIsICZ0bXApOwogCQkJaWYgKHB0ciAhPSBOVUxMKSB7CiAJCQkJQSA9IGdldF91bmFsaWduZWRfYmUxNihwdHIpOwogCQkJCWNvbnRpbnVlOwogCQkJfQotCQkJYnJlYWs7CisJCQlyZXR1cm4gMDsKIAkJY2FzZSBCUEZfU19MRF9CX0FCUzoKLQkJCWsgPSBmX2s7CisJCQlrID0gSzsKIGxvYWRfYjoKIAkJCXB0ciA9IGxvYWRfcG9pbnRlcihza2IsIGssIDEsICZ0bXApOwogCQkJaWYgKHB0ciAhPSBOVUxMKSB7CiAJCQkJQSA9ICoodTggKilwdHI7CiAJCQkJY29udGludWU7CiAJCQl9Ci0JCQlicmVhazsKKwkJCXJldHVybiAwOwogCQljYXNlIEJQRl9TX0xEX1dfTEVOOgogCQkJQSA9IHNrYi0+bGVuOwogCQkJY29udGludWU7CkBAIC0yNDQsMzQgKzMwMiwzMiBAQAogCQkJWCA9IHNrYi0+bGVuOwogCQkJY29udGludWU7CiAJCWNhc2UgQlBGX1NfTERfV19JTkQ6Ci0JCQlrID0gWCArIGZfazsKKwkJCWsgPSBYICsgSzsKIAkJCWdvdG8gbG9hZF93OwogCQljYXNlIEJQRl9TX0xEX0hfSU5EOgotCQkJayA9IFggKyBmX2s7CisJCQlrID0gWCArIEs7CiAJCQlnb3RvIGxvYWRfaDsKIAkJY2FzZSBCUEZfU19MRF9CX0lORDoKLQkJCWsgPSBYICsgZl9rOworCQkJayA9IFggKyBLOwogCQkJZ290byBsb2FkX2I7CiAJCWNhc2UgQlBGX1NfTERYX0JfTVNIOgotCQkJcHRyID0gbG9hZF9wb2ludGVyKHNrYiwgZl9rLCAxLCAmdG1wKTsKKwkJCXB0ciA9IGxvYWRfcG9pbnRlcihza2IsIEssIDEsICZ0bXApOwogCQkJaWYgKHB0ciAhPSBOVUxMKSB7CiAJCQkJWCA9ICgqKHU4ICopcHRyICYgMHhmKSA8PCAyOwogCQkJCWNvbnRpbnVlOwogCQkJfQogCQkJcmV0dXJuIDA7CiAJCWNhc2UgQlBGX1NfTERfSU1NOgotCQkJQSA9IGZfazsKKwkJCUEgPSBLOwogCQkJY29udGludWU7CiAJCWNhc2UgQlBGX1NfTERYX0lNTToKLQkJCVggPSBmX2s7CisJCQlYID0gSzsKIAkJCWNvbnRpbnVlOwogCQljYXNlIEJQRl9TX0xEX01FTToKLQkJCUEgPSAobWVtdmFsaWQgJiAoMVVMIDw8IGZfaykpID8KLQkJCQltZW1bZl9rXSA6IDA7CisJCQlBID0gbWVtW0tdOwogCQkJY29udGludWU7CiAJCWNhc2UgQlBGX1NfTERYX01FTToKLQkJCVggPSAobWVtdmFsaWQgJiAoMVVMIDw8IGZfaykpID8KLQkJCQltZW1bZl9rXSA6IDA7CisJCQlYID0gbWVtW0tdOwogCQkJY29udGludWU7CiAJCWNhc2UgQlBGX1NfTUlTQ19UQVg6CiAJCQlYID0gQTsKQEAgLTI4MCw1MCArMzM2LDQ0IEBACiAJCQlBID0gWDsKIAkJCWNvbnRpbnVlOwogCQljYXNlIEJQRl9TX1JFVF9LOgotCQkJcmV0dXJuIGZfazsKKwkJCXJldHVybiBLOwogCQljYXNlIEJQRl9TX1JFVF9BOgogCQkJcmV0dXJuIEE7CiAJCWNhc2UgQlBGX1NfU1Q6Ci0JCQltZW12YWxpZCB8PSAxVUwgPDwgZl9rOwotCQkJbWVtW2Zfa10gPSBBOworCQkJbWVtW0tdID0gQTsKIAkJCWNvbnRpbnVlOwogCQljYXNlIEJQRl9TX1NUWDoKLQkJCW1lbXZhbGlkIHw9IDFVTCA8PCBmX2s7Ci0JCQltZW1bZl9rXSA9IFg7CisJCQltZW1bS10gPSBYOwogCQkJY29udGludWU7Ci0JCWRlZmF1bHQ6Ci0JCQlXQVJOX09OKDEpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQotCQkvKgotCQkgKiBIYW5kbGUgYW5jaWxsYXJ5IGRhdGEsIHdoaWNoIGFyZSBpbXBvc3NpYmxlCi0JCSAqIChvciB2ZXJ5IGRpZmZpY3VsdCkgdG8gZ2V0IHBhcnNpbmcgcGFja2V0IGNvbnRlbnRzLgotCQkgKi8KLQkJc3dpdGNoIChrLVNLRl9BRF9PRkYpIHsKLQkJY2FzZSBTS0ZfQURfUFJPVE9DT0w6CisJCWNhc2UgQlBGX1NfQU5DX1BST1RPQ09MOgogCQkJQSA9IG50b2hzKHNrYi0+cHJvdG9jb2wpOwogCQkJY29udGludWU7Ci0JCWNhc2UgU0tGX0FEX1BLVFRZUEU6CisJCWNhc2UgQlBGX1NfQU5DX1BLVFRZUEU6CiAJCQlBID0gc2tiLT5wa3RfdHlwZTsKIAkJCWNvbnRpbnVlOwotCQljYXNlIFNLRl9BRF9JRklOREVYOgorCQljYXNlIEJQRl9TX0FOQ19JRklOREVYOgogCQkJaWYgKCFza2ItPmRldikKIAkJCQlyZXR1cm4gMDsKIAkJCUEgPSBza2ItPmRldi0+aWZpbmRleDsKIAkJCWNvbnRpbnVlOwotCQljYXNlIFNLRl9BRF9NQVJLOgorCQljYXNlIEJQRl9TX0FOQ19NQVJLOgogCQkJQSA9IHNrYi0+bWFyazsKIAkJCWNvbnRpbnVlOwotCQljYXNlIFNLRl9BRF9RVUVVRToKKwkJY2FzZSBCUEZfU19BTkNfUVVFVUU6CiAJCQlBID0gc2tiLT5xdWV1ZV9tYXBwaW5nOwogCQkJY29udGludWU7Ci0JCWNhc2UgU0tGX0FEX0hBVFlQRToKKwkJY2FzZSBCUEZfU19BTkNfSEFUWVBFOgogCQkJaWYgKCFza2ItPmRldikKIAkJCQlyZXR1cm4gMDsKIAkJCUEgPSBza2ItPmRldi0+dHlwZTsKIAkJCWNvbnRpbnVlOwotCQljYXNlIFNLRl9BRF9OTEFUVFI6IHsKKwkJY2FzZSBCUEZfU19BTkNfUlhIQVNIOgorCQkJQSA9IHNrYi0+cnhoYXNoOworCQkJY29udGludWU7CisJCWNhc2UgQlBGX1NfQU5DX0NQVToKKwkJCUEgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOworCQkJY29udGludWU7CisJCWNhc2UgQlBGX1NfQU5DX05MQVRUUjogewogCQkJc3RydWN0IG5sYXR0ciAqbmxhOwogCiAJCQlpZiAoc2tiX2lzX25vbmxpbmVhcihza2IpKQpAQCAtMzM5LDcgKzM4OSw3IEBACiAJCQkJQSA9IDA7CiAJCQljb250aW51ZTsKIAkJfQotCQljYXNlIFNLRl9BRF9OTEFUVFJfTkVTVDogeworCQljYXNlIEJQRl9TX0FOQ19OTEFUVFJfTkVTVDogewogCQkJc3RydWN0IG5sYXR0ciAqbmxhOwogCiAJCQlpZiAoc2tiX2lzX25vbmxpbmVhcihza2IpKQpAQCAtMzU5LDYgKzQwOSw3IEBACiAJCQljb250aW51ZTsKIAkJfQogCQlkZWZhdWx0OgorCQkJV0FSTl9PTigxKTsKIAkJCXJldHVybiAwOwogCQl9CiAJfQpAQCAtMzY3LDYgKzQxOCw2NiBAQAogfQogRVhQT1JUX1NZTUJPTChza19ydW5fZmlsdGVyKTsKIAorLyoKKyAqIFNlY3VyaXR5IDoKKyAqIEEgQlBGIHByb2dyYW0gaXMgYWJsZSB0byB1c2UgMTYgY2VsbHMgb2YgbWVtb3J5IHRvIHN0b3JlIGludGVybWVkaWF0ZQorICogdmFsdWVzIChjaGVjayB1MzIgbWVtW0JQRl9NRU1XT1JEU10gaW4gc2tfcnVuX2ZpbHRlcigpKQorICogQXMgd2UgZG9udCB3YW50IHRvIGNsZWFyIG1lbVtdIGFycmF5IGZvciBlYWNoIHBhY2tldCBnb2luZyB0aHJvdWdoCisgKiBza19ydW5fZmlsdGVyKCksIHdlIGNoZWNrIHRoYXQgZmlsdGVyIGxvYWRlZCBieSB1c2VyIG5ldmVyIHRyeSB0byByZWFkCisgKiBhIGNlbGwgaWYgbm90IHByZXZpb3VzbHkgd3JpdHRlbiwgYW5kIHdlIGNoZWNrIGFsbCBicmFuY2hlcyB0byBiZSBzdXJlCisgKiBhIG1hbGljaW91cyB1c2VyIGRvZXNudCB0cnkgdG8gYWJ1c2UgdXMuCisgKi8KK3N0YXRpYyBpbnQgY2hlY2tfbG9hZF9hbmRfc3RvcmVzKHN0cnVjdCBzb2NrX2ZpbHRlciAqZmlsdGVyLCBpbnQgZmxlbikKK3sKKwl1MTYgKm1hc2tzLCBtZW12YWxpZCA9IDA7IC8qIG9uZSBiaXQgcGVyIGNlbGwsIDE2IGNlbGxzICovCisJaW50IHBjLCByZXQgPSAwOworCisJQlVJTERfQlVHX09OKEJQRl9NRU1XT1JEUyA+IDE2KTsKKwltYXNrcyA9IGttYWxsb2MoZmxlbiAqIHNpemVvZigqbWFza3MpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1hc2tzKQorCQlyZXR1cm4gLUVOT01FTTsKKwltZW1zZXQobWFza3MsIDB4ZmYsIGZsZW4gKiBzaXplb2YoKm1hc2tzKSk7CisKKwlmb3IgKHBjID0gMDsgcGMgPCBmbGVuOyBwYysrKSB7CisJCW1lbXZhbGlkICY9IG1hc2tzW3BjXTsKKworCQlzd2l0Y2ggKGZpbHRlcltwY10uY29kZSkgeworCQljYXNlIEJQRl9TX1NUOgorCQljYXNlIEJQRl9TX1NUWDoKKwkJCW1lbXZhbGlkIHw9ICgxIDw8IGZpbHRlcltwY10uayk7CisJCQlicmVhazsKKwkJY2FzZSBCUEZfU19MRF9NRU06CisJCWNhc2UgQlBGX1NfTERYX01FTToKKwkJCWlmICghKG1lbXZhbGlkICYgKDEgPDwgZmlsdGVyW3BjXS5rKSkpIHsKKwkJCQlyZXQgPSAtRUlOVkFMOworCQkJCWdvdG8gZXJyb3I7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBCUEZfU19KTVBfSkE6CisJCQkvKiBhIGp1bXAgbXVzdCBzZXQgbWFza3Mgb24gdGFyZ2V0ICovCisJCQltYXNrc1twYyArIDEgKyBmaWx0ZXJbcGNdLmtdICY9IG1lbXZhbGlkOworCQkJbWVtdmFsaWQgPSB+MDsKKwkJCWJyZWFrOworCQljYXNlIEJQRl9TX0pNUF9KRVFfSzoKKwkJY2FzZSBCUEZfU19KTVBfSkVRX1g6CisJCWNhc2UgQlBGX1NfSk1QX0pHRV9LOgorCQljYXNlIEJQRl9TX0pNUF9KR0VfWDoKKwkJY2FzZSBCUEZfU19KTVBfSkdUX0s6CisJCWNhc2UgQlBGX1NfSk1QX0pHVF9YOgorCQljYXNlIEJQRl9TX0pNUF9KU0VUX1g6CisJCWNhc2UgQlBGX1NfSk1QX0pTRVRfSzoKKwkJCS8qIGEganVtcCBtdXN0IHNldCBtYXNrcyBvbiB0YXJnZXRzICovCisJCQltYXNrc1twYyArIDEgKyBmaWx0ZXJbcGNdLmp0XSAmPSBtZW12YWxpZDsKKwkJCW1hc2tzW3BjICsgMSArIGZpbHRlcltwY10uamZdICY9IG1lbXZhbGlkOworCQkJbWVtdmFsaWQgPSB+MDsKKwkJCWJyZWFrOworCQl9CisJfQorZXJyb3I6CisJa2ZyZWUobWFza3MpOworCXJldHVybiByZXQ7Cit9CisKIC8qKgogICoJc2tfY2hrX2ZpbHRlciAtIHZlcmlmeSBzb2NrZXQgZmlsdGVyIGNvZGUKICAqCUBmaWx0ZXI6IGZpbHRlciB0byB2ZXJpZnkKQEAgLTM4Myw3ICs0OTQsNTcgQEAKICAqLwogaW50IHNrX2Noa19maWx0ZXIoc3RydWN0IHNvY2tfZmlsdGVyICpmaWx0ZXIsIGludCBmbGVuKQogewotCXN0cnVjdCBzb2NrX2ZpbHRlciAqZnRlc3Q7CisJLyoKKwkgKiBWYWxpZCBpbnN0cnVjdGlvbnMgYXJlIGluaXRpYWxpemVkIHRvIG5vbi0wLgorCSAqIEludmFsaWQgaW5zdHJ1Y3Rpb25zIGFyZSBpbml0aWFsaXplZCB0byAwLgorCSAqLworCXN0YXRpYyBjb25zdCB1OCBjb2Rlc1tdID0geworCQlbQlBGX0FMVXxCUEZfQUREfEJQRl9LXSAgPSBCUEZfU19BTFVfQUREX0ssCisJCVtCUEZfQUxVfEJQRl9BRER8QlBGX1hdICA9IEJQRl9TX0FMVV9BRERfWCwKKwkJW0JQRl9BTFV8QlBGX1NVQnxCUEZfS10gID0gQlBGX1NfQUxVX1NVQl9LLAorCQlbQlBGX0FMVXxCUEZfU1VCfEJQRl9YXSAgPSBCUEZfU19BTFVfU1VCX1gsCisJCVtCUEZfQUxVfEJQRl9NVUx8QlBGX0tdICA9IEJQRl9TX0FMVV9NVUxfSywKKwkJW0JQRl9BTFV8QlBGX01VTHxCUEZfWF0gID0gQlBGX1NfQUxVX01VTF9YLAorCQlbQlBGX0FMVXxCUEZfRElWfEJQRl9YXSAgPSBCUEZfU19BTFVfRElWX1gsCisJCVtCUEZfQUxVfEJQRl9BTkR8QlBGX0tdICA9IEJQRl9TX0FMVV9BTkRfSywKKwkJW0JQRl9BTFV8QlBGX0FORHxCUEZfWF0gID0gQlBGX1NfQUxVX0FORF9YLAorCQlbQlBGX0FMVXxCUEZfT1J8QlBGX0tdICAgPSBCUEZfU19BTFVfT1JfSywKKwkJW0JQRl9BTFV8QlBGX09SfEJQRl9YXSAgID0gQlBGX1NfQUxVX09SX1gsCisJCVtCUEZfQUxVfEJQRl9MU0h8QlBGX0tdICA9IEJQRl9TX0FMVV9MU0hfSywKKwkJW0JQRl9BTFV8QlBGX0xTSHxCUEZfWF0gID0gQlBGX1NfQUxVX0xTSF9YLAorCQlbQlBGX0FMVXxCUEZfUlNIfEJQRl9LXSAgPSBCUEZfU19BTFVfUlNIX0ssCisJCVtCUEZfQUxVfEJQRl9SU0h8QlBGX1hdICA9IEJQRl9TX0FMVV9SU0hfWCwKKwkJW0JQRl9BTFV8QlBGX05FR10gICAgICAgID0gQlBGX1NfQUxVX05FRywKKwkJW0JQRl9MRHxCUEZfV3xCUEZfQUJTXSAgID0gQlBGX1NfTERfV19BQlMsCisJCVtCUEZfTER8QlBGX0h8QlBGX0FCU10gICA9IEJQRl9TX0xEX0hfQUJTLAorCQlbQlBGX0xEfEJQRl9CfEJQRl9BQlNdICAgPSBCUEZfU19MRF9CX0FCUywKKwkJW0JQRl9MRHxCUEZfV3xCUEZfTEVOXSAgID0gQlBGX1NfTERfV19MRU4sCisJCVtCUEZfTER8QlBGX1d8QlBGX0lORF0gICA9IEJQRl9TX0xEX1dfSU5ELAorCQlbQlBGX0xEfEJQRl9IfEJQRl9JTkRdICAgPSBCUEZfU19MRF9IX0lORCwKKwkJW0JQRl9MRHxCUEZfQnxCUEZfSU5EXSAgID0gQlBGX1NfTERfQl9JTkQsCisJCVtCUEZfTER8QlBGX0lNTV0gICAgICAgICA9IEJQRl9TX0xEX0lNTSwKKwkJW0JQRl9MRFh8QlBGX1d8QlBGX0xFTl0gID0gQlBGX1NfTERYX1dfTEVOLAorCQlbQlBGX0xEWHxCUEZfQnxCUEZfTVNIXSAgPSBCUEZfU19MRFhfQl9NU0gsCisJCVtCUEZfTERYfEJQRl9JTU1dICAgICAgICA9IEJQRl9TX0xEWF9JTU0sCisJCVtCUEZfTUlTQ3xCUEZfVEFYXSAgICAgICA9IEJQRl9TX01JU0NfVEFYLAorCQlbQlBGX01JU0N8QlBGX1RYQV0gICAgICAgPSBCUEZfU19NSVNDX1RYQSwKKwkJW0JQRl9SRVR8QlBGX0tdICAgICAgICAgID0gQlBGX1NfUkVUX0ssCisJCVtCUEZfUkVUfEJQRl9BXSAgICAgICAgICA9IEJQRl9TX1JFVF9BLAorCQlbQlBGX0FMVXxCUEZfRElWfEJQRl9LXSAgPSBCUEZfU19BTFVfRElWX0ssCisJCVtCUEZfTER8QlBGX01FTV0gICAgICAgICA9IEJQRl9TX0xEX01FTSwKKwkJW0JQRl9MRFh8QlBGX01FTV0gICAgICAgID0gQlBGX1NfTERYX01FTSwKKwkJW0JQRl9TVF0gICAgICAgICAgICAgICAgID0gQlBGX1NfU1QsCisJCVtCUEZfU1RYXSAgICAgICAgICAgICAgICA9IEJQRl9TX1NUWCwKKwkJW0JQRl9KTVB8QlBGX0pBXSAgICAgICAgID0gQlBGX1NfSk1QX0pBLAorCQlbQlBGX0pNUHxCUEZfSkVRfEJQRl9LXSAgPSBCUEZfU19KTVBfSkVRX0ssCisJCVtCUEZfSk1QfEJQRl9KRVF8QlBGX1hdICA9IEJQRl9TX0pNUF9KRVFfWCwKKwkJW0JQRl9KTVB8QlBGX0pHRXxCUEZfS10gID0gQlBGX1NfSk1QX0pHRV9LLAorCQlbQlBGX0pNUHxCUEZfSkdFfEJQRl9YXSAgPSBCUEZfU19KTVBfSkdFX1gsCisJCVtCUEZfSk1QfEJQRl9KR1R8QlBGX0tdICA9IEJQRl9TX0pNUF9KR1RfSywKKwkJW0JQRl9KTVB8QlBGX0pHVHxCUEZfWF0gID0gQlBGX1NfSk1QX0pHVF9YLAorCQlbQlBGX0pNUHxCUEZfSlNFVHxCUEZfS10gPSBCUEZfU19KTVBfSlNFVF9LLAorCQlbQlBGX0pNUHxCUEZfSlNFVHxCUEZfWF0gPSBCUEZfU19KTVBfSlNFVF9YLAorCX07CiAJaW50IHBjOwogCiAJaWYgKGZsZW4gPT0gMCB8fCBmbGVuID4gQlBGX01BWElOU05TKQpAQCAtMzkxLDEzNiArNTUyLDMxIEBACiAKIAkvKiBjaGVjayB0aGUgZmlsdGVyIGNvZGUgbm93ICovCiAJZm9yIChwYyA9IDA7IHBjIDwgZmxlbjsgcGMrKykgewotCQlmdGVzdCA9ICZmaWx0ZXJbcGNdOworCQlzdHJ1Y3Qgc29ja19maWx0ZXIgKmZ0ZXN0ID0gJmZpbHRlcltwY107CisJCXUxNiBjb2RlID0gZnRlc3QtPmNvZGU7CiAKLQkJLyogT25seSBhbGxvdyB2YWxpZCBpbnN0cnVjdGlvbnMgKi8KLQkJc3dpdGNoIChmdGVzdC0+Y29kZSkgewotCQljYXNlIEJQRl9BTFV8QlBGX0FERHxCUEZfSzoKLQkJCWZ0ZXN0LT5jb2RlID0gQlBGX1NfQUxVX0FERF9LOwotCQkJYnJlYWs7Ci0JCWNhc2UgQlBGX0FMVXxCUEZfQUREfEJQRl9YOgotCQkJZnRlc3QtPmNvZGUgPSBCUEZfU19BTFVfQUREX1g7Ci0JCQlicmVhazsKLQkJY2FzZSBCUEZfQUxVfEJQRl9TVUJ8QlBGX0s6Ci0JCQlmdGVzdC0+Y29kZSA9IEJQRl9TX0FMVV9TVUJfSzsKLQkJCWJyZWFrOwotCQljYXNlIEJQRl9BTFV8QlBGX1NVQnxCUEZfWDoKLQkJCWZ0ZXN0LT5jb2RlID0gQlBGX1NfQUxVX1NVQl9YOwotCQkJYnJlYWs7Ci0JCWNhc2UgQlBGX0FMVXxCUEZfTVVMfEJQRl9LOgotCQkJZnRlc3QtPmNvZGUgPSBCUEZfU19BTFVfTVVMX0s7Ci0JCQlicmVhazsKLQkJY2FzZSBCUEZfQUxVfEJQRl9NVUx8QlBGX1g6Ci0JCQlmdGVzdC0+Y29kZSA9IEJQRl9TX0FMVV9NVUxfWDsKLQkJCWJyZWFrOwotCQljYXNlIEJQRl9BTFV8QlBGX0RJVnxCUEZfWDoKLQkJCWZ0ZXN0LT5jb2RlID0gQlBGX1NfQUxVX0RJVl9YOwotCQkJYnJlYWs7Ci0JCWNhc2UgQlBGX0FMVXxCUEZfQU5EfEJQRl9LOgotCQkJZnRlc3QtPmNvZGUgPSBCUEZfU19BTFVfQU5EX0s7Ci0JCQlicmVhazsKLQkJY2FzZSBCUEZfQUxVfEJQRl9BTkR8QlBGX1g6Ci0JCQlmdGVzdC0+Y29kZSA9IEJQRl9TX0FMVV9BTkRfWDsKLQkJCWJyZWFrOwotCQljYXNlIEJQRl9BTFV8QlBGX09SfEJQRl9LOgotCQkJZnRlc3QtPmNvZGUgPSBCUEZfU19BTFVfT1JfSzsKLQkJCWJyZWFrOwotCQljYXNlIEJQRl9BTFV8QlBGX09SfEJQRl9YOgotCQkJZnRlc3QtPmNvZGUgPSBCUEZfU19BTFVfT1JfWDsKLQkJCWJyZWFrOwotCQljYXNlIEJQRl9BTFV8QlBGX0xTSHxCUEZfSzoKLQkJCWZ0ZXN0LT5jb2RlID0gQlBGX1NfQUxVX0xTSF9LOwotCQkJYnJlYWs7Ci0JCWNhc2UgQlBGX0FMVXxCUEZfTFNIfEJQRl9YOgotCQkJZnRlc3QtPmNvZGUgPSBCUEZfU19BTFVfTFNIX1g7Ci0JCQlicmVhazsKLQkJY2FzZSBCUEZfQUxVfEJQRl9SU0h8QlBGX0s6Ci0JCQlmdGVzdC0+Y29kZSA9IEJQRl9TX0FMVV9SU0hfSzsKLQkJCWJyZWFrOwotCQljYXNlIEJQRl9BTFV8QlBGX1JTSHxCUEZfWDoKLQkJCWZ0ZXN0LT5jb2RlID0gQlBGX1NfQUxVX1JTSF9YOwotCQkJYnJlYWs7Ci0JCWNhc2UgQlBGX0FMVXxCUEZfTkVHOgotCQkJZnRlc3QtPmNvZGUgPSBCUEZfU19BTFVfTkVHOwotCQkJYnJlYWs7Ci0JCWNhc2UgQlBGX0xEfEJQRl9XfEJQRl9BQlM6Ci0JCQlmdGVzdC0+Y29kZSA9IEJQRl9TX0xEX1dfQUJTOwotCQkJYnJlYWs7Ci0JCWNhc2UgQlBGX0xEfEJQRl9IfEJQRl9BQlM6Ci0JCQlmdGVzdC0+Y29kZSA9IEJQRl9TX0xEX0hfQUJTOwotCQkJYnJlYWs7Ci0JCWNhc2UgQlBGX0xEfEJQRl9CfEJQRl9BQlM6Ci0JCQlmdGVzdC0+Y29kZSA9IEJQRl9TX0xEX0JfQUJTOwotCQkJYnJlYWs7Ci0JCWNhc2UgQlBGX0xEfEJQRl9XfEJQRl9MRU46Ci0JCQlmdGVzdC0+Y29kZSA9IEJQRl9TX0xEX1dfTEVOOwotCQkJYnJlYWs7Ci0JCWNhc2UgQlBGX0xEfEJQRl9XfEJQRl9JTkQ6Ci0JCQlmdGVzdC0+Y29kZSA9IEJQRl9TX0xEX1dfSU5EOwotCQkJYnJlYWs7Ci0JCWNhc2UgQlBGX0xEfEJQRl9IfEJQRl9JTkQ6Ci0JCQlmdGVzdC0+Y29kZSA9IEJQRl9TX0xEX0hfSU5EOwotCQkJYnJlYWs7Ci0JCWNhc2UgQlBGX0xEfEJQRl9CfEJQRl9JTkQ6Ci0JCQlmdGVzdC0+Y29kZSA9IEJQRl9TX0xEX0JfSU5EOwotCQkJYnJlYWs7Ci0JCWNhc2UgQlBGX0xEfEJQRl9JTU06Ci0JCQlmdGVzdC0+Y29kZSA9IEJQRl9TX0xEX0lNTTsKLQkJCWJyZWFrOwotCQljYXNlIEJQRl9MRFh8QlBGX1d8QlBGX0xFTjoKLQkJCWZ0ZXN0LT5jb2RlID0gQlBGX1NfTERYX1dfTEVOOwotCQkJYnJlYWs7Ci0JCWNhc2UgQlBGX0xEWHxCUEZfQnxCUEZfTVNIOgotCQkJZnRlc3QtPmNvZGUgPSBCUEZfU19MRFhfQl9NU0g7Ci0JCQlicmVhazsKLQkJY2FzZSBCUEZfTERYfEJQRl9JTU06Ci0JCQlmdGVzdC0+Y29kZSA9IEJQRl9TX0xEWF9JTU07Ci0JCQlicmVhazsKLQkJY2FzZSBCUEZfTUlTQ3xCUEZfVEFYOgotCQkJZnRlc3QtPmNvZGUgPSBCUEZfU19NSVNDX1RBWDsKLQkJCWJyZWFrOwotCQljYXNlIEJQRl9NSVNDfEJQRl9UWEE6Ci0JCQlmdGVzdC0+Y29kZSA9IEJQRl9TX01JU0NfVFhBOwotCQkJYnJlYWs7Ci0JCWNhc2UgQlBGX1JFVHxCUEZfSzoKLQkJCWZ0ZXN0LT5jb2RlID0gQlBGX1NfUkVUX0s7Ci0JCQlicmVhazsKLQkJY2FzZSBCUEZfUkVUfEJQRl9BOgotCQkJZnRlc3QtPmNvZGUgPSBCUEZfU19SRVRfQTsKLQkJCWJyZWFrOwotCisJCWlmIChjb2RlID49IEFSUkFZX1NJWkUoY29kZXMpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWNvZGUgPSBjb2Rlc1tjb2RlXTsKKwkJaWYgKCFjb2RlKQorCQkJcmV0dXJuIC1FSU5WQUw7CiAJCS8qIFNvbWUgaW5zdHJ1Y3Rpb25zIG5lZWQgc3BlY2lhbCBjaGVja3MgKi8KLQorCQlzd2l0Y2ggKGNvZGUpIHsKKwkJY2FzZSBCUEZfU19BTFVfRElWX0s6CiAJCQkvKiBjaGVjayBmb3IgZGl2aXNpb24gYnkgemVybyAqLwotCQljYXNlIEJQRl9BTFV8QlBGX0RJVnxCUEZfSzoKIAkJCWlmIChmdGVzdC0+ayA9PSAwKQogCQkJCXJldHVybiAtRUlOVkFMOwotCQkJZnRlc3QtPmNvZGUgPSBCUEZfU19BTFVfRElWX0s7CisJCQlmdGVzdC0+ayA9IHJlY2lwcm9jYWxfdmFsdWUoZnRlc3QtPmspOwogCQkJYnJlYWs7Ci0KLQkJLyogY2hlY2sgZm9yIGludmFsaWQgbWVtb3J5IGFkZHJlc3NlcyAqLwotCQljYXNlIEJQRl9MRHxCUEZfTUVNOgorCQljYXNlIEJQRl9TX0xEX01FTToKKwkJY2FzZSBCUEZfU19MRFhfTUVNOgorCQljYXNlIEJQRl9TX1NUOgorCQljYXNlIEJQRl9TX1NUWDoKKwkJCS8qIGNoZWNrIGZvciBpbnZhbGlkIG1lbW9yeSBhZGRyZXNzZXMgKi8KIAkJCWlmIChmdGVzdC0+ayA+PSBCUEZfTUVNV09SRFMpCiAJCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQlmdGVzdC0+Y29kZSA9IEJQRl9TX0xEX01FTTsKIAkJCWJyZWFrOwotCQljYXNlIEJQRl9MRFh8QlBGX01FTToKLQkJCWlmIChmdGVzdC0+ayA+PSBCUEZfTUVNV09SRFMpCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQlmdGVzdC0+Y29kZSA9IEJQRl9TX0xEWF9NRU07Ci0JCQlicmVhazsKLQkJY2FzZSBCUEZfU1Q6Ci0JCQlpZiAoZnRlc3QtPmsgPj0gQlBGX01FTVdPUkRTKQotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJZnRlc3QtPmNvZGUgPSBCUEZfU19TVDsKLQkJCWJyZWFrOwotCQljYXNlIEJQRl9TVFg6Ci0JCQlpZiAoZnRlc3QtPmsgPj0gQlBGX01FTVdPUkRTKQotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJZnRlc3QtPmNvZGUgPSBCUEZfU19TVFg7Ci0JCQlicmVhazsKLQotCQljYXNlIEJQRl9KTVB8QlBGX0pBOgorCQljYXNlIEJQRl9TX0pNUF9KQToKIAkJCS8qCiAJCQkgKiBOb3RlLCB0aGUgbGFyZ2UgZnRlc3QtPmsgbWlnaHQgY2F1c2UgbG9vcHMuCiAJCQkgKiBDb21wYXJlIHRoaXMgd2l0aCBjb25kaXRpb25hbCBqdW1wcyBiZWxvdywKQEAgLTUyOCw0MCArNTg0LDcgQEAKIAkJCSAqLwogCQkJaWYgKGZ0ZXN0LT5rID49ICh1bnNpZ25lZCkoZmxlbi1wYy0xKSkKIAkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCWZ0ZXN0LT5jb2RlID0gQlBGX1NfSk1QX0pBOwogCQkJYnJlYWs7Ci0KLQkJY2FzZSBCUEZfSk1QfEJQRl9KRVF8QlBGX0s6Ci0JCQlmdGVzdC0+Y29kZSA9IEJQRl9TX0pNUF9KRVFfSzsKLQkJCWJyZWFrOwotCQljYXNlIEJQRl9KTVB8QlBGX0pFUXxCUEZfWDoKLQkJCWZ0ZXN0LT5jb2RlID0gQlBGX1NfSk1QX0pFUV9YOwotCQkJYnJlYWs7Ci0JCWNhc2UgQlBGX0pNUHxCUEZfSkdFfEJQRl9LOgotCQkJZnRlc3QtPmNvZGUgPSBCUEZfU19KTVBfSkdFX0s7Ci0JCQlicmVhazsKLQkJY2FzZSBCUEZfSk1QfEJQRl9KR0V8QlBGX1g6Ci0JCQlmdGVzdC0+Y29kZSA9IEJQRl9TX0pNUF9KR0VfWDsKLQkJCWJyZWFrOwotCQljYXNlIEJQRl9KTVB8QlBGX0pHVHxCUEZfSzoKLQkJCWZ0ZXN0LT5jb2RlID0gQlBGX1NfSk1QX0pHVF9LOwotCQkJYnJlYWs7Ci0JCWNhc2UgQlBGX0pNUHxCUEZfSkdUfEJQRl9YOgotCQkJZnRlc3QtPmNvZGUgPSBCUEZfU19KTVBfSkdUX1g7Ci0JCQlicmVhazsKLQkJY2FzZSBCUEZfSk1QfEJQRl9KU0VUfEJQRl9LOgotCQkJZnRlc3QtPmNvZGUgPSBCUEZfU19KTVBfSlNFVF9LOwotCQkJYnJlYWs7Ci0JCWNhc2UgQlBGX0pNUHxCUEZfSlNFVHxCUEZfWDoKLQkJCWZ0ZXN0LT5jb2RlID0gQlBGX1NfSk1QX0pTRVRfWDsKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCQkvKiBmb3IgY29uZGl0aW9uYWxzIGJvdGggbXVzdCBiZSBzYWZlICovCi0JCXN3aXRjaCAoZnRlc3QtPmNvZGUpIHsKIAkJY2FzZSBCUEZfU19KTVBfSkVRX0s6CiAJCWNhc2UgQlBGX1NfSk1QX0pFUV9YOgogCQljYXNlIEJQRl9TX0pNUF9KR0VfSzoKQEAgLTU3MCwyMSArNTkzLDQwIEBACiAJCWNhc2UgQlBGX1NfSk1QX0pHVF9YOgogCQljYXNlIEJQRl9TX0pNUF9KU0VUX1g6CiAJCWNhc2UgQlBGX1NfSk1QX0pTRVRfSzoKKwkJCS8qIGZvciBjb25kaXRpb25hbHMgYm90aCBtdXN0IGJlIHNhZmUgKi8KIAkJCWlmIChwYyArIGZ0ZXN0LT5qdCArIDEgPj0gZmxlbiB8fAogCQkJICAgIHBjICsgZnRlc3QtPmpmICsgMSA+PSBmbGVuKQogCQkJCXJldHVybiAtRUlOVkFMOworCQkJYnJlYWs7CisJCWNhc2UgQlBGX1NfTERfV19BQlM6CisJCWNhc2UgQlBGX1NfTERfSF9BQlM6CisJCWNhc2UgQlBGX1NfTERfQl9BQlM6CisjZGVmaW5lIEFOQ0lMTEFSWShDT0RFKSBjYXNlIFNLRl9BRF9PRkYgKyBTS0ZfQURfIyNDT0RFOglcCisJCQkJY29kZSA9IEJQRl9TX0FOQ18jI0NPREU7CVwKKwkJCQlicmVhaworCQkJc3dpdGNoIChmdGVzdC0+aykgeworCQkJQU5DSUxMQVJZKFBST1RPQ09MKTsKKwkJCUFOQ0lMTEFSWShQS1RUWVBFKTsKKwkJCUFOQ0lMTEFSWShJRklOREVYKTsKKwkJCUFOQ0lMTEFSWShOTEFUVFIpOworCQkJQU5DSUxMQVJZKE5MQVRUUl9ORVNUKTsKKwkJCUFOQ0lMTEFSWShNQVJLKTsKKwkJCUFOQ0lMTEFSWShRVUVVRSk7CisJCQlBTkNJTExBUlkoSEFUWVBFKTsKKwkJCUFOQ0lMTEFSWShSWEhBU0gpOworCQkJQU5DSUxMQVJZKENQVSk7CisJCQl9CiAJCX0KKwkJZnRlc3QtPmNvZGUgPSBjb2RlOwogCX0KIAogCS8qIGxhc3QgaW5zdHJ1Y3Rpb24gbXVzdCBiZSBhIFJFVCBjb2RlICovCiAJc3dpdGNoIChmaWx0ZXJbZmxlbiAtIDFdLmNvZGUpIHsKIAljYXNlIEJQRl9TX1JFVF9LOgogCWNhc2UgQlBGX1NfUkVUX0E6Ci0JCXJldHVybiAwOwotCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9CisJCXJldHVybiBjaGVja19sb2FkX2FuZF9zdG9yZXMoZmlsdGVyLCBmbGVuKTsKKwl9CisJcmV0dXJuIC1FSU5WQUw7CiB9CiBFWFBPUlRfU1lNQk9MKHNrX2Noa19maWx0ZXIpOwogCmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZWlnaGJvdXIuYyBiL25ldC9jb3JlL25laWdoYm91ci5jCmluZGV4IDhjYzhmOWEuLjYwYTkwMjkgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL25laWdoYm91ci5jCisrKyBiL25ldC9jb3JlL25laWdoYm91ci5jCkBAIC00MSw3ICs0MSw2IEBACiAKICNkZWZpbmUgTkVJR0hfUFJJTlRLKHguLi4pIHByaW50ayh4KQogI2RlZmluZSBORUlHSF9OT1BSSU5USyh4Li4uKSBkbyB7IDsgfSB3aGlsZSgwKQotI2RlZmluZSBORUlHSF9QUklOVEswIE5FSUdIX1BSSU5USwogI2RlZmluZSBORUlHSF9QUklOVEsxIE5FSUdIX05PUFJJTlRLCiAjZGVmaW5lIE5FSUdIX1BSSU5USzIgTkVJR0hfTk9QUklOVEsKIApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmV0LXN5c2ZzLmMgYi9uZXQvY29yZS9uZXQtc3lzZnMuYwppbmRleCA3ZjkwMmNhLi5lMjNjMDFiIDEwMDY0NAotLS0gYS9uZXQvY29yZS9uZXQtc3lzZnMuYworKysgYi9uZXQvY29yZS9uZXQtc3lzZnMuYwpAQCAtNzA2LDcgKzcwNiw2IEBACiBzdGF0aWMgdm9pZCByeF9xdWV1ZV9yZWxlYXNlKHN0cnVjdCBrb2JqZWN0ICprb2JqKQogewogCXN0cnVjdCBuZXRkZXZfcnhfcXVldWUgKnF1ZXVlID0gdG9fcnhfcXVldWUoa29iaik7Ci0Jc3RydWN0IG5ldGRldl9yeF9xdWV1ZSAqZmlyc3QgPSBxdWV1ZS0+Zmlyc3Q7CiAJc3RydWN0IHJwc19tYXAgKm1hcDsKIAlzdHJ1Y3QgcnBzX2Rldl9mbG93X3RhYmxlICpmbG93X3RhYmxlOwogCkBAIC03MjMsMTAgKzcyMiw4IEBACiAJCWNhbGxfcmN1KCZmbG93X3RhYmxlLT5yY3UsIHJwc19kZXZfZmxvd190YWJsZV9yZWxlYXNlKTsKIAl9CiAKLQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmZmlyc3QtPmNvdW50KSkKLQkJa2ZyZWUoZmlyc3QpOwotCWVsc2UKLQkJbWVtc2V0KGtvYmosIDAsIHNpemVvZigqa29iaikpOworCW1lbXNldChrb2JqLCAwLCBzaXplb2YoKmtvYmopKTsKKwlkZXZfcHV0KHF1ZXVlLT5kZXYpOwogfQogCiBzdGF0aWMgc3RydWN0IGtvYmpfdHlwZSByeF9xdWV1ZV9rdHlwZSA9IHsKQEAgLTczOCw3ICs3MzUsNiBAQAogc3RhdGljIGludCByeF9xdWV1ZV9hZGRfa29iamVjdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBpbnQgaW5kZXgpCiB7CiAJc3RydWN0IG5ldGRldl9yeF9xdWV1ZSAqcXVldWUgPSBuZXQtPl9yeCArIGluZGV4OwotCXN0cnVjdCBuZXRkZXZfcnhfcXVldWUgKmZpcnN0ID0gcXVldWUtPmZpcnN0OwogCXN0cnVjdCBrb2JqZWN0ICprb2JqID0gJnF1ZXVlLT5rb2JqOwogCWludCBlcnJvciA9IDA7CiAKQEAgLTc1MSwxNCArNzQ3LDE2IEBACiAJfQogCiAJa29iamVjdF91ZXZlbnQoa29iaiwgS09CSl9BREQpOwotCWF0b21pY19pbmMoJmZpcnN0LT5jb3VudCk7CisJZGV2X2hvbGQocXVldWUtPmRldik7CiAKIAlyZXR1cm4gZXJyb3I7CiB9CisjZW5kaWYgLyogQ09ORklHX1JQUyAqLwogCiBpbnQKIG5ldF9yeF9xdWV1ZV91cGRhdGVfa29iamVjdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgaW50IG9sZF9udW0sIGludCBuZXdfbnVtKQogeworI2lmZGVmIENPTkZJR19SUFMKIAlpbnQgaTsKIAlpbnQgZXJyb3IgPSAwOwogCkBAIC03NzQsMjMgKzc3Miw0MjMgQEAKIAkJa29iamVjdF9wdXQoJm5ldC0+X3J4W2ldLmtvYmopOwogCiAJcmV0dXJuIGVycm9yOworI2Vsc2UKKwlyZXR1cm4gMDsKKyNlbmRpZgogfQogCi1zdGF0aWMgaW50IHJ4X3F1ZXVlX3JlZ2lzdGVyX2tvYmplY3RzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCisjaWZkZWYgQ09ORklHX1hQUworLyoKKyAqIG5ldGRldl9xdWV1ZSBzeXNmcyBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMuCisgKi8KK3N0cnVjdCBuZXRkZXZfcXVldWVfYXR0cmlidXRlIHsKKwlzdHJ1Y3QgYXR0cmlidXRlIGF0dHI7CisJc3NpemVfdCAoKnNob3cpKHN0cnVjdCBuZXRkZXZfcXVldWUgKnF1ZXVlLAorCSAgICBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKTsKKwlzc2l6ZV90ICgqc3RvcmUpKHN0cnVjdCBuZXRkZXZfcXVldWUgKnF1ZXVlLAorCSAgICBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKTsKK307CisjZGVmaW5lIHRvX25ldGRldl9xdWV1ZV9hdHRyKF9hdHRyKSBjb250YWluZXJfb2YoX2F0dHIsCQlcCisgICAgc3RydWN0IG5ldGRldl9xdWV1ZV9hdHRyaWJ1dGUsIGF0dHIpCisKKyNkZWZpbmUgdG9fbmV0ZGV2X3F1ZXVlKG9iaikgY29udGFpbmVyX29mKG9iaiwgc3RydWN0IG5ldGRldl9xdWV1ZSwga29iaikKKworc3RhdGljIHNzaXplX3QgbmV0ZGV2X3F1ZXVlX2F0dHJfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwKKwkJCQkgICAgICBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CisJc3RydWN0IG5ldGRldl9xdWV1ZV9hdHRyaWJ1dGUgKmF0dHJpYnV0ZSA9IHRvX25ldGRldl9xdWV1ZV9hdHRyKGF0dHIpOworCXN0cnVjdCBuZXRkZXZfcXVldWUgKnF1ZXVlID0gdG9fbmV0ZGV2X3F1ZXVlKGtvYmopOworCisJaWYgKCFhdHRyaWJ1dGUtPnNob3cpCisJCXJldHVybiAtRUlPOworCisJcmV0dXJuIGF0dHJpYnV0ZS0+c2hvdyhxdWV1ZSwgYXR0cmlidXRlLCBidWYpOworfQorCitzdGF0aWMgc3NpemVfdCBuZXRkZXZfcXVldWVfYXR0cl9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKKwkJCQkgICAgICAgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IG5ldGRldl9xdWV1ZV9hdHRyaWJ1dGUgKmF0dHJpYnV0ZSA9IHRvX25ldGRldl9xdWV1ZV9hdHRyKGF0dHIpOworCXN0cnVjdCBuZXRkZXZfcXVldWUgKnF1ZXVlID0gdG9fbmV0ZGV2X3F1ZXVlKGtvYmopOworCisJaWYgKCFhdHRyaWJ1dGUtPnN0b3JlKQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiBhdHRyaWJ1dGUtPnN0b3JlKHF1ZXVlLCBhdHRyaWJ1dGUsIGJ1ZiwgY291bnQpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHN5c2ZzX29wcyBuZXRkZXZfcXVldWVfc3lzZnNfb3BzID0geworCS5zaG93ID0gbmV0ZGV2X3F1ZXVlX2F0dHJfc2hvdywKKwkuc3RvcmUgPSBuZXRkZXZfcXVldWVfYXR0cl9zdG9yZSwKK307CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdldF9uZXRkZXZfcXVldWVfaW5kZXgoc3RydWN0IG5ldGRldl9xdWV1ZSAqcXVldWUpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHF1ZXVlLT5kZXY7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5udW1fdHhfcXVldWVzOyBpKyspCisJCWlmIChxdWV1ZSA9PSAmZGV2LT5fdHhbaV0pCisJCQlicmVhazsKKworCUJVR19PTihpID49IGRldi0+bnVtX3R4X3F1ZXVlcyk7CisKKwlyZXR1cm4gaTsKK30KKworCitzdGF0aWMgc3NpemVfdCBzaG93X3hwc19tYXAoc3RydWN0IG5ldGRldl9xdWV1ZSAqcXVldWUsCisJCQkgICAgc3RydWN0IG5ldGRldl9xdWV1ZV9hdHRyaWJ1dGUgKmF0dHJpYnV0ZSwgY2hhciAqYnVmKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBxdWV1ZS0+ZGV2OworCXN0cnVjdCB4cHNfZGV2X21hcHMgKmRldl9tYXBzOworCWNwdW1hc2tfdmFyX3QgbWFzazsKKwl1bnNpZ25lZCBsb25nIGluZGV4OworCXNpemVfdCBsZW4gPSAwOworCWludCBpOworCisJaWYgKCF6YWxsb2NfY3B1bWFza192YXIoJm1hc2ssIEdGUF9LRVJORUwpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWluZGV4ID0gZ2V0X25ldGRldl9xdWV1ZV9pbmRleChxdWV1ZSk7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJZGV2X21hcHMgPSByY3VfZGVyZWZlcmVuY2UoZGV2LT54cHNfbWFwcyk7CisJaWYgKGRldl9tYXBzKSB7CisJCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CisJCQlzdHJ1Y3QgeHBzX21hcCAqbWFwID0KKwkJCSAgICByY3VfZGVyZWZlcmVuY2UoZGV2X21hcHMtPmNwdV9tYXBbaV0pOworCQkJaWYgKG1hcCkgeworCQkJCWludCBqOworCQkJCWZvciAoaiA9IDA7IGogPCBtYXAtPmxlbjsgaisrKSB7CisJCQkJCWlmIChtYXAtPnF1ZXVlc1tqXSA9PSBpbmRleCkgeworCQkJCQkJY3B1bWFza19zZXRfY3B1KGksIG1hc2spOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9CisJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwlsZW4gKz0gY3B1bWFza19zY25wcmludGYoYnVmICsgbGVuLCBQQUdFX1NJWkUsIG1hc2spOworCWlmIChQQUdFX1NJWkUgLSBsZW4gPCAzKSB7CisJCWZyZWVfY3B1bWFza192YXIobWFzayk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWZyZWVfY3B1bWFza192YXIobWFzayk7CisJbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiXG4iKTsKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgdm9pZCB4cHNfbWFwX3JlbGVhc2Uoc3RydWN0IHJjdV9oZWFkICpyY3UpCit7CisJc3RydWN0IHhwc19tYXAgKm1hcCA9IGNvbnRhaW5lcl9vZihyY3UsIHN0cnVjdCB4cHNfbWFwLCByY3UpOworCisJa2ZyZWUobWFwKTsKK30KKworc3RhdGljIHZvaWQgeHBzX2Rldl9tYXBzX3JlbGVhc2Uoc3RydWN0IHJjdV9oZWFkICpyY3UpCit7CisJc3RydWN0IHhwc19kZXZfbWFwcyAqZGV2X21hcHMgPQorCSAgICBjb250YWluZXJfb2YocmN1LCBzdHJ1Y3QgeHBzX2Rldl9tYXBzLCByY3UpOworCisJa2ZyZWUoZGV2X21hcHMpOworfQorCitzdGF0aWMgREVGSU5FX01VVEVYKHhwc19tYXBfbXV0ZXgpOworI2RlZmluZSB4bWFwX2RlcmVmZXJlbmNlKFApCQlcCisJcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCgoUCksIGxvY2tkZXBfaXNfaGVsZCgmeHBzX21hcF9tdXRleCkpCisKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX3hwc19tYXAoc3RydWN0IG5ldGRldl9xdWV1ZSAqcXVldWUsCisJCSAgICAgIHN0cnVjdCBuZXRkZXZfcXVldWVfYXR0cmlidXRlICphdHRyaWJ1dGUsCisJCSAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcXVldWUtPmRldjsKKwljcHVtYXNrX3Zhcl90IG1hc2s7CisJaW50IGVyciwgaSwgY3B1LCBwb3MsIG1hcF9sZW4sIGFsbG9jX2xlbiwgbmVlZF9zZXQ7CisJdW5zaWduZWQgbG9uZyBpbmRleDsKKwlzdHJ1Y3QgeHBzX21hcCAqbWFwLCAqbmV3X21hcDsKKwlzdHJ1Y3QgeHBzX2Rldl9tYXBzICpkZXZfbWFwcywgKm5ld19kZXZfbWFwczsKKwlpbnQgbm9uZW1wdHkgPSAwOworCWludCBudW1hX25vZGUgPSAtMjsKKworCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKKwkJcmV0dXJuIC1FUEVSTTsKKworCWlmICghYWxsb2NfY3B1bWFza192YXIoJm1hc2ssIEdGUF9LRVJORUwpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWluZGV4ID0gZ2V0X25ldGRldl9xdWV1ZV9pbmRleChxdWV1ZSk7CisKKwllcnIgPSBiaXRtYXBfcGFyc2UoYnVmLCBsZW4sIGNwdW1hc2tfYml0cyhtYXNrKSwgbnJfY3B1bWFza19iaXRzKTsKKwlpZiAoZXJyKSB7CisJCWZyZWVfY3B1bWFza192YXIobWFzayk7CisJCXJldHVybiBlcnI7CisJfQorCisJbmV3X2Rldl9tYXBzID0ga3phbGxvYyhtYXhfdCh1bnNpZ25lZCwKKwkgICAgWFBTX0RFVl9NQVBTX1NJWkUsIEwxX0NBQ0hFX0JZVEVTKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFuZXdfZGV2X21hcHMpIHsKKwkJZnJlZV9jcHVtYXNrX3ZhcihtYXNrKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJbXV0ZXhfbG9jaygmeHBzX21hcF9tdXRleCk7CisKKwlkZXZfbWFwcyA9IHhtYXBfZGVyZWZlcmVuY2UoZGV2LT54cHNfbWFwcyk7CisKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CisJCW1hcCA9IGRldl9tYXBzID8KKwkJCXhtYXBfZGVyZWZlcmVuY2UoZGV2X21hcHMtPmNwdV9tYXBbY3B1XSkgOiBOVUxMOworCQluZXdfbWFwID0gbWFwOworCQlpZiAobWFwKSB7CisJCQlmb3IgKHBvcyA9IDA7IHBvcyA8IG1hcC0+bGVuOyBwb3MrKykKKwkJCQlpZiAobWFwLT5xdWV1ZXNbcG9zXSA9PSBpbmRleCkKKwkJCQkJYnJlYWs7CisJCQltYXBfbGVuID0gbWFwLT5sZW47CisJCQlhbGxvY19sZW4gPSBtYXAtPmFsbG9jX2xlbjsKKwkJfSBlbHNlCisJCQlwb3MgPSBtYXBfbGVuID0gYWxsb2NfbGVuID0gMDsKKworCQluZWVkX3NldCA9IGNwdV9pc3NldChjcHUsICptYXNrKSAmJiBjcHVfb25saW5lKGNwdSk7CisjaWZkZWYgQ09ORklHX05VTUEKKwkJaWYgKG5lZWRfc2V0KSB7CisJCQlpZiAobnVtYV9ub2RlID09IC0yKQorCQkJCW51bWFfbm9kZSA9IGNwdV90b19ub2RlKGNwdSk7CisJCQllbHNlIGlmIChudW1hX25vZGUgIT0gY3B1X3RvX25vZGUoY3B1KSkKKwkJCQludW1hX25vZGUgPSAtMTsKKwkJfQorI2VuZGlmCisJCWlmIChuZWVkX3NldCAmJiBwb3MgPj0gbWFwX2xlbikgeworCQkJLyogTmVlZCB0byBhZGQgcXVldWUgdG8gdGhpcyBDUFUncyBtYXAgKi8KKwkJCWlmIChtYXBfbGVuID49IGFsbG9jX2xlbikgeworCQkJCWFsbG9jX2xlbiA9IGFsbG9jX2xlbiA/CisJCQkJICAgIDIgKiBhbGxvY19sZW4gOiBYUFNfTUlOX01BUF9BTExPQzsKKwkJCQluZXdfbWFwID0ga3phbGxvY19ub2RlKFhQU19NQVBfU0laRShhbGxvY19sZW4pLAorCQkJCQkJICAgICAgIEdGUF9LRVJORUwsCisJCQkJCQkgICAgICAgY3B1X3RvX25vZGUoY3B1KSk7CisJCQkJaWYgKCFuZXdfbWFwKQorCQkJCQlnb3RvIGVycm9yOworCQkJCW5ld19tYXAtPmFsbG9jX2xlbiA9IGFsbG9jX2xlbjsKKwkJCQlmb3IgKGkgPSAwOyBpIDwgbWFwX2xlbjsgaSsrKQorCQkJCQluZXdfbWFwLT5xdWV1ZXNbaV0gPSBtYXAtPnF1ZXVlc1tpXTsKKwkJCQluZXdfbWFwLT5sZW4gPSBtYXBfbGVuOworCQkJfQorCQkJbmV3X21hcC0+cXVldWVzW25ld19tYXAtPmxlbisrXSA9IGluZGV4OworCQl9IGVsc2UgaWYgKCFuZWVkX3NldCAmJiBwb3MgPCBtYXBfbGVuKSB7CisJCQkvKiBOZWVkIHRvIHJlbW92ZSBxdWV1ZSBmcm9tIHRoaXMgQ1BVJ3MgbWFwICovCisJCQlpZiAobWFwX2xlbiA+IDEpCisJCQkJbmV3X21hcC0+cXVldWVzW3Bvc10gPQorCQkJCSAgICBuZXdfbWFwLT5xdWV1ZXNbLS1uZXdfbWFwLT5sZW5dOworCQkJZWxzZQorCQkJCW5ld19tYXAgPSBOVUxMOworCQl9CisJCVJDVV9JTklUX1BPSU5URVIobmV3X2Rldl9tYXBzLT5jcHVfbWFwW2NwdV0sIG5ld19tYXApOworCX0KKworCS8qIENsZWFudXAgb2xkIG1hcHMgKi8KKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CisJCW1hcCA9IGRldl9tYXBzID8KKwkJCXhtYXBfZGVyZWZlcmVuY2UoZGV2X21hcHMtPmNwdV9tYXBbY3B1XSkgOiBOVUxMOworCQlpZiAobWFwICYmIHhtYXBfZGVyZWZlcmVuY2UobmV3X2Rldl9tYXBzLT5jcHVfbWFwW2NwdV0pICE9IG1hcCkKKwkJCWNhbGxfcmN1KCZtYXAtPnJjdSwgeHBzX21hcF9yZWxlYXNlKTsKKwkJaWYgKG5ld19kZXZfbWFwcy0+Y3B1X21hcFtjcHVdKQorCQkJbm9uZW1wdHkgPSAxOworCX0KKworCWlmIChub25lbXB0eSkKKwkJcmN1X2Fzc2lnbl9wb2ludGVyKGRldi0+eHBzX21hcHMsIG5ld19kZXZfbWFwcyk7CisJZWxzZSB7CisJCWtmcmVlKG5ld19kZXZfbWFwcyk7CisJCXJjdV9hc3NpZ25fcG9pbnRlcihkZXYtPnhwc19tYXBzLCBOVUxMKTsKKwl9CisKKwlpZiAoZGV2X21hcHMpCisJCWNhbGxfcmN1KCZkZXZfbWFwcy0+cmN1LCB4cHNfZGV2X21hcHNfcmVsZWFzZSk7CisKKwluZXRkZXZfcXVldWVfbnVtYV9ub2RlX3dyaXRlKHF1ZXVlLCAobnVtYV9ub2RlID49IDApID8gbnVtYV9ub2RlIDoKKwkJCQkJICAgIE5VTUFfTk9fTk9ERSk7CisKKwltdXRleF91bmxvY2soJnhwc19tYXBfbXV0ZXgpOworCisJZnJlZV9jcHVtYXNrX3ZhcihtYXNrKTsKKwlyZXR1cm4gbGVuOworCitlcnJvcjoKKwltdXRleF91bmxvY2soJnhwc19tYXBfbXV0ZXgpOworCisJaWYgKG5ld19kZXZfbWFwcykKKwkJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpCisJCQlrZnJlZShyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKAorCQkJCW5ld19kZXZfbWFwcy0+Y3B1X21hcFtpXSwKKwkJCQkxKSk7CisJa2ZyZWUobmV3X2Rldl9tYXBzKTsKKwlmcmVlX2NwdW1hc2tfdmFyKG1hc2spOworCXJldHVybiAtRU5PTUVNOworfQorCitzdGF0aWMgc3RydWN0IG5ldGRldl9xdWV1ZV9hdHRyaWJ1dGUgeHBzX2NwdXNfYXR0cmlidXRlID0KKyAgICBfX0FUVFIoeHBzX2NwdXMsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X3hwc19tYXAsIHN0b3JlX3hwc19tYXApOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbmV0ZGV2X3F1ZXVlX2RlZmF1bHRfYXR0cnNbXSA9IHsKKwkmeHBzX2NwdXNfYXR0cmlidXRlLmF0dHIsCisJTlVMTAorfTsKKworc3RhdGljIHZvaWQgbmV0ZGV2X3F1ZXVlX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopCit7CisJc3RydWN0IG5ldGRldl9xdWV1ZSAqcXVldWUgPSB0b19uZXRkZXZfcXVldWUoa29iaik7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHF1ZXVlLT5kZXY7CisJc3RydWN0IHhwc19kZXZfbWFwcyAqZGV2X21hcHM7CisJc3RydWN0IHhwc19tYXAgKm1hcDsKKwl1bnNpZ25lZCBsb25nIGluZGV4OworCWludCBpLCBwb3MsIG5vbmVtcHR5ID0gMDsKKworCWluZGV4ID0gZ2V0X25ldGRldl9xdWV1ZV9pbmRleChxdWV1ZSk7CisKKwltdXRleF9sb2NrKCZ4cHNfbWFwX211dGV4KTsKKwlkZXZfbWFwcyA9IHhtYXBfZGVyZWZlcmVuY2UoZGV2LT54cHNfbWFwcyk7CisKKwlpZiAoZGV2X21hcHMpIHsKKwkJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKKwkJCW1hcCA9IHhtYXBfZGVyZWZlcmVuY2UoZGV2X21hcHMtPmNwdV9tYXBbaV0pOworCQkJaWYgKCFtYXApCisJCQkJY29udGludWU7CisKKwkJCWZvciAocG9zID0gMDsgcG9zIDwgbWFwLT5sZW47IHBvcysrKQorCQkJCWlmIChtYXAtPnF1ZXVlc1twb3NdID09IGluZGV4KQorCQkJCQlicmVhazsKKworCQkJaWYgKHBvcyA8IG1hcC0+bGVuKSB7CisJCQkJaWYgKG1hcC0+bGVuID4gMSkKKwkJCQkJbWFwLT5xdWV1ZXNbcG9zXSA9CisJCQkJCSAgICBtYXAtPnF1ZXVlc1stLW1hcC0+bGVuXTsKKwkJCQllbHNlIHsKKwkJCQkJUkNVX0lOSVRfUE9JTlRFUihkZXZfbWFwcy0+Y3B1X21hcFtpXSwKKwkJCQkJICAgIE5VTEwpOworCQkJCQljYWxsX3JjdSgmbWFwLT5yY3UsIHhwc19tYXBfcmVsZWFzZSk7CisJCQkJCW1hcCA9IE5VTEw7CisJCQkJfQorCQkJfQorCQkJaWYgKG1hcCkKKwkJCQlub25lbXB0eSA9IDE7CisJCX0KKworCQlpZiAoIW5vbmVtcHR5KSB7CisJCQlSQ1VfSU5JVF9QT0lOVEVSKGRldi0+eHBzX21hcHMsIE5VTEwpOworCQkJY2FsbF9yY3UoJmRldl9tYXBzLT5yY3UsIHhwc19kZXZfbWFwc19yZWxlYXNlKTsKKwkJfQorCX0KKworCW11dGV4X3VubG9jaygmeHBzX21hcF9tdXRleCk7CisKKwltZW1zZXQoa29iaiwgMCwgc2l6ZW9mKCprb2JqKSk7CisJZGV2X3B1dChxdWV1ZS0+ZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCBrb2JqX3R5cGUgbmV0ZGV2X3F1ZXVlX2t0eXBlID0geworCS5zeXNmc19vcHMgPSAmbmV0ZGV2X3F1ZXVlX3N5c2ZzX29wcywKKwkucmVsZWFzZSA9IG5ldGRldl9xdWV1ZV9yZWxlYXNlLAorCS5kZWZhdWx0X2F0dHJzID0gbmV0ZGV2X3F1ZXVlX2RlZmF1bHRfYXR0cnMsCit9OworCitzdGF0aWMgaW50IG5ldGRldl9xdWV1ZV9hZGRfa29iamVjdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBpbnQgaW5kZXgpCit7CisJc3RydWN0IG5ldGRldl9xdWV1ZSAqcXVldWUgPSBuZXQtPl90eCArIGluZGV4OworCXN0cnVjdCBrb2JqZWN0ICprb2JqID0gJnF1ZXVlLT5rb2JqOworCWludCBlcnJvciA9IDA7CisKKwlrb2JqLT5rc2V0ID0gbmV0LT5xdWV1ZXNfa3NldDsKKwllcnJvciA9IGtvYmplY3RfaW5pdF9hbmRfYWRkKGtvYmosICZuZXRkZXZfcXVldWVfa3R5cGUsIE5VTEwsCisJICAgICJ0eC0ldSIsIGluZGV4KTsKKwlpZiAoZXJyb3IpIHsKKwkJa29iamVjdF9wdXQoa29iaik7CisJCXJldHVybiBlcnJvcjsKKwl9CisKKwlrb2JqZWN0X3VldmVudChrb2JqLCBLT0JKX0FERCk7CisJZGV2X2hvbGQocXVldWUtPmRldik7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisjZW5kaWYgLyogQ09ORklHX1hQUyAqLworCitpbnQKK25ldGRldl9xdWV1ZV91cGRhdGVfa29iamVjdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgaW50IG9sZF9udW0sIGludCBuZXdfbnVtKQoreworI2lmZGVmIENPTkZJR19YUFMKKwlpbnQgaTsKKwlpbnQgZXJyb3IgPSAwOworCisJZm9yIChpID0gb2xkX251bTsgaSA8IG5ld19udW07IGkrKykgeworCQllcnJvciA9IG5ldGRldl9xdWV1ZV9hZGRfa29iamVjdChuZXQsIGkpOworCQlpZiAoZXJyb3IpIHsKKwkJCW5ld19udW0gPSBvbGRfbnVtOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwl3aGlsZSAoLS1pID49IG5ld19udW0pCisJCWtvYmplY3RfcHV0KCZuZXQtPl90eFtpXS5rb2JqKTsKKworCXJldHVybiBlcnJvcjsKKyNlbHNlCisJcmV0dXJuIDA7CisjZW5kaWYKK30KKworc3RhdGljIGludCByZWdpc3Rlcl9xdWV1ZV9rb2JqZWN0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQoreworCWludCBlcnJvciA9IDAsIHR4cSA9IDAsIHJ4cSA9IDAsIHJlYWxfcnggPSAwLCByZWFsX3R4ID0gMDsKKworI2lmIGRlZmluZWQoQ09ORklHX1JQUykgfHwgZGVmaW5lZChDT05GSUdfWFBTKQogCW5ldC0+cXVldWVzX2tzZXQgPSBrc2V0X2NyZWF0ZV9hbmRfYWRkKCJxdWV1ZXMiLAogCSAgICBOVUxMLCAmbmV0LT5kZXYua29iaik7CiAJaWYgKCFuZXQtPnF1ZXVlc19rc2V0KQogCQlyZXR1cm4gLUVOT01FTTsKLQlyZXR1cm4gbmV0X3J4X3F1ZXVlX3VwZGF0ZV9rb2JqZWN0cyhuZXQsIDAsIG5ldC0+cmVhbF9udW1fcnhfcXVldWVzKTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1JQUworCXJlYWxfcnggPSBuZXQtPnJlYWxfbnVtX3J4X3F1ZXVlczsKKyNlbmRpZgorCXJlYWxfdHggPSBuZXQtPnJlYWxfbnVtX3R4X3F1ZXVlczsKKworCWVycm9yID0gbmV0X3J4X3F1ZXVlX3VwZGF0ZV9rb2JqZWN0cyhuZXQsIDAsIHJlYWxfcngpOworCWlmIChlcnJvcikKKwkJZ290byBlcnJvcjsKKwlyeHEgPSByZWFsX3J4OworCisJZXJyb3IgPSBuZXRkZXZfcXVldWVfdXBkYXRlX2tvYmplY3RzKG5ldCwgMCwgcmVhbF90eCk7CisJaWYgKGVycm9yKQorCQlnb3RvIGVycm9yOworCXR4cSA9IHJlYWxfdHg7CisKKwlyZXR1cm4gMDsKKworZXJyb3I6CisJbmV0ZGV2X3F1ZXVlX3VwZGF0ZV9rb2JqZWN0cyhuZXQsIHR4cSwgMCk7CisJbmV0X3J4X3F1ZXVlX3VwZGF0ZV9rb2JqZWN0cyhuZXQsIHJ4cSwgMCk7CisJcmV0dXJuIGVycm9yOwogfQogCi1zdGF0aWMgdm9pZCByeF9xdWV1ZV9yZW1vdmVfa29iamVjdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKK3N0YXRpYyB2b2lkIHJlbW92ZV9xdWV1ZV9rb2JqZWN0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQogewotCW5ldF9yeF9xdWV1ZV91cGRhdGVfa29iamVjdHMobmV0LCBuZXQtPnJlYWxfbnVtX3J4X3F1ZXVlcywgMCk7CisJaW50IHJlYWxfcnggPSAwLCByZWFsX3R4ID0gMDsKKworI2lmZGVmIENPTkZJR19SUFMKKwlyZWFsX3J4ID0gbmV0LT5yZWFsX251bV9yeF9xdWV1ZXM7CisjZW5kaWYKKwlyZWFsX3R4ID0gbmV0LT5yZWFsX251bV90eF9xdWV1ZXM7CisKKwluZXRfcnhfcXVldWVfdXBkYXRlX2tvYmplY3RzKG5ldCwgcmVhbF9yeCwgMCk7CisJbmV0ZGV2X3F1ZXVlX3VwZGF0ZV9rb2JqZWN0cyhuZXQsIHJlYWxfdHgsIDApOworI2lmIGRlZmluZWQoQ09ORklHX1JQUykgfHwgZGVmaW5lZChDT05GSUdfWFBTKQogCWtzZXRfdW5yZWdpc3RlcihuZXQtPnF1ZXVlc19rc2V0KTsKKyNlbmRpZgogfQotI2VuZGlmIC8qIENPTkZJR19SUFMgKi8KIAogc3RhdGljIGNvbnN0IHZvaWQgKm5ldF9jdXJyZW50X25zKHZvaWQpCiB7CkBAIC04ODksOSArMTI4Nyw3IEBACiAKIAlrb2JqZWN0X2dldCgmZGV2LT5rb2JqKTsKIAotI2lmZGVmIENPTkZJR19SUFMKLQlyeF9xdWV1ZV9yZW1vdmVfa29iamVjdHMobmV0KTsKLSNlbmRpZgorCXJlbW92ZV9xdWV1ZV9rb2JqZWN0cyhuZXQpOwogCiAJZGV2aWNlX2RlbChkZXYpOwogfQpAQCAtOTMwLDEzICsxMzI2LDExIEBACiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKLSNpZmRlZiBDT05GSUdfUlBTCi0JZXJyb3IgPSByeF9xdWV1ZV9yZWdpc3Rlcl9rb2JqZWN0cyhuZXQpOworCWVycm9yID0gcmVnaXN0ZXJfcXVldWVfa29iamVjdHMobmV0KTsKIAlpZiAoZXJyb3IpIHsKIAkJZGV2aWNlX2RlbChkZXYpOwogCQlyZXR1cm4gZXJyb3I7CiAJfQotI2VuZGlmCiAKIAlyZXR1cm4gZXJyb3I7CiB9CmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXQtc3lzZnMuaCBiL25ldC9jb3JlL25ldC1zeXNmcy5oCmluZGV4IDc3OGUxNTcuLmJkNzc1MWUgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL25ldC1zeXNmcy5oCisrKyBiL25ldC9jb3JlL25ldC1zeXNmcy5oCkBAIC00LDggKzQsOCBAQAogaW50IG5ldGRldl9rb2JqZWN0X2luaXQodm9pZCk7CiBpbnQgbmV0ZGV2X3JlZ2lzdGVyX2tvYmplY3Qoc3RydWN0IG5ldF9kZXZpY2UgKik7CiB2b2lkIG5ldGRldl91bnJlZ2lzdGVyX2tvYmplY3Qoc3RydWN0IG5ldF9kZXZpY2UgKik7Ci0jaWZkZWYgQ09ORklHX1JQUwogaW50IG5ldF9yeF9xdWV1ZV91cGRhdGVfa29iamVjdHMoc3RydWN0IG5ldF9kZXZpY2UgKiwgaW50IG9sZF9udW0sIGludCBuZXdfbnVtKTsKLSNlbmRpZgoraW50IG5ldGRldl9xdWV1ZV91cGRhdGVfa29iamVjdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwKKwkJCQkgaW50IG9sZF9udW0sIGludCBuZXdfbnVtKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXRwb2xsLmMgYi9uZXQvY29yZS9uZXRwb2xsLmMKaW5kZXggNGU5OGZmYS4uMDJkYzJjYiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvbmV0cG9sbC5jCisrKyBiL25ldC9jb3JlL25ldHBvbGwuYwpAQCAtMzUsNyArMzUsNiBAQAogCiAjZGVmaW5lIE1BWF9VRFBfQ0hVTksgMTQ2MAogI2RlZmluZSBNQVhfU0tCUyAzMgotI2RlZmluZSBNQVhfUVVFVUVfREVQVEggKE1BWF9TS0JTIC8gMikKIAogc3RhdGljIHN0cnVjdCBza19idWZmX2hlYWQgc2tiX3Bvb2w7CiAKQEAgLTc2LDggKzc1LDcgQEAKIAogCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJCV9fbmV0aWZfdHhfbG9jayh0eHEsIHNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0JCWlmIChuZXRpZl90eF9xdWV1ZV9zdG9wcGVkKHR4cSkgfHwKLQkJICAgIG5ldGlmX3R4X3F1ZXVlX2Zyb3plbih0eHEpIHx8CisJCWlmIChuZXRpZl90eF9xdWV1ZV9mcm96ZW5fb3Jfc3RvcHBlZCh0eHEpIHx8CiAJCSAgICBvcHMtPm5kb19zdGFydF94bWl0KHNrYiwgZGV2KSAhPSBORVRERVZfVFhfT0spIHsKIAkJCXNrYl9xdWV1ZV9oZWFkKCZucGluZm8tPnR4cSwgc2tiKTsKIAkJCV9fbmV0aWZfdHhfdW5sb2NrKHR4cSk7CkBAIC05MjUsNyArOTIzLDcgQEAKIAogCQlza2JfcXVldWVfcHVyZ2UoJm5waW5mby0+YXJwX3R4KTsKIAkJc2tiX3F1ZXVlX3B1cmdlKCZucGluZm8tPnR4cSk7Ci0JCWNhbmNlbF9yZWFybWluZ19kZWxheWVkX3dvcmsoJm5waW5mby0+dHhfd29yayk7CisJCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmbnBpbmZvLT50eF93b3JrKTsKIAogCQkvKiBjbGVhbiBhZnRlciBsYXN0LCB1bmZpbmlzaGVkIHdvcmsgKi8KIAkJX19za2JfcXVldWVfcHVyZ2UoJm5waW5mby0+dHhxKTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3BrdGdlbi5jIGIvbmV0L2NvcmUvcGt0Z2VuLmMKaW5kZXggMzNiYzM4Mi4uYTllN2ZjNCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvcGt0Z2VuLmMKKysrIGIvbmV0L2NvcmUvcGt0Z2VuLmMKQEAgLTM3OCw2ICszNzgsNyBAQAogCiAJdTE2IHF1ZXVlX21hcF9taW47CiAJdTE2IHF1ZXVlX21hcF9tYXg7CisJX191MzIgc2tiX3ByaW9yaXR5OwkvKiBza2IgcHJpb3JpdHkgZmllbGQgKi8KIAlpbnQgbm9kZTsgICAgICAgICAgICAgICAvKiBNZW1vcnkgbm9kZSAqLwogCiAjaWZkZWYgQ09ORklHX1hGUk0KQEAgLTM5NCw2ICszOTUsOCBAQAogCV9fYmUzMiB0dl91c2VjOwogfTsKIAorc3RhdGljIGJvb2wgcGt0Z2VuX2V4aXRpbmcgX19yZWFkX21vc3RseTsKKwogc3RydWN0IHBrdGdlbl90aHJlYWQgewogCXNwaW5sb2NrX3QgaWZfbG9jazsJCS8qIGZvciBsaXN0IG9mIGRldmljZXMgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGlmX2xpc3Q7CS8qIEFsbCBkZXZpY2UgaGVyZSAqLwpAQCAtNTQ3LDYgKzU1MCwxMCBAQAogCQkgICBwa3RfZGV2LT5xdWV1ZV9tYXBfbWluLAogCQkgICBwa3RfZGV2LT5xdWV1ZV9tYXBfbWF4KTsKIAorCWlmIChwa3RfZGV2LT5za2JfcHJpb3JpdHkpCisJCXNlcV9wcmludGYoc2VxLCAiICAgICBza2JfcHJpb3JpdHk6ICV1XG4iLAorCQkJICAgcGt0X2Rldi0+c2tiX3ByaW9yaXR5KTsKKwogCWlmIChwa3RfZGV2LT5mbGFncyAmIEZfSVBWNikgewogCQljaGFyIGIxWzEyOF0sIGIyWzEyOF0sIGIzWzEyOF07CiAJCWZtdF9pcDYoYjEsIHBrdF9kZXYtPmluNl9zYWRkci5zNl9hZGRyKTsKQEAgLTE3MTEsNiArMTcxOCwxOCBAQAogCQlyZXR1cm4gY291bnQ7CiAJfQogCisJaWYgKCFzdHJjbXAobmFtZSwgInNrYl9wcmlvcml0eSIpKSB7CisJCWxlbiA9IG51bV9hcmcoJnVzZXJfYnVmZmVyW2ldLCA5LCAmdmFsdWUpOworCQlpZiAobGVuIDwgMCkKKwkJCXJldHVybiBsZW47CisKKwkJaSArPSBsZW47CisJCXBrdF9kZXYtPnNrYl9wcmlvcml0eSA9IHZhbHVlOworCQlzcHJpbnRmKHBnX3Jlc3VsdCwgIk9LOiBza2JfcHJpb3JpdHk9JWkiLAorCQkJcGt0X2Rldi0+c2tiX3ByaW9yaXR5KTsKKwkJcmV0dXJuIGNvdW50OworCX0KKwogCXNwcmludGYocGt0X2Rldi0+cmVzdWx0LCAiTm8gc3VjaCBwYXJhbWV0ZXIgXCIlc1wiIiwgbmFtZSk7CiAJcmV0dXJuIC1FSU5WQUw7CiB9CkBAIC0yNjQxLDYgKzI2NjAsNyBAQAogCQlzcHJpbnRmKHBrdF9kZXYtPnJlc3VsdCwgIk5vIG1lbW9yeSIpOwogCQlyZXR1cm4gTlVMTDsKIAl9CisJcHJlZmV0Y2h3KHNrYi0+ZGF0YSk7CiAKIAlza2JfcmVzZXJ2ZShza2IsIGRhdGFsZW4pOwogCkBAIC0yNjcxLDYgKzI2OTEsOCBAQAogCXNrYi0+dHJhbnNwb3J0X2hlYWRlciA9IHNrYi0+bmV0d29ya19oZWFkZXIgKyBzaXplb2Yoc3RydWN0IGlwaGRyKTsKIAlza2JfcHV0KHNrYiwgc2l6ZW9mKHN0cnVjdCBpcGhkcikgKyBzaXplb2Yoc3RydWN0IHVkcGhkcikpOwogCXNrYl9zZXRfcXVldWVfbWFwcGluZyhza2IsIHF1ZXVlX21hcCk7CisJc2tiLT5wcmlvcml0eSA9IHBrdF9kZXYtPnNrYl9wcmlvcml0eTsKKwogCWlwaCA9IGlwX2hkcihza2IpOwogCXVkcGggPSB1ZHBfaGRyKHNrYik7CiAKQEAgLTI5ODYsNiArMzAwOCw3IEBACiAJCXNwcmludGYocGt0X2Rldi0+cmVzdWx0LCAiTm8gbWVtb3J5Iik7CiAJCXJldHVybiBOVUxMOwogCX0KKwlwcmVmZXRjaHcoc2tiLT5kYXRhKTsKIAogCXNrYl9yZXNlcnZlKHNrYiwgMTYpOwogCkBAIC0zMDE2LDYgKzMwMzksNyBAQAogCXNrYi0+dHJhbnNwb3J0X2hlYWRlciA9IHNrYi0+bmV0d29ya19oZWFkZXIgKyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpOwogCXNrYl9wdXQoc2tiLCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpICsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpKTsKIAlza2Jfc2V0X3F1ZXVlX21hcHBpbmcoc2tiLCBxdWV1ZV9tYXApOworCXNrYi0+cHJpb3JpdHkgPSBwa3RfZGV2LT5za2JfcHJpb3JpdHk7CiAJaXBoID0gaXB2Nl9oZHIoc2tiKTsKIAl1ZHBoID0gdWRwX2hkcihza2IpOwogCkBAIC0zNDMxLDExICszNDU1LDYgQEAKIAogCXJlbW92ZV9wcm9jX2VudHJ5KHQtPnRzay0+Y29tbSwgcGdfcHJvY19kaXIpOwogCi0JbXV0ZXhfbG9jaygmcGt0Z2VuX3RocmVhZF9sb2NrKTsKLQotCWxpc3RfZGVsKCZ0LT50aF9saXN0KTsKLQotCW11dGV4X3VubG9jaygmcGt0Z2VuX3RocmVhZF9sb2NrKTsKIH0KIAogc3RhdGljIHZvaWQgcGt0Z2VuX3Jlc2NoZWQoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpCkBAIC0zNTEwLDcgKzM1MjksNyBAQAogCiAJX19uZXRpZl90eF9sb2NrX2JoKHR4cSk7CiAKLQlpZiAodW5saWtlbHkobmV0aWZfdHhfcXVldWVfc3RvcHBlZCh0eHEpIHx8IG5ldGlmX3R4X3F1ZXVlX2Zyb3plbih0eHEpKSkgeworCWlmICh1bmxpa2VseShuZXRpZl90eF9xdWV1ZV9mcm96ZW5fb3Jfc3RvcHBlZCh0eHEpKSkgewogCQlyZXQgPSBORVRERVZfVFhfQlVTWTsKIAkJcGt0X2Rldi0+bGFzdF9vayA9IDA7CiAJCWdvdG8gdW5sb2NrOwpAQCAtMzUzNCw4ICszNTUzLDcgQEAKIAkJYnJlYWs7CiAJZGVmYXVsdDogLyogRHJpdmVycyBhcmUgbm90IHN1cHBvc2VkIHRvIHJldHVybiBvdGhlciB2YWx1ZXMhICovCiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQlwcl9pbmZvKCJwa3RnZW46ICVzIHhtaXQgZXJyb3I6ICVkXG4iLAotCQkJCXBrdF9kZXYtPm9kZXZuYW1lLCByZXQpOworCQkJcHJfaW5mbygiJXMgeG1pdCBlcnJvcjogJWRcbiIsIHBrdF9kZXYtPm9kZXZuYW1lLCByZXQpOwogCQlwa3RfZGV2LT5lcnJvcnMrKzsKIAkJLyogZmFsbHRocnUgKi8KIAljYXNlIE5FVERFVl9UWF9MT0NLRUQ6CkBAIC0zNTgyLDYgKzM2MDAsOCBAQAogCQlwa3RfZGV2ID0gbmV4dF90b19ydW4odCk7CiAKIAkJaWYgKHVubGlrZWx5KCFwa3RfZGV2ICYmIHQtPmNvbnRyb2wgPT0gMCkpIHsKKwkJCWlmIChwa3RnZW5fZXhpdGluZykKKwkJCQlicmVhazsKIAkJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHQtPnF1ZXVlLAogCQkJCQkJCSB0LT5jb250cm9sICE9IDAsCiAJCQkJCQkJIEhaLzEwKTsKQEAgLTM2MzQsNiArMzY1NCwxMyBAQAogCXByX2RlYnVnKCIlcyByZW1vdmluZyB0aHJlYWRcbiIsIHQtPnRzay0+Y29tbSk7CiAJcGt0Z2VuX3JlbV90aHJlYWQodCk7CiAKKwkvKiBXYWl0IGZvciBrdGhyZWFkX3N0b3AgKi8KKwl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgeworCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCQlzY2hlZHVsZSgpOworCX0KKwlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzkwOCw2ICszOTM1LDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkICpxLCAqbjsKIAogCS8qIFN0b3AgYWxsIGludGVyZmFjZXMgJiB0aHJlYWRzICovCisJcGt0Z2VuX2V4aXRpbmcgPSB0cnVlOwogCiAJbGlzdF9mb3JfZWFjaF9zYWZlKHEsIG4sICZwa3RnZW5fdGhyZWFkcykgewogCQl0ID0gbGlzdF9lbnRyeShxLCBzdHJ1Y3QgcGt0Z2VuX3RocmVhZCwgdGhfbGlzdCk7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9yZXF1ZXN0X3NvY2suYyBiL25ldC9jb3JlL3JlcXVlc3Rfc29jay5jCmluZGV4IGZjZWViMzcuLjE4MjIzNmIgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3JlcXVlc3Rfc29jay5jCisrKyBiL25ldC9jb3JlL3JlcXVlc3Rfc29jay5jCkBAIC0zMyw2ICszMyw3IEBACiAgKiBOb3RlIDogRG9udCBmb3JnZXQgc29tYXhjb25uIHRoYXQgbWF5IGxpbWl0IGJhY2tsb2cgdG9vLgogICovCiBpbnQgc3lzY3RsX21heF9zeW5fYmFja2xvZyA9IDI1NjsKK0VYUE9SVF9TWU1CT0woc3lzY3RsX21heF9zeW5fYmFja2xvZyk7CiAKIGludCByZXFza19xdWV1ZV9hbGxvYyhzdHJ1Y3QgcmVxdWVzdF9zb2NrX3F1ZXVlICpxdWV1ZSwKIAkJICAgICAgdW5zaWduZWQgaW50IG5yX3RhYmxlX2VudHJpZXMpCmRpZmYgLS1naXQgYS9uZXQvY29yZS9ydG5ldGxpbmsuYyBiL25ldC9jb3JlL3J0bmV0bGluay5jCmluZGV4IDg0MWMyODcuLjc1MGRiNTcgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3J0bmV0bGluay5jCisrKyBiL25ldC9jb3JlL3J0bmV0bGluay5jCkBAIC0zNjIsNiArMzYyLDk1IEBACiAJcmV0dXJuIHNpemU7CiB9CiAKK3N0YXRpYyBMSVNUX0hFQUQocnRubF9hZl9vcHMpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0bmxfYWZfb3BzICpydG5sX2FmX2xvb2t1cChjb25zdCBpbnQgZmFtaWx5KQoreworCWNvbnN0IHN0cnVjdCBydG5sX2FmX29wcyAqb3BzOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShvcHMsICZydG5sX2FmX29wcywgbGlzdCkgeworCQlpZiAob3BzLT5mYW1pbHkgPT0gZmFtaWx5KQorCQkJcmV0dXJuIG9wczsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworLyoqCisgKiBfX3J0bmxfYWZfcmVnaXN0ZXIgLSBSZWdpc3RlciBydG5sX2FmX29wcyB3aXRoIHJ0bmV0bGluay4KKyAqIEBvcHM6IHN0cnVjdCBydG5sX2FmX29wcyAqIHRvIHJlZ2lzdGVyCisgKgorICogVGhlIGNhbGxlciBtdXN0IGhvbGQgdGhlIHJ0bmxfbXV0ZXguCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlLgorICovCitpbnQgX19ydG5sX2FmX3JlZ2lzdGVyKHN0cnVjdCBydG5sX2FmX29wcyAqb3BzKQoreworCWxpc3RfYWRkX3RhaWwoJm9wcy0+bGlzdCwgJnJ0bmxfYWZfb3BzKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKF9fcnRubF9hZl9yZWdpc3Rlcik7CisKKy8qKgorICogcnRubF9hZl9yZWdpc3RlciAtIFJlZ2lzdGVyIHJ0bmxfYWZfb3BzIHdpdGggcnRuZXRsaW5rLgorICogQG9wczogc3RydWN0IHJ0bmxfYWZfb3BzICogdG8gcmVnaXN0ZXIKKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuCisgKi8KK2ludCBydG5sX2FmX3JlZ2lzdGVyKHN0cnVjdCBydG5sX2FmX29wcyAqb3BzKQoreworCWludCBlcnI7CisKKwlydG5sX2xvY2soKTsKKwllcnIgPSBfX3J0bmxfYWZfcmVnaXN0ZXIob3BzKTsKKwlydG5sX3VubG9jaygpOworCXJldHVybiBlcnI7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChydG5sX2FmX3JlZ2lzdGVyKTsKKworLyoqCisgKiBfX3J0bmxfYWZfdW5yZWdpc3RlciAtIFVucmVnaXN0ZXIgcnRubF9hZl9vcHMgZnJvbSBydG5ldGxpbmsuCisgKiBAb3BzOiBzdHJ1Y3QgcnRubF9hZl9vcHMgKiB0byB1bnJlZ2lzdGVyCisgKgorICogVGhlIGNhbGxlciBtdXN0IGhvbGQgdGhlIHJ0bmxfbXV0ZXguCisgKi8KK3ZvaWQgX19ydG5sX2FmX3VucmVnaXN0ZXIoc3RydWN0IHJ0bmxfYWZfb3BzICpvcHMpCit7CisJbGlzdF9kZWwoJm9wcy0+bGlzdCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChfX3J0bmxfYWZfdW5yZWdpc3Rlcik7CisKKy8qKgorICogcnRubF9hZl91bnJlZ2lzdGVyIC0gVW5yZWdpc3RlciBydG5sX2FmX29wcyBmcm9tIHJ0bmV0bGluay4KKyAqIEBvcHM6IHN0cnVjdCBydG5sX2FmX29wcyAqIHRvIHVucmVnaXN0ZXIKKyAqLwordm9pZCBydG5sX2FmX3VucmVnaXN0ZXIoc3RydWN0IHJ0bmxfYWZfb3BzICpvcHMpCit7CisJcnRubF9sb2NrKCk7CisJX19ydG5sX2FmX3VucmVnaXN0ZXIob3BzKTsKKwlydG5sX3VubG9jaygpOworfQorRVhQT1JUX1NZTUJPTF9HUEwocnRubF9hZl91bnJlZ2lzdGVyKTsKKworc3RhdGljIHNpemVfdCBydG5sX2xpbmtfZ2V0X2FmX3NpemUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcnRubF9hZl9vcHMgKmFmX29wczsKKwlzaXplX3Qgc2l6ZTsKKworCS8qIElGTEFfQUZfU1BFQyAqLworCXNpemUgPSBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IG5sYXR0cikpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShhZl9vcHMsICZydG5sX2FmX29wcywgbGlzdCkgeworCQlpZiAoYWZfb3BzLT5nZXRfbGlua19hZl9zaXplKSB7CisJCQkvKiBBRl8qICsgbmVzdGVkIGRhdGEgKi8KKwkJCXNpemUgKz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBubGF0dHIpKSArCisJCQkJYWZfb3BzLT5nZXRfbGlua19hZl9zaXplKGRldik7CisJCX0KKwl9CisKKwlyZXR1cm4gc2l6ZTsKK30KKwogc3RhdGljIGludCBydG5sX2xpbmtfZmlsbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWNvbnN0IHN0cnVjdCBydG5sX2xpbmtfb3BzICpvcHMgPSBkZXYtPnJ0bmxfbGlua19vcHM7CkBAIC02NzEsNyArNzYwLDggQEAKIAkgICAgICAgKyBubGFfdG90YWxfc2l6ZSg0KSAvKiBJRkxBX05VTV9WRiAqLwogCSAgICAgICArIHJ0bmxfdmZpbmZvX3NpemUoZGV2KSAvKiBJRkxBX1ZGSU5GT19MSVNUICovCiAJICAgICAgICsgcnRubF9wb3J0X3NpemUoZGV2KSAvKiBJRkxBX1ZGX1BPUlRTICsgSUZMQV9QT1JUX1NFTEYgKi8KLQkgICAgICAgKyBydG5sX2xpbmtfZ2V0X3NpemUoZGV2KTsgLyogSUZMQV9MSU5LSU5GTyAqLworCSAgICAgICArIHJ0bmxfbGlua19nZXRfc2l6ZShkZXYpIC8qIElGTEFfTElOS0lORk8gKi8KKwkgICAgICAgKyBydG5sX2xpbmtfZ2V0X2FmX3NpemUoZGV2KTsgLyogSUZMQV9BRl9TUEVDICovCiB9CiAKIHN0YXRpYyBpbnQgcnRubF92Zl9wb3J0c19maWxsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC03NTcsNyArODQ3LDggQEAKIAlzdHJ1Y3Qgbmxtc2doZHIgKm5saDsKIAlzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgdGVtcDsKIAljb25zdCBzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKnN0YXRzOwotCXN0cnVjdCBubGF0dHIgKmF0dHI7CisJc3RydWN0IG5sYXR0ciAqYXR0ciwgKmFmX3NwZWM7CisJc3RydWN0IHJ0bmxfYWZfb3BzICphZl9vcHM7CiAKIAlubGggPSBubG1zZ19wdXQoc2tiLCBwaWQsIHNlcSwgdHlwZSwgc2l6ZW9mKCppZm0pLCBmbGFncyk7CiAJaWYgKG5saCA9PSBOVUxMKQpAQCAtODY2LDYgKzk1NywzNiBAQAogCQkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAJfQogCisJaWYgKCEoYWZfc3BlYyA9IG5sYV9uZXN0X3N0YXJ0KHNrYiwgSUZMQV9BRl9TUEVDKSkpCisJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShhZl9vcHMsICZydG5sX2FmX29wcywgbGlzdCkgeworCQlpZiAoYWZfb3BzLT5maWxsX2xpbmtfYWYpIHsKKwkJCXN0cnVjdCBubGF0dHIgKmFmOworCQkJaW50IGVycjsKKworCQkJaWYgKCEoYWYgPSBubGFfbmVzdF9zdGFydChza2IsIGFmX29wcy0+ZmFtaWx5KSkpCisJCQkJZ290byBubGFfcHV0X2ZhaWx1cmU7CisKKwkJCWVyciA9IGFmX29wcy0+ZmlsbF9saW5rX2FmKHNrYiwgZGV2KTsKKworCQkJLyoKKwkJCSAqIENhbGxlciBtYXkgcmV0dXJuIEVOT0RBVEEgdG8gaW5kaWNhdGUgdGhhdCB0aGVyZQorCQkJICogd2FzIG5vIGRhdGEgdG8gYmUgZHVtcGVkLiBUaGlzIGlzIG5vdCBhbiBlcnJvciwgaXQKKwkJCSAqIG1lYW5zIHdlIHNob3VsZCB0cmltIHRoZSBhdHRyaWJ1dGUgaGVhZGVyIGFuZAorCQkJICogY29udGludWUuCisJCQkgKi8KKwkJCWlmIChlcnIgPT0gLUVOT0RBVEEpCisJCQkJbmxhX25lc3RfY2FuY2VsKHNrYiwgYWYpOworCQkJZWxzZSBpZiAoZXJyIDwgMCkKKwkJCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKKworCQkJbmxhX25lc3RfZW5kKHNrYiwgYWYpOworCQl9CisJfQorCisJbmxhX25lc3RfZW5kKHNrYiwgYWZfc3BlYyk7CisKIAlyZXR1cm4gbmxtc2dfZW5kKHNrYiwgbmxoKTsKIAogbmxhX3B1dF9mYWlsdXJlOgpAQCAtOTI0LDYgKzEwNDUsNyBAQAogCVtJRkxBX1ZGSU5GT19MSVNUXQk9IHsuIHR5cGUgPSBOTEFfTkVTVEVEIH0sCiAJW0lGTEFfVkZfUE9SVFNdCQk9IHsgLnR5cGUgPSBOTEFfTkVTVEVEIH0sCiAJW0lGTEFfUE9SVF9TRUxGXQk9IHsgLnR5cGUgPSBOTEFfTkVTVEVEIH0sCisJW0lGTEFfQUZfU1BFQ10JCT0geyAudHlwZSA9IE5MQV9ORVNURUQgfSwKIH07CiBFWFBPUlRfU1lNQk9MKGlmbGFfcG9saWN5KTsKIApAQCAtOTg1LDYgKzExMDcsMjggQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCWlmICh0YltJRkxBX0FGX1NQRUNdKSB7CisJCXN0cnVjdCBubGF0dHIgKmFmOworCQlpbnQgcmVtLCBlcnI7CisKKwkJbmxhX2Zvcl9lYWNoX25lc3RlZChhZiwgdGJbSUZMQV9BRl9TUEVDXSwgcmVtKSB7CisJCQljb25zdCBzdHJ1Y3QgcnRubF9hZl9vcHMgKmFmX29wczsKKworCQkJaWYgKCEoYWZfb3BzID0gcnRubF9hZl9sb29rdXAobmxhX3R5cGUoYWYpKSkpCisJCQkJcmV0dXJuIC1FQUZOT1NVUFBPUlQ7CisKKwkJCWlmICghYWZfb3BzLT5zZXRfbGlua19hZikKKwkJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwkJCWlmIChhZl9vcHMtPnZhbGlkYXRlX2xpbmtfYWYpIHsKKwkJCQllcnIgPSBhZl9vcHMtPnZhbGlkYXRlX2xpbmtfYWYoZGV2LAorCQkJCQkJCXRiW0lGTEFfQUZfU1BFQ10pOworCQkJCWlmIChlcnIgPCAwKQorCQkJCQlyZXR1cm4gZXJyOworCQkJfQorCQl9CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEyMjUsNiArMTM2OSwyNCBAQAogCQkJZ290byBlcnJvdXQ7CiAJCW1vZGlmaWVkID0gMTsKIAl9CisKKwlpZiAodGJbSUZMQV9BRl9TUEVDXSkgeworCQlzdHJ1Y3QgbmxhdHRyICphZjsKKwkJaW50IHJlbTsKKworCQlubGFfZm9yX2VhY2hfbmVzdGVkKGFmLCB0YltJRkxBX0FGX1NQRUNdLCByZW0pIHsKKwkJCWNvbnN0IHN0cnVjdCBydG5sX2FmX29wcyAqYWZfb3BzOworCisJCQlpZiAoIShhZl9vcHMgPSBydG5sX2FmX2xvb2t1cChubGFfdHlwZShhZikpKSkKKwkJCQlCVUcoKTsKKworCQkJZXJyID0gYWZfb3BzLT5zZXRfbGlua19hZihkZXYsIGFmKTsKKwkJCWlmIChlcnIgPCAwKQorCQkJCWdvdG8gZXJyb3V0OworCisJCQltb2RpZmllZCA9IDE7CisJCX0KKwl9CiAJZXJyID0gMDsKIAogZXJyb3V0OgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2NtLmMgYi9uZXQvY29yZS9zY20uYwppbmRleCA0MTNjYWI4Li5iYmU0NTQ0IDEwMDY0NAotLS0gYS9uZXQvY29yZS9zY20uYworKysgYi9uZXQvY29yZS9zY20uYwpAQCAtNzksMTAgKzc5LDExIEBACiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJKmZwbHAgPSBmcGw7CiAJCWZwbC0+Y291bnQgPSAwOworCQlmcGwtPm1heCA9IFNDTV9NQVhfRkQ7CiAJfQogCWZwcCA9ICZmcGwtPmZwW2ZwbC0+Y291bnRdOwogCi0JaWYgKGZwbC0+Y291bnQgKyBudW0gPiBTQ01fTUFYX0ZEKQorCWlmIChmcGwtPmNvdW50ICsgbnVtID4gZnBsLT5tYXgpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyoKQEAgLTMzMSwxMSArMzMyLDEyIEBACiAJaWYgKCFmcGwpCiAJCXJldHVybiBOVUxMOwogCi0JbmV3X2ZwbCA9IGttYWxsb2Moc2l6ZW9mKCpmcGwpLCBHRlBfS0VSTkVMKTsKKwluZXdfZnBsID0ga21lbWR1cChmcGwsIG9mZnNldG9mKHN0cnVjdCBzY21fZnBfbGlzdCwgZnBbZnBsLT5jb3VudF0pLAorCQkJICBHRlBfS0VSTkVMKTsKIAlpZiAobmV3X2ZwbCkgewotCQlmb3IgKGk9ZnBsLT5jb3VudC0xOyBpPj0wOyBpLS0pCisJCWZvciAoaSA9IDA7IGkgPCBmcGwtPmNvdW50OyBpKyspCiAJCQlnZXRfZmlsZShmcGwtPmZwW2ldKTsKLQkJbWVtY3B5KG5ld19mcGwsIGZwbCwgc2l6ZW9mKCpmcGwpKTsKKwkJbmV3X2ZwbC0+bWF4ID0gbmV3X2ZwbC0+Y291bnQ7CiAJfQogCXJldHVybiBuZXdfZnBsOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2tidWZmLmMgYi9uZXQvY29yZS9za2J1ZmYuYwppbmRleCAxMDRmODQ0Li4xOWQ2YzIxIDEwMDY0NAotLS0gYS9uZXQvY29yZS9za2J1ZmYuYworKysgYi9uZXQvY29yZS9za2J1ZmYuYwpAQCAtNzc4LDYgKzc3OCwyOCBAQAogCiAJc2l6ZSA9IFNLQl9EQVRBX0FMSUdOKHNpemUpOwogCisJLyogQ2hlY2sgaWYgd2UgY2FuIGF2b2lkIHRha2luZyByZWZlcmVuY2VzIG9uIGZyYWdtZW50cyBpZiB3ZSBvd24KKwkgKiB0aGUgbGFzdCByZWZlcmVuY2Ugb24gc2tiLT5oZWFkLiAoc2VlIHNrYl9yZWxlYXNlX2RhdGEoKSkKKwkgKi8KKwlpZiAoIXNrYi0+Y2xvbmVkKQorCQlmYXN0cGF0aCA9IHRydWU7CisJZWxzZSB7CisJCWludCBkZWx0YSA9IHNrYi0+bm9oZHIgPyAoMSA8PCBTS0JfREFUQVJFRl9TSElGVCkgKyAxIDogMTsKKworCQlmYXN0cGF0aCA9IGF0b21pY19yZWFkKCZza2Jfc2hpbmZvKHNrYiktPmRhdGFyZWYpID09IGRlbHRhOworCX0KKworCWlmIChmYXN0cGF0aCAmJgorCSAgICBzaXplICsgc2l6ZW9mKHN0cnVjdCBza2Jfc2hhcmVkX2luZm8pIDw9IGtzaXplKHNrYi0+aGVhZCkpIHsKKwkJbWVtbW92ZShza2ItPmhlYWQgKyBzaXplLCBza2Jfc2hpbmZvKHNrYiksCisJCQlvZmZzZXRvZihzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvLAorCQkJCSBmcmFnc1tza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzXSkpOworCQltZW1tb3ZlKHNrYi0+aGVhZCArIG5oZWFkLCBza2ItPmhlYWQsCisJCQlza2JfdGFpbF9wb2ludGVyKHNrYikgLSBza2ItPmhlYWQpOworCQlvZmYgPSBuaGVhZDsKKwkJZ290byBhZGp1c3Rfb3RoZXJzOworCX0KKwogCWRhdGEgPSBrbWFsbG9jKHNpemUgKyBzaXplb2Yoc3RydWN0IHNrYl9zaGFyZWRfaW5mbyksIGdmcF9tYXNrKTsKIAlpZiAoIWRhdGEpCiAJCWdvdG8gbm9kYXRhOwpAQCAtNzkxLDE3ICs4MTMsNiBAQAogCSAgICAgICBza2Jfc2hpbmZvKHNrYiksCiAJICAgICAgIG9mZnNldG9mKHN0cnVjdCBza2Jfc2hhcmVkX2luZm8sIGZyYWdzW3NrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3NdKSk7CiAKLQkvKiBDaGVjayBpZiB3ZSBjYW4gYXZvaWQgdGFraW5nIHJlZmVyZW5jZXMgb24gZnJhZ21lbnRzIGlmIHdlIG93bgotCSAqIHRoZSBsYXN0IHJlZmVyZW5jZSBvbiBza2ItPmhlYWQuIChzZWUgc2tiX3JlbGVhc2VfZGF0YSgpKQotCSAqLwotCWlmICghc2tiLT5jbG9uZWQpCi0JCWZhc3RwYXRoID0gdHJ1ZTsKLQllbHNlIHsKLQkJaW50IGRlbHRhID0gc2tiLT5ub2hkciA/ICgxIDw8IFNLQl9EQVRBUkVGX1NISUZUKSArIDEgOiAxOwotCi0JCWZhc3RwYXRoID0gYXRvbWljX3JlYWQoJnNrYl9zaGluZm8oc2tiKS0+ZGF0YXJlZikgPT0gZGVsdGE7Ci0JfQotCiAJaWYgKGZhc3RwYXRoKSB7CiAJCWtmcmVlKHNrYi0+aGVhZCk7CiAJfSBlbHNlIHsKQEAgLTgxNiw2ICs4MjcsNyBAQAogCW9mZiA9IChkYXRhICsgbmhlYWQpIC0gc2tiLT5oZWFkOwogCiAJc2tiLT5oZWFkICAgICA9IGRhdGE7CithZGp1c3Rfb3RoZXJzOgogCXNrYi0+ZGF0YSAgICArPSBvZmY7CiAjaWZkZWYgTkVUX1NLQlVGRl9EQVRBX1VTRVNfT0ZGU0VUCiAJc2tiLT5lbmQgICAgICA9IHNpemU7CkBAIC0xODEyLDcgKzE4MjQsNyBAQAogCWxvbmcgY3NzdGFydDsKIAogCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKQotCQljc3N0YXJ0ID0gc2tiLT5jc3VtX3N0YXJ0IC0gc2tiX2hlYWRyb29tKHNrYik7CisJCWNzc3RhcnQgPSBza2JfY2hlY2tzdW1fc3RhcnRfb2Zmc2V0KHNrYik7CiAJZWxzZQogCQljc3N0YXJ0ID0gc2tiX2hlYWRsZW4oc2tiKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc29jay5jIGIvbmV0L2NvcmUvc29jay5jCmluZGV4IGU1YWY4ZDUuLmE2NThhZWIgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3NvY2suYworKysgYi9uZXQvY29yZS9zb2NrLmMKQEAgLTk5MiwxNyArOTkyLDE4IEBACiAvKgogICogQ29weSBhbGwgZmllbGRzIGZyb20gb3NrIHRvIG5zayBidXQgbnNrLT5za19yZWZjbnQgbXVzdCBub3QgY2hhbmdlIHlldCwKICAqIGV2ZW4gdGVtcG9yYXJseSwgYmVjYXVzZSBvZiBSQ1UgbG9va3Vwcy4gc2tfbm9kZSBzaG91bGQgYWxzbyBiZSBsZWZ0IGFzIGlzLgorICogV2UgbXVzdCBub3QgY29weSBmaWVsZHMgYmV0d2VlbiBza19kb250Y29weV9iZWdpbiBhbmQgc2tfZG9udGNvcHlfZW5kCiAgKi8KIHN0YXRpYyB2b2lkIHNvY2tfY29weShzdHJ1Y3Qgc29jayAqbnNrLCBjb25zdCBzdHJ1Y3Qgc29jayAqb3NrKQogewogI2lmZGVmIENPTkZJR19TRUNVUklUWV9ORVRXT1JLCiAJdm9pZCAqc3B0ciA9IG5zay0+c2tfc2VjdXJpdHk7CiAjZW5kaWYKLQlCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IHNvY2ssIHNrX2NvcHlfc3RhcnQpICE9Ci0JCSAgICAgc2l6ZW9mKG9zay0+c2tfbm9kZSkgKyBzaXplb2Yob3NrLT5za19yZWZjbnQpICsKLQkJICAgICBzaXplb2Yob3NrLT5za190eF9xdWV1ZV9tYXBwaW5nKSk7Ci0JbWVtY3B5KCZuc2stPnNrX2NvcHlfc3RhcnQsICZvc2stPnNrX2NvcHlfc3RhcnQsCi0JICAgICAgIG9zay0+c2tfcHJvdC0+b2JqX3NpemUgLSBvZmZzZXRvZihzdHJ1Y3Qgc29jaywgc2tfY29weV9zdGFydCkpOworCW1lbWNweShuc2ssIG9zaywgb2Zmc2V0b2Yoc3RydWN0IHNvY2ssIHNrX2RvbnRjb3B5X2JlZ2luKSk7CisKKwltZW1jcHkoJm5zay0+c2tfZG9udGNvcHlfZW5kLCAmb3NrLT5za19kb250Y29weV9lbmQsCisJICAgICAgIG9zay0+c2tfcHJvdC0+b2JqX3NpemUgLSBvZmZzZXRvZihzdHJ1Y3Qgc29jaywgc2tfZG9udGNvcHlfZW5kKSk7CisKICNpZmRlZiBDT05GSUdfU0VDVVJJVFlfTkVUV09SSwogCW5zay0+c2tfc2VjdXJpdHkgPSBzcHRyOwogCXNlY3VyaXR5X3NrX2Nsb25lKG9zaywgbnNrKTsKQEAgLTE5MDcsNyArMTkwOCw3IEBACiAJcmN1X3JlYWRfbG9jaygpOwogCXdxID0gcmN1X2RlcmVmZXJlbmNlKHNrLT5za193cSk7CiAJaWYgKHdxX2hhc19zbGVlcGVyKHdxKSkKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlX3N5bmNfcG9sbCgmd3EtPndhaXQsIFBPTExJTiB8CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZV9zeW5jX3BvbGwoJndxLT53YWl0LCBQT0xMSU4gfCBQT0xMUFJJIHwKIAkJCQkJCVBPTExSRE5PUk0gfCBQT0xMUkRCQU5EKTsKIAlza193YWtlX2FzeW5jKHNrLCBTT0NLX1dBS0VfV0FJVEQsIFBPTExfSU4pOwogCXJjdV9yZWFkX3VubG9jaygpOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvdGltZXN0YW1waW5nLmMgYi9uZXQvY29yZS90aW1lc3RhbXBpbmcuYwppbmRleCBjMTliYjRlLi43ZTdjYTM3IDEwMDY0NAotLS0gYS9uZXQvY29yZS90aW1lc3RhbXBpbmcuYworKysgYi9uZXQvY29yZS90aW1lc3RhbXBpbmcuYwpAQCAtMjYsMTIgKzI2LDEyIEBACiAJUFRQX0ZJTFRFUgogfTsKIAotc3RhdGljIHVuc2lnbmVkIGludCBjbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIHVuc2lnbmVkIGludCBjbGFzc2lmeShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCWlmIChsaWtlbHkoc2tiLT5kZXYgJiYKIAkJICAgc2tiLT5kZXYtPnBoeWRldiAmJgogCQkgICBza2ItPmRldi0+cGh5ZGV2LT5kcnYpKQotCQlyZXR1cm4gc2tfcnVuX2ZpbHRlcihza2IsIHB0cF9maWx0ZXIsIEFSUkFZX1NJWkUocHRwX2ZpbHRlcikpOworCQlyZXR1cm4gc2tfcnVuX2ZpbHRlcihza2IsIHB0cF9maWx0ZXIpOwogCWVsc2UKIAkJcmV0dXJuIFBUUF9DTEFTU19OT05FOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2RjYi9NYWtlZmlsZSBiL25ldC9kY2IvTWFrZWZpbGUKaW5kZXggOTkzMGY0Yy4uYzEyODJjOSAxMDA2NDQKLS0tIGEvbmV0L2RjYi9NYWtlZmlsZQorKysgYi9uZXQvZGNiL01ha2VmaWxlCkBAIC0xICsxIEBACi1vYmotJChDT05GSUdfRENCKSArPSBkY2JubC5vCitvYmotJChDT05GSUdfRENCKSArPSBkY2JubC5vIGRjYmV2ZW50Lm8KZGlmZiAtLWdpdCBhL25ldC9kY2IvZGNiZXZlbnQuYyBiL25ldC9kY2IvZGNiZXZlbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjVhODgwCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L2RjYi9kY2JldmVudC5jCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEludGVsIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlCisgKiBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQS4KKyAqCisgKiBBdXRob3I6IEpvaG4gRmFzdGFiZW5kIDxqb2huLnIuZmFzdGFiZW5kQGludGVsLmNvbT4KKyAqLworCisjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CisjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KKworc3RhdGljIEFUT01JQ19OT1RJRklFUl9IRUFEKGRjYmV2ZW50X25vdGlmX2NoYWluKTsKKworaW50IHJlZ2lzdGVyX2RjYmV2ZW50X25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCit7CisJcmV0dXJuIGF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmZGNiZXZlbnRfbm90aWZfY2hhaW4sIG5iKTsKK30KK0VYUE9SVF9TWU1CT0wocmVnaXN0ZXJfZGNiZXZlbnRfbm90aWZpZXIpOworCitpbnQgdW5yZWdpc3Rlcl9kY2JldmVudF9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKQoreworCXJldHVybiBhdG9taWNfbm90aWZpZXJfY2hhaW5fdW5yZWdpc3RlcigmZGNiZXZlbnRfbm90aWZfY2hhaW4sIG5iKTsKK30KK0VYUE9SVF9TWU1CT0wodW5yZWdpc3Rlcl9kY2JldmVudF9ub3RpZmllcik7CisKK2ludCBjYWxsX2RjYmV2ZW50X25vdGlmaWVycyh1bnNpZ25lZCBsb25nIHZhbCwgdm9pZCAqdikKK3sKKwlyZXR1cm4gYXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4oJmRjYmV2ZW50X25vdGlmX2NoYWluLCB2YWwsIHYpOworfQpkaWZmIC0tZ2l0IGEvbmV0L2RjYi9kY2JubC5jIGIvbmV0L2RjYi9kY2JubC5jCmluZGV4IDE5YWMyYjkuLmQ5MDBhYjkgMTAwNjQ0Ci0tLSBhL25ldC9kY2IvZGNibmwuYworKysgYi9uZXQvZGNiL2RjYm5sLmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlIDxuZXQvbmV0bGluay5oPgogI2luY2x1ZGUgPG5ldC9ydG5ldGxpbmsuaD4KICNpbmNsdWRlIDxsaW51eC9kY2JubC5oPgorI2luY2x1ZGUgPG5ldC9kY2JldmVudC5oPgogI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CiAKQEAgLTY2LDYgKzY3LDkgQEAKIAlbRENCX0FUVFJfUEZDX1NUQVRFXSAgID0gey50eXBlID0gTkxBX1U4fSwKIAlbRENCX0FUVFJfQkNOXSAgICAgICAgID0gey50eXBlID0gTkxBX05FU1RFRH0sCiAJW0RDQl9BVFRSX0FQUF0gICAgICAgICA9IHsudHlwZSA9IE5MQV9ORVNURUR9LAorCVtEQ0JfQVRUUl9JRUVFXQkgICAgICAgPSB7LnR5cGUgPSBOTEFfTkVTVEVEfSwKKwlbRENCX0FUVFJfRENCWF0gICAgICAgID0gey50eXBlID0gTkxBX1U4fSwKKwlbRENCX0FUVFJfRkVBVENGR10gICAgID0gey50eXBlID0gTkxBX05FU1RFRH0sCiB9OwogCiAvKiBEQ0IgcHJpb3JpdHkgZmxvdyBjb250cm9sIHRvIFVzZXIgUHJpb3JpdHkgbmVzdGVkIGF0dHJpYnV0ZXMgKi8KQEAgLTEyMiw2ICsxMjYsNyBAQAogCVtEQ0JfQ0FQX0FUVFJfUEZDX1RDU10gPSB7LnR5cGUgPSBOTEFfVTh9LAogCVtEQ0JfQ0FQX0FUVFJfR1NQXSAgICAgPSB7LnR5cGUgPSBOTEFfVTh9LAogCVtEQ0JfQ0FQX0FUVFJfQkNOXSAgICAgPSB7LnR5cGUgPSBOTEFfVTh9LAorCVtEQ0JfQ0FQX0FUVFJfRENCWF0gICAgPSB7LnR5cGUgPSBOTEFfVTh9LAogfTsKIAogLyogRENCIGNhcGFiaWxpdGllcyBuZXN0ZWQgYXR0cmlidXRlcy4gKi8KQEAgLTE2Nyw2ICsxNzIsMjggQEAKIAlbRENCX0FQUF9BVFRSX1BSSU9SSVRZXSAgICAgPSB7LnR5cGUgPSBOTEFfVTh9LAogfTsKIAorLyogSUVFRSA4MDIuMVFheiBuZXN0ZWQgYXR0cmlidXRlcy4gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBkY2JubF9pZWVlX3BvbGljeVtEQ0JfQVRUUl9JRUVFX01BWCArIDFdID0geworCVtEQ0JfQVRUUl9JRUVFX0VUU10JICAgID0gey5sZW4gPSBzaXplb2Yoc3RydWN0IGllZWVfZXRzKX0sCisJW0RDQl9BVFRSX0lFRUVfUEZDXQkgICAgPSB7LmxlbiA9IHNpemVvZihzdHJ1Y3QgaWVlZV9wZmMpfSwKKwlbRENCX0FUVFJfSUVFRV9BUFBfVEFCTEVdICAgPSB7LnR5cGUgPSBOTEFfTkVTVEVEfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBkY2JubF9pZWVlX2FwcFtEQ0JfQVRUUl9JRUVFX0FQUF9NQVggKyAxXSA9IHsKKwlbRENCX0FUVFJfSUVFRV9BUFBdCSAgICA9IHsubGVuID0gc2l6ZW9mKHN0cnVjdCBkY2JfYXBwKX0sCit9OworCisvKiBEQ0IgbnVtYmVyIG9mIHRyYWZmaWMgY2xhc3NlcyBuZXN0ZWQgYXR0cmlidXRlcy4gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBkY2JubF9mZWF0Y2ZnX25lc3RbRENCX0ZFQVRDRkdfQVRUUl9NQVggKyAxXSA9IHsKKwlbRENCX0ZFQVRDRkdfQVRUUl9BTExdICAgICAgPSB7LnR5cGUgPSBOTEFfRkxBR30sCisJW0RDQl9GRUFUQ0ZHX0FUVFJfUEddICAgICAgID0gey50eXBlID0gTkxBX1U4fSwKKwlbRENCX0ZFQVRDRkdfQVRUUl9QRkNdICAgICAgPSB7LnR5cGUgPSBOTEFfVTh9LAorCVtEQ0JfRkVBVENGR19BVFRSX0FQUF0gICAgICA9IHsudHlwZSA9IE5MQV9VOH0sCit9OworCitzdGF0aWMgTElTVF9IRUFEKGRjYl9hcHBfbGlzdCk7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGRjYl9sb2NrKTsKKwogLyogc3RhbmRhcmQgbmV0bGluayByZXBseSBjYWxsICovCiBzdGF0aWMgaW50IGRjYm5sX3JlcGx5KHU4IHZhbHVlLCB1OCBldmVudCwgdTggY21kLCB1OCBhdHRyLCB1MzIgcGlkLAogICAgICAgICAgICAgICAgICAgICAgICB1MzIgc2VxLCB1MTYgZmxhZ3MpCkBAIC02MjIsMTIgKzY0OSwxMiBAQAogc3RhdGljIGludCBkY2JubF9zZXRhcHAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IG5sYXR0ciAqKnRiLAogICAgICAgICAgICAgICAgICAgICAgICAgdTMyIHBpZCwgdTMyIHNlcSwgdTE2IGZsYWdzKQogewotCWludCByZXQgPSAtRUlOVkFMOworCWludCBlcnIsIHJldCA9IC1FSU5WQUw7CiAJdTE2IGlkOwogCXU4IHVwLCBpZHR5cGU7CiAJc3RydWN0IG5sYXR0ciAqYXBwX3RiW0RDQl9BUFBfQVRUUl9NQVggKyAxXTsKIAotCWlmICghdGJbRENCX0FUVFJfQVBQXSB8fCAhbmV0ZGV2LT5kY2JubF9vcHMtPnNldGFwcCkKKwlpZiAoIXRiW0RDQl9BVFRSX0FQUF0pCiAJCWdvdG8gb3V0OwogCiAJcmV0ID0gbmxhX3BhcnNlX25lc3RlZChhcHBfdGIsIERDQl9BUFBfQVRUUl9NQVgsIHRiW0RDQl9BVFRSX0FQUF0sCkBAIC02NTEsOSArNjc4LDE4IEBACiAJaWQgPSBubGFfZ2V0X3UxNihhcHBfdGJbRENCX0FQUF9BVFRSX0lEXSk7CiAJdXAgPSBubGFfZ2V0X3U4KGFwcF90YltEQ0JfQVBQX0FUVFJfUFJJT1JJVFldKTsKIAotCXJldCA9IGRjYm5sX3JlcGx5KG5ldGRldi0+ZGNibmxfb3BzLT5zZXRhcHAobmV0ZGV2LCBpZHR5cGUsIGlkLCB1cCksCi0JICAgICAgICAgICAgICAgICAgUlRNX1NFVERDQiwgRENCX0NNRF9TQVBQLCBEQ0JfQVRUUl9BUFAsCi0JICAgICAgICAgICAgICAgICAgcGlkLCBzZXEsIGZsYWdzKTsKKwlpZiAobmV0ZGV2LT5kY2JubF9vcHMtPnNldGFwcCkgeworCQllcnIgPSBuZXRkZXYtPmRjYm5sX29wcy0+c2V0YXBwKG5ldGRldiwgaWR0eXBlLCBpZCwgdXApOworCX0gZWxzZSB7CisJCXN0cnVjdCBkY2JfYXBwIGFwcDsKKwkJYXBwLnNlbGVjdG9yID0gaWR0eXBlOworCQlhcHAucHJvdG9jb2wgPSBpZDsKKwkJYXBwLnByaW9yaXR5ID0gdXA7CisJCWVyciA9IGRjYl9zZXRhcHAobmV0ZGV2LCAmYXBwKTsKKwl9CisKKwlyZXQgPSBkY2JubF9yZXBseShlcnIsIFJUTV9TRVREQ0IsIERDQl9DTURfU0FQUCwgRENCX0FUVFJfQVBQLAorCQkJICBwaWQsIHNlcSwgZmxhZ3MpOwogb3V0OgogCXJldHVybiByZXQ7CiB9CkBAIC0xMTE4LDYgKzExNTQsMjgxIEBACiAJcmV0dXJuIHJldDsKIH0KIAorLyogSGFuZGxlIElFRUUgODAyLjFRYXogU0VUIGNvbW1hbmRzLiBJZiBhbnkgcmVxdWVzdGVkIG9wZXJhdGlvbiBjYW4gbm90CisgKiBiZSBjb21wbGV0ZWQgdGhlIGVudGlyZSBtc2cgaXMgYWJvcnRlZCBhbmQgZXJyb3IgdmFsdWUgaXMgcmV0dXJuZWQuCisgKiBObyBhdHRlbXB0IGlzIG1hZGUgdG8gcmVjb25jaWxlIHRoZSBjYXNlIHdoZXJlIG9ubHkgcGFydCBvZiB0aGUKKyAqIGNtZCBjYW4gYmUgY29tcGxldGVkLgorICovCitzdGF0aWMgaW50IGRjYm5sX2llZWVfc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBubGF0dHIgKip0YiwKKwkJCSAgdTMyIHBpZCwgdTMyIHNlcSwgdTE2IGZsYWdzKQoreworCWNvbnN0IHN0cnVjdCBkY2JubF9ydG5sX29wcyAqb3BzID0gbmV0ZGV2LT5kY2JubF9vcHM7CisJc3RydWN0IG5sYXR0ciAqaWVlZVtEQ0JfQVRUUl9JRUVFX01BWCArIDFdOworCWludCBlcnIgPSAtRU9QTk9UU1VQUDsKKworCWlmICghb3BzKQorCQlnb3RvIGVycjsKKworCWVyciA9IG5sYV9wYXJzZV9uZXN0ZWQoaWVlZSwgRENCX0FUVFJfSUVFRV9NQVgsCisJCQkgICAgICAgdGJbRENCX0FUVFJfSUVFRV0sIGRjYm5sX2llZWVfcG9saWN5KTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycjsKKworCWlmIChpZWVlW0RDQl9BVFRSX0lFRUVfRVRTXSAmJiBvcHMtPmllZWVfc2V0ZXRzKSB7CisJCXN0cnVjdCBpZWVlX2V0cyAqZXRzID0gbmxhX2RhdGEoaWVlZVtEQ0JfQVRUUl9JRUVFX0VUU10pOworCQllcnIgPSBvcHMtPmllZWVfc2V0ZXRzKG5ldGRldiwgZXRzKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyOworCX0KKworCWlmIChpZWVlW0RDQl9BVFRSX0lFRUVfUEZDXSAmJiBvcHMtPmllZWVfc2V0ZXRzKSB7CisJCXN0cnVjdCBpZWVlX3BmYyAqcGZjID0gbmxhX2RhdGEoaWVlZVtEQ0JfQVRUUl9JRUVFX1BGQ10pOworCQllcnIgPSBvcHMtPmllZWVfc2V0cGZjKG5ldGRldiwgcGZjKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyOworCX0KKworCWlmIChpZWVlW0RDQl9BVFRSX0lFRUVfQVBQX1RBQkxFXSkgeworCQlzdHJ1Y3QgbmxhdHRyICphdHRyOworCQlpbnQgcmVtOworCisJCW5sYV9mb3JfZWFjaF9uZXN0ZWQoYXR0ciwgaWVlZVtEQ0JfQVRUUl9JRUVFX0FQUF9UQUJMRV0sIHJlbSkgeworCQkJc3RydWN0IGRjYl9hcHAgKmFwcF9kYXRhOworCQkJaWYgKG5sYV90eXBlKGF0dHIpICE9IERDQl9BVFRSX0lFRUVfQVBQKQorCQkJCWNvbnRpbnVlOworCQkJYXBwX2RhdGEgPSBubGFfZGF0YShhdHRyKTsKKwkJCWlmIChvcHMtPmllZWVfc2V0YXBwKQorCQkJCWVyciA9IG9wcy0+aWVlZV9zZXRhcHAobmV0ZGV2LCBhcHBfZGF0YSk7CisJCQllbHNlCisJCQkJZXJyID0gZGNiX3NldGFwcChuZXRkZXYsIGFwcF9kYXRhKTsKKwkJCWlmIChlcnIpCisJCQkJZ290byBlcnI7CisJCX0KKwl9CisKK2VycjoKKwlkY2JubF9yZXBseShlcnIsIFJUTV9TRVREQ0IsIERDQl9DTURfSUVFRV9TRVQsIERDQl9BVFRSX0lFRUUsCisJCSAgICBwaWQsIHNlcSwgZmxhZ3MpOworCXJldHVybiBlcnI7Cit9CisKKworLyogSGFuZGxlIElFRUUgODAyLjFRYXogR0VUIGNvbW1hbmRzLiAqLworc3RhdGljIGludCBkY2JubF9pZWVlX2dldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgbmxhdHRyICoqdGIsCisJCQkgIHUzMiBwaWQsIHUzMiBzZXEsIHUxNiBmbGFncykKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBubG1zZ2hkciAqbmxoOworCXN0cnVjdCBkY2Jtc2cgKmRjYjsKKwlzdHJ1Y3QgbmxhdHRyICppZWVlLCAqYXBwOworCXN0cnVjdCBkY2JfYXBwX3R5cGUgKml0cjsKKwljb25zdCBzdHJ1Y3QgZGNibmxfcnRubF9vcHMgKm9wcyA9IG5ldGRldi0+ZGNibmxfb3BzOworCWludCBlcnI7CisKKwlpZiAoIW9wcykKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJc2tiID0gbmxtc2dfbmV3KE5MTVNHX0RFRkFVTFRfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFza2IpCisJCXJldHVybiAtRU5PQlVGUzsKKworCW5saCA9IE5MTVNHX05FVyhza2IsIHBpZCwgc2VxLCBSVE1fR0VURENCLCBzaXplb2YoKmRjYiksIGZsYWdzKTsKKworCWRjYiA9IE5MTVNHX0RBVEEobmxoKTsKKwlkY2ItPmRjYl9mYW1pbHkgPSBBRl9VTlNQRUM7CisJZGNiLT5jbWQgPSBEQ0JfQ01EX0lFRUVfR0VUOworCisJTkxBX1BVVF9TVFJJTkcoc2tiLCBEQ0JfQVRUUl9JRk5BTUUsIG5ldGRldi0+bmFtZSk7CisKKwlpZWVlID0gbmxhX25lc3Rfc3RhcnQoc2tiLCBEQ0JfQVRUUl9JRUVFKTsKKwlpZiAoIWllZWUpCisJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOworCisJaWYgKG9wcy0+aWVlZV9nZXRldHMpIHsKKwkJc3RydWN0IGllZWVfZXRzIGV0czsKKwkJZXJyID0gb3BzLT5pZWVlX2dldGV0cyhuZXRkZXYsICZldHMpOworCQlpZiAoIWVycikKKwkJCU5MQV9QVVQoc2tiLCBEQ0JfQVRUUl9JRUVFX0VUUywgc2l6ZW9mKGV0cyksICZldHMpOworCX0KKworCWlmIChvcHMtPmllZWVfZ2V0cGZjKSB7CisJCXN0cnVjdCBpZWVlX3BmYyBwZmM7CisJCWVyciA9IG9wcy0+aWVlZV9nZXRwZmMobmV0ZGV2LCAmcGZjKTsKKwkJaWYgKCFlcnIpCisJCQlOTEFfUFVUKHNrYiwgRENCX0FUVFJfSUVFRV9QRkMsIHNpemVvZihwZmMpLCAmcGZjKTsKKwl9CisKKwlhcHAgPSBubGFfbmVzdF9zdGFydChza2IsIERDQl9BVFRSX0lFRUVfQVBQX1RBQkxFKTsKKwlpZiAoIWFwcCkKKwkJZ290byBubGFfcHV0X2ZhaWx1cmU7CisKKwlzcGluX2xvY2soJmRjYl9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGl0ciwgJmRjYl9hcHBfbGlzdCwgbGlzdCkgeworCQlpZiAoc3RybmNtcChpdHItPm5hbWUsIG5ldGRldi0+bmFtZSwgSUZOQU1TSVopID09IDApIHsKKwkJCWVyciA9IG5sYV9wdXQoc2tiLCBEQ0JfQVRUUl9JRUVFX0FQUCwgc2l6ZW9mKGl0ci0+YXBwKSwKKwkJCQkJICZpdHItPmFwcCk7CisJCQlpZiAoZXJyKSB7CisJCQkJc3Bpbl91bmxvY2soJmRjYl9sb2NrKTsKKwkJCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKKwkJCX0KKwkJfQorCX0KKwlzcGluX3VubG9jaygmZGNiX2xvY2spOworCW5sYV9uZXN0X2VuZChza2IsIGFwcCk7CisKKwlubGFfbmVzdF9lbmQoc2tiLCBpZWVlKTsKKwlubG1zZ19lbmQoc2tiLCBubGgpOworCisJcmV0dXJuIHJ0bmxfdW5pY2FzdChza2IsICZpbml0X25ldCwgcGlkKTsKK25sYV9wdXRfZmFpbHVyZToKKwlubG1zZ19jYW5jZWwoc2tiLCBubGgpOworbmxtc2dfZmFpbHVyZToKKwlrZnJlZV9za2Ioc2tiKTsKKwlyZXR1cm4gLTE7Cit9CisKKy8qIERDQlggY29uZmlndXJhdGlvbiAqLworc3RhdGljIGludCBkY2JubF9nZXRkY2J4KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBubGF0dHIgKip0YiwKKwkJCSB1MzIgcGlkLCB1MzIgc2VxLCB1MTYgZmxhZ3MpCit7CisJaW50IHJldDsKKworCWlmICghbmV0ZGV2LT5kY2JubF9vcHMtPmdldGRjYngpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCXJldCA9IGRjYm5sX3JlcGx5KG5ldGRldi0+ZGNibmxfb3BzLT5nZXRkY2J4KG5ldGRldiksIFJUTV9HRVREQ0IsCisJCQkgIERDQl9DTURfR0RDQlgsIERDQl9BVFRSX0RDQlgsIHBpZCwgc2VxLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGRjYm5sX3NldGRjYngoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IG5sYXR0ciAqKnRiLAorCQkJIHUzMiBwaWQsIHUzMiBzZXEsIHUxNiBmbGFncykKK3sKKwlpbnQgcmV0OworCXU4IHZhbHVlOworCisJaWYgKCFuZXRkZXYtPmRjYm5sX29wcy0+c2V0ZGNieCkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJaWYgKCF0YltEQ0JfQVRUUl9EQ0JYXSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl2YWx1ZSA9IG5sYV9nZXRfdTgodGJbRENCX0FUVFJfRENCWF0pOworCisJcmV0ID0gZGNibmxfcmVwbHkobmV0ZGV2LT5kY2JubF9vcHMtPnNldGRjYngobmV0ZGV2LCB2YWx1ZSksCisJCQkgIFJUTV9TRVREQ0IsIERDQl9DTURfU0RDQlgsIERDQl9BVFRSX0RDQlgsCisJCQkgIHBpZCwgc2VxLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGRjYm5sX2dldGZlYXRjZmcoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IG5sYXR0ciAqKnRiLAorCQkJICAgIHUzMiBwaWQsIHUzMiBzZXEsIHUxNiBmbGFncykKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqZGNibmxfc2tiOworCXN0cnVjdCBubG1zZ2hkciAqbmxoOworCXN0cnVjdCBkY2Jtc2cgKmRjYjsKKwlzdHJ1Y3QgbmxhdHRyICpkYXRhW0RDQl9GRUFUQ0ZHX0FUVFJfTUFYICsgMV0sICpuZXN0OworCXU4IHZhbHVlOworCWludCByZXQsIGk7CisJaW50IGdldGFsbCA9IDA7CisKKwlpZiAoIW5ldGRldi0+ZGNibmxfb3BzLT5nZXRmZWF0Y2ZnKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlpZiAoIXRiW0RDQl9BVFRSX0ZFQVRDRkddKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldCA9IG5sYV9wYXJzZV9uZXN0ZWQoZGF0YSwgRENCX0ZFQVRDRkdfQVRUUl9NQVgsIHRiW0RDQl9BVFRSX0ZFQVRDRkddLAorCQkJICAgICAgIGRjYm5sX2ZlYXRjZmdfbmVzdCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfb3V0OworCisJZGNibmxfc2tiID0gbmxtc2dfbmV3KE5MTVNHX0RFRkFVTFRfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkY2JubF9za2IpIHsKKwkJcmV0ID0gLUVOT0JVRlM7CisJCWdvdG8gZXJyX291dDsKKwl9CisKKwlubGggPSBOTE1TR19ORVcoZGNibmxfc2tiLCBwaWQsIHNlcSwgUlRNX0dFVERDQiwgc2l6ZW9mKCpkY2IpLCBmbGFncyk7CisKKwlkY2IgPSBOTE1TR19EQVRBKG5saCk7CisJZGNiLT5kY2JfZmFtaWx5ID0gQUZfVU5TUEVDOworCWRjYi0+Y21kID0gRENCX0NNRF9HRkVBVENGRzsKKworCW5lc3QgPSBubGFfbmVzdF9zdGFydChkY2JubF9za2IsIERDQl9BVFRSX0ZFQVRDRkcpOworCWlmICghbmVzdCkgeworCQlyZXQgPSAtRU1TR1NJWkU7CisJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOworCX0KKworCWlmIChkYXRhW0RDQl9GRUFUQ0ZHX0FUVFJfQUxMXSkKKwkJZ2V0YWxsID0gMTsKKworCWZvciAoaSA9IERDQl9GRUFUQ0ZHX0FUVFJfQUxMKzE7IGkgPD0gRENCX0ZFQVRDRkdfQVRUUl9NQVg7IGkrKykgeworCQlpZiAoIWdldGFsbCAmJiAhZGF0YVtpXSkKKwkJCWNvbnRpbnVlOworCisJCXJldCA9IG5ldGRldi0+ZGNibmxfb3BzLT5nZXRmZWF0Y2ZnKG5ldGRldiwgaSwgJnZhbHVlKTsKKwkJaWYgKCFyZXQpCisJCQlyZXQgPSBubGFfcHV0X3U4KGRjYm5sX3NrYiwgaSwgdmFsdWUpOworCisJCWlmIChyZXQpIHsKKwkJCW5sYV9uZXN0X2NhbmNlbChkY2JubF9za2IsIG5lc3QpOworCQkJZ290byBubGFfcHV0X2ZhaWx1cmU7CisJCX0KKwl9CisJbmxhX25lc3RfZW5kKGRjYm5sX3NrYiwgbmVzdCk7CisKKwlubG1zZ19lbmQoZGNibmxfc2tiLCBubGgpOworCisJcmV0dXJuIHJ0bmxfdW5pY2FzdChkY2JubF9za2IsICZpbml0X25ldCwgcGlkKTsKK25sYV9wdXRfZmFpbHVyZToKKwlubG1zZ19jYW5jZWwoZGNibmxfc2tiLCBubGgpOworbmxtc2dfZmFpbHVyZToKKwlrZnJlZV9za2IoZGNibmxfc2tiKTsKK2Vycl9vdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBkY2JubF9zZXRmZWF0Y2ZnKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBubGF0dHIgKip0YiwKKwkJCSAgICB1MzIgcGlkLCB1MzIgc2VxLCB1MTYgZmxhZ3MpCit7CisJc3RydWN0IG5sYXR0ciAqZGF0YVtEQ0JfRkVBVENGR19BVFRSX01BWCArIDFdOworCWludCByZXQsIGk7CisJdTggdmFsdWU7CisKKwlpZiAoIW5ldGRldi0+ZGNibmxfb3BzLT5zZXRmZWF0Y2ZnKQorCQlyZXR1cm4gLUVOT1RTVVBQOworCisJaWYgKCF0YltEQ0JfQVRUUl9GRUFUQ0ZHXSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXQgPSBubGFfcGFyc2VfbmVzdGVkKGRhdGEsIERDQl9GRUFUQ0ZHX0FUVFJfTUFYLCB0YltEQ0JfQVRUUl9GRUFUQ0ZHXSwKKwkJCSAgICAgICBkY2JubF9mZWF0Y2ZnX25lc3QpOworCisJaWYgKHJldCkKKwkJZ290byBlcnI7CisKKwlmb3IgKGkgPSBEQ0JfRkVBVENGR19BVFRSX0FMTCsxOyBpIDw9IERDQl9GRUFUQ0ZHX0FUVFJfTUFYOyBpKyspIHsKKwkJaWYgKGRhdGFbaV0gPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCisJCXZhbHVlID0gbmxhX2dldF91OChkYXRhW2ldKTsKKworCQlyZXQgPSBuZXRkZXYtPmRjYm5sX29wcy0+c2V0ZmVhdGNmZyhuZXRkZXYsIGksIHZhbHVlKTsKKworCQlpZiAocmV0KQorCQkJZ290byBlcnI7CisJfQorZXJyOgorCWRjYm5sX3JlcGx5KHJldCwgUlRNX1NFVERDQiwgRENCX0NNRF9TRkVBVENGRywgRENCX0FUVFJfRkVBVENGRywKKwkJICAgIHBpZCwgc2VxLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgaW50IGRjYl9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLCB2b2lkICphcmcpCiB7CiAJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLT5zayk7CkBAIC0xMjIzLDYgKzE1MzQsMzAgQEAKIAkJcmV0ID0gZGNibmxfc2V0YXBwKG5ldGRldiwgdGIsIHBpZCwgbmxoLT5ubG1zZ19zZXEsCiAJCSAgICAgICAgICAgICAgICAgICBubGgtPm5sbXNnX2ZsYWdzKTsKIAkJZ290byBvdXQ7CisJY2FzZSBEQ0JfQ01EX0lFRUVfU0VUOgorCQlyZXQgPSBkY2JubF9pZWVlX3NldChuZXRkZXYsIHRiLCBwaWQsIG5saC0+bmxtc2dfc2VxLAorCQkJCSBubGgtPm5sbXNnX2ZsYWdzKTsKKwkJZ290byBvdXQ7CisJY2FzZSBEQ0JfQ01EX0lFRUVfR0VUOgorCQlyZXQgPSBkY2JubF9pZWVlX2dldChuZXRkZXYsIHRiLCBwaWQsIG5saC0+bmxtc2dfc2VxLAorCQkJCSBubGgtPm5sbXNnX2ZsYWdzKTsKKwkJZ290byBvdXQ7CisJY2FzZSBEQ0JfQ01EX0dEQ0JYOgorCQlyZXQgPSBkY2JubF9nZXRkY2J4KG5ldGRldiwgdGIsIHBpZCwgbmxoLT5ubG1zZ19zZXEsCisJCQkJICAgIG5saC0+bmxtc2dfZmxhZ3MpOworCQlnb3RvIG91dDsKKwljYXNlIERDQl9DTURfU0RDQlg6CisJCXJldCA9IGRjYm5sX3NldGRjYngobmV0ZGV2LCB0YiwgcGlkLCBubGgtPm5sbXNnX3NlcSwKKwkJCQkgICAgbmxoLT5ubG1zZ19mbGFncyk7CisJCWdvdG8gb3V0OworCWNhc2UgRENCX0NNRF9HRkVBVENGRzoKKwkJcmV0ID0gZGNibmxfZ2V0ZmVhdGNmZyhuZXRkZXYsIHRiLCBwaWQsIG5saC0+bmxtc2dfc2VxLAorCQkJCSAgICAgICBubGgtPm5sbXNnX2ZsYWdzKTsKKwkJZ290byBvdXQ7CisJY2FzZSBEQ0JfQ01EX1NGRUFUQ0ZHOgorCQlyZXQgPSBkY2JubF9zZXRmZWF0Y2ZnKG5ldGRldiwgdGIsIHBpZCwgbmxoLT5ubG1zZ19zZXEsCisJCQkJICAgICAgIG5saC0+bmxtc2dfZmxhZ3MpOworCQlnb3RvIG91dDsKIAlkZWZhdWx0OgogCQlnb3RvIGVycm91dDsKIAl9CkBAIC0xMjMzLDggKzE1NjgsOTUgQEAKIAlyZXR1cm4gcmV0OwogfQogCisvKioKKyAqIGRjYl9nZXRhcHAgLSByZXRyaWV2ZSB0aGUgRENCWCBhcHBsaWNhdGlvbiB1c2VyIHByaW9yaXR5CisgKgorICogT24gc3VjY2VzcyByZXR1cm5zIGEgbm9uLXplcm8gODAyLjFwIHVzZXIgcHJpb3JpdHkgYml0bWFwCisgKiBvdGhlcndpc2UgcmV0dXJucyAwIGFzIHRoZSBpbnZhbGlkIHVzZXIgcHJpb3JpdHkgYml0bWFwIHRvCisgKiBpbmRpY2F0ZSBhbiBlcnJvci4KKyAqLwordTggZGNiX2dldGFwcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZGNiX2FwcCAqYXBwKQoreworCXN0cnVjdCBkY2JfYXBwX3R5cGUgKml0cjsKKwl1OCBwcmlvID0gMDsKKworCXNwaW5fbG9jaygmZGNiX2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkoaXRyLCAmZGNiX2FwcF9saXN0LCBsaXN0KSB7CisJCWlmIChpdHItPmFwcC5zZWxlY3RvciA9PSBhcHAtPnNlbGVjdG9yICYmCisJCSAgICBpdHItPmFwcC5wcm90b2NvbCA9PSBhcHAtPnByb3RvY29sICYmCisJCSAgICAoc3RybmNtcChpdHItPm5hbWUsIGRldi0+bmFtZSwgSUZOQU1TSVopID09IDApKSB7CisJCQlwcmlvID0gaXRyLT5hcHAucHJpb3JpdHk7CisJCQlicmVhazsKKwkJfQorCX0KKwlzcGluX3VubG9jaygmZGNiX2xvY2spOworCisJcmV0dXJuIHByaW87Cit9CitFWFBPUlRfU1lNQk9MKGRjYl9nZXRhcHApOworCisvKioKKyAqIGl4Z2JlX2RjYm5sX3NldGFwcCAtIGFkZCBkY2IgYXBwbGljYXRpb24gZGF0YSB0byBhcHAgbGlzdAorICoKKyAqIFByaW9yaXR5IDAgaXMgdGhlIGRlZmF1bHQgcHJpb3JpdHkgdGhpcyByZW1vdmVzIGFwcGxpY2F0aW9ucworICogZnJvbSB0aGUgYXBwIGxpc3QgaWYgdGhlIHByaW9yaXR5IGlzIHNldCB0byB6ZXJvLgorICovCit1OCBkY2Jfc2V0YXBwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBkY2JfYXBwICpuZXcpCit7CisJc3RydWN0IGRjYl9hcHBfdHlwZSAqaXRyOworCisJc3Bpbl9sb2NrKCZkY2JfbG9jayk7CisJLyogU2VhcmNoIGZvciBleGlzdGluZyBtYXRjaCBhbmQgcmVwbGFjZSAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoaXRyLCAmZGNiX2FwcF9saXN0LCBsaXN0KSB7CisJCWlmIChpdHItPmFwcC5zZWxlY3RvciA9PSBuZXctPnNlbGVjdG9yICYmCisJCSAgICBpdHItPmFwcC5wcm90b2NvbCA9PSBuZXctPnByb3RvY29sICYmCisJCSAgICAoc3RybmNtcChpdHItPm5hbWUsIGRldi0+bmFtZSwgSUZOQU1TSVopID09IDApKSB7CisJCQlpZiAobmV3LT5wcmlvcml0eSkKKwkJCQlpdHItPmFwcC5wcmlvcml0eSA9IG5ldy0+cHJpb3JpdHk7CisJCQllbHNlIHsKKwkJCQlsaXN0X2RlbCgmaXRyLT5saXN0KTsKKwkJCQlrZnJlZShpdHIpOworCQkJfQorCQkJZ290byBvdXQ7CisJCX0KKwl9CisJLyogQXBwIHR5cGUgZG9lcyBub3QgZXhpc3QgYWRkIG5ldyBhcHBsaWNhdGlvbiB0eXBlICovCisJaWYgKG5ldy0+cHJpb3JpdHkpIHsKKwkJc3RydWN0IGRjYl9hcHBfdHlwZSAqZW50cnk7CisJCWVudHJ5ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGRjYl9hcHBfdHlwZSksIEdGUF9BVE9NSUMpOworCQlpZiAoIWVudHJ5KSB7CisJCQlzcGluX3VubG9jaygmZGNiX2xvY2spOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKworCQltZW1jcHkoJmVudHJ5LT5hcHAsIG5ldywgc2l6ZW9mKCpuZXcpKTsKKwkJc3RybmNweShlbnRyeS0+bmFtZSwgZGV2LT5uYW1lLCBJRk5BTVNJWik7CisJCWxpc3RfYWRkKCZlbnRyeS0+bGlzdCwgJmRjYl9hcHBfbGlzdCk7CisJfQorb3V0OgorCXNwaW5fdW5sb2NrKCZkY2JfbG9jayk7CisJY2FsbF9kY2JldmVudF9ub3RpZmllcnMoRENCX0FQUF9FVkVOVCwgbmV3KTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woZGNiX3NldGFwcCk7CisKK3N0YXRpYyB2b2lkIGRjYl9mbHVzaGFwcCh2b2lkKQoreworCXN0cnVjdCBkY2JfYXBwX3R5cGUgKmFwcDsKKwlzdHJ1Y3QgZGNiX2FwcF90eXBlICp0bXA7CisKKwlzcGluX2xvY2soJmRjYl9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYXBwLCB0bXAsICZkY2JfYXBwX2xpc3QsIGxpc3QpIHsKKwkJbGlzdF9kZWwoJmFwcC0+bGlzdCk7CisJCWtmcmVlKGFwcCk7CisJfQorCXNwaW5fdW5sb2NrKCZkY2JfbG9jayk7Cit9CisKIHN0YXRpYyBpbnQgX19pbml0IGRjYm5sX2luaXQodm9pZCkKIHsKKwlJTklUX0xJU1RfSEVBRCgmZGNiX2FwcF9saXN0KTsKKwogCXJ0bmxfcmVnaXN0ZXIoUEZfVU5TUEVDLCBSVE1fR0VURENCLCBkY2JfZG9pdCwgTlVMTCk7CiAJcnRubF9yZWdpc3RlcihQRl9VTlNQRUMsIFJUTV9TRVREQ0IsIGRjYl9kb2l0LCBOVUxMKTsKIApAQCAtMTI0Niw3ICsxNjY4LDYgQEAKIHsKIAlydG5sX3VucmVnaXN0ZXIoUEZfVU5TUEVDLCBSVE1fR0VURENCKTsKIAlydG5sX3VucmVnaXN0ZXIoUEZfVU5TUEVDLCBSVE1fU0VURENCKTsKKwlkY2JfZmx1c2hhcHAoKTsKIH0KIG1vZHVsZV9leGl0KGRjYm5sX2V4aXQpOwotCi0KZGlmZiAtLWdpdCBhL25ldC9kY2NwL01ha2VmaWxlIGIvbmV0L2RjY3AvTWFrZWZpbGUKaW5kZXggMjk5MWVmYy4uNWM4MzYyYiAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvTWFrZWZpbGUKKysrIGIvbmV0L2RjY3AvTWFrZWZpbGUKQEAgLTEsNyArMSw3IEBACiBvYmotJChDT05GSUdfSVBfRENDUCkgKz0gZGNjcC5vIGRjY3BfaXB2NC5vCiAKLWRjY3AteSA6PSBjY2lkLm8gZmVhdC5vIGlucHV0Lm8gbWluaXNvY2tzLm8gb3B0aW9ucy5vIG91dHB1dC5vIHByb3RvLm8gdGltZXIubwotCitkY2NwLXkgOj0gY2NpZC5vIGZlYXQubyBpbnB1dC5vIG1pbmlzb2Nrcy5vIG9wdGlvbnMubyBvdXRwdXQubyBwcm90by5vIHRpbWVyLm8gXAorCSAgcXBvbGljeS5vCiAjCiAjIENDSUQgYWxnb3JpdGhtcyB0byBiZSB1c2VkIGJ5IGRjY3Aua28KICMKZGlmZiAtLWdpdCBhL25ldC9kY2NwL2Fja3ZlYy5jIGIvbmV0L2RjY3AvYWNrdmVjLmMKaW5kZXggOTJhNmZjYi4uMjViN2E4ZCAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvYWNrdmVjLmMKKysrIGIvbmV0L2RjY3AvYWNrdmVjLmMKQEAgLTEsNDQ0ICsxLDM3NSBAQAogLyoKICAqICBuZXQvZGNjcC9hY2t2ZWMuYwogICoKLSAqICBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgRENDUCBwcm90b2NvbAorICogIEFuIGltcGxlbWVudGF0aW9uIG9mIEFjayBWZWN0b3JzIGZvciB0aGUgRENDUCBwcm90b2NvbAorICogIENvcHlyaWdodCAoYykgMjAwNyBVbml2ZXJzaXR5IG9mIEFiZXJkZWVuLCBTY290bGFuZCwgVUsKICAqICBDb3B5cmlnaHQgKGMpIDIwMDUgQXJuYWxkbyBDYXJ2YWxobyBkZSBNZWxvIDxhY21lQGdob3N0cHJvdG9jb2xzLm5ldD4KICAqCiAgKiAgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiAgICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQogICogICAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZTsKICAqLwotCi0jaW5jbHVkZSAiYWNrdmVjLmgiCiAjaW5jbHVkZSAiZGNjcC5oIgotCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogCi0jaW5jbHVkZSA8bmV0L3NvY2suaD4KLQogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpkY2NwX2Fja3ZlY19zbGFiOwogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpkY2NwX2Fja3ZlY19yZWNvcmRfc2xhYjsKIAotc3RhdGljIHN0cnVjdCBkY2NwX2Fja3ZlY19yZWNvcmQgKmRjY3BfYWNrdmVjX3JlY29yZF9uZXcodm9pZCkKLXsKLQlzdHJ1Y3QgZGNjcF9hY2t2ZWNfcmVjb3JkICphdnIgPQotCQkJa21lbV9jYWNoZV9hbGxvYyhkY2NwX2Fja3ZlY19yZWNvcmRfc2xhYiwgR0ZQX0FUT01JQyk7Ci0KLQlpZiAoYXZyICE9IE5VTEwpCi0JCUlOSVRfTElTVF9IRUFEKCZhdnItPmF2cl9ub2RlKTsKLQotCXJldHVybiBhdnI7Ci19Ci0KLXN0YXRpYyB2b2lkIGRjY3BfYWNrdmVjX3JlY29yZF9kZWxldGUoc3RydWN0IGRjY3BfYWNrdmVjX3JlY29yZCAqYXZyKQotewotCWlmICh1bmxpa2VseShhdnIgPT0gTlVMTCkpCi0JCXJldHVybjsKLQkvKiBDaGVjayBpZiBkZWxldGluZyBhIGxpbmtlZCByZWNvcmQgKi8KLQlXQVJOX09OKCFsaXN0X2VtcHR5KCZhdnItPmF2cl9ub2RlKSk7Ci0Ja21lbV9jYWNoZV9mcmVlKGRjY3BfYWNrdmVjX3JlY29yZF9zbGFiLCBhdnIpOwotfQotCi1zdGF0aWMgdm9pZCBkY2NwX2Fja3ZlY19pbnNlcnRfYXZyKHN0cnVjdCBkY2NwX2Fja3ZlYyAqYXYsCi0JCQkJICAgc3RydWN0IGRjY3BfYWNrdmVjX3JlY29yZCAqYXZyKQotewotCS8qCi0JICogQVZScyBhcmUgc29ydGVkIGJ5IHNlcW5vLiBTaW5jZSB3ZSBhcmUgc2VuZGluZyB0aGVtIGluIG9yZGVyLCB3ZQotCSAqIGp1c3QgYWRkIHRoZSBBVlIgYXQgdGhlIGhlYWQgb2YgdGhlIGxpc3QuCi0JICogLXNvcmJvLgotCSAqLwotCWlmICghbGlzdF9lbXB0eSgmYXYtPmF2X3JlY29yZHMpKSB7Ci0JCWNvbnN0IHN0cnVjdCBkY2NwX2Fja3ZlY19yZWNvcmQgKmhlYWQgPQotCQkJCQlsaXN0X2VudHJ5KGF2LT5hdl9yZWNvcmRzLm5leHQsCi0JCQkJCQkgICBzdHJ1Y3QgZGNjcF9hY2t2ZWNfcmVjb3JkLAotCQkJCQkJICAgYXZyX25vZGUpOwotCQlCVUdfT04oYmVmb3JlNDgoYXZyLT5hdnJfYWNrX3NlcW5vLCBoZWFkLT5hdnJfYWNrX3NlcW5vKSk7Ci0JfQotCi0JbGlzdF9hZGQoJmF2ci0+YXZyX25vZGUsICZhdi0+YXZfcmVjb3Jkcyk7Ci19Ci0KLWludCBkY2NwX2luc2VydF9vcHRpb25fYWNrdmVjKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3QgZGNjcF9zb2NrICpkcCA9IGRjY3Bfc2soc2spOwotCXN0cnVjdCBkY2NwX2Fja3ZlYyAqYXYgPSBkcC0+ZGNjcHNfaGNfcnhfYWNrdmVjOwotCS8qIEZpZ3VyZSBvdXQgaG93IG1hbnkgb3B0aW9ucyBkbyB3ZSBuZWVkIHRvIHJlcHJlc2VudCB0aGUgYWNrdmVjICovCi0JY29uc3QgdTggbnJfb3B0cyA9IERJVl9ST1VORF9VUChhdi0+YXZfdmVjX2xlbiwgRENDUF9TSU5HTEVfT1BUX01BWExFTik7Ci0JdTE2IGxlbiA9IGF2LT5hdl92ZWNfbGVuICsgMiAqIG5yX29wdHMsIGk7Ci0JdTMyIGVsYXBzZWRfdGltZTsKLQljb25zdCB1bnNpZ25lZCBjaGFyICp0YWlsLCAqZnJvbTsKLQl1bnNpZ25lZCBjaGFyICp0bzsKLQlzdHJ1Y3QgZGNjcF9hY2t2ZWNfcmVjb3JkICphdnI7Ci0Jc3VzZWNvbmRzX3QgZGVsdGE7Ci0KLQlpZiAoRENDUF9TS0JfQ0Ioc2tiKS0+ZGNjcGRfb3B0X2xlbiArIGxlbiA+IERDQ1BfTUFYX09QVF9MRU4pCi0JCXJldHVybiAtMTsKLQotCWRlbHRhID0ga3RpbWVfdXNfZGVsdGEoa3RpbWVfZ2V0X3JlYWwoKSwgYXYtPmF2X3RpbWUpOwotCWVsYXBzZWRfdGltZSA9IGRlbHRhIC8gMTA7Ci0KLQlpZiAoZWxhcHNlZF90aW1lICE9IDAgJiYKLQkgICAgZGNjcF9pbnNlcnRfb3B0aW9uX2VsYXBzZWRfdGltZShza2IsIGVsYXBzZWRfdGltZSkpCi0JCXJldHVybiAtMTsKLQotCWF2ciA9IGRjY3BfYWNrdmVjX3JlY29yZF9uZXcoKTsKLQlpZiAoYXZyID09IE5VTEwpCi0JCXJldHVybiAtMTsKLQotCURDQ1BfU0tCX0NCKHNrYiktPmRjY3BkX29wdF9sZW4gKz0gbGVuOwotCi0JdG8gICA9IHNrYl9wdXNoKHNrYiwgbGVuKTsKLQlsZW4gID0gYXYtPmF2X3ZlY19sZW47Ci0JZnJvbSA9IGF2LT5hdl9idWYgKyBhdi0+YXZfYnVmX2hlYWQ7Ci0JdGFpbCA9IGF2LT5hdl9idWYgKyBEQ0NQX01BWF9BQ0tWRUNfTEVOOwotCi0JZm9yIChpID0gMDsgaSA8IG5yX29wdHM7ICsraSkgewotCQlpbnQgY29weWxlbiA9IGxlbjsKLQotCQlpZiAobGVuID4gRENDUF9TSU5HTEVfT1BUX01BWExFTikKLQkJCWNvcHlsZW4gPSBEQ0NQX1NJTkdMRV9PUFRfTUFYTEVOOwotCi0JCSp0bysrID0gRENDUE9fQUNLX1ZFQ1RPUl8wOwotCQkqdG8rKyA9IGNvcHlsZW4gKyAyOwotCi0JCS8qIENoZWNrIGlmIGJ1Zl9oZWFkIHdyYXBzICovCi0JCWlmIChmcm9tICsgY29weWxlbiA+IHRhaWwpIHsKLQkJCWNvbnN0IHUxNiB0YWlsc2l6ZSA9IHRhaWwgLSBmcm9tOwotCi0JCQltZW1jcHkodG8sIGZyb20sIHRhaWxzaXplKTsKLQkJCXRvCSs9IHRhaWxzaXplOwotCQkJbGVuCS09IHRhaWxzaXplOwotCQkJY29weWxlbgktPSB0YWlsc2l6ZTsKLQkJCWZyb20JPSBhdi0+YXZfYnVmOwotCQl9Ci0KLQkJbWVtY3B5KHRvLCBmcm9tLCBjb3B5bGVuKTsKLQkJZnJvbSArPSBjb3B5bGVuOwotCQl0byAgICs9IGNvcHlsZW47Ci0JCWxlbiAgLT0gY29weWxlbjsKLQl9Ci0KLQkvKgotCSAqCUZyb20gUkZDIDQzNDAsIEEuMjoKLQkgKgotCSAqCUZvciBlYWNoIGFja25vd2xlZGdlbWVudCBpdCBzZW5kcywgdGhlIEhDLVJlY2VpdmVyIHdpbGwgYWRkIGFuCi0JICoJYWNrbm93bGVkZ2VtZW50IHJlY29yZC4gIGFja19zZXFubyB3aWxsIGVxdWFsIHRoZSBIQy1SZWNlaXZlcgotCSAqCXNlcXVlbmNlIG51bWJlciBpdCB1c2VkIGZvciB0aGUgYWNrIHBhY2tldDsgYWNrX3B0ciB3aWxsIGVxdWFsCi0JICoJYnVmX2hlYWQ7IGFja19hY2tubyB3aWxsIGVxdWFsIGJ1Zl9hY2tubzsgYW5kIGFja19ub25jZSB3aWxsCi0JICoJZXF1YWwgYnVmX25vbmNlLgotCSAqLwotCWF2ci0+YXZyX2Fja19zZXFubyA9IERDQ1BfU0tCX0NCKHNrYiktPmRjY3BkX3NlcTsKLQlhdnItPmF2cl9hY2tfcHRyICAgPSBhdi0+YXZfYnVmX2hlYWQ7Ci0JYXZyLT5hdnJfYWNrX2Fja25vID0gYXYtPmF2X2J1Zl9hY2tubzsKLQlhdnItPmF2cl9hY2tfbm9uY2UgPSBhdi0+YXZfYnVmX25vbmNlOwotCWF2ci0+YXZyX3NlbnRfbGVuICA9IGF2LT5hdl92ZWNfbGVuOwotCi0JZGNjcF9hY2t2ZWNfaW5zZXJ0X2F2cihhdiwgYXZyKTsKLQotCWRjY3BfcHJfZGVidWcoIiVzIEFDSyBWZWN0b3IgMCwgbGVuPSVkLCBhY2tfc2Vxbm89JWxsdSwgIgotCQkgICAgICAiYWNrX2Fja25vPSVsbHVcbiIsCi0JCSAgICAgIGRjY3Bfcm9sZShzayksIGF2ci0+YXZyX3NlbnRfbGVuLAotCQkgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWF2ci0+YXZyX2Fja19zZXFubywKLQkJICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylhdnItPmF2cl9hY2tfYWNrbm8pOwotCXJldHVybiAwOwotfQotCiBzdHJ1Y3QgZGNjcF9hY2t2ZWMgKmRjY3BfYWNrdmVjX2FsbG9jKGNvbnN0IGdmcF90IHByaW9yaXR5KQogewotCXN0cnVjdCBkY2NwX2Fja3ZlYyAqYXYgPSBrbWVtX2NhY2hlX2FsbG9jKGRjY3BfYWNrdmVjX3NsYWIsIHByaW9yaXR5KTsKKwlzdHJ1Y3QgZGNjcF9hY2t2ZWMgKmF2ID0ga21lbV9jYWNoZV96YWxsb2MoZGNjcF9hY2t2ZWNfc2xhYiwgcHJpb3JpdHkpOwogCiAJaWYgKGF2ICE9IE5VTEwpIHsKLQkJYXYtPmF2X2J1Zl9oZWFkCSA9IERDQ1BfTUFYX0FDS1ZFQ19MRU4gLSAxOwotCQlhdi0+YXZfYnVmX2Fja25vID0gVUlOVDQ4X01BWCArIDE7Ci0JCWF2LT5hdl9idWZfbm9uY2UgPSAwOwotCQlhdi0+YXZfdGltZQkgPSBrdGltZV9zZXQoMCwgMCk7Ci0JCWF2LT5hdl92ZWNfbGVuCSA9IDA7CisJCWF2LT5hdl9idWZfaGVhZAk9IGF2LT5hdl9idWZfdGFpbCA9IERDQ1BBVl9NQVhfQUNLVkVDX0xFTiAtIDE7CiAJCUlOSVRfTElTVF9IRUFEKCZhdi0+YXZfcmVjb3Jkcyk7CiAJfQotCiAJcmV0dXJuIGF2OwogfQogCitzdGF0aWMgdm9pZCBkY2NwX2Fja3ZlY19wdXJnZV9yZWNvcmRzKHN0cnVjdCBkY2NwX2Fja3ZlYyAqYXYpCit7CisJc3RydWN0IGRjY3BfYWNrdmVjX3JlY29yZCAqY3VyLCAqbmV4dDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjdXIsIG5leHQsICZhdi0+YXZfcmVjb3JkcywgYXZyX25vZGUpCisJCWttZW1fY2FjaGVfZnJlZShkY2NwX2Fja3ZlY19yZWNvcmRfc2xhYiwgY3VyKTsKKwlJTklUX0xJU1RfSEVBRCgmYXYtPmF2X3JlY29yZHMpOworfQorCiB2b2lkIGRjY3BfYWNrdmVjX2ZyZWUoc3RydWN0IGRjY3BfYWNrdmVjICphdikKIHsKLQlpZiAodW5saWtlbHkoYXYgPT0gTlVMTCkpCi0JCXJldHVybjsKLQotCWlmICghbGlzdF9lbXB0eSgmYXYtPmF2X3JlY29yZHMpKSB7Ci0JCXN0cnVjdCBkY2NwX2Fja3ZlY19yZWNvcmQgKmF2ciwgKm5leHQ7Ci0KLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGF2ciwgbmV4dCwgJmF2LT5hdl9yZWNvcmRzLCBhdnJfbm9kZSkgewotCQkJbGlzdF9kZWxfaW5pdCgmYXZyLT5hdnJfbm9kZSk7Ci0JCQlkY2NwX2Fja3ZlY19yZWNvcmRfZGVsZXRlKGF2cik7Ci0JCX0KKwlpZiAobGlrZWx5KGF2ICE9IE5VTEwpKSB7CisJCWRjY3BfYWNrdmVjX3B1cmdlX3JlY29yZHMoYXYpOworCQlrbWVtX2NhY2hlX2ZyZWUoZGNjcF9hY2t2ZWNfc2xhYiwgYXYpOwogCX0KLQotCWttZW1fY2FjaGVfZnJlZShkY2NwX2Fja3ZlY19zbGFiLCBhdik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdTggZGNjcF9hY2t2ZWNfc3RhdGUoY29uc3Qgc3RydWN0IGRjY3BfYWNrdmVjICphdiwKLQkJCQkgICBjb25zdCB1MzIgaW5kZXgpCi17Ci0JcmV0dXJuIGF2LT5hdl9idWZbaW5kZXhdICYgRENDUF9BQ0tWRUNfU1RBVEVfTUFTSzsKLX0KLQotc3RhdGljIGlubGluZSB1OCBkY2NwX2Fja3ZlY19sZW4oY29uc3Qgc3RydWN0IGRjY3BfYWNrdmVjICphdiwKLQkJCQkgY29uc3QgdTMyIGluZGV4KQotewotCXJldHVybiBhdi0+YXZfYnVmW2luZGV4XSAmIERDQ1BfQUNLVkVDX0xFTl9NQVNLOwotfQotCi0vKgotICogSWYgc2V2ZXJhbCBwYWNrZXRzIGFyZSBtaXNzaW5nLCB0aGUgSEMtUmVjZWl2ZXIgbWF5IHByZWZlciB0byBlbnRlciBtdWx0aXBsZQotICogYnl0ZXMgd2l0aCBydW4gbGVuZ3RoIDAsIHJhdGhlciB0aGFuIGEgc2luZ2xlIGJ5dGUgd2l0aCBhIGxhcmdlciBydW4gbGVuZ3RoOwotICogdGhpcyBzaW1wbGlmaWVzIHRhYmxlIHVwZGF0ZXMgaWYgb25lIG9mIHRoZSBtaXNzaW5nIHBhY2tldHMgYXJyaXZlcy4KKy8qKgorICogZGNjcF9hY2t2ZWNfdXBkYXRlX3JlY29yZHMgIC0gIFJlY29yZCBpbmZvcm1hdGlvbiBhYm91dCBzZW50IEFjayBWZWN0b3JzCisgKiBAYXY6CQlBY2sgVmVjdG9yIHJlY29yZHMgdG8gdXBkYXRlCisgKiBAc2Vxbm86CVNlcXVlbmNlIG51bWJlciBvZiB0aGUgcGFja2V0IGNhcnJ5aW5nIHRoZSBBY2sgVmVjdG9yIGp1c3Qgc2VudAorICogQG5vbmNlX3N1bToJVGhlIHN1bSBvZiBhbGwgYnVmZmVyIG5vbmNlcyBjb250YWluZWQgaW4gdGhlIEFjayBWZWN0b3IKICAqLwotc3RhdGljIGlubGluZSBpbnQgZGNjcF9hY2t2ZWNfc2V0X2J1Zl9oZWFkX3N0YXRlKHN0cnVjdCBkY2NwX2Fja3ZlYyAqYXYsCi0JCQkJCQkgY29uc3QgdW5zaWduZWQgaW50IHBhY2tldHMsCi0JCQkJCQkgY29uc3QgdW5zaWduZWQgY2hhciBzdGF0ZSkKK2ludCBkY2NwX2Fja3ZlY191cGRhdGVfcmVjb3JkcyhzdHJ1Y3QgZGNjcF9hY2t2ZWMgKmF2LCB1NjQgc2Vxbm8sIHU4IG5vbmNlX3N1bSkKIHsKLQlsb25nIGdhcDsKLQlsb25nIG5ld19oZWFkOworCXN0cnVjdCBkY2NwX2Fja3ZlY19yZWNvcmQgKmF2cjsKIAotCWlmIChhdi0+YXZfdmVjX2xlbiArIHBhY2tldHMgPiBEQ0NQX01BWF9BQ0tWRUNfTEVOKQorCWF2ciA9IGttZW1fY2FjaGVfYWxsb2MoZGNjcF9hY2t2ZWNfcmVjb3JkX3NsYWIsIEdGUF9BVE9NSUMpOworCWlmIChhdnIgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9CVUZTOwogCi0JZ2FwCSA9IHBhY2tldHMgLSAxOwotCW5ld19oZWFkID0gYXYtPmF2X2J1Zl9oZWFkIC0gcGFja2V0czsKKwlhdnItPmF2cl9hY2tfc2Vxbm8gID0gc2Vxbm87CisJYXZyLT5hdnJfYWNrX3B0ciAgICA9IGF2LT5hdl9idWZfaGVhZDsKKwlhdnItPmF2cl9hY2tfYWNrbm8gID0gYXYtPmF2X2J1Zl9hY2tubzsKKwlhdnItPmF2cl9hY2tfbm9uY2UgID0gbm9uY2Vfc3VtOworCWF2ci0+YXZyX2Fja19ydW5sZW4gPSBkY2NwX2Fja3ZlY19ydW5sZW4oYXYtPmF2X2J1ZiArIGF2LT5hdl9idWZfaGVhZCk7CisJLyoKKwkgKiBXaGVuIHRoZSBidWZmZXIgb3ZlcmZsb3dzLCB3ZSBrZWVwIG5vIG1vcmUgdGhhbiBvbmUgcmVjb3JkLiBUaGlzIGlzCisJICogdGhlIHNpbXBsZXN0IHdheSBvZiBkaXNhbWJpZ3VhdGluZyBzZW5kZXItQWNrcyBkYXRpbmcgZnJvbSBiZWZvcmUgdGhlCisJICogb3ZlcmZsb3cgZnJvbSBzZW5kZXItQWNrcyB3aGljaCByZWZlciB0byBhZnRlciB0aGUgb3ZlcmZsb3c7IGEgc2ltcGxlCisJICogc29sdXRpb24gaXMgcHJlZmVyYWJsZSBoZXJlIHNpbmNlIHdlIGFyZSBoYW5kbGluZyBhbiBleGNlcHRpb24uCisJICovCisJaWYgKGF2LT5hdl9vdmVyZmxvdykKKwkJZGNjcF9hY2t2ZWNfcHVyZ2VfcmVjb3Jkcyhhdik7CisJLyoKKwkgKiBTaW5jZSBHU1MgaXMgaW5jcmVtZW50ZWQgZm9yIGVhY2ggcGFja2V0LCB0aGUgbGlzdCBpcyBhdXRvbWF0aWNhbGx5CisJICogYXJyYW5nZWQgaW4gZGVzY2VuZGluZyBvcmRlciBvZiBAYWNrX3NlcW5vLgorCSAqLworCWxpc3RfYWRkKCZhdnItPmF2cl9ub2RlLCAmYXYtPmF2X3JlY29yZHMpOwogCi0JaWYgKG5ld19oZWFkIDwgMCkgewotCQlpZiAoZ2FwID4gMCkgewotCQkJbWVtc2V0KGF2LT5hdl9idWYsIERDQ1BfQUNLVkVDX1NUQVRFX05PVF9SRUNFSVZFRCwKLQkJCSAgICAgICBnYXAgKyBuZXdfaGVhZCArIDEpOwotCQkJZ2FwID0gLW5ld19oZWFkOwotCQl9Ci0JCW5ld19oZWFkICs9IERDQ1BfTUFYX0FDS1ZFQ19MRU47Ci0JfQotCi0JYXYtPmF2X2J1Zl9oZWFkID0gbmV3X2hlYWQ7Ci0KLQlpZiAoZ2FwID4gMCkKLQkJbWVtc2V0KGF2LT5hdl9idWYgKyBhdi0+YXZfYnVmX2hlYWQgKyAxLAotCQkgICAgICAgRENDUF9BQ0tWRUNfU1RBVEVfTk9UX1JFQ0VJVkVELCBnYXApOwotCi0JYXYtPmF2X2J1Zlthdi0+YXZfYnVmX2hlYWRdID0gc3RhdGU7Ci0JYXYtPmF2X3ZlY19sZW4gKz0gcGFja2V0czsKKwlkY2NwX3ByX2RlYnVnKCJBZGRlZCBWZWN0b3IsIGFja19zZXFubz0lbGx1LCBhY2tfYWNrbm89JWxsdSAocmw9JXUpXG4iLAorCQkgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWF2ci0+YXZyX2Fja19zZXFubywKKwkJICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylhdnItPmF2cl9hY2tfYWNrbm8sCisJCSAgICAgIGF2ci0+YXZyX2Fja19ydW5sZW4pOwogCXJldHVybiAwOwogfQogCitzdGF0aWMgc3RydWN0IGRjY3BfYWNrdmVjX3JlY29yZCAqZGNjcF9hY2t2ZWNfbG9va3VwKHN0cnVjdCBsaXN0X2hlYWQgKmF2X2xpc3QsCisJCQkJCQkgICAgIGNvbnN0IHU2NCBhY2tubykKK3sKKwlzdHJ1Y3QgZGNjcF9hY2t2ZWNfcmVjb3JkICphdnI7CisJLyoKKwkgKiBFeHBsb2l0IHRoYXQgcmVjb3JkcyBhcmUgaW5zZXJ0ZWQgaW4gZGVzY2VuZGluZyBvcmRlciBvZiBzZXF1ZW5jZQorCSAqIG51bWJlciwgc3RhcnQgd2l0aCB0aGUgb2xkZXN0IHJlY29yZCBmaXJzdC4gSWYgQGFja25vIGlzIGBiZWZvcmUnCisJICogdGhlIGVhcmxpZXN0IGFja19hY2tubywgdGhlIHBhY2tldCBpcyB0b28gb2xkIHRvIGJlIGNvbnNpZGVyZWQuCisJICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKGF2ciwgYXZfbGlzdCwgYXZyX25vZGUpIHsKKwkJaWYgKGF2ci0+YXZyX2Fja19zZXFubyA9PSBhY2tubykKKwkJCXJldHVybiBhdnI7CisJCWlmIChiZWZvcmU0OChhY2tubywgYXZyLT5hdnJfYWNrX3NlcW5vKSkKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKwogLyoKLSAqIEltcGxlbWVudHMgdGhlIFJGQyA0MzQwLCBBcHBlbmRpeCBBCisgKiBCdWZmZXIgaW5kZXggYW5kIGxlbmd0aCBjb21wdXRhdGlvbiB1c2luZyBtb2R1bG8tYnVmZmVyc2l6ZSBhcml0aG1ldGljLgorICogTm90ZSB0aGF0LCBhcyBwb2ludGVycyBtb3ZlIGZyb20gcmlnaHQgdG8gbGVmdCwgaGVhZCBpcyBgYmVmb3JlJyB0YWlsLgogICovCi1pbnQgZGNjcF9hY2t2ZWNfYWRkKHN0cnVjdCBkY2NwX2Fja3ZlYyAqYXYsIGNvbnN0IHN0cnVjdCBzb2NrICpzaywKLQkJICAgIGNvbnN0IHU2NCBhY2tubywgY29uc3QgdTggc3RhdGUpCitzdGF0aWMgaW5saW5lIHUxNiBfX2Fja3ZlY19pZHhfYWRkKGNvbnN0IHUxNiBhLCBjb25zdCB1MTYgYikKIHsKLQkvKgotCSAqIENoZWNrIGF0IHRoZSByaWdodCBwbGFjZXMgaWYgdGhlIGJ1ZmZlciBpcyBmdWxsLCBpZiBpdCBpcywgdGVsbCB0aGUKLQkgKiBjYWxsZXIgdG8gc3RhcnQgZHJvcHBpbmcgcGFja2V0cyB0aWxsIHRoZSBIQy1TZW5kZXIgYWNrcyBvdXIgQUNLCi0JICogdmVjdG9ycywgd2hlbiB3ZSB3aWxsIGZyZWUgdXAgc3BhY2UgaW4gYXZfYnVmLgotCSAqCi0JICogV2UgbWF5IHdlbGwgZGVjaWRlIHRvIGRvIGJ1ZmZlciBjb21wcmVzc2lvbiwgZXRjLCBidXQgZm9yIG5vdyBsZXRzCi0JICoganVzdCBkcm9wLgotCSAqCi0JICogRnJvbSBBcHBlbmRpeCBBLjEuMSAoYE5ldyBQYWNrZXRzJyk6Ci0JICoKLQkgKglPZiBjb3Vyc2UsIHRoZSBjaXJjdWxhciBidWZmZXIgbWF5IG92ZXJmbG93LCBlaXRoZXIgd2hlbiB0aGUKLQkgKglIQy1TZW5kZXIgaXMgc2VuZGluZyBkYXRhIGF0IGEgdmVyeSBoaWdoIHJhdGUsIHdoZW4gdGhlCi0JICoJSEMtUmVjZWl2ZXIncyBhY2tub3dsZWRnZW1lbnRzIGFyZSBub3QgcmVhY2hpbmcgdGhlIEhDLVNlbmRlciwKLQkgKglvciB3aGVuIHRoZSBIQy1TZW5kZXIgaXMgZm9yZ2V0dGluZyB0byBhY2tub3dsZWRnZSB0aG9zZSBhY2tzCi0JICoJKHNvIHRoZSBIQy1SZWNlaXZlciBpcyB1bmFibGUgdG8gY2xlYW4gdXAgb2xkIHN0YXRlKS4gSW4gdGhpcwotCSAqCWNhc2UsIHRoZSBIQy1SZWNlaXZlciBzaG91bGQgZWl0aGVyIGNvbXByZXNzIHRoZSBidWZmZXIgKGJ5Ci0JICoJaW5jcmVhc2luZyBydW4gbGVuZ3RocyB3aGVuIHBvc3NpYmxlKSwgdHJhbnNmZXIgaXRzIHN0YXRlIHRvCi0JICoJYSBsYXJnZXIgYnVmZmVyLCBvciwgYXMgYSBsYXN0IHJlc29ydCwgZHJvcCBhbGwgcmVjZWl2ZWQKLQkgKglwYWNrZXRzLCB3aXRob3V0IHByb2Nlc3NpbmcgdGhlbSB3aGF0c29ldmVyLCB1bnRpbCBpdHMgYnVmZmVyCi0JICoJc2hyaW5rcyBhZ2Fpbi4KLQkgKi8KLQotCS8qIFNlZSBpZiB0aGlzIGlzIHRoZSBmaXJzdCBhY2tubyBiZWluZyBpbnNlcnRlZCAqLwotCWlmIChhdi0+YXZfdmVjX2xlbiA9PSAwKSB7Ci0JCWF2LT5hdl9idWZbYXYtPmF2X2J1Zl9oZWFkXSA9IHN0YXRlOwotCQlhdi0+YXZfdmVjX2xlbiA9IDE7Ci0JfSBlbHNlIGlmIChhZnRlcjQ4KGFja25vLCBhdi0+YXZfYnVmX2Fja25vKSkgewotCQljb25zdCB1NjQgZGVsdGEgPSBkY2NwX2RlbHRhX3NlcW5vKGF2LT5hdl9idWZfYWNrbm8sIGFja25vKTsKLQotCQkvKgotCQkgKiBMb29rIGlmIHRoZSBzdGF0ZSBvZiB0aGlzIHBhY2tldCBpcyB0aGUgc2FtZSBhcyB0aGUKLQkJICogcHJldmlvdXMgYWNrbm8gYW5kIGlmIHNvIGlmIHdlIGNhbiBidW1wIHRoZSBoZWFkIGxlbi4KLQkJICovCi0JCWlmIChkZWx0YSA9PSAxICYmCi0JCSAgICBkY2NwX2Fja3ZlY19zdGF0ZShhdiwgYXYtPmF2X2J1Zl9oZWFkKSA9PSBzdGF0ZSAmJgotCQkgICAgZGNjcF9hY2t2ZWNfbGVuKGF2LCBhdi0+YXZfYnVmX2hlYWQpIDwgRENDUF9BQ0tWRUNfTEVOX01BU0spCi0JCQlhdi0+YXZfYnVmW2F2LT5hdl9idWZfaGVhZF0rKzsKLQkJZWxzZSBpZiAoZGNjcF9hY2t2ZWNfc2V0X2J1Zl9oZWFkX3N0YXRlKGF2LCBkZWx0YSwgc3RhdGUpKQotCQkJcmV0dXJuIC1FTk9CVUZTOwotCX0gZWxzZSB7Ci0JCS8qCi0JCSAqIEEuMS4yLiAgT2xkIFBhY2tldHMKLQkJICoKLQkJICoJV2hlbiBhIHBhY2tldCB3aXRoIFNlcXVlbmNlIE51bWJlciBTIDw9IGJ1Zl9hY2tubwotCQkgKglhcnJpdmVzLCB0aGUgSEMtUmVjZWl2ZXIgd2lsbCBzY2FuIHRoZSB0YWJsZSBmb3IKLQkJICoJdGhlIGJ5dGUgY29ycmVzcG9uZGluZyB0byBTLiAoSW5kZXhpbmcgc3RydWN0dXJlcwotCQkgKgljb3VsZCByZWR1Y2UgdGhlIGNvbXBsZXhpdHkgb2YgdGhpcyBzY2FuLikKLQkJICovCi0JCXU2NCBkZWx0YSA9IGRjY3BfZGVsdGFfc2Vxbm8oYWNrbm8sIGF2LT5hdl9idWZfYWNrbm8pOwotCQl1MzIgaW5kZXggPSBhdi0+YXZfYnVmX2hlYWQ7Ci0KLQkJd2hpbGUgKDEpIHsKLQkJCWNvbnN0IHU4IGxlbiA9IGRjY3BfYWNrdmVjX2xlbihhdiwgaW5kZXgpOwotCQkJY29uc3QgdTggYXZfc3RhdGUgPSBkY2NwX2Fja3ZlY19zdGF0ZShhdiwgaW5kZXgpOwotCQkJLyoKLQkJCSAqIHZhbGlkIHBhY2tldHMgbm90IHlldCBpbiBhdl9idWYgaGF2ZSBhIHJlc2VydmVkCi0JCQkgKiBlbnRyeSwgd2l0aCBhIGxlbiBlcXVhbCB0byAwLgotCQkJICovCi0JCQlpZiAoYXZfc3RhdGUgPT0gRENDUF9BQ0tWRUNfU1RBVEVfTk9UX1JFQ0VJVkVEICYmCi0JCQkgICAgbGVuID09IDAgJiYgZGVsdGEgPT0gMCkgeyAvKiBGb3VuZCBvdXIKLQkJCQkJCQkgcmVzZXJ2ZWQgc2VhdCEgKi8KLQkJCQlkY2NwX3ByX2RlYnVnKCJGb3VuZCAlbGx1IHJlc2VydmVkIHNlYXQhXG4iLAotCQkJCQkgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWFja25vKTsKLQkJCQlhdi0+YXZfYnVmW2luZGV4XSA9IHN0YXRlOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCQkJLyogbGVuID09IDAgbWVhbnMgb25lIHBhY2tldCAqLwotCQkJaWYgKGRlbHRhIDwgbGVuICsgMSkKLQkJCQlnb3RvIG91dF9kdXBsaWNhdGU7Ci0KLQkJCWRlbHRhIC09IGxlbiArIDE7Ci0JCQlpZiAoKytpbmRleCA9PSBEQ0NQX01BWF9BQ0tWRUNfTEVOKQotCQkJCWluZGV4ID0gMDsKLQkJfQotCX0KLQotCWF2LT5hdl9idWZfYWNrbm8gPSBhY2tubzsKLQlhdi0+YXZfdGltZSA9IGt0aW1lX2dldF9yZWFsKCk7Ci1vdXQ6Ci0JcmV0dXJuIDA7Ci0KLW91dF9kdXBsaWNhdGU6Ci0JLyogRHVwbGljYXRlIHBhY2tldCAqLwotCWRjY3BfcHJfZGVidWcoIlJlY2VpdmVkIGEgZHVwIG9yIGFscmVhZHkgY29uc2lkZXJlZCBsb3N0ICIKLQkJICAgICAgInBhY2tldDogJWxsdVxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZylhY2tubyk7Ci0JcmV0dXJuIC1FSUxTRVE7CisJcmV0dXJuIChhICsgYikgJSBEQ0NQQVZfTUFYX0FDS1ZFQ19MRU47CiB9CiAKLXN0YXRpYyB2b2lkIGRjY3BfYWNrdmVjX3Rocm93X3JlY29yZChzdHJ1Y3QgZGNjcF9hY2t2ZWMgKmF2LAotCQkJCSAgICAgc3RydWN0IGRjY3BfYWNrdmVjX3JlY29yZCAqYXZyKQorc3RhdGljIGlubGluZSB1MTYgX19hY2t2ZWNfaWR4X3N1Yihjb25zdCB1MTYgYSwgY29uc3QgdTE2IGIpCiB7Ci0Jc3RydWN0IGRjY3BfYWNrdmVjX3JlY29yZCAqbmV4dDsKLQotCS8qIHNvcnQgb3V0IHZlY3RvciBsZW5ndGggKi8KLQlpZiAoYXYtPmF2X2J1Zl9oZWFkIDw9IGF2ci0+YXZyX2Fja19wdHIpCi0JCWF2LT5hdl92ZWNfbGVuID0gYXZyLT5hdnJfYWNrX3B0ciAtIGF2LT5hdl9idWZfaGVhZDsKLQllbHNlCi0JCWF2LT5hdl92ZWNfbGVuID0gRENDUF9NQVhfQUNLVkVDX0xFTiAtIDEgLQotCQkJCSBhdi0+YXZfYnVmX2hlYWQgKyBhdnItPmF2cl9hY2tfcHRyOwotCi0JLyogZnJlZSByZWNvcmRzICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX2Zyb20oYXZyLCBuZXh0LCAmYXYtPmF2X3JlY29yZHMsIGF2cl9ub2RlKSB7Ci0JCWxpc3RfZGVsX2luaXQoJmF2ci0+YXZyX25vZGUpOwotCQlkY2NwX2Fja3ZlY19yZWNvcmRfZGVsZXRlKGF2cik7Ci0JfQorCXJldHVybiBfX2Fja3ZlY19pZHhfYWRkKGEsIERDQ1BBVl9NQVhfQUNLVkVDX0xFTiAtIGIpOwogfQogCi12b2lkIGRjY3BfYWNrdmVjX2NoZWNrX3Jjdl9hY2tubyhzdHJ1Y3QgZGNjcF9hY2t2ZWMgKmF2LCBzdHJ1Y3Qgc29jayAqc2ssCi0JCQkJIGNvbnN0IHU2NCBhY2tubykKK3UxNiBkY2NwX2Fja3ZlY19idWZsZW4oY29uc3Qgc3RydWN0IGRjY3BfYWNrdmVjICphdikKIHsKLQlzdHJ1Y3QgZGNjcF9hY2t2ZWNfcmVjb3JkICphdnI7Ci0KLQkvKgotCSAqIElmIHdlIHRyYXZlcnNlIGJhY2t3YXJkcywgaXQgc2hvdWxkIGJlIGZhc3RlciB3aGVuIHdlIGhhdmUgbGFyZ2UKLQkgKiB3aW5kb3dzLiBXZSB3aWxsIGJlIHJlY2VpdmluZyBBQ0tzIGZvciBzdHVmZiB3ZSBzZW50IGEgd2hpbGUgYmFjawotCSAqIC1zb3Jiby4KLQkgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2UoYXZyLCAmYXYtPmF2X3JlY29yZHMsIGF2cl9ub2RlKSB7Ci0JCWlmIChhY2tubyA9PSBhdnItPmF2cl9hY2tfc2Vxbm8pIHsKLQkJCWRjY3BfcHJfZGVidWcoIiVzIEFDSyBwYWNrZXQgMCwgbGVuPSVkLCBhY2tfc2Vxbm89JWxsdSwgIgotCQkJCSAgICAgICJhY2tfYWNrbm89JWxsdSwgQUNLRUQhXG4iLAotCQkJCSAgICAgIGRjY3Bfcm9sZShzayksIDEsCi0JCQkJICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylhdnItPmF2cl9hY2tfc2Vxbm8sCi0JCQkJICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylhdnItPmF2cl9hY2tfYWNrbm8pOwotCQkJZGNjcF9hY2t2ZWNfdGhyb3dfcmVjb3JkKGF2LCBhdnIpOwotCQkJYnJlYWs7Ci0JCX0gZWxzZSBpZiAoYXZyLT5hdnJfYWNrX3NlcW5vID4gYWNrbm8pCi0JCQlicmVhazsgLyogb2xkIG5ld3MgKi8KLQl9CisJaWYgKHVubGlrZWx5KGF2LT5hdl9vdmVyZmxvdykpCisJCXJldHVybiBEQ0NQQVZfTUFYX0FDS1ZFQ19MRU47CisJcmV0dXJuIF9fYWNrdmVjX2lkeF9zdWIoYXYtPmF2X2J1Zl90YWlsLCBhdi0+YXZfYnVmX2hlYWQpOwogfQogCi1zdGF0aWMgdm9pZCBkY2NwX2Fja3ZlY19jaGVja19yY3ZfYWNrdmVjdG9yKHN0cnVjdCBkY2NwX2Fja3ZlYyAqYXYsCi0JCQkJCSAgICBzdHJ1Y3Qgc29jayAqc2ssIHU2NCAqYWNrbm8sCi0JCQkJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGxlbiwKLQkJCQkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnZlY3RvcikKKy8qKgorICogZGNjcF9hY2t2ZWNfdXBkYXRlX29sZCAgLSAgVXBkYXRlIHByZXZpb3VzIHN0YXRlIGFzIHBlciBSRkMgNDM0MCwgMTEuNC4xCisgKiBAYXY6CQlub24tZW1wdHkgYnVmZmVyIHRvIHVwZGF0ZQorICogQGRpc3RhbmNlOiAgIG5lZ2F0aXZlIG9yIHplcm8gZGlzdGFuY2Ugb2YgQHNlcW5vIGZyb20gYnVmX2Fja25vIGRvd253YXJkCisgKiBAc2Vxbm86CXRoZSAob2xkKSBzZXF1ZW5jZSBudW1iZXIgd2hvc2UgcmVjb3JkIGlzIHRvIGJlIHVwZGF0ZWQKKyAqIEBzdGF0ZToJc3RhdGUgaW4gd2hpY2ggcGFja2V0IGNhcnJ5aW5nIEBzZXFubyB3YXMgcmVjZWl2ZWQKKyAqLworc3RhdGljIHZvaWQgZGNjcF9hY2t2ZWNfdXBkYXRlX29sZChzdHJ1Y3QgZGNjcF9hY2t2ZWMgKmF2LCBzNjQgZGlzdGFuY2UsCisJCQkJICAgdTY0IHNlcW5vLCBlbnVtIGRjY3BfYWNrdmVjX3N0YXRlcyBzdGF0ZSkKIHsKLQl1bnNpZ25lZCBjaGFyIGk7Ci0Jc3RydWN0IGRjY3BfYWNrdmVjX3JlY29yZCAqYXZyOworCXUxNiBwdHIgPSBhdi0+YXZfYnVmX2hlYWQ7CiAKLQkvKiBDaGVjayBpZiB3ZSBhY3R1YWxseSBzZW50IGFuIEFDSyB2ZWN0b3IgKi8KLQlpZiAobGlzdF9lbXB0eSgmYXYtPmF2X3JlY29yZHMpKQorCUJVR19PTihkaXN0YW5jZSA+IDApOworCWlmICh1bmxpa2VseShkY2NwX2Fja3ZlY19pc19lbXB0eShhdikpKQogCQlyZXR1cm47CiAKLQlpID0gbGVuOwotCS8qCi0JICogWFhYCi0JICogSSB0aGluayBpdCBtaWdodCBiZSBtb3JlIGVmZmljaWVudCB0byB3b3JrIGJhY2t3YXJkcy4gU2VlIGNvbW1lbnQgb24KLQkgKiByY3ZfYWNrbm8uIC1zb3Jiby4KLQkgKi8KLQlhdnIgPSBsaXN0X2VudHJ5KGF2LT5hdl9yZWNvcmRzLm5leHQsIHN0cnVjdCBkY2NwX2Fja3ZlY19yZWNvcmQsIGF2cl9ub2RlKTsKLQl3aGlsZSAoaS0tKSB7Ci0JCWNvbnN0IHU4IHJsID0gKnZlY3RvciAmIERDQ1BfQUNLVkVDX0xFTl9NQVNLOwotCQl1NjQgYWNrbm9fZW5kX3JsOworCWRvIHsKKwkJdTggcnVubGVuID0gZGNjcF9hY2t2ZWNfcnVubGVuKGF2LT5hdl9idWYgKyBwdHIpOwogCi0JCWRjY3Bfc2V0X3NlcW5vKCZhY2tub19lbmRfcmwsICphY2tubyAtIHJsKTsKLQotCQkvKgotCQkgKiBJZiBvdXIgQVZSIHNlcXVlbmNlIG51bWJlciBpcyBncmVhdGVyIHRoYW4gdGhlIGFjaywgZ28KLQkJICogZm9yd2FyZCBpbiB0aGUgQVZSIGxpc3QgdW50aWwgaXQgaXMgbm90IHNvLgotCQkgKi8KLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9mcm9tKGF2ciwgJmF2LT5hdl9yZWNvcmRzLCBhdnJfbm9kZSkgewotCQkJaWYgKCFhZnRlcjQ4KGF2ci0+YXZyX2Fja19zZXFubywgKmFja25vKSkKLQkJCQlnb3RvIGZvdW5kOwotCQl9Ci0JCS8qIEVuZCBvZiB0aGUgYXZfcmVjb3JkcyBsaXN0LCBub3QgZm91bmQsIGV4aXQgKi8KLQkJYnJlYWs7Ci1mb3VuZDoKLQkJaWYgKGJldHdlZW40OChhdnItPmF2cl9hY2tfc2Vxbm8sIGFja25vX2VuZF9ybCwgKmFja25vKSkgewotCQkJY29uc3QgdTggc3RhdGUgPSAqdmVjdG9yICYgRENDUF9BQ0tWRUNfU1RBVEVfTUFTSzsKLQkJCWlmIChzdGF0ZSAhPSBEQ0NQX0FDS1ZFQ19TVEFURV9OT1RfUkVDRUlWRUQpIHsKLQkJCQlkY2NwX3ByX2RlYnVnKCIlcyBBQ0sgdmVjdG9yIDAsIGxlbj0lZCwgIgotCQkJCQkgICAgICAiYWNrX3NlcW5vPSVsbHUsIGFja19hY2tubz0lbGx1LCAiCi0JCQkJCSAgICAgICJBQ0tFRCFcbiIsCi0JCQkJCSAgICAgIGRjY3Bfcm9sZShzayksIGxlbiwKLQkJCQkJICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykKLQkJCQkJICAgICAgYXZyLT5hdnJfYWNrX3NlcW5vLAotCQkJCQkgICAgICAodW5zaWduZWQgbG9uZyBsb25nKQotCQkJCQkgICAgICBhdnItPmF2cl9hY2tfYWNrbm8pOwotCQkJCWRjY3BfYWNrdmVjX3Rocm93X3JlY29yZChhdiwgYXZyKTsKLQkJCQlicmVhazsKLQkJCX0KKwkJaWYgKGRpc3RhbmNlICsgcnVubGVuID49IDApIHsKIAkJCS8qCi0JCQkgKiBJZiBpdCB3YXNuJ3QgcmVjZWl2ZWQsIGNvbnRpbnVlIHNjYW5uaW5nLi4uIHdlIG1pZ2h0Ci0JCQkgKiBmaW5kIGFub3RoZXIgb25lLgorCQkJICogT25seSB1cGRhdGUgdGhlIHN0YXRlIGlmIHBhY2tldCBoYXMgbm90IGJlZW4gcmVjZWl2ZWQKKwkJCSAqIHlldC4gVGhpcyBpcyBPSyBhcyBwZXIgdGhlIHNlY29uZCB0YWJsZSBpbiBSRkMgNDM0MCwKKwkJCSAqIDExLjQuMTsgaS5lLiBoZXJlIHdlIGFyZSB1c2luZyB0aGUgZm9sbG93aW5nIHRhYmxlOgorCQkJICogICAgICAgICAgICAgICAgICAgICBSRUNFSVZFRAorCQkJICogICAgICAgICAgICAgICAgICAgICAgMCAgIDEgICAzCisJCQkgKiAgICAgICAgICAgICAgUyAgICAgKy0tLSstLS0rLS0tKworCQkJICogICAgICAgICAgICAgIFQgICAwIHwgMCB8IDAgfCAwIHwKKwkJCSAqICAgICAgICAgICAgICBPICAgICArLS0tKy0tLSstLS0rCisJCQkgKiAgICAgICAgICAgICAgUiAgIDEgfCAxIHwgMSB8IDEgfAorCQkJICogICAgICAgICAgICAgIEUgICAgICstLS0rLS0tKy0tLSsKKwkJCSAqICAgICAgICAgICAgICBEICAgMyB8IDAgfCAxIHwgMyB8CisJCQkgKiAgICAgICAgICAgICAgICAgICAgKy0tLSstLS0rLS0tKworCQkJICogVGhlICJOb3QgUmVjZWl2ZWQiIHN0YXRlIHdhcyBzZXQgYnkgcmVzZXJ2ZV9zZWF0cygpLgogCQkJICovCisJCQlpZiAoYXYtPmF2X2J1ZltwdHJdID09IERDQ1BBVl9OT1RfUkVDRUlWRUQpCisJCQkJYXYtPmF2X2J1ZltwdHJdID0gc3RhdGU7CisJCQllbHNlCisJCQkJZGNjcF9wcl9kZWJ1ZygiTm90IGNoYW5naW5nICVsbHUgc3RhdGUgdG8gJXVcbiIsCisJCQkJCSAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpc2Vxbm8sIHN0YXRlKTsKKwkJCWJyZWFrOwogCQl9CiAKLQkJZGNjcF9zZXRfc2Vxbm8oYWNrbm8sIGFja25vX2VuZF9ybCAtIDEpOwotCQkrK3ZlY3RvcjsKKwkJZGlzdGFuY2UgKz0gcnVubGVuICsgMTsKKwkJcHRyCSAgPSBfX2Fja3ZlY19pZHhfYWRkKHB0ciwgMSk7CisKKwl9IHdoaWxlIChwdHIgIT0gYXYtPmF2X2J1Zl90YWlsKTsKK30KKworLyogTWFyayBAbnVtIGVudHJpZXMgYWZ0ZXIgYnVmX2hlYWQgYXMgIk5vdCB5ZXQgcmVjZWl2ZWQiLiAqLworc3RhdGljIHZvaWQgZGNjcF9hY2t2ZWNfcmVzZXJ2ZV9zZWF0cyhzdHJ1Y3QgZGNjcF9hY2t2ZWMgKmF2LCB1MTYgbnVtKQoreworCXUxNiBzdGFydCA9IF9fYWNrdmVjX2lkeF9hZGQoYXYtPmF2X2J1Zl9oZWFkLCAxKSwKKwkgICAgbGVuCSAgPSBEQ0NQQVZfTUFYX0FDS1ZFQ19MRU4gLSBzdGFydDsKKworCS8qIGNoZWNrIGZvciBidWZmZXIgd3JhcC1hcm91bmQgKi8KKwlpZiAobnVtID4gbGVuKSB7CisJCW1lbXNldChhdi0+YXZfYnVmICsgc3RhcnQsIERDQ1BBVl9OT1RfUkVDRUlWRUQsIGxlbik7CisJCXN0YXJ0ID0gMDsKKwkJbnVtICAtPSBsZW47CisJfQorCWlmIChudW0pCisJCW1lbXNldChhdi0+YXZfYnVmICsgc3RhcnQsIERDQ1BBVl9OT1RfUkVDRUlWRUQsIG51bSk7Cit9CisKKy8qKgorICogZGNjcF9hY2t2ZWNfYWRkX25ldyAgLSAgUmVjb3JkIG9uZSBvciBtb3JlIG5ldyBlbnRyaWVzIGluIEFjayBWZWN0b3IgYnVmZmVyCisgKiBAYXY6CQkgY29udGFpbmVyIG9mIGJ1ZmZlciB0byB1cGRhdGUgKGNhbiBiZSBlbXB0eSBvciBub24tZW1wdHkpCisgKiBAbnVtX3BhY2tldHM6IG51bWJlciBvZiBwYWNrZXRzIHRvIHJlZ2lzdGVyIChtdXN0IGJlID49IDEpCisgKiBAc2Vxbm86CSBzZXF1ZW5jZSBudW1iZXIgb2YgdGhlIGZpcnN0IHBhY2tldCBpbiBAbnVtX3BhY2tldHMKKyAqIEBzdGF0ZToJIHN0YXRlIGluIHdoaWNoIHBhY2tldCBjYXJyeWluZyBAc2Vxbm8gd2FzIHJlY2VpdmVkCisgKi8KK3N0YXRpYyB2b2lkIGRjY3BfYWNrdmVjX2FkZF9uZXcoc3RydWN0IGRjY3BfYWNrdmVjICphdiwgdTMyIG51bV9wYWNrZXRzLAorCQkJCXU2NCBzZXFubywgZW51bSBkY2NwX2Fja3ZlY19zdGF0ZXMgc3RhdGUpCit7CisJdTMyIG51bV9jZWxscyA9IG51bV9wYWNrZXRzOworCisJaWYgKG51bV9wYWNrZXRzID4gRENDUEFWX0JVUlNUX1RIUkVTSCkgeworCQl1MzIgbG9zdF9wYWNrZXRzID0gbnVtX3BhY2tldHMgLSAxOworCisJCURDQ1BfV0FSTigiV2FybmluZzogbGFyZ2UgYnVyc3QgbG9zcyAoJXUpXG4iLCBsb3N0X3BhY2tldHMpOworCQkvKgorCQkgKiBXZSByZWNlaXZlZCAxIHBhY2tldCBhbmQgaGF2ZSBhIGxvc3Mgb2Ygc2l6ZSAibnVtX3BhY2tldHMtMSIKKwkJICogd2hpY2ggd2Ugc3F1ZWV6ZSBpbnRvIG51bV9jZWxscy0xIHJhdGhlciB0aGFuIHJlc2VydmluZyBhbgorCQkgKiBlbnRpcmUgYnl0ZSBmb3IgZWFjaCBsb3N0IHBhY2tldC4KKwkJICogVGhlIHJlYXNvbiBpcyB0aGF0IHRoZSB2ZWN0b3IgZ3Jvd3MgaW4gTyhidXJzdF9sZW5ndGgpOyB3aGVuCisJCSAqIGl0IGdyb3dzIHRvbyBsYXJnZSB0aGVyZSB3aWxsIG5vIHJvb20gbGVmdCBmb3IgdGhlIHBheWxvYWQuCisJCSAqIFRoaXMgaXMgYSB0cmFkZS1vZmY6IGlmIGEgZmV3IHBhY2tldHMgb3V0IG9mIHRoZSBidXJzdCBzaG93CisJCSAqIHVwIGxhdGVyLCB0aGVpciBzdGF0ZSB3aWxsIG5vdCBiZSBjaGFuZ2VkOyBpdCBpcyBzaW1wbHkgdG9vCisJCSAqIGNvc3RseSB0byByZXNodWZmbGUvcmVhbGxvY2F0ZS9jb3B5IHRoZSBidWZmZXIgZWFjaCB0aW1lLgorCQkgKiBTaG91bGQgc3VjaCBwcm9ibGVtcyBwZXJzaXN0LCB3ZSB3aWxsIG5lZWQgdG8gc3dpdGNoIHRvIGEKKwkJICogZGlmZmVyZW50IHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmUuCisJCSAqLworCQlmb3IgKG51bV9wYWNrZXRzID0gbnVtX2NlbGxzID0gMTsgbG9zdF9wYWNrZXRzOyArK251bV9jZWxscykgeworCQkJdTggbGVuID0gbWluKGxvc3RfcGFja2V0cywgKHUzMilEQ0NQQVZfTUFYX1JVTkxFTik7CisKKwkJCWF2LT5hdl9idWZfaGVhZCA9IF9fYWNrdmVjX2lkeF9zdWIoYXYtPmF2X2J1Zl9oZWFkLCAxKTsKKwkJCWF2LT5hdl9idWZbYXYtPmF2X2J1Zl9oZWFkXSA9IERDQ1BBVl9OT1RfUkVDRUlWRUQgfCBsZW47CisKKwkJCWxvc3RfcGFja2V0cyAtPSBsZW47CisJCX0KKwl9CisKKwlpZiAobnVtX2NlbGxzICsgZGNjcF9hY2t2ZWNfYnVmbGVuKGF2KSA+PSBEQ0NQQVZfTUFYX0FDS1ZFQ19MRU4pIHsKKwkJRENDUF9DUklUKCJBY2sgVmVjdG9yIGJ1ZmZlciBvdmVyZmxvdzogZHJvcHBpbmcgb2xkIGVudHJpZXNcbiIpOworCQlhdi0+YXZfb3ZlcmZsb3cgPSB0cnVlOworCX0KKworCWF2LT5hdl9idWZfaGVhZCA9IF9fYWNrdmVjX2lkeF9zdWIoYXYtPmF2X2J1Zl9oZWFkLCBudW1fcGFja2V0cyk7CisJaWYgKGF2LT5hdl9vdmVyZmxvdykKKwkJYXYtPmF2X2J1Zl90YWlsID0gYXYtPmF2X2J1Zl9oZWFkOworCisJYXYtPmF2X2J1Zlthdi0+YXZfYnVmX2hlYWRdID0gc3RhdGU7CisJYXYtPmF2X2J1Zl9hY2tubwkgICAgPSBzZXFubzsKKworCWlmIChudW1fcGFja2V0cyA+IDEpCisJCWRjY3BfYWNrdmVjX3Jlc2VydmVfc2VhdHMoYXYsIG51bV9wYWNrZXRzIC0gMSk7Cit9CisKKy8qKgorICogZGNjcF9hY2t2ZWNfaW5wdXQgIC0gIFJlZ2lzdGVyIGluY29taW5nIHBhY2tldCBpbiB0aGUgYnVmZmVyCisgKi8KK3ZvaWQgZGNjcF9hY2t2ZWNfaW5wdXQoc3RydWN0IGRjY3BfYWNrdmVjICphdiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwl1NjQgc2Vxbm8gPSBEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF9zZXE7CisJZW51bSBkY2NwX2Fja3ZlY19zdGF0ZXMgc3RhdGUgPSBEQ0NQQVZfUkVDRUlWRUQ7CisKKwlpZiAoZGNjcF9hY2t2ZWNfaXNfZW1wdHkoYXYpKSB7CisJCWRjY3BfYWNrdmVjX2FkZF9uZXcoYXYsIDEsIHNlcW5vLCBzdGF0ZSk7CisJCWF2LT5hdl90YWlsX2Fja25vID0gc2Vxbm87CisKKwl9IGVsc2UgeworCQlzNjQgbnVtX3BhY2tldHMgPSBkY2NwX2RlbHRhX3NlcW5vKGF2LT5hdl9idWZfYWNrbm8sIHNlcW5vKTsKKwkJdTggKmN1cnJlbnRfaGVhZCA9IGF2LT5hdl9idWYgKyBhdi0+YXZfYnVmX2hlYWQ7CisKKwkJaWYgKG51bV9wYWNrZXRzID09IDEgJiYKKwkJICAgIGRjY3BfYWNrdmVjX3N0YXRlKGN1cnJlbnRfaGVhZCkgPT0gc3RhdGUgJiYKKwkJICAgIGRjY3BfYWNrdmVjX3J1bmxlbihjdXJyZW50X2hlYWQpIDwgRENDUEFWX01BWF9SVU5MRU4pIHsKKworCQkJKmN1cnJlbnRfaGVhZCAgICs9IDE7CisJCQlhdi0+YXZfYnVmX2Fja25vID0gc2Vxbm87CisKKwkJfSBlbHNlIGlmIChudW1fcGFja2V0cyA+IDApIHsKKwkJCWRjY3BfYWNrdmVjX2FkZF9uZXcoYXYsIG51bV9wYWNrZXRzLCBzZXFubywgc3RhdGUpOworCQl9IGVsc2UgeworCQkJZGNjcF9hY2t2ZWNfdXBkYXRlX29sZChhdiwgbnVtX3BhY2tldHMsIHNlcW5vLCBzdGF0ZSk7CisJCX0KIAl9CiB9CiAKLWludCBkY2NwX2Fja3ZlY19wYXJzZShzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCi0JCSAgICAgIHU2NCAqYWNrbm8sIGNvbnN0IHU4IG9wdCwgY29uc3QgdTggKnZhbHVlLCBjb25zdCB1OCBsZW4pCisvKioKKyAqIGRjY3BfYWNrdmVjX2NsZWFyX3N0YXRlICAtICBQZXJmb3JtIGhvdXNlLWtlZXBpbmcgLyBnYXJiYWdlLWNvbGxlY3Rpb24KKyAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgd2hlbiB0aGUgcGVlciBhY2tub3dsZWRnZXMgdGhlIHJlY2VpcHQgb2YgQWNrIFZlY3RvcnMKKyAqIHVwIHRvIGFuZCBpbmNsdWRpbmcgQGFja25vLiBXaGlsZSBiYXNlZCBvbiBvbiBzZWN0aW9uIEEuMyBvZiBSRkMgNDM0MCwgaGVyZQorICogYXJlIGFkZGl0aW9uYWwgcHJlY2F1dGlvbnMgdG8gcHJldmVudCBjb3JydXB0ZWQgYnVmZmVyIHN0YXRlLiBJbiBwYXJ0aWN1bGFyLAorICogd2UgdXNlIHRhaWxfYWNrbm8gdG8gaWRlbnRpZnkgb3V0ZGF0ZWQgcmVjb3JkczsgaXQgYWx3YXlzIG1hcmtzIHRoZSBlYXJsaWVzdAorICogcGFja2V0IG9mIGdyb3VwICgyKSBpbiAxMS40LjIuCisgKi8KK3ZvaWQgZGNjcF9hY2t2ZWNfY2xlYXJfc3RhdGUoc3RydWN0IGRjY3BfYWNrdmVjICphdiwgY29uc3QgdTY0IGFja25vKQogewotCWlmIChsZW4gPiBEQ0NQX1NJTkdMRV9PUFRfTUFYTEVOKQotCQlyZXR1cm4gLTE7CisJc3RydWN0IGRjY3BfYWNrdmVjX3JlY29yZCAqYXZyLCAqbmV4dDsKKwl1OCBydW5sZW5fbm93LCBlZmZfcnVubGVuOworCXM2NCBkZWx0YTsKIAotCS8qIGRjY3BfYWNrdmVjdG9yX3ByaW50KERDQ1BfU0tCX0NCKHNrYiktPmRjY3BkX2Fja19zZXEsIHZhbHVlLCBsZW4pOyAqLwotCWRjY3BfYWNrdmVjX2NoZWNrX3Jjdl9hY2t2ZWN0b3IoZGNjcF9zayhzayktPmRjY3BzX2hjX3J4X2Fja3ZlYywgc2ssCi0JCQkJCWFja25vLCBsZW4sIHZhbHVlKTsKKwlhdnIgPSBkY2NwX2Fja3ZlY19sb29rdXAoJmF2LT5hdl9yZWNvcmRzLCBhY2tubyk7CisJaWYgKGF2ciA9PSBOVUxMKQorCQlyZXR1cm47CisJLyoKKwkgKiBEZWFsIHdpdGggb3V0ZGF0ZWQgYWNrbm93bGVkZ21lbnRzOiB0aGlzIGFyaXNlcyB3aGVuIGUuZy4gdGhlcmUgYXJlCisJICogc2V2ZXJhbCBvbGQgcmVjb3JkcyBhbmQgdGhlIGFja3MgZnJvbSB0aGUgcGVlciBjb21lIGluIHNsb3dseS4gSW4KKwkgKiB0aGF0IGNhc2Ugd2UgbWF5IHN0aWxsIGhhdmUgcmVjb3JkcyB0aGF0IHByZS1kYXRlIHRhaWxfYWNrbm8uCisJICovCisJZGVsdGEgPSBkY2NwX2RlbHRhX3NlcW5vKGF2LT5hdl90YWlsX2Fja25vLCBhdnItPmF2cl9hY2tfYWNrbm8pOworCWlmIChkZWx0YSA8IDApCisJCWdvdG8gZnJlZV9yZWNvcmRzOworCS8qCisJICogRGVhbCB3aXRoIG92ZXJsYXBwaW5nIEFjayBWZWN0b3JzOiBkb24ndCBzdWJ0cmFjdCBtb3JlIHRoYW4gdGhlCisJICogbnVtYmVyIG9mIHBhY2tldHMgYmV0d2VlbiB0YWlsX2Fja25vIGFuZCBhY2tfYWNrbm8uCisJICovCisJZWZmX3J1bmxlbiA9IGRlbHRhIDwgYXZyLT5hdnJfYWNrX3J1bmxlbiA/IGRlbHRhIDogYXZyLT5hdnJfYWNrX3J1bmxlbjsKKworCXJ1bmxlbl9ub3cgPSBkY2NwX2Fja3ZlY19ydW5sZW4oYXYtPmF2X2J1ZiArIGF2ci0+YXZyX2Fja19wdHIpOworCS8qCisJICogVGhlIHJ1biBsZW5ndGggb2YgQWNrIFZlY3RvciBjZWxscyBkb2VzIG5vdCBkZWNyZWFzZSBvdmVyIHRpbWUuIElmCisJICogdGhlIHJ1biBsZW5ndGggaXMgdGhlIHNhbWUgYXMgYXQgdGhlIHRpbWUgdGhlIEFjayBWZWN0b3Igd2FzIHNlbnQsIHdlCisJICogZnJlZSB0aGUgYWNrX3B0ciBjZWxsLiBUaGF0IGNlbGwgY2FuIGhvd2V2ZXIgbm90IGJlIGZyZWVkIGlmIHRoZSBydW4KKwkgKiBsZW5ndGggaGFzIGluY3JlYXNlZDogaW4gdGhpcyBjYXNlIHdlIG5lZWQgdG8gbW92ZSB0aGUgdGFpbCBwb2ludGVyCisJICogYmFja3dhcmRzICh0b3dhcmRzIGhpZ2hlciBpbmRpY2VzKSwgdG8gaXRzIG5leHQtb2xkZXN0IG5laWdoYm91ci4KKwkgKi8KKwlpZiAocnVubGVuX25vdyA+IGVmZl9ydW5sZW4pIHsKKworCQlhdi0+YXZfYnVmW2F2ci0+YXZyX2Fja19wdHJdIC09IGVmZl9ydW5sZW4gKyAxOworCQlhdi0+YXZfYnVmX3RhaWwgPSBfX2Fja3ZlY19pZHhfYWRkKGF2ci0+YXZyX2Fja19wdHIsIDEpOworCisJCS8qIFRoaXMgbW92ZSBtYXkgbm90IGhhdmUgY2xlYXJlZCB0aGUgb3ZlcmZsb3cgZmxhZy4gKi8KKwkJaWYgKGF2LT5hdl9vdmVyZmxvdykKKwkJCWF2LT5hdl9vdmVyZmxvdyA9IChhdi0+YXZfYnVmX2hlYWQgPT0gYXYtPmF2X2J1Zl90YWlsKTsKKwl9IGVsc2UgeworCQlhdi0+YXZfYnVmX3RhaWwJPSBhdnItPmF2cl9hY2tfcHRyOworCQkvKgorCQkgKiBXZSBoYXZlIG1hZGUgc3VyZSB0aGF0IGF2ciBwb2ludHMgdG8gYSB2YWxpZCBjZWxsIHdpdGhpbiB0aGUKKwkJICogYnVmZmVyLiBUaGlzIGNlbGwgaXMgZWl0aGVyIG9sZGVyIHRoYW4gaGVhZCwgb3IgZXF1YWxzIGhlYWQKKwkJICogKGVtcHR5IGJ1ZmZlcik6IGluIGJvdGggY2FzZXMgd2Ugbm8gbG9uZ2VyIGhhdmUgYW55IG92ZXJmbG93LgorCQkgKi8KKwkJYXYtPmF2X292ZXJmbG93CT0gMDsKKwl9CisKKwkvKgorCSAqIFRoZSBwZWVyIGhhcyBhY2tub3dsZWRnZWQgdXAgdG8gYW5kIGluY2x1ZGluZyBhY2tfYWNrbm8uIEhlbmNlIHRoZQorCSAqIGZpcnN0IHBhY2tldCBpbiBncm91cCAoMikgb2YgMTEuNC4yIGlzIHRoZSBzdWNjZXNzb3Igb2YgYWNrX2Fja25vLgorCSAqLworCWF2LT5hdl90YWlsX2Fja25vID0gQURENDgoYXZyLT5hdnJfYWNrX2Fja25vLCAxKTsKKworZnJlZV9yZWNvcmRzOgorCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZV9mcm9tKGF2ciwgbmV4dCwgJmF2LT5hdl9yZWNvcmRzLCBhdnJfbm9kZSkgeworCQlsaXN0X2RlbCgmYXZyLT5hdnJfbm9kZSk7CisJCWttZW1fY2FjaGVfZnJlZShkY2NwX2Fja3ZlY19yZWNvcmRfc2xhYiwgYXZyKTsKKwl9Cit9CisKKy8qCisgKglSb3V0aW5lcyB0byBrZWVwIHRyYWNrIG9mIEFjayBWZWN0b3JzIHJlY2VpdmVkIGluIGFuIHNrYgorICovCitpbnQgZGNjcF9hY2t2ZWNfcGFyc2VkX2FkZChzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCB1OCAqdmVjLCB1OCBsZW4sIHU4IG5vbmNlKQoreworCXN0cnVjdCBkY2NwX2Fja3ZlY19wYXJzZWQgKm5ldyA9IGttYWxsb2Moc2l6ZW9mKCpuZXcpLCBHRlBfQVRPTUlDKTsKKworCWlmIChuZXcgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9CVUZTOworCW5ldy0+dmVjICAgPSB2ZWM7CisJbmV3LT5sZW4gICA9IGxlbjsKKwluZXctPm5vbmNlID0gbm9uY2U7CisKKwlsaXN0X2FkZF90YWlsKCZuZXctPm5vZGUsIGhlYWQpOwogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoZGNjcF9hY2t2ZWNfcGFyc2VkX2FkZCk7CisKK3ZvaWQgZGNjcF9hY2t2ZWNfcGFyc2VkX2NsZWFudXAoc3RydWN0IGxpc3RfaGVhZCAqcGFyc2VkX2NodW5rcykKK3sKKwlzdHJ1Y3QgZGNjcF9hY2t2ZWNfcGFyc2VkICpjdXIsICpuZXh0OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGN1ciwgbmV4dCwgcGFyc2VkX2NodW5rcywgbm9kZSkKKwkJa2ZyZWUoY3VyKTsKKwlJTklUX0xJU1RfSEVBRChwYXJzZWRfY2h1bmtzKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRjY3BfYWNrdmVjX3BhcnNlZF9jbGVhbnVwKTsKIAogaW50IF9faW5pdCBkY2NwX2Fja3ZlY19pbml0KHZvaWQpCiB7CkBAIC00NDgsMTAgKzM3OSw5IEBACiAJaWYgKGRjY3BfYWNrdmVjX3NsYWIgPT0gTlVMTCkKIAkJZ290byBvdXRfZXJyOwogCi0JZGNjcF9hY2t2ZWNfcmVjb3JkX3NsYWIgPQotCQkJa21lbV9jYWNoZV9jcmVhdGUoImRjY3BfYWNrdmVjX3JlY29yZCIsCi0JCQkJCSAgc2l6ZW9mKHN0cnVjdCBkY2NwX2Fja3ZlY19yZWNvcmQpLAotCQkJCQkgIDAsIFNMQUJfSFdDQUNIRV9BTElHTiwgTlVMTCk7CisJZGNjcF9hY2t2ZWNfcmVjb3JkX3NsYWIgPSBrbWVtX2NhY2hlX2NyZWF0ZSgiZGNjcF9hY2t2ZWNfcmVjb3JkIiwKKwkJCQkJICAgICBzaXplb2Yoc3RydWN0IGRjY3BfYWNrdmVjX3JlY29yZCksCisJCQkJCSAgICAgMCwgU0xBQl9IV0NBQ0hFX0FMSUdOLCBOVUxMKTsKIAlpZiAoZGNjcF9hY2t2ZWNfcmVjb3JkX3NsYWIgPT0gTlVMTCkKIAkJZ290byBvdXRfZGVzdHJveV9zbGFiOwogCmRpZmYgLS1naXQgYS9uZXQvZGNjcC9hY2t2ZWMuaCBiL25ldC9kY2NwL2Fja3ZlYy5oCmluZGV4IDdlYTU1N2IuLmUyYWIwNjIgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL2Fja3ZlYy5oCisrKyBiL25ldC9kY2NwL2Fja3ZlYy5oCkBAIC0zLDkgKzMsOSBAQAogLyoKICAqICBuZXQvZGNjcC9hY2t2ZWMuaAogICoKLSAqICBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgRENDUCBwcm90b2NvbAorICogIEFuIGltcGxlbWVudGF0aW9uIG9mIEFjayBWZWN0b3JzIGZvciB0aGUgRENDUCBwcm90b2NvbAorICogIENvcHlyaWdodCAoYykgMjAwNyBVbml2ZXJzaXR5IG9mIEFiZXJkZWVuLCBTY290bGFuZCwgVUsKICAqICBDb3B5cmlnaHQgKGMpIDIwMDUgQXJuYWxkbyBDYXJ2YWxobyBkZSBNZWxvIDxhY21lQG1hbmRyaXZhLmNvbT4KLSAqCiAgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICoJdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICAqCXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgpAQCAtMTMsOTkgKzEzLDEyNCBAQAogCiAjaW5jbHVkZSA8bGludXgvZGNjcC5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+Ci0jaW5jbHVkZSA8bGludXgva3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAotLyogV2UgY2FuIHNwcmVhZCBhbiBhY2sgdmVjdG9yIGFjcm9zcyBtdWx0aXBsZSBvcHRpb25zICovCi0jZGVmaW5lIERDQ1BfTUFYX0FDS1ZFQ19MRU4gKERDQ1BfU0lOR0xFX09QVF9NQVhMRU4gKiAyKQorLyoKKyAqIEFjayBWZWN0b3IgYnVmZmVyIHNwYWNlIGlzIHN0YXRpYywgaW4gbXVsdGlwbGVzIG9mICVEQ0NQX1NJTkdMRV9PUFRfTUFYTEVOLAorICogdGhlIG1heGltdW0gc2l6ZSBvZiBhIHNpbmdsZSBBY2sgVmVjdG9yLiBTZXR0aW5nICVEQ0NQQVZfTlVNX0FDS1ZFQ1MgdG8gMQorICogd2lsbCBiZSBzdWZmaWNpZW50IGZvciBtb3N0IGNhc2VzIG9mIGxvdyBBY2sgUmF0aW9zLCB1c2luZyBhIHZhbHVlIG9mIDIgZ2l2ZXMKKyAqIG1vcmUgaGVhZHJvb20gaWYgQWNrIFJhdGlvIGlzIGhpZ2hlciBvciB3aGVuIHRoZSBzZW5kZXIgYWNrbm93bGVkZ2VzIHNsb3dseS4KKyAqIFRoZSBtYXhpbXVtIHZhbHVlIGlzIGJvdW5kZWQgYnkgdGhlIHUxNiB0eXBlcyBmb3IgaW5kaWNlcyBhbmQgZnVuY3Rpb25zLgorICovCisjZGVmaW5lIERDQ1BBVl9OVU1fQUNLVkVDUwkyCisjZGVmaW5lIERDQ1BBVl9NQVhfQUNLVkVDX0xFTgkoRENDUF9TSU5HTEVfT1BUX01BWExFTiAqIERDQ1BBVl9OVU1fQUNLVkVDUykKIAogLyogRXN0aW1hdGVkIG1pbmltdW0gYXZlcmFnZSBBY2sgVmVjdG9yIGxlbmd0aCAtIHVzZWQgZm9yIHVwZGF0aW5nIE1QUyAqLwogI2RlZmluZSBEQ0NQQVZfTUlOX09QVExFTgkxNgogCi0jZGVmaW5lIERDQ1BfQUNLVkVDX1NUQVRFX1JFQ0VJVkVECTAKLSNkZWZpbmUgRENDUF9BQ0tWRUNfU1RBVEVfRUNOX01BUktFRAkoMSA8PCA2KQotI2RlZmluZSBEQ0NQX0FDS1ZFQ19TVEFURV9OT1RfUkVDRUlWRUQJKDMgPDwgNikKKy8qIFRocmVzaG9sZCBmb3IgY29waW5nIHdpdGggbGFyZ2UgYnVyc3RzIG9mIGxvc3NlcyAqLworI2RlZmluZSBEQ0NQQVZfQlVSU1RfVEhSRVNICShEQ0NQQVZfTUFYX0FDS1ZFQ19MRU4gLyA4KQogCi0jZGVmaW5lIERDQ1BfQUNLVkVDX1NUQVRFX01BU0sJCTB4QzAgLyogMTEwMDAwMDAgKi8KLSNkZWZpbmUgRENDUF9BQ0tWRUNfTEVOX01BU0sJCTB4M0YgLyogMDAxMTExMTEgKi8KK2VudW0gZGNjcF9hY2t2ZWNfc3RhdGVzIHsKKwlEQ0NQQVZfUkVDRUlWRUQgPQkweDAwLAorCURDQ1BBVl9FQ05fTUFSS0VEID0JMHg0MCwKKwlEQ0NQQVZfUkVTRVJWRUQgPQkweDgwLAorCURDQ1BBVl9OT1RfUkVDRUlWRUQgPQkweEMwCit9OworI2RlZmluZSBEQ0NQQVZfTUFYX1JVTkxFTgkweDNGCiAKLS8qKiBzdHJ1Y3QgZGNjcF9hY2t2ZWMgLSBhY2sgdmVjdG9yCitzdGF0aWMgaW5saW5lIHU4IGRjY3BfYWNrdmVjX3J1bmxlbihjb25zdCB1OCAqY2VsbCkKK3sKKwlyZXR1cm4gKmNlbGwgJiBEQ0NQQVZfTUFYX1JVTkxFTjsKK30KKworc3RhdGljIGlubGluZSB1OCBkY2NwX2Fja3ZlY19zdGF0ZShjb25zdCB1OCAqY2VsbCkKK3sKKwlyZXR1cm4gKmNlbGwgJiB+RENDUEFWX01BWF9SVU5MRU47Cit9CisKKy8qKiBzdHJ1Y3QgZGNjcF9hY2t2ZWMgLSBBY2sgVmVjdG9yIG1haW4gZGF0YSBzdHJ1Y3R1cmUKICAqCi0gKiBUaGlzIGRhdGEgc3RydWN0dXJlIGlzIHRoZSBvbmUgZGVmaW5lZCBpbiBSRkMgNDM0MCwgQXBwZW5kaXggQS4KKyAqIFRoaXMgaW1wbGVtZW50cyBhIGZpeGVkLXNpemUgY2lyY3VsYXIgYnVmZmVyIHdpdGhpbiBhbiBhcnJheSBhbmQgaXMgbGFyZ2VseQorICogYmFzZWQgb24gQXBwZW5kaXggQSBvZiBSRkMgNDM0MC4KICAqCi0gKiBAYXZfYnVmX2hlYWQgLSBjaXJjdWxhciBidWZmZXIgaGVhZAotICogQGF2X2J1Zl90YWlsIC0gY2lyY3VsYXIgYnVmZmVyIHRhaWwKLSAqIEBhdl9idWZfYWNrbm8gLSBhY2sgIyBvZiB0aGUgbW9zdCByZWNlbnQgcGFja2V0IGFja25vd2xlZGdlYWJsZSBpbiB0aGUKLSAqCQkgICAgICAgYnVmZmVyIChpLmUuICVhdl9idWZfaGVhZCkKLSAqIEBhdl9idWZfbm9uY2UgLSB0aGUgb25lLWJpdCBzdW0gb2YgdGhlIEVDTiBOb25jZXMgb24gYWxsIHBhY2tldHMgYWNrZWQKLSAqIAkJICAgICAgIGJ5IHRoZSBidWZmZXIgd2l0aCBTdGF0ZSAwCi0gKgotICogQWRkaXRpb25hbGx5LCB0aGUgSEMtUmVjZWl2ZXIgbXVzdCBrZWVwIHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgdGhlCi0gKiBBY2sgVmVjdG9ycyBpdCBoYXMgcmVjZW50bHkgc2VudC4gRm9yIGVhY2ggcGFja2V0IHNlbnQgY2FycnlpbmcgYW4KLSAqIEFjayBWZWN0b3IsIGl0IHJlbWVtYmVycyBmb3VyIHZhcmlhYmxlczoKLSAqCi0gKiBAYXZfcmVjb3JkcyAtIGxpc3Qgb2YgZGNjcF9hY2t2ZWNfcmVjb3JkCi0gKiBAYXZfYWNrX25vbmNlIC0gdGhlIG9uZS1iaXQgc3VtIG9mIHRoZSBFQ04gTm9uY2VzIGZvciBhbGwgU3RhdGUgMC4KLSAqCi0gKiBAYXZfdGltZSAtIHRoZSB0aW1lIGluIHVzZWNzCi0gKiBAYXZfYnVmIC0gY2lyY3VsYXIgYnVmZmVyIG9mIGFja25vd2xlZGdlYWJsZSBwYWNrZXRzCisgKiBAYXZfYnVmOgkgICBjaXJjdWxhciBidWZmZXIgc3RvcmFnZSBhcmVhCisgKiBAYXZfYnVmX2hlYWQ6ICAgaGVhZCBpbmRleDsgYmVnaW4gb2YgbGl2ZSBwb3J0aW9uIGluIEBhdl9idWYKKyAqIEBhdl9idWZfdGFpbDogICB0YWlsIGluZGV4OyBmaXJzdCBpbmRleCBfYWZ0ZXJfIHRoZSBsaXZlIHBvcnRpb24gaW4gQGF2X2J1ZgorICogQGF2X2J1Zl9hY2tubzogIGhpZ2hlc3Qgc2Vxbm8gb2YgYWNrbm93bGVkZ2VhYmxlIHBhY2tldCByZWNvcmRlZCBpbiBAYXZfYnVmCisgKiBAYXZfdGFpbF9hY2tubzogbG93ZXN0ICBzZXFubyBvZiBhY2tub3dsZWRnZWFibGUgcGFja2V0IHJlY29yZGVkIGluIEBhdl9idWYKKyAqIEBhdl9idWZfbm9uY2U6ICBFQ04gbm9uY2Ugc3VtcywgZWFjaCBjb3ZlcmluZyBzdWJzZXF1ZW50IHNlZ21lbnRzIG9mIHVwIHRvCisgKgkJICAgJURDQ1BfU0lOR0xFX09QVF9NQVhMRU4gY2VsbHMgaW4gdGhlIGxpdmUgcG9ydGlvbiBvZiBAYXZfYnVmCisgKiBAYXZfb3ZlcmZsb3c6ICAgaWYgMSB0aGVuIGJ1Zl9oZWFkID09IGJ1Zl90YWlsIGluZGljYXRlcyBidWZmZXIgd3JhcGFyb3VuZAorICogQGF2X3JlY29yZHM6CSAgIGxpc3Qgb2YgJWRjY3BfYWNrdmVjX3JlY29yZCAoQWNrIFZlY3RvcnMgc2VudCBwcmV2aW91c2x5KQogICovCiBzdHJ1Y3QgZGNjcF9hY2t2ZWMgewotCXU2NAkJCWF2X2J1Zl9hY2tubzsKLQlzdHJ1Y3QgbGlzdF9oZWFkCWF2X3JlY29yZHM7Ci0Ja3RpbWVfdAkJCWF2X3RpbWU7CisJdTgJCQlhdl9idWZbRENDUEFWX01BWF9BQ0tWRUNfTEVOXTsKIAl1MTYJCQlhdl9idWZfaGVhZDsKLQl1MTYJCQlhdl92ZWNfbGVuOwotCXU4CQkJYXZfYnVmX25vbmNlOwotCXU4CQkJYXZfYWNrX25vbmNlOwotCXU4CQkJYXZfYnVmW0RDQ1BfTUFYX0FDS1ZFQ19MRU5dOworCXUxNgkJCWF2X2J1Zl90YWlsOworCXU2NAkJCWF2X2J1Zl9hY2tubzo0ODsKKwl1NjQJCQlhdl90YWlsX2Fja25vOjQ4OworCWJvb2wJCQlhdl9idWZfbm9uY2VbRENDUEFWX05VTV9BQ0tWRUNTXTsKKwl1OAkJCWF2X292ZXJmbG93OjE7CisJc3RydWN0IGxpc3RfaGVhZAlhdl9yZWNvcmRzOwogfTsKIAotLyoqIHN0cnVjdCBkY2NwX2Fja3ZlY19yZWNvcmQgLSBhY2sgdmVjdG9yIHJlY29yZAorLyoqIHN0cnVjdCBkY2NwX2Fja3ZlY19yZWNvcmQgLSBSZWNvcmRzIGluZm9ybWF0aW9uIGFib3V0IHNlbnQgQWNrIFZlY3RvcnMKICAqCi0gKiBBQ0sgdmVjdG9yIHJlY29yZCBhcyBkZWZpbmVkIGluIEFwcGVuZGl4IEEgb2Ygc3BlYy4KKyAqIFRoZXNlIGxpc3QgZW50cmllcyBkZWZpbmUgdGhlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gd2hpY2ggdGhlIEhDLVJlY2VpdmVyCisgKiBrZWVwcyBhYm91dCByZWNlbnRseS1zZW50IEFjayBWZWN0b3JzOyBhZ2FpbiByZWZlciB0byBSRkMgNDM0MCwgQXBwZW5kaXggQS4KICAqCi0gKiBUaGUgbGlzdCBpcyBzb3J0ZWQgYnkgYXZyX2Fja19zZXFubworICogQGF2cl9ub2RlOgkgICAgdGhlIGxpc3Qgbm9kZSBpbiBAYXZfcmVjb3JkcworICogQGF2cl9hY2tfc2Vxbm86ICBzZXF1ZW5jZSBudW1iZXIgb2YgdGhlIHBhY2tldCB0aGUgQWNrIFZlY3RvciB3YXMgc2VudCBvbgorICogQGF2cl9hY2tfYWNrbm86ICB0aGUgQWNrIG51bWJlciB0aGF0IHRoaXMgcmVjb3JkL0FjayBWZWN0b3IgcmVmZXJzIHRvCisgKiBAYXZyX2Fja19wdHI6ICAgIHBvaW50ZXIgaW50byBAYXZfYnVmIHdoZXJlIHRoaXMgcmVjb3JkIHN0YXJ0cworICogQGF2cl9hY2tfcnVubGVuOiBydW4gbGVuZ3RoIG9mIEBhdnJfYWNrX3B0ciBhdCB0aGUgdGltZSBvZiBzZW5kaW5nCisgKiBAYXZyX2Fja19ub25jZTogIHRoZSBzdW0gb2YgQGF2X2J1Zl9ub25jZSdzIGF0IHRoZSB0aW1lIHRoaXMgcmVjb3JkIHdhcyBzZW50CiAgKgotICogQGF2cl9ub2RlIC0gbm9kZSBpbiBhdl9yZWNvcmRzCi0gKiBAYXZyX2Fja19zZXFubyAtIHNlcXVlbmNlIG51bWJlciBvZiB0aGUgcGFja2V0IHRoaXMgcmVjb3JkIHdhcyBzZW50IG9uCi0gKiBAYXZyX2Fja19hY2tubyAtIHNlcXVlbmNlIG51bWJlciBiZWluZyBhY2tub3dsZWRnZWQKLSAqIEBhdnJfYWNrX3B0ciAtIHBvaW50ZXIgaW50byBhdl9idWYgd2hlcmUgdGhpcyByZWNvcmQgc3RhcnRzCi0gKiBAYXZyX2Fja19ub25jZSAtIGF2X2Fja19ub25jZSBhdCB0aGUgdGltZSB0aGlzIHJlY29yZCB3YXMgc2VudAotICogQGF2cl9zZW50X2xlbiAtIGxlbmdodCBvZiB0aGUgcmVjb3JkIGluIGF2X2J1ZgorICogVGhlIGxpc3QgYXMgYSB3aG9sZSBpcyBzb3J0ZWQgaW4gZGVzY2VuZGluZyBvcmRlciBieSBAYXZyX2Fja19zZXFuby4KICAqLwogc3RydWN0IGRjY3BfYWNrdmVjX3JlY29yZCB7CiAJc3RydWN0IGxpc3RfaGVhZCBhdnJfbm9kZTsKLQl1NjQJCSBhdnJfYWNrX3NlcW5vOwotCXU2NAkJIGF2cl9hY2tfYWNrbm87CisJdTY0CQkgYXZyX2Fja19zZXFubzo0ODsKKwl1NjQJCSBhdnJfYWNrX2Fja25vOjQ4OwogCXUxNgkJIGF2cl9hY2tfcHRyOwotCXUxNgkJIGF2cl9zZW50X2xlbjsKLQl1OAkJIGF2cl9hY2tfbm9uY2U7CisJdTgJCSBhdnJfYWNrX3J1bmxlbjsKKwl1OAkJIGF2cl9hY2tfbm9uY2U6MTsKIH07CiAKLXN0cnVjdCBzb2NrOwotc3RydWN0IHNrX2J1ZmY7Ci0KIGV4dGVybiBpbnQgZGNjcF9hY2t2ZWNfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIGRjY3BfYWNrdmVjX2V4aXQodm9pZCk7CiAKIGV4dGVybiBzdHJ1Y3QgZGNjcF9hY2t2ZWMgKmRjY3BfYWNrdmVjX2FsbG9jKGNvbnN0IGdmcF90IHByaW9yaXR5KTsKIGV4dGVybiB2b2lkIGRjY3BfYWNrdmVjX2ZyZWUoc3RydWN0IGRjY3BfYWNrdmVjICphdik7CiAKLWV4dGVybiBpbnQgZGNjcF9hY2t2ZWNfYWRkKHN0cnVjdCBkY2NwX2Fja3ZlYyAqYXYsIGNvbnN0IHN0cnVjdCBzb2NrICpzaywKLQkJCSAgIGNvbnN0IHU2NCBhY2tubywgY29uc3QgdTggc3RhdGUpOworZXh0ZXJuIHZvaWQgZGNjcF9hY2t2ZWNfaW5wdXQoc3RydWN0IGRjY3BfYWNrdmVjICphdiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50ICBkY2NwX2Fja3ZlY191cGRhdGVfcmVjb3JkcyhzdHJ1Y3QgZGNjcF9hY2t2ZWMgKmF2LCB1NjQgc2VxLCB1OCBzdW0pOworZXh0ZXJuIHZvaWQgZGNjcF9hY2t2ZWNfY2xlYXJfc3RhdGUoc3RydWN0IGRjY3BfYWNrdmVjICphdiwgY29uc3QgdTY0IGFja25vKTsKK2V4dGVybiB1MTYgIGRjY3BfYWNrdmVjX2J1Zmxlbihjb25zdCBzdHJ1Y3QgZGNjcF9hY2t2ZWMgKmF2KTsKIAotZXh0ZXJuIHZvaWQgZGNjcF9hY2t2ZWNfY2hlY2tfcmN2X2Fja25vKHN0cnVjdCBkY2NwX2Fja3ZlYyAqYXYsCi0JCQkJCXN0cnVjdCBzb2NrICpzaywgY29uc3QgdTY0IGFja25vKTsKLWV4dGVybiBpbnQgZGNjcF9hY2t2ZWNfcGFyc2Uoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJICAgICB1NjQgKmFja25vLCBjb25zdCB1OCBvcHQsCi0JCQkgICAgIGNvbnN0IHU4ICp2YWx1ZSwgY29uc3QgdTggbGVuKTsKLQotZXh0ZXJuIGludCBkY2NwX2luc2VydF9vcHRpb25fYWNrdmVjKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGRjY3BfYWNrdmVjX3BlbmRpbmcoY29uc3Qgc3RydWN0IGRjY3BfYWNrdmVjICphdikKK3N0YXRpYyBpbmxpbmUgYm9vbCBkY2NwX2Fja3ZlY19pc19lbXB0eShjb25zdCBzdHJ1Y3QgZGNjcF9hY2t2ZWMgKmF2KQogewotCXJldHVybiBhdi0+YXZfdmVjX2xlbjsKKwlyZXR1cm4gYXYtPmF2X292ZXJmbG93ID09IDAgJiYgYXYtPmF2X2J1Zl9oZWFkID09IGF2LT5hdl9idWZfdGFpbDsKIH0KKworLyoqCisgKiBzdHJ1Y3QgZGNjcF9hY2t2ZWNfcGFyc2VkICAtICBSZWNvcmQgb2Zmc2V0cyBvZiBBY2sgVmVjdG9ycyBpbiBza2IKKyAqIEB2ZWM6CXN0YXJ0IG9mIHZlY3RvciAob2Zmc2V0IGludG8gc2tiKQorICogQGxlbjoJbGVuZ3RoIG9mIEB2ZWMKKyAqIEBub25jZToJd2hldGhlciBAdmVjIGhhZCBhbiBFQ04gbm9uY2Ugb2YgMCBvciAxCisgKiBAbm9kZToJRklGTyAtIGFycmFuZ2VkIGluIGRlc2NlbmRpbmcgb3JkZXIgb2YgYWNrX2Fja25vCisgKiBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIGJ5IENDSURzIHRvIGFjY2VzcyBBY2sgVmVjdG9ycyBpbiBhIHJlY2VpdmVkIHNrYi4KKyAqLworc3RydWN0IGRjY3BfYWNrdmVjX3BhcnNlZCB7CisJdTgJCSAqdmVjLAorCQkJIGxlbiwKKwkJCSBub25jZToxOworCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKK307CisKK2V4dGVybiBpbnQgZGNjcF9hY2t2ZWNfcGFyc2VkX2FkZChzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLAorCQkJCSAgdTggKnZlYywgdTggbGVuLCB1OCBub25jZSk7CitleHRlcm4gdm9pZCBkY2NwX2Fja3ZlY19wYXJzZWRfY2xlYW51cChzdHJ1Y3QgbGlzdF9oZWFkICpwYXJzZWRfY2h1bmtzKTsKICNlbmRpZiAvKiBfQUNLVkVDX0ggKi8KZGlmZiAtLWdpdCBhL25ldC9kY2NwL2NjaWRzL2NjaWQyLmMgYi9uZXQvZGNjcC9jY2lkcy9jY2lkMi5jCmluZGV4IDY1NzZlYWUuLmU5NmQ1ZTggMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL2NjaWRzL2NjaWQyLmMKKysrIGIvbmV0L2RjY3AvY2NpZHMvY2NpZDIuYwpAQCAtMjQ2LDY4ICsyNDYsNiBAQAogI2VuZGlmCiB9CiAKLS8qIFhYWCBMYW1lIGNvZGUgZHVwbGljYXRpb24hCi0gKiByZXR1cm5zIC0xIGlmIG5vbmUgd2FzIGZvdW5kLgotICogZWxzZSByZXR1cm5zIHRoZSBuZXh0IG9mZnNldCB0byB1c2UgaW4gdGhlIGZ1bmN0aW9uIGNhbGwuCi0gKi8KLXN0YXRpYyBpbnQgY2NpZDJfYWNrdmVjdG9yKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZnNldCwKLQkJCSAgIHVuc2lnbmVkIGNoYXIgKip2ZWMsIHVuc2lnbmVkIGNoYXIgKnZlY2xlbikKLXsKLQljb25zdCBzdHJ1Y3QgZGNjcF9oZHIgKmRoID0gZGNjcF9oZHIoc2tiKTsKLQl1bnNpZ25lZCBjaGFyICpvcHRpb25zID0gKHVuc2lnbmVkIGNoYXIgKilkaCArIGRjY3BfaGRyX2xlbihza2IpOwotCXVuc2lnbmVkIGNoYXIgKm9wdF9wdHI7Ci0JY29uc3QgdW5zaWduZWQgY2hhciAqb3B0X2VuZCA9ICh1bnNpZ25lZCBjaGFyICopZGggKwotCQkJCQkoZGgtPmRjY3BoX2RvZmYgKiA0KTsKLQl1bnNpZ25lZCBjaGFyIG9wdCwgbGVuOwotCXVuc2lnbmVkIGNoYXIgKnZhbHVlOwotCi0JQlVHX09OKG9mZnNldCA8IDApOwotCW9wdGlvbnMgKz0gb2Zmc2V0OwotCW9wdF9wdHIgPSBvcHRpb25zOwotCWlmIChvcHRfcHRyID49IG9wdF9lbmQpCi0JCXJldHVybiAtMTsKLQotCXdoaWxlIChvcHRfcHRyICE9IG9wdF9lbmQpIHsKLQkJb3B0ICAgPSAqb3B0X3B0cisrOwotCQlsZW4gICA9IDA7Ci0JCXZhbHVlID0gTlVMTDsKLQotCQkvKiBDaGVjayBpZiB0aGlzIGlzbid0IGEgc2luZ2xlIGJ5dGUgb3B0aW9uICovCi0JCWlmIChvcHQgPiBEQ0NQT19NQVhfUkVTRVJWRUQpIHsKLQkJCWlmIChvcHRfcHRyID09IG9wdF9lbmQpCi0JCQkJZ290byBvdXRfaW52YWxpZF9vcHRpb247Ci0KLQkJCWxlbiA9ICpvcHRfcHRyKys7Ci0JCQlpZiAobGVuIDwgMykKLQkJCQlnb3RvIG91dF9pbnZhbGlkX29wdGlvbjsKLQkJCS8qCi0JCQkgKiBSZW1vdmUgdGhlIHR5cGUgYW5kIGxlbiBmaWVsZHMsIGxlYXZpbmcKLQkJCSAqIGp1c3QgdGhlIHZhbHVlIHNpemUKLQkJCSAqLwotCQkJbGVuICAgICAtPSAyOwotCQkJdmFsdWUgICA9IG9wdF9wdHI7Ci0JCQlvcHRfcHRyICs9IGxlbjsKLQotCQkJaWYgKG9wdF9wdHIgPiBvcHRfZW5kKQotCQkJCWdvdG8gb3V0X2ludmFsaWRfb3B0aW9uOwotCQl9Ci0KLQkJc3dpdGNoIChvcHQpIHsKLQkJY2FzZSBEQ0NQT19BQ0tfVkVDVE9SXzA6Ci0JCWNhc2UgRENDUE9fQUNLX1ZFQ1RPUl8xOgotCQkJKnZlYwk9IHZhbHVlOwotCQkJKnZlY2xlbiA9IGxlbjsKLQkJCXJldHVybiBvZmZzZXQgKyAob3B0X3B0ciAtIG9wdGlvbnMpOwotCQl9Ci0JfQotCi0JcmV0dXJuIC0xOwotCi1vdXRfaW52YWxpZF9vcHRpb246Ci0JRENDUF9CVUcoIkludmFsaWQgb3B0aW9uIC0gdGhpcyBzaG91bGQgbm90IGhhcHBlbiAocHJldmlvdXMgcGFyc2luZykhIik7Ci0JcmV0dXJuIC0xOwotfQotCiAvKioKICAqIGNjaWQyX3J0dF9lc3RpbWF0b3IgLSBTYW1wbGUgUlRUIGFuZCBjb21wdXRlIFJUTyB1c2luZyBSRkMyOTg4IGFsZ29yaXRobQogICogVGhpcyBjb2RlIGlzIGFsbW9zdCBpZGVudGljYWwgd2l0aCBUQ1AncyB0Y3BfcnR0X2VzdGltYXRvcigpLCBzaW5jZQpAQCAtNDMyLDE2ICszNzAsMjggQEAKIAkJY2NpZDJfY2hhbmdlX2xfYWNrX3JhdGlvKHNrLCBoYy0+dHhfY3duZCk7CiB9CiAKK3N0YXRpYyBpbnQgY2NpZDJfaGNfdHhfcGFyc2Vfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHU4IHBhY2tldF90eXBlLAorCQkJCSAgICAgdTggb3B0aW9uLCB1OCAqb3B0dmFsLCB1OCBvcHRsZW4pCit7CisJc3RydWN0IGNjaWQyX2hjX3R4X3NvY2sgKmhjID0gY2NpZDJfaGNfdHhfc2soc2spOworCisJc3dpdGNoIChvcHRpb24pIHsKKwljYXNlIERDQ1BPX0FDS19WRUNUT1JfMDoKKwljYXNlIERDQ1BPX0FDS19WRUNUT1JfMToKKwkJcmV0dXJuIGRjY3BfYWNrdmVjX3BhcnNlZF9hZGQoJmhjLT50eF9hdl9jaHVua3MsIG9wdHZhbCwgb3B0bGVuLAorCQkJCQkgICAgICBvcHRpb24gLSBEQ0NQT19BQ0tfVkVDVE9SXzApOworCX0KKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHZvaWQgY2NpZDJfaGNfdHhfcGFja2V0X3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBkY2NwX3NvY2sgKmRwID0gZGNjcF9zayhzayk7CiAJc3RydWN0IGNjaWQyX2hjX3R4X3NvY2sgKmhjID0gY2NpZDJfaGNfdHhfc2soc2spOwogCWNvbnN0IGJvb2wgc2VuZGVyX3dhc19ibG9ja2VkID0gY2NpZDJfY3duZF9uZXR3b3JrX2xpbWl0ZWQoaGMpOworCXN0cnVjdCBkY2NwX2Fja3ZlY19wYXJzZWQgKmF2cDsKIAl1NjQgYWNrbm8sIHNlcW5vOwogCXN0cnVjdCBjY2lkMl9zZXEgKnNlcXA7Ci0JdW5zaWduZWQgY2hhciAqdmVjdG9yOwotCXVuc2lnbmVkIGNoYXIgdmVjbGVuOwotCWludCBvZmZzZXQgPSAwOwogCWludCBkb25lID0gMDsKIAl1bnNpZ25lZCBpbnQgbWF4aW5jciA9IDA7CiAKQEAgLTQ3NSwxNyArNDI1LDEyIEBACiAJfQogCiAJLyogY2hlY2sgZm9yd2FyZCBwYXRoIGNvbmdlc3Rpb24gKi8KLQkvKiBzdGlsbCBkaWRuJ3Qgc2VuZCBvdXQgbmV3IGRhdGEgcGFja2V0cyAqLwotCWlmIChoYy0+dHhfc2VxaCA9PSBoYy0+dHhfc2VxdCkKKwlpZiAoZGNjcF9wYWNrZXRfd2l0aG91dF9hY2soc2tiKSkKIAkJcmV0dXJuOwogCi0Jc3dpdGNoIChEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF90eXBlKSB7Ci0JY2FzZSBEQ0NQX1BLVF9BQ0s6Ci0JY2FzZSBEQ0NQX1BLVF9EQVRBQUNLOgotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm47Ci0JfQorCS8qIHN0aWxsIGRpZG4ndCBzZW5kIG91dCBuZXcgZGF0YSBwYWNrZXRzICovCisJaWYgKGhjLT50eF9zZXFoID09IGhjLT50eF9zZXF0KQorCQlnb3RvIGRvbmU7CiAKIAlhY2tubyA9IERDQ1BfU0tCX0NCKHNrYiktPmRjY3BkX2Fja19zZXE7CiAJaWYgKGFmdGVyNDgoYWNrbm8sIGhjLT50eF9oaWdoX2FjaykpCkBAIC01MDksMTYgKzQ1NCwxNiBAQAogCQltYXhpbmNyID0gRElWX1JPVU5EX1VQKGRwLT5kY2Nwc19sX2Fja19yYXRpbywgMik7CiAKIAkvKiBnbyB0aHJvdWdoIGFsbCBhY2sgdmVjdG9ycyAqLwotCXdoaWxlICgob2Zmc2V0ID0gY2NpZDJfYWNrdmVjdG9yKHNrLCBza2IsIG9mZnNldCwKLQkJCQkJICZ2ZWN0b3IsICZ2ZWNsZW4pKSAhPSAtMSkgeworCWxpc3RfZm9yX2VhY2hfZW50cnkoYXZwLCAmaGMtPnR4X2F2X2NodW5rcywgbm9kZSkgewogCQkvKiBnbyB0aHJvdWdoIHRoaXMgYWNrIHZlY3RvciAqLwotCQl3aGlsZSAodmVjbGVuLS0pIHsKLQkJCWNvbnN0IHU4IHJsID0gKnZlY3RvciAmIERDQ1BfQUNLVkVDX0xFTl9NQVNLOwotCQkJdTY0IGFja25vX2VuZF9ybCA9IFNVQjQ4KGFja25vLCBybCk7CisJCWZvciAoOyBhdnAtPmxlbi0tOyBhdnAtPnZlYysrKSB7CisJCQl1NjQgYWNrbm9fZW5kX3JsID0gU1VCNDgoYWNrbm8sCisJCQkJCQkgZGNjcF9hY2t2ZWNfcnVubGVuKGF2cC0+dmVjKSk7CiAKLQkJCWNjaWQyX3ByX2RlYnVnKCJhY2t2ZWMgc3RhcnQ6JWxsdSBlbmQ6JWxsdVxuIiwKKwkJCWNjaWQyX3ByX2RlYnVnKCJhY2t2ZWMgJWxsdSB8JXUsJXV8XG4iLAogCQkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWFja25vLAotCQkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWFja25vX2VuZF9ybCk7CisJCQkJICAgICAgIGRjY3BfYWNrdmVjX3N0YXRlKGF2cC0+dmVjKSA+PiA2LAorCQkJCSAgICAgICBkY2NwX2Fja3ZlY19ydW5sZW4oYXZwLT52ZWMpKTsKIAkJCS8qIGlmIHRoZSBzZXFubyB3ZSBhcmUgYW5hbHl6aW5nIGlzIGxhcmdlciB0aGFuIHRoZQogCQkJICogY3VycmVudCBhY2tubywgdGhlbiBtb3ZlIHRvd2FyZHMgdGhlIHRhaWwgb2Ygb3VyCiAJCQkgKiBzZXFub3MuCkBAIC01MzcsMTcgKzQ4MiwxNSBAQAogCQkJICogcnVuIGxlbmd0aAogCQkJICovCiAJCQl3aGlsZSAoYmV0d2VlbjQ4KHNlcXAtPmNjaWQyc19zZXEsYWNrbm9fZW5kX3JsLGFja25vKSkgewotCQkJCWNvbnN0IHU4IHN0YXRlID0gKnZlY3RvciAmCi0JCQkJCQkgRENDUF9BQ0tWRUNfU1RBVEVfTUFTSzsKKwkJCQljb25zdCB1OCBzdGF0ZSA9IGRjY3BfYWNrdmVjX3N0YXRlKGF2cC0+dmVjKTsKIAogCQkJCS8qIG5ldyBwYWNrZXQgcmVjZWl2ZWQgb3IgbWFya2VkICovCi0JCQkJaWYgKHN0YXRlICE9IERDQ1BfQUNLVkVDX1NUQVRFX05PVF9SRUNFSVZFRCAmJgorCQkJCWlmIChzdGF0ZSAhPSBEQ0NQQVZfTk9UX1JFQ0VJVkVEICYmCiAJCQkJICAgICFzZXFwLT5jY2lkMnNfYWNrZWQpIHsKLQkJCQkJaWYgKHN0YXRlID09Ci0JCQkJCSAgICBEQ0NQX0FDS1ZFQ19TVEFURV9FQ05fTUFSS0VEKSB7CisJCQkJCWlmIChzdGF0ZSA9PSBEQ0NQQVZfRUNOX01BUktFRCkKIAkJCQkJCWNjaWQyX2Nvbmdlc3Rpb25fZXZlbnQoc2ssCiAJCQkJCQkJCSAgICAgICBzZXFwKTsKLQkJCQkJfSBlbHNlCisJCQkJCWVsc2UKIAkJCQkJCWNjaWQyX25ld19hY2soc2ssIHNlcXAsCiAJCQkJCQkJICAgICAgJm1heGluY3IpOwogCkBAIC01NjYsNyArNTA5LDYgQEAKIAkJCQlicmVhazsKIAogCQkJYWNrbm8gPSBTVUI0OChhY2tub19lbmRfcmwsIDEpOwotCQkJdmVjdG9yKys7CiAJCX0KIAkJaWYgKGRvbmUpCiAJCQlicmVhazsKQEAgLTYzNCwxMCArNTc2LDExIEBACiAJCXNrX3N0b3BfdGltZXIoc2ssICZoYy0+dHhfcnRvdGltZXIpOwogCWVsc2UKIAkJc2tfcmVzZXRfdGltZXIoc2ssICZoYy0+dHhfcnRvdGltZXIsIGppZmZpZXMgKyBoYy0+dHhfcnRvKTsKLQorZG9uZToKIAkvKiBjaGVjayBpZiBpbmNvbWluZyBBY2tzIGFsbG93IHBlbmRpbmcgcGFja2V0cyB0byBiZSBzZW50ICovCiAJaWYgKHNlbmRlcl93YXNfYmxvY2tlZCAmJiAhY2NpZDJfY3duZF9uZXR3b3JrX2xpbWl0ZWQoaGMpKQogCQl0YXNrbGV0X3NjaGVkdWxlKCZkY2NwX3NrKHNrKS0+ZGNjcHNfeG1pdGxldCk7CisJZGNjcF9hY2t2ZWNfcGFyc2VkX2NsZWFudXAoJmhjLT50eF9hdl9jaHVua3MpOwogfQogCiBzdGF0aWMgaW50IGNjaWQyX2hjX3R4X2luaXQoc3RydWN0IGNjaWQgKmNjaWQsIHN0cnVjdCBzb2NrICpzaykKQEAgLTY2Niw2ICs2MDksNyBAQAogCWhjLT50eF9sYXN0X2NvbmcgPSBjY2lkMl90aW1lX3N0YW1wOwogCXNldHVwX3RpbWVyKCZoYy0+dHhfcnRvdGltZXIsIGNjaWQyX2hjX3R4X3J0b19leHBpcmUsCiAJCQkodW5zaWduZWQgbG9uZylzayk7CisJSU5JVF9MSVNUX0hFQUQoJmhjLT50eF9hdl9jaHVua3MpOwogCXJldHVybiAwOwogfQogCkBAIC02OTksMTYgKzY0MywxNyBAQAogfQogCiBzdHJ1Y3QgY2NpZF9vcGVyYXRpb25zIGNjaWQyX29wcyA9IHsKLQkuY2NpZF9pZAkJPSBEQ0NQQ19DQ0lEMiwKLQkuY2NpZF9uYW1lCQk9ICJUQ1AtbGlrZSIsCi0JLmNjaWRfaGNfdHhfb2JqX3NpemUJPSBzaXplb2Yoc3RydWN0IGNjaWQyX2hjX3R4X3NvY2spLAotCS5jY2lkX2hjX3R4X2luaXQJPSBjY2lkMl9oY190eF9pbml0LAotCS5jY2lkX2hjX3R4X2V4aXQJPSBjY2lkMl9oY190eF9leGl0LAotCS5jY2lkX2hjX3R4X3NlbmRfcGFja2V0CT0gY2NpZDJfaGNfdHhfc2VuZF9wYWNrZXQsCi0JLmNjaWRfaGNfdHhfcGFja2V0X3NlbnQJPSBjY2lkMl9oY190eF9wYWNrZXRfc2VudCwKLQkuY2NpZF9oY190eF9wYWNrZXRfcmVjdgk9IGNjaWQyX2hjX3R4X3BhY2tldF9yZWN2LAotCS5jY2lkX2hjX3J4X29ial9zaXplCT0gc2l6ZW9mKHN0cnVjdCBjY2lkMl9oY19yeF9zb2NrKSwKLQkuY2NpZF9oY19yeF9wYWNrZXRfcmVjdgk9IGNjaWQyX2hjX3J4X3BhY2tldF9yZWN2LAorCS5jY2lkX2lkCQkgID0gRENDUENfQ0NJRDIsCisJLmNjaWRfbmFtZQkJICA9ICJUQ1AtbGlrZSIsCisJLmNjaWRfaGNfdHhfb2JqX3NpemUJICA9IHNpemVvZihzdHJ1Y3QgY2NpZDJfaGNfdHhfc29jayksCisJLmNjaWRfaGNfdHhfaW5pdAkgID0gY2NpZDJfaGNfdHhfaW5pdCwKKwkuY2NpZF9oY190eF9leGl0CSAgPSBjY2lkMl9oY190eF9leGl0LAorCS5jY2lkX2hjX3R4X3NlbmRfcGFja2V0CSAgPSBjY2lkMl9oY190eF9zZW5kX3BhY2tldCwKKwkuY2NpZF9oY190eF9wYWNrZXRfc2VudAkgID0gY2NpZDJfaGNfdHhfcGFja2V0X3NlbnQsCisJLmNjaWRfaGNfdHhfcGFyc2Vfb3B0aW9ucyA9IGNjaWQyX2hjX3R4X3BhcnNlX29wdGlvbnMsCisJLmNjaWRfaGNfdHhfcGFja2V0X3JlY3YJICA9IGNjaWQyX2hjX3R4X3BhY2tldF9yZWN2LAorCS5jY2lkX2hjX3J4X29ial9zaXplCSAgPSBzaXplb2Yoc3RydWN0IGNjaWQyX2hjX3J4X3NvY2spLAorCS5jY2lkX2hjX3J4X3BhY2tldF9yZWN2CSAgPSBjY2lkMl9oY19yeF9wYWNrZXRfcmVjdiwKIH07CiAKICNpZmRlZiBDT05GSUdfSVBfRENDUF9DQ0lEMl9ERUJVRwpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvY2NpZHMvY2NpZDIuaCBiL25ldC9kY2NwL2NjaWRzL2NjaWQyLmgKaW5kZXggMjVjYjZiMi4uZTk5ODVkYSAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvY2NpZHMvY2NpZDIuaAorKysgYi9uZXQvZGNjcC9jY2lkcy9jY2lkMi5oCkBAIC01NSw2ICs1NSw3IEBACiAgKiBAdHhfcnR0X3NlcToJCSAgICAgdG8gZGVjYXkgUlRUVkFSIGF0IG1vc3Qgb25jZSBwZXIgZmxpZ2h0CiAgKiBAdHhfcnBzZXE6CQkgICAgIGxhc3QgY29uc2VjdXRpdmUgc2Vxbm8KICAqIEB0eF9ycGR1cGFjazoJICAgICBkdXBhY2tzIHNpbmNlIHJwc2VxCisgKiBAdHhfYXZfY2h1bmtzOgkgICAgIGxpc3Qgb2YgQWNrIFZlY3RvcnMgcmVjZWl2ZWQgb24gY3VycmVudCBza2IKICAqLwogc3RydWN0IGNjaWQyX2hjX3R4X3NvY2sgewogCXUzMgkJCXR4X2N3bmQ7CkBAIC03OSw2ICs4MCw3IEBACiAJaW50CQkJdHhfcnBkdXBhY2s7CiAJdTMyCQkJdHhfbGFzdF9jb25nOwogCXU2NAkJCXR4X2hpZ2hfYWNrOworCXN0cnVjdCBsaXN0X2hlYWQJdHhfYXZfY2h1bmtzOwogfTsKIAogc3RhdGljIGlubGluZSBib29sIGNjaWQyX2N3bmRfbmV0d29ya19saW1pdGVkKHN0cnVjdCBjY2lkMl9oY190eF9zb2NrICpoYykKZGlmZiAtLWdpdCBhL25ldC9kY2NwL2RjY3AuaCBiL25ldC9kY2NwL2RjY3AuaAppbmRleCBhOGVkNDU5Li40NTA4NzA1IDEwMDY0NAotLS0gYS9uZXQvZGNjcC9kY2NwLmgKKysrIGIvbmV0L2RjY3AvZGNjcC5oCkBAIC05Myw5ICs5Myw2IEBACiAjZGVmaW5lIERDQ1BfRkFMTEJBQ0tfUlRUCShVU0VDX1BFUl9TRUMgLyA1KQogI2RlZmluZSBEQ0NQX1NBTkVfUlRUX01BWAkoMyAqIFVTRUNfUEVSX1NFQykKIAotLyogTWF4aW1hbCBpbnRlcnZhbCBiZXR3ZWVuIHByb2JlcyBmb3IgbG9jYWwgcmVzb3VyY2VzLiAgKi8KLSNkZWZpbmUgRENDUF9SRVNPVVJDRV9QUk9CRV9JTlRFUlZBTCAoKHVuc2lnbmVkKShIWiAvIDJVKSkKLQogLyogc3lzY3RsIHZhcmlhYmxlcyBmb3IgRENDUCAqLwogZXh0ZXJuIGludCAgc3lzY3RsX2RjY3BfcmVxdWVzdF9yZXRyaWVzOwogZXh0ZXJuIGludCAgc3lzY3RsX2RjY3BfcmV0cmllczE7CkBAIC0yMDMsMTIgKzIwMCw3IEBACiBERUNMQVJFX1NOTVBfU1RBVChzdHJ1Y3QgZGNjcF9taWIsIGRjY3Bfc3RhdGlzdGljcyk7CiAjZGVmaW5lIERDQ1BfSU5DX1NUQVRTKGZpZWxkKQkgICAgU05NUF9JTkNfU1RBVFMoZGNjcF9zdGF0aXN0aWNzLCBmaWVsZCkKICNkZWZpbmUgRENDUF9JTkNfU1RBVFNfQkgoZmllbGQpICAgIFNOTVBfSU5DX1NUQVRTX0JIKGRjY3Bfc3RhdGlzdGljcywgZmllbGQpCi0jZGVmaW5lIERDQ1BfSU5DX1NUQVRTX1VTRVIoZmllbGQpICBTTk1QX0lOQ19TVEFUU19VU0VSKGRjY3Bfc3RhdGlzdGljcywgZmllbGQpCiAjZGVmaW5lIERDQ1BfREVDX1NUQVRTKGZpZWxkKQkgICAgU05NUF9ERUNfU1RBVFMoZGNjcF9zdGF0aXN0aWNzLCBmaWVsZCkKLSNkZWZpbmUgRENDUF9BRERfU1RBVFNfQkgoZmllbGQsIHZhbCkgXAotCQkJU05NUF9BRERfU1RBVFNfQkgoZGNjcF9zdGF0aXN0aWNzLCBmaWVsZCwgdmFsKQotI2RlZmluZSBEQ0NQX0FERF9TVEFUU19VU0VSKGZpZWxkLCB2YWwpCVwKLQkJCVNOTVBfQUREX1NUQVRTX1VTRVIoZGNjcF9zdGF0aXN0aWNzLCBmaWVsZCwgdmFsKQogCiAvKgogICogCUNoZWNrc3VtbWluZyByb3V0aW5lcwpAQCAtMjQzLDYgKzIzNSwxOSBAQAogZXh0ZXJuIHZvaWQgZGNjcF9zZW5kX3N5bmMoc3RydWN0IHNvY2sgKnNrLCBjb25zdCB1NjQgc2VxLAogCQkJICAgY29uc3QgZW51bSBkY2NwX3BrdF90eXBlIHBrdF90eXBlKTsKIAorLyoKKyAqIFRYIFBhY2tldCBEZXF1ZXVlaW5nIEludGVyZmFjZQorICovCitleHRlcm4gdm9pZAkJZGNjcF9xcG9saWN5X3B1c2goc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBib29sCQlkY2NwX3Fwb2xpY3lfZnVsbChzdHJ1Y3Qgc29jayAqc2spOworZXh0ZXJuIHZvaWQJCWRjY3BfcXBvbGljeV9kcm9wKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gc3RydWN0IHNrX2J1ZmYJKmRjY3BfcXBvbGljeV90b3Aoc3RydWN0IHNvY2sgKnNrKTsKK2V4dGVybiBzdHJ1Y3Qgc2tfYnVmZgkqZGNjcF9xcG9saWN5X3BvcChzdHJ1Y3Qgc29jayAqc2spOworZXh0ZXJuIGJvb2wJCWRjY3BfcXBvbGljeV9wYXJhbV9vayhzdHJ1Y3Qgc29jayAqc2ssIF9fYmUzMiBwYXJhbSk7CisKKy8qCisgKiBUWCBQYWNrZXQgT3V0cHV0IGFuZCBUWCBUaW1lcnMKKyAqLwogZXh0ZXJuIHZvaWQgICBkY2NwX3dyaXRlX3htaXQoc3RydWN0IHNvY2sgKnNrKTsKIGV4dGVybiB2b2lkICAgZGNjcF93cml0ZV9zcGFjZShzdHJ1Y3Qgc29jayAqc2spOwogZXh0ZXJuIHZvaWQgICBkY2NwX2ZsdXNoX3dyaXRlX3F1ZXVlKHN0cnVjdCBzb2NrICpzaywgbG9uZyAqdGltZV9idWRnZXQpOwpAQCAtNDU3LDEyICs0NjIsMTUgQEAKIAlkcC0+ZGNjcHNfYXdoID0gZHAtPmRjY3BzX2dzczsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgZGNjcF9hY2t2ZWNfcGVuZGluZyhjb25zdCBzdHJ1Y3Qgc29jayAqc2spCit7CisJcmV0dXJuIGRjY3Bfc2soc2spLT5kY2Nwc19oY19yeF9hY2t2ZWMgIT0gTlVMTCAmJgorCSAgICAgICAhZGNjcF9hY2t2ZWNfaXNfZW1wdHkoZGNjcF9zayhzayktPmRjY3BzX2hjX3J4X2Fja3ZlYyk7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IGRjY3BfYWNrX3BlbmRpbmcoY29uc3Qgc3RydWN0IHNvY2sgKnNrKQogewotCWNvbnN0IHN0cnVjdCBkY2NwX3NvY2sgKmRwID0gZGNjcF9zayhzayk7Ci0JcmV0dXJuIChkcC0+ZGNjcHNfaGNfcnhfYWNrdmVjICE9IE5VTEwgJiYKLQkJZGNjcF9hY2t2ZWNfcGVuZGluZyhkcC0+ZGNjcHNfaGNfcnhfYWNrdmVjKSkgfHwKLQkgICAgICAgaW5ldF9jc2tfYWNrX3NjaGVkdWxlZChzayk7CisJcmV0dXJuIGRjY3BfYWNrdmVjX3BlbmRpbmcoc2spIHx8IGluZXRfY3NrX2Fja19zY2hlZHVsZWQoc2spOwogfQogCiBleHRlcm4gaW50ICBkY2NwX2ZlYXRfZmluYWxpc2Vfc2V0dGluZ3Moc3RydWN0IGRjY3Bfc29jayAqZHApOwpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvaW5wdXQuYyBiL25ldC9kY2NwL2lucHV0LmMKaW5kZXggZTQyNGEwOS4uMTVhZjI0NyAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvaW5wdXQuYworKysgYi9uZXQvZGNjcC9pbnB1dC5jCkBAIC0xNjAsMTMgKzE2MCwxNSBAQAogCWRjY3BfdGltZV93YWl0KHNrLCBEQ0NQX1RJTUVfV0FJVCwgMCk7CiB9CiAKLXN0YXRpYyB2b2lkIGRjY3BfZXZlbnRfYWNrX3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIHZvaWQgZGNjcF9oYW5kbGVfYWNrdmVjX3Byb2Nlc3Npbmcoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBkY2NwX3NvY2sgKmRwID0gZGNjcF9zayhzayk7CisJc3RydWN0IGRjY3BfYWNrdmVjICphdiA9IGRjY3Bfc2soc2spLT5kY2Nwc19oY19yeF9hY2t2ZWM7CiAKLQlpZiAoZHAtPmRjY3BzX2hjX3J4X2Fja3ZlYyAhPSBOVUxMKQotCQlkY2NwX2Fja3ZlY19jaGVja19yY3ZfYWNrbm8oZHAtPmRjY3BzX2hjX3J4X2Fja3ZlYywgc2ssCi0JCQkJCSAgICBEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF9hY2tfc2VxKTsKKwlpZiAoYXYgPT0gTlVMTCkKKwkJcmV0dXJuOworCWlmIChEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF9hY2tfc2VxICE9IERDQ1BfUEtUX1dJVEhPVVRfQUNLX1NFUSkKKwkJZGNjcF9hY2t2ZWNfY2xlYXJfc3RhdGUoYXYsIERDQ1BfU0tCX0NCKHNrYiktPmRjY3BkX2Fja19zZXEpOworCWRjY3BfYWNrdmVjX2lucHV0KGF2LCBza2IpOwogfQogCiBzdGF0aWMgdm9pZCBkY2NwX2RlbGl2ZXJfaW5wdXRfdG9fY2NpZHMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpAQCAtMzY2LDIyICszNjgsMTMgQEAKIGludCBkY2NwX3Jjdl9lc3RhYmxpc2hlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgY29uc3Qgc3RydWN0IGRjY3BfaGRyICpkaCwgY29uc3QgdW5zaWduZWQgbGVuKQogewotCXN0cnVjdCBkY2NwX3NvY2sgKmRwID0gZGNjcF9zayhzayk7Ci0KIAlpZiAoZGNjcF9jaGVja19zZXFubyhzaywgc2tiKSkKIAkJZ290byBkaXNjYXJkOwogCiAJaWYgKGRjY3BfcGFyc2Vfb3B0aW9ucyhzaywgTlVMTCwgc2tiKSkKIAkJcmV0dXJuIDE7CiAKLQlpZiAoRENDUF9TS0JfQ0Ioc2tiKS0+ZGNjcGRfYWNrX3NlcSAhPSBEQ0NQX1BLVF9XSVRIT1VUX0FDS19TRVEpCi0JCWRjY3BfZXZlbnRfYWNrX3JlY3Yoc2ssIHNrYik7Ci0KLQlpZiAoZHAtPmRjY3BzX2hjX3J4X2Fja3ZlYyAhPSBOVUxMICYmCi0JICAgIGRjY3BfYWNrdmVjX2FkZChkcC0+ZGNjcHNfaGNfcnhfYWNrdmVjLCBzaywKLQkJCSAgICBEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF9zZXEsCi0JCQkgICAgRENDUF9BQ0tWRUNfU1RBVEVfUkVDRUlWRUQpKQotCQlnb3RvIGRpc2NhcmQ7CisJZGNjcF9oYW5kbGVfYWNrdmVjX3Byb2Nlc3Npbmcoc2ssIHNrYik7CiAJZGNjcF9kZWxpdmVyX2lucHV0X3RvX2NjaWRzKHNrLCBza2IpOwogCiAJcmV0dXJuIF9fZGNjcF9yY3ZfZXN0YWJsaXNoZWQoc2ssIHNrYiwgZGgsIGxlbik7CkBAIC02MzMsMTUgKzYyNiw3IEBACiAJCWlmIChkY2NwX3BhcnNlX29wdGlvbnMoc2ssIE5VTEwsIHNrYikpCiAJCQlyZXR1cm4gMTsKIAotCQlpZiAoZGNiLT5kY2NwZF9hY2tfc2VxICE9IERDQ1BfUEtUX1dJVEhPVVRfQUNLX1NFUSkKLQkJCWRjY3BfZXZlbnRfYWNrX3JlY3Yoc2ssIHNrYik7Ci0KLQkJaWYgKGRwLT5kY2Nwc19oY19yeF9hY2t2ZWMgIT0gTlVMTCAmJgotCQkgICAgZGNjcF9hY2t2ZWNfYWRkKGRwLT5kY2Nwc19oY19yeF9hY2t2ZWMsIHNrLAotCQkJCSAgICBEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF9zZXEsCi0JCQkJICAgIERDQ1BfQUNLVkVDX1NUQVRFX1JFQ0VJVkVEKSkKLQkJCWdvdG8gZGlzY2FyZDsKLQorCQlkY2NwX2hhbmRsZV9hY2t2ZWNfcHJvY2Vzc2luZyhzaywgc2tiKTsKIAkJZGNjcF9kZWxpdmVyX2lucHV0X3RvX2NjaWRzKHNrLCBza2IpOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvaXB2NC5jIGIvbmV0L2RjY3AvaXB2NC5jCmluZGV4IDNmNjllYTEuLjQ1YTQzNGYgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL2lwdjQuYworKysgYi9uZXQvZGNjcC9pcHY0LmMKQEAgLTQ2MiwxNSArNDYyLDEyIEBACiB7CiAJc3RydWN0IHJ0YWJsZSAqcnQ7CiAJc3RydWN0IGZsb3dpIGZsID0geyAub2lmID0gc2tiX3J0YWJsZShza2IpLT5ydF9paWYsCi0JCQkgICAgLm5sX3UgPSB7IC5pcDRfdSA9Ci0JCQkJICAgICAgeyAuZGFkZHIgPSBpcF9oZHIoc2tiKS0+c2FkZHIsCi0JCQkJCS5zYWRkciA9IGlwX2hkcihza2IpLT5kYWRkciwKLQkJCQkJLnRvcyA9IFJUX0NPTk5fRkxBR1Moc2spIH0gfSwKKwkJCSAgICAuZmw0X2RzdCA9IGlwX2hkcihza2IpLT5zYWRkciwKKwkJCSAgICAuZmw0X3NyYyA9IGlwX2hkcihza2IpLT5kYWRkciwKKwkJCSAgICAuZmw0X3RvcyA9IFJUX0NPTk5fRkxBR1Moc2spLAogCQkJICAgIC5wcm90byA9IHNrLT5za19wcm90b2NvbCwKLQkJCSAgICAudWxpX3UgPSB7IC5wb3J0cyA9Ci0JCQkJICAgICAgIHsgLnNwb3J0ID0gZGNjcF9oZHIoc2tiKS0+ZGNjcGhfZHBvcnQsCi0JCQkJCSAuZHBvcnQgPSBkY2NwX2hkcihza2IpLT5kY2NwaF9zcG9ydCB9Ci0JCQkJICAgICB9CisJCQkgICAgLmZsX2lwX3Nwb3J0ID0gZGNjcF9oZHIoc2tiKS0+ZGNjcGhfZHBvcnQsCisJCQkgICAgLmZsX2lwX2Rwb3J0ID0gZGNjcF9oZHIoc2tiKS0+ZGNjcGhfc3BvcnQKIAkJCSAgfTsKIAogCXNlY3VyaXR5X3NrYl9jbGFzc2lmeV9mbG93KHNrYiwgJmZsKTsKZGlmZiAtLWdpdCBhL25ldC9kY2NwL29wdGlvbnMuYyBiL25ldC9kY2NwL29wdGlvbnMuYwppbmRleCBjZDMwNjE4Li5mMDZmZmNmIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9vcHRpb25zLmMKKysrIGIvbmV0L2RjY3Avb3B0aW9ucy5jCkBAIC01NCw3ICs1NCw2IEBACiAJc3RydWN0IGRjY3Bfc29jayAqZHAgPSBkY2NwX3NrKHNrKTsKIAljb25zdCBzdHJ1Y3QgZGNjcF9oZHIgKmRoID0gZGNjcF9oZHIoc2tiKTsKIAljb25zdCB1OCBwa3RfdHlwZSA9IERDQ1BfU0tCX0NCKHNrYiktPmRjY3BkX3R5cGU7Ci0JdTY0IGFja25vID0gRENDUF9TS0JfQ0Ioc2tiKS0+ZGNjcGRfYWNrX3NlcTsKIAl1bnNpZ25lZCBjaGFyICpvcHRpb25zID0gKHVuc2lnbmVkIGNoYXIgKilkaCArIGRjY3BfaGRyX2xlbihza2IpOwogCXVuc2lnbmVkIGNoYXIgKm9wdF9wdHIgPSBvcHRpb25zOwogCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm9wdF9lbmQgPSAodW5zaWduZWQgY2hhciAqKWRoICsKQEAgLTEyOSwxNCArMTI4LDYgQEAKIAkJCWlmIChyYykKIAkJCQlnb3RvIG91dF9mZWF0bmVnX2ZhaWxlZDsKIAkJCWJyZWFrOwotCQljYXNlIERDQ1BPX0FDS19WRUNUT1JfMDoKLQkJY2FzZSBEQ0NQT19BQ0tfVkVDVE9SXzE6Ci0JCQlpZiAoZGNjcF9wYWNrZXRfd2l0aG91dF9hY2soc2tiKSkgICAvKiBSRkMgNDM0MCwgMTEuNCAqLwotCQkJCWJyZWFrOwotCQkJaWYgKGRwLT5kY2Nwc19oY19yeF9hY2t2ZWMgIT0gTlVMTCAmJgotCQkJICAgIGRjY3BfYWNrdmVjX3BhcnNlKHNrLCBza2IsICZhY2tubywgb3B0LCB2YWx1ZSwgbGVuKSkKLQkJCQlnb3RvIG91dF9pbnZhbGlkX29wdGlvbjsKLQkJCWJyZWFrOwogCQljYXNlIERDQ1BPX1RJTUVTVEFNUDoKIAkJCWlmIChsZW4gIT0gNCkKIAkJCQlnb3RvIG91dF9pbnZhbGlkX29wdGlvbjsKQEAgLTIyNiw2ICsyMTcsMTYgQEAKIAkJCQkJCSAgICAgcGt0X3R5cGUsIG9wdCwgdmFsdWUsIGxlbikpCiAJCQkJZ290byBvdXRfaW52YWxpZF9vcHRpb247CiAJCQlicmVhazsKKwkJY2FzZSBEQ0NQT19BQ0tfVkVDVE9SXzA6CisJCWNhc2UgRENDUE9fQUNLX1ZFQ1RPUl8xOgorCQkJaWYgKGRjY3BfcGFja2V0X3dpdGhvdXRfYWNrKHNrYikpICAgLyogUkZDIDQzNDAsIDExLjQgKi8KKwkJCQlicmVhazsKKwkJCS8qCisJCQkgKiBBY2sgdmVjdG9ycyBhcmUgcHJvY2Vzc2VkIGJ5IHRoZSBUWCBDQ0lEIGlmIGl0IGlzCisJCQkgKiBpbnRlcmVzdGVkLiBUaGUgUlggQ0NJRCBuZWVkIG5vdCBwYXJzZSBBY2sgVmVjdG9ycywKKwkJCSAqIHNpbmNlIGl0IGlzIG9ubHkgaW50ZXJlc3RlZCBpbiBjbGVhcmluZyBvbGQgc3RhdGUuCisJCQkgKiBGYWxsIHRocm91Z2guCisJCQkgKi8KIAkJY2FzZSBEQ0NQT19NSU5fVFhfQ0NJRF9TUEVDSUZJQyAuLi4gRENDUE9fTUFYX1RYX0NDSURfU1BFQ0lGSUM6CiAJCQlpZiAoY2NpZF9oY190eF9wYXJzZV9vcHRpb25zKGRwLT5kY2Nwc19oY190eF9jY2lkLCBzaywKIAkJCQkJCSAgICAgcGt0X3R5cGUsIG9wdCwgdmFsdWUsIGxlbikpCkBAIC0zNDAsNiArMzQxLDcgQEAKIAlyZXR1cm4gZWxhcHNlZF90aW1lID09IDAgPyAwIDogZWxhcHNlZF90aW1lIDw9IDB4RkZGRiA/IDIgOiA0OwogfQogCisvKiBGSVhNRTogVGhpcyBmdW5jdGlvbiBpcyBjdXJyZW50bHkgbm90IHVzZWQgYW55d2hlcmUgKi8KIGludCBkY2NwX2luc2VydF9vcHRpb25fZWxhcHNlZF90aW1lKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBlbGFwc2VkX3RpbWUpCiB7CiAJY29uc3QgaW50IGVsYXBzZWRfdGltZV9sZW4gPSBkY2NwX2VsYXBzZWRfdGltZV9sZW4oZWxhcHNlZF90aW1lKTsKQEAgLTQyNCw2ICs0MjYsODMgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBkY2NwX2luc2VydF9vcHRpb25fYWNrdmVjKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgZGNjcF9zb2NrICpkcCA9IGRjY3Bfc2soc2spOworCXN0cnVjdCBkY2NwX2Fja3ZlYyAqYXYgPSBkcC0+ZGNjcHNfaGNfcnhfYWNrdmVjOworCXN0cnVjdCBkY2NwX3NrYl9jYiAqZGNiID0gRENDUF9TS0JfQ0Ioc2tiKTsKKwljb25zdCB1MTYgYnVmbGVuID0gZGNjcF9hY2t2ZWNfYnVmbGVuKGF2KTsKKwkvKiBGaWd1cmUgb3V0IGhvdyBtYW55IG9wdGlvbnMgZG8gd2UgbmVlZCB0byByZXByZXNlbnQgdGhlIGFja3ZlYyAqLworCWNvbnN0IHU4IG5yX29wdHMgPSBESVZfUk9VTkRfVVAoYnVmbGVuLCBEQ0NQX1NJTkdMRV9PUFRfTUFYTEVOKTsKKwl1MTYgbGVuID0gYnVmbGVuICsgMiAqIG5yX29wdHM7CisJdTggaSwgbm9uY2UgPSAwOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnRhaWwsICpmcm9tOworCXVuc2lnbmVkIGNoYXIgKnRvOworCisJaWYgKGRjYi0+ZGNjcGRfb3B0X2xlbiArIGxlbiA+IERDQ1BfTUFYX09QVF9MRU4pIHsKKwkJRENDUF9XQVJOKCJMYWNraW5nIHNwYWNlIGZvciAldSBieXRlcyBvbiAlcyBwYWNrZXRcbiIsIGxlbiwKKwkJCSAgZGNjcF9wYWNrZXRfbmFtZShkY2ItPmRjY3BkX3R5cGUpKTsKKwkJcmV0dXJuIC0xOworCX0KKwkvKgorCSAqIFNpbmNlIEFjayBWZWN0b3JzIGFyZSB2YXJpYWJsZS1sZW5ndGgsIHdlIGNhbiBub3QgYWx3YXlzIHByZWRpY3QKKwkgKiB0aGVpciBzaXplLiBUbyBjYXRjaCBleGNlcHRpb24gY2FzZXMgd2hlcmUgdGhlIHNwYWNlIGlzIHJ1bm5pbmcgb3V0CisJICogb24gdGhlIHNrYiwgYSBzZXBhcmF0ZSBTeW5jIGlzIHNjaGVkdWxlZCB0byBjYXJyeSB0aGUgQWNrIFZlY3Rvci4KKwkgKi8KKwlpZiAobGVuID4gRENDUEFWX01JTl9PUFRMRU4gJiYKKwkgICAgbGVuICsgZGNiLT5kY2NwZF9vcHRfbGVuICsgc2tiLT5sZW4gPiBkcC0+ZGNjcHNfbXNzX2NhY2hlKSB7CisJCURDQ1BfV0FSTigiTm8gc3BhY2UgbGVmdCBmb3IgQWNrIFZlY3RvciAoJXUpIG9uIHNrYiAoJXUrJXUpLCAiCisJCQkgICJNUFM9JXUgPT0+IHJlZHVjZSBwYXlsb2FkIHNpemU/XG4iLCBsZW4sIHNrYi0+bGVuLAorCQkJICBkY2ItPmRjY3BkX29wdF9sZW4sIGRwLT5kY2Nwc19tc3NfY2FjaGUpOworCQlkcC0+ZGNjcHNfc3luY19zY2hlZHVsZWQgPSAxOworCQlyZXR1cm4gMDsKKwl9CisJZGNiLT5kY2NwZF9vcHRfbGVuICs9IGxlbjsKKworCXRvICAgPSBza2JfcHVzaChza2IsIGxlbik7CisJbGVuICA9IGJ1ZmxlbjsKKwlmcm9tID0gYXYtPmF2X2J1ZiArIGF2LT5hdl9idWZfaGVhZDsKKwl0YWlsID0gYXYtPmF2X2J1ZiArIERDQ1BBVl9NQVhfQUNLVkVDX0xFTjsKKworCWZvciAoaSA9IDA7IGkgPCBucl9vcHRzOyArK2kpIHsKKwkJaW50IGNvcHlsZW4gPSBsZW47CisKKwkJaWYgKGxlbiA+IERDQ1BfU0lOR0xFX09QVF9NQVhMRU4pCisJCQljb3B5bGVuID0gRENDUF9TSU5HTEVfT1BUX01BWExFTjsKKworCQkvKgorCQkgKiBSRkMgNDM0MCwgMTIuMjogRW5jb2RlIHRoZSBOb25jZSBFY2hvIGZvciB0aGlzIEFjayBWZWN0b3IgdmlhCisJCSAqIGl0cyB0eXBlOyBhY2tfbm9uY2UgaXMgdGhlIHN1bSBvZiBhbGwgaW5kaXZpZHVhbCBidWZfbm9uY2Uncy4KKwkJICovCisJCW5vbmNlIF49IGF2LT5hdl9idWZfbm9uY2VbaV07CisKKwkJKnRvKysgPSBEQ0NQT19BQ0tfVkVDVE9SXzAgKyBhdi0+YXZfYnVmX25vbmNlW2ldOworCQkqdG8rKyA9IGNvcHlsZW4gKyAyOworCisJCS8qIENoZWNrIGlmIGJ1Zl9oZWFkIHdyYXBzICovCisJCWlmIChmcm9tICsgY29weWxlbiA+IHRhaWwpIHsKKwkJCWNvbnN0IHUxNiB0YWlsc2l6ZSA9IHRhaWwgLSBmcm9tOworCisJCQltZW1jcHkodG8sIGZyb20sIHRhaWxzaXplKTsKKwkJCXRvCSs9IHRhaWxzaXplOworCQkJbGVuCS09IHRhaWxzaXplOworCQkJY29weWxlbgktPSB0YWlsc2l6ZTsKKwkJCWZyb20JPSBhdi0+YXZfYnVmOworCQl9CisKKwkJbWVtY3B5KHRvLCBmcm9tLCBjb3B5bGVuKTsKKwkJZnJvbSArPSBjb3B5bGVuOworCQl0byAgICs9IGNvcHlsZW47CisJCWxlbiAgLT0gY29weWxlbjsKKwl9CisJLyoKKwkgKiBFYWNoIHNlbnQgQWNrIFZlY3RvciBpcyByZWNvcmRlZCBpbiB0aGUgbGlzdCwgYXMgcGVyIEEuMiBvZiBSRkMgNDM0MC4KKwkgKi8KKwlpZiAoZGNjcF9hY2t2ZWNfdXBkYXRlX3JlY29yZHMoYXYsIGRjYi0+ZGNjcGRfc2VxLCBub25jZSkpCisJCXJldHVybiAtRU5PQlVGUzsKKwlyZXR1cm4gMDsKK30KKwogLyoqCiAgKiBkY2NwX2luc2VydF9vcHRpb25fbWFuZGF0b3J5ICAtICBNYW5kYXRvcnkgb3B0aW9uICg1LjguMikKICAqIE5vdGUgdGhhdCBzaW5jZSB3ZSBhcmUgdXNpbmcgc2tiX3B1c2gsIHRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gYmUgY2FsbGVkCkBAIC01MTksOCArNTk4LDcgQEAKIAkJCWlmIChkY2NwX2luc2VydF9vcHRpb25fdGltZXN0YW1wKHNrYikpCiAJCQkJcmV0dXJuIC0xOwogCi0JCX0gZWxzZSBpZiAoZHAtPmRjY3BzX2hjX3J4X2Fja3ZlYyAhPSBOVUxMICYmCi0JCQkgICBkY2NwX2Fja3ZlY19wZW5kaW5nKGRwLT5kY2Nwc19oY19yeF9hY2t2ZWMpICYmCisJCX0gZWxzZSBpZiAoZGNjcF9hY2t2ZWNfcGVuZGluZyhzaykgJiYKIAkJCSAgIGRjY3BfaW5zZXJ0X29wdGlvbl9hY2t2ZWMoc2ssIHNrYikpIHsKIAkJCQlyZXR1cm4gLTE7CiAJCX0KZGlmZiAtLWdpdCBhL25ldC9kY2NwL291dHB1dC5jIGIvbmV0L2RjY3Avb3V0cHV0LmMKaW5kZXggNDViOTE4NS4uNzg0ZDMwMjEgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL291dHB1dC5jCisrKyBiL25ldC9kY2NwL291dHB1dC5jCkBAIC0yNDIsNyArMjQyLDcgQEAKIHsKIAlpbnQgZXJyLCBsZW47CiAJc3RydWN0IGRjY3Bfc29jayAqZHAgPSBkY2NwX3NrKHNrKTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gc2tiX2RlcXVldWUoJnNrLT5za193cml0ZV9xdWV1ZSk7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGRjY3BfcXBvbGljeV9wb3Aoc2spOwogCiAJaWYgKHVubGlrZWx5KHNrYiA9PSBOVUxMKSkKIAkJcmV0dXJuOwpAQCAtMjgzLDYgKzI4MywxNSBAQAogCSAqIGFueSBsb2NhbCBkcm9wIHdpbGwgZXZlbnR1YWxseSBiZSByZXBvcnRlZCB2aWEgcmVjZWl2ZXIgZmVlZGJhY2suCiAJICovCiAJY2NpZF9oY190eF9wYWNrZXRfc2VudChkcC0+ZGNjcHNfaGNfdHhfY2NpZCwgc2ssIGxlbik7CisKKwkvKgorCSAqIElmIHRoZSBDQ0lEIG5lZWRzIHRvIHRyYW5zZmVyIGFkZGl0aW9uYWwgaGVhZGVyIG9wdGlvbnMgb3V0LW9mLWJhbmQKKwkgKiAoZS5nLiBBY2sgVmVjdG9ycyBvciBmZWF0dXJlLW5lZ290aWF0aW9uIG9wdGlvbnMpLCBpdCBhY3RpdmF0ZXMgdGhpcworCSAqIGZsYWcgdG8gc2NoZWR1bGUgYSBTeW5jLiBUaGUgU3luYyB3aWxsIGF1dG9tYXRpY2FsbHkgaW5jb3Jwb3JhdGUgYWxsCisJICogY3VycmVudGx5IHBlbmRpbmcgaGVhZGVyIG9wdGlvbnMsIHRodXMgY2xlYXJpbmcgdGhlIGJhY2tsb2cuCisJICovCisJaWYgKGRwLT5kY2Nwc19zeW5jX3NjaGVkdWxlZCkKKwkJZGNjcF9zZW5kX3N5bmMoc2ssIGRwLT5kY2Nwc19nc3IsIERDQ1BfUEtUX1NZTkMpOwogfQogCiAvKioKQEAgLTMzNiw3ICszNDUsNyBAQAogCXN0cnVjdCBkY2NwX3NvY2sgKmRwID0gZGNjcF9zayhzayk7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAotCXdoaWxlICgoc2tiID0gc2tiX3BlZWsoJnNrLT5za193cml0ZV9xdWV1ZSkpKSB7CisJd2hpbGUgKChza2IgPSBkY2NwX3Fwb2xpY3lfdG9wKHNrKSkpIHsKIAkJaW50IHJjID0gY2NpZF9oY190eF9zZW5kX3BhY2tldChkcC0+ZGNjcHNfaGNfdHhfY2NpZCwgc2ssIHNrYik7CiAKIAkJc3dpdGNoIChjY2lkX3BhY2tldF9kZXF1ZXVlX2V2YWwocmMpKSB7CkBAIC0zNTAsOCArMzU5LDcgQEAKIAkJCWRjY3BfeG1pdF9wYWNrZXQoc2spOwogCQkJYnJlYWs7CiAJCWNhc2UgQ0NJRF9QQUNLRVRfRVJSOgotCQkJc2tiX2RlcXVldWUoJnNrLT5za193cml0ZV9xdWV1ZSk7Ci0JCQlrZnJlZV9za2Ioc2tiKTsKKwkJCWRjY3BfcXBvbGljeV9kcm9wKHNrLCBza2IpOwogCQkJZGNjcF9wcl9kZWJ1ZygicGFja2V0IGRpc2NhcmRlZCBkdWUgdG8gZXJyPSVkXG4iLCByYyk7CiAJCX0KIAl9CkBAIC02MzYsNiArNjQ0LDEyIEBACiAJRENDUF9TS0JfQ0Ioc2tiKS0+ZGNjcGRfdHlwZSA9IHBrdF90eXBlOwogCURDQ1BfU0tCX0NCKHNrYiktPmRjY3BkX2Fja19zZXEgPSBhY2tubzsKIAorCS8qCisJICogQ2xlYXIgdGhlIGZsYWcgaW4gY2FzZSB0aGUgU3luYyB3YXMgc2NoZWR1bGVkIGZvciBvdXQtb2YtYmFuZCBkYXRhLAorCSAqIHN1Y2ggYXMgY2FycnlpbmcgYSBsb25nIEFjayBWZWN0b3IuCisJICovCisJZGNjcF9zayhzayktPmRjY3BzX3N5bmNfc2NoZWR1bGVkID0gMDsKKwogCWRjY3BfdHJhbnNtaXRfc2tiKHNrLCBza2IpOwogfQogCmRpZmYgLS1naXQgYS9uZXQvZGNjcC9wcm90by5jIGIvbmV0L2RjY3AvcHJvdG8uYwppbmRleCBlZjM0M2Q1Li4xNTI5NzVkIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9wcm90by5jCisrKyBiL25ldC9kY2NwL3Byb3RvLmMKQEAgLTE4NSw2ICsxODUsNyBAQAogCWRwLT5kY2Nwc19yb2xlCQk9IERDQ1BfUk9MRV9VTkRFRklORUQ7CiAJZHAtPmRjY3BzX3NlcnZpY2UJPSBEQ0NQX1NFUlZJQ0VfQ09ERV9JU19BQlNFTlQ7CiAJZHAtPmRjY3BzX2xfYWNrX3JhdGlvCT0gZHAtPmRjY3BzX3JfYWNrX3JhdGlvID0gMTsKKwlkcC0+ZGNjcHNfdHhfcWxlbgk9IHN5c2N0bF9kY2NwX3R4X3FsZW47CiAKIAlkY2NwX2luaXRfeG1pdF90aW1lcnMoc2spOwogCkBAIC01MzIsNiArNTMzLDIwIEBACiAJY2FzZSBEQ0NQX1NPQ0tPUFRfUkVDVl9DU0NPVjoKIAkJZXJyID0gZGNjcF9zZXRzb2Nrb3B0X2NzY292KHNrLCB2YWwsIHRydWUpOwogCQlicmVhazsKKwljYXNlIERDQ1BfU09DS09QVF9RUE9MSUNZX0lEOgorCQlpZiAoc2stPnNrX3N0YXRlICE9IERDQ1BfQ0xPU0VEKQorCQkJZXJyID0gLUVJU0NPTk47CisJCWVsc2UgaWYgKHZhbCA8IDAgfHwgdmFsID49IERDQ1BRX1BPTElDWV9NQVgpCisJCQllcnIgPSAtRUlOVkFMOworCQllbHNlCisJCQlkcC0+ZGNjcHNfcXBvbGljeSA9IHZhbDsKKwkJYnJlYWs7CisJY2FzZSBEQ0NQX1NPQ0tPUFRfUVBPTElDWV9UWFFMRU46CisJCWlmICh2YWwgPCAwKQorCQkJZXJyID0gLUVJTlZBTDsKKwkJZWxzZQorCQkJZHAtPmRjY3BzX3R4X3FsZW4gPSB2YWw7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWVyciA9IC1FTk9QUk9UT09QVDsKIAkJYnJlYWs7CkBAIC02MzksNiArNjU0LDEyIEBACiAJY2FzZSBEQ0NQX1NPQ0tPUFRfUkVDVl9DU0NPVjoKIAkJdmFsID0gZHAtPmRjY3BzX3BjcmxlbjsKIAkJYnJlYWs7CisJY2FzZSBEQ0NQX1NPQ0tPUFRfUVBPTElDWV9JRDoKKwkJdmFsID0gZHAtPmRjY3BzX3Fwb2xpY3k7CisJCWJyZWFrOworCWNhc2UgRENDUF9TT0NLT1BUX1FQT0xJQ1lfVFhRTEVOOgorCQl2YWwgPSBkcC0+ZGNjcHNfdHhfcWxlbjsKKwkJYnJlYWs7CiAJY2FzZSAxMjggLi4uIDE5MToKIAkJcmV0dXJuIGNjaWRfaGNfcnhfZ2V0c29ja29wdChkcC0+ZGNjcHNfaGNfcnhfY2NpZCwgc2ssIG9wdG5hbWUsCiAJCQkJCSAgICAgbGVuLCAodTMyIF9fdXNlciAqKW9wdHZhbCwgb3B0bGVuKTsKQEAgLTY4MSw2ICs3MDIsNDcgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKGNvbXBhdF9kY2NwX2dldHNvY2tvcHQpOwogI2VuZGlmCiAKK3N0YXRpYyBpbnQgZGNjcF9tc2doZHJfcGFyc2Uoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBjbXNnaGRyICpjbXNnID0gQ01TR19GSVJTVEhEUihtc2cpOworCisJLyoKKwkgKiBBc3NpZ24gYW4gKG9wYXF1ZSkgcXBvbGljeSBwcmlvcml0eSB2YWx1ZSB0byBza2ItPnByaW9yaXR5LgorCSAqCisJICogV2UgYXJlIG92ZXJsb2FkaW5nIHRoaXMgc2tiIGZpZWxkIGZvciB1c2Ugd2l0aCB0aGUgcXBvbGljeSBzdWJ5c3RlbS4KKwkgKiBUaGUgc2tiLT5wcmlvcml0eSBpcyBub3JtYWxseSB1c2VkIGZvciB0aGUgU09fUFJJT1JJVFkgb3B0aW9uLCB3aGljaAorCSAqIGlzIGluaXRpYWxpc2VkIGZyb20gc2tfcHJpb3JpdHkuIFNpbmNlIHRoZSBhc3NpZ25tZW50IG9mIHNrX3ByaW9yaXR5CisJICogdG8gc2tiLT5wcmlvcml0eSBoYXBwZW5zIGxhdGVyIChvbiBsYXllciAzKSwgd2Ugb3ZlcmxvYWQgdGhpcyBmaWVsZAorCSAqIGZvciB1c2Ugd2l0aCBxdWV1ZWluZyBwcmlvcml0aWVzIGFzIGxvbmcgYXMgdGhlIHNrYiBpcyBvbiBsYXllciA0LgorCSAqIFRoZSBkZWZhdWx0IHByaW9yaXR5IHZhbHVlIChpZiBub3RoaW5nIGlzIHNldCkgaXMgMC4KKwkgKi8KKwlza2ItPnByaW9yaXR5ID0gMDsKKworCWZvciAoOyBjbXNnICE9IE5VTEw7IGNtc2cgPSBDTVNHX05YVEhEUihtc2csIGNtc2cpKSB7CisKKwkJaWYgKCFDTVNHX09LKG1zZywgY21zZykpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAoY21zZy0+Y21zZ19sZXZlbCAhPSBTT0xfRENDUCkKKwkJCWNvbnRpbnVlOworCisJCWlmIChjbXNnLT5jbXNnX3R5cGUgPD0gRENDUF9TQ01fUVBPTElDWV9NQVggJiYKKwkJICAgICFkY2NwX3Fwb2xpY3lfcGFyYW1fb2soc2tiLT5zaywgY21zZy0+Y21zZ190eXBlKSkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCXN3aXRjaCAoY21zZy0+Y21zZ190eXBlKSB7CisJCWNhc2UgRENDUF9TQ01fUFJJT1JJVFk6CisJCQlpZiAoY21zZy0+Y21zZ19sZW4gIT0gQ01TR19MRU4oc2l6ZW9mKF9fdTMyKSkpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlza2ItPnByaW9yaXR5ID0gKihfX3UzMiAqKUNNU0dfREFUQShjbXNnKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKIGludCBkY2NwX3NlbmRtc2coc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywKIAkJIHNpemVfdCBsZW4pCiB7CkBAIC02OTYsOCArNzU4LDcgQEAKIAogCWxvY2tfc29jayhzayk7CiAKLQlpZiAoc3lzY3RsX2RjY3BfdHhfcWxlbiAmJgotCSAgICAoc2stPnNrX3dyaXRlX3F1ZXVlLnFsZW4gPj0gc3lzY3RsX2RjY3BfdHhfcWxlbikpIHsKKwlpZiAoZGNjcF9xcG9saWN5X2Z1bGwoc2spKSB7CiAJCXJjID0gLUVBR0FJTjsKIAkJZ290byBvdXRfcmVsZWFzZTsKIAl9CkBAIC03MjUsNyArNzg2LDExIEBACiAJaWYgKHJjICE9IDApCiAJCWdvdG8gb3V0X2Rpc2NhcmQ7CiAKLQlza2JfcXVldWVfdGFpbCgmc2stPnNrX3dyaXRlX3F1ZXVlLCBza2IpOworCXJjID0gZGNjcF9tc2doZHJfcGFyc2UobXNnLCBza2IpOworCWlmIChyYyAhPSAwKQorCQlnb3RvIG91dF9kaXNjYXJkOworCisJZGNjcF9xcG9saWN5X3B1c2goc2ssIHNrYik7CiAJLyoKIAkgKiBUaGUgeG1pdF90aW1lciBpcyBzZXQgaWYgdGhlIFRYIENDSUQgaXMgcmF0ZS1iYXNlZCBhbmQgd2lsbCBleHBpcmUKIAkgKiB3aGVuIGNvbmdlc3Rpb24gY29udHJvbCBwZXJtaXRzIHRvIHJlbGVhc2UgZnVydGhlciBwYWNrZXRzIGludG8gdGhlCmRpZmYgLS1naXQgYS9uZXQvZGNjcC9xcG9saWN5LmMgYi9uZXQvZGNjcC9xcG9saWN5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNjMzBiZgotLS0gL2Rldi9udWxsCisrKyBiL25ldC9kY2NwL3Fwb2xpY3kuYwpAQCAtMCwwICsxLDEzNyBAQAorLyoKKyAqICBuZXQvZGNjcC9xcG9saWN5LmMKKyAqCisgKiAgUG9saWN5LWJhc2VkIHBhY2tldCBkZXF1ZXVlaW5nIGludGVyZmFjZSBmb3IgRENDUC4KKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDA4IFRvbWFzeiBHcm9iZWxueSA8dG9tYXN6QGdyb2JlbG55Lm9zd2llY2VuaWEubmV0PgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdjIKKyAqICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgImRjY3AuaCIKKworLyoKKyAqCVNpbXBsZSBEZXF1ZXVlaW5nIFBvbGljeToKKyAqCUlmIHR4X3FsZW4gaXMgZGlmZmVyZW50IGZyb20gMCwgZW5xdWV1ZSB1cCB0byB0eF9xbGVuIGVsZW1lbnRzLgorICovCitzdGF0aWMgdm9pZCBxcG9saWN5X3NpbXBsZV9wdXNoKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlza2JfcXVldWVfdGFpbCgmc2stPnNrX3dyaXRlX3F1ZXVlLCBza2IpOworfQorCitzdGF0aWMgYm9vbCBxcG9saWN5X3NpbXBsZV9mdWxsKHN0cnVjdCBzb2NrICpzaykKK3sKKwlyZXR1cm4gZGNjcF9zayhzayktPmRjY3BzX3R4X3FsZW4gJiYKKwkgICAgICAgc2stPnNrX3dyaXRlX3F1ZXVlLnFsZW4gPj0gZGNjcF9zayhzayktPmRjY3BzX3R4X3FsZW47Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqcXBvbGljeV9zaW1wbGVfdG9wKHN0cnVjdCBzb2NrICpzaykKK3sKKwlyZXR1cm4gc2tiX3BlZWsoJnNrLT5za193cml0ZV9xdWV1ZSk7Cit9CisKKy8qCisgKglQcmlvcml0eS1iYXNlZCBEZXF1ZXVlaW5nIFBvbGljeToKKyAqCUlmIHR4X3FsZW4gaXMgZGlmZmVyZW50IGZyb20gMCBhbmQgdGhlIHF1ZXVlIGhhcyByZWFjaGVkIGl0cyB1cHBlciBib3VuZAorICoJb2YgdHhfcWxlbiBlbGVtZW50cywgcmVwbGFjZSBvbGRlciBwYWNrZXRzIGxvd2VzdC1wcmlvcml0eS1maXJzdC4KKyAqLworc3RhdGljIHN0cnVjdCBza19idWZmICpxcG9saWN5X3ByaW9fYmVzdF9za2Ioc3RydWN0IHNvY2sgKnNrKQoreworCXN0cnVjdCBza19idWZmICpza2IsICpiZXN0ID0gTlVMTDsKKworCXNrYl9xdWV1ZV93YWxrKCZzay0+c2tfd3JpdGVfcXVldWUsIHNrYikKKwkJaWYgKGJlc3QgPT0gTlVMTCB8fCBza2ItPnByaW9yaXR5ID4gYmVzdC0+cHJpb3JpdHkpCisJCQliZXN0ID0gc2tiOworCXJldHVybiBiZXN0OworfQorCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnFwb2xpY3lfcHJpb193b3JzdF9za2Ioc3RydWN0IHNvY2sgKnNrKQoreworCXN0cnVjdCBza19idWZmICpza2IsICp3b3JzdCA9IE5VTEw7CisKKwlza2JfcXVldWVfd2Fsaygmc2stPnNrX3dyaXRlX3F1ZXVlLCBza2IpCisJCWlmICh3b3JzdCA9PSBOVUxMIHx8IHNrYi0+cHJpb3JpdHkgPCB3b3JzdC0+cHJpb3JpdHkpCisJCQl3b3JzdCA9IHNrYjsKKwlyZXR1cm4gd29yc3Q7Cit9CisKK3N0YXRpYyBib29sIHFwb2xpY3lfcHJpb19mdWxsKHN0cnVjdCBzb2NrICpzaykKK3sKKwlpZiAocXBvbGljeV9zaW1wbGVfZnVsbChzaykpCisJCWRjY3BfcXBvbGljeV9kcm9wKHNrLCBxcG9saWN5X3ByaW9fd29yc3Rfc2tiKHNrKSk7CisJcmV0dXJuIGZhbHNlOworfQorCisvKioKKyAqIHN0cnVjdCBkY2NwX3Fwb2xpY3lfb3BlcmF0aW9ucyAgLSAgVFggUGFja2V0IERlcXVldWVpbmcgSW50ZXJmYWNlCisgKiBAcHVzaDogYWRkIGEgbmV3IEBza2IgdG8gdGhlIHdyaXRlIHF1ZXVlCisgKiBAZnVsbDogaW5kaWNhdGVzIHRoYXQgbm8gbW9yZSBwYWNrZXRzIHdpbGwgYmUgYWRtaXR0ZWQKKyAqIEB0b3A6ICBwZWVrcyBhdCB3aGF0ZXZlciB0aGUgcXVldWVpbmcgcG9saWN5IGRlZmluZXMgYXMgaXRzIGB0b3AnCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZGNjcF9xcG9saWN5X29wZXJhdGlvbnMgeworCXZvaWQJCSgqcHVzaCkJKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisJYm9vbAkJKCpmdWxsKSAoc3RydWN0IHNvY2sgKnNrKTsKKwlzdHJ1Y3Qgc2tfYnVmZioJKCp0b3ApICAoc3RydWN0IHNvY2sgKnNrKTsKKwlfX2JlMzIJCXBhcmFtczsKKworfSBxcG9sX3RhYmxlW0RDQ1BRX1BPTElDWV9NQVhdID0geworCVtEQ0NQUV9QT0xJQ1lfU0lNUExFXSA9IHsKKwkJLnB1c2ggICA9IHFwb2xpY3lfc2ltcGxlX3B1c2gsCisJCS5mdWxsICAgPSBxcG9saWN5X3NpbXBsZV9mdWxsLAorCQkudG9wICAgID0gcXBvbGljeV9zaW1wbGVfdG9wLAorCQkucGFyYW1zID0gMCwKKwl9LAorCVtEQ0NQUV9QT0xJQ1lfUFJJT10gPSB7CisJCS5wdXNoICAgPSBxcG9saWN5X3NpbXBsZV9wdXNoLAorCQkuZnVsbCAgID0gcXBvbGljeV9wcmlvX2Z1bGwsCisJCS50b3AgICAgPSBxcG9saWN5X3ByaW9fYmVzdF9za2IsCisJCS5wYXJhbXMgPSBEQ0NQX1NDTV9QUklPUklUWSwKKwl9LAorfTsKKworLyoKKyAqCUV4dGVybmFsbHkgdmlzaWJsZSBpbnRlcmZhY2UKKyAqLwordm9pZCBkY2NwX3Fwb2xpY3lfcHVzaChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCit7CisJcXBvbF90YWJsZVtkY2NwX3NrKHNrKS0+ZGNjcHNfcXBvbGljeV0ucHVzaChzaywgc2tiKTsKK30KKworYm9vbCBkY2NwX3Fwb2xpY3lfZnVsbChzdHJ1Y3Qgc29jayAqc2spCit7CisJcmV0dXJuIHFwb2xfdGFibGVbZGNjcF9zayhzayktPmRjY3BzX3Fwb2xpY3ldLmZ1bGwoc2spOworfQorCit2b2lkIGRjY3BfcXBvbGljeV9kcm9wKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlpZiAoc2tiICE9IE5VTEwpIHsKKwkJc2tiX3VubGluayhza2IsICZzay0+c2tfd3JpdGVfcXVldWUpOworCQlrZnJlZV9za2Ioc2tiKTsKKwl9Cit9CisKK3N0cnVjdCBza19idWZmICpkY2NwX3Fwb2xpY3lfdG9wKHN0cnVjdCBzb2NrICpzaykKK3sKKwlyZXR1cm4gcXBvbF90YWJsZVtkY2NwX3NrKHNrKS0+ZGNjcHNfcXBvbGljeV0udG9wKHNrKTsKK30KKworc3RydWN0IHNrX2J1ZmYgKmRjY3BfcXBvbGljeV9wb3Aoc3RydWN0IHNvY2sgKnNrKQoreworCXN0cnVjdCBza19idWZmICpza2IgPSBkY2NwX3Fwb2xpY3lfdG9wKHNrKTsKKworCWlmIChza2IgIT0gTlVMTCkgeworCQkvKiBDbGVhciBhbnkgc2tiIGZpZWxkcyB0aGF0IHdlIHVzZWQgaW50ZXJuYWxseSAqLworCQlza2ItPnByaW9yaXR5ID0gMDsKKwkJc2tiX3VubGluayhza2IsICZzay0+c2tfd3JpdGVfcXVldWUpOworCX0KKwlyZXR1cm4gc2tiOworfQorCitib29sIGRjY3BfcXBvbGljeV9wYXJhbV9vayhzdHJ1Y3Qgc29jayAqc2ssIF9fYmUzMiBwYXJhbSkKK3sKKwkvKiBjaGVjayBpZiBleGFjdGx5IG9uZSBiaXQgaXMgc2V0ICovCisJaWYgKCFwYXJhbSB8fCAocGFyYW0gJiAocGFyYW0gLSAxKSkpCisJCXJldHVybiBmYWxzZTsKKwlyZXR1cm4gKHFwb2xfdGFibGVbZGNjcF9zayhzayktPmRjY3BzX3Fwb2xpY3ldLnBhcmFtcyAmIHBhcmFtKSA9PSBwYXJhbTsKK30KZGlmZiAtLWdpdCBhL25ldC9kZWNuZXQvYWZfZGVjbmV0LmMgYi9uZXQvZGVjbmV0L2FmX2RlY25ldC5jCmluZGV4IDZmOTcyNjguLjJhZjE1YjEgMTAwNjQ0Ci0tLSBhL25ldC9kZWNuZXQvYWZfZGVjbmV0LmMKKysrIGIvbmV0L2RlY25ldC9hZl9kZWNuZXQuYwpAQCAtODI5LDcgKzgyOSw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJc2NwLT5zdGF0ZSA9IEROX0NDOwotCXNjcC0+c2Vnc2l6ZV9sb2MgPSBkc3RfbWV0cmljKF9fc2tfZHN0X2dldChzayksIFJUQVhfQURWTVNTKTsKKwlzY3AtPnNlZ3NpemVfbG9jID0gZHN0X21ldHJpY19hZHZtc3MoX19za19kc3RfZ2V0KHNrKSk7CiAJZG5fc2VuZF9jb25uX2NvbmYoc2ssIGFsbG9jYXRpb24pOwogCiAJcHJlcGFyZV90b193YWl0KHNrX3NsZWVwKHNrKSwgJndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7CkBAIC05NTgsNyArOTU4LDcgQEAKIAlzay0+c2tfcm91dGVfY2FwcyA9IHNrLT5za19kc3RfY2FjaGUtPmRldi0+ZmVhdHVyZXM7CiAJc29jay0+c3RhdGUgPSBTU19DT05ORUNUSU5HOwogCXNjcC0+c3RhdGUgPSBETl9DSTsKLQlzY3AtPnNlZ3NpemVfbG9jID0gZHN0X21ldHJpYyhzay0+c2tfZHN0X2NhY2hlLCBSVEFYX0FEVk1TUyk7CisJc2NwLT5zZWdzaXplX2xvYyA9IGRzdF9tZXRyaWNfYWR2bXNzKHNrLT5za19kc3RfY2FjaGUpOwogCiAJZG5fbnNwX3NlbmRfY29ubmluaXQoc2ssIE5TUF9DSSk7CiAJZXJyID0gLUVJTlBST0dSRVNTOwpAQCAtMTg1MCw3ICsxODUwLDcgQEAKIHsKIAl1bnNpZ25lZCBtc3MgPSAyMzAgLSBETl9NQVhfTlNQX0RBVEFfSEVBREVSOwogCWlmIChkZXYpIHsKLQkJc3RydWN0IGRuX2RldiAqZG5fZGIgPSBkZXYtPmRuX3B0cjsKKwkJc3RydWN0IGRuX2RldiAqZG5fZGIgPSByY3VfZGVyZWZlcmVuY2VfcmF3KGRldi0+ZG5fcHRyKTsKIAkJbXR1IC09IExMX1JFU0VSVkVEX1NQQUNFKGRldik7CiAJCWlmIChkbl9kYi0+dXNlX2xvbmcpCiAJCQltdHUgLT0gMjE7CmRpZmYgLS1naXQgYS9uZXQvZGVjbmV0L2RuX2Rldi5jIGIvbmV0L2RlY25ldC9kbl9kZXYuYwppbmRleCA0YzQwOWI0Li4wYmExNTYzIDEwMDY0NAotLS0gYS9uZXQvZGVjbmV0L2RuX2Rldi5jCisrKyBiL25ldC9kZWNuZXQvZG5fZGV2LmMKQEAgLTI2Nyw3ICsyNjcsNyBAQAogCWlmICh0YWJsZS0+ZXh0cmExID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JZG5fZGIgPSBkZXYtPmRuX3B0cjsKKwlkbl9kYiA9IHJjdV9kZXJlZmVyZW5jZV9yYXcoZGV2LT5kbl9wdHIpOwogCW9sZCA9IGRuX2RiLT5wYXJtcy5mb3J3YXJkaW5nOwogCiAJZXJyID0gcHJvY19kb2ludHZlYyh0YWJsZSwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyk7CkBAIC0zMzIsMTQgKzMzMiwxOSBAQAogCXJldHVybiBpZmE7CiB9CiAKLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgZG5fZGV2X2ZyZWVfaWZhKHN0cnVjdCBkbl9pZmFkZHIgKmlmYSkKK3N0YXRpYyB2b2lkIGRuX2Rldl9mcmVlX2lmYV9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKQogewotCWtmcmVlKGlmYSk7CisJa2ZyZWUoY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBkbl9pZmFkZHIsIHJjdSkpOwogfQogCi1zdGF0aWMgdm9pZCBkbl9kZXZfZGVsX2lmYShzdHJ1Y3QgZG5fZGV2ICpkbl9kYiwgc3RydWN0IGRuX2lmYWRkciAqKmlmYXAsIGludCBkZXN0cm95KQorc3RhdGljIHZvaWQgZG5fZGV2X2ZyZWVfaWZhKHN0cnVjdCBkbl9pZmFkZHIgKmlmYSkKIHsKLQlzdHJ1Y3QgZG5faWZhZGRyICppZmExID0gKmlmYXA7CisJY2FsbF9yY3UoJmlmYS0+cmN1LCBkbl9kZXZfZnJlZV9pZmFfcmN1KTsKK30KKworc3RhdGljIHZvaWQgZG5fZGV2X2RlbF9pZmEoc3RydWN0IGRuX2RldiAqZG5fZGIsIHN0cnVjdCBkbl9pZmFkZHIgX19yY3UgKippZmFwLCBpbnQgZGVzdHJveSkKK3sKKwlzdHJ1Y3QgZG5faWZhZGRyICppZmExID0gcnRubF9kZXJlZmVyZW5jZSgqaWZhcCk7CiAJdW5zaWduZWQgY2hhciBtYWNfYWRkcls2XTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZG5fZGItPmRldjsKIApAQCAtMzczLDcgKzM3OCw5IEBACiAJQVNTRVJUX1JUTkwoKTsKIAogCS8qIENoZWNrIGZvciBkdXBsaWNhdGVzICovCi0JZm9yKGlmYTEgPSBkbl9kYi0+aWZhX2xpc3Q7IGlmYTE7IGlmYTEgPSBpZmExLT5pZmFfbmV4dCkgeworCWZvciAoaWZhMSA9IHJ0bmxfZGVyZWZlcmVuY2UoZG5fZGItPmlmYV9saXN0KTsKKwkgICAgIGlmYTEgIT0gTlVMTDsKKwkgICAgIGlmYTEgPSBydG5sX2RlcmVmZXJlbmNlKGlmYTEtPmlmYV9uZXh0KSkgewogCQlpZiAoaWZhMS0+aWZhX2xvY2FsID09IGlmYS0+aWZhX2xvY2FsKQogCQkJcmV0dXJuIC1FRVhJU1Q7CiAJfQpAQCAtMzg2LDcgKzM5Myw3IEBACiAJfQogCiAJaWZhLT5pZmFfbmV4dCA9IGRuX2RiLT5pZmFfbGlzdDsKLQlkbl9kYi0+aWZhX2xpc3QgPSBpZmE7CisJcmN1X2Fzc2lnbl9wb2ludGVyKGRuX2RiLT5pZmFfbGlzdCwgaWZhKTsKIAogCWRuX2lmYWRkcl9ub3RpZnkoUlRNX05FV0FERFIsIGlmYSk7CiAJYmxvY2tpbmdfbm90aWZpZXJfY2FsbF9jaGFpbigmZG5hZGRyX2NoYWluLCBORVRERVZfVVAsIGlmYSk7CkBAIC0zOTYsNyArNDAzLDcgQEAKIAogc3RhdGljIGludCBkbl9kZXZfc2V0X2lmYShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZG5faWZhZGRyICppZmEpCiB7Ci0Jc3RydWN0IGRuX2RldiAqZG5fZGIgPSBkZXYtPmRuX3B0cjsKKwlzdHJ1Y3QgZG5fZGV2ICpkbl9kYiA9IHJ0bmxfZGVyZWZlcmVuY2UoZGV2LT5kbl9wdHIpOwogCWludCBydjsKIAogCWlmIChkbl9kYiA9PSBOVUxMKSB7CkBAIC00MjUsNyArNDMyLDggQEAKIAlzdHJ1Y3Qgc29ja2FkZHJfZG4gKnNkbiA9IChzdHJ1Y3Qgc29ja2FkZHJfZG4gKikmaWZyLT5pZnJfYWRkcjsKIAlzdHJ1Y3QgZG5fZGV2ICpkbl9kYjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCXN0cnVjdCBkbl9pZmFkZHIgKmlmYSA9IE5VTEwsICoqaWZhcCA9IE5VTEw7CisJc3RydWN0IGRuX2lmYWRkciAqaWZhID0gTlVMTDsKKwlzdHJ1Y3QgZG5faWZhZGRyIF9fcmN1ICoqaWZhcCA9IE5VTEw7CiAJaW50IHJldCA9IDA7CiAKIAlpZiAoY29weV9mcm9tX3VzZXIoaWZyLCBhcmcsIEROX0lGUkVRX1NJWkUpKQpAQCAtNDU0LDggKzQ2MiwxMCBAQAogCQlnb3RvIGRvbmU7CiAJfQogCi0JaWYgKChkbl9kYiA9IGRldi0+ZG5fcHRyKSAhPSBOVUxMKSB7Ci0JCWZvciAoaWZhcCA9ICZkbl9kYi0+aWZhX2xpc3Q7IChpZmE9KmlmYXApICE9IE5VTEw7IGlmYXAgPSAmaWZhLT5pZmFfbmV4dCkKKwlpZiAoKGRuX2RiID0gcnRubF9kZXJlZmVyZW5jZShkZXYtPmRuX3B0cikpICE9IE5VTEwpIHsKKwkJZm9yIChpZmFwID0gJmRuX2RiLT5pZmFfbGlzdDsKKwkJICAgICAoaWZhID0gcnRubF9kZXJlZmVyZW5jZSgqaWZhcCkpICE9IE5VTEw7CisJCSAgICAgaWZhcCA9ICZpZmEtPmlmYV9uZXh0KQogCQkJaWYgKHN0cmNtcChpZnItPmlmcl9uYW1lLCBpZmEtPmlmYV9sYWJlbCkgPT0gMCkKIAkJCQlicmVhazsKIAl9CkBAIC01NTgsNyArNTY4LDcgQEAKIAogCWRldiA9IF9fZGV2X2dldF9ieV9pbmRleCgmaW5pdF9uZXQsIGlmaW5kZXgpOwogCWlmIChkZXYpCi0JCWRuX2RldiA9IGRldi0+ZG5fcHRyOworCQlkbl9kZXYgPSBydG5sX2RlcmVmZXJlbmNlKGRldi0+ZG5fcHRyKTsKIAogCXJldHVybiBkbl9kZXY7CiB9CkBAIC01NzYsNyArNTg2LDggQEAKIAlzdHJ1Y3QgbmxhdHRyICp0YltJRkFfTUFYKzFdOwogCXN0cnVjdCBkbl9kZXYgKmRuX2RiOwogCXN0cnVjdCBpZmFkZHJtc2cgKmlmbTsKLQlzdHJ1Y3QgZG5faWZhZGRyICppZmEsICoqaWZhcDsKKwlzdHJ1Y3QgZG5faWZhZGRyICppZmE7CisJc3RydWN0IGRuX2lmYWRkciBfX3JjdSAqKmlmYXA7CiAJaW50IGVyciA9IC1FSU5WQUw7CiAKIAlpZiAoIW5ldF9lcShuZXQsICZpbml0X25ldCkpCkBAIC01OTIsNyArNjAzLDkgQEAKIAkJZ290byBlcnJvdXQ7CiAKIAllcnIgPSAtRUFERFJOT1RBVkFJTDsKLQlmb3IgKGlmYXAgPSAmZG5fZGItPmlmYV9saXN0OyAoaWZhID0gKmlmYXApOyBpZmFwID0gJmlmYS0+aWZhX25leHQpIHsKKwlmb3IgKGlmYXAgPSAmZG5fZGItPmlmYV9saXN0OworCSAgICAgKGlmYSA9IHJ0bmxfZGVyZWZlcmVuY2UoKmlmYXApKSAhPSBOVUxMOworCSAgICAgaWZhcCA9ICZpZmEtPmlmYV9uZXh0KSB7CiAJCWlmICh0YltJRkFfTE9DQUxdICYmCiAJCSAgICBubGFfbWVtY21wKHRiW0lGQV9MT0NBTF0sICZpZmEtPmlmYV9sb2NhbCwgMikpCiAJCQljb250aW51ZTsKQEAgLTYzMiw3ICs2NDUsNyBAQAogCWlmICgoZGV2ID0gX19kZXZfZ2V0X2J5X2luZGV4KCZpbml0X25ldCwgaWZtLT5pZmFfaW5kZXgpKSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWlmICgoZG5fZGIgPSBkZXYtPmRuX3B0cikgPT0gTlVMTCkgeworCWlmICgoZG5fZGIgPSBydG5sX2RlcmVmZXJlbmNlKGRldi0+ZG5fcHRyKSkgPT0gTlVMTCkgewogCQlkbl9kYiA9IGRuX2Rldl9jcmVhdGUoZGV2LCAmZXJyKTsKIAkJaWYgKCFkbl9kYikKIAkJCXJldHVybiBlcnI7CkBAIC03NDgsMTEgKzc2MSwxMSBAQAogCQkJc2tpcF9uYWRkciA9IDA7CiAJCX0KIAotCQlpZiAoKGRuX2RiID0gZGV2LT5kbl9wdHIpID09IE5VTEwpCisJCWlmICgoZG5fZGIgPSBydG5sX2RlcmVmZXJlbmNlKGRldi0+ZG5fcHRyKSkgPT0gTlVMTCkKIAkJCWdvdG8gY29udDsKIAotCQlmb3IgKGlmYSA9IGRuX2RiLT5pZmFfbGlzdCwgZG5faWR4ID0gMDsgaWZhOwotCQkgICAgIGlmYSA9IGlmYS0+aWZhX25leHQsIGRuX2lkeCsrKSB7CisJCWZvciAoaWZhID0gcnRubF9kZXJlZmVyZW5jZShkbl9kYi0+aWZhX2xpc3QpLCBkbl9pZHggPSAwOyBpZmE7CisJCSAgICAgaWZhID0gcnRubF9kZXJlZmVyZW5jZShpZmEtPmlmYV9uZXh0KSwgZG5faWR4KyspIHsKIAkJCWlmIChkbl9pZHggPCBza2lwX25hZGRyKQogCQkJCWNvbnRpbnVlOwogCkBAIC03NzMsMjEgKzc4NiwyMiBAQAogCiBzdGF0aWMgaW50IGRuX2Rldl9nZXRfZmlyc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX19sZTE2ICphZGRyKQogewotCXN0cnVjdCBkbl9kZXYgKmRuX2RiID0gKHN0cnVjdCBkbl9kZXYgKilkZXYtPmRuX3B0cjsKKwlzdHJ1Y3QgZG5fZGV2ICpkbl9kYjsKIAlzdHJ1Y3QgZG5faWZhZGRyICppZmE7CiAJaW50IHJ2ID0gLUVOT0RFVjsKIAorCXJjdV9yZWFkX2xvY2soKTsKKwlkbl9kYiA9IHJjdV9kZXJlZmVyZW5jZShkZXYtPmRuX3B0cik7CiAJaWYgKGRuX2RiID09IE5VTEwpCiAJCWdvdG8gb3V0OwogCi0JcnRubF9sb2NrKCk7Ci0JaWZhID0gZG5fZGItPmlmYV9saXN0OworCWlmYSA9IHJjdV9kZXJlZmVyZW5jZShkbl9kYi0+aWZhX2xpc3QpOwogCWlmIChpZmEgIT0gTlVMTCkgewogCQkqYWRkciA9IGlmYS0+aWZhX2xvY2FsOwogCQlydiA9IDA7CiAJfQotCXJ0bmxfdW5sb2NrKCk7CiBvdXQ6CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAJcmV0dXJuIHJ2OwogfQogCkBAIC04MjMsNyArODM3LDcgQEAKIAlzdHJ1Y3QgZW5kbm9kZV9oZWxsb19tZXNzYWdlICptc2c7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7CiAJX19sZTE2ICpwa3RsZW47Ci0Jc3RydWN0IGRuX2RldiAqZG5fZGIgPSAoc3RydWN0IGRuX2RldiAqKWRldi0+ZG5fcHRyOworCXN0cnVjdCBkbl9kZXYgKmRuX2RiID0gcmN1X2RlcmVmZXJlbmNlX3JhdyhkZXYtPmRuX3B0cik7CiAKIAlpZiAoKHNrYiA9IGRuX2FsbG9jX3NrYihOVUxMLCBzaXplb2YoKm1zZyksIEdGUF9BVE9NSUMpKSA9PSBOVUxMKQogCQlyZXR1cm47CkBAIC04ODksNyArOTAzLDcgQEAKIHN0YXRpYyB2b2lkIGRuX3NlbmRfcm91dGVyX2hlbGxvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBkbl9pZmFkZHIgKmlmYSkKIHsKIAlpbnQgbjsKLQlzdHJ1Y3QgZG5fZGV2ICpkbl9kYiA9IGRldi0+ZG5fcHRyOworCXN0cnVjdCBkbl9kZXYgKmRuX2RiID0gcmN1X2RlcmVmZXJlbmNlX3JhdyhkZXYtPmRuX3B0cik7CiAJc3RydWN0IGRuX25laWdoICpkbiA9IChzdHJ1Y3QgZG5fbmVpZ2ggKilkbl9kYi0+cm91dGVyOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJc2l6ZV90IHNpemU7CkBAIC05NjAsNyArOTc0LDcgQEAKIAogc3RhdGljIHZvaWQgZG5fc2VuZF9icmRfaGVsbG8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGRuX2lmYWRkciAqaWZhKQogewotCXN0cnVjdCBkbl9kZXYgKmRuX2RiID0gKHN0cnVjdCBkbl9kZXYgKilkZXYtPmRuX3B0cjsKKwlzdHJ1Y3QgZG5fZGV2ICpkbl9kYiA9IHJjdV9kZXJlZmVyZW5jZV9yYXcoZGV2LT5kbl9wdHIpOwogCiAJaWYgKGRuX2RiLT5wYXJtcy5mb3J3YXJkaW5nID09IDApCiAJCWRuX3NlbmRfZW5kbm9kZV9oZWxsbyhkZXYsIGlmYSk7CkBAIC05OTgsNyArMTAxMiw3IEBACiAKIHN0YXRpYyBpbnQgZG5fZXRoX3VwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGRuX2RldiAqZG5fZGIgPSBkZXYtPmRuX3B0cjsKKwlzdHJ1Y3QgZG5fZGV2ICpkbl9kYiA9IHJjdV9kZXJlZmVyZW5jZV9yYXcoZGV2LT5kbl9wdHIpOwogCiAJaWYgKGRuX2RiLT5wYXJtcy5mb3J3YXJkaW5nID09IDApCiAJCWRldl9tY19hZGQoZGV2LCBkbl9ydF9hbGxfZW5kX21jYXN0KTsKQEAgLTEwMTIsNyArMTAyNiw3IEBACiAKIHN0YXRpYyB2b2lkIGRuX2V0aF9kb3duKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGRuX2RldiAqZG5fZGIgPSBkZXYtPmRuX3B0cjsKKwlzdHJ1Y3QgZG5fZGV2ICpkbl9kYiA9IHJjdV9kZXJlZmVyZW5jZV9yYXcoZGV2LT5kbl9wdHIpOwogCiAJaWYgKGRuX2RiLT5wYXJtcy5mb3J3YXJkaW5nID09IDApCiAJCWRldl9tY19kZWwoZGV2LCBkbl9ydF9hbGxfZW5kX21jYXN0KTsKQEAgLTEwMjUsMTIgKzEwMzksMTYgQEAKIHN0YXRpYyB2b2lkIGRuX2Rldl90aW1lcl9mdW5jKHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilhcmc7Ci0Jc3RydWN0IGRuX2RldiAqZG5fZGIgPSBkZXYtPmRuX3B0cjsKKwlzdHJ1Y3QgZG5fZGV2ICpkbl9kYjsKIAlzdHJ1Y3QgZG5faWZhZGRyICppZmE7CiAKKwlyY3VfcmVhZF9sb2NrKCk7CisJZG5fZGIgPSByY3VfZGVyZWZlcmVuY2UoZGV2LT5kbl9wdHIpOwogCWlmIChkbl9kYi0+dDMgPD0gZG5fZGItPnBhcm1zLnQyKSB7CiAJCWlmIChkbl9kYi0+cGFybXMudGltZXIzKSB7Ci0JCQlmb3IoaWZhID0gZG5fZGItPmlmYV9saXN0OyBpZmE7IGlmYSA9IGlmYS0+aWZhX25leHQpIHsKKwkJCWZvciAoaWZhID0gcmN1X2RlcmVmZXJlbmNlKGRuX2RiLT5pZmFfbGlzdCk7CisJCQkgICAgIGlmYTsKKwkJCSAgICAgaWZhID0gcmN1X2RlcmVmZXJlbmNlKGlmYS0+aWZhX25leHQpKSB7CiAJCQkJaWYgKCEoaWZhLT5pZmFfZmxhZ3MgJiBJRkFfRl9TRUNPTkRBUlkpKQogCQkJCQlkbl9kYi0+cGFybXMudGltZXIzKGRldiwgaWZhKTsKIAkJCX0KQEAgLTEwMzksMTMgKzEwNTcsMTMgQEAKIAl9IGVsc2UgewogCQlkbl9kYi0+dDMgLT0gZG5fZGItPnBhcm1zLnQyOwogCX0KLQorCXJjdV9yZWFkX3VubG9jaygpOwogCWRuX2Rldl9zZXRfdGltZXIoZGV2KTsKIH0KIAogc3RhdGljIHZvaWQgZG5fZGV2X3NldF90aW1lcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBkbl9kZXYgKmRuX2RiID0gZGV2LT5kbl9wdHI7CisJc3RydWN0IGRuX2RldiAqZG5fZGIgPSByY3VfZGVyZWZlcmVuY2VfcmF3KGRldi0+ZG5fcHRyKTsKIAogCWlmIChkbl9kYi0+cGFybXMudDIgPiBkbl9kYi0+cGFybXMudDMpCiAJCWRuX2RiLT5wYXJtcy50MiA9IGRuX2RiLT5wYXJtcy50MzsKQEAgLTEwNzcsOCArMTA5NSw4IEBACiAJCXJldHVybiBOVUxMOwogCiAJbWVtY3B5KCZkbl9kYi0+cGFybXMsIHAsIHNpemVvZihzdHJ1Y3QgZG5fZGV2X3Bhcm1zKSk7Ci0Jc21wX3dtYigpOwotCWRldi0+ZG5fcHRyID0gZG5fZGI7CisKKwlyY3VfYXNzaWduX3BvaW50ZXIoZGV2LT5kbl9wdHIsIGRuX2RiKTsKIAlkbl9kYi0+ZGV2ID0gZGV2OwogCWluaXRfdGltZXIoJmRuX2RiLT50aW1lcik7CiAKQEAgLTEwODYsNyArMTEwNCw3IEBACiAKIAlkbl9kYi0+bmVpZ2hfcGFybXMgPSBuZWlnaF9wYXJtc19hbGxvYyhkZXYsICZkbl9uZWlnaF90YWJsZSk7CiAJaWYgKCFkbl9kYi0+bmVpZ2hfcGFybXMpIHsKLQkJZGV2LT5kbl9wdHIgPSBOVUxMOworCQlyY3VfYXNzaWduX3BvaW50ZXIoZGV2LT5kbl9wdHIsIE5VTEwpOwogCQlrZnJlZShkbl9kYik7CiAJCXJldHVybiBOVUxMOwogCX0KQEAgLTExMjUsNyArMTE0Myw3IEBACiAJc3RydWN0IGRuX2lmYWRkciAqaWZhOwogCV9fbGUxNiBhZGRyID0gZGVjbmV0X2FkZHJlc3M7CiAJaW50IG1heWJlX2RlZmF1bHQgPSAwOwotCXN0cnVjdCBkbl9kZXYgKmRuX2RiID0gKHN0cnVjdCBkbl9kZXYgKilkZXYtPmRuX3B0cjsKKwlzdHJ1Y3QgZG5fZGV2ICpkbl9kYiA9IHJ0bmxfZGVyZWZlcmVuY2UoZGV2LT5kbl9wdHIpOwogCiAJaWYgKChkZXYtPnR5cGUgIT0gQVJQSFJEX0VUSEVSKSAmJiAoZGV2LT50eXBlICE9IEFSUEhSRF9MT09QQkFDSykpCiAJCXJldHVybjsKQEAgLTExNzYsNyArMTE5NCw3IEBACiAKIHN0YXRpYyB2b2lkIGRuX2Rldl9kZWxldGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgZG5fZGV2ICpkbl9kYiA9IGRldi0+ZG5fcHRyOworCXN0cnVjdCBkbl9kZXYgKmRuX2RiID0gcnRubF9kZXJlZmVyZW5jZShkZXYtPmRuX3B0cik7CiAKIAlpZiAoZG5fZGIgPT0gTlVMTCkKIAkJcmV0dXJuOwpAQCAtMTIwNCwxMyArMTIyMiwxMyBAQAogCiB2b2lkIGRuX2Rldl9kb3duKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGRuX2RldiAqZG5fZGIgPSBkZXYtPmRuX3B0cjsKKwlzdHJ1Y3QgZG5fZGV2ICpkbl9kYiA9IHJ0bmxfZGVyZWZlcmVuY2UoZGV2LT5kbl9wdHIpOwogCXN0cnVjdCBkbl9pZmFkZHIgKmlmYTsKIAogCWlmIChkbl9kYiA9PSBOVUxMKQogCQlyZXR1cm47CiAKLQl3aGlsZSgoaWZhID0gZG5fZGItPmlmYV9saXN0KSAhPSBOVUxMKSB7CisJd2hpbGUgKChpZmEgPSBydG5sX2RlcmVmZXJlbmNlKGRuX2RiLT5pZmFfbGlzdCkpICE9IE5VTEwpIHsKIAkJZG5fZGV2X2RlbF9pZmEoZG5fZGIsICZkbl9kYi0+aWZhX2xpc3QsIDApOwogCQlkbl9kZXZfZnJlZV9pZmEoaWZhKTsKIAl9CkBAIC0xMjcwLDcgKzEyODgsNyBAQAogfQogCiBzdGF0aWMgdm9pZCAqZG5fZGV2X3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCi0JX19hY3F1aXJlcyhyY3UpCisJX19hY3F1aXJlcyhSQ1UpCiB7CiAJaW50IGk7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKQEAgLTEzMTMsNyArMTMzMSw3IEBACiB9CiAKIHN0YXRpYyB2b2lkIGRuX2Rldl9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKLQlfX3JlbGVhc2VzKHJjdSkKKwlfX3JlbGVhc2VzKFJDVSkKIHsKIAlyY3VfcmVhZF91bmxvY2soKTsKIH0KQEAgLTEzNDAsNyArMTM1OCw3IEBACiAJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB2OwogCQljaGFyIHBlZXJfYnVmW0ROX0FTQ0JVRl9MRU5dOwogCQljaGFyIHJvdXRlcl9idWZbRE5fQVNDQlVGX0xFTl07Ci0JCXN0cnVjdCBkbl9kZXYgKmRuX2RiID0gZGV2LT5kbl9wdHI7CisJCXN0cnVjdCBkbl9kZXYgKmRuX2RiID0gcmN1X2RlcmVmZXJlbmNlKGRldi0+ZG5fcHRyKTsKIAogCQlzZXFfcHJpbnRmKHNlcSwgIiUtOHMgJTFzICAgICAlMDR1ICUwNHUgICAlMDRsdSAlMDRsdSIKIAkJCQkiICAgJTA0aHUgICAgJTAzZCAlMDJ4ICAgICUtMTBzICUtN3MgJS03c1xuIiwKZGlmZiAtLWdpdCBhL25ldC9kZWNuZXQvZG5fZmliLmMgYi9uZXQvZGVjbmV0L2RuX2ZpYi5jCmluZGV4IDRhYjk2YzEuLjBlZjBhODEgMTAwNjQ0Ci0tLSBhL25ldC9kZWNuZXQvZG5fZmliLmMKKysrIGIvbmV0L2RlY25ldC9kbl9maWIuYwpAQCAtNjEwLDEwICs2MTAsMTIgQEAKIAkvKiBTY2FuIGRldmljZSBsaXN0ICovCiAJcmN1X3JlYWRfbG9jaygpOwogCWZvcl9lYWNoX25ldGRldl9yY3UoJmluaXRfbmV0LCBkZXYpIHsKLQkJZG5fZGIgPSBkZXYtPmRuX3B0cjsKKwkJZG5fZGIgPSByY3VfZGVyZWZlcmVuY2UoZGV2LT5kbl9wdHIpOwogCQlpZiAoZG5fZGIgPT0gTlVMTCkKIAkJCWNvbnRpbnVlOwotCQlmb3IoaWZhMiA9IGRuX2RiLT5pZmFfbGlzdDsgaWZhMjsgaWZhMiA9IGlmYTItPmlmYV9uZXh0KSB7CisJCWZvciAoaWZhMiA9IHJjdV9kZXJlZmVyZW5jZShkbl9kYi0+aWZhX2xpc3QpOworCQkgICAgIGlmYTIgIT0gTlVMTDsKKwkJICAgICBpZmEyID0gcmN1X2RlcmVmZXJlbmNlKGlmYTItPmlmYV9uZXh0KSkgewogCQkJaWYgKGlmYTItPmlmYV9sb2NhbCA9PSBpZmEtPmlmYV9sb2NhbCkgewogCQkJCWZvdW5kX2l0ID0gMTsKIAkJCQlicmVhazsKZGlmZiAtLWdpdCBhL25ldC9kZWNuZXQvZG5fbmVpZ2guYyBiL25ldC9kZWNuZXQvZG5fbmVpZ2guYwppbmRleCBhMDg1ZGJjLi42MDJkYWRlIDEwMDY0NAotLS0gYS9uZXQvZGVjbmV0L2RuX25laWdoLmMKKysrIGIvbmV0L2RlY25ldC9kbl9uZWlnaC5jCkBAIC0zOTEsNyArMzkxLDcgQEAKIAkJd3JpdGVfbG9jaygmbmVpZ2gtPmxvY2spOwogCiAJCW5laWdoLT51c2VkID0gamlmZmllczsKLQkJZG5fZGIgPSAoc3RydWN0IGRuX2RldiAqKW5laWdoLT5kZXYtPmRuX3B0cjsKKwkJZG5fZGIgPSByY3VfZGVyZWZlcmVuY2UobmVpZ2gtPmRldi0+ZG5fcHRyKTsKIAogCQlpZiAoIShuZWlnaC0+bnVkX3N0YXRlICYgTlVEX1BFUk1BTkVOVCkpIHsKIAkJCW5laWdoLT51cGRhdGVkID0gamlmZmllczsKZGlmZiAtLWdpdCBhL25ldC9kZWNuZXQvZG5fcm91dGUuYyBiL25ldC9kZWNuZXQvZG5fcm91dGUuYwppbmRleCBkZjBmM2U1Li41ZTYzNjM2IDEwMDY0NAotLS0gYS9uZXQvZGVjbmV0L2RuX3JvdXRlLmMKKysrIGIvbmV0L2RlY25ldC9kbl9yb3V0ZS5jCkBAIC05Myw3ICs5Myw3IEBACiAKIHN0cnVjdCBkbl9ydF9oYXNoX2J1Y2tldAogewotCXN0cnVjdCBkbl9yb3V0ZSAqY2hhaW47CisJc3RydWN0IGRuX3JvdXRlIF9fcmN1ICpjaGFpbjsKIAlzcGlubG9ja190IGxvY2s7CiB9OwogCkBAIC0xMTAsNiArMTEwLDggQEAKIAogc3RhdGljIGludCBkbl9kc3RfZ2Moc3RydWN0IGRzdF9vcHMgKm9wcyk7CiBzdGF0aWMgc3RydWN0IGRzdF9lbnRyeSAqZG5fZHN0X2NoZWNrKHN0cnVjdCBkc3RfZW50cnkgKiwgX191MzIpOworc3RhdGljIHVuc2lnbmVkIGludCBkbl9kc3RfZGVmYXVsdF9hZHZtc3MoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZG5fZHN0X2RlZmF1bHRfbXR1KGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCk7CiBzdGF0aWMgc3RydWN0IGRzdF9lbnRyeSAqZG5fZHN0X25lZ2F0aXZlX2FkdmljZShzdHJ1Y3QgZHN0X2VudHJ5ICopOwogc3RhdGljIHZvaWQgZG5fZHN0X2xpbmtfZmFpbHVyZShzdHJ1Y3Qgc2tfYnVmZiAqKTsKIHN0YXRpYyB2b2lkIGRuX2RzdF91cGRhdGVfcG10dShzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsIHUzMiBtdHUpOwpAQCAtMTI5LDYgKzEzMSw4IEBACiAJLmdjX3RocmVzaCA9CQkxMjgsCiAJLmdjID0JCQlkbl9kc3RfZ2MsCiAJLmNoZWNrID0JCWRuX2RzdF9jaGVjaywKKwkuZGVmYXVsdF9hZHZtc3MgPQlkbl9kc3RfZGVmYXVsdF9hZHZtc3MsCisJLmRlZmF1bHRfbXR1ID0JCWRuX2RzdF9kZWZhdWx0X210dSwKIAkubmVnYXRpdmVfYWR2aWNlID0JZG5fZHN0X25lZ2F0aXZlX2FkdmljZSwKIAkubGlua19mYWlsdXJlID0JCWRuX2RzdF9saW5rX2ZhaWx1cmUsCiAJLnVwZGF0ZV9wbXR1ID0JCWRuX2RzdF91cGRhdGVfcG10dSwKQEAgLTE1NywxNSArMTYxLDE3IEBACiBzdGF0aWMgdm9pZCBkbl9kc3RfY2hlY2tfZXhwaXJlKHVuc2lnbmVkIGxvbmcgZHVtbXkpCiB7CiAJaW50IGk7Ci0Jc3RydWN0IGRuX3JvdXRlICpydCwgKipydHA7CisJc3RydWN0IGRuX3JvdXRlICpydDsKKwlzdHJ1Y3QgZG5fcm91dGUgX19yY3UgKipydHA7CiAJdW5zaWduZWQgbG9uZyBub3cgPSBqaWZmaWVzOwogCXVuc2lnbmVkIGxvbmcgZXhwaXJlID0gMTIwICogSFo7CiAKLQlmb3IoaSA9IDA7IGkgPD0gZG5fcnRfaGFzaF9tYXNrOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDw9IGRuX3J0X2hhc2hfbWFzazsgaSsrKSB7CiAJCXJ0cCA9ICZkbl9ydF9oYXNoX3RhYmxlW2ldLmNoYWluOwogCiAJCXNwaW5fbG9jaygmZG5fcnRfaGFzaF90YWJsZVtpXS5sb2NrKTsKLQkJd2hpbGUoKHJ0PSpydHApICE9IE5VTEwpIHsKKwkJd2hpbGUgKChydCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoKnJ0cCwKKwkJCQkJCWxvY2tkZXBfaXNfaGVsZCgmZG5fcnRfaGFzaF90YWJsZVtpXS5sb2NrKSkpICE9IE5VTEwpIHsKIAkJCWlmIChhdG9taWNfcmVhZCgmcnQtPmRzdC5fX3JlZmNudCkgfHwKIAkJCQkJKG5vdyAtIHJ0LT5kc3QubGFzdHVzZSkgPCBleHBpcmUpIHsKIAkJCQlydHAgPSAmcnQtPmRzdC5kbl9uZXh0OwpAQCAtMTg2LDE3ICsxOTIsMTkgQEAKIAogc3RhdGljIGludCBkbl9kc3RfZ2Moc3RydWN0IGRzdF9vcHMgKm9wcykKIHsKLQlzdHJ1Y3QgZG5fcm91dGUgKnJ0LCAqKnJ0cDsKKwlzdHJ1Y3QgZG5fcm91dGUgKnJ0OworCXN0cnVjdCBkbl9yb3V0ZSBfX3JjdSAqKnJ0cDsKIAlpbnQgaTsKIAl1bnNpZ25lZCBsb25nIG5vdyA9IGppZmZpZXM7CiAJdW5zaWduZWQgbG9uZyBleHBpcmUgPSAxMCAqIEhaOwogCi0JZm9yKGkgPSAwOyBpIDw9IGRuX3J0X2hhc2hfbWFzazsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8PSBkbl9ydF9oYXNoX21hc2s7IGkrKykgewogCiAJCXNwaW5fbG9ja19iaCgmZG5fcnRfaGFzaF90YWJsZVtpXS5sb2NrKTsKIAkJcnRwID0gJmRuX3J0X2hhc2hfdGFibGVbaV0uY2hhaW47CiAKLQkJd2hpbGUoKHJ0PSpydHApICE9IE5VTEwpIHsKKwkJd2hpbGUgKChydCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoKnJ0cCwKKwkJCQkJCWxvY2tkZXBfaXNfaGVsZCgmZG5fcnRfaGFzaF90YWJsZVtpXS5sb2NrKSkpICE9IE5VTEwpIHsKIAkJCWlmIChhdG9taWNfcmVhZCgmcnQtPmRzdC5fX3JlZmNudCkgfHwKIAkJCQkJKG5vdyAtIHJ0LT5kc3QubGFzdHVzZSkgPCBleHBpcmUpIHsKIAkJCQlydHAgPSAmcnQtPmRzdC5kbl9uZXh0OwpAQCAtMjI3LDcgKzIzNSw3IEBACiB7CiAJdTMyIG1pbl9tdHUgPSAyMzA7CiAJc3RydWN0IGRuX2RldiAqZG4gPSBkc3QtPm5laWdoYm91ciA/Ci0JCQkgICAgKHN0cnVjdCBkbl9kZXYgKilkc3QtPm5laWdoYm91ci0+ZGV2LT5kbl9wdHIgOiBOVUxMOworCQkJICAgIHJjdV9kZXJlZmVyZW5jZV9yYXcoZHN0LT5uZWlnaGJvdXItPmRldi0+ZG5fcHRyKSA6IE5VTEw7CiAKIAlpZiAoZG4gJiYgZG4tPnVzZV9sb25nID09IDApCiAJCW1pbl9tdHUgLT0gNjsKQEAgLTIzNiwxMyArMjQ0LDE0IEBACiAKIAlpZiAoZHN0X21ldHJpYyhkc3QsIFJUQVhfTVRVKSA+IG10dSAmJiBtdHUgPj0gbWluX210dSkgewogCQlpZiAoIShkc3RfbWV0cmljX2xvY2tlZChkc3QsIFJUQVhfTVRVKSkpIHsKLQkJCWRzdC0+bWV0cmljc1tSVEFYX01UVS0xXSA9IG10dTsKKwkJCWRzdF9tZXRyaWNfc2V0KGRzdCwgUlRBWF9NVFUsIG10dSk7CiAJCQlkc3Rfc2V0X2V4cGlyZXMoZHN0LCBkbl9ydF9tdHVfZXhwaXJlcyk7CiAJCX0KIAkJaWYgKCEoZHN0X21ldHJpY19sb2NrZWQoZHN0LCBSVEFYX0FEVk1TUykpKSB7CiAJCQl1MzIgbXNzID0gbXR1IC0gRE5fTUFYX05TUF9EQVRBX0hFQURFUjsKLQkJCWlmIChkc3RfbWV0cmljKGRzdCwgUlRBWF9BRFZNU1MpID4gbXNzKQotCQkJCWRzdC0+bWV0cmljc1tSVEFYX0FEVk1TUy0xXSA9IG1zczsKKwkJCXUzMiBleGlzdGluZ19tc3MgPSBkc3RfbWV0cmljX3Jhdyhkc3QsIFJUQVhfQURWTVNTKTsKKwkJCWlmICghZXhpc3RpbmdfbXNzIHx8IGV4aXN0aW5nX21zcyA+IG1zcykKKwkJCQlkc3RfbWV0cmljX3NldChkc3QsIFJUQVhfQURWTVNTLCBtc3MpOwogCQl9CiAJfQogfQpAQCAtMjY3LDIzICsyNzYsMjUgQEAKIAogc3RhdGljIGlubGluZSBpbnQgY29tcGFyZV9rZXlzKHN0cnVjdCBmbG93aSAqZmwxLCBzdHJ1Y3QgZmxvd2kgKmZsMikKIHsKLQlyZXR1cm4gKChmbDEtPm5sX3UuZG5fdS5kYWRkciBeIGZsMi0+bmxfdS5kbl91LmRhZGRyKSB8Ci0JCShmbDEtPm5sX3UuZG5fdS5zYWRkciBeIGZsMi0+bmxfdS5kbl91LnNhZGRyKSB8CisJcmV0dXJuICgoZmwxLT5mbGRfZHN0IF4gZmwyLT5mbGRfZHN0KSB8CisJCShmbDEtPmZsZF9zcmMgXiBmbDItPmZsZF9zcmMpIHwKIAkJKGZsMS0+bWFyayBeIGZsMi0+bWFyaykgfAotCQkoZmwxLT5ubF91LmRuX3Uuc2NvcGUgXiBmbDItPm5sX3UuZG5fdS5zY29wZSkgfAorCQkoZmwxLT5mbGRfc2NvcGUgXiBmbDItPmZsZF9zY29wZSkgfAogCQkoZmwxLT5vaWYgXiBmbDItPm9pZikgfAogCQkoZmwxLT5paWYgXiBmbDItPmlpZikpID09IDA7CiB9CiAKIHN0YXRpYyBpbnQgZG5faW5zZXJ0X3JvdXRlKHN0cnVjdCBkbl9yb3V0ZSAqcnQsIHVuc2lnbmVkIGhhc2gsIHN0cnVjdCBkbl9yb3V0ZSAqKnJwKQogewotCXN0cnVjdCBkbl9yb3V0ZSAqcnRoLCAqKnJ0aHA7CisJc3RydWN0IGRuX3JvdXRlICpydGg7CisJc3RydWN0IGRuX3JvdXRlIF9fcmN1ICoqcnRocDsKIAl1bnNpZ25lZCBsb25nIG5vdyA9IGppZmZpZXM7CiAKIAlydGhwID0gJmRuX3J0X2hhc2hfdGFibGVbaGFzaF0uY2hhaW47CiAKIAlzcGluX2xvY2tfYmgoJmRuX3J0X2hhc2hfdGFibGVbaGFzaF0ubG9jayk7Ci0Jd2hpbGUoKHJ0aCA9ICpydGhwKSAhPSBOVUxMKSB7CisJd2hpbGUgKChydGggPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKCpydGhwLAorCQkJCQkJbG9ja2RlcF9pc19oZWxkKCZkbl9ydF9oYXNoX3RhYmxlW2hhc2hdLmxvY2spKSkgIT0gTlVMTCkgewogCQlpZiAoY29tcGFyZV9rZXlzKCZydGgtPmZsLCAmcnQtPmZsKSkgewogCQkJLyogUHV0IGl0IGZpcnN0ICovCiAJCQkqcnRocCA9IHJ0aC0+ZHN0LmRuX25leHQ7CkBAIC0zMTUsMTUgKzMyNiwxNSBAQAogCWludCBpOwogCXN0cnVjdCBkbl9yb3V0ZSAqcnQsICpuZXh0OwogCi0JZm9yKGkgPSAwOyBpIDwgZG5fcnRfaGFzaF9tYXNrOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgZG5fcnRfaGFzaF9tYXNrOyBpKyspIHsKIAkJc3Bpbl9sb2NrX2JoKCZkbl9ydF9oYXNoX3RhYmxlW2ldLmxvY2spOwogCi0JCWlmICgocnQgPSB4Y2hnKCZkbl9ydF9oYXNoX3RhYmxlW2ldLmNoYWluLCBOVUxMKSkgPT0gTlVMTCkKKwkJaWYgKChydCA9IHhjaGcoKHN0cnVjdCBkbl9yb3V0ZSAqKikmZG5fcnRfaGFzaF90YWJsZVtpXS5jaGFpbiwgTlVMTCkpID09IE5VTEwpCiAJCQlnb3RvIG5vdGhpbmdfdG9fZGVjbGFyZTsKIAotCQlmb3IoOyBydDsgcnQ9bmV4dCkgewotCQkJbmV4dCA9IHJ0LT5kc3QuZG5fbmV4dDsKLQkJCXJ0LT5kc3QuZG5fbmV4dCA9IE5VTEw7CisJCWZvcig7IHJ0OyBydCA9IG5leHQpIHsKKwkJCW5leHQgPSByY3VfZGVyZWZlcmVuY2VfcmF3KHJ0LT5kc3QuZG5fbmV4dCk7CisJCQlSQ1VfSU5JVF9QT0lOVEVSKHJ0LT5kc3QuZG5fbmV4dCwgTlVMTCk7CiAJCQlkc3RfZnJlZSgoc3RydWN0IGRzdF9lbnRyeSAqKXJ0KTsKIAkJfQogCkBAIC00NTgsMTUgKzQ2OSwxNiBAQAogICovCiBzdGF0aWMgaW50IGRuX3JvdXRlX3J4X3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBkbl9za2JfY2IgKmNiID0gRE5fU0tCX0NCKHNrYik7CisJc3RydWN0IGRuX3NrYl9jYiAqY2I7CiAJaW50IGVycjsKIAogCWlmICgoZXJyID0gZG5fcm91dGVfaW5wdXQoc2tiKSkgPT0gMCkKIAkJcmV0dXJuIGRzdF9pbnB1dChza2IpOwogCisJY2IgPSBETl9TS0JfQ0Ioc2tiKTsKIAlpZiAoZGVjbmV0X2RlYnVnX2xldmVsICYgNCkgewogCQljaGFyICpkZXZuYW1lID0gc2tiLT5kZXYgPyBza2ItPmRldi0+bmFtZSA6ICI/Pz8iOwotCQlzdHJ1Y3QgZG5fc2tiX2NiICpjYiA9IEROX1NLQl9DQihza2IpOworCiAJCXByaW50ayhLRVJOX0RFQlVHCiAJCQkiREVDbmV0OiBkbl9yb3V0ZV9yeF9wYWNrZXQ6IHJ0X2ZsYWdzPTB4JTAyeCBkZXY9JXMgbGVuPSVkIHNyYz0weCUwNGh4IGRzdD0weCUwNGh4IGVycj0lZCB0eXBlPSVkXG4iLAogCQkJKGludCljYi0+cnRfZmxhZ3MsIGRldm5hbWUsIHNrYi0+bGVuLApAQCAtNTczLDcgKzU4NSw3IEBACiAJc3RydWN0IGRuX3NrYl9jYiAqY2I7CiAJdW5zaWduZWQgY2hhciBmbGFncyA9IDA7CiAJX191MTYgbGVuID0gbGUxNl90b19jcHUoKihfX2xlMTYgKilza2ItPmRhdGEpOwotCXN0cnVjdCBkbl9kZXYgKmRuID0gKHN0cnVjdCBkbl9kZXYgKilkZXYtPmRuX3B0cjsKKwlzdHJ1Y3QgZG5fZGV2ICpkbiA9IHJjdV9kZXJlZmVyZW5jZShkZXYtPmRuX3B0cik7CiAJdW5zaWduZWQgY2hhciBwYWRsZW4gPSAwOwogCiAJaWYgKCFuZXRfZXEoZGV2X25ldChkZXYpLCAmaW5pdF9uZXQpKQpAQCAtNzI4LDcgKzc0MCw3IEBACiB7CiAJc3RydWN0IGRuX3NrYl9jYiAqY2IgPSBETl9TS0JfQ0Ioc2tiKTsKIAlzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QgPSBza2JfZHN0KHNrYik7Ci0Jc3RydWN0IGRuX2RldiAqZG5fZGIgPSBkc3QtPmRldi0+ZG5fcHRyOworCXN0cnVjdCBkbl9kZXYgKmRuX2RiID0gcmN1X2RlcmVmZXJlbmNlKGRzdC0+ZGV2LT5kbl9wdHIpOwogCXN0cnVjdCBkbl9yb3V0ZSAqcnQ7CiAJc3RydWN0IG5laWdoYm91ciAqbmVpZ2ggPSBkc3QtPm5laWdoYm91cjsKIAlpbnQgaGVhZGVyX2xlbjsKQEAgLTc4OCwxOSArODAwLDI4IEBACiAJcmV0dXJuIE5FVF9SWF9EUk9QOwogfQogCitzdGF0aWMgdW5zaWduZWQgaW50IGRuX2RzdF9kZWZhdWx0X2Fkdm1zcyhjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpCit7CisJcmV0dXJuIGRuX21zc19mcm9tX3BtdHUoZHN0LT5kZXYsIGRzdF9tdHUoZHN0KSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZG5fZHN0X2RlZmF1bHRfbXR1KGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCkKK3sKKwlyZXR1cm4gZHN0LT5kZXYtPm10dTsKK30KKwogc3RhdGljIGludCBkbl9ydF9zZXRfbmV4dF9ob3Aoc3RydWN0IGRuX3JvdXRlICpydCwgc3RydWN0IGRuX2ZpYl9yZXMgKnJlcykKIHsKIAlzdHJ1Y3QgZG5fZmliX2luZm8gKmZpID0gcmVzLT5maTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcnQtPmRzdC5kZXY7CiAJc3RydWN0IG5laWdoYm91ciAqbjsKLQl1bnNpZ25lZCBtc3M7CisJdW5zaWduZWQgaW50IG1ldHJpYzsKIAogCWlmIChmaSkgewogCQlpZiAoRE5fRklCX1JFU19HVygqcmVzKSAmJgogCQkgICAgRE5fRklCX1JFU19OSCgqcmVzKS5uaF9zY29wZSA9PSBSVF9TQ09QRV9MSU5LKQogCQkJcnQtPnJ0X2dhdGV3YXkgPSBETl9GSUJfUkVTX0dXKCpyZXMpOwotCQltZW1jcHkocnQtPmRzdC5tZXRyaWNzLCBmaS0+ZmliX21ldHJpY3MsCi0JCSAgICAgICBzaXplb2YocnQtPmRzdC5tZXRyaWNzKSk7CisJCWRzdF9pbXBvcnRfbWV0cmljcygmcnQtPmRzdCwgZmktPmZpYl9tZXRyaWNzKTsKIAl9CiAJcnQtPnJ0X3R5cGUgPSByZXMtPnR5cGU7CiAKQEAgLTgxMSwxMyArODMyLDE0IEBACiAJCXJ0LT5kc3QubmVpZ2hib3VyID0gbjsKIAl9CiAKLQlpZiAoZHN0X21ldHJpYygmcnQtPmRzdCwgUlRBWF9NVFUpID09IDAgfHwKLQkgICAgZHN0X21ldHJpYygmcnQtPmRzdCwgUlRBWF9NVFUpID4gcnQtPmRzdC5kZXYtPm10dSkKLQkJcnQtPmRzdC5tZXRyaWNzW1JUQVhfTVRVLTFdID0gcnQtPmRzdC5kZXYtPm10dTsKLQltc3MgPSBkbl9tc3NfZnJvbV9wbXR1KGRldiwgZHN0X210dSgmcnQtPmRzdCkpOwotCWlmIChkc3RfbWV0cmljKCZydC0+ZHN0LCBSVEFYX0FEVk1TUykgPT0gMCB8fAotCSAgICBkc3RfbWV0cmljKCZydC0+ZHN0LCBSVEFYX0FEVk1TUykgPiBtc3MpCi0JCXJ0LT5kc3QubWV0cmljc1tSVEFYX0FEVk1TUy0xXSA9IG1zczsKKwlpZiAoZHN0X21ldHJpYygmcnQtPmRzdCwgUlRBWF9NVFUpID4gcnQtPmRzdC5kZXYtPm10dSkKKwkJZHN0X21ldHJpY19zZXQoJnJ0LT5kc3QsIFJUQVhfTVRVLCBydC0+ZHN0LmRldi0+bXR1KTsKKwltZXRyaWMgPSBkc3RfbWV0cmljX3JhdygmcnQtPmRzdCwgUlRBWF9BRFZNU1MpOworCWlmIChtZXRyaWMpIHsKKwkJdW5zaWduZWQgaW50IG1zcyA9IGRuX21zc19mcm9tX3BtdHUoZGV2LCBkc3RfbXR1KCZydC0+ZHN0KSk7CisJCWlmIChtZXRyaWMgPiBtc3MpCisJCQlkc3RfbWV0cmljX3NldCgmcnQtPmRzdCwgUlRBWF9BRFZNU1MsIG1zcyk7CisJfQogCXJldHVybiAwOwogfQogCkBAIC04MzUsMTMgKzg1NywxNiBAQAogc3RhdGljIF9fbGUxNiBkbmV0X3NlbGVjdF9zb3VyY2UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX19sZTE2IGRhZGRyLCBpbnQgc2NvcGUpCiB7CiAJX19sZTE2IHNhZGRyID0gMDsKLQlzdHJ1Y3QgZG5fZGV2ICpkbl9kYiA9IGRldi0+ZG5fcHRyOworCXN0cnVjdCBkbl9kZXYgKmRuX2RiOwogCXN0cnVjdCBkbl9pZmFkZHIgKmlmYTsKIAlpbnQgYmVzdF9tYXRjaCA9IDA7CiAJaW50IHJldDsKIAotCXJlYWRfbG9jaygmZGV2X2Jhc2VfbG9jayk7Ci0JZm9yKGlmYSA9IGRuX2RiLT5pZmFfbGlzdDsgaWZhOyBpZmEgPSBpZmEtPmlmYV9uZXh0KSB7CisJcmN1X3JlYWRfbG9jaygpOworCWRuX2RiID0gcmN1X2RlcmVmZXJlbmNlKGRldi0+ZG5fcHRyKTsKKwlmb3IgKGlmYSA9IHJjdV9kZXJlZmVyZW5jZShkbl9kYi0+aWZhX2xpc3QpOworCSAgICAgaWZhICE9IE5VTEw7CisJICAgICBpZmEgPSByY3VfZGVyZWZlcmVuY2UoaWZhLT5pZmFfbmV4dCkpIHsKIAkJaWYgKGlmYS0+aWZhX3Njb3BlID4gc2NvcGUpCiAJCQljb250aW51ZTsKIAkJaWYgKCFkYWRkcikgewpAQCAtODU0LDcgKzg3OSw3IEBACiAJCWlmIChiZXN0X21hdGNoID09IDApCiAJCQlzYWRkciA9IGlmYS0+aWZhX2xvY2FsOwogCX0KLQlyZWFkX3VubG9jaygmZGV2X2Jhc2VfbG9jayk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlyZXR1cm4gc2FkZHI7CiB9CkBAIC04NzIsMTEgKzg5Nyw5IEBACiAKIHN0YXRpYyBpbnQgZG5fcm91dGVfb3V0cHV0X3Nsb3coc3RydWN0IGRzdF9lbnRyeSAqKnBwcnQsIGNvbnN0IHN0cnVjdCBmbG93aSAqb2xkZmxwLCBpbnQgdHJ5X2hhcmQpCiB7Ci0Jc3RydWN0IGZsb3dpIGZsID0geyAubmxfdSA9IHsgLmRuX3UgPQotCQkJCSAgICAgIHsgLmRhZGRyID0gb2xkZmxwLT5mbGRfZHN0LAotCQkJCQkuc2FkZHIgPSBvbGRmbHAtPmZsZF9zcmMsCi0JCQkJCS5zY29wZSA9IFJUX1NDT1BFX1VOSVZFUlNFLAotCQkJCSAgICAgfSB9LAorCXN0cnVjdCBmbG93aSBmbCA9IHsgLmZsZF9kc3QgPSBvbGRmbHAtPmZsZF9kc3QsCisJCQkgICAgLmZsZF9zcmMgPSBvbGRmbHAtPmZsZF9zcmMsCisJCQkgICAgLmZsZF9zY29wZSA9IFJUX1NDT1BFX1VOSVZFUlNFLAogCQkJICAgIC5tYXJrID0gb2xkZmxwLT5tYXJrLAogCQkJICAgIC5paWYgPSBpbml0X25ldC5sb29wYmFja19kZXYtPmlmaW5kZXgsCiAJCQkgICAgLm9pZiA9IG9sZGZscC0+b2lmIH07CkBAIC0xMDIwLDcgKzEwNDMsNyBAQAogCQllcnIgPSAtRU5PREVWOwogCQlpZiAoZGV2X291dCA9PSBOVUxMKQogCQkJZ290byBvdXQ7Ci0JCWRuX2RiID0gZGV2X291dC0+ZG5fcHRyOworCQlkbl9kYiA9IHJjdV9kZXJlZmVyZW5jZV9yYXcoZGV2X291dC0+ZG5fcHRyKTsKIAkJLyogUG9zc2libGUgaW1wcm92ZW1lbnQgLSBjaGVjayBhbGwgZGV2aWNlcyBmb3IgbG9jYWwgYWRkciAqLwogCQlpZiAoZG5fZGV2X2lzbG9jYWwoZGV2X291dCwgZmwuZmxkX2RzdCkpIHsKIAkJCWRldl9wdXQoZGV2X291dCk7CkBAIC0xMTcxLDcgKzExOTQsNyBAQAogCQkJaWYgKChmbHAtPmZsZF9kc3QgPT0gcnQtPmZsLmZsZF9kc3QpICYmCiAJCQkgICAgKGZscC0+ZmxkX3NyYyA9PSBydC0+ZmwuZmxkX3NyYykgJiYKIAkJCSAgICAoZmxwLT5tYXJrID09IHJ0LT5mbC5tYXJrKSAmJgotCQkJICAgIChydC0+ZmwuaWlmID09IDApICYmCisJCQkgICAgZG5faXNfb3V0cHV0X3JvdXRlKHJ0KSAmJgogCQkJICAgIChydC0+Zmwub2lmID09IGZscC0+b2lmKSkgewogCQkJCWRzdF91c2UoJnJ0LT5kc3QsIGppZmZpZXMpOwogCQkJCXJjdV9yZWFkX3VubG9ja19iaCgpOwpAQCAtMTIyMCwxMSArMTI0Myw5IEBACiAJaW50IGZsYWdzID0gMDsKIAlfX2xlMTYgZ2F0ZXdheSA9IDA7CiAJX19sZTE2IGxvY2FsX3NyYyA9IDA7Ci0Jc3RydWN0IGZsb3dpIGZsID0geyAubmxfdSA9IHsgLmRuX3UgPQotCQkJCSAgICAgeyAuZGFkZHIgPSBjYi0+ZHN0LAotCQkJCSAgICAgICAuc2FkZHIgPSBjYi0+c3JjLAotCQkJCSAgICAgICAuc2NvcGUgPSBSVF9TQ09QRV9VTklWRVJTRSwKLQkJCQkgICAgfSB9LAorCXN0cnVjdCBmbG93aSBmbCA9IHsgLmZsZF9kc3QgPSBjYi0+ZHN0LAorCQkJICAgIC5mbGRfc3JjID0gY2ItPnNyYywKKwkJCSAgICAuZmxkX3Njb3BlID0gUlRfU0NPUEVfVU5JVkVSU0UsCiAJCQkgICAgLm1hcmsgPSBza2ItPm1hcmssCiAJCQkgICAgLmlpZiA9IHNrYi0+ZGV2LT5pZmluZGV4IH07CiAJc3RydWN0IGRuX2ZpYl9yZXMgcmVzID0geyAuZmkgPSBOVUxMLCAudHlwZSA9IFJUTl9VTlJFQUNIQUJMRSB9OwpAQCAtMTIzMyw3ICsxMjU0LDcgQEAKIAogCWRldl9ob2xkKGluX2Rldik7CiAKLQlpZiAoKGRuX2RiID0gaW5fZGV2LT5kbl9wdHIpID09IE5VTEwpCisJaWYgKChkbl9kYiA9IHJjdV9kZXJlZmVyZW5jZShpbl9kZXYtPmRuX3B0cikpID09IE5VTEwpCiAJCWdvdG8gb3V0OwogCiAJLyogWmVybyBzb3VyY2UgYWRkcmVzc2VzIGFyZSBub3QgYWxsb3dlZCAqLwpAQCAtMTQ5NiwxMyArMTUxNywxMyBAQAogCVJUQV9QVVQoc2tiLCBSVEFfUFJFRlNSQywgMiwgJnJ0LT5ydF9sb2NhbF9zcmMpOwogCWlmIChydC0+cnRfZGFkZHIgIT0gcnQtPnJ0X2dhdGV3YXkpCiAJCVJUQV9QVVQoc2tiLCBSVEFfR0FURVdBWSwgMiwgJnJ0LT5ydF9nYXRld2F5KTsKLQlpZiAocnRuZXRsaW5rX3B1dF9tZXRyaWNzKHNrYiwgcnQtPmRzdC5tZXRyaWNzKSA8IDApCisJaWYgKHJ0bmV0bGlua19wdXRfbWV0cmljcyhza2IsIGRzdF9tZXRyaWNzX3B0cigmcnQtPmRzdCkpIDwgMCkKIAkJZ290byBydGF0dHJfZmFpbHVyZTsKIAlleHBpcmVzID0gcnQtPmRzdC5leHBpcmVzID8gcnQtPmRzdC5leHBpcmVzIC0gamlmZmllcyA6IDA7CiAJaWYgKHJ0bmxfcHV0X2NhY2hlaW5mbyhza2IsICZydC0+ZHN0LCAwLCAwLCAwLCBleHBpcmVzLAogCQkJICAgICAgIHJ0LT5kc3QuZXJyb3IpIDwgMCkKIAkJZ290byBydGF0dHJfZmFpbHVyZTsKLQlpZiAocnQtPmZsLmlpZikKKwlpZiAoZG5faXNfaW5wdXRfcm91dGUocnQpKQogCQlSVEFfUFVUKHNrYiwgUlRBX0lJRiwgc2l6ZW9mKGludCksICZydC0+ZmwuaWlmKTsKIAogCW5saC0+bmxtc2dfbGVuID0gc2tiX3RhaWxfcG9pbnRlcihza2IpIC0gYjsKQEAgLTE2NzcsMTUgKzE2OTgsMTUgQEAKIHsKIAlzdHJ1Y3QgZG5fcnRfY2FjaGVfaXRlcl9zdGF0ZSAqcyA9IHNlcS0+cHJpdmF0ZTsKIAotCXJ0ID0gcnQtPmRzdC5kbl9uZXh0OwotCXdoaWxlKCFydCkgeworCXJ0ID0gcmN1X2RlcmVmZXJlbmNlX2JoKHJ0LT5kc3QuZG5fbmV4dCk7CisJd2hpbGUgKCFydCkgewogCQlyY3VfcmVhZF91bmxvY2tfYmgoKTsKIAkJaWYgKC0tcy0+YnVja2V0IDwgMCkKIAkJCWJyZWFrOwogCQlyY3VfcmVhZF9sb2NrX2JoKCk7Ci0JCXJ0ID0gZG5fcnRfaGFzaF90YWJsZVtzLT5idWNrZXRdLmNoYWluOworCQlydCA9IHJjdV9kZXJlZmVyZW5jZV9iaChkbl9ydF9oYXNoX3RhYmxlW3MtPmJ1Y2tldF0uY2hhaW4pOwogCX0KLQlyZXR1cm4gcmN1X2RlcmVmZXJlbmNlX2JoKHJ0KTsKKwlyZXR1cm4gcnQ7CiB9CiAKIHN0YXRpYyB2b2lkICpkbl9ydF9jYWNoZV9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQpkaWZmIC0tZ2l0IGEvbmV0L2RlY25ldC9kbl9ydWxlcy5jIGIvbmV0L2RlY25ldC9kbl9ydWxlcy5jCmluZGV4IDQ4ZmRmMTAuLjZlYjkxZGYgMTAwNjQ0Ci0tLSBhL25ldC9kZWNuZXQvZG5fcnVsZXMuYworKysgYi9uZXQvZGVjbmV0L2RuX3J1bGVzLmMKQEAgLTE3NSw3ICsxNzUsNyBAQAogCiB1bnNpZ25lZCBkbmV0X2FkZHJfdHlwZShfX2xlMTYgYWRkcikKIHsKLQlzdHJ1Y3QgZmxvd2kgZmwgPSB7IC5ubF91ID0geyAuZG5fdSA9IHsgLmRhZGRyID0gYWRkciB9IH0gfTsKKwlzdHJ1Y3QgZmxvd2kgZmwgPSB7IC5mbGRfZHN0ID0gYWRkciB9OwogCXN0cnVjdCBkbl9maWJfcmVzIHJlczsKIAl1bnNpZ25lZCByZXQgPSBSVE5fVU5JQ0FTVDsKIAlzdHJ1Y3QgZG5fZmliX3RhYmxlICp0YiA9IGRuX2ZpYl9nZXRfdGFibGUoUlRfVEFCTEVfTE9DQUwsIDApOwpkaWZmIC0tZ2l0IGEvbmV0L2Ruc19yZXNvbHZlci9NYWtlZmlsZSBiL25ldC9kbnNfcmVzb2x2ZXIvTWFrZWZpbGUKaW5kZXggYzBlZjRlNy4uZDVjMTNjMmViIDEwMDY0NAotLS0gYS9uZXQvZG5zX3Jlc29sdmVyL01ha2VmaWxlCisrKyBiL25ldC9kbnNfcmVzb2x2ZXIvTWFrZWZpbGUKQEAgLTQsNCArNCw0IEBACiAKIG9iai0kKENPTkZJR19ETlNfUkVTT0xWRVIpICs9IGRuc19yZXNvbHZlci5vCiAKLWRuc19yZXNvbHZlci1vYmpzIDo9ICBkbnNfa2V5Lm8gZG5zX3F1ZXJ5Lm8KK2Ruc19yZXNvbHZlci15IDo9ICBkbnNfa2V5Lm8gZG5zX3F1ZXJ5Lm8KZGlmZiAtLWdpdCBhL25ldC9kc2EvZHNhLmMgYi9uZXQvZHNhL2RzYS5jCmluZGV4IDYxMTJhMTIuLjBjODc3YTcgMTAwNjQ0Ci0tLSBhL25ldC9kc2EvZHNhLmMKKysrIGIvbmV0L2RzYS9kc2EuYwpAQCAtMzkwLDcgKzM5MCw3IEBACiAJaWYgKGRzdC0+bGlua19wb2xsX25lZWRlZCkKIAkJZGVsX3RpbWVyX3N5bmMoJmRzdC0+bGlua19wb2xsX3RpbWVyKTsKIAotCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisJZmx1c2hfd29ya19zeW5jKCZkc3QtPmxpbmtfcG9sbF93b3JrKTsKIAogCWZvciAoaSA9IDA7IGkgPCBkc3QtPnBkLT5ucl9jaGlwczsgaSsrKSB7CiAJCXN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRzdC0+ZHNbaV07CmRpZmYgLS1naXQgYS9uZXQvZWNvbmV0L01ha2VmaWxlIGIvbmV0L2Vjb25ldC9NYWtlZmlsZQppbmRleCAzOWYwYTc3Li4wNWZhZThiIDEwMDY0NAotLS0gYS9uZXQvZWNvbmV0L01ha2VmaWxlCisrKyBiL25ldC9lY29uZXQvTWFrZWZpbGUKQEAgLTQsNCArNCw0IEBACiAKIG9iai0kKENPTkZJR19FQ09ORVQpICs9IGVjb25ldC5vCiAKLWVjb25ldC1vYmpzIDo9IGFmX2Vjb25ldC5vCitlY29uZXQteSA6PSBhZl9lY29uZXQubwpkaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxNTQvYWZfaWVlZTgwMjE1NC5jIGIvbmV0L2llZWU4MDIxNTQvYWZfaWVlZTgwMjE1NC5jCmluZGV4IDkzYzkxYjYuLjZkZjZlY2YgMTAwNjQ0Ci0tLSBhL25ldC9pZWVlODAyMTU0L2FmX2llZWU4MDIxNTQuYworKysgYi9uZXQvaWVlZTgwMjE1NC9hZl9pZWVlODAyMTU0LmMKQEAgLTUyLDExICs1MiwxMSBAQAogCiAJc3dpdGNoIChhZGRyLT5hZGRyX3R5cGUpIHsKIAljYXNlIElFRUU4MDIxNTRfQUREUl9MT05HOgotCQlydG5sX2xvY2soKTsKLQkJZGV2ID0gZGV2X2dldGJ5aHdhZGRyKG5ldCwgQVJQSFJEX0lFRUU4MDIxNTQsIGFkZHItPmh3YWRkcik7CisJCXJjdV9yZWFkX2xvY2soKTsKKwkJZGV2ID0gZGV2X2dldGJ5aHdhZGRyX3JjdShuZXQsIEFSUEhSRF9JRUVFODAyMTU0LCBhZGRyLT5od2FkZHIpOwogCQlpZiAoZGV2KQogCQkJZGV2X2hvbGQoZGV2KTsKLQkJcnRubF91bmxvY2soKTsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCWJyZWFrOwogCWNhc2UgSUVFRTgwMjE1NF9BRERSX1NIT1JUOgogCQlpZiAoYWRkci0+cGFuX2lkID09IDB4ZmZmZiB8fApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvYWZfaW5ldC5jIGIvbmV0L2lwdjQvYWZfaW5ldC5jCmluZGV4IGY1ODFmNzcuLmYyYjYxMTAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2FmX2luZXQuYworKysgYi9uZXQvaXB2NC9hZl9pbmV0LmMKQEAgLTExNDgsMjEgKzExNDgsMTMgQEAKIAlzdHJ1Y3QgZmxvd2kgZmwgPSB7CiAJCS5vaWYgPSBzay0+c2tfYm91bmRfZGV2X2lmLAogCQkubWFyayA9IHNrLT5za19tYXJrLAotCQkubmxfdSA9IHsKLQkJCS5pcDRfdSA9IHsKLQkJCQkuZGFkZHIJPSBkYWRkciwKLQkJCQkuc2FkZHIJPSBpbmV0LT5pbmV0X3NhZGRyLAotCQkJCS50b3MJPSBSVF9DT05OX0ZMQUdTKHNrKSwKLQkJCX0sCi0JCX0sCisJCS5mbDRfZHN0ID0gZGFkZHIsCisJCS5mbDRfc3JjID0gaW5ldC0+aW5ldF9zYWRkciwKKwkJLmZsNF90b3MgPSBSVF9DT05OX0ZMQUdTKHNrKSwKIAkJLnByb3RvID0gc2stPnNrX3Byb3RvY29sLAogCQkuZmxhZ3MgPSBpbmV0X3NrX2Zsb3dpX2ZsYWdzKHNrKSwKLQkJLnVsaV91ID0gewotCQkJLnBvcnRzID0gewotCQkJCS5zcG9ydCA9IGluZXQtPmluZXRfc3BvcnQsCi0JCQkJLmRwb3J0ID0gaW5ldC0+aW5ldF9kcG9ydCwKLQkJCX0sCi0JCX0sCisJCS5mbF9pcF9zcG9ydCA9IGluZXQtPmluZXRfc3BvcnQsCisJCS5mbF9pcF9kcG9ydCA9IGluZXQtPmluZXRfZHBvcnQsCiAJfTsKIAogCXNlY3VyaXR5X3NrX2NsYXNzaWZ5X2Zsb3coc2ssICZmbCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9hcnAuYyBiL25ldC9pcHY0L2FycC5jCmluZGV4IGQ4ZTU0MGMuLmEyZmM3YjkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2FycC5jCisrKyBiL25ldC9pcHY0L2FycC5jCkBAIC00MzMsOCArNDMzLDggQEAKIAogc3RhdGljIGludCBhcnBfZmlsdGVyKF9fYmUzMiBzaXAsIF9fYmUzMiB0aXAsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGZsb3dpIGZsID0geyAubmxfdSA9IHsgLmlwNF91ID0geyAuZGFkZHIgPSBzaXAsCi0JCQkJCQkgLnNhZGRyID0gdGlwIH0gfSB9OworCXN0cnVjdCBmbG93aSBmbCA9IHsgLmZsNF9kc3QgPSBzaXAsCisJCQkgICAgLmZsNF9zcmMgPSB0aXAgfTsKIAlzdHJ1Y3QgcnRhYmxlICpydDsKIAlpbnQgZmxhZyA9IDA7CiAJLyp1bnNpZ25lZCBsb25nIG5vdzsgKi8KQEAgLTg4Myw3ICs4ODMsNyBAQAogCiAJCQlkb250X3NlbmQgPSBhcnBfaWdub3JlKGluX2Rldiwgc2lwLCB0aXApOwogCQkJaWYgKCFkb250X3NlbmQgJiYgSU5fREVWX0FSUEZJTFRFUihpbl9kZXYpKQotCQkJCWRvbnRfc2VuZCB8PSBhcnBfZmlsdGVyKHNpcCwgdGlwLCBkZXYpOworCQkJCWRvbnRfc2VuZCA9IGFycF9maWx0ZXIoc2lwLCB0aXAsIGRldik7CiAJCQlpZiAoIWRvbnRfc2VuZCkgewogCQkJCW4gPSBuZWlnaF9ldmVudF9ucygmYXJwX3RibCwgc2hhLCAmc2lwLCBkZXYpOwogCQkJCWlmIChuKSB7CkBAIC0xMDE3LDEzICsxMDE3LDE0IEBACiAJCUlQVjRfREVWQ09ORl9BTEwobmV0LCBQUk9YWV9BUlApID0gb247CiAJCXJldHVybiAwOwogCX0KLQlpZiAoX19pbl9kZXZfZ2V0X3J0bmwoZGV2KSkgewotCQlJTl9ERVZfQ09ORl9TRVQoX19pbl9kZXZfZ2V0X3J0bmwoZGV2KSwgUFJPWFlfQVJQLCBvbik7CisJaWYgKF9faW5fZGV2X2dldF9yY3UoZGV2KSkgeworCQlJTl9ERVZfQ09ORl9TRVQoX19pbl9kZXZfZ2V0X3JjdShkZXYpLCBQUk9YWV9BUlAsIG9uKTsKIAkJcmV0dXJuIDA7CiAJfQogCXJldHVybiAtRU5YSU87CiB9CiAKKy8qIG11c3QgYmUgY2FsbGVkIHdpdGggcmN1X3JlYWRfbG9jaygpICovCiBzdGF0aWMgaW50IGFycF9yZXFfc2V0X3B1YmxpYyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBhcnByZXEgKnIsCiAJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CkBAIC0xMDMzLDcgKzEwMzQsNyBAQAogCWlmIChtYXNrICYmIG1hc2sgIT0gaHRvbmwoMHhGRkZGRkZGRikpCiAJCXJldHVybiAtRUlOVkFMOwogCWlmICghZGV2ICYmIChyLT5hcnBfZmxhZ3MgJiBBVEZfQ09NKSkgewotCQlkZXYgPSBkZXZfZ2V0Ynlod2FkZHIobmV0LCByLT5hcnBfaGEuc2FfZmFtaWx5LAorCQlkZXYgPSBkZXZfZ2V0Ynlod2FkZHJfcmN1KG5ldCwgci0+YXJwX2hhLnNhX2ZhbWlseSwKIAkJCQkgICAgICByLT5hcnBfaGEuc2FfZGF0YSk7CiAJCWlmICghZGV2KQogCQkJcmV0dXJuIC1FTk9ERVY7CkBAIC0xMDYxLDggKzEwNjIsOCBAQAogCWlmIChyLT5hcnBfZmxhZ3MgJiBBVEZfUEVSTSkKIAkJci0+YXJwX2ZsYWdzIHw9IEFURl9DT007CiAJaWYgKGRldiA9PSBOVUxMKSB7Ci0JCXN0cnVjdCBmbG93aSBmbCA9IHsgLm5sX3UuaXA0X3UgPSB7IC5kYWRkciA9IGlwLAotCQkJCQkJICAgIC50b3MgPSBSVE9fT05MSU5LIH0gfTsKKwkJc3RydWN0IGZsb3dpIGZsID0geyAuZmw0X2RzdCA9IGlwLAorCQkJCSAgICAuZmw0X3RvcyA9IFJUT19PTkxJTksgfTsKIAkJc3RydWN0IHJ0YWJsZSAqcnQ7CiAJCWVyciA9IGlwX3JvdXRlX291dHB1dF9rZXkobmV0LCAmcnQsICZmbCk7CiAJCWlmIChlcnIgIT0gMCkKQEAgLTExNjksOCArMTE3MCw4IEBACiAKIAlpcCA9ICgoc3RydWN0IHNvY2thZGRyX2luICopJnItPmFycF9wYSktPnNpbl9hZGRyLnNfYWRkcjsKIAlpZiAoZGV2ID09IE5VTEwpIHsKLQkJc3RydWN0IGZsb3dpIGZsID0geyAubmxfdS5pcDRfdSA9IHsgLmRhZGRyID0gaXAsCi0JCQkJCQkgICAgLnRvcyA9IFJUT19PTkxJTksgfSB9OworCQlzdHJ1Y3QgZmxvd2kgZmwgPSB7IC5mbDRfZHN0ID0gaXAsCisJCQkJICAgIC5mbDRfdG9zID0gUlRPX09OTElOSyB9OwogCQlzdHJ1Y3QgcnRhYmxlICpydDsKIAkJZXJyID0gaXBfcm91dGVfb3V0cHV0X2tleShuZXQsICZydCwgJmZsKTsKIAkJaWYgKGVyciAhPSAwKQpAQCAtMTIyNSwxMCArMTIyNiwxMCBAQAogCWlmICghKHIuYXJwX2ZsYWdzICYgQVRGX05FVE1BU0spKQogCQkoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZyLmFycF9uZXRtYXNrKS0+c2luX2FkZHIuc19hZGRyID0KIAkJCQkJCQkgICBodG9ubCgweEZGRkZGRkZGVUwpOwotCXJ0bmxfbG9jaygpOworCXJjdV9yZWFkX2xvY2soKTsKIAlpZiAoci5hcnBfZGV2WzBdKSB7CiAJCWVyciA9IC1FTk9ERVY7Ci0JCWRldiA9IF9fZGV2X2dldF9ieV9uYW1lKG5ldCwgci5hcnBfZGV2KTsKKwkJZGV2ID0gZGV2X2dldF9ieV9uYW1lX3JjdShuZXQsIHIuYXJwX2Rldik7CiAJCWlmIChkZXYgPT0gTlVMTCkKIAkJCWdvdG8gb3V0OwogCkBAIC0xMjUyLDEyICsxMjUzLDEyIEBACiAJCWJyZWFrOwogCWNhc2UgU0lPQ0dBUlA6CiAJCWVyciA9IGFycF9yZXFfZ2V0KCZyLCBkZXYpOwotCQlpZiAoIWVyciAmJiBjb3B5X3RvX3VzZXIoYXJnLCAmciwgc2l6ZW9mKHIpKSkKLQkJCWVyciA9IC1FRkFVTFQ7CiAJCWJyZWFrOwogCX0KIG91dDoKLQlydG5sX3VubG9jaygpOworCXJjdV9yZWFkX3VubG9jaygpOworCWlmIChjbWQgPT0gU0lPQ0dBUlAgJiYgIWVyciAmJiBjb3B5X3RvX3VzZXIoYXJnLCAmciwgc2l6ZW9mKHIpKSkKKwkJZXJyID0gLUVGQVVMVDsKIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9kZXZpbmV0LmMgYi9uZXQvaXB2NC9kZXZpbmV0LmMKaW5kZXggZGM5NGIwMy4uNzQ4Y2I1YiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZGV2aW5ldC5jCisrKyBiL25ldC9pcHY0L2RldmluZXQuYwpAQCAtMTI1Niw2ICsxMjU2LDg3IEBACiAJCXJ0bmxfc2V0X3NrX2VycihuZXQsIFJUTkxHUlBfSVBWNF9JRkFERFIsIGVycik7CiB9CiAKK3N0YXRpYyBzaXplX3QgaW5ldF9nZXRfbGlua19hZl9zaXplKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGluX2RldmljZSAqaW5fZGV2ID0gX19pbl9kZXZfZ2V0X3J0bmwoZGV2KTsKKworCWlmICghaW5fZGV2KQorCQlyZXR1cm4gMDsKKworCXJldHVybiBubGFfdG90YWxfc2l6ZShJUFY0X0RFVkNPTkZfTUFYICogNCk7IC8qIElGTEFfSU5FVF9DT05GICovCit9CisKK3N0YXRpYyBpbnQgaW5ldF9maWxsX2xpbmtfYWYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYgPSBfX2luX2Rldl9nZXRfcnRubChkZXYpOworCXN0cnVjdCBubGF0dHIgKm5sYTsKKwlpbnQgaTsKKworCWlmICghaW5fZGV2KQorCQlyZXR1cm4gLUVOT0RBVEE7CisKKwlubGEgPSBubGFfcmVzZXJ2ZShza2IsIElGTEFfSU5FVF9DT05GLCBJUFY0X0RFVkNPTkZfTUFYICogNCk7CisJaWYgKG5sYSA9PSBOVUxMKQorCQlyZXR1cm4gLUVNU0dTSVpFOworCisJZm9yIChpID0gMDsgaSA8IElQVjRfREVWQ09ORl9NQVg7IGkrKykKKwkJKCh1MzIgKikgbmxhX2RhdGEobmxhKSlbaV0gPSBpbl9kZXYtPmNuZi5kYXRhW2ldOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBpbmV0X2FmX3BvbGljeVtJRkxBX0lORVRfTUFYKzFdID0geworCVtJRkxBX0lORVRfQ09ORl0JPSB7IC50eXBlID0gTkxBX05FU1RFRCB9LAorfTsKKworc3RhdGljIGludCBpbmV0X3ZhbGlkYXRlX2xpbmtfYWYoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgY29uc3Qgc3RydWN0IG5sYXR0ciAqbmxhKQoreworCXN0cnVjdCBubGF0dHIgKmEsICp0YltJRkxBX0lORVRfTUFYKzFdOworCWludCBlcnIsIHJlbTsKKworCWlmIChkZXYgJiYgIV9faW5fZGV2X2dldF9ydG5sKGRldikpCisJCXJldHVybiAtRUFGTk9TVVBQT1JUOworCisJZXJyID0gbmxhX3BhcnNlX25lc3RlZCh0YiwgSUZMQV9JTkVUX01BWCwgbmxhLCBpbmV0X2FmX3BvbGljeSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlpZiAodGJbSUZMQV9JTkVUX0NPTkZdKSB7CisJCW5sYV9mb3JfZWFjaF9uZXN0ZWQoYSwgdGJbSUZMQV9JTkVUX0NPTkZdLCByZW0pIHsKKwkJCWludCBjZmdpZCA9IG5sYV90eXBlKGEpOworCisJCQlpZiAobmxhX2xlbihhKSA8IDQpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJCWlmIChjZmdpZCA8PSAwIHx8IGNmZ2lkID4gSVBWNF9ERVZDT05GX01BWCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGluZXRfc2V0X2xpbmtfYWYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IG5sYXR0ciAqbmxhKQoreworCXN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiA9IF9faW5fZGV2X2dldF9ydG5sKGRldik7CisJc3RydWN0IG5sYXR0ciAqYSwgKnRiW0lGTEFfSU5FVF9NQVgrMV07CisJaW50IHJlbTsKKworCWlmICghaW5fZGV2KQorCQlyZXR1cm4gLUVBRk5PU1VQUE9SVDsKKworCWlmIChubGFfcGFyc2VfbmVzdGVkKHRiLCBJRkxBX0lORVRfTUFYLCBubGEsIE5VTEwpIDwgMCkKKwkJQlVHKCk7CisKKwlpZiAodGJbSUZMQV9JTkVUX0NPTkZdKSB7CisJCW5sYV9mb3JfZWFjaF9uZXN0ZWQoYSwgdGJbSUZMQV9JTkVUX0NPTkZdLCByZW0pCisJCQlpcHY0X2RldmNvbmZfc2V0KGluX2RldiwgbmxhX3R5cGUoYSksIG5sYV9nZXRfdTMyKGEpKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwogI2lmZGVmIENPTkZJR19TWVNDVEwKIAogc3RhdGljIHZvaWQgZGV2aW5ldF9jb3B5X2RmbHRfY29uZihzdHJ1Y3QgbmV0ICpuZXQsIGludCBpKQpAQCAtMTM0OSw5ICsxNDMwLDkgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgaXB2NF9kb2ludF9hbmRfZmx1c2goY3RsX3RhYmxlICpjdGwsIGludCB3cml0ZSwKLQkJCSB2b2lkIF9fdXNlciAqYnVmZmVyLAotCQkJIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKQorc3RhdGljIGludCBpcHY0X2RvaW50X2FuZF9mbHVzaChjdGxfdGFibGUgKmN0bCwgaW50IHdyaXRlLAorCQkJCXZvaWQgX191c2VyICpidWZmZXIsCisJCQkJc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpCiB7CiAJaW50ICp2YWxwID0gY3RsLT5kYXRhOwogCWludCB2YWwgPSAqdmFscDsKQEAgLTE2MTksNiArMTcwMCwxNCBAQAogCS5leGl0ID0gZGV2aW5ldF9leGl0X25ldCwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgcnRubF9hZl9vcHMgaW5ldF9hZl9vcHMgPSB7CisJLmZhbWlseQkJICA9IEFGX0lORVQsCisJLmZpbGxfbGlua19hZgkgID0gaW5ldF9maWxsX2xpbmtfYWYsCisJLmdldF9saW5rX2FmX3NpemUgPSBpbmV0X2dldF9saW5rX2FmX3NpemUsCisJLnZhbGlkYXRlX2xpbmtfYWYgPSBpbmV0X3ZhbGlkYXRlX2xpbmtfYWYsCisJLnNldF9saW5rX2FmCSAgPSBpbmV0X3NldF9saW5rX2FmLAorfTsKKwogdm9pZCBfX2luaXQgZGV2aW5ldF9pbml0KHZvaWQpCiB7CiAJcmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmZGV2aW5ldF9vcHMpOwpAQCAtMTYyNiw2ICsxNzE1LDggQEAKIAlyZWdpc3Rlcl9naWZjb25mKFBGX0lORVQsIGluZXRfZ2lmY29uZik7CiAJcmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZpcF9uZXRkZXZfbm90aWZpZXIpOwogCisJcnRubF9hZl9yZWdpc3RlcigmaW5ldF9hZl9vcHMpOworCiAJcnRubF9yZWdpc3RlcihQRl9JTkVULCBSVE1fTkVXQUREUiwgaW5ldF9ydG1fbmV3YWRkciwgTlVMTCk7CiAJcnRubF9yZWdpc3RlcihQRl9JTkVULCBSVE1fREVMQUREUiwgaW5ldF9ydG1fZGVsYWRkciwgTlVMTCk7CiAJcnRubF9yZWdpc3RlcihQRl9JTkVULCBSVE1fR0VUQUREUiwgTlVMTCwgaW5ldF9kdW1wX2lmYWRkcik7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9lc3A0LmMgYi9uZXQvaXB2NC9lc3A0LmMKaW5kZXggMTRjYTFmMS4uZTQyYTkwNSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZXNwNC5jCisrKyBiL25ldC9pcHY0L2VzcDQuYwpAQCAtMjMsNiArMjMsOCBAQAogCiAjZGVmaW5lIEVTUF9TS0JfQ0IoX19za2IpICgoc3RydWN0IGVzcF9za2JfY2IgKikmKChfX3NrYiktPmNiWzBdKSkKIAorc3RhdGljIHUzMiBlc3A0X2dldF9tdHUoc3RydWN0IHhmcm1fc3RhdGUgKngsIGludCBtdHUpOworCiAvKgogICogQWxsb2NhdGUgYW4gQUVBRCByZXF1ZXN0IHN0cnVjdHVyZSB3aXRoIGV4dHJhIHNwYWNlIGZvciBTRyBhbmQgSVYuCiAgKgpAQCAtMTE3LDI1ICsxMTksMzUgQEAKIAlpbnQgYmxrc2l6ZTsKIAlpbnQgY2xlbjsKIAlpbnQgYWxlbjsKKwlpbnQgcGxlbjsKKwlpbnQgdGZjbGVuOwogCWludCBuZnJhZ3M7CiAKIAkvKiBza2IgaXMgcHVyZSBwYXlsb2FkIHRvIGVuY3J5cHQgKi8KIAogCWVyciA9IC1FTk9NRU07CiAKLQkvKiBSb3VuZCB0byBibG9jayBzaXplICovCi0JY2xlbiA9IHNrYi0+bGVuOwotCiAJZXNwID0geC0+ZGF0YTsKIAlhZWFkID0gZXNwLT5hZWFkOwogCWFsZW4gPSBjcnlwdG9fYWVhZF9hdXRoc2l6ZShhZWFkKTsKIAorCXRmY2xlbiA9IDA7CisJaWYgKHgtPnRmY3BhZCkgeworCQlzdHJ1Y3QgeGZybV9kc3QgKmRzdCA9IChzdHJ1Y3QgeGZybV9kc3QgKilza2JfZHN0KHNrYik7CisJCXUzMiBwYWR0bzsKKworCQlwYWR0byA9IG1pbih4LT50ZmNwYWQsIGVzcDRfZ2V0X210dSh4LCBkc3QtPmNoaWxkX210dV9jYWNoZWQpKTsKKwkJaWYgKHNrYi0+bGVuIDwgcGFkdG8pCisJCQl0ZmNsZW4gPSBwYWR0byAtIHNrYi0+bGVuOworCX0KIAlibGtzaXplID0gQUxJR04oY3J5cHRvX2FlYWRfYmxvY2tzaXplKGFlYWQpLCA0KTsKLQljbGVuID0gQUxJR04oY2xlbiArIDIsIGJsa3NpemUpOworCWNsZW4gPSBBTElHTihza2ItPmxlbiArIDIgKyB0ZmNsZW4sIGJsa3NpemUpOwogCWlmIChlc3AtPnBhZGxlbikKIAkJY2xlbiA9IEFMSUdOKGNsZW4sIGVzcC0+cGFkbGVuKTsKKwlwbGVuID0gY2xlbiAtIHNrYi0+bGVuIC0gdGZjbGVuOwogCi0JaWYgKChlcnIgPSBza2JfY293X2RhdGEoc2tiLCBjbGVuIC0gc2tiLT5sZW4gKyBhbGVuLCAmdHJhaWxlcikpIDwgMCkKKwllcnIgPSBza2JfY293X2RhdGEoc2tiLCB0ZmNsZW4gKyBwbGVuICsgYWxlbiwgJnRyYWlsZXIpOworCWlmIChlcnIgPCAwKQogCQlnb3RvIGVycm9yOwogCW5mcmFncyA9IGVycjsKIApAQCAtMTUwLDEzICsxNjIsMTcgQEAKIAogCS8qIEZpbGwgcGFkZGluZy4uLiAqLwogCXRhaWwgPSBza2JfdGFpbF9wb2ludGVyKHRyYWlsZXIpOworCWlmICh0ZmNsZW4pIHsKKwkJbWVtc2V0KHRhaWwsIDAsIHRmY2xlbik7CisJCXRhaWwgKz0gdGZjbGVuOworCX0KIAlkbyB7CiAJCWludCBpOwotCQlmb3IgKGk9MDsgaTxjbGVuLXNrYi0+bGVuIC0gMjsgaSsrKQorCQlmb3IgKGkgPSAwOyBpIDwgcGxlbiAtIDI7IGkrKykKIAkJCXRhaWxbaV0gPSBpICsgMTsKIAl9IHdoaWxlICgwKTsKLQl0YWlsW2NsZW4gLSBza2ItPmxlbiAtIDJdID0gKGNsZW4gLSBza2ItPmxlbikgLSAyOwotCXRhaWxbY2xlbiAtIHNrYi0+bGVuIC0gMV0gPSAqc2tiX21hY19oZWFkZXIoc2tiKTsKKwl0YWlsW3BsZW4gLSAyXSA9IHBsZW4gLSAyOworCXRhaWxbcGxlbiAtIDFdID0gKnNrYl9tYWNfaGVhZGVyKHNrYik7CiAJcHNrYl9wdXQoc2tiLCB0cmFpbGVyLCBjbGVuIC0gc2tiLT5sZW4gKyBhbGVuKTsKIAogCXNrYl9wdXNoKHNrYiwgLXNrYl9uZXR3b3JrX29mZnNldChza2IpKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2ZpYl9mcm9udGVuZC5jIGIvbmV0L2lwdjQvZmliX2Zyb250ZW5kLmMKaW5kZXggYzE5YzFmNy4uMWQyY2RkNCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZmliX2Zyb250ZW5kLmMKKysrIGIvbmV0L2lwdjQvZmliX2Zyb250ZW5kLmMKQEAgLTE1OCwxMSArMTU4LDcgQEAKIHN0cnVjdCBuZXRfZGV2aWNlICpfX2lwX2Rldl9maW5kKHN0cnVjdCBuZXQgKm5ldCwgX19iZTMyIGFkZHIsIGJvb2wgZGV2cmVmKQogewogCXN0cnVjdCBmbG93aSBmbCA9IHsKLQkJLm5sX3UgPSB7Ci0JCQkuaXA0X3UgPSB7Ci0JCQkJLmRhZGRyID0gYWRkcgotCQkJfQotCQl9LAorCQkuZmw0X2RzdCA9IGFkZHIsCiAJfTsKIAlzdHJ1Y3QgZmliX3Jlc3VsdCByZXMgPSB7IDAgfTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gTlVMTDsKQEAgLTE5OSw3ICsxOTUsNyBAQAogCQkJCQkgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkJICAgIF9fYmUzMiBhZGRyKQogewotCXN0cnVjdCBmbG93aQkJZmwgPSB7IC5ubF91ID0geyAuaXA0X3UgPSB7IC5kYWRkciA9IGFkZHIgfSB9IH07CisJc3RydWN0IGZsb3dpCQlmbCA9IHsgLmZsNF9kc3QgPSBhZGRyIH07CiAJc3RydWN0IGZpYl9yZXN1bHQJcmVzOwogCXVuc2lnbmVkIHJldCA9IFJUTl9CUk9BRENBU1Q7CiAJc3RydWN0IGZpYl90YWJsZSAqbG9jYWxfdGFibGU7CkBAIC0yNTMsMTMgKzI0OSw5IEBACiB7CiAJc3RydWN0IGluX2RldmljZSAqaW5fZGV2OwogCXN0cnVjdCBmbG93aSBmbCA9IHsKLQkJLm5sX3UgPSB7Ci0JCQkuaXA0X3UgPSB7Ci0JCQkJLmRhZGRyID0gc3JjLAotCQkJCS5zYWRkciA9IGRzdCwKLQkJCQkudG9zID0gdG9zCi0JCQl9Ci0JCX0sCisJCS5mbDRfZHN0ID0gc3JjLAorCQkuZmw0X3NyYyA9IGRzdCwKKwkJLmZsNF90b3MgPSB0b3MsCiAJCS5tYXJrID0gbWFyaywKIAkJLmlpZiA9IG9pZgogCX07CkBAIC04NTksMTMgKzg1MSw5IEBACiAJc3RydWN0IGZpYl9yZXN1bHQgICAgICAgcmVzOwogCXN0cnVjdCBmbG93aSAgICAgICAgICAgIGZsID0gewogCQkubWFyayA9IGZybi0+ZmxfbWFyaywKLQkJLm5sX3UgPSB7Ci0JCQkuaXA0X3UgPSB7Ci0JCQkJLmRhZGRyID0gZnJuLT5mbF9hZGRyLAotCQkJCS50b3MgPSBmcm4tPmZsX3RvcywKLQkJCQkuc2NvcGUgPSBmcm4tPmZsX3Njb3BlCi0JCQl9Ci0JCX0KKwkJLmZsNF9kc3QgPSBmcm4tPmZsX2FkZHIsCisJCS5mbDRfdG9zID0gZnJuLT5mbF90b3MsCisJCS5mbDRfc2NvcGUgPSBmcm4tPmZsX3Njb3BlLAogCX07CiAKICNpZmRlZiBDT05GSUdfSVBfTVVMVElQTEVfVEFCTEVTCkBAIC0xMDA1LDcgKzk5MywxMSBAQAogCQlydF9jYWNoZV9mbHVzaChkZXZfbmV0KGRldiksIDApOwogCQlicmVhazsKIAljYXNlIE5FVERFVl9VTlJFR0lTVEVSX0JBVENIOgotCQlydF9jYWNoZV9mbHVzaF9iYXRjaCgpOworCQkvKiBUaGUgYmF0Y2ggdW5yZWdpc3RlciBpcyBvbmx5IGNhbGxlZCBvbiB0aGUgZmlyc3QKKwkJICogZGV2aWNlIGluIHRoZSBsaXN0IG9mIGRldmljZXMgYmVpbmcgdW5yZWdpc3RlcmVkLgorCQkgKiBUaGVyZWZvcmUgd2Ugc2hvdWxkIG5vdCBwYXNzIGRldl9uZXQoZGV2KSBpbiBoZXJlLgorCQkgKi8KKwkJcnRfY2FjaGVfZmx1c2hfYmF0Y2goTlVMTCk7CiAJCWJyZWFrOwogCX0KIAlyZXR1cm4gTk9USUZZX0RPTkU7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMgYi9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMKaW5kZXggM2UwZGEzZS4uMTJkM2RjMyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jCisrKyBiL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYwpAQCAtNTYzLDEyICs1NjMsOCBAQAogCQlyY3VfcmVhZF9sb2NrKCk7CiAJCXsKIAkJCXN0cnVjdCBmbG93aSBmbCA9IHsKLQkJCQkubmxfdSA9IHsKLQkJCQkJLmlwNF91ID0gewotCQkJCQkJLmRhZGRyID0gbmgtPm5oX2d3LAotCQkJCQkJLnNjb3BlID0gY2ZnLT5mY19zY29wZSArIDEsCi0JCQkJCX0sCi0JCQkJfSwKKwkJCQkuZmw0X2RzdCA9IG5oLT5uaF9ndywKKwkJCQkuZmw0X3Njb3BlID0gY2ZnLT5mY19zY29wZSArIDEsCiAJCQkJLm9pZiA9IG5oLT5uaF9vaWYsCiAJCQl9OwogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pY21wLmMgYi9uZXQvaXB2NC9pY21wLmMKaW5kZXggZTVkMWE0NC4uNGFhMWI3ZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaWNtcC5jCisrKyBiL25ldC9pcHY0L2ljbXAuYwpAQCAtMzg2LDEwICszODYsOSBAQAogCQkJZGFkZHIgPSBpY21wX3BhcmFtLT5yZXBseW9wdHMuZmFkZHI7CiAJfQogCXsKLQkJc3RydWN0IGZsb3dpIGZsID0geyAubmxfdSA9IHsgLmlwNF91ID0KLQkJCQkJICAgICAgeyAuZGFkZHIgPSBkYWRkciwKLQkJCQkJCS5zYWRkciA9IHJ0LT5ydF9zcGVjX2RzdCwKLQkJCQkJCS50b3MgPSBSVF9UT1MoaXBfaGRyKHNrYiktPnRvcykgfSB9LAorCQlzdHJ1Y3QgZmxvd2kgZmwgPSB7IC5mbDRfZHN0PSBkYWRkciwKKwkJCQkgICAgLmZsNF9zcmMgPSBydC0+cnRfc3BlY19kc3QsCisJCQkJICAgIC5mbDRfdG9zID0gUlRfVE9TKGlwX2hkcihza2IpLT50b3MpLAogCQkJCSAgICAucHJvdG8gPSBJUFBST1RPX0lDTVAgfTsKIAkJc2VjdXJpdHlfc2tiX2NsYXNzaWZ5X2Zsb3coc2tiLCAmZmwpOwogCQlpZiAoaXBfcm91dGVfb3V0cHV0X2tleShuZXQsICZydCwgJmZsKSkKQEAgLTUwNiw4ICs1MDUsOCBAQAogCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gTlVMTDsKIAogCQlyY3VfcmVhZF9sb2NrKCk7Ci0JCWlmIChydC0+ZmwuaWlmICYmCi0JCQluZXQtPmlwdjQuc3lzY3RsX2ljbXBfZXJyb3JzX3VzZV9pbmJvdW5kX2lmYWRkcikKKwkJaWYgKHJ0X2lzX2lucHV0X3JvdXRlKHJ0KSAmJgorCQkgICAgbmV0LT5pcHY0LnN5c2N0bF9pY21wX2Vycm9yc191c2VfaW5ib3VuZF9pZmFkZHIpCiAJCQlkZXYgPSBkZXZfZ2V0X2J5X2luZGV4X3JjdShuZXQsIHJ0LT5mbC5paWYpOwogCiAJCWlmIChkZXYpCkBAIC01NDIsMjIgKzU0MSwxMyBAQAogCiAJewogCQlzdHJ1Y3QgZmxvd2kgZmwgPSB7Ci0JCQkubmxfdSA9IHsKLQkJCQkuaXA0X3UgPSB7Ci0JCQkJCS5kYWRkciA9IGljbXBfcGFyYW0ucmVwbHlvcHRzLnNyciA/Ci0JCQkJCQlpY21wX3BhcmFtLnJlcGx5b3B0cy5mYWRkciA6Ci0JCQkJCQlpcGgtPnNhZGRyLAotCQkJCQkuc2FkZHIgPSBzYWRkciwKLQkJCQkJLnRvcyA9IFJUX1RPUyh0b3MpCi0JCQkJfQotCQkJfSwKKwkJCS5mbDRfZHN0ID0gaWNtcF9wYXJhbS5yZXBseW9wdHMuc3JyID8KKwkJCQkgICBpY21wX3BhcmFtLnJlcGx5b3B0cy5mYWRkciA6IGlwaC0+c2FkZHIsCisJCQkuZmw0X3NyYyA9IHNhZGRyLAorCQkJLmZsNF90b3MgPSBSVF9UT1ModG9zKSwKIAkJCS5wcm90byA9IElQUFJPVE9fSUNNUCwKLQkJCS51bGlfdSA9IHsKLQkJCQkuaWNtcHQgPSB7Ci0JCQkJCS50eXBlID0gdHlwZSwKLQkJCQkJLmNvZGUgPSBjb2RlCi0JCQkJfQotCQkJfQorCQkJLmZsX2ljbXBfdHlwZSA9IHR5cGUsCisJCQkuZmxfaWNtcF9jb2RlID0gY29kZSwKIAkJfTsKIAkJaW50IGVycjsKIAkJc3RydWN0IHJ0YWJsZSAqcnQyOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaWdtcC5jIGIvbmV0L2lwdjQvaWdtcC5jCmluZGV4IDNjNTNjMmQuLmUwZTc3ZTIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lnbXAuYworKysgYi9uZXQvaXB2NC9pZ21wLmMKQEAgLTE0OSwyMSArMTQ5LDM3IEBACiBzdGF0aWMgaW50IGlwX21jX2FkZF9zcmMoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LCBfX2JlMzIgKnBtY2EsIGludCBzZm1vZGUsCiAJCQkgaW50IHNmY291bnQsIF9fYmUzMiAqcHNmc3JjLCBpbnQgZGVsdGEpOwogCisKK3N0YXRpYyB2b2lkIGlwX21jX2xpc3RfcmVjbGFpbShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCit7CisJa2ZyZWUoY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBpcF9tY19saXN0LCByY3UpKTsKK30KKwogc3RhdGljIHZvaWQgaXBfbWFfcHV0KHN0cnVjdCBpcF9tY19saXN0ICppbSkKIHsKIAlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmaW0tPnJlZmNudCkpIHsKIAkJaW5fZGV2X3B1dChpbS0+aW50ZXJmYWNlKTsKLQkJa2ZyZWUoaW0pOworCQljYWxsX3JjdSgmaW0tPnJjdSwgaXBfbWNfbGlzdF9yZWNsYWltKTsKIAl9CiB9CiAKKyNkZWZpbmUgZm9yX2VhY2hfcG1jX3JjdShpbl9kZXYsIHBtYykJCQkJXAorCWZvciAocG1jID0gcmN1X2RlcmVmZXJlbmNlKGluX2Rldi0+bWNfbGlzdCk7CQlcCisJICAgICBwbWMgIT0gTlVMTDsJCQkJCVwKKwkgICAgIHBtYyA9IHJjdV9kZXJlZmVyZW5jZShwbWMtPm5leHRfcmN1KSkKKworI2RlZmluZSBmb3JfZWFjaF9wbWNfcnRubChpbl9kZXYsIHBtYykJCQkJXAorCWZvciAocG1jID0gcnRubF9kZXJlZmVyZW5jZShpbl9kZXYtPm1jX2xpc3QpOwkJXAorCSAgICAgcG1jICE9IE5VTEw7CQkJCQlcCisJICAgICBwbWMgPSBydG5sX2RlcmVmZXJlbmNlKHBtYy0+bmV4dF9yY3UpKQorCiAjaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVAogCiAvKgogICoJVGltZXIgbWFuYWdlbWVudAogICovCiAKLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgaWdtcF9zdG9wX3RpbWVyKHN0cnVjdCBpcF9tY19saXN0ICppbSkKK3N0YXRpYyB2b2lkIGlnbXBfc3RvcF90aW1lcihzdHJ1Y3QgaXBfbWNfbGlzdCAqaW0pCiB7CiAJc3Bpbl9sb2NrX2JoKCZpbS0+bG9jayk7CiAJaWYgKGRlbF90aW1lcigmaW0tPnRpbWVyKSkKQEAgLTI4NCw2ICszMDAsOCBAQAogCXJldHVybiBzY291bnQ7CiB9CiAKKyNkZWZpbmUgaWdtcF9za2Jfc2l6ZShza2IpICgqKHVuc2lnbmVkIGludCAqKSgoc2tiKS0+Y2IpKQorCiBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmlnbXB2M19uZXdwYWNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBzaXplKQogewogCXN0cnVjdCBza19idWZmICpza2I7CkBAIC0yOTIsMTQgKzMxMCwyMCBAQAogCXN0cnVjdCBpZ21wdjNfcmVwb3J0ICpwaWc7CiAJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChkZXYpOwogCi0Jc2tiID0gYWxsb2Nfc2tiKHNpemUgKyBMTF9BTExPQ0FURURfU1BBQ0UoZGV2KSwgR0ZQX0FUT01JQyk7Ci0JaWYgKHNrYiA9PSBOVUxMKQotCQlyZXR1cm4gTlVMTDsKKwl3aGlsZSAoMSkgeworCQlza2IgPSBhbGxvY19za2Ioc2l6ZSArIExMX0FMTE9DQVRFRF9TUEFDRShkZXYpLAorCQkJCUdGUF9BVE9NSUMgfCBfX0dGUF9OT1dBUk4pOworCQlpZiAoc2tiKQorCQkJYnJlYWs7CisJCXNpemUgPj49IDE7CisJCWlmIChzaXplIDwgMjU2KQorCQkJcmV0dXJuIE5VTEw7CisJfQorCWlnbXBfc2tiX3NpemUoc2tiKSA9IHNpemU7CiAKIAl7CiAJCXN0cnVjdCBmbG93aSBmbCA9IHsgLm9pZiA9IGRldi0+aWZpbmRleCwKLQkJCQkgICAgLm5sX3UgPSB7IC5pcDRfdSA9IHsKLQkJCQkgICAgLmRhZGRyID0gSUdNUFYzX0FMTF9NQ1IgfSB9LAorCQkJCSAgICAuZmw0X2RzdCA9IElHTVBWM19BTExfTUNSLAogCQkJCSAgICAucHJvdG8gPSBJUFBST1RPX0lHTVAgfTsKIAkJaWYgKGlwX3JvdXRlX291dHB1dF9rZXkobmV0LCAmcnQsICZmbCkpIHsKIAkJCWtmcmVlX3NrYihza2IpOwpAQCAtMzg0LDcgKzQwOCw3IEBACiAJcmV0dXJuIHNrYjsKIH0KIAotI2RlZmluZSBBVkFJTEFCTEUoc2tiKSAoKHNrYikgPyAoKHNrYiktPmRldiA/IChza2IpLT5kZXYtPm10dSAtIChza2IpLT5sZW4gOiBcCisjZGVmaW5lIEFWQUlMQUJMRShza2IpICgoc2tiKSA/ICgoc2tiKS0+ZGV2ID8gaWdtcF9za2Jfc2l6ZShza2IpIC0gKHNrYiktPmxlbiA6IFwKIAlza2JfdGFpbHJvb20oc2tiKSkgOiAwKQogCiBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmFkZF9ncmVjKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF9tY19saXN0ICpwbWMsCkBAIC01MDIsOCArNTI2LDggQEAKIAlpbnQgdHlwZTsKIAogCWlmICghcG1jKSB7Ci0JCXJlYWRfbG9jaygmaW5fZGV2LT5tY19saXN0X2xvY2spOwotCQlmb3IgKHBtYz1pbl9kZXYtPm1jX2xpc3Q7IHBtYzsgcG1jPXBtYy0+bmV4dCkgeworCQlyY3VfcmVhZF9sb2NrKCk7CisJCWZvcl9lYWNoX3BtY19yY3UoaW5fZGV2LCBwbWMpIHsKIAkJCWlmIChwbWMtPm11bHRpYWRkciA9PSBJR01QX0FMTF9IT1NUUykKIAkJCQljb250aW51ZTsKIAkJCXNwaW5fbG9ja19iaCgmcG1jLT5sb2NrKTsKQEAgLTUxNCw3ICs1MzgsNyBAQAogCQkJc2tiID0gYWRkX2dyZWMoc2tiLCBwbWMsIHR5cGUsIDAsIDApOwogCQkJc3Bpbl91bmxvY2tfYmgoJnBtYy0+bG9jayk7CiAJCX0KLQkJcmVhZF91bmxvY2soJmluX2Rldi0+bWNfbGlzdF9sb2NrKTsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJfSBlbHNlIHsKIAkJc3Bpbl9sb2NrX2JoKCZwbWMtPmxvY2spOwogCQlpZiAocG1jLT5zZmNvdW50W01DQVNUX0VYQ0xVREVdKQpAQCAtNTU2LDcgKzU4MCw3IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7CiAJaW50IHR5cGUsIGR0eXBlOwogCi0JcmVhZF9sb2NrKCZpbl9kZXYtPm1jX2xpc3RfbG9jayk7CisJcmN1X3JlYWRfbG9jaygpOwogCXNwaW5fbG9ja19iaCgmaW5fZGV2LT5tY190b21iX2xvY2spOwogCiAJLyogZGVsZXRlZCBNQ0EncyAqLwpAQCAtNTkzLDcgKzYxNyw3IEBACiAJc3Bpbl91bmxvY2tfYmgoJmluX2Rldi0+bWNfdG9tYl9sb2NrKTsKIAogCS8qIGNoYW5nZSByZWNzICovCi0JZm9yIChwbWM9aW5fZGV2LT5tY19saXN0OyBwbWM7IHBtYz1wbWMtPm5leHQpIHsKKwlmb3JfZWFjaF9wbWNfcmN1KGluX2RldiwgcG1jKSB7CiAJCXNwaW5fbG9ja19iaCgmcG1jLT5sb2NrKTsKIAkJaWYgKHBtYy0+c2Zjb3VudFtNQ0FTVF9FWENMVURFXSkgewogCQkJdHlwZSA9IElHTVBWM19CTE9DS19PTERfU09VUkNFUzsKQEAgLTYxNiw3ICs2NDAsNyBAQAogCQl9CiAJCXNwaW5fdW5sb2NrX2JoKCZwbWMtPmxvY2spOwogCX0KLQlyZWFkX3VubG9jaygmaW5fZGV2LT5tY19saXN0X2xvY2spOworCXJjdV9yZWFkX3VubG9jaygpOwogCiAJaWYgKCFza2IpCiAJCXJldHVybjsKQEAgLTY0NCw3ICs2NjgsNyBAQAogCiAJewogCQlzdHJ1Y3QgZmxvd2kgZmwgPSB7IC5vaWYgPSBkZXYtPmlmaW5kZXgsCi0JCQkJICAgIC5ubF91ID0geyAuaXA0X3UgPSB7IC5kYWRkciA9IGRzdCB9IH0sCisJCQkJICAgIC5mbDRfZHN0ID0gZHN0LAogCQkJCSAgICAucHJvdG8gPSBJUFBST1RPX0lHTVAgfTsKIAkJaWYgKGlwX3JvdXRlX291dHB1dF9rZXkobmV0LCAmcnQsICZmbCkpCiAJCQlyZXR1cm4gLTE7CkBAIC04MTMsMTQgKzgzNywxNCBAQAogCWlmIChncm91cCA9PSBJR01QX0FMTF9IT1NUUykKIAkJcmV0dXJuOwogCi0JcmVhZF9sb2NrKCZpbl9kZXYtPm1jX2xpc3RfbG9jayk7Ci0JZm9yIChpbT1pbl9kZXYtPm1jX2xpc3Q7IGltIT1OVUxMOyBpbT1pbS0+bmV4dCkgeworCXJjdV9yZWFkX2xvY2soKTsKKwlmb3JfZWFjaF9wbWNfcmN1KGluX2RldiwgaW0pIHsKIAkJaWYgKGltLT5tdWx0aWFkZHIgPT0gZ3JvdXApIHsKIAkJCWlnbXBfc3RvcF90aW1lcihpbSk7CiAJCQlicmVhazsKIAkJfQogCX0KLQlyZWFkX3VubG9jaygmaW5fZGV2LT5tY19saXN0X2xvY2spOworCXJjdV9yZWFkX3VubG9jaygpOwogfQogCiBzdGF0aWMgdm9pZCBpZ21wX2hlYXJkX3F1ZXJ5KHN0cnVjdCBpbl9kZXZpY2UgKmluX2Rldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKQEAgLTkwNiw4ICs5MzAsOCBAQAogCSAqIC0gVXNlIHRoZSBpZ21wLT5pZ21wX2NvZGUgZmllbGQgYXMgdGhlIG1heGltdW0KIAkgKiAgIGRlbGF5IHBvc3NpYmxlCiAJICovCi0JcmVhZF9sb2NrKCZpbl9kZXYtPm1jX2xpc3RfbG9jayk7Ci0JZm9yIChpbT1pbl9kZXYtPm1jX2xpc3Q7IGltIT1OVUxMOyBpbT1pbS0+bmV4dCkgeworCXJjdV9yZWFkX2xvY2soKTsKKwlmb3JfZWFjaF9wbWNfcmN1KGluX2RldiwgaW0pIHsKIAkJaW50IGNoYW5nZWQ7CiAKIAkJaWYgKGdyb3VwICYmIGdyb3VwICE9IGltLT5tdWx0aWFkZHIpCkBAIC05MjUsNyArOTQ5LDcgQEAKIAkJaWYgKGNoYW5nZWQpCiAJCQlpZ21wX21vZF90aW1lcihpbSwgbWF4X2RlbGF5KTsKIAl9Ci0JcmVhZF91bmxvY2soJmluX2Rldi0+bWNfbGlzdF9sb2NrKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIH0KIAogLyogY2FsbGVkIGluIHJjdV9yZWFkX2xvY2soKSBzZWN0aW9uICovCkBAIC05NjEsNyArOTg1LDcgQEAKIAljYXNlIElHTVBfSE9TVF9NRU1CRVJTSElQX1JFUE9SVDoKIAljYXNlIElHTVBWMl9IT1NUX01FTUJFUlNISVBfUkVQT1JUOgogCQkvKiBJcyBpdCBvdXIgcmVwb3J0IGxvb3BlZCBiYWNrPyAqLwotCQlpZiAoc2tiX3J0YWJsZShza2IpLT5mbC5paWYgPT0gMCkKKwkJaWYgKHJ0X2lzX291dHB1dF9yb3V0ZShza2JfcnRhYmxlKHNrYikpKQogCQkJYnJlYWs7CiAJCS8qIGRvbid0IHJlbHkgb24gTUMgcm91dGVyIGhlYXJpbmcgdW5pY2FzdCByZXBvcnRzICovCiAJCWlmIChza2ItPnBrdF90eXBlID09IFBBQ0tFVF9NVUxUSUNBU1QgfHwKQEAgLTExMTAsOCArMTEzNCw4IEBACiAJCWtmcmVlKHBtYyk7CiAJfQogCS8qIGNsZWFyIGRlYWQgc291cmNlcywgdG9vICovCi0JcmVhZF9sb2NrKCZpbl9kZXYtPm1jX2xpc3RfbG9jayk7Ci0JZm9yIChwbWM9aW5fZGV2LT5tY19saXN0OyBwbWM7IHBtYz1wbWMtPm5leHQpIHsKKwlyY3VfcmVhZF9sb2NrKCk7CisJZm9yX2VhY2hfcG1jX3JjdShpbl9kZXYsIHBtYykgewogCQlzdHJ1Y3QgaXBfc2ZfbGlzdCAqcHNmLCAqcHNmX25leHQ7CiAKIAkJc3Bpbl9sb2NrX2JoKCZwbWMtPmxvY2spOwpAQCAtMTEyMyw3ICsxMTQ3LDcgQEAKIAkJCWtmcmVlKHBzZik7CiAJCX0KIAl9Ci0JcmVhZF91bmxvY2soJmluX2Rldi0+bWNfbGlzdF9sb2NrKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIH0KICNlbmRpZgogCkBAIC0xMjA5LDcgKzEyMzMsNyBAQAogCiAJQVNTRVJUX1JUTkwoKTsKIAotCWZvciAoaW09aW5fZGV2LT5tY19saXN0OyBpbTsgaW09aW0tPm5leHQpIHsKKwlmb3JfZWFjaF9wbWNfcnRubChpbl9kZXYsIGltKSB7CiAJCWlmIChpbS0+bXVsdGlhZGRyID09IGFkZHIpIHsKIAkJCWltLT51c2VycysrOwogCQkJaXBfbWNfYWRkX3NyYyhpbl9kZXYsICZhZGRyLCBNQ0FTVF9FWENMVURFLCAwLCBOVUxMLCAwKTsKQEAgLTEyMTcsNyArMTI0MSw3IEBACiAJCX0KIAl9CiAKLQlpbSA9IGttYWxsb2Moc2l6ZW9mKCppbSksIEdGUF9LRVJORUwpOworCWltID0ga3phbGxvYyhzaXplb2YoKmltKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFpbSkKIAkJZ290byBvdXQ7CiAKQEAgLTEyMjcsMjYgKzEyNTEsMTggQEAKIAlpbS0+bXVsdGlhZGRyID0gYWRkcjsKIAkvKiBpbml0aWFsIG1vZGUgaXMgKEVYLCBlbXB0eSkgKi8KIAlpbS0+c2Ztb2RlID0gTUNBU1RfRVhDTFVERTsKLQlpbS0+c2Zjb3VudFtNQ0FTVF9JTkNMVURFXSA9IDA7CiAJaW0tPnNmY291bnRbTUNBU1RfRVhDTFVERV0gPSAxOwotCWltLT5zb3VyY2VzID0gTlVMTDsKLQlpbS0+dG9tYiA9IE5VTEw7Ci0JaW0tPmNyY291bnQgPSAwOwogCWF0b21pY19zZXQoJmltLT5yZWZjbnQsIDEpOwogCXNwaW5fbG9ja19pbml0KCZpbS0+bG9jayk7CiAjaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVAotCWltLT50bV9ydW5uaW5nID0gMDsKIAlzZXR1cF90aW1lcigmaW0tPnRpbWVyLCAmaWdtcF90aW1lcl9leHBpcmUsICh1bnNpZ25lZCBsb25nKWltKTsKIAlpbS0+dW5zb2xpY2l0X2NvdW50ID0gSUdNUF9VbnNvbGljaXRlZF9SZXBvcnRfQ291bnQ7Ci0JaW0tPnJlcG9ydGVyID0gMDsKLQlpbS0+Z3NxdWVyeSA9IDA7CiAjZW5kaWYKLQlpbS0+bG9hZGVkID0gMDsKLQl3cml0ZV9sb2NrX2JoKCZpbl9kZXYtPm1jX2xpc3RfbG9jayk7Ci0JaW0tPm5leHQgPSBpbl9kZXYtPm1jX2xpc3Q7Ci0JaW5fZGV2LT5tY19saXN0ID0gaW07CisKKwlpbS0+bmV4dF9yY3UgPSBpbl9kZXYtPm1jX2xpc3Q7CiAJaW5fZGV2LT5tY19jb3VudCsrOwotCXdyaXRlX3VubG9ja19iaCgmaW5fZGV2LT5tY19saXN0X2xvY2spOworCXJjdV9hc3NpZ25fcG9pbnRlcihpbl9kZXYtPm1jX2xpc3QsIGltKTsKKwogI2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1QKIAlpZ21wdjNfZGVsX2RlbHJlYyhpbl9kZXYsIGltLT5tdWx0aWFkZHIpOwogI2VuZGlmCkBAIC0xMjYwLDI2ICsxMjc2LDMyIEBACiAKIC8qCiAgKglSZXNlbmQgSUdNUCBKT0lOIHJlcG9ydDsgdXNlZCBmb3IgYm9uZGluZy4KKyAqCUNhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2soKQogICovCi12b2lkIGlwX21jX3Jlam9pbl9ncm91cChzdHJ1Y3QgaXBfbWNfbGlzdCAqaW0pCit2b2lkIGlwX21jX3Jlam9pbl9ncm91cHMoc3RydWN0IGluX2RldmljZSAqaW5fZGV2KQogewogI2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1QKLQlzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYgPSBpbS0+aW50ZXJmYWNlOworCXN0cnVjdCBpcF9tY19saXN0ICppbTsKKwlpbnQgdHlwZTsKIAotCWlmIChpbS0+bXVsdGlhZGRyID09IElHTVBfQUxMX0hPU1RTKQotCQlyZXR1cm47CisJZm9yX2VhY2hfcG1jX3JjdShpbl9kZXYsIGltKSB7CisJCWlmIChpbS0+bXVsdGlhZGRyID09IElHTVBfQUxMX0hPU1RTKQorCQkJY29udGludWU7CiAKLQkvKiBhIGZhaWxvdmVyIGlzIGhhcHBlbmluZyBhbmQgc3dpdGNoZXMKLQkgKiBtdXN0IGJlIG5vdGlmaWVkIGltbWVkaWF0ZWx5ICovCi0JaWYgKElHTVBfVjFfU0VFTihpbl9kZXYpKQotCQlpZ21wX3NlbmRfcmVwb3J0KGluX2RldiwgaW0sIElHTVBfSE9TVF9NRU1CRVJTSElQX1JFUE9SVCk7Ci0JZWxzZSBpZiAoSUdNUF9WMl9TRUVOKGluX2RldikpCi0JCWlnbXBfc2VuZF9yZXBvcnQoaW5fZGV2LCBpbSwgSUdNUFYyX0hPU1RfTUVNQkVSU0hJUF9SRVBPUlQpOwotCWVsc2UKLQkJaWdtcF9zZW5kX3JlcG9ydChpbl9kZXYsIGltLCBJR01QVjNfSE9TVF9NRU1CRVJTSElQX1JFUE9SVCk7CisJCS8qIGEgZmFpbG92ZXIgaXMgaGFwcGVuaW5nIGFuZCBzd2l0Y2hlcworCQkgKiBtdXN0IGJlIG5vdGlmaWVkIGltbWVkaWF0ZWx5CisJCSAqLworCQlpZiAoSUdNUF9WMV9TRUVOKGluX2RldikpCisJCQl0eXBlID0gSUdNUF9IT1NUX01FTUJFUlNISVBfUkVQT1JUOworCQllbHNlIGlmIChJR01QX1YyX1NFRU4oaW5fZGV2KSkKKwkJCXR5cGUgPSBJR01QVjJfSE9TVF9NRU1CRVJTSElQX1JFUE9SVDsKKwkJZWxzZQorCQkJdHlwZSA9IElHTVBWM19IT1NUX01FTUJFUlNISVBfUkVQT1JUOworCQlpZ21wX3NlbmRfcmVwb3J0KGluX2RldiwgaW0sIHR5cGUpOworCX0KICNlbmRpZgogfQotRVhQT1JUX1NZTUJPTChpcF9tY19yZWpvaW5fZ3JvdXApOworRVhQT1JUX1NZTUJPTChpcF9tY19yZWpvaW5fZ3JvdXBzKTsKIAogLyoKICAqCUEgc29ja2V0IGhhcyBsZWZ0IGEgbXVsdGljYXN0IGdyb3VwIG9uIGRldmljZSBkZXYKQEAgLTEyODcsMTcgKzEzMDksMTggQEAKIAogdm9pZCBpcF9tY19kZWNfZ3JvdXAoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LCBfX2JlMzIgYWRkcikKIHsKLQlzdHJ1Y3QgaXBfbWNfbGlzdCAqaSwgKippcDsKKwlzdHJ1Y3QgaXBfbWNfbGlzdCAqaTsKKwlzdHJ1Y3QgaXBfbWNfbGlzdCBfX3JjdSAqKmlwOwogCiAJQVNTRVJUX1JUTkwoKTsKIAotCWZvciAoaXA9JmluX2Rldi0+bWNfbGlzdDsgKGk9KmlwKSE9TlVMTDsgaXA9JmktPm5leHQpIHsKKwlmb3IgKGlwID0gJmluX2Rldi0+bWNfbGlzdDsKKwkgICAgIChpID0gcnRubF9kZXJlZmVyZW5jZSgqaXApKSAhPSBOVUxMOworCSAgICAgaXAgPSAmaS0+bmV4dF9yY3UpIHsKIAkJaWYgKGktPm11bHRpYWRkciA9PSBhZGRyKSB7CiAJCQlpZiAoLS1pLT51c2VycyA9PSAwKSB7Ci0JCQkJd3JpdGVfbG9ja19iaCgmaW5fZGV2LT5tY19saXN0X2xvY2spOwotCQkJCSppcCA9IGktPm5leHQ7CisJCQkJKmlwID0gaS0+bmV4dF9yY3U7CiAJCQkJaW5fZGV2LT5tY19jb3VudC0tOwotCQkJCXdyaXRlX3VubG9ja19iaCgmaW5fZGV2LT5tY19saXN0X2xvY2spOwogCQkJCWlnbXBfZ3JvdXBfZHJvcHBlZChpKTsKIAogCQkJCWlmICghaW5fZGV2LT5kZWFkKQpAQCAtMTMxNiwzNCArMTMzOSwzNCBAQAogCiB2b2lkIGlwX21jX3VubWFwKHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldikKIHsKLQlzdHJ1Y3QgaXBfbWNfbGlzdCAqaTsKKwlzdHJ1Y3QgaXBfbWNfbGlzdCAqcG1jOwogCiAJQVNTRVJUX1JUTkwoKTsKIAotCWZvciAoaSA9IGluX2Rldi0+bWNfbGlzdDsgaTsgaSA9IGktPm5leHQpCi0JCWlnbXBfZ3JvdXBfZHJvcHBlZChpKTsKKwlmb3JfZWFjaF9wbWNfcnRubChpbl9kZXYsIHBtYykKKwkJaWdtcF9ncm91cF9kcm9wcGVkKHBtYyk7CiB9CiAKIHZvaWQgaXBfbWNfcmVtYXAoc3RydWN0IGluX2RldmljZSAqaW5fZGV2KQogewotCXN0cnVjdCBpcF9tY19saXN0ICppOworCXN0cnVjdCBpcF9tY19saXN0ICpwbWM7CiAKIAlBU1NFUlRfUlROTCgpOwogCi0JZm9yIChpID0gaW5fZGV2LT5tY19saXN0OyBpOyBpID0gaS0+bmV4dCkKLQkJaWdtcF9ncm91cF9hZGRlZChpKTsKKwlmb3JfZWFjaF9wbWNfcnRubChpbl9kZXYsIHBtYykKKwkJaWdtcF9ncm91cF9hZGRlZChwbWMpOwogfQogCiAvKiBEZXZpY2UgZ29pbmcgZG93biAqLwogCiB2b2lkIGlwX21jX2Rvd24oc3RydWN0IGluX2RldmljZSAqaW5fZGV2KQogewotCXN0cnVjdCBpcF9tY19saXN0ICppOworCXN0cnVjdCBpcF9tY19saXN0ICpwbWM7CiAKIAlBU1NFUlRfUlROTCgpOwogCi0JZm9yIChpPWluX2Rldi0+bWNfbGlzdDsgaTsgaT1pLT5uZXh0KQotCQlpZ21wX2dyb3VwX2Ryb3BwZWQoaSk7CisJZm9yX2VhY2hfcG1jX3J0bmwoaW5fZGV2LCBwbWMpCisJCWlnbXBfZ3JvdXBfZHJvcHBlZChwbWMpOwogCiAjaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVAogCWluX2Rldi0+bXJfaWZjX2NvdW50ID0gMDsKQEAgLTEzNzQsNyArMTM5Nyw2IEBACiAJaW5fZGV2LT5tcl9xcnYgPSBJR01QX1Vuc29saWNpdGVkX1JlcG9ydF9Db3VudDsKICNlbmRpZgogCi0Jcndsb2NrX2luaXQoJmluX2Rldi0+bWNfbGlzdF9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmaW5fZGV2LT5tY190b21iX2xvY2spOwogfQogCkBAIC0xMzgyLDE0ICsxNDA0LDE0IEBACiAKIHZvaWQgaXBfbWNfdXAoc3RydWN0IGluX2RldmljZSAqaW5fZGV2KQogewotCXN0cnVjdCBpcF9tY19saXN0ICppOworCXN0cnVjdCBpcF9tY19saXN0ICpwbWM7CiAKIAlBU1NFUlRfUlROTCgpOwogCiAJaXBfbWNfaW5jX2dyb3VwKGluX2RldiwgSUdNUF9BTExfSE9TVFMpOwogCi0JZm9yIChpPWluX2Rldi0+bWNfbGlzdDsgaTsgaT1pLT5uZXh0KQotCQlpZ21wX2dyb3VwX2FkZGVkKGkpOworCWZvcl9lYWNoX3BtY19ydG5sKGluX2RldiwgcG1jKQorCQlpZ21wX2dyb3VwX2FkZGVkKHBtYyk7CiB9CiAKIC8qCkBAIC0xNDA1LDI0ICsxNDI3LDE5IEBACiAJLyogRGVhY3RpdmF0ZSB0aW1lcnMgKi8KIAlpcF9tY19kb3duKGluX2Rldik7CiAKLQl3cml0ZV9sb2NrX2JoKCZpbl9kZXYtPm1jX2xpc3RfbG9jayk7Ci0Jd2hpbGUgKChpID0gaW5fZGV2LT5tY19saXN0KSAhPSBOVUxMKSB7Ci0JCWluX2Rldi0+bWNfbGlzdCA9IGktPm5leHQ7CisJd2hpbGUgKChpID0gcnRubF9kZXJlZmVyZW5jZShpbl9kZXYtPm1jX2xpc3QpKSAhPSBOVUxMKSB7CisJCWluX2Rldi0+bWNfbGlzdCA9IGktPm5leHRfcmN1OwogCQlpbl9kZXYtPm1jX2NvdW50LS07Ci0JCXdyaXRlX3VubG9ja19iaCgmaW5fZGV2LT5tY19saXN0X2xvY2spOworCiAJCWlnbXBfZ3JvdXBfZHJvcHBlZChpKTsKIAkJaXBfbWFfcHV0KGkpOwotCi0JCXdyaXRlX2xvY2tfYmgoJmluX2Rldi0+bWNfbGlzdF9sb2NrKTsKIAl9Ci0Jd3JpdGVfdW5sb2NrX2JoKCZpbl9kZXYtPm1jX2xpc3RfbG9jayk7CiB9CiAKIC8qIFJUTkwgaXMgbG9ja2VkICovCiBzdGF0aWMgc3RydWN0IGluX2RldmljZSAqaXBfbWNfZmluZF9kZXYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXBfbXJlcW4gKmltcikKIHsKLQlzdHJ1Y3QgZmxvd2kgZmwgPSB7IC5ubF91ID0geyAuaXA0X3UgPQotCQkJCSAgICAgIHsgLmRhZGRyID0gaW1yLT5pbXJfbXVsdGlhZGRyLnNfYWRkciB9IH0gfTsKKwlzdHJ1Y3QgZmxvd2kgZmwgPSB7IC5mbDRfZHN0ID0gaW1yLT5pbXJfbXVsdGlhZGRyLnNfYWRkciB9OwogCXN0cnVjdCBydGFibGUgKnJ0OwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBOVUxMOwogCXN0cnVjdCBpbl9kZXZpY2UgKmlkZXYgPSBOVUxMOwpAQCAtMTUxMywxOCArMTUzMCwxOCBAQAogCiAJaWYgKCFpbl9kZXYpCiAJCXJldHVybiAtRU5PREVWOwotCXJlYWRfbG9jaygmaW5fZGV2LT5tY19saXN0X2xvY2spOwotCWZvciAocG1jPWluX2Rldi0+bWNfbGlzdDsgcG1jOyBwbWM9cG1jLT5uZXh0KSB7CisJcmN1X3JlYWRfbG9jaygpOworCWZvcl9lYWNoX3BtY19yY3UoaW5fZGV2LCBwbWMpIHsKIAkJaWYgKCpwbWNhID09IHBtYy0+bXVsdGlhZGRyKQogCQkJYnJlYWs7CiAJfQogCWlmICghcG1jKSB7CiAJCS8qIE1DQSBub3QgZm91bmQ/PyBidWcgKi8KLQkJcmVhZF91bmxvY2soJmluX2Rldi0+bWNfbGlzdF9sb2NrKTsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCXJldHVybiAtRVNSQ0g7CiAJfQogCXNwaW5fbG9ja19iaCgmcG1jLT5sb2NrKTsKLQlyZWFkX3VubG9jaygmaW5fZGV2LT5tY19saXN0X2xvY2spOworCXJjdV9yZWFkX3VubG9jaygpOwogI2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1QKIAlzZl9tYXJrc3RhdGUocG1jKTsKICNlbmRpZgpAQCAtMTY4NSwxOCArMTcwMiwxOCBAQAogCiAJaWYgKCFpbl9kZXYpCiAJCXJldHVybiAtRU5PREVWOwotCXJlYWRfbG9jaygmaW5fZGV2LT5tY19saXN0X2xvY2spOwotCWZvciAocG1jPWluX2Rldi0+bWNfbGlzdDsgcG1jOyBwbWM9cG1jLT5uZXh0KSB7CisJcmN1X3JlYWRfbG9jaygpOworCWZvcl9lYWNoX3BtY19yY3UoaW5fZGV2LCBwbWMpIHsKIAkJaWYgKCpwbWNhID09IHBtYy0+bXVsdGlhZGRyKQogCQkJYnJlYWs7CiAJfQogCWlmICghcG1jKSB7CiAJCS8qIE1DQSBub3QgZm91bmQ/PyBidWcgKi8KLQkJcmVhZF91bmxvY2soJmluX2Rldi0+bWNfbGlzdF9sb2NrKTsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCXJldHVybiAtRVNSQ0g7CiAJfQogCXNwaW5fbG9ja19iaCgmcG1jLT5sb2NrKTsKLQlyZWFkX3VubG9jaygmaW5fZGV2LT5tY19saXN0X2xvY2spOworCXJjdV9yZWFkX3VubG9jaygpOwogCiAjaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVAogCXNmX21hcmtzdGF0ZShwbWMpOwpAQCAtMTc5Myw3ICsxODEwLDcgQEAKIAogCWVyciA9IC1FQUREUklOVVNFOwogCWlmaW5kZXggPSBpbXItPmltcl9pZmluZGV4OwotCWZvciAoaSA9IGluZXQtPm1jX2xpc3Q7IGk7IGkgPSBpLT5uZXh0KSB7CisJZm9yX2VhY2hfcG1jX3J0bmwoaW5ldCwgaSkgewogCQlpZiAoaS0+bXVsdGkuaW1yX211bHRpYWRkci5zX2FkZHIgPT0gYWRkciAmJgogCQkgICAgaS0+bXVsdGkuaW1yX2lmaW5kZXggPT0gaWZpbmRleCkKIAkJCWdvdG8gZG9uZTsKQEAgLTE4MDcsNyArMTgyNCw3IEBACiAJCWdvdG8gZG9uZTsKIAogCW1lbWNweSgmaW1sLT5tdWx0aSwgaW1yLCBzaXplb2YoKmltcikpOwotCWltbC0+bmV4dCA9IGluZXQtPm1jX2xpc3Q7CisJaW1sLT5uZXh0X3JjdSA9IGluZXQtPm1jX2xpc3Q7CiAJaW1sLT5zZmxpc3QgPSBOVUxMOwogCWltbC0+c2Ztb2RlID0gTUNBU1RfRVhDTFVERTsKIAlyY3VfYXNzaWduX3BvaW50ZXIoaW5ldC0+bWNfbGlzdCwgaW1sKTsKQEAgLTE4MjEsMTcgKzE4MzgsMTQgQEAKIAogc3RhdGljIHZvaWQgaXBfc2Zfc29ja2xpc3RfcmVjbGFpbShzdHJ1Y3QgcmN1X2hlYWQgKnJwKQogewotCXN0cnVjdCBpcF9zZl9zb2NrbGlzdCAqcHNmOwotCi0JcHNmID0gY29udGFpbmVyX29mKHJwLCBzdHJ1Y3QgaXBfc2Zfc29ja2xpc3QsIHJjdSk7CisJa2ZyZWUoY29udGFpbmVyX29mKHJwLCBzdHJ1Y3QgaXBfc2Zfc29ja2xpc3QsIHJjdSkpOwogCS8qIHNrX29tZW1fYWxsb2Mgc2hvdWxkIGhhdmUgYmVlbiBkZWNyZWFzZWQgYnkgdGhlIGNhbGxlciovCi0Ja2ZyZWUocHNmKTsKIH0KIAogc3RhdGljIGludCBpcF9tY19sZWF2ZV9zcmMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXBfbWNfc29ja2xpc3QgKmltbCwKIAkJCSAgIHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldikKIHsKLQlzdHJ1Y3QgaXBfc2Zfc29ja2xpc3QgKnBzZiA9IGltbC0+c2ZsaXN0OworCXN0cnVjdCBpcF9zZl9zb2NrbGlzdCAqcHNmID0gcnRubF9kZXJlZmVyZW5jZShpbWwtPnNmbGlzdCk7CiAJaW50IGVycjsKIAogCWlmIChwc2YgPT0gTlVMTCkgewpAQCAtMTg1MSwxMSArMTg2NSw4IEBACiAKIHN0YXRpYyB2b2lkIGlwX21jX3NvY2tsaXN0X3JlY2xhaW0oc3RydWN0IHJjdV9oZWFkICpycCkKIHsKLQlzdHJ1Y3QgaXBfbWNfc29ja2xpc3QgKmltbDsKLQotCWltbCA9IGNvbnRhaW5lcl9vZihycCwgc3RydWN0IGlwX21jX3NvY2tsaXN0LCByY3UpOworCWtmcmVlKGNvbnRhaW5lcl9vZihycCwgc3RydWN0IGlwX21jX3NvY2tsaXN0LCByY3UpKTsKIAkvKiBza19vbWVtX2FsbG9jIHNob3VsZCBoYXZlIGJlZW4gZGVjcmVhc2VkIGJ5IHRoZSBjYWxsZXIqLwotCWtmcmVlKGltbCk7CiB9CiAKIApAQCAtMTg2Niw3ICsxODc3LDggQEAKIGludCBpcF9tY19sZWF2ZV9ncm91cChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpcF9tcmVxbiAqaW1yKQogewogCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTsKLQlzdHJ1Y3QgaXBfbWNfc29ja2xpc3QgKmltbCwgKippbWxwOworCXN0cnVjdCBpcF9tY19zb2NrbGlzdCAqaW1sOworCXN0cnVjdCBpcF9tY19zb2NrbGlzdCBfX3JjdSAqKmltbHA7CiAJc3RydWN0IGluX2RldmljZSAqaW5fZGV2OwogCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTsKIAlfX2JlMzIgZ3JvdXAgPSBpbXItPmltcl9tdWx0aWFkZHIuc19hZGRyOwpAQCAtMTg3Niw3ICsxODg4LDkgQEAKIAlydG5sX2xvY2soKTsKIAlpbl9kZXYgPSBpcF9tY19maW5kX2RldihuZXQsIGltcik7CiAJaWZpbmRleCA9IGltci0+aW1yX2lmaW5kZXg7Ci0JZm9yIChpbWxwID0gJmluZXQtPm1jX2xpc3Q7IChpbWwgPSAqaW1scCkgIT0gTlVMTDsgaW1scCA9ICZpbWwtPm5leHQpIHsKKwlmb3IgKGltbHAgPSAmaW5ldC0+bWNfbGlzdDsKKwkgICAgIChpbWwgPSBydG5sX2RlcmVmZXJlbmNlKCppbWxwKSkgIT0gTlVMTDsKKwkgICAgIGltbHAgPSAmaW1sLT5uZXh0X3JjdSkgewogCQlpZiAoaW1sLT5tdWx0aS5pbXJfbXVsdGlhZGRyLnNfYWRkciAhPSBncm91cCkKIAkJCWNvbnRpbnVlOwogCQlpZiAoaWZpbmRleCkgewpAQCAtMTg4OCw3ICsxOTAyLDcgQEAKIAogCQkodm9pZCkgaXBfbWNfbGVhdmVfc3JjKHNrLCBpbWwsIGluX2Rldik7CiAKLQkJcmN1X2Fzc2lnbl9wb2ludGVyKCppbWxwLCBpbWwtPm5leHQpOworCQkqaW1scCA9IGltbC0+bmV4dF9yY3U7CiAKIAkJaWYgKGluX2RldikKIAkJCWlwX21jX2RlY19ncm91cChpbl9kZXYsIGdyb3VwKTsKQEAgLTE5MzQsNyArMTk0OCw3IEBACiAJfQogCWVyciA9IC1FQUREUk5PVEFWQUlMOwogCi0JZm9yIChwbWM9aW5ldC0+bWNfbGlzdDsgcG1jOyBwbWM9cG1jLT5uZXh0KSB7CisJZm9yX2VhY2hfcG1jX3J0bmwoaW5ldCwgcG1jKSB7CiAJCWlmICgocG1jLT5tdWx0aS5pbXJfbXVsdGlhZGRyLnNfYWRkciA9PQogCQkgICAgIGltci5pbXJfbXVsdGlhZGRyLnNfYWRkcikgJiYKIAkJICAgIChwbWMtPm11bHRpLmltcl9pZmluZGV4ID09IGltci5pbXJfaWZpbmRleCkpCkBAIC0xOTU4LDcgKzE5NzIsNyBAQAogCQlwbWMtPnNmbW9kZSA9IG9tb2RlOwogCX0KIAotCXBzbCA9IHBtYy0+c2ZsaXN0OworCXBzbCA9IHJ0bmxfZGVyZWZlcmVuY2UocG1jLT5zZmxpc3QpOwogCWlmICghYWRkKSB7CiAJCWlmICghcHNsKQogCQkJZ290byBkb25lOwkvKiBlcnIgPSAtRUFERFJOT1RBVkFJTCAqLwpAQCAtMjA3Nyw3ICsyMDkxLDcgQEAKIAkJZ290byBkb25lOwogCX0KIAotCWZvciAocG1jPWluZXQtPm1jX2xpc3Q7IHBtYzsgcG1jPXBtYy0+bmV4dCkgeworCWZvcl9lYWNoX3BtY19ydG5sKGluZXQsIHBtYykgewogCQlpZiAocG1jLT5tdWx0aS5pbXJfbXVsdGlhZGRyLnNfYWRkciA9PSBtc2YtPmltc2ZfbXVsdGlhZGRyICYmCiAJCSAgICBwbWMtPm11bHRpLmltcl9pZmluZGV4ID09IGltci5pbXJfaWZpbmRleCkKIAkJCWJyZWFrOwpAQCAtMjEwNyw3ICsyMTIxLDcgQEAKIAkJKHZvaWQpIGlwX21jX2FkZF9zcmMoaW5fZGV2LCAmbXNmLT5pbXNmX211bHRpYWRkciwKIAkJCQkgICAgIG1zZi0+aW1zZl9mbW9kZSwgMCwgTlVMTCwgMCk7CiAJfQotCXBzbCA9IHBtYy0+c2ZsaXN0OworCXBzbCA9IHJ0bmxfZGVyZWZlcmVuY2UocG1jLT5zZmxpc3QpOwogCWlmIChwc2wpIHsKIAkJKHZvaWQpIGlwX21jX2RlbF9zcmMoaW5fZGV2LCAmbXNmLT5pbXNmX211bHRpYWRkciwgcG1jLT5zZm1vZGUsCiAJCQlwc2wtPnNsX2NvdW50LCBwc2wtPnNsX2FkZHIsIDApOwpAQCAtMjE1NSw3ICsyMTY5LDcgQEAKIAl9CiAJZXJyID0gLUVBRERSTk9UQVZBSUw7CiAKLQlmb3IgKHBtYz1pbmV0LT5tY19saXN0OyBwbWM7IHBtYz1wbWMtPm5leHQpIHsKKwlmb3JfZWFjaF9wbWNfcnRubChpbmV0LCBwbWMpIHsKIAkJaWYgKHBtYy0+bXVsdGkuaW1yX211bHRpYWRkci5zX2FkZHIgPT0gbXNmLT5pbXNmX211bHRpYWRkciAmJgogCQkgICAgcG1jLT5tdWx0aS5pbXJfaWZpbmRleCA9PSBpbXIuaW1yX2lmaW5kZXgpCiAJCQlicmVhazsKQEAgLTIxNjMsNyArMjE3Nyw3IEBACiAJaWYgKCFwbWMpCQkvKiBtdXN0IGhhdmUgYSBwcmlvciBqb2luICovCiAJCWdvdG8gZG9uZTsKIAltc2YtPmltc2ZfZm1vZGUgPSBwbWMtPnNmbW9kZTsKLQlwc2wgPSBwbWMtPnNmbGlzdDsKKwlwc2wgPSBydG5sX2RlcmVmZXJlbmNlKHBtYy0+c2ZsaXN0KTsKIAlydG5sX3VubG9jaygpOwogCWlmICghcHNsKSB7CiAJCWxlbiA9IDA7CkBAIC0yMjA4LDcgKzIyMjIsNyBAQAogCiAJZXJyID0gLUVBRERSTk9UQVZBSUw7CiAKLQlmb3IgKHBtYz1pbmV0LT5tY19saXN0OyBwbWM7IHBtYz1wbWMtPm5leHQpIHsKKwlmb3JfZWFjaF9wbWNfcnRubChpbmV0LCBwbWMpIHsKIAkJaWYgKHBtYy0+bXVsdGkuaW1yX211bHRpYWRkci5zX2FkZHIgPT0gYWRkciAmJgogCQkgICAgcG1jLT5tdWx0aS5pbXJfaWZpbmRleCA9PSBnc2YtPmdmX2ludGVyZmFjZSkKIAkJCWJyZWFrOwpAQCAtMjIxNiw3ICsyMjMwLDcgQEAKIAlpZiAoIXBtYykJCS8qIG11c3QgaGF2ZSBhIHByaW9yIGpvaW4gKi8KIAkJZ290byBkb25lOwogCWdzZi0+Z2ZfZm1vZGUgPSBwbWMtPnNmbW9kZTsKLQlwc2wgPSBwbWMtPnNmbGlzdDsKKwlwc2wgPSBydG5sX2RlcmVmZXJlbmNlKHBtYy0+c2ZsaXN0KTsKIAlydG5sX3VubG9jaygpOwogCWNvdW50ID0gcHNsID8gcHNsLT5zbF9jb3VudCA6IDA7CiAJY29weWNvdW50ID0gY291bnQgPCBnc2YtPmdmX251bXNyYyA/IGNvdW50IDogZ3NmLT5nZl9udW1zcmM7CkBAIC0yMjU3LDcgKzIyNzEsNyBAQAogCQlnb3RvIG91dDsKIAogCXJjdV9yZWFkX2xvY2soKTsKLQlmb3IgKHBtYz1yY3VfZGVyZWZlcmVuY2UoaW5ldC0+bWNfbGlzdCk7IHBtYzsgcG1jPXJjdV9kZXJlZmVyZW5jZShwbWMtPm5leHQpKSB7CisJZm9yX2VhY2hfcG1jX3JjdShpbmV0LCBwbWMpIHsKIAkJaWYgKHBtYy0+bXVsdGkuaW1yX211bHRpYWRkci5zX2FkZHIgPT0gbG9jX2FkZHIgJiYKIAkJICAgIHBtYy0+bXVsdGkuaW1yX2lmaW5kZXggPT0gZGlmKQogCQkJYnJlYWs7CkBAIC0yMjY1LDcgKzIyNzksNyBAQAogCXJldCA9IGluZXQtPm1jX2FsbDsKIAlpZiAoIXBtYykKIAkJZ290byB1bmxvY2s7Ci0JcHNsID0gcG1jLT5zZmxpc3Q7CisJcHNsID0gcmN1X2RlcmVmZXJlbmNlKHBtYy0+c2ZsaXN0KTsKIAlyZXQgPSAocG1jLT5zZm1vZGUgPT0gTUNBU1RfRVhDTFVERSk7CiAJaWYgKCFwc2wpCiAJCWdvdG8gdW5sb2NrOwpAQCAtMjMwMCwxMCArMjMxNCwxMCBAQAogCQlyZXR1cm47CiAKIAlydG5sX2xvY2soKTsKLQl3aGlsZSAoKGltbCA9IGluZXQtPm1jX2xpc3QpICE9IE5VTEwpIHsKKwl3aGlsZSAoKGltbCA9IHJ0bmxfZGVyZWZlcmVuY2UoaW5ldC0+bWNfbGlzdCkpICE9IE5VTEwpIHsKIAkJc3RydWN0IGluX2RldmljZSAqaW5fZGV2OwotCQlyY3VfYXNzaWduX3BvaW50ZXIoaW5ldC0+bWNfbGlzdCwgaW1sLT5uZXh0KTsKIAorCQlpbmV0LT5tY19saXN0ID0gaW1sLT5uZXh0X3JjdTsKIAkJaW5fZGV2ID0gaW5ldGRldl9ieV9pbmRleChuZXQsIGltbC0+bXVsdGkuaW1yX2lmaW5kZXgpOwogCQkodm9pZCkgaXBfbWNfbGVhdmVfc3JjKHNrLCBpbWwsIGluX2Rldik7CiAJCWlmIChpbl9kZXYgIT0gTlVMTCkKQEAgLTIzMjEsOCArMjMzNSw4IEBACiAJc3RydWN0IGlwX3NmX2xpc3QgKnBzZjsKIAlpbnQgcnYgPSAwOwogCi0JcmVhZF9sb2NrKCZpbl9kZXYtPm1jX2xpc3RfbG9jayk7Ci0JZm9yIChpbT1pbl9kZXYtPm1jX2xpc3Q7IGltOyBpbT1pbS0+bmV4dCkgeworCXJjdV9yZWFkX2xvY2soKTsKKwlmb3JfZWFjaF9wbWNfcmN1KGluX2RldiwgaW0pIHsKIAkJaWYgKGltLT5tdWx0aWFkZHIgPT0gbWNfYWRkcikKIAkJCWJyZWFrOwogCX0KQEAgLTIzNDMsNyArMjM1Nyw3IEBACiAJCX0gZWxzZQogCQkJcnYgPSAxOyAvKiB1bnNwZWNpZmllZCBzb3VyY2U7IHRlbnRhdGl2ZWx5IGFsbG93ICovCiAJfQotCXJlYWRfdW5sb2NrKCZpbl9kZXYtPm1jX2xpc3RfbG9jayk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAJcmV0dXJuIHJ2OwogfQogCkBAIC0yMzY5LDEzICsyMzgzLDExIEBACiAJCWluX2RldiA9IF9faW5fZGV2X2dldF9yY3Uoc3RhdGUtPmRldik7CiAJCWlmICghaW5fZGV2KQogCQkJY29udGludWU7Ci0JCXJlYWRfbG9jaygmaW5fZGV2LT5tY19saXN0X2xvY2spOwotCQlpbSA9IGluX2Rldi0+bWNfbGlzdDsKKwkJaW0gPSByY3VfZGVyZWZlcmVuY2UoaW5fZGV2LT5tY19saXN0KTsKIAkJaWYgKGltKSB7CiAJCQlzdGF0ZS0+aW5fZGV2ID0gaW5fZGV2OwogCQkJYnJlYWs7CiAJCX0KLQkJcmVhZF91bmxvY2soJmluX2Rldi0+bWNfbGlzdF9sb2NrKTsKIAl9CiAJcmV0dXJuIGltOwogfQpAQCAtMjM4MywxMSArMjM5NSw5IEBACiBzdGF0aWMgc3RydWN0IGlwX21jX2xpc3QgKmlnbXBfbWNfZ2V0X25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBpcF9tY19saXN0ICppbSkKIHsKIAlzdHJ1Y3QgaWdtcF9tY19pdGVyX3N0YXRlICpzdGF0ZSA9IGlnbXBfbWNfc2VxX3ByaXZhdGUoc2VxKTsKLQlpbSA9IGltLT5uZXh0OwotCXdoaWxlICghaW0pIHsKLQkJaWYgKGxpa2VseShzdGF0ZS0+aW5fZGV2ICE9IE5VTEwpKQotCQkJcmVhZF91bmxvY2soJnN0YXRlLT5pbl9kZXYtPm1jX2xpc3RfbG9jayk7CiAKKwlpbSA9IHJjdV9kZXJlZmVyZW5jZShpbS0+bmV4dF9yY3UpOworCXdoaWxlICghaW0pIHsKIAkJc3RhdGUtPmRldiA9IG5leHRfbmV0X2RldmljZV9yY3Uoc3RhdGUtPmRldik7CiAJCWlmICghc3RhdGUtPmRldikgewogCQkJc3RhdGUtPmluX2RldiA9IE5VTEw7CkBAIC0yMzk2LDggKzI0MDYsNyBAQAogCQlzdGF0ZS0+aW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShzdGF0ZS0+ZGV2KTsKIAkJaWYgKCFzdGF0ZS0+aW5fZGV2KQogCQkJY29udGludWU7Ci0JCXJlYWRfbG9jaygmc3RhdGUtPmluX2Rldi0+bWNfbGlzdF9sb2NrKTsKLQkJaW0gPSBzdGF0ZS0+aW5fZGV2LT5tY19saXN0OworCQlpbSA9IHJjdV9kZXJlZmVyZW5jZShzdGF0ZS0+aW5fZGV2LT5tY19saXN0KTsKIAl9CiAJcmV0dXJuIGltOwogfQpAQCAtMjQzMywxMCArMjQ0Miw4IEBACiAJX19yZWxlYXNlcyhyY3UpCiB7CiAJc3RydWN0IGlnbXBfbWNfaXRlcl9zdGF0ZSAqc3RhdGUgPSBpZ21wX21jX3NlcV9wcml2YXRlKHNlcSk7Ci0JaWYgKGxpa2VseShzdGF0ZS0+aW5fZGV2ICE9IE5VTEwpKSB7Ci0JCXJlYWRfdW5sb2NrKCZzdGF0ZS0+aW5fZGV2LT5tY19saXN0X2xvY2spOwotCQlzdGF0ZS0+aW5fZGV2ID0gTlVMTDsKLQl9CisKKwlzdGF0ZS0+aW5fZGV2ID0gTlVMTDsKIAlzdGF0ZS0+ZGV2ID0gTlVMTDsKIAlyY3VfcmVhZF91bmxvY2soKTsKIH0KQEAgLTI0NTgsNyArMjQ2NSw3IEBACiAJCXF1ZXJpZXIgPSAiTk9ORSI7CiAjZW5kaWYKIAotCQlpZiAoc3RhdGUtPmluX2Rldi0+bWNfbGlzdCA9PSBpbSkgeworCQlpZiAocmN1X2RlcmVmZXJlbmNlKHN0YXRlLT5pbl9kZXYtPm1jX2xpc3QpID09IGltKSB7CiAJCQlzZXFfcHJpbnRmKHNlcSwgIiVkXHQlLTEwczogJTVkICU3c1xuIiwKIAkJCQkgICBzdGF0ZS0+ZGV2LT5pZmluZGV4LCBzdGF0ZS0+ZGV2LT5uYW1lLCBzdGF0ZS0+aW5fZGV2LT5tY19jb3VudCwgcXVlcmllcik7CiAJCX0KQEAgLTI1MTcsOCArMjUyNCw3IEBACiAJCWlkZXYgPSBfX2luX2Rldl9nZXRfcmN1KHN0YXRlLT5kZXYpOwogCQlpZiAodW5saWtlbHkoaWRldiA9PSBOVUxMKSkKIAkJCWNvbnRpbnVlOwotCQlyZWFkX2xvY2soJmlkZXYtPm1jX2xpc3RfbG9jayk7Ci0JCWltID0gaWRldi0+bWNfbGlzdDsKKwkJaW0gPSByY3VfZGVyZWZlcmVuY2UoaWRldi0+bWNfbGlzdCk7CiAJCWlmIChsaWtlbHkoaW0gIT0gTlVMTCkpIHsKIAkJCXNwaW5fbG9ja19iaCgmaW0tPmxvY2spOwogCQkJcHNmID0gaW0tPnNvdXJjZXM7CkBAIC0yNTI5LDcgKzI1MzUsNiBAQAogCQkJfQogCQkJc3Bpbl91bmxvY2tfYmgoJmltLT5sb2NrKTsKIAkJfQotCQlyZWFkX3VubG9jaygmaWRldi0+bWNfbGlzdF9sb2NrKTsKIAl9CiAJcmV0dXJuIHBzZjsKIH0KQEAgLTI1NDMsOSArMjU0OCw2IEBACiAJCXNwaW5fdW5sb2NrX2JoKCZzdGF0ZS0+aW0tPmxvY2spOwogCQlzdGF0ZS0+aW0gPSBzdGF0ZS0+aW0tPm5leHQ7CiAJCXdoaWxlICghc3RhdGUtPmltKSB7Ci0JCQlpZiAobGlrZWx5KHN0YXRlLT5pZGV2ICE9IE5VTEwpKQotCQkJCXJlYWRfdW5sb2NrKCZzdGF0ZS0+aWRldi0+bWNfbGlzdF9sb2NrKTsKLQogCQkJc3RhdGUtPmRldiA9IG5leHRfbmV0X2RldmljZV9yY3Uoc3RhdGUtPmRldik7CiAJCQlpZiAoIXN0YXRlLT5kZXYpIHsKIAkJCQlzdGF0ZS0+aWRldiA9IE5VTEw7CkBAIC0yNTU0LDggKzI1NTYsNyBAQAogCQkJc3RhdGUtPmlkZXYgPSBfX2luX2Rldl9nZXRfcmN1KHN0YXRlLT5kZXYpOwogCQkJaWYgKCFzdGF0ZS0+aWRldikKIAkJCQljb250aW51ZTsKLQkJCXJlYWRfbG9jaygmc3RhdGUtPmlkZXYtPm1jX2xpc3RfbG9jayk7Ci0JCQlzdGF0ZS0+aW0gPSBzdGF0ZS0+aWRldi0+bWNfbGlzdDsKKwkJCXN0YXRlLT5pbSA9IHJjdV9kZXJlZmVyZW5jZShzdGF0ZS0+aWRldi0+bWNfbGlzdCk7CiAJCX0KIAkJaWYgKCFzdGF0ZS0+aW0pCiAJCQlicmVhazsKQEAgLTI2MDEsMTAgKzI2MDIsNyBAQAogCQlzcGluX3VubG9ja19iaCgmc3RhdGUtPmltLT5sb2NrKTsKIAkJc3RhdGUtPmltID0gTlVMTDsKIAl9Ci0JaWYgKGxpa2VseShzdGF0ZS0+aWRldiAhPSBOVUxMKSkgewotCQlyZWFkX3VubG9jaygmc3RhdGUtPmlkZXYtPm1jX2xpc3RfbG9jayk7Ci0JCXN0YXRlLT5pZGV2ID0gTlVMTDsKLQl9CisJc3RhdGUtPmlkZXYgPSBOVUxMOwogCXN0YXRlLT5kZXYgPSBOVUxMOwogCXJjdV9yZWFkX3VubG9jaygpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYyBiL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMKaW5kZXggNzE3NDM3MC4uMjVlMzE4MSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYworKysgYi9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jCkBAIC01NSw3ICs1NSw2IEBACiBpbnQgaW5ldF9jc2tfYmluZF9jb25mbGljdChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssCiAJCQkgICBjb25zdCBzdHJ1Y3QgaW5ldF9iaW5kX2J1Y2tldCAqdGIpCiB7Ci0JY29uc3QgX19iZTMyIHNrX3Jjdl9zYWRkciA9IGluZXRfcmN2X3NhZGRyKHNrKTsKIAlzdHJ1Y3Qgc29jayAqc2syOwogCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOwogCWludCByZXVzZSA9IHNrLT5za19yZXVzZTsKQEAgLTc1LDkgKzc0LDkgQEAKIAkJICAgICBzay0+c2tfYm91bmRfZGV2X2lmID09IHNrMi0+c2tfYm91bmRfZGV2X2lmKSkgewogCQkJaWYgKCFyZXVzZSB8fCAhc2syLT5za19yZXVzZSB8fAogCQkJICAgIHNrMi0+c2tfc3RhdGUgPT0gVENQX0xJU1RFTikgewotCQkJCWNvbnN0IF9fYmUzMiBzazJfcmN2X3NhZGRyID0gaW5ldF9yY3Zfc2FkZHIoc2syKTsKLQkJCQlpZiAoIXNrMl9yY3Zfc2FkZHIgfHwgIXNrX3Jjdl9zYWRkciB8fAotCQkJCSAgICBzazJfcmN2X3NhZGRyID09IHNrX3Jjdl9zYWRkcikKKwkJCQljb25zdCBfX2JlMzIgc2syX3Jjdl9zYWRkciA9IHNrX3Jjdl9zYWRkcihzazIpOworCQkJCWlmICghc2syX3Jjdl9zYWRkciB8fCAhc2tfcmN2X3NhZGRyKHNrKSB8fAorCQkJCSAgICBzazJfcmN2X3NhZGRyID09IHNrX3Jjdl9zYWRkcihzaykpCiAJCQkJCWJyZWFrOwogCQkJfQogCQl9CkBAIC0zNTgsMTcgKzM1NywxNCBAQAogCXN0cnVjdCBpcF9vcHRpb25zICpvcHQgPSBpbmV0X3JzayhyZXEpLT5vcHQ7CiAJc3RydWN0IGZsb3dpIGZsID0geyAub2lmID0gc2stPnNrX2JvdW5kX2Rldl9pZiwKIAkJCSAgICAubWFyayA9IHNrLT5za19tYXJrLAotCQkJICAgIC5ubF91ID0geyAuaXA0X3UgPQotCQkJCSAgICAgIHsgLmRhZGRyID0gKChvcHQgJiYgb3B0LT5zcnIpID8KLQkJCQkJCSAgb3B0LT5mYWRkciA6Ci0JCQkJCQkgIGlyZXEtPnJtdF9hZGRyKSwKLQkJCQkJLnNhZGRyID0gaXJlcS0+bG9jX2FkZHIsCi0JCQkJCS50b3MgPSBSVF9DT05OX0ZMQUdTKHNrKSB9IH0sCisJCQkgICAgLmZsNF9kc3QgPSAoKG9wdCAmJiBvcHQtPnNycikgPworCQkJCQkgIG9wdC0+ZmFkZHIgOiBpcmVxLT5ybXRfYWRkciksCisJCQkgICAgLmZsNF9zcmMgPSBpcmVxLT5sb2NfYWRkciwKKwkJCSAgICAuZmw0X3RvcyA9IFJUX0NPTk5fRkxBR1Moc2spLAogCQkJICAgIC5wcm90byA9IHNrLT5za19wcm90b2NvbCwKIAkJCSAgICAuZmxhZ3MgPSBpbmV0X3NrX2Zsb3dpX2ZsYWdzKHNrKSwKLQkJCSAgICAudWxpX3UgPSB7IC5wb3J0cyA9Ci0JCQkJICAgICAgIHsgLnNwb3J0ID0gaW5ldF9zayhzayktPmluZXRfc3BvcnQsCi0JCQkJCSAuZHBvcnQgPSBpcmVxLT5ybXRfcG9ydCB9IH0gfTsKKwkJCSAgICAuZmxfaXBfc3BvcnQgPSBpbmV0X3NrKHNrKS0+aW5ldF9zcG9ydCwKKwkJCSAgICAuZmxfaXBfZHBvcnQgPSBpcmVxLT5ybXRfcG9ydCB9OwogCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTsKIAogCXNlY3VyaXR5X3JlcV9jbGFzc2lmeV9mbG93KHJlcSwgJmZsKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2luZXRwZWVyLmMgYi9uZXQvaXB2NC9pbmV0cGVlci5jCmluZGV4IDllOTRkN2MuLmQ5YmM4NTcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2luZXRwZWVyLmMKKysrIGIvbmV0L2lwdjQvaW5ldHBlZXIuYwpAQCAtNjMsNyArNjMsNyBAQAogICoJCXJlZmNudDogYXRvbWljYWxseSBhZ2FpbnN0IG1vZGlmaWNhdGlvbnMgb24gb3RoZXIgQ1BVOwogICoJCSAgIHVzdWFsbHkgdW5kZXIgc29tZSBvdGhlciBsb2NrIHRvIHByZXZlbnQgbm9kZSBkaXNhcHBlYXJpbmcKICAqCQlkdGltZTogdW51c2VkIG5vZGUgbGlzdCBsb2NrCi0gKgkJdjRkYWRkcjogdW5jaGFuZ2VhYmxlCisgKgkJZGFkZHI6IHVuY2hhbmdlYWJsZQogICoJCWlwX2lkX2NvdW50OiBhdG9taWMgdmFsdWUgKG5vIGxvY2sgbmVlZGVkKQogICovCiAKQEAgLTc5LDE1ICs3OSwyNCBAQAogCS5hdmxfaGVpZ2h0CT0gMAogfTsKIAotc3RhdGljIHN0cnVjdCB7CitzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgewogCXN0cnVjdCBpbmV0X3BlZXIgX19yY3UgKnJvb3Q7CiAJc3BpbmxvY2tfdAlsb2NrOwogCWludAkJdG90YWw7Ci19IHBlZXJzID0geworfTsKKworc3RhdGljIHN0cnVjdCBpbmV0X3BlZXJfYmFzZSB2NF9wZWVycyA9IHsKIAkucm9vdAkJPSBwZWVyX2F2bF9lbXB0eV9yY3UsCi0JLmxvY2sJCT0gX19TUElOX0xPQ0tfVU5MT0NLRUQocGVlcnMubG9jayksCisJLmxvY2sJCT0gX19TUElOX0xPQ0tfVU5MT0NLRUQodjRfcGVlcnMubG9jayksCiAJLnRvdGFsCQk9IDAsCiB9OworCitzdGF0aWMgc3RydWN0IGluZXRfcGVlcl9iYXNlIHY2X3BlZXJzID0geworCS5yb290CQk9IHBlZXJfYXZsX2VtcHR5X3JjdSwKKwkubG9jawkJPSBfX1NQSU5fTE9DS19VTkxPQ0tFRCh2Nl9wZWVycy5sb2NrKSwKKwkudG90YWwJCT0gMCwKK307CisKICNkZWZpbmUgUEVFUl9NQVhERVBUSCA0MCAvKiBzdWZmaWNpZW50IGZvciBhYm91dCAyXjI3IG5vZGVzICovCiAKIC8qIEV4cG9ydGVkIGZvciBzeXNjdGxfbmV0X2lwdjQuICAqLwpAQCAtMTUyLDI4ICsxNjEsNDUgQEAKIAl9CiB9CiAKK3N0YXRpYyBpbnQgYWRkcl9jb21wYXJlKGNvbnN0IHN0cnVjdCBpbmV0cGVlcl9hZGRyICphLAorCQkJY29uc3Qgc3RydWN0IGluZXRwZWVyX2FkZHIgKmIpCit7CisJaW50IGksIG4gPSAoYS0+ZmFtaWx5ID09IEFGX0lORVQgPyAxIDogNCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCWlmIChhLT5hNltpXSA9PSBiLT5hNltpXSkKKwkJCWNvbnRpbnVlOworCQlpZiAoYS0+YTZbaV0gPCBiLT5hNltpXSkKKwkJCXJldHVybiAtMTsKKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIC8qCiAgKiBDYWxsZWQgd2l0aCBsb2NhbCBCSCBkaXNhYmxlZCBhbmQgdGhlIHBvb2wgbG9jayBoZWxkLgogICovCi0jZGVmaW5lIGxvb2t1cChfZGFkZHIsIF9zdGFjaykgCQkJCQlcCisjZGVmaW5lIGxvb2t1cChfZGFkZHIsIF9zdGFjaywgX2Jhc2UpCQkJCVwKICh7CQkJCQkJCQlcCiAJc3RydWN0IGluZXRfcGVlciAqdTsJCQkJCVwKIAlzdHJ1Y3QgaW5ldF9wZWVyIF9fcmN1ICoqdjsJCQkJXAogCQkJCQkJCQlcCiAJc3RhY2twdHIgPSBfc3RhY2s7CQkJCQlcCi0JKnN0YWNrcHRyKysgPSAmcGVlcnMucm9vdDsJCQkJXAotCWZvciAodSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQocGVlcnMucm9vdCwJCVwKLQkJCWxvY2tkZXBfaXNfaGVsZCgmcGVlcnMubG9jaykpOwkJXAorCSpzdGFja3B0cisrID0gJl9iYXNlLT5yb290OwkJCQlcCisJZm9yICh1ID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChfYmFzZS0+cm9vdCwJCVwKKwkJCWxvY2tkZXBfaXNfaGVsZCgmX2Jhc2UtPmxvY2spKTsJCVwKIAkgICAgIHUgIT0gcGVlcl9hdmxfZW1wdHk7ICkgewkJCQlcCi0JCWlmIChfZGFkZHIgPT0gdS0+djRkYWRkcikJCQlcCisJCWludCBjbXAgPSBhZGRyX2NvbXBhcmUoX2RhZGRyLCAmdS0+ZGFkZHIpOwlcCisJCWlmIChjbXAgPT0gMCkJCQkJCVwKIAkJCWJyZWFrOwkJCQkJXAotCQlpZiAoKF9fZm9yY2UgX191MzIpX2RhZGRyIDwgKF9fZm9yY2UgX191MzIpdS0+djRkYWRkcikJXAorCQlpZiAoY21wID09IC0xKQkJCQkJXAogCQkJdiA9ICZ1LT5hdmxfbGVmdDsJCQlcCiAJCWVsc2UJCQkJCQlcCiAJCQl2ID0gJnUtPmF2bF9yaWdodDsJCQlcCiAJCSpzdGFja3B0cisrID0gdjsJCQkJXAogCQl1ID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCgqdiwJCVwKLQkJCWxvY2tkZXBfaXNfaGVsZCgmcGVlcnMubG9jaykpOwkJXAorCQkJbG9ja2RlcF9pc19oZWxkKCZfYmFzZS0+bG9jaykpOwkJXAogCX0JCQkJCQkJXAogCXU7CQkJCQkJCVwKIH0pCkBAIC0xODUsMTMgKzIxMSwxNSBAQAogICogQnV0IGV2ZXJ5IHBvaW50ZXIgd2UgZm9sbG93IGlzIGd1YXJhbnRlZWQgdG8gYmUgdmFsaWQgdGhhbmtzIHRvIFJDVS4KICAqIFdlIGV4aXQgZnJvbSB0aGlzIGZ1bmN0aW9uIGlmIG51bWJlciBvZiBsaW5rcyBleGNlZWRzIFBFRVJfTUFYREVQVEgKICAqLwotc3RhdGljIHN0cnVjdCBpbmV0X3BlZXIgKmxvb2t1cF9yY3VfYmgoX19iZTMyIGRhZGRyKQorc3RhdGljIHN0cnVjdCBpbmV0X3BlZXIgKmxvb2t1cF9yY3VfYmgoY29uc3Qgc3RydWN0IGluZXRwZWVyX2FkZHIgKmRhZGRyLAorCQkJCSAgICAgICBzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJhc2UpCiB7Ci0Jc3RydWN0IGluZXRfcGVlciAqdSA9IHJjdV9kZXJlZmVyZW5jZV9iaChwZWVycy5yb290KTsKKwlzdHJ1Y3QgaW5ldF9wZWVyICp1ID0gcmN1X2RlcmVmZXJlbmNlX2JoKGJhc2UtPnJvb3QpOwogCWludCBjb3VudCA9IDA7CiAKIAl3aGlsZSAodSAhPSBwZWVyX2F2bF9lbXB0eSkgewotCQlpZiAoZGFkZHIgPT0gdS0+djRkYWRkcikgeworCQlpbnQgY21wID0gYWRkcl9jb21wYXJlKGRhZGRyLCAmdS0+ZGFkZHIpOworCQlpZiAoY21wID09IDApIHsKIAkJCS8qIEJlZm9yZSB0YWtpbmcgYSByZWZlcmVuY2UsIGNoZWNrIGlmIHRoaXMgZW50cnkgd2FzCiAJCQkgKiBkZWxldGVkLCB1bmxpbmtfZnJvbV9wb29sKCkgc2V0cyByZWZjbnQ9LTEgdG8gbWFrZQogCQkJICogZGlzdGluY3Rpb24gYmV0d2VlbiBhbiB1bnVzZWQgZW50cnkgKHJlZmNudD0wKSBhbmQKQEAgLTIwMSw3ICsyMjksNyBAQAogCQkJCXUgPSBOVUxMOwogCQkJcmV0dXJuIHU7CiAJCX0KLQkJaWYgKChfX2ZvcmNlIF9fdTMyKWRhZGRyIDwgKF9fZm9yY2UgX191MzIpdS0+djRkYWRkcikKKwkJaWYgKGNtcCA9PSAtMSkKIAkJCXUgPSByY3VfZGVyZWZlcmVuY2VfYmgodS0+YXZsX2xlZnQpOwogCQllbHNlCiAJCQl1ID0gcmN1X2RlcmVmZXJlbmNlX2JoKHUtPmF2bF9yaWdodCk7CkBAIC0yMTIsMTkgKzI0MCwxOSBAQAogfQogCiAvKiBDYWxsZWQgd2l0aCBsb2NhbCBCSCBkaXNhYmxlZCBhbmQgdGhlIHBvb2wgbG9jayBoZWxkLiAqLwotI2RlZmluZSBsb29rdXBfcmlnaHRlbXB0eShzdGFydCkJCQkJXAorI2RlZmluZSBsb29rdXBfcmlnaHRlbXB0eShzdGFydCwgYmFzZSkJCQkJXAogKHsJCQkJCQkJCVwKIAlzdHJ1Y3QgaW5ldF9wZWVyICp1OwkJCQkJXAogCXN0cnVjdCBpbmV0X3BlZXIgX19yY3UgKip2OwkJCQlcCiAJKnN0YWNrcHRyKysgPSAmc3RhcnQtPmF2bF9sZWZ0OwkJCQlcCiAJdiA9ICZzdGFydC0+YXZsX2xlZnQ7CQkJCQlcCiAJZm9yICh1ID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCgqdiwJCQlcCi0JCQlsb2NrZGVwX2lzX2hlbGQoJnBlZXJzLmxvY2spKTsJCVwKKwkJCWxvY2tkZXBfaXNfaGVsZCgmYmFzZS0+bG9jaykpOwkJXAogCSAgICAgdS0+YXZsX3JpZ2h0ICE9IHBlZXJfYXZsX2VtcHR5X3JjdTsgKSB7CQlcCiAJCXYgPSAmdS0+YXZsX3JpZ2h0OwkJCQlcCiAJCSpzdGFja3B0cisrID0gdjsJCQkJXAogCQl1ID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCgqdiwJCVwKLQkJCWxvY2tkZXBfaXNfaGVsZCgmcGVlcnMubG9jaykpOwkJXAorCQkJbG9ja2RlcF9pc19oZWxkKCZiYXNlLT5sb2NrKSk7CQlcCiAJfQkJCQkJCQlcCiAJdTsJCQkJCQkJXAogfSkKQEAgLTIzNCw3ICsyNjIsOCBAQAogICogTG9vayBpbnRvIG1tL21hcF9hdmwuYyBmb3IgbW9yZSBkZXRhaWwgZGVzY3JpcHRpb24gb2YgdGhlIGlkZWFzLgogICovCiBzdGF0aWMgdm9pZCBwZWVyX2F2bF9yZWJhbGFuY2Uoc3RydWN0IGluZXRfcGVlciBfX3JjdSAqKnN0YWNrW10sCi0JCXN0cnVjdCBpbmV0X3BlZXIgX19yY3UgKioqc3RhY2tlbmQpCisJCQkgICAgICAgc3RydWN0IGluZXRfcGVlciBfX3JjdSAqKipzdGFja2VuZCwKKwkJCSAgICAgICBzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJhc2UpCiB7CiAJc3RydWN0IGluZXRfcGVlciBfX3JjdSAqKm5vZGVwOwogCXN0cnVjdCBpbmV0X3BlZXIgKm5vZGUsICpsLCAqcjsKQEAgLTI0MywyMCArMjcyLDIwIEBACiAJd2hpbGUgKHN0YWNrZW5kID4gc3RhY2spIHsKIAkJbm9kZXAgPSAqLS1zdGFja2VuZDsKIAkJbm9kZSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoKm5vZGVwLAotCQkJCWxvY2tkZXBfaXNfaGVsZCgmcGVlcnMubG9jaykpOworCQkJCWxvY2tkZXBfaXNfaGVsZCgmYmFzZS0+bG9jaykpOwogCQlsID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChub2RlLT5hdmxfbGVmdCwKLQkJCQlsb2NrZGVwX2lzX2hlbGQoJnBlZXJzLmxvY2spKTsKKwkJCQlsb2NrZGVwX2lzX2hlbGQoJmJhc2UtPmxvY2spKTsKIAkJciA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQobm9kZS0+YXZsX3JpZ2h0LAotCQkJCWxvY2tkZXBfaXNfaGVsZCgmcGVlcnMubG9jaykpOworCQkJCWxvY2tkZXBfaXNfaGVsZCgmYmFzZS0+bG9jaykpOwogCQlsaCA9IG5vZGVfaGVpZ2h0KGwpOwogCQlyaCA9IG5vZGVfaGVpZ2h0KHIpOwogCQlpZiAobGggPiByaCArIDEpIHsgLyogbDogUkgrMiAqLwogCQkJc3RydWN0IGluZXRfcGVlciAqbGwsICpsciwgKmxybCwgKmxycjsKIAkJCWludCBscmg7CiAJCQlsbCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQobC0+YXZsX2xlZnQsCi0JCQkJbG9ja2RlcF9pc19oZWxkKCZwZWVycy5sb2NrKSk7CisJCQkJbG9ja2RlcF9pc19oZWxkKCZiYXNlLT5sb2NrKSk7CiAJCQlsciA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQobC0+YXZsX3JpZ2h0LAotCQkJCWxvY2tkZXBfaXNfaGVsZCgmcGVlcnMubG9jaykpOworCQkJCWxvY2tkZXBfaXNfaGVsZCgmYmFzZS0+bG9jaykpOwogCQkJbHJoID0gbm9kZV9oZWlnaHQobHIpOwogCQkJaWYgKGxyaCA8PSBub2RlX2hlaWdodChsbCkpIHsJLyogbGw6IFJIKzEgKi8KIAkJCQlSQ1VfSU5JVF9QT0lOVEVSKG5vZGUtPmF2bF9sZWZ0LCBscik7CS8qIGxyOiBSSCBvciBSSCsxICovCkBAIC0yNjgsOSArMjk3LDkgQEAKIAkJCQlSQ1VfSU5JVF9QT0lOVEVSKCpub2RlcCwgbCk7CiAJCQl9IGVsc2UgeyAvKiBsbDogUkgsIGxyOiBSSCsxICovCiAJCQkJbHJsID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChsci0+YXZsX2xlZnQsCi0JCQkJCWxvY2tkZXBfaXNfaGVsZCgmcGVlcnMubG9jaykpOwkvKiBscmw6IFJIIG9yIFJILTEgKi8KKwkJCQkJbG9ja2RlcF9pc19oZWxkKCZiYXNlLT5sb2NrKSk7CS8qIGxybDogUkggb3IgUkgtMSAqLwogCQkJCWxyciA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQobHItPmF2bF9yaWdodCwKLQkJCQkJbG9ja2RlcF9pc19oZWxkKCZwZWVycy5sb2NrKSk7CS8qIGxycjogUkggb3IgUkgtMSAqLworCQkJCQlsb2NrZGVwX2lzX2hlbGQoJmJhc2UtPmxvY2spKTsJLyogbHJyOiBSSCBvciBSSC0xICovCiAJCQkJUkNVX0lOSVRfUE9JTlRFUihub2RlLT5hdmxfbGVmdCwgbHJyKTsJLyogbHJyOiBSSCBvciBSSC0xICovCiAJCQkJUkNVX0lOSVRfUE9JTlRFUihub2RlLT5hdmxfcmlnaHQsIHIpOwkvKiByOiBSSCAqLwogCQkJCW5vZGUtPmF2bF9oZWlnaHQgPSByaCArIDE7IC8qIG5vZGU6IFJIKzEgKi8KQEAgLTI4Niw5ICszMTUsOSBAQAogCQkJc3RydWN0IGluZXRfcGVlciAqcnIsICpybCwgKnJsciwgKnJsbDsKIAkJCWludCBybGg7CiAJCQlyciA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoci0+YXZsX3JpZ2h0LAotCQkJCWxvY2tkZXBfaXNfaGVsZCgmcGVlcnMubG9jaykpOworCQkJCWxvY2tkZXBfaXNfaGVsZCgmYmFzZS0+bG9jaykpOwogCQkJcmwgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHItPmF2bF9sZWZ0LAotCQkJCWxvY2tkZXBfaXNfaGVsZCgmcGVlcnMubG9jaykpOworCQkJCWxvY2tkZXBfaXNfaGVsZCgmYmFzZS0+bG9jaykpOwogCQkJcmxoID0gbm9kZV9oZWlnaHQocmwpOwogCQkJaWYgKHJsaCA8PSBub2RlX2hlaWdodChycikpIHsJLyogcnI6IExIKzEgKi8KIAkJCQlSQ1VfSU5JVF9QT0lOVEVSKG5vZGUtPmF2bF9yaWdodCwgcmwpOwkvKiBybDogTEggb3IgTEgrMSAqLwpAQCAtMzAwLDkgKzMyOSw5IEBACiAJCQkJUkNVX0lOSVRfUE9JTlRFUigqbm9kZXAsIHIpOwogCQkJfSBlbHNlIHsgLyogcnI6IFJILCBybDogUkgrMSAqLwogCQkJCXJsciA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQocmwtPmF2bF9yaWdodCwKLQkJCQkJbG9ja2RlcF9pc19oZWxkKCZwZWVycy5sb2NrKSk7CS8qIHJscjogTEggb3IgTEgtMSAqLworCQkJCQlsb2NrZGVwX2lzX2hlbGQoJmJhc2UtPmxvY2spKTsJLyogcmxyOiBMSCBvciBMSC0xICovCiAJCQkJcmxsID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChybC0+YXZsX2xlZnQsCi0JCQkJCWxvY2tkZXBfaXNfaGVsZCgmcGVlcnMubG9jaykpOwkvKiBybGw6IExIIG9yIExILTEgKi8KKwkJCQkJbG9ja2RlcF9pc19oZWxkKCZiYXNlLT5sb2NrKSk7CS8qIHJsbDogTEggb3IgTEgtMSAqLwogCQkJCVJDVV9JTklUX1BPSU5URVIobm9kZS0+YXZsX3JpZ2h0LCBybGwpOwkvKiBybGw6IExIIG9yIExILTEgKi8KIAkJCQlSQ1VfSU5JVF9QT0lOVEVSKG5vZGUtPmF2bF9sZWZ0LCBsKTsJLyogbDogTEggKi8KIAkJCQlub2RlLT5hdmxfaGVpZ2h0ID0gbGggKyAxOyAvKiBub2RlOiBMSCsxICovCkBAIC0zMjEsMTQgKzM1MCwxNCBAQAogfQogCiAvKiBDYWxsZWQgd2l0aCBsb2NhbCBCSCBkaXNhYmxlZCBhbmQgdGhlIHBvb2wgbG9jayBoZWxkLiAqLwotI2RlZmluZSBsaW5rX3RvX3Bvb2wobikJCQkJCQlcCisjZGVmaW5lIGxpbmtfdG9fcG9vbChuLCBiYXNlKQkJCQkJXAogZG8gewkJCQkJCQkJXAogCW4tPmF2bF9oZWlnaHQgPSAxOwkJCQkJXAogCW4tPmF2bF9sZWZ0ID0gcGVlcl9hdmxfZW1wdHlfcmN1OwkJCVwKIAluLT5hdmxfcmlnaHQgPSBwZWVyX2F2bF9lbXB0eV9yY3U7CQkJXAogCS8qIGxvY2tsZXNzIHJlYWRlcnMgY2FuIGNhdGNoIHVzIG5vdyAqLwkJCVwKIAlyY3VfYXNzaWduX3BvaW50ZXIoKiotLXN0YWNrcHRyLCBuKTsJCQlcCi0JcGVlcl9hdmxfcmViYWxhbmNlKHN0YWNrLCBzdGFja3B0cik7CQkJXAorCXBlZXJfYXZsX3JlYmFsYW5jZShzdGFjaywgc3RhY2twdHIsIGJhc2UpOwkJXAogfSB3aGlsZSAoMCkKIAogc3RhdGljIHZvaWQgaW5ldHBlZXJfZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKQpAQCAtMzM3LDEzICszNjYsMTMgQEAKIH0KIAogLyogTWF5IGJlIGNhbGxlZCB3aXRoIGxvY2FsIEJIIGVuYWJsZWQuICovCi1zdGF0aWMgdm9pZCB1bmxpbmtfZnJvbV9wb29sKHN0cnVjdCBpbmV0X3BlZXIgKnApCitzdGF0aWMgdm9pZCB1bmxpbmtfZnJvbV9wb29sKHN0cnVjdCBpbmV0X3BlZXIgKnAsIHN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqYmFzZSkKIHsKIAlpbnQgZG9fZnJlZTsKIAogCWRvX2ZyZWUgPSAwOwogCi0Jc3Bpbl9sb2NrX2JoKCZwZWVycy5sb2NrKTsKKwlzcGluX2xvY2tfYmgoJmJhc2UtPmxvY2spOwogCS8qIENoZWNrIHRoZSByZWZlcmVuY2UgY291bnRlci4gIEl0IHdhcyBhcnRpZmljaWFsbHkgaW5jcmVtZW50ZWQgYnkgMQogCSAqIGluIGNsZWFudXAoKSBmdW5jdGlvbiB0byBwcmV2ZW50IHN1ZGRlbiBkaXNhcHBlYXJpbmcuICBJZiB3ZSBjYW4KIAkgKiBhdG9taWNhbGx5IChiZWNhdXNlIG9mIGxvY2tsZXNzIHJlYWRlcnMpIHRha2UgdGhpcyBsYXN0IHJlZmVyZW5jZSwKQEAgLTM1Myw3ICszODIsNyBAQAogCWlmIChhdG9taWNfY21weGNoZygmcC0+cmVmY250LCAxLCAtMSkgPT0gMSkgewogCQlzdHJ1Y3QgaW5ldF9wZWVyIF9fcmN1ICoqc3RhY2tbUEVFUl9NQVhERVBUSF07CiAJCXN0cnVjdCBpbmV0X3BlZXIgX19yY3UgKioqc3RhY2twdHIsICoqKmRlbHA7Ci0JCWlmIChsb29rdXAocC0+djRkYWRkciwgc3RhY2spICE9IHApCisJCWlmIChsb29rdXAoJnAtPmRhZGRyLCBzdGFjaywgYmFzZSkgIT0gcCkKIAkJCUJVRygpOwogCQlkZWxwID0gc3RhY2twdHIgLSAxOyAvKiAqZGVscFswXSA9PSBwICovCiAJCWlmIChwLT5hdmxfbGVmdCA9PSBwZWVyX2F2bF9lbXB0eV9yY3UpIHsKQEAgLTM2MiwxMSArMzkxLDExIEBACiAJCX0gZWxzZSB7CiAJCQkvKiBsb29rIGZvciBhIG5vZGUgdG8gaW5zZXJ0IGluc3RlYWQgb2YgcCAqLwogCQkJc3RydWN0IGluZXRfcGVlciAqdDsKLQkJCXQgPSBsb29rdXBfcmlnaHRlbXB0eShwKTsKKwkJCXQgPSBsb29rdXBfcmlnaHRlbXB0eShwLCBiYXNlKTsKIAkJCUJVR19PTihyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKCpzdGFja3B0clstMV0sCi0JCQkJCWxvY2tkZXBfaXNfaGVsZCgmcGVlcnMubG9jaykpICE9IHQpOworCQkJCQlsb2NrZGVwX2lzX2hlbGQoJmJhc2UtPmxvY2spKSAhPSB0KTsKIAkJCSoqLS1zdGFja3B0ciA9IHQtPmF2bF9sZWZ0OwotCQkJLyogdCBpcyByZW1vdmVkLCB0LT52NGRhZGRyID4geC0+djRkYWRkciBmb3IgYW55CisJCQkvKiB0IGlzIHJlbW92ZWQsIHQtPmRhZGRyID4geC0+ZGFkZHIgZm9yIGFueQogCQkJICogeCBpbiBwLT5hdmxfbGVmdCBzdWJ0cmVlLgogCQkJICogUHV0IHQgaW4gdGhlIG9sZCBwbGFjZSBvZiBwLiAqLwogCQkJUkNVX0lOSVRfUE9JTlRFUigqZGVscFswXSwgdCk7CkBAIC0zNzYsMTEgKzQwNSwxMSBAQAogCQkJQlVHX09OKGRlbHBbMV0gIT0gJnAtPmF2bF9sZWZ0KTsKIAkJCWRlbHBbMV0gPSAmdC0+YXZsX2xlZnQ7IC8qIHdhcyAmcC0+YXZsX2xlZnQgKi8KIAkJfQotCQlwZWVyX2F2bF9yZWJhbGFuY2Uoc3RhY2ssIHN0YWNrcHRyKTsKLQkJcGVlcnMudG90YWwtLTsKKwkJcGVlcl9hdmxfcmViYWxhbmNlKHN0YWNrLCBzdGFja3B0ciwgYmFzZSk7CisJCWJhc2UtPnRvdGFsLS07CiAJCWRvX2ZyZWUgPSAxOwogCX0KLQlzcGluX3VubG9ja19iaCgmcGVlcnMubG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJmJhc2UtPmxvY2spOwogCiAJaWYgKGRvX2ZyZWUpCiAJCWNhbGxfcmN1X2JoKCZwLT5yY3UsIGluZXRwZWVyX2ZyZWVfcmN1KTsKQEAgLTM5NSw2ICs0MjQsMTYgQEAKIAkJaW5ldF9wdXRwZWVyKHApOwogfQogCitzdGF0aWMgc3RydWN0IGluZXRfcGVlcl9iYXNlICpmYW1pbHlfdG9fYmFzZShpbnQgZmFtaWx5KQoreworCXJldHVybiAoZmFtaWx5ID09IEFGX0lORVQgPyAmdjRfcGVlcnMgOiAmdjZfcGVlcnMpOworfQorCitzdGF0aWMgc3RydWN0IGluZXRfcGVlcl9iYXNlICpwZWVyX3RvX2Jhc2Uoc3RydWN0IGluZXRfcGVlciAqcCkKK3sKKwlyZXR1cm4gZmFtaWx5X3RvX2Jhc2UocC0+ZGFkZHIuZmFtaWx5KTsKK30KKwogLyogTWF5IGJlIGNhbGxlZCB3aXRoIGxvY2FsIEJIIGVuYWJsZWQuICovCiBzdGF0aWMgaW50IGNsZWFudXBfb25jZSh1bnNpZ25lZCBsb25nIHR0bCkKIHsKQEAgLTQyOCwyMSArNDY3LDIyIEBACiAJCSAqIGhhcHBlbiBiZWNhdXNlIG9mIGVudHJ5IGxpbWl0cyBpbiByb3V0ZSBjYWNoZS4gKi8KIAkJcmV0dXJuIC0xOwogCi0JdW5saW5rX2Zyb21fcG9vbChwKTsKKwl1bmxpbmtfZnJvbV9wb29sKHAsIHBlZXJfdG9fYmFzZShwKSk7CiAJcmV0dXJuIDA7CiB9CiAKIC8qIENhbGxlZCB3aXRoIG9yIHdpdGhvdXQgbG9jYWwgQkggYmVpbmcgZGlzYWJsZWQuICovCi1zdHJ1Y3QgaW5ldF9wZWVyICppbmV0X2dldHBlZXIoX19iZTMyIGRhZGRyLCBpbnQgY3JlYXRlKQorc3RydWN0IGluZXRfcGVlciAqaW5ldF9nZXRwZWVyKHN0cnVjdCBpbmV0cGVlcl9hZGRyICpkYWRkciwgaW50IGNyZWF0ZSkKIHsKLQlzdHJ1Y3QgaW5ldF9wZWVyICpwOwogCXN0cnVjdCBpbmV0X3BlZXIgX19yY3UgKipzdGFja1tQRUVSX01BWERFUFRIXSwgKioqc3RhY2twdHI7CisJc3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlID0gZmFtaWx5X3RvX2Jhc2UoQUZfSU5FVCk7CisJc3RydWN0IGluZXRfcGVlciAqcDsKIAogCS8qIExvb2sgdXAgZm9yIHRoZSBhZGRyZXNzIHF1aWNrbHksIGxvY2tsZXNzLgogCSAqIEJlY2F1c2Ugb2YgYSBjb25jdXJyZW50IHdyaXRlciwgd2UgbWlnaHQgbm90IGZpbmQgYW4gZXhpc3RpbmcgZW50cnkuCiAJICovCiAJcmN1X3JlYWRfbG9ja19iaCgpOwotCXAgPSBsb29rdXBfcmN1X2JoKGRhZGRyKTsKKwlwID0gbG9va3VwX3JjdV9iaChkYWRkciwgYmFzZSk7CiAJcmN1X3JlYWRfdW5sb2NrX2JoKCk7CiAKIAlpZiAocCkgewpAQCAtNDU2LDUwICs0OTYsNTcgQEAKIAkvKiByZXRyeSBhbiBleGFjdCBsb29rdXAsIHRha2luZyB0aGUgbG9jayBiZWZvcmUuCiAJICogQXQgbGVhc3QsIG5vZGVzIHNob3VsZCBiZSBob3QgaW4gb3VyIGNhY2hlLgogCSAqLwotCXNwaW5fbG9ja19iaCgmcGVlcnMubG9jayk7Ci0JcCA9IGxvb2t1cChkYWRkciwgc3RhY2spOworCXNwaW5fbG9ja19iaCgmYmFzZS0+bG9jayk7CisJcCA9IGxvb2t1cChkYWRkciwgc3RhY2ssIGJhc2UpOwogCWlmIChwICE9IHBlZXJfYXZsX2VtcHR5KSB7CiAJCWF0b21pY19pbmMoJnAtPnJlZmNudCk7Ci0JCXNwaW5fdW5sb2NrX2JoKCZwZWVycy5sb2NrKTsKKwkJc3Bpbl91bmxvY2tfYmgoJmJhc2UtPmxvY2spOwogCQkvKiBSZW1vdmUgdGhlIGVudHJ5IGZyb20gdW51c2VkIGxpc3QgaWYgaXQgd2FzIHRoZXJlLiAqLwogCQl1bmxpbmtfZnJvbV91bnVzZWQocCk7CiAJCXJldHVybiBwOwogCX0KIAlwID0gY3JlYXRlID8ga21lbV9jYWNoZV9hbGxvYyhwZWVyX2NhY2hlcCwgR0ZQX0FUT01JQykgOiBOVUxMOwogCWlmIChwKSB7Ci0JCXAtPnY0ZGFkZHIgPSBkYWRkcjsKKwkJcC0+ZGFkZHIgPSAqZGFkZHI7CiAJCWF0b21pY19zZXQoJnAtPnJlZmNudCwgMSk7CiAJCWF0b21pY19zZXQoJnAtPnJpZCwgMCk7Ci0JCWF0b21pY19zZXQoJnAtPmlwX2lkX2NvdW50LCBzZWN1cmVfaXBfaWQoZGFkZHIpKTsKKwkJYXRvbWljX3NldCgmcC0+aXBfaWRfY291bnQsIHNlY3VyZV9pcF9pZChkYWRkci0+YTQpKTsKIAkJcC0+dGNwX3RzX3N0YW1wID0gMDsKIAkJSU5JVF9MSVNUX0hFQUQoJnAtPnVudXNlZCk7CiAKIAogCQkvKiBMaW5rIHRoZSBub2RlLiAqLwotCQlsaW5rX3RvX3Bvb2wocCk7Ci0JCXBlZXJzLnRvdGFsKys7CisJCWxpbmtfdG9fcG9vbChwLCBiYXNlKTsKKwkJYmFzZS0+dG90YWwrKzsKIAl9Ci0Jc3Bpbl91bmxvY2tfYmgoJnBlZXJzLmxvY2spOworCXNwaW5fdW5sb2NrX2JoKCZiYXNlLT5sb2NrKTsKIAotCWlmIChwZWVycy50b3RhbCA+PSBpbmV0X3BlZXJfdGhyZXNob2xkKQorCWlmIChiYXNlLT50b3RhbCA+PSBpbmV0X3BlZXJfdGhyZXNob2xkKQogCQkvKiBSZW1vdmUgb25lIGxlc3MtcmVjZW50bHktdXNlZCBlbnRyeS4gKi8KIAkJY2xlYW51cF9vbmNlKDApOwogCiAJcmV0dXJuIHA7CiB9CiAKK3N0YXRpYyBpbnQgY29tcHV0ZV90b3RhbCh2b2lkKQoreworCXJldHVybiB2NF9wZWVycy50b3RhbCArIHY2X3BlZXJzLnRvdGFsOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaW5ldF9nZXRwZWVyKTsKKwogLyogQ2FsbGVkIHdpdGggbG9jYWwgQkggZGlzYWJsZWQuICovCiBzdGF0aWMgdm9pZCBwZWVyX2NoZWNrX2V4cGlyZSh1bnNpZ25lZCBsb25nIGR1bW15KQogewogCXVuc2lnbmVkIGxvbmcgbm93ID0gamlmZmllczsKLQlpbnQgdHRsOworCWludCB0dGwsIHRvdGFsOwogCi0JaWYgKHBlZXJzLnRvdGFsID49IGluZXRfcGVlcl90aHJlc2hvbGQpCisJdG90YWwgPSBjb21wdXRlX3RvdGFsKCk7CisJaWYgKHRvdGFsID49IGluZXRfcGVlcl90aHJlc2hvbGQpCiAJCXR0bCA9IGluZXRfcGVlcl9taW50dGw7CiAJZWxzZQogCQl0dGwgPSBpbmV0X3BlZXJfbWF4dHRsCiAJCQkJLSAoaW5ldF9wZWVyX21heHR0bCAtIGluZXRfcGVlcl9taW50dGwpIC8gSFogKgotCQkJCQlwZWVycy50b3RhbCAvIGluZXRfcGVlcl90aHJlc2hvbGQgKiBIWjsKKwkJCQkJdG90YWwgLyBpbmV0X3BlZXJfdGhyZXNob2xkICogSFo7CiAJd2hpbGUgKCFjbGVhbnVwX29uY2UodHRsKSkgewogCQlpZiAoamlmZmllcyAhPSBub3cpCiAJCQlicmVhazsKQEAgLTUwOCwxMyArNTU1LDE0IEBACiAJLyogVHJpZ2dlciB0aGUgdGltZXIgYWZ0ZXIgaW5ldF9wZWVyX2djX21pbnRpbWUgLi4gaW5ldF9wZWVyX2djX21heHRpbWUKIAkgKiBpbnRlcnZhbCBkZXBlbmRpbmcgb24gdGhlIHRvdGFsIG51bWJlciBvZiBlbnRyaWVzIChtb3JlIGVudHJpZXMsCiAJICogbGVzcyBpbnRlcnZhbCkuICovCi0JaWYgKHBlZXJzLnRvdGFsID49IGluZXRfcGVlcl90aHJlc2hvbGQpCisJdG90YWwgPSBjb21wdXRlX3RvdGFsKCk7CisJaWYgKHRvdGFsID49IGluZXRfcGVlcl90aHJlc2hvbGQpCiAJCXBlZXJfcGVyaW9kaWNfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBpbmV0X3BlZXJfZ2NfbWludGltZTsKIAllbHNlCiAJCXBlZXJfcGVyaW9kaWNfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMKIAkJCSsgaW5ldF9wZWVyX2djX21heHRpbWUKIAkJCS0gKGluZXRfcGVlcl9nY19tYXh0aW1lIC0gaW5ldF9wZWVyX2djX21pbnRpbWUpIC8gSFogKgotCQkJCXBlZXJzLnRvdGFsIC8gaW5ldF9wZWVyX3RocmVzaG9sZCAqIEhaOworCQkJCXRvdGFsIC8gaW5ldF9wZWVyX3RocmVzaG9sZCAqIEhaOwogCWFkZF90aW1lcigmcGVlcl9wZXJpb2RpY190aW1lcik7CiB9CiAKQEAgLTUzMCwzICs1NzgsNCBAQAogCiAJbG9jYWxfYmhfZW5hYmxlKCk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChpbmV0X3B1dHBlZXIpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfZnJhZ21lbnQuYyBiL25ldC9pcHY0L2lwX2ZyYWdtZW50LmMKaW5kZXggMTY4NDQwOC4uYTExNTFiOCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfZnJhZ21lbnQuYworKysgYi9uZXQvaXB2NC9pcF9mcmFnbWVudC5jCkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSA8bGludXgvdWRwLmg+CiAjaW5jbHVkZSA8bGludXgvaW5ldC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0Lmg+CisjaW5jbHVkZSA8bmV0L2luZXRfZWNuLmg+CiAKIC8qIE5PVEUuIExvZ2ljIG9mIElQIGRlZnJhZ21lbnRhdGlvbiBpcyBwYXJhbGxlbCB0byBjb3JyZXNwb25kaW5nIElQdjYKICAqIGNvZGUgbm93LiBJZiB5b3UgY2hhbmdlIHNvbWV0aGluZyBoZXJlLCBfUExFQVNFXyB1cGRhdGUgaXB2Ni9yZWFzc2VtYmx5LmMKQEAgLTcwLDExICs3MSwyOCBAQAogCV9fYmUzMgkJZGFkZHI7CiAJX19iZTE2CQlpZDsKIAl1OAkJcHJvdG9jb2w7CisJdTgJCWVjbjsgLyogUkZDMzE2OCBzdXBwb3J0ICovCiAJaW50ICAgICAgICAgICAgIGlpZjsKIAl1bnNpZ25lZCBpbnQgICAgcmlkOwogCXN0cnVjdCBpbmV0X3BlZXIgKnBlZXI7CiB9OwogCisjZGVmaW5lIElQRlJBR19FQ05fQ0xFQVIgIDB4MDEgLyogb25lIGZyYWcgaGFkIElORVRfRUNOX05PVF9FQ1QgKi8KKyNkZWZpbmUgSVBGUkFHX0VDTl9TRVRfQ0UgMHgwNCAvKiBvbmUgZnJhZyBoYWQgSU5FVF9FQ05fQ0UgKi8KKworc3RhdGljIGlubGluZSB1OCBpcDRfZnJhZ19lY24odTggdG9zKQoreworCXRvcyA9ICh0b3MgJiBJTkVUX0VDTl9NQVNLKSArIDE7CisJLyoKKwkgKiBBZnRlciB0aGUgbGFzdCBvcGVyYXRpb24gd2UgaGF2ZSAoaW4gYmluYXJ5KToKKwkgKiBJTkVUX0VDTl9OT1RfRUNUID0+IDAwMQorCSAqIElORVRfRUNOX0VDVF8xICAgPT4gMDEwCisJICogSU5FVF9FQ05fRUNUXzAgICA9PiAwMTEKKwkgKiBJTkVUX0VDTl9DRSAgICAgID0+IDEwMAorCSAqLworCXJldHVybiAodG9zICYgMikgPyAwIDogdG9zOworfQorCiBzdGF0aWMgc3RydWN0IGluZXRfZnJhZ3MgaXA0X2ZyYWdzOwogCiBpbnQgaXBfZnJhZ19ucXVldWVzKHN0cnVjdCBuZXQgKm5ldCkKQEAgLTEzNywxMSArMTU1LDEyIEBACiAKIAlxcC0+cHJvdG9jb2wgPSBhcmctPmlwaC0+cHJvdG9jb2w7CiAJcXAtPmlkID0gYXJnLT5pcGgtPmlkOworCXFwLT5lY24gPSBpcDRfZnJhZ19lY24oYXJnLT5pcGgtPnRvcyk7CiAJcXAtPnNhZGRyID0gYXJnLT5pcGgtPnNhZGRyOwogCXFwLT5kYWRkciA9IGFyZy0+aXBoLT5kYWRkcjsKIAlxcC0+dXNlciA9IGFyZy0+dXNlcjsKIAlxcC0+cGVlciA9IHN5c2N0bF9pcGZyYWdfbWF4X2Rpc3QgPwotCQlpbmV0X2dldHBlZXIoYXJnLT5pcGgtPnNhZGRyLCAxKSA6IE5VTEw7CisJCWluZXRfZ2V0cGVlcl92NChhcmctPmlwaC0+c2FkZHIsIDEpIDogTlVMTDsKIH0KIAogc3RhdGljIF9faW5saW5lX18gdm9pZCBpcDRfZnJhZ19mcmVlKHN0cnVjdCBpbmV0X2ZyYWdfcXVldWUgKnEpCkBAIC0zMTYsNiArMzM1LDcgQEAKIAlxcC0+cS5mcmFnbWVudHMgPSBOVUxMOwogCXFwLT5xLmZyYWdtZW50c190YWlsID0gTlVMTDsKIAlxcC0+aWlmID0gMDsKKwlxcC0+ZWNuID0gMDsKIAogCXJldHVybiAwOwogfQpAQCAtMzI4LDYgKzM0OCw3IEBACiAJaW50IGZsYWdzLCBvZmZzZXQ7CiAJaW50IGlobCwgZW5kOwogCWludCBlcnIgPSAtRU5PRU5UOworCXU4IGVjbjsKIAogCWlmIChxcC0+cS5sYXN0X2luICYgSU5FVF9GUkFHX0NPTVBMRVRFKQogCQlnb3RvIGVycjsKQEAgLTMzOSw2ICszNjAsNyBAQAogCQlnb3RvIGVycjsKIAl9CiAKKwllY24gPSBpcDRfZnJhZ19lY24oaXBfaGRyKHNrYiktPnRvcyk7CiAJb2Zmc2V0ID0gbnRvaHMoaXBfaGRyKHNrYiktPmZyYWdfb2ZmKTsKIAlmbGFncyA9IG9mZnNldCAmIH5JUF9PRkZTRVQ7CiAJb2Zmc2V0ICY9IElQX09GRlNFVDsKQEAgLTQ3Miw2ICs0OTQsNyBAQAogCX0KIAlxcC0+cS5zdGFtcCA9IHNrYi0+dHN0YW1wOwogCXFwLT5xLm1lYXQgKz0gc2tiLT5sZW47CisJcXAtPmVjbiB8PSBlY247CiAJYXRvbWljX2FkZChza2ItPnRydWVzaXplLCAmcXAtPnEubmV0LT5tZW0pOwogCWlmIChvZmZzZXQgPT0gMCkKIAkJcXAtPnEubGFzdF9pbiB8PSBJTkVUX0ZSQUdfRklSU1RfSU47CkBAIC01ODMsNiArNjA2LDE3IEBACiAJaXBoID0gaXBfaGRyKGhlYWQpOwogCWlwaC0+ZnJhZ19vZmYgPSAwOwogCWlwaC0+dG90X2xlbiA9IGh0b25zKGxlbik7CisJLyogUkZDMzE2OCA1LjMgRnJhZ21lbnRhdGlvbiBzdXBwb3J0CisJICogSWYgb25lIGZyYWdtZW50IGhhZCBJTkVUX0VDTl9OT1RfRUNULAorCSAqCXJlYXNzZW1ibGVkIGZyYW1lIGFsc28gaGFzIElORVRfRUNOX05PVF9FQ1QKKwkgKiBFbGlmIG9uZSBmcmFnbWVudCBoYWQgSU5FVF9FQ05fQ0UKKwkgKglyZWFzc2VtYmxlZCBmcmFtZSBhbHNvIGhhcyBJTkVUX0VDTl9DRQorCSAqLworCWlmIChxcC0+ZWNuICYgSVBGUkFHX0VDTl9DTEVBUikKKwkJaXBoLT50b3MgJj0gfklORVRfRUNOX01BU0s7CisJZWxzZSBpZiAocXAtPmVjbiAmIElQRlJBR19FQ05fU0VUX0NFKQorCQlpcGgtPnRvcyB8PSBJTkVUX0VDTl9DRTsKKwogCUlQX0lOQ19TVEFUU19CSChuZXQsIElQU1RBVFNfTUlCX1JFQVNNT0tTKTsKIAlxcC0+cS5mcmFnbWVudHMgPSBOVUxMOwogCXFwLT5xLmZyYWdtZW50c190YWlsID0gTlVMTDsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX2dyZS5jIGIvbmV0L2lwdjQvaXBfZ3JlLmMKaW5kZXggNzBmZjc3Zi4uZWI2OGEwZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfZ3JlLmMKKysrIGIvbmV0L2lwdjQvaXBfZ3JlLmMKQEAgLTQwNSwxMSArNDA1LDExIEBACiAJaWYgKHBhcm1zLT5uYW1lWzBdKQogCQlzdHJsY3B5KG5hbWUsIHBhcm1zLT5uYW1lLCBJRk5BTVNJWik7CiAJZWxzZQotCQlzcHJpbnRmKG5hbWUsICJncmUlJWQiKTsKKwkJc3RyY3B5KG5hbWUsICJncmUlZCIpOwogCiAJZGV2ID0gYWxsb2NfbmV0ZGV2KHNpemVvZigqdCksIG5hbWUsIGlwZ3JlX3R1bm5lbF9zZXR1cCk7CiAJaWYgKCFkZXYpCi0JICByZXR1cm4gTlVMTDsKKwkJcmV0dXJuIE5VTEw7CiAKIAlkZXZfbmV0X3NldChkZXYsIG5ldCk7CiAKQEAgLTYzNCw3ICs2MzQsNyBAQAogI2lmZGVmIENPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUCiAJCWlmIChpcHY0X2lzX211bHRpY2FzdChpcGgtPmRhZGRyKSkgewogCQkJLyogTG9vcGVkIGJhY2sgcGFja2V0LCBkcm9wIGl0ISAqLwotCQkJaWYgKHNrYl9ydGFibGUoc2tiKS0+ZmwuaWlmID09IDApCisJCQlpZiAocnRfaXNfb3V0cHV0X3JvdXRlKHNrYl9ydGFibGUoc2tiKSkpCiAJCQkJZ290byBkcm9wOwogCQkJdHVubmVsLT5kZXYtPnN0YXRzLm11bHRpY2FzdCsrOwogCQkJc2tiLT5wa3RfdHlwZSA9IFBBQ0tFVF9CUk9BRENBU1Q7CkBAIC03NzIsMTYgKzc3MiwxMSBAQAogCXsKIAkJc3RydWN0IGZsb3dpIGZsID0gewogCQkJLm9pZiA9IHR1bm5lbC0+cGFybXMubGluaywKLQkJCS5ubF91ID0gewotCQkJCS5pcDRfdSA9IHsKLQkJCQkJLmRhZGRyID0gZHN0LAotCQkJCQkuc2FkZHIgPSB0aXBoLT5zYWRkciwKLQkJCQkJLnRvcyA9IFJUX1RPUyh0b3MpCi0JCQkJfQotCQkJfSwKLQkJCS5wcm90byA9IElQUFJPVE9fR1JFCi0JCX0KLTsKKwkJCS5mbDRfZHN0ID0gZHN0LAorCQkJLmZsNF9zcmMgPSB0aXBoLT5zYWRkciwKKwkJCS5mbDRfdG9zID0gUlRfVE9TKHRvcyksCisJCQkuZmxfZ3JlX2tleSA9IHR1bm5lbC0+cGFybXMub19rZXkKKwkJfTsKIAkJaWYgKGlwX3JvdXRlX291dHB1dF9rZXkoZGV2X25ldChkZXYpLCAmcnQsICZmbCkpIHsKIAkJCWRldi0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKIAkJCWdvdG8gdHhfZXJyb3I7CkBAIC04MjMsNyArODE4LDcgQEAKIAkJCSAgICAgIWlwdjRfaXNfbXVsdGljYXN0KHR1bm5lbC0+cGFybXMuaXBoLmRhZGRyKSkgfHwKIAkJCSAgICBydDYtPnJ0NmlfZHN0LnBsZW4gPT0gMTI4KSB7CiAJCQkJcnQ2LT5ydDZpX2ZsYWdzIHw9IFJURl9NT0RJRklFRDsKLQkJCQlza2JfZHN0KHNrYiktPm1ldHJpY3NbUlRBWF9NVFUtMV0gPSBtdHU7CisJCQkJZHN0X21ldHJpY19zZXQoc2tiX2RzdChza2IpLCBSVEFYX01UVSwgbXR1KTsKIAkJCX0KIAkJfQogCkBAIC04OTUsNyArODkwLDcgQEAKIAkJCWlwaC0+dHRsID0gKChzdHJ1Y3QgaXB2NmhkciAqKW9sZF9pcGgpLT5ob3BfbGltaXQ7CiAjZW5kaWYKIAkJZWxzZQotCQkJaXBoLT50dGwgPSBkc3RfbWV0cmljKCZydC0+ZHN0LCBSVEFYX0hPUExJTUlUKTsKKwkJCWlwaC0+dHRsID0gaXA0X2RzdF9ob3BsaW1pdCgmcnQtPmRzdCk7CiAJfQogCiAJKChfX2JlMTYgKikoaXBoICsgMSkpWzBdID0gdHVubmVsLT5wYXJtcy5vX2ZsYWdzOwpAQCAtOTUxLDE0ICs5NDYsMTEgQEAKIAlpZiAoaXBoLT5kYWRkcikgewogCQlzdHJ1Y3QgZmxvd2kgZmwgPSB7CiAJCQkub2lmID0gdHVubmVsLT5wYXJtcy5saW5rLAotCQkJLm5sX3UgPSB7Ci0JCQkJLmlwNF91ID0gewotCQkJCQkuZGFkZHIgPSBpcGgtPmRhZGRyLAotCQkJCQkuc2FkZHIgPSBpcGgtPnNhZGRyLAotCQkJCQkudG9zID0gUlRfVE9TKGlwaC0+dG9zKQotCQkJCX0KLQkJCX0sCi0JCQkucHJvdG8gPSBJUFBST1RPX0dSRQorCQkJLmZsNF9kc3QgPSBpcGgtPmRhZGRyLAorCQkJLmZsNF9zcmMgPSBpcGgtPnNhZGRyLAorCQkJLmZsNF90b3MgPSBSVF9UT1MoaXBoLT50b3MpLAorCQkJLnByb3RvID0gSVBQUk9UT19HUkUsCisJCQkuZmxfZ3JlX2tleSA9IHR1bm5lbC0+cGFybXMub19rZXkKIAkJfTsKIAkJc3RydWN0IHJ0YWJsZSAqcnQ7CiAKQEAgLTEyMTYsMTQgKzEyMDgsMTEgQEAKIAlpZiAoaXB2NF9pc19tdWx0aWNhc3QodC0+cGFybXMuaXBoLmRhZGRyKSkgewogCQlzdHJ1Y3QgZmxvd2kgZmwgPSB7CiAJCQkub2lmID0gdC0+cGFybXMubGluaywKLQkJCS5ubF91ID0gewotCQkJCS5pcDRfdSA9IHsKLQkJCQkJLmRhZGRyID0gdC0+cGFybXMuaXBoLmRhZGRyLAotCQkJCQkuc2FkZHIgPSB0LT5wYXJtcy5pcGguc2FkZHIsCi0JCQkJCS50b3MgPSBSVF9UT1ModC0+cGFybXMuaXBoLnRvcykKLQkJCQl9Ci0JCQl9LAotCQkJLnByb3RvID0gSVBQUk9UT19HUkUKKwkJCS5mbDRfZHN0ID0gdC0+cGFybXMuaXBoLmRhZGRyLAorCQkJLmZsNF9zcmMgPSB0LT5wYXJtcy5pcGguc2FkZHIsCisJCQkuZmw0X3RvcyA9IFJUX1RPUyh0LT5wYXJtcy5pcGgudG9zKSwKKwkJCS5wcm90byA9IElQUFJPVE9fR1JFLAorCQkJLmZsX2dyZV9rZXkgPSB0LT5wYXJtcy5vX2tleQogCQl9OwogCQlzdHJ1Y3QgcnRhYmxlICpydDsKIApAQCAtMTc3NSwzICsxNzY0LDQgQEAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BTElBU19SVE5MX0xJTksoImdyZSIpOwogTU9EVUxFX0FMSUFTX1JUTkxfTElOSygiZ3JldGFwIik7CitNT0RVTEVfQUxJQVMoImdyZTAiKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX291dHB1dC5jIGIvbmV0L2lwdjQvaXBfb3V0cHV0LmMKaW5kZXggNDM5ZDJhMy4uMDRjN2IzYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfb3V0cHV0LmMKKysrIGIvbmV0L2lwdjQvaXBfb3V0cHV0LmMKQEAgLTgyLDYgKzgyLDcgQEAKICNpbmNsdWRlIDxsaW51eC90Y3AuaD4KIAogaW50IHN5c2N0bF9pcF9kZWZhdWx0X3R0bCBfX3JlYWRfbW9zdGx5ID0gSVBERUZUVEw7CitFWFBPUlRfU1lNQk9MKHN5c2N0bF9pcF9kZWZhdWx0X3R0bCk7CiAKIC8qIEdlbmVyYXRlIGEgY2hlY2tzdW0gZm9yIGFuIG91dGdvaW5nIElQIGRhdGFncmFtLiAqLwogX19pbmxpbmVfXyB2b2lkIGlwX3NlbmRfY2hlY2soc3RydWN0IGlwaGRyICppcGgpCkBAIC0xMzAsNyArMTMxLDcgQEAKIAlpbnQgdHRsID0gaW5ldC0+dWNfdHRsOwogCiAJaWYgKHR0bCA8IDApCi0JCXR0bCA9IGRzdF9tZXRyaWMoZHN0LCBSVEFYX0hPUExJTUlUKTsKKwkJdHRsID0gaXA0X2RzdF9ob3BsaW1pdChkc3QpOwogCXJldHVybiB0dGw7CiB9CiAKQEAgLTM0MSwxNSArMzQyLDEzIEBACiAJCXsKIAkJCXN0cnVjdCBmbG93aSBmbCA9IHsgLm9pZiA9IHNrLT5za19ib3VuZF9kZXZfaWYsCiAJCQkJCSAgICAubWFyayA9IHNrLT5za19tYXJrLAotCQkJCQkgICAgLm5sX3UgPSB7IC5pcDRfdSA9Ci0JCQkJCQkgICAgICB7IC5kYWRkciA9IGRhZGRyLAotCQkJCQkJCS5zYWRkciA9IGluZXQtPmluZXRfc2FkZHIsCi0JCQkJCQkJLnRvcyA9IFJUX0NPTk5fRkxBR1Moc2spIH0gfSwKKwkJCQkJICAgIC5mbDRfZHN0ID0gZGFkZHIsCisJCQkJCSAgICAuZmw0X3NyYyA9IGluZXQtPmluZXRfc2FkZHIsCisJCQkJCSAgICAuZmw0X3RvcyA9IFJUX0NPTk5fRkxBR1Moc2spLAogCQkJCQkgICAgLnByb3RvID0gc2stPnNrX3Byb3RvY29sLAogCQkJCQkgICAgLmZsYWdzID0gaW5ldF9za19mbG93aV9mbGFncyhzayksCi0JCQkJCSAgICAudWxpX3UgPSB7IC5wb3J0cyA9Ci0JCQkJCQkgICAgICAgeyAuc3BvcnQgPSBpbmV0LT5pbmV0X3Nwb3J0LAotCQkJCQkJCSAuZHBvcnQgPSBpbmV0LT5pbmV0X2Rwb3J0IH0gfSB9OworCQkJCQkgICAgLmZsX2lwX3Nwb3J0ID0gaW5ldC0+aW5ldF9zcG9ydCwKKwkJCQkJICAgIC5mbF9pcF9kcG9ydCA9IGluZXQtPmluZXRfZHBvcnQgfTsKIAogCQkJLyogSWYgdGhpcyBmYWlscywgcmV0cmFuc21pdCBtZWNoYW5pc20gb2YgdHJhbnNwb3J0IGxheWVyIHdpbGwKIAkJCSAqIGtlZXAgdHJ5aW5nIHVudGlsIHJvdXRlIGFwcGVhcnMgb3IgdGhlIGNvbm5lY3Rpb24gdGltZXMKQEAgLTE0MDQsMTQgKzE0MDMsMTEgQEAKIAogCXsKIAkJc3RydWN0IGZsb3dpIGZsID0geyAub2lmID0gYXJnLT5ib3VuZF9kZXZfaWYsCi0JCQkJICAgIC5ubF91ID0geyAuaXA0X3UgPQotCQkJCQkgICAgICB7IC5kYWRkciA9IGRhZGRyLAotCQkJCQkJLnNhZGRyID0gcnQtPnJ0X3NwZWNfZHN0LAotCQkJCQkJLnRvcyA9IFJUX1RPUyhpcF9oZHIoc2tiKS0+dG9zKSB9IH0sCi0JCQkJICAgIC8qIE5vdCBxdWl0ZSBjbGVhbiwgYnV0IHJpZ2h0LiAqLwotCQkJCSAgICAudWxpX3UgPSB7IC5wb3J0cyA9Ci0JCQkJCSAgICAgICB7IC5zcG9ydCA9IHRjcF9oZHIoc2tiKS0+ZGVzdCwKLQkJCQkJCSAuZHBvcnQgPSB0Y3BfaGRyKHNrYiktPnNvdXJjZSB9IH0sCisJCQkJICAgIC5mbDRfZHN0ID0gZGFkZHIsCisJCQkJICAgIC5mbDRfc3JjID0gcnQtPnJ0X3NwZWNfZHN0LAorCQkJCSAgICAuZmw0X3RvcyA9IFJUX1RPUyhpcF9oZHIoc2tiKS0+dG9zKSwKKwkJCQkgICAgLmZsX2lwX3Nwb3J0ID0gdGNwX2hkcihza2IpLT5kZXN0LAorCQkJCSAgICAuZmxfaXBfZHBvcnQgPSB0Y3BfaGRyKHNrYiktPnNvdXJjZSwKIAkJCQkgICAgLnByb3RvID0gc2stPnNrX3Byb3RvY29sLAogCQkJCSAgICAuZmxhZ3MgPSBpcF9yZXBseV9hcmdfZmxvd2lfZmxhZ3MoYXJnKSB9OwogCQlzZWN1cml0eV9za2JfY2xhc3NpZnlfZmxvdyhza2IsICZmbCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcGNvbmZpZy5jIGIvbmV0L2lwdjQvaXBjb25maWcuYwppbmRleCAzYTZlMWVjLi4yYjA5Nzc1IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcGNvbmZpZy5jCisrKyBiL25ldC9pcHY0L2lwY29uZmlnLmMKQEAgLTExOTEsMTMgKzExOTEsMTMgQEAKIAkJICAgIChpY19wcm90b19lbmFibGVkICYgSUNfVVNFX0RIQ1ApICYmCiAJCSAgICBpY19kaGNwX21zZ3R5cGUgIT0gREhDUEFDSykgewogCQkJaWNfZ290X3JlcGx5ID0gMDsKLQkJCXByaW50aygiLCIpOworCQkJcHJpbnRrKEtFUk5fQ09OVCAiLCIpOwogCQkJY29udGludWU7CiAJCX0KICNlbmRpZiAvKiBJUENPTkZJR19ESENQICovCiAKIAkJaWYgKGljX2dvdF9yZXBseSkgewotCQkJcHJpbnRrKCIgT0tcbiIpOworCQkJcHJpbnRrKEtFUk5fQ09OVCAiIE9LXG4iKTsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTEyMDUsNyArMTIwNSw3IEBACiAJCQljb250aW51ZTsKIAogCQlpZiAoISAtLXJldHJpZXMpIHsKLQkJCXByaW50aygiIHRpbWVkIG91dCFcbiIpOworCQkJcHJpbnRrKEtFUk5fQ09OVCAiIHRpbWVkIG91dCFcbiIpOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtMTIxNSw3ICsxMjE1LDcgQEAKIAkJaWYgKHRpbWVvdXQgPiBDT05GX1RJTUVPVVRfTUFYKQogCQkJdGltZW91dCA9IENPTkZfVElNRU9VVF9NQVg7CiAKLQkJcHJpbnRrKCIuIik7CisJCXByaW50ayhLRVJOX0NPTlQgIi4iKTsKIAl9CiAKICNpZmRlZiBJUENPTkZJR19CT09UUApAQCAtMTIzNiw3ICsxMjM2LDcgQEAKIAkJKChpY19nb3RfcmVwbHkgJiBJQ19SQVJQKSA/ICJSQVJQIgogCQkgOiAoaWNfcHJvdG9fZW5hYmxlZCAmIElDX1VTRV9ESENQKSA/ICJESENQIiA6ICJCT09UUCIpLAogCQkmaWNfc2VydmFkZHIpOwotCXByaW50aygibXkgYWRkcmVzcyBpcyAlcEk0XG4iLCAmaWNfbXlhZGRyKTsKKwlwcmludGsoS0VSTl9DT05UICJteSBhZGRyZXNzIGlzICVwSTRcbiIsICZpY19teWFkZHIpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNDY4LDE5ICsxNDY4LDE5IEBACiAJLyoKIAkgKiBDbHVlIGluIHRoZSBvcGVyYXRvci4KIAkgKi8KLQlwcmludGsoIklQLUNvbmZpZzogQ29tcGxldGU6Iik7Ci0JcHJpbnRrKCJcbiAgICAgZGV2aWNlPSVzIiwgaWNfZGV2LT5uYW1lKTsKLQlwcmludGsoIiwgYWRkcj0lcEk0IiwgJmljX215YWRkcik7Ci0JcHJpbnRrKCIsIG1hc2s9JXBJNCIsICZpY19uZXRtYXNrKTsKLQlwcmludGsoIiwgZ3c9JXBJNCIsICZpY19nYXRld2F5KTsKLQlwcmludGsoIixcbiAgICAgaG9zdD0lcywgZG9tYWluPSVzLCBuaXMtZG9tYWluPSVzIiwKKwlwcmludGsoIklQLUNvbmZpZzogQ29tcGxldGU6XG4iKTsKKwlwcmludGsoIiAgICAgZGV2aWNlPSVzIiwgaWNfZGV2LT5uYW1lKTsKKwlwcmludGsoS0VSTl9DT05UICIsIGFkZHI9JXBJNCIsICZpY19teWFkZHIpOworCXByaW50ayhLRVJOX0NPTlQgIiwgbWFzaz0lcEk0IiwgJmljX25ldG1hc2spOworCXByaW50ayhLRVJOX0NPTlQgIiwgZ3c9JXBJNCIsICZpY19nYXRld2F5KTsKKwlwcmludGsoS0VSTl9DT05UICIsXG4gICAgIGhvc3Q9JXMsIGRvbWFpbj0lcywgbmlzLWRvbWFpbj0lcyIsCiAJICAgICAgIHV0c25hbWUoKS0+bm9kZW5hbWUsIGljX2RvbWFpbiwgdXRzbmFtZSgpLT5kb21haW5uYW1lKTsKLQlwcmludGsoIixcbiAgICAgYm9vdHNlcnZlcj0lcEk0IiwgJmljX3NlcnZhZGRyKTsKLQlwcmludGsoIiwgcm9vdHNlcnZlcj0lcEk0IiwgJnJvb3Rfc2VydmVyX2FkZHIpOwotCXByaW50aygiLCByb290cGF0aD0lcyIsIHJvb3Rfc2VydmVyX3BhdGgpOworCXByaW50ayhLRVJOX0NPTlQgIixcbiAgICAgYm9vdHNlcnZlcj0lcEk0IiwgJmljX3NlcnZhZGRyKTsKKwlwcmludGsoS0VSTl9DT05UICIsIHJvb3RzZXJ2ZXI9JXBJNCIsICZyb290X3NlcnZlcl9hZGRyKTsKKwlwcmludGsoS0VSTl9DT05UICIsIHJvb3RwYXRoPSVzIiwgcm9vdF9zZXJ2ZXJfcGF0aCk7CiAJaWYgKGljX2Rldl9tdHUpCi0JCXByaW50aygiLCBtdHU9JWQiLCBpY19kZXZfbXR1KTsKLQlwcmludGsoIlxuIik7CisJCXByaW50ayhLRVJOX0NPTlQgIiwgbXR1PSVkIiwgaWNfZGV2X210dSk7CisJcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKICNlbmRpZiAvKiAhU0lMRU5UICovCiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwaXAuYyBiL25ldC9pcHY0L2lwaXAuYwppbmRleCBjZDMwMGFhLi45ODhmNTJmIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcGlwLmMKKysrIGIvbmV0L2lwdjQvaXBpcC5jCkBAIC00NjMsMTMgKzQ2Myw5IEBACiAJewogCQlzdHJ1Y3QgZmxvd2kgZmwgPSB7CiAJCQkub2lmID0gdHVubmVsLT5wYXJtcy5saW5rLAotCQkJLm5sX3UgPSB7Ci0JCQkJLmlwNF91ID0gewotCQkJCQkuZGFkZHIgPSBkc3QsCi0JCQkJCS5zYWRkciA9IHRpcGgtPnNhZGRyLAotCQkJCQkudG9zID0gUlRfVE9TKHRvcykKLQkJCQl9Ci0JCQl9LAorCQkJLmZsNF9kc3QgPSBkc3QsCisJCQkuZmw0X3NyYz0gdGlwaC0+c2FkZHIsCisJCQkuZmw0X3RvcyA9IFJUX1RPUyh0b3MpLAogCQkJLnByb3RvID0gSVBQUk9UT19JUElQCiAJCX07CiAKQEAgLTU4OSwxMyArNTg1LDkgQEAKIAlpZiAoaXBoLT5kYWRkcikgewogCQlzdHJ1Y3QgZmxvd2kgZmwgPSB7CiAJCQkub2lmID0gdHVubmVsLT5wYXJtcy5saW5rLAotCQkJLm5sX3UgPSB7Ci0JCQkJLmlwNF91ID0gewotCQkJCQkuZGFkZHIgPSBpcGgtPmRhZGRyLAotCQkJCQkuc2FkZHIgPSBpcGgtPnNhZGRyLAotCQkJCQkudG9zID0gUlRfVE9TKGlwaC0+dG9zKQotCQkJCX0KLQkJCX0sCisJCQkuZmw0X2RzdCA9IGlwaC0+ZGFkZHIsCisJCQkuZmw0X3NyYyA9IGlwaC0+c2FkZHIsCisJCQkuZmw0X3RvcyA9IFJUX1RPUyhpcGgtPnRvcyksCiAJCQkucHJvdG8gPSBJUFBST1RPX0lQSVAKIAkJfTsKIAkJc3RydWN0IHJ0YWJsZSAqcnQ7CkBAIC05MjEsMyArOTEzLDQgQEAKIG1vZHVsZV9pbml0KGlwaXBfaW5pdCk7CiBtb2R1bGVfZXhpdChpcGlwX2ZpbmkpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJ0dW5sMCIpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBtci5jIGIvbmV0L2lwdjQvaXBtci5jCmluZGV4IDg2ZGQ1NjkuLjNmM2E5YWYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwbXIuYworKysgYi9uZXQvaXB2NC9pcG1yLmMKQEAgLTE1MzcsMTMgKzE1MzcsOSBAQAogCWlmICh2aWYtPmZsYWdzICYgVklGRl9UVU5ORUwpIHsKIAkJc3RydWN0IGZsb3dpIGZsID0gewogCQkJLm9pZiA9IHZpZi0+bGluaywKLQkJCS5ubF91ID0gewotCQkJCS5pcDRfdSA9IHsKLQkJCQkJLmRhZGRyID0gdmlmLT5yZW1vdGUsCi0JCQkJCS5zYWRkciA9IHZpZi0+bG9jYWwsCi0JCQkJCS50b3MgPSBSVF9UT1MoaXBoLT50b3MpCi0JCQkJfQotCQkJfSwKKwkJCS5mbDRfZHN0ID0gdmlmLT5yZW1vdGUsCisJCQkuZmw0X3NyYyA9IHZpZi0+bG9jYWwsCisJCQkuZmw0X3RvcyA9IFJUX1RPUyhpcGgtPnRvcyksCiAJCQkucHJvdG8gPSBJUFBST1RPX0lQSVAKIAkJfTsKIApAQCAtMTU1MywxMiArMTU0OSw4IEBACiAJfSBlbHNlIHsKIAkJc3RydWN0IGZsb3dpIGZsID0gewogCQkJLm9pZiA9IHZpZi0+bGluaywKLQkJCS5ubF91ID0gewotCQkJCS5pcDRfdSA9IHsKLQkJCQkJLmRhZGRyID0gaXBoLT5kYWRkciwKLQkJCQkJLnRvcyA9IFJUX1RPUyhpcGgtPnRvcykKLQkJCQl9Ci0JCQl9LAorCQkJLmZsNF9kc3QgPSBpcGgtPmRhZGRyLAorCQkJLmZsNF90b3MgPSBSVF9UT1MoaXBoLT50b3MpLAogCQkJLnByb3RvID0gSVBQUk9UT19JUElQCiAJCX07CiAKQEAgLTE2NTQsNyArMTY0Niw3IEBACiAJaWYgKG1ydC0+dmlmX3RhYmxlW3ZpZl0uZGV2ICE9IHNrYi0+ZGV2KSB7CiAJCWludCB0cnVlX3ZpZmk7CiAKLQkJaWYgKHNrYl9ydGFibGUoc2tiKS0+ZmwuaWlmID09IDApIHsKKwkJaWYgKHJ0X2lzX291dHB1dF9yb3V0ZShza2JfcnRhYmxlKHNrYikpKSB7CiAJCQkvKiBJdCBpcyBvdXIgb3duIHBhY2tldCwgbG9vcGVkIGJhY2suCiAJCQkgKiBWZXJ5IGNvbXBsaWNhdGVkIHNpdHVhdGlvbi4uLgogCQkJICoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyLmMKaW5kZXggZDg4YTQ2Yy4uOTk0YTFmMiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyLmMKQEAgLTMxLDEwICszMSwxMCBAQAogCSAqIHBhY2tldHMgd2l0aCBmb3JlaWduIHNhZGRyIHRvIGFwcGVhciBvbiB0aGUgTkZfSU5FVF9MT0NBTF9PVVQgaG9vay4KIAkgKi8KIAlpZiAoYWRkcl90eXBlID09IFJUTl9MT0NBTCkgewotCQlmbC5ubF91LmlwNF91LmRhZGRyID0gaXBoLT5kYWRkcjsKKwkJZmwuZmw0X2RzdCA9IGlwaC0+ZGFkZHI7CiAJCWlmICh0eXBlID09IFJUTl9MT0NBTCkKLQkJCWZsLm5sX3UuaXA0X3Uuc2FkZHIgPSBpcGgtPnNhZGRyOwotCQlmbC5ubF91LmlwNF91LnRvcyA9IFJUX1RPUyhpcGgtPnRvcyk7CisJCQlmbC5mbDRfc3JjID0gaXBoLT5zYWRkcjsKKwkJZmwuZmw0X3RvcyA9IFJUX1RPUyhpcGgtPnRvcyk7CiAJCWZsLm9pZiA9IHNrYi0+c2sgPyBza2ItPnNrLT5za19ib3VuZF9kZXZfaWYgOiAwOwogCQlmbC5tYXJrID0gc2tiLT5tYXJrOwogCQlmbC5mbGFncyA9IHNrYi0+c2sgPyBpbmV0X3NrX2Zsb3dpX2ZsYWdzKHNrYi0+c2spIDogMDsKQEAgLTQ3LDcgKzQ3LDcgQEAKIAl9IGVsc2UgewogCQkvKiBub24tbG9jYWwgc3JjLCBmaW5kIHZhbGlkIGlpZiB0byBzYXRpc2Z5CiAJCSAqIHJwLWZpbHRlciB3aGVuIGNhbGxpbmcgaXBfcm91dGVfaW5wdXQuICovCi0JCWZsLm5sX3UuaXA0X3UuZGFkZHIgPSBpcGgtPnNhZGRyOworCQlmbC5mbDRfZHN0ID0gaXBoLT5zYWRkcjsKIAkJaWYgKGlwX3JvdXRlX291dHB1dF9rZXkobmV0LCAmcnQsICZmbCkgIT0gMCkKIAkJCXJldHVybiAtMTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlCmluZGV4IDQ4MTExNTkuLjE5ZWI1OWQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZQorKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGUKQEAgLTMsMTUgKzMsMTUgQEAKICMKIAogIyBvYmplY3RzIGZvciBsMyBpbmRlcGVuZGVudCBjb25udHJhY2sKLW5mX2Nvbm50cmFja19pcHY0LW9ianMgIDo9ICBuZl9jb25udHJhY2tfbDNwcm90b19pcHY0Lm8gbmZfY29ubnRyYWNrX3Byb3RvX2ljbXAubworbmZfY29ubnRyYWNrX2lwdjQteQk6PSAgbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NC5vIG5mX2Nvbm50cmFja19wcm90b19pY21wLm8KIGlmZXEgKCQoQ09ORklHX05GX0NPTk5UUkFDS19QUk9DX0NPTVBBVCkseSkKIGlmZXEgKCQoQ09ORklHX1BST0NfRlMpLHkpCiBuZl9jb25udHJhY2tfaXB2NC1vYmpzCSs9IG5mX2Nvbm50cmFja19sM3Byb3RvX2lwdjRfY29tcGF0Lm8KIGVuZGlmCiBlbmRpZgogCi1uZl9uYXQtb2JqcwkJOj0gbmZfbmF0X2NvcmUubyBuZl9uYXRfaGVscGVyLm8gbmZfbmF0X3Byb3RvX3Vua25vd24ubyBuZl9uYXRfcHJvdG9fY29tbW9uLm8gbmZfbmF0X3Byb3RvX3RjcC5vIG5mX25hdF9wcm90b191ZHAubyBuZl9uYXRfcHJvdG9faWNtcC5vCi1pcHRhYmxlX25hdC1vYmpzCTo9IG5mX25hdF9ydWxlLm8gbmZfbmF0X3N0YW5kYWxvbmUubworbmZfbmF0LXkJCTo9IG5mX25hdF9jb3JlLm8gbmZfbmF0X2hlbHBlci5vIG5mX25hdF9wcm90b191bmtub3duLm8gbmZfbmF0X3Byb3RvX2NvbW1vbi5vIG5mX25hdF9wcm90b190Y3AubyBuZl9uYXRfcHJvdG9fdWRwLm8gbmZfbmF0X3Byb3RvX2ljbXAubworaXB0YWJsZV9uYXQteQk6PSBuZl9uYXRfcnVsZS5vIG5mX25hdF9zdGFuZGFsb25lLm8KIAogIyBjb25uZWN0aW9uIHRyYWNraW5nCiBvYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX0lQVjQpICs9IG5mX2Nvbm50cmFja19pcHY0Lm8KZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfUkVKRUNULmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1JFSkVDVC5jCmluZGV4IDQzZWVjODAuLjFmZjc5ZTUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfUkVKRUNULmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9SRUpFQ1QuYwpAQCAtMTE2LDcgKzExNiw3IEBACiAJaWYgKGlwX3JvdXRlX21lX2hhcmRlcihuc2tiLCBhZGRyX3R5cGUpKQogCQlnb3RvIGZyZWVfbnNrYjsKIAotCW5pcGgtPnR0bAk9IGRzdF9tZXRyaWMoc2tiX2RzdChuc2tiKSwgUlRBWF9IT1BMSU1JVCk7CisJbmlwaC0+dHRsCT0gaXA0X2RzdF9ob3BsaW1pdChza2JfZHN0KG5za2IpKTsKIAogCS8qICJOZXZlciBoYXBwZW5zIiAqLwogCWlmIChuc2tiLT5sZW4gPiBkc3RfbXR1KHNrYl9kc3QobnNrYikpKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjRfY29tcGF0LmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NF9jb21wYXQuYwppbmRleCAzN2Y4YWRiLi42M2Y2MGZjIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NF9jb21wYXQuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NF9jb21wYXQuYwpAQCAtOTcsNyArOTcsNyBAQAogCiAJcmV0ID0gc2VjdXJpdHlfc2VjaWRfdG9fc2VjY3R4KGN0LT5zZWNtYXJrLCAmc2VjY3R4LCAmbGVuKTsKIAlpZiAocmV0KQotCQlyZXR1cm4gcmV0OworCQlyZXR1cm4gMDsKIAogCXJldCA9IHNlcV9wcmludGYocywgInNlY2N0eD0lcyAiLCBzZWNjdHgpOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9yYXcuYyBiL25ldC9pcHY0L3Jhdy5jCmluZGV4IDFmODVlZjIuLmEzZDVhYjcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3Jhdy5jCisrKyBiL25ldC9pcHY0L3Jhdy5jCkBAIC01NDksMTAgKzU0OSw5IEBACiAJewogCQlzdHJ1Y3QgZmxvd2kgZmwgPSB7IC5vaWYgPSBpcGMub2lmLAogCQkJCSAgICAubWFyayA9IHNrLT5za19tYXJrLAotCQkJCSAgICAubmxfdSA9IHsgLmlwNF91ID0KLQkJCQkJICAgICAgeyAuZGFkZHIgPSBkYWRkciwKLQkJCQkJCS5zYWRkciA9IHNhZGRyLAotCQkJCQkJLnRvcyA9IHRvcyB9IH0sCisJCQkJICAgIC5mbDRfZHN0ID0gZGFkZHIsCisJCQkJICAgIC5mbDRfc3JjID0gc2FkZHIsCisJCQkJICAgIC5mbDRfdG9zID0gdG9zLAogCQkJCSAgICAucHJvdG8gPSBpbmV0LT5oZHJpbmNsID8gSVBQUk9UT19SQVcgOgogCQkJCQkJCSAgICAgc2stPnNrX3Byb3RvY29sLAogCQkJCSAgfTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3JvdXRlLmMgYi9uZXQvaXB2NC9yb3V0ZS5jCmluZGV4IDkzYmZkOTUuLjM1MWRjNGUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3JvdXRlLmMKKysrIGIvbmV0L2lwdjQvcm91dGUuYwpAQCAtMTM5LDIwICsxMzksMjYgQEAKICAqLwogCiBzdGF0aWMgc3RydWN0IGRzdF9lbnRyeSAqaXB2NF9kc3RfY2hlY2soc3RydWN0IGRzdF9lbnRyeSAqZHN0LCB1MzIgY29va2llKTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQJIGlwdjRfZGVmYXVsdF9hZHZtc3MoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQJIGlwdjRfZGVmYXVsdF9tdHUoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KTsKIHN0YXRpYyB2b2lkCQkgaXB2NF9kc3RfZGVzdHJveShzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpOwotc3RhdGljIHZvaWQJCSBpcHY0X2RzdF9pZmRvd24oc3RydWN0IGRzdF9lbnRyeSAqZHN0LAotCQkJCQkgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGhvdyk7CiBzdGF0aWMgc3RydWN0IGRzdF9lbnRyeSAqaXB2NF9uZWdhdGl2ZV9hZHZpY2Uoc3RydWN0IGRzdF9lbnRyeSAqZHN0KTsKIHN0YXRpYyB2b2lkCQkgaXB2NF9saW5rX2ZhaWx1cmUoc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBzdGF0aWMgdm9pZAkJIGlwX3J0X3VwZGF0ZV9wbXR1KHN0cnVjdCBkc3RfZW50cnkgKmRzdCwgdTMyIG10dSk7CiBzdGF0aWMgaW50IHJ0X2dhcmJhZ2VfY29sbGVjdChzdHJ1Y3QgZHN0X29wcyAqb3BzKTsKIAorc3RhdGljIHZvaWQgaXB2NF9kc3RfaWZkb3duKHN0cnVjdCBkc3RfZW50cnkgKmRzdCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICBpbnQgaG93KQoreworfQogCiBzdGF0aWMgc3RydWN0IGRzdF9vcHMgaXB2NF9kc3Rfb3BzID0gewogCS5mYW1pbHkgPQkJQUZfSU5FVCwKIAkucHJvdG9jb2wgPQkJY3B1X3RvX2JlMTYoRVRIX1BfSVApLAogCS5nYyA9CQkJcnRfZ2FyYmFnZV9jb2xsZWN0LAogCS5jaGVjayA9CQlpcHY0X2RzdF9jaGVjaywKKwkuZGVmYXVsdF9hZHZtc3MgPQlpcHY0X2RlZmF1bHRfYWR2bXNzLAorCS5kZWZhdWx0X210dSA9CQlpcHY0X2RlZmF1bHRfbXR1LAogCS5kZXN0cm95ID0JCWlwdjRfZHN0X2Rlc3Ryb3ksCiAJLmlmZG93biA9CQlpcHY0X2RzdF9pZmRvd24sCiAJLm5lZ2F0aXZlX2FkdmljZSA9CWlwdjRfbmVnYXRpdmVfYWR2aWNlLApAQCAtMzgxLDggKzM4Nyw3IEBACiAJCQkoX19mb3JjZSB1MzIpci0+cnRfZ2F0ZXdheSwKIAkJCXItPnJ0X2ZsYWdzLCBhdG9taWNfcmVhZCgmci0+ZHN0Ll9fcmVmY250KSwKIAkJCXItPmRzdC5fX3VzZSwgMCwgKF9fZm9yY2UgdTMyKXItPnJ0X3NyYywKLQkJCShkc3RfbWV0cmljKCZyLT5kc3QsIFJUQVhfQURWTVNTKSA/Ci0JCQkgICAgIChpbnQpZHN0X21ldHJpYygmci0+ZHN0LCBSVEFYX0FEVk1TUykgKyA0MCA6IDApLAorCQkJZHN0X21ldHJpY19hZHZtc3MoJnItPmRzdCkgKyA0MCwKIAkJCWRzdF9tZXRyaWMoJnItPmRzdCwgUlRBWF9XSU5ET1cpLAogCQkJKGludCkoKGRzdF9tZXRyaWMoJnItPmRzdCwgUlRBWF9SVFQpID4+IDMpICsKIAkJCSAgICAgIGRzdF9tZXRyaWMoJnItPmRzdCwgUlRBWF9SVFRWQVIpKSwKQEAgLTYyMSw3ICs2MjYsNyBAQAogCS8qIEtpbGwgYnJvYWRjYXN0L211bHRpY2FzdCBlbnRyaWVzIHZlcnkgYWdncmVzaXZlbHksIGlmIHRoZXkKIAkgICBjb2xsaWRlIGluIGhhc2ggdGFibGUgd2l0aCBtb3JlIHVzZWZ1bCBlbnRyaWVzICovCiAJcmV0dXJuIChydGgtPnJ0X2ZsYWdzICYgKFJUQ0ZfQlJPQURDQVNUIHwgUlRDRl9NVUxUSUNBU1QpKSAmJgotCQlydGgtPmZsLmlpZiAmJiBydGgtPmRzdC5ydF9uZXh0OworCQlydF9pc19pbnB1dF9yb3V0ZShydGgpICYmIHJ0aC0+ZHN0LnJ0X25leHQ7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IHJ0X3ZhbHVhYmxlKHN0cnVjdCBydGFibGUgKnJ0aCkKQEAgLTY2Niw3ICs2NzEsNyBAQAogCWlmIChydF92YWx1YWJsZShydCkpCiAJCXNjb3JlIHw9ICgxPDwzMSk7CiAKLQlpZiAoIXJ0LT5mbC5paWYgfHwKKwlpZiAocnRfaXNfb3V0cHV0X3JvdXRlKHJ0KSB8fAogCSAgICAhKHJ0LT5ydF9mbGFncyAmIChSVENGX0JST0FEQ0FTVHxSVENGX01VTFRJQ0FTVHxSVENGX0xPQ0FMKSkpCiAJCXNjb3JlIHw9ICgxPDwzMCk7CiAKQEAgLTY4MiwxNyArNjg3LDE3IEBACiBzdGF0aWMgaW5saW5lIGJvb2wgY29tcGFyZV9oYXNoX2lucHV0cyhjb25zdCBzdHJ1Y3QgZmxvd2kgKmZsMSwKIAkJCQkJY29uc3Qgc3RydWN0IGZsb3dpICpmbDIpCiB7Ci0JcmV0dXJuICgoKChfX2ZvcmNlIHUzMilmbDEtPm5sX3UuaXA0X3UuZGFkZHIgXiAoX19mb3JjZSB1MzIpZmwyLT5ubF91LmlwNF91LmRhZGRyKSB8Ci0JCSgoX19mb3JjZSB1MzIpZmwxLT5ubF91LmlwNF91LnNhZGRyIF4gKF9fZm9yY2UgdTMyKWZsMi0+bmxfdS5pcDRfdS5zYWRkcikgfAorCXJldHVybiAoKCgoX19mb3JjZSB1MzIpZmwxLT5mbDRfZHN0IF4gKF9fZm9yY2UgdTMyKWZsMi0+Zmw0X2RzdCkgfAorCQkoKF9fZm9yY2UgdTMyKWZsMS0+Zmw0X3NyYyBeIChfX2ZvcmNlIHUzMilmbDItPmZsNF9zcmMpIHwKIAkJKGZsMS0+aWlmIF4gZmwyLT5paWYpKSA9PSAwKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgY29tcGFyZV9rZXlzKHN0cnVjdCBmbG93aSAqZmwxLCBzdHJ1Y3QgZmxvd2kgKmZsMikKIHsKLQlyZXR1cm4gKCgoX19mb3JjZSB1MzIpZmwxLT5ubF91LmlwNF91LmRhZGRyIF4gKF9fZm9yY2UgdTMyKWZsMi0+bmxfdS5pcDRfdS5kYWRkcikgfAotCQkoKF9fZm9yY2UgdTMyKWZsMS0+bmxfdS5pcDRfdS5zYWRkciBeIChfX2ZvcmNlIHUzMilmbDItPm5sX3UuaXA0X3Uuc2FkZHIpIHwKKwlyZXR1cm4gKCgoX19mb3JjZSB1MzIpZmwxLT5mbDRfZHN0IF4gKF9fZm9yY2UgdTMyKWZsMi0+Zmw0X2RzdCkgfAorCQkoKF9fZm9yY2UgdTMyKWZsMS0+Zmw0X3NyYyBeIChfX2ZvcmNlIHUzMilmbDItPmZsNF9zcmMpIHwKIAkJKGZsMS0+bWFyayBeIGZsMi0+bWFyaykgfAotCQkoKih1MTYgKikmZmwxLT5ubF91LmlwNF91LnRvcyBeICoodTE2ICopJmZsMi0+bmxfdS5pcDRfdS50b3MpIHwKKwkJKCoodTE2ICopJmZsMS0+Zmw0X3RvcyBeICoodTE2ICopJmZsMi0+Zmw0X3RvcykgfAogCQkoZmwxLT5vaWYgXiBmbDItPm9pZikgfAogCQkoZmwxLT5paWYgXiBmbDItPmlpZikpID09IDA7CiB9CkBAIC03MTIsMTMgKzcxNywxNSBAQAogICogQ2FuIGJlIGNhbGxlZCBieSBhIHNvZnRpcnEgb3IgYSBwcm9jZXNzLgogICogSW4gdGhlIGxhdGVyIGNhc2UsIHdlIHdhbnQgdG8gYmUgcmVzY2hlZHVsZSBpZiBuZWNlc3NhcnkKICAqLwotc3RhdGljIHZvaWQgcnRfZG9fZmx1c2goaW50IHByb2Nlc3NfY29udGV4dCkKK3N0YXRpYyB2b2lkIHJ0X2RvX2ZsdXNoKHN0cnVjdCBuZXQgKm5ldCwgaW50IHByb2Nlc3NfY29udGV4dCkKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIAlzdHJ1Y3QgcnRhYmxlICpydGgsICpuZXh0OwotCXN0cnVjdCBydGFibGUgKiB0YWlsOwogCiAJZm9yIChpID0gMDsgaSA8PSBydF9oYXNoX21hc2s7IGkrKykgeworCQlzdHJ1Y3QgcnRhYmxlIF9fcmN1ICoqcHByZXY7CisJCXN0cnVjdCBydGFibGUgKmxpc3Q7CisKIAkJaWYgKHByb2Nlc3NfY29udGV4dCAmJiBuZWVkX3Jlc2NoZWQoKSkKIAkJCWNvbmRfcmVzY2hlZCgpOwogCQlydGggPSByY3VfZGVyZWZlcmVuY2VfcmF3KHJ0X2hhc2hfdGFibGVbaV0uY2hhaW4pOwpAQCAtNzI2LDUwICs3MzMsMzIgQEAKIAkJCWNvbnRpbnVlOwogCiAJCXNwaW5fbG9ja19iaChydF9oYXNoX2xvY2tfYWRkcihpKSk7Ci0jaWZkZWYgQ09ORklHX05FVF9OUwotCQl7Ci0JCXN0cnVjdCBydGFibGUgX19yY3UgKipwcmV2OwotCQlzdHJ1Y3QgcnRhYmxlICpwOwogCi0JCXJ0aCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQocnRfaGFzaF90YWJsZVtpXS5jaGFpbiwKKwkJbGlzdCA9IE5VTEw7CisJCXBwcmV2ID0gJnJ0X2hhc2hfdGFibGVbaV0uY2hhaW47CisJCXJ0aCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoKnBwcmV2LAogCQkJbG9ja2RlcF9pc19oZWxkKHJ0X2hhc2hfbG9ja19hZGRyKGkpKSk7CiAKLQkJLyogZGVmZXIgcmVsZWFzaW5nIHRoZSBoZWFkIG9mIHRoZSBsaXN0IGFmdGVyIHNwaW5fdW5sb2NrICovCi0JCWZvciAodGFpbCA9IHJ0aDsgdGFpbDsKLQkJICAgICB0YWlsID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh0YWlsLT5kc3QucnRfbmV4dCwKLQkJCQlsb2NrZGVwX2lzX2hlbGQocnRfaGFzaF9sb2NrX2FkZHIoaSkpKSkKLQkJCWlmICghcnRfaXNfZXhwaXJlZCh0YWlsKSkKLQkJCQlicmVhazsKLQkJaWYgKHJ0aCAhPSB0YWlsKQotCQkJcnRfaGFzaF90YWJsZVtpXS5jaGFpbiA9IHRhaWw7CisJCXdoaWxlIChydGgpIHsKKwkJCW5leHQgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHJ0aC0+ZHN0LnJ0X25leHQsCisJCQkJbG9ja2RlcF9pc19oZWxkKHJ0X2hhc2hfbG9ja19hZGRyKGkpKSk7CiAKLQkJLyogY2FsbCBydF9mcmVlIG9uIGVudHJpZXMgYWZ0ZXIgdGhlIHRhaWwgcmVxdWlyaW5nIGZsdXNoICovCi0JCXByZXYgPSAmcnRfaGFzaF90YWJsZVtpXS5jaGFpbjsKLQkJZm9yIChwID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCgqcHJldiwKLQkJCQlsb2NrZGVwX2lzX2hlbGQocnRfaGFzaF9sb2NrX2FkZHIoaSkpKTsKLQkJICAgICBwICE9IE5VTEw7Ci0JCSAgICAgcCA9IG5leHQpIHsKLQkJCW5leHQgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHAtPmRzdC5ydF9uZXh0LAotCQkJCWxvY2tkZXBfaXNfaGVsZChydF9oYXNoX2xvY2tfYWRkcihpKSkpOwotCQkJaWYgKCFydF9pc19leHBpcmVkKHApKSB7Ci0JCQkJcHJldiA9ICZwLT5kc3QucnRfbmV4dDsKKwkJCWlmICghbmV0IHx8CisJCQkgICAgbmV0X2VxKGRldl9uZXQocnRoLT5kc3QuZGV2KSwgbmV0KSkgeworCQkJCXJjdV9hc3NpZ25fcG9pbnRlcigqcHByZXYsIG5leHQpOworCQkJCXJjdV9hc3NpZ25fcG9pbnRlcihydGgtPmRzdC5ydF9uZXh0LCBsaXN0KTsKKwkJCQlsaXN0ID0gcnRoOwogCQkJfSBlbHNlIHsKLQkJCQkqcHJldiA9IG5leHQ7Ci0JCQkJcnRfZnJlZShwKTsKKwkJCQlwcHJldiA9ICZydGgtPmRzdC5ydF9uZXh0OwogCQkJfQorCQkJcnRoID0gbmV4dDsKIAkJfQotCQl9Ci0jZWxzZQotCQlydGggPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHJ0X2hhc2hfdGFibGVbaV0uY2hhaW4sCi0JCQlsb2NrZGVwX2lzX2hlbGQocnRfaGFzaF9sb2NrX2FkZHIoaSkpKTsKLQkJcmN1X2Fzc2lnbl9wb2ludGVyKHJ0X2hhc2hfdGFibGVbaV0uY2hhaW4sIE5VTEwpOwotCQl0YWlsID0gTlVMTDsKLSNlbmRpZgorCiAJCXNwaW5fdW5sb2NrX2JoKHJ0X2hhc2hfbG9ja19hZGRyKGkpKTsKIAotCQlmb3IgKDsgcnRoICE9IHRhaWw7IHJ0aCA9IG5leHQpIHsKLQkJCW5leHQgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHJ0aC0+ZHN0LnJ0X25leHQsIDEpOwotCQkJcnRfZnJlZShydGgpOworCQlmb3IgKDsgbGlzdDsgbGlzdCA9IG5leHQpIHsKKwkJCW5leHQgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGxpc3QtPmRzdC5ydF9uZXh0LCAxKTsKKwkJCXJ0X2ZyZWUobGlzdCk7CiAJCX0KIAl9CiB9CkBAIC05MTcsMTMgKzkwNiwxMyBAQAogewogCXJ0X2NhY2hlX2ludmFsaWRhdGUobmV0KTsKIAlpZiAoZGVsYXkgPj0gMCkKLQkJcnRfZG9fZmx1c2goIWluX3NvZnRpcnEoKSk7CisJCXJ0X2RvX2ZsdXNoKG5ldCwgIWluX3NvZnRpcnEoKSk7CiB9CiAKIC8qIEZsdXNoIHByZXZpb3VzIGNhY2hlIGludmFsaWRhdGVkIGVudHJpZXMgZnJvbSB0aGUgY2FjaGUgKi8KLXZvaWQgcnRfY2FjaGVfZmx1c2hfYmF0Y2godm9pZCkKK3ZvaWQgcnRfY2FjaGVfZmx1c2hfYmF0Y2goc3RydWN0IG5ldCAqbmV0KQogewotCXJ0X2RvX2ZsdXNoKCFpbl9zb2Z0aXJxKCkpOworCXJ0X2RvX2ZsdXNoKG5ldCwgIWluX3NvZnRpcnEoKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHJ0X2VtZXJnZW5jeV9oYXNoX3JlYnVpbGQoc3RydWN0IG5ldCAqbmV0KQpAQCAtMTEyNCw3ICsxMTEzLDcgQEAKIAkJICovCiAKIAkJcnQtPmRzdC5mbGFncyB8PSBEU1RfTk9DQUNIRTsKLQkJaWYgKHJ0LT5ydF90eXBlID09IFJUTl9VTklDQVNUIHx8IHJ0LT5mbC5paWYgPT0gMCkgeworCQlpZiAocnQtPnJ0X3R5cGUgPT0gUlROX1VOSUNBU1QgfHwgcnRfaXNfb3V0cHV0X3JvdXRlKHJ0KSkgewogCQkJaW50IGVyciA9IGFycF9iaW5kX25laWdoYm91cigmcnQtPmRzdCk7CiAJCQlpZiAoZXJyKSB7CiAJCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKQEAgLTEyMjIsNyArMTIxMSw3IEBACiAJLyogVHJ5IHRvIGJpbmQgcm91dGUgdG8gYXJwIG9ubHkgaWYgaXQgaXMgb3V0cHV0CiAJICAgcm91dGUgb3IgdW5pY2FzdCBmb3J3YXJkaW5nIHBhdGguCiAJICovCi0JaWYgKHJ0LT5ydF90eXBlID09IFJUTl9VTklDQVNUIHx8IHJ0LT5mbC5paWYgPT0gMCkgeworCWlmIChydC0+cnRfdHlwZSA9PSBSVE5fVU5JQ0FTVCB8fCBydF9pc19vdXRwdXRfcm91dGUocnQpKSB7CiAJCWludCBlcnIgPSBhcnBfYmluZF9uZWlnaGJvdXIoJnJ0LT5kc3QpOwogCQlpZiAoZXJyKSB7CiAJCQlzcGluX3VubG9ja19iaChydF9oYXNoX2xvY2tfYWRkcihoYXNoKSk7CkBAIC0xMjg3LDcgKzEyNzYsNyBAQAogewogCXN0cnVjdCBpbmV0X3BlZXIgKnBlZXI7CiAKLQlwZWVyID0gaW5ldF9nZXRwZWVyKHJ0LT5ydF9kc3QsIGNyZWF0ZSk7CisJcGVlciA9IGluZXRfZ2V0cGVlcl92NChydC0+cnRfZHN0LCBjcmVhdGUpOwogCiAJaWYgKHBlZXIgJiYgY21weGNoZygmcnQtPnBlZXIsIE5VTEwsIHBlZXIpICE9IE5VTEwpCiAJCWluZXRfcHV0cGVlcihwZWVyKTsKQEAgLTE0MDQsNyArMTM5Myw3IEBACiAJCQkJaWYgKHJ0aC0+ZmwuZmw0X2RzdCAhPSBkYWRkciB8fAogCQkJCSAgICBydGgtPmZsLmZsNF9zcmMgIT0gc2tleXNbaV0gfHwKIAkJCQkgICAgcnRoLT5mbC5vaWYgIT0gaWtleXNba10gfHwKLQkJCQkgICAgcnRoLT5mbC5paWYgIT0gMCB8fAorCQkJCSAgICBydF9pc19pbnB1dF9yb3V0ZShydGgpIHx8CiAJCQkJICAgIHJ0X2lzX2V4cGlyZWQocnRoKSB8fAogCQkJCSAgICAhbmV0X2VxKGRldl9uZXQocnRoLT5kc3QuZGV2KSwgbmV0KSkgewogCQkJCQlydGhwID0gJnJ0aC0+ZHN0LnJ0X25leHQ7CkBAIC0xNDMzLDggKzE0MjIsNiBAQAogCQkJCXJ0LT5kc3QuY2hpbGQJCT0gTlVMTDsKIAkJCQlpZiAocnQtPmRzdC5kZXYpCiAJCQkJCWRldl9ob2xkKHJ0LT5kc3QuZGV2KTsKLQkJCQlpZiAocnQtPmlkZXYpCi0JCQkJCWluX2Rldl9ob2xkKHJ0LT5pZGV2KTsKIAkJCQlydC0+ZHN0Lm9ic29sZXRlCT0gLTE7CiAJCQkJcnQtPmRzdC5sYXN0dXNlCT0gamlmZmllczsKIAkJCQlydC0+ZHN0LnBhdGgJCT0gJnJ0LT5kc3Q7CkBAIC0xNjY2LDcgKzE2NTMsNyBAQAogCQkJCSAgICBydGgtPnJ0X2RzdCAhPSBkYWRkciB8fAogCQkJCSAgICBydGgtPnJ0X3NyYyAhPSBpcGgtPnNhZGRyIHx8CiAJCQkJICAgIHJ0aC0+Zmwub2lmICE9IGlrZXlzW2tdIHx8Ci0JCQkJICAgIHJ0aC0+ZmwuaWlmICE9IDAgfHwKKwkJCQkgICAgcnRfaXNfaW5wdXRfcm91dGUocnRoKSB8fAogCQkJCSAgICBkc3RfbWV0cmljX2xvY2tlZCgmcnRoLT5kc3QsIFJUQVhfTVRVKSB8fAogCQkJCSAgICAhbmV0X2VxKGRldl9uZXQocnRoLT5kc3QuZGV2KSwgbmV0KSB8fAogCQkJCSAgICBydF9pc19leHBpcmVkKHJ0aCkpCkBAIC0xNjg2LDExICsxNjczLDE0IEBACiAJCQkJCWlmIChtdHUgPCBkc3RfbXR1KCZydGgtPmRzdCkpIHsKIAkJCQkJCWRzdF9jb25maXJtKCZydGgtPmRzdCk7CiAJCQkJCQlpZiAobXR1IDwgaXBfcnRfbWluX3BtdHUpIHsKKwkJCQkJCQl1MzIgbG9jayA9IGRzdF9tZXRyaWMoJnJ0aC0+ZHN0LAorCQkJCQkJCQkJICAgICAgUlRBWF9MT0NLKTsKIAkJCQkJCQltdHUgPSBpcF9ydF9taW5fcG10dTsKLQkJCQkJCQlydGgtPmRzdC5tZXRyaWNzW1JUQVhfTE9DSy0xXSB8PQotCQkJCQkJCQkoMSA8PCBSVEFYX01UVSk7CisJCQkJCQkJbG9jayB8PSAoMSA8PCBSVEFYX01UVSk7CisJCQkJCQkJZHN0X21ldHJpY19zZXQoJnJ0aC0+ZHN0LCBSVEFYX0xPQ0ssCisJCQkJCQkJCSAgICAgICBsb2NrKTsKIAkJCQkJCX0KLQkJCQkJCXJ0aC0+ZHN0Lm1ldHJpY3NbUlRBWF9NVFUtMV0gPSBtdHU7CisJCQkJCQlkc3RfbWV0cmljX3NldCgmcnRoLT5kc3QsIFJUQVhfTVRVLCBtdHUpOwogCQkJCQkJZHN0X3NldF9leHBpcmVzKCZydGgtPmRzdCwKIAkJCQkJCQlpcF9ydF9tdHVfZXhwaXJlcyk7CiAJCQkJCX0KQEAgLTE3MDgsMTAgKzE2OTgsMTEgQEAKIAlpZiAoZHN0X210dShkc3QpID4gbXR1ICYmIG10dSA+PSA2OCAmJgogCSAgICAhKGRzdF9tZXRyaWNfbG9ja2VkKGRzdCwgUlRBWF9NVFUpKSkgewogCQlpZiAobXR1IDwgaXBfcnRfbWluX3BtdHUpIHsKKwkJCXUzMiBsb2NrID0gZHN0X21ldHJpYyhkc3QsIFJUQVhfTE9DSyk7CiAJCQltdHUgPSBpcF9ydF9taW5fcG10dTsKLQkJCWRzdC0+bWV0cmljc1tSVEFYX0xPQ0stMV0gfD0gKDEgPDwgUlRBWF9NVFUpOworCQkJZHN0X21ldHJpY19zZXQoZHN0LCBSVEFYX0xPQ0ssIGxvY2sgfCAoMSA8PCBSVEFYX01UVSkpOwogCQl9Ci0JCWRzdC0+bWV0cmljc1tSVEFYX01UVS0xXSA9IG10dTsKKwkJZHN0X21ldHJpY19zZXQoZHN0LCBSVEFYX01UVSwgbXR1KTsKIAkJZHN0X3NldF9leHBpcmVzKGRzdCwgaXBfcnRfbXR1X2V4cGlyZXMpOwogCQljYWxsX25ldGV2ZW50X25vdGlmaWVycyhORVRFVkVOVF9QTVRVX1VQREFURSwgZHN0KTsKIAl9CkBAIC0xNzI4LDMzICsxNzE5LDEzIEBACiB7CiAJc3RydWN0IHJ0YWJsZSAqcnQgPSAoc3RydWN0IHJ0YWJsZSAqKSBkc3Q7CiAJc3RydWN0IGluZXRfcGVlciAqcGVlciA9IHJ0LT5wZWVyOwotCXN0cnVjdCBpbl9kZXZpY2UgKmlkZXYgPSBydC0+aWRldjsKIAogCWlmIChwZWVyKSB7CiAJCXJ0LT5wZWVyID0gTlVMTDsKIAkJaW5ldF9wdXRwZWVyKHBlZXIpOwogCX0KLQotCWlmIChpZGV2KSB7Ci0JCXJ0LT5pZGV2ID0gTlVMTDsKLQkJaW5fZGV2X3B1dChpZGV2KTsKLQl9CiB9CiAKLXN0YXRpYyB2b2lkIGlwdjRfZHN0X2lmZG93bihzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkgICAgaW50IGhvdykKLXsKLQlzdHJ1Y3QgcnRhYmxlICpydCA9IChzdHJ1Y3QgcnRhYmxlICopIGRzdDsKLQlzdHJ1Y3QgaW5fZGV2aWNlICppZGV2ID0gcnQtPmlkZXY7Ci0JaWYgKGRldiAhPSBkZXZfbmV0KGRldiktPmxvb3BiYWNrX2RldiAmJiBpZGV2ICYmIGlkZXYtPmRldiA9PSBkZXYpIHsKLQkJc3RydWN0IGluX2RldmljZSAqbG9vcGJhY2tfaWRldiA9Ci0JCQlpbl9kZXZfZ2V0KGRldl9uZXQoZGV2KS0+bG9vcGJhY2tfZGV2KTsKLQkJaWYgKGxvb3BiYWNrX2lkZXYpIHsKLQkJCXJ0LT5pZGV2ID0gbG9vcGJhY2tfaWRldjsKLQkJCWluX2Rldl9wdXQoaWRldik7Ci0JCX0KLQl9Ci19CiAKIHN0YXRpYyB2b2lkIGlwdjRfbGlua19mYWlsdXJlKHN0cnVjdCBza19idWZmICpza2IpCiB7CkBAIC0xNzkwLDcgKzE3NjEsNyBAQAogCV9fYmUzMiBzcmM7CiAJc3RydWN0IGZpYl9yZXN1bHQgcmVzOwogCi0JaWYgKHJ0LT5mbC5paWYgPT0gMCkKKwlpZiAocnRfaXNfb3V0cHV0X3JvdXRlKHJ0KSkKIAkJc3JjID0gcnQtPnJ0X3NyYzsKIAllbHNlIHsKIAkJcmN1X3JlYWRfbG9jaygpOwpAQCAtMTgxNCwzOCArMTc4NSw1NSBAQAogfQogI2VuZGlmCiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaXB2NF9kZWZhdWx0X2Fkdm1zcyhjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpCit7CisJdW5zaWduZWQgaW50IGFkdm1zcyA9IGRzdF9tZXRyaWNfcmF3KGRzdCwgUlRBWF9BRFZNU1MpOworCisJaWYgKGFkdm1zcyA9PSAwKSB7CisJCWFkdm1zcyA9IG1heF90KHVuc2lnbmVkIGludCwgZHN0LT5kZXYtPm10dSAtIDQwLAorCQkJICAgICAgIGlwX3J0X21pbl9hZHZtc3MpOworCQlpZiAoYWR2bXNzID4gNjU1MzUgLSA0MCkKKwkJCWFkdm1zcyA9IDY1NTM1IC0gNDA7CisJfQorCXJldHVybiBhZHZtc3M7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaXB2NF9kZWZhdWx0X210dShjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpCit7CisJdW5zaWduZWQgaW50IG10dSA9IGRzdC0+ZGV2LT5tdHU7CisKKwlpZiAodW5saWtlbHkoZHN0X21ldHJpY19sb2NrZWQoZHN0LCBSVEFYX01UVSkpKSB7CisJCWNvbnN0IHN0cnVjdCBydGFibGUgKnJ0ID0gKGNvbnN0IHN0cnVjdCBydGFibGUgKikgZHN0OworCisJCWlmIChydC0+cnRfZ2F0ZXdheSAhPSBydC0+cnRfZHN0ICYmIG10dSA+IDU3NikKKwkJCW10dSA9IDU3NjsKKwl9CisKKwlpZiAobXR1ID4gSVBfTUFYX01UVSkKKwkJbXR1ID0gSVBfTUFYX01UVTsKKworCXJldHVybiBtdHU7Cit9CisKIHN0YXRpYyB2b2lkIHJ0X3NldF9uZXh0aG9wKHN0cnVjdCBydGFibGUgKnJ0LCBzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLCB1MzIgaXRhZykKIHsKKwlzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QgPSAmcnQtPmRzdDsKIAlzdHJ1Y3QgZmliX2luZm8gKmZpID0gcmVzLT5maTsKIAogCWlmIChmaSkgewogCQlpZiAoRklCX1JFU19HVygqcmVzKSAmJgogCQkgICAgRklCX1JFU19OSCgqcmVzKS5uaF9zY29wZSA9PSBSVF9TQ09QRV9MSU5LKQogCQkJcnQtPnJ0X2dhdGV3YXkgPSBGSUJfUkVTX0dXKCpyZXMpOwotCQltZW1jcHkocnQtPmRzdC5tZXRyaWNzLCBmaS0+ZmliX21ldHJpY3MsCi0JCSAgICAgICBzaXplb2YocnQtPmRzdC5tZXRyaWNzKSk7Ci0JCWlmIChmaS0+ZmliX210dSA9PSAwKSB7Ci0JCQlydC0+ZHN0Lm1ldHJpY3NbUlRBWF9NVFUtMV0gPSBydC0+ZHN0LmRldi0+bXR1OwotCQkJaWYgKGRzdF9tZXRyaWNfbG9ja2VkKCZydC0+ZHN0LCBSVEFYX01UVSkgJiYKLQkJCSAgICBydC0+cnRfZ2F0ZXdheSAhPSBydC0+cnRfZHN0ICYmCi0JCQkgICAgcnQtPmRzdC5kZXYtPm10dSA+IDU3NikKLQkJCQlydC0+ZHN0Lm1ldHJpY3NbUlRBWF9NVFUtMV0gPSA1NzY7Ci0JCX0KKwkJZHN0X2ltcG9ydF9tZXRyaWNzKGRzdCwgZmktPmZpYl9tZXRyaWNzKTsKICNpZmRlZiBDT05GSUdfTkVUX0NMU19ST1VURQotCQlydC0+ZHN0LnRjbGFzc2lkID0gRklCX1JFU19OSCgqcmVzKS5uaF90Y2xhc3NpZDsKKwkJZHN0LT50Y2xhc3NpZCA9IEZJQl9SRVNfTkgoKnJlcykubmhfdGNsYXNzaWQ7CiAjZW5kaWYKLQl9IGVsc2UKLQkJcnQtPmRzdC5tZXRyaWNzW1JUQVhfTVRVLTFdPSBydC0+ZHN0LmRldi0+bXR1OworCX0KIAotCWlmIChkc3RfbWV0cmljKCZydC0+ZHN0LCBSVEFYX0hPUExJTUlUKSA9PSAwKQotCQlydC0+ZHN0Lm1ldHJpY3NbUlRBWF9IT1BMSU1JVC0xXSA9IHN5c2N0bF9pcF9kZWZhdWx0X3R0bDsKLQlpZiAoZHN0X210dSgmcnQtPmRzdCkgPiBJUF9NQVhfTVRVKQotCQlydC0+ZHN0Lm1ldHJpY3NbUlRBWF9NVFUtMV0gPSBJUF9NQVhfTVRVOwotCWlmIChkc3RfbWV0cmljKCZydC0+ZHN0LCBSVEFYX0FEVk1TUykgPT0gMCkKLQkJcnQtPmRzdC5tZXRyaWNzW1JUQVhfQURWTVNTLTFdID0gbWF4X3QodW5zaWduZWQgaW50LCBydC0+ZHN0LmRldi0+bXR1IC0gNDAsCi0JCQkJICAgICAgIGlwX3J0X21pbl9hZHZtc3MpOwotCWlmIChkc3RfbWV0cmljKCZydC0+ZHN0LCBSVEFYX0FEVk1TUykgPiA2NTUzNSAtIDQwKQotCQlydC0+ZHN0Lm1ldHJpY3NbUlRBWF9BRFZNU1MtMV0gPSA2NTUzNSAtIDQwOworCWlmIChkc3RfbXR1KGRzdCkgPiBJUF9NQVhfTVRVKQorCQlkc3RfbWV0cmljX3NldChkc3QsIFJUQVhfTVRVLCBJUF9NQVhfTVRVKTsKKwlpZiAoZHN0X21ldHJpY19yYXcoZHN0LCBSVEFYX0FEVk1TUykgPiA2NTUzNSAtIDQwKQorCQlkc3RfbWV0cmljX3NldChkc3QsIFJUQVhfQURWTVNTLCA2NTUzNSAtIDQwKTsKIAogI2lmZGVmIENPTkZJR19ORVRfQ0xTX1JPVVRFCiAjaWZkZWYgQ09ORklHX0lQX01VTFRJUExFX1RBQkxFUwpAQCAtMTkxMCw3ICsxODk4LDYgQEAKIAlydGgtPmZsLmlpZgk9IGRldi0+aWZpbmRleDsKIAlydGgtPmRzdC5kZXYJPSBpbml0X25ldC5sb29wYmFja19kZXY7CiAJZGV2X2hvbGQocnRoLT5kc3QuZGV2KTsKLQlydGgtPmlkZXYJPSBpbl9kZXZfZ2V0KHJ0aC0+ZHN0LmRldik7CiAJcnRoLT5mbC5vaWYJPSAwOwogCXJ0aC0+cnRfZ2F0ZXdheQk9IGRhZGRyOwogCXJ0aC0+cnRfc3BlY19kc3Q9IHNwZWNfZHN0OwpAQCAtMjA1MCw3ICsyMDM3LDYgQEAKIAkJcnRoLT5mbC5paWYJPSBpbl9kZXYtPmRldi0+aWZpbmRleDsKIAlydGgtPmRzdC5kZXYJPSAob3V0X2RldiktPmRldjsKIAlkZXZfaG9sZChydGgtPmRzdC5kZXYpOwotCXJ0aC0+aWRldgk9IGluX2Rldl9nZXQocnRoLT5kc3QuZGV2KTsKIAlydGgtPmZsLm9pZiAJPSAwOwogCXJ0aC0+cnRfc3BlY19kc3Q9IHNwZWNfZHN0OwogCkBAIC0yMTExLDEyICsyMDk3LDEwIEBACiB7CiAJc3RydWN0IGZpYl9yZXN1bHQgcmVzOwogCXN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiA9IF9faW5fZGV2X2dldF9yY3UoZGV2KTsKLQlzdHJ1Y3QgZmxvd2kgZmwgPSB7IC5ubF91ID0geyAuaXA0X3UgPQotCQkJCSAgICAgIHsgLmRhZGRyID0gZGFkZHIsCi0JCQkJCS5zYWRkciA9IHNhZGRyLAotCQkJCQkudG9zID0gdG9zLAotCQkJCQkuc2NvcGUgPSBSVF9TQ09QRV9VTklWRVJTRSwKLQkJCQkgICAgICB9IH0sCisJc3RydWN0IGZsb3dpIGZsID0geyAuZmw0X2RzdAk9IGRhZGRyLAorCQkJICAgIC5mbDRfc3JjCT0gc2FkZHIsCisJCQkgICAgLmZsNF90b3MJPSB0b3MsCisJCQkgICAgLmZsNF9zY29wZQk9IFJUX1NDT1BFX1VOSVZFUlNFLAogCQkJICAgIC5tYXJrID0gc2tiLT5tYXJrLAogCQkJICAgIC5paWYgPSBkZXYtPmlmaW5kZXggfTsKIAl1bnNpZ25lZAlmbGFncyA9IDA7CkBAIC0yMjMxLDcgKzIyMTUsNiBAQAogCXJ0aC0+ZmwuaWlmCT0gZGV2LT5pZmluZGV4OwogCXJ0aC0+ZHN0LmRldgk9IG5ldC0+bG9vcGJhY2tfZGV2OwogCWRldl9ob2xkKHJ0aC0+ZHN0LmRldik7Ci0JcnRoLT5pZGV2CT0gaW5fZGV2X2dldChydGgtPmRzdC5kZXYpOwogCXJ0aC0+cnRfZ2F0ZXdheQk9IGRhZGRyOwogCXJ0aC0+cnRfc3BlY19kc3Q9IHNwZWNfZHN0OwogCXJ0aC0+ZHN0LmlucHV0PSBpcF9sb2NhbF9kZWxpdmVyOwpAQCAtMjQxNyw5ICsyNDAwLDYgQEAKIAlpZiAoIXJ0aCkKIAkJcmV0dXJuIC1FTk9CVUZTOwogCi0JaW5fZGV2X2hvbGQoaW5fZGV2KTsKLQlydGgtPmlkZXYgPSBpbl9kZXY7Ci0KIAlhdG9taWNfc2V0KCZydGgtPmRzdC5fX3JlZmNudCwgMSk7CiAJcnRoLT5kc3QuZmxhZ3M9IERTVF9IT1NUOwogCWlmIChJTl9ERVZfQ09ORl9HRVQoaW5fZGV2LCBOT1hGUk0pKQpAQCAtMjUwNiwxNCArMjQ4NiwxMSBAQAogCQkJCWNvbnN0IHN0cnVjdCBmbG93aSAqb2xkZmxwKQogewogCXUzMiB0b3MJPSBSVF9GTF9UT1Mob2xkZmxwKTsKLQlzdHJ1Y3QgZmxvd2kgZmwgPSB7IC5ubF91ID0geyAuaXA0X3UgPQotCQkJCSAgICAgIHsgLmRhZGRyID0gb2xkZmxwLT5mbDRfZHN0LAotCQkJCQkuc2FkZHIgPSBvbGRmbHAtPmZsNF9zcmMsCi0JCQkJCS50b3MgPSB0b3MgJiBJUFRPU19SVF9NQVNLLAotCQkJCQkuc2NvcGUgPSAoKHRvcyAmIFJUT19PTkxJTkspID8KLQkJCQkJCSAgUlRfU0NPUEVfTElOSyA6Ci0JCQkJCQkgIFJUX1NDT1BFX1VOSVZFUlNFKSwKLQkJCQkgICAgICB9IH0sCisJc3RydWN0IGZsb3dpIGZsID0geyAuZmw0X2RzdCA9IG9sZGZscC0+Zmw0X2RzdCwKKwkJCSAgICAuZmw0X3NyYyA9IG9sZGZscC0+Zmw0X3NyYywKKwkJCSAgICAuZmw0X3RvcyA9IHRvcyAmIElQVE9TX1JUX01BU0ssCisJCQkgICAgLmZsNF9zY29wZSA9ICgodG9zICYgUlRPX09OTElOSykgPworCQkJCQkgIFJUX1NDT1BFX0xJTksgOiBSVF9TQ09QRV9VTklWRVJTRSksCiAJCQkgICAgLm1hcmsgPSBvbGRmbHAtPm1hcmssCiAJCQkgICAgLmlpZiA9IG5ldC0+bG9vcGJhY2tfZGV2LT5pZmluZGV4LAogCQkJICAgIC5vaWYgPSBvbGRmbHAtPm9pZiB9OwpAQCAtMjcwMCw3ICsyNjc3LDcgQEAKIAkJcnRoID0gcmN1X2RlcmVmZXJlbmNlX2JoKHJ0aC0+ZHN0LnJ0X25leHQpKSB7CiAJCWlmIChydGgtPmZsLmZsNF9kc3QgPT0gZmxwLT5mbDRfZHN0ICYmCiAJCSAgICBydGgtPmZsLmZsNF9zcmMgPT0gZmxwLT5mbDRfc3JjICYmCi0JCSAgICBydGgtPmZsLmlpZiA9PSAwICYmCisJCSAgICBydF9pc19vdXRwdXRfcm91dGUocnRoKSAmJgogCQkgICAgcnRoLT5mbC5vaWYgPT0gZmxwLT5vaWYgJiYKIAkJICAgIHJ0aC0+ZmwubWFyayA9PSBmbHAtPm1hcmsgJiYKIAkJICAgICEoKHJ0aC0+ZmwuZmw0X3RvcyBeIGZscC0+Zmw0X3RvcykgJgpAQCAtMjc1Niw3ICsyNzMzLDcgQEAKIAkJbmV3LT5fX3VzZSA9IDE7CiAJCW5ldy0+aW5wdXQgPSBkc3RfZGlzY2FyZDsKIAkJbmV3LT5vdXRwdXQgPSBkc3RfZGlzY2FyZDsKLQkJbWVtY3B5KG5ldy0+bWV0cmljcywgb3J0LT5kc3QubWV0cmljcywgUlRBWF9NQVgqc2l6ZW9mKHUzMikpOworCQlkc3RfY29weV9tZXRyaWNzKG5ldywgJm9ydC0+ZHN0KTsKIAogCQluZXctPmRldiA9IG9ydC0+ZHN0LmRldjsKIAkJaWYgKG5ldy0+ZGV2KQpAQCAtMjc2NCw5ICsyNzQxLDYgQEAKIAogCQlydC0+ZmwgPSBvcnQtPmZsOwogCi0JCXJ0LT5pZGV2ID0gb3J0LT5pZGV2OwotCQlpZiAocnQtPmlkZXYpCi0JCQlpbl9kZXZfaG9sZChydC0+aWRldik7CiAJCXJ0LT5ydF9nZW5pZCA9IHJ0X2dlbmlkKG5ldCk7CiAJCXJ0LT5ydF9mbGFncyA9IG9ydC0+cnRfZmxhZ3M7CiAJCXJ0LT5ydF90eXBlID0gb3J0LT5ydF90eXBlOwpAQCAtMjg1OCw3ICsyODMyLDcgQEAKIAlpZiAocnQtPmRzdC50Y2xhc3NpZCkKIAkJTkxBX1BVVF9VMzIoc2tiLCBSVEFfRkxPVywgcnQtPmRzdC50Y2xhc3NpZCk7CiAjZW5kaWYKLQlpZiAocnQtPmZsLmlpZikKKwlpZiAocnRfaXNfaW5wdXRfcm91dGUocnQpKQogCQlOTEFfUFVUX0JFMzIoc2tiLCBSVEFfUFJFRlNSQywgcnQtPnJ0X3NwZWNfZHN0KTsKIAllbHNlIGlmIChydC0+cnRfc3JjICE9IHJ0LT5mbC5mbDRfc3JjKQogCQlOTEFfUFVUX0JFMzIoc2tiLCBSVEFfUFJFRlNSQywgcnQtPnJ0X3NyYyk7CkBAIC0yODY2LDcgKzI4NDAsNyBAQAogCWlmIChydC0+cnRfZHN0ICE9IHJ0LT5ydF9nYXRld2F5KQogCQlOTEFfUFVUX0JFMzIoc2tiLCBSVEFfR0FURVdBWSwgcnQtPnJ0X2dhdGV3YXkpOwogCi0JaWYgKHJ0bmV0bGlua19wdXRfbWV0cmljcyhza2IsIHJ0LT5kc3QubWV0cmljcykgPCAwKQorCWlmIChydG5ldGxpbmtfcHV0X21ldHJpY3Moc2tiLCBkc3RfbWV0cmljc19wdHIoJnJ0LT5kc3QpKSA8IDApCiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogCiAJaWYgKHJ0LT5mbC5tYXJrKQpAQCAtMjg4Myw3ICsyODU3LDcgQEAKIAkJfQogCX0KIAotCWlmIChydC0+ZmwuaWlmKSB7CisJaWYgKHJ0X2lzX2lucHV0X3JvdXRlKHJ0KSkgewogI2lmZGVmIENPTkZJR19JUF9NUk9VVEUKIAkJX19iZTMyIGRzdCA9IHJ0LT5ydF9kc3Q7CiAKQEAgLTI5NzgsMTMgKzI5NTIsOSBAQAogCQkJZXJyID0gLXJ0LT5kc3QuZXJyb3I7CiAJfSBlbHNlIHsKIAkJc3RydWN0IGZsb3dpIGZsID0gewotCQkJLm5sX3UgPSB7Ci0JCQkJLmlwNF91ID0gewotCQkJCQkuZGFkZHIgPSBkc3QsCi0JCQkJCS5zYWRkciA9IHNyYywKLQkJCQkJLnRvcyA9IHJ0bS0+cnRtX3RvcywKLQkJCQl9LAotCQkJfSwKKwkJCS5mbDRfZHN0ID0gZHN0LAorCQkJLmZsNF9zcmMgPSBzcmMsCisJCQkuZmw0X3RvcyA9IHJ0bS0+cnRtX3RvcywKIAkJCS5vaWYgPSB0YltSVEFfT0lGXSA/IG5sYV9nZXRfdTMyKHRiW1JUQV9PSUZdKSA6IDAsCiAJCQkubWFyayA9IG1hcmssCiAJCX07CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9zeW5jb29raWVzLmMgYi9uZXQvaXB2NC9zeW5jb29raWVzLmMKaW5kZXggNjUwY2FjZS4uNDc1MTkyMCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvc3luY29va2llcy5jCisrKyBiL25ldC9pcHY0L3N5bmNvb2tpZXMuYwpAQCAtMzQ2LDE3ICszNDYsMTQgQEAKIAkgKi8KIAl7CiAJCXN0cnVjdCBmbG93aSBmbCA9IHsgLm1hcmsgPSBzay0+c2tfbWFyaywKLQkJCQkgICAgLm5sX3UgPSB7IC5pcDRfdSA9Ci0JCQkJCSAgICAgIHsgLmRhZGRyID0gKChvcHQgJiYgb3B0LT5zcnIpID8KLQkJCQkJCQkgIG9wdC0+ZmFkZHIgOgotCQkJCQkJCSAgaXJlcS0+cm10X2FkZHIpLAotCQkJCQkJLnNhZGRyID0gaXJlcS0+bG9jX2FkZHIsCi0JCQkJCQkudG9zID0gUlRfQ09OTl9GTEFHUyhzaykgfSB9LAorCQkJCSAgICAuZmw0X2RzdCA9ICgob3B0ICYmIG9wdC0+c3JyKSA/CisJCQkJCQlvcHQtPmZhZGRyIDogaXJlcS0+cm10X2FkZHIpLAorCQkJCSAgICAuZmw0X3NyYyA9IGlyZXEtPmxvY19hZGRyLAorCQkJCSAgICAuZmw0X3RvcyA9IFJUX0NPTk5fRkxBR1Moc2spLAogCQkJCSAgICAucHJvdG8gPSBJUFBST1RPX1RDUCwKIAkJCQkgICAgLmZsYWdzID0gaW5ldF9za19mbG93aV9mbGFncyhzayksCi0JCQkJICAgIC51bGlfdSA9IHsgLnBvcnRzID0KLQkJCQkJICAgICAgIHsgLnNwb3J0ID0gdGgtPmRlc3QsCi0JCQkJCQkgLmRwb3J0ID0gdGgtPnNvdXJjZSB9IH0gfTsKKwkJCQkgICAgLmZsX2lwX3Nwb3J0ID0gdGgtPmRlc3QsCisJCQkJICAgIC5mbF9pcF9kcG9ydCA9IHRoLT5zb3VyY2UgfTsKIAkJc2VjdXJpdHlfcmVxX2NsYXNzaWZ5X2Zsb3cocmVxLCAmZmwpOwogCQlpZiAoaXBfcm91dGVfb3V0cHV0X2tleShzb2NrX25ldChzayksICZydCwgJmZsKSkgewogCQkJcmVxc2tfZnJlZShyZXEpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmMgYi9uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYwppbmRleCAxYjRlYzIxLi4xYTQ1NjY1IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYworKysgYi9uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYwpAQCAtMjgsNiArMjgsOCBAQAogc3RhdGljIGludCBpcF9sb2NhbF9wb3J0X3JhbmdlX21heFtdID0geyA2NTUzNSwgNjU1MzUgfTsKIHN0YXRpYyBpbnQgdGNwX2Fkdl93aW5fc2NhbGVfbWluID0gLTMxOwogc3RhdGljIGludCB0Y3BfYWR2X3dpbl9zY2FsZV9tYXggPSAzMTsKK3N0YXRpYyBpbnQgaXBfdHRsX21pbiA9IDE7CitzdGF0aWMgaW50IGlwX3R0bF9tYXggPSAyNTU7CiAKIC8qIFVwZGF0ZSBzeXN0ZW0gdmlzaWJsZSBJUCBwb3J0IHJhbmdlICovCiBzdGF0aWMgdm9pZCBzZXRfbG9jYWxfcG9ydF9yYW5nZShpbnQgcmFuZ2VbMl0pCkBAIC0xNTUsOCArMTU3LDkgQEAKIAkJLmRhdGEJCT0gJnN5c2N0bF9pcF9kZWZhdWx0X3R0bCwKIAkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKIAkJLm1vZGUJCT0gMDY0NCwKLQkJLnByb2NfaGFuZGxlcgk9IGlwdjRfZG9pbnRfYW5kX2ZsdXNoLAotCQkuZXh0cmEyCQk9ICZpbml0X25ldCwKKwkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWNfbWlubWF4LAorCQkuZXh0cmExCQk9ICZpcF90dGxfbWluLAorCQkuZXh0cmEyCQk9ICZpcF90dGxfbWF4LAogCX0sCiAJewogCQkucHJvY25hbWUJPSAiaXBfbm9fcG10dV9kaXNjIiwKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcC5jIGIvbmV0L2lwdjQvdGNwLmMKaW5kZXggZjE1YzM2YS4uNmMxMWVlYyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwLmMKKysrIGIvbmV0L2lwdjQvdGNwLmMKQEAgLTExOTMsNyArMTE5Myw3IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHNrYl9wZWVrKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSk7CiAKIAlXQVJOKHNrYiAmJiAhYmVmb3JlKHRwLT5jb3BpZWRfc2VxLCBUQ1BfU0tCX0NCKHNrYiktPmVuZF9zZXEpLAotCSAgICAgS0VSTl9JTkZPICJjbGVhbnVwIHJidWYgYnVnOiBjb3BpZWQgJVggc2VxICVYIHJjdm54dCAlWFxuIiwKKwkgICAgICJjbGVhbnVwIHJidWYgYnVnOiBjb3BpZWQgJVggc2VxICVYIHJjdm54dCAlWFxuIiwKIAkgICAgIHRwLT5jb3BpZWRfc2VxLCBUQ1BfU0tCX0NCKHNrYiktPmVuZF9zZXEsIHRwLT5yY3Zfbnh0KTsKICNlbmRpZgogCkBAIC0xNDc3LDEwICsxNDc3LDkgQEAKIAkJCSAqIHNob3VsZG4ndCBoYXBwZW4uCiAJCQkgKi8KIAkJCWlmIChXQVJOKGJlZm9yZSgqc2VxLCBUQ1BfU0tCX0NCKHNrYiktPnNlcSksCi0JCQkgICAgIEtFUk5fSU5GTyAicmVjdm1zZyBidWc6IGNvcGllZCAlWCAiCi0JCQkJICAgICAgICJzZXEgJVggcmN2bnh0ICVYIGZsICVYXG4iLCAqc2VxLAotCQkJCSAgICAgICBUQ1BfU0tCX0NCKHNrYiktPnNlcSwgdHAtPnJjdl9ueHQsCi0JCQkJICAgICAgIGZsYWdzKSkKKwkJCQkgInJlY3Ztc2cgYnVnOiBjb3BpZWQgJVggc2VxICVYIHJjdm54dCAlWCBmbCAlWFxuIiwKKwkJCQkgKnNlcSwgVENQX1NLQl9DQihza2IpLT5zZXEsIHRwLT5yY3Zfbnh0LAorCQkJCSBmbGFncykpCiAJCQkJYnJlYWs7CiAKIAkJCW9mZnNldCA9ICpzZXEgLSBUQ1BfU0tCX0NCKHNrYiktPnNlcTsKQEAgLTE0OTAsMTAgKzE0ODksOSBAQAogCQkJCWdvdG8gZm91bmRfb2tfc2tiOwogCQkJaWYgKHRjcF9oZHIoc2tiKS0+ZmluKQogCQkJCWdvdG8gZm91bmRfZmluX29rOwotCQkJV0FSTighKGZsYWdzICYgTVNHX1BFRUspLCBLRVJOX0lORk8gInJlY3Ztc2cgYnVnIDI6ICIKLQkJCQkJImNvcGllZCAlWCBzZXEgJVggcmN2bnh0ICVYIGZsICVYXG4iLAotCQkJCQkqc2VxLCBUQ1BfU0tCX0NCKHNrYiktPnNlcSwKLQkJCQkJdHAtPnJjdl9ueHQsIGZsYWdzKTsKKwkJCVdBUk4oIShmbGFncyAmIE1TR19QRUVLKSwKKwkJCSAgICAgInJlY3Ztc2cgYnVnIDI6IGNvcGllZCAlWCBzZXEgJVggcmN2bnh0ICVYIGZsICVYXG4iLAorCQkJICAgICAqc2VxLCBUQ1BfU0tCX0NCKHNrYiktPnNlcSwgdHAtPnJjdl9ueHQsIGZsYWdzKTsKIAkJfQogCiAJCS8qIFdlbGwsIGlmIHdlIGhhdmUgYmFja2xvZywgdHJ5IHRvIHByb2Nlc3MgaXQgbm93IHlldC4gKi8KZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9pbnB1dC5jIGIvbmV0L2lwdjQvdGNwX2lucHV0LmMKaW5kZXggNmQ4YWIxYy4uMjU0OWIyOSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2lucHV0LmMKKysrIGIvbmV0L2lwdjQvdGNwX2lucHV0LmMKQEAgLTczNCw3ICs3MzQsNyBAQAogCQkJICogUmVzZXQgb3VyIHJlc3VsdHMuCiAJCQkgKi8KIAkJCWlmICghKGRzdF9tZXRyaWNfbG9ja2VkKGRzdCwgUlRBWF9SVFQpKSkKLQkJCQlkc3QtPm1ldHJpY3NbUlRBWF9SVFQgLSAxXSA9IDA7CisJCQkJZHN0X21ldHJpY19zZXQoZHN0LCBSVEFYX1JUVCwgMCk7CiAJCQlyZXR1cm47CiAJCX0KIApAQCAtNzc2LDM0ICs3NzYsMzggQEAKIAkJCWlmIChkc3RfbWV0cmljKGRzdCwgUlRBWF9TU1RIUkVTSCkgJiYKIAkJCSAgICAhZHN0X21ldHJpY19sb2NrZWQoZHN0LCBSVEFYX1NTVEhSRVNIKSAmJgogCQkJICAgICh0cC0+c25kX2N3bmQgPj4gMSkgPiBkc3RfbWV0cmljKGRzdCwgUlRBWF9TU1RIUkVTSCkpCi0JCQkJZHN0LT5tZXRyaWNzW1JUQVhfU1NUSFJFU0gtMV0gPSB0cC0+c25kX2N3bmQgPj4gMTsKKwkJCQlkc3RfbWV0cmljX3NldChkc3QsIFJUQVhfU1NUSFJFU0gsIHRwLT5zbmRfY3duZCA+PiAxKTsKIAkJCWlmICghZHN0X21ldHJpY19sb2NrZWQoZHN0LCBSVEFYX0NXTkQpICYmCiAJCQkgICAgdHAtPnNuZF9jd25kID4gZHN0X21ldHJpYyhkc3QsIFJUQVhfQ1dORCkpCi0JCQkJZHN0LT5tZXRyaWNzW1JUQVhfQ1dORCAtIDFdID0gdHAtPnNuZF9jd25kOworCQkJCWRzdF9tZXRyaWNfc2V0KGRzdCwgUlRBWF9DV05ELCB0cC0+c25kX2N3bmQpOwogCQl9IGVsc2UgaWYgKHRwLT5zbmRfY3duZCA+IHRwLT5zbmRfc3N0aHJlc2ggJiYKIAkJCSAgIGljc2stPmljc2tfY2Ffc3RhdGUgPT0gVENQX0NBX09wZW4pIHsKIAkJCS8qIENvbmcuIGF2b2lkYW5jZSBwaGFzZSwgY3duZCBpcyByZWxpYWJsZS4gKi8KIAkJCWlmICghZHN0X21ldHJpY19sb2NrZWQoZHN0LCBSVEFYX1NTVEhSRVNIKSkKLQkJCQlkc3QtPm1ldHJpY3NbUlRBWF9TU1RIUkVTSC0xXSA9Ci0JCQkJCW1heCh0cC0+c25kX2N3bmQgPj4gMSwgdHAtPnNuZF9zc3RocmVzaCk7CisJCQkJZHN0X21ldHJpY19zZXQoZHN0LCBSVEFYX1NTVEhSRVNILAorCQkJCQkgICAgICAgbWF4KHRwLT5zbmRfY3duZCA+PiAxLCB0cC0+c25kX3NzdGhyZXNoKSk7CiAJCQlpZiAoIWRzdF9tZXRyaWNfbG9ja2VkKGRzdCwgUlRBWF9DV05EKSkKLQkJCQlkc3QtPm1ldHJpY3NbUlRBWF9DV05ELTFdID0gKGRzdF9tZXRyaWMoZHN0LCBSVEFYX0NXTkQpICsgdHAtPnNuZF9jd25kKSA+PiAxOworCQkJCWRzdF9tZXRyaWNfc2V0KGRzdCwgUlRBWF9DV05ELAorCQkJCQkgICAgICAgKGRzdF9tZXRyaWMoZHN0LCBSVEFYX0NXTkQpICsKKwkJCQkJCXRwLT5zbmRfY3duZCkgPj4gMSk7CiAJCX0gZWxzZSB7CiAJCQkvKiBFbHNlIHNsb3cgc3RhcnQgZGlkIG5vdCBmaW5pc2gsIGN3bmQgaXMgbm9uLXNlbnNlLAogCQkJICAgc3N0aHJlc2ggbWF5IGJlIGFsc28gaW52YWxpZC4KIAkJCSAqLwogCQkJaWYgKCFkc3RfbWV0cmljX2xvY2tlZChkc3QsIFJUQVhfQ1dORCkpCi0JCQkJZHN0LT5tZXRyaWNzW1JUQVhfQ1dORC0xXSA9IChkc3RfbWV0cmljKGRzdCwgUlRBWF9DV05EKSArIHRwLT5zbmRfc3N0aHJlc2gpID4+IDE7CisJCQkJZHN0X21ldHJpY19zZXQoZHN0LCBSVEFYX0NXTkQsCisJCQkJCSAgICAgICAoZHN0X21ldHJpYyhkc3QsIFJUQVhfQ1dORCkgKworCQkJCQkJdHAtPnNuZF9zc3RocmVzaCkgPj4gMSk7CiAJCQlpZiAoZHN0X21ldHJpYyhkc3QsIFJUQVhfU1NUSFJFU0gpICYmCiAJCQkgICAgIWRzdF9tZXRyaWNfbG9ja2VkKGRzdCwgUlRBWF9TU1RIUkVTSCkgJiYKIAkJCSAgICB0cC0+c25kX3NzdGhyZXNoID4gZHN0X21ldHJpYyhkc3QsIFJUQVhfU1NUSFJFU0gpKQotCQkJCWRzdC0+bWV0cmljc1tSVEFYX1NTVEhSRVNILTFdID0gdHAtPnNuZF9zc3RocmVzaDsKKwkJCQlkc3RfbWV0cmljX3NldChkc3QsIFJUQVhfU1NUSFJFU0gsIHRwLT5zbmRfc3N0aHJlc2gpOwogCQl9CiAKIAkJaWYgKCFkc3RfbWV0cmljX2xvY2tlZChkc3QsIFJUQVhfUkVPUkRFUklORykpIHsKIAkJCWlmIChkc3RfbWV0cmljKGRzdCwgUlRBWF9SRU9SREVSSU5HKSA8IHRwLT5yZW9yZGVyaW5nICYmCiAJCQkgICAgdHAtPnJlb3JkZXJpbmcgIT0gc3lzY3RsX3RjcF9yZW9yZGVyaW5nKQotCQkJCWRzdC0+bWV0cmljc1tSVEFYX1JFT1JERVJJTkctMV0gPSB0cC0+cmVvcmRlcmluZzsKKwkJCQlkc3RfbWV0cmljX3NldChkc3QsIFJUQVhfUkVPUkRFUklORywgdHAtPnJlb3JkZXJpbmcpOwogCQl9CiAJfQogfQpAQCAtOTEyLDI1ICs5MTYsMjAgQEAKIAkJdHAtPm1kZXZfbWF4ID0gdHAtPnJ0dHZhciA9IG1heCh0cC0+bWRldiwgdGNwX3J0b19taW4oc2spKTsKIAl9CiAJdGNwX3NldF9ydG8oc2spOwotCWlmIChpbmV0X2NzayhzayktPmljc2tfcnRvIDwgVENQX1RJTUVPVVRfSU5JVCAmJiAhdHAtPnJ4X29wdC5zYXdfdHN0YW1wKQotCQlnb3RvIHJlc2V0OwotCi1jd25kOgorCWlmIChpbmV0X2NzayhzayktPmljc2tfcnRvIDwgVENQX1RJTUVPVVRfSU5JVCAmJiAhdHAtPnJ4X29wdC5zYXdfdHN0YW1wKSB7CityZXNldDoKKwkJLyogUGxheSBjb25zZXJ2YXRpdmUuIElmIHRpbWVzdGFtcHMgYXJlIG5vdAorCQkgKiBzdXBwb3J0ZWQsIFRDUCB3aWxsIGZhaWwgdG8gcmVjYWxjdWxhdGUgY29ycmVjdAorCQkgKiBydHQsIGlmIGluaXRpYWwgcnRvIGlzIHRvbyBzbWFsbC4gRk9SR0VUIEFMTCBBTkQgUkVTRVQhCisJCSAqLworCQlpZiAoIXRwLT5yeF9vcHQuc2F3X3RzdGFtcCAmJiB0cC0+c3J0dCkgeworCQkJdHAtPnNydHQgPSAwOworCQkJdHAtPm1kZXYgPSB0cC0+bWRldl9tYXggPSB0cC0+cnR0dmFyID0gVENQX1RJTUVPVVRfSU5JVDsKKwkJCWluZXRfY3NrKHNrKS0+aWNza19ydG8gPSBUQ1BfVElNRU9VVF9JTklUOworCQl9CisJfQogCXRwLT5zbmRfY3duZCA9IHRjcF9pbml0X2N3bmQodHAsIGRzdCk7CiAJdHAtPnNuZF9jd25kX3N0YW1wID0gdGNwX3RpbWVfc3RhbXA7Ci0JcmV0dXJuOwotCi1yZXNldDoKLQkvKiBQbGF5IGNvbnNlcnZhdGl2ZS4gSWYgdGltZXN0YW1wcyBhcmUgbm90Ci0JICogc3VwcG9ydGVkLCBUQ1Agd2lsbCBmYWlsIHRvIHJlY2FsY3VsYXRlIGNvcnJlY3QKLQkgKiBydHQsIGlmIGluaXRpYWwgcnRvIGlzIHRvbyBzbWFsbC4gRk9SR0VUIEFMTCBBTkQgUkVTRVQhCi0JICovCi0JaWYgKCF0cC0+cnhfb3B0LnNhd190c3RhbXAgJiYgdHAtPnNydHQpIHsKLQkJdHAtPnNydHQgPSAwOwotCQl0cC0+bWRldiA9IHRwLT5tZGV2X21heCA9IHRwLT5ydHR2YXIgPSBUQ1BfVElNRU9VVF9JTklUOwotCQlpbmV0X2NzayhzayktPmljc2tfcnRvID0gVENQX1RJTUVPVVRfSU5JVDsKLQl9Ci0JZ290byBjd25kOwogfQogCiBzdGF0aWMgdm9pZCB0Y3BfdXBkYXRlX3Jlb3JkZXJpbmcoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBpbnQgbWV0cmljLApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2lwdjQuYyBiL25ldC9pcHY0L3RjcF9pcHY0LmMKaW5kZXggZDk3OGJiMi4uODU2ZjY4NCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2lwdjQuYworKysgYi9uZXQvaXB2NC90Y3BfaXB2NC5jCkBAIC0xMjEwLDEyICsxMjEwLDYgQEAKIH07CiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCB0aW1ld2FpdF9zb2NrX29wcyB0Y3BfdGltZXdhaXRfc29ja19vcHMgPSB7Ci0JLnR3c2tfb2JqX3NpemUJPSBzaXplb2Yoc3RydWN0IHRjcF90aW1ld2FpdF9zb2NrKSwKLQkudHdza191bmlxdWUJPSB0Y3BfdHdza191bmlxdWUsCi0JLnR3c2tfZGVzdHJ1Y3Rvcj0gdGNwX3R3c2tfZGVzdHJ1Y3RvciwKLX07Ci0KIGludCB0Y3BfdjRfY29ubl9yZXF1ZXN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgdGNwX2V4dGVuZF92YWx1ZXMgdG1wX2V4dDsKQEAgLTEzNDcsNyArMTM0MSw3IEBACiAJCSAgICB0Y3BfZGVhdGhfcm93LnN5c2N0bF90d19yZWN5Y2xlICYmCiAJCSAgICAoZHN0ID0gaW5ldF9jc2tfcm91dGVfcmVxKHNrLCByZXEpKSAhPSBOVUxMICYmCiAJCSAgICAocGVlciA9IHJ0X2dldF9wZWVyKChzdHJ1Y3QgcnRhYmxlICopZHN0KSkgIT0gTlVMTCAmJgotCQkgICAgcGVlci0+djRkYWRkciA9PSBzYWRkcikgeworCQkgICAgcGVlci0+ZGFkZHIuYTQgPT0gc2FkZHIpIHsKIAkJCWluZXRfcGVlcl9yZWZjaGVjayhwZWVyKTsKIAkJCWlmICgodTMyKWdldF9zZWNvbmRzKCkgLSBwZWVyLT50Y3BfdHNfc3RhbXAgPCBUQ1BfUEFXU19NU0wgJiYKIAkJCSAgICAoczMyKShwZWVyLT50Y3BfdHMgLSByZXEtPnRzX3JlY2VudCkgPgpAQCAtMTQ0Miw3ICsxNDM2LDcgQEAKIAogCXRjcF9tdHVwX2luaXQobmV3c2spOwogCXRjcF9zeW5jX21zcyhuZXdzaywgZHN0X210dShkc3QpKTsKLQluZXd0cC0+YWR2bXNzID0gZHN0X21ldHJpYyhkc3QsIFJUQVhfQURWTVNTKTsKKwluZXd0cC0+YWR2bXNzID0gZHN0X21ldHJpY19hZHZtc3MoZHN0KTsKIAlpZiAodGNwX3NrKHNrKS0+cnhfb3B0LnVzZXJfbXNzICYmCiAJICAgIHRjcF9zayhzayktPnJ4X29wdC51c2VyX21zcyA8IG5ld3RwLT5hZHZtc3MpCiAJCW5ld3RwLT5hZHZtc3MgPSB0Y3Bfc2soc2spLT5yeF9vcHQudXNlcl9tc3M7CkBAIC0xNzYzLDY0ICsxNzU3LDQwIEBACiAJZ290byBkaXNjYXJkX2l0OwogfQogCi0vKiBWSidzIGlkZWEuIFNhdmUgbGFzdCB0aW1lc3RhbXAgc2VlbiBmcm9tIHRoaXMgZGVzdGluYXRpb24KLSAqIGFuZCBob2xkIGl0IGF0IGxlYXN0IGZvciBub3JtYWwgdGltZXdhaXQgaW50ZXJ2YWwgdG8gdXNlIGZvciBkdXBsaWNhdGUKLSAqIHNlZ21lbnQgZGV0ZWN0aW9uIGluIHN1YnNlcXVlbnQgY29ubmVjdGlvbnMsIGJlZm9yZSB0aGV5IGVudGVyIHN5bmNocm9uaXplZAotICogc3RhdGUuCi0gKi8KLQotaW50IHRjcF92NF9yZW1lbWJlcl9zdGFtcChzdHJ1Y3Qgc29jayAqc2spCitzdHJ1Y3QgaW5ldF9wZWVyICp0Y3BfdjRfZ2V0X3BlZXIoc3RydWN0IHNvY2sgKnNrLCBib29sICpyZWxlYXNlX2l0KQogeworCXN0cnVjdCBydGFibGUgKnJ0ID0gKHN0cnVjdCBydGFibGUgKikgX19za19kc3RfZ2V0KHNrKTsKIAlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7Ci0Jc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7Ci0Jc3RydWN0IHJ0YWJsZSAqcnQgPSAoc3RydWN0IHJ0YWJsZSAqKV9fc2tfZHN0X2dldChzayk7Ci0Jc3RydWN0IGluZXRfcGVlciAqcGVlciA9IE5VTEw7Ci0JaW50IHJlbGVhc2VfaXQgPSAwOworCXN0cnVjdCBpbmV0X3BlZXIgKnBlZXI7CiAKIAlpZiAoIXJ0IHx8IHJ0LT5ydF9kc3QgIT0gaW5ldC0+aW5ldF9kYWRkcikgewotCQlwZWVyID0gaW5ldF9nZXRwZWVyKGluZXQtPmluZXRfZGFkZHIsIDEpOwotCQlyZWxlYXNlX2l0ID0gMTsKKwkJcGVlciA9IGluZXRfZ2V0cGVlcl92NChpbmV0LT5pbmV0X2RhZGRyLCAxKTsKKwkJKnJlbGVhc2VfaXQgPSB0cnVlOwogCX0gZWxzZSB7CiAJCWlmICghcnQtPnBlZXIpCiAJCQlydF9iaW5kX3BlZXIocnQsIDEpOwogCQlwZWVyID0gcnQtPnBlZXI7CisJCSpyZWxlYXNlX2l0ID0gZmFsc2U7CiAJfQogCi0JaWYgKHBlZXIpIHsKLQkJaWYgKChzMzIpKHBlZXItPnRjcF90cyAtIHRwLT5yeF9vcHQudHNfcmVjZW50KSA8PSAwIHx8Ci0JCSAgICAoKHUzMilnZXRfc2Vjb25kcygpIC0gcGVlci0+dGNwX3RzX3N0YW1wID4gVENQX1BBV1NfTVNMICYmCi0JCSAgICAgcGVlci0+dGNwX3RzX3N0YW1wIDw9ICh1MzIpdHAtPnJ4X29wdC50c19yZWNlbnRfc3RhbXApKSB7Ci0JCQlwZWVyLT50Y3BfdHNfc3RhbXAgPSAodTMyKXRwLT5yeF9vcHQudHNfcmVjZW50X3N0YW1wOwotCQkJcGVlci0+dGNwX3RzID0gdHAtPnJ4X29wdC50c19yZWNlbnQ7Ci0JCX0KLQkJaWYgKHJlbGVhc2VfaXQpCi0JCQlpbmV0X3B1dHBlZXIocGVlcik7Ci0JCXJldHVybiAxOwotCX0KLQotCXJldHVybiAwOworCXJldHVybiBwZWVyOwogfQotRVhQT1JUX1NZTUJPTCh0Y3BfdjRfcmVtZW1iZXJfc3RhbXApOworRVhQT1JUX1NZTUJPTCh0Y3BfdjRfZ2V0X3BlZXIpOwogCi1pbnQgdGNwX3Y0X3R3X3JlbWVtYmVyX3N0YW1wKHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sgKnR3KQordm9pZCAqdGNwX3Y0X3R3X2dldF9wZWVyKHN0cnVjdCBzb2NrICpzaykKIHsKLQlzdHJ1Y3QgaW5ldF9wZWVyICpwZWVyID0gaW5ldF9nZXRwZWVyKHR3LT50d19kYWRkciwgMSk7CisJc3RydWN0IGluZXRfdGltZXdhaXRfc29jayAqdHcgPSBpbmV0X3R3c2soc2spOwogCi0JaWYgKHBlZXIpIHsKLQkJY29uc3Qgc3RydWN0IHRjcF90aW1ld2FpdF9zb2NrICp0Y3B0dyA9IHRjcF90d3NrKChzdHJ1Y3Qgc29jayAqKXR3KTsKLQotCQlpZiAoKHMzMikocGVlci0+dGNwX3RzIC0gdGNwdHctPnR3X3RzX3JlY2VudCkgPD0gMCB8fAotCQkgICAgKCh1MzIpZ2V0X3NlY29uZHMoKSAtIHBlZXItPnRjcF90c19zdGFtcCA+IFRDUF9QQVdTX01TTCAmJgotCQkgICAgIHBlZXItPnRjcF90c19zdGFtcCA8PSAodTMyKXRjcHR3LT50d190c19yZWNlbnRfc3RhbXApKSB7Ci0JCQlwZWVyLT50Y3BfdHNfc3RhbXAgPSAodTMyKXRjcHR3LT50d190c19yZWNlbnRfc3RhbXA7Ci0JCQlwZWVyLT50Y3BfdHMJICAgPSB0Y3B0dy0+dHdfdHNfcmVjZW50OwotCQl9Ci0JCWluZXRfcHV0cGVlcihwZWVyKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JcmV0dXJuIDA7CisJcmV0dXJuIGluZXRfZ2V0cGVlcl92NCh0dy0+dHdfZGFkZHIsIDEpOwogfQorRVhQT1JUX1NZTUJPTCh0Y3BfdjRfdHdfZ2V0X3BlZXIpOworCitzdGF0aWMgc3RydWN0IHRpbWV3YWl0X3NvY2tfb3BzIHRjcF90aW1ld2FpdF9zb2NrX29wcyA9IHsKKwkudHdza19vYmpfc2l6ZQk9IHNpemVvZihzdHJ1Y3QgdGNwX3RpbWV3YWl0X3NvY2spLAorCS50d3NrX3VuaXF1ZQk9IHRjcF90d3NrX3VuaXF1ZSwKKwkudHdza19kZXN0cnVjdG9yPSB0Y3BfdHdza19kZXN0cnVjdG9yLAorCS50d3NrX2dldHBlZXIJPSB0Y3BfdjRfdHdfZ2V0X3BlZXIsCit9OwogCiBjb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2tfYWZfb3BzIGlwdjRfc3BlY2lmaWMgPSB7CiAJLnF1ZXVlX3htaXQJICAgPSBpcF9xdWV1ZV94bWl0LApAQCAtMTgyOCw3ICsxNzk4LDcgQEAKIAkucmVidWlsZF9oZWFkZXIJICAgPSBpbmV0X3NrX3JlYnVpbGRfaGVhZGVyLAogCS5jb25uX3JlcXVlc3QJICAgPSB0Y3BfdjRfY29ubl9yZXF1ZXN0LAogCS5zeW5fcmVjdl9zb2NrCSAgID0gdGNwX3Y0X3N5bl9yZWN2X3NvY2ssCi0JLnJlbWVtYmVyX3N0YW1wCSAgID0gdGNwX3Y0X3JlbWVtYmVyX3N0YW1wLAorCS5nZXRfcGVlcgkgICA9IHRjcF92NF9nZXRfcGVlciwKIAkubmV0X2hlYWRlcl9sZW4JICAgPSBzaXplb2Yoc3RydWN0IGlwaGRyKSwKIAkuc2V0c29ja29wdAkgICA9IGlwX3NldHNvY2tvcHQsCiAJLmdldHNvY2tvcHQJICAgPSBpcF9nZXRzb2Nrb3B0LApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jIGIvbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jCmluZGV4IGE2NjczNWYuLjgwYjFmODAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9taW5pc29ja3MuYworKysgYi9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMKQEAgLTQ5LDYgKzQ5LDU2IEBACiB9OwogRVhQT1JUX1NZTUJPTF9HUEwodGNwX2RlYXRoX3Jvdyk7CiAKKy8qIFZKJ3MgaWRlYS4gU2F2ZSBsYXN0IHRpbWVzdGFtcCBzZWVuIGZyb20gdGhpcyBkZXN0aW5hdGlvbgorICogYW5kIGhvbGQgaXQgYXQgbGVhc3QgZm9yIG5vcm1hbCB0aW1ld2FpdCBpbnRlcnZhbCB0byB1c2UgZm9yIGR1cGxpY2F0ZQorICogc2VnbWVudCBkZXRlY3Rpb24gaW4gc3Vic2VxdWVudCBjb25uZWN0aW9ucywgYmVmb3JlIHRoZXkgZW50ZXIgc3luY2hyb25pemVkCisgKiBzdGF0ZS4KKyAqLworCitzdGF0aWMgaW50IHRjcF9yZW1lbWJlcl9zdGFtcChzdHJ1Y3Qgc29jayAqc2spCit7CisJY29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spOworCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOworCXN0cnVjdCBpbmV0X3BlZXIgKnBlZXI7CisJYm9vbCByZWxlYXNlX2l0OworCisJcGVlciA9IGljc2stPmljc2tfYWZfb3BzLT5nZXRfcGVlcihzaywgJnJlbGVhc2VfaXQpOworCWlmIChwZWVyKSB7CisJCWlmICgoczMyKShwZWVyLT50Y3BfdHMgLSB0cC0+cnhfb3B0LnRzX3JlY2VudCkgPD0gMCB8fAorCQkgICAgKCh1MzIpZ2V0X3NlY29uZHMoKSAtIHBlZXItPnRjcF90c19zdGFtcCA+IFRDUF9QQVdTX01TTCAmJgorCQkgICAgIHBlZXItPnRjcF90c19zdGFtcCA8PSAodTMyKXRwLT5yeF9vcHQudHNfcmVjZW50X3N0YW1wKSkgeworCQkJcGVlci0+dGNwX3RzX3N0YW1wID0gKHUzMil0cC0+cnhfb3B0LnRzX3JlY2VudF9zdGFtcDsKKwkJCXBlZXItPnRjcF90cyA9IHRwLT5yeF9vcHQudHNfcmVjZW50OworCQl9CisJCWlmIChyZWxlYXNlX2l0KQorCQkJaW5ldF9wdXRwZWVyKHBlZXIpOworCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0Y3BfdHdfcmVtZW1iZXJfc3RhbXAoc3RydWN0IGluZXRfdGltZXdhaXRfc29jayAqdHcpCit7CisJc3RydWN0IHNvY2sgKnNrID0gKHN0cnVjdCBzb2NrICopIHR3OworCXN0cnVjdCBpbmV0X3BlZXIgKnBlZXI7CisKKwlwZWVyID0gdHdza19nZXRwZWVyKHNrKTsKKwlpZiAocGVlcikgeworCQljb25zdCBzdHJ1Y3QgdGNwX3RpbWV3YWl0X3NvY2sgKnRjcHR3ID0gdGNwX3R3c2soc2spOworCisJCWlmICgoczMyKShwZWVyLT50Y3BfdHMgLSB0Y3B0dy0+dHdfdHNfcmVjZW50KSA8PSAwIHx8CisJCSAgICAoKHUzMilnZXRfc2Vjb25kcygpIC0gcGVlci0+dGNwX3RzX3N0YW1wID4gVENQX1BBV1NfTVNMICYmCisJCSAgICAgcGVlci0+dGNwX3RzX3N0YW1wIDw9ICh1MzIpdGNwdHctPnR3X3RzX3JlY2VudF9zdGFtcCkpIHsKKwkJCXBlZXItPnRjcF90c19zdGFtcCA9ICh1MzIpdGNwdHctPnR3X3RzX3JlY2VudF9zdGFtcDsKKwkJCXBlZXItPnRjcF90cwkgICA9IHRjcHR3LT50d190c19yZWNlbnQ7CisJCX0KKwkJaW5ldF9wdXRwZWVyKHBlZXIpOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBfX2lubGluZV9fIGludCB0Y3BfaW5fd2luZG93KHUzMiBzZXEsIHUzMiBlbmRfc2VxLCB1MzIgc193aW4sIHUzMiBlX3dpbikKIHsKIAlpZiAoc2VxID09IHNfd2luKQpAQCAtMTQ5LDE0ICsxOTksOSBAQAogCQkJdGNwdHctPnR3X3RzX3JlY2VudAkgID0gdG1wX29wdC5yY3ZfdHN2YWw7CiAJCX0KIAotCQkvKiBJIGFtIHNoYW1lZCwgYnV0IGZhaWxlZCB0byBtYWtlIGl0IG1vcmUgZWxlZ2FudC4KLQkJICogWWVzLCBpdCBpcyBkaXJlY3QgcmVmZXJlbmNlIHRvIElQLCB3aGljaCBpcyBpbXBvc3NpYmxlCi0JCSAqIHRvIGdlbmVyYWxpemUgdG8gSVB2Ni4gVGFraW5nIGludG8gYWNjb3VudCB0aGF0IElQdjYKLQkJICogZG8gbm90IHVuZGVyc3RhbmQgcmVjeWNsaW5nIGluIGFueSBjYXNlLCBpdCBub3QKLQkJICogYSBiaWcgcHJvYmxlbSBpbiBwcmFjdGljZS4gLS1BTksgKi8KLQkJaWYgKHR3LT50d19mYW1pbHkgPT0gQUZfSU5FVCAmJgotCQkgICAgdGNwX2RlYXRoX3Jvdy5zeXNjdGxfdHdfcmVjeWNsZSAmJiB0Y3B0dy0+dHdfdHNfcmVjZW50X3N0YW1wICYmCi0JCSAgICB0Y3BfdjRfdHdfcmVtZW1iZXJfc3RhbXAodHcpKQorCQlpZiAodGNwX2RlYXRoX3Jvdy5zeXNjdGxfdHdfcmVjeWNsZSAmJgorCQkgICAgdGNwdHctPnR3X3RzX3JlY2VudF9zdGFtcCAmJgorCQkgICAgdGNwX3R3X3JlbWVtYmVyX3N0YW1wKHR3KSkKIAkJCWluZXRfdHdza19zY2hlZHVsZSh0dywgJnRjcF9kZWF0aF9yb3csIHR3LT50d190aW1lb3V0LAogCQkJCQkgICBUQ1BfVElNRVdBSVRfTEVOKTsKIAkJZWxzZQpAQCAtMjc0LDcgKzMxOSw3IEBACiAJaW50IHJlY3ljbGVfb2sgPSAwOwogCiAJaWYgKHRjcF9kZWF0aF9yb3cuc3lzY3RsX3R3X3JlY3ljbGUgJiYgdHAtPnJ4X29wdC50c19yZWNlbnRfc3RhbXApCi0JCXJlY3ljbGVfb2sgPSBpY3NrLT5pY3NrX2FmX29wcy0+cmVtZW1iZXJfc3RhbXAoc2spOworCQlyZWN5Y2xlX29rID0gdGNwX3JlbWVtYmVyX3N0YW1wKHNrKTsKIAogCWlmICh0Y3BfZGVhdGhfcm93LnR3X2NvdW50IDwgdGNwX2RlYXRoX3Jvdy5zeXNjdGxfbWF4X3R3X2J1Y2tldHMpCiAJCXR3ID0gaW5ldF90d3NrX2FsbG9jKHNrLCBzdGF0ZSk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMgYi9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKaW5kZXggNjFjMjQ2My4uZGM3YzA5NiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX291dHB1dC5jCisrKyBiL25ldC9pcHY0L3RjcF9vdXRwdXQuYwpAQCAtNTUsNyArNTUsNyBAQAogaW50IHN5c2N0bF90Y3BfdHNvX3dpbl9kaXZpc29yIF9fcmVhZF9tb3N0bHkgPSAzOwogCiBpbnQgc3lzY3RsX3RjcF9tdHVfcHJvYmluZyBfX3JlYWRfbW9zdGx5ID0gMDsKLWludCBzeXNjdGxfdGNwX2Jhc2VfbXNzIF9fcmVhZF9tb3N0bHkgPSA1MTI7CitpbnQgc3lzY3RsX3RjcF9iYXNlX21zcyBfX3JlYWRfbW9zdGx5ID0gVENQX0JBU0VfTVNTOwogCiAvKiBCeSBkZWZhdWx0LCBSRkMyODYxIGJlaGF2aW9yLiAgKi8KIGludCBzeXNjdGxfdGNwX3Nsb3dfc3RhcnRfYWZ0ZXJfaWRsZSBfX3JlYWRfbW9zdGx5ID0gMTsKQEAgLTExOSw5ICsxMTksMTMgQEAKIAlzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QgPSBfX3NrX2RzdF9nZXQoc2spOwogCWludCBtc3MgPSB0cC0+YWR2bXNzOwogCi0JaWYgKGRzdCAmJiBkc3RfbWV0cmljKGRzdCwgUlRBWF9BRFZNU1MpIDwgbXNzKSB7Ci0JCW1zcyA9IGRzdF9tZXRyaWMoZHN0LCBSVEFYX0FEVk1TUyk7Ci0JCXRwLT5hZHZtc3MgPSBtc3M7CisJaWYgKGRzdCkgeworCQl1bnNpZ25lZCBpbnQgbWV0cmljID0gZHN0X21ldHJpY19hZHZtc3MoZHN0KTsKKworCQlpZiAobWV0cmljIDwgbXNzKSB7CisJCQltc3MgPSBtZXRyaWM7CisJCQl0cC0+YWR2bXNzID0gbXNzOworCQl9CiAJfQogCiAJcmV0dXJuIChfX3UxNiltc3M7CkBAIC0yMjQsMTAgKzIyOCwxNSBAQAogCQl9CiAJfQogCi0JLyogU2V0IGluaXRpYWwgd2luZG93IHRvIHZhbHVlIGVub3VnaCBmb3Igc2VuZGVycywgZm9sbG93aW5nIFJGQzU2ODEuICovCisJLyogU2V0IGluaXRpYWwgd2luZG93IHRvIGEgdmFsdWUgZW5vdWdoIGZvciBzZW5kZXJzIHN0YXJ0aW5nIHdpdGgKKwkgKiBpbml0aWFsIGNvbmdlc3Rpb24gd2luZG93IG9mIFRDUF9ERUZBVUxUX0lOSVRfUkNWV05ELiBQbGFjZQorCSAqIGEgbGltaXQgb24gdGhlIGluaXRpYWwgd2luZG93IHdoZW4gbXNzIGlzIGxhcmdlciB0aGFuIDE0NjAuCisJICovCiAJaWYgKG1zcyA+ICgxIDw8ICpyY3Zfd3NjYWxlKSkgewotCQlpbnQgaW5pdF9jd25kID0gcmZjMzM5MF9ieXRlc190b19wYWNrZXRzKG1zcyk7Ci0KKwkJaW50IGluaXRfY3duZCA9IFRDUF9ERUZBVUxUX0lOSVRfUkNWV05EOworCQlpZiAobXNzID4gMTQ2MCkKKwkJCWluaXRfY3duZCA9CisJCQltYXhfdCh1MzIsICgxNDYwICogVENQX0RFRkFVTFRfSU5JVF9SQ1ZXTkQpIC8gbXNzLCAyKTsKIAkJLyogd2hlbiBpbml0aWFsaXppbmcgdXNlIHRoZSB2YWx1ZSBmcm9tIGluaXRfcmN2X3duZAogCQkgKiByYXRoZXIgdGhhbiB0aGUgZGVmYXVsdCBmcm9tIGFib3ZlCiAJCSAqLwpAQCAtODI0LDggKzgzMywxMSBAQAogCQkJCQkJCSAgICZtZDUpOwogCXRjcF9oZWFkZXJfc2l6ZSA9IHRjcF9vcHRpb25zX3NpemUgKyBzaXplb2Yoc3RydWN0IHRjcGhkcik7CiAKLQlpZiAodGNwX3BhY2tldHNfaW5fZmxpZ2h0KHRwKSA9PSAwKQorCWlmICh0Y3BfcGFja2V0c19pbl9mbGlnaHQodHApID09IDApIHsKIAkJdGNwX2NhX2V2ZW50KHNrLCBDQV9FVkVOVF9UWF9TVEFSVCk7CisJCXNrYi0+b29vX29rYXkgPSAxOworCX0gZWxzZQorCQlza2ItPm9vb19va2F5ID0gMDsKIAogCXNrYl9wdXNoKHNrYiwgdGNwX2hlYWRlcl9zaXplKTsKIAlza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpOwpAQCAtMjQxOSw3ICsyNDMxLDcgQEAKIAogCXNrYl9kc3Rfc2V0KHNrYiwgZHN0X2Nsb25lKGRzdCkpOwogCi0JbXNzID0gZHN0X21ldHJpYyhkc3QsIFJUQVhfQURWTVNTKTsKKwltc3MgPSBkc3RfbWV0cmljX2Fkdm1zcyhkc3QpOwogCWlmICh0cC0+cnhfb3B0LnVzZXJfbXNzICYmIHRwLT5yeF9vcHQudXNlcl9tc3MgPCBtc3MpCiAJCW1zcyA9IHRwLT5yeF9vcHQudXNlcl9tc3M7CiAKQEAgLTI1NTMsNyArMjU2NSw3IEBACiAKIAlpZiAoIXRwLT53aW5kb3dfY2xhbXApCiAJCXRwLT53aW5kb3dfY2xhbXAgPSBkc3RfbWV0cmljKGRzdCwgUlRBWF9XSU5ET1cpOwotCXRwLT5hZHZtc3MgPSBkc3RfbWV0cmljKGRzdCwgUlRBWF9BRFZNU1MpOworCXRwLT5hZHZtc3MgPSBkc3RfbWV0cmljX2Fkdm1zcyhkc3QpOwogCWlmICh0cC0+cnhfb3B0LnVzZXJfbXNzICYmIHRwLT5yeF9vcHQudXNlcl9tc3MgPCB0cC0+YWR2bXNzKQogCQl0cC0+YWR2bXNzID0gdHAtPnJ4X29wdC51c2VyX21zczsKIApAQCAtMjU5Niw2ICsyNjA4LDcgQEAKIHsKIAlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqYnVmZjsKKwlpbnQgZXJyOwogCiAJdGNwX2Nvbm5lY3RfaW5pdChzayk7CiAKQEAgLTI2MTgsNyArMjYzMSw5IEBACiAJc2stPnNrX3dtZW1fcXVldWVkICs9IGJ1ZmYtPnRydWVzaXplOwogCXNrX21lbV9jaGFyZ2Uoc2ssIGJ1ZmYtPnRydWVzaXplKTsKIAl0cC0+cGFja2V0c19vdXQgKz0gdGNwX3NrYl9wY291bnQoYnVmZik7Ci0JdGNwX3RyYW5zbWl0X3NrYihzaywgYnVmZiwgMSwgc2stPnNrX2FsbG9jYXRpb24pOworCWVyciA9IHRjcF90cmFuc21pdF9za2Ioc2ssIGJ1ZmYsIDEsIHNrLT5za19hbGxvY2F0aW9uKTsKKwlpZiAoZXJyID09IC1FQ09OTlJFRlVTRUQpCisJCXJldHVybiBlcnI7CiAKIAkvKiBXZSBjaGFuZ2UgdHAtPnNuZF9ueHQgYWZ0ZXIgdGhlIHRjcF90cmFuc21pdF9za2IoKSBjYWxsCiAJICogaW4gb3JkZXIgdG8gbWFrZSB0aGlzIHBhY2tldCBnZXQgY291bnRlZCBpbiB0Y3BPdXRTZWdzLgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX3Byb2JlLmMgYi9uZXQvaXB2NC90Y3BfcHJvYmUuYwppbmRleCA2MjExZTIxLi44NWVlN2ViIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfcHJvYmUuYworKysgYi9uZXQvaXB2NC90Y3BfcHJvYmUuYwpAQCAtMTU0LDcgKzE1NCw3IEBACiAJc3RydWN0IHRpbWVzcGVjIHR2CiAJCT0ga3RpbWVfdG9fdGltZXNwZWMoa3RpbWVfc3ViKHAtPnRzdGFtcCwgdGNwX3Byb2JlLnN0YXJ0KSk7CiAKLQlyZXR1cm4gc25wcmludGYodGJ1ZiwgbiwKKwlyZXR1cm4gc2NucHJpbnRmKHRidWYsIG4sCiAJCQkiJWx1LiUwOWx1ICVwSTQ6JXUgJXBJNDoldSAlZCAlI3ggJSN4ICV1ICV1ICV1ICV1XG4iLAogCQkJKHVuc2lnbmVkIGxvbmcpIHR2LnR2X3NlYywKIAkJCSh1bnNpZ25lZCBsb25nKSB0di50dl9uc2VjLApAQCAtMTc0LDcgKzE3NCw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJd2hpbGUgKGNudCA8IGxlbikgewotCQljaGFyIHRidWZbMTI4XTsKKwkJY2hhciB0YnVmWzE2NF07CiAJCWludCB3aWR0aDsKIAogCQkvKiBXYWl0IGZvciBkYXRhIGluIGJ1ZmZlciAqLwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdWRwLmMgYi9uZXQvaXB2NC91ZHAuYwppbmRleCAyZDNkZWQ0Li44MTU3YjE3IDEwMDY0NAotLS0gYS9uZXQvaXB2NC91ZHAuYworKysgYi9uZXQvaXB2NC91ZHAuYwpAQCAtNDMwLDcgKzQzMCw3IEBACiAKIAlpZiAocmVzdWx0KSB7CiBleGFjdF9tYXRjaDoKLQkJaWYgKHVubGlrZWx5KCFhdG9taWNfaW5jX25vdF96ZXJvKCZyZXN1bHQtPnNrX3JlZmNudCkpKQorCQlpZiAodW5saWtlbHkoIWF0b21pY19pbmNfbm90X3plcm9faGludCgmcmVzdWx0LT5za19yZWZjbnQsIDIpKSkKIAkJCXJlc3VsdCA9IE5VTEw7CiAJCWVsc2UgaWYgKHVubGlrZWx5KGNvbXB1dGVfc2NvcmUyKHJlc3VsdCwgbmV0LCBzYWRkciwgc3BvcnQsCiAJCQkJICBkYWRkciwgaG51bSwgZGlmKSA8IGJhZG5lc3MpKSB7CkBAIC01MDAsNyArNTAwLDcgQEAKIAkJZ290byBiZWdpbjsKIAogCWlmIChyZXN1bHQpIHsKLQkJaWYgKHVubGlrZWx5KCFhdG9taWNfaW5jX25vdF96ZXJvKCZyZXN1bHQtPnNrX3JlZmNudCkpKQorCQlpZiAodW5saWtlbHkoIWF0b21pY19pbmNfbm90X3plcm9faGludCgmcmVzdWx0LT5za19yZWZjbnQsIDIpKSkKIAkJCXJlc3VsdCA9IE5VTEw7CiAJCWVsc2UgaWYgKHVubGlrZWx5KGNvbXB1dGVfc2NvcmUocmVzdWx0LCBuZXQsIHNhZGRyLCBobnVtLCBzcG9ydCwKIAkJCQkgIGRhZGRyLCBkcG9ydCwgZGlmKSA8IGJhZG5lc3MpKSB7CkBAIC04OTAsMTUgKzg5MCwxMyBAQAogCWlmIChydCA9PSBOVUxMKSB7CiAJCXN0cnVjdCBmbG93aSBmbCA9IHsgLm9pZiA9IGlwYy5vaWYsCiAJCQkJICAgIC5tYXJrID0gc2stPnNrX21hcmssCi0JCQkJICAgIC5ubF91ID0geyAuaXA0X3UgPQotCQkJCQkgICAgICB7IC5kYWRkciA9IGZhZGRyLAotCQkJCQkJLnNhZGRyID0gc2FkZHIsCi0JCQkJCQkudG9zID0gdG9zIH0gfSwKKwkJCQkgICAgLmZsNF9kc3QgPSBmYWRkciwKKwkJCQkgICAgLmZsNF9zcmMgPSBzYWRkciwKKwkJCQkgICAgLmZsNF90b3MgPSB0b3MsCiAJCQkJICAgIC5wcm90byA9IHNrLT5za19wcm90b2NvbCwKIAkJCQkgICAgLmZsYWdzID0gaW5ldF9za19mbG93aV9mbGFncyhzayksCi0JCQkJICAgIC51bGlfdSA9IHsgLnBvcnRzID0KLQkJCQkJICAgICAgIHsgLnNwb3J0ID0gaW5ldC0+aW5ldF9zcG9ydCwKLQkJCQkJCSAuZHBvcnQgPSBkcG9ydCB9IH0gfTsKKwkJCQkgICAgLmZsX2lwX3Nwb3J0ID0gaW5ldC0+aW5ldF9zcG9ydCwKKwkJCQkgICAgLmZsX2lwX2Rwb3J0ID0gZHBvcnQgfTsKIAkJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spOwogCiAJCXNlY3VyaXR5X3NrX2NsYXNzaWZ5X2Zsb3coc2ssICZmbCk7CkBAIC0yMjI5LDcgKzIyMjcsNyBAQAogCS8qIERvIHNvZnR3YXJlIFVGTy4gQ29tcGxldGUgYW5kIGZpbGwgaW4gdGhlIFVEUCBjaGVja3N1bSBhcyBIVyBjYW5ub3QKIAkgKiBkbyBjaGVja3N1bSBvZiBVRFAgcGFja2V0cyBzZW50IGFzIG11bHRpcGxlIElQIGZyYWdtZW50cy4KIAkgKi8KLQlvZmZzZXQgPSBza2ItPmNzdW1fc3RhcnQgLSBza2JfaGVhZHJvb20oc2tiKTsKKwlvZmZzZXQgPSBza2JfY2hlY2tzdW1fc3RhcnRfb2Zmc2V0KHNrYik7CiAJY3N1bSA9IHNrYl9jaGVja3N1bShza2IsIG9mZnNldCwgc2tiLT5sZW4gLSBvZmZzZXQsIDApOwogCW9mZnNldCArPSBza2ItPmNzdW1fb2Zmc2V0OwogCSooX19zdW0xNiAqKShza2ItPmRhdGEgKyBvZmZzZXQpID0gY3N1bV9mb2xkKGNzdW0pOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQveGZybTRfbW9kZV90dW5uZWwuYyBiL25ldC9pcHY0L3hmcm00X21vZGVfdHVubmVsLmMKaW5kZXggNmYzNjg0MTMuLjUzNDk3MmUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3hmcm00X21vZGVfdHVubmVsLmMKKysrIGIvbmV0L2lwdjQveGZybTRfbW9kZV90dW5uZWwuYwpAQCAtNTYsNyArNTYsNyBAQAogCQkwIDogKFhGUk1fTU9ERV9TS0JfQ0Ioc2tiKS0+ZnJhZ19vZmYgJiBodG9ucyhJUF9ERikpOwogCWlwX3NlbGVjdF9pZGVudCh0b3BfaXBoLCBkc3QtPmNoaWxkLCBOVUxMKTsKIAotCXRvcF9pcGgtPnR0bCA9IGRzdF9tZXRyaWMoZHN0LT5jaGlsZCwgUlRBWF9IT1BMSU1JVCk7CisJdG9wX2lwaC0+dHRsID0gaXA0X2RzdF9ob3BsaW1pdChkc3QtPmNoaWxkKTsKIAogCXRvcF9pcGgtPnNhZGRyID0geC0+cHJvcHMuc2FkZHIuYTQ7CiAJdG9wX2lwaC0+ZGFkZHIgPSB4LT5pZC5kYWRkci5hNDsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3hmcm00X3BvbGljeS5jIGIvbmV0L2lwdjQveGZybTRfcG9saWN5LmMKaW5kZXggNDQ2NGYzYi4uYjA1N2Q0MCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQveGZybTRfcG9saWN5LmMKKysrIGIvbmV0L2lwdjQveGZybTRfcG9saWN5LmMKQEAgLTExLDYgKzExLDcgQEAKICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaWZfdHVubmVsLmg+CiAjaW5jbHVkZSA8bmV0L2RzdC5oPgogI2luY2x1ZGUgPG5ldC94ZnJtLmg+CiAjaW5jbHVkZSA8bmV0L2lwLmg+CkBAIC0yMiwxMiArMjMsOCBAQAogCQkJCQkgIHhmcm1fYWRkcmVzc190ICpkYWRkcikKIHsKIAlzdHJ1Y3QgZmxvd2kgZmwgPSB7Ci0JCS5ubF91ID0gewotCQkJLmlwNF91ID0gewotCQkJCS50b3MgPSB0b3MsCi0JCQkJLmRhZGRyID0gZGFkZHItPmE0LAotCQkJfSwKLQkJfSwKKwkJLmZsNF9kc3QgPSBkYWRkci0+YTQsCisJCS5mbDRfdG9zID0gdG9zLAogCX07CiAJc3RydWN0IGRzdF9lbnRyeSAqZHN0OwogCXN0cnVjdCBydGFibGUgKnJ0OwpAQCAtODAsMTAgKzc3LDYgQEAKIAl4ZHN0LT51LmRzdC5kZXYgPSBkZXY7CiAJZGV2X2hvbGQoZGV2KTsKIAotCXhkc3QtPnUucnQuaWRldiA9IGluX2Rldl9nZXQoZGV2KTsKLQlpZiAoIXhkc3QtPnUucnQuaWRldikKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KIAl4ZHN0LT51LnJ0LnBlZXIgPSBydC0+cGVlcjsKIAlpZiAocnQtPnBlZXIpCiAJCWF0b21pY19pbmMoJnJ0LT5wZWVyLT5yZWZjbnQpOwpAQCAtMTU4LDYgKzE1MSwyMCBAQAogCQkJCWZsLT5mbF9pcHNlY19zcGkgPSBodG9ubChudG9ocyhpcGNvbXBfaGRyWzFdKSk7CiAJCQl9CiAJCQlicmVhazsKKworCQljYXNlIElQUFJPVE9fR1JFOgorCQkJaWYgKHBza2JfbWF5X3B1bGwoc2tiLCB4cHJ0aCArIDEyIC0gc2tiLT5kYXRhKSkgeworCQkJCV9fYmUxNiAqZ3JlZmxhZ3MgPSAoX19iZTE2ICopeHBydGg7CisJCQkJX19iZTMyICpncmVfaGRyID0gKF9fYmUzMiAqKXhwcnRoOworCisJCQkJaWYgKGdyZWZsYWdzWzBdICYgR1JFX0tFWSkgeworCQkJCQlpZiAoZ3JlZmxhZ3NbMF0gJiBHUkVfQ1NVTSkKKwkJCQkJCWdyZV9oZHIrKzsKKwkJCQkJZmwtPmZsX2dyZV9rZXkgPSBncmVfaGRyWzFdOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCiAJCWRlZmF1bHQ6CiAJCQlmbC0+ZmxfaXBzZWNfc3BpID0gMDsKIAkJCWJyZWFrOwpAQCAtMTg5LDggKzE5Niw2IEBACiB7CiAJc3RydWN0IHhmcm1fZHN0ICp4ZHN0ID0gKHN0cnVjdCB4ZnJtX2RzdCAqKWRzdDsKIAotCWlmIChsaWtlbHkoeGRzdC0+dS5ydC5pZGV2KSkKLQkJaW5fZGV2X3B1dCh4ZHN0LT51LnJ0LmlkZXYpOwogCWlmIChsaWtlbHkoeGRzdC0+dS5ydC5wZWVyKSkKIAkJaW5ldF9wdXRwZWVyKHhkc3QtPnUucnQucGVlcik7CiAJeGZybV9kc3RfZGVzdHJveSh4ZHN0KTsKQEAgLTE5OSwyNyArMjA0LDkgQEAKIHN0YXRpYyB2b2lkIHhmcm00X2RzdF9pZmRvd24oc3RydWN0IGRzdF9lbnRyeSAqZHN0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJICAgICBpbnQgdW5yZWdpc3RlcikKIHsKLQlzdHJ1Y3QgeGZybV9kc3QgKnhkc3Q7Ci0KIAlpZiAoIXVucmVnaXN0ZXIpCiAJCXJldHVybjsKIAotCXhkc3QgPSAoc3RydWN0IHhmcm1fZHN0ICopZHN0OwotCWlmICh4ZHN0LT51LnJ0LmlkZXYtPmRldiA9PSBkZXYpIHsKLQkJc3RydWN0IGluX2RldmljZSAqbG9vcGJhY2tfaWRldiA9Ci0JCQlpbl9kZXZfZ2V0KGRldl9uZXQoZGV2KS0+bG9vcGJhY2tfZGV2KTsKLQkJQlVHX09OKCFsb29wYmFja19pZGV2KTsKLQotCQlkbyB7Ci0JCQlpbl9kZXZfcHV0KHhkc3QtPnUucnQuaWRldik7Ci0JCQl4ZHN0LT51LnJ0LmlkZXYgPSBsb29wYmFja19pZGV2OwotCQkJaW5fZGV2X2hvbGQobG9vcGJhY2tfaWRldik7Ci0JCQl4ZHN0ID0gKHN0cnVjdCB4ZnJtX2RzdCAqKXhkc3QtPnUuZHN0LmNoaWxkOwotCQl9IHdoaWxlICh4ZHN0LT51LmRzdC54ZnJtKTsKLQotCQlfX2luX2Rldl9wdXQobG9vcGJhY2tfaWRldik7Ci0JfQotCiAJeGZybV9kc3RfaWZkb3duKGRzdCwgZGV2KTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWRkcmNvbmYuYyBiL25ldC9pcHY2L2FkZHJjb25mLmMKaW5kZXggODQ4YjM1NS4uNWIxODljOSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvYWRkcmNvbmYuYworKysgYi9uZXQvaXB2Ni9hZGRyY29uZi5jCkBAIC0yNjcyLDcgKzI2NzIsNiBAQAogCS8qIEZsdXNoIHJvdXRlcyBpZiBkZXZpY2UgaXMgYmVpbmcgcmVtb3ZlZCBvciBpdCBpcyBub3QgbG9vcGJhY2sgKi8KIAlpZiAoaG93IHx8ICEoZGV2LT5mbGFncyAmIElGRl9MT09QQkFDSykpCiAJCXJ0Nl9pZmRvd24obmV0LCBkZXYpOwotCW5laWdoX2lmZG93bigmbmRfdGJsLCBkZXYpOwogCiAJaWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTsKIAlpZiAoaWRldiA9PSBOVUxMKQpAQCAtMzgzOCw2ICszODM3LDE1IEBACiAJYXJyYXlbREVWQ09ORl9GT1JDRV9UTExBT10gPSBjbmYtPmZvcmNlX3RsbGFvOwogfQogCitzdGF0aWMgaW5saW5lIHNpemVfdCBpbmV0Nl9pZmxhNl9zaXplKHZvaWQpCit7CisJcmV0dXJuIG5sYV90b3RhbF9zaXplKDQpIC8qIElGTEFfSU5FVDZfRkxBR1MgKi8KKwkgICAgICsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBpZmxhX2NhY2hlaW5mbykpCisJICAgICArIG5sYV90b3RhbF9zaXplKERFVkNPTkZfTUFYICogNCkgLyogSUZMQV9JTkVUNl9DT05GICovCisJICAgICArIG5sYV90b3RhbF9zaXplKElQU1RBVFNfTUlCX01BWCAqIDgpIC8qIElGTEFfSU5FVDZfU1RBVFMgKi8KKwkgICAgICsgbmxhX3RvdGFsX3NpemUoSUNNUDZfTUlCX01BWCAqIDgpOyAvKiBJRkxBX0lORVQ2X0lDTVA2U1RBVFMgKi8KK30KKwogc3RhdGljIGlubGluZSBzaXplX3QgaW5ldDZfaWZfbmxtc2dfc2l6ZSh2b2lkKQogewogCXJldHVybiBOTE1TR19BTElHTihzaXplb2Yoc3RydWN0IGlmaW5mb21zZykpCkBAIC0zODQ1LDEzICszODUzLDcgQEAKIAkgICAgICAgKyBubGFfdG90YWxfc2l6ZShNQVhfQUREUl9MRU4pIC8qIElGTEFfQUREUkVTUyAqLwogCSAgICAgICArIG5sYV90b3RhbF9zaXplKDQpIC8qIElGTEFfTVRVICovCiAJICAgICAgICsgbmxhX3RvdGFsX3NpemUoNCkgLyogSUZMQV9MSU5LICovCi0JICAgICAgICsgbmxhX3RvdGFsX3NpemUoIC8qIElGTEFfUFJPVElORk8gKi8KLQkJCW5sYV90b3RhbF9zaXplKDQpIC8qIElGTEFfSU5FVDZfRkxBR1MgKi8KLQkJCSsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBpZmxhX2NhY2hlaW5mbykpCi0JCQkrIG5sYV90b3RhbF9zaXplKERFVkNPTkZfTUFYICogNCkgLyogSUZMQV9JTkVUNl9DT05GICovCi0JCQkrIG5sYV90b3RhbF9zaXplKElQU1RBVFNfTUlCX01BWCAqIDgpIC8qIElGTEFfSU5FVDZfU1RBVFMgKi8KLQkJCSsgbmxhX3RvdGFsX3NpemUoSUNNUDZfTUlCX01BWCAqIDgpIC8qIElGTEFfSU5FVDZfSUNNUDZTVEFUUyAqLwotCQkgKTsKKwkgICAgICAgKyBubGFfdG90YWxfc2l6ZShpbmV0Nl9pZmxhNl9zaXplKCkpOyAvKiBJRkxBX1BST1RJTkZPICovCiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3NubXA2X2ZpbGxfc3RhdHModTY0ICpzdGF0cywgdm9pZCBfX3BlcmNwdSAqKm1pYiwKQEAgLTM4OTgsMTUgKzM5MDAsNzAgQEAKIAl9CiB9CiAKK3N0YXRpYyBpbnQgaW5ldDZfZmlsbF9pZmxhNl9hdHRycyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KQoreworCXN0cnVjdCBubGF0dHIgKm5sYTsKKwlzdHJ1Y3QgaWZsYV9jYWNoZWluZm8gY2k7CisKKwlOTEFfUFVUX1UzMihza2IsIElGTEFfSU5FVDZfRkxBR1MsIGlkZXYtPmlmX2ZsYWdzKTsKKworCWNpLm1heF9yZWFzbV9sZW4gPSBJUFY2X01BWFBMRU47CisJY2kudHN0YW1wID0gY3N0YW1wX2RlbHRhKGlkZXYtPnRzdGFtcCk7CisJY2kucmVhY2hhYmxlX3RpbWUgPSBqaWZmaWVzX3RvX21zZWNzKGlkZXYtPm5kX3Bhcm1zLT5yZWFjaGFibGVfdGltZSk7CisJY2kucmV0cmFuc190aW1lID0gamlmZmllc190b19tc2VjcyhpZGV2LT5uZF9wYXJtcy0+cmV0cmFuc190aW1lKTsKKwlOTEFfUFVUKHNrYiwgSUZMQV9JTkVUNl9DQUNIRUlORk8sIHNpemVvZihjaSksICZjaSk7CisKKwlubGEgPSBubGFfcmVzZXJ2ZShza2IsIElGTEFfSU5FVDZfQ09ORiwgREVWQ09ORl9NQVggKiBzaXplb2YoczMyKSk7CisJaWYgKG5sYSA9PSBOVUxMKQorCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKKwlpcHY2X3N0b3JlX2RldmNvbmYoJmlkZXYtPmNuZiwgbmxhX2RhdGEobmxhKSwgbmxhX2xlbihubGEpKTsKKworCS8qIFhYWCAtIE1DIG5vdCBpbXBsZW1lbnRlZCAqLworCisJbmxhID0gbmxhX3Jlc2VydmUoc2tiLCBJRkxBX0lORVQ2X1NUQVRTLCBJUFNUQVRTX01JQl9NQVggKiBzaXplb2YodTY0KSk7CisJaWYgKG5sYSA9PSBOVUxMKQorCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKKwlzbm1wNl9maWxsX3N0YXRzKG5sYV9kYXRhKG5sYSksIGlkZXYsIElGTEFfSU5FVDZfU1RBVFMsIG5sYV9sZW4obmxhKSk7CisKKwlubGEgPSBubGFfcmVzZXJ2ZShza2IsIElGTEFfSU5FVDZfSUNNUDZTVEFUUywgSUNNUDZfTUlCX01BWCAqIHNpemVvZih1NjQpKTsKKwlpZiAobmxhID09IE5VTEwpCisJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOworCXNubXA2X2ZpbGxfc3RhdHMobmxhX2RhdGEobmxhKSwgaWRldiwgSUZMQV9JTkVUNl9JQ01QNlNUQVRTLCBubGFfbGVuKG5sYSkpOworCisJcmV0dXJuIDA7CisKK25sYV9wdXRfZmFpbHVyZToKKwlyZXR1cm4gLUVNU0dTSVpFOworfQorCitzdGF0aWMgc2l6ZV90IGluZXQ2X2dldF9saW5rX2FmX3NpemUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlpZiAoIV9faW42X2Rldl9nZXQoZGV2KSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gaW5ldDZfaWZsYTZfc2l6ZSgpOworfQorCitzdGF0aWMgaW50IGluZXQ2X2ZpbGxfbGlua19hZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7CisKKwlpZiAoIWlkZXYpCisJCXJldHVybiAtRU5PREFUQTsKKworCWlmIChpbmV0Nl9maWxsX2lmbGE2X2F0dHJzKHNrYiwgaWRldikgPCAwKQorCQlyZXR1cm4gLUVNU0dTSVpFOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgaW5ldDZfZmlsbF9pZmluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X2RldiAqaWRldiwKIAkJCSAgICAgdTMyIHBpZCwgdTMyIHNlcSwgaW50IGV2ZW50LCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGlkZXYtPmRldjsKLQlzdHJ1Y3QgbmxhdHRyICpubGE7CiAJc3RydWN0IGlmaW5mb21zZyAqaGRyOwogCXN0cnVjdCBubG1zZ2hkciAqbmxoOwogCXZvaWQgKnByb3RvaW5mbzsKLQlzdHJ1Y3QgaWZsYV9jYWNoZWluZm8gY2k7CiAKIAlubGggPSBubG1zZ19wdXQoc2tiLCBwaWQsIHNlcSwgZXZlbnQsIHNpemVvZigqaGRyKSwgZmxhZ3MpOwogCWlmIChubGggPT0gTlVMTCkKQEAgLTM5MzMsMzAgKzM5OTAsOCBAQAogCWlmIChwcm90b2luZm8gPT0gTlVMTCkKIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAKLQlOTEFfUFVUX1UzMihza2IsIElGTEFfSU5FVDZfRkxBR1MsIGlkZXYtPmlmX2ZsYWdzKTsKLQotCWNpLm1heF9yZWFzbV9sZW4gPSBJUFY2X01BWFBMRU47Ci0JY2kudHN0YW1wID0gY3N0YW1wX2RlbHRhKGlkZXYtPnRzdGFtcCk7Ci0JY2kucmVhY2hhYmxlX3RpbWUgPSBqaWZmaWVzX3RvX21zZWNzKGlkZXYtPm5kX3Bhcm1zLT5yZWFjaGFibGVfdGltZSk7Ci0JY2kucmV0cmFuc190aW1lID0gamlmZmllc190b19tc2VjcyhpZGV2LT5uZF9wYXJtcy0+cmV0cmFuc190aW1lKTsKLQlOTEFfUFVUKHNrYiwgSUZMQV9JTkVUNl9DQUNIRUlORk8sIHNpemVvZihjaSksICZjaSk7Ci0KLQlubGEgPSBubGFfcmVzZXJ2ZShza2IsIElGTEFfSU5FVDZfQ09ORiwgREVWQ09ORl9NQVggKiBzaXplb2YoczMyKSk7Ci0JaWYgKG5sYSA9PSBOVUxMKQorCWlmIChpbmV0Nl9maWxsX2lmbGE2X2F0dHJzKHNrYiwgaWRldikgPCAwKQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKLQlpcHY2X3N0b3JlX2RldmNvbmYoJmlkZXYtPmNuZiwgbmxhX2RhdGEobmxhKSwgbmxhX2xlbihubGEpKTsKLQotCS8qIFhYWCAtIE1DIG5vdCBpbXBsZW1lbnRlZCAqLwotCi0JbmxhID0gbmxhX3Jlc2VydmUoc2tiLCBJRkxBX0lORVQ2X1NUQVRTLCBJUFNUQVRTX01JQl9NQVggKiBzaXplb2YodTY0KSk7Ci0JaWYgKG5sYSA9PSBOVUxMKQotCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKLQlzbm1wNl9maWxsX3N0YXRzKG5sYV9kYXRhKG5sYSksIGlkZXYsIElGTEFfSU5FVDZfU1RBVFMsIG5sYV9sZW4obmxhKSk7Ci0KLQlubGEgPSBubGFfcmVzZXJ2ZShza2IsIElGTEFfSU5FVDZfSUNNUDZTVEFUUywgSUNNUDZfTUlCX01BWCAqIHNpemVvZih1NjQpKTsKLQlpZiAobmxhID09IE5VTEwpCi0JCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwotCXNubXA2X2ZpbGxfc3RhdHMobmxhX2RhdGEobmxhKSwgaWRldiwgSUZMQV9JTkVUNl9JQ01QNlNUQVRTLCBubGFfbGVuKG5sYSkpOwogCiAJbmxhX25lc3RfZW5kKHNrYiwgcHJvdG9pbmZvKTsKIAlyZXR1cm4gbmxtc2dfZW5kKHNrYiwgbmxoKTsKQEAgLTQ2MjcsNiArNDY2MiwxMiBAQAogfQogRVhQT1JUX1NZTUJPTCh1bnJlZ2lzdGVyX2luZXQ2YWRkcl9ub3RpZmllcik7CiAKK3N0YXRpYyBzdHJ1Y3QgcnRubF9hZl9vcHMgaW5ldDZfb3BzID0geworCS5mYW1pbHkJCSAgPSBBRl9JTkVUNiwKKwkuZmlsbF9saW5rX2FmCSAgPSBpbmV0Nl9maWxsX2xpbmtfYWYsCisJLmdldF9saW5rX2FmX3NpemUgPSBpbmV0Nl9nZXRfbGlua19hZl9zaXplLAorfTsKKwogLyoKICAqCUluaXQgLyBjbGVhbnVwIGNvZGUKICAqLwpAQCAtNDY3OCw2ICs0NzE5LDEwIEBACiAKIAlhZGRyY29uZl92ZXJpZnkoMCk7CiAKKwllcnIgPSBydG5sX2FmX3JlZ2lzdGVyKCZpbmV0Nl9vcHMpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGVycm91dF9hZjsKKwogCWVyciA9IF9fcnRubF9yZWdpc3RlcihQRl9JTkVUNiwgUlRNX0dFVExJTkssIE5VTEwsIGluZXQ2X2R1bXBfaWZpbmZvKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBlcnJvdXQ7CkBAIC00NjkzLDYgKzQ3MzgsOCBAQAogCiAJcmV0dXJuIDA7CiBlcnJvdXQ6CisJcnRubF9hZl91bnJlZ2lzdGVyKCZpbmV0Nl9vcHMpOworZXJyb3V0X2FmOgogCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZpcHY2X2Rldl9ub3RmKTsKIGVycmxvOgogCXVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmYWRkcmNvbmZfb3BzKTsKQEAgLTQ3MTMsNiArNDc2MCw4IEBACiAKIAlydG5sX2xvY2soKTsKIAorCV9fcnRubF9hZl91bnJlZ2lzdGVyKCZpbmV0Nl9vcHMpOworCiAJLyogY2xlYW4gZGV2IGxpc3QgKi8KIAlmb3JfZWFjaF9uZXRkZXYoJmluaXRfbmV0LCBkZXYpIHsKIAkJaWYgKF9faW42X2Rldl9nZXQoZGV2KSA9PSBOVUxMKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWZfaW5ldDYuYyBiL25ldC9pcHY2L2FmX2luZXQ2LmMKaW5kZXggNTRlOGU0Mi4uMDU5YTNkZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvYWZfaW5ldDYuYworKysgYi9uZXQvaXB2Ni9hZl9pbmV0Ni5jCkBAIC04MTAsNyArODEwLDcgQEAKIAl9CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKLQlpZiAodW5saWtlbHkoSVNfRVJSKHNlZ3MpKSkKKwlpZiAoSVNfRVJSKHNlZ3MpKQogCQlnb3RvIG91dDsKIAogCWZvciAoc2tiID0gc2Vnczsgc2tiOyBza2IgPSBza2ItPm5leHQpIHsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2VzcDYuYyBiL25ldC9pcHY2L2VzcDYuYwppbmRleCBlZTliOTNiLi4xYjVjOTgyIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9lc3A2LmMKKysrIGIvbmV0L2lwdjYvZXNwNi5jCkBAIC00OSw2ICs0OSw4IEBACiAKICNkZWZpbmUgRVNQX1NLQl9DQihfX3NrYikgKChzdHJ1Y3QgZXNwX3NrYl9jYiAqKSYoKF9fc2tiKS0+Y2JbMF0pKQogCitzdGF0aWMgdTMyIGVzcDZfZ2V0X210dShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgaW50IG10dSk7CisKIC8qCiAgKiBBbGxvY2F0ZSBhbiBBRUFEIHJlcXVlc3Qgc3RydWN0dXJlIHdpdGggZXh0cmEgc3BhY2UgZm9yIFNHIGFuZCBJVi4KICAqCkBAIC0xNDAsNiArMTQyLDggQEAKIAlpbnQgYmxrc2l6ZTsKIAlpbnQgY2xlbjsKIAlpbnQgYWxlbjsKKwlpbnQgcGxlbjsKKwlpbnQgdGZjbGVuOwogCWludCBuZnJhZ3M7CiAJdTggKml2OwogCXU4ICp0YWlsOwpAQCAtMTQ4LDE4ICsxNTIsMjYgQEAKIAkvKiBza2IgaXMgcHVyZSBwYXlsb2FkIHRvIGVuY3J5cHQgKi8KIAllcnIgPSAtRU5PTUVNOwogCi0JLyogUm91bmQgdG8gYmxvY2sgc2l6ZSAqLwotCWNsZW4gPSBza2ItPmxlbjsKLQogCWFlYWQgPSBlc3AtPmFlYWQ7CiAJYWxlbiA9IGNyeXB0b19hZWFkX2F1dGhzaXplKGFlYWQpOwogCisJdGZjbGVuID0gMDsKKwlpZiAoeC0+dGZjcGFkKSB7CisJCXN0cnVjdCB4ZnJtX2RzdCAqZHN0ID0gKHN0cnVjdCB4ZnJtX2RzdCAqKXNrYl9kc3Qoc2tiKTsKKwkJdTMyIHBhZHRvOworCisJCXBhZHRvID0gbWluKHgtPnRmY3BhZCwgZXNwNl9nZXRfbXR1KHgsIGRzdC0+Y2hpbGRfbXR1X2NhY2hlZCkpOworCQlpZiAoc2tiLT5sZW4gPCBwYWR0bykKKwkJCXRmY2xlbiA9IHBhZHRvIC0gc2tiLT5sZW47CisJfQogCWJsa3NpemUgPSBBTElHTihjcnlwdG9fYWVhZF9ibG9ja3NpemUoYWVhZCksIDQpOwotCWNsZW4gPSBBTElHTihjbGVuICsgMiwgYmxrc2l6ZSk7CisJY2xlbiA9IEFMSUdOKHNrYi0+bGVuICsgMiArIHRmY2xlbiwgYmxrc2l6ZSk7CiAJaWYgKGVzcC0+cGFkbGVuKQogCQljbGVuID0gQUxJR04oY2xlbiwgZXNwLT5wYWRsZW4pOworCXBsZW4gPSBjbGVuIC0gc2tiLT5sZW4gLSB0ZmNsZW47CiAKLQlpZiAoKGVyciA9IHNrYl9jb3dfZGF0YShza2IsIGNsZW4gLSBza2ItPmxlbiArIGFsZW4sICZ0cmFpbGVyKSkgPCAwKQorCWVyciA9IHNrYl9jb3dfZGF0YShza2IsIHRmY2xlbiArIHBsZW4gKyBhbGVuLCAmdHJhaWxlcik7CisJaWYgKGVyciA8IDApCiAJCWdvdG8gZXJyb3I7CiAJbmZyYWdzID0gZXJyOwogCkBAIC0xNzQsMTMgKzE4NiwxNyBAQAogCiAJLyogRmlsbCBwYWRkaW5nLi4uICovCiAJdGFpbCA9IHNrYl90YWlsX3BvaW50ZXIodHJhaWxlcik7CisJaWYgKHRmY2xlbikgeworCQltZW1zZXQodGFpbCwgMCwgdGZjbGVuKTsKKwkJdGFpbCArPSB0ZmNsZW47CisJfQogCWRvIHsKIAkJaW50IGk7Ci0JCWZvciAoaT0wOyBpPGNsZW4tc2tiLT5sZW4gLSAyOyBpKyspCisJCWZvciAoaSA9IDA7IGkgPCBwbGVuIC0gMjsgaSsrKQogCQkJdGFpbFtpXSA9IGkgKyAxOwogCX0gd2hpbGUgKDApOwotCXRhaWxbY2xlbi1za2ItPmxlbiAtIDJdID0gKGNsZW4gLSBza2ItPmxlbikgLSAyOwotCXRhaWxbY2xlbiAtIHNrYi0+bGVuIC0gMV0gPSAqc2tiX21hY19oZWFkZXIoc2tiKTsKKwl0YWlsW3BsZW4gLSAyXSA9IHBsZW4gLSAyOworCXRhaWxbcGxlbiAtIDFdID0gKnNrYl9tYWNfaGVhZGVyKHNrYik7CiAJcHNrYl9wdXQoc2tiLCB0cmFpbGVyLCBjbGVuIC0gc2tiLT5sZW4gKyBhbGVuKTsKIAogCXNrYl9wdXNoKHNrYiwgLXNrYl9uZXR3b3JrX29mZnNldChza2IpKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2luZXQ2X2Nvbm5lY3Rpb25fc29jay5jIGIvbmV0L2lwdjYvaW5ldDZfY29ubmVjdGlvbl9zb2NrLmMKaW5kZXggOGExNjI4MC4uZTQ2MzA1ZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaW5ldDZfY29ubmVjdGlvbl9zb2NrLmMKKysrIGIvbmV0L2lwdjYvaW5ldDZfY29ubmVjdGlvbl9zb2NrLmMKQEAgLTU0LDI0ICs1NCw1NCBAQAogCiBFWFBPUlRfU1lNQk9MX0dQTChpbmV0Nl9jc2tfYmluZF9jb25mbGljdCk7CiAKK3N0cnVjdCBkc3RfZW50cnkgKmluZXQ2X2Nza19yb3V0ZV9yZXEoc3RydWN0IHNvY2sgKnNrLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSkKK3sKKwlzdHJ1Y3QgaW5ldDZfcmVxdWVzdF9zb2NrICp0cmVxID0gaW5ldDZfcnNrKHJlcSk7CisJc3RydWN0IGlwdjZfcGluZm8gKm5wID0gaW5ldDZfc2soc2spOworCXN0cnVjdCBpbjZfYWRkciAqZmluYWxfcCwgZmluYWw7CisJc3RydWN0IGRzdF9lbnRyeSAqZHN0OworCXN0cnVjdCBmbG93aSBmbDsKKworCW1lbXNldCgmZmwsIDAsIHNpemVvZihmbCkpOworCWZsLnByb3RvID0gSVBQUk9UT19UQ1A7CisJaXB2Nl9hZGRyX2NvcHkoJmZsLmZsNl9kc3QsICZ0cmVxLT5ybXRfYWRkcik7CisJZmluYWxfcCA9IGZsNl91cGRhdGVfZHN0KCZmbCwgbnAtPm9wdCwgJmZpbmFsKTsKKwlpcHY2X2FkZHJfY29weSgmZmwuZmw2X3NyYywgJnRyZXEtPmxvY19hZGRyKTsKKwlmbC5vaWYgPSBzay0+c2tfYm91bmRfZGV2X2lmOworCWZsLm1hcmsgPSBzay0+c2tfbWFyazsKKwlmbC5mbF9pcF9kcG9ydCA9IGluZXRfcnNrKHJlcSktPnJtdF9wb3J0OworCWZsLmZsX2lwX3Nwb3J0ID0gaW5ldF9yc2socmVxKS0+bG9jX3BvcnQ7CisJc2VjdXJpdHlfcmVxX2NsYXNzaWZ5X2Zsb3cocmVxLCAmZmwpOworCisJaWYgKGlwNl9kc3RfbG9va3VwKHNrLCAmZHN0LCAmZmwpKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChmaW5hbF9wKQorCQlpcHY2X2FkZHJfY29weSgmZmwuZmw2X2RzdCwgZmluYWxfcCk7CisKKwlpZiAoKHhmcm1fbG9va3VwKHNvY2tfbmV0KHNrKSwgJmRzdCwgJmZsLCBzaywgMCkpIDwgMCkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gZHN0OworfQorCiAvKgogICogcmVxdWVzdF9zb2NrIChmb3JtZXJseSBvcGVuIHJlcXVlc3QpIGhhc2ggdGFibGVzLgogICovCiBzdGF0aWMgdTMyIGluZXQ2X3N5bnFfaGFzaChjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnJhZGRyLCBjb25zdCBfX2JlMTYgcnBvcnQsCiAJCQkgICBjb25zdCB1MzIgcm5kLCBjb25zdCB1MTYgc3lucV9oc2l6ZSkKIHsKLQl1MzIgYSA9IChfX2ZvcmNlIHUzMilyYWRkci0+czZfYWRkcjMyWzBdOwotCXUzMiBiID0gKF9fZm9yY2UgdTMyKXJhZGRyLT5zNl9hZGRyMzJbMV07Ci0JdTMyIGMgPSAoX19mb3JjZSB1MzIpcmFkZHItPnM2X2FkZHIzMlsyXTsKKwl1MzIgYzsKIAotCWEgKz0gSkhBU0hfR09MREVOX1JBVElPOwotCWIgKz0gSkhBU0hfR09MREVOX1JBVElPOwotCWMgKz0gcm5kOwotCV9famhhc2hfbWl4KGEsIGIsIGMpOworCWMgPSBqaGFzaF8zd29yZHMoKF9fZm9yY2UgdTMyKXJhZGRyLT5zNl9hZGRyMzJbMF0sCisJCQkgKF9fZm9yY2UgdTMyKXJhZGRyLT5zNl9hZGRyMzJbMV0sCisJCQkgKF9fZm9yY2UgdTMyKXJhZGRyLT5zNl9hZGRyMzJbMl0sCisJCQkgcm5kKTsKIAotCWEgKz0gKF9fZm9yY2UgdTMyKXJhZGRyLT5zNl9hZGRyMzJbM107Ci0JYiArPSAoX19mb3JjZSB1MzIpcnBvcnQ7Ci0JX19qaGFzaF9taXgoYSwgYiwgYyk7CisJYyA9IGpoYXNoXzJ3b3JkcygoX19mb3JjZSB1MzIpcmFkZHItPnM2X2FkZHIzMlszXSwKKwkJCSAoX19mb3JjZSB1MzIpcnBvcnQsCisJCQkgYyk7CiAKIAlyZXR1cm4gYyAmIChzeW5xX2hzaXplIC0gMSk7CiB9CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmMgYi9uZXQvaXB2Ni9pcDZfdHVubmVsLmMKaW5kZXggNzBlODkxYS4uNGY0NDgzZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXA2X3R1bm5lbC5jCisrKyBiL25ldC9pcHY2L2lwNl90dW5uZWwuYwpAQCAtNTgsOCArNTgsNiBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJJUHY2IHR1bm5lbGluZyBkZXZpY2UiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotI2RlZmluZSBJUFY2X1RMVl9URUxfRFNUX1NJWkUgOAotCiAjaWZkZWYgSVA2X1ROTF9ERUJVRwogI2RlZmluZSBJUDZfVE5MX1RSQUNFKHguLi4pIHByaW50ayhLRVJOX0RFQlVHICIlczoiIHggIlxuIiwgX19mdW5jX18pCiAjZWxzZQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2bXIuYyBiL25ldC9pcHY2L2lwNm1yLmMKaW5kZXggNmYzMmZmYy4uOWZhYjI3NCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXA2bXIuYworKysgYi9uZXQvaXB2Ni9pcDZtci5jCkBAIC0xODQzLDkgKzE4NDMsNyBAQAogCiAJZmwgPSAoc3RydWN0IGZsb3dpKSB7CiAJCS5vaWYgPSB2aWYtPmxpbmssCi0JCS5ubF91ID0geyAuaXA2X3UgPQotCQkJCXsgLmRhZGRyID0gaXB2NmgtPmRhZGRyLCB9Ci0JCX0KKwkJLmZsNl9kc3QgPSBpcHY2aC0+ZGFkZHIsCiAJfTsKIAogCWRzdCA9IGlwNl9yb3V0ZV9vdXRwdXQobmV0LCBOVUxMLCAmZmwpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbWNhc3QuYyBiL25ldC9pcHY2L21jYXN0LmMKaW5kZXggZDE0NDRiOS4uNDlmOTg2ZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbWNhc3QuYworKysgYi9uZXQvaXB2Ni9tY2FzdC5jCkBAIC04Miw3ICs4Miw3IEBACiBzdGF0aWMgc3RydWN0IGluNl9hZGRyIG1sZDJfYWxsX21jciA9IE1MRDJfQUxMX01DUl9JTklUOwogCiAvKiBCaWcgbWMgbGlzdCBsb2NrIGZvciBhbGwgdGhlIHNvY2tldHMgKi8KLXN0YXRpYyBERUZJTkVfUldMT0NLKGlwdjZfc2tfbWNfbG9jayk7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGlwdjZfc2tfbWNfbG9jayk7CiAKIHN0YXRpYyB2b2lkIGlnbXA2X2pvaW5fZ3JvdXAoc3RydWN0IGlmbWNhZGRyNiAqbWEpOwogc3RhdGljIHZvaWQgaWdtcDZfbGVhdmVfZ3JvdXAoc3RydWN0IGlmbWNhZGRyNiAqbWEpOwpAQCAtMTIzLDYgKzEyMywxMSBAQAogICoJc29ja2V0IGpvaW4gb24gbXVsdGljYXN0IGdyb3VwCiAgKi8KIAorI2RlZmluZSBmb3JfZWFjaF9wbWNfcmN1KG5wLCBwbWMpCQkJCVwKKwlmb3IgKHBtYyA9IHJjdV9kZXJlZmVyZW5jZShucC0+aXB2Nl9tY19saXN0KTsJCVwKKwkgICAgIHBtYyAhPSBOVUxMOwkJCQkJXAorCSAgICAgcG1jID0gcmN1X2RlcmVmZXJlbmNlKHBtYy0+bmV4dCkpCisKIGludCBpcHY2X3NvY2tfbWNfam9pbihzdHJ1Y3Qgc29jayAqc2ssIGludCBpZmluZGV4LCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IE5VTEw7CkBAIC0xMzQsMTUgKzEzOSwxNSBAQAogCWlmICghaXB2Nl9hZGRyX2lzX211bHRpY2FzdChhZGRyKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZWFkX2xvY2tfYmgoJmlwdjZfc2tfbWNfbG9jayk7Ci0JZm9yIChtY19sc3Q9bnAtPmlwdjZfbWNfbGlzdDsgbWNfbHN0OyBtY19sc3Q9bWNfbHN0LT5uZXh0KSB7CisJcmN1X3JlYWRfbG9jaygpOworCWZvcl9lYWNoX3BtY19yY3UobnAsIG1jX2xzdCkgewogCQlpZiAoKGlmaW5kZXggPT0gMCB8fCBtY19sc3QtPmlmaW5kZXggPT0gaWZpbmRleCkgJiYKIAkJICAgIGlwdjZfYWRkcl9lcXVhbCgmbWNfbHN0LT5hZGRyLCBhZGRyKSkgewotCQkJcmVhZF91bmxvY2tfYmgoJmlwdjZfc2tfbWNfbG9jayk7CisJCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJCXJldHVybiAtRUFERFJJTlVTRTsKIAkJfQogCX0KLQlyZWFkX3VubG9ja19iaCgmaXB2Nl9za19tY19sb2NrKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIAogCW1jX2xzdCA9IHNvY2tfa21hbGxvYyhzaywgc2l6ZW9mKHN0cnVjdCBpcHY2X21jX3NvY2tsaXN0KSwgR0ZQX0tFUk5FTCk7CiAKQEAgLTE4NiwzMyArMTkxLDQxIEBACiAJCXJldHVybiBlcnI7CiAJfQogCi0Jd3JpdGVfbG9ja19iaCgmaXB2Nl9za19tY19sb2NrKTsKKwlzcGluX2xvY2soJmlwdjZfc2tfbWNfbG9jayk7CiAJbWNfbHN0LT5uZXh0ID0gbnAtPmlwdjZfbWNfbGlzdDsKLQlucC0+aXB2Nl9tY19saXN0ID0gbWNfbHN0OwotCXdyaXRlX3VubG9ja19iaCgmaXB2Nl9za19tY19sb2NrKTsKKwlyY3VfYXNzaWduX3BvaW50ZXIobnAtPmlwdjZfbWNfbGlzdCwgbWNfbHN0KTsKKwlzcGluX3VubG9jaygmaXB2Nl9za19tY19sb2NrKTsKIAogCXJjdV9yZWFkX3VubG9jaygpOwogCiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGlwdjZfbWNfc29ja2xpc3RfcmVjbGFpbShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCit7CisJa2ZyZWUoY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBpcHY2X21jX3NvY2tsaXN0LCByY3UpKTsKK30KIC8qCiAgKglzb2NrZXQgbGVhdmUgb24gbXVsdGljYXN0IGdyb3VwCiAgKi8KIGludCBpcHY2X3NvY2tfbWNfZHJvcChzdHJ1Y3Qgc29jayAqc2ssIGludCBpZmluZGV4LCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpCiB7CiAJc3RydWN0IGlwdjZfcGluZm8gKm5wID0gaW5ldDZfc2soc2spOwotCXN0cnVjdCBpcHY2X21jX3NvY2tsaXN0ICptY19sc3QsICoqbG5rOworCXN0cnVjdCBpcHY2X21jX3NvY2tsaXN0ICptY19sc3Q7CisJc3RydWN0IGlwdjZfbWNfc29ja2xpc3QgX19yY3UgKipsbms7CiAJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spOwogCi0Jd3JpdGVfbG9ja19iaCgmaXB2Nl9za19tY19sb2NrKTsKLQlmb3IgKGxuayA9ICZucC0+aXB2Nl9tY19saXN0OyAobWNfbHN0ID0gKmxuaykgIT1OVUxMIDsgbG5rID0gJm1jX2xzdC0+bmV4dCkgeworCXNwaW5fbG9jaygmaXB2Nl9za19tY19sb2NrKTsKKwlmb3IgKGxuayA9ICZucC0+aXB2Nl9tY19saXN0OworCSAgICAgKG1jX2xzdCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoKmxuaywKKwkJCWxvY2tkZXBfaXNfaGVsZCgmaXB2Nl9za19tY19sb2NrKSkpICE9TlVMTCA7CisJICAgICAgbG5rID0gJm1jX2xzdC0+bmV4dCkgewogCQlpZiAoKGlmaW5kZXggPT0gMCB8fCBtY19sc3QtPmlmaW5kZXggPT0gaWZpbmRleCkgJiYKIAkJICAgIGlwdjZfYWRkcl9lcXVhbCgmbWNfbHN0LT5hZGRyLCBhZGRyKSkgewogCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAogCQkJKmxuayA9IG1jX2xzdC0+bmV4dDsKLQkJCXdyaXRlX3VubG9ja19iaCgmaXB2Nl9za19tY19sb2NrKTsKKwkJCXNwaW5fdW5sb2NrKCZpcHY2X3NrX21jX2xvY2spOwogCiAJCQlyY3VfcmVhZF9sb2NrKCk7CiAJCQlkZXYgPSBkZXZfZ2V0X2J5X2luZGV4X3JjdShuZXQsIG1jX2xzdC0+aWZpbmRleCk7CkBAIC0yMjUsMTEgKzIzOCwxMiBAQAogCQkJfSBlbHNlCiAJCQkJKHZvaWQpIGlwNl9tY19sZWF2ZV9zcmMoc2ssIG1jX2xzdCwgTlVMTCk7CiAJCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJCXNvY2tfa2ZyZWVfcyhzaywgbWNfbHN0LCBzaXplb2YoKm1jX2xzdCkpOworCQkJYXRvbWljX3N1YihzaXplb2YoKm1jX2xzdCksICZzay0+c2tfb21lbV9hbGxvYyk7CisJCQljYWxsX3JjdSgmbWNfbHN0LT5yY3UsIGlwdjZfbWNfc29ja2xpc3RfcmVjbGFpbSk7CiAJCQlyZXR1cm4gMDsKIAkJfQogCX0KLQl3cml0ZV91bmxvY2tfYmgoJmlwdjZfc2tfbWNfbG9jayk7CisJc3Bpbl91bmxvY2soJmlwdjZfc2tfbWNfbG9jayk7CiAKIAlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CiB9CkBAIC0yNTcsNyArMjcxLDcgQEAKIAkJcmV0dXJuIE5VTEw7CiAJaWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTsKIAlpZiAoIWlkZXYpCi0JCXJldHVybiBOVUxMOzsKKwkJcmV0dXJuIE5VTEw7CiAJcmVhZF9sb2NrX2JoKCZpZGV2LT5sb2NrKTsKIAlpZiAoaWRldi0+ZGVhZCkgewogCQlyZWFkX3VubG9ja19iaCgmaWRldi0+bG9jayk7CkBAIC0yNzIsMTIgKzI4NiwxMyBAQAogCXN0cnVjdCBpcHY2X21jX3NvY2tsaXN0ICptY19sc3Q7CiAJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spOwogCi0Jd3JpdGVfbG9ja19iaCgmaXB2Nl9za19tY19sb2NrKTsKLQl3aGlsZSAoKG1jX2xzdCA9IG5wLT5pcHY2X21jX2xpc3QpICE9IE5VTEwpIHsKKwlzcGluX2xvY2soJmlwdjZfc2tfbWNfbG9jayk7CisJd2hpbGUgKChtY19sc3QgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKG5wLT5pcHY2X21jX2xpc3QsCisJCQkJbG9ja2RlcF9pc19oZWxkKCZpcHY2X3NrX21jX2xvY2spKSkgIT0gTlVMTCkgewogCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCiAJCW5wLT5pcHY2X21jX2xpc3QgPSBtY19sc3QtPm5leHQ7Ci0JCXdyaXRlX3VubG9ja19iaCgmaXB2Nl9za19tY19sb2NrKTsKKwkJc3Bpbl91bmxvY2soJmlwdjZfc2tfbWNfbG9jayk7CiAKIAkJcmN1X3JlYWRfbG9jaygpOwogCQlkZXYgPSBkZXZfZ2V0X2J5X2luZGV4X3JjdShuZXQsIG1jX2xzdC0+aWZpbmRleCk7CkBAIC0yOTAsMTEgKzMwNSwxMyBAQAogCQl9IGVsc2UKIAkJCSh2b2lkKSBpcDZfbWNfbGVhdmVfc3JjKHNrLCBtY19sc3QsIE5VTEwpOwogCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJc29ja19rZnJlZV9zKHNrLCBtY19sc3QsIHNpemVvZigqbWNfbHN0KSk7CiAKLQkJd3JpdGVfbG9ja19iaCgmaXB2Nl9za19tY19sb2NrKTsKKwkJYXRvbWljX3N1YihzaXplb2YoKm1jX2xzdCksICZzay0+c2tfb21lbV9hbGxvYyk7CisJCWNhbGxfcmN1KCZtY19sc3QtPnJjdSwgaXB2Nl9tY19zb2NrbGlzdF9yZWNsYWltKTsKKworCQlzcGluX2xvY2soJmlwdjZfc2tfbWNfbG9jayk7CiAJfQotCXdyaXRlX3VubG9ja19iaCgmaXB2Nl9za19tY19sb2NrKTsKKwlzcGluX3VubG9jaygmaXB2Nl9za19tY19sb2NrKTsKIH0KIAogaW50IGlwNl9tY19zb3VyY2UoaW50IGFkZCwgaW50IG9tb2RlLCBzdHJ1Y3Qgc29jayAqc2ssCkBAIC0zMjgsOCArMzQ1LDcgQEAKIAogCWVyciA9IC1FQUREUk5PVEFWQUlMOwogCi0JcmVhZF9sb2NrKCZpcHY2X3NrX21jX2xvY2spOwotCWZvciAocG1jPWluZXQ2LT5pcHY2X21jX2xpc3Q7IHBtYzsgcG1jPXBtYy0+bmV4dCkgeworCWZvcl9lYWNoX3BtY19yY3UoaW5ldDYsIHBtYykgewogCQlpZiAocGdzci0+Z3NyX2ludGVyZmFjZSAmJiBwbWMtPmlmaW5kZXggIT0gcGdzci0+Z3NyX2ludGVyZmFjZSkKIAkJCWNvbnRpbnVlOwogCQlpZiAoaXB2Nl9hZGRyX2VxdWFsKCZwbWMtPmFkZHIsIGdyb3VwKSkKQEAgLTQyOCw3ICs0NDQsNiBAQAogZG9uZToKIAlpZiAocG1jbG9ja2VkKQogCQl3cml0ZV91bmxvY2soJnBtYy0+c2Zsb2NrKTsKLQlyZWFkX3VubG9jaygmaXB2Nl9za19tY19sb2NrKTsKIAlyZWFkX3VubG9ja19iaCgmaWRldi0+bG9jayk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAJaWYgKGxlYXZlZ3JvdXApCkBAIC00NjYsMTQgKzQ4MSwxMyBAQAogCWRldiA9IGlkZXYtPmRldjsKIAogCWVyciA9IDA7Ci0JcmVhZF9sb2NrKCZpcHY2X3NrX21jX2xvY2spOwogCiAJaWYgKGdzZi0+Z2ZfZm1vZGUgPT0gTUNBU1RfSU5DTFVERSAmJiBnc2YtPmdmX251bXNyYyA9PSAwKSB7CiAJCWxlYXZlZ3JvdXAgPSAxOwogCQlnb3RvIGRvbmU7CiAJfQogCi0JZm9yIChwbWM9aW5ldDYtPmlwdjZfbWNfbGlzdDsgcG1jOyBwbWM9cG1jLT5uZXh0KSB7CisJZm9yX2VhY2hfcG1jX3JjdShpbmV0NiwgcG1jKSB7CiAJCWlmIChwbWMtPmlmaW5kZXggIT0gZ3NmLT5nZl9pbnRlcmZhY2UpCiAJCQljb250aW51ZTsKIAkJaWYgKGlwdjZfYWRkcl9lcXVhbCgmcG1jLT5hZGRyLCBncm91cCkpCkBAIC01MjEsNyArNTM1LDYgQEAKIAl3cml0ZV91bmxvY2soJnBtYy0+c2Zsb2NrKTsKIAllcnIgPSAwOwogZG9uZToKLQlyZWFkX3VubG9jaygmaXB2Nl9za19tY19sb2NrKTsKIAlyZWFkX3VubG9ja19iaCgmaWRldi0+bG9jayk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAJaWYgKGxlYXZlZ3JvdXApCkBAIC01NjIsNyArNTc1LDcgQEAKIAkgKiBzbyByZWFkaW5nIHRoZSBsaXN0IGlzIHNhZmUuCiAJICovCiAKLQlmb3IgKHBtYz1pbmV0Ni0+aXB2Nl9tY19saXN0OyBwbWM7IHBtYz1wbWMtPm5leHQpIHsKKwlmb3JfZWFjaF9wbWNfcmN1KGluZXQ2LCBwbWMpIHsKIAkJaWYgKHBtYy0+aWZpbmRleCAhPSBnc2YtPmdmX2ludGVyZmFjZSkKIAkJCWNvbnRpbnVlOwogCQlpZiAoaXB2Nl9hZGRyX2VxdWFsKGdyb3VwLCAmcG1jLT5hZGRyKSkKQEAgLTYxMiwxMyArNjI1LDEzIEBACiAJc3RydWN0IGlwNl9zZl9zb2NrbGlzdCAqcHNsOwogCWludCBydiA9IDE7CiAKLQlyZWFkX2xvY2soJmlwdjZfc2tfbWNfbG9jayk7Ci0JZm9yIChtYyA9IG5wLT5pcHY2X21jX2xpc3Q7IG1jOyBtYyA9IG1jLT5uZXh0KSB7CisJcmN1X3JlYWRfbG9jaygpOworCWZvcl9lYWNoX3BtY19yY3UobnAsIG1jKSB7CiAJCWlmIChpcHY2X2FkZHJfZXF1YWwoJm1jLT5hZGRyLCBtY19hZGRyKSkKIAkJCWJyZWFrOwogCX0KIAlpZiAoIW1jKSB7Ci0JCXJlYWRfdW5sb2NrKCZpcHY2X3NrX21jX2xvY2spOworCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJcmV0dXJuIDE7CiAJfQogCXJlYWRfbG9jaygmbWMtPnNmbG9jayk7CkBAIC02MzgsNyArNjUxLDcgQEAKIAkJCXJ2ID0gMDsKIAl9CiAJcmVhZF91bmxvY2soJm1jLT5zZmxvY2spOwotCXJlYWRfdW5sb2NrKCZpcHY2X3NrX21jX2xvY2spOworCXJjdV9yZWFkX3VubG9jaygpOwogCiAJcmV0dXJuIHJ2OwogfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmRpc2MuYyBiL25ldC9pcHY2L25kaXNjLmMKaW5kZXggOTk4ZDZkMi4uMjM0MjU0NSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmRpc2MuYworKysgYi9uZXQvaXB2Ni9uZGlzYy5jCkBAIC0xNDEsMTggKzE0MSwxOCBAQAogCS5wcm94eV9yZWRvID0JcG5kaXNjX3JlZG8sCiAJLmlkID0JCSJuZGlzY19jYWNoZSIsCiAJLnBhcm1zID0gewotCQkudGJsID0JCQkmbmRfdGJsLAotCQkuYmFzZV9yZWFjaGFibGVfdGltZSA9CTMwICogSFosCi0JCS5yZXRyYW5zX3RpbWUgPQkgMSAqIEhaLAotCQkuZ2Nfc3RhbGV0aW1lID0JNjAgKiBIWiwKLQkJLnJlYWNoYWJsZV90aW1lID0JCTMwICogSFosCi0JCS5kZWxheV9wcm9iZV90aW1lID0JIDUgKiBIWiwKLQkJLnF1ZXVlX2xlbiA9CQkgMywKLQkJLnVjYXN0X3Byb2JlcyA9CSAzLAotCQkubWNhc3RfcHJvYmVzID0JIDMsCi0JCS5hbnljYXN0X2RlbGF5ID0JIDEgKiBIWiwKLQkJLnByb3h5X2RlbGF5ID0JCSg4ICogSFopIC8gMTAsCi0JCS5wcm94eV9xbGVuID0JCTY0LAorCQkudGJsCQkJPSAmbmRfdGJsLAorCQkuYmFzZV9yZWFjaGFibGVfdGltZQk9IE5EX1JFQUNIQUJMRV9USU1FLAorCQkucmV0cmFuc190aW1lCQk9IE5EX1JFVFJBTlNfVElNRVIsCisJCS5nY19zdGFsZXRpbWUJCT0gNjAgKiBIWiwKKwkJLnJlYWNoYWJsZV90aW1lCQk9IE5EX1JFQUNIQUJMRV9USU1FLAorCQkuZGVsYXlfcHJvYmVfdGltZQk9IDUgKiBIWiwKKwkJLnF1ZXVlX2xlbgkJPSAzLAorCQkudWNhc3RfcHJvYmVzCQk9IDMsCisJCS5tY2FzdF9wcm9iZXMJCT0gMywKKwkJLmFueWNhc3RfZGVsYXkJCT0gMSAqIEhaLAorCQkucHJveHlfZGVsYXkJCT0gKDggKiBIWikgLyAxMCwKKwkJLnByb3h5X3FsZW4JCT0gNjQsCiAJfSwKIAkuZ2NfaW50ZXJ2YWwgPQkgIDMwICogSFosCiAJLmdjX3RocmVzaDEgPQkgMTI4LApAQCAtMTI1OSw3ICsxMjU5LDggQEAKIAlpZiAocmFfbXNnLT5pY21waC5pY21wNl9ob3BfbGltaXQpIHsKIAkJaW42X2Rldi0+Y25mLmhvcF9saW1pdCA9IHJhX21zZy0+aWNtcGguaWNtcDZfaG9wX2xpbWl0OwogCQlpZiAocnQpCi0JCQlydC0+ZHN0Lm1ldHJpY3NbUlRBWF9IT1BMSU1JVC0xXSA9IHJhX21zZy0+aWNtcGguaWNtcDZfaG9wX2xpbWl0OworCQkJZHN0X21ldHJpY19zZXQoJnJ0LT5kc3QsIFJUQVhfSE9QTElNSVQsCisJCQkJICAgICAgIHJhX21zZy0+aWNtcGguaWNtcDZfaG9wX2xpbWl0KTsKIAl9CiAKIHNraXBfZGVmcnRyOgpAQCAtMTM3Nyw3ICsxMzc4LDcgQEAKIAkJCWluNl9kZXYtPmNuZi5tdHU2ID0gbXR1OwogCiAJCQlpZiAocnQpCi0JCQkJcnQtPmRzdC5tZXRyaWNzW1JUQVhfTVRVLTFdID0gbXR1OworCQkJCWRzdF9tZXRyaWNfc2V0KCZydC0+ZHN0LCBSVEFYX01UVSwgbXR1KTsKIAogCQkJcnQ2X210dV9jaGFuZ2Uoc2tiLT5kZXYsIG10dSk7CiAJCX0KZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyLmMKaW5kZXggNzE1NWIyNC4uMzU5MTVlOCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyLmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyLmMKQEAgLTE4LDEwICsxOCw4IEBACiAJc3RydWN0IGZsb3dpIGZsID0gewogCQkub2lmID0gc2tiLT5zayA/IHNrYi0+c2stPnNrX2JvdW5kX2Rldl9pZiA6IDAsCiAJCS5tYXJrID0gc2tiLT5tYXJrLAotCQkubmxfdSA9Ci0JCXsgLmlwNl91ID0KLQkJICB7IC5kYWRkciA9IGlwaC0+ZGFkZHIsCi0JCSAgICAuc2FkZHIgPSBpcGgtPnNhZGRyLCB9IH0sCisJCS5mbDZfZHN0ID0gaXBoLT5kYWRkciwKKwkJLmZsNl9zcmMgPSBpcGgtPnNhZGRyLAogCX07CiAKIAlkc3QgPSBpcDZfcm91dGVfb3V0cHV0KG5ldCwgc2tiLT5zaywgJmZsKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9NYWtlZmlsZSBiL25ldC9pcHY2L25ldGZpbHRlci9NYWtlZmlsZQppbmRleCAwYTQzMmM5Li5hYmZlZTkxIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvTWFrZWZpbGUKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL01ha2VmaWxlCkBAIC0xMSwxMyArMTEsMTMgQEAKIG9iai0kKENPTkZJR19JUDZfTkZfU0VDVVJJVFkpICs9IGlwNnRhYmxlX3NlY3VyaXR5Lm8KIAogIyBvYmplY3RzIGZvciBsMyBpbmRlcGVuZGVudCBjb25udHJhY2sKLW5mX2Nvbm50cmFja19pcHY2LW9ianMgIDo9ICBuZl9jb25udHJhY2tfbDNwcm90b19pcHY2Lm8gbmZfY29ubnRyYWNrX3Byb3RvX2ljbXB2Ni5vCituZl9jb25udHJhY2tfaXB2Ni15ICA6PSAgbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2Ni5vIG5mX2Nvbm50cmFja19wcm90b19pY21wdjYubwogCiAjIGwzIGluZGVwZW5kZW50IGNvbm50cmFjawogb2JqLSQoQ09ORklHX05GX0NPTk5UUkFDS19JUFY2KSArPSBuZl9jb25udHJhY2tfaXB2Ni5vIG5mX2RlZnJhZ19pcHY2Lm8KIAogIyBkZWZyYWcKLW5mX2RlZnJhZ19pcHY2LW9ianMgOj0gbmZfZGVmcmFnX2lwdjZfaG9va3MubyBuZl9jb25udHJhY2tfcmVhc20ubworbmZfZGVmcmFnX2lwdjYteSA6PSBuZl9kZWZyYWdfaXB2Nl9ob29rcy5vIG5mX2Nvbm50cmFja19yZWFzbS5vCiBvYmotJChDT05GSUdfTkZfREVGUkFHX0lQVjYpICs9IG5mX2RlZnJhZ19pcHY2Lm8KIAogIyBtYXRjaGVzCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9SRUpFQ1QuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X1JFSkVDVC5jCmluZGV4IDI5MzMzOTYuLmJmOTk4ZmUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X1JFSkVDVC5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X1JFSkVDVC5jCkBAIC0xMjQsNyArMTI0LDcgQEAKIAlza2JfcmVzZXRfbmV0d29ya19oZWFkZXIobnNrYik7CiAJaXA2aCA9IGlwdjZfaGRyKG5za2IpOwogCWlwNmgtPnZlcnNpb24gPSA2OwotCWlwNmgtPmhvcF9saW1pdCA9IGRzdF9tZXRyaWMoZHN0LCBSVEFYX0hPUExJTUlUKTsKKwlpcDZoLT5ob3BfbGltaXQgPSBpcDZfZHN0X2hvcGxpbWl0KGRzdCk7CiAJaXA2aC0+bmV4dGhkciA9IElQUFJPVE9fVENQOwogCWlwdjZfYWRkcl9jb3B5KCZpcDZoLT5zYWRkciwgJm9pcDZoLT5kYWRkcik7CiAJaXB2Nl9hZGRyX2NvcHkoJmlwNmgtPmRhZGRyLCAmb2lwNmgtPnNhZGRyKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3JlYXNzZW1ibHkuYyBiL25ldC9pcHY2L3JlYXNzZW1ibHkuYwppbmRleCAwZjI3NjY0Li4wN2JlZWIwIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9yZWFzc2VtYmx5LmMKKysrIGIvbmV0L2lwdjYvcmVhc3NlbWJseS5jCkBAIC0xMDQsMjYgKzEwNCwyMiBAQAogdW5zaWduZWQgaW50IGluZXQ2X2hhc2hfZnJhZyhfX2JlMzIgaWQsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsCiAJCQkgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsIHUzMiBybmQpCiB7Ci0JdTMyIGEsIGIsIGM7CisJdTMyIGM7CiAKLQlhID0gKF9fZm9yY2UgdTMyKXNhZGRyLT5zNl9hZGRyMzJbMF07Ci0JYiA9IChfX2ZvcmNlIHUzMilzYWRkci0+czZfYWRkcjMyWzFdOwotCWMgPSAoX19mb3JjZSB1MzIpc2FkZHItPnM2X2FkZHIzMlsyXTsKKwljID0gamhhc2hfM3dvcmRzKChfX2ZvcmNlIHUzMilzYWRkci0+czZfYWRkcjMyWzBdLAorCQkJIChfX2ZvcmNlIHUzMilzYWRkci0+czZfYWRkcjMyWzFdLAorCQkJIChfX2ZvcmNlIHUzMilzYWRkci0+czZfYWRkcjMyWzJdLAorCQkJIHJuZCk7CiAKLQlhICs9IEpIQVNIX0dPTERFTl9SQVRJTzsKLQliICs9IEpIQVNIX0dPTERFTl9SQVRJTzsKLQljICs9IHJuZDsKLQlfX2poYXNoX21peChhLCBiLCBjKTsKKwljID0gamhhc2hfM3dvcmRzKChfX2ZvcmNlIHUzMilzYWRkci0+czZfYWRkcjMyWzNdLAorCQkJIChfX2ZvcmNlIHUzMilkYWRkci0+czZfYWRkcjMyWzBdLAorCQkJIChfX2ZvcmNlIHUzMilkYWRkci0+czZfYWRkcjMyWzFdLAorCQkJIGMpOwogCi0JYSArPSAoX19mb3JjZSB1MzIpc2FkZHItPnM2X2FkZHIzMlszXTsKLQliICs9IChfX2ZvcmNlIHUzMilkYWRkci0+czZfYWRkcjMyWzBdOwotCWMgKz0gKF9fZm9yY2UgdTMyKWRhZGRyLT5zNl9hZGRyMzJbMV07Ci0JX19qaGFzaF9taXgoYSwgYiwgYyk7Ci0KLQlhICs9IChfX2ZvcmNlIHUzMilkYWRkci0+czZfYWRkcjMyWzJdOwotCWIgKz0gKF9fZm9yY2UgdTMyKWRhZGRyLT5zNl9hZGRyMzJbM107Ci0JYyArPSAoX19mb3JjZSB1MzIpaWQ7Ci0JX19qaGFzaF9taXgoYSwgYiwgYyk7CisJYyA9ICBqaGFzaF8zd29yZHMoKF9fZm9yY2UgdTMyKWRhZGRyLT5zNl9hZGRyMzJbMl0sCisJCQkgIChfX2ZvcmNlIHUzMilkYWRkci0+czZfYWRkcjMyWzNdLAorCQkJICAoX19mb3JjZSB1MzIpaWQsCisJCQkgIGMpOwogCiAJcmV0dXJuIGMgJiAoSU5FVEZSQUdTX0hBU0hTWiAtIDEpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcm91dGUuYyBiL25ldC9pcHY2L3JvdXRlLmMKaW5kZXggNzY1OWQ2Zi4uMzczYmQwNCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvcm91dGUuYworKysgYi9uZXQvaXB2Ni9yb3V0ZS5jCkBAIC03Niw2ICs3Niw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcnQ2X2luZm8gKiBpcDZfcnRfY29weShzdHJ1Y3QgcnQ2X2luZm8gKm9ydCk7CiBzdGF0aWMgc3RydWN0IGRzdF9lbnRyeQkqaXA2X2RzdF9jaGVjayhzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsIHUzMiBjb29raWUpOworc3RhdGljIHVuc2lnbmVkIGludAkgaXA2X2RlZmF1bHRfYWR2bXNzKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCk7CitzdGF0aWMgdW5zaWduZWQgaW50CSBpcDZfZGVmYXVsdF9tdHUoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KTsKIHN0YXRpYyBzdHJ1Y3QgZHN0X2VudHJ5ICppcDZfbmVnYXRpdmVfYWR2aWNlKHN0cnVjdCBkc3RfZW50cnkgKik7CiBzdGF0aWMgdm9pZAkJaXA2X2RzdF9kZXN0cm95KHN0cnVjdCBkc3RfZW50cnkgKik7CiBzdGF0aWMgdm9pZAkJaXA2X2RzdF9pZmRvd24oc3RydWN0IGRzdF9lbnRyeSAqLApAQCAtMTAzLDYgKzEwNSw4IEBACiAJLmdjCQkJPQlpcDZfZHN0X2djLAogCS5nY190aHJlc2gJCT0JMTAyNCwKIAkuY2hlY2sJCQk9CWlwNl9kc3RfY2hlY2ssCisJLmRlZmF1bHRfYWR2bXNzCQk9CWlwNl9kZWZhdWx0X2Fkdm1zcywKKwkuZGVmYXVsdF9tdHUJCT0JaXA2X2RlZmF1bHRfbXR1LAogCS5kZXN0cm95CQk9CWlwNl9kc3RfZGVzdHJveSwKIAkuaWZkb3duCQkJPQlpcDZfZHN0X2lmZG93biwKIAkubmVnYXRpdmVfYWR2aWNlCT0JaXA2X25lZ2F0aXZlX2FkdmljZSwKQEAgLTEyOSw3ICsxMzMsNiBAQAogCQkuX191c2UJCT0gMSwKIAkJLm9ic29sZXRlCT0gLTEsCiAJCS5lcnJvcgkJPSAtRU5FVFVOUkVBQ0gsCi0JCS5tZXRyaWNzCT0geyBbUlRBWF9IT1BMSU1JVCAtIDFdID0gMjU1LCB9LAogCQkuaW5wdXQJCT0gaXA2X3BrdF9kaXNjYXJkLAogCQkub3V0cHV0CQk9IGlwNl9wa3RfZGlzY2FyZF9vdXQsCiAJfSwKQEAgLTE1MCw3ICsxNTMsNiBAQAogCQkuX191c2UJCT0gMSwKIAkJLm9ic29sZXRlCT0gLTEsCiAJCS5lcnJvcgkJPSAtRUFDQ0VTLAotCQkubWV0cmljcwk9IHsgW1JUQVhfSE9QTElNSVQgLSAxXSA9IDI1NSwgfSwKIAkJLmlucHV0CQk9IGlwNl9wa3RfcHJvaGliaXQsCiAJCS5vdXRwdXQJCT0gaXA2X3BrdF9wcm9oaWJpdF9vdXQsCiAJfSwKQEAgLTE2Niw3ICsxNjgsNiBAQAogCQkuX191c2UJCT0gMSwKIAkJLm9ic29sZXRlCT0gLTEsCiAJCS5lcnJvcgkJPSAtRUlOVkFMLAotCQkubWV0cmljcwk9IHsgW1JUQVhfSE9QTElNSVQgLSAxXSA9IDI1NSwgfSwKIAkJLmlucHV0CQk9IGRzdF9kaXNjYXJkLAogCQkub3V0cHV0CQk9IGRzdF9kaXNjYXJkLAogCX0sCkBAIC0xODgsMTEgKzE4OSwyOSBAQAogewogCXN0cnVjdCBydDZfaW5mbyAqcnQgPSAoc3RydWN0IHJ0Nl9pbmZvICopZHN0OwogCXN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYgPSBydC0+cnQ2aV9pZGV2OworCXN0cnVjdCBpbmV0X3BlZXIgKnBlZXIgPSBydC0+cnQ2aV9wZWVyOwogCiAJaWYgKGlkZXYgIT0gTlVMTCkgewogCQlydC0+cnQ2aV9pZGV2ID0gTlVMTDsKIAkJaW42X2Rldl9wdXQoaWRldik7CiAJfQorCWlmIChwZWVyKSB7CisJCUJVR19PTighKHJ0LT5ydDZpX2ZsYWdzICYgUlRGX0NBQ0hFKSk7CisJCXJ0LT5ydDZpX3BlZXIgPSBOVUxMOworCQlpbmV0X3B1dHBlZXIocGVlcik7CisJfQorfQorCit2b2lkIHJ0Nl9iaW5kX3BlZXIoc3RydWN0IHJ0Nl9pbmZvICpydCwgaW50IGNyZWF0ZSkKK3sKKwlzdHJ1Y3QgaW5ldF9wZWVyICpwZWVyOworCisJaWYgKFdBUk5fT04oIShydC0+cnQ2aV9mbGFncyAmIFJURl9DQUNIRSkpKQorCQlyZXR1cm47CisKKwlwZWVyID0gaW5ldF9nZXRwZWVyX3Y2KCZydC0+cnQ2aV9kc3QuYWRkciwgY3JlYXRlKTsKKwlpZiAocGVlciAmJiBjbXB4Y2hnKCZydC0+cnQ2aV9wZWVyLCBOVUxMLCBwZWVyKSAhPSBOVUxMKQorCQlpbmV0X3B1dHBlZXIocGVlcik7CiB9CiAKIHN0YXRpYyB2b2lkIGlwNl9kc3RfaWZkb3duKHN0cnVjdCBkc3RfZW50cnkgKmRzdCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKQEAgLTU1OCwxMSArNTc3LDcgQEAKIHsKIAlzdHJ1Y3QgZmxvd2kgZmwgPSB7CiAJCS5vaWYgPSBvaWYsCi0JCS5ubF91ID0gewotCQkJLmlwNl91ID0gewotCQkJCS5kYWRkciA9ICpkYWRkciwKLQkJCX0sCi0JCX0sCisJCS5mbDZfZHN0ID0gKmRhZGRyLAogCX07CiAJc3RydWN0IGRzdF9lbnRyeSAqZHN0OwogCWludCBmbGFncyA9IHN0cmljdCA/IFJUNl9MT09LVVBfRl9JRkFDRSA6IDA7CkBAIC03NzgsMTMgKzc5Myw5IEBACiAJaW50IGZsYWdzID0gUlQ2X0xPT0tVUF9GX0hBU19TQUREUjsKIAlzdHJ1Y3QgZmxvd2kgZmwgPSB7CiAJCS5paWYgPSBza2ItPmRldi0+aWZpbmRleCwKLQkJLm5sX3UgPSB7Ci0JCQkuaXA2X3UgPSB7Ci0JCQkJLmRhZGRyID0gaXBoLT5kYWRkciwKLQkJCQkuc2FkZHIgPSBpcGgtPnNhZGRyLAotCQkJCS5mbG93bGFiZWwgPSAoKiAoX19iZTMyICopIGlwaCkmSVBWNl9GTE9XSU5GT19NQVNLLAotCQkJfSwKLQkJfSwKKwkJLmZsNl9kc3QgPSBpcGgtPmRhZGRyLAorCQkuZmw2X3NyYyA9IGlwaC0+c2FkZHIsCisJCS5mbDZfZmxvd2xhYmVsID0gKCogKF9fYmUzMiAqKSBpcGgpJklQVjZfRkxPV0lORk9fTUFTSywKIAkJLm1hcmsgPSBza2ItPm1hcmssCiAJCS5wcm90byA9IGlwaC0+bmV4dGhkciwKIAl9OwpAQCAtODM0LDcgKzg0NSw3IEBACiAJCW5ldy0+aW5wdXQgPSBkc3RfZGlzY2FyZDsKIAkJbmV3LT5vdXRwdXQgPSBkc3RfZGlzY2FyZDsKIAotCQltZW1jcHkobmV3LT5tZXRyaWNzLCBvcnQtPmRzdC5tZXRyaWNzLCBSVEFYX01BWCpzaXplb2YodTMyKSk7CisJCWRzdF9jb3B5X21ldHJpY3MobmV3LCAmb3J0LT5kc3QpOwogCQluZXctPmRldiA9IG9ydC0+ZHN0LmRldjsKIAkJaWYgKG5ldy0+ZGV2KQogCQkJZGV2X2hvbGQobmV3LT5kZXYpOwpAQCAtOTE4LDE4ICs5MjksMjIgQEAKIAlpZiAobXR1IDwgZHN0X210dShkc3QpICYmIHJ0Ni0+cnQ2aV9kc3QucGxlbiA9PSAxMjgpIHsKIAkJcnQ2LT5ydDZpX2ZsYWdzIHw9IFJURl9NT0RJRklFRDsKIAkJaWYgKG10dSA8IElQVjZfTUlOX01UVSkgeworCQkJdTMyIGZlYXR1cmVzID0gZHN0X21ldHJpYyhkc3QsIFJUQVhfRkVBVFVSRVMpOwogCQkJbXR1ID0gSVBWNl9NSU5fTVRVOwotCQkJZHN0LT5tZXRyaWNzW1JUQVhfRkVBVFVSRVMtMV0gfD0gUlRBWF9GRUFUVVJFX0FMTEZSQUc7CisJCQlmZWF0dXJlcyB8PSBSVEFYX0ZFQVRVUkVfQUxMRlJBRzsKKwkJCWRzdF9tZXRyaWNfc2V0KGRzdCwgUlRBWF9GRUFUVVJFUywgZmVhdHVyZXMpOwogCQl9Ci0JCWRzdC0+bWV0cmljc1tSVEFYX01UVS0xXSA9IG10dTsKKwkJZHN0X21ldHJpY19zZXQoZHN0LCBSVEFYX01UVSwgbXR1KTsKIAkJY2FsbF9uZXRldmVudF9ub3RpZmllcnMoTkVURVZFTlRfUE1UVV9VUERBVEUsIGRzdCk7CiAJfQogfQogCi1zdGF0aWMgaW50IGlwdjZfZ2V0X210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXB2Nl9hZHZtc3Moc3RydWN0IG5ldCAqbmV0LCB1bnNpZ25lZCBpbnQgbXR1KQorc3RhdGljIHVuc2lnbmVkIGludCBpcDZfZGVmYXVsdF9hZHZtc3MoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KQogeworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkc3QtPmRldjsKKwl1bnNpZ25lZCBpbnQgbXR1ID0gZHN0X210dShkc3QpOworCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTsKKwogCW10dSAtPSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpICsgc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpOwogCiAJaWYgKG10dSA8IG5ldC0+aXB2Ni5zeXNjdGwuaXA2X3J0X21pbl9hZHZtc3MpCkBAIC05NDYsNiArOTYxLDIwIEBACiAJcmV0dXJuIG10dTsKIH0KIAorc3RhdGljIHVuc2lnbmVkIGludCBpcDZfZGVmYXVsdF9tdHUoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KQoreworCXVuc2lnbmVkIGludCBtdHUgPSBJUFY2X01JTl9NVFU7CisJc3RydWN0IGluZXQ2X2RldiAqaWRldjsKKworCXJjdV9yZWFkX2xvY2soKTsKKwlpZGV2ID0gX19pbjZfZGV2X2dldChkc3QtPmRldik7CisJaWYgKGlkZXYpCisJCW10dSA9IGlkZXYtPmNuZi5tdHU2OworCXJjdV9yZWFkX3VubG9jaygpOworCisJcmV0dXJuIG10dTsKK30KKwogc3RhdGljIHN0cnVjdCBkc3RfZW50cnkgKmljbXA2X2RzdF9nY19saXN0Owogc3RhdGljIERFRklORV9TUElOTE9DSyhpY21wNl9kc3RfbG9jayk7CiAKQEAgLTk3OSw5ICsxMDA4LDcgQEAKIAlydC0+cnQ2aV9pZGV2ICAgICA9IGlkZXY7CiAJcnQtPnJ0NmlfbmV4dGhvcCAgPSBuZWlnaDsKIAlhdG9taWNfc2V0KCZydC0+ZHN0Ll9fcmVmY250LCAxKTsKLQlydC0+ZHN0Lm1ldHJpY3NbUlRBWF9IT1BMSU1JVC0xXSA9IDI1NTsKLQlydC0+ZHN0Lm1ldHJpY3NbUlRBWF9NVFUtMV0gPSBpcHY2X2dldF9tdHUocnQtPnJ0NmlfZGV2KTsKLQlydC0+ZHN0Lm1ldHJpY3NbUlRBWF9BRFZNU1MtMV0gPSBpcHY2X2Fkdm1zcyhuZXQsIGRzdF9tdHUoJnJ0LT5kc3QpKTsKKwlkc3RfbWV0cmljX3NldCgmcnQtPmRzdCwgUlRBWF9IT1BMSU1JVCwgMjU1KTsKIAlydC0+ZHN0Lm91dHB1dCAgPSBpcDZfb3V0cHV0OwogCiAjaWYgMAkvKiB0aGVyZSdzIG5vIGNoYW5jZSB0byB1c2UgdGhlc2UgZm9yIG5kaXNjICovCkBAIC0xMDgwLDIzICsxMTA3LDEwIEBACiAgICBSZW1vdmUgaXQgb25seSB3aGVuIGFsbCB0aGUgdGhpbmdzIHdpbGwgd29yayEKICAqLwogCi1zdGF0aWMgaW50IGlwdjZfZ2V0X210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCWludCBtdHUgPSBJUFY2X01JTl9NVFU7Ci0Jc3RydWN0IGluZXQ2X2RldiAqaWRldjsKLQotCXJjdV9yZWFkX2xvY2soKTsKLQlpZGV2ID0gX19pbjZfZGV2X2dldChkZXYpOwotCWlmIChpZGV2KQotCQltdHUgPSBpZGV2LT5jbmYubXR1NjsKLQlyY3VfcmVhZF91bmxvY2soKTsKLQlyZXR1cm4gbXR1OwotfQotCiBpbnQgaXA2X2RzdF9ob3BsaW1pdChzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpCiB7Ci0JaW50IGhvcGxpbWl0ID0gZHN0X21ldHJpYyhkc3QsIFJUQVhfSE9QTElNSVQpOwotCWlmIChob3BsaW1pdCA8IDApIHsKKwlpbnQgaG9wbGltaXQgPSBkc3RfbWV0cmljX3Jhdyhkc3QsIFJUQVhfSE9QTElNSVQpOworCWlmIChob3BsaW1pdCA9PSAwKSB7CiAJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkc3QtPmRldjsKIAkJc3RydWN0IGluZXQ2X2RldiAqaWRldjsKIApAQCAtMTExMCw2ICsxMTI0LDcgQEAKIAl9CiAJcmV0dXJuIGhvcGxpbWl0OwogfQorRVhQT1JUX1NZTUJPTChpcDZfZHN0X2hvcGxpbWl0KTsKIAogLyoKICAqCkBAIC0xMjk1LDE3ICsxMzEwLDExIEBACiAJCQkJCWdvdG8gb3V0OwogCQkJCX0KIAotCQkJCXJ0LT5kc3QubWV0cmljc1t0eXBlIC0gMV0gPSBubGFfZ2V0X3UzMihubGEpOworCQkJCWRzdF9tZXRyaWNfc2V0KCZydC0+ZHN0LCB0eXBlLCBubGFfZ2V0X3UzMihubGEpKTsKIAkJCX0KIAkJfQogCX0KIAotCWlmIChkc3RfbWV0cmljKCZydC0+ZHN0LCBSVEFYX0hPUExJTUlUKSA9PSAwKQotCQlydC0+ZHN0Lm1ldHJpY3NbUlRBWF9IT1BMSU1JVC0xXSA9IC0xOwotCWlmICghZHN0X210dSgmcnQtPmRzdCkpCi0JCXJ0LT5kc3QubWV0cmljc1tSVEFYX01UVS0xXSA9IGlwdjZfZ2V0X210dShkZXYpOwotCWlmICghZHN0X21ldHJpYygmcnQtPmRzdCwgUlRBWF9BRFZNU1MpKQotCQlydC0+ZHN0Lm1ldHJpY3NbUlRBWF9BRFZNU1MtMV0gPSBpcHY2X2Fkdm1zcyhuZXQsIGRzdF9tdHUoJnJ0LT5kc3QpKTsKIAlydC0+ZHN0LmRldiA9IGRldjsKIAlydC0+cnQ2aV9pZGV2ID0gaWRldjsKIAlydC0+cnQ2aV90YWJsZSA9IHRhYmxlOwpAQCAtMTQ2MywxMiArMTQ3Miw4IEBACiAJc3RydWN0IGlwNnJkX2Zsb3dpIHJkZmwgPSB7CiAJCS5mbCA9IHsKIAkJCS5vaWYgPSBkZXYtPmlmaW5kZXgsCi0JCQkubmxfdSA9IHsKLQkJCQkuaXA2X3UgPSB7Ci0JCQkJCS5kYWRkciA9ICpkZXN0LAotCQkJCQkuc2FkZHIgPSAqc3JjLAotCQkJCX0sCi0JCQl9LAorCQkJLmZsNl9kc3QgPSAqZGVzdCwKKwkJCS5mbDZfc3JjID0gKnNyYywKIAkJfSwKIAl9OwogCkBAIC0xNTM0LDEwICsxNTM5LDYgQEAKIAogCWlwdjZfYWRkcl9jb3B5KCZucnQtPnJ0NmlfZ2F0ZXdheSwgKHN0cnVjdCBpbjZfYWRkciopbmVpZ2gtPnByaW1hcnlfa2V5KTsKIAlucnQtPnJ0NmlfbmV4dGhvcCA9IG5laWdoX2Nsb25lKG5laWdoKTsKLQkvKiBSZXNldCBwbXR1LCBpdCBtYXkgYmUgYmV0dGVyICovCi0JbnJ0LT5kc3QubWV0cmljc1tSVEFYX01UVS0xXSA9IGlwdjZfZ2V0X210dShuZWlnaC0+ZGV2KTsKLQlucnQtPmRzdC5tZXRyaWNzW1JUQVhfQURWTVNTLTFdID0gaXB2Nl9hZHZtc3MoZGV2X25ldChuZWlnaC0+ZGV2KSwKLQkJCQkJCQlkc3RfbXR1KCZucnQtPmRzdCkpOwogCiAJaWYgKGlwNl9pbnNfcnQobnJ0KSkKIAkJZ290byBvdXQ7CkBAIC0xNjAxLDkgKzE2MDIsMTIgQEAKIAkgICB3b3VsZCByZXR1cm4gYXV0b21hdGljYWxseS4KIAkgKi8KIAlpZiAocnQtPnJ0NmlfZmxhZ3MgJiBSVEZfQ0FDSEUpIHsKLQkJcnQtPmRzdC5tZXRyaWNzW1JUQVhfTVRVLTFdID0gcG10dTsKLQkJaWYgKGFsbGZyYWcpCi0JCQlydC0+ZHN0Lm1ldHJpY3NbUlRBWF9GRUFUVVJFUy0xXSB8PSBSVEFYX0ZFQVRVUkVfQUxMRlJBRzsKKwkJZHN0X21ldHJpY19zZXQoJnJ0LT5kc3QsIFJUQVhfTVRVLCBwbXR1KTsKKwkJaWYgKGFsbGZyYWcpIHsKKwkJCXUzMiBmZWF0dXJlcyA9IGRzdF9tZXRyaWMoJnJ0LT5kc3QsIFJUQVhfRkVBVFVSRVMpOworCQkJZmVhdHVyZXMgfD0gUlRBWF9GRUFUVVJFX0FMTEZSQUc7CisJCQlkc3RfbWV0cmljX3NldCgmcnQtPmRzdCwgUlRBWF9GRUFUVVJFUywgZmVhdHVyZXMpOworCQl9CiAJCWRzdF9zZXRfZXhwaXJlcygmcnQtPmRzdCwgbmV0LT5pcHY2LnN5c2N0bC5pcDZfcnRfbXR1X2V4cGlyZXMpOwogCQlydC0+cnQ2aV9mbGFncyB8PSBSVEZfTU9ESUZJRUR8UlRGX0VYUElSRVM7CiAJCWdvdG8gb3V0OwpAQCAtMTYyMCw5ICsxNjI0LDEyIEBACiAJCW5ydCA9IHJ0Nl9hbGxvY19jbG9uZShydCwgZGFkZHIpOwogCiAJaWYgKG5ydCkgewotCQlucnQtPmRzdC5tZXRyaWNzW1JUQVhfTVRVLTFdID0gcG10dTsKLQkJaWYgKGFsbGZyYWcpCi0JCQlucnQtPmRzdC5tZXRyaWNzW1JUQVhfRkVBVFVSRVMtMV0gfD0gUlRBWF9GRUFUVVJFX0FMTEZSQUc7CisJCWRzdF9tZXRyaWNfc2V0KCZucnQtPmRzdCwgUlRBWF9NVFUsIHBtdHUpOworCQlpZiAoYWxsZnJhZykgeworCQkJdTMyIGZlYXR1cmVzID0gZHN0X21ldHJpYygmbnJ0LT5kc3QsIFJUQVhfRkVBVFVSRVMpOworCQkJZmVhdHVyZXMgfD0gUlRBWF9GRUFUVVJFX0FMTEZSQUc7CisJCQlkc3RfbWV0cmljX3NldCgmbnJ0LT5kc3QsIFJUQVhfRkVBVFVSRVMsIGZlYXR1cmVzKTsKKwkJfQogCiAJCS8qIEFjY29yZGluZyB0byBSRkMgMTk4MSwgZGV0ZWN0aW5nIFBNVFUgaW5jcmVhc2Ugc2hvdWxkbid0IGJlCiAJCSAqIGhhcHBlbmVkIHdpdGhpbiA1IG1pbnMsIHRoZSByZWNvbW1lbmRlZCB0aW1lciBpcyAxMCBtaW5zLgpAQCAtMTY3Myw3ICsxNjgwLDcgQEAKIAkJcnQtPmRzdC5pbnB1dCA9IG9ydC0+ZHN0LmlucHV0OwogCQlydC0+ZHN0Lm91dHB1dCA9IG9ydC0+ZHN0Lm91dHB1dDsKIAotCQltZW1jcHkocnQtPmRzdC5tZXRyaWNzLCBvcnQtPmRzdC5tZXRyaWNzLCBSVEFYX01BWCpzaXplb2YodTMyKSk7CisJCWRzdF9jb3B5X21ldHJpY3MoJnJ0LT5kc3QsICZvcnQtPmRzdCk7CiAJCXJ0LT5kc3QuZXJyb3IgPSBvcnQtPmRzdC5lcnJvcjsKIAkJcnQtPmRzdC5kZXYgPSBvcnQtPmRzdC5kZXY7CiAJCWlmIChydC0+ZHN0LmRldikKQEAgLTE5NjUsOSArMTk3Miw3IEBACiAJcnQtPmRzdC5vdXRwdXQgPSBpcDZfb3V0cHV0OwogCXJ0LT5ydDZpX2RldiA9IG5ldC0+bG9vcGJhY2tfZGV2OwogCXJ0LT5ydDZpX2lkZXYgPSBpZGV2OwotCXJ0LT5kc3QubWV0cmljc1tSVEFYX01UVS0xXSA9IGlwdjZfZ2V0X210dShydC0+cnQ2aV9kZXYpOwotCXJ0LT5kc3QubWV0cmljc1tSVEFYX0FEVk1TUy0xXSA9IGlwdjZfYWR2bXNzKG5ldCwgZHN0X210dSgmcnQtPmRzdCkpOwotCXJ0LT5kc3QubWV0cmljc1tSVEFYX0hPUExJTUlULTFdID0gLTE7CisJZHN0X21ldHJpY19zZXQoJnJ0LT5kc3QsIFJUQVhfSE9QTElNSVQsIC0xKTsKIAlydC0+ZHN0Lm9ic29sZXRlID0gLTE7CiAKIAlydC0+cnQ2aV9mbGFncyA9IFJURl9VUCB8IFJURl9OT05FWFRIT1A7CkBAIC0yMDA0LDExICsyMDA5LDExIEBACiAKIHN0YXRpYyBpbnQgZmliNl9pZmRvd24oc3RydWN0IHJ0Nl9pbmZvICpydCwgdm9pZCAqYXJnKQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoKHN0cnVjdCBhcmdfZGV2X25ldCAqKWFyZyktPmRldjsKLQlzdHJ1Y3QgbmV0ICpuZXQgPSAoKHN0cnVjdCBhcmdfZGV2X25ldCAqKWFyZyktPm5ldDsKKwljb25zdCBzdHJ1Y3QgYXJnX2Rldl9uZXQgKmFkbiA9IGFyZzsKKwljb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYWRuLT5kZXY7CiAKLQlpZiAoKCh2b2lkICopcnQtPnJ0NmlfZGV2ID09IGRldiB8fCBkZXYgPT0gTlVMTCkgJiYKLQkgICAgcnQgIT0gbmV0LT5pcHY2LmlwNl9udWxsX2VudHJ5KSB7CisJaWYgKChydC0+cnQ2aV9kZXYgPT0gZGV2IHx8IGRldiA9PSBOVUxMKSAmJgorCSAgICBydCAhPSBhZG4tPm5ldC0+aXB2Ni5pcDZfbnVsbF9lbnRyeSkgewogCQlSVDZfVFJBQ0UoImRlbGV0ZWQgYnkgaWZkb3duICVwXG4iLCBydCk7CiAJCXJldHVybiAtMTsKIAl9CkBAIC0yMDM2LDcgKzIwNDEsNiBAQAogewogCXN0cnVjdCBydDZfbXR1X2NoYW5nZV9hcmcgKmFyZyA9IChzdHJ1Y3QgcnQ2X210dV9jaGFuZ2VfYXJnICopIHBfYXJnOwogCXN0cnVjdCBpbmV0Nl9kZXYgKmlkZXY7Ci0Jc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChhcmctPmRldik7CiAKIAkvKiBJbiBJUHY2IHBtdHUgZGlzY292ZXJ5IGlzIG5vdCBvcHRpb25hbCwKIAkgICBzbyB0aGF0IFJUQVhfTVRVIGxvY2sgY2Fubm90IGRpc2FibGUgaXQuCkBAIC0yMDY3LDggKzIwNzEsNyBAQAogCSAgICAoZHN0X210dSgmcnQtPmRzdCkgPj0gYXJnLT5tdHUgfHwKIAkgICAgIChkc3RfbXR1KCZydC0+ZHN0KSA8IGFyZy0+bXR1ICYmCiAJICAgICAgZHN0X210dSgmcnQtPmRzdCkgPT0gaWRldi0+Y25mLm10dTYpKSkgewotCQlydC0+ZHN0Lm1ldHJpY3NbUlRBWF9NVFUtMV0gPSBhcmctPm10dTsKLQkJcnQtPmRzdC5tZXRyaWNzW1JUQVhfQURWTVNTLTFdID0gaXB2Nl9hZHZtc3MobmV0LCBhcmctPm10dSk7CisJCWRzdF9tZXRyaWNfc2V0KCZydC0+ZHN0LCBSVEFYX01UVSwgYXJnLT5tdHUpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTIyOTQsNyArMjI5Nyw3IEBACiAJCQlOTEFfUFVUKHNrYiwgUlRBX1BSRUZTUkMsIDE2LCAmc2FkZHJfYnVmKTsKIAl9CiAKLQlpZiAocnRuZXRsaW5rX3B1dF9tZXRyaWNzKHNrYiwgcnQtPmRzdC5tZXRyaWNzKSA8IDApCisJaWYgKHJ0bmV0bGlua19wdXRfbWV0cmljcyhza2IsIGRzdF9tZXRyaWNzX3B0cigmcnQtPmRzdCkpIDwgMCkKIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAKIAlpZiAocnQtPmRzdC5uZWlnaGJvdXIpCkBAIC0yNDcwLDggKzI0NzMsNiBAQAogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIAotI2RlZmluZSBSVDZfSU5GT19MRU4gKDMyICsgNCArIDMyICsgNCArIDMyICsgNDAgKyA1ICsgMSkKLQogc3RydWN0IHJ0Nl9wcm9jX2FyZwogewogCWNoYXIgKmJ1ZmZlcjsKQEAgLTI2ODcsNiArMjY4OCw3IEBACiAJbmV0LT5pcHY2LmlwNl9udWxsX2VudHJ5LT5kc3QucGF0aCA9CiAJCShzdHJ1Y3QgZHN0X2VudHJ5ICopbmV0LT5pcHY2LmlwNl9udWxsX2VudHJ5OwogCW5ldC0+aXB2Ni5pcDZfbnVsbF9lbnRyeS0+ZHN0Lm9wcyA9ICZuZXQtPmlwdjYuaXA2X2RzdF9vcHM7CisJZHN0X21ldHJpY19zZXQoJm5ldC0+aXB2Ni5pcDZfbnVsbF9lbnRyeS0+ZHN0LCBSVEFYX0hPUExJTUlULCAyNTUpOwogCiAjaWZkZWYgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTCiAJbmV0LT5pcHY2LmlwNl9wcm9oaWJpdF9lbnRyeSA9IGttZW1kdXAoJmlwNl9wcm9oaWJpdF9lbnRyeV90ZW1wbGF0ZSwKQEAgLTI2OTcsNiArMjY5OSw3IEBACiAJbmV0LT5pcHY2LmlwNl9wcm9oaWJpdF9lbnRyeS0+ZHN0LnBhdGggPQogCQkoc3RydWN0IGRzdF9lbnRyeSAqKW5ldC0+aXB2Ni5pcDZfcHJvaGliaXRfZW50cnk7CiAJbmV0LT5pcHY2LmlwNl9wcm9oaWJpdF9lbnRyeS0+ZHN0Lm9wcyA9ICZuZXQtPmlwdjYuaXA2X2RzdF9vcHM7CisJZHN0X21ldHJpY19zZXQoJm5ldC0+aXB2Ni5pcDZfcHJvaGliaXRfZW50cnktPmRzdCwgUlRBWF9IT1BMSU1JVCwgMjU1KTsKIAogCW5ldC0+aXB2Ni5pcDZfYmxrX2hvbGVfZW50cnkgPSBrbWVtZHVwKCZpcDZfYmxrX2hvbGVfZW50cnlfdGVtcGxhdGUsCiAJCQkJCSAgICAgICBzaXplb2YoKm5ldC0+aXB2Ni5pcDZfYmxrX2hvbGVfZW50cnkpLApAQCAtMjcwNiw2ICsyNzA5LDcgQEAKIAluZXQtPmlwdjYuaXA2X2Jsa19ob2xlX2VudHJ5LT5kc3QucGF0aCA9CiAJCShzdHJ1Y3QgZHN0X2VudHJ5ICopbmV0LT5pcHY2LmlwNl9ibGtfaG9sZV9lbnRyeTsKIAluZXQtPmlwdjYuaXA2X2Jsa19ob2xlX2VudHJ5LT5kc3Qub3BzID0gJm5ldC0+aXB2Ni5pcDZfZHN0X29wczsKKwlkc3RfbWV0cmljX3NldCgmbmV0LT5pcHY2LmlwNl9ibGtfaG9sZV9lbnRyeS0+ZHN0LCBSVEFYX0hPUExJTUlULCAyNTUpOwogI2VuZGlmCiAKIAluZXQtPmlwdjYuc3lzY3RsLmZsdXNoX2RlbGF5ID0gMDsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3NpdC5jIGIvbmV0L2lwdjYvc2l0LmMKaW5kZXggOGM0ZDAwYy4uOGNlMzhmMSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvc2l0LmMKKysrIGIvbmV0L2lwdjYvc2l0LmMKQEAgLTczMSwxMCArNzMxLDkgQEAKIAl9CiAKIAl7Ci0JCXN0cnVjdCBmbG93aSBmbCA9IHsgLm5sX3UgPSB7IC5pcDRfdSA9Ci0JCQkJCSAgICAgIHsgLmRhZGRyID0gZHN0LAotCQkJCQkJLnNhZGRyID0gdGlwaC0+c2FkZHIsCi0JCQkJCQkudG9zID0gUlRfVE9TKHRvcykgfSB9LAorCQlzdHJ1Y3QgZmxvd2kgZmwgPSB7IC5mbDRfZHN0ID0gZHN0LAorCQkJCSAgICAuZmw0X3NyYyA9IHRpcGgtPnNhZGRyLAorCQkJCSAgICAuZmw0X3RvcyA9IFJUX1RPUyh0b3MpLAogCQkJCSAgICAub2lmID0gdHVubmVsLT5wYXJtcy5saW5rLAogCQkJCSAgICAucHJvdG8gPSBJUFBST1RPX0lQVjYgfTsKIAkJaWYgKGlwX3JvdXRlX291dHB1dF9rZXkoZGV2X25ldChkZXYpLCAmcnQsICZmbCkpIHsKQEAgLTg1NiwxMCArODU1LDkgQEAKIAlpcGggPSAmdHVubmVsLT5wYXJtcy5pcGg7CiAKIAlpZiAoaXBoLT5kYWRkcikgewotCQlzdHJ1Y3QgZmxvd2kgZmwgPSB7IC5ubF91ID0geyAuaXA0X3UgPQotCQkJCQkgICAgICB7IC5kYWRkciA9IGlwaC0+ZGFkZHIsCi0JCQkJCQkuc2FkZHIgPSBpcGgtPnNhZGRyLAotCQkJCQkJLnRvcyA9IFJUX1RPUyhpcGgtPnRvcykgfSB9LAorCQlzdHJ1Y3QgZmxvd2kgZmwgPSB7IC5mbDRfZHN0ID0gaXBoLT5kYWRkciwKKwkJCQkgICAgLmZsNF9zcmMgPSBpcGgtPnNhZGRyLAorCQkJCSAgICAuZmw0X3RvcyA9IFJUX1RPUyhpcGgtPnRvcyksCiAJCQkJICAgIC5vaWYgPSB0dW5uZWwtPnBhcm1zLmxpbmssCiAJCQkJICAgIC5wcm90byA9IElQUFJPVE9fSVBWNiB9OwogCQlzdHJ1Y3QgcnRhYmxlICpydDsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3RjcF9pcHY2LmMgYi9uZXQvaXB2Ni90Y3BfaXB2Ni5jCmluZGV4IDdlNDFlMmMuLjIwYWE5NWUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3RjcF9pcHY2LmMKKysrIGIvbmV0L2lwdjYvdGNwX2lwdjYuYwpAQCAtMTMwLDYgKzEzMCw3IEBACiAJc3RydWN0IGlwdjZfcGluZm8gKm5wID0gaW5ldDZfc2soc2spOwogCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwogCXN0cnVjdCBpbjZfYWRkciAqc2FkZHIgPSBOVUxMLCAqZmluYWxfcCwgZmluYWw7CisJc3RydWN0IHJ0Nl9pbmZvICpydDsKIAlzdHJ1Y3QgZmxvd2kgZmw7CiAJc3RydWN0IGRzdF9lbnRyeSAqZHN0OwogCWludCBhZGRyX3R5cGU7CkBAIC0yODAsNiArMjgxLDI2IEBACiAJc2stPnNrX2dzb190eXBlID0gU0tCX0dTT19UQ1BWNjsKIAlfX2lwNl9kc3Rfc3RvcmUoc2ssIGRzdCwgTlVMTCwgTlVMTCk7CiAKKwlydCA9IChzdHJ1Y3QgcnQ2X2luZm8gKikgZHN0OworCWlmICh0Y3BfZGVhdGhfcm93LnN5c2N0bF90d19yZWN5Y2xlICYmCisJICAgICF0cC0+cnhfb3B0LnRzX3JlY2VudF9zdGFtcCAmJgorCSAgICBpcHY2X2FkZHJfZXF1YWwoJnJ0LT5ydDZpX2RzdC5hZGRyLCAmbnAtPmRhZGRyKSkgeworCQlzdHJ1Y3QgaW5ldF9wZWVyICpwZWVyID0gcnQ2X2dldF9wZWVyKHJ0KTsKKwkJLyoKKwkJICogVkoncyBpZGVhLiBXZSBzYXZlIGxhc3QgdGltZXN0YW1wIHNlZW4gZnJvbQorCQkgKiB0aGUgZGVzdGluYXRpb24gaW4gcGVlciB0YWJsZSwgd2hlbiBlbnRlcmluZyBzdGF0ZQorCQkgKiBUSU1FLVdBSVQgKiBhbmQgaW5pdGlhbGl6ZSByeF9vcHQudHNfcmVjZW50IGZyb20gaXQsCisJCSAqIHdoZW4gdHJ5aW5nIG5ldyBjb25uZWN0aW9uLgorCQkgKi8KKwkJaWYgKHBlZXIpIHsKKwkJCWluZXRfcGVlcl9yZWZjaGVjayhwZWVyKTsKKwkJCWlmICgodTMyKWdldF9zZWNvbmRzKCkgLSBwZWVyLT50Y3BfdHNfc3RhbXAgPD0gVENQX1BBV1NfTVNMKSB7CisJCQkJdHAtPnJ4X29wdC50c19yZWNlbnRfc3RhbXAgPSBwZWVyLT50Y3BfdHNfc3RhbXA7CisJCQkJdHAtPnJ4X29wdC50c19yZWNlbnQgPSBwZWVyLT50Y3BfdHM7CisJCQl9CisJCX0KKwl9CisKIAlpY3NrLT5pY3NrX2V4dF9oZHJfbGVuID0gMDsKIAlpZiAobnAtPm9wdCkKIAkJaWNzay0+aWNza19leHRfaGRyX2xlbiA9IChucC0+b3B0LT5vcHRfZmxlbiArCkBAIC05MDYsMTIgKzkyNyw2IEBACiB9OwogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgdGltZXdhaXRfc29ja19vcHMgdGNwNl90aW1ld2FpdF9zb2NrX29wcyA9IHsKLQkudHdza19vYmpfc2l6ZQk9IHNpemVvZihzdHJ1Y3QgdGNwNl90aW1ld2FpdF9zb2NrKSwKLQkudHdza191bmlxdWUJPSB0Y3BfdHdza191bmlxdWUsCi0JLnR3c2tfZGVzdHJ1Y3Rvcj0gdGNwX3R3c2tfZGVzdHJ1Y3RvciwKLX07Ci0KIHN0YXRpYyB2b2lkIF9fdGNwX3Y2X3NlbmRfY2hlY2soc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQlzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyKQogewpAQCAtMTE3Niw2ICsxMTkxLDcgQEAKIAlzdHJ1Y3QgaXB2Nl9waW5mbyAqbnAgPSBpbmV0Nl9zayhzayk7CiAJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CiAJX191MzIgaXNuID0gVENQX1NLQl9DQihza2IpLT53aGVuOworCXN0cnVjdCBkc3RfZW50cnkgKmRzdCA9IE5VTEw7CiAjaWZkZWYgQ09ORklHX1NZTl9DT09LSUVTCiAJaW50IHdhbnRfY29va2llID0gMDsKICNlbHNlCkBAIC0xMjczLDYgKzEyODksOCBAQAogCQlUQ1BfRUNOX2NyZWF0ZV9yZXF1ZXN0KHJlcSwgdGNwX2hkcihza2IpKTsKIAogCWlmICghaXNuKSB7CisJCXN0cnVjdCBpbmV0X3BlZXIgKnBlZXIgPSBOVUxMOworCiAJCWlmIChpcHY2X29wdF9hY2NlcHRlZChzaywgc2tiKSB8fAogCQkgICAgbnAtPnJ4b3B0LmJpdHMucnhpbmZvIHx8IG5wLT5yeG9wdC5iaXRzLnJ4b2luZm8gfHwKIAkJICAgIG5wLT5yeG9wdC5iaXRzLnJ4aGxpbSB8fCBucC0+cnhvcHQuYml0cy5yeG9obGltKSB7CkBAIC0xMjg1LDEzICsxMzAzLDU3IEBACiAJCWlmICghc2stPnNrX2JvdW5kX2Rldl9pZiAmJgogCQkgICAgaXB2Nl9hZGRyX3R5cGUoJnRyZXEtPnJtdF9hZGRyKSAmIElQVjZfQUREUl9MSU5LTE9DQUwpCiAJCQl0cmVxLT5paWYgPSBpbmV0Nl9paWYoc2tiKTsKLQkJaWYgKCF3YW50X2Nvb2tpZSkgewotCQkJaXNuID0gdGNwX3Y2X2luaXRfc2VxdWVuY2Uoc2tiKTsKLQkJfSBlbHNlIHsKKworCQlpZiAod2FudF9jb29raWUpIHsKIAkJCWlzbiA9IGNvb2tpZV92Nl9pbml0X3NlcXVlbmNlKHNrLCBza2IsICZyZXEtPm1zcyk7CiAJCQlyZXEtPmNvb2tpZV90cyA9IHRtcF9vcHQudHN0YW1wX29rOworCQkJZ290byBoYXZlX2lzbjsKIAkJfQorCisJCS8qIFZKJ3MgaWRlYS4gV2Ugc2F2ZSBsYXN0IHRpbWVzdGFtcCBzZWVuCisJCSAqIGZyb20gdGhlIGRlc3RpbmF0aW9uIGluIHBlZXIgdGFibGUsIHdoZW4gZW50ZXJpbmcKKwkJICogc3RhdGUgVElNRS1XQUlULCBhbmQgY2hlY2sgYWdhaW5zdCBpdCBiZWZvcmUKKwkJICogYWNjZXB0aW5nIG5ldyBjb25uZWN0aW9uIHJlcXVlc3QuCisJCSAqCisJCSAqIElmICJpc24iIGlzIG5vdCB6ZXJvLCB0aGlzIHJlcXVlc3QgaGl0IGFsaXZlCisJCSAqIHRpbWV3YWl0IGJ1Y2tldCwgc28gdGhhdCBhbGwgdGhlIG5lY2Vzc2FyeSBjaGVja3MKKwkJICogYXJlIG1hZGUgaW4gdGhlIGZ1bmN0aW9uIHByb2Nlc3NpbmcgdGltZXdhaXQgc3RhdGUuCisJCSAqLworCQlpZiAodG1wX29wdC5zYXdfdHN0YW1wICYmCisJCSAgICB0Y3BfZGVhdGhfcm93LnN5c2N0bF90d19yZWN5Y2xlICYmCisJCSAgICAoZHN0ID0gaW5ldDZfY3NrX3JvdXRlX3JlcShzaywgcmVxKSkgIT0gTlVMTCAmJgorCQkgICAgKHBlZXIgPSBydDZfZ2V0X3BlZXIoKHN0cnVjdCBydDZfaW5mbyAqKWRzdCkpICE9IE5VTEwgJiYKKwkJICAgIGlwdjZfYWRkcl9lcXVhbCgoc3RydWN0IGluNl9hZGRyICopcGVlci0+ZGFkZHIuYTYsCisJCQkJICAgICZ0cmVxLT5ybXRfYWRkcikpIHsKKwkJCWluZXRfcGVlcl9yZWZjaGVjayhwZWVyKTsKKwkJCWlmICgodTMyKWdldF9zZWNvbmRzKCkgLSBwZWVyLT50Y3BfdHNfc3RhbXAgPCBUQ1BfUEFXU19NU0wgJiYKKwkJCSAgICAoczMyKShwZWVyLT50Y3BfdHMgLSByZXEtPnRzX3JlY2VudCkgPgorCQkJCQkJCVRDUF9QQVdTX1dJTkRPVykgeworCQkJCU5FVF9JTkNfU1RBVFNfQkgoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfUEFXU1BBU1NJVkVSRUpFQ1RFRCk7CisJCQkJZ290byBkcm9wX2FuZF9yZWxlYXNlOworCQkJfQorCQl9CisJCS8qIEtpbGwgdGhlIGZvbGxvd2luZyBjbGF1c2UsIGlmIHlvdSBkaXNsaWtlIHRoaXMgd2F5LiAqLworCQllbHNlIGlmICghc3lzY3RsX3RjcF9zeW5jb29raWVzICYmCisJCQkgKHN5c2N0bF9tYXhfc3luX2JhY2tsb2cgLSBpbmV0X2Nza19yZXFza19xdWV1ZV9sZW4oc2spIDwKKwkJCSAgKHN5c2N0bF9tYXhfc3luX2JhY2tsb2cgPj4gMikpICYmCisJCQkgKCFwZWVyIHx8ICFwZWVyLT50Y3BfdHNfc3RhbXApICYmCisJCQkgKCFkc3QgfHwgIWRzdF9tZXRyaWMoZHN0LCBSVEFYX1JUVCkpKSB7CisJCQkvKiBXaXRob3V0IHN5bmNvb2tpZXMgbGFzdCBxdWFydGVyIG9mCisJCQkgKiBiYWNrbG9nIGlzIGZpbGxlZCB3aXRoIGRlc3RpbmF0aW9ucywKKwkJCSAqIHByb3ZlbiB0byBiZSBhbGl2ZS4KKwkJCSAqIEl0IG1lYW5zIHRoYXQgd2UgY29udGludWUgdG8gY29tbXVuaWNhdGUKKwkJCSAqIHRvIGRlc3RpbmF0aW9ucywgYWxyZWFkeSByZW1lbWJlcmVkCisJCQkgKiB0byB0aGUgbW9tZW50IG9mIHN5bmZsb29kLgorCQkJICovCisJCQlMSU1JVF9ORVRERUJVRyhLRVJOX0RFQlVHICJUQ1A6IGRyb3Agb3BlbiByZXF1ZXN0IGZyb20gJXBJNi8ldVxuIiwKKwkJCQkgICAgICAgJnRyZXEtPnJtdF9hZGRyLCBudG9ocyh0Y3BfaGRyKHNrYiktPnNvdXJjZSkpOworCQkJZ290byBkcm9wX2FuZF9yZWxlYXNlOworCQl9CisKKwkJaXNuID0gdGNwX3Y2X2luaXRfc2VxdWVuY2Uoc2tiKTsKIAl9CitoYXZlX2lzbjoKIAl0Y3BfcnNrKHJlcSktPnNudF9pc24gPSBpc247CiAKIAlzZWN1cml0eV9pbmV0X2Nvbm5fcmVxdWVzdChzaywgc2tiLCByZXEpOwpAQCAtMTMwNCw2ICsxMzY2LDggQEAKIAlpbmV0Nl9jc2tfcmVxc2tfcXVldWVfaGFzaF9hZGQoc2ssIHJlcSwgVENQX1RJTUVPVVRfSU5JVCk7CiAJcmV0dXJuIDA7CiAKK2Ryb3BfYW5kX3JlbGVhc2U6CisJZHN0X3JlbGVhc2UoZHN0KTsKIGRyb3BfYW5kX2ZyZWU6CiAJcmVxc2tfZnJlZShyZXEpOwogZHJvcDoKQEAgLTEzODIsMjggKzE0NDYsOSBAQAogCWlmIChza19hY2NlcHRxX2lzX2Z1bGwoc2spKQogCQlnb3RvIG91dF9vdmVyZmxvdzsKIAotCWlmIChkc3QgPT0gTlVMTCkgewotCQlzdHJ1Y3QgaW42X2FkZHIgKmZpbmFsX3AsIGZpbmFsOwotCQlzdHJ1Y3QgZmxvd2kgZmw7Ci0KLQkJbWVtc2V0KCZmbCwgMCwgc2l6ZW9mKGZsKSk7Ci0JCWZsLnByb3RvID0gSVBQUk9UT19UQ1A7Ci0JCWlwdjZfYWRkcl9jb3B5KCZmbC5mbDZfZHN0LCAmdHJlcS0+cm10X2FkZHIpOwotCQlmaW5hbF9wID0gZmw2X3VwZGF0ZV9kc3QoJmZsLCBvcHQsICZmaW5hbCk7Ci0JCWlwdjZfYWRkcl9jb3B5KCZmbC5mbDZfc3JjLCAmdHJlcS0+bG9jX2FkZHIpOwotCQlmbC5vaWYgPSBzay0+c2tfYm91bmRfZGV2X2lmOwotCQlmbC5tYXJrID0gc2stPnNrX21hcms7Ci0JCWZsLmZsX2lwX2Rwb3J0ID0gaW5ldF9yc2socmVxKS0+cm10X3BvcnQ7Ci0JCWZsLmZsX2lwX3Nwb3J0ID0gaW5ldF9yc2socmVxKS0+bG9jX3BvcnQ7Ci0JCXNlY3VyaXR5X3JlcV9jbGFzc2lmeV9mbG93KHJlcSwgJmZsKTsKLQotCQlpZiAoaXA2X2RzdF9sb29rdXAoc2ssICZkc3QsICZmbCkpCi0JCQlnb3RvIG91dDsKLQotCQlpZiAoZmluYWxfcCkKLQkJCWlwdjZfYWRkcl9jb3B5KCZmbC5mbDZfZHN0LCBmaW5hbF9wKTsKLQotCQlpZiAoKHhmcm1fbG9va3VwKHNvY2tfbmV0KHNrKSwgJmRzdCwgJmZsLCBzaywgMCkpIDwgMCkKKwlpZiAoIWRzdCkgeworCQlkc3QgPSBpbmV0Nl9jc2tfcm91dGVfcmVxKHNrLCByZXEpOworCQlpZiAoIWRzdCkKIAkJCWdvdG8gb3V0OwogCX0KIApAQCAtMTQ3Niw3ICsxNTIxLDcgQEAKIAogCXRjcF9tdHVwX2luaXQobmV3c2spOwogCXRjcF9zeW5jX21zcyhuZXdzaywgZHN0X210dShkc3QpKTsKLQluZXd0cC0+YWR2bXNzID0gZHN0X21ldHJpYyhkc3QsIFJUQVhfQURWTVNTKTsKKwluZXd0cC0+YWR2bXNzID0gZHN0X21ldHJpY19hZHZtc3MoZHN0KTsKIAl0Y3BfaW5pdGlhbGl6ZV9yY3ZfbXNzKG5ld3NrKTsKIAogCW5ld2luZXQtPmluZXRfZGFkZHIgPSBuZXdpbmV0LT5pbmV0X3NhZGRyID0gTE9PUEJBQ0s0X0lQVjY7CkBAIC0xODE4LDE5ICsxODYzLDUxIEBACiAJZ290byBkaXNjYXJkX2l0OwogfQogCi1zdGF0aWMgaW50IHRjcF92Nl9yZW1lbWJlcl9zdGFtcChzdHJ1Y3Qgc29jayAqc2spCitzdGF0aWMgc3RydWN0IGluZXRfcGVlciAqdGNwX3Y2X2dldF9wZWVyKHN0cnVjdCBzb2NrICpzaywgYm9vbCAqcmVsZWFzZV9pdCkKIHsKLQkvKiBBbGFzLCBub3QgeWV0Li4uICovCi0JcmV0dXJuIDA7CisJc3RydWN0IHJ0Nl9pbmZvICpydCA9IChzdHJ1Y3QgcnQ2X2luZm8gKikgX19za19kc3RfZ2V0KHNrKTsKKwlzdHJ1Y3QgaXB2Nl9waW5mbyAqbnAgPSBpbmV0Nl9zayhzayk7CisJc3RydWN0IGluZXRfcGVlciAqcGVlcjsKKworCWlmICghcnQgfHwKKwkgICAgIWlwdjZfYWRkcl9lcXVhbCgmbnAtPmRhZGRyLCAmcnQtPnJ0NmlfZHN0LmFkZHIpKSB7CisJCXBlZXIgPSBpbmV0X2dldHBlZXJfdjYoJm5wLT5kYWRkciwgMSk7CisJCSpyZWxlYXNlX2l0ID0gdHJ1ZTsKKwl9IGVsc2UgeworCQlpZiAoIXJ0LT5ydDZpX3BlZXIpCisJCQlydDZfYmluZF9wZWVyKHJ0LCAxKTsKKwkJcGVlciA9IHJ0LT5ydDZpX3BlZXI7CisJCSpyZWxlYXNlX2l0ID0gZmFsc2U7CisJfQorCisJcmV0dXJuIHBlZXI7CiB9CiAKK3N0YXRpYyB2b2lkICp0Y3BfdjZfdHdfZ2V0X3BlZXIoc3RydWN0IHNvY2sgKnNrKQoreworCXN0cnVjdCBpbmV0Nl90aW1ld2FpdF9zb2NrICp0dzYgPSBpbmV0Nl90d3NrKHNrKTsKKwlzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICp0dyA9IGluZXRfdHdzayhzayk7CisKKwlpZiAodHctPnR3X2ZhbWlseSA9PSBBRl9JTkVUKQorCQlyZXR1cm4gdGNwX3Y0X3R3X2dldF9wZWVyKHNrKTsKKworCXJldHVybiBpbmV0X2dldHBlZXJfdjYoJnR3Ni0+dHdfdjZfZGFkZHIsIDEpOworfQorCitzdGF0aWMgc3RydWN0IHRpbWV3YWl0X3NvY2tfb3BzIHRjcDZfdGltZXdhaXRfc29ja19vcHMgPSB7CisJLnR3c2tfb2JqX3NpemUJPSBzaXplb2Yoc3RydWN0IHRjcDZfdGltZXdhaXRfc29jayksCisJLnR3c2tfdW5pcXVlCT0gdGNwX3R3c2tfdW5pcXVlLAorCS50d3NrX2Rlc3RydWN0b3I9IHRjcF90d3NrX2Rlc3RydWN0b3IsCisJLnR3c2tfZ2V0cGVlcgk9IHRjcF92Nl90d19nZXRfcGVlciwKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2tfYWZfb3BzIGlwdjZfc3BlY2lmaWMgPSB7CiAJLnF1ZXVlX3htaXQJICAgPSBpbmV0Nl9jc2tfeG1pdCwKIAkuc2VuZF9jaGVjawkgICA9IHRjcF92Nl9zZW5kX2NoZWNrLAogCS5yZWJ1aWxkX2hlYWRlcgkgICA9IGluZXQ2X3NrX3JlYnVpbGRfaGVhZGVyLAogCS5jb25uX3JlcXVlc3QJICAgPSB0Y3BfdjZfY29ubl9yZXF1ZXN0LAogCS5zeW5fcmVjdl9zb2NrCSAgID0gdGNwX3Y2X3N5bl9yZWN2X3NvY2ssCi0JLnJlbWVtYmVyX3N0YW1wCSAgID0gdGNwX3Y2X3JlbWVtYmVyX3N0YW1wLAorCS5nZXRfcGVlcgkgICA9IHRjcF92Nl9nZXRfcGVlciwKIAkubmV0X2hlYWRlcl9sZW4JICAgPSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpLAogCS5zZXRzb2Nrb3B0CSAgID0gaXB2Nl9zZXRzb2Nrb3B0LAogCS5nZXRzb2Nrb3B0CSAgID0gaXB2Nl9nZXRzb2Nrb3B0LApAQCAtMTg2Miw3ICsxOTM5LDcgQEAKIAkucmVidWlsZF9oZWFkZXIJICAgPSBpbmV0X3NrX3JlYnVpbGRfaGVhZGVyLAogCS5jb25uX3JlcXVlc3QJICAgPSB0Y3BfdjZfY29ubl9yZXF1ZXN0LAogCS5zeW5fcmVjdl9zb2NrCSAgID0gdGNwX3Y2X3N5bl9yZWN2X3NvY2ssCi0JLnJlbWVtYmVyX3N0YW1wCSAgID0gdGNwX3Y0X3JlbWVtYmVyX3N0YW1wLAorCS5nZXRfcGVlcgkgICA9IHRjcF92NF9nZXRfcGVlciwKIAkubmV0X2hlYWRlcl9sZW4JICAgPSBzaXplb2Yoc3RydWN0IGlwaGRyKSwKIAkuc2V0c29ja29wdAkgICA9IGlwdjZfc2V0c29ja29wdCwKIAkuZ2V0c29ja29wdAkgICA9IGlwdjZfZ2V0c29ja29wdCwKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3VkcC5jIGIvbmV0L2lwdjYvdWRwLmMKaW5kZXggY2Q2Y2I3Yy4uOWEwMDljNiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvdWRwLmMKKysrIGIvbmV0L2lwdjYvdWRwLmMKQEAgLTU0LDggKzU0LDggQEAKIHsKIAljb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNrX3Jjdl9zYWRkcjYgPSAmaW5ldDZfc2soc2spLT5yY3Zfc2FkZHI7CiAJY29uc3Qgc3RydWN0IGluNl9hZGRyICpzazJfcmN2X3NhZGRyNiA9IGluZXQ2X3Jjdl9zYWRkcihzazIpOwotCV9fYmUzMiBzazFfcmN2X3NhZGRyID0gaW5ldF9zayhzayktPmluZXRfcmN2X3NhZGRyOwotCV9fYmUzMiBzazJfcmN2X3NhZGRyID0gaW5ldF9yY3Zfc2FkZHIoc2syKTsKKwlfX2JlMzIgc2sxX3Jjdl9zYWRkciA9IHNrX3Jjdl9zYWRkcihzayk7CisJX19iZTMyIHNrMl9yY3Zfc2FkZHIgPSBza19yY3Zfc2FkZHIoc2syKTsKIAlpbnQgc2tfaXB2Nm9ubHkgPSBpcHY2X29ubHlfc29jayhzayk7CiAJaW50IHNrMl9pcHY2b25seSA9IGluZXRfdjZfaXB2Nm9ubHkoc2syKTsKIAlpbnQgYWRkcl90eXBlID0gaXB2Nl9hZGRyX3R5cGUoc2tfcmN2X3NhZGRyNik7CkBAIC0yMjcsNyArMjI3LDcgQEAKIAogCWlmIChyZXN1bHQpIHsKIGV4YWN0X21hdGNoOgotCQlpZiAodW5saWtlbHkoIWF0b21pY19pbmNfbm90X3plcm8oJnJlc3VsdC0+c2tfcmVmY250KSkpCisJCWlmICh1bmxpa2VseSghYXRvbWljX2luY19ub3RfemVyb19oaW50KCZyZXN1bHQtPnNrX3JlZmNudCwgMikpKQogCQkJcmVzdWx0ID0gTlVMTDsKIAkJZWxzZSBpZiAodW5saWtlbHkoY29tcHV0ZV9zY29yZTIocmVzdWx0LCBuZXQsIHNhZGRyLCBzcG9ydCwKIAkJCQkgIGRhZGRyLCBobnVtLCBkaWYpIDwgYmFkbmVzcykpIHsKQEAgLTI5NCw3ICsyOTQsNyBAQAogCQlnb3RvIGJlZ2luOwogCiAJaWYgKHJlc3VsdCkgewotCQlpZiAodW5saWtlbHkoIWF0b21pY19pbmNfbm90X3plcm8oJnJlc3VsdC0+c2tfcmVmY250KSkpCisJCWlmICh1bmxpa2VseSghYXRvbWljX2luY19ub3RfemVyb19oaW50KCZyZXN1bHQtPnNrX3JlZmNudCwgMikpKQogCQkJcmVzdWx0ID0gTlVMTDsKIAkJZWxzZSBpZiAodW5saWtlbHkoY29tcHV0ZV9zY29yZShyZXN1bHQsIG5ldCwgaG51bSwgc2FkZHIsIHNwb3J0LAogCQkJCQlkYWRkciwgZHBvcnQsIGRpZikgPCBiYWRuZXNzKSkgewpAQCAtNjAyLDcgKzYwMiw3IEBACiAKIAkJc2sgPSBzdGFja1tpXTsKIAkJaWYgKHNrYjEpIHsKLQkJCWlmIChza19yY3ZxdWV1ZXNfZnVsbChzaywgc2tiKSkgeworCQkJaWYgKHNrX3JjdnF1ZXVlc19mdWxsKHNrLCBza2IxKSkgewogCQkJCWtmcmVlX3NrYihza2IxKTsKIAkJCQlnb3RvIGRyb3A7CiAJCQl9CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni94ZnJtNl9tb2RlX3R1bm5lbC5jIGIvbmV0L2lwdjYveGZybTZfbW9kZV90dW5uZWwuYwppbmRleCBiODA5ODEyLi42NDVjYjk2IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni94ZnJtNl9tb2RlX3R1bm5lbC5jCisrKyBiL25ldC9pcHY2L3hmcm02X21vZGVfdHVubmVsLmMKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDxuZXQvZHNmaWVsZC5oPgogI2luY2x1ZGUgPG5ldC9kc3QuaD4KICNpbmNsdWRlIDxuZXQvaW5ldF9lY24uaD4KKyNpbmNsdWRlIDxuZXQvaXA2X3JvdXRlLmg+CiAjaW5jbHVkZSA8bmV0L2lwdjYuaD4KICNpbmNsdWRlIDxuZXQveGZybS5oPgogCkBAIC01Myw3ICs1NCw3IEBACiAJaWYgKHgtPnByb3BzLmZsYWdzICYgWEZSTV9TVEFURV9OT0VDTikKIAkJZHNmaWVsZCAmPSB+SU5FVF9FQ05fTUFTSzsKIAlpcHY2X2NoYW5nZV9kc2ZpZWxkKHRvcF9pcGgsIDAsIGRzZmllbGQpOwotCXRvcF9pcGgtPmhvcF9saW1pdCA9IGRzdF9tZXRyaWMoZHN0LT5jaGlsZCwgUlRBWF9IT1BMSU1JVCk7CisJdG9wX2lwaC0+aG9wX2xpbWl0ID0gaXA2X2RzdF9ob3BsaW1pdChkc3QtPmNoaWxkKTsKIAlpcHY2X2FkZHJfY29weSgmdG9wX2lwaC0+c2FkZHIsIChzdHJ1Y3QgaW42X2FkZHIgKikmeC0+cHJvcHMuc2FkZHIpOwogCWlwdjZfYWRkcl9jb3B5KCZ0b3BfaXBoLT5kYWRkciwgKHN0cnVjdCBpbjZfYWRkciAqKSZ4LT5pZC5kYWRkcik7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcmNvbW0vTWFrZWZpbGUgYi9uZXQvaXJkYS9pcmNvbW0vTWFrZWZpbGUKaW5kZXggNDg2ODk0NS4uYWIyM2I1YiAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJjb21tL01ha2VmaWxlCisrKyBiL25ldC9pcmRhL2lyY29tbS9NYWtlZmlsZQpAQCAtNCw1ICs0LDUgQEAKIAogb2JqLSQoQ09ORklHX0lSQ09NTSkgKz0gaXJjb21tLm8gaXJjb21tLXR0eS5vCiAKLWlyY29tbS1vYmpzIDo9IGlyY29tbV9jb3JlLm8gaXJjb21tX2V2ZW50Lm8gaXJjb21tX2xtcC5vIGlyY29tbV90dHAubwotaXJjb21tLXR0eS1vYmpzIDo9IGlyY29tbV90dHkubyBpcmNvbW1fdHR5X2F0dGFjaC5vIGlyY29tbV90dHlfaW9jdGwubyBpcmNvbW1fcGFyYW0ubworaXJjb21tLXkgOj0gaXJjb21tX2NvcmUubyBpcmNvbW1fZXZlbnQubyBpcmNvbW1fbG1wLm8gaXJjb21tX3R0cC5vCitpcmNvbW0tdHR5LXkgOj0gaXJjb21tX3R0eS5vIGlyY29tbV90dHlfYXR0YWNoLm8gaXJjb21tX3R0eV9pb2N0bC5vIGlyY29tbV9wYXJhbS5vCmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcmxhbi9NYWtlZmlsZSBiL25ldC9pcmRhL2lybGFuL01ha2VmaWxlCmluZGV4IDc3NTQ5YmMuLjk0ZWVmYmMgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lybGFuL01ha2VmaWxlCisrKyBiL25ldC9pcmRhL2lybGFuL01ha2VmaWxlCkBAIC00LDQgKzQsNCBAQAogCiBvYmotJChDT05GSUdfSVJMQU4pICs9IGlybGFuLm8KIAotaXJsYW4tb2JqcyA6PSBpcmxhbl9jb21tb24ubyBpcmxhbl9ldGgubyBpcmxhbl9ldmVudC5vIGlybGFuX2NsaWVudC5vIGlybGFuX3Byb3ZpZGVyLm8gaXJsYW5fZmlsdGVyLm8gaXJsYW5fcHJvdmlkZXJfZXZlbnQubyBpcmxhbl9jbGllbnRfZXZlbnQubworaXJsYW4teSA6PSBpcmxhbl9jb21tb24ubyBpcmxhbl9ldGgubyBpcmxhbl9ldmVudC5vIGlybGFuX2NsaWVudC5vIGlybGFuX3Byb3ZpZGVyLm8gaXJsYW5fZmlsdGVyLm8gaXJsYW5fcHJvdmlkZXJfZXZlbnQubyBpcmxhbl9jbGllbnRfZXZlbnQubwpkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJuZXQvTWFrZWZpbGUgYi9uZXQvaXJkYS9pcm5ldC9NYWtlZmlsZQppbmRleCBiM2VlMDFlLi42MWMzNjVjIDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcm5ldC9NYWtlZmlsZQorKysgYi9uZXQvaXJkYS9pcm5ldC9NYWtlZmlsZQpAQCAtNCw0ICs0LDQgQEAKIAogb2JqLSQoQ09ORklHX0lSTkVUKSArPSBpcm5ldC5vCiAKLWlybmV0LW9ianMgOj0gaXJuZXRfcHBwLm8gaXJuZXRfaXJkYS5vCitpcm5ldC15IDo9IGlybmV0X3BwcC5vIGlybmV0X2lyZGEubwpkaWZmIC0tZ2l0IGEvbmV0L2l1Y3YvaXVjdi5jIGIvbmV0L2l1Y3YvaXVjdi5jCmluZGV4IGY3ZGI2NzYuLjFlZTVkYWIgMTAwNjQ0Ci0tLSBhL25ldC9pdWN2L2l1Y3YuYworKysgYi9uZXQvaXVjdi9pdWN2LmMKQEAgLTM2LDYgKzM2LDcgQEAKICNkZWZpbmUgS01TR19DT01QT05FTlQgIml1Y3YiCiAjZGVmaW5lIHByX2ZtdChmbXQpIEtNU0dfQ09NUE9ORU5UICI6ICIgZm10CiAKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KQEAgLTE4MDQsNiArMTgwNSw3IEBACiAJc3RydWN0IGl1Y3ZfaXJxX2RhdGEgKnA7CiAJc3RydWN0IGl1Y3ZfaXJxX2xpc3QgKndvcms7CiAKKwlrc3RhdF9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpKS5pcnFzW0VYVElOVF9JVUNdKys7CiAJcCA9IGl1Y3ZfaXJxX2RhdGFbc21wX3Byb2Nlc3Nvcl9pZCgpXTsKIAlpZiAocC0+aXBwYXRoaWQgPj0gaXVjdl9tYXhfcGF0aGlkKSB7CiAJCVdBUk5fT04ocC0+aXBwYXRoaWQgPj0gaXVjdl9tYXhfcGF0aGlkKTsKZGlmZiAtLWdpdCBhL25ldC9sMnRwL2wydHBfaXAuYyBiL25ldC9sMnRwL2wydHBfaXAuYwppbmRleCA1MjJlMjE5Li4xMTBlZmI3IDEwMDY0NAotLS0gYS9uZXQvbDJ0cC9sMnRwX2lwLmMKKysrIGIvbmV0L2wydHAvbDJ0cF9pcC5jCkBAIC00NzYsMTUgKzQ3NiwxMyBAQAogCiAJCXsKIAkJCXN0cnVjdCBmbG93aSBmbCA9IHsgLm9pZiA9IHNrLT5za19ib3VuZF9kZXZfaWYsCi0JCQkJCSAgICAubmxfdSA9IHsgLmlwNF91ID0gewotCQkJCQkJCS5kYWRkciA9IGRhZGRyLAotCQkJCQkJCS5zYWRkciA9IGluZXQtPmluZXRfc2FkZHIsCi0JCQkJCQkJLnRvcyA9IFJUX0NPTk5fRkxBR1Moc2spIH0gfSwKKwkJCQkJICAgIC5mbDRfZHN0ID0gZGFkZHIsCisJCQkJCSAgICAuZmw0X3NyYyA9IGluZXQtPmluZXRfc2FkZHIsCisJCQkJCSAgICAuZmw0X3RvcyA9IFJUX0NPTk5fRkxBR1Moc2spLAogCQkJCQkgICAgLnByb3RvID0gc2stPnNrX3Byb3RvY29sLAogCQkJCQkgICAgLmZsYWdzID0gaW5ldF9za19mbG93aV9mbGFncyhzayksCi0JCQkJCSAgICAudWxpX3UgPSB7IC5wb3J0cyA9IHsKLQkJCQkJCQkgLnNwb3J0ID0gaW5ldC0+aW5ldF9zcG9ydCwKLQkJCQkJCQkgLmRwb3J0ID0gaW5ldC0+aW5ldF9kcG9ydCB9IH0gfTsKKwkJCQkJICAgIC5mbF9pcF9zcG9ydCA9IGluZXQtPmluZXRfc3BvcnQsCisJCQkJCSAgICAuZmxfaXBfZHBvcnQgPSBpbmV0LT5pbmV0X2Rwb3J0IH07CiAKIAkJCS8qIElmIHRoaXMgZmFpbHMsIHJldHJhbnNtaXQgbWVjaGFuaXNtIG9mIHRyYW5zcG9ydCBsYXllciB3aWxsCiAJCQkgKiBrZWVwIHRyeWluZyB1bnRpbCByb3V0ZSBhcHBlYXJzIG9yIHRoZSBjb25uZWN0aW9uIHRpbWVzCmRpZmYgLS1naXQgYS9uZXQvbGFwYi9NYWtlZmlsZSBiL25ldC9sYXBiL01ha2VmaWxlCmluZGV4IDUzZjdjOTAuLmZmZjc5N2QgMTAwNjQ0Ci0tLSBhL25ldC9sYXBiL01ha2VmaWxlCisrKyBiL25ldC9sYXBiL01ha2VmaWxlCkBAIC00LDQgKzQsNCBAQAogCiBvYmotJChDT05GSUdfTEFQQikgKz0gbGFwYi5vCiAKLWxhcGItb2JqcyA6PSBsYXBiX2luLm8gbGFwYl9vdXQubyBsYXBiX3N1YnIubyBsYXBiX3RpbWVyLm8gbGFwYl9pZmFjZS5vCitsYXBiLXkgOj0gbGFwYl9pbi5vIGxhcGJfb3V0Lm8gbGFwYl9zdWJyLm8gbGFwYl90aW1lci5vIGxhcGJfaWZhY2UubwpkaWZmIC0tZ2l0IGEvbmV0L2xsYy9hZl9sbGMuYyBiL25ldC9sbGMvYWZfbGxjLmMKaW5kZXggZTM1ZGJlNS4uZGZkM2E2NCAxMDA2NDQKLS0tIGEvbmV0L2xsYy9hZl9sbGMuYworKysgYi9uZXQvbGxjL2FmX2xsYy5jCkBAIC0zMTYsNyArMzE2LDYgQEAKIAlpZiAodW5saWtlbHkoYWRkci0+c2xsY19mYW1pbHkgIT0gQUZfTExDKSkKIAkJZ290byBvdXQ7CiAJcmMgPSAtRU5PREVWOwotCXJ0bmxfbG9jaygpOwogCXJjdV9yZWFkX2xvY2soKTsKIAlpZiAoc2stPnNrX2JvdW5kX2Rldl9pZikgewogCQlsbGMtPmRldiA9IGRldl9nZXRfYnlfaW5kZXhfcmN1KCZpbml0X25ldCwgc2stPnNrX2JvdW5kX2Rldl9pZik7CkBAIC0zMzQsMTAgKzMzMywxMSBAQAogCQkJfQogCQl9CiAJfSBlbHNlCi0JCWxsYy0+ZGV2ID0gZGV2X2dldGJ5aHdhZGRyKCZpbml0X25ldCwgYWRkci0+c2xsY19hcnBocmQsCisJCWxsYy0+ZGV2ID0gZGV2X2dldGJ5aHdhZGRyX3JjdSgmaW5pdF9uZXQsIGFkZHItPnNsbGNfYXJwaHJkLAogCQkJCQkgICBhZGRyLT5zbGxjX21hYyk7CisJaWYgKGxsYy0+ZGV2KQorCQlkZXZfaG9sZChsbGMtPmRldik7CiAJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JcnRubF91bmxvY2soKTsKIAlpZiAoIWxsYy0+ZGV2KQogCQlnb3RvIG91dDsKIAlpZiAoIWFkZHItPnNsbGNfc2FwKSB7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvS2NvbmZpZyBiL25ldC9tYWM4MDIxMS9LY29uZmlnCmluZGV4IDhlOGVhOWMuLjkxMDkyNjIgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9LY29uZmlnCisrKyBiL25ldC9tYWM4MDIxMS9LY29uZmlnCkBAIC02LDYgKzYsNyBAQAogCXNlbGVjdCBDUllQVE9fQVJDNAogCXNlbGVjdCBDUllQVE9fQUVTCiAJc2VsZWN0IENSQzMyCisJc2VsZWN0IEFWRVJBR0UKIAktLS1oZWxwLS0tCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBoYXJkd2FyZSBpbmRlcGVuZGVudCBJRUVFIDgwMi4xMQogCSAgbmV0d29ya2luZyBzdGFjay4KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9hZXNfY2NtLmMgYi9uZXQvbWFjODAyMTEvYWVzX2NjbS5jCmluZGV4IGQyYjAzZTAuLjRiZDZlZjAgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9hZXNfY2NtLmMKKysrIGIvbmV0L21hYzgwMjExL2Flc19jY20uYwpAQCAtMTQ3LDYgKzE0Nyw1IEBACiAKIHZvaWQgaWVlZTgwMjExX2Flc19rZXlfZnJlZShzdHJ1Y3QgY3J5cHRvX2NpcGhlciAqdGZtKQogewotCWlmICh0Zm0pCi0JCWNyeXB0b19mcmVlX2NpcGhlcih0Zm0pOworCWNyeXB0b19mcmVlX2NpcGhlcih0Zm0pOwogfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2Flc19jbWFjLmMgYi9uZXQvbWFjODAyMTEvYWVzX2NtYWMuYwppbmRleCBiNGQ2NmNjLi5kNTAyYjI2IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvYWVzX2NtYWMuYworKysgYi9uZXQvbWFjODAyMTEvYWVzX2NtYWMuYwpAQCAtMTI4LDYgKzEyOCw1IEBACiAKIHZvaWQgaWVlZTgwMjExX2Flc19jbWFjX2tleV9mcmVlKHN0cnVjdCBjcnlwdG9fY2lwaGVyICp0Zm0pCiB7Ci0JaWYgKHRmbSkKLQkJY3J5cHRvX2ZyZWVfY2lwaGVyKHRmbSk7CisJY3J5cHRvX2ZyZWVfY2lwaGVyKHRmbSk7CiB9CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvYWdnLXJ4LmMgYi9uZXQvbWFjODAyMTEvYWdnLXJ4LmMKaW5kZXggNzIwYjdhOC4uZjEzOGIxOSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2FnZy1yeC5jCisrKyBiL25ldC9tYWM4MDIxMS9hZ2ctcnguYwpAQCAtMTI5LDkgKzEyOSw3IEBACiAJCQl0aW1lcl90b190aWRbMF0pOwogCiAJcmN1X3JlYWRfbG9jaygpOwotCXNwaW5fbG9jaygmc3RhLT5sb2NrKTsKIAlpZWVlODAyMTFfcmVsZWFzZV9yZW9yZGVyX3RpbWVvdXQoc3RhLCAqcHRpZCk7Ci0Jc3Bpbl91bmxvY2soJnN0YS0+bG9jayk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKQEAgLTI1Niw3ICsyNTQsNyBAQAogCX0KIAogCS8qIHByZXBhcmUgQS1NUERVIE1MTUUgZm9yIFJ4IGFnZ3JlZ2F0aW9uICovCi0JdGlkX2FnZ19yeCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB0aWRfYW1wZHVfcngpLCBHRlBfQVRPTUlDKTsKKwl0aWRfYWdnX3J4ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHRpZF9hbXBkdV9yeCksIEdGUF9LRVJORUwpOwogCWlmICghdGlkX2FnZ19yeCkgewogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwogCQlpZiAobmV0X3JhdGVsaW1pdCgpKQpAQCAtMjgwLDkgKzI3OCw5IEBACiAKIAkvKiBwcmVwYXJlIHJlb3JkZXJpbmcgYnVmZmVyICovCiAJdGlkX2FnZ19yeC0+cmVvcmRlcl9idWYgPQotCQlrY2FsbG9jKGJ1Zl9zaXplLCBzaXplb2Yoc3RydWN0IHNrX2J1ZmYgKiksIEdGUF9BVE9NSUMpOworCQlrY2FsbG9jKGJ1Zl9zaXplLCBzaXplb2Yoc3RydWN0IHNrX2J1ZmYgKiksIEdGUF9LRVJORUwpOwogCXRpZF9hZ2dfcngtPnJlb3JkZXJfdGltZSA9Ci0JCWtjYWxsb2MoYnVmX3NpemUsIHNpemVvZih1bnNpZ25lZCBsb25nKSwgR0ZQX0FUT01JQyk7CisJCWtjYWxsb2MoYnVmX3NpemUsIHNpemVvZih1bnNpZ25lZCBsb25nKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF0aWRfYWdnX3J4LT5yZW9yZGVyX2J1ZiB8fCAhdGlkX2FnZ19yeC0+cmVvcmRlcl90aW1lKSB7CiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvYWdnLXR4LmMgYi9uZXQvbWFjODAyMTEvYWdnLXR4LmMKaW5kZXggZDQ2NzliMi4uOWNjNDcyYyAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2FnZy10eC5jCisrKyBiL25ldC9tYWM4MDIxMS9hZ2ctdHguYwpAQCAtMzQyLDEwICszNDIsMTEgQEAKIAkvKiBzZW5kIEFkZEJBIHJlcXVlc3QgKi8KIAlpZWVlODAyMTFfc2VuZF9hZGRiYV9yZXF1ZXN0KHNkYXRhLCBzdGEtPnN0YS5hZGRyLCB0aWQsCiAJCQkJICAgICB0aWRfdHgtPmRpYWxvZ190b2tlbiwgc3RhcnRfc2VxX251bSwKLQkJCQkgICAgIDB4NDAsIDUwMDApOworCQkJCSAgICAgMHg0MCwgdGlkX3R4LT50aW1lb3V0KTsKIH0KIAotaW50IGllZWU4MDIxMV9zdGFydF90eF9iYV9zZXNzaW9uKHN0cnVjdCBpZWVlODAyMTFfc3RhICpwdWJzdGEsIHUxNiB0aWQpCitpbnQgaWVlZTgwMjExX3N0YXJ0X3R4X2JhX3Nlc3Npb24oc3RydWN0IGllZWU4MDIxMV9zdGEgKnB1YnN0YSwgdTE2IHRpZCwKKwkJCQkgIHUxNiB0aW1lb3V0KQogewogCXN0cnVjdCBzdGFfaW5mbyAqc3RhID0gY29udGFpbmVyX29mKHB1YnN0YSwgc3RydWN0IHN0YV9pbmZvLCBzdGEpOwogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gc3RhLT5zZGF0YTsKQEAgLTQyMCw2ICs0MjEsOCBAQAogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnRpZF90eC0+cGVuZGluZyk7CiAJX19zZXRfYml0KEhUX0FHR19TVEFURV9XQU5UX1NUQVJULCAmdGlkX3R4LT5zdGF0ZSk7CiAKKwl0aWRfdHgtPnRpbWVvdXQgPSB0aW1lb3V0OworCiAJLyogVHggdGltZXIgKi8KIAl0aWRfdHgtPmFkZGJhX3Jlc3BfdGltZXIuZnVuY3Rpb24gPSBzdGFfYWRkYmFfcmVzcF90aW1lcl9leHBpcmVkOwogCXRpZF90eC0+YWRkYmFfcmVzcF90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpJnN0YS0+dGltZXJfdG9fdGlkW3RpZF07CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvY2ZnLmMgYi9uZXQvbWFjODAyMTEvY2ZnLmMKaW5kZXggMThiZDBlNS4uNGJjOGE5MiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2NmZy5jCisrKyBiL25ldC9tYWM4MDIxMS9jZmcuYwpAQCAtMTksOSArMTksMTAgQEAKICNpbmNsdWRlICJyYXRlLmgiCiAjaW5jbHVkZSAibWVzaC5oIgogCi1zdGF0aWMgaW50IGllZWU4MDIxMV9hZGRfaWZhY2Uoc3RydWN0IHdpcGh5ICp3aXBoeSwgY2hhciAqbmFtZSwKLQkJCSAgICAgICBlbnVtIG5sODAyMTFfaWZ0eXBlIHR5cGUsIHUzMiAqZmxhZ3MsCi0JCQkgICAgICAgc3RydWN0IHZpZl9wYXJhbXMgKnBhcmFtcykKK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqaWVlZTgwMjExX2FkZF9pZmFjZShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBjaGFyICpuYW1lLAorCQkJCQkgICAgICBlbnVtIG5sODAyMTFfaWZ0eXBlIHR5cGUsCisJCQkJCSAgICAgIHUzMiAqZmxhZ3MsCisJCQkJCSAgICAgIHN0cnVjdCB2aWZfcGFyYW1zICpwYXJhbXMpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3aXBoeV9wcml2KHdpcGh5KTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwpAQCAtMjksMTIgKzMwLDE1IEBACiAJaW50IGVycjsKIAogCWVyciA9IGllZWU4MDIxMV9pZl9hZGQobG9jYWwsIG5hbWUsICZkZXYsIHR5cGUsIHBhcmFtcyk7Ci0JaWYgKGVyciB8fCB0eXBlICE9IE5MODAyMTFfSUZUWVBFX01PTklUT1IgfHwgIWZsYWdzKQotCQlyZXR1cm4gZXJyOworCWlmIChlcnIpCisJCXJldHVybiBFUlJfUFRSKGVycik7CiAKLQlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7Ci0Jc2RhdGEtPnUubW50cl9mbGFncyA9ICpmbGFnczsKLQlyZXR1cm4gMDsKKwlpZiAodHlwZSA9PSBOTDgwMjExX0lGVFlQRV9NT05JVE9SICYmIGZsYWdzKSB7CisJCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKKwkJc2RhdGEtPnUubW50cl9mbGFncyA9ICpmbGFnczsKKwl9CisKKwlyZXR1cm4gZGV2OwogfQogCiBzdGF0aWMgaW50IGllZWU4MDIxMV9kZWxfaWZhY2Uoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTU2LDExICs2MCw2IEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCWlmIChpZWVlODAyMTFfdmlmX2lzX21lc2goJnNkYXRhLT52aWYpICYmIHBhcmFtcy0+bWVzaF9pZF9sZW4pCi0JCWllZWU4MDIxMV9zZGF0YV9zZXRfbWVzaF9pZChzZGF0YSwKLQkJCQkJICAgIHBhcmFtcy0+bWVzaF9pZF9sZW4sCi0JCQkJCSAgICBwYXJhbXMtPm1lc2hfaWQpOwotCiAJaWYgKHR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTiAmJgogCSAgICBwYXJhbXMgJiYgcGFyYW1zLT51c2VfNGFkZHIgPT0gMCkKIAkJcmN1X2Fzc2lnbl9wb2ludGVyKHNkYXRhLT51LnZsYW4uc3RhLCBOVUxMKTsKQEAgLTI5NiwxMSArMjk1LDEyIEBACiAKIHN0YXRpYyBpbnQgaWVlZTgwMjExX2NvbmZpZ19kZWZhdWx0X2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LAogCQkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCQl1OCBrZXlfaWR4KQorCQkJCQl1OCBrZXlfaWR4LCBib29sIHVuaSwKKwkJCQkJYm9vbCBtdWx0aSkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CiAKLQlpZWVlODAyMTFfc2V0X2RlZmF1bHRfa2V5KHNkYXRhLCBrZXlfaWR4KTsKKwlpZWVlODAyMTFfc2V0X2RlZmF1bHRfa2V5KHNkYXRhLCBrZXlfaWR4LCB1bmksIG11bHRpKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzQzLDggKzM0Myw5IEBACiAKIAlpZiAoKHN0YS0+bG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NJR05BTF9EQk0pIHx8CiAJICAgIChzdGEtPmxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TSUdOQUxfVU5TUEVDKSkgewotCQlzaW5mby0+ZmlsbGVkIHw9IFNUQVRJT05fSU5GT19TSUdOQUw7CisJCXNpbmZvLT5maWxsZWQgfD0gU1RBVElPTl9JTkZPX1NJR05BTCB8IFNUQVRJT05fSU5GT19TSUdOQUxfQVZHOwogCQlzaW5mby0+c2lnbmFsID0gKHM4KXN0YS0+bGFzdF9zaWduYWw7CisJCXNpbmZvLT5zaWduYWxfYXZnID0gKHM4KSAtZXdtYV9yZWFkKCZzdGEtPmF2Z19zaWduYWwpOwogCX0KIAogCXNpbmZvLT50eHJhdGUuZmxhZ3MgPSAwOwpAQCAtOTgzLDcgKzk4NCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaWVlZTgwMjExX2dldF9tZXNoX3BhcmFtcyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorc3RhdGljIGludCBpZWVlODAyMTFfZ2V0X21lc2hfY29uZmlnKHN0cnVjdCB3aXBoeSAqd2lwaHksCiAJCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQlzdHJ1Y3QgbWVzaF9jb25maWcgKmNvbmYpCiB7CkBAIC05OTksOSArMTAwMCwzOSBAQAogCXJldHVybiAobWFzayA+PiAocGFybS0xKSkgJiAweDE7CiB9CiAKLXN0YXRpYyBpbnQgaWVlZTgwMjExX3NldF9tZXNoX3BhcmFtcyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LAotCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJY29uc3Qgc3RydWN0IG1lc2hfY29uZmlnICpuY29uZiwgdTMyIG1hc2spCitzdGF0aWMgaW50IGNvcHlfbWVzaF9zZXR1cChzdHJ1Y3QgaWVlZTgwMjExX2lmX21lc2ggKmlmbXNoLAorCQljb25zdCBzdHJ1Y3QgbWVzaF9zZXR1cCAqc2V0dXApCit7CisJdTggKm5ld19pZTsKKwljb25zdCB1OCAqb2xkX2llOworCisJLyogZmlyc3QgYWxsb2NhdGUgdGhlIG5ldyB2ZW5kb3IgaW5mb3JtYXRpb24gZWxlbWVudCAqLworCW5ld19pZSA9IE5VTEw7CisJb2xkX2llID0gaWZtc2gtPnZlbmRvcl9pZTsKKworCWlmbXNoLT52ZW5kb3JfaWVfbGVuID0gc2V0dXAtPnZlbmRvcl9pZV9sZW47CisJaWYgKHNldHVwLT52ZW5kb3JfaWVfbGVuKSB7CisJCW5ld19pZSA9IGttZW1kdXAoc2V0dXAtPnZlbmRvcl9pZSwgc2V0dXAtPnZlbmRvcl9pZV9sZW4sCisJCQkJR0ZQX0tFUk5FTCk7CisJCWlmICghbmV3X2llKQorCQkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogbm93IGNvcHkgdGhlIHJlc3Qgb2YgdGhlIHNldHVwIHBhcmFtZXRlcnMgKi8KKwlpZm1zaC0+bWVzaF9pZF9sZW4gPSBzZXR1cC0+bWVzaF9pZF9sZW47CisJbWVtY3B5KGlmbXNoLT5tZXNoX2lkLCBzZXR1cC0+bWVzaF9pZCwgaWZtc2gtPm1lc2hfaWRfbGVuKTsKKwlpZm1zaC0+bWVzaF9wcF9pZCA9IHNldHVwLT5wYXRoX3NlbF9wcm90bzsKKwlpZm1zaC0+bWVzaF9wbV9pZCA9IHNldHVwLT5wYXRoX21ldHJpYzsKKwlpZm1zaC0+dmVuZG9yX2llID0gbmV3X2llOworCisJa2ZyZWUob2xkX2llKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGllZWU4MDIxMV91cGRhdGVfbWVzaF9jb25maWcoc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIG1hc2ssCisJCQkJCWNvbnN0IHN0cnVjdCBtZXNoX2NvbmZpZyAqbmNvbmYpCiB7CiAJc3RydWN0IG1lc2hfY29uZmlnICpjb25mOwogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwpAQCAtMTAyNCw2ICsxMDU1LDggQEAKIAkJY29uZi0+ZG90MTFNZXNoTWF4UmV0cmllcyA9IG5jb25mLT5kb3QxMU1lc2hNYXhSZXRyaWVzOwogCWlmIChfY2hnX21lc2hfYXR0cihOTDgwMjExX01FU0hDT05GX1RUTCwgbWFzaykpCiAJCWNvbmYtPmRvdDExTWVzaFRUTCA9IG5jb25mLT5kb3QxMU1lc2hUVEw7CisJaWYgKF9jaGdfbWVzaF9hdHRyKE5MODAyMTFfTUVTSENPTkZfRUxFTUVOVF9UVEwsIG1hc2spKQorCQljb25mLT5kb3QxMU1lc2hUVEwgPSBuY29uZi0+ZWxlbWVudF90dGw7CiAJaWYgKF9jaGdfbWVzaF9hdHRyKE5MODAyMTFfTUVTSENPTkZfQVVUT19PUEVOX1BMSU5LUywgbWFzaykpCiAJCWNvbmYtPmF1dG9fb3Blbl9wbGlua3MgPSBuY29uZi0+YXV0b19vcGVuX3BsaW5rczsKIAlpZiAoX2NoZ19tZXNoX2F0dHIoTkw4MDIxMV9NRVNIQ09ORl9IV01QX01BWF9QUkVRX1JFVFJJRVMsIG1hc2spKQpAQCAtMTA1MCw2ICsxMDgzLDMxIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgaWVlZTgwMjExX2pvaW5fbWVzaChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBtZXNoX2NvbmZpZyAqY29uZiwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgbWVzaF9zZXR1cCAqc2V0dXApCit7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWVzaCAqaWZtc2ggPSAmc2RhdGEtPnUubWVzaDsKKwlpbnQgZXJyOworCisJbWVtY3B5KCZpZm1zaC0+bXNoY2ZnLCBjb25mLCBzaXplb2Yoc3RydWN0IG1lc2hfY29uZmlnKSk7CisJZXJyID0gY29weV9tZXNoX3NldHVwKGlmbXNoLCBzZXR1cCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwlpZWVlODAyMTFfc3RhcnRfbWVzaChzZGF0YSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpZWVlODAyMTFfbGVhdmVfbWVzaChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKKworCWllZWU4MDIxMV9zdG9wX21lc2goc2RhdGEpOworCisJcmV0dXJuIDA7Cit9CiAjZW5kaWYKIAogc3RhdGljIGludCBpZWVlODAyMTFfY2hhbmdlX2JzcyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LApAQCAtMTEwOCw2ICsxMTY2LDEyIEBACiAJCQlzZGF0YS0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TREFUQV9ET05UX0JSSURHRV9QQUNLRVRTOwogCX0KIAorCWlmIChwYXJhbXMtPmh0X29wbW9kZSA+PSAwKSB7CisJCXNkYXRhLT52aWYuYnNzX2NvbmYuaHRfb3BlcmF0aW9uX21vZGUgPQorCQkJKHUxNikgcGFyYW1zLT5odF9vcG1vZGU7CisJCWNoYW5nZWQgfD0gQlNTX0NIQU5HRURfSFQ7CisJfQorCiAJaWVlZTgwMjExX2Jzc19pbmZvX2NoYW5nZV9ub3RpZnkoc2RhdGEsIGNoYW5nZWQpOwogCiAJcmV0dXJuIDA7CkBAIC0xMjk5LDYgKzEzNjMsMTMgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdpcGh5X3ByaXYod2lwaHkpOwogCWludCBlcnI7CiAKKwlpZiAoY2hhbmdlZCAmIFdJUEhZX1BBUkFNX0ZSQUdfVEhSRVNIT0xEKSB7CisJCWVyciA9IGRydl9zZXRfZnJhZ190aHJlc2hvbGQobG9jYWwsIHdpcGh5LT5mcmFnX3RocmVzaG9sZCk7CisKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCiAJaWYgKGNoYW5nZWQgJiBXSVBIWV9QQVJBTV9DT1ZFUkFHRV9DTEFTUykgewogCQllcnIgPSBkcnZfc2V0X2NvdmVyYWdlX2NsYXNzKGxvY2FsLCB3aXBoeS0+Y292ZXJhZ2VfY2xhc3MpOwogCkBAIC0xNTIyLDYgKzE1OTMsMzcgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBpZWVlODAyMTFfcmVtYWluX29uX2NoYW5uZWxfaHcoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCQkJCSAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4sCisJCQkJCSAgZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaGFudHlwZSwKKwkJCQkJICB1bnNpZ25lZCBpbnQgZHVyYXRpb24sIHU2NCAqY29va2llKQoreworCWludCByZXQ7CisJdTMyIHJhbmRvbV9jb29raWU7CisKKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZsb2NhbC0+bXR4KTsKKworCWlmIChsb2NhbC0+aHdfcm9jX2Nvb2tpZSkKKwkJcmV0dXJuIC1FQlVTWTsKKwkvKiBtdXN0IGJlIG5vbnplcm8gKi8KKwlyYW5kb21fY29va2llID0gcmFuZG9tMzIoKSB8IDE7CisKKwkqY29va2llID0gcmFuZG9tX2Nvb2tpZTsKKwlsb2NhbC0+aHdfcm9jX2RldiA9IGRldjsKKwlsb2NhbC0+aHdfcm9jX2Nvb2tpZSA9IHJhbmRvbV9jb29raWU7CisJbG9jYWwtPmh3X3JvY19jaGFubmVsID0gY2hhbjsKKwlsb2NhbC0+aHdfcm9jX2NoYW5uZWxfdHlwZSA9IGNoYW50eXBlOworCWxvY2FsLT5od19yb2NfZHVyYXRpb24gPSBkdXJhdGlvbjsKKwlyZXQgPSBkcnZfcmVtYWluX29uX2NoYW5uZWwobG9jYWwsIGNoYW4sIGNoYW50eXBlLCBkdXJhdGlvbik7CisJaWYgKHJldCkgeworCQlsb2NhbC0+aHdfcm9jX2NoYW5uZWwgPSBOVUxMOworCQlsb2NhbC0+aHdfcm9jX2Nvb2tpZSA9IDA7CisJfQorCisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIGludCBpZWVlODAyMTFfcmVtYWluX29uX2NoYW5uZWwoc3RydWN0IHdpcGh5ICp3aXBoeSwKIAkJCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuLApAQCAtMTUzMCw0MSArMTYzMiwxMjEgQEAKIAkJCQkgICAgICAgdTY0ICpjb29raWUpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCisJaWYgKGxvY2FsLT5vcHMtPnJlbWFpbl9vbl9jaGFubmVsKSB7CisJCWludCByZXQ7CisKKwkJbXV0ZXhfbG9jaygmbG9jYWwtPm10eCk7CisJCXJldCA9IGllZWU4MDIxMV9yZW1haW5fb25fY2hhbm5lbF9odyhsb2NhbCwgZGV2LAorCQkJCQkJICAgICBjaGFuLCBjaGFubmVsX3R5cGUsCisJCQkJCQkgICAgIGR1cmF0aW9uLCBjb29raWUpOworCQlsb2NhbC0+aHdfcm9jX2Zvcl90eCA9IGZhbHNlOworCQltdXRleF91bmxvY2soJmxvY2FsLT5tdHgpOworCisJCXJldHVybiByZXQ7CisJfQogCiAJcmV0dXJuIGllZWU4MDIxMV93a19yZW1haW5fb25fY2hhbm5lbChzZGF0YSwgY2hhbiwgY2hhbm5lbF90eXBlLAogCQkJCQkgICAgICBkdXJhdGlvbiwgY29va2llKTsKIH0KIAorc3RhdGljIGludCBpZWVlODAyMTFfY2FuY2VsX3JlbWFpbl9vbl9jaGFubmVsX2h3KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkJCQkJIHU2NCBjb29raWUpCit7CisJaW50IHJldDsKKworCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmxvY2FsLT5tdHgpOworCisJaWYgKGxvY2FsLT5od19yb2NfY29va2llICE9IGNvb2tpZSkKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwlyZXQgPSBkcnZfY2FuY2VsX3JlbWFpbl9vbl9jaGFubmVsKGxvY2FsKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJbG9jYWwtPmh3X3JvY19jb29raWUgPSAwOworCWxvY2FsLT5od19yb2NfY2hhbm5lbCA9IE5VTEw7CisKKwlpZWVlODAyMTFfcmVjYWxjX2lkbGUobG9jYWwpOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgaWVlZTgwMjExX2NhbmNlbF9yZW1haW5fb25fY2hhbm5lbChzdHJ1Y3Qgd2lwaHkgKndpcGh5LAogCQkJCQkgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCQkgICAgICB1NjQgY29va2llKQogewogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKKworCWlmIChsb2NhbC0+b3BzLT5jYW5jZWxfcmVtYWluX29uX2NoYW5uZWwpIHsKKwkJaW50IHJldDsKKworCQltdXRleF9sb2NrKCZsb2NhbC0+bXR4KTsKKwkJcmV0ID0gaWVlZTgwMjExX2NhbmNlbF9yZW1haW5fb25fY2hhbm5lbF9odyhsb2NhbCwgY29va2llKTsKKwkJbXV0ZXhfdW5sb2NrKCZsb2NhbC0+bXR4KTsKKworCQlyZXR1cm4gcmV0OworCX0KIAogCXJldHVybiBpZWVlODAyMTFfd2tfY2FuY2VsX3JlbWFpbl9vbl9jaGFubmVsKHNkYXRhLCBjb29raWUpOwogfQogCitzdGF0aWMgZW51bSB3b3JrX2RvbmVfcmVzdWx0CitpZWVlODAyMTFfb2ZmY2hhbl90eF9kb25lKHN0cnVjdCBpZWVlODAyMTFfd29yayAqd2ssIHN0cnVjdCBza19idWZmICpza2IpCit7CisJLyoKKwkgKiBVc2UgdGhlIGRhdGEgZW1iZWRkZWQgaW4gdGhlIHdvcmsgc3RydWN0IGZvciByZXBvcnRpbmcKKwkgKiBoZXJlIHNvIGlmIHRoZSBkcml2ZXIgbWFuZ2xlZCB0aGUgU0tCIGJlZm9yZSBkcm9wcGluZworCSAqIGl0ICh3aGljaCBpcyB0aGUgb25seSB3YXkgd2UgcmVhbGx5IHNob3VsZCBnZXQgaGVyZSkKKwkgKiB0aGVuIHdlIGRvbid0IHJlcG9ydCBtYW5nbGVkIGRhdGEuCisJICoKKwkgKiBJZiB0aGVyZSB3YXMgbm8gd2FpdCB0aW1lLCB0aGVuIGJ5IHRoZSB0aW1lIHdlIGdldCBoZXJlCisJICogdGhlIGRyaXZlciB3aWxsIGxpa2VseSBub3QgaGF2ZSByZXBvcnRlZCB0aGUgc3RhdHVzIHlldCwKKwkgKiBzbyBpbiB0aGF0IGNhc2UgdXNlcnNwYWNlIHdpbGwgaGF2ZSB0byBkZWFsIHdpdGggaXQuCisJICovCisKKwlpZiAod2stPm9mZmNoYW5fdHgud2FpdCAmJiB3ay0+b2ZmY2hhbl90eC5mcmFtZSkKKwkJY2ZnODAyMTFfbWdtdF90eF9zdGF0dXMod2stPnNkYXRhLT5kZXYsCisJCQkJCSh1bnNpZ25lZCBsb25nKSB3ay0+b2ZmY2hhbl90eC5mcmFtZSwKKwkJCQkJd2stPmllLCB3ay0+aWVfbGVuLCBmYWxzZSwgR0ZQX0tFUk5FTCk7CisKKwlyZXR1cm4gV09SS19ET05FX0RFU1RST1k7Cit9CisKIHN0YXRpYyBpbnQgaWVlZTgwMjExX21nbXRfdHgoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuLAorCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4sIGJvb2wgb2ZmY2hhbiwKIAkJCSAgICAgZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaGFubmVsX3R5cGUsCi0JCQkgICAgIGJvb2wgY2hhbm5lbF90eXBlX3ZhbGlkLAorCQkJICAgICBib29sIGNoYW5uZWxfdHlwZV92YWxpZCwgdW5zaWduZWQgaW50IHdhaXQsCiAJCQkgICAgIGNvbnN0IHU4ICpidWYsIHNpemVfdCBsZW4sIHU2NCAqY29va2llKQogewogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBzdGFfaW5mbyAqc3RhOworCXN0cnVjdCBpZWVlODAyMTFfd29yayAqd2s7CiAJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210ID0gKHZvaWQgKilidWY7CiAJdTMyIGZsYWdzID0gSUVFRTgwMjExX1RYX0lOVEZMX05MODAyMTFfRlJBTUVfVFggfAogCQkgICAgSUVFRTgwMjExX1RYX0NUTF9SRVFfVFhfU1RBVFVTOworCWJvb2wgaXNfb2ZmY2hhbiA9IGZhbHNlOwogCiAJLyogQ2hlY2sgdGhhdCB3ZSBhcmUgb24gdGhlIHJlcXVlc3RlZCBjaGFubmVsIGZvciB0cmFuc21pc3Npb24gKi8KIAlpZiAoY2hhbiAhPSBsb2NhbC0+dG1wX2NoYW5uZWwgJiYKIAkgICAgY2hhbiAhPSBsb2NhbC0+b3Blcl9jaGFubmVsKQotCQlyZXR1cm4gLUVCVVNZOworCQlpc19vZmZjaGFuID0gdHJ1ZTsKIAlpZiAoY2hhbm5lbF90eXBlX3ZhbGlkICYmCiAJICAgIChjaGFubmVsX3R5cGUgIT0gbG9jYWwtPnRtcF9jaGFubmVsX3R5cGUgJiYKIAkgICAgIGNoYW5uZWxfdHlwZSAhPSBsb2NhbC0+X29wZXJfY2hhbm5lbF90eXBlKSkKKwkJaXNfb2ZmY2hhbiA9IHRydWU7CisKKwlpZiAoY2hhbiA9PSBsb2NhbC0+aHdfcm9jX2NoYW5uZWwpIHsKKwkJLyogVE9ETzogY2hlY2sgY2hhbm5lbCB0eXBlPyAqLworCQlpc19vZmZjaGFuID0gZmFsc2U7CisJCWZsYWdzIHw9IElFRUU4MDIxMV9UWF9DVExfVFhfT0ZGQ0hBTjsKKwl9CisKKwlpZiAoaXNfb2ZmY2hhbiAmJiAhb2ZmY2hhbikKIAkJcmV0dXJuIC1FQlVTWTsKIAogCXN3aXRjaCAoc2RhdGEtPnZpZi50eXBlKSB7CkBAIC0xNTcyLDYgKzE3NTQsNyBAQAogCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOOgogCWNhc2UgTkw4MDIxMV9JRlRZUEVfUDJQX0dPOgorCWNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDoKIAkJaWYgKCFpZWVlODAyMTFfaXNfYWN0aW9uKG1nbXQtPmZyYW1lX2NvbnRyb2wpIHx8CiAJCSAgICBtZ210LT51LmFjdGlvbi5jYXRlZ29yeSA9PSBXTEFOX0NBVEVHT1JZX1BVQkxJQykKIAkJCWJyZWFrOwpAQCAtMTU5OCwxMiArMTc4MSwxMjggQEAKIAlJRUVFODAyMTFfU0tCX0NCKHNrYiktPmZsYWdzID0gZmxhZ3M7CiAKIAlza2ItPmRldiA9IHNkYXRhLT5kZXY7Ci0JaWVlZTgwMjExX3R4X3NrYihzZGF0YSwgc2tiKTsKIAogCSpjb29raWUgPSAodW5zaWduZWQgbG9uZykgc2tiOworCisJaWYgKGlzX29mZmNoYW4gJiYgbG9jYWwtPm9wcy0+cmVtYWluX29uX2NoYW5uZWwpIHsKKwkJdW5zaWduZWQgaW50IGR1cmF0aW9uOworCQlpbnQgcmV0OworCisJCW11dGV4X2xvY2soJmxvY2FsLT5tdHgpOworCQkvKgorCQkgKiBJZiB0aGUgZHVyYXRpb24gaXMgemVybywgdGhlbiB0aGUgZHJpdmVyCisJCSAqIHdvdWxkbid0IGFjdHVhbGx5IGRvIGFueXRoaW5nLiBTZXQgaXQgdG8KKwkJICogMTAwIGZvciBub3cuCisJCSAqCisJCSAqIFRPRE86IGNhbmNlbCB0aGUgb2ZmLWNoYW5uZWwgb3BlcmF0aW9uCisJCSAqICAgICAgIHdoZW4gd2UgZ2V0IHRoZSBTS0IncyBUWCBzdGF0dXMgYW5kCisJCSAqICAgICAgIHRoZSB3YWl0IHRpbWUgd2FzIHplcm8gYmVmb3JlLgorCQkgKi8KKwkJZHVyYXRpb24gPSAxMDA7CisJCWlmICh3YWl0KQorCQkJZHVyYXRpb24gPSB3YWl0OworCQlyZXQgPSBpZWVlODAyMTFfcmVtYWluX29uX2NoYW5uZWxfaHcobG9jYWwsIGRldiwgY2hhbiwKKwkJCQkJCSAgICAgY2hhbm5lbF90eXBlLAorCQkJCQkJICAgICBkdXJhdGlvbiwgY29va2llKTsKKwkJaWYgKHJldCkgeworCQkJa2ZyZWVfc2tiKHNrYik7CisJCQltdXRleF91bmxvY2soJmxvY2FsLT5tdHgpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCWxvY2FsLT5od19yb2NfZm9yX3R4ID0gdHJ1ZTsKKwkJbG9jYWwtPmh3X3JvY19kdXJhdGlvbiA9IHdhaXQ7CisKKwkJLyoKKwkJICogcXVldWUgdXAgZnJhbWUgZm9yIHRyYW5zbWlzc2lvbiBhZnRlcgorCQkgKiBpZWVlODAyMTFfcmVhZHlfb25fY2hhbm5lbCBjYWxsCisJCSAqLworCisJCS8qIG1vZGlmeSBjb29raWUgdG8gcHJldmVudCBBUEkgbWlzbWF0Y2hlcyAqLworCQkqY29va2llIF49IDI7CisJCUlFRUU4MDIxMV9TS0JfQ0Ioc2tiKS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0NUTF9UWF9PRkZDSEFOOworCQlsb2NhbC0+aHdfcm9jX3NrYiA9IHNrYjsKKwkJbXV0ZXhfdW5sb2NrKCZsb2NhbC0+bXR4KTsKKworCQlyZXR1cm4gMDsKKwl9CisKKwkvKgorCSAqIENhbiB0cmFuc21pdCByaWdodCBhd2F5IGlmIHRoZSBjaGFubmVsIHdhcyB0aGUKKwkgKiByaWdodCBvbmUgYW5kIHRoZXJlJ3Mgbm8gd2FpdCBpbnZvbHZlZC4uLiBJZiBhCisJICogd2FpdCBpcyBpbnZvbHZlZCwgd2UgbWlnaHQgb3RoZXJ3aXNlIG5vdCBiZSBvbgorCSAqIHRoZSByaWdodCBjaGFubmVsIGZvciBsb25nIGVub3VnaCEKKwkgKi8KKwlpZiAoIWlzX29mZmNoYW4gJiYgIXdhaXQgJiYgIXNkYXRhLT52aWYuYnNzX2NvbmYuaWRsZSkgeworCQlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IpOworCQlyZXR1cm4gMDsKKwl9CisKKwl3ayA9IGt6YWxsb2Moc2l6ZW9mKCp3aykgKyBsZW4sIEdGUF9LRVJORUwpOworCWlmICghd2spIHsKKwkJa2ZyZWVfc2tiKHNrYik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXdrLT50eXBlID0gSUVFRTgwMjExX1dPUktfT0ZGQ0hBTk5FTF9UWDsKKwl3ay0+Y2hhbiA9IGNoYW47CisJd2stPnNkYXRhID0gc2RhdGE7CisJd2stPmRvbmUgPSBpZWVlODAyMTFfb2ZmY2hhbl90eF9kb25lOworCXdrLT5vZmZjaGFuX3R4LmZyYW1lID0gc2tiOworCXdrLT5vZmZjaGFuX3R4LndhaXQgPSB3YWl0OworCXdrLT5pZV9sZW4gPSBsZW47CisJbWVtY3B5KHdrLT5pZSwgYnVmLCBsZW4pOworCisJaWVlZTgwMjExX2FkZF93b3JrKHdrKTsKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBpZWVlODAyMTFfbWdtdF90eF9jYW5jZWxfd2FpdChzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJCQkgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkJIHU2NCBjb29raWUpCit7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCXN0cnVjdCBpZWVlODAyMTFfd29yayAqd2s7CisJaW50IHJldCA9IC1FTk9FTlQ7CisKKwltdXRleF9sb2NrKCZsb2NhbC0+bXR4KTsKKworCWlmIChsb2NhbC0+b3BzLT5jYW5jZWxfcmVtYWluX29uX2NoYW5uZWwpIHsKKwkJY29va2llIF49IDI7CisJCXJldCA9IGllZWU4MDIxMV9jYW5jZWxfcmVtYWluX29uX2NoYW5uZWxfaHcobG9jYWwsIGNvb2tpZSk7CisKKwkJaWYgKHJldCA9PSAwKSB7CisJCQlrZnJlZV9za2IobG9jYWwtPmh3X3JvY19za2IpOworCQkJbG9jYWwtPmh3X3JvY19za2IgPSBOVUxMOworCQl9CisKKwkJbXV0ZXhfdW5sb2NrKCZsb2NhbC0+bXR4KTsKKworCQlyZXR1cm4gcmV0OworCX0KKworCWxpc3RfZm9yX2VhY2hfZW50cnkod2ssICZsb2NhbC0+d29ya19saXN0LCBsaXN0KSB7CisJCWlmICh3ay0+c2RhdGEgIT0gc2RhdGEpCisJCQljb250aW51ZTsKKworCQlpZiAod2stPnR5cGUgIT0gSUVFRTgwMjExX1dPUktfT0ZGQ0hBTk5FTF9UWCkKKwkJCWNvbnRpbnVlOworCisJCWlmIChjb29raWUgIT0gKHVuc2lnbmVkIGxvbmcpIHdrLT5vZmZjaGFuX3R4LmZyYW1lKQorCQkJY29udGludWU7CisKKwkJd2stPnRpbWVvdXQgPSBqaWZmaWVzOworCisJCWllZWU4MDIxMV9xdWV1ZV93b3JrKCZsb2NhbC0+aHcsICZsb2NhbC0+d29ya193b3JrKTsKKwkJcmV0ID0gMDsKKwkJYnJlYWs7CisJfQorCW11dGV4X3VubG9jaygmbG9jYWwtPm10eCk7CisKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfbWdtdF9mcmFtZV9yZWdpc3RlcihzdHJ1Y3Qgd2lwaHkgKndpcGh5LAogCQkJCQkgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJCSAgdTE2IGZyYW1lX3R5cGUsIGJvb2wgcmVnKQpAQCAtMTYyMSw2ICsxOTIwLDIzIEBACiAJaWVlZTgwMjExX3F1ZXVlX3dvcmsoJmxvY2FsLT5odywgJmxvY2FsLT5yZWNvbmZpZ19maWx0ZXIpOwogfQogCitzdGF0aWMgaW50IGllZWU4MDIxMV9zZXRfYW50ZW5uYShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCB1MzIgdHhfYW50LCB1MzIgcnhfYW50KQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2lwaHlfcHJpdih3aXBoeSk7CisKKwlpZiAobG9jYWwtPnN0YXJ0ZWQpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCXJldHVybiBkcnZfc2V0X2FudGVubmEobG9jYWwsIHR4X2FudCwgcnhfYW50KTsKK30KKworc3RhdGljIGludCBpZWVlODAyMTFfZ2V0X2FudGVubmEoc3RydWN0IHdpcGh5ICp3aXBoeSwgdTMyICp0eF9hbnQsIHUzMiAqcnhfYW50KQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2lwaHlfcHJpdih3aXBoeSk7CisKKwlyZXR1cm4gZHJ2X2dldF9hbnRlbm5hKGxvY2FsLCB0eF9hbnQsIHJ4X2FudCk7Cit9CisKIHN0cnVjdCBjZmc4MDIxMV9vcHMgbWFjODAyMTFfY29uZmlnX29wcyA9IHsKIAkuYWRkX3ZpcnR1YWxfaW50ZiA9IGllZWU4MDIxMV9hZGRfaWZhY2UsCiAJLmRlbF92aXJ0dWFsX2ludGYgPSBpZWVlODAyMTFfZGVsX2lmYWNlLApAQCAtMTY0NSw4ICsxOTYxLDEwIEBACiAJLmNoYW5nZV9tcGF0aCA9IGllZWU4MDIxMV9jaGFuZ2VfbXBhdGgsCiAJLmdldF9tcGF0aCA9IGllZWU4MDIxMV9nZXRfbXBhdGgsCiAJLmR1bXBfbXBhdGggPSBpZWVlODAyMTFfZHVtcF9tcGF0aCwKLQkuc2V0X21lc2hfcGFyYW1zID0gaWVlZTgwMjExX3NldF9tZXNoX3BhcmFtcywKLQkuZ2V0X21lc2hfcGFyYW1zID0gaWVlZTgwMjExX2dldF9tZXNoX3BhcmFtcywKKwkudXBkYXRlX21lc2hfY29uZmlnID0gaWVlZTgwMjExX3VwZGF0ZV9tZXNoX2NvbmZpZywKKwkuZ2V0X21lc2hfY29uZmlnID0gaWVlZTgwMjExX2dldF9tZXNoX2NvbmZpZywKKwkuam9pbl9tZXNoID0gaWVlZTgwMjExX2pvaW5fbWVzaCwKKwkubGVhdmVfbWVzaCA9IGllZWU4MDIxMV9sZWF2ZV9tZXNoLAogI2VuZGlmCiAJLmNoYW5nZV9ic3MgPSBpZWVlODAyMTFfY2hhbmdlX2JzcywKIAkuc2V0X3R4cV9wYXJhbXMgPSBpZWVlODAyMTFfc2V0X3R4cV9wYXJhbXMsCkBAIC0xNjcxLDYgKzE5ODksOSBAQAogCS5yZW1haW5fb25fY2hhbm5lbCA9IGllZWU4MDIxMV9yZW1haW5fb25fY2hhbm5lbCwKIAkuY2FuY2VsX3JlbWFpbl9vbl9jaGFubmVsID0gaWVlZTgwMjExX2NhbmNlbF9yZW1haW5fb25fY2hhbm5lbCwKIAkubWdtdF90eCA9IGllZWU4MDIxMV9tZ210X3R4LAorCS5tZ210X3R4X2NhbmNlbF93YWl0ID0gaWVlZTgwMjExX21nbXRfdHhfY2FuY2VsX3dhaXQsCiAJLnNldF9jcW1fcnNzaV9jb25maWcgPSBpZWVlODAyMTFfc2V0X2NxbV9yc3NpX2NvbmZpZywKIAkubWdtdF9mcmFtZV9yZWdpc3RlciA9IGllZWU4MDIxMV9tZ210X2ZyYW1lX3JlZ2lzdGVyLAorCS5zZXRfYW50ZW5uYSA9IGllZWU4MDIxMV9zZXRfYW50ZW5uYSwKKwkuZ2V0X2FudGVubmEgPSBpZWVlODAyMTFfZ2V0X2FudGVubmEsCiB9OwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2RlYnVnZnMuYyBiL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmMKaW5kZXggMTgyNjBhYS4uMWYwMmU1OSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2RlYnVnZnMuYworKysgYi9uZXQvbWFjODAyMTEvZGVidWdmcy5jCkBAIC0yMSwxNiArMjEsMzAgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2RlZmluZSBERUJVR0ZTX1JFQURPTkxZX0ZJTEUobmFtZSwgYnVmbGVuLCBmbXQsIHZhbHVlLi4uKQkJXAorI2RlZmluZSBERUJVR0ZTX0ZPUk1BVF9CVUZGRVJfU0laRSAxMDAKKworaW50IG1hYzgwMjExX2Zvcm1hdF9idWZmZXIoY2hhciBfX3VzZXIgKnVzZXJidWYsIHNpemVfdCBjb3VudCwKKwkJCQkgIGxvZmZfdCAqcHBvcywgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcmdzOworCWNoYXIgYnVmW0RFQlVHRlNfRk9STUFUX0JVRkZFUl9TSVpFXTsKKwlpbnQgcmVzOworCisJdmFfc3RhcnQoYXJncywgZm10KTsKKwlyZXMgPSB2c2NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZtdCwgYXJncyk7CisJdmFfZW5kKGFyZ3MpOworCisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJidWYsIGNvdW50LCBwcG9zLCBidWYsIHJlcyk7Cit9CisKKyNkZWZpbmUgREVCVUdGU19SRUFET05MWV9GSUxFKG5hbWUsIGZtdCwgdmFsdWUuLi4pCQkJXAogc3RhdGljIHNzaXplX3QgbmFtZSMjIF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcmJ1ZiwJXAogCQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQkJCVwKIHsJCQkJCQkJCQlcCiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBmaWxlLT5wcml2YXRlX2RhdGE7CQlcCi0JY2hhciBidWZbYnVmbGVuXTsJCQkJCQlcCi0JaW50IHJlczsJCQkJCQkJXAogCQkJCQkJCQkJXAotCXJlcyA9IHNjbnByaW50ZihidWYsIGJ1ZmxlbiwgZm10ICJcbiIsICMjdmFsdWUpOwkJXAotCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyYnVmLCBjb3VudCwgcHBvcywgYnVmLCByZXMpOwlcCisJcmV0dXJuIG1hYzgwMjExX2Zvcm1hdF9idWZmZXIodXNlcmJ1ZiwgY291bnQsIHBwb3MsIAkJXAorCQkJCSAgICAgIGZtdCAiXG4iLCAjI3ZhbHVlKTsJCVwKIH0JCQkJCQkJCQlcCiAJCQkJCQkJCQlcCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBuYW1lIyMgX29wcyA9IHsJCQlcCkBAIC00NiwxMyArNjAsMTMgQEAKIAlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCNuYW1lLCBtb2RlLCBwaHlkLCBsb2NhbCwgJm5hbWUjIyBfb3BzKTsKIAogCi1ERUJVR0ZTX1JFQURPTkxZX0ZJTEUoZnJlcXVlbmN5LCAyMCwgIiVkIiwKK0RFQlVHRlNfUkVBRE9OTFlfRklMRShmcmVxdWVuY3ksICIlZCIsCiAJCSAgICAgIGxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmNlbnRlcl9mcmVxKTsKLURFQlVHRlNfUkVBRE9OTFlfRklMRSh0b3RhbF9wc19idWZmZXJlZCwgMjAsICIlZCIsCitERUJVR0ZTX1JFQURPTkxZX0ZJTEUodG90YWxfcHNfYnVmZmVyZWQsICIlZCIsCiAJCSAgICAgIGxvY2FsLT50b3RhbF9wc19idWZmZXJlZCk7Ci1ERUJVR0ZTX1JFQURPTkxZX0ZJTEUod2VwX2l2LCAyMCwgIiUjMDh4IiwKK0RFQlVHRlNfUkVBRE9OTFlfRklMRSh3ZXBfaXYsICIlIzA4eCIsCiAJCSAgICAgIGxvY2FsLT53ZXBfaXYgJiAweGZmZmZmZik7Ci1ERUJVR0ZTX1JFQURPTkxZX0ZJTEUocmF0ZV9jdHJsX2FsZywgMTAwLCAiJXMiLAorREVCVUdGU19SRUFET05MWV9GSUxFKHJhdGVfY3RybF9hbGcsICIlcyIsCiAJbG9jYWwtPnJhdGVfY3RybCA/IGxvY2FsLT5yYXRlX2N0cmwtPm9wcy0+bmFtZSA6ICJody9kcml2ZXIiKTsKIAogc3RhdGljIHNzaXplX3QgdHNmX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKQEAgLTYwLDEzICs3NCwxMSBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXU2NCB0c2Y7Ci0JY2hhciBidWZbMTAwXTsKIAogCXRzZiA9IGRydl9nZXRfdHNmKGxvY2FsKTsKIAotCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIweCUwMTZsbHhcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpIHRzZik7Ci0KLQlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIDE5KTsKKwlyZXR1cm4gbWFjODAyMTFfZm9ybWF0X2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsICIweCUwMTZsbHhcbiIsCisJCQkJICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgdHNmKTsKIH0KIAogc3RhdGljIHNzaXplX3QgdHNmX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLApAQCAtMTMxLDEyICsxNDMsOSBAQAogCQkJICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlpbnQgcmVzOwotCWNoYXIgYnVmWzEwXTsKIAotCXJlcyA9IHNjbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJWRcbiIsIGxvY2FsLT53aWZpX3dtZV9ub2Fja190ZXN0KTsKLQotCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcmVzKTsKKwlyZXR1cm4gbWFjODAyMTFfZm9ybWF0X2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsICIlZFxuIiwKKwkJCQkgICAgICBsb2NhbC0+d2lmaV93bWVfbm9hY2tfdGVzdCk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IG5vYWNrX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLApAQCAtMTY4LDEyICsxNzcsOCBAQAogCQkJCSBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlpbnQgcmVzOwotCWNoYXIgYnVmWzEwXTsKLQotCXJlcyA9IHNjbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiMHgleFxuIiwgbG9jYWwtPnVhcHNkX3F1ZXVlcyk7Ci0KLQlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIHJlcyk7CisJcmV0dXJuIG1hYzgwMjExX2Zvcm1hdF9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCAiMHgleFxuIiwKKwkJCQkgICAgICBsb2NhbC0+dWFwc2RfcXVldWVzKTsKIH0KIAogc3RhdGljIHNzaXplX3QgdWFwc2RfcXVldWVzX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLApAQCAtMjE1LDEyICsyMjAsOSBAQAogCQkJCSAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JaW50IHJlczsKLQljaGFyIGJ1ZlsxMF07CiAKLQlyZXMgPSBzY25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIjB4JXhcbiIsIGxvY2FsLT51YXBzZF9tYXhfc3BfbGVuKTsKLQotCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcmVzKTsKKwlyZXR1cm4gbWFjODAyMTFfZm9ybWF0X2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsICIweCV4XG4iLAorCQkJCSAgICAgIGxvY2FsLT51YXBzZF9tYXhfc3BfbGVuKTsKIH0KIAogc3RhdGljIHNzaXplX3QgdWFwc2RfbWF4X3NwX2xlbl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmggYi9uZXQvbWFjODAyMTEvZGVidWdmcy5oCmluZGV4IDA5Y2M5YmUuLjdjODc1MjkgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmgKKysrIGIvbmV0L21hYzgwMjExL2RlYnVnZnMuaApAQCAtNCw2ICs0LDggQEAKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdGUwogZXh0ZXJuIHZvaWQgZGVidWdmc19od19hZGQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpOwogZXh0ZXJuIGludCBtYWM4MDIxMV9vcGVuX2ZpbGVfZ2VuZXJpYyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CitleHRlcm4gaW50IG1hYzgwMjExX2Zvcm1hdF9idWZmZXIoY2hhciBfX3VzZXIgKnVzZXJidWYsIHNpemVfdCBjb3VudCwKKwkJCQkgIGxvZmZfdCAqcHBvcywgY2hhciAqZm10LCAuLi4pOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBkZWJ1Z2ZzX2h3X2FkZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCkKIHsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX2tleS5jIGIvbmV0L21hYzgwMjExL2RlYnVnZnNfa2V5LmMKaW5kZXggMTI0M2QxZC4uZjdlZjM0NyAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2RlYnVnZnNfa2V5LmMKKysrIGIvbmV0L21hYzgwMjExL2RlYnVnZnNfa2V5LmMKQEAgLTE1LDE4ICsxNSwxNyBAQAogI2luY2x1ZGUgImRlYnVnZnMuaCIKICNpbmNsdWRlICJkZWJ1Z2ZzX2tleS5oIgogCi0jZGVmaW5lIEtFWV9SRUFEKG5hbWUsIHByb3AsIGJ1ZmxlbiwgZm9ybWF0X3N0cmluZykJCQlcCisjZGVmaW5lIEtFWV9SRUFEKG5hbWUsIHByb3AsIGZvcm1hdF9zdHJpbmcpCQkJCVwKIHN0YXRpYyBzc2l6ZV90IGtleV8jI25hbWUjI19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLAkJCVwKIAkJCQkgY2hhciBfX3VzZXIgKnVzZXJidWYsCQkJXAogCQkJCSBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykJCVwKIHsJCQkJCQkJCQlcCi0JY2hhciBidWZbYnVmbGVuXTsJCQkJCQlcCiAJc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSA9IGZpbGUtPnByaXZhdGVfZGF0YTsJCQlcCi0JaW50IHJlcyA9IHNjbnByaW50ZihidWYsIGJ1ZmxlbiwgZm9ybWF0X3N0cmluZywga2V5LT5wcm9wKTsJXAotCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyYnVmLCBjb3VudCwgcHBvcywgYnVmLCByZXMpOwlcCisJcmV0dXJuIG1hYzgwMjExX2Zvcm1hdF9idWZmZXIodXNlcmJ1ZiwgY291bnQsIHBwb3MsIAkJXAorCQkJCSAgICAgIGZvcm1hdF9zdHJpbmcsIGtleS0+cHJvcCk7CVwKIH0KLSNkZWZpbmUgS0VZX1JFQURfRChuYW1lKSBLRVlfUkVBRChuYW1lLCBuYW1lLCAyMCwgIiVkXG4iKQotI2RlZmluZSBLRVlfUkVBRF9YKG5hbWUpIEtFWV9SRUFEKG5hbWUsIG5hbWUsIDIwLCAiMHgleFxuIikKKyNkZWZpbmUgS0VZX1JFQURfRChuYW1lKSBLRVlfUkVBRChuYW1lLCBuYW1lLCAiJWRcbiIpCisjZGVmaW5lIEtFWV9SRUFEX1gobmFtZSkgS0VZX1JFQUQobmFtZSwgbmFtZSwgIjB4JXhcbiIpCiAKICNkZWZpbmUgS0VZX09QUyhuYW1lKQkJCQkJCQlcCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBrZXlfICMjbmFtZSMjIF9vcHMgPSB7CQlcCkBAIC0zOSw5ICszOCw5IEBACiAJCSBLRVlfUkVBRF8jI2Zvcm1hdChuYW1lKQkJCQlcCiAJCSBLRVlfT1BTKG5hbWUpCiAKLSNkZWZpbmUgS0VZX0NPTkZfUkVBRChuYW1lLCBidWZsZW4sIGZvcm1hdF9zdHJpbmcpCQkJXAotCUtFWV9SRUFEKGNvbmZfIyNuYW1lLCBjb25mLm5hbWUsIGJ1ZmxlbiwgZm9ybWF0X3N0cmluZykKLSNkZWZpbmUgS0VZX0NPTkZfUkVBRF9EKG5hbWUpIEtFWV9DT05GX1JFQUQobmFtZSwgMjAsICIlZFxuIikKKyNkZWZpbmUgS0VZX0NPTkZfUkVBRChuYW1lLCBmb3JtYXRfc3RyaW5nKQkJCQlcCisJS0VZX1JFQUQoY29uZl8jI25hbWUsIGNvbmYubmFtZSwgZm9ybWF0X3N0cmluZykKKyNkZWZpbmUgS0VZX0NPTkZfUkVBRF9EKG5hbWUpIEtFWV9DT05GX1JFQUQobmFtZSwgIiVkXG4iKQogCiAjZGVmaW5lIEtFWV9DT05GX09QUyhuYW1lKQkJCQkJCVwKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGtleV8gIyNuYW1lIyMgX29wcyA9IHsJCVwKQEAgLTU5LDcgKzU4LDcgQEAKIEtFWV9DT05GX0ZJTEUoaHdfa2V5X2lkeCwgRCk7CiBLRVlfRklMRShmbGFncywgWCk7CiBLRVlfRklMRSh0eF9yeF9jb3VudCwgRCk7Ci1LRVlfUkVBRChpZmluZGV4LCBzZGF0YS0+bmFtZSwgSUZOQU1TSVogKyAyLCAiJXNcbiIpOworS0VZX1JFQUQoaWZpbmRleCwgc2RhdGEtPm5hbWUsICIlc1xuIik7CiBLRVlfT1BTKGlmaW5kZXgpOwogCiBzdGF0aWMgc3NpemVfdCBrZXlfYWxnb3JpdGhtX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsCkBAIC0yNzUsNyArMjc0LDggQEAKIAlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoa2V5LT5kZWJ1Z2ZzLmRpcik7CiAJa2V5LT5kZWJ1Z2ZzLmRpciA9IE5VTEw7CiB9Ci12b2lkIGllZWU4MDIxMV9kZWJ1Z2ZzX2tleV9hZGRfZGVmYXVsdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKKwordm9pZCBpZWVlODAyMTFfZGVidWdmc19rZXlfdXBkYXRlX2RlZmF1bHQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiB7CiAJY2hhciBidWZbNTBdOwogCXN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXk7CkBAIC0yODMsMjUgKzI4MywyOSBAQAogCWlmICghc2RhdGEtPmRlYnVnZnMuZGlyKQogCQlyZXR1cm47CiAKLQkvKiB0aGlzIGlzIHJ1bm5pbmcgdW5kZXIgdGhlIGtleSBsb2NrICovCisJbG9ja2RlcF9hc3NlcnRfaGVsZCgmc2RhdGEtPmxvY2FsLT5rZXlfbXR4KTsKIAotCWtleSA9IHNkYXRhLT5kZWZhdWx0X2tleTsKLQlpZiAoa2V5KSB7CisJaWYgKHNkYXRhLT5kZWZhdWx0X3VuaWNhc3Rfa2V5KSB7CisJCWtleSA9IHNkYXRhLT5kZWZhdWx0X3VuaWNhc3Rfa2V5OwogCQlzcHJpbnRmKGJ1ZiwgIi4uL2tleXMvJWQiLCBrZXktPmRlYnVnZnMuY250KTsKLQkJc2RhdGEtPmRlYnVnZnMuZGVmYXVsdF9rZXkgPQotCQkJZGVidWdmc19jcmVhdGVfc3ltbGluaygiZGVmYXVsdF9rZXkiLAorCQlzZGF0YS0+ZGVidWdmcy5kZWZhdWx0X3VuaWNhc3Rfa2V5ID0KKwkJCWRlYnVnZnNfY3JlYXRlX3N5bWxpbmsoImRlZmF1bHRfdW5pY2FzdF9rZXkiLAogCQkJCQkgICAgICAgc2RhdGEtPmRlYnVnZnMuZGlyLCBidWYpOwotCX0gZWxzZQotCQlpZWVlODAyMTFfZGVidWdmc19rZXlfcmVtb3ZlX2RlZmF1bHQoc2RhdGEpOwotfQorCX0gZWxzZSB7CisJCWRlYnVnZnNfcmVtb3ZlKHNkYXRhLT5kZWJ1Z2ZzLmRlZmF1bHRfdW5pY2FzdF9rZXkpOworCQlzZGF0YS0+ZGVidWdmcy5kZWZhdWx0X3VuaWNhc3Rfa2V5ID0gTlVMTDsKKwl9CiAKLXZvaWQgaWVlZTgwMjExX2RlYnVnZnNfa2V5X3JlbW92ZV9kZWZhdWx0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQotewotCWlmICghc2RhdGEpCi0JCXJldHVybjsKLQotCWRlYnVnZnNfcmVtb3ZlKHNkYXRhLT5kZWJ1Z2ZzLmRlZmF1bHRfa2V5KTsKLQlzZGF0YS0+ZGVidWdmcy5kZWZhdWx0X2tleSA9IE5VTEw7CisJaWYgKHNkYXRhLT5kZWZhdWx0X211bHRpY2FzdF9rZXkpIHsKKwkJa2V5ID0gc2RhdGEtPmRlZmF1bHRfbXVsdGljYXN0X2tleTsKKwkJc3ByaW50ZihidWYsICIuLi9rZXlzLyVkIiwga2V5LT5kZWJ1Z2ZzLmNudCk7CisJCXNkYXRhLT5kZWJ1Z2ZzLmRlZmF1bHRfbXVsdGljYXN0X2tleSA9CisJCQlkZWJ1Z2ZzX2NyZWF0ZV9zeW1saW5rKCJkZWZhdWx0X211bHRpY2FzdF9rZXkiLAorCQkJCQkgICAgICAgc2RhdGEtPmRlYnVnZnMuZGlyLCBidWYpOworCX0gZWxzZSB7CisJCWRlYnVnZnNfcmVtb3ZlKHNkYXRhLT5kZWJ1Z2ZzLmRlZmF1bHRfbXVsdGljYXN0X2tleSk7CisJCXNkYXRhLT5kZWJ1Z2ZzLmRlZmF1bHRfbXVsdGljYXN0X2tleSA9IE5VTEw7CisJfQogfQogCiB2b2lkIGllZWU4MDIxMV9kZWJ1Z2ZzX2tleV9hZGRfbWdtdF9kZWZhdWx0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2RlYnVnZnNfa2V5LmggYi9uZXQvbWFjODAyMTEvZGVidWdmc19rZXkuaAppbmRleCA1NDcxN2I0Li4zMmFkYzc3IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvZGVidWdmc19rZXkuaAorKysgYi9uZXQvbWFjODAyMTEvZGVidWdmc19rZXkuaApAQCAtNCw4ICs0LDcgQEAKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdGUwogdm9pZCBpZWVlODAyMTFfZGVidWdmc19rZXlfYWRkKHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXkpOwogdm9pZCBpZWVlODAyMTFfZGVidWdmc19rZXlfcmVtb3ZlKHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXkpOwotdm9pZCBpZWVlODAyMTFfZGVidWdmc19rZXlfYWRkX2RlZmF1bHQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOwotdm9pZCBpZWVlODAyMTFfZGVidWdmc19rZXlfcmVtb3ZlX2RlZmF1bHQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOwordm9pZCBpZWVlODAyMTFfZGVidWdmc19rZXlfdXBkYXRlX2RlZmF1bHQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOwogdm9pZCBpZWVlODAyMTFfZGVidWdmc19rZXlfYWRkX21nbXRfZGVmYXVsdCgKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7CiB2b2lkIGllZWU4MDIxMV9kZWJ1Z2ZzX2tleV9yZW1vdmVfbWdtdF9kZWZhdWx0KApAQCAtMTcsMTAgKzE2LDcgQEAKIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQgaWVlZTgwMjExX2RlYnVnZnNfa2V5X3JlbW92ZShzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5KQoge30KLXN0YXRpYyBpbmxpbmUgdm9pZCBpZWVlODAyMTFfZGVidWdmc19rZXlfYWRkX2RlZmF1bHQoCi0Jc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCi17fQotc3RhdGljIGlubGluZSB2b2lkIGllZWU4MDIxMV9kZWJ1Z2ZzX2tleV9yZW1vdmVfZGVmYXVsdCgKK3N0YXRpYyBpbmxpbmUgdm9pZCBpZWVlODAyMTFfZGVidWdmc19rZXlfdXBkYXRlX2RlZmF1bHQoCiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiB7fQogc3RhdGljIGlubGluZSB2b2lkIGllZWU4MDIxMV9kZWJ1Z2ZzX2tleV9hZGRfbWdtdF9kZWZhdWx0KApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmMgYi9uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYwppbmRleCBjYmRmMzZkLi4yZGFiZGY3IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYworKysgYi9uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYwpAQCAtMjUxLDYgKzI1MSw3IEBACiBJRUVFODAyMTFfSUZfRklMRShkb3QxMU1lc2hIb2xkaW5nVGltZW91dCwKIAkJdS5tZXNoLm1zaGNmZy5kb3QxMU1lc2hIb2xkaW5nVGltZW91dCwgREVDKTsKIElFRUU4MDIxMV9JRl9GSUxFKGRvdDExTWVzaFRUTCwgdS5tZXNoLm1zaGNmZy5kb3QxMU1lc2hUVEwsIERFQyk7CitJRUVFODAyMTFfSUZfRklMRShlbGVtZW50X3R0bCwgdS5tZXNoLm1zaGNmZy5lbGVtZW50X3R0bCwgREVDKTsKIElFRUU4MDIxMV9JRl9GSUxFKGF1dG9fb3Blbl9wbGlua3MsIHUubWVzaC5tc2hjZmcuYXV0b19vcGVuX3BsaW5rcywgREVDKTsKIElFRUU4MDIxMV9JRl9GSUxFKGRvdDExTWVzaE1heFBlZXJMaW5rcywKIAkJdS5tZXNoLm1zaGNmZy5kb3QxMU1lc2hNYXhQZWVyTGlua3MsIERFQyk7CkBAIC0zNTUsNiArMzU2LDcgQEAKIAlNRVNIUEFSQU1TX0FERChkb3QxMU1lc2hDb25maXJtVGltZW91dCk7CiAJTUVTSFBBUkFNU19BREQoZG90MTFNZXNoSG9sZGluZ1RpbWVvdXQpOwogCU1FU0hQQVJBTVNfQUREKGRvdDExTWVzaFRUTCk7CisJTUVTSFBBUkFNU19BREQoZWxlbWVudF90dGwpOwogCU1FU0hQQVJBTVNfQUREKGF1dG9fb3Blbl9wbGlua3MpOwogCU1FU0hQQVJBTVNfQUREKGRvdDExTWVzaE1heFBlZXJMaW5rcyk7CiAJTUVTSFBBUkFNU19BREQoZG90MTFNZXNoSFdNUGFjdGl2ZVBhdGhUaW1lb3V0KTsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX3N0YS5jIGIvbmV0L21hYzgwMjExL2RlYnVnZnNfc3RhLmMKaW5kZXggNDYwMWZlYS4uYzA0YTEzOSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2RlYnVnZnNfc3RhLmMKKysrIGIvbmV0L21hYzgwMjExL2RlYnVnZnNfc3RhLmMKQEAgLTE3LDIwICsxNywxOCBAQAogCiAvKiBzdGEgYXR0cmlidXR0ZXMgKi8KIAotI2RlZmluZSBTVEFfUkVBRChuYW1lLCBidWZsZW4sIGZpZWxkLCBmb3JtYXRfc3RyaW5nKQkJCVwKKyNkZWZpbmUgU1RBX1JFQUQobmFtZSwgZmllbGQsIGZvcm1hdF9zdHJpbmcpCQkJCVwKIHN0YXRpYyBzc2l6ZV90IHN0YV8gIyNuYW1lIyMgX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsCQkJXAogCQkJCSAgIGNoYXIgX191c2VyICp1c2VyYnVmLAkJXAogCQkJCSAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQkJXAogewkJCQkJCQkJCVwKLQlpbnQgcmVzOwkJCQkJCQlcCiAJc3RydWN0IHN0YV9pbmZvICpzdGEgPSBmaWxlLT5wcml2YXRlX2RhdGE7CQkJXAotCWNoYXIgYnVmW2J1Zmxlbl07CQkJCQkJXAotCXJlcyA9IHNjbnByaW50ZihidWYsIGJ1ZmxlbiwgZm9ybWF0X3N0cmluZywgc3RhLT5maWVsZCk7CVwKLQlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcmJ1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcmVzKTsJXAorCXJldHVybiBtYWM4MDIxMV9mb3JtYXRfYnVmZmVyKHVzZXJidWYsIGNvdW50LCBwcG9zLCAJCVwKKwkJCQkgICAgICBmb3JtYXRfc3RyaW5nLCBzdGEtPmZpZWxkKTsJXAogfQotI2RlZmluZSBTVEFfUkVBRF9EKG5hbWUsIGZpZWxkKSBTVEFfUkVBRChuYW1lLCAyMCwgZmllbGQsICIlZFxuIikKLSNkZWZpbmUgU1RBX1JFQURfVShuYW1lLCBmaWVsZCkgU1RBX1JFQUQobmFtZSwgMjAsIGZpZWxkLCAiJXVcbiIpCi0jZGVmaW5lIFNUQV9SRUFEX1MobmFtZSwgZmllbGQpIFNUQV9SRUFEKG5hbWUsIDIwLCBmaWVsZCwgIiVzXG4iKQorI2RlZmluZSBTVEFfUkVBRF9EKG5hbWUsIGZpZWxkKSBTVEFfUkVBRChuYW1lLCBmaWVsZCwgIiVkXG4iKQorI2RlZmluZSBTVEFfUkVBRF9VKG5hbWUsIGZpZWxkKSBTVEFfUkVBRChuYW1lLCBmaWVsZCwgIiV1XG4iKQorI2RlZmluZSBTVEFfUkVBRF9TKG5hbWUsIGZpZWxkKSBTVEFfUkVBRChuYW1lLCBmaWVsZCwgIiVzXG4iKQogCiAjZGVmaW5lIFNUQV9PUFMobmFtZSkJCQkJCQkJXAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3RhXyAjI25hbWUjIyBfb3BzID0gewkJXApAQCAtNzksMjIgKzc3LDE4IEBACiAJCQkJCSAgY2hhciBfX3VzZXIgKnVzZXJidWYsCiAJCQkJCSAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7Ci0JY2hhciBidWZbMjBdOwogCXN0cnVjdCBzdGFfaW5mbyAqc3RhID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCWludCByZXMgPSBzY25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiV1XG4iLAotCQkJICAgIHNrYl9xdWV1ZV9sZW4oJnN0YS0+cHNfdHhfYnVmKSk7Ci0JcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJidWYsIGNvdW50LCBwcG9zLCBidWYsIHJlcyk7CisJcmV0dXJuIG1hYzgwMjExX2Zvcm1hdF9idWZmZXIodXNlcmJ1ZiwgY291bnQsIHBwb3MsICIldVxuIiwKKwkJCQkgICAgICBza2JfcXVldWVfbGVuKCZzdGEtPnBzX3R4X2J1ZikpOwogfQogU1RBX09QUyhudW1fcHNfYnVmX2ZyYW1lcyk7CiAKIHN0YXRpYyBzc2l6ZV90IHN0YV9pbmFjdGl2ZV9tc19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcmJ1ZiwKIAkJCQkgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7Ci0JY2hhciBidWZbMjBdOwogCXN0cnVjdCBzdGFfaW5mbyAqc3RhID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCWludCByZXMgPSBzY25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVkXG4iLAotCQkJICAgIGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtIHN0YS0+bGFzdF9yeCkpOwotCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyYnVmLCBjb3VudCwgcHBvcywgYnVmLCByZXMpOworCXJldHVybiBtYWM4MDIxMV9mb3JtYXRfYnVmZmVyKHVzZXJidWYsIGNvdW50LCBwcG9zLCAiJWRcbiIsCisJCQkJICAgICAgamlmZmllc190b19tc2VjcyhqaWZmaWVzIC0gc3RhLT5sYXN0X3J4KSk7CiB9CiBTVEFfT1BTKGluYWN0aXZlX21zKTsKIApAQCAtMTE4LDM0ICsxMTIsMzUgQEAKIAljaGFyIGJ1Zls3MSArIFNUQV9USURfTlVNICogNDBdLCAqcCA9IGJ1ZjsKIAlpbnQgaTsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgdGlkX2FtcGR1X3J4ICp0aWRfcng7CisJc3RydWN0IHRpZF9hbXBkdV90eCAqdGlkX3R4OwogCi0Jc3Bpbl9sb2NrX2JoKCZzdGEtPmxvY2spOworCXJjdV9yZWFkX2xvY2soKTsKKwogCXAgKz0gc2NucHJpbnRmKHAsIHNpemVvZihidWYpICsgYnVmIC0gcCwgIm5leHQgZGlhbG9nX3Rva2VuOiAlIzAyeFxuIiwKIAkJCXN0YS0+YW1wZHVfbWxtZS5kaWFsb2dfdG9rZW5fYWxsb2NhdG9yICsgMSk7CiAJcCArPSBzY25wcmludGYocCwgc2l6ZW9mKGJ1ZikgKyBidWYgLSBwLAogCQkgICAgICAgIlRJRFx0XHRSWCBhY3RpdmVcdERUS05cdFNTTlx0XHRUWFx0RFRLTlx0cGVuZGluZ1xuIik7Ci0JZm9yIChpID0gMDsgaSA8IFNUQV9USURfTlVNOyBpKyspIHsKLQkJcCArPSBzY25wcmludGYocCwgc2l6ZW9mKGJ1ZikgKyBidWYgLSBwLCAiJTAyZCIsIGkpOwotCQlwICs9IHNjbnByaW50ZihwLCBzaXplb2YoYnVmKSArIGJ1ZiAtIHAsICJcdFx0JXgiLAotCQkJCSEhc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFtpXSk7Ci0JCXAgKz0gc2NucHJpbnRmKHAsIHNpemVvZihidWYpICsgYnVmIC0gcCwgIlx0JSMuMngiLAotCQkJCXN0YS0+YW1wZHVfbWxtZS50aWRfcnhbaV0gPwotCQkJCXN0YS0+YW1wZHVfbWxtZS50aWRfcnhbaV0tPmRpYWxvZ190b2tlbiA6IDApOwotCQlwICs9IHNjbnByaW50ZihwLCBzaXplb2YoYnVmKSArIGJ1ZiAtIHAsICJcdCUjLjN4IiwKLQkJCQlzdGEtPmFtcGR1X21sbWUudGlkX3J4W2ldID8KLQkJCQlzdGEtPmFtcGR1X21sbWUudGlkX3J4W2ldLT5zc24gOiAwKTsKIAotCQlwICs9IHNjbnByaW50ZihwLCBzaXplb2YoYnVmKSArIGJ1ZiAtIHAsICJcdFx0JXgiLAotCQkJCSEhc3RhLT5hbXBkdV9tbG1lLnRpZF90eFtpXSk7CisJZm9yIChpID0gMDsgaSA8IFNUQV9USURfTlVNOyBpKyspIHsKKwkJdGlkX3J4ID0gcmN1X2RlcmVmZXJlbmNlKHN0YS0+YW1wZHVfbWxtZS50aWRfcnhbaV0pOworCQl0aWRfdHggPSByY3VfZGVyZWZlcmVuY2Uoc3RhLT5hbXBkdV9tbG1lLnRpZF90eFtpXSk7CisKKwkJcCArPSBzY25wcmludGYocCwgc2l6ZW9mKGJ1ZikgKyBidWYgLSBwLCAiJTAyZCIsIGkpOworCQlwICs9IHNjbnByaW50ZihwLCBzaXplb2YoYnVmKSArIGJ1ZiAtIHAsICJcdFx0JXgiLCAhIXRpZF9yeCk7CiAJCXAgKz0gc2NucHJpbnRmKHAsIHNpemVvZihidWYpICsgYnVmIC0gcCwgIlx0JSMuMngiLAotCQkJCXN0YS0+YW1wZHVfbWxtZS50aWRfdHhbaV0gPwotCQkJCXN0YS0+YW1wZHVfbWxtZS50aWRfdHhbaV0tPmRpYWxvZ190b2tlbiA6IDApOworCQkJCXRpZF9yeCA/IHRpZF9yeC0+ZGlhbG9nX3Rva2VuIDogMCk7CisJCXAgKz0gc2NucHJpbnRmKHAsIHNpemVvZihidWYpICsgYnVmIC0gcCwgIlx0JSMuM3giLAorCQkJCXRpZF9yeCA/IHRpZF9yeC0+c3NuIDogMCk7CisKKwkJcCArPSBzY25wcmludGYocCwgc2l6ZW9mKGJ1ZikgKyBidWYgLSBwLCAiXHRcdCV4IiwgISF0aWRfdHgpOworCQlwICs9IHNjbnByaW50ZihwLCBzaXplb2YoYnVmKSArIGJ1ZiAtIHAsICJcdCUjLjJ4IiwKKwkJCQl0aWRfdHggPyB0aWRfdHgtPmRpYWxvZ190b2tlbiA6IDApOwogCQlwICs9IHNjbnByaW50ZihwLCBzaXplb2YoYnVmKSArIGJ1ZiAtIHAsICJcdCUwM2QiLAotCQkJCXN0YS0+YW1wZHVfbWxtZS50aWRfdHhbaV0gPwotCQkJCXNrYl9xdWV1ZV9sZW4oJnN0YS0+YW1wZHVfbWxtZS50aWRfdHhbaV0tPnBlbmRpbmcpIDogMCk7CisJCQkJdGlkX3R4ID8gc2tiX3F1ZXVlX2xlbigmdGlkX3R4LT5wZW5kaW5nKSA6IDApOwogCQlwICs9IHNjbnByaW50ZihwLCBzaXplb2YoYnVmKSArIGJ1ZiAtIHAsICJcbiIpOwogCX0KLQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIAogCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyYnVmLCBjb3VudCwgcHBvcywgYnVmLCBwIC0gYnVmKTsKIH0KQEAgLTE5NCw3ICsxODksNyBAQAogCiAJaWYgKHR4KSB7CiAJCWlmIChzdGFydCkKLQkJCXJldCA9IGllZWU4MDIxMV9zdGFydF90eF9iYV9zZXNzaW9uKCZzdGEtPnN0YSwgdGlkKTsKKwkJCXJldCA9IGllZWU4MDIxMV9zdGFydF90eF9iYV9zZXNzaW9uKCZzdGEtPnN0YSwgdGlkLCA1MDAwKTsKIAkJZWxzZQogCQkJcmV0ID0gaWVlZTgwMjExX3N0b3BfdHhfYmFfc2Vzc2lvbigmc3RhLT5zdGEsIHRpZCk7CiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9kcml2ZXItb3BzLmggYi9uZXQvbWFjODAyMTEvZHJpdmVyLW9wcy5oCmluZGV4IDE2OTgzODIuLjk4ZDU4OTkgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9kcml2ZXItb3BzLmgKKysrIGIvbmV0L21hYzgwMjExL2RyaXZlci1vcHMuaApAQCAtMjMzLDYgKzIzMywyMCBAQAogCXRyYWNlX2Rydl9nZXRfdGtpcF9zZXEobG9jYWwsIGh3X2tleV9pZHgsIGl2MzIsIGl2MTYpOwogfQogCitzdGF0aWMgaW5saW5lIGludCBkcnZfc2V0X2ZyYWdfdGhyZXNob2xkKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkJCQl1MzIgdmFsdWUpCit7CisJaW50IHJldCA9IDA7CisKKwltaWdodF9zbGVlcCgpOworCisJdHJhY2VfZHJ2X3NldF9mcmFnX3RocmVzaG9sZChsb2NhbCwgdmFsdWUpOworCWlmIChsb2NhbC0+b3BzLT5zZXRfZnJhZ190aHJlc2hvbGQpCisJCXJldCA9IGxvY2FsLT5vcHMtPnNldF9mcmFnX3RocmVzaG9sZCgmbG9jYWwtPmh3LCB2YWx1ZSk7CisJdHJhY2VfZHJ2X3JldHVybl9pbnQobG9jYWwsIHJldCk7CisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIGlubGluZSBpbnQgZHJ2X3NldF9ydHNfdGhyZXNob2xkKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAogCQkJCQl1MzIgdmFsdWUpCiB7CkBAIC0zNTMsNyArMzY3LDcgQEAKIAogc3RhdGljIGlubGluZSBpbnQgZHJ2X3R4X2xhc3RfYmVhY29uKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKQogewotCWludCByZXQgPSAxOworCWludCByZXQgPSAwOyAvKiBkZWZhdWx0IHVuc3Vwb3J0ZWQgb3AgZm9yIGxlc3MgY29uZ2VzdGlvbiAqLwogCiAJbWlnaHRfc2xlZXAoKTsKIApAQCAtNDI4LDQgKzQ0Miw1NyBAQAogCXRyYWNlX2Rydl9yZXR1cm5fdm9pZChsb2NhbCk7CiB9CiAKKworc3RhdGljIGlubGluZSBpbnQgZHJ2X3NldF9hbnRlbm5hKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkJCSAgdTMyIHR4X2FudCwgdTMyIHJ4X2FudCkKK3sKKwlpbnQgcmV0ID0gLUVPUE5PVFNVUFA7CisJbWlnaHRfc2xlZXAoKTsKKwlpZiAobG9jYWwtPm9wcy0+c2V0X2FudGVubmEpCisJCXJldCA9IGxvY2FsLT5vcHMtPnNldF9hbnRlbm5hKCZsb2NhbC0+aHcsIHR4X2FudCwgcnhfYW50KTsKKwl0cmFjZV9kcnZfc2V0X2FudGVubmEobG9jYWwsIHR4X2FudCwgcnhfYW50LCByZXQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGRydl9nZXRfYW50ZW5uYShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJCQkgIHUzMiAqdHhfYW50LCB1MzIgKnJ4X2FudCkKK3sKKwlpbnQgcmV0ID0gLUVPUE5PVFNVUFA7CisJbWlnaHRfc2xlZXAoKTsKKwlpZiAobG9jYWwtPm9wcy0+Z2V0X2FudGVubmEpCisJCXJldCA9IGxvY2FsLT5vcHMtPmdldF9hbnRlbm5hKCZsb2NhbC0+aHcsIHR4X2FudCwgcnhfYW50KTsKKwl0cmFjZV9kcnZfZ2V0X2FudGVubmEobG9jYWwsICp0eF9hbnQsICpyeF9hbnQsIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSBpbnQgZHJ2X3JlbWFpbl9vbl9jaGFubmVsKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkJCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4sCisJCQkJCWVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgY2hhbnR5cGUsCisJCQkJCXVuc2lnbmVkIGludCBkdXJhdGlvbikKK3sKKwlpbnQgcmV0OworCisJbWlnaHRfc2xlZXAoKTsKKworCXRyYWNlX2Rydl9yZW1haW5fb25fY2hhbm5lbChsb2NhbCwgY2hhbiwgY2hhbnR5cGUsIGR1cmF0aW9uKTsKKwlyZXQgPSBsb2NhbC0+b3BzLT5yZW1haW5fb25fY2hhbm5lbCgmbG9jYWwtPmh3LCBjaGFuLCBjaGFudHlwZSwKKwkJCQkJICAgIGR1cmF0aW9uKTsKKwl0cmFjZV9kcnZfcmV0dXJuX2ludChsb2NhbCwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGRydl9jYW5jZWxfcmVtYWluX29uX2NoYW5uZWwoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpCit7CisJaW50IHJldDsKKworCW1pZ2h0X3NsZWVwKCk7CisKKwl0cmFjZV9kcnZfY2FuY2VsX3JlbWFpbl9vbl9jaGFubmVsKGxvY2FsKTsKKwlyZXQgPSBsb2NhbC0+b3BzLT5jYW5jZWxfcmVtYWluX29uX2NoYW5uZWwoJmxvY2FsLT5odyk7CisJdHJhY2VfZHJ2X3JldHVybl9pbnQobG9jYWwsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCiAjZW5kaWYgLyogX19NQUM4MDIxMV9EUklWRVJfT1BTICovCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvZHJpdmVyLXRyYWNlLmggYi9uZXQvbWFjODAyMTEvZHJpdmVyLXRyYWNlLmgKaW5kZXggNjgzMWZiMS4uNDljODQyMSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2RyaXZlci10cmFjZS5oCisrKyBiL25ldC9tYWM4MDIxMS9kcml2ZXItdHJhY2UuaApAQCAtNTMxLDYgKzUzMSwyNyBAQAogCSkKICk7CiAKK1RSQUNFX0VWRU5UKGRydl9zZXRfZnJhZ190aHJlc2hvbGQsCisJVFBfUFJPVE8oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIHUzMiB2YWx1ZSksCisKKwlUUF9BUkdTKGxvY2FsLCB2YWx1ZSksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlMT0NBTF9FTlRSWQorCQlfX2ZpZWxkKHUzMiwgdmFsdWUpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlMT0NBTF9BU1NJR047CisJCV9fZW50cnktPnZhbHVlID0gdmFsdWU7CisJKSwKKworCVRQX3ByaW50aygKKwkJTE9DQUxfUFJfRk1UICIgdmFsdWU6JWQiLAorCQlMT0NBTF9QUl9BUkcsIF9fZW50cnktPnZhbHVlCisJKQorKTsKKwogVFJBQ0VfRVZFTlQoZHJ2X3NldF9ydHNfdGhyZXNob2xkLAogCVRQX1BST1RPKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCB1MzIgdmFsdWUpLAogCkBAIC04NjIsNiArODgzLDEwMCBAQAogCSkKICk7CiAKK1RSQUNFX0VWRU5UKGRydl9zZXRfYW50ZW5uYSwKKwlUUF9QUk9UTyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgdTMyIHR4X2FudCwgdTMyIHJ4X2FudCwgaW50IHJldCksCisKKwlUUF9BUkdTKGxvY2FsLCB0eF9hbnQsIHJ4X2FudCwgcmV0KSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCUxPQ0FMX0VOVFJZCisJCV9fZmllbGQodTMyLCB0eF9hbnQpCisJCV9fZmllbGQodTMyLCByeF9hbnQpCisJCV9fZmllbGQoaW50LCByZXQpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlMT0NBTF9BU1NJR047CisJCV9fZW50cnktPnR4X2FudCA9IHR4X2FudDsKKwkJX19lbnRyeS0+cnhfYW50ID0gcnhfYW50OworCQlfX2VudHJ5LT5yZXQgPSByZXQ7CisJKSwKKworCVRQX3ByaW50aygKKwkJTE9DQUxfUFJfRk1UICIgdHhfYW50OiVkIHJ4X2FudDolZCByZXQ6JWQiLAorCQlMT0NBTF9QUl9BUkcsIF9fZW50cnktPnR4X2FudCwgX19lbnRyeS0+cnhfYW50LCBfX2VudHJ5LT5yZXQKKwkpCispOworCitUUkFDRV9FVkVOVChkcnZfZ2V0X2FudGVubmEsCisJVFBfUFJPVE8oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIHUzMiB0eF9hbnQsIHUzMiByeF9hbnQsIGludCByZXQpLAorCisJVFBfQVJHUyhsb2NhbCwgdHhfYW50LCByeF9hbnQsIHJldCksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlMT0NBTF9FTlRSWQorCQlfX2ZpZWxkKHUzMiwgdHhfYW50KQorCQlfX2ZpZWxkKHUzMiwgcnhfYW50KQorCQlfX2ZpZWxkKGludCwgcmV0KQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJTE9DQUxfQVNTSUdOOworCQlfX2VudHJ5LT50eF9hbnQgPSB0eF9hbnQ7CisJCV9fZW50cnktPnJ4X2FudCA9IHJ4X2FudDsKKwkJX19lbnRyeS0+cmV0ID0gcmV0OworCSksCisKKwlUUF9wcmludGsoCisJCUxPQ0FMX1BSX0ZNVCAiIHR4X2FudDolZCByeF9hbnQ6JWQgcmV0OiVkIiwKKwkJTE9DQUxfUFJfQVJHLCBfX2VudHJ5LT50eF9hbnQsIF9fZW50cnktPnJ4X2FudCwgX19lbnRyeS0+cmV0CisJKQorKTsKKworVFJBQ0VfRVZFTlQoZHJ2X3JlbWFpbl9vbl9jaGFubmVsLAorCVRQX1BST1RPKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4sCisJCSBlbnVtIG5sODAyMTFfY2hhbm5lbF90eXBlIGNoYW50eXBlLCB1bnNpZ25lZCBpbnQgZHVyYXRpb24pLAorCisJVFBfQVJHUyhsb2NhbCwgY2hhbiwgY2hhbnR5cGUsIGR1cmF0aW9uKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCUxPQ0FMX0VOVFJZCisJCV9fZmllbGQoaW50LCBjZW50ZXJfZnJlcSkKKwkJX19maWVsZChpbnQsIGNoYW5uZWxfdHlwZSkKKwkJX19maWVsZCh1bnNpZ25lZCBpbnQsIGR1cmF0aW9uKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJTE9DQUxfQVNTSUdOOworCQlfX2VudHJ5LT5jZW50ZXJfZnJlcSA9IGNoYW4tPmNlbnRlcl9mcmVxOworCQlfX2VudHJ5LT5jaGFubmVsX3R5cGUgPSBjaGFudHlwZTsKKwkJX19lbnRyeS0+ZHVyYXRpb24gPSBkdXJhdGlvbjsKKwkpLAorCisJVFBfcHJpbnRrKAorCQlMT0NBTF9QUl9GTVQgIiBmcmVxOiVkTUh6IGR1cmF0aW9uOiVkbXMiLAorCQlMT0NBTF9QUl9BUkcsIF9fZW50cnktPmNlbnRlcl9mcmVxLCBfX2VudHJ5LT5kdXJhdGlvbgorCSkKKyk7CisKK1RSQUNFX0VWRU5UKGRydl9jYW5jZWxfcmVtYWluX29uX2NoYW5uZWwsCisJVFBfUFJPVE8oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpLAorCisJVFBfQVJHUyhsb2NhbCksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlMT0NBTF9FTlRSWQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJTE9DQUxfQVNTSUdOOworCSksCisKKwlUUF9wcmludGsoCisJCUxPQ0FMX1BSX0ZNVCwgTE9DQUxfUFJfQVJHCisJKQorKTsKKwogLyoKICAqIFRyYWNpbmcgZm9yIEFQSSBjYWxscyB0aGF0IGRyaXZlcnMgY2FsbC4KICAqLwpAQCAtMTA5OSw2ICsxMjE0LDQyIEBACiAJKQogKTsKIAorVFJBQ0VfRVZFTlQoYXBpX3JlYWR5X29uX2NoYW5uZWwsCisJVFBfUFJPVE8oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpLAorCisJVFBfQVJHUyhsb2NhbCksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlMT0NBTF9FTlRSWQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJTE9DQUxfQVNTSUdOOworCSksCisKKwlUUF9wcmludGsoCisJCUxPQ0FMX1BSX0ZNVCwgTE9DQUxfUFJfQVJHCisJKQorKTsKKworVFJBQ0VfRVZFTlQoYXBpX3JlbWFpbl9vbl9jaGFubmVsX2V4cGlyZWQsCisJVFBfUFJPVE8oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpLAorCisJVFBfQVJHUyhsb2NhbCksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlMT0NBTF9FTlRSWQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJTE9DQUxfQVNTSUdOOworCSksCisKKwlUUF9wcmludGsoCisJCUxPQ0FMX1BSX0ZNVCwgTE9DQUxfUFJfQVJHCisJKQorKTsKKwogLyoKICAqIFRyYWNpbmcgZm9yIGludGVybmFsIGZ1bmN0aW9ucwogICogKHdoaWNoIG1heSBhbHNvIGJlIGNhbGxlZCBpbiByZXNwb25zZSB0byBkcml2ZXIgY2FsbHMpCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWJzcy5jIGIvbmV0L21hYzgwMjExL2lic3MuYwppbmRleCAwNzdhOTNkLi41M2M3MDc3IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvaWJzcy5jCisrKyBiL25ldC9tYWM4MDIxMS9pYnNzLmMKQEAgLTkxOSw2ICs5MTksOCBAQAogCiAJc2RhdGEtPnUuaWJzcy5wcml2YWN5ID0gcGFyYW1zLT5wcml2YWN5OwogCXNkYXRhLT51Lmlic3MuYmFzaWNfcmF0ZXMgPSBwYXJhbXMtPmJhc2ljX3JhdGVzOworCW1lbWNweShzZGF0YS0+dmlmLmJzc19jb25mLm1jYXN0X3JhdGUsIHBhcmFtcy0+bWNhc3RfcmF0ZSwKKwkgICAgICAgc2l6ZW9mKHBhcmFtcy0+bWNhc3RfcmF0ZSkpOwogCiAJc2RhdGEtPnZpZi5ic3NfY29uZi5iZWFjb25faW50ID0gcGFyYW1zLT5iZWFjb25faW50ZXJ2YWw7CiAKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgKaW5kZXggYjgwYzM4Ni4uYzQ3ZDdjMCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgKKysrIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CiAjaW5jbHVkZSA8bmV0L2llZWU4MDIxMV9yYWRpb3RhcC5oPgogI2luY2x1ZGUgPG5ldC9jZmc4MDIxMS5oPgogI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgpAQCAtMTY3LDYgKzE2OCw3IEBACiAgKiBASUVFRTgwMjExX1JYX0ZSQUdNRU5URUQ6IGZyYWdtZW50ZWQgZnJhbWUKICAqIEBJRUVFODAyMTFfUlhfQU1TRFU6IGEtTVNEVSBwYWNrZXQKICAqIEBJRUVFODAyMTFfUlhfTUFMRk9STUVEX0FDVElPTl9GUk06IGFjdGlvbiBmcmFtZSBpcyBtYWxmb3JtZWQKKyAqIEBJRUVFODAyMTFfUlhfREVGRVJSRURfUkVMRUFTRTogZnJhbWUgd2FzIHN1YmplY3RlZCB0byByZWNlaXZlIHJlb3JkZXJpbmcKICAqCiAgKiBUaGVzZSBhcmUgcGVyLWZyYW1lIGZsYWdzIHRoYXQgYXJlIGF0dGFjaGVkIHRvIGEgZnJhbWUgaW4gdGhlCiAgKiBAcnhfZmxhZ3MgZmllbGQgb2YgJnN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzLgpAQCAtMTc3LDYgKzE3OSw3IEBACiAJSUVFRTgwMjExX1JYX0ZSQUdNRU5URUQJCQk9IEJJVCgyKSwKIAlJRUVFODAyMTFfUlhfQU1TRFUJCQk9IEJJVCgzKSwKIAlJRUVFODAyMTFfUlhfTUFMRk9STUVEX0FDVElPTl9GUk0JPSBCSVQoNCksCisJSUVFRTgwMjExX1JYX0RFRkVSUkVEX1JFTEVBU0UJCT0gQklUKDUpLAogfTsKIAogLyoqCkBAIC0yNjAsNiArMjYzLDcgQEAKIAlJRUVFODAyMTFfV09SS19BU1NPQ19CRUFDT05fV0FJVCwKIAlJRUVFODAyMTFfV09SS19BU1NPQywKIAlJRUVFODAyMTFfV09SS19SRU1BSU5fT05fQ0hBTk5FTCwKKwlJRUVFODAyMTFfV09SS19PRkZDSEFOTkVMX1RYLAogfTsKIAogLyoqCkBAIC0zMjAsNiArMzI0LDEwIEBACiAJCXN0cnVjdCB7CiAJCQl1MzIgZHVyYXRpb247CiAJCX0gcmVtYWluOworCQlzdHJ1Y3QgeworCQkJc3RydWN0IHNrX2J1ZmYgKmZyYW1lOworCQkJdTMyIHdhaXQ7CisJCX0gb2ZmY2hhbl90eDsKIAl9OwogCiAJaW50IGllX2xlbjsKQEAgLTM0OSw4ICszNTcsMTAgQEAKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgY2hzd2l0Y2hfd29yazsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgYmVhY29uX2Nvbm5lY3Rpb25fbG9zc193b3JrOwogCisJdW5zaWduZWQgbG9uZyBiZWFjb25fdGltZW91dDsKIAl1bnNpZ25lZCBsb25nIHByb2JlX3RpbWVvdXQ7CiAJaW50IHByb2JlX3NlbmRfY291bnQ7CisJYm9vbCBudWxsZnVuY19mYWlsZWQ7CiAKIAlzdHJ1Y3QgbXV0ZXggbXR4OwogCXN0cnVjdCBjZmc4MDIxMV9ic3MgKmFzc29jaWF0ZWQ7CkBAIC00NzcsNiArNDg3LDggQEAKIAlzdHJ1Y3QgbWVzaF9jb25maWcgbXNoY2ZnOwogCXUzMiBtZXNoX3NlcW51bTsKIAlib29sIGFjY2VwdGluZ19wbGlua3M7CisJY29uc3QgdTggKnZlbmRvcl9pZTsKKwl1OCB2ZW5kb3JfaWVfbGVuOwogfTsKIAogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNICkBAIC01NTAsNyArNTYyLDcgQEAKIAl1bnNpZ25lZCBpbnQgZnJhZ21lbnRfbmV4dDsKIAogCXN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXlzW05VTV9ERUZBVUxUX0tFWVMgKyBOVU1fREVGQVVMVF9NR01UX0tFWVNdOwotCXN0cnVjdCBpZWVlODAyMTFfa2V5ICpkZWZhdWx0X2tleTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2tleSAqZGVmYXVsdF91bmljYXN0X2tleSwgKmRlZmF1bHRfbXVsdGljYXN0X2tleTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2tleSAqZGVmYXVsdF9tZ210X2tleTsKIAogCXUxNiBzZXF1ZW5jZV9udW1iZXI7CkBAIC01NzgsOSArNTkwLDcgQEAKIAkJc3RydWN0IGllZWU4MDIxMV9pZl92bGFuIHZsYW47CiAJCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCBtZ2Q7CiAJCXN0cnVjdCBpZWVlODAyMTFfaWZfaWJzcyBpYnNzOwotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNICiAJCXN0cnVjdCBpZWVlODAyMTFfaWZfbWVzaCBtZXNoOwotI2VuZGlmCiAJCXUzMiBtbnRyX2ZsYWdzOwogCX0gdTsKIApAQCAtNTg4LDcgKzU5OCw4IEBACiAJc3RydWN0IHsKIAkJc3RydWN0IGRlbnRyeSAqZGlyOwogCQlzdHJ1Y3QgZGVudHJ5ICpzdWJkaXJfc3RhdGlvbnM7Ci0JCXN0cnVjdCBkZW50cnkgKmRlZmF1bHRfa2V5OworCQlzdHJ1Y3QgZGVudHJ5ICpkZWZhdWx0X3VuaWNhc3Rfa2V5OworCQlzdHJ1Y3QgZGVudHJ5ICpkZWZhdWx0X211bHRpY2FzdF9rZXk7CiAJCXN0cnVjdCBkZW50cnkgKmRlZmF1bHRfbWdtdF9rZXk7CiAJfSBkZWJ1Z2ZzOwogI2VuZGlmCkBAIC02MDIsMTkgKzYxMyw2IEBACiAJcmV0dXJuIGNvbnRhaW5lcl9vZihwLCBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhLCB2aWYpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQKLWllZWU4MDIxMV9zZGF0YV9zZXRfbWVzaF9pZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCSAgICB1OCBtZXNoX2lkX2xlbiwgdTggKm1lc2hfaWQpCi17Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0gKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX21lc2ggKmlmbXNoID0gJnNkYXRhLT51Lm1lc2g7Ci0JaWZtc2gtPm1lc2hfaWRfbGVuID0gbWVzaF9pZF9sZW47Ci0JbWVtY3B5KGlmbXNoLT5tZXNoX2lkLCBtZXNoX2lkLCBtZXNoX2lkX2xlbik7Ci0jZWxzZQotCVdBUk5fT04oMSk7Ci0jZW5kaWYKLX0KLQogZW51bSBzZGF0YV9xdWV1ZV90eXBlIHsKIAlJRUVFODAyMTFfU0RBVEFfUVVFVUVfVFlQRV9GUkFNRQk9IDAsCiAJSUVFRTgwMjExX1NEQVRBX1FVRVVFX0FHR19TVEFSVAkJPSAxLApAQCAtNjM1LDYgKzYzMywyMCBAQAogCUlFRUU4MDIxMV9RVUVVRV9TVE9QX1JFQVNPTl9TS0JfQURELAogfTsKIAorI2lmZGVmIENPTkZJR19NQUM4MDIxMV9MRURTCitzdHJ1Y3QgdHB0X2xlZF90cmlnZ2VyIHsKKwlzdHJ1Y3QgbGVkX3RyaWdnZXIgdHJpZzsKKwljaGFyIG5hbWVbMzJdOworCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHB0X2JsaW5rICpibGlua190YWJsZTsKKwl1bnNpZ25lZCBpbnQgYmxpbmtfdGFibGVfbGVuOworCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOworCXVuc2lnbmVkIGxvbmcgcHJldl90cmFmZmljOworCXVuc2lnbmVkIGxvbmcgdHhfYnl0ZXMsIHJ4X2J5dGVzOworCXVuc2lnbmVkIGludCBhY3RpdmUsIHdhbnQ7CisJYm9vbCBydW5uaW5nOworfTsKKyNlbmRpZgorCiAvKioKICAqIG1hYzgwMjExIHNjYW4gZmxhZ3MgLSBjdXJyZW50bHkgYWN0aXZlIHNjYW4gbW9kZQogICoKQEAgLTc2NCw2ICs3NzYsMTUgQEAKIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHNrYl9xdWV1ZTsKIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHNrYl9xdWV1ZV91bnJlbGlhYmxlOwogCisJLyoKKwkgKiBJbnRlcm5hbCBGSUZPIHF1ZXVlIHdoaWNoIGlzIHNoYXJlZCBiZXR3ZWVuIG11bHRpcGxlIHJ4IHBhdGgKKwkgKiBzdGFnZXMuIEl0cyBtYWluIHRhc2sgaXMgdG8gcHJvdmlkZSBhIHNlcmlhbGl6YXRpb24gbWVjaGFuaXNtLAorCSAqIHNvIGFsbCByeCBoYW5kbGVycyBjYW4gZW5qb3kgaGF2aW5nIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gdGhlaXIKKwkgKiBwcml2YXRlIGRhdGEgc3RydWN0dXJlcy4KKwkgKi8KKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHJ4X3NrYl9xdWV1ZTsKKwlib29sIHJ1bm5pbmdfcnhfaGFuZGxlcjsJLyogcHJvdGVjdGVkIGJ5IHJ4X3NrYl9xdWV1ZS5sb2NrICovCisKIAkvKiBTdGF0aW9uIGRhdGEgKi8KIAkvKgogCSAqIFRoZSBtdXRleCBvbmx5IHByb3RlY3RzIHRoZSBsaXN0IGFuZCBjb3VudGVyLApAQCAtODQzLDYgKzg2NCw3IEBACiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0xFRFMKIAlpbnQgdHhfbGVkX2NvdW50ZXIsIHJ4X2xlZF9jb3VudGVyOwogCXN0cnVjdCBsZWRfdHJpZ2dlciAqdHhfbGVkLCAqcnhfbGVkLCAqYXNzb2NfbGVkLCAqcmFkaW9fbGVkOworCXN0cnVjdCB0cHRfbGVkX3RyaWdnZXIgKnRwdF9sZWRfdHJpZ2dlcjsKIAljaGFyIHR4X2xlZF9uYW1lWzMyXSwgcnhfbGVkX25hbWVbMzJdLAogCSAgICAgYXNzb2NfbGVkX25hbWVbMzJdLCByYWRpb19sZWRfbmFtZVszMl07CiAjZW5kaWYKQEAgLTkyOSw2ICs5NTEsMTUgQEAKIAl9IGRlYnVnZnM7CiAjZW5kaWYKIAorCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqaHdfcm9jX2NoYW5uZWw7CisJc3RydWN0IG5ldF9kZXZpY2UgKmh3X3JvY19kZXY7CisJc3RydWN0IHNrX2J1ZmYgKmh3X3JvY19za2I7CisJc3RydWN0IHdvcmtfc3RydWN0IGh3X3JvY19zdGFydCwgaHdfcm9jX2RvbmU7CisJZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBod19yb2NfY2hhbm5lbF90eXBlOworCXVuc2lnbmVkIGludCBod19yb2NfZHVyYXRpb247CisJdTMyIGh3X3JvY19jb29raWU7CisJYm9vbCBod19yb2NfZm9yX3R4OworCiAJLyogZHVtbXkgbmV0ZGV2IGZvciB1c2Ugdy8gTkFQSSAqLwogCXN0cnVjdCBuZXRfZGV2aWNlIG5hcGlfZGV2OwogCkBAIC0xMTIwLDYgKzExNTEsNyBAQAogdm9pZCBpZWVlODAyMTFfb2ZmY2hhbm5lbF9zdG9wX3N0YXRpb24oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpOwogdm9pZCBpZWVlODAyMTFfb2ZmY2hhbm5lbF9yZXR1cm4oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCiAJCQkJIGJvb2wgZW5hYmxlX2JlYWNvbmluZyk7Cit2b2lkIGllZWU4MDIxMV9od19yb2Nfc2V0dXAoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpOwogCiAvKiBpbnRlcmZhY2UgaGFuZGxpbmcgKi8KIGludCBpZWVlODAyMTFfaWZhY2VfaW5pdCh2b2lkKTsKQEAgLTEyNjQsNiArMTI5Niw4IEBACiAJCQkgICAgIGludCBwb3dlcnNhdmUpOwogdm9pZCBpZWVlODAyMTFfc3RhX3J4X25vdGlmeShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcik7Cit2b2lkIGllZWU4MDIxMV9zdGFfdHhfbm90aWZ5KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLCBib29sIGFjayk7CiB2b2lkIGllZWU4MDIxMV9iZWFjb25fY29ubmVjdGlvbl9sb3NzX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIAogdm9pZCBpZWVlODAyMTFfd2FrZV9xdWV1ZXNfYnlfcmVhc29uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LApAQCAtMTI3OCw2ICsxMzEyLDkgQEAKIAkJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGludCBpZWVlODAyMTFfYWRkX3BlbmRpbmdfc2ticyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKIAkJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpza2JzKTsKK2ludCBpZWVlODAyMTFfYWRkX3BlbmRpbmdfc2tic19mbihzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJCQkgIHN0cnVjdCBza19idWZmX2hlYWQgKnNrYnMsCisJCQkJICB2b2lkICgqZm4pKHZvaWQgKmRhdGEpLCB2b2lkICpkYXRhKTsKIAogdm9pZCBpZWVlODAyMTFfc2VuZF9hdXRoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJIHUxNiB0cmFuc2FjdGlvbiwgdTE2IGF1dGhfYWxnLApAQCAtMTI4Nyw2ICsxMzI0LDEwIEBACiAJCQkgICAgIGNvbnN0IHU4ICppZSwgc2l6ZV90IGllX2xlbiwKIAkJCSAgICAgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kLCB1MzIgcmF0ZV9tYXNrLAogCQkJICAgICB1OCBjaGFubmVsKTsKK3N0cnVjdCBza19idWZmICppZWVlODAyMTFfYnVpbGRfcHJvYmVfcmVxKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCQkgIHU4ICpkc3QsCisJCQkJCSAgY29uc3QgdTggKnNzaWQsIHNpemVfdCBzc2lkX2xlbiwKKwkJCQkJICBjb25zdCB1OCAqaWUsIHNpemVfdCBpZV9sZW4pOwogdm9pZCBpZWVlODAyMTFfc2VuZF9wcm9iZV9yZXEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHU4ICpkc3QsCiAJCQkgICAgICBjb25zdCB1OCAqc3NpZCwgc2l6ZV90IHNzaWRfbGVuLAogCQkJICAgICAgY29uc3QgdTggKmllLCBzaXplX3QgaWVfbGVuKTsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZmFjZS5jIGIvbmV0L21hYzgwMjExL2lmYWNlLmMKaW5kZXggN2FhODU1OS4uOGFjYmE0NSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2lmYWNlLmMKKysrIGIvbmV0L21hYzgwMjExL2lmYWNlLmMKQEAgLTE5NywxMSArMTk3LDYgQEAKIAkJc2RhdGEtPmJzcyA9ICZzZGF0YS0+dS5hcDsKIAkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOgotCQlpZiAoIWllZWU4MDIxMV92aWZfaXNfbWVzaCgmc2RhdGEtPnZpZikpCi0JCQlicmVhazsKLQkJLyogbWVzaCBpZmFjZXMgbXVzdCBzZXQgYWxsbXVsdGkgdG8gZm9yd2FyZCBtY2FzdCB0cmFmZmljICovCi0JCWF0b21pY19pbmMoJmxvY2FsLT5pZmZfYWxsbXVsdGlzKTsKLQkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgogCWNhc2UgTkw4MDIxMV9JRlRZUEVfTU9OSVRPUjoKIAljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgpAQCAtMjI1LDYgKzIyMCw4IEBACiAJCS8qIHdlJ3JlIGJyb3VnaHQgdXAsIGV2ZXJ5dGhpbmcgY2hhbmdlcyAqLwogCQlod19yZWNvbmZfZmxhZ3MgPSB+MDsKIAkJaWVlZTgwMjExX2xlZF9yYWRpbyhsb2NhbCwgdHJ1ZSk7CisJCWllZWU4MDIxMV9tb2RfdHB0X2xlZF90cmlnKGxvY2FsLAorCQkJCQkgICBJRUVFODAyMTFfVFBUX0xFRFRSSUdfRkxfUkFESU8sIDApOwogCX0KIAogCS8qCkBAIC0yNzMsMTIgKzI3MCw3IEBACiAJCQkJZ290byBlcnJfc3RvcDsKIAkJfQogCi0JCWlmIChpZWVlODAyMTFfdmlmX2lzX21lc2goJnNkYXRhLT52aWYpKSB7Ci0JCQlsb2NhbC0+ZmlmX290aGVyX2JzcysrOwotCQkJaWVlZTgwMjExX2NvbmZpZ3VyZV9maWx0ZXIobG9jYWwpOwotCi0JCQlpZWVlODAyMTFfc3RhcnRfbWVzaChzZGF0YSk7Ci0JCX0gZWxzZSBpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7CisJCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApIHsKIAkJCWxvY2FsLT5maWZfcHNwb2xsKys7CiAJCQlsb2NhbC0+ZmlmX3Byb2JlX3JlcSsrOwogCkBAIC01MDMsMTggKzQ5NSw2IEBACiAJCWllZWU4MDIxMV9hZGp1c3RfbW9uaXRvcl9mbGFncyhzZGF0YSwgLTEpOwogCQlpZWVlODAyMTFfY29uZmlndXJlX2ZpbHRlcihsb2NhbCk7CiAJCWJyZWFrOwotCWNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDoKLQkJaWYgKGllZWU4MDIxMV92aWZfaXNfbWVzaCgmc2RhdGEtPnZpZikpIHsKLQkJCS8qIG90aGVyX2JzcyBhbmQgYWxsbXVsdGkgYXJlIGFsd2F5cyBzZXQgb24gbWVzaAotCQkJICogaWZhY2VzICovCi0JCQlsb2NhbC0+ZmlmX290aGVyX2Jzcy0tOwotCQkJYXRvbWljX2RlYygmbG9jYWwtPmlmZl9hbGxtdWx0aXMpOwotCi0JCQlpZWVlODAyMTFfY29uZmlndXJlX2ZpbHRlcihsb2NhbCk7Ci0KLQkJCWllZWU4MDIxMV9zdG9wX21lc2goc2RhdGEpOwotCQl9Ci0JCS8qIGZhbGwgdGhyb3VnaCAqLwogCWRlZmF1bHQ6CiAJCWZsdXNoX3dvcmsoJnNkYXRhLT53b3JrKTsKIAkJLyoKQEAgLTEyMDQsMTIgKzExODQsNiBAQAogCWlmIChyZXQpCiAJCWdvdG8gZmFpbDsKIAotCWlmIChpZWVlODAyMTFfdmlmX2lzX21lc2goJnNkYXRhLT52aWYpICYmCi0JICAgIHBhcmFtcyAmJiBwYXJhbXMtPm1lc2hfaWRfbGVuKQotCQlpZWVlODAyMTFfc2RhdGFfc2V0X21lc2hfaWQoc2RhdGEsCi0JCQkJCSAgICBwYXJhbXMtPm1lc2hfaWRfbGVuLAotCQkJCQkgICAgcGFyYW1zLT5tZXNoX2lkKTsKLQogCW11dGV4X2xvY2soJmxvY2FsLT5pZmxpc3RfbXR4KTsKIAlsaXN0X2FkZF90YWlsX3JjdSgmc2RhdGEtPmxpc3QsICZsb2NhbC0+aW50ZXJmYWNlcyk7CiAJbXV0ZXhfdW5sb2NrKCZsb2NhbC0+aWZsaXN0X210eCk7CkBAIC0xMjkwLDggKzEyNjQsOSBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwogCWludCBjb3VudCA9IDA7Ci0JYm9vbCB3b3JraW5nID0gZmFsc2UsIHNjYW5uaW5nID0gZmFsc2U7CisJYm9vbCB3b3JraW5nID0gZmFsc2UsIHNjYW5uaW5nID0gZmFsc2UsIGh3X3JvYyA9IGZhbHNlOwogCXN0cnVjdCBpZWVlODAyMTFfd29yayAqd2s7CisJdW5zaWduZWQgaW50IGxlZF90cmlnX3N0YXJ0ID0gMCwgbGVkX3RyaWdfc3RvcCA9IDA7CiAKICNpZmRlZiBDT05GSUdfUFJPVkVfTE9DS0lORwogCVdBUk5fT04oZGVidWdfbG9ja3MgJiYgIWxvY2tkZXBfcnRubF9pc19oZWxkKCkgJiYKQEAgLTEzMzMsNiArMTMwOCw5IEBACiAJCWxvY2FsLT5zY2FuX3NkYXRhLT52aWYuYnNzX2NvbmYuaWRsZSA9IGZhbHNlOwogCX0KIAorCWlmIChsb2NhbC0+aHdfcm9jX2NoYW5uZWwpCisJCWh3X3JvYyA9IHRydWU7CisKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpIHsKIAkJaWYgKHNkYXRhLT5vbGRfaWRsZSA9PSBzZGF0YS0+dmlmLmJzc19jb25mLmlkbGUpCiAJCQljb250aW51ZTsKQEAgLTEzNDEsNiArMTMxOSwyMCBAQAogCQlpZWVlODAyMTFfYnNzX2luZm9fY2hhbmdlX25vdGlmeShzZGF0YSwgQlNTX0NIQU5HRURfSURMRSk7CiAJfQogCisJaWYgKHdvcmtpbmcgfHwgc2Nhbm5pbmcgfHwgaHdfcm9jKQorCQlsZWRfdHJpZ19zdGFydCB8PSBJRUVFODAyMTFfVFBUX0xFRFRSSUdfRkxfV09SSzsKKwllbHNlCisJCWxlZF90cmlnX3N0b3AgfD0gSUVFRTgwMjExX1RQVF9MRURUUklHX0ZMX1dPUks7CisKKwlpZiAoY291bnQpCisJCWxlZF90cmlnX3N0YXJ0IHw9IElFRUU4MDIxMV9UUFRfTEVEVFJJR19GTF9DT05ORUNURUQ7CisJZWxzZQorCQlsZWRfdHJpZ19zdG9wIHw9IElFRUU4MDIxMV9UUFRfTEVEVFJJR19GTF9DT05ORUNURUQ7CisKKwlpZWVlODAyMTFfbW9kX3RwdF9sZWRfdHJpZyhsb2NhbCwgbGVkX3RyaWdfc3RhcnQsIGxlZF90cmlnX3N0b3ApOworCisJaWYgKGh3X3JvYykKKwkJcmV0dXJuIGllZWU4MDIxMV9pZGxlX29mZihsb2NhbCwgImh3IHJlbWFpbi1vbi1jaGFubmVsIik7CiAJaWYgKHdvcmtpbmcpCiAJCXJldHVybiBpZWVlODAyMTFfaWRsZV9vZmYobG9jYWwsICJ3b3JraW5nIik7CiAJaWYgKHNjYW5uaW5nKQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2tleS5jIGIvbmV0L21hYzgwMjExL2tleS5jCmluZGV4IGNjZDY3NmIuLjhjMDI0NjkgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9rZXkuYworKysgYi9uZXQvbWFjODAyMTEva2V5LmMKQEAgLTMwLDE5ICszMCwyMCBAQAogICoga2V5cyBhbmQgcGVyLXN0YXRpb24ga2V5cy4gU2luY2UgZWFjaCBzdGF0aW9uIGJlbG9uZ3MgdG8gYW4gaW50ZXJmYWNlLAogICogZWFjaCBzdGF0aW9uIGtleSBhbHNvIGJlbG9uZ3MgdG8gdGhhdCBpbnRlcmZhY2UuCiAgKgotICogSGFyZHdhcmUgYWNjZWxlcmF0aW9uIGlzIGRvbmUgb24gYSBiZXN0LWVmZm9ydCBiYXNpcywgZm9yIGVhY2gga2V5Ci0gKiB0aGF0IGlzIGVsaWdpYmxlIHRoZSBoYXJkd2FyZSBpcyBhc2tlZCB0byBlbmFibGUgdGhhdCBrZXkgYnV0IGlmCi0gKiBpdCBjYW5ub3QgZG8gdGhhdCB0aGV5IGtleSBpcyBzaW1wbHkga2VwdCBmb3Igc29mdHdhcmUgZW5jcnlwdGlvbi4KLSAqIFRoZXJlIGlzIGN1cnJlbnRseSBubyB3YXkgb2Yga25vd2luZyB0aGlzIGV4Y2VwdCBieSBsb29raW5nIGludG8KLSAqIGRlYnVnZnMuCisgKiBIYXJkd2FyZSBhY2NlbGVyYXRpb24gaXMgZG9uZSBvbiBhIGJlc3QtZWZmb3J0IGJhc2lzIGZvciBhbGdvcml0aG1zCisgKiB0aGF0IGFyZSBpbXBsZW1lbnRlZCBpbiBzb2Z0d2FyZSwgIGZvciBlYWNoIGtleSB0aGUgaGFyZHdhcmUgaXMgYXNrZWQKKyAqIHRvIGVuYWJsZSB0aGF0IGtleSBmb3Igb2ZmbG9hZGluZyBidXQgaWYgaXQgY2Fubm90IGRvIHRoYXQgdGhlIGtleSBpcworICogc2ltcGx5IGtlcHQgZm9yIHNvZnR3YXJlIGVuY3J5cHRpb24gKHVubGVzcyBpdCBpcyBmb3IgYW4gYWxnb3JpdGhtCisgKiB0aGF0IGlzbid0IGltcGxlbWVudGVkIGluIHNvZnR3YXJlKS4KKyAqIFRoZXJlIGlzIGN1cnJlbnRseSBubyB3YXkgb2Yga25vd2luZyB3aGV0aGVyIGEga2V5IGlzIGhhbmRsZWQgaW4gU1cKKyAqIG9yIEhXIGV4Y2VwdCBieSBsb29raW5nIGludG8gZGVidWdmcy4KICAqCi0gKiBBbGwga2V5IG9wZXJhdGlvbnMgYXJlIHByb3RlY3RlZCBpbnRlcm5hbGx5LgotICoKLSAqIFdpdGhpbiBtYWM4MDIxMSwga2V5IHJlZmVyZW5jZXMgYXJlLCBqdXN0IGFzIFNUQSBzdHJ1Y3R1cmUgcmVmZXJlbmNlcywKLSAqIHByb3RlY3RlZCBieSBSQ1UuIE5vdGUsIGhvd2V2ZXIsIHRoYXQgc29tZSB0aGluZ3MgYXJlIHVucHJvdGVjdGVkLAotICogbmFtZWx5IHRoZSBrZXktPnN0YSBkZXJlZmVyZW5jZXMgd2l0aGluIHRoZSBoYXJkd2FyZSBhY2NlbGVyYXRpb24KLSAqIGZ1bmN0aW9ucy4gVGhpcyBtZWFucyB0aGF0IHN0YV9pbmZvX2Rlc3Ryb3koKSBtdXN0IHJlbW92ZSB0aGUga2V5Ci0gKiB3aGljaCB3YWl0cyBmb3IgYW4gUkNVIGdyYWNlIHBlcmlvZC4KKyAqIEFsbCBrZXkgbWFuYWdlbWVudCBpcyBpbnRlcm5hbGx5IHByb3RlY3RlZCBieSBhIG11dGV4LiBXaXRoaW4gYWxsCisgKiBvdGhlciBwYXJ0cyBvZiBtYWM4MDIxMSwga2V5IHJlZmVyZW5jZXMgYXJlLCBqdXN0IGFzIFNUQSBzdHJ1Y3R1cmUKKyAqIHJlZmVyZW5jZXMsIHByb3RlY3RlZCBieSBSQ1UuIE5vdGUsIGhvd2V2ZXIsIHRoYXQgc29tZSB0aGluZ3MgYXJlCisgKiB1bnByb3RlY3RlZCwgbmFtZWx5IHRoZSBrZXktPnN0YSBkZXJlZmVyZW5jZXMgd2l0aGluIHRoZSBoYXJkd2FyZQorICogYWNjZWxlcmF0aW9uIGZ1bmN0aW9ucy4gVGhpcyBtZWFucyB0aGF0IHN0YV9pbmZvX2Rlc3Ryb3koKSBtdXN0CisgKiByZW1vdmUgdGhlIGtleSB3aGljaCB3YWl0cyBmb3IgYW4gUkNVIGdyYWNlIHBlcmlvZC4KICAqLwogCiBzdGF0aWMgY29uc3QgdTggYmNhc3RfYWRkcltFVEhfQUxFTl0gPSB7IDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYgfTsKQEAgLTg0LDEwICs4NSwxNyBAQAogCQlnb3RvIG91dF91bnN1cHBvcnRlZDsKIAogCXNkYXRhID0ga2V5LT5zZGF0YTsKLQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4pCisJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOKSB7CisJCS8qCisJCSAqIFRoZSBkcml2ZXIgZG9lc24ndCBrbm93IGFueXRoaW5nIGFib3V0IFZMQU4gaW50ZXJmYWNlcy4KKwkJICogSGVuY2UsIGRvbid0IHNlbmQgR1RLcyBmb3IgVkxBTiBpbnRlcmZhY2VzIHRvIHRoZSBkcml2ZXIuCisJCSAqLworCQlpZiAoIShrZXktPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfS0VZX0ZMQUdfUEFJUldJU0UpKQorCQkJZ290byBvdXRfdW5zdXBwb3J0ZWQ7CiAJCXNkYXRhID0gY29udGFpbmVyX29mKHNkYXRhLT5ic3MsCiAJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhLAogCQkJCSAgICAgdS5hcCk7CisJfQogCiAJcmV0ID0gZHJ2X3NldF9rZXkoa2V5LT5sb2NhbCwgU0VUX0tFWSwgc2RhdGEsIHN0YSwgJmtleS0+Y29uZik7CiAKQEAgLTE3MSw3ICsxNzksNyBAQAogRVhQT1JUX1NZTUJPTF9HUEwoaWVlZTgwMjExX2tleV9yZW1vdmVkKTsKIAogc3RhdGljIHZvaWQgX19pZWVlODAyMTFfc2V0X2RlZmF1bHRfa2V5KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCQlpbnQgaWR4KQorCQkJCQlpbnQgaWR4LCBib29sIHVuaSwgYm9vbCBtdWx0aSkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5ID0gTlVMTDsKIApAQCAtMTgwLDE4ICsxODgsMTkgQEAKIAlpZiAoaWR4ID49IDAgJiYgaWR4IDwgTlVNX0RFRkFVTFRfS0VZUykKIAkJa2V5ID0gc2RhdGEtPmtleXNbaWR4XTsKIAotCXJjdV9hc3NpZ25fcG9pbnRlcihzZGF0YS0+ZGVmYXVsdF9rZXksIGtleSk7CisJaWYgKHVuaSkKKwkJcmN1X2Fzc2lnbl9wb2ludGVyKHNkYXRhLT5kZWZhdWx0X3VuaWNhc3Rfa2V5LCBrZXkpOworCWlmIChtdWx0aSkKKwkJcmN1X2Fzc2lnbl9wb2ludGVyKHNkYXRhLT5kZWZhdWx0X211bHRpY2FzdF9rZXksIGtleSk7CiAKLQlpZiAoa2V5KSB7Ci0JCWllZWU4MDIxMV9kZWJ1Z2ZzX2tleV9yZW1vdmVfZGVmYXVsdChrZXktPnNkYXRhKTsKLQkJaWVlZTgwMjExX2RlYnVnZnNfa2V5X2FkZF9kZWZhdWx0KGtleS0+c2RhdGEpOwotCX0KKwlpZWVlODAyMTFfZGVidWdmc19rZXlfdXBkYXRlX2RlZmF1bHQoc2RhdGEpOwogfQogCi12b2lkIGllZWU4MDIxMV9zZXRfZGVmYXVsdF9rZXkoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGludCBpZHgpCit2b2lkIGllZWU4MDIxMV9zZXRfZGVmYXVsdF9rZXkoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGludCBpZHgsCisJCQkgICAgICAgYm9vbCB1bmksIGJvb2wgbXVsdGkpCiB7CiAJbXV0ZXhfbG9jaygmc2RhdGEtPmxvY2FsLT5rZXlfbXR4KTsKLQlfX2llZWU4MDIxMV9zZXRfZGVmYXVsdF9rZXkoc2RhdGEsIGlkeCk7CisJX19pZWVlODAyMTFfc2V0X2RlZmF1bHRfa2V5KHNkYXRhLCBpZHgsIHVuaSwgbXVsdGkpOwogCW11dGV4X3VubG9jaygmc2RhdGEtPmxvY2FsLT5rZXlfbXR4KTsKIH0KIApAQCAtMjA4LDEwICsyMTcsNyBAQAogCiAJcmN1X2Fzc2lnbl9wb2ludGVyKHNkYXRhLT5kZWZhdWx0X21nbXRfa2V5LCBrZXkpOwogCi0JaWYgKGtleSkgewotCQlpZWVlODAyMTFfZGVidWdmc19rZXlfcmVtb3ZlX21nbXRfZGVmYXVsdChrZXktPnNkYXRhKTsKLQkJaWVlZTgwMjExX2RlYnVnZnNfa2V5X2FkZF9tZ210X2RlZmF1bHQoa2V5LT5zZGF0YSk7Ci0JfQorCWllZWU4MDIxMV9kZWJ1Z2ZzX2tleV91cGRhdGVfZGVmYXVsdChzZGF0YSk7CiB9CiAKIHZvaWQgaWVlZTgwMjExX3NldF9kZWZhdWx0X21nbXRfa2V5KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLApAQCAtMjI5LDcgKzIzNSw4IEBACiAJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfa2V5ICpvbGQsCiAJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfa2V5ICpuZXcpCiB7Ci0JaW50IGlkeCwgZGVma2V5LCBkZWZtZ210a2V5OworCWludCBpZHg7CisJYm9vbCBkZWZ1bmlrZXksIGRlZm11bHRpa2V5LCBkZWZtZ210a2V5OwogCiAJaWYgKG5ldykKIAkJbGlzdF9hZGQoJm5ldy0+bGlzdCwgJnNkYXRhLT5rZXlfbGlzdCk7CkBAIC0yNTAsMjkgKzI1NywzMSBAQAogCQllbHNlCiAJCQlpZHggPSBuZXctPmNvbmYua2V5aWR4OwogCi0JCWRlZmtleSA9IG9sZCAmJiBzZGF0YS0+ZGVmYXVsdF9rZXkgPT0gb2xkOworCQlkZWZ1bmlrZXkgPSBvbGQgJiYgc2RhdGEtPmRlZmF1bHRfdW5pY2FzdF9rZXkgPT0gb2xkOworCQlkZWZtdWx0aWtleSA9IG9sZCAmJiBzZGF0YS0+ZGVmYXVsdF9tdWx0aWNhc3Rfa2V5ID09IG9sZDsKIAkJZGVmbWdtdGtleSA9IG9sZCAmJiBzZGF0YS0+ZGVmYXVsdF9tZ210X2tleSA9PSBvbGQ7CiAKLQkJaWYgKGRlZmtleSAmJiAhbmV3KQotCQkJX19pZWVlODAyMTFfc2V0X2RlZmF1bHRfa2V5KHNkYXRhLCAtMSk7CisJCWlmIChkZWZ1bmlrZXkgJiYgIW5ldykKKwkJCV9faWVlZTgwMjExX3NldF9kZWZhdWx0X2tleShzZGF0YSwgLTEsIHRydWUsIGZhbHNlKTsKKwkJaWYgKGRlZm11bHRpa2V5ICYmICFuZXcpCisJCQlfX2llZWU4MDIxMV9zZXRfZGVmYXVsdF9rZXkoc2RhdGEsIC0xLCBmYWxzZSwgdHJ1ZSk7CiAJCWlmIChkZWZtZ210a2V5ICYmICFuZXcpCiAJCQlfX2llZWU4MDIxMV9zZXRfZGVmYXVsdF9tZ210X2tleShzZGF0YSwgLTEpOwogCiAJCXJjdV9hc3NpZ25fcG9pbnRlcihzZGF0YS0+a2V5c1tpZHhdLCBuZXcpOwotCQlpZiAoZGVma2V5ICYmIG5ldykKLQkJCV9faWVlZTgwMjExX3NldF9kZWZhdWx0X2tleShzZGF0YSwgbmV3LT5jb25mLmtleWlkeCk7CisJCWlmIChkZWZ1bmlrZXkgJiYgbmV3KQorCQkJX19pZWVlODAyMTFfc2V0X2RlZmF1bHRfa2V5KHNkYXRhLCBuZXctPmNvbmYua2V5aWR4LAorCQkJCQkJICAgIHRydWUsIGZhbHNlKTsKKwkJaWYgKGRlZm11bHRpa2V5ICYmIG5ldykKKwkJCV9faWVlZTgwMjExX3NldF9kZWZhdWx0X2tleShzZGF0YSwgbmV3LT5jb25mLmtleWlkeCwKKwkJCQkJCSAgICBmYWxzZSwgdHJ1ZSk7CiAJCWlmIChkZWZtZ210a2V5ICYmIG5ldykKIAkJCV9faWVlZTgwMjExX3NldF9kZWZhdWx0X21nbXRfa2V5KHNkYXRhLAogCQkJCQkJCSBuZXctPmNvbmYua2V5aWR4KTsKIAl9CiAKLQlpZiAob2xkKSB7Ci0JCS8qCi0JCSAqIFdlJ2xsIHVzZSBhbiBlbXB0eSBsaXN0IHRvIGluZGljYXRlIHRoYXQgdGhlIGtleQotCQkgKiBoYXMgYWxyZWFkeSBiZWVuIHJlbW92ZWQuCi0JCSAqLwotCQlsaXN0X2RlbF9pbml0KCZvbGQtPmxpc3QpOwotCX0KKwlpZiAob2xkKQorCQlsaXN0X2RlbCgmb2xkLT5saXN0KTsKIH0KIAogc3RydWN0IGllZWU4MDIxMV9rZXkgKmllZWU4MDIxMV9rZXlfYWxsb2ModTMyIGNpcGhlciwgaW50IGlkeCwgc2l6ZV90IGtleV9sZW4sCkBAIC0zNjYsNiArMzc1LDEyIEBACiAJaWYgKCFrZXkpCiAJCXJldHVybjsKIAorCS8qCisJICogU3luY2hyb25pemUgc28gdGhlIFRYIHBhdGggY2FuIG5vIGxvbmdlciBiZSB1c2luZworCSAqIHRoaXMga2V5IGJlZm9yZSB3ZSBmcmVlL3JlbW92ZSBpdC4KKwkgKi8KKwlzeW5jaHJvbml6ZV9yY3UoKTsKKwogCWlmIChrZXktPmxvY2FsKQogCQlpZWVlODAyMTFfa2V5X2Rpc2FibGVfaHdfYWNjZWwoa2V5KTsKIApAQCAtNDA3LDggKzQyMiw4IEBACiAJCQlzdHJ1Y3Qgc3RhX2luZm8gKmFwOwogCiAJCQkvKgotCQkJICogV2UncmUgZ2V0dGluZyBhIHN0YSBwb2ludGVyIGluLAotCQkJICogc28gbXVzdCBiZSB1bmRlciBSQ1UgcmVhZCBsb2NrLgorCQkJICogV2UncmUgZ2V0dGluZyBhIHN0YSBwb2ludGVyIGluLCBzbyBtdXN0IGJlIHVuZGVyCisJCQkgKiBhcHByb3ByaWF0ZSBsb2NraW5nIGZvciBzdGFfaW5mb19nZXQoKS4KIAkJCSAqLwogCiAJCQkvKiBzYW1lIGhlcmUsIHRoZSBBUCBjb3VsZCBiZSB1c2luZyBRb1MgKi8KQEAgLTUwMiwxMSArNTE3LDEyIEBACiAKIAltdXRleF9sb2NrKCZzZGF0YS0+bG9jYWwtPmtleV9tdHgpOwogCi0JaWVlZTgwMjExX2RlYnVnZnNfa2V5X3JlbW92ZV9kZWZhdWx0KHNkYXRhKTsKIAlpZWVlODAyMTFfZGVidWdmc19rZXlfcmVtb3ZlX21nbXRfZGVmYXVsdChzZGF0YSk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoa2V5LCB0bXAsICZzZGF0YS0+a2V5X2xpc3QsIGxpc3QpCiAJCV9faWVlZTgwMjExX2tleV9mcmVlKGtleSk7CiAKKwlpZWVlODAyMTFfZGVidWdmc19rZXlfdXBkYXRlX2RlZmF1bHQoc2RhdGEpOworCiAJbXV0ZXhfdW5sb2NrKCZzZGF0YS0+bG9jYWwtPmtleV9tdHgpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2tleS5oIGIvbmV0L21hYzgwMjExL2tleS5oCmluZGV4IDBkYjFjMGYuLjgxMDZhYTEgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9rZXkuaAorKysgYi9uZXQvbWFjODAyMTEva2V5LmgKQEAgLTEzOCw3ICsxMzgsOCBAQAogCQkJCSAgICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSk7CiB2b2lkIGllZWU4MDIxMV9rZXlfZnJlZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKIAkJCXN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXkpOwotdm9pZCBpZWVlODAyMTFfc2V0X2RlZmF1bHRfa2V5KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBpbnQgaWR4KTsKK3ZvaWQgaWVlZTgwMjExX3NldF9kZWZhdWx0X2tleShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgaW50IGlkeCwKKwkJCSAgICAgICBib29sIHVuaSwgYm9vbCBtdWx0aSk7CiB2b2lkIGllZWU4MDIxMV9zZXRfZGVmYXVsdF9tZ210X2tleShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJCQkgICAgaW50IGlkeCk7CiB2b2lkIGllZWU4MDIxMV9mcmVlX2tleXMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2xlZC5jIGIvbmV0L21hYzgwMjExL2xlZC5jCmluZGV4IDA2M2FhZDkuLjE0NTkwMzMgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9sZWQuYworKysgYi9uZXQvbWFjODAyMTEvbGVkLmMKQEAgLTU0LDEyICs1NCwyMiBAQAogCQlsZWRfdHJpZ2dlcl9ldmVudChsb2NhbC0+cmFkaW9fbGVkLCBMRURfT0ZGKTsKIH0KIAordm9pZCBpZWVlODAyMTFfbGVkX25hbWVzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKQoreworCXNucHJpbnRmKGxvY2FsLT5yeF9sZWRfbmFtZSwgc2l6ZW9mKGxvY2FsLT5yeF9sZWRfbmFtZSksCisJCSAiJXNyeCIsIHdpcGh5X25hbWUobG9jYWwtPmh3LndpcGh5KSk7CisJc25wcmludGYobG9jYWwtPnR4X2xlZF9uYW1lLCBzaXplb2YobG9jYWwtPnR4X2xlZF9uYW1lKSwKKwkJICIlc3R4Iiwgd2lwaHlfbmFtZShsb2NhbC0+aHcud2lwaHkpKTsKKwlzbnByaW50Zihsb2NhbC0+YXNzb2NfbGVkX25hbWUsIHNpemVvZihsb2NhbC0+YXNzb2NfbGVkX25hbWUpLAorCQkgIiVzYXNzb2MiLCB3aXBoeV9uYW1lKGxvY2FsLT5ody53aXBoeSkpOworCXNucHJpbnRmKGxvY2FsLT5yYWRpb19sZWRfbmFtZSwgc2l6ZW9mKGxvY2FsLT5yYWRpb19sZWRfbmFtZSksCisJCSAiJXNyYWRpbyIsIHdpcGh5X25hbWUobG9jYWwtPmh3LndpcGh5KSk7Cit9CisKIHZvaWQgaWVlZTgwMjExX2xlZF9pbml0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKQogewogCWxvY2FsLT5yeF9sZWQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbGVkX3RyaWdnZXIpLCBHRlBfS0VSTkVMKTsKIAlpZiAobG9jYWwtPnJ4X2xlZCkgewotCQlzbnByaW50Zihsb2NhbC0+cnhfbGVkX25hbWUsIHNpemVvZihsb2NhbC0+cnhfbGVkX25hbWUpLAotCQkJICIlc3J4Iiwgd2lwaHlfbmFtZShsb2NhbC0+aHcud2lwaHkpKTsKIAkJbG9jYWwtPnJ4X2xlZC0+bmFtZSA9IGxvY2FsLT5yeF9sZWRfbmFtZTsKIAkJaWYgKGxlZF90cmlnZ2VyX3JlZ2lzdGVyKGxvY2FsLT5yeF9sZWQpKSB7CiAJCQlrZnJlZShsb2NhbC0+cnhfbGVkKTsKQEAgLTY5LDggKzc5LDYgQEAKIAogCWxvY2FsLT50eF9sZWQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbGVkX3RyaWdnZXIpLCBHRlBfS0VSTkVMKTsKIAlpZiAobG9jYWwtPnR4X2xlZCkgewotCQlzbnByaW50Zihsb2NhbC0+dHhfbGVkX25hbWUsIHNpemVvZihsb2NhbC0+dHhfbGVkX25hbWUpLAotCQkJICIlc3R4Iiwgd2lwaHlfbmFtZShsb2NhbC0+aHcud2lwaHkpKTsKIAkJbG9jYWwtPnR4X2xlZC0+bmFtZSA9IGxvY2FsLT50eF9sZWRfbmFtZTsKIAkJaWYgKGxlZF90cmlnZ2VyX3JlZ2lzdGVyKGxvY2FsLT50eF9sZWQpKSB7CiAJCQlrZnJlZShsb2NhbC0+dHhfbGVkKTsKQEAgLTgwLDggKzg4LDYgQEAKIAogCWxvY2FsLT5hc3NvY19sZWQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbGVkX3RyaWdnZXIpLCBHRlBfS0VSTkVMKTsKIAlpZiAobG9jYWwtPmFzc29jX2xlZCkgewotCQlzbnByaW50Zihsb2NhbC0+YXNzb2NfbGVkX25hbWUsIHNpemVvZihsb2NhbC0+YXNzb2NfbGVkX25hbWUpLAotCQkJICIlc2Fzc29jIiwgd2lwaHlfbmFtZShsb2NhbC0+aHcud2lwaHkpKTsKIAkJbG9jYWwtPmFzc29jX2xlZC0+bmFtZSA9IGxvY2FsLT5hc3NvY19sZWRfbmFtZTsKIAkJaWYgKGxlZF90cmlnZ2VyX3JlZ2lzdGVyKGxvY2FsLT5hc3NvY19sZWQpKSB7CiAJCQlrZnJlZShsb2NhbC0+YXNzb2NfbGVkKTsKQEAgLTkxLDE0ICs5NywxOSBAQAogCiAJbG9jYWwtPnJhZGlvX2xlZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBsZWRfdHJpZ2dlciksIEdGUF9LRVJORUwpOwogCWlmIChsb2NhbC0+cmFkaW9fbGVkKSB7Ci0JCXNucHJpbnRmKGxvY2FsLT5yYWRpb19sZWRfbmFtZSwgc2l6ZW9mKGxvY2FsLT5yYWRpb19sZWRfbmFtZSksCi0JCQkgIiVzcmFkaW8iLCB3aXBoeV9uYW1lKGxvY2FsLT5ody53aXBoeSkpOwogCQlsb2NhbC0+cmFkaW9fbGVkLT5uYW1lID0gbG9jYWwtPnJhZGlvX2xlZF9uYW1lOwogCQlpZiAobGVkX3RyaWdnZXJfcmVnaXN0ZXIobG9jYWwtPnJhZGlvX2xlZCkpIHsKIAkJCWtmcmVlKGxvY2FsLT5yYWRpb19sZWQpOwogCQkJbG9jYWwtPnJhZGlvX2xlZCA9IE5VTEw7CiAJCX0KIAl9CisKKwlpZiAobG9jYWwtPnRwdF9sZWRfdHJpZ2dlcikgeworCQlpZiAobGVkX3RyaWdnZXJfcmVnaXN0ZXIoJmxvY2FsLT50cHRfbGVkX3RyaWdnZXItPnRyaWcpKSB7CisJCQlrZnJlZShsb2NhbC0+dHB0X2xlZF90cmlnZ2VyKTsKKwkJCWxvY2FsLT50cHRfbGVkX3RyaWdnZXIgPSBOVUxMOworCQl9CisJfQogfQogCiB2b2lkIGllZWU4MDIxMV9sZWRfZXhpdChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCkKQEAgLTExOSwxNSArMTMwLDE4IEBACiAJCWxlZF90cmlnZ2VyX3VucmVnaXN0ZXIobG9jYWwtPnJ4X2xlZCk7CiAJCWtmcmVlKGxvY2FsLT5yeF9sZWQpOwogCX0KKworCWlmIChsb2NhbC0+dHB0X2xlZF90cmlnZ2VyKSB7CisJCWxlZF90cmlnZ2VyX3VucmVnaXN0ZXIoJmxvY2FsLT50cHRfbGVkX3RyaWdnZXItPnRyaWcpOworCQlrZnJlZShsb2NhbC0+dHB0X2xlZF90cmlnZ2VyKTsKKwl9CiB9CiAKIGNoYXIgKl9faWVlZTgwMjExX2dldF9yYWRpb19sZWRfbmFtZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsKIAotCWlmIChsb2NhbC0+cmFkaW9fbGVkKQotCQlyZXR1cm4gbG9jYWwtPnJhZGlvX2xlZF9uYW1lOwotCXJldHVybiBOVUxMOworCXJldHVybiBsb2NhbC0+cmFkaW9fbGVkX25hbWU7CiB9CiBFWFBPUlRfU1lNQk9MKF9faWVlZTgwMjExX2dldF9yYWRpb19sZWRfbmFtZSk7CiAKQEAgLTEzNSw5ICsxNDksNyBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOwogCi0JaWYgKGxvY2FsLT5hc3NvY19sZWQpCi0JCXJldHVybiBsb2NhbC0+YXNzb2NfbGVkX25hbWU7Ci0JcmV0dXJuIE5VTEw7CisJcmV0dXJuIGxvY2FsLT5hc3NvY19sZWRfbmFtZTsKIH0KIEVYUE9SVF9TWU1CT0woX19pZWVlODAyMTFfZ2V0X2Fzc29jX2xlZF9uYW1lKTsKIApAQCAtMTQ1LDkgKzE1Nyw3IEBACiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7CiAKLQlpZiAobG9jYWwtPnR4X2xlZCkKLQkJcmV0dXJuIGxvY2FsLT50eF9sZWRfbmFtZTsKLQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gbG9jYWwtPnR4X2xlZF9uYW1lOwogfQogRVhQT1JUX1NZTUJPTChfX2llZWU4MDIxMV9nZXRfdHhfbGVkX25hbWUpOwogCkBAIC0xNTUsOCArMTY1LDE0NCBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOwogCi0JaWYgKGxvY2FsLT5yeF9sZWQpCi0JCXJldHVybiBsb2NhbC0+cnhfbGVkX25hbWU7Ci0JcmV0dXJuIE5VTEw7CisJcmV0dXJuIGxvY2FsLT5yeF9sZWRfbmFtZTsKIH0KIEVYUE9SVF9TWU1CT0woX19pZWVlODAyMTFfZ2V0X3J4X2xlZF9uYW1lKTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgdHB0X3RyaWdfdHJhZmZpYyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJCQkgICAgICBzdHJ1Y3QgdHB0X2xlZF90cmlnZ2VyICp0cHRfdHJpZykKK3sKKwl1bnNpZ25lZCBsb25nIHRyYWZmaWMsIGRlbHRhOworCisJdHJhZmZpYyA9IHRwdF90cmlnLT50eF9ieXRlcyArIHRwdF90cmlnLT5yeF9ieXRlczsKKworCWRlbHRhID0gdHJhZmZpYyAtIHRwdF90cmlnLT5wcmV2X3RyYWZmaWM7CisJdHB0X3RyaWctPnByZXZfdHJhZmZpYyA9IHRyYWZmaWM7CisJcmV0dXJuIERJVl9ST1VORF9VUChkZWx0YSwgMTAyNCAvIDgpOworfQorCitzdGF0aWMgdm9pZCB0cHRfdHJpZ190aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSAodm9pZCAqKWRhdGE7CisJc3RydWN0IHRwdF9sZWRfdHJpZ2dlciAqdHB0X3RyaWcgPSBsb2NhbC0+dHB0X2xlZF90cmlnZ2VyOworCXN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2OworCXVuc2lnbmVkIGxvbmcgb24sIG9mZiwgdHB0OworCWludCBpOworCisJaWYgKCF0cHRfdHJpZy0+cnVubmluZykKKwkJcmV0dXJuOworCisJbW9kX3RpbWVyKCZ0cHRfdHJpZy0+dGltZXIsIHJvdW5kX2ppZmZpZXMoamlmZmllcyArIEhaKSk7CisKKwl0cHQgPSB0cHRfdHJpZ190cmFmZmljKGxvY2FsLCB0cHRfdHJpZyk7CisKKwkvKiBkZWZhdWx0IHRvIGp1c3Qgc29saWQgb24gKi8KKwlvbiA9IDE7CisJb2ZmID0gMDsKKworCWZvciAoaSA9IHRwdF90cmlnLT5ibGlua190YWJsZV9sZW4gLSAxOyBpID49IDA7IGktLSkgeworCQlpZiAodHB0X3RyaWctPmJsaW5rX3RhYmxlW2ldLnRocm91Z2hwdXQgPCAwIHx8CisJCSAgICB0cHQgPiB0cHRfdHJpZy0+YmxpbmtfdGFibGVbaV0udGhyb3VnaHB1dCkgeworCQkJb2ZmID0gdHB0X3RyaWctPmJsaW5rX3RhYmxlW2ldLmJsaW5rX3RpbWUgLyAyOworCQkJb24gPSB0cHRfdHJpZy0+YmxpbmtfdGFibGVbaV0uYmxpbmtfdGltZSAtIG9mZjsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmVhZF9sb2NrKCZ0cHRfdHJpZy0+dHJpZy5sZWRkZXZfbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGxlZF9jZGV2LCAmdHB0X3RyaWctPnRyaWcubGVkX2NkZXZzLCB0cmlnX2xpc3QpCisJCWxlZF9ibGlua19zZXQobGVkX2NkZXYsICZvbiwgJm9mZik7CisJcmVhZF91bmxvY2soJnRwdF90cmlnLT50cmlnLmxlZGRldl9saXN0X2xvY2spOworfQorCitjaGFyICpfX2llZWU4MDIxMV9jcmVhdGVfdHB0X2xlZF90cmlnZ2VyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCXVuc2lnbmVkIGludCBmbGFncywKKwkJCQljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3RwdF9ibGluayAqYmxpbmtfdGFibGUsCisJCQkJdW5zaWduZWQgaW50IGJsaW5rX3RhYmxlX2xlbikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsKKwlzdHJ1Y3QgdHB0X2xlZF90cmlnZ2VyICp0cHRfdHJpZzsKKworCWlmIChXQVJOX09OKGxvY2FsLT50cHRfbGVkX3RyaWdnZXIpKQorCQlyZXR1cm4gTlVMTDsKKworCXRwdF90cmlnID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHRwdF9sZWRfdHJpZ2dlciksIEdGUF9LRVJORUwpOworCWlmICghdHB0X3RyaWcpCisJCXJldHVybiBOVUxMOworCisJc25wcmludGYodHB0X3RyaWctPm5hbWUsIHNpemVvZih0cHRfdHJpZy0+bmFtZSksCisJCSAiJXN0cHQiLCB3aXBoeV9uYW1lKGxvY2FsLT5ody53aXBoeSkpOworCisJdHB0X3RyaWctPnRyaWcubmFtZSA9IHRwdF90cmlnLT5uYW1lOworCisJdHB0X3RyaWctPmJsaW5rX3RhYmxlID0gYmxpbmtfdGFibGU7CisJdHB0X3RyaWctPmJsaW5rX3RhYmxlX2xlbiA9IGJsaW5rX3RhYmxlX2xlbjsKKwl0cHRfdHJpZy0+d2FudCA9IGZsYWdzOworCisJc2V0dXBfdGltZXIoJnRwdF90cmlnLT50aW1lciwgdHB0X3RyaWdfdGltZXIsICh1bnNpZ25lZCBsb25nKWxvY2FsKTsKKworCWxvY2FsLT50cHRfbGVkX3RyaWdnZXIgPSB0cHRfdHJpZzsKKworCXJldHVybiB0cHRfdHJpZy0+bmFtZTsKK30KK0VYUE9SVF9TWU1CT0woX19pZWVlODAyMTFfY3JlYXRlX3RwdF9sZWRfdHJpZ2dlcik7CisKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFydF90cHRfbGVkX3RyaWcoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpCit7CisJc3RydWN0IHRwdF9sZWRfdHJpZ2dlciAqdHB0X3RyaWcgPSBsb2NhbC0+dHB0X2xlZF90cmlnZ2VyOworCisJaWYgKHRwdF90cmlnLT5ydW5uaW5nKQorCQlyZXR1cm47CisKKwkvKiByZXNldCB0cmFmZmljICovCisJdHB0X3RyaWdfdHJhZmZpYyhsb2NhbCwgdHB0X3RyaWcpOworCXRwdF90cmlnLT5ydW5uaW5nID0gdHJ1ZTsKKworCXRwdF90cmlnX3RpbWVyKCh1bnNpZ25lZCBsb25nKWxvY2FsKTsKKwltb2RfdGltZXIoJnRwdF90cmlnLT50aW1lciwgcm91bmRfamlmZmllcyhqaWZmaWVzICsgSFopKTsKK30KKworc3RhdGljIHZvaWQgaWVlZTgwMjExX3N0b3BfdHB0X2xlZF90cmlnKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKQoreworCXN0cnVjdCB0cHRfbGVkX3RyaWdnZXIgKnRwdF90cmlnID0gbG9jYWwtPnRwdF9sZWRfdHJpZ2dlcjsKKwlzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldjsKKworCWlmICghdHB0X3RyaWctPnJ1bm5pbmcpCisJCXJldHVybjsKKworCXRwdF90cmlnLT5ydW5uaW5nID0gZmFsc2U7CisJZGVsX3RpbWVyX3N5bmMoJnRwdF90cmlnLT50aW1lcik7CisKKwlyZWFkX2xvY2soJnRwdF90cmlnLT50cmlnLmxlZGRldl9saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkobGVkX2NkZXYsICZ0cHRfdHJpZy0+dHJpZy5sZWRfY2RldnMsIHRyaWdfbGlzdCkKKwkJbGVkX2JyaWdodG5lc3Nfc2V0KGxlZF9jZGV2LCBMRURfT0ZGKTsKKwlyZWFkX3VubG9jaygmdHB0X3RyaWctPnRyaWcubGVkZGV2X2xpc3RfbG9jayk7Cit9CisKK3ZvaWQgaWVlZTgwMjExX21vZF90cHRfbGVkX3RyaWcoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCQkJdW5zaWduZWQgaW50IHR5cGVzX29uLCB1bnNpZ25lZCBpbnQgdHlwZXNfb2ZmKQoreworCXN0cnVjdCB0cHRfbGVkX3RyaWdnZXIgKnRwdF90cmlnID0gbG9jYWwtPnRwdF9sZWRfdHJpZ2dlcjsKKwlib29sIGFsbG93ZWQ7CisKKwlXQVJOX09OKHR5cGVzX29uICYgdHlwZXNfb2ZmKTsKKworCWlmICghdHB0X3RyaWcpCisJCXJldHVybjsKKworCXRwdF90cmlnLT5hY3RpdmUgJj0gfnR5cGVzX29mZjsKKwl0cHRfdHJpZy0+YWN0aXZlIHw9IHR5cGVzX29uOworCisJLyoKKwkgKiBSZWdhcmRsZXNzIG9mIHdhbnRlZCBzdGF0ZSwgd2Ugc2hvdWxkbid0IGJsaW5rIHdoZW4KKwkgKiB0aGUgcmFkaW8gaXMgZGlzYWJsZWQgLS0gdGhpcyBjYW4gaGFwcGVuIGR1ZSB0byBzb21lCisJICogY29kZSBvcmRlcmluZyBpc3N1ZXMgd2l0aCBfX2llZWU4MDIxMV9yZWNhbGNfaWRsZSgpCisJICogYmVpbmcgY2FsbGVkIGJlZm9yZSB0aGUgcmFkaW8gaXMgc3RhcnRlZC4KKwkgKi8KKwlhbGxvd2VkID0gdHB0X3RyaWctPmFjdGl2ZSAmIElFRUU4MDIxMV9UUFRfTEVEVFJJR19GTF9SQURJTzsKKworCWlmICghYWxsb3dlZCB8fCAhKHRwdF90cmlnLT5hY3RpdmUgJiB0cHRfdHJpZy0+d2FudCkpCisJCWllZWU4MDIxMV9zdG9wX3RwdF9sZWRfdHJpZyhsb2NhbCk7CisJZWxzZQorCQlpZWVlODAyMTFfc3RhcnRfdHB0X2xlZF90cmlnKGxvY2FsKTsKK30KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9sZWQuaCBiL25ldC9tYWM4MDIxMS9sZWQuaAppbmRleCA3N2IxZTFiLi5lMDI3NWQ5IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvbGVkLmgKKysrIGIvbmV0L21hYzgwMjExL2xlZC5oCkBAIC0xMiwxNCArMTIsMTcgQEAKICNpbmNsdWRlICJpZWVlODAyMTFfaS5oIgogCiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0xFRFMKLWV4dGVybiB2b2lkIGllZWU4MDIxMV9sZWRfcngoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpOwotZXh0ZXJuIHZvaWQgaWVlZTgwMjExX2xlZF90eChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgaW50IHEpOwotZXh0ZXJuIHZvaWQgaWVlZTgwMjExX2xlZF9hc3NvYyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKLQkJCQlib29sIGFzc29jaWF0ZWQpOwotZXh0ZXJuIHZvaWQgaWVlZTgwMjExX2xlZF9yYWRpbyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKLQkJCQlib29sIGVuYWJsZWQpOwotZXh0ZXJuIHZvaWQgaWVlZTgwMjExX2xlZF9pbml0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTsKLWV4dGVybiB2b2lkIGllZWU4MDIxMV9sZWRfZXhpdChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCk7Cit2b2lkIGllZWU4MDIxMV9sZWRfcngoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpOwordm9pZCBpZWVlODAyMTFfbGVkX3R4KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCBpbnQgcSk7Cit2b2lkIGllZWU4MDIxMV9sZWRfYXNzb2Moc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCQkgYm9vbCBhc3NvY2lhdGVkKTsKK3ZvaWQgaWVlZTgwMjExX2xlZF9yYWRpbyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJCSBib29sIGVuYWJsZWQpOwordm9pZCBpZWVlODAyMTFfbGVkX25hbWVzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTsKK3ZvaWQgaWVlZTgwMjExX2xlZF9pbml0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTsKK3ZvaWQgaWVlZTgwMjExX2xlZF9leGl0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTsKK3ZvaWQgaWVlZTgwMjExX21vZF90cHRfbGVkX3RyaWcoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCQkJdW5zaWduZWQgaW50IHR5cGVzX29uLCB1bnNpZ25lZCBpbnQgdHlwZXNfb2ZmKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgaWVlZTgwMjExX2xlZF9yeChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCkKIHsKQEAgLTM1LDEwICszOCwzNiBAQAogCQkJCSAgICAgICBib29sIGVuYWJsZWQpCiB7CiB9CitzdGF0aWMgaW5saW5lIHZvaWQgaWVlZTgwMjExX2xlZF9uYW1lcyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCkKK3sKK30KIHN0YXRpYyBpbmxpbmUgdm9pZCBpZWVlODAyMTFfbGVkX2luaXQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpCiB7CiB9CiBzdGF0aWMgaW5saW5lIHZvaWQgaWVlZTgwMjExX2xlZF9leGl0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKQogewogfQorc3RhdGljIGlubGluZSB2b2lkIGllZWU4MDIxMV9tb2RfdHB0X2xlZF90cmlnKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkJCQkgICAgICB1bnNpZ25lZCBpbnQgdHlwZXNfb24sCisJCQkJCSAgICAgIHVuc2lnbmVkIGludCB0eXBlc19vZmYpCit7Cit9CiAjZW5kaWYKKworc3RhdGljIGlubGluZSB2b2lkCitpZWVlODAyMTFfdHB0X2xlZF90cmlnX3R4KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCBfX2xlMTYgZmMsIGludCBieXRlcykKK3sKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfTEVEUworCWlmIChsb2NhbC0+dHB0X2xlZF90cmlnZ2VyICYmIGllZWU4MDIxMV9pc19kYXRhKGZjKSkKKwkJbG9jYWwtPnRwdF9sZWRfdHJpZ2dlci0+dHhfYnl0ZXMgKz0gYnl0ZXM7CisjZW5kaWYKK30KKworc3RhdGljIGlubGluZSB2b2lkCitpZWVlODAyMTFfdHB0X2xlZF90cmlnX3J4KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCBfX2xlMTYgZmMsIGludCBieXRlcykKK3sKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfTEVEUworCWlmIChsb2NhbC0+dHB0X2xlZF90cmlnZ2VyICYmIGllZWU4MDIxMV9pc19kYXRhKGZjKSkKKwkJbG9jYWwtPnRwdF9sZWRfdHJpZ2dlci0+cnhfYnl0ZXMgKz0gYnl0ZXM7CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tYWluLmMgYi9uZXQvbWFjODAyMTEvbWFpbi5jCmluZGV4IDEwN2EwY2IuLjQ4NWQzNmIgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9tYWluLmMKKysrIGIvbmV0L21hYzgwMjExL21haW4uYwpAQCAtMjQ1LDkgKzI0NSwxMiBAQAogCQkJCXNkYXRhLT52aWYuYnNzX2NvbmYuZW5hYmxlX2JlYWNvbiA9CiAJCQkJCSEhc2RhdGEtPnUuaWJzcy5wcmVzcDsKIAkJCQlicmVhazsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSAogCQkJY2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOgotCQkJCXNkYXRhLT52aWYuYnNzX2NvbmYuZW5hYmxlX2JlYWNvbiA9IHRydWU7CisJCQkJc2RhdGEtPnZpZi5ic3NfY29uZi5lbmFibGVfYmVhY29uID0KKwkJCQkJISFzZGF0YS0+dS5tZXNoLm1lc2hfaWRfbGVuOwogCQkJCWJyZWFrOworI2VuZGlmCiAJCQlkZWZhdWx0OgogCQkJCS8qIG5vdCByZWFjaGVkICovCiAJCQkJV0FSTl9PTigxKTsKQEAgLTQ4MSw2ICs0ODQsMTAgQEAKIAkJCUJJVChJRUVFODAyMTFfU1RZUEVfREVBVVRIID4+IDQpIHwKIAkJCUJJVChJRUVFODAyMTFfU1RZUEVfQUNUSU9OID4+IDQpLAogCX0sCisJW05MODAyMTFfSUZUWVBFX01FU0hfUE9JTlRdID0geworCQkudHggPSAweGZmZmYsCisJCS5yeCA9IEJJVChJRUVFODAyMTFfU1RZUEVfQUNUSU9OID4+IDQpLAorCX0sCiB9OwogCiBzdHJ1Y3QgaWVlZTgwMjExX2h3ICppZWVlODAyMTFfYWxsb2NfaHcoc2l6ZV90IHByaXZfZGF0YV9sZW4sCkBAIC01MTQsMTAgKzUyMSwxNSBAQAogCiAJd2lwaHktPm1nbXRfc3R5cGVzID0gaWVlZTgwMjExX2RlZmF1bHRfbWdtdF9zdHlwZXM7CiAKKwl3aXBoeS0+cHJpdmlkID0gbWFjODAyMTFfd2lwaHlfcHJpdmlkOworCiAJd2lwaHktPmZsYWdzIHw9IFdJUEhZX0ZMQUdfTkVUTlNfT0sgfAogCQkJV0lQSFlfRkxBR180QUREUl9BUCB8Ci0JCQlXSVBIWV9GTEFHXzRBRERSX1NUQVRJT047Ci0Jd2lwaHktPnByaXZpZCA9IG1hYzgwMjExX3dpcGh5X3ByaXZpZDsKKwkJCVdJUEhZX0ZMQUdfNEFERFJfU1RBVElPTiB8CisJCQlXSVBIWV9GTEFHX1NVUFBPUlRTX1NFUEFSQVRFX0RFRkFVTFRfS0VZUzsKKworCWlmICghb3BzLT5zZXRfa2V5KQorCQl3aXBoeS0+ZmxhZ3MgfD0gV0lQSFlfRkxBR19JQlNTX1JTTjsKIAogCXdpcGh5LT5ic3NfcHJpdl9zaXplID0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfYnNzKTsKIApAQCAtNTU3LDYgKzU2OSw4IEBACiAJc3Bpbl9sb2NrX2luaXQoJmxvY2FsLT5maWx0ZXJfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbl9sb2NrKTsKIAorCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmxvY2FsLT5yeF9za2JfcXVldWUpOworCiAJSU5JVF9ERUxBWUVEX1dPUksoJmxvY2FsLT5zY2FuX3dvcmssIGllZWU4MDIxMV9zY2FuX3dvcmspOwogCiAJaWVlZTgwMjExX3dvcmtfaW5pdChsb2NhbCk7CkBAIC01OTMsNiArNjA3LDEwIEBACiAJLyogaW5pdCBkdW1teSBuZXRkZXYgZm9yIHVzZSB3LyBOQVBJICovCiAJaW5pdF9kdW1teV9uZXRkZXYoJmxvY2FsLT5uYXBpX2Rldik7CiAKKwlpZWVlODAyMTFfbGVkX25hbWVzKGxvY2FsKTsKKworCWllZWU4MDIxMV9od19yb2Nfc2V0dXAobG9jYWwpOworCiAJcmV0dXJuIGxvY2FsX3RvX2h3KGxvY2FsKTsKIH0KIEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX2FsbG9jX2h3KTsKQEAgLTczNyw2ICs3NTUsOSBAQAogCQl9CiAJfQogCisJaWYgKCFsb2NhbC0+b3BzLT5yZW1haW5fb25fY2hhbm5lbCkKKwkJbG9jYWwtPmh3LndpcGh5LT5tYXhfcmVtYWluX29uX2NoYW5uZWxfZHVyYXRpb24gPSA1MDAwOworCiAJcmVzdWx0ID0gd2lwaHlfcmVnaXN0ZXIobG9jYWwtPmh3LndpcGh5KTsKIAlpZiAocmVzdWx0IDwgMCkKIAkJZ290byBmYWlsX3dpcGh5X3JlZ2lzdGVyOwpAQCAtODk4LDYgKzkxOSw3IEBACiAJCXdpcGh5X3dhcm4obG9jYWwtPmh3LndpcGh5LCAic2tiX3F1ZXVlIG5vdCBlbXB0eVxuIik7CiAJc2tiX3F1ZXVlX3B1cmdlKCZsb2NhbC0+c2tiX3F1ZXVlKTsKIAlza2JfcXVldWVfcHVyZ2UoJmxvY2FsLT5za2JfcXVldWVfdW5yZWxpYWJsZSk7CisJc2tiX3F1ZXVlX3B1cmdlKCZsb2NhbC0+cnhfc2tiX3F1ZXVlKTsKIAogCWRlc3Ryb3lfd29ya3F1ZXVlKGxvY2FsLT53b3JrcXVldWUpOwogCXdpcGh5X3VucmVnaXN0ZXIobG9jYWwtPmh3LndpcGh5KTsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tZXNoLmMgYi9uZXQvbWFjODAyMTEvbWVzaC5jCmluZGV4IGM4YTRmMTkuLmNhM2FmNDYgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9tZXNoLmMKKysrIGIvbmV0L21hYzgwMjExL21lc2guYwpAQCAtMTI0LDE1ICsxMjQsNiBAQAogCQlpZWVlODAyMTFfbWVzaF9ob3VzZWtlZXBpbmdfdGltZXIoKHVuc2lnbmVkIGxvbmcpIHNkYXRhKTsKIH0KIAotdm9pZCBtZXNoX2lkc19zZXRfZGVmYXVsdChzdHJ1Y3QgaWVlZTgwMjExX2lmX21lc2ggKnN0YSkKLXsKLQlzdGEtPm1lc2hfcHBfaWQgPSAwOwkvKiBIV01QICovCi0Jc3RhLT5tZXNoX3BtX2lkID0gMDsJLyogQWlydGltZSAqLwotCXN0YS0+bWVzaF9jY19pZCA9IDA7CS8qIERpc2FibGVkICovCi0Jc3RhLT5tZXNoX3NwX2lkID0gMDsJLyogTmVpZ2hib3IgT2Zmc2V0ICovCi0Jc3RhLT5tZXNoX2F1dGhfaWQgPSAwOwkvKiBEaXNhYmxlZCAqLwotfQotCiBpbnQgbWVzaF9ybWNfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKIHsKIAlpbnQgaTsKQEAgLTI4Nyw2ICsyNzgsMTMgQEAKIAkqcG9zKysgfD0gc2RhdGEtPnUubWVzaC5hY2NlcHRpbmdfcGxpbmtzID8KIAkgICAgTUVTSENPTkZfQ0FQQUJfQUNDRVBUX1BMSU5LUyA6IDB4MDA7CiAJKnBvcysrID0gMHgwMDsKKworCWlmIChzZGF0YS0+dS5tZXNoLnZlbmRvcl9pZSkgeworCQlpbnQgbGVuID0gc2RhdGEtPnUubWVzaC52ZW5kb3JfaWVfbGVuOworCQljb25zdCB1OCAqZGF0YSA9IHNkYXRhLT51Lm1lc2gudmVuZG9yX2llOworCQlpZiAoc2tiX3RhaWxyb29tKHNrYikgPiBsZW4pCisJCQltZW1jcHkoc2tiX3B1dChza2IsIGxlbiksIGRhdGEsIGxlbik7CisJfQogfQogCiB1MzIgbWVzaF90YWJsZV9oYXNoKHU4ICphZGRyLCBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgc3RydWN0IG1lc2hfdGFibGUgKnRibCkKQEAgLTQxMiwzOSArNDEwLDMzIEBACiAgKiBpZWVlODAyMTFfbmV3X21lc2hfaGVhZGVyIC0gY3JlYXRlIGEgbmV3IG1lc2ggaGVhZGVyCiAgKiBAbWVzaGhkcjogICAgdW5pbml0aWFsaXplZCBtZXNoIGhlYWRlcgogICogQHNkYXRhOgltZXNoIGludGVyZmFjZSB0byBiZSB1c2VkCi0gKiBAYWRkcjQ6CWFkZHI0IG9mIHRoZSBtZXNoIGZyYW1lICgxc3QgaW4gYWUgaGVhZGVyKQotICogICAgICAgICAgICAgIG1heSBiZSBOVUxMCi0gKiBAYWRkcjU6CWFkZHI1IG9mIHRoZSBtZXNoIGZyYW1lICgxc3Qgb3IgMm5kIGluIGFlIGhlYWRlcikKLSAqICAgICAgICAgICAgICBtYXkgYmUgTlVMTCB1bmxlc3MgYWRkcjYgaXMgcHJlc2VudAotICogQGFkZHI2OglhZGRyNiBvZiB0aGUgbWVzaCBmcmFtZSAoMm5kIG9yIDNyZCBpbiBhZSBoZWFkZXIpCi0gKiAJCW1heSBiZSBOVUxMIHVubGVzcyBhZGRyNSBpcyBwcmVzZW50CisgKiBAYWRkcjRvcjU6ICAgMXN0IGFkZHJlc3MgaW4gdGhlIGFlIGhlYWRlciwgd2hpY2ggbWF5IGNvcnJlc3BvbmQgdG8gYWRkcmVzcyA0CisgKiAgICAgICAgICAgICAgKGlmIGFkZHI2IGlzIE5VTEwpIG9yIGFkZHJlc3MgNSAoaWYgYWRkcjYgaXMgcHJlc2VudCkuIEl0IG1heQorICogICAgICAgICAgICAgIGJlIE5VTEwuCisgKiBAYWRkcjY6CTJuZCBhZGRyZXNzIGluIHRoZSBhZSBoZWFkZXIsIHdoaWNoIGNvcnJlc3BvbmRzIHRvIGFkZHI2IG9mIHRoZQorICogICAgICAgICAgICAgIG1lc2ggZnJhbWUKICAqCiAgKiBSZXR1cm4gdGhlIGhlYWRlciBsZW5ndGguCiAgKi8KIGludCBpZWVlODAyMTFfbmV3X21lc2hfaGVhZGVyKHN0cnVjdCBpZWVlODAyMTFzX2hkciAqbWVzaGhkciwKLQkJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGNoYXIgKmFkZHI0LAotCQljaGFyICphZGRyNSwgY2hhciAqYWRkcjYpCisJCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBjaGFyICphZGRyNG9yNSwKKwkJY2hhciAqYWRkcjYpCiB7CiAJaW50IGFlbGVuID0gMDsKKwlCVUdfT04oIWFkZHI0b3I1ICYmIGFkZHI2KTsKIAltZW1zZXQobWVzaGhkciwgMCwgc2l6ZW9mKCptZXNoaGRyKSk7CiAJbWVzaGhkci0+dHRsID0gc2RhdGEtPnUubWVzaC5tc2hjZmcuZG90MTFNZXNoVFRMOwogCXB1dF91bmFsaWduZWQoY3B1X3RvX2xlMzIoc2RhdGEtPnUubWVzaC5tZXNoX3NlcW51bSksICZtZXNoaGRyLT5zZXFudW0pOwogCXNkYXRhLT51Lm1lc2gubWVzaF9zZXFudW0rKzsKLQlpZiAoYWRkcjQpIHsKKwlpZiAoYWRkcjRvcjUgJiYgIWFkZHI2KSB7CiAJCW1lc2hoZHItPmZsYWdzIHw9IE1FU0hfRkxBR1NfQUVfQTQ7CiAJCWFlbGVuICs9IEVUSF9BTEVOOwotCQltZW1jcHkobWVzaGhkci0+ZWFkZHIxLCBhZGRyNCwgRVRIX0FMRU4pOwotCX0KLQlpZiAoYWRkcjUgJiYgYWRkcjYpIHsKKwkJbWVtY3B5KG1lc2hoZHItPmVhZGRyMSwgYWRkcjRvcjUsIEVUSF9BTEVOKTsKKwl9IGVsc2UgaWYgKGFkZHI0b3I1ICYmIGFkZHI2KSB7CiAJCW1lc2hoZHItPmZsYWdzIHw9IE1FU0hfRkxBR1NfQUVfQTVfQTY7CiAJCWFlbGVuICs9IDIgKiBFVEhfQUxFTjsKLQkJaWYgKCFhZGRyNCkgewotCQkJbWVtY3B5KG1lc2hoZHItPmVhZGRyMSwgYWRkcjUsIEVUSF9BTEVOKTsKLQkJCW1lbWNweShtZXNoaGRyLT5lYWRkcjIsIGFkZHI2LCBFVEhfQUxFTik7Ci0JCX0gZWxzZSB7Ci0JCQltZW1jcHkobWVzaGhkci0+ZWFkZHIyLCBhZGRyNSwgRVRIX0FMRU4pOwotCQkJbWVtY3B5KG1lc2hoZHItPmVhZGRyMywgYWRkcjYsIEVUSF9BTEVOKTsKLQkJfQorCQltZW1jcHkobWVzaGhkci0+ZWFkZHIxLCBhZGRyNG9yNSwgRVRIX0FMRU4pOworCQltZW1jcHkobWVzaGhkci0+ZWFkZHIyLCBhZGRyNiwgRVRIX0FMRU4pOwogCX0KIAlyZXR1cm4gNiArIGFlbGVuOwogfQpAQCAtNTEzLDYgKzUwNSwxNCBAQAogCXN0cnVjdCBpZWVlODAyMTFfaWZfbWVzaCAqaWZtc2ggPSAmc2RhdGEtPnUubWVzaDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKIAorCWxvY2FsLT5maWZfb3RoZXJfYnNzKys7CisJLyogbWVzaCBpZmFjZXMgbXVzdCBzZXQgYWxsbXVsdGkgdG8gZm9yd2FyZCBtY2FzdCB0cmFmZmljICovCisJYXRvbWljX2luYygmbG9jYWwtPmlmZl9hbGxtdWx0aXMpOworCWllZWU4MDIxMV9jb25maWd1cmVfZmlsdGVyKGxvY2FsKTsKKworCWlmbXNoLT5tZXNoX2NjX2lkID0gMDsJLyogRGlzYWJsZWQgKi8KKwlpZm1zaC0+bWVzaF9zcF9pZCA9IDA7CS8qIE5laWdoYm9yIE9mZnNldCAqLworCWlmbXNoLT5tZXNoX2F1dGhfaWQgPSAwOwkvKiBEaXNhYmxlZCAqLwogCXNldF9iaXQoTUVTSF9XT1JLX0hPVVNFS0VFUElORywgJmlmbXNoLT53cmtxX2ZsYWdzKTsKIAlpZWVlODAyMTFfbWVzaF9yb290X3NldHVwKGlmbXNoKTsKIAlpZWVlODAyMTFfcXVldWVfd29yaygmbG9jYWwtPmh3LCAmc2RhdGEtPndvcmspOwpAQCAtNTI0LDYgKzUyNCwxMyBAQAogCiB2b2lkIGllZWU4MDIxMV9zdG9wX21lc2goc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiB7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tZXNoICppZm1zaCA9ICZzZGF0YS0+dS5tZXNoOworCisJaWZtc2gtPm1lc2hfaWRfbGVuID0gMDsKKwlpZWVlODAyMTFfYnNzX2luZm9fY2hhbmdlX25vdGlmeShzZGF0YSwgQlNTX0NIQU5HRURfQkVBQ09OX0VOQUJMRUQpOworCXN0YV9pbmZvX2ZsdXNoKGxvY2FsLCBOVUxMKTsKKwogCWRlbF90aW1lcl9zeW5jKCZzZGF0YS0+dS5tZXNoLmhvdXNla2VlcGluZ190aW1lcik7CiAJZGVsX3RpbWVyX3N5bmMoJnNkYXRhLT51Lm1lc2gubWVzaF9wYXRoX3Jvb3RfdGltZXIpOwogCS8qCkBAIC01MzQsNiArNTQxLDEwIEBACiAJICogaXQgbm8gbG9uZ2VyIGlzLgogCSAqLwogCWNhbmNlbF93b3JrX3N5bmMoJnNkYXRhLT53b3JrKTsKKworCWxvY2FsLT5maWZfb3RoZXJfYnNzLS07CisJYXRvbWljX2RlYygmbG9jYWwtPmlmZl9hbGxtdWx0aXMpOworCWllZWU4MDIxMV9jb25maWd1cmVfZmlsdGVyKGxvY2FsKTsKIH0KIAogc3RhdGljIHZvaWQgaWVlZTgwMjExX21lc2hfcnhfYmNuX3ByZXNwKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLApAQCAtNjYzLDI2ICs2NzQsNiBAQAogCQkgICAgaWVlZTgwMjExX21lc2hfaG91c2VrZWVwaW5nX3RpbWVyLAogCQkgICAgKHVuc2lnbmVkIGxvbmcpIHNkYXRhKTsKIAotCWlmbXNoLT5tc2hjZmcuZG90MTFNZXNoUmV0cnlUaW1lb3V0ID0gTUVTSF9SRVRfVDsKLQlpZm1zaC0+bXNoY2ZnLmRvdDExTWVzaENvbmZpcm1UaW1lb3V0ID0gTUVTSF9DT05GX1Q7Ci0JaWZtc2gtPm1zaGNmZy5kb3QxMU1lc2hIb2xkaW5nVGltZW91dCA9IE1FU0hfSE9MRF9UOwotCWlmbXNoLT5tc2hjZmcuZG90MTFNZXNoTWF4UmV0cmllcyA9IE1FU0hfTUFYX1JFVFI7Ci0JaWZtc2gtPm1zaGNmZy5kb3QxMU1lc2hUVEwgPSBNRVNIX1RUTDsKLQlpZm1zaC0+bXNoY2ZnLmF1dG9fb3Blbl9wbGlua3MgPSB0cnVlOwotCWlmbXNoLT5tc2hjZmcuZG90MTFNZXNoTWF4UGVlckxpbmtzID0KLQkJTUVTSF9NQVhfRVNUQUJfUExJTktTOwotCWlmbXNoLT5tc2hjZmcuZG90MTFNZXNoSFdNUGFjdGl2ZVBhdGhUaW1lb3V0ID0KLQkJTUVTSF9QQVRIX1RJTUVPVVQ7Ci0JaWZtc2gtPm1zaGNmZy5kb3QxMU1lc2hIV01QcHJlcU1pbkludGVydmFsID0KLQkJTUVTSF9QUkVRX01JTl9JTlQ7Ci0JaWZtc2gtPm1zaGNmZy5kb3QxMU1lc2hIV01QbmV0RGlhbWV0ZXJUcmF2ZXJzYWxUaW1lID0KLQkJTUVTSF9ESUFNX1RSQVZFUlNBTF9USU1FOwotCWlmbXNoLT5tc2hjZmcuZG90MTFNZXNoSFdNUG1heFBSRVFyZXRyaWVzID0KLQkJTUVTSF9NQVhfUFJFUV9SRVRSSUVTOwotCWlmbXNoLT5tc2hjZmcucGF0aF9yZWZyZXNoX3RpbWUgPQotCQlNRVNIX1BBVEhfUkVGUkVTSF9USU1FOwotCWlmbXNoLT5tc2hjZmcubWluX2Rpc2NvdmVyeV90aW1lb3V0ID0KLQkJTUVTSF9NSU5fRElTQ09WRVJZX1RJTUVPVVQ7CiAJaWZtc2gtPmFjY2VwdGluZ19wbGlua3MgPSB0cnVlOwogCWlmbXNoLT5wcmVxX2lkID0gMDsKIAlpZm1zaC0+c24gPSAwOwpAQCAtNjkyLDcgKzY4Myw2IEBACiAJLyogQWxsb2NhdGUgYWxsIG1lc2ggc3RydWN0dXJlcyB3aGVuIGNyZWF0aW5nIHRoZSBmaXJzdCBtZXNoIGludGVyZmFjZS4gKi8KIAlpZiAoIW1lc2hfYWxsb2NhdGVkKQogCQlpZWVlODAyMTFzX2luaXQoKTsKLQltZXNoX2lkc19zZXRfZGVmYXVsdChpZm1zaCk7CiAJc2V0dXBfdGltZXIoJmlmbXNoLT5tZXNoX3BhdGhfdGltZXIsCiAJCSAgICBpZWVlODAyMTFfbWVzaF9wYXRoX3RpbWVyLAogCQkgICAgKHVuc2lnbmVkIGxvbmcpIHNkYXRhKTsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tZXNoLmggYi9uZXQvbWFjODAyMTEvbWVzaC5oCmluZGV4IDU4ZTc0MTEuLmI5OWUyMzAgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9tZXNoLmgKKysrIGIvbmV0L21hYzgwMjExL21lc2guaApAQCAtMTY0LDQ0ICsxNjQsMTAgQEAKIH07CiAKIAotLyoKLSAqIE1FU0hfQ0ZHX0NPTVBfTEVOIEluY2x1ZGVzOgotICogCS0gQWN0aXZlIHBhdGggc2VsZWN0aW9uIHByb3RvY29sIElELgotICogCS0gQWN0aXZlIHBhdGggc2VsZWN0aW9uIG1ldHJpYyBJRC4KLSAqIAktIENvbmdlc3Rpb24gY29udHJvbCBtb2RlIGlkZW50aWZpZXIuCi0gKiAJLSBDaGFubmVsIHByZWNlZGVuY2UuCi0gKiBEb2VzIG5vdCBpbmNsdWRlIG1lc2ggY2FwYWJpbGl0aWVzLCB3aGljaCBtYXkgdmFyeSBhY3Jvc3Mgbm9kZXMgaW4gdGhlIHNhbWUKLSAqIG1lc2gKLSAqLwotI2RlZmluZSBNRVNIX0NGR19DTVBfTEVOIAkoSUVFRTgwMjExX01FU0hfQ09ORklHX0xFTiAtIDIpCi0KLS8qIERlZmF1bHQgdmFsdWVzLCB0aW1lb3V0cyBpbiBtcyAqLwotI2RlZmluZSBNRVNIX1RUTCAJCTMxCi0jZGVmaW5lIE1FU0hfTUFYX1JFVFIJIAkzCi0jZGVmaW5lIE1FU0hfUkVUX1QgCQkxMDAKLSNkZWZpbmUgTUVTSF9DT05GX1QgCQkxMDAKLSNkZWZpbmUgTUVTSF9IT0xEX1QgCQkxMDAKLQotI2RlZmluZSBNRVNIX1BBVEhfVElNRU9VVAk1MDAwCi0vKiBNaW5pbXVtIGludGVydmFsIGJldHdlZW4gdHdvIGNvbnNlY3V0aXZlIFBSRVFzIG9yaWdpbmF0ZWQgYnkgdGhlIHNhbWUKLSAqIGludGVyZmFjZQotICovCi0jZGVmaW5lIE1FU0hfUFJFUV9NSU5fSU5UCTEwCi0jZGVmaW5lIE1FU0hfRElBTV9UUkFWRVJTQUxfVElNRSA1MAotLyogQSBwYXRoIHdpbGwgYmUgcmVmcmVzaGVkIGlmIGl0IGlzIHVzZWQgUEFUSF9SRUZSRVNIX1RJTUUgbWlsbGlzZWNvbmRzIGJlZm9yZQotICogdGltaW5nIG91dC4gIFRoaXMgd2F5IGl0IHdpbGwgcmVtYWluIEFDVElWRSBhbmQgbm8gZGF0YSBmcmFtZXMgd2lsbCBiZQotICogdW5uZWNlc2FyaWx5IGhlbGQgaW4gdGhlIHBlbmRpbmcgcXVldWUuCi0gKi8KLSNkZWZpbmUgTUVTSF9QQVRIX1JFRlJFU0hfVElNRQkJCTEwMDAKLSNkZWZpbmUgTUVTSF9NSU5fRElTQ09WRVJZX1RJTUVPVVQgKDIgKiBNRVNIX0RJQU1fVFJBVkVSU0FMX1RJTUUpCiAjZGVmaW5lIE1FU0hfREVGQVVMVF9CRUFDT05fSU5URVJWQUwJCTEwMDAgCS8qIGluIDEwMjQgdXMgdW5pdHMgKi8KIAotI2RlZmluZSBNRVNIX01BWF9QUkVRX1JFVFJJRVMgNAogI2RlZmluZSBNRVNIX1BBVEhfRVhQSVJFICg2MDAgKiBIWikKIAotLyogRGVmYXVsdCBtYXhpbXVtIG51bWJlciBvZiBlc3RhYmxpc2hlZCBwbGlua3MgcGVyIGludGVyZmFjZSAqLwotI2RlZmluZSBNRVNIX01BWF9FU1RBQl9QTElOS1MJMzIKLQogLyogRGVmYXVsdCBtYXhpbXVtIG51bWJlciBvZiBwbGlua3MgcGVyIGludGVyZmFjZSAqLwogI2RlZmluZSBNRVNIX01BWF9QTElOS1MJCTI1NgogCkBAIC0yMjEsOCArMTg3LDggQEAKIGludCBpZWVlODAyMTFfZmlsbF9tZXNoX2FkZHJlc3NlcyhzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLCBfX2xlMTYgKmZjLAogCQkJCSAgY29uc3QgdTggKmRhLCBjb25zdCB1OCAqc2EpOwogaW50IGllZWU4MDIxMV9uZXdfbWVzaF9oZWFkZXIoc3RydWN0IGllZWU4MDIxMXNfaGRyICptZXNoaGRyLAotCQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgY2hhciAqYWRkcjQsCi0JCWNoYXIgKmFkZHI1LCBjaGFyICphZGRyNik7CisJCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBjaGFyICphZGRyNG9yNSwKKwkJY2hhciAqYWRkcjYpOwogaW50IG1lc2hfcm1jX2NoZWNrKHU4ICphZGRyLCBzdHJ1Y3QgaWVlZTgwMjExc19oZHIgKm1lc2hfaGRyLAogCQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7CiBib29sIG1lc2hfbWF0Y2hlc19sb2NhbChzdHJ1Y3QgaWVlZTgwMl8xMV9lbGVtcyAqaWUsCkBAIC0zMTgsNiArMjg0LDExIEBACiAJbXBhdGgtPmZsYWdzIHw9IE1FU0hfUEFUSF9BQ1RJVkUgfCBNRVNIX1BBVEhfUkVTT0xWRUQ7CiB9CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBtZXNoX3BhdGhfc2VsX2lzX2h3bXAoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCit7CisJcmV0dXJuIHNkYXRhLT51Lm1lc2gubWVzaF9wcF9pZCA9PSBJRUVFODAyMTFfUEFUSF9QUk9UT0NPTF9IV01QOworfQorCiAjZGVmaW5lIGZvcl9lYWNoX21lc2hfZW50cnkoeCwgcCwgbm9kZSwgaSkgXAogCWZvciAoaSA9IDA7IGkgPD0geC0+aGFzaF9tYXNrOyBpKyspIFwKIAkJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KG5vZGUsIHAsICZ4LT5oYXNoX2J1Y2tldHNbaV0sIGxpc3QpCkBAIC0zMzgsNiArMzA5LDggQEAKIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQgbWVzaF9wbGlua19xdWllc2NlKHN0cnVjdCBzdGFfaW5mbyAqc3RhKSB7fQogc3RhdGljIGlubGluZSB2b2lkIG1lc2hfcGxpbmtfcmVzdGFydChzdHJ1Y3Qgc3RhX2luZm8gKnN0YSkge30KK3N0YXRpYyBpbmxpbmUgYm9vbCBtZXNoX3BhdGhfc2VsX2lzX2h3bXAoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCit7IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCiAKICNlbmRpZiAvKiBJRUVFODAyMTFTX0ggKi8KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tZXNoX2h3bXAuYyBiL25ldC9tYWM4MDIxMS9tZXNoX2h3bXAuYwppbmRleCA4MjllMDhhLi41YmY2NGQ3IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvbWVzaF9od21wLmMKKysrIGIvbmV0L21hYzgwMjExL21lc2hfaHdtcC5jCkBAIC0yMzIsNyArMjMyLDcgQEAKIAkqcG9zKysgPSBXTEFOX0VJRF9QRVJSOwogCSpwb3MrKyA9IGllX2xlbjsKIAkvKiB0dGwgKi8KLQkqcG9zKysgPSBNRVNIX1RUTDsKKwkqcG9zKysgPSB0dGw7CiAJLyogbnVtYmVyIG9mIGRlc3RpbmF0aW9ucyAqLwogCSpwb3MrKyA9IDE7CiAJLyoKQEAgLTUyMiw3ICs1MjIsNyBAQAogCiAJaWYgKHJlcGx5KSB7CiAJCWxpZmV0aW1lID0gUFJFUV9JRV9MSUZFVElNRShwcmVxX2VsZW0pOwotCQl0dGwgPSBpZm1zaC0+bXNoY2ZnLmRvdDExTWVzaFRUTDsKKwkJdHRsID0gaWZtc2gtPm1zaGNmZy5lbGVtZW50X3R0bDsKIAkJaWYgKHR0bCAhPSAwKSB7CiAJCQltaHdtcF9kYmcoInJlcGx5aW5nIHRvIHRoZSBQUkVRXG4iKTsKIAkJCW1lc2hfcGF0aF9zZWxfZnJhbWVfdHgoTVBBVEhfUFJFUCwgMCwgdGFyZ2V0X2FkZHIsCkBAIC04NzcsNyArODc3LDcgQEAKIAkJc2RhdGEtPnUubWVzaC5sYXN0X3NuX3VwZGF0ZSA9IGppZmZpZXM7CiAJfQogCWxpZmV0aW1lID0gZGVmYXVsdF9saWZldGltZShzZGF0YSk7Ci0JdHRsID0gc2RhdGEtPnUubWVzaC5tc2hjZmcuZG90MTFNZXNoVFRMOworCXR0bCA9IHNkYXRhLT51Lm1lc2gubXNoY2ZnLmVsZW1lbnRfdHRsOwogCWlmICh0dGwgPT0gMCkgewogCQlzZGF0YS0+dS5tZXNoLm1zaHN0YXRzLmRyb3BwZWRfZnJhbWVzX3R0bCsrOwogCQlzcGluX3VubG9ja19iaCgmbXBhdGgtPnN0YXRlX2xvY2spOwpAQCAtMTAxMyw1ICsxMDEzLDYgQEAKIAltZXNoX3BhdGhfc2VsX2ZyYW1lX3R4KE1QQVRIX1JBTk4sIDAsIHNkYXRhLT52aWYuYWRkciwKIAkJCSAgICAgICBjcHVfdG9fbGUzMigrK2lmbXNoLT5zbiksCiAJCQkgICAgICAgMCwgTlVMTCwgMCwgYnJvYWRjYXN0X2FkZHIsCi0JCQkgICAgICAgMCwgTUVTSF9UVEwsIDAsIDAsIDAsIHNkYXRhKTsKKwkJCSAgICAgICAwLCBzZGF0YS0+dS5tZXNoLm1zaGNmZy5lbGVtZW50X3R0bCwKKwkJCSAgICAgICAwLCAwLCAwLCBzZGF0YSk7CiB9CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMgYi9uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMKaW5kZXggMzQ5ZTQ2Ni4uOGQ2NWI0NyAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jCisrKyBiL25ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYwpAQCAtNDY3LDggKzQ2Nyw4IEBACiAJCQltcGF0aC0+ZmxhZ3MgJj0gfk1FU0hfUEFUSF9BQ1RJVkU7CiAJCQkrK21wYXRoLT5zbjsKIAkJCXNwaW5fdW5sb2NrX2JoKCZtcGF0aC0+c3RhdGVfbG9jayk7Ci0JCQltZXNoX3BhdGhfZXJyb3JfdHgoTUVTSF9UVEwsIG1wYXRoLT5kc3QsCi0JCQkJCWNwdV90b19sZTMyKG1wYXRoLT5zbiksCisJCQltZXNoX3BhdGhfZXJyb3JfdHgoc2RhdGEtPnUubWVzaC5tc2hjZmcuZWxlbWVudF90dGwsCisJCQkJCW1wYXRoLT5kc3QsIGNwdV90b19sZTMyKG1wYXRoLT5zbiksCiAJCQkJCWNwdV90b19sZTE2KFBFUlJfUkNPREVfREVTVF9VTlJFQUNIKSwKIAkJCQkJYmNhc3QsIHNkYXRhKTsKIAkJfSBlbHNlCkBAIC02MTQsNyArNjE0LDggQEAKIAkJbXBhdGggPSBtZXNoX3BhdGhfbG9va3VwKGRhLCBzZGF0YSk7CiAJCWlmIChtcGF0aCkKIAkJCXNuID0gKyttcGF0aC0+c247Ci0JCW1lc2hfcGF0aF9lcnJvcl90eChNRVNIX1RUTCwgc2tiLT5kYXRhLCBjcHVfdG9fbGUzMihzbiksCisJCW1lc2hfcGF0aF9lcnJvcl90eChzZGF0YS0+dS5tZXNoLm1zaGNmZy5lbGVtZW50X3R0bCwgc2tiLT5kYXRhLAorCQkJCSAgIGNwdV90b19sZTMyKHNuKSwKIAkJCQkgICBjcHVfdG9fbGUxNihQRVJSX1JDT0RFX05PX1JPVVRFKSwgcmEsIHNkYXRhKTsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tZXNoX3BsaW5rLmMgYi9uZXQvbWFjODAyMTEvbWVzaF9wbGluay5jCmluZGV4IDFjOTFmMGYuLjQ0YjUzOTMgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9tZXNoX3BsaW5rLmMKKysrIGIvbmV0L21hYzgwMjExL21lc2hfcGxpbmsuYwpAQCAtMTYwLDcgKzE2MCw4IEBACiAJCWVudW0gcGxpbmtfZnJhbWVfdHlwZSBhY3Rpb24sIHU4ICpkYSwgX19sZTE2IGxsaWQsIF9fbGUxNiBwbGlkLAogCQlfX2xlMTYgcmVhc29uKSB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGRldl9hbGxvY19za2IobG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tICsgNDAwKTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gZGV2X2FsbG9jX3NrYihsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20gKyA0MDAgKworCQkJc2RhdGEtPnUubWVzaC52ZW5kb3JfaWVfbGVuKTsKIAlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7CiAJYm9vbCBpbmNsdWRlX3BsaWQgPSBmYWxzZTsKIAlzdGF0aWMgY29uc3QgdTggbWVzaHBlZXJpbmdwcm90b1tdID0geyAweDAwLCAweDBGLCAweEFDLCAweDJBIH07CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvbWxtZS5jIGIvbmV0L21hYzgwMjExL21sbWUuYwppbmRleCBhM2E5NDIxLi40NWZiYjllIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvbWxtZS5jCisrKyBiL25ldC9tYWM4MDIxMS9tbG1lLmMKQEAgLTI4LDEzICsyOCwxOSBAQAogI2luY2x1ZGUgInJhdGUuaCIKICNpbmNsdWRlICJsZWQuaCIKIAorI2RlZmluZSBJRUVFODAyMTFfTUFYX05VTExGVU5DX1RSSUVTIDIKICNkZWZpbmUgSUVFRTgwMjExX01BWF9QUk9CRV9UUklFUyA1CiAKIC8qCi0gKiBiZWFjb24gbG9zcyBkZXRlY3Rpb24gdGltZW91dAotICogWFhYOiBzaG91bGQgZGVwZW5kIG9uIGJlYWNvbiBpbnRlcnZhbAorICogQmVhY29uIGxvc3MgdGltZW91dCBpcyBjYWxjdWxhdGVkIGFzIE4gZnJhbWVzIHRpbWVzIHRoZQorICogYWR2ZXJ0aXNlZCBiZWFjb24gaW50ZXJ2YWwuICBUaGlzIG1heSBuZWVkIHRvIGJlIHNvbWV3aGF0CisgKiBoaWdoZXIgdGhhbiB3aGF0IGhhcmR3YXJlIG1pZ2h0IGRldGVjdCB0byBhY2NvdW50IGZvcgorICogZGVsYXlzIGluIHRoZSBob3N0IHByb2Nlc3NpbmcgZnJhbWVzLiBCdXQgc2luY2Ugd2UgYWxzbworICogcHJvYmUgb24gYmVhY29uIG1pc3MgYmVmb3JlIGRlY2xhcmluZyB0aGUgY29ubmVjdGlvbiBsb3N0CisgKiBkZWZhdWx0IHRvIHdoYXQgd2Ugd2FudC4KICAqLwotI2RlZmluZSBJRUVFODAyMTFfQkVBQ09OX0xPU1NfVElNRQkoMiAqIEhaKQorI2RlZmluZSBJRUVFODAyMTFfQkVBQ09OX0xPU1NfQ09VTlQJNworCiAvKgogICogVGltZSB0aGUgY29ubmVjdGlvbiBjYW4gYmUgaWRsZSBiZWZvcmUgd2UgcHJvYmUKICAqIGl0IHRvIHNlZSBpZiB3ZSBjYW4gc3RpbGwgdGFsayB0byB0aGUgQVAuCkBAIC0xMjEsNyArMTI3LDcgQEAKIAkJcmV0dXJuOwogCiAJbW9kX3RpbWVyKCZzZGF0YS0+dS5tZ2QuYmNuX21vbl90aW1lciwKLQkJICByb3VuZF9qaWZmaWVzX3VwKGppZmZpZXMgKyBJRUVFODAyMTFfQkVBQ09OX0xPU1NfVElNRSkpOworCQkgIHJvdW5kX2ppZmZpZXNfdXAoamlmZmllcyArIHNkYXRhLT51Lm1nZC5iZWFjb25fdGltZW91dCkpOwogfQogCiB2b2lkIGllZWU4MDIxMV9zdGFfcmVzZXRfY29ubl9tb25pdG9yKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQpAQCAtNjE5LDExICs2MjUsMTIgQEAKIAkJCS8qCiAJCQkgKiBHbyB0byBmdWxsIFBTTSBpZiB0aGUgdXNlciBjb25maWd1cmVzIGEgdmVyeSBsb3cKIAkJCSAqIGxhdGVuY3kgcmVxdWlyZW1lbnQuCi0JCQkgKiBUaGUgMiBzZWNvbmQgdmFsdWUgaXMgdGhlcmUgZm9yIGNvbXBhdGliaWxpdHkgdW50aWwKLQkJCSAqIHRoZSBQTV9RT1NfTkVUV09SS19MQVRFTkNZIGlzIGNvbmZpZ3VyZWQgd2l0aCByZWFsCi0JCQkgKiB2YWx1ZXMuCisJCQkgKiBUaGUgMjAwMCBzZWNvbmQgdmFsdWUgaXMgdGhlcmUgZm9yIGNvbXBhdGliaWxpdHkKKwkJCSAqIHVudGlsIHRoZSBQTV9RT1NfTkVUV09SS19MQVRFTkNZIGlzIGNvbmZpZ3VyZWQKKwkJCSAqIHdpdGggcmVhbCB2YWx1ZXMuCiAJCQkgKi8KLQkJCWlmIChsYXRlbmN5ID4gMTkwMDAwMDAwMCAmJiBsYXRlbmN5ICE9IDIwMDAwMDAwMDApCisJCQlpZiAobGF0ZW5jeSA+ICgxOTAwICogVVNFQ19QRVJfTVNFQykgJiYKKwkJCSAgICBsYXRlbmN5ICE9ICgyMDAwICogVVNFQ19QRVJfU0VDKSkKIAkJCQl0aW1lb3V0ID0gMDsKIAkJCWVsc2UKIAkJCQl0aW1lb3V0ID0gMTAwOwpAQCAtODcxLDYgKzg3OCw5IEBACiAJYnNzX2luZm9fY2hhbmdlZCB8PSBpZWVlODAyMTFfaGFuZGxlX2Jzc19jYXBhYmlsaXR5KHNkYXRhLAogCQljYnNzLT5jYXBhYmlsaXR5LCBic3MtPmhhc19lcnBfdmFsdWUsIGJzcy0+ZXJwX3ZhbHVlKTsKIAorCXNkYXRhLT51Lm1nZC5iZWFjb25fdGltZW91dCA9IHVzZWNzX3RvX2ppZmZpZXMoaWVlZTgwMjExX3R1X3RvX3VzZWMoCisJCUlFRUU4MDIxMV9CRUFDT05fTE9TU19DT1VOVCAqIGJzc19jb25mLT5iZWFjb25faW50KSk7CisKIAlzZGF0YS0+dS5tZ2QuYXNzb2NpYXRlZCA9IGNic3M7CiAJbWVtY3B5KHNkYXRhLT51Lm1nZC5ic3NpZCwgY2Jzcy0+YnNzaWQsIEVUSF9BTEVOKTsKIApAQCAtMTAyNiw2ICsxMDM2LDU0IEBACiAJaWVlZTgwMjExX3N0YV9yZXNldF9jb25uX21vbml0b3Ioc2RhdGEpOwogfQogCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfcmVzZXRfYXBfcHJvYmUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCit7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CisKKwlpZiAoIShpZm1nZC0+ZmxhZ3MgJiAoSUVFRTgwMjExX1NUQV9CRUFDT05fUE9MTCB8CisJCQkgICAgICBJRUVFODAyMTFfU1RBX0NPTk5FQ1RJT05fUE9MTCkpKQorCSAgICByZXR1cm47CisKKwlpZm1nZC0+ZmxhZ3MgJj0gfihJRUVFODAyMTFfU1RBX0NPTk5FQ1RJT05fUE9MTCB8CisJCQkgIElFRUU4MDIxMV9TVEFfQkVBQ09OX1BPTEwpOworCW11dGV4X2xvY2soJnNkYXRhLT5sb2NhbC0+aWZsaXN0X210eCk7CisJaWVlZTgwMjExX3JlY2FsY19wcyhzZGF0YS0+bG9jYWwsIC0xKTsKKwltdXRleF91bmxvY2soJnNkYXRhLT5sb2NhbC0+aWZsaXN0X210eCk7CisKKwlpZiAoc2RhdGEtPmxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19DT05ORUNUSU9OX01PTklUT1IpCisJCXJldHVybjsKKworCS8qCisJICogV2UndmUgcmVjZWl2ZWQgYSBwcm9iZSByZXNwb25zZSwgYnV0IGFyZSBub3Qgc3VyZSB3aGV0aGVyCisJICogd2UgaGF2ZSBvciB3aWxsIGJlIHJlY2VpdmluZyBhbnkgYmVhY29ucyBvciBkYXRhLCBzbyBsZXQncworCSAqIHNjaGVkdWxlIHRoZSB0aW1lcnMgYWdhaW4sIGp1c3QgaW4gY2FzZS4KKwkgKi8KKwlpZWVlODAyMTFfc3RhX3Jlc2V0X2JlYWNvbl9tb25pdG9yKHNkYXRhKTsKKworCW1vZF90aW1lcigmaWZtZ2QtPmNvbm5fbW9uX3RpbWVyLAorCQkgIHJvdW5kX2ppZmZpZXNfdXAoamlmZmllcyArCisJCQkJICAgSUVFRTgwMjExX0NPTk5FQ1RJT05fSURMRV9USU1FKSk7Cit9CisKK3ZvaWQgaWVlZTgwMjExX3N0YV90eF9ub3RpZnkoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsIGJvb2wgYWNrKQoreworCWlmICghaWVlZTgwMjExX2lzX2RhdGEoaGRyLT5mcmFtZV9jb250cm9sKSkKKwkgICAgcmV0dXJuOworCisJaWYgKGFjaykKKwkJaWVlZTgwMjExX3N0YV9yZXNldF9jb25uX21vbml0b3Ioc2RhdGEpOworCisJaWYgKGllZWU4MDIxMV9pc19udWxsZnVuYyhoZHItPmZyYW1lX2NvbnRyb2wpICYmCisJICAgIHNkYXRhLT51Lm1nZC5wcm9iZV9zZW5kX2NvdW50ID4gMCkgeworCQlpZiAoYWNrKQorCQkJc2RhdGEtPnUubWdkLnByb2JlX3NlbmRfY291bnQgPSAwOworCQllbHNlCisJCQlzZGF0YS0+dS5tZ2QubnVsbGZ1bmNfZmFpbGVkID0gdHJ1ZTsKKwkJaWVlZTgwMjExX3F1ZXVlX3dvcmsoJnNkYXRhLT5sb2NhbC0+aHcsICZzZGF0YS0+d29yayk7CisJfQorfQorCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfbWdkX3Byb2JlX2FwX3NlbmQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CkBAIC0xMDQxLDggKzEwOTksMjAgQEAKIAlpZiAoaWZtZ2QtPnByb2JlX3NlbmRfY291bnQgPj0gdW5pY2FzdF9saW1pdCkKIAkJZHN0ID0gTlVMTDsKIAotCXNzaWQgPSBpZWVlODAyMTFfYnNzX2dldF9pZShpZm1nZC0+YXNzb2NpYXRlZCwgV0xBTl9FSURfU1NJRCk7Ci0JaWVlZTgwMjExX3NlbmRfcHJvYmVfcmVxKHNkYXRhLCBkc3QsIHNzaWQgKyAyLCBzc2lkWzFdLCBOVUxMLCAwKTsKKwkvKgorCSAqIFdoZW4gdGhlIGhhcmR3YXJlIHJlcG9ydHMgYW4gYWNjdXJhdGUgVHggQUNLIHN0YXR1cywgaXQncworCSAqIGJldHRlciB0byBzZW5kIGEgbnVsbGZ1bmMgZnJhbWUgaW5zdGVhZCBvZiBhIHByb2JlIHJlcXVlc3QsCisJICogYXMgaXQgd2lsbCBraWNrIHVzIG9mZiB0aGUgQVAgcXVpY2tseSBpZiB3ZSBhcmVuJ3QgYXNzb2NpYXRlZAorCSAqIGFueW1vcmUuIFRoZSB0aW1lb3V0IHdpbGwgYmUgcmVzZXQgaWYgdGhlIGZyYW1lIGlzIEFDS2VkIGJ5CisJICogdGhlIEFQLgorCSAqLworCWlmIChzZGF0YS0+bG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1JFUE9SVFNfVFhfQUNLX1NUQVRVUykgeworCQlpZm1nZC0+bnVsbGZ1bmNfZmFpbGVkID0gZmFsc2U7CisJCWllZWU4MDIxMV9zZW5kX251bGxmdW5jKHNkYXRhLT5sb2NhbCwgc2RhdGEsIDApOworCX0gZWxzZSB7CisJCXNzaWQgPSBpZWVlODAyMTFfYnNzX2dldF9pZShpZm1nZC0+YXNzb2NpYXRlZCwgV0xBTl9FSURfU1NJRCk7CisJCWllZWU4MDIxMV9zZW5kX3Byb2JlX3JlcShzZGF0YSwgZHN0LCBzc2lkICsgMiwgc3NpZFsxXSwgTlVMTCwgMCk7CisJfQogCiAJaWZtZ2QtPnByb2JlX3NlbmRfY291bnQrKzsKIAlpZm1nZC0+cHJvYmVfdGltZW91dCA9IGppZmZpZXMgKyBJRUVFODAyMTFfUFJPQkVfV0FJVDsKQEAgLTExMDgsNiArMTE3OCwzMCBAQAogCW11dGV4X3VubG9jaygmaWZtZ2QtPm10eCk7CiB9CiAKK3N0cnVjdCBza19idWZmICppZWVlODAyMTFfYXBfcHJvYmVyZXFfZ2V0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQkgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCit7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSB2aWZfdG9fc2RhdGEodmlmKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCWNvbnN0IHU4ICpzc2lkOworCisJaWYgKFdBUk5fT04oc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pKQorCQlyZXR1cm4gTlVMTDsKKworCUFTU0VSVF9NR0RfTVRYKGlmbWdkKTsKKworCWlmICghaWZtZ2QtPmFzc29jaWF0ZWQpCisJCXJldHVybiBOVUxMOworCisJc3NpZCA9IGllZWU4MDIxMV9ic3NfZ2V0X2llKGlmbWdkLT5hc3NvY2lhdGVkLCBXTEFOX0VJRF9TU0lEKTsKKwlza2IgPSBpZWVlODAyMTFfYnVpbGRfcHJvYmVfcmVxKHNkYXRhLCBpZm1nZC0+YXNzb2NpYXRlZC0+YnNzaWQsCisJCQkJCXNzaWQgKyAyLCBzc2lkWzFdLCBOVUxMLCAwKTsKKworCXJldHVybiBza2I7Cit9CitFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9hcF9wcm9iZXJlcV9nZXQpOworCiBzdGF0aWMgdm9pZCBfX2llZWU4MDIxMV9jb25uZWN0aW9uX2xvc3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CkBAIC0xNDg1LDI5ICsxNTc5LDggQEAKIAlpZWVlODAyMTFfcnhfYnNzX2luZm8oc2RhdGEsIG1nbXQsIGxlbiwgcnhfc3RhdHVzLCAmZWxlbXMsIGZhbHNlKTsKIAogCWlmIChpZm1nZC0+YXNzb2NpYXRlZCAmJgotCSAgICBtZW1jbXAobWdtdC0+YnNzaWQsIGlmbWdkLT5hc3NvY2lhdGVkLT5ic3NpZCwgRVRIX0FMRU4pID09IDAgJiYKLQkgICAgaWZtZ2QtPmZsYWdzICYgKElFRUU4MDIxMV9TVEFfQkVBQ09OX1BPTEwgfAotCQkJICAgIElFRUU4MDIxMV9TVEFfQ09OTkVDVElPTl9QT0xMKSkgewotCQlpZm1nZC0+ZmxhZ3MgJj0gfihJRUVFODAyMTFfU1RBX0NPTk5FQ1RJT05fUE9MTCB8Ci0JCQkJICBJRUVFODAyMTFfU1RBX0JFQUNPTl9QT0xMKTsKLQkJbXV0ZXhfbG9jaygmc2RhdGEtPmxvY2FsLT5pZmxpc3RfbXR4KTsKLQkJaWVlZTgwMjExX3JlY2FsY19wcyhzZGF0YS0+bG9jYWwsIC0xKTsKLQkJbXV0ZXhfdW5sb2NrKCZzZGF0YS0+bG9jYWwtPmlmbGlzdF9tdHgpOwotCi0JCWlmIChzZGF0YS0+bG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX0NPTk5FQ1RJT05fTU9OSVRPUikKLQkJCXJldHVybjsKLQotCQkvKgotCQkgKiBXZSd2ZSByZWNlaXZlZCBhIHByb2JlIHJlc3BvbnNlLCBidXQgYXJlIG5vdCBzdXJlIHdoZXRoZXIKLQkJICogd2UgaGF2ZSBvciB3aWxsIGJlIHJlY2VpdmluZyBhbnkgYmVhY29ucyBvciBkYXRhLCBzbyBsZXQncwotCQkgKiBzY2hlZHVsZSB0aGUgdGltZXJzIGFnYWluLCBqdXN0IGluIGNhc2UuCi0JCSAqLwotCQlpZWVlODAyMTFfc3RhX3Jlc2V0X2JlYWNvbl9tb25pdG9yKHNkYXRhKTsKLQotCQltb2RfdGltZXIoJmlmbWdkLT5jb25uX21vbl90aW1lciwKLQkJCSAgcm91bmRfamlmZmllc191cChqaWZmaWVzICsKLQkJCQkJICAgSUVFRTgwMjExX0NPTk5FQ1RJT05fSURMRV9USU1FKSk7Ci0JfQorCSAgICBtZW1jbXAobWdtdC0+YnNzaWQsIGlmbWdkLT5hc3NvY2lhdGVkLT5ic3NpZCwgRVRIX0FMRU4pID09IDApCisJCWllZWU4MDIxMV9yZXNldF9hcF9wcm9iZShzZGF0YSk7CiB9CiAKIC8qCkBAIC0xODQ1LDYgKzE5MTgsMzEgQEAKIAlpZWVlODAyMTFfcXVldWVfd29yaygmbG9jYWwtPmh3LCAmc2RhdGEtPndvcmspOwogfQogCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfc3RhX2Nvbm5lY3Rpb25fbG9zdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCQkJICB1OCAqYnNzaWQpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CisKKwlpZm1nZC0+ZmxhZ3MgJj0gfihJRUVFODAyMTFfU1RBX0NPTk5FQ1RJT05fUE9MTCB8CisJCQkgIElFRUU4MDIxMV9TVEFfQkVBQ09OX1BPTEwpOworCisJaWVlZTgwMjExX3NldF9kaXNhc3NvYyhzZGF0YSwgdHJ1ZSwgdHJ1ZSk7CisJbXV0ZXhfdW5sb2NrKCZpZm1nZC0+bXR4KTsKKwltdXRleF9sb2NrKCZsb2NhbC0+bXR4KTsKKwlpZWVlODAyMTFfcmVjYWxjX2lkbGUobG9jYWwpOworCW11dGV4X3VubG9jaygmbG9jYWwtPm10eCk7CisJLyoKKwkgKiBtdXN0IGJlIG91dHNpZGUgbG9jayBkdWUgdG8gY2ZnODAyMTEsCisJICogYnV0IHRoYXQncyBub3QgYSBwcm9ibGVtLgorCSAqLworCWllZWU4MDIxMV9zZW5kX2RlYXV0aF9kaXNhc3NvYyhzZGF0YSwgYnNzaWQsCisJCQlJRUVFODAyMTFfU1RZUEVfREVBVVRILAorCQkJV0xBTl9SRUFTT05fRElTQVNTT0NfRFVFX1RPX0lOQUNUSVZJVFksCisJCQlOVUxMLCB0cnVlKTsKKwltdXRleF9sb2NrKCZpZm1nZC0+bXR4KTsKK30KKwogdm9pZCBpZWVlODAyMTFfc3RhX3dvcmsoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CkBAIC0xODU3LDEyICsxOTU1LDQ5IEBACiAJCQkgICAgSUVFRTgwMjExX1NUQV9DT05ORUNUSU9OX1BPTEwpICYmCiAJICAgIGlmbWdkLT5hc3NvY2lhdGVkKSB7CiAJCXU4IGJzc2lkW0VUSF9BTEVOXTsKKwkJaW50IG1heF90cmllczsKIAogCQltZW1jcHkoYnNzaWQsIGlmbWdkLT5hc3NvY2lhdGVkLT5ic3NpZCwgRVRIX0FMRU4pOwotCQlpZiAodGltZV9pc19hZnRlcl9qaWZmaWVzKGlmbWdkLT5wcm9iZV90aW1lb3V0KSkKLQkJCXJ1bl9hZ2FpbihpZm1nZCwgaWZtZ2QtPnByb2JlX3RpbWVvdXQpOwogCi0JCWVsc2UgaWYgKGlmbWdkLT5wcm9iZV9zZW5kX2NvdW50IDwgSUVFRTgwMjExX01BWF9QUk9CRV9UUklFUykgeworCQlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1JFUE9SVFNfVFhfQUNLX1NUQVRVUykKKwkJCW1heF90cmllcyA9IElFRUU4MDIxMV9NQVhfTlVMTEZVTkNfVFJJRVM7CisJCWVsc2UKKwkJCW1heF90cmllcyA9IElFRUU4MDIxMV9NQVhfUFJPQkVfVFJJRVM7CisKKwkJLyogQUNLIHJlY2VpdmVkIGZvciBudWxsZnVuYyBwcm9iaW5nIGZyYW1lICovCisJCWlmICghaWZtZ2QtPnByb2JlX3NlbmRfY291bnQpCisJCQlpZWVlODAyMTFfcmVzZXRfYXBfcHJvYmUoc2RhdGEpOworCQllbHNlIGlmIChpZm1nZC0+bnVsbGZ1bmNfZmFpbGVkKSB7CisJCQlpZiAoaWZtZ2QtPnByb2JlX3NlbmRfY291bnQgPCBtYXhfdHJpZXMpIHsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9ERUJVRworCQkJCXdpcGh5X2RlYnVnKGxvY2FsLT5ody53aXBoeSwKKwkJCQkJICAgICIlczogTm8gYWNrIGZvciBudWxsZnVuYyBmcmFtZSB0byIKKwkJCQkJICAgICIgQVAgJXBNLCB0cnkgJWRcbiIsCisJCQkJCSAgICBzZGF0YS0+bmFtZSwgYnNzaWQsCisJCQkJCSAgICBpZm1nZC0+cHJvYmVfc2VuZF9jb3VudCk7CisjZW5kaWYKKwkJCQlpZWVlODAyMTFfbWdkX3Byb2JlX2FwX3NlbmQoc2RhdGEpOworCQkJfSBlbHNlIHsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9ERUJVRworCQkJCXdpcGh5X2RlYnVnKGxvY2FsLT5ody53aXBoeSwKKwkJCQkJICAgICIlczogTm8gYWNrIGZvciBudWxsZnVuYyBmcmFtZSB0byIKKwkJCQkJICAgICIgQVAgJXBNLCBkaXNjb25uZWN0aW5nLlxuIiwKKwkJCQkJICAgIHNkYXRhLT5uYW1lLCBic3NpZCk7CisjZW5kaWYKKwkJCQlpZWVlODAyMTFfc3RhX2Nvbm5lY3Rpb25fbG9zdChzZGF0YSwgYnNzaWQpOworCQkJfQorCQl9IGVsc2UgaWYgKHRpbWVfaXNfYWZ0ZXJfamlmZmllcyhpZm1nZC0+cHJvYmVfdGltZW91dCkpCisJCQlydW5fYWdhaW4oaWZtZ2QsIGlmbWdkLT5wcm9iZV90aW1lb3V0KTsKKwkJZWxzZSBpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1JFUE9SVFNfVFhfQUNLX1NUQVRVUykgeworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9WRVJCT1NFX0RFQlVHCisJCQl3aXBoeV9kZWJ1Zyhsb2NhbC0+aHcud2lwaHksCisJCQkJICAgICIlczogRmFpbGVkIHRvIHNlbmQgbnVsbGZ1bmMgdG8gQVAgJXBNIgorCQkJCSAgICAiIGFmdGVyICVkbXMsIGRpc2Nvbm5lY3RpbmcuXG4iLAorCQkJCSAgICBzZGF0YS0+bmFtZSwKKwkJCQkgICAgYnNzaWQsICgxMDAwICogSUVFRTgwMjExX1BST0JFX1dBSVQpL0haKTsKKyNlbmRpZgorCQkJaWVlZTgwMjExX3N0YV9jb25uZWN0aW9uX2xvc3Qoc2RhdGEsIGJzc2lkKTsKKwkJfSBlbHNlIGlmIChpZm1nZC0+cHJvYmVfc2VuZF9jb3VudCA8IG1heF90cmllcykgewogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9WRVJCT1NFX0RFQlVHCiAJCQl3aXBoeV9kZWJ1Zyhsb2NhbC0+aHcud2lwaHksCiAJCQkJICAgICIlczogTm8gcHJvYmUgcmVzcG9uc2UgZnJvbSBBUCAlcE0iCkBAIC0xODc3LDI3ICsyMDEyLDEzIEBACiAJCQkgKiBXZSBhY3R1YWxseSBsb3N0IHRoZSBjb25uZWN0aW9uIC4uLiBvciBkaWQgd2U/CiAJCQkgKiBMZXQncyBtYWtlIHN1cmUhCiAJCQkgKi8KLQkJCWlmbWdkLT5mbGFncyAmPSB+KElFRUU4MDIxMV9TVEFfQ09OTkVDVElPTl9QT0xMIHwKLQkJCQkJICBJRUVFODAyMTFfU1RBX0JFQUNPTl9QT0xMKTsKIAkJCXdpcGh5X2RlYnVnKGxvY2FsLT5ody53aXBoeSwKIAkJCQkgICAgIiVzOiBObyBwcm9iZSByZXNwb25zZSBmcm9tIEFQICVwTSIKIAkJCQkgICAgIiBhZnRlciAlZG1zLCBkaXNjb25uZWN0aW5nLlxuIiwKIAkJCQkgICAgc2RhdGEtPm5hbWUsCiAJCQkJICAgIGJzc2lkLCAoMTAwMCAqIElFRUU4MDIxMV9QUk9CRV9XQUlUKS9IWik7Ci0JCQlpZWVlODAyMTFfc2V0X2Rpc2Fzc29jKHNkYXRhLCB0cnVlLCB0cnVlKTsKLQkJCW11dGV4X3VubG9jaygmaWZtZ2QtPm10eCk7Ci0JCQltdXRleF9sb2NrKCZsb2NhbC0+bXR4KTsKLQkJCWllZWU4MDIxMV9yZWNhbGNfaWRsZShsb2NhbCk7Ci0JCQltdXRleF91bmxvY2soJmxvY2FsLT5tdHgpOwotCQkJLyoKLQkJCSAqIG11c3QgYmUgb3V0c2lkZSBsb2NrIGR1ZSB0byBjZmc4MDIxMSwKLQkJCSAqIGJ1dCB0aGF0J3Mgbm90IGEgcHJvYmxlbS4KLQkJCSAqLwotCQkJaWVlZTgwMjExX3NlbmRfZGVhdXRoX2Rpc2Fzc29jKHNkYXRhLCBic3NpZCwKLQkJCQkJSUVFRTgwMjExX1NUWVBFX0RFQVVUSCwKLQkJCQkJV0xBTl9SRUFTT05fRElTQVNTT0NfRFVFX1RPX0lOQUNUSVZJVFksCi0JCQkJCU5VTEwsIHRydWUpOwotCQkJbXV0ZXhfbG9jaygmaWZtZ2QtPm10eCk7CisKKwkJCWllZWU4MDIxMV9zdGFfY29ubmVjdGlvbl9sb3N0KHNkYXRhLCBic3NpZCk7CiAJCX0KIAl9CiAKQEAgLTE5ODgsNiArMjEwOSw4IEBACiAJCWFkZF90aW1lcigmaWZtZ2QtPnRpbWVyKTsKIAlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFRNUl9SVU5OSU5HX0NIQU5TVywgJmlmbWdkLT50aW1lcnNfcnVubmluZykpCiAJCWFkZF90aW1lcigmaWZtZ2QtPmNoc3dpdGNoX3RpbWVyKTsKKwlpZWVlODAyMTFfc3RhX3Jlc2V0X2JlYWNvbl9tb25pdG9yKHNkYXRhKTsKKwlpZWVlODAyMTFfcmVzdGFydF9zdGFfdGltZXIoc2RhdGEpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmMgYi9uZXQvbWFjODAyMTEvb2ZmY2hhbm5lbC5jCmluZGV4IDRiNTY0MDkuLmI0ZTUyNjcgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmMKKysrIGIvbmV0L21hYzgwMjExL29mZmNoYW5uZWwuYwpAQCAtMTQsNiArMTQsNyBAQAogICovCiAjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CiAjaW5jbHVkZSAiaWVlZTgwMjExX2kuaCIKKyNpbmNsdWRlICJkcml2ZXItdHJhY2UuaCIKIAogLyoKICAqIGluZm9ybSBBUCB0aGF0IHdlIHdpbGwgZ28gdG8gc2xlZXAgc28gdGhhdCBpdCB3aWxsIGJ1ZmZlciB0aGUgZnJhbWVzCkBAIC0xOTAsMyArMTkxLDg3IEBACiAJfQogCW11dGV4X3VubG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOwogfQorCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfaHdfcm9jX3N0YXJ0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsLCBod19yb2Nfc3RhcnQpOworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOworCisJbXV0ZXhfbG9jaygmbG9jYWwtPm10eCk7CisKKwlpZiAoIWxvY2FsLT5od19yb2NfY2hhbm5lbCkgeworCQltdXRleF91bmxvY2soJmxvY2FsLT5tdHgpOworCQlyZXR1cm47CisJfQorCisJaWVlZTgwMjExX3JlY2FsY19pZGxlKGxvY2FsKTsKKworCWlmIChsb2NhbC0+aHdfcm9jX3NrYikgeworCQlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGxvY2FsLT5od19yb2NfZGV2KTsKKwkJaWVlZTgwMjExX3R4X3NrYihzZGF0YSwgbG9jYWwtPmh3X3JvY19za2IpOworCQlsb2NhbC0+aHdfcm9jX3NrYiA9IE5VTEw7CisJfSBlbHNlIHsKKwkJY2ZnODAyMTFfcmVhZHlfb25fY2hhbm5lbChsb2NhbC0+aHdfcm9jX2RldiwKKwkJCQkJICBsb2NhbC0+aHdfcm9jX2Nvb2tpZSwKKwkJCQkJICBsb2NhbC0+aHdfcm9jX2NoYW5uZWwsCisJCQkJCSAgbG9jYWwtPmh3X3JvY19jaGFubmVsX3R5cGUsCisJCQkJCSAgbG9jYWwtPmh3X3JvY19kdXJhdGlvbiwKKwkJCQkJICBHRlBfS0VSTkVMKTsKKwl9CisKKwltdXRleF91bmxvY2soJmxvY2FsLT5tdHgpOworfQorCit2b2lkIGllZWU4MDIxMV9yZWFkeV9vbl9jaGFubmVsKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOworCisJdHJhY2VfYXBpX3JlYWR5X29uX2NoYW5uZWwobG9jYWwpOworCisJaWVlZTgwMjExX3F1ZXVlX3dvcmsoaHcsICZsb2NhbC0+aHdfcm9jX3N0YXJ0KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGllZWU4MDIxMV9yZWFkeV9vbl9jaGFubmVsKTsKKworc3RhdGljIHZvaWQgaWVlZTgwMjExX2h3X3JvY19kb25lKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsLCBod19yb2NfZG9uZSk7CisKKwltdXRleF9sb2NrKCZsb2NhbC0+bXR4KTsKKworCWlmICghbG9jYWwtPmh3X3JvY19jaGFubmVsKSB7CisJCW11dGV4X3VubG9jaygmbG9jYWwtPm10eCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoIWxvY2FsLT5od19yb2NfZm9yX3R4KQorCQljZmc4MDIxMV9yZW1haW5fb25fY2hhbm5lbF9leHBpcmVkKGxvY2FsLT5od19yb2NfZGV2LAorCQkJCQkJICAgbG9jYWwtPmh3X3JvY19jb29raWUsCisJCQkJCQkgICBsb2NhbC0+aHdfcm9jX2NoYW5uZWwsCisJCQkJCQkgICBsb2NhbC0+aHdfcm9jX2NoYW5uZWxfdHlwZSwKKwkJCQkJCSAgIEdGUF9LRVJORUwpOworCisJbG9jYWwtPmh3X3JvY19jaGFubmVsID0gTlVMTDsKKwlsb2NhbC0+aHdfcm9jX2Nvb2tpZSA9IDA7CisKKwlpZWVlODAyMTFfcmVjYWxjX2lkbGUobG9jYWwpOworCisJbXV0ZXhfdW5sb2NrKCZsb2NhbC0+bXR4KTsKK30KKwordm9pZCBpZWVlODAyMTFfcmVtYWluX29uX2NoYW5uZWxfZXhwaXJlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsKKworCXRyYWNlX2FwaV9yZW1haW5fb25fY2hhbm5lbF9leHBpcmVkKGxvY2FsKTsKKworCWllZWU4MDIxMV9xdWV1ZV93b3JrKGh3LCAmbG9jYWwtPmh3X3JvY19kb25lKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGllZWU4MDIxMV9yZW1haW5fb25fY2hhbm5lbF9leHBpcmVkKTsKKwordm9pZCBpZWVlODAyMTFfaHdfcm9jX3NldHVwKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKQoreworCUlOSVRfV09SSygmbG9jYWwtPmh3X3JvY19zdGFydCwgaWVlZTgwMjExX2h3X3JvY19zdGFydCk7CisJSU5JVF9XT1JLKCZsb2NhbC0+aHdfcm9jX2RvbmUsIGllZWU4MDIxMV9od19yb2NfZG9uZSk7Cit9CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvcmF0ZS5jIGIvbmV0L21hYzgwMjExL3JhdGUuYwppbmRleCAzM2Y3Njk5Li4zZDVhMmNiIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvcmF0ZS5jCisrKyBiL25ldC9tYWM4MDIxMS9yYXRlLmMKQEAgLTIxMSw3ICsyMTEsOCBAQAogCXJldHVybiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSykgfHwgIWllZWU4MDIxMV9pc19kYXRhKGZjKTsKIH0KIAotc3RhdGljIHZvaWQgcmNfc2VuZF9sb3dfYnJvYWRjYXN0KHM4ICppZHgsIHUzMiBiYXNpY19yYXRlcywgdTggbWF4X3JhdGVfaWR4KQorc3RhdGljIHZvaWQgcmNfc2VuZF9sb3dfYnJvYWRjYXN0KHM4ICppZHgsIHUzMiBiYXNpY19yYXRlcywKKwkJCQkgIHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kKQogewogCXU4IGk7CiAKQEAgLTIyMiw3ICsyMjMsNyBAQAogCWlmIChiYXNpY19yYXRlcyAmICgxIDw8ICppZHgpKQogCQlyZXR1cm47IC8qIHNlbGVjdGVkIHJhdGUgaXMgYSBiYXNpYyByYXRlICovCiAKLQlmb3IgKGkgPSAqaWR4ICsgMTsgaSA8PSBtYXhfcmF0ZV9pZHg7IGkrKykgeworCWZvciAoaSA9ICppZHggKyAxOyBpIDw9IHNiYW5kLT5uX2JpdHJhdGVzOyBpKyspIHsKIAkJaWYgKGJhc2ljX3JhdGVzICYgKDEgPDwgaSkpIHsKIAkJCSppZHggPSBpOwogCQkJcmV0dXJuOwpAQCAtMjM3LDE2ICsyMzgsMjUgQEAKIAkJCSAgIHN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZV9jb250cm9sICp0eHJjKQogewogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IodHhyYy0+c2tiKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCA9IHR4cmMtPnNiYW5kOworCWludCBtY2FzdF9yYXRlOwogCiAJaWYgKCFzdGEgfHwgIXByaXZfc3RhIHx8IHJjX25vX2RhdGFfb3Jfbm9fYWNrKHR4cmMpKSB7CiAJCWluZm8tPmNvbnRyb2wucmF0ZXNbMF0uaWR4ID0gcmF0ZV9sb3dlc3RfaW5kZXgodHhyYy0+c2JhbmQsIHN0YSk7CiAJCWluZm8tPmNvbnRyb2wucmF0ZXNbMF0uY291bnQgPQogCQkJKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9OT19BQ0spID8KIAkJCTEgOiB0eHJjLT5ody0+bWF4X3JhdGVfdHJpZXM7Ci0JCWlmICghc3RhICYmIHR4cmMtPmFwKQorCQlpZiAoIXN0YSAmJiB0eHJjLT5ic3MpIHsKKwkJCW1jYXN0X3JhdGUgPSB0eHJjLT5ic3NfY29uZi0+bWNhc3RfcmF0ZVtzYmFuZC0+YmFuZF07CisJCQlpZiAobWNhc3RfcmF0ZSA+IDApIHsKKwkJCQlpbmZvLT5jb250cm9sLnJhdGVzWzBdLmlkeCA9IG1jYXN0X3JhdGUgLSAxOworCQkJCXJldHVybiB0cnVlOworCQkJfQorCiAJCQlyY19zZW5kX2xvd19icm9hZGNhc3QoJmluZm8tPmNvbnRyb2wucmF0ZXNbMF0uaWR4LAogCQkJCQkgICAgICB0eHJjLT5ic3NfY29uZi0+YmFzaWNfcmF0ZXMsCi0JCQkJCSAgICAgIHR4cmMtPnNiYW5kLT5uX2JpdHJhdGVzKTsKKwkJCQkJICAgICAgc2JhbmQpOworCQl9CiAJCXJldHVybiB0cnVlOwogCX0KIAlyZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvcmM4MDIxMV9taW5zdHJlbF9odC5jIGIvbmV0L21hYzgwMjExL3JjODAyMTFfbWluc3RyZWxfaHQuYwppbmRleCAyYTE4ZDY2Li4xNjVhNDUxIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvcmM4MDIxMV9taW5zdHJlbF9odC5jCisrKyBiL25ldC9tYWM4MDIxMS9yYzgwMjExX21pbnN0cmVsX2h0LmMKQEAgLTM3MSw3ICszNzEsMTAgQEAKIAlpZiAobGlrZWx5KHN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXSkpCiAJCXJldHVybjsKIAotCWllZWU4MDIxMV9zdGFydF90eF9iYV9zZXNzaW9uKHB1YnN0YSwgdGlkKTsKKwlpZiAoc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikgPT0gSUVFRTgwMjExX0FDX1ZPKQorCQlyZXR1cm47CisKKwlpZWVlODAyMTFfc3RhcnRfdHhfYmFfc2Vzc2lvbihwdWJzdGEsIHRpZCwgNTAwMCk7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC00MDcsOCArNDEwLDggQEAKIAltaS0+YW1wZHVfbGVuICs9IGluZm8tPnN0YXR1cy5hbXBkdV9sZW47CiAKIAlpZiAoIW1pLT5zYW1wbGVfd2FpdCAmJiAhbWktPnNhbXBsZV90cmllcyAmJiBtaS0+c2FtcGxlX2NvdW50ID4gMCkgewotCQltaS0+c2FtcGxlX3dhaXQgPSA0ICsgMiAqIE1JTlNUUkVMX1RSVU5DKG1pLT5hdmdfYW1wZHVfbGVuKTsKLQkJbWktPnNhbXBsZV90cmllcyA9IDM7CisJCW1pLT5zYW1wbGVfd2FpdCA9IDE2ICsgMiAqIE1JTlNUUkVMX1RSVU5DKG1pLT5hdmdfYW1wZHVfbGVuKTsKKwkJbWktPnNhbXBsZV90cmllcyA9IDI7CiAJCW1pLT5zYW1wbGVfY291bnQtLTsKIAl9CiAKQEAgLTUwNiw3ICs1MDksOSBAQAogCWlmICghbXItPnJldHJ5X3VwZGF0ZWQpCiAJCW1pbnN0cmVsX2NhbGNfcmV0cmFuc21pdChtcCwgbWksIGluZGV4KTsKIAotCWlmIChtci0+cHJvYmFiaWxpdHkgPCBNSU5TVFJFTF9GUkFDKDIwLCAxMDApKQorCWlmIChzYW1wbGUpCisJCXJhdGUtPmNvdW50ID0gMTsKKwllbHNlIGlmIChtci0+cHJvYmFiaWxpdHkgPCBNSU5TVFJFTF9GUkFDKDIwLCAxMDApKQogCQlyYXRlLT5jb3VudCA9IDI7CiAJZWxzZSBpZiAocnRzY3RzKQogCQlyYXRlLT5jb3VudCA9IG1yLT5yZXRyeV9jb3VudF9ydHNjdHM7CkBAIC01NjIsNyArNTY3LDcgQEAKIAkgKi8KIAlpZiAobWluc3RyZWxfZ2V0X2R1cmF0aW9uKHNhbXBsZV9pZHgpID4KIAkgICAgbWluc3RyZWxfZ2V0X2R1cmF0aW9uKG1pLT5tYXhfdHBfcmF0ZSkpIHsKLQkJaWYgKG1yLT5zYW1wbGVfc2tpcHBlZCA8IDEwKQorCQlpZiAobXItPnNhbXBsZV9za2lwcGVkIDwgMjApCiAJCQlnb3RvIG5leHQ7CiAKIAkJaWYgKG1pLT5zYW1wbGVfc2xvdysrID4gMikKQEAgLTU4Niw2ICs1OTEsNyBAQAogCXN0cnVjdCBtaW5zdHJlbF9odF9zdGEgKm1pID0gJm1zcC0+aHQ7CiAJc3RydWN0IG1pbnN0cmVsX3ByaXYgKm1wID0gcHJpdjsKIAlpbnQgc2FtcGxlX2lkeDsKKwlib29sIHNhbXBsZSA9IGZhbHNlOwogCiAJaWYgKHJhdGVfY29udHJvbF9zZW5kX2xvdyhzdGEsIHByaXZfc3RhLCB0eHJjKSkKIAkJcmV0dXJuOwpAQCAtNTk2LDEwICs2MDIsMTEgQEAKIAlpbmZvLT5mbGFncyB8PSBtaS0+dHhfZmxhZ3M7CiAJc2FtcGxlX2lkeCA9IG1pbnN0cmVsX2dldF9zYW1wbGVfcmF0ZShtcCwgbWkpOwogCWlmIChzYW1wbGVfaWR4ID49IDApIHsKKwkJc2FtcGxlID0gdHJ1ZTsKIAkJbWluc3RyZWxfaHRfc2V0X3JhdGUobXAsIG1pLCAmYXJbMF0sIHNhbXBsZV9pZHgsCiAJCQl0eHJjLCB0cnVlLCBmYWxzZSk7CiAJCW1pbnN0cmVsX2h0X3NldF9yYXRlKG1wLCBtaSwgJmFyWzFdLCBtaS0+bWF4X3RwX3JhdGUsCi0JCQl0eHJjLCBmYWxzZSwgdHJ1ZSk7CisJCQl0eHJjLCBmYWxzZSwgZmFsc2UpOwogCQlpbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfQ1RMX1JBVEVfQ1RSTF9QUk9CRTsKIAl9IGVsc2UgewogCQltaW5zdHJlbF9odF9zZXRfcmF0ZShtcCwgbWksICZhclswXSwgbWktPm1heF90cF9yYXRlLApAQCAtNjA3LDcgKzYxNCw3IEBACiAJCW1pbnN0cmVsX2h0X3NldF9yYXRlKG1wLCBtaSwgJmFyWzFdLCBtaS0+bWF4X3RwX3JhdGUyLAogCQkJdHhyYywgZmFsc2UsIHRydWUpOwogCX0KLQltaW5zdHJlbF9odF9zZXRfcmF0ZShtcCwgbWksICZhclsyXSwgbWktPm1heF9wcm9iX3JhdGUsIHR4cmMsIGZhbHNlLCB0cnVlKTsKKwltaW5zdHJlbF9odF9zZXRfcmF0ZShtcCwgbWksICZhclsyXSwgbWktPm1heF9wcm9iX3JhdGUsIHR4cmMsIGZhbHNlLCAhc2FtcGxlKTsKIAogCWFyWzNdLmNvdW50ID0gMDsKIAlhclszXS5pZHggPSAtMTsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9yeC5jIGIvbmV0L21hYzgwMjExL3J4LmMKaW5kZXggYjAxZTQ2Ny4uYTY3MDFlZCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3J4LmMKKysrIGIvbmV0L21hYzgwMjExL3J4LmMKQEAgLTUzMywxMCArNTMzLDEzIEBACiAKIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9yZWxlYXNlX3Jlb3JkZXJfZnJhbWUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJCSAgICBzdHJ1Y3QgdGlkX2FtcGR1X3J4ICp0aWRfYWdnX3J4LAotCQkJCQkgICAgaW50IGluZGV4LAotCQkJCQkgICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqZnJhbWVzKQorCQkJCQkgICAgaW50IGluZGV4KQogeworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOwogCXN0cnVjdCBza19idWZmICpza2IgPSB0aWRfYWdnX3J4LT5yZW9yZGVyX2J1ZltpbmRleF07CisJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1czsKKworCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJnRpZF9hZ2dfcngtPnJlb3JkZXJfbG9jayk7CiAKIAlpZiAoIXNrYikKIAkJZ290byBub19mcmFtZTsKQEAgLTU0NCw3ICs1NDcsOSBAQAogCS8qIHJlbGVhc2UgdGhlIGZyYW1lIGZyb20gdGhlIHJlb3JkZXIgcmluZyBidWZmZXIgKi8KIAl0aWRfYWdnX3J4LT5zdG9yZWRfbXBkdV9udW0tLTsKIAl0aWRfYWdnX3J4LT5yZW9yZGVyX2J1ZltpbmRleF0gPSBOVUxMOwotCV9fc2tiX3F1ZXVlX3RhaWwoZnJhbWVzLCBza2IpOworCXN0YXR1cyA9IElFRUU4MDIxMV9TS0JfUlhDQihza2IpOworCXN0YXR1cy0+cnhfZmxhZ3MgfD0gSUVFRTgwMjExX1JYX0RFRkVSUkVEX1JFTEVBU0U7CisJc2tiX3F1ZXVlX3RhaWwoJmxvY2FsLT5yeF9za2JfcXVldWUsIHNrYik7CiAKIG5vX2ZyYW1lOgogCXRpZF9hZ2dfcngtPmhlYWRfc2VxX251bSA9IHNlcV9pbmModGlkX2FnZ19yeC0+aGVhZF9zZXFfbnVtKTsKQEAgLTU1MiwxNSArNTU3LDE2IEBACiAKIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9yZWxlYXNlX3Jlb3JkZXJfZnJhbWVzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCQkgICAgIHN0cnVjdCB0aWRfYW1wZHVfcnggKnRpZF9hZ2dfcngsCi0JCQkJCSAgICAgdTE2IGhlYWRfc2VxX251bSwKLQkJCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpmcmFtZXMpCisJCQkJCSAgICAgdTE2IGhlYWRfc2VxX251bSkKIHsKIAlpbnQgaW5kZXg7CiAKKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZ0aWRfYWdnX3J4LT5yZW9yZGVyX2xvY2spOworCiAJd2hpbGUgKHNlcV9sZXNzKHRpZF9hZ2dfcngtPmhlYWRfc2VxX251bSwgaGVhZF9zZXFfbnVtKSkgewogCQlpbmRleCA9IHNlcV9zdWIodGlkX2FnZ19yeC0+aGVhZF9zZXFfbnVtLCB0aWRfYWdnX3J4LT5zc24pICUKIAkJCQkJCQl0aWRfYWdnX3J4LT5idWZfc2l6ZTsKLQkJaWVlZTgwMjExX3JlbGVhc2VfcmVvcmRlcl9mcmFtZShodywgdGlkX2FnZ19yeCwgaW5kZXgsIGZyYW1lcyk7CisJCWllZWU4MDIxMV9yZWxlYXNlX3Jlb3JkZXJfZnJhbWUoaHcsIHRpZF9hZ2dfcngsIGluZGV4KTsKIAl9CiB9CiAKQEAgLTU3NiwxMSArNTgyLDEyIEBACiAjZGVmaW5lIEhUX1JYX1JFT1JERVJfQlVGX1RJTUVPVVQgKEhaIC8gMTApCiAKIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfcmVvcmRlcl9yZWxlYXNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCQkgIHN0cnVjdCB0aWRfYW1wZHVfcnggKnRpZF9hZ2dfcngsCi0JCQkJCSAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqZnJhbWVzKQorCQkJCQkgIHN0cnVjdCB0aWRfYW1wZHVfcnggKnRpZF9hZ2dfcngpCiB7CiAJaW50IGluZGV4LCBqOwogCisJbG9ja2RlcF9hc3NlcnRfaGVsZCgmdGlkX2FnZ19yeC0+cmVvcmRlcl9sb2NrKTsKKwogCS8qIHJlbGVhc2UgdGhlIGJ1ZmZlciB1bnRpbCBuZXh0IG1pc3NpbmcgZnJhbWUgKi8KIAlpbmRleCA9IHNlcV9zdWIodGlkX2FnZ19yeC0+aGVhZF9zZXFfbnVtLCB0aWRfYWdnX3J4LT5zc24pICUKIAkJCQkJCXRpZF9hZ2dfcngtPmJ1Zl9zaXplOwpAQCAtNjA2LDggKzYxMyw3IEBACiAJCQkJd2lwaHlfZGVidWcoaHctPndpcGh5LAogCQkJCQkgICAgInJlbGVhc2UgYW4gUlggcmVvcmRlciBmcmFtZSBkdWUgdG8gdGltZW91dCBvbiBlYXJsaWVyIGZyYW1lc1xuIik7CiAjZW5kaWYKLQkJCWllZWU4MDIxMV9yZWxlYXNlX3Jlb3JkZXJfZnJhbWUoaHcsIHRpZF9hZ2dfcngsCi0JCQkJCQkJaiwgZnJhbWVzKTsKKwkJCWllZWU4MDIxMV9yZWxlYXNlX3Jlb3JkZXJfZnJhbWUoaHcsIHRpZF9hZ2dfcngsIGopOwogCiAJCQkvKgogCQkJICogSW5jcmVtZW50IHRoZSBoZWFkIHNlcSMgYWxzbyBmb3IgdGhlIHNraXBwZWQgc2xvdHMuCkBAIC02MTcsMzEgKzYyMywxMSBAQAogCQkJc2tpcHBlZCA9IDA7CiAJCX0KIAl9IGVsc2Ugd2hpbGUgKHRpZF9hZ2dfcngtPnJlb3JkZXJfYnVmW2luZGV4XSkgewotCQlpZWVlODAyMTFfcmVsZWFzZV9yZW9yZGVyX2ZyYW1lKGh3LCB0aWRfYWdnX3J4LCBpbmRleCwgZnJhbWVzKTsKKwkJaWVlZTgwMjExX3JlbGVhc2VfcmVvcmRlcl9mcmFtZShodywgdGlkX2FnZ19yeCwgaW5kZXgpOwogCQlpbmRleCA9CXNlcV9zdWIodGlkX2FnZ19yeC0+aGVhZF9zZXFfbnVtLCB0aWRfYWdnX3J4LT5zc24pICUKIAkJCQkJCQl0aWRfYWdnX3J4LT5idWZfc2l6ZTsKIAl9CiAKLQkvKgotCSAqIERpc2FibGUgdGhlIHJlb3JkZXIgcmVsZWFzZSB0aW1lciBmb3Igbm93LgotCSAqCi0JICogVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gbGFja3MgYSBwcm9wZXIgbG9ja2luZyBzY2hlbWUKLQkgKiB3aGljaCB3b3VsZCBwcm90ZWN0IHZpdGFsIHN0YXRpc3RpYyBhbmQgZGVidWcgY291bnRlcnMKLQkgKiBmcm9tIGJlaW5nIHVwZGF0ZWQgYnkgdHdvIGRpZmZlcmVudCBidXQgY29uY3VycmVudCBCSHMuCi0JICoKLQkgKiBNb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSB0b3BpYyBpcyBhdmFpbGFibGUgZnJvbToKLQkgKiAtIHRocmVhZDogaHR0cDovL21hcmMuaW5mby8/dD0xMjg2MzU5MjcwMDAwMDEKLQkgKgotCSAqIFdoYXQgd2FzIHdyb25nOgotCSAqID0+ICBodHRwOi8vbWFyYy5pbmZvLz9sPWxpbnV4LXdpcmVsZXNzJm09MTI4NjM2MTcwODExOTY0Ci0JICogIkJhc2ljYWxseSB0aGUgdGhpbmcgaXMgdGhhdCB1bnRpbCB5b3VyIHBhdGNoLCB0aGUgZGF0YQotCSAqICBpbiB0aGUgc3RydWN0IGRpZG4ndCBhY3R1YWxseSBuZWVkIGxvY2tpbmcgYmVjYXVzZSBpdAotCSAqICB3YXMgYWNjZXNzZWQgYnkgdGhlIFJYIHBhdGggb25seSB3aGljaCBpcyBub3QgY29uY3VycmVudC4iCi0JICoKLQkgKiBMaXN0IG9mIHdoYXQgbmVlZHMgdG8gYmUgZml4ZWQ6Ci0JICogPT4gaHR0cDovL21hcmMuaW5mby8/bD1saW51eC13aXJlbGVzcyZtPTEyODY1NjM1MjkyMDk1NwotCSAqCi0KIAlpZiAodGlkX2FnZ19yeC0+c3RvcmVkX21wZHVfbnVtKSB7CiAJCWogPSBpbmRleCA9IHNlcV9zdWIodGlkX2FnZ19yeC0+aGVhZF9zZXFfbnVtLAogCQkJCSAgICB0aWRfYWdnX3J4LT5zc24pICUgdGlkX2FnZ19yeC0+YnVmX3NpemU7CkBAIC02NjAsMTAgKzY0Niw2IEBACiAJfSBlbHNlIHsKIAkJZGVsX3RpbWVyKCZ0aWRfYWdnX3J4LT5yZW9yZGVyX3RpbWVyKTsKIAl9Ci0JKi8KLQotc2V0X3JlbGVhc2VfdGltZXI6Ci0JcmV0dXJuOwogfQogCiAvKgpAQCAtNjczLDggKzY1NSw3IEBACiAgKi8KIHN0YXRpYyBib29sIGllZWU4MDIxMV9zdGFfbWFuYWdlX3Jlb3JkZXJfYnVmKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCQkgICAgIHN0cnVjdCB0aWRfYW1wZHVfcnggKnRpZF9hZ2dfcngsCi0JCQkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpmcmFtZXMpCisJCQkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKIAl1MTYgc2MgPSBsZTE2X3RvX2NwdShoZHItPnNlcV9jdHJsKTsKQEAgLTY4MywxMCArNjY0LDExIEBACiAJaW50IGluZGV4OwogCWJvb2wgcmV0ID0gdHJ1ZTsKIAorCXNwaW5fbG9jaygmdGlkX2FnZ19yeC0+cmVvcmRlcl9sb2NrKTsKKwogCWJ1Zl9zaXplID0gdGlkX2FnZ19yeC0+YnVmX3NpemU7CiAJaGVhZF9zZXFfbnVtID0gdGlkX2FnZ19yeC0+aGVhZF9zZXFfbnVtOwogCi0Jc3Bpbl9sb2NrKCZ0aWRfYWdnX3J4LT5yZW9yZGVyX2xvY2spOwogCS8qIGZyYW1lIHdpdGggb3V0IG9mIGRhdGUgc2VxdWVuY2UgbnVtYmVyICovCiAJaWYgKHNlcV9sZXNzKG1wZHVfc2VxX251bSwgaGVhZF9zZXFfbnVtKSkgewogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CkBAIC03MDAsOCArNjgyLDcgQEAKIAlpZiAoIXNlcV9sZXNzKG1wZHVfc2VxX251bSwgaGVhZF9zZXFfbnVtICsgYnVmX3NpemUpKSB7CiAJCWhlYWRfc2VxX251bSA9IHNlcV9pbmMoc2VxX3N1YihtcGR1X3NlcV9udW0sIGJ1Zl9zaXplKSk7CiAJCS8qIHJlbGVhc2Ugc3RvcmVkIGZyYW1lcyB1cCB0byBuZXcgaGVhZCB0byBzdGFjayAqLwotCQlpZWVlODAyMTFfcmVsZWFzZV9yZW9yZGVyX2ZyYW1lcyhodywgdGlkX2FnZ19yeCwgaGVhZF9zZXFfbnVtLAotCQkJCQkJIGZyYW1lcyk7CisJCWllZWU4MDIxMV9yZWxlYXNlX3Jlb3JkZXJfZnJhbWVzKGh3LCB0aWRfYWdnX3J4LCBoZWFkX3NlcV9udW0pOwogCX0KIAogCS8qIE5vdyB0aGUgbmV3IGZyYW1lIGlzIGFsd2F5cyBpbiB0aGUgcmFuZ2Ugb2YgdGhlIHJlb3JkZXJpbmcgYnVmZmVyICovCkBAIC03MjksNyArNzEwLDcgQEAKIAl0aWRfYWdnX3J4LT5yZW9yZGVyX2J1ZltpbmRleF0gPSBza2I7CiAJdGlkX2FnZ19yeC0+cmVvcmRlcl90aW1lW2luZGV4XSA9IGppZmZpZXM7CiAJdGlkX2FnZ19yeC0+c3RvcmVkX21wZHVfbnVtKys7Ci0JaWVlZTgwMjExX3N0YV9yZW9yZGVyX3JlbGVhc2UoaHcsIHRpZF9hZ2dfcngsIGZyYW1lcyk7CisJaWVlZTgwMjExX3N0YV9yZW9yZGVyX3JlbGVhc2UoaHcsIHRpZF9hZ2dfcngpOwogCiAgb3V0OgogCXNwaW5fdW5sb2NrKCZ0aWRfYWdnX3J4LT5yZW9yZGVyX2xvY2spOwpAQCAtNzQwLDggKzcyMSw3IEBACiAgKiBSZW9yZGVyIE1QRFVzIGZyb20gQS1NUERVcywga2VlcGluZyB0aGVtIG9uIGEgYnVmZmVyLiBSZXR1cm5zCiAgKiB0cnVlIGlmIHRoZSBNUERVIHdhcyBidWZmZXJlZCwgZmFsc2UgaWYgaXQgc2hvdWxkIGJlIHByb2Nlc3NlZC4KICAqLwotc3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X3Jlb3JkZXJfYW1wZHUoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCwKLQkJCQkgICAgICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqZnJhbWVzKQorc3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X3Jlb3JkZXJfYW1wZHUoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCkKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcngtPnNrYjsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHJ4LT5sb2NhbDsKQEAgLTc5NiwxMSArNzc2LDExIEBACiAJICogc3VyZSB0aGF0IHdlIGNhbm5vdCBnZXQgdG8gaXQgYW55IG1vcmUgYmVmb3JlIGRvaW5nCiAJICogYW55dGhpbmcgd2l0aCBpdC4KIAkgKi8KLQlpZiAoaWVlZTgwMjExX3N0YV9tYW5hZ2VfcmVvcmRlcl9idWYoaHcsIHRpZF9hZ2dfcngsIHNrYiwgZnJhbWVzKSkKKwlpZiAoaWVlZTgwMjExX3N0YV9tYW5hZ2VfcmVvcmRlcl9idWYoaHcsIHRpZF9hZ2dfcngsIHNrYikpCiAJCXJldHVybjsKIAogIGRvbnRfcmVvcmRlcjoKLQlfX3NrYl9xdWV1ZV90YWlsKGZyYW1lcywgc2tiKTsKKwlza2JfcXVldWVfdGFpbCgmbG9jYWwtPnJ4X3NrYl9xdWV1ZSwgc2tiKTsKIH0KIAogc3RhdGljIGllZWU4MDIxMV9yeF9yZXN1bHQgZGVidWdfbm9pbmxpbmUKQEAgLTk0OCwxMiArOTI4LDMxIEBACiAJCSAqIGhhdmUgYmVlbiBleHBlY3RlZC4KIAkJICovCiAJCXN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXkgPSBOVUxMOworCQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IHJ4LT5zZGF0YTsKKwkJaW50IGk7CisKIAkJaWYgKGllZWU4MDIxMV9pc19tZ210KGZjKSAmJgogCQkgICAgaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSkgJiYKIAkJICAgIChrZXkgPSByY3VfZGVyZWZlcmVuY2UocngtPnNkYXRhLT5kZWZhdWx0X21nbXRfa2V5KSkpCiAJCQlyeC0+a2V5ID0ga2V5OwotCQllbHNlIGlmICgoa2V5ID0gcmN1X2RlcmVmZXJlbmNlKHJ4LT5zZGF0YS0+ZGVmYXVsdF9rZXkpKSkKLQkJCXJ4LT5rZXkgPSBrZXk7CisJCWVsc2UgeworCQkJaWYgKHJ4LT5zdGEpIHsKKwkJCQlmb3IgKGkgPSAwOyBpIDwgTlVNX0RFRkFVTFRfS0VZUzsgaSsrKSB7CisJCQkJCWtleSA9IHJjdV9kZXJlZmVyZW5jZShyeC0+c3RhLT5ndGtbaV0pOworCQkJCQlpZiAoa2V5KQorCQkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJaWYgKCFrZXkpIHsKKwkJCQlmb3IgKGkgPSAwOyBpIDwgTlVNX0RFRkFVTFRfS0VZUzsgaSsrKSB7CisJCQkJCWtleSA9IHJjdV9kZXJlZmVyZW5jZShzZGF0YS0+a2V5c1tpXSk7CisJCQkJCWlmIChrZXkpCisJCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQlpZiAoa2V5KQorCQkJCXJ4LT5rZXkgPSBrZXk7CisJCX0KIAkJcmV0dXJuIFJYX0NPTlRJTlVFOwogCX0gZWxzZSB7CiAJCXU4IGtleWlkOwpAQCAtMTEwMiw4ICsxMTAxLDYgQEAKIAogCWF0b21pY19kZWMoJnNkYXRhLT5ic3MtPm51bV9zdGFfcHMpOwogCi0JY2xlYXJfc3RhX2ZsYWdzKHN0YSwgV0xBTl9TVEFfUFNfU1RBKTsKLQogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9WRVJCT1NFX1BTX0RFQlVHCiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBTVEEgJXBNIGFpZCAlZCBleGl0cyBwb3dlciBzYXZlIG1vZGVcbiIsCiAJICAgICAgIHNkYXRhLT5uYW1lLCBzdGEtPnN0YS5hZGRyLCBzdGEtPnN0YS5haWQpOwpAQCAtMTE1OCwxMiArMTE1NSwxNCBAQAogCXN0YS0+cnhfZnJhZ21lbnRzKys7CiAJc3RhLT5yeF9ieXRlcyArPSByeC0+c2tiLT5sZW47CiAJc3RhLT5sYXN0X3NpZ25hbCA9IHN0YXR1cy0+c2lnbmFsOworCWV3bWFfYWRkKCZzdGEtPmF2Z19zaWduYWwsIC1zdGF0dXMtPnNpZ25hbCk7CiAKIAkvKgogCSAqIENoYW5nZSBTVEEgcG93ZXIgc2F2aW5nIG1vZGUgb25seSBhdCB0aGUgZW5kIG9mIGEgZnJhbWUKIAkgKiBleGNoYW5nZSBzZXF1ZW5jZS4KIAkgKi8KIAlpZiAoIWllZWU4MDIxMV9oYXNfbW9yZWZyYWdzKGhkci0+ZnJhbWVfY29udHJvbCkgJiYKKwkgICAgIShzdGF0dXMtPnJ4X2ZsYWdzICYgSUVFRTgwMjExX1JYX0RFRkVSUkVEX1JFTEVBU0UpICYmCiAJICAgIChyeC0+c2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQIHx8CiAJICAgICByeC0+c2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4pKSB7CiAJCWlmICh0ZXN0X3N0YV9mbGFncyhzdGEsIFdMQU5fU1RBX1BTX1NUQSkpIHsKQEAgLTE1MTUsMTIgKzE1MTQsMzAgQEAKIAlpZiAocngtPnN0YSAmJiB0ZXN0X3N0YV9mbGFncyhyeC0+c3RhLCBXTEFOX1NUQV9NRlApKSB7CiAJCWlmICh1bmxpa2VseSghaWVlZTgwMjExX2hhc19wcm90ZWN0ZWQoZmMpICYmCiAJCQkgICAgIGllZWU4MDIxMV9pc191bmljYXN0X3JvYnVzdF9tZ210X2ZyYW1lKHJ4LT5za2IpICYmCi0JCQkgICAgIHJ4LT5rZXkpKQorCQkJICAgICByeC0+a2V5KSkgeworCQkJaWYgKGllZWU4MDIxMV9pc19kZWF1dGgoZmMpKQorCQkJCWNmZzgwMjExX3NlbmRfdW5wcm90X2RlYXV0aChyeC0+c2RhdGEtPmRldiwKKwkJCQkJCQkgICAgcngtPnNrYi0+ZGF0YSwKKwkJCQkJCQkgICAgcngtPnNrYi0+bGVuKTsKKwkJCWVsc2UgaWYgKGllZWU4MDIxMV9pc19kaXNhc3NvYyhmYykpCisJCQkJY2ZnODAyMTFfc2VuZF91bnByb3RfZGlzYXNzb2MocngtPnNkYXRhLT5kZXYsCisJCQkJCQkJICAgICAgcngtPnNrYi0+ZGF0YSwKKwkJCQkJCQkgICAgICByeC0+c2tiLT5sZW4pOwogCQkJcmV0dXJuIC1FQUNDRVM7CisJCX0KIAkJLyogQklQIGRvZXMgbm90IHVzZSBQcm90ZWN0ZWQgZmllbGQsIHNvIG5lZWQgdG8gY2hlY2sgTU1JRSAqLwogCQlpZiAodW5saWtlbHkoaWVlZTgwMjExX2lzX211bHRpY2FzdF9yb2J1c3RfbWdtdF9mcmFtZShyeC0+c2tiKSAmJgotCQkJICAgICBpZWVlODAyMTFfZ2V0X21taWVfa2V5aWR4KHJ4LT5za2IpIDwgMCkpCisJCQkgICAgIGllZWU4MDIxMV9nZXRfbW1pZV9rZXlpZHgocngtPnNrYikgPCAwKSkgeworCQkJaWYgKGllZWU4MDIxMV9pc19kZWF1dGgoZmMpKQorCQkJCWNmZzgwMjExX3NlbmRfdW5wcm90X2RlYXV0aChyeC0+c2RhdGEtPmRldiwKKwkJCQkJCQkgICAgcngtPnNrYi0+ZGF0YSwKKwkJCQkJCQkgICAgcngtPnNrYi0+bGVuKTsKKwkJCWVsc2UgaWYgKGllZWU4MDIxMV9pc19kaXNhc3NvYyhmYykpCisJCQkJY2ZnODAyMTFfc2VuZF91bnByb3RfZGlzYXNzb2MocngtPnNkYXRhLT5kZXYsCisJCQkJCQkJICAgICAgcngtPnNrYi0+ZGF0YSwKKwkJCQkJCQkgICAgICByeC0+c2tiLT5sZW4pOwogCQkJcmV0dXJuIC1FQUNDRVM7CisJCX0KIAkJLyoKIAkJICogV2hlbiB1c2luZyBNRlAsIEFjdGlvbiBmcmFtZXMgYXJlIG5vdCBhbGxvd2VkIHByaW9yIHRvCiAJCSAqIGhhdmluZyBjb25maWd1cmVkIGtleXMuCkBAIC0xNzg4LDExICsxODA1LDExIEBACiAKIAkJCWZ3ZF9za2IgPSBza2JfY29weShza2IsIEdGUF9BVE9NSUMpOwogCi0JCQlpZiAoIWZ3ZF9za2IgJiYgbmV0X3JhdGVsaW1pdCgpKSB7CisJCQlpZiAoIWZ3ZF9za2IgJiYgbmV0X3JhdGVsaW1pdCgpKQogCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGNsb25lIG1lc2ggZnJhbWVcbiIsCiAJCQkJCQkgICBzZGF0YS0+bmFtZSk7CisJCQlpZiAoIWZ3ZF9za2IpCiAJCQkJZ290byBvdXQ7Ci0JCQl9CiAKIAkJCWZ3ZF9oZHIgPSAgKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIGZ3ZF9za2ItPmRhdGE7CiAJCQltZW1jcHkoZndkX2hkci0+YWRkcjIsIHNkYXRhLT52aWYuYWRkciwgRVRIX0FMRU4pOwpAQCAtMTg3NSw5ICsxODkyLDggQEAKIAlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKIAlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHJ4LT5za2ItPmxlbjsKIAotCWlmIChpZWVlODAyMTFfaXNfZGF0YShoZHItPmZyYW1lX2NvbnRyb2wpICYmCi0JICAgICFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIxKSAmJgotCSAgICBsb2NhbC0+aHcuY29uZi5keW5hbWljX3BzX3RpbWVvdXQgPiAwICYmIGxvY2FsLT5wc19zZGF0YSkgeworCWlmIChsb2NhbC0+cHNfc2RhdGEgJiYgbG9jYWwtPmh3LmNvbmYuZHluYW1pY19wc190aW1lb3V0ID4gMCAmJgorCSAgICAhaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoKChzdHJ1Y3QgZXRoaGRyICopcngtPnNrYi0+ZGF0YSktPmhfZGVzdCkpIHsKIAkJCW1vZF90aW1lcigmbG9jYWwtPmR5bmFtaWNfcHNfdGltZXIsIGppZmZpZXMgKwogCQkJIG1zZWNzX3RvX2ppZmZpZXMobG9jYWwtPmh3LmNvbmYuZHluYW1pY19wc190aW1lb3V0KSk7CiAJfQpAQCAtMTg4OCw3ICsxOTA0LDcgQEAKIH0KIAogc3RhdGljIGllZWU4MDIxMV9yeF9yZXN1bHQgZGVidWdfbm9pbmxpbmUKLWllZWU4MDIxMV9yeF9oX2N0cmwoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqZnJhbWVzKQoraWVlZTgwMjExX3J4X2hfY3RybChzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gcngtPmxvY2FsOwogCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gJmxvY2FsLT5odzsKQEAgLTE5MjYsOSArMTk0MiwxMSBAQAogCQkJbW9kX3RpbWVyKCZ0aWRfYWdnX3J4LT5zZXNzaW9uX3RpbWVyLAogCQkJCSAgVFVfVE9fRVhQX1RJTUUodGlkX2FnZ19yeC0+dGltZW91dCkpOwogCisJCXNwaW5fbG9jaygmdGlkX2FnZ19yeC0+cmVvcmRlcl9sb2NrKTsKIAkJLyogcmVsZWFzZSBzdG9yZWQgZnJhbWVzIHVwIHRvIHN0YXJ0IG9mIEJBUiAqLwotCQlpZWVlODAyMTFfcmVsZWFzZV9yZW9yZGVyX2ZyYW1lcyhodywgdGlkX2FnZ19yeCwgc3RhcnRfc2VxX251bSwKLQkJCQkJCSBmcmFtZXMpOworCQlpZWVlODAyMTFfcmVsZWFzZV9yZW9yZGVyX2ZyYW1lcyhodywgdGlkX2FnZ19yeCwgc3RhcnRfc2VxX251bSk7CisJCXNwaW5fdW5sb2NrKCZ0aWRfYWdnX3J4LT5yZW9yZGVyX2xvY2spOworCiAJCWtmcmVlX3NrYihza2IpOwogCQlyZXR1cm4gUlhfUVVFVUVEOwogCX0KQEAgLTIxMTksMTAgKzIxMzcsMTMgQEAKIAkJfQogCQlicmVhazsKIAljYXNlIFdMQU5fQ0FURUdPUllfTUVTSF9QTElOSzoKLQljYXNlIFdMQU5fQ0FURUdPUllfTUVTSF9QQVRIX1NFTDoKIAkJaWYgKCFpZWVlODAyMTFfdmlmX2lzX21lc2goJnNkYXRhLT52aWYpKQogCQkJYnJlYWs7CiAJCWdvdG8gcXVldWU7CisJY2FzZSBXTEFOX0NBVEVHT1JZX01FU0hfUEFUSF9TRUw6CisJCWlmICghbWVzaF9wYXRoX3NlbF9pc19od21wKHNkYXRhKSkKKwkJCWJyZWFrOworCQlnb3RvIHF1ZXVlOwogCX0KIAogCXJldHVybiBSWF9DT05USU5VRTsKQEAgLTI0NDAsOCArMjQ2MSw3IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfaGFuZGxlcnMoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCwKLQkJCQkgIHN0cnVjdCBza19idWZmX2hlYWQgKmZyYW1lcykKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF9oYW5kbGVycyhzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KQogewogCWllZWU4MDIxMV9yeF9yZXN1bHQgcmVzID0gUlhfRFJPUF9NT05JVE9SOwogCXN0cnVjdCBza19idWZmICpza2I7CkBAIC0yNDUzLDcgKzI0NzMsMTUgQEAKIAkJCWdvdG8gcnhoX25leHQ7ICBcCiAJfSB3aGlsZSAoMCk7CiAKLQl3aGlsZSAoKHNrYiA9IF9fc2tiX2RlcXVldWUoZnJhbWVzKSkpIHsKKwlzcGluX2xvY2soJnJ4LT5sb2NhbC0+cnhfc2tiX3F1ZXVlLmxvY2spOworCWlmIChyeC0+bG9jYWwtPnJ1bm5pbmdfcnhfaGFuZGxlcikKKwkJZ290byB1bmxvY2s7CisKKwlyeC0+bG9jYWwtPnJ1bm5pbmdfcnhfaGFuZGxlciA9IHRydWU7CisKKwl3aGlsZSAoKHNrYiA9IF9fc2tiX2RlcXVldWUoJnJ4LT5sb2NhbC0+cnhfc2tiX3F1ZXVlKSkpIHsKKwkJc3Bpbl91bmxvY2soJnJ4LT5sb2NhbC0+cnhfc2tiX3F1ZXVlLmxvY2spOworCiAJCS8qCiAJCSAqIGFsbCB0aGUgb3RoZXIgZmllbGRzIGFyZSB2YWxpZCBhY3Jvc3MgZnJhbWVzCiAJCSAqIHRoYXQgYmVsb25nIHRvIGFuIGFNUERVIHNpbmNlIHRoZXkgYXJlIG9uIHRoZQpAQCAtMjQ3NiwxMiArMjUwNCw3IEBACiAJCQlDQUxMX1JYSChpZWVlODAyMTFfcnhfaF9tZXNoX2Z3ZGluZyk7CiAjZW5kaWYKIAkJQ0FMTF9SWEgoaWVlZTgwMjExX3J4X2hfZGF0YSkKLQotCQkvKiBzcGVjaWFsIHRyZWF0bWVudCAtLSBuZWVkcyB0aGUgcXVldWUgKi8KLQkJcmVzID0gaWVlZTgwMjExX3J4X2hfY3RybChyeCwgZnJhbWVzKTsKLQkJaWYgKHJlcyAhPSBSWF9DT05USU5VRSkKLQkJCWdvdG8gcnhoX25leHQ7Ci0KKwkJQ0FMTF9SWEgoaWVlZTgwMjExX3J4X2hfY3RybCk7CiAJCUNBTExfUlhIKGllZWU4MDIxMV9yeF9oX21nbXRfY2hlY2spCiAJCUNBTExfUlhIKGllZWU4MDIxMV9yeF9oX2FjdGlvbikKIAkJQ0FMTF9SWEgoaWVlZTgwMjExX3J4X2hfdXNlcnNwYWNlX21nbXQpCkBAIC0yNDkwLDE4ICsyNTEzLDIwIEBACiAKICByeGhfbmV4dDoKIAkJaWVlZTgwMjExX3J4X2hhbmRsZXJzX3Jlc3VsdChyeCwgcmVzKTsKLQorCQlzcGluX2xvY2soJnJ4LT5sb2NhbC0+cnhfc2tiX3F1ZXVlLmxvY2spOwogI3VuZGVmIENBTExfUlhICiAJfQorCisJcngtPmxvY2FsLT5ydW5uaW5nX3J4X2hhbmRsZXIgPSBmYWxzZTsKKworIHVubG9jazoKKwlzcGluX3VubG9jaygmcngtPmxvY2FsLT5yeF9za2JfcXVldWUubG9jayk7CiB9CiAKIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9pbnZva2VfcnhfaGFuZGxlcnMoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCkKIHsKLQlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHJlb3JkZXJfcmVsZWFzZTsKIAlpZWVlODAyMTFfcnhfcmVzdWx0IHJlcyA9IFJYX0RST1BfTU9OSVRPUjsKIAotCV9fc2tiX3F1ZXVlX2hlYWRfaW5pdCgmcmVvcmRlcl9yZWxlYXNlKTsKLQogI2RlZmluZSBDQUxMX1JYSChyeGgpCQkJXAogCWRvIHsJCQkJXAogCQlyZXMgPSByeGgocngpOwkJXApAQCAtMjUxMiw5ICsyNTM3LDkgQEAKIAlDQUxMX1JYSChpZWVlODAyMTFfcnhfaF9wYXNzaXZlX3NjYW4pCiAJQ0FMTF9SWEgoaWVlZTgwMjExX3J4X2hfY2hlY2spCiAKLQlpZWVlODAyMTFfcnhfcmVvcmRlcl9hbXBkdShyeCwgJnJlb3JkZXJfcmVsZWFzZSk7CisJaWVlZTgwMjExX3J4X3Jlb3JkZXJfYW1wZHUocngpOwogCi0JaWVlZTgwMjExX3J4X2hhbmRsZXJzKHJ4LCAmcmVvcmRlcl9yZWxlYXNlKTsKKwlpZWVlODAyMTFfcnhfaGFuZGxlcnMocngpOwogCXJldHVybjsKIAogIHJ4aF9uZXh0OgpAQCAtMjUyNCwxMyArMjU0OSwxMSBAQAogfQogCiAvKgotICogVGhpcyBmdW5jdGlvbiBtYWtlcyBjYWxscyBpbnRvIHRoZSBSWCBwYXRoLiBUaGVyZWZvcmUgdGhlCi0gKiBjYWxsZXIgbXVzdCBob2xkIHRoZSBzdGFfaW5mby0+bG9jayBhbmQgZXZlcnl0aGluZyBoYXMgdG8KLSAqIGJlIHVuZGVyIHJjdV9yZWFkX2xvY2sgcHJvdGVjdGlvbiBhcyB3ZWxsLgorICogVGhpcyBmdW5jdGlvbiBtYWtlcyBjYWxscyBpbnRvIHRoZSBSWCBwYXRoLCB0aGVyZWZvcmUKKyAqIGl0IGhhcyB0byBiZSBpbnZva2VkIHVuZGVyIFJDVSByZWFkIGxvY2suCiAgKi8KIHZvaWQgaWVlZTgwMjExX3JlbGVhc2VfcmVvcmRlcl90aW1lb3V0KHN0cnVjdCBzdGFfaW5mbyAqc3RhLCBpbnQgdGlkKQogewotCXN0cnVjdCBza19idWZmX2hlYWQgZnJhbWVzOwogCXN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSByeCA9IHsKIAkJLnN0YSA9IHN0YSwKIAkJLnNkYXRhID0gc3RhLT5zZGF0YSwKQEAgLTI1NDMsMTMgKzI1NjYsMTEgQEAKIAlpZiAoIXRpZF9hZ2dfcngpCiAJCXJldHVybjsKIAotCV9fc2tiX3F1ZXVlX2hlYWRfaW5pdCgmZnJhbWVzKTsKLQogCXNwaW5fbG9jaygmdGlkX2FnZ19yeC0+cmVvcmRlcl9sb2NrKTsKLQlpZWVlODAyMTFfc3RhX3Jlb3JkZXJfcmVsZWFzZSgmc3RhLT5sb2NhbC0+aHcsIHRpZF9hZ2dfcngsICZmcmFtZXMpOworCWllZWU4MDIxMV9zdGFfcmVvcmRlcl9yZWxlYXNlKCZzdGEtPmxvY2FsLT5odywgdGlkX2FnZ19yeCk7CiAJc3Bpbl91bmxvY2soJnRpZF9hZ2dfcngtPnJlb3JkZXJfbG9jayk7CiAKLQlpZWVlODAyMTFfcnhfaGFuZGxlcnMoJnJ4LCAmZnJhbWVzKTsKKwlpZWVlODAyMTFfcnhfaGFuZGxlcnMoJnJ4KTsKIH0KIAogLyogbWFpbiByZWNlaXZlIHBhdGggKi8KQEAgLTI4ODQsNiArMjkwNSw5IEBACiAJCXJldHVybjsKIAl9CiAKKwlpZWVlODAyMTFfdHB0X2xlZF90cmlnX3J4KGxvY2FsLAorCQkJKChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YSktPmZyYW1lX2NvbnRyb2wsCisJCQlza2ItPmxlbik7CiAJX19pZWVlODAyMTFfcnhfaGFuZGxlX3BhY2tldChodywgc2tiKTsKIAogCXJjdV9yZWFkX3VubG9jaygpOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3N0YV9pbmZvLmMgYi9uZXQvbWFjODAyMTEvc3RhX2luZm8uYwppbmRleCA2ZDhmODk3Li5jNDI2NTA0IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvc3RhX2luZm8uYworKysgYi9uZXQvbWFjODAyMTEvc3RhX2luZm8uYwpAQCAtMTk5LDggKzE5OSwxMSBAQAogCiAJaWYgKCF0ZXN0X3N0YV9mbGFncyhzdGEsIFdMQU5fU1RBX1BTX1NUQSkpCiAJCWllZWU4MDIxMV9zdGFfcHNfZGVsaXZlcl93YWtldXAoc3RhKTsKLQllbHNlIGlmICh0ZXN0X2FuZF9jbGVhcl9zdGFfZmxhZ3Moc3RhLCBXTEFOX1NUQV9QU1BPTEwpKQorCWVsc2UgaWYgKHRlc3RfYW5kX2NsZWFyX3N0YV9mbGFncyhzdGEsIFdMQU5fU1RBX1BTUE9MTCkpIHsKKwkJY2xlYXJfc3RhX2ZsYWdzKHN0YSwgV0xBTl9TVEFfUFNfRFJJVkVSKTsKIAkJaWVlZTgwMjExX3N0YV9wc19kZWxpdmVyX3BvbGxfcmVzcG9uc2Uoc3RhKTsKKwl9IGVsc2UKKwkJY2xlYXJfc3RhX2ZsYWdzKHN0YSwgV0xBTl9TVEFfUFNfRFJJVkVSKTsKIH0KIAogc3RhdGljIGludCBzdGFfcHJlcGFyZV9yYXRlX2NvbnRyb2woc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCkBAIC0yNDEsNiArMjQ0LDggQEAKIAlzdGEtPmxvY2FsID0gbG9jYWw7CiAJc3RhLT5zZGF0YSA9IHNkYXRhOwogCisJZXdtYV9pbml0KCZzdGEtPmF2Z19zaWduYWwsIDEwMjQsIDgpOworCiAJaWYgKHN0YV9wcmVwYXJlX3JhdGVfY29udHJvbChsb2NhbCwgc3RhLCBnZnApKSB7CiAJCWtmcmVlKHN0YSk7CiAJCXJldHVybiBOVUxMOwpAQCAtODgwLDYgKzg4NSwxMyBAQAogfQogRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfZmluZF9zdGEpOwogCitzdGF0aWMgdm9pZCBjbGVhcl9zdGFfcHNfZmxhZ3Modm9pZCAqX3N0YSkKK3sKKwlzdHJ1Y3Qgc3RhX2luZm8gKnN0YSA9IF9zdGE7CisKKwljbGVhcl9zdGFfZmxhZ3Moc3RhLCBXTEFOX1NUQV9QU19EUklWRVIgfCBXTEFOX1NUQV9QU19TVEEpOworfQorCiAvKiBwb3dlcnNhdmUgc3VwcG9ydCBjb2RlICovCiB2b2lkIGllZWU4MDIxMV9zdGFfcHNfZGVsaXZlcl93YWtldXAoc3RydWN0IHN0YV9pbmZvICpzdGEpCiB7CkBAIC04OTQsNyArOTA2LDggQEAKIAogCS8qIFNlbmQgYWxsIGJ1ZmZlcmVkIGZyYW1lcyB0byB0aGUgc3RhdGlvbiAqLwogCXNlbnQgPSBpZWVlODAyMTFfYWRkX3BlbmRpbmdfc2ticyhsb2NhbCwgJnN0YS0+dHhfZmlsdGVyZWQpOwotCWJ1ZmZlcmVkID0gaWVlZTgwMjExX2FkZF9wZW5kaW5nX3NrYnMobG9jYWwsICZzdGEtPnBzX3R4X2J1Zik7CisJYnVmZmVyZWQgPSBpZWVlODAyMTFfYWRkX3BlbmRpbmdfc2tic19mbihsb2NhbCwgJnN0YS0+cHNfdHhfYnVmLAorCQkJCQkJIGNsZWFyX3N0YV9wc19mbGFncywgc3RhKTsKIAlzZW50ICs9IGJ1ZmZlcmVkOwogCWxvY2FsLT50b3RhbF9wc19idWZmZXJlZCAtPSBidWZmZXJlZDsKIApAQCAtOTczLDcgKzk4Niw3IEBACiAKIAlpZiAoYmxvY2spCiAJCXNldF9zdGFfZmxhZ3Moc3RhLCBXTEFOX1NUQV9QU19EUklWRVIpOwotCWVsc2UKKwllbHNlIGlmICh0ZXN0X3N0YV9mbGFncyhzdGEsIFdMQU5fU1RBX1BTX0RSSVZFUikpCiAJCWllZWU4MDIxMV9xdWV1ZV93b3JrKGh3LCAmc3RhLT5kcnZfdW5ibG9ja193ayk7CiB9CiBFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9zdGFfYmxvY2tfYXdha2UpOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3N0YV9pbmZvLmggYi9uZXQvbWFjODAyMTEvc3RhX2luZm8uaAppbmRleCA5MjY1YWNhLi5iYmRkMmE4IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvc3RhX2luZm8uaAorKysgYi9uZXQvbWFjODAyMTEvc3RhX2luZm8uaApAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9hdmVyYWdlLmg+CiAjaW5jbHVkZSAia2V5LmgiCiAKIC8qKgpAQCAtNzcsMjMgKzc4LDI2IEBACiAgKiBAYWRkYmFfcmVzcF90aW1lcjogdGltZXIgZm9yIHBlZXIncyByZXNwb25zZSB0byBhZGRiYSByZXF1ZXN0CiAgKiBAcGVuZGluZzogcGVuZGluZyBmcmFtZXMgcXVldWUgLS0gdXNlIHN0YSdzIHNwaW5sb2NrIHRvIHByb3RlY3QKICAqIEBkaWFsb2dfdG9rZW46IGRpYWxvZyB0b2tlbiBmb3IgYWdncmVnYXRpb24gc2Vzc2lvbgorICogQHRpbWVvdXQ6IHNlc3Npb24gdGltZW91dCB2YWx1ZSB0byBiZSBmaWxsZWQgaW4gQUREQkEgcmVxdWVzdHMKICAqIEBzdGF0ZTogc2Vzc2lvbiBzdGF0ZSAoc2VlIGFib3ZlKQogICogQHN0b3BfaW5pdGlhdG9yOiBpbml0aWF0b3Igb2YgYSBzZXNzaW9uIHN0b3AKICAqIEB0eF9zdG9wOiBUWCBEZWxCQSBmcmFtZSB3aGVuIHN0b3BwaW5nCiAgKgotICogVGhpcyBzdHJ1Y3R1cmUgaXMgcHJvdGVjdGVkIGJ5IFJDVSBhbmQgdGhlIHBlci1zdGF0aW9uCi0gKiBzcGlubG9jay4gQXNzaWdubWVudHMgdG8gdGhlIGFycmF5IGhvbGRpbmcgaXQgbXVzdCBob2xkCi0gKiB0aGUgc3BpbmxvY2ssIG9ubHkgdGhlIFRYIHBhdGggY2FuIGFjY2VzcyBpdCB1bmRlciBSQ1UKLSAqIGxvY2stZnJlZSBpZiwgYW5kIG9ubHkgaWYsIHRoZSBzdGF0ZSBoYXMgIHRoZSBmbGFnCi0gKiAlSFRfQUdHX1NUQVRFX09QRVJBVElPTkFMIHNldC4gT3RoZXJ3aXNlLCB0aGUgVFggcGF0aAotICogbXVzdCBhbHNvIGFjcXVpcmUgdGhlIHNwaW5sb2NrIGFuZCByZS1jaGVjayB0aGUgc3RhdGUsCi0gKiBzZWUgY29tbWVudHMgaW4gdGhlIHR4IGNvZGUgdG91Y2hpbmcgaXQuCisgKiBUaGlzIHN0cnVjdHVyZSdzIGxpZmV0aW1lIGlzIG1hbmFnZWQgYnkgUkNVLCBhc3NpZ25tZW50cyB0bworICogdGhlIGFycmF5IGhvbGRpbmcgaXQgbXVzdCBob2xkIHRoZSBhZ2dyZWdhdGlvbiBtdXRleC4KKyAqCisgKiBUaGUgVFggcGF0aCBjYW4gYWNjZXNzIGl0IHVuZGVyIFJDVSBsb2NrLWZyZWUgaWYsIGFuZAorICogb25seSBpZiwgdGhlIHN0YXRlIGhhcyB0aGUgZmxhZyAlSFRfQUdHX1NUQVRFX09QRVJBVElPTkFMCisgKiBzZXQuIE90aGVyd2lzZSwgdGhlIFRYIHBhdGggbXVzdCBhbHNvIGFjcXVpcmUgdGhlIHNwaW5sb2NrCisgKiBhbmQgcmUtY2hlY2sgdGhlIHN0YXRlLCBzZWUgY29tbWVudHMgaW4gdGhlIHR4IGNvZGUKKyAqIHRvdWNoaW5nIGl0LgogICovCiBzdHJ1Y3QgdGlkX2FtcGR1X3R4IHsKIAlzdHJ1Y3QgcmN1X2hlYWQgcmN1X2hlYWQ7CiAJc3RydWN0IHRpbWVyX2xpc3QgYWRkYmFfcmVzcF90aW1lcjsKIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHBlbmRpbmc7CiAJdW5zaWduZWQgbG9uZyBzdGF0ZTsKKwl1MTYgdGltZW91dDsKIAl1OCBkaWFsb2dfdG9rZW47CiAJdTggc3RvcF9pbml0aWF0b3I7CiAJYm9vbCB0eF9zdG9wOwpAQCAtMTE1LDE1ICsxMTksMTMgQEAKICAqIEByY3VfaGVhZDogUkNVIGhlYWQgdXNlZCBmb3IgZnJlZWluZyB0aGlzIHN0cnVjdAogICogQHJlb3JkZXJfbG9jazogc2VyaWFsaXplcyBhY2Nlc3MgdG8gcmVvcmRlciBidWZmZXIsIHNlZSBiZWxvdy4KICAqCi0gKiBUaGlzIHN0cnVjdHVyZSBpcyBwcm90ZWN0ZWQgYnkgUkNVIGFuZCB0aGUgcGVyLXN0YXRpb24KLSAqIHNwaW5sb2NrLiBBc3NpZ25tZW50cyB0byB0aGUgYXJyYXkgaG9sZGluZyBpdCBtdXN0IGhvbGQKLSAqIHRoZSBzcGlubG9jay4KKyAqIFRoaXMgc3RydWN0dXJlJ3MgbGlmZXRpbWUgaXMgbWFuYWdlZCBieSBSQ1UsIGFzc2lnbm1lbnRzIHRvCisgKiB0aGUgYXJyYXkgaG9sZGluZyBpdCBtdXN0IGhvbGQgdGhlIGFnZ3JlZ2F0aW9uIG11dGV4LgogICoKLSAqIFRoZSBAcmVvcmRlcl9sb2NrIGlzIHVzZWQgdG8gcHJvdGVjdCB0aGUgdmFyaWFibGVzIGFuZAotICogYXJyYXlzIHN1Y2ggYXMgQHJlb3JkZXJfYnVmLCBAcmVvcmRlcl90aW1lLCBAaGVhZF9zZXFfbnVtLAotICogQHN0b3JlZF9tcGR1X251bSBhbmQgQHJlb3JkZXJfdGltZSBmcm9tIGJlaW5nIGNvcnJ1cHRlZCBieQotICogY29uY3VycmVudCBhY2Nlc3Mgb2YgdGhlIFJYIHBhdGggYW5kIHRoZSBleHBpcmVkIGZyYW1lCi0gKiByZWxlYXNlIHRpbWVyLgorICogVGhlIEByZW9yZGVyX2xvY2sgaXMgdXNlZCB0byBwcm90ZWN0IHRoZSBtZW1iZXJzIG9mIHRoaXMKKyAqIHN0cnVjdCwgZXhjZXB0IGZvciBAdGltZW91dCwgQGJ1Zl9zaXplIGFuZCBAZGlhbG9nX3Rva2VuLAorICogd2hpY2ggYXJlIGNvbnN0YW50IGFjcm9zcyB0aGUgbGlmZXRpbWUgb2YgdGhlIHN0cnVjdCAodGhlCisgKiBkaWFsb2cgdG9rZW4gYmVpbmcgdXNlZCBvbmx5IGZvciBkZWJ1Z2dpbmcpLgogICovCiBzdHJ1Y3QgdGlkX2FtcGR1X3J4IHsKIAlzdHJ1Y3QgcmN1X2hlYWQgcmN1X2hlYWQ7CkBAIC0yMjQsNiArMjI2LDcgQEAKICAqIEByeF9mcmFnbWVudHM6IG51bWJlciBvZiByZWNlaXZlZCBNUERVcwogICogQHJ4X2Ryb3BwZWQ6IG51bWJlciBvZiBkcm9wcGVkIE1QRFVzIGZyb20gdGhpcyBTVEEKICAqIEBsYXN0X3NpZ25hbDogc2lnbmFsIG9mIGxhc3QgcmVjZWl2ZWQgZnJhbWUgZnJvbSB0aGlzIFNUQQorICogQGF2Z19zaWduYWw6IG1vdmluZyBhdmVyYWdlIG9mIHNpZ25hbCBvZiByZWNlaXZlZCBmcmFtZXMgZnJvbSB0aGlzIFNUQQogICogQGxhc3Rfc2VxX2N0cmw6IGxhc3QgcmVjZWl2ZWQgc2VxL2ZyYWcgbnVtYmVyIGZyb20gdGhpcyBTVEEgKHBlciBSWCBxdWV1ZSkKICAqIEB0eF9maWx0ZXJlZF9jb3VudDogbnVtYmVyIG9mIGZyYW1lcyB0aGUgaGFyZHdhcmUgZmlsdGVyZWQgZm9yIHRoaXMgU1RBCiAgKiBAdHhfcmV0cnlfZmFpbGVkOiBudW1iZXIgb2YgZnJhbWVzIHRoYXQgZmFpbGVkIHJldHJ5CkBAIC0yNDgsNiArMjUxLDcgQEAKICAqIEBzdGE6IHN0YXRpb24gaW5mb3JtYXRpb24gd2Ugc2hhcmUgd2l0aCB0aGUgZHJpdmVyCiAgKiBAZGVhZDogc2V0IHRvIHRydWUgd2hlbiBzdGEgaXMgdW5saW5rZWQKICAqIEB1cGxvYWRlZDogc2V0IHRvIHRydWUgd2hlbiBzdGEgaXMgdXBsb2FkZWQgdG8gdGhlIGRyaXZlcgorICogQGxvc3RfcGFja2V0czogbnVtYmVyIG9mIGNvbnNlY3V0aXZlIGxvc3QgcGFja2V0cwogICovCiBzdHJ1Y3Qgc3RhX2luZm8gewogCS8qIEdlbmVyYWwgaW5mb3JtYXRpb24sIG1vc3RseSBzdGF0aWMgKi8KQEAgLTI5MSw2ICsyOTUsNyBAQAogCXVuc2lnbmVkIGxvbmcgcnhfZnJhZ21lbnRzOwogCXVuc2lnbmVkIGxvbmcgcnhfZHJvcHBlZDsKIAlpbnQgbGFzdF9zaWduYWw7CisJc3RydWN0IGV3bWEgYXZnX3NpZ25hbDsKIAlfX2xlMTYgbGFzdF9zZXFfY3RybFtOVU1fUlhfREFUQV9RVUVVRVNdOwogCiAJLyogVXBkYXRlZCBmcm9tIFRYIHN0YXR1cyBwYXRoIG9ubHksIG5vIGxvY2tpbmcgcmVxdWlyZW1lbnRzICovCkBAIC0zMzUsNiArMzQwLDggQEAKIAl9IGRlYnVnZnM7CiAjZW5kaWYKIAorCXVuc2lnbmVkIGludCBsb3N0X3BhY2tldHM7CisKIAkvKiBrZWVwIGxhc3QhICovCiAJc3RydWN0IGllZWU4MDIxMV9zdGEgc3RhOwogfTsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9zdGF0dXMuYyBiL25ldC9tYWM4MDIxMS9zdGF0dXMuYwppbmRleCAzMTUzYzE5Li4zOGE3OTcyIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvc3RhdHVzLmMKKysrIGIvbmV0L21hYzgwMjExL3N0YXR1cy5jCkBAIC0xNTcsNiArMTU3LDE1IEBACiAJfQogfQogCisvKgorICogVXNlIGEgc3RhdGljIHRocmVzaG9sZCBmb3Igbm93LCBiZXN0IHZhbHVlIHRvIGJlIGRldGVybWluZWQKKyAqIGJ5IHRlc3RpbmcgLi4uCisgKiBTaG91bGQgaXQgZGVwZW5kIG9uOgorICogIC0gb24gIyBvZiByZXRyYW5zbWlzc2lvbnMKKyAqICAtIGN1cnJlbnQgdGhyb3VnaHB1dCAoaGlnaGVyIHZhbHVlIGZvciBoaWdoZXIgdHB0KT8KKyAqLworI2RlZmluZSBTVEFfTE9TVF9QS1RfVEhSRVNIT0xECTUwCisKIHZvaWQgaWVlZTgwMjExX3R4X3N0YXR1cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiMjsKQEAgLTE3Myw2ICsxODIsNyBAQAogCWludCByZXRyeV9jb3VudCA9IC0xLCBpOwogCWludCByYXRlc19pZHggPSAtMTsKIAlib29sIHNlbmRfdG9fY29va2VkOworCWJvb2wgYWNrZWQ7CiAKIAlmb3IgKGkgPSAwOyBpIDwgSUVFRTgwMjExX1RYX01BWF9SQVRFUzsgaSsrKSB7CiAJCS8qIHRoZSBIVyBjYW5ub3QgaGF2ZSBhdHRlbXB0ZWQgdGhhdCByYXRlICovCkBAIC0xOTgsOCArMjA4LDggQEAKIAkJaWYgKG1lbWNtcChoZHItPmFkZHIyLCBzdGEtPnNkYXRhLT52aWYuYWRkciwgRVRIX0FMRU4pKQogCQkJY29udGludWU7CiAKLQkJaWYgKCEoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfU1RBVF9BQ0spICYmCi0JCSAgICB0ZXN0X3N0YV9mbGFncyhzdGEsIFdMQU5fU1RBX1BTX1NUQSkpIHsKKwkJYWNrZWQgPSAhIShpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9TVEFUX0FDSyk7CisJCWlmICghYWNrZWQgJiYgdGVzdF9zdGFfZmxhZ3Moc3RhLCBXTEFOX1NUQV9QU19TVEEpKSB7CiAJCQkvKgogCQkJICogVGhlIFNUQSBpcyBpbiBwb3dlciBzYXZlIG1vZGUsIHNvIGFzc3VtZQogCQkJICogdGhhdCB0aGlzIFRYIHBhY2tldCBmYWlsZWQgYmVjYXVzZSBvZiB0aGF0LgpAQCAtMjMxLDcgKzI0MSw3IEBACiAJCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJCXJldHVybjsKIAkJfSBlbHNlIHsKLQkJCWlmICghKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX1NUQVRfQUNLKSkKKwkJCWlmICghYWNrZWQpCiAJCQkJc3RhLT50eF9yZXRyeV9mYWlsZWQrKzsKIAkJCXN0YS0+dHhfcmV0cnlfY291bnQgKz0gcmV0cnlfY291bnQ7CiAJCX0KQEAgLTI0MCw5ICsyNTAsMjUgQEAKIAkJaWYgKGllZWU4MDIxMV92aWZfaXNfbWVzaCgmc3RhLT5zZGF0YS0+dmlmKSkKIAkJCWllZWU4MDIxMXNfdXBkYXRlX21ldHJpYyhsb2NhbCwgc3RhLCBza2IpOwogCi0JCWlmICghKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9JTkpFQ1RFRCkgJiYKLQkJICAgIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9TVEFUX0FDSykpCisJCWlmICghKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9JTkpFQ1RFRCkgJiYgYWNrZWQpCiAJCQlpZWVlODAyMTFfZnJhbWVfYWNrZWQoc3RhLCBza2IpOworCisJCWlmICgoc3RhLT5zZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgJiYKKwkJICAgIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfUkVQT1JUU19UWF9BQ0tfU1RBVFVTKSkKKwkJCWllZWU4MDIxMV9zdGFfdHhfbm90aWZ5KHN0YS0+c2RhdGEsICh2b2lkICopIHNrYi0+ZGF0YSwgYWNrZWQpOworCisJCWlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfUkVQT1JUU19UWF9BQ0tfU1RBVFVTKSB7CisJCQlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfU1RBVF9BQ0spIHsKKwkJCQlpZiAoc3RhLT5sb3N0X3BhY2tldHMpCisJCQkJCXN0YS0+bG9zdF9wYWNrZXRzID0gMDsKKwkJCX0gZWxzZSBpZiAoKytzdGEtPmxvc3RfcGFja2V0cyA+PSBTVEFfTE9TVF9QS1RfVEhSRVNIT0xEKSB7CisJCQkJY2ZnODAyMTFfY3FtX3BrdGxvc3Nfbm90aWZ5KHN0YS0+c2RhdGEtPmRldiwKKwkJCQkJCQkgICAgc3RhLT5zdGEuYWRkciwKKwkJCQkJCQkgICAgc3RhLT5sb3N0X3BhY2tldHMsCisJCQkJCQkJICAgIEdGUF9BVE9NSUMpOworCQkJCXN0YS0+bG9zdF9wYWNrZXRzID0gMDsKKwkJCX0KKwkJfQogCX0KIAogCXJjdV9yZWFkX3VubG9jaygpOwpAQCAtMjk1LDEwICszMjEsMjMgQEAKIAkJCQkJbXNlY3NfdG9famlmZmllcygxMCkpOwogCX0KIAotCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9JTlRGTF9OTDgwMjExX0ZSQU1FX1RYKQorCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9JTlRGTF9OTDgwMjExX0ZSQU1FX1RYKSB7CisJCXN0cnVjdCBpZWVlODAyMTFfd29yayAqd2s7CisKKwkJcmN1X3JlYWRfbG9jaygpOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh3aywgJmxvY2FsLT53b3JrX2xpc3QsIGxpc3QpIHsKKwkJCWlmICh3ay0+dHlwZSAhPSBJRUVFODAyMTFfV09SS19PRkZDSEFOTkVMX1RYKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKHdrLT5vZmZjaGFuX3R4LmZyYW1lICE9IHNrYikKKwkJCQljb250aW51ZTsKKwkJCXdrLT5vZmZjaGFuX3R4LmZyYW1lID0gTlVMTDsKKwkJCWJyZWFrOworCQl9CisJCXJjdV9yZWFkX3VubG9jaygpOwogCQljZmc4MDIxMV9tZ210X3R4X3N0YXR1cygKIAkJCXNrYi0+ZGV2LCAodW5zaWduZWQgbG9uZykgc2tiLCBza2ItPmRhdGEsIHNrYi0+bGVuLAogCQkJISEoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfU1RBVF9BQ0spLCBHRlBfQVRPTUlDKTsKKwl9CiAKIAkvKiB0aGlzIHdhcyBhIHRyYW5zbWl0dGVkIGZyYW1lLCBidXQgbm93IHdlIHdhbnQgdG8gcmV1c2UgaXQgKi8KIAlza2Jfb3JwaGFuKHNrYik7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdHguYyBiL25ldC9tYWM4MDIxMS90eC5jCmluZGV4IDdhNjM3YjguLjU5NTBlM2EgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS90eC5jCisrKyBiL25ldC9tYWM4MDIxMS90eC5jCkBAIC01MzksNyArNTM5LDExIEBACiAJCSBpZWVlODAyMTFfaXNfcm9idXN0X21nbXRfZnJhbWUoaGRyKSAmJgogCQkgKGtleSA9IHJjdV9kZXJlZmVyZW5jZSh0eC0+c2RhdGEtPmRlZmF1bHRfbWdtdF9rZXkpKSkKIAkJdHgtPmtleSA9IGtleTsKLQllbHNlIGlmICgoa2V5ID0gcmN1X2RlcmVmZXJlbmNlKHR4LT5zZGF0YS0+ZGVmYXVsdF9rZXkpKSkKKwllbHNlIGlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIxKSAmJgorCQkgKGtleSA9IHJjdV9kZXJlZmVyZW5jZSh0eC0+c2RhdGEtPmRlZmF1bHRfbXVsdGljYXN0X2tleSkpKQorCQl0eC0+a2V5ID0ga2V5OworCWVsc2UgaWYgKCFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIxKSAmJgorCQkgKGtleSA9IHJjdV9kZXJlZmVyZW5jZSh0eC0+c2RhdGEtPmRlZmF1bHRfdW5pY2FzdF9rZXkpKSkKIAkJdHgtPmtleSA9IGtleTsKIAllbHNlIGlmICh0eC0+c2RhdGEtPmRyb3BfdW5lbmNyeXB0ZWQgJiYKIAkJICh0eC0+c2tiLT5wcm90b2NvbCAhPSB0eC0+c2RhdGEtPmNvbnRyb2xfcG9ydF9wcm90b2NvbCkgJiYKQEAgLTYyMiw3ICs2MjYsOCBAQAogCQl0eHJjLm1heF9yYXRlX2lkeCA9IC0xOwogCWVsc2UKIAkJdHhyYy5tYXhfcmF0ZV9pZHggPSBmbHModHhyYy5yYXRlX2lkeF9tYXNrKSAtIDE7Ci0JdHhyYy5hcCA9IHR4LT5zZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVA7CisJdHhyYy5ic3MgPSAodHgtPnNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCB8fAorCQkgICAgdHgtPnNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQyk7CiAKIAkvKiBzZXQgdXAgUlRTIHByb3RlY3Rpb24gaWYgZGVzaXJlZCAqLwogCWlmIChsZW4gPiB0eC0+bG9jYWwtPmh3LndpcGh5LT5ydHNfdGhyZXNob2xkKSB7CkBAIC02NjUsMTAgKzY3MCwxMSBAQAogCWlmICh1bmxpa2VseShpbmZvLT5jb250cm9sLnJhdGVzWzBdLmlkeCA8IDApKQogCQlyZXR1cm4gVFhfRFJPUDsKIAotCWlmICh0eHJjLnJlcG9ydGVkX3JhdGUuaWR4IDwgMCkKKwlpZiAodHhyYy5yZXBvcnRlZF9yYXRlLmlkeCA8IDApIHsKIAkJdHhyYy5yZXBvcnRlZF9yYXRlID0gaW5mby0+Y29udHJvbC5yYXRlc1swXTsKLQotCWlmICh0eC0+c3RhKQorCQlpZiAodHgtPnN0YSAmJiBpZWVlODAyMTFfaXNfZGF0YShoZHItPmZyYW1lX2NvbnRyb2wpKQorCQkJdHgtPnN0YS0+bGFzdF90eF9yYXRlID0gdHhyYy5yZXBvcnRlZF9yYXRlOworCX0gZWxzZSBpZiAodHgtPnN0YSkKIAkJdHgtPnN0YS0+bGFzdF90eF9yYXRlID0gdHhyYy5yZXBvcnRlZF9yYXRlOwogCiAJaWYgKHVubGlrZWx5KCFpbmZvLT5jb250cm9sLnJhdGVzWzBdLmNvdW50KSkKQEAgLTEwMzMsNiArMTAzOSw3IEBACiAJc3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9oZWFkZXIgKnJ0aGRyID0KIAkJKHN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaGVhZGVyICopIHNrYi0+ZGF0YTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKKwlib29sIGh3X2ZyYWc7CiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwogCWludCByZXQgPSBpZWVlODAyMTFfcmFkaW90YXBfaXRlcmF0b3JfaW5pdCgmaXRlcmF0b3IsIHJ0aGRyLCBza2ItPmxlbiwKIAkJCQkJCSAgIE5VTEwpOwpAQCAtMTA0Miw2ICsxMDQ5LDkgQEAKIAlpbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfSU5URkxfRE9OVF9FTkNSWVBUOwogCXR4LT5mbGFncyAmPSB+SUVFRTgwMjExX1RYX0ZSQUdNRU5URUQ7CiAKKwkvKiBwYWNrZXQgaXMgZnJhZ21lbnRlZCBpbiBIVyBpZiB3ZSBoYXZlIGEgbm9uLU5VTEwgZHJpdmVyIGNhbGxiYWNrICovCisJaHdfZnJhZyA9ICh0eC0+bG9jYWwtPm9wcy0+c2V0X2ZyYWdfdGhyZXNob2xkICE9IE5VTEwpOworCiAJLyoKIAkgKiBmb3IgZXZlcnkgcmFkaW90YXAgZW50cnkgdGhhdCBpcyBwcmVzZW50CiAJICogKGllZWU4MDIxMV9yYWRpb3RhcF9pdGVyYXRvcl9uZXh0IHJldHVybnMgLUVOT0VOVCB3aGVuIG5vIG1vcmUKQEAgLTEwNzgsNyArMTA4OCw4IEBACiAJCQl9CiAJCQlpZiAoKml0ZXJhdG9yLnRoaXNfYXJnICYgSUVFRTgwMjExX1JBRElPVEFQX0ZfV0VQKQogCQkJCWluZm8tPmZsYWdzICY9IH5JRUVFODAyMTFfVFhfSU5URkxfRE9OVF9FTkNSWVBUOwotCQkJaWYgKCppdGVyYXRvci50aGlzX2FyZyAmIElFRUU4MDIxMV9SQURJT1RBUF9GX0ZSQUcpCisJCQlpZiAoKCppdGVyYXRvci50aGlzX2FyZyAmIElFRUU4MDIxMV9SQURJT1RBUF9GX0ZSQUcpICYmCisJCQkJCQkJCSFod19mcmFnKQogCQkJCXR4LT5mbGFncyB8PSBJRUVFODAyMTFfVFhfRlJBR01FTlRFRDsKIAkJCWJyZWFrOwogCkBAIC0xMTgxLDggKzExOTIsMTAgQEAKIAkvKgogCSAqIFNldCB0aGlzIGZsYWcgKHVzZWQgYmVsb3cgdG8gaW5kaWNhdGUgImF1dG9tYXRpYyBmcmFnbWVudGF0aW9uIiksCiAJICogaXQgd2lsbCBiZSBjbGVhcmVkL2xlZnQgYnkgcmFkaW90YXAgYXMgZGVzaXJlZC4KKwkgKiBPbmx5IHZhbGlkIHdoZW4gZnJhZ21lbnRhdGlvbiBpcyBkb25lIGJ5IHRoZSBzdGFjay4KIAkgKi8KLQl0eC0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0ZSQUdNRU5URUQ7CisJaWYgKCFsb2NhbC0+b3BzLT5zZXRfZnJhZ190aHJlc2hvbGQpCisJCXR4LT5mbGFncyB8PSBJRUVFODAyMTFfVFhfRlJBR01FTlRFRDsKIAogCS8qIHByb2Nlc3MgYW5kIHJlbW92ZSB0aGUgaW5qZWN0aW9uIHJhZGlvdGFwIGhlYWRlciAqLwogCWlmICh1bmxpa2VseShpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9JTlRGTF9IQVNfUkFESU9UQVApKSB7CkBAIC0xMjg0LDYgKzEyOTcsNyBAQAogCiAJd2hpbGUgKHNrYikgewogCQlpbnQgcSA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpOworCQlfX2xlMTYgZmM7CiAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbl9sb2NrLCBmbGFncyk7CiAJCXJldCA9IElFRUU4MDIxMV9UWF9PSzsKQEAgLTEzMjYsNiArMTM0MCw3IEBACiAJCWVsc2UKIAkJCWluZm8tPmNvbnRyb2wuc3RhID0gTlVMTDsKIAorCQlmYyA9ICgoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGEpLT5mcmFtZV9jb250cm9sOwogCQlyZXQgPSBkcnZfdHgobG9jYWwsIHNrYik7CiAJCWlmIChXQVJOX09OKHJldCAhPSBORVRERVZfVFhfT0sgJiYgc2tiLT5sZW4gIT0gbGVuKSkgewogCQkJZGV2X2tmcmVlX3NrYihza2IpOwpAQCAtMTMzNiw2ICsxMzUxLDcgQEAKIAkJCXJldHVybiBJRUVFODAyMTFfVFhfQUdBSU47CiAJCX0KIAorCQlpZWVlODAyMTFfdHB0X2xlZF90cmlnX3R4KGxvY2FsLCBmYywgbGVuKTsKIAkJKnNrYnAgPSBza2IgPSBuZXh0OwogCQlpZWVlODAyMTFfbGVkX3R4KGxvY2FsLCAxKTsKIAkJZnJhZ20gPSB0cnVlOwpAQCAtMTUzMyw4ICsxNTQ5LDEwIEBACiAKIAlpZiAoc2tiX2hlYWRlcl9jbG9uZWQoc2tiKSkKIAkJSTgwMl9ERUJVR19JTkMobG9jYWwtPnR4X2V4cGFuZF9za2JfaGVhZF9jbG9uZWQpOwotCWVsc2UKKwllbHNlIGlmIChoZWFkX25lZWQgfHwgdGFpbF9uZWVkKQogCQlJODAyX0RFQlVHX0lOQyhsb2NhbC0+dHhfZXhwYW5kX3NrYl9oZWFkKTsKKwllbHNlCisJCXJldHVybiAwOwogCiAJaWYgKHBza2JfZXhwYW5kX2hlYWQoc2tiLCBoZWFkX25lZWQsIHRhaWxfbmVlZCwgR0ZQX0FUT01JQykpIHsKIAkJd2lwaHlfZGVidWcobG9jYWwtPmh3LndpcGh5LApAQCAtMTcyNiwxMiArMTc0NCwxMyBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOwogCWludCByZXQgPSBORVRERVZfVFhfQlVTWSwgaGVhZF9uZWVkOwogCXUxNiBldGhlcnR5cGUsIGhkcmxlbiwgIG1lc2hoZHJsZW4gPSAwOwogCV9fbGUxNiBmYzsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciBoZHI7CiAJc3RydWN0IGllZWU4MDIxMXNfaGRyIG1lc2hfaGRyIF9fbWF5YmVfdW51c2VkOworCXN0cnVjdCBtZXNoX3BhdGggKm1wcGF0aCA9IE5VTEw7CiAJY29uc3QgdTggKmVuY2Fwc19kYXRhOwogCWludCBlbmNhcHNfbGVuLCBza2lwX2hlYWRlcl9ieXRlczsKIAlpbnQgbmhfcG9zLCBoX3BvczsKQEAgLTE3OTIsMTYgKzE4MTEsMjMgQEAKIAkJCXJldCA9IE5FVERFVl9UWF9PSzsKIAkJCWdvdG8gZmFpbDsKIAkJfQorCQlpZiAoIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKHNrYi0+ZGF0YSkpCisJCQltcHBhdGggPSBtcHBfcGF0aF9sb29rdXAoc2tiLT5kYXRhLCBzZGF0YSk7CiAKKwkJLyoKKwkJICogRG8gbm90IHVzZSBhZGRyZXNzIGV4dGVuc2lvbiwgaWYgaXQgaXMgYSBwYWNrZXQgZnJvbQorCQkgKiB0aGUgc2FtZSBpbnRlcmZhY2UgYW5kIHRoZSBkZXN0aW5hdGlvbiBpcyBub3QgYmVpbmcKKwkJICogcHJveGllZCBieSBhbnkgb3RoZXIgbWVzdCBwb2ludC4KKwkJICovCiAJCWlmIChjb21wYXJlX2V0aGVyX2FkZHIoc2RhdGEtPnZpZi5hZGRyLAotCQkJCSAgICAgICBza2ItPmRhdGEgKyBFVEhfQUxFTikgPT0gMCkgeworCQkJCSAgICAgICBza2ItPmRhdGEgKyBFVEhfQUxFTikgPT0gMCAmJgorCQkgICAgKCFtcHBhdGggfHwgIWNvbXBhcmVfZXRoZXJfYWRkcihtcHBhdGgtPm1wcCwgc2tiLT5kYXRhKSkpIHsKIAkJCWhkcmxlbiA9IGllZWU4MDIxMV9maWxsX21lc2hfYWRkcmVzc2VzKCZoZHIsICZmYywKIAkJCQkJc2tiLT5kYXRhLCBza2ItPmRhdGEgKyBFVEhfQUxFTik7CiAJCQltZXNoaGRybGVuID0gaWVlZTgwMjExX25ld19tZXNoX2hlYWRlcigmbWVzaF9oZHIsCi0JCQkJCXNkYXRhLCBOVUxMLCBOVUxMLCBOVUxMKTsKKwkJCQkJc2RhdGEsIE5VTEwsIE5VTEwpOwogCQl9IGVsc2UgewogCQkJLyogcGFja2V0IGZyb20gb3RoZXIgaW50ZXJmYWNlICovCi0JCQlzdHJ1Y3QgbWVzaF9wYXRoICptcHBhdGg7CiAJCQlpbnQgaXNfbWVzaF9tY2FzdCA9IDE7CiAJCQljb25zdCB1OCAqbWVzaF9kYTsKIApAQCAtMTgxMiw4ICsxODM4LDYgQEAKIAkJCWVsc2UgewogCQkJCXN0YXRpYyBjb25zdCB1OCBiY2FzdFtFVEhfQUxFTl0gPQogCQkJCQl7IDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYgfTsKLQotCQkJCW1wcGF0aCA9IG1wcF9wYXRoX2xvb2t1cChza2ItPmRhdGEsIHNkYXRhKTsKIAkJCQlpZiAobXBwYXRoKSB7CiAJCQkJCS8qIFJBIFRBIG1EQSBtU0EgQUU6REEgU0EgKi8KIAkJCQkJbWVzaF9kYSA9IG1wcGF0aC0+bXBwOwpAQCAtMTgzMSwxMyArMTg1NSwxMSBAQAogCQkJCQlpZWVlODAyMTFfbmV3X21lc2hfaGVhZGVyKCZtZXNoX2hkciwKIAkJCQkJCQlzZGF0YSwKIAkJCQkJCQlza2ItPmRhdGEgKyBFVEhfQUxFTiwKLQkJCQkJCQlOVUxMLAogCQkJCQkJCU5VTEwpOwogCQkJZWxzZQogCQkJCW1lc2hoZHJsZW4gPQogCQkJCQlpZWVlODAyMTFfbmV3X21lc2hfaGVhZGVyKCZtZXNoX2hkciwKIAkJCQkJCQlzZGF0YSwKLQkJCQkJCQlOVUxMLAogCQkJCQkJCXNrYi0+ZGF0YSwKIAkJCQkJCQlza2ItPmRhdGEgKyBFVEhfQUxFTik7CiAKQEAgLTE5MjEsNyArMTk0Myw3IEBACiAJICovCiAJaWYgKHNrYl9zaGFyZWQoc2tiKSkgewogCQl0bXBfc2tiID0gc2tiOwotCQlza2IgPSBza2JfY29weShza2IsIEdGUF9BVE9NSUMpOworCQlza2IgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTsKIAkJa2ZyZWVfc2tiKHRtcF9za2IpOwogCiAJCWlmICghc2tiKSB7CkBAIC0yMDE3LDYgKzIwMzksNyBAQAogCXNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCBuaF9wb3MpOwogCXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcihza2IsIGhfcG9zKTsKIAorCWluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiAJbWVtc2V0KGluZm8sIDAsIHNpemVvZigqaW5mbykpOwogCiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CkBAIC0yMjc3LDcgKzIzMDAsOCBAQAogCQl1OCAqcG9zOwogCiAJCS8qIGhlYWRyb29tLCBoZWFkIGxlbmd0aCwgdGFpbCBsZW5ndGggYW5kIG1heGltdW0gVElNIGxlbmd0aCAqLwotCQlza2IgPSBkZXZfYWxsb2Nfc2tiKGxvY2FsLT50eF9oZWFkcm9vbSArIDQwMCk7CisJCXNrYiA9IGRldl9hbGxvY19za2IobG9jYWwtPnR4X2hlYWRyb29tICsgNDAwICsKKwkJCQlzZGF0YS0+dS5tZXNoLnZlbmRvcl9pZV9sZW4pOwogCQlpZiAoIXNrYikKIAkJCWdvdG8gb3V0OwogCkBAIC0yMzIxLDcgKzIzNDUsNyBAQAogCQl0eHJjLm1heF9yYXRlX2lkeCA9IC0xOwogCWVsc2UKIAkJdHhyYy5tYXhfcmF0ZV9pZHggPSBmbHModHhyYy5yYXRlX2lkeF9tYXNrKSAtIDE7Ci0JdHhyYy5hcCA9IHRydWU7CisJdHhyYy5ic3MgPSB0cnVlOwogCXJhdGVfY29udHJvbF9nZXRfcmF0ZShzZGF0YSwgTlVMTCwgJnR4cmMpOwogCiAJaW5mby0+Y29udHJvbC52aWYgPSB2aWY7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdXRpbC5jIGIvbmV0L21hYzgwMjExL3V0aWwuYwppbmRleCAwYjZmYzkyLi5jZjY4NzAwIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvdXRpbC5jCisrKyBiL25ldC9tYWM4MDIxMS91dGlsLmMKQEAgLTM2OCw4ICszNjgsOSBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbl9sb2NrLCBmbGFncyk7CiB9CiAKLWludCBpZWVlODAyMTFfYWRkX3BlbmRpbmdfc2ticyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKLQkJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpza2JzKQoraW50IGllZWU4MDIxMV9hZGRfcGVuZGluZ19za2JzX2ZuKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkJCSAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqc2ticywKKwkJCQkgIHZvaWQgKCpmbikodm9pZCAqZGF0YSksIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSAmbG9jYWwtPmh3OwogCXN0cnVjdCBza19idWZmICpza2I7CkBAIC0zOTQsNiArMzk1LDkgQEAKIAkJX19za2JfcXVldWVfdGFpbCgmbG9jYWwtPnBlbmRpbmdbcXVldWVdLCBza2IpOwogCX0KIAorCWlmIChmbikKKwkJZm4oZGF0YSk7CisKIAlmb3IgKGkgPSAwOyBpIDwgaHctPnF1ZXVlczsgaSsrKQogCQlfX2llZWU4MDIxMV93YWtlX3F1ZXVlKGh3LCBpLAogCQkJSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX1NLQl9BREQpOwpAQCAtNDAyLDYgKzQwNiwxMiBAQAogCXJldHVybiByZXQ7CiB9CiAKK2ludCBpZWVlODAyMTFfYWRkX3BlbmRpbmdfc2ticyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpza2JzKQoreworCXJldHVybiBpZWVlODAyMTFfYWRkX3BlbmRpbmdfc2tic19mbihsb2NhbCwgc2ticywgTlVMTCwgTlVMTCk7Cit9CisKIHZvaWQgaWVlZTgwMjExX3N0b3BfcXVldWVzX2J5X3JlYXNvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkgICAgZW51bSBxdWV1ZV9zdG9wX3JlYXNvbiByZWFzb24pCiB7CkBAIC0xMDExLDkgKzEwMjEsMTAgQEAKIAlyZXR1cm4gcG9zIC0gYnVmZmVyOwogfQogCi12b2lkIGllZWU4MDIxMV9zZW5kX3Byb2JlX3JlcShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgdTggKmRzdCwKLQkJCSAgICAgIGNvbnN0IHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4sCi0JCQkgICAgICBjb25zdCB1OCAqaWUsIHNpemVfdCBpZV9sZW4pCitzdHJ1Y3Qgc2tfYnVmZiAqaWVlZTgwMjExX2J1aWxkX3Byb2JlX3JlcShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCQkJICB1OCAqZHN0LAorCQkJCQkgIGNvbnN0IHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4sCisJCQkJCSAgY29uc3QgdTggKmllLCBzaXplX3QgaWVfbGVuKQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwogCXN0cnVjdCBza19idWZmICpza2I7CkBAIC0xMDI3LDcgKzEwMzgsNyBAQAogCWlmICghYnVmKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIHRlbXBvcmFyeSBJRSAiCiAJCSAgICAgICAiYnVmZmVyXG4iLCBzZGF0YS0+bmFtZSk7Ci0JCXJldHVybjsKKwkJcmV0dXJuIE5VTEw7CiAJfQogCiAJY2hhbiA9IGllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbCgKQEAgLTEwNTAsOCArMTA2MSwyMCBAQAogCX0KIAogCUlFRUU4MDIxMV9TS0JfQ0Ioc2tiKS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0lOVEZMX0RPTlRfRU5DUllQVDsKLQlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IpOwogCWtmcmVlKGJ1Zik7CisKKwlyZXR1cm4gc2tiOworfQorCit2b2lkIGllZWU4MDIxMV9zZW5kX3Byb2JlX3JlcShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgdTggKmRzdCwKKwkJCSAgICAgIGNvbnN0IHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4sCisJCQkgICAgICBjb25zdCB1OCAqaWUsIHNpemVfdCBpZV9sZW4pCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCXNrYiA9IGllZWU4MDIxMV9idWlsZF9wcm9iZV9yZXEoc2RhdGEsIGRzdCwgc3NpZCwgc3NpZF9sZW4sIGllLCBpZV9sZW4pOworCWlmIChza2IpCisJCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYik7CiB9CiAKIHUzMiBpZWVlODAyMTFfc3RhX2dldF9yYXRlcyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKQEAgLTEwOTMsNiArMTExNiw3IEBACiB2b2lkIGllZWU4MDIxMV9zdG9wX2RldmljZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCkKIHsKIAlpZWVlODAyMTFfbGVkX3JhZGlvKGxvY2FsLCBmYWxzZSk7CisJaWVlZTgwMjExX21vZF90cHRfbGVkX3RyaWcobG9jYWwsIDAsIElFRUU4MDIxMV9UUFRfTEVEVFJJR19GTF9SQURJTyk7CiAKIAljYW5jZWxfd29ya19zeW5jKCZsb2NhbC0+cmVjb25maWdfZmlsdGVyKTsKIApAQCAtMTEyNyw2ICsxMTUxLDggQEAKIAkJfQogCiAJCWllZWU4MDIxMV9sZWRfcmFkaW8obG9jYWwsIHRydWUpOworCQlpZWVlODAyMTFfbW9kX3RwdF9sZWRfdHJpZyhsb2NhbCwKKwkJCQkJICAgSUVFRTgwMjExX1RQVF9MRURUUklHX0ZMX1JBRElPLCAwKTsKIAl9CiAKIAkvKiBhZGQgaW50ZXJmYWNlcyAqLwpAQCAtMTE1Miw2ICsxMTc4LDkgQEAKIAl9CiAJbXV0ZXhfdW5sb2NrKCZsb2NhbC0+c3RhX210eCk7CiAKKwkvKiBzZXR1cCBmcmFnbWVudGF0aW9uIHRocmVzaG9sZCAqLworCWRydl9zZXRfZnJhZ190aHJlc2hvbGQobG9jYWwsIGh3LT53aXBoeS0+ZnJhZ190aHJlc2hvbGQpOworCiAJLyogc2V0dXAgUlRTIHRocmVzaG9sZCAqLwogCWRydl9zZXRfcnRzX3RocmVzaG9sZChsb2NhbCwgaHctPndpcGh5LT5ydHNfdGhyZXNob2xkKTsKIApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3dtZS5jIGIvbmV0L21hYzgwMjExL3dtZS5jCmluZGV4IDM0ZTZkMDIuLjI4YmMwODQgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS93bWUuYworKysgYi9uZXQvbWFjODAyMTEvd21lLmMKQEAgLTIxLDcgKzIxLDE2IEBACiAvKiBEZWZhdWx0IG1hcHBpbmcgaW4gY2xhc3NpZmllciB0byB3b3JrIHdpdGggZGVmYXVsdAogICogcXVldWUgc2V0dXAuCiAgKi8KLWNvbnN0IGludCBpZWVlODAyXzFkX3RvX2FjWzhdID0geyAyLCAzLCAzLCAyLCAxLCAxLCAwLCAwIH07Citjb25zdCBpbnQgaWVlZTgwMl8xZF90b19hY1s4XSA9IHsKKwlJRUVFODAyMTFfQUNfQkUsCisJSUVFRTgwMjExX0FDX0JLLAorCUlFRUU4MDIxMV9BQ19CSywKKwlJRUVFODAyMTFfQUNfQkUsCisJSUVFRTgwMjExX0FDX1ZJLAorCUlFRUU4MDIxMV9BQ19WSSwKKwlJRUVFODAyMTFfQUNfVk8sCisJSUVFRTgwMjExX0FDX1ZPCit9OwogCiBzdGF0aWMgaW50IHdtZV9kb3duZ3JhZGVfYWMoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKQEAgLTUwLDI2ICs1OSwyMiBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwogCXN0cnVjdCBzdGFfaW5mbyAqc3RhID0gTlVMTDsKLQl1MzIgc3RhX2ZsYWdzID0gMDsKIAljb25zdCB1OCAqcmEgPSBOVUxMOwogCWJvb2wgcW9zID0gZmFsc2U7CiAKIAlpZiAobG9jYWwtPmh3LnF1ZXVlcyA8IDQgfHwgc2tiLT5sZW4gPCA2KSB7CiAJCXNrYi0+cHJpb3JpdHkgPSAwOyAvKiByZXF1aXJlZCBmb3IgY29ycmVjdCBXUEEvMTFpIE1JQyAqLwotCQlyZXR1cm4gbWluX3QodTE2LCBsb2NhbC0+aHcucXVldWVzIC0gMSwKLQkJCSAgICAgaWVlZTgwMl8xZF90b19hY1tza2ItPnByaW9yaXR5XSk7CisJCXJldHVybiBtaW5fdCh1MTYsIGxvY2FsLT5ody5xdWV1ZXMgLSAxLCBJRUVFODAyMTFfQUNfQkUpOwogCX0KIAogCXJjdV9yZWFkX2xvY2soKTsKIAlzd2l0Y2ggKHNkYXRhLT52aWYudHlwZSkgewogCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVBfVkxBTjoKLQkJcmN1X3JlYWRfbG9jaygpOwogCQlzdGEgPSByY3VfZGVyZWZlcmVuY2Uoc2RhdGEtPnUudmxhbi5zdGEpOwotCQlpZiAoc3RhKQotCQkJc3RhX2ZsYWdzID0gZ2V0X3N0YV9mbGFncyhzdGEpOwotCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJaWYgKHN0YSkKKwkJaWYgKHN0YSkgeworCQkJcW9zID0gZ2V0X3N0YV9mbGFncyhzdGEpICYgV0xBTl9TVEFfV01FOwogCQkJYnJlYWs7CisJCX0KIAljYXNlIE5MODAyMTFfSUZUWVBFX0FQOgogCQlyYSA9IHNrYi0+ZGF0YTsKIAkJYnJlYWs7CkBAIC05OCwxNyArMTAzLDEzIEBACiAJaWYgKCFzdGEgJiYgcmEgJiYgIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKHJhKSkgewogCQlzdGEgPSBzdGFfaW5mb19nZXQoc2RhdGEsIHJhKTsKIAkJaWYgKHN0YSkKLQkJCXN0YV9mbGFncyA9IGdldF9zdGFfZmxhZ3Moc3RhKTsKKwkJCXFvcyA9IGdldF9zdGFfZmxhZ3Moc3RhKSAmIFdMQU5fU1RBX1dNRTsKIAl9Ci0KLQlpZiAoc3RhX2ZsYWdzICYgV0xBTl9TVEFfV01FKQotCQlxb3MgPSB0cnVlOwotCiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlpZiAoIXFvcykgewogCQlza2ItPnByaW9yaXR5ID0gMDsgLyogcmVxdWlyZWQgZm9yIGNvcnJlY3QgV1BBLzExaSBNSUMgKi8KLQkJcmV0dXJuIGllZWU4MDJfMWRfdG9fYWNbc2tiLT5wcmlvcml0eV07CisJCXJldHVybiBJRUVFODAyMTFfQUNfQkU7CiAJfQogCiAJLyogdXNlIHRoZSBkYXRhIGNsYXNzaWZpZXIgdG8gZGV0ZXJtaW5lIHdoYXQgODAyLjFkIHRhZyB0aGUKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS93b3JrLmMgYi9uZXQvbWFjODAyMTEvd29yay5jCmluZGV4IDE0NjA5N2MuLjM2MzA1ZTAgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS93b3JrLmMKKysrIGIvbmV0L21hYzgwMjExL3dvcmsuYwpAQCAtNDU4LDggKzQ1OCw5IEBACiAJCXJldHVybiBXT1JLX0FDVF9USU1FT1VUOwogCX0KIAotCXByaW50ayhLRVJOX0RFQlVHICIlczogZGlyZWN0IHByb2JlIHRvICVwTSAodHJ5ICVkKVxuIiwKLQkJCXNkYXRhLT5uYW1lLCB3ay0+ZmlsdGVyX3RhLCB3ay0+cHJvYmVfYXV0aC50cmllcyk7CisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBkaXJlY3QgcHJvYmUgdG8gJXBNICh0cnkgJWQvJWkpXG4iLAorCSAgICAgICBzZGF0YS0+bmFtZSwgd2stPmZpbHRlcl90YSwgd2stPnByb2JlX2F1dGgudHJpZXMsCisJICAgICAgIElFRUU4MDIxMV9BVVRIX01BWF9UUklFUyk7CiAKIAkvKgogCSAqIERpcmVjdCBwcm9iZSBpcyBzZW50IHRvIGJyb2FkY2FzdCBhZGRyZXNzIGFzIHNvbWUgQVBzCkBAIC01NjEsNiArNTYyLDI1IEBACiB9CiAKIHN0YXRpYyBlbnVtIHdvcmtfYWN0aW9uIF9fbXVzdF9jaGVjaworaWVlZTgwMjExX29mZmNoYW5uZWxfdHgoc3RydWN0IGllZWU4MDIxMV93b3JrICp3aykKK3sKKwlpZiAoIXdrLT5zdGFydGVkKSB7CisJCXdrLT50aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMod2stPm9mZmNoYW5fdHgud2FpdCk7CisKKwkJLyoKKwkJICogQWZ0ZXIgdGhpcywgb2ZmY2hhbl90eC5mcmFtZSByZW1haW5zIGJ1dCBub3cgaXMgbm8KKwkJICogbG9uZ2VyIGEgdmFsaWQgcG9pbnRlciAtLSB3ZSBzdGlsbCBuZWVkIGl0IGFzIHRoZQorCQkgKiBjb29raWUgZm9yIGNhbmNlbGluZyB0aGlzIHdvcmsuCisJCSAqLworCQlpZWVlODAyMTFfdHhfc2tiKHdrLT5zZGF0YSwgd2stPm9mZmNoYW5fdHguZnJhbWUpOworCisJCXJldHVybiBXT1JLX0FDVF9OT05FOworCX0KKworCXJldHVybiBXT1JLX0FDVF9USU1FT1VUOworfQorCitzdGF0aWMgZW51bSB3b3JrX2FjdGlvbiBfX211c3RfY2hlY2sKIGllZWU4MDIxMV9hc3NvY19iZWFjb25fd2FpdChzdHJ1Y3QgaWVlZTgwMjExX3dvcmsgKndrKQogewogCWlmICh3ay0+c3RhcnRlZCkKQEAgLTk1NSw2ICs5NzUsOSBAQAogCQljYXNlIElFRUU4MDIxMV9XT1JLX1JFTUFJTl9PTl9DSEFOTkVMOgogCQkJcm1hID0gaWVlZTgwMjExX3JlbWFpbl9vbl9jaGFubmVsX3RpbWVvdXQod2spOwogCQkJYnJlYWs7CisJCWNhc2UgSUVFRTgwMjExX1dPUktfT0ZGQ0hBTk5FTF9UWDoKKwkJCXJtYSA9IGllZWU4MDIxMV9vZmZjaGFubmVsX3R4KHdrKTsKKwkJCWJyZWFrOwogCQljYXNlIElFRUU4MDIxMV9XT1JLX0FTU09DX0JFQUNPTl9XQUlUOgogCQkJcm1hID0gaWVlZTgwMjExX2Fzc29jX2JlYWNvbl93YWl0KHdrKTsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL2NvcmUuYwppbmRleCA4NWRhYmI4Li4zMmZjYmUyIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2NvcmUuYworKysgYi9uZXQvbmV0ZmlsdGVyL2NvcmUuYwpAQCAtMTczLDkgKzE3MywxMSBAQAogCQkJICAgICBvdXRkZXYsICZlbGVtLCBva2ZuLCBob29rX3RocmVzaCk7CiAJaWYgKHZlcmRpY3QgPT0gTkZfQUNDRVBUIHx8IHZlcmRpY3QgPT0gTkZfU1RPUCkgewogCQlyZXQgPSAxOwotCX0gZWxzZSBpZiAodmVyZGljdCA9PSBORl9EUk9QKSB7CisJfSBlbHNlIGlmICgodmVyZGljdCAmIE5GX1ZFUkRJQ1RfTUFTSykgPT0gTkZfRFJPUCkgewogCQlrZnJlZV9za2Ioc2tiKTsKLQkJcmV0ID0gLUVQRVJNOworCQlyZXQgPSAtKHZlcmRpY3QgPj4gTkZfVkVSRElDVF9CSVRTKTsKKwkJaWYgKHJldCA9PSAwKQorCQkJcmV0ID0gLUVQRVJNOwogCX0gZWxzZSBpZiAoKHZlcmRpY3QgJiBORl9WRVJESUNUX01BU0spID09IE5GX1FVRVVFKSB7CiAJCWlmICghbmZfcXVldWUoc2tiLCBlbGVtLCBwZiwgaG9vaywgaW5kZXYsIG91dGRldiwgb2tmbiwKIAkJCSAgICAgIHZlcmRpY3QgPj4gTkZfVkVSRElDVF9CSVRTKSkKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYwppbmRleCA1ZjVkYWEzLi4yMmY3YWQ1IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMKKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jCkBAIC0xMTAsMTAgKzExMCw4IEBACiAJc3RydWN0IHJ0Nl9pbmZvICpydDsKIAlzdHJ1Y3QgZmxvd2kgZmwgPSB7CiAJCS5vaWYgPSAwLAotCQkubmxfdSA9IHsKLQkJCS5pcDZfdSA9IHsKLQkJCQkuZGFkZHIgPSAqYWRkciwKLQkJCQkuc2FkZHIgPSB7IC5zNl9hZGRyMzIgPSB7MCwgMCwgMCwgMH0gfSwgfSB9LAorCQkuZmw2X2RzdCA9ICphZGRyLAorCQkuZmw2X3NyYyA9IHsgLnM2X2FkZHIzMiA9IHswLCAwLCAwLCAwfSB9LAogCX07CiAKIAlydCA9IChzdHJ1Y3QgcnQ2X2luZm8gKilpcDZfcm91dGVfb3V0cHV0KCZpbml0X25ldCwgTlVMTCwgJmZsKTsKQEAgLTM0MzIsNyArMzQzMCw3IEBACiB7CiAJRW50ZXJGdW5jdGlvbigyKTsKIAlpcF92c190cmFzaF9jbGVhbnVwKCk7Ci0JY2FuY2VsX3JlYXJtaW5nX2RlbGF5ZWRfd29yaygmZGVmZW5zZV93b3JrKTsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmRlZmVuc2Vfd29yayk7CiAJY2FuY2VsX3dvcmtfc3luYygmZGVmZW5zZV93b3JrLndvcmspOwogCWlwX3ZzX2tpbGxfZXN0aW1hdG9yKCZpcF92c19zdGF0cyk7CiAJdW5yZWdpc3Rlcl9zeXNjdGxfdGFibGUoc3lzY3RsX2hlYWRlcik7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYwppbmRleCBkZTA0ZWEzLi41MzI1YTNmYiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYworKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jCkBAIC05NiwxMiArOTYsOCBAQAogCQlpZiAoIShydCA9IChzdHJ1Y3QgcnRhYmxlICopCiAJCSAgICAgIF9faXBfdnNfZHN0X2NoZWNrKGRlc3QsIHJ0b3MpKSkgewogCQkJc3RydWN0IGZsb3dpIGZsID0gewotCQkJCS5vaWYgPSAwLAotCQkJCS5ubF91ID0gewotCQkJCQkuaXA0X3UgPSB7Ci0JCQkJCQkuZGFkZHIgPSBkZXN0LT5hZGRyLmlwLAotCQkJCQkJLnNhZGRyID0gMCwKLQkJCQkJCS50b3MgPSBydG9zLCB9IH0sCisJCQkJLmZsNF9kc3QgPSBkZXN0LT5hZGRyLmlwLAorCQkJCS5mbDRfdG9zID0gcnRvcywKIAkJCX07CiAKIAkJCWlmIChpcF9yb3V0ZV9vdXRwdXRfa2V5KG5ldCwgJnJ0LCAmZmwpKSB7CkBAIC0xMTgsMTIgKzExNCw4IEBACiAJCXNwaW5fdW5sb2NrKCZkZXN0LT5kc3RfbG9jayk7CiAJfSBlbHNlIHsKIAkJc3RydWN0IGZsb3dpIGZsID0gewotCQkJLm9pZiA9IDAsCi0JCQkubmxfdSA9IHsKLQkJCQkuaXA0X3UgPSB7Ci0JCQkJCS5kYWRkciA9IGRhZGRyLAotCQkJCQkuc2FkZHIgPSAwLAotCQkJCQkudG9zID0gcnRvcywgfSB9LAorCQkJLmZsNF9kc3QgPSBkYWRkciwKKwkJCS5mbDRfdG9zID0gcnRvcywKIAkJfTsKIAogCQlpZiAoaXBfcm91dGVfb3V0cHV0X2tleShuZXQsICZydCwgJmZsKSkgewpAQCAtMTY5LDcgKzE2MSw3IEBACiAJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChkZXYpOwogCXN0cnVjdCBpcGhkciAqaXBoID0gaXBfaGRyKHNrYik7CiAKLQlpZiAocnQtPmZsLmlpZikgeworCWlmIChydF9pc19pbnB1dF9yb3V0ZShydCkpIHsKIAkJdW5zaWduZWQgbG9uZyBvcmVmZHN0ID0gc2tiLT5fc2tiX3JlZmRzdDsKIAogCQlpZiAoaXBfcm91dGVfaW5wdXQoc2tiLCBpcGgtPmRhZGRyLCBpcGgtPnNhZGRyLApAQCAtMTc4LDE0ICsxNzAsOSBAQAogCQlyZWZkc3RfZHJvcChvcmVmZHN0KTsKIAl9IGVsc2UgewogCQlzdHJ1Y3QgZmxvd2kgZmwgPSB7Ci0JCQkub2lmID0gMCwKLQkJCS5ubF91ID0gewotCQkJCS5pcDRfdSA9IHsKLQkJCQkJLmRhZGRyID0gaXBoLT5kYWRkciwKLQkJCQkJLnNhZGRyID0gaXBoLT5zYWRkciwKLQkJCQkJLnRvcyA9IFJUX1RPUyhpcGgtPnRvcyksCi0JCQkJfQotCQkJfSwKKwkJCS5mbDRfZHN0ID0gaXBoLT5kYWRkciwKKwkJCS5mbDRfc3JjID0gaXBoLT5zYWRkciwKKwkJCS5mbDRfdG9zID0gUlRfVE9TKGlwaC0+dG9zKSwKIAkJCS5tYXJrID0gc2tiLT5tYXJrLAogCQl9OwogCQlzdHJ1Y3QgcnRhYmxlICpydDsKQEAgLTIxNiwxMiArMjAzLDcgQEAKIHsKIAlzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Q7CiAJc3RydWN0IGZsb3dpIGZsID0gewotCQkub2lmID0gMCwKLQkJLm5sX3UgPSB7Ci0JCQkuaXA2X3UgPSB7Ci0JCQkJLmRhZGRyID0gKmRhZGRyLAotCQkJfSwKLQkJfSwKKwkJLmZsNl9kc3QgPSAqZGFkZHIsCiAJfTsKIAogCWRzdCA9IGlwNl9yb3V0ZV9vdXRwdXQobmV0LCBOVUxMLCAmZmwpOwpAQCAtNTUyLDcgKzUzNCw4IEBACiAjZW5kaWYKIAogCS8qIEZyb20gd29ybGQgYnV0IEROQVQgdG8gbG9vcGJhY2sgYWRkcmVzcz8gKi8KLQlpZiAobG9jYWwgJiYgaXB2NF9pc19sb29wYmFjayhydC0+cnRfZHN0KSAmJiBza2JfcnRhYmxlKHNrYiktPmZsLmlpZikgeworCWlmIChsb2NhbCAmJiBpcHY0X2lzX2xvb3BiYWNrKHJ0LT5ydF9kc3QpICYmCisJICAgIHJ0X2lzX2lucHV0X3JvdXRlKHNrYl9ydGFibGUoc2tiKSkpIHsKIAkJSVBfVlNfREJHX1JMX1BLVCgxLCBBRl9JTkVULCBwcCwgc2tiLCAwLCAiaXBfdnNfbmF0X3htaXQoKTogIgogCQkJCSAic3RvcHBpbmcgRE5BVCB0byBsb29wYmFjayBhZGRyZXNzIik7CiAJCWdvdG8gdHhfZXJyb3JfcHV0OwpAQCAtMTE2NSw3ICsxMTQ4LDggQEAKICNlbmRpZgogCiAJLyogRnJvbSB3b3JsZCBidXQgRE5BVCB0byBsb29wYmFjayBhZGRyZXNzPyAqLwotCWlmIChsb2NhbCAmJiBpcHY0X2lzX2xvb3BiYWNrKHJ0LT5ydF9kc3QpICYmIHNrYl9ydGFibGUoc2tiKS0+ZmwuaWlmKSB7CisJaWYgKGxvY2FsICYmIGlwdjRfaXNfbG9vcGJhY2socnQtPnJ0X2RzdCkgJiYKKwkgICAgcnRfaXNfaW5wdXRfcm91dGUoc2tiX3J0YWJsZShza2IpKSkgewogCQlJUF9WU19EQkcoMSwgIiVzKCk6ICIKIAkJCSAgInN0b3BwaW5nIEROQVQgdG8gbG9vcGJhY2sgJXBJNFxuIiwKIAkJCSAgX19mdW5jX18sICZjcC0+ZGFkZHIuaXApOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jCmluZGV4IDI3YTVlYTYuLmU2MTUxMTkgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMKQEAgLTY1LDcgKzY1LDcgQEAKIERFRklORV9QRVJfQ1BVKHN0cnVjdCBuZl9jb25uLCBuZl9jb25udHJhY2tfdW50cmFja2VkKTsKIEVYUE9SVF9QRVJfQ1BVX1NZTUJPTChuZl9jb25udHJhY2tfdW50cmFja2VkKTsKIAotc3RhdGljIHVuc2lnbmVkIGludCBuZl9jb25udHJhY2tfaGFzaF9ybmQgX19yZWFkX21vc3RseTsKK3Vuc2lnbmVkIGludCBuZl9jb25udHJhY2tfaGFzaF9ybmQgX19yZWFkX21vc3RseTsKIAogc3RhdGljIHUzMiBoYXNoX2Nvbm50cmFja19yYXcoY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsIHUxNiB6b25lKQogewpAQCAtNTk2LDYgKzU5NiwyMSBAQAogCXJldHVybiBkcm9wcGVkOwogfQogCit2b2lkIGluaXRfbmZfY29ubnRyYWNrX2hhc2hfcm5kKHZvaWQpCit7CisJdW5zaWduZWQgaW50IHJhbmQ7CisKKwkvKgorCSAqIFdoeSBub3QgaW5pdGlhbGl6ZSBuZl9jb25udHJhY2tfcm5kIGluIGEgImluaXQoKSIgZnVuY3Rpb24gPworCSAqIEJlY2F1c2UgdGhlcmUgaXNuJ3QgZW5vdWdoIGVudHJvcHkgd2hlbiBzeXN0ZW0gaW5pdGlhbGl6aW5nLAorCSAqIGFuZCB3ZSBpbml0aWFsaXplIGl0IGFzIGxhdGUgYXMgcG9zc2libGUuCisJICovCisJZG8geworCQlnZXRfcmFuZG9tX2J5dGVzKCZyYW5kLCBzaXplb2YocmFuZCkpOworCX0gd2hpbGUgKCFyYW5kKTsKKwljbXB4Y2hnKCZuZl9jb25udHJhY2tfaGFzaF9ybmQsIDAsIHJhbmQpOworfQorCiBzdGF0aWMgc3RydWN0IG5mX2Nvbm4gKgogX19uZl9jb25udHJhY2tfYWxsb2Moc3RydWN0IG5ldCAqbmV0LCB1MTYgem9uZSwKIAkJICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICpvcmlnLApAQCAtNjA1LDE4ICs2MjAsNyBAQAogCXN0cnVjdCBuZl9jb25uICpjdDsKIAogCWlmICh1bmxpa2VseSghbmZfY29ubnRyYWNrX2hhc2hfcm5kKSkgewotCQl1bnNpZ25lZCBpbnQgcmFuZDsKLQotCQkvKgotCQkgKiBXaHkgbm90IGluaXRpYWxpemUgbmZfY29ubnRyYWNrX3JuZCBpbiBhICJpbml0KCkiIGZ1bmN0aW9uID8KLQkJICogQmVjYXVzZSB0aGVyZSBpc24ndCBlbm91Z2ggZW50cm9weSB3aGVuIHN5c3RlbSBpbml0aWFsaXppbmcsCi0JCSAqIGFuZCB3ZSBpbml0aWFsaXplIGl0IGFzIGxhdGUgYXMgcG9zc2libGUuCi0JCSAqLwotCQlkbyB7Ci0JCQlnZXRfcmFuZG9tX2J5dGVzKCZyYW5kLCBzaXplb2YocmFuZCkpOwotCQl9IHdoaWxlICghcmFuZCk7Ci0JCWNtcHhjaGcoJm5mX2Nvbm50cmFja19oYXNoX3JuZCwgMCwgcmFuZCk7Ci0KKwkJaW5pdF9uZl9jb25udHJhY2tfaGFzaF9ybmQoKTsKIAkJLyogcmVjb21wdXRlIHRoZSBoYXNoIGFzIG5mX2Nvbm50cmFja19oYXNoX3JuZCBpcyBpbml0aWFsaXplZCAqLwogCQloYXNoID0gaGFzaF9jb25udHJhY2tfcmF3KG9yaWcsIHpvbmUpOwogCX0KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmMKaW5kZXggNDZlODk2Ni4uYTIwZmIwYiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmMKQEAgLTMyLDkgKzMyLDcgQEAKIHVuc2lnbmVkIGludCBuZl9jdF9leHBlY3RfaHNpemUgX19yZWFkX21vc3RseTsKIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2V4cGVjdF9oc2l6ZSk7CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgbmZfY3RfZXhwZWN0X2hhc2hfcm5kIF9fcmVhZF9tb3N0bHk7CiB1bnNpZ25lZCBpbnQgbmZfY3RfZXhwZWN0X21heCBfX3JlYWRfbW9zdGx5Owotc3RhdGljIGludCBuZl9jdF9leHBlY3RfaGFzaF9ybmRfaW5pdHRlZCBfX3JlYWRfbW9zdGx5OwogCiBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKm5mX2N0X2V4cGVjdF9jYWNoZXAgX19yZWFkX21vc3RseTsKIApAQCAtNzcsMTUgKzc1LDEzIEBACiB7CiAJdW5zaWduZWQgaW50IGhhc2g7CiAKLQlpZiAodW5saWtlbHkoIW5mX2N0X2V4cGVjdF9oYXNoX3JuZF9pbml0dGVkKSkgewotCQlnZXRfcmFuZG9tX2J5dGVzKCZuZl9jdF9leHBlY3RfaGFzaF9ybmQsCi0JCQkJIHNpemVvZihuZl9jdF9leHBlY3RfaGFzaF9ybmQpKTsKLQkJbmZfY3RfZXhwZWN0X2hhc2hfcm5kX2luaXR0ZWQgPSAxOworCWlmICh1bmxpa2VseSghbmZfY29ubnRyYWNrX2hhc2hfcm5kKSkgeworCQlpbml0X25mX2Nvbm50cmFja19oYXNoX3JuZCgpOwogCX0KIAogCWhhc2ggPSBqaGFzaDIodHVwbGUtPmRzdC51My5hbGwsIEFSUkFZX1NJWkUodHVwbGUtPmRzdC51My5hbGwpLAogCQkgICAgICAoKCh0dXBsZS0+ZHN0LnByb3RvbnVtIF4gdHVwbGUtPnNyYy5sM251bSkgPDwgMTYpIHwKLQkJICAgICAgIChfX2ZvcmNlIF9fdTE2KXR1cGxlLT5kc3QudS5hbGwpIF4gbmZfY3RfZXhwZWN0X2hhc2hfcm5kKTsKKwkJICAgICAgIChfX2ZvcmNlIF9fdTE2KXR1cGxlLT5kc3QudS5hbGwpIF4gbmZfY29ubnRyYWNrX2hhc2hfcm5kKTsKIAlyZXR1cm4gKCh1NjQpaGFzaCAqIG5mX2N0X2V4cGVjdF9oc2l6ZSkgPj4gMzI7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYwppbmRleCBiNzI5YWNlLi4wY2RiYTUwIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jCkBAIC0yNTQsNyArMjU0LDcgQEAKIAogCXJldCA9IHNlY3VyaXR5X3NlY2lkX3RvX3NlY2N0eChjdC0+c2VjbWFyaywgJnNlY2N0eCwgJmxlbik7CiAJaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKKwkJcmV0dXJuIDA7CiAKIAlyZXQgPSAtMTsKIAluZXN0X3NlY2N0eCA9IG5sYV9uZXN0X3N0YXJ0KHNrYiwgQ1RBX1NFQ0NUWCB8IE5MQV9GX05FU1RFRCk7CkBAIC00NTMsMTYgKzQ1MywyMiBAQAogCSAgICAgICA7CiB9CiAKLSNpZmRlZiBDT05GSUdfTkZfQ09OTlRSQUNLX1NFQ01BUksKLXN0YXRpYyBpbnQgY3RuZXRsaW5rX25sbXNnX3NlY2N0eF9zaXplKGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCkKK3N0YXRpYyBpbmxpbmUgaW50CitjdG5ldGxpbmtfc2VjY3R4X3NpemUoY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0KQogewotCWludCBsZW47CisjaWZkZWYgQ09ORklHX05GX0NPTk5UUkFDS19TRUNNQVJLCisJaW50IGxlbiwgcmV0OwogCi0Jc2VjdXJpdHlfc2VjaWRfdG9fc2VjY3R4KGN0LT5zZWNtYXJrLCBOVUxMLCAmbGVuKTsKKwlyZXQgPSBzZWN1cml0eV9zZWNpZF90b19zZWNjdHgoY3QtPnNlY21hcmssIE5VTEwsICZsZW4pOworCWlmIChyZXQpCisJCXJldHVybiAwOwogCi0JcmV0dXJuIHNpemVvZihjaGFyKSAqIGxlbjsKLX0KKwlyZXR1cm4gbmxhX3RvdGFsX3NpemUoMCkgLyogQ1RBX1NFQ0NUWCAqLworCSAgICAgICArIG5sYV90b3RhbF9zaXplKHNpemVvZihjaGFyKSAqIGxlbik7IC8qIENUQV9TRUNDVFhfTkFNRSAqLworI2Vsc2UKKwlyZXR1cm4gMDsKICNlbmRpZgorfQogCiBzdGF0aWMgaW5saW5lIHNpemVfdAogY3RuZXRsaW5rX25sbXNnX3NpemUoY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0KQpAQCAtNDc5LDEwICs0ODUsNyBAQAogCSAgICAgICArIG5sYV90b3RhbF9zaXplKDApIC8qIENUQV9QUk9UT0lORk8gKi8KIAkgICAgICAgKyBubGFfdG90YWxfc2l6ZSgwKSAvKiBDVEFfSEVMUCAqLwogCSAgICAgICArIG5sYV90b3RhbF9zaXplKE5GX0NUX0hFTFBFUl9OQU1FX0xFTikgLyogQ1RBX0hFTFBfTkFNRSAqLwotI2lmZGVmIENPTkZJR19ORl9DT05OVFJBQ0tfU0VDTUFSSwotCSAgICAgICArIG5sYV90b3RhbF9zaXplKDApIC8qIENUQV9TRUNDVFggKi8KLQkgICAgICAgKyBubGFfdG90YWxfc2l6ZShjdG5ldGxpbmtfbmxtc2dfc2VjY3R4X3NpemUoY3QpKSAvKiBDVEFfU0VDQ1RYX05BTUUgKi8KLSNlbmRpZgorCSAgICAgICArIGN0bmV0bGlua19zZWNjdHhfc2l6ZShjdCkKICNpZmRlZiBDT05GSUdfTkZfTkFUX05FRURFRAogCSAgICAgICArIDIgKiBubGFfdG90YWxfc2l6ZSgwKSAvKiBDVEFfTkFUX1NFUV9BREpfT1JJR3xSRVBMICovCiAJICAgICAgICsgNiAqIG5sYV90b3RhbF9zaXplKHNpemVvZih1X2ludDMyX3QpKSAvKiBDVEFfTkFUX1NFUV9PRkZTRVQgKi8KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYwppbmRleCAwZmI2NTcwLi5iNGQ3ZjBmIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jCkBAIC0xMTgsNyArMTE4LDcgQEAKIAogCXJldCA9IHNlY3VyaXR5X3NlY2lkX3RvX3NlY2N0eChjdC0+c2VjbWFyaywgJnNlY2N0eCwgJmxlbik7CiAJaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKKwkJcmV0dXJuIDA7CiAKIAlyZXQgPSBzZXFfcHJpbnRmKHMsICJzZWNjdHg9JXMgIiwgc2VjY3R4KTsKIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9URUUuYyBiL25ldC9uZXRmaWx0ZXIveHRfVEVFLmMKaW5kZXggMjJhMmQ0Mi4uNTEyOGE2YyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9URUUuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X1RFRS5jCkBAIC03MCw5ICs3MCw5IEBACiAJCQlyZXR1cm4gZmFsc2U7CiAJCWZsLm9pZiA9IGluZm8tPnByaXYtPm9pZjsKIAl9Ci0JZmwubmxfdS5pcDRfdS5kYWRkciA9IGluZm8tPmd3LmlwOwotCWZsLm5sX3UuaXA0X3UudG9zICAgPSBSVF9UT1MoaXBoLT50b3MpOwotCWZsLm5sX3UuaXA0X3Uuc2NvcGUgPSBSVF9TQ09QRV9VTklWRVJTRTsKKwlmbC5mbDRfZHN0ID0gaW5mby0+Z3cuaXA7CisJZmwuZmw0X3RvcyA9IFJUX1RPUyhpcGgtPnRvcyk7CisJZmwuZmw0X3Njb3BlID0gUlRfU0NPUEVfVU5JVkVSU0U7CiAJaWYgKGlwX3JvdXRlX291dHB1dF9rZXkobmV0LCAmcnQsICZmbCkgIT0gMCkKIAkJcmV0dXJuIGZhbHNlOwogCkBAIC0xNTAsOSArMTUwLDkgQEAKIAkJCXJldHVybiBmYWxzZTsKIAkJZmwub2lmID0gaW5mby0+cHJpdi0+b2lmOwogCX0KLQlmbC5ubF91LmlwNl91LmRhZGRyID0gaW5mby0+Z3cuaW42OwotCWZsLm5sX3UuaXA2X3UuZmxvd2xhYmVsID0gKChpcGgtPmZsb3dfbGJsWzBdICYgMHhGKSA8PCAxNikgfAotCQkJCSAgKGlwaC0+Zmxvd19sYmxbMV0gPDwgOCkgfCBpcGgtPmZsb3dfbGJsWzJdOworCWZsLmZsNl9kc3QgPSBpbmZvLT5ndy5pbjY7CisJZmwuZmw2X2Zsb3dsYWJlbCA9ICgoaXBoLT5mbG93X2xibFswXSAmIDB4RikgPDwgMTYpIHwKKwkJCSAgIChpcGgtPmZsb3dfbGJsWzFdIDw8IDgpIHwgaXBoLT5mbG93X2xibFsyXTsKIAlkc3QgPSBpcDZfcm91dGVfb3V0cHV0KG5ldCwgTlVMTCwgJmZsKTsKIAlpZiAoZHN0ID09IE5VTEwpCiAJCXJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9jaXBzb192NC5oIGIvbmV0L25ldGxhYmVsL25ldGxhYmVsX2NpcHNvX3Y0LmgKaW5kZXggYzhhNDA3OS4uYWY3ZjMzNSAxMDA2NDQKLS0tIGEvbmV0L25ldGxhYmVsL25ldGxhYmVsX2NpcHNvX3Y0LmgKKysrIGIvbmV0L25ldGxhYmVsL25ldGxhYmVsX2NpcHNvX3Y0LmgKQEAgLTEwNyw3ICsxMDcsNiBAQAogCU5MQkxfQ0lQU09WNF9DX0xJU1RBTEwsCiAJX19OTEJMX0NJUFNPVjRfQ19NQVgsCiB9OwotI2RlZmluZSBOTEJMX0NJUFNPVjRfQ19NQVggKF9fTkxCTF9DSVBTT1Y0X0NfTUFYIC0gMSkKIAogLyogTmV0TGFiZWwgQ0lQU092NCBhdHRyaWJ1dGVzICovCiBlbnVtIHsKZGlmZiAtLWdpdCBhL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9tZ210LmggYi9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfbWdtdC5oCmluZGV4IDA1ZDk2NDMuLjBhMjU4MzggMTAwNjQ0Ci0tLSBhL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9tZ210LmgKKysrIGIvbmV0L25ldGxhYmVsL25ldGxhYmVsX21nbXQuaApAQCAtMTczLDcgKzE3Myw2IEBACiAJTkxCTF9NR01UX0NfVkVSU0lPTiwKIAlfX05MQkxfTUdNVF9DX01BWCwKIH07Ci0jZGVmaW5lIE5MQkxfTUdNVF9DX01BWCAoX19OTEJMX01HTVRfQ19NQVggLSAxKQogCiAvKiBOZXRMYWJlbCBNYW5hZ2VtZW50IGF0dHJpYnV0ZXMgKi8KIGVudW0gewpkaWZmIC0tZ2l0IGEvbmV0L25ldGxhYmVsL25ldGxhYmVsX3VubGFiZWxlZC5oIGIvbmV0L25ldGxhYmVsL25ldGxhYmVsX3VubGFiZWxlZC5oCmluZGV4IDdhYmE2MzUuLjBiYzhkYzMgMTAwNjQ0Ci0tLSBhL25ldC9uZXRsYWJlbC9uZXRsYWJlbF91bmxhYmVsZWQuaAorKysgYi9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfdW5sYWJlbGVkLmgKQEAgLTE4MCw3ICsxODAsNiBAQAogCU5MQkxfVU5MQUJFTF9DX1NUQVRJQ0xJU1RERUYsCiAJX19OTEJMX1VOTEFCRUxfQ19NQVgsCiB9OwotI2RlZmluZSBOTEJMX1VOTEFCRUxfQ19NQVggKF9fTkxCTF9VTkxBQkVMX0NfTUFYIC0gMSkKIAogLyogTmV0TGFiZWwgVW5sYWJlbGVkIGF0dHJpYnV0ZXMgKi8KIGVudW0gewpkaWZmIC0tZ2l0IGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuYyBiL25ldC9wYWNrZXQvYWZfcGFja2V0LmMKaW5kZXggODI5OGU2Ny4uOTFjYjFkNyAxMDA2NDQKLS0tIGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuYworKysgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jCkBAIC02MSw2ICs2MSw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgva21vZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bmV0L25ldF9uYW1lc3BhY2UuaD4KICNpbmNsdWRlIDxuZXQvaXAuaD4KICNpbmNsdWRlIDxuZXQvcHJvdG9jb2wuaD4KQEAgLTE2Myw4ICsxNjQsMTMgQEAKIHN0YXRpYyBpbnQgcGFja2V0X3NldF9yaW5nKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRwYWNrZXRfcmVxICpyZXEsCiAJCWludCBjbG9zaW5nLCBpbnQgdHhfcmluZyk7CiAKKyNkZWZpbmUgUEdWX0ZST01fVk1BTExPQyAxCitzdHJ1Y3QgcGd2IHsKKwljaGFyICpidWZmZXI7Cit9OworCiBzdHJ1Y3QgcGFja2V0X3JpbmdfYnVmZmVyIHsKLQljaGFyCQkJKipwZ192ZWM7CisJc3RydWN0IHBndgkJKnBnX3ZlYzsKIAl1bnNpZ25lZCBpbnQJCWhlYWQ7CiAJdW5zaWduZWQgaW50CQlmcmFtZXNfcGVyX2Jsb2NrOwogCXVuc2lnbmVkIGludAkJZnJhbWVfc2l6ZTsKQEAgLTIxNyw2ICsyMjMsMTMgQEAKIAogI2RlZmluZSBQQUNLRVRfU0tCX0NCKF9fc2tiKQkoKHN0cnVjdCBwYWNrZXRfc2tiX2NiICopKChfX3NrYiktPmNiKSkKIAorc3RhdGljIGlubGluZSBfX3B1cmUgc3RydWN0IHBhZ2UgKnBndl90b19wYWdlKHZvaWQgKmFkZHIpCit7CisJaWYgKGlzX3ZtYWxsb2NfYWRkcihhZGRyKSkKKwkJcmV0dXJuIHZtYWxsb2NfdG9fcGFnZShhZGRyKTsKKwlyZXR1cm4gdmlydF90b19wYWdlKGFkZHIpOworfQorCiBzdGF0aWMgdm9pZCBfX3BhY2tldF9zZXRfc3RhdHVzKHN0cnVjdCBwYWNrZXRfc29jayAqcG8sIHZvaWQgKmZyYW1lLCBpbnQgc3RhdHVzKQogewogCXVuaW9uIHsKQEAgLTIyOSwxMSArMjQyLDExIEBACiAJc3dpdGNoIChwby0+dHBfdmVyc2lvbikgewogCWNhc2UgVFBBQ0tFVF9WMToKIAkJaC5oMS0+dHBfc3RhdHVzID0gc3RhdHVzOwotCQlmbHVzaF9kY2FjaGVfcGFnZSh2aXJ0X3RvX3BhZ2UoJmguaDEtPnRwX3N0YXR1cykpOworCQlmbHVzaF9kY2FjaGVfcGFnZShwZ3ZfdG9fcGFnZSgmaC5oMS0+dHBfc3RhdHVzKSk7CiAJCWJyZWFrOwogCWNhc2UgVFBBQ0tFVF9WMjoKIAkJaC5oMi0+dHBfc3RhdHVzID0gc3RhdHVzOwotCQlmbHVzaF9kY2FjaGVfcGFnZSh2aXJ0X3RvX3BhZ2UoJmguaDItPnRwX3N0YXR1cykpOworCQlmbHVzaF9kY2FjaGVfcGFnZShwZ3ZfdG9fcGFnZSgmaC5oMi0+dHBfc3RhdHVzKSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXByX2VycigiVFBBQ0tFVCB2ZXJzaW9uIG5vdCBzdXBwb3J0ZWRcbiIpOwpAQCAtMjU2LDEwICsyNjksMTAgQEAKIAloLnJhdyA9IGZyYW1lOwogCXN3aXRjaCAocG8tPnRwX3ZlcnNpb24pIHsKIAljYXNlIFRQQUNLRVRfVjE6Ci0JCWZsdXNoX2RjYWNoZV9wYWdlKHZpcnRfdG9fcGFnZSgmaC5oMS0+dHBfc3RhdHVzKSk7CisJCWZsdXNoX2RjYWNoZV9wYWdlKHBndl90b19wYWdlKCZoLmgxLT50cF9zdGF0dXMpKTsKIAkJcmV0dXJuIGguaDEtPnRwX3N0YXR1czsKIAljYXNlIFRQQUNLRVRfVjI6Ci0JCWZsdXNoX2RjYWNoZV9wYWdlKHZpcnRfdG9fcGFnZSgmaC5oMi0+dHBfc3RhdHVzKSk7CisJCWZsdXNoX2RjYWNoZV9wYWdlKHBndl90b19wYWdlKCZoLmgyLT50cF9zdGF0dXMpKTsKIAkJcmV0dXJuIGguaDItPnRwX3N0YXR1czsKIAlkZWZhdWx0OgogCQlwcl9lcnIoIlRQQUNLRVQgdmVyc2lvbiBub3Qgc3VwcG9ydGVkXG4iKTsKQEAgLTI4Myw3ICsyOTYsOCBAQAogCXBnX3ZlY19wb3MgPSBwb3NpdGlvbiAvIHJiLT5mcmFtZXNfcGVyX2Jsb2NrOwogCWZyYW1lX29mZnNldCA9IHBvc2l0aW9uICUgcmItPmZyYW1lc19wZXJfYmxvY2s7CiAKLQloLnJhdyA9IHJiLT5wZ192ZWNbcGdfdmVjX3Bvc10gKyAoZnJhbWVfb2Zmc2V0ICogcmItPmZyYW1lX3NpemUpOworCWgucmF3ID0gcmItPnBnX3ZlY1twZ192ZWNfcG9zXS5idWZmZXIgKworCQkoZnJhbWVfb2Zmc2V0ICogcmItPmZyYW1lX3NpemUpOwogCiAJaWYgKHN0YXR1cyAhPSBfX3BhY2tldF9nZXRfc3RhdHVzKHBvLCBoLnJhdykpCiAJCXJldHVybiBOVUxMOwpAQCAtNTAzLDcgKzUxNyw4IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgcnVuX2ZpbHRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2ssCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBydW5fZmlsdGVyKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IHNvY2sgKnNrLAogCQkJCSAgICAgIHVuc2lnbmVkIGludCByZXMpCiB7CiAJc3RydWN0IHNrX2ZpbHRlciAqZmlsdGVyOwpAQCAtNTExLDIyICs1MjYsMjIgQEAKIAlyY3VfcmVhZF9sb2NrX2JoKCk7CiAJZmlsdGVyID0gcmN1X2RlcmVmZXJlbmNlX2JoKHNrLT5za19maWx0ZXIpOwogCWlmIChmaWx0ZXIgIT0gTlVMTCkKLQkJcmVzID0gc2tfcnVuX2ZpbHRlcihza2IsIGZpbHRlci0+aW5zbnMsIGZpbHRlci0+bGVuKTsKKwkJcmVzID0gc2tfcnVuX2ZpbHRlcihza2IsIGZpbHRlci0+aW5zbnMpOwogCXJjdV9yZWFkX3VubG9ja19iaCgpOwogCiAJcmV0dXJuIHJlczsKIH0KIAogLyoKLSAgIFRoaXMgZnVuY3Rpb24gbWFrZXMgbGF6eSBza2IgY2xvbmluZyBpbiBob3BlIHRoYXQgbW9zdCBvZiBwYWNrZXRzCi0gICBhcmUgZGlzY2FyZGVkIGJ5IEJQRi4KLQotICAgTm90ZSB0cmlja3kgcGFydDogd2UgRE8gbWFuZ2xlIHNoYXJlZCBza2IhIHNrYi0+ZGF0YSwgc2tiLT5sZW4KLSAgIGFuZCBza2ItPmNiIGFyZSBtYW5nbGVkLiBJdCB3b3JrcyBiZWNhdXNlIChhbmQgdW50aWwpIHBhY2tldHMKLSAgIGZhbGxpbmcgaGVyZSBhcmUgb3duZWQgYnkgY3VycmVudCBDUFUuIE91dHB1dCBwYWNrZXRzIGFyZSBjbG9uZWQKLSAgIGJ5IGRldl9xdWV1ZV94bWl0X25pdCgpLCBpbnB1dCBwYWNrZXRzIGFyZSBwcm9jZXNzZWQgYnkgbmV0X2JoCi0gICBzZXF1ZW5jaWFsbHksIHNvIHRoYXQgaWYgd2UgcmV0dXJuIHNrYiB0byBvcmlnaW5hbCBzdGF0ZSBvbiBleGl0LAotICAgd2Ugd2lsbCBub3QgaGFybSBhbnlvbmUuCisgKiBUaGlzIGZ1bmN0aW9uIG1ha2VzIGxhenkgc2tiIGNsb25pbmcgaW4gaG9wZSB0aGF0IG1vc3Qgb2YgcGFja2V0cworICogYXJlIGRpc2NhcmRlZCBieSBCUEYuCisgKgorICogTm90ZSB0cmlja3kgcGFydDogd2UgRE8gbWFuZ2xlIHNoYXJlZCBza2IhIHNrYi0+ZGF0YSwgc2tiLT5sZW4KKyAqIGFuZCBza2ItPmNiIGFyZSBtYW5nbGVkLiBJdCB3b3JrcyBiZWNhdXNlIChhbmQgdW50aWwpIHBhY2tldHMKKyAqIGZhbGxpbmcgaGVyZSBhcmUgb3duZWQgYnkgY3VycmVudCBDUFUuIE91dHB1dCBwYWNrZXRzIGFyZSBjbG9uZWQKKyAqIGJ5IGRldl9xdWV1ZV94bWl0X25pdCgpLCBpbnB1dCBwYWNrZXRzIGFyZSBwcm9jZXNzZWQgYnkgbmV0X2JoCisgKiBzZXF1ZW5jaWFsbHksIHNvIHRoYXQgaWYgd2UgcmV0dXJuIHNrYiB0byBvcmlnaW5hbCBzdGF0ZSBvbiBleGl0LAorICogd2Ugd2lsbCBub3QgaGFybSBhbnlvbmUuCiAgKi8KIAogc3RhdGljIGludCBwYWNrZXRfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCkBAIC01NTIsMTEgKzU2NywxMSBAQAogCiAJaWYgKGRldi0+aGVhZGVyX29wcykgewogCQkvKiBUaGUgZGV2aWNlIGhhcyBhbiBleHBsaWNpdCBub3Rpb24gb2YgbGwgaGVhZGVyLAotCQkgICBleHBvcnRlZCB0byBoaWdoZXIgbGV2ZWxzLgotCi0JCSAgIE90aGVyd2lzZSwgdGhlIGRldmljZSBoaWRlcyBkYXRhaWxzIG9mIGl0IGZyYW1lCi0JCSAgIHN0cnVjdHVyZSwgc28gdGhhdCBjb3JyZXNwb25kaW5nIHBhY2tldCBoZWFkCi0JCSAgIG5ldmVyIGRlbGl2ZXJlZCB0byB1c2VyLgorCQkgKiBleHBvcnRlZCB0byBoaWdoZXIgbGV2ZWxzLgorCQkgKgorCQkgKiBPdGhlcndpc2UsIHRoZSBkZXZpY2UgaGlkZXMgZGV0YWlscyBvZiBpdHMgZnJhbWUKKwkJICogc3RydWN0dXJlLCBzbyB0aGF0IGNvcnJlc3BvbmRpbmcgcGFja2V0IGhlYWQgaXMKKwkJICogbmV2ZXIgZGVsaXZlcmVkIHRvIHVzZXIuCiAJCSAqLwogCQlpZiAoc2stPnNrX3R5cGUgIT0gU09DS19ER1JBTSkKIAkJCXNrYl9wdXNoKHNrYiwgc2tiLT5kYXRhIC0gc2tiX21hY19oZWFkZXIoc2tiKSk7CkBAIC03OTEsMTcgKzgwNiwxNSBAQAogCiAJX19wYWNrZXRfc2V0X3N0YXR1cyhwbywgaC5yYXcsIHN0YXR1cyk7CiAJc21wX21iKCk7CisjaWYgQVJDSF9JTVBMRU1FTlRTX0ZMVVNIX0RDQUNIRV9QQUdFID09IDEKIAl7Ci0JCXN0cnVjdCBwYWdlICpwX3N0YXJ0LCAqcF9lbmQ7Ci0JCXU4ICpoX2VuZCA9IGgucmF3ICsgbWFjb2ZmICsgc25hcGxlbiAtIDE7CisJCXU4ICpzdGFydCwgKmVuZDsKIAotCQlwX3N0YXJ0ID0gdmlydF90b19wYWdlKGgucmF3KTsKLQkJcF9lbmQgPSB2aXJ0X3RvX3BhZ2UoaF9lbmQpOwotCQl3aGlsZSAocF9zdGFydCA8PSBwX2VuZCkgewotCQkJZmx1c2hfZGNhY2hlX3BhZ2UocF9zdGFydCk7Ci0JCQlwX3N0YXJ0Kys7Ci0JCX0KKwkJZW5kID0gKHU4ICopUEFHRV9BTElHTigodW5zaWduZWQgbG9uZyloLnJhdyArIG1hY29mZiArIHNuYXBsZW4pOworCQlmb3IgKHN0YXJ0ID0gaC5yYXc7IHN0YXJ0IDwgZW5kOyBzdGFydCArPSBQQUdFX1NJWkUpCisJCQlmbHVzaF9kY2FjaGVfcGFnZShwZ3ZfdG9fcGFnZShzdGFydCkpOwogCX0KKyNlbmRpZgogCiAJc2stPnNrX2RhdGFfcmVhZHkoc2ssIDApOwogCkBAIC05MDcsNyArOTIwLDYgQEAKIAl9CiAKIAllcnIgPSAtRUZBVUxUOwotCXBhZ2UgPSB2aXJ0X3RvX3BhZ2UoZGF0YSk7CiAJb2Zmc2V0ID0gb2Zmc2V0X2luX3BhZ2UoZGF0YSk7CiAJbGVuX21heCA9IFBBR0VfU0laRSAtIG9mZnNldDsKIAlsZW4gPSAoKHRvX3dyaXRlID4gbGVuX21heCkgPyBsZW5fbWF4IDogdG9fd3JpdGUpOwpAQCAtOTI2LDExICs5MzgsMTEgQEAKIAkJCXJldHVybiAtRUZBVUxUOwogCQl9CiAKKwkJcGFnZSA9IHBndl90b19wYWdlKGRhdGEpOworCQlkYXRhICs9IGxlbjsKIAkJZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSk7CiAJCWdldF9wYWdlKHBhZ2UpOwotCQlza2JfZmlsbF9wYWdlX2Rlc2Moc2tiLAotCQkJCW5yX2ZyYWdzLAotCQkJCXBhZ2UrKywgb2Zmc2V0LCBsZW4pOworCQlza2JfZmlsbF9wYWdlX2Rlc2Moc2tiLCBucl9mcmFncywgcGFnZSwgb2Zmc2V0LCBsZW4pOwogCQl0b193cml0ZSAtPSBsZW47CiAJCW9mZnNldCA9IDA7CiAJCWxlbl9tYXggPSBQQUdFX1NJWkU7CkBAIC0xNjM4LDggKzE2NTAsNyBAQAogCiAJCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7CiAJCQl2bmV0X2hkci5mbGFncyA9IFZJUlRJT19ORVRfSERSX0ZfTkVFRFNfQ1NVTTsKLQkJCXZuZXRfaGRyLmNzdW1fc3RhcnQgPSBza2ItPmNzdW1fc3RhcnQgLQotCQkJCQkJCXNrYl9oZWFkcm9vbShza2IpOworCQkJdm5ldF9oZHIuY3N1bV9zdGFydCA9IHNrYl9jaGVja3N1bV9zdGFydF9vZmZzZXQoc2tiKTsKIAkJCXZuZXRfaGRyLmNzdW1fb2Zmc2V0ID0gc2tiLT5jc3VtX29mZnNldDsKIAkJfSAvKiBlbHNlIGV2ZXJ5dGhpbmcgaXMgemVybyAqLwogCkBAIC0yMzI1LDM3ICsyMzM2LDcwIEBACiAJLmNsb3NlCT0JcGFja2V0X21tX2Nsb3NlLAogfTsKIAotc3RhdGljIHZvaWQgZnJlZV9wZ192ZWMoY2hhciAqKnBnX3ZlYywgdW5zaWduZWQgaW50IG9yZGVyLCB1bnNpZ25lZCBpbnQgbGVuKQorc3RhdGljIHZvaWQgZnJlZV9wZ192ZWMoc3RydWN0IHBndiAqcGdfdmVjLCB1bnNpZ25lZCBpbnQgb3JkZXIsCisJCQl1bnNpZ25lZCBpbnQgbGVuKQogewogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0JCWlmIChsaWtlbHkocGdfdmVjW2ldKSkKLQkJCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpIHBnX3ZlY1tpXSwgb3JkZXIpOworCQlpZiAobGlrZWx5KHBnX3ZlY1tpXS5idWZmZXIpKSB7CisJCQlpZiAoaXNfdm1hbGxvY19hZGRyKHBnX3ZlY1tpXS5idWZmZXIpKQorCQkJCXZmcmVlKHBnX3ZlY1tpXS5idWZmZXIpOworCQkJZWxzZQorCQkJCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpcGdfdmVjW2ldLmJ1ZmZlciwKKwkJCQkJICAgb3JkZXIpOworCQkJcGdfdmVjW2ldLmJ1ZmZlciA9IE5VTEw7CisJCX0KIAl9CiAJa2ZyZWUocGdfdmVjKTsKIH0KIAogc3RhdGljIGlubGluZSBjaGFyICphbGxvY19vbmVfcGdfdmVjX3BhZ2UodW5zaWduZWQgbG9uZyBvcmRlcikKIHsKLQlnZnBfdCBnZnBfZmxhZ3MgPSBHRlBfS0VSTkVMIHwgX19HRlBfQ09NUCB8IF9fR0ZQX1pFUk8gfCBfX0dGUF9OT1dBUk47CisJY2hhciAqYnVmZmVyID0gTlVMTDsKKwlnZnBfdCBnZnBfZmxhZ3MgPSBHRlBfS0VSTkVMIHwgX19HRlBfQ09NUCB8CisJCQkgIF9fR0ZQX1pFUk8gfCBfX0dGUF9OT1dBUk4gfCBfX0dGUF9OT1JFVFJZOwogCi0JcmV0dXJuIChjaGFyICopIF9fZ2V0X2ZyZWVfcGFnZXMoZ2ZwX2ZsYWdzLCBvcmRlcik7CisJYnVmZmVyID0gKGNoYXIgKikgX19nZXRfZnJlZV9wYWdlcyhnZnBfZmxhZ3MsIG9yZGVyKTsKKworCWlmIChidWZmZXIpCisJCXJldHVybiBidWZmZXI7CisKKwkvKgorCSAqIF9fZ2V0X2ZyZWVfcGFnZXMgZmFpbGVkLCBmYWxsIGJhY2sgdG8gdm1hbGxvYworCSAqLworCWJ1ZmZlciA9IHZ6YWxsb2MoKDEgPDwgb3JkZXIpICogUEFHRV9TSVpFKTsKKworCWlmIChidWZmZXIpCisJCXJldHVybiBidWZmZXI7CisKKwkvKgorCSAqIHZtYWxsb2MgZmFpbGVkLCBsZXRzIGRpZyBpbnRvIHN3YXAgaGVyZQorCSAqLworCWdmcF9mbGFncyAmPSB+X19HRlBfTk9SRVRSWTsKKwlidWZmZXIgPSAoY2hhciAqKV9fZ2V0X2ZyZWVfcGFnZXMoZ2ZwX2ZsYWdzLCBvcmRlcik7CisJaWYgKGJ1ZmZlcikKKwkJcmV0dXJuIGJ1ZmZlcjsKKworCS8qCisJICogY29tcGxldGUgYW5kIHV0dGVyIGZhaWx1cmUKKwkgKi8KKwlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIGNoYXIgKiphbGxvY19wZ192ZWMoc3RydWN0IHRwYWNrZXRfcmVxICpyZXEsIGludCBvcmRlcikKK3N0YXRpYyBzdHJ1Y3QgcGd2ICphbGxvY19wZ192ZWMoc3RydWN0IHRwYWNrZXRfcmVxICpyZXEsIGludCBvcmRlcikKIHsKIAl1bnNpZ25lZCBpbnQgYmxvY2tfbnIgPSByZXEtPnRwX2Jsb2NrX25yOwotCWNoYXIgKipwZ192ZWM7CisJc3RydWN0IHBndiAqcGdfdmVjOwogCWludCBpOwogCi0JcGdfdmVjID0ga3phbGxvYyhibG9ja19uciAqIHNpemVvZihjaGFyICopLCBHRlBfS0VSTkVMKTsKKwlwZ192ZWMgPSBrY2FsbG9jKGJsb2NrX25yLCBzaXplb2Yoc3RydWN0IHBndiksIEdGUF9LRVJORUwpOwogCWlmICh1bmxpa2VseSghcGdfdmVjKSkKIAkJZ290byBvdXQ7CiAKIAlmb3IgKGkgPSAwOyBpIDwgYmxvY2tfbnI7IGkrKykgewotCQlwZ192ZWNbaV0gPSBhbGxvY19vbmVfcGdfdmVjX3BhZ2Uob3JkZXIpOwotCQlpZiAodW5saWtlbHkoIXBnX3ZlY1tpXSkpCisJCXBnX3ZlY1tpXS5idWZmZXIgPSBhbGxvY19vbmVfcGdfdmVjX3BhZ2Uob3JkZXIpOworCQlpZiAodW5saWtlbHkoIXBnX3ZlY1tpXS5idWZmZXIpKQogCQkJZ290byBvdXRfZnJlZV9wZ3ZlYzsKIAl9CiAKQEAgLTIzNzEsNyArMjQxNSw3IEBACiBzdGF0aWMgaW50IHBhY2tldF9zZXRfcmluZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0cGFja2V0X3JlcSAqcmVxLAogCQlpbnQgY2xvc2luZywgaW50IHR4X3JpbmcpCiB7Ci0JY2hhciAqKnBnX3ZlYyA9IE5VTEw7CisJc3RydWN0IHBndiAqcGdfdmVjID0gTlVMTDsKIAlzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvID0gcGt0X3NrKHNrKTsKIAlpbnQgd2FzX3J1bm5pbmcsIG9yZGVyID0gMDsKIAlzdHJ1Y3QgcGFja2V0X3JpbmdfYnVmZmVyICpyYjsKQEAgLTI0NTYsMjIgKzI1MDAsMjAgQEAKIAltdXRleF9sb2NrKCZwby0+cGdfdmVjX2xvY2spOwogCWlmIChjbG9zaW5nIHx8IGF0b21pY19yZWFkKCZwby0+bWFwcGVkKSA9PSAwKSB7CiAJCWVyciA9IDA7Ci0jZGVmaW5lIFhDKGEsIGIpICh7IF9fdHlwZW9mX18gKChhKSkgX190OyBfX3QgPSAoYSk7IChhKSA9IChiKTsgX190OyB9KQogCQlzcGluX2xvY2tfYmgoJnJiX3F1ZXVlLT5sb2NrKTsKLQkJcGdfdmVjID0gWEMocmItPnBnX3ZlYywgcGdfdmVjKTsKKwkJc3dhcChyYi0+cGdfdmVjLCBwZ192ZWMpOwogCQlyYi0+ZnJhbWVfbWF4ID0gKHJlcS0+dHBfZnJhbWVfbnIgLSAxKTsKIAkJcmItPmhlYWQgPSAwOwogCQlyYi0+ZnJhbWVfc2l6ZSA9IHJlcS0+dHBfZnJhbWVfc2l6ZTsKIAkJc3Bpbl91bmxvY2tfYmgoJnJiX3F1ZXVlLT5sb2NrKTsKIAotCQlvcmRlciA9IFhDKHJiLT5wZ192ZWNfb3JkZXIsIG9yZGVyKTsKLQkJcmVxLT50cF9ibG9ja19uciA9IFhDKHJiLT5wZ192ZWNfbGVuLCByZXEtPnRwX2Jsb2NrX25yKTsKKwkJc3dhcChyYi0+cGdfdmVjX29yZGVyLCBvcmRlcik7CisJCXN3YXAocmItPnBnX3ZlY19sZW4sIHJlcS0+dHBfYmxvY2tfbnIpOwogCiAJCXJiLT5wZ192ZWNfcGFnZXMgPSByZXEtPnRwX2Jsb2NrX3NpemUvUEFHRV9TSVpFOwogCQlwby0+cHJvdF9ob29rLmZ1bmMgPSAocG8tPnJ4X3JpbmcucGdfdmVjKSA/CiAJCQkJCQl0cGFja2V0X3JjdiA6IHBhY2tldF9yY3Y7CiAJCXNrYl9xdWV1ZV9wdXJnZShyYl9xdWV1ZSk7Ci0jdW5kZWYgWEMKIAkJaWYgKGF0b21pY19yZWFkKCZwby0+bWFwcGVkKSkKIAkJCXByX2VycigicGFja2V0X21tYXA6IHZtYSBpcyBidXN5OiAlZFxuIiwKIAkJCSAgICAgICBhdG9taWNfcmVhZCgmcG8tPm1hcHBlZCkpOwpAQCAtMjUzMywxNSArMjU3NSwxNyBAQAogCQkJY29udGludWU7CiAKIAkJZm9yIChpID0gMDsgaSA8IHJiLT5wZ192ZWNfbGVuOyBpKyspIHsKLQkJCXN0cnVjdCBwYWdlICpwYWdlID0gdmlydF90b19wYWdlKHJiLT5wZ192ZWNbaV0pOworCQkJc3RydWN0IHBhZ2UgKnBhZ2U7CisJCQl2b2lkICprYWRkciA9IHJiLT5wZ192ZWNbaV0uYnVmZmVyOwogCQkJaW50IHBnX251bTsKIAotCQkJZm9yIChwZ19udW0gPSAwOyBwZ19udW0gPCByYi0+cGdfdmVjX3BhZ2VzOwotCQkJCQlwZ19udW0rKywgcGFnZSsrKSB7CisJCQlmb3IgKHBnX251bSA9IDA7IHBnX251bSA8IHJiLT5wZ192ZWNfcGFnZXM7IHBnX251bSsrKSB7CisJCQkJcGFnZSA9IHBndl90b19wYWdlKGthZGRyKTsKIAkJCQllcnIgPSB2bV9pbnNlcnRfcGFnZSh2bWEsIHN0YXJ0LCBwYWdlKTsKIAkJCQlpZiAodW5saWtlbHkoZXJyKSkKIAkJCQkJZ290byBvdXQ7CiAJCQkJc3RhcnQgKz0gUEFHRV9TSVpFOworCQkJCWthZGRyICs9IFBBR0VfU0laRTsKIAkJCX0KIAkJfQogCX0KZGlmZiAtLWdpdCBhL25ldC9waG9uZXQvTWFrZWZpbGUgYi9uZXQvcGhvbmV0L01ha2VmaWxlCmluZGV4IGQ2MmJiYmEuLmUxMGIxYjEgMTAwNjQ0Ci0tLSBhL25ldC9waG9uZXQvTWFrZWZpbGUKKysrIGIvbmV0L3Bob25ldC9NYWtlZmlsZQpAQCAtMSw2ICsxLDYgQEAKIG9iai0kKENPTkZJR19QSE9ORVQpICs9IHBob25ldC5vIHBuX3BlcC5vCiAKLXBob25ldC1vYmpzIDo9IFwKK3Bob25ldC15IDo9IFwKIAlwbl9kZXYubyBcCiAJcG5fbmV0bGluay5vIFwKIAlzb2NrZXQubyBcCkBAIC04LDQgKzgsNCBAQAogCXN5c2N0bC5vIFwKIAlhZl9waG9uZXQubwogCi1wbl9wZXAtb2JqcyA6PSBwZXAubyBwZXAtZ3Bycy5vCitwbl9wZXAteSA6PSBwZXAubyBwZXAtZ3Bycy5vCmRpZmYgLS1naXQgYS9uZXQvcmRzL01ha2VmaWxlIGIvbmV0L3Jkcy9NYWtlZmlsZQppbmRleCBiNDZlY2ExLi41NmQzZjYwIDEwMDY0NAotLS0gYS9uZXQvcmRzL01ha2VmaWxlCisrKyBiL25ldC9yZHMvTWFrZWZpbGUKQEAgLTQsNyArNCw3IEBACiAJCQlsb29wLm8gcGFnZS5vIHJkbWEubwogCiBvYmotJChDT05GSUdfUkRTX1JETUEpICs9IHJkc19yZG1hLm8KLXJkc19yZG1hLW9ianMgOj0JcmRtYV90cmFuc3BvcnQubyBcCityZHNfcmRtYS15IDo9CXJkbWFfdHJhbnNwb3J0Lm8gXAogCQkJaWIubyBpYl9jbS5vIGliX3JlY3YubyBpYl9yaW5nLm8gaWJfc2VuZC5vIGliX3N0YXRzLm8gXAogCQkJaWJfc3lzY3RsLm8gaWJfcmRtYS5vIFwKIAkJCWl3Lm8gaXdfY20ubyBpd19yZWN2Lm8gaXdfcmluZy5vIGl3X3NlbmQubyBpd19zdGF0cy5vIFwKQEAgLTEyLDEwICsxMiw4IEBACiAKIAogb2JqLSQoQ09ORklHX1JEU19UQ1ApICs9IHJkc190Y3AubwotcmRzX3RjcC1vYmpzIDo9CQl0Y3AubyB0Y3BfY29ubmVjdC5vIHRjcF9saXN0ZW4ubyB0Y3BfcmVjdi5vIFwKK3Jkc190Y3AteSA6PQkJdGNwLm8gdGNwX2Nvbm5lY3QubyB0Y3BfbGlzdGVuLm8gdGNwX3JlY3YubyBcCiAJCQl0Y3Bfc2VuZC5vIHRjcF9zdGF0cy5vCiAKLWlmZXEgKCQoQ09ORklHX1JEU19ERUJVRyksIHkpCi1FWFRSQV9DRkxBR1MgKz0gLURERUJVRwotZW5kaWYKK2NjZmxhZ3MtJChDT05GSUdfUkRTX0RFQlVHKQk6PQktRERFQlVHCiAKZGlmZiAtLWdpdCBhL25ldC9yZmtpbGwvY29yZS5jIGIvbmV0L3Jma2lsbC9jb3JlLmMKaW5kZXggMDRmNTk5MC4uMDE5ODE5MSAxMDA2NDQKLS0tIGEvbmV0L3Jma2lsbC9jb3JlLmMKKysrIGIvbmV0L3Jma2lsbC9jb3JlLmMKQEAgLTE0OSwyMCArMTQ5LDYgQEAKIAlyZmtpbGxfbGVkX3RyaWdnZXJfZXZlbnQocmZraWxsKTsKIH0KIAotY29uc3QgY2hhciAqcmZraWxsX2dldF9sZWRfdHJpZ2dlcl9uYW1lKHN0cnVjdCByZmtpbGwgKnJma2lsbCkKLXsKLQlyZXR1cm4gcmZraWxsLT5sZWRfdHJpZ2dlci5uYW1lOwotfQotRVhQT1JUX1NZTUJPTChyZmtpbGxfZ2V0X2xlZF90cmlnZ2VyX25hbWUpOwotCi12b2lkIHJma2lsbF9zZXRfbGVkX3RyaWdnZXJfbmFtZShzdHJ1Y3QgcmZraWxsICpyZmtpbGwsIGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0JQlVHX09OKCFyZmtpbGwpOwotCi0JcmZraWxsLT5sZWR0cmlnbmFtZSA9IG5hbWU7Ci19Ci1FWFBPUlRfU1lNQk9MKHJma2lsbF9zZXRfbGVkX3RyaWdnZXJfbmFtZSk7Ci0KIHN0YXRpYyBpbnQgcmZraWxsX2xlZF90cmlnZ2VyX3JlZ2lzdGVyKHN0cnVjdCByZmtpbGwgKnJma2lsbCkKIHsKIAlyZmtpbGwtPmxlZF90cmlnZ2VyLm5hbWUgPSByZmtpbGwtPmxlZHRyaWduYW1lCmRpZmYgLS1naXQgYS9uZXQvcnhycGMvTWFrZWZpbGUgYi9uZXQvcnhycGMvTWFrZWZpbGUKaW5kZXggYzQ2ODY3Yy4uZDFjMzQyOSAxMDA2NDQKLS0tIGEvbmV0L3J4cnBjL01ha2VmaWxlCisrKyBiL25ldC9yeHJwYy9NYWtlZmlsZQpAQCAtMiw3ICsyLDcgQEAKICMgTWFrZWZpbGUgZm9yIExpbnV4IGtlcm5lbCBSeFJQQwogIwogCi1hZi1yeHJwYy1vYmpzIDo9IFwKK2FmLXJ4cnBjLXkgOj0gXAogCWFmX3J4cnBjLm8gXAogCWFyLWFjY2VwdC5vIFwKIAlhci1hY2subyBcCkBAIC0yMSw3ICsyMSw3IEBACiAJYXItdHJhbnNwb3J0Lm8KIAogaWZlcSAoJChDT05GSUdfUFJPQ19GUykseSkKLWFmLXJ4cnBjLW9ianMgKz0gYXItcHJvYy5vCithZi1yeHJwYy15ICs9IGFyLXByb2MubwogZW5kaWYKIAogb2JqLSQoQ09ORklHX0FGX1JYUlBDKSArPSBhZi1yeHJwYy5vCmRpZmYgLS1naXQgYS9uZXQvcnhycGMvYXItcGVlci5jIGIvbmV0L3J4cnBjL2FyLXBlZXIuYwppbmRleCA5ZjE3MjliLi5hNTNmYjI1IDEwMDY0NAotLS0gYS9uZXQvcnhycGMvYXItcGVlci5jCisrKyBiL25ldC9yeHJwYy9hci1wZWVyLmMKQEAgLTQ3LDEyICs0NywxMiBAQAogCWNhc2UgQUZfSU5FVDoKIAkJZmwub2lmID0gMDsKIAkJZmwucHJvdG8gPSBJUFBST1RPX1VEUCwKLQkJZmwubmxfdS5pcDRfdS5zYWRkciA9IDA7Ci0JCWZsLm5sX3UuaXA0X3UuZGFkZHIgPSBwZWVyLT5zcngudHJhbnNwb3J0LnNpbi5zaW5fYWRkci5zX2FkZHI7Ci0JCWZsLm5sX3UuaXA0X3UudG9zID0gMDsKKwkJZmwuZmw0X2RzdCA9IHBlZXItPnNyeC50cmFuc3BvcnQuc2luLnNpbl9hZGRyLnNfYWRkcjsKKwkJZmwuZmw0X3NyYyA9IDA7CisJCWZsLmZsNF90b3MgPSAwOwogCQkvKiBhc3N1bWUgQUZTLkNNIHRhbGtpbmcgdG8gQUZTLkZTICovCi0JCWZsLnVsaV91LnBvcnRzLnNwb3J0ID0gaHRvbnMoNzAwMSk7Ci0JCWZsLnVsaV91LnBvcnRzLmRwb3J0ID0gaHRvbnMoNzAwMCk7CisJCWZsLmZsX2lwX3Nwb3J0ID0gaHRvbnMoNzAwMSk7CisJCWZsLmZsX2lwX2Rwb3J0ID0gaHRvbnMoNzAwMCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCUJVRygpOwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9maWZvLmMgYi9uZXQvc2NoZWQvc2NoX2ZpZm8uYwppbmRleCA0ZGZlY2IwLi5hYTRkNjMzIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2ZpZm8uYworKysgYi9uZXQvc2NoZWQvc2NoX2ZpZm8uYwpAQCAtNTQsOCArNTQsNiBAQAogCiAJLyogcXVldWUgZnVsbCwgcmVtb3ZlIG9uZSBza2IgdG8gZnVsZmlsbCB0aGUgbGltaXQgKi8KIAlza2JfaGVhZCA9IHFkaXNjX2RlcXVldWVfaGVhZChzY2gpOwotCXNjaC0+YnN0YXRzLmJ5dGVzIC09IHFkaXNjX3BrdF9sZW4oc2tiX2hlYWQpOwotCXNjaC0+YnN0YXRzLnBhY2tldHMtLTsKIAlzY2gtPnFzdGF0cy5kcm9wcysrOwogCWtmcmVlX3NrYihza2JfaGVhZCk7CiAKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jIGIvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmMKaW5kZXggNWRiYjNjZC4uMzRkYzU5OCAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmMKQEAgLTYwLDggKzYwLDcgQEAKIAogCQkvKiBjaGVjayB0aGUgcmVhc29uIG9mIHJlcXVldWluZyB3aXRob3V0IHR4IGxvY2sgZmlyc3QgKi8KIAkJdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpKTsKLQkJaWYgKCFuZXRpZl90eF9xdWV1ZV9zdG9wcGVkKHR4cSkgJiYKLQkJICAgICFuZXRpZl90eF9xdWV1ZV9mcm96ZW4odHhxKSkgeworCQlpZiAoIW5ldGlmX3R4X3F1ZXVlX2Zyb3plbl9vcl9zdG9wcGVkKHR4cSkpIHsKIAkJCXEtPmdzb19za2IgPSBOVUxMOwogCQkJcS0+cS5xbGVuLS07CiAJCX0gZWxzZQpAQCAtMTIyLDcgKzEyMSw3IEBACiAJc3Bpbl91bmxvY2socm9vdF9sb2NrKTsKIAogCUhBUkRfVFhfTE9DSyhkZXYsIHR4cSwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQlpZiAoIW5ldGlmX3R4X3F1ZXVlX3N0b3BwZWQodHhxKSAmJiAhbmV0aWZfdHhfcXVldWVfZnJvemVuKHR4cSkpCisJaWYgKCFuZXRpZl90eF9xdWV1ZV9mcm96ZW5fb3Jfc3RvcHBlZCh0eHEpKQogCQlyZXQgPSBkZXZfaGFyZF9zdGFydF94bWl0KHNrYiwgZGV2LCB0eHEpOwogCiAJSEFSRF9UWF9VTkxPQ0soZGV2LCB0eHEpOwpAQCAtMTQ0LDggKzE0Myw3IEBACiAJCXJldCA9IGRldl9yZXF1ZXVlX3NrYihza2IsIHEpOwogCX0KIAotCWlmIChyZXQgJiYgKG5ldGlmX3R4X3F1ZXVlX3N0b3BwZWQodHhxKSB8fAotCQkgICAgbmV0aWZfdHhfcXVldWVfZnJvemVuKHR4cSkpKQorCWlmIChyZXQgJiYgbmV0aWZfdHhfcXVldWVfZnJvemVuX29yX3N0b3BwZWQodHhxKSkKIAkJcmV0ID0gMDsKIAogCXJldHVybiByZXQ7CkBAIC01NTUsNyArNTUzLDkgQEAKIAlzaXplID0gUURJU0NfQUxJR04oc2l6ZW9mKCpzY2gpKTsKIAlzaXplICs9IG9wcy0+cHJpdl9zaXplICsgKFFESVNDX0FMSUdOVE8gLSAxKTsKIAotCXAgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCXAgPSBremFsbG9jX25vZGUoc2l6ZSwgR0ZQX0tFUk5FTCwKKwkJCSBuZXRkZXZfcXVldWVfbnVtYV9ub2RlX3JlYWQoZGV2X3F1ZXVlKSk7CisKIAlpZiAoIXApCiAJCWdvdG8gZXJyb3V0OwogCXNjaCA9IChzdHJ1Y3QgUWRpc2MgKikgUURJU0NfQUxJR04oKHVuc2lnbmVkIGxvbmcpIHApOwpAQCAtODEwLDIwICs4MTAsMzUgQEAKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgZGV2X2RlYWN0aXZhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3ZvaWQgZGV2X2RlYWN0aXZhdGVfbWFueShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQogewotCW5ldGRldl9mb3JfZWFjaF90eF9xdWV1ZShkZXYsIGRldl9kZWFjdGl2YXRlX3F1ZXVlLCAmbm9vcF9xZGlzYyk7Ci0JaWYgKGRldl9pbmdyZXNzX3F1ZXVlKGRldikpCi0JCWRldl9kZWFjdGl2YXRlX3F1ZXVlKGRldiwgZGV2X2luZ3Jlc3NfcXVldWUoZGV2KSwgJm5vb3BfcWRpc2MpOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAKLQlkZXZfd2F0Y2hkb2dfZG93bihkZXYpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCBoZWFkLCB1bnJlZ19saXN0KSB7CisJCW5ldGRldl9mb3JfZWFjaF90eF9xdWV1ZShkZXYsIGRldl9kZWFjdGl2YXRlX3F1ZXVlLAorCQkJCQkgJm5vb3BfcWRpc2MpOworCQlpZiAoZGV2X2luZ3Jlc3NfcXVldWUoZGV2KSkKKwkJCWRldl9kZWFjdGl2YXRlX3F1ZXVlKGRldiwgZGV2X2luZ3Jlc3NfcXVldWUoZGV2KSwKKwkJCQkJICAgICAmbm9vcF9xZGlzYyk7CisKKwkJZGV2X3dhdGNoZG9nX2Rvd24oZGV2KTsKKwl9CiAKIAkvKiBXYWl0IGZvciBvdXRzdGFuZGluZyBxZGlzYy1sZXNzIGRldl9xdWV1ZV94bWl0IGNhbGxzLiAqLwogCXN5bmNocm9uaXplX3JjdSgpOwogCiAJLyogV2FpdCBmb3Igb3V0c3RhbmRpbmcgcWRpc2NfcnVuIGNhbGxzLiAqLwotCXdoaWxlIChzb21lX3FkaXNjX2lzX2J1c3koZGV2KSkKLQkJeWllbGQoKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgaGVhZCwgdW5yZWdfbGlzdCkKKwkJd2hpbGUgKHNvbWVfcWRpc2NfaXNfYnVzeShkZXYpKQorCQkJeWllbGQoKTsKK30KKwordm9pZCBkZXZfZGVhY3RpdmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCUxJU1RfSEVBRChzaW5nbGUpOworCisJbGlzdF9hZGQoJmRldi0+dW5yZWdfbGlzdCwgJnNpbmdsZSk7CisJZGV2X2RlYWN0aXZhdGVfbWFueSgmc2luZ2xlKTsKIH0KIAogc3RhdGljIHZvaWQgZGV2X2luaXRfc2NoZWR1bGVyX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX3JlZC5jIGIvbmV0L3NjaGVkL3NjaF9yZWQuYwppbmRleCA4ZDQyYmIzLi5hNjdiYTNjIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX3JlZC5jCisrKyBiL25ldC9zY2hlZC9zY2hfcmVkLmMKQEAgLTIzOSw2ICsyMzksNyBAQAogCQkuU2NlbGxfbG9nCT0gcS0+cGFybXMuU2NlbGxfbG9nLAogCX07CiAKKwlzY2gtPnFzdGF0cy5iYWNrbG9nID0gcS0+cWRpc2MtPnFzdGF0cy5iYWNrbG9nOwogCW9wdHMgPSBubGFfbmVzdF9zdGFydChza2IsIFRDQV9PUFRJT05TKTsKIAlpZiAob3B0cyA9PSBOVUxMKQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfc2ZxLmMgYi9uZXQvc2NoZWQvc2NoX3NmcS5jCmluZGV4IDcxNTA3MDUuLmQ1NGFjOTQgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfc2ZxLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9zZnEuYwpAQCAtNjcsMjcgKzY3LDQ3IEBACiAKIAlJTVBMRU1FTlRBVElPTjoKIAlUaGlzIGltcGxlbWVudGF0aW9uIGxpbWl0cyBtYXhpbWFsIHF1ZXVlIGxlbmd0aCB0byAxMjg7Ci0JbWF4aW1hbCBtdHUgdG8gMl4xNS0xOyBudW1iZXIgb2YgaGFzaCBidWNrZXRzIHRvIDEwMjQuCisJbWF4IG10dSB0byAyXjE4LTE7IG1heCAxMjggZmxvd3MsIG51bWJlciBvZiBoYXNoIGJ1Y2tldHMgdG8gMTAyNC4KIAlUaGUgb25seSBnb2FsIG9mIHRoaXMgcmVzdHJpY3Rpb25zIHdhcyB0aGF0IGFsbCBkYXRhCi0JZml0IGludG8gb25lIDRLIHBhZ2UgOi0pLiBTdHJ1Y3Qgc2ZxX3NjaGVkX2RhdGEgaXMKLQlvcmdhbml6ZWQgaW4gYW50aS1jYWNoZSBtYW5uZXI6IGFsbCB0aGUgZGF0YSBmb3IgYSBidWNrZXQKLQlhcmUgc2NhdHRlcmVkIG92ZXIgZGlmZmVyZW50IGxvY2F0aW9ucy4gVGhpcyBpcyBub3QgZ29vZCwKLQlidXQgaXQgYWxsb3dlZCBtZSB0byBwdXQgaXQgaW50byA0Sy4KKwlmaXQgaW50byBvbmUgNEsgcGFnZSBvbiAzMmJpdCBhcmNoZXMuCiAKIAlJdCBpcyBlYXN5IHRvIGluY3JlYXNlIHRoZXNlIHZhbHVlcywgYnV0IG5vdCBpbiBmbGlnaHQuICAqLwogCi0jZGVmaW5lIFNGUV9ERVBUSAkJMTI4CisjZGVmaW5lIFNGUV9ERVBUSAkJMTI4IC8qIG1heCBudW1iZXIgb2YgcGFja2V0cyBwZXIgZmxvdyAqLworI2RlZmluZSBTRlFfU0xPVFMJCTEyOCAvKiBtYXggbnVtYmVyIG9mIGZsb3dzICovCisjZGVmaW5lIFNGUV9FTVBUWV9TTE9UCQkyNTUKICNkZWZpbmUgU0ZRX0hBU0hfRElWSVNPUgkxMDI0CisvKiBXZSB1c2UgMTYgYml0cyB0byBzdG9yZSBhbGxvdCwgYW5kIHdhbnQgdG8gaGFuZGxlIHBhY2tldHMgdXAgdG8gNjRLCisgKiBTY2FsZSBhbGxvdCBieSA4ICgxPDwzKSBzbyB0aGF0IG5vIG92ZXJmbG93IG9jY3Vycy4KKyAqLworI2RlZmluZSBTRlFfQUxMT1RfU0hJRlQJCTMKKyNkZWZpbmUgU0ZRX0FMTE9UX1NJWkUoWCkJRElWX1JPVU5EX1VQKFgsIDEgPDwgU0ZRX0FMTE9UX1NISUZUKQogCi0vKiBUaGlzIHR5cGUgc2hvdWxkIGNvbnRhaW4gYXQgbGVhc3QgU0ZRX0RFUFRIKjIgdmFsdWVzICovCisvKiBUaGlzIHR5cGUgc2hvdWxkIGNvbnRhaW4gYXQgbGVhc3QgU0ZRX0RFUFRIICsgU0ZRX1NMT1RTIHZhbHVlcyAqLwogdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHNmcV9pbmRleDsKIAorLyoKKyAqIFdlIGRvbnQgdXNlIHBvaW50ZXJzIHRvIHNhdmUgc3BhY2UuCisgKiBTbWFsbCBpbmRleGVzIFswIC4uLiBTRlFfU0xPVFMgLSAxXSBhcmUgJ3BvaW50ZXJzJyB0byBzbG90c1tdIGFycmF5CisgKiB3aGlsZSBmb2xsb3dpbmcgdmFsdWVzIFtTRlFfU0xPVFMgLi4uIFNGUV9TTE9UUyArIFNGUV9ERVBUSCAtIDFdCisgKiBhcmUgJ3BvaW50ZXJzJyB0byBkZXBbXSBhcnJheQorICovCiBzdHJ1Y3Qgc2ZxX2hlYWQKIHsKIAlzZnFfaW5kZXgJbmV4dDsKIAlzZnFfaW5kZXgJcHJldjsKIH07CiAKK3N0cnVjdCBzZnFfc2xvdCB7CisJc3RydWN0IHNrX2J1ZmYJKnNrYmxpc3RfbmV4dDsKKwlzdHJ1Y3Qgc2tfYnVmZgkqc2tibGlzdF9wcmV2OworCXNmcV9pbmRleAlxbGVuOyAvKiBudW1iZXIgb2Ygc2ticyBpbiBza2JsaXN0ICovCisJc2ZxX2luZGV4CW5leHQ7IC8qIG5leHQgc2xvdCBpbiBzZnEgY2hhaW4gKi8KKwlzdHJ1Y3Qgc2ZxX2hlYWQgZGVwOyAvKiBhbmNob3IgaW4gZGVwW10gY2hhaW5zICovCisJdW5zaWduZWQgc2hvcnQJaGFzaDsgLyogaGFzaCB2YWx1ZSAoaW5kZXggaW4gaHRbXSkgKi8KKwlzaG9ydAkJYWxsb3Q7IC8qIGNyZWRpdCBmb3IgdGhpcyBzbG90ICovCit9OworCiBzdHJ1Y3Qgc2ZxX3NjaGVkX2RhdGEKIHsKIC8qIFBhcmFtZXRlcnMgKi8KQEAgLTk5LDE3ICsxMTksMjQgQEAKIAlzdHJ1Y3QgdGNmX3Byb3RvICpmaWx0ZXJfbGlzdDsKIAlzdHJ1Y3QgdGltZXJfbGlzdCBwZXJ0dXJiX3RpbWVyOwogCXUzMgkJcGVydHVyYmF0aW9uOwotCXNmcV9pbmRleAl0YWlsOwkJLyogSW5kZXggb2YgY3VycmVudCBzbG90IGluIHJvdW5kICovCi0Jc2ZxX2luZGV4CW1heF9kZXB0aDsJLyogTWF4aW1hbCBkZXB0aCAqLwotCisJc2ZxX2luZGV4CWN1cl9kZXB0aDsJLyogZGVwdGggb2YgbG9uZ2VzdCBzbG90ICovCisJdW5zaWduZWQgc2hvcnQgIHNjYWxlZF9xdWFudHVtOyAvKiBTRlFfQUxMT1RfU0laRShxdWFudHVtKSAqLworCXN0cnVjdCBzZnFfc2xvdCAqdGFpbDsJCS8qIGN1cnJlbnQgc2xvdCBpbiByb3VuZCAqLwogCXNmcV9pbmRleAlodFtTRlFfSEFTSF9ESVZJU09SXTsJLyogSGFzaCB0YWJsZSAqLwotCXNmcV9pbmRleAluZXh0W1NGUV9ERVBUSF07CS8qIEFjdGl2ZSBzbG90cyBsaW5rICovCi0Jc2hvcnQJCWFsbG90W1NGUV9ERVBUSF07CS8qIEN1cnJlbnQgYWxsb3RtZW50IHBlciBzbG90ICovCi0JdW5zaWduZWQgc2hvcnQJaGFzaFtTRlFfREVQVEhdOwkvKiBIYXNoIHZhbHVlIGluZGV4ZWQgYnkgc2xvdHMgKi8KLQlzdHJ1Y3Qgc2tfYnVmZl9oZWFkCXFzW1NGUV9ERVBUSF07CQkvKiBTbG90IHF1ZXVlICovCi0Jc3RydWN0IHNmcV9oZWFkCWRlcFtTRlFfREVQVEgqMl07CS8qIExpbmtlZCBsaXN0IG9mIHNsb3RzLCBpbmRleGVkIGJ5IGRlcHRoICovCisJc3RydWN0IHNmcV9zbG90CXNsb3RzW1NGUV9TTE9UU107CisJc3RydWN0IHNmcV9oZWFkCWRlcFtTRlFfREVQVEhdOwkvKiBMaW5rZWQgbGlzdCBvZiBzbG90cywgaW5kZXhlZCBieSBkZXB0aCAqLwogfTsKIAorLyoKKyAqIHNmcV9oZWFkIGFyZSBlaXRoZXIgaW4gYSBzZnFfc2xvdCBvciBpbiBkZXBbXSBhcnJheQorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzZnFfaGVhZCAqc2ZxX2RlcF9oZWFkKHN0cnVjdCBzZnFfc2NoZWRfZGF0YSAqcSwgc2ZxX2luZGV4IHZhbCkKK3sKKwlpZiAodmFsIDwgU0ZRX1NMT1RTKQorCQlyZXR1cm4gJnEtPnNsb3RzW3ZhbF0uZGVwOworCXJldHVybiAmcS0+ZGVwW3ZhbCAtIFNGUV9TTE9UU107Cit9CisKIHN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIHNmcV9mb2xkX2hhc2goc3RydWN0IHNmcV9zY2hlZF9kYXRhICpxLCB1MzIgaCwgdTMyIGgxKQogewogCXJldHVybiBqaGFzaF8yd29yZHMoaCwgaDEsIHEtPnBlcnR1cmJhdGlvbikgJiAoU0ZRX0hBU0hfRElWSVNPUiAtIDEpOwpAQCAtMjAwLDMwICsyMjcsNDEgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIHggOiBzbG90IG51bWJlciBbMCAuLiBTRlFfU0xPVFMgLSAxXQorICovCiBzdGF0aWMgaW5saW5lIHZvaWQgc2ZxX2xpbmsoc3RydWN0IHNmcV9zY2hlZF9kYXRhICpxLCBzZnFfaW5kZXggeCkKIHsKIAlzZnFfaW5kZXggcCwgbjsKLQlpbnQgZCA9IHEtPnFzW3hdLnFsZW4gKyBTRlFfREVQVEg7CisJaW50IHFsZW4gPSBxLT5zbG90c1t4XS5xbGVuOwogCi0JcCA9IGQ7Ci0JbiA9IHEtPmRlcFtkXS5uZXh0OwotCXEtPmRlcFt4XS5uZXh0ID0gbjsKLQlxLT5kZXBbeF0ucHJldiA9IHA7Ci0JcS0+ZGVwW3BdLm5leHQgPSBxLT5kZXBbbl0ucHJldiA9IHg7CisJcCA9IHFsZW4gKyBTRlFfU0xPVFM7CisJbiA9IHEtPmRlcFtxbGVuXS5uZXh0OworCisJcS0+c2xvdHNbeF0uZGVwLm5leHQgPSBuOworCXEtPnNsb3RzW3hdLmRlcC5wcmV2ID0gcDsKKworCXEtPmRlcFtxbGVuXS5uZXh0ID0geDsJCS8qIHNmcV9kZXBfaGVhZChxLCBwKS0+bmV4dCA9IHggKi8KKwlzZnFfZGVwX2hlYWQocSwgbiktPnByZXYgPSB4OwogfQogCisjZGVmaW5lIHNmcV91bmxpbmsocSwgeCwgbiwgcCkJCQlcCisJbiA9IHEtPnNsb3RzW3hdLmRlcC5uZXh0OwkJXAorCXAgPSBxLT5zbG90c1t4XS5kZXAucHJldjsJCVwKKwlzZnFfZGVwX2hlYWQocSwgcCktPm5leHQgPSBuOwkJXAorCXNmcV9kZXBfaGVhZChxLCBuKS0+cHJldiA9IHAKKworCiBzdGF0aWMgaW5saW5lIHZvaWQgc2ZxX2RlYyhzdHJ1Y3Qgc2ZxX3NjaGVkX2RhdGEgKnEsIHNmcV9pbmRleCB4KQogewogCXNmcV9pbmRleCBwLCBuOworCWludCBkOwogCi0JbiA9IHEtPmRlcFt4XS5uZXh0OwotCXAgPSBxLT5kZXBbeF0ucHJldjsKLQlxLT5kZXBbcF0ubmV4dCA9IG47Ci0JcS0+ZGVwW25dLnByZXYgPSBwOworCXNmcV91bmxpbmsocSwgeCwgbiwgcCk7CiAKLQlpZiAobiA9PSBwICYmIHEtPm1heF9kZXB0aCA9PSBxLT5xc1t4XS5xbGVuICsgMSkKLQkJcS0+bWF4X2RlcHRoLS07Ci0KKwlkID0gcS0+c2xvdHNbeF0ucWxlbi0tOworCWlmIChuID09IHAgJiYgcS0+Y3VyX2RlcHRoID09IGQpCisJCXEtPmN1cl9kZXB0aC0tOwogCXNmcV9saW5rKHEsIHgpOwogfQogCkBAIC0yMzIsMzQgKzI3MCw3NCBAQAogCXNmcV9pbmRleCBwLCBuOwogCWludCBkOwogCi0JbiA9IHEtPmRlcFt4XS5uZXh0OwotCXAgPSBxLT5kZXBbeF0ucHJldjsKLQlxLT5kZXBbcF0ubmV4dCA9IG47Ci0JcS0+ZGVwW25dLnByZXYgPSBwOwotCWQgPSBxLT5xc1t4XS5xbGVuOwotCWlmIChxLT5tYXhfZGVwdGggPCBkKQotCQlxLT5tYXhfZGVwdGggPSBkOworCXNmcV91bmxpbmsocSwgeCwgbiwgcCk7CiAKKwlkID0gKytxLT5zbG90c1t4XS5xbGVuOworCWlmIChxLT5jdXJfZGVwdGggPCBkKQorCQlxLT5jdXJfZGVwdGggPSBkOwogCXNmcV9saW5rKHEsIHgpOwogfQogCisvKiBoZWxwZXIgZnVuY3Rpb25zIDogbWlnaHQgYmUgY2hhbmdlZCB3aGVuL2lmIHNrYiB1c2UgYSBzdGFuZGFyZCBsaXN0X2hlYWQgKi8KKworLyogcmVtb3ZlIG9uZSBza2IgZnJvbSB0YWlsIG9mIHNsb3QgcXVldWUgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKnNsb3RfZGVxdWV1ZV90YWlsKHN0cnVjdCBzZnFfc2xvdCAqc2xvdCkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gc2xvdC0+c2tibGlzdF9wcmV2OworCisJc2xvdC0+c2tibGlzdF9wcmV2ID0gc2tiLT5wcmV2OworCXNrYi0+cHJldi0+bmV4dCA9IChzdHJ1Y3Qgc2tfYnVmZiAqKXNsb3Q7CisJc2tiLT5uZXh0ID0gc2tiLT5wcmV2ID0gTlVMTDsKKwlyZXR1cm4gc2tiOworfQorCisvKiByZW1vdmUgb25lIHNrYiBmcm9tIGhlYWQgb2Ygc2xvdCBxdWV1ZSAqLworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqc2xvdF9kZXF1ZXVlX2hlYWQoc3RydWN0IHNmcV9zbG90ICpzbG90KQoreworCXN0cnVjdCBza19idWZmICpza2IgPSBzbG90LT5za2JsaXN0X25leHQ7CisKKwlzbG90LT5za2JsaXN0X25leHQgPSBza2ItPm5leHQ7CisJc2tiLT5uZXh0LT5wcmV2ID0gKHN0cnVjdCBza19idWZmICopc2xvdDsKKwlza2ItPm5leHQgPSBza2ItPnByZXYgPSBOVUxMOworCXJldHVybiBza2I7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzbG90X3F1ZXVlX2luaXQoc3RydWN0IHNmcV9zbG90ICpzbG90KQoreworCXNsb3QtPnNrYmxpc3RfcHJldiA9IHNsb3QtPnNrYmxpc3RfbmV4dCA9IChzdHJ1Y3Qgc2tfYnVmZiAqKXNsb3Q7Cit9CisKKy8qIGFkZCBza2IgdG8gc2xvdCBxdWV1ZSAodGFpbCBhZGQpICovCitzdGF0aWMgaW5saW5lIHZvaWQgc2xvdF9xdWV1ZV9hZGQoc3RydWN0IHNmcV9zbG90ICpzbG90LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXNrYi0+cHJldiA9IHNsb3QtPnNrYmxpc3RfcHJldjsKKwlza2ItPm5leHQgPSAoc3RydWN0IHNrX2J1ZmYgKilzbG90OworCXNsb3QtPnNrYmxpc3RfcHJldi0+bmV4dCA9IHNrYjsKKwlzbG90LT5za2JsaXN0X3ByZXYgPSBza2I7Cit9CisKKyNkZWZpbmUJc2xvdF9xdWV1ZV93YWxrKHNsb3QsIHNrYikJCVwKKwlmb3IgKHNrYiA9IHNsb3QtPnNrYmxpc3RfbmV4dDsJCVwKKwkgICAgIHNrYiAhPSAoc3RydWN0IHNrX2J1ZmYgKilzbG90OwlcCisJICAgICBza2IgPSBza2ItPm5leHQpCisKIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2ZxX2Ryb3Aoc3RydWN0IFFkaXNjICpzY2gpCiB7CiAJc3RydWN0IHNmcV9zY2hlZF9kYXRhICpxID0gcWRpc2NfcHJpdihzY2gpOwotCXNmcV9pbmRleCBkID0gcS0+bWF4X2RlcHRoOworCXNmcV9pbmRleCB4LCBkID0gcS0+Y3VyX2RlcHRoOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJdW5zaWduZWQgaW50IGxlbjsKKwlzdHJ1Y3Qgc2ZxX3Nsb3QgKnNsb3Q7CiAKLQkvKiBRdWV1ZSBpcyBmdWxsISBGaW5kIHRoZSBsb25nZXN0IHNsb3QgYW5kCi0JICAgZHJvcCBhIHBhY2tldCBmcm9tIGl0ICovCi0KKwkvKiBRdWV1ZSBpcyBmdWxsISBGaW5kIHRoZSBsb25nZXN0IHNsb3QgYW5kIGRyb3AgdGFpbCBwYWNrZXQgZnJvbSBpdCAqLwogCWlmIChkID4gMSkgewotCQlzZnFfaW5kZXggeCA9IHEtPmRlcFtkICsgU0ZRX0RFUFRIXS5uZXh0OwotCQlza2IgPSBxLT5xc1t4XS5wcmV2OworCQl4ID0gcS0+ZGVwW2RdLm5leHQ7CisJCXNsb3QgPSAmcS0+c2xvdHNbeF07Citkcm9wOgorCQlza2IgPSBzbG90X2RlcXVldWVfdGFpbChzbG90KTsKIAkJbGVuID0gcWRpc2NfcGt0X2xlbihza2IpOwotCQlfX3NrYl91bmxpbmsoc2tiLCAmcS0+cXNbeF0pOwotCQlrZnJlZV9za2Ioc2tiKTsKIAkJc2ZxX2RlYyhxLCB4KTsKKwkJa2ZyZWVfc2tiKHNrYik7CiAJCXNjaC0+cS5xbGVuLS07CiAJCXNjaC0+cXN0YXRzLmRyb3BzKys7CiAJCXNjaC0+cXN0YXRzLmJhY2tsb2cgLT0gbGVuOwpAQCAtMjY4LDE4ICszNDYsMTEgQEAKIAogCWlmIChkID09IDEpIHsKIAkJLyogSXQgaXMgZGlmZmljdWx0IHRvIGJlbGlldmUsIGJ1dCBBTEwgVEhFIFNMT1RTIEhBVkUgTEVOR1RIIDEuICovCi0JCWQgPSBxLT5uZXh0W3EtPnRhaWxdOwotCQlxLT5uZXh0W3EtPnRhaWxdID0gcS0+bmV4dFtkXTsKLQkJc2tiID0gcS0+cXNbZF0ucHJldjsKLQkJbGVuID0gcWRpc2NfcGt0X2xlbihza2IpOwotCQlfX3NrYl91bmxpbmsoc2tiLCAmcS0+cXNbZF0pOwotCQlrZnJlZV9za2Ioc2tiKTsKLQkJc2ZxX2RlYyhxLCBkKTsKLQkJc2NoLT5xLnFsZW4tLTsKLQkJcS0+aHRbcS0+aGFzaFtkXV0gPSBTRlFfREVQVEg7Ci0JCXNjaC0+cXN0YXRzLmRyb3BzKys7Ci0JCXNjaC0+cXN0YXRzLmJhY2tsb2cgLT0gbGVuOwotCQlyZXR1cm4gbGVuOworCQl4ID0gcS0+dGFpbC0+bmV4dDsKKwkJc2xvdCA9ICZxLT5zbG90c1t4XTsKKwkJcS0+dGFpbC0+bmV4dCA9IHNsb3QtPm5leHQ7CisJCXEtPmh0W3Nsb3QtPmhhc2hdID0gU0ZRX0VNUFRZX1NMT1Q7CisJCWdvdG8gZHJvcDsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTI5MSw2ICszNjIsNyBAQAogCXN0cnVjdCBzZnFfc2NoZWRfZGF0YSAqcSA9IHFkaXNjX3ByaXYoc2NoKTsKIAl1bnNpZ25lZCBpbnQgaGFzaDsKIAlzZnFfaW5kZXggeDsKKwlzdHJ1Y3Qgc2ZxX3Nsb3QgKnNsb3Q7CiAJaW50IHVuaW5pdGlhbGl6ZWRfdmFyKHJldCk7CiAKIAloYXNoID0gc2ZxX2NsYXNzaWZ5KHNrYiwgc2NoLCAmcmV0KTsKQEAgLTMwMywzMCArMzc1LDMyIEBACiAJaGFzaC0tOwogCiAJeCA9IHEtPmh0W2hhc2hdOwotCWlmICh4ID09IFNGUV9ERVBUSCkgewotCQlxLT5odFtoYXNoXSA9IHggPSBxLT5kZXBbU0ZRX0RFUFRIXS5uZXh0OwotCQlxLT5oYXNoW3hdID0gaGFzaDsKKwlzbG90ID0gJnEtPnNsb3RzW3hdOworCWlmICh4ID09IFNGUV9FTVBUWV9TTE9UKSB7CisJCXggPSBxLT5kZXBbMF0ubmV4dDsgLyogZ2V0IGEgZnJlZSBzbG90ICovCisJCXEtPmh0W2hhc2hdID0geDsKKwkJc2xvdCA9ICZxLT5zbG90c1t4XTsKKwkJc2xvdC0+aGFzaCA9IGhhc2g7CiAJfQogCi0JLyogSWYgc2VsZWN0ZWQgcXVldWUgaGFzIGxlbmd0aCBxLT5saW1pdCwgdGhpcyBtZWFucyB0aGF0Ci0JICogYWxsIGFub3RoZXIgcXVldWVzIGFyZSBlbXB0eSBhbmQgdGhhdCB3ZSBkbyBzaW1wbGUgdGFpbCBkcm9wLAorCS8qIElmIHNlbGVjdGVkIHF1ZXVlIGhhcyBsZW5ndGggcS0+bGltaXQsIGRvIHNpbXBsZSB0YWlsIGRyb3AsCiAJICogaS5lLiBkcm9wIF90aGlzXyBwYWNrZXQuCiAJICovCi0JaWYgKHEtPnFzW3hdLnFsZW4gPj0gcS0+bGltaXQpCisJaWYgKHNsb3QtPnFsZW4gPj0gcS0+bGltaXQpCiAJCXJldHVybiBxZGlzY19kcm9wKHNrYiwgc2NoKTsKIAogCXNjaC0+cXN0YXRzLmJhY2tsb2cgKz0gcWRpc2NfcGt0X2xlbihza2IpOwotCV9fc2tiX3F1ZXVlX3RhaWwoJnEtPnFzW3hdLCBza2IpOworCXNsb3RfcXVldWVfYWRkKHNsb3QsIHNrYik7CiAJc2ZxX2luYyhxLCB4KTsKLQlpZiAocS0+cXNbeF0ucWxlbiA9PSAxKSB7CQkvKiBUaGUgZmxvdyBpcyBuZXcgKi8KLQkJaWYgKHEtPnRhaWwgPT0gU0ZRX0RFUFRIKSB7CS8qIEl0IGlzIHRoZSBmaXJzdCBmbG93ICovCi0JCQlxLT5uZXh0W3hdID0geDsKKwlpZiAoc2xvdC0+cWxlbiA9PSAxKSB7CQkvKiBUaGUgZmxvdyBpcyBuZXcgKi8KKwkJaWYgKHEtPnRhaWwgPT0gTlVMTCkgewkvKiBJdCBpcyB0aGUgZmlyc3QgZmxvdyAqLworCQkJc2xvdC0+bmV4dCA9IHg7CiAJCX0gZWxzZSB7Ci0JCQlxLT5uZXh0W3hdID0gcS0+bmV4dFtxLT50YWlsXTsKLQkJCXEtPm5leHRbcS0+dGFpbF0gPSB4OworCQkJc2xvdC0+bmV4dCA9IHEtPnRhaWwtPm5leHQ7CisJCQlxLT50YWlsLT5uZXh0ID0geDsKIAkJfQotCQlxLT50YWlsID0geDsKLQkJcS0+YWxsb3RbeF0gPSBxLT5xdWFudHVtOworCQlxLT50YWlsID0gc2xvdDsKKwkJc2xvdC0+YWxsb3QgPSBxLT5zY2FsZWRfcXVhbnR1bTsKIAl9CiAJaWYgKCsrc2NoLT5xLnFsZW4gPD0gcS0+bGltaXQpIHsKIAkJc2NoLT5ic3RhdHMuYnl0ZXMgKz0gcWRpc2NfcGt0X2xlbihza2IpOwpAQCAtMzQyLDE0ICs0MTYsMTIgQEAKIHNmcV9wZWVrKHN0cnVjdCBRZGlzYyAqc2NoKQogewogCXN0cnVjdCBzZnFfc2NoZWRfZGF0YSAqcSA9IHFkaXNjX3ByaXYoc2NoKTsKLQlzZnFfaW5kZXggYTsKIAogCS8qIE5vIGFjdGl2ZSBzbG90cyAqLwotCWlmIChxLT50YWlsID09IFNGUV9ERVBUSCkKKwlpZiAocS0+dGFpbCA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKIAotCWEgPSBxLT5uZXh0W3EtPnRhaWxdOwotCXJldHVybiBza2JfcGVlaygmcS0+cXNbYV0pOworCXJldHVybiBxLT5zbG90c1txLT50YWlsLT5uZXh0XS5za2JsaXN0X25leHQ7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqCkBAIC0zNTgsMzEgKzQzMCwzNiBAQAogCXN0cnVjdCBzZnFfc2NoZWRfZGF0YSAqcSA9IHFkaXNjX3ByaXYoc2NoKTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXNmcV9pbmRleCBhLCBuZXh0X2E7CisJc3RydWN0IHNmcV9zbG90ICpzbG90OwogCiAJLyogTm8gYWN0aXZlIHNsb3RzICovCi0JaWYgKHEtPnRhaWwgPT0gU0ZRX0RFUFRIKQorCWlmIChxLT50YWlsID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwogCi0JYSA9IHEtPm5leHRbcS0+dGFpbF07Ci0KLQkvKiBHcmFiIHBhY2tldCAqLwotCXNrYiA9IF9fc2tiX2RlcXVldWUoJnEtPnFzW2FdKTsKK25leHRfc2xvdDoKKwlhID0gcS0+dGFpbC0+bmV4dDsKKwlzbG90ID0gJnEtPnNsb3RzW2FdOworCWlmIChzbG90LT5hbGxvdCA8PSAwKSB7CisJCXEtPnRhaWwgPSBzbG90OworCQlzbG90LT5hbGxvdCArPSBxLT5zY2FsZWRfcXVhbnR1bTsKKwkJZ290byBuZXh0X3Nsb3Q7CisJfQorCXNrYiA9IHNsb3RfZGVxdWV1ZV9oZWFkKHNsb3QpOwogCXNmcV9kZWMocSwgYSk7CiAJc2NoLT5xLnFsZW4tLTsKIAlzY2gtPnFzdGF0cy5iYWNrbG9nIC09IHFkaXNjX3BrdF9sZW4oc2tiKTsKIAogCS8qIElzIHRoZSBzbG90IGVtcHR5PyAqLwotCWlmIChxLT5xc1thXS5xbGVuID09IDApIHsKLQkJcS0+aHRbcS0+aGFzaFthXV0gPSBTRlFfREVQVEg7Ci0JCW5leHRfYSA9IHEtPm5leHRbYV07CisJaWYgKHNsb3QtPnFsZW4gPT0gMCkgeworCQlxLT5odFtzbG90LT5oYXNoXSA9IFNGUV9FTVBUWV9TTE9UOworCQluZXh0X2EgPSBzbG90LT5uZXh0OwogCQlpZiAoYSA9PSBuZXh0X2EpIHsKLQkJCXEtPnRhaWwgPSBTRlFfREVQVEg7CisJCQlxLT50YWlsID0gTlVMTDsgLyogbm8gbW9yZSBhY3RpdmUgc2xvdHMgKi8KIAkJCXJldHVybiBza2I7CiAJCX0KLQkJcS0+bmV4dFtxLT50YWlsXSA9IG5leHRfYTsKLQl9IGVsc2UgaWYgKChxLT5hbGxvdFthXSAtPSBxZGlzY19wa3RfbGVuKHNrYikpIDw9IDApIHsKLQkJcS0+YWxsb3RbYV0gKz0gcS0+cXVhbnR1bTsKLQkJcS0+dGFpbCA9IGE7CisJCXEtPnRhaWwtPm5leHQgPSBuZXh0X2E7CisJfSBlbHNlIHsKKwkJc2xvdC0+YWxsb3QgLT0gU0ZRX0FMTE9UX1NJWkUocWRpc2NfcGt0X2xlbihza2IpKTsKIAl9CiAJcmV0dXJuIHNrYjsKIH0KQEAgLTQxOCw2ICs0OTUsNyBAQAogCiAJc2NoX3RyZWVfbG9jayhzY2gpOwogCXEtPnF1YW50dW0gPSBjdGwtPnF1YW50dW0gPyA6IHBzY2hlZF9tdHUocWRpc2NfZGV2KHNjaCkpOworCXEtPnNjYWxlZF9xdWFudHVtID0gU0ZRX0FMTE9UX1NJWkUocS0+cXVhbnR1bSk7CiAJcS0+cGVydHVyYl9wZXJpb2QgPSBjdGwtPnBlcnR1cmJfcGVyaW9kICogSFo7CiAJaWYgKGN0bC0+bGltaXQpCiAJCXEtPmxpbWl0ID0gbWluX3QodTMyLCBjdGwtPmxpbWl0LCBTRlFfREVQVEggLSAxKTsKQEAgLTQ0NiwxOSArNTI0LDE5IEBACiAJaW5pdF90aW1lcl9kZWZlcnJhYmxlKCZxLT5wZXJ0dXJiX3RpbWVyKTsKIAogCWZvciAoaSA9IDA7IGkgPCBTRlFfSEFTSF9ESVZJU09SOyBpKyspCi0JCXEtPmh0W2ldID0gU0ZRX0RFUFRIOworCQlxLT5odFtpXSA9IFNGUV9FTVBUWV9TTE9UOwogCiAJZm9yIChpID0gMDsgaSA8IFNGUV9ERVBUSDsgaSsrKSB7Ci0JCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnEtPnFzW2ldKTsKLQkJcS0+ZGVwW2kgKyBTRlFfREVQVEhdLm5leHQgPSBpICsgU0ZRX0RFUFRIOwotCQlxLT5kZXBbaSArIFNGUV9ERVBUSF0ucHJldiA9IGkgKyBTRlFfREVQVEg7CisJCXEtPmRlcFtpXS5uZXh0ID0gaSArIFNGUV9TTE9UUzsKKwkJcS0+ZGVwW2ldLnByZXYgPSBpICsgU0ZRX1NMT1RTOwogCX0KIAogCXEtPmxpbWl0ID0gU0ZRX0RFUFRIIC0gMTsKLQlxLT5tYXhfZGVwdGggPSAwOwotCXEtPnRhaWwgPSBTRlFfREVQVEg7CisJcS0+Y3VyX2RlcHRoID0gMDsKKwlxLT50YWlsID0gTlVMTDsKIAlpZiAob3B0ID09IE5VTEwpIHsKIAkJcS0+cXVhbnR1bSA9IHBzY2hlZF9tdHUocWRpc2NfZGV2KHNjaCkpOworCQlxLT5zY2FsZWRfcXVhbnR1bSA9IFNGUV9BTExPVF9TSVpFKHEtPnF1YW50dW0pOwogCQlxLT5wZXJ0dXJiX3BlcmlvZCA9IDA7CiAJCXEtPnBlcnR1cmJhdGlvbiA9IG5ldF9yYW5kb20oKTsKIAl9IGVsc2UgewpAQCAtNDY3LDggKzU0NSwxMCBAQAogCQkJcmV0dXJuIGVycjsKIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgU0ZRX0RFUFRIOyBpKyspCisJZm9yIChpID0gMDsgaSA8IFNGUV9TTE9UUzsgaSsrKSB7CisJCXNsb3RfcXVldWVfaW5pdCgmcS0+c2xvdHNbaV0pOwogCQlzZnFfbGluayhxLCBpKTsKKwl9CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTU0MywxMCArNjIzLDE5IEBACiAJCQkJc3RydWN0IGduZXRfZHVtcCAqZCkKIHsKIAlzdHJ1Y3Qgc2ZxX3NjaGVkX2RhdGEgKnEgPSBxZGlzY19wcml2KHNjaCk7Ci0Jc2ZxX2luZGV4IGlkeCA9IHEtPmh0W2NsLTFdOwotCXN0cnVjdCBnbmV0X3N0YXRzX3F1ZXVlIHFzID0geyAucWxlbiA9IHEtPnFzW2lkeF0ucWxlbiB9OwotCXN0cnVjdCB0Y19zZnFfeHN0YXRzIHhzdGF0cyA9IHsgLmFsbG90ID0gcS0+YWxsb3RbaWR4XSB9OworCXNmcV9pbmRleCBpZHggPSBxLT5odFtjbCAtIDFdOworCXN0cnVjdCBnbmV0X3N0YXRzX3F1ZXVlIHFzID0geyAwIH07CisJc3RydWN0IHRjX3NmcV94c3RhdHMgeHN0YXRzID0geyAwIH07CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAorCWlmIChpZHggIT0gU0ZRX0VNUFRZX1NMT1QpIHsKKwkJY29uc3Qgc3RydWN0IHNmcV9zbG90ICpzbG90ID0gJnEtPnNsb3RzW2lkeF07CisKKwkJeHN0YXRzLmFsbG90ID0gc2xvdC0+YWxsb3QgPDwgU0ZRX0FMTE9UX1NISUZUOworCQlxcy5xbGVuID0gc2xvdC0+cWxlbjsKKwkJc2xvdF9xdWV1ZV93YWxrKHNsb3QsIHNrYikKKwkJCXFzLmJhY2tsb2cgKz0gcWRpc2NfcGt0X2xlbihza2IpOworCX0KIAlpZiAoZ25ldF9zdGF0c19jb3B5X3F1ZXVlKGQsICZxcykgPCAwKQogCQlyZXR1cm4gLTE7CiAJcmV0dXJuIGduZXRfc3RhdHNfY29weV9hcHAoZCwgJnhzdGF0cywgc2l6ZW9mKHhzdGF0cykpOwpAQCAtNTYxLDcgKzY1MCw3IEBACiAJCXJldHVybjsKIAogCWZvciAoaSA9IDA7IGkgPCBTRlFfSEFTSF9ESVZJU09SOyBpKyspIHsKLQkJaWYgKHEtPmh0W2ldID09IFNGUV9ERVBUSCB8fAorCQlpZiAocS0+aHRbaV0gPT0gU0ZRX0VNUFRZX1NMT1QgfHwKIAkJICAgIGFyZy0+Y291bnQgPCBhcmctPnNraXApIHsKIAkJCWFyZy0+Y291bnQrKzsKIAkJCWNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF90ZXFsLmMgYi9uZXQvc2NoZWQvc2NoX3RlcWwuYwppbmRleCA0MDFhZjk1Li4xMDY0NzlhIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX3RlcWwuYworKysgYi9uZXQvc2NoZWQvc2NoX3RlcWwuYwpAQCAtMzA5LDggKzMwOSw3IEBACiAJCQlpZiAoX19uZXRpZl90eF90cnlsb2NrKHNsYXZlX3R4cSkpIHsKIAkJCQl1bnNpZ25lZCBpbnQgbGVuZ3RoID0gcWRpc2NfcGt0X2xlbihza2IpOwogCi0JCQkJaWYgKCFuZXRpZl90eF9xdWV1ZV9zdG9wcGVkKHNsYXZlX3R4cSkgJiYKLQkJCQkgICAgIW5ldGlmX3R4X3F1ZXVlX2Zyb3plbihzbGF2ZV90eHEpICYmCisJCQkJaWYgKCFuZXRpZl90eF9xdWV1ZV9mcm96ZW5fb3Jfc3RvcHBlZChzbGF2ZV90eHEpICYmCiAJCQkJICAgIHNsYXZlX29wcy0+bmRvX3N0YXJ0X3htaXQoc2tiLCBzbGF2ZSkgPT0gTkVUREVWX1RYX09LKSB7CiAJCQkJCXR4cV90cmFuc191cGRhdGUoc2xhdmVfdHhxKTsKIAkJCQkJX19uZXRpZl90eF91bmxvY2soc2xhdmVfdHhxKTsKZGlmZiAtLWdpdCBhL25ldC9zY3RwL3NvY2tldC5jIGIvbmV0L3NjdHAvc29ja2V0LmMKaW5kZXggZmZmMDkyNi4uYTA5YjBkZCAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvc29ja2V0LmMKKysrIGIvbmV0L3NjdHAvc29ja2V0LmMKQEAgLTYwNTUsNyArNjA1NSw3IEBACiAJCSAqIHdpbGwgc3VkZGVubHkgZWF0IHRoZSByZWNlaXZlX3F1ZXVlLgogCQkgKgogCQkgKiAgTG9vayBhdCBjdXJyZW50IG5mcyBjbGllbnQgYnkgdGhlIHdheS4uLgotCQkgKiAgSG93ZXZlciwgdGhpcyBmdW5jdGlvbiB3YXMgY29ycmVudCBpbiBhbnkgY2FzZS4gOCkKKwkJICogIEhvd2V2ZXIsIHRoaXMgZnVuY3Rpb24gd2FzIGNvcnJlY3QgaW4gYW55IGNhc2UuIDgpCiAJCSAqLwogCQlpZiAoZmxhZ3MgJiBNU0dfUEVFSykgewogCQkJc3Bpbl9sb2NrX2JoKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZS5sb2NrKTsKZGlmZiAtLWdpdCBhL25ldC9zb2NrZXQuYyBiL25ldC9zb2NrZXQuYwppbmRleCAwODhmYjNmLi5jY2M1NzZhIDEwMDY0NAotLS0gYS9uZXQvc29ja2V0LmMKKysrIGIvbmV0L3NvY2tldC5jCkBAIC0xNTYsNyArMTU2LDcgQEAKICAqLwogCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG5ldF9mYW1pbHlfbG9jayk7Ci1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9wcm90b19mYW1pbHkgKm5ldF9mYW1pbGllc1tOUFJPVE9dIF9fcmVhZF9tb3N0bHk7CitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9wcm90b19mYW1pbHkgX19yY3UgKm5ldF9mYW1pbGllc1tOUFJPVE9dIF9fcmVhZF9tb3N0bHk7CiAKIC8qCiAgKglTdGF0aXN0aWNzIGNvdW50ZXJzIG9mIHRoZSBzb2NrZXQgbGlzdHMKQEAgLTI2Miw2ICsyNjIsNyBAQAogfQogCiAKKwogc3RhdGljIHZvaWQgd3FfZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKQogewogCXN0cnVjdCBzb2NrZXRfd3EgKndxID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBzb2NrZXRfd3EsIHJjdSk7CkBAIC0zNjAsMTQgKzM2MSwxNCBAQAogCWlmICh1bmxpa2VseShmZCA8IDApKQogCQlyZXR1cm4gZmQ7CiAKLQlwYXRoLmRlbnRyeSA9IGRfYWxsb2Moc29ja19tbnQtPm1udF9zYi0+c19yb290LCAmbmFtZSk7CisJcGF0aC5kZW50cnkgPSBkX2FsbG9jX3BzZXVkbyhzb2NrX21udC0+bW50X3NiLCAmbmFtZSk7CiAJaWYgKHVubGlrZWx5KCFwYXRoLmRlbnRyeSkpIHsKIAkJcHV0X3VudXNlZF9mZChmZCk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAlwYXRoLm1udCA9IG1udGdldChzb2NrX21udCk7CiAKLQlwYXRoLmRlbnRyeS0+ZF9vcCA9ICZzb2NrZnNfZGVudHJ5X29wZXJhdGlvbnM7CisJZF9zZXRfZF9vcChwYXRoLmRlbnRyeSwgJnNvY2tmc19kZW50cnlfb3BlcmF0aW9ucyk7CiAJZF9pbnN0YW50aWF0ZShwYXRoLmRlbnRyeSwgU09DS19JTk9ERShzb2NrKSk7CiAJU09DS19JTk9ERShzb2NrKS0+aV9mb3AgPSAmc29ja2V0X2ZpbGVfb3BzOwogCkBAIC0xMjE1LDcgKzEyMTYsNyBAQAogCSAqIHJlcXVlc3RlZCByZWFsLCBmdWxsLWZlYXR1cmVkIG5ldHdvcmtpbmcgc3VwcG9ydCB1cG9uIGNvbmZpZ3VyYXRpb24uCiAJICogT3RoZXJ3aXNlIG1vZHVsZSBzdXBwb3J0IHdpbGwgYnJlYWshCiAJICovCi0JaWYgKG5ldF9mYW1pbGllc1tmYW1pbHldID09IE5VTEwpCisJaWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihuZXRfZmFtaWxpZXNbZmFtaWx5XSkgPT0gTlVMTCkKIAkJcmVxdWVzdF9tb2R1bGUoIm5ldC1wZi0lZCIsIGZhbWlseSk7CiAjZW5kaWYKIApAQCAtMjM0NywxMCArMjM0OCwxMSBAQAogCX0KIAogCXNwaW5fbG9jaygmbmV0X2ZhbWlseV9sb2NrKTsKLQlpZiAobmV0X2ZhbWlsaWVzW29wcy0+ZmFtaWx5XSkKKwlpZiAocmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChuZXRfZmFtaWxpZXNbb3BzLT5mYW1pbHldLAorCQkJCSAgICAgIGxvY2tkZXBfaXNfaGVsZCgmbmV0X2ZhbWlseV9sb2NrKSkpCiAJCWVyciA9IC1FRVhJU1Q7CiAJZWxzZSB7Ci0JCW5ldF9mYW1pbGllc1tvcHMtPmZhbWlseV0gPSBvcHM7CisJCXJjdV9hc3NpZ25fcG9pbnRlcihuZXRfZmFtaWxpZXNbb3BzLT5mYW1pbHldLCBvcHMpOwogCQllcnIgPSAwOwogCX0KIAlzcGluX3VubG9jaygmbmV0X2ZhbWlseV9sb2NrKTsKQEAgLTIzNzgsNyArMjM4MCw3IEBACiAJQlVHX09OKGZhbWlseSA8IDAgfHwgZmFtaWx5ID49IE5QUk9UTyk7CiAKIAlzcGluX2xvY2soJm5ldF9mYW1pbHlfbG9jayk7Ci0JbmV0X2ZhbWlsaWVzW2ZhbWlseV0gPSBOVUxMOworCXJjdV9hc3NpZ25fcG9pbnRlcihuZXRfZmFtaWxpZXNbZmFtaWx5XSwgTlVMTCk7CiAJc3Bpbl91bmxvY2soJm5ldF9mYW1pbHlfbG9jayk7CiAKIAlzeW5jaHJvbml6ZV9yY3UoKTsKQEAgLTIzODksNiArMjM5MSw4IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHNvY2tfaW5pdCh2b2lkKQogeworCWludCBlcnI7CisKIAkvKgogCSAqICAgICAgSW5pdGlhbGl6ZSBzb2NrIFNMQUIgY2FjaGUuCiAJICovCkBAIC0yNDA1LDggKzI0MDksMTUgQEAKIAkgKi8KIAogCWluaXRfaW5vZGVjYWNoZSgpOwotCXJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJnNvY2tfZnNfdHlwZSk7CisKKwllcnIgPSByZWdpc3Rlcl9maWxlc3lzdGVtKCZzb2NrX2ZzX3R5cGUpOworCWlmIChlcnIpCisJCWdvdG8gb3V0X2ZzOwogCXNvY2tfbW50ID0ga2Vybl9tb3VudCgmc29ja19mc190eXBlKTsKKwlpZiAoSVNfRVJSKHNvY2tfbW50KSkgeworCQllcnIgPSBQVFJfRVJSKHNvY2tfbW50KTsKKwkJZ290byBvdXRfbW91bnQ7CisJfQogCiAJLyogVGhlIHJlYWwgcHJvdG9jb2wgaW5pdGlhbGl6YXRpb24gaXMgcGVyZm9ybWVkIGluIGxhdGVyIGluaXRjYWxscy4KIAkgKi8KQEAgLTI0MTksNyArMjQzMCwxMyBAQAogCXNrYl90aW1lc3RhbXBpbmdfaW5pdCgpOwogI2VuZGlmCiAKLQlyZXR1cm4gMDsKK291dDoKKwlyZXR1cm4gZXJyOworCitvdXRfbW91bnQ6CisJdW5yZWdpc3Rlcl9maWxlc3lzdGVtKCZzb2NrX2ZzX3R5cGUpOworb3V0X2ZzOgorCWdvdG8gb3V0OwogfQogCiBjb3JlX2luaXRjYWxsKHNvY2tfaW5pdCk7CS8qIGVhcmx5IGluaXRjYWxsICovCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL2F1dGhfZ3NzL01ha2VmaWxlIGIvbmV0L3N1bnJwYy9hdXRoX2dzcy9NYWtlZmlsZQppbmRleCA3MzUwZDg2Li45ZTRjYjU5IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL2F1dGhfZ3NzL01ha2VmaWxlCisrKyBiL25ldC9zdW5ycGMvYXV0aF9nc3MvTWFrZWZpbGUKQEAgLTQsMTAgKzQsMTAgQEAKIAogb2JqLSQoQ09ORklHX1NVTlJQQ19HU1MpICs9IGF1dGhfcnBjZ3NzLm8KIAotYXV0aF9ycGNnc3Mtb2JqcyA6PSBhdXRoX2dzcy5vIGdzc19nZW5lcmljX3Rva2VuLm8gXAorYXV0aF9ycGNnc3MteSA6PSBhdXRoX2dzcy5vIGdzc19nZW5lcmljX3Rva2VuLm8gXAogCWdzc19tZWNoX3N3aXRjaC5vIHN2Y2F1dGhfZ3NzLm8KIAogb2JqLSQoQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSkgKz0gcnBjc2VjX2dzc19rcmI1Lm8KIAotcnBjc2VjX2dzc19rcmI1LW9ianMgOj0gZ3NzX2tyYjVfbWVjaC5vIGdzc19rcmI1X3NlYWwubyBnc3Nfa3JiNV91bnNlYWwubyBcCitycGNzZWNfZ3NzX2tyYjUteSA6PSBnc3Nfa3JiNV9tZWNoLm8gZ3NzX2tyYjVfc2VhbC5vIGdzc19rcmI1X3Vuc2VhbC5vIFwKIAlnc3Nfa3JiNV9zZXFudW0ubyBnc3Nfa3JiNV93cmFwLm8gZ3NzX2tyYjVfY3J5cHRvLm8gZ3NzX2tyYjVfa2V5cy5vCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3JwY19waXBlLmMgYi9uZXQvc3VucnBjL3JwY19waXBlLmMKaW5kZXggMTBhMTdhMy4uMDlmMDFmNCAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9ycGNfcGlwZS5jCisrKyBiL25ldC9zdW5ycGMvcnBjX3BpcGUuYwpAQCAtMTYyLDkgKzE2MiwxNyBAQAogfQogCiBzdGF0aWMgdm9pZAorcnBjX2lfY2FsbGJhY2soc3RydWN0IHJjdV9oZWFkICpoZWFkKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGlub2RlLCBpX3JjdSk7CisJSU5JVF9MSVNUX0hFQUQoJmlub2RlLT5pX2RlbnRyeSk7CisJa21lbV9jYWNoZV9mcmVlKHJwY19pbm9kZV9jYWNoZXAsIFJQQ19JKGlub2RlKSk7Cit9CisKK3N0YXRpYyB2b2lkCiBycGNfZGVzdHJveV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewotCWttZW1fY2FjaGVfZnJlZShycGNfaW5vZGVfY2FjaGVwLCBSUENfSShpbm9kZSkpOworCWNhbGxfcmN1KCZpbm9kZS0+aV9yY3UsIHJwY19pX2NhbGxiYWNrKTsKIH0KIAogc3RhdGljIGludApAQCAtNDMwLDcgKzQzOCw3IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChycGNfcHV0X21vdW50KTsKIAotc3RhdGljIGludCBycGNfZGVsZXRlX2RlbnRyeShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCitzdGF0aWMgaW50IHJwY19kZWxldGVfZGVudHJ5KGNvbnN0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIHsKIAlyZXR1cm4gMTsKIH0KQEAgLTU4Myw3ICs1OTEsNyBAQAogCQl9CiAJfQogCWlmICghZGVudHJ5LT5kX2lub2RlKQotCQlkZW50cnktPmRfb3AgPSAmcnBjX2RlbnRyeV9vcGVyYXRpb25zOworCQlkX3NldF9kX29wKGRlbnRyeSwgJnJwY19kZW50cnlfb3BlcmF0aW9ucyk7CiBvdXRfZXJyOgogCXJldHVybiBkZW50cnk7CiB9CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3hwcnRzb2NrLmMgYi9uZXQvc3VucnBjL3hwcnRzb2NrLmMKaW5kZXggZGZjYWI1YS4uOTY1NDlkZiAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy94cHJ0c29jay5jCisrKyBiL25ldC9zdW5ycGMveHBydHNvY2suYwpAQCAtNzcwLDcgKzc3MCw3IEBACiAKIAlkcHJpbnRrKCJSUEM6ICAgICAgIHhzX2Rlc3Ryb3kgeHBydCAlcFxuIiwgeHBydCk7CiAKLQljYW5jZWxfcmVhcm1pbmdfZGVsYXllZF93b3JrKCZ0cmFuc3BvcnQtPmNvbm5lY3Rfd29ya2VyKTsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnRyYW5zcG9ydC0+Y29ubmVjdF93b3JrZXIpOwogCiAJeHNfY2xvc2UoeHBydCk7CiAJeHNfZnJlZV9wZWVyX2FkZHJlc3Nlcyh4cHJ0KTsKZGlmZiAtLWdpdCBhL25ldC90aXBjL0tjb25maWcgYi9uZXQvdGlwYy9LY29uZmlnCmluZGV4IGI3NGY3OGQuLjA0MzY5MjcgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL0tjb25maWcKKysrIGIvbmV0L3RpcGMvS2NvbmZpZwpAQCAtMjksMjggKzI5LDYgQEAKIAkgIFNheWluZyBZIGhlcmUgd2lsbCBvcGVuIHNvbWUgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBmb3IgVElQQy4KIAkgIE1vc3QgdXNlcnMgZG8gbm90IG5lZWQgdG8gYm90aGVyOyBpZiB1bnN1cmUsIGp1c3Qgc2F5IE4uCiAKLWNvbmZpZyBUSVBDX1pPTkVTCi0JaW50ICJNYXhpbXVtIG51bWJlciBvZiB6b25lcyBpbiBhIG5ldHdvcmsiCi0JZGVwZW5kcyBvbiBUSVBDX0FEVkFOQ0VECi0JcmFuZ2UgMSAyNTUKLQlkZWZhdWx0ICIzIgotCWhlbHAKLQkgIFNwZWNpZmllcyBob3cgbWFueSB6b25lcyBjYW4gYmUgc3VwcG9ydGVkIGluIGEgVElQQyBuZXR3b3JrLgotCSAgQ2FuIHJhbmdlIGZyb20gMSB0byAyNTUgem9uZXM7IGRlZmF1bHQgaXMgMy4KLQotCSAgU2V0dGluZyB0aGlzIHRvIGEgc21hbGxlciB2YWx1ZSBzYXZlcyBzb21lIG1lbW9yeTsKLQkgIHNldHRpbmcgaXQgdG8gYSBoaWdoZXIgdmFsdWUgYWxsb3dzIGZvciBtb3JlIHpvbmVzLgotCi1jb25maWcgVElQQ19DTFVTVEVSUwotCWludCAiTWF4aW11bSBudW1iZXIgb2YgY2x1c3RlcnMgaW4gYSB6b25lIgotCWRlcGVuZHMgb24gVElQQ19BRFZBTkNFRAotCXJhbmdlIDEgMQotCWRlZmF1bHQgIjEiCi0JaGVscAotCSAgU3BlY2lmaWVzIGhvdyBtYW55IGNsdXN0ZXJzIGNhbiBiZSBzdXBwb3J0ZWQgaW4gYSBUSVBDIHpvbmUuCi0KLQkgICoqKiBDdXJyZW50bHkgVElQQyBvbmx5IHN1cHBvcnRzIGEgc2luZ2xlIGNsdXN0ZXIgcGVyIHpvbmUuICoqKgotCiBjb25maWcgVElQQ19OT0RFUwogCWludCAiTWF4aW11bSBudW1iZXIgb2Ygbm9kZXMgaW4gYSBjbHVzdGVyIgogCWRlcGVuZHMgb24gVElQQ19BRFZBTkNFRApAQCAtNzIsNyArNTAsNyBAQAogCSAgU3BlY2lmaWVzIGhvdyBtYW55IHBvcnRzIGNhbiBiZSBzdXBwb3J0ZWQgYnkgYSBub2RlLgogCSAgQ2FuIHJhbmdlIGZyb20gMTI3IHRvIDY1NTM1IHBvcnRzOyBkZWZhdWx0IGlzIDgxOTEuCiAKLQkgIFNldHRpbmcgdGhpcyB0byBhIHNtYWxsZXIgdmFsdWUgc2F2ZXMgc29tZSBtZW1vcnksIAorCSAgU2V0dGluZyB0aGlzIHRvIGEgc21hbGxlciB2YWx1ZSBzYXZlcyBzb21lIG1lbW9yeSwKIAkgIHNldHRpbmcgaXQgdG8gaGlnaGVyIGFsbG93cyBmb3IgbW9yZSBwb3J0cy4KIAogY29uZmlnIFRJUENfTE9HCkBAIC04OSwxMiArNjcsMTUgQEAKIAkgIG1hbmFnZWQgcmVtb3RlbHkgdmlhIFRJUEMuCiAKIGNvbmZpZyBUSVBDX0RFQlVHCi0JYm9vbCAiRW5hYmxlIGRlYnVnIG1lc3NhZ2VzIgorCWJvb2wgIkVuYWJsZSBkZWJ1Z2dpbmcgc3VwcG9ydCIKIAlkZWZhdWx0IG4KIAloZWxwCi0JICBUaGlzIGVuYWJsZXMgZGVidWdnaW5nIG9mIFRJUEMuCisJICBTYXlpbmcgWSBoZXJlIGVuYWJsZXMgVElQQyBkZWJ1Z2dpbmcgY2FwYWJpbGl0aWVzIHVzZWQgYnkgZGV2ZWxvcGVycy4KKwkgIE1vc3QgdXNlcnMgZG8gbm90IG5lZWQgdG8gYm90aGVyOyBpZiB1bnN1cmUsIGp1c3Qgc2F5IE4uCiAKLQkgIE9ubHkgc2F5IFkgaGVyZSBpZiB5b3UgYXJlIGhhdmluZyB0cm91YmxlIHdpdGggVElQQy4gIEl0IHdpbGwKLQkgIGVuYWJsZSB0aGUgZGlzcGxheSBvZiBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IGlzIGdvaW5nIG9uLgorCSAgRW5hYmxpbmcgZGVidWdnaW5nIHN1cHBvcnQgY2F1c2VzIFRJUEMgdG8gZGlzcGxheSBkYXRhIGFib3V0IGl0cworCSAgaW50ZXJuYWwgc3RhdGUgd2hlbiBjZXJ0YWluIGFibm9ybWFsIGNvbmRpdGlvbnMgb2NjdXIuIEl0IGFsc28KKwkgIG1ha2VzIGl0IGVhc3kgZm9yIGRldmVsb3BlcnMgdG8gY2FwdHVyZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9mCisJICBpbnRlcmVzdCB1c2luZyB0aGUgZGJnKCkgb3IgbXNnX2RiZygpIG1hY3Jvcy4KIAogZW5kaWYgIyBUSVBDCmRpZmYgLS1naXQgYS9uZXQvdGlwYy9NYWtlZmlsZSBiL25ldC90aXBjL01ha2VmaWxlCmluZGV4IGRjZWI3MDIuLjUyMWQyNGQgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL01ha2VmaWxlCisrKyBiL25ldC90aXBjL01ha2VmaWxlCkBAIC00LDEwICs0LDEwIEBACiAKIG9iai0kKENPTkZJR19USVBDKSA6PSB0aXBjLm8KIAotdGlwYy15CSs9IGFkZHIubyBiY2FzdC5vIGJlYXJlci5vIGNvbmZpZy5vIGNsdXN0ZXIubyBcCit0aXBjLXkJKz0gYWRkci5vIGJjYXN0Lm8gYmVhcmVyLm8gY29uZmlnLm8gXAogCSAgIGNvcmUubyBoYW5kbGVyLm8gbGluay5vIGRpc2NvdmVyLm8gbXNnLm8gIFwKIAkgICBuYW1lX2Rpc3RyLm8gIHN1YnNjci5vIG5hbWVfdGFibGUubyBuZXQubyAgXAogCSAgIG5ldGxpbmsubyBub2RlLm8gbm9kZV9zdWJzY3IubyBwb3J0Lm8gcmVmLm8gIFwKLQkgICBzb2NrZXQubyB1c2VyX3JlZy5vIHpvbmUubyBkYmcubyBldGhfbWVkaWEubworCSAgIHNvY2tldC5vIGxvZy5vIGV0aF9tZWRpYS5vCiAKICMgRW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL25ldC90aXBjL2FkZHIuYyBiL25ldC90aXBjL2FkZHIuYwppbmRleCA4YTJlODliLi44ODQ2M2Q5IDEwMDY0NAotLS0gYS9uZXQvdGlwYy9hZGRyLmMKKysrIGIvbmV0L3RpcGMvYWRkci5jCkBAIC0zNSwxMSArMzUsNyBAQAogICovCiAKICNpbmNsdWRlICJjb3JlLmgiCi0jaW5jbHVkZSAiZGJnLmgiCiAjaW5jbHVkZSAiYWRkci5oIgotI2luY2x1ZGUgInpvbmUuaCIKLSNpbmNsdWRlICJjbHVzdGVyLmgiCi0jaW5jbHVkZSAibmV0LmgiCiAKIC8qKgogICogdGlwY19hZGRyX2RvbWFpbl92YWxpZCAtIHZhbGlkYXRlcyBhIG5ldHdvcmsgZG9tYWluIGFkZHJlc3MKQEAgLTU3LDE0ICs1Myw4IEBACiAJdTMyIHogPSB0aXBjX3pvbmUoYWRkcik7CiAJdTMyIG1heF9ub2RlcyA9IHRpcGNfbWF4X25vZGVzOwogCi0JaWYgKGlzX3NsYXZlKGFkZHIpKQotCQltYXhfbm9kZXMgPSBMT1dFU1RfU0xBVkUgKyB0aXBjX21heF9zbGF2ZXM7CiAJaWYgKG4gPiBtYXhfbm9kZXMpCiAJCXJldHVybiAwOwotCWlmIChjID4gdGlwY19tYXhfY2x1c3RlcnMpCi0JCXJldHVybiAwOwotCWlmICh6ID4gdGlwY19tYXhfem9uZXMpCi0JCXJldHVybiAwOwogCiAJaWYgKG4gJiYgKCF6IHx8ICFjKSkKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9uZXQvdGlwYy9hZGRyLmggYi9uZXQvdGlwYy9hZGRyLmgKaW5kZXggYzFjYzU3Mi4uMjQ5MGZhZCAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvYWRkci5oCisrKyBiL25ldC90aXBjL2FkZHIuaApAQCAtMzcsMzYgKzM3LDExIEBACiAjaWZuZGVmIF9USVBDX0FERFJfSAogI2RlZmluZSBfVElQQ19BRERSX0gKIAotc3RhdGljIGlubGluZSB1MzIgb3duX25vZGUodm9pZCkKLXsKLQlyZXR1cm4gdGlwY19ub2RlKHRpcGNfb3duX2FkZHIpOwotfQotCi1zdGF0aWMgaW5saW5lIHUzMiBvd25fY2x1c3Rlcih2b2lkKQotewotCXJldHVybiB0aXBjX2NsdXN0ZXIodGlwY19vd25fYWRkcik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTMyIG93bl96b25lKHZvaWQpCi17Ci0JcmV0dXJuIHRpcGNfem9uZSh0aXBjX293bl9hZGRyKTsKLX0KLQogc3RhdGljIGlubGluZSBpbnQgaW5fb3duX2NsdXN0ZXIodTMyIGFkZHIpCiB7CiAJcmV0dXJuICEoKGFkZHIgXiB0aXBjX293bl9hZGRyKSA+PiAxMik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGlzX3NsYXZlKHUzMiBhZGRyKQotewotCXJldHVybiBhZGRyICYgMHg4MDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IG1heV9yb3V0ZSh1MzIgYWRkcikKLXsKLQlyZXR1cm4oYWRkciBeIHRpcGNfb3duX2FkZHIpID4+IDExOwotfQotCiAvKioKICAqIGFkZHJfZG9tYWluIC0gY29udmVydCAyLWJpdCBzY29wZSB2YWx1ZSB0byBlcXVpdmFsZW50IG1lc3NhZ2UgbG9va3VwIGRvbWFpbgogICoKZGlmZiAtLWdpdCBhL25ldC90aXBjL2JjYXN0LmMgYi9uZXQvdGlwYy9iY2FzdC5jCmluZGV4IDIyYTYwZmMuLjcwYWI1ZWYgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL2JjYXN0LmMKKysrIGIvbmV0L3RpcGMvYmNhc3QuYwpAQCAtMzYsMjUgKzM2LDE0IEBACiAgKi8KIAogI2luY2x1ZGUgImNvcmUuaCIKLSNpbmNsdWRlICJtc2cuaCIKLSNpbmNsdWRlICJkYmcuaCIKICNpbmNsdWRlICJsaW5rLmgiCi0jaW5jbHVkZSAibmV0LmgiCi0jaW5jbHVkZSAibm9kZS5oIgogI2luY2x1ZGUgInBvcnQuaCIKLSNpbmNsdWRlICJhZGRyLmgiCi0jaW5jbHVkZSAibm9kZV9zdWJzY3IuaCIKLSNpbmNsdWRlICJuYW1lX2Rpc3RyLmgiCi0jaW5jbHVkZSAiYmVhcmVyLmgiCi0jaW5jbHVkZSAibmFtZV90YWJsZS5oIgogI2luY2x1ZGUgImJjYXN0LmgiCiAKICNkZWZpbmUgTUFYX1BLVF9ERUZBVUxUX01DQVNUIDE1MDAJLyogYmNhc3QgbGluayBtYXggcGFja2V0IHNpemUgKGZpeGVkKSAqLwogCiAjZGVmaW5lIEJDTElOS19XSU5fREVGQVVMVCAyMAkJLyogYmNhc3QgbGluayB3aW5kb3cgc2l6ZSAoZGVmYXVsdCkgKi8KIAotI2RlZmluZSBCQ0xJTktfTE9HX0JVRl9TSVpFIDAKLQogLyoKICAqIExvc3MgcmF0ZSBmb3IgaW5jb21pbmcgYnJvYWRjYXN0IGZyYW1lczsgdXNlZCB0byB0ZXN0IHJldHJhbnNtaXNzaW9uIGNvZGUuCiAgKiBTZXQgdG8gTiB0byBjYXVzZSBldmVyeSBOJ3RoIGZyYW1lIHRvIGJlIGRpc2NhcmRlZDsgMCA9PiBkb24ndCBkaXNjYXJkIGFueS4KQEAgLTExNCwxMSArMTAzLDE0IEBACiB9OwogCiAKLXN0YXRpYyBzdHJ1Y3QgYmNiZWFyZXIgKmJjYmVhcmVyID0gTlVMTDsKLXN0YXRpYyBzdHJ1Y3QgYmNsaW5rICpiY2xpbmsgPSBOVUxMOwotc3RhdGljIHN0cnVjdCBsaW5rICpiY2wgPSBOVUxMOworc3RhdGljIHN0cnVjdCBiY2JlYXJlciAqYmNiZWFyZXI7CitzdGF0aWMgc3RydWN0IGJjbGluayAqYmNsaW5rOworc3RhdGljIHN0cnVjdCBsaW5rICpiY2w7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGJjX2xvY2spOwogCisvKiBicm9hZGNhc3QtY2FwYWJsZSBub2RlIG1hcCAqLworc3RydWN0IHRpcGNfbm9kZV9tYXAgdGlwY19iY2FzdF9ubWFwOworCiBjb25zdCBjaGFyIHRpcGNfYmNsaW5rX25hbWVbXSA9ICJicm9hZGNhc3QtbGluayI7CiAKIHN0YXRpYyB2b2lkIHRpcGNfbm1hcF9kaWZmKHN0cnVjdCB0aXBjX25vZGVfbWFwICpubV9hLApAQCAtMjA0LDkgKzE5Niw4IEBACiAJc3RydWN0IHNrX2J1ZmYgKmJ1ZjsKIAogCWJ1ZiA9IGJjbC0+Zmlyc3Rfb3V0OwotCXdoaWxlIChidWYgJiYgbGVzc19lcShidWZfc2Vxbm8oYnVmKSwgYWZ0ZXIpKSB7CisJd2hpbGUgKGJ1ZiAmJiBsZXNzX2VxKGJ1Zl9zZXFubyhidWYpLCBhZnRlcikpCiAJCWJ1ZiA9IGJ1Zi0+bmV4dDsKLQl9CiAJdGlwY19saW5rX3JldHJhbnNtaXQoYmNsLCBidWYsIG1vZCh0byAtIGFmdGVyKSk7CiB9CiAKQEAgLTIzMiw5ICsyMjMsOCBAQAogCS8qIFNraXAgb3ZlciBwYWNrZXRzIHRoYXQgbm9kZSBoYXMgcHJldmlvdXNseSBhY2tub3dsZWRnZWQgKi8KIAogCWNycyA9IGJjbC0+Zmlyc3Rfb3V0OwotCXdoaWxlIChjcnMgJiYgbGVzc19lcShidWZfc2Vxbm8oY3JzKSwgbl9wdHItPmJjbGluay5hY2tlZCkpIHsKKwl3aGlsZSAoY3JzICYmIGxlc3NfZXEoYnVmX3NlcW5vKGNycyksIG5fcHRyLT5iY2xpbmsuYWNrZWQpKQogCQljcnMgPSBjcnMtPm5leHQ7Ci0JfQogCiAJLyogVXBkYXRlIHBhY2tldHMgdGhhdCBub2RlIGlzIG5vdyBhY2tub3dsZWRnaW5nICovCiAKQEAgLTQzMywxNiArNDIzLDE0IEBACiB2b2lkIHRpcGNfYmNsaW5rX3JlY3ZfcGt0KHN0cnVjdCBza19idWZmICpidWYpCiB7CiAjaWYgKFRJUENfQkNBU1RfTE9TU19SQVRFKQotCXN0YXRpYyBpbnQgcnhfY291bnQgPSAwOworCXN0YXRpYyBpbnQgcnhfY291bnQ7CiAjZW5kaWYKIAlzdHJ1Y3QgdGlwY19tc2cgKm1zZyA9IGJ1Zl9tc2coYnVmKTsKLQlzdHJ1Y3QgdGlwY19ub2RlKiBub2RlID0gdGlwY19ub2RlX2ZpbmQobXNnX3ByZXZub2RlKG1zZykpOworCXN0cnVjdCB0aXBjX25vZGUgKm5vZGUgPSB0aXBjX25vZGVfZmluZChtc2dfcHJldm5vZGUobXNnKSk7CiAJdTMyIG5leHRfaW47CiAJdTMyIHNlcW5vOwogCXN0cnVjdCBza19idWZmICpkZWZlcnJlZDsKIAotCW1zZ19kYmcobXNnLCAiPEJDPDw8Iik7Ci0KIAlpZiAodW5saWtlbHkoIW5vZGUgfHwgIXRpcGNfbm9kZV9pc191cChub2RlKSB8fCAhbm9kZS0+YmNsaW5rLnN1cHBvcnRlZCB8fAogCQkgICAgIChtc2dfbWNfbmV0aWQobXNnKSAhPSB0aXBjX25ldF9pZCkpKSB7CiAJCWJ1Zl9kaXNjYXJkKGJ1Zik7CkBAIC00NTAsNyArNDM4LDYgQEAKIAl9CiAKIAlpZiAodW5saWtlbHkobXNnX3VzZXIobXNnKSA9PSBCQ0FTVF9QUk9UT0NPTCkpIHsKLQkJbXNnX2RiZyhtc2csICI8QkNOQUNLPDw8Iik7CiAJCWlmIChtc2dfZGVzdG5vZGUobXNnKSA9PSB0aXBjX293bl9hZGRyKSB7CiAJCQl0aXBjX25vZGVfbG9jayhub2RlKTsKIAkJCXRpcGNfYmNsaW5rX2Fja25vd2xlZGdlKG5vZGUsIG1zZ19iY2FzdF9hY2sobXNnKSk7CkBAIC01NzQsOCArNTYxLDggQEAKIAlpZiAobGlrZWx5KCFtc2dfbm9uX3NlcShidWZfbXNnKGJ1ZikpKSkgewogCQlzdHJ1Y3QgdGlwY19tc2cgKm1zZzsKIAotCQlhc3NlcnQodGlwY19jbHRyX2JjYXN0X25vZGVzLmNvdW50ICE9IDApOwotCQliY2J1Zl9zZXRfYWNrcyhidWYsIHRpcGNfY2x0cl9iY2FzdF9ub2Rlcy5jb3VudCk7CisJCWFzc2VydCh0aXBjX2JjYXN0X25tYXAuY291bnQgIT0gMCk7CisJCWJjYnVmX3NldF9hY2tzKGJ1ZiwgdGlwY19iY2FzdF9ubWFwLmNvdW50KTsKIAkJbXNnID0gYnVmX21zZyhidWYpOwogCQltc2dfc2V0X25vbl9zZXEobXNnLCAxKTsKIAkJbXNnX3NldF9tY19uZXRpZChtc2csIHRpcGNfbmV0X2lkKTsKQEAgLTU4NCw3ICs1NzEsNyBAQAogCiAJLyogU2VuZCBidWZmZXIgb3ZlciBiZWFyZXJzIHVudGlsIGFsbCB0YXJnZXRzIHJlYWNoZWQgKi8KIAotCWJjYmVhcmVyLT5yZW1haW5zID0gdGlwY19jbHRyX2JjYXN0X25vZGVzOworCWJjYmVhcmVyLT5yZW1haW5zID0gdGlwY19iY2FzdF9ubWFwOwogCiAJZm9yIChicF9pbmRleCA9IDA7IGJwX2luZGV4IDwgTUFYX0JFQVJFUlM7IGJwX2luZGV4KyspIHsKIAkJc3RydWN0IGJlYXJlciAqcCA9IGJjYmVhcmVyLT5icGFpcnNbYnBfaW5kZXhdLnByaW1hcnk7CkBAIC03ODIsNyArNzY5LDYgQEAKIAliY2JlYXJlciA9IGt6YWxsb2Moc2l6ZW9mKCpiY2JlYXJlciksIEdGUF9BVE9NSUMpOwogCWJjbGluayA9IGt6YWxsb2Moc2l6ZW9mKCpiY2xpbmspLCBHRlBfQVRPTUlDKTsKIAlpZiAoIWJjYmVhcmVyIHx8ICFiY2xpbmspIHsKLSBub21lbToKIAkJd2FybigiTXVsdGljYXN0IGxpbmsgY3JlYXRpb24gZmFpbGVkLCBubyBtZW1vcnlcbiIpOwogCQlrZnJlZShiY2JlYXJlcik7CiAJCWJjYmVhcmVyID0gTlVMTDsKQEAgLTgwNywxNCArNzkzLDYgQEAKIAliY2wtPnN0YXRlID0gV09SS0lOR19XT1JLSU5HOwogCXN0cmxjcHkoYmNsLT5uYW1lLCB0aXBjX2JjbGlua19uYW1lLCBUSVBDX01BWF9MSU5LX05BTUUpOwogCi0JaWYgKEJDTElOS19MT0dfQlVGX1NJWkUpIHsKLQkJY2hhciAqcGIgPSBrbWFsbG9jKEJDTElOS19MT0dfQlVGX1NJWkUsIEdGUF9BVE9NSUMpOwotCi0JCWlmICghcGIpCi0JCQlnb3RvIG5vbWVtOwotCQl0aXBjX3ByaW50YnVmX2luaXQoJmJjbC0+cHJpbnRfYnVmLCBwYiwgQkNMSU5LX0xPR19CVUZfU0laRSk7Ci0JfQotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTgyMyw4ICs4MDEsNiBAQAogCXNwaW5fbG9ja19iaCgmYmNfbG9jayk7CiAJaWYgKGJjYmVhcmVyKSB7CiAJCXRpcGNfbGlua19zdG9wKGJjbCk7Ci0JCWlmIChCQ0xJTktfTE9HX0JVRl9TSVpFKQotCQkJa2ZyZWUoYmNsLT5wcmludF9idWYuYnVmKTsKIAkJYmNsID0gTlVMTDsKIAkJa2ZyZWUoYmNsaW5rKTsKIAkJYmNsaW5rID0gTlVMTDsKZGlmZiAtLWdpdCBhL25ldC90aXBjL2JjYXN0LmggYi9uZXQvdGlwYy9iY2FzdC5oCmluZGV4IDAxMWMwM2YuLjUxZjhjNTMgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL2JjYXN0LmgKKysrIGIvbmV0L3RpcGMvYmNhc3QuaApAQCAtNTEsNiArNTEsNyBAQAogCXUzMiBtYXBbTUFYX05PREVTIC8gV1NJWkVdOwogfTsKIAorZXh0ZXJuIHN0cnVjdCB0aXBjX25vZGVfbWFwIHRpcGNfYmNhc3Rfbm1hcDsKIAogI2RlZmluZSBQTFNJWkUgMzIKIApkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvYmVhcmVyLmMgYi9uZXQvdGlwYy9iZWFyZXIuYwppbmRleCA5OTI3ZDFkLi44MzdiN2E0IDEwMDY0NAotLS0gYS9uZXQvdGlwYy9iZWFyZXIuYworKysgYi9uZXQvdGlwYy9iZWFyZXIuYwpAQCAtMzYsMTcgKzM2LDEzIEBACiAKICNpbmNsdWRlICJjb3JlLmgiCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiZGJnLmgiCiAjaW5jbHVkZSAiYmVhcmVyLmgiCi0jaW5jbHVkZSAibGluay5oIgotI2luY2x1ZGUgInBvcnQuaCIKICNpbmNsdWRlICJkaXNjb3Zlci5oIgotI2luY2x1ZGUgImJjYXN0LmgiCiAKICNkZWZpbmUgTUFYX0FERFJfU1RSIDMyCiAKIHN0YXRpYyBzdHJ1Y3QgbWVkaWEgbWVkaWFfbGlzdFtNQVhfTUVESUFdOwotc3RhdGljIHUzMiBtZWRpYV9jb3VudCA9IDA7CitzdGF0aWMgdTMyIG1lZGlhX2NvdW50OwogCiBzdHJ1Y3QgYmVhcmVyIHRpcGNfYmVhcmVyc1tNQVhfQkVBUkVSU107CiAKQEAgLTE2Nyw3ICsxNjMsNiBAQAogCW1fcHRyLT5wcmlvcml0eSA9IGJlYXJlcl9wcmlvcml0eTsKIAltX3B0ci0+dG9sZXJhbmNlID0gbGlua190b2xlcmFuY2U7CiAJbV9wdHItPndpbmRvdyA9IHNlbmRfd2luZG93X2xpbWl0OwotCWRiZygiTWVkaWEgPCVzPiByZWdpc3RlcmVkXG4iLCBuYW1lKTsKIAlyZXMgPSAwOwogZXhpdDoKIAl3cml0ZV91bmxvY2tfYmgoJnRpcGNfbmV0X2xvY2spOwpAQCAtMTk5LDkgKzE5NCw4IEBACiAJCXVuY2hhciAqYWRkciA9ICh1bmNoYXIgKikmYS0+ZGV2X2FkZHI7CiAKIAkJdGlwY19wcmludGYocGIsICJVTktOT1dOKCV1KSIsIG1lZGlhX3R5cGUpOwotCQlmb3IgKGkgPSAwOyBpIDwgKHNpemVvZigqYSkgLSBzaXplb2YoYS0+dHlwZSkpOyBpKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IChzaXplb2YoKmEpIC0gc2l6ZW9mKGEtPnR5cGUpKTsgaSsrKQogCQkJdGlwY19wcmludGYocGIsICItJTAyeCIsIGFkZHJbaV0pOwotCQl9CiAJfQogfQogCkBAIC0yNTYsNyArMjUwLDggQEAKIAkvKiBlbnN1cmUgYWxsIGNvbXBvbmVudCBwYXJ0cyBvZiBiZWFyZXIgbmFtZSBhcmUgcHJlc2VudCAqLwogCiAJbWVkaWFfbmFtZSA9IG5hbWVfY29weTsKLQlpZiAoKGlmX25hbWUgPSBzdHJjaHIobWVkaWFfbmFtZSwgJzonKSkgPT0gTlVMTCkKKwlpZl9uYW1lID0gc3RyY2hyKG1lZGlhX25hbWUsICc6Jyk7CisJaWYgKGlmX25hbWUgPT0gTlVMTCkKIAkJcmV0dXJuIDA7CiAJKihpZl9uYW1lKyspID0gMDsKIAltZWRpYV9sZW4gPSBpZl9uYW1lIC0gbWVkaWFfbmFtZTsKQEAgLTYyNSw3ICs2MjAsNyBAQAogICogTm90ZTogVGhpcyByb3V0aW5lIGFzc3VtZXMgY2FsbGVyIGhvbGRzIHRpcGNfbmV0X2xvY2suCiAgKi8KIAotc3RhdGljIGludCBiZWFyZXJfZGlzYWJsZShzdHJ1Y3QgYmVhcmVyICpiX3B0cikKK3N0YXRpYyB2b2lkIGJlYXJlcl9kaXNhYmxlKHN0cnVjdCBiZWFyZXIgKmJfcHRyKQogewogCXN0cnVjdCBsaW5rICpsX3B0cjsKIAlzdHJ1Y3QgbGluayAqdGVtcF9sX3B0cjsKQEAgLTY0MSw3ICs2MzYsNiBAQAogCX0KIAlzcGluX3VubG9ja19iaCgmYl9wdHItPnB1YmwubG9jayk7CiAJbWVtc2V0KGJfcHRyLCAwLCBzaXplb2Yoc3RydWN0IGJlYXJlcikpOwotCXJldHVybiAwOwogfQogCiBpbnQgdGlwY19kaXNhYmxlX2JlYXJlcihjb25zdCBjaGFyICpuYW1lKQpAQCAtNjU0LDggKzY0OCwxMCBAQAogCWlmIChiX3B0ciA9PSBOVUxMKSB7CiAJCXdhcm4oIkF0dGVtcHQgdG8gZGlzYWJsZSB1bmtub3duIGJlYXJlciA8JXM+XG4iLCBuYW1lKTsKIAkJcmVzID0gLUVJTlZBTDsKLQl9IGVsc2UKLQkJcmVzID0gYmVhcmVyX2Rpc2FibGUoYl9wdHIpOworCX0gZWxzZSB7CisJCWJlYXJlcl9kaXNhYmxlKGJfcHRyKTsKKwkJcmVzID0gMDsKKwl9CiAJd3JpdGVfdW5sb2NrX2JoKCZ0aXBjX25ldF9sb2NrKTsKIAlyZXR1cm4gcmVzOwogfQpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvYmVhcmVyLmggYi9uZXQvdGlwYy9iZWFyZXIuaAppbmRleCBhODUwYjM4Li44NWY0NTFkIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9iZWFyZXIuaAorKysgYi9uZXQvdGlwYy9iZWFyZXIuaApAQCAtMzcsMTIgKzM3LDUwIEBACiAjaWZuZGVmIF9USVBDX0JFQVJFUl9ICiAjZGVmaW5lIF9USVBDX0JFQVJFUl9ICiAKLSNpbmNsdWRlICJjb3JlLmgiCiAjaW5jbHVkZSAiYmNhc3QuaCIKIAogI2RlZmluZSBNQVhfQkVBUkVSUyA4CiAjZGVmaW5lIE1BWF9NRURJQSA0CiAKKy8qCisgKiBJZGVudGlmaWVycyBvZiBzdXBwb3J0ZWQgVElQQyBtZWRpYSB0eXBlcworICovCisjZGVmaW5lIFRJUENfTUVESUFfVFlQRV9FVEgJMQorCisvKgorICogRGVzdGluYXRpb24gYWRkcmVzcyBzdHJ1Y3R1cmUgdXNlZCBieSBUSVBDIGJlYXJlcnMgd2hlbiBzZW5kaW5nIG1lc3NhZ2VzCisgKgorICogSU1QT1JUQU5UOiBUaGUgZmllbGRzIG9mIHRoaXMgc3RydWN0dXJlIE1VU1QgYmUgc3RvcmVkIHVzaW5nIHRoZSBzcGVjaWZpZWQKKyAqIGJ5dGUgb3JkZXIgaW5kaWNhdGVkIGJlbG93LCBhcyB0aGUgc3RydWN0dXJlIGlzIGV4Y2hhbmdlZCBiZXR3ZWVuIG5vZGVzCisgKiBhcyBwYXJ0IG9mIGEgbGluayBzZXR1cCBwcm9jZXNzLgorICovCitzdHJ1Y3QgdGlwY19tZWRpYV9hZGRyIHsKKwlfX2JlMzIgIHR5cGU7CQkJLyogYmVhcmVyIHR5cGUgKG5ldHdvcmsgYnl0ZSBvcmRlcikgKi8KKwl1bmlvbiB7CisJCV9fdTggICBldGhfYWRkcls2XTsJLyogNDggYml0IEV0aGVybmV0IGFkZHIgKGJ5dGUgYXJyYXkpICovCisJfSBkZXZfYWRkcjsKK307CisKKy8qKgorICogc3RydWN0IHRpcGNfYmVhcmVyIC0gVElQQyBiZWFyZXIgaW5mbyBhdmFpbGFibGUgdG8gbWVkaWEgY29kZQorICogQHVzcl9oYW5kbGU6IHBvaW50ZXIgdG8gYWRkaXRpb25hbCBtZWRpYS1zcGVjaWZpYyBpbmZvcm1hdGlvbiBhYm91dCBiZWFyZXIKKyAqIEBtdHU6IG1heCBwYWNrZXQgc2l6ZSBiZWFyZXIgY2FuIHN1cHBvcnQKKyAqIEBibG9ja2VkOiBub24temVybyBpZiBiZWFyZXIgaXMgYmxvY2tlZAorICogQGxvY2s6IHNwaW5sb2NrIGZvciBjb250cm9sbGluZyBhY2Nlc3MgdG8gYmVhcmVyCisgKiBAYWRkcjogbWVkaWEtc3BlY2lmaWMgYWRkcmVzcyBhc3NvY2lhdGVkIHdpdGggYmVhcmVyCisgKiBAbmFtZTogYmVhcmVyIG5hbWUgKGZvcm1hdCA9IG1lZGlhOmludGVyZmFjZSkKKyAqCisgKiBOb3RlOiBUSVBDIGluaXRpYWxpemVzICJuYW1lIiBhbmQgImxvY2siIGZpZWxkczsgbWVkaWEgY29kZSBpcyByZXNwb25zaWJsZQorICogZm9yIGluaXRpYWxpemF0aW9uIGFsbCBvdGhlciBmaWVsZHMgd2hlbiBhIGJlYXJlciBpcyBlbmFibGVkLgorICovCitzdHJ1Y3QgdGlwY19iZWFyZXIgeworCXZvaWQgKnVzcl9oYW5kbGU7CisJdTMyIG10dTsKKwlpbnQgYmxvY2tlZDsKKwlzcGlubG9ja190IGxvY2s7CisJc3RydWN0IHRpcGNfbWVkaWFfYWRkciBhZGRyOworCWNoYXIgbmFtZVtUSVBDX01BWF9CRUFSRVJfTkFNRV07Cit9OwogCiAvKioKICAqIHN0cnVjdCBtZWRpYSAtIFRJUEMgbWVkaWEgaW5mb3JtYXRpb24gYXZhaWxhYmxlIHRvIGludGVybmFsIHVzZXJzCkBAIC01NSw3ICs5Myw3IEBACiAgKiBAcHJpb3JpdHk6IGRlZmF1bHQgbGluayAoYW5kIGJlYXJlcikgcHJpb3JpdHkKICAqIEB0b2xlcmFuY2U6IGRlZmF1bHQgdGltZSAoaW4gbXMpIGJlZm9yZSBkZWNsYXJpbmcgbGluayBmYWlsdXJlCiAgKiBAd2luZG93OiBkZWZhdWx0IHdpbmRvdyAoaW4gcGFja2V0cykgYmVmb3JlIGRlY2xhcmluZyBsaW5rIGNvbmdlc3Rpb24KLSAqIEB0eXBlX2lkOiBUSVBDIG1lZGlhIGlkZW50aWZpZXIgW2RlZmluZWQgaW4gdGlwY19iZWFyZXIuaF0KKyAqIEB0eXBlX2lkOiBUSVBDIG1lZGlhIGlkZW50aWZpZXIKICAqIEBuYW1lOiBtZWRpYSBuYW1lCiAgKi8KIApAQCAtMTE2LDYgKzE1NCwzNCBAQAogCiBleHRlcm4gc3RydWN0IGJlYXJlciB0aXBjX2JlYXJlcnNbXTsKIAorLyoKKyAqIFRJUEMgcm91dGluZXMgYXZhaWxhYmxlIHRvIHN1cHBvcnRlZCBtZWRpYSB0eXBlcworICovCitpbnQgdGlwY19yZWdpc3Rlcl9tZWRpYSh1MzIgbWVkaWFfdHlwZSwKKwkJIGNoYXIgKm1lZGlhX25hbWUsIGludCAoKmVuYWJsZSkoc3RydWN0IHRpcGNfYmVhcmVyICopLAorCQkgdm9pZCAoKmRpc2FibGUpKHN0cnVjdCB0aXBjX2JlYXJlciAqKSwKKwkJIGludCAoKnNlbmRfbXNnKShzdHJ1Y3Qgc2tfYnVmZiAqLAorCQkJc3RydWN0IHRpcGNfYmVhcmVyICosIHN0cnVjdCB0aXBjX21lZGlhX2FkZHIgKiksCisJCSBjaGFyICooKmFkZHIyc3RyKShzdHJ1Y3QgdGlwY19tZWRpYV9hZGRyICphLAorCQkJY2hhciAqc3RyX2J1ZiwgaW50IHN0cl9zaXplKSwKKwkJIHN0cnVjdCB0aXBjX21lZGlhX2FkZHIgKmJjYXN0X2FkZHIsIGNvbnN0IHUzMiBiZWFyZXJfcHJpb3JpdHksCisJCSBjb25zdCB1MzIgbGlua190b2xlcmFuY2UsICAvKiBbbXNdICovCisJCSBjb25zdCB1MzIgc2VuZF93aW5kb3dfbGltaXQpOworCit2b2lkIHRpcGNfcmVjdl9tc2coc3RydWN0IHNrX2J1ZmYgKmJ1Ziwgc3RydWN0IHRpcGNfYmVhcmVyICp0Yl9wdHIpOworCitpbnQgIHRpcGNfYmxvY2tfYmVhcmVyKGNvbnN0IGNoYXIgKm5hbWUpOwordm9pZCB0aXBjX2NvbnRpbnVlKHN0cnVjdCB0aXBjX2JlYXJlciAqdGJfcHRyKTsKKworaW50IHRpcGNfZW5hYmxlX2JlYXJlcihjb25zdCBjaGFyICpiZWFyZXJfbmFtZSwgdTMyIGJjYXN0X3Njb3BlLCB1MzIgcHJpb3JpdHkpOworaW50IHRpcGNfZGlzYWJsZV9iZWFyZXIoY29uc3QgY2hhciAqbmFtZSk7CisKKy8qCisgKiBSb3V0aW5lcyBtYWRlIGF2YWlsYWJsZSB0byBUSVBDIGJ5IHN1cHBvcnRlZCBtZWRpYSB0eXBlcworICovCitpbnQgIHRpcGNfZXRoX21lZGlhX3N0YXJ0KHZvaWQpOwordm9pZCB0aXBjX2V0aF9tZWRpYV9zdG9wKHZvaWQpOworCiB2b2lkIHRpcGNfbWVkaWFfYWRkcl9wcmludGYoc3RydWN0IHByaW50X2J1ZiAqcGIsIHN0cnVjdCB0aXBjX21lZGlhX2FkZHIgKmEpOwogc3RydWN0IHNrX2J1ZmYgKnRpcGNfbWVkaWFfZ2V0X25hbWVzKHZvaWQpOwogCkBAIC0xMjYsNyArMTkyLDYgQEAKIHN0cnVjdCBiZWFyZXIgKnRpcGNfYmVhcmVyX2ZpbmRfaW50ZXJmYWNlKGNvbnN0IGNoYXIgKmlmX25hbWUpOwogaW50IHRpcGNfYmVhcmVyX3Jlc29sdmVfY29uZ2VzdGlvbihzdHJ1Y3QgYmVhcmVyICpiX3B0ciwgc3RydWN0IGxpbmsgKmxfcHRyKTsKIGludCB0aXBjX2JlYXJlcl9jb25nZXN0ZWQoc3RydWN0IGJlYXJlciAqYl9wdHIsIHN0cnVjdCBsaW5rICpsX3B0cik7Ci1pbnQgdGlwY19iZWFyZXJfaW5pdCh2b2lkKTsKIHZvaWQgdGlwY19iZWFyZXJfc3RvcCh2b2lkKTsKIHZvaWQgdGlwY19iZWFyZXJfbG9ja19wdXNoKHN0cnVjdCBiZWFyZXIgKmJfcHRyKTsKIApkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvY2x1c3Rlci5jIGIvbmV0L3RpcGMvY2x1c3Rlci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZmVhMTRiLi4wMDAwMDAwCi0tLSBhL25ldC90aXBjL2NsdXN0ZXIuYworKysgL2Rldi9udWxsCkBAIC0xLDU1NyArMCwwIEBACi0vKgotICogbmV0L3RpcGMvY2x1c3Rlci5jOiBUSVBDIGNsdXN0ZXIgbWFuYWdlbWVudCByb3V0aW5lcwotICoKLSAqIENvcHlyaWdodCAoYykgMjAwMC0yMDA2LCBFcmljc3NvbiBBQgotICogQ29weXJpZ2h0IChjKSAyMDA1LCBXaW5kIFJpdmVyIFN5c3RlbXMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lcyBvZiB0aGUgY29weXJpZ2h0IGhvbGRlcnMgbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIEFsdGVybmF0aXZlbHksIHRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQotICogU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKLSAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKLSAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb3JlLmgiCi0jaW5jbHVkZSAiY2x1c3Rlci5oIgotI2luY2x1ZGUgImFkZHIuaCIKLSNpbmNsdWRlICJub2RlX3N1YnNjci5oIgotI2luY2x1ZGUgImxpbmsuaCIKLSNpbmNsdWRlICJub2RlLmgiCi0jaW5jbHVkZSAibmV0LmgiCi0jaW5jbHVkZSAibXNnLmgiCi0jaW5jbHVkZSAiYmVhcmVyLmgiCi0KLXN0YXRpYyB2b2lkIHRpcGNfY2x0cl9tdWx0aWNhc3Qoc3RydWN0IGNsdXN0ZXIgKmNfcHRyLCBzdHJ1Y3Qgc2tfYnVmZiAqYnVmLAotCQkJCXUzMiBsb3dlciwgdTMyIHVwcGVyKTsKLXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19jbHRyX3ByZXBhcmVfcm91dGluZ19tc2codTMyIGRhdGFfc2l6ZSwgdTMyIGRlc3QpOwotCi1zdHJ1Y3QgdGlwY19ub2RlICoqdGlwY19sb2NhbF9ub2RlcyA9IE5VTEw7Ci1zdHJ1Y3QgdGlwY19ub2RlX21hcCB0aXBjX2NsdHJfYmNhc3Rfbm9kZXMgPSB7MCx7MCx9fTsKLXUzMiB0aXBjX2hpZ2hlc3RfYWxsb3dlZF9zbGF2ZSA9IDA7Ci0KLXN0cnVjdCBjbHVzdGVyICp0aXBjX2NsdHJfY3JlYXRlKHUzMiBhZGRyKQotewotCXN0cnVjdCBfem9uZSAqel9wdHI7Ci0Jc3RydWN0IGNsdXN0ZXIgKmNfcHRyOwotCWludCBtYXhfbm9kZXM7Ci0KLQljX3B0ciA9IGt6YWxsb2Moc2l6ZW9mKCpjX3B0ciksIEdGUF9BVE9NSUMpOwotCWlmIChjX3B0ciA9PSBOVUxMKSB7Ci0JCXdhcm4oIkNsdXN0ZXIgY3JlYXRpb24gZmFpbHVyZSwgbm8gbWVtb3J5XG4iKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JY19wdHItPmFkZHIgPSB0aXBjX2FkZHIodGlwY196b25lKGFkZHIpLCB0aXBjX2NsdXN0ZXIoYWRkciksIDApOwotCWlmIChpbl9vd25fY2x1c3RlcihhZGRyKSkKLQkJbWF4X25vZGVzID0gTE9XRVNUX1NMQVZFICsgdGlwY19tYXhfc2xhdmVzOwotCWVsc2UKLQkJbWF4X25vZGVzID0gdGlwY19tYXhfbm9kZXMgKyAxOwotCi0JY19wdHItPm5vZGVzID0ga2NhbGxvYyhtYXhfbm9kZXMgKyAxLCBzaXplb2Yodm9pZCopLCBHRlBfQVRPTUlDKTsKLQlpZiAoY19wdHItPm5vZGVzID09IE5VTEwpIHsKLQkJd2FybigiQ2x1c3RlciBjcmVhdGlvbiBmYWlsdXJlLCBubyBtZW1vcnkgZm9yIG5vZGUgYXJlYVxuIik7Ci0JCWtmcmVlKGNfcHRyKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JaWYgKGluX293bl9jbHVzdGVyKGFkZHIpKQotCQl0aXBjX2xvY2FsX25vZGVzID0gY19wdHItPm5vZGVzOwotCWNfcHRyLT5oaWdoZXN0X3NsYXZlID0gTE9XRVNUX1NMQVZFIC0gMTsKLQljX3B0ci0+aGlnaGVzdF9ub2RlID0gMDsKLQotCXpfcHRyID0gdGlwY196b25lX2ZpbmQodGlwY196b25lKGFkZHIpKTsKLQlpZiAoIXpfcHRyKSB7Ci0JCXpfcHRyID0gdGlwY196b25lX2NyZWF0ZShhZGRyKTsKLQl9Ci0JaWYgKCF6X3B0cikgewotCQlrZnJlZShjX3B0ci0+bm9kZXMpOwotCQlrZnJlZShjX3B0cik7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCXRpcGNfem9uZV9hdHRhY2hfY2x1c3Rlcih6X3B0ciwgY19wdHIpOwotCWNfcHRyLT5vd25lciA9IHpfcHRyOwotCXJldHVybiBjX3B0cjsKLX0KLQotdm9pZCB0aXBjX2NsdHJfZGVsZXRlKHN0cnVjdCBjbHVzdGVyICpjX3B0cikKLXsKLQl1MzIgbl9udW07Ci0KLQlpZiAoIWNfcHRyKQotCQlyZXR1cm47Ci0JZm9yIChuX251bSA9IDE7IG5fbnVtIDw9IGNfcHRyLT5oaWdoZXN0X25vZGU7IG5fbnVtKyspIHsKLQkJdGlwY19ub2RlX2RlbGV0ZShjX3B0ci0+bm9kZXNbbl9udW1dKTsKLQl9Ci0JZm9yIChuX251bSA9IExPV0VTVF9TTEFWRTsgbl9udW0gPD0gY19wdHItPmhpZ2hlc3Rfc2xhdmU7IG5fbnVtKyspIHsKLQkJdGlwY19ub2RlX2RlbGV0ZShjX3B0ci0+bm9kZXNbbl9udW1dKTsKLQl9Ci0Ja2ZyZWUoY19wdHItPm5vZGVzKTsKLQlrZnJlZShjX3B0cik7Ci19Ci0KLQotdm9pZCB0aXBjX2NsdHJfYXR0YWNoX25vZGUoc3RydWN0IGNsdXN0ZXIgKmNfcHRyLCBzdHJ1Y3QgdGlwY19ub2RlICpuX3B0cikKLXsKLQl1MzIgbl9udW0gPSB0aXBjX25vZGUobl9wdHItPmFkZHIpOwotCXUzMiBtYXhfbl9udW0gPSB0aXBjX21heF9ub2RlczsKLQotCWlmIChpbl9vd25fY2x1c3RlcihuX3B0ci0+YWRkcikpCi0JCW1heF9uX251bSA9IHRpcGNfaGlnaGVzdF9hbGxvd2VkX3NsYXZlOwotCWFzc2VydChuX251bSA+IDApOwotCWFzc2VydChuX251bSA8PSBtYXhfbl9udW0pOwotCWFzc2VydChjX3B0ci0+bm9kZXNbbl9udW1dID09IE5VTEwpOwotCWNfcHRyLT5ub2Rlc1tuX251bV0gPSBuX3B0cjsKLQlpZiAobl9udW0gPiBjX3B0ci0+aGlnaGVzdF9ub2RlKQotCQljX3B0ci0+aGlnaGVzdF9ub2RlID0gbl9udW07Ci19Ci0KLS8qKgotICogdGlwY19jbHRyX3NlbGVjdF9yb3V0ZXIgLSBzZWxlY3Qgcm91dGVyIHRvIGEgY2x1c3RlcgotICoKLSAqIFVzZXMgZGV0ZXJtaW5pc3RpYyBhbmQgZmFpciBhbGdvcml0aG0uCi0gKi8KLQotdTMyIHRpcGNfY2x0cl9zZWxlY3Rfcm91dGVyKHN0cnVjdCBjbHVzdGVyICpjX3B0ciwgdTMyIHJlZikKLXsKLQl1MzIgbl9udW07Ci0JdTMyIHVsaW0gPSBjX3B0ci0+aGlnaGVzdF9ub2RlOwotCXUzMiBtYXNrOwotCXUzMiB0c3RhcnQ7Ci0KLQlhc3NlcnQoIWluX293bl9jbHVzdGVyKGNfcHRyLT5hZGRyKSk7Ci0JaWYgKCF1bGltKQotCQlyZXR1cm4gMDsKLQotCS8qIFN0YXJ0IGVudHJ5IG11c3QgYmUgcmFuZG9tICovCi0JbWFzayA9IHRpcGNfbWF4X25vZGVzOwotCXdoaWxlIChtYXNrID4gdWxpbSkKLQkJbWFzayA+Pj0gMTsKLQl0c3RhcnQgPSByZWYgJiBtYXNrOwotCW5fbnVtID0gdHN0YXJ0OwotCi0JLyogTG9va3VwIHVwd2FyZHMgd2l0aCB3cmFwLWFyb3VuZCAqLwotCWRvIHsKLQkJaWYgKHRpcGNfbm9kZV9pc191cChjX3B0ci0+bm9kZXNbbl9udW1dKSkKLQkJCWJyZWFrOwotCX0gd2hpbGUgKCsrbl9udW0gPD0gdWxpbSk7Ci0JaWYgKG5fbnVtID4gdWxpbSkgewotCQluX251bSA9IDE7Ci0JCWRvIHsKLQkJCWlmICh0aXBjX25vZGVfaXNfdXAoY19wdHItPm5vZGVzW25fbnVtXSkpCi0JCQkJYnJlYWs7Ci0JCX0gd2hpbGUgKCsrbl9udW0gPCB0c3RhcnQpOwotCQlpZiAobl9udW0gPT0gdHN0YXJ0KQotCQkJcmV0dXJuIDA7Ci0JfQotCWFzc2VydChuX251bSA8PSB1bGltKTsKLQlyZXR1cm4gdGlwY19ub2RlX3NlbGVjdF9yb3V0ZXIoY19wdHItPm5vZGVzW25fbnVtXSwgcmVmKTsKLX0KLQotLyoqCi0gKiB0aXBjX2NsdHJfc2VsZWN0X25vZGUgLSBzZWxlY3QgZGVzdGluYXRpb24gbm9kZSB3aXRoaW4gYSByZW1vdGUgY2x1c3RlcgotICoKLSAqIFVzZXMgZGV0ZXJtaW5pc3RpYyBhbmQgZmFpciBhbGdvcml0aG0uCi0gKi8KLQotc3RydWN0IHRpcGNfbm9kZSAqdGlwY19jbHRyX3NlbGVjdF9ub2RlKHN0cnVjdCBjbHVzdGVyICpjX3B0ciwgdTMyIHNlbGVjdG9yKQotewotCXUzMiBuX251bTsKLQl1MzIgbWFzayA9IHRpcGNfbWF4X25vZGVzOwotCXUzMiBzdGFydF9lbnRyeTsKLQotCWFzc2VydCghaW5fb3duX2NsdXN0ZXIoY19wdHItPmFkZHIpKTsKLQlpZiAoIWNfcHRyLT5oaWdoZXN0X25vZGUpCi0JCXJldHVybiBOVUxMOwotCi0JLyogU3RhcnQgZW50cnkgbXVzdCBiZSByYW5kb20gKi8KLQl3aGlsZSAobWFzayA+IGNfcHRyLT5oaWdoZXN0X25vZGUpIHsKLQkJbWFzayA+Pj0gMTsKLQl9Ci0Jc3RhcnRfZW50cnkgPSAoc2VsZWN0b3IgJiBtYXNrKSA/IHNlbGVjdG9yICYgbWFzayA6IDF1OwotCWFzc2VydChzdGFydF9lbnRyeSA8PSBjX3B0ci0+aGlnaGVzdF9ub2RlKTsKLQotCS8qIExvb2t1cCB1cHdhcmRzIHdpdGggd3JhcC1hcm91bmQgKi8KLQlmb3IgKG5fbnVtID0gc3RhcnRfZW50cnk7IG5fbnVtIDw9IGNfcHRyLT5oaWdoZXN0X25vZGU7IG5fbnVtKyspIHsKLQkJaWYgKHRpcGNfbm9kZV9oYXNfYWN0aXZlX2xpbmtzKGNfcHRyLT5ub2Rlc1tuX251bV0pKQotCQkJcmV0dXJuIGNfcHRyLT5ub2Rlc1tuX251bV07Ci0JfQotCWZvciAobl9udW0gPSAxOyBuX251bSA8IHN0YXJ0X2VudHJ5OyBuX251bSsrKSB7Ci0JCWlmICh0aXBjX25vZGVfaGFzX2FjdGl2ZV9saW5rcyhjX3B0ci0+bm9kZXNbbl9udW1dKSkKLQkJCXJldHVybiBjX3B0ci0+bm9kZXNbbl9udW1dOwotCX0KLQlyZXR1cm4gTlVMTDsKLX0KLQotLyoKLSAqICAgIFJvdXRpbmcgdGFibGUgbWFuYWdlbWVudDogU2VlIGRlc2NyaXB0aW9uIGluIG5vZGUuYwotICovCi0KLXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19jbHRyX3ByZXBhcmVfcm91dGluZ19tc2codTMyIGRhdGFfc2l6ZSwgdTMyIGRlc3QpCi17Ci0JdTMyIHNpemUgPSBJTlRfSF9TSVpFICsgZGF0YV9zaXplOwotCXN0cnVjdCBza19idWZmICpidWYgPSB0aXBjX2J1Zl9hY3F1aXJlKHNpemUpOwotCXN0cnVjdCB0aXBjX21zZyAqbXNnOwotCi0JaWYgKGJ1ZikgewotCQltc2cgPSBidWZfbXNnKGJ1Zik7Ci0JCW1lbXNldCgoY2hhciAqKW1zZywgMCwgc2l6ZSk7Ci0JCXRpcGNfbXNnX2luaXQobXNnLCBST1VURV9ESVNUUklCVVRPUiwgMCwgSU5UX0hfU0laRSwgZGVzdCk7Ci0JfQotCXJldHVybiBidWY7Ci19Ci0KLXZvaWQgdGlwY19jbHRyX2JjYXN0X25ld19yb3V0ZShzdHJ1Y3QgY2x1c3RlciAqY19wdHIsIHUzMiBkZXN0LAotCQkJICAgICB1MzIgbG93ZXIsIHUzMiB1cHBlcikKLXsKLQlzdHJ1Y3Qgc2tfYnVmZiAqYnVmID0gdGlwY19jbHRyX3ByZXBhcmVfcm91dGluZ19tc2coMCwgY19wdHItPmFkZHIpOwotCXN0cnVjdCB0aXBjX21zZyAqbXNnOwotCi0JaWYgKGJ1ZikgewotCQltc2cgPSBidWZfbXNnKGJ1Zik7Ci0JCW1zZ19zZXRfcmVtb3RlX25vZGUobXNnLCBkZXN0KTsKLQkJbXNnX3NldF90eXBlKG1zZywgUk9VVEVfQURESVRJT04pOwotCQl0aXBjX2NsdHJfbXVsdGljYXN0KGNfcHRyLCBidWYsIGxvd2VyLCB1cHBlcik7Ci0JfSBlbHNlIHsKLQkJd2FybigiTWVtb3J5IHNxdWVlemU6IGJyb2FkY2FzdCBvZiBuZXcgcm91dGUgZmFpbGVkXG4iKTsKLQl9Ci19Ci0KLXZvaWQgdGlwY19jbHRyX2JjYXN0X2xvc3Rfcm91dGUoc3RydWN0IGNsdXN0ZXIgKmNfcHRyLCB1MzIgZGVzdCwKLQkJCQl1MzIgbG93ZXIsIHUzMiB1cHBlcikKLXsKLQlzdHJ1Y3Qgc2tfYnVmZiAqYnVmID0gdGlwY19jbHRyX3ByZXBhcmVfcm91dGluZ19tc2coMCwgY19wdHItPmFkZHIpOwotCXN0cnVjdCB0aXBjX21zZyAqbXNnOwotCi0JaWYgKGJ1ZikgewotCQltc2cgPSBidWZfbXNnKGJ1Zik7Ci0JCW1zZ19zZXRfcmVtb3RlX25vZGUobXNnLCBkZXN0KTsKLQkJbXNnX3NldF90eXBlKG1zZywgUk9VVEVfUkVNT1ZBTCk7Ci0JCXRpcGNfY2x0cl9tdWx0aWNhc3QoY19wdHIsIGJ1ZiwgbG93ZXIsIHVwcGVyKTsKLQl9IGVsc2UgewotCQl3YXJuKCJNZW1vcnkgc3F1ZWV6ZTogYnJvYWRjYXN0IG9mIGxvc3Qgcm91dGUgZmFpbGVkXG4iKTsKLQl9Ci19Ci0KLXZvaWQgdGlwY19jbHRyX3NlbmRfc2xhdmVfcm91dGVzKHN0cnVjdCBjbHVzdGVyICpjX3B0ciwgdTMyIGRlc3QpCi17Ci0Jc3RydWN0IHNrX2J1ZmYgKmJ1ZjsKLQlzdHJ1Y3QgdGlwY19tc2cgKm1zZzsKLQl1MzIgaGlnaGVzdCA9IGNfcHRyLT5oaWdoZXN0X3NsYXZlOwotCXUzMiBuX251bTsKLQlpbnQgc2VuZCA9IDA7Ci0KLQlhc3NlcnQoIWlzX3NsYXZlKGRlc3QpKTsKLQlhc3NlcnQoaW5fb3duX2NsdXN0ZXIoZGVzdCkpOwotCWFzc2VydChpbl9vd25fY2x1c3RlcihjX3B0ci0+YWRkcikpOwotCWlmIChoaWdoZXN0IDw9IExPV0VTVF9TTEFWRSkKLQkJcmV0dXJuOwotCWJ1ZiA9IHRpcGNfY2x0cl9wcmVwYXJlX3JvdXRpbmdfbXNnKGhpZ2hlc3QgLSBMT1dFU1RfU0xBVkUgKyAxLAotCQkJCQkgICAgY19wdHItPmFkZHIpOwotCWlmIChidWYpIHsKLQkJbXNnID0gYnVmX21zZyhidWYpOwotCQltc2dfc2V0X3JlbW90ZV9ub2RlKG1zZywgY19wdHItPmFkZHIpOwotCQltc2dfc2V0X3R5cGUobXNnLCBTTEFWRV9ST1VUSU5HX1RBQkxFKTsKLQkJZm9yIChuX251bSA9IExPV0VTVF9TTEFWRTsgbl9udW0gPD0gaGlnaGVzdDsgbl9udW0rKykgewotCQkJaWYgKGNfcHRyLT5ub2Rlc1tuX251bV0gJiYKLQkJCSAgICB0aXBjX25vZGVfaGFzX2FjdGl2ZV9saW5rcyhjX3B0ci0+bm9kZXNbbl9udW1dKSkgewotCQkJCXNlbmQgPSAxOwotCQkJCW1zZ19zZXRfZGF0YW9jdGV0KG1zZywgbl9udW0pOwotCQkJfQotCQl9Ci0JCWlmIChzZW5kKQotCQkJdGlwY19saW5rX3NlbmQoYnVmLCBkZXN0LCBkZXN0KTsKLQkJZWxzZQotCQkJYnVmX2Rpc2NhcmQoYnVmKTsKLQl9IGVsc2UgewotCQl3YXJuKCJNZW1vcnkgc3F1ZWV6ZTogYnJvYWRjYXN0IG9mIGxvc3Qgcm91dGUgZmFpbGVkXG4iKTsKLQl9Ci19Ci0KLXZvaWQgdGlwY19jbHRyX3NlbmRfZXh0X3JvdXRlcyhzdHJ1Y3QgY2x1c3RlciAqY19wdHIsIHUzMiBkZXN0KQotewotCXN0cnVjdCBza19idWZmICpidWY7Ci0Jc3RydWN0IHRpcGNfbXNnICptc2c7Ci0JdTMyIGhpZ2hlc3QgPSBjX3B0ci0+aGlnaGVzdF9ub2RlOwotCXUzMiBuX251bTsKLQlpbnQgc2VuZCA9IDA7Ci0KLQlpZiAoaW5fb3duX2NsdXN0ZXIoY19wdHItPmFkZHIpKQotCQlyZXR1cm47Ci0JYXNzZXJ0KCFpc19zbGF2ZShkZXN0KSk7Ci0JYXNzZXJ0KGluX293bl9jbHVzdGVyKGRlc3QpKTsKLQloaWdoZXN0ID0gY19wdHItPmhpZ2hlc3Rfbm9kZTsKLQlidWYgPSB0aXBjX2NsdHJfcHJlcGFyZV9yb3V0aW5nX21zZyhoaWdoZXN0ICsgMSwgY19wdHItPmFkZHIpOwotCWlmIChidWYpIHsKLQkJbXNnID0gYnVmX21zZyhidWYpOwotCQltc2dfc2V0X3JlbW90ZV9ub2RlKG1zZywgY19wdHItPmFkZHIpOwotCQltc2dfc2V0X3R5cGUobXNnLCBFWFRfUk9VVElOR19UQUJMRSk7Ci0JCWZvciAobl9udW0gPSAxOyBuX251bSA8PSBoaWdoZXN0OyBuX251bSsrKSB7Ci0JCQlpZiAoY19wdHItPm5vZGVzW25fbnVtXSAmJgotCQkJICAgIHRpcGNfbm9kZV9oYXNfYWN0aXZlX2xpbmtzKGNfcHRyLT5ub2Rlc1tuX251bV0pKSB7Ci0JCQkJc2VuZCA9IDE7Ci0JCQkJbXNnX3NldF9kYXRhb2N0ZXQobXNnLCBuX251bSk7Ci0JCQl9Ci0JCX0KLQkJaWYgKHNlbmQpCi0JCQl0aXBjX2xpbmtfc2VuZChidWYsIGRlc3QsIGRlc3QpOwotCQllbHNlCi0JCQlidWZfZGlzY2FyZChidWYpOwotCX0gZWxzZSB7Ci0JCXdhcm4oIk1lbW9yeSBzcXVlZXplOiBicm9hZGNhc3Qgb2YgZXh0ZXJuYWwgcm91dGUgZmFpbGVkXG4iKTsKLQl9Ci19Ci0KLXZvaWQgdGlwY19jbHRyX3NlbmRfbG9jYWxfcm91dGVzKHN0cnVjdCBjbHVzdGVyICpjX3B0ciwgdTMyIGRlc3QpCi17Ci0Jc3RydWN0IHNrX2J1ZmYgKmJ1ZjsKLQlzdHJ1Y3QgdGlwY19tc2cgKm1zZzsKLQl1MzIgaGlnaGVzdCA9IGNfcHRyLT5oaWdoZXN0X25vZGU7Ci0JdTMyIG5fbnVtOwotCWludCBzZW5kID0gMDsKLQotCWFzc2VydChpc19zbGF2ZShkZXN0KSk7Ci0JYXNzZXJ0KGluX293bl9jbHVzdGVyKGNfcHRyLT5hZGRyKSk7Ci0JYnVmID0gdGlwY19jbHRyX3ByZXBhcmVfcm91dGluZ19tc2coaGlnaGVzdCwgY19wdHItPmFkZHIpOwotCWlmIChidWYpIHsKLQkJbXNnID0gYnVmX21zZyhidWYpOwotCQltc2dfc2V0X3JlbW90ZV9ub2RlKG1zZywgY19wdHItPmFkZHIpOwotCQltc2dfc2V0X3R5cGUobXNnLCBMT0NBTF9ST1VUSU5HX1RBQkxFKTsKLQkJZm9yIChuX251bSA9IDE7IG5fbnVtIDw9IGhpZ2hlc3Q7IG5fbnVtKyspIHsKLQkJCWlmIChjX3B0ci0+bm9kZXNbbl9udW1dICYmCi0JCQkgICAgdGlwY19ub2RlX2hhc19hY3RpdmVfbGlua3MoY19wdHItPm5vZGVzW25fbnVtXSkpIHsKLQkJCQlzZW5kID0gMTsKLQkJCQltc2dfc2V0X2RhdGFvY3RldChtc2csIG5fbnVtKTsKLQkJCX0KLQkJfQotCQlpZiAoc2VuZCkKLQkJCXRpcGNfbGlua19zZW5kKGJ1ZiwgZGVzdCwgZGVzdCk7Ci0JCWVsc2UKLQkJCWJ1Zl9kaXNjYXJkKGJ1Zik7Ci0JfSBlbHNlIHsKLQkJd2FybigiTWVtb3J5IHNxdWVlemU6IGJyb2FkY2FzdCBvZiBsb2NhbCByb3V0ZSBmYWlsZWRcbiIpOwotCX0KLX0KLQotdm9pZCB0aXBjX2NsdHJfcmVjdl9yb3V0aW5nX3RhYmxlKHN0cnVjdCBza19idWZmICpidWYpCi17Ci0Jc3RydWN0IHRpcGNfbXNnICptc2cgPSBidWZfbXNnKGJ1Zik7Ci0Jc3RydWN0IGNsdXN0ZXIgKmNfcHRyOwotCXN0cnVjdCB0aXBjX25vZGUgKm5fcHRyOwotCXVuY2hhciAqbm9kZV90YWJsZTsKLQl1MzIgdGFibGVfc2l6ZTsKLQl1MzIgcm91dGVyOwotCXUzMiByZW1fbm9kZSA9IG1zZ19yZW1vdGVfbm9kZShtc2cpOwotCXUzMiB6X251bTsKLQl1MzIgY19udW07Ci0JdTMyIG5fbnVtOwotCi0JY19wdHIgPSB0aXBjX2NsdHJfZmluZChyZW1fbm9kZSk7Ci0JaWYgKCFjX3B0cikgewotCQljX3B0ciA9IHRpcGNfY2x0cl9jcmVhdGUocmVtX25vZGUpOwotCQlpZiAoIWNfcHRyKSB7Ci0JCQlidWZfZGlzY2FyZChidWYpOwotCQkJcmV0dXJuOwotCQl9Ci0JfQotCi0Jbm9kZV90YWJsZSA9IGJ1Zi0+ZGF0YSArIG1zZ19oZHJfc3oobXNnKTsKLQl0YWJsZV9zaXplID0gbXNnX3NpemUobXNnKSAtIG1zZ19oZHJfc3oobXNnKTsKLQlyb3V0ZXIgPSBtc2dfcHJldm5vZGUobXNnKTsKLQl6X251bSA9IHRpcGNfem9uZShyZW1fbm9kZSk7Ci0JY19udW0gPSB0aXBjX2NsdXN0ZXIocmVtX25vZGUpOwotCi0Jc3dpdGNoIChtc2dfdHlwZShtc2cpKSB7Ci0JY2FzZSBMT0NBTF9ST1VUSU5HX1RBQkxFOgotCQlhc3NlcnQoaXNfc2xhdmUodGlwY19vd25fYWRkcikpOwotCWNhc2UgRVhUX1JPVVRJTkdfVEFCTEU6Ci0JCWZvciAobl9udW0gPSAxOyBuX251bSA8IHRhYmxlX3NpemU7IG5fbnVtKyspIHsKLQkJCWlmIChub2RlX3RhYmxlW25fbnVtXSkgewotCQkJCXUzMiBhZGRyID0gdGlwY19hZGRyKHpfbnVtLCBjX251bSwgbl9udW0pOwotCQkJCW5fcHRyID0gY19wdHItPm5vZGVzW25fbnVtXTsKLQkJCQlpZiAoIW5fcHRyKSB7Ci0JCQkJCW5fcHRyID0gdGlwY19ub2RlX2NyZWF0ZShhZGRyKTsKLQkJCQl9Ci0JCQkJaWYgKG5fcHRyKQotCQkJCQl0aXBjX25vZGVfYWRkX3JvdXRlcihuX3B0ciwgcm91dGVyKTsKLQkJCX0KLQkJfQotCQlicmVhazsKLQljYXNlIFNMQVZFX1JPVVRJTkdfVEFCTEU6Ci0JCWFzc2VydCghaXNfc2xhdmUodGlwY19vd25fYWRkcikpOwotCQlhc3NlcnQoaW5fb3duX2NsdXN0ZXIoY19wdHItPmFkZHIpKTsKLQkJZm9yIChuX251bSA9IDE7IG5fbnVtIDwgdGFibGVfc2l6ZTsgbl9udW0rKykgewotCQkJaWYgKG5vZGVfdGFibGVbbl9udW1dKSB7Ci0JCQkJdTMyIHNsYXZlX251bSA9IG5fbnVtICsgTE9XRVNUX1NMQVZFOwotCQkJCXUzMiBhZGRyID0gdGlwY19hZGRyKHpfbnVtLCBjX251bSwgc2xhdmVfbnVtKTsKLQkJCQluX3B0ciA9IGNfcHRyLT5ub2Rlc1tzbGF2ZV9udW1dOwotCQkJCWlmICghbl9wdHIpIHsKLQkJCQkJbl9wdHIgPSB0aXBjX25vZGVfY3JlYXRlKGFkZHIpOwotCQkJCX0KLQkJCQlpZiAobl9wdHIpCi0JCQkJCXRpcGNfbm9kZV9hZGRfcm91dGVyKG5fcHRyLCByb3V0ZXIpOwotCQkJfQotCQl9Ci0JCWJyZWFrOwotCWNhc2UgUk9VVEVfQURESVRJT046Ci0JCWlmICghaXNfc2xhdmUodGlwY19vd25fYWRkcikpIHsKLQkJCWFzc2VydCghaW5fb3duX2NsdXN0ZXIoY19wdHItPmFkZHIpIHx8Ci0JCQkgICAgICAgaXNfc2xhdmUocmVtX25vZGUpKTsKLQkJfSBlbHNlIHsKLQkJCWFzc2VydChpbl9vd25fY2x1c3RlcihjX3B0ci0+YWRkcikgJiYKLQkJCSAgICAgICAhaXNfc2xhdmUocmVtX25vZGUpKTsKLQkJfQotCQluX3B0ciA9IGNfcHRyLT5ub2Rlc1t0aXBjX25vZGUocmVtX25vZGUpXTsKLQkJaWYgKCFuX3B0cikKLQkJCW5fcHRyID0gdGlwY19ub2RlX2NyZWF0ZShyZW1fbm9kZSk7Ci0JCWlmIChuX3B0cikKLQkJCXRpcGNfbm9kZV9hZGRfcm91dGVyKG5fcHRyLCByb3V0ZXIpOwotCQlicmVhazsKLQljYXNlIFJPVVRFX1JFTU9WQUw6Ci0JCWlmICghaXNfc2xhdmUodGlwY19vd25fYWRkcikpIHsKLQkJCWFzc2VydCghaW5fb3duX2NsdXN0ZXIoY19wdHItPmFkZHIpIHx8Ci0JCQkgICAgICAgaXNfc2xhdmUocmVtX25vZGUpKTsKLQkJfSBlbHNlIHsKLQkJCWFzc2VydChpbl9vd25fY2x1c3RlcihjX3B0ci0+YWRkcikgJiYKLQkJCSAgICAgICAhaXNfc2xhdmUocmVtX25vZGUpKTsKLQkJfQotCQluX3B0ciA9IGNfcHRyLT5ub2Rlc1t0aXBjX25vZGUocmVtX25vZGUpXTsKLQkJaWYgKG5fcHRyKQotCQkJdGlwY19ub2RlX3JlbW92ZV9yb3V0ZXIobl9wdHIsIHJvdXRlcik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWFzc2VydCghIklsbGVnYWwgcm91dGluZyBtYW5hZ2VyIG1lc3NhZ2UgcmVjZWl2ZWRcbiIpOwotCX0KLQlidWZfZGlzY2FyZChidWYpOwotfQotCi12b2lkIHRpcGNfY2x0cl9yZW1vdmVfYXNfcm91dGVyKHN0cnVjdCBjbHVzdGVyICpjX3B0ciwgdTMyIHJvdXRlcikKLXsKLQl1MzIgc3RhcnRfZW50cnk7Ci0JdTMyIHRzdG9wOwotCXUzMiBuX251bTsKLQotCWlmIChpc19zbGF2ZShyb3V0ZXIpKQotCQlyZXR1cm47CS8qIFNsYXZlIG5vZGVzIGNhbiBub3QgYmUgcm91dGVycyAqLwotCi0JaWYgKGluX293bl9jbHVzdGVyKGNfcHRyLT5hZGRyKSkgewotCQlzdGFydF9lbnRyeSA9IExPV0VTVF9TTEFWRTsKLQkJdHN0b3AgPSBjX3B0ci0+aGlnaGVzdF9zbGF2ZTsKLQl9IGVsc2UgewotCQlzdGFydF9lbnRyeSA9IDE7Ci0JCXRzdG9wID0gY19wdHItPmhpZ2hlc3Rfbm9kZTsKLQl9Ci0KLQlmb3IgKG5fbnVtID0gc3RhcnRfZW50cnk7IG5fbnVtIDw9IHRzdG9wOyBuX251bSsrKSB7Ci0JCWlmIChjX3B0ci0+bm9kZXNbbl9udW1dKSB7Ci0JCQl0aXBjX25vZGVfcmVtb3ZlX3JvdXRlcihjX3B0ci0+bm9kZXNbbl9udW1dLCByb3V0ZXIpOwotCQl9Ci0JfQotfQotCi0vKioKLSAqIHRpcGNfY2x0cl9tdWx0aWNhc3QgLSBtdWx0aWNhc3QgbWVzc2FnZSB0byBsb2NhbCBub2RlcwotICovCi0KLXN0YXRpYyB2b2lkIHRpcGNfY2x0cl9tdWx0aWNhc3Qoc3RydWN0IGNsdXN0ZXIgKmNfcHRyLCBzdHJ1Y3Qgc2tfYnVmZiAqYnVmLAotCQkJIHUzMiBsb3dlciwgdTMyIHVwcGVyKQotewotCXN0cnVjdCBza19idWZmICpidWZfY29weTsKLQlzdHJ1Y3QgdGlwY19ub2RlICpuX3B0cjsKLQl1MzIgbl9udW07Ci0JdTMyIHRzdG9wOwotCi0JYXNzZXJ0KGxvd2VyIDw9IHVwcGVyKTsKLQlhc3NlcnQoKChsb3dlciA+PSAxKSAmJiAobG93ZXIgPD0gdGlwY19tYXhfbm9kZXMpKSB8fAotCSAgICAgICAoKGxvd2VyID49IExPV0VTVF9TTEFWRSkgJiYgKGxvd2VyIDw9IHRpcGNfaGlnaGVzdF9hbGxvd2VkX3NsYXZlKSkpOwotCWFzc2VydCgoKHVwcGVyID49IDEpICYmICh1cHBlciA8PSB0aXBjX21heF9ub2RlcykpIHx8Ci0JICAgICAgICgodXBwZXIgPj0gTE9XRVNUX1NMQVZFKSAmJiAodXBwZXIgPD0gdGlwY19oaWdoZXN0X2FsbG93ZWRfc2xhdmUpKSk7Ci0JYXNzZXJ0KGluX293bl9jbHVzdGVyKGNfcHRyLT5hZGRyKSk7Ci0KLQl0c3RvcCA9IGlzX3NsYXZlKHVwcGVyKSA/IGNfcHRyLT5oaWdoZXN0X3NsYXZlIDogY19wdHItPmhpZ2hlc3Rfbm9kZTsKLQlpZiAodHN0b3AgPiB1cHBlcikKLQkJdHN0b3AgPSB1cHBlcjsKLQlmb3IgKG5fbnVtID0gbG93ZXI7IG5fbnVtIDw9IHRzdG9wOyBuX251bSsrKSB7Ci0JCW5fcHRyID0gY19wdHItPm5vZGVzW25fbnVtXTsKLQkJaWYgKG5fcHRyICYmIHRpcGNfbm9kZV9oYXNfYWN0aXZlX2xpbmtzKG5fcHRyKSkgewotCQkJYnVmX2NvcHkgPSBza2JfY29weShidWYsIEdGUF9BVE9NSUMpOwotCQkJaWYgKGJ1Zl9jb3B5ID09IE5VTEwpCi0JCQkJYnJlYWs7Ci0JCQltc2dfc2V0X2Rlc3Rub2RlKGJ1Zl9tc2coYnVmX2NvcHkpLCBuX3B0ci0+YWRkcik7Ci0JCQl0aXBjX2xpbmtfc2VuZChidWZfY29weSwgbl9wdHItPmFkZHIsIG5fcHRyLT5hZGRyKTsKLQkJfQotCX0KLQlidWZfZGlzY2FyZChidWYpOwotfQotCi0vKioKLSAqIHRpcGNfY2x0cl9icm9hZGNhc3QgLSBicm9hZGNhc3QgbWVzc2FnZSB0byBhbGwgbm9kZXMgd2l0aGluIGNsdXN0ZXIKLSAqLwotCi12b2lkIHRpcGNfY2x0cl9icm9hZGNhc3Qoc3RydWN0IHNrX2J1ZmYgKmJ1ZikKLXsKLQlzdHJ1Y3Qgc2tfYnVmZiAqYnVmX2NvcHk7Ci0Jc3RydWN0IGNsdXN0ZXIgKmNfcHRyOwotCXN0cnVjdCB0aXBjX25vZGUgKm5fcHRyOwotCXUzMiBuX251bTsKLQl1MzIgdHN0YXJ0OwotCXUzMiB0c3RvcDsKLQl1MzIgbm9kZV90eXBlOwotCi0JaWYgKHRpcGNfbW9kZSA9PSBUSVBDX05FVF9NT0RFKSB7Ci0JCWNfcHRyID0gdGlwY19jbHRyX2ZpbmQodGlwY19vd25fYWRkcik7Ci0JCWFzc2VydChpbl9vd25fY2x1c3RlcihjX3B0ci0+YWRkcikpOwkvKiBGb3Igbm93ICovCi0KLQkJLyogU2VuZCB0byBzdGFuZGFyZCBub2RlcywgdGhlbiByZXBlYXQgbG9vcCBzZW5kaW5nIHRvIHNsYXZlcyAqLwotCQl0c3RhcnQgPSAxOwotCQl0c3RvcCA9IGNfcHRyLT5oaWdoZXN0X25vZGU7Ci0JCWZvciAobm9kZV90eXBlID0gMTsgbm9kZV90eXBlIDw9IDI7IG5vZGVfdHlwZSsrKSB7Ci0JCQlmb3IgKG5fbnVtID0gdHN0YXJ0OyBuX251bSA8PSB0c3RvcDsgbl9udW0rKykgewotCQkJCW5fcHRyID0gY19wdHItPm5vZGVzW25fbnVtXTsKLQkJCQlpZiAobl9wdHIgJiYgdGlwY19ub2RlX2hhc19hY3RpdmVfbGlua3Mobl9wdHIpKSB7Ci0JCQkJCWJ1Zl9jb3B5ID0gc2tiX2NvcHkoYnVmLCBHRlBfQVRPTUlDKTsKLQkJCQkJaWYgKGJ1Zl9jb3B5ID09IE5VTEwpCi0JCQkJCQlnb3RvIGV4aXQ7Ci0JCQkJCW1zZ19zZXRfZGVzdG5vZGUoYnVmX21zZyhidWZfY29weSksCi0JCQkJCQkJIG5fcHRyLT5hZGRyKTsKLQkJCQkJdGlwY19saW5rX3NlbmQoYnVmX2NvcHksIG5fcHRyLT5hZGRyLAotCQkJCQkJICAgICAgIG5fcHRyLT5hZGRyKTsKLQkJCQl9Ci0JCQl9Ci0JCQl0c3RhcnQgPSBMT1dFU1RfU0xBVkU7Ci0JCQl0c3RvcCA9IGNfcHRyLT5oaWdoZXN0X3NsYXZlOwotCQl9Ci0JfQotZXhpdDoKLQlidWZfZGlzY2FyZChidWYpOwotfQotCi1pbnQgdGlwY19jbHRyX2luaXQodm9pZCkKLXsKLQl0aXBjX2hpZ2hlc3RfYWxsb3dlZF9zbGF2ZSA9IExPV0VTVF9TTEFWRSArIHRpcGNfbWF4X3NsYXZlczsKLQlyZXR1cm4gdGlwY19jbHRyX2NyZWF0ZSh0aXBjX293bl9hZGRyKSA/IDAgOiAtRU5PTUVNOwotfQotCmRpZmYgLS1naXQgYS9uZXQvdGlwYy9jbHVzdGVyLmggYi9uZXQvdGlwYy9jbHVzdGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyNjM2ZDkuLjAwMDAwMDAKLS0tIGEvbmV0L3RpcGMvY2x1c3Rlci5oCisrKyAvZGV2L251bGwKQEAgLTEsOTIgKzAsMCBAQAotLyoKLSAqIG5ldC90aXBjL2NsdXN0ZXIuaDogSW5jbHVkZSBmaWxlIGZvciBUSVBDIGNsdXN0ZXIgbWFuYWdlbWVudCByb3V0aW5lcwotICoKLSAqIENvcHlyaWdodCAoYykgMjAwMC0yMDA2LCBFcmljc3NvbiBBQgotICogQ29weXJpZ2h0IChjKSAyMDA1LCBXaW5kIFJpdmVyIFN5c3RlbXMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lcyBvZiB0aGUgY29weXJpZ2h0IGhvbGRlcnMgbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIEFsdGVybmF0aXZlbHksIHRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQotICogU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKLSAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKLSAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgX1RJUENfQ0xVU1RFUl9ICi0jZGVmaW5lIF9USVBDX0NMVVNURVJfSAotCi0jaW5jbHVkZSAiYWRkci5oIgotI2luY2x1ZGUgInpvbmUuaCIKLQotI2RlZmluZSBMT1dFU1RfU0xBVkUgIDIwNDh1Ci0KLS8qKgotICogc3RydWN0IGNsdXN0ZXIgLSBUSVBDIGNsdXN0ZXIgc3RydWN0dXJlCi0gKiBAYWRkcjogbmV0d29yayBhZGRyZXNzIG9mIGNsdXN0ZXIKLSAqIEBvd25lcjogcG9pbnRlciB0byB6b25lIHRoYXQgY2x1c3RlciBiZWxvbmdzIHRvCi0gKiBAbm9kZXM6IGFycmF5IG9mIHBvaW50ZXJzIHRvIGFsbCBub2RlcyB3aXRoaW4gY2x1c3RlcgotICogQGhpZ2hlc3Rfbm9kZTogaWQgb2YgaGlnaGVzdCBudW1iZXJlZCBub2RlIHdpdGhpbiBjbHVzdGVyCi0gKiBAaGlnaGVzdF9zbGF2ZTogKHVzZWQgZm9yIHNlY29uZGFyeSBub2RlIHN1cHBvcnQpCi0gKi8KLQotc3RydWN0IGNsdXN0ZXIgewotCXUzMiBhZGRyOwotCXN0cnVjdCBfem9uZSAqb3duZXI7Ci0Jc3RydWN0IHRpcGNfbm9kZSAqKm5vZGVzOwotCXUzMiBoaWdoZXN0X25vZGU7Ci0JdTMyIGhpZ2hlc3Rfc2xhdmU7Ci19OwotCi0KLWV4dGVybiBzdHJ1Y3QgdGlwY19ub2RlICoqdGlwY19sb2NhbF9ub2RlczsKLWV4dGVybiB1MzIgdGlwY19oaWdoZXN0X2FsbG93ZWRfc2xhdmU7Ci1leHRlcm4gc3RydWN0IHRpcGNfbm9kZV9tYXAgdGlwY19jbHRyX2JjYXN0X25vZGVzOwotCi12b2lkIHRpcGNfY2x0cl9yZW1vdmVfYXNfcm91dGVyKHN0cnVjdCBjbHVzdGVyICpjX3B0ciwgdTMyIHJvdXRlcik7Ci12b2lkIHRpcGNfY2x0cl9zZW5kX2V4dF9yb3V0ZXMoc3RydWN0IGNsdXN0ZXIgKmNfcHRyLCB1MzIgZGVzdCk7Ci1zdHJ1Y3QgdGlwY19ub2RlICp0aXBjX2NsdHJfc2VsZWN0X25vZGUoc3RydWN0IGNsdXN0ZXIgKmNfcHRyLCB1MzIgc2VsZWN0b3IpOwotdTMyIHRpcGNfY2x0cl9zZWxlY3Rfcm91dGVyKHN0cnVjdCBjbHVzdGVyICpjX3B0ciwgdTMyIHJlZik7Ci12b2lkIHRpcGNfY2x0cl9yZWN2X3JvdXRpbmdfdGFibGUoc3RydWN0IHNrX2J1ZmYgKmJ1Zik7Ci1zdHJ1Y3QgY2x1c3RlciAqdGlwY19jbHRyX2NyZWF0ZSh1MzIgYWRkcik7Ci12b2lkIHRpcGNfY2x0cl9kZWxldGUoc3RydWN0IGNsdXN0ZXIgKmNfcHRyKTsKLXZvaWQgdGlwY19jbHRyX2F0dGFjaF9ub2RlKHN0cnVjdCBjbHVzdGVyICpjX3B0ciwgc3RydWN0IHRpcGNfbm9kZSAqbl9wdHIpOwotdm9pZCB0aXBjX2NsdHJfc2VuZF9zbGF2ZV9yb3V0ZXMoc3RydWN0IGNsdXN0ZXIgKmNfcHRyLCB1MzIgZGVzdCk7Ci12b2lkIHRpcGNfY2x0cl9icm9hZGNhc3Qoc3RydWN0IHNrX2J1ZmYgKmJ1Zik7Ci1pbnQgdGlwY19jbHRyX2luaXQodm9pZCk7Ci0KLXZvaWQgdGlwY19jbHRyX2JjYXN0X25ld19yb3V0ZShzdHJ1Y3QgY2x1c3RlciAqY19wdHIsIHUzMiBkZXN0LCB1MzIgbG8sIHUzMiBoaSk7Ci12b2lkIHRpcGNfY2x0cl9zZW5kX2xvY2FsX3JvdXRlcyhzdHJ1Y3QgY2x1c3RlciAqY19wdHIsIHUzMiBkZXN0KTsKLXZvaWQgdGlwY19jbHRyX2JjYXN0X2xvc3Rfcm91dGUoc3RydWN0IGNsdXN0ZXIgKmNfcHRyLCB1MzIgZGVzdCwgdTMyIGxvLCB1MzIgaGkpOwotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBjbHVzdGVyICp0aXBjX2NsdHJfZmluZCh1MzIgYWRkcikKLXsKLQlzdHJ1Y3QgX3pvbmUgKnpfcHRyID0gdGlwY196b25lX2ZpbmQoYWRkcik7Ci0KLQlpZiAoel9wdHIpCi0JCXJldHVybiB6X3B0ci0+Y2x1c3RlcnNbMV07Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvY29uZmlnLmMgYi9uZXQvdGlwYy9jb25maWcuYwppbmRleCA1MGE2MTMzLi5lMTY3NTBkIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9jb25maWcuYworKysgYi9uZXQvdGlwYy9jb25maWcuYwpAQCAtMzUsMzAgKzM1LDExIEBACiAgKi8KIAogI2luY2x1ZGUgImNvcmUuaCIKLSNpbmNsdWRlICJkYmcuaCIKLSNpbmNsdWRlICJiZWFyZXIuaCIKICNpbmNsdWRlICJwb3J0LmgiCi0jaW5jbHVkZSAibGluay5oIgotI2luY2x1ZGUgInpvbmUuaCIKLSNpbmNsdWRlICJhZGRyLmgiCiAjaW5jbHVkZSAibmFtZV90YWJsZS5oIgotI2luY2x1ZGUgIm5vZGUuaCIKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJkaXNjb3Zlci5oIgogCi1zdHJ1Y3Qgc3Vic2NyX2RhdGEgewotCWNoYXIgdXNyX2hhbmRsZVs4XTsKLQl1MzIgZG9tYWluOwotCXUzMiBwb3J0X3JlZjsKLQlzdHJ1Y3QgbGlzdF9oZWFkIHN1YmRfbGlzdDsKLX07Ci0KLXN0cnVjdCBtYW5hZ2VyIHsKLQl1MzIgdXNlcl9yZWY7Ci0JdTMyIHBvcnRfcmVmOwotfTsKLQotc3RhdGljIHN0cnVjdCBtYW5hZ2VyIG1uZyA9IHsgMH07CitzdGF0aWMgdTMyIGNvbmZpZ19wb3J0X3JlZjsKIAogc3RhdGljIERFRklORV9TUElOTE9DSyhjb25maWdfbG9jayk7CiAKQEAgLTgzLDEwICs2NCw4IEBACiAJc3RydWN0IHRsdl9kZXNjICp0bHYgPSAoc3RydWN0IHRsdl9kZXNjICopc2tiX3RhaWxfcG9pbnRlcihidWYpOwogCWludCBuZXdfdGx2X3NwYWNlID0gVExWX1NQQUNFKHRsdl9kYXRhX3NpemUpOwogCi0JaWYgKHNrYl90YWlscm9vbShidWYpIDwgbmV3X3Rsdl9zcGFjZSkgewotCQlkYmcoInRpcGNfY2ZnX2FwcGVuZF90bHYgdW5hYmxlIHRvIGFwcGVuZCBUTFZcbiIpOworCWlmIChza2JfdGFpbHJvb20oYnVmKSA8IG5ld190bHZfc3BhY2UpCiAJCXJldHVybiAwOwotCX0KIAlza2JfcHV0KGJ1ZiwgbmV3X3Rsdl9zcGFjZSk7CiAJdGx2LT50bHZfdHlwZSA9IGh0b25zKHRsdl90eXBlKTsKIAl0bHYtPnRsdl9sZW4gID0gaHRvbnMoVExWX0xFTkdUSCh0bHZfZGF0YV9zaXplKSk7CkBAIC0yODEsMzggKzI2MCw2IEBACiAJcmV0dXJuIHRpcGNfY2ZnX3JlcGx5X25vbmUoKTsKIH0KIAotc3RhdGljIHN0cnVjdCBza19idWZmICpjZmdfc2V0X21heF96b25lcyh2b2lkKQotewotCXUzMiB2YWx1ZTsKLQotCWlmICghVExWX0NIRUNLKHJlcV90bHZfYXJlYSwgcmVxX3Rsdl9zcGFjZSwgVElQQ19UTFZfVU5TSUdORUQpKQotCQlyZXR1cm4gdGlwY19jZmdfcmVwbHlfZXJyb3Jfc3RyaW5nKFRJUENfQ0ZHX1RMVl9FUlJPUik7Ci0JdmFsdWUgPSBudG9obCgqKF9fYmUzMiAqKVRMVl9EQVRBKHJlcV90bHZfYXJlYSkpOwotCWlmICh2YWx1ZSA9PSB0aXBjX21heF96b25lcykKLQkJcmV0dXJuIHRpcGNfY2ZnX3JlcGx5X25vbmUoKTsKLQlpZiAodmFsdWUgIT0gZGVsaW1pdCh2YWx1ZSwgMSwgMjU1KSkKLQkJcmV0dXJuIHRpcGNfY2ZnX3JlcGx5X2Vycm9yX3N0cmluZyhUSVBDX0NGR19JTlZBTElEX1ZBTFVFCi0JCQkJCQkgICAiIChtYXggem9uZXMgbXVzdCBiZSAxLTI1NSkiKTsKLQlpZiAodGlwY19tb2RlID09IFRJUENfTkVUX01PREUpCi0JCXJldHVybiB0aXBjX2NmZ19yZXBseV9lcnJvcl9zdHJpbmcoVElQQ19DRkdfTk9UX1NVUFBPUlRFRAotCQkJIiAoY2Fubm90IGNoYW5nZSBtYXggem9uZXMgb25jZSBUSVBDIGhhcyBqb2luZWQgYSBuZXR3b3JrKSIpOwotCXRpcGNfbWF4X3pvbmVzID0gdmFsdWU7Ci0JcmV0dXJuIHRpcGNfY2ZnX3JlcGx5X25vbmUoKTsKLX0KLQotc3RhdGljIHN0cnVjdCBza19idWZmICpjZmdfc2V0X21heF9jbHVzdGVycyh2b2lkKQotewotCXUzMiB2YWx1ZTsKLQotCWlmICghVExWX0NIRUNLKHJlcV90bHZfYXJlYSwgcmVxX3Rsdl9zcGFjZSwgVElQQ19UTFZfVU5TSUdORUQpKQotCQlyZXR1cm4gdGlwY19jZmdfcmVwbHlfZXJyb3Jfc3RyaW5nKFRJUENfQ0ZHX1RMVl9FUlJPUik7Ci0JdmFsdWUgPSBudG9obCgqKF9fYmUzMiAqKVRMVl9EQVRBKHJlcV90bHZfYXJlYSkpOwotCWlmICh2YWx1ZSAhPSBkZWxpbWl0KHZhbHVlLCAxLCAxKSkKLQkJcmV0dXJuIHRpcGNfY2ZnX3JlcGx5X2Vycm9yX3N0cmluZyhUSVBDX0NGR19JTlZBTElEX1ZBTFVFCi0JCQkJCQkgICAiIChtYXggY2x1c3RlcnMgZml4ZWQgYXQgMSkiKTsKLQlyZXR1cm4gdGlwY19jZmdfcmVwbHlfbm9uZSgpOwotfQotCiBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmNmZ19zZXRfbWF4X25vZGVzKHZvaWQpCiB7CiAJdTMyIHZhbHVlOwpAQCAtMzMyLDE5ICsyNzksNiBAQAogCXJldHVybiB0aXBjX2NmZ19yZXBseV9ub25lKCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqY2ZnX3NldF9tYXhfc2xhdmVzKHZvaWQpCi17Ci0JdTMyIHZhbHVlOwotCi0JaWYgKCFUTFZfQ0hFQ0socmVxX3Rsdl9hcmVhLCByZXFfdGx2X3NwYWNlLCBUSVBDX1RMVl9VTlNJR05FRCkpCi0JCXJldHVybiB0aXBjX2NmZ19yZXBseV9lcnJvcl9zdHJpbmcoVElQQ19DRkdfVExWX0VSUk9SKTsKLQl2YWx1ZSA9IG50b2hsKCooX19iZTMyICopVExWX0RBVEEocmVxX3Rsdl9hcmVhKSk7Ci0JaWYgKHZhbHVlICE9IDApCi0JCXJldHVybiB0aXBjX2NmZ19yZXBseV9lcnJvcl9zdHJpbmcoVElQQ19DRkdfTk9UX1NVUFBPUlRFRAotCQkJCQkJICAgIiAobWF4IHNlY29uZGFyeSBub2RlcyBmaXhlZCBhdCAwKSIpOwotCXJldHVybiB0aXBjX2NmZ19yZXBseV9ub25lKCk7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqY2ZnX3NldF9uZXRpZCh2b2lkKQogewogCXUzMiB2YWx1ZTsKQEAgLTM4OCw4ICszMjIsNyBAQAogCX0gZWxzZSBpZiAoIXRpcGNfcmVtb3RlX21hbmFnZW1lbnQpIHsKIAkJcmVwX3Rsdl9idWYgPSB0aXBjX2NmZ19yZXBseV9lcnJvcl9zdHJpbmcoVElQQ19DRkdfTk9fUkVNT1RFKTsKIAkJZ290byBleGl0OwotCX0KLQllbHNlIGlmIChjbWQgPj0gMHg0MDAwKSB7CisJfSBlbHNlIGlmIChjbWQgPj0gMHg0MDAwKSB7CiAJCXUzMiBkb21haW4gPSAwOwogCiAJCWlmICgodGlwY19uYW1ldGJsX3RyYW5zbGF0ZShUSVBDX1pNX1NSViwgMCwgJmRvbWFpbikgPT0gMCkgfHwKQEAgLTQ2NCwxOCArMzk3LDkgQEAKIAljYXNlIFRJUENfQ01EX1NFVF9NQVhfU1VCU0NSOgogCQlyZXBfdGx2X2J1ZiA9IGNmZ19zZXRfbWF4X3N1YnNjcmlwdGlvbnMoKTsKIAkJYnJlYWs7Ci0JY2FzZSBUSVBDX0NNRF9TRVRfTUFYX1pPTkVTOgotCQlyZXBfdGx2X2J1ZiA9IGNmZ19zZXRfbWF4X3pvbmVzKCk7Ci0JCWJyZWFrOwotCWNhc2UgVElQQ19DTURfU0VUX01BWF9DTFVTVEVSUzoKLQkJcmVwX3Rsdl9idWYgPSBjZmdfc2V0X21heF9jbHVzdGVycygpOwotCQlicmVhazsKIAljYXNlIFRJUENfQ01EX1NFVF9NQVhfTk9ERVM6CiAJCXJlcF90bHZfYnVmID0gY2ZnX3NldF9tYXhfbm9kZXMoKTsKIAkJYnJlYWs7Ci0JY2FzZSBUSVBDX0NNRF9TRVRfTUFYX1NMQVZFUzoKLQkJcmVwX3Rsdl9idWYgPSBjZmdfc2V0X21heF9zbGF2ZXMoKTsKLQkJYnJlYWs7CiAJY2FzZSBUSVBDX0NNRF9TRVRfTkVUSUQ6CiAJCXJlcF90bHZfYnVmID0gY2ZnX3NldF9uZXRpZCgpOwogCQlicmVhazsKQEAgLTQ5MSwxOCArNDE1LDkgQEAKIAljYXNlIFRJUENfQ01EX0dFVF9NQVhfU1VCU0NSOgogCQlyZXBfdGx2X2J1ZiA9IHRpcGNfY2ZnX3JlcGx5X3Vuc2lnbmVkKHRpcGNfbWF4X3N1YnNjcmlwdGlvbnMpOwogCQlicmVhazsKLQljYXNlIFRJUENfQ01EX0dFVF9NQVhfWk9ORVM6Ci0JCXJlcF90bHZfYnVmID0gdGlwY19jZmdfcmVwbHlfdW5zaWduZWQodGlwY19tYXhfem9uZXMpOwotCQlicmVhazsKLQljYXNlIFRJUENfQ01EX0dFVF9NQVhfQ0xVU1RFUlM6Ci0JCXJlcF90bHZfYnVmID0gdGlwY19jZmdfcmVwbHlfdW5zaWduZWQodGlwY19tYXhfY2x1c3RlcnMpOwotCQlicmVhazsKIAljYXNlIFRJUENfQ01EX0dFVF9NQVhfTk9ERVM6CiAJCXJlcF90bHZfYnVmID0gdGlwY19jZmdfcmVwbHlfdW5zaWduZWQodGlwY19tYXhfbm9kZXMpOwogCQlicmVhazsKLQljYXNlIFRJUENfQ01EX0dFVF9NQVhfU0xBVkVTOgotCQlyZXBfdGx2X2J1ZiA9IHRpcGNfY2ZnX3JlcGx5X3Vuc2lnbmVkKHRpcGNfbWF4X3NsYXZlcyk7Ci0JCWJyZWFrOwogCWNhc2UgVElQQ19DTURfR0VUX05FVElEOgogCQlyZXBfdGx2X2J1ZiA9IHRpcGNfY2ZnX3JlcGx5X3Vuc2lnbmVkKHRpcGNfbmV0X2lkKTsKIAkJYnJlYWs7CkBAIC01MTAsNiArNDI1LDE1IEBACiAJCXJlcF90bHZfYnVmID0KIAkJCXRpcGNfY2ZnX3JlcGx5X2Vycm9yX3N0cmluZyhUSVBDX0NGR19OT1RfTkVUX0FETUlOKTsKIAkJYnJlYWs7CisJY2FzZSBUSVBDX0NNRF9TRVRfTUFYX1pPTkVTOgorCWNhc2UgVElQQ19DTURfR0VUX01BWF9aT05FUzoKKwljYXNlIFRJUENfQ01EX1NFVF9NQVhfU0xBVkVTOgorCWNhc2UgVElQQ19DTURfR0VUX01BWF9TTEFWRVM6CisJY2FzZSBUSVBDX0NNRF9TRVRfTUFYX0NMVVNURVJTOgorCWNhc2UgVElQQ19DTURfR0VUX01BWF9DTFVTVEVSUzoKKwkJcmVwX3Rsdl9idWYgPSB0aXBjX2NmZ19yZXBseV9lcnJvcl9zdHJpbmcoVElQQ19DRkdfTk9UX1NVUFBPUlRFRAorCQkJCQkJCSAgIiAob2Jzb2xldGUgY29tbWFuZCkiKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmVwX3Rsdl9idWYgPSB0aXBjX2NmZ19yZXBseV9lcnJvcl9zdHJpbmcoVElQQ19DRkdfTk9UX1NVUFBPUlRFRAogCQkJCQkJCSAgIiAodW5rbm93biBjb21tYW5kKSIpOwpAQCAtNTcyLDIwICs0OTYsMTYgQEAKIAlzdHJ1Y3QgdGlwY19uYW1lX3NlcSBzZXE7CiAJaW50IHJlczsKIAotCXJlcyA9IHRpcGNfYXR0YWNoKCZtbmcudXNlcl9yZWYsIE5VTEwsIE5VTEwpOwotCWlmIChyZXMpCi0JCWdvdG8gZmFpbGVkOwotCi0JcmVzID0gdGlwY19jcmVhdGVwb3J0KG1uZy51c2VyX3JlZiwgTlVMTCwgVElQQ19DUklUSUNBTF9JTVBPUlRBTkNFLAorCXJlcyA9IHRpcGNfY3JlYXRlcG9ydChOVUxMLCBUSVBDX0NSSVRJQ0FMX0lNUE9SVEFOQ0UsCiAJCQkgICAgICBOVUxMLCBOVUxMLCBOVUxMLAogCQkJICAgICAgTlVMTCwgY2ZnX25hbWVkX21zZ19ldmVudCwgTlVMTCwKLQkJCSAgICAgIE5VTEwsICZtbmcucG9ydF9yZWYpOworCQkJICAgICAgTlVMTCwgJmNvbmZpZ19wb3J0X3JlZik7CiAJaWYgKHJlcykKIAkJZ290byBmYWlsZWQ7CiAKIAlzZXEudHlwZSA9IFRJUENfQ0ZHX1NSVjsKIAlzZXEubG93ZXIgPSBzZXEudXBwZXIgPSB0aXBjX293bl9hZGRyOwotCXJlcyA9IHRpcGNfbmFtZXRibF9wdWJsaXNoX3JzdihtbmcucG9ydF9yZWYsIFRJUENfWk9ORV9TQ09QRSwgJnNlcSk7CisJcmVzID0gdGlwY19uYW1ldGJsX3B1Ymxpc2hfcnN2KGNvbmZpZ19wb3J0X3JlZiwgVElQQ19aT05FX1NDT1BFLCAmc2VxKTsKIAlpZiAocmVzKQogCQlnb3RvIGZhaWxlZDsKIApAQCAtNTkzLDE1ICs1MTMsMTMgQEAKIAogZmFpbGVkOgogCWVycigiVW5hYmxlIHRvIGNyZWF0ZSBjb25maWd1cmF0aW9uIHNlcnZpY2VcbiIpOwotCXRpcGNfZGV0YWNoKG1uZy51c2VyX3JlZik7Ci0JbW5nLnVzZXJfcmVmID0gMDsKIAlyZXR1cm4gcmVzOwogfQogCiB2b2lkIHRpcGNfY2ZnX3N0b3Aodm9pZCkKIHsKLQlpZiAobW5nLnVzZXJfcmVmKSB7Ci0JCXRpcGNfZGV0YWNoKG1uZy51c2VyX3JlZik7Ci0JCW1uZy51c2VyX3JlZiA9IDA7CisJaWYgKGNvbmZpZ19wb3J0X3JlZikgeworCQl0aXBjX2RlbGV0ZXBvcnQoY29uZmlnX3BvcnRfcmVmKTsKKwkJY29uZmlnX3BvcnRfcmVmID0gMDsKIAl9CiB9CmRpZmYgLS1naXQgYS9uZXQvdGlwYy9jb25maWcuaCBiL25ldC90aXBjL2NvbmZpZy5oCmluZGV4IDQ4MWUxMmUuLjQ0MzE1OWEgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL2NvbmZpZy5oCisrKyBiL25ldC90aXBjL2NvbmZpZy5oCkBAIC0zOSw3ICszOSw2IEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotI2luY2x1ZGUgImNvcmUuaCIKICNpbmNsdWRlICJsaW5rLmgiCiAKIHN0cnVjdCBza19idWZmICp0aXBjX2NmZ19yZXBseV9hbGxvYyhpbnQgcGF5bG9hZF9zaXplKTsKZGlmZiAtLWdpdCBhL25ldC90aXBjL2NvcmUuYyBiL25ldC90aXBjL2NvcmUuYwppbmRleCBlMmEwOWViLi5lMDcxNTc5IDEwMDY0NAotLS0gYS9uZXQvdGlwYy9jb3JlLmMKKysrIGIvbmV0L3RpcGMvY29yZS5jCkBAIC0zNCwzNyArMzQsMTcgQEAKICAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+Ci0KICNpbmNsdWRlICJjb3JlLmgiCi0jaW5jbHVkZSAiZGJnLmgiCiAjaW5jbHVkZSAicmVmLmgiCi0jaW5jbHVkZSAibmV0LmgiCi0jaW5jbHVkZSAidXNlcl9yZWcuaCIKICNpbmNsdWRlICJuYW1lX3RhYmxlLmgiCiAjaW5jbHVkZSAic3Vic2NyLmgiCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKIAotI2lmbmRlZiBDT05GSUdfVElQQ19aT05FUwotI2RlZmluZSBDT05GSUdfVElQQ19aT05FUyAzCi0jZW5kaWYKLQotI2lmbmRlZiBDT05GSUdfVElQQ19DTFVTVEVSUwotI2RlZmluZSBDT05GSUdfVElQQ19DTFVTVEVSUyAxCi0jZW5kaWYKLQogI2lmbmRlZiBDT05GSUdfVElQQ19OT0RFUwogI2RlZmluZSBDT05GSUdfVElQQ19OT0RFUyAyNTUKICNlbmRpZgogCi0jaWZuZGVmIENPTkZJR19USVBDX1NMQVZFX05PREVTCi0jZGVmaW5lIENPTkZJR19USVBDX1NMQVZFX05PREVTIDAKLSNlbmRpZgotCiAjaWZuZGVmIENPTkZJR19USVBDX1BPUlRTCiAjZGVmaW5lIENPTkZJR19USVBDX1BPUlRTIDgxOTEKICNlbmRpZgpAQCAtODUsMTAgKzY1LDcgQEAKIC8qIGNvbmZpZ3VyYWJsZSBUSVBDIHBhcmFtZXRlcnMgKi8KIAogdTMyIHRpcGNfb3duX2FkZHI7Ci1pbnQgdGlwY19tYXhfem9uZXM7Ci1pbnQgdGlwY19tYXhfY2x1c3RlcnM7CiBpbnQgdGlwY19tYXhfbm9kZXM7Ci1pbnQgdGlwY19tYXhfc2xhdmVzOwogaW50IHRpcGNfbWF4X3BvcnRzOwogaW50IHRpcGNfbWF4X3N1YnNjcmlwdGlvbnM7CiBpbnQgdGlwY19tYXhfcHVibGljYXRpb25zOwpAQCAtMTM4LDEwICsxMTUsMTEgQEAKIHsKIAlpbnQgcmVzOwogCi0JaWYgKChyZXMgPSB0aXBjX25ldF9zdGFydChhZGRyKSkgfHwKLQkgICAgKHJlcyA9IHRpcGNfZXRoX21lZGlhX3N0YXJ0KCkpKSB7CisJcmVzID0gdGlwY19uZXRfc3RhcnQoYWRkcik7CisJaWYgKCFyZXMpCisJCXJlcyA9IHRpcGNfZXRoX21lZGlhX3N0YXJ0KCk7CisJaWYgKHJlcykKIAkJdGlwY19jb3JlX3N0b3BfbmV0KCk7Ci0JfQogCXJldHVybiByZXM7CiB9CiAKQEAgLTE2MCw3ICsxMzgsNiBAQAogCXRpcGNfaGFuZGxlcl9zdG9wKCk7CiAJdGlwY19jZmdfc3RvcCgpOwogCXRpcGNfc3Vic2NyX3N0b3AoKTsKLQl0aXBjX3JlZ19zdG9wKCk7CiAJdGlwY19uYW1ldGJsX3N0b3AoKTsKIAl0aXBjX3JlZl90YWJsZV9zdG9wKCk7CiAJdGlwY19zb2NrZXRfc3RvcCgpOwpAQCAtMTgxLDE2ICsxNTgsMjIgQEAKIAlnZXRfcmFuZG9tX2J5dGVzKCZ0aXBjX3JhbmRvbSwgc2l6ZW9mKHRpcGNfcmFuZG9tKSk7CiAJdGlwY19tb2RlID0gVElQQ19OT0RFX01PREU7CiAKLQlpZiAoKHJlcyA9IHRpcGNfaGFuZGxlcl9zdGFydCgpKSB8fAotCSAgICAocmVzID0gdGlwY19yZWZfdGFibGVfaW5pdCh0aXBjX21heF9wb3J0cywgdGlwY19yYW5kb20pKSB8fAotCSAgICAocmVzID0gdGlwY19yZWdfc3RhcnQoKSkgfHwKLQkgICAgKHJlcyA9IHRpcGNfbmFtZXRibF9pbml0KCkpIHx8Ci0JICAgIChyZXMgPSB0aXBjX2tfc2lnbmFsKChIYW5kbGVyKXRpcGNfc3Vic2NyX3N0YXJ0LCAwKSkgfHwKLQkgICAgKHJlcyA9IHRpcGNfa19zaWduYWwoKEhhbmRsZXIpdGlwY19jZmdfaW5pdCwgMCkpIHx8Ci0JICAgIChyZXMgPSB0aXBjX25ldGxpbmtfc3RhcnQoKSkgfHwKLQkgICAgKHJlcyA9IHRpcGNfc29ja2V0X2luaXQoKSkpIHsKKwlyZXMgPSB0aXBjX2hhbmRsZXJfc3RhcnQoKTsKKwlpZiAoIXJlcykKKwkJcmVzID0gdGlwY19yZWZfdGFibGVfaW5pdCh0aXBjX21heF9wb3J0cywgdGlwY19yYW5kb20pOworCWlmICghcmVzKQorCQlyZXMgPSB0aXBjX25hbWV0YmxfaW5pdCgpOworCWlmICghcmVzKQorCQlyZXMgPSB0aXBjX2tfc2lnbmFsKChIYW5kbGVyKXRpcGNfc3Vic2NyX3N0YXJ0LCAwKTsKKwlpZiAoIXJlcykKKwkJcmVzID0gdGlwY19rX3NpZ25hbCgoSGFuZGxlcil0aXBjX2NmZ19pbml0LCAwKTsKKwlpZiAoIXJlcykKKwkJcmVzID0gdGlwY19uZXRsaW5rX3N0YXJ0KCk7CisJaWYgKCFyZXMpCisJCXJlcyA9IHRpcGNfc29ja2V0X2luaXQoKTsKKwlpZiAocmVzKQogCQl0aXBjX2NvcmVfc3RvcCgpOwotCX0KKwogCXJldHVybiByZXM7CiB9CiAKQEAgLTIxMCwxMyArMTkzLDExIEBACiAJdGlwY19tYXhfcHVibGljYXRpb25zID0gMTAwMDA7CiAJdGlwY19tYXhfc3Vic2NyaXB0aW9ucyA9IDIwMDA7CiAJdGlwY19tYXhfcG9ydHMgPSBDT05GSUdfVElQQ19QT1JUUzsKLQl0aXBjX21heF96b25lcyA9IENPTkZJR19USVBDX1pPTkVTOwotCXRpcGNfbWF4X2NsdXN0ZXJzID0gQ09ORklHX1RJUENfQ0xVU1RFUlM7CiAJdGlwY19tYXhfbm9kZXMgPSBDT05GSUdfVElQQ19OT0RFUzsKLQl0aXBjX21heF9zbGF2ZXMgPSBDT05GSUdfVElQQ19TTEFWRV9OT0RFUzsKIAl0aXBjX25ldF9pZCA9IDQ3MTE7CiAKLQlpZiAoKHJlcyA9IHRpcGNfY29yZV9zdGFydCgpKSkKKwlyZXMgPSB0aXBjX2NvcmVfc3RhcnQoKTsKKwlpZiAocmVzKQogCQllcnIoIlVuYWJsZSB0byBzdGFydCBpbiBzaW5nbGUgbm9kZSBtb2RlXG4iKTsKIAllbHNlCiAJCWluZm8oIlN0YXJ0ZWQgaW4gc2luZ2xlIG5vZGUgbW9kZVxuIik7CkBAIC0yMzYsNDMgKzIxNywzIEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIlRJUEM6IFRyYW5zcGFyZW50IEludGVyIFByb2Nlc3MgQ29tbXVuaWNhdGlvbiIpOwogTU9EVUxFX0xJQ0VOU0UoIkR1YWwgQlNEL0dQTCIpOwogTU9EVUxFX1ZFUlNJT04oVElQQ19NT0RfVkVSKTsKLQotLyogTmF0aXZlIFRJUEMgQVBJIGZvciBrZXJuZWwtc3BhY2UgYXBwbGljYXRpb25zIChzZWUgdGlwYy5oKSAqLwotCi1FWFBPUlRfU1lNQk9MKHRpcGNfYXR0YWNoKTsKLUVYUE9SVF9TWU1CT0wodGlwY19kZXRhY2gpOwotRVhQT1JUX1NZTUJPTCh0aXBjX2NyZWF0ZXBvcnQpOwotRVhQT1JUX1NZTUJPTCh0aXBjX2RlbGV0ZXBvcnQpOwotRVhQT1JUX1NZTUJPTCh0aXBjX293bmlkZW50aXR5KTsKLUVYUE9SVF9TWU1CT0wodGlwY19wb3J0aW1wb3J0YW5jZSk7Ci1FWFBPUlRfU1lNQk9MKHRpcGNfc2V0X3BvcnRpbXBvcnRhbmNlKTsKLUVYUE9SVF9TWU1CT0wodGlwY19wb3J0dW5yZWxpYWJsZSk7Ci1FWFBPUlRfU1lNQk9MKHRpcGNfc2V0X3BvcnR1bnJlbGlhYmxlKTsKLUVYUE9SVF9TWU1CT0wodGlwY19wb3J0dW5yZXR1cm5hYmxlKTsKLUVYUE9SVF9TWU1CT0wodGlwY19zZXRfcG9ydHVucmV0dXJuYWJsZSk7Ci1FWFBPUlRfU1lNQk9MKHRpcGNfcHVibGlzaCk7Ci1FWFBPUlRfU1lNQk9MKHRpcGNfd2l0aGRyYXcpOwotRVhQT1JUX1NZTUJPTCh0aXBjX2Nvbm5lY3QycG9ydCk7Ci1FWFBPUlRfU1lNQk9MKHRpcGNfZGlzY29ubmVjdCk7Ci1FWFBPUlRfU1lNQk9MKHRpcGNfc2h1dGRvd24pOwotRVhQT1JUX1NZTUJPTCh0aXBjX3NlbmQpOwotRVhQT1JUX1NZTUJPTCh0aXBjX3NlbmQybmFtZSk7Ci1FWFBPUlRfU1lNQk9MKHRpcGNfc2VuZDJwb3J0KTsKLUVYUE9SVF9TWU1CT0wodGlwY19tdWx0aWNhc3QpOwotCi0vKiBUSVBDIEFQSSBmb3IgZXh0ZXJuYWwgYmVhcmVycyAoc2VlIHRpcGNfYmVhcmVyLmgpICovCi0KLUVYUE9SVF9TWU1CT0wodGlwY19ibG9ja19iZWFyZXIpOwotRVhQT1JUX1NZTUJPTCh0aXBjX2NvbnRpbnVlKTsKLUVYUE9SVF9TWU1CT0wodGlwY19kaXNhYmxlX2JlYXJlcik7Ci1FWFBPUlRfU1lNQk9MKHRpcGNfZW5hYmxlX2JlYXJlcik7Ci1FWFBPUlRfU1lNQk9MKHRpcGNfcmVjdl9tc2cpOwotRVhQT1JUX1NZTUJPTCh0aXBjX3JlZ2lzdGVyX21lZGlhKTsKLQotLyogVElQQyBBUEkgZm9yIGV4dGVybmFsIEFQSXMgKHNlZSB0aXBjX3BvcnQuaCkgKi8KLQotRVhQT1JUX1NZTUJPTCh0aXBjX2NyZWF0ZXBvcnRfcmF3KTsKLUVYUE9SVF9TWU1CT0wodGlwY19yZWplY3RfbXNnKTsKLUVYUE9SVF9TWU1CT0wodGlwY19zZW5kX2J1Zl9mYXN0KTsKLUVYUE9SVF9TWU1CT0wodGlwY19hY2tub3dsZWRnZSk7Ci0KZGlmZiAtLWdpdCBhL25ldC90aXBjL2NvcmUuaCBiL25ldC90aXBjL2NvcmUuaAppbmRleCBlMTkzODllLi45OTcxNTg1IDEwMDY0NAotLS0gYS9uZXQvdGlwYy9jb3JlLmgKKysrIGIvbmV0L3RpcGMvY29yZS5oCkBAIC0zOSwxMCArMzksNiBAQAogCiAjaW5jbHVkZSA8bGludXgvdGlwYy5oPgogI2luY2x1ZGUgPGxpbnV4L3RpcGNfY29uZmlnLmg+Ci0jaW5jbHVkZSA8bmV0L3RpcGMvdGlwY19tc2cuaD4KLSNpbmNsdWRlIDxuZXQvdGlwYy90aXBjX3BvcnQuaD4KLSNpbmNsdWRlIDxuZXQvdGlwYy90aXBjX2JlYXJlci5oPgotI2luY2x1ZGUgPG5ldC90aXBjL3RpcGMuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CkBAIC02Miw2ICs1OCw5IEBACiAKICNkZWZpbmUgVElQQ19NT0RfVkVSICIyLjAuMCIKIAorc3RydWN0IHRpcGNfbXNnOwkvKiBtc2cuaCAqLworc3RydWN0IHByaW50X2J1ZjsJLyogbG9nLmggKi8KKwogLyoKICAqIFRJUEMgc2FuaXR5IHRlc3QgbWFjcm9zCiAgKi8KQEAgLTg0LDYgKzgzLDcgQEAKICAqICAgICAgIHVzZXItZGVmaW5lZCBidWZmZXJzIGNhbiBiZSBjb25maWd1cmVkIHRvIGRvIHRoZSBzYW1lIHRoaW5nLgogICovCiBleHRlcm4gc3RydWN0IHByaW50X2J1ZiAqY29uc3QgVElQQ19OVUxMOworZXh0ZXJuIHN0cnVjdCBwcmludF9idWYgKmNvbnN0IFRJUENfQ09OUzsKIGV4dGVybiBzdHJ1Y3QgcHJpbnRfYnVmICpjb25zdCBUSVBDX0xPRzsKIAogdm9pZCB0aXBjX3ByaW50ZihzdHJ1Y3QgcHJpbnRfYnVmICosIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKQEAgLTk2LDczICs5NiwzNSBAQAogI2RlZmluZSBUSVBDX09VVFBVVCBUSVBDX0xPRwogI2VuZGlmCiAKLS8qCi0gKiBUSVBDIGNhbiBiZSBjb25maWd1cmVkIHRvIHNlbmQgc3lzdGVtIG1lc3NhZ2VzIHRvIFRJUENfT1VUUFVUCi0gKiBvciB0byB0aGUgc3lzdGVtIGNvbnNvbGUgb25seS4KLSAqLworI2RlZmluZSBlcnIoZm10LCBhcmcuLi4pICB0aXBjX3ByaW50ZihUSVBDX09VVFBVVCwgXAorCQkJCSAgICAgIEtFUk5fRVJSICJUSVBDOiAiIGZtdCwgIyMgYXJnKQorI2RlZmluZSB3YXJuKGZtdCwgYXJnLi4uKSB0aXBjX3ByaW50ZihUSVBDX09VVFBVVCwgXAorCQkJCSAgICAgIEtFUk5fV0FSTklORyAiVElQQzogIiBmbXQsICMjIGFyZykKKyNkZWZpbmUgaW5mbyhmbXQsIGFyZy4uLikgdGlwY19wcmludGYoVElQQ19PVVRQVVQsIFwKKwkJCQkgICAgICBLRVJOX05PVElDRSAiVElQQzogIiBmbXQsICMjIGFyZykKIAogI2lmZGVmIENPTkZJR19USVBDX0RFQlVHCiAKLSNkZWZpbmUgZXJyKGZtdCwgYXJnLi4uKSAgdGlwY19wcmludGYoVElQQ19PVVRQVVQsIFwKLQkJCQkJS0VSTl9FUlIgIlRJUEM6ICIgZm10LCAjIyBhcmcpCi0jZGVmaW5lIHdhcm4oZm10LCBhcmcuLi4pIHRpcGNfcHJpbnRmKFRJUENfT1VUUFVULCBcCi0JCQkJCUtFUk5fV0FSTklORyAiVElQQzogIiBmbXQsICMjIGFyZykKLSNkZWZpbmUgaW5mbyhmbXQsIGFyZy4uLikgdGlwY19wcmludGYoVElQQ19PVVRQVVQsIFwKLQkJCQkJS0VSTl9OT1RJQ0UgIlRJUEM6ICIgZm10LCAjIyBhcmcpCi0KLSNlbHNlCi0KLSNkZWZpbmUgZXJyKGZtdCwgYXJnLi4uKSAgcHJpbnRrKEtFUk5fRVJSICJUSVBDOiAiIGZtdCAsICMjIGFyZykKLSNkZWZpbmUgaW5mbyhmbXQsIGFyZy4uLikgcHJpbnRrKEtFUk5fSU5GTyAiVElQQzogIiBmbXQgLCAjIyBhcmcpCi0jZGVmaW5lIHdhcm4oZm10LCBhcmcuLi4pIHByaW50ayhLRVJOX1dBUk5JTkcgIlRJUEM6ICIgZm10ICwgIyMgYXJnKQotCi0jZW5kaWYKLQogLyoKICAqIERCR19PVVRQVVQgaXMgdGhlIGRlc3RpbmF0aW9uIHByaW50IGJ1ZmZlciBmb3IgZGVidWcgbWVzc2FnZXMuCi0gKiBJdCBkZWZhdWx0cyB0byB0aGUgdGhlIG51bGwgcHJpbnQgYnVmZmVyLCBidXQgY2FuIGJlIHJlZGVmaW5lZAotICogKHR5cGljYWxseSBpbiB0aGUgaW5kaXZpZHVhbCAuYyBmaWxlcyBiZWluZyBkZWJ1Z2dlZCkgdG8gYWxsb3cKLSAqIHNlbGVjdGVkIGRlYnVnIG1lc3NhZ2VzIHRvIGJlIGdlbmVyYXRlZCB3aGVyZSBuZWVkZWQuCiAgKi8KIAogI2lmbmRlZiBEQkdfT1VUUFVUCi0jZGVmaW5lIERCR19PVVRQVVQgVElQQ19OVUxMCisjZGVmaW5lIERCR19PVVRQVVQgVElQQ19MT0cKICNlbmRpZgogCi0vKgotICogVElQQyBjYW4gYmUgY29uZmlndXJlZCB0byBzZW5kIGRlYnVnIG1lc3NhZ2VzIHRvIHRoZSBzcGVjaWZpZWQgcHJpbnQgYnVmZmVyCi0gKiAodHlwaWNhbGx5IERCR19PVVRQVVQpIG9yIHRvIHN1cHByZXNzIHRoZW0gZW50aXJlbHkuCi0gKi8KKyNkZWZpbmUgZGJnKGZtdCwgYXJnLi4uKSAgdGlwY19wcmludGYoREJHX09VVFBVVCwgS0VSTl9ERUJVRyBmbXQsICMjIGFyZyk7CiAKLSNpZmRlZiBDT05GSUdfVElQQ19ERUJVRwotCi0jZGVmaW5lIGRiZyhmbXQsIGFyZy4uLikgIFwKLQlkbyB7IFwKLQkJaWYgKERCR19PVVRQVVQgIT0gVElQQ19OVUxMKSBcCi0JCQl0aXBjX3ByaW50ZihEQkdfT1VUUFVULCBmbXQsICMjIGFyZyk7IFwKLQl9IHdoaWxlICgwKQotI2RlZmluZSBtc2dfZGJnKG1zZywgdHh0KSBcCi0JZG8geyBcCi0JCWlmIChEQkdfT1VUUFVUICE9IFRJUENfTlVMTCkgXAotCQkJdGlwY19tc2dfZGJnKERCR19PVVRQVVQsIG1zZywgdHh0KTsgXAotCX0gd2hpbGUgKDApCi0jZGVmaW5lIGR1bXAoZm10LCBhcmcuLi4pIFwKLQlkbyB7IFwKLQkJaWYgKERCR19PVVRQVVQgIT0gVElQQ19OVUxMKSBcCi0JCQl0aXBjX2R1bXBfZGJnKERCR19PVVRQVVQsIGZtdCwgIyNhcmcpOyBcCi0JfSB3aGlsZSAoMCkKKyNkZWZpbmUgbXNnX2RiZyhtc2csIHR4dCkgdGlwY19tc2dfZGJnKERCR19PVVRQVVQsIG1zZywgdHh0KTsKIAogdm9pZCB0aXBjX21zZ19kYmcoc3RydWN0IHByaW50X2J1ZiAqLCBzdHJ1Y3QgdGlwY19tc2cgKiwgY29uc3QgY2hhciAqKTsKLXZvaWQgdGlwY19kdW1wX2RiZyhzdHJ1Y3QgcHJpbnRfYnVmICosIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKIAogI2Vsc2UKIAogI2RlZmluZSBkYmcoZm10LCBhcmcuLi4pCWRvIHt9IHdoaWxlICgwKQogI2RlZmluZSBtc2dfZGJnKG1zZywgdHh0KQlkbyB7fSB3aGlsZSAoMCkKLSNkZWZpbmUgZHVtcChmbXQsIGFyZy4uLikJZG8ge30gd2hpbGUgKDApCiAKLSNkZWZpbmUgdGlwY19tc2dfZGJnKC4uLikJZG8ge30gd2hpbGUgKDApCi0jZGVmaW5lIHRpcGNfZHVtcF9kYmcoLi4uKQlkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgdGlwY19tc2dfZGJnKGJ1ZiwgbXNnLCB0eHQpIGRvIHt9IHdoaWxlICgwKQogCiAjZW5kaWYKIApAQCAtMTc0LDE0ICsxMzYsMTggQEAKICNkZWZpbmUgRUxJTktDT05HIEVBR0FJTgkvKiBsaW5rIGNvbmdlc3Rpb24gPD0+IHJlc291cmNlIHVuYXZhaWxhYmxlICovCiAKIC8qCisgKiBUSVBDIG9wZXJhdGluZyBtb2RlIHJvdXRpbmVzCisgKi8KKyNkZWZpbmUgVElQQ19OT1RfUlVOTklORyAgMAorI2RlZmluZSBUSVBDX05PREVfTU9ERSAgICAxCisjZGVmaW5lIFRJUENfTkVUX01PREUgICAgIDIKKworLyoKICAqIEdsb2JhbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcwogICovCiAKIGV4dGVybiB1MzIgdGlwY19vd25fYWRkcjsKLWV4dGVybiBpbnQgdGlwY19tYXhfem9uZXM7Ci1leHRlcm4gaW50IHRpcGNfbWF4X2NsdXN0ZXJzOwogZXh0ZXJuIGludCB0aXBjX21heF9ub2RlczsKLWV4dGVybiBpbnQgdGlwY19tYXhfc2xhdmVzOwogZXh0ZXJuIGludCB0aXBjX21heF9wb3J0czsKIGV4dGVybiBpbnQgdGlwY19tYXhfc3Vic2NyaXB0aW9uczsKIGV4dGVybiBpbnQgdGlwY19tYXhfcHVibGljYXRpb25zOwpAQCAtMjQwLDcgKzIwNiw2IEBACiBzdGF0aWMgaW5saW5lIHZvaWQga19pbml0X3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lciwgSGFuZGxlciByb3V0aW5lLAogCQkJCXVuc2lnbmVkIGxvbmcgYXJndW1lbnQpCiB7Ci0JZGJnKCJpbml0aWFsaXppbmcgdGltZXIgJXBcbiIsIHRpbWVyKTsKIAlzZXR1cF90aW1lcih0aW1lciwgcm91dGluZSwgYXJndW1lbnQpOwogfQogCkBAIC0yNjAsNyArMjI1LDYgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGtfc3RhcnRfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyLCB1bnNpZ25lZCBsb25nIG1zZWMpCiB7Ci0JZGJnKCJzdGFydGluZyB0aW1lciAlcCBmb3IgJXVcbiIsIHRpbWVyLCBtc2VjKTsKIAltb2RfdGltZXIodGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKG1zZWMpICsgMSk7CiB9CiAKQEAgLTI3Nyw3ICsyNDEsNiBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQga19jYW5jZWxfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKQogewotCWRiZygiY2FuY2VsbGluZyB0aW1lciAlcFxuIiwgdGltZXIpOwogCWRlbF90aW1lcl9zeW5jKHRpbWVyKTsKIH0KIApAQCAtMjk1LDcgKzI1OCw2IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBrX3Rlcm1fdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKQogewotCWRiZygidGVybWluYXRpbmcgdGltZXIgJXBcbiIsIHRpbWVyKTsKIH0KIAogCmRpZmYgLS1naXQgYS9uZXQvdGlwYy9kYmcuYyBiL25ldC90aXBjL2RiZy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NmY1MWQyLi4wMDAwMDAwCi0tLSBhL25ldC90aXBjL2RiZy5jCisrKyAvZGV2L251bGwKQEAgLTEsNDMyICswLDAgQEAKLS8qCi0gKiBuZXQvdGlwYy9kYmcuYzogVElQQyBwcmludCBidWZmZXIgcm91dGluZXMgZm9yIGRlYnVnZ2luZwotICoKLSAqIENvcHlyaWdodCAoYykgMTk5Ni0yMDA2LCBFcmljc3NvbiBBQgotICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDcsIFdpbmQgUml2ZXIgU3lzdGVtcwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWVzIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVycyBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogQWx0ZXJuYXRpdmVseSwgdGhpcyBzb2Z0d2FyZSBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKCJHUEwiKSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCi0gKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQotICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQotICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvcmUuaCIKLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJkYmcuaCIKLQotLyoKLSAqIFRJUEMgcHJlLWRlZmluZXMgdGhlIGZvbGxvd2luZyBwcmludCBidWZmZXJzOgotICoKLSAqIFRJUENfTlVMTCA6IG51bGwgYnVmZmVyIChpLmUuIHByaW50IG5vd2hlcmUpCi0gKiBUSVBDX0NPTlMgOiBzeXN0ZW0gY29uc29sZQotICogVElQQ19MT0cgIDogVElQQyBsb2cgYnVmZmVyCi0gKgotICogQWRkaXRpb25hbCB1c2VyLWRlZmluZWQgcHJpbnQgYnVmZmVycyBhcmUgYWxzbyBwZXJtaXR0ZWQuCi0gKi8KLQotc3RhdGljIHN0cnVjdCBwcmludF9idWYgbnVsbF9idWYgPSB7IE5VTEwsIDAsIE5VTEwsIDAgfTsKLXN0cnVjdCBwcmludF9idWYgKmNvbnN0IFRJUENfTlVMTCA9ICZudWxsX2J1ZjsKLQotc3RhdGljIHN0cnVjdCBwcmludF9idWYgY29uc19idWYgPSB7IE5VTEwsIDAsIE5VTEwsIDEgfTsKLXN0YXRpYyBzdHJ1Y3QgcHJpbnRfYnVmICpjb25zdCBUSVBDX0NPTlMgPSAmY29uc19idWY7Ci0KLXN0YXRpYyBzdHJ1Y3QgcHJpbnRfYnVmIGxvZ19idWYgPSB7IE5VTEwsIDAsIE5VTEwsIDEgfTsKLXN0cnVjdCBwcmludF9idWYgKmNvbnN0IFRJUENfTE9HID0gJmxvZ19idWY7Ci0KLS8qCi0gKiBMb2NraW5nIHBvbGljeSB3aGVuIHVzaW5nIHByaW50IGJ1ZmZlcnMuCi0gKgotICogMSkgdGlwY19wcmludGYoKSB1c2VzICdwcmludF9sb2NrJyB0byBwcm90ZWN0IGFnYWluc3QgY29uY3VycmVudCBhY2Nlc3MgdG8KLSAqICdwcmludF9zdHJpbmcnIHdoZW4gd3JpdGluZyB0byBhIHByaW50IGJ1ZmZlci4gVGhpcyBhbHNvIHByb3RlY3RzIGFnYWluc3QKLSAqIGNvbmN1cnJlbnQgd3JpdGVzIHRvIHRoZSBwcmludCBidWZmZXIgYmVpbmcgd3JpdHRlbiB0by4KLSAqCi0gKiAyKSB0aXBjX2R1bXAoKSBhbmQgdGlwY19sb2dfWFhYKCkgbGV2ZXJhZ2UgdGhlIGFmb3JlbWVudGlvbmVkCi0gKiB1c2Ugb2YgJ3ByaW50X2xvY2snIHRvIHByb3RlY3QgYWdhaW5zdCBhbGwgdHlwZXMgb2YgY29uY3VycmVudCBvcGVyYXRpb25zCi0gKiBvbiB0aGVpciBhc3NvY2lhdGVkIHByaW50IGJ1ZmZlciAobm90IGp1c3Qgd3JpdGUgb3BlcmF0aW9ucykuCi0gKgotICogTm90ZTogQWxsIHJvdXRpbmVzIG9mIHRoZSBmb3JtIHRpcGNfcHJpbnRidWZfWFhYKCkgYXJlIGxvY2stZnJlZSwgYW5kIHJlbHkKLSAqIG9uIHRoZSBjYWxsZXIgdG8gcHJldmVudCBzaW11bHRhbmVvdXMgdXNlIG9mIHRoZSBwcmludCBidWZmZXIocykgYmVpbmcKLSAqIG1hbmlwdWxhdGVkLgotICovCi0KLXN0YXRpYyBjaGFyIHByaW50X3N0cmluZ1tUSVBDX1BCX01BWF9TVFJdOwotc3RhdGljIERFRklORV9TUElOTE9DSyhwcmludF9sb2NrKTsKLQotc3RhdGljIHZvaWQgdGlwY19wcmludGJ1Zl9yZXNldChzdHJ1Y3QgcHJpbnRfYnVmICpwYik7Ci1zdGF0aWMgaW50ICB0aXBjX3ByaW50YnVmX2VtcHR5KHN0cnVjdCBwcmludF9idWYgKnBiKTsKLXN0YXRpYyB2b2lkIHRpcGNfcHJpbnRidWZfbW92ZShzdHJ1Y3QgcHJpbnRfYnVmICpwYl90bywKLQkJCSAgICAgICBzdHJ1Y3QgcHJpbnRfYnVmICpwYl9mcm9tKTsKLQotI2RlZmluZSBGT1JNQVQoUFRSLExFTixGTVQpIFwKLXtcCi0gICAgICAgdmFfbGlzdCBhcmdzO1wKLSAgICAgICB2YV9zdGFydChhcmdzLCBGTVQpO1wKLSAgICAgICBMRU4gPSB2c3ByaW50ZihQVFIsIEZNVCwgYXJncyk7XAotICAgICAgIHZhX2VuZChhcmdzKTtcCi0gICAgICAgKihQVFIgKyBMRU4pID0gJ1wwJztcCi19Ci0KLS8qKgotICogdGlwY19wcmludGJ1Zl9pbml0IC0gaW5pdGlhbGl6ZSBwcmludCBidWZmZXIgdG8gZW1wdHkKLSAqIEBwYjogcG9pbnRlciB0byBwcmludCBidWZmZXIgc3RydWN0dXJlCi0gKiBAcmF3OiBwb2ludGVyIHRvIGNoYXJhY3RlciBhcnJheSB1c2VkIGJ5IHByaW50IGJ1ZmZlcgotICogQHNpemU6IHNpemUgb2YgY2hhcmFjdGVyIGFycmF5Ci0gKgotICogTm90ZTogSWYgdGhlIGNoYXJhY3RlciBhcnJheSBpcyB0b28gc21hbGwgKG9yIGFic2VudCksIHRoZSBwcmludCBidWZmZXIKLSAqIGJlY29tZXMgYSBudWxsIGRldmljZSB0aGF0IGRpc2NhcmRzIGFueXRoaW5nIHdyaXR0ZW4gdG8gaXQuCi0gKi8KLQotdm9pZCB0aXBjX3ByaW50YnVmX2luaXQoc3RydWN0IHByaW50X2J1ZiAqcGIsIGNoYXIgKnJhdywgdTMyIHNpemUpCi17Ci0JcGItPmJ1ZiA9IHJhdzsKLQlwYi0+Y3JzID0gcmF3OwotCXBiLT5zaXplID0gc2l6ZTsKLQlwYi0+ZWNobyA9IDA7Ci0KLQlpZiAoc2l6ZSA8IFRJUENfUEJfTUlOX1NJWkUpIHsKLQkJcGItPmJ1ZiA9IE5VTEw7Ci0JfSBlbHNlIGlmIChyYXcpIHsKLQkJcGItPmJ1ZlswXSA9IDA7Ci0JCXBiLT5idWZbc2l6ZSAtIDFdID0gfjA7Ci0JfQotfQotCi0vKioKLSAqIHRpcGNfcHJpbnRidWZfcmVzZXQgLSByZWluaXRpYWxpemUgcHJpbnQgYnVmZmVyIHRvIGVtcHR5IHN0YXRlCi0gKiBAcGI6IHBvaW50ZXIgdG8gcHJpbnQgYnVmZmVyIHN0cnVjdHVyZQotICovCi0KLXN0YXRpYyB2b2lkIHRpcGNfcHJpbnRidWZfcmVzZXQoc3RydWN0IHByaW50X2J1ZiAqcGIpCi17Ci0JaWYgKHBiLT5idWYpIHsKLQkJcGItPmNycyA9IHBiLT5idWY7Ci0JCXBiLT5idWZbMF0gPSAwOwotCQlwYi0+YnVmW3BiLT5zaXplIC0gMV0gPSB+MDsKLQl9Ci19Ci0KLS8qKgotICogdGlwY19wcmludGJ1Zl9lbXB0eSAtIHRlc3QgaWYgcHJpbnQgYnVmZmVyIGlzIGluIGVtcHR5IHN0YXRlCi0gKiBAcGI6IHBvaW50ZXIgdG8gcHJpbnQgYnVmZmVyIHN0cnVjdHVyZQotICoKLSAqIFJldHVybnMgbm9uLXplcm8gaWYgcHJpbnQgYnVmZmVyIGlzIGVtcHR5LgotICovCi0KLXN0YXRpYyBpbnQgdGlwY19wcmludGJ1Zl9lbXB0eShzdHJ1Y3QgcHJpbnRfYnVmICpwYikKLXsKLQlyZXR1cm4gIXBiLT5idWYgfHwgKHBiLT5jcnMgPT0gcGItPmJ1Zik7Ci19Ci0KLS8qKgotICogdGlwY19wcmludGJ1Zl92YWxpZGF0ZSAtIGNoZWNrIGZvciBwcmludCBidWZmZXIgb3ZlcmZsb3cKLSAqIEBwYjogcG9pbnRlciB0byBwcmludCBidWZmZXIgc3RydWN0dXJlCi0gKgotICogVmVyaWZpZXMgdGhhdCBhIHByaW50IGJ1ZmZlciBoYXMgY2FwdHVyZWQgYWxsIGRhdGEgd3JpdHRlbiB0byBpdC4KLSAqIElmIGRhdGEgaGFzIGJlZW4gbG9zdCwgbGluZWFyaXplIGJ1ZmZlciBhbmQgcHJlcGVuZCBhbiBlcnJvciBtZXNzYWdlCi0gKgotICogUmV0dXJucyBsZW5ndGggb2YgcHJpbnQgYnVmZmVyIGRhdGEgc3RyaW5nIChpbmNsdWRpbmcgdHJhaWxpbmcgTlVMKQotICovCi0KLWludCB0aXBjX3ByaW50YnVmX3ZhbGlkYXRlKHN0cnVjdCBwcmludF9idWYgKnBiKQotewotCWNoYXIgKmVyciA9ICJcblxuKioqIFBSSU5UIEJVRkZFUiBPVkVSRkxPVyAqKipcblxuIjsKLQljaGFyICpjcF9idWY7Ci0Jc3RydWN0IHByaW50X2J1ZiBjYjsKLQotCWlmICghcGItPmJ1ZikKLQkJcmV0dXJuIDA7Ci0KLQlpZiAocGItPmJ1ZltwYi0+c2l6ZSAtIDFdID09IDApIHsKLQkJY3BfYnVmID0ga21hbGxvYyhwYi0+c2l6ZSwgR0ZQX0FUT01JQyk7Ci0JCWlmIChjcF9idWYpIHsKLQkJCXRpcGNfcHJpbnRidWZfaW5pdCgmY2IsIGNwX2J1ZiwgcGItPnNpemUpOwotCQkJdGlwY19wcmludGJ1Zl9tb3ZlKCZjYiwgcGIpOwotCQkJdGlwY19wcmludGJ1Zl9tb3ZlKHBiLCAmY2IpOwotCQkJa2ZyZWUoY3BfYnVmKTsKLQkJCW1lbWNweShwYi0+YnVmLCBlcnIsIHN0cmxlbihlcnIpKTsKLQkJfSBlbHNlIHsKLQkJCXRpcGNfcHJpbnRidWZfcmVzZXQocGIpOwotCQkJdGlwY19wcmludGYocGIsIGVycik7Ci0JCX0KLQl9Ci0JcmV0dXJuIHBiLT5jcnMgLSBwYi0+YnVmICsgMTsKLX0KLQotLyoqCi0gKiB0aXBjX3ByaW50YnVmX21vdmUgLSBtb3ZlIHByaW50IGJ1ZmZlciBjb250ZW50cyB0byBhbm90aGVyIHByaW50IGJ1ZmZlcgotICogQHBiX3RvOiBwb2ludGVyIHRvIGRlc3RpbmF0aW9uIHByaW50IGJ1ZmZlciBzdHJ1Y3R1cmUKLSAqIEBwYl9mcm9tOiBwb2ludGVyIHRvIHNvdXJjZSBwcmludCBidWZmZXIgc3RydWN0dXJlCi0gKgotICogQ3VycmVudCBjb250ZW50cyBvZiBkZXN0aW5hdGlvbiBwcmludCBidWZmZXIgKGlmIGFueSkgYXJlIGRpc2NhcmRlZC4KLSAqIFNvdXJjZSBwcmludCBidWZmZXIgYmVjb21lcyBlbXB0eSBpZiBhIHN1Y2Nlc3NmdWwgbW92ZSBvY2N1cnMuCi0gKi8KLQotc3RhdGljIHZvaWQgdGlwY19wcmludGJ1Zl9tb3ZlKHN0cnVjdCBwcmludF9idWYgKnBiX3RvLAotCQkJICAgICAgIHN0cnVjdCBwcmludF9idWYgKnBiX2Zyb20pCi17Ci0JaW50IGxlbjsKLQotCS8qIEhhbmRsZSB0aGUgY2FzZXMgd2hlcmUgY29udGVudHMgY2FuJ3QgYmUgbW92ZWQgKi8KLQotCWlmICghcGJfdG8tPmJ1ZikKLQkJcmV0dXJuOwotCi0JaWYgKCFwYl9mcm9tLT5idWYpIHsKLQkJdGlwY19wcmludGJ1Zl9yZXNldChwYl90byk7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAocGJfdG8tPnNpemUgPCBwYl9mcm9tLT5zaXplKSB7Ci0JCXN0cmNweShwYl90by0+YnVmLCAiKioqIFBSSU5UIEJVRkZFUiBNT1ZFIEVSUk9SICoqKiIpOwotCQlwYl90by0+YnVmW3BiX3RvLT5zaXplIC0gMV0gPSB+MDsKLQkJcGJfdG8tPmNycyA9IHN0cmNocihwYl90by0+YnVmLCAwKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qIENvcHkgZGF0YSBmcm9tIGNoYXIgYWZ0ZXIgY3Vyc29yIHRvIGVuZCAoaWYgdXNlZCkgKi8KLQotCWxlbiA9IHBiX2Zyb20tPmJ1ZiArIHBiX2Zyb20tPnNpemUgLSBwYl9mcm9tLT5jcnMgLSAyOwotCWlmICgocGJfZnJvbS0+YnVmW3BiX2Zyb20tPnNpemUgLSAxXSA9PSAwKSAmJiAobGVuID4gMCkpIHsKLQkJc3RyY3B5KHBiX3RvLT5idWYsIHBiX2Zyb20tPmNycyArIDEpOwotCQlwYl90by0+Y3JzID0gcGJfdG8tPmJ1ZiArIGxlbjsKLQl9IGVsc2UKLQkJcGJfdG8tPmNycyA9IHBiX3RvLT5idWY7Ci0KLQkvKiBDb3B5IGRhdGEgZnJvbSBzdGFydCB0byBjdXJzb3IgKGFsd2F5cykgKi8KLQotCWxlbiA9IHBiX2Zyb20tPmNycyAtIHBiX2Zyb20tPmJ1ZjsKLQlzdHJjcHkocGJfdG8tPmNycywgcGJfZnJvbS0+YnVmKTsKLQlwYl90by0+Y3JzICs9IGxlbjsKLQotCXRpcGNfcHJpbnRidWZfcmVzZXQocGJfZnJvbSk7Ci19Ci0KLS8qKgotICogdGlwY19wcmludGYgLSBhcHBlbmQgZm9ybWF0dGVkIG91dHB1dCB0byBwcmludCBidWZmZXIKLSAqIEBwYjogcG9pbnRlciB0byBwcmludCBidWZmZXIKLSAqIEBmbXQ6IGZvcm1hdHRlZCBpbmZvIHRvIGJlIHByaW50ZWQKLSAqLwotCi12b2lkIHRpcGNfcHJpbnRmKHN0cnVjdCBwcmludF9idWYgKnBiLCBjb25zdCBjaGFyICpmbXQsIC4uLikKLXsKLQlpbnQgY2hhcnNfdG9fYWRkOwotCWludCBjaGFyc19sZWZ0OwotCWNoYXIgc2F2ZV9jaGFyOwotCi0Jc3Bpbl9sb2NrX2JoKCZwcmludF9sb2NrKTsKLQotCUZPUk1BVChwcmludF9zdHJpbmcsIGNoYXJzX3RvX2FkZCwgZm10KTsKLQlpZiAoY2hhcnNfdG9fYWRkID49IFRJUENfUEJfTUFYX1NUUikKLQkJc3RyY3B5KHByaW50X3N0cmluZywgIioqKiBQUklOVCBCVUZGRVIgU1RSSU5HIFRPTyBMT05HICoqKiIpOwotCi0JaWYgKHBiLT5idWYpIHsKLQkJY2hhcnNfbGVmdCA9IHBiLT5idWYgKyBwYi0+c2l6ZSAtIHBiLT5jcnMgLSAxOwotCQlpZiAoY2hhcnNfdG9fYWRkIDw9IGNoYXJzX2xlZnQpIHsKLQkJCXN0cmNweShwYi0+Y3JzLCBwcmludF9zdHJpbmcpOwotCQkJcGItPmNycyArPSBjaGFyc190b19hZGQ7Ci0JCX0gZWxzZSBpZiAoY2hhcnNfdG9fYWRkID49IChwYi0+c2l6ZSAtIDEpKSB7Ci0JCQlzdHJjcHkocGItPmJ1ZiwgcHJpbnRfc3RyaW5nICsgY2hhcnNfdG9fYWRkICsgMQotCQkJICAgICAgIC0gcGItPnNpemUpOwotCQkJcGItPmNycyA9IHBiLT5idWYgKyBwYi0+c2l6ZSAtIDE7Ci0JCX0gZWxzZSB7Ci0JCQlzdHJjcHkocGItPmJ1ZiwgcHJpbnRfc3RyaW5nICsgY2hhcnNfbGVmdCk7Ci0JCQlzYXZlX2NoYXIgPSBwcmludF9zdHJpbmdbY2hhcnNfbGVmdF07Ci0JCQlwcmludF9zdHJpbmdbY2hhcnNfbGVmdF0gPSAwOwotCQkJc3RyY3B5KHBiLT5jcnMsIHByaW50X3N0cmluZyk7Ci0JCQlwcmludF9zdHJpbmdbY2hhcnNfbGVmdF0gPSBzYXZlX2NoYXI7Ci0JCQlwYi0+Y3JzID0gcGItPmJ1ZiArIGNoYXJzX3RvX2FkZCAtIGNoYXJzX2xlZnQ7Ci0JCX0KLQl9Ci0KLQlpZiAocGItPmVjaG8pCi0JCXByaW50aygiJXMiLCBwcmludF9zdHJpbmcpOwotCi0Jc3Bpbl91bmxvY2tfYmgoJnByaW50X2xvY2spOwotfQotCi0jaWZkZWYgQ09ORklHX1RJUENfREVCVUcKLQotLyoqCi0gKiBwcmludF90b19jb25zb2xlIC0gd3JpdGUgc3RyaW5nIG9mIGJ5dGVzIHRvIGNvbnNvbGUgaW4gbXVsdGlwbGUgY2h1bmtzCi0gKi8KLQotc3RhdGljIHZvaWQgcHJpbnRfdG9fY29uc29sZShjaGFyICpjcnMsIGludCBsZW4pCi17Ci0JaW50IHJlc3QgPSBsZW47Ci0KLQl3aGlsZSAocmVzdCA+IDApIHsKLQkJaW50IHN6ID0gcmVzdCA8IFRJUENfUEJfTUFYX1NUUiA/IHJlc3QgOiBUSVBDX1BCX01BWF9TVFI7Ci0JCWNoYXIgYyA9IGNyc1tzel07Ci0KLQkJY3JzW3N6XSA9IDA7Ci0JCXByaW50aygoY29uc3QgY2hhciAqKWNycyk7Ci0JCWNyc1tzel0gPSBjOwotCQlyZXN0IC09IHN6OwotCQljcnMgKz0gc3o7Ci0JfQotfQotCi0vKioKLSAqIHByaW50YnVmX2R1bXAgLSB3cml0ZSBwcmludCBidWZmZXIgY29udGVudHMgdG8gY29uc29sZQotICovCi0KLXN0YXRpYyB2b2lkIHByaW50YnVmX2R1bXAoc3RydWN0IHByaW50X2J1ZiAqcGIpCi17Ci0JaW50IGxlbjsKLQotCWlmICghcGItPmJ1ZikgewotCQlwcmludGsoIioqKiBQUklOVCBCVUZGRVIgTk9UIEFMTE9DQVRFRCAqKioiKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qIER1bXAgcHJpbnQgYnVmZmVyIGZyb20gY2hhciBhZnRlciBjdXJzb3IgdG8gZW5kIChpZiB1c2VkKSAqLwotCi0JbGVuID0gcGItPmJ1ZiArIHBiLT5zaXplIC0gcGItPmNycyAtIDI7Ci0JaWYgKChwYi0+YnVmW3BiLT5zaXplIC0gMV0gPT0gMCkgJiYgKGxlbiA+IDApKQotCQlwcmludF90b19jb25zb2xlKHBiLT5jcnMgKyAxLCBsZW4pOwotCi0JLyogRHVtcCBwcmludCBidWZmZXIgZnJvbSBzdGFydCB0byBjdXJzb3IgKGFsd2F5cykgKi8KLQotCWxlbiA9IHBiLT5jcnMgLSBwYi0+YnVmOwotCXByaW50X3RvX2NvbnNvbGUocGItPmJ1ZiwgbGVuKTsKLX0KLQotLyoqCi0gKiB0aXBjX2R1bXBfZGJnIC0gZHVtcCAobm9uLWNvbnNvbGUpIHByaW50IGJ1ZmZlciB0byBjb25zb2xlCi0gKiBAcGI6IHBvaW50ZXIgdG8gcHJpbnQgYnVmZmVyCi0gKi8KLQotdm9pZCB0aXBjX2R1bXBfZGJnKHN0cnVjdCBwcmludF9idWYgKnBiLCBjb25zdCBjaGFyICpmbXQsIC4uLikKLXsKLQlpbnQgbGVuOwotCi0JaWYgKHBiID09IFRJUENfQ09OUykKLQkJcmV0dXJuOwotCi0Jc3Bpbl9sb2NrX2JoKCZwcmludF9sb2NrKTsKLQotCUZPUk1BVChwcmludF9zdHJpbmcsIGxlbiwgZm10KTsKLQlwcmludGsocHJpbnRfc3RyaW5nKTsKLQotCXByaW50aygiXG4tLS0tIFN0YXJ0IG9mICVzIGxvZyBkdW1wIC0tLS1cblxuIiwKLQkgICAgICAgKHBiID09IFRJUENfTE9HKSA/ICJnbG9iYWwiIDogImxvY2FsIik7Ci0JcHJpbnRidWZfZHVtcChwYik7Ci0JdGlwY19wcmludGJ1Zl9yZXNldChwYik7Ci0JcHJpbnRrKCJcbi0tLS0gRW5kIG9mIGR1bXAgLS0tLVxuIik7Ci0KLQlzcGluX3VubG9ja19iaCgmcHJpbnRfbG9jayk7Ci19Ci0KLSNlbmRpZgotCi0vKioKLSAqIHRpcGNfbG9nX3Jlc2l6ZSAtIGNoYW5nZSB0aGUgc2l6ZSBvZiB0aGUgVElQQyBsb2cgYnVmZmVyCi0gKiBAbG9nX3NpemU6IHByaW50IGJ1ZmZlciBzaXplIHRvIHVzZQotICovCi0KLWludCB0aXBjX2xvZ19yZXNpemUoaW50IGxvZ19zaXplKQotewotCWludCByZXMgPSAwOwotCi0Jc3Bpbl9sb2NrX2JoKCZwcmludF9sb2NrKTsKLQlpZiAoVElQQ19MT0ctPmJ1ZikgewotCQlrZnJlZShUSVBDX0xPRy0+YnVmKTsKLQkJVElQQ19MT0ctPmJ1ZiA9IE5VTEw7Ci0JfQotCWlmIChsb2dfc2l6ZSkgewotCQlpZiAobG9nX3NpemUgPCBUSVBDX1BCX01JTl9TSVpFKQotCQkJbG9nX3NpemUgPSBUSVBDX1BCX01JTl9TSVpFOwotCQlyZXMgPSBUSVBDX0xPRy0+ZWNobzsKLQkJdGlwY19wcmludGJ1Zl9pbml0KFRJUENfTE9HLCBrbWFsbG9jKGxvZ19zaXplLCBHRlBfQVRPTUlDKSwKLQkJCQkgICBsb2dfc2l6ZSk7Ci0JCVRJUENfTE9HLT5lY2hvID0gcmVzOwotCQlyZXMgPSAhVElQQ19MT0ctPmJ1ZjsKLQl9Ci0Jc3Bpbl91bmxvY2tfYmgoJnByaW50X2xvY2spOwotCi0JcmV0dXJuIHJlczsKLX0KLQotLyoqCi0gKiB0aXBjX2xvZ19yZXNpemVfY21kIC0gcmVjb25maWd1cmUgc2l6ZSBvZiBUSVBDIGxvZyBidWZmZXIKLSAqLwotCi1zdHJ1Y3Qgc2tfYnVmZiAqdGlwY19sb2dfcmVzaXplX2NtZChjb25zdCB2b2lkICpyZXFfdGx2X2FyZWEsIGludCByZXFfdGx2X3NwYWNlKQotewotCXUzMiB2YWx1ZTsKLQotCWlmICghVExWX0NIRUNLKHJlcV90bHZfYXJlYSwgcmVxX3Rsdl9zcGFjZSwgVElQQ19UTFZfVU5TSUdORUQpKQotCQlyZXR1cm4gdGlwY19jZmdfcmVwbHlfZXJyb3Jfc3RyaW5nKFRJUENfQ0ZHX1RMVl9FUlJPUik7Ci0KLQl2YWx1ZSA9IG50b2hsKCooX19iZTMyICopVExWX0RBVEEocmVxX3Rsdl9hcmVhKSk7Ci0JaWYgKHZhbHVlICE9IGRlbGltaXQodmFsdWUsIDAsIDMyNzY4KSkKLQkJcmV0dXJuIHRpcGNfY2ZnX3JlcGx5X2Vycm9yX3N0cmluZyhUSVBDX0NGR19JTlZBTElEX1ZBTFVFCi0JCQkJCQkgICAiIChsb2cgc2l6ZSBtdXN0IGJlIDAtMzI3NjgpIik7Ci0JaWYgKHRpcGNfbG9nX3Jlc2l6ZSh2YWx1ZSkpCi0JCXJldHVybiB0aXBjX2NmZ19yZXBseV9lcnJvcl9zdHJpbmcoCi0JCQkidW5hYmxlIHRvIGNyZWF0ZSBzcGVjaWZpZWQgbG9nIChsb2cgc2l6ZSBpcyBub3cgMCkiKTsKLQlyZXR1cm4gdGlwY19jZmdfcmVwbHlfbm9uZSgpOwotfQotCi0vKioKLSAqIHRpcGNfbG9nX2R1bXAgLSBjYXB0dXJlIFRJUEMgbG9nIGJ1ZmZlciBjb250ZW50cyBpbiBjb25maWd1cmF0aW9uIG1lc3NhZ2UKLSAqLwotCi1zdHJ1Y3Qgc2tfYnVmZiAqdGlwY19sb2dfZHVtcCh2b2lkKQotewotCXN0cnVjdCBza19idWZmICpyZXBseTsKLQotCXNwaW5fbG9ja19iaCgmcHJpbnRfbG9jayk7Ci0JaWYgKCFUSVBDX0xPRy0+YnVmKSB7Ci0JCXNwaW5fdW5sb2NrX2JoKCZwcmludF9sb2NrKTsKLQkJcmVwbHkgPSB0aXBjX2NmZ19yZXBseV91bHRyYV9zdHJpbmcoImxvZyBub3QgYWN0aXZhdGVkXG4iKTsKLQl9IGVsc2UgaWYgKHRpcGNfcHJpbnRidWZfZW1wdHkoVElQQ19MT0cpKSB7Ci0JCXNwaW5fdW5sb2NrX2JoKCZwcmludF9sb2NrKTsKLQkJcmVwbHkgPSB0aXBjX2NmZ19yZXBseV91bHRyYV9zdHJpbmcoImxvZyBpcyBlbXB0eVxuIik7Ci0JfQotCWVsc2UgewotCQlzdHJ1Y3QgdGx2X2Rlc2MgKnJlcF90bHY7Ci0JCXN0cnVjdCBwcmludF9idWYgcGI7Ci0JCWludCBzdHJfbGVuOwotCi0JCXN0cl9sZW4gPSBtaW4oVElQQ19MT0ctPnNpemUsIDMyNzY4dSk7Ci0JCXNwaW5fdW5sb2NrX2JoKCZwcmludF9sb2NrKTsKLQkJcmVwbHkgPSB0aXBjX2NmZ19yZXBseV9hbGxvYyhUTFZfU1BBQ0Uoc3RyX2xlbikpOwotCQlpZiAocmVwbHkpIHsKLQkJCXJlcF90bHYgPSAoc3RydWN0IHRsdl9kZXNjICopcmVwbHktPmRhdGE7Ci0JCQl0aXBjX3ByaW50YnVmX2luaXQoJnBiLCBUTFZfREFUQShyZXBfdGx2KSwgc3RyX2xlbik7Ci0JCQlzcGluX2xvY2tfYmgoJnByaW50X2xvY2spOwotCQkJdGlwY19wcmludGJ1Zl9tb3ZlKCZwYiwgVElQQ19MT0cpOwotCQkJc3Bpbl91bmxvY2tfYmgoJnByaW50X2xvY2spOwotCQkJc3RyX2xlbiA9IHN0cmxlbihUTFZfREFUQShyZXBfdGx2KSkgKyAxOwotCQkJc2tiX3B1dChyZXBseSwgVExWX1NQQUNFKHN0cl9sZW4pKTsKLQkJCVRMVl9TRVQocmVwX3RsdiwgVElQQ19UTFZfVUxUUkFfU1RSSU5HLCBOVUxMLCBzdHJfbGVuKTsKLQkJfQotCX0KLQlyZXR1cm4gcmVwbHk7Ci19Ci0KZGlmZiAtLWdpdCBhL25ldC90aXBjL2RiZy5oIGIvbmV0L3RpcGMvZGJnLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiYTZiYTguLjAwMDAwMDAKLS0tIGEvbmV0L3RpcGMvZGJnLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0vKgotICogbmV0L3RpcGMvZGJnLmg6IEluY2x1ZGUgZmlsZSBmb3IgVElQQyBwcmludCBidWZmZXIgcm91dGluZXMKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTctMjAwNiwgRXJpY3Nzb24gQUIKLSAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA3LCBXaW5kIFJpdmVyIFN5c3RlbXMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lcyBvZiB0aGUgY29weXJpZ2h0IGhvbGRlcnMgbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIEFsdGVybmF0aXZlbHksIHRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQotICogU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKLSAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKLSAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgX1RJUENfREJHX0gKLSNkZWZpbmUgX1RJUENfREJHX0gKLQotLyoqCi0gKiBzdHJ1Y3QgcHJpbnRfYnVmIC0gVElQQyBwcmludCBidWZmZXIgc3RydWN0dXJlCi0gKiBAYnVmOiBwb2ludGVyIHRvIGNoYXJhY3RlciBhcnJheSBjb250YWluaW5nIHByaW50IGJ1ZmZlciBjb250ZW50cwotICogQHNpemU6IHNpemUgb2YgY2hhcmFjdGVyIGFycmF5Ci0gKiBAY3JzOiBwb2ludGVyIHRvIGZpcnN0IHVudXNlZCBzcGFjZSBpbiBjaGFyYWN0ZXIgYXJyYXkgKGkuZS4gZmluYWwgTlVMKQotICogQGVjaG86IGVjaG8gb3V0cHV0IHRvIHN5c3RlbSBjb25zb2xlIGlmIG5vbi16ZXJvCi0gKi8KLQotc3RydWN0IHByaW50X2J1ZiB7Ci0JY2hhciAqYnVmOwotCXUzMiBzaXplOwotCWNoYXIgKmNyczsKLQlpbnQgZWNobzsKLX07Ci0KLSNkZWZpbmUgVElQQ19QQl9NSU5fU0laRSA2NAkvKiBtaW5pbXVtIHNpemUgZm9yIGEgcHJpbnQgYnVmZmVyJ3MgYXJyYXkgKi8KLSNkZWZpbmUgVElQQ19QQl9NQVhfU1RSIDUxMgkvKiBtYXggcHJpbnRhYmxlIHN0cmluZyAod2l0aCB0cmFpbGluZyBOVUwpICovCi0KLXZvaWQgdGlwY19wcmludGJ1Zl9pbml0KHN0cnVjdCBwcmludF9idWYgKnBiLCBjaGFyICpidWYsIHUzMiBzaXplKTsKLWludCAgdGlwY19wcmludGJ1Zl92YWxpZGF0ZShzdHJ1Y3QgcHJpbnRfYnVmICpwYik7Ci0KLWludCB0aXBjX2xvZ19yZXNpemUoaW50IGxvZ19zaXplKTsKLQotc3RydWN0IHNrX2J1ZmYgKnRpcGNfbG9nX3Jlc2l6ZV9jbWQoY29uc3Qgdm9pZCAqcmVxX3Rsdl9hcmVhLAotCQkJCSAgICBpbnQgcmVxX3Rsdl9zcGFjZSk7Ci1zdHJ1Y3Qgc2tfYnVmZiAqdGlwY19sb2dfZHVtcCh2b2lkKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvdGlwYy9kaXNjb3Zlci5jIGIvbmV0L3RpcGMvZGlzY292ZXIuYwppbmRleCA0YTdjZDM3Li5mYTAyNmJkIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9kaXNjb3Zlci5jCisrKyBiL25ldC90aXBjL2Rpc2NvdmVyLmMKQEAgLTM1LDEyICszNSw4IEBACiAgKi8KIAogI2luY2x1ZGUgImNvcmUuaCIKLSNpbmNsdWRlICJkYmcuaCIKICNpbmNsdWRlICJsaW5rLmgiCi0jaW5jbHVkZSAiem9uZS5oIgogI2luY2x1ZGUgImRpc2NvdmVyLmgiCi0jaW5jbHVkZSAicG9ydC5oIgotI2luY2x1ZGUgIm5hbWVfdGFibGUuaCIKIAogI2RlZmluZSBUSVBDX0xJTktfUkVRX0lOSVQJMTI1CS8qIG1pbiBkZWxheSBkdXJpbmcgYmVhcmVyIHN0YXJ0IHVwICovCiAjZGVmaW5lIFRJUENfTElOS19SRVFfRkFTVAkyMDAwCS8qIG5vcm1hbCBkZWxheSBpZiBiZWFyZXIgaGFzIG5vIGxpbmtzICovCkBAIC0xMzQsOCArMTMwLDcgQEAKIAl1MzIgbmV0X2lkID0gbXNnX2JjX25ldGlkKG1zZyk7CiAJdTMyIHR5cGUgPSBtc2dfdHlwZShtc2cpOwogCi0JbXNnX2dldF9tZWRpYV9hZGRyKG1zZywmbWVkaWFfYWRkcik7Ci0JbXNnX2RiZyhtc2csICJSRUNWOiIpOworCW1zZ19nZXRfbWVkaWFfYWRkcihtc2csICZtZWRpYV9hZGRyKTsKIAlidWZfZGlzY2FyZChidWYpOwogCiAJaWYgKG5ldF9pZCAhPSB0aXBjX25ldF9pZCkKQEAgLTE1MSwxMCArMTQ2LDYgQEAKIAl9CiAJaWYgKCF0aXBjX2luX3Njb3BlKGRlc3QsIHRpcGNfb3duX2FkZHIpKQogCQlyZXR1cm47Ci0JaWYgKGlzX3NsYXZlKHRpcGNfb3duX2FkZHIpICYmIGlzX3NsYXZlKG9yaWcpKQotCQlyZXR1cm47Ci0JaWYgKGlzX3NsYXZlKG9yaWcpICYmICFpbl9vd25fY2x1c3RlcihvcmlnKSkKLQkJcmV0dXJuOwogCWlmIChpbl9vd25fY2x1c3RlcihvcmlnKSkgewogCQkvKiBBbHdheXMgYWNjZXB0IGxpbmsgaGVyZSAqLwogCQlzdHJ1Y3Qgc2tfYnVmZiAqcmJ1ZjsKQEAgLTE2Miw3ICsxNTMsNiBAQAogCQlzdHJ1Y3QgdGlwY19ub2RlICpuX3B0ciA9IHRpcGNfbm9kZV9maW5kKG9yaWcpOwogCQlpbnQgbGlua19mdWxseV91cDsKIAotCQlkYmcoIiBpbiBvd24gY2x1c3RlclxuIik7CiAJCWlmIChuX3B0ciA9PSBOVUxMKSB7CiAJCQluX3B0ciA9IHRpcGNfbm9kZV9jcmVhdGUob3JpZyk7CiAJCQlpZiAoIW5fcHRyKQpAQCAtMTc5LDcgKzE2OSw2IEBACiAKIAkJbGluayA9IG5fcHRyLT5saW5rc1tiX3B0ci0+aWRlbnRpdHldOwogCQlpZiAoIWxpbmspIHsKLQkJCWRiZygiY3JlYXRpbmcgbGlua1xuIik7CiAJCQlsaW5rID0gdGlwY19saW5rX2NyZWF0ZShiX3B0ciwgb3JpZywgJm1lZGlhX2FkZHIpOwogCQkJaWYgKCFsaW5rKSB7CiAJCQkJc3Bpbl91bmxvY2tfYmgoJm5fcHRyLT5sb2NrKTsKQEAgLTIwNCw3ICsxOTMsNiBAQAogCQkJcmV0dXJuOwogCQlyYnVmID0gdGlwY19kaXNjX2luaXRfbXNnKERTQ19SRVNQX01TRywgMSwgb3JpZywgYl9wdHIpOwogCQlpZiAocmJ1ZiAhPSBOVUxMKSB7Ci0JCQltc2dfZGJnKGJ1Zl9tc2cocmJ1ZiksIlNFTkQ6Iik7CiAJCQliX3B0ci0+bWVkaWEtPnNlbmRfbXNnKHJidWYsICZiX3B0ci0+cHVibCwgJm1lZGlhX2FkZHIpOwogCQkJYnVmX2Rpc2NhcmQocmJ1Zik7CiAJCX0KZGlmZiAtLWdpdCBhL25ldC90aXBjL2Rpc2NvdmVyLmggYi9uZXQvdGlwYy9kaXNjb3Zlci5oCmluZGV4IGY4ZTc1MDYuLmQyYzNjZmYgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL2Rpc2NvdmVyLmgKKysrIGIvbmV0L3RpcGMvZGlzY292ZXIuaApAQCAtMzcsOCArMzcsNiBAQAogI2lmbmRlZiBfVElQQ19ESVNDT1ZFUl9ICiAjZGVmaW5lIF9USVBDX0RJU0NPVkVSX0gKIAotI2luY2x1ZGUgImNvcmUuaCIKLQogc3RydWN0IGxpbmtfcmVxOwogCiBzdHJ1Y3QgbGlua19yZXEgKnRpcGNfZGlzY19pbml0X2xpbmtfcmVxKHN0cnVjdCBiZWFyZXIgKmJfcHRyLApkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvZXRoX21lZGlhLmMgYi9uZXQvdGlwYy9ldGhfbWVkaWEuYwppbmRleCA2ZTk4OGJhLi5iNjkwOTJlIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9ldGhfbWVkaWEuYworKysgYi9uZXQvdGlwYy9ldGhfbWVkaWEuYwpAQCAtMzQsMTIgKzM0LDggQEAKICAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpbmNsdWRlIDxuZXQvdGlwYy90aXBjLmg+Ci0jaW5jbHVkZSA8bmV0L3RpcGMvdGlwY19iZWFyZXIuaD4KLSNpbmNsdWRlIDxuZXQvdGlwYy90aXBjX21zZy5oPgotI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxuZXQvbmV0X25hbWVzcGFjZS5oPgorI2luY2x1ZGUgImNvcmUuaCIKKyNpbmNsdWRlICJiZWFyZXIuaCIKIAogI2RlZmluZSBNQVhfRVRIX0JFQVJFUlMJCTIKICNkZWZpbmUgRVRIX0xJTktfUFJJT1JJVFkJVElQQ19ERUZfTElOS19QUkkKQEAgLTYwLDcgKzU2LDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgZXRoX2JlYXJlciBldGhfYmVhcmVyc1tNQVhfRVRIX0JFQVJFUlNdOwotc3RhdGljIGludCBldGhfc3RhcnRlZCA9IDA7CitzdGF0aWMgaW50IGV0aF9zdGFydGVkOwogc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBub3RpZmllcjsKIAogLyoqCkBAIC0xNDgsNyArMTQ0LDcgQEAKIAogCS8qIEZpbmQgZGV2aWNlIHdpdGggc3BlY2lmaWVkIG5hbWUgKi8KIAotCWZvcl9lYWNoX25ldGRldigmaW5pdF9uZXQsIHBkZXYpeworCWZvcl9lYWNoX25ldGRldigmaW5pdF9uZXQsIHBkZXYpIHsKIAkJaWYgKCFzdHJuY21wKHBkZXYtPm5hbWUsIGRyaXZlcl9uYW1lLCBJRk5BTVNJWikpIHsKIAkJCWRldiA9IHBkZXY7CiAJCQlicmVhazsKQEAgLTE1OSw3ICsxNTUsOCBAQAogCiAJLyogRmluZCBFdGhlcm5ldCBiZWFyZXIgZm9yIGRldmljZSAob3IgY3JlYXRlIG9uZSkgKi8KIAotCWZvciAoOyhlYl9wdHIgIT0gc3RvcCkgJiYgZWJfcHRyLT5kZXYgJiYgKGViX3B0ci0+ZGV2ICE9IGRldik7IGViX3B0cisrKTsKKwl3aGlsZSAoKGViX3B0ciAhPSBzdG9wKSAmJiBlYl9wdHItPmRldiAmJiAoZWJfcHRyLT5kZXYgIT0gZGV2KSkKKwkJZWJfcHRyKys7CiAJaWYgKGViX3B0ciA9PSBzdG9wKQogCQlyZXR1cm4gLUVEUVVPVDsKIAlpZiAoIWViX3B0ci0+ZGV2KSB7CmRpZmYgLS1naXQgYS9uZXQvdGlwYy9oYW5kbGVyLmMgYi9uZXQvdGlwYy9oYW5kbGVyLmMKaW5kZXggMGM3MDAxMC4uMjc0Yzk4ZSAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvaGFuZGxlci5jCisrKyBiL25ldC90aXBjL2hhbmRsZXIuYwpAQCAtNDUsNyArNDUsNyBAQAogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICp0aXBjX3F1ZXVlX2l0ZW1fY2FjaGU7CiBzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCBzaWduYWxfcXVldWVfaGVhZDsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0socWl0ZW1fbG9jayk7Ci1zdGF0aWMgaW50IGhhbmRsZXJfZW5hYmxlZCA9IDA7CitzdGF0aWMgaW50IGhhbmRsZXJfZW5hYmxlZDsKIAogc3RhdGljIHZvaWQgcHJvY2Vzc19zaWduYWxfcXVldWUodW5zaWduZWQgbG9uZyBkdW1teSk7CiAKZGlmZiAtLWdpdCBhL25ldC90aXBjL2xpbmsuYyBiL25ldC90aXBjL2xpbmsuYwppbmRleCBiMzE5OTJjLi4xODcwMmY1IDEwMDY0NAotLS0gYS9uZXQvdGlwYy9saW5rLmMKKysrIGIvbmV0L3RpcGMvbGluay5jCkBAIC0zNSwxOSArMzUsMTEgQEAKICAqLwogCiAjaW5jbHVkZSAiY29yZS5oIgotI2luY2x1ZGUgImRiZy5oIgogI2luY2x1ZGUgImxpbmsuaCIKLSNpbmNsdWRlICJuZXQuaCIKLSNpbmNsdWRlICJub2RlLmgiCiAjaW5jbHVkZSAicG9ydC5oIgotI2luY2x1ZGUgImFkZHIuaCIKLSNpbmNsdWRlICJub2RlX3N1YnNjci5oIgogI2luY2x1ZGUgIm5hbWVfZGlzdHIuaCIKLSNpbmNsdWRlICJiZWFyZXIuaCIKLSNpbmNsdWRlICJuYW1lX3RhYmxlLmgiCiAjaW5jbHVkZSAiZGlzY292ZXIuaCIKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJiY2FzdC5oIgogCiAKIC8qCkBAIC01NywxMiArNDksNiBAQAogI2RlZmluZSBJTlZBTElEX1NFU1NJT04gMHgxMDAwMAogCiAvKgotICogTGltaXQgZm9yIGRlZmVycmVkIHJlY2VwdGlvbiBxdWV1ZToKLSAqLwotCi0jZGVmaW5lIERFRl9RVUVVRV9MSU1JVCAyNTZ1Ci0KLS8qCiAgKiBMaW5rIHN0YXRlIGV2ZW50czoKICAqLwogCkBAIC0xMTAsNzUgKzk2LDEwIEBACiBzdGF0aWMgdm9pZCBsaW5rX2NoZWNrX2RlZnJhZ21fYnVmcyhzdHJ1Y3QgbGluayAqbF9wdHIpOwogc3RhdGljIHZvaWQgbGlua19zdGF0ZV9ldmVudChzdHJ1Y3QgbGluayAqbF9wdHIsIHUzMiBldmVudCk7CiBzdGF0aWMgdm9pZCBsaW5rX3Jlc2V0X3N0YXRpc3RpY3Moc3RydWN0IGxpbmsgKmxfcHRyKTsKLXN0YXRpYyB2b2lkIGxpbmtfcHJpbnQoc3RydWN0IGxpbmsgKmxfcHRyLCBzdHJ1Y3QgcHJpbnRfYnVmICpidWYsCi0JCSAgICAgICBjb25zdCBjaGFyICpzdHIpOworc3RhdGljIHZvaWQgbGlua19wcmludChzdHJ1Y3QgbGluayAqbF9wdHIsIGNvbnN0IGNoYXIgKnN0cik7CiBzdGF0aWMgdm9pZCBsaW5rX3N0YXJ0KHN0cnVjdCBsaW5rICpsX3B0cik7CiBzdGF0aWMgaW50IGxpbmtfc2VuZF9sb25nX2J1ZihzdHJ1Y3QgbGluayAqbF9wdHIsIHN0cnVjdCBza19idWZmICpidWYpOwogCi0KLS8qCi0gKiBEZWJ1Z2dpbmcgY29kZSB1c2VkIGJ5IGxpbmsgcm91dGluZXMgb25seQotICoKLSAqIFdoZW4gZGVidWdnaW5nIGxpbmsgcHJvYmxlbXMgb24gYSBzeXN0ZW0gdGhhdCBoYXMgbXVsdGlwbGUgbGlua3MsCi0gKiB0aGUgc3RhbmRhcmQgVElQQyBkZWJ1Z2dpbmcgcm91dGluZXMgbWF5IG5vdCBiZSB1c2VmdWwgc2luY2UgdGhleQotICogYWxsb3cgdGhlIG91dHB1dCBmcm9tIG11bHRpcGxlIGxpbmtzIHRvIGJlIGludGVybWl4ZWQuICBGb3IgdGhpcyByZWFzb24KLSAqIHJvdXRpbmVzIG9mIHRoZSBmb3JtICJkYmdfbGlua19YWFgoKSIgaGF2ZSBiZWVuIGNyZWF0ZWQgdGhhdCB3aWxsIGNhcHR1cmUKLSAqIGRlYnVnIGluZm8gaW50byBhIGxpbmsncyBwZXJzb25hbCBwcmludCBidWZmZXIsIHdoaWNoIGNhbiB0aGVuIGJlIGR1bXBlZAotICogaW50byB0aGUgVElQQyBzeXN0ZW0gbG9nIChUSVBDX0xPRykgdXBvbiByZXF1ZXN0LgotICoKLSAqIFRvIGVuYWJsZSBwZXItbGluayBkZWJ1Z2dpbmcsIHVzZSBMSU5LX0xPR19CVUZfU0laRSB0byBzcGVjaWZ5IHRoZSBzaXplCi0gKiBvZiB0aGUgcHJpbnQgYnVmZmVyIHVzZWQgYnkgZWFjaCBsaW5rLiAgSWYgTElOS19MT0dfQlVGX1NJWkUgaXMgc2V0IHRvIDAsCi0gKiB0aGUgZGJnX2xpbmtfWFhYKCkgcm91dGluZXMgc2ltcGx5IHNlbmQgdGhlaXIgb3V0cHV0IHRvIHRoZSBzdGFuZGFyZAotICogZGVidWcgcHJpbnQgYnVmZmVyIChEQkdfT1VUUFVUKSwgaWYgaXQgaGFzIGJlZW4gZGVmaW5lZDsgdGhpcyBjYW4gYmUgdXNlZnVsCi0gKiB3aGVuIHRoZXJlIGlzIG9ubHkgYSBzaW5nbGUgbGluayBpbiB0aGUgc3lzdGVtIGJlaW5nIGRlYnVnZ2VkLgotICoKLSAqIE5vdGVzOgotICogLSBXaGVuIGVuYWJsZWQsIExJTktfTE9HX0JVRl9TSVpFIHNob3VsZCBiZSBzZXQgdG8gYXQgbGVhc3QgVElQQ19QQl9NSU5fU0laRQotICogLSAibF9wdHIiIG11c3QgYmUgdmFsaWQgd2hlbiB1c2luZyBkYmdfbGlua19YWFgoKSBtYWNyb3MKLSAqLwotCi0jZGVmaW5lIExJTktfTE9HX0JVRl9TSVpFIDAKLQotI2RlZmluZSBkYmdfbGluayhmbXQsIGFyZy4uLikgXAotCWRvIHsgXAotCQlpZiAoTElOS19MT0dfQlVGX1NJWkUpIFwKLQkJCXRpcGNfcHJpbnRmKCZsX3B0ci0+cHJpbnRfYnVmLCBmbXQsICMjIGFyZyk7IFwKLQl9IHdoaWxlICgwKQotI2RlZmluZSBkYmdfbGlua19tc2cobXNnLCB0eHQpIFwKLQlkbyB7IFwKLQkJaWYgKExJTktfTE9HX0JVRl9TSVpFKSBcCi0JCQl0aXBjX21zZ19kYmcoJmxfcHRyLT5wcmludF9idWYsIG1zZywgdHh0KTsgXAotCX0gd2hpbGUgKDApCi0jZGVmaW5lIGRiZ19saW5rX3N0YXRlKHR4dCkgXAotCWRvIHsgXAotCQlpZiAoTElOS19MT0dfQlVGX1NJWkUpIFwKLQkJCWxpbmtfcHJpbnQobF9wdHIsICZsX3B0ci0+cHJpbnRfYnVmLCB0eHQpOyBcCi0JfSB3aGlsZSAoMCkKLSNkZWZpbmUgZGJnX2xpbmtfZHVtcCgpIGRvIHsgXAotCWlmIChMSU5LX0xPR19CVUZfU0laRSkgeyBcCi0JCXRpcGNfcHJpbnRmKExPRywgIlxuXG5EdW1waW5nIGxpbmsgPCVzPjpcbiIsIGxfcHRyLT5uYW1lKTsgXAotCQl0aXBjX3ByaW50YnVmX21vdmUoTE9HLCAmbF9wdHItPnByaW50X2J1Zik7IFwKLQl9IFwKLX0gd2hpbGUgKDApCi0KLXN0YXRpYyB2b2lkIGRiZ19wcmludF9saW5rKHN0cnVjdCBsaW5rICpsX3B0ciwgY29uc3QgY2hhciAqc3RyKQotewotCWlmIChEQkdfT1VUUFVUICE9IFRJUENfTlVMTCkKLQkJbGlua19wcmludChsX3B0ciwgREJHX09VVFBVVCwgc3RyKTsKLX0KLQotc3RhdGljIHZvaWQgZGJnX3ByaW50X2J1Zl9jaGFpbihzdHJ1Y3Qgc2tfYnVmZiAqcm9vdF9idWYpCi17Ci0JaWYgKERCR19PVVRQVVQgIT0gVElQQ19OVUxMKSB7Ci0JCXN0cnVjdCBza19idWZmICpidWYgPSByb290X2J1ZjsKLQotCQl3aGlsZSAoYnVmKSB7Ci0JCQltc2dfZGJnKGJ1Zl9tc2coYnVmKSwgIkluIGNoYWluOiAiKTsKLQkJCWJ1ZiA9IGJ1Zi0+bmV4dDsKLQkJfQotCX0KLX0KLQogLyoKICAqICBTaW1wbGUgbGluayByb3V0aW5lcwogICovCkBAIC0yNjYsMTQgKzE4NywxNyBAQAogCS8qIGVuc3VyZSBhbGwgY29tcG9uZW50IHBhcnRzIG9mIGxpbmsgbmFtZSBhcmUgcHJlc2VudCAqLwogCiAJYWRkcl9sb2NhbCA9IG5hbWVfY29weTsKLQlpZiAoKGlmX2xvY2FsID0gc3RyY2hyKGFkZHJfbG9jYWwsICc6JykpID09IE5VTEwpCisJaWZfbG9jYWwgPSBzdHJjaHIoYWRkcl9sb2NhbCwgJzonKTsKKwlpZiAoaWZfbG9jYWwgPT0gTlVMTCkKIAkJcmV0dXJuIDA7CiAJKihpZl9sb2NhbCsrKSA9IDA7Ci0JaWYgKChhZGRyX3BlZXIgPSBzdHJjaHIoaWZfbG9jYWwsICctJykpID09IE5VTEwpCisJYWRkcl9wZWVyID0gc3RyY2hyKGlmX2xvY2FsLCAnLScpOworCWlmIChhZGRyX3BlZXIgPT0gTlVMTCkKIAkJcmV0dXJuIDA7CiAJKihhZGRyX3BlZXIrKykgPSAwOwogCWlmX2xvY2FsX2xlbiA9IGFkZHJfcGVlciAtIGlmX2xvY2FsOwotCWlmICgoaWZfcGVlciA9IHN0cmNocihhZGRyX3BlZXIsICc6JykpID09IE5VTEwpCisJaWZfcGVlciA9IHN0cmNocihhZGRyX3BlZXIsICc6Jyk7CisJaWYgKGlmX3BlZXIgPT0gTlVMTCkKIAkJcmV0dXJuIDA7CiAJKihpZl9wZWVyKyspID0gMDsKIAlpZl9wZWVyX2xlbiA9IHN0cmxlbihpZl9wZWVyKSArIDE7CkBAIC0zOTIsMTcgKzMxNiw2IEBACiAJCXJldHVybiBOVUxMOwogCX0KIAotCWlmIChMSU5LX0xPR19CVUZfU0laRSkgewotCQljaGFyICpwYiA9IGttYWxsb2MoTElOS19MT0dfQlVGX1NJWkUsIEdGUF9BVE9NSUMpOwotCi0JCWlmICghcGIpIHsKLQkJCWtmcmVlKGxfcHRyKTsKLQkJCXdhcm4oIkxpbmsgY3JlYXRpb24gZmFpbGVkLCBubyBtZW1vcnkgZm9yIHByaW50IGJ1ZmZlclxuIik7Ci0JCQlyZXR1cm4gTlVMTDsKLQkJfQotCQl0aXBjX3ByaW50YnVmX2luaXQoJmxfcHRyLT5wcmludF9idWYsIHBiLCBMSU5LX0xPR19CVUZfU0laRSk7Ci0JfQotCiAJbF9wdHItPmFkZHIgPSBwZWVyOwogCWlmX25hbWUgPSBzdHJjaHIoYl9wdHItPnB1YmwubmFtZSwgJzonKSArIDE7CiAJc3ByaW50ZihsX3B0ci0+bmFtZSwgIiV1LiV1LiV1OiVzLSV1LiV1LiV1OiIsCkBAIC00MzcsOCArMzUwLDYgQEAKIAogCWxfcHRyLT5vd25lciA9IHRpcGNfbm9kZV9hdHRhY2hfbGluayhsX3B0cik7CiAJaWYgKCFsX3B0ci0+b3duZXIpIHsKLQkJaWYgKExJTktfTE9HX0JVRl9TSVpFKQotCQkJa2ZyZWUobF9wdHItPnByaW50X2J1Zi5idWYpOwogCQlrZnJlZShsX3B0cik7CiAJCXJldHVybiBOVUxMOwogCX0KQEAgLTQ0Nyw5ICszNTgsNiBAQAogCWxpc3RfYWRkX3RhaWwoJmxfcHRyLT5saW5rX2xpc3QsICZiX3B0ci0+bGlua3MpOwogCXRpcGNfa19zaWduYWwoKEhhbmRsZXIpbGlua19zdGFydCwgKHVuc2lnbmVkIGxvbmcpbF9wdHIpOwogCi0JZGJnKCJ0aXBjX2xpbmtfY3JlYXRlKCk6IHRvbGVyYW5jZSA9ICV1LGNvbnQgaW50diA9ICV1LCBhYm9ydF9saW1pdCA9ICV1XG4iLAotCSAgICBsX3B0ci0+dG9sZXJhbmNlLCBsX3B0ci0+Y29udGludWl0eV9pbnRlcnZhbCwgbF9wdHItPmFib3J0X2xpbWl0KTsKLQogCXJldHVybiBsX3B0cjsKIH0KIApAQCAtNDY5LDggKzM3Nyw2IEBACiAJCXJldHVybjsKIAl9CiAKLQlkYmcoInRpcGNfbGlua19kZWxldGUoKVxuIik7Ci0KIAlrX2NhbmNlbF90aW1lcigmbF9wdHItPnRpbWVyKTsKIAogCXRpcGNfbm9kZV9sb2NrKGxfcHRyLT5vd25lcik7CkBAIC00NzgsOCArMzg0LDYgQEAKIAl0aXBjX25vZGVfZGV0YWNoX2xpbmsobF9wdHItPm93bmVyLCBsX3B0cik7CiAJdGlwY19saW5rX3N0b3AobF9wdHIpOwogCWxpc3RfZGVsX2luaXQoJmxfcHRyLT5saW5rX2xpc3QpOwotCWlmIChMSU5LX0xPR19CVUZfU0laRSkKLQkJa2ZyZWUobF9wdHItPnByaW50X2J1Zi5idWYpOwogCXRpcGNfbm9kZV91bmxvY2sobF9wdHItPm93bmVyKTsKIAlrX3Rlcm1fdGltZXIoJmxfcHRyLT50aW1lcik7CiAJa2ZyZWUobF9wdHIpOwpAQCAtNDg3LDcgKzM5MSw2IEBACiAKIHN0YXRpYyB2b2lkIGxpbmtfc3RhcnQoc3RydWN0IGxpbmsgKmxfcHRyKQogewotCWRiZygibGlua19zdGFydCAleFxuIiwgbF9wdHIpOwogCWxpbmtfc3RhdGVfZXZlbnQobF9wdHIsIFNUQVJUSU5HX0VWVCk7CiB9CiAKQEAgLTYzOSw3ICs1NDIsNiBAQAogCWxpbmtfaW5pdF9tYXhfcGt0KGxfcHRyKTsKIAogCWxfcHRyLT5zdGF0ZSA9IFJFU0VUX1VOS05PV047Ci0JZGJnX2xpbmtfc3RhdGUoIlJlc2V0dGluZyBMaW5rXG4iKTsKIAogCWlmICgocHJldl9zdGF0ZSA9PSBSRVNFVF9VTktOT1dOKSB8fCAocHJldl9zdGF0ZSA9PSBSRVNFVF9SRVNFVCkpCiAJCXJldHVybjsKQEAgLTcxMywyNSArNjE1LDE4IEBACiAJCXJldHVybjsJCS8qIE5vdCB5ZXQuICovCiAKIAlpZiAobGlua19ibG9ja2VkKGxfcHRyKSkgewotCQlpZiAoZXZlbnQgPT0gVElNRU9VVF9FVlQpIHsKKwkJaWYgKGV2ZW50ID09IFRJTUVPVVRfRVZUKQogCQkJbGlua19zZXRfdGltZXIobF9wdHIsIGNvbnRfaW50dik7Ci0JCX0KIAkJcmV0dXJuOwkgIC8qIENoYW5nZW92ZXIgZ29pbmcgb24gKi8KIAl9Ci0JZGJnX2xpbmsoIlNUQVRFX0VWOiA8JXM+ICIsIGxfcHRyLT5uYW1lKTsKIAogCXN3aXRjaCAobF9wdHItPnN0YXRlKSB7CiAJY2FzZSBXT1JLSU5HX1dPUktJTkc6Ci0JCWRiZ19saW5rKCJXVy8iKTsKIAkJc3dpdGNoIChldmVudCkgewogCQljYXNlIFRSQUZGSUNfTVNHX0VWVDoKLQkJCWRiZ19saW5rKCJUUkYtIik7Ci0JCQkvKiBmYWxsIHRocm91Z2ggKi8KIAkJY2FzZSBBQ1RJVkFURV9NU0c6Ci0JCQlkYmdfbGluaygiQUNUXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIFRJTUVPVVRfRVZUOgotCQkJZGJnX2xpbmsoIlRJTSAiKTsKIAkJCWlmIChsX3B0ci0+bmV4dF9pbl9ubyAhPSBsX3B0ci0+Y2hlY2twb2ludCkgewogCQkJCWxfcHRyLT5jaGVja3BvaW50ID0gbF9wdHItPm5leHRfaW5fbm87CiAJCQkJaWYgKHRpcGNfYmNsaW5rX2Fja3NfbWlzc2luZyhsX3B0ci0+b3duZXIpKSB7CkBAIC03NDYsNyArNjQxLDYgQEAKIAkJCQlsaW5rX3NldF90aW1lcihsX3B0ciwgY29udF9pbnR2KTsKIAkJCQlicmVhazsKIAkJCX0KLQkJCWRiZ19saW5rKCIgLT4gV1VcbiIpOwogCQkJbF9wdHItPnN0YXRlID0gV09SS0lOR19VTktOT1dOOwogCQkJbF9wdHItPmZzbV9tc2dfY250ID0gMDsKIAkJCXRpcGNfbGlua19zZW5kX3Byb3RvX21zZyhsX3B0ciwgU1RBVEVfTVNHLCAxLCAwLCAwLCAwLCAwKTsKQEAgLTc1NCw3ICs2NDgsNiBAQAogCQkJbGlua19zZXRfdGltZXIobF9wdHIsIGNvbnRfaW50diAvIDQpOwogCQkJYnJlYWs7CiAJCWNhc2UgUkVTRVRfTVNHOgotCQkJZGJnX2xpbmsoIlJFUyAtPiBSUlxuIik7CiAJCQlpbmZvKCJSZXNldHRpbmcgbGluayA8JXM+LCByZXF1ZXN0ZWQgYnkgcGVlclxuIiwKIAkJCSAgICAgbF9wdHItPm5hbWUpOwogCQkJdGlwY19saW5rX3Jlc2V0KGxfcHRyKTsKQEAgLTc2OSwxOCArNjYyLDE0IEBACiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBXT1JLSU5HX1VOS05PV046Ci0JCWRiZ19saW5rKCJXVS8iKTsKIAkJc3dpdGNoIChldmVudCkgewogCQljYXNlIFRSQUZGSUNfTVNHX0VWVDoKLQkJCWRiZ19saW5rKCJUUkYtIik7CiAJCWNhc2UgQUNUSVZBVEVfTVNHOgotCQkJZGJnX2xpbmsoIkFDVCAtPiBXV1xuIik7CiAJCQlsX3B0ci0+c3RhdGUgPSBXT1JLSU5HX1dPUktJTkc7CiAJCQlsX3B0ci0+ZnNtX21zZ19jbnQgPSAwOwogCQkJbGlua19zZXRfdGltZXIobF9wdHIsIGNvbnRfaW50dik7CiAJCQlicmVhazsKIAkJY2FzZSBSRVNFVF9NU0c6Ci0JCQlkYmdfbGluaygiUkVTIC0+IFJSXG4iKTsKIAkJCWluZm8oIlJlc2V0dGluZyBsaW5rIDwlcz4sIHJlcXVlc3RlZCBieSBwZWVyICIKIAkJCSAgICAgIndoaWxlIHByb2JpbmdcbiIsIGxfcHRyLT5uYW1lKTsKIAkJCXRpcGNfbGlua19yZXNldChsX3B0cik7CkBAIC03OTEsOSArNjgwLDcgQEAKIAkJCWxpbmtfc2V0X3RpbWVyKGxfcHRyLCBjb250X2ludHYpOwogCQkJYnJlYWs7CiAJCWNhc2UgVElNRU9VVF9FVlQ6Ci0JCQlkYmdfbGluaygiVElNICIpOwogCQkJaWYgKGxfcHRyLT5uZXh0X2luX25vICE9IGxfcHRyLT5jaGVja3BvaW50KSB7Ci0JCQkJZGJnX2xpbmsoIi0+IFdXXG4iKTsKIAkJCQlsX3B0ci0+c3RhdGUgPSBXT1JLSU5HX1dPUktJTkc7CiAJCQkJbF9wdHItPmZzbV9tc2dfY250ID0gMDsKIAkJCQlsX3B0ci0+Y2hlY2twb2ludCA9IGxfcHRyLT5uZXh0X2luX25vOwpAQCAtODA0LDE2ICs2OTEsMTEgQEAKIAkJCQl9CiAJCQkJbGlua19zZXRfdGltZXIobF9wdHIsIGNvbnRfaW50dik7CiAJCQl9IGVsc2UgaWYgKGxfcHRyLT5mc21fbXNnX2NudCA8IGxfcHRyLT5hYm9ydF9saW1pdCkgewotCQkJCWRiZ19saW5rKCJQcm9iaW5nICV1LyV1LHRpbWVyID0gJXUgbXMpXG4iLAotCQkJCQkgbF9wdHItPmZzbV9tc2dfY250LCBsX3B0ci0+YWJvcnRfbGltaXQsCi0JCQkJCSBjb250X2ludHYgLyA0KTsKIAkJCQl0aXBjX2xpbmtfc2VuZF9wcm90b19tc2cobF9wdHIsIFNUQVRFX01TRywKIAkJCQkJCQkgMSwgMCwgMCwgMCwgMCk7CiAJCQkJbF9wdHItPmZzbV9tc2dfY250Kys7CiAJCQkJbGlua19zZXRfdGltZXIobF9wdHIsIGNvbnRfaW50diAvIDQpOwogCQkJfSBlbHNlIHsJLyogTGluayBoYXMgZmFpbGVkICovCi0JCQkJZGJnX2xpbmsoIi0+IFJVICgldSBwcm9iZXMgdW5hbnN3ZXJlZClcbiIsCi0JCQkJCSBsX3B0ci0+ZnNtX21zZ19jbnQpOwogCQkJCXdhcm4oIlJlc2V0dGluZyBsaW5rIDwlcz4sIHBlZXIgbm90IHJlc3BvbmRpbmdcbiIsCiAJCQkJICAgICBsX3B0ci0+bmFtZSk7CiAJCQkJdGlwY19saW5rX3Jlc2V0KGxfcHRyKTsKQEAgLTgzMCwxOCArNzEyLDEzIEBACiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBSRVNFVF9VTktOT1dOOgotCQlkYmdfbGluaygiUlUvIik7CiAJCXN3aXRjaCAoZXZlbnQpIHsKIAkJY2FzZSBUUkFGRklDX01TR19FVlQ6Ci0JCQlkYmdfbGluaygiVFJGLVxuIik7CiAJCQlicmVhazsKIAkJY2FzZSBBQ1RJVkFURV9NU0c6CiAJCQlvdGhlciA9IGxfcHRyLT5vd25lci0+YWN0aXZlX2xpbmtzWzBdOwotCQkJaWYgKG90aGVyICYmIGxpbmtfd29ya2luZ191bmtub3duKG90aGVyKSkgewotCQkJCWRiZ19saW5rKCJBQ1RcbiIpOworCQkJaWYgKG90aGVyICYmIGxpbmtfd29ya2luZ191bmtub3duKG90aGVyKSkKIAkJCQlicmVhazsKLQkJCX0KLQkJCWRiZ19saW5rKCJBQ1QgLT4gV1dcbiIpOwogCQkJbF9wdHItPnN0YXRlID0gV09SS0lOR19XT1JLSU5HOwogCQkJbF9wdHItPmZzbV9tc2dfY250ID0gMDsKIAkJCWxpbmtfYWN0aXZhdGUobF9wdHIpOwpAQCAtODUwLDggKzcyNyw2IEBACiAJCQlsaW5rX3NldF90aW1lcihsX3B0ciwgY29udF9pbnR2KTsKIAkJCWJyZWFrOwogCQljYXNlIFJFU0VUX01TRzoKLQkJCWRiZ19saW5rKCJSRVNcbiIpOwotCQkJZGJnX2xpbmsoIiAtPiBSUlxuIik7CiAJCQlsX3B0ci0+c3RhdGUgPSBSRVNFVF9SRVNFVDsKIAkJCWxfcHRyLT5mc21fbXNnX2NudCA9IDA7CiAJCQl0aXBjX2xpbmtfc2VuZF9wcm90b19tc2cobF9wdHIsIEFDVElWQVRFX01TRywgMSwgMCwgMCwgMCwgMCk7CkBAIC04NTksMTEgKzczNCw5IEBACiAJCQlsaW5rX3NldF90aW1lcihsX3B0ciwgY29udF9pbnR2KTsKIAkJCWJyZWFrOwogCQljYXNlIFNUQVJUSU5HX0VWVDoKLQkJCWRiZ19saW5rKCJTVEFSVC0iKTsKIAkJCWxfcHRyLT5zdGFydGVkID0gMTsKIAkJCS8qIGZhbGwgdGhyb3VnaCAqLwogCQljYXNlIFRJTUVPVVRfRVZUOgotCQkJZGJnX2xpbmsoIlRJTVxuIik7CiAJCQl0aXBjX2xpbmtfc2VuZF9wcm90b19tc2cobF9wdHIsIFJFU0VUX01TRywgMCwgMCwgMCwgMCwgMCk7CiAJCQlsX3B0ci0+ZnNtX21zZ19jbnQrKzsKIAkJCWxpbmtfc2V0X3RpbWVyKGxfcHRyLCBjb250X2ludHYpOwpAQCAtODczLDE4ICs3NDYsMTIgQEAKIAkJfQogCQlicmVhazsKIAljYXNlIFJFU0VUX1JFU0VUOgotCQlkYmdfbGluaygiUlIvICIpOwogCQlzd2l0Y2ggKGV2ZW50KSB7CiAJCWNhc2UgVFJBRkZJQ19NU0dfRVZUOgotCQkJZGJnX2xpbmsoIlRSRi0iKTsKLQkJCS8qIGZhbGwgdGhyb3VnaCAqLwogCQljYXNlIEFDVElWQVRFX01TRzoKIAkJCW90aGVyID0gbF9wdHItPm93bmVyLT5hY3RpdmVfbGlua3NbMF07Ci0JCQlpZiAob3RoZXIgJiYgbGlua193b3JraW5nX3Vua25vd24ob3RoZXIpKSB7Ci0JCQkJZGJnX2xpbmsoIkFDVFxuIik7CisJCQlpZiAob3RoZXIgJiYgbGlua193b3JraW5nX3Vua25vd24ob3RoZXIpKQogCQkJCWJyZWFrOwotCQkJfQotCQkJZGJnX2xpbmsoIkFDVCAtPiBXV1xuIik7CiAJCQlsX3B0ci0+c3RhdGUgPSBXT1JLSU5HX1dPUktJTkc7CiAJCQlsX3B0ci0+ZnNtX21zZ19jbnQgPSAwOwogCQkJbGlua19hY3RpdmF0ZShsX3B0cik7CkBAIC04OTMsMTQgKzc2MCwxMSBAQAogCQkJbGlua19zZXRfdGltZXIobF9wdHIsIGNvbnRfaW50dik7CiAJCQlicmVhazsKIAkJY2FzZSBSRVNFVF9NU0c6Ci0JCQlkYmdfbGluaygiUkVTXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIFRJTUVPVVRfRVZUOgotCQkJZGJnX2xpbmsoIlRJTVxuIik7CiAJCQl0aXBjX2xpbmtfc2VuZF9wcm90b19tc2cobF9wdHIsIEFDVElWQVRFX01TRywgMCwgMCwgMCwgMCwgMCk7CiAJCQlsX3B0ci0+ZnNtX21zZ19jbnQrKzsKIAkJCWxpbmtfc2V0X3RpbWVyKGxfcHRyLCBjb250X2ludHYpOwotCQkJZGJnX2xpbmsoImZzbV9tc2dfY250ICV1XG4iLCBsX3B0ci0+ZnNtX21zZ19jbnQpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQllcnIoIlVua25vd24gbGluayBldmVudCAldSBpbiBSUiBzdGF0ZVxuIiwgZXZlbnQpOwpAQCAtOTQwLDkgKzgwNCw2IEBACiAJc2tiX2NvcHlfdG9fbGluZWFyX2RhdGFfb2Zmc2V0KGJ1bmRsZXIsIHRvX3BvcywgYnVmLT5kYXRhLCBzaXplKTsKIAltc2dfc2V0X3NpemUoYnVuZGxlcl9tc2csIHRvX3BvcyArIHNpemUpOwogCW1zZ19zZXRfbXNnY250KGJ1bmRsZXJfbXNnLCBtc2dfbXNnY250KGJ1bmRsZXJfbXNnKSArIDEpOwotCWRiZygiUGFja2VkIG1zZyAjICV1KCV1IG9jdGV0cykgaW50byBwb3MgJXUgaW4gYnVmKCMldSlcbiIsCi0JICAgIG1zZ19tc2djbnQoYnVuZGxlcl9tc2cpLCBzaXplLCB0b19wb3MsIG1zZ19zZXFubyhidW5kbGVyX21zZykpOwotCW1zZ19kYmcobXNnLCAiUEFDS0Q6Iik7CiAJYnVmX2Rpc2NhcmQoYnVmKTsKIAlsX3B0ci0+c3RhdHMuc2VudF9idW5kbGVkKys7CiAJcmV0dXJuIDE7CkBAIC05OTEsNyArODUyLDYgQEAKIAkJCXJldHVybiBsaW5rX3NjaGVkdWxlX3BvcnQobF9wdHIsIG1zZ19vcmlncG9ydChtc2cpLAogCQkJCQkJICBzaXplKTsKIAkJfQotCQltc2dfZGJnKG1zZywgIlRJUEM6IENvbmdlc3Rpb24sIHRocm93aW5nIGF3YXlcbiIpOwogCQlidWZfZGlzY2FyZChidWYpOwogCQlpZiAoaW1wID4gQ09OTl9NQU5BR0VSKSB7CiAJCQl3YXJuKCJSZXNldHRpbmcgbGluayA8JXM+LCBzZW5kIHF1ZXVlIGZ1bGwiLCBsX3B0ci0+bmFtZSk7CkBAIC0xMDc1LDIyICs5MzUsMTYgQEAKIAlpbnQgcmVzID0gLUVMSU5LQ09ORzsKIAogCXJlYWRfbG9ja19iaCgmdGlwY19uZXRfbG9jayk7Ci0Jbl9wdHIgPSB0aXBjX25vZGVfc2VsZWN0KGRlc3QsIHNlbGVjdG9yKTsKKwluX3B0ciA9IHRpcGNfbm9kZV9maW5kKGRlc3QpOwogCWlmIChuX3B0cikgewogCQl0aXBjX25vZGVfbG9jayhuX3B0cik7CiAJCWxfcHRyID0gbl9wdHItPmFjdGl2ZV9saW5rc1tzZWxlY3RvciAmIDFdOwotCQlpZiAobF9wdHIpIHsKLQkJCWRiZygidGlwY19saW5rX3NlbmQ6IGZvdW5kIGxpbmsgJXggZm9yIGRlc3QgJXhcbiIsIGxfcHRyLCBkZXN0KTsKKwkJaWYgKGxfcHRyKQogCQkJcmVzID0gdGlwY19saW5rX3NlbmRfYnVmKGxfcHRyLCBidWYpOwotCQl9IGVsc2UgewotCQkJZGJnKCJBdHRlbXB0IHRvIHNlbmQgbXNnIHRvIHVucmVhY2hhYmxlIG5vZGU6XG4iKTsKLQkJCW1zZ19kYmcoYnVmX21zZyhidWYpLCI+Pj4iKTsKKwkJZWxzZQogCQkJYnVmX2Rpc2NhcmQoYnVmKTsKLQkJfQogCQl0aXBjX25vZGVfdW5sb2NrKG5fcHRyKTsKIAl9IGVsc2UgewotCQlkYmcoIkF0dGVtcHQgdG8gc2VuZCBtc2cgdG8gdW5rbm93biBub2RlOlxuIik7Ci0JCW1zZ19kYmcoYnVmX21zZyhidWYpLCI+Pj4iKTsKIAkJYnVmX2Rpc2NhcmQoYnVmKTsKIAl9CiAJcmVhZF91bmxvY2tfYmgoJnRpcGNfbmV0X2xvY2spOwpAQCAtMTExNywxNyArOTcxLDE0IEBACiAJCQkJaWYgKGxpa2VseSh0aXBjX2JlYXJlcl9zZW5kKGxfcHRyLT5iX3B0ciwgYnVmLAogCQkJCQkJCSAgICAmbF9wdHItPm1lZGlhX2FkZHIpKSkgewogCQkJCQlsX3B0ci0+dW5hY2tlZF93aW5kb3cgPSAwOwotCQkJCQltc2dfZGJnKG1zZywiU0VOVF9GQVNUOiIpOwogCQkJCQlyZXR1cm4gcmVzOwogCQkJCX0KLQkJCQlkYmcoImZhaWxlZCBzZW50IGZhc3QuLi5cbiIpOwogCQkJCXRpcGNfYmVhcmVyX3NjaGVkdWxlKGxfcHRyLT5iX3B0ciwgbF9wdHIpOwogCQkJCWxfcHRyLT5zdGF0cy5iZWFyZXJfY29uZ3MrKzsKIAkJCQlsX3B0ci0+bmV4dF9vdXQgPSBidWY7CiAJCQkJcmV0dXJuIHJlczsKIAkJCX0KLQkJfQotCQllbHNlCisJCX0gZWxzZQogCQkJKnVzZWRfbWF4X3BrdCA9IGxfcHRyLT5tYXhfcGt0OwogCX0KIAlyZXR1cm4gdGlwY19saW5rX3NlbmRfYnVmKGxfcHRyLCBidWYpOyAgLyogQWxsIG90aGVyIGNhc2VzICovCkBAIC0xMTUxLDEyICsxMDAyLDEwIEBACiAJCXJldHVybiB0aXBjX3BvcnRfcmVjdl9tc2coYnVmKTsKIAogCXJlYWRfbG9ja19iaCgmdGlwY19uZXRfbG9jayk7Ci0Jbl9wdHIgPSB0aXBjX25vZGVfc2VsZWN0KGRlc3Rub2RlLCBzZWxlY3Rvcik7CisJbl9wdHIgPSB0aXBjX25vZGVfZmluZChkZXN0bm9kZSk7CiAJaWYgKGxpa2VseShuX3B0cikpIHsKIAkJdGlwY19ub2RlX2xvY2sobl9wdHIpOwogCQlsX3B0ciA9IG5fcHRyLT5hY3RpdmVfbGlua3Nbc2VsZWN0b3JdOwotCQlkYmcoInNlbmRfZmFzdDogYnVmICV4IHNlbGVjdGVkICV4LCBkZXN0bm9kZSA9ICV4XG4iLAotCQkgICAgYnVmLCBsX3B0ciwgZGVzdG5vZGUpOwogCQlpZiAobGlrZWx5KGxfcHRyKSkgewogCQkJcmVzID0gbGlua19zZW5kX2J1Zl9mYXN0KGxfcHRyLCBidWYsICZkdW1teSk7CiAJCQl0aXBjX25vZGVfdW5sb2NrKG5fcHRyKTsKQEAgLTEyMDAsNyArMTA0OSw3IEBACiAJCQkhc2VuZGVyLT51c2VyX3BvcnQsICZidWYpOwogCiAJcmVhZF9sb2NrX2JoKCZ0aXBjX25ldF9sb2NrKTsKLQlub2RlID0gdGlwY19ub2RlX3NlbGVjdChkZXN0YWRkciwgc2VsZWN0b3IpOworCW5vZGUgPSB0aXBjX25vZGVfZmluZChkZXN0YWRkcik7CiAJaWYgKGxpa2VseShub2RlKSkgewogCQl0aXBjX25vZGVfbG9jayhub2RlKTsKIAkJbF9wdHIgPSBub2RlLT5hY3RpdmVfbGlua3Nbc2VsZWN0b3JdOwpAQCAtMTI4MywxMCArMTEzMiwxMCBAQAogCXN0cnVjdCB0aXBjX25vZGUgKm5vZGU7CiAJc3RydWN0IHRpcGNfbXNnICpoZHIgPSAmc2VuZGVyLT5wdWJsLnBoZHI7CiAJdTMyIGRzeiA9IG1zZ19kYXRhX3N6KGhkcik7Ci0JdTMyIG1heF9wa3QsZnJhZ21fc3oscmVzdDsKKwl1MzIgbWF4X3BrdCwgZnJhZ21fc3osIHJlc3Q7CiAJc3RydWN0IHRpcGNfbXNnIGZyYWdtX2hkcjsKLQlzdHJ1Y3Qgc2tfYnVmZiAqYnVmLCpidWZfY2hhaW4sKnByZXY7Ci0JdTMyIGZyYWdtX2NycyxmcmFnbV9yZXN0LGhzeixzZWN0X3Jlc3Q7CisJc3RydWN0IHNrX2J1ZmYgKmJ1ZiwgKmJ1Zl9jaGFpbiwgKnByZXY7CisJdTMyIGZyYWdtX2NycywgZnJhZ21fcmVzdCwgaHN6LCBzZWN0X3Jlc3Q7CiAJY29uc3QgdW5jaGFyICpzZWN0X2NyczsKIAlpbnQgY3Vycl9zZWN0OwogCXUzMiBmcmFnbV9ubzsKQEAgLTEzMDYsNyArMTE1NSw2IEBACiAKIAkvKiBQcmVwYXJlIHJldXNhYmxlIGZyYWdtZW50IGhlYWRlcjogKi8KIAotCW1zZ19kYmcoaGRyLCAiPkZSQUdNRU5USU5HPiIpOwogCXRpcGNfbXNnX2luaXQoJmZyYWdtX2hkciwgTVNHX0ZSQUdNRU5URVIsIEZJUlNUX0ZSQUdNRU5ULAogCQkgSU5UX0hfU0laRSwgbXNnX2Rlc3Rub2RlKGhkcikpOwogCW1zZ19zZXRfbGlua19zZWxlY3RvcigmZnJhZ21faGRyLCBzZW5kZXItPnB1YmwucmVmKTsKQEAgLTEzMjIsNyArMTE3MCw2IEBACiAJc2tiX2NvcHlfdG9fbGluZWFyX2RhdGEoYnVmLCAmZnJhZ21faGRyLCBJTlRfSF9TSVpFKTsKIAloc3ogPSBtc2dfaGRyX3N6KGhkcik7CiAJc2tiX2NvcHlfdG9fbGluZWFyX2RhdGFfb2Zmc2V0KGJ1ZiwgSU5UX0hfU0laRSwgaGRyLCBoc3opOwotCW1zZ19kYmcoYnVmX21zZyhidWYpLCAiPkJVSUxEPiIpOwogCiAJLyogQ2hvcCB1cCBtZXNzYWdlOiAqLwogCkBAIC0xMzY1LDcgKzEyMTIsNyBAQAogCQkJLyogSW5pdGlhdGUgbmV3IGZyYWdtZW50OiAqLwogCQkJaWYgKHJlc3QgPD0gZnJhZ21fc3opIHsKIAkJCQlmcmFnbV9zeiA9IHJlc3Q7Ci0JCQkJbXNnX3NldF90eXBlKCZmcmFnbV9oZHIsTEFTVF9GUkFHTUVOVCk7CisJCQkJbXNnX3NldF90eXBlKCZmcmFnbV9oZHIsIExBU1RfRlJBR01FTlQpOwogCQkJfSBlbHNlIHsKIAkJCQltc2dfc2V0X3R5cGUoJmZyYWdtX2hkciwgRlJBR01FTlQpOwogCQkJfQpAQCAtMTM4MSwxNiArMTIyOCwxNCBAQAogCQkJc2tiX2NvcHlfdG9fbGluZWFyX2RhdGEoYnVmLCAmZnJhZ21faGRyLCBJTlRfSF9TSVpFKTsKIAkJCWZyYWdtX2NycyA9IElOVF9IX1NJWkU7CiAJCQlmcmFnbV9yZXN0ID0gZnJhZ21fc3o7Ci0JCQltc2dfZGJnKGJ1Zl9tc2coYnVmKSwiICA+QlVJTEQ+Iik7CiAJCX0KLQl9Ci0Jd2hpbGUgKHJlc3QgPiAwKTsKKwl9IHdoaWxlIChyZXN0ID4gMCk7CiAKIAkvKgogCSAqIE5vdyB3ZSBoYXZlIGEgYnVmZmVyIGNoYWluLiBTZWxlY3QgYSBsaW5rIGFuZCBjaGVjawogCSAqIHRoYXQgcGFja2V0IHNpemUgaXMgc3RpbGwgT0sKIAkgKi8KLQlub2RlID0gdGlwY19ub2RlX3NlbGVjdChkZXN0YWRkciwgc2VuZGVyLT5wdWJsLnJlZiAmIDEpOworCW5vZGUgPSB0aXBjX25vZGVfZmluZChkZXN0YWRkcik7CiAJaWYgKGxpa2VseShub2RlKSkgewogCQl0aXBjX25vZGVfbG9jayhub2RlKTsKIAkJbF9wdHIgPSBub2RlLT5hY3RpdmVfbGlua3Nbc2VuZGVyLT5wdWJsLnJlZiAmIDFdOwpAQCAtMTQzMSw3ICsxMjc2LDYgQEAKIAkJbF9wdHItPnN0YXRzLnNlbnRfZnJhZ21lbnRzKys7CiAJCW1zZ19zZXRfbG9uZ19tc2dubyhtc2csIGxfcHRyLT5sb25nX21zZ19zZXFfbm8pOwogCQlsaW5rX2FkZF90b19vdXRxdWV1ZShsX3B0ciwgYnVmLCBtc2cpOwotCQltc2dfZGJnKG1zZywgIj5BREQ+Iik7CiAJCWJ1ZiA9IG5leHQ7CiAJfQogCkBAIC0xNDczLDE0ICsxMzE3LDEyIEBACiAJCW1zZ19zZXRfYWNrKGJ1Zl9tc2coYnVmKSwgbW9kKGxfcHRyLT5uZXh0X2luX25vIC0gMSkpOwogCQltc2dfc2V0X2JjYXN0X2FjayhidWZfbXNnKGJ1ZiksIGxfcHRyLT5vd25lci0+YmNsaW5rLmxhc3RfaW4pOwogCQlpZiAodGlwY19iZWFyZXJfc2VuZChsX3B0ci0+Yl9wdHIsIGJ1ZiwgJmxfcHRyLT5tZWRpYV9hZGRyKSkgewotCQkJbXNnX2RiZyhidWZfbXNnKGJ1ZiksICI+REVGLVJFVFI+Iik7CiAJCQlsX3B0ci0+cmV0cmFuc21fcXVldWVfaGVhZCA9IG1vZCgrK3JfcV9oZWFkKTsKIAkJCWxfcHRyLT5yZXRyYW5zbV9xdWV1ZV9zaXplID0gLS1yX3Ffc2l6ZTsKIAkJCWxfcHRyLT5zdGF0cy5yZXRyYW5zbWl0dGVkKys7CiAJCQlyZXR1cm4gMDsKIAkJfSBlbHNlIHsKIAkJCWxfcHRyLT5zdGF0cy5iZWFyZXJfY29uZ3MrKzsKLQkJCW1zZ19kYmcoYnVmX21zZyhidWYpLCAifD5ERUYtUkVUUj4iKTsKIAkJCXJldHVybiBQVVNIX0ZBSUxFRDsKIAkJfQogCX0KQEAgLTE0OTAsMTUgKzEzMzIsMTMgQEAKIAlidWYgPSBsX3B0ci0+cHJvdG9fbXNnX3F1ZXVlOwogCWlmIChidWYpIHsKIAkJbXNnX3NldF9hY2soYnVmX21zZyhidWYpLCBtb2QobF9wdHItPm5leHRfaW5fbm8gLSAxKSk7Ci0JCW1zZ19zZXRfYmNhc3RfYWNrKGJ1Zl9tc2coYnVmKSxsX3B0ci0+b3duZXItPmJjbGluay5sYXN0X2luKTsKKwkJbXNnX3NldF9iY2FzdF9hY2soYnVmX21zZyhidWYpLCBsX3B0ci0+b3duZXItPmJjbGluay5sYXN0X2luKTsKIAkJaWYgKHRpcGNfYmVhcmVyX3NlbmQobF9wdHItPmJfcHRyLCBidWYsICZsX3B0ci0+bWVkaWFfYWRkcikpIHsKLQkJCW1zZ19kYmcoYnVmX21zZyhidWYpLCAiPkRFRi1QUk9UPiIpOwogCQkJbF9wdHItPnVuYWNrZWRfd2luZG93ID0gMDsKIAkJCWJ1Zl9kaXNjYXJkKGJ1Zik7CiAJCQlsX3B0ci0+cHJvdG9fbXNnX3F1ZXVlID0gTlVMTDsKIAkJCXJldHVybiAwOwogCQl9IGVsc2UgewotCQkJbXNnX2RiZyhidWZfbXNnKGJ1ZiksICJ8PkRFRi1QUk9UPiIpOwogCQkJbF9wdHItPnN0YXRzLmJlYXJlcl9jb25ncysrOwogCQkJcmV0dXJuIFBVU0hfRkFJTEVEOwogCQl9CkBAIC0xNTE4LDExICsxMzU4LDkgQEAKIAkJCWlmICh0aXBjX2JlYXJlcl9zZW5kKGxfcHRyLT5iX3B0ciwgYnVmLCAmbF9wdHItPm1lZGlhX2FkZHIpKSB7CiAJCQkJaWYgKG1zZ191c2VyKG1zZykgPT0gTVNHX0JVTkRMRVIpCiAJCQkJCW1zZ19zZXRfdHlwZShtc2csIENMT1NFRF9NU0cpOwotCQkJCW1zZ19kYmcobXNnLCAiPlBVU0gtREFUQT4iKTsKIAkJCQlsX3B0ci0+bmV4dF9vdXQgPSBidWYtPm5leHQ7CiAJCQkJcmV0dXJuIDA7CiAJCQl9IGVsc2UgewotCQkJCW1zZ19kYmcobXNnLCAifFBVU0gtREFUQXwiKTsKIAkJCQlsX3B0ci0+c3RhdHMuYmVhcmVyX2NvbmdzKys7CiAJCQkJcmV0dXJuIFBVU0hfRkFJTEVEOwogCQkJfQpAQCAtMTU3MCw4ICsxNDA4LDcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBNQVhfQkVBUkVSUzsgaSsrKSB7CiAJCWlmIChuX3B0ci0+bGlua3NbaV0pIHsKLQkJCWxpbmtfcHJpbnQobl9wdHItPmxpbmtzW2ldLCBUSVBDX09VVFBVVCwKLQkJCQkgICAiUmVzZXR0aW5nIGxpbmtcbiIpOworCQkJbGlua19wcmludChuX3B0ci0+bGlua3NbaV0sICJSZXNldHRpbmcgbGlua1xuIik7CiAJCQl0aXBjX2xpbmtfcmVzZXQobl9wdHItPmxpbmtzW2ldKTsKIAkJfQogCX0KQEAgLTE1ODUsMTMgKzE0MjIsMTIgQEAKIAlzdHJ1Y3QgdGlwY19tc2cgKm1zZyA9IGJ1Zl9tc2coYnVmKTsKIAogCXdhcm4oIlJldHJhbnNtaXNzaW9uIGZhaWx1cmUgb24gbGluayA8JXM+XG4iLCBsX3B0ci0+bmFtZSk7Ci0JdGlwY19tc2dfZGJnKFRJUENfT1VUUFVULCBtc2csICI+UkVUUi1GQUlMPiIpOwogCiAJaWYgKGxfcHRyLT5hZGRyKSB7CiAKIAkJLyogSGFuZGxlIGZhaWx1cmUgb24gc3RhbmRhcmQgbGluayAqLwogCi0JCWxpbmtfcHJpbnQobF9wdHIsIFRJUENfT1VUUFVULCAiUmVzZXR0aW5nIGxpbmtcbiIpOworCQlsaW5rX3ByaW50KGxfcHRyLCAiUmVzZXR0aW5nIGxpbmtcbiIpOwogCQl0aXBjX2xpbmtfcmVzZXQobF9wdHIpOwogCiAJfSBlbHNlIHsKQEAgLTE2MDEsMjEgKzE0MzcsMjEgQEAKIAkJc3RydWN0IHRpcGNfbm9kZSAqbl9wdHI7CiAJCWNoYXIgYWRkcl9zdHJpbmdbMTZdOwogCi0JCXRpcGNfcHJpbnRmKFRJUENfT1VUUFVULCAiTXNnIHNlcSBudW1iZXI6ICV1LCAgIiwgbXNnX3NlcW5vKG1zZykpOwotCQl0aXBjX3ByaW50ZihUSVBDX09VVFBVVCwgIk91dHN0YW5kaW5nIGFja3M6ICVsdVxuIiwKLQkJCQkgICAgICh1bnNpZ25lZCBsb25nKSBUSVBDX1NLQl9DQihidWYpLT5oYW5kbGUpOworCQlpbmZvKCJNc2cgc2VxIG51bWJlcjogJXUsICAiLCBtc2dfc2Vxbm8obXNnKSk7CisJCWluZm8oIk91dHN0YW5kaW5nIGFja3M6ICVsdVxuIiwKKwkJICAgICAodW5zaWduZWQgbG9uZykgVElQQ19TS0JfQ0IoYnVmKS0+aGFuZGxlKTsKIAogCQluX3B0ciA9IGxfcHRyLT5vd25lci0+bmV4dDsKIAkJdGlwY19ub2RlX2xvY2sobl9wdHIpOwogCiAJCXRpcGNfYWRkcl9zdHJpbmdfZmlsbChhZGRyX3N0cmluZywgbl9wdHItPmFkZHIpOwotCQl0aXBjX3ByaW50ZihUSVBDX09VVFBVVCwgIk11bHRpY2FzdCBsaW5rIGluZm8gZm9yICVzXG4iLCBhZGRyX3N0cmluZyk7Ci0JCXRpcGNfcHJpbnRmKFRJUENfT1VUUFVULCAiU3VwcG9ydGVkOiAlZCwgICIsIG5fcHRyLT5iY2xpbmsuc3VwcG9ydGVkKTsKLQkJdGlwY19wcmludGYoVElQQ19PVVRQVVQsICJBY2tlZDogJXVcbiIsIG5fcHRyLT5iY2xpbmsuYWNrZWQpOwotCQl0aXBjX3ByaW50ZihUSVBDX09VVFBVVCwgIkxhc3QgaW46ICV1LCAgIiwgbl9wdHItPmJjbGluay5sYXN0X2luKTsKLQkJdGlwY19wcmludGYoVElQQ19PVVRQVVQsICJHYXAgYWZ0ZXI6ICV1LCAgIiwgbl9wdHItPmJjbGluay5nYXBfYWZ0ZXIpOwotCQl0aXBjX3ByaW50ZihUSVBDX09VVFBVVCwgIkdhcCB0bzogJXVcbiIsIG5fcHRyLT5iY2xpbmsuZ2FwX3RvKTsKLQkJdGlwY19wcmludGYoVElQQ19PVVRQVVQsICJOYWNrIHN5bmM6ICV1XG5cbiIsIG5fcHRyLT5iY2xpbmsubmFja19zeW5jKTsKKwkJaW5mbygiTXVsdGljYXN0IGxpbmsgaW5mbyBmb3IgJXNcbiIsIGFkZHJfc3RyaW5nKTsKKwkJaW5mbygiU3VwcG9ydGVkOiAlZCwgICIsIG5fcHRyLT5iY2xpbmsuc3VwcG9ydGVkKTsKKwkJaW5mbygiQWNrZWQ6ICV1XG4iLCBuX3B0ci0+YmNsaW5rLmFja2VkKTsKKwkJaW5mbygiTGFzdCBpbjogJXUsICAiLCBuX3B0ci0+YmNsaW5rLmxhc3RfaW4pOworCQlpbmZvKCJHYXAgYWZ0ZXI6ICV1LCAgIiwgbl9wdHItPmJjbGluay5nYXBfYWZ0ZXIpOworCQlpbmZvKCJHYXAgdG86ICV1XG4iLCBuX3B0ci0+YmNsaW5rLmdhcF90byk7CisJCWluZm8oIk5hY2sgc3luYzogJXVcblxuIiwgbl9wdHItPmJjbGluay5uYWNrX3N5bmMpOwogCiAJCXRpcGNfa19zaWduYWwoKEhhbmRsZXIpbGlua19yZXNldF9hbGwsICh1bnNpZ25lZCBsb25nKW5fcHRyLT5hZGRyKTsKIApAQCAtMTYzNSwxMiArMTQ3MSw4IEBACiAKIAltc2cgPSBidWZfbXNnKGJ1Zik7CiAKLQlkYmcoIlJldHJhbnNtaXR0aW5nICV1IGluIGxpbmsgJXhcbiIsIHJldHJhbnNtaXRzLCBsX3B0cik7Ci0KIAlpZiAodGlwY19iZWFyZXJfY29uZ2VzdGVkKGxfcHRyLT5iX3B0ciwgbF9wdHIpKSB7CiAJCWlmIChsX3B0ci0+cmV0cmFuc21fcXVldWVfc2l6ZSA9PSAwKSB7Ci0JCQltc2dfZGJnKG1zZywgIj5OT19SRVRSLT5CQ09ORz4iKTsKLQkJCWRiZ19wcmludF9saW5rKGxfcHRyLCAiICAgIik7CiAJCQlsX3B0ci0+cmV0cmFuc21fcXVldWVfaGVhZCA9IG1zZ19zZXFubyhtc2cpOwogCQkJbF9wdHItPnJldHJhbnNtX3F1ZXVlX3NpemUgPSByZXRyYW5zbWl0czsKIAkJfSBlbHNlIHsKQEAgLTE2NjcsNyArMTQ5OSw2IEBACiAJCW1zZ19zZXRfYWNrKG1zZywgbW9kKGxfcHRyLT5uZXh0X2luX25vIC0gMSkpOwogCQltc2dfc2V0X2JjYXN0X2Fjayhtc2csIGxfcHRyLT5vd25lci0+YmNsaW5rLmxhc3RfaW4pOwogCQlpZiAodGlwY19iZWFyZXJfc2VuZChsX3B0ci0+Yl9wdHIsIGJ1ZiwgJmxfcHRyLT5tZWRpYV9hZGRyKSkgewotCQkJbXNnX2RiZyhidWZfbXNnKGJ1ZiksICI+UkVUUj4iKTsKIAkJCWJ1ZiA9IGJ1Zi0+bmV4dDsKIAkJCXJldHJhbnNtaXRzLS07CiAJCQlsX3B0ci0+c3RhdHMucmV0cmFuc21pdHRlZCsrOwpAQCAtMTc5Myw5ICsxNjI0LDggQEAKIAogCQkvKiBFbnN1cmUgbWVzc2FnZSBkYXRhIGlzIGEgc2luZ2xlIGNvbnRpZ3VvdXMgdW5pdCAqLwogCi0JCWlmICh1bmxpa2VseShidWZfbGluZWFyaXplKGJ1ZikpKSB7CisJCWlmICh1bmxpa2VseShidWZfbGluZWFyaXplKGJ1ZikpKQogCQkJZ290byBjb250OwotCQl9CiAKIAkJLyogSGFuZGxlIGFycml2YWwgb2YgYSBub24tdW5pY2FzdCBsaW5rIG1lc3NhZ2UgKi8KIApAQCAtMTkwNyw3ICsxNzM3LDcgQEAKIAkJCQkJCWNvbnRpbnVlOwogCQkJCQljYXNlIFJPVVRFX0RJU1RSSUJVVE9SOgogCQkJCQkJdGlwY19ub2RlX3VubG9jayhuX3B0cik7Ci0JCQkJCQl0aXBjX2NsdHJfcmVjdl9yb3V0aW5nX3RhYmxlKGJ1Zik7CisJCQkJCQlidWZfZGlzY2FyZChidWYpOwogCQkJCQkJY29udGludWU7CiAJCQkJCWNhc2UgTkFNRV9ESVNUUklCVVRPUjoKIAkJCQkJCXRpcGNfbm9kZV91bmxvY2sobl9wdHIpOwpAQCAtMTk1MywxMiArMTc4MywxMCBAQAogCQkJdGlwY19ub2RlX3VubG9jayhuX3B0cik7CiAJCQljb250aW51ZTsKIAkJfQotCQltc2dfZGJnKG1zZywiTlNFUTxSRUM8Iik7CiAJCWxpbmtfc3RhdGVfZXZlbnQobF9wdHIsIFRSQUZGSUNfTVNHX0VWVCk7CiAKIAkJaWYgKGxpbmtfd29ya2luZ193b3JraW5nKGxfcHRyKSkgewogCQkJLyogUmUtaW5zZXJ0IGluIGZyb250IG9mIHF1ZXVlICovCi0JCQltc2dfZGJnKG1zZywiUkVDVi1SRUlOUzoiKTsKIAkJCWJ1Zi0+bmV4dCA9IGhlYWQ7CiAJCQloZWFkID0gYnVmOwogCQkJdGlwY19ub2RlX3VubG9jayhuX3B0cik7CkBAIC0yMDEyLDEzICsxODQwLDExIEBACiAJCQkJKmhlYWQgPSBidWY7CiAJCQlyZXR1cm4gMTsKIAkJfQotCQlpZiAoc2VxX25vID09IG1zZ19zZXFubyhtc2cpKSB7CisJCWlmIChzZXFfbm8gPT0gbXNnX3NlcW5vKG1zZykpCiAJCQlicmVhazsKLQkJfQogCQlwcmV2ID0gY3JzOwogCQljcnMgPSBjcnMtPm5leHQ7Ci0JfQotCXdoaWxlIChjcnMpOworCX0gd2hpbGUgKGNycyk7CiAKIAkvKiBNZXNzYWdlIGlzIGEgZHVwbGljYXRlIG9mIGFuIGV4aXN0aW5nIG1lc3NhZ2UgKi8KIApAQCAtMjA0MCw5ICsxODY2LDYgQEAKIAkJcmV0dXJuOwogCX0KIAotCWRiZygicnggT09TIG1zZzogc2VxX25vICV1LCBleHBlY3RpbmcgJXUgKCV1KVxuIiwKLQkgICAgc2VxX25vLCBtb2QobF9wdHItPm5leHRfaW5fbm8pLCBsX3B0ci0+bmV4dF9pbl9ubyk7Ci0KIAkvKiBSZWNvcmQgT09TIHBhY2tldCBhcnJpdmFsIChmb3JjZSBtaXNtYXRjaCBvbiBuZXh0IHRpbWVvdXQpICovCiAKIAlsX3B0ci0+Y2hlY2twb2ludC0tOwpAQCAtMjEzMiwxMSArMTk1NSwxMCBAQAogCQltc2dfc2V0X21heF9wa3QobXNnLCBsX3B0ci0+bWF4X3BrdF90YXJnZXQpOwogCX0KIAotCWlmICh0aXBjX25vZGVfaGFzX3JlZHVuZGFudF9saW5rcyhsX3B0ci0+b3duZXIpKSB7CisJaWYgKHRpcGNfbm9kZV9oYXNfcmVkdW5kYW50X2xpbmtzKGxfcHRyLT5vd25lcikpCiAJCW1zZ19zZXRfcmVkdW5kYW50X2xpbmsobXNnKTsKLQl9IGVsc2UgeworCWVsc2UKIAkJbXNnX2NsZWFyX3JlZHVuZGFudF9saW5rKG1zZyk7Ci0JfQogCW1zZ19zZXRfbGlua3ByaW8obXNnLCBsX3B0ci0+cHJpb3JpdHkpOwogCiAJLyogRW5zdXJlIHNlcXVlbmNlIG51bWJlciB3aWxsIG5vdCBmaXQgOiAqLwpAQCAtMjE2MCw4ICsxOTgyLDYgQEAKIAogCS8qIE1lc3NhZ2UgY2FuIGJlIHNlbnQgKi8KIAotCW1zZ19kYmcobXNnLCAiPj4iKTsKLQogCWJ1ZiA9IHRpcGNfYnVmX2FjcXVpcmUobXNnX3NpemUpOwogCWlmICghYnVmKQogCQlyZXR1cm47CkBAIC0yMTk1LDggKzIwMTUsNiBAQAogCXUzMiBtc2dfdG9sOwogCXN0cnVjdCB0aXBjX21zZyAqbXNnID0gYnVmX21zZyhidWYpOwogCi0JZGJnKCJBVCgldSk6IiwgamlmZmllc190b19tc2VjcyhqaWZmaWVzKSk7Ci0JbXNnX2RiZyhtc2csICI8PCIpOwogCWlmIChsaW5rX2Jsb2NrZWQobF9wdHIpKQogCQlnb3RvIGV4aXQ7CiAKQEAgLTIyMTUsMTEgKzIwMzMsOCBAQAogCWNhc2UgUkVTRVRfTVNHOgogCQlpZiAoIWxpbmtfd29ya2luZ191bmtub3duKGxfcHRyKSAmJgogCQkgICAgKGxfcHRyLT5wZWVyX3Nlc3Npb24gIT0gSU5WQUxJRF9TRVNTSU9OKSkgewotCQkJaWYgKG1zZ19zZXNzaW9uKG1zZykgPT0gbF9wdHItPnBlZXJfc2Vzc2lvbikgewotCQkJCWRiZygiRHVwbGljYXRlIFJFU0VUOiAldTwtPiV1XG4iLAotCQkJCSAgICBtc2dfc2Vzc2lvbihtc2cpLCBsX3B0ci0+cGVlcl9zZXNzaW9uKTsKKwkJCWlmIChtc2dfc2Vzc2lvbihtc2cpID09IGxfcHRyLT5wZWVyX3Nlc3Npb24pCiAJCQkJYnJlYWs7IC8qIGR1cGxpY2F0ZTogaWdub3JlICovCi0JCQl9CiAJCX0KIAkJLyogZmFsbCB0aHJ1JyAqLwogCWNhc2UgQUNUSVZBVEVfTVNHOgpAQCAtMjIyNyw4ICsyMDQyLDggQEAKIAogCQlzdHJjcHkoKHN0cnJjaHIobF9wdHItPm5hbWUsICc6JykgKyAxKSwgKGNoYXIgKiltc2dfZGF0YShtc2cpKTsKIAotCQlpZiAoKG1zZ190b2wgPSBtc2dfbGlua190b2xlcmFuY2UobXNnKSkgJiYKLQkJICAgIChtc2dfdG9sID4gbF9wdHItPnRvbGVyYW5jZSkpCisJCW1zZ190b2wgPSBtc2dfbGlua190b2xlcmFuY2UobXNnKTsKKwkJaWYgKG1zZ190b2wgPiBsX3B0ci0+dG9sZXJhbmNlKQogCQkJbGlua19zZXRfc3VwZXJ2aXNpb25fcHJvcHMobF9wdHIsIG1zZ190b2wpOwogCiAJCWlmIChtc2dfbGlua3ByaW8obXNnKSA+IGxfcHRyLT5wcmlvcml0eSkKQEAgLTIyNTEsMTMgKzIwNjYsMTMgQEAKIAkJbF9wdHItPnBlZXJfYmVhcmVyX2lkID0gbXNnX2JlYXJlcl9pZChtc2cpOwogCiAJCS8qIFN5bmNocm9uaXplIGJyb2FkY2FzdCBzZXF1ZW5jZSBudW1iZXJzICovCi0JCWlmICghdGlwY19ub2RlX2hhc19yZWR1bmRhbnRfbGlua3MobF9wdHItPm93bmVyKSkgeworCQlpZiAoIXRpcGNfbm9kZV9oYXNfcmVkdW5kYW50X2xpbmtzKGxfcHRyLT5vd25lcikpCiAJCQlsX3B0ci0+b3duZXItPmJjbGluay5sYXN0X2luID0gbW9kKG1zZ19sYXN0X2JjYXN0KG1zZykpOwotCQl9CiAJCWJyZWFrOwogCWNhc2UgU1RBVEVfTVNHOgogCi0JCWlmICgobXNnX3RvbCA9IG1zZ19saW5rX3RvbGVyYW5jZShtc2cpKSkKKwkJbXNnX3RvbCA9IG1zZ19saW5rX3RvbGVyYW5jZShtc2cpOworCQlpZiAobXNnX3RvbCkKIAkJCWxpbmtfc2V0X3N1cGVydmlzaW9uX3Byb3BzKGxfcHRyLCBtc2dfdG9sKTsKIAogCQlpZiAobXNnX2xpbmtwcmlvKG1zZykgJiYKQEAgLTIyODAsOCArMjA5NSw2IEBACiAKIAkJbWF4X3BrdF9hY2sgPSBtc2dfbWF4X3BrdChtc2cpOwogCQlpZiAobWF4X3BrdF9hY2sgPiBsX3B0ci0+bWF4X3BrdCkgewotCQkJZGJnKCJMaW5rIDwlcz4gdXBkYXRlZCBNVFUgJXUgLT4gJXVcbiIsCi0JCQkgICAgbF9wdHItPm5hbWUsIGxfcHRyLT5tYXhfcGt0LCBtYXhfcGt0X2Fjayk7CiAJCQlsX3B0ci0+bWF4X3BrdCA9IG1heF9wa3RfYWNrOwogCQkJbF9wdHItPm1heF9wa3RfcHJvYmVzID0gMDsKIAkJfQpAQCAtMjI4OSw5ICsyMTAyLDggQEAKIAkJbWF4X3BrdF9hY2sgPSAwOwogCQlpZiAobXNnX3Byb2JlKG1zZykpIHsKIAkJCWxfcHRyLT5zdGF0cy5yZWN2X3Byb2JlcysrOwotCQkJaWYgKG1zZ19zaXplKG1zZykgPiBzaXplb2YobF9wdHItPnByb3RvX21zZykpIHsKKwkJCWlmIChtc2dfc2l6ZShtc2cpID4gc2l6ZW9mKGxfcHRyLT5wcm90b19tc2cpKQogCQkJCW1heF9wa3RfYWNrID0gbXNnX3NpemUobXNnKTsKLQkJCX0KIAkJfQogCiAJCS8qIFByb3RvY29sIG1lc3NhZ2UgYmVmb3JlIHJldHJhbnNtaXRzLCByZWR1Y2UgbG9zcyByaXNrICovCkBAIC0yMzAzLDE0ICsyMTE1LDExIEBACiAJCQkJCQkgMCwgcmVjX2dhcCwgMCwgMCwgbWF4X3BrdF9hY2spOwogCQl9CiAJCWlmIChtc2dfc2VxX2dhcChtc2cpKSB7Ci0JCQltc2dfZGJnKG1zZywgIldpdGggR2FwOiIpOwogCQkJbF9wdHItPnN0YXRzLnJlY3ZfbmFja3MrKzsKIAkJCXRpcGNfbGlua19yZXRyYW5zbWl0KGxfcHRyLCBsX3B0ci0+Zmlyc3Rfb3V0LAogCQkJCQkgICAgIG1zZ19zZXFfZ2FwKG1zZykpOwogCQl9CiAJCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCW1zZ19kYmcoYnVmX21zZyhidWYpLCAiPERJU0NBUkRJTkcgVU5LTk9XTjwiKTsKIAl9CiBleGl0OgogCWJ1Zl9kaXNjYXJkKGJ1Zik7CkBAIC0yMzQ1LDggKzIxNTQsNiBAQAogCX0KIAlza2JfY29weV90b19saW5lYXJfZGF0YShidWYsIHR1bm5lbF9oZHIsIElOVF9IX1NJWkUpOwogCXNrYl9jb3B5X3RvX2xpbmVhcl9kYXRhX29mZnNldChidWYsIElOVF9IX1NJWkUsIG1zZywgbGVuZ3RoKTsKLQlkYmcoIiVjLT4lYzoiLCBsX3B0ci0+Yl9wdHItPm5ldF9wbGFuZSwgdHVubmVsLT5iX3B0ci0+bmV0X3BsYW5lKTsKLQltc2dfZGJnKGJ1Zl9tc2coYnVmKSwgIj5TRU5EPiIpOwogCXRpcGNfbGlua19zZW5kX2J1Zih0dW5uZWwsIGJ1Zik7CiB9CiAKQEAgLTIzNzgsNyArMjE4NSw2IEBACiAJCSBPUklHSU5BTF9NU0csIElOVF9IX1NJWkUsIGxfcHRyLT5hZGRyKTsKIAltc2dfc2V0X2JlYXJlcl9pZCgmdHVubmVsX2hkciwgbF9wdHItPnBlZXJfYmVhcmVyX2lkKTsKIAltc2dfc2V0X21zZ2NudCgmdHVubmVsX2hkciwgbXNnY291bnQpOwotCWRiZygiTGluayBjaGFuZ2VvdmVyIHJlcXVpcmVzICV1IHR1bm5lbCBtZXNzYWdlc1xuIiwgbXNnY291bnQpOwogCiAJaWYgKCFsX3B0ci0+Zmlyc3Rfb3V0KSB7CiAJCXN0cnVjdCBza19idWZmICpidWY7CkBAIC0yMzg3LDkgKzIxOTMsNiBAQAogCQlpZiAoYnVmKSB7CiAJCQlza2JfY29weV90b19saW5lYXJfZGF0YShidWYsICZ0dW5uZWxfaGRyLCBJTlRfSF9TSVpFKTsKIAkJCW1zZ19zZXRfc2l6ZSgmdHVubmVsX2hkciwgSU5UX0hfU0laRSk7Ci0JCQlkYmcoIiVjLT4lYzoiLCBsX3B0ci0+Yl9wdHItPm5ldF9wbGFuZSwKLQkJCSAgICB0dW5uZWwtPmJfcHRyLT5uZXRfcGxhbmUpOwotCQkJbXNnX2RiZygmdHVubmVsX2hkciwgIkVNUFRZPlNFTkQ+Iik7CiAJCQl0aXBjX2xpbmtfc2VuZF9idWYodHVubmVsLCBidWYpOwogCQl9IGVsc2UgewogCQkJd2FybigiTGluayBjaGFuZ2VvdmVyIGVycm9yLCAiCkBAIC0yNDA2LDExICsyMjA5LDExIEBACiAKIAkJaWYgKChtc2dfdXNlcihtc2cpID09IE1TR19CVU5ETEVSKSAmJiBzcGxpdF9idW5kbGVzKSB7CiAJCQlzdHJ1Y3QgdGlwY19tc2cgKm0gPSBtc2dfZ2V0X3dyYXBwZWQobXNnKTsKLQkJCXVuY2hhciogcG9zID0gKHVuY2hhciopbTsKKwkJCXVuY2hhciAqcG9zID0gKHVuY2hhciAqKW07CiAKIAkJCW1zZ2NvdW50ID0gbXNnX21zZ2NudChtc2cpOwogCQkJd2hpbGUgKG1zZ2NvdW50LS0pIHsKLQkJCQltc2dfc2V0X3NlcW5vKG0sbXNnX3NlcW5vKG1zZykpOworCQkJCW1zZ19zZXRfc2Vxbm8obSwgbXNnX3NlcW5vKG1zZykpOwogCQkJCXRpcGNfbGlua190dW5uZWwobF9wdHIsICZ0dW5uZWxfaGRyLCBtLAogCQkJCQkJIG1zZ19saW5rX3NlbGVjdG9yKG0pKTsKIAkJCQlwb3MgKz0gYWxpZ24obXNnX3NpemUobSkpOwpAQCAtMjQ1Myw5ICsyMjU2LDYgQEAKIAkJc2tiX2NvcHlfdG9fbGluZWFyX2RhdGEob3V0YnVmLCAmdHVubmVsX2hkciwgSU5UX0hfU0laRSk7CiAJCXNrYl9jb3B5X3RvX2xpbmVhcl9kYXRhX29mZnNldChvdXRidWYsIElOVF9IX1NJWkUsIGl0ZXItPmRhdGEsCiAJCQkJCSAgICAgICBsZW5ndGgpOwotCQlkYmcoIiVjLT4lYzoiLCBsX3B0ci0+Yl9wdHItPm5ldF9wbGFuZSwKLQkJICAgIHR1bm5lbC0+Yl9wdHItPm5ldF9wbGFuZSk7Ci0JCW1zZ19kYmcoYnVmX21zZyhvdXRidWYpLCAiPlNFTkQ+Iik7CiAJCXRpcGNfbGlua19zZW5kX2J1Zih0dW5uZWwsIG91dGJ1Zik7CiAJCWlmICghdGlwY19saW5rX2lzX3VwKGxfcHRyKSkKIAkJCXJldHVybjsKQEAgLTI1MDIsMzEgKzIzMDIsMjQgQEAKIAl1MzIgbXNnX2NvdW50ID0gbXNnX21zZ2NudCh0dW5uZWxfbXNnKTsKIAogCWRlc3RfbGluayA9ICgqbF9wdHIpLT5vd25lci0+bGlua3NbbXNnX2JlYXJlcl9pZCh0dW5uZWxfbXNnKV07Ci0JaWYgKCFkZXN0X2xpbmspIHsKLQkJbXNnX2RiZyh0dW5uZWxfbXNnLCAiTk9MSU5LLzxSRUM8Iik7CisJaWYgKCFkZXN0X2xpbmspCiAJCWdvdG8gZXhpdDsKLQl9CiAJaWYgKGRlc3RfbGluayA9PSAqbF9wdHIpIHsKIAkJZXJyKCJVbmV4cGVjdGVkIGNoYW5nZW92ZXIgbWVzc2FnZSBvbiBsaW5rIDwlcz5cbiIsCiAJCSAgICAoKmxfcHRyKS0+bmFtZSk7CiAJCWdvdG8gZXhpdDsKIAl9Ci0JZGJnKCIlYzwtJWM6IiwgZGVzdF9saW5rLT5iX3B0ci0+bmV0X3BsYW5lLAotCSAgICAoKmxfcHRyKS0+Yl9wdHItPm5ldF9wbGFuZSk7CiAJKmxfcHRyID0gZGVzdF9saW5rOwogCW1zZyA9IG1zZ19nZXRfd3JhcHBlZCh0dW5uZWxfbXNnKTsKIAogCWlmIChtc2dfdHlwID09IERVUExJQ0FURV9NU0cpIHsKLQkJaWYgKGxlc3MobXNnX3NlcW5vKG1zZyksIG1vZChkZXN0X2xpbmstPm5leHRfaW5fbm8pKSkgewotCQkJbXNnX2RiZyh0dW5uZWxfbXNnLCAiRFJPUC88UkVDPCIpOworCQlpZiAobGVzcyhtc2dfc2Vxbm8obXNnKSwgbW9kKGRlc3RfbGluay0+bmV4dF9pbl9ubykpKQogCQkJZ290byBleGl0OwotCQl9Ci0JCSpidWYgPSBidWZfZXh0cmFjdCh0dW5uZWxfYnVmLElOVF9IX1NJWkUpOworCQkqYnVmID0gYnVmX2V4dHJhY3QodHVubmVsX2J1ZiwgSU5UX0hfU0laRSk7CiAJCWlmICgqYnVmID09IE5VTEwpIHsKIAkJCXdhcm4oIkxpbmsgY2hhbmdlb3ZlciBlcnJvciwgZHVwbGljYXRlIG1zZyBkcm9wcGVkXG4iKTsKIAkJCWdvdG8gZXhpdDsKIAkJfQotCQltc2dfZGJnKHR1bm5lbF9tc2csICJUTkw8UkVDPCIpOwogCQlidWZfZGlzY2FyZCh0dW5uZWxfYnVmKTsKIAkJcmV0dXJuIDE7CiAJfQpAQCAtMjUzNCwxOCArMjMyNywxNCBAQAogCS8qIEZpcnN0IG9yaWdpbmFsIG1lc3NhZ2UgPzogKi8KIAogCWlmICh0aXBjX2xpbmtfaXNfdXAoZGVzdF9saW5rKSkgewotCQltc2dfZGJnKHR1bm5lbF9tc2csICJVUC9GSVJTVC88UkVDPCIpOwogCQlpbmZvKCJSZXNldHRpbmcgbGluayA8JXM+LCBjaGFuZ2VvdmVyIGluaXRpYXRlZCBieSBwZWVyXG4iLAogCQkgICAgIGRlc3RfbGluay0+bmFtZSk7CiAJCXRpcGNfbGlua19yZXNldChkZXN0X2xpbmspOwogCQlkZXN0X2xpbmstPmV4cF9tc2dfY291bnQgPSBtc2dfY291bnQ7Ci0JCWRiZygiRXhwZWN0aW5nICV1IHR1bm5lbGxlZCBtZXNzYWdlc1xuIiwgbXNnX2NvdW50KTsKIAkJaWYgKCFtc2dfY291bnQpCiAJCQlnb3RvIGV4aXQ7CiAJfSBlbHNlIGlmIChkZXN0X2xpbmstPmV4cF9tc2dfY291bnQgPT0gU1RBUlRfQ0hBTkdFT1ZFUikgewotCQltc2dfZGJnKHR1bm5lbF9tc2csICJCTEsvRklSU1QvPFJFQzwiKTsKIAkJZGVzdF9saW5rLT5leHBfbXNnX2NvdW50ID0gbXNnX2NvdW50OwotCQlkYmcoIkV4cGVjdGluZyAldSB0dW5uZWxsZWQgbWVzc2FnZXNcbiIsIG1zZ19jb3VudCk7CiAJCWlmICghbXNnX2NvdW50KQogCQkJZ290byBleGl0OwogCX0KQEAgLTI1NTUsMTggKzIzNDQsMTQgQEAKIAlpZiAoZGVzdF9saW5rLT5leHBfbXNnX2NvdW50ID09IDApIHsKIAkJd2FybigiTGluayBzd2l0Y2hvdmVyIGVycm9yLCAiCiAJCSAgICAgImdvdCB0b28gbWFueSB0dW5uZWxsZWQgbWVzc2FnZXNcbiIpOwotCQltc2dfZGJnKHR1bm5lbF9tc2csICJPVkVSRFVFL0RST1AvPFJFQzwiKTsKLQkJZGJnX3ByaW50X2xpbmsoZGVzdF9saW5rLCAiTElOSzoiKTsKIAkJZ290byBleGl0OwogCX0KIAlkZXN0X2xpbmstPmV4cF9tc2dfY291bnQtLTsKIAlpZiAobGVzcyhtc2dfc2Vxbm8obXNnKSwgZGVzdF9saW5rLT5yZXNldF9jaGVja3BvaW50KSkgewotCQltc2dfZGJnKHR1bm5lbF9tc2csICJEUk9QL0RVUEwvPFJFQzwiKTsKIAkJZ290byBleGl0OwogCX0gZWxzZSB7CiAJCSpidWYgPSBidWZfZXh0cmFjdCh0dW5uZWxfYnVmLCBJTlRfSF9TSVpFKTsKIAkJaWYgKCpidWYgIT0gTlVMTCkgewotCQkJbXNnX2RiZyh0dW5uZWxfbXNnLCAiVE5MPFJFQzwiKTsKIAkJCWJ1Zl9kaXNjYXJkKHR1bm5lbF9idWYpOwogCQkJcmV0dXJuIDE7CiAJCX0gZWxzZSB7CkBAIC0yNTg4LDcgKzIzNzMsNiBAQAogCXUzMiBwb3MgPSBJTlRfSF9TSVpFOwogCXN0cnVjdCBza19idWZmICpvYnVmOwogCi0JbXNnX2RiZyhidWZfbXNnKGJ1ZiksICI8Qk5ETDw6ICIpOwogCXdoaWxlIChtc2djb3VudC0tKSB7CiAJCW9idWYgPSBidWZfZXh0cmFjdChidWYsIHBvcyk7CiAJCWlmIChvYnVmID09IE5VTEwpIHsKQEAgLTI1OTYsNyArMjM4MCw2IEBACiAJCQlicmVhazsKIAkJfQogCQlwb3MgKz0gYWxpZ24obXNnX3NpemUoYnVmX21zZyhvYnVmKSkpOwotCQltc2dfZGJnKGJ1Zl9tc2cob2J1ZiksICIgICAgIC8iKTsKIAkJdGlwY19uZXRfcm91dGVfbXNnKG9idWYpOwogCX0KIAlidWZfZGlzY2FyZChidWYpOwpAQCAtMjczMyw3ICsyNTE2LDYgQEAKIAl1MzIgbG9uZ19tc2dfc2VxX25vID0gbXNnX2xvbmdfbXNnbm8oZnJhZ20pOwogCiAJKmZiID0gTlVMTDsKLQltc2dfZGJnKGZyYWdtLCJGUkc8UkVDPCIpOwogCiAJLyogSXMgdGhlcmUgYW4gaW5jb21wbGV0ZSBtZXNzYWdlIHdhaXRpbmcgZm9yIHRoaXMgZnJhZ21lbnQ/ICovCiAKQEAgLTI3NTIsNyArMjUzNCw2IEBACiAJCWlmIChtc2dfdHlwZShpbXNnKSA9PSBUSVBDX01DQVNUX01TRykKIAkJCW1heCA9IFRJUENfTUFYX1VTRVJfTVNHX1NJWkUgKyBNQ0FTVF9IX1NJWkU7CiAJCWlmIChtc2dfc2l6ZShpbXNnKSA+IG1heCkgewotCQkJbXNnX2RiZyhmcmFnbSwiPFJFQzxPdmVyc2l6ZWQ6ICIpOwogCQkJYnVmX2Rpc2NhcmQoZmJ1Zik7CiAJCQlyZXR1cm4gMDsKIAkJfQpAQCAtMjc2NSw4ICsyNTQ2LDggQEAKIAkJCS8qICBQcmVwYXJlIGJ1ZmZlciBmb3Igc3Vic2VxdWVudCBmcmFnbWVudHMuICovCiAKIAkJCXNldF9sb25nX21zZ19zZXFubyhwYnVmLCBsb25nX21zZ19zZXFfbm8pOwotCQkJc2V0X2ZyYWdtX3NpemUocGJ1ZixmcmFnbV9zeik7Ci0JCQlzZXRfZXhwZWN0ZWRfZnJhZ3MocGJ1ZixleHBfZnJhZ21fY250IC0gMSk7CisJCQlzZXRfZnJhZ21fc2l6ZShwYnVmLCBmcmFnbV9zeik7CisJCQlzZXRfZXhwZWN0ZWRfZnJhZ3MocGJ1ZiwgZXhwX2ZyYWdtX2NudCAtIDEpOwogCQl9IGVsc2UgewogCQkJd2FybigiTGluayB1bmFibGUgdG8gcmVhc3NlbWJsZSBmcmFnbWVudGVkIG1lc3NhZ2VcbiIpOwogCQl9CkBAIC0yNzkzLDEzICsyNTc0LDkgQEAKIAkJCSptID0gYnVmX21zZyhwYnVmKTsKIAkJCXJldHVybiAxOwogCQl9Ci0JCXNldF9leHBlY3RlZF9mcmFncyhwYnVmLGV4cF9mcmFncyk7CisJCXNldF9leHBlY3RlZF9mcmFncyhwYnVmLCBleHBfZnJhZ3MpOwogCQlyZXR1cm4gMDsKIAl9Ci0JZGJnKCIgRGlzY2FyZGluZyBvcnBoYW4gZnJhZ21lbnQgJXhcbiIsZmJ1Zik7Ci0JbXNnX2RiZyhmcmFnbSwiT1JQSEFOOiIpOwotCWRiZygiUGVuZGluZyBsb25nIGJ1ZmZlcnM6XG4iKTsKLQlkYmdfcHJpbnRfYnVmX2NoYWluKCpwZW5kaW5nKTsKIAlidWZfZGlzY2FyZChmYnVmKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTI4MjcsMTEgKzI2MDQsNiBAQAogCQkJaW5jcl90aW1lcl9jbnQoYnVmKTsKIAkJCXByZXYgPSBidWY7CiAJCX0gZWxzZSB7Ci0JCQlkYmcoIiBEaXNjYXJkaW5nIGluY29tcGxldGUgbG9uZyBidWZmZXJcbiIpOwotCQkJbXNnX2RiZyhidWZfbXNnKGJ1ZiksICJMT05HOiIpOwotCQkJZGJnX3ByaW50X2xpbmsobF9wdHIsICJjdXJyOiIpOwotCQkJZGJnKCJQZW5kaW5nIGxvbmcgYnVmZmVyczpcbiIpOwotCQkJZGJnX3ByaW50X2J1Zl9jaGFpbihsX3B0ci0+ZGVmcmFnbV9idWYpOwogCQkJaWYgKHByZXYpCiAJCQkJcHJldi0+bmV4dCA9IGJ1Zi0+bmV4dDsKIAkJCWVsc2UKQEAgLTI4NjYsNyArMjYzOCw2IEBACiAJbF9wdHItPnF1ZXVlX2xpbWl0W1RJUENfSElHSF9JTVBPUlRBTkNFICsgNF0gPSA5MDA7CiAJbF9wdHItPnF1ZXVlX2xpbWl0W1RJUENfQ1JJVElDQUxfSU1QT1JUQU5DRSArIDRdID0gMTIwMDsKIAlsX3B0ci0+cXVldWVfbGltaXRbQ09OTl9NQU5BR0VSXSA9IDEyMDA7Ci0JbF9wdHItPnF1ZXVlX2xpbWl0W1JPVVRFX0RJU1RSSUJVVE9SXSA9IDEyMDA7CiAJbF9wdHItPnF1ZXVlX2xpbWl0W0NIQU5HRU9WRVJfUFJPVE9DT0xdID0gMjUwMDsKIAlsX3B0ci0+cXVldWVfbGltaXRbTkFNRV9ESVNUUklCVVRPUl0gPSAzMDAwOwogCS8qIEZSQUdNRU5UIGFuZCBMQVNUX0ZSQUdNRU5UIHBhY2tldHMgKi8KQEAgLTMxNjgsNyArMjkzOSw3IEBACiAJCXJldHVybiBNQVhfTVNHX1NJWkU7CiAKIAlyZWFkX2xvY2tfYmgoJnRpcGNfbmV0X2xvY2spOwotCW5fcHRyID0gdGlwY19ub2RlX3NlbGVjdChkZXN0LCBzZWxlY3Rvcik7CisJbl9wdHIgPSB0aXBjX25vZGVfZmluZChkZXN0KTsKIAlpZiAobl9wdHIpIHsKIAkJdGlwY19ub2RlX2xvY2sobl9wdHIpOwogCQlsX3B0ciA9IG5fcHRyLT5hY3RpdmVfbGlua3Nbc2VsZWN0b3IgJiAxXTsKQEAgLTMxODAsMjcgKzI5NTEsMjIgQEAKIAlyZXR1cm4gcmVzOwogfQogCi1zdGF0aWMgdm9pZCBsaW5rX2R1bXBfc2VuZF9xdWV1ZShzdHJ1Y3QgbGluayAqbF9wdHIpCitzdGF0aWMgdm9pZCBsaW5rX3ByaW50KHN0cnVjdCBsaW5rICpsX3B0ciwgY29uc3QgY2hhciAqc3RyKQogewotCWlmIChsX3B0ci0+bmV4dF9vdXQpIHsKLQkJaW5mbygiXG5Db250ZW50cyBvZiB1bnNlbnQgcXVldWU6XG4iKTsKLQkJZGJnX3ByaW50X2J1Zl9jaGFpbihsX3B0ci0+bmV4dF9vdXQpOwotCX0KLQlpbmZvKCJcbkNvbnRlbnRzIG9mIHNlbmQgcXVldWU6XG4iKTsKLQlpZiAobF9wdHItPmZpcnN0X291dCkgewotCQlkYmdfcHJpbnRfYnVmX2NoYWluKGxfcHRyLT5maXJzdF9vdXQpOwotCX0KLQlpbmZvKCJFbXB0eSBzZW5kIHF1ZXVlXG4iKTsKLX0KKwljaGFyIHByaW50X2FyZWFbMjU2XTsKKwlzdHJ1Y3QgcHJpbnRfYnVmIHBiOworCXN0cnVjdCBwcmludF9idWYgKmJ1ZiA9ICZwYjsKIAotc3RhdGljIHZvaWQgbGlua19wcmludChzdHJ1Y3QgbGluayAqbF9wdHIsIHN0cnVjdCBwcmludF9idWYgKmJ1ZiwKLQkJICAgICAgIGNvbnN0IGNoYXIgKnN0cikKLXsKKwl0aXBjX3ByaW50YnVmX2luaXQoYnVmLCBwcmludF9hcmVhLCBzaXplb2YocHJpbnRfYXJlYSkpOworCiAJdGlwY19wcmludGYoYnVmLCBzdHIpOwotCWlmIChsaW5rX3Jlc2V0X3Jlc2V0KGxfcHRyKSB8fCBsaW5rX3Jlc2V0X3Vua25vd24obF9wdHIpKQotCQlyZXR1cm47CiAJdGlwY19wcmludGYoYnVmLCAiTGluayAleDwlcz46IiwKIAkJICAgIGxfcHRyLT5hZGRyLCBsX3B0ci0+Yl9wdHItPnB1YmwubmFtZSk7CisKKyNpZmRlZiBDT05GSUdfVElQQ19ERUJVRworCWlmIChsaW5rX3Jlc2V0X3Jlc2V0KGxfcHRyKSB8fCBsaW5rX3Jlc2V0X3Vua25vd24obF9wdHIpKQorCQlnb3RvIHByaW50X3N0YXRlOworCiAJdGlwY19wcmludGYoYnVmLCAiOiBOWE8oJXUpOiIsIG1vZChsX3B0ci0+bmV4dF9vdXRfbm8pKTsKIAl0aXBjX3ByaW50ZihidWYsICJOWEkoJXUpOiIsIG1vZChsX3B0ci0+bmV4dF9pbl9ubykpOwogCXRpcGNfcHJpbnRmKGJ1ZiwgIlNRVUUiKTsKQEAgLTMyMTgsNyArMjk4NCw2IEBACiAJCQl0aXBjX3ByaW50ZihidWYsICJmaXJzdF9vdXQ9ICV4ICIsIGxfcHRyLT5maXJzdF9vdXQpOwogCQkJdGlwY19wcmludGYoYnVmLCAibmV4dF9vdXQ9ICV4ICIsIGxfcHRyLT5uZXh0X291dCk7CiAJCQl0aXBjX3ByaW50ZihidWYsICJsYXN0X291dD0gJXggIiwgbF9wdHItPmxhc3Rfb3V0KTsKLQkJCWxpbmtfZHVtcF9zZW5kX3F1ZXVlKGxfcHRyKTsKIAkJfQogCX0gZWxzZQogCQl0aXBjX3ByaW50ZihidWYsICJbXSIpOwpAQCAtMzIzMiwxNCArMjk5NywyMCBAQAogCQkJCSAgICBsX3B0ci0+ZGVmZXJyZWRfaW5xdWV1ZV9zeik7CiAJCX0KIAl9CitwcmludF9zdGF0ZToKKyNlbmRpZgorCiAJaWYgKGxpbmtfd29ya2luZ191bmtub3duKGxfcHRyKSkKIAkJdGlwY19wcmludGYoYnVmLCAiOldVIik7Ci0JaWYgKGxpbmtfcmVzZXRfcmVzZXQobF9wdHIpKQorCWVsc2UgaWYgKGxpbmtfcmVzZXRfcmVzZXQobF9wdHIpKQogCQl0aXBjX3ByaW50ZihidWYsICI6UlIiKTsKLQlpZiAobGlua19yZXNldF91bmtub3duKGxfcHRyKSkKKwllbHNlIGlmIChsaW5rX3Jlc2V0X3Vua25vd24obF9wdHIpKQogCQl0aXBjX3ByaW50ZihidWYsICI6UlUiKTsKLQlpZiAobGlua193b3JraW5nX3dvcmtpbmcobF9wdHIpKQorCWVsc2UgaWYgKGxpbmtfd29ya2luZ193b3JraW5nKGxfcHRyKSkKIAkJdGlwY19wcmludGYoYnVmLCAiOldXIik7CiAJdGlwY19wcmludGYoYnVmLCAiXG4iKTsKKworCXRpcGNfcHJpbnRidWZfdmFsaWRhdGUoYnVmKTsKKwlpbmZvKCIlcyIsIHByaW50X2FyZWEpOwogfQogCmRpZmYgLS1naXQgYS9uZXQvdGlwYy9saW5rLmggYi9uZXQvdGlwYy9saW5rLmgKaW5kZXggZjk4YmM2MS4uNzA5NjdlNiAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvbGluay5oCisrKyBiL25ldC90aXBjL2xpbmsuaApAQCAtMzcsOSArMzcsOCBAQAogI2lmbmRlZiBfVElQQ19MSU5LX0gKICNkZWZpbmUgX1RJUENfTElOS19ICiAKLSNpbmNsdWRlICJkYmcuaCIKKyNpbmNsdWRlICJsb2cuaCIKICNpbmNsdWRlICJtc2cuaCIKLSNpbmNsdWRlICJiZWFyZXIuaCIKICNpbmNsdWRlICJub2RlLmgiCiAKICNkZWZpbmUgUFVTSF9GQUlMRUQgICAxCkBAIC0xMDgsNyArMTA3LDYgQEAKICAqIEBsb25nX21zZ19zZXFfbm86IG5leHQgaWRlbnRpZmllciB0byB1c2UgZm9yIG91dGJvdW5kIGZyYWdtZW50ZWQgbWVzc2FnZXMKICAqIEBkZWZyYWdtX2J1ZjogbGlzdCBvZiBwYXJ0aWFsbHkgcmVhc3NlbWJsZWQgaW5ib3VuZCBtZXNzYWdlIGZyYWdtZW50cwogICogQHN0YXRzOiBjb2xsZWN0cyBzdGF0aXN0aWNzIHJlZ2FyZGluZyBsaW5rIGFjdGl2aXR5Ci0gKiBAcHJpbnRfYnVmOiBwcmludCBidWZmZXIgdXNlZCB0byBsb2cgbGluayBhY3Rpdml0eQogICovCiAKIHN0cnVjdCBsaW5rIHsKQEAgLTIxMSw4ICsyMDksNiBAQAogCQl1MzIgbXNnX2xlbmd0aHNfdG90YWw7CiAJCXUzMiBtc2dfbGVuZ3RoX3Byb2ZpbGVbN107CiAJfSBzdGF0czsKLQotCXN0cnVjdCBwcmludF9idWYgcHJpbnRfYnVmOwogfTsKIAogc3RydWN0IHBvcnQ7CkBAIC0yMzMsOCArMjI5LDggQEAKIHZvaWQgdGlwY19saW5rX3Jlc2V0KHN0cnVjdCBsaW5rICpsX3B0cik7CiBpbnQgdGlwY19saW5rX3NlbmQoc3RydWN0IHNrX2J1ZmYgKmJ1ZiwgdTMyIGRlc3QsIHUzMiBzZWxlY3Rvcik7CiBpbnQgdGlwY19saW5rX3NlbmRfYnVmKHN0cnVjdCBsaW5rICpsX3B0ciwgc3RydWN0IHNrX2J1ZmYgKmJ1Zik7Ci11MzIgdGlwY19saW5rX2dldF9tYXhfcGt0KHUzMiBkZXN0LHUzMiBzZWxlY3Rvcik7Ci1pbnQgdGlwY19saW5rX3NlbmRfc2VjdGlvbnNfZmFzdChzdHJ1Y3QgcG9ydCogc2VuZGVyLAordTMyIHRpcGNfbGlua19nZXRfbWF4X3BrdCh1MzIgZGVzdCwgdTMyIHNlbGVjdG9yKTsKK2ludCB0aXBjX2xpbmtfc2VuZF9zZWN0aW9uc19mYXN0KHN0cnVjdCBwb3J0ICpzZW5kZXIsCiAJCQkJIHN0cnVjdCBpb3ZlYyBjb25zdCAqbXNnX3NlY3QsCiAJCQkJIGNvbnN0IHUzMiBudW1fc2VjdCwKIAkJCQkgdTMyIGRlc3Rub2RlKTsKZGlmZiAtLWdpdCBhL25ldC90aXBjL2xvZy5jIGIvbmV0L3RpcGMvbG9nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTUyYzM5ZgotLS0gL2Rldi9udWxsCisrKyBiL25ldC90aXBjL2xvZy5jCkBAIC0wLDAgKzEsMzUxIEBACisvKgorICogbmV0L3RpcGMvbG9nLmM6IFRJUEMgcHJpbnQgYnVmZmVyIHJvdXRpbmVzIGZvciBkZWJ1Z2dpbmcKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTYtMjAwNiwgRXJpY3Nzb24gQUIKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA3LCBXaW5kIFJpdmVyIFN5c3RlbXMKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lcyBvZiB0aGUgY29weXJpZ2h0IGhvbGRlcnMgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb3JlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAibG9nLmgiCisKKy8qCisgKiBUSVBDIHByZS1kZWZpbmVzIHRoZSBmb2xsb3dpbmcgcHJpbnQgYnVmZmVyczoKKyAqCisgKiBUSVBDX05VTEwgOiBudWxsIGJ1ZmZlciAoaS5lLiBwcmludCBub3doZXJlKQorICogVElQQ19DT05TIDogc3lzdGVtIGNvbnNvbGUKKyAqIFRJUENfTE9HICA6IFRJUEMgbG9nIGJ1ZmZlcgorICoKKyAqIEFkZGl0aW9uYWwgdXNlci1kZWZpbmVkIHByaW50IGJ1ZmZlcnMgYXJlIGFsc28gcGVybWl0dGVkLgorICovCisKK3N0YXRpYyBzdHJ1Y3QgcHJpbnRfYnVmIG51bGxfYnVmID0geyBOVUxMLCAwLCBOVUxMLCAwIH07CitzdHJ1Y3QgcHJpbnRfYnVmICpjb25zdCBUSVBDX05VTEwgPSAmbnVsbF9idWY7CisKK3N0YXRpYyBzdHJ1Y3QgcHJpbnRfYnVmIGNvbnNfYnVmID0geyBOVUxMLCAwLCBOVUxMLCAxIH07CitzdHJ1Y3QgcHJpbnRfYnVmICpjb25zdCBUSVBDX0NPTlMgPSAmY29uc19idWY7CisKK3N0YXRpYyBzdHJ1Y3QgcHJpbnRfYnVmIGxvZ19idWYgPSB7IE5VTEwsIDAsIE5VTEwsIDEgfTsKK3N0cnVjdCBwcmludF9idWYgKmNvbnN0IFRJUENfTE9HID0gJmxvZ19idWY7CisKKy8qCisgKiBMb2NraW5nIHBvbGljeSB3aGVuIHVzaW5nIHByaW50IGJ1ZmZlcnMuCisgKgorICogMSkgdGlwY19wcmludGYoKSB1c2VzICdwcmludF9sb2NrJyB0byBwcm90ZWN0IGFnYWluc3QgY29uY3VycmVudCBhY2Nlc3MgdG8KKyAqICdwcmludF9zdHJpbmcnIHdoZW4gd3JpdGluZyB0byBhIHByaW50IGJ1ZmZlci4gVGhpcyBhbHNvIHByb3RlY3RzIGFnYWluc3QKKyAqIGNvbmN1cnJlbnQgd3JpdGVzIHRvIHRoZSBwcmludCBidWZmZXIgYmVpbmcgd3JpdHRlbiB0by4KKyAqCisgKiAyKSB0aXBjX2xvZ19YWFgoKSBsZXZlcmFnZXMgdGhlIGFmb3JlbWVudGlvbmVkIHVzZSBvZiAncHJpbnRfbG9jaycgdG8KKyAqIHByb3RlY3QgYWdhaW5zdCBhbGwgdHlwZXMgb2YgY29uY3VycmVudCBvcGVyYXRpb25zIG9uIHRoZWlyIGFzc29jaWF0ZWQKKyAqIHByaW50IGJ1ZmZlciAobm90IGp1c3Qgd3JpdGUgb3BlcmF0aW9ucykuCisgKgorICogTm90ZTogQWxsIHJvdXRpbmVzIG9mIHRoZSBmb3JtIHRpcGNfcHJpbnRidWZfWFhYKCkgYXJlIGxvY2stZnJlZSwgYW5kIHJlbHkKKyAqIG9uIHRoZSBjYWxsZXIgdG8gcHJldmVudCBzaW11bHRhbmVvdXMgdXNlIG9mIHRoZSBwcmludCBidWZmZXIocykgYmVpbmcKKyAqIG1hbmlwdWxhdGVkLgorICovCisKK3N0YXRpYyBjaGFyIHByaW50X3N0cmluZ1tUSVBDX1BCX01BWF9TVFJdOworc3RhdGljIERFRklORV9TUElOTE9DSyhwcmludF9sb2NrKTsKKworc3RhdGljIHZvaWQgdGlwY19wcmludGJ1Zl9tb3ZlKHN0cnVjdCBwcmludF9idWYgKnBiX3RvLAorCQkJICAgICAgIHN0cnVjdCBwcmludF9idWYgKnBiX2Zyb20pOworCisjZGVmaW5lIEZPUk1BVChQVFIsIExFTiwgRk1UKSBcCit7XAorCXZhX2xpc3QgYXJncztcCisJdmFfc3RhcnQoYXJncywgRk1UKTtcCisJTEVOID0gdnNwcmludGYoUFRSLCBGTVQsIGFyZ3MpO1wKKwl2YV9lbmQoYXJncyk7XAorCSooUFRSICsgTEVOKSA9ICdcMCc7XAorfQorCisvKioKKyAqIHRpcGNfcHJpbnRidWZfaW5pdCAtIGluaXRpYWxpemUgcHJpbnQgYnVmZmVyIHRvIGVtcHR5CisgKiBAcGI6IHBvaW50ZXIgdG8gcHJpbnQgYnVmZmVyIHN0cnVjdHVyZQorICogQHJhdzogcG9pbnRlciB0byBjaGFyYWN0ZXIgYXJyYXkgdXNlZCBieSBwcmludCBidWZmZXIKKyAqIEBzaXplOiBzaXplIG9mIGNoYXJhY3RlciBhcnJheQorICoKKyAqIE5vdGU6IElmIHRoZSBjaGFyYWN0ZXIgYXJyYXkgaXMgdG9vIHNtYWxsIChvciBhYnNlbnQpLCB0aGUgcHJpbnQgYnVmZmVyCisgKiBiZWNvbWVzIGEgbnVsbCBkZXZpY2UgdGhhdCBkaXNjYXJkcyBhbnl0aGluZyB3cml0dGVuIHRvIGl0LgorICovCisKK3ZvaWQgdGlwY19wcmludGJ1Zl9pbml0KHN0cnVjdCBwcmludF9idWYgKnBiLCBjaGFyICpyYXcsIHUzMiBzaXplKQoreworCXBiLT5idWYgPSByYXc7CisJcGItPmNycyA9IHJhdzsKKwlwYi0+c2l6ZSA9IHNpemU7CisJcGItPmVjaG8gPSAwOworCisJaWYgKHNpemUgPCBUSVBDX1BCX01JTl9TSVpFKSB7CisJCXBiLT5idWYgPSBOVUxMOworCX0gZWxzZSBpZiAocmF3KSB7CisJCXBiLT5idWZbMF0gPSAwOworCQlwYi0+YnVmW3NpemUgLSAxXSA9IH4wOworCX0KK30KKworLyoqCisgKiB0aXBjX3ByaW50YnVmX3Jlc2V0IC0gcmVpbml0aWFsaXplIHByaW50IGJ1ZmZlciB0byBlbXB0eSBzdGF0ZQorICogQHBiOiBwb2ludGVyIHRvIHByaW50IGJ1ZmZlciBzdHJ1Y3R1cmUKKyAqLworCitzdGF0aWMgdm9pZCB0aXBjX3ByaW50YnVmX3Jlc2V0KHN0cnVjdCBwcmludF9idWYgKnBiKQoreworCWlmIChwYi0+YnVmKSB7CisJCXBiLT5jcnMgPSBwYi0+YnVmOworCQlwYi0+YnVmWzBdID0gMDsKKwkJcGItPmJ1ZltwYi0+c2l6ZSAtIDFdID0gfjA7CisJfQorfQorCisvKioKKyAqIHRpcGNfcHJpbnRidWZfZW1wdHkgLSB0ZXN0IGlmIHByaW50IGJ1ZmZlciBpcyBpbiBlbXB0eSBzdGF0ZQorICogQHBiOiBwb2ludGVyIHRvIHByaW50IGJ1ZmZlciBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm5zIG5vbi16ZXJvIGlmIHByaW50IGJ1ZmZlciBpcyBlbXB0eS4KKyAqLworCitzdGF0aWMgaW50IHRpcGNfcHJpbnRidWZfZW1wdHkoc3RydWN0IHByaW50X2J1ZiAqcGIpCit7CisJcmV0dXJuICFwYi0+YnVmIHx8IChwYi0+Y3JzID09IHBiLT5idWYpOworfQorCisvKioKKyAqIHRpcGNfcHJpbnRidWZfdmFsaWRhdGUgLSBjaGVjayBmb3IgcHJpbnQgYnVmZmVyIG92ZXJmbG93CisgKiBAcGI6IHBvaW50ZXIgdG8gcHJpbnQgYnVmZmVyIHN0cnVjdHVyZQorICoKKyAqIFZlcmlmaWVzIHRoYXQgYSBwcmludCBidWZmZXIgaGFzIGNhcHR1cmVkIGFsbCBkYXRhIHdyaXR0ZW4gdG8gaXQuCisgKiBJZiBkYXRhIGhhcyBiZWVuIGxvc3QsIGxpbmVhcml6ZSBidWZmZXIgYW5kIHByZXBlbmQgYW4gZXJyb3IgbWVzc2FnZQorICoKKyAqIFJldHVybnMgbGVuZ3RoIG9mIHByaW50IGJ1ZmZlciBkYXRhIHN0cmluZyAoaW5jbHVkaW5nIHRyYWlsaW5nIE5VTCkKKyAqLworCitpbnQgdGlwY19wcmludGJ1Zl92YWxpZGF0ZShzdHJ1Y3QgcHJpbnRfYnVmICpwYikKK3sKKwljaGFyICplcnIgPSAiXG5cbioqKiBQUklOVCBCVUZGRVIgT1ZFUkZMT1cgKioqXG5cbiI7CisJY2hhciAqY3BfYnVmOworCXN0cnVjdCBwcmludF9idWYgY2I7CisKKwlpZiAoIXBiLT5idWYpCisJCXJldHVybiAwOworCisJaWYgKHBiLT5idWZbcGItPnNpemUgLSAxXSA9PSAwKSB7CisJCWNwX2J1ZiA9IGttYWxsb2MocGItPnNpemUsIEdGUF9BVE9NSUMpOworCQlpZiAoY3BfYnVmKSB7CisJCQl0aXBjX3ByaW50YnVmX2luaXQoJmNiLCBjcF9idWYsIHBiLT5zaXplKTsKKwkJCXRpcGNfcHJpbnRidWZfbW92ZSgmY2IsIHBiKTsKKwkJCXRpcGNfcHJpbnRidWZfbW92ZShwYiwgJmNiKTsKKwkJCWtmcmVlKGNwX2J1Zik7CisJCQltZW1jcHkocGItPmJ1ZiwgZXJyLCBzdHJsZW4oZXJyKSk7CisJCX0gZWxzZSB7CisJCQl0aXBjX3ByaW50YnVmX3Jlc2V0KHBiKTsKKwkJCXRpcGNfcHJpbnRmKHBiLCBlcnIpOworCQl9CisJfQorCXJldHVybiBwYi0+Y3JzIC0gcGItPmJ1ZiArIDE7Cit9CisKKy8qKgorICogdGlwY19wcmludGJ1Zl9tb3ZlIC0gbW92ZSBwcmludCBidWZmZXIgY29udGVudHMgdG8gYW5vdGhlciBwcmludCBidWZmZXIKKyAqIEBwYl90bzogcG9pbnRlciB0byBkZXN0aW5hdGlvbiBwcmludCBidWZmZXIgc3RydWN0dXJlCisgKiBAcGJfZnJvbTogcG9pbnRlciB0byBzb3VyY2UgcHJpbnQgYnVmZmVyIHN0cnVjdHVyZQorICoKKyAqIEN1cnJlbnQgY29udGVudHMgb2YgZGVzdGluYXRpb24gcHJpbnQgYnVmZmVyIChpZiBhbnkpIGFyZSBkaXNjYXJkZWQuCisgKiBTb3VyY2UgcHJpbnQgYnVmZmVyIGJlY29tZXMgZW1wdHkgaWYgYSBzdWNjZXNzZnVsIG1vdmUgb2NjdXJzLgorICovCisKK3N0YXRpYyB2b2lkIHRpcGNfcHJpbnRidWZfbW92ZShzdHJ1Y3QgcHJpbnRfYnVmICpwYl90bywKKwkJCSAgICAgICBzdHJ1Y3QgcHJpbnRfYnVmICpwYl9mcm9tKQoreworCWludCBsZW47CisKKwkvKiBIYW5kbGUgdGhlIGNhc2VzIHdoZXJlIGNvbnRlbnRzIGNhbid0IGJlIG1vdmVkICovCisKKwlpZiAoIXBiX3RvLT5idWYpCisJCXJldHVybjsKKworCWlmICghcGJfZnJvbS0+YnVmKSB7CisJCXRpcGNfcHJpbnRidWZfcmVzZXQocGJfdG8pOworCQlyZXR1cm47CisJfQorCisJaWYgKHBiX3RvLT5zaXplIDwgcGJfZnJvbS0+c2l6ZSkgeworCQlzdHJjcHkocGJfdG8tPmJ1ZiwgIioqKiBQUklOVCBCVUZGRVIgTU9WRSBFUlJPUiAqKioiKTsKKwkJcGJfdG8tPmJ1ZltwYl90by0+c2l6ZSAtIDFdID0gfjA7CisJCXBiX3RvLT5jcnMgPSBzdHJjaHIocGJfdG8tPmJ1ZiwgMCk7CisJCXJldHVybjsKKwl9CisKKwkvKiBDb3B5IGRhdGEgZnJvbSBjaGFyIGFmdGVyIGN1cnNvciB0byBlbmQgKGlmIHVzZWQpICovCisKKwlsZW4gPSBwYl9mcm9tLT5idWYgKyBwYl9mcm9tLT5zaXplIC0gcGJfZnJvbS0+Y3JzIC0gMjsKKwlpZiAoKHBiX2Zyb20tPmJ1ZltwYl9mcm9tLT5zaXplIC0gMV0gPT0gMCkgJiYgKGxlbiA+IDApKSB7CisJCXN0cmNweShwYl90by0+YnVmLCBwYl9mcm9tLT5jcnMgKyAxKTsKKwkJcGJfdG8tPmNycyA9IHBiX3RvLT5idWYgKyBsZW47CisJfSBlbHNlCisJCXBiX3RvLT5jcnMgPSBwYl90by0+YnVmOworCisJLyogQ29weSBkYXRhIGZyb20gc3RhcnQgdG8gY3Vyc29yIChhbHdheXMpICovCisKKwlsZW4gPSBwYl9mcm9tLT5jcnMgLSBwYl9mcm9tLT5idWY7CisJc3RyY3B5KHBiX3RvLT5jcnMsIHBiX2Zyb20tPmJ1Zik7CisJcGJfdG8tPmNycyArPSBsZW47CisKKwl0aXBjX3ByaW50YnVmX3Jlc2V0KHBiX2Zyb20pOworfQorCisvKioKKyAqIHRpcGNfcHJpbnRmIC0gYXBwZW5kIGZvcm1hdHRlZCBvdXRwdXQgdG8gcHJpbnQgYnVmZmVyCisgKiBAcGI6IHBvaW50ZXIgdG8gcHJpbnQgYnVmZmVyCisgKiBAZm10OiBmb3JtYXR0ZWQgaW5mbyB0byBiZSBwcmludGVkCisgKi8KKwordm9pZCB0aXBjX3ByaW50ZihzdHJ1Y3QgcHJpbnRfYnVmICpwYiwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJaW50IGNoYXJzX3RvX2FkZDsKKwlpbnQgY2hhcnNfbGVmdDsKKwljaGFyIHNhdmVfY2hhcjsKKworCXNwaW5fbG9ja19iaCgmcHJpbnRfbG9jayk7CisKKwlGT1JNQVQocHJpbnRfc3RyaW5nLCBjaGFyc190b19hZGQsIGZtdCk7CisJaWYgKGNoYXJzX3RvX2FkZCA+PSBUSVBDX1BCX01BWF9TVFIpCisJCXN0cmNweShwcmludF9zdHJpbmcsICIqKiogUFJJTlQgQlVGRkVSIFNUUklORyBUT08gTE9ORyAqKioiKTsKKworCWlmIChwYi0+YnVmKSB7CisJCWNoYXJzX2xlZnQgPSBwYi0+YnVmICsgcGItPnNpemUgLSBwYi0+Y3JzIC0gMTsKKwkJaWYgKGNoYXJzX3RvX2FkZCA8PSBjaGFyc19sZWZ0KSB7CisJCQlzdHJjcHkocGItPmNycywgcHJpbnRfc3RyaW5nKTsKKwkJCXBiLT5jcnMgKz0gY2hhcnNfdG9fYWRkOworCQl9IGVsc2UgaWYgKGNoYXJzX3RvX2FkZCA+PSAocGItPnNpemUgLSAxKSkgeworCQkJc3RyY3B5KHBiLT5idWYsIHByaW50X3N0cmluZyArIGNoYXJzX3RvX2FkZCArIDEKKwkJCSAgICAgICAtIHBiLT5zaXplKTsKKwkJCXBiLT5jcnMgPSBwYi0+YnVmICsgcGItPnNpemUgLSAxOworCQl9IGVsc2UgeworCQkJc3RyY3B5KHBiLT5idWYsIHByaW50X3N0cmluZyArIGNoYXJzX2xlZnQpOworCQkJc2F2ZV9jaGFyID0gcHJpbnRfc3RyaW5nW2NoYXJzX2xlZnRdOworCQkJcHJpbnRfc3RyaW5nW2NoYXJzX2xlZnRdID0gMDsKKwkJCXN0cmNweShwYi0+Y3JzLCBwcmludF9zdHJpbmcpOworCQkJcHJpbnRfc3RyaW5nW2NoYXJzX2xlZnRdID0gc2F2ZV9jaGFyOworCQkJcGItPmNycyA9IHBiLT5idWYgKyBjaGFyc190b19hZGQgLSBjaGFyc19sZWZ0OworCQl9CisJfQorCisJaWYgKHBiLT5lY2hvKQorCQlwcmludGsoIiVzIiwgcHJpbnRfc3RyaW5nKTsKKworCXNwaW5fdW5sb2NrX2JoKCZwcmludF9sb2NrKTsKK30KKworLyoqCisgKiB0aXBjX2xvZ19yZXNpemUgLSBjaGFuZ2UgdGhlIHNpemUgb2YgdGhlIFRJUEMgbG9nIGJ1ZmZlcgorICogQGxvZ19zaXplOiBwcmludCBidWZmZXIgc2l6ZSB0byB1c2UKKyAqLworCitpbnQgdGlwY19sb2dfcmVzaXplKGludCBsb2dfc2l6ZSkKK3sKKwlpbnQgcmVzID0gMDsKKworCXNwaW5fbG9ja19iaCgmcHJpbnRfbG9jayk7CisJa2ZyZWUoVElQQ19MT0ctPmJ1Zik7CisJVElQQ19MT0ctPmJ1ZiA9IE5VTEw7CisJaWYgKGxvZ19zaXplKSB7CisJCWlmIChsb2dfc2l6ZSA8IFRJUENfUEJfTUlOX1NJWkUpCisJCQlsb2dfc2l6ZSA9IFRJUENfUEJfTUlOX1NJWkU7CisJCXJlcyA9IFRJUENfTE9HLT5lY2hvOworCQl0aXBjX3ByaW50YnVmX2luaXQoVElQQ19MT0csIGttYWxsb2MobG9nX3NpemUsIEdGUF9BVE9NSUMpLAorCQkJCSAgIGxvZ19zaXplKTsKKwkJVElQQ19MT0ctPmVjaG8gPSByZXM7CisJCXJlcyA9ICFUSVBDX0xPRy0+YnVmOworCX0KKwlzcGluX3VubG9ja19iaCgmcHJpbnRfbG9jayk7CisKKwlyZXR1cm4gcmVzOworfQorCisvKioKKyAqIHRpcGNfbG9nX3Jlc2l6ZV9jbWQgLSByZWNvbmZpZ3VyZSBzaXplIG9mIFRJUEMgbG9nIGJ1ZmZlcgorICovCisKK3N0cnVjdCBza19idWZmICp0aXBjX2xvZ19yZXNpemVfY21kKGNvbnN0IHZvaWQgKnJlcV90bHZfYXJlYSwgaW50IHJlcV90bHZfc3BhY2UpCit7CisJdTMyIHZhbHVlOworCisJaWYgKCFUTFZfQ0hFQ0socmVxX3Rsdl9hcmVhLCByZXFfdGx2X3NwYWNlLCBUSVBDX1RMVl9VTlNJR05FRCkpCisJCXJldHVybiB0aXBjX2NmZ19yZXBseV9lcnJvcl9zdHJpbmcoVElQQ19DRkdfVExWX0VSUk9SKTsKKworCXZhbHVlID0gbnRvaGwoKihfX2JlMzIgKilUTFZfREFUQShyZXFfdGx2X2FyZWEpKTsKKwlpZiAodmFsdWUgIT0gZGVsaW1pdCh2YWx1ZSwgMCwgMzI3NjgpKQorCQlyZXR1cm4gdGlwY19jZmdfcmVwbHlfZXJyb3Jfc3RyaW5nKFRJUENfQ0ZHX0lOVkFMSURfVkFMVUUKKwkJCQkJCSAgICIgKGxvZyBzaXplIG11c3QgYmUgMC0zMjc2OCkiKTsKKwlpZiAodGlwY19sb2dfcmVzaXplKHZhbHVlKSkKKwkJcmV0dXJuIHRpcGNfY2ZnX3JlcGx5X2Vycm9yX3N0cmluZygKKwkJCSJ1bmFibGUgdG8gY3JlYXRlIHNwZWNpZmllZCBsb2cgKGxvZyBzaXplIGlzIG5vdyAwKSIpOworCXJldHVybiB0aXBjX2NmZ19yZXBseV9ub25lKCk7Cit9CisKKy8qKgorICogdGlwY19sb2dfZHVtcCAtIGNhcHR1cmUgVElQQyBsb2cgYnVmZmVyIGNvbnRlbnRzIGluIGNvbmZpZ3VyYXRpb24gbWVzc2FnZQorICovCisKK3N0cnVjdCBza19idWZmICp0aXBjX2xvZ19kdW1wKHZvaWQpCit7CisJc3RydWN0IHNrX2J1ZmYgKnJlcGx5OworCisJc3Bpbl9sb2NrX2JoKCZwcmludF9sb2NrKTsKKwlpZiAoIVRJUENfTE9HLT5idWYpIHsKKwkJc3Bpbl91bmxvY2tfYmgoJnByaW50X2xvY2spOworCQlyZXBseSA9IHRpcGNfY2ZnX3JlcGx5X3VsdHJhX3N0cmluZygibG9nIG5vdCBhY3RpdmF0ZWRcbiIpOworCX0gZWxzZSBpZiAodGlwY19wcmludGJ1Zl9lbXB0eShUSVBDX0xPRykpIHsKKwkJc3Bpbl91bmxvY2tfYmgoJnByaW50X2xvY2spOworCQlyZXBseSA9IHRpcGNfY2ZnX3JlcGx5X3VsdHJhX3N0cmluZygibG9nIGlzIGVtcHR5XG4iKTsKKwl9IGVsc2UgeworCQlzdHJ1Y3QgdGx2X2Rlc2MgKnJlcF90bHY7CisJCXN0cnVjdCBwcmludF9idWYgcGI7CisJCWludCBzdHJfbGVuOworCisJCXN0cl9sZW4gPSBtaW4oVElQQ19MT0ctPnNpemUsIDMyNzY4dSk7CisJCXNwaW5fdW5sb2NrX2JoKCZwcmludF9sb2NrKTsKKwkJcmVwbHkgPSB0aXBjX2NmZ19yZXBseV9hbGxvYyhUTFZfU1BBQ0Uoc3RyX2xlbikpOworCQlpZiAocmVwbHkpIHsKKwkJCXJlcF90bHYgPSAoc3RydWN0IHRsdl9kZXNjICopcmVwbHktPmRhdGE7CisJCQl0aXBjX3ByaW50YnVmX2luaXQoJnBiLCBUTFZfREFUQShyZXBfdGx2KSwgc3RyX2xlbik7CisJCQlzcGluX2xvY2tfYmgoJnByaW50X2xvY2spOworCQkJdGlwY19wcmludGJ1Zl9tb3ZlKCZwYiwgVElQQ19MT0cpOworCQkJc3Bpbl91bmxvY2tfYmgoJnByaW50X2xvY2spOworCQkJc3RyX2xlbiA9IHN0cmxlbihUTFZfREFUQShyZXBfdGx2KSkgKyAxOworCQkJc2tiX3B1dChyZXBseSwgVExWX1NQQUNFKHN0cl9sZW4pKTsKKwkJCVRMVl9TRVQocmVwX3RsdiwgVElQQ19UTFZfVUxUUkFfU1RSSU5HLCBOVUxMLCBzdHJfbGVuKTsKKwkJfQorCX0KKwlyZXR1cm4gcmVwbHk7Cit9CmRpZmYgLS1naXQgYS9uZXQvdGlwYy9sb2cuaCBiL25ldC90aXBjL2xvZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyNDhkOTYKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvdGlwYy9sb2cuaApAQCAtMCwwICsxLDY3IEBACisvKgorICogbmV0L3RpcGMvbG9nLmg6IEluY2x1ZGUgZmlsZSBmb3IgVElQQyBwcmludCBidWZmZXIgcm91dGluZXMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTctMjAwNiwgRXJpY3Nzb24gQUIKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA3LCBXaW5kIFJpdmVyIFN5c3RlbXMKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lcyBvZiB0aGUgY29weXJpZ2h0IGhvbGRlcnMgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgX1RJUENfTE9HX0gKKyNkZWZpbmUgX1RJUENfTE9HX0gKKworLyoqCisgKiBzdHJ1Y3QgcHJpbnRfYnVmIC0gVElQQyBwcmludCBidWZmZXIgc3RydWN0dXJlCisgKiBAYnVmOiBwb2ludGVyIHRvIGNoYXJhY3RlciBhcnJheSBjb250YWluaW5nIHByaW50IGJ1ZmZlciBjb250ZW50cworICogQHNpemU6IHNpemUgb2YgY2hhcmFjdGVyIGFycmF5CisgKiBAY3JzOiBwb2ludGVyIHRvIGZpcnN0IHVudXNlZCBzcGFjZSBpbiBjaGFyYWN0ZXIgYXJyYXkgKGkuZS4gZmluYWwgTlVMKQorICogQGVjaG86IGVjaG8gb3V0cHV0IHRvIHN5c3RlbSBjb25zb2xlIGlmIG5vbi16ZXJvCisgKi8KKworc3RydWN0IHByaW50X2J1ZiB7CisJY2hhciAqYnVmOworCXUzMiBzaXplOworCWNoYXIgKmNyczsKKwlpbnQgZWNobzsKK307CisKKyNkZWZpbmUgVElQQ19QQl9NSU5fU0laRSA2NAkvKiBtaW5pbXVtIHNpemUgZm9yIGEgcHJpbnQgYnVmZmVyJ3MgYXJyYXkgKi8KKyNkZWZpbmUgVElQQ19QQl9NQVhfU1RSIDUxMgkvKiBtYXggcHJpbnRhYmxlIHN0cmluZyAod2l0aCB0cmFpbGluZyBOVUwpICovCisKK3ZvaWQgdGlwY19wcmludGJ1Zl9pbml0KHN0cnVjdCBwcmludF9idWYgKnBiLCBjaGFyICpidWYsIHUzMiBzaXplKTsKK2ludCAgdGlwY19wcmludGJ1Zl92YWxpZGF0ZShzdHJ1Y3QgcHJpbnRfYnVmICpwYik7CisKK2ludCB0aXBjX2xvZ19yZXNpemUoaW50IGxvZ19zaXplKTsKKworc3RydWN0IHNrX2J1ZmYgKnRpcGNfbG9nX3Jlc2l6ZV9jbWQoY29uc3Qgdm9pZCAqcmVxX3Rsdl9hcmVhLAorCQkJCSAgICBpbnQgcmVxX3Rsdl9zcGFjZSk7CitzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19sb2dfZHVtcCh2b2lkKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvdGlwYy9tc2cuYyBiL25ldC90aXBjL21zZy5jCmluZGV4IGVjYjUzMmYuLmJiNjE4MGMgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL21zZy5jCisrKyBiL25ldC90aXBjL21zZy5jCkBAIC0zNSwxMCArMzUsNyBAQAogICovCiAKICNpbmNsdWRlICJjb3JlLmgiCi0jaW5jbHVkZSAiYWRkci5oIgotI2luY2x1ZGUgImRiZy5oIgogI2luY2x1ZGUgIm1zZy5oIgotI2luY2x1ZGUgImJlYXJlci5oIgogCiB1MzIgdGlwY19tc2dfdG90X2ltcG9ydGFuY2Uoc3RydWN0IHRpcGNfbXNnICptKQogewpAQCAtOTQsNyArOTEsNyBAQAogCiBpbnQgdGlwY19tc2dfYnVpbGQoc3RydWN0IHRpcGNfbXNnICpoZHIsCiAJCQkgICAgc3RydWN0IGlvdmVjIGNvbnN0ICptc2dfc2VjdCwgdTMyIG51bV9zZWN0LAotCQkJICAgIGludCBtYXhfc2l6ZSwgaW50IHVzcm1lbSwgc3RydWN0IHNrX2J1ZmYqKiBidWYpCisJCQkgICAgaW50IG1heF9zaXplLCBpbnQgdXNybWVtLCBzdHJ1Y3Qgc2tfYnVmZiAqKmJ1ZikKIHsKIAlpbnQgZHN6LCBzeiwgaHN6LCBwb3MsIHJlcywgY250OwogCkBAIC0xNDAsNiArMTM3LDcgQEAKIHZvaWQgdGlwY19tc2dfZGJnKHN0cnVjdCBwcmludF9idWYgKmJ1Ziwgc3RydWN0IHRpcGNfbXNnICptc2csIGNvbnN0IGNoYXIgKnN0cikKIHsKIAl1MzIgdXNyID0gbXNnX3VzZXIobXNnKTsKKwl0aXBjX3ByaW50ZihidWYsIEtFUk5fREVCVUcpOwogCXRpcGNfcHJpbnRmKGJ1Ziwgc3RyKTsKIAogCXN3aXRjaCAodXNyKSB7CkBAIC0xNjMsMTAgKzE2MSwxMCBAQAogCQkJdGlwY19wcmludGYoYnVmLCAiTEFTVDoiKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJdGlwY19wcmludGYoYnVmLCAiVU5LTk9XTjoleCIsbXNnX3R5cGUobXNnKSk7CisJCQl0aXBjX3ByaW50ZihidWYsICJVTktOT1dOOiV4IiwgbXNnX3R5cGUobXNnKSk7CiAKIAkJfQotCQl0aXBjX3ByaW50ZihidWYsICJOTygldS8ldSk6Iixtc2dfbG9uZ19tc2dubyhtc2cpLAorCQl0aXBjX3ByaW50ZihidWYsICJOTygldS8ldSk6IiwgbXNnX2xvbmdfbXNnbm8obXNnKSwKIAkJCSAgICBtc2dfZnJhZ21fbm8obXNnKSk7CiAJCWJyZWFrOwogCWNhc2UgVElQQ19MT1dfSU1QT1JUQU5DRToKQEAgLTE5Miw3ICsxOTAsNyBAQAogCQkJdGlwY19wcmludGYoYnVmLCAiRElSOiIpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQl0aXBjX3ByaW50ZihidWYsICJVTktOT1dOIFRZUEUgJXUiLG1zZ190eXBlKG1zZykpOworCQkJdGlwY19wcmludGYoYnVmLCAiVU5LTk9XTiBUWVBFICV1IiwgbXNnX3R5cGUobXNnKSk7CiAJCX0KIAkJaWYgKG1zZ19yb3V0ZWQobXNnKSAmJiAhbXNnX25vbl9zZXEobXNnKSkKIAkJCXRpcGNfcHJpbnRmKGJ1ZiwgIlJPVVQ6Iik7CkBAIC0yMTAsNyArMjA4LDcgQEAKIAkJCXRpcGNfcHJpbnRmKGJ1ZiwgIldEUlc6Iik7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCXRpcGNfcHJpbnRmKGJ1ZiwgIlVOS05PV046JXgiLG1zZ190eXBlKG1zZykpOworCQkJdGlwY19wcmludGYoYnVmLCAiVU5LTk9XTjoleCIsIG1zZ190eXBlKG1zZykpOwogCQl9CiAJCWlmIChtc2dfcm91dGVkKG1zZykpCiAJCQl0aXBjX3ByaW50ZihidWYsICJST1VUOiIpOwpAQCAtMjI5LDM5ICsyMjcsMzkgQEAKIAkJCWJyZWFrOwogCQljYXNlIENPTk5fQUNLOgogCQkJdGlwY19wcmludGYoYnVmLCAiQ09OTl9BQ0s6Iik7Ci0JCQl0aXBjX3ByaW50ZihidWYsICJBQ0soJXUpOiIsbXNnX21zZ2NudChtc2cpKTsKKwkJCXRpcGNfcHJpbnRmKGJ1ZiwgIkFDSygldSk6IiwgbXNnX21zZ2NudChtc2cpKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJdGlwY19wcmludGYoYnVmLCAiVU5LTk9XTiBUWVBFOiV4Iixtc2dfdHlwZShtc2cpKTsKKwkJCXRpcGNfcHJpbnRmKGJ1ZiwgIlVOS05PV04gVFlQRToleCIsIG1zZ190eXBlKG1zZykpOwogCQl9CiAJCWlmIChtc2dfcm91dGVkKG1zZykpCiAJCQl0aXBjX3ByaW50ZihidWYsICJST1VUOiIpOwogCQlpZiAobXNnX3Jlcm91dGVfY250KG1zZykpCi0JCQl0aXBjX3ByaW50ZihidWYsICJSRVJPVVRFRCgldSk6Iixtc2dfcmVyb3V0ZV9jbnQobXNnKSk7CisJCQl0aXBjX3ByaW50ZihidWYsICJSRVJPVVRFRCgldSk6IiwgbXNnX3Jlcm91dGVfY250KG1zZykpOwogCQlicmVhazsKIAljYXNlIExJTktfUFJPVE9DT0w6Ci0JCXRpcGNfcHJpbnRmKGJ1ZiwgIlBST1Q6VElNKCV1KToiLG1zZ190aW1lc3RhbXAobXNnKSk7CisJCXRpcGNfcHJpbnRmKGJ1ZiwgIlBST1Q6VElNKCV1KToiLCBtc2dfdGltZXN0YW1wKG1zZykpOwogCQlzd2l0Y2ggKG1zZ190eXBlKG1zZykpIHsKIAkJY2FzZSBTVEFURV9NU0c6CiAJCQl0aXBjX3ByaW50ZihidWYsICJTVEFURToiKTsKLQkJCXRpcGNfcHJpbnRmKGJ1ZiwgIiVzOiIsbXNnX3Byb2JlKG1zZykgPyAiUFJCIiA6IiIpOwotCQkJdGlwY19wcmludGYoYnVmLCAiTlhTKCV1KToiLG1zZ19uZXh0X3NlbnQobXNnKSk7Ci0JCQl0aXBjX3ByaW50ZihidWYsICJHQVAoJXUpOiIsbXNnX3NlcV9nYXAobXNnKSk7Ci0JCQl0aXBjX3ByaW50ZihidWYsICJMU1RCQygldSk6Iixtc2dfbGFzdF9iY2FzdChtc2cpKTsKKwkJCXRpcGNfcHJpbnRmKGJ1ZiwgIiVzOiIsIG1zZ19wcm9iZShtc2cpID8gIlBSQiIgOiAiIik7CisJCQl0aXBjX3ByaW50ZihidWYsICJOWFMoJXUpOiIsIG1zZ19uZXh0X3NlbnQobXNnKSk7CisJCQl0aXBjX3ByaW50ZihidWYsICJHQVAoJXUpOiIsIG1zZ19zZXFfZ2FwKG1zZykpOworCQkJdGlwY19wcmludGYoYnVmLCAiTFNUQkMoJXUpOiIsIG1zZ19sYXN0X2JjYXN0KG1zZykpOwogCQkJYnJlYWs7CiAJCWNhc2UgUkVTRVRfTVNHOgogCQkJdGlwY19wcmludGYoYnVmLCAiUkVTRVQ6Iik7CiAJCQlpZiAobXNnX3NpemUobXNnKSAhPSBtc2dfaGRyX3N6KG1zZykpCi0JCQkJdGlwY19wcmludGYoYnVmLCAiQkVBUjolczoiLG1zZ19kYXRhKG1zZykpOworCQkJCXRpcGNfcHJpbnRmKGJ1ZiwgIkJFQVI6JXM6IiwgbXNnX2RhdGEobXNnKSk7CiAJCQlicmVhazsKIAkJY2FzZSBBQ1RJVkFURV9NU0c6CiAJCQl0aXBjX3ByaW50ZihidWYsICJBQ1RJVkFURToiKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJdGlwY19wcmludGYoYnVmLCAiVU5LTk9XTiBUWVBFOiV4Iixtc2dfdHlwZShtc2cpKTsKKwkJCXRpcGNfcHJpbnRmKGJ1ZiwgIlVOS05PV04gVFlQRToleCIsIG1zZ190eXBlKG1zZykpOwogCQl9Ci0JCXRpcGNfcHJpbnRmKGJ1ZiwgIlBMQU5FKCVjKToiLG1zZ19uZXRfcGxhbmUobXNnKSk7Ci0JCXRpcGNfcHJpbnRmKGJ1ZiwgIlNFU1MoJXUpOiIsbXNnX3Nlc3Npb24obXNnKSk7CisJCXRpcGNfcHJpbnRmKGJ1ZiwgIlBMQU5FKCVjKToiLCBtc2dfbmV0X3BsYW5lKG1zZykpOworCQl0aXBjX3ByaW50ZihidWYsICJTRVNTKCV1KToiLCBtc2dfc2Vzc2lvbihtc2cpKTsKIAkJYnJlYWs7CiAJY2FzZSBDSEFOR0VPVkVSX1BST1RPQ09MOgogCQl0aXBjX3ByaW50ZihidWYsICJUVU5MOiIpOwpAQCAtMjcxLDEwICsyNjksMTAgQEAKIAkJCWJyZWFrOwogCQljYXNlIE9SSUdJTkFMX01TRzoKIAkJCXRpcGNfcHJpbnRmKGJ1ZiwgIk9SSUc6Iik7Ci0JCQl0aXBjX3ByaW50ZihidWYsICJFWFAoJXUpIixtc2dfbXNnY250KG1zZykpOworCQkJdGlwY19wcmludGYoYnVmLCAiRVhQKCV1KSIsIG1zZ19tc2djbnQobXNnKSk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCXRpcGNfcHJpbnRmKGJ1ZiwgIlVOS05PV04gVFlQRToleCIsbXNnX3R5cGUobXNnKSk7CisJCQl0aXBjX3ByaW50ZihidWYsICJVTktOT1dOIFRZUEU6JXgiLCBtc2dfdHlwZShtc2cpKTsKIAkJfQogCQlicmVhazsKIAljYXNlIFJPVVRFX0RJU1RSSUJVVE9SOgpAQCAtMjgyLDI2ICsyODAsMjYgQEAKIAkJc3dpdGNoIChtc2dfdHlwZShtc2cpKSB7CiAJCWNhc2UgRVhUX1JPVVRJTkdfVEFCTEU6CiAJCQl0aXBjX3ByaW50ZihidWYsICJFWFRfVEJMOiIpOwotCQkJdGlwY19wcmludGYoYnVmLCAiVE86JXg6Iixtc2dfcmVtb3RlX25vZGUobXNnKSk7CisJCQl0aXBjX3ByaW50ZihidWYsICJUTzoleDoiLCBtc2dfcmVtb3RlX25vZGUobXNnKSk7CiAJCQlicmVhazsKIAkJY2FzZSBMT0NBTF9ST1VUSU5HX1RBQkxFOgogCQkJdGlwY19wcmludGYoYnVmLCAiTE9DQUxfVEJMOiIpOwotCQkJdGlwY19wcmludGYoYnVmLCAiVE86JXg6Iixtc2dfcmVtb3RlX25vZGUobXNnKSk7CisJCQl0aXBjX3ByaW50ZihidWYsICJUTzoleDoiLCBtc2dfcmVtb3RlX25vZGUobXNnKSk7CiAJCQlicmVhazsKIAkJY2FzZSBTTEFWRV9ST1VUSU5HX1RBQkxFOgogCQkJdGlwY19wcmludGYoYnVmLCAiRFBfVEJMOiIpOwotCQkJdGlwY19wcmludGYoYnVmLCAiVE86JXg6Iixtc2dfcmVtb3RlX25vZGUobXNnKSk7CisJCQl0aXBjX3ByaW50ZihidWYsICJUTzoleDoiLCBtc2dfcmVtb3RlX25vZGUobXNnKSk7CiAJCQlicmVhazsKIAkJY2FzZSBST1VURV9BRERJVElPTjoKIAkJCXRpcGNfcHJpbnRmKGJ1ZiwgIkFERDoiKTsKLQkJCXRpcGNfcHJpbnRmKGJ1ZiwgIlRPOiV4OiIsbXNnX3JlbW90ZV9ub2RlKG1zZykpOworCQkJdGlwY19wcmludGYoYnVmLCAiVE86JXg6IiwgbXNnX3JlbW90ZV9ub2RlKG1zZykpOwogCQkJYnJlYWs7CiAJCWNhc2UgUk9VVEVfUkVNT1ZBTDoKIAkJCXRpcGNfcHJpbnRmKGJ1ZiwgIlJFTU9WRToiKTsKLQkJCXRpcGNfcHJpbnRmKGJ1ZiwgIlRPOiV4OiIsbXNnX3JlbW90ZV9ub2RlKG1zZykpOworCQkJdGlwY19wcmludGYoYnVmLCAiVE86JXg6IiwgbXNnX3JlbW90ZV9ub2RlKG1zZykpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQl0aXBjX3ByaW50ZihidWYsICJVTktOT1dOIFRZUEU6JXgiLG1zZ190eXBlKG1zZykpOworCQkJdGlwY19wcmludGYoYnVmLCAiVU5LTk9XTiBUWVBFOiV4IiwgbXNnX3R5cGUobXNnKSk7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBMSU5LX0NPTkZJRzoKQEAgLTMxNCw3ICszMTIsNyBAQAogCQkJdGlwY19wcmludGYoYnVmLCAiRFNDX1JFU1A6Iik7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCXRpcGNfcHJpbnRmKGJ1ZiwgIlVOS05PV04gVFlQRToleDoiLG1zZ190eXBlKG1zZykpOworCQkJdGlwY19wcmludGYoYnVmLCAiVU5LTk9XTiBUWVBFOiV4OiIsIG1zZ190eXBlKG1zZykpOwogCQkJYnJlYWs7CiAJCX0KIAkJYnJlYWs7CkBAIC0zNTAsNyArMzQ4LDggQEAKIAkJCXRpcGNfcHJpbnRmKGJ1ZiwgIlVOS05PV04gRVJST1IoJXgpOiIsCiAJCQkJICAgIG1zZ19lcnJjb2RlKG1zZykpOwogCQl9Ci0JZGVmYXVsdDp7fQorCWRlZmF1bHQ6CisJCWJyZWFrOwogCX0KIAogCXRpcGNfcHJpbnRmKGJ1ZiwgIkhaKCV1KToiLCBtc2dfaGRyX3N6KG1zZykpOwpAQCAtMzU5LDkgKzM1OCw4IEBACiAKIAlpZiAobXNnX25vbl9zZXEobXNnKSkKIAkJdGlwY19wcmludGYoYnVmLCAiTk9TRVE6Iik7Ci0JZWxzZSB7CisJZWxzZQogCQl0aXBjX3ByaW50ZihidWYsICJBQ0soJXUpOiIsIG1zZ19hY2sobXNnKSk7Ci0JfQogCXRpcGNfcHJpbnRmKGJ1ZiwgIkJBQ0soJXUpOiIsIG1zZ19iY2FzdF9hY2sobXNnKSk7CiAJdGlwY19wcmludGYoYnVmLCAiUFJORCgleCkiLCBtc2dfcHJldm5vZGUobXNnKSk7CiAKQEAgLTM4OSwxNCArMzg3LDEzIEBACiAJaWYgKG1zZ191c2VyKG1zZykgPT0gTkFNRV9ESVNUUklCVVRPUikgewogCQl0aXBjX3ByaW50ZihidWYsICI6T05PRCgleCk6IiwgbXNnX29yaWdub2RlKG1zZykpOwogCQl0aXBjX3ByaW50ZihidWYsICI6RE5PRCgleCk6IiwgbXNnX2Rlc3Rub2RlKG1zZykpOwotCQlpZiAobXNnX3JvdXRlZChtc2cpKSB7CisJCWlmIChtc2dfcm91dGVkKG1zZykpCiAJCQl0aXBjX3ByaW50ZihidWYsICI6Q1NFUU4oJXUpIiwgbXNnX3RyYW5zcF9zZXFubyhtc2cpKTsKLQkJfQogCX0KIAogCWlmIChtc2dfdXNlcihtc2cpID09ICBMSU5LX0NPTkZJRykgewotCQl1MzIqIHJhdyA9ICh1MzIqKW1zZzsKLQkJc3RydWN0IHRpcGNfbWVkaWFfYWRkciogb3JpZyA9IChzdHJ1Y3QgdGlwY19tZWRpYV9hZGRyKikmcmF3WzVdOworCQl1MzIgKnJhdyA9ICh1MzIgKiltc2c7CisJCXN0cnVjdCB0aXBjX21lZGlhX2FkZHIgKm9yaWcgPSAoc3RydWN0IHRpcGNfbWVkaWFfYWRkciAqKSZyYXdbNV07CiAJCXRpcGNfcHJpbnRmKGJ1ZiwgIjpSRVFMKCV1KToiLCBtc2dfcmVxX2xpbmtzKG1zZykpOwogCQl0aXBjX3ByaW50ZihidWYsICI6RERPTSgleCk6IiwgbXNnX2Rlc3RfZG9tYWluKG1zZykpOwogCQl0aXBjX3ByaW50ZihidWYsICI6TkVUSUQoJXUpOiIsIG1zZ19iY19uZXRpZChtc2cpKTsKQEAgLTQwNywxMiArNDA0LDEwIEBACiAJCXRpcGNfcHJpbnRmKGJ1ZiwgIlRPKCV1KToiLCBtc2dfYmNnYXBfdG8obXNnKSk7CiAJfQogCXRpcGNfcHJpbnRmKGJ1ZiwgIlxuIik7Ci0JaWYgKCh1c3IgPT0gQ0hBTkdFT1ZFUl9QUk9UT0NPTCkgJiYgKG1zZ19tc2djbnQobXNnKSkpIHsKKwlpZiAoKHVzciA9PSBDSEFOR0VPVkVSX1BST1RPQ09MKSAmJiAobXNnX21zZ2NudChtc2cpKSkKIAkJdGlwY19tc2dfZGJnKGJ1ZiwgbXNnX2dldF93cmFwcGVkKG1zZyksICIgICAgICAvIik7Ci0JfQotCWlmICgodXNyID09IE1TR19GUkFHTUVOVEVSKSAmJiAobXNnX3R5cGUobXNnKSA9PSBGSVJTVF9GUkFHTUVOVCkpIHsKKwlpZiAoKHVzciA9PSBNU0dfRlJBR01FTlRFUikgJiYgKG1zZ190eXBlKG1zZykgPT0gRklSU1RfRlJBR01FTlQpKQogCQl0aXBjX21zZ19kYmcoYnVmLCBtc2dfZ2V0X3dyYXBwZWQobXNnKSwgIiAgICAgIC8iKTsKLQl9CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbXNnLmggYi9uZXQvdGlwYy9tc2cuaAppbmRleCAwMzFhYWQxLi45MmM0YzRmIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9tc2cuaAorKysgYi9uZXQvdGlwYy9tc2cuaApAQCAtMzcsMTAgKzM3LDUxIEBACiAjaWZuZGVmIF9USVBDX01TR19ICiAjZGVmaW5lIF9USVBDX01TR19ICiAKLSNpbmNsdWRlICJjb3JlLmgiCisjaW5jbHVkZSAiYmVhcmVyLmgiCiAKICNkZWZpbmUgVElQQ19WRVJTSU9OICAgICAgICAgICAgICAyCiAKKy8qCisgKgkJVElQQyB1c2VyIGRhdGEgbWVzc2FnZSBoZWFkZXIgZm9ybWF0LCB2ZXJzaW9uIDI6CisgKgorICoKKyAqICAgICAxIDAgOSA4IDcgNiA1IDR8MyAyIDEgMCA5IDggNyA2fDUgNCAzIDIgMSAwIDkgOHw3IDYgNSA0IDMgMiAxIDAKKyAqICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgKiB3MDp8dmVycyB8IHVzZXIgIHxoZHIgc3ogfG58ZHxzfC18ICAgICAgICAgIG1lc3NhZ2Ugc2l6ZSAgICAgICAgICAgfAorICogICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAqIHcxOnxtc3R5cHwgZXJyb3IgfHJlciBjbnR8bHNjfG9wdCBwfCAgICAgIGJyb2FkY2FzdCBhY2sgbm8gICAgICAgICB8CisgKiAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICogdzI6fCAgICAgICAgbGluayBsZXZlbCBhY2sgbm8gICAgICB8ICAgYnJvYWRjYXN0L2xpbmsgbGV2ZWwgc2VxIG5vIHwKKyAqICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgKiB3Mzp8ICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91cyBub2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAqIHc0OnwgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYXRpbmcgcG9ydCAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKiAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICogdzU6fCAgICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbiBwb3J0ICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgKiB3Njp8ICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmF0aW5nIG5vZGUgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAqIHc3OnwgICAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb24gbm9kZSAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKiAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICogdzg6fCAgICAgICAgICAgIG5hbWUgdHlwZSAvIHRyYW5zcG9ydCBzZXF1ZW5jZSBudW1iZXIgICAgICAgICAgICAgIHwKKyAqICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgKiB3OTp8ICAgICAgICAgICAgICBuYW1lIGluc3RhbmNlL211bHRpY2FzdCBsb3dlciBib3VuZCAgICAgICAgICAgICAgfAorICogICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAqIHdBOnwgICAgICAgICAgICAgICAgICAgIG11bHRpY2FzdCB1cHBlciBib3VuZCAgICAgICAgICAgICAgICAgICAgICB8CisgKiAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICogICAgLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8KKyAqICAgIFwgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgKiAgICAvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLworICogICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAqCisgKi8KKworI2RlZmluZSBUSVBDX0NPTk5fTVNHCQkwCisjZGVmaW5lIFRJUENfTUNBU1RfTVNHCQkxCisjZGVmaW5lIFRJUENfTkFNRURfTVNHCQkyCisjZGVmaW5lIFRJUENfRElSRUNUX01TRwkJMworCisKICNkZWZpbmUgU0hPUlRfSF9TSVpFICAgICAgICAgICAgICAyNAkvKiBDb25uZWN0ZWQsIGluLWNsdXN0ZXIgbWVzc2FnZXMgKi8KICNkZWZpbmUgRElSX01TR19IX1NJWkUgICAgICAgICAgICAzMgkvKiBEaXJlY3RseSBhZGRyZXNzZWQgbWVzc2FnZXMgKi8KICNkZWZpbmUgTE9OR19IX1NJWkUgICAgICAgICAgICAgICA0MAkvKiBOYW1lZCBtZXNzYWdlcyAqLwpAQCAtNTIsMjAgKzkzLDI2IEBACiAjZGVmaW5lIE1BWF9NU0dfU0laRSAoTUFYX0hfU0laRSArIFRJUENfTUFYX1VTRVJfTVNHX1NJWkUpCiAKIAotLyoKLQkJVElQQyB1c2VyIGRhdGEgbWVzc2FnZSBoZWFkZXIgZm9ybWF0LCB2ZXJzaW9uIDIKK3N0cnVjdCB0aXBjX21zZyB7CisJX19iZTMyIGhkclsxNV07Cit9OwogCi0JLSBGdW5kYW1lbnRhbCBkZWZpbml0aW9ucyBhdmFpbGFibGUgdG8gcHJpdmlsZWdlZCBUSVBDIHVzZXJzCi0JICBhcmUgbG9jYXRlZCBpbiB0aXBjX21zZy5oLgotCS0gUmVtYWluaW5nIGRlZmluaXRpb25zIGF2YWlsYWJsZSB0byBUSVBDIGludGVybmFsIHVzZXJzIGFwcGVhciBiZWxvdy4KLSovCiAKK3N0YXRpYyBpbmxpbmUgdTMyIG1zZ193b3JkKHN0cnVjdCB0aXBjX21zZyAqbSwgdTMyIHBvcykKK3sKKwlyZXR1cm4gbnRvaGwobS0+aGRyW3Bvc10pOworfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbXNnX3NldF93b3JkKHN0cnVjdCB0aXBjX21zZyAqbSwgdTMyIHcsIHUzMiB2YWwpCiB7CiAJbS0+aGRyW3ddID0gaHRvbmwodmFsKTsKIH0KIAorc3RhdGljIGlubGluZSB1MzIgbXNnX2JpdHMoc3RydWN0IHRpcGNfbXNnICptLCB1MzIgdywgdTMyIHBvcywgdTMyIG1hc2spCit7CisJcmV0dXJuIChtc2dfd29yZChtLCB3KSA+PiBwb3MpICYgbWFzazsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIG1zZ19zZXRfYml0cyhzdHJ1Y3QgdGlwY19tc2cgKm0sIHUzMiB3LAogCQkJCXUzMiBwb3MsIHUzMiBtYXNrLCB1MzIgdmFsKQogewpAQCAtMTEyLDE2ICsxNTksMzYgQEAKIAltc2dfc2V0X2JpdHMobSwgMCwgMjUsIDB4Ziwgbik7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdTMyIG1zZ19pbXBvcnRhbmNlKHN0cnVjdCB0aXBjX21zZyAqbSkKK3sKKwlyZXR1cm4gbXNnX2JpdHMobSwgMCwgMjUsIDB4Zik7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBtc2dfc2V0X2ltcG9ydGFuY2Uoc3RydWN0IHRpcGNfbXNnICptLCB1MzIgaSkKIHsKIAltc2dfc2V0X3VzZXIobSwgaSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBtc2dfc2V0X2hkcl9zeihzdHJ1Y3QgdGlwY19tc2cgKm0sdTMyIG4pCitzdGF0aWMgaW5saW5lIHUzMiBtc2dfaGRyX3N6KHN0cnVjdCB0aXBjX21zZyAqbSkKK3sKKwlyZXR1cm4gbXNnX2JpdHMobSwgMCwgMjEsIDB4ZikgPDwgMjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG1zZ19zZXRfaGRyX3N6KHN0cnVjdCB0aXBjX21zZyAqbSwgdTMyIG4pCiB7CiAJbXNnX3NldF9iaXRzKG0sIDAsIDIxLCAweGYsIG4+PjIpOwogfQogCitzdGF0aWMgaW5saW5lIHUzMiBtc2dfc2l6ZShzdHJ1Y3QgdGlwY19tc2cgKm0pCit7CisJcmV0dXJuIG1zZ19iaXRzKG0sIDAsIDAsIDB4MWZmZmYpOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBtc2dfZGF0YV9zeihzdHJ1Y3QgdGlwY19tc2cgKm0pCit7CisJcmV0dXJuIG1zZ19zaXplKG0pIC0gbXNnX2hkcl9zeihtKTsKK30KKwogc3RhdGljIGlubGluZSBpbnQgbXNnX25vbl9zZXEoc3RydWN0IHRpcGNfbXNnICptKQogewogCXJldHVybiBtc2dfYml0cyhtLCAwLCAyMCwgMSk7CkBAIC0xNjIsMTEgKzIyOSwzNiBAQAogICogV29yZCAxCiAgKi8KIAorc3RhdGljIGlubGluZSB1MzIgbXNnX3R5cGUoc3RydWN0IHRpcGNfbXNnICptKQoreworCXJldHVybiBtc2dfYml0cyhtLCAxLCAyOSwgMHg3KTsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIG1zZ19zZXRfdHlwZShzdHJ1Y3QgdGlwY19tc2cgKm0sIHUzMiBuKQogewogCW1zZ19zZXRfYml0cyhtLCAxLCAyOSwgMHg3LCBuKTsKIH0KIAorc3RhdGljIGlubGluZSB1MzIgbXNnX25hbWVkKHN0cnVjdCB0aXBjX21zZyAqbSkKK3sKKwlyZXR1cm4gbXNnX3R5cGUobSkgPT0gVElQQ19OQU1FRF9NU0c7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIG1zZ19tY2FzdChzdHJ1Y3QgdGlwY19tc2cgKm0pCit7CisJcmV0dXJuIG1zZ190eXBlKG0pID09IFRJUENfTUNBU1RfTVNHOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBtc2dfY29ubmVjdGVkKHN0cnVjdCB0aXBjX21zZyAqbSkKK3sKKwlyZXR1cm4gbXNnX3R5cGUobSkgPT0gVElQQ19DT05OX01TRzsKK30KKworc3RhdGljIGlubGluZSB1MzIgbXNnX2VycmNvZGUoc3RydWN0IHRpcGNfbXNnICptKQoreworCXJldHVybiBtc2dfYml0cyhtLCAxLCAyNSwgMHhmKTsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIG1zZ19zZXRfZXJyY29kZShzdHJ1Y3QgdGlwY19tc2cgKm0sIHUzMiBlcnIpCiB7CiAJbXNnX3NldF9iaXRzKG0sIDEsIDI1LCAweGYsIGVycik7CkBAIC0yNTcsMzEgKzM0OSw2OCBAQAogICovCiAKIAorc3RhdGljIGlubGluZSB1MzIgbXNnX3ByZXZub2RlKHN0cnVjdCB0aXBjX21zZyAqbSkKK3sKKwlyZXR1cm4gbXNnX3dvcmQobSwgMyk7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBtc2dfc2V0X3ByZXZub2RlKHN0cnVjdCB0aXBjX21zZyAqbSwgdTMyIGEpCiB7CiAJbXNnX3NldF93b3JkKG0sIDMsIGEpOwogfQogCitzdGF0aWMgaW5saW5lIHUzMiBtc2dfb3JpZ3BvcnQoc3RydWN0IHRpcGNfbXNnICptKQoreworCXJldHVybiBtc2dfd29yZChtLCA0KTsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIG1zZ19zZXRfb3JpZ3BvcnQoc3RydWN0IHRpcGNfbXNnICptLCB1MzIgcCkKIHsKIAltc2dfc2V0X3dvcmQobSwgNCwgcCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdTMyIG1zZ19kZXN0cG9ydChzdHJ1Y3QgdGlwY19tc2cgKm0pCit7CisJcmV0dXJuIG1zZ193b3JkKG0sIDUpOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgbXNnX3NldF9kZXN0cG9ydChzdHJ1Y3QgdGlwY19tc2cgKm0sIHUzMiBwKQogewogCW1zZ19zZXRfd29yZChtLCA1LCBwKTsKIH0KIAorc3RhdGljIGlubGluZSB1MzIgbXNnX21jX25ldGlkKHN0cnVjdCB0aXBjX21zZyAqbSkKK3sKKwlyZXR1cm4gbXNnX3dvcmQobSwgNSk7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBtc2dfc2V0X21jX25ldGlkKHN0cnVjdCB0aXBjX21zZyAqbSwgdTMyIHApCiB7CiAJbXNnX3NldF93b3JkKG0sIDUsIHApOwogfQogCitzdGF0aWMgaW5saW5lIGludCBtc2dfc2hvcnQoc3RydWN0IHRpcGNfbXNnICptKQoreworCXJldHVybiBtc2dfaGRyX3N6KG0pID09IDI0OworfQorCitzdGF0aWMgaW5saW5lIHUzMiBtc2dfb3JpZ25vZGUoc3RydWN0IHRpcGNfbXNnICptKQoreworCWlmIChsaWtlbHkobXNnX3Nob3J0KG0pKSkKKwkJcmV0dXJuIG1zZ19wcmV2bm9kZShtKTsKKwlyZXR1cm4gbXNnX3dvcmQobSwgNik7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBtc2dfc2V0X29yaWdub2RlKHN0cnVjdCB0aXBjX21zZyAqbSwgdTMyIGEpCiB7CiAJbXNnX3NldF93b3JkKG0sIDYsIGEpOwogfQogCitzdGF0aWMgaW5saW5lIHUzMiBtc2dfZGVzdG5vZGUoc3RydWN0IHRpcGNfbXNnICptKQoreworCXJldHVybiBtc2dfd29yZChtLCA3KTsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIG1zZ19zZXRfZGVzdG5vZGUoc3RydWN0IHRpcGNfbXNnICptLCB1MzIgYSkKIHsKIAltc2dfc2V0X3dvcmQobSwgNywgYSk7CkBAIC0yOTYsNyArNDI1LDEyIEBACiB7CiAJaWYgKGxpa2VseShtc2dfc2hvcnQobSkpKQogCQlyZXR1cm4gMDsKLQlyZXR1cm4obXNnX2Rlc3Rub2RlKG0pIF4gbXNnX29yaWdub2RlKG0pKSA+PiAxMTsKKwlyZXR1cm4gKG1zZ19kZXN0bm9kZShtKSBeIG1zZ19vcmlnbm9kZShtKSkgPj4gMTE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIG1zZ19uYW1ldHlwZShzdHJ1Y3QgdGlwY19tc2cgKm0pCit7CisJcmV0dXJuIG1zZ193b3JkKG0sIDgpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbXNnX3NldF9uYW1ldHlwZShzdHJ1Y3QgdGlwY19tc2cgKm0sIHUzMiBuKQpAQCAtMzI0LDYgKzQ1OCwxNiBAQAogCW1zZ19zZXRfd29yZChtLCA4LCBuKTsKIH0KIAorc3RhdGljIGlubGluZSB1MzIgbXNnX25hbWVpbnN0KHN0cnVjdCB0aXBjX21zZyAqbSkKK3sKKwlyZXR1cm4gbXNnX3dvcmQobSwgOSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIG1zZ19uYW1lbG93ZXIoc3RydWN0IHRpcGNfbXNnICptKQoreworCXJldHVybiBtc2dfbmFtZWluc3QobSk7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBtc2dfc2V0X25hbWVsb3dlcihzdHJ1Y3QgdGlwY19tc2cgKm0sIHUzMiBuKQogewogCW1zZ19zZXRfd29yZChtLCA5LCBuKTsKQEAgLTMzNCwxMSArNDc4LDIxIEBACiAJbXNnX3NldF9uYW1lbG93ZXIobSwgbik7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdTMyIG1zZ19uYW1ldXBwZXIoc3RydWN0IHRpcGNfbXNnICptKQoreworCXJldHVybiBtc2dfd29yZChtLCAxMCk7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBtc2dfc2V0X25hbWV1cHBlcihzdHJ1Y3QgdGlwY19tc2cgKm0sIHUzMiBuKQogewogCW1zZ19zZXRfd29yZChtLCAxMCwgbik7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdW5jaGFyICptc2dfZGF0YShzdHJ1Y3QgdGlwY19tc2cgKm0pCit7CisJcmV0dXJuICgodW5jaGFyICopbSkgKyBtc2dfaGRyX3N6KG0pOworfQorCiBzdGF0aWMgaW5saW5lIHN0cnVjdCB0aXBjX21zZyAqbXNnX2dldF93cmFwcGVkKHN0cnVjdCB0aXBjX21zZyAqbSkKIHsKIAlyZXR1cm4gKHN0cnVjdCB0aXBjX21zZyAqKW1zZ19kYXRhKG0pOwpAQCAtMzg2LDcgKzU0MCw3IEBACiAjZGVmaW5lICBNU0dfQlVORExFUiAgICAgICAgICA2CiAjZGVmaW5lICBMSU5LX1BST1RPQ09MICAgICAgICA3CiAjZGVmaW5lICBDT05OX01BTkFHRVIgICAgICAgICA4Ci0jZGVmaW5lICBST1VURV9ESVNUUklCVVRPUiAgICA5CisjZGVmaW5lICBST1VURV9ESVNUUklCVVRPUiAgICA5CQkvKiBvYnNvbGV0ZWQgKi8KICNkZWZpbmUgIENIQU5HRU9WRVJfUFJPVE9DT0wgIDEwCiAjZGVmaW5lICBOQU1FX0RJU1RSSUJVVE9SICAgICAxMQogI2RlZmluZSAgTVNHX0ZSQUdNRU5URVIgICAgICAgMTIKQEAgLTY2NSwxMSArODE5LDYgQEAKIAltc2dfc2V0X3dvcmQobSwgbXNnX2hkcl9zeihtKS80LCBhKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIG1zZ19zZXRfZGF0YW9jdGV0KHN0cnVjdCB0aXBjX21zZyAqbSwgdTMyIHBvcykKLXsKLQltc2dfZGF0YShtKVtwb3MgKyA0XSA9IDE7Ci19Ci0KIC8qCiAgKiBTZWdtZW50YXRpb24gbWVzc2FnZSB0eXBlcwogICovCkBAIC02OTYsNyArODQ1LDcgQEAKICAqIFJvdXRpbmcgdGFibGUgbWVzc2FnZSB0eXBlcwogICovCiAjZGVmaW5lIEVYVF9ST1VUSU5HX1RBQkxFICAgIDAKLSNkZWZpbmUgTE9DQUxfUk9VVElOR19UQUJMRSAgMQorI2RlZmluZSBMT0NBTF9ST1VUSU5HX1RBQkxFICAxCQkvKiBvYnNvbGV0ZWQgKi8KICNkZWZpbmUgU0xBVkVfUk9VVElOR19UQUJMRSAgMgogI2RlZmluZSBST1VURV9BRERJVElPTiAgICAgICAzCiAjZGVmaW5lIFJPVVRFX1JFTU9WQUwgICAgICAgIDQKQEAgLTcxNCw3ICs4NjMsNyBAQAogaW50IHRpcGNfbXNnX2NhbGNfZGF0YV9zaXplKHN0cnVjdCBpb3ZlYyBjb25zdCAqbXNnX3NlY3QsIHUzMiBudW1fc2VjdCk7CiBpbnQgdGlwY19tc2dfYnVpbGQoc3RydWN0IHRpcGNfbXNnICpoZHIsCiAJCQkgICAgc3RydWN0IGlvdmVjIGNvbnN0ICptc2dfc2VjdCwgdTMyIG51bV9zZWN0LAotCQkJICAgIGludCBtYXhfc2l6ZSwgaW50IHVzcm1lbSwgc3RydWN0IHNrX2J1ZmYqKiBidWYpOworCQkJICAgIGludCBtYXhfc2l6ZSwgaW50IHVzcm1lbSwgc3RydWN0IHNrX2J1ZmYgKipidWYpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgbXNnX3NldF9tZWRpYV9hZGRyKHN0cnVjdCB0aXBjX21zZyAqbSwgc3RydWN0IHRpcGNfbWVkaWFfYWRkciAqYSkKIHsKQEAgLTcyMyw3ICs4NzIsNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgbXNnX2dldF9tZWRpYV9hZGRyKHN0cnVjdCB0aXBjX21zZyAqbSwgc3RydWN0IHRpcGNfbWVkaWFfYWRkciAqYSkKIHsKLQltZW1jcHkoYSwgJigoaW50KiltKVs1XSwgc2l6ZW9mKCphKSk7CisJbWVtY3B5KGEsICYoKGludCAqKW0pWzVdLCBzaXplb2YoKmEpKTsKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvdGlwYy9uYW1lX2Rpc3RyLmMgYi9uZXQvdGlwYy9uYW1lX2Rpc3RyLmMKaW5kZXggN2I5MDcxNy4uNDgzYzIyNiAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvbmFtZV9kaXN0ci5jCisrKyBiL25ldC90aXBjL25hbWVfZGlzdHIuYwpAQCAtMzUsMTAgKzM1LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29yZS5oIgotI2luY2x1ZGUgImNsdXN0ZXIuaCIKLSNpbmNsdWRlICJkYmcuaCIKICNpbmNsdWRlICJsaW5rLmgiCi0jaW5jbHVkZSAibXNnLmgiCiAjaW5jbHVkZSAibmFtZV9kaXN0ci5oIgogCiAjZGVmaW5lIElURU1fU0laRSBzaXplb2Yoc3RydWN0IGRpc3RyX2l0ZW0pCkBAIC03Niw3ICs3Myw3IEBACiAgKi8KIAogc3RhdGljIExJU1RfSEVBRChwdWJsX3Jvb3QpOwotc3RhdGljIHUzMiBwdWJsX2NudCA9IDA7CitzdGF0aWMgdTMyIHB1YmxfY250OwogCiAvKioKICAqIHB1YmxfdG9faXRlbSAtIGFkZCBwdWJsaWNhdGlvbiBpbmZvIHRvIGEgcHVibGljYXRpb24gbWVzc2FnZQpAQCAtODksNyArODYsNiBAQAogCWktPnVwcGVyID0gaHRvbmwocC0+dXBwZXIpOwogCWktPnJlZiA9IGh0b25sKHAtPnJlZik7CiAJaS0+a2V5ID0gaHRvbmwocC0+a2V5KTsKLQlkYmcoInB1YmxfdG9faXRlbTogJXUsICV1LCAldVxuIiwgcC0+dHlwZSwgcC0+bG93ZXIsIHAtPnVwcGVyKTsKIH0KIAogLyoqCkBAIC0xMDksNiArMTA1LDI2IEBACiAJcmV0dXJuIGJ1ZjsKIH0KIAorc3RhdGljIHZvaWQgbmFtZWRfY2x1c3Rlcl9kaXN0cmlidXRlKHN0cnVjdCBza19idWZmICpidWYpCit7CisJc3RydWN0IHNrX2J1ZmYgKmJ1Zl9jb3B5OworCXN0cnVjdCB0aXBjX25vZGUgKm5fcHRyOworCXUzMiBuX251bTsKKworCWZvciAobl9udW0gPSAxOyBuX251bSA8PSB0aXBjX25ldC5oaWdoZXN0X25vZGU7IG5fbnVtKyspIHsKKwkJbl9wdHIgPSB0aXBjX25ldC5ub2Rlc1tuX251bV07CisJCWlmIChuX3B0ciAmJiB0aXBjX25vZGVfaGFzX2FjdGl2ZV9saW5rcyhuX3B0cikpIHsKKwkJCWJ1Zl9jb3B5ID0gc2tiX2NvcHkoYnVmLCBHRlBfQVRPTUlDKTsKKwkJCWlmICghYnVmX2NvcHkpCisJCQkJYnJlYWs7CisJCQltc2dfc2V0X2Rlc3Rub2RlKGJ1Zl9tc2coYnVmX2NvcHkpLCBuX3B0ci0+YWRkcik7CisJCQl0aXBjX2xpbmtfc2VuZChidWZfY29weSwgbl9wdHItPmFkZHIsIG5fcHRyLT5hZGRyKTsKKwkJfQorCX0KKworCWJ1Zl9kaXNjYXJkKGJ1Zik7Cit9CisKIC8qKgogICogdGlwY19uYW1lZF9wdWJsaXNoIC0gdGVsbCBvdGhlciBub2RlcyBhYm91dCBhIG5ldyBwdWJsaWNhdGlvbiBieSB0aGlzIG5vZGUKICAqLwpAQCAtMTI5LDggKzE0NSw3IEBACiAKIAlpdGVtID0gKHN0cnVjdCBkaXN0cl9pdGVtICopbXNnX2RhdGEoYnVmX21zZyhidWYpKTsKIAlwdWJsX3RvX2l0ZW0oaXRlbSwgcHVibCk7Ci0JZGJnKCJ0aXBjX25hbWVkX3dpdGhkcmF3OiBicm9hZGNhc3RpbmcgcHVibGlzaCBtc2dcbiIpOwotCXRpcGNfY2x0cl9icm9hZGNhc3QoYnVmKTsKKwluYW1lZF9jbHVzdGVyX2Rpc3RyaWJ1dGUoYnVmKTsKIH0KIAogLyoqCkBAIC0xNTMsOCArMTY4LDcgQEAKIAogCWl0ZW0gPSAoc3RydWN0IGRpc3RyX2l0ZW0gKiltc2dfZGF0YShidWZfbXNnKGJ1ZikpOwogCXB1YmxfdG9faXRlbShpdGVtLCBwdWJsKTsKLQlkYmcoInRpcGNfbmFtZWRfd2l0aGRyYXc6IGJyb2FkY2FzdGluZyB3aXRoZHJhdyBtc2dcbiIpOwotCXRpcGNfY2x0cl9icm9hZGNhc3QoYnVmKTsKKwluYW1lZF9jbHVzdGVyX2Rpc3RyaWJ1dGUoYnVmKTsKIH0KIAogLyoqCkBAIC0xOTEsOSArMjA1LDYgQEAKIAkJbGVmdCAtPSBJVEVNX1NJWkU7CiAJCWlmICghbGVmdCkgewogCQkJbXNnX3NldF9saW5rX3NlbGVjdG9yKGJ1Zl9tc2coYnVmKSwgbm9kZSk7Ci0JCQlkYmcoInRpcGNfbmFtZWRfbm9kZV91cDogc2VuZGluZyBwdWJsaXNoIG1zZyB0byAiCi0JCQkgICAgIjwldS4ldS4ldT5cbiIsIHRpcGNfem9uZShub2RlKSwKLQkJCSAgICB0aXBjX2NsdXN0ZXIobm9kZSksIHRpcGNfbm9kZShub2RlKSk7CiAJCQl0aXBjX2xpbmtfc2VuZChidWYsIG5vZGUsIG5vZGUpOwogCQkJYnVmID0gTlVMTDsKIAkJfQpAQCAtMjE4LDggKzIyOSw2IEBACiAJc3RydWN0IHB1YmxpY2F0aW9uICpwOwogCiAJd3JpdGVfbG9ja19iaCgmdGlwY19uYW1ldGJsX2xvY2spOwotCWRiZygibm9kZV9pc19kb3duOiB3aXRoZHJhd2luZyAldSwgJXUsICV1XG4iLAotCSAgICBwdWJsLT50eXBlLCBwdWJsLT5sb3dlciwgcHVibC0+dXBwZXIpOwogCXB1YmwtPmtleSArPSAxMjIyMzQ1OwogCXAgPSB0aXBjX25hbWV0YmxfcmVtb3ZlX3B1YmwocHVibC0+dHlwZSwgcHVibC0+bG93ZXIsCiAJCQkJICAgICBwdWJsLT5ub2RlLCBwdWJsLT5yZWYsIHB1YmwtPmtleSk7CkBAIC0yMzEsOSArMjQwLDcgQEAKIAkJICAgIHB1YmwtPnR5cGUsIHB1YmwtPmxvd2VyLCBwdWJsLT5ub2RlLCBwdWJsLT5yZWYsIHB1YmwtPmtleSk7CiAJfQogCi0JaWYgKHApIHsKLQkJa2ZyZWUocCk7Ci0JfQorCWtmcmVlKHApOwogfQogCiAvKioKQEAgLTI1MCw5ICsyNTcsNiBAQAogCXdyaXRlX2xvY2tfYmgoJnRpcGNfbmFtZXRibF9sb2NrKTsKIAl3aGlsZSAoY291bnQtLSkgewogCQlpZiAobXNnX3R5cGUobXNnKSA9PSBQVUJMSUNBVElPTikgewotCQkJZGJnKCJ0aXBjX25hbWVkX3JlY3Y6IGdvdCBwdWJsaWNhdGlvbiBmb3IgJXUsICV1LCAldVxuIiwKLQkJCSAgICBudG9obChpdGVtLT50eXBlKSwgbnRvaGwoaXRlbS0+bG93ZXIpLAotCQkJICAgIG50b2hsKGl0ZW0tPnVwcGVyKSk7CiAJCQlwdWJsID0gdGlwY19uYW1ldGJsX2luc2VydF9wdWJsKG50b2hsKGl0ZW0tPnR5cGUpLAogCQkJCQkJCW50b2hsKGl0ZW0tPmxvd2VyKSwKIAkJCQkJCQludG9obChpdGVtLT51cHBlciksCkBAIC0yNjcsOSArMjcxLDYgQEAKIAkJCQkJCSAgICAgICAobmV0X2V2X2hhbmRsZXIpbm9kZV9pc19kb3duKTsKIAkJCX0KIAkJfSBlbHNlIGlmIChtc2dfdHlwZShtc2cpID09IFdJVEhEUkFXQUwpIHsKLQkJCWRiZygidGlwY19uYW1lZF9yZWN2OiBnb3Qgd2l0aGRyYXdsIGZvciAldSwgJXUsICV1XG4iLAotCQkJICAgIG50b2hsKGl0ZW0tPnR5cGUpLCBudG9obChpdGVtLT5sb3dlciksCi0JCQkgICAgbnRvaGwoaXRlbS0+dXBwZXIpKTsKIAkJCXB1YmwgPSB0aXBjX25hbWV0YmxfcmVtb3ZlX3B1YmwobnRvaGwoaXRlbS0+dHlwZSksCiAJCQkJCQkJbnRvaGwoaXRlbS0+bG93ZXIpLAogCQkJCQkJCW1zZ19vcmlnbm9kZShtc2cpLApkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbmFtZV90YWJsZS5jIGIvbmV0L3RpcGMvbmFtZV90YWJsZS5jCmluZGV4IDNhOGRlNDMuLjIwNWVkNGEgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL25hbWVfdGFibGUuYworKysgYi9uZXQvdGlwYy9uYW1lX3RhYmxlLmMKQEAgLTM2LDE1ICszNiwxMCBAQAogCiAjaW5jbHVkZSAiY29yZS5oIgogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgImRiZy5oIgogI2luY2x1ZGUgIm5hbWVfdGFibGUuaCIKICNpbmNsdWRlICJuYW1lX2Rpc3RyLmgiCi0jaW5jbHVkZSAiYWRkci5oIgotI2luY2x1ZGUgIm5vZGVfc3Vic2NyLmgiCiAjaW5jbHVkZSAic3Vic2NyLmgiCiAjaW5jbHVkZSAicG9ydC5oIgotI2luY2x1ZGUgImNsdXN0ZXIuaCIKLSNpbmNsdWRlICJiY2FzdC5oIgogCiBzdGF0aWMgaW50IHRpcGNfbmFtZXRibF9zaXplID0gMTAyNDsJCS8qIG11c3QgYmUgYSBwb3dlciBvZiAyICovCiAKQEAgLTEwOSw3ICsxMDQsNyBAQAogCXUzMiBsb2NhbF9wdWJsX2NvdW50OwogfTsKIAotc3RhdGljIHN0cnVjdCBuYW1lX3RhYmxlIHRhYmxlID0geyBOVUxMIH0gOworc3RhdGljIHN0cnVjdCBuYW1lX3RhYmxlIHRhYmxlOwogc3RhdGljIGF0b21pY190IHJzdl9wdWJsX29rID0gQVRPTUlDX0lOSVQoMCk7CiBERUZJTkVfUldMT0NLKHRpcGNfbmFtZXRibF9sb2NrKTsKIApAQCAtMTc3LDggKzE3Miw2IEBACiAJc3Bpbl9sb2NrX2luaXQoJm5zZXEtPmxvY2spOwogCW5zZXEtPnR5cGUgPSB0eXBlOwogCW5zZXEtPnNzZXFzID0gc3NlcTsKLQlkYmcoInRpcGNfbmFtZXNlcV9jcmVhdGUoKTogbnNlcSA9ICVwLCB0eXBlICV1LCBzc3NlcXMgJXAsIGZmOiAldVxuIiwKLQkgICAgbnNlcSwgdHlwZSwgbnNlcS0+c3NlcXMsIG5zZXEtPmZpcnN0X2ZyZWUpOwogCW5zZXEtPmFsbG9jID0gMTsKIAlJTklUX0hMSVNUX05PREUoJm5zZXEtPm5zX2xpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZuc2VxLT5zdWJzY3JpcHRpb25zKTsKQEAgLTI1Niw4ICsyNDksNiBAQAogCWludCBjcmVhdGVkX3N1YnNlcSA9IDA7CiAKIAlzc2VxID0gbmFtZXNlcV9maW5kX3N1YnNlcShuc2VxLCBsb3dlcik7Ci0JZGJnKCJuYW1lc2VxX2luczogZm9yIHNlcSAlcCwgeyV1LCV1fSwgZm91bmQgc3NlcSAlcFxuIiwKLQkgICAgbnNlcSwgdHlwZSwgbG93ZXIsIHNzZXEpOwogCWlmIChzc2VxKSB7CiAKIAkJLyogTG93ZXIgZW5kIG92ZXJsYXBzIGV4aXN0aW5nIGVudHJ5ID0+IG5lZWQgYW4gZXhhY3QgbWF0Y2ggKi8KQEAgLTI5NCwzOCArMjg1LDMwIEBACiAJCQkJICAgICB0eXBlLCBsb3dlciwgdXBwZXIpOwogCQkJCXJldHVybiBOVUxMOwogCQkJfQotCQkJZGJnKCJBbGxvY2F0ZWQgJXUgbW9yZSBzc2Vxc1xuIiwgbnNlcS0+YWxsb2MpOwogCQkJbWVtY3B5KHNzZXFzLCBuc2VxLT5zc2VxcywKIAkJCSAgICAgICBuc2VxLT5hbGxvYyAqIHNpemVvZihzdHJ1Y3Qgc3ViX3NlcSkpOwogCQkJa2ZyZWUobnNlcS0+c3NlcXMpOwogCQkJbnNlcS0+c3NlcXMgPSBzc2VxczsKIAkJCW5zZXEtPmFsbG9jICo9IDI7CiAJCX0KLQkJZGJnKCJIYXZlICV1IHNzZXFzIGZvciB0eXBlICV1XG4iLCBuc2VxLT5hbGxvYywgdHlwZSk7CiAKIAkJLyogSW5zZXJ0IG5ldyBzdWItc2VxdWVuY2UgKi8KIAotCQlkYmcoImlucyBpbiBwb3MgJXUsIGZmID0gJXVcbiIsIGluc3BvcywgbnNlcS0+Zmlyc3RfZnJlZSk7CiAJCXNzZXEgPSAmbnNlcS0+c3NlcXNbaW5zcG9zXTsKIAkJZnJlZXNzZXEgPSAmbnNlcS0+c3NlcXNbbnNlcS0+Zmlyc3RfZnJlZV07Ci0JCW1lbW1vdmUoc3NlcSArIDEsIHNzZXEsIChmcmVlc3NlcSAtIHNzZXEpICogc2l6ZW9mICgqc3NlcSkpOwotCQltZW1zZXQoc3NlcSwgMCwgc2l6ZW9mICgqc3NlcSkpOworCQltZW1tb3ZlKHNzZXEgKyAxLCBzc2VxLCAoZnJlZXNzZXEgLSBzc2VxKSAqIHNpemVvZigqc3NlcSkpOworCQltZW1zZXQoc3NlcSwgMCwgc2l6ZW9mKCpzc2VxKSk7CiAJCW5zZXEtPmZpcnN0X2ZyZWUrKzsKIAkJc3NlcS0+bG93ZXIgPSBsb3dlcjsKIAkJc3NlcS0+dXBwZXIgPSB1cHBlcjsKIAkJY3JlYXRlZF9zdWJzZXEgPSAxOwogCX0KLQlkYmcoImluc2VydGluZyB7JXUsJXUsJXV9IGZyb20gPDB4JXg6JXU+IGludG8gc3NlcSAlcCgldSwldSkgb2Ygc2VxICVwXG4iLAotCSAgICB0eXBlLCBsb3dlciwgdXBwZXIsIG5vZGUsIHBvcnQsIHNzZXEsCi0JICAgIHNzZXEtPmxvd2VyLCBzc2VxLT51cHBlciwgbnNlcSk7CiAKIAkvKiBJbnNlcnQgYSBwdWJsaWNhdGlvbjogKi8KIAogCXB1YmwgPSBwdWJsX2NyZWF0ZSh0eXBlLCBsb3dlciwgdXBwZXIsIHNjb3BlLCBub2RlLCBwb3J0LCBrZXkpOwogCWlmICghcHVibCkKIAkJcmV0dXJuIE5VTEw7Ci0JZGJnKCJpbnNlcnRpbmcgcHVibCAlcCwgbm9kZT0weCV4IHB1YmwtPm5vZGU9MHgleCwgc3Vic2NyLT5ub2RlPSVwXG4iLAotCSAgICBwdWJsLCBub2RlLCBwdWJsLT5ub2RlLCBwdWJsLT5zdWJzY3Iubm9kZSk7CiAKIAlzc2VxLT56b25lX2xpc3Rfc2l6ZSsrOwogCWlmICghc3NlcS0+em9uZV9saXN0KQpAQCAtMzYwLDcgKzM0Myw2IEBACiAJICogQW55IHN1YnNjcmlwdGlvbnMgd2FpdGluZyBmb3Igbm90aWZpY2F0aW9uPwogCSAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzLCBzdCwgJm5zZXEtPnN1YnNjcmlwdGlvbnMsIG5hbWVzZXFfbGlzdCkgewotCQlkYmcoImNhbGxpbmcgcmVwb3J0X292ZXJsYXAoKVxuIik7CiAJCXRpcGNfc3Vic2NyX3JlcG9ydF9vdmVybGFwKHMsCiAJCQkJCSAgIHB1YmwtPmxvd2VyLAogCQkJCQkgICBwdWJsLT51cHBlciwKQEAgLTM5OCw5ICszODAsNiBAQAogCWlmICghc3NlcSkKIAkJcmV0dXJuIE5VTEw7CiAKLQlkYmcoInRpcGNfbmFtZXNlcV9yZW1vdmVfcHVibDogc2VxOiAlcCwgc3NlcSAlcCwgeyV1LCV1fSwga2V5ICV1XG4iLAotCSAgICBuc2VxLCBzc2VxLCBuc2VxLT50eXBlLCBpbnN0LCBrZXkpOwotCiAJLyogUmVtb3ZlIHB1YmxpY2F0aW9uIGZyb20gem9uZSBzY29wZSBsaXN0ICovCiAKIAlwcmV2ID0gc3NlcS0+em9uZV9saXN0OwpAQCAtNDkyLDcgKzQ3MSw3IEBACiAKIAlpZiAoIXNzZXEtPnpvbmVfbGlzdCkgewogCQlmcmVlID0gJm5zZXEtPnNzZXFzW25zZXEtPmZpcnN0X2ZyZWUtLV07Ci0JCW1lbW1vdmUoc3NlcSwgc3NlcSArIDEsIChmcmVlIC0gKHNzZXEgKyAxKSkgKiBzaXplb2YgKCpzc2VxKSk7CisJCW1lbW1vdmUoc3NlcSwgc3NlcSArIDEsIChmcmVlIC0gKHNzZXEgKyAxKSkgKiBzaXplb2YoKnNzZXEpKTsKIAkJcmVtb3ZlZF9zdWJzZXEgPSAxOwogCX0KIApAQCAtNTI4LDcgKzUwNyw3IEBACiAKIAl3aGlsZSAoc3NlcSAhPSAmbnNlcS0+c3NlcXNbbnNlcS0+Zmlyc3RfZnJlZV0pIHsKIAkJc3RydWN0IHB1YmxpY2F0aW9uICp6bCA9IHNzZXEtPnpvbmVfbGlzdDsKLQkJaWYgKHpsICYmIHRpcGNfc3Vic2NyX292ZXJsYXAocyxzc2VxLT5sb3dlcixzc2VxLT51cHBlcikpIHsKKwkJaWYgKHpsICYmIHRpcGNfc3Vic2NyX292ZXJsYXAocywgc3NlcS0+bG93ZXIsIHNzZXEtPnVwcGVyKSkgewogCQkJc3RydWN0IHB1YmxpY2F0aW9uICpjcnMgPSB6bDsKIAkJCWludCBtdXN0X3JlcG9ydCA9IDE7CiAKQEAgLTU1NCwxNSArNTMzLDEwIEBACiAJc3RydWN0IGhsaXN0X25vZGUgKnNlcV9ub2RlOwogCXN0cnVjdCBuYW1lX3NlcSAqbnM7CiAKLQlkYmcoImZpbmRfc2VxICV1LCgldSwweCV4KSB0YWJsZSA9ICVwLCBoYXNoW3R5cGVdID0gJXVcbiIsCi0JICAgIHR5cGUsIGh0b25sKHR5cGUpLCB0eXBlLCB0YWJsZS50eXBlcywgaGFzaCh0eXBlKSk7Ci0KIAlzZXFfaGVhZCA9ICZ0YWJsZS50eXBlc1toYXNoKHR5cGUpXTsKIAlobGlzdF9mb3JfZWFjaF9lbnRyeShucywgc2VxX25vZGUsIHNlcV9oZWFkLCBuc19saXN0KSB7Ci0JCWlmIChucy0+dHlwZSA9PSB0eXBlKSB7Ci0JCQlkYmcoImZvdW5kICVwXG4iLCBucyk7CisJCWlmIChucy0+dHlwZSA9PSB0eXBlKQogCQkJcmV0dXJuIG5zOwotCQl9CiAJfQogCiAJcmV0dXJuIE5VTEw7CkBAIC01NzMsMTggKzU0NywxNCBAQAogewogCXN0cnVjdCBuYW1lX3NlcSAqc2VxID0gbmFtZXRibF9maW5kX3NlcSh0eXBlKTsKIAotCWRiZygidGlwY19uYW1ldGJsX2luc2VydF9wdWJsOiB7JXUsJXUsJXV9IGZvdW5kICVwXG4iLCB0eXBlLCBsb3dlciwgdXBwZXIsIHNlcSk7CiAJaWYgKGxvd2VyID4gdXBwZXIpIHsKIAkJd2FybigiRmFpbGVkIHRvIHB1Ymxpc2ggaWxsZWdhbCB7JXUsJXUsJXV9XG4iLAogCQkgICAgIHR5cGUsIGxvd2VyLCB1cHBlcik7CiAJCXJldHVybiBOVUxMOwogCX0KIAotCWRiZygiUHVibGlzaGluZyB7JXUsJXUsJXV9IGZyb20gMHgleFxuIiwgdHlwZSwgbG93ZXIsIHVwcGVyLCBub2RlKTsKLQlpZiAoIXNlcSkgeworCWlmICghc2VxKQogCQlzZXEgPSB0aXBjX25hbWVzZXFfY3JlYXRlKHR5cGUsICZ0YWJsZS50eXBlc1toYXNoKHR5cGUpXSk7Ci0JCWRiZygidGlwY19uYW1ldGJsX2luc2VydF9wdWJsOiBjcmVhdGVkICVwXG4iLCBzZXEpOwotCX0KIAlpZiAoIXNlcSkKIAkJcmV0dXJuIE5VTEw7CiAKQEAgLTYwMSw3ICs1NzEsNiBAQAogCWlmICghc2VxKQogCQlyZXR1cm4gTlVMTDsKIAotCWRiZygiV2l0aGRyYXdpbmcgeyV1LCV1fSBmcm9tIDB4JXhcbiIsIHR5cGUsIGxvd2VyLCBub2RlKTsKIAlwdWJsID0gdGlwY19uYW1lc2VxX3JlbW92ZV9wdWJsKHNlcSwgbG93ZXIsIG5vZGUsIHJlZiwga2V5KTsKIAogCWlmICghc2VxLT5maXJzdF9mcmVlICYmIGxpc3RfZW1wdHkoJnNlcS0+c3Vic2NyaXB0aW9ucykpIHsKQEAgLTc4Miw5ICs3NTEsOCBAQAogCXRhYmxlLmxvY2FsX3B1YmxfY291bnQrKzsKIAlwdWJsID0gdGlwY19uYW1ldGJsX2luc2VydF9wdWJsKHR5cGUsIGxvd2VyLCB1cHBlciwgc2NvcGUsCiAJCQkJICAgdGlwY19vd25fYWRkciwgcG9ydF9yZWYsIGtleSk7Ci0JaWYgKHB1YmwgJiYgKHNjb3BlICE9IFRJUENfTk9ERV9TQ09QRSkpIHsKKwlpZiAocHVibCAmJiAoc2NvcGUgIT0gVElQQ19OT0RFX1NDT1BFKSkKIAkJdGlwY19uYW1lZF9wdWJsaXNoKHB1YmwpOwotCX0KIAl3cml0ZV91bmxvY2tfYmgoJnRpcGNfbmFtZXRibF9sb2NrKTsKIAlyZXR1cm4gcHVibDsKIH0KQEAgLTc5Nyw3ICs3NjUsNiBAQAogewogCXN0cnVjdCBwdWJsaWNhdGlvbiAqcHVibDsKIAotCWRiZygidGlwY19uYW1ldGJsX3dpdGhkcmF3OiB7JXUsJXV9LCBrZXk9JXVcbiIsIHR5cGUsIGxvd2VyLCBrZXkpOwogCXdyaXRlX2xvY2tfYmgoJnRpcGNfbmFtZXRibF9sb2NrKTsKIAlwdWJsID0gdGlwY19uYW1ldGJsX3JlbW92ZV9wdWJsKHR5cGUsIGxvd2VyLCB0aXBjX293bl9hZGRyLCByZWYsIGtleSk7CiAJaWYgKGxpa2VseShwdWJsKSkgewpAQCAtODI3LDEzICs3OTQsMTAgQEAKIAogCXdyaXRlX2xvY2tfYmgoJnRpcGNfbmFtZXRibF9sb2NrKTsKIAlzZXEgPSBuYW1ldGJsX2ZpbmRfc2VxKHR5cGUpOwotCWlmICghc2VxKSB7CisJaWYgKCFzZXEpCiAJCXNlcSA9IHRpcGNfbmFtZXNlcV9jcmVhdGUodHlwZSwgJnRhYmxlLnR5cGVzW2hhc2godHlwZSldKTsKLQl9Ci0JaWYgKHNlcSl7CisJaWYgKHNlcSkgewogCQlzcGluX2xvY2tfYmgoJnNlcS0+bG9jayk7Ci0JCWRiZygidGlwY19uYW1ldGJsX3N1YnNjcmliZTpmb3VuZCAlcCBmb3IgeyV1LCV1LCV1fVxuIiwKLQkJICAgIHNlcSwgdHlwZSwgcy0+c2VxLmxvd2VyLCBzLT5zZXEudXBwZXIpOwogCQl0aXBjX25hbWVzZXFfc3Vic2NyaWJlKHNlcSwgcyk7CiAJCXNwaW5fdW5sb2NrX2JoKCZzZXEtPmxvY2spOwogCX0gZWxzZSB7CkBAIC04NTMsNyArODE3LDcgQEAKIAogCXdyaXRlX2xvY2tfYmgoJnRpcGNfbmFtZXRibF9sb2NrKTsKIAlzZXEgPSBuYW1ldGJsX2ZpbmRfc2VxKHMtPnNlcS50eXBlKTsKLQlpZiAoc2VxICE9IE5VTEwpeworCWlmIChzZXEgIT0gTlVMTCkgewogCQlzcGluX2xvY2tfYmgoJnNlcS0+bG9jayk7CiAJCWxpc3RfZGVsX2luaXQoJnMtPm5hbWVzZXFfbGlzdCk7CiAJCXNwaW5fdW5sb2NrX2JoKCZzZXEtPmxvY2spOwpAQCAtODg2LDcgKzg1MCw3IEBACiAJfQogCiAJZG8gewotCQlzcHJpbnRmIChwb3J0SWRTdHIsICI8JXUuJXUuJXU6JXU+IiwKKwkJc3ByaW50Zihwb3J0SWRTdHIsICI8JXUuJXUuJXU6JXU+IiwKIAkJCSB0aXBjX3pvbmUocHVibC0+bm9kZSksIHRpcGNfY2x1c3RlcihwdWJsLT5ub2RlKSwKIAkJCSB0aXBjX25vZGUocHVibC0+bm9kZSksIHB1YmwtPnJlZik7CiAJCXRpcGNfcHJpbnRmKGJ1ZiwgIiUtMjZzICIsIHBvcnRJZFN0cik7CmRpZmYgLS1naXQgYS9uZXQvdGlwYy9uYW1lX3RhYmxlLmggYi9uZXQvdGlwYy9uYW1lX3RhYmxlLmgKaW5kZXggMTM5ODgyZC4uZDIyOGJkNiAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvbmFtZV90YWJsZS5oCisrKyBiL25ldC90aXBjL25hbWVfdGFibGUuaApAQCAtNDYsNyArNDYsNyBAQAogICogVElQQyBuYW1lIHR5cGVzIHJlc2VydmVkIGZvciBpbnRlcm5hbCBUSVBDIHVzZSAoYm90aCBjdXJyZW50IGFuZCBwbGFubmVkKQogICovCiAKLSNkZWZpbmUgVElQQ19aTV9TUlYgMyAgCQkvKiB6b25lIG1hc3RlciBzZXJ2aWNlIG5hbWUgdHlwZSAqLworI2RlZmluZSBUSVBDX1pNX1NSViAzCQkvKiB6b25lIG1hc3RlciBzZXJ2aWNlIG5hbWUgdHlwZSAqLwogCiAKIC8qKgpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbmV0LmMgYi9uZXQvdGlwYy9uZXQuYwppbmRleCAxYTYyMWNmLi45YmFjZmQwIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9uZXQuYworKysgYi9uZXQvdGlwYy9uZXQuYwpAQCAtMzUsMTggKzM1LDEwIEBACiAgKi8KIAogI2luY2x1ZGUgImNvcmUuaCIKLSNpbmNsdWRlICJiZWFyZXIuaCIKICNpbmNsdWRlICJuZXQuaCIKLSNpbmNsdWRlICJ6b25lLmgiCi0jaW5jbHVkZSAiYWRkci5oIgotI2luY2x1ZGUgIm5hbWVfdGFibGUuaCIKICNpbmNsdWRlICJuYW1lX2Rpc3RyLmgiCiAjaW5jbHVkZSAic3Vic2NyLmgiCi0jaW5jbHVkZSAibGluay5oIgotI2luY2x1ZGUgIm1zZy5oIgogI2luY2x1ZGUgInBvcnQuaCIKLSNpbmNsdWRlICJiY2FzdC5oIgotI2luY2x1ZGUgImRpc2NvdmVyLmgiCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKIC8qCkBAIC0xMTYsNDYgKzEwOCwyNSBAQAogKi8KIAogREVGSU5FX1JXTE9DSyh0aXBjX25ldF9sb2NrKTsKLXN0YXRpYyBzdHJ1Y3QgX3pvbmUgKnRpcGNfem9uZXNbMjU2XSA9IHsgTlVMTCwgfTsKLXN0cnVjdCBuZXR3b3JrIHRpcGNfbmV0ID0geyB0aXBjX3pvbmVzIH07CitzdHJ1Y3QgbmV0d29yayB0aXBjX25ldDsKIAotc3RydWN0IHRpcGNfbm9kZSAqdGlwY19uZXRfc2VsZWN0X3JlbW90ZV9ub2RlKHUzMiBhZGRyLCB1MzIgcmVmKQorc3RhdGljIGludCBuZXRfc3RhcnQodm9pZCkKIHsKLQlyZXR1cm4gdGlwY196b25lX3NlbGVjdF9yZW1vdGVfbm9kZSh0aXBjX25ldC56b25lc1t0aXBjX3pvbmUoYWRkcildLCBhZGRyLCByZWYpOwotfQorCXRpcGNfbmV0Lm5vZGVzID0ga2NhbGxvYyh0aXBjX21heF9ub2RlcyArIDEsCisJCQkJIHNpemVvZigqdGlwY19uZXQubm9kZXMpLCBHRlBfQVRPTUlDKTsKKwl0aXBjX25ldC5oaWdoZXN0X25vZGUgPSAwOwogCi11MzIgdGlwY19uZXRfc2VsZWN0X3JvdXRlcih1MzIgYWRkciwgdTMyIHJlZikKLXsKLQlyZXR1cm4gdGlwY196b25lX3NlbGVjdF9yb3V0ZXIodGlwY19uZXQuem9uZXNbdGlwY196b25lKGFkZHIpXSwgYWRkciwgcmVmKTsKLX0KLQotdm9pZCB0aXBjX25ldF9yZW1vdmVfYXNfcm91dGVyKHUzMiByb3V0ZXIpCi17Ci0JdTMyIHpfbnVtOwotCi0JZm9yICh6X251bSA9IDE7IHpfbnVtIDw9IHRpcGNfbWF4X3pvbmVzOyB6X251bSsrKSB7Ci0JCWlmICghdGlwY19uZXQuem9uZXNbel9udW1dKQotCQkJY29udGludWU7Ci0JCXRpcGNfem9uZV9yZW1vdmVfYXNfcm91dGVyKHRpcGNfbmV0LnpvbmVzW3pfbnVtXSwgcm91dGVyKTsKLQl9Ci19Ci0KLXZvaWQgdGlwY19uZXRfc2VuZF9leHRlcm5hbF9yb3V0ZXModTMyIGRlc3QpCi17Ci0JdTMyIHpfbnVtOwotCi0JZm9yICh6X251bSA9IDE7IHpfbnVtIDw9IHRpcGNfbWF4X3pvbmVzOyB6X251bSsrKSB7Ci0JCWlmICh0aXBjX25ldC56b25lc1t6X251bV0pCi0JCQl0aXBjX3pvbmVfc2VuZF9leHRlcm5hbF9yb3V0ZXModGlwY19uZXQuem9uZXNbel9udW1dLCBkZXN0KTsKLQl9CisJcmV0dXJuIHRpcGNfbmV0Lm5vZGVzID8gMCA6IC1FTk9NRU07CiB9CiAKIHN0YXRpYyB2b2lkIG5ldF9zdG9wKHZvaWQpCiB7Ci0JdTMyIHpfbnVtOworCXUzMiBuX251bTsKIAotCWZvciAoel9udW0gPSAxOyB6X251bSA8PSB0aXBjX21heF96b25lczsgel9udW0rKykKLQkJdGlwY196b25lX2RlbGV0ZSh0aXBjX25ldC56b25lc1t6X251bV0pOworCWZvciAobl9udW0gPSAxOyBuX251bSA8PSB0aXBjX25ldC5oaWdoZXN0X25vZGU7IG5fbnVtKyspCisJCXRpcGNfbm9kZV9kZWxldGUodGlwY19uZXQubm9kZXNbbl9udW1dKTsKKwlrZnJlZSh0aXBjX25ldC5ub2Rlcyk7CisJdGlwY19uZXQubm9kZXMgPSBOVUxMOwogfQogCiBzdGF0aWMgdm9pZCBuZXRfcm91dGVfbmFtZWRfbXNnKHN0cnVjdCBza19idWZmICpidWYpCkBAIC0xNjUsMjIgKzEzNiwxOCBAQAogCXUzMiBkcG9ydDsKIAogCWlmICghbXNnX25hbWVkKG1zZykpIHsKLQkJbXNnX2RiZyhtc2csICJ0aXBjX25ldC0+ZHJvcF9uYW06Iik7CiAJCWJ1Zl9kaXNjYXJkKGJ1Zik7CiAJCXJldHVybjsKIAl9CiAKIAlkbm9kZSA9IGFkZHJfZG9tYWluKG1zZ19sb29rdXBfc2NvcGUobXNnKSk7CiAJZHBvcnQgPSB0aXBjX25hbWV0YmxfdHJhbnNsYXRlKG1zZ19uYW1ldHlwZShtc2cpLCBtc2dfbmFtZWluc3QobXNnKSwgJmRub2RlKTsKLQlkYmcoInRpcGNfbmV0LT5sb29rdXA8JXUsJXU+LT48JXUsJXg+XG4iLAotCSAgICBtc2dfbmFtZXR5cGUobXNnKSwgbXNnX25hbWVpbnN0KG1zZyksIGRwb3J0LCBkbm9kZSk7CiAJaWYgKGRwb3J0KSB7CiAJCW1zZ19zZXRfZGVzdG5vZGUobXNnLCBkbm9kZSk7CiAJCW1zZ19zZXRfZGVzdHBvcnQobXNnLCBkcG9ydCk7CiAJCXRpcGNfbmV0X3JvdXRlX21zZyhidWYpOwogCQlyZXR1cm47CiAJfQotCW1zZ19kYmcobXNnLCAidGlwY19uZXQtPnJlajpOTyBOQU1FOiAiKTsKIAl0aXBjX3JlamVjdF9tc2coYnVmLCBUSVBDX0VSUl9OT19OQU1FKTsKIH0KIApAQCAtMTk2LDE4ICsxNjMsMTQgQEAKIAltc2dfaW5jcl9yZXJvdXRlX2NudChtc2cpOwogCWlmIChtc2dfcmVyb3V0ZV9jbnQobXNnKSA+IDYpIHsKIAkJaWYgKG1zZ19lcnJjb2RlKG1zZykpIHsKLQkJCW1zZ19kYmcobXNnLCAiTkVUPkRJU0M+OiIpOwogCQkJYnVmX2Rpc2NhcmQoYnVmKTsKIAkJfSBlbHNlIHsKLQkJCW1zZ19kYmcobXNnLCAiTkVUPlJFSj46Iik7CiAJCQl0aXBjX3JlamVjdF9tc2coYnVmLCBtc2dfZGVzdHBvcnQobXNnKSA/CiAJCQkJCVRJUENfRVJSX05PX1BPUlQgOiBUSVBDX0VSUl9OT19OQU1FKTsKIAkJfQogCQlyZXR1cm47CiAJfQogCi0JbXNnX2RiZyhtc2csICJ0aXBjX25ldC0+cm91dDogIik7Ci0KIAkvKiBIYW5kbGUgbWVzc2FnZSBmb3IgdGhpcyBub2RlICovCiAJZG5vZGUgPSBtc2dfc2hvcnQobXNnKSA/IHRpcGNfb3duX2FkZHIgOiBtc2dfZGVzdG5vZGUobXNnKTsKIAlpZiAodGlwY19pbl9zY29wZShkbm9kZSwgdGlwY19vd25fYWRkcikpIHsKQEAgLTIyMSw5ICsxODQsNiBAQAogCQkJcmV0dXJuOwogCQl9CiAJCXN3aXRjaCAobXNnX3VzZXIobXNnKSkgewotCQljYXNlIFJPVVRFX0RJU1RSSUJVVE9SOgotCQkJdGlwY19jbHRyX3JlY3Zfcm91dGluZ190YWJsZShidWYpOwotCQkJYnJlYWs7CiAJCWNhc2UgTkFNRV9ESVNUUklCVVRPUjoKIAkJCXRpcGNfbmFtZWRfcmVjdihidWYpOwogCQkJYnJlYWs7CkBAIC0yMzEsMTQgKzE5MSwxMiBAQAogCQkJdGlwY19wb3J0X3JlY3ZfcHJvdG9fbXNnKGJ1Zik7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCW1zZ19kYmcobXNnLCJEUk9QL05FVC88UkVDPCIpOwogCQkJYnVmX2Rpc2NhcmQoYnVmKTsKIAkJfQogCQlyZXR1cm47CiAJfQogCiAJLyogSGFuZGxlIG1lc3NhZ2UgZm9yIGFub3RoZXIgbm9kZSAqLwotCW1zZ19kYmcobXNnLCAiTkVUPlNFTkQ+OiAiKTsKIAlza2JfdHJpbShidWYsIG1zZ19zaXplKG1zZykpOwogCXRpcGNfbGlua19zZW5kKGJ1ZiwgZG5vZGUsIG1zZ19saW5rX3NlbGVjdG9yKG1zZykpOwogfQpAQCAtMjU5LDEwICsyMTcsMTIgQEAKIAl0aXBjX25hbWVkX3JlaW5pdCgpOwogCXRpcGNfcG9ydF9yZWluaXQoKTsKIAotCWlmICgocmVzID0gdGlwY19jbHRyX2luaXQoKSkgfHwKLQkgICAgKHJlcyA9IHRpcGNfYmNsaW5rX2luaXQoKSkpIHsKKwlyZXMgPSBuZXRfc3RhcnQoKTsKKwlpZiAocmVzKQogCQlyZXR1cm4gcmVzOwotCX0KKwlyZXMgPSB0aXBjX2JjbGlua19pbml0KCk7CisJaWYgKHJlcykKKwkJcmV0dXJuIHJlczsKIAogCXRpcGNfa19zaWduYWwoKEhhbmRsZXIpdGlwY19zdWJzY3Jfc3RhcnQsIDApOwogCXRpcGNfa19zaWduYWwoKEhhbmRsZXIpdGlwY19jZmdfaW5pdCwgMCk7CmRpZmYgLS1naXQgYS9uZXQvdGlwYy9uZXQuaCBiL25ldC90aXBjL25ldC5oCmluZGV4IGRlMmI5YWQuLjRhZTU5YWQgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL25ldC5oCisrKyBiL25ldC90aXBjL25ldC5oCkBAIC0zNywyNiArMzcsMjYgQEAKICNpZm5kZWYgX1RJUENfTkVUX0gKICNkZWZpbmUgX1RJUENfTkVUX0gKIAotc3RydWN0IF96b25lOworc3RydWN0IHRpcGNfbm9kZTsKIAogLyoqCiAgKiBzdHJ1Y3QgbmV0d29yayAtIFRJUEMgbmV0d29yayBzdHJ1Y3R1cmUKLSAqIEB6b25lczogYXJyYXkgb2YgcG9pbnRlcnMgdG8gYWxsIHpvbmVzIHdpdGhpbiBuZXR3b3JrCisgKiBAbm9kZXM6IGFycmF5IG9mIHBvaW50ZXJzIHRvIGFsbCBub2RlcyB3aXRoaW4gY2x1c3RlcgorICogQGhpZ2hlc3Rfbm9kZTogaWQgb2YgaGlnaGVzdCBudW1iZXJlZCBub2RlIHdpdGhpbiBjbHVzdGVyCisgKiBAbGlua3M6IG51bWJlciBvZiAodW5pY2FzdCkgbGlua3MgdG8gY2x1c3RlcgogICovCiAKIHN0cnVjdCBuZXR3b3JrIHsKLQlzdHJ1Y3QgX3pvbmUgKip6b25lczsKKwlzdHJ1Y3QgdGlwY19ub2RlICoqbm9kZXM7CisJdTMyIGhpZ2hlc3Rfbm9kZTsKKwl1MzIgbGlua3M7CiB9OwogCiAKIGV4dGVybiBzdHJ1Y3QgbmV0d29yayB0aXBjX25ldDsKIGV4dGVybiByd2xvY2tfdCB0aXBjX25ldF9sb2NrOwogCi12b2lkIHRpcGNfbmV0X3JlbW92ZV9hc19yb3V0ZXIodTMyIHJvdXRlcik7Ci12b2lkIHRpcGNfbmV0X3NlbmRfZXh0ZXJuYWxfcm91dGVzKHUzMiBkZXN0KTsKIHZvaWQgdGlwY19uZXRfcm91dGVfbXNnKHN0cnVjdCBza19idWZmICpidWYpOwotc3RydWN0IHRpcGNfbm9kZSAqdGlwY19uZXRfc2VsZWN0X3JlbW90ZV9ub2RlKHUzMiBhZGRyLCB1MzIgcmVmKTsKLXUzMiB0aXBjX25ldF9zZWxlY3Rfcm91dGVyKHUzMiBhZGRyLCB1MzIgcmVmKTsKIAogaW50IHRpcGNfbmV0X3N0YXJ0KHUzMiBhZGRyKTsKIHZvaWQgdGlwY19uZXRfc3RvcCh2b2lkKTsKZGlmZiAtLWdpdCBhL25ldC90aXBjL25vZGUuYyBiL25ldC90aXBjL25vZGUuYwppbmRleCBiNGQ4N2ViLi4zYWY1M2UzIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9ub2RlLmMKKysrIGIvbmV0L3RpcGMvbm9kZS5jCkBAIC0zNywyNSArMzcsMTQgQEAKICNpbmNsdWRlICJjb3JlLmgiCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAibm9kZS5oIgotI2luY2x1ZGUgImNsdXN0ZXIuaCIKLSNpbmNsdWRlICJuZXQuaCIKLSNpbmNsdWRlICJhZGRyLmgiCi0jaW5jbHVkZSAibm9kZV9zdWJzY3IuaCIKLSNpbmNsdWRlICJsaW5rLmgiCi0jaW5jbHVkZSAicG9ydC5oIgotI2luY2x1ZGUgImJlYXJlci5oIgogI2luY2x1ZGUgIm5hbWVfZGlzdHIuaCIKIAotdm9pZCBub2RlX3ByaW50KHN0cnVjdCBwcmludF9idWYgKmJ1Ziwgc3RydWN0IHRpcGNfbm9kZSAqbl9wdHIsIGNoYXIgKnN0cik7CiBzdGF0aWMgdm9pZCBub2RlX2xvc3RfY29udGFjdChzdHJ1Y3QgdGlwY19ub2RlICpuX3B0cik7CiBzdGF0aWMgdm9pZCBub2RlX2VzdGFibGlzaGVkX2NvbnRhY3Qoc3RydWN0IHRpcGNfbm9kZSAqbl9wdHIpOwogCi0vKiBzb3J0ZWQgbGlzdCBvZiBub2RlcyB3aXRoaW4gY2x1c3RlciAqLwotc3RhdGljIHN0cnVjdCB0aXBjX25vZGUgKnRpcGNfbm9kZXMgPSBOVUxMOwotCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG5vZGVfY3JlYXRlX2xvY2spOwogCi11MzIgdGlwY19vd25fdGFnID0gMDsKK3UzMiB0aXBjX293bl90YWc7CiAKIC8qKgogICogdGlwY19ub2RlX2NyZWF0ZSAtIGNyZWF0ZSBuZWlnaGJvcmluZyBub2RlCkBAIC02OSw2NSArNTgsNTEgQEAKIAogc3RydWN0IHRpcGNfbm9kZSAqdGlwY19ub2RlX2NyZWF0ZSh1MzIgYWRkcikKIHsKLQlzdHJ1Y3QgY2x1c3RlciAqY19wdHI7CiAJc3RydWN0IHRpcGNfbm9kZSAqbl9wdHI7Ci0Jc3RydWN0IHRpcGNfbm9kZSAqKmN1cnJfbm9kZTsKKwl1MzIgbl9udW07CiAKIAlzcGluX2xvY2tfYmgoJm5vZGVfY3JlYXRlX2xvY2spOwogCi0JZm9yIChuX3B0ciA9IHRpcGNfbm9kZXM7IG5fcHRyOyBuX3B0ciA9IG5fcHRyLT5uZXh0KSB7Ci0JCWlmIChhZGRyIDwgbl9wdHItPmFkZHIpCi0JCQlicmVhazsKLQkJaWYgKGFkZHIgPT0gbl9wdHItPmFkZHIpIHsKLQkJCXNwaW5fdW5sb2NrX2JoKCZub2RlX2NyZWF0ZV9sb2NrKTsKLQkJCXJldHVybiBuX3B0cjsKLQkJfQorCW5fcHRyID0gdGlwY19ub2RlX2ZpbmQoYWRkcik7CisJaWYgKG5fcHRyKSB7CisJCXNwaW5fdW5sb2NrX2JoKCZub2RlX2NyZWF0ZV9sb2NrKTsKKwkJcmV0dXJuIG5fcHRyOwogCX0KIAotCW5fcHRyID0ga3phbGxvYyhzaXplb2YoKm5fcHRyKSxHRlBfQVRPTUlDKTsKKwluX3B0ciA9IGt6YWxsb2Moc2l6ZW9mKCpuX3B0ciksIEdGUF9BVE9NSUMpOwogCWlmICghbl9wdHIpIHsKIAkJc3Bpbl91bmxvY2tfYmgoJm5vZGVfY3JlYXRlX2xvY2spOwogCQl3YXJuKCJOb2RlIGNyZWF0aW9uIGZhaWxlZCwgbm8gbWVtb3J5XG4iKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0JY19wdHIgPSB0aXBjX2NsdHJfZmluZChhZGRyKTsKLQlpZiAoIWNfcHRyKSB7Ci0JCWNfcHRyID0gdGlwY19jbHRyX2NyZWF0ZShhZGRyKTsKLQl9Ci0JaWYgKCFjX3B0cikgewotCQlzcGluX3VubG9ja19iaCgmbm9kZV9jcmVhdGVfbG9jayk7Ci0JCWtmcmVlKG5fcHRyKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCiAJbl9wdHItPmFkZHIgPSBhZGRyOwotCQlzcGluX2xvY2tfaW5pdCgmbl9wdHItPmxvY2spOworCXNwaW5fbG9ja19pbml0KCZuX3B0ci0+bG9jayk7CiAJSU5JVF9MSVNUX0hFQUQoJm5fcHRyLT5uc3ViKTsKLQluX3B0ci0+b3duZXIgPSBjX3B0cjsKLQl0aXBjX2NsdHJfYXR0YWNoX25vZGUoY19wdHIsIG5fcHRyKTsKLQluX3B0ci0+bGFzdF9yb3V0ZXIgPSAtMTsKIAotCS8qIEluc2VydCBub2RlIGludG8gb3JkZXJlZCBsaXN0ICovCi0JZm9yIChjdXJyX25vZGUgPSAmdGlwY19ub2RlczsgKmN1cnJfbm9kZTsKLQkgICAgIGN1cnJfbm9kZSA9ICYoKmN1cnJfbm9kZSktPm5leHQpIHsKLQkJaWYgKGFkZHIgPCAoKmN1cnJfbm9kZSktPmFkZHIpIHsKLQkJCW5fcHRyLT5uZXh0ID0gKmN1cnJfbm9kZTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCSgqY3Vycl9ub2RlKSA9IG5fcHRyOworCW5fbnVtID0gdGlwY19ub2RlKGFkZHIpOworCXRpcGNfbmV0Lm5vZGVzW25fbnVtXSA9IG5fcHRyOworCWlmIChuX251bSA+IHRpcGNfbmV0LmhpZ2hlc3Rfbm9kZSkKKwkJdGlwY19uZXQuaGlnaGVzdF9ub2RlID0gbl9udW07CisKIAlzcGluX3VubG9ja19iaCgmbm9kZV9jcmVhdGVfbG9jayk7CiAJcmV0dXJuIG5fcHRyOwogfQogCiB2b2lkIHRpcGNfbm9kZV9kZWxldGUoc3RydWN0IHRpcGNfbm9kZSAqbl9wdHIpCiB7CisJdTMyIG5fbnVtOworCiAJaWYgKCFuX3B0cikKIAkJcmV0dXJuOwogCi0JZGJnKCJub2RlICV4IGRlbGV0ZWRcbiIsIG5fcHRyLT5hZGRyKTsKKwluX251bSA9IHRpcGNfbm9kZShuX3B0ci0+YWRkcik7CisJdGlwY19uZXQubm9kZXNbbl9udW1dID0gTlVMTDsKIAlrZnJlZShuX3B0cik7CisKKwl3aGlsZSAoIXRpcGNfbmV0Lm5vZGVzW3RpcGNfbmV0LmhpZ2hlc3Rfbm9kZV0pCisJCWlmICgtLXRpcGNfbmV0LmhpZ2hlc3Rfbm9kZSA9PSAwKQorCQkJYnJlYWs7CiB9CiAKIApAQCAtMTQ3LDcgKzEyMiw2IEBACiAJICAgICBsX3B0ci0+bmFtZSwgbF9wdHItPmJfcHRyLT5uZXRfcGxhbmUpOwogCiAJaWYgKCFhY3RpdmVbMF0pIHsKLQkJZGJnKCIgbGluayAleCBpbnRvICV4LyV4XG4iLCBsX3B0ciwgJmFjdGl2ZVswXSwgJmFjdGl2ZVsxXSk7CiAJCWFjdGl2ZVswXSA9IGFjdGl2ZVsxXSA9IGxfcHRyOwogCQlub2RlX2VzdGFibGlzaGVkX2NvbnRhY3Qobl9wdHIpOwogCQlyZXR1cm47CkBAIC0yMzYsMTQgKzIxMCw5IEBACiAJcmV0dXJuIG5fcHRyLT53b3JraW5nX2xpbmtzID4gMTsKIH0KIAotc3RhdGljIGludCB0aXBjX25vZGVfaGFzX2FjdGl2ZV9yb3V0ZXMoc3RydWN0IHRpcGNfbm9kZSAqbl9wdHIpCi17Ci0JcmV0dXJuIG5fcHRyICYmIChuX3B0ci0+bGFzdF9yb3V0ZXIgPj0gMCk7Ci19Ci0KIGludCB0aXBjX25vZGVfaXNfdXAoc3RydWN0IHRpcGNfbm9kZSAqbl9wdHIpCiB7Ci0JcmV0dXJuIHRpcGNfbm9kZV9oYXNfYWN0aXZlX2xpbmtzKG5fcHRyKSB8fCB0aXBjX25vZGVfaGFzX2FjdGl2ZV9yb3V0ZXMobl9wdHIpOworCXJldHVybiB0aXBjX25vZGVfaGFzX2FjdGl2ZV9saW5rcyhuX3B0cik7CiB9CiAKIHN0cnVjdCB0aXBjX25vZGUgKnRpcGNfbm9kZV9hdHRhY2hfbGluayhzdHJ1Y3QgbGluayAqbF9wdHIpCkBAIC0yNjQsNyArMjMzLDcgQEAKIAogCQlpZiAoIW5fcHRyLT5saW5rc1tiZWFyZXJfaWRdKSB7CiAJCQluX3B0ci0+bGlua3NbYmVhcmVyX2lkXSA9IGxfcHRyOwotCQkJdGlwY19uZXQuem9uZXNbdGlwY196b25lKGxfcHRyLT5hZGRyKV0tPmxpbmtzKys7CisJCQl0aXBjX25ldC5saW5rcysrOwogCQkJbl9wdHItPmxpbmtfY250Kys7CiAJCQlyZXR1cm4gbl9wdHI7CiAJCX0KQEAgLTI3OCw3ICsyNDcsNyBAQAogdm9pZCB0aXBjX25vZGVfZGV0YWNoX2xpbmsoc3RydWN0IHRpcGNfbm9kZSAqbl9wdHIsIHN0cnVjdCBsaW5rICpsX3B0cikKIHsKIAluX3B0ci0+bGlua3NbbF9wdHItPmJfcHRyLT5pZGVudGl0eV0gPSBOVUxMOwotCXRpcGNfbmV0LnpvbmVzW3RpcGNfem9uZShsX3B0ci0+YWRkcildLT5saW5rcy0tOworCXRpcGNfbmV0LmxpbmtzLS07CiAJbl9wdHItPmxpbmtfY250LS07CiB9CiAKQEAgLTMzMCw0OCArMjk5LDE2IEBACiAKIHN0YXRpYyB2b2lkIG5vZGVfZXN0YWJsaXNoZWRfY29udGFjdChzdHJ1Y3QgdGlwY19ub2RlICpuX3B0cikKIHsKLQlzdHJ1Y3QgY2x1c3RlciAqY19wdHI7Ci0KLQlkYmcoIm5vZGVfZXN0YWJsaXNoZWRfY29udGFjdDotPiAleFxuIiwgbl9wdHItPmFkZHIpOwotCWlmICghdGlwY19ub2RlX2hhc19hY3RpdmVfcm91dGVzKG5fcHRyKSAmJiBpbl9vd25fY2x1c3RlcihuX3B0ci0+YWRkcikpIHsKLQkJdGlwY19rX3NpZ25hbCgoSGFuZGxlcil0aXBjX25hbWVkX25vZGVfdXAsIG5fcHRyLT5hZGRyKTsKLQl9CisJdGlwY19rX3NpZ25hbCgoSGFuZGxlcil0aXBjX25hbWVkX25vZGVfdXAsIG5fcHRyLT5hZGRyKTsKIAogCS8qIFN5bmNyb25pemUgYnJvYWRjYXN0IGFja3MgKi8KIAluX3B0ci0+YmNsaW5rLmFja2VkID0gdGlwY19iY2xpbmtfZ2V0X2xhc3Rfc2VudCgpOwogCi0JaWYgKGlzX3NsYXZlKHRpcGNfb3duX2FkZHIpKQotCQlyZXR1cm47Ci0JaWYgKCFpbl9vd25fY2x1c3RlcihuX3B0ci0+YWRkcikpIHsKLQkJLyogVXNhZ2UgY2FzZSAxIChzZWUgYWJvdmUpICovCi0JCWNfcHRyID0gdGlwY19jbHRyX2ZpbmQodGlwY19vd25fYWRkcik7Ci0JCWlmICghY19wdHIpCi0JCQljX3B0ciA9IHRpcGNfY2x0cl9jcmVhdGUodGlwY19vd25fYWRkcik7Ci0JCWlmIChjX3B0cikKLQkJCXRpcGNfY2x0cl9iY2FzdF9uZXdfcm91dGUoY19wdHIsIG5fcHRyLT5hZGRyLCAxLAotCQkJCQkJICB0aXBjX21heF9ub2Rlcyk7Ci0JCXJldHVybjsKLQl9Ci0KLQljX3B0ciA9IG5fcHRyLT5vd25lcjsKLQlpZiAoaXNfc2xhdmUobl9wdHItPmFkZHIpKSB7Ci0JCS8qIFVzYWdlIGNhc2UgMiAoc2VlIGFib3ZlKSAqLwotCQl0aXBjX2NsdHJfYmNhc3RfbmV3X3JvdXRlKGNfcHRyLCBuX3B0ci0+YWRkciwgMSwgdGlwY19tYXhfbm9kZXMpOwotCQl0aXBjX2NsdHJfc2VuZF9sb2NhbF9yb3V0ZXMoY19wdHIsIG5fcHRyLT5hZGRyKTsKLQkJcmV0dXJuOwotCX0KLQogCWlmIChuX3B0ci0+YmNsaW5rLnN1cHBvcnRlZCkgewotCQl0aXBjX25tYXBfYWRkKCZ0aXBjX2NsdHJfYmNhc3Rfbm9kZXMsIG5fcHRyLT5hZGRyKTsKKwkJdGlwY19ubWFwX2FkZCgmdGlwY19iY2FzdF9ubWFwLCBuX3B0ci0+YWRkcik7CiAJCWlmIChuX3B0ci0+YWRkciA8IHRpcGNfb3duX2FkZHIpCiAJCQl0aXBjX293bl90YWcrKzsKIAl9Ci0KLQkvKiBDYXNlIDMgKHNlZSBhYm92ZSkgKi8KLQl0aXBjX25ldF9zZW5kX2V4dGVybmFsX3JvdXRlcyhuX3B0ci0+YWRkcik7Ci0JdGlwY19jbHRyX3NlbmRfc2xhdmVfcm91dGVzKGNfcHRyLCBuX3B0ci0+YWRkcik7Ci0JdGlwY19jbHRyX2JjYXN0X25ld19yb3V0ZShjX3B0ciwgbl9wdHItPmFkZHIsIExPV0VTVF9TTEFWRSwKLQkJCQkgIHRpcGNfaGlnaGVzdF9hbGxvd2VkX3NsYXZlKTsKIH0KIAogc3RhdGljIHZvaWQgbm9kZV9jbGVhbnVwX2ZpbmlzaGVkKHVuc2lnbmVkIGxvbmcgbm9kZV9hZGRyKQpAQCAtMzkwLDcgKzMyNyw2IEBACiAKIHN0YXRpYyB2b2lkIG5vZGVfbG9zdF9jb250YWN0KHN0cnVjdCB0aXBjX25vZGUgKm5fcHRyKQogewotCXN0cnVjdCBjbHVzdGVyICpjX3B0cjsKIAlzdHJ1Y3QgdGlwY19ub2RlX3N1YnNjciAqbnMsICp0bnM7CiAJY2hhciBhZGRyX3N0cmluZ1sxNl07CiAJdTMyIGk7CkBAIC0zOTgsNyArMzM0LDcgQEAKIAkvKiBDbGVhbiB1cCBicm9hZGNhc3QgcmVjZXB0aW9uIHJlbWFpbnMgKi8KIAluX3B0ci0+YmNsaW5rLmdhcF9hZnRlciA9IG5fcHRyLT5iY2xpbmsuZ2FwX3RvID0gMDsKIAl3aGlsZSAobl9wdHItPmJjbGluay5kZWZlcnJlZF9oZWFkKSB7Ci0JCXN0cnVjdCBza19idWZmKiBidWYgPSBuX3B0ci0+YmNsaW5rLmRlZmVycmVkX2hlYWQ7CisJCXN0cnVjdCBza19idWZmICpidWYgPSBuX3B0ci0+YmNsaW5rLmRlZmVycmVkX2hlYWQ7CiAJCW5fcHRyLT5iY2xpbmsuZGVmZXJyZWRfaGVhZCA9IGJ1Zi0+bmV4dDsKIAkJYnVmX2Rpc2NhcmQoYnVmKTsKIAl9CkBAIC00MDYsNDEgKzM0MiwxNCBAQAogCQlidWZfZGlzY2FyZChuX3B0ci0+YmNsaW5rLmRlZnJhZ20pOwogCQluX3B0ci0+YmNsaW5rLmRlZnJhZ20gPSBOVUxMOwogCX0KLQlpZiAoaW5fb3duX2NsdXN0ZXIobl9wdHItPmFkZHIpICYmIG5fcHRyLT5iY2xpbmsuc3VwcG9ydGVkKSB7Ci0JCXRpcGNfYmNsaW5rX2Fja25vd2xlZGdlKG5fcHRyLCBtb2Qobl9wdHItPmJjbGluay5hY2tlZCArIDEwMDAwKSk7Ci0JfQogCi0JLyogVXBkYXRlIHJvdXRpbmcgdGFibGVzICovCi0JaWYgKGlzX3NsYXZlKHRpcGNfb3duX2FkZHIpKSB7Ci0JCXRpcGNfbmV0X3JlbW92ZV9hc19yb3V0ZXIobl9wdHItPmFkZHIpOwotCX0gZWxzZSB7Ci0JCWlmICghaW5fb3duX2NsdXN0ZXIobl9wdHItPmFkZHIpKSB7Ci0JCQkvKiBDYXNlIDQgKHNlZSBhYm92ZSkgKi8KLQkJCWNfcHRyID0gdGlwY19jbHRyX2ZpbmQodGlwY19vd25fYWRkcik7Ci0JCQl0aXBjX2NsdHJfYmNhc3RfbG9zdF9yb3V0ZShjX3B0ciwgbl9wdHItPmFkZHIsIDEsCi0JCQkJCQkgICB0aXBjX21heF9ub2Rlcyk7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBDYXNlIDUgKHNlZSBhYm92ZSkgKi8KLQkJCWNfcHRyID0gdGlwY19jbHRyX2ZpbmQobl9wdHItPmFkZHIpOwotCQkJaWYgKGlzX3NsYXZlKG5fcHRyLT5hZGRyKSkgewotCQkJCXRpcGNfY2x0cl9iY2FzdF9sb3N0X3JvdXRlKGNfcHRyLCBuX3B0ci0+YWRkciwgMSwKLQkJCQkJCQkgICB0aXBjX21heF9ub2Rlcyk7Ci0JCQl9IGVsc2UgewotCQkJCWlmIChuX3B0ci0+YmNsaW5rLnN1cHBvcnRlZCkgewotCQkJCQl0aXBjX25tYXBfcmVtb3ZlKCZ0aXBjX2NsdHJfYmNhc3Rfbm9kZXMsCi0JCQkJCQkJIG5fcHRyLT5hZGRyKTsKLQkJCQkJaWYgKG5fcHRyLT5hZGRyIDwgdGlwY19vd25fYWRkcikKLQkJCQkJCXRpcGNfb3duX3RhZy0tOwotCQkJCX0KLQkJCQl0aXBjX25ldF9yZW1vdmVfYXNfcm91dGVyKG5fcHRyLT5hZGRyKTsKLQkJCQl0aXBjX2NsdHJfYmNhc3RfbG9zdF9yb3V0ZShjX3B0ciwgbl9wdHItPmFkZHIsCi0JCQkJCQkJICAgTE9XRVNUX1NMQVZFLAotCQkJCQkJCSAgIHRpcGNfaGlnaGVzdF9hbGxvd2VkX3NsYXZlKTsKLQkJCX0KLQkJfQorCWlmIChuX3B0ci0+YmNsaW5rLnN1cHBvcnRlZCkgeworCQl0aXBjX2JjbGlua19hY2tub3dsZWRnZShuX3B0ciwKKwkJCQkJbW9kKG5fcHRyLT5iY2xpbmsuYWNrZWQgKyAxMDAwMCkpOworCQl0aXBjX25tYXBfcmVtb3ZlKCZ0aXBjX2JjYXN0X25tYXAsIG5fcHRyLT5hZGRyKTsKKwkJaWYgKG5fcHRyLT5hZGRyIDwgdGlwY19vd25fYWRkcikKKwkJCXRpcGNfb3duX3RhZy0tOwogCX0KLQlpZiAodGlwY19ub2RlX2hhc19hY3RpdmVfcm91dGVzKG5fcHRyKSkKLQkJcmV0dXJuOwogCiAJaW5mbygiTG9zdCBjb250YWN0IHdpdGggJXNcbiIsCiAJICAgICB0aXBjX2FkZHJfc3RyaW5nX2ZpbGwoYWRkcl9zdHJpbmcsIG5fcHRyLT5hZGRyKSk7CkBAIC00NjksMTI1ICszNzgsNiBAQAogCXRpcGNfa19zaWduYWwoKEhhbmRsZXIpbm9kZV9jbGVhbnVwX2ZpbmlzaGVkLCBuX3B0ci0+YWRkcik7CiB9CiAKLS8qKgotICogdGlwY19ub2RlX3NlbGVjdF9uZXh0X2hvcCAtIGZpbmQgdGhlIG5leHQtaG9wIG5vZGUgZm9yIGEgbWVzc2FnZQotICoKLSAqIENhbGxlZCBieSB3aGVuIGNsdXN0ZXIgbG9jYWwgbG9va3VwIGhhcyBmYWlsZWQuCi0gKi8KLQotc3RydWN0IHRpcGNfbm9kZSAqdGlwY19ub2RlX3NlbGVjdF9uZXh0X2hvcCh1MzIgYWRkciwgdTMyIHNlbGVjdG9yKQotewotCXN0cnVjdCB0aXBjX25vZGUgKm5fcHRyOwotCXUzMiByb3V0ZXJfYWRkcjsKLQotCWlmICghdGlwY19hZGRyX2RvbWFpbl92YWxpZChhZGRyKSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQkvKiBMb29rIGZvciBkaXJlY3QgbGluayB0byBkZXN0aW5hdGlvbiBwcm9jZXNzc29yICovCi0Jbl9wdHIgPSB0aXBjX25vZGVfZmluZChhZGRyKTsKLQlpZiAobl9wdHIgJiYgdGlwY19ub2RlX2hhc19hY3RpdmVfbGlua3Mobl9wdHIpKQotCQlyZXR1cm4gbl9wdHI7Ci0KLQkvKiBDbHVzdGVyIGxvY2FsIHN5c3RlbSBub2RlcyAqbXVzdCogaGF2ZSBkaXJlY3QgbGlua3MgKi8KLQlpZiAoIWlzX3NsYXZlKGFkZHIpICYmIGluX293bl9jbHVzdGVyKGFkZHIpKQotCQlyZXR1cm4gTlVMTDsKLQotCS8qIExvb2sgZm9yIGNsdXN0ZXIgbG9jYWwgcm91dGVyIHdpdGggZGlyZWN0IGxpbmsgdG8gbm9kZSAqLwotCXJvdXRlcl9hZGRyID0gdGlwY19ub2RlX3NlbGVjdF9yb3V0ZXIobl9wdHIsIHNlbGVjdG9yKTsKLQlpZiAocm91dGVyX2FkZHIpCi0JCXJldHVybiB0aXBjX25vZGVfc2VsZWN0KHJvdXRlcl9hZGRyLCBzZWxlY3Rvcik7Ci0KLQkvKiBTbGF2ZSBub2RlcyBjYW4gb25seSBiZSBhY2Nlc3NlZCB3aXRoaW4gb3duIGNsdXN0ZXIgdmlhIGEKLQkgICBrbm93biByb3V0ZXIgd2l0aCBkaXJlY3QgbGluayAtLSBpZiBubyByb3V0ZXIgd2FzIGZvdW5kLGdpdmUgdXAgKi8KLQlpZiAoaXNfc2xhdmUoYWRkcikpCi0JCXJldHVybiBOVUxMOwotCi0JLyogSW50ZXIgem9uZS9jbHVzdGVyIC0tIGZpbmQgYW55IGRpcmVjdCBsaW5rIHRvIHJlbW90ZSBjbHVzdGVyICovCi0JYWRkciA9IHRpcGNfYWRkcih0aXBjX3pvbmUoYWRkciksIHRpcGNfY2x1c3RlcihhZGRyKSwgMCk7Ci0Jbl9wdHIgPSB0aXBjX25ldF9zZWxlY3RfcmVtb3RlX25vZGUoYWRkciwgc2VsZWN0b3IpOwotCWlmIChuX3B0ciAmJiB0aXBjX25vZGVfaGFzX2FjdGl2ZV9saW5rcyhuX3B0cikpCi0JCXJldHVybiBuX3B0cjsKLQotCS8qIExhc3QgcmVzb3J0IC0tIGxvb2sgZm9yIGFueSByb3V0ZXIgdG8gYW55d2hlcmUgaW4gcmVtb3RlIHpvbmUgKi8KLQlyb3V0ZXJfYWRkciA9ICB0aXBjX25ldF9zZWxlY3Rfcm91dGVyKGFkZHIsIHNlbGVjdG9yKTsKLQlpZiAocm91dGVyX2FkZHIpCi0JCXJldHVybiB0aXBjX25vZGVfc2VsZWN0KHJvdXRlcl9hZGRyLCBzZWxlY3Rvcik7Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLQotLyoqCi0gKiB0aXBjX25vZGVfc2VsZWN0X3JvdXRlciAtIHNlbGVjdCByb3V0ZXIgdG8gcmVhY2ggc3BlY2lmaWVkIG5vZGUKLSAqCi0gKiBVc2VzIGEgZGV0ZXJtaW5pc3RpYyBhbmQgZmFpciBhbGdvcml0aG0gZm9yIHNlbGVjdGluZyByb3V0ZXIgbm9kZS4KLSAqLwotCi11MzIgdGlwY19ub2RlX3NlbGVjdF9yb3V0ZXIoc3RydWN0IHRpcGNfbm9kZSAqbl9wdHIsIHUzMiByZWYpCi17Ci0JdTMyIHVsaW07Ci0JdTMyIG1hc2s7Ci0JdTMyIHN0YXJ0OwotCXUzMiByOwotCi0JaWYgKCFuX3B0cikKLQkJcmV0dXJuIDA7Ci0KLQlpZiAobl9wdHItPmxhc3Rfcm91dGVyIDwgMCkKLQkJcmV0dXJuIDA7Ci0JdWxpbSA9ICgobl9wdHItPmxhc3Rfcm91dGVyICsgMSkgKiAzMikgLSAxOwotCi0JLyogU3RhcnQgZW50cnkgbXVzdCBiZSByYW5kb20gKi8KLQltYXNrID0gdGlwY19tYXhfbm9kZXM7Ci0Jd2hpbGUgKG1hc2sgPiB1bGltKQotCQltYXNrID4+PSAxOwotCXN0YXJ0ID0gcmVmICYgbWFzazsKLQlyID0gc3RhcnQ7Ci0KLQkvKiBMb29rdXAgdXB3YXJkcyB3aXRoIHdyYXAtYXJvdW5kICovCi0JZG8gewotCQlpZiAoKChuX3B0ci0+cm91dGVyc1tyIC8gMzJdKSA+PiAociAlIDMyKSkgJiAxKQotCQkJYnJlYWs7Ci0JfSB3aGlsZSAoKytyIDw9IHVsaW0pOwotCWlmIChyID4gdWxpbSkgewotCQlyID0gMTsKLQkJZG8gewotCQkJaWYgKCgobl9wdHItPnJvdXRlcnNbciAvIDMyXSkgPj4gKHIgJSAzMikpICYgMSkKLQkJCQlicmVhazsKLQkJfSB3aGlsZSAoKytyIDwgc3RhcnQpOwotCQlhc3NlcnQociAhPSBzdGFydCk7Ci0JfQotCWFzc2VydChyICYmIChyIDw9IHVsaW0pKTsKLQlyZXR1cm4gdGlwY19hZGRyKG93bl96b25lKCksIG93bl9jbHVzdGVyKCksIHIpOwotfQotCi12b2lkIHRpcGNfbm9kZV9hZGRfcm91dGVyKHN0cnVjdCB0aXBjX25vZGUgKm5fcHRyLCB1MzIgcm91dGVyKQotewotCXUzMiByX251bSA9IHRpcGNfbm9kZShyb3V0ZXIpOwotCi0Jbl9wdHItPnJvdXRlcnNbcl9udW0gLyAzMl0gPQotCQkoKDEgPDwgKHJfbnVtICUgMzIpKSB8IG5fcHRyLT5yb3V0ZXJzW3JfbnVtIC8gMzJdKTsKLQluX3B0ci0+bGFzdF9yb3V0ZXIgPSB0aXBjX21heF9ub2RlcyAvIDMyOwotCXdoaWxlICgoLS1uX3B0ci0+bGFzdF9yb3V0ZXIgPj0gMCkgJiYKLQkgICAgICAgIW5fcHRyLT5yb3V0ZXJzW25fcHRyLT5sYXN0X3JvdXRlcl0pOwotfQotCi12b2lkIHRpcGNfbm9kZV9yZW1vdmVfcm91dGVyKHN0cnVjdCB0aXBjX25vZGUgKm5fcHRyLCB1MzIgcm91dGVyKQotewotCXUzMiByX251bSA9IHRpcGNfbm9kZShyb3V0ZXIpOwotCi0JaWYgKG5fcHRyLT5sYXN0X3JvdXRlciA8IDApCi0JCXJldHVybjsJCS8qIE5vIHJvdXRlcyAqLwotCi0Jbl9wdHItPnJvdXRlcnNbcl9udW0gLyAzMl0gPQotCQkoKH4oMSA8PCAocl9udW0gJSAzMikpKSAmIChuX3B0ci0+cm91dGVyc1tyX251bSAvIDMyXSkpOwotCW5fcHRyLT5sYXN0X3JvdXRlciA9IHRpcGNfbWF4X25vZGVzIC8gMzI7Ci0Jd2hpbGUgKCgtLW5fcHRyLT5sYXN0X3JvdXRlciA+PSAwKSAmJgotCSAgICAgICAhbl9wdHItPnJvdXRlcnNbbl9wdHItPmxhc3Rfcm91dGVyXSk7Ci0KLQlpZiAoIXRpcGNfbm9kZV9pc191cChuX3B0cikpCi0JCW5vZGVfbG9zdF9jb250YWN0KG5fcHRyKTsKLX0KLQogc3RydWN0IHNrX2J1ZmYgKnRpcGNfbm9kZV9nZXRfbm9kZXMoY29uc3Qgdm9pZCAqcmVxX3Rsdl9hcmVhLCBpbnQgcmVxX3Rsdl9zcGFjZSkKIHsKIAl1MzIgZG9tYWluOwpAQCAtNTk1LDYgKzM4NSw3IEBACiAJc3RydWN0IHRpcGNfbm9kZSAqbl9wdHI7CiAJc3RydWN0IHRpcGNfbm9kZV9pbmZvIG5vZGVfaW5mbzsKIAl1MzIgcGF5bG9hZF9zaXplOworCXUzMiBuX251bTsKIAogCWlmICghVExWX0NIRUNLKHJlcV90bHZfYXJlYSwgcmVxX3Rsdl9zcGFjZSwgVElQQ19UTFZfTkVUX0FERFIpKQogCQlyZXR1cm4gdGlwY19jZmdfcmVwbHlfZXJyb3Jfc3RyaW5nKFRJUENfQ0ZHX1RMVl9FUlJPUik7CkBAIC02MDUsMTUgKzM5NiwxNSBAQAogCQkJCQkJICAgIiAobmV0d29yayBhZGRyZXNzKSIpOwogCiAJcmVhZF9sb2NrX2JoKCZ0aXBjX25ldF9sb2NrKTsKLQlpZiAoIXRpcGNfbm9kZXMpIHsKKwlpZiAoIXRpcGNfbmV0Lm5vZGVzKSB7CiAJCXJlYWRfdW5sb2NrX2JoKCZ0aXBjX25ldF9sb2NrKTsKIAkJcmV0dXJuIHRpcGNfY2ZnX3JlcGx5X25vbmUoKTsKIAl9CiAKLQkvKiBGb3Igbm93LCBnZXQgc3BhY2UgZm9yIGFsbCBvdGhlciBub2RlcwotCSAgICh3aWxsIG5lZWQgdG8gbW9kaWZ5IHRoaXMgd2hlbiBzbGF2ZSBub2RlcyBhcmUgc3VwcG9ydGVkICovCisJLyogRm9yIG5vdywgZ2V0IHNwYWNlIGZvciBhbGwgb3RoZXIgbm9kZXMgKi8KIAotCXBheWxvYWRfc2l6ZSA9IFRMVl9TUEFDRShzaXplb2Yobm9kZV9pbmZvKSkgKiAodGlwY19tYXhfbm9kZXMgLSAxKTsKKwlwYXlsb2FkX3NpemUgPSBUTFZfU1BBQ0Uoc2l6ZW9mKG5vZGVfaW5mbykpICoKKwkJKHRpcGNfbmV0LmhpZ2hlc3Rfbm9kZSAtIDEpOwogCWlmIChwYXlsb2FkX3NpemUgPiAzMjc2OHUpIHsKIAkJcmVhZF91bmxvY2tfYmgoJnRpcGNfbmV0X2xvY2spOwogCQlyZXR1cm4gdGlwY19jZmdfcmVwbHlfZXJyb3Jfc3RyaW5nKFRJUENfQ0ZHX05PVF9TVVBQT1JURUQKQEAgLTYyNyw4ICs0MTgsOSBAQAogCiAJLyogQWRkIFRMVnMgZm9yIGFsbCBub2RlcyBpbiBzY29wZSAqLwogCi0JZm9yIChuX3B0ciA9IHRpcGNfbm9kZXM7IG5fcHRyOyBuX3B0ciA9IG5fcHRyLT5uZXh0KSB7Ci0JCWlmICghdGlwY19pbl9zY29wZShkb21haW4sIG5fcHRyLT5hZGRyKSkKKwlmb3IgKG5fbnVtID0gMTsgbl9udW0gPD0gdGlwY19uZXQuaGlnaGVzdF9ub2RlOyBuX251bSsrKSB7CisJCW5fcHRyID0gdGlwY19uZXQubm9kZXNbbl9udW1dOworCQlpZiAoIW5fcHRyIHx8ICF0aXBjX2luX3Njb3BlKGRvbWFpbiwgbl9wdHItPmFkZHIpKQogCQkJY29udGludWU7CiAJCW5vZGVfaW5mby5hZGRyID0gaHRvbmwobl9wdHItPmFkZHIpOwogCQlub2RlX2luZm8udXAgPSBodG9ubCh0aXBjX25vZGVfaXNfdXAobl9wdHIpKTsKQEAgLTY0Nyw2ICs0MzksNyBAQAogCXN0cnVjdCB0aXBjX25vZGUgKm5fcHRyOwogCXN0cnVjdCB0aXBjX2xpbmtfaW5mbyBsaW5rX2luZm87CiAJdTMyIHBheWxvYWRfc2l6ZTsKKwl1MzIgbl9udW07CiAKIAlpZiAoIVRMVl9DSEVDSyhyZXFfdGx2X2FyZWEsIHJlcV90bHZfc3BhY2UsIFRJUENfVExWX05FVF9BRERSKSkKIAkJcmV0dXJuIHRpcGNfY2ZnX3JlcGx5X2Vycm9yX3N0cmluZyhUSVBDX0NGR19UTFZfRVJST1IpOwpAQCAtNjYzLDggKzQ1Niw3IEBACiAKIAkvKiBHZXQgc3BhY2UgZm9yIGFsbCB1bmljYXN0IGxpbmtzICsgbXVsdGljYXN0IGxpbmsgKi8KIAotCXBheWxvYWRfc2l6ZSA9IFRMVl9TUEFDRShzaXplb2YobGlua19pbmZvKSkgKgotCQkodGlwY19uZXQuem9uZXNbdGlwY196b25lKHRpcGNfb3duX2FkZHIpXS0+bGlua3MgKyAxKTsKKwlwYXlsb2FkX3NpemUgPSBUTFZfU1BBQ0Uoc2l6ZW9mKGxpbmtfaW5mbykpICogKHRpcGNfbmV0LmxpbmtzICsgMSk7CiAJaWYgKHBheWxvYWRfc2l6ZSA+IDMyNzY4dSkgewogCQlyZWFkX3VubG9ja19iaCgmdGlwY19uZXRfbG9jayk7CiAJCXJldHVybiB0aXBjX2NmZ19yZXBseV9lcnJvcl9zdHJpbmcoVElQQ19DRkdfTk9UX1NVUFBPUlRFRApAQCAtNjg1LDEwICs0NzcsMTEgQEAKIAogCS8qIEFkZCBUTFZzIGZvciBhbnkgb3RoZXIgbGlua3MgaW4gc2NvcGUgKi8KIAotCWZvciAobl9wdHIgPSB0aXBjX25vZGVzOyBuX3B0cjsgbl9wdHIgPSBuX3B0ci0+bmV4dCkgeworCWZvciAobl9udW0gPSAxOyBuX251bSA8PSB0aXBjX25ldC5oaWdoZXN0X25vZGU7IG5fbnVtKyspIHsKIAkJdTMyIGk7CiAKLQkJaWYgKCF0aXBjX2luX3Njb3BlKGRvbWFpbiwgbl9wdHItPmFkZHIpKQorCQluX3B0ciA9IHRpcGNfbmV0Lm5vZGVzW25fbnVtXTsKKwkJaWYgKCFuX3B0ciB8fCAhdGlwY19pbl9zY29wZShkb21haW4sIG5fcHRyLT5hZGRyKSkKIAkJCWNvbnRpbnVlOwogCQl0aXBjX25vZGVfbG9jayhuX3B0cik7CiAJCWZvciAoaSA9IDA7IGkgPCBNQVhfQkVBUkVSUzsgaSsrKSB7CmRpZmYgLS1naXQgYS9uZXQvdGlwYy9ub2RlLmggYi9uZXQvdGlwYy9ub2RlLmgKaW5kZXggZmZmMzMxYi4uMjA2YThlZiAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvbm9kZS5oCisrKyBiL25ldC90aXBjL25vZGUuaApAQCAtMzksMTQgKzM5LDEzIEBACiAKICNpbmNsdWRlICJub2RlX3N1YnNjci5oIgogI2luY2x1ZGUgImFkZHIuaCIKLSNpbmNsdWRlICJjbHVzdGVyLmgiCisjaW5jbHVkZSAibmV0LmgiCiAjaW5jbHVkZSAiYmVhcmVyLmgiCiAKIC8qKgogICogc3RydWN0IHRpcGNfbm9kZSAtIFRJUEMgbm9kZSBzdHJ1Y3R1cmUKICAqIEBhZGRyOiBuZXR3b3JrIGFkZHJlc3Mgb2Ygbm9kZQogICogQGxvY2s6IHNwaW5sb2NrIGdvdmVybmluZyBhY2Nlc3MgdG8gc3RydWN0dXJlCi0gKiBAb3duZXI6IHBvaW50ZXIgdG8gY2x1c3RlciB0aGF0IG5vZGUgYmVsb25ncyB0bwogICogQG5leHQ6IHBvaW50ZXIgdG8gbmV4dCBub2RlIGluIHNvcnRlZCBsaXN0IG9mIGNsdXN0ZXIncyBub2RlcwogICogQG5zdWI6IGxpc3Qgb2YgIm5vZGUgZG93biIgc3Vic2NyaXB0aW9ucyBtb25pdG9yaW5nIG5vZGUKICAqIEBhY3RpdmVfbGlua3M6IHBvaW50ZXJzIHRvIGFjdGl2ZSBsaW5rcyB0byBub2RlCkBAIC01NSw4ICs1NCw2IEBACiAgKiBAY2xlYW51cF9yZXF1aXJlZDogbm9uLXplcm8gaWYgY2xlYW5pbmcgdXAgYWZ0ZXIgYSBwcmlvciBsb3NzIG9mIGNvbnRhY3QKICAqIEBsaW5rX2NudDogbnVtYmVyIG9mIGxpbmtzIHRvIG5vZGUKICAqIEBwZXJtaXRfY2hhbmdlb3Zlcjogbm9uLXplcm8gaWYgbm9kZSBoYXMgcmVkdW5kYW50IGxpbmtzIHRvIHRoaXMgc3lzdGVtCi0gKiBAcm91dGVyczogYml0bWFwICh1c2VkIGZvciBtdWx0aWNsdXN0ZXIgY29tbXVuaWNhdGlvbikKLSAqIEBsYXN0X3JvdXRlcjogKHVzZWQgZm9yIG11bHRpY2x1c3RlciBjb21tdW5pY2F0aW9uKQogICogQGJjbGluazogYnJvYWRjYXN0LXJlbGF0ZWQgaW5mbwogICogICAgQHN1cHBvcnRlZDogbm9uLXplcm8gaWYgbm9kZSBzdXBwb3J0cyBUSVBDIGInY2FzdCBjYXBhYmlsaXR5CiAgKiAgICBAYWNrZWQ6IHNlcXVlbmNlICMgb2YgbGFzdCBvdXRib3VuZCBiJ2Nhc3QgbWVzc2FnZSBhY2tub3dsZWRnZWQgYnkgbm9kZQpAQCAtNzIsNyArNjksNiBAQAogc3RydWN0IHRpcGNfbm9kZSB7CiAJdTMyIGFkZHI7CiAJc3BpbmxvY2tfdCBsb2NrOwotCXN0cnVjdCBjbHVzdGVyICpvd25lcjsKIAlzdHJ1Y3QgdGlwY19ub2RlICpuZXh0OwogCXN0cnVjdCBsaXN0X2hlYWQgbnN1YjsKIAlzdHJ1Y3QgbGluayAqYWN0aXZlX2xpbmtzWzJdOwpAQCAtODEsOCArNzcsNiBAQAogCWludCB3b3JraW5nX2xpbmtzOwogCWludCBjbGVhbnVwX3JlcXVpcmVkOwogCWludCBwZXJtaXRfY2hhbmdlb3ZlcjsKLQl1MzIgcm91dGVyc1s1MTIvMzJdOwotCWludCBsYXN0X3JvdXRlcjsKIAlzdHJ1Y3QgewogCQlpbnQgc3VwcG9ydGVkOwogCQl1MzIgYWNrZWQ7CkBAIC0xMDYsMzQgKzEwMCwxNyBAQAogdm9pZCB0aXBjX25vZGVfbGlua191cChzdHJ1Y3QgdGlwY19ub2RlICpuX3B0ciwgc3RydWN0IGxpbmsgKmxfcHRyKTsKIGludCB0aXBjX25vZGVfaGFzX2FjdGl2ZV9saW5rcyhzdHJ1Y3QgdGlwY19ub2RlICpuX3B0cik7CiBpbnQgdGlwY19ub2RlX2hhc19yZWR1bmRhbnRfbGlua3Moc3RydWN0IHRpcGNfbm9kZSAqbl9wdHIpOwotdTMyIHRpcGNfbm9kZV9zZWxlY3Rfcm91dGVyKHN0cnVjdCB0aXBjX25vZGUgKm5fcHRyLCB1MzIgcmVmKTsKLXN0cnVjdCB0aXBjX25vZGUgKnRpcGNfbm9kZV9zZWxlY3RfbmV4dF9ob3AodTMyIGFkZHIsIHUzMiBzZWxlY3Rvcik7CiBpbnQgdGlwY19ub2RlX2lzX3VwKHN0cnVjdCB0aXBjX25vZGUgKm5fcHRyKTsKLXZvaWQgdGlwY19ub2RlX2FkZF9yb3V0ZXIoc3RydWN0IHRpcGNfbm9kZSAqbl9wdHIsIHUzMiByb3V0ZXIpOwotdm9pZCB0aXBjX25vZGVfcmVtb3ZlX3JvdXRlcihzdHJ1Y3QgdGlwY19ub2RlICpuX3B0ciwgdTMyIHJvdXRlcik7CiBzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19ub2RlX2dldF9saW5rcyhjb25zdCB2b2lkICpyZXFfdGx2X2FyZWEsIGludCByZXFfdGx2X3NwYWNlKTsKIHN0cnVjdCBza19idWZmICp0aXBjX25vZGVfZ2V0X25vZGVzKGNvbnN0IHZvaWQgKnJlcV90bHZfYXJlYSwgaW50IHJlcV90bHZfc3BhY2UpOwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCB0aXBjX25vZGUgKnRpcGNfbm9kZV9maW5kKHUzMiBhZGRyKQogewogCWlmIChsaWtlbHkoaW5fb3duX2NsdXN0ZXIoYWRkcikpKQotCQlyZXR1cm4gdGlwY19sb2NhbF9ub2Rlc1t0aXBjX25vZGUoYWRkcildOwotCWVsc2UgaWYgKHRpcGNfYWRkcl9kb21haW5fdmFsaWQoYWRkcikpIHsKLQkJc3RydWN0IGNsdXN0ZXIgKmNfcHRyID0gdGlwY19jbHRyX2ZpbmQoYWRkcik7Ci0KLQkJaWYgKGNfcHRyKQotCQkJcmV0dXJuIGNfcHRyLT5ub2Rlc1t0aXBjX25vZGUoYWRkcildOwotCX0KKwkJcmV0dXJuIHRpcGNfbmV0Lm5vZGVzW3RpcGNfbm9kZShhZGRyKV07CiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHRpcGNfbm9kZSAqdGlwY19ub2RlX3NlbGVjdCh1MzIgYWRkciwgdTMyIHNlbGVjdG9yKQotewotCWlmIChsaWtlbHkoaW5fb3duX2NsdXN0ZXIoYWRkcikpKQotCQlyZXR1cm4gdGlwY19sb2NhbF9ub2Rlc1t0aXBjX25vZGUoYWRkcildOwotCXJldHVybiB0aXBjX25vZGVfc2VsZWN0X25leHRfaG9wKGFkZHIsIHNlbGVjdG9yKTsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIHRpcGNfbm9kZV9sb2NrKHN0cnVjdCB0aXBjX25vZGUgKm5fcHRyKQogewogCXNwaW5fbG9ja19iaCgmbl9wdHItPmxvY2spOwpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbm9kZV9zdWJzY3IuYyBiL25ldC90aXBjL25vZGVfc3Vic2NyLmMKaW5kZXggMTkxOTRkNC4uMDE4YTU1MyAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvbm9kZV9zdWJzY3IuYworKysgYi9uZXQvdGlwYy9ub2RlX3N1YnNjci5jCkBAIC0zNSwxMCArMzUsOCBAQAogICovCiAKICNpbmNsdWRlICJjb3JlLmgiCi0jaW5jbHVkZSAiZGJnLmgiCiAjaW5jbHVkZSAibm9kZV9zdWJzY3IuaCIKICNpbmNsdWRlICJub2RlLmgiCi0jaW5jbHVkZSAiYWRkci5oIgogCiAvKioKICAqIHRpcGNfbm9kZXN1Yl9zdWJzY3JpYmUgLSBjcmVhdGUgIm5vZGUgZG93biIgc3Vic2NyaXB0aW9uIGZvciBzcGVjaWZpZWQgbm9kZQpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvcG9ydC5jIGIvbmV0L3RpcGMvcG9ydC5jCmluZGV4IDgyMDkyZWEuLjA2N2JhYjIgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL3BvcnQuYworKysgYi9uZXQvdGlwYy9wb3J0LmMKQEAgLTM2LDE1ICszNiw4IEBACiAKICNpbmNsdWRlICJjb3JlLmgiCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiZGJnLmgiCiAjaW5jbHVkZSAicG9ydC5oIgotI2luY2x1ZGUgImFkZHIuaCIKLSNpbmNsdWRlICJsaW5rLmgiCi0jaW5jbHVkZSAibm9kZS5oIgogI2luY2x1ZGUgIm5hbWVfdGFibGUuaCIKLSNpbmNsdWRlICJ1c2VyX3JlZy5oIgotI2luY2x1ZGUgIm1zZy5oIgotI2luY2x1ZGUgImJjYXN0LmgiCiAKIC8qIENvbm5lY3Rpb24gbWFuYWdlbWVudDogKi8KICNkZWZpbmUgUFJPQklOR19JTlRFUlZBTCAzNjAwMDAwCS8qIFttc10gPT4gMSBoICovCkBAIC01MywxNiArNDYsMTYgQEAKIAogI2RlZmluZSBNQVhfUkVKRUNUX1NJWkUgMTAyNAogCi1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKm1zZ19xdWV1ZV9oZWFkID0gTlVMTDsKLXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqbXNnX3F1ZXVlX3RhaWwgPSBOVUxMOworc3RhdGljIHN0cnVjdCBza19idWZmICptc2dfcXVldWVfaGVhZDsKK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqbXNnX3F1ZXVlX3RhaWw7CiAKIERFRklORV9TUElOTE9DSyh0aXBjX3BvcnRfbGlzdF9sb2NrKTsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0socXVldWVfbG9jayk7CiAKIHN0YXRpYyBMSVNUX0hFQUQocG9ydHMpOwogc3RhdGljIHZvaWQgcG9ydF9oYW5kbGVfbm9kZV9kb3duKHVuc2lnbmVkIGxvbmcgcmVmKTsKLXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiogcG9ydF9idWlsZF9zZWxmX2Fib3J0X21zZyhzdHJ1Y3QgcG9ydCAqLHUzMiBlcnIpOwotc3RhdGljIHN0cnVjdCBza19idWZmKiBwb3J0X2J1aWxkX3BlZXJfYWJvcnRfbXNnKHN0cnVjdCBwb3J0ICosdTMyIGVycik7CitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnBvcnRfYnVpbGRfc2VsZl9hYm9ydF9tc2coc3RydWN0IHBvcnQgKiwgdTMyIGVycik7CitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnBvcnRfYnVpbGRfcGVlcl9hYm9ydF9tc2coc3RydWN0IHBvcnQgKiwgdTMyIGVycik7CiBzdGF0aWMgdm9pZCBwb3J0X3RpbWVvdXQodW5zaWduZWQgbG9uZyByZWYpOwogCiAKQEAgLTk0LDcgKzg3LDcgQEAKICAqIHRpcGNfbXVsdGljYXN0IC0gc2VuZCBhIG11bHRpY2FzdCBtZXNzYWdlIHRvIGxvY2FsIGFuZCByZW1vdGUgZGVzdGluYXRpb25zCiAgKi8KIAotaW50IHRpcGNfbXVsdGljYXN0KHUzMiByZWYsIHN0cnVjdCB0aXBjX25hbWVfc2VxIGNvbnN0ICpzZXEsIHUzMiBkb21haW4sCitpbnQgdGlwY19tdWx0aWNhc3QodTMyIHJlZiwgc3RydWN0IHRpcGNfbmFtZV9zZXEgY29uc3QgKnNlcSwKIAkJICAgdTMyIG51bV9zZWN0LCBzdHJ1Y3QgaW92ZWMgY29uc3QgKm1zZ19zZWN0KQogewogCXN0cnVjdCB0aXBjX21zZyAqaGRyOwpAQCAtMTM4LDkgKzEzMSw4IEBACiAJCQl9CiAJCX0KIAkJcmVzID0gdGlwY19iY2xpbmtfc2VuZF9tc2coYnVmKTsKLQkJaWYgKChyZXMgPCAwKSAmJiAoZHBvcnRzLmNvdW50ICE9IDApKSB7CisJCWlmICgocmVzIDwgMCkgJiYgKGRwb3J0cy5jb3VudCAhPSAwKSkKIAkJCWJ1Zl9kaXNjYXJkKGlidWYpOwotCQl9CiAJfSBlbHNlIHsKIAkJaWJ1ZiA9IGJ1ZjsKIAl9CkBAIC0xNjIsNyArMTU0LDcgQEAKIAogdm9pZCB0aXBjX3BvcnRfcmVjdl9tY2FzdChzdHJ1Y3Qgc2tfYnVmZiAqYnVmLCBzdHJ1Y3QgcG9ydF9saXN0ICpkcCkKIHsKLQlzdHJ1Y3QgdGlwY19tc2cqIG1zZzsKKwlzdHJ1Y3QgdGlwY19tc2cgKm1zZzsKIAlzdHJ1Y3QgcG9ydF9saXN0IGRwb3J0cyA9IHswLCBOVUxMLCB9OwogCXN0cnVjdCBwb3J0X2xpc3QgKml0ZW0gPSBkcDsKIAlpbnQgY250ID0gMDsKQEAgLTE5NSwxMyArMTg3LDExIEBACiAKIAkJCWlmIChiID09IE5VTEwpIHsKIAkJCQl3YXJuKCJVbmFibGUgdG8gZGVsaXZlciBtdWx0aWNhc3QgbWVzc2FnZShzKVxuIik7Ci0JCQkJbXNnX2RiZyhtc2csICJMT1NUOiIpOwogCQkJCWdvdG8gZXhpdDsKIAkJCX0KLQkJCWlmICgoaW5kZXggPT0gMCkgJiYgKGNudCAhPSAwKSkgeworCQkJaWYgKChpbmRleCA9PSAwKSAmJiAoY250ICE9IDApKQogCQkJCWl0ZW0gPSBpdGVtLT5uZXh0OwotCQkJfQotCQkJbXNnX3NldF9kZXN0cG9ydChidWZfbXNnKGIpLGl0ZW0tPnBvcnRzW2luZGV4XSk7CisJCQltc2dfc2V0X2Rlc3Rwb3J0KGJ1Zl9tc2coYiksIGl0ZW0tPnBvcnRzW2luZGV4XSk7CiAJCQl0aXBjX3BvcnRfcmVjdl9tc2coYik7CiAJCX0KIAl9CkBAIC0yNzcsMTAgKzI2Nyw3IEBACiAJCWJ1ZiA9IHBvcnRfYnVpbGRfcGVlcl9hYm9ydF9tc2cocF9wdHIsIFRJUENfRVJSX05PX1BPUlQpOwogCQl0aXBjX25vZGVzdWJfdW5zdWJzY3JpYmUoJnBfcHRyLT5zdWJzY3JpcHRpb24pOwogCX0KLQlpZiAocF9wdHItPnVzZXJfcG9ydCkgewotCQl0aXBjX3JlZ19yZW1vdmVfcG9ydChwX3B0ci0+dXNlcl9wb3J0KTsKLQkJa2ZyZWUocF9wdHItPnVzZXJfcG9ydCk7Ci0JfQorCWtmcmVlKHBfcHRyLT51c2VyX3BvcnQpOwogCiAJc3Bpbl9sb2NrX2JoKCZ0aXBjX3BvcnRfbGlzdF9sb2NrKTsKIAlsaXN0X2RlbCgmcF9wdHItPnBvcnRfbGlzdCk7CkBAIC0yODgsNyArMjc1LDYgQEAKIAlzcGluX3VubG9ja19iaCgmdGlwY19wb3J0X2xpc3RfbG9jayk7CiAJa190ZXJtX3RpbWVyKCZwX3B0ci0+dGltZXIpOwogCWtmcmVlKHBfcHRyKTsKLQlkYmcoIkRlbGV0ZWQgcG9ydCAldVxuIiwgcmVmKTsKIAl0aXBjX25ldF9yb3V0ZV9tc2coYnVmKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTM3NCw3ICszNjAsNiBAQAogCQltc2dfc2V0X29yaWdub2RlKG1zZywgb3JpZ25vZGUpOwogCQltc2dfc2V0X3RyYW5zcF9zZXFubyhtc2csIHNlcW5vKTsKIAkJbXNnX3NldF9tc2djbnQobXNnLCBhY2spOwotCQltc2dfZGJnKG1zZywgIlBPUlQ+U0VORD46Iik7CiAJfQogCXJldHVybiBidWY7CiB9CkBAIC0zOTIsNyArMzc3LDYgQEAKIAkJZGF0YV9zeiA9IE1BWF9SRUpFQ1RfU0laRTsKIAlpZiAobXNnX2Nvbm5lY3RlZChtc2cpICYmIChpbXAgPCBUSVBDX0NSSVRJQ0FMX0lNUE9SVEFOQ0UpKQogCQlpbXArKzsKLQltc2dfZGJnKG1zZywgInBvcnQtPnJlajogIik7CiAKIAkvKiBkaXNjYXJkIHJlamVjdGVkIG1lc3NhZ2UgaWYgaXQgc2hvdWxkbid0IGJlIHJldHVybmVkIHRvIHNlbmRlciAqLwogCWlmIChtc2dfZXJyY29kZShtc2cpIHx8IG1zZ19kZXN0X2Ryb3BwYWJsZShtc2cpKSB7CkBAIC00OTgsNyArNDgyLDcgQEAKIHN0YXRpYyB2b2lkIHBvcnRfaGFuZGxlX25vZGVfZG93bih1bnNpZ25lZCBsb25nIHJlZikKIHsKIAlzdHJ1Y3QgcG9ydCAqcF9wdHIgPSB0aXBjX3BvcnRfbG9jayhyZWYpOwotCXN0cnVjdCBza19idWZmKiBidWYgPSBOVUxMOworCXN0cnVjdCBza19idWZmICpidWYgPSBOVUxMOwogCiAJaWYgKCFwX3B0cikKIAkJcmV0dXJuOwpAQCAtNTU1LDggKzUzOSw2IEBACiAJc3RydWN0IHNrX2J1ZmYgKnJfYnVmID0gTlVMTDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqYWJvcnRfYnVmID0gTlVMTDsKIAotCW1zZ19kYmcobXNnLCAiUE9SVDxSRUNWPDoiKTsKLQogCWlmICghcF9wdHIpIHsKIAkJZXJyID0gVElQQ19FUlJfTk9fUE9SVDsKIAl9IGVsc2UgaWYgKHBfcHRyLT5wdWJsLmNvbm5lY3RlZCkgewpAQCAtNjM2LDggKzYxOCw3IEBACiAJCQl0aXBjX3ByaW50ZihidWYsICIgdmlhIHsldSwldX0iLAogCQkJCSAgICBwX3B0ci0+cHVibC5jb25uX3R5cGUsCiAJCQkJICAgIHBfcHRyLT5wdWJsLmNvbm5faW5zdGFuY2UpOwotCX0KLQllbHNlIGlmIChwX3B0ci0+cHVibC5wdWJsaXNoZWQpIHsKKwl9IGVsc2UgaWYgKHBfcHRyLT5wdWJsLnB1Ymxpc2hlZCkgewogCQl0aXBjX3ByaW50ZihidWYsICIgYm91bmQgdG8iKTsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShwdWJsLCAmcF9wdHItPnB1YmxpY2F0aW9ucywgcHBvcnRfbGlzdCkgewogCQkJaWYgKHB1YmwtPmxvd2VyID09IHB1YmwtPnVwcGVyKQpAQCAtOTQwLDEyICs5MjEsMTAgQEAKIH0KIAogLyoKLSAqIHRpcGNfY3JlYXRlcG9ydCgpOiB1c2VyIGxldmVsIGNhbGwuIFdpbGwgYWRkIHBvcnQgdG8KLSAqICAgICAgICAgICAgICAgICAgICByZWdpc3RyeSBpZiBub24temVybyB1c2VyX3JlZi4KKyAqIHRpcGNfY3JlYXRlcG9ydCgpOiB1c2VyIGxldmVsIGNhbGwuCiAgKi8KIAotaW50IHRpcGNfY3JlYXRlcG9ydCh1MzIgdXNlcl9yZWYsCi0JCSAgICB2b2lkICp1c3JfaGFuZGxlLAoraW50IHRpcGNfY3JlYXRlcG9ydCh2b2lkICp1c3JfaGFuZGxlLAogCQkgICAgdW5zaWduZWQgaW50IGltcG9ydGFuY2UsCiAJCSAgICB0aXBjX21zZ19lcnJfZXZlbnQgZXJyb3JfY2IsCiAJCSAgICB0aXBjX25hbWVkX21zZ19lcnJfZXZlbnQgbmFtZWRfZXJyb3JfY2IsCkBAIC05NzIsNyArOTUxLDYgQEAKIAl9CiAKIAlwX3B0ci0+dXNlcl9wb3J0ID0gdXBfcHRyOwotCXVwX3B0ci0+dXNlcl9yZWYgPSB1c2VyX3JlZjsKIAl1cF9wdHItPnVzcl9oYW5kbGUgPSB1c3JfaGFuZGxlOwogCXVwX3B0ci0+cmVmID0gcF9wdHItPnB1YmwucmVmOwogCXVwX3B0ci0+ZXJyX2NiID0gZXJyb3JfY2I7CkBAIC05ODIsMjAgKzk2MCwxMSBAQAogCXVwX3B0ci0+bmFtZWRfbXNnX2NiID0gbmFtZWRfbXNnX2NiOwogCXVwX3B0ci0+Y29ubl9tc2dfY2IgPSBjb25uX21zZ19jYjsKIAl1cF9wdHItPmNvbnRpbnVlX2V2ZW50X2NiID0gY29udGludWVfZXZlbnRfY2I7Ci0JSU5JVF9MSVNUX0hFQUQoJnVwX3B0ci0+dXBvcnRfbGlzdCk7Ci0JdGlwY19yZWdfYWRkX3BvcnQodXBfcHRyKTsKIAkqcG9ydHJlZiA9IHBfcHRyLT5wdWJsLnJlZjsKIAl0aXBjX3BvcnRfdW5sb2NrKHBfcHRyKTsKIAlyZXR1cm4gMDsKIH0KIAotaW50IHRpcGNfb3duaWRlbnRpdHkodTMyIHJlZiwgc3RydWN0IHRpcGNfcG9ydGlkICppZCkKLXsKLQlpZC0+cmVmID0gcmVmOwotCWlkLT5ub2RlID0gdGlwY19vd25fYWRkcjsKLQlyZXR1cm4gMDsKLX0KLQogaW50IHRpcGNfcG9ydGltcG9ydGFuY2UodTMyIHJlZiwgdW5zaWduZWQgaW50ICppbXBvcnRhbmNlKQogewogCXN0cnVjdCBwb3J0ICpwX3B0cjsKQEAgLTEwMzUsOSArMTAwNCw2IEBACiAJaWYgKCFwX3B0cikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlkYmcoInRpcGNfcHVibCAldSwgcF9wdHIgPSAleCwgY29ubiA9ICV4LCBzY29wZSA9ICV4LCAiCi0JICAgICJsb3dlciA9ICV1LCB1cHBlciA9ICV1XG4iLAotCSAgICByZWYsIHBfcHRyLCBwX3B0ci0+cHVibC5jb25uZWN0ZWQsIHNjb3BlLCBzZXEtPmxvd2VyLCBzZXEtPnVwcGVyKTsKIAlpZiAocF9wdHItPnB1YmwuY29ubmVjdGVkKQogCQlnb3RvIGV4aXQ7CiAJaWYgKHNlcS0+bG93ZXIgPiBzZXEtPnVwcGVyKQpAQCAtMTEyMywxNyArMTA4OSwxNCBAQAogCW1zZ19zZXRfb3JpZ3BvcnQobXNnLCBwX3B0ci0+cHVibC5yZWYpOwogCW1zZ19zZXRfdHJhbnNwX3NlcW5vKG1zZywgNDIpOwogCW1zZ19zZXRfdHlwZShtc2csIFRJUENfQ09OTl9NU0cpOwotCWlmICghbWF5X3JvdXRlKHBlZXItPm5vZGUpKQotCQltc2dfc2V0X2hkcl9zeihtc2csIFNIT1JUX0hfU0laRSk7Ci0JZWxzZQotCQltc2dfc2V0X2hkcl9zeihtc2csIExPTkdfSF9TSVpFKTsKKwltc2dfc2V0X2hkcl9zeihtc2csIFNIT1JUX0hfU0laRSk7CiAKIAlwX3B0ci0+cHJvYmluZ19pbnRlcnZhbCA9IFBST0JJTkdfSU5URVJWQUw7CiAJcF9wdHItPnByb2Jpbmdfc3RhdGUgPSBDT05GSVJNRUQ7CiAJcF9wdHItPnB1YmwuY29ubmVjdGVkID0gMTsKIAlrX3N0YXJ0X3RpbWVyKCZwX3B0ci0+dGltZXIsIHBfcHRyLT5wcm9iaW5nX2ludGVydmFsKTsKIAotCXRpcGNfbm9kZXN1Yl9zdWJzY3JpYmUoJnBfcHRyLT5zdWJzY3JpcHRpb24scGVlci0+bm9kZSwKKwl0aXBjX25vZGVzdWJfc3Vic2NyaWJlKCZwX3B0ci0+c3Vic2NyaXB0aW9uLCBwZWVyLT5ub2RlLAogCQkJICAodm9pZCAqKSh1bnNpZ25lZCBsb25nKXJlZiwKIAkJCSAgKG5ldF9ldl9oYW5kbGVyKXBvcnRfaGFuZGxlX25vZGVfZG93bik7CiAJcmVzID0gMDsKQEAgLTEyNzEsMTYgKzEyMzQsMTEgQEAKIH0KIAogLyoqCi0gKiB0aXBjX2ZvcndhcmQybmFtZSAtIGZvcndhcmQgbWVzc2FnZSBzZWN0aW9ucyB0byBwb3J0IG5hbWUKKyAqIHRpcGNfc2VuZDJuYW1lIC0gc2VuZCBtZXNzYWdlIHNlY3Rpb25zIHRvIHBvcnQgbmFtZQogICovCiAKLXN0YXRpYyBpbnQgdGlwY19mb3J3YXJkMm5hbWUodTMyIHJlZiwKLQkJCSAgICAgc3RydWN0IHRpcGNfbmFtZSBjb25zdCAqbmFtZSwKLQkJCSAgICAgdTMyIGRvbWFpbiwKLQkJCSAgICAgdTMyIG51bV9zZWN0LAotCQkJICAgICBzdHJ1Y3QgaW92ZWMgY29uc3QgKm1zZ19zZWN0LAotCQkJICAgICBzdHJ1Y3QgdGlwY19wb3J0aWQgY29uc3QgKm9yaWcsCi0JCQkgICAgIHVuc2lnbmVkIGludCBpbXBvcnRhbmNlKQoraW50IHRpcGNfc2VuZDJuYW1lKHUzMiByZWYsIHN0cnVjdCB0aXBjX25hbWUgY29uc3QgKm5hbWUsIHVuc2lnbmVkIGludCBkb21haW4sCisJICAgdW5zaWduZWQgaW50IG51bV9zZWN0LCBzdHJ1Y3QgaW92ZWMgY29uc3QgKm1zZ19zZWN0KQogewogCXN0cnVjdCBwb3J0ICpwX3B0cjsKIAlzdHJ1Y3QgdGlwY19tc2cgKm1zZzsKQEAgLTEyOTQsMTQgKzEyNTIsMTIgQEAKIAogCW1zZyA9ICZwX3B0ci0+cHVibC5waGRyOwogCW1zZ19zZXRfdHlwZShtc2csIFRJUENfTkFNRURfTVNHKTsKLQltc2dfc2V0X29yaWdub2RlKG1zZywgb3JpZy0+bm9kZSk7Ci0JbXNnX3NldF9vcmlncG9ydChtc2csIG9yaWctPnJlZik7CisJbXNnX3NldF9vcmlnbm9kZShtc2csIHRpcGNfb3duX2FkZHIpOworCW1zZ19zZXRfb3JpZ3BvcnQobXNnLCByZWYpOwogCW1zZ19zZXRfaGRyX3N6KG1zZywgTE9OR19IX1NJWkUpOwogCW1zZ19zZXRfbmFtZXR5cGUobXNnLCBuYW1lLT50eXBlKTsKIAltc2dfc2V0X25hbWVpbnN0KG1zZywgbmFtZS0+aW5zdGFuY2UpOwogCW1zZ19zZXRfbG9va3VwX3Njb3BlKG1zZywgdGlwY19hZGRyX3Njb3BlKGRvbWFpbikpOwotCWlmIChpbXBvcnRhbmNlIDw9IFRJUENfQ1JJVElDQUxfSU1QT1JUQU5DRSkKLQkJbXNnX3NldF9pbXBvcnRhbmNlKG1zZyxpbXBvcnRhbmNlKTsKIAlkZXN0cG9ydCA9IHRpcGNfbmFtZXRibF90cmFuc2xhdGUobmFtZS0+dHlwZSwgbmFtZS0+aW5zdGFuY2UsICZkZXN0bm9kZSk7CiAJbXNnX3NldF9kZXN0bm9kZShtc2csIGRlc3Rub2RlKTsKIAltc2dfc2V0X2Rlc3Rwb3J0KG1zZywgZGVzdHBvcnQpOwpAQCAtMTMyNSwzMyArMTI4MSwxMSBAQAogfQogCiAvKioKLSAqIHRpcGNfc2VuZDJuYW1lIC0gc2VuZCBtZXNzYWdlIHNlY3Rpb25zIHRvIHBvcnQgbmFtZQorICogdGlwY19zZW5kMnBvcnQgLSBzZW5kIG1lc3NhZ2Ugc2VjdGlvbnMgdG8gcG9ydCBpZGVudGl0eQogICovCiAKLWludCB0aXBjX3NlbmQybmFtZSh1MzIgcmVmLAotCQkgICBzdHJ1Y3QgdGlwY19uYW1lIGNvbnN0ICpuYW1lLAotCQkgICB1bnNpZ25lZCBpbnQgZG9tYWluLAotCQkgICB1bnNpZ25lZCBpbnQgbnVtX3NlY3QsCi0JCSAgIHN0cnVjdCBpb3ZlYyBjb25zdCAqbXNnX3NlY3QpCi17Ci0Jc3RydWN0IHRpcGNfcG9ydGlkIG9yaWc7Ci0KLQlvcmlnLnJlZiA9IHJlZjsKLQlvcmlnLm5vZGUgPSB0aXBjX293bl9hZGRyOwotCXJldHVybiB0aXBjX2ZvcndhcmQybmFtZShyZWYsIG5hbWUsIGRvbWFpbiwgbnVtX3NlY3QsIG1zZ19zZWN0LCAmb3JpZywKLQkJCQkgVElQQ19QT1JUX0lNUE9SVEFOQ0UpOwotfQotCi0vKioKLSAqIHRpcGNfZm9yd2FyZDJwb3J0IC0gZm9yd2FyZCBtZXNzYWdlIHNlY3Rpb25zIHRvIHBvcnQgaWRlbnRpdHkKLSAqLwotCi1zdGF0aWMgaW50IHRpcGNfZm9yd2FyZDJwb3J0KHUzMiByZWYsCi0JCQkgICAgIHN0cnVjdCB0aXBjX3BvcnRpZCBjb25zdCAqZGVzdCwKLQkJCSAgICAgdW5zaWduZWQgaW50IG51bV9zZWN0LAotCQkJICAgICBzdHJ1Y3QgaW92ZWMgY29uc3QgKm1zZ19zZWN0LAotCQkJICAgICBzdHJ1Y3QgdGlwY19wb3J0aWQgY29uc3QgKm9yaWcsCi0JCQkgICAgIHVuc2lnbmVkIGludCBpbXBvcnRhbmNlKQoraW50IHRpcGNfc2VuZDJwb3J0KHUzMiByZWYsIHN0cnVjdCB0aXBjX3BvcnRpZCBjb25zdCAqZGVzdCwKKwkgICB1bnNpZ25lZCBpbnQgbnVtX3NlY3QsIHN0cnVjdCBpb3ZlYyBjb25zdCAqbXNnX3NlY3QpCiB7CiAJc3RydWN0IHBvcnQgKnBfcHRyOwogCXN0cnVjdCB0aXBjX21zZyAqbXNnOwpAQCAtMTM2MywxMyArMTI5NywxMSBAQAogCiAJbXNnID0gJnBfcHRyLT5wdWJsLnBoZHI7CiAJbXNnX3NldF90eXBlKG1zZywgVElQQ19ESVJFQ1RfTVNHKTsKLQltc2dfc2V0X29yaWdub2RlKG1zZywgb3JpZy0+bm9kZSk7Ci0JbXNnX3NldF9vcmlncG9ydChtc2csIG9yaWctPnJlZik7CisJbXNnX3NldF9vcmlnbm9kZShtc2csIHRpcGNfb3duX2FkZHIpOworCW1zZ19zZXRfb3JpZ3BvcnQobXNnLCByZWYpOwogCW1zZ19zZXRfZGVzdG5vZGUobXNnLCBkZXN0LT5ub2RlKTsKIAltc2dfc2V0X2Rlc3Rwb3J0KG1zZywgZGVzdC0+cmVmKTsKIAltc2dfc2V0X2hkcl9zeihtc2csIERJUl9NU0dfSF9TSVpFKTsKLQlpZiAoaW1wb3J0YW5jZSA8PSBUSVBDX0NSSVRJQ0FMX0lNUE9SVEFOQ0UpCi0JCW1zZ19zZXRfaW1wb3J0YW5jZShtc2csIGltcG9ydGFuY2UpOwogCXBfcHRyLT5zZW50Kys7CiAJaWYgKGRlc3QtPm5vZGUgPT0gdGlwY19vd25fYWRkcikKIAkJcmV0dXJuIHRpcGNfcG9ydF9yZWN2X3NlY3Rpb25zKHBfcHRyLCBudW1fc2VjdCwgbXNnX3NlY3QpOwpAQCAtMTM4NCwzMSArMTMxNiwxMSBAQAogfQogCiAvKioKLSAqIHRpcGNfc2VuZDJwb3J0IC0gc2VuZCBtZXNzYWdlIHNlY3Rpb25zIHRvIHBvcnQgaWRlbnRpdHkKKyAqIHRpcGNfc2VuZF9idWYycG9ydCAtIHNlbmQgbWVzc2FnZSBidWZmZXIgdG8gcG9ydCBpZGVudGl0eQogICovCiAKLWludCB0aXBjX3NlbmQycG9ydCh1MzIgcmVmLAotCQkgICBzdHJ1Y3QgdGlwY19wb3J0aWQgY29uc3QgKmRlc3QsCi0JCSAgIHVuc2lnbmVkIGludCBudW1fc2VjdCwKLQkJICAgc3RydWN0IGlvdmVjIGNvbnN0ICptc2dfc2VjdCkKLXsKLQlzdHJ1Y3QgdGlwY19wb3J0aWQgb3JpZzsKLQotCW9yaWcucmVmID0gcmVmOwotCW9yaWcubm9kZSA9IHRpcGNfb3duX2FkZHI7Ci0JcmV0dXJuIHRpcGNfZm9yd2FyZDJwb3J0KHJlZiwgZGVzdCwgbnVtX3NlY3QsIG1zZ19zZWN0LCAmb3JpZywKLQkJCQkgVElQQ19QT1JUX0lNUE9SVEFOQ0UpOwotfQotCi0vKioKLSAqIHRpcGNfZm9yd2FyZF9idWYycG9ydCAtIGZvcndhcmQgbWVzc2FnZSBidWZmZXIgdG8gcG9ydCBpZGVudGl0eQotICovCi1zdGF0aWMgaW50IHRpcGNfZm9yd2FyZF9idWYycG9ydCh1MzIgcmVmLAotCQkJCSBzdHJ1Y3QgdGlwY19wb3J0aWQgY29uc3QgKmRlc3QsCi0JCQkJIHN0cnVjdCBza19idWZmICpidWYsCi0JCQkJIHVuc2lnbmVkIGludCBkc3osCi0JCQkJIHN0cnVjdCB0aXBjX3BvcnRpZCBjb25zdCAqb3JpZywKLQkJCQkgdW5zaWduZWQgaW50IGltcG9ydGFuY2UpCitpbnQgdGlwY19zZW5kX2J1ZjJwb3J0KHUzMiByZWYsIHN0cnVjdCB0aXBjX3BvcnRpZCBjb25zdCAqZGVzdCwKKwkgICAgICAgc3RydWN0IHNrX2J1ZmYgKmJ1ZiwgdW5zaWduZWQgaW50IGRzeikKIHsKIAlzdHJ1Y3QgcG9ydCAqcF9wdHI7CiAJc3RydWN0IHRpcGNfbXNnICptc2c7CkBAIC0xNDIwLDIwICsxMzMyLDE3IEBACiAKIAltc2cgPSAmcF9wdHItPnB1YmwucGhkcjsKIAltc2dfc2V0X3R5cGUobXNnLCBUSVBDX0RJUkVDVF9NU0cpOwotCW1zZ19zZXRfb3JpZ25vZGUobXNnLCBvcmlnLT5ub2RlKTsKLQltc2dfc2V0X29yaWdwb3J0KG1zZywgb3JpZy0+cmVmKTsKKwltc2dfc2V0X29yaWdub2RlKG1zZywgdGlwY19vd25fYWRkcik7CisJbXNnX3NldF9vcmlncG9ydChtc2csIHJlZik7CiAJbXNnX3NldF9kZXN0bm9kZShtc2csIGRlc3QtPm5vZGUpOwogCW1zZ19zZXRfZGVzdHBvcnQobXNnLCBkZXN0LT5yZWYpOwogCW1zZ19zZXRfaGRyX3N6KG1zZywgRElSX01TR19IX1NJWkUpOwotCWlmIChpbXBvcnRhbmNlIDw9IFRJUENfQ1JJVElDQUxfSU1QT1JUQU5DRSkKLQkJbXNnX3NldF9pbXBvcnRhbmNlKG1zZywgaW1wb3J0YW5jZSk7CiAJbXNnX3NldF9zaXplKG1zZywgRElSX01TR19IX1NJWkUgKyBkc3opOwogCWlmIChza2JfY293KGJ1ZiwgRElSX01TR19IX1NJWkUpKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCXNrYl9wdXNoKGJ1ZiwgRElSX01TR19IX1NJWkUpOwogCXNrYl9jb3B5X3RvX2xpbmVhcl9kYXRhKGJ1ZiwgbXNnLCBESVJfTVNHX0hfU0laRSk7Ci0JbXNnX2RiZyhtc2csICJidWYycG9ydDogIik7CiAJcF9wdHItPnNlbnQrKzsKIAlpZiAoZGVzdC0+bm9kZSA9PSB0aXBjX293bl9hZGRyKQogCQlyZXR1cm4gdGlwY19wb3J0X3JlY3ZfbXNnKGJ1Zik7CkBAIC0xNDQ1LDIwICsxMzU0LDMgQEAKIAlyZXR1cm4gLUVMSU5LQ09ORzsKIH0KIAotLyoqCi0gKiB0aXBjX3NlbmRfYnVmMnBvcnQgLSBzZW5kIG1lc3NhZ2UgYnVmZmVyIHRvIHBvcnQgaWRlbnRpdHkKLSAqLwotCi1pbnQgdGlwY19zZW5kX2J1ZjJwb3J0KHUzMiByZWYsCi0JCSAgICAgICBzdHJ1Y3QgdGlwY19wb3J0aWQgY29uc3QgKmRlc3QsCi0JCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqYnVmLAotCQkgICAgICAgdW5zaWduZWQgaW50IGRzeikKLXsKLQlzdHJ1Y3QgdGlwY19wb3J0aWQgb3JpZzsKLQotCW9yaWcucmVmID0gcmVmOwotCW9yaWcubm9kZSA9IHRpcGNfb3duX2FkZHI7Ci0JcmV0dXJuIHRpcGNfZm9yd2FyZF9idWYycG9ydChyZWYsIGRlc3QsIGJ1ZiwgZHN6LCAmb3JpZywKLQkJCQkgICAgIFRJUENfUE9SVF9JTVBPUlRBTkNFKTsKLX0KLQpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvcG9ydC5oIGIvbmV0L3RpcGMvcG9ydC5oCmluZGV4IDczYmJmNDQuLjhlODRiOTggMTAwNjQ0Ci0tLSBhL25ldC90aXBjL3BvcnQuaAorKysgYi9uZXQvdGlwYy9wb3J0LmgKQEAgLTM3LDI0ICszNyw1MiBAQAogI2lmbmRlZiBfVElQQ19QT1JUX0gKICNkZWZpbmUgX1RJUENfUE9SVF9ICiAKLSNpbmNsdWRlICJjb3JlLmgiCiAjaW5jbHVkZSAicmVmLmgiCiAjaW5jbHVkZSAibmV0LmgiCiAjaW5jbHVkZSAibXNnLmgiCi0jaW5jbHVkZSAiZGJnLmgiCiAjaW5jbHVkZSAibm9kZV9zdWJzY3IuaCIKIAorI2RlZmluZSBUSVBDX0ZMT1dfQ09OVFJPTF9XSU4gNTEyCisKK3R5cGVkZWYgdm9pZCAoKnRpcGNfbXNnX2Vycl9ldmVudCkgKHZvaWQgKnVzcl9oYW5kbGUsIHUzMiBwb3J0cmVmLAorCQlzdHJ1Y3Qgc2tfYnVmZiAqKmJ1ZiwgdW5zaWduZWQgY2hhciBjb25zdCAqZGF0YSwKKwkJdW5zaWduZWQgaW50IHNpemUsIGludCByZWFzb24sCisJCXN0cnVjdCB0aXBjX3BvcnRpZCBjb25zdCAqYXR0bXB0X2Rlc3RpZCk7CisKK3R5cGVkZWYgdm9pZCAoKnRpcGNfbmFtZWRfbXNnX2Vycl9ldmVudCkgKHZvaWQgKnVzcl9oYW5kbGUsIHUzMiBwb3J0cmVmLAorCQlzdHJ1Y3Qgc2tfYnVmZiAqKmJ1ZiwgdW5zaWduZWQgY2hhciBjb25zdCAqZGF0YSwKKwkJdW5zaWduZWQgaW50IHNpemUsIGludCByZWFzb24sCisJCXN0cnVjdCB0aXBjX25hbWVfc2VxIGNvbnN0ICphdHRtcHRfZGVzdCk7CisKK3R5cGVkZWYgdm9pZCAoKnRpcGNfY29ubl9zaHV0ZG93bl9ldmVudCkgKHZvaWQgKnVzcl9oYW5kbGUsIHUzMiBwb3J0cmVmLAorCQlzdHJ1Y3Qgc2tfYnVmZiAqKmJ1ZiwgdW5zaWduZWQgY2hhciBjb25zdCAqZGF0YSwKKwkJdW5zaWduZWQgaW50IHNpemUsIGludCByZWFzb24pOworCit0eXBlZGVmIHZvaWQgKCp0aXBjX21zZ19ldmVudCkgKHZvaWQgKnVzcl9oYW5kbGUsIHUzMiBwb3J0cmVmLAorCQlzdHJ1Y3Qgc2tfYnVmZiAqKmJ1ZiwgdW5zaWduZWQgY2hhciBjb25zdCAqZGF0YSwKKwkJdW5zaWduZWQgaW50IHNpemUsIHVuc2lnbmVkIGludCBpbXBvcnRhbmNlLAorCQlzdHJ1Y3QgdGlwY19wb3J0aWQgY29uc3QgKm9yaWdpbik7CisKK3R5cGVkZWYgdm9pZCAoKnRpcGNfbmFtZWRfbXNnX2V2ZW50KSAodm9pZCAqdXNyX2hhbmRsZSwgdTMyIHBvcnRyZWYsCisJCXN0cnVjdCBza19idWZmICoqYnVmLCB1bnNpZ25lZCBjaGFyIGNvbnN0ICpkYXRhLAorCQl1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IGltcG9ydGFuY2UsCisJCXN0cnVjdCB0aXBjX3BvcnRpZCBjb25zdCAqb3JpZywKKwkJc3RydWN0IHRpcGNfbmFtZV9zZXEgY29uc3QgKmRlc3QpOworCit0eXBlZGVmIHZvaWQgKCp0aXBjX2Nvbm5fbXNnX2V2ZW50KSAodm9pZCAqdXNyX2hhbmRsZSwgdTMyIHBvcnRyZWYsCisJCXN0cnVjdCBza19idWZmICoqYnVmLCB1bnNpZ25lZCBjaGFyIGNvbnN0ICpkYXRhLAorCQl1bnNpZ25lZCBpbnQgc2l6ZSk7CisKK3R5cGVkZWYgdm9pZCAoKnRpcGNfY29udGludWVfZXZlbnQpICh2b2lkICp1c3JfaGFuZGxlLCB1MzIgcG9ydHJlZik7CisKIC8qKgogICogc3RydWN0IHVzZXJfcG9ydCAtIFRJUEMgdXNlciBwb3J0ICh1c2VkIHdpdGggbmF0aXZlIEFQSSkKLSAqIEB1c2VyX3JlZjogaWQgb2YgdXNlciB3aG8gY3JlYXRlZCB1c2VyIHBvcnQKICAqIEB1c3JfaGFuZGxlOiB1c2VyLXNwZWNpZmllZCBmaWVsZAogICogQHJlZjogb2JqZWN0IHJlZmVyZW5jZSB0byBhc3NvY2lhdGVkIFRJUEMgcG9ydAogICogPHZhcmlvdXMgY2FsbGJhY2sgcm91dGluZXM+Ci0gKiBAdXBvcnRfbGlzdDogYWRqYWNlbnQgdXNlciBwb3J0cyBpbiBsaXN0IG9mIHBvcnRzIGhlbGQgYnkgdXNlcgogICovCiAKIHN0cnVjdCB1c2VyX3BvcnQgewotCXUzMiB1c2VyX3JlZjsKIAl2b2lkICp1c3JfaGFuZGxlOwogCXUzMiByZWY7CiAJdGlwY19tc2dfZXJyX2V2ZW50IGVycl9jYjsKQEAgLTY0LDcgKzkyLDM0IEBACiAJdGlwY19uYW1lZF9tc2dfZXZlbnQgbmFtZWRfbXNnX2NiOwogCXRpcGNfY29ubl9tc2dfZXZlbnQgY29ubl9tc2dfY2I7CiAJdGlwY19jb250aW51ZV9ldmVudCBjb250aW51ZV9ldmVudF9jYjsKLQlzdHJ1Y3QgbGlzdF9oZWFkIHVwb3J0X2xpc3Q7Cit9OworCisvKioKKyAqIHN0cnVjdCB0aXBjX3BvcnQgLSBUSVBDIHBvcnQgaW5mbyBhdmFpbGFibGUgdG8gc29ja2V0IEFQSQorICogQHVzcl9oYW5kbGU6IHBvaW50ZXIgdG8gYWRkaXRpb25hbCB1c2VyLWRlZmluZWQgaW5mb3JtYXRpb24gYWJvdXQgcG9ydAorICogQGxvY2s6IHBvaW50ZXIgdG8gc3BpbmxvY2sgZm9yIGNvbnRyb2xsaW5nIGFjY2VzcyB0byBwb3J0CisgKiBAY29ubmVjdGVkOiBub24temVybyBpZiBwb3J0IGlzIGN1cnJlbnRseSBjb25uZWN0ZWQgdG8gYSBwZWVyIHBvcnQKKyAqIEBjb25uX3R5cGU6IFRJUEMgdHlwZSB1c2VkIHdoZW4gY29ubmVjdGlvbiB3YXMgZXN0YWJsaXNoZWQKKyAqIEBjb25uX2luc3RhbmNlOiBUSVBDIGluc3RhbmNlIHVzZWQgd2hlbiBjb25uZWN0aW9uIHdhcyBlc3RhYmxpc2hlZAorICogQGNvbm5fdW5hY2tlZDogbnVtYmVyIG9mIHVuYWNrbm93bGVkZ2VkIG1lc3NhZ2VzIHJlY2VpdmVkIGZyb20gcGVlciBwb3J0CisgKiBAcHVibGlzaGVkOiBub24temVybyBpZiBwb3J0IGhhcyBvbmUgb3IgbW9yZSBhc3NvY2lhdGVkIG5hbWVzCisgKiBAY29uZ2VzdGVkOiBub24temVybyBpZiBjYW5ub3Qgc2VuZCBiZWNhdXNlIG9mIGxpbmsgb3IgcG9ydCBjb25nZXN0aW9uCisgKiBAbWF4X3BrdDogbWF4aW11bSBwYWNrZXQgc2l6ZSAiaGludCIgdXNlZCB3aGVuIGJ1aWxkaW5nIG1lc3NhZ2VzIHNlbnQgYnkgcG9ydAorICogQHJlZjogdW5pcXVlIHJlZmVyZW5jZSB0byBwb3J0IGluIFRJUEMgb2JqZWN0IHJlZ2lzdHJ5CisgKiBAcGhkcjogcHJlZm9ybWF0dGVkIG1lc3NhZ2UgaGVhZGVyIHVzZWQgd2hlbiBzZW5kaW5nIG1lc3NhZ2VzCisgKi8KK3N0cnVjdCB0aXBjX3BvcnQgeworCXZvaWQgKnVzcl9oYW5kbGU7CisJc3BpbmxvY2tfdCAqbG9jazsKKwlpbnQgY29ubmVjdGVkOworCXUzMiBjb25uX3R5cGU7CisJdTMyIGNvbm5faW5zdGFuY2U7CisJdTMyIGNvbm5fdW5hY2tlZDsKKwlpbnQgcHVibGlzaGVkOworCXUzMiBjb25nZXN0ZWQ7CisJdTMyIG1heF9wa3Q7CisJdTMyIHJlZjsKKwlzdHJ1Y3QgdGlwY19tc2cgcGhkcjsKIH07CiAKIC8qKgpAQCAtMTA5LDExICsxNjQsNzYgQEAKIGV4dGVybiBzcGlubG9ja190IHRpcGNfcG9ydF9saXN0X2xvY2s7CiBzdHJ1Y3QgcG9ydF9saXN0OwogCisvKgorICogVElQQyBwb3J0IG1hbmlwdWxhdGlvbiByb3V0aW5lcworICovCitzdHJ1Y3QgdGlwY19wb3J0ICp0aXBjX2NyZWF0ZXBvcnRfcmF3KHZvaWQgKnVzcl9oYW5kbGUsCisJCXUzMiAoKmRpc3BhdGNoZXIpKHN0cnVjdCB0aXBjX3BvcnQgKiwgc3RydWN0IHNrX2J1ZmYgKiksCisJCXZvaWQgKCp3YWtldXApKHN0cnVjdCB0aXBjX3BvcnQgKiksIGNvbnN0IHUzMiBpbXBvcnRhbmNlKTsKKworaW50IHRpcGNfcmVqZWN0X21zZyhzdHJ1Y3Qgc2tfYnVmZiAqYnVmLCB1MzIgZXJyKTsKKworaW50IHRpcGNfc2VuZF9idWZfZmFzdChzdHJ1Y3Qgc2tfYnVmZiAqYnVmLCB1MzIgZGVzdG5vZGUpOworCit2b2lkIHRpcGNfYWNrbm93bGVkZ2UodTMyIHBvcnRfcmVmLCB1MzIgYWNrKTsKKworaW50IHRpcGNfY3JlYXRlcG9ydCh2b2lkICp1c3JfaGFuZGxlLAorCQl1bnNpZ25lZCBpbnQgaW1wb3J0YW5jZSwgdGlwY19tc2dfZXJyX2V2ZW50IGVycm9yX2NiLAorCQl0aXBjX25hbWVkX21zZ19lcnJfZXZlbnQgbmFtZWRfZXJyb3JfY2IsCisJCXRpcGNfY29ubl9zaHV0ZG93bl9ldmVudCBjb25uX2Vycm9yX2NiLCB0aXBjX21zZ19ldmVudCBtc2dfY2IsCisJCXRpcGNfbmFtZWRfbXNnX2V2ZW50IG5hbWVkX21zZ19jYiwKKwkJdGlwY19jb25uX21zZ19ldmVudCBjb25uX21zZ19jYiwKKwkJdGlwY19jb250aW51ZV9ldmVudCBjb250aW51ZV9ldmVudF9jYiwgdTMyICpwb3J0cmVmKTsKKworaW50IHRpcGNfZGVsZXRlcG9ydCh1MzIgcG9ydHJlZik7CisKK2ludCB0aXBjX3BvcnRpbXBvcnRhbmNlKHUzMiBwb3J0cmVmLCB1bnNpZ25lZCBpbnQgKmltcG9ydGFuY2UpOworaW50IHRpcGNfc2V0X3BvcnRpbXBvcnRhbmNlKHUzMiBwb3J0cmVmLCB1bnNpZ25lZCBpbnQgaW1wb3J0YW5jZSk7CisKK2ludCB0aXBjX3BvcnR1bnJlbGlhYmxlKHUzMiBwb3J0cmVmLCB1bnNpZ25lZCBpbnQgKmlzdW5yZWxpYWJsZSk7CitpbnQgdGlwY19zZXRfcG9ydHVucmVsaWFibGUodTMyIHBvcnRyZWYsIHVuc2lnbmVkIGludCBpc3VucmVsaWFibGUpOworCitpbnQgdGlwY19wb3J0dW5yZXR1cm5hYmxlKHUzMiBwb3J0cmVmLCB1bnNpZ25lZCBpbnQgKmlzdW5yZXR1cm5hYmxlKTsKK2ludCB0aXBjX3NldF9wb3J0dW5yZXR1cm5hYmxlKHUzMiBwb3J0cmVmLCB1bnNpZ25lZCBpbnQgaXN1bnJldHVybmFibGUpOworCitpbnQgdGlwY19wdWJsaXNoKHUzMiBwb3J0cmVmLCB1bnNpZ25lZCBpbnQgc2NvcGUsCisJCXN0cnVjdCB0aXBjX25hbWVfc2VxIGNvbnN0ICpuYW1lX3NlcSk7CitpbnQgdGlwY193aXRoZHJhdyh1MzIgcG9ydHJlZiwgdW5zaWduZWQgaW50IHNjb3BlLAorCQlzdHJ1Y3QgdGlwY19uYW1lX3NlcSBjb25zdCAqbmFtZV9zZXEpOworCitpbnQgdGlwY19jb25uZWN0MnBvcnQodTMyIHBvcnRyZWYsIHN0cnVjdCB0aXBjX3BvcnRpZCBjb25zdCAqcG9ydCk7CisKK2ludCB0aXBjX2Rpc2Nvbm5lY3QodTMyIHBvcnRyZWYpOworCitpbnQgdGlwY19zaHV0ZG93bih1MzIgcmVmKTsKKworCisvKgorICogVGhlIGZvbGxvd2luZyByb3V0aW5lcyByZXF1aXJlIHRoYXQgdGhlIHBvcnQgYmUgbG9ja2VkIG9uIGVudHJ5CisgKi8KK2ludCB0aXBjX2Rpc2Nvbm5lY3RfcG9ydChzdHJ1Y3QgdGlwY19wb3J0ICp0cF9wdHIpOworCisvKgorICogVElQQyBtZXNzYWdpbmcgcm91dGluZXMKKyAqLworaW50IHRpcGNfc2VuZCh1MzIgcG9ydHJlZiwgdW5zaWduZWQgaW50IG51bV9zZWN0LCBzdHJ1Y3QgaW92ZWMgY29uc3QgKm1zZ19zZWN0KTsKKworaW50IHRpcGNfc2VuZDJuYW1lKHUzMiBwb3J0cmVmLCBzdHJ1Y3QgdGlwY19uYW1lIGNvbnN0ICpuYW1lLCB1MzIgZG9tYWluLAorCQl1bnNpZ25lZCBpbnQgbnVtX3NlY3QsIHN0cnVjdCBpb3ZlYyBjb25zdCAqbXNnX3NlY3QpOworCitpbnQgdGlwY19zZW5kMnBvcnQodTMyIHBvcnRyZWYsIHN0cnVjdCB0aXBjX3BvcnRpZCBjb25zdCAqZGVzdCwKKwkJdW5zaWduZWQgaW50IG51bV9zZWN0LCBzdHJ1Y3QgaW92ZWMgY29uc3QgKm1zZ19zZWN0KTsKKworaW50IHRpcGNfc2VuZF9idWYycG9ydCh1MzIgcG9ydHJlZiwgc3RydWN0IHRpcGNfcG9ydGlkIGNvbnN0ICpkZXN0LAorCQlzdHJ1Y3Qgc2tfYnVmZiAqYnVmLCB1bnNpZ25lZCBpbnQgZHN6KTsKKworaW50IHRpcGNfbXVsdGljYXN0KHUzMiBwb3J0cmVmLCBzdHJ1Y3QgdGlwY19uYW1lX3NlcSBjb25zdCAqc2VxLAorCQl1bnNpZ25lZCBpbnQgc2VjdGlvbl9jb3VudCwgc3RydWN0IGlvdmVjIGNvbnN0ICptc2cpOworCiBpbnQgdGlwY19wb3J0X3JlamVjdF9zZWN0aW9ucyhzdHJ1Y3QgcG9ydCAqcF9wdHIsIHN0cnVjdCB0aXBjX21zZyAqaGRyLAogCQkJICAgICAgc3RydWN0IGlvdmVjIGNvbnN0ICptc2dfc2VjdCwgdTMyIG51bV9zZWN0LAogCQkJICAgICAgaW50IGVycik7CiBzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19wb3J0X2dldF9wb3J0cyh2b2lkKTsKLXN0cnVjdCBza19idWZmICpwb3J0X3Nob3dfc3RhdHMoY29uc3Qgdm9pZCAqcmVxX3Rsdl9hcmVhLCBpbnQgcmVxX3Rsdl9zcGFjZSk7CiB2b2lkIHRpcGNfcG9ydF9yZWN2X3Byb3RvX21zZyhzdHJ1Y3Qgc2tfYnVmZiAqYnVmKTsKIHZvaWQgdGlwY19wb3J0X3JlY3ZfbWNhc3Qoc3RydWN0IHNrX2J1ZmYgKmJ1Ziwgc3RydWN0IHBvcnRfbGlzdCAqZHApOwogdm9pZCB0aXBjX3BvcnRfcmVpbml0KHZvaWQpOwpAQCAtMTM4LDcgKzI1OCw3IEBACiAJc3Bpbl91bmxvY2tfYmgocF9wdHItPnB1YmwubG9jayk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHBvcnQqIHRpcGNfcG9ydF9kZXJlZih1MzIgcmVmKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgcG9ydCAqdGlwY19wb3J0X2RlcmVmKHUzMiByZWYpCiB7CiAJcmV0dXJuIChzdHJ1Y3QgcG9ydCAqKXRpcGNfcmVmX2RlcmVmKHJlZik7CiB9CkBAIC0xOTYsNyArMzE2LDYgQEAKIAkJZXJyID0gVElQQ19FUlJfTk9fUE9SVDsKIAl9CiByZWplY3Q6Ci0JZGJnKCJwb3J0LT5yZWplY3RpbmcsIGVyciA9ICV4Li5cbiIsZXJyKTsKIAlyZXR1cm4gdGlwY19yZWplY3RfbXNnKGJ1ZiwgZXJyKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvcmVmLmMgYi9uZXQvdGlwYy9yZWYuYwppbmRleCBhYjhhZDMyZC4uODMxMTY4OSAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvcmVmLmMKKysrIGIvbmV0L3RpcGMvcmVmLmMKQEAgLTg5LDcgKzg5LDcgQEAKICAqIGhhdmUgYSByZWZlcmVuY2UgdmFsdWUgb2YgMCAoYWx0aG91Z2ggdGhpcyBpcyB1bmxpa2VseSkuCiAgKi8KIAotc3RhdGljIHN0cnVjdCByZWZfdGFibGUgdGlwY19yZWZfdGFibGUgPSB7IE5VTEwgfTsKK3N0YXRpYyBzdHJ1Y3QgcmVmX3RhYmxlIHRpcGNfcmVmX3RhYmxlOwogCiBzdGF0aWMgREVGSU5FX1JXTE9DSyhyZWZfdGFibGVfbG9jayk7CiAKQEAgLTE3OCwxNCArMTc4LDEyIEBACiAJCW5leHRfcGx1c191cHBlciA9IGVudHJ5LT5yZWY7CiAJCXRpcGNfcmVmX3RhYmxlLmZpcnN0X2ZyZWUgPSBuZXh0X3BsdXNfdXBwZXIgJiBpbmRleF9tYXNrOwogCQlyZWYgPSAobmV4dF9wbHVzX3VwcGVyICYgfmluZGV4X21hc2spICsgaW5kZXg7Ci0JfQotCWVsc2UgaWYgKHRpcGNfcmVmX3RhYmxlLmluaXRfcG9pbnQgPCB0aXBjX3JlZl90YWJsZS5jYXBhY2l0eSkgeworCX0gZWxzZSBpZiAodGlwY19yZWZfdGFibGUuaW5pdF9wb2ludCA8IHRpcGNfcmVmX3RhYmxlLmNhcGFjaXR5KSB7CiAJCWluZGV4ID0gdGlwY19yZWZfdGFibGUuaW5pdF9wb2ludCsrOwogCQllbnRyeSA9ICYodGlwY19yZWZfdGFibGUuZW50cmllc1tpbmRleF0pOwogCQlzcGluX2xvY2tfaW5pdCgmZW50cnktPmxvY2spOwogCQlyZWYgPSB0aXBjX3JlZl90YWJsZS5zdGFydF9tYXNrICsgaW5kZXg7Ci0JfQotCWVsc2UgeworCX0gZWxzZSB7CiAJCXJlZiA9IDA7CiAJfQogCXdyaXRlX3VubG9ja19iaCgmcmVmX3RhYmxlX2xvY2spOwpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvc29ja2V0LmMgYi9uZXQvdGlwYy9zb2NrZXQuYwppbmRleCBlOWYwZDUwLi4yYjAyYTNhIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9zb2NrZXQuYworKysgYi9uZXQvdGlwYy9zb2NrZXQuYwpAQCAtMzQsMjUgKzM0LDEzIEBACiAgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9uZXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvcG9sbC5oPgotI2luY2x1ZGUgPGxpbnV4L2ZjbnRsLmg+Ci0jaW5jbHVkZSA8bGludXgvZ2ZwLmg+Ci0jaW5jbHVkZSA8YXNtL3N0cmluZy5oPgotI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxuZXQvc29jay5oPgogCiAjaW5jbHVkZSA8bGludXgvdGlwYy5oPgogI2luY2x1ZGUgPGxpbnV4L3RpcGNfY29uZmlnLmg+Ci0jaW5jbHVkZSA8bmV0L3RpcGMvdGlwY19tc2cuaD4KLSNpbmNsdWRlIDxuZXQvdGlwYy90aXBjX3BvcnQuaD4KIAogI2luY2x1ZGUgImNvcmUuaCIKKyNpbmNsdWRlICJwb3J0LmgiCiAKICNkZWZpbmUgU1NfTElTVEVOSU5HCS0xCS8qIHNvY2tldCBpcyBsaXN0ZW5pbmcgKi8KICNkZWZpbmUgU1NfUkVBRFkJLTIJLyogc29ja2V0IGlzIGNvbm5lY3Rpb25sZXNzICovCkBAIC04MCw3ICs2OCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcHJvdG8gdGlwY19wcm90bzsKIAotc3RhdGljIGludCBzb2NrZXRzX2VuYWJsZWQgPSAwOworc3RhdGljIGludCBzb2NrZXRzX2VuYWJsZWQ7CiAKIHN0YXRpYyBhdG9taWNfdCB0aXBjX3F1ZXVlX3NpemUgPSBBVE9NSUNfSU5JVCgwKTsKIApAQCAtMzg3LDcgKzM3NSw3IEBACiAgKgogICogTk9URTogVGhpcyByb3V0aW5lIGRvZXNuJ3QgbmVlZCB0byB0YWtlIHRoZSBzb2NrZXQgbG9jayBzaW5jZSBpdCBvbmx5CiAgKiAgICAgICBhY2Nlc3NlcyBzb2NrZXQgaW5mb3JtYXRpb24gdGhhdCBpcyB1bmNoYW5naW5nIChvciB3aGljaCBjaGFuZ2VzIGluCi0gKiAJIGEgY29tcGxldGVseSBwcmVkaWN0YWJsZSBtYW5uZXIpLgorICogICAgICAgYSBjb21wbGV0ZWx5IHByZWRpY3RhYmxlIG1hbm5lcikuCiAgKi8KIAogc3RhdGljIGludCBnZXRfbmFtZShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKnVhZGRyLApAQCAtNDA0LDcgKzM5Miw4IEBACiAJCWFkZHItPmFkZHIuaWQucmVmID0gdHNvY2stPnBlZXJfbmFtZS5yZWY7CiAJCWFkZHItPmFkZHIuaWQubm9kZSA9IHRzb2NrLT5wZWVyX25hbWUubm9kZTsKIAl9IGVsc2UgewotCQl0aXBjX293bmlkZW50aXR5KHRzb2NrLT5wLT5yZWYsICZhZGRyLT5hZGRyLmlkKTsKKwkJYWRkci0+YWRkci5pZC5yZWYgPSB0c29jay0+cC0+cmVmOworCQlhZGRyLT5hZGRyLmlkLm5vZGUgPSB0aXBjX293bl9hZGRyOwogCX0KIAogCSp1YWRkcl9sZW4gPSBzaXplb2YoKmFkZHIpOwpAQCAtNTc0LDM3ICs1NjMsMzUgQEAKIAogCWRvIHsKIAkJaWYgKGRlc3QtPmFkZHJ0eXBlID09IFRJUENfQUREUl9OQU1FKSB7Ci0JCQlpZiAoKHJlcyA9IGRlc3RfbmFtZV9jaGVjayhkZXN0LCBtKSkpCisJCQlyZXMgPSBkZXN0X25hbWVfY2hlY2soZGVzdCwgbSk7CisJCQlpZiAocmVzKQogCQkJCWJyZWFrOwogCQkJcmVzID0gdGlwY19zZW5kMm5hbWUodHBvcnQtPnJlZiwKIAkJCQkJICAgICAmZGVzdC0+YWRkci5uYW1lLm5hbWUsCiAJCQkJCSAgICAgZGVzdC0+YWRkci5uYW1lLmRvbWFpbiwKIAkJCQkJICAgICBtLT5tc2dfaW92bGVuLAogCQkJCQkgICAgIG0tPm1zZ19pb3YpOwotCQl9Ci0JCWVsc2UgaWYgKGRlc3QtPmFkZHJ0eXBlID09IFRJUENfQUREUl9JRCkgeworCQl9IGVsc2UgaWYgKGRlc3QtPmFkZHJ0eXBlID09IFRJUENfQUREUl9JRCkgewogCQkJcmVzID0gdGlwY19zZW5kMnBvcnQodHBvcnQtPnJlZiwKIAkJCQkJICAgICAmZGVzdC0+YWRkci5pZCwKIAkJCQkJICAgICBtLT5tc2dfaW92bGVuLAogCQkJCQkgICAgIG0tPm1zZ19pb3YpOwotCQl9Ci0JCWVsc2UgaWYgKGRlc3QtPmFkZHJ0eXBlID09IFRJUENfQUREUl9NQ0FTVCkgeworCQl9IGVsc2UgaWYgKGRlc3QtPmFkZHJ0eXBlID09IFRJUENfQUREUl9NQ0FTVCkgewogCQkJaWYgKG5lZWRzX2Nvbm4pIHsKIAkJCQlyZXMgPSAtRU9QTk9UU1VQUDsKIAkJCQlicmVhazsKIAkJCX0KLQkJCWlmICgocmVzID0gZGVzdF9uYW1lX2NoZWNrKGRlc3QsIG0pKSkKKwkJCXJlcyA9IGRlc3RfbmFtZV9jaGVjayhkZXN0LCBtKTsKKwkJCWlmIChyZXMpCiAJCQkJYnJlYWs7CiAJCQlyZXMgPSB0aXBjX211bHRpY2FzdCh0cG9ydC0+cmVmLAogCQkJCQkgICAgICZkZXN0LT5hZGRyLm5hbWVzZXEsCi0JCQkJCSAgICAgMCwKIAkJCQkJICAgICBtLT5tc2dfaW92bGVuLAogCQkJCQkgICAgIG0tPm1zZ19pb3YpOwogCQl9CiAJCWlmIChsaWtlbHkocmVzICE9IC1FTElOS0NPTkcpKSB7Ci0JCQlpZiAobmVlZHNfY29ubiAmJiAocmVzID49IDApKSB7CisJCQlpZiAobmVlZHNfY29ubiAmJiAocmVzID49IDApKQogCQkJCXNvY2stPnN0YXRlID0gU1NfQ09OTkVDVElORzsKLQkJCX0KIAkJCWJyZWFrOwogCQl9CiAJCWlmIChtLT5tc2dfZmxhZ3MgJiBNU0dfRE9OVFdBSVQpIHsKQEAgLTY2Myw5ICs2NTAsOCBAQAogCQl9CiAKIAkJcmVzID0gdGlwY19zZW5kKHRwb3J0LT5yZWYsIG0tPm1zZ19pb3ZsZW4sIG0tPm1zZ19pb3YpOwotCQlpZiAobGlrZWx5KHJlcyAhPSAtRUxJTktDT05HKSkgeworCQlpZiAobGlrZWx5KHJlcyAhPSAtRUxJTktDT05HKSkKIAkJCWJyZWFrOwotCQl9CiAJCWlmIChtLT5tc2dfZmxhZ3MgJiBNU0dfRE9OVFdBSVQpIHsKIAkJCXJlcyA9IC1FV09VTERCTE9DSzsKIAkJCWJyZWFrOwpAQCAtNzY0LDcgKzc1MCw4IEBACiAJCQkJYnl0ZXNfdG9fc2VuZCA9IGN1cnJfbGVmdDsKIAkJCW15X2lvdi5pb3ZfYmFzZSA9IGN1cnJfc3RhcnQ7CiAJCQlteV9pb3YuaW92X2xlbiA9IGJ5dGVzX3RvX3NlbmQ7Ci0JCQlpZiAoKHJlcyA9IHNlbmRfcGFja2V0KE5VTEwsIHNvY2ssICZteV9tc2csIDApKSA8IDApIHsKKwkJCXJlcyA9IHNlbmRfcGFja2V0KE5VTEwsIHNvY2ssICZteV9tc2csIDApOworCQkJaWYgKHJlcyA8IDApIHsKIAkJCQlpZiAoYnl0ZXNfc2VudCkKIAkJCQkJcmVzID0gYnl0ZXNfc2VudDsKIAkJCQlnb3RvIGV4aXQ7CkBAIC04MjQsOCArODExLDggQEAKIAkJYWRkci0+YWRkcnR5cGUgPSBUSVBDX0FERFJfSUQ7CiAJCWFkZHItPmFkZHIuaWQucmVmID0gbXNnX29yaWdwb3J0KG1zZyk7CiAJCWFkZHItPmFkZHIuaWQubm9kZSA9IG1zZ19vcmlnbm9kZShtc2cpOwotCQlhZGRyLT5hZGRyLm5hbWUuZG9tYWluID0gMDsgICAJLyogY291bGQgbGVhdmUgdW5pbml0aWFsaXplZCAqLwotCQlhZGRyLT5zY29wZSA9IDA7ICAgCQkvKiBjb3VsZCBsZWF2ZSB1bmluaXRpYWxpemVkICovCisJCWFkZHItPmFkZHIubmFtZS5kb21haW4gPSAwOwkvKiBjb3VsZCBsZWF2ZSB1bmluaXRpYWxpemVkICovCisJCWFkZHItPnNjb3BlID0gMDsJCS8qIGNvdWxkIGxlYXZlIHVuaW5pdGlhbGl6ZWQgKi8KIAkJbS0+bXNnX25hbWVsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX3RpcGMpOwogCX0KIH0KQEAgLTg1OSwxMiArODQ2LDE1IEBACiAJaWYgKHVubGlrZWx5KGVycikpIHsKIAkJYW5jX2RhdGFbMF0gPSBlcnI7CiAJCWFuY19kYXRhWzFdID0gbXNnX2RhdGFfc3oobXNnKTsKLQkJaWYgKChyZXMgPSBwdXRfY21zZyhtLCBTT0xfVElQQywgVElQQ19FUlJJTkZPLCA4LCBhbmNfZGF0YSkpKQorCQlyZXMgPSBwdXRfY21zZyhtLCBTT0xfVElQQywgVElQQ19FUlJJTkZPLCA4LCBhbmNfZGF0YSk7CisJCWlmIChyZXMpCiAJCQlyZXR1cm4gcmVzOwotCQlpZiAoYW5jX2RhdGFbMV0gJiYKLQkJICAgIChyZXMgPSBwdXRfY21zZyhtLCBTT0xfVElQQywgVElQQ19SRVREQVRBLCBhbmNfZGF0YVsxXSwKLQkJCQkgICAgbXNnX2RhdGEobXNnKSkpKQotCQkJcmV0dXJuIHJlczsKKwkJaWYgKGFuY19kYXRhWzFdKSB7CisJCQlyZXMgPSBwdXRfY21zZyhtLCBTT0xfVElQQywgVElQQ19SRVREQVRBLCBhbmNfZGF0YVsxXSwKKwkJCQkgICAgICAgbXNnX2RhdGEobXNnKSk7CisJCQlpZiAocmVzKQorCQkJCXJldHVybiByZXM7CisJCX0KIAl9CiAKIAkvKiBPcHRpb25hbGx5IGNhcHR1cmUgbWVzc2FnZSBkZXN0aW5hdGlvbiBvYmplY3QgKi8KQEAgLTg5Miw5ICs4ODIsMTEgQEAKIAlkZWZhdWx0OgogCQloYXNfbmFtZSA9IDA7CiAJfQotCWlmIChoYXNfbmFtZSAmJgotCSAgICAocmVzID0gcHV0X2Ntc2cobSwgU09MX1RJUEMsIFRJUENfREVTVE5BTUUsIDEyLCBhbmNfZGF0YSkpKQotCQlyZXR1cm4gcmVzOworCWlmIChoYXNfbmFtZSkgeworCQlyZXMgPSBwdXRfY21zZyhtLCBTT0xfVElQQywgVElQQ19ERVNUTkFNRSwgMTIsIGFuY19kYXRhKTsKKwkJaWYgKHJlcykKKwkJCXJldHVybiByZXM7CisJfQogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMjI3LDQyICsxMjE5LDI1IEBACiAJICovCiAKIAlpZiAoc29jay0+c3RhdGUgPT0gU1NfUkVBRFkpIHsKLQkJaWYgKG1zZ19jb25uZWN0ZWQobXNnKSkgewotCQkJbXNnX2RiZyhtc2csICJkaXNwYXRjaCBmaWx0ZXIgMVxuIik7CisJCWlmIChtc2dfY29ubmVjdGVkKG1zZykpCiAJCQlyZXR1cm4gVElQQ19FUlJfTk9fUE9SVDsKLQkJfQogCX0gZWxzZSB7Ci0JCWlmIChtc2dfbWNhc3QobXNnKSkgewotCQkJbXNnX2RiZyhtc2csICJkaXNwYXRjaCBmaWx0ZXIgMlxuIik7CisJCWlmIChtc2dfbWNhc3QobXNnKSkKIAkJCXJldHVybiBUSVBDX0VSUl9OT19QT1JUOwotCQl9CiAJCWlmIChzb2NrLT5zdGF0ZSA9PSBTU19DT05ORUNURUQpIHsKLQkJCWlmICghbXNnX2Nvbm5lY3RlZChtc2cpKSB7Ci0JCQkJbXNnX2RiZyhtc2csICJkaXNwYXRjaCBmaWx0ZXIgM1xuIik7CisJCQlpZiAoIW1zZ19jb25uZWN0ZWQobXNnKSkKIAkJCQlyZXR1cm4gVElQQ19FUlJfTk9fUE9SVDsKLQkJCX0KLQkJfQotCQllbHNlIGlmIChzb2NrLT5zdGF0ZSA9PSBTU19DT05ORUNUSU5HKSB7Ci0JCQlpZiAoIW1zZ19jb25uZWN0ZWQobXNnKSAmJiAobXNnX2VycmNvZGUobXNnKSA9PSAwKSkgewotCQkJCW1zZ19kYmcobXNnLCAiZGlzcGF0Y2ggZmlsdGVyIDRcbiIpOworCQl9IGVsc2UgaWYgKHNvY2stPnN0YXRlID09IFNTX0NPTk5FQ1RJTkcpIHsKKwkJCWlmICghbXNnX2Nvbm5lY3RlZChtc2cpICYmIChtc2dfZXJyY29kZShtc2cpID09IDApKQogCQkJCXJldHVybiBUSVBDX0VSUl9OT19QT1JUOwotCQkJfQotCQl9Ci0JCWVsc2UgaWYgKHNvY2stPnN0YXRlID09IFNTX0xJU1RFTklORykgewotCQkJaWYgKG1zZ19jb25uZWN0ZWQobXNnKSB8fCBtc2dfZXJyY29kZShtc2cpKSB7Ci0JCQkJbXNnX2RiZyhtc2csICJkaXNwYXRjaCBmaWx0ZXIgNVxuIik7CisJCX0gZWxzZSBpZiAoc29jay0+c3RhdGUgPT0gU1NfTElTVEVOSU5HKSB7CisJCQlpZiAobXNnX2Nvbm5lY3RlZChtc2cpIHx8IG1zZ19lcnJjb2RlKG1zZykpCiAJCQkJcmV0dXJuIFRJUENfRVJSX05PX1BPUlQ7Ci0JCQl9Ci0JCX0KLQkJZWxzZSBpZiAoc29jay0+c3RhdGUgPT0gU1NfRElTQ09OTkVDVElORykgewotCQkJbXNnX2RiZyhtc2csICJkaXNwYXRjaCBmaWx0ZXIgNlxuIik7CisJCX0gZWxzZSBpZiAoc29jay0+c3RhdGUgPT0gU1NfRElTQ09OTkVDVElORykgewogCQkJcmV0dXJuIFRJUENfRVJSX05PX1BPUlQ7Ci0JCX0KLQkJZWxzZSAvKiAoc29jay0+c3RhdGUgPT0gU1NfVU5DT05ORUNURUQpICovIHsKLQkJCWlmIChtc2dfY29ubmVjdGVkKG1zZykgfHwgbXNnX2VycmNvZGUobXNnKSkgewotCQkJCW1zZ19kYmcobXNnLCAiZGlzcGF0Y2ggZmlsdGVyIDdcbiIpOworCQl9IGVsc2UgLyogKHNvY2stPnN0YXRlID09IFNTX1VOQ09OTkVDVEVEKSAqLyB7CisJCQlpZiAobXNnX2Nvbm5lY3RlZChtc2cpIHx8IG1zZ19lcnJjb2RlKG1zZykpCiAJCQkJcmV0dXJuIFRJUENfRVJSX05PX1BPUlQ7Ci0JCQl9CiAJCX0KIAl9CiAKQEAgLTEyODEsNyArMTI1Niw2IEBACiAKIAkvKiBFbnF1ZXVlIG1lc3NhZ2UgKGZpbmFsbHkhKSAqLwogCi0JbXNnX2RiZyhtc2csICI8RElTUDw6ICIpOwogCVRJUENfU0tCX0NCKGJ1ZiktPmhhbmRsZSA9IG1zZ19kYXRhKG1zZyk7CiAJYXRvbWljX2luYygmdGlwY19xdWV1ZV9zaXplKTsKIAlfX3NrYl9xdWV1ZV90YWlsKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSwgYnVmKTsKQEAgLTE0NDIsOSArMTQxNiw4IEBACiAJbS5tc2dfbmFtZSA9IGRlc3Q7CiAJbS5tc2dfbmFtZWxlbiA9IGRlc3RsZW47CiAJcmVzID0gc2VuZF9tc2coTlVMTCwgc29jaywgJm0sIDApOwotCWlmIChyZXMgPCAwKSB7CisJaWYgKHJlcyA8IDApCiAJCWdvdG8gZXhpdDsKLQl9CiAKIAkvKiBXYWl0IHVudGlsIGFuICdBQ0snIG9yICdSU1QnIGFycml2ZXMsIG9yIGEgdGltZW91dCBvY2N1cnMgKi8KIApAQCAtMTQ2NiwxMSArMTQzOSwxMCBAQAogCQkJCQlhZHZhbmNlX3J4X3F1ZXVlKHNrKTsKIAkJCX0KIAkJfSBlbHNlIHsKLQkJCWlmIChzb2NrLT5zdGF0ZSA9PSBTU19DT05ORUNURUQpIHsKKwkJCWlmIChzb2NrLT5zdGF0ZSA9PSBTU19DT05ORUNURUQpCiAJCQkJcmVzID0gLUVJU0NPTk47Ci0JCQl9IGVsc2UgeworCQkJZWxzZQogCQkJCXJlcyA9IC1FQ09OTlJFRlVTRUQ7Ci0JCQl9CiAJCX0KIAl9IGVsc2UgewogCQlpZiAocmVzID09IDApCkBAIC0xNTg5LDcgKzE1NjEsNiBAQAogCQkgKiBSZXNwb25kIHRvICdTWU4rJyBieSBxdWV1aW5nIGl0IG9uIG5ldyBzb2NrZXQuCiAJCSAqLwogCi0JCW1zZ19kYmcobXNnLCI8QUNDPDogIik7CiAJCWlmICghbXNnX2RhdGFfc3oobXNnKSkgewogCQkJc3RydWN0IG1zZ2hkciBtID0ge05VTEwsfTsKIApAQCAtMTY5Nyw3ICsxNjY4LDggQEAKIAkJcmV0dXJuIC1FTk9QUk9UT09QVDsKIAlpZiAob2wgPCBzaXplb2YodmFsdWUpKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoKHJlcyA9IGdldF91c2VyKHZhbHVlLCAodTMyIF9fdXNlciAqKW92KSkpCisJcmVzID0gZ2V0X3VzZXIodmFsdWUsICh1MzIgX191c2VyICopb3YpOworCWlmIChyZXMpCiAJCXJldHVybiByZXM7CiAKIAlsb2NrX3NvY2soc2spOwpAQCAtMTc1NSw3ICsxNzI3LDggQEAKIAkJcmV0dXJuIHB1dF91c2VyKDAsIG9sKTsKIAlpZiAobHZsICE9IFNPTF9USVBDKQogCQlyZXR1cm4gLUVOT1BST1RPT1BUOwotCWlmICgocmVzID0gZ2V0X3VzZXIobGVuLCBvbCkpKQorCXJlcyA9IGdldF91c2VyKGxlbiwgb2wpOworCWlmIChyZXMpCiAJCXJldHVybiByZXM7CiAKIAlsb2NrX3NvY2soc2spOwpAQCAtMTc3NCwxMCArMTc0NywxMCBAQAogCQl2YWx1ZSA9IGppZmZpZXNfdG9fbXNlY3ModGlwY19zayhzayktPmNvbm5fdGltZW91dCk7CiAJCS8qIG5vIG5lZWQgdG8gc2V0ICJyZXMiLCBzaW5jZSBhbHJlYWR5IDAgYXQgdGhpcyBwb2ludCAqLwogCQlicmVhazsKLQkgY2FzZSBUSVBDX05PREVfUkVDVlFfREVQVEg6CisJY2FzZSBUSVBDX05PREVfUkVDVlFfREVQVEg6CiAJCXZhbHVlID0gKHUzMilhdG9taWNfcmVhZCgmdGlwY19xdWV1ZV9zaXplKTsKIAkJYnJlYWs7Ci0JIGNhc2UgVElQQ19TT0NLX1JFQ1ZRX0RFUFRIOgorCWNhc2UgVElQQ19TT0NLX1JFQ1ZRX0RFUFRIOgogCQl2YWx1ZSA9IHNrYl9xdWV1ZV9sZW4oJnNrLT5za19yZWNlaXZlX3F1ZXVlKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTE3ODYsMjAgKzE3NTksMTYgQEAKIAogCXJlbGVhc2Vfc29jayhzayk7CiAKLQlpZiAocmVzKSB7Ci0JCS8qICJnZXQiIGZhaWxlZCAqLwotCX0KLQllbHNlIGlmIChsZW4gPCBzaXplb2YodmFsdWUpKSB7Ci0JCXJlcyA9IC1FSU5WQUw7Ci0JfQotCWVsc2UgaWYgKGNvcHlfdG9fdXNlcihvdiwgJnZhbHVlLCBzaXplb2YodmFsdWUpKSkgewotCQlyZXMgPSAtRUZBVUxUOwotCX0KLQllbHNlIHsKLQkJcmVzID0gcHV0X3VzZXIoc2l6ZW9mKHZhbHVlKSwgb2wpOwotCX0KKwlpZiAocmVzKQorCQlyZXR1cm4gcmVzOwkvKiAiZ2V0IiBmYWlsZWQgKi8KIAotCXJldHVybiByZXM7CisJaWYgKGxlbiA8IHNpemVvZih2YWx1ZSkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGNvcHlfdG9fdXNlcihvdiwgJnZhbHVlLCBzaXplb2YodmFsdWUpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlyZXR1cm4gcHV0X3VzZXIoc2l6ZW9mKHZhbHVlKSwgb2wpOwogfQogCiAvKioKQEAgLTE4MDcsNyArMTc3Niw3IEBACiAgKi8KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgbXNnX29wcyA9IHsKLQkub3duZXIgCQk9IFRISVNfTU9EVUxFLAorCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkuZmFtaWx5CQk9IEFGX1RJUEMsCiAJLnJlbGVhc2UJPSByZWxlYXNlLAogCS5iaW5kCQk9IGJpbmQsCkBAIC0xODI4LDcgKzE3OTcsNyBAQAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgcGFja2V0X29wcyA9IHsKLQkub3duZXIgCQk9IFRISVNfTU9EVUxFLAorCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkuZmFtaWx5CQk9IEFGX1RJUEMsCiAJLnJlbGVhc2UJPSByZWxlYXNlLAogCS5iaW5kCQk9IGJpbmQsCkBAIC0xODQ5LDcgKzE4MTgsNyBAQAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgc3RyZWFtX29wcyA9IHsKLQkub3duZXIgCQk9IFRISVNfTU9EVUxFLAorCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkuZmFtaWx5CQk9IEFGX1RJUEMsCiAJLnJlbGVhc2UJPSByZWxlYXNlLAogCS5iaW5kCQk9IGJpbmQsCkBAIC0xODcwLDcgKzE4MzksNyBAQAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfcHJvdG9fZmFtaWx5IHRpcGNfZmFtaWx5X29wcyA9IHsKLQkub3duZXIgCQk9IFRISVNfTU9EVUxFLAorCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkuZmFtaWx5CQk9IEFGX1RJUEMsCiAJLmNyZWF0ZQkJPSB0aXBjX2NyZWF0ZQogfTsKZGlmZiAtLWdpdCBhL25ldC90aXBjL3N1YnNjci5jIGIvbmV0L3RpcGMvc3Vic2NyLmMKaW5kZXggMzMzMTM5Ni4uY2EwNDQ3OSAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvc3Vic2NyLmMKKysrIGIvbmV0L3RpcGMvc3Vic2NyLmMKQEAgLTM1LDEwICszNSw4IEBACiAgKi8KIAogI2luY2x1ZGUgImNvcmUuaCIKLSNpbmNsdWRlICJkYmcuaCIKICNpbmNsdWRlICJuYW1lX3RhYmxlLmgiCiAjaW5jbHVkZSAicG9ydC5oIgotI2luY2x1ZGUgInJlZi5oIgogI2luY2x1ZGUgInN1YnNjci5oIgogCiAvKioKQEAgLTY2LDE0ICs2NCwxMyBAQAogICovCiAKIHN0cnVjdCB0b3Bfc3J2IHsKLQl1MzIgdXNlcl9yZWY7CiAJdTMyIHNldHVwX3BvcnQ7CiAJYXRvbWljX3Qgc3Vic2NyaXB0aW9uX2NvdW50OwogCXN0cnVjdCBsaXN0X2hlYWQgc3Vic2NyaWJlcl9saXN0OwogCXNwaW5sb2NrX3QgbG9jazsKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdG9wX3NydiB0b3BzcnYgPSB7IDAgfTsKK3N0YXRpYyBzdHJ1Y3QgdG9wX3NydiB0b3BzcnY7CiAKIC8qKgogICogaHRvaGwgLSBjb252ZXJ0IHZhbHVlIHRvIGVuZGlhbm5lc3MgdXNlZCBieSBkZXN0aW5hdGlvbgpAQCAtMjUyLDggKzI0OSw2IEBACiAJCQlrX2NhbmNlbF90aW1lcigmc3ViLT50aW1lcik7CiAJCQlrX3Rlcm1fdGltZXIoJnN1Yi0+dGltZXIpOwogCQl9Ci0JCWRiZygiVGVybTogUmVtb3Zpbmcgc3ViICV1LCV1LCV1IGZyb20gc3Vic2NyaWJlciAleCBsaXN0XG4iLAotCQkgICAgc3ViLT5zZXEudHlwZSwgc3ViLT5zZXEubG93ZXIsIHN1Yi0+c2VxLnVwcGVyLCBzdWJzY3JpYmVyKTsKIAkJc3Vic2NyX2RlbChzdWIpOwogCX0KIApAQCAtMzEwLDggKzMwNSw2IEBACiAJCWtfdGVybV90aW1lcigmc3ViLT50aW1lcik7CiAJCXNwaW5fbG9ja19iaChzdWJzY3JpYmVyLT5sb2NrKTsKIAl9Ci0JZGJnKCJDYW5jZWw6IHJlbW92aW5nIHN1YiAldSwldSwldSBmcm9tIHN1YnNjcmliZXIgJXggbGlzdFxuIiwKLQkgICAgc3ViLT5zZXEudHlwZSwgc3ViLT5zZXEubG93ZXIsIHN1Yi0+c2VxLnVwcGVyLCBzdWJzY3JpYmVyKTsKIAlzdWJzY3JfZGVsKHN1Yik7CiB9CiAKQEAgLTQ5Niw4ICs0ODksNyBAQAogCiAJLyogQ3JlYXRlIHNlcnZlciBwb3J0ICYgZXN0YWJsaXNoIGNvbm5lY3Rpb24gdG8gc3Vic2NyaWJlciAqLwogCi0JdGlwY19jcmVhdGVwb3J0KHRvcHNydi51c2VyX3JlZiwKLQkJCXN1YnNjcmliZXIsCisJdGlwY19jcmVhdGVwb3J0KHN1YnNjcmliZXIsCiAJCQlpbXBvcnRhbmNlLAogCQkJTlVMTCwKIAkJCU5VTEwsCkBAIC01NDQsMjEgKzUzNiwxNCBAQAogaW50IHRpcGNfc3Vic2NyX3N0YXJ0KHZvaWQpCiB7CiAJc3RydWN0IHRpcGNfbmFtZV9zZXEgc2VxID0ge1RJUENfVE9QX1NSViwgVElQQ19UT1BfU1JWLCBUSVBDX1RPUF9TUlZ9OwotCWludCByZXMgPSAtMTsKKwlpbnQgcmVzOwogCi0JbWVtc2V0KCZ0b3BzcnYsIDAsIHNpemVvZiAodG9wc3J2KSk7CisJbWVtc2V0KCZ0b3BzcnYsIDAsIHNpemVvZih0b3BzcnYpKTsKIAlzcGluX2xvY2tfaW5pdCgmdG9wc3J2LmxvY2spOwogCUlOSVRfTElTVF9IRUFEKCZ0b3BzcnYuc3Vic2NyaWJlcl9saXN0KTsKIAogCXNwaW5fbG9ja19iaCgmdG9wc3J2LmxvY2spOwotCXJlcyA9IHRpcGNfYXR0YWNoKCZ0b3BzcnYudXNlcl9yZWYsIE5VTEwsIE5VTEwpOwotCWlmIChyZXMpIHsKLQkJc3Bpbl91bmxvY2tfYmgoJnRvcHNydi5sb2NrKTsKLQkJcmV0dXJuIHJlczsKLQl9Ci0KLQlyZXMgPSB0aXBjX2NyZWF0ZXBvcnQodG9wc3J2LnVzZXJfcmVmLAotCQkJICAgICAgTlVMTCwKKwlyZXMgPSB0aXBjX2NyZWF0ZXBvcnQoTlVMTCwKIAkJCSAgICAgIFRJUENfQ1JJVElDQUxfSU1QT1JUQU5DRSwKIAkJCSAgICAgIE5VTEwsCiAJCQkgICAgICBOVUxMLApAQCAtNTcyLDE2ICs1NTcsMTcgQEAKIAkJZ290byBmYWlsZWQ7CiAKIAlyZXMgPSB0aXBjX25hbWV0YmxfcHVibGlzaF9yc3YodG9wc3J2LnNldHVwX3BvcnQsIFRJUENfTk9ERV9TQ09QRSwgJnNlcSk7Ci0JaWYgKHJlcykKKwlpZiAocmVzKSB7CisJCXRpcGNfZGVsZXRlcG9ydCh0b3BzcnYuc2V0dXBfcG9ydCk7CisJCXRvcHNydi5zZXR1cF9wb3J0ID0gMDsKIAkJZ290byBmYWlsZWQ7CisJfQogCiAJc3Bpbl91bmxvY2tfYmgoJnRvcHNydi5sb2NrKTsKIAlyZXR1cm4gMDsKIAogZmFpbGVkOgogCWVycigiRmFpbGVkIHRvIGNyZWF0ZSBzdWJzY3JpcHRpb24gc2VydmljZVxuIik7Ci0JdGlwY19kZXRhY2godG9wc3J2LnVzZXJfcmVmKTsKLQl0b3BzcnYudXNlcl9yZWYgPSAwOwogCXNwaW5fdW5sb2NrX2JoKCZ0b3BzcnYubG9jayk7CiAJcmV0dXJuIHJlczsKIH0KQEAgLTU5Miw4ICs1NzgsMTAgQEAKIAlzdHJ1Y3Qgc3Vic2NyaWJlciAqc3Vic2NyaWJlcl90ZW1wOwogCXNwaW5sb2NrX3QgKnN1YnNjcmliZXJfbG9jazsKIAotCWlmICh0b3BzcnYudXNlcl9yZWYpIHsKKwlpZiAodG9wc3J2LnNldHVwX3BvcnQpIHsKIAkJdGlwY19kZWxldGVwb3J0KHRvcHNydi5zZXR1cF9wb3J0KTsKKwkJdG9wc3J2LnNldHVwX3BvcnQgPSAwOworCiAJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzdWJzY3JpYmVyLCBzdWJzY3JpYmVyX3RlbXAsCiAJCQkJCSAmdG9wc3J2LnN1YnNjcmliZXJfbGlzdCwKIAkJCQkJIHN1YnNjcmliZXJfbGlzdCkgewpAQCAtNjAyLDcgKzU5MCw1IEBACiAJCQlzdWJzY3JfdGVybWluYXRlKHN1YnNjcmliZXIpOwogCQkJc3Bpbl91bmxvY2tfYmgoc3Vic2NyaWJlcl9sb2NrKTsKIAkJfQotCQl0aXBjX2RldGFjaCh0b3BzcnYudXNlcl9yZWYpOwotCQl0b3BzcnYudXNlcl9yZWYgPSAwOwogCX0KIH0KZGlmZiAtLWdpdCBhL25ldC90aXBjL3VzZXJfcmVnLmMgYi9uZXQvdGlwYy91c2VyX3JlZy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDY5Mjg4MC4uMDAwMDAwMAotLS0gYS9uZXQvdGlwYy91c2VyX3JlZy5jCisrKyAvZGV2L251bGwKQEAgLTEsMjY0ICswLDAgQEAKLS8qCi0gKiBuZXQvdGlwYy91c2VyX3JlZy5jOiBUSVBDIHVzZXIgcmVnaXN0cnkgY29kZQotICoKLSAqIENvcHlyaWdodCAoYykgMjAwMC0yMDA2LCBFcmljc3NvbiBBQgotICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDUsIFdpbmQgUml2ZXIgU3lzdGVtcwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWVzIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVycyBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogQWx0ZXJuYXRpdmVseSwgdGhpcyBzb2Z0d2FyZSBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKCJHUEwiKSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCi0gKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQotICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQotICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvcmUuaCIKLSNpbmNsdWRlICJ1c2VyX3JlZy5oIgotCi0vKgotICogVElQQyB1c2VyIHJlZ2lzdHJ5IGtlZXBzIHRyYWNrIG9mIHVzZXJzIG9mIHRoZSB0aXBjX3BvcnQgaW50ZXJmYWNlLgotICoKLSAqIFRoZSByZWdpc3RyeSB1dGlsaXplcyBhbiBhcnJheSBvZiAiVElQQyB1c2VyIiBlbnRyaWVzOwotICogYSB1c2VyJ3MgSUQgaXMgdGhlIGluZGV4IG9mIHRoZWlyIGFzc29jaWF0ZWQgYXJyYXkgZW50cnkuCi0gKiBBcnJheSBlbnRyeSAwIGlzIG5vdCB1c2VkLCBzbyB1c2VyaWQgMCBpcyBub3QgdmFsaWQ7Ci0gKiBUSVBDIHNvbWV0aW1lcyB1c2VzIHRoaXMgdmFsdWUgdG8gZGVub3RlIGFuIGFub255bW91cyB1c2VyLgotICogVGhlIGxpc3Qgb2YgZnJlZSBlbnRyaWVzIGlzIGluaXRpYWxseSBjaGFpbmVkIGZyb20gbGFzdCBlbnRyeSB0byBlbnRyeSAxLgotICovCi0KLS8qKgotICogc3RydWN0IHRpcGNfdXNlciAtIHJlZ2lzdGVyZWQgVElQQyB1c2VyIGluZm8KLSAqIEBuZXh0OiBpbmRleCBvZiBuZXh0IGZyZWUgcmVnaXN0cnkgZW50cnkgKG9yIC0xIGZvciBhbiBhbGxvY2F0ZWQgZW50cnkpCi0gKiBAY2FsbGJhY2s6IHB0ciB0byByb3V0aW5lIHRvIGNhbGwgd2hlbiBUSVBDIG1vZGUgY2hhbmdlcyAoTlVMTCBpZiBub25lKQotICogQHVzcl9oYW5kbGU6IHVzZXItZGVmaW5lZCB2YWx1ZSBwYXNzZWQgdG8gY2FsbGJhY2sgcm91dGluZQotICogQHBvcnRzOiBsaXN0IG9mIHVzZXIgcG9ydHMgb3duZWQgYnkgdGhlIHVzZXIKLSAqLwotCi1zdHJ1Y3QgdGlwY191c2VyIHsKLQlpbnQgbmV4dDsKLQl0aXBjX21vZGVfZXZlbnQgY2FsbGJhY2s7Ci0Jdm9pZCAqdXNyX2hhbmRsZTsKLQlzdHJ1Y3QgbGlzdF9oZWFkIHBvcnRzOwotfTsKLQotI2RlZmluZSBNQVhfVVNFUklEIDY0Ci0jZGVmaW5lIFVTRVJfTElTVF9TSVpFICgoTUFYX1VTRVJJRCArIDEpICogc2l6ZW9mKHN0cnVjdCB0aXBjX3VzZXIpKQotCi1zdGF0aWMgc3RydWN0IHRpcGNfdXNlciAqdXNlcnMgPSBOVUxMOwotc3RhdGljIHUzMiBuZXh0X2ZyZWVfdXNlciA9IE1BWF9VU0VSSUQgKyAxOwotc3RhdGljIERFRklORV9TUElOTE9DSyhyZWdfbG9jayk7Ci0KLS8qKgotICogcmVnX2luaXQgLSBjcmVhdGUgVElQQyB1c2VyIHJlZ2lzdHJ5IChidXQgZG9uJ3QgYWN0aXZhdGUgaXQpCi0gKgotICogSWYgcmVnaXN0cnkgaGFzIGJlZW4gcHJlLWluaXRpYWxpemVkIGl0IGlzIGxlZnQgImFzIGlzIi4KLSAqIE5PVEU6IFRoaXMgcm91dGluZSBtYXkgYmUgY2FsbGVkIHdoZW4gVElQQyBpcyBpbmFjdGl2ZS4KLSAqLwotCi1zdGF0aWMgaW50IHJlZ19pbml0KHZvaWQpCi17Ci0JdTMyIGk7Ci0KLQlzcGluX2xvY2tfYmgoJnJlZ19sb2NrKTsKLQlpZiAoIXVzZXJzKSB7Ci0JCXVzZXJzID0ga3phbGxvYyhVU0VSX0xJU1RfU0laRSwgR0ZQX0FUT01JQyk7Ci0JCWlmICh1c2VycykgewotCQkJZm9yIChpID0gMTsgaSA8PSBNQVhfVVNFUklEOyBpKyspIHsKLQkJCQl1c2Vyc1tpXS5uZXh0ID0gaSAtIDE7Ci0JCQl9Ci0JCQluZXh0X2ZyZWVfdXNlciA9IE1BWF9VU0VSSUQ7Ci0JCX0KLQl9Ci0Jc3Bpbl91bmxvY2tfYmgoJnJlZ19sb2NrKTsKLQlyZXR1cm4gdXNlcnMgPyAwIDogLUVOT01FTTsKLX0KLQotLyoqCi0gKiByZWdfY2FsbGJhY2sgLSBpbmZvcm0gVElQQyB1c2VyIGFib3V0IGN1cnJlbnQgb3BlcmF0aW5nIG1vZGUKLSAqLwotCi1zdGF0aWMgdm9pZCByZWdfY2FsbGJhY2soc3RydWN0IHRpcGNfdXNlciAqdXNlcl9wdHIpCi17Ci0JdGlwY19tb2RlX2V2ZW50IGNiOwotCXZvaWQgKmFyZzsKLQotCXNwaW5fbG9ja19iaCgmcmVnX2xvY2spOwotCWNiID0gdXNlcl9wdHItPmNhbGxiYWNrOwotCWFyZyA9IHVzZXJfcHRyLT51c3JfaGFuZGxlOwotCXNwaW5fdW5sb2NrX2JoKCZyZWdfbG9jayk7Ci0KLQlpZiAoY2IpCi0JCWNiKGFyZywgdGlwY19tb2RlLCB0aXBjX293bl9hZGRyKTsKLX0KLQotLyoqCi0gKiB0aXBjX3JlZ19zdGFydCAtIGFjdGl2YXRlIFRJUEMgdXNlciByZWdpc3RyeQotICovCi0KLWludCB0aXBjX3JlZ19zdGFydCh2b2lkKQotewotCXUzMiB1OwotCWludCByZXM7Ci0KLQlpZiAoKHJlcyA9IHJlZ19pbml0KCkpKQotCQlyZXR1cm4gcmVzOwotCi0JZm9yICh1ID0gMTsgdSA8PSBNQVhfVVNFUklEOyB1KyspIHsKLQkJaWYgKHVzZXJzW3VdLmNhbGxiYWNrKQotCQkJdGlwY19rX3NpZ25hbCgoSGFuZGxlcilyZWdfY2FsbGJhY2ssCi0JCQkJICAgICAgKHVuc2lnbmVkIGxvbmcpJnVzZXJzW3VdKTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogdGlwY19yZWdfc3RvcCAtIHNodXQgZG93biAmIGRlbGV0ZSBUSVBDIHVzZXIgcmVnaXN0cnkKLSAqLwotCi12b2lkIHRpcGNfcmVnX3N0b3Aodm9pZCkKLXsKLQlpbnQgaWQ7Ci0KLQlpZiAoIXVzZXJzKQotCQlyZXR1cm47Ci0KLQlmb3IgKGlkID0gMTsgaWQgPD0gTUFYX1VTRVJJRDsgaWQrKykgewotCQlpZiAodXNlcnNbaWRdLmNhbGxiYWNrKQotCQkJcmVnX2NhbGxiYWNrKCZ1c2Vyc1tpZF0pOwotCX0KLQlrZnJlZSh1c2Vycyk7Ci0JdXNlcnMgPSBOVUxMOwotfQotCi0vKioKLSAqIHRpcGNfYXR0YWNoIC0gcmVnaXN0ZXIgYSBUSVBDIHVzZXIKLSAqCi0gKiBOT1RFOiBUaGlzIHJvdXRpbmUgbWF5IGJlIGNhbGxlZCB3aGVuIFRJUEMgaXMgaW5hY3RpdmUuCi0gKi8KLQotaW50IHRpcGNfYXR0YWNoKHUzMiAqdXNlcmlkLCB0aXBjX21vZGVfZXZlbnQgY2IsIHZvaWQgKnVzcl9oYW5kbGUpCi17Ci0Jc3RydWN0IHRpcGNfdXNlciAqdXNlcl9wdHI7Ci0KLQlpZiAoKHRpcGNfbW9kZSA9PSBUSVBDX05PVF9SVU5OSU5HKSAmJiAhY2IpCi0JCXJldHVybiAtRU5PUFJPVE9PUFQ7Ci0JaWYgKCF1c2VycykKLQkJcmVnX2luaXQoKTsKLQotCXNwaW5fbG9ja19iaCgmcmVnX2xvY2spOwotCWlmICghbmV4dF9mcmVlX3VzZXIpIHsKLQkJc3Bpbl91bmxvY2tfYmgoJnJlZ19sb2NrKTsKLQkJcmV0dXJuIC1FQlVTWTsKLQl9Ci0JdXNlcl9wdHIgPSAmdXNlcnNbbmV4dF9mcmVlX3VzZXJdOwotCSp1c2VyaWQgPSBuZXh0X2ZyZWVfdXNlcjsKLQluZXh0X2ZyZWVfdXNlciA9IHVzZXJfcHRyLT5uZXh0OwotCXVzZXJfcHRyLT5uZXh0ID0gLTE7Ci0Jc3Bpbl91bmxvY2tfYmgoJnJlZ19sb2NrKTsKLQotCXVzZXJfcHRyLT5jYWxsYmFjayA9IGNiOwotCXVzZXJfcHRyLT51c3JfaGFuZGxlID0gdXNyX2hhbmRsZTsKLQlJTklUX0xJU1RfSEVBRCgmdXNlcl9wdHItPnBvcnRzKTsKLQlhdG9taWNfaW5jKCZ0aXBjX3VzZXJfY291bnQpOwotCi0JaWYgKGNiICYmICh0aXBjX21vZGUgIT0gVElQQ19OT1RfUlVOTklORykpCi0JCXRpcGNfa19zaWduYWwoKEhhbmRsZXIpcmVnX2NhbGxiYWNrLCAodW5zaWduZWQgbG9uZyl1c2VyX3B0cik7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogdGlwY19kZXRhY2ggLSBkZXJlZ2lzdGVyIGEgVElQQyB1c2VyCi0gKi8KLQotdm9pZCB0aXBjX2RldGFjaCh1MzIgdXNlcmlkKQotewotCXN0cnVjdCB0aXBjX3VzZXIgKnVzZXJfcHRyOwotCXN0cnVjdCBsaXN0X2hlYWQgcG9ydHNfdGVtcDsKLQlzdHJ1Y3QgdXNlcl9wb3J0ICp1cF9wdHIsICp0ZW1wX3VwX3B0cjsKLQotCWlmICgodXNlcmlkID09IDApIHx8ICh1c2VyaWQgPiBNQVhfVVNFUklEKSkKLQkJcmV0dXJuOwotCi0Jc3Bpbl9sb2NrX2JoKCZyZWdfbG9jayk7Ci0JaWYgKCghdXNlcnMpIHx8ICh1c2Vyc1t1c2VyaWRdLm5leHQgPj0gMCkpIHsKLQkJc3Bpbl91bmxvY2tfYmgoJnJlZ19sb2NrKTsKLQkJcmV0dXJuOwotCX0KLQotCXVzZXJfcHRyID0gJnVzZXJzW3VzZXJpZF07Ci0JdXNlcl9wdHItPmNhbGxiYWNrID0gTlVMTDsKLQlJTklUX0xJU1RfSEVBRCgmcG9ydHNfdGVtcCk7Ci0JbGlzdF9zcGxpY2UoJnVzZXJfcHRyLT5wb3J0cywgJnBvcnRzX3RlbXApOwotCXVzZXJfcHRyLT5uZXh0ID0gbmV4dF9mcmVlX3VzZXI7Ci0JbmV4dF9mcmVlX3VzZXIgPSB1c2VyaWQ7Ci0Jc3Bpbl91bmxvY2tfYmgoJnJlZ19sb2NrKTsKLQotCWF0b21pY19kZWMoJnRpcGNfdXNlcl9jb3VudCk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodXBfcHRyLCB0ZW1wX3VwX3B0ciwgJnBvcnRzX3RlbXAsIHVwb3J0X2xpc3QpIHsKLQkJdGlwY19kZWxldGVwb3J0KHVwX3B0ci0+cmVmKTsKLQl9Ci19Ci0KLS8qKgotICogdGlwY19yZWdfYWRkX3BvcnQgLSByZWdpc3RlciBhIHVzZXIncyBkcml2ZXIgcG9ydAotICovCi0KLWludCB0aXBjX3JlZ19hZGRfcG9ydChzdHJ1Y3QgdXNlcl9wb3J0ICp1cF9wdHIpCi17Ci0Jc3RydWN0IHRpcGNfdXNlciAqdXNlcl9wdHI7Ci0KLQlpZiAodXBfcHRyLT51c2VyX3JlZiA9PSAwKQotCQlyZXR1cm4gMDsKLQlpZiAodXBfcHRyLT51c2VyX3JlZiA+IE1BWF9VU0VSSUQpCi0JCXJldHVybiAtRUlOVkFMOwotCWlmICgodGlwY19tb2RlID09IFRJUENfTk9UX1JVTk5JTkcpIHx8ICF1c2VycyApCi0JCXJldHVybiAtRU5PUFJPVE9PUFQ7Ci0KLQlzcGluX2xvY2tfYmgoJnJlZ19sb2NrKTsKLQl1c2VyX3B0ciA9ICZ1c2Vyc1t1cF9wdHItPnVzZXJfcmVmXTsKLQlsaXN0X2FkZCgmdXBfcHRyLT51cG9ydF9saXN0LCAmdXNlcl9wdHItPnBvcnRzKTsKLQlzcGluX3VubG9ja19iaCgmcmVnX2xvY2spOwotCXJldHVybiAwOwotfQotCi0vKioKLSAqIHRpcGNfcmVnX3JlbW92ZV9wb3J0IC0gZGVyZWdpc3RlciBhIHVzZXIncyBkcml2ZXIgcG9ydAotICovCi0KLWludCB0aXBjX3JlZ19yZW1vdmVfcG9ydChzdHJ1Y3QgdXNlcl9wb3J0ICp1cF9wdHIpCi17Ci0JaWYgKHVwX3B0ci0+dXNlcl9yZWYgPT0gMCkKLQkJcmV0dXJuIDA7Ci0JaWYgKHVwX3B0ci0+dXNlcl9yZWYgPiBNQVhfVVNFUklEKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoIXVzZXJzICkKLQkJcmV0dXJuIC1FTk9QUk9UT09QVDsKLQotCXNwaW5fbG9ja19iaCgmcmVnX2xvY2spOwotCWxpc3RfZGVsX2luaXQoJnVwX3B0ci0+dXBvcnRfbGlzdCk7Ci0Jc3Bpbl91bmxvY2tfYmgoJnJlZ19sb2NrKTsKLQlyZXR1cm4gMDsKLX0KLQpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvdXNlcl9yZWcuaCBiL25ldC90aXBjL3VzZXJfcmVnLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxZGMxMmUuLjAwMDAwMDAKLS0tIGEvbmV0L3RpcGMvdXNlcl9yZWcuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0gKiBuZXQvdGlwYy91c2VyX3JlZy5oOiBJbmNsdWRlIGZpbGUgZm9yIFRJUEMgdXNlciByZWdpc3RyeSBjb2RlCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMDYsIEVyaWNzc29uIEFCCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIFdpbmQgUml2ZXIgU3lzdGVtcwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWVzIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVycyBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogQWx0ZXJuYXRpdmVseSwgdGhpcyBzb2Z0d2FyZSBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKCJHUEwiKSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCi0gKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQotICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQotICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBfVElQQ19VU0VSX1JFR19ICi0jZGVmaW5lIF9USVBDX1VTRVJfUkVHX0gKLQotI2luY2x1ZGUgInBvcnQuaCIKLQotaW50IHRpcGNfcmVnX3N0YXJ0KHZvaWQpOwotdm9pZCB0aXBjX3JlZ19zdG9wKHZvaWQpOwotCi1pbnQgdGlwY19yZWdfYWRkX3BvcnQoc3RydWN0IHVzZXJfcG9ydCAqdXBfcHRyKTsKLWludCB0aXBjX3JlZ19yZW1vdmVfcG9ydChzdHJ1Y3QgdXNlcl9wb3J0ICp1cF9wdHIpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL25ldC90aXBjL3pvbmUuYyBiL25ldC90aXBjL3pvbmUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODNmOGI1ZS4uMDAwMDAwMAotLS0gYS9uZXQvdGlwYy96b25lLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNjIgKzAsMCBAQAotLyoKLSAqIG5ldC90aXBjL3pvbmUuYzogVElQQyB6b25lIG1hbmFnZW1lbnQgcm91dGluZXMKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNiwgRXJpY3Nzb24gQUIKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgV2luZCBSaXZlciBTeXN0ZW1zCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZXMgb2YgdGhlIGNvcHlyaWdodCBob2xkZXJzIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBBbHRlcm5hdGl2ZWx5LCB0aGlzIHNvZnR3YXJlIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoIkdQTCIpIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKLSAqIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCi0gKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCi0gKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29yZS5oIgotI2luY2x1ZGUgInpvbmUuaCIKLSNpbmNsdWRlICJuZXQuaCIKLSNpbmNsdWRlICJhZGRyLmgiCi0jaW5jbHVkZSAibm9kZV9zdWJzY3IuaCIKLSNpbmNsdWRlICJjbHVzdGVyLmgiCi0jaW5jbHVkZSAibm9kZS5oIgotCi1zdHJ1Y3QgX3pvbmUgKnRpcGNfem9uZV9jcmVhdGUodTMyIGFkZHIpCi17Ci0Jc3RydWN0IF96b25lICp6X3B0cjsKLQl1MzIgel9udW07Ci0KLQlpZiAoIXRpcGNfYWRkcl9kb21haW5fdmFsaWQoYWRkcikpIHsKLQkJZXJyKCJab25lIGNyZWF0aW9uIGZhaWxlZCwgaW52YWxpZCBkb21haW4gMHgleFxuIiwgYWRkcik7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCXpfcHRyID0ga3phbGxvYyhzaXplb2YoKnpfcHRyKSwgR0ZQX0FUT01JQyk7Ci0JaWYgKCF6X3B0cikgewotCQl3YXJuKCJab25lIGNyZWF0aW9uIGZhaWxlZCwgaW5zdWZmaWNpZW50IG1lbW9yeVxuIik7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCXpfbnVtID0gdGlwY196b25lKGFkZHIpOwotCXpfcHRyLT5hZGRyID0gdGlwY19hZGRyKHpfbnVtLCAwLCAwKTsKLQl0aXBjX25ldC56b25lc1t6X251bV0gPSB6X3B0cjsKLQlyZXR1cm4gel9wdHI7Ci19Ci0KLXZvaWQgdGlwY196b25lX2RlbGV0ZShzdHJ1Y3QgX3pvbmUgKnpfcHRyKQotewotCXUzMiBjX251bTsKLQotCWlmICghel9wdHIpCi0JCXJldHVybjsKLQlmb3IgKGNfbnVtID0gMTsgY19udW0gPD0gdGlwY19tYXhfY2x1c3RlcnM7IGNfbnVtKyspIHsKLQkJdGlwY19jbHRyX2RlbGV0ZSh6X3B0ci0+Y2x1c3RlcnNbY19udW1dKTsKLQl9Ci0Ja2ZyZWUoel9wdHIpOwotfQotCi12b2lkIHRpcGNfem9uZV9hdHRhY2hfY2x1c3RlcihzdHJ1Y3QgX3pvbmUgKnpfcHRyLCBzdHJ1Y3QgY2x1c3RlciAqY19wdHIpCi17Ci0JdTMyIGNfbnVtID0gdGlwY19jbHVzdGVyKGNfcHRyLT5hZGRyKTsKLQotCWFzc2VydChjX3B0ci0+YWRkcik7Ci0JYXNzZXJ0KGNfbnVtIDw9IHRpcGNfbWF4X2NsdXN0ZXJzKTsKLQlhc3NlcnQoel9wdHItPmNsdXN0ZXJzW2NfbnVtXSA9PSBOVUxMKTsKLQl6X3B0ci0+Y2x1c3RlcnNbY19udW1dID0gY19wdHI7Ci19Ci0KLXZvaWQgdGlwY196b25lX3JlbW92ZV9hc19yb3V0ZXIoc3RydWN0IF96b25lICp6X3B0ciwgdTMyIHJvdXRlcikKLXsKLQl1MzIgY19udW07Ci0KLQlmb3IgKGNfbnVtID0gMTsgY19udW0gPD0gdGlwY19tYXhfY2x1c3RlcnM7IGNfbnVtKyspIHsKLQkJaWYgKHpfcHRyLT5jbHVzdGVyc1tjX251bV0pIHsKLQkJCXRpcGNfY2x0cl9yZW1vdmVfYXNfcm91dGVyKHpfcHRyLT5jbHVzdGVyc1tjX251bV0sCi0JCQkJCQkgICByb3V0ZXIpOwotCQl9Ci0JfQotfQotCi12b2lkIHRpcGNfem9uZV9zZW5kX2V4dGVybmFsX3JvdXRlcyhzdHJ1Y3QgX3pvbmUgKnpfcHRyLCB1MzIgZGVzdCkKLXsKLQl1MzIgY19udW07Ci0KLQlmb3IgKGNfbnVtID0gMTsgY19udW0gPD0gdGlwY19tYXhfY2x1c3RlcnM7IGNfbnVtKyspIHsKLQkJaWYgKHpfcHRyLT5jbHVzdGVyc1tjX251bV0pIHsKLQkJCWlmIChpbl9vd25fY2x1c3Rlcih6X3B0ci0+YWRkcikpCi0JCQkJY29udGludWU7Ci0JCQl0aXBjX2NsdHJfc2VuZF9leHRfcm91dGVzKHpfcHRyLT5jbHVzdGVyc1tjX251bV0sIGRlc3QpOwotCQl9Ci0JfQotfQotCi1zdHJ1Y3QgdGlwY19ub2RlICp0aXBjX3pvbmVfc2VsZWN0X3JlbW90ZV9ub2RlKHN0cnVjdCBfem9uZSAqel9wdHIsIHUzMiBhZGRyLCB1MzIgcmVmKQotewotCXN0cnVjdCBjbHVzdGVyICpjX3B0cjsKLQlzdHJ1Y3QgdGlwY19ub2RlICpuX3B0cjsKLQl1MzIgY19udW07Ci0KLQlpZiAoIXpfcHRyKQotCQlyZXR1cm4gTlVMTDsKLQljX3B0ciA9IHpfcHRyLT5jbHVzdGVyc1t0aXBjX2NsdXN0ZXIoYWRkcildOwotCWlmICghY19wdHIpCi0JCXJldHVybiBOVUxMOwotCW5fcHRyID0gdGlwY19jbHRyX3NlbGVjdF9ub2RlKGNfcHRyLCByZWYpOwotCWlmIChuX3B0cikKLQkJcmV0dXJuIG5fcHRyOwotCi0JLyogTGlua3MgdG8gYW55IG90aGVyIGNsdXN0ZXJzIHdpdGhpbiB0aGlzIHpvbmUgPyAqLwotCWZvciAoY19udW0gPSAxOyBjX251bSA8PSB0aXBjX21heF9jbHVzdGVyczsgY19udW0rKykgewotCQljX3B0ciA9IHpfcHRyLT5jbHVzdGVyc1tjX251bV07Ci0JCWlmICghY19wdHIpCi0JCQlyZXR1cm4gTlVMTDsKLQkJbl9wdHIgPSB0aXBjX2NsdHJfc2VsZWN0X25vZGUoY19wdHIsIHJlZik7Ci0JCWlmIChuX3B0cikKLQkJCXJldHVybiBuX3B0cjsKLQl9Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLXUzMiB0aXBjX3pvbmVfc2VsZWN0X3JvdXRlcihzdHJ1Y3QgX3pvbmUgKnpfcHRyLCB1MzIgYWRkciwgdTMyIHJlZikKLXsKLQlzdHJ1Y3QgY2x1c3RlciAqY19wdHI7Ci0JdTMyIGNfbnVtOwotCXUzMiByb3V0ZXI7Ci0KLQlpZiAoIXpfcHRyKQotCQlyZXR1cm4gMDsKLQljX3B0ciA9IHpfcHRyLT5jbHVzdGVyc1t0aXBjX2NsdXN0ZXIoYWRkcildOwotCXJvdXRlciA9IGNfcHRyID8gdGlwY19jbHRyX3NlbGVjdF9yb3V0ZXIoY19wdHIsIHJlZikgOiAwOwotCWlmIChyb3V0ZXIpCi0JCXJldHVybiByb3V0ZXI7Ci0KLQkvKiBMaW5rcyB0byBhbnkgb3RoZXIgY2x1c3RlcnMgd2l0aGluIHRoZSB6b25lPyAqLwotCWZvciAoY19udW0gPSAxOyBjX251bSA8PSB0aXBjX21heF9jbHVzdGVyczsgY19udW0rKykgewotCQljX3B0ciA9IHpfcHRyLT5jbHVzdGVyc1tjX251bV07Ci0JCXJvdXRlciA9IGNfcHRyID8gdGlwY19jbHRyX3NlbGVjdF9yb3V0ZXIoY19wdHIsIHJlZikgOiAwOwotCQlpZiAocm91dGVyKQotCQkJcmV0dXJuIHJvdXRlcjsKLQl9Ci0JcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9uZXQvdGlwYy96b25lLmggYi9uZXQvdGlwYy96b25lLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkMWMyMGMuLjAwMDAwMDAKLS0tIGEvbmV0L3RpcGMvem9uZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotLyoKLSAqIG5ldC90aXBjL3pvbmUuaDogSW5jbHVkZSBmaWxlIGZvciBUSVBDIHpvbmUgbWFuYWdlbWVudCByb3V0aW5lcwotICoKLSAqIENvcHlyaWdodCAoYykgMjAwMC0yMDA2LCBFcmljc3NvbiBBQgotICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDYsIFdpbmQgUml2ZXIgU3lzdGVtcwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWVzIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVycyBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogQWx0ZXJuYXRpdmVseSwgdGhpcyBzb2Z0d2FyZSBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKCJHUEwiKSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCi0gKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQotICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQotICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBfVElQQ19aT05FX0gKLSNkZWZpbmUgX1RJUENfWk9ORV9ICi0KLSNpbmNsdWRlICJub2RlX3N1YnNjci5oIgotI2luY2x1ZGUgIm5ldC5oIgotCi0KLS8qKgotICogc3RydWN0IF96b25lIC0gVElQQyB6b25lIHN0cnVjdHVyZQotICogQGFkZHI6IG5ldHdvcmsgYWRkcmVzcyBvZiB6b25lCi0gKiBAY2x1c3RlcnM6IGFycmF5IG9mIHBvaW50ZXJzIHRvIGFsbCBjbHVzdGVycyB3aXRoaW4gem9uZQotICogQGxpbmtzOiBudW1iZXIgb2YgKHVuaWNhc3QpIGxpbmtzIHRvIHpvbmUKLSAqLwotCi1zdHJ1Y3QgX3pvbmUgewotCXUzMiBhZGRyOwotCXN0cnVjdCBjbHVzdGVyICpjbHVzdGVyc1syXTsgLyogY3VycmVudGx5IGxpbWl0ZWQgdG8ganVzdCAxIGNsdXN0ZXIgKi8KLQl1MzIgbGlua3M7Ci19OwotCi1zdHJ1Y3QgdGlwY19ub2RlICp0aXBjX3pvbmVfc2VsZWN0X3JlbW90ZV9ub2RlKHN0cnVjdCBfem9uZSAqel9wdHIsIHUzMiBhZGRyLCB1MzIgcmVmKTsKLXUzMiB0aXBjX3pvbmVfc2VsZWN0X3JvdXRlcihzdHJ1Y3QgX3pvbmUgKnpfcHRyLCB1MzIgYWRkciwgdTMyIHJlZik7Ci12b2lkIHRpcGNfem9uZV9yZW1vdmVfYXNfcm91dGVyKHN0cnVjdCBfem9uZSAqel9wdHIsIHUzMiByb3V0ZXIpOwotdm9pZCB0aXBjX3pvbmVfc2VuZF9leHRlcm5hbF9yb3V0ZXMoc3RydWN0IF96b25lICp6X3B0ciwgdTMyIGRlc3QpOwotc3RydWN0IF96b25lICp0aXBjX3pvbmVfY3JlYXRlKHUzMiBhZGRyKTsKLXZvaWQgdGlwY196b25lX2RlbGV0ZShzdHJ1Y3QgX3pvbmUgKnpfcHRyKTsKLXZvaWQgdGlwY196b25lX2F0dGFjaF9jbHVzdGVyKHN0cnVjdCBfem9uZSAqel9wdHIsIHN0cnVjdCBjbHVzdGVyICpjX3B0cik7Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IF96b25lICp0aXBjX3pvbmVfZmluZCh1MzIgYWRkcikKLXsKLQlyZXR1cm4gdGlwY19uZXQuem9uZXNbdGlwY196b25lKGFkZHIpXTsKLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvdW5peC9hZl91bml4LmMgYi9uZXQvdW5peC9hZl91bml4LmMKaW5kZXggMjI2OGU2Ny4uZGQ0MTlkMiAxMDA2NDQKLS0tIGEvbmV0L3VuaXgvYWZfdW5peC5jCisrKyBiL25ldC91bml4L2FmX3VuaXguYwpAQCAtMzE2LDcgKzMxNiw4IEBACiAJaWYgKHVuaXhfd3JpdGFibGUoc2spKSB7CiAJCXdxID0gcmN1X2RlcmVmZXJlbmNlKHNrLT5za193cSk7CiAJCWlmICh3cV9oYXNfc2xlZXBlcih3cSkpCi0JCQl3YWtlX3VwX2ludGVycnVwdGlibGVfc3luYygmd3EtPndhaXQpOworCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlX3N5bmNfcG9sbCgmd3EtPndhaXQsCisJCQkJUE9MTE9VVCB8IFBPTExXUk5PUk0gfCBQT0xMV1JCQU5EKTsKIAkJc2tfd2FrZV9hc3luYyhzaywgU09DS19XQUtFX1NQQUNFLCBQT0xMX09VVCk7CiAJfQogCXJjdV9yZWFkX3VubG9jaygpOwpAQCAtMTE1Niw3ICsxMTU3LDcgQEAKIAkJZ290byByZXN0YXJ0OwogCX0KIAotCWVyciA9IHNlY3VyaXR5X3VuaXhfc3RyZWFtX2Nvbm5lY3Qoc29jaywgb3RoZXItPnNrX3NvY2tldCwgbmV3c2spOworCWVyciA9IHNlY3VyaXR5X3VuaXhfc3RyZWFtX2Nvbm5lY3Qoc2ssIG90aGVyLCBuZXdzayk7CiAJaWYgKGVycikgewogCQl1bml4X3N0YXRlX3VubG9jayhzayk7CiAJCWdvdG8gb3V0X3VubG9jazsKQEAgLTE3MzYsNyArMTczNyw4IEBACiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKLQl3YWtlX3VwX2ludGVycnVwdGlibGVfc3luYygmdS0+cGVlcl93YWl0KTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGVfc3luY19wb2xsKCZ1LT5wZWVyX3dhaXQsCisJCQkJCVBPTExPVVQgfCBQT0xMV1JOT1JNIHwgUE9MTFdSQkFORCk7CiAKIAlpZiAobXNnLT5tc2dfbmFtZSkKIAkJdW5peF9jb3B5X2FkZHIobXNnLCBza2ItPnNrKTsKQEAgLTIwOTksMTMgKzIxMDEsMTIgQEAKIAlpZiAoc2stPnNrX2VyciB8fCAhc2tiX3F1ZXVlX2VtcHR5KCZzay0+c2tfZXJyb3JfcXVldWUpKQogCQltYXNrIHw9IFBPTExFUlI7CiAJaWYgKHNrLT5za19zaHV0ZG93biAmIFJDVl9TSFVURE9XTikKLQkJbWFzayB8PSBQT0xMUkRIVVA7CisJCW1hc2sgfD0gUE9MTFJESFVQIHwgUE9MTElOIHwgUE9MTFJETk9STTsKIAlpZiAoc2stPnNrX3NodXRkb3duID09IFNIVVRET1dOX01BU0spCiAJCW1hc2sgfD0gUE9MTEhVUDsKIAogCS8qIHJlYWRhYmxlPyAqLwotCWlmICghc2tiX3F1ZXVlX2VtcHR5KCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSkgfHwKLQkgICAgKHNrLT5za19zaHV0ZG93biAmIFJDVl9TSFVURE9XTikpCisJaWYgKCFza2JfcXVldWVfZW1wdHkoJnNrLT5za19yZWNlaXZlX3F1ZXVlKSkKIAkJbWFzayB8PSBQT0xMSU4gfCBQT0xMUkROT1JNOwogCiAJLyogQ29ubmVjdGlvbi1iYXNlZCBuZWVkIHRvIGNoZWNrIGZvciB0ZXJtaW5hdGlvbiBhbmQgc3RhcnR1cCAqLwpAQCAtMjExNywyMCArMjExOCwxOSBAQAogCQkJcmV0dXJuIG1hc2s7CiAJfQogCi0JLyogd3JpdGFibGU/ICovCi0Jd3JpdGFibGUgPSB1bml4X3dyaXRhYmxlKHNrKTsKLQlpZiAod3JpdGFibGUpIHsKLQkJb3RoZXIgPSB1bml4X3BlZXJfZ2V0KHNrKTsKLQkJaWYgKG90aGVyKSB7Ci0JCQlpZiAodW5peF9wZWVyKG90aGVyKSAhPSBzaykgewotCQkJCXNvY2tfcG9sbF93YWl0KGZpbGUsICZ1bml4X3NrKG90aGVyKS0+cGVlcl93YWl0LAotCQkJCQkgIHdhaXQpOwotCQkJCWlmICh1bml4X3JlY3ZxX2Z1bGwob3RoZXIpKQotCQkJCQl3cml0YWJsZSA9IDA7Ci0JCQl9CisJLyogTm8gd3JpdGUgc3RhdHVzIHJlcXVlc3RlZCwgYXZvaWQgZXhwZW5zaXZlIE9VVCB0ZXN0cy4gKi8KKwlpZiAod2FpdCAmJiAhKHdhaXQtPmtleSAmIChQT0xMV1JCQU5EIHwgUE9MTFdSTk9STSB8IFBPTExPVVQpKSkKKwkJcmV0dXJuIG1hc2s7CiAKLQkJCXNvY2tfcHV0KG90aGVyKTsKKwl3cml0YWJsZSA9IHVuaXhfd3JpdGFibGUoc2spOworCW90aGVyID0gdW5peF9wZWVyX2dldChzayk7CisJaWYgKG90aGVyKSB7CisJCWlmICh1bml4X3BlZXIob3RoZXIpICE9IHNrKSB7CisJCQlzb2NrX3BvbGxfd2FpdChmaWxlLCAmdW5peF9zayhvdGhlciktPnBlZXJfd2FpdCwgd2FpdCk7CisJCQlpZiAodW5peF9yZWN2cV9mdWxsKG90aGVyKSkKKwkJCQl3cml0YWJsZSA9IDA7CiAJCX0KKwkJc29ja19wdXQob3RoZXIpOwogCX0KIAogCWlmICh3cml0YWJsZSkKZGlmZiAtLWdpdCBhL25ldC93YW5yb3V0ZXIvTWFrZWZpbGUgYi9uZXQvd2Fucm91dGVyL01ha2VmaWxlCmluZGV4IDlmMTg4YWIuLjRkYTE0YmMgMTAwNjQ0Ci0tLSBhL25ldC93YW5yb3V0ZXIvTWFrZWZpbGUKKysrIGIvbmV0L3dhbnJvdXRlci9NYWtlZmlsZQpAQCAtNCw0ICs0LDQgQEAKIAogb2JqLSQoQ09ORklHX1dBTl9ST1VURVIpICs9IHdhbnJvdXRlci5vCiAKLXdhbnJvdXRlci1vYmpzIDo9ICB3YW5wcm9jLm8gd2FubWFpbi5vCit3YW5yb3V0ZXIteSA6PSAgd2FucHJvYy5vIHdhbm1haW4ubwpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL01ha2VmaWxlIGIvbmV0L3dpcmVsZXNzL01ha2VmaWxlCmluZGV4IGU3N2U1MDguLjU1YTI4YWIgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9NYWtlZmlsZQorKysgYi9uZXQvd2lyZWxlc3MvTWFrZWZpbGUKQEAgLTEwLDcgKzEwLDcgQEAKIG9iai0kKENPTkZJR19XRVhUX1BSSVYpICs9IHdleHQtcHJpdi5vCiAKIGNmZzgwMjExLXkgKz0gY29yZS5vIHN5c2ZzLm8gcmFkaW90YXAubyB1dGlsLm8gcmVnLm8gc2Nhbi5vIG5sODAyMTEubwotY2ZnODAyMTEteSArPSBtbG1lLm8gaWJzcy5vIHNtZS5vIGNoYW4ubyBldGh0b29sLm8KK2NmZzgwMjExLXkgKz0gbWxtZS5vIGlic3MubyBzbWUubyBjaGFuLm8gZXRodG9vbC5vIG1lc2gubwogY2ZnODAyMTEtJChDT05GSUdfQ0ZHODAyMTFfREVCVUdGUykgKz0gZGVidWdmcy5vCiBjZmc4MDIxMS0kKENPTkZJR19DRkc4MDIxMV9XRVhUKSArPSB3ZXh0LWNvbXBhdC5vIHdleHQtc21lLm8KIGNmZzgwMjExLSQoQ09ORklHX0NGRzgwMjExX0lOVEVSTkFMX1JFR0RCKSArPSByZWdkYi5vCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvY29yZS5jIGIvbmV0L3dpcmVsZXNzL2NvcmUuYwppbmRleCA5YzIxZWJmLi5lOWE1ZjhjIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvY29yZS5jCisrKyBiL25ldC93aXJlbGVzcy9jb3JlLmMKQEAgLTQsNiArNCw4IEBACiAgKiBDb3B5cmlnaHQgMjAwNi0yMDEwCQlKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgogICovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L2lmLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CkBAIC0yMTYsOCArMjE4LDcgQEAKIAkJCSAgICByZGV2LT53aXBoeS5kZWJ1Z2ZzZGlyLAogCQkJICAgIHJkZXYtPndpcGh5LmRlYnVnZnNkaXItPmRfcGFyZW50LAogCQkJICAgIG5ld25hbWUpKQotCQlwcmludGsoS0VSTl9FUlIgImNmZzgwMjExOiBmYWlsZWQgdG8gcmVuYW1lIGRlYnVnZnMgZGlyIHRvICVzIVxuIiwKLQkJICAgICAgIG5ld25hbWUpOworCQlwcl9lcnIoImZhaWxlZCB0byByZW5hbWUgZGVidWdmcyBkaXIgdG8gJXMhXG4iLCBuZXduYW1lKTsKIAogCW5sODAyMTFfbm90aWZ5X2Rldl9yZW5hbWUocmRldik7CiAKQEAgLTMzMSw2ICszMzIsNyBAQAogCVdBUk5fT04ob3BzLT5hZGRfdmlydHVhbF9pbnRmICYmICFvcHMtPmRlbF92aXJ0dWFsX2ludGYpOwogCVdBUk5fT04ob3BzLT5hZGRfc3RhdGlvbiAmJiAhb3BzLT5kZWxfc3RhdGlvbik7CiAJV0FSTl9PTihvcHMtPmFkZF9tcGF0aCAmJiAhb3BzLT5kZWxfbXBhdGgpOworCVdBUk5fT04ob3BzLT5qb2luX21lc2ggJiYgIW9wcy0+bGVhdmVfbWVzaCk7CiAKIAlhbGxvY19zaXplID0gc2l6ZW9mKCpyZGV2KSArIHNpemVvZl9wcml2OwogCkBAIC02OTksOCArNzAxLDcgQEAKIAogCQlpZiAoc3lzZnNfY3JlYXRlX2xpbmsoJmRldi0+ZGV2LmtvYmosICZyZGV2LT53aXBoeS5kZXYua29iaiwKIAkJCQkgICAgICAicGh5ODAyMTEiKSkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJ3aXJlbGVzczogZmFpbGVkIHRvIGFkZCBwaHk4MDIxMSAiCi0JCQkJInN5bWxpbmsgdG8gbmV0ZGV2IVxuIik7CisJCQlwcl9lcnIoImZhaWxlZCB0byBhZGQgcGh5ODAyMTEgc3ltbGluayB0byBuZXRkZXYhXG4iKTsKIAkJfQogCQl3ZGV2LT5uZXRkZXYgPSBkZXY7CiAJCXdkZXYtPnNtZV9zdGF0ZSA9IENGRzgwMjExX1NNRV9JRExFOwpAQCAtNzUyLDYgKzc1Myw5IEBACiAJCQljZmc4MDIxMV9tbG1lX2Rvd24ocmRldiwgZGV2KTsKIAkJCXdkZXZfdW5sb2NrKHdkZXYpOwogCQkJYnJlYWs7CisJCWNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDoKKwkJCWNmZzgwMjExX2xlYXZlX21lc2gocmRldiwgZGV2KTsKKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJYnJlYWs7CiAJCX0KQEAgLTc3NSwyMCArNzc5LDM3IEBACiAJCX0KIAkJY2ZnODAyMTFfbG9ja19yZGV2KHJkZXYpOwogCQltdXRleF9sb2NrKCZyZGV2LT5kZXZsaXN0X210eCk7Ci0jaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFQKIAkJd2Rldl9sb2NrKHdkZXYpOwogCQlzd2l0Y2ggKHdkZXYtPmlmdHlwZSkgeworI2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUCiAJCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CiAJCQljZmc4MDIxMV9pYnNzX3dleHRfam9pbihyZGV2LCB3ZGV2KTsKIAkJCWJyZWFrOwogCQljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CiAJCQljZmc4MDIxMV9tZ2Rfd2V4dF9jb25uZWN0KHJkZXYsIHdkZXYpOwogCQkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSAorCQljYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6CisJCQl7CisJCQkJLyogYmFja3dhcmQgY29tcGF0IGNvZGUuLi4gKi8KKwkJCQlzdHJ1Y3QgbWVzaF9zZXR1cCBzZXR1cDsKKwkJCQltZW1jcHkoJnNldHVwLCAmZGVmYXVsdF9tZXNoX3NldHVwLAorCQkJCQkJc2l6ZW9mKHNldHVwKSk7CisJCQkJIC8qIGJhY2sgY29tcGF0IG9ubHkgbmVlZGVkIGZvciBtZXNoX2lkICovCisJCQkJc2V0dXAubWVzaF9pZCA9IHdkZXYtPnNzaWQ7CisJCQkJc2V0dXAubWVzaF9pZF9sZW4gPSB3ZGV2LT5tZXNoX2lkX3VwX2xlbjsKKwkJCQlpZiAod2Rldi0+bWVzaF9pZF91cF9sZW4pCisJCQkJCV9fY2ZnODAyMTFfam9pbl9tZXNoKHJkZXYsIGRldiwKKwkJCQkJCQkmc2V0dXAsCisJCQkJCQkJJmRlZmF1bHRfbWVzaF9jb25maWcpOworCQkJCWJyZWFrOworCQkJfQorI2VuZGlmCiAJCWRlZmF1bHQ6CiAJCQlicmVhazsKIAkJfQogCQl3ZGV2X3VubG9jayh3ZGV2KTsKLSNlbmRpZgogCQlyZGV2LT5vcGVuY291bnQrKzsKIAkJbXV0ZXhfdW5sb2NrKCZyZGV2LT5kZXZsaXN0X210eCk7CiAJCWNmZzgwMjExX3VubG9ja19yZGV2KHJkZXYpOwpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2NvcmUuaCBiL25ldC93aXJlbGVzcy9jb3JlLmgKaW5kZXggNjU4M2NjYS4uMjZhMGEwOCAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL2NvcmUuaAorKysgYi9uZXQvd2lyZWxlc3MvY29yZS5oCkBAIC0yODUsNiArMjg1LDIwIEBACiBpbnQgY2ZnODAyMTFfaWJzc193ZXh0X2pvaW4oc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCQkJICAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpOwogCisvKiBtZXNoICovCitleHRlcm4gY29uc3Qgc3RydWN0IG1lc2hfY29uZmlnIGRlZmF1bHRfbWVzaF9jb25maWc7CitleHRlcm4gY29uc3Qgc3RydWN0IG1lc2hfc2V0dXAgZGVmYXVsdF9tZXNoX3NldHVwOworaW50IF9fY2ZnODAyMTFfam9pbl9tZXNoKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJIGNvbnN0IHN0cnVjdCBtZXNoX3NldHVwICpzZXR1cCwKKwkJCSBjb25zdCBzdHJ1Y3QgbWVzaF9jb25maWcgKmNvbmYpOworaW50IGNmZzgwMjExX2pvaW5fbWVzaChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkgICAgICAgY29uc3Qgc3RydWN0IG1lc2hfc2V0dXAgKnNldHVwLAorCQkgICAgICAgY29uc3Qgc3RydWN0IG1lc2hfY29uZmlnICpjb25mKTsKK2ludCBjZmc4MDIxMV9sZWF2ZV9tZXNoKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworCiAvKiBNTE1FICovCiBpbnQgX19jZmc4MDIxMV9tbG1lX2F1dGgoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCQkJIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCkBAIC0zNDEsOSArMzU1LDkgQEAKIHZvaWQgY2ZnODAyMTFfbWxtZV9wdXJnZV9yZWdpc3RyYXRpb25zKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpOwogaW50IGNmZzgwMjExX21sbWVfbWdtdF90eChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCiAJCQkgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbiwKKwkJCSAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuLCBib29sIG9mZmNoYW4sCiAJCQkgIGVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgY2hhbm5lbF90eXBlLAotCQkJICBib29sIGNoYW5uZWxfdHlwZV92YWxpZCwKKwkJCSAgYm9vbCBjaGFubmVsX3R5cGVfdmFsaWQsIHVuc2lnbmVkIGludCB3YWl0LAogCQkJICBjb25zdCB1OCAqYnVmLCBzaXplX3QgbGVuLCB1NjQgKmNvb2tpZSk7CiAKIC8qIFNNRSAqLwpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2xpYjgwMjExLmMgYi9uZXQvd2lyZWxlc3MvbGliODAyMTEuYwppbmRleCA5N2Q0MTFmLi4zMjY4ZmFjIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvbGliODAyMTEuYworKysgYi9uZXQvd2lyZWxlc3MvbGliODAyMTEuYwpAQCAtMTMsNiArMTMsOCBAQAogICoKICAqLwogCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogI2luY2x1ZGUgPGxpbnV4L2llZWU4MDIxMS5oPgpAQCAtMjI0LDggKzIyNiw4IEBACiAJcmV0dXJuIC1FSU5WQUw7CiAKICAgICAgIGZvdW5kOgotCXByaW50ayhLRVJOX0RFQlVHICJsaWI4MDIxMV9jcnlwdDogdW5yZWdpc3RlcmVkIGFsZ29yaXRobSAiCi0JICAgICAgICInJXMnXG4iLCBvcHMtPm5hbWUpOworCXByaW50ayhLRVJOX0RFQlVHICJsaWI4MDIxMV9jcnlwdDogdW5yZWdpc3RlcmVkIGFsZ29yaXRobSAnJXMnXG4iLAorCSAgICAgICBvcHMtPm5hbWUpOwogCWxpc3RfZGVsKCZhbGctPmxpc3QpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxpYjgwMjExX2NyeXB0b19sb2NrLCBmbGFncyk7CiAJa2ZyZWUoYWxnKTsKQEAgLTI3MCw3ICsyNzIsNyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBsaWI4MDIxMV9pbml0KHZvaWQpCiB7Ci0JcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRSAiOiAiIERSVl9ERVNDUklQVElPTiAiXG4iKTsKKwlwcl9pbmZvKERSVl9ERVNDUklQVElPTiAiXG4iKTsKIAlyZXR1cm4gbGliODAyMTFfcmVnaXN0ZXJfY3J5cHRvX29wcygmbGliODAyMTFfY3J5cHRfbnVsbCk7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9saWI4MDIxMV9jcnlwdF90a2lwLmMgYi9uZXQvd2lyZWxlc3MvbGliODAyMTFfY3J5cHRfdGtpcC5jCmluZGV4IDBmZTQwNTEuLjdlYTRmMmIgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9saWI4MDIxMV9jcnlwdF90a2lwLmMKKysrIGIvbmV0L3dpcmVsZXNzL2xpYjgwMjExX2NyeXB0X3RraXAuYwpAQCAtMTAsNiArMTAsOCBAQAogICogbW9yZSBkZXRhaWxzLgogICovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTk5LDggKzEwMSw3IEBACiAJcHJpdi0+dHhfdGZtX2FyYzQgPSBjcnlwdG9fYWxsb2NfYmxrY2lwaGVyKCJlY2IoYXJjNCkiLCAwLAogCQkJCQkJQ1JZUFRPX0FMR19BU1lOQyk7CiAJaWYgKElTX0VSUihwcml2LT50eF90Zm1fYXJjNCkpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgImxpYjgwMjExX2NyeXB0X3RraXA6IGNvdWxkIG5vdCBhbGxvY2F0ZSAiCi0JCSAgICAgICAiY3J5cHRvIEFQSSBhcmM0XG4iKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgcHJfZm10KCJjb3VsZCBub3QgYWxsb2NhdGUgY3J5cHRvIEFQSSBhcmM0XG4iKSk7CiAJCXByaXYtPnR4X3RmbV9hcmM0ID0gTlVMTDsKIAkJZ290byBmYWlsOwogCX0KQEAgLTEwOCw4ICsxMDksNyBAQAogCXByaXYtPnR4X3RmbV9taWNoYWVsID0gY3J5cHRvX2FsbG9jX2hhc2goIm1pY2hhZWxfbWljIiwgMCwKIAkJCQkJCSBDUllQVE9fQUxHX0FTWU5DKTsKIAlpZiAoSVNfRVJSKHByaXYtPnR4X3RmbV9taWNoYWVsKSkgewotCQlwcmludGsoS0VSTl9ERUJVRyAibGliODAyMTFfY3J5cHRfdGtpcDogY291bGQgbm90IGFsbG9jYXRlICIKLQkJICAgICAgICJjcnlwdG8gQVBJIG1pY2hhZWxfbWljXG4iKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgcHJfZm10KCJjb3VsZCBub3QgYWxsb2NhdGUgY3J5cHRvIEFQSSBtaWNoYWVsX21pY1xuIikpOwogCQlwcml2LT50eF90Zm1fbWljaGFlbCA9IE5VTEw7CiAJCWdvdG8gZmFpbDsKIAl9CkBAIC0xMTcsOCArMTE3LDcgQEAKIAlwcml2LT5yeF90Zm1fYXJjNCA9IGNyeXB0b19hbGxvY19ibGtjaXBoZXIoImVjYihhcmM0KSIsIDAsCiAJCQkJCQlDUllQVE9fQUxHX0FTWU5DKTsKIAlpZiAoSVNfRVJSKHByaXYtPnJ4X3RmbV9hcmM0KSkgewotCQlwcmludGsoS0VSTl9ERUJVRyAibGliODAyMTFfY3J5cHRfdGtpcDogY291bGQgbm90IGFsbG9jYXRlICIKLQkJICAgICAgICJjcnlwdG8gQVBJIGFyYzRcbiIpOworCQlwcmludGsoS0VSTl9ERUJVRyBwcl9mbXQoImNvdWxkIG5vdCBhbGxvY2F0ZSBjcnlwdG8gQVBJIGFyYzRcbiIpKTsKIAkJcHJpdi0+cnhfdGZtX2FyYzQgPSBOVUxMOwogCQlnb3RvIGZhaWw7CiAJfQpAQCAtMTI2LDggKzEyNSw3IEBACiAJcHJpdi0+cnhfdGZtX21pY2hhZWwgPSBjcnlwdG9fYWxsb2NfaGFzaCgibWljaGFlbF9taWMiLCAwLAogCQkJCQkJIENSWVBUT19BTEdfQVNZTkMpOwogCWlmIChJU19FUlIocHJpdi0+cnhfdGZtX21pY2hhZWwpKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJsaWI4MDIxMV9jcnlwdF90a2lwOiBjb3VsZCBub3QgYWxsb2NhdGUgIgotCQkgICAgICAgImNyeXB0byBBUEkgbWljaGFlbF9taWNcbiIpOworCQlwcmludGsoS0VSTl9ERUJVRyBwcl9mbXQoImNvdWxkIG5vdCBhbGxvY2F0ZSBjcnlwdG8gQVBJIG1pY2hhZWxfbWljXG4iKSk7CiAJCXByaXYtPnJ4X3RmbV9taWNoYWVsID0gTlVMTDsKIAkJZ290byBmYWlsOwogCX0KQEAgLTUzNiw3ICs1MzQsNyBAQAogCXN0cnVjdCBzY2F0dGVybGlzdCBzZ1syXTsKIAogCWlmICh0Zm1fbWljaGFlbCA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIm1pY2hhZWxfbWljOiB0Zm1fbWljaGFlbCA9PSBOVUxMXG4iKTsKKwkJcHJfd2FybigiJXMoKTogdGZtX21pY2hhZWwgPT0gTlVMTFxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLTE7CiAJfQogCXNnX2luaXRfdGFibGUoc2csIDIpOwpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL21lc2guYyBiL25ldC93aXJlbGVzcy9tZXNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNlMzljMQotLS0gL2Rldi9udWxsCisrKyBiL25ldC93aXJlbGVzcy9tZXNoLmMKQEAgLTAsMCArMSwxNDIgQEAKKyNpbmNsdWRlIDxsaW51eC9pZWVlODAyMTEuaD4KKyNpbmNsdWRlIDxuZXQvY2ZnODAyMTEuaD4KKyNpbmNsdWRlICJjb3JlLmgiCisKKy8qIERlZmF1bHQgdmFsdWVzLCB0aW1lb3V0cyBpbiBtcyAqLworI2RlZmluZSBNRVNIX1RUTCAJCTMxCisjZGVmaW5lIE1FU0hfREVGQVVMVF9FTEVNRU5UX1RUTCAzMQorI2RlZmluZSBNRVNIX01BWF9SRVRSCSAJMworI2RlZmluZSBNRVNIX1JFVF9UIAkJMTAwCisjZGVmaW5lIE1FU0hfQ09ORl9UIAkJMTAwCisjZGVmaW5lIE1FU0hfSE9MRF9UIAkJMTAwCisKKyNkZWZpbmUgTUVTSF9QQVRIX1RJTUVPVVQJNTAwMAorCisvKgorICogTWluaW11bSBpbnRlcnZhbCBiZXR3ZWVuIHR3byBjb25zZWN1dGl2ZSBQUkVRcyBvcmlnaW5hdGVkIGJ5IHRoZSBzYW1lCisgKiBpbnRlcmZhY2UKKyAqLworI2RlZmluZSBNRVNIX1BSRVFfTUlOX0lOVAkxMAorI2RlZmluZSBNRVNIX0RJQU1fVFJBVkVSU0FMX1RJTUUgNTAKKworLyoKKyAqIEEgcGF0aCB3aWxsIGJlIHJlZnJlc2hlZCBpZiBpdCBpcyB1c2VkIFBBVEhfUkVGUkVTSF9USU1FIG1pbGxpc2Vjb25kcworICogYmVmb3JlIHRpbWluZyBvdXQuICBUaGlzIHdheSBpdCB3aWxsIHJlbWFpbiBBQ1RJVkUgYW5kIG5vIGRhdGEgZnJhbWVzCisgKiB3aWxsIGJlIHVubmVjZXNzYXJpbHkgaGVsZCBpbiB0aGUgcGVuZGluZyBxdWV1ZS4KKyAqLworI2RlZmluZSBNRVNIX1BBVEhfUkVGUkVTSF9USU1FCQkJMTAwMAorI2RlZmluZSBNRVNIX01JTl9ESVNDT1ZFUllfVElNRU9VVCAoMiAqIE1FU0hfRElBTV9UUkFWRVJTQUxfVElNRSkKKworLyogRGVmYXVsdCBtYXhpbXVtIG51bWJlciBvZiBlc3RhYmxpc2hlZCBwbGlua3MgcGVyIGludGVyZmFjZSAqLworI2RlZmluZSBNRVNIX01BWF9FU1RBQl9QTElOS1MJMzIKKworI2RlZmluZSBNRVNIX01BWF9QUkVRX1JFVFJJRVMJNAorCisKK2NvbnN0IHN0cnVjdCBtZXNoX2NvbmZpZyBkZWZhdWx0X21lc2hfY29uZmlnID0geworCS5kb3QxMU1lc2hSZXRyeVRpbWVvdXQgPSBNRVNIX1JFVF9ULAorCS5kb3QxMU1lc2hDb25maXJtVGltZW91dCA9IE1FU0hfQ09ORl9ULAorCS5kb3QxMU1lc2hIb2xkaW5nVGltZW91dCA9IE1FU0hfSE9MRF9ULAorCS5kb3QxMU1lc2hNYXhSZXRyaWVzID0gTUVTSF9NQVhfUkVUUiwKKwkuZG90MTFNZXNoVFRMID0gTUVTSF9UVEwsCisJLmVsZW1lbnRfdHRsID0gTUVTSF9ERUZBVUxUX0VMRU1FTlRfVFRMLAorCS5hdXRvX29wZW5fcGxpbmtzID0gdHJ1ZSwKKwkuZG90MTFNZXNoTWF4UGVlckxpbmtzID0gTUVTSF9NQVhfRVNUQUJfUExJTktTLAorCS5kb3QxMU1lc2hIV01QYWN0aXZlUGF0aFRpbWVvdXQgPSBNRVNIX1BBVEhfVElNRU9VVCwKKwkuZG90MTFNZXNoSFdNUHByZXFNaW5JbnRlcnZhbCA9IE1FU0hfUFJFUV9NSU5fSU5ULAorCS5kb3QxMU1lc2hIV01QbmV0RGlhbWV0ZXJUcmF2ZXJzYWxUaW1lID0gTUVTSF9ESUFNX1RSQVZFUlNBTF9USU1FLAorCS5kb3QxMU1lc2hIV01QbWF4UFJFUXJldHJpZXMgPSBNRVNIX01BWF9QUkVRX1JFVFJJRVMsCisJLnBhdGhfcmVmcmVzaF90aW1lID0gTUVTSF9QQVRIX1JFRlJFU0hfVElNRSwKKwkubWluX2Rpc2NvdmVyeV90aW1lb3V0ID0gTUVTSF9NSU5fRElTQ09WRVJZX1RJTUVPVVQsCit9OworCitjb25zdCBzdHJ1Y3QgbWVzaF9zZXR1cCBkZWZhdWx0X21lc2hfc2V0dXAgPSB7CisJLnBhdGhfc2VsX3Byb3RvID0gSUVFRTgwMjExX1BBVEhfUFJPVE9DT0xfSFdNUCwKKwkucGF0aF9tZXRyaWMgPSBJRUVFODAyMTFfUEFUSF9NRVRSSUNfQUlSVElNRSwKKwkudmVuZG9yX2llID0gTlVMTCwKKwkudmVuZG9yX2llX2xlbiA9IDAsCit9OworCitpbnQgX19jZmc4MDIxMV9qb2luX21lc2goc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgY29uc3Qgc3RydWN0IG1lc2hfc2V0dXAgKnNldHVwLAorCQkJIGNvbnN0IHN0cnVjdCBtZXNoX2NvbmZpZyAqY29uZikKK3sKKwlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LT5pZWVlODAyMTFfcHRyOworCWludCBlcnI7CisKKwlCVUlMRF9CVUdfT04oSUVFRTgwMjExX01BWF9TU0lEX0xFTiAhPSBJRUVFODAyMTFfTUFYX01FU0hfSURfTEVOKTsKKworCUFTU0VSVF9XREVWX0xPQ0sod2Rldik7CisKKwlpZiAoZGV2LT5pZWVlODAyMTFfcHRyLT5pZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJaWYgKHdkZXYtPm1lc2hfaWRfbGVuKQorCQlyZXR1cm4gLUVBTFJFQURZOworCisJaWYgKCFzZXR1cC0+bWVzaF9pZF9sZW4pCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFyZGV2LT5vcHMtPmpvaW5fbWVzaCkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJZXJyID0gcmRldi0+b3BzLT5qb2luX21lc2goJnJkZXYtPndpcGh5LCBkZXYsIGNvbmYsIHNldHVwKTsKKwlpZiAoIWVycikgeworCQltZW1jcHkod2Rldi0+c3NpZCwgc2V0dXAtPm1lc2hfaWQsIHNldHVwLT5tZXNoX2lkX2xlbik7CisJCXdkZXYtPm1lc2hfaWRfbGVuID0gc2V0dXAtPm1lc2hfaWRfbGVuOworCX0KKworCXJldHVybiBlcnI7Cit9CisKK2ludCBjZmc4MDIxMV9qb2luX21lc2goc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCBtZXNoX3NldHVwICpzZXR1cCwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCBtZXNoX2NvbmZpZyAqY29uZikKK3sKKwlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LT5pZWVlODAyMTFfcHRyOworCWludCBlcnI7CisKKwl3ZGV2X2xvY2sod2Rldik7CisJZXJyID0gX19jZmc4MDIxMV9qb2luX21lc2gocmRldiwgZGV2LCBzZXR1cCwgY29uZik7CisJd2Rldl91bmxvY2sod2Rldik7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9fY2ZnODAyMTFfbGVhdmVfbWVzaChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkJIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0+aWVlZTgwMjExX3B0cjsKKwlpbnQgZXJyOworCisJQVNTRVJUX1dERVZfTE9DSyh3ZGV2KTsKKworCWlmIChkZXYtPmllZWU4MDIxMV9wdHItPmlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlpZiAoIXJkZXYtPm9wcy0+bGVhdmVfbWVzaCkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJaWYgKCF3ZGV2LT5tZXNoX2lkX2xlbikKKwkJcmV0dXJuIC1FTk9UQ09OTjsKKworCWVyciA9IHJkZXYtPm9wcy0+bGVhdmVfbWVzaCgmcmRldi0+d2lwaHksIGRldik7CisJaWYgKCFlcnIpCisJCXdkZXYtPm1lc2hfaWRfbGVuID0gMDsKKwlyZXR1cm4gZXJyOworfQorCitpbnQgY2ZnODAyMTFfbGVhdmVfbWVzaChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtPmllZWU4MDIxMV9wdHI7CisJaW50IGVycjsKKworCXdkZXZfbG9jayh3ZGV2KTsKKwllcnIgPSBfX2NmZzgwMjExX2xlYXZlX21lc2gocmRldiwgZGV2KTsKKwl3ZGV2X3VubG9jayh3ZGV2KTsKKworCXJldHVybiBlcnI7Cit9CmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvbWxtZS5jIGIvbmV0L3dpcmVsZXNzL21sbWUuYwppbmRleCAyNjgzOGQ5Li5hYTVkZjg4IDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvbWxtZS5jCisrKyBiL25ldC93aXJlbGVzcy9tbG1lLmMKQEAgLTI2Myw2ICsyNjMsMjggQEAKIH0KIEVYUE9SVF9TWU1CT0woY2ZnODAyMTFfc2VuZF9kaXNhc3NvYyk7CiAKK3ZvaWQgY2ZnODAyMTFfc2VuZF91bnByb3RfZGVhdXRoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpidWYsCisJCQkJIHNpemVfdCBsZW4pCit7CisJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0+aWVlZTgwMjExX3B0cjsKKwlzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gd2Rldi0+d2lwaHk7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gd2lwaHlfdG9fZGV2KHdpcGh5KTsKKworCW5sODAyMTFfc2VuZF91bnByb3RfZGVhdXRoKHJkZXYsIGRldiwgYnVmLCBsZW4sIEdGUF9BVE9NSUMpOworfQorRVhQT1JUX1NZTUJPTChjZmc4MDIxMV9zZW5kX3VucHJvdF9kZWF1dGgpOworCit2b2lkIGNmZzgwMjExX3NlbmRfdW5wcm90X2Rpc2Fzc29jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpidWYsCisJCQkJICAgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LT5pZWVlODAyMTFfcHRyOworCXN0cnVjdCB3aXBoeSAqd2lwaHkgPSB3ZGV2LT53aXBoeTsKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19kZXYod2lwaHkpOworCisJbmw4MDIxMV9zZW5kX3VucHJvdF9kaXNhc3NvYyhyZGV2LCBkZXYsIGJ1ZiwgbGVuLCBHRlBfQVRPTUlDKTsKK30KK0VYUE9SVF9TWU1CT0woY2ZnODAyMTFfc2VuZF91bnByb3RfZGlzYXNzb2MpOworCiBzdGF0aWMgdm9pZCBfX2NmZzgwMjExX2F1dGhfcmVtb3ZlKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsIGNvbnN0IHU4ICphZGRyKQogewogCWludCBpOwpAQCAtODY0LDkgKzg4Niw5IEBACiAKIGludCBjZmc4MDIxMV9tbG1lX21nbXRfdHgoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4sCisJCQkgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbiwgYm9vbCBvZmZjaGFuLAogCQkJICBlbnVtIG5sODAyMTFfY2hhbm5lbF90eXBlIGNoYW5uZWxfdHlwZSwKLQkJCSAgYm9vbCBjaGFubmVsX3R5cGVfdmFsaWQsCisJCQkgIGJvb2wgY2hhbm5lbF90eXBlX3ZhbGlkLCB1bnNpZ25lZCBpbnQgd2FpdCwKIAkJCSAgY29uc3QgdTggKmJ1Ziwgc2l6ZV90IGxlbiwgdTY0ICpjb29raWUpCiB7CiAJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0+aWVlZTgwMjExX3B0cjsKQEAgLTk0Niw4ICs5NjgsOSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIFRyYW5zbWl0IHRoZSBBY3Rpb24gZnJhbWUgYXMgcmVxdWVzdGVkIGJ5IHVzZXIgc3BhY2UgKi8KLQlyZXR1cm4gcmRldi0+b3BzLT5tZ210X3R4KCZyZGV2LT53aXBoeSwgZGV2LCBjaGFuLCBjaGFubmVsX3R5cGUsCi0JCQkJICBjaGFubmVsX3R5cGVfdmFsaWQsIGJ1ZiwgbGVuLCBjb29raWUpOworCXJldHVybiByZGV2LT5vcHMtPm1nbXRfdHgoJnJkZXYtPndpcGh5LCBkZXYsIGNoYW4sIG9mZmNoYW4sCisJCQkJICBjaGFubmVsX3R5cGUsIGNoYW5uZWxfdHlwZV92YWxpZCwKKwkJCQkgIHdhaXQsIGJ1ZiwgbGVuLCBjb29raWUpOwogfQogCiBib29sIGNmZzgwMjExX3J4X21nbXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGZyZXEsIGNvbnN0IHU4ICpidWYsCkBAIC0xMDI4LDMgKzEwNTEsMTUgQEAKIAlubDgwMjExX3NlbmRfY3FtX3Jzc2lfbm90aWZ5KHJkZXYsIGRldiwgcnNzaV9ldmVudCwgZ2ZwKTsKIH0KIEVYUE9SVF9TWU1CT0woY2ZnODAyMTFfY3FtX3Jzc2lfbm90aWZ5KTsKKwordm9pZCBjZmc4MDIxMV9jcW1fcGt0bG9zc19ub3RpZnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgY29uc3QgdTggKnBlZXIsIHUzMiBudW1fcGFja2V0cywgZ2ZwX3QgZ2ZwKQoreworCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtPmllZWU4MDIxMV9wdHI7CisJc3RydWN0IHdpcGh5ICp3aXBoeSA9IHdkZXYtPndpcGh5OworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX2Rldih3aXBoeSk7CisKKwkvKiBJbmRpY2F0ZSByb2FtaW5nIHRyaWdnZXIgZXZlbnQgdG8gdXNlciBzcGFjZSAqLworCW5sODAyMTFfc2VuZF9jcW1fcGt0bG9zc19ub3RpZnkocmRldiwgZGV2LCBwZWVyLCBudW1fcGFja2V0cywgZ2ZwKTsKK30KK0VYUE9SVF9TWU1CT0woY2ZnODAyMTFfY3FtX3BrdGxvc3Nfbm90aWZ5KTsKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9ubDgwMjExLmMgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jCmluZGV4IDRlNzhlM2YuLjliNjI3MTAgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9ubDgwMjExLmMKKysrIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuYwpAQCAtMTIxLDggKzEyMSw5IEBACiAJW05MODAyMTFfQVRUUl9CU1NfU0hPUlRfU0xPVF9USU1FXSA9IHsgLnR5cGUgPSBOTEFfVTggfSwKIAlbTkw4MDIxMV9BVFRSX0JTU19CQVNJQ19SQVRFU10gPSB7IC50eXBlID0gTkxBX0JJTkFSWSwKIAkJCQkJICAgLmxlbiA9IE5MODAyMTFfTUFYX1NVUFBfUkFURVMgfSwKKwlbTkw4MDIxMV9BVFRSX0JTU19IVF9PUE1PREVdID0geyAudHlwZSA9IE5MQV9VMTYgfSwKIAotCVtOTDgwMjExX0FUVFJfTUVTSF9QQVJBTVNdID0geyAudHlwZSA9IE5MQV9ORVNURUQgfSwKKwlbTkw4MDIxMV9BVFRSX01FU0hfQ09ORklHXSA9IHsgLnR5cGUgPSBOTEFfTkVTVEVEIH0sCiAKIAlbTkw4MDIxMV9BVFRSX0hUX0NBUEFCSUxJVFldID0geyAudHlwZSA9IE5MQV9CSU5BUlksCiAJCQkJCSAubGVuID0gTkw4MDIxMV9IVF9DQVBBQklMSVRZX0xFTiB9LApAQCAtMTYzLDEwICsxNjQsMTQgQEAKIAlbTkw4MDIxMV9BVFRSX0NRTV0gPSB7IC50eXBlID0gTkxBX05FU1RFRCwgfSwKIAlbTkw4MDIxMV9BVFRSX0xPQ0FMX1NUQVRFX0NIQU5HRV0gPSB7IC50eXBlID0gTkxBX0ZMQUcgfSwKIAlbTkw4MDIxMV9BVFRSX0FQX0lTT0xBVEVdID0geyAudHlwZSA9IE5MQV9VOCB9LAotCiAJW05MODAyMTFfQVRUUl9XSVBIWV9UWF9QT1dFUl9TRVRUSU5HXSA9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCiAJW05MODAyMTFfQVRUUl9XSVBIWV9UWF9QT1dFUl9MRVZFTF0gPSB7IC50eXBlID0gTkxBX1UzMiB9LAogCVtOTDgwMjExX0FUVFJfRlJBTUVfVFlQRV0gPSB7IC50eXBlID0gTkxBX1UxNiB9LAorCVtOTDgwMjExX0FUVFJfV0lQSFlfQU5URU5OQV9UWF0gPSB7IC50eXBlID0gTkxBX1UzMiB9LAorCVtOTDgwMjExX0FUVFJfV0lQSFlfQU5URU5OQV9SWF0gPSB7IC50eXBlID0gTkxBX1UzMiB9LAorCVtOTDgwMjExX0FUVFJfTUNBU1RfUkFURV0gPSB7IC50eXBlID0gTkxBX1UzMiB9LAorCVtOTDgwMjExX0FUVFJfT0ZGQ0hBTk5FTF9UWF9PS10gPSB7IC50eXBlID0gTkxBX0ZMQUcgfSwKKwlbTkw4MDIxMV9BVFRSX0tFWV9ERUZBVUxUX1RZUEVTXSA9IHsgLnR5cGUgPSBOTEFfTkVTVEVEIH0sCiB9OwogCiAvKiBwb2xpY3kgZm9yIHRoZSBrZXkgYXR0cmlidXRlcyAqLwpAQCAtMTc4LDYgKzE4MywxNCBAQAogCVtOTDgwMjExX0tFWV9ERUZBVUxUXSA9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LAogCVtOTDgwMjExX0tFWV9ERUZBVUxUX01HTVRdID0geyAudHlwZSA9IE5MQV9GTEFHIH0sCiAJW05MODAyMTFfS0VZX1RZUEVdID0geyAudHlwZSA9IE5MQV9VMzIgfSwKKwlbTkw4MDIxMV9LRVlfREVGQVVMVF9UWVBFU10gPSB7IC50eXBlID0gTkxBX05FU1RFRCB9LAorfTsKKworLyogcG9saWN5IGZvciB0aGUga2V5IGRlZmF1bHQgZmxhZ3MgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeQorbmw4MDIxMV9rZXlfZGVmYXVsdF9wb2xpY3lbTlVNX05MODAyMTFfS0VZX0RFRkFVTFRfVFlQRVNdID0geworCVtOTDgwMjExX0tFWV9ERUZBVUxUX1RZUEVfVU5JQ0FTVF0gPSB7IC50eXBlID0gTkxBX0ZMQUcgfSwKKwlbTkw4MDIxMV9LRVlfREVGQVVMVF9UWVBFX01VTFRJQ0FTVF0gPSB7IC50eXBlID0gTkxBX0ZMQUcgfSwKIH07CiAKIC8qIGlmaWR4IGdldCBoZWxwZXIgKi8KQEAgLTMxMCw2ICszMjMsNyBAQAogCWludCBpZHg7CiAJaW50IHR5cGU7CiAJYm9vbCBkZWYsIGRlZm1nbXQ7CisJYm9vbCBkZWZfdW5pLCBkZWZfbXVsdGk7CiB9OwogCiBzdGF0aWMgaW50IG5sODAyMTFfcGFyc2Vfa2V5X25ldyhzdHJ1Y3QgbmxhdHRyICprZXksIHN0cnVjdCBrZXlfcGFyc2UgKmspCkBAIC0zMjMsNiArMzM3LDEzIEBACiAJay0+ZGVmID0gISF0YltOTDgwMjExX0tFWV9ERUZBVUxUXTsKIAlrLT5kZWZtZ210ID0gISF0YltOTDgwMjExX0tFWV9ERUZBVUxUX01HTVRdOwogCisJaWYgKGstPmRlZikgeworCQlrLT5kZWZfdW5pID0gdHJ1ZTsKKwkJay0+ZGVmX211bHRpID0gdHJ1ZTsKKwl9CisJaWYgKGstPmRlZm1nbXQpCisJCWstPmRlZl9tdWx0aSA9IHRydWU7CisKIAlpZiAodGJbTkw4MDIxMV9LRVlfSURYXSkKIAkJay0+aWR4ID0gbmxhX2dldF91OCh0YltOTDgwMjExX0tFWV9JRFhdKTsKIApAQCAtMzQ1LDYgKzM2NiwxOSBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJaWYgKHRiW05MODAyMTFfS0VZX0RFRkFVTFRfVFlQRVNdKSB7CisJCXN0cnVjdCBubGF0dHIgKmtkdFtOVU1fTkw4MDIxMV9LRVlfREVGQVVMVF9UWVBFU107CisJCWludCBlcnIgPSBubGFfcGFyc2VfbmVzdGVkKGtkdCwKKwkJCQkJICAgTlVNX05MODAyMTFfS0VZX0RFRkFVTFRfVFlQRVMgLSAxLAorCQkJCQkgICB0YltOTDgwMjExX0tFWV9ERUZBVUxUX1RZUEVTXSwKKwkJCQkJICAgbmw4MDIxMV9rZXlfZGVmYXVsdF9wb2xpY3kpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKworCQlrLT5kZWZfdW5pID0ga2R0W05MODAyMTFfS0VZX0RFRkFVTFRfVFlQRV9VTklDQVNUXTsKKwkJay0+ZGVmX211bHRpID0ga2R0W05MODAyMTFfS0VZX0RFRkFVTFRfVFlQRV9NVUxUSUNBU1RdOworCX0KKwogCXJldHVybiAwOwogfQogCkBAIC0zNjksMTIgKzQwMywzMiBAQAogCWstPmRlZiA9ICEhaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0tFWV9ERUZBVUxUXTsKIAlrLT5kZWZtZ210ID0gISFpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfS0VZX0RFRkFVTFRfTUdNVF07CiAKKwlpZiAoay0+ZGVmKSB7CisJCWstPmRlZl91bmkgPSB0cnVlOworCQlrLT5kZWZfbXVsdGkgPSB0cnVlOworCX0KKwlpZiAoay0+ZGVmbWdtdCkKKwkJay0+ZGVmX211bHRpID0gdHJ1ZTsKKwogCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfS0VZX1RZUEVdKSB7CiAJCWstPnR5cGUgPSBubGFfZ2V0X3UzMihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfS0VZX1RZUEVdKTsKIAkJaWYgKGstPnR5cGUgPCAwIHx8IGstPnR5cGUgPj0gTlVNX05MODAyMTFfS0VZVFlQRVMpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0tFWV9ERUZBVUxUX1RZUEVTXSkgeworCQlzdHJ1Y3QgbmxhdHRyICprZHRbTlVNX05MODAyMTFfS0VZX0RFRkFVTFRfVFlQRVNdOworCQlpbnQgZXJyID0gbmxhX3BhcnNlX25lc3RlZCgKKwkJCQlrZHQsIE5VTV9OTDgwMjExX0tFWV9ERUZBVUxUX1RZUEVTIC0gMSwKKwkJCQlpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfS0VZX0RFRkFVTFRfVFlQRVNdLAorCQkJCW5sODAyMTFfa2V5X2RlZmF1bHRfcG9saWN5KTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisKKwkJay0+ZGVmX3VuaSA9IGtkdFtOTDgwMjExX0tFWV9ERUZBVUxUX1RZUEVfVU5JQ0FTVF07CisJCWstPmRlZl9tdWx0aSA9IGtkdFtOTDgwMjExX0tFWV9ERUZBVUxUX1RZUEVfTVVMVElDQVNUXTsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzk3LDYgKzQ1MSwxMSBAQAogCWlmIChrLT5kZWYgJiYgay0+ZGVmbWdtdCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwlpZiAoay0+ZGVmbWdtdCkgeworCQlpZiAoay0+ZGVmX3VuaSB8fCAhay0+ZGVmX211bHRpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCiAJaWYgKGstPmlkeCAhPSAtMSkgewogCQlpZiAoay0+ZGVmbWdtdCkgewogCQkJaWYgKGstPmlkeCA8IDQgfHwgay0+aWR4ID4gNSkKQEAgLTQ0Niw2ICs1MDUsOCBAQAogCQkJCWdvdG8gZXJyb3I7CiAJCQlkZWYgPSAxOwogCQkJcmVzdWx0LT5kZWYgPSBwYXJzZS5pZHg7CisJCQlpZiAoIXBhcnNlLmRlZl91bmkgfHwgIXBhcnNlLmRlZl9tdWx0aSkKKwkJCQlnb3RvIGVycm9yOwogCQl9IGVsc2UgaWYgKHBhcnNlLmRlZm1nbXQpCiAJCQlnb3RvIGVycm9yOwogCQllcnIgPSBjZmc4MDIxMV92YWxpZGF0ZV9rZXlfc2V0dGluZ3MocmRldiwgJnBhcnNlLnAsCkBAIC01MjYsNyArNTg3LDYgQEAKIAkJICAgIGRldi0+d2lwaHkucnRzX3RocmVzaG9sZCk7CiAJTkxBX1BVVF9VOChtc2csIE5MODAyMTFfQVRUUl9XSVBIWV9DT1ZFUkFHRV9DTEFTUywKIAkJICAgIGRldi0+d2lwaHkuY292ZXJhZ2VfY2xhc3MpOwotCiAJTkxBX1BVVF9VOChtc2csIE5MODAyMTFfQVRUUl9NQVhfTlVNX1NDQU5fU1NJRFMsCiAJCSAgIGRldi0+d2lwaHkubWF4X3NjYW5fc3NpZHMpOwogCU5MQV9QVVRfVTE2KG1zZywgTkw4MDIxMV9BVFRSX01BWF9TQ0FOX0lFX0xFTiwKQEAgLTU0NSw2ICs2MDUsMjIgQEAKIAlpZiAoZGV2LT53aXBoeS5mbGFncyAmIFdJUEhZX0ZMQUdfQ09OVFJPTF9QT1JUX1BST1RPQ09MKQogCQlOTEFfUFVUX0ZMQUcobXNnLCBOTDgwMjExX0FUVFJfQ09OVFJPTF9QT1JUX0VUSEVSVFlQRSk7CiAKKwlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfQVRUUl9XSVBIWV9BTlRFTk5BX0FWQUlMX1RYLAorCQkgICAgZGV2LT53aXBoeS5hdmFpbGFibGVfYW50ZW5uYXNfdHgpOworCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9BVFRSX1dJUEhZX0FOVEVOTkFfQVZBSUxfUlgsCisJCSAgICBkZXYtPndpcGh5LmF2YWlsYWJsZV9hbnRlbm5hc19yeCk7CisKKwlpZiAoKGRldi0+d2lwaHkuYXZhaWxhYmxlX2FudGVubmFzX3R4IHx8CisJICAgICBkZXYtPndpcGh5LmF2YWlsYWJsZV9hbnRlbm5hc19yeCkgJiYgZGV2LT5vcHMtPmdldF9hbnRlbm5hKSB7CisJCXUzMiB0eF9hbnQgPSAwLCByeF9hbnQgPSAwOworCQlpbnQgcmVzOworCQlyZXMgPSBkZXYtPm9wcy0+Z2V0X2FudGVubmEoJmRldi0+d2lwaHksICZ0eF9hbnQsICZyeF9hbnQpOworCQlpZiAoIXJlcykgeworCQkJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX0FUVFJfV0lQSFlfQU5URU5OQV9UWCwgdHhfYW50KTsKKwkJCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9BVFRSX1dJUEhZX0FOVEVOTkFfUlgsIHJ4X2FudCk7CisJCX0KKwl9CisKIAlubF9tb2RlcyA9IG5sYV9uZXN0X3N0YXJ0KG1zZywgTkw4MDIxMV9BVFRSX1NVUFBPUlRFRF9JRlRZUEVTKTsKIAlpZiAoIW5sX21vZGVzKQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKQEAgLTY0OSwxOSArNzI1LDIxIEBACiAJQ01EKGFkZF9iZWFjb24sIE5FV19CRUFDT04pOwogCUNNRChhZGRfc3RhdGlvbiwgTkVXX1NUQVRJT04pOwogCUNNRChhZGRfbXBhdGgsIE5FV19NUEFUSCk7Ci0JQ01EKHNldF9tZXNoX3BhcmFtcywgU0VUX01FU0hfUEFSQU1TKTsKKwlDTUQodXBkYXRlX21lc2hfY29uZmlnLCBTRVRfTUVTSF9DT05GSUcpOwogCUNNRChjaGFuZ2VfYnNzLCBTRVRfQlNTKTsKIAlDTUQoYXV0aCwgQVVUSEVOVElDQVRFKTsKIAlDTUQoYXNzb2MsIEFTU09DSUFURSk7CiAJQ01EKGRlYXV0aCwgREVBVVRIRU5USUNBVEUpOwogCUNNRChkaXNhc3NvYywgRElTQVNTT0NJQVRFKTsKIAlDTUQoam9pbl9pYnNzLCBKT0lOX0lCU1MpOworCUNNRChqb2luX21lc2gsIEpPSU5fTUVTSCk7CiAJQ01EKHNldF9wbWtzYSwgU0VUX1BNS1NBKTsKIAlDTUQoZGVsX3Bta3NhLCBERUxfUE1LU0EpOwogCUNNRChmbHVzaF9wbWtzYSwgRkxVU0hfUE1LU0EpOwogCUNNRChyZW1haW5fb25fY2hhbm5lbCwgUkVNQUlOX09OX0NIQU5ORUwpOwogCUNNRChzZXRfYml0cmF0ZV9tYXNrLCBTRVRfVFhfQklUUkFURV9NQVNLKTsKIAlDTUQobWdtdF90eCwgRlJBTUUpOworCUNNRChtZ210X3R4X2NhbmNlbF93YWl0LCBGUkFNRV9XQUlUX0NBTkNFTCk7CiAJaWYgKGRldi0+d2lwaHkuZmxhZ3MgJiBXSVBIWV9GTEFHX05FVE5TX09LKSB7CiAJCWkrKzsKIAkJTkxBX1BVVF9VMzIobXNnLCBpLCBOTDgwMjExX0NNRF9TRVRfV0lQSFlfTkVUTlMpOwpAQCAtNjgzLDYgKzc2MSwxNCBAQAogCiAJbmxhX25lc3RfZW5kKG1zZywgbmxfY21kcyk7CiAKKwlpZiAoZGV2LT5vcHMtPnJlbWFpbl9vbl9jaGFubmVsKQorCQlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfQVRUUl9NQVhfUkVNQUlOX09OX0NIQU5ORUxfRFVSQVRJT04sCisJCQkgICAgZGV2LT53aXBoeS5tYXhfcmVtYWluX29uX2NoYW5uZWxfZHVyYXRpb24pOworCisJLyogZm9yIG5vdyBhdCBsZWFzdCBhc3N1bWUgYWxsIGRyaXZlcnMgaGF2ZSBpdCAqLworCWlmIChkZXYtPm9wcy0+bWdtdF90eCkKKwkJTkxBX1BVVF9GTEFHKG1zZywgTkw4MDIxMV9BVFRSX09GRkNIQU5ORUxfVFhfT0spOworCiAJaWYgKG1nbXRfc3R5cGVzKSB7CiAJCXUxNiBzdHlwZXM7CiAJCXN0cnVjdCBubGF0dHIgKm5sX2Z0eXBlcywgKm5sX2lmczsKQEAgLTEwMjQsNiArMTExMCwzNSBAQAogCQkJZ290byBiYWRfcmVzOwogCX0KIAorCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfV0lQSFlfQU5URU5OQV9UWF0gJiYKKwkgICAgaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1dJUEhZX0FOVEVOTkFfUlhdKSB7CisJCXUzMiB0eF9hbnQsIHJ4X2FudDsKKwkJaWYgKCghcmRldi0+d2lwaHkuYXZhaWxhYmxlX2FudGVubmFzX3R4ICYmCisJCSAgICAgIXJkZXYtPndpcGh5LmF2YWlsYWJsZV9hbnRlbm5hc19yeCkgfHwKKwkJICAgICFyZGV2LT5vcHMtPnNldF9hbnRlbm5hKSB7CisJCQlyZXN1bHQgPSAtRU9QTk9UU1VQUDsKKwkJCWdvdG8gYmFkX3JlczsKKwkJfQorCisJCXR4X2FudCA9IG5sYV9nZXRfdTMyKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9XSVBIWV9BTlRFTk5BX1RYXSk7CisJCXJ4X2FudCA9IG5sYV9nZXRfdTMyKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9XSVBIWV9BTlRFTk5BX1JYXSk7CisKKwkJLyogcmVqZWN0IGFudGVubmEgY29uZmlndXJhdGlvbnMgd2hpY2ggZG9uJ3QgbWF0Y2ggdGhlCisJCSAqIGF2YWlsYWJsZSBhbnRlbm5hIG1hc2tzLCBleGNlcHQgZm9yIHRoZSAiYWxsIiBtYXNrICovCisJCWlmICgofnR4X2FudCAmJiAodHhfYW50ICYgfnJkZXYtPndpcGh5LmF2YWlsYWJsZV9hbnRlbm5hc190eCkpIHx8CisJCSAgICAofnJ4X2FudCAmJiAocnhfYW50ICYgfnJkZXYtPndpcGh5LmF2YWlsYWJsZV9hbnRlbm5hc19yeCkpKSB7CisJCQlyZXN1bHQgPSAtRUlOVkFMOworCQkJZ290byBiYWRfcmVzOworCQl9CisKKwkJdHhfYW50ID0gdHhfYW50ICYgcmRldi0+d2lwaHkuYXZhaWxhYmxlX2FudGVubmFzX3R4OworCQlyeF9hbnQgPSByeF9hbnQgJiByZGV2LT53aXBoeS5hdmFpbGFibGVfYW50ZW5uYXNfcng7CisKKwkJcmVzdWx0ID0gcmRldi0+b3BzLT5zZXRfYW50ZW5uYSgmcmRldi0+d2lwaHksIHR4X2FudCwgcnhfYW50KTsKKwkJaWYgKHJlc3VsdCkKKwkJCWdvdG8gYmFkX3JlczsKKwl9CisKIAljaGFuZ2VkID0gMDsKIAogCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfV0lQSFlfUkVUUllfU0hPUlRdKSB7CkBAIC0xMjkxLDExICsxNDA2LDIxIEBACiAJfQogCiAJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9NRVNIX0lEXSkgeworCQlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LT5pZWVlODAyMTFfcHRyOworCiAJCWlmIChudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCXBhcmFtcy5tZXNoX2lkID0gbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX01FU0hfSURdKTsKLQkJcGFyYW1zLm1lc2hfaWRfbGVuID0gbmxhX2xlbihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfTUVTSF9JRF0pOwotCQljaGFuZ2UgPSB0cnVlOworCQlpZiAobmV0aWZfcnVubmluZyhkZXYpKQorCQkJcmV0dXJuIC1FQlVTWTsKKworCQl3ZGV2X2xvY2sod2Rldik7CisJCUJVSUxEX0JVR19PTihJRUVFODAyMTFfTUFYX1NTSURfTEVOICE9CisJCQkgICAgIElFRUU4MDIxMV9NQVhfTUVTSF9JRF9MRU4pOworCQl3ZGV2LT5tZXNoX2lkX3VwX2xlbiA9CisJCQlubGFfbGVuKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9NRVNIX0lEXSk7CisJCW1lbWNweSh3ZGV2LT5zc2lkLCBubGFfZGF0YShpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfTUVTSF9JRF0pLAorCQkgICAgICAgd2Rldi0+bWVzaF9pZF91cF9sZW4pOworCQl3ZGV2X3VubG9jayh3ZGV2KTsKIAl9CiAKIAlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSXzRBRERSXSkgewpAQCAtMTMzNSw2ICsxNDYwLDcgQEAKIHsKIAlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSBpbmZvLT51c2VyX3B0clswXTsKIAlzdHJ1Y3QgdmlmX3BhcmFtcyBwYXJhbXM7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlpbnQgZXJyOwogCWVudW0gbmw4MDIxMV9pZnR5cGUgdHlwZSA9IE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEOwogCXUzMiBmbGFnczsKQEAgLTEzNTQsMTIgKzE0ODAsNiBAQAogCSAgICAhKHJkZXYtPndpcGh5LmludGVyZmFjZV9tb2RlcyAmICgxIDw8IHR5cGUpKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JaWYgKHR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCAmJgotCSAgICBpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfTUVTSF9JRF0pIHsKLQkJcGFyYW1zLm1lc2hfaWQgPSBubGFfZGF0YShpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfTUVTSF9JRF0pOwotCQlwYXJhbXMubWVzaF9pZF9sZW4gPSBubGFfbGVuKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9NRVNIX0lEXSk7Ci0JfQotCiAJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl80QUREUl0pIHsKIAkJcGFyYW1zLnVzZV80YWRkciA9ICEhbmxhX2dldF91OChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfNEFERFJdKTsKIAkJZXJyID0gbmw4MDIxMV92YWxpZF80YWRkcihyZGV2LCBOVUxMLCBwYXJhbXMudXNlXzRhZGRyLCB0eXBlKTsKQEAgLTEzNzAsMTEgKzE0OTAsMjcgQEAKIAllcnIgPSBwYXJzZV9tb25pdG9yX2ZsYWdzKHR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUiA/CiAJCQkJICBpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfTU5UUl9GTEFHU10gOiBOVUxMLAogCQkJCSAgJmZsYWdzKTsKLQllcnIgPSByZGV2LT5vcHMtPmFkZF92aXJ0dWFsX2ludGYoJnJkZXYtPndpcGh5LAorCWRldiA9IHJkZXYtPm9wcy0+YWRkX3ZpcnR1YWxfaW50ZigmcmRldi0+d2lwaHksCiAJCW5sYV9kYXRhKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9JRk5BTUVdKSwKIAkJdHlwZSwgZXJyID8gTlVMTCA6ICZmbGFncywgJnBhcmFtcyk7CisJaWYgKElTX0VSUihkZXYpKQorCQlyZXR1cm4gUFRSX0VSUihkZXYpOwogCi0JcmV0dXJuIGVycjsKKwlpZiAodHlwZSA9PSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UICYmCisJICAgIGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9NRVNIX0lEXSkgeworCQlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LT5pZWVlODAyMTFfcHRyOworCisJCXdkZXZfbG9jayh3ZGV2KTsKKwkJQlVJTERfQlVHX09OKElFRUU4MDIxMV9NQVhfU1NJRF9MRU4gIT0KKwkJCSAgICAgSUVFRTgwMjExX01BWF9NRVNIX0lEX0xFTik7CisJCXdkZXYtPm1lc2hfaWRfdXBfbGVuID0KKwkJCW5sYV9sZW4oaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX01FU0hfSURdKTsKKwkJbWVtY3B5KHdkZXYtPnNzaWQsIG5sYV9kYXRhKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9NRVNIX0lEXSksCisJCSAgICAgICB3ZGV2LT5tZXNoX2lkX3VwX2xlbik7CisJCXdkZXZfdW5sb2NrKHdkZXYpOworCX0KKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IG5sODAyMTFfZGVsX2ludGVyZmFjZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQpAQCAtMTUxOSw4ICsxNjU1LDYgQEAKIAlzdHJ1Y3Qga2V5X3BhcnNlIGtleTsKIAlpbnQgZXJyOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBpbmZvLT51c2VyX3B0clsxXTsKLQlpbnQgKCpmdW5jKShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAotCQkgICAgdTgga2V5X2luZGV4KTsKIAogCWVyciA9IG5sODAyMTFfcGFyc2Vfa2V5KGluZm8sICZrZXkpOwogCWlmIChlcnIpCkBAIC0xNTMzLDI3ICsxNjY3LDYxIEBACiAJaWYgKCFrZXkuZGVmICYmICFrZXkuZGVmbWdtdCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoa2V5LmRlZikKLQkJZnVuYyA9IHJkZXYtPm9wcy0+c2V0X2RlZmF1bHRfa2V5OwotCWVsc2UKLQkJZnVuYyA9IHJkZXYtPm9wcy0+c2V0X2RlZmF1bHRfbWdtdF9rZXk7Ci0KLQlpZiAoIWZ1bmMpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQogCXdkZXZfbG9jayhkZXYtPmllZWU4MDIxMV9wdHIpOwotCWVyciA9IG5sODAyMTFfa2V5X2FsbG93ZWQoZGV2LT5pZWVlODAyMTFfcHRyKTsKLQlpZiAoIWVycikKLQkJZXJyID0gZnVuYygmcmRldi0+d2lwaHksIGRldiwga2V5LmlkeCk7CisKKwlpZiAoa2V5LmRlZikgeworCQlpZiAoIXJkZXYtPm9wcy0+c2V0X2RlZmF1bHRfa2V5KSB7CisJCQllcnIgPSAtRU9QTk9UU1VQUDsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJZXJyID0gbmw4MDIxMV9rZXlfYWxsb3dlZChkZXYtPmllZWU4MDIxMV9wdHIpOworCQlpZiAoZXJyKQorCQkJZ290byBvdXQ7CisKKwkJaWYgKCEocmRldi0+d2lwaHkuZmxhZ3MgJgorCQkJCVdJUEhZX0ZMQUdfU1VQUE9SVFNfU0VQQVJBVEVfREVGQVVMVF9LRVlTKSkgeworCQkJaWYgKCFrZXkuZGVmX3VuaSB8fCAha2V5LmRlZl9tdWx0aSkgeworCQkJCWVyciA9IC1FT1BOT1RTVVBQOworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9CisKKwkJZXJyID0gcmRldi0+b3BzLT5zZXRfZGVmYXVsdF9rZXkoJnJkZXYtPndpcGh5LCBkZXYsIGtleS5pZHgsCisJCQkJCQkga2V5LmRlZl91bmksIGtleS5kZWZfbXVsdGkpOworCisJCWlmIChlcnIpCisJCQlnb3RvIG91dDsKIAogI2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUCi0JaWYgKCFlcnIpIHsKLQkJaWYgKGZ1bmMgPT0gcmRldi0+b3BzLT5zZXRfZGVmYXVsdF9rZXkpCi0JCQlkZXYtPmllZWU4MDIxMV9wdHItPndleHQuZGVmYXVsdF9rZXkgPSBrZXkuaWR4OwotCQllbHNlCi0JCQlkZXYtPmllZWU4MDIxMV9wdHItPndleHQuZGVmYXVsdF9tZ210X2tleSA9IGtleS5pZHg7Ci0JfQorCQlkZXYtPmllZWU4MDIxMV9wdHItPndleHQuZGVmYXVsdF9rZXkgPSBrZXkuaWR4OwogI2VuZGlmCisJfSBlbHNlIHsKKwkJaWYgKGtleS5kZWZfdW5pIHx8ICFrZXkuZGVmX211bHRpKSB7CisJCQllcnIgPSAtRUlOVkFMOworCQkJZ290byBvdXQ7CisJCX0KKworCQlpZiAoIXJkZXYtPm9wcy0+c2V0X2RlZmF1bHRfbWdtdF9rZXkpIHsKKwkJCWVyciA9IC1FT1BOT1RTVVBQOworCQkJZ290byBvdXQ7CisJCX0KKworCQllcnIgPSBubDgwMjExX2tleV9hbGxvd2VkKGRldi0+aWVlZTgwMjExX3B0cik7CisJCWlmIChlcnIpCisJCQlnb3RvIG91dDsKKworCQllcnIgPSByZGV2LT5vcHMtPnNldF9kZWZhdWx0X21nbXRfa2V5KCZyZGV2LT53aXBoeSwKKwkJCQkJCSAgICAgIGRldiwga2V5LmlkeCk7CisJCWlmIChlcnIpCisJCQlnb3RvIG91dDsKKworI2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUCisJCWRldi0+aWVlZTgwMjExX3B0ci0+d2V4dC5kZWZhdWx0X21nbXRfa2V5ID0ga2V5LmlkeDsKKyNlbmRpZgorCX0KKworIG91dDoKIAl3ZGV2X3VubG9jayhkZXYtPmllZWU4MDIxMV9wdHIpOwogCiAJcmV0dXJuIGVycjsKQEAgLTE4NDEsNiArMjAwOSw5IEBACiAJaWYgKHNpbmZvLT5maWxsZWQgJiBTVEFUSU9OX0lORk9fU0lHTkFMKQogCQlOTEFfUFVUX1U4KG1zZywgTkw4MDIxMV9TVEFfSU5GT19TSUdOQUwsCiAJCQkgICBzaW5mby0+c2lnbmFsKTsKKwlpZiAoc2luZm8tPmZpbGxlZCAmIFNUQVRJT05fSU5GT19TSUdOQUxfQVZHKQorCQlOTEFfUFVUX1U4KG1zZywgTkw4MDIxMV9TVEFfSU5GT19TSUdOQUxfQVZHLAorCQkJICAgc2luZm8tPnNpZ25hbF9hdmcpOwogCWlmIChzaW5mby0+ZmlsbGVkICYgU1RBVElPTl9JTkZPX1RYX0JJVFJBVEUpIHsKIAkJdHhyYXRlID0gbmxhX25lc3Rfc3RhcnQobXNnLCBOTDgwMjExX1NUQV9JTkZPX1RYX0JJVFJBVEUpOwogCQlpZiAoIXR4cmF0ZSkKQEAgLTI0MDQsNiArMjU3NSw3IEBACiAJcGFyYW1zLnVzZV9zaG9ydF9wcmVhbWJsZSA9IC0xOwogCXBhcmFtcy51c2Vfc2hvcnRfc2xvdF90aW1lID0gLTE7CiAJcGFyYW1zLmFwX2lzb2xhdGUgPSAtMTsKKwlwYXJhbXMuaHRfb3Btb2RlID0gLTE7CiAKIAlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0JTU19DVFNfUFJPVF0pCiAJCXBhcmFtcy51c2VfY3RzX3Byb3QgPQpAQCAtMjQyMiw2ICsyNTk0LDkgQEAKIAl9CiAJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9BUF9JU09MQVRFXSkKIAkJcGFyYW1zLmFwX2lzb2xhdGUgPSAhIW5sYV9nZXRfdTgoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0FQX0lTT0xBVEVdKTsKKwlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0JTU19IVF9PUE1PREVdKQorCQlwYXJhbXMuaHRfb3Btb2RlID0KKwkJCW5sYV9nZXRfdTE2KGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9CU1NfSFRfT1BNT0RFXSk7CiAKIAlpZiAoIXJkZXYtPm9wcy0+Y2hhbmdlX2JzcykKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwpAQCAtMjUwNiwyMiArMjY4MSwzMyBAQAogCXJldHVybiByOwogfQogCi1zdGF0aWMgaW50IG5sODAyMTFfZ2V0X21lc2hfcGFyYW1zKHN0cnVjdCBza19idWZmICpza2IsCi0Jc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKK3N0YXRpYyBpbnQgbmw4MDIxMV9nZXRfbWVzaF9jb25maWcoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogewogCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IGluZm8tPnVzZXJfcHRyWzBdOwotCXN0cnVjdCBtZXNoX2NvbmZpZyBjdXJfcGFyYW1zOwotCWludCBlcnI7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGluZm8tPnVzZXJfcHRyWzFdOworCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtPmllZWU4MDIxMV9wdHI7CisJc3RydWN0IG1lc2hfY29uZmlnIGN1cl9wYXJhbXM7CisJaW50IGVyciA9IDA7CiAJdm9pZCAqaGRyOwogCXN0cnVjdCBubGF0dHIgKnBpbmZvYXR0cjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqbXNnOwogCi0JaWYgKCFyZGV2LT5vcHMtPmdldF9tZXNoX3BhcmFtcykKKwlpZiAod2Rldi0+aWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCS8qIEdldCB0aGUgbWVzaCBwYXJhbXMgKi8KLQllcnIgPSByZGV2LT5vcHMtPmdldF9tZXNoX3BhcmFtcygmcmRldi0+d2lwaHksIGRldiwgJmN1cl9wYXJhbXMpOworCWlmICghcmRldi0+b3BzLT5nZXRfbWVzaF9jb25maWcpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCXdkZXZfbG9jayh3ZGV2KTsKKwkvKiBJZiBub3QgY29ubmVjdGVkLCBnZXQgZGVmYXVsdCBwYXJhbWV0ZXJzICovCisJaWYgKCF3ZGV2LT5tZXNoX2lkX2xlbikKKwkJbWVtY3B5KCZjdXJfcGFyYW1zLCAmZGVmYXVsdF9tZXNoX2NvbmZpZywgc2l6ZW9mKGN1cl9wYXJhbXMpKTsKKwllbHNlCisJCWVyciA9IHJkZXYtPm9wcy0+Z2V0X21lc2hfY29uZmlnKCZyZGV2LT53aXBoeSwgZGV2LAorCQkJCQkJICZjdXJfcGFyYW1zKTsKKwl3ZGV2X3VubG9jayh3ZGV2KTsKKwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKQEAgLTI1MzAsMTAgKzI3MTYsMTAgQEAKIAlpZiAoIW1zZykKIAkJcmV0dXJuIC1FTk9NRU07CiAJaGRyID0gbmw4MDIxMWhkcl9wdXQobXNnLCBpbmZvLT5zbmRfcGlkLCBpbmZvLT5zbmRfc2VxLCAwLAotCQkJICAgICBOTDgwMjExX0NNRF9HRVRfTUVTSF9QQVJBTVMpOworCQkJICAgICBOTDgwMjExX0NNRF9HRVRfTUVTSF9DT05GSUcpOwogCWlmICghaGRyKQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKLQlwaW5mb2F0dHIgPSBubGFfbmVzdF9zdGFydChtc2csIE5MODAyMTFfQVRUUl9NRVNIX1BBUkFNUyk7CisJcGluZm9hdHRyID0gbmxhX25lc3Rfc3RhcnQobXNnLCBOTDgwMjExX0FUVFJfTUVTSF9DT05GSUcpOwogCWlmICghcGluZm9hdHRyKQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIAlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfQVRUUl9JRklOREVYLCBkZXYtPmlmaW5kZXgpOwpAQCAtMjU0OSw2ICsyNzM1LDggQEAKIAkJCWN1cl9wYXJhbXMuZG90MTFNZXNoTWF4UmV0cmllcyk7CiAJTkxBX1BVVF9VOChtc2csIE5MODAyMTFfTUVTSENPTkZfVFRMLAogCQkJY3VyX3BhcmFtcy5kb3QxMU1lc2hUVEwpOworCU5MQV9QVVRfVTgobXNnLCBOTDgwMjExX01FU0hDT05GX0VMRU1FTlRfVFRMLAorCQkJY3VyX3BhcmFtcy5lbGVtZW50X3R0bCk7CiAJTkxBX1BVVF9VOChtc2csIE5MODAyMTFfTUVTSENPTkZfQVVUT19PUEVOX1BMSU5LUywKIAkJCWN1cl9wYXJhbXMuYXV0b19vcGVuX3BsaW5rcyk7CiAJTkxBX1BVVF9VOChtc2csIE5MODAyMTFfTUVTSENPTkZfSFdNUF9NQVhfUFJFUV9SRVRSSUVTLApAQCAtMjU3NSwxNCArMjc2Myw2IEBACiAJcmV0dXJuIC1FTk9CVUZTOwogfQogCi0jZGVmaW5lIEZJTExfSU5fTUVTSF9QQVJBTV9JRl9TRVQodGFibGUsIGNmZywgcGFyYW0sIG1hc2ssIGF0dHJfbnVtLCBubGFfZm4pIFwKLWRvIHtcCi0JaWYgKHRhYmxlW2F0dHJfbnVtXSkge1wKLQkJY2ZnLnBhcmFtID0gbmxhX2ZuKHRhYmxlW2F0dHJfbnVtXSk7IFwKLQkJbWFzayB8PSAoMSA8PCAoYXR0cl9udW0gLSAxKSk7IFwKLQl9IFwKLX0gd2hpbGUgKDApO1wKLQogc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5sODAyMTFfbWVzaGNvbmZfcGFyYW1zX3BvbGljeVtOTDgwMjExX01FU0hDT05GX0FUVFJfTUFYKzFdID0gewogCVtOTDgwMjExX01FU0hDT05GX1JFVFJZX1RJTUVPVVRdID0geyAudHlwZSA9IE5MQV9VMTYgfSwKIAlbTkw4MDIxMV9NRVNIQ09ORl9DT05GSVJNX1RJTUVPVVRdID0geyAudHlwZSA9IE5MQV9VMTYgfSwKQEAgLTI1OTAsNiArMjc3MCw3IEBACiAJW05MODAyMTFfTUVTSENPTkZfTUFYX1BFRVJfTElOS1NdID0geyAudHlwZSA9IE5MQV9VMTYgfSwKIAlbTkw4MDIxMV9NRVNIQ09ORl9NQVhfUkVUUklFU10gPSB7IC50eXBlID0gTkxBX1U4IH0sCiAJW05MODAyMTFfTUVTSENPTkZfVFRMXSA9IHsgLnR5cGUgPSBOTEFfVTggfSwKKwlbTkw4MDIxMV9NRVNIQ09ORl9FTEVNRU5UX1RUTF0gPSB7IC50eXBlID0gTkxBX1U4IH0sCiAJW05MODAyMTFfTUVTSENPTkZfQVVUT19PUEVOX1BMSU5LU10gPSB7IC50eXBlID0gTkxBX1U4IH0sCiAKIAlbTkw4MDIxMV9NRVNIQ09ORl9IV01QX01BWF9QUkVRX1JFVFJJRVNdID0geyAudHlwZSA9IE5MQV9VOCB9LApAQCAtMjYwMCwzMSArMjc4MSw0MiBAQAogCVtOTDgwMjExX01FU0hDT05GX0hXTVBfTkVUX0RJQU1fVFJWU19USU1FXSA9IHsgLnR5cGUgPSBOTEFfVTE2IH0sCiB9OwogCi1zdGF0aWMgaW50IG5sODAyMTFfc2V0X21lc2hfcGFyYW1zKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCi17Ci0JdTMyIG1hc2s7Ci0Jc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gaW5mby0+dXNlcl9wdHJbMF07Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGluZm8tPnVzZXJfcHRyWzFdOwotCXN0cnVjdCBtZXNoX2NvbmZpZyBjZmc7Ci0Jc3RydWN0IG5sYXR0ciAqdGJbTkw4MDIxMV9NRVNIQ09ORl9BVFRSX01BWCArIDFdOwotCXN0cnVjdCBubGF0dHIgKnBhcmVudF9hdHRyOworc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5CisJbmw4MDIxMV9tZXNoX3NldHVwX3BhcmFtc19wb2xpY3lbTkw4MDIxMV9NRVNIX1NFVFVQX0FUVFJfTUFYKzFdID0geworCVtOTDgwMjExX01FU0hfU0VUVVBfRU5BQkxFX1ZFTkRPUl9QQVRIX1NFTF0gPSB7IC50eXBlID0gTkxBX1U4IH0sCisJW05MODAyMTFfTUVTSF9TRVRVUF9FTkFCTEVfVkVORE9SX01FVFJJQ10gPSB7IC50eXBlID0gTkxBX1U4IH0sCisJW05MODAyMTFfTUVTSF9TRVRVUF9WRU5ET1JfUEFUSF9TRUxfSUVdID0geyAudHlwZSA9IE5MQV9CSU5BUlksCisJCS5sZW4gPSBJRUVFODAyMTFfTUFYX0RBVEFfTEVOIH0sCit9OwogCi0JcGFyZW50X2F0dHIgPSBpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfTUVTSF9QQVJBTVNdOwotCWlmICghcGFyZW50X2F0dHIpCitzdGF0aWMgaW50IG5sODAyMTFfcGFyc2VfbWVzaF9jb25maWcoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywKKwkJCQkgICAgIHN0cnVjdCBtZXNoX2NvbmZpZyAqY2ZnLAorCQkJCSAgICAgdTMyICptYXNrX291dCkKK3sKKwlzdHJ1Y3QgbmxhdHRyICp0YltOTDgwMjExX01FU0hDT05GX0FUVFJfTUFYICsgMV07CisJdTMyIG1hc2sgPSAwOworCisjZGVmaW5lIEZJTExfSU5fTUVTSF9QQVJBTV9JRl9TRVQodGFibGUsIGNmZywgcGFyYW0sIG1hc2ssIGF0dHJfbnVtLCBubGFfZm4pIFwKK2RvIHtcCisJaWYgKHRhYmxlW2F0dHJfbnVtXSkge1wKKwkJY2ZnLT5wYXJhbSA9IG5sYV9mbih0YWJsZVthdHRyX251bV0pOyBcCisJCW1hc2sgfD0gKDEgPDwgKGF0dHJfbnVtIC0gMSkpOyBcCisJfSBcCit9IHdoaWxlICgwKTtcCisKKworCWlmICghaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX01FU0hfQ09ORklHXSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKG5sYV9wYXJzZV9uZXN0ZWQodGIsIE5MODAyMTFfTUVTSENPTkZfQVRUUl9NQVgsCi0JCQlwYXJlbnRfYXR0ciwgbmw4MDIxMV9tZXNoY29uZl9wYXJhbXNfcG9saWN5KSkKKwkJCSAgICAgaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX01FU0hfQ09ORklHXSwKKwkJCSAgICAgbmw4MDIxMV9tZXNoY29uZl9wYXJhbXNfcG9saWN5KSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoIXJkZXYtPm9wcy0+c2V0X21lc2hfcGFyYW1zKQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KIAkvKiBUaGlzIG1ha2VzIHN1cmUgdGhhdCB0aGVyZSBhcmVuJ3QgbW9yZSB0aGFuIDMyIG1lc2ggY29uZmlnCiAJICogcGFyYW1ldGVycyAob3RoZXJ3aXNlIG91ciBiaXRmaWVsZCBzY2hlbWUgd291bGQgbm90IHdvcmsuKSAqLwogCUJVSUxEX0JVR19PTihOTDgwMjExX01FU0hDT05GX0FUVFJfTUFYID4gMzIpOwogCiAJLyogRmlsbCBpbiB0aGUgcGFyYW1zIHN0cnVjdCAqLwotCW1hc2sgPSAwOwogCUZJTExfSU5fTUVTSF9QQVJBTV9JRl9TRVQodGIsIGNmZywgZG90MTFNZXNoUmV0cnlUaW1lb3V0LAogCQkJbWFzaywgTkw4MDIxMV9NRVNIQ09ORl9SRVRSWV9USU1FT1VULCBubGFfZ2V0X3UxNik7CiAJRklMTF9JTl9NRVNIX1BBUkFNX0lGX1NFVCh0YiwgY2ZnLCBkb3QxMU1lc2hDb25maXJtVGltZW91dCwKQEAgLTI2MzcsNiArMjgyOSw4IEBACiAJCQltYXNrLCBOTDgwMjExX01FU0hDT05GX01BWF9SRVRSSUVTLCBubGFfZ2V0X3U4KTsKIAlGSUxMX0lOX01FU0hfUEFSQU1fSUZfU0VUKHRiLCBjZmcsIGRvdDExTWVzaFRUTCwKIAkJCW1hc2ssIE5MODAyMTFfTUVTSENPTkZfVFRMLCBubGFfZ2V0X3U4KTsKKwlGSUxMX0lOX01FU0hfUEFSQU1fSUZfU0VUKHRiLCBjZmcsIGVsZW1lbnRfdHRsLAorCQkJbWFzaywgTkw4MDIxMV9NRVNIQ09ORl9FTEVNRU5UX1RUTCwgbmxhX2dldF91OCk7CiAJRklMTF9JTl9NRVNIX1BBUkFNX0lGX1NFVCh0YiwgY2ZnLCBhdXRvX29wZW5fcGxpbmtzLAogCQkJbWFzaywgTkw4MDIxMV9NRVNIQ09ORl9BVVRPX09QRU5fUExJTktTLCBubGFfZ2V0X3U4KTsKIAlGSUxMX0lOX01FU0hfUEFSQU1fSUZfU0VUKHRiLCBjZmcsIGRvdDExTWVzaEhXTVBtYXhQUkVRcmV0cmllcywKQEAgLTI2NjEsMTIgKzI4NTUsODIgQEAKIAkJCWRvdDExTWVzaEhXTVBSb290TW9kZSwgbWFzaywKIAkJCU5MODAyMTFfTUVTSENPTkZfSFdNUF9ST09UTU9ERSwKIAkJCW5sYV9nZXRfdTgpOworCWlmIChtYXNrX291dCkKKwkJKm1hc2tfb3V0ID0gbWFzazsKIAotCS8qIEFwcGx5IGNoYW5nZXMgKi8KLQlyZXR1cm4gcmRldi0+b3BzLT5zZXRfbWVzaF9wYXJhbXMoJnJkZXYtPndpcGh5LCBkZXYsICZjZmcsIG1hc2spOwotfQorCXJldHVybiAwOwogCiAjdW5kZWYgRklMTF9JTl9NRVNIX1BBUkFNX0lGX1NFVAorfQorCitzdGF0aWMgaW50IG5sODAyMTFfcGFyc2VfbWVzaF9zZXR1cChzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLAorCQkJCSAgICAgc3RydWN0IG1lc2hfc2V0dXAgKnNldHVwKQoreworCXN0cnVjdCBubGF0dHIgKnRiW05MODAyMTFfTUVTSF9TRVRVUF9BVFRSX01BWCArIDFdOworCisJaWYgKCFpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfTUVTSF9TRVRVUF0pCisJCXJldHVybiAtRUlOVkFMOworCWlmIChubGFfcGFyc2VfbmVzdGVkKHRiLCBOTDgwMjExX01FU0hfU0VUVVBfQVRUUl9NQVgsCisJCQkgICAgIGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9NRVNIX1NFVFVQXSwKKwkJCSAgICAgbmw4MDIxMV9tZXNoX3NldHVwX3BhcmFtc19wb2xpY3kpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh0YltOTDgwMjExX01FU0hfU0VUVVBfRU5BQkxFX1ZFTkRPUl9QQVRIX1NFTF0pCisJCXNldHVwLT5wYXRoX3NlbF9wcm90byA9CisJCShubGFfZ2V0X3U4KHRiW05MODAyMTFfTUVTSF9TRVRVUF9FTkFCTEVfVkVORE9SX1BBVEhfU0VMXSkpID8KKwkJIElFRUU4MDIxMV9QQVRIX1BST1RPQ09MX1ZFTkRPUiA6CisJCSBJRUVFODAyMTFfUEFUSF9QUk9UT0NPTF9IV01QOworCisJaWYgKHRiW05MODAyMTFfTUVTSF9TRVRVUF9FTkFCTEVfVkVORE9SX01FVFJJQ10pCisJCXNldHVwLT5wYXRoX21ldHJpYyA9CisJCShubGFfZ2V0X3U4KHRiW05MODAyMTFfTUVTSF9TRVRVUF9FTkFCTEVfVkVORE9SX01FVFJJQ10pKSA/CisJCSBJRUVFODAyMTFfUEFUSF9NRVRSSUNfVkVORE9SIDoKKwkJIElFRUU4MDIxMV9QQVRIX01FVFJJQ19BSVJUSU1FOworCisJaWYgKHRiW05MODAyMTFfTUVTSF9TRVRVUF9WRU5ET1JfUEFUSF9TRUxfSUVdKSB7CisJCXN0cnVjdCBubGF0dHIgKmllYXR0ciA9CisJCQl0YltOTDgwMjExX01FU0hfU0VUVVBfVkVORE9SX1BBVEhfU0VMX0lFXTsKKwkJaWYgKCFpc192YWxpZF9pZV9hdHRyKGllYXR0cikpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJc2V0dXAtPnZlbmRvcl9pZSA9IG5sYV9kYXRhKGllYXR0cik7CisJCXNldHVwLT52ZW5kb3JfaWVfbGVuID0gbmxhX2xlbihpZWF0dHIpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5sODAyMTFfdXBkYXRlX21lc2hfY29uZmlnKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSBpbmZvLT51c2VyX3B0clswXTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaW5mby0+dXNlcl9wdHJbMV07CisJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0+aWVlZTgwMjExX3B0cjsKKwlzdHJ1Y3QgbWVzaF9jb25maWcgY2ZnOworCXUzMiBtYXNrOworCWludCBlcnI7CisKKwlpZiAod2Rldi0+aWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWlmICghcmRldi0+b3BzLT51cGRhdGVfbWVzaF9jb25maWcpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWVyciA9IG5sODAyMTFfcGFyc2VfbWVzaF9jb25maWcoaW5mbywgJmNmZywgJm1hc2spOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwl3ZGV2X2xvY2sod2Rldik7CisJaWYgKCF3ZGV2LT5tZXNoX2lkX2xlbikKKwkJZXJyID0gLUVOT0xJTks7CisKKwlpZiAoIWVycikKKwkJZXJyID0gcmRldi0+b3BzLT51cGRhdGVfbWVzaF9jb25maWcoJnJkZXYtPndpcGh5LCBkZXYsCisJCQkJCQkgICAgbWFzaywgJmNmZyk7CisKKwl3ZGV2X3VubG9jayh3ZGV2KTsKKworCXJldHVybiBlcnI7Cit9CiAKIHN0YXRpYyBpbnQgbmw4MDIxMV9nZXRfcmVnKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiB7CkBAIC0zNTY5LDYgKzM4MzMsMzQgQEAKIAkJCQkgICAgICBsb2NhbF9zdGF0ZV9jaGFuZ2UpOwogfQogCitzdGF0aWMgYm9vbAorbmw4MDIxMV9wYXJzZV9tY2FzdF9yYXRlKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCSBpbnQgbWNhc3RfcmF0ZVtJRUVFODAyMTFfTlVNX0JBTkRTXSwKKwkJCSBpbnQgcmF0ZXZhbCkKK3sKKwlzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gJnJkZXYtPndpcGh5OworCWJvb2wgZm91bmQgPSBmYWxzZTsKKwlpbnQgYmFuZCwgaTsKKworCWZvciAoYmFuZCA9IDA7IGJhbmQgPCBJRUVFODAyMTFfTlVNX0JBTkRTOyBiYW5kKyspIHsKKwkJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CisKKwkJc2JhbmQgPSB3aXBoeS0+YmFuZHNbYmFuZF07CisJCWlmICghc2JhbmQpCisJCQljb250aW51ZTsKKworCQlmb3IgKGkgPSAwOyBpIDwgc2JhbmQtPm5fYml0cmF0ZXM7IGkrKykgeworCQkJaWYgKHNiYW5kLT5iaXRyYXRlc1tpXS5iaXRyYXRlID09IHJhdGV2YWwpIHsKKwkJCQltY2FzdF9yYXRlW2JhbmRdID0gaSArIDE7CisJCQkJZm91bmQgPSB0cnVlOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIGZvdW5kOworfQorCiBzdGF0aWMgaW50IG5sODAyMTFfam9pbl9pYnNzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gaW5mby0+dXNlcl9wdHJbMF07CkBAIC0zNjUzLDYgKzM5NDUsMTEgQEAKIAkJfQogCX0KIAorCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfTUNBU1RfUkFURV0gJiYKKwkgICAgIW5sODAyMTFfcGFyc2VfbWNhc3RfcmF0ZShyZGV2LCBpYnNzLm1jYXN0X3JhdGUsCisJCQlubGFfZ2V0X3UzMihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfTUNBU1RfUkFURV0pKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlpZiAoaWJzcy5wcml2YWN5ICYmIGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9LRVlTXSkgewogCQljb25ua2V5cyA9IG5sODAyMTFfcGFyc2VfY29ubmtleXMocmRldiwKIAkJCQkJaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0tFWVNdKTsKQEAgLTM5ODcsNyArNDI4NCw4IEBACiAJICogV2Ugc2hvdWxkIGJlIG9uIHRoYXQgY2hhbm5lbCBmb3IgYXQgbGVhc3Qgb25lIGppZmZpZSwKIAkgKiBhbmQgbW9yZSB0aGFuIDUgc2Vjb25kcyBzZWVtcyBleGNlc3NpdmUuCiAJICovCi0JaWYgKCFkdXJhdGlvbiB8fCAhbXNlY3NfdG9famlmZmllcyhkdXJhdGlvbikgfHwgZHVyYXRpb24gPiA1MDAwKQorCWlmICghZHVyYXRpb24gfHwgIW1zZWNzX3RvX2ppZmZpZXMoZHVyYXRpb24pIHx8CisJICAgIGR1cmF0aW9uID4gcmRldi0+d2lwaHkubWF4X3JlbWFpbl9vbl9jaGFubmVsX2R1cmF0aW9uKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmICghcmRldi0+b3BzLT5yZW1haW5fb25fY2hhbm5lbCkKQEAgLTQxNTUsNiArNDQ1Myw3IEBACiAJICAgIGRldi0+aWVlZTgwMjExX3B0ci0+aWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX1AyUF9DTElFTlQgJiYKIAkgICAgZGV2LT5pZWVlODAyMTFfcHRyLT5pZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVAgJiYKIAkgICAgZGV2LT5pZWVlODAyMTFfcHRyLT5pZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTiAmJgorCSAgICBkZXYtPmllZWU4MDIxMV9wdHItPmlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UICYmCiAJICAgIGRldi0+aWVlZTgwMjExX3B0ci0+aWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX1AyUF9HTykKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCkBAIC00MTgwLDYgKzQ0NzksOCBAQAogCXZvaWQgKmhkcjsKIAl1NjQgY29va2llOwogCXN0cnVjdCBza19idWZmICptc2c7CisJdW5zaWduZWQgaW50IHdhaXQgPSAwOworCWJvb2wgb2ZmY2hhbjsKIAogCWlmICghaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0ZSQU1FXSB8fAogCSAgICAhaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1dJUEhZX0ZSRVFdKQpAQCAtNDE5Myw5ICs0NDk0LDE2IEBACiAJICAgIGRldi0+aWVlZTgwMjExX3B0ci0+aWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX1AyUF9DTElFTlQgJiYKIAkgICAgZGV2LT5pZWVlODAyMTFfcHRyLT5pZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVAgJiYKIAkgICAgZGV2LT5pZWVlODAyMTFfcHRyLT5pZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTiAmJgorCSAgICBkZXYtPmllZWU4MDIxMV9wdHItPmlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UICYmCiAJICAgIGRldi0+aWVlZTgwMjExX3B0ci0+aWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX1AyUF9HTykKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCisJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9EVVJBVElPTl0pIHsKKwkJaWYgKCFyZGV2LT5vcHMtPm1nbXRfdHhfY2FuY2VsX3dhaXQpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJd2FpdCA9IG5sYV9nZXRfdTMyKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9EVVJBVElPTl0pOworCX0KKwogCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfV0lQSFlfQ0hBTk5FTF9UWVBFXSkgewogCQljaGFubmVsX3R5cGUgPSBubGFfZ2V0X3UzMigKIAkJCWluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9XSVBIWV9DSEFOTkVMX1RZUEVdKTsKQEAgLTQyMDcsNiArNDUxNSw4IEBACiAJCWNoYW5uZWxfdHlwZV92YWxpZCA9IHRydWU7CiAJfQogCisJb2ZmY2hhbiA9IGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9PRkZDSEFOTkVMX1RYX09LXTsKKwogCWZyZXEgPSBubGFfZ2V0X3UzMihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfV0lQSFlfRlJFUV0pOwogCWNoYW4gPSByZGV2X2ZyZXFfdG9fY2hhbihyZGV2LCBmcmVxLCBjaGFubmVsX3R5cGUpOwogCWlmIChjaGFuID09IE5VTEwpCkBAIC00MjIzLDggKzQ1MzMsOCBAQAogCQllcnIgPSBQVFJfRVJSKGhkcik7CiAJCWdvdG8gZnJlZV9tc2c7CiAJfQotCWVyciA9IGNmZzgwMjExX21sbWVfbWdtdF90eChyZGV2LCBkZXYsIGNoYW4sIGNoYW5uZWxfdHlwZSwKLQkJCQkgICAgY2hhbm5lbF90eXBlX3ZhbGlkLAorCWVyciA9IGNmZzgwMjExX21sbWVfbWdtdF90eChyZGV2LCBkZXYsIGNoYW4sIG9mZmNoYW4sIGNoYW5uZWxfdHlwZSwKKwkJCQkgICAgY2hhbm5lbF90eXBlX3ZhbGlkLCB3YWl0LAogCQkJCSAgICBubGFfZGF0YShpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfRlJBTUVdKSwKIAkJCQkgICAgbmxhX2xlbihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfRlJBTUVdKSwKIAkJCQkgICAgJmNvb2tpZSk7CkBAIC00MjQzLDYgKzQ1NTMsMzEgQEAKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgaW50IG5sODAyMTFfdHhfbWdtdF9jYW5jZWxfd2FpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQoreworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IGluZm8tPnVzZXJfcHRyWzBdOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBpbmZvLT51c2VyX3B0clsxXTsKKwl1NjQgY29va2llOworCisJaWYgKCFpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfQ09PS0lFXSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIXJkZXYtPm9wcy0+bWdtdF90eF9jYW5jZWxfd2FpdCkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJaWYgKGRldi0+aWVlZTgwMjExX3B0ci0+aWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gJiYKKwkgICAgZGV2LT5pZWVlODAyMTFfcHRyLT5pZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgJiYKKwkgICAgZGV2LT5pZWVlODAyMTFfcHRyLT5pZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfUDJQX0NMSUVOVCAmJgorCSAgICBkZXYtPmllZWU4MDIxMV9wdHItPmlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUCAmJgorCSAgICBkZXYtPmllZWU4MDIxMV9wdHItPmlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOICYmCisJICAgIGRldi0+aWVlZTgwMjExX3B0ci0+aWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX1AyUF9HTykKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJY29va2llID0gbmxhX2dldF91NjQoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0NPT0tJRV0pOworCisJcmV0dXJuIHJkZXYtPm9wcy0+bWdtdF90eF9jYW5jZWxfd2FpdCgmcmRldi0+d2lwaHksIGRldiwgY29va2llKTsKK30KKwogc3RhdGljIGludCBubDgwMjExX3NldF9wb3dlcl9zYXZlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gaW5mby0+dXNlcl9wdHJbMF07CkBAIC00MzgxLDYgKzQ3MTYsNTAgQEAKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgaW50IG5sODAyMTFfam9pbl9tZXNoKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCit7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gaW5mby0+dXNlcl9wdHJbMF07CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGluZm8tPnVzZXJfcHRyWzFdOworCXN0cnVjdCBtZXNoX2NvbmZpZyBjZmc7CisJc3RydWN0IG1lc2hfc2V0dXAgc2V0dXA7CisJaW50IGVycjsKKworCS8qIHN0YXJ0IHdpdGggZGVmYXVsdCAqLworCW1lbWNweSgmY2ZnLCAmZGVmYXVsdF9tZXNoX2NvbmZpZywgc2l6ZW9mKGNmZykpOworCW1lbWNweSgmc2V0dXAsICZkZWZhdWx0X21lc2hfc2V0dXAsIHNpemVvZihzZXR1cCkpOworCisJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9NRVNIX0NPTkZJR10pIHsKKwkJLyogYW5kIHBhcnNlIHBhcmFtZXRlcnMgaWYgZ2l2ZW4gKi8KKwkJZXJyID0gbmw4MDIxMV9wYXJzZV9tZXNoX2NvbmZpZyhpbmZvLCAmY2ZnLCBOVUxMKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJaWYgKCFpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfTUVTSF9JRF0gfHwKKwkgICAgIW5sYV9sZW4oaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX01FU0hfSURdKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzZXR1cC5tZXNoX2lkID0gbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX01FU0hfSURdKTsKKwlzZXR1cC5tZXNoX2lkX2xlbiA9IG5sYV9sZW4oaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX01FU0hfSURdKTsKKworCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfTUVTSF9TRVRVUF0pIHsKKwkJLyogcGFyc2UgYWRkaXRpb25hbCBzZXR1cCBwYXJhbWV0ZXJzIGlmIGdpdmVuICovCisJCWVyciA9IG5sODAyMTFfcGFyc2VfbWVzaF9zZXR1cChpbmZvLCAmc2V0dXApOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gY2ZnODAyMTFfam9pbl9tZXNoKHJkZXYsIGRldiwgJnNldHVwLCAmY2ZnKTsKK30KKworc3RhdGljIGludCBubDgwMjExX2xlYXZlX21lc2goc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSBpbmZvLT51c2VyX3B0clswXTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaW5mby0+dXNlcl9wdHJbMV07CisKKwlyZXR1cm4gY2ZnODAyMTFfbGVhdmVfbWVzaChyZGV2LCBkZXYpOworfQorCiAjZGVmaW5lIE5MODAyMTFfRkxBR19ORUVEX1dJUEhZCQkweDAxCiAjZGVmaW5lIE5MODAyMTFfRkxBR19ORUVEX05FVERFVgkweDAyCiAjZGVmaW5lIE5MODAyMTFfRkxBR19ORUVEX1JUTkwJCTB4MDQKQEAgLTQ2MzYsMTkgKzUwMTUsMTkgQEAKIAkJLmZsYWdzID0gR0VOTF9BRE1JTl9QRVJNLAogCX0sCiAJewotCQkuY21kID0gTkw4MDIxMV9DTURfR0VUX01FU0hfUEFSQU1TLAotCQkuZG9pdCA9IG5sODAyMTFfZ2V0X21lc2hfcGFyYW1zLAorCQkuY21kID0gTkw4MDIxMV9DTURfR0VUX01FU0hfQ09ORklHLAorCQkuZG9pdCA9IG5sODAyMTFfZ2V0X21lc2hfY29uZmlnLAogCQkucG9saWN5ID0gbmw4MDIxMV9wb2xpY3ksCiAJCS8qIGNhbiBiZSByZXRyaWV2ZWQgYnkgdW5wcml2aWxlZ2VkIHVzZXJzICovCiAJCS5pbnRlcm5hbF9mbGFncyA9IE5MODAyMTFfRkxBR19ORUVEX05FVERFViB8CiAJCQkJICBOTDgwMjExX0ZMQUdfTkVFRF9SVE5MLAogCX0sCiAJewotCQkuY21kID0gTkw4MDIxMV9DTURfU0VUX01FU0hfUEFSQU1TLAotCQkuZG9pdCA9IG5sODAyMTFfc2V0X21lc2hfcGFyYW1zLAorCQkuY21kID0gTkw4MDIxMV9DTURfU0VUX01FU0hfQ09ORklHLAorCQkuZG9pdCA9IG5sODAyMTFfdXBkYXRlX21lc2hfY29uZmlnLAogCQkucG9saWN5ID0gbmw4MDIxMV9wb2xpY3ksCiAJCS5mbGFncyA9IEdFTkxfQURNSU5fUEVSTSwKLQkJLmludGVybmFsX2ZsYWdzID0gTkw4MDIxMV9GTEFHX05FRURfTkVUREVWIHwKKwkJLmludGVybmFsX2ZsYWdzID0gTkw4MDIxMV9GTEFHX05FRURfTkVUREVWX1VQIHwKIAkJCQkgIE5MODAyMTFfRkxBR19ORUVEX1JUTkwsCiAJfSwKIAl7CkBAIC00ODE2LDYgKzUxOTUsMTQgQEAKIAkJCQkgIE5MODAyMTFfRkxBR19ORUVEX1JUTkwsCiAJfSwKIAl7CisJCS5jbWQgPSBOTDgwMjExX0NNRF9GUkFNRV9XQUlUX0NBTkNFTCwKKwkJLmRvaXQgPSBubDgwMjExX3R4X21nbXRfY2FuY2VsX3dhaXQsCisJCS5wb2xpY3kgPSBubDgwMjExX3BvbGljeSwKKwkJLmZsYWdzID0gR0VOTF9BRE1JTl9QRVJNLAorCQkuaW50ZXJuYWxfZmxhZ3MgPSBOTDgwMjExX0ZMQUdfTkVFRF9ORVRERVZfVVAgfAorCQkJCSAgTkw4MDIxMV9GTEFHX05FRURfUlROTCwKKwl9LAorCXsKIAkJLmNtZCA9IE5MODAyMTFfQ01EX1NFVF9QT1dFUl9TQVZFLAogCQkuZG9pdCA9IG5sODAyMTFfc2V0X3Bvd2VyX3NhdmUsCiAJCS5wb2xpY3kgPSBubDgwMjExX3BvbGljeSwKQEAgLTQ4NTUsNiArNTI0MiwyMiBAQAogCQkuaW50ZXJuYWxfZmxhZ3MgPSBOTDgwMjExX0ZMQUdfTkVFRF9ORVRERVYgfAogCQkJCSAgTkw4MDIxMV9GTEFHX05FRURfUlROTCwKIAl9LAorCXsKKwkJLmNtZCA9IE5MODAyMTFfQ01EX0pPSU5fTUVTSCwKKwkJLmRvaXQgPSBubDgwMjExX2pvaW5fbWVzaCwKKwkJLnBvbGljeSA9IG5sODAyMTFfcG9saWN5LAorCQkuZmxhZ3MgPSBHRU5MX0FETUlOX1BFUk0sCisJCS5pbnRlcm5hbF9mbGFncyA9IE5MODAyMTFfRkxBR19ORUVEX05FVERFVl9VUCB8CisJCQkJICBOTDgwMjExX0ZMQUdfTkVFRF9SVE5MLAorCX0sCisJeworCQkuY21kID0gTkw4MDIxMV9DTURfTEVBVkVfTUVTSCwKKwkJLmRvaXQgPSBubDgwMjExX2xlYXZlX21lc2gsCisJCS5wb2xpY3kgPSBubDgwMjExX3BvbGljeSwKKwkJLmZsYWdzID0gR0VOTF9BRE1JTl9QRVJNLAorCQkuaW50ZXJuYWxfZmxhZ3MgPSBOTDgwMjExX0ZMQUdfTkVFRF9ORVRERVZfVVAgfAorCQkJCSAgTkw4MDIxMV9GTEFHX05FRURfUlROTCwKKwl9LAogfTsKIAogc3RhdGljIHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCBubDgwMjExX21sbWVfbWNncnAgPSB7CkBAIC01MTMzLDYgKzU1MzYsMjIgQEAKIAkJCQlOTDgwMjExX0NNRF9ESVNBU1NPQ0lBVEUsIGdmcCk7CiB9CiAKK3ZvaWQgbmw4MDIxMV9zZW5kX3VucHJvdF9kZWF1dGgoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGNvbnN0IHU4ICpidWYsCisJCQkJc2l6ZV90IGxlbiwgZ2ZwX3QgZ2ZwKQoreworCW5sODAyMTFfc2VuZF9tbG1lX2V2ZW50KHJkZXYsIG5ldGRldiwgYnVmLCBsZW4sCisJCQkJTkw4MDIxMV9DTURfVU5QUk9UX0RFQVVUSEVOVElDQVRFLCBnZnApOworfQorCit2b2lkIG5sODAyMTFfc2VuZF91bnByb3RfZGlzYXNzb2Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJCSAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgY29uc3QgdTggKmJ1ZiwKKwkJCQkgIHNpemVfdCBsZW4sIGdmcF90IGdmcCkKK3sKKwlubDgwMjExX3NlbmRfbWxtZV9ldmVudChyZGV2LCBuZXRkZXYsIGJ1ZiwgbGVuLAorCQkJCU5MODAyMTFfQ01EX1VOUFJPVF9ESVNBU1NPQ0lBVEUsIGdmcCk7Cit9CisKIHN0YXRpYyB2b2lkIG5sODAyMTFfc2VuZF9tbG1lX3RpbWVvdXQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCQkJCSAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBjbWQsCiAJCQkJICAgICAgY29uc3QgdTggKmFkZHIsIGdmcF90IGdmcCkKQEAgLTU2NTEsNiArNjA3MCw1MSBAQAogCW5sbXNnX2ZyZWUobXNnKTsKIH0KIAordm9pZAorbmw4MDIxMV9zZW5kX2NxbV9wa3Rsb3NzX25vdGlmeShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgY29uc3QgdTggKnBlZXIsCisJCQkJdTMyIG51bV9wYWNrZXRzLCBnZnBfdCBnZnApCit7CisJc3RydWN0IHNrX2J1ZmYgKm1zZzsKKwlzdHJ1Y3QgbmxhdHRyICpwaW5mb2F0dHI7CisJdm9pZCAqaGRyOworCisJbXNnID0gbmxtc2dfbmV3KE5MTVNHX0dPT0RTSVpFLCBnZnApOworCWlmICghbXNnKQorCQlyZXR1cm47CisKKwloZHIgPSBubDgwMjExaGRyX3B1dChtc2csIDAsIDAsIDAsIE5MODAyMTFfQ01EX05PVElGWV9DUU0pOworCWlmICghaGRyKSB7CisJCW5sbXNnX2ZyZWUobXNnKTsKKwkJcmV0dXJuOworCX0KKworCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9BVFRSX1dJUEhZLCByZGV2LT53aXBoeV9pZHgpOworCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9BVFRSX0lGSU5ERVgsIG5ldGRldi0+aWZpbmRleCk7CisJTkxBX1BVVChtc2csIE5MODAyMTFfQVRUUl9NQUMsIEVUSF9BTEVOLCBwZWVyKTsKKworCXBpbmZvYXR0ciA9IG5sYV9uZXN0X3N0YXJ0KG1zZywgTkw4MDIxMV9BVFRSX0NRTSk7CisJaWYgKCFwaW5mb2F0dHIpCisJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOworCisJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX0FUVFJfQ1FNX1BLVF9MT1NTX0VWRU5ULCBudW1fcGFja2V0cyk7CisKKwlubGFfbmVzdF9lbmQobXNnLCBwaW5mb2F0dHIpOworCisJaWYgKGdlbmxtc2dfZW5kKG1zZywgaGRyKSA8IDApIHsKKwkJbmxtc2dfZnJlZShtc2cpOworCQlyZXR1cm47CisJfQorCisJZ2VubG1zZ19tdWx0aWNhc3RfbmV0bnMod2lwaHlfbmV0KCZyZGV2LT53aXBoeSksIG1zZywgMCwKKwkJCQlubDgwMjExX21sbWVfbWNncnAuaWQsIGdmcCk7CisJcmV0dXJuOworCisgbmxhX3B1dF9mYWlsdXJlOgorCWdlbmxtc2dfY2FuY2VsKG1zZywgaGRyKTsKKwlubG1zZ19mcmVlKG1zZyk7Cit9CisKIHN0YXRpYyBpbnQgbmw4MDIxMV9uZXRsaW5rX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKiBuYiwKIAkJCQkgIHVuc2lnbmVkIGxvbmcgc3RhdGUsCiAJCQkJICB2b2lkICpfbm90aWZ5KQpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL25sODAyMTEuaCBiL25ldC93aXJlbGVzcy9ubDgwMjExLmgKaW5kZXggMzBkMmY5My4uZTNmN2ZhOCAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL25sODAyMTEuaAorKysgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5oCkBAIC0yNSw2ICsyNSwxMiBAQAogdm9pZCBubDgwMjExX3NlbmRfZGlzYXNzb2Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAkJCSAgIGNvbnN0IHU4ICpidWYsIHNpemVfdCBsZW4sIGdmcF90IGdmcCk7Cit2b2lkIG5sODAyMTFfc2VuZF91bnByb3RfZGVhdXRoKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCWNvbnN0IHU4ICpidWYsIHNpemVfdCBsZW4sIGdmcF90IGdmcCk7Cit2b2lkIG5sODAyMTFfc2VuZF91bnByb3RfZGlzYXNzb2Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJCSAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkgIGNvbnN0IHU4ICpidWYsIHNpemVfdCBsZW4sIGdmcF90IGdmcCk7CiB2b2lkIG5sODAyMTFfc2VuZF9hdXRoX3RpbWVvdXQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCQkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJCQkgICAgICAgY29uc3QgdTggKmFkZHIsIGdmcF90IGdmcCk7CkBAIC04Nyw1ICs5Myw5IEBACiAJCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJCQkgICAgIGVudW0gbmw4MDIxMV9jcW1fcnNzaV90aHJlc2hvbGRfZXZlbnQgcnNzaV9ldmVudCwKIAkJCSAgICAgZ2ZwX3QgZ2ZwKTsKK3ZvaWQKK25sODAyMTFfc2VuZF9jcW1fcGt0bG9zc19ub3RpZnkoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGNvbnN0IHU4ICpwZWVyLAorCQkJCXUzMiBudW1fcGFja2V0cywgZ2ZwX3QgZ2ZwKTsKIAogI2VuZGlmIC8qIF9fTkVUX1dJUkVMRVNTX05MODAyMTFfSCAqLwpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3JlZy5jIGIvbmV0L3dpcmVsZXNzL3JlZy5jCmluZGV4IDRiOWY4OTEuLjM3NjkzYjYgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9yZWcuYworKysgYi9uZXQvd2lyZWxlc3MvcmVnLmMKQEAgLTMyLDYgKzMyLDkgQEAKICAqIHJlbHkgb24gc29tZSBTSEExIGNoZWNrc3VtIG9mIHRoZSByZWdkb21haW4gZm9yIGV4YW1wbGUuCiAgKgogICovCisKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CkBAIC00OCw3ICs1MSw3IEBACiAjaWZkZWYgQ09ORklHX0NGRzgwMjExX1JFR19ERUJVRwogI2RlZmluZSBSRUdfREJHX1BSSU5UKGZvcm1hdCwgYXJncy4uLikgXAogCWRvIHsgXAotCQlwcmludGsoS0VSTl9ERUJVRyBmb3JtYXQgLCAjIyBhcmdzKTsgXAorCQlwcmludGsoS0VSTl9ERUJVRyBwcl9mbXQoZm9ybWF0KSwgIyNhcmdzKTsJXAogCX0gd2hpbGUgKDApCiAjZWxzZQogI2RlZmluZSBSRUdfREJHX1BSSU5UKGFyZ3MuLi4pCkBAIC05Niw2ICs5OSw5IEBACiAJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIGNoYW47CiB9OwogCitzdGF0aWMgdm9pZCByZWdfdG9kbyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworc3RhdGljIERFQ0xBUkVfV09SSyhyZWdfd29yaywgcmVnX3RvZG8pOworCiAvKiBXZSBrZWVwIGEgc3RhdGljIHdvcmxkIHJlZ3VsYXRvcnkgZG9tYWluIGluIGNhc2Ugb2YgdGhlIGFic2VuY2Ugb2YgQ1JEQSAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluIHdvcmxkX3JlZ2RvbSA9IHsKIAkubl9yZWdfcnVsZXMgPSA1LApAQCAtMzY3LDExICszNzMsMTAgQEAKIAl9OwogCiAJaWYgKCFpc193b3JsZF9yZWdkb20oKGNoYXIgKikgYWxwaGEyKSkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiY2ZnODAyMTE6IENhbGxpbmcgQ1JEQSBmb3IgY291bnRyeTogJWMlY1xuIiwKKwkJcHJfaW5mbygiQ2FsbGluZyBDUkRBIGZvciBjb3VudHJ5OiAlYyVjXG4iLAogCQkJYWxwaGEyWzBdLCBhbHBoYTJbMV0pOwogCWVsc2UKLQkJcHJpbnRrKEtFUk5fSU5GTyAiY2ZnODAyMTE6IENhbGxpbmcgQ1JEQSB0byB1cGRhdGUgd29ybGQgIgotCQkJInJlZ3VsYXRvcnkgZG9tYWluXG4iKTsKKwkJcHJfaW5mbygiQ2FsbGluZyBDUkRBIHRvIHVwZGF0ZSB3b3JsZCByZWd1bGF0b3J5IGRvbWFpblxuIik7CiAKIAkvKiBxdWVyeSBpbnRlcm5hbCByZWd1bGF0b3J5IGRhdGFiYXNlIChpZiBpdCBleGlzdHMpICovCiAJcmVnX3JlZ2RiX3F1ZXJ5KGFscGhhMik7CkBAIC02NTYsNyArNjYxLDggQEAKIAkgKiBGb2xsb3cgdGhlIGRyaXZlcidzIHJlZ3VsYXRvcnkgZG9tYWluLCBpZiBwcmVzZW50LCB1bmxlc3MgYSBjb3VudHJ5CiAJICogSUUgaGFzIGJlZW4gcHJvY2Vzc2VkIG9yIGEgdXNlciB3YW50cyB0byBoZWxwIGNvbXBsYWluY2UgZnVydGhlcgogCSAqLwotCWlmIChsYXN0X3JlcXVlc3QtPmluaXRpYXRvciAhPSBOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09VTlRSWV9JRSAmJgorCWlmICghY3VzdG9tX3JlZ2QgJiYKKwkgICAgbGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgIT0gTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPVU5UUllfSUUgJiYKIAkgICAgbGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgIT0gTkw4MDIxMV9SRUdET01fU0VUX0JZX1VTRVIgJiYKIAkgICAgd2lwaHktPnJlZ2QpCiAJCXJlZ2QgPSB3aXBoeS0+cmVnZDsKQEAgLTcxMSw2ICs3MTcsNjAgQEAKIH0KIEVYUE9SVF9TWU1CT0woZnJlcV9yZWdfaW5mbyk7CiAKKyNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfUkVHX0RFQlVHCitzdGF0aWMgY29uc3QgY2hhciAqcmVnX2luaXRpYXRvcl9uYW1lKGVudW0gbmw4MDIxMV9yZWdfaW5pdGlhdG9yIGluaXRpYXRvcikKK3sKKwlzd2l0Y2ggKGluaXRpYXRvcikgeworCWNhc2UgTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPUkU6CisJCXJldHVybiAiU2V0IGJ5IGNvcmUiOworCWNhc2UgTkw4MDIxMV9SRUdET01fU0VUX0JZX1VTRVI6CisJCXJldHVybiAiU2V0IGJ5IHVzZXIiOworCWNhc2UgTkw4MDIxMV9SRUdET01fU0VUX0JZX0RSSVZFUjoKKwkJcmV0dXJuICJTZXQgYnkgZHJpdmVyIjsKKwljYXNlIE5MODAyMTFfUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFOgorCQlyZXR1cm4gIlNldCBieSBjb3VudHJ5IElFIjsKKwlkZWZhdWx0OgorCQlXQVJOX09OKDEpOworCQlyZXR1cm4gIlNldCBieSBidWciOworCX0KK30KKworc3RhdGljIHZvaWQgY2hhbl9yZWdfcnVsZV9wcmludF9kYmcoc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuLAorCQkJCSAgICB1MzIgZGVzaXJlZF9id19raHosCisJCQkJICAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnX3J1bGUgKnJlZ19ydWxlKQoreworCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcG93ZXJfcnVsZSAqcG93ZXJfcnVsZTsKKwljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2ZyZXFfcmFuZ2UgKmZyZXFfcmFuZ2U7CisJY2hhciBtYXhfYW50ZW5uYV9nYWluWzMyXTsKKworCXBvd2VyX3J1bGUgPSAmcmVnX3J1bGUtPnBvd2VyX3J1bGU7CisJZnJlcV9yYW5nZSA9ICZyZWdfcnVsZS0+ZnJlcV9yYW5nZTsKKworCWlmICghcG93ZXJfcnVsZS0+bWF4X2FudGVubmFfZ2FpbikKKwkJc25wcmludGYobWF4X2FudGVubmFfZ2FpbiwgMzIsICJOL0EiKTsKKwllbHNlCisJCXNucHJpbnRmKG1heF9hbnRlbm5hX2dhaW4sIDMyLCAiJWQiLCBwb3dlcl9ydWxlLT5tYXhfYW50ZW5uYV9nYWluKTsKKworCVJFR19EQkdfUFJJTlQoIlVwZGF0aW5nIGluZm9ybWF0aW9uIG9uIGZyZXF1ZW5jeSAlZCBNSHogIgorCQkgICAgICAiZm9yIGEgJWQgTUh6IHdpZHRoIGNoYW5uZWwgd2l0aCByZWd1bGF0b3J5IHJ1bGU6XG4iLAorCQkgICAgICBjaGFuLT5jZW50ZXJfZnJlcSwKKwkJICAgICAgS0haX1RPX01IWihkZXNpcmVkX2J3X2toeikpOworCisJUkVHX0RCR19QUklOVCgiJWQgS0h6IC0gJWQgS0h6IEAgIEtIeiksICglcyBtQmksICVkIG1CbSlcbiIsCisJCSAgICAgIGZyZXFfcmFuZ2UtPnN0YXJ0X2ZyZXFfa2h6LAorCQkgICAgICBmcmVxX3JhbmdlLT5lbmRfZnJlcV9raHosCisJCSAgICAgIG1heF9hbnRlbm5hX2dhaW4sCisJCSAgICAgIHBvd2VyX3J1bGUtPm1heF9laXJwKTsKK30KKyNlbHNlCitzdGF0aWMgdm9pZCBjaGFuX3JlZ19ydWxlX3ByaW50X2RiZyhzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4sCisJCQkJICAgIHUzMiBkZXNpcmVkX2J3X2toeiwKKwkJCQkgICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdfcnVsZSAqcmVnX3J1bGUpCit7CisJcmV0dXJuOworfQorI2VuZGlmCisKIC8qCiAgKiBOb3RlIHRoYXQgcmlnaHQgbm93IHdlIGFzc3VtZSB0aGUgZGVzaXJlZCBjaGFubmVsIGJhbmR3aWR0aAogICogaXMgYWx3YXlzIDIwIE1IeiBmb3IgZWFjaCBpbmRpdmlkdWFsIGNoYW5uZWwgKEhUNDAgdXNlcyAyMCBNSHoKQEAgLTcyMCw3ICs3ODAsOSBAQAogICogb24gdGhlIHdpcGh5IHdpdGggdGhlIHRhcmdldF9idyBzcGVjaWZpZWQuIFRoZW4gd2UgY2FuIHNpbXBseSB1c2UKICAqIHRoYXQgYmVsb3cgZm9yIHRoZSBkZXNpcmVkX2J3X2toeiBiZWxvdy4KICAqLwotc3RhdGljIHZvaWQgaGFuZGxlX2NoYW5uZWwoc3RydWN0IHdpcGh5ICp3aXBoeSwgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kLAorc3RhdGljIHZvaWQgaGFuZGxlX2NoYW5uZWwoc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCSAgIGVudW0gbmw4MDIxMV9yZWdfaW5pdGlhdG9yIGluaXRpYXRvciwKKwkJCSAgIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCwKIAkJCSAgIHVuc2lnbmVkIGludCBjaGFuX2lkeCkKIHsKIAlpbnQgcjsKQEAgLTc0OCw4ICs4MTAsMjcgQEAKIAkJCSAgZGVzaXJlZF9id19raHosCiAJCQkgICZyZWdfcnVsZSk7CiAKLQlpZiAocikKKwlpZiAocikgeworCQkvKgorCQkgKiBXZSB3aWxsIGRpc2FibGUgYWxsIGNoYW5uZWxzIHRoYXQgZG8gbm90IG1hdGNoIG91cgorCQkgKiByZWNpZXZlZCByZWd1bGF0b3J5IHJ1bGUgdW5sZXNzIHRoZSBoaW50IGlzIGNvbWluZworCQkgKiBmcm9tIGEgQ291bnRyeSBJRSBhbmQgdGhlIENvdW50cnkgSUUgaGFkIG5vIGluZm9ybWF0aW9uCisJCSAqIGFib3V0IGEgYmFuZC4gVGhlIElFRUUgODAyLjExIHNwZWMgYWxsb3dzIGZvciBhbiBBUAorCQkgKiB0byBzZW5kIG9ubHkgYSBzdWJzZXQgb2YgdGhlIHJlZ3VsYXRvcnkgcnVsZXMgYWxsb3dlZCwKKwkJICogc28gYW4gQVAgaW4gdGhlIFVTIHRoYXQgb25seSBzdXBwb3J0cyAyLjQgR0h6IG1heSBvbmx5IHNlbmQKKwkJICogYSBjb3VudHJ5IElFIHdpdGggaW5mb3JtYXRpb24gZm9yIHRoZSAyLjQgR0h6IGJhbmQKKwkJICogd2hpbGUgNSBHSHogaXMgc3RpbGwgc3VwcG9ydGVkLgorCQkgKi8KKwkJaWYgKGluaXRpYXRvciA9PSBOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09VTlRSWV9JRSAmJgorCQkgICAgciA9PSAtRVJBTkdFKQorCQkJcmV0dXJuOworCisJCVJFR19EQkdfUFJJTlQoIkRpc2FibGluZyBmcmVxICVkIE1IelxuIiwgY2hhbi0+Y2VudGVyX2ZyZXEpOworCQljaGFuLT5mbGFncyA9IElFRUU4MDIxMV9DSEFOX0RJU0FCTEVEOwogCQlyZXR1cm47CisJfQorCisJY2hhbl9yZWdfcnVsZV9wcmludF9kYmcoY2hhbiwgZGVzaXJlZF9id19raHosIHJlZ19ydWxlKTsKIAogCXBvd2VyX3J1bGUgPSAmcmVnX3J1bGUtPnBvd2VyX3J1bGU7CiAJZnJlcV9yYW5nZSA9ICZyZWdfcnVsZS0+ZnJlcV9yYW5nZTsKQEAgLTc4NCw3ICs4NjUsOSBAQAogCQljaGFuLT5tYXhfcG93ZXIgPSAoaW50KSBNQk1fVE9fREJNKHBvd2VyX3J1bGUtPm1heF9laXJwKTsKIH0KIAotc3RhdGljIHZvaWQgaGFuZGxlX2JhbmQoc3RydWN0IHdpcGh5ICp3aXBoeSwgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kKQorc3RhdGljIHZvaWQgaGFuZGxlX2JhbmQoc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCwKKwkJCWVudW0gbmw4MDIxMV9yZWdfaW5pdGlhdG9yIGluaXRpYXRvcikKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKQEAgLTc5MywyNCArODc2LDQyIEBACiAJc2JhbmQgPSB3aXBoeS0+YmFuZHNbYmFuZF07CiAKIAlmb3IgKGkgPSAwOyBpIDwgc2JhbmQtPm5fY2hhbm5lbHM7IGkrKykKLQkJaGFuZGxlX2NoYW5uZWwod2lwaHksIGJhbmQsIGkpOworCQloYW5kbGVfY2hhbm5lbCh3aXBoeSwgaW5pdGlhdG9yLCBiYW5kLCBpKTsKIH0KIAogc3RhdGljIGJvb2wgaWdub3JlX3JlZ191cGRhdGUoc3RydWN0IHdpcGh5ICp3aXBoeSwKIAkJCSAgICAgIGVudW0gbmw4MDIxMV9yZWdfaW5pdGlhdG9yIGluaXRpYXRvcikKIHsKLQlpZiAoIWxhc3RfcmVxdWVzdCkKKwlpZiAoIWxhc3RfcmVxdWVzdCkgeworCQlSRUdfREJHX1BSSU5UKCJJZ25vcmluZyByZWd1bGF0b3J5IHJlcXVlc3QgJXMgc2luY2UgIgorCQkJICAgICAgImxhc3RfcmVxdWVzdCBpcyBub3Qgc2V0XG4iLAorCQkJICAgICAgcmVnX2luaXRpYXRvcl9uYW1lKGluaXRpYXRvcikpOwogCQlyZXR1cm4gdHJ1ZTsKKwl9CisKIAlpZiAoaW5pdGlhdG9yID09IE5MODAyMTFfUkVHRE9NX1NFVF9CWV9DT1JFICYmCi0JICAgIHdpcGh5LT5mbGFncyAmIFdJUEhZX0ZMQUdfQ1VTVE9NX1JFR1VMQVRPUlkpCisJICAgIHdpcGh5LT5mbGFncyAmIFdJUEhZX0ZMQUdfQ1VTVE9NX1JFR1VMQVRPUlkpIHsKKwkJUkVHX0RCR19QUklOVCgiSWdub3JpbmcgcmVndWxhdG9yeSByZXF1ZXN0ICVzICIKKwkJCSAgICAgICJzaW5jZSB0aGUgZHJpdmVyIHVzZXMgaXRzIG93biBjdXN0b20gIgorCQkJICAgICAgInJlZ3VsYXRvcnkgZG9tYWluICIsCisJCQkgICAgICByZWdfaW5pdGlhdG9yX25hbWUoaW5pdGlhdG9yKSk7CiAJCXJldHVybiB0cnVlOworCX0KKwogCS8qCiAJICogd2lwaHktPnJlZ2Qgd2lsbCBiZSBzZXQgb25jZSB0aGUgZGV2aWNlIGhhcyBpdHMgb3duCiAJICogZGVzaXJlZCByZWd1bGF0b3J5IGRvbWFpbiBzZXQKIAkgKi8KIAlpZiAod2lwaHktPmZsYWdzICYgV0lQSFlfRkxBR19TVFJJQ1RfUkVHVUxBVE9SWSAmJiAhd2lwaHktPnJlZ2QgJiYKLQkgICAgIWlzX3dvcmxkX3JlZ2RvbShsYXN0X3JlcXVlc3QtPmFscGhhMikpCisJICAgIGluaXRpYXRvciAhPSBOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09VTlRSWV9JRSAmJgorCSAgICAhaXNfd29ybGRfcmVnZG9tKGxhc3RfcmVxdWVzdC0+YWxwaGEyKSkgeworCQlSRUdfREJHX1BSSU5UKCJJZ25vcmluZyByZWd1bGF0b3J5IHJlcXVlc3QgJXMgIgorCQkJICAgICAgInNpbmNlIHRoZSBkcml2ZXIgcmVxdWlyZXMgaXRzIG93biByZWd1bGFvdHJ5ICIKKwkJCSAgICAgICJkb21haW4gdG8gYmUgc2V0IGZpcnN0IiwKKwkJCSAgICAgIHJlZ19pbml0aWF0b3JfbmFtZShpbml0aWF0b3IpKTsKIAkJcmV0dXJuIHRydWU7CisJfQorCiAJcmV0dXJuIGZhbHNlOwogfQogCkBAIC0xMDMwLDcgKzExMzEsNyBAQAogCQlnb3RvIG91dDsKIAlmb3IgKGJhbmQgPSAwOyBiYW5kIDwgSUVFRTgwMjExX05VTV9CQU5EUzsgYmFuZCsrKSB7CiAJCWlmICh3aXBoeS0+YmFuZHNbYmFuZF0pCi0JCQloYW5kbGVfYmFuZCh3aXBoeSwgYmFuZCk7CisJCQloYW5kbGVfYmFuZCh3aXBoeSwgYmFuZCwgaW5pdGlhdG9yKTsKIAl9CiBvdXQ6CiAJcmVnX3Byb2Nlc3NfYmVhY29ucyh3aXBoeSk7CkBAIC0xMDY2LDEwICsxMTY3LDE3IEBACiAJCQkgICAgICAgcmVnZCk7CiAKIAlpZiAocikgeworCQlSRUdfREJHX1BSSU5UKCJEaXNhYmxpbmcgZnJlcSAlZCBNSHogYXMgY3VzdG9tICIKKwkJCSAgICAgICJyZWdkIGhhcyBubyBydWxlIHRoYXQgZml0cyBhICVkIE1IeiAiCisJCQkgICAgICAid2lkZSBjaGFubmVsXG4iLAorCQkJICAgICAgY2hhbi0+Y2VudGVyX2ZyZXEsCisJCQkgICAgICBLSFpfVE9fTUhaKGRlc2lyZWRfYndfa2h6KSk7CiAJCWNoYW4tPmZsYWdzID0gSUVFRTgwMjExX0NIQU5fRElTQUJMRUQ7CiAJCXJldHVybjsKIAl9CiAKKwljaGFuX3JlZ19ydWxlX3ByaW50X2RiZyhjaGFuLCBkZXNpcmVkX2J3X2toeiwgcmVnX3J1bGUpOworCiAJcG93ZXJfcnVsZSA9ICZyZWdfcnVsZS0+cG93ZXJfcnVsZTsKIAlmcmVxX3JhbmdlID0gJnJlZ19ydWxlLT5mcmVxX3JhbmdlOwogCkBAIC0xMjE1LDYgKzEzMjMsMjEgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAorc3RhdGljIHZvaWQgcmVnX3NldF9yZXF1ZXN0X3Byb2Nlc3NlZCh2b2lkKQoreworCWJvb2wgbmVlZF9tb3JlX3Byb2Nlc3NpbmcgPSBmYWxzZTsKKworCWxhc3RfcmVxdWVzdC0+cHJvY2Vzc2VkID0gdHJ1ZTsKKworCXNwaW5fbG9jaygmcmVnX3JlcXVlc3RzX2xvY2spOworCWlmICghbGlzdF9lbXB0eSgmcmVnX3JlcXVlc3RzX2xpc3QpKQorCQluZWVkX21vcmVfcHJvY2Vzc2luZyA9IHRydWU7CisJc3Bpbl91bmxvY2soJnJlZ19yZXF1ZXN0c19sb2NrKTsKKworCWlmIChuZWVkX21vcmVfcHJvY2Vzc2luZykKKwkJc2NoZWR1bGVfd29yaygmcmVnX3dvcmspOworfQorCiAvKioKICAqIF9fcmVndWxhdG9yeV9oaW50IC0gaGludCB0byB0aGUgd2lyZWxlc3MgY29yZSBhIHJlZ3VsYXRvcnkgZG9tYWluCiAgKiBAd2lwaHk6IGlmIHRoZSBoaW50IGNvbWVzIGZyb20gY291bnRyeSBpbmZvcm1hdGlvbiBmcm9tIGFuIEFQLCB0aGlzCkBAIC0xMjkwLDggKzE0MTMsMTAgQEAKIAkJICogaGF2ZSBhcHBsaWVkIHRoZSByZXF1ZXN0ZWQgcmVndWxhdG9yeSBkb21haW4gYmVmb3JlIHdlIGp1c3QKIAkJICogaW5mb3JtIHVzZXJzcGFjZSB3ZSBoYXZlIHByb2Nlc3NlZCB0aGUgcmVxdWVzdAogCQkgKi8KLQkJaWYgKHIgPT0gLUVBTFJFQURZKQorCQlpZiAociA9PSAtRUFMUkVBRFkpIHsKIAkJCW5sODAyMTFfc2VuZF9yZWdfY2hhbmdlX2V2ZW50KGxhc3RfcmVxdWVzdCk7CisJCQlyZWdfc2V0X3JlcXVlc3RfcHJvY2Vzc2VkKCk7CisJCX0KIAkJcmV0dXJuIHI7CiAJfQogCkBAIC0xMzA3LDE2ICsxNDMyLDEzIEBACiAKIAlCVUdfT04oIXJlZ19yZXF1ZXN0LT5hbHBoYTIpOwogCi0JbXV0ZXhfbG9jaygmY2ZnODAyMTFfbXV0ZXgpOwotCW11dGV4X2xvY2soJnJlZ19tdXRleCk7Ci0KIAlpZiAod2lwaHlfaWR4X3ZhbGlkKHJlZ19yZXF1ZXN0LT53aXBoeV9pZHgpKQogCQl3aXBoeSA9IHdpcGh5X2lkeF90b193aXBoeShyZWdfcmVxdWVzdC0+d2lwaHlfaWR4KTsKIAogCWlmIChyZWdfcmVxdWVzdC0+aW5pdGlhdG9yID09IE5MODAyMTFfUkVHRE9NX1NFVF9CWV9EUklWRVIgJiYKIAkgICAgIXdpcGh5KSB7CiAJCWtmcmVlKHJlZ19yZXF1ZXN0KTsKLQkJZ290byBvdXQ7CisJCXJldHVybjsKIAl9CiAKIAlyID0gX19yZWd1bGF0b3J5X2hpbnQod2lwaHksIHJlZ19yZXF1ZXN0KTsKQEAgLTEzMjQsMzAgKzE0NDYsNDggQEAKIAlpZiAociA9PSAtRUFMUkVBRFkgJiYgd2lwaHkgJiYKIAkgICAgd2lwaHktPmZsYWdzICYgV0lQSFlfRkxBR19TVFJJQ1RfUkVHVUxBVE9SWSkKIAkJd2lwaHlfdXBkYXRlX3JlZ3VsYXRvcnkod2lwaHksIGluaXRpYXRvcik7Cit9CisKKy8qCisgKiBQcm9jZXNzZXMgcmVndWxhdG9yeSBoaW50cywgdGhpcyBpcyBhbGwgdGhlIE5MODAyMTFfUkVHRE9NX1NFVF9CWV8qCisgKiBSZWd1bGF0b3J5IGhpbnRzIGNvbWUgb24gYSBmaXJzdCBjb21lIGZpcnN0IHNlcnZlIGJhc2lzIGFuZCB3ZQorICogbXVzdCBwcm9jZXNzIGVhY2ggb25lIGF0b21pY2FsbHkuCisgKi8KK3N0YXRpYyB2b2lkIHJlZ19wcm9jZXNzX3BlbmRpbmdfaGludHModm9pZCkKK3sKKwlzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICpyZWdfcmVxdWVzdDsKKworCW11dGV4X2xvY2soJmNmZzgwMjExX211dGV4KTsKKwltdXRleF9sb2NrKCZyZWdfbXV0ZXgpOworCisJLyogV2hlbiBsYXN0X3JlcXVlc3QtPnByb2Nlc3NlZCBiZWNvbWVzIHRydWUgdGhpcyB3aWxsIGJlIHJlc2NoZWR1bGVkICovCisJaWYgKGxhc3RfcmVxdWVzdCAmJiAhbGFzdF9yZXF1ZXN0LT5wcm9jZXNzZWQpIHsKKwkJUkVHX0RCR19QUklOVCgiUGVuZGluZyByZWd1bGF0b3J5IHJlcXVlc3QsIHdhaXRpbmcgIgorCQkJICAgICAgImZvciBpdCB0byBiZSBwcm9jZXNzZWQuLi4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJc3Bpbl9sb2NrKCZyZWdfcmVxdWVzdHNfbG9jayk7CisKKwlpZiAobGlzdF9lbXB0eSgmcmVnX3JlcXVlc3RzX2xpc3QpKSB7CisJCXNwaW5fdW5sb2NrKCZyZWdfcmVxdWVzdHNfbG9jayk7CisJCWdvdG8gb3V0OworCX0KKworCXJlZ19yZXF1ZXN0ID0gbGlzdF9maXJzdF9lbnRyeSgmcmVnX3JlcXVlc3RzX2xpc3QsCisJCQkJICAgICAgIHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QsCisJCQkJICAgICAgIGxpc3QpOworCWxpc3RfZGVsX2luaXQoJnJlZ19yZXF1ZXN0LT5saXN0KTsKKworCXNwaW5fdW5sb2NrKCZyZWdfcmVxdWVzdHNfbG9jayk7CisKKwlyZWdfcHJvY2Vzc19oaW50KHJlZ19yZXF1ZXN0KTsKKwogb3V0OgogCW11dGV4X3VubG9jaygmcmVnX211dGV4KTsKIAltdXRleF91bmxvY2soJmNmZzgwMjExX211dGV4KTsKIH0KIAotLyogUHJvY2Vzc2VzIHJlZ3VsYXRvcnkgaGludHMsIHRoaXMgaXMgYWxsIHRoZSBOTDgwMjExX1JFR0RPTV9TRVRfQllfKiAqLwotc3RhdGljIHZvaWQgcmVnX3Byb2Nlc3NfcGVuZGluZ19oaW50cyh2b2lkKQotCXsKLQlzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICpyZWdfcmVxdWVzdDsKLQotCXNwaW5fbG9jaygmcmVnX3JlcXVlc3RzX2xvY2spOwotCXdoaWxlICghbGlzdF9lbXB0eSgmcmVnX3JlcXVlc3RzX2xpc3QpKSB7Ci0JCXJlZ19yZXF1ZXN0ID0gbGlzdF9maXJzdF9lbnRyeSgmcmVnX3JlcXVlc3RzX2xpc3QsCi0JCQkJCSAgICAgICBzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0LAotCQkJCQkgICAgICAgbGlzdCk7Ci0JCWxpc3RfZGVsX2luaXQoJnJlZ19yZXF1ZXN0LT5saXN0KTsKLQotCQlzcGluX3VubG9jaygmcmVnX3JlcXVlc3RzX2xvY2spOwotCQlyZWdfcHJvY2Vzc19oaW50KHJlZ19yZXF1ZXN0KTsKLQkJc3Bpbl9sb2NrKCZyZWdfcmVxdWVzdHNfbG9jayk7Ci0JfQotCXNwaW5fdW5sb2NrKCZyZWdfcmVxdWVzdHNfbG9jayk7Ci19Ci0KIC8qIFByb2Nlc3NlcyBiZWFjb24gaGludHMgLS0gdGhpcyBoYXMgbm90aGluZyB0byBkbyB3aXRoIGNvdW50cnkgSUVzICovCiBzdGF0aWMgdm9pZCByZWdfcHJvY2Vzc19wZW5kaW5nX2JlYWNvbl9oaW50cyh2b2lkKQogewpAQCAtMTM5Miw4ICsxNTMyLDYgQEAKIAlyZWdfcHJvY2Vzc19wZW5kaW5nX2JlYWNvbl9oaW50cygpOwogfQogCi1zdGF0aWMgREVDTEFSRV9XT1JLKHJlZ193b3JrLCByZWdfdG9kbyk7Ci0KIHN0YXRpYyB2b2lkIHF1ZXVlX3JlZ3VsYXRvcnlfcmVxdWVzdChzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICpyZXF1ZXN0KQogewogCWlmIChpc2FscGhhKHJlcXVlc3QtPmFscGhhMlswXSkpCkBAIC0xNDI4LDEyICsxNTY2LDcgQEAKIAlyZXF1ZXN0LT5hbHBoYTJbMV0gPSBhbHBoYTJbMV07CiAJcmVxdWVzdC0+aW5pdGlhdG9yID0gTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPUkU7CiAKLQkvKgotCSAqIFRoaXMgZW5zdXJlcyBsYXN0X3JlcXVlc3QgaXMgcG9wdWxhdGVkIG9uY2UgbW9kdWxlcwotCSAqIGNvbWUgc3dpbmdpbmcgaW4gYW5kIGNhbGxpbmcgcmVndWxhdG9yeSBoaW50cyBhbmQKLQkgKiB3aXBoeV9hcHBseV9jdXN0b21fcmVndWxhdG9yeSgpLgotCSAqLwotCXJlZ19wcm9jZXNzX2hpbnQocmVxdWVzdCk7CisJcXVldWVfcmVndWxhdG9yeV9yZXF1ZXN0KHJlcXVlc3QpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNTU5LDcgKzE2OTIsNyBAQAogCWlmIChpc191c2VyX3JlZ2RvbV9zYXZlZCgpKSB7CiAJCS8qIFVubGVzcyB3ZSdyZSBhc2tlZCB0byBpZ25vcmUgaXQgYW5kIHJlc2V0IGl0ICovCiAJCWlmIChyZXNldF91c2VyKSB7Ci0JCQlSRUdfREJHX1BSSU5UKCJjZmc4MDIxMTogUmVzdG9yaW5nIHJlZ3VsYXRvcnkgc2V0dGluZ3MgIgorCQkJUkVHX0RCR19QUklOVCgiUmVzdG9yaW5nIHJlZ3VsYXRvcnkgc2V0dGluZ3MgIgogCQkJICAgICAgICJpbmNsdWRpbmcgdXNlciBwcmVmZXJlbmNlXG4iKTsKIAkJCXVzZXJfYWxwaGEyWzBdID0gJzknOwogCQkJdXNlcl9hbHBoYTJbMV0gPSAnNyc7CkBAIC0xNTcwLDcgKzE3MDMsNyBAQAogCQkJICogYmFjayBhcyB0aGV5IHdlcmUgZm9yIGEgZnVsbCByZXN0b3JlLgogCQkJICovCiAJCQlpZiAoIWlzX3dvcmxkX3JlZ2RvbShpZWVlODAyMTFfcmVnZG9tKSkgewotCQkJCVJFR19EQkdfUFJJTlQoImNmZzgwMjExOiBLZWVwaW5nIHByZWZlcmVuY2Ugb24gIgorCQkJCVJFR19EQkdfUFJJTlQoIktlZXBpbmcgcHJlZmVyZW5jZSBvbiAiCiAJCQkJICAgICAgICJtb2R1bGUgcGFyYW1ldGVyIGllZWU4MDIxMV9yZWdkb206ICVjJWNcbiIsCiAJCQkJICAgICAgIGllZWU4MDIxMV9yZWdkb21bMF0sCiAJCQkJICAgICAgIGllZWU4MDIxMV9yZWdkb21bMV0pOwpAQCAtMTU3OCw3ICsxNzExLDcgQEAKIAkJCQlhbHBoYTJbMV0gPSBpZWVlODAyMTFfcmVnZG9tWzFdOwogCQkJfQogCQl9IGVsc2UgewotCQkJUkVHX0RCR19QUklOVCgiY2ZnODAyMTE6IFJlc3RvcmluZyByZWd1bGF0b3J5IHNldHRpbmdzICIKKwkJCVJFR19EQkdfUFJJTlQoIlJlc3RvcmluZyByZWd1bGF0b3J5IHNldHRpbmdzICIKIAkJCSAgICAgICAid2hpbGUgcHJlc2VydmluZyB1c2VyIHByZWZlcmVuY2UgZm9yOiAlYyVjXG4iLAogCQkJICAgICAgIHVzZXJfYWxwaGEyWzBdLAogCQkJICAgICAgIHVzZXJfYWxwaGEyWzFdKTsKQEAgLTE1ODYsMTQgKzE3MTksMTQgQEAKIAkJCWFscGhhMlsxXSA9IHVzZXJfYWxwaGEyWzFdOwogCQl9CiAJfSBlbHNlIGlmICghaXNfd29ybGRfcmVnZG9tKGllZWU4MDIxMV9yZWdkb20pKSB7Ci0JCVJFR19EQkdfUFJJTlQoImNmZzgwMjExOiBLZWVwaW5nIHByZWZlcmVuY2Ugb24gIgorCQlSRUdfREJHX1BSSU5UKCJLZWVwaW5nIHByZWZlcmVuY2Ugb24gIgogCQkgICAgICAgIm1vZHVsZSBwYXJhbWV0ZXIgaWVlZTgwMjExX3JlZ2RvbTogJWMlY1xuIiwKIAkJICAgICAgIGllZWU4MDIxMV9yZWdkb21bMF0sCiAJCSAgICAgICBpZWVlODAyMTFfcmVnZG9tWzFdKTsKIAkJYWxwaGEyWzBdID0gaWVlZTgwMjExX3JlZ2RvbVswXTsKIAkJYWxwaGEyWzFdID0gaWVlZTgwMjExX3JlZ2RvbVsxXTsKIAl9IGVsc2UKLQkJUkVHX0RCR19QUklOVCgiY2ZnODAyMTE6IFJlc3RvcmluZyByZWd1bGF0b3J5IHNldHRpbmdzXG4iKTsKKwkJUkVHX0RCR19QUklOVCgiUmVzdG9yaW5nIHJlZ3VsYXRvcnkgc2V0dGluZ3NcbiIpOwogfQogCiAvKgpAQCAtMTY2MSw3ICsxNzk0LDcgQEAKIAogdm9pZCByZWd1bGF0b3J5X2hpbnRfZGlzY29ubmVjdCh2b2lkKQogewotCVJFR19EQkdfUFJJTlQoImNmZzgwMjExOiBBbGwgZGV2aWNlcyBhcmUgZGlzY29ubmVjdGVkLCBnb2luZyB0byAiCisJUkVHX0RCR19QUklOVCgiQWxsIGRldmljZXMgYXJlIGRpc2Nvbm5lY3RlZCwgZ29pbmcgdG8gIgogCQkgICAgICAicmVzdG9yZSByZWd1bGF0b3J5IHNldHRpbmdzXG4iKTsKIAlyZXN0b3JlX3JlZ3VsYXRvcnlfc2V0dGluZ3MoZmFsc2UpOwogfQpAQCAtMTY5MSw3ICsxODI0LDcgQEAKIAlpZiAoIXJlZ19iZWFjb24pCiAJCXJldHVybiAtRU5PTUVNOwogCi0JUkVHX0RCR19QUklOVCgiY2ZnODAyMTE6IEZvdW5kIG5ldyBiZWFjb24gb24gIgorCVJFR19EQkdfUFJJTlQoIkZvdW5kIG5ldyBiZWFjb24gb24gIgogCQkgICAgICAiZnJlcXVlbmN5OiAlZCBNSHogKENoICVkKSBvbiAlc1xuIiwKIAkJICAgICAgYmVhY29uX2NoYW4tPmNlbnRlcl9mcmVxLAogCQkgICAgICBpZWVlODAyMTFfZnJlcXVlbmN5X3RvX2NoYW5uZWwoYmVhY29uX2NoYW4tPmNlbnRlcl9mcmVxKSwKQEAgLTE3MjEsOCArMTg1NCw3IEBACiAJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9mcmVxX3JhbmdlICpmcmVxX3JhbmdlID0gTlVMTDsKIAljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3Bvd2VyX3J1bGUgKnBvd2VyX3J1bGUgPSBOVUxMOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiICAgIChzdGFydF9mcmVxIC0gZW5kX2ZyZXEgQCBiYW5kd2lkdGgpLCAiCi0JCSIobWF4X2FudGVubmFfZ2FpbiwgbWF4X2VpcnApXG4iKTsKKwlwcl9pbmZvKCIgICAgKHN0YXJ0X2ZyZXEgLSBlbmRfZnJlcSBAIGJhbmR3aWR0aCksIChtYXhfYW50ZW5uYV9nYWluLCBtYXhfZWlycClcbiIpOwogCiAJZm9yIChpID0gMDsgaSA8IHJkLT5uX3JlZ19ydWxlczsgaSsrKSB7CiAJCXJlZ19ydWxlID0gJnJkLT5yZWdfcnVsZXNbaV07CkBAIC0xNzM0LDE2ICsxODY2LDE0IEBACiAJCSAqIGluIGNlcnRhaW4gcmVnaW9ucwogCQkgKi8KIAkJaWYgKHBvd2VyX3J1bGUtPm1heF9hbnRlbm5hX2dhaW4pCi0JCQlwcmludGsoS0VSTl9JTkZPICIgICAgKCVkIEtIeiAtICVkIEtIeiBAICVkIEtIeiksICIKLQkJCQkiKCVkIG1CaSwgJWQgbUJtKVxuIiwKKwkJCXByX2luZm8oIiAgICAoJWQgS0h6IC0gJWQgS0h6IEAgJWQgS0h6KSwgKCVkIG1CaSwgJWQgbUJtKVxuIiwKIAkJCQlmcmVxX3JhbmdlLT5zdGFydF9mcmVxX2toeiwKIAkJCQlmcmVxX3JhbmdlLT5lbmRfZnJlcV9raHosCiAJCQkJZnJlcV9yYW5nZS0+bWF4X2JhbmR3aWR0aF9raHosCiAJCQkJcG93ZXJfcnVsZS0+bWF4X2FudGVubmFfZ2FpbiwKIAkJCQlwb3dlcl9ydWxlLT5tYXhfZWlycCk7CiAJCWVsc2UKLQkJCXByaW50ayhLRVJOX0lORk8gIiAgICAoJWQgS0h6IC0gJWQgS0h6IEAgJWQgS0h6KSwgIgotCQkJCSIoTi9BLCAlZCBtQm0pXG4iLAorCQkJcHJfaW5mbygiICAgICglZCBLSHogLSAlZCBLSHogQCAlZCBLSHopLCAoTi9BLCAlZCBtQm0pXG4iLAogCQkJCWZyZXFfcmFuZ2UtPnN0YXJ0X2ZyZXFfa2h6LAogCQkJCWZyZXFfcmFuZ2UtPmVuZF9mcmVxX2toeiwKIAkJCQlmcmVxX3JhbmdlLT5tYXhfYmFuZHdpZHRoX2toeiwKQEAgLTE3NjIsMjcgKzE4OTIsMjAgQEAKIAkJCXJkZXYgPSBjZmc4MDIxMV9yZGV2X2J5X3dpcGh5X2lkeCgKIAkJCQlsYXN0X3JlcXVlc3QtPndpcGh5X2lkeCk7CiAJCQlpZiAocmRldikgewotCQkJCXByaW50ayhLRVJOX0lORk8gImNmZzgwMjExOiBDdXJyZW50IHJlZ3VsYXRvcnkgIgotCQkJCQkiZG9tYWluIHVwZGF0ZWQgYnkgQVAgdG86ICVjJWNcbiIsCisJCQkJcHJfaW5mbygiQ3VycmVudCByZWd1bGF0b3J5IGRvbWFpbiB1cGRhdGVkIGJ5IEFQIHRvOiAlYyVjXG4iLAogCQkJCQlyZGV2LT5jb3VudHJ5X2llX2FscGhhMlswXSwKIAkJCQkJcmRldi0+Y291bnRyeV9pZV9hbHBoYTJbMV0pOwogCQkJfSBlbHNlCi0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiY2ZnODAyMTE6IEN1cnJlbnQgcmVndWxhdG9yeSAiCi0JCQkJCSJkb21haW4gaW50ZXJzZWN0ZWQ6XG4iKTsKKwkJCQlwcl9pbmZvKCJDdXJyZW50IHJlZ3VsYXRvcnkgZG9tYWluIGludGVyc2VjdGVkOlxuIik7CiAJCX0gZWxzZQotCQkJcHJpbnRrKEtFUk5fSU5GTyAiY2ZnODAyMTE6IEN1cnJlbnQgcmVndWxhdG9yeSAiCi0JCQkJImRvbWFpbiBpbnRlcnNlY3RlZDpcbiIpOworCQkJcHJfaW5mbygiQ3VycmVudCByZWd1bGF0b3J5IGRvbWFpbiBpbnRlcnNlY3RlZDpcbiIpOwogCX0gZWxzZSBpZiAoaXNfd29ybGRfcmVnZG9tKHJkLT5hbHBoYTIpKQotCQlwcmludGsoS0VSTl9JTkZPICJjZmc4MDIxMTogV29ybGQgcmVndWxhdG9yeSAiCi0JCQkiZG9tYWluIHVwZGF0ZWQ6XG4iKTsKKwkJcHJfaW5mbygiV29ybGQgcmVndWxhdG9yeSBkb21haW4gdXBkYXRlZDpcbiIpOwogCWVsc2UgewogCQlpZiAoaXNfdW5rbm93bl9hbHBoYTIocmQtPmFscGhhMikpCi0JCQlwcmludGsoS0VSTl9JTkZPICJjZmc4MDIxMTogUmVndWxhdG9yeSBkb21haW4gIgotCQkJCSJjaGFuZ2VkIHRvIGRyaXZlciBidWlsdC1pbiBzZXR0aW5ncyAiCi0JCQkJIih1bmtub3duIGNvdW50cnkpXG4iKTsKKwkJCXByX2luZm8oIlJlZ3VsYXRvcnkgZG9tYWluIGNoYW5nZWQgdG8gZHJpdmVyIGJ1aWx0LWluIHNldHRpbmdzICh1bmtub3duIGNvdW50cnkpXG4iKTsKIAkJZWxzZQotCQkJcHJpbnRrKEtFUk5fSU5GTyAiY2ZnODAyMTE6IFJlZ3VsYXRvcnkgZG9tYWluICIKLQkJCQkiY2hhbmdlZCB0byBjb3VudHJ5OiAlYyVjXG4iLAorCQkJcHJfaW5mbygiUmVndWxhdG9yeSBkb21haW4gY2hhbmdlZCB0byBjb3VudHJ5OiAlYyVjXG4iLAogCQkJCXJkLT5hbHBoYTJbMF0sIHJkLT5hbHBoYTJbMV0pOwogCX0KIAlwcmludF9yZF9ydWxlcyhyZCk7CkBAIC0xNzkwLDggKzE5MTMsNyBAQAogCiBzdGF0aWMgdm9pZCBwcmludF9yZWdkb21haW5faW5mbyhjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqcmQpCiB7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiY2ZnODAyMTE6IFJlZ3VsYXRvcnkgZG9tYWluOiAlYyVjXG4iLAotCQlyZC0+YWxwaGEyWzBdLCByZC0+YWxwaGEyWzFdKTsKKwlwcl9pbmZvKCJSZWd1bGF0b3J5IGRvbWFpbjogJWMlY1xuIiwgcmQtPmFscGhhMlswXSwgcmQtPmFscGhhMlsxXSk7CiAJcHJpbnRfcmRfcnVsZXMocmQpOwogfQogCkBAIC0xODQyLDggKzE5NjQsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmICghaXNfdmFsaWRfcmQocmQpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY2ZnODAyMTE6IEludmFsaWQgIgotCQkJInJlZ3VsYXRvcnkgZG9tYWluIGRldGVjdGVkOlxuIik7CisJCXByX2VycigiSW52YWxpZCByZWd1bGF0b3J5IGRvbWFpbiBkZXRlY3RlZDpcbiIpOwogCQlwcmludF9yZWdkb21haW5faW5mbyhyZCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTE5NTksNiArMjA4MCw4IEBACiAKIAlubDgwMjExX3NlbmRfcmVnX2NoYW5nZV9ldmVudChsYXN0X3JlcXVlc3QpOwogCisJcmVnX3NldF9yZXF1ZXN0X3Byb2Nlc3NlZCgpOworCiAJbXV0ZXhfdW5sb2NrKCZyZWdfbXV0ZXgpOwogCiAJcmV0dXJuIHI7CkBAIC0yMDE1LDggKzIxMzgsNyBAQAogCQkgKiBlYXJseSBib290IGZvciBjYWxsX3VzZXJtb2RlaGVscGVyKCkuIEZvciBub3cgdHJlYXQgdGhlc2UKIAkJICogZXJyb3JzIGFzIG5vbi1mYXRhbC4KIAkJICovCi0JCXByaW50ayhLRVJOX0VSUiAiY2ZnODAyMTE6IGtvYmplY3RfdWV2ZW50X2VudigpIHdhcyB1bmFibGUgIgotCQkJInRvIGNhbGwgQ1JEQSBkdXJpbmcgaW5pdCIpOworCQlwcl9lcnIoImtvYmplY3RfdWV2ZW50X2VudigpIHdhcyB1bmFibGUgdG8gY2FsbCBDUkRBIGR1cmluZyBpbml0XG4iKTsKICNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfUkVHX0RFQlVHCiAJCS8qIFdlIHdhbnQgdG8gZmluZCBvdXQgZXhhY3RseSB3aHkgd2hlbiBkZWJ1Z2dpbmcgKi8KIAkJV0FSTl9PTihlcnIpOwpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3NjYW4uYyBiL25ldC93aXJlbGVzcy9zY2FuLmMKaW5kZXggNTAzZWJiOC4uZWE0MjdmNCAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL3NjYW4uYworKysgYi9uZXQvd2lyZWxlc3Mvc2Nhbi5jCkBAIC00NjQsNiArNDY0LDkgQEAKIAkJaWYgKHJlcy0+cHViLmJlYWNvbl9pZXMpIHsKIAkJCXNpemVfdCB1c2VkID0gZGV2LT53aXBoeS5ic3NfcHJpdl9zaXplICsgc2l6ZW9mKCpyZXMpOwogCQkJc2l6ZV90IGllbGVuID0gcmVzLT5wdWIubGVuX2JlYWNvbl9pZXM7CisJCQlib29sIGluZm9ybWF0aW9uX2VsZW1lbnRzX2lzX2JlYWNvbl9pZXMgPQorCQkJCShmb3VuZC0+cHViLmluZm9ybWF0aW9uX2VsZW1lbnRzID09CisJCQkJIGZvdW5kLT5wdWIuYmVhY29uX2llcyk7CiAKIAkJCWlmIChmb3VuZC0+cHViLmJlYWNvbl9pZXMgJiYKIAkJCSAgICAhZm91bmQtPmJlYWNvbl9pZXNfYWxsb2NhdGVkICYmCkBAIC00ODcsNiArNDkwLDE0IEBACiAJCQkJCWZvdW5kLT5wdWIubGVuX2JlYWNvbl9pZXMgPSBpZWxlbjsKIAkJCQl9CiAJCQl9CisKKwkJCS8qIE92ZXJyaWRlIElFcyBpZiB0aGV5IHdlcmUgZnJvbSBhIGJlYWNvbiBiZWZvcmUgKi8KKwkJCWlmIChpbmZvcm1hdGlvbl9lbGVtZW50c19pc19iZWFjb25faWVzKSB7CisJCQkJZm91bmQtPnB1Yi5pbmZvcm1hdGlvbl9lbGVtZW50cyA9CisJCQkJCWZvdW5kLT5wdWIuYmVhY29uX2llczsKKwkJCQlmb3VuZC0+cHViLmxlbl9pbmZvcm1hdGlvbl9lbGVtZW50cyA9CisJCQkJCWZvdW5kLT5wdWIubGVuX2JlYWNvbl9pZXM7CisJCQl9CiAJCX0KIAogCQlrcmVmX3B1dCgmcmVzLT5yZWYsIGJzc19yZWxlYXNlKTsKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy91dGlsLmMgYi9uZXQvd2lyZWxlc3MvdXRpbC5jCmluZGV4IDc2MTIwYWUuLjc2MjBhZTIgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy91dGlsLmMKKysrIGIvbmV0L3dpcmVsZXNzL3V0aWwuYwpAQCAtNTAyLDcgKzUwMiw3IEBACiAJCQlza2Jfb3JwaGFuKHNrYik7CiAKIAkJaWYgKHBza2JfZXhwYW5kX2hlYWQoc2tiLCBoZWFkX25lZWQsIDAsIEdGUF9BVE9NSUMpKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byByZWFsbG9jYXRlIFR4IGJ1ZmZlclxuIik7CisJCQlwcl9lcnIoImZhaWxlZCB0byByZWFsbG9jYXRlIFR4IGJ1ZmZlclxuIik7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCQlza2ItPnRydWVzaXplICs9IGhlYWRfbmVlZDsKQEAgLTY4NSwyMCArNjg1LDE4IEBACiAJCQljb250aW51ZTsKIAkJaWYgKHJkZXYtPm9wcy0+YWRkX2tleSh3ZGV2LT53aXBoeSwgZGV2LCBpLCBmYWxzZSwgTlVMTCwKIAkJCQkJJndkZXYtPmNvbm5lY3Rfa2V5cy0+cGFyYW1zW2ldKSkgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHNldCBrZXkgJWRcbiIsCi0JCQkJZGV2LT5uYW1lLCBpKTsKKwkJCW5ldGRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHNldCBrZXkgJWRcbiIsIGkpOwogCQkJY29udGludWU7CiAJCX0KIAkJaWYgKHdkZXYtPmNvbm5lY3Rfa2V5cy0+ZGVmID09IGkpCi0JCQlpZiAocmRldi0+b3BzLT5zZXRfZGVmYXVsdF9rZXkod2Rldi0+d2lwaHksIGRldiwgaSkpIHsKLQkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gc2V0IGRlZmtleSAlZFxuIiwKLQkJCQkJZGV2LT5uYW1lLCBpKTsKKwkJCWlmIChyZGV2LT5vcHMtPnNldF9kZWZhdWx0X2tleSh3ZGV2LT53aXBoeSwgZGV2LAorCQkJCQkJICAgICAgIGksIHRydWUsIHRydWUpKSB7CisJCQkJbmV0ZGV2X2VycihkZXYsICJmYWlsZWQgdG8gc2V0IGRlZmtleSAlZFxuIiwgaSk7CiAJCQkJY29udGludWU7CiAJCQl9CiAJCWlmICh3ZGV2LT5jb25uZWN0X2tleXMtPmRlZm1nbXQgPT0gaSkKIAkJCWlmIChyZGV2LT5vcHMtPnNldF9kZWZhdWx0X21nbXRfa2V5KHdkZXYtPndpcGh5LCBkZXYsIGkpKQotCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBzZXQgbWd0ZGVmICVkXG4iLAotCQkJCQlkZXYtPm5hbWUsIGkpOworCQkJCW5ldGRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHNldCBtZ3RkZWYgJWRcbiIsIGkpOwogCX0KIAogCWtmcmVlKHdkZXYtPmNvbm5lY3Rfa2V5cyk7CkBAIC03OTUsNiArNzkzLDcgQEAKIAogCWlmIChudHlwZSAhPSBvdHlwZSkgewogCQlkZXYtPmllZWU4MDIxMV9wdHItPnVzZV80YWRkciA9IGZhbHNlOworCQlkZXYtPmllZWU4MDIxMV9wdHItPm1lc2hfaWRfdXBfbGVuID0gMDsKIAogCQlzd2l0Y2ggKG90eXBlKSB7CiAJCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuYyBiL25ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5jCmluZGV4IDEyMjIyZWUuLjNlNWRiZDQgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5jCisrKyBiL25ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5jCkBAIC01NDgsOCArNTQ4LDggQEAKIAkJCQlfX2NmZzgwMjExX2xlYXZlX2lic3MocmRldiwgd2Rldi0+bmV0ZGV2LCB0cnVlKTsKIAkJCQlyZWpvaW4gPSB0cnVlOwogCQkJfQotCQkJZXJyID0gcmRldi0+b3BzLT5zZXRfZGVmYXVsdF9rZXkoJnJkZXYtPndpcGh5LAotCQkJCQkJCSBkZXYsIGlkeCk7CisJCQllcnIgPSByZGV2LT5vcHMtPnNldF9kZWZhdWx0X2tleSgmcmRldi0+d2lwaHksIGRldiwKKwkJCQkJCQkgaWR4LCB0cnVlLCB0cnVlKTsKIAkJfQogCQlpZiAoIWVycikgewogCQkJd2Rldi0+d2V4dC5kZWZhdWx0X2tleSA9IGlkeDsKQEAgLTYyNyw4ICs2MjcsOCBAQAogCQllcnIgPSAwOwogCQl3ZGV2X2xvY2sod2Rldik7CiAJCWlmICh3ZGV2LT5jdXJyZW50X2JzcykKLQkJCWVyciA9IHJkZXYtPm9wcy0+c2V0X2RlZmF1bHRfa2V5KCZyZGV2LT53aXBoeSwKLQkJCQkJCQkgZGV2LCBpZHgpOworCQkJZXJyID0gcmRldi0+b3BzLT5zZXRfZGVmYXVsdF9rZXkoJnJkZXYtPndpcGh5LCBkZXYsCisJCQkJCQkJIGlkeCwgdHJ1ZSwgdHJ1ZSk7CiAJCWlmICghZXJyKQogCQkJd2Rldi0+d2V4dC5kZWZhdWx0X2tleSA9IGlkeDsKIAkJd2Rldl91bmxvY2sod2Rldik7CmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvd2V4dC1jb3JlLmMgYi9uZXQvd2lyZWxlc3Mvd2V4dC1jb3JlLmMKaW5kZXggZGM2NzVhMy4uZmRiYzIzYyAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL3dleHQtY29yZS5jCisrKyBiL25ldC93aXJlbGVzcy93ZXh0LWNvcmUuYwpAQCAtNDY3LDggKzQ2Nyw4IEBACiAJCSAqIFRoZSBiZXN0IHRoZSBkcml2ZXIgY291bGQgZG8gaXMgdG8gbG9nIGFuIGVycm9yIG1lc3NhZ2UuCiAJCSAqIFdlIHdpbGwgZG8gaXQgb3Vyc2VsdmVzIGluc3RlYWQuLi4KIAkJICovCi0JCXByaW50ayhLRVJOX0VSUiAiJXMgKFdFKSA6IEludmFsaWQvVW5rbm93biBXaXJlbGVzcyBFdmVudCAoMHglMDRYKVxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgY21kKTsKKwkJbmV0ZGV2X2VycihkZXYsICIoV0UpIDogSW52YWxpZC9Vbmtub3duIFdpcmVsZXNzIEV2ZW50ICgweCUwNFgpXG4iLAorCQkJICAgY21kKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNDc2LDExICs0NzYsMTMgQEAKIAlpZiAoZGVzY3ItPmhlYWRlcl90eXBlID09IElXX0hFQURFUl9UWVBFX1BPSU5UKSB7CiAJCS8qIENoZWNrIGlmIG51bWJlciBvZiB0b2tlbiBmaXRzIHdpdGhpbiBib3VuZHMgKi8KIAkJaWYgKHdycXUtPmRhdGEubGVuZ3RoID4gZGVzY3ItPm1heF90b2tlbnMpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXMgKFdFKSA6IFdpcmVsZXNzIEV2ZW50IHRvbyBiaWcgKCVkKVxuIiwgZGV2LT5uYW1lLCB3cnF1LT5kYXRhLmxlbmd0aCk7CisJCQluZXRkZXZfZXJyKGRldiwgIihXRSkgOiBXaXJlbGVzcyBFdmVudCB0b28gYmlnICglZClcbiIsCisJCQkJICAgd3JxdS0+ZGF0YS5sZW5ndGgpOwogCQkJcmV0dXJuOwogCQl9CiAJCWlmICh3cnF1LT5kYXRhLmxlbmd0aCA8IGRlc2NyLT5taW5fdG9rZW5zKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzIChXRSkgOiBXaXJlbGVzcyBFdmVudCB0b28gc21hbGwgKCVkKVxuIiwgZGV2LT5uYW1lLCB3cnF1LT5kYXRhLmxlbmd0aCk7CisJCQluZXRkZXZfZXJyKGRldiwgIihXRSkgOiBXaXJlbGVzcyBFdmVudCB0b28gc21hbGwgKCVkKVxuIiwKKwkJCQkgICB3cnF1LT5kYXRhLmxlbmd0aCk7CiAJCQlyZXR1cm47CiAJCX0KIAkJLyogQ2FsY3VsYXRlIGV4dHJhX2xlbiAtIGV4dHJhIGlzIE5VTEwgZm9yIHJlc3RyaWN0ZWQgZXZlbnRzICovCmRpZmYgLS1naXQgYS9uZXQveDI1L2FmX3gyNS5jIGIvbmV0L3gyNS9hZl94MjUuYwppbmRleCBmN2FmOThkLi5hZDk2ZWU5IDEwMDY0NAotLS0gYS9uZXQveDI1L2FmX3gyNS5jCisrKyBiL25ldC94MjUvYWZfeDI1LmMKQEAgLTEzNTcsMTEgKzEzNTcsMTEgQEAKIAl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKIAlpbnQgcmM7CiAKLQlsb2NrX2tlcm5lbCgpOwogCXN3aXRjaCAoY21kKSB7CiAJCWNhc2UgVElPQ09VVFE6IHsKLQkJCWludCBhbW91bnQgPSBzay0+c2tfc25kYnVmIC0gc2tfd21lbV9hbGxvY19nZXQoc2spOworCQkJaW50IGFtb3VudDsKIAorCQkJYW1vdW50ID0gc2stPnNrX3NuZGJ1ZiAtIHNrX3dtZW1fYWxsb2NfZ2V0KHNrKTsKIAkJCWlmIChhbW91bnQgPCAwKQogCQkJCWFtb3VudCA9IDA7CiAJCQlyYyA9IHB1dF91c2VyKGFtb3VudCwgKHVuc2lnbmVkIGludCBfX3VzZXIgKilhcmdwKTsKQEAgLTEzNzUsOCArMTM3NSwxMCBAQAogCQkJICogVGhlc2UgdHdvIGFyZSBzYWZlIG9uIGEgc2luZ2xlIENQVSBzeXN0ZW0gYXMKIAkJCSAqIG9ubHkgdXNlciB0YXNrcyBmaWRkbGUgaGVyZQogCQkJICovCisJCQlsb2NrX3NvY2soc2spOwogCQkJaWYgKChza2IgPSBza2JfcGVlaygmc2stPnNrX3JlY2VpdmVfcXVldWUpKSAhPSBOVUxMKQogCQkJCWFtb3VudCA9IHNrYi0+bGVuOworCQkJcmVsZWFzZV9zb2NrKHNrKTsKIAkJCXJjID0gcHV0X3VzZXIoYW1vdW50LCAodW5zaWduZWQgaW50IF9fdXNlciAqKWFyZ3ApOwogCQkJYnJlYWs7CiAJCX0KQEAgLTE0MjIsOSArMTQyNCwxMSBAQAogCQkJcmMgPSB4MjVfc3Vic2NyX2lvY3RsKGNtZCwgYXJncCk7CiAJCQlicmVhazsKIAkJY2FzZSBTSU9DWDI1R0ZBQ0lMSVRJRVM6IHsKLQkJCXN0cnVjdCB4MjVfZmFjaWxpdGllcyBmYWMgPSB4MjUtPmZhY2lsaXRpZXM7Ci0JCQlyYyA9IGNvcHlfdG9fdXNlcihhcmdwLCAmZmFjLAotCQkJCQkgIHNpemVvZihmYWMpKSA/IC1FRkFVTFQgOiAwOworCQkJbG9ja19zb2NrKHNrKTsKKwkJCXJjID0gY29weV90b191c2VyKGFyZ3AsICZ4MjUtPmZhY2lsaXRpZXMsCisJCQkJCQlzaXplb2YoeDI1LT5mYWNpbGl0aWVzKSkKKwkJCQkJCT8gLUVGQVVMVCA6IDA7CisJCQlyZWxlYXNlX3NvY2soc2spOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtMTQzNSwxOCArMTQzOSwxOSBAQAogCQkJCQkgICBzaXplb2YoZmFjaWxpdGllcykpKQogCQkJCWJyZWFrOwogCQkJcmMgPSAtRUlOVkFMOworCQkJbG9ja19zb2NrKHNrKTsKIAkJCWlmIChzay0+c2tfc3RhdGUgIT0gVENQX0xJU1RFTiAmJgogCQkJICAgIHNrLT5za19zdGF0ZSAhPSBUQ1BfQ0xPU0UpCi0JCQkJYnJlYWs7CisJCQkJZ290byBvdXRfZmFjX3JlbGVhc2U7CiAJCQlpZiAoZmFjaWxpdGllcy5wYWNzaXplX2luIDwgWDI1X1BTMTYgfHwKIAkJCSAgICBmYWNpbGl0aWVzLnBhY3NpemVfaW4gPiBYMjVfUFM0MDk2KQotCQkJCWJyZWFrOworCQkJCWdvdG8gb3V0X2ZhY19yZWxlYXNlOwogCQkJaWYgKGZhY2lsaXRpZXMucGFjc2l6ZV9vdXQgPCBYMjVfUFMxNiB8fAogCQkJICAgIGZhY2lsaXRpZXMucGFjc2l6ZV9vdXQgPiBYMjVfUFM0MDk2KQotCQkJCWJyZWFrOworCQkJCWdvdG8gb3V0X2ZhY19yZWxlYXNlOwogCQkJaWYgKGZhY2lsaXRpZXMud2luc2l6ZV9pbiA8IDEgfHwKIAkJCSAgICBmYWNpbGl0aWVzLndpbnNpemVfaW4gPiAxMjcpCi0JCQkJYnJlYWs7CisJCQkJZ290byBvdXRfZmFjX3JlbGVhc2U7CiAJCQlpZiAoZmFjaWxpdGllcy50aHJvdWdocHV0KSB7CiAJCQkJaW50IG91dCA9IGZhY2lsaXRpZXMudGhyb3VnaHB1dCAmIDB4ZjA7CiAJCQkJaW50IGluICA9IGZhY2lsaXRpZXMudGhyb3VnaHB1dCAmIDB4MGY7CkBAIC0xNDU0LDI0ICsxNDU5LDI4IEBACiAJCQkJCWZhY2lsaXRpZXMudGhyb3VnaHB1dCB8PQogCQkJCQkJWDI1X0RFRkFVTFRfVEhST1VHSFBVVCA8PCA0OwogCQkJCWVsc2UgaWYgKG91dCA8IDB4MzAgfHwgb3V0ID4gMHhEMCkKLQkJCQkJYnJlYWs7CisJCQkJCWdvdG8gb3V0X2ZhY19yZWxlYXNlOwogCQkJCWlmICghaW4pCiAJCQkJCWZhY2lsaXRpZXMudGhyb3VnaHB1dCB8PQogCQkJCQkJWDI1X0RFRkFVTFRfVEhST1VHSFBVVDsKIAkJCQllbHNlIGlmIChpbiA8IDB4MDMgfHwgaW4gPiAweDBEKQotCQkJCQlicmVhazsKKwkJCQkJZ290byBvdXRfZmFjX3JlbGVhc2U7CiAJCQl9CiAJCQlpZiAoZmFjaWxpdGllcy5yZXZlcnNlICYmCiAJCQkJKGZhY2lsaXRpZXMucmV2ZXJzZSAmIDB4ODEpICE9IDB4ODEpCi0JCQkJYnJlYWs7CisJCQkJZ290byBvdXRfZmFjX3JlbGVhc2U7CiAJCQl4MjUtPmZhY2lsaXRpZXMgPSBmYWNpbGl0aWVzOwogCQkJcmMgPSAwOworb3V0X2ZhY19yZWxlYXNlOgorCQkJcmVsZWFzZV9zb2NrKHNrKTsKIAkJCWJyZWFrOwogCQl9CiAKIAkJY2FzZSBTSU9DWDI1R0RURUZBQ0lMSVRJRVM6IHsKKwkJCWxvY2tfc29jayhzayk7CiAJCQlyYyA9IGNvcHlfdG9fdXNlcihhcmdwLCAmeDI1LT5kdGVfZmFjaWxpdGllcywKIAkJCQkJCXNpemVvZih4MjUtPmR0ZV9mYWNpbGl0aWVzKSk7CisJCQlyZWxlYXNlX3NvY2soc2spOwogCQkJaWYgKHJjKQogCQkJCXJjID0gLUVGQVVMVDsKIAkJCWJyZWFrOwpAQCAtMTQ4MywyNiArMTQ5MiwzMSBAQAogCQkJaWYgKGNvcHlfZnJvbV91c2VyKCZkdGVmYWNzLCBhcmdwLCBzaXplb2YoZHRlZmFjcykpKQogCQkJCWJyZWFrOwogCQkJcmMgPSAtRUlOVkFMOworCQkJbG9ja19zb2NrKHNrKTsKIAkJCWlmIChzay0+c2tfc3RhdGUgIT0gVENQX0xJU1RFTiAmJgogCQkJCQlzay0+c2tfc3RhdGUgIT0gVENQX0NMT1NFKQotCQkJCWJyZWFrOworCQkJCWdvdG8gb3V0X2R0ZWZhY19yZWxlYXNlOwogCQkJaWYgKGR0ZWZhY3MuY2FsbGluZ19sZW4gPiBYMjVfTUFYX0FFX0xFTikKLQkJCQlicmVhazsKKwkJCQlnb3RvIG91dF9kdGVmYWNfcmVsZWFzZTsKIAkJCWlmIChkdGVmYWNzLmNhbGxpbmdfYWUgPT0gTlVMTCkKLQkJCQlicmVhazsKKwkJCQlnb3RvIG91dF9kdGVmYWNfcmVsZWFzZTsKIAkJCWlmIChkdGVmYWNzLmNhbGxlZF9sZW4gPiBYMjVfTUFYX0FFX0xFTikKLQkJCQlicmVhazsKKwkJCQlnb3RvIG91dF9kdGVmYWNfcmVsZWFzZTsKIAkJCWlmIChkdGVmYWNzLmNhbGxlZF9hZSA9PSBOVUxMKQotCQkJCWJyZWFrOworCQkJCWdvdG8gb3V0X2R0ZWZhY19yZWxlYXNlOwogCQkJeDI1LT5kdGVfZmFjaWxpdGllcyA9IGR0ZWZhY3M7CiAJCQlyYyA9IDA7CitvdXRfZHRlZmFjX3JlbGVhc2U6CisJCQlyZWxlYXNlX3NvY2soc2spOwogCQkJYnJlYWs7CiAJCX0KIAogCQljYXNlIFNJT0NYMjVHQ0FMTFVTRVJEQVRBOiB7Ci0JCQlzdHJ1Y3QgeDI1X2NhbGx1c2VyZGF0YSBjdWQgPSB4MjUtPmNhbGx1c2VyZGF0YTsKLQkJCXJjID0gY29weV90b191c2VyKGFyZ3AsICZjdWQsCi0JCQkJCSAgc2l6ZW9mKGN1ZCkpID8gLUVGQVVMVCA6IDA7CisJCQlsb2NrX3NvY2soc2spOworCQkJcmMgPSBjb3B5X3RvX3VzZXIoYXJncCwgJngyNS0+Y2FsbHVzZXJkYXRhLAorCQkJCQlzaXplb2YoeDI1LT5jYWxsdXNlcmRhdGEpKQorCQkJCQk/IC1FRkFVTFQgOiAwOworCQkJcmVsZWFzZV9zb2NrKHNrKTsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTE1MTYsMTYgKzE1MzAsMTkgQEAKIAkJCXJjID0gLUVJTlZBTDsKIAkJCWlmIChjYWxsdXNlcmRhdGEuY3VkbGVuZ3RoID4gWDI1X01BWF9DVURfTEVOKQogCQkJCWJyZWFrOworCQkJbG9ja19zb2NrKHNrKTsKIAkJCXgyNS0+Y2FsbHVzZXJkYXRhID0gY2FsbHVzZXJkYXRhOworCQkJcmVsZWFzZV9zb2NrKHNrKTsKIAkJCXJjID0gMDsKIAkJCWJyZWFrOwogCQl9CiAKIAkJY2FzZSBTSU9DWDI1R0NBVVNFRElBRzogewotCQkJc3RydWN0IHgyNV9jYXVzZWRpYWcgY2F1c2VkaWFnOwotCQkJY2F1c2VkaWFnID0geDI1LT5jYXVzZWRpYWc7Ci0JCQlyYyA9IGNvcHlfdG9fdXNlcihhcmdwLCAmY2F1c2VkaWFnLAotCQkJCQkgIHNpemVvZihjYXVzZWRpYWcpKSA/IC1FRkFVTFQgOiAwOworCQkJbG9ja19zb2NrKHNrKTsKKwkJCXJjID0gY29weV90b191c2VyKGFyZ3AsICZ4MjUtPmNhdXNlZGlhZywKKwkJCQkJc2l6ZW9mKHgyNS0+Y2F1c2VkaWFnKSkKKwkJCQkJPyAtRUZBVUxUIDogMDsKKwkJCXJlbGVhc2Vfc29jayhzayk7CiAJCQlicmVhazsKIAkJfQogCkBAIC0xNTM0LDcgKzE1NTEsOSBAQAogCQkJcmMgPSAtRUZBVUxUOwogCQkJaWYgKGNvcHlfZnJvbV91c2VyKCZjYXVzZWRpYWcsIGFyZ3AsIHNpemVvZihjYXVzZWRpYWcpKSkKIAkJCQlicmVhazsKKwkJCWxvY2tfc29jayhzayk7CiAJCQl4MjUtPmNhdXNlZGlhZyA9IGNhdXNlZGlhZzsKKwkJCXJlbGVhc2Vfc29jayhzayk7CiAJCQlyYyA9IDA7CiAJCQlicmVhazsKIApAQCAtMTU0MywzMSArMTU2MiwzNyBAQAogCQljYXNlIFNJT0NYMjVTQ1VETUFUQ0hMRU46IHsKIAkJCXN0cnVjdCB4MjVfc3ViYWRkciBzdWJfYWRkcjsKIAkJCXJjID0gLUVJTlZBTDsKKwkJCWxvY2tfc29jayhzayk7CiAJCQlpZihzay0+c2tfc3RhdGUgIT0gVENQX0NMT1NFKQotCQkJCWJyZWFrOworCQkJCWdvdG8gb3V0X2N1ZF9yZWxlYXNlOwogCQkJcmMgPSAtRUZBVUxUOwogCQkJaWYgKGNvcHlfZnJvbV91c2VyKCZzdWJfYWRkciwgYXJncCwKIAkJCQkJc2l6ZW9mKHN1Yl9hZGRyKSkpCi0JCQkJYnJlYWs7CisJCQkJZ290byBvdXRfY3VkX3JlbGVhc2U7CiAJCQlyYyA9IC1FSU5WQUw7CiAJCQlpZihzdWJfYWRkci5jdWRtYXRjaGxlbmd0aCA+IFgyNV9NQVhfQ1VEX0xFTikKLQkJCQlicmVhazsKKwkJCQlnb3RvIG91dF9jdWRfcmVsZWFzZTsKIAkJCXgyNS0+Y3VkbWF0Y2hsZW5ndGggPSBzdWJfYWRkci5jdWRtYXRjaGxlbmd0aDsKIAkJCXJjID0gMDsKK291dF9jdWRfcmVsZWFzZToKKwkJCXJlbGVhc2Vfc29jayhzayk7CiAJCQlicmVhazsKIAkJfQogCiAJCWNhc2UgU0lPQ1gyNUNBTExBQ0NQVEFQUFJWOiB7CiAJCQlyYyA9IC1FSU5WQUw7CisJCQlsb2NrX2tlcm5lbCgpOwogCQkJaWYgKHNrLT5za19zdGF0ZSAhPSBUQ1BfQ0xPU0UpCiAJCQkJYnJlYWs7CiAJCQljbGVhcl9iaXQoWDI1X0FDQ1BUX0FQUFJWX0ZMQUcsICZ4MjUtPmZsYWdzKTsKKwkJCXVubG9ja19rZXJuZWwoKTsKIAkJCXJjID0gMDsKIAkJCWJyZWFrOwogCQl9CiAKIAkJY2FzZSBTSU9DWDI1U0VORENBTExBQ0NQVDogIHsKIAkJCXJjID0gLUVJTlZBTDsKKwkJCWxvY2tfa2VybmVsKCk7CiAJCQlpZiAoc2stPnNrX3N0YXRlICE9IFRDUF9FU1RBQkxJU0hFRCkKIAkJCQlicmVhazsKIAkJCS8qIG11c3QgY2FsbCBhY2NwdGFwcHJ2IGFib3ZlICovCkBAIC0xNTc1LDYgKzE2MDAsNyBAQAogCQkJCWJyZWFrOwogCQkJeDI1X3dyaXRlX2ludGVybmFsKHNrLCBYMjVfQ0FMTF9BQ0NFUFRFRCk7CiAJCQl4MjUtPnN0YXRlID0gWDI1X1NUQVRFXzM7CisJCQl1bmxvY2tfa2VybmVsKCk7CiAJCQlyYyA9IDA7CiAJCQlicmVhazsKIAkJfQpAQCAtMTU4Myw3ICsxNjA5LDYgQEAKIAkJCXJjID0gLUVOT0lPQ1RMQ01EOwogCQkJYnJlYWs7CiAJfQotCXVubG9ja19rZXJuZWwoKTsKIAogCXJldHVybiByYzsKIH0KQEAgLTE2MTksMTYgKzE2NDQsMjAgQEAKIAlkZXZfcHV0KGRldik7CiAKIAlpZiAoY21kID09IFNJT0NYMjVHU1VCU0NSSVApIHsKKwkJcmVhZF9sb2NrX2JoKCZ4MjVfbmVpZ2hfbGlzdF9sb2NrKTsKIAkJeDI1X3N1YnNjci5leHRlbmRlZCA9IG5iLT5leHRlbmRlZDsKIAkJeDI1X3N1YnNjci5nbG9iYWxfZmFjaWxfbWFzayA9IG5iLT5nbG9iYWxfZmFjaWxfbWFzazsKKwkJcmVhZF91bmxvY2tfYmgoJngyNV9uZWlnaF9saXN0X2xvY2spOwogCQlyYyA9IGNvcHlfdG9fdXNlcih4MjVfc3Vic2NyMzIsICZ4MjVfc3Vic2NyLAogCQkJCXNpemVvZigqeDI1X3N1YnNjcjMyKSkgPyAtRUZBVUxUIDogMDsKIAl9IGVsc2UgewogCQlyYyA9IC1FSU5WQUw7CiAJCWlmICh4MjVfc3Vic2NyLmV4dGVuZGVkID09IDAgfHwgeDI1X3N1YnNjci5leHRlbmRlZCA9PSAxKSB7CiAJCQlyYyA9IDA7CisJCQl3cml0ZV9sb2NrX2JoKCZ4MjVfbmVpZ2hfbGlzdF9sb2NrKTsKIAkJCW5iLT5leHRlbmRlZCA9IHgyNV9zdWJzY3IuZXh0ZW5kZWQ7CiAJCQluYi0+Z2xvYmFsX2ZhY2lsX21hc2sgPSB4MjVfc3Vic2NyLmdsb2JhbF9mYWNpbF9tYXNrOworCQkJd3JpdGVfdW5sb2NrX2JoKCZ4MjVfbmVpZ2hfbGlzdF9sb2NrKTsKIAkJfQogCX0KIAl4MjVfbmVpZ2hfcHV0KG5iKTsKQEAgLTE2NTQsMTkgKzE2ODMsMTUgQEAKIAkJYnJlYWs7CiAJY2FzZSBTSU9DR1NUQU1QOgogCQlyYyA9IC1FSU5WQUw7Ci0JCWxvY2tfa2VybmVsKCk7CiAJCWlmIChzaykKIAkJCXJjID0gY29tcGF0X3NvY2tfZ2V0X3RpbWVzdGFtcChzaywKIAkJCQkJKHN0cnVjdCB0aW1ldmFsIF9fdXNlciopYXJncCk7Ci0JCXVubG9ja19rZXJuZWwoKTsKIAkJYnJlYWs7CiAJY2FzZSBTSU9DR1NUQU1QTlM6CiAJCXJjID0gLUVJTlZBTDsKLQkJbG9ja19rZXJuZWwoKTsKIAkJaWYgKHNrKQogCQkJcmMgPSBjb21wYXRfc29ja19nZXRfdGltZXN0YW1wbnMoc2ssCiAJCQkJCShzdHJ1Y3QgdGltZXNwZWMgX191c2VyKilhcmdwKTsKLQkJdW5sb2NrX2tlcm5lbCgpOwogCQlicmVhazsKIAljYXNlIFNJT0NHSUZBRERSOgogCWNhc2UgU0lPQ1NJRkFERFI6CkBAIC0xNjg1LDIyICsxNzEwLDE2IEBACiAJCXJjID0gLUVQRVJNOwogCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCiAJCQlicmVhazsKLQkJbG9ja19rZXJuZWwoKTsKIAkJcmMgPSB4MjVfcm91dGVfaW9jdGwoY21kLCBhcmdwKTsKLQkJdW5sb2NrX2tlcm5lbCgpOwogCQlicmVhazsKIAljYXNlIFNJT0NYMjVHU1VCU0NSSVA6Ci0JCWxvY2tfa2VybmVsKCk7CiAJCXJjID0gY29tcGF0X3gyNV9zdWJzY3JfaW9jdGwoY21kLCBhcmdwKTsKLQkJdW5sb2NrX2tlcm5lbCgpOwogCQlicmVhazsKIAljYXNlIFNJT0NYMjVTU1VCU0NSSVA6CiAJCXJjID0gLUVQRVJNOwogCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCiAJCQlicmVhazsKLQkJbG9ja19rZXJuZWwoKTsKIAkJcmMgPSBjb21wYXRfeDI1X3N1YnNjcl9pb2N0bChjbWQsIGFyZ3ApOwotCQl1bmxvY2tfa2VybmVsKCk7CiAJCWJyZWFrOwogCWNhc2UgU0lPQ1gyNUdGQUNJTElUSUVTOgogCWNhc2UgU0lPQ1gyNVNGQUNJTElUSUVTOgpkaWZmIC0tZ2l0IGEvbmV0L3gyNS94MjVfbGluay5jIGIvbmV0L3gyNS94MjVfbGluay5jCmluZGV4IGIyNWM2NDYuLjRjYmM5NDIgMTAwNjQ0Ci0tLSBhL25ldC94MjUveDI1X2xpbmsuYworKysgYi9uZXQveDI1L3gyNV9saW5rLmMKQEAgLTMxLDggKzMxLDggQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bmV0L3gyNS5oPgogCi1zdGF0aWMgTElTVF9IRUFEKHgyNV9uZWlnaF9saXN0KTsKLXN0YXRpYyBERUZJTkVfUldMT0NLKHgyNV9uZWlnaF9saXN0X2xvY2spOworTElTVF9IRUFEKHgyNV9uZWlnaF9saXN0KTsKK0RFRklORV9SV0xPQ0soeDI1X25laWdoX2xpc3RfbG9jayk7CiAKIHN0YXRpYyB2b2lkIHgyNV90MjB0aW1lcl9leHBpcnkodW5zaWduZWQgbG9uZyk7CiAKQEAgLTM2MCwxNiArMzYwLDIwIEBACiAJZGV2X3B1dChkZXYpOwogCiAJaWYgKGNtZCA9PSBTSU9DWDI1R1NVQlNDUklQKSB7CisJCXJlYWRfbG9ja19iaCgmeDI1X25laWdoX2xpc3RfbG9jayk7CiAJCXgyNV9zdWJzY3IuZXh0ZW5kZWQJICAgICA9IG5iLT5leHRlbmRlZDsKIAkJeDI1X3N1YnNjci5nbG9iYWxfZmFjaWxfbWFzayA9IG5iLT5nbG9iYWxfZmFjaWxfbWFzazsKKwkJcmVhZF91bmxvY2tfYmgoJngyNV9uZWlnaF9saXN0X2xvY2spOwogCQlyYyA9IGNvcHlfdG9fdXNlcihhcmcsICZ4MjVfc3Vic2NyLAogCQkJCSAgc2l6ZW9mKHgyNV9zdWJzY3IpKSA/IC1FRkFVTFQgOiAwOwogCX0gZWxzZSB7CiAJCXJjID0gLUVJTlZBTDsKIAkJaWYgKCEoeDI1X3N1YnNjci5leHRlbmRlZCAmJiB4MjVfc3Vic2NyLmV4dGVuZGVkICE9IDEpKSB7CiAJCQlyYyA9IDA7CisJCQl3cml0ZV9sb2NrX2JoKCZ4MjVfbmVpZ2hfbGlzdF9sb2NrKTsKIAkJCW5iLT5leHRlbmRlZAkgICAgID0geDI1X3N1YnNjci5leHRlbmRlZDsKIAkJCW5iLT5nbG9iYWxfZmFjaWxfbWFzayA9IHgyNV9zdWJzY3IuZ2xvYmFsX2ZhY2lsX21hc2s7CisJCQl3cml0ZV91bmxvY2tfYmgoJngyNV9uZWlnaF9saXN0X2xvY2spOwogCQl9CiAJfQogCXgyNV9uZWlnaF9wdXQobmIpOwpkaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9wb2xpY3kuYyBiL25ldC94ZnJtL3hmcm1fcG9saWN5LmMKaW5kZXggMDQ0ZTc3OC4uOGIzZWY0MCAxMDA2NDQKLS0tIGEvbmV0L3hmcm0veGZybV9wb2xpY3kuYworKysgYi9uZXQveGZybS94ZnJtX3BvbGljeS5jCkBAIC0xNDMzLDcgKzE0MzMsNyBAQAogCQl9CiAKIAkJeGRzdC0+cm91dGUgPSBkc3Q7Ci0JCW1lbWNweSgmZHN0MS0+bWV0cmljcywgJmRzdC0+bWV0cmljcywgc2l6ZW9mKGRzdC0+bWV0cmljcykpOworCQlkc3RfY29weV9tZXRyaWNzKGRzdDEsIGRzdCk7CiAKIAkJaWYgKHhmcm1baV0tPnByb3BzLm1vZGUgIT0gWEZSTV9NT0RFX1RSQU5TUE9SVCkgewogCQkJZmFtaWx5ID0geGZybVtpXS0+cHJvcHMuZmFtaWx5OwpAQCAtMjI3MSw3ICsyMjcxLDcgQEAKIAkJaWYgKHBtdHUgPiByb3V0ZV9tdHVfY2FjaGVkKQogCQkJcG10dSA9IHJvdXRlX210dV9jYWNoZWQ7CiAKLQkJZHN0LT5tZXRyaWNzW1JUQVhfTVRVLTFdID0gcG10dTsKKwkJZHN0X21ldHJpY19zZXQoZHN0LCBSVEFYX01UVSwgcG10dSk7CiAJfSB3aGlsZSAoKGRzdCA9IGRzdC0+bmV4dCkpOwogfQogCkBAIC0yMzQ5LDcgKzIzNDksNyBAQAogCQltdHUgPSB4ZnJtX3N0YXRlX210dShkc3QtPnhmcm0sIG10dSk7CiAJCWlmIChtdHUgPiBsYXN0LT5yb3V0ZV9tdHVfY2FjaGVkKQogCQkJbXR1ID0gbGFzdC0+cm91dGVfbXR1X2NhY2hlZDsKLQkJZHN0LT5tZXRyaWNzW1JUQVhfTVRVLTFdID0gbXR1OworCQlkc3RfbWV0cmljX3NldChkc3QsIFJUQVhfTVRVLCBtdHUpOwogCiAJCWlmIChsYXN0ID09IGZpcnN0KQogCQkJYnJlYWs7CkBAIC0yMzYxLDYgKzIzNjEsMTYgQEAKIAlyZXR1cm4gMTsKIH0KIAorc3RhdGljIHVuc2lnbmVkIGludCB4ZnJtX2RlZmF1bHRfYWR2bXNzKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCkKK3sKKwlyZXR1cm4gZHN0X21ldHJpY19hZHZtc3MoZHN0LT5wYXRoKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCB4ZnJtX2RlZmF1bHRfbXR1KGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCkKK3sKKwlyZXR1cm4gZHN0X210dShkc3QtPnBhdGgpOworfQorCiBpbnQgeGZybV9wb2xpY3lfcmVnaXN0ZXJfYWZpbmZvKHN0cnVjdCB4ZnJtX3BvbGljeV9hZmluZm8gKmFmaW5mbykKIHsKIAlzdHJ1Y3QgbmV0ICpuZXQ7CkBAIC0yMzc4LDYgKzIzODgsMTAgQEAKIAkJCWRzdF9vcHMtPmttZW1fY2FjaGVwID0geGZybV9kc3RfY2FjaGU7CiAJCWlmIChsaWtlbHkoZHN0X29wcy0+Y2hlY2sgPT0gTlVMTCkpCiAJCQlkc3Rfb3BzLT5jaGVjayA9IHhmcm1fZHN0X2NoZWNrOworCQlpZiAobGlrZWx5KGRzdF9vcHMtPmRlZmF1bHRfYWR2bXNzID09IE5VTEwpKQorCQkJZHN0X29wcy0+ZGVmYXVsdF9hZHZtc3MgPSB4ZnJtX2RlZmF1bHRfYWR2bXNzOworCQlpZiAobGlrZWx5KGRzdF9vcHMtPmRlZmF1bHRfbXR1ID09IE5VTEwpKQorCQkJZHN0X29wcy0+ZGVmYXVsdF9tdHUgPSB4ZnJtX2RlZmF1bHRfbXR1OwogCQlpZiAobGlrZWx5KGRzdF9vcHMtPm5lZ2F0aXZlX2FkdmljZSA9PSBOVUxMKSkKIAkJCWRzdF9vcHMtPm5lZ2F0aXZlX2FkdmljZSA9IHhmcm1fbmVnYXRpdmVfYWR2aWNlOwogCQlpZiAobGlrZWx5KGRzdF9vcHMtPmxpbmtfZmFpbHVyZSA9PSBOVUxMKSkKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fdXNlci5jIGIvbmV0L3hmcm0veGZybV91c2VyLmMKaW5kZXggOGJhZTZiMi4uOGViODg5NSAxMDA2NDQKLS0tIGEvbmV0L3hmcm0veGZybV91c2VyLmMKKysrIGIvbmV0L3hmcm0veGZybV91c2VyLmMKQEAgLTE0OCw3ICsxNDgsOCBAQAogCQkgICAgICFhdHRyc1tYRlJNQV9BTEdfQVVUSF9UUlVOQ10pIHx8CiAJCSAgICBhdHRyc1tYRlJNQV9BTEdfQUVBRF0JfHwKIAkJICAgIGF0dHJzW1hGUk1BX0FMR19DUllQVF0JfHwKLQkJICAgIGF0dHJzW1hGUk1BX0FMR19DT01QXSkKKwkJICAgIGF0dHJzW1hGUk1BX0FMR19DT01QXQl8fAorCQkgICAgYXR0cnNbWEZSTUFfVEZDUEFEXSkKIAkJCWdvdG8gb3V0OwogCQlicmVhazsKIApAQCAtMTY1LDYgKzE2Niw5IEBACiAJCSAgICAgYXR0cnNbWEZSTUFfQUxHX0NSWVBUXSkgJiYKIAkJICAgIGF0dHJzW1hGUk1BX0FMR19BRUFEXSkKIAkJCWdvdG8gb3V0OworCQlpZiAoYXR0cnNbWEZSTUFfVEZDUEFEXSAmJgorCQkgICAgcC0+bW9kZSAhPSBYRlJNX01PREVfVFVOTkVMKQorCQkJZ290byBvdXQ7CiAJCWJyZWFrOwogCiAJY2FzZSBJUFBST1RPX0NPTVA6CkBAIC0xNzIsNyArMTc2LDggQEAKIAkJICAgIGF0dHJzW1hGUk1BX0FMR19BRUFEXQl8fAogCQkgICAgYXR0cnNbWEZSTUFfQUxHX0FVVEhdCXx8CiAJCSAgICBhdHRyc1tYRlJNQV9BTEdfQVVUSF9UUlVOQ10JfHwKLQkJICAgIGF0dHJzW1hGUk1BX0FMR19DUllQVF0pCisJCSAgICBhdHRyc1tYRlJNQV9BTEdfQ1JZUFRdCXx8CisJCSAgICBhdHRyc1tYRlJNQV9URkNQQURdKQogCQkJZ290byBvdXQ7CiAJCWJyZWFrOwogCkBAIC0xODYsNiArMTkxLDcgQEAKIAkJICAgIGF0dHJzW1hGUk1BX0FMR19DUllQVF0JfHwKIAkJICAgIGF0dHJzW1hGUk1BX0VOQ0FQXQkJfHwKIAkJICAgIGF0dHJzW1hGUk1BX1NFQ19DVFhdCXx8CisJCSAgICBhdHRyc1tYRlJNQV9URkNQQURdCQl8fAogCQkgICAgIWF0dHJzW1hGUk1BX0NPQUREUl0pCiAJCQlnb3RvIG91dDsKIAkJYnJlYWs7CkBAIC00MzksNiArNDQ1LDkgQEAKIAkJCWdvdG8gZXJyb3I7CiAJfQogCisJaWYgKGF0dHJzW1hGUk1BX1RGQ1BBRF0pCisJCXgtPnRmY3BhZCA9IG5sYV9nZXRfdTMyKGF0dHJzW1hGUk1BX1RGQ1BBRF0pOworCiAJaWYgKGF0dHJzW1hGUk1BX0NPQUREUl0pIHsKIAkJeC0+Y29hZGRyID0ga21lbWR1cChubGFfZGF0YShhdHRyc1tYRlJNQV9DT0FERFJdKSwKIAkJCQkgICAgc2l6ZW9mKCp4LT5jb2FkZHIpLCBHRlBfS0VSTkVMKTsKQEAgLTY4OCw2ICs2OTcsOSBAQAogCWlmICh4LT5lbmNhcCkKIAkJTkxBX1BVVChza2IsIFhGUk1BX0VOQ0FQLCBzaXplb2YoKngtPmVuY2FwKSwgeC0+ZW5jYXApOwogCisJaWYgKHgtPnRmY3BhZCkKKwkJTkxBX1BVVF9VMzIoc2tiLCBYRlJNQV9URkNQQUQsIHgtPnRmY3BhZCk7CisKIAlpZiAoeGZybV9tYXJrX3B1dChza2IsICZ4LT5tYXJrKSkKIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAKQEAgLTIxMjIsNiArMjEzNCw3IEBACiAJW1hGUk1BX01JR1JBVEVdCQk9IHsgLmxlbiA9IHNpemVvZihzdHJ1Y3QgeGZybV91c2VyX21pZ3JhdGUpIH0sCiAJW1hGUk1BX0tNQUREUkVTU10JPSB7IC5sZW4gPSBzaXplb2Yoc3RydWN0IHhmcm1fdXNlcl9rbWFkZHJlc3MpIH0sCiAJW1hGUk1BX01BUktdCQk9IHsgLmxlbiA9IHNpemVvZihzdHJ1Y3QgeGZybV9tYXJrKSB9LAorCVtYRlJNQV9URkNQQURdCQk9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHhmcm1fbGluayB7CkBAIC0yMzAxLDYgKzIzMTQsOCBAQAogCQlsICs9IG5sYV90b3RhbF9zaXplKHNpemVvZigqeC0+Y2FsZykpOwogCWlmICh4LT5lbmNhcCkKIAkJbCArPSBubGFfdG90YWxfc2l6ZShzaXplb2YoKngtPmVuY2FwKSk7CisJaWYgKHgtPnRmY3BhZCkKKwkJbCArPSBubGFfdG90YWxfc2l6ZShzaXplb2YoeC0+dGZjcGFkKSk7CiAJaWYgKHgtPnNlY3VyaXR5KQogCQlsICs9IG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgeGZybV91c2VyX3NlY19jdHgpICsKIAkJCQkgICAgeC0+c2VjdXJpdHktPmN0eF9sZW4pOwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy8uZ2l0aWdub3JlIGIvc2NyaXB0cy8uZ2l0aWdub3JlCmluZGV4IGM1ZDVkYjUuLmUyNzQxZDIgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvLmdpdGlnbm9yZQorKysgYi9zY3JpcHRzLy5naXRpZ25vcmUKQEAgLTcsMyArNyw0IEBACiBiaW4yYwogdW5pZmRlZgogaWhleDJmdworcmVjb3JkbWNvdW50CmRpZmYgLS1naXQgYS9zY3JpcHRzL01ha2VmaWxlLmJ1aWxkIGIvc2NyaXB0cy9NYWtlZmlsZS5idWlsZAppbmRleCA1YWQyNWUxLi40ZWI5OWFiIDEwMDY0NAotLS0gYS9zY3JpcHRzL01ha2VmaWxlLmJ1aWxkCisrKyBiL3NjcmlwdHMvTWFrZWZpbGUuYnVpbGQKQEAgLTIxNCwxNyArMjE0LDIyIEBACiAjIFRoZSBlbXB0eS5vIGZpbGUgaXMgY3JlYXRlZCBpbiB0aGUgbWFrZSBwcm9jZXNzIGluIG9yZGVyIHRvIGRldGVybWluZQogIyAgdGhlIHRhcmdldCBlbmRpYW5uZXNzIGFuZCB3b3JkIHNpemUuIEl0IGlzIG1hZGUgYmVmb3JlIGFsbCBvdGhlciBDCiAjICBmaWxlcywgaW5jbHVkaW5nIHJlY29yZG1jb3VudC4KLWNtZF9yZWNvcmRfbWNvdW50ID0gaWYgWyAkKEApICE9ICJzY3JpcHRzL21vZC9lbXB0eS5vIiBdOyB0aGVuCQkJXAotCQkJJChvYmp0cmVlKS9zY3JpcHRzL3JlY29yZG1jb3VudCAiJChAKSI7CQkJXAotCQkgICAgZmk7CitzdWJfY21kX3JlY29yZF9tY291bnQgPQkJCQkJXAorCWlmIFsgJChAKSAhPSAic2NyaXB0cy9tb2QvZW1wdHkubyIgXTsgdGhlbglcCisJCSQob2JqdHJlZSkvc2NyaXB0cy9yZWNvcmRtY291bnQgIiQoQCkiOwlcCisJZmk7CiBlbHNlCi1jbWRfcmVjb3JkX21jb3VudCA9IHNldCAtZSA7IHBlcmwgJChzcmN0cmVlKS9zY3JpcHRzL3JlY29yZG1jb3VudC5wbCAiJChBUkNIKSIgXAorc3ViX2NtZF9yZWNvcmRfbWNvdW50ID0gc2V0IC1lIDsgcGVybCAkKHNyY3RyZWUpL3NjcmlwdHMvcmVjb3JkbWNvdW50LnBsICIkKEFSQ0gpIiBcCiAJIiQoaWYgJChDT05GSUdfQ1BVX0JJR19FTkRJQU4pLGJpZyxsaXR0bGUpIiBcCiAJIiQoaWYgJChDT05GSUdfNjRCSVQpLDY0LDMyKSIgXAogCSIkKE9CSkRVTVApIiAiJChPQkpDT1BZKSIgIiQoQ0MpICQoS0JVSUxEX0NGTEFHUykiIFwKIAkiJChMRCkiICIkKE5NKSIgIiQoUk0pIiAiJChNVikiIFwKIAkiJChpZiAkKHBhcnQtb2YtbW9kdWxlKSwxLDApIiAiJChAKSI7CiBlbmRpZgorY21kX3JlY29yZF9tY291bnQgPSAJCQkJCQlcCisJaWYgWyAiJChmaW5kc3RyaW5nIC1wZywkKF9jX2ZsYWdzKSkiID0gIi1wZyIgXTsgdGhlbglcCisJCSQoc3ViX2NtZF9yZWNvcmRfbWNvdW50KQkJCVwKKwlmaTsKIGVuZGlmCiAKIGRlZmluZSBydWxlX2NjX29fYwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9iYXNpYy9maXhkZXAuYyBiL3NjcmlwdHMvYmFzaWMvZml4ZGVwLmMKaW5kZXggZWEyNmIyMy4uYzlhMTZhYiAxMDA2NDQKLS0tIGEvc2NyaXB0cy9iYXNpYy9maXhkZXAuYworKysgYi9zY3JpcHRzL2Jhc2ljL2ZpeGRlcC5jCkBAIC0xMzgsMzggKzEzOCwzNiBAQAogCXByaW50ZigiY21kXyVzIDo9ICVzXG5cbiIsIHRhcmdldCwgY21kbGluZSk7CiB9CiAKLWNoYXIgKiBzdHJfY29uZmlnICA9IE5VTEw7Ci1pbnQgICAgc2l6ZV9jb25maWcgPSAwOwotaW50ICAgIGxlbl9jb25maWcgID0gMDsKK3N0cnVjdCBpdGVtIHsKKwlzdHJ1Y3QgaXRlbQkqbmV4dDsKKwl1bnNpZ25lZCBpbnQJbGVuOworCXVuc2lnbmVkIGludAloYXNoOworCWNoYXIJCW5hbWVbMF07Cit9OwogCi0vKgotICogR3JvdyB0aGUgY29uZmlndXJhdGlvbiBzdHJpbmcgdG8gYSBkZXNpcmVkIGxlbmd0aC4KLSAqIFVzdWFsbHkgdGhlIGZpcnN0IGdyb3d0aCBpcyBwbGVudHkuCi0gKi8KLXN0YXRpYyB2b2lkIGdyb3dfY29uZmlnKGludCBsZW4pCisjZGVmaW5lIEhBU0hTWiAyNTYKK3N0YXRpYyBzdHJ1Y3QgaXRlbSAqaGFzaHRhYltIQVNIU1pdOworCitzdGF0aWMgdW5zaWduZWQgaW50IHN0cmhhc2goY29uc3QgY2hhciAqc3RyLCB1bnNpZ25lZCBpbnQgc3opCiB7Ci0Jd2hpbGUgKGxlbl9jb25maWcgKyBsZW4gPiBzaXplX2NvbmZpZykgewotCQlpZiAoc2l6ZV9jb25maWcgPT0gMCkKLQkJCXNpemVfY29uZmlnID0gMjA0ODsKLQkJc3RyX2NvbmZpZyA9IHJlYWxsb2Moc3RyX2NvbmZpZywgc2l6ZV9jb25maWcgKj0gMik7Ci0JCWlmIChzdHJfY29uZmlnID09IE5VTEwpCi0JCQl7IHBlcnJvcigiZml4ZGVwOm1hbGxvYyIpOyBleGl0KDEpOyB9Ci0JfQorCS8qIGZudjMyIGhhc2ggKi8KKwl1bnNpZ25lZCBpbnQgaSwgaGFzaCA9IDIxNjYxMzYyNjFVOworCisJZm9yIChpID0gMDsgaSA8IHN6OyBpKyspCisJCWhhc2ggPSAoaGFzaCBeIHN0cltpXSkgKiAweDAxMDAwMTkzOworCXJldHVybiBoYXNoOwogfQogCi0KLQogLyoKICAqIExvb2t1cCBhIHZhbHVlIGluIHRoZSBjb25maWd1cmF0aW9uIHN0cmluZy4KICAqLwotc3RhdGljIGludCBpc19kZWZpbmVkX2NvbmZpZyhjb25zdCBjaGFyICogbmFtZSwgaW50IGxlbikKK3N0YXRpYyBpbnQgaXNfZGVmaW5lZF9jb25maWcoY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbiwgdW5zaWduZWQgaW50IGhhc2gpCiB7Ci0JY29uc3QgY2hhciAqIHBjb25maWc7Ci0JY29uc3QgY2hhciAqIHBsYXN0ID0gc3RyX2NvbmZpZyArIGxlbl9jb25maWcgLSBsZW47Ci0JZm9yICggcGNvbmZpZyA9IHN0cl9jb25maWcgKyAxOyBwY29uZmlnIDwgcGxhc3Q7IHBjb25maWcrKyApIHsKLQkJaWYgKHBjb25maWdbIC0xXSA9PSAnXG4nCi0JCSYmICBwY29uZmlnW2xlbl0gPT0gJ1xuJwotCQkmJiAgIW1lbWNtcChwY29uZmlnLCBuYW1lLCBsZW4pKQorCXN0cnVjdCBpdGVtICphdXg7CisKKwlmb3IgKGF1eCA9IGhhc2h0YWJbaGFzaCAlIEhBU0hTWl07IGF1eDsgYXV4ID0gYXV4LT5uZXh0KSB7CisJCWlmIChhdXgtPmhhc2ggPT0gaGFzaCAmJiBhdXgtPmxlbiA9PSBsZW4gJiYKKwkJICAgIG1lbWNtcChhdXgtPm5hbWUsIG5hbWUsIGxlbikgPT0gMCkKIAkJCXJldHVybiAxOwogCX0KIAlyZXR1cm4gMDsKQEAgLTE3OCwxMyArMTc2LDE5IEBACiAvKgogICogQWRkIGEgbmV3IHZhbHVlIHRvIHRoZSBjb25maWd1cmF0aW9uIHN0cmluZy4KICAqLwotc3RhdGljIHZvaWQgZGVmaW5lX2NvbmZpZyhjb25zdCBjaGFyICogbmFtZSwgaW50IGxlbikKK3N0YXRpYyB2b2lkIGRlZmluZV9jb25maWcoY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbiwgdW5zaWduZWQgaW50IGhhc2gpCiB7Ci0JZ3Jvd19jb25maWcobGVuICsgMSk7CisJc3RydWN0IGl0ZW0gKmF1eCA9IG1hbGxvYyhzaXplb2YoKmF1eCkgKyBsZW4pOwogCi0JbWVtY3B5KHN0cl9jb25maWcrbGVuX2NvbmZpZywgbmFtZSwgbGVuKTsKLQlsZW5fY29uZmlnICs9IGxlbjsKLQlzdHJfY29uZmlnW2xlbl9jb25maWcrK10gPSAnXG4nOworCWlmICghYXV4KSB7CisJCXBlcnJvcigiZml4ZGVwOm1hbGxvYyIpOworCQlleGl0KDEpOworCX0KKwltZW1jcHkoYXV4LT5uYW1lLCBuYW1lLCBsZW4pOworCWF1eC0+bGVuID0gbGVuOworCWF1eC0+aGFzaCA9IGhhc2g7CisJYXV4LT5uZXh0ID0gaGFzaHRhYltoYXNoICUgSEFTSFNaXTsKKwloYXNodGFiW2hhc2ggJSBIQVNIU1pdID0gYXV4OwogfQogCiAvKgpAQCAtMTkyLDQwICsxOTYsNDkgQEAKICAqLwogc3RhdGljIHZvaWQgY2xlYXJfY29uZmlnKHZvaWQpCiB7Ci0JbGVuX2NvbmZpZyA9IDA7Ci0JZGVmaW5lX2NvbmZpZygiIiwgMCk7CisJc3RydWN0IGl0ZW0gKmF1eCwgKm5leHQ7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgSEFTSFNaOyBpKyspIHsKKwkJZm9yIChhdXggPSBoYXNodGFiW2ldOyBhdXg7IGF1eCA9IG5leHQpIHsKKwkJCW5leHQgPSBhdXgtPm5leHQ7CisJCQlmcmVlKGF1eCk7CisJCX0KKwkJaGFzaHRhYltpXSA9IE5VTEw7CisJfQogfQogCiAvKgogICogUmVjb3JkIHRoZSB1c2Ugb2YgYSBDT05GSUdfKiB3b3JkLgogICovCi1zdGF0aWMgdm9pZCB1c2VfY29uZmlnKGNoYXIgKm0sIGludCBzbGVuKQorc3RhdGljIHZvaWQgdXNlX2NvbmZpZyhjb25zdCBjaGFyICptLCBpbnQgc2xlbikKIHsKLQljaGFyIHNbUEFUSF9NQVhdOwotCWNoYXIgKnA7CisJdW5zaWduZWQgaW50IGhhc2ggPSBzdHJoYXNoKG0sIHNsZW4pOworCWludCBjLCBpOwogCi0JaWYgKGlzX2RlZmluZWRfY29uZmlnKG0sIHNsZW4pKQorCWlmIChpc19kZWZpbmVkX2NvbmZpZyhtLCBzbGVuLCBoYXNoKSkKIAkgICAgcmV0dXJuOwogCi0JZGVmaW5lX2NvbmZpZyhtLCBzbGVuKTsKKwlkZWZpbmVfY29uZmlnKG0sIHNsZW4sIGhhc2gpOwogCi0JbWVtY3B5KHMsIG0sIHNsZW4pOyBzW3NsZW5dID0gMDsKLQotCWZvciAocCA9IHM7IHAgPCBzICsgc2xlbjsgcCsrKSB7Ci0JCWlmICgqcCA9PSAnXycpCi0JCQkqcCA9ICcvJzsKKwlwcmludGYoIiAgICAkKHdpbGRjYXJkIGluY2x1ZGUvY29uZmlnLyIpOworCWZvciAoaSA9IDA7IGkgPCBzbGVuOyBpKyspIHsKKwkJYyA9IG1baV07CisJCWlmIChjID09ICdfJykKKwkJCWMgPSAnLyc7CiAJCWVsc2UKLQkJCSpwID0gdG9sb3dlcigoaW50KSpwKTsKKwkJCWMgPSB0b2xvd2VyKGMpOworCQlwdXRjaGFyKGMpOwogCX0KLQlwcmludGYoIiAgICAkKHdpbGRjYXJkIGluY2x1ZGUvY29uZmlnLyVzLmgpIFxcXG4iLCBzKTsKKwlwcmludGYoIi5oKSBcXFxuIik7CiB9CiAKLXN0YXRpYyB2b2lkIHBhcnNlX2NvbmZpZ19maWxlKGNoYXIgKm1hcCwgc2l6ZV90IGxlbikKK3N0YXRpYyB2b2lkIHBhcnNlX2NvbmZpZ19maWxlKGNvbnN0IGNoYXIgKm1hcCwgc2l6ZV90IGxlbikKIHsKLQlpbnQgKmVuZCA9IChpbnQgKikgKG1hcCArIGxlbik7CisJY29uc3QgaW50ICplbmQgPSAoY29uc3QgaW50ICopIChtYXAgKyBsZW4pOwogCS8qIHN0YXJ0IGF0ICsxLCBzbyB0aGF0IHAgY2FuIG5ldmVyIGJlIDwgbWFwICovCi0JaW50ICptICAgPSAoaW50ICopIG1hcCArIDE7Ci0JY2hhciAqcCwgKnE7CisJY29uc3QgaW50ICptICAgPSAoY29uc3QgaW50ICopIG1hcCArIDE7CisJY29uc3QgY2hhciAqcCwgKnE7CiAKIAlmb3IgKDsgbSA8IGVuZDsgbSsrKSB7CiAJCWlmICgqbSA9PSBJTlRfQ09ORikgeyBwID0gKGNoYXIgKikgbSAgOyBnb3RvIGNvbmY7IH0KQEAgLTI2NSw3ICsyNzgsNyBAQAogCXJldHVybiBtZW1jbXAocyArIHNsZW4gLSBzdWJsZW4sIHN1Yiwgc3VibGVuKTsKIH0KIAotc3RhdGljIHZvaWQgZG9fY29uZmlnX2ZpbGUoY2hhciAqZmlsZW5hbWUpCitzdGF0aWMgdm9pZCBkb19jb25maWdfZmlsZShjb25zdCBjaGFyICpmaWxlbmFtZSkKIHsKIAlzdHJ1Y3Qgc3RhdCBzdDsKIAlpbnQgZmQ7CkBAIC0yNzMsNyArMjg2LDcgQEAKIAogCWZkID0gb3BlbihmaWxlbmFtZSwgT19SRE9OTFkpOwogCWlmIChmZCA8IDApIHsKLQkJZnByaW50ZihzdGRlcnIsICJmaXhkZXA6ICIpOworCQlmcHJpbnRmKHN0ZGVyciwgImZpeGRlcDogZXJyb3Igb3BlbmluZyBjb25maWcgZmlsZTogIik7CiAJCXBlcnJvcihmaWxlbmFtZSk7CiAJCWV4aXQoMik7CiAJfQpAQCAtMzQ0LDExICszNTcsMTUgQEAKIAogCWZkID0gb3BlbihkZXBmaWxlLCBPX1JET05MWSk7CiAJaWYgKGZkIDwgMCkgewotCQlmcHJpbnRmKHN0ZGVyciwgImZpeGRlcDogIik7CisJCWZwcmludGYoc3RkZXJyLCAiZml4ZGVwOiBlcnJvciBvcGVuaW5nIGRlcGZpbGU6ICIpOwogCQlwZXJyb3IoZGVwZmlsZSk7CiAJCWV4aXQoMik7CiAJfQotCWZzdGF0KGZkLCAmc3QpOworCWlmIChmc3RhdChmZCwgJnN0KSA8IDApIHsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImZpeGRlcDogZXJyb3IgZnN0YXQnaW5nIGRlcGZpbGU6ICIpOworICAgICAgICAgICAgICAgIHBlcnJvcihkZXBmaWxlKTsKKyAgICAgICAgICAgICAgICBleGl0KDIpOworICAgICAgICB9CiAJaWYgKHN0LnN0X3NpemUgPT0gMCkgewogCQlmcHJpbnRmKHN0ZGVyciwiZml4ZGVwOiAlcyBpcyBlbXB0eVxuIixkZXBmaWxlKTsKIAkJY2xvc2UoZmQpOwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9jaGVja3N5c2NhbGxzLnNoIGIvc2NyaXB0cy9jaGVja3N5c2NhbGxzLnNoCmluZGV4IDZiYjQyZTcuLjNhYjMxNmUgMTAwNzU1Ci0tLSBhL3NjcmlwdHMvY2hlY2tzeXNjYWxscy5zaAorKysgYi9zY3JpcHRzL2NoZWNrc3lzY2FsbHMuc2gKQEAgLTYsNyArNiw3IEBACiAjIGFuZCBsaXN0ZWQgYmVsb3cgc28gdGhleSBhcmUgaWdub3JlZC4KICMKICMgVXNhZ2U6Ci0jIHN5c2NhbGxjaGsgZ2NjIGdjYy1vcHRpb25zCisjIGNoZWNrc3lzY2FsbHMuc2ggZ2NjIGdjYy1vcHRpb25zCiAjCiAKIGlnbm9yZV9saXN0KCkgewpAQCAtMjA0LDUgKzIwNCw1IEBACiBcI2VuZGlmL3AnICQxCiB9CiAKLShpZ25vcmVfbGlzdCAmJiBzeXNjYWxsX2xpc3QgJHtzcmN0cmVlfS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91bmlzdGRfMzIuaCkgfCBcCisoaWdub3JlX2xpc3QgJiYgc3lzY2FsbF9saXN0ICQoZGlybmFtZSAkMCkvLi4vYXJjaC94ODYvaW5jbHVkZS9hc20vdW5pc3RkXzMyLmgpIHwgXAogJCogLUUgLXggYyAtID4gL2Rldi9udWxsCmRpZmYgLS1naXQgYS9zY3JpcHRzL2NvY2NpbmVsbGUvbWlzYy9kb3VibGVpbml0LmNvY2NpIGIvc2NyaXB0cy9jb2NjaW5lbGxlL21pc2MvZG91YmxlaW5pdC5jb2NjaQppbmRleCA1NWQ3ZGMxLi4xNTZiMjBhIDEwMDY0NAotLS0gYS9zY3JpcHRzL2NvY2NpbmVsbGUvbWlzYy9kb3VibGVpbml0LmNvY2NpCisrKyBiL3NjcmlwdHMvY29jY2luZWxsZS9taXNjL2RvdWJsZWluaXQuY29jY2kKQEAgLTcsNyArNyw3IEBACiAvLyBDb3B5cmlnaHQ6IChDKSAyMDEwIEp1bGlhIExhd2FsbCwgRElLVS4gIEdQTHYyLgogLy8gQ29weXJpZ2h0OiAoQykgMjAxMCBHaWxsZXMgTXVsbGVyLCBJTlJJQS9MaVA2LiAgR1BMdjIuCiAvLyBVUkw6IGh0dHA6Ly9jb2NjaW5lbGxlLmxpcDYuZnIvCi0vLyBDb21tZW50czoKKy8vIENvbW1lbnRzOiByZXF1aXJlcyBhdCBsZWFzdCBDb2NjaW5lbGxlIDAuMi40LCBsZXggb3IgcGFyc2UgZXJyb3Igb3RoZXJ3aXNlCiAvLyBPcHRpb25zOiAtbm9faW5jbHVkZXMgLWluY2x1ZGVfaGVhZGVycwogCiB2aXJ0dWFsIG9yZwpAQCAtMTksNyArMTksNyBAQAogZXhwcmVzc2lvbiBFOwogQEAKIAotc3RydWN0IEkgcyA9QHAwIHsgLi4uIC5mbGRAcCA9IEUsIC4uLn07CitzdHJ1Y3QgSSBzID1AcDAgeyAuLi4sIC5mbGRAcCA9IEUsIC4uLn07CiAKIEBzQAogaWRlbnRpZmllciBJLCBzLCByLmZsZDsKQEAgLTI3LDcgKzI3LDcgQEAKIGV4cHJlc3Npb24gRTsKIEBACiAKLXN0cnVjdCBJIHMgPUBwMCB7IC4uLiAuZmxkQHAgPSBFLCAuLi59Oworc3RydWN0IEkgcyA9QHAwIHsgLi4uLCAuZmxkQHAgPSBFLCAuLi59OwogCiBAc2NyaXB0OnB5dGhvbiBkZXBlbmRzIG9uIG9yZ0AKIHAwIDw8IHIucDA7CmRpZmYgLS1naXQgYS9zY3JpcHRzL2NvY2NpbmVsbGUvbnVsbC9kZXJlZl9udWxsLmNvY2NpIGIvc2NyaXB0cy9jb2NjaW5lbGxlL251bGwvZGVyZWZfbnVsbC5jb2NjaQppbmRleCA5OTY5ZDc2Li5jZGFjNmNmIDEwMDY0NAotLS0gYS9zY3JpcHRzL2NvY2NpbmVsbGUvbnVsbC9kZXJlZl9udWxsLmNvY2NpCisrKyBiL3NjcmlwdHMvY29jY2luZWxsZS9udWxsL2RlcmVmX251bGwuY29jY2kKQEAgLTExLDIxICsxMSwxMCBAQAogLy8gT3B0aW9uczoKIAogdmlydHVhbCBjb250ZXh0Ci12aXJ0dWFsIHBhdGNoCiB2aXJ0dWFsIG9yZwogdmlydHVhbCByZXBvcnQKIAotQGluaXRpYWxpemU6cHl0aG9uIGRlcGVuZHMgb24gIWNvbnRleHQgJiYgcGF0Y2ggJiYgIW9yZyAmJiAhcmVwb3J0QAotCi1pbXBvcnQgc3lzCi1wcmludCA+PiBzeXMuc3RkZXJyLCAiVGhpcyBzZW1hbnRpYyBwYXRjaCBkb2VzIG5vdCBzdXBwb3J0IHRoZSAncGF0Y2gnIG1vZGUuIgotCi1AZGVwZW5kcyBvbiBwYXRjaEAKLUBACi0KLXRoaXNfcnVsZV9zaG91bGRfbmV2ZXJfbWF0Y2hlcygpOwotCi1AaWZtIGRlcGVuZHMgb24gIXBhdGNoQAorQGlmbUAKIGV4cHJlc3Npb24gKkU7CiBzdGF0ZW1lbnQgUzEsUzI7CiBwb3NpdGlvbiBwMTsKQEAgLTM1LDcgKzI0LDcgQEAKIAogLy8gVGhlIGZvbGxvd2luZyB0d28gcnVsZXMgYXJlIHNlcGFyYXRlLCBiZWNhdXNlIGJvdGggY2FuIG1hdGNoIGEgc2luZ2xlCiAvLyBleHByZXNzaW9uIGluIGRpZmZlcmVudCB3YXlzCi1AcHIxIGRlcGVuZHMgb24gIXBhdGNoIGV4cHJlc3Npb25ACitAcHIxIGV4cHJlc3Npb25ACiBleHByZXNzaW9uICppZm0uRTsKIGlkZW50aWZpZXIgZjsKIHBvc2l0aW9uIHAxOwpAQCAtNDMsNyArMzIsNyBAQAogCiAgKEUgIT0gTlVMTCAmJiAuLi4pID8gPCsuLi5FLT5mQHAxLi4uKz4gOiAuLi4KIAotQHByMiBkZXBlbmRzIG9uICFwYXRjaCBleHByZXNzaW9uQAorQHByMiBleHByZXNzaW9uQAogZXhwcmVzc2lvbiAqaWZtLkU7CiBpZGVudGlmaWVyIGY7CiBwb3NpdGlvbiBwMjsKQEAgLTU5LDcgKzQ4LDcgQEAKIAogLy8gRm9yIG9yZyBhbmQgcmVwb3J0IG1vZGVzCiAKLUByIGRlcGVuZHMgb24gIWNvbnRleHQgJiYgIXBhdGNoICYmIChvcmcgfHwgcmVwb3J0KSBleGlzdHNACitAciBkZXBlbmRzIG9uICFjb250ZXh0ICYmIChvcmcgfHwgcmVwb3J0KSBleGlzdHNACiBleHByZXNzaW9uIHN1YkUgPD0gaWZtLkU7CiBleHByZXNzaW9uICppZm0uRTsKIGV4cHJlc3Npb24gRTEsRTI7CkBAIC05OSw3ICs4OCw3IEBACiB9CiBlbHNlIFMzCiAKLUBzY3JpcHQ6cHl0aG9uIGRlcGVuZHMgb24gIWNvbnRleHQgJiYgIXBhdGNoICYmICFvcmcgJiYgcmVwb3J0QAorQHNjcmlwdDpweXRob24gZGVwZW5kcyBvbiAhY29udGV4dCAmJiAhb3JnICYmIHJlcG9ydEAKIHAgPDwgci5wOwogcDEgPDwgaWZtLnAxOwogeCA8PCBpZm0uRTsKQEAgLTEwOSw3ICs5OCw3IEBACiBjb2NjaWxpYi5yZXBvcnQucHJpbnRfcmVwb3J0KHBbMF0sIG1zZykKIGNvY2NpLmluY2x1ZGVfbWF0Y2goRmFsc2UpCiAKLUBzY3JpcHQ6cHl0aG9uIGRlcGVuZHMgb24gIWNvbnRleHQgJiYgIXBhdGNoICYmIG9yZyAmJiAhcmVwb3J0QAorQHNjcmlwdDpweXRob24gZGVwZW5kcyBvbiAhY29udGV4dCAmJiBvcmcgJiYgIXJlcG9ydEAKIHAgPDwgci5wOwogcDEgPDwgaWZtLnAxOwogeCA8PCBpZm0uRTsKQEAgLTEyMCw3ICsxMDksNyBAQAogY29jY2kucHJpbnRfbWFpbihtc2dfc2FmZSxwKQogY29jY2kuaW5jbHVkZV9tYXRjaChGYWxzZSkKIAotQHMgZGVwZW5kcyBvbiAhY29udGV4dCAmJiAhcGF0Y2ggJiYgKG9yZyB8fCByZXBvcnQpIGV4aXN0c0AKK0BzIGRlcGVuZHMgb24gIWNvbnRleHQgJiYgKG9yZyB8fCByZXBvcnQpIGV4aXN0c0AKIGV4cHJlc3Npb24gc3ViRSA8PSBpZm0uRTsKIGV4cHJlc3Npb24gKmlmbS5FOwogZXhwcmVzc2lvbiBFMSxFMjsKQEAgLTE1OSw3ICsxNDgsNyBAQAogfQogZWxzZSBTMwogCi1Ac2NyaXB0OnB5dGhvbiBkZXBlbmRzIG9uICFjb250ZXh0ICYmICFwYXRjaCAmJiAhb3JnICYmIHJlcG9ydEAKK0BzY3JpcHQ6cHl0aG9uIGRlcGVuZHMgb24gIWNvbnRleHQgJiYgIW9yZyAmJiByZXBvcnRACiBwIDw8IHMucDsKIHAxIDw8IGlmbS5wMTsKIHggPDwgaWZtLkU7CkBAIC0xNjgsNyArMTU3LDcgQEAKIG1zZz0iRVJST1I6ICVzIGlzIE5VTEwgYnV0IGRlcmVmZXJlbmNlZC4iICUgKHgpCiBjb2NjaWxpYi5yZXBvcnQucHJpbnRfcmVwb3J0KHBbMF0sIG1zZykKIAotQHNjcmlwdDpweXRob24gZGVwZW5kcyBvbiAhY29udGV4dCAmJiAhcGF0Y2ggJiYgb3JnICYmICFyZXBvcnRACitAc2NyaXB0OnB5dGhvbiBkZXBlbmRzIG9uICFjb250ZXh0ICYmIG9yZyAmJiAhcmVwb3J0QAogcCA8PCBzLnA7CiBwMSA8PCBpZm0ucDE7CiB4IDw8IGlmbS5FOwpAQCAtMTgwLDcgKzE2OSw3IEBACiAKIC8vIEZvciBjb250ZXh0IG1vZGUKIAotQGRlcGVuZHMgb24gY29udGV4dCAmJiAhcGF0Y2ggJiYgIW9yZyAmJiAhcmVwb3J0IGV4aXN0c0AKK0BkZXBlbmRzIG9uIGNvbnRleHQgJiYgIW9yZyAmJiAhcmVwb3J0IGV4aXN0c0AKIGV4cHJlc3Npb24gc3ViRSA8PSBpZm0uRTsKIGV4cHJlc3Npb24gKmlmbS5FOwogZXhwcmVzc2lvbiBFMSxFMjsKQEAgLTIyMyw3ICsyMTIsNyBAQAogLy8gVGhlIGZvbGxvd2luZyB0aHJlZSBydWxlcyBhcmUgZHVwbGljYXRlcyBvZiBpZm0sIHByMSBhbmQgcHIyIHJlc3BlY3RpdmVseS4KIC8vIEl0IGlzIG5lZWQgYmVjYXVzZSB0aGUgcHJldmlvdXMgcnVsZSBhcyBhbHJlYWR5IG1hZGUgYSAiY2hhbmdlIi4KIAotQGlmbTEgZGVwZW5kcyBvbiAhcGF0Y2hACitAaWZtMUAKIGV4cHJlc3Npb24gKkU7CiBzdGF0ZW1lbnQgUzEsUzI7CiBwb3NpdGlvbiBwMTsKQEAgLTIzMSw3ICsyMjAsNyBAQAogCiBpZkBwMSAoKEUgPT0gTlVMTCAmJiAuLi4pIHx8IC4uLikgUzEgZWxzZSBTMgogCi1AcHIxMSBkZXBlbmRzIG9uICFwYXRjaCBleHByZXNzaW9uQAorQHByMTEgZXhwcmVzc2lvbkAKIGV4cHJlc3Npb24gKmlmbTEuRTsKIGlkZW50aWZpZXIgZjsKIHBvc2l0aW9uIHAxOwpAQCAtMjM5LDcgKzIyOCw3IEBACiAKICAoRSAhPSBOVUxMICYmIC4uLikgPyA8Ky4uLkUtPmZAcDEuLi4rPiA6IC4uLgogCi1AcHIxMiBkZXBlbmRzIG9uICFwYXRjaCBleHByZXNzaW9uQAorQHByMTIgZXhwcmVzc2lvbkAKIGV4cHJlc3Npb24gKmlmbTEuRTsKIGlkZW50aWZpZXIgZjsKIHBvc2l0aW9uIHAyOwpAQCAtMjUzLDcgKzI0Miw3IEBACiAgc2l6ZW9mKDwrLi4uRS0+ZkBwMi4uLis+KQogKQogCi1AZGVwZW5kcyBvbiBjb250ZXh0ICYmICFwYXRjaCAmJiAhb3JnICYmICFyZXBvcnQgZXhpc3RzQAorQGRlcGVuZHMgb24gY29udGV4dCAmJiAhb3JnICYmICFyZXBvcnQgZXhpc3RzQAogZXhwcmVzc2lvbiBzdWJFIDw9IGlmbTEuRTsKIGV4cHJlc3Npb24gKmlmbTEuRTsKIGV4cHJlc3Npb24gRTEsRTI7CmRpZmYgLS1naXQgYS9zY3JpcHRzL2NvbmZpZyBiL3NjcmlwdHMvY29uZmlnCmluZGV4IDYwOGQ3ZmQuLmE3YzdjNGIgMTAwNzU1Ci0tLSBhL3NjcmlwdHMvY29uZmlnCisrKyBiL3NjcmlwdHMvY29uZmlnCkBAIC0xMCw4ICsxMCwxMCBAQAogCS0tZW5hYmxlfC1lIG9wdGlvbiAgIEVuYWJsZSBvcHRpb24KIAktLWRpc2FibGV8LWQgb3B0aW9uICBEaXNhYmxlIG9wdGlvbgogCS0tbW9kdWxlfC1tIG9wdGlvbiAgIFR1cm4gb3B0aW9uIGludG8gYSBtb2R1bGUKLQktLXNldC1zdHIgb3B0aW9uIHZhbHVlCi0JICAgICAgICAgICAgICAgICAgICAgU2V0IG9wdGlvbiB0byAidmFsdWUiCisJLS1zZXQtc3RyIG9wdGlvbiBzdHJpbmcKKwkgICAgICAgICAgICAgICAgICAgICBTZXQgb3B0aW9uIHRvICJzdHJpbmciCisJLS1zZXQtdmFsIG9wdGlvbiB2YWx1ZQorCSAgICAgICAgICAgICAgICAgICAgIFNldCBvcHRpb24gdG8gdmFsdWUKIAktLXN0YXRlfC1zIG9wdGlvbiAgICBQcmludCBzdGF0ZSBvZiBvcHRpb24gKG4seSxtLHVuZGVmKQogCiAJLS1lbmFibGUtYWZ0ZXJ8LUUgYmVmb3Jlb3B0IG9wdGlvbgpAQCAtODYsNyArODgsNyBAQAogCQlCPSRBUkcKIAkJc2hpZnQgMgogCQk7OwotCS0tKikKKwktKikKIAkJY2hlY2thcmcgIiQxIgogCQlzaGlmdAogCQk7OwpAQCAtMTA5LDYgKzExMSwxMSBAQAogCQlzaGlmdAogCQk7OwogCisJLS1zZXQtdmFsKQorCQlzZXRfdmFyICJDT05GSUdfJEFSRyIgIkNPTkZJR18kQVJHPSQxIgorCQlzaGlmdAorCQk7OworCiAJLS1zdGF0ZXwtcykKIAkJaWYgZ3JlcCAtcSAiIyBDT05GSUdfJEFSRyBpcyBub3Qgc2V0IiAkRk4gOyB0aGVuCiAJCQllY2hvIG4KZGlmZiAtLWdpdCBhL3NjcmlwdHMvZ2Vua3N5bXMvcGFyc2UuY19zaGlwcGVkIGIvc2NyaXB0cy9nZW5rc3ltcy9wYXJzZS5jX3NoaXBwZWQKaW5kZXggZWFlZTQ0ZS4uODA5Yjk0OSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9nZW5rc3ltcy9wYXJzZS5jX3NoaXBwZWQKKysrIGIvc2NyaXB0cy9nZW5rc3ltcy9wYXJzZS5jX3NoaXBwZWQKQEAgLTE2MCw3ICsxNjAsNyBAQAogCiAKICNpbmNsdWRlIDxhc3NlcnQuaD4KLSNpbmNsdWRlIDxtYWxsb2MuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlICJnZW5rc3ltcy5oIgogCiBzdGF0aWMgaW50IGlzX3R5cGVkZWY7CmRpZmYgLS1naXQgYS9zY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkgYi9zY3JpcHRzL2dlbmtzeW1zL3BhcnNlLnkKaW5kZXggMTBkN2RjNy4uMDlhMjY1YyAxMDA2NDQKLS0tIGEvc2NyaXB0cy9nZW5rc3ltcy9wYXJzZS55CisrKyBiL3NjcmlwdHMvZ2Vua3N5bXMvcGFyc2UueQpAQCAtMjQsNyArMjQsNyBAQAogJXsKIAogI2luY2x1ZGUgPGFzc2VydC5oPgotI2luY2x1ZGUgPG1hbGxvYy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgImdlbmtzeW1zLmgiCiAKIHN0YXRpYyBpbnQgaXNfdHlwZWRlZjsKZGlmZiAtLWdpdCBhL3NjcmlwdHMvaGVhZGVycy5zaCBiL3NjcmlwdHMvaGVhZGVycy5zaAppbmRleCAxZGRjZGQzLi45NzhiNDJiIDEwMDc1NQotLS0gYS9zY3JpcHRzL2hlYWRlcnMuc2gKKysrIGIvc2NyaXB0cy9oZWFkZXJzLnNoCkBAIC0xMyw3ICsxMyw3IEBACiAJZmkKIH0KIAotYXJjaHM9JChscyAke3NyY3RyZWV9L2FyY2gpCithcmNocz0ke0hEUl9BUkNIX0xJU1Q6LSQobHMgJHtzcmN0cmVlfS9hcmNoKX0KIAogZm9yIGFyY2ggaW4gJHthcmNoc307IGRvCiAJY2FzZSAke2FyY2h9IGluCmRpZmYgLS1naXQgYS9zY3JpcHRzL2hlYWRlcnNfY2hlY2sucGwgYi9zY3JpcHRzL2hlYWRlcnNfY2hlY2sucGwKaW5kZXggNTBkNmNmZC4uNzk1N2U3YSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9oZWFkZXJzX2NoZWNrLnBsCisrKyBiL3NjcmlwdHMvaGVhZGVyc19jaGVjay5wbApAQCAtNjQsMTAgKzY0LDEwIEBACiAKIHN1YiBjaGVja19kZWNsYXJhdGlvbnMKIHsKLQlpZiAoJGxpbmUgPX5tL15ccypleHRlcm5cYi8pIHsKKwlpZiAoJGxpbmUgPX5tL14oXHMqZXh0ZXJufHVuc2lnbmVkfGNoYXJ8c2hvcnR8aW50fGxvbmd8dm9pZClcYi8pIHsKIAkJcHJpbnRmIFNUREVSUiAiJGZpbGVuYW1lOiRsaW5lbm86ICIgLgotCQkgICAgICAgICAgICAgICJ1c2Vyc3BhY2UgY2Fubm90IGNhbGwgZnVuY3Rpb24gb3IgdmFyaWFibGUgIiAuCi0JCSAgICAgICAgICAgICAgImRlZmluZWQgaW4gdGhlIGtlcm5lbFxuIjsKKwkJCSAgICAgICJ1c2Vyc3BhY2UgY2Fubm90IHJlZmVyZW5jZSBmdW5jdGlvbiBvciAiIC4KKwkJCSAgICAgICJ2YXJpYWJsZSBkZWZpbmVkIGluIHRoZSBrZXJuZWxcbiI7CiAJfQogfQogCmRpZmYgLS1naXQgYS9zY3JpcHRzL2hlYWRlcnNfaW5zdGFsbC5wbCBiL3NjcmlwdHMvaGVhZGVyc19pbnN0YWxsLnBsCmluZGV4IDRjYTNiZTMuLmVmYjNiZTEgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvaGVhZGVyc19pbnN0YWxsLnBsCisrKyBiL3NjcmlwdHMvaGVhZGVyc19pbnN0YWxsLnBsCkBAIC00NSw2ICs0NSwxMyBAQAogCWNsb3NlICRpbjsKIAogCXN5c3RlbSAkdW5pZmRlZiAuICIgJHRtcGZpbGUgPiAkaW5zdGFsbGRpci8kZmlsZSI7CisJIyB1bmlmZGVmIHdpbGwgZXhpdCAwIG9uIHN1Y2Nlc3MsIGFuZCB3aWxsIGV4aXQgMSB3aGVuIHRoZQorCSMgZmlsZSB3YXMgcHJvY2Vzc2VkIHN1Y2Nlc3NmdWxseSBidXQgbm8gY2hhbmdlcyB3ZXJlIG1hZGUsCisJIyBzbyBhYm9ydCBvbmx5IHdoZW4gaXQncyBoaWdoZXIgdGhhbiB0aGF0LgorCW15ICRlID0gJD8gPj4gODsKKwlpZiAoJGUgPiAxKSB7CisJCWRpZSAiJHRtcGZpbGU6ICQhXG4iOworCX0KIAl1bmxpbmsgJHRtcGZpbGU7CiB9CiBleGl0IDA7CmRpZmYgLS1naXQgYS9zY3JpcHRzL2tjb25maWcvY29uZi5jIGIvc2NyaXB0cy9rY29uZmlnL2NvbmYuYwppbmRleCA1NDU5YTM4Li42NTkzMjZjIDEwMDY0NAotLS0gYS9zY3JpcHRzL2tjb25maWcvY29uZi5jCisrKyBiL3NjcmlwdHMva2NvbmZpZy9jb25mLmMKQEAgLTUyOSw4ICs1MjksNiBAQAogCQl9CiAJCWJyZWFrOwogCWNhc2Ugc2F2ZWRlZmNvbmZpZzoKLQkJY29uZl9yZWFkKE5VTEwpOwotCQlicmVhazsKIAljYXNlIHNpbGVudG9sZGNvbmZpZzoKIAljYXNlIG9sZGFza2NvbmZpZzoKIAljYXNlIG9sZGNvbmZpZzoKZGlmZiAtLWdpdCBhL3NjcmlwdHMva2NvbmZpZy9jb25mZGF0YS5jIGIvc2NyaXB0cy9rY29uZmlnL2NvbmZkYXRhLmMKaW5kZXggOWRmODAxMS4uNjFjMzViZiAxMDA2NDQKLS0tIGEvc2NyaXB0cy9rY29uZmlnL2NvbmZkYXRhLmMKKysrIGIvc2NyaXB0cy9rY29uZmlnL2NvbmZkYXRhLmMKQEAgLTQ0MCwxMiArNDQwLDExIEBACiAJZnB1dHMoIlwiXG4iLCBvdXQpOwogfQogCi1zdGF0aWMgdm9pZCBjb25mX3dyaXRlX3N5bWJvbChzdHJ1Y3Qgc3ltYm9sICpzeW0sIGVudW0gc3ltYm9sX3R5cGUgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKm91dCwgYm9vbCB3cml0ZV9ubykKK3N0YXRpYyB2b2lkIGNvbmZfd3JpdGVfc3ltYm9sKHN0cnVjdCBzeW1ib2wgKnN5bSwgRklMRSAqb3V0LCBib29sIHdyaXRlX25vKQogewogCWNvbnN0IGNoYXIgKnN0cjsKIAotCXN3aXRjaCAodHlwZSkgeworCXN3aXRjaCAoc3ltLT50eXBlKSB7CiAJY2FzZSBTX0JPT0xFQU46CiAJY2FzZSBTX1RSSVNUQVRFOgogCQlzd2l0Y2ggKHN5bV9nZXRfdHJpc3RhdGVfdmFsdWUoc3ltKSkgewpAQCAtNTMyLDcgKzUzMSw3IEBACiAJCQkJCQlnb3RvIG5leHRfbWVudTsKIAkJCQl9CiAJCQl9Ci0JCQljb25mX3dyaXRlX3N5bWJvbChzeW0sIHN5bS0+dHlwZSwgb3V0LCB0cnVlKTsKKwkJCWNvbmZfd3JpdGVfc3ltYm9sKHN5bSwgb3V0LCB0cnVlKTsKIAkJfQogbmV4dF9tZW51OgogCQlpZiAobWVudS0+bGlzdCAhPSBOVUxMKSB7CkBAIC01NjEsNyArNTYwLDYgQEAKIAljb25zdCBjaGFyICpiYXNlbmFtZTsKIAljb25zdCBjaGFyICpzdHI7CiAJY2hhciBkaXJuYW1lW1BBVEhfTUFYKzFdLCB0bXBuYW1lW1BBVEhfTUFYKzFdLCBuZXduYW1lW1BBVEhfTUFYKzFdOwotCWVudW0gc3ltYm9sX3R5cGUgdHlwZTsKIAl0aW1lX3Qgbm93OwogCWludCB1c2VfdGltZXN0YW1wID0gMTsKIAljaGFyICplbnY7CkBAIC02MzMsMTQgKzYzMSw4IEBACiAJCQlpZiAoIShzeW0tPmZsYWdzICYgU1lNQk9MX1dSSVRFKSkKIAkJCQlnb3RvIG5leHQ7CiAJCQlzeW0tPmZsYWdzICY9IH5TWU1CT0xfV1JJVEU7Ci0JCQl0eXBlID0gc3ltLT50eXBlOwotCQkJaWYgKHR5cGUgPT0gU19UUklTVEFURSkgewotCQkJCXN5bV9jYWxjX3ZhbHVlKG1vZHVsZXNfc3ltKTsKLQkJCQlpZiAobW9kdWxlc19zeW0tPmN1cnIudHJpID09IG5vKQotCQkJCQl0eXBlID0gU19CT09MRUFOOwotCQkJfQogCQkJLyogV3JpdGUgY29uZmlnIHN5bWJvbCB0byBmaWxlICovCi0JCQljb25mX3dyaXRlX3N5bWJvbChzeW0sIHR5cGUsIG91dCwgdHJ1ZSk7CisJCQljb25mX3dyaXRlX3N5bWJvbChzeW0sIG91dCwgdHJ1ZSk7CiAJCX0KIAogbmV4dDoKQEAgLTgzMyw4ICs4MjUsNyBAQAogCQkgICAgICAgIiAqIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIEMgY29uZmlnOiBkb24ndCBlZGl0XG4iCiAJCSAgICAgICAiICogJXNcbiIKIAkJICAgICAgICIgKiAlcyIKLQkJICAgICAgICIgKi9cbiIKLQkJICAgICAgICIjZGVmaW5lIEFVVE9DT05GX0lOQ0xVREVEXG4iLAorCQkgICAgICAgIiAqL1xuIiwKIAkJICAgICAgIHJvb3RtZW51LnByb21wdC0+dGV4dCwgY3RpbWUoJm5vdykpOwogCiAJZm9yX2FsbF9zeW1ib2xzKGksIHN5bSkgewpAQCAtODQzLDcgKzgzNCw3IEBACiAJCQljb250aW51ZTsKIAogCQkvKiB3cml0ZSBzeW1ib2wgdG8gY29uZmlnIGZpbGUgKi8KLQkJY29uZl93cml0ZV9zeW1ib2woc3ltLCBzeW0tPnR5cGUsIG91dCwgZmFsc2UpOworCQljb25mX3dyaXRlX3N5bWJvbChzeW0sIG91dCwgZmFsc2UpOwogCiAJCS8qIHVwZGF0ZSBhdXRvY29uZiBhbmQgdHJpc3RhdGUgZmlsZXMgKi8KIAkJc3dpdGNoIChzeW0tPnR5cGUpIHsKQEAgLTk0Niw3ICs5MzcsNyBAQAogCWludCBjbnQsIGRlZjsKIAogCS8qCi0JICogSWYgY2hvaWNlIGlzIG1vZCB0aGVuIHdlIG1heSBoYXZlIG1vcmUgaXRlbXMgc2xlY3RlZAorCSAqIElmIGNob2ljZSBpcyBtb2QgdGhlbiB3ZSBtYXkgaGF2ZSBtb3JlIGl0ZW1zIHNlbGVjdGVkCiAJICogYW5kIGlmIG5vIHRoZW4gbm8tb25lLgogCSAqIEluIGJvdGggY2FzZXMgc3RvcC4KIAkgKi8KQEAgLTEwNDIsMTAgKzEwMzMsMTAgQEAKIAogCS8qCiAJICogV2UgaGF2ZSBkaWZmZXJlbnQgdHlwZSBvZiBjaG9pY2UgYmxvY2tzLgotCSAqIElmIGN1cnIudHJpIGVxdWFsIHRvIG1vZCB0aGVuIHdlIGNhbiBzZWxlY3Qgc2V2ZXJhbAorCSAqIElmIGN1cnIudHJpIGVxdWFscyB0byBtb2QgdGhlbiB3ZSBjYW4gc2VsZWN0IHNldmVyYWwKIAkgKiBjaG9pY2Ugc3ltYm9scyBpbiBvbmUgYmxvY2suCiAJICogSW4gdGhpcyBjYXNlIHdlIGRvIG5vdGhpbmcuCi0JICogSWYgY3Vyci50cmkgZXF1YWwgeWVzIHRoZW4gb25seSBvbmUgc3ltYm9sIGNhbiBiZQorCSAqIElmIGN1cnIudHJpIGVxdWFscyB5ZXMgdGhlbiBvbmx5IG9uZSBzeW1ib2wgY2FuIGJlCiAJICogc2VsZWN0ZWQgaW4gYSBjaG9pY2UgYmxvY2sgYW5kIHdlIHNldCBpdCB0byB5ZXMsCiAJICogYW5kIHRoZSByZXN0IHRvIG5vLgogCSAqLwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnL2V4cHIuYyBiL3NjcmlwdHMva2NvbmZpZy9leHByLmMKaW5kZXggMzMwZTdjMC4uMDAxMDAzNCAxMDA2NDQKLS0tIGEvc2NyaXB0cy9rY29uZmlnL2V4cHIuYworKysgYi9zY3JpcHRzL2tjb25maWcvZXhwci5jCkBAIC02NCw3ICs2NCw3IEBACiAJcmV0dXJuIGUyID8gZXhwcl9hbGxvY190d28oRV9PUiwgZTEsIGUyKSA6IGUxOwogfQogCi1zdHJ1Y3QgZXhwciAqZXhwcl9jb3B5KHN0cnVjdCBleHByICpvcmcpCitzdHJ1Y3QgZXhwciAqZXhwcl9jb3B5KGNvbnN0IHN0cnVjdCBleHByICpvcmcpCiB7CiAJc3RydWN0IGV4cHIgKmU7CiAKQEAgLTEwMTMsNiArMTAxMyw0OCBAQAogI2VuZGlmCiB9CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGV4cHIgKgorZXhwcl9nZXRfbGVmdG1vc3Rfc3ltYm9sKGNvbnN0IHN0cnVjdCBleHByICplKQoreworCisJaWYgKGUgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwl3aGlsZSAoZS0+dHlwZSAhPSBFX1NZTUJPTCkKKwkJZSA9IGUtPmxlZnQuZXhwcjsKKworCXJldHVybiBleHByX2NvcHkoZSk7Cit9CisKKy8qCisgKiBHaXZlbiBleHByZXNzaW9uIGBlMScgYW5kIGBlMicsIHJldHVybnMgdGhlIGxlYWYgb2YgdGhlIGxvbmdlc3QKKyAqIHN1Yi1leHByZXNzaW9uIG9mIGBlMScgbm90IGNvbnRhaW5pbmcgJ2UyLgorICovCitzdHJ1Y3QgZXhwciAqZXhwcl9zaW1wbGlmeV91bm1ldF9kZXAoc3RydWN0IGV4cHIgKmUxLCBzdHJ1Y3QgZXhwciAqZTIpCit7CisJc3RydWN0IGV4cHIgKnJldDsKKworCXN3aXRjaCAoZTEtPnR5cGUpIHsKKwljYXNlIEVfT1I6CisJCXJldHVybiBleHByX2FsbG9jX2FuZCgKKwkJICAgIGV4cHJfc2ltcGxpZnlfdW5tZXRfZGVwKGUxLT5sZWZ0LmV4cHIsIGUyKSwKKwkJICAgIGV4cHJfc2ltcGxpZnlfdW5tZXRfZGVwKGUxLT5yaWdodC5leHByLCBlMikpOworCWNhc2UgRV9BTkQ6IHsKKwkJc3RydWN0IGV4cHIgKmU7CisJCWUgPSBleHByX2FsbG9jX2FuZChleHByX2NvcHkoZTEpLCBleHByX2NvcHkoZTIpKTsKKwkJZSA9IGV4cHJfZWxpbWluYXRlX2R1cHMoZSk7CisJCXJldCA9ICghZXhwcl9lcShlLCBlMSkpID8gZTEgOiBOVUxMOworCQlleHByX2ZyZWUoZSk7CisJCWJyZWFrOworCQl9CisJZGVmYXVsdDoKKwkJcmV0ID0gZTE7CisJCWJyZWFrOworCX0KKworCXJldHVybiBleHByX2dldF9sZWZ0bW9zdF9zeW1ib2wocmV0KTsKK30KKwogdm9pZCBleHByX3ByaW50KHN0cnVjdCBleHByICplLCB2b2lkICgqZm4pKHZvaWQgKiwgc3RydWN0IHN5bWJvbCAqLCBjb25zdCBjaGFyICopLCB2b2lkICpkYXRhLCBpbnQgcHJldnRva2VuKQogewogCWlmICghZSkgewpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnL2V4cHIuaCBiL3NjcmlwdHMva2NvbmZpZy9leHByLmgKaW5kZXggZTU3ODI2Yy4uM2QyMzhkYiAxMDA2NDQKLS0tIGEvc2NyaXB0cy9rY29uZmlnL2V4cHIuaAorKysgYi9zY3JpcHRzL2tjb25maWcvZXhwci5oCkBAIC0xOTIsNyArMTkyLDcgQEAKIHN0cnVjdCBleHByICpleHByX2FsbG9jX2NvbXAoZW51bSBleHByX3R5cGUgdHlwZSwgc3RydWN0IHN5bWJvbCAqczEsIHN0cnVjdCBzeW1ib2wgKnMyKTsKIHN0cnVjdCBleHByICpleHByX2FsbG9jX2FuZChzdHJ1Y3QgZXhwciAqZTEsIHN0cnVjdCBleHByICplMik7CiBzdHJ1Y3QgZXhwciAqZXhwcl9hbGxvY19vcihzdHJ1Y3QgZXhwciAqZTEsIHN0cnVjdCBleHByICplMik7Ci1zdHJ1Y3QgZXhwciAqZXhwcl9jb3B5KHN0cnVjdCBleHByICpvcmcpOworc3RydWN0IGV4cHIgKmV4cHJfY29weShjb25zdCBzdHJ1Y3QgZXhwciAqb3JnKTsKIHZvaWQgZXhwcl9mcmVlKHN0cnVjdCBleHByICplKTsKIGludCBleHByX2VxKHN0cnVjdCBleHByICplMSwgc3RydWN0IGV4cHIgKmUyKTsKIHZvaWQgZXhwcl9lbGltaW5hdGVfZXEoc3RydWN0IGV4cHIgKiplcDEsIHN0cnVjdCBleHByICoqZXAyKTsKQEAgLTIwNyw2ICsyMDcsNyBAQAogc3RydWN0IGV4cHIgKmV4cHJfZXh0cmFjdF9lcV9vcihzdHJ1Y3QgZXhwciAqKmVwMSwgc3RydWN0IGV4cHIgKiplcDIpOwogdm9pZCBleHByX2V4dHJhY3RfZXEoZW51bSBleHByX3R5cGUgdHlwZSwgc3RydWN0IGV4cHIgKiplcCwgc3RydWN0IGV4cHIgKiplcDEsIHN0cnVjdCBleHByICoqZXAyKTsKIHN0cnVjdCBleHByICpleHByX3RyYW5zX2NvbXBhcmUoc3RydWN0IGV4cHIgKmUsIGVudW0gZXhwcl90eXBlIHR5cGUsIHN0cnVjdCBzeW1ib2wgKnN5bSk7CitzdHJ1Y3QgZXhwciAqZXhwcl9zaW1wbGlmeV91bm1ldF9kZXAoc3RydWN0IGV4cHIgKmUxLCBzdHJ1Y3QgZXhwciAqZTIpOwogCiB2b2lkIGV4cHJfZnByaW50KHN0cnVjdCBleHByICplLCBGSUxFICpvdXQpOwogc3RydWN0IGdzdHI7IC8qIGZvcndhcmQgKi8KZGlmZiAtLWdpdCBhL3NjcmlwdHMva2NvbmZpZy9sa2MuaCBiL3NjcmlwdHMva2NvbmZpZy9sa2MuaAppbmRleCAzZjcyNDBkLi5mZWJmMGM5IDEwMDY0NAotLS0gYS9zY3JpcHRzL2tjb25maWcvbGtjLmgKKysrIGIvc2NyaXB0cy9rY29uZmlnL2xrYy5oCkBAIC0xNCw2ICsxNCw3IEBACiBzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmdldHRleHQoY29uc3QgY2hhciAqdHh0KSB7IHJldHVybiB0eHQ7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCB0ZXh0ZG9tYWluKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUpIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQgYmluZHRleHRkb21haW4oY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqZGlyKSB7fQorc3RhdGljIGlubGluZSBjaGFyICpiaW5kX3RleHRkb21haW5fY29kZXNldChjb25zdCBjaGFyICpkbiwgY2hhciAqYykgeyByZXR1cm4gYzsgfQogI2VuZGlmCiAKICNpZmRlZiBfX2NwbHVzcGx1cwpAQCAtNjcsMTAgKzY4LDEyIEBACiAJZW51bSBzeW1ib2xfdHlwZSBzdHlwZTsKIH07CiAKKyNpZmRlZiBZWURFQlVHCitleHRlcm4gaW50IHpjb25mZGVidWc7CisjZW5kaWYKKwogaW50IHpjb25mcGFyc2Uodm9pZCk7CiB2b2lkIHpjb25mZHVtcChGSUxFICpvdXQpOwotCi1leHRlcm4gaW50IHpjb25mZGVidWc7CiB2b2lkIHpjb25mX3N0YXJ0aGVscCh2b2lkKTsKIEZJTEUgKnpjb25mX2ZvcGVuKGNvbnN0IGNoYXIgKm5hbWUpOwogdm9pZCB6Y29uZl9pbml0c2Nhbihjb25zdCBjaGFyICpuYW1lKTsKZGlmZiAtLWdpdCBhL3NjcmlwdHMva2NvbmZpZy9tZW51LmMgYi9zY3JpcHRzL2tjb25maWcvbWVudS5jCmluZGV4IDVmNzdkY2IuLjVmZGYxMGQgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy9tZW51LmMKKysrIGIvc2NyaXB0cy9rY29uZmlnL21lbnUuYwpAQCAtMjAzLDcgKzIwMyw3IEBACiAJfQogfQogCi1zdGF0aWMgaW50IG1lbnVfcmFuZ2VfdmFsaWRfc3ltKHN0cnVjdCBzeW1ib2wgKnN5bSwgc3RydWN0IHN5bWJvbCAqc3ltMikKK3N0YXRpYyBpbnQgbWVudV92YWxpZGF0ZV9udW1iZXIoc3RydWN0IHN5bWJvbCAqc3ltLCBzdHJ1Y3Qgc3ltYm9sICpzeW0yKQogewogCXJldHVybiBzeW0yLT50eXBlID09IFNfSU5UIHx8IHN5bTItPnR5cGUgPT0gU19IRVggfHwKIAkgICAgICAgKHN5bTItPnR5cGUgPT0gU19VTktOT1dOICYmIHN5bV9zdHJpbmdfdmFsaWQoc3ltLCBzeW0yLT5uYW1lKSk7CkBAIC0yMjEsNiArMjIxLDE1IEBACiAJCQkJcHJvcF93YXJuKHByb3AsCiAJCQkJICAgICJkZWZhdWx0IGZvciBjb25maWcgc3ltYm9sICclcyciCiAJCQkJICAgICIgbXVzdCBiZSBhIHNpbmdsZSBzeW1ib2wiLCBzeW0tPm5hbWUpOworCQkJaWYgKHByb3AtPmV4cHItPnR5cGUgIT0gRV9TWU1CT0wpCisJCQkJYnJlYWs7CisJCQlzeW0yID0gcHJvcF9nZXRfc3ltYm9sKHByb3ApOworCQkJaWYgKHN5bS0+dHlwZSA9PSBTX0hFWCB8fCBzeW0tPnR5cGUgPT0gU19JTlQpIHsKKwkJCQlpZiAoIW1lbnVfdmFsaWRhdGVfbnVtYmVyKHN5bSwgc3ltMikpCisJCQkJCXByb3Bfd2Fybihwcm9wLAorCQkJCQkgICAgIiclcyc6IG51bWJlciBpcyBpbnZhbGlkIiwKKwkJCQkJICAgIHN5bS0+bmFtZSk7CisJCQl9CiAJCQlicmVhazsKIAkJY2FzZSBQX1NFTEVDVDoKIAkJCXN5bTIgPSBwcm9wX2dldF9zeW1ib2wocHJvcCk7CkBAIC0yNDAsOCArMjQ5LDggQEAKIAkJCWlmIChzeW0tPnR5cGUgIT0gU19JTlQgJiYgc3ltLT50eXBlICE9IFNfSEVYKQogCQkJCXByb3Bfd2Fybihwcm9wLCAicmFuZ2UgaXMgb25seSBhbGxvd2VkICIKIAkJCQkgICAgICAgICAgICAgICAgImZvciBpbnQgb3IgaGV4IHN5bWJvbHMiKTsKLQkJCWlmICghbWVudV9yYW5nZV92YWxpZF9zeW0oc3ltLCBwcm9wLT5leHByLT5sZWZ0LnN5bSkgfHwKLQkJCSAgICAhbWVudV9yYW5nZV92YWxpZF9zeW0oc3ltLCBwcm9wLT5leHByLT5yaWdodC5zeW0pKQorCQkJaWYgKCFtZW51X3ZhbGlkYXRlX251bWJlcihzeW0sIHByb3AtPmV4cHItPmxlZnQuc3ltKSB8fAorCQkJICAgICFtZW51X3ZhbGlkYXRlX251bWJlcihzeW0sIHByb3AtPmV4cHItPnJpZ2h0LnN5bSkpCiAJCQkJcHJvcF93YXJuKHByb3AsICJyYW5nZSBpcyBpbnZhbGlkIik7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL3NjcmlwdHMva2NvbmZpZy9uY29uZi5jIGIvc2NyaXB0cy9rY29uZmlnL25jb25mLmMKaW5kZXggMjcyYTk4Ny4uZGI1NjM3NyAxMDA2NDQKLS0tIGEvc2NyaXB0cy9rY29uZmlnL25jb25mLmMKKysrIGIvc2NyaXB0cy9rY29uZmlnL25jb25mLmMKQEAgLTI0OCw3ICsyNDgsNyBAQAogIk9ubHkgcmVsZXZhbnQgbGluZXMgYXJlIHNob3duLlxuIgogIlxuXG4iCiAiU2VhcmNoIGV4YW1wbGVzOlxuIgotIkV4YW1wbGVzOiBVU0IgICA9ID4gZmluZCBhbGwgc3ltYm9scyBjb250YWluaW5nIFVTQlxuIgorIkV4YW1wbGVzOiBVU0IgID0+IGZpbmQgYWxsIHN5bWJvbHMgY29udGFpbmluZyBVU0JcbiIKICIgICAgICAgICAgXlVTQiA9PiBmaW5kIGFsbCBzeW1ib2xzIHN0YXJ0aW5nIHdpdGggVVNCXG4iCiAiICAgICAgICAgIFVTQiQgPT4gZmluZCBhbGwgc3ltYm9scyBlbmRpbmcgd2l0aCBVU0JcbiIKICJcbiIpOwpAQCAtMTI2Niw5ICsxMjY2LDEzIEBACiAJCQlpZiAoY2hpbGQtPnN5bSA9PSBzeW1fZ2V0X2Nob2ljZV92YWx1ZShtZW51LT5zeW0pKQogCQkJCWl0ZW1fbWFrZShjaGlsZCwgJzonLCAiPFg+ICVzIiwKIAkJCQkJCV8obWVudV9nZXRfcHJvbXB0KGNoaWxkKSkpOwotCQkJZWxzZQorCQkJZWxzZSBpZiAoY2hpbGQtPnN5bSkKIAkJCQlpdGVtX21ha2UoY2hpbGQsICc6JywgIiAgICAlcyIsCiAJCQkJCQlfKG1lbnVfZ2V0X3Byb21wdChjaGlsZCkpKTsKKwkJCWVsc2UKKwkJCQlpdGVtX21ha2UoY2hpbGQsICc6JywgIioqKiAlcyAqKioiLAorCQkJCQkJXyhtZW51X2dldF9wcm9tcHQoY2hpbGQpKSk7CisKIAkJCWlmIChjaGlsZC0+c3ltID09IGFjdGl2ZSl7CiAJCQkJbGFzdF90b3Bfcm93ID0gdG9wX3JvdyhjdXJzZXNfbWVudSk7CiAJCQkJc2VsZWN0ZWRfaW5kZXggPSBpOwpAQCAtMTMzNCw3ICsxMzM4LDcgQEAKIAkJCWJyZWFrOwogCiAJCWNoaWxkID0gaXRlbV9kYXRhKCk7Ci0JCWlmICghY2hpbGQgfHwgIW1lbnVfaXNfdmlzaWJsZShjaGlsZCkpCisJCWlmICghY2hpbGQgfHwgIW1lbnVfaXNfdmlzaWJsZShjaGlsZCkgfHwgIWNoaWxkLT5zeW0pCiAJCQljb250aW51ZTsKIAkJc3dpdGNoIChyZXMpIHsKIAkJY2FzZSAnICc6CmRpZmYgLS1naXQgYS9zY3JpcHRzL2tjb25maWcvc3ltYm9sLmMgYi9zY3JpcHRzL2tjb25maWcvc3ltYm9sLmMKaW5kZXggYWY2ZTlmMy4uYTc5NmM5NSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9rY29uZmlnL3N5bWJvbC5jCisrKyBiL3NjcmlwdHMva2NvbmZpZy9zeW1ib2wuYwpAQCAtMzUxLDEyICszNTEsMTYgQEAKIAkJCX0KIAkJY2FsY19uZXd2YWw6CiAJCQlpZiAoc3ltLT5kaXJfZGVwLnRyaSA9PSBubyAmJiBzeW0tPnJldl9kZXAudHJpICE9IG5vKSB7CisJCQkJc3RydWN0IGV4cHIgKmU7CisJCQkJZSA9IGV4cHJfc2ltcGxpZnlfdW5tZXRfZGVwKHN5bS0+cmV2X2RlcC5leHByLAorCQkJCSAgICBzeW0tPmRpcl9kZXAuZXhwcik7CiAJCQkJZnByaW50ZihzdGRlcnIsICJ3YXJuaW5nOiAoIik7Ci0JCQkJZXhwcl9mcHJpbnQoc3ltLT5yZXZfZGVwLmV4cHIsIHN0ZGVycik7CisJCQkJZXhwcl9mcHJpbnQoZSwgc3RkZXJyKTsKIAkJCQlmcHJpbnRmKHN0ZGVyciwgIikgc2VsZWN0cyAlcyB3aGljaCBoYXMgdW5tZXQgZGlyZWN0IGRlcGVuZGVuY2llcyAoIiwKIAkJCQkJc3ltLT5uYW1lKTsKIAkJCQlleHByX2ZwcmludChzeW0tPmRpcl9kZXAuZXhwciwgc3RkZXJyKTsKIAkJCQlmcHJpbnRmKHN0ZGVyciwgIilcbiIpOworCQkJCWV4cHJfZnJlZShlKTsKIAkJCX0KIAkJCW5ld3ZhbC50cmkgPSBFWFBSX09SKG5ld3ZhbC50cmksIHN5bS0+cmV2X2RlcC50cmkpOwogCQl9CkBAIC02ODYsNyArNjkwLDcgQEAKIAkJc3dpdGNoIChzeW0tPnR5cGUpIHsKIAkJY2FzZSBTX0JPT0xFQU46CiAJCWNhc2UgU19UUklTVEFURToKLQkJCS8qIFRoZSB2aXNpYmlsaXR5IGltYXkgbGltaXQgdGhlIHZhbHVlIGZyb20geWVzID0+IG1vZCAqLworCQkJLyogVGhlIHZpc2liaWxpdHkgbWF5IGxpbWl0IHRoZSB2YWx1ZSBmcm9tIHllcyA9PiBtb2QgKi8KIAkJCXZhbCA9IEVYUFJfQU5EKGV4cHJfY2FsY192YWx1ZShwcm9wLT5leHByKSwgcHJvcC0+dmlzaWJsZS50cmkpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9zY3JpcHRzL2tlcm5lbC1kb2MgYi9zY3JpcHRzL2tlcm5lbC1kb2MKaW5kZXggMzk1ODBhNS4uOWY4NTAxMiAxMDA3NTUKLS0tIGEvc2NyaXB0cy9rZXJuZWwtZG9jCisrKyBiL3NjcmlwdHMva2VybmVsLWRvYwpAQCAtMTU1LDYgKzE1NSw4IEBACiAjICdAcGFyYW1ldGVyJyAtIG5hbWUgb2YgYSBwYXJhbWV0ZXIKICMgJyVDT05TVCcgLSBuYW1lIG9mIGEgY29uc3RhbnQuCiAKKyMjIGluaXQgbG90cyBvZiBkYXRhCisKIG15ICRlcnJvcnMgPSAwOwogbXkgJHdhcm5pbmdzID0gMDsKIG15ICRhbm9uX3N0cnVjdF91bmlvbiA9IDA7CkBAIC0yMTgsMjEgKzIyMCwxNCBAQAogCQkJJHR5cGVfcGFyYW0sICJcJDEiICk7CiBteSAkYmxhbmtsaW5lX2xpc3QgPSAiIjsKIAotc3ViIHVzYWdlIHsKLSAgICBwcmludCAiVXNhZ2U6ICQwIFsgLXYgXSBbIC1kb2Nib29rIHwgLWh0bWwgfCAtdGV4dCB8IC1tYW4gfCAtbGlzdCBdXG4iOwotICAgIHByaW50ICIgICAgICAgICBbIC1uby1kb2Mtc2VjdGlvbnMgXVxuIjsKLSAgICBwcmludCAiICAgICAgICAgWyAtZnVuY3Rpb24gZnVuY25hbWUgWyAtZnVuY3Rpb24gZnVuY25hbWUgLi4uXSBdXG4iOwotICAgIHByaW50ICIgICAgICAgICBbIC1ub2Z1bmN0aW9uIGZ1bmNuYW1lIFsgLW5vZnVuY3Rpb24gZnVuY25hbWUgLi4uXSBdXG4iOwotICAgIHByaW50ICIgICAgICAgICBjIHNvdXJjZSBmaWxlKHMpID4gb3V0cHV0ZmlsZVxuIjsKLSAgICBwcmludCAiICAgICAgICAgLXYgOiB2ZXJib3NlIG91dHB1dCwgbW9yZSB3YXJuaW5ncyAmIG90aGVyIGluZm8gbGlzdGVkXG4iOwotICAgIGV4aXQgMTsKLX0KLQogIyByZWFkIGFyZ3VtZW50cwogaWYgKCQjQVJHViA9PSAtMSkgewogICAgIHVzYWdlKCk7CiB9CiAKK215ICRrZXJuZWx2ZXJzaW9uOworbXkgJGRvaGlnaGxpZ2h0ID0gIiI7CisKIG15ICR2ZXJib3NlID0gMDsKIG15ICRvdXRwdXRfbW9kZSA9ICJtYW4iOwogbXkgJG5vX2RvY19zZWN0aW9ucyA9IDA7CkBAIC0yNDUsNyArMjQwLDcgQEAKIAkJJ05vdmVtYmVyJywgJ0RlY2VtYmVyJylbKGxvY2FsdGltZSlbNF1dIC4KICAgIiAiIC4gKChsb2NhbHRpbWUpWzVdKzE5MDApOwogCi0jIEVzc2VudGlhbGx5IHRoZXNlIGFyZSBnbG9iYWxzCisjIEVzc2VudGlhbGx5IHRoZXNlIGFyZSBnbG9iYWxzLgogIyBUaGV5IHByb2JhYmx5IHdhbnQgdG8gYmUgdGlkaWVkIHVwLCBtYWRlIG1vcmUgbG9jYWxpc2VkIG9yIHNvbWV0aGluZy4KICMgQ0FWRUFUIEVNUFRPUiEgIFNvbWUgb2YgdGhlIG90aGVycyBJIGxvY2FsaXNlZCBtYXkgbm90IHdhbnQgdG8gYmUsIHdoaWNoCiAjIGNvdWxkIGNhdXNlICJ1c2Ugb2YgdW5kZWZpbmVkIHZhbHVlIiBvciBvdGhlciBidWdzLgpAQCAtMzUzLDYgKzM0OCwxOCBAQAogICAgIH0KIH0KIAorIyBjb250aW51ZSBleGVjdXRpb24gbmVhciBFT0Y7CisKK3N1YiB1c2FnZSB7CisgICAgcHJpbnQgIlVzYWdlOiAkMCBbIC12IF0gWyAtZG9jYm9vayB8IC1odG1sIHwgLXRleHQgfCAtbWFuIHwgLWxpc3QgXVxuIjsKKyAgICBwcmludCAiICAgICAgICAgWyAtbm8tZG9jLXNlY3Rpb25zIF1cbiI7CisgICAgcHJpbnQgIiAgICAgICAgIFsgLWZ1bmN0aW9uIGZ1bmNuYW1lIFsgLWZ1bmN0aW9uIGZ1bmNuYW1lIC4uLl0gXVxuIjsKKyAgICBwcmludCAiICAgICAgICAgWyAtbm9mdW5jdGlvbiBmdW5jbmFtZSBbIC1ub2Z1bmN0aW9uIGZ1bmNuYW1lIC4uLl0gXVxuIjsKKyAgICBwcmludCAiICAgICAgICAgYyBzb3VyY2UgZmlsZShzKSA+IG91dHB1dGZpbGVcbiI7CisgICAgcHJpbnQgIiAgICAgICAgIC12IDogdmVyYm9zZSBvdXRwdXQsIG1vcmUgd2FybmluZ3MgJiBvdGhlciBpbmZvIGxpc3RlZFxuIjsKKyAgICBleGl0IDE7Cit9CisKICMgZ2V0IGtlcm5lbCB2ZXJzaW9uIGZyb20gZW52CiBzdWIgZ2V0X2tlcm5lbF92ZXJzaW9uKCkgewogICAgIG15ICR2ZXJzaW9uID0gJ3Vua25vd24ga2VybmVsIHZlcnNpb24nOwpAQCAtMzYyLDE1ICszNjksNiBAQAogICAgIH0KICAgICByZXR1cm4gJHZlcnNpb247CiB9Ci1teSAka2VybmVsdmVyc2lvbiA9IGdldF9rZXJuZWxfdmVyc2lvbigpOwotCi0jIGdlbmVyYXRlIGEgc2VxdWVuY2Ugb2YgY29kZSB0aGF0IHdpbGwgc3BsaWNlIGluIGhpZ2hsaWdodGluZyBpbmZvcm1hdGlvbgotIyB1c2luZyB0aGUgcy8vIG9wZXJhdG9yLgotbXkgJGRvaGlnaGxpZ2h0ID0gIiI7Ci1mb3JlYWNoIG15ICRwYXR0ZXJuIChrZXlzICVoaWdobGlnaHRzKSB7Ci0jICAgcHJpbnQgU1RERVJSICJzY2FubmluZyBwYXR0ZXJuOiRwYXR0ZXJuLCBoaWdobGlnaHQ6KCRoaWdobGlnaHRzeyRwYXR0ZXJufSlcbiI7Ci0gICAgJGRvaGlnaGxpZ2h0IC49ICAiXCRjb250ZW50cyA9fiBzOiRwYXR0ZXJuOiRoaWdobGlnaHRzeyRwYXR0ZXJufTpncztcbiI7Ci19CiAKICMjCiAjIGR1bXBzIHNlY3Rpb24gY29udGVudHMgdG8gYXJyYXlzL2hhc2hlcyBpbnRlbmRlZCBmb3IgdGhhdCBwdXJwb3NlLgpAQCAtMTg1MSwzNCArMTg0OSw2IEBACiAJCSAgICAgICB9KTsKIH0KIAotc3ViIHByb2Nlc3NfZmlsZSgkKTsKLQotIyBSZWFkIHRoZSBmaWxlIHRoYXQgbWFwcyByZWxhdGl2ZSBuYW1lcyB0byBhYnNvbHV0ZSBuYW1lcyBmb3IKLSMgc2VwYXJhdGUgc291cmNlIGFuZCBvYmplY3QgZGlyZWN0b3JpZXMgYW5kIGZvciBzaGFkb3cgdHJlZXMuCi1pZiAob3BlbihTT1VSQ0VfTUFQLCAiPC50bXBfZmlsZWxpc3QudHh0IikpIHsKLQlteSAoJHJlbG5hbWUsICRhYnNuYW1lKTsKLQl3aGlsZSg8U09VUkNFX01BUD4pIHsKLQkJY2hvcCgpOwotCQkoJHJlbG5hbWUsICRhYnNuYW1lKSA9IChzcGxpdCgpKVswLi4xXTsKLQkJJHJlbG5hbWUgPX4gczpeLys6OjsKLQkJJHNvdXJjZV9tYXB7JHJlbG5hbWV9ID0gJGFic25hbWU7Ci0JfQotCWNsb3NlKFNPVVJDRV9NQVApOwotfQotCi1mb3JlYWNoIChAQVJHVikgewotICAgIGNob21wOwotICAgIHByb2Nlc3NfZmlsZSgkXyk7Ci19Ci1pZiAoJHZlcmJvc2UgJiYgJGVycm9ycykgewotICBwcmludCBTVERFUlIgIiRlcnJvcnMgZXJyb3JzXG4iOwotfQotaWYgKCR2ZXJib3NlICYmICR3YXJuaW5ncykgewotICBwcmludCBTVERFUlIgIiR3YXJuaW5ncyB3YXJuaW5nc1xuIjsKLX0KLQotZXhpdCgkZXJyb3JzKTsKLQogc3ViIHJlc2V0X3N0YXRlIHsKICAgICAkZnVuY3Rpb24gPSAiIjsKICAgICAlY29uc3RhbnRzID0gKCk7CkBAIC0yMjg1LDMgKzIyNTUsMzkgQEAKIAl9CiAgICAgfQogfQorCisKKyRrZXJuZWx2ZXJzaW9uID0gZ2V0X2tlcm5lbF92ZXJzaW9uKCk7CisKKyMgZ2VuZXJhdGUgYSBzZXF1ZW5jZSBvZiBjb2RlIHRoYXQgd2lsbCBzcGxpY2UgaW4gaGlnaGxpZ2h0aW5nIGluZm9ybWF0aW9uCisjIHVzaW5nIHRoZSBzLy8gb3BlcmF0b3IuCitmb3JlYWNoIG15ICRwYXR0ZXJuIChrZXlzICVoaWdobGlnaHRzKSB7CisjICAgcHJpbnQgU1RERVJSICJzY2FubmluZyBwYXR0ZXJuOiRwYXR0ZXJuLCBoaWdobGlnaHQ6KCRoaWdobGlnaHRzeyRwYXR0ZXJufSlcbiI7CisgICAgJGRvaGlnaGxpZ2h0IC49ICAiXCRjb250ZW50cyA9fiBzOiRwYXR0ZXJuOiRoaWdobGlnaHRzeyRwYXR0ZXJufTpncztcbiI7Cit9CisKKyMgUmVhZCB0aGUgZmlsZSB0aGF0IG1hcHMgcmVsYXRpdmUgbmFtZXMgdG8gYWJzb2x1dGUgbmFtZXMgZm9yCisjIHNlcGFyYXRlIHNvdXJjZSBhbmQgb2JqZWN0IGRpcmVjdG9yaWVzIGFuZCBmb3Igc2hhZG93IHRyZWVzLgoraWYgKG9wZW4oU09VUkNFX01BUCwgIjwudG1wX2ZpbGVsaXN0LnR4dCIpKSB7CisJbXkgKCRyZWxuYW1lLCAkYWJzbmFtZSk7CisJd2hpbGUoPFNPVVJDRV9NQVA+KSB7CisJCWNob3AoKTsKKwkJKCRyZWxuYW1lLCAkYWJzbmFtZSkgPSAoc3BsaXQoKSlbMC4uMV07CisJCSRyZWxuYW1lID1+IHM6Xi8rOjo7CisJCSRzb3VyY2VfbWFweyRyZWxuYW1lfSA9ICRhYnNuYW1lOworCX0KKwljbG9zZShTT1VSQ0VfTUFQKTsKK30KKworZm9yZWFjaCAoQEFSR1YpIHsKKyAgICBjaG9tcDsKKyAgICBwcm9jZXNzX2ZpbGUoJF8pOworfQoraWYgKCR2ZXJib3NlICYmICRlcnJvcnMpIHsKKyAgcHJpbnQgU1RERVJSICIkZXJyb3JzIGVycm9yc1xuIjsKK30KK2lmICgkdmVyYm9zZSAmJiAkd2FybmluZ3MpIHsKKyAgcHJpbnQgU1RERVJSICIkd2FybmluZ3Mgd2FybmluZ3NcbiI7Cit9CisKK2V4aXQoJGVycm9ycyk7CmRpZmYgLS1naXQgYS9zY3JpcHRzL21rdWJvb3Quc2ggYi9zY3JpcHRzL21rdWJvb3Quc2gKaW5kZXggMmUzZDNjZC4uNDQ2NzM5YyAxMDA3NTUKLS0tIGEvc2NyaXB0cy9ta3Vib290LnNoCisrKyBiL3NjcmlwdHMvbWt1Ym9vdC5zaApAQCAtMTEsNyArMTEsNyBAQAogCWlmIFsgLXogIiR7TUtJTUFHRX0iIF07IHRoZW4KIAkJIyBEb2Vzbid0IGV4aXN0CiAJCWVjaG8gJyJta2ltYWdlIiBjb21tYW5kIG5vdCBmb3VuZCAtIFUtQm9vdCBpbWFnZXMgd2lsbCBub3QgYmUgYnVpbHQnID4mMgotCQlleGl0IDA7CisJCWV4aXQgMTsKIAlmaQogZmkKIApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9tb2QvbW9kcG9zdC5jIGIvc2NyaXB0cy9tb2QvbW9kcG9zdC5jCmluZGV4IDMzMTIyY2EuLjk3ZDIyNTkgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvbW9kL21vZHBvc3QuYworKysgYi9zY3JpcHRzL21vZC9tb2Rwb3N0LmMKQEAgLTc5MCw2ICs3OTAsNyBAQAogewogCSIuY29tbWVudCoiLAogCSIuZGVidWcqIiwKKwkiLnpkZWJ1ZyoiLAkJLyogQ29tcHJlc3NlZCBkZWJ1ZyBzZWN0aW9ucy4gKi8KIAkiLkdDQy1jb21tYW5kLWxpbmUiLAkvKiBtbjEwMzAwICovCiAJIi5tZGVidWcqIiwgICAgICAgIC8qIGFscGhhLCBzY29yZSwgbWlwcyBldGMuICovCiAJIi5wZHIiLCAgICAgICAgICAgIC8qIGFscGhhLCBzY29yZSwgbWlwcyBldGMuICovCkBAIC0xNDQxLDcgKzE0NDIsNyBAQAogCWludCBzZWN0aW9uID0gc2huZHgyc2VjaW5kZXgoc2VjaGRyLT5zaF9pbmZvKTsKIAogCXJldHVybiAodm9pZCAqKWVsZi0+aGRyICsgc2VjaGRyc1tzZWN0aW9uXS5zaF9vZmZzZXQgKwotCQlyLT5yX29mZnNldCAtIHNlY2hkcnNbc2VjdGlvbl0uc2hfYWRkcjsKKwkJci0+cl9vZmZzZXQ7CiB9CiAKIHN0YXRpYyBpbnQgYWRkZW5kXzM4Nl9yZWwoc3RydWN0IGVsZl9pbmZvICplbGYsIEVsZl9TaGRyICpzZWNoZHIsIEVsZl9SZWxhICpyKQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9wYWNrYWdlL2J1aWxkZGViIGIvc2NyaXB0cy9wYWNrYWdlL2J1aWxkZGViCmluZGV4IDQ5Yjc0ZTEuLmIwYjIzNTcgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvcGFja2FnZS9idWlsZGRlYgorKysgYi9zY3JpcHRzL3BhY2thZ2UvYnVpbGRkZWIKQEAgLTI1LDggKzI1LDQ0IEBACiAJY2hvd24gLVIgcm9vdDpyb290ICIkcGRpciIKIAljaG1vZCAtUiBnby13ICIkcGRpciIKIAorCSMgQXR0ZW1wdCB0byBmaW5kIHRoZSBjb3JyZWN0IERlYmlhbiBhcmNoaXRlY3R1cmUKKwlsb2NhbCBmb3JjZWFyY2g9IiIgZGViYXJjaD0iIgorCWNhc2UgIiRVVFNfTUFDSElORSIgaW4KKwlpMzg2fGlhNjR8YWxwaGEpCisJCWRlYmFyY2g9IiRVVFNfTUFDSElORSIgOzsKKwl4ODZfNjQpCisJCWRlYmFyY2g9YW1kNjQgOzsKKwlzcGFyYyopCisJCWRlYmFyY2g9c3BhcmMgOzsKKwlzMzkwKikKKwkJZGViYXJjaD1zMzkwIDs7CisJcHBjKikKKwkJZGViYXJjaD1wb3dlcnBjIDs7CisJcGFyaXNjKikKKwkJZGViYXJjaD1ocHBhIDs7CisJbWlwcyopCisJCWRlYmFyY2g9bWlwcyQoZ3JlcCAtcSBDUFVfTElUVExFX0VORElBTj15IC5jb25maWcgJiYgZWNobyBlbCkgOzsKKwlhcm0qKQorCQlkZWJhcmNoPWFybSQoZ3JlcCAtcSBDT05GSUdfQUVBQkk9eSAuY29uZmlnICYmIGVjaG8gZWwpIDs7CisJKikKKwkJZWNobyAiIiA+JjIKKwkJZWNobyAiKiogKiogKiogIFdBUk5JTkcgICoqICoqICoqIiA+JjIKKwkJZWNobyAiIiA+JjIKKwkJZWNobyAiWW91ciBhcmNoaXRlY3R1cmUgZG9lc24ndCBoYXZlIGl0J3MgZXF1aXZhbGVudCIgPiYyCisJCWVjaG8gIkRlYmlhbiB1c2Vyc3BhY2UgYXJjaGl0ZWN0dXJlIGRlZmluZWQhIiA+JjIKKwkJZWNobyAiRmFsbGluZyBiYWNrIHRvIHVzaW5nIHlvdXIgY3VycmVudCB1c2Vyc3BhY2UgaW5zdGVhZCEiID4mMgorCQllY2hvICJQbGVhc2UgYWRkIHN1cHBvcnQgZm9yICRVVFNfTUFDSElORSB0byAkezB9IC4uLiIgPiYyCisJCWVjaG8gIiIgPiYyCisJZXNhYworCWlmIFsgLW4gIiRLQlVJTERfREVCQVJDSCIgXSA7IHRoZW4KKwkJZGViYXJjaD0iJEtCVUlMRF9ERUJBUkNIIgorCWZpCisJaWYgWyAtbiAiJGRlYmFyY2giIF0gOyB0aGVuCisJCWZvcmNlYXJjaD0iLURBcmNoaXRlY3R1cmU9JGRlYmFyY2giCisJZmkKKwogCSMgQ3JlYXRlIHRoZSBwYWNrYWdlCi0JZHBrZy1nZW5jb250cm9sIC1pc3AgLXAkcG5hbWUgLVAiJHBkaXIiCisJZHBrZy1nZW5jb250cm9sIC1pc3AgJGZvcmNlYXJjaCAtcCRwbmFtZSAtUCIkcGRpciIKIAlkcGtnIC0tYnVpbGQgIiRwZGlyIiAuLgogfQogCkBAIC00MCwxNyArNzYsMjcgQEAKIGZpCiB0bXBkaXI9IiRvYmp0cmVlL2RlYmlhbi90bXAiCiBmd2Rpcj0iJG9ianRyZWUvZGViaWFuL2Z3dG1wIgora2VybmVsX2hlYWRlcnNfZGlyPSIkb2JqdHJlZS9kZWJpYW4vaGRydG1wIgorbGliY19oZWFkZXJzX2Rpcj0iJG9ianRyZWUvZGViaWFuL2hlYWRlcnRtcCIKIHBhY2thZ2VuYW1lPWxpbnV4LWltYWdlLSR2ZXJzaW9uCiBmd3BhY2thZ2VuYW1lPWxpbnV4LWZpcm13YXJlLWltYWdlCitrZXJuZWxfaGVhZGVyc19wYWNrYWdlbmFtZT1saW51eC1oZWFkZXJzLSR2ZXJzaW9uCitsaWJjX2hlYWRlcnNfcGFja2FnZW5hbWU9bGludXgtbGliYy1kZXYKIAogaWYgWyAiJEFSQ0giID0gInVtIiBdIDsgdGhlbgogCXBhY2thZ2VuYW1lPXVzZXItbW9kZS1saW51eC0kdmVyc2lvbgogZmkKIAogIyBTZXR1cCB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZQotcm0gLXJmICIkdG1wZGlyIiAiJGZ3ZGlyIgotbWtkaXIgLXAgIiR0bXBkaXIvREVCSUFOIiAiJHRtcGRpci9saWIiICIkdG1wZGlyL2Jvb3QiICIkdG1wZGlyL3Vzci9zaGFyZS9kb2MvJHBhY2thZ2VuYW1lIgotbWtkaXIgLXAgIiRmd2Rpci9ERUJJQU4iICIkZndkaXIvbGliIiAiJGZ3ZGlyL3Vzci9zaGFyZS9kb2MvJGZ3cGFja2FnZW5hbWUiCitybSAtcmYgIiR0bXBkaXIiICIkZndkaXIiICIka2VybmVsX2hlYWRlcnNfZGlyIiAiJGxpYmNfaGVhZGVyc19kaXIiCitta2RpciAtbSA3NTUgLXAgIiR0bXBkaXIvREVCSUFOIgorbWtkaXIgLXAgICIkdG1wZGlyL2xpYiIgIiR0bXBkaXIvYm9vdCIgIiR0bXBkaXIvdXNyL3NoYXJlL2RvYy8kcGFja2FnZW5hbWUiCitta2RpciAtbSA3NTUgLXAgIiRmd2Rpci9ERUJJQU4iCitta2RpciAtcCAiJGZ3ZGlyL2xpYiIgIiRmd2Rpci91c3Ivc2hhcmUvZG9jLyRmd3BhY2thZ2VuYW1lIgorbWtkaXIgLW0gNzU1IC1wICIkbGliY19oZWFkZXJzX2Rpci9ERUJJQU4iCitta2RpciAtcCAiJGxpYmNfaGVhZGVyc19kaXIvdXNyL3NoYXJlL2RvYy8kbGliY19oZWFkZXJzX3BhY2thZ2VuYW1lIgorbWtkaXIgLW0gNzU1IC1wICIka2VybmVsX2hlYWRlcnNfZGlyL0RFQklBTiIKK21rZGlyIC1wICIka2VybmVsX2hlYWRlcnNfZGlyL3Vzci9zaGFyZS9kb2MvJGtlcm5lbF9oZWFkZXJzX3BhY2thZ2VuYW1lIgogaWYgWyAiJEFSQ0giID0gInVtIiBdIDsgdGhlbgogCW1rZGlyIC1wICIkdG1wZGlyL3Vzci9saWIvdW1sL21vZHVsZXMvJHZlcnNpb24iICIkdG1wZGlyL3Vzci9iaW4iCiBmaQpAQCAtODEsNiArMTI3LDkgQEAKIAlmaQogZmkKIAorbWFrZSBoZWFkZXJzX2NoZWNrCittYWtlIGhlYWRlcnNfaW5zdGFsbCBJTlNUQUxMX0hEUl9QQVRIPSIkbGliY19oZWFkZXJzX2Rpci91c3IiCisKICMgSW5zdGFsbCB0aGUgbWFpbnRhaW5lciBzY3JpcHRzCiAjIE5vdGU6IGhvb2sgc2NyaXB0cyB1bmRlciAvZXRjL2tlcm5lbCBhcmUgYWxzbyBleGVjdXRlZCBieSBvZmZpY2lhbCBEZWJpYW4KICMga2VybmVsIHBhY2thZ2VzLCBhcyB3ZWxsIGFzIGtlcm5lbCBwYWNrYWdlcyBidWlsdCB1c2luZyBtYWtlLWtwa2cKQEAgLTE4OCw2ICsyMzcsMzAgQEAKIAogZmkKIAorIyBCdWlsZCBoZWFkZXIgcGFja2FnZQorZmluZCAuIC1uYW1lIE1ha2VmaWxlIC1vIC1uYW1lIEtjb25maWdcKiAtbyAtbmFtZSBcKi5wbCA+IC90bXAvZmlsZXMkJAorZmluZCBhcmNoL3g4Ni9pbmNsdWRlIGluY2x1ZGUgc2NyaXB0cyAtdHlwZSBmID4+IC90bXAvZmlsZXMkJAorKGNkICRvYmp0cmVlOyBmaW5kIC5jb25maWcgTW9kdWxlLnN5bXZlcnMgaW5jbHVkZSBzY3JpcHRzIC10eXBlIGYgPj4gL3RtcC9vYmpmaWxlcyQkKQorZGVzdGRpcj0ka2VybmVsX2hlYWRlcnNfZGlyL3Vzci9zcmMvbGludXgtaGVhZGVycy0kdmVyc2lvbgorbWtkaXIgLXAgIiRkZXN0ZGlyIgordGFyIC1jIC1mIC0gLVQgL3RtcC9maWxlcyQkIHwgKGNkICRkZXN0ZGlyOyB0YXIgLXhmIC0pCisoY2QgJG9ianRyZWU7IHRhciAtYyAtZiAtIC1UIC90bXAvb2JqZmlsZXMkJCkgfCAoY2QgJGRlc3RkaXI7IHRhciAteGYgLSkKK3JtIC1mIC90bXAvZmlsZXMkJCAvdG1wL29iamZpbGVzJCQKK2FyY2g9JChkcGtnIC0tcHJpbnQtYXJjaGl0ZWN0dXJlKQorCitjYXQgPDxFT0YgPj4gZGViaWFuL2NvbnRyb2wKKworUGFja2FnZTogJGtlcm5lbF9oZWFkZXJzX3BhY2thZ2VuYW1lCitQcm92aWRlczogbGludXgtaGVhZGVycywgbGludXgtaGVhZGVycy0yLjYKK0FyY2hpdGVjdHVyZTogJGFyY2gKK0Rlc2NyaXB0aW9uOiBMaW51eCBrZXJuZWwgaGVhZGVycyBmb3IgJEtFUk5FTFJFTEVBU0Ugb24gJGFyY2gKKyBUaGlzIHBhY2thZ2UgcHJvdmlkZXMga2VybmVsIGhlYWRlciBmaWxlcyBmb3IgJEtFUk5FTFJFTEVBU0Ugb24gJGFyY2gKKyAuCisgVGhpcyBpcyB1c2VmdWwgZm9yIHBlb3BsZSB3aG8gbmVlZCB0byBidWlsZCBleHRlcm5hbCBtb2R1bGVzCitFT0YKKworY3JlYXRlX3BhY2thZ2UgIiRrZXJuZWxfaGVhZGVyc19wYWNrYWdlbmFtZSIgIiRrZXJuZWxfaGVhZGVyc19kaXIiCisKICMgRG8gd2UgaGF2ZSBmaXJtd2FyZT8gTW92ZSBpdCBvdXQgb2YgdGhlIHdheSBhbmQgYnVpbGQgaXQgaW50byBhIHBhY2thZ2UuCiBpZiBbIC1lICIkdG1wZGlyL2xpYi9maXJtd2FyZSIgXTsgdGhlbgogCW12ICIkdG1wZGlyL2xpYi9maXJtd2FyZSIgIiRmd2Rpci9saWIvIgpAQCAtMjAzLDYgKzI3NiwxOCBAQAogCWNyZWF0ZV9wYWNrYWdlICIkZndwYWNrYWdlbmFtZSIgIiRmd2RpciIKIGZpCiAKK2NhdCA8PEVPRiA+PiBkZWJpYW4vY29udHJvbAorCitQYWNrYWdlOiAkbGliY19oZWFkZXJzX3BhY2thZ2VuYW1lCitTZWN0aW9uOiBkZXZlbAorUHJvdmlkZXM6IGxpbnV4LWtlcm5lbC1oZWFkZXJzCitBcmNoaXRlY3R1cmU6IGFueQorRGVzY3JpcHRpb246IExpbnV4IHN1cHBvcnQgaGVhZGVycyBmb3IgdXNlcnNwYWNlIGRldmVsb3BtZW50CisgVGhpcyBwYWNrYWdlIHByb3ZpZGVzIHVzZXJzcGFjZXMgaGVhZGVycyBmcm9tIHRoZSBMaW51eCBrZXJuZWwuICBUaGVzZSBoZWFkZXJzCisgYXJlIHVzZWQgYnkgdGhlIGluc3RhbGxlZCBoZWFkZXJzIGZvciBHTlUgZ2xpYmMgYW5kIG90aGVyIHN5c3RlbSBsaWJyYXJpZXMuCitFT0YKKworY3JlYXRlX3BhY2thZ2UgIiRsaWJjX2hlYWRlcnNfcGFja2FnZW5hbWUiICIkbGliY19oZWFkZXJzX2RpciIKIGNyZWF0ZV9wYWNrYWdlICIkcGFja2FnZW5hbWUiICIkdG1wZGlyIgogCiBleGl0IDAKZGlmZiAtLWdpdCBhL3NjcmlwdHMvcmVjb3JkbWNvdW50LmMgYi9zY3JpcHRzL3JlY29yZG1jb3VudC5jCmluZGV4IGYyZjMyZWUuLjAzOGIzZDEgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvcmVjb3JkbWNvdW50LmMKKysrIGIvc2NyaXB0cy9yZWNvcmRtY291bnQuYwpAQCAtMzgsNiArMzgsNyBAQAogc3RhdGljIGNoYXIgZ3BmeDsJLyogcHJlZml4IGZvciBnbG9iYWwgc3ltYm9sIG5hbWUgKHNvbWV0aW1lcyAnXycpICovCiBzdGF0aWMgc3RydWN0IHN0YXQgc2I7CS8qIFJlbWVtYmVyIC5zdF9zaXplLCBldGMuICovCiBzdGF0aWMgam1wX2J1ZiBqbXBlbnY7CS8qIHNldGptcC9sb25nam1wIHBlci1maWxlIGVycm9yIGVzY2FwZSAqLworc3RhdGljIGNvbnN0IGNoYXIgKmFsdG1jb3VudDsJLyogYWx0ZXJuYXRlIG1jb3VudCBzeW1ib2wgbmFtZSAqLwogCiAvKiBzZXRqbXAoKSByZXR1cm4gdmFsdWVzICovCiBlbnVtIHsKQEAgLTI5OSw3ICszMDAsOSBAQAogCQlmYWlsX2ZpbGUoKTsKIAl9IGJyZWFrOwogCWNhc2UgRU1fMzg2OgkgcmVsdHlwZSA9IFJfMzg2XzMyOyAgICAgICAgICAgICAgICAgICBicmVhazsKLQljYXNlIEVNX0FSTToJIHJlbHR5cGUgPSBSX0FSTV9BQlMzMjsgICAgICAgICAgICAgICAgYnJlYWs7CisJY2FzZSBFTV9BUk06CSByZWx0eXBlID0gUl9BUk1fQUJTMzI7CisJCQkgYWx0bWNvdW50ID0gIl9fZ251X21jb3VudF9uYyI7CisJCQkgYnJlYWs7CiAJY2FzZSBFTV9JQV82NDoJIHJlbHR5cGUgPSBSX0lBNjRfSU1NNjQ7ICAgZ3BmeCA9ICdfJzsgYnJlYWs7CiAJY2FzZSBFTV9NSVBTOgkgLyogcmVsdHlwZTogZV9jbGFzcyAgICAqLyBncGZ4ID0gJ18nOyBicmVhazsKIAljYXNlIEVNX1BQQzoJIHJlbHR5cGUgPSBSX1BQQ19BRERSMzI7ICAgZ3BmeCA9ICdfJzsgYnJlYWs7CkBAIC0zNTcsNyArMzYwLDcgQEAKIGludAogbWFpbihpbnQgYXJnYywgY2hhciBjb25zdCAqYXJndltdKQogewotCWNvbnN0IGNoYXIgZnRyYWNlW10gPSAia2VybmVsL3RyYWNlL2Z0cmFjZS5vIjsKKwljb25zdCBjaGFyIGZ0cmFjZVtdID0gIi9mdHJhY2UubyI7CiAJaW50IGZ0cmFjZV9zaXplID0gc2l6ZW9mKGZ0cmFjZSkgLSAxOwogCWludCBuX2Vycm9yID0gMDsgIC8qIGdjYy00LjMuMCBmYWxzZSBwb3NpdGl2ZSBjb21wbGFpbnQgKi8KIApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9yZWNvcmRtY291bnQuaCBiL3NjcmlwdHMvcmVjb3JkbWNvdW50LmgKaW5kZXggMzk2NjcxNy4uYmFmMTg3YiAxMDA2NDQKLS0tIGEvc2NyaXB0cy9yZWNvcmRtY291bnQuaAorKysgYi9zY3JpcHRzL3JlY29yZG1jb3VudC5oCkBAIC0yNzUsMTEgKzI3NSwxMiBAQAogCQkJRWxmX1N5bSBjb25zdCAqY29uc3Qgc3ltcCA9CiAJCQkJJnN5bTBbRWxmX3Jfc3ltKHJlbHApXTsKIAkJCWNoYXIgY29uc3QgKnN5bW5hbWUgPSAmc3RyMFt3KHN5bXAtPnN0X25hbWUpXTsKKwkJCWNoYXIgY29uc3QgKm1jb3VudCA9ICdfJyA9PSBncGZ4ID8gIl9tY291bnQiIDogIm1jb3VudCI7CiAKIAkJCWlmICgnLicgPT0gc3ltbmFtZVswXSkKIAkJCQkrK3N5bW5hbWU7ICAvKiBwcGM2NCBoYWNrICovCi0JCQlpZiAoMCA9PSBzdHJjbXAoKCgnXycgPT0gZ3BmeCkgPyAiX21jb3VudCIgOiAibWNvdW50IiksCi0JCQkJCXN5bW5hbWUpKQorCQkJaWYgKDAgPT0gc3RyY21wKG1jb3VudCwgc3ltbmFtZSkgfHwKKwkJCSAgICAoYWx0bWNvdW50ICYmIDAgPT0gc3RyY21wKGFsdG1jb3VudCwgc3ltbmFtZSkpKQogCQkJCW1jb3VudHN5bSA9IEVsZl9yX3N5bShyZWxwKTsKIAkJfQogCmRpZmYgLS1naXQgYS9zY3JpcHRzL3RhZ3Muc2ggYi9zY3JpcHRzL3RhZ3Muc2gKaW5kZXggYmJiZTU4NC4uOTJmZGM0NSAxMDA3NTUKLS0tIGEvc2NyaXB0cy90YWdzLnNoCisrKyBiL3NjcmlwdHMvdGFncy5zaApAQCAtMTIzLDcgKzEyMyw3IEBACiAJLUkgX19fX2NhY2hlbGluZV9pbnRlcm5vZGVhbGlnbmVkX2luX3NtcCAgICAgICAgICAgICAgICBcCiAJLUkgRVhQT1JUX1NZTUJPTCxFWFBPUlRfU1lNQk9MX0dQTCAgICAgICAgICAgICAgICAgICAgICBcCiAJLUkgREVGSU5FX1RSQUNFLEVYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTCxFWFBPUlRfVFJBQ0VQT0lOVF9TWU1CT0xfR1BMIFwKLQktLWV4dHJhPStmIC0tYy1raW5kcz0tcHggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwktLWV4dHJhPStmIC0tYy1raW5kcz0rcHggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIAktLXJlZ2V4LWFzbT0nL15FTlRSWVwoKFteKV0qKVwpLiovXDEvJyAgICAgICAgICAgICAgICAgIFwKIAktLXJlZ2V4LWM9Jy9eU1lTQ0FMTF9ERUZJTkVbWzpkaWdpdDpdXT9cKChbXiwpXSopLiovc3lzX1wxLycgXAogCS0tcmVnZXgtYysrPScvXlRSQUNFX0VWRU5UXCgoW14sKV0qKS4qL3RyYWNlX1wxLycJCVwKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2NhcGFiaWxpdHkuYyBiL3NlY3VyaXR5L2NhcGFiaWxpdHkuYwppbmRleCBjNzczNjM1Li4yYTVkZjJiIDEwMDY0NAotLS0gYS9zZWN1cml0eS9jYXBhYmlsaXR5LmMKKysrIGIvc2VjdXJpdHkvY2FwYWJpbGl0eS5jCkBAIC01NDgsNyArNTQ4LDcgQEAKIH0KIAogI2lmZGVmIENPTkZJR19TRUNVUklUWV9ORVRXT1JLCi1zdGF0aWMgaW50IGNhcF91bml4X3N0cmVhbV9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm90aGVyLAorc3RhdGljIGludCBjYXBfdW5peF9zdHJlYW1fY29ubmVjdChzdHJ1Y3Qgc29jayAqc29jaywgc3RydWN0IHNvY2sgKm90aGVyLAogCQkJCSAgIHN0cnVjdCBzb2NrICpuZXdzaykKIHsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlY3VyaXR5LmMgYi9zZWN1cml0eS9zZWN1cml0eS5jCmluZGV4IDFiNzk4ZDMuLjczOWU0MDMgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlY3VyaXR5LmMKKysrIGIvc2VjdXJpdHkvc2VjdXJpdHkuYwpAQCAtNTEzLDYgKzUxMywxNSBAQAogCXJldHVybiBzZWN1cml0eV9vcHMtPmlub2RlX3Blcm1pc3Npb24oaW5vZGUsIG1hc2spOwogfQogCitpbnQgc2VjdXJpdHlfaW5vZGVfZXhlY19wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVuc2lnbmVkIGludCBmbGFncykKK3sKKwlpZiAodW5saWtlbHkoSVNfUFJJVkFURShpbm9kZSkpKQorCQlyZXR1cm4gMDsKKwlpZiAoZmxhZ3MpCisJCXJldHVybiAtRUNISUxEOworCXJldHVybiBzZWN1cml0eV9vcHMtPmlub2RlX3Blcm1pc3Npb24oaW5vZGUsIE1BWV9FWEVDKTsKK30KKwogaW50IHNlY3VyaXR5X2lub2RlX3NldGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmF0dHIpCiB7CiAJaWYgKHVubGlrZWx5KElTX1BSSVZBVEUoZGVudHJ5LT5kX2lub2RlKSkpCkBAIC05NzcsOCArOTg2LDcgQEAKIAogI2lmZGVmIENPTkZJR19TRUNVUklUWV9ORVRXT1JLCiAKLWludCBzZWN1cml0eV91bml4X3N0cmVhbV9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm90aGVyLAotCQkJCSBzdHJ1Y3Qgc29jayAqbmV3c2spCitpbnQgc2VjdXJpdHlfdW5peF9zdHJlYW1fY29ubmVjdChzdHJ1Y3Qgc29jayAqc29jaywgc3RydWN0IHNvY2sgKm90aGVyLCBzdHJ1Y3Qgc29jayAqbmV3c2spCiB7CiAJcmV0dXJuIHNlY3VyaXR5X29wcy0+dW5peF9zdHJlYW1fY29ubmVjdChzb2NrLCBvdGhlciwgbmV3c2spOwogfQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCmluZGV4IDY1ZmE4YmYuLjZmNjM3ZDIgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKQEAgLTM5MjEsMTggKzM5MjEsMTggQEAKIAlyZXR1cm4gc29ja19oYXNfcGVybShjdXJyZW50LCBzb2NrLT5zaywgU09DS0VUX19TSFVURE9XTik7CiB9CiAKLXN0YXRpYyBpbnQgc2VsaW51eF9zb2NrZXRfdW5peF9zdHJlYW1fY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLAotCQkJCQkgICAgICBzdHJ1Y3Qgc29ja2V0ICpvdGhlciwKK3N0YXRpYyBpbnQgc2VsaW51eF9zb2NrZXRfdW5peF9zdHJlYW1fY29ubmVjdChzdHJ1Y3Qgc29jayAqc29jaywKKwkJCQkJICAgICAgc3RydWN0IHNvY2sgKm90aGVyLAogCQkJCQkgICAgICBzdHJ1Y3Qgc29jayAqbmV3c2spCiB7Ci0Jc3RydWN0IHNrX3NlY3VyaXR5X3N0cnVjdCAqc2tzZWNfc29jayA9IHNvY2stPnNrLT5za19zZWN1cml0eTsKLQlzdHJ1Y3Qgc2tfc2VjdXJpdHlfc3RydWN0ICpza3NlY19vdGhlciA9IG90aGVyLT5zay0+c2tfc2VjdXJpdHk7CisJc3RydWN0IHNrX3NlY3VyaXR5X3N0cnVjdCAqc2tzZWNfc29jayA9IHNvY2stPnNrX3NlY3VyaXR5OworCXN0cnVjdCBza19zZWN1cml0eV9zdHJ1Y3QgKnNrc2VjX290aGVyID0gb3RoZXItPnNrX3NlY3VyaXR5OwogCXN0cnVjdCBza19zZWN1cml0eV9zdHJ1Y3QgKnNrc2VjX25ldyA9IG5ld3NrLT5za19zZWN1cml0eTsKIAlzdHJ1Y3QgY29tbW9uX2F1ZGl0X2RhdGEgYWQ7CiAJaW50IGVycjsKIAogCUNPTU1PTl9BVURJVF9EQVRBX0lOSVQoJmFkLCBORVQpOwotCWFkLnUubmV0LnNrID0gb3RoZXItPnNrOworCWFkLnUubmV0LnNrID0gb3RoZXI7CiAKIAllcnIgPSBhdmNfaGFzX3Blcm0oc2tzZWNfc29jay0+c2lkLCBza3NlY19vdGhlci0+c2lkLAogCQkJICAgc2tzZWNfb3RoZXItPnNjbGFzcywKQEAgLTQ1MjAsMTEgKzQ1MjAsMTEgQEAKIAlpZiAoc2VsaW51eF9zZWNtYXJrX2VuYWJsZWQoKSkKIAkJaWYgKGF2Y19oYXNfcGVybShza3NlYy0+c2lkLCBza2ItPnNlY21hcmssCiAJCQkJIFNFQ0NMQVNTX1BBQ0tFVCwgUEFDS0VUX19TRU5ELCAmYWQpKQotCQkJcmV0dXJuIE5GX0RST1A7CisJCQlyZXR1cm4gTkZfRFJPUF9FUlIoLUVDT05OUkVGVVNFRCk7CiAKIAlpZiAoc2VsaW51eF9wb2xpY3ljYXBfbmV0cGVlcikKIAkJaWYgKHNlbGludXhfeGZybV9wb3N0cm91dGVfbGFzdChza3NlYy0+c2lkLCBza2IsICZhZCwgcHJvdG8pKQotCQkJcmV0dXJuIE5GX0RST1A7CisJCQlyZXR1cm4gTkZfRFJPUF9FUlIoLUVDT05OUkVGVVNFRCk7CiAKIAlyZXR1cm4gTkZfQUNDRVBUOwogfQpAQCAtNDU4MSw3ICs0NTgxLDcgQEAKIAkJCQlzZWNtYXJrX3Blcm0gPSBQQUNLRVRfX1NFTkQ7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCXJldHVybiBORl9EUk9QOworCQkJcmV0dXJuIE5GX0RST1BfRVJSKC1FQ09OTlJFRlVTRUQpOwogCQl9CiAJCWlmIChzZWNtYXJrX3Blcm0gPT0gUEFDS0VUX19GT1JXQVJEX09VVCkgewogCQkJaWYgKHNlbGludXhfc2tiX3BlZXJsYmxfc2lkKHNrYiwgZmFtaWx5LCAmcGVlcl9zaWQpKQpAQCAtNDYwMyw3ICs0NjAzLDcgQEAKIAlpZiAoc2VjbWFya19hY3RpdmUpCiAJCWlmIChhdmNfaGFzX3Blcm0ocGVlcl9zaWQsIHNrYi0+c2VjbWFyaywKIAkJCQkgU0VDQ0xBU1NfUEFDS0VULCBzZWNtYXJrX3Blcm0sICZhZCkpCi0JCQlyZXR1cm4gTkZfRFJPUDsKKwkJCXJldHVybiBORl9EUk9QX0VSUigtRUNPTk5SRUZVU0VEKTsKIAogCWlmIChwZWVybGJsX2FjdGl2ZSkgewogCQl1MzIgaWZfc2lkOwpAQCAtNDYxMywxMyArNDYxMywxMyBAQAogCQkJcmV0dXJuIE5GX0RST1A7CiAJCWlmIChhdmNfaGFzX3Blcm0ocGVlcl9zaWQsIGlmX3NpZCwKIAkJCQkgU0VDQ0xBU1NfTkVUSUYsIE5FVElGX19FR1JFU1MsICZhZCkpCi0JCQlyZXR1cm4gTkZfRFJPUDsKKwkJCXJldHVybiBORl9EUk9QX0VSUigtRUNPTk5SRUZVU0VEKTsKIAogCQlpZiAoc2VsX25ldG5vZGVfc2lkKGFkZHJwLCBmYW1pbHksICZub2RlX3NpZCkpCiAJCQlyZXR1cm4gTkZfRFJPUDsKIAkJaWYgKGF2Y19oYXNfcGVybShwZWVyX3NpZCwgbm9kZV9zaWQsCiAJCQkJIFNFQ0NMQVNTX05PREUsIE5PREVfX1NFTkRUTywgJmFkKSkKLQkJCXJldHVybiBORl9EUk9QOworCQkJcmV0dXJuIE5GX0RST1BfRVJSKC1FQ09OTlJFRlVTRUQpOwogCX0KIAogCXJldHVybiBORl9BQ0NFUFQ7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L3NlbGludXhmcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9zZWxpbnV4ZnMuYwppbmRleCAwNzNmZDViLi40M2RlYWMyIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L3NlbGludXhmcy5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvc2VsaW51eGZzLmMKQEAgLTExNDUsMjQgKzExNDUsMjggQEAKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpub2RlOwogCi0Jc3Bpbl9sb2NrKCZkY2FjaGVfbG9jayk7CisJc3Bpbl9sb2NrKCZkZS0+ZF9sb2NrKTsKIAlub2RlID0gZGUtPmRfc3ViZGlycy5uZXh0OwogCXdoaWxlIChub2RlICE9ICZkZS0+ZF9zdWJkaXJzKSB7CiAJCXN0cnVjdCBkZW50cnkgKmQgPSBsaXN0X2VudHJ5KG5vZGUsIHN0cnVjdCBkZW50cnksIGRfdS5kX2NoaWxkKTsKKworCQlzcGluX2xvY2tfbmVzdGVkKCZkLT5kX2xvY2ssIERFTlRSWV9EX0xPQ0tfTkVTVEVEKTsKIAkJbGlzdF9kZWxfaW5pdChub2RlKTsKIAogCQlpZiAoZC0+ZF9pbm9kZSkgewotCQkJZCA9IGRnZXRfbG9ja2VkKGQpOwotCQkJc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKKwkJCWRnZXRfZGxvY2soZCk7CisJCQlzcGluX3VubG9jaygmZGUtPmRfbG9jayk7CisJCQlzcGluX3VubG9jaygmZC0+ZF9sb2NrKTsKIAkJCWRfZGVsZXRlKGQpOwogCQkJc2ltcGxlX3VubGluayhkZS0+ZF9pbm9kZSwgZCk7CiAJCQlkcHV0KGQpOwotCQkJc3Bpbl9sb2NrKCZkY2FjaGVfbG9jayk7Ci0JCX0KKwkJCXNwaW5fbG9jaygmZGUtPmRfbG9jayk7CisJCX0gZWxzZQorCQkJc3Bpbl91bmxvY2soJmQtPmRfbG9jayk7CiAJCW5vZGUgPSBkZS0+ZF9zdWJkaXJzLm5leHQ7CiAJfQogCi0Jc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKKwlzcGluX3VubG9jaygmZGUtPmRfbG9jayk7CiB9CiAKICNkZWZpbmUgQk9PTF9ESVJfTkFNRSAiYm9vbGVhbnMiCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jCmluZGV4IDQ4OWE4NWEuLmNjYjcxYTAgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jCisrKyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jCkBAIC0yNDA4LDIyICsyNDA4LDIyIEBACiAKIC8qKgogICogc21hY2tfdW5peF9zdHJlYW1fY29ubmVjdCAtIFNtYWNrIGFjY2VzcyBvbiBVRFMKLSAqIEBzb2NrOiBvbmUgc29ja2V0Ci0gKiBAb3RoZXI6IHRoZSBvdGhlciBzb2NrZXQKKyAqIEBzb2NrOiBvbmUgc29jaworICogQG90aGVyOiB0aGUgb3RoZXIgc29jawogICogQG5ld3NrOiB1bnVzZWQKICAqCiAgKiBSZXR1cm4gMCBpZiBhIHN1YmplY3Qgd2l0aCB0aGUgc21hY2sgb2Ygc29jayBjb3VsZCBhY2Nlc3MKICAqIGFuIG9iamVjdCB3aXRoIHRoZSBzbWFjayBvZiBvdGhlciwgb3RoZXJ3aXNlIGFuIGVycm9yIGNvZGUKICAqLwotc3RhdGljIGludCBzbWFja191bml4X3N0cmVhbV9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssCi0JCQkJICAgICBzdHJ1Y3Qgc29ja2V0ICpvdGhlciwgc3RydWN0IHNvY2sgKm5ld3NrKQorc3RhdGljIGludCBzbWFja191bml4X3N0cmVhbV9jb25uZWN0KHN0cnVjdCBzb2NrICpzb2NrLAorCQkJCSAgICAgc3RydWN0IHNvY2sgKm90aGVyLCBzdHJ1Y3Qgc29jayAqbmV3c2spCiB7Ci0Jc3RydWN0IGlub2RlICpzcCA9IFNPQ0tfSU5PREUoc29jayk7Ci0Jc3RydWN0IGlub2RlICpvcCA9IFNPQ0tfSU5PREUob3RoZXIpOworCXN0cnVjdCBpbm9kZSAqc3AgPSBTT0NLX0lOT0RFKHNvY2stPnNrX3NvY2tldCk7CisJc3RydWN0IGlub2RlICpvcCA9IFNPQ0tfSU5PREUob3RoZXItPnNrX3NvY2tldCk7CiAJc3RydWN0IHNta19hdWRpdF9pbmZvIGFkOwogCiAJc21rX2FkX2luaXQoJmFkLCBfX2Z1bmNfXywgTFNNX0FVRElUX0RBVEFfTkVUKTsKLQlzbWtfYWRfc2V0ZmllbGRfdV9uZXRfc2soJmFkLCBvdGhlci0+c2spOworCXNta19hZF9zZXRmaWVsZF91X25ldF9zaygmYWQsIG90aGVyKTsKIAlyZXR1cm4gc21rX2FjY2VzcyhzbWtfb2ZfaW5vZGUoc3ApLCBzbWtfb2ZfaW5vZGUob3ApLAogCQkJCSBNQVlfUkVBRFdSSVRFLCAmYWQpOwogfQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvdG9tb3lvL3JlYWxwYXRoLmMgYi9zZWN1cml0eS90b21veW8vcmVhbHBhdGguYwppbmRleCAxZDBiZjhmLi5kMWUwNWIwIDEwMDY0NAotLS0gYS9zZWN1cml0eS90b21veW8vcmVhbHBhdGguYworKysgYi9zZWN1cml0eS90b21veW8vcmVhbHBhdGguYwpAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxuZXQvc29jay5oPgogI2luY2x1ZGUgImNvbW1vbi5oIgorI2luY2x1ZGUgIi4uLy4uL2ZzL2ludGVybmFsLmgiCiAKIC8qKgogICogdG9tb3lvX2VuY29kZTogQ29udmVydCBiaW5hcnkgc3RyaW5nIHRvIGFzY2lpIHN0cmluZy4KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvcHhhLXNzcC5jIGIvc291bmQvc29jL3B4YS9weGEtc3NwLmMKaW5kZXggYjQzOWVlZS4uOGFkOTNlZSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS9weGEtc3NwLmMKKysrIGIvc291bmQvc29jL3B4YS9weGEtc3NwLmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3B4YTJ4eF9zc3AuaD4KIAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KIApAQCAtMzMsNyArMzQsNiBAQAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL2RtYS5oPgogI2luY2x1ZGUgPG1hY2gvYXVkaW8uaD4KLSNpbmNsdWRlIDxwbGF0L3NzcC5oPgogCiAjaW5jbHVkZSAiLi4vLi4vYXJtL3B4YTJ4eC1wY20uaCIKICNpbmNsdWRlICJweGEtc3NwLmgiCmRpZmYgLS1naXQgYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1hbm5vdGF0ZS50eHQgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1hbm5vdGF0ZS50eHQKaW5kZXggYjJjNjMzMC4uNmY1YTQ5ODYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLWFubm90YXRlLnR4dAorKysgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1hbm5vdGF0ZS50eHQKQEAgLTI0LDEyICsyNCw0NyBAQAogLS1pbnB1dD06OgogICAgICAgICBJbnB1dCBmaWxlIG5hbWUuIChkZWZhdWx0OiBwZXJmLmRhdGEpCiAKKy1kOjoKKy0tZHNvcz08ZHNvWyxkc28uLi5dPjo6CisgICAgICAgIE9ubHkgY29uc2lkZXIgc3ltYm9scyBpbiB0aGVzZSBkc29zLgorLXM6OgorLS1zeW1ib2w9PHN5bWJvbD46OgorICAgICAgICBTeW1ib2wgdG8gYW5ub3RhdGUuCisKKy1mOjoKKy0tZm9yY2U6OgorICAgICAgICBEb24ndCBjb21wbGFpbiwgZG8gaXQuCisKKy12OjoKKy0tdmVyYm9zZTo6CisgICAgICAgIEJlIG1vcmUgdmVyYm9zZS4gKFNob3cgc3ltYm9sIGFkZHJlc3MsIGV0YykKKworLUQ6OgorLS1kdW1wLXJhdy10cmFjZTo6CisgICAgICAgIER1bXAgcmF3IHRyYWNlIGluIEFTQ0lJLgorCistazo6CistLXZtbGludXg9PGZpbGU+OjoKKyAgICAgICAgdm1saW51eCBwYXRobmFtZS4KKworLW06OgorLS1tb2R1bGVzOjoKKyAgICAgICAgTG9hZCBtb2R1bGUgc3ltYm9scy4gV0FSTklORzogdXNlIG9ubHkgd2l0aCAtayBhbmQgTElWRSBrZXJuZWwuCisKKy1sOjoKKy0tcHJpbnQtbGluZTo6CisgICAgICAgIFByaW50IG1hdGNoaW5nIHNvdXJjZSBsaW5lcyAobWF5IGJlIHNsb3cpLgorCistUDo6CistLWZ1bGwtcGF0aHM6OgorICAgICAgICBEb24ndCBzaG9ydGVuIHRoZSBkaXNwbGF5ZWQgcGF0aG5hbWVzLgorCiAtLXN0ZGlvOjogVXNlIHRoZSBzdGRpbyBpbnRlcmZhY2UuCiAKIC0tdHVpOjogVXNlIHRoZSBUVUkgaW50ZXJmYWNlIFVzZSBvZiAtLXR1aSByZXF1aXJlcyBhIHR0eSwgaWYgb25lIGlzIG5vdAogCXByZXNlbnQsIGFzIHdoZW4gcGlwaW5nIHRvIG90aGVyIGNvbW1hbmRzLCB0aGUgc3RkaW8gaW50ZXJmYWNlIGlzCiAJdXNlZC4gVGhpcyBpbnRlcmZhY2VzIHN0YXJ0cyBieSBjZW50ZXJpbmcgb24gdGhlIGxpbmUgd2l0aCBtb3JlCi0Jc2FtcGxlcywgVEFCL1VOVEFCIGN5Y2xlcyB0aHJ1IHRoZSBsaW5lcyB3aXRoIG1vcmUgc2FtcGxlcy4KKwlzYW1wbGVzLCBUQUIvVU5UQUIgY3ljbGVzIHRocm91Z2ggdGhlIGxpbmVzIHdpdGggbW9yZSBzYW1wbGVzLgogCiBTRUUgQUxTTwogLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLWJ1aWxkaWQtbGlzdC50eHQgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1idWlsZGlkLWxpc3QudHh0CmluZGV4IDAxYjY0MmMuLjVlYWFjNmYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLWJ1aWxkaWQtbGlzdC50eHQKKysrIGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtYnVpbGRpZC1saXN0LnR4dApAQCAtMTgsNiArMTgsOSBAQAogCiBPUFRJT05TCiAtLS0tLS0tCistSDo6CistLXdpdGgtaGl0czo6CisgICAgICAgIFNob3cgb25seSBEU09zIHdpdGggaGl0cy4KIC1pOjoKIC0taW5wdXQ9OjoKICAgICAgICAgSW5wdXQgZmlsZSBuYW1lLiAoZGVmYXVsdDogcGVyZi5kYXRhKQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtZGlmZi50eHQgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1kaWZmLnR4dAppbmRleCAyMGQ5N2Q4Li43NGQ3NDgxIDEwMDY0NAotLS0gYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1kaWZmLnR4dAorKysgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1kaWZmLnR4dApAQCAtMTksNiArMTksMTggQEAKIAogT1BUSU9OUwogLS0tLS0tLQorLU06OgorLS1kaXNwbGFjZW1lbnQ6OgorICAgICAgICBTaG93IHBvc2l0aW9uIGRpc3BsYWNlbWVudCByZWxhdGl2ZSB0byBiYXNlbGluZS4KKworLUQ6OgorLS1kdW1wLXJhdy10cmFjZTo6CisgICAgICAgIER1bXAgcmF3IHRyYWNlIGluIEFTQ0lJLgorCistbTo6CistLW1vZHVsZXM6OgorICAgICAgICBMb2FkIG1vZHVsZSBzeW1ib2xzLiBXQVJOSU5HOiB1c2Ugb25seSB3aXRoIC1rIGFuZCBMSVZFIGtlcm5lbAorCiAtZDo6CiAtLWRzb3M9OjoKIAlPbmx5IGNvbnNpZGVyIHN5bWJvbHMgaW4gdGhlc2UgZHNvcy4gQ1NWIHRoYXQgdW5kZXJzdGFuZHMKQEAgLTQyLDcgKzU0LDcgQEAKIC0tZmllbGQtc2VwYXJhdG9yPTo6CiAKIAlVc2UgYSBzcGVjaWFsIHNlcGFyYXRvciBjaGFyYWN0ZXIgYW5kIGRvbid0IHBhZCB3aXRoIHNwYWNlcywgcmVwbGFjaW5nCi0JYWxsIG9jY3VyYW5jZXMgb2YgdGhpcyBzZXBhcmF0b3IgaW4gc3ltYm9sIG5hbWVzIChhbmQgb3RoZXIgb3V0cHV0KQorCWFsbCBvY2N1cnJlbmNlcyBvZiB0aGlzIHNlcGFyYXRvciBpbiBzeW1ib2wgbmFtZXMgKGFuZCBvdGhlciBvdXRwdXQpCiAJd2l0aCBhICcuJyBjaGFyYWN0ZXIsIHRoYXQgdGh1cyBpdCdzIHRoZSBvbmx5IG5vbiB2YWxpZCBzZXBhcmF0b3IuCiAKIC12OjoKQEAgLTUwLDYgKzYyLDEzIEBACiAJQmUgdmVyYm9zZSwgZm9yIGluc3RhbmNlLCBzaG93IHRoZSByYXcgY291bnRzIGluIGFkZGl0aW9uIHRvIHRoZQogCWRpZmYuCiAKKy1mOjoKKy0tZm9yY2U6OgorICAgICAgIERvbid0IGNvbXBsYWluLCBkbyBpdC4KKworLS1zeW1mcz08ZGlyZWN0b3J5Pjo6CisgICAgICAgIExvb2sgZm9yIGZpbGVzIHdpdGggc3ltYm9scyByZWxhdGl2ZSB0byB0aGlzIGRpcmVjdG9yeS4KKwogU0VFIEFMU08KIC0tLS0tLS0tCiBsaW5rcGVyZjpwZXJmLXJlY29yZFsxXQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYta3ZtLnR4dCBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLWt2bS50eHQKaW5kZXggZDAwNGUxOS4uZGQ4NGNiMiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYta3ZtLnR4dAorKysgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1rdm0udHh0CkBAIC0yMiw3ICsyMiw3IEBACiAgIGEgcGVyZm9ybWFuY2UgY291bnRlciBwcm9maWxlIG9mIGd1ZXN0IG9zIGluIHJlYWx0aW1lCiAgIG9mIGFuIGFyYml0cmFyeSB3b3JrbG9hZC4KIAotICAncGVyZiBrdm0gcmVjb3JkIDxjb21tYW5kPicgdG8gcmVjb3JkIHRoZSBwZXJmb3JtYW5jZSBjb3VpbnRlciBwcm9maWxlCisgICdwZXJmIGt2bSByZWNvcmQgPGNvbW1hbmQ+JyB0byByZWNvcmQgdGhlIHBlcmZvcm1hbmNlIGNvdW50ZXIgcHJvZmlsZQogICBvZiBhbiBhcmJpdHJhcnkgd29ya2xvYWQgYW5kIHNhdmUgaXQgaW50byBhIHBlcmYgZGF0YSBmaWxlLiBJZiBib3RoCiAgIC0taG9zdCBhbmQgLS1ndWVzdCBhcmUgaW5wdXQsIHRoZSBwZXJmIGRhdGEgZmlsZSBuYW1lIGlzIHBlcmYuZGF0YS5rdm0uCiAgIElmIHRoZXJlIGlzICBubyAtLWhvc3QgYnV0IC0tZ3Vlc3QsIHRoZSBmaWxlIG5hbWUgaXMgcGVyZi5kYXRhLmd1ZXN0LgpAQCAtNDAsNiArNDAsMTIgQEAKIAogT1BUSU9OUwogLS0tLS0tLQorLWk6OgorLS1pbnB1dD06OgorICAgICAgICBJbnB1dCBmaWxlIG5hbWUuCistbzo6CistLW91dHB1dDo6CisgICAgICAgIE91dHB1dCBmaWxlIG5hbWUuCiAtLWhvc3Q9OjoKICAgICAgICAgQ29sbGVjdCBob3N0IHNpZGUgcGVyZm9ybWFuY2UgcHJvZmlsZS4KIC0tZ3Vlc3Q9OjoKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLWxvY2sudHh0IGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtbG9jay50eHQKaW5kZXggYjMxNzEwMi4uOTIxZGUyNSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtbG9jay50eHQKKysrIGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtbG9jay50eHQKQEAgLTI0LDYgKzI0LDIxIEBACiAKICAgJ3BlcmYgbG9jayByZXBvcnQnIHJlcG9ydHMgc3RhdGlzdGljYWwgZGF0YS4KIAorT1BUSU9OUworLS0tLS0tLQorCistaTo6CistLWlucHV0PTxmaWxlPjo6CisgICAgICAgIElucHV0IGZpbGUgbmFtZS4KKworLXY6OgorLS12ZXJib3NlOjoKKyAgICAgICAgQmUgbW9yZSB2ZXJib3NlIChzaG93IHN5bWJvbCBhZGRyZXNzLCBldGMpLgorCistRDo6CistLWR1bXAtcmF3LXRyYWNlOjoKKyAgICAgICAgRHVtcCByYXcgdHJhY2UgaW4gQVNDSUkuCisKIFNFRSBBTFNPCiAtLS0tLS0tLQogbGlua3BlcmY6cGVyZlsxXQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtcHJvYmUudHh0IGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtcHJvYmUudHh0CmluZGV4IDYyZGUxYjcuLjg2Yjc5N2EgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXByb2JlLnR4dAorKysgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1wcm9iZS50eHQKQEAgLTExNSw5ICsxMTUsOSBAQAogCiBMSU5FIFNZTlRBWAogLS0tLS0tLS0tLS0KLUxpbmUgcmFuZ2UgaXMgZGVzY3JpcHRlZCBieSBmb2xsb3dpbmcgc3ludGF4LgorTGluZSByYW5nZSBpcyBkZXNjcmliZWQgYnkgZm9sbG93aW5nIHN5bnRheC4KIAotICJGVU5DWzpSTE5bK05VTXwtUkxOMl1dfFNSQzpBTE5bK05VTXwtQUxOMl0iCisgIkZVTkNbOlJMTlsrTlVNfC1STE4yXV18U1JDWzpBTE5bK05VTXwtQUxOMl1dIgogCiBGVU5DIHNwZWNpZmllcyB0aGUgZnVuY3Rpb24gbmFtZSBvZiBzaG93aW5nIGxpbmVzLiAnUkxOJyBpcyB0aGUgc3RhcnQgbGluZQogbnVtYmVyIGZyb20gZnVuY3Rpb24gZW50cnkgbGluZSwgYW5kICdSTE4yJyBpcyB0aGUgZW5kIGxpbmUgbnVtYmVyLiBBcyBzYW1lIGFzCmRpZmYgLS1naXQgYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1yZWNvcmQudHh0IGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtcmVjb3JkLnR4dAppbmRleCBhOTFmOWY5Li41MjQ2MmFlIDEwMDY0NAotLS0gYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1yZWNvcmQudHh0CisrKyBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXJlY29yZC50eHQKQEAgLTM5LDE1ICszOSwyNCBAQAogICAgICAgICAgIGJlIHBhc3NlZCBhcyBmb2xsb3dzOiAnXG1lbTphZGRyWzpbcl1bd11beF1dJy4KICAgICAgICAgICBJZiB5b3Ugd2FudCB0byBwcm9maWxlIHJlYWQtd3JpdGUgYWNjZXNzZXMgaW4gMHgxMDAwLCBqdXN0IHNldAogICAgICAgICAgICdtZW06MHgxMDAwOnJ3Jy4KKworLS1maWx0ZXI9PGZpbHRlcj46OgorICAgICAgICBFdmVudCBmaWx0ZXIuCisKIC1hOjoKLSAgICAgICAgU3lzdGVtLXdpZGUgY29sbGVjdGlvbi4KKy0tYWxsLWNwdXM6OgorICAgICAgICBTeXN0ZW0td2lkZSBjb2xsZWN0aW9uIGZyb20gYWxsIENQVXMuCiAKIC1sOjoKICAgICAgICAgU2NhbGUgY291bnRlciB2YWx1ZXMuCiAKIC1wOjoKIC0tcGlkPTo6Ci0JUmVjb3JkIGV2ZW50cyBvbiBleGlzdGluZyBwaWQuCisJUmVjb3JkIGV2ZW50cyBvbiBleGlzdGluZyBwcm9jZXNzIElELgorCistdDo6CistLXRpZD06OgorICAgICAgICBSZWNvcmQgZXZlbnRzIG9uIGV4aXN0aW5nIHRocmVhZCBJRC4KIAogLXI6OgogLS1yZWFsdGltZT06OgpAQCAtOTksNiArMTA4LDExIEBACiAtLWRhdGE6OgogCVNhbXBsZSBhZGRyZXNzZXMuCiAKKy1UOjoKKy0tdGltZXN0YW1wOjoKKwlTYW1wbGUgdGltZXN0YW1wcy4gVXNlIGl0IHdpdGggJ3BlcmYgcmVwb3J0IC1EJyB0byBzZWUgdGhlIHRpbWVzdGFtcHMsCisJZm9yIGluc3RhbmNlLgorCiAtbjo6CiAtLW5vLXNhbXBsZXM6OgogCURvbid0IHNhbXBsZS4KQEAgLTEwOSw4ICsxMjMsOCBAQAogCiAtQzo6CiAtLWNwdTo6Ci1Db2xsZWN0IHNhbXBsZXMgb25seSBvbiB0aGUgbGlzdCBvZiBjcHVzIHByb3ZpZGVkLiBNdWx0aXBsZSBDUFVzIGNhbiBiZSBwcm92aWRlZCBhcyBhCi1jb21tYS1zcGVyYXRlZCBsaXN0IHdpdGggbm8gc3BhY2U6IDAsMS4gUmFuZ2VzIG9mIENQVXMgYXJlIHNwZWNpZmllZCB3aXRoIC06IDAtMi4KK0NvbGxlY3Qgc2FtcGxlcyBvbmx5IG9uIHRoZSBsaXN0IG9mIENQVXMgcHJvdmlkZWQuIE11bHRpcGxlIENQVXMgY2FuIGJlIHByb3ZpZGVkIGFzIGEKK2NvbW1hLXNlcGFyYXRlZCBsaXN0IHdpdGggbm8gc3BhY2U6IDAsMS4gUmFuZ2VzIG9mIENQVXMgYXJlIHNwZWNpZmllZCB3aXRoIC06IDAtMi4KIEluIHBlci10aHJlYWQgbW9kZSB3aXRoIGluaGVyaXRhbmNlIG1vZGUgb24gKGRlZmF1bHQpLCBzYW1wbGVzIGFyZSBjYXB0dXJlZCBvbmx5IHdoZW4KIHRoZSB0aHJlYWQgZXhlY3V0ZXMgb24gdGhlIGRlc2lnbmF0ZWQgQ1BVcy4gRGVmYXVsdCBpcyB0byBtb25pdG9yIGFsbCBDUFVzLgogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1yZXBvcnQudHh0IGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtcmVwb3J0LnR4dAppbmRleCAxMjA1MmM5Li44YmEwM2Q2IDEwMDY0NAotLS0gYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1yZXBvcnQudHh0CisrKyBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXJlcG9ydC50eHQKQEAgLTIwLDYgKzIwLDExIEBACiAtaTo6CiAtLWlucHV0PTo6CiAgICAgICAgIElucHV0IGZpbGUgbmFtZS4gKGRlZmF1bHQ6IHBlcmYuZGF0YSkKKworLXY6OgorLS12ZXJib3NlOjoKKyAgICAgICAgQmUgbW9yZSB2ZXJib3NlLiAoc2hvdyBzeW1ib2wgYWRkcmVzcywgZXRjKQorCiAtZDo6CiAtLWRzb3M9OjoKIAlPbmx5IGNvbnNpZGVyIHN5bWJvbHMgaW4gdGhlc2UgZHNvcy4gQ1NWIHRoYXQgdW5kZXJzdGFuZHMKQEAgLTI3LDYgKzMyLDEwIEBACiAtbjo6CiAtLXNob3ctbnItc2FtcGxlczo6CiAJU2hvdyB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgZm9yIGVhY2ggc3ltYm9sCisKKy0tc2hvd2NwdXV0aWxpemF0aW9uOjoKKyAgICAgICAgU2hvdyBzYW1wbGUgcGVyY2VudGFnZSBmb3IgZGlmZmVyZW50IGNwdSBtb2Rlcy4KKwogLVQ6OgogLS10aHJlYWRzOjoKIAlTaG93IHBlci10aHJlYWQgZXZlbnQgY291bnRlcnMKQEAgLTM5LDEyICs0OCwyNCBAQAogCU9ubHkgY29uc2lkZXIgdGhlc2Ugc3ltYm9scy4gQ1NWIHRoYXQgdW5kZXJzdGFuZHMKIAlmaWxlOi8vZmlsZW5hbWUgZW50cmllcy4KIAorLVU6OgorLS1oaWRlLXVucmVzb2x2ZWQ6OgorICAgICAgICBPbmx5IGRpc3BsYXkgZW50cmllcyByZXNvbHZlZCB0byBhIHN5bWJvbC4KKwogLXM6OgogLS1zb3J0PTo6CiAJU29ydCBieSBrZXkocyk6IHBpZCwgY29tbSwgZHNvLCBzeW1ib2wsIHBhcmVudC4KIAorLXA6OgorLS1wYXJlbnQ9PHJlZ2V4Pjo6CisgICAgICAgIHJlZ2V4IGZpbHRlciB0byBpZGVudGlmeSBwYXJlbnQsIHNlZTogJy0tc29ydCBwYXJlbnQnCisKKy14OjoKKy0tZXhjbHVkZS1vdGhlcjo6CisgICAgICAgIE9ubHkgZGlzcGxheSBlbnRyaWVzIHdpdGggcGFyZW50LW1hdGNoLgorCiAtdzo6Ci0tLWZpZWxkLXdpZHRoPTo6CistLWNvbHVtbi13aWR0aHM9PHdpZHRoWyx3aWR0aC4uLl0+OjoKIAlGb3JjZSBlYWNoIGNvbHVtbiB3aWR0aCB0byB0aGUgcHJvdmlkZWQgbGlzdCwgZm9yIGxhcmdlIHRlcm1pbmFsCiAJcmVhZGFiaWxpdHkuCiAKQEAgLTUyLDE5ICs3MywyNiBAQAogLS1maWVsZC1zZXBhcmF0b3I9OjoKIAogCVVzZSBhIHNwZWNpYWwgc2VwYXJhdG9yIGNoYXJhY3RlciBhbmQgZG9uJ3QgcGFkIHdpdGggc3BhY2VzLCByZXBsYWNpbmcKLQlhbGwgb2NjdXJhbmNlcyBvZiB0aGlzIHNlcGFyYXRvciBpbiBzeW1ib2wgbmFtZXMgKGFuZCBvdGhlciBvdXRwdXQpCisJYWxsIG9jY3VycmVuY2VzIG9mIHRoaXMgc2VwYXJhdG9yIGluIHN5bWJvbCBuYW1lcyAoYW5kIG90aGVyIG91dHB1dCkKIAl3aXRoIGEgJy4nIGNoYXJhY3RlciwgdGhhdCB0aHVzIGl0J3MgdGhlIG9ubHkgbm9uIHZhbGlkIHNlcGFyYXRvci4KIAorLUQ6OgorLS1kdW1wLXJhdy10cmFjZTo6CisgICAgICAgIER1bXAgcmF3IHRyYWNlIGluIEFTQ0lJLgorCiAtZyBbdHlwZSxtaW5dOjoKIC0tY2FsbC1ncmFwaDo6Ci0gICAgICAgIERpc3BsYXkgY2FsbGNoYWlucyB1c2luZyB0eXBlIGFuZCBtaW4gcGVyY2VudCB0aHJlc2hvbGQuCisgICAgICAgIERpc3BsYXkgY2FsbCBjaGFpbnMgdXNpbmcgdHlwZSBhbmQgbWluIHBlcmNlbnQgdGhyZXNob2xkLgogCXR5cGUgY2FuIGJlIGVpdGhlcjoKLQktIGZsYXQ6IHNpbmdsZSBjb2x1bW4sIGxpbmVhciBleHBvc3VyZSBvZiBjYWxsY2hhaW5zLgorCS0gZmxhdDogc2luZ2xlIGNvbHVtbiwgbGluZWFyIGV4cG9zdXJlIG9mIGNhbGwgY2hhaW5zLgogCS0gZ3JhcGg6IHVzZSBhIGdyYXBoIHRyZWUsIGRpc3BsYXlpbmcgYWJzb2x1dGUgb3ZlcmhlYWQgcmF0ZXMuCiAJLSBmcmFjdGFsOiBsaWtlIGdyYXBoLCBidXQgZGlzcGxheXMgcmVsYXRpdmUgcmF0ZXMuIEVhY2ggYnJhbmNoIG9mCiAJCSB0aGUgdHJlZSBpcyBjb25zaWRlcmVkIGFzIGEgbmV3IHByb2ZpbGVkIG9iamVjdC4gKwogCURlZmF1bHQ6IGZyYWN0YWwsMC41LgogCistLXByZXR0eT08a2V5Pjo6CisgICAgICAgIFByZXR0eSBwcmludGluZyBzdHlsZS4gIGtleTogbm9ybWFsLCByYXcKKwogLS1zdGRpbzo6IFVzZSB0aGUgc3RkaW8gaW50ZXJmYWNlLgogCiAtLXR1aTo6IFVzZSB0aGUgVFVJIGludGVyZmFjZSwgdGhhdCBpcyBpbnRlZ3JhdGVkIHdpdGggYW5ub3RhdGUgYW5kIGFsbG93cwpAQCAtNzIsNiArMTAwLDI1IEBACiAJcmVxdWlyZXMgYSB0dHksIGlmIG9uZSBpcyBub3QgcHJlc2VudCwgYXMgd2hlbiBwaXBpbmcgdG8gb3RoZXIKIAljb21tYW5kcywgdGhlIHN0ZGlvIGludGVyZmFjZSBpcyB1c2VkLgogCistazo6CistLXZtbGludXg9PGZpbGU+OjoKKyAgICAgICAgdm1saW51eCBwYXRobmFtZQorCistLWthbGxzeW1zPTxmaWxlPjo6CisgICAgICAgIGthbGxzeW1zIHBhdGhuYW1lCisKKy1tOjoKKy0tbW9kdWxlczo6CisgICAgICAgIExvYWQgbW9kdWxlIHN5bWJvbHMuIFdBUk5JTkc6IFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCB3aXRoIC1rIGFuZAorICAgICAgICBhIExJVkUga2VybmVsLgorCistZjo6CistLWZvcmNlOjoKKyAgICAgICAgRG9uJ3QgY29tcGxhaW4sIGRvIGl0LgorCistLXN5bWZzPTxkaXJlY3Rvcnk+OjoKKyAgICAgICAgTG9vayBmb3IgZmlsZXMgd2l0aCBzeW1ib2xzIHJlbGF0aXZlIHRvIHRoaXMgZGlyZWN0b3J5LgorCiBTRUUgQUxTTwogLS0tLS0tLS0KIGxpbmtwZXJmOnBlcmYtc3RhdFsxXQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtc2NoZWQudHh0IGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtc2NoZWQudHh0CmluZGV4IDg0MTc2NDQuLjQ2ODIyZDUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXNjaGVkLnR4dAorKysgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1zY2hlZC50eHQKQEAgLTgsMTEgKzgsMTEgQEAKIFNZTk9QU0lTCiAtLS0tLS0tLQogW3ZlcnNlXQotJ3BlcmYgc2NoZWQnIHtyZWNvcmR8bGF0ZW5jeXxyZXBsYXl8dHJhY2V9CisncGVyZiBzY2hlZCcge3JlY29yZHxsYXRlbmN5fG1hcHxyZXBsYXl8dHJhY2V9CiAKIERFU0NSSVBUSU9OCiAtLS0tLS0tLS0tLQotVGhlcmUgYXJlIGZvdXIgdmFyaWFudHMgb2YgcGVyZiBzY2hlZDoKK1RoZXJlIGFyZSBmaXZlIHZhcmlhbnRzIG9mIHBlcmYgc2NoZWQ6CiAKICAgJ3BlcmYgc2NoZWQgcmVjb3JkIDxjb21tYW5kPicgdG8gcmVjb3JkIHRoZSBzY2hlZHVsaW5nIGV2ZW50cwogICBvZiBhbiBhcmJpdHJhcnkgd29ya2xvYWQuCkBAIC0zMCw4ICszMCwyMiBAQAogICBvZiB0aGUgd29ya2xvYWQgYXMgaXQgb2NjdXJyZWQgd2hlbiBpdCB3YXMgcmVjb3JkZWQgLSBhbmQgY2FuIHJlcGVhdAogICBpdCBhIG51bWJlciBvZiB0aW1lcywgbWVhc3VyaW5nIGl0cyBwZXJmb3JtYW5jZS4pCiAKKyAgJ3BlcmYgc2NoZWQgbWFwJyB0byBwcmludCBhIHRleHR1YWwgY29udGV4dC1zd2l0Y2hpbmcgb3V0bGluZSBvZgorICB3b3JrbG9hZCBjYXB0dXJlZCB2aWEgcGVyZiBzY2hlZCByZWNvcmQuICBDb2x1bW5zIHN0YW5kIGZvcgorICBpbmRpdmlkdWFsIENQVXMsIGFuZCB0aGUgdHdvLWxldHRlciBzaG9ydGN1dHMgc3RhbmQgZm9yIHRhc2tzIHRoYXQKKyAgYXJlIHJ1bm5pbmcgb24gYSBDUFUuIEEgJyonIGRlbm90ZXMgdGhlIENQVSB0aGF0IGhhZCB0aGUgZXZlbnQsIGFuZAorICBhIGRvdCBzaWduYWxzIGFuIGlkbGUgQ1BVLgorCiBPUFRJT05TCiAtLS0tLS0tCistaTo6CistLWlucHV0PTxmaWxlPjo6CisgICAgICAgIElucHV0IGZpbGUgbmFtZS4gKGRlZmF1bHQ6IHBlcmYuZGF0YSkKKworLXY6OgorLS12ZXJib3NlOjoKKyAgICAgICAgQmUgbW9yZSB2ZXJib3NlLiAoc2hvdyBzeW1ib2wgYWRkcmVzcywgZXRjKQorCiAtRDo6CiAtLWR1bXAtcmF3LXRyYWNlPTo6CiAgICAgICAgIERpc3BsYXkgdmVyYm9zZSBkdW1wIG9mIHRoZSBzY2hlZCBkYXRhLgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtc2NyaXB0LXBlcmwudHh0IGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtc2NyaXB0LXBlcmwudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViYjQxZTUKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1zY3JpcHQtcGVybC50eHQKQEAgLTAsMCArMSwyMTcgQEAKK3BlcmYtc2NyaXB0LXBlcmwoMSkKKz09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitwZXJmLXNjcmlwdC1wZXJsIC0gUHJvY2VzcyB0cmFjZSBkYXRhIHdpdGggYSBQZXJsIHNjcmlwdAorCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydwZXJmIHNjcmlwdCcgWy1zIFtQZXJsXTpzY3JpcHRbLnBsXSBdCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitUaGlzIHBlcmYgc2NyaXB0IG9wdGlvbiBpcyB1c2VkIHRvIHByb2Nlc3MgcGVyZiBzY3JpcHQgZGF0YSB1c2luZyBwZXJmJ3MKK2J1aWx0LWluIFBlcmwgaW50ZXJwcmV0ZXIuICBJdCByZWFkcyBhbmQgcHJvY2Vzc2VzIHRoZSBpbnB1dCBmaWxlIGFuZAorZGlzcGxheXMgdGhlIHJlc3VsdHMgb2YgdGhlIHRyYWNlIGFuYWx5c2lzIGltcGxlbWVudGVkIGluIHRoZSBnaXZlbgorUGVybCBzY3JpcHQsIGlmIGFueS4KKworU1RBUlRFUiBTQ1JJUFRTCistLS0tLS0tLS0tLS0tLS0KKworWW91IGNhbiBhdm9pZCByZWFkaW5nIHRoZSByZXN0IG9mIHRoaXMgZG9jdW1lbnQgYnkgcnVubmluZyAncGVyZiBzY3JpcHQKKy1nIHBlcmwnIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyBhbiBleGlzdGluZyBwZXJmLmRhdGEgdHJhY2UgZmlsZS4KK1RoYXQgd2lsbCBnZW5lcmF0ZSBhIHN0YXJ0ZXIgc2NyaXB0IGNvbnRhaW5pbmcgYSBoYW5kbGVyIGZvciBlYWNoIG9mCit0aGUgZXZlbnQgdHlwZXMgaW4gdGhlIHRyYWNlIGZpbGU7IGl0IHNpbXBseSBwcmludHMgZXZlcnkgYXZhaWxhYmxlCitmaWVsZCBmb3IgZWFjaCBldmVudCBpbiB0aGUgdHJhY2UgZmlsZS4KKworWW91IGNhbiBhbHNvIGxvb2sgYXQgdGhlIGV4aXN0aW5nIHNjcmlwdHMgaW4KK34vbGliZXhlYy9wZXJmLWNvcmUvc2NyaXB0cy9wZXJsIGZvciB0eXBpY2FsIGV4YW1wbGVzIHNob3dpbmcgaG93IHRvCitkbyBiYXNpYyB0aGluZ3MgbGlrZSBhZ2dyZWdhdGUgZXZlbnQgZGF0YSwgcHJpbnQgcmVzdWx0cywgZXRjLiAgQWxzbywKK3RoZSBjaGVjay1wZXJmLXNjcmlwdC5wbCBzY3JpcHQsIHdoaWxlIG5vdCBpbnRlcmVzdGluZyBmb3IgaXRzIHJlc3VsdHMsCithdHRlbXB0cyB0byBleGVyY2lzZSBhbGwgb2YgdGhlIG1haW4gc2NyaXB0aW5nIGZlYXR1cmVzLgorCitFVkVOVCBIQU5ETEVSUworLS0tLS0tLS0tLS0tLS0KKworV2hlbiBwZXJmIHNjcmlwdCBpcyBpbnZva2VkIHVzaW5nIGEgdHJhY2Ugc2NyaXB0LCBhIHVzZXItZGVmaW5lZAorJ2hhbmRsZXIgZnVuY3Rpb24nIGlzIGNhbGxlZCBmb3IgZWFjaCBldmVudCBpbiB0aGUgdHJhY2UuICBJZiB0aGVyZSdzCitubyBoYW5kbGVyIGZ1bmN0aW9uIGRlZmluZWQgZm9yIGEgZ2l2ZW4gZXZlbnQgdHlwZSwgdGhlIGV2ZW50IGlzCitpZ25vcmVkIChvciBwYXNzZWQgdG8gYSAndHJhY2VfaGFuZGxlZCcgZnVuY3Rpb24sIHNlZSBiZWxvdykgYW5kIHRoZQorbmV4dCBldmVudCBpcyBwcm9jZXNzZWQuCisKK01vc3Qgb2YgdGhlIGV2ZW50J3MgZmllbGQgdmFsdWVzIGFyZSBwYXNzZWQgYXMgYXJndW1lbnRzIHRvIHRoZQoraGFuZGxlciBmdW5jdGlvbjsgc29tZSBvZiB0aGUgbGVzcyBjb21tb24gb25lcyBhcmVuJ3QgLSB0aG9zZSBhcmUKK2F2YWlsYWJsZSBhcyBjYWxscyBiYWNrIGludG8gdGhlIHBlcmYgZXhlY3V0YWJsZSAoc2VlIGJlbG93KS4KKworQXMgYW4gZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBwZXJmIHJlY29yZCBjb21tYW5kIGNhbiBiZSB1c2VkIHRvIHJlY29yZAorYWxsIHNjaGVkX3dha2V1cCBldmVudHMgaW4gdGhlIHN5c3RlbToKKworICMgcGVyZiByZWNvcmQgLWEgLWUgc2NoZWQ6c2NoZWRfd2FrZXVwCisKK1RyYWNlcyBtZWFudCB0byBiZSBwcm9jZXNzZWQgdXNpbmcgYSBzY3JpcHQgc2hvdWxkIGJlIHJlY29yZGVkIHdpdGgKK3RoZSBhYm92ZSBvcHRpb246IC1hIHRvIGVuYWJsZSBzeXN0ZW0td2lkZSBjb2xsZWN0aW9uLgorCitUaGUgZm9ybWF0IGZpbGUgZm9yIHRoZSBzY2hlZF93YWtlcCBldmVudCBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgZmllbGRzCisoc2VlIC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvZXZlbnRzL3NjaGVkL3NjaGVkX3dha2V1cC9mb3JtYXQpOgorCistLS0tCisgZm9ybWF0OgorICAgICAgICBmaWVsZDp1bnNpZ25lZCBzaG9ydCBjb21tb25fdHlwZTsKKyAgICAgICAgZmllbGQ6dW5zaWduZWQgY2hhciBjb21tb25fZmxhZ3M7CisgICAgICAgIGZpZWxkOnVuc2lnbmVkIGNoYXIgY29tbW9uX3ByZWVtcHRfY291bnQ7CisgICAgICAgIGZpZWxkOmludCBjb21tb25fcGlkOworICAgICAgICBmaWVsZDppbnQgY29tbW9uX2xvY2tfZGVwdGg7CisKKyAgICAgICAgZmllbGQ6Y2hhciBjb21tW1RBU0tfQ09NTV9MRU5dOworICAgICAgICBmaWVsZDpwaWRfdCBwaWQ7CisgICAgICAgIGZpZWxkOmludCBwcmlvOworICAgICAgICBmaWVsZDppbnQgc3VjY2VzczsKKyAgICAgICAgZmllbGQ6aW50IHRhcmdldF9jcHU7CistLS0tCisKK1RoZSBoYW5kbGVyIGZ1bmN0aW9uIGZvciB0aGlzIGV2ZW50IHdvdWxkIGJlIGRlZmluZWQgYXM6CisKKy0tLS0KK3N1YiBzY2hlZDo6c2NoZWRfd2FrZXVwCit7CisgICBteSAoJGV2ZW50X25hbWUsICRjb250ZXh0LCAkY29tbW9uX2NwdSwgJGNvbW1vbl9zZWNzLAorICAgICAgICRjb21tb25fbnNlY3MsICRjb21tb25fcGlkLCAkY29tbW9uX2NvbW0sCisgICAgICAgJGNvbW0sICRwaWQsICRwcmlvLCAkc3VjY2VzcywgJHRhcmdldF9jcHUpID0gQF87Cit9CistLS0tCisKK1RoZSBoYW5kbGVyIGZ1bmN0aW9uIHRha2VzIHRoZSBmb3JtIHN1YnN5c3RlbTo6ZXZlbnRfbmFtZS4KKworVGhlICRjb21tb25fKiBhcmd1bWVudHMgaW4gdGhlIGhhbmRsZXIncyBhcmd1bWVudCBsaXN0IGFyZSB0aGUgc2V0IG9mCithcmd1bWVudHMgcGFzc2VkIHRvIGFsbCBldmVudCBoYW5kbGVyczsgc29tZSBvZiB0aGUgZmllbGRzIGNvcnJlc3BvbmQKK3RvIHRoZSBjb21tb25fKiBmaWVsZHMgaW4gdGhlIGZvcm1hdCBmaWxlLCBidXQgc29tZSBhcmUgc3ludGhlc2l6ZWQsCithbmQgc29tZSBvZiB0aGUgY29tbW9uXyogZmllbGRzIGFyZW4ndCBjb21tb24gZW5vdWdoIHRvIHRvIGJlIHBhc3NlZAordG8gZXZlcnkgZXZlbnQgYXMgYXJndW1lbnRzIGJ1dCBhcmUgYXZhaWxhYmxlIGFzIGxpYnJhcnkgZnVuY3Rpb25zLgorCitIZXJlJ3MgYSBicmllZiBkZXNjcmlwdGlvbiBvZiBlYWNoIG9mIHRoZSBpbnZhcmlhbnQgZXZlbnQgYXJnczoKKworICRldmVudF9uYW1lIAkgIAkgICAgdGhlIG5hbWUgb2YgdGhlIGV2ZW50IGFzIHRleHQKKyAkY29udGV4dAkJICAgIGFuIG9wYXF1ZSAnY29va2llJyB1c2VkIGluIGNhbGxzIGJhY2sgaW50byBwZXJmCisgJGNvbW1vbl9jcHUJCSAgICB0aGUgY3B1IHRoZSBldmVudCBvY2N1cnJlZCBvbgorICRjb21tb25fc2VjcwkJICAgIHRoZSBzZWNzIHBvcnRpb24gb2YgdGhlIGV2ZW50IHRpbWVzdGFtcAorICRjb21tb25fbnNlY3MJCSAgICB0aGUgbnNlY3MgcG9ydGlvbiBvZiB0aGUgZXZlbnQgdGltZXN0YW1wCisgJGNvbW1vbl9waWQJCSAgICB0aGUgcGlkIG9mIHRoZSBjdXJyZW50IHRhc2sKKyAkY29tbW9uX2NvbW0JCSAgICB0aGUgbmFtZSBvZiB0aGUgY3VycmVudCBwcm9jZXNzCisKK0FsbCBvZiB0aGUgcmVtYWluaW5nIGZpZWxkcyBpbiB0aGUgZXZlbnQncyBmb3JtYXQgZmlsZSBoYXZlCitjb3VudGVycGFydHMgYXMgaGFuZGxlciBmdW5jdGlvbiBhcmd1bWVudHMgb2YgdGhlIHNhbWUgbmFtZSwgYXMgY2FuIGJlCitzZWVuIGluIHRoZSBleGFtcGxlIGFib3ZlLgorCitUaGUgYWJvdmUgcHJvdmlkZXMgdGhlIGJhc2ljcyBuZWVkZWQgdG8gZGlyZWN0bHkgYWNjZXNzIGV2ZXJ5IGZpZWxkIG9mCitldmVyeSBldmVudCBpbiBhIHRyYWNlLCB3aGljaCBjb3ZlcnMgOTAlIG9mIHdoYXQgeW91IG5lZWQgdG8ga25vdyB0bword3JpdGUgYSB1c2VmdWwgdHJhY2Ugc2NyaXB0LiAgVGhlIHNlY3Rpb25zIGJlbG93IGNvdmVyIHRoZSByZXN0LgorCitTQ1JJUFQgTEFZT1VUCistLS0tLS0tLS0tLS0tCisKK0V2ZXJ5IHBlcmYgc2NyaXB0IFBlcmwgc2NyaXB0IHNob3VsZCBzdGFydCBieSBzZXR0aW5nIHVwIGEgUGVybCBtb2R1bGUKK3NlYXJjaCBwYXRoIGFuZCAndXNlJ2luZyBhIGZldyBzdXBwb3J0IG1vZHVsZXMgKHNlZSBtb2R1bGUKK2Rlc2NyaXB0aW9ucyBiZWxvdyk6CisKKy0tLS0KKyB1c2UgbGliICIkRU5WeydQRVJGX0VYRUNfUEFUSCd9L3NjcmlwdHMvcGVybC9wZXJmLXNjcmlwdC1VdGlsL2xpYiI7CisgdXNlIGxpYiAiLi9wZXJmLXNjcmlwdC1VdGlsL2xpYiI7CisgdXNlIFBlcmY6OlRyYWNlOjpDb3JlOworIHVzZSBQZXJmOjpUcmFjZTo6Q29udGV4dDsKKyB1c2UgUGVyZjo6VHJhY2U6OlV0aWw7CistLS0tCisKK1RoZSByZXN0IG9mIHRoZSBzY3JpcHQgY2FuIGNvbnRhaW4gaGFuZGxlciBmdW5jdGlvbnMgYW5kIHN1cHBvcnQKK2Z1bmN0aW9ucyBpbiBhbnkgb3JkZXIuCisKK0FzaWRlIGZyb20gdGhlIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb25zIGRpc2N1c3NlZCBhYm92ZSwgZXZlcnkgc2NyaXB0CitjYW4gaW1wbGVtZW50IGEgc2V0IG9mIG9wdGlvbmFsIGZ1bmN0aW9uczoKKworKnRyYWNlX2JlZ2luKiwgaWYgZGVmaW5lZCwgaXMgY2FsbGVkIGJlZm9yZSBhbnkgZXZlbnQgaXMgcHJvY2Vzc2VkIGFuZAorZ2l2ZXMgc2NyaXB0cyBhIGNoYW5jZSB0byBkbyBzZXR1cCB0YXNrczoKKworLS0tLQorIHN1YiB0cmFjZV9iZWdpbgorIHsKKyB9CistLS0tCisKKyp0cmFjZV9lbmQqLCBpZiBkZWZpbmVkLCBpcyBjYWxsZWQgYWZ0ZXIgYWxsIGV2ZW50cyBoYXZlIGJlZW4KKyBwcm9jZXNzZWQgYW5kIGdpdmVzIHNjcmlwdHMgYSBjaGFuY2UgdG8gZG8gZW5kLW9mLXNjcmlwdCB0YXNrcywgc3VjaAorIGFzIGRpc3BsYXkgcmVzdWx0czoKKworLS0tLQorc3ViIHRyYWNlX2VuZAoreworfQorLS0tLQorCisqdHJhY2VfdW5oYW5kbGVkKiwgaWYgZGVmaW5lZCwgaXMgY2FsbGVkIGFmdGVyIGZvciBhbnkgZXZlbnQgdGhhdAorIGRvZXNuJ3QgaGF2ZSBhIGhhbmRsZXIgZXhwbGljaXRseSBkZWZpbmVkIGZvciBpdC4gIFRoZSBzdGFuZGFyZCBzZXQKKyBvZiBjb21tb24gYXJndW1lbnRzIGFyZSBwYXNzZWQgaW50byBpdDoKKworLS0tLQorc3ViIHRyYWNlX3VuaGFuZGxlZAoreworICAgIG15ICgkZXZlbnRfbmFtZSwgJGNvbnRleHQsICRjb21tb25fY3B1LCAkY29tbW9uX3NlY3MsCisgICAgICAgICRjb21tb25fbnNlY3MsICRjb21tb25fcGlkLCAkY29tbW9uX2NvbW0pID0gQF87Cit9CistLS0tCisKK1RoZSByZW1haW5pbmcgc2VjdGlvbnMgcHJvdmlkZSBkZXNjcmlwdGlvbnMgb2YgZWFjaCBvZiB0aGUgYXZhaWxhYmxlCitidWlsdC1pbiBwZXJmIHNjcmlwdCBQZXJsIG1vZHVsZXMgYW5kIHRoZWlyIGFzc29jaWF0ZWQgZnVuY3Rpb25zLgorCitBVkFJTEFCTEUgTU9EVUxFUyBBTkQgRlVOQ1RJT05TCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBmb2xsb3dpbmcgc2VjdGlvbnMgZGVzY3JpYmUgdGhlIGZ1bmN0aW9ucyBhbmQgdmFyaWFibGVzIGF2YWlsYWJsZQordmlhIHRoZSB2YXJpb3VzIFBlcmY6OlRyYWNlOjoqIFBlcmwgbW9kdWxlcy4gIFRvIHVzZSB0aGUgZnVuY3Rpb25zIGFuZAordmFyaWFibGVzIGZyb20gdGhlIGdpdmVuIG1vZHVsZSwgYWRkIHRoZSBjb3JyZXNwb25kaW5nICd1c2UKK1BlcmY6OlRyYWNlOjpYWFgnIGxpbmUgdG8geW91ciBwZXJmIHNjcmlwdCBzY3JpcHQuCisKK1BlcmY6OlRyYWNlOjpDb3JlIE1vZHVsZQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1RoZXNlIGZ1bmN0aW9ucyBwcm92aWRlIHNvbWUgZXNzZW50aWFsIGZ1bmN0aW9ucyB0byB1c2VyIHNjcmlwdHMuCisKK1RoZSAqZmxhZ19zdHIqIGFuZCAqc3ltYm9sX3N0ciogZnVuY3Rpb25zIHByb3ZpZGUgaHVtYW4tcmVhZGFibGUKK3N0cmluZ3MgZm9yIGZsYWcgYW5kIHN5bWJvbGljIGZpZWxkcy4gIFRoZXNlIGNvcnJlc3BvbmQgdG8gdGhlIHN0cmluZ3MKK2FuZCB2YWx1ZXMgcGFyc2VkIGZyb20gdGhlICdwcmludCBmbXQnIGZpZWxkcyBvZiB0aGUgZXZlbnQgZm9ybWF0CitmaWxlczoKKworICBmbGFnX3N0cigkZXZlbnRfbmFtZSwgJGZpZWxkX25hbWUsICRmaWVsZF92YWx1ZSkgLSByZXR1cm5zIHRoZSBzdHJpbmcgcmVwcmVzZW50aW9uIGNvcnJlc3BvbmRpbmcgdG8gJGZpZWxkX3ZhbHVlIGZvciB0aGUgZmxhZyBmaWVsZCAkZmllbGRfbmFtZSBvZiBldmVudCAkZXZlbnRfbmFtZQorICBzeW1ib2xfc3RyKCRldmVudF9uYW1lLCAkZmllbGRfbmFtZSwgJGZpZWxkX3ZhbHVlKSAtIHJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRpb24gY29ycmVzcG9uZGluZyB0byAkZmllbGRfdmFsdWUgZm9yIHRoZSBzeW1ib2xpYyBmaWVsZCAkZmllbGRfbmFtZSBvZiBldmVudCAkZXZlbnRfbmFtZQorCitQZXJmOjpUcmFjZTo6Q29udGV4dCBNb2R1bGUKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitTb21lIG9mIHRoZSAnY29tbW9uJyBmaWVsZHMgaW4gdGhlIGV2ZW50IGZvcm1hdCBmaWxlIGFyZW4ndCBhbGwgdGhhdAorY29tbW9uLCBidXQgbmVlZCB0byBiZSBtYWRlIGFjY2Vzc2libGUgdG8gdXNlciBzY3JpcHRzIG5vbmV0aGVsZXNzLgorCitQZXJmOjpUcmFjZTo6Q29udGV4dCBkZWZpbmVzIGEgc2V0IG9mIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSB1c2VkIHRvCithY2Nlc3MgdGhpcyBkYXRhIGluIHRoZSBjb250ZXh0IG9mIHRoZSBjdXJyZW50IGV2ZW50LiAgRWFjaCBvZiB0aGVzZQorZnVuY3Rpb25zIGV4cGVjdHMgYSAkY29udGV4dCB2YXJpYWJsZSwgd2hpY2ggaXMgdGhlIHNhbWUgYXMgdGhlCiskY29udGV4dCB2YXJpYWJsZSBwYXNzZWQgaW50byBldmVyeSBldmVudCBoYW5kbGVyIGFzIHRoZSBzZWNvbmQKK2FyZ3VtZW50LgorCisgY29tbW9uX3BjKCRjb250ZXh0KSAtIHJldHVybnMgY29tbW9uX3ByZWVtcHQgY291bnQgZm9yIHRoZSBjdXJyZW50IGV2ZW50CisgY29tbW9uX2ZsYWdzKCRjb250ZXh0KSAtIHJldHVybnMgY29tbW9uX2ZsYWdzIGZvciB0aGUgY3VycmVudCBldmVudAorIGNvbW1vbl9sb2NrX2RlcHRoKCRjb250ZXh0KSAtIHJldHVybnMgY29tbW9uX2xvY2tfZGVwdGggZm9yIHRoZSBjdXJyZW50IGV2ZW50CisKK1BlcmY6OlRyYWNlOjpVdGlsIE1vZHVsZQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1ZhcmlvdXMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHVzZSB3aXRoIHBlcmYgc2NyaXB0OgorCisgIG5zZWNzKCRzZWNzLCAkbnNlY3MpIC0gcmV0dXJucyB0b3RhbCBuc2VjcyBnaXZlbiBzZWNzL25zZWNzIHBhaXIKKyAgbnNlY3Nfc2VjcygkbnNlY3MpIC0gcmV0dXJucyB3aG9sZSBzZWNzIHBvcnRpb24gZ2l2ZW4gbnNlY3MKKyAgbnNlY3NfbnNlY3MoJG5zZWNzKSAtIHJldHVybnMgbnNlY3MgcmVtYWluZGVyIGdpdmVuIG5zZWNzCisgIG5zZWNzX3N0cigkbnNlY3MpIC0gcmV0dXJucyBwcmludGFibGUgc3RyaW5nIGluIHRoZSBmb3JtIHNlY3MubnNlY3MKKyAgYXZnKCR0b3RhbCwgJG4pIC0gcmV0dXJucyBhdmVyYWdlIGdpdmVuIGEgc3VtIGFuZCBhIHRvdGFsIG51bWJlciBvZiB2YWx1ZXMKKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rcGVyZjpwZXJmLXNjcmlwdFsxXQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtc2NyaXB0LXB5dGhvbi50eHQgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1zY3JpcHQtcHl0aG9uLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmIzODI3Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtc2NyaXB0LXB5dGhvbi50eHQKQEAgLTAsMCArMSw2MjMgQEAKK3BlcmYtc2NyaXB0LXB5dGhvbigxKQorPT09PT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorcGVyZi1zY3JpcHQtcHl0aG9uIC0gUHJvY2VzcyB0cmFjZSBkYXRhIHdpdGggYSBQeXRob24gc2NyaXB0CisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ3BlcmYgc2NyaXB0JyBbLXMgW1B5dGhvbl06c2NyaXB0Wy5weV0gXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworVGhpcyBwZXJmIHNjcmlwdCBvcHRpb24gaXMgdXNlZCB0byBwcm9jZXNzIHBlcmYgc2NyaXB0IGRhdGEgdXNpbmcgcGVyZidzCitidWlsdC1pbiBQeXRob24gaW50ZXJwcmV0ZXIuICBJdCByZWFkcyBhbmQgcHJvY2Vzc2VzIHRoZSBpbnB1dCBmaWxlIGFuZAorZGlzcGxheXMgdGhlIHJlc3VsdHMgb2YgdGhlIHRyYWNlIGFuYWx5c2lzIGltcGxlbWVudGVkIGluIHRoZSBnaXZlbgorUHl0aG9uIHNjcmlwdCwgaWYgYW55LgorCitBIFFVSUNLIEVYQU1QTEUKKy0tLS0tLS0tLS0tLS0tLQorCitUaGlzIHNlY3Rpb24gc2hvd3MgdGhlIHByb2Nlc3MsIHN0YXJ0IHRvIGZpbmlzaCwgb2YgY3JlYXRpbmcgYSB3b3JraW5nCitQeXRob24gc2NyaXB0IHRoYXQgYWdncmVnYXRlcyBhbmQgZXh0cmFjdHMgdXNlZnVsIGluZm9ybWF0aW9uIGZyb20gYQorcmF3IHBlcmYgc2NyaXB0IHN0cmVhbS4gIFlvdSBjYW4gYXZvaWQgcmVhZGluZyB0aGUgcmVzdCBvZiB0aGlzCitkb2N1bWVudCBpZiBhbiBleGFtcGxlIGlzIGVub3VnaCBmb3IgeW91OyB0aGUgcmVzdCBvZiB0aGUgZG9jdW1lbnQKK3Byb3ZpZGVzIG1vcmUgZGV0YWlscyBvbiBlYWNoIHN0ZXAgYW5kIGxpc3RzIHRoZSBsaWJyYXJ5IGZ1bmN0aW9ucworYXZhaWxhYmxlIHRvIHNjcmlwdCB3cml0ZXJzLgorCitUaGlzIGV4YW1wbGUgYWN0dWFsbHkgZGV0YWlscyB0aGUgc3RlcHMgdGhhdCB3ZXJlIHVzZWQgdG8gY3JlYXRlIHRoZQorJ3N5c2NhbGwtY291bnRzJyBzY3JpcHQgeW91IHNlZSB3aGVuIHlvdSBsaXN0IHRoZSBhdmFpbGFibGUgcGVyZiBzY3JpcHQKK3NjcmlwdHMgdmlhICdwZXJmIHNjcmlwdCAtbCcuICBBcyBzdWNoLCB0aGlzIHNjcmlwdCBhbHNvIHNob3dzIGhvdyB0bworaW50ZWdyYXRlIHlvdXIgc2NyaXB0IGludG8gdGhlIGxpc3Qgb2YgZ2VuZXJhbC1wdXJwb3NlICdwZXJmIHNjcmlwdCcKK3NjcmlwdHMgbGlzdGVkIGJ5IHRoYXQgY29tbWFuZC4KKworVGhlIHN5c2NhbGwtY291bnRzIHNjcmlwdCBpcyBhIHNpbXBsZSBzY3JpcHQsIGJ1dCBkZW1vbnN0cmF0ZXMgYWxsIHRoZQorYmFzaWMgaWRlYXMgbmVjZXNzYXJ5IHRvIGNyZWF0ZSBhIHVzZWZ1bCBzY3JpcHQuICBIZXJlJ3MgYW4gZXhhbXBsZQorb2YgaXRzIG91dHB1dCAoc3lzY2FsbCBuYW1lcyBhcmUgbm90IHlldCBzdXBwb3J0ZWQsIHRoZXkgd2lsbCBhcHBlYXIKK2FzIG51bWJlcnMpOgorCistLS0tCitzeXNjYWxsIGV2ZW50czoKKworZXZlbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgLS0tLS0tLS0tLS0KK3N5c193cml0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0NTUwNjcKK3N5c19nZXRkZW50cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQwNzIKK3N5c19jbG9zZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwMzcKK3N5c19zd2Fwb2ZmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3NjkKK3N5c19yZWFkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5MjMKK3N5c19zY2hlZF9zZXRwYXJhbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4MjYKK3N5c19vcGVuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMzEKK3N5c19uZXdmc3RhdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMjYKK3N5c19tbWFwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMTcKK3N5c19tdW5tYXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMTYKK3N5c19mdXRleCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNDEKK3N5c19zZWxlY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDIKK3N5c19wb2xsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgODQKK3N5c19zZXRpdGltZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKK3N5c193cml0ZXYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKzE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKK3N5c19sc2VlayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKK3N5c19ydF9zaWdwcm9jbWFzayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKK3N5c193YWl0NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKK3N5c19pb2N0bCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKK3N5c19zZXRfcm9idXN0X2xpc3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKK3N5c19leGl0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKzU2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKK3N5c19hY2Nlc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKy0tLS0KKworQmFzaWNhbGx5IG91ciB0YXNrIGlzIHRvIGtlZXAgYSBwZXItc3lzY2FsbCB0YWxseSB0aGF0IGdldHMgdXBkYXRlZAorZXZlcnkgdGltZSBhIHN5c3RlbSBjYWxsIG9jY3VycyBpbiB0aGUgc3lzdGVtLiAgT3VyIHNjcmlwdCB3aWxsIGRvCit0aGF0LCBidXQgZmlyc3Qgd2UgbmVlZCB0byByZWNvcmQgdGhlIGRhdGEgdGhhdCB3aWxsIGJlIHByb2Nlc3NlZCBieQordGhhdCBzY3JpcHQuICBUaGVvcmV0aWNhbGx5LCB0aGVyZSBhcmUgYSBjb3VwbGUgb2Ygd2F5cyB3ZSBjb3VsZCBkbwordGhhdDoKKworLSB3ZSBjb3VsZCBlbmFibGUgZXZlcnkgZXZlbnQgdW5kZXIgdGhlIHRyYWNpbmcvZXZlbnRzL3N5c2NhbGxzCisgIGRpcmVjdG9yeSwgYnV0IHRoaXMgaXMgb3ZlciA2MDAgc3lzY2FsbHMsIHdlbGwgYmV5b25kIHRoZSBudW1iZXIKKyAgYWxsb3dhYmxlIGJ5IHBlcmYuICBUaGVzZSBpbmRpdmlkdWFsIHN5c2NhbGwgZXZlbnRzIHdpbGwgaG93ZXZlciBiZQorICB1c2VmdWwgaWYgd2Ugd2FudCB0byBsYXRlciB1c2UgdGhlIGd1aWRhbmNlIHdlIGdldCBmcm9tIHRoZQorICBnZW5lcmFsLXB1cnBvc2Ugc2NyaXB0cyB0byBkcmlsbCBkb3duIGFuZCBnZXQgbW9yZSBkZXRhaWwgYWJvdXQKKyAgaW5kaXZpZHVhbCBzeXNjYWxscyBvZiBpbnRlcmVzdC4KKworLSB3ZSBjYW4gZW5hYmxlIHRoZSBzeXNfZW50ZXIgYW5kL29yIHN5c19leGl0IHN5c2NhbGxzIGZvdW5kIHVuZGVyCisgIHRyYWNpbmcvZXZlbnRzL3Jhd19zeXNjYWxscy4gIFRoZXNlIGFyZSBjYWxsZWQgZm9yIGFsbCBzeXNjYWxsczsgdGhlCisgICdpZCcgZmllbGQgY2FuIGJlIHVzZWQgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBpbmRpdmlkdWFsIHN5c2NhbGwKKyAgbnVtYmVycy4KKworRm9yIHRoaXMgc2NyaXB0LCB3ZSBvbmx5IG5lZWQgdG8ga25vdyB0aGF0IGEgc3lzY2FsbCB3YXMgZW50ZXJlZDsgd2UKK2Rvbid0IGNhcmUgaG93IGl0IGV4aXRlZCwgc28gd2UnbGwgdXNlICdwZXJmIHJlY29yZCcgdG8gcmVjb3JkIG9ubHkKK3RoZSBzeXNfZW50ZXIgZXZlbnRzOgorCistLS0tCisjIHBlcmYgcmVjb3JkIC1hIC1lIHJhd19zeXNjYWxsczpzeXNfZW50ZXIKKworXkNbIHBlcmYgcmVjb3JkOiBXb2tlbiB1cCAxIHRpbWVzIHRvIHdyaXRlIGRhdGEgXQorWyBwZXJmIHJlY29yZDogQ2FwdHVyZWQgYW5kIHdyb3RlIDU2LjU0NSBNQiBwZXJmLmRhdGEgKH4yNDcwNTAzIHNhbXBsZXMpIF0KKy0tLS0KKworVGhlIG9wdGlvbnMgYmFzaWNhbGx5IHNheSB0byBjb2xsZWN0IGRhdGEgZm9yIGV2ZXJ5IHN5c2NhbGwgZXZlbnQKK3N5c3RlbS13aWRlIGFuZCBtdWx0aXBsZXggdGhlIHBlci1jcHUgb3V0cHV0IGludG8gYSBzaW5nbGUgc3RyZWFtLgorVGhhdCBzaW5nbGUgc3RyZWFtIHdpbGwgYmUgcmVjb3JkZWQgaW4gYSBmaWxlIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeQorY2FsbGVkIHBlcmYuZGF0YS4KKworT25jZSB3ZSBoYXZlIGEgcGVyZi5kYXRhIGZpbGUgY29udGFpbmluZyBvdXIgZGF0YSwgd2UgY2FuIHVzZSB0aGUgLWcKKydwZXJmIHNjcmlwdCcgb3B0aW9uIHRvIGdlbmVyYXRlIGEgUHl0aG9uIHNjcmlwdCB0aGF0IHdpbGwgY29udGFpbiBhCitjYWxsYmFjayBoYW5kbGVyIGZvciBlYWNoIGV2ZW50IHR5cGUgZm91bmQgaW4gdGhlIHBlcmYuZGF0YSB0cmFjZQorc3RyZWFtIChmb3IgbW9yZSBkZXRhaWxzLCBzZWUgdGhlIFNUQVJURVIgU0NSSVBUUyBzZWN0aW9uKS4KKworLS0tLQorIyBwZXJmIHNjcmlwdCAtZyBweXRob24KK2dlbmVyYXRlZCBQeXRob24gc2NyaXB0OiBwZXJmLXNjcmlwdC5weQorCitUaGUgb3V0cHV0IGZpbGUgY3JlYXRlZCBhbHNvIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBpcyBuYW1lZAorcGVyZi1zY3JpcHQucHkuICBIZXJlJ3MgdGhlIGZpbGUgaW4gaXRzIGVudGlyZXR5OgorCisjIHBlcmYgc2NyaXB0IGV2ZW50IGhhbmRsZXJzLCBnZW5lcmF0ZWQgYnkgcGVyZiBzY3JpcHQgLWcgcHl0aG9uCisjIExpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCBMaWNlbnNlIHZlcnNpb24gMgorCisjIFRoZSBjb21tb25fKiBldmVudCBoYW5kbGVyIGZpZWxkcyBhcmUgdGhlIG1vc3QgdXNlZnVsIGZpZWxkcyBjb21tb24gdG8KKyMgYWxsIGV2ZW50cy4gIFRoZXkgZG9uJ3QgbmVjZXNzYXJpbHkgY29ycmVzcG9uZCB0byB0aGUgJ2NvbW1vbl8qJyBmaWVsZHMKKyMgaW4gdGhlIGZvcm1hdCBmaWxlcy4gIFRob3NlIGZpZWxkcyBub3QgYXZhaWxhYmxlIGFzIGhhbmRsZXIgcGFyYW1zIGNhbgorIyBiZSByZXRyaWV2ZWQgdXNpbmcgUHl0aG9uIGZ1bmN0aW9ucyBvZiB0aGUgZm9ybSBjb21tb25fKihjb250ZXh0KS4KKyMgU2VlIHRoZSBwZXJmLXNjcmlwdC1weXRob24gRG9jdW1lbnRhdGlvbiBmb3IgdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIGZ1bmN0aW9ucy4KKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCisKK3N5cy5wYXRoLmFwcGVuZChvcy5lbnZpcm9uWydQRVJGX0VYRUNfUEFUSCddICsgXAorCScvc2NyaXB0cy9weXRob24vcGVyZi1zY3JpcHQtVXRpbC9saWIvUGVyZi9UcmFjZScpCisKK2Zyb20gcGVyZl90cmFjZV9jb250ZXh0IGltcG9ydCAqCitmcm9tIENvcmUgaW1wb3J0ICoKKworZGVmIHRyYWNlX2JlZ2luKCk6CisJcHJpbnQgImluIHRyYWNlX2JlZ2luIgorCitkZWYgdHJhY2VfZW5kKCk6CisJcHJpbnQgImluIHRyYWNlX2VuZCIKKworZGVmIHJhd19zeXNjYWxsc19fc3lzX2VudGVyKGV2ZW50X25hbWUsIGNvbnRleHQsIGNvbW1vbl9jcHUsCisJY29tbW9uX3NlY3MsIGNvbW1vbl9uc2VjcywgY29tbW9uX3BpZCwgY29tbW9uX2NvbW0sCisJaWQsIGFyZ3MpOgorCQlwcmludF9oZWFkZXIoZXZlbnRfbmFtZSwgY29tbW9uX2NwdSwgY29tbW9uX3NlY3MsIGNvbW1vbl9uc2VjcywKKwkJCWNvbW1vbl9waWQsIGNvbW1vbl9jb21tKQorCisJCXByaW50ICJpZD0lZCwgYXJncz0lc1xuIiAlIFwKKwkJKGlkLCBhcmdzKSwKKworZGVmIHRyYWNlX3VuaGFuZGxlZChldmVudF9uYW1lLCBjb250ZXh0LCBjb21tb25fY3B1LCBjb21tb25fc2VjcywgY29tbW9uX25zZWNzLAorCQljb21tb25fcGlkLCBjb21tb25fY29tbSk6CisJCXByaW50X2hlYWRlcihldmVudF9uYW1lLCBjb21tb25fY3B1LCBjb21tb25fc2VjcywgY29tbW9uX25zZWNzLAorCQljb21tb25fcGlkLCBjb21tb25fY29tbSkKKworZGVmIHByaW50X2hlYWRlcihldmVudF9uYW1lLCBjcHUsIHNlY3MsIG5zZWNzLCBwaWQsIGNvbW0pOgorCXByaW50ICIlLTIwcyAlNXUgJTA1dS4lMDl1ICU4dSAlLTIwcyAiICUgXAorCShldmVudF9uYW1lLCBjcHUsIHNlY3MsIG5zZWNzLCBwaWQsIGNvbW0pLAorLS0tLQorCitBdCB0aGUgdG9wIGlzIGEgY29tbWVudCBibG9jayBmb2xsb3dlZCBieSBzb21lIGltcG9ydCBzdGF0ZW1lbnRzIGFuZCBhCitwYXRoIGFwcGVuZCB3aGljaCBldmVyeSBwZXJmIHNjcmlwdCBzY3JpcHQgc2hvdWxkIGluY2x1ZGUuCisKK0ZvbGxvd2luZyB0aGF0IGFyZSBhIGNvdXBsZSBnZW5lcmF0ZWQgZnVuY3Rpb25zLCB0cmFjZV9iZWdpbigpIGFuZAordHJhY2VfZW5kKCksIHdoaWNoIGFyZSBjYWxsZWQgYXQgdGhlIGJlZ2lubmluZyBhbmQgdGhlIGVuZCBvZiB0aGUKK3NjcmlwdCByZXNwZWN0aXZlbHkgKGZvciBtb3JlIGRldGFpbHMsIHNlZSB0aGUgU0NSSVBUX0xBWU9VVCBzZWN0aW9uCitiZWxvdykuCisKK0ZvbGxvd2luZyB0aG9zZSBhcmUgdGhlICdldmVudCBoYW5kbGVyJyBmdW5jdGlvbnMgZ2VuZXJhdGVkIG9uZSBmb3IKK2V2ZXJ5IGV2ZW50IGluIHRoZSAncGVyZiByZWNvcmQnIG91dHB1dC4gIFRoZSBoYW5kbGVyIGZ1bmN0aW9ucyB0YWtlCit0aGUgZm9ybSBzdWJzeXN0ZW1fX2V2ZW50X25hbWUsIGFuZCBjb250YWluIG5hbWVkIHBhcmFtZXRlcnMsIG9uZSBmb3IKK2VhY2ggZmllbGQgaW4gdGhlIGV2ZW50OyBpbiB0aGlzIGNhc2UsIHRoZXJlJ3Mgb25seSBvbmUgZXZlbnQsCityYXdfc3lzY2FsbHNfX3N5c19lbnRlcigpLiAgKHNlZSB0aGUgRVZFTlQgSEFORExFUlMgc2VjdGlvbiBiZWxvdyBmb3IKK21vcmUgaW5mbyBvbiBldmVudCBoYW5kbGVycykuCisKK1RoZSBmaW5hbCBjb3VwbGUgb2YgZnVuY3Rpb25zIGFyZSwgbGlrZSB0aGUgYmVnaW4gYW5kIGVuZCBmdW5jdGlvbnMsCitnZW5lcmF0ZWQgZm9yIGV2ZXJ5IHNjcmlwdC4gIFRoZSBmaXJzdCwgdHJhY2VfdW5oYW5kbGVkKCksIGlzIGNhbGxlZAorZXZlcnkgdGltZSB0aGUgc2NyaXB0IGZpbmRzIGFuIGV2ZW50IGluIHRoZSBwZXJmLmRhdGEgZmlsZSB0aGF0Citkb2Vzbid0IGNvcnJlc3BvbmQgdG8gYW55IGV2ZW50IGhhbmRsZXIgaW4gdGhlIHNjcmlwdC4gIFRoaXMgY291bGQKK21lYW4gZWl0aGVyIHRoYXQgdGhlIHJlY29yZCBzdGVwIHJlY29yZGVkIGV2ZW50IHR5cGVzIHRoYXQgaXQgd2Fzbid0CityZWFsbHkgaW50ZXJlc3RlZCBpbiwgb3IgdGhlIHNjcmlwdCB3YXMgcnVuIGFnYWluc3QgYSB0cmFjZSBmaWxlIHRoYXQKK2RvZXNuJ3QgY29ycmVzcG9uZCB0byB0aGUgc2NyaXB0LgorCitUaGUgc2NyaXB0IGdlbmVyYXRlZCBieSAtZyBvcHRpb24gc2ltcGx5IHByaW50cyBhIGxpbmUgZm9yIGVhY2gKK2V2ZW50IGZvdW5kIGluIHRoZSB0cmFjZSBzdHJlYW0gaS5lLiBpdCBiYXNpY2FsbHkganVzdCBkdW1wcyB0aGUgZXZlbnQKK2FuZCBpdHMgcGFyYW1ldGVyIHZhbHVlcyB0byBzdGRvdXQuICBUaGUgcHJpbnRfaGVhZGVyKCkgZnVuY3Rpb24gaXMKK3NpbXBseSBhIHV0aWxpdHkgZnVuY3Rpb24gdXNlZCBmb3IgdGhhdCBwdXJwb3NlLiAgTGV0J3MgcmVuYW1lIHRoZQorc2NyaXB0IGFuZCBydW4gaXQgdG8gc2VlIHRoZSBkZWZhdWx0IG91dHB1dDoKKworLS0tLQorIyBtdiBwZXJmLXNjcmlwdC5weSBzeXNjYWxsLWNvdW50cy5weQorIyBwZXJmIHNjcmlwdCAtcyBzeXNjYWxsLWNvdW50cy5weQorCityYXdfc3lzY2FsbHNfX3N5c19lbnRlciAgICAgMSAwMDg0MC44NDc1ODIwODMgICAgIDc1MDYgcGVyZiAgICAgICAgICAgICAgICAgIGlkPTEsIGFyZ3M9CityYXdfc3lzY2FsbHNfX3N5c19lbnRlciAgICAgMSAwMDg0MC44NDc1OTU3NjQgICAgIDc1MDYgcGVyZiAgICAgICAgICAgICAgICAgIGlkPTEsIGFyZ3M9CityYXdfc3lzY2FsbHNfX3N5c19lbnRlciAgICAgMSAwMDg0MC44NDc2MjA4NjAgICAgIDc1MDYgcGVyZiAgICAgICAgICAgICAgICAgIGlkPTEsIGFyZ3M9CityYXdfc3lzY2FsbHNfX3N5c19lbnRlciAgICAgMSAwMDg0MC44NDc3MTA0NzggICAgIDY1MzMgbnB2aWV3ZXIuYmluICAgICAgICAgIGlkPTc4LCBhcmdzPQorcmF3X3N5c2NhbGxzX19zeXNfZW50ZXIgICAgIDEgMDA4NDAuODQ3NzE5MjA0ICAgICA2NTMzIG5wdmlld2VyLmJpbiAgICAgICAgICBpZD0xNDIsIGFyZ3M9CityYXdfc3lzY2FsbHNfX3N5c19lbnRlciAgICAgMSAwMDg0MC44NDc3NTU0NDUgICAgIDY1MzMgbnB2aWV3ZXIuYmluICAgICAgICAgIGlkPTMsIGFyZ3M9CityYXdfc3lzY2FsbHNfX3N5c19lbnRlciAgICAgMSAwMDg0MC44NDc3NzU2MDEgICAgIDY1MzMgbnB2aWV3ZXIuYmluICAgICAgICAgIGlkPTMsIGFyZ3M9CityYXdfc3lzY2FsbHNfX3N5c19lbnRlciAgICAgMSAwMDg0MC44NDc3ODE4MjAgICAgIDY1MzMgbnB2aWV3ZXIuYmluICAgICAgICAgIGlkPTMsIGFyZ3M9CisuCisuCisuCistLS0tCisKK09mIGNvdXJzZSwgZm9yIHRoaXMgc2NyaXB0LCB3ZSdyZSBub3QgaW50ZXJlc3RlZCBpbiBwcmludGluZyBldmVyeQordHJhY2UgZXZlbnQsIGJ1dCByYXRoZXIgYWdncmVnYXRpbmcgaXQgaW4gYSB1c2VmdWwgd2F5LiAgU28gd2UnbGwgZ2V0CityaWQgb2YgZXZlcnl0aGluZyB0byBkbyB3aXRoIHByaW50aW5nIGFzIHdlbGwgYXMgdGhlIHRyYWNlX2JlZ2luKCkgYW5kCit0cmFjZV91bmhhbmRsZWQoKSBmdW5jdGlvbnMsIHdoaWNoIHdlIHdvbid0IGJlIHVzaW5nLiAgVGhhdCBsZWF2ZXMgdXMKK3dpdGggdGhpcyBtaW5pbWFsaXN0aWMgc2tlbGV0b246CisKKy0tLS0KK2ltcG9ydCBvcworaW1wb3J0IHN5cworCitzeXMucGF0aC5hcHBlbmQob3MuZW52aXJvblsnUEVSRl9FWEVDX1BBVEgnXSArIFwKKwknL3NjcmlwdHMvcHl0aG9uL3BlcmYtc2NyaXB0LVV0aWwvbGliL1BlcmYvVHJhY2UnKQorCitmcm9tIHBlcmZfdHJhY2VfY29udGV4dCBpbXBvcnQgKgorZnJvbSBDb3JlIGltcG9ydCAqCisKK2RlZiB0cmFjZV9lbmQoKToKKwlwcmludCAiaW4gdHJhY2VfZW5kIgorCitkZWYgcmF3X3N5c2NhbGxzX19zeXNfZW50ZXIoZXZlbnRfbmFtZSwgY29udGV4dCwgY29tbW9uX2NwdSwKKwljb21tb25fc2VjcywgY29tbW9uX25zZWNzLCBjb21tb25fcGlkLCBjb21tb25fY29tbSwKKwlpZCwgYXJncyk6CistLS0tCisKK0luIHRyYWNlX2VuZCgpLCB3ZSdsbCBzaW1wbHkgcHJpbnQgdGhlIHJlc3VsdHMsIGJ1dCBmaXJzdCB3ZSBuZWVkIHRvCitnZW5lcmF0ZSBzb21lIHJlc3VsdHMgdG8gcHJpbnQuICBUbyBkbyB0aGF0IHdlIG5lZWQgdG8gaGF2ZSBvdXIKK3N5c19lbnRlcigpIGhhbmRsZXIgZG8gdGhlIG5lY2Vzc2FyeSB0YWxseWluZyB1bnRpbCBhbGwgZXZlbnRzIGhhdmUKK2JlZW4gY291bnRlZC4gIEEgaGFzaCB0YWJsZSBpbmRleGVkIGJ5IHN5c2NhbGwgaWQgaXMgYSBnb29kIHdheSB0bworc3RvcmUgdGhhdCBpbmZvcm1hdGlvbjsgZXZlcnkgdGltZSB0aGUgc3lzX2VudGVyKCkgaGFuZGxlciBpcyBjYWxsZWQsCit3ZSBzaW1wbHkgaW5jcmVtZW50IGEgY291bnQgYXNzb2NpYXRlZCB3aXRoIHRoYXQgaGFzaCBlbnRyeSBpbmRleGVkIGJ5Cit0aGF0IHN5c2NhbGwgaWQ6CisKKy0tLS0KKyAgc3lzY2FsbHMgPSBhdXRvZGljdCgpCisKKyAgdHJ5OgorICAgIHN5c2NhbGxzW2lkXSArPSAxCisgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgc3lzY2FsbHNbaWRdID0gMQorLS0tLQorCitUaGUgc3lzY2FsbHMgJ2F1dG9kaWN0JyBvYmplY3QgaXMgYSBzcGVjaWFsIGtpbmQgb2YgUHl0aG9uIGRpY3Rpb25hcnkKKyhpbXBsZW1lbnRlZCBpbiBDb3JlLnB5KSB0aGF0IGltcGxlbWVudHMgUGVybCdzICdhdXRvdml2aWZ5aW5nJyBoYXNoZXMKK2luIFB5dGhvbiBpLmUuIHdpdGggYXV0b3ZpdmlmeWluZyBoYXNoZXMsIHlvdSBjYW4gYXNzaWduIG5lc3RlZCBoYXNoCit2YWx1ZXMgd2l0aG91dCBoYXZpbmcgdG8gZ28gdG8gdGhlIHRyb3VibGUgb2YgY3JlYXRpbmcgaW50ZXJtZWRpYXRlCitsZXZlbHMgaWYgdGhleSBkb24ndCBleGlzdCBlLmcgc3lzY2FsbHNbY29tbV1bcGlkXVtpZF0gPSAxIHdpbGwgY3JlYXRlCit0aGUgaW50ZXJtZWRpYXRlIGhhc2ggbGV2ZWxzIGFuZCBmaW5hbGx5IGFzc2lnbiB0aGUgdmFsdWUgMSB0byB0aGUKK2hhc2ggZW50cnkgZm9yICdpZCcgKGJlY2F1c2UgdGhlIHZhbHVlIGJlaW5nIGFzc2lnbmVkIGlzbid0IGEgaGFzaAorb2JqZWN0IGl0c2VsZiwgdGhlIGluaXRpYWwgdmFsdWUgaXMgYXNzaWduZWQgaW4gdGhlIFR5cGVFcnJvcgorZXhjZXB0aW9uLiAgV2VsbCwgdGhlcmUgbWF5IGJlIGEgYmV0dGVyIHdheSB0byBkbyB0aGlzIGluIFB5dGhvbiBidXQKK3RoYXQncyB3aGF0IHdvcmtzIGZvciBub3cpLgorCitQdXR0aW5nIHRoYXQgY29kZSBpbnRvIHRoZSByYXdfc3lzY2FsbHNfX3N5c19lbnRlcigpIGhhbmRsZXIsIHdlCitlZmZlY3RpdmVseSBlbmQgdXAgd2l0aCBhIHNpbmdsZS1sZXZlbCBkaWN0aW9uYXJ5IGtleWVkIG9uIHN5c2NhbGwgaWQKK2FuZCBoYXZpbmcgdGhlIGNvdW50cyB3ZSd2ZSB0YWxsaWVkIGFzIHZhbHVlcy4KKworVGhlIHByaW50X3N5c2NhbGxfdG90YWxzKCkgZnVuY3Rpb24gaXRlcmF0ZXMgb3ZlciB0aGUgZW50cmllcyBpbiB0aGUKK2RpY3Rpb25hcnkgYW5kIGRpc3BsYXlzIGEgbGluZSBmb3IgZWFjaCBlbnRyeSBjb250YWluaW5nIHRoZSBzeXNjYWxsCituYW1lICh0aGUgZGljdG9uYXJ5IGtleXMgY29udGFpbiB0aGUgc3lzY2FsbCBpZHMsIHdoaWNoIGFyZSBwYXNzZWQgdG8KK3RoZSBVdGlsIGZ1bmN0aW9uIHN5c2NhbGxfbmFtZSgpLCB3aGljaCB0cmFuc2xhdGVzIHRoZSByYXcgc3lzY2FsbAorbnVtYmVycyB0byB0aGUgY29ycmVzcG9uZGluZyBzeXNjYWxsIG5hbWUgc3RyaW5ncykuICBUaGUgb3V0cHV0IGlzCitkaXNwbGF5ZWQgYWZ0ZXIgYWxsIHRoZSBldmVudHMgaW4gdGhlIHRyYWNlIGhhdmUgYmVlbiBwcm9jZXNzZWQsIGJ5CitjYWxsaW5nIHRoZSBwcmludF9zeXNjYWxsX3RvdGFscygpIGZ1bmN0aW9uIGZyb20gdGhlIHRyYWNlX2VuZCgpCitoYW5kbGVyIGNhbGxlZCBhdCB0aGUgZW5kIG9mIHNjcmlwdCBwcm9jZXNzaW5nLgorCitUaGUgZmluYWwgc2NyaXB0IHByb2R1Y2luZyB0aGUgb3V0cHV0IHNob3duIGFib3ZlIGlzIHNob3duIGluIGl0cworZW50aXJldHkgYmVsb3cgKHN5c2NhbGxfbmFtZSgpIGhlbHBlciBpcyBub3QgeWV0IGF2YWlsYWJsZSwgeW91IGNhbgorb25seSBkZWFsIHdpdGggaWQncyBmb3Igbm93KToKKworLS0tLQoraW1wb3J0IG9zCitpbXBvcnQgc3lzCisKK3N5cy5wYXRoLmFwcGVuZChvcy5lbnZpcm9uWydQRVJGX0VYRUNfUEFUSCddICsgXAorCScvc2NyaXB0cy9weXRob24vcGVyZi1zY3JpcHQtVXRpbC9saWIvUGVyZi9UcmFjZScpCisKK2Zyb20gcGVyZl90cmFjZV9jb250ZXh0IGltcG9ydCAqCitmcm9tIENvcmUgaW1wb3J0ICoKK2Zyb20gVXRpbCBpbXBvcnQgKgorCitzeXNjYWxscyA9IGF1dG9kaWN0KCkKKworZGVmIHRyYWNlX2VuZCgpOgorCXByaW50X3N5c2NhbGxfdG90YWxzKCkKKworZGVmIHJhd19zeXNjYWxsc19fc3lzX2VudGVyKGV2ZW50X25hbWUsIGNvbnRleHQsIGNvbW1vbl9jcHUsCisJY29tbW9uX3NlY3MsIGNvbW1vbl9uc2VjcywgY29tbW9uX3BpZCwgY29tbW9uX2NvbW0sCisJaWQsIGFyZ3MpOgorCXRyeToKKwkJc3lzY2FsbHNbaWRdICs9IDEKKwlleGNlcHQgVHlwZUVycm9yOgorCQlzeXNjYWxsc1tpZF0gPSAxCisKK2RlZiBwcmludF9zeXNjYWxsX3RvdGFscygpOgorICAgIGlmIGZvcl9jb21tIGlzIG5vdCBOb25lOgorCSAgICBwcmludCAiXG5zeXNjYWxsIGV2ZW50cyBmb3IgJXM6XG5cbiIgJSAoZm9yX2NvbW0pLAorICAgIGVsc2U6CisJICAgIHByaW50ICJcbnN5c2NhbGwgZXZlbnRzOlxuXG4iLAorCisgICAgcHJpbnQgIiUtNDBzICAlMTBzXG4iICUgKCJldmVudCIsICJjb3VudCIpLAorICAgIHByaW50ICIlLTQwcyAgJTEwc1xuIiAlICgiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLS0tLS0tLS0tLSIpLAorCisgICAgZm9yIGlkLCB2YWwgaW4gc29ydGVkKHN5c2NhbGxzLml0ZXJpdGVtcygpLCBrZXkgPSBsYW1iZGEoaywgdik6ICh2LCBrKSwgXAorCQkJCSAgcmV2ZXJzZSA9IFRydWUpOgorCSAgICBwcmludCAiJS00MHMgICUxMGRcbiIgJSAoc3lzY2FsbF9uYW1lKGlkKSwgdmFsKSwKKy0tLS0KKworVGhlIHNjcmlwdCBjYW4gYmUgcnVuIGp1c3QgYXMgYmVmb3JlOgorCisgICMgcGVyZiBzY3JpcHQgLXMgc3lzY2FsbC1jb3VudHMucHkKKworU28gdGhvc2UgYXJlIHRoZSBlc3NlbnRpYWwgc3RlcHMgaW4gd3JpdGluZyBhbmQgcnVubmluZyBhIHNjcmlwdC4gIFRoZQorcHJvY2VzcyBjYW4gYmUgZ2VuZXJhbGl6ZWQgdG8gYW55IHRyYWNlcG9pbnQgb3Igc2V0IG9mIHRyYWNlcG9pbnRzCit5b3UncmUgaW50ZXJlc3RlZCBpbiAtIGJhc2ljYWxseSBmaW5kIHRoZSB0cmFjZXBvaW50KHMpIHlvdSdyZQoraW50ZXJlc3RlZCBpbiBieSBsb29raW5nIGF0IHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBldmVudHMgc2hvd24gYnkKKydwZXJmIGxpc3QnIGFuZC9vciBsb29rIGluIC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcgZXZlbnRzIGZvcgorZGV0YWlsZWQgZXZlbnQgYW5kIGZpZWxkIGluZm8sIHJlY29yZCB0aGUgY29ycmVzcG9uZGluZyB0cmFjZSBkYXRhCit1c2luZyAncGVyZiByZWNvcmQnLCBwYXNzaW5nIGl0IHRoZSBsaXN0IG9mIGludGVyZXN0aW5nIGV2ZW50cywKK2dlbmVyYXRlIGEgc2tlbGV0b24gc2NyaXB0IHVzaW5nICdwZXJmIHNjcmlwdCAtZyBweXRob24nIGFuZCBtb2RpZnkgdGhlCitjb2RlIHRvIGFnZ3JlZ2F0ZSBhbmQgZGlzcGxheSBpdCBmb3IgeW91ciBwYXJ0aWN1bGFyIG5lZWRzLgorCitBZnRlciB5b3UndmUgZG9uZSB0aGF0IHlvdSBtYXkgZW5kIHVwIHdpdGggYSBnZW5lcmFsLXB1cnBvc2Ugc2NyaXB0Cit0aGF0IHlvdSB3YW50IHRvIGtlZXAgYXJvdW5kIGFuZCBoYXZlIGF2YWlsYWJsZSBmb3IgZnV0dXJlIHVzZS4gIEJ5Cit3cml0aW5nIGEgY291cGxlIG9mIHZlcnkgc2ltcGxlIHNoZWxsIHNjcmlwdHMgYW5kIHB1dHRpbmcgdGhlbSBpbiB0aGUKK3JpZ2h0IHBsYWNlLCB5b3UgY2FuIGhhdmUgeW91ciBzY3JpcHQgbGlzdGVkIGFsb25nc2lkZSB0aGUgb3RoZXIKK3NjcmlwdHMgbGlzdGVkIGJ5IHRoZSAncGVyZiBzY3JpcHQgLWwnIGNvbW1hbmQgZS5nLjoKKworLS0tLQorcm9vdEB0cm9waWNhbmE6fiMgcGVyZiBzY3JpcHQgLWwKK0xpc3Qgb2YgYXZhaWxhYmxlIHRyYWNlIHNjcmlwdHM6CisgIHdvcmtxdWV1ZS1zdGF0cyAgICAgICAgICAgICAgICAgICAgICB3b3JrcXVldWUgc3RhdHMgKGlucy9leGUvY3JlYXRlL2Rlc3Ryb3kpCisgIHdha2V1cC1sYXRlbmN5ICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW0td2lkZSBtaW4vbWF4L2F2ZyB3YWtldXAgbGF0ZW5jeQorICBydy1ieS1maWxlIDxjb21tPiAgICAgICAgICAgICAgICAgICAgci93IGFjdGl2aXR5IGZvciBhIHByb2dyYW0sIGJ5IGZpbGUKKyAgcnctYnktcGlkICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbS13aWRlIHIvdyBhY3Rpdml0eQorLS0tLQorCitBIG5pY2Ugc2lkZSBlZmZlY3Qgb2YgZG9pbmcgdGhpcyBpcyB0aGF0IHlvdSBhbHNvIHRoZW4gY2FwdHVyZSB0aGUKK3Byb2JhYmx5IGxlbmd0aHkgJ3BlcmYgcmVjb3JkJyBjb21tYW5kIG5lZWRlZCB0byByZWNvcmQgdGhlIGV2ZW50cyBmb3IKK3RoZSBzY3JpcHQuCisKK1RvIGhhdmUgdGhlIHNjcmlwdCBhcHBlYXIgYXMgYSAnYnVpbHQtaW4nIHNjcmlwdCwgeW91IHdyaXRlIHR3byBzaW1wbGUKK3NjcmlwdHMsIG9uZSBmb3IgcmVjb3JkaW5nIGFuZCBvbmUgZm9yICdyZXBvcnRpbmcnLgorCitUaGUgJ3JlY29yZCcgc2NyaXB0IGlzIGEgc2hlbGwgc2NyaXB0IHdpdGggdGhlIHNhbWUgYmFzZSBuYW1lIGFzIHlvdXIKK3NjcmlwdCwgYnV0IHdpdGggLXJlY29yZCBhcHBlbmRlZC4gIFRoZSBzaGVsbCBzY3JpcHQgc2hvdWxkIGJlIHB1dAoraW50byB0aGUgcGVyZi9zY3JpcHRzL3B5dGhvbi9iaW4gZGlyZWN0b3J5IGluIHRoZSBrZXJuZWwgc291cmNlIHRyZWUuCitJbiB0aGF0IHNjcmlwdCwgeW91IHdyaXRlIHRoZSAncGVyZiByZWNvcmQnIGNvbW1hbmQtbGluZSBuZWVkZWQgZm9yCit5b3VyIHNjcmlwdDoKKworLS0tLQorIyBjYXQga2VybmVsLXNvdXJjZS90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL2Jpbi9zeXNjYWxsLWNvdW50cy1yZWNvcmQKKworIyEvYmluL2Jhc2gKK3BlcmYgcmVjb3JkIC1hIC1lIHJhd19zeXNjYWxsczpzeXNfZW50ZXIKKy0tLS0KKworVGhlICdyZXBvcnQnIHNjcmlwdCBpcyBhbHNvIGEgc2hlbGwgc2NyaXB0IHdpdGggdGhlIHNhbWUgYmFzZSBuYW1lIGFzCit5b3VyIHNjcmlwdCwgYnV0IHdpdGggLXJlcG9ydCBhcHBlbmRlZC4gIEl0IHNob3VsZCBhbHNvIGJlIGxvY2F0ZWQgaW4KK3RoZSBwZXJmL3NjcmlwdHMvcHl0aG9uL2JpbiBkaXJlY3RvcnkuICBJbiB0aGF0IHNjcmlwdCwgeW91IHdyaXRlIHRoZQorJ3BlcmYgc2NyaXB0IC1zJyBjb21tYW5kLWxpbmUgbmVlZGVkIGZvciBydW5uaW5nIHlvdXIgc2NyaXB0OgorCistLS0tCisjIGNhdCBrZXJuZWwtc291cmNlL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vYmluL3N5c2NhbGwtY291bnRzLXJlcG9ydAorCisjIS9iaW4vYmFzaAorIyBkZXNjcmlwdGlvbjogc3lzdGVtLXdpZGUgc3lzY2FsbCBjb3VudHMKK3BlcmYgc2NyaXB0IC1zIH4vbGliZXhlYy9wZXJmLWNvcmUvc2NyaXB0cy9weXRob24vc3lzY2FsbC1jb3VudHMucHkKKy0tLS0KKworTm90ZSB0aGF0IHRoZSBsb2NhdGlvbiBvZiB0aGUgUHl0aG9uIHNjcmlwdCBnaXZlbiBpbiB0aGUgc2hlbGwgc2NyaXB0CitpcyBpbiB0aGUgbGliZXhlYy9wZXJmLWNvcmUvc2NyaXB0cy9weXRob24gZGlyZWN0b3J5IC0gdGhpcyBpcyB3aGVyZQordGhlIHNjcmlwdCB3aWxsIGJlIGNvcGllZCBieSAnbWFrZSBpbnN0YWxsJyB3aGVuIHlvdSBpbnN0YWxsIHBlcmYuCitGb3IgdGhlIGluc3RhbGxhdGlvbiB0byBpbnN0YWxsIHlvdXIgc2NyaXB0IHRoZXJlLCB5b3VyIHNjcmlwdCBuZWVkcwordG8gYmUgbG9jYXRlZCBpbiB0aGUgcGVyZi9zY3JpcHRzL3B5dGhvbiBkaXJlY3RvcnkgaW4gdGhlIGtlcm5lbAorc291cmNlIHRyZWU6CisKKy0tLS0KKyMgbHMgLWFsIGtlcm5lbC1zb3VyY2UvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbgorCityb290QHRyb3BpY2FuYTovaG9tZS90cnovc3JjL3RpcCMgbHMgLWFsIHRvb2xzL3BlcmYvc2NyaXB0cy9weXRob24KK3RvdGFsIDMyCitkcnd4ci14ci14IDQgdHJ6IHRyeiA0MDk2IDIwMTAtMDEtMjYgMjI6MzAgLgorZHJ3eHIteHIteCA0IHRyeiB0cnogNDA5NiAyMDEwLTAxLTI2IDIyOjI5IC4uCitkcnd4ci14ci14IDIgdHJ6IHRyeiA0MDk2IDIwMTAtMDEtMjYgMjI6MjkgYmluCistcnctci0tci0tIDEgdHJ6IHRyeiAyNTQ4IDIwMTAtMDEtMjYgMjI6MjkgY2hlY2stcGVyZi1zY3JpcHQucHkKK2Ryd3hyLXhyLXggMyB0cnogdHJ6IDQwOTYgMjAxMC0wMS0yNiAyMjo0OSBwZXJmLXNjcmlwdC1VdGlsCistcnctci0tci0tIDEgdHJ6IHRyeiAxNDYyIDIwMTAtMDEtMjYgMjI6MzAgc3lzY2FsbC1jb3VudHMucHkKKy0tLS0KKworT25jZSB5b3UndmUgZG9uZSB0aGF0IChkb24ndCBmb3JnZXQgdG8gZG8gYSBuZXcgJ21ha2UgaW5zdGFsbCcsCitvdGhlcndpc2UgeW91ciBzY3JpcHQgd29uJ3Qgc2hvdyB1cCBhdCBydW4tdGltZSksICdwZXJmIHNjcmlwdCAtbCcKK3Nob3VsZCBzaG93IGEgbmV3IGVudHJ5IGZvciB5b3VyIHNjcmlwdDoKKworLS0tLQorcm9vdEB0cm9waWNhbmE6fiMgcGVyZiBzY3JpcHQgLWwKK0xpc3Qgb2YgYXZhaWxhYmxlIHRyYWNlIHNjcmlwdHM6CisgIHdvcmtxdWV1ZS1zdGF0cyAgICAgICAgICAgICAgICAgICAgICB3b3JrcXVldWUgc3RhdHMgKGlucy9leGUvY3JlYXRlL2Rlc3Ryb3kpCisgIHdha2V1cC1sYXRlbmN5ICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW0td2lkZSBtaW4vbWF4L2F2ZyB3YWtldXAgbGF0ZW5jeQorICBydy1ieS1maWxlIDxjb21tPiAgICAgICAgICAgICAgICAgICAgci93IGFjdGl2aXR5IGZvciBhIHByb2dyYW0sIGJ5IGZpbGUKKyAgcnctYnktcGlkICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbS13aWRlIHIvdyBhY3Rpdml0eQorICBzeXNjYWxsLWNvdW50cyAgICAgICAgICAgICAgICAgICAgICAgc3lzdGVtLXdpZGUgc3lzY2FsbCBjb3VudHMKKy0tLS0KKworWW91IGNhbiBub3cgcGVyZm9ybSB0aGUgcmVjb3JkIHN0ZXAgdmlhICdwZXJmIHNjcmlwdCByZWNvcmQnOgorCisgICMgcGVyZiBzY3JpcHQgcmVjb3JkIHN5c2NhbGwtY291bnRzCisKK2FuZCBkaXNwbGF5IHRoZSBvdXRwdXQgdXNpbmcgJ3BlcmYgc2NyaXB0IHJlcG9ydCc6CisKKyAgIyBwZXJmIHNjcmlwdCByZXBvcnQgc3lzY2FsbC1jb3VudHMKKworU1RBUlRFUiBTQ1JJUFRTCistLS0tLS0tLS0tLS0tLS0KKworWW91IGNhbiBxdWlja2x5IGdldCBzdGFydGVkIHdyaXRpbmcgYSBzY3JpcHQgZm9yIGEgcGFydGljdWxhciBzZXQgb2YKK3RyYWNlIGRhdGEgYnkgZ2VuZXJhdGluZyBhIHNrZWxldG9uIHNjcmlwdCB1c2luZyAncGVyZiBzY3JpcHQgLWcKK3B5dGhvbicgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIGFuIGV4aXN0aW5nIHBlcmYuZGF0YSB0cmFjZSBmaWxlLgorVGhhdCB3aWxsIGdlbmVyYXRlIGEgc3RhcnRlciBzY3JpcHQgY29udGFpbmluZyBhIGhhbmRsZXIgZm9yIGVhY2ggb2YKK3RoZSBldmVudCB0eXBlcyBpbiB0aGUgdHJhY2UgZmlsZTsgaXQgc2ltcGx5IHByaW50cyBldmVyeSBhdmFpbGFibGUKK2ZpZWxkIGZvciBlYWNoIGV2ZW50IGluIHRoZSB0cmFjZSBmaWxlLgorCitZb3UgY2FuIGFsc28gbG9vayBhdCB0aGUgZXhpc3Rpbmcgc2NyaXB0cyBpbgorfi9saWJleGVjL3BlcmYtY29yZS9zY3JpcHRzL3B5dGhvbiBmb3IgdHlwaWNhbCBleGFtcGxlcyBzaG93aW5nIGhvdyB0bworZG8gYmFzaWMgdGhpbmdzIGxpa2UgYWdncmVnYXRlIGV2ZW50IGRhdGEsIHByaW50IHJlc3VsdHMsIGV0Yy4gIEFsc28sCit0aGUgY2hlY2stcGVyZi1zY3JpcHQucHkgc2NyaXB0LCB3aGlsZSBub3QgaW50ZXJlc3RpbmcgZm9yIGl0cyByZXN1bHRzLAorYXR0ZW1wdHMgdG8gZXhlcmNpc2UgYWxsIG9mIHRoZSBtYWluIHNjcmlwdGluZyBmZWF0dXJlcy4KKworRVZFTlQgSEFORExFUlMKKy0tLS0tLS0tLS0tLS0tCisKK1doZW4gcGVyZiBzY3JpcHQgaXMgaW52b2tlZCB1c2luZyBhIHRyYWNlIHNjcmlwdCwgYSB1c2VyLWRlZmluZWQKKydoYW5kbGVyIGZ1bmN0aW9uJyBpcyBjYWxsZWQgZm9yIGVhY2ggZXZlbnQgaW4gdGhlIHRyYWNlLiAgSWYgdGhlcmUncworbm8gaGFuZGxlciBmdW5jdGlvbiBkZWZpbmVkIGZvciBhIGdpdmVuIGV2ZW50IHR5cGUsIHRoZSBldmVudCBpcworaWdub3JlZCAob3IgcGFzc2VkIHRvIGEgJ3RyYWNlX2hhbmRsZWQnIGZ1bmN0aW9uLCBzZWUgYmVsb3cpIGFuZCB0aGUKK25leHQgZXZlbnQgaXMgcHJvY2Vzc2VkLgorCitNb3N0IG9mIHRoZSBldmVudCdzIGZpZWxkIHZhbHVlcyBhcmUgcGFzc2VkIGFzIGFyZ3VtZW50cyB0byB0aGUKK2hhbmRsZXIgZnVuY3Rpb247IHNvbWUgb2YgdGhlIGxlc3MgY29tbW9uIG9uZXMgYXJlbid0IC0gdGhvc2UgYXJlCithdmFpbGFibGUgYXMgY2FsbHMgYmFjayBpbnRvIHRoZSBwZXJmIGV4ZWN1dGFibGUgKHNlZSBiZWxvdykuCisKK0FzIGFuIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgcGVyZiByZWNvcmQgY29tbWFuZCBjYW4gYmUgdXNlZCB0byByZWNvcmQKK2FsbCBzY2hlZF93YWtldXAgZXZlbnRzIGluIHRoZSBzeXN0ZW06CisKKyAjIHBlcmYgcmVjb3JkIC1hIC1lIHNjaGVkOnNjaGVkX3dha2V1cAorCitUcmFjZXMgbWVhbnQgdG8gYmUgcHJvY2Vzc2VkIHVzaW5nIGEgc2NyaXB0IHNob3VsZCBiZSByZWNvcmRlZCB3aXRoCit0aGUgYWJvdmUgb3B0aW9uOiAtYSB0byBlbmFibGUgc3lzdGVtLXdpZGUgY29sbGVjdGlvbi4KKworVGhlIGZvcm1hdCBmaWxlIGZvciB0aGUgc2NoZWRfd2FrZXAgZXZlbnQgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGZpZWxkcworKHNlZSAvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL2V2ZW50cy9zY2hlZC9zY2hlZF93YWtldXAvZm9ybWF0KToKKworLS0tLQorIGZvcm1hdDoKKyAgICAgICAgZmllbGQ6dW5zaWduZWQgc2hvcnQgY29tbW9uX3R5cGU7CisgICAgICAgIGZpZWxkOnVuc2lnbmVkIGNoYXIgY29tbW9uX2ZsYWdzOworICAgICAgICBmaWVsZDp1bnNpZ25lZCBjaGFyIGNvbW1vbl9wcmVlbXB0X2NvdW50OworICAgICAgICBmaWVsZDppbnQgY29tbW9uX3BpZDsKKyAgICAgICAgZmllbGQ6aW50IGNvbW1vbl9sb2NrX2RlcHRoOworCisgICAgICAgIGZpZWxkOmNoYXIgY29tbVtUQVNLX0NPTU1fTEVOXTsKKyAgICAgICAgZmllbGQ6cGlkX3QgcGlkOworICAgICAgICBmaWVsZDppbnQgcHJpbzsKKyAgICAgICAgZmllbGQ6aW50IHN1Y2Nlc3M7CisgICAgICAgIGZpZWxkOmludCB0YXJnZXRfY3B1OworLS0tLQorCitUaGUgaGFuZGxlciBmdW5jdGlvbiBmb3IgdGhpcyBldmVudCB3b3VsZCBiZSBkZWZpbmVkIGFzOgorCistLS0tCitkZWYgc2NoZWRfX3NjaGVkX3dha2V1cChldmVudF9uYW1lLCBjb250ZXh0LCBjb21tb25fY3B1LCBjb21tb25fc2VjcywKKyAgICAgICBjb21tb25fbnNlY3MsIGNvbW1vbl9waWQsIGNvbW1vbl9jb21tLAorICAgICAgIGNvbW0sIHBpZCwgcHJpbywgc3VjY2VzcywgdGFyZ2V0X2NwdSk6CisgICAgICAgcGFzcworLS0tLQorCitUaGUgaGFuZGxlciBmdW5jdGlvbiB0YWtlcyB0aGUgZm9ybSBzdWJzeXN0ZW1fX2V2ZW50X25hbWUuCisKK1RoZSBjb21tb25fKiBhcmd1bWVudHMgaW4gdGhlIGhhbmRsZXIncyBhcmd1bWVudCBsaXN0IGFyZSB0aGUgc2V0IG9mCithcmd1bWVudHMgcGFzc2VkIHRvIGFsbCBldmVudCBoYW5kbGVyczsgc29tZSBvZiB0aGUgZmllbGRzIGNvcnJlc3BvbmQKK3RvIHRoZSBjb21tb25fKiBmaWVsZHMgaW4gdGhlIGZvcm1hdCBmaWxlLCBidXQgc29tZSBhcmUgc3ludGhlc2l6ZWQsCithbmQgc29tZSBvZiB0aGUgY29tbW9uXyogZmllbGRzIGFyZW4ndCBjb21tb24gZW5vdWdoIHRvIHRvIGJlIHBhc3NlZAordG8gZXZlcnkgZXZlbnQgYXMgYXJndW1lbnRzIGJ1dCBhcmUgYXZhaWxhYmxlIGFzIGxpYnJhcnkgZnVuY3Rpb25zLgorCitIZXJlJ3MgYSBicmllZiBkZXNjcmlwdGlvbiBvZiBlYWNoIG9mIHRoZSBpbnZhcmlhbnQgZXZlbnQgYXJnczoKKworIGV2ZW50X25hbWUgCSAgCSAgICB0aGUgbmFtZSBvZiB0aGUgZXZlbnQgYXMgdGV4dAorIGNvbnRleHQJCSAgICBhbiBvcGFxdWUgJ2Nvb2tpZScgdXNlZCBpbiBjYWxscyBiYWNrIGludG8gcGVyZgorIGNvbW1vbl9jcHUJCSAgICB0aGUgY3B1IHRoZSBldmVudCBvY2N1cnJlZCBvbgorIGNvbW1vbl9zZWNzCQkgICAgdGhlIHNlY3MgcG9ydGlvbiBvZiB0aGUgZXZlbnQgdGltZXN0YW1wCisgY29tbW9uX25zZWNzCQkgICAgdGhlIG5zZWNzIHBvcnRpb24gb2YgdGhlIGV2ZW50IHRpbWVzdGFtcAorIGNvbW1vbl9waWQJCSAgICB0aGUgcGlkIG9mIHRoZSBjdXJyZW50IHRhc2sKKyBjb21tb25fY29tbQkJICAgIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IHByb2Nlc3MKKworQWxsIG9mIHRoZSByZW1haW5pbmcgZmllbGRzIGluIHRoZSBldmVudCdzIGZvcm1hdCBmaWxlIGhhdmUKK2NvdW50ZXJwYXJ0cyBhcyBoYW5kbGVyIGZ1bmN0aW9uIGFyZ3VtZW50cyBvZiB0aGUgc2FtZSBuYW1lLCBhcyBjYW4gYmUKK3NlZW4gaW4gdGhlIGV4YW1wbGUgYWJvdmUuCisKK1RoZSBhYm92ZSBwcm92aWRlcyB0aGUgYmFzaWNzIG5lZWRlZCB0byBkaXJlY3RseSBhY2Nlc3MgZXZlcnkgZmllbGQgb2YKK2V2ZXJ5IGV2ZW50IGluIGEgdHJhY2UsIHdoaWNoIGNvdmVycyA5MCUgb2Ygd2hhdCB5b3UgbmVlZCB0byBrbm93IHRvCit3cml0ZSBhIHVzZWZ1bCB0cmFjZSBzY3JpcHQuICBUaGUgc2VjdGlvbnMgYmVsb3cgY292ZXIgdGhlIHJlc3QuCisKK1NDUklQVCBMQVlPVVQKKy0tLS0tLS0tLS0tLS0KKworRXZlcnkgcGVyZiBzY3JpcHQgUHl0aG9uIHNjcmlwdCBzaG91bGQgc3RhcnQgYnkgc2V0dGluZyB1cCBhIFB5dGhvbgorbW9kdWxlIHNlYXJjaCBwYXRoIGFuZCAnaW1wb3J0J2luZyBhIGZldyBzdXBwb3J0IG1vZHVsZXMgKHNlZSBtb2R1bGUKK2Rlc2NyaXB0aW9ucyBiZWxvdyk6CisKKy0tLS0KKyBpbXBvcnQgb3MKKyBpbXBvcnQgc3lzCisKKyBzeXMucGF0aC5hcHBlbmQob3MuZW52aXJvblsnUEVSRl9FWEVDX1BBVEgnXSArIFwKKwkgICAgICAnL3NjcmlwdHMvcHl0aG9uL3BlcmYtc2NyaXB0LVV0aWwvbGliL1BlcmYvVHJhY2UnKQorCisgZnJvbSBwZXJmX3RyYWNlX2NvbnRleHQgaW1wb3J0ICoKKyBmcm9tIENvcmUgaW1wb3J0ICoKKy0tLS0KKworVGhlIHJlc3Qgb2YgdGhlIHNjcmlwdCBjYW4gY29udGFpbiBoYW5kbGVyIGZ1bmN0aW9ucyBhbmQgc3VwcG9ydAorZnVuY3Rpb25zIGluIGFueSBvcmRlci4KKworQXNpZGUgZnJvbSB0aGUgZXZlbnQgaGFuZGxlciBmdW5jdGlvbnMgZGlzY3Vzc2VkIGFib3ZlLCBldmVyeSBzY3JpcHQKK2NhbiBpbXBsZW1lbnQgYSBzZXQgb2Ygb3B0aW9uYWwgZnVuY3Rpb25zOgorCisqdHJhY2VfYmVnaW4qLCBpZiBkZWZpbmVkLCBpcyBjYWxsZWQgYmVmb3JlIGFueSBldmVudCBpcyBwcm9jZXNzZWQgYW5kCitnaXZlcyBzY3JpcHRzIGEgY2hhbmNlIHRvIGRvIHNldHVwIHRhc2tzOgorCistLS0tCitkZWYgdHJhY2VfYmVnaW46CisgICAgcGFzcworLS0tLQorCisqdHJhY2VfZW5kKiwgaWYgZGVmaW5lZCwgaXMgY2FsbGVkIGFmdGVyIGFsbCBldmVudHMgaGF2ZSBiZWVuCisgcHJvY2Vzc2VkIGFuZCBnaXZlcyBzY3JpcHRzIGEgY2hhbmNlIHRvIGRvIGVuZC1vZi1zY3JpcHQgdGFza3MsIHN1Y2gKKyBhcyBkaXNwbGF5IHJlc3VsdHM6CisKKy0tLS0KK2RlZiB0cmFjZV9lbmQ6CisgICAgcGFzcworLS0tLQorCisqdHJhY2VfdW5oYW5kbGVkKiwgaWYgZGVmaW5lZCwgaXMgY2FsbGVkIGFmdGVyIGZvciBhbnkgZXZlbnQgdGhhdAorIGRvZXNuJ3QgaGF2ZSBhIGhhbmRsZXIgZXhwbGljaXRseSBkZWZpbmVkIGZvciBpdC4gIFRoZSBzdGFuZGFyZCBzZXQKKyBvZiBjb21tb24gYXJndW1lbnRzIGFyZSBwYXNzZWQgaW50byBpdDoKKworLS0tLQorZGVmIHRyYWNlX3VuaGFuZGxlZChldmVudF9uYW1lLCBjb250ZXh0LCBjb21tb25fY3B1LCBjb21tb25fc2VjcywKKyAgICAgICAgY29tbW9uX25zZWNzLCBjb21tb25fcGlkLCBjb21tb25fY29tbSk6CisgICAgcGFzcworLS0tLQorCitUaGUgcmVtYWluaW5nIHNlY3Rpb25zIHByb3ZpZGUgZGVzY3JpcHRpb25zIG9mIGVhY2ggb2YgdGhlIGF2YWlsYWJsZQorYnVpbHQtaW4gcGVyZiBzY3JpcHQgUHl0aG9uIG1vZHVsZXMgYW5kIHRoZWlyIGFzc29jaWF0ZWQgZnVuY3Rpb25zLgorCitBVkFJTEFCTEUgTU9EVUxFUyBBTkQgRlVOQ1RJT05TCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBmb2xsb3dpbmcgc2VjdGlvbnMgZGVzY3JpYmUgdGhlIGZ1bmN0aW9ucyBhbmQgdmFyaWFibGVzIGF2YWlsYWJsZQordmlhIHRoZSB2YXJpb3VzIHBlcmYgc2NyaXB0IFB5dGhvbiBtb2R1bGVzLiAgVG8gdXNlIHRoZSBmdW5jdGlvbnMgYW5kCit2YXJpYWJsZXMgZnJvbSB0aGUgZ2l2ZW4gbW9kdWxlLCBhZGQgdGhlIGNvcnJlc3BvbmRpbmcgJ2Zyb20gWFhYWAoraW1wb3J0JyBsaW5lIHRvIHlvdXIgcGVyZiBzY3JpcHQgc2NyaXB0LgorCitDb3JlLnB5IE1vZHVsZQorfn5+fn5+fn5+fn5+fn4KKworVGhlc2UgZnVuY3Rpb25zIHByb3ZpZGUgc29tZSBlc3NlbnRpYWwgZnVuY3Rpb25zIHRvIHVzZXIgc2NyaXB0cy4KKworVGhlICpmbGFnX3N0ciogYW5kICpzeW1ib2xfc3RyKiBmdW5jdGlvbnMgcHJvdmlkZSBodW1hbi1yZWFkYWJsZQorc3RyaW5ncyBmb3IgZmxhZyBhbmQgc3ltYm9saWMgZmllbGRzLiAgVGhlc2UgY29ycmVzcG9uZCB0byB0aGUgc3RyaW5ncworYW5kIHZhbHVlcyBwYXJzZWQgZnJvbSB0aGUgJ3ByaW50IGZtdCcgZmllbGRzIG9mIHRoZSBldmVudCBmb3JtYXQKK2ZpbGVzOgorCisgIGZsYWdfc3RyKGV2ZW50X25hbWUsIGZpZWxkX25hbWUsIGZpZWxkX3ZhbHVlKSAtIHJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRpb24gY29ycmVzcG9uZGluZyB0byBmaWVsZF92YWx1ZSBmb3IgdGhlIGZsYWcgZmllbGQgZmllbGRfbmFtZSBvZiBldmVudCBldmVudF9uYW1lCisgIHN5bWJvbF9zdHIoZXZlbnRfbmFtZSwgZmllbGRfbmFtZSwgZmllbGRfdmFsdWUpIC0gcmV0dXJucyB0aGUgc3RyaW5nIHJlcHJlc2VudGlvbiBjb3JyZXNwb25kaW5nIHRvIGZpZWxkX3ZhbHVlIGZvciB0aGUgc3ltYm9saWMgZmllbGQgZmllbGRfbmFtZSBvZiBldmVudCBldmVudF9uYW1lCisKK1RoZSAqYXV0b2RpY3QqIGZ1bmN0aW9uIHJldHVybnMgYSBzcGVjaWFsIGtpbmQgb2YgUHl0aG9uCitkaWN0aW9uYXJ5IHRoYXQgaW1wbGVtZW50cyBQZXJsJ3MgJ2F1dG92aXZpZnlpbmcnIGhhc2hlcyBpbiBQeXRob24KK2kuZS4gd2l0aCBhdXRvdml2aWZ5aW5nIGhhc2hlcywgeW91IGNhbiBhc3NpZ24gbmVzdGVkIGhhc2ggdmFsdWVzCit3aXRob3V0IGhhdmluZyB0byBnbyB0byB0aGUgdHJvdWJsZSBvZiBjcmVhdGluZyBpbnRlcm1lZGlhdGUgbGV2ZWxzIGlmCit0aGV5IGRvbid0IGV4aXN0LgorCisgIGF1dG9kaWN0KCkgLSByZXR1cm5zIGFuIGF1dG92aXZpZnlpbmcgZGljdGlvbmFyeSBpbnN0YW5jZQorCisKK3BlcmZfdHJhY2VfY29udGV4dCBNb2R1bGUKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworU29tZSBvZiB0aGUgJ2NvbW1vbicgZmllbGRzIGluIHRoZSBldmVudCBmb3JtYXQgZmlsZSBhcmVuJ3QgYWxsIHRoYXQKK2NvbW1vbiwgYnV0IG5lZWQgdG8gYmUgbWFkZSBhY2Nlc3NpYmxlIHRvIHVzZXIgc2NyaXB0cyBub25ldGhlbGVzcy4KKworcGVyZl90cmFjZV9jb250ZXh0IGRlZmluZXMgYSBzZXQgb2YgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHVzZWQgdG8KK2FjY2VzcyB0aGlzIGRhdGEgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGN1cnJlbnQgZXZlbnQuICBFYWNoIG9mIHRoZXNlCitmdW5jdGlvbnMgZXhwZWN0cyBhIGNvbnRleHQgdmFyaWFibGUsIHdoaWNoIGlzIHRoZSBzYW1lIGFzIHRoZQorY29udGV4dCB2YXJpYWJsZSBwYXNzZWQgaW50byBldmVyeSBldmVudCBoYW5kbGVyIGFzIHRoZSBzZWNvbmQKK2FyZ3VtZW50LgorCisgY29tbW9uX3BjKGNvbnRleHQpIC0gcmV0dXJucyBjb21tb25fcHJlZW1wdCBjb3VudCBmb3IgdGhlIGN1cnJlbnQgZXZlbnQKKyBjb21tb25fZmxhZ3MoY29udGV4dCkgLSByZXR1cm5zIGNvbW1vbl9mbGFncyBmb3IgdGhlIGN1cnJlbnQgZXZlbnQKKyBjb21tb25fbG9ja19kZXB0aChjb250ZXh0KSAtIHJldHVybnMgY29tbW9uX2xvY2tfZGVwdGggZm9yIHRoZSBjdXJyZW50IGV2ZW50CisKK1V0aWwucHkgTW9kdWxlCit+fn5+fn5+fn5+fn5+fgorCitWYXJpb3VzIHV0aWxpdHkgZnVuY3Rpb25zIGZvciB1c2Ugd2l0aCBwZXJmIHNjcmlwdDoKKworICBuc2VjcyhzZWNzLCBuc2VjcykgLSByZXR1cm5zIHRvdGFsIG5zZWNzIGdpdmVuIHNlY3MvbnNlY3MgcGFpcgorICBuc2Vjc19zZWNzKG5zZWNzKSAtIHJldHVybnMgd2hvbGUgc2VjcyBwb3J0aW9uIGdpdmVuIG5zZWNzCisgIG5zZWNzX25zZWNzKG5zZWNzKSAtIHJldHVybnMgbnNlY3MgcmVtYWluZGVyIGdpdmVuIG5zZWNzCisgIG5zZWNzX3N0cihuc2VjcykgLSByZXR1cm5zIHByaW50YWJsZSBzdHJpbmcgaW4gdGhlIGZvcm0gc2Vjcy5uc2VjcworICBhdmcodG90YWwsIG4pIC0gcmV0dXJucyBhdmVyYWdlIGdpdmVuIGEgc3VtIGFuZCBhIHRvdGFsIG51bWJlciBvZiB2YWx1ZXMKKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rcGVyZjpwZXJmLXNjcmlwdFsxXQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtc2NyaXB0LnR4dCBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXNjcmlwdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjlhZDk0MgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXNjcmlwdC50eHQKQEAgLTAsMCArMSwxMTggQEAKK3BlcmYtc2NyaXB0KDEpCis9PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK3BlcmYtc2NyaXB0IC0gUmVhZCBwZXJmLmRhdGEgKGNyZWF0ZWQgYnkgcGVyZiByZWNvcmQpIGFuZCBkaXNwbGF5IHRyYWNlIG91dHB1dAorCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydwZXJmIHNjcmlwdCcgWzxvcHRpb25zPl0KKydwZXJmIHNjcmlwdCcgWzxvcHRpb25zPl0gcmVjb3JkIDxzY3JpcHQ+IFs8cmVjb3JkLW9wdGlvbnM+XSA8Y29tbWFuZD4KKydwZXJmIHNjcmlwdCcgWzxvcHRpb25zPl0gcmVwb3J0IDxzY3JpcHQ+IFtzY3JpcHQtYXJnc10KKydwZXJmIHNjcmlwdCcgWzxvcHRpb25zPl0gPHNjcmlwdD4gPHJlcXVpcmVkLXNjcmlwdC1hcmdzPiBbPHJlY29yZC1vcHRpb25zPl0gPGNvbW1hbmQ+CisncGVyZiBzY3JpcHQnIFs8b3B0aW9ucz5dIDx0b3Atc2NyaXB0PiBbc2NyaXB0LWFyZ3NdCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorVGhpcyBjb21tYW5kIHJlYWRzIHRoZSBpbnB1dCBmaWxlIGFuZCBkaXNwbGF5cyB0aGUgdHJhY2UgcmVjb3JkZWQuCisKK1RoZXJlIGFyZSBzZXZlcmFsIHZhcmlhbnRzIG9mIHBlcmYgc2NyaXB0OgorCisgICdwZXJmIHNjcmlwdCcgdG8gc2VlIGEgZGV0YWlsZWQgdHJhY2Ugb2YgdGhlIHdvcmtsb2FkIHRoYXQgd2FzCisgIHJlY29yZGVkLgorCisgIFlvdSBjYW4gYWxzbyBydW4gYSBzZXQgb2YgcHJlLWNhbm5lZCBzY3JpcHRzIHRoYXQgYWdncmVnYXRlIGFuZAorICBzdW1tYXJpemUgdGhlIHJhdyB0cmFjZSBkYXRhIGluIHZhcmlvdXMgd2F5cyAodGhlIGxpc3Qgb2Ygc2NyaXB0cyBpcworICBhdmFpbGFibGUgdmlhICdwZXJmIHNjcmlwdCAtbCcpLiAgVGhlIGZvbGxvd2luZyB2YXJpYW50cyBhbGxvdyB5b3UgdG8KKyAgcmVjb3JkIGFuZCBydW4gdGhvc2Ugc2NyaXB0czoKKworICAncGVyZiBzY3JpcHQgcmVjb3JkIDxzY3JpcHQ+IDxjb21tYW5kPicgdG8gcmVjb3JkIHRoZSBldmVudHMgcmVxdWlyZWQKKyAgZm9yICdwZXJmIHNjcmlwdCByZXBvcnQnLiAgPHNjcmlwdD4gaXMgdGhlIG5hbWUgZGlzcGxheWVkIGluIHRoZQorICBvdXRwdXQgb2YgJ3BlcmYgc2NyaXB0IC0tbGlzdCcgaS5lLiB0aGUgYWN0dWFsIHNjcmlwdCBuYW1lIG1pbnVzIGFueQorICBsYW5ndWFnZSBleHRlbnNpb24uICBJZiA8Y29tbWFuZD4gaXMgbm90IHNwZWNpZmllZCwgdGhlIGV2ZW50cyBhcmUKKyAgcmVjb3JkZWQgdXNpbmcgdGhlIC1hIChzeXN0ZW0td2lkZSkgJ3BlcmYgcmVjb3JkJyBvcHRpb24uCisKKyAgJ3BlcmYgc2NyaXB0IHJlcG9ydCA8c2NyaXB0PiBbYXJnc10nIHRvIHJ1biBhbmQgZGlzcGxheSB0aGUgcmVzdWx0cworICBvZiA8c2NyaXB0Pi4gIDxzY3JpcHQ+IGlzIHRoZSBuYW1lIGRpc3BsYXllZCBpbiB0aGUgb3V0cHV0IG9mICdwZXJmCisgIHRyYWNlIC0tbGlzdCcgaS5lLiB0aGUgYWN0dWFsIHNjcmlwdCBuYW1lIG1pbnVzIGFueSBsYW5ndWFnZQorICBleHRlbnNpb24uICBUaGUgcGVyZi5kYXRhIG91dHB1dCBmcm9tIGEgcHJldmlvdXMgcnVuIG9mICdwZXJmIHNjcmlwdAorICByZWNvcmQgPHNjcmlwdD4nIGlzIHVzZWQgYW5kIHNob3VsZCBiZSBwcmVzZW50IGZvciB0aGlzIGNvbW1hbmQgdG8KKyAgc3VjY2VlZC4gIFthcmdzXSByZWZlcnMgdG8gdGhlIChtYWlubHkgb3B0aW9uYWwpIGFyZ3MgZXhwZWN0ZWQgYnkKKyAgdGhlIHNjcmlwdC4KKworICAncGVyZiBzY3JpcHQgPHNjcmlwdD4gPHJlcXVpcmVkLXNjcmlwdC1hcmdzPiA8Y29tbWFuZD4nIHRvIGJvdGgKKyAgcmVjb3JkIHRoZSBldmVudHMgcmVxdWlyZWQgZm9yIDxzY3JpcHQ+IGFuZCB0byBydW4gdGhlIDxzY3JpcHQ+CisgIHVzaW5nICdsaXZlLW1vZGUnIGkuZS4gd2l0aG91dCB3cml0aW5nIGFueXRoaW5nIHRvIGRpc2suICA8c2NyaXB0PgorICBpcyB0aGUgbmFtZSBkaXNwbGF5ZWQgaW4gdGhlIG91dHB1dCBvZiAncGVyZiBzY3JpcHQgLS1saXN0JyBpLmUuIHRoZQorICBhY3R1YWwgc2NyaXB0IG5hbWUgbWludXMgYW55IGxhbmd1YWdlIGV4dGVuc2lvbi4gIElmIDxjb21tYW5kPiBpcworICBub3Qgc3BlY2lmaWVkLCB0aGUgZXZlbnRzIGFyZSByZWNvcmRlZCB1c2luZyB0aGUgLWEgKHN5c3RlbS13aWRlKQorICAncGVyZiByZWNvcmQnIG9wdGlvbi4gIElmIDxzY3JpcHQ+IGhhcyBhbnkgcmVxdWlyZWQgYXJncywgdGhleQorICBzaG91bGQgYmUgc3BlY2lmaWVkIGJlZm9yZSA8Y29tbWFuZD4uICBUaGlzIG1vZGUgZG9lc24ndCBhbGxvdyBmb3IKKyAgb3B0aW9uYWwgc2NyaXB0IGFyZ3MgdG8gYmUgc3BlY2lmaWVkOyBpZiBvcHRpb25hbCBzY3JpcHQgYXJncyBhcmUKKyAgZGVzaXJlZCwgdGhleSBjYW4gYmUgc3BlY2lmaWVkIHVzaW5nIHNlcGFyYXRlICdwZXJmIHNjcmlwdCByZWNvcmQnCisgIGFuZCAncGVyZiBzY3JpcHQgcmVwb3J0JyBjb21tYW5kcywgd2l0aCB0aGUgc3Rkb3V0IG9mIHRoZSByZWNvcmQgc3RlcAorICBwaXBlZCB0byB0aGUgc3RkaW4gb2YgdGhlIHJlcG9ydCBzY3JpcHQsIHVzaW5nIHRoZSAnLW8gLScgYW5kICctaSAtJworICBvcHRpb25zIG9mIHRoZSBjb3JyZXNwb25kaW5nIGNvbW1hbmRzLgorCisgICdwZXJmIHNjcmlwdCA8dG9wLXNjcmlwdD4nIHRvIGJvdGggcmVjb3JkIHRoZSBldmVudHMgcmVxdWlyZWQgZm9yCisgIDx0b3Atc2NyaXB0PiBhbmQgdG8gcnVuIHRoZSA8dG9wLXNjcmlwdD4gdXNpbmcgJ2xpdmUtbW9kZScKKyAgaS5lLiB3aXRob3V0IHdyaXRpbmcgYW55dGhpbmcgdG8gZGlzay4gIDx0b3Atc2NyaXB0PiBpcyB0aGUgbmFtZQorICBkaXNwbGF5ZWQgaW4gdGhlIG91dHB1dCBvZiAncGVyZiBzY3JpcHQgLS1saXN0JyBpLmUuIHRoZSBhY3R1YWwKKyAgc2NyaXB0IG5hbWUgbWludXMgYW55IGxhbmd1YWdlIGV4dGVuc2lvbjsgYSA8dG9wLXNjcmlwdD4gaXMgZGVmaW5lZAorICBhcyBhbnkgc2NyaXB0IG5hbWUgZW5kaW5nIHdpdGggdGhlIHN0cmluZyAndG9wJy4KKworICBbPHJlY29yZC1vcHRpb25zPl0gY2FuIGJlIHBhc3NlZCB0byB0aGUgcmVjb3JkIHN0ZXBzIG9mICdwZXJmIHNjcmlwdAorICByZWNvcmQnIGFuZCAnbGl2ZS1tb2RlJyB2YXJpYW50czsgdGhpcyBpc24ndCBwb3NzaWJsZSBob3dldmVyIGZvcgorICA8dG9wLXNjcmlwdD4gJ2xpdmUtbW9kZScgb3IgJ3BlcmYgc2NyaXB0IHJlcG9ydCcgdmFyaWFudHMuCisKKyAgU2VlIHRoZSAnU0VFIEFMU08nIHNlY3Rpb24gZm9yIGxpbmtzIHRvIGxhbmd1YWdlLXNwZWNpZmljCisgIGluZm9ybWF0aW9uIG9uIGhvdyB0byB3cml0ZSBhbmQgcnVuIHlvdXIgb3duIHRyYWNlIHNjcmlwdHMuCisKK09QVElPTlMKKy0tLS0tLS0KKzxjb21tYW5kPi4uLjo6CisJQW55IGNvbW1hbmQgeW91IGNhbiBzcGVjaWZ5IGluIGEgc2hlbGwuCisKKy1EOjoKKy0tZHVtcC1yYXctc2NyaXB0PTo6CisgICAgICAgIERpc3BsYXkgdmVyYm9zZSBkdW1wIG9mIHRoZSB0cmFjZSBkYXRhLgorCistTDo6CistLUxhdGVuY3k9OjoKKyAgICAgICAgU2hvdyBsYXRlbmN5IGF0dHJpYnV0ZXMgKGlycXMvcHJlZW1wdGlvbiBkaXNhYmxlZCwgZXRjKS4KKworLWw6OgorLS1saXN0PTo6CisgICAgICAgIERpc3BsYXkgYSBsaXN0IG9mIGF2YWlsYWJsZSB0cmFjZSBzY3JpcHRzLgorCistcyBbJ2xhbmcnXTo6CistLXNjcmlwdD06OgorICAgICAgICBQcm9jZXNzIHRyYWNlIGRhdGEgd2l0aCB0aGUgZ2l2ZW4gc2NyaXB0IChbbGFuZ106c2NyaXB0Wy5leHRdKS4KKwlJZiB0aGUgc3RyaW5nICdsYW5nJyBpcyBzcGVjaWZpZWQgaW4gcGxhY2Ugb2YgYSBzY3JpcHQgbmFtZSwgYQorICAgICAgICBsaXN0IG9mIHN1cHBvcnRlZCBsYW5ndWFnZXMgd2lsbCBiZSBkaXNwbGF5ZWQgaW5zdGVhZC4KKworLWc6OgorLS1nZW4tc2NyaXB0PTo6CisgICAgICAgIEdlbmVyYXRlIHBlcmYtc2NyaXB0LltleHRdIHN0YXJ0ZXIgc2NyaXB0IGZvciBnaXZlbiBsYW5ndWFnZSwKKyAgICAgICAgdXNpbmcgY3VycmVudCBwZXJmLmRhdGEuCisKKy1hOjoKKyAgICAgICAgRm9yY2Ugc3lzdGVtLXdpZGUgY29sbGVjdGlvbi4gIFNjcmlwdHMgcnVuIHdpdGhvdXQgYSA8Y29tbWFuZD4KKyAgICAgICAgbm9ybWFsbHkgdXNlIC1hIGJ5IGRlZmF1bHQsIHdoaWxlIHNjcmlwdHMgcnVuIHdpdGggYSA8Y29tbWFuZD4KKyAgICAgICAgbm9ybWFsbHkgZG9uJ3QgLSB0aGlzIG9wdGlvbiBhbGxvd3MgdGhlIGxhdHRlciB0byBiZSBydW4gaW4KKyAgICAgICAgc3lzdGVtLXdpZGUgbW9kZS4KKworLWk6OgorLS1pbnB1dD06OgorICAgICAgICBJbnB1dCBmaWxlIG5hbWUuCisKKy1kOjoKKy0tZGVidWctbW9kZTo6CisgICAgICAgIERvIHZhcmlvdXMgY2hlY2tzIGxpa2Ugc2FtcGxlcyBvcmRlcmluZyBhbmQgbG9zdCBldmVudHMuCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua3BlcmY6cGVyZi1yZWNvcmRbMV0sIGxpbmtwZXJmOnBlcmYtc2NyaXB0LXBlcmxbMV0sCitsaW5rcGVyZjpwZXJmLXNjcmlwdC1weXRob25bMV0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXN0YXQudHh0IGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtc3RhdC50eHQKaW5kZXggNGIzYTJkNC4uYjZkYTdhZiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtc3RhdC50eHQKKysrIGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtc3RhdC50eHQKQEAgLTgsOCArOCw4IEBACiBTWU5PUFNJUwogLS0tLS0tLS0KIFt2ZXJzZV0KLSdwZXJmIHN0YXQnIFstZSA8RVZFTlQ+IHwgLS1ldmVudD1FVkVOVF0gWy1TXSBbLWFdIDxjb21tYW5kPgotJ3BlcmYgc3RhdCcgWy1lIDxFVkVOVD4gfCAtLWV2ZW50PUVWRU5UXSBbLVNdIFstYV0gLS0gPGNvbW1hbmQ+IFs8b3B0aW9ucz5dCisncGVyZiBzdGF0JyBbLWUgPEVWRU5UPiB8IC0tZXZlbnQ9RVZFTlRdIFstYV0gPGNvbW1hbmQ+CisncGVyZiBzdGF0JyBbLWUgPEVWRU5UPiB8IC0tZXZlbnQ9RVZFTlRdIFstYV0gLS0gPGNvbW1hbmQ+IFs8b3B0aW9ucz5dCiAKIERFU0NSSVBUSU9OCiAtLS0tLS0tLS0tLQpAQCAtMzUsMjQgKzM1LDU0IEBACiAgICAgICAgIGNoaWxkIHRhc2tzIGRvIG5vdCBpbmhlcml0IGNvdW50ZXJzCiAtcDo6CiAtLXBpZD08cGlkPjo6Ci0gICAgICAgIHN0YXQgZXZlbnRzIG9uIGV4aXN0aW5nIHBpZAorICAgICAgICBzdGF0IGV2ZW50cyBvbiBleGlzdGluZyBwcm9jZXNzIGlkCisKKy10OjoKKy0tdGlkPTx0aWQ+OjoKKyAgICAgICAgc3RhdCBldmVudHMgb24gZXhpc3RpbmcgdGhyZWFkIGlkCisKIAogLWE6OgotICAgICAgICBzeXN0ZW0td2lkZSBjb2xsZWN0aW9uCistLWFsbC1jcHVzOjoKKyAgICAgICAgc3lzdGVtLXdpZGUgY29sbGVjdGlvbiBmcm9tIGFsbCBDUFVzCiAKIC1jOjoKLSAgICAgICAgc2NhbGUgY291bnRlciB2YWx1ZXMKKy0tc2NhbGU6OgorCXNjYWxlL25vcm1hbGl6ZSBjb3VudGVyIHZhbHVlcworCistcjo6CistLXJlcGVhdD08bj46OgorCXJlcGVhdCBjb21tYW5kIGFuZCBwcmludCBhdmVyYWdlICsgc3RkZGV2IChtYXg6IDEwMCkKIAogLUI6OgorLS1iaWctbnVtOjoKICAgICAgICAgcHJpbnQgbGFyZ2UgbnVtYmVycyB3aXRoIHRob3VzYW5kcycgc2VwYXJhdG9ycyBhY2NvcmRpbmcgdG8gbG9jYWxlCiAKIC1DOjoKIC0tY3B1PTo6Ci1Db3VudCBvbmx5IG9uIHRoZSBsaXN0IG9mIGNwdXMgcHJvdmlkZWQuIE11bHRpcGxlIENQVXMgY2FuIGJlIHByb3ZpZGVkIGFzIGEKLWNvbW1hLXNwZXJhdGVkIGxpc3Qgd2l0aCBubyBzcGFjZTogMCwxLiBSYW5nZXMgb2YgQ1BVcyBhcmUgc3BlY2lmaWVkIHdpdGggLTogMC0yLgorQ291bnQgb25seSBvbiB0aGUgbGlzdCBvZiBDUFVzIHByb3ZpZGVkLiBNdWx0aXBsZSBDUFVzIGNhbiBiZSBwcm92aWRlZCBhcyBhCitjb21tYS1zZXBhcmF0ZWQgbGlzdCB3aXRoIG5vIHNwYWNlOiAwLDEuIFJhbmdlcyBvZiBDUFVzIGFyZSBzcGVjaWZpZWQgd2l0aCAtOiAwLTIuCiBJbiBwZXItdGhyZWFkIG1vZGUsIHRoaXMgb3B0aW9uIGlzIGlnbm9yZWQuIFRoZSAtYSBvcHRpb24gaXMgc3RpbGwgbmVjZXNzYXJ5CiB0byBhY3RpdmF0ZSBzeXN0ZW0td2lkZSBtb25pdG9yaW5nLiBEZWZhdWx0IGlzIHRvIGNvdW50IG9uIGFsbCBDUFVzLgogCistQTo6CistLW5vLWFnZ3I6OgorRG8gbm90IGFnZ3JlZ2F0ZSBjb3VudHMgYWNyb3NzIGFsbCBtb25pdG9yZWQgQ1BVcyBpbiBzeXN0ZW0td2lkZSBtb2RlICgtYSkuCitUaGlzIG9wdGlvbiBpcyBvbmx5IHZhbGlkIGluIHN5c3RlbS13aWRlIG1vZGUuCisKKy1uOjoKKy0tbnVsbDo6CisgICAgICAgIG51bGwgcnVuIC0gZG9uJ3Qgc3RhcnQgYW55IGNvdW50ZXJzCisKKy12OjoKKy0tdmVyYm9zZTo6CisgICAgICAgIGJlIG1vcmUgdmVyYm9zZSAoc2hvdyBjb3VudGVyIG9wZW4gZXJyb3JzLCBldGMpCisKKy14IFNFUDo6CistLWZpZWxkLXNlcGFyYXRvciBTRVA6OgorcHJpbnQgY291bnRzIHVzaW5nIGEgQ1NWLXN0eWxlIG91dHB1dCB0byBtYWtlIGl0IGVhc3kgdG8gaW1wb3J0IGRpcmVjdGx5IGludG8KK3NwcmVhZHNoZWV0cy4gQ29sdW1ucyBhcmUgc2VwYXJhdGVkIGJ5IHRoZSBzdHJpbmcgc3BlY2lmaWVkIGluIFNFUC4KKwogRVhBTVBMRVMKIC0tLS0tLS0tCiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXRlc3QudHh0IGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtdGVzdC50eHQKaW5kZXggMWM0YjVmNS4uMmMzYjQ2MiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtdGVzdC50eHQKKysrIGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtdGVzdC50eHQKQEAgLTEyLDcgKzEyLDcgQEAKIAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCi1UaGlzIGNvbW1hbmQgZG9lcyBhc3NvcnRlZCBzYW5pdHkgdGVzdHMsIGluaXRpYWxseSB0aHJ1IGxpbmtlZCByb3V0aW5lcyBidXQKK1RoaXMgY29tbWFuZCBkb2VzIGFzc29ydGVkIHNhbml0eSB0ZXN0cywgaW5pdGlhbGx5IHRocm91Z2ggbGlua2VkIHJvdXRpbmVzIGJ1dAogYWxzbyB3aWxsIGxvb2sgZm9yIGEgZGlyZWN0b3J5IHdpdGggbW9yZSB0ZXN0cyBpbiB0aGUgZm9ybSBvZiBzY3JpcHRzLgogCiBPUFRJT05TCmRpZmYgLS1naXQgYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi10aW1lY2hhcnQudHh0IGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtdGltZWNoYXJ0LnR4dAppbmRleCA0YjE3ODgzLi5kN2I3OWUyIDEwMDY0NAotLS0gYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi10aW1lY2hhcnQudHh0CisrKyBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXRpbWVjaGFydC50eHQKQEAgLTM4LDYgKzM4LDggQEAKIC0tcHJvY2Vzczo6CiAgICAgICAgIFNlbGVjdCB0aGUgcHJvY2Vzc2VzIHRvIGRpc3BsYXksIGJ5IG5hbWUgb3IgUElECiAKKy0tc3ltZnM9PGRpcmVjdG9yeT46OgorICAgICAgICBMb29rIGZvciBmaWxlcyB3aXRoIHN5bWJvbHMgcmVsYXRpdmUgdG8gdGhpcyBkaXJlY3RvcnkuCiAKIFNFRSBBTFNPCiAtLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtdG9wLnR4dCBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXRvcC50eHQKaW5kZXggMWY5Njg3Ni4uZjZlYjFjZCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtdG9wLnR4dAorKysgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi10b3AudHh0CkBAIC0xMiw3ICsxMiw3IEBACiAKIERFU0NSSVBUSU9OCiAtLS0tLS0tLS0tLQotVGhpcyBjb21tYW5kIGdlbmVyYXRlcyBhbmQgZGlzcGxheXMgYSBwZXJmb3JtYW5jZSBjb3VudGVyIHByb2ZpbGUgaW4gcmVhbHRpbWUuCitUaGlzIGNvbW1hbmQgZ2VuZXJhdGVzIGFuZCBkaXNwbGF5cyBhIHBlcmZvcm1hbmNlIGNvdW50ZXIgcHJvZmlsZSBpbiByZWFsIHRpbWUuCiAKIAogT1BUSU9OUwpAQCAtMjcsOCArMjcsOCBAQAogCiAtQyA8Y3B1LWxpc3Q+OjoKIC0tY3B1PTxjcHU+OjoKLU1vbml0b3Igb25seSBvbiB0aGUgbGlzdCBvZiBjcHVzIHByb3ZpZGVkLiBNdWx0aXBsZSBDUFVzIGNhbiBiZSBwcm92aWRlZCBhcyBhCi1jb21tYS1zcGVyYXRlZCBsaXN0IHdpdGggbm8gc3BhY2U6IDAsMS4gUmFuZ2VzIG9mIENQVXMgYXJlIHNwZWNpZmllZCB3aXRoIC06IDAtMi4KK01vbml0b3Igb25seSBvbiB0aGUgbGlzdCBvZiBDUFVzIHByb3ZpZGVkLiBNdWx0aXBsZSBDUFVzIGNhbiBiZSBwcm92aWRlZCBhcyBhCitjb21tYS1zZXBhcmF0ZWQgbGlzdCB3aXRoIG5vIHNwYWNlOiAwLDEuIFJhbmdlcyBvZiBDUFVzIGFyZSBzcGVjaWZpZWQgd2l0aCAtOiAwLTIuCiBEZWZhdWx0IGlzIHRvIG1vbml0b3IgYWxsIENQVVMuCiAKIC1kIDxzZWNvbmRzPjo6CkBAIC01MCw2ICs1MCwxMCBAQAogLS1jb3VudC1maWx0ZXI9PGNvdW50Pjo6CiAJT25seSBkaXNwbGF5IGZ1bmN0aW9ucyB3aXRoIG1vcmUgZXZlbnRzIHRoYW4gdGhpcy4KIAorLWc6OgorLS1ncm91cDo6CisgICAgICAgIFB1dCB0aGUgY291bnRlcnMgaW50byBhIGNvdW50ZXIgZ3JvdXAuCisKIC1GIDxmcmVxPjo6CiAtLWZyZXE9PGZyZXE+OjoKIAlQcm9maWxlIGF0IHRoaXMgZnJlcXVlbmN5LgpAQCAtNjgsNyArNzIsMTEgQEAKIAogLXAgPHBpZD46OgogLS1waWQ9PHBpZD46OgotCVByb2ZpbGUgZXZlbnRzIG9uIGV4aXN0aW5nIHBpZC4KKwlQcm9maWxlIGV2ZW50cyBvbiBleGlzdGluZyBQcm9jZXNzIElELgorCistdCA8dGlkPjo6CistLXRpZD08dGlkPjo6CisgICAgICAgIFByb2ZpbGUgZXZlbnRzIG9uIGV4aXN0aW5nIHRocmVhZCBJRC4KIAogLXIgPHByaW9yaXR5Pjo6CiAtLXJlYWx0aW1lPTxwcmlvcml0eT46OgpAQCAtNzgsNiArODYsMTggQEAKIC0tc3ltLWFubm90YXRlPTxzeW1ib2w+OjoKICAgICAgICAgQW5ub3RhdGUgdGhpcyBzeW1ib2wuCiAKKy1LOjoKKy0taGlkZV9rZXJuZWxfc3ltYm9sczo6CisgICAgICAgIEhpZGUga2VybmVsIHN5bWJvbHMuCisKKy1VOjoKKy0taGlkZV91c2VyX3N5bWJvbHM6OgorICAgICAgICBIaWRlIHVzZXIgc3ltYm9scy4KKworLUQ6OgorLS1kdW1wLXN5bXRhYjo6CisgICAgICAgIER1bXAgdGhlIHN5bWJvbCB0YWJsZSB1c2VkIGZvciBwcm9maWxpbmcuCisKIC12OjoKIC0tdmVyYm9zZTo6CiAJQmUgbW9yZSB2ZXJib3NlIChzaG93IGNvdW50ZXIgb3BlbiBlcnJvcnMsIGV0YykuCmRpZmYgLS1naXQgYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi10cmFjZS1wZXJsLnR4dCBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXRyYWNlLXBlcmwudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZTY1MjVlLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXRyYWNlLXBlcmwudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMjE3ICswLDAgQEAKLXBlcmYtdHJhY2UtcGVybCgxKQotPT09PT09PT09PT09PT09PT09Ci0KLU5BTUUKLS0tLS0KLXBlcmYtdHJhY2UtcGVybCAtIFByb2Nlc3MgdHJhY2UgZGF0YSB3aXRoIGEgUGVybCBzY3JpcHQKLQotU1lOT1BTSVMKLS0tLS0tLS0tCi1bdmVyc2VdCi0ncGVyZiB0cmFjZScgWy1zIFtQZXJsXTpzY3JpcHRbLnBsXSBdCi0KLURFU0NSSVBUSU9OCi0tLS0tLS0tLS0tLQotCi1UaGlzIHBlcmYgdHJhY2Ugb3B0aW9uIGlzIHVzZWQgdG8gcHJvY2VzcyBwZXJmIHRyYWNlIGRhdGEgdXNpbmcgcGVyZidzCi1idWlsdC1pbiBQZXJsIGludGVycHJldGVyLiAgSXQgcmVhZHMgYW5kIHByb2Nlc3NlcyB0aGUgaW5wdXQgZmlsZSBhbmQKLWRpc3BsYXlzIHRoZSByZXN1bHRzIG9mIHRoZSB0cmFjZSBhbmFseXNpcyBpbXBsZW1lbnRlZCBpbiB0aGUgZ2l2ZW4KLVBlcmwgc2NyaXB0LCBpZiBhbnkuCi0KLVNUQVJURVIgU0NSSVBUUwotLS0tLS0tLS0tLS0tLS0tCi0KLVlvdSBjYW4gYXZvaWQgcmVhZGluZyB0aGUgcmVzdCBvZiB0aGlzIGRvY3VtZW50IGJ5IHJ1bm5pbmcgJ3BlcmYgdHJhY2UKLS1nIHBlcmwnIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyBhbiBleGlzdGluZyBwZXJmLmRhdGEgdHJhY2UgZmlsZS4KLVRoYXQgd2lsbCBnZW5lcmF0ZSBhIHN0YXJ0ZXIgc2NyaXB0IGNvbnRhaW5pbmcgYSBoYW5kbGVyIGZvciBlYWNoIG9mCi10aGUgZXZlbnQgdHlwZXMgaW4gdGhlIHRyYWNlIGZpbGU7IGl0IHNpbXBseSBwcmludHMgZXZlcnkgYXZhaWxhYmxlCi1maWVsZCBmb3IgZWFjaCBldmVudCBpbiB0aGUgdHJhY2UgZmlsZS4KLQotWW91IGNhbiBhbHNvIGxvb2sgYXQgdGhlIGV4aXN0aW5nIHNjcmlwdHMgaW4KLX4vbGliZXhlYy9wZXJmLWNvcmUvc2NyaXB0cy9wZXJsIGZvciB0eXBpY2FsIGV4YW1wbGVzIHNob3dpbmcgaG93IHRvCi1kbyBiYXNpYyB0aGluZ3MgbGlrZSBhZ2dyZWdhdGUgZXZlbnQgZGF0YSwgcHJpbnQgcmVzdWx0cywgZXRjLiAgQWxzbywKLXRoZSBjaGVjay1wZXJmLXRyYWNlLnBsIHNjcmlwdCwgd2hpbGUgbm90IGludGVyZXN0aW5nIGZvciBpdHMgcmVzdWx0cywKLWF0dGVtcHRzIHRvIGV4ZXJjaXNlIGFsbCBvZiB0aGUgbWFpbiBzY3JpcHRpbmcgZmVhdHVyZXMuCi0KLUVWRU5UIEhBTkRMRVJTCi0tLS0tLS0tLS0tLS0tLQotCi1XaGVuIHBlcmYgdHJhY2UgaXMgaW52b2tlZCB1c2luZyBhIHRyYWNlIHNjcmlwdCwgYSB1c2VyLWRlZmluZWQKLSdoYW5kbGVyIGZ1bmN0aW9uJyBpcyBjYWxsZWQgZm9yIGVhY2ggZXZlbnQgaW4gdGhlIHRyYWNlLiAgSWYgdGhlcmUncwotbm8gaGFuZGxlciBmdW5jdGlvbiBkZWZpbmVkIGZvciBhIGdpdmVuIGV2ZW50IHR5cGUsIHRoZSBldmVudCBpcwotaWdub3JlZCAob3IgcGFzc2VkIHRvIGEgJ3RyYWNlX2hhbmRsZWQnIGZ1bmN0aW9uLCBzZWUgYmVsb3cpIGFuZCB0aGUKLW5leHQgZXZlbnQgaXMgcHJvY2Vzc2VkLgotCi1Nb3N0IG9mIHRoZSBldmVudCdzIGZpZWxkIHZhbHVlcyBhcmUgcGFzc2VkIGFzIGFyZ3VtZW50cyB0byB0aGUKLWhhbmRsZXIgZnVuY3Rpb247IHNvbWUgb2YgdGhlIGxlc3MgY29tbW9uIG9uZXMgYXJlbid0IC0gdGhvc2UgYXJlCi1hdmFpbGFibGUgYXMgY2FsbHMgYmFjayBpbnRvIHRoZSBwZXJmIGV4ZWN1dGFibGUgKHNlZSBiZWxvdykuCi0KLUFzIGFuIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgcGVyZiByZWNvcmQgY29tbWFuZCBjYW4gYmUgdXNlZCB0byByZWNvcmQKLWFsbCBzY2hlZF93YWtldXAgZXZlbnRzIGluIHRoZSBzeXN0ZW06Ci0KLSAjIHBlcmYgcmVjb3JkIC1hIC1lIHNjaGVkOnNjaGVkX3dha2V1cAotCi1UcmFjZXMgbWVhbnQgdG8gYmUgcHJvY2Vzc2VkIHVzaW5nIGEgc2NyaXB0IHNob3VsZCBiZSByZWNvcmRlZCB3aXRoCi10aGUgYWJvdmUgb3B0aW9uOiAtYSB0byBlbmFibGUgc3lzdGVtLXdpZGUgY29sbGVjdGlvbi4KLQotVGhlIGZvcm1hdCBmaWxlIGZvciB0aGUgc2NoZWRfd2FrZXAgZXZlbnQgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGZpZWxkcwotKHNlZSAvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL2V2ZW50cy9zY2hlZC9zY2hlZF93YWtldXAvZm9ybWF0KToKLQotLS0tLQotIGZvcm1hdDoKLSAgICAgICAgZmllbGQ6dW5zaWduZWQgc2hvcnQgY29tbW9uX3R5cGU7Ci0gICAgICAgIGZpZWxkOnVuc2lnbmVkIGNoYXIgY29tbW9uX2ZsYWdzOwotICAgICAgICBmaWVsZDp1bnNpZ25lZCBjaGFyIGNvbW1vbl9wcmVlbXB0X2NvdW50OwotICAgICAgICBmaWVsZDppbnQgY29tbW9uX3BpZDsKLSAgICAgICAgZmllbGQ6aW50IGNvbW1vbl9sb2NrX2RlcHRoOwotCi0gICAgICAgIGZpZWxkOmNoYXIgY29tbVtUQVNLX0NPTU1fTEVOXTsKLSAgICAgICAgZmllbGQ6cGlkX3QgcGlkOwotICAgICAgICBmaWVsZDppbnQgcHJpbzsKLSAgICAgICAgZmllbGQ6aW50IHN1Y2Nlc3M7Ci0gICAgICAgIGZpZWxkOmludCB0YXJnZXRfY3B1OwotLS0tLQotCi1UaGUgaGFuZGxlciBmdW5jdGlvbiBmb3IgdGhpcyBldmVudCB3b3VsZCBiZSBkZWZpbmVkIGFzOgotCi0tLS0tCi1zdWIgc2NoZWQ6OnNjaGVkX3dha2V1cAotewotICAgbXkgKCRldmVudF9uYW1lLCAkY29udGV4dCwgJGNvbW1vbl9jcHUsICRjb21tb25fc2VjcywKLSAgICAgICAkY29tbW9uX25zZWNzLCAkY29tbW9uX3BpZCwgJGNvbW1vbl9jb21tLAotICAgICAgICRjb21tLCAkcGlkLCAkcHJpbywgJHN1Y2Nlc3MsICR0YXJnZXRfY3B1KSA9IEBfOwotfQotLS0tLQotCi1UaGUgaGFuZGxlciBmdW5jdGlvbiB0YWtlcyB0aGUgZm9ybSBzdWJzeXN0ZW06OmV2ZW50X25hbWUuCi0KLVRoZSAkY29tbW9uXyogYXJndW1lbnRzIGluIHRoZSBoYW5kbGVyJ3MgYXJndW1lbnQgbGlzdCBhcmUgdGhlIHNldCBvZgotYXJndW1lbnRzIHBhc3NlZCB0byBhbGwgZXZlbnQgaGFuZGxlcnM7IHNvbWUgb2YgdGhlIGZpZWxkcyBjb3JyZXNwb25kCi10byB0aGUgY29tbW9uXyogZmllbGRzIGluIHRoZSBmb3JtYXQgZmlsZSwgYnV0IHNvbWUgYXJlIHN5bnRoZXNpemVkLAotYW5kIHNvbWUgb2YgdGhlIGNvbW1vbl8qIGZpZWxkcyBhcmVuJ3QgY29tbW9uIGVub3VnaCB0byB0byBiZSBwYXNzZWQKLXRvIGV2ZXJ5IGV2ZW50IGFzIGFyZ3VtZW50cyBidXQgYXJlIGF2YWlsYWJsZSBhcyBsaWJyYXJ5IGZ1bmN0aW9ucy4KLQotSGVyZSdzIGEgYnJpZWYgZGVzY3JpcHRpb24gb2YgZWFjaCBvZiB0aGUgaW52YXJpYW50IGV2ZW50IGFyZ3M6Ci0KLSAkZXZlbnRfbmFtZSAJICAJICAgIHRoZSBuYW1lIG9mIHRoZSBldmVudCBhcyB0ZXh0Ci0gJGNvbnRleHQJCSAgICBhbiBvcGFxdWUgJ2Nvb2tpZScgdXNlZCBpbiBjYWxscyBiYWNrIGludG8gcGVyZgotICRjb21tb25fY3B1CQkgICAgdGhlIGNwdSB0aGUgZXZlbnQgb2NjdXJyZWQgb24KLSAkY29tbW9uX3NlY3MJCSAgICB0aGUgc2VjcyBwb3J0aW9uIG9mIHRoZSBldmVudCB0aW1lc3RhbXAKLSAkY29tbW9uX25zZWNzCQkgICAgdGhlIG5zZWNzIHBvcnRpb24gb2YgdGhlIGV2ZW50IHRpbWVzdGFtcAotICRjb21tb25fcGlkCQkgICAgdGhlIHBpZCBvZiB0aGUgY3VycmVudCB0YXNrCi0gJGNvbW1vbl9jb21tCQkgICAgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgcHJvY2VzcwotCi1BbGwgb2YgdGhlIHJlbWFpbmluZyBmaWVsZHMgaW4gdGhlIGV2ZW50J3MgZm9ybWF0IGZpbGUgaGF2ZQotY291bnRlcnBhcnRzIGFzIGhhbmRsZXIgZnVuY3Rpb24gYXJndW1lbnRzIG9mIHRoZSBzYW1lIG5hbWUsIGFzIGNhbiBiZQotc2VlbiBpbiB0aGUgZXhhbXBsZSBhYm92ZS4KLQotVGhlIGFib3ZlIHByb3ZpZGVzIHRoZSBiYXNpY3MgbmVlZGVkIHRvIGRpcmVjdGx5IGFjY2VzcyBldmVyeSBmaWVsZCBvZgotZXZlcnkgZXZlbnQgaW4gYSB0cmFjZSwgd2hpY2ggY292ZXJzIDkwJSBvZiB3aGF0IHlvdSBuZWVkIHRvIGtub3cgdG8KLXdyaXRlIGEgdXNlZnVsIHRyYWNlIHNjcmlwdC4gIFRoZSBzZWN0aW9ucyBiZWxvdyBjb3ZlciB0aGUgcmVzdC4KLQotU0NSSVBUIExBWU9VVAotLS0tLS0tLS0tLS0tLQotCi1FdmVyeSBwZXJmIHRyYWNlIFBlcmwgc2NyaXB0IHNob3VsZCBzdGFydCBieSBzZXR0aW5nIHVwIGEgUGVybCBtb2R1bGUKLXNlYXJjaCBwYXRoIGFuZCAndXNlJ2luZyBhIGZldyBzdXBwb3J0IG1vZHVsZXMgKHNlZSBtb2R1bGUKLWRlc2NyaXB0aW9ucyBiZWxvdyk6Ci0KLS0tLS0KLSB1c2UgbGliICIkRU5WeydQRVJGX0VYRUNfUEFUSCd9L3NjcmlwdHMvcGVybC9QZXJmLVRyYWNlLVV0aWwvbGliIjsKLSB1c2UgbGliICIuL1BlcmYtVHJhY2UtVXRpbC9saWIiOwotIHVzZSBQZXJmOjpUcmFjZTo6Q29yZTsKLSB1c2UgUGVyZjo6VHJhY2U6OkNvbnRleHQ7Ci0gdXNlIFBlcmY6OlRyYWNlOjpVdGlsOwotLS0tLQotCi1UaGUgcmVzdCBvZiB0aGUgc2NyaXB0IGNhbiBjb250YWluIGhhbmRsZXIgZnVuY3Rpb25zIGFuZCBzdXBwb3J0Ci1mdW5jdGlvbnMgaW4gYW55IG9yZGVyLgotCi1Bc2lkZSBmcm9tIHRoZSBldmVudCBoYW5kbGVyIGZ1bmN0aW9ucyBkaXNjdXNzZWQgYWJvdmUsIGV2ZXJ5IHNjcmlwdAotY2FuIGltcGxlbWVudCBhIHNldCBvZiBvcHRpb25hbCBmdW5jdGlvbnM6Ci0KLSp0cmFjZV9iZWdpbiosIGlmIGRlZmluZWQsIGlzIGNhbGxlZCBiZWZvcmUgYW55IGV2ZW50IGlzIHByb2Nlc3NlZCBhbmQKLWdpdmVzIHNjcmlwdHMgYSBjaGFuY2UgdG8gZG8gc2V0dXAgdGFza3M6Ci0KLS0tLS0KLSBzdWIgdHJhY2VfYmVnaW4KLSB7Ci0gfQotLS0tLQotCi0qdHJhY2VfZW5kKiwgaWYgZGVmaW5lZCwgaXMgY2FsbGVkIGFmdGVyIGFsbCBldmVudHMgaGF2ZSBiZWVuCi0gcHJvY2Vzc2VkIGFuZCBnaXZlcyBzY3JpcHRzIGEgY2hhbmNlIHRvIGRvIGVuZC1vZi1zY3JpcHQgdGFza3MsIHN1Y2gKLSBhcyBkaXNwbGF5IHJlc3VsdHM6Ci0KLS0tLS0KLXN1YiB0cmFjZV9lbmQKLXsKLX0KLS0tLS0KLQotKnRyYWNlX3VuaGFuZGxlZCosIGlmIGRlZmluZWQsIGlzIGNhbGxlZCBhZnRlciBmb3IgYW55IGV2ZW50IHRoYXQKLSBkb2Vzbid0IGhhdmUgYSBoYW5kbGVyIGV4cGxpY2l0bHkgZGVmaW5lZCBmb3IgaXQuICBUaGUgc3RhbmRhcmQgc2V0Ci0gb2YgY29tbW9uIGFyZ3VtZW50cyBhcmUgcGFzc2VkIGludG8gaXQ6Ci0KLS0tLS0KLXN1YiB0cmFjZV91bmhhbmRsZWQKLXsKLSAgICBteSAoJGV2ZW50X25hbWUsICRjb250ZXh0LCAkY29tbW9uX2NwdSwgJGNvbW1vbl9zZWNzLAotICAgICAgICAkY29tbW9uX25zZWNzLCAkY29tbW9uX3BpZCwgJGNvbW1vbl9jb21tKSA9IEBfOwotfQotLS0tLQotCi1UaGUgcmVtYWluaW5nIHNlY3Rpb25zIHByb3ZpZGUgZGVzY3JpcHRpb25zIG9mIGVhY2ggb2YgdGhlIGF2YWlsYWJsZQotYnVpbHQtaW4gcGVyZiB0cmFjZSBQZXJsIG1vZHVsZXMgYW5kIHRoZWlyIGFzc29jaWF0ZWQgZnVuY3Rpb25zLgotCi1BVkFJTEFCTEUgTU9EVUxFUyBBTkQgRlVOQ1RJT05TCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRoZSBmb2xsb3dpbmcgc2VjdGlvbnMgZGVzY3JpYmUgdGhlIGZ1bmN0aW9ucyBhbmQgdmFyaWFibGVzIGF2YWlsYWJsZQotdmlhIHRoZSB2YXJpb3VzIFBlcmY6OlRyYWNlOjoqIFBlcmwgbW9kdWxlcy4gIFRvIHVzZSB0aGUgZnVuY3Rpb25zIGFuZAotdmFyaWFibGVzIGZyb20gdGhlIGdpdmVuIG1vZHVsZSwgYWRkIHRoZSBjb3JyZXNwb25kaW5nICd1c2UKLVBlcmY6OlRyYWNlOjpYWFgnIGxpbmUgdG8geW91ciBwZXJmIHRyYWNlIHNjcmlwdC4KLQotUGVyZjo6VHJhY2U6OkNvcmUgTW9kdWxlCi1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KLQotVGhlc2UgZnVuY3Rpb25zIHByb3ZpZGUgc29tZSBlc3NlbnRpYWwgZnVuY3Rpb25zIHRvIHVzZXIgc2NyaXB0cy4KLQotVGhlICpmbGFnX3N0ciogYW5kICpzeW1ib2xfc3RyKiBmdW5jdGlvbnMgcHJvdmlkZSBodW1hbi1yZWFkYWJsZQotc3RyaW5ncyBmb3IgZmxhZyBhbmQgc3ltYm9saWMgZmllbGRzLiAgVGhlc2UgY29ycmVzcG9uZCB0byB0aGUgc3RyaW5ncwotYW5kIHZhbHVlcyBwYXJzZWQgZnJvbSB0aGUgJ3ByaW50IGZtdCcgZmllbGRzIG9mIHRoZSBldmVudCBmb3JtYXQKLWZpbGVzOgotCi0gIGZsYWdfc3RyKCRldmVudF9uYW1lLCAkZmllbGRfbmFtZSwgJGZpZWxkX3ZhbHVlKSAtIHJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRpb24gY29ycmVzcG9uZGluZyB0byAkZmllbGRfdmFsdWUgZm9yIHRoZSBmbGFnIGZpZWxkICRmaWVsZF9uYW1lIG9mIGV2ZW50ICRldmVudF9uYW1lCi0gIHN5bWJvbF9zdHIoJGV2ZW50X25hbWUsICRmaWVsZF9uYW1lLCAkZmllbGRfdmFsdWUpIC0gcmV0dXJucyB0aGUgc3RyaW5nIHJlcHJlc2VudGlvbiBjb3JyZXNwb25kaW5nIHRvICRmaWVsZF92YWx1ZSBmb3IgdGhlIHN5bWJvbGljIGZpZWxkICRmaWVsZF9uYW1lIG9mIGV2ZW50ICRldmVudF9uYW1lCi0KLVBlcmY6OlRyYWNlOjpDb250ZXh0IE1vZHVsZQotfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Ci0KLVNvbWUgb2YgdGhlICdjb21tb24nIGZpZWxkcyBpbiB0aGUgZXZlbnQgZm9ybWF0IGZpbGUgYXJlbid0IGFsbCB0aGF0Ci1jb21tb24sIGJ1dCBuZWVkIHRvIGJlIG1hZGUgYWNjZXNzaWJsZSB0byB1c2VyIHNjcmlwdHMgbm9uZXRoZWxlc3MuCi0KLVBlcmY6OlRyYWNlOjpDb250ZXh0IGRlZmluZXMgYSBzZXQgb2YgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHVzZWQgdG8KLWFjY2VzcyB0aGlzIGRhdGEgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGN1cnJlbnQgZXZlbnQuICBFYWNoIG9mIHRoZXNlCi1mdW5jdGlvbnMgZXhwZWN0cyBhICRjb250ZXh0IHZhcmlhYmxlLCB3aGljaCBpcyB0aGUgc2FtZSBhcyB0aGUKLSRjb250ZXh0IHZhcmlhYmxlIHBhc3NlZCBpbnRvIGV2ZXJ5IGV2ZW50IGhhbmRsZXIgYXMgdGhlIHNlY29uZAotYXJndW1lbnQuCi0KLSBjb21tb25fcGMoJGNvbnRleHQpIC0gcmV0dXJucyBjb21tb25fcHJlZW1wdCBjb3VudCBmb3IgdGhlIGN1cnJlbnQgZXZlbnQKLSBjb21tb25fZmxhZ3MoJGNvbnRleHQpIC0gcmV0dXJucyBjb21tb25fZmxhZ3MgZm9yIHRoZSBjdXJyZW50IGV2ZW50Ci0gY29tbW9uX2xvY2tfZGVwdGgoJGNvbnRleHQpIC0gcmV0dXJucyBjb21tb25fbG9ja19kZXB0aCBmb3IgdGhlIGN1cnJlbnQgZXZlbnQKLQotUGVyZjo6VHJhY2U6OlV0aWwgTW9kdWxlCi1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KLQotVmFyaW91cyB1dGlsaXR5IGZ1bmN0aW9ucyBmb3IgdXNlIHdpdGggcGVyZiB0cmFjZToKLQotICBuc2Vjcygkc2VjcywgJG5zZWNzKSAtIHJldHVybnMgdG90YWwgbnNlY3MgZ2l2ZW4gc2Vjcy9uc2VjcyBwYWlyCi0gIG5zZWNzX3NlY3MoJG5zZWNzKSAtIHJldHVybnMgd2hvbGUgc2VjcyBwb3J0aW9uIGdpdmVuIG5zZWNzCi0gIG5zZWNzX25zZWNzKCRuc2VjcykgLSByZXR1cm5zIG5zZWNzIHJlbWFpbmRlciBnaXZlbiBuc2VjcwotICBuc2Vjc19zdHIoJG5zZWNzKSAtIHJldHVybnMgcHJpbnRhYmxlIHN0cmluZyBpbiB0aGUgZm9ybSBzZWNzLm5zZWNzCi0gIGF2ZygkdG90YWwsICRuKSAtIHJldHVybnMgYXZlcmFnZSBnaXZlbiBhIHN1bSBhbmQgYSB0b3RhbCBudW1iZXIgb2YgdmFsdWVzCi0KLVNFRSBBTFNPCi0tLS0tLS0tLQotbGlua3BlcmY6cGVyZi10cmFjZVsxXQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtdHJhY2UtcHl0aG9uLnR4dCBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXRyYWNlLXB5dGhvbi50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5M2JlODAuLjAwMDAwMDAKLS0tIGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtdHJhY2UtcHl0aG9uLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDYyMyArMCwwIEBACi1wZXJmLXRyYWNlLXB5dGhvbigxKQotPT09PT09PT09PT09PT09PT09PT0KLQotTkFNRQotLS0tLQotcGVyZi10cmFjZS1weXRob24gLSBQcm9jZXNzIHRyYWNlIGRhdGEgd2l0aCBhIFB5dGhvbiBzY3JpcHQKLQotU1lOT1BTSVMKLS0tLS0tLS0tCi1bdmVyc2VdCi0ncGVyZiB0cmFjZScgWy1zIFtQeXRob25dOnNjcmlwdFsucHldIF0KLQotREVTQ1JJUFRJT04KLS0tLS0tLS0tLS0tCi0KLVRoaXMgcGVyZiB0cmFjZSBvcHRpb24gaXMgdXNlZCB0byBwcm9jZXNzIHBlcmYgdHJhY2UgZGF0YSB1c2luZyBwZXJmJ3MKLWJ1aWx0LWluIFB5dGhvbiBpbnRlcnByZXRlci4gIEl0IHJlYWRzIGFuZCBwcm9jZXNzZXMgdGhlIGlucHV0IGZpbGUgYW5kCi1kaXNwbGF5cyB0aGUgcmVzdWx0cyBvZiB0aGUgdHJhY2UgYW5hbHlzaXMgaW1wbGVtZW50ZWQgaW4gdGhlIGdpdmVuCi1QeXRob24gc2NyaXB0LCBpZiBhbnkuCi0KLUEgUVVJQ0sgRVhBTVBMRQotLS0tLS0tLS0tLS0tLS0tCi0KLVRoaXMgc2VjdGlvbiBzaG93cyB0aGUgcHJvY2Vzcywgc3RhcnQgdG8gZmluaXNoLCBvZiBjcmVhdGluZyBhIHdvcmtpbmcKLVB5dGhvbiBzY3JpcHQgdGhhdCBhZ2dyZWdhdGVzIGFuZCBleHRyYWN0cyB1c2VmdWwgaW5mb3JtYXRpb24gZnJvbSBhCi1yYXcgcGVyZiB0cmFjZSBzdHJlYW0uICBZb3UgY2FuIGF2b2lkIHJlYWRpbmcgdGhlIHJlc3Qgb2YgdGhpcwotZG9jdW1lbnQgaWYgYW4gZXhhbXBsZSBpcyBlbm91Z2ggZm9yIHlvdTsgdGhlIHJlc3Qgb2YgdGhlIGRvY3VtZW50Ci1wcm92aWRlcyBtb3JlIGRldGFpbHMgb24gZWFjaCBzdGVwIGFuZCBsaXN0cyB0aGUgbGlicmFyeSBmdW5jdGlvbnMKLWF2YWlsYWJsZSB0byBzY3JpcHQgd3JpdGVycy4KLQotVGhpcyBleGFtcGxlIGFjdHVhbGx5IGRldGFpbHMgdGhlIHN0ZXBzIHRoYXQgd2VyZSB1c2VkIHRvIGNyZWF0ZSB0aGUKLSdzeXNjYWxsLWNvdW50cycgc2NyaXB0IHlvdSBzZWUgd2hlbiB5b3UgbGlzdCB0aGUgYXZhaWxhYmxlIHBlcmYgdHJhY2UKLXNjcmlwdHMgdmlhICdwZXJmIHRyYWNlIC1sJy4gIEFzIHN1Y2gsIHRoaXMgc2NyaXB0IGFsc28gc2hvd3MgaG93IHRvCi1pbnRlZ3JhdGUgeW91ciBzY3JpcHQgaW50byB0aGUgbGlzdCBvZiBnZW5lcmFsLXB1cnBvc2UgJ3BlcmYgdHJhY2UnCi1zY3JpcHRzIGxpc3RlZCBieSB0aGF0IGNvbW1hbmQuCi0KLVRoZSBzeXNjYWxsLWNvdW50cyBzY3JpcHQgaXMgYSBzaW1wbGUgc2NyaXB0LCBidXQgZGVtb25zdHJhdGVzIGFsbCB0aGUKLWJhc2ljIGlkZWFzIG5lY2Vzc2FyeSB0byBjcmVhdGUgYSB1c2VmdWwgc2NyaXB0LiAgSGVyZSdzIGFuIGV4YW1wbGUKLW9mIGl0cyBvdXRwdXQgKHN5c2NhbGwgbmFtZXMgYXJlIG5vdCB5ZXQgc3VwcG9ydGVkLCB0aGV5IHdpbGwgYXBwZWFyCi1hcyBudW1iZXJzKToKLQotLS0tLQotc3lzY2FsbCBldmVudHM6Ci0KLWV2ZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIC0tLS0tLS0tLS0tCi1zeXNfd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDU1MDY3Ci1zeXNfZ2V0ZGVudHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0MDcyCi1zeXNfY2xvc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMDM3Ci1zeXNfc3dhcG9mZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNzY5Ci1zeXNfcmVhZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTIzCi1zeXNfc2NoZWRfc2V0cGFyYW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgODI2Ci1zeXNfb3BlbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzMxCi1zeXNfbmV3ZnN0YXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzI2Ci1zeXNfbW1hcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjE3Ci1zeXNfbXVubWFwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjE2Ci1zeXNfZnV0ZXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQxCi1zeXNfc2VsZWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAyCi1zeXNfcG9sbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDg0Ci1zeXNfc2V0aXRpbWVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCi1zeXNfd3JpdGV2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0xNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci1zeXNfbHNlZWsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci1zeXNfcnRfc2lncHJvY21hc2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2Ci1zeXNfd2FpdDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCi1zeXNfaW9jdGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCi1zeXNfc2V0X3JvYnVzdF9saXN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi1zeXNfZXhpdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi01NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi1zeXNfYWNjZXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0tLS0tCi0KLUJhc2ljYWxseSBvdXIgdGFzayBpcyB0byBrZWVwIGEgcGVyLXN5c2NhbGwgdGFsbHkgdGhhdCBnZXRzIHVwZGF0ZWQKLWV2ZXJ5IHRpbWUgYSBzeXN0ZW0gY2FsbCBvY2N1cnMgaW4gdGhlIHN5c3RlbS4gIE91ciBzY3JpcHQgd2lsbCBkbwotdGhhdCwgYnV0IGZpcnN0IHdlIG5lZWQgdG8gcmVjb3JkIHRoZSBkYXRhIHRoYXQgd2lsbCBiZSBwcm9jZXNzZWQgYnkKLXRoYXQgc2NyaXB0LiAgVGhlb3JldGljYWxseSwgdGhlcmUgYXJlIGEgY291cGxlIG9mIHdheXMgd2UgY291bGQgZG8KLXRoYXQ6Ci0KLS0gd2UgY291bGQgZW5hYmxlIGV2ZXJ5IGV2ZW50IHVuZGVyIHRoZSB0cmFjaW5nL2V2ZW50cy9zeXNjYWxscwotICBkaXJlY3RvcnksIGJ1dCB0aGlzIGlzIG92ZXIgNjAwIHN5c2NhbGxzLCB3ZWxsIGJleW9uZCB0aGUgbnVtYmVyCi0gIGFsbG93YWJsZSBieSBwZXJmLiAgVGhlc2UgaW5kaXZpZHVhbCBzeXNjYWxsIGV2ZW50cyB3aWxsIGhvd2V2ZXIgYmUKLSAgdXNlZnVsIGlmIHdlIHdhbnQgdG8gbGF0ZXIgdXNlIHRoZSBndWlkYW5jZSB3ZSBnZXQgZnJvbSB0aGUKLSAgZ2VuZXJhbC1wdXJwb3NlIHNjcmlwdHMgdG8gZHJpbGwgZG93biBhbmQgZ2V0IG1vcmUgZGV0YWlsIGFib3V0Ci0gIGluZGl2aWR1YWwgc3lzY2FsbHMgb2YgaW50ZXJlc3QuCi0KLS0gd2UgY2FuIGVuYWJsZSB0aGUgc3lzX2VudGVyIGFuZC9vciBzeXNfZXhpdCBzeXNjYWxscyBmb3VuZCB1bmRlcgotICB0cmFjaW5nL2V2ZW50cy9yYXdfc3lzY2FsbHMuICBUaGVzZSBhcmUgY2FsbGVkIGZvciBhbGwgc3lzY2FsbHM7IHRoZQotICAnaWQnIGZpZWxkIGNhbiBiZSB1c2VkIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gaW5kaXZpZHVhbCBzeXNjYWxsCi0gIG51bWJlcnMuCi0KLUZvciB0aGlzIHNjcmlwdCwgd2Ugb25seSBuZWVkIHRvIGtub3cgdGhhdCBhIHN5c2NhbGwgd2FzIGVudGVyZWQ7IHdlCi1kb24ndCBjYXJlIGhvdyBpdCBleGl0ZWQsIHNvIHdlJ2xsIHVzZSAncGVyZiByZWNvcmQnIHRvIHJlY29yZCBvbmx5Ci10aGUgc3lzX2VudGVyIGV2ZW50czoKLQotLS0tLQotIyBwZXJmIHJlY29yZCAtYSAtZSByYXdfc3lzY2FsbHM6c3lzX2VudGVyCi0KLV5DWyBwZXJmIHJlY29yZDogV29rZW4gdXAgMSB0aW1lcyB0byB3cml0ZSBkYXRhIF0KLVsgcGVyZiByZWNvcmQ6IENhcHR1cmVkIGFuZCB3cm90ZSA1Ni41NDUgTUIgcGVyZi5kYXRhICh+MjQ3MDUwMyBzYW1wbGVzKSBdCi0tLS0tCi0KLVRoZSBvcHRpb25zIGJhc2ljYWxseSBzYXkgdG8gY29sbGVjdCBkYXRhIGZvciBldmVyeSBzeXNjYWxsIGV2ZW50Ci1zeXN0ZW0td2lkZSBhbmQgbXVsdGlwbGV4IHRoZSBwZXItY3B1IG91dHB1dCBpbnRvIGEgc2luZ2xlIHN0cmVhbS4KLVRoYXQgc2luZ2xlIHN0cmVhbSB3aWxsIGJlIHJlY29yZGVkIGluIGEgZmlsZSBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkKLWNhbGxlZCBwZXJmLmRhdGEuCi0KLU9uY2Ugd2UgaGF2ZSBhIHBlcmYuZGF0YSBmaWxlIGNvbnRhaW5pbmcgb3VyIGRhdGEsIHdlIGNhbiB1c2UgdGhlIC1nCi0ncGVyZiB0cmFjZScgb3B0aW9uIHRvIGdlbmVyYXRlIGEgUHl0aG9uIHNjcmlwdCB0aGF0IHdpbGwgY29udGFpbiBhCi1jYWxsYmFjayBoYW5kbGVyIGZvciBlYWNoIGV2ZW50IHR5cGUgZm91bmQgaW4gdGhlIHBlcmYuZGF0YSB0cmFjZQotc3RyZWFtIChmb3IgbW9yZSBkZXRhaWxzLCBzZWUgdGhlIFNUQVJURVIgU0NSSVBUUyBzZWN0aW9uKS4KLQotLS0tLQotIyBwZXJmIHRyYWNlIC1nIHB5dGhvbgotZ2VuZXJhdGVkIFB5dGhvbiBzY3JpcHQ6IHBlcmYtdHJhY2UucHkKLQotVGhlIG91dHB1dCBmaWxlIGNyZWF0ZWQgYWxzbyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkgaXMgbmFtZWQKLXBlcmYtdHJhY2UucHkuICBIZXJlJ3MgdGhlIGZpbGUgaW4gaXRzIGVudGlyZXR5OgotCi0jIHBlcmYgdHJhY2UgZXZlbnQgaGFuZGxlcnMsIGdlbmVyYXRlZCBieSBwZXJmIHRyYWNlIC1nIHB5dGhvbgotIyBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgTGljZW5zZSB2ZXJzaW9uIDIKLQotIyBUaGUgY29tbW9uXyogZXZlbnQgaGFuZGxlciBmaWVsZHMgYXJlIHRoZSBtb3N0IHVzZWZ1bCBmaWVsZHMgY29tbW9uIHRvCi0jIGFsbCBldmVudHMuICBUaGV5IGRvbid0IG5lY2Vzc2FyaWx5IGNvcnJlc3BvbmQgdG8gdGhlICdjb21tb25fKicgZmllbGRzCi0jIGluIHRoZSBmb3JtYXQgZmlsZXMuICBUaG9zZSBmaWVsZHMgbm90IGF2YWlsYWJsZSBhcyBoYW5kbGVyIHBhcmFtcyBjYW4KLSMgYmUgcmV0cmlldmVkIHVzaW5nIFB5dGhvbiBmdW5jdGlvbnMgb2YgdGhlIGZvcm0gY29tbW9uXyooY29udGV4dCkuCi0jIFNlZSB0aGUgcGVyZi10cmFjZS1weXRob24gRG9jdW1lbnRhdGlvbiBmb3IgdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIGZ1bmN0aW9ucy4KLQotaW1wb3J0IG9zCi1pbXBvcnQgc3lzCi0KLXN5cy5wYXRoLmFwcGVuZChvcy5lbnZpcm9uWydQRVJGX0VYRUNfUEFUSCddICsgXAotCScvc2NyaXB0cy9weXRob24vUGVyZi1UcmFjZS1VdGlsL2xpYi9QZXJmL1RyYWNlJykKLQotZnJvbSBwZXJmX3RyYWNlX2NvbnRleHQgaW1wb3J0ICoKLWZyb20gQ29yZSBpbXBvcnQgKgotCi1kZWYgdHJhY2VfYmVnaW4oKToKLQlwcmludCAiaW4gdHJhY2VfYmVnaW4iCi0KLWRlZiB0cmFjZV9lbmQoKToKLQlwcmludCAiaW4gdHJhY2VfZW5kIgotCi1kZWYgcmF3X3N5c2NhbGxzX19zeXNfZW50ZXIoZXZlbnRfbmFtZSwgY29udGV4dCwgY29tbW9uX2NwdSwKLQljb21tb25fc2VjcywgY29tbW9uX25zZWNzLCBjb21tb25fcGlkLCBjb21tb25fY29tbSwKLQlpZCwgYXJncyk6Ci0JCXByaW50X2hlYWRlcihldmVudF9uYW1lLCBjb21tb25fY3B1LCBjb21tb25fc2VjcywgY29tbW9uX25zZWNzLAotCQkJY29tbW9uX3BpZCwgY29tbW9uX2NvbW0pCi0KLQkJcHJpbnQgImlkPSVkLCBhcmdzPSVzXG4iICUgXAotCQkoaWQsIGFyZ3MpLAotCi1kZWYgdHJhY2VfdW5oYW5kbGVkKGV2ZW50X25hbWUsIGNvbnRleHQsIGNvbW1vbl9jcHUsIGNvbW1vbl9zZWNzLCBjb21tb25fbnNlY3MsCi0JCWNvbW1vbl9waWQsIGNvbW1vbl9jb21tKToKLQkJcHJpbnRfaGVhZGVyKGV2ZW50X25hbWUsIGNvbW1vbl9jcHUsIGNvbW1vbl9zZWNzLCBjb21tb25fbnNlY3MsCi0JCWNvbW1vbl9waWQsIGNvbW1vbl9jb21tKQotCi1kZWYgcHJpbnRfaGVhZGVyKGV2ZW50X25hbWUsIGNwdSwgc2VjcywgbnNlY3MsIHBpZCwgY29tbSk6Ci0JcHJpbnQgIiUtMjBzICU1dSAlMDV1LiUwOXUgJTh1ICUtMjBzICIgJSBcCi0JKGV2ZW50X25hbWUsIGNwdSwgc2VjcywgbnNlY3MsIHBpZCwgY29tbSksCi0tLS0tCi0KLUF0IHRoZSB0b3AgaXMgYSBjb21tZW50IGJsb2NrIGZvbGxvd2VkIGJ5IHNvbWUgaW1wb3J0IHN0YXRlbWVudHMgYW5kIGEKLXBhdGggYXBwZW5kIHdoaWNoIGV2ZXJ5IHBlcmYgdHJhY2Ugc2NyaXB0IHNob3VsZCBpbmNsdWRlLgotCi1Gb2xsb3dpbmcgdGhhdCBhcmUgYSBjb3VwbGUgZ2VuZXJhdGVkIGZ1bmN0aW9ucywgdHJhY2VfYmVnaW4oKSBhbmQKLXRyYWNlX2VuZCgpLCB3aGljaCBhcmUgY2FsbGVkIGF0IHRoZSBiZWdpbm5pbmcgYW5kIHRoZSBlbmQgb2YgdGhlCi1zY3JpcHQgcmVzcGVjdGl2ZWx5IChmb3IgbW9yZSBkZXRhaWxzLCBzZWUgdGhlIFNDUklQVF9MQVlPVVQgc2VjdGlvbgotYmVsb3cpLgotCi1Gb2xsb3dpbmcgdGhvc2UgYXJlIHRoZSAnZXZlbnQgaGFuZGxlcicgZnVuY3Rpb25zIGdlbmVyYXRlZCBvbmUgZm9yCi1ldmVyeSBldmVudCBpbiB0aGUgJ3BlcmYgcmVjb3JkJyBvdXRwdXQuICBUaGUgaGFuZGxlciBmdW5jdGlvbnMgdGFrZQotdGhlIGZvcm0gc3Vic3lzdGVtX19ldmVudF9uYW1lLCBhbmQgY29udGFpbiBuYW1lZCBwYXJhbWV0ZXJzLCBvbmUgZm9yCi1lYWNoIGZpZWxkIGluIHRoZSBldmVudDsgaW4gdGhpcyBjYXNlLCB0aGVyZSdzIG9ubHkgb25lIGV2ZW50LAotcmF3X3N5c2NhbGxzX19zeXNfZW50ZXIoKS4gIChzZWUgdGhlIEVWRU5UIEhBTkRMRVJTIHNlY3Rpb24gYmVsb3cgZm9yCi1tb3JlIGluZm8gb24gZXZlbnQgaGFuZGxlcnMpLgotCi1UaGUgZmluYWwgY291cGxlIG9mIGZ1bmN0aW9ucyBhcmUsIGxpa2UgdGhlIGJlZ2luIGFuZCBlbmQgZnVuY3Rpb25zLAotZ2VuZXJhdGVkIGZvciBldmVyeSBzY3JpcHQuICBUaGUgZmlyc3QsIHRyYWNlX3VuaGFuZGxlZCgpLCBpcyBjYWxsZWQKLWV2ZXJ5IHRpbWUgdGhlIHNjcmlwdCBmaW5kcyBhbiBldmVudCBpbiB0aGUgcGVyZi5kYXRhIGZpbGUgdGhhdAotZG9lc24ndCBjb3JyZXNwb25kIHRvIGFueSBldmVudCBoYW5kbGVyIGluIHRoZSBzY3JpcHQuICBUaGlzIGNvdWxkCi1tZWFuIGVpdGhlciB0aGF0IHRoZSByZWNvcmQgc3RlcCByZWNvcmRlZCBldmVudCB0eXBlcyB0aGF0IGl0IHdhc24ndAotcmVhbGx5IGludGVyZXN0ZWQgaW4sIG9yIHRoZSBzY3JpcHQgd2FzIHJ1biBhZ2FpbnN0IGEgdHJhY2UgZmlsZSB0aGF0Ci1kb2Vzbid0IGNvcnJlc3BvbmQgdG8gdGhlIHNjcmlwdC4KLQotVGhlIHNjcmlwdCBnZW5lcmF0ZWQgYnkgLWcgb3B0aW9uIHNpbXBseSBwcmludHMgYSBsaW5lIGZvciBlYWNoCi1ldmVudCBmb3VuZCBpbiB0aGUgdHJhY2Ugc3RyZWFtIGkuZS4gaXQgYmFzaWNhbGx5IGp1c3QgZHVtcHMgdGhlIGV2ZW50Ci1hbmQgaXRzIHBhcmFtZXRlciB2YWx1ZXMgdG8gc3Rkb3V0LiAgVGhlIHByaW50X2hlYWRlcigpIGZ1bmN0aW9uIGlzCi1zaW1wbHkgYSB1dGlsaXR5IGZ1bmN0aW9uIHVzZWQgZm9yIHRoYXQgcHVycG9zZS4gIExldCdzIHJlbmFtZSB0aGUKLXNjcmlwdCBhbmQgcnVuIGl0IHRvIHNlZSB0aGUgZGVmYXVsdCBvdXRwdXQ6Ci0KLS0tLS0KLSMgbXYgcGVyZi10cmFjZS5weSBzeXNjYWxsLWNvdW50cy5weQotIyBwZXJmIHRyYWNlIC1zIHN5c2NhbGwtY291bnRzLnB5Ci0KLXJhd19zeXNjYWxsc19fc3lzX2VudGVyICAgICAxIDAwODQwLjg0NzU4MjA4MyAgICAgNzUwNiBwZXJmICAgICAgICAgICAgICAgICAgaWQ9MSwgYXJncz0KLXJhd19zeXNjYWxsc19fc3lzX2VudGVyICAgICAxIDAwODQwLjg0NzU5NTc2NCAgICAgNzUwNiBwZXJmICAgICAgICAgICAgICAgICAgaWQ9MSwgYXJncz0KLXJhd19zeXNjYWxsc19fc3lzX2VudGVyICAgICAxIDAwODQwLjg0NzYyMDg2MCAgICAgNzUwNiBwZXJmICAgICAgICAgICAgICAgICAgaWQ9MSwgYXJncz0KLXJhd19zeXNjYWxsc19fc3lzX2VudGVyICAgICAxIDAwODQwLjg0NzcxMDQ3OCAgICAgNjUzMyBucHZpZXdlci5iaW4gICAgICAgICAgaWQ9NzgsIGFyZ3M9Ci1yYXdfc3lzY2FsbHNfX3N5c19lbnRlciAgICAgMSAwMDg0MC44NDc3MTkyMDQgICAgIDY1MzMgbnB2aWV3ZXIuYmluICAgICAgICAgIGlkPTE0MiwgYXJncz0KLXJhd19zeXNjYWxsc19fc3lzX2VudGVyICAgICAxIDAwODQwLjg0Nzc1NTQ0NSAgICAgNjUzMyBucHZpZXdlci5iaW4gICAgICAgICAgaWQ9MywgYXJncz0KLXJhd19zeXNjYWxsc19fc3lzX2VudGVyICAgICAxIDAwODQwLjg0Nzc3NTYwMSAgICAgNjUzMyBucHZpZXdlci5iaW4gICAgICAgICAgaWQ9MywgYXJncz0KLXJhd19zeXNjYWxsc19fc3lzX2VudGVyICAgICAxIDAwODQwLjg0Nzc4MTgyMCAgICAgNjUzMyBucHZpZXdlci5iaW4gICAgICAgICAgaWQ9MywgYXJncz0KLS4KLS4KLS4KLS0tLS0KLQotT2YgY291cnNlLCBmb3IgdGhpcyBzY3JpcHQsIHdlJ3JlIG5vdCBpbnRlcmVzdGVkIGluIHByaW50aW5nIGV2ZXJ5Ci10cmFjZSBldmVudCwgYnV0IHJhdGhlciBhZ2dyZWdhdGluZyBpdCBpbiBhIHVzZWZ1bCB3YXkuICBTbyB3ZSdsbCBnZXQKLXJpZCBvZiBldmVyeXRoaW5nIHRvIGRvIHdpdGggcHJpbnRpbmcgYXMgd2VsbCBhcyB0aGUgdHJhY2VfYmVnaW4oKSBhbmQKLXRyYWNlX3VuaGFuZGxlZCgpIGZ1bmN0aW9ucywgd2hpY2ggd2Ugd29uJ3QgYmUgdXNpbmcuICBUaGF0IGxlYXZlcyB1cwotd2l0aCB0aGlzIG1pbmltYWxpc3RpYyBza2VsZXRvbjoKLQotLS0tLQotaW1wb3J0IG9zCi1pbXBvcnQgc3lzCi0KLXN5cy5wYXRoLmFwcGVuZChvcy5lbnZpcm9uWydQRVJGX0VYRUNfUEFUSCddICsgXAotCScvc2NyaXB0cy9weXRob24vUGVyZi1UcmFjZS1VdGlsL2xpYi9QZXJmL1RyYWNlJykKLQotZnJvbSBwZXJmX3RyYWNlX2NvbnRleHQgaW1wb3J0ICoKLWZyb20gQ29yZSBpbXBvcnQgKgotCi1kZWYgdHJhY2VfZW5kKCk6Ci0JcHJpbnQgImluIHRyYWNlX2VuZCIKLQotZGVmIHJhd19zeXNjYWxsc19fc3lzX2VudGVyKGV2ZW50X25hbWUsIGNvbnRleHQsIGNvbW1vbl9jcHUsCi0JY29tbW9uX3NlY3MsIGNvbW1vbl9uc2VjcywgY29tbW9uX3BpZCwgY29tbW9uX2NvbW0sCi0JaWQsIGFyZ3MpOgotLS0tLQotCi1JbiB0cmFjZV9lbmQoKSwgd2UnbGwgc2ltcGx5IHByaW50IHRoZSByZXN1bHRzLCBidXQgZmlyc3Qgd2UgbmVlZCB0bwotZ2VuZXJhdGUgc29tZSByZXN1bHRzIHRvIHByaW50LiAgVG8gZG8gdGhhdCB3ZSBuZWVkIHRvIGhhdmUgb3VyCi1zeXNfZW50ZXIoKSBoYW5kbGVyIGRvIHRoZSBuZWNlc3NhcnkgdGFsbHlpbmcgdW50aWwgYWxsIGV2ZW50cyBoYXZlCi1iZWVuIGNvdW50ZWQuICBBIGhhc2ggdGFibGUgaW5kZXhlZCBieSBzeXNjYWxsIGlkIGlzIGEgZ29vZCB3YXkgdG8KLXN0b3JlIHRoYXQgaW5mb3JtYXRpb247IGV2ZXJ5IHRpbWUgdGhlIHN5c19lbnRlcigpIGhhbmRsZXIgaXMgY2FsbGVkLAotd2Ugc2ltcGx5IGluY3JlbWVudCBhIGNvdW50IGFzc29jaWF0ZWQgd2l0aCB0aGF0IGhhc2ggZW50cnkgaW5kZXhlZCBieQotdGhhdCBzeXNjYWxsIGlkOgotCi0tLS0tCi0gIHN5c2NhbGxzID0gYXV0b2RpY3QoKQotCi0gIHRyeToKLSAgICBzeXNjYWxsc1tpZF0gKz0gMQotICBleGNlcHQgVHlwZUVycm9yOgotICAgIHN5c2NhbGxzW2lkXSA9IDEKLS0tLS0KLQotVGhlIHN5c2NhbGxzICdhdXRvZGljdCcgb2JqZWN0IGlzIGEgc3BlY2lhbCBraW5kIG9mIFB5dGhvbiBkaWN0aW9uYXJ5Ci0oaW1wbGVtZW50ZWQgaW4gQ29yZS5weSkgdGhhdCBpbXBsZW1lbnRzIFBlcmwncyAnYXV0b3ZpdmlmeWluZycgaGFzaGVzCi1pbiBQeXRob24gaS5lLiB3aXRoIGF1dG92aXZpZnlpbmcgaGFzaGVzLCB5b3UgY2FuIGFzc2lnbiBuZXN0ZWQgaGFzaAotdmFsdWVzIHdpdGhvdXQgaGF2aW5nIHRvIGdvIHRvIHRoZSB0cm91YmxlIG9mIGNyZWF0aW5nIGludGVybWVkaWF0ZQotbGV2ZWxzIGlmIHRoZXkgZG9uJ3QgZXhpc3QgZS5nIHN5c2NhbGxzW2NvbW1dW3BpZF1baWRdID0gMSB3aWxsIGNyZWF0ZQotdGhlIGludGVybWVkaWF0ZSBoYXNoIGxldmVscyBhbmQgZmluYWxseSBhc3NpZ24gdGhlIHZhbHVlIDEgdG8gdGhlCi1oYXNoIGVudHJ5IGZvciAnaWQnIChiZWNhdXNlIHRoZSB2YWx1ZSBiZWluZyBhc3NpZ25lZCBpc24ndCBhIGhhc2gKLW9iamVjdCBpdHNlbGYsIHRoZSBpbml0aWFsIHZhbHVlIGlzIGFzc2lnbmVkIGluIHRoZSBUeXBlRXJyb3IKLWV4Y2VwdGlvbi4gIFdlbGwsIHRoZXJlIG1heSBiZSBhIGJldHRlciB3YXkgdG8gZG8gdGhpcyBpbiBQeXRob24gYnV0Ci10aGF0J3Mgd2hhdCB3b3JrcyBmb3Igbm93KS4KLQotUHV0dGluZyB0aGF0IGNvZGUgaW50byB0aGUgcmF3X3N5c2NhbGxzX19zeXNfZW50ZXIoKSBoYW5kbGVyLCB3ZQotZWZmZWN0aXZlbHkgZW5kIHVwIHdpdGggYSBzaW5nbGUtbGV2ZWwgZGljdGlvbmFyeSBrZXllZCBvbiBzeXNjYWxsIGlkCi1hbmQgaGF2aW5nIHRoZSBjb3VudHMgd2UndmUgdGFsbGllZCBhcyB2YWx1ZXMuCi0KLVRoZSBwcmludF9zeXNjYWxsX3RvdGFscygpIGZ1bmN0aW9uIGl0ZXJhdGVzIG92ZXIgdGhlIGVudHJpZXMgaW4gdGhlCi1kaWN0aW9uYXJ5IGFuZCBkaXNwbGF5cyBhIGxpbmUgZm9yIGVhY2ggZW50cnkgY29udGFpbmluZyB0aGUgc3lzY2FsbAotbmFtZSAodGhlIGRpY3RvbmFyeSBrZXlzIGNvbnRhaW4gdGhlIHN5c2NhbGwgaWRzLCB3aGljaCBhcmUgcGFzc2VkIHRvCi10aGUgVXRpbCBmdW5jdGlvbiBzeXNjYWxsX25hbWUoKSwgd2hpY2ggdHJhbnNsYXRlcyB0aGUgcmF3IHN5c2NhbGwKLW51bWJlcnMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgc3lzY2FsbCBuYW1lIHN0cmluZ3MpLiAgVGhlIG91dHB1dCBpcwotZGlzcGxheWVkIGFmdGVyIGFsbCB0aGUgZXZlbnRzIGluIHRoZSB0cmFjZSBoYXZlIGJlZW4gcHJvY2Vzc2VkLCBieQotY2FsbGluZyB0aGUgcHJpbnRfc3lzY2FsbF90b3RhbHMoKSBmdW5jdGlvbiBmcm9tIHRoZSB0cmFjZV9lbmQoKQotaGFuZGxlciBjYWxsZWQgYXQgdGhlIGVuZCBvZiBzY3JpcHQgcHJvY2Vzc2luZy4KLQotVGhlIGZpbmFsIHNjcmlwdCBwcm9kdWNpbmcgdGhlIG91dHB1dCBzaG93biBhYm92ZSBpcyBzaG93biBpbiBpdHMKLWVudGlyZXR5IGJlbG93IChzeXNjYWxsX25hbWUoKSBoZWxwZXIgaXMgbm90IHlldCBhdmFpbGFibGUsIHlvdSBjYW4KLW9ubHkgZGVhbCB3aXRoIGlkJ3MgZm9yIG5vdyk6Ci0KLS0tLS0KLWltcG9ydCBvcwotaW1wb3J0IHN5cwotCi1zeXMucGF0aC5hcHBlbmQob3MuZW52aXJvblsnUEVSRl9FWEVDX1BBVEgnXSArIFwKLQknL3NjcmlwdHMvcHl0aG9uL1BlcmYtVHJhY2UtVXRpbC9saWIvUGVyZi9UcmFjZScpCi0KLWZyb20gcGVyZl90cmFjZV9jb250ZXh0IGltcG9ydCAqCi1mcm9tIENvcmUgaW1wb3J0ICoKLWZyb20gVXRpbCBpbXBvcnQgKgotCi1zeXNjYWxscyA9IGF1dG9kaWN0KCkKLQotZGVmIHRyYWNlX2VuZCgpOgotCXByaW50X3N5c2NhbGxfdG90YWxzKCkKLQotZGVmIHJhd19zeXNjYWxsc19fc3lzX2VudGVyKGV2ZW50X25hbWUsIGNvbnRleHQsIGNvbW1vbl9jcHUsCi0JY29tbW9uX3NlY3MsIGNvbW1vbl9uc2VjcywgY29tbW9uX3BpZCwgY29tbW9uX2NvbW0sCi0JaWQsIGFyZ3MpOgotCXRyeToKLQkJc3lzY2FsbHNbaWRdICs9IDEKLQlleGNlcHQgVHlwZUVycm9yOgotCQlzeXNjYWxsc1tpZF0gPSAxCi0KLWRlZiBwcmludF9zeXNjYWxsX3RvdGFscygpOgotICAgIGlmIGZvcl9jb21tIGlzIG5vdCBOb25lOgotCSAgICBwcmludCAiXG5zeXNjYWxsIGV2ZW50cyBmb3IgJXM6XG5cbiIgJSAoZm9yX2NvbW0pLAotICAgIGVsc2U6Ci0JICAgIHByaW50ICJcbnN5c2NhbGwgZXZlbnRzOlxuXG4iLAotCi0gICAgcHJpbnQgIiUtNDBzICAlMTBzXG4iICUgKCJldmVudCIsICJjb3VudCIpLAotICAgIHByaW50ICIlLTQwcyAgJTEwc1xuIiAlICgiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLS0tLS0tLS0tLSIpLAotCi0gICAgZm9yIGlkLCB2YWwgaW4gc29ydGVkKHN5c2NhbGxzLml0ZXJpdGVtcygpLCBrZXkgPSBsYW1iZGEoaywgdik6ICh2LCBrKSwgXAotCQkJCSAgcmV2ZXJzZSA9IFRydWUpOgotCSAgICBwcmludCAiJS00MHMgICUxMGRcbiIgJSAoc3lzY2FsbF9uYW1lKGlkKSwgdmFsKSwKLS0tLS0KLQotVGhlIHNjcmlwdCBjYW4gYmUgcnVuIGp1c3QgYXMgYmVmb3JlOgotCi0gICMgcGVyZiB0cmFjZSAtcyBzeXNjYWxsLWNvdW50cy5weQotCi1TbyB0aG9zZSBhcmUgdGhlIGVzc2VudGlhbCBzdGVwcyBpbiB3cml0aW5nIGFuZCBydW5uaW5nIGEgc2NyaXB0LiAgVGhlCi1wcm9jZXNzIGNhbiBiZSBnZW5lcmFsaXplZCB0byBhbnkgdHJhY2Vwb2ludCBvciBzZXQgb2YgdHJhY2Vwb2ludHMKLXlvdSdyZSBpbnRlcmVzdGVkIGluIC0gYmFzaWNhbGx5IGZpbmQgdGhlIHRyYWNlcG9pbnQocykgeW91J3JlCi1pbnRlcmVzdGVkIGluIGJ5IGxvb2tpbmcgYXQgdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIGV2ZW50cyBzaG93biBieQotJ3BlcmYgbGlzdCcgYW5kL29yIGxvb2sgaW4gL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZyBldmVudHMgZm9yCi1kZXRhaWxlZCBldmVudCBhbmQgZmllbGQgaW5mbywgcmVjb3JkIHRoZSBjb3JyZXNwb25kaW5nIHRyYWNlIGRhdGEKLXVzaW5nICdwZXJmIHJlY29yZCcsIHBhc3NpbmcgaXQgdGhlIGxpc3Qgb2YgaW50ZXJlc3RpbmcgZXZlbnRzLAotZ2VuZXJhdGUgYSBza2VsZXRvbiBzY3JpcHQgdXNpbmcgJ3BlcmYgdHJhY2UgLWcgcHl0aG9uJyBhbmQgbW9kaWZ5IHRoZQotY29kZSB0byBhZ2dyZWdhdGUgYW5kIGRpc3BsYXkgaXQgZm9yIHlvdXIgcGFydGljdWxhciBuZWVkcy4KLQotQWZ0ZXIgeW91J3ZlIGRvbmUgdGhhdCB5b3UgbWF5IGVuZCB1cCB3aXRoIGEgZ2VuZXJhbC1wdXJwb3NlIHNjcmlwdAotdGhhdCB5b3Ugd2FudCB0byBrZWVwIGFyb3VuZCBhbmQgaGF2ZSBhdmFpbGFibGUgZm9yIGZ1dHVyZSB1c2UuICBCeQotd3JpdGluZyBhIGNvdXBsZSBvZiB2ZXJ5IHNpbXBsZSBzaGVsbCBzY3JpcHRzIGFuZCBwdXR0aW5nIHRoZW0gaW4gdGhlCi1yaWdodCBwbGFjZSwgeW91IGNhbiBoYXZlIHlvdXIgc2NyaXB0IGxpc3RlZCBhbG9uZ3NpZGUgdGhlIG90aGVyCi1zY3JpcHRzIGxpc3RlZCBieSB0aGUgJ3BlcmYgdHJhY2UgLWwnIGNvbW1hbmQgZS5nLjoKLQotLS0tLQotcm9vdEB0cm9waWNhbmE6fiMgcGVyZiB0cmFjZSAtbAotTGlzdCBvZiBhdmFpbGFibGUgdHJhY2Ugc2NyaXB0czoKLSAgd29ya3F1ZXVlLXN0YXRzICAgICAgICAgICAgICAgICAgICAgIHdvcmtxdWV1ZSBzdGF0cyAoaW5zL2V4ZS9jcmVhdGUvZGVzdHJveSkKLSAgd2FrZXVwLWxhdGVuY3kgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbS13aWRlIG1pbi9tYXgvYXZnIHdha2V1cCBsYXRlbmN5Ci0gIHJ3LWJ5LWZpbGUgPGNvbW0+ICAgICAgICAgICAgICAgICAgICByL3cgYWN0aXZpdHkgZm9yIGEgcHJvZ3JhbSwgYnkgZmlsZQotICBydy1ieS1waWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzdGVtLXdpZGUgci93IGFjdGl2aXR5Ci0tLS0tCi0KLUEgbmljZSBzaWRlIGVmZmVjdCBvZiBkb2luZyB0aGlzIGlzIHRoYXQgeW91IGFsc28gdGhlbiBjYXB0dXJlIHRoZQotcHJvYmFibHkgbGVuZ3RoeSAncGVyZiByZWNvcmQnIGNvbW1hbmQgbmVlZGVkIHRvIHJlY29yZCB0aGUgZXZlbnRzIGZvcgotdGhlIHNjcmlwdC4KLQotVG8gaGF2ZSB0aGUgc2NyaXB0IGFwcGVhciBhcyBhICdidWlsdC1pbicgc2NyaXB0LCB5b3Ugd3JpdGUgdHdvIHNpbXBsZQotc2NyaXB0cywgb25lIGZvciByZWNvcmRpbmcgYW5kIG9uZSBmb3IgJ3JlcG9ydGluZycuCi0KLVRoZSAncmVjb3JkJyBzY3JpcHQgaXMgYSBzaGVsbCBzY3JpcHQgd2l0aCB0aGUgc2FtZSBiYXNlIG5hbWUgYXMgeW91cgotc2NyaXB0LCBidXQgd2l0aCAtcmVjb3JkIGFwcGVuZGVkLiAgVGhlIHNoZWxsIHNjcmlwdCBzaG91bGQgYmUgcHV0Ci1pbnRvIHRoZSBwZXJmL3NjcmlwdHMvcHl0aG9uL2JpbiBkaXJlY3RvcnkgaW4gdGhlIGtlcm5lbCBzb3VyY2UgdHJlZS4KLUluIHRoYXQgc2NyaXB0LCB5b3Ugd3JpdGUgdGhlICdwZXJmIHJlY29yZCcgY29tbWFuZC1saW5lIG5lZWRlZCBmb3IKLXlvdXIgc2NyaXB0OgotCi0tLS0tCi0jIGNhdCBrZXJuZWwtc291cmNlL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vYmluL3N5c2NhbGwtY291bnRzLXJlY29yZAotCi0jIS9iaW4vYmFzaAotcGVyZiByZWNvcmQgLWEgLWUgcmF3X3N5c2NhbGxzOnN5c19lbnRlcgotLS0tLQotCi1UaGUgJ3JlcG9ydCcgc2NyaXB0IGlzIGFsc28gYSBzaGVsbCBzY3JpcHQgd2l0aCB0aGUgc2FtZSBiYXNlIG5hbWUgYXMKLXlvdXIgc2NyaXB0LCBidXQgd2l0aCAtcmVwb3J0IGFwcGVuZGVkLiAgSXQgc2hvdWxkIGFsc28gYmUgbG9jYXRlZCBpbgotdGhlIHBlcmYvc2NyaXB0cy9weXRob24vYmluIGRpcmVjdG9yeS4gIEluIHRoYXQgc2NyaXB0LCB5b3Ugd3JpdGUgdGhlCi0ncGVyZiB0cmFjZSAtcycgY29tbWFuZC1saW5lIG5lZWRlZCBmb3IgcnVubmluZyB5b3VyIHNjcmlwdDoKLQotLS0tLQotIyBjYXQga2VybmVsLXNvdXJjZS90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL2Jpbi9zeXNjYWxsLWNvdW50cy1yZXBvcnQKLQotIyEvYmluL2Jhc2gKLSMgZGVzY3JpcHRpb246IHN5c3RlbS13aWRlIHN5c2NhbGwgY291bnRzCi1wZXJmIHRyYWNlIC1zIH4vbGliZXhlYy9wZXJmLWNvcmUvc2NyaXB0cy9weXRob24vc3lzY2FsbC1jb3VudHMucHkKLS0tLS0KLQotTm90ZSB0aGF0IHRoZSBsb2NhdGlvbiBvZiB0aGUgUHl0aG9uIHNjcmlwdCBnaXZlbiBpbiB0aGUgc2hlbGwgc2NyaXB0Ci1pcyBpbiB0aGUgbGliZXhlYy9wZXJmLWNvcmUvc2NyaXB0cy9weXRob24gZGlyZWN0b3J5IC0gdGhpcyBpcyB3aGVyZQotdGhlIHNjcmlwdCB3aWxsIGJlIGNvcGllZCBieSAnbWFrZSBpbnN0YWxsJyB3aGVuIHlvdSBpbnN0YWxsIHBlcmYuCi1Gb3IgdGhlIGluc3RhbGxhdGlvbiB0byBpbnN0YWxsIHlvdXIgc2NyaXB0IHRoZXJlLCB5b3VyIHNjcmlwdCBuZWVkcwotdG8gYmUgbG9jYXRlZCBpbiB0aGUgcGVyZi9zY3JpcHRzL3B5dGhvbiBkaXJlY3RvcnkgaW4gdGhlIGtlcm5lbAotc291cmNlIHRyZWU6Ci0KLS0tLS0KLSMgbHMgLWFsIGtlcm5lbC1zb3VyY2UvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbgotCi1yb290QHRyb3BpY2FuYTovaG9tZS90cnovc3JjL3RpcCMgbHMgLWFsIHRvb2xzL3BlcmYvc2NyaXB0cy9weXRob24KLXRvdGFsIDMyCi1kcnd4ci14ci14IDQgdHJ6IHRyeiA0MDk2IDIwMTAtMDEtMjYgMjI6MzAgLgotZHJ3eHIteHIteCA0IHRyeiB0cnogNDA5NiAyMDEwLTAxLTI2IDIyOjI5IC4uCi1kcnd4ci14ci14IDIgdHJ6IHRyeiA0MDk2IDIwMTAtMDEtMjYgMjI6MjkgYmluCi0tcnctci0tci0tIDEgdHJ6IHRyeiAyNTQ4IDIwMTAtMDEtMjYgMjI6MjkgY2hlY2stcGVyZi10cmFjZS5weQotZHJ3eHIteHIteCAzIHRyeiB0cnogNDA5NiAyMDEwLTAxLTI2IDIyOjQ5IFBlcmYtVHJhY2UtVXRpbAotLXJ3LXItLXItLSAxIHRyeiB0cnogMTQ2MiAyMDEwLTAxLTI2IDIyOjMwIHN5c2NhbGwtY291bnRzLnB5Ci0tLS0tCi0KLU9uY2UgeW91J3ZlIGRvbmUgdGhhdCAoZG9uJ3QgZm9yZ2V0IHRvIGRvIGEgbmV3ICdtYWtlIGluc3RhbGwnLAotb3RoZXJ3aXNlIHlvdXIgc2NyaXB0IHdvbid0IHNob3cgdXAgYXQgcnVuLXRpbWUpLCAncGVyZiB0cmFjZSAtbCcKLXNob3VsZCBzaG93IGEgbmV3IGVudHJ5IGZvciB5b3VyIHNjcmlwdDoKLQotLS0tLQotcm9vdEB0cm9waWNhbmE6fiMgcGVyZiB0cmFjZSAtbAotTGlzdCBvZiBhdmFpbGFibGUgdHJhY2Ugc2NyaXB0czoKLSAgd29ya3F1ZXVlLXN0YXRzICAgICAgICAgICAgICAgICAgICAgIHdvcmtxdWV1ZSBzdGF0cyAoaW5zL2V4ZS9jcmVhdGUvZGVzdHJveSkKLSAgd2FrZXVwLWxhdGVuY3kgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbS13aWRlIG1pbi9tYXgvYXZnIHdha2V1cCBsYXRlbmN5Ci0gIHJ3LWJ5LWZpbGUgPGNvbW0+ICAgICAgICAgICAgICAgICAgICByL3cgYWN0aXZpdHkgZm9yIGEgcHJvZ3JhbSwgYnkgZmlsZQotICBydy1ieS1waWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzdGVtLXdpZGUgci93IGFjdGl2aXR5Ci0gIHN5c2NhbGwtY291bnRzICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW0td2lkZSBzeXNjYWxsIGNvdW50cwotLS0tLQotCi1Zb3UgY2FuIG5vdyBwZXJmb3JtIHRoZSByZWNvcmQgc3RlcCB2aWEgJ3BlcmYgdHJhY2UgcmVjb3JkJzoKLQotICAjIHBlcmYgdHJhY2UgcmVjb3JkIHN5c2NhbGwtY291bnRzCi0KLWFuZCBkaXNwbGF5IHRoZSBvdXRwdXQgdXNpbmcgJ3BlcmYgdHJhY2UgcmVwb3J0JzoKLQotICAjIHBlcmYgdHJhY2UgcmVwb3J0IHN5c2NhbGwtY291bnRzCi0KLVNUQVJURVIgU0NSSVBUUwotLS0tLS0tLS0tLS0tLS0tCi0KLVlvdSBjYW4gcXVpY2tseSBnZXQgc3RhcnRlZCB3cml0aW5nIGEgc2NyaXB0IGZvciBhIHBhcnRpY3VsYXIgc2V0IG9mCi10cmFjZSBkYXRhIGJ5IGdlbmVyYXRpbmcgYSBza2VsZXRvbiBzY3JpcHQgdXNpbmcgJ3BlcmYgdHJhY2UgLWcKLXB5dGhvbicgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIGFuIGV4aXN0aW5nIHBlcmYuZGF0YSB0cmFjZSBmaWxlLgotVGhhdCB3aWxsIGdlbmVyYXRlIGEgc3RhcnRlciBzY3JpcHQgY29udGFpbmluZyBhIGhhbmRsZXIgZm9yIGVhY2ggb2YKLXRoZSBldmVudCB0eXBlcyBpbiB0aGUgdHJhY2UgZmlsZTsgaXQgc2ltcGx5IHByaW50cyBldmVyeSBhdmFpbGFibGUKLWZpZWxkIGZvciBlYWNoIGV2ZW50IGluIHRoZSB0cmFjZSBmaWxlLgotCi1Zb3UgY2FuIGFsc28gbG9vayBhdCB0aGUgZXhpc3Rpbmcgc2NyaXB0cyBpbgotfi9saWJleGVjL3BlcmYtY29yZS9zY3JpcHRzL3B5dGhvbiBmb3IgdHlwaWNhbCBleGFtcGxlcyBzaG93aW5nIGhvdyB0bwotZG8gYmFzaWMgdGhpbmdzIGxpa2UgYWdncmVnYXRlIGV2ZW50IGRhdGEsIHByaW50IHJlc3VsdHMsIGV0Yy4gIEFsc28sCi10aGUgY2hlY2stcGVyZi10cmFjZS5weSBzY3JpcHQsIHdoaWxlIG5vdCBpbnRlcmVzdGluZyBmb3IgaXRzIHJlc3VsdHMsCi1hdHRlbXB0cyB0byBleGVyY2lzZSBhbGwgb2YgdGhlIG1haW4gc2NyaXB0aW5nIGZlYXR1cmVzLgotCi1FVkVOVCBIQU5ETEVSUwotLS0tLS0tLS0tLS0tLS0KLQotV2hlbiBwZXJmIHRyYWNlIGlzIGludm9rZWQgdXNpbmcgYSB0cmFjZSBzY3JpcHQsIGEgdXNlci1kZWZpbmVkCi0naGFuZGxlciBmdW5jdGlvbicgaXMgY2FsbGVkIGZvciBlYWNoIGV2ZW50IGluIHRoZSB0cmFjZS4gIElmIHRoZXJlJ3MKLW5vIGhhbmRsZXIgZnVuY3Rpb24gZGVmaW5lZCBmb3IgYSBnaXZlbiBldmVudCB0eXBlLCB0aGUgZXZlbnQgaXMKLWlnbm9yZWQgKG9yIHBhc3NlZCB0byBhICd0cmFjZV9oYW5kbGVkJyBmdW5jdGlvbiwgc2VlIGJlbG93KSBhbmQgdGhlCi1uZXh0IGV2ZW50IGlzIHByb2Nlc3NlZC4KLQotTW9zdCBvZiB0aGUgZXZlbnQncyBmaWVsZCB2YWx1ZXMgYXJlIHBhc3NlZCBhcyBhcmd1bWVudHMgdG8gdGhlCi1oYW5kbGVyIGZ1bmN0aW9uOyBzb21lIG9mIHRoZSBsZXNzIGNvbW1vbiBvbmVzIGFyZW4ndCAtIHRob3NlIGFyZQotYXZhaWxhYmxlIGFzIGNhbGxzIGJhY2sgaW50byB0aGUgcGVyZiBleGVjdXRhYmxlIChzZWUgYmVsb3cpLgotCi1BcyBhbiBleGFtcGxlLCB0aGUgZm9sbG93aW5nIHBlcmYgcmVjb3JkIGNvbW1hbmQgY2FuIGJlIHVzZWQgdG8gcmVjb3JkCi1hbGwgc2NoZWRfd2FrZXVwIGV2ZW50cyBpbiB0aGUgc3lzdGVtOgotCi0gIyBwZXJmIHJlY29yZCAtYSAtZSBzY2hlZDpzY2hlZF93YWtldXAKLQotVHJhY2VzIG1lYW50IHRvIGJlIHByb2Nlc3NlZCB1c2luZyBhIHNjcmlwdCBzaG91bGQgYmUgcmVjb3JkZWQgd2l0aAotdGhlIGFib3ZlIG9wdGlvbjogLWEgdG8gZW5hYmxlIHN5c3RlbS13aWRlIGNvbGxlY3Rpb24uCi0KLVRoZSBmb3JtYXQgZmlsZSBmb3IgdGhlIHNjaGVkX3dha2VwIGV2ZW50IGRlZmluZXMgdGhlIGZvbGxvd2luZyBmaWVsZHMKLShzZWUgL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9ldmVudHMvc2NoZWQvc2NoZWRfd2FrZXVwL2Zvcm1hdCk6Ci0KLS0tLS0KLSBmb3JtYXQ6Ci0gICAgICAgIGZpZWxkOnVuc2lnbmVkIHNob3J0IGNvbW1vbl90eXBlOwotICAgICAgICBmaWVsZDp1bnNpZ25lZCBjaGFyIGNvbW1vbl9mbGFnczsKLSAgICAgICAgZmllbGQ6dW5zaWduZWQgY2hhciBjb21tb25fcHJlZW1wdF9jb3VudDsKLSAgICAgICAgZmllbGQ6aW50IGNvbW1vbl9waWQ7Ci0gICAgICAgIGZpZWxkOmludCBjb21tb25fbG9ja19kZXB0aDsKLQotICAgICAgICBmaWVsZDpjaGFyIGNvbW1bVEFTS19DT01NX0xFTl07Ci0gICAgICAgIGZpZWxkOnBpZF90IHBpZDsKLSAgICAgICAgZmllbGQ6aW50IHByaW87Ci0gICAgICAgIGZpZWxkOmludCBzdWNjZXNzOwotICAgICAgICBmaWVsZDppbnQgdGFyZ2V0X2NwdTsKLS0tLS0KLQotVGhlIGhhbmRsZXIgZnVuY3Rpb24gZm9yIHRoaXMgZXZlbnQgd291bGQgYmUgZGVmaW5lZCBhczoKLQotLS0tLQotZGVmIHNjaGVkX19zY2hlZF93YWtldXAoZXZlbnRfbmFtZSwgY29udGV4dCwgY29tbW9uX2NwdSwgY29tbW9uX3NlY3MsCi0gICAgICAgY29tbW9uX25zZWNzLCBjb21tb25fcGlkLCBjb21tb25fY29tbSwKLSAgICAgICBjb21tLCBwaWQsIHByaW8sIHN1Y2Nlc3MsIHRhcmdldF9jcHUpOgotICAgICAgIHBhc3MKLS0tLS0KLQotVGhlIGhhbmRsZXIgZnVuY3Rpb24gdGFrZXMgdGhlIGZvcm0gc3Vic3lzdGVtX19ldmVudF9uYW1lLgotCi1UaGUgY29tbW9uXyogYXJndW1lbnRzIGluIHRoZSBoYW5kbGVyJ3MgYXJndW1lbnQgbGlzdCBhcmUgdGhlIHNldCBvZgotYXJndW1lbnRzIHBhc3NlZCB0byBhbGwgZXZlbnQgaGFuZGxlcnM7IHNvbWUgb2YgdGhlIGZpZWxkcyBjb3JyZXNwb25kCi10byB0aGUgY29tbW9uXyogZmllbGRzIGluIHRoZSBmb3JtYXQgZmlsZSwgYnV0IHNvbWUgYXJlIHN5bnRoZXNpemVkLAotYW5kIHNvbWUgb2YgdGhlIGNvbW1vbl8qIGZpZWxkcyBhcmVuJ3QgY29tbW9uIGVub3VnaCB0byB0byBiZSBwYXNzZWQKLXRvIGV2ZXJ5IGV2ZW50IGFzIGFyZ3VtZW50cyBidXQgYXJlIGF2YWlsYWJsZSBhcyBsaWJyYXJ5IGZ1bmN0aW9ucy4KLQotSGVyZSdzIGEgYnJpZWYgZGVzY3JpcHRpb24gb2YgZWFjaCBvZiB0aGUgaW52YXJpYW50IGV2ZW50IGFyZ3M6Ci0KLSBldmVudF9uYW1lIAkgIAkgICAgdGhlIG5hbWUgb2YgdGhlIGV2ZW50IGFzIHRleHQKLSBjb250ZXh0CQkgICAgYW4gb3BhcXVlICdjb29raWUnIHVzZWQgaW4gY2FsbHMgYmFjayBpbnRvIHBlcmYKLSBjb21tb25fY3B1CQkgICAgdGhlIGNwdSB0aGUgZXZlbnQgb2NjdXJyZWQgb24KLSBjb21tb25fc2VjcwkJICAgIHRoZSBzZWNzIHBvcnRpb24gb2YgdGhlIGV2ZW50IHRpbWVzdGFtcAotIGNvbW1vbl9uc2VjcwkJICAgIHRoZSBuc2VjcyBwb3J0aW9uIG9mIHRoZSBldmVudCB0aW1lc3RhbXAKLSBjb21tb25fcGlkCQkgICAgdGhlIHBpZCBvZiB0aGUgY3VycmVudCB0YXNrCi0gY29tbW9uX2NvbW0JCSAgICB0aGUgbmFtZSBvZiB0aGUgY3VycmVudCBwcm9jZXNzCi0KLUFsbCBvZiB0aGUgcmVtYWluaW5nIGZpZWxkcyBpbiB0aGUgZXZlbnQncyBmb3JtYXQgZmlsZSBoYXZlCi1jb3VudGVycGFydHMgYXMgaGFuZGxlciBmdW5jdGlvbiBhcmd1bWVudHMgb2YgdGhlIHNhbWUgbmFtZSwgYXMgY2FuIGJlCi1zZWVuIGluIHRoZSBleGFtcGxlIGFib3ZlLgotCi1UaGUgYWJvdmUgcHJvdmlkZXMgdGhlIGJhc2ljcyBuZWVkZWQgdG8gZGlyZWN0bHkgYWNjZXNzIGV2ZXJ5IGZpZWxkIG9mCi1ldmVyeSBldmVudCBpbiBhIHRyYWNlLCB3aGljaCBjb3ZlcnMgOTAlIG9mIHdoYXQgeW91IG5lZWQgdG8ga25vdyB0bwotd3JpdGUgYSB1c2VmdWwgdHJhY2Ugc2NyaXB0LiAgVGhlIHNlY3Rpb25zIGJlbG93IGNvdmVyIHRoZSByZXN0LgotCi1TQ1JJUFQgTEFZT1VUCi0tLS0tLS0tLS0tLS0tCi0KLUV2ZXJ5IHBlcmYgdHJhY2UgUHl0aG9uIHNjcmlwdCBzaG91bGQgc3RhcnQgYnkgc2V0dGluZyB1cCBhIFB5dGhvbgotbW9kdWxlIHNlYXJjaCBwYXRoIGFuZCAnaW1wb3J0J2luZyBhIGZldyBzdXBwb3J0IG1vZHVsZXMgKHNlZSBtb2R1bGUKLWRlc2NyaXB0aW9ucyBiZWxvdyk6Ci0KLS0tLS0KLSBpbXBvcnQgb3MKLSBpbXBvcnQgc3lzCi0KLSBzeXMucGF0aC5hcHBlbmQob3MuZW52aXJvblsnUEVSRl9FWEVDX1BBVEgnXSArIFwKLQkgICAgICAnL3NjcmlwdHMvcHl0aG9uL1BlcmYtVHJhY2UtVXRpbC9saWIvUGVyZi9UcmFjZScpCi0KLSBmcm9tIHBlcmZfdHJhY2VfY29udGV4dCBpbXBvcnQgKgotIGZyb20gQ29yZSBpbXBvcnQgKgotLS0tLQotCi1UaGUgcmVzdCBvZiB0aGUgc2NyaXB0IGNhbiBjb250YWluIGhhbmRsZXIgZnVuY3Rpb25zIGFuZCBzdXBwb3J0Ci1mdW5jdGlvbnMgaW4gYW55IG9yZGVyLgotCi1Bc2lkZSBmcm9tIHRoZSBldmVudCBoYW5kbGVyIGZ1bmN0aW9ucyBkaXNjdXNzZWQgYWJvdmUsIGV2ZXJ5IHNjcmlwdAotY2FuIGltcGxlbWVudCBhIHNldCBvZiBvcHRpb25hbCBmdW5jdGlvbnM6Ci0KLSp0cmFjZV9iZWdpbiosIGlmIGRlZmluZWQsIGlzIGNhbGxlZCBiZWZvcmUgYW55IGV2ZW50IGlzIHByb2Nlc3NlZCBhbmQKLWdpdmVzIHNjcmlwdHMgYSBjaGFuY2UgdG8gZG8gc2V0dXAgdGFza3M6Ci0KLS0tLS0KLWRlZiB0cmFjZV9iZWdpbjoKLSAgICBwYXNzCi0tLS0tCi0KLSp0cmFjZV9lbmQqLCBpZiBkZWZpbmVkLCBpcyBjYWxsZWQgYWZ0ZXIgYWxsIGV2ZW50cyBoYXZlIGJlZW4KLSBwcm9jZXNzZWQgYW5kIGdpdmVzIHNjcmlwdHMgYSBjaGFuY2UgdG8gZG8gZW5kLW9mLXNjcmlwdCB0YXNrcywgc3VjaAotIGFzIGRpc3BsYXkgcmVzdWx0czoKLQotLS0tLQotZGVmIHRyYWNlX2VuZDoKLSAgICBwYXNzCi0tLS0tCi0KLSp0cmFjZV91bmhhbmRsZWQqLCBpZiBkZWZpbmVkLCBpcyBjYWxsZWQgYWZ0ZXIgZm9yIGFueSBldmVudCB0aGF0Ci0gZG9lc24ndCBoYXZlIGEgaGFuZGxlciBleHBsaWNpdGx5IGRlZmluZWQgZm9yIGl0LiAgVGhlIHN0YW5kYXJkIHNldAotIG9mIGNvbW1vbiBhcmd1bWVudHMgYXJlIHBhc3NlZCBpbnRvIGl0OgotCi0tLS0tCi1kZWYgdHJhY2VfdW5oYW5kbGVkKGV2ZW50X25hbWUsIGNvbnRleHQsIGNvbW1vbl9jcHUsIGNvbW1vbl9zZWNzLAotICAgICAgICBjb21tb25fbnNlY3MsIGNvbW1vbl9waWQsIGNvbW1vbl9jb21tKToKLSAgICBwYXNzCi0tLS0tCi0KLVRoZSByZW1haW5pbmcgc2VjdGlvbnMgcHJvdmlkZSBkZXNjcmlwdGlvbnMgb2YgZWFjaCBvZiB0aGUgYXZhaWxhYmxlCi1idWlsdC1pbiBwZXJmIHRyYWNlIFB5dGhvbiBtb2R1bGVzIGFuZCB0aGVpciBhc3NvY2lhdGVkIGZ1bmN0aW9ucy4KLQotQVZBSUxBQkxFIE1PRFVMRVMgQU5EIEZVTkNUSU9OUwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UaGUgZm9sbG93aW5nIHNlY3Rpb25zIGRlc2NyaWJlIHRoZSBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlcyBhdmFpbGFibGUKLXZpYSB0aGUgdmFyaW91cyBwZXJmIHRyYWNlIFB5dGhvbiBtb2R1bGVzLiAgVG8gdXNlIHRoZSBmdW5jdGlvbnMgYW5kCi12YXJpYWJsZXMgZnJvbSB0aGUgZ2l2ZW4gbW9kdWxlLCBhZGQgdGhlIGNvcnJlc3BvbmRpbmcgJ2Zyb20gWFhYWAotaW1wb3J0JyBsaW5lIHRvIHlvdXIgcGVyZiB0cmFjZSBzY3JpcHQuCi0KLUNvcmUucHkgTW9kdWxlCi1+fn5+fn5+fn5+fn5+fgotCi1UaGVzZSBmdW5jdGlvbnMgcHJvdmlkZSBzb21lIGVzc2VudGlhbCBmdW5jdGlvbnMgdG8gdXNlciBzY3JpcHRzLgotCi1UaGUgKmZsYWdfc3RyKiBhbmQgKnN5bWJvbF9zdHIqIGZ1bmN0aW9ucyBwcm92aWRlIGh1bWFuLXJlYWRhYmxlCi1zdHJpbmdzIGZvciBmbGFnIGFuZCBzeW1ib2xpYyBmaWVsZHMuICBUaGVzZSBjb3JyZXNwb25kIHRvIHRoZSBzdHJpbmdzCi1hbmQgdmFsdWVzIHBhcnNlZCBmcm9tIHRoZSAncHJpbnQgZm10JyBmaWVsZHMgb2YgdGhlIGV2ZW50IGZvcm1hdAotZmlsZXM6Ci0KLSAgZmxhZ19zdHIoZXZlbnRfbmFtZSwgZmllbGRfbmFtZSwgZmllbGRfdmFsdWUpIC0gcmV0dXJucyB0aGUgc3RyaW5nIHJlcHJlc2VudGlvbiBjb3JyZXNwb25kaW5nIHRvIGZpZWxkX3ZhbHVlIGZvciB0aGUgZmxhZyBmaWVsZCBmaWVsZF9uYW1lIG9mIGV2ZW50IGV2ZW50X25hbWUKLSAgc3ltYm9sX3N0cihldmVudF9uYW1lLCBmaWVsZF9uYW1lLCBmaWVsZF92YWx1ZSkgLSByZXR1cm5zIHRoZSBzdHJpbmcgcmVwcmVzZW50aW9uIGNvcnJlc3BvbmRpbmcgdG8gZmllbGRfdmFsdWUgZm9yIHRoZSBzeW1ib2xpYyBmaWVsZCBmaWVsZF9uYW1lIG9mIGV2ZW50IGV2ZW50X25hbWUKLQotVGhlICphdXRvZGljdCogZnVuY3Rpb24gcmV0dXJucyBhIHNwZWNpYWwga2luZCBvZiBQeXRob24KLWRpY3Rpb25hcnkgdGhhdCBpbXBsZW1lbnRzIFBlcmwncyAnYXV0b3ZpdmlmeWluZycgaGFzaGVzIGluIFB5dGhvbgotaS5lLiB3aXRoIGF1dG92aXZpZnlpbmcgaGFzaGVzLCB5b3UgY2FuIGFzc2lnbiBuZXN0ZWQgaGFzaCB2YWx1ZXMKLXdpdGhvdXQgaGF2aW5nIHRvIGdvIHRvIHRoZSB0cm91YmxlIG9mIGNyZWF0aW5nIGludGVybWVkaWF0ZSBsZXZlbHMgaWYKLXRoZXkgZG9uJ3QgZXhpc3QuCi0KLSAgYXV0b2RpY3QoKSAtIHJldHVybnMgYW4gYXV0b3ZpdmlmeWluZyBkaWN0aW9uYXJ5IGluc3RhbmNlCi0KLQotcGVyZl90cmFjZV9jb250ZXh0IE1vZHVsZQotfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgotCi1Tb21lIG9mIHRoZSAnY29tbW9uJyBmaWVsZHMgaW4gdGhlIGV2ZW50IGZvcm1hdCBmaWxlIGFyZW4ndCBhbGwgdGhhdAotY29tbW9uLCBidXQgbmVlZCB0byBiZSBtYWRlIGFjY2Vzc2libGUgdG8gdXNlciBzY3JpcHRzIG5vbmV0aGVsZXNzLgotCi1wZXJmX3RyYWNlX2NvbnRleHQgZGVmaW5lcyBhIHNldCBvZiBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgdXNlZCB0bwotYWNjZXNzIHRoaXMgZGF0YSBpbiB0aGUgY29udGV4dCBvZiB0aGUgY3VycmVudCBldmVudC4gIEVhY2ggb2YgdGhlc2UKLWZ1bmN0aW9ucyBleHBlY3RzIGEgY29udGV4dCB2YXJpYWJsZSwgd2hpY2ggaXMgdGhlIHNhbWUgYXMgdGhlCi1jb250ZXh0IHZhcmlhYmxlIHBhc3NlZCBpbnRvIGV2ZXJ5IGV2ZW50IGhhbmRsZXIgYXMgdGhlIHNlY29uZAotYXJndW1lbnQuCi0KLSBjb21tb25fcGMoY29udGV4dCkgLSByZXR1cm5zIGNvbW1vbl9wcmVlbXB0IGNvdW50IGZvciB0aGUgY3VycmVudCBldmVudAotIGNvbW1vbl9mbGFncyhjb250ZXh0KSAtIHJldHVybnMgY29tbW9uX2ZsYWdzIGZvciB0aGUgY3VycmVudCBldmVudAotIGNvbW1vbl9sb2NrX2RlcHRoKGNvbnRleHQpIC0gcmV0dXJucyBjb21tb25fbG9ja19kZXB0aCBmb3IgdGhlIGN1cnJlbnQgZXZlbnQKLQotVXRpbC5weSBNb2R1bGUKLX5+fn5+fn5+fn5+fn5+Ci0KLVZhcmlvdXMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHVzZSB3aXRoIHBlcmYgdHJhY2U6Ci0KLSAgbnNlY3Moc2VjcywgbnNlY3MpIC0gcmV0dXJucyB0b3RhbCBuc2VjcyBnaXZlbiBzZWNzL25zZWNzIHBhaXIKLSAgbnNlY3Nfc2Vjcyhuc2VjcykgLSByZXR1cm5zIHdob2xlIHNlY3MgcG9ydGlvbiBnaXZlbiBuc2VjcwotICBuc2Vjc19uc2Vjcyhuc2VjcykgLSByZXR1cm5zIG5zZWNzIHJlbWFpbmRlciBnaXZlbiBuc2VjcwotICBuc2Vjc19zdHIobnNlY3MpIC0gcmV0dXJucyBwcmludGFibGUgc3RyaW5nIGluIHRoZSBmb3JtIHNlY3MubnNlY3MKLSAgYXZnKHRvdGFsLCBuKSAtIHJldHVybnMgYXZlcmFnZSBnaXZlbiBhIHN1bSBhbmQgYSB0b3RhbCBudW1iZXIgb2YgdmFsdWVzCi0KLVNFRSBBTFNPCi0tLS0tLS0tLQotbGlua3BlcmY6cGVyZi10cmFjZVsxXQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtdHJhY2UudHh0IGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtdHJhY2UudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNmFmZjZiLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXRyYWNlLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDExMSArMCwwIEBACi1wZXJmLXRyYWNlKDEpCi09PT09PT09PT09PT09Ci0KLU5BTUUKLS0tLS0KLXBlcmYtdHJhY2UgLSBSZWFkIHBlcmYuZGF0YSAoY3JlYXRlZCBieSBwZXJmIHJlY29yZCkgYW5kIGRpc3BsYXkgdHJhY2Ugb3V0cHV0Ci0KLVNZTk9QU0lTCi0tLS0tLS0tLQotW3ZlcnNlXQotJ3BlcmYgdHJhY2UnIFs8b3B0aW9ucz5dCi0ncGVyZiB0cmFjZScgWzxvcHRpb25zPl0gcmVjb3JkIDxzY3JpcHQ+IFs8cmVjb3JkLW9wdGlvbnM+XSA8Y29tbWFuZD4KLSdwZXJmIHRyYWNlJyBbPG9wdGlvbnM+XSByZXBvcnQgPHNjcmlwdD4gW3NjcmlwdC1hcmdzXQotJ3BlcmYgdHJhY2UnIFs8b3B0aW9ucz5dIDxzY3JpcHQ+IDxyZXF1aXJlZC1zY3JpcHQtYXJncz4gWzxyZWNvcmQtb3B0aW9ucz5dIDxjb21tYW5kPgotJ3BlcmYgdHJhY2UnIFs8b3B0aW9ucz5dIDx0b3Atc2NyaXB0PiBbc2NyaXB0LWFyZ3NdCi0KLURFU0NSSVBUSU9OCi0tLS0tLS0tLS0tLQotVGhpcyBjb21tYW5kIHJlYWRzIHRoZSBpbnB1dCBmaWxlIGFuZCBkaXNwbGF5cyB0aGUgdHJhY2UgcmVjb3JkZWQuCi0KLVRoZXJlIGFyZSBzZXZlcmFsIHZhcmlhbnRzIG9mIHBlcmYgdHJhY2U6Ci0KLSAgJ3BlcmYgdHJhY2UnIHRvIHNlZSBhIGRldGFpbGVkIHRyYWNlIG9mIHRoZSB3b3JrbG9hZCB0aGF0IHdhcwotICByZWNvcmRlZC4KLQotICBZb3UgY2FuIGFsc28gcnVuIGEgc2V0IG9mIHByZS1jYW5uZWQgc2NyaXB0cyB0aGF0IGFnZ3JlZ2F0ZSBhbmQKLSAgc3VtbWFyaXplIHRoZSByYXcgdHJhY2UgZGF0YSBpbiB2YXJpb3VzIHdheXMgKHRoZSBsaXN0IG9mIHNjcmlwdHMgaXMKLSAgYXZhaWxhYmxlIHZpYSAncGVyZiB0cmFjZSAtbCcpLiAgVGhlIGZvbGxvd2luZyB2YXJpYW50cyBhbGxvdyB5b3UgdG8KLSAgcmVjb3JkIGFuZCBydW4gdGhvc2Ugc2NyaXB0czoKLQotICAncGVyZiB0cmFjZSByZWNvcmQgPHNjcmlwdD4gPGNvbW1hbmQ+JyB0byByZWNvcmQgdGhlIGV2ZW50cyByZXF1aXJlZAotICBmb3IgJ3BlcmYgdHJhY2UgcmVwb3J0Jy4gIDxzY3JpcHQ+IGlzIHRoZSBuYW1lIGRpc3BsYXllZCBpbiB0aGUKLSAgb3V0cHV0IG9mICdwZXJmIHRyYWNlIC0tbGlzdCcgaS5lLiB0aGUgYWN0dWFsIHNjcmlwdCBuYW1lIG1pbnVzIGFueQotICBsYW5ndWFnZSBleHRlbnNpb24uICBJZiA8Y29tbWFuZD4gaXMgbm90IHNwZWNpZmllZCwgdGhlIGV2ZW50cyBhcmUKLSAgcmVjb3JkZWQgdXNpbmcgdGhlIC1hIChzeXN0ZW0td2lkZSkgJ3BlcmYgcmVjb3JkJyBvcHRpb24uCi0KLSAgJ3BlcmYgdHJhY2UgcmVwb3J0IDxzY3JpcHQ+IFthcmdzXScgdG8gcnVuIGFuZCBkaXNwbGF5IHRoZSByZXN1bHRzCi0gIG9mIDxzY3JpcHQ+LiAgPHNjcmlwdD4gaXMgdGhlIG5hbWUgZGlzcGxheWVkIGluIHRoZSBvdXRwdXQgb2YgJ3BlcmYKLSAgdHJhY2UgLS1saXN0JyBpLmUuIHRoZSBhY3R1YWwgc2NyaXB0IG5hbWUgbWludXMgYW55IGxhbmd1YWdlCi0gIGV4dGVuc2lvbi4gIFRoZSBwZXJmLmRhdGEgb3V0cHV0IGZyb20gYSBwcmV2aW91cyBydW4gb2YgJ3BlcmYgdHJhY2UKLSAgcmVjb3JkIDxzY3JpcHQ+JyBpcyB1c2VkIGFuZCBzaG91bGQgYmUgcHJlc2VudCBmb3IgdGhpcyBjb21tYW5kIHRvCi0gIHN1Y2NlZWQuICBbYXJnc10gcmVmZXJzIHRvIHRoZSAobWFpbmx5IG9wdGlvbmFsKSBhcmdzIGV4cGVjdGVkIGJ5Ci0gIHRoZSBzY3JpcHQuCi0KLSAgJ3BlcmYgdHJhY2UgPHNjcmlwdD4gPHJlcXVpcmVkLXNjcmlwdC1hcmdzPiA8Y29tbWFuZD4nIHRvIGJvdGgKLSAgcmVjb3JkIHRoZSBldmVudHMgcmVxdWlyZWQgZm9yIDxzY3JpcHQ+IGFuZCB0byBydW4gdGhlIDxzY3JpcHQ+Ci0gIHVzaW5nICdsaXZlLW1vZGUnIGkuZS4gd2l0aG91dCB3cml0aW5nIGFueXRoaW5nIHRvIGRpc2suICA8c2NyaXB0PgotICBpcyB0aGUgbmFtZSBkaXNwbGF5ZWQgaW4gdGhlIG91dHB1dCBvZiAncGVyZiB0cmFjZSAtLWxpc3QnIGkuZS4gdGhlCi0gIGFjdHVhbCBzY3JpcHQgbmFtZSBtaW51cyBhbnkgbGFuZ3VhZ2UgZXh0ZW5zaW9uLiAgSWYgPGNvbW1hbmQ+IGlzCi0gIG5vdCBzcGVjaWZpZWQsIHRoZSBldmVudHMgYXJlIHJlY29yZGVkIHVzaW5nIHRoZSAtYSAoc3lzdGVtLXdpZGUpCi0gICdwZXJmIHJlY29yZCcgb3B0aW9uLiAgSWYgPHNjcmlwdD4gaGFzIGFueSByZXF1aXJlZCBhcmdzLCB0aGV5Ci0gIHNob3VsZCBiZSBzcGVjaWZpZWQgYmVmb3JlIDxjb21tYW5kPi4gIFRoaXMgbW9kZSBkb2Vzbid0IGFsbG93IGZvcgotICBvcHRpb25hbCBzY3JpcHQgYXJncyB0byBiZSBzcGVjaWZpZWQ7IGlmIG9wdGlvbmFsIHNjcmlwdCBhcmdzIGFyZQotICBkZXNpcmVkLCB0aGV5IGNhbiBiZSBzcGVjaWZpZWQgdXNpbmcgc2VwYXJhdGUgJ3BlcmYgdHJhY2UgcmVjb3JkJwotICBhbmQgJ3BlcmYgdHJhY2UgcmVwb3J0JyBjb21tYW5kcywgd2l0aCB0aGUgc3Rkb3V0IG9mIHRoZSByZWNvcmQgc3RlcAotICBwaXBlZCB0byB0aGUgc3RkaW4gb2YgdGhlIHJlcG9ydCBzY3JpcHQsIHVzaW5nIHRoZSAnLW8gLScgYW5kICctaSAtJwotICBvcHRpb25zIG9mIHRoZSBjb3JyZXNwb25kaW5nIGNvbW1hbmRzLgotCi0gICdwZXJmIHRyYWNlIDx0b3Atc2NyaXB0PicgdG8gYm90aCByZWNvcmQgdGhlIGV2ZW50cyByZXF1aXJlZCBmb3IKLSAgPHRvcC1zY3JpcHQ+IGFuZCB0byBydW4gdGhlIDx0b3Atc2NyaXB0PiB1c2luZyAnbGl2ZS1tb2RlJwotICBpLmUuIHdpdGhvdXQgd3JpdGluZyBhbnl0aGluZyB0byBkaXNrLiAgPHRvcC1zY3JpcHQ+IGlzIHRoZSBuYW1lCi0gIGRpc3BsYXllZCBpbiB0aGUgb3V0cHV0IG9mICdwZXJmIHRyYWNlIC0tbGlzdCcgaS5lLiB0aGUgYWN0dWFsCi0gIHNjcmlwdCBuYW1lIG1pbnVzIGFueSBsYW5ndWFnZSBleHRlbnNpb247IGEgPHRvcC1zY3JpcHQ+IGlzIGRlZmluZWQKLSAgYXMgYW55IHNjcmlwdCBuYW1lIGVuZGluZyB3aXRoIHRoZSBzdHJpbmcgJ3RvcCcuCi0KLSAgWzxyZWNvcmQtb3B0aW9ucz5dIGNhbiBiZSBwYXNzZWQgdG8gdGhlIHJlY29yZCBzdGVwcyBvZiAncGVyZiB0cmFjZQotICByZWNvcmQnIGFuZCAnbGl2ZS1tb2RlJyB2YXJpYW50czsgdGhpcyBpc24ndCBwb3NzaWJsZSBob3dldmVyIGZvcgotICA8dG9wLXNjcmlwdD4gJ2xpdmUtbW9kZScgb3IgJ3BlcmYgdHJhY2UgcmVwb3J0JyB2YXJpYW50cy4KLQotICBTZWUgdGhlICdTRUUgQUxTTycgc2VjdGlvbiBmb3IgbGlua3MgdG8gbGFuZ3VhZ2Utc3BlY2lmaWMKLSAgaW5mb3JtYXRpb24gb24gaG93IHRvIHdyaXRlIGFuZCBydW4geW91ciBvd24gdHJhY2Ugc2NyaXB0cy4KLQotT1BUSU9OUwotLS0tLS0tLQotPGNvbW1hbmQ+Li4uOjoKLQlBbnkgY29tbWFuZCB5b3UgY2FuIHNwZWNpZnkgaW4gYSBzaGVsbC4KLQotLUQ6OgotLS1kdW1wLXJhdy10cmFjZT06OgotICAgICAgICBEaXNwbGF5IHZlcmJvc2UgZHVtcCBvZiB0aGUgdHJhY2UgZGF0YS4KLQotLUw6OgotLS1MYXRlbmN5PTo6Ci0gICAgICAgIFNob3cgbGF0ZW5jeSBhdHRyaWJ1dGVzIChpcnFzL3ByZWVtcHRpb24gZGlzYWJsZWQsIGV0YykuCi0KLS1sOjoKLS0tbGlzdD06OgotICAgICAgICBEaXNwbGF5IGEgbGlzdCBvZiBhdmFpbGFibGUgdHJhY2Ugc2NyaXB0cy4KLQotLXMgWydsYW5nJ106OgotLS1zY3JpcHQ9OjoKLSAgICAgICAgUHJvY2VzcyB0cmFjZSBkYXRhIHdpdGggdGhlIGdpdmVuIHNjcmlwdCAoW2xhbmddOnNjcmlwdFsuZXh0XSkuCi0JSWYgdGhlIHN0cmluZyAnbGFuZycgaXMgc3BlY2lmaWVkIGluIHBsYWNlIG9mIGEgc2NyaXB0IG5hbWUsIGEKLSAgICAgICAgbGlzdCBvZiBzdXBwb3J0ZWQgbGFuZ3VhZ2VzIHdpbGwgYmUgZGlzcGxheWVkIGluc3RlYWQuCi0KLS1nOjoKLS0tZ2VuLXNjcmlwdD06OgotICAgICAgICBHZW5lcmF0ZSBwZXJmLXRyYWNlLltleHRdIHN0YXJ0ZXIgc2NyaXB0IGZvciBnaXZlbiBsYW5ndWFnZSwKLSAgICAgICAgdXNpbmcgY3VycmVudCBwZXJmLmRhdGEuCi0KLS1hOjoKLSAgICAgICAgRm9yY2Ugc3lzdGVtLXdpZGUgY29sbGVjdGlvbi4gIFNjcmlwdHMgcnVuIHdpdGhvdXQgYSA8Y29tbWFuZD4KLSAgICAgICAgbm9ybWFsbHkgdXNlIC1hIGJ5IGRlZmF1bHQsIHdoaWxlIHNjcmlwdHMgcnVuIHdpdGggYSA8Y29tbWFuZD4KLSAgICAgICAgbm9ybWFsbHkgZG9uJ3QgLSB0aGlzIG9wdGlvbiBhbGxvd3MgdGhlIGxhdHRlciB0byBiZSBydW4gaW4KLSAgICAgICAgc3lzdGVtLXdpZGUgbW9kZS4KLQotCi1TRUUgQUxTTwotLS0tLS0tLS0KLWxpbmtwZXJmOnBlcmYtcmVjb3JkWzFdLCBsaW5rcGVyZjpwZXJmLXRyYWNlLXBlcmxbMV0sCi1saW5rcGVyZjpwZXJmLXRyYWNlLXB5dGhvblsxXQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9NQU5JRkVTVCBiL3Rvb2xzL3BlcmYvTUFOSUZFU1QKaW5kZXggOGM3ZmMwYy4uYzEyNjU5ZCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9NQU5JRkVTVAorKysgYi90b29scy9wZXJmL01BTklGRVNUCkBAIC03LDYgKzcsNyBAQAogbGliL3JidHJlZS5jCiBpbmNsdWRlL2xpbnV4L3N3YWIuaAogYXJjaC8qL2luY2x1ZGUvYXNtL3VuaXN0ZCouaAorYXJjaC8qL2xpYi9tZW1jcHkqLlMKIGluY2x1ZGUvbGludXgvcG9pc29uLmgKIGluY2x1ZGUvbGludXgvbWFnaWMuaAogaW5jbHVkZS9saW51eC9od19icmVha3BvaW50LmgKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvTWFrZWZpbGUgYi90b29scy9wZXJmL01ha2VmaWxlCmluZGV4IGQxZGIwZjYuLjFiOWIxM2UgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvTWFrZWZpbGUKKysrIGIvdG9vbHMvcGVyZi9NYWtlZmlsZQpAQCAtMTg1LDcgKzE4NSwxMCBAQAogICAgICAgICBBUkNIIDo9IHg4NgogZW5kaWYKIGlmZXEgKCQoQVJDSCkseDg2XzY0KQorCVJBV19BUkNIIDo9IHg4Nl82NAogICAgICAgICBBUkNIIDo9IHg4NgorCUFSQ0hfQ0ZMQUdTIDo9IC1EQVJDSF9YODZfNjQKKwlBUkNIX0lOQ0xVREUgPSAuLi8uLi9hcmNoL3g4Ni9saWIvbWVtY3B5XzY0LlMKIGVuZGlmCiAKICMgQ0ZMQUdTIGFuZCBMREZMQUdTIGFyZSBmb3IgdGhlIHVzZXJzIHRvIG92ZXJyaWRlIGZyb20gdGhlIGNvbW1hbmQgbGluZS4KQEAgLTM3NSw2ICszNzgsNyBAQAogTElCX0ggKz0gdXRpbC9pbmNsdWRlL2xpbnV4L3JidHJlZS5oCiBMSUJfSCArPSB1dGlsL2luY2x1ZGUvbGludXgvc3RyaW5nLmgKIExJQl9IICs9IHV0aWwvaW5jbHVkZS9saW51eC90eXBlcy5oCitMSUJfSCArPSB1dGlsL2luY2x1ZGUvbGludXgvbGlua2FnZS5oCiBMSUJfSCArPSB1dGlsL2luY2x1ZGUvYXNtL2FzbS1vZmZzZXRzLmgKIExJQl9IICs9IHV0aWwvaW5jbHVkZS9hc20vYnVnLmgKIExJQl9IICs9IHV0aWwvaW5jbHVkZS9hc20vYnl0ZW9yZGVyLmgKQEAgLTM4Myw2ICszODcsOCBAQAogTElCX0ggKz0gdXRpbC9pbmNsdWRlL2FzbS9zeXN0ZW0uaAogTElCX0ggKz0gdXRpbC9pbmNsdWRlL2FzbS91YWNjZXNzLmgKIExJQl9IICs9IHV0aWwvaW5jbHVkZS9kd2FyZi1yZWdzLmgKK0xJQl9IICs9IHV0aWwvaW5jbHVkZS9hc20vZHdhcmYyLmgKK0xJQl9IICs9IHV0aWwvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oCiBMSUJfSCArPSBwZXJmLmgKIExJQl9IICs9IHV0aWwvY2FjaGUuaAogTElCX0ggKz0gdXRpbC9jYWxsY2hhaW4uaApAQCAtMzkwLDYgKzM5Niw3IEBACiBMSUJfSCArPSB1dGlsL2RlYnVnLmgKIExJQl9IICs9IHV0aWwvZGVidWdmcy5oCiBMSUJfSCArPSB1dGlsL2V2ZW50LmgKK0xJQl9IICs9IHV0aWwvZXZzZWwuaAogTElCX0ggKz0gdXRpbC9leGVjX2NtZC5oCiBMSUJfSCArPSB1dGlsL3R5cGVzLmgKIExJQl9IICs9IHV0aWwvbGV2ZW5zaHRlaW4uaApAQCAtMzk4LDYgKzQwNSw3IEBACiBMSUJfSCArPSB1dGlsL3BhcnNlLWV2ZW50cy5oCiBMSUJfSCArPSB1dGlsL3F1b3RlLmgKIExJQl9IICs9IHV0aWwvdXRpbC5oCitMSUJfSCArPSB1dGlsL3h5YXJyYXkuaAogTElCX0ggKz0gdXRpbC9oZWFkZXIuaAogTElCX0ggKz0gdXRpbC9oZWxwLmgKIExJQl9IICs9IHV0aWwvc2Vzc2lvbi5oCkBAIC00MTcsNiArNDI1LDcgQEAKIExJQl9IICs9IHV0aWwvcHJvYmUtZXZlbnQuaAogTElCX0ggKz0gdXRpbC9wc3RhY2suaAogTElCX0ggKz0gdXRpbC9jcHVtYXAuaAorTElCX0ggKz0gJChBUkNIX0lOQ0xVREUpCiAKIExJQl9PQkpTICs9ICQoT1VUUFVUKXV0aWwvYWJzcGF0aC5vCiBMSUJfT0JKUyArPSAkKE9VVFBVVCl1dGlsL2FsaWFzLm8KQEAgLTQyNiw2ICs0MzUsNyBAQAogTElCX09CSlMgKz0gJChPVVRQVVQpdXRpbC9kZWJ1Z2ZzLm8KIExJQl9PQkpTICs9ICQoT1VUUFVUKXV0aWwvZW52aXJvbm1lbnQubwogTElCX09CSlMgKz0gJChPVVRQVVQpdXRpbC9ldmVudC5vCitMSUJfT0JKUyArPSAkKE9VVFBVVCl1dGlsL2V2c2VsLm8KIExJQl9PQkpTICs9ICQoT1VUUFVUKXV0aWwvZXhlY19jbWQubwogTElCX09CSlMgKz0gJChPVVRQVVQpdXRpbC9oZWxwLm8KIExJQl9PQkpTICs9ICQoT1VUUFVUKXV0aWwvbGV2ZW5zaHRlaW4ubwpAQCAtNDYzLDYgKzQ3Myw3IEBACiBMSUJfT0JKUyArPSAkKE9VVFBVVCl1dGlsL2hpc3QubwogTElCX09CSlMgKz0gJChPVVRQVVQpdXRpbC9wcm9iZS1ldmVudC5vCiBMSUJfT0JKUyArPSAkKE9VVFBVVCl1dGlsL3V0aWwubworTElCX09CSlMgKz0gJChPVVRQVVQpdXRpbC94eWFycmF5Lm8KIExJQl9PQkpTICs9ICQoT1VUUFVUKXV0aWwvY3B1bWFwLm8KIAogQlVJTFRJTl9PQkpTICs9ICQoT1VUUFVUKWJ1aWx0aW4tYW5ub3RhdGUubwpAQCAtNDcyLDYgKzQ4Myw5IEBACiAjIEJlbmNobWFyayBtb2R1bGVzCiBCVUlMVElOX09CSlMgKz0gJChPVVRQVVQpYmVuY2gvc2NoZWQtbWVzc2FnaW5nLm8KIEJVSUxUSU5fT0JKUyArPSAkKE9VVFBVVCliZW5jaC9zY2hlZC1waXBlLm8KK2lmZXEgKCQoUkFXX0FSQ0gpLHg4Nl82NCkKK0JVSUxUSU5fT0JKUyArPSAkKE9VVFBVVCliZW5jaC9tZW0tbWVtY3B5LXg4Ni02NC1hc20ubworZW5kaWYKIEJVSUxUSU5fT0JKUyArPSAkKE9VVFBVVCliZW5jaC9tZW0tbWVtY3B5Lm8KIAogQlVJTFRJTl9PQkpTICs9ICQoT1VUUFVUKWJ1aWx0aW4tZGlmZi5vCkBAIC00ODUsNyArNDk5LDcgQEAKIEJVSUxUSU5fT0JKUyArPSAkKE9VVFBVVClidWlsdGluLXN0YXQubwogQlVJTFRJTl9PQkpTICs9ICQoT1VUUFVUKWJ1aWx0aW4tdGltZWNoYXJ0Lm8KIEJVSUxUSU5fT0JKUyArPSAkKE9VVFBVVClidWlsdGluLXRvcC5vCi1CVUlMVElOX09CSlMgKz0gJChPVVRQVVQpYnVpbHRpbi10cmFjZS5vCitCVUlMVElOX09CSlMgKz0gJChPVVRQVVQpYnVpbHRpbi1zY3JpcHQubwogQlVJTFRJTl9PQkpTICs9ICQoT1VUUFVUKWJ1aWx0aW4tcHJvYmUubwogQlVJTFRJTl9PQkpTICs9ICQoT1VUUFVUKWJ1aWx0aW4ta21lbS5vCiBCVUlMVElOX09CSlMgKz0gJChPVVRQVVQpYnVpbHRpbi1sb2NrLm8KQEAgLTUwNyw3ICs1MjEsNyBAQAogLWluY2x1ZGUgY29uZmlnLm1hawogCiBpZm5kZWYgTk9fRFdBUkYKLUZMQUdTX0RXQVJGPSQoQUxMX0NGTEFHUykgLUkvdXNyL2luY2x1ZGUvZWxmdXRpbHMgLWxkdyAtbGVsZiAkKEFMTF9MREZMQUdTKSAkKEVYVExJQlMpCitGTEFHU19EV0FSRj0kKEFMTF9DRkxBR1MpIC1sZHcgLWxlbGYgJChBTExfTERGTEFHUykgJChFWFRMSUJTKQogaWZuZXEgKCQoY2FsbCB0cnktY2MsJChTT1VSQ0VfRFdBUkYpLCQoRkxBR1NfRFdBUkYpKSx5KQogCW1zZyA6PSAkKHdhcm5pbmcgTm8gbGliZHcuaCBmb3VuZCBvciBvbGQgbGliZHcuaCBmb3VuZCBvciBlbGZ1dGlscyBpcyBvbGRlciB0aGFuIDAuMTM4LCBkaXNhYmxlcyBkd2FyZiBzdXBwb3J0LiBQbGVhc2UgaW5zdGFsbCBuZXcgZWxmdXRpbHMtZGV2ZWwvbGliZHctZGV2KTsKIAlOT19EV0FSRiA6PSAxCkBAIC01NTQsNyArNTY4LDcgQEAKIGlmZXEgKCQob3JpZ2luIFBFUkZfSEFWRV9EV0FSRl9SRUdTKSwgdW5kZWZpbmVkKQogCW1zZyA6PSAkKHdhcm5pbmcgRFdBUkYgcmVnaXN0ZXIgbWFwcGluZ3MgaGF2ZSBub3QgYmVlbiBkZWZpbmVkIGZvciBhcmNoaXRlY3R1cmUgJChBUkNIKSwgRFdBUkYgc3VwcG9ydCBkaXNhYmxlZCk7CiBlbHNlCi0JQkFTSUNfQ0ZMQUdTICs9IC1JL3Vzci9pbmNsdWRlL2VsZnV0aWxzIC1ERFdBUkZfU1VQUE9SVAorCUJBU0lDX0NGTEFHUyArPSAtRERXQVJGX1NVUFBPUlQKIAlFWFRMSUJTICs9IC1sZWxmIC1sZHcKIAlMSUJfT0JKUyArPSAkKE9VVFBVVCl1dGlsL3Byb2JlLWZpbmRlci5vCiBlbmRpZiAjIFBFUkZfSEFWRV9EV0FSRl9SRUdTCkBAIC04OTEsMTMgKzkwNSwxNCBAQAogU0hFTExfUEFUSF9TUSA9ICQoc3Vic3QgJywnXCcnLCQoU0hFTExfUEFUSCkpCiBQRVJMX1BBVEhfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKFBFUkxfUEFUSCkpCiAKLUxJQlMgPSAkKFBFUkZMSUJTKSAkKEVYVExJQlMpCitMSUJTID0gLVdsLC0td2hvbGUtYXJjaGl2ZSAkKFBFUkZMSUJTKSAtV2wsLS1uby13aG9sZS1hcmNoaXZlICQoRVhUTElCUykKIAogQkFTSUNfQ0ZMQUdTICs9IC1EU0hBMV9IRUFERVI9JyQoU0hBMV9IRUFERVJfU1EpJyBcCiAJJChDT01QQVRfQ0ZMQUdTKQogTElCX09CSlMgKz0gJChDT01QQVRfT0JKUykKIAogQUxMX0NGTEFHUyArPSAkKEJBU0lDX0NGTEFHUykKK0FMTF9DRkxBR1MgKz0gJChBUkNIX0NGTEFHUykKIEFMTF9MREZMQUdTICs9ICQoQkFTSUNfTERGTEFHUykKIAogZXhwb3J0IFRBUiBJTlNUQUxMIERFU1RESVIgU0hFTExfUEFUSApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9hcmNoL3MzOTAvTWFrZWZpbGUgYi90b29scy9wZXJmL2FyY2gvczM5MC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTEzMGI1Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9hcmNoL3MzOTAvTWFrZWZpbGUKQEAgLTAsMCArMSw0IEBACitpZm5kZWYgTk9fRFdBUkYKK1BFUkZfSEFWRV9EV0FSRl9SRUdTIDo9IDEKK0xJQl9PQkpTICs9ICQoT1VUUFVUKWFyY2gvJChBUkNIKS91dGlsL2R3YXJmLXJlZ3MubworZW5kaWYKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYXJjaC9zMzkwL3V0aWwvZHdhcmYtcmVncy5jIGIvdG9vbHMvcGVyZi9hcmNoL3MzOTAvdXRpbC9kd2FyZi1yZWdzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE5NjUzZQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvYXJjaC9zMzkwL3V0aWwvZHdhcmYtcmVncy5jCkBAIC0wLDAgKzEsMjIgQEAKKy8qCisgKiBNYXBwaW5nIG9mIERXQVJGIGRlYnVnIHJlZ2lzdGVyIG51bWJlcnMgaW50byByZWdpc3RlciBuYW1lcy4KKyAqCisgKiAgICBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMTAKKyAqICAgIEF1dGhvcihzKTogSGVpa28gQ2Fyc3RlbnMgPGhlaWtvLmNhcnN0ZW5zQGRlLmlibS5jb20+LAorICoKKyAqLworCisjaW5jbHVkZSA8bGliaW8uaD4KKyNpbmNsdWRlIDxkd2FyZi1yZWdzLmg+CisKKyNkZWZpbmUgTlVNX0dQUlMgMTYKKworc3RhdGljIGNvbnN0IGNoYXIgKmdwcl9uYW1lc1tOVU1fR1BSU10gPSB7CisJIiVyMCIsICIlcjEiLCAgIiVyMiIsICAiJXIzIiwgICIlcjQiLCAgIiVyNSIsICAiJXI2IiwgICIlcjciLAorCSIlcjgiLCAiJXI5IiwgIiVyMTAiLCAiJXIxMSIsICIlcjEyIiwgIiVyMTMiLCAiJXIxNCIsICIlcjE1IiwKK307CisKK2NvbnN0IGNoYXIgKmdldF9hcmNoX3JlZ3N0cih1bnNpZ25lZCBpbnQgbikKK3sKKwlyZXR1cm4gKG4gPj0gTlVNX0dQUlMpID8gTlVMTCA6IGdwcl9uYW1lc1tuXTsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYmVuY2gvbWVtLW1lbWNweS1hcmNoLmggYi90b29scy9wZXJmL2JlbmNoL21lbS1tZW1jcHktYXJjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3MmUzNmMKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL2JlbmNoL21lbS1tZW1jcHktYXJjaC5oCkBAIC0wLDAgKzEsMTIgQEAKKworI2lmZGVmIEFSQ0hfWDg2XzY0CisKKyNkZWZpbmUgTUVNQ1BZX0ZOKGZuLCBuYW1lLCBkZXNjKQkJXAorCWV4dGVybiB2b2lkICpmbih2b2lkICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90KTsKKworI2luY2x1ZGUgIm1lbS1tZW1jcHkteDg2LTY0LWFzbS1kZWYuaCIKKworI3VuZGVmIE1FTUNQWV9GTgorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9iZW5jaC9tZW0tbWVtY3B5LXg4Ni02NC1hc20tZGVmLmggYi90b29scy9wZXJmL2JlbmNoL21lbS1tZW1jcHkteDg2LTY0LWFzbS1kZWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTg4Yjg3Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9iZW5jaC9tZW0tbWVtY3B5LXg4Ni02NC1hc20tZGVmLmgKQEAgLTAsMCArMSw0IEBACisKK01FTUNQWV9GTihfX21lbWNweSwKKwkieDg2LTY0LXVucm9sbGVkIiwKKwkidW5yb2xsZWQgbWVtY3B5KCkgaW4gYXJjaC94ODYvbGliL21lbWNweV82NC5TIikKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYmVuY2gvbWVtLW1lbWNweS14ODYtNjQtYXNtLlMgYi90b29scy9wZXJmL2JlbmNoL21lbS1tZW1jcHkteDg2LTY0LWFzbS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1N2I2NmUKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL2JlbmNoL21lbS1tZW1jcHkteDg2LTY0LWFzbS5TCkBAIC0wLDAgKzEsMiBAQAorCisjaW5jbHVkZSAiLi4vLi4vLi4vYXJjaC94ODYvbGliL21lbWNweV82NC5TIgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9iZW5jaC9tZW0tbWVtY3B5LmMgYi90b29scy9wZXJmL2JlbmNoL21lbS1tZW1jcHkuYwppbmRleCAzOGRhZTc0Li5kYjgyMDIxIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2JlbmNoL21lbS1tZW1jcHkuYworKysgYi90b29scy9wZXJmL2JlbmNoL21lbS1tZW1jcHkuYwpAQCAtMTIsNiArMTIsNyBAQAogI2luY2x1ZGUgIi4uL3V0aWwvcGFyc2Utb3B0aW9ucy5oIgogI2luY2x1ZGUgIi4uL3V0aWwvaGVhZGVyLmgiCiAjaW5jbHVkZSAiYmVuY2guaCIKKyNpbmNsdWRlICJtZW0tbWVtY3B5LWFyY2guaCIKIAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CkBAIC0yMyw4ICsyNCwxMCBAQAogCiBzdGF0aWMgY29uc3QgY2hhcgkqbGVuZ3RoX3N0cgk9ICIxTUIiOwogc3RhdGljIGNvbnN0IGNoYXIJKnJvdXRpbmUJPSAiZGVmYXVsdCI7Ci1zdGF0aWMgYm9vbAkJdXNlX2Nsb2NrCT0gZmFsc2U7CitzdGF0aWMgYm9vbAkJdXNlX2Nsb2NrOwogc3RhdGljIGludAkJY2xvY2tfZmQ7CitzdGF0aWMgYm9vbAkJb25seV9wcmVmYXVsdDsKK3N0YXRpYyBib29sCQlub19wcmVmYXVsdDsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0gewogCU9QVF9TVFJJTkcoJ2wnLCAibGVuZ3RoIiwgJmxlbmd0aF9zdHIsICIxTUIiLApAQCAtMzQsMTkgKzM3LDMzIEBACiAJCSAgICAiU3BlY2lmeSByb3V0aW5lIHRvIGNvcHkiKSwKIAlPUFRfQk9PTEVBTignYycsICJjbG9jayIsICZ1c2VfY2xvY2ssCiAJCSAgICAiVXNlIENQVSBjbG9jayBmb3IgbWVhc3VyaW5nIiksCisJT1BUX0JPT0xFQU4oJ28nLCAib25seS1wcmVmYXVsdCIsICZvbmx5X3ByZWZhdWx0LAorCQkgICAgIlNob3cgb25seSB0aGUgcmVzdWx0IHdpdGggcGFnZSBmYXVsdHMgYmVmb3JlIG1lbWNweSgpIiksCisJT1BUX0JPT0xFQU4oJ24nLCAibm8tcHJlZmF1bHQiLCAmbm9fcHJlZmF1bHQsCisJCSAgICAiU2hvdyBvbmx5IHRoZSByZXN1bHQgd2l0aG91dCBwYWdlIGZhdWx0cyBiZWZvcmUgbWVtY3B5KCkiKSwKIAlPUFRfRU5EKCkKIH07CiAKK3R5cGVkZWYgdm9pZCAqKCptZW1jcHlfdCkodm9pZCAqLCBjb25zdCB2b2lkICosIHNpemVfdCk7CisKIHN0cnVjdCByb3V0aW5lIHsKIAljb25zdCBjaGFyICpuYW1lOwogCWNvbnN0IGNoYXIgKmRlc2M7Ci0Jdm9pZCAqICgqZm4pKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbGVuKTsKKwltZW1jcHlfdCBmbjsKIH07CiAKIHN0cnVjdCByb3V0aW5lIHJvdXRpbmVzW10gPSB7CiAJeyAiZGVmYXVsdCIsCiAJICAiRGVmYXVsdCBtZW1jcHkoKSBwcm92aWRlZCBieSBnbGliYyIsCiAJICBtZW1jcHkgfSwKKyNpZmRlZiBBUkNIX1g4Nl82NAorCisjZGVmaW5lIE1FTUNQWV9GTihmbiwgbmFtZSwgZGVzYykgeyBuYW1lLCBkZXNjLCBmbiB9LAorI2luY2x1ZGUgIm1lbS1tZW1jcHkteDg2LTY0LWFzbS1kZWYuaCIKKyN1bmRlZiBNRU1DUFlfRk4KKworI2VuZGlmCisKIAl7IE5VTEwsCiAJICBOVUxMLAogCSAgTlVMTCAgIH0KQEAgLTg5LDI5ICsxMDYsOTggQEAKIAkJKGRvdWJsZSl0cy0+dHZfdXNlYyAvIChkb3VibGUpMTAwMDAwMDsKIH0KIAorc3RhdGljIHZvaWQgYWxsb2NfbWVtKHZvaWQgKipkc3QsIHZvaWQgKipzcmMsIHNpemVfdCBsZW5ndGgpCit7CisJKmRzdCA9IHphbGxvYyhsZW5ndGgpOworCWlmICghZHN0KQorCQlkaWUoIm1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCAtIG1heWJlIGxlbmd0aCBpcyB0b28gbGFyZ2U/XG4iKTsKKworCSpzcmMgPSB6YWxsb2MobGVuZ3RoKTsKKwlpZiAoIXNyYykKKwkJZGllKCJtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQgLSBtYXliZSBsZW5ndGggaXMgdG9vIGxhcmdlP1xuIik7Cit9CisKK3N0YXRpYyB1NjQgZG9fbWVtY3B5X2Nsb2NrKG1lbWNweV90IGZuLCBzaXplX3QgbGVuLCBib29sIHByZWZhdWx0KQoreworCXU2NCBjbG9ja19zdGFydCA9IDBVTEwsIGNsb2NrX2VuZCA9IDBVTEw7CisJdm9pZCAqc3JjID0gTlVMTCwgKmRzdCA9IE5VTEw7CisKKwlhbGxvY19tZW0oJnNyYywgJmRzdCwgbGVuKTsKKworCWlmIChwcmVmYXVsdCkKKwkJZm4oZHN0LCBzcmMsIGxlbik7CisKKwljbG9ja19zdGFydCA9IGdldF9jbG9jaygpOworCWZuKGRzdCwgc3JjLCBsZW4pOworCWNsb2NrX2VuZCA9IGdldF9jbG9jaygpOworCisJZnJlZShzcmMpOworCWZyZWUoZHN0KTsKKwlyZXR1cm4gY2xvY2tfZW5kIC0gY2xvY2tfc3RhcnQ7Cit9CisKK3N0YXRpYyBkb3VibGUgZG9fbWVtY3B5X2dldHRpbWVvZmRheShtZW1jcHlfdCBmbiwgc2l6ZV90IGxlbiwgYm9vbCBwcmVmYXVsdCkKK3sKKwlzdHJ1Y3QgdGltZXZhbCB0dl9zdGFydCwgdHZfZW5kLCB0dl9kaWZmOworCXZvaWQgKnNyYyA9IE5VTEwsICpkc3QgPSBOVUxMOworCisJYWxsb2NfbWVtKCZzcmMsICZkc3QsIGxlbik7CisKKwlpZiAocHJlZmF1bHQpCisJCWZuKGRzdCwgc3JjLCBsZW4pOworCisJQlVHX09OKGdldHRpbWVvZmRheSgmdHZfc3RhcnQsIE5VTEwpKTsKKwlmbihkc3QsIHNyYywgbGVuKTsKKwlCVUdfT04oZ2V0dGltZW9mZGF5KCZ0dl9lbmQsIE5VTEwpKTsKKworCXRpbWVyc3ViKCZ0dl9lbmQsICZ0dl9zdGFydCwgJnR2X2RpZmYpOworCisJZnJlZShzcmMpOworCWZyZWUoZHN0KTsKKwlyZXR1cm4gKGRvdWJsZSkoKGRvdWJsZSlsZW4gLyB0aW1ldmFsMmRvdWJsZSgmdHZfZGlmZikpOworfQorCisjZGVmaW5lIHBmIChub19wcmVmYXVsdCA/IDAgOiAxKQorCisjZGVmaW5lIHByaW50X2Jwcyh4KSBkbyB7CQkJCQlcCisJCWlmICh4IDwgSykJCQkJCVwKKwkJCXByaW50ZigiICUxNGxmIEIvU2VjIiwgeCk7CQlcCisJCWVsc2UgaWYgKHggPCBLICogSykJCQkJXAorCQkJcHJpbnRmKCIgJTE0bGZkIEtCL1NlYyIsIHggLyBLKTsJXAorCQllbHNlIGlmICh4IDwgSyAqIEsgKiBLKQkJCQlcCisJCQlwcmludGYoIiAlMTRsZiBNQi9TZWMiLCB4IC8gSyAvIEspOwlcCisJCWVsc2UJCQkJCQlcCisJCQlwcmludGYoIiAlMTRsZiBHQi9TZWMiLCB4IC8gSyAvIEsgLyBLKTsgXAorCX0gd2hpbGUgKDApCisKIGludCBiZW5jaF9tZW1fbWVtY3B5KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwKIAkJICAgICBjb25zdCBjaGFyICpwcmVmaXggX191c2VkKQogewogCWludCBpOwotCXZvaWQgKmRzdCwgKnNyYzsKLQlzaXplX3QgbGVuZ3RoOwotCWRvdWJsZSBicHMgPSAwLjA7Ci0Jc3RydWN0IHRpbWV2YWwgdHZfc3RhcnQsIHR2X2VuZCwgdHZfZGlmZjsKLQl1NjQgY2xvY2tfc3RhcnQsIGNsb2NrX2VuZCwgY2xvY2tfZGlmZjsKKwlzaXplX3QgbGVuOworCWRvdWJsZSByZXN1bHRfYnBzWzJdOworCXU2NCByZXN1bHRfY2xvY2tbMl07CiAKLQljbG9ja19zdGFydCA9IGNsb2NrX2VuZCA9IGNsb2NrX2RpZmYgPSAwVUxMOwogCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsCiAJCQkgICAgIGJlbmNoX21lbV9tZW1jcHlfdXNhZ2UsIDApOwogCi0JdHZfZGlmZi50dl9zZWMgPSAwOwotCXR2X2RpZmYudHZfdXNlYyA9IDA7Ci0JbGVuZ3RoID0gKHNpemVfdClwZXJmX2F0b2xsKChjaGFyICopbGVuZ3RoX3N0cik7CisJaWYgKHVzZV9jbG9jaykKKwkJaW5pdF9jbG9jaygpOwogCi0JaWYgKChzNjQpbGVuZ3RoIDw9IDApIHsKKwlsZW4gPSAoc2l6ZV90KXBlcmZfYXRvbGwoKGNoYXIgKilsZW5ndGhfc3RyKTsKKworCXJlc3VsdF9jbG9ja1swXSA9IHJlc3VsdF9jbG9ja1sxXSA9IDBVTEw7CisJcmVzdWx0X2Jwc1swXSA9IHJlc3VsdF9icHNbMV0gPSAwLjA7CisKKwlpZiAoKHM2NClsZW4gPD0gMCkgewogCQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgbGVuZ3RoOiVzXG4iLCBsZW5ndGhfc3RyKTsKIAkJcmV0dXJuIDE7CiAJfQogCisJLyogc2FtZSB0byB3aXRob3V0IHNwZWNpZnlpbmcgZWl0aGVyIG9mIHByZWZhdWx0IGFuZCBuby1wcmVmYXVsdCAqLworCWlmIChvbmx5X3ByZWZhdWx0ICYmIG5vX3ByZWZhdWx0KQorCQlvbmx5X3ByZWZhdWx0ID0gbm9fcHJlZmF1bHQgPSBmYWxzZTsKKwogCWZvciAoaSA9IDA7IHJvdXRpbmVzW2ldLm5hbWU7IGkrKykgewogCQlpZiAoIXN0cmNtcChyb3V0aW5lc1tpXS5uYW1lLCByb3V0aW5lKSkKIAkJCWJyZWFrOwpAQCAtMTI2LDYxICsyMTIsODAgQEAKIAkJcmV0dXJuIDE7CiAJfQogCi0JZHN0ID0gemFsbG9jKGxlbmd0aCk7Ci0JaWYgKCFkc3QpCi0JCWRpZSgibWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkIC0gbWF5YmUgbGVuZ3RoIGlzIHRvbyBsYXJnZT9cbiIpOworCWlmIChiZW5jaF9mb3JtYXQgPT0gQkVOQ0hfRk9STUFUX0RFRkFVTFQpCisJCXByaW50ZigiIyBDb3B5aW5nICVzIEJ5dGVzIC4uLlxuXG4iLCBsZW5ndGhfc3RyKTsKIAotCXNyYyA9IHphbGxvYyhsZW5ndGgpOwotCWlmICghc3JjKQotCQlkaWUoIm1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCAtIG1heWJlIGxlbmd0aCBpcyB0b28gbGFyZ2U/XG4iKTsKLQotCWlmIChiZW5jaF9mb3JtYXQgPT0gQkVOQ0hfRk9STUFUX0RFRkFVTFQpIHsKLQkJcHJpbnRmKCIjIENvcHlpbmcgJXMgQnl0ZXMgZnJvbSAlcCB0byAlcCAuLi5cblxuIiwKLQkJICAgICAgIGxlbmd0aF9zdHIsIHNyYywgZHN0KTsKLQl9Ci0KLQlpZiAodXNlX2Nsb2NrKSB7Ci0JCWluaXRfY2xvY2soKTsKLQkJY2xvY2tfc3RhcnQgPSBnZXRfY2xvY2soKTsKKwlpZiAoIW9ubHlfcHJlZmF1bHQgJiYgIW5vX3ByZWZhdWx0KSB7CisJCS8qIHNob3cgYm90aCBvZiByZXN1bHRzICovCisJCWlmICh1c2VfY2xvY2spIHsKKwkJCXJlc3VsdF9jbG9ja1swXSA9CisJCQkJZG9fbWVtY3B5X2Nsb2NrKHJvdXRpbmVzW2ldLmZuLCBsZW4sIGZhbHNlKTsKKwkJCXJlc3VsdF9jbG9ja1sxXSA9CisJCQkJZG9fbWVtY3B5X2Nsb2NrKHJvdXRpbmVzW2ldLmZuLCBsZW4sIHRydWUpOworCQl9IGVsc2UgeworCQkJcmVzdWx0X2Jwc1swXSA9CisJCQkJZG9fbWVtY3B5X2dldHRpbWVvZmRheShyb3V0aW5lc1tpXS5mbiwKKwkJCQkJCWxlbiwgZmFsc2UpOworCQkJcmVzdWx0X2Jwc1sxXSA9CisJCQkJZG9fbWVtY3B5X2dldHRpbWVvZmRheShyb3V0aW5lc1tpXS5mbiwKKwkJCQkJCWxlbiwgdHJ1ZSk7CisJCX0KIAl9IGVsc2UgewotCQlCVUdfT04oZ2V0dGltZW9mZGF5KCZ0dl9zdGFydCwgTlVMTCkpOwotCX0KLQotCXJvdXRpbmVzW2ldLmZuKGRzdCwgc3JjLCBsZW5ndGgpOwotCi0JaWYgKHVzZV9jbG9jaykgewotCQljbG9ja19lbmQgPSBnZXRfY2xvY2soKTsKLQkJY2xvY2tfZGlmZiA9IGNsb2NrX2VuZCAtIGNsb2NrX3N0YXJ0OwotCX0gZWxzZSB7Ci0JCUJVR19PTihnZXR0aW1lb2ZkYXkoJnR2X2VuZCwgTlVMTCkpOwotCQl0aW1lcnN1YigmdHZfZW5kLCAmdHZfc3RhcnQsICZ0dl9kaWZmKTsKLQkJYnBzID0gKGRvdWJsZSkoKGRvdWJsZSlsZW5ndGggLyB0aW1ldmFsMmRvdWJsZSgmdHZfZGlmZikpOworCQlpZiAodXNlX2Nsb2NrKSB7CisJCQlyZXN1bHRfY2xvY2tbcGZdID0KKwkJCQlkb19tZW1jcHlfY2xvY2socm91dGluZXNbaV0uZm4sCisJCQkJCQlsZW4sIG9ubHlfcHJlZmF1bHQpOworCQl9IGVsc2UgeworCQkJcmVzdWx0X2Jwc1twZl0gPQorCQkJCWRvX21lbWNweV9nZXR0aW1lb2ZkYXkocm91dGluZXNbaV0uZm4sCisJCQkJCQlsZW4sIG9ubHlfcHJlZmF1bHQpOworCQl9CiAJfQogCiAJc3dpdGNoIChiZW5jaF9mb3JtYXQpIHsKIAljYXNlIEJFTkNIX0ZPUk1BVF9ERUZBVUxUOgotCQlpZiAodXNlX2Nsb2NrKSB7Ci0JCQlwcmludGYoIiAlMTRsZiBDbG9jay9CeXRlXG4iLAotCQkJICAgICAgIChkb3VibGUpY2xvY2tfZGlmZiAvIChkb3VibGUpbGVuZ3RoKTsKLQkJfSBlbHNlIHsKLQkJCWlmIChicHMgPCBLKQotCQkJCXByaW50ZigiICUxNGxmIEIvU2VjXG4iLCBicHMpOwotCQkJZWxzZSBpZiAoYnBzIDwgSyAqIEspCi0JCQkJcHJpbnRmKCIgJTE0bGZkIEtCL1NlY1xuIiwgYnBzIC8gMTAyNCk7Ci0JCQllbHNlIGlmIChicHMgPCBLICogSyAqIEspCi0JCQkJcHJpbnRmKCIgJTE0bGYgTUIvU2VjXG4iLCBicHMgLyAxMDI0IC8gMTAyNCk7Ci0JCQllbHNlIHsKLQkJCQlwcmludGYoIiAlMTRsZiBHQi9TZWNcbiIsCi0JCQkJICAgICAgIGJwcyAvIDEwMjQgLyAxMDI0IC8gMTAyNCk7CisJCWlmICghb25seV9wcmVmYXVsdCAmJiAhbm9fcHJlZmF1bHQpIHsKKwkJCWlmICh1c2VfY2xvY2spIHsKKwkJCQlwcmludGYoIiAlMTRsZiBDbG9jay9CeXRlXG4iLAorCQkJCQkoZG91YmxlKXJlc3VsdF9jbG9ja1swXQorCQkJCQkvIChkb3VibGUpbGVuKTsKKwkJCQlwcmludGYoIiAlMTRsZiBDbG9jay9CeXRlICh3aXRoIHByZWZhdWx0KVxuIiwKKwkJCQkJKGRvdWJsZSlyZXN1bHRfY2xvY2tbMV0KKwkJCQkJLyAoZG91YmxlKWxlbik7CisJCQl9IGVsc2UgeworCQkJCXByaW50X2JwcyhyZXN1bHRfYnBzWzBdKTsKKwkJCQlwcmludGYoIlxuIik7CisJCQkJcHJpbnRfYnBzKHJlc3VsdF9icHNbMV0pOworCQkJCXByaW50ZigiICh3aXRoIHByZWZhdWx0KVxuIik7CiAJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAodXNlX2Nsb2NrKSB7CisJCQkJcHJpbnRmKCIgJTE0bGYgQ2xvY2svQnl0ZSIsCisJCQkJCShkb3VibGUpcmVzdWx0X2Nsb2NrW3BmXQorCQkJCQkvIChkb3VibGUpbGVuKTsKKwkJCX0gZWxzZQorCQkJCXByaW50X2JwcyhyZXN1bHRfYnBzW3BmXSk7CisKKwkJCXByaW50ZigiJXNcbiIsIG9ubHlfcHJlZmF1bHQgPyAiICh3aXRoIHByZWZhdWx0KSIgOiAiIik7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBCRU5DSF9GT1JNQVRfU0lNUExFOgotCQlpZiAodXNlX2Nsb2NrKSB7Ci0JCQlwcmludGYoIiUxNGxmXG4iLAotCQkJICAgICAgIChkb3VibGUpY2xvY2tfZGlmZiAvIChkb3VibGUpbGVuZ3RoKTsKLQkJfSBlbHNlCi0JCQlwcmludGYoIiVsZlxuIiwgYnBzKTsKKwkJaWYgKCFvbmx5X3ByZWZhdWx0ICYmICFub19wcmVmYXVsdCkgeworCQkJaWYgKHVzZV9jbG9jaykgeworCQkJCXByaW50ZigiJWxmICVsZlxuIiwKKwkJCQkJKGRvdWJsZSlyZXN1bHRfY2xvY2tbMF0gLyAoZG91YmxlKWxlbiwKKwkJCQkJKGRvdWJsZSlyZXN1bHRfY2xvY2tbMV0gLyAoZG91YmxlKWxlbik7CisJCQl9IGVsc2UgeworCQkJCXByaW50ZigiJWxmICVsZlxuIiwKKwkJCQkJcmVzdWx0X2Jwc1swXSwgcmVzdWx0X2Jwc1sxXSk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAodXNlX2Nsb2NrKSB7CisJCQkJcHJpbnRmKCIlbGZcbiIsIChkb3VibGUpcmVzdWx0X2Nsb2NrW3BmXQorCQkJCQkvIChkb3VibGUpbGVuKTsKKwkJCX0gZWxzZQorCQkJCXByaW50ZigiJWxmXG4iLCByZXN1bHRfYnBzW3BmXSk7CisJCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJLyogcmVhY2hpbmcgdGhpcyBtZWFucyB0aGVyZSdzIHNvbWUgZGlzYXN0ZXI6ICovCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tYW5ub3RhdGUuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1hbm5vdGF0ZS5jCmluZGV4IDZkNTYwNGQ4ZC4uYzA1NmNkYyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLWFubm90YXRlLmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLWFubm90YXRlLmMKQEAgLTU4LDEyICs1OCwxMiBAQAogCXJldHVybiBoaXN0X2VudHJ5X19pbmNfYWRkcl9zYW1wbGVzKGhlLCBhbC0+YWRkcik7CiB9CiAKLXN0YXRpYyBpbnQgcHJvY2Vzc19zYW1wbGVfZXZlbnQoZXZlbnRfdCAqZXZlbnQsIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pCitzdGF0aWMgaW50IHByb2Nlc3Nfc2FtcGxlX2V2ZW50KGV2ZW50X3QgKmV2ZW50LCBzdHJ1Y3Qgc2FtcGxlX2RhdGEgKnNhbXBsZSwKKwkJCQlzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQogewogCXN0cnVjdCBhZGRyX2xvY2F0aW9uIGFsOwotCXN0cnVjdCBzYW1wbGVfZGF0YSBkYXRhOwogCi0JaWYgKGV2ZW50X19wcmVwcm9jZXNzX3NhbXBsZShldmVudCwgc2Vzc2lvbiwgJmFsLCAmZGF0YSwgTlVMTCkgPCAwKSB7CisJaWYgKGV2ZW50X19wcmVwcm9jZXNzX3NhbXBsZShldmVudCwgc2Vzc2lvbiwgJmFsLCBzYW1wbGUsIE5VTEwpIDwgMCkgewogCQlwcl93YXJuaW5nKCJwcm9ibGVtIHByb2Nlc3NpbmcgJWQgZXZlbnQsIHNraXBwaW5nIGl0LlxuIiwKIAkJCSAgIGV2ZW50LT5oZWFkZXIudHlwZSk7CiAJCXJldHVybiAtMTsKQEAgLTM3NSw2ICszNzUsOCBAQAogCS5tbWFwCT0gZXZlbnRfX3Byb2Nlc3NfbW1hcCwKIAkuY29tbQk9IGV2ZW50X19wcm9jZXNzX2NvbW0sCiAJLmZvcmsJPSBldmVudF9fcHJvY2Vzc190YXNrLAorCS5vcmRlcmVkX3NhbXBsZXMgPSB0cnVlLAorCS5vcmRlcmluZ19yZXF1aXJlc190aW1lc3RhbXBzID0gdHJ1ZSwKIH07CiAKIHN0YXRpYyBpbnQgX19jbWRfYW5ub3RhdGUodm9pZCkKQEAgLTM4Miw3ICszODQsNyBAQAogCWludCByZXQ7CiAJc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbjsKIAotCXNlc3Npb24gPSBwZXJmX3Nlc3Npb25fX25ldyhpbnB1dF9uYW1lLCBPX1JET05MWSwgZm9yY2UsIGZhbHNlKTsKKwlzZXNzaW9uID0gcGVyZl9zZXNzaW9uX19uZXcoaW5wdXRfbmFtZSwgT19SRE9OTFksIGZvcmNlLCBmYWxzZSwgJmV2ZW50X29wcyk7CiAJaWYgKHNlc3Npb24gPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1idWlsZGlkLWxpc3QuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1idWlsZGlkLWxpc3QuYwppbmRleCBjNDk4MzdkLi41YWYzMmFlIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tYnVpbGRpZC1saXN0LmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLWJ1aWxkaWQtbGlzdC5jCkBAIC0zOCw3ICszOCw4IEBACiB7CiAJc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbjsKIAotCXNlc3Npb24gPSBwZXJmX3Nlc3Npb25fX25ldyhpbnB1dF9uYW1lLCBPX1JET05MWSwgZm9yY2UsIGZhbHNlKTsKKwlzZXNzaW9uID0gcGVyZl9zZXNzaW9uX19uZXcoaW5wdXRfbmFtZSwgT19SRE9OTFksIGZvcmNlLCBmYWxzZSwKKwkJCQkgICAgJmJ1aWxkX2lkX19tYXJrX2Rzb19oaXRfb3BzKTsKIAlpZiAoc2Vzc2lvbiA9PSBOVUxMKQogCQlyZXR1cm4gLTE7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1kaWZmLmMgYi90b29scy9wZXJmL2J1aWx0aW4tZGlmZi5jCmluZGV4IGZjYTFkNDQuLjMxNTNlNDkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1kaWZmLmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLWRpZmYuYwpAQCAtMzAsMTIgKzMwLDEzIEBACiAJcmV0dXJuIC1FTk9NRU07CiB9CiAKLXN0YXRpYyBpbnQgZGlmZl9fcHJvY2Vzc19zYW1wbGVfZXZlbnQoZXZlbnRfdCAqZXZlbnQsIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pCitzdGF0aWMgaW50IGRpZmZfX3Byb2Nlc3Nfc2FtcGxlX2V2ZW50KGV2ZW50X3QgKmV2ZW50LAorCQkJCSAgICAgIHN0cnVjdCBzYW1wbGVfZGF0YSAqc2FtcGxlLAorCQkJCSAgICAgIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pCiB7CiAJc3RydWN0IGFkZHJfbG9jYXRpb24gYWw7Ci0Jc3RydWN0IHNhbXBsZV9kYXRhIGRhdGEgPSB7IC5wZXJpb2QgPSAxLCB9OwogCi0JaWYgKGV2ZW50X19wcmVwcm9jZXNzX3NhbXBsZShldmVudCwgc2Vzc2lvbiwgJmFsLCAmZGF0YSwgTlVMTCkgPCAwKSB7CisJaWYgKGV2ZW50X19wcmVwcm9jZXNzX3NhbXBsZShldmVudCwgc2Vzc2lvbiwgJmFsLCBzYW1wbGUsIE5VTEwpIDwgMCkgewogCQlwcl93YXJuaW5nKCJwcm9ibGVtIHByb2Nlc3NpbmcgJWQgZXZlbnQsIHNraXBwaW5nIGl0LlxuIiwKIAkJCSAgIGV2ZW50LT5oZWFkZXIudHlwZSk7CiAJCXJldHVybiAtMTsKQEAgLTQ0LDEyICs0NSwxMiBAQAogCWlmIChhbC5maWx0ZXJlZCB8fCBhbC5zeW0gPT0gTlVMTCkKIAkJcmV0dXJuIDA7CiAKLQlpZiAoaGlzdHNfX2FkZF9lbnRyeSgmc2Vzc2lvbi0+aGlzdHMsICZhbCwgZGF0YS5wZXJpb2QpKSB7CisJaWYgKGhpc3RzX19hZGRfZW50cnkoJnNlc3Npb24tPmhpc3RzLCAmYWwsIHNhbXBsZS0+cGVyaW9kKSkgewogCQlwcl93YXJuaW5nKCJwcm9ibGVtIGluY3JlbWVudGluZyBzeW1ib2wgcGVyaW9kLCBza2lwcGluZyBldmVudFxuIik7CiAJCXJldHVybiAtMTsKIAl9CiAKLQlzZXNzaW9uLT5oaXN0cy5zdGF0cy50b3RhbF9wZXJpb2QgKz0gZGF0YS5wZXJpb2Q7CisJc2Vzc2lvbi0+aGlzdHMuc3RhdHMudG90YWxfcGVyaW9kICs9IHNhbXBsZS0+cGVyaW9kOwogCXJldHVybiAwOwogfQogCkBAIC02MCw2ICs2MSw4IEBACiAJLmV4aXQJPSBldmVudF9fcHJvY2Vzc190YXNrLAogCS5mb3JrCT0gZXZlbnRfX3Byb2Nlc3NfdGFzaywKIAkubG9zdAk9IGV2ZW50X19wcm9jZXNzX2xvc3QsCisJLm9yZGVyZWRfc2FtcGxlcyA9IHRydWUsCisJLm9yZGVyaW5nX3JlcXVpcmVzX3RpbWVzdGFtcHMgPSB0cnVlLAogfTsKIAogc3RhdGljIHZvaWQgcGVyZl9zZXNzaW9uX19pbnNlcnRfaGlzdF9lbnRyeV9ieV9uYW1lKHN0cnVjdCByYl9yb290ICpyb290LApAQCAtMTQxLDggKzE0NCw4IEBACiAJaW50IHJldCwgaTsKIAlzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uWzJdOwogCi0Jc2Vzc2lvblswXSA9IHBlcmZfc2Vzc2lvbl9fbmV3KGlucHV0X29sZCwgT19SRE9OTFksIGZvcmNlLCBmYWxzZSk7Ci0Jc2Vzc2lvblsxXSA9IHBlcmZfc2Vzc2lvbl9fbmV3KGlucHV0X25ldywgT19SRE9OTFksIGZvcmNlLCBmYWxzZSk7CisJc2Vzc2lvblswXSA9IHBlcmZfc2Vzc2lvbl9fbmV3KGlucHV0X29sZCwgT19SRE9OTFksIGZvcmNlLCBmYWxzZSwgJmV2ZW50X29wcyk7CisJc2Vzc2lvblsxXSA9IHBlcmZfc2Vzc2lvbl9fbmV3KGlucHV0X25ldywgT19SRE9OTFksIGZvcmNlLCBmYWxzZSwgJmV2ZW50X29wcyk7CiAJaWYgKHNlc3Npb25bMF0gPT0gTlVMTCB8fCBzZXNzaW9uWzFdID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC0xNzMsNyArMTc2LDcgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKIAlPUFRfSU5DUigndicsICJ2ZXJib3NlIiwgJnZlcmJvc2UsCiAJCSAgICAiYmUgbW9yZSB2ZXJib3NlIChzaG93IHN5bWJvbCBhZGRyZXNzLCBldGMpIiksCi0JT1BUX0JPT0xFQU4oJ20nLCAiZGlzcGxhY2VtZW50IiwgJnNob3dfZGlzcGxhY2VtZW50LAorCU9QVF9CT09MRUFOKCdNJywgImRpc3BsYWNlbWVudCIsICZzaG93X2Rpc3BsYWNlbWVudCwKIAkJICAgICJTaG93IHBvc2l0aW9uIGRpc3BsYWNlbWVudCByZWxhdGl2ZSB0byBiYXNlbGluZSIpLAogCU9QVF9CT09MRUFOKCdEJywgImR1bXAtcmF3LXRyYWNlIiwgJmR1bXBfdHJhY2UsCiAJCSAgICAiZHVtcCByYXcgdHJhY2UgaW4gQVNDSUkiKSwKQEAgLTE5MSw2ICsxOTQsOCBAQAogCU9QVF9TVFJJTkcoJ3QnLCAiZmllbGQtc2VwYXJhdG9yIiwgJnN5bWJvbF9jb25mLmZpZWxkX3NlcCwgInNlcGFyYXRvciIsCiAJCSAgICJzZXBhcmF0b3IgZm9yIGNvbHVtbnMsIG5vIHNwYWNlcyB3aWxsIGJlIGFkZGVkIGJldHdlZW4gIgogCQkgICAiY29sdW1ucyAnLicgaXMgcmVzZXJ2ZWQuIiksCisJT1BUX1NUUklORygwLCAic3ltZnMiLCAmc3ltYm9sX2NvbmYuc3ltZnMsICJkaXJlY3RvcnkiLAorCQkgICAgIkxvb2sgZm9yIGZpbGVzIHdpdGggc3ltYm9scyByZWxhdGl2ZSB0byB0aGlzIGRpcmVjdG9yeSIpLAogCU9QVF9FTkQoKQogfTsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLWluamVjdC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLWluamVjdC5jCmluZGV4IDhlM2U0N2IuLjBjNzhmZmEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1pbmplY3QuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4taW5qZWN0LmMKQEAgLTE2LDggKzE2LDggQEAKIHN0YXRpYyBjaGFyCQljb25zdCAqaW5wdXRfbmFtZSA9ICItIjsKIHN0YXRpYyBib29sCQlpbmplY3RfYnVpbGRfaWRzOwogCi1zdGF0aWMgaW50IGV2ZW50X19yZXBpcGUoZXZlbnRfdCAqZXZlbnQgX191c2VkLAotCQkJIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24gX191c2VkKQorc3RhdGljIGludCBldmVudF9fcmVwaXBlX3N5bnRoKGV2ZW50X3QgKmV2ZW50LAorCQkJICAgICAgIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24gX191c2VkKQogewogCXVpbnQzMl90IHNpemU7CiAJdm9pZCAqYnVmID0gZXZlbnQ7CkBAIC0zNiwyMiArMzYsMzAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBldmVudF9fcmVwaXBlX21tYXAoZXZlbnRfdCAqc2VsZiwgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbikKK3N0YXRpYyBpbnQgZXZlbnRfX3JlcGlwZShldmVudF90ICpldmVudCwgc3RydWN0IHNhbXBsZV9kYXRhICpzYW1wbGUgX191c2VkLAorCQkJIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pCit7CisJcmV0dXJuIGV2ZW50X19yZXBpcGVfc3ludGgoZXZlbnQsIHNlc3Npb24pOworfQorCitzdGF0aWMgaW50IGV2ZW50X19yZXBpcGVfbW1hcChldmVudF90ICpzZWxmLCBzdHJ1Y3Qgc2FtcGxlX2RhdGEgKnNhbXBsZSwKKwkJCSAgICAgIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pCiB7CiAJaW50IGVycjsKIAotCWVyciA9IGV2ZW50X19wcm9jZXNzX21tYXAoc2VsZiwgc2Vzc2lvbik7Ci0JZXZlbnRfX3JlcGlwZShzZWxmLCBzZXNzaW9uKTsKKwllcnIgPSBldmVudF9fcHJvY2Vzc19tbWFwKHNlbGYsIHNhbXBsZSwgc2Vzc2lvbik7CisJZXZlbnRfX3JlcGlwZShzZWxmLCBzYW1wbGUsIHNlc3Npb24pOwogCiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBldmVudF9fcmVwaXBlX3Rhc2soZXZlbnRfdCAqc2VsZiwgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbikKK3N0YXRpYyBpbnQgZXZlbnRfX3JlcGlwZV90YXNrKGV2ZW50X3QgKnNlbGYsIHN0cnVjdCBzYW1wbGVfZGF0YSAqc2FtcGxlLAorCQkJICAgICAgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbikKIHsKIAlpbnQgZXJyOwogCi0JZXJyID0gZXZlbnRfX3Byb2Nlc3NfdGFzayhzZWxmLCBzZXNzaW9uKTsKLQlldmVudF9fcmVwaXBlKHNlbGYsIHNlc3Npb24pOworCWVyciA9IGV2ZW50X19wcm9jZXNzX3Rhc2soc2VsZiwgc2FtcGxlLCBzZXNzaW9uKTsKKwlldmVudF9fcmVwaXBlKHNlbGYsIHNhbXBsZSwgc2Vzc2lvbik7CiAKIAlyZXR1cm4gZXJyOwogfQpAQCAtNjEsNyArNjksNyBAQAogewogCWludCBlcnI7CiAKLQlldmVudF9fcmVwaXBlKHNlbGYsIHNlc3Npb24pOworCWV2ZW50X19yZXBpcGVfc3ludGgoc2VsZiwgc2Vzc2lvbik7CiAJZXJyID0gZXZlbnRfX3Byb2Nlc3NfdHJhY2luZ19kYXRhKHNlbGYsIHNlc3Npb24pOwogCiAJcmV0dXJuIGVycjsKQEAgLTExMSw3ICsxMTksOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGV2ZW50X19pbmplY3RfYnVpbGRpZChldmVudF90ICpldmVudCwgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbikKK3N0YXRpYyBpbnQgZXZlbnRfX2luamVjdF9idWlsZGlkKGV2ZW50X3QgKmV2ZW50LCBzdHJ1Y3Qgc2FtcGxlX2RhdGEgKnNhbXBsZSwKKwkJCQkgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbikKIHsKIAlzdHJ1Y3QgYWRkcl9sb2NhdGlvbiBhbDsKIAlzdHJ1Y3QgdGhyZWFkICp0aHJlYWQ7CkBAIC0xNDYsNyArMTU1LDcgQEAKIAl9CiAKIHJlcGlwZToKLQlldmVudF9fcmVwaXBlKGV2ZW50LCBzZXNzaW9uKTsKKwlldmVudF9fcmVwaXBlKGV2ZW50LCBzYW1wbGUsIHNlc3Npb24pOwogCXJldHVybiAwOwogfQogCkBAIC0xNjAsMTAgKzE2OSwxMCBAQAogCS5yZWFkCQk9IGV2ZW50X19yZXBpcGUsCiAJLnRocm90dGxlCT0gZXZlbnRfX3JlcGlwZSwKIAkudW50aHJvdHRsZQk9IGV2ZW50X19yZXBpcGUsCi0JLmF0dHIJCT0gZXZlbnRfX3JlcGlwZSwKLQkuZXZlbnRfdHlwZSAJPSBldmVudF9fcmVwaXBlLAotCS50cmFjaW5nX2RhdGEgCT0gZXZlbnRfX3JlcGlwZSwKLQkuYnVpbGRfaWQgCT0gZXZlbnRfX3JlcGlwZSwKKwkuYXR0cgkJPSBldmVudF9fcmVwaXBlX3N5bnRoLAorCS5ldmVudF90eXBlIAk9IGV2ZW50X19yZXBpcGVfc3ludGgsCisJLnRyYWNpbmdfZGF0YSAJPSBldmVudF9fcmVwaXBlX3N5bnRoLAorCS5idWlsZF9pZCAJPSBldmVudF9fcmVwaXBlX3N5bnRoLAogfTsKIAogZXh0ZXJuIHZvbGF0aWxlIGludCBzZXNzaW9uX2RvbmU7CkBAIC0xODcsNyArMTk2LDcgQEAKIAkJaW5qZWN0X29wcy50cmFjaW5nX2RhdGEJPSBldmVudF9fcmVwaXBlX3RyYWNpbmdfZGF0YTsKIAl9CiAKLQlzZXNzaW9uID0gcGVyZl9zZXNzaW9uX19uZXcoaW5wdXRfbmFtZSwgT19SRE9OTFksIGZhbHNlLCB0cnVlKTsKKwlzZXNzaW9uID0gcGVyZl9zZXNzaW9uX19uZXcoaW5wdXRfbmFtZSwgT19SRE9OTFksIGZhbHNlLCB0cnVlLCAmaW5qZWN0X29wcyk7CiAJaWYgKHNlc3Npb24gPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1rbWVtLmMgYi90b29scy9wZXJmL2J1aWx0aW4ta21lbS5jCmluZGV4IDMxZjYwYTIuLmRlZjdkZGMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1rbWVtLmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLWttZW0uYwpAQCAtMzA0LDIyICszMDQsMTEgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgcHJvY2Vzc19zYW1wbGVfZXZlbnQoZXZlbnRfdCAqZXZlbnQsIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pCitzdGF0aWMgaW50IHByb2Nlc3Nfc2FtcGxlX2V2ZW50KGV2ZW50X3QgKmV2ZW50LCBzdHJ1Y3Qgc2FtcGxlX2RhdGEgKnNhbXBsZSwKKwkJCQlzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQogewotCXN0cnVjdCBzYW1wbGVfZGF0YSBkYXRhOwotCXN0cnVjdCB0aHJlYWQgKnRocmVhZDsKKwlzdHJ1Y3QgdGhyZWFkICp0aHJlYWQgPSBwZXJmX3Nlc3Npb25fX2ZpbmRuZXcoc2Vzc2lvbiwgZXZlbnQtPmlwLnBpZCk7CiAKLQltZW1zZXQoJmRhdGEsIDAsIHNpemVvZihkYXRhKSk7Ci0JZGF0YS50aW1lID0gLTE7Ci0JZGF0YS5jcHUgPSAtMTsKLQlkYXRhLnBlcmlvZCA9IDE7Ci0KLQlldmVudF9fcGFyc2Vfc2FtcGxlKGV2ZW50LCBzZXNzaW9uLT5zYW1wbGVfdHlwZSwgJmRhdGEpOwotCi0JZHVtcF9wcmludGYoIihJUCwgJWQpOiAlZC8lZDogJSNMeCBwZXJpb2Q6ICVMZFxuIiwgZXZlbnQtPmhlYWRlci5taXNjLAotCQkgICAgZGF0YS5waWQsIGRhdGEudGlkLCBkYXRhLmlwLCBkYXRhLnBlcmlvZCk7Ci0KLQl0aHJlYWQgPSBwZXJmX3Nlc3Npb25fX2ZpbmRuZXcoc2Vzc2lvbiwgZXZlbnQtPmlwLnBpZCk7CiAJaWYgKHRocmVhZCA9PSBOVUxMKSB7CiAJCXByX2RlYnVnKCJwcm9ibGVtIHByb2Nlc3NpbmcgJWQgZXZlbnQsIHNraXBwaW5nIGl0LlxuIiwKIAkJCSBldmVudC0+aGVhZGVyLnR5cGUpOwpAQCAtMzI4LDggKzMxNyw4IEBACiAKIAlkdW1wX3ByaW50ZigiIC4uLiB0aHJlYWQ6ICVzOiVkXG4iLCB0aHJlYWQtPmNvbW0sIHRocmVhZC0+cGlkKTsKIAotCXByb2Nlc3NfcmF3X2V2ZW50KGV2ZW50LCBkYXRhLnJhd19kYXRhLCBkYXRhLmNwdSwKLQkJCSAgZGF0YS50aW1lLCB0aHJlYWQpOworCXByb2Nlc3NfcmF3X2V2ZW50KGV2ZW50LCBzYW1wbGUtPnJhd19kYXRhLCBzYW1wbGUtPmNwdSwKKwkJCSAgc2FtcGxlLT50aW1lLCB0aHJlYWQpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00OTIsNyArNDgxLDggQEAKIHN0YXRpYyBpbnQgX19jbWRfa21lbSh2b2lkKQogewogCWludCBlcnIgPSAtRUlOVkFMOwotCXN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24gPSBwZXJmX3Nlc3Npb25fX25ldyhpbnB1dF9uYW1lLCBPX1JET05MWSwgMCwgZmFsc2UpOworCXN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24gPSBwZXJmX3Nlc3Npb25fX25ldyhpbnB1dF9uYW1lLCBPX1JET05MWSwKKwkJCQkJCQkgMCwgZmFsc2UsICZldmVudF9vcHMpOwogCWlmIChzZXNzaW9uID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC03NDcsNiArNzM3LDkgQEAKIAlyZWNfYXJnYyA9IEFSUkFZX1NJWkUocmVjb3JkX2FyZ3MpICsgYXJnYyAtIDE7CiAJcmVjX2FyZ3YgPSBjYWxsb2MocmVjX2FyZ2MgKyAxLCBzaXplb2YoY2hhciAqKSk7CiAKKwlpZiAocmVjX2FyZ3YgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyZWNvcmRfYXJncyk7IGkrKykKIAkJcmVjX2FyZ3ZbaV0gPSBzdHJkdXAocmVjb3JkX2FyZ3NbaV0pOwogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tbG9jay5jIGIvdG9vbHMvcGVyZi9idWlsdGluLWxvY2suYwppbmRleCA4MjFjMTU4Li5iOWM2ZTU0IDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tbG9jay5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1sb2NrLmMKQEAgLTgzNCwyMiArODM0LDE4IEBACiAJCWRpZSgiVW5rbm93biB0eXBlIG9mIGluZm9ybWF0aW9uXG4iKTsKIH0KIAotc3RhdGljIGludCBwcm9jZXNzX3NhbXBsZV9ldmVudChldmVudF90ICpzZWxmLCBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzKQorc3RhdGljIGludCBwcm9jZXNzX3NhbXBsZV9ldmVudChldmVudF90ICpzZWxmLCBzdHJ1Y3Qgc2FtcGxlX2RhdGEgKnNhbXBsZSwKKwkJCQlzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzKQogewotCXN0cnVjdCBzYW1wbGVfZGF0YSBkYXRhOwotCXN0cnVjdCB0aHJlYWQgKnRocmVhZDsKKwlzdHJ1Y3QgdGhyZWFkICp0aHJlYWQgPSBwZXJmX3Nlc3Npb25fX2ZpbmRuZXcocywgc2FtcGxlLT50aWQpOwogCi0JYnplcm8oJmRhdGEsIHNpemVvZihkYXRhKSk7Ci0JZXZlbnRfX3BhcnNlX3NhbXBsZShzZWxmLCBzLT5zYW1wbGVfdHlwZSwgJmRhdGEpOwotCi0JdGhyZWFkID0gcGVyZl9zZXNzaW9uX19maW5kbmV3KHMsIGRhdGEudGlkKTsKIAlpZiAodGhyZWFkID09IE5VTEwpIHsKIAkJcHJfZGVidWcoInByb2JsZW0gcHJvY2Vzc2luZyAlZCBldmVudCwgc2tpcHBpbmcgaXQuXG4iLAogCQkJc2VsZi0+aGVhZGVyLnR5cGUpOwogCQlyZXR1cm4gLTE7CiAJfQogCi0JcHJvY2Vzc19yYXdfZXZlbnQoZGF0YS5yYXdfZGF0YSwgZGF0YS5jcHUsIGRhdGEudGltZSwgdGhyZWFkKTsKKwlwcm9jZXNzX3Jhd19ldmVudChzYW1wbGUtPnJhd19kYXRhLCBzYW1wbGUtPmNwdSwgc2FtcGxlLT50aW1lLCB0aHJlYWQpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC04NjIsNyArODU4LDcgQEAKIAogc3RhdGljIGludCByZWFkX2V2ZW50cyh2b2lkKQogewotCXNlc3Npb24gPSBwZXJmX3Nlc3Npb25fX25ldyhpbnB1dF9uYW1lLCBPX1JET05MWSwgMCwgZmFsc2UpOworCXNlc3Npb24gPSBwZXJmX3Nlc3Npb25fX25ldyhpbnB1dF9uYW1lLCBPX1JET05MWSwgMCwgZmFsc2UsICZlb3BzKTsKIAlpZiAoIXNlc3Npb24pCiAJCWRpZSgiSW5pdGlhbGl6aW5nIHBlcmYgc2Vzc2lvbiBmYWlsZWRcbiIpOwogCkBAIC05NDcsNiArOTQzLDkgQEAKIAlyZWNfYXJnYyA9IEFSUkFZX1NJWkUocmVjb3JkX2FyZ3MpICsgYXJnYyAtIDE7CiAJcmVjX2FyZ3YgPSBjYWxsb2MocmVjX2FyZ2MgKyAxLCBzaXplb2YoY2hhciAqKSk7CiAKKwlpZiAocmVjX2FyZ3YgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyZWNvcmRfYXJncyk7IGkrKykKIAkJcmVjX2FyZ3ZbaV0gPSBzdHJkdXAocmVjb3JkX2FyZ3NbaV0pOwogCkBAIC05ODIsOSArOTgxLDkgQEAKIAkJCQl1c2FnZV93aXRoX29wdGlvbnMocmVwb3J0X3VzYWdlLCByZXBvcnRfb3B0aW9ucyk7CiAJCX0KIAkJX19jbWRfcmVwb3J0KCk7Ci0JfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMF0sICJ0cmFjZSIpKSB7Ci0JCS8qIEFsaWFzZWQgdG8gJ3BlcmYgdHJhY2UnICovCi0JCXJldHVybiBjbWRfdHJhY2UoYXJnYywgYXJndiwgcHJlZml4KTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlswXSwgInNjcmlwdCIpKSB7CisJCS8qIEFsaWFzZWQgdG8gJ3BlcmYgc2NyaXB0JyAqLworCQlyZXR1cm4gY21kX3NjcmlwdChhcmdjLCBhcmd2LCBwcmVmaXgpOwogCX0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzBdLCAiaW5mbyIpKSB7CiAJCWlmIChhcmdjKSB7CiAJCQlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXJlY29yZC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXJlY29yZC5jCmluZGV4IDU2NDQ5MWYuLjdiYzA0OTAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZWNvcmQuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tcmVjb3JkLmMKQEAgLTE4LDYgKzE4LDcgQEAKIAogI2luY2x1ZGUgInV0aWwvaGVhZGVyLmgiCiAjaW5jbHVkZSAidXRpbC9ldmVudC5oIgorI2luY2x1ZGUgInV0aWwvZXZzZWwuaCIKICNpbmNsdWRlICJ1dGlsL2RlYnVnLmgiCiAjaW5jbHVkZSAidXRpbC9zZXNzaW9uLmgiCiAjaW5jbHVkZSAidXRpbC9zeW1ib2wuaCIKQEAgLTI3LDE3ICsyOCwxOCBAQAogI2luY2x1ZGUgPHNjaGVkLmg+CiAjaW5jbHVkZSA8c3lzL21tYW4uaD4KIAorI2RlZmluZSBGRChlLCB4LCB5KSAoKihpbnQgKil4eWFycmF5X19lbnRyeShlLT5mZCwgeCwgeSkpCisKIGVudW0gd3JpdGVfbW9kZV90IHsKIAlXUklURV9GT1JDRSwKIAlXUklURV9BUFBFTkQKIH07CiAKLXN0YXRpYyBpbnQJCQkqZmRbTUFYX05SX0NQVVNdW01BWF9DT1VOVEVSU107Ci0KIHN0YXRpYyB1NjQJCQl1c2VyX2ludGVydmFsCQkJPSBVTExPTkdfTUFYOwogc3RhdGljIHU2NAkJCWRlZmF1bHRfaW50ZXJ2YWwJCT0gICAgICAwOworc3RhdGljIHU2NAkJCXNhbXBsZV90eXBlOwogCi1zdGF0aWMgaW50CQkJbnJfY3B1cwkJCQk9ICAgICAgMDsKK3N0YXRpYyBzdHJ1Y3QgY3B1X21hcAkJKmNwdXM7CiBzdGF0aWMgdW5zaWduZWQgaW50CQlwYWdlX3NpemU7CiBzdGF0aWMgdW5zaWduZWQgaW50CQltbWFwX3BhZ2VzCQkJPSAgICAxMjg7CiBzdGF0aWMgdW5zaWduZWQgaW50CQl1c2VyX2ZyZXEgCQkJPSBVSU5UX01BWDsKQEAgLTQ4LDExICs1MCwxMSBAQAogc3RhdGljIGludAkJCWdyb3VwCQkJCT0gICAgICAwOwogc3RhdGljIGludAkJCXJlYWx0aW1lX3ByaW8JCQk9ICAgICAgMDsKIHN0YXRpYyBib29sCQkJcmF3X3NhbXBsZXMJCQk9ICBmYWxzZTsKK3N0YXRpYyBib29sCQkJc2FtcGxlX2lkX2FsbF9hdmFpbAkJPSAgIHRydWU7CiBzdGF0aWMgYm9vbAkJCXN5c3RlbV93aWRlCQkJPSAgZmFsc2U7CiBzdGF0aWMgcGlkX3QJCQl0YXJnZXRfcGlkCQkJPSAgICAgLTE7CiBzdGF0aWMgcGlkX3QJCQl0YXJnZXRfdGlkCQkJPSAgICAgLTE7Ci1zdGF0aWMgcGlkX3QJCQkqYWxsX3RpZHMJCQk9ICAgICAgTlVMTDsKLXN0YXRpYyBpbnQJCQl0aHJlYWRfbnVtCQkJPSAgICAgIDA7CitzdGF0aWMgc3RydWN0IHRocmVhZF9tYXAJKnRocmVhZHM7CiBzdGF0aWMgcGlkX3QJCQljaGlsZF9waWQJCQk9ICAgICAtMTsKIHN0YXRpYyBib29sCQkJbm9faW5oZXJpdAkJCT0gIGZhbHNlOwogc3RhdGljIGVudW0gd3JpdGVfbW9kZV90CXdyaXRlX21vZGUJCQk9IFdSSVRFX0ZPUkNFOwpAQCAtNjAsNyArNjIsOSBAQAogc3RhdGljIGJvb2wJCQlpbmhlcml0X3N0YXQJCQk9ICBmYWxzZTsKIHN0YXRpYyBib29sCQkJbm9fc2FtcGxlcwkJCT0gIGZhbHNlOwogc3RhdGljIGJvb2wJCQlzYW1wbGVfYWRkcmVzcwkJCT0gIGZhbHNlOworc3RhdGljIGJvb2wJCQlzYW1wbGVfdGltZQkJCT0gIGZhbHNlOwogc3RhdGljIGJvb2wJCQlub19idWlsZGlkCQkJPSAgZmFsc2U7CitzdGF0aWMgYm9vbAkJCW5vX2J1aWxkaWRfY2FjaGUJCT0gIGZhbHNlOwogCiBzdGF0aWMgbG9uZwkJCXNhbXBsZXMJCQkJPSAgICAgIDA7CiBzdGF0aWMgdTY0CQkJYnl0ZXNfd3JpdHRlbgkJCT0gICAgICAwOwpAQCAtNzcsNyArODEsNiBAQAogc3RhdGljIGNvbnN0IGNoYXIJCSpjcHVfbGlzdDsKIAogc3RydWN0IG1tYXBfZGF0YSB7Ci0JaW50CQkJY291bnRlcjsKIAl2b2lkCQkJKmJhc2U7CiAJdW5zaWduZWQgaW50CQltYXNrOwogCXVuc2lnbmVkIGludAkJcHJldjsKQEAgLTEyOCw2ICsxMzEsNyBAQAogfQogCiBzdGF0aWMgaW50IHByb2Nlc3Nfc3ludGhlc2l6ZWRfZXZlbnQoZXZlbnRfdCAqZXZlbnQsCisJCQkJICAgICBzdHJ1Y3Qgc2FtcGxlX2RhdGEgKnNhbXBsZSBfX3VzZWQsCiAJCQkJICAgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmIF9fdXNlZCkKIHsKIAl3cml0ZV9vdXRwdXQoZXZlbnQsIGV2ZW50LT5oZWFkZXIuc2l6ZSk7CkBAIC0yMjQsMTIgKzIyOCwxMiBAQAogCXJldHVybiBoX2F0dHI7CiB9CiAKLXN0YXRpYyB2b2lkIGNyZWF0ZV9jb3VudGVyKGludCBjb3VudGVyLCBpbnQgY3B1KQorc3RhdGljIHZvaWQgY3JlYXRlX2NvdW50ZXIoc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsLCBpbnQgY3B1KQogewotCWNoYXIgKmZpbHRlciA9IGZpbHRlcnNbY291bnRlcl07Ci0Jc3RydWN0IHBlcmZfZXZlbnRfYXR0ciAqYXR0ciA9IGF0dHJzICsgY291bnRlcjsKKwljaGFyICpmaWx0ZXIgPSBldnNlbC0+ZmlsdGVyOworCXN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKmF0dHIgPSAmZXZzZWwtPmF0dHI7CiAJc3RydWN0IHBlcmZfaGVhZGVyX2F0dHIgKmhfYXR0cjsKLQlpbnQgdHJhY2sgPSAhY291bnRlcjsgLyogb25seSB0aGUgZmlyc3QgY291bnRlciBuZWVkcyB0aGVzZSAqLworCWludCB0cmFjayA9ICFldnNlbC0+aWR4OyAvKiBvbmx5IHRoZSBmaXJzdCBjb3VudGVyIG5lZWRzIHRoZXNlICovCiAJaW50IHRocmVhZF9pbmRleDsKIAlpbnQgcmV0OwogCXN0cnVjdCB7CkBAIC0yMzgsNiArMjQyLDE5IEBACiAJCXU2NCB0aW1lX3J1bm5pbmc7CiAJCXU2NCBpZDsKIAl9IHJlYWRfZGF0YTsKKwkvKgorIAkgKiBDaGVjayBpZiBwYXJzZV9zaW5nbGVfdHJhY2Vwb2ludF9ldmVudCBoYXMgYWxyZWFkeSBhc2tlZCBmb3IKKyAJICogUEVSRl9TQU1QTEVfVElNRS4KKyAJICoKKwkgKiBYWFggdGhpcyBpcyBrbHVkZ3kgYnV0IHNob3J0IHRlcm0gZml4IGZvciBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5CisJICogZWFjMjNkMWMgdGhhdCBicm9rZSAncGVyZiBzY3JpcHQnIGJ5IGhhdmluZyBkaWZmZXJlbnQgc2FtcGxlX3R5cGVzCisJICogd2hlbiB1c2luZyBtdWx0aXBsZSB0cmFjZXBvaW50IGV2ZW50cyB3aGVuIHdlIHVzZSBhIHBlcmYgYmluYXJ5CisJICogdGhhdCB0cmllcyB0byB1c2Ugc2FtcGxlX2lkX2FsbCBvbiBhbiBvbGRlciBrZXJuZWwuCisgCSAqCisgCSAqIFdlIG5lZWQgdG8gbW92ZSBjb3VudGVyIGNyZWF0aW9uIHRvIHBlcmZfc2Vzc2lvbiwgc3VwcG9ydAorIAkgKiBkaWZmZXJlbnQgc2FtcGxlX3R5cGVzLCBldGMuCisgCSAqLworCWJvb2wgdGltZV9uZWVkZWQgPSBhdHRyLT5zYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1RJTUU7CiAKIAlhdHRyLT5yZWFkX2Zvcm1hdAk9IFBFUkZfRk9STUFUX1RPVEFMX1RJTUVfRU5BQkxFRCB8CiAJCQkJICBQRVJGX0ZPUk1BVF9UT1RBTF9USU1FX1JVTk5JTkcgfApAQCAtMjgwLDYgKzI5NywxMCBAQAogCWlmIChzeXN0ZW1fd2lkZSkKIAkJYXR0ci0+c2FtcGxlX3R5cGUJfD0gUEVSRl9TQU1QTEVfQ1BVOwogCisJaWYgKHNhbXBsZV9pZF9hbGxfYXZhaWwgJiYKKwkgICAgKHNhbXBsZV90aW1lIHx8IHN5c3RlbV93aWRlIHx8ICFub19pbmhlcml0IHx8IGNwdV9saXN0KSkKKwkJYXR0ci0+c2FtcGxlX3R5cGUJfD0gUEVSRl9TQU1QTEVfVElNRTsKKwogCWlmIChyYXdfc2FtcGxlcykgewogCQlhdHRyLT5zYW1wbGVfdHlwZQl8PSBQRVJGX1NBTVBMRV9USU1FOwogCQlhdHRyLT5zYW1wbGVfdHlwZQl8PSBQRVJGX1NBTVBMRV9SQVc7CkBAIC0yOTMsMTMgKzMxNCwxNCBAQAogCQlhdHRyLT5kaXNhYmxlZCA9IDE7CiAJCWF0dHItPmVuYWJsZV9vbl9leGVjID0gMTsKIAl9CityZXRyeV9zYW1wbGVfaWQ6CisJYXR0ci0+c2FtcGxlX2lkX2FsbCA9IHNhbXBsZV9pZF9hbGxfYXZhaWwgPyAxIDogMDsKIAotCWZvciAodGhyZWFkX2luZGV4ID0gMDsgdGhyZWFkX2luZGV4IDwgdGhyZWFkX251bTsgdGhyZWFkX2luZGV4KyspIHsKKwlmb3IgKHRocmVhZF9pbmRleCA9IDA7IHRocmVhZF9pbmRleCA8IHRocmVhZHMtPm5yOyB0aHJlYWRfaW5kZXgrKykgewogdHJ5X2FnYWluOgotCQlmZFtucl9jcHVdW2NvdW50ZXJdW3RocmVhZF9pbmRleF0gPSBzeXNfcGVyZl9ldmVudF9vcGVuKGF0dHIsCi0JCQkJYWxsX3RpZHNbdGhyZWFkX2luZGV4XSwgY3B1LCBncm91cF9mZCwgMCk7CisJCUZEKGV2c2VsLCBucl9jcHUsIHRocmVhZF9pbmRleCkgPSBzeXNfcGVyZl9ldmVudF9vcGVuKGF0dHIsIHRocmVhZHMtPm1hcFt0aHJlYWRfaW5kZXhdLCBjcHUsIGdyb3VwX2ZkLCAwKTsKIAotCQlpZiAoZmRbbnJfY3B1XVtjb3VudGVyXVt0aHJlYWRfaW5kZXhdIDwgMCkgeworCQlpZiAoRkQoZXZzZWwsIG5yX2NwdSwgdGhyZWFkX2luZGV4KSA8IDApIHsKIAkJCWludCBlcnIgPSBlcnJubzsKIAogCQkJaWYgKGVyciA9PSBFUEVSTSB8fCBlcnIgPT0gRUFDQ0VTKQpAQCAtMzA5LDYgKzMzMSwxNSBAQAogCQkJZWxzZSBpZiAoZXJyID09ICBFTk9ERVYgJiYgY3B1X2xpc3QpIHsKIAkJCQlkaWUoIk5vIHN1Y2ggZGV2aWNlIC0gZGlkIHlvdSBzcGVjaWZ5IgogCQkJCQkiIGFuIG91dC1vZi1yYW5nZSBwcm9maWxlIENQVT9cbiIpOworCQkJfSBlbHNlIGlmIChlcnIgPT0gRUlOVkFMICYmIHNhbXBsZV9pZF9hbGxfYXZhaWwpIHsKKwkJCQkvKgorCQkJCSAqIE9sZCBrZXJuZWwsIG5vIGF0dHItPnNhbXBsZV9pZF90eXBlX2FsbCBmaWVsZAorCQkJCSAqLworCQkJCXNhbXBsZV9pZF9hbGxfYXZhaWwgPSBmYWxzZTsKKwkJCQlpZiAoIXNhbXBsZV90aW1lICYmICFyYXdfc2FtcGxlcyAmJiAhdGltZV9uZWVkZWQpCisJCQkJCWF0dHItPnNhbXBsZV90eXBlICY9IH5QRVJGX1NBTVBMRV9USU1FOworCisJCQkJZ290byByZXRyeV9zYW1wbGVfaWQ7CiAJCQl9CiAKIAkJCS8qCkBAIC0zMjYsOCArMzU3LDggQEAKIAkJCQlnb3RvIHRyeV9hZ2FpbjsKIAkJCX0KIAkJCXByaW50ZigiXG4iKTsKLQkJCWVycm9yKCJwZXJmY291bnRlciBzeXNjYWxsIHJldHVybmVkIHdpdGggJWQgKCVzKVxuIiwKLQkJCQkJZmRbbnJfY3B1XVtjb3VudGVyXVt0aHJlYWRfaW5kZXhdLCBzdHJlcnJvcihlcnIpKTsKKwkJCWVycm9yKCJzeXNfcGVyZl9ldmVudF9vcGVuKCkgc3lzY2FsbCByZXR1cm5lZCB3aXRoICVkICglcykuICAvYmluL2RtZXNnIG1heSBwcm92aWRlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uXG4iLAorCQkJICAgICAgRkQoZXZzZWwsIG5yX2NwdSwgdGhyZWFkX2luZGV4KSwgc3RyZXJyb3IoZXJyKSk7CiAKICNpZiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pCiAJCQlpZiAoYXR0ci0+dHlwZSA9PSBQRVJGX1RZUEVfSEFSRFdBUkUgJiYgZXJyID09IEVPUE5PVFNVUFApCkBAIC0zNDEsNyArMzcyLDcgQEAKIAkJCWV4aXQoLTEpOwogCQl9CiAKLQkJaF9hdHRyID0gZ2V0X2hlYWRlcl9hdHRyKGF0dHIsIGNvdW50ZXIpOworCQloX2F0dHIgPSBnZXRfaGVhZGVyX2F0dHIoYXR0ciwgZXZzZWwtPmlkeCk7CiAJCWlmIChoX2F0dHIgPT0gTlVMTCkKIAkJCWRpZSgibm9tZW1cbiIpOwogCkBAIC0zNTIsNyArMzgzLDcgQEAKIAkJCX0KIAkJfQogCi0JCWlmIChyZWFkKGZkW25yX2NwdV1bY291bnRlcl1bdGhyZWFkX2luZGV4XSwgJnJlYWRfZGF0YSwgc2l6ZW9mKHJlYWRfZGF0YSkpID09IC0xKSB7CisJCWlmIChyZWFkKEZEKGV2c2VsLCBucl9jcHUsIHRocmVhZF9pbmRleCksICZyZWFkX2RhdGEsIHNpemVvZihyZWFkX2RhdGEpKSA9PSAtMSkgewogCQkJcGVycm9yKCJVbmFibGUgdG8gcmVhZCBwZXJmIGZpbGUgZGVzY3JpcHRvciIpOwogCQkJZXhpdCgtMSk7CiAJCX0KQEAgLTM2Miw0MyArMzkzLDQ0IEBACiAJCQlleGl0KC0xKTsKIAkJfQogCi0JCWFzc2VydChmZFtucl9jcHVdW2NvdW50ZXJdW3RocmVhZF9pbmRleF0gPj0gMCk7Ci0JCWZjbnRsKGZkW25yX2NwdV1bY291bnRlcl1bdGhyZWFkX2luZGV4XSwgRl9TRVRGTCwgT19OT05CTE9DSyk7CisJCWFzc2VydChGRChldnNlbCwgbnJfY3B1LCB0aHJlYWRfaW5kZXgpID49IDApOworCQlmY250bChGRChldnNlbCwgbnJfY3B1LCB0aHJlYWRfaW5kZXgpLCBGX1NFVEZMLCBPX05PTkJMT0NLKTsKIAogCQkvKgogCQkgKiBGaXJzdCBjb3VudGVyIGFjdHMgYXMgdGhlIGdyb3VwIGxlYWRlcjoKIAkJICovCiAJCWlmIChncm91cCAmJiBncm91cF9mZCA9PSAtMSkKLQkJCWdyb3VwX2ZkID0gZmRbbnJfY3B1XVtjb3VudGVyXVt0aHJlYWRfaW5kZXhdOworCQkJZ3JvdXBfZmQgPSBGRChldnNlbCwgbnJfY3B1LCB0aHJlYWRfaW5kZXgpOwogCi0JCWlmIChjb3VudGVyIHx8IHRocmVhZF9pbmRleCkgewotCQkJcmV0ID0gaW9jdGwoZmRbbnJfY3B1XVtjb3VudGVyXVt0aHJlYWRfaW5kZXhdLAotCQkJCQlQRVJGX0VWRU5UX0lPQ19TRVRfT1VUUFVULAotCQkJCQlmZFtucl9jcHVdWzBdWzBdKTsKKwkJaWYgKGV2c2VsLT5pZHggfHwgdGhyZWFkX2luZGV4KSB7CisJCQlzdHJ1Y3QgcGVyZl9ldnNlbCAqZmlyc3Q7CisJCQlmaXJzdCA9IGxpc3RfZW50cnkoZXZzZWxfbGlzdC5uZXh0LCBzdHJ1Y3QgcGVyZl9ldnNlbCwgbm9kZSk7CisJCQlyZXQgPSBpb2N0bChGRChldnNlbCwgbnJfY3B1LCB0aHJlYWRfaW5kZXgpLAorCQkJCSAgICBQRVJGX0VWRU5UX0lPQ19TRVRfT1VUUFVULAorCQkJCSAgICBGRChmaXJzdCwgbnJfY3B1LCAwKSk7CiAJCQlpZiAocmV0KSB7CiAJCQkJZXJyb3IoImZhaWxlZCB0byBzZXQgb3V0cHV0OiAlZCAoJXMpXG4iLCBlcnJubywKIAkJCQkJCXN0cmVycm9yKGVycm5vKSk7CiAJCQkJZXhpdCgtMSk7CiAJCQl9CiAJCX0gZWxzZSB7Ci0JCQltbWFwX2FycmF5W25yX2NwdV0uY291bnRlciA9IGNvdW50ZXI7CiAJCQltbWFwX2FycmF5W25yX2NwdV0ucHJldiA9IDA7CiAJCQltbWFwX2FycmF5W25yX2NwdV0ubWFzayA9IG1tYXBfcGFnZXMqcGFnZV9zaXplIC0gMTsKIAkJCW1tYXBfYXJyYXlbbnJfY3B1XS5iYXNlID0gbW1hcChOVUxMLCAobW1hcF9wYWdlcysxKSpwYWdlX3NpemUsCi0JCQkJUFJPVF9SRUFEfFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsIGZkW25yX2NwdV1bY291bnRlcl1bdGhyZWFkX2luZGV4XSwgMCk7CisJCQkJUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1NIQVJFRCwgRkQoZXZzZWwsIG5yX2NwdSwgdGhyZWFkX2luZGV4KSwgMCk7CiAJCQlpZiAobW1hcF9hcnJheVtucl9jcHVdLmJhc2UgPT0gTUFQX0ZBSUxFRCkgewogCQkJCWVycm9yKCJmYWlsZWQgdG8gbW1hcCB3aXRoICVkICglcylcbiIsIGVycm5vLCBzdHJlcnJvcihlcnJubykpOwogCQkJCWV4aXQoLTEpOwogCQkJfQogCi0JCQlldmVudF9hcnJheVtucl9wb2xsXS5mZCA9IGZkW25yX2NwdV1bY291bnRlcl1bdGhyZWFkX2luZGV4XTsKKwkJCWV2ZW50X2FycmF5W25yX3BvbGxdLmZkID0gRkQoZXZzZWwsIG5yX2NwdSwgdGhyZWFkX2luZGV4KTsKIAkJCWV2ZW50X2FycmF5W25yX3BvbGxdLmV2ZW50cyA9IFBPTExJTjsKIAkJCW5yX3BvbGwrKzsKIAkJfQogCiAJCWlmIChmaWx0ZXIgIT0gTlVMTCkgewotCQkJcmV0ID0gaW9jdGwoZmRbbnJfY3B1XVtjb3VudGVyXVt0aHJlYWRfaW5kZXhdLAotCQkJCQlQRVJGX0VWRU5UX0lPQ19TRVRfRklMVEVSLCBmaWx0ZXIpOworCQkJcmV0ID0gaW9jdGwoRkQoZXZzZWwsIG5yX2NwdSwgdGhyZWFkX2luZGV4KSwKKwkJCQkgICAgUEVSRl9FVkVOVF9JT0NfU0VUX0ZJTFRFUiwgZmlsdGVyKTsKIAkJCWlmIChyZXQpIHsKIAkJCQllcnJvcigiZmFpbGVkIHRvIHNldCBmaWx0ZXIgd2l0aCAlZCAoJXMpXG4iLCBlcnJubywKIAkJCQkJCXN0cmVycm9yKGVycm5vKSk7CkBAIC00MDYsMTUgKzQzOCwxOSBAQAogCQkJfQogCQl9CiAJfQorCisJaWYgKCFzYW1wbGVfdHlwZSkKKwkJc2FtcGxlX3R5cGUgPSBhdHRyLT5zYW1wbGVfdHlwZTsKIH0KIAogc3RhdGljIHZvaWQgb3Blbl9jb3VudGVycyhpbnQgY3B1KQogewotCWludCBjb3VudGVyOworCXN0cnVjdCBwZXJmX2V2c2VsICpwb3M7CiAKIAlncm91cF9mZCA9IC0xOwotCWZvciAoY291bnRlciA9IDA7IGNvdW50ZXIgPCBucl9jb3VudGVyczsgY291bnRlcisrKQotCQljcmVhdGVfY291bnRlcihjb3VudGVyLCBjcHUpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsICZldnNlbF9saXN0LCBub2RlKQorCQljcmVhdGVfY291bnRlcihwb3MsIGNwdSk7CiAKIAlucl9jcHUrKzsKIH0KQEAgLTQzNyw3ICs0NzMsOCBAQAogCWlmICghcGlwZV9vdXRwdXQpIHsKIAkJc2Vzc2lvbi0+aGVhZGVyLmRhdGFfc2l6ZSArPSBieXRlc193cml0dGVuOwogCi0JCXByb2Nlc3NfYnVpbGRpZHMoKTsKKwkJaWYgKCFub19idWlsZGlkKQorCQkJcHJvY2Vzc19idWlsZGlkcygpOwogCQlwZXJmX2hlYWRlcl9fd3JpdGUoJnNlc3Npb24tPmhlYWRlciwgb3V0cHV0LCB0cnVlKTsKIAkJcGVyZl9zZXNzaW9uX19kZWxldGUoc2Vzc2lvbik7CiAJCXN5bWJvbF9fZXhpdCgpOwpAQCAtNTAwLDcgKzUzNyw3IEBACiAKIHN0YXRpYyBpbnQgX19jbWRfcmVjb3JkKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKIHsKLQlpbnQgaSwgY291bnRlcjsKKwlpbnQgaTsKIAlzdHJ1Y3Qgc3RhdCBzdDsKIAlpbnQgZmxhZ3M7CiAJaW50IGVycjsKQEAgLTU1MiwxOSArNTg5LDIyIEBACiAJfQogCiAJc2Vzc2lvbiA9IHBlcmZfc2Vzc2lvbl9fbmV3KG91dHB1dF9uYW1lLCBPX1dST05MWSwKLQkJCQkgICAgd3JpdGVfbW9kZSA9PSBXUklURV9GT1JDRSwgZmFsc2UpOworCQkJCSAgICB3cml0ZV9tb2RlID09IFdSSVRFX0ZPUkNFLCBmYWxzZSwgTlVMTCk7CiAJaWYgKHNlc3Npb24gPT0gTlVMTCkgewogCQlwcl9lcnIoIk5vdCBlbm91Z2ggbWVtb3J5IGZvciByZWFkaW5nIHBlcmYgZmlsZSBoZWFkZXJcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCisJaWYgKCFub19idWlsZGlkKQorCQlwZXJmX2hlYWRlcl9fc2V0X2ZlYXQoJnNlc3Npb24tPmhlYWRlciwgSEVBREVSX0JVSUxEX0lEKTsKKwogCWlmICghZmlsZV9uZXcpIHsKIAkJZXJyID0gcGVyZl9oZWFkZXJfX3JlYWQoc2Vzc2lvbiwgb3V0cHV0KTsKIAkJaWYgKGVyciA8IDApCiAJCQlnb3RvIG91dF9kZWxldGVfc2Vzc2lvbjsKIAl9CiAKLQlpZiAoaGF2ZV90cmFjZXBvaW50cyhhdHRycywgbnJfY291bnRlcnMpKQorCWlmIChoYXZlX3RyYWNlcG9pbnRzKCZldnNlbF9saXN0KSkKIAkJcGVyZl9oZWFkZXJfX3NldF9mZWF0KCZzZXNzaW9uLT5oZWFkZXIsIEhFQURFUl9UUkFDRV9JTkZPKTsKIAogCS8qCkBAIC02MTIsNyArNjUyLDcgQEAKIAkJfQogCiAJCWlmICghc3lzdGVtX3dpZGUgJiYgdGFyZ2V0X3RpZCA9PSAtMSAmJiB0YXJnZXRfcGlkID09IC0xKQotCQkJYWxsX3RpZHNbMF0gPSBjaGlsZF9waWQ7CisJCQl0aHJlYWRzLT5tYXBbMF0gPSBjaGlsZF9waWQ7CiAKIAkJY2xvc2UoY2hpbGRfcmVhZHlfcGlwZVsxXSk7CiAJCWNsb3NlKGdvX3BpcGVbMF0pOwpAQCAtNjI2LDE5ICs2NjYsMTUgQEAKIAkJY2xvc2UoY2hpbGRfcmVhZHlfcGlwZVswXSk7CiAJfQogCi0JbnJfY3B1cyA9IHJlYWRfY3B1X21hcChjcHVfbGlzdCk7Ci0JaWYgKG5yX2NwdXMgPCAxKSB7Ci0JCXBlcnJvcigiZmFpbGVkIHRvIGNvbGxlY3QgbnVtYmVyIG9mIENQVXMiKTsKLQkJcmV0dXJuIC0xOwotCX0KLQogCWlmICghc3lzdGVtX3dpZGUgJiYgbm9faW5oZXJpdCAmJiAhY3B1X2xpc3QpIHsKIAkJb3Blbl9jb3VudGVycygtMSk7CiAJfSBlbHNlIHsKLQkJZm9yIChpID0gMDsgaSA8IG5yX2NwdXM7IGkrKykKLQkJCW9wZW5fY291bnRlcnMoY3B1bWFwW2ldKTsKKwkJZm9yIChpID0gMDsgaSA8IGNwdXMtPm5yOyBpKyspCisJCQlvcGVuX2NvdW50ZXJzKGNwdXMtPm1hcFtpXSk7CiAJfQogCisJcGVyZl9zZXNzaW9uX19zZXRfc2FtcGxlX3R5cGUoc2Vzc2lvbiwgc2FtcGxlX3R5cGUpOworCiAJaWYgKHBpcGVfb3V0cHV0KSB7CiAJCWVyciA9IHBlcmZfaGVhZGVyX193cml0ZV9waXBlKG91dHB1dCk7CiAJCWlmIChlcnIgPCAwKQpAQCAtNjUxLDYgKzY4Nyw4IEBACiAKIAlwb3N0X3Byb2Nlc3Npbmdfb2Zmc2V0ID0gbHNlZWsob3V0cHV0LCAwLCBTRUVLX0NVUik7CiAKKwlwZXJmX3Nlc3Npb25fX3NldF9zYW1wbGVfaWRfYWxsKHNlc3Npb24sIHNhbXBsZV9pZF9hbGxfYXZhaWwpOworCiAJaWYgKHBpcGVfb3V0cHV0KSB7CiAJCWVyciA9IGV2ZW50X19zeW50aGVzaXplX2F0dHJzKCZzZXNzaW9uLT5oZWFkZXIsCiAJCQkJCSAgICAgIHByb2Nlc3Nfc3ludGhlc2l6ZWRfZXZlbnQsCkBAIC02NjcsNyArNzA1LDcgQEAKIAkJCXJldHVybiBlcnI7CiAJCX0KIAotCQlpZiAoaGF2ZV90cmFjZXBvaW50cyhhdHRycywgbnJfY291bnRlcnMpKSB7CisJCWlmIChoYXZlX3RyYWNlcG9pbnRzKCZldnNlbF9saXN0KSkgewogCQkJLyoKIAkJCSAqIEZJWE1FIGVyciA8PSAwIGhlcmUgYWN0dWFsbHkgbWVhbnMgdGhhdAogCQkJICogdGhlcmUgd2VyZSBubyB0cmFjZXBvaW50cyBzbyBpdHMgbm90IHJlYWxseQpAQCAtNjc2LDggKzcxNCw3IEBACiAJCQkgKiByZXR1cm4gdGhpcyBtb3JlIHByb3Blcmx5IGFuZCBhbHNvCiAJCQkgKiBwcm9wYWdhdGUgZXJyb3JzIHRoYXQgbm93IGFyZSBjYWxsaW5nIGRpZSgpCiAJCQkgKi8KLQkJCWVyciA9IGV2ZW50X19zeW50aGVzaXplX3RyYWNpbmdfZGF0YShvdXRwdXQsIGF0dHJzLAotCQkJCQkJCSAgICAgbnJfY291bnRlcnMsCisJCQllcnIgPSBldmVudF9fc3ludGhlc2l6ZV90cmFjaW5nX2RhdGEob3V0cHV0LCAmZXZzZWxfbGlzdCwKIAkJCQkJCQkgICAgIHByb2Nlc3Nfc3ludGhlc2l6ZWRfZXZlbnQsCiAJCQkJCQkJICAgICBzZXNzaW9uKTsKIAkJCWlmIChlcnIgPD0gMCkgewpAQCAtNzUxLDEzICs3ODgsMTMgQEAKIAogCQlpZiAoZG9uZSkgewogCQkJZm9yIChpID0gMDsgaSA8IG5yX2NwdTsgaSsrKSB7Ci0JCQkJZm9yIChjb3VudGVyID0gMDsKLQkJCQkJY291bnRlciA8IG5yX2NvdW50ZXJzOwotCQkJCQljb3VudGVyKyspIHsKKwkJCQlzdHJ1Y3QgcGVyZl9ldnNlbCAqcG9zOworCisJCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsICZldnNlbF9saXN0LCBub2RlKSB7CiAJCQkJCWZvciAodGhyZWFkID0gMDsKLQkJCQkJCXRocmVhZCA8IHRocmVhZF9udW07CisJCQkJCQl0aHJlYWQgPCB0aHJlYWRzLT5ucjsKIAkJCQkJCXRocmVhZCsrKQotCQkJCQkJaW9jdGwoZmRbaV1bY291bnRlcl1bdGhyZWFkXSwKKwkJCQkJCWlvY3RsKEZEKHBvcywgaSwgdGhyZWFkKSwKIAkJCQkJCQlQRVJGX0VWRU5UX0lPQ19ESVNBQkxFKTsKIAkJCQl9CiAJCQl9CkBAIC04MzEsMTYgKzg2OCwyMCBAQAogCQkgICAgInBlciB0aHJlYWQgY291bnRzIiksCiAJT1BUX0JPT0xFQU4oJ2QnLCAiZGF0YSIsICZzYW1wbGVfYWRkcmVzcywKIAkJICAgICJTYW1wbGUgYWRkcmVzc2VzIiksCisJT1BUX0JPT0xFQU4oJ1QnLCAidGltZXN0YW1wIiwgJnNhbXBsZV90aW1lLCAiU2FtcGxlIHRpbWVzdGFtcHMiKSwKIAlPUFRfQk9PTEVBTignbicsICJuby1zYW1wbGVzIiwgJm5vX3NhbXBsZXMsCiAJCSAgICAiZG9uJ3Qgc2FtcGxlIiksCi0JT1BUX0JPT0xFQU4oJ04nLCAibm8tYnVpbGRpZC1jYWNoZSIsICZub19idWlsZGlkLAorCU9QVF9CT09MRUFOKCdOJywgIm5vLWJ1aWxkaWQtY2FjaGUiLCAmbm9fYnVpbGRpZF9jYWNoZSwKIAkJICAgICJkbyBub3QgdXBkYXRlIHRoZSBidWlsZGlkIGNhY2hlIiksCisJT1BUX0JPT0xFQU4oJ0InLCAibm8tYnVpbGRpZCIsICZub19idWlsZGlkLAorCQkgICAgImRvIG5vdCBjb2xsZWN0IGJ1aWxkaWRzIGluIHBlcmYuZGF0YSIpLAogCU9QVF9FTkQoKQogfTsKIAogaW50IGNtZF9yZWNvcmQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXggX191c2VkKQogewotCWludCBpLCBqLCBlcnIgPSAtRU5PTUVNOworCWludCBlcnIgPSAtRU5PTUVNOworCXN0cnVjdCBwZXJmX2V2c2VsICpwb3M7CiAKIAlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCByZWNvcmRfb3B0aW9ucywgcmVjb3JkX3VzYWdlLAogCQkJICAgIFBBUlNFX09QVF9TVE9QX0FUX05PTl9PUFRJT04pOwpAQCAtODU5LDQxICs5MDAsMzYgQEAKIAl9CiAKIAlzeW1ib2xfX2luaXQoKTsKLQlpZiAobm9fYnVpbGRpZCkKKworCWlmIChub19idWlsZGlkX2NhY2hlIHx8IG5vX2J1aWxkaWQpCiAJCWRpc2FibGVfYnVpbGRpZF9jYWNoZSgpOwogCi0JaWYgKCFucl9jb3VudGVycykgewotCQlucl9jb3VudGVycwk9IDE7Ci0JCWF0dHJzWzBdLnR5cGUJPSBQRVJGX1RZUEVfSEFSRFdBUkU7Ci0JCWF0dHJzWzBdLmNvbmZpZyA9IFBFUkZfQ09VTlRfSFdfQ1BVX0NZQ0xFUzsKKwlpZiAobGlzdF9lbXB0eSgmZXZzZWxfbGlzdCkgJiYgcGVyZl9ldnNlbF9saXN0X19jcmVhdGVfZGVmYXVsdCgpIDwgMCkgeworCQlwcl9lcnIoIk5vdCBlbm91Z2ggbWVtb3J5IGZvciBldmVudCBzZWxlY3RvciBsaXN0XG4iKTsKKwkJZ290byBvdXRfc3ltYm9sX2V4aXQ7CiAJfQogCi0JaWYgKHRhcmdldF9waWQgIT0gLTEpIHsKKwlpZiAodGFyZ2V0X3BpZCAhPSAtMSkKIAkJdGFyZ2V0X3RpZCA9IHRhcmdldF9waWQ7Ci0JCXRocmVhZF9udW0gPSBmaW5kX2FsbF90aWQodGFyZ2V0X3BpZCwgJmFsbF90aWRzKTsKLQkJaWYgKHRocmVhZF9udW0gPD0gMCkgewotCQkJZnByaW50ZihzdGRlcnIsICJDYW4ndCBmaW5kIGFsbCB0aHJlYWRzIG9mIHBpZCAlZFxuIiwKLQkJCQkJdGFyZ2V0X3BpZCk7Ci0JCQl1c2FnZV93aXRoX29wdGlvbnMocmVjb3JkX3VzYWdlLCByZWNvcmRfb3B0aW9ucyk7Ci0JCX0KLQl9IGVsc2UgewotCQlhbGxfdGlkcz1tYWxsb2Moc2l6ZW9mKHBpZF90KSk7Ci0JCWlmICghYWxsX3RpZHMpCi0JCQlnb3RvIG91dF9zeW1ib2xfZXhpdDsKIAotCQlhbGxfdGlkc1swXSA9IHRhcmdldF90aWQ7Ci0JCXRocmVhZF9udW0gPSAxOworCXRocmVhZHMgPSB0aHJlYWRfbWFwX19uZXcodGFyZ2V0X3BpZCwgdGFyZ2V0X3RpZCk7CisJaWYgKHRocmVhZHMgPT0gTlVMTCkgeworCQlwcl9lcnIoIlByb2JsZW1zIGZpbmRpbmcgdGhyZWFkcyBvZiBtb25pdG9yXG4iKTsKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKHJlY29yZF91c2FnZSwgcmVjb3JkX29wdGlvbnMpOwogCX0KIAotCWZvciAoaSA9IDA7IGkgPCBNQVhfTlJfQ1BVUzsgaSsrKSB7Ci0JCWZvciAoaiA9IDA7IGogPCBNQVhfQ09VTlRFUlM7IGorKykgewotCQkJZmRbaV1bal0gPSBtYWxsb2Moc2l6ZW9mKGludCkqdGhyZWFkX251bSk7Ci0JCQlpZiAoIWZkW2ldW2pdKQotCQkJCWdvdG8gb3V0X2ZyZWVfZmQ7Ci0JCX0KKwljcHVzID0gY3B1X21hcF9fbmV3KGNwdV9saXN0KTsKKwlpZiAoY3B1cyA9PSBOVUxMKSB7CisJCXBlcnJvcigiZmFpbGVkIHRvIHBhcnNlIENQVXMgbWFwIik7CisJCXJldHVybiAtMTsKIAl9Ci0JZXZlbnRfYXJyYXkgPSBtYWxsb2MoCi0JCXNpemVvZihzdHJ1Y3QgcG9sbGZkKSpNQVhfTlJfQ1BVUypNQVhfQ09VTlRFUlMqdGhyZWFkX251bSk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgJmV2c2VsX2xpc3QsIG5vZGUpIHsKKwkJaWYgKHBlcmZfZXZzZWxfX2FsbG9jX2ZkKHBvcywgY3B1cy0+bnIsIHRocmVhZHMtPm5yKSA8IDApCisJCQlnb3RvIG91dF9mcmVlX2ZkOworCX0KKwlldmVudF9hcnJheSA9IG1hbGxvYygoc2l6ZW9mKHN0cnVjdCBwb2xsZmQpICogTUFYX05SX0NQVVMgKgorCQkJICAgICAgTUFYX0NPVU5URVJTICogdGhyZWFkcy0+bnIpKTsKIAlpZiAoIWV2ZW50X2FycmF5KQogCQlnb3RvIG91dF9mcmVlX2ZkOwogCkBAIC05MjAsMTIgKzk1Niw4IEBACiBvdXRfZnJlZV9ldmVudF9hcnJheToKIAlmcmVlKGV2ZW50X2FycmF5KTsKIG91dF9mcmVlX2ZkOgotCWZvciAoaSA9IDA7IGkgPCBNQVhfTlJfQ1BVUzsgaSsrKSB7Ci0JCWZvciAoaiA9IDA7IGogPCBNQVhfQ09VTlRFUlM7IGorKykKLQkJCWZyZWUoZmRbaV1bal0pOwotCX0KLQlmcmVlKGFsbF90aWRzKTsKLQlhbGxfdGlkcyA9IE5VTEw7CisJdGhyZWFkX21hcF9fZGVsZXRlKHRocmVhZHMpOworCXRocmVhZHMgPSBOVUxMOwogb3V0X3N5bWJvbF9leGl0OgogCXN5bWJvbF9fZXhpdCgpOwogCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tcmVwb3J0LmMgYi90b29scy9wZXJmL2J1aWx0aW4tcmVwb3J0LmMKaW5kZXggNWRlNDA1ZC4uNzUxODNhNCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXJlcG9ydC5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZXBvcnQuYwpAQCAtMTUwLDEzICsxNTAsMTMgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBwcm9jZXNzX3NhbXBsZV9ldmVudChldmVudF90ICpldmVudCwgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbikKK3N0YXRpYyBpbnQgcHJvY2Vzc19zYW1wbGVfZXZlbnQoZXZlbnRfdCAqZXZlbnQsIHN0cnVjdCBzYW1wbGVfZGF0YSAqc2FtcGxlLAorCQkJCXN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pCiB7Ci0Jc3RydWN0IHNhbXBsZV9kYXRhIGRhdGEgPSB7IC5wZXJpb2QgPSAxLCB9OwogCXN0cnVjdCBhZGRyX2xvY2F0aW9uIGFsOwogCXN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKmF0dHI7CiAKLQlpZiAoZXZlbnRfX3ByZXByb2Nlc3Nfc2FtcGxlKGV2ZW50LCBzZXNzaW9uLCAmYWwsICZkYXRhLCBOVUxMKSA8IDApIHsKKwlpZiAoZXZlbnRfX3ByZXByb2Nlc3Nfc2FtcGxlKGV2ZW50LCBzZXNzaW9uLCAmYWwsIHNhbXBsZSwgTlVMTCkgPCAwKSB7CiAJCWZwcmludGYoc3RkZXJyLCAicHJvYmxlbSBwcm9jZXNzaW5nICVkIGV2ZW50LCBza2lwcGluZyBpdC5cbiIsCiAJCQlldmVudC0+aGVhZGVyLnR5cGUpOwogCQlyZXR1cm4gLTE7CkBAIC0xNjUsMTQgKzE2NSwxNCBAQAogCWlmIChhbC5maWx0ZXJlZCB8fCAoaGlkZV91bnJlc29sdmVkICYmIGFsLnN5bSA9PSBOVUxMKSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAocGVyZl9zZXNzaW9uX19hZGRfaGlzdF9lbnRyeShzZXNzaW9uLCAmYWwsICZkYXRhKSkgeworCWlmIChwZXJmX3Nlc3Npb25fX2FkZF9oaXN0X2VudHJ5KHNlc3Npb24sICZhbCwgc2FtcGxlKSkgewogCQlwcl9kZWJ1ZygicHJvYmxlbSBpbmNyZW1lbnRpbmcgc3ltYm9sIHBlcmlvZCwgc2tpcHBpbmcgZXZlbnRcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCi0JYXR0ciA9IHBlcmZfaGVhZGVyX19maW5kX2F0dHIoZGF0YS5pZCwgJnNlc3Npb24tPmhlYWRlcik7CisJYXR0ciA9IHBlcmZfaGVhZGVyX19maW5kX2F0dHIoc2FtcGxlLT5pZCwgJnNlc3Npb24tPmhlYWRlcik7CiAKLQlpZiAoYWRkX2V2ZW50X3RvdGFsKHNlc3Npb24sICZkYXRhLCBhdHRyKSkgeworCWlmIChhZGRfZXZlbnRfdG90YWwoc2Vzc2lvbiwgc2FtcGxlLCBhdHRyKSkgewogCQlwcl9kZWJ1ZygicHJvYmxlbSBhZGRpbmcgZXZlbnQgcGVyaW9kXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KQEAgLTE4MCw3ICsxODAsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHByb2Nlc3NfcmVhZF9ldmVudChldmVudF90ICpldmVudCwgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiBfX3VzZWQpCitzdGF0aWMgaW50IHByb2Nlc3NfcmVhZF9ldmVudChldmVudF90ICpldmVudCwgc3RydWN0IHNhbXBsZV9kYXRhICpzYW1wbGUgX191c2VkLAorCQkJICAgICAgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiBfX3VzZWQpCiB7CiAJc3RydWN0IHBlcmZfZXZlbnRfYXR0ciAqYXR0cjsKIApAQCAtMjQzLDYgKzI0NCw4IEBACiAJLmV2ZW50X3R5cGUgPSBldmVudF9fcHJvY2Vzc19ldmVudF90eXBlLAogCS50cmFjaW5nX2RhdGEgPSBldmVudF9fcHJvY2Vzc190cmFjaW5nX2RhdGEsCiAJLmJ1aWxkX2lkID0gZXZlbnRfX3Byb2Nlc3NfYnVpbGRfaWQsCisJLm9yZGVyZWRfc2FtcGxlcyA9IHRydWUsCisJLm9yZGVyaW5nX3JlcXVpcmVzX3RpbWVzdGFtcHMgPSB0cnVlLAogfTsKIAogZXh0ZXJuIHZvbGF0aWxlIGludCBzZXNzaW9uX2RvbmU7CkBAIC0zMDcsNyArMzEwLDcgQEAKIAogCXNpZ25hbChTSUdJTlQsIHNpZ19oYW5kbGVyKTsKIAotCXNlc3Npb24gPSBwZXJmX3Nlc3Npb25fX25ldyhpbnB1dF9uYW1lLCBPX1JET05MWSwgZm9yY2UsIGZhbHNlKTsKKwlzZXNzaW9uID0gcGVyZl9zZXNzaW9uX19uZXcoaW5wdXRfbmFtZSwgT19SRE9OTFksIGZvcmNlLCBmYWxzZSwgJmV2ZW50X29wcyk7CiAJaWYgKHNlc3Npb24gPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTQ0Miw2ICs0NDUsOCBAQAogCQkgICAgImR1bXAgcmF3IHRyYWNlIGluIEFTQ0lJIiksCiAJT1BUX1NUUklORygnaycsICJ2bWxpbnV4IiwgJnN5bWJvbF9jb25mLnZtbGludXhfbmFtZSwKIAkJICAgImZpbGUiLCAidm1saW51eCBwYXRobmFtZSIpLAorCU9QVF9TVFJJTkcoMCwgImthbGxzeW1zIiwgJnN5bWJvbF9jb25mLmthbGxzeW1zX25hbWUsCisJCSAgICJmaWxlIiwgImthbGxzeW1zIHBhdGhuYW1lIiksCiAJT1BUX0JPT0xFQU4oJ2YnLCAiZm9yY2UiLCAmZm9yY2UsICJkb24ndCBjb21wbGFpbiwgZG8gaXQiKSwKIAlPUFRfQk9PTEVBTignbScsICJtb2R1bGVzIiwgJnN5bWJvbF9jb25mLnVzZV9tb2R1bGVzLAogCQkgICAgImxvYWQgbW9kdWxlIHN5bWJvbHMgLSBXQVJOSU5HOiB1c2Ugb25seSB3aXRoIC1rIGFuZCBMSVZFIGtlcm5lbCIpLApAQCAtNDc4LDYgKzQ4Myw4IEBACiAJCSAgICJjb2x1bW5zICcuJyBpcyByZXNlcnZlZC4iKSwKIAlPUFRfQk9PTEVBTignVScsICJoaWRlLXVucmVzb2x2ZWQiLCAmaGlkZV91bnJlc29sdmVkLAogCQkgICAgIk9ubHkgZGlzcGxheSBlbnRyaWVzIHJlc29sdmVkIHRvIGEgc3ltYm9sIiksCisJT1BUX1NUUklORygwLCAic3ltZnMiLCAmc3ltYm9sX2NvbmYuc3ltZnMsICJkaXJlY3RvcnkiLAorCQkgICAgIkxvb2sgZm9yIGZpbGVzIHdpdGggc3ltYm9scyByZWxhdGl2ZSB0byB0aGlzIGRpcmVjdG9yeSIpLAogCU9QVF9FTkQoKQogfTsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXNjaGVkLmMgYi90b29scy9wZXJmL2J1aWx0aW4tc2NoZWQuYwppbmRleCA1NWYzYjVkLi43YTRlYmViIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tc2NoZWQuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tc2NoZWQuYwpAQCAtMTYwNiwyNSArMTYwNiwxNSBAQAogCQlwcm9jZXNzX3NjaGVkX21pZ3JhdGVfdGFza19ldmVudChkYXRhLCBzZXNzaW9uLCBldmVudCwgY3B1LCB0aW1lc3RhbXAsIHRocmVhZCk7CiB9CiAKLXN0YXRpYyBpbnQgcHJvY2Vzc19zYW1wbGVfZXZlbnQoZXZlbnRfdCAqZXZlbnQsIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pCitzdGF0aWMgaW50IHByb2Nlc3Nfc2FtcGxlX2V2ZW50KGV2ZW50X3QgKmV2ZW50LCBzdHJ1Y3Qgc2FtcGxlX2RhdGEgKnNhbXBsZSwKKwkJCQlzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQogewotCXN0cnVjdCBzYW1wbGVfZGF0YSBkYXRhOwogCXN0cnVjdCB0aHJlYWQgKnRocmVhZDsKIAogCWlmICghKHNlc3Npb24tPnNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfUkFXKSkKIAkJcmV0dXJuIDA7CiAKLQltZW1zZXQoJmRhdGEsIDAsIHNpemVvZihkYXRhKSk7Ci0JZGF0YS50aW1lID0gLTE7Ci0JZGF0YS5jcHUgPSAtMTsKLQlkYXRhLnBlcmlvZCA9IC0xOwotCi0JZXZlbnRfX3BhcnNlX3NhbXBsZShldmVudCwgc2Vzc2lvbi0+c2FtcGxlX3R5cGUsICZkYXRhKTsKLQotCWR1bXBfcHJpbnRmKCIoSVAsICVkKTogJWQvJWQ6ICUjTHggcGVyaW9kOiAlTGRcbiIsIGV2ZW50LT5oZWFkZXIubWlzYywKLQkJICAgIGRhdGEucGlkLCBkYXRhLnRpZCwgZGF0YS5pcCwgZGF0YS5wZXJpb2QpOwotCi0JdGhyZWFkID0gcGVyZl9zZXNzaW9uX19maW5kbmV3KHNlc3Npb24sIGRhdGEucGlkKTsKKwl0aHJlYWQgPSBwZXJmX3Nlc3Npb25fX2ZpbmRuZXcoc2Vzc2lvbiwgc2FtcGxlLT5waWQpOwogCWlmICh0aHJlYWQgPT0gTlVMTCkgewogCQlwcl9kZWJ1ZygicHJvYmxlbSBwcm9jZXNzaW5nICVkIGV2ZW50LCBza2lwcGluZyBpdC5cbiIsCiAJCQkgZXZlbnQtPmhlYWRlci50eXBlKTsKQEAgLTE2MzMsMTAgKzE2MjMsMTEgQEAKIAogCWR1bXBfcHJpbnRmKCIgLi4uIHRocmVhZDogJXM6JWRcbiIsIHRocmVhZC0+Y29tbSwgdGhyZWFkLT5waWQpOwogCi0JaWYgKHByb2ZpbGVfY3B1ICE9IC0xICYmIHByb2ZpbGVfY3B1ICE9IChpbnQpZGF0YS5jcHUpCisJaWYgKHByb2ZpbGVfY3B1ICE9IC0xICYmIHByb2ZpbGVfY3B1ICE9IChpbnQpc2FtcGxlLT5jcHUpCiAJCXJldHVybiAwOwogCi0JcHJvY2Vzc19yYXdfZXZlbnQoZXZlbnQsIHNlc3Npb24sIGRhdGEucmF3X2RhdGEsIGRhdGEuY3B1LCBkYXRhLnRpbWUsIHRocmVhZCk7CisJcHJvY2Vzc19yYXdfZXZlbnQoZXZlbnQsIHNlc3Npb24sIHNhbXBsZS0+cmF3X2RhdGEsIHNhbXBsZS0+Y3B1LAorCQkJICBzYW1wbGUtPnRpbWUsIHRocmVhZCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE2NTIsNyArMTY0Myw4IEBACiBzdGF0aWMgaW50IHJlYWRfZXZlbnRzKHZvaWQpCiB7CiAJaW50IGVyciA9IC1FSU5WQUw7Ci0Jc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiA9IHBlcmZfc2Vzc2lvbl9fbmV3KGlucHV0X25hbWUsIE9fUkRPTkxZLCAwLCBmYWxzZSk7CisJc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiA9IHBlcmZfc2Vzc2lvbl9fbmV3KGlucHV0X25hbWUsIE9fUkRPTkxZLAorCQkJCQkJCSAwLCBmYWxzZSwgJmV2ZW50X29wcyk7CiAJaWYgKHNlc3Npb24gPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTE4NjksNiArMTg2MSw5IEBACiAJcmVjX2FyZ2MgPSBBUlJBWV9TSVpFKHJlY29yZF9hcmdzKSArIGFyZ2MgLSAxOwogCXJlY19hcmd2ID0gY2FsbG9jKHJlY19hcmdjICsgMSwgc2l6ZW9mKGNoYXIgKikpOwogCisJaWYgKHJlY19hcmd2KQorCQlyZXR1cm4gLUVOT01FTTsKKwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJlY29yZF9hcmdzKTsgaSsrKQogCQlyZWNfYXJndltpXSA9IHN0cmR1cChyZWNvcmRfYXJnc1tpXSk7CiAKQEAgLTE4ODgsMTAgKzE4ODMsMTAgQEAKIAkJdXNhZ2Vfd2l0aF9vcHRpb25zKHNjaGVkX3VzYWdlLCBzY2hlZF9vcHRpb25zKTsKIAogCS8qCi0JICogQWxpYXNlZCB0byAncGVyZiB0cmFjZScgZm9yIG5vdzoKKwkgKiBBbGlhc2VkIHRvICdwZXJmIHNjcmlwdCcgZm9yIG5vdzoKIAkgKi8KLQlpZiAoIXN0cmNtcChhcmd2WzBdLCAidHJhY2UiKSkKLQkJcmV0dXJuIGNtZF90cmFjZShhcmdjLCBhcmd2LCBwcmVmaXgpOworCWlmICghc3RyY21wKGFyZ3ZbMF0sICJzY3JpcHQiKSkKKwkJcmV0dXJuIGNtZF9zY3JpcHQoYXJnYywgYXJndiwgcHJlZml4KTsKIAogCXN5bWJvbF9faW5pdCgpOwogCWlmICghc3RybmNtcChhcmd2WzBdLCAicmVjIiwgMykpIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1zY3JpcHQuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1zY3JpcHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTBhNjA2Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXNjcmlwdC5jCkBAIC0wLDAgKzEsODIxIEBACisjaW5jbHVkZSAiYnVpbHRpbi5oIgorCisjaW5jbHVkZSAicGVyZi5oIgorI2luY2x1ZGUgInV0aWwvY2FjaGUuaCIKKyNpbmNsdWRlICJ1dGlsL2RlYnVnLmgiCisjaW5jbHVkZSAidXRpbC9leGVjX2NtZC5oIgorI2luY2x1ZGUgInV0aWwvaGVhZGVyLmgiCisjaW5jbHVkZSAidXRpbC9wYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAidXRpbC9zZXNzaW9uLmgiCisjaW5jbHVkZSAidXRpbC9zeW1ib2wuaCIKKyNpbmNsdWRlICJ1dGlsL3RocmVhZC5oIgorI2luY2x1ZGUgInV0aWwvdHJhY2UtZXZlbnQuaCIKKyNpbmNsdWRlICJ1dGlsL3BhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJ1dGlsL3V0aWwuaCIKKworc3RhdGljIGNoYXIgY29uc3QJCSpzY3JpcHRfbmFtZTsKK3N0YXRpYyBjaGFyIGNvbnN0CQkqZ2VuZXJhdGVfc2NyaXB0X2xhbmc7CitzdGF0aWMgYm9vbAkJCWRlYnVnX21vZGU7CitzdGF0aWMgdTY0CQkJbGFzdF90aW1lc3RhbXA7CitzdGF0aWMgdTY0CQkJbnJfdW5vcmRlcmVkOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBvcHRpb24JcmVjb3JkX29wdGlvbnNbXTsKKworc3RhdGljIGludCBkZWZhdWx0X3N0YXJ0X3NjcmlwdChjb25zdCBjaGFyICpzY3JpcHQgX191bnVzZWQsCisJCQkJaW50IGFyZ2MgX191bnVzZWQsCisJCQkJY29uc3QgY2hhciAqKmFyZ3YgX191bnVzZWQpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGVmYXVsdF9zdG9wX3NjcmlwdCh2b2lkKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRlZmF1bHRfZ2VuZXJhdGVfc2NyaXB0KGNvbnN0IGNoYXIgKm91dGZpbGUgX191bnVzZWQpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2NyaXB0aW5nX29wcyBkZWZhdWx0X3NjcmlwdGluZ19vcHMgPSB7CisJLnN0YXJ0X3NjcmlwdAkJPSBkZWZhdWx0X3N0YXJ0X3NjcmlwdCwKKwkuc3RvcF9zY3JpcHQJCT0gZGVmYXVsdF9zdG9wX3NjcmlwdCwKKwkucHJvY2Vzc19ldmVudAkJPSBwcmludF9ldmVudCwKKwkuZ2VuZXJhdGVfc2NyaXB0CT0gZGVmYXVsdF9nZW5lcmF0ZV9zY3JpcHQsCit9OworCitzdGF0aWMgc3RydWN0IHNjcmlwdGluZ19vcHMJKnNjcmlwdGluZ19vcHM7CisKK3N0YXRpYyB2b2lkIHNldHVwX3NjcmlwdGluZyh2b2lkKQoreworCXNldHVwX3Blcmxfc2NyaXB0aW5nKCk7CisJc2V0dXBfcHl0aG9uX3NjcmlwdGluZygpOworCisJc2NyaXB0aW5nX29wcyA9ICZkZWZhdWx0X3NjcmlwdGluZ19vcHM7Cit9CisKK3N0YXRpYyBpbnQgY2xlYW51cF9zY3JpcHRpbmcodm9pZCkKK3sKKwlwcl9kZWJ1ZygiXG5wZXJmIHNjcmlwdCBzdG9wcGVkXG4iKTsKKworCXJldHVybiBzY3JpcHRpbmdfb3BzLT5zdG9wX3NjcmlwdCgpOworfQorCitzdGF0aWMgY2hhciBjb25zdAkJKmlucHV0X25hbWUgPSAicGVyZi5kYXRhIjsKKworc3RhdGljIGludCBwcm9jZXNzX3NhbXBsZV9ldmVudChldmVudF90ICpldmVudCwgc3RydWN0IHNhbXBsZV9kYXRhICpzYW1wbGUsCisJCQkJc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbikKK3sKKwlzdHJ1Y3QgdGhyZWFkICp0aHJlYWQgPSBwZXJmX3Nlc3Npb25fX2ZpbmRuZXcoc2Vzc2lvbiwgZXZlbnQtPmlwLnBpZCk7CisKKwlpZiAodGhyZWFkID09IE5VTEwpIHsKKwkJcHJfZGVidWcoInByb2JsZW0gcHJvY2Vzc2luZyAlZCBldmVudCwgc2tpcHBpbmcgaXQuXG4iLAorCQkJIGV2ZW50LT5oZWFkZXIudHlwZSk7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoc2Vzc2lvbi0+c2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9SQVcpIHsKKwkJaWYgKGRlYnVnX21vZGUpIHsKKwkJCWlmIChzYW1wbGUtPnRpbWUgPCBsYXN0X3RpbWVzdGFtcCkgeworCQkJCXByX2VycigiU2FtcGxlcyBtaXNvcmRlcmVkLCBwcmV2aW91czogJWxsdSAiCisJCQkJCSJ0aGlzOiAlbGx1XG4iLCBsYXN0X3RpbWVzdGFtcCwKKwkJCQkJc2FtcGxlLT50aW1lKTsKKwkJCQlucl91bm9yZGVyZWQrKzsKKwkJCX0KKwkJCWxhc3RfdGltZXN0YW1wID0gc2FtcGxlLT50aW1lOworCQkJcmV0dXJuIDA7CisJCX0KKwkJLyoKKwkJICogRklYTUU6IGJldHRlciByZXNvbHZlIGZyb20gcGlkIGZyb20gdGhlIHN0cnVjdCB0cmFjZV9lbnRyeQorCQkgKiBmaWVsZCwgYWx0aG91Z2ggaXQgc2hvdWxkIGJlIHRoZSBzYW1lIHRoYW4gdGhpcyBwZXJmCisJCSAqIGV2ZW50IHBpZAorCQkgKi8KKwkJc2NyaXB0aW5nX29wcy0+cHJvY2Vzc19ldmVudChzYW1wbGUtPmNwdSwgc2FtcGxlLT5yYXdfZGF0YSwKKwkJCQkJICAgICBzYW1wbGUtPnJhd19zaXplLAorCQkJCQkgICAgIHNhbXBsZS0+dGltZSwgdGhyZWFkLT5jb21tKTsKKwl9CisKKwlzZXNzaW9uLT5oaXN0cy5zdGF0cy50b3RhbF9wZXJpb2QgKz0gc2FtcGxlLT5wZXJpb2Q7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGVyZl9ldmVudF9vcHMgZXZlbnRfb3BzID0geworCS5zYW1wbGUJPSBwcm9jZXNzX3NhbXBsZV9ldmVudCwKKwkuY29tbQk9IGV2ZW50X19wcm9jZXNzX2NvbW0sCisJLmF0dHIJPSBldmVudF9fcHJvY2Vzc19hdHRyLAorCS5ldmVudF90eXBlID0gZXZlbnRfX3Byb2Nlc3NfZXZlbnRfdHlwZSwKKwkudHJhY2luZ19kYXRhID0gZXZlbnRfX3Byb2Nlc3NfdHJhY2luZ19kYXRhLAorCS5idWlsZF9pZCA9IGV2ZW50X19wcm9jZXNzX2J1aWxkX2lkLAorCS5vcmRlcmluZ19yZXF1aXJlc190aW1lc3RhbXBzID0gdHJ1ZSwKKwkub3JkZXJlZF9zYW1wbGVzID0gdHJ1ZSwKK307CisKK2V4dGVybiB2b2xhdGlsZSBpbnQgc2Vzc2lvbl9kb25lOworCitzdGF0aWMgdm9pZCBzaWdfaGFuZGxlcihpbnQgc2lnIF9fdW51c2VkKQoreworCXNlc3Npb25fZG9uZSA9IDE7Cit9CisKK3N0YXRpYyBpbnQgX19jbWRfc2NyaXB0KHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pCit7CisJaW50IHJldDsKKworCXNpZ25hbChTSUdJTlQsIHNpZ19oYW5kbGVyKTsKKworCXJldCA9IHBlcmZfc2Vzc2lvbl9fcHJvY2Vzc19ldmVudHMoc2Vzc2lvbiwgJmV2ZW50X29wcyk7CisKKwlpZiAoZGVidWdfbW9kZSkKKwkJcHJfZXJyKCJNaXNvcmRlcmVkIHRpbWVzdGFtcHM6ICVsbHVcbiIsIG5yX3Vub3JkZXJlZCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdHJ1Y3Qgc2NyaXB0X3NwZWMgeworCXN0cnVjdCBsaXN0X2hlYWQJbm9kZTsKKwlzdHJ1Y3Qgc2NyaXB0aW5nX29wcwkqb3BzOworCWNoYXIJCQlzcGVjWzBdOworfTsKKworc3RhdGljIExJU1RfSEVBRChzY3JpcHRfc3BlY3MpOworCitzdGF0aWMgc3RydWN0IHNjcmlwdF9zcGVjICpzY3JpcHRfc3BlY19fbmV3KGNvbnN0IGNoYXIgKnNwZWMsCisJCQkJCSAgICBzdHJ1Y3Qgc2NyaXB0aW5nX29wcyAqb3BzKQoreworCXN0cnVjdCBzY3JpcHRfc3BlYyAqcyA9IG1hbGxvYyhzaXplb2YoKnMpICsgc3RybGVuKHNwZWMpICsgMSk7CisKKwlpZiAocyAhPSBOVUxMKSB7CisJCXN0cmNweShzLT5zcGVjLCBzcGVjKTsKKwkJcy0+b3BzID0gb3BzOworCX0KKworCXJldHVybiBzOworfQorCitzdGF0aWMgdm9pZCBzY3JpcHRfc3BlY19fZGVsZXRlKHN0cnVjdCBzY3JpcHRfc3BlYyAqcykKK3sKKwlmcmVlKHMtPnNwZWMpOworCWZyZWUocyk7Cit9CisKK3N0YXRpYyB2b2lkIHNjcmlwdF9zcGVjX19hZGQoc3RydWN0IHNjcmlwdF9zcGVjICpzKQoreworCWxpc3RfYWRkX3RhaWwoJnMtPm5vZGUsICZzY3JpcHRfc3BlY3MpOworfQorCitzdGF0aWMgc3RydWN0IHNjcmlwdF9zcGVjICpzY3JpcHRfc3BlY19fZmluZChjb25zdCBjaGFyICpzcGVjKQoreworCXN0cnVjdCBzY3JpcHRfc3BlYyAqczsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocywgJnNjcmlwdF9zcGVjcywgbm9kZSkKKwkJaWYgKHN0cmNhc2VjbXAocy0+c3BlYywgc3BlYykgPT0gMCkKKwkJCXJldHVybiBzOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IHNjcmlwdF9zcGVjICpzY3JpcHRfc3BlY19fZmluZG5ldyhjb25zdCBjaGFyICpzcGVjLAorCQkJCQkJc3RydWN0IHNjcmlwdGluZ19vcHMgKm9wcykKK3sKKwlzdHJ1Y3Qgc2NyaXB0X3NwZWMgKnMgPSBzY3JpcHRfc3BlY19fZmluZChzcGVjKTsKKworCWlmIChzKQorCQlyZXR1cm4gczsKKworCXMgPSBzY3JpcHRfc3BlY19fbmV3KHNwZWMsIG9wcyk7CisJaWYgKCFzKQorCQlnb3RvIG91dF9kZWxldGVfc3BlYzsKKworCXNjcmlwdF9zcGVjX19hZGQocyk7CisKKwlyZXR1cm4gczsKKworb3V0X2RlbGV0ZV9zcGVjOgorCXNjcmlwdF9zcGVjX19kZWxldGUocyk7CisKKwlyZXR1cm4gTlVMTDsKK30KKworaW50IHNjcmlwdF9zcGVjX3JlZ2lzdGVyKGNvbnN0IGNoYXIgKnNwZWMsIHN0cnVjdCBzY3JpcHRpbmdfb3BzICpvcHMpCit7CisJc3RydWN0IHNjcmlwdF9zcGVjICpzOworCisJcyA9IHNjcmlwdF9zcGVjX19maW5kKHNwZWMpOworCWlmIChzKQorCQlyZXR1cm4gLTE7CisKKwlzID0gc2NyaXB0X3NwZWNfX2ZpbmRuZXcoc3BlYywgb3BzKTsKKwlpZiAoIXMpCisJCXJldHVybiAtMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNjcmlwdGluZ19vcHMgKnNjcmlwdF9zcGVjX19sb29rdXAoY29uc3QgY2hhciAqc3BlYykKK3sKKwlzdHJ1Y3Qgc2NyaXB0X3NwZWMgKnMgPSBzY3JpcHRfc3BlY19fZmluZChzcGVjKTsKKwlpZiAoIXMpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIHMtPm9wczsKK30KKworc3RhdGljIHZvaWQgbGlzdF9hdmFpbGFibGVfbGFuZ3VhZ2VzKHZvaWQpCit7CisJc3RydWN0IHNjcmlwdF9zcGVjICpzOworCisJZnByaW50ZihzdGRlcnIsICJcbiIpOworCWZwcmludGYoc3RkZXJyLCAiU2NyaXB0aW5nIGxhbmd1YWdlIGV4dGVuc2lvbnMgKHVzZWQgaW4gIgorCQkicGVyZiBzY3JpcHQgLXMgW3NwZWM6XXNjcmlwdC5bc3BlY10pOlxuXG4iKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocywgJnNjcmlwdF9zcGVjcywgbm9kZSkKKwkJZnByaW50ZihzdGRlcnIsICIgICUtNDJzIFslc11cbiIsIHMtPnNwZWMsIHMtPm9wcy0+bmFtZSk7CisKKwlmcHJpbnRmKHN0ZGVyciwgIlxuIik7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2Vfc2NyaXB0bmFtZShjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQgX191c2VkLAorCQkJICAgIGNvbnN0IGNoYXIgKnN0ciwgaW50IHVuc2V0IF9fdXNlZCkKK3sKKwljaGFyIHNwZWNbUEFUSF9NQVhdOworCWNvbnN0IGNoYXIgKnNjcmlwdCwgKmV4dDsKKwlpbnQgbGVuOworCisJaWYgKHN0cmNtcChzdHIsICJsYW5nIikgPT0gMCkgeworCQlsaXN0X2F2YWlsYWJsZV9sYW5ndWFnZXMoKTsKKwkJZXhpdCgwKTsKKwl9CisKKwlzY3JpcHQgPSBzdHJjaHIoc3RyLCAnOicpOworCWlmIChzY3JpcHQpIHsKKwkJbGVuID0gc2NyaXB0IC0gc3RyOworCQlpZiAobGVuID49IFBBVEhfTUFYKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgImludmFsaWQgbGFuZ3VhZ2Ugc3BlY2lmaWVyIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJc3RybmNweShzcGVjLCBzdHIsIGxlbik7CisJCXNwZWNbbGVuXSA9ICdcMCc7CisJCXNjcmlwdGluZ19vcHMgPSBzY3JpcHRfc3BlY19fbG9va3VwKHNwZWMpOworCQlpZiAoIXNjcmlwdGluZ19vcHMpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiaW52YWxpZCBsYW5ndWFnZSBzcGVjaWZpZXIiKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlzY3JpcHQrKzsKKwl9IGVsc2UgeworCQlzY3JpcHQgPSBzdHI7CisJCWV4dCA9IHN0cnJjaHIoc2NyaXB0LCAnLicpOworCQlpZiAoIWV4dCkgeworCQkJZnByaW50ZihzdGRlcnIsICJpbnZhbGlkIHNjcmlwdCBleHRlbnNpb24iKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlzY3JpcHRpbmdfb3BzID0gc2NyaXB0X3NwZWNfX2xvb2t1cCgrK2V4dCk7CisJCWlmICghc2NyaXB0aW5nX29wcykgeworCQkJZnByaW50ZihzdGRlcnIsICJpbnZhbGlkIHNjcmlwdCBleHRlbnNpb24iKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKworCXNjcmlwdF9uYW1lID0gc3RyZHVwKHNjcmlwdCk7CisKKwlyZXR1cm4gMDsKK30KKworLyogSGVscGVyIGZ1bmN0aW9uIGZvciBmaWxlc3lzdGVtcyB0aGF0IHJldHVybiBhIGRlbnQtPmRfdHlwZSBEVF9VTktOT1dOICovCitzdGF0aWMgaW50IGlzX2RpcmVjdG9yeShjb25zdCBjaGFyICpiYXNlX3BhdGgsIGNvbnN0IHN0cnVjdCBkaXJlbnQgKmRlbnQpCit7CisJY2hhciBwYXRoW1BBVEhfTUFYXTsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKworCXNwcmludGYocGF0aCwgIiVzLyVzIiwgYmFzZV9wYXRoLCBkZW50LT5kX25hbWUpOworCWlmIChzdGF0KHBhdGgsICZzdCkpCisJCXJldHVybiAwOworCisJcmV0dXJuIFNfSVNESVIoc3Quc3RfbW9kZSk7Cit9CisKKyNkZWZpbmUgZm9yX2VhY2hfbGFuZyhzY3JpcHRzX3BhdGgsIHNjcmlwdHNfZGlyLCBsYW5nX2RpcmVudCwgbGFuZ19uZXh0KVwKKwl3aGlsZSAoIXJlYWRkaXJfcihzY3JpcHRzX2RpciwgJmxhbmdfZGlyZW50LCAmbGFuZ19uZXh0KSAmJglcCisJICAgICAgIGxhbmdfbmV4dCkJCQkJCQlcCisJCWlmICgobGFuZ19kaXJlbnQuZF90eXBlID09IERUX0RJUiB8fAkJCVwKKwkJICAgICAobGFuZ19kaXJlbnQuZF90eXBlID09IERUX1VOS05PV04gJiYJCVwKKwkJICAgICAgaXNfZGlyZWN0b3J5KHNjcmlwdHNfcGF0aCwgJmxhbmdfZGlyZW50KSkpICYmCVwKKwkJICAgIChzdHJjbXAobGFuZ19kaXJlbnQuZF9uYW1lLCAiLiIpKSAmJgkJXAorCQkgICAgKHN0cmNtcChsYW5nX2RpcmVudC5kX25hbWUsICIuLiIpKSkKKworI2RlZmluZSBmb3JfZWFjaF9zY3JpcHQobGFuZ19wYXRoLCBsYW5nX2Rpciwgc2NyaXB0X2RpcmVudCwgc2NyaXB0X25leHQpXAorCXdoaWxlICghcmVhZGRpcl9yKGxhbmdfZGlyLCAmc2NyaXB0X2RpcmVudCwgJnNjcmlwdF9uZXh0KSAmJglcCisJICAgICAgIHNjcmlwdF9uZXh0KQkJCQkJCVwKKwkJaWYgKHNjcmlwdF9kaXJlbnQuZF90eXBlICE9IERUX0RJUiAmJgkJCVwKKwkJICAgIChzY3JpcHRfZGlyZW50LmRfdHlwZSAhPSBEVF9VTktOT1dOIHx8CQlcCisJCSAgICAgIWlzX2RpcmVjdG9yeShsYW5nX3BhdGgsICZzY3JpcHRfZGlyZW50KSkpCisKKworI2RlZmluZSBSRUNPUkRfU1VGRklYCQkJIi1yZWNvcmQiCisjZGVmaW5lIFJFUE9SVF9TVUZGSVgJCQkiLXJlcG9ydCIKKworc3RydWN0IHNjcmlwdF9kZXNjIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCW5vZGU7CisJY2hhcgkJCSpuYW1lOworCWNoYXIJCQkqaGFsZl9saW5lcjsKKwljaGFyCQkJKmFyZ3M7Cit9OworCitzdGF0aWMgTElTVF9IRUFEKHNjcmlwdF9kZXNjcyk7CisKK3N0YXRpYyBzdHJ1Y3Qgc2NyaXB0X2Rlc2MgKnNjcmlwdF9kZXNjX19uZXcoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3Qgc2NyaXB0X2Rlc2MgKnMgPSB6YWxsb2Moc2l6ZW9mKCpzKSk7CisKKwlpZiAocyAhPSBOVUxMICYmIG5hbWUpCisJCXMtPm5hbWUgPSBzdHJkdXAobmFtZSk7CisKKwlyZXR1cm4gczsKK30KKworc3RhdGljIHZvaWQgc2NyaXB0X2Rlc2NfX2RlbGV0ZShzdHJ1Y3Qgc2NyaXB0X2Rlc2MgKnMpCit7CisJZnJlZShzLT5uYW1lKTsKKwlmcmVlKHMtPmhhbGZfbGluZXIpOworCWZyZWUocy0+YXJncyk7CisJZnJlZShzKTsKK30KKworc3RhdGljIHZvaWQgc2NyaXB0X2Rlc2NfX2FkZChzdHJ1Y3Qgc2NyaXB0X2Rlc2MgKnMpCit7CisJbGlzdF9hZGRfdGFpbCgmcy0+bm9kZSwgJnNjcmlwdF9kZXNjcyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2NyaXB0X2Rlc2MgKnNjcmlwdF9kZXNjX19maW5kKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IHNjcmlwdF9kZXNjICpzOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShzLCAmc2NyaXB0X2Rlc2NzLCBub2RlKQorCQlpZiAoc3RyY2FzZWNtcChzLT5uYW1lLCBuYW1lKSA9PSAwKQorCQkJcmV0dXJuIHM7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2NyaXB0X2Rlc2MgKnNjcmlwdF9kZXNjX19maW5kbmV3KGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IHNjcmlwdF9kZXNjICpzID0gc2NyaXB0X2Rlc2NfX2ZpbmQobmFtZSk7CisKKwlpZiAocykKKwkJcmV0dXJuIHM7CisKKwlzID0gc2NyaXB0X2Rlc2NfX25ldyhuYW1lKTsKKwlpZiAoIXMpCisJCWdvdG8gb3V0X2RlbGV0ZV9kZXNjOworCisJc2NyaXB0X2Rlc2NfX2FkZChzKTsKKworCXJldHVybiBzOworCitvdXRfZGVsZXRlX2Rlc2M6CisJc2NyaXB0X2Rlc2NfX2RlbGV0ZShzKTsKKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqZW5kc193aXRoKGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqc3VmZml4KQoreworCXNpemVfdCBzdWZmaXhfbGVuID0gc3RybGVuKHN1ZmZpeCk7CisJY29uc3QgY2hhciAqcCA9IHN0cjsKKworCWlmIChzdHJsZW4oc3RyKSA+IHN1ZmZpeF9sZW4pIHsKKwkJcCA9IHN0ciArIHN0cmxlbihzdHIpIC0gc3VmZml4X2xlbjsKKwkJaWYgKCFzdHJuY21wKHAsIHN1ZmZpeCwgc3VmZml4X2xlbikpCisJCQlyZXR1cm4gcDsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGNoYXIgKmx0cmltKGNoYXIgKnN0cikKK3sKKwlpbnQgbGVuID0gc3RybGVuKHN0cik7CisKKwl3aGlsZSAobGVuICYmIGlzc3BhY2UoKnN0cikpIHsKKwkJbGVuLS07CisJCXN0cisrOworCX0KKworCXJldHVybiBzdHI7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF9zY3JpcHRfaW5mbyhzdHJ1Y3Qgc2NyaXB0X2Rlc2MgKmRlc2MsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworCWNoYXIgbGluZVtCVUZTSVpdLCAqcDsKKwlGSUxFICpmcDsKKworCWZwID0gZm9wZW4oZmlsZW5hbWUsICJyIik7CisJaWYgKCFmcCkKKwkJcmV0dXJuIC0xOworCisJd2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZnApKSB7CisJCXAgPSBsdHJpbShsaW5lKTsKKwkJaWYgKHN0cmxlbihwKSA9PSAwKQorCQkJY29udGludWU7CisJCWlmICgqcCAhPSAnIycpCisJCQljb250aW51ZTsKKwkJcCsrOworCQlpZiAoc3RybGVuKHApICYmICpwID09ICchJykKKwkJCWNvbnRpbnVlOworCisJCXAgPSBsdHJpbShwKTsKKwkJaWYgKHN0cmxlbihwKSAmJiBwW3N0cmxlbihwKSAtIDFdID09ICdcbicpCisJCQlwW3N0cmxlbihwKSAtIDFdID0gJ1wwJzsKKworCQlpZiAoIXN0cm5jbXAocCwgImRlc2NyaXB0aW9uOiIsIHN0cmxlbigiZGVzY3JpcHRpb246IikpKSB7CisJCQlwICs9IHN0cmxlbigiZGVzY3JpcHRpb246Iik7CisJCQlkZXNjLT5oYWxmX2xpbmVyID0gc3RyZHVwKGx0cmltKHApKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKCFzdHJuY21wKHAsICJhcmdzOiIsIHN0cmxlbigiYXJnczoiKSkpIHsKKwkJCXAgKz0gc3RybGVuKCJhcmdzOiIpOworCQkJZGVzYy0+YXJncyA9IHN0cmR1cChsdHJpbShwKSk7CisJCQljb250aW51ZTsKKwkJfQorCX0KKworCWZjbG9zZShmcCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsaXN0X2F2YWlsYWJsZV9zY3JpcHRzKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCBfX3VzZWQsCisJCQkJICBjb25zdCBjaGFyICpzIF9fdXNlZCwgaW50IHVuc2V0IF9fdXNlZCkKK3sKKwlzdHJ1Y3QgZGlyZW50ICpzY3JpcHRfbmV4dCwgKmxhbmdfbmV4dCwgc2NyaXB0X2RpcmVudCwgbGFuZ19kaXJlbnQ7CisJY2hhciBzY3JpcHRzX3BhdGhbTUFYUEFUSExFTl07CisJRElSICpzY3JpcHRzX2RpciwgKmxhbmdfZGlyOworCWNoYXIgc2NyaXB0X3BhdGhbTUFYUEFUSExFTl07CisJY2hhciBsYW5nX3BhdGhbTUFYUEFUSExFTl07CisJc3RydWN0IHNjcmlwdF9kZXNjICpkZXNjOworCWNoYXIgZmlyc3RfaGFsZltCVUZTSVpdOworCWNoYXIgKnNjcmlwdF9yb290OworCWNoYXIgKnN0cjsKKworCXNucHJpbnRmKHNjcmlwdHNfcGF0aCwgTUFYUEFUSExFTiwgIiVzL3NjcmlwdHMiLCBwZXJmX2V4ZWNfcGF0aCgpKTsKKworCXNjcmlwdHNfZGlyID0gb3BlbmRpcihzY3JpcHRzX3BhdGgpOworCWlmICghc2NyaXB0c19kaXIpCisJCXJldHVybiAtMTsKKworCWZvcl9lYWNoX2xhbmcoc2NyaXB0c19wYXRoLCBzY3JpcHRzX2RpciwgbGFuZ19kaXJlbnQsIGxhbmdfbmV4dCkgeworCQlzbnByaW50ZihsYW5nX3BhdGgsIE1BWFBBVEhMRU4sICIlcy8lcy9iaW4iLCBzY3JpcHRzX3BhdGgsCisJCQkgbGFuZ19kaXJlbnQuZF9uYW1lKTsKKwkJbGFuZ19kaXIgPSBvcGVuZGlyKGxhbmdfcGF0aCk7CisJCWlmICghbGFuZ19kaXIpCisJCQljb250aW51ZTsKKworCQlmb3JfZWFjaF9zY3JpcHQobGFuZ19wYXRoLCBsYW5nX2Rpciwgc2NyaXB0X2RpcmVudCwgc2NyaXB0X25leHQpIHsKKwkJCXNjcmlwdF9yb290ID0gc3RyZHVwKHNjcmlwdF9kaXJlbnQuZF9uYW1lKTsKKwkJCXN0ciA9IChjaGFyICopZW5kc193aXRoKHNjcmlwdF9yb290LCBSRVBPUlRfU1VGRklYKTsKKwkJCWlmIChzdHIpIHsKKwkJCQkqc3RyID0gJ1wwJzsKKwkJCQlkZXNjID0gc2NyaXB0X2Rlc2NfX2ZpbmRuZXcoc2NyaXB0X3Jvb3QpOworCQkJCXNucHJpbnRmKHNjcmlwdF9wYXRoLCBNQVhQQVRITEVOLCAiJXMvJXMiLAorCQkJCQkgbGFuZ19wYXRoLCBzY3JpcHRfZGlyZW50LmRfbmFtZSk7CisJCQkJcmVhZF9zY3JpcHRfaW5mbyhkZXNjLCBzY3JpcHRfcGF0aCk7CisJCQl9CisJCQlmcmVlKHNjcmlwdF9yb290KTsKKwkJfQorCX0KKworCWZwcmludGYoc3Rkb3V0LCAiTGlzdCBvZiBhdmFpbGFibGUgdHJhY2Ugc2NyaXB0czpcbiIpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoZGVzYywgJnNjcmlwdF9kZXNjcywgbm9kZSkgeworCQlzcHJpbnRmKGZpcnN0X2hhbGYsICIlcyAlcyIsIGRlc2MtPm5hbWUsCisJCQlkZXNjLT5hcmdzID8gZGVzYy0+YXJncyA6ICIiKTsKKwkJZnByaW50ZihzdGRvdXQsICIgICUtMzZzICVzXG4iLCBmaXJzdF9oYWxmLAorCQkJZGVzYy0+aGFsZl9saW5lciA/IGRlc2MtPmhhbGZfbGluZXIgOiAiIik7CisJfQorCisJZXhpdCgwKTsKK30KKworc3RhdGljIGNoYXIgKmdldF9zY3JpcHRfcGF0aChjb25zdCBjaGFyICpzY3JpcHRfcm9vdCwgY29uc3QgY2hhciAqc3VmZml4KQoreworCXN0cnVjdCBkaXJlbnQgKnNjcmlwdF9uZXh0LCAqbGFuZ19uZXh0LCBzY3JpcHRfZGlyZW50LCBsYW5nX2RpcmVudDsKKwljaGFyIHNjcmlwdHNfcGF0aFtNQVhQQVRITEVOXTsKKwljaGFyIHNjcmlwdF9wYXRoW01BWFBBVEhMRU5dOworCURJUiAqc2NyaXB0c19kaXIsICpsYW5nX2RpcjsKKwljaGFyIGxhbmdfcGF0aFtNQVhQQVRITEVOXTsKKwljaGFyICpzdHIsICpfX3NjcmlwdF9yb290OworCWNoYXIgKnBhdGggPSBOVUxMOworCisJc25wcmludGYoc2NyaXB0c19wYXRoLCBNQVhQQVRITEVOLCAiJXMvc2NyaXB0cyIsIHBlcmZfZXhlY19wYXRoKCkpOworCisJc2NyaXB0c19kaXIgPSBvcGVuZGlyKHNjcmlwdHNfcGF0aCk7CisJaWYgKCFzY3JpcHRzX2RpcikKKwkJcmV0dXJuIE5VTEw7CisKKwlmb3JfZWFjaF9sYW5nKHNjcmlwdHNfcGF0aCwgc2NyaXB0c19kaXIsIGxhbmdfZGlyZW50LCBsYW5nX25leHQpIHsKKwkJc25wcmludGYobGFuZ19wYXRoLCBNQVhQQVRITEVOLCAiJXMvJXMvYmluIiwgc2NyaXB0c19wYXRoLAorCQkJIGxhbmdfZGlyZW50LmRfbmFtZSk7CisJCWxhbmdfZGlyID0gb3BlbmRpcihsYW5nX3BhdGgpOworCQlpZiAoIWxhbmdfZGlyKQorCQkJY29udGludWU7CisKKwkJZm9yX2VhY2hfc2NyaXB0KGxhbmdfcGF0aCwgbGFuZ19kaXIsIHNjcmlwdF9kaXJlbnQsIHNjcmlwdF9uZXh0KSB7CisJCQlfX3NjcmlwdF9yb290ID0gc3RyZHVwKHNjcmlwdF9kaXJlbnQuZF9uYW1lKTsKKwkJCXN0ciA9IChjaGFyICopZW5kc193aXRoKF9fc2NyaXB0X3Jvb3QsIHN1ZmZpeCk7CisJCQlpZiAoc3RyKSB7CisJCQkJKnN0ciA9ICdcMCc7CisJCQkJaWYgKHN0cmNtcChfX3NjcmlwdF9yb290LCBzY3JpcHRfcm9vdCkpCisJCQkJCWNvbnRpbnVlOworCQkJCXNucHJpbnRmKHNjcmlwdF9wYXRoLCBNQVhQQVRITEVOLCAiJXMvJXMiLAorCQkJCQkgbGFuZ19wYXRoLCBzY3JpcHRfZGlyZW50LmRfbmFtZSk7CisJCQkJcGF0aCA9IHN0cmR1cChzY3JpcHRfcGF0aCk7CisJCQkJZnJlZShfX3NjcmlwdF9yb290KTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWZyZWUoX19zY3JpcHRfcm9vdCk7CisJCX0KKwl9CisKKwlyZXR1cm4gcGF0aDsKK30KKworc3RhdGljIGJvb2wgaXNfdG9wX3NjcmlwdChjb25zdCBjaGFyICpzY3JpcHRfcGF0aCkKK3sKKwlyZXR1cm4gZW5kc193aXRoKHNjcmlwdF9wYXRoLCAidG9wIikgPT0gTlVMTCA/IGZhbHNlIDogdHJ1ZTsKK30KKworc3RhdGljIGludCBoYXNfcmVxdWlyZWRfYXJnKGNoYXIgKnNjcmlwdF9wYXRoKQoreworCXN0cnVjdCBzY3JpcHRfZGVzYyAqZGVzYzsKKwlpbnQgbl9hcmdzID0gMDsKKwljaGFyICpwOworCisJZGVzYyA9IHNjcmlwdF9kZXNjX19uZXcoTlVMTCk7CisKKwlpZiAocmVhZF9zY3JpcHRfaW5mbyhkZXNjLCBzY3JpcHRfcGF0aCkpCisJCWdvdG8gb3V0OworCisJaWYgKCFkZXNjLT5hcmdzKQorCQlnb3RvIG91dDsKKworCWZvciAocCA9IGRlc2MtPmFyZ3M7ICpwOyBwKyspCisJCWlmICgqcCA9PSAnPCcpCisJCQluX2FyZ3MrKzsKK291dDoKKwlzY3JpcHRfZGVzY19fZGVsZXRlKGRlc2MpOworCisJcmV0dXJuIG5fYXJnczsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBzY3JpcHRfdXNhZ2VbXSA9IHsKKwkicGVyZiBzY3JpcHQgWzxvcHRpb25zPl0iLAorCSJwZXJmIHNjcmlwdCBbPG9wdGlvbnM+XSByZWNvcmQgPHNjcmlwdD4gWzxyZWNvcmQtb3B0aW9ucz5dIDxjb21tYW5kPiIsCisJInBlcmYgc2NyaXB0IFs8b3B0aW9ucz5dIHJlcG9ydCA8c2NyaXB0PiBbc2NyaXB0LWFyZ3NdIiwKKwkicGVyZiBzY3JpcHQgWzxvcHRpb25zPl0gPHNjcmlwdD4gWzxyZWNvcmQtb3B0aW9ucz5dIDxjb21tYW5kPiIsCisJInBlcmYgc2NyaXB0IFs8b3B0aW9ucz5dIDx0b3Atc2NyaXB0PiBbc2NyaXB0LWFyZ3NdIiwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJT1BUX0JPT0xFQU4oJ0QnLCAiZHVtcC1yYXctdHJhY2UiLCAmZHVtcF90cmFjZSwKKwkJICAgICJkdW1wIHJhdyB0cmFjZSBpbiBBU0NJSSIpLAorCU9QVF9JTkNSKCd2JywgInZlcmJvc2UiLCAmdmVyYm9zZSwKKwkJICAgICJiZSBtb3JlIHZlcmJvc2UgKHNob3cgc3ltYm9sIGFkZHJlc3MsIGV0YykiKSwKKwlPUFRfQk9PTEVBTignTCcsICJMYXRlbmN5IiwgJmxhdGVuY3lfZm9ybWF0LAorCQkgICAgInNob3cgbGF0ZW5jeSBhdHRyaWJ1dGVzIChpcnFzL3ByZWVtcHRpb24gZGlzYWJsZWQsIGV0YykiKSwKKwlPUFRfQ0FMTEJBQ0tfTk9PUFQoJ2wnLCAibGlzdCIsIE5VTEwsIE5VTEwsICJsaXN0IGF2YWlsYWJsZSBzY3JpcHRzIiwKKwkJCSAgIGxpc3RfYXZhaWxhYmxlX3NjcmlwdHMpLAorCU9QVF9DQUxMQkFDSygncycsICJzY3JpcHQiLCBOVUxMLCAibmFtZSIsCisJCSAgICAgInNjcmlwdCBmaWxlIG5hbWUgKGxhbmc6c2NyaXB0IG5hbWUsIHNjcmlwdCBuYW1lLCBvciAqKSIsCisJCSAgICAgcGFyc2Vfc2NyaXB0bmFtZSksCisJT1BUX1NUUklORygnZycsICJnZW4tc2NyaXB0IiwgJmdlbmVyYXRlX3NjcmlwdF9sYW5nLCAibGFuZyIsCisJCSAgICJnZW5lcmF0ZSBwZXJmLXNjcmlwdC54eCBzY3JpcHQgaW4gc3BlY2lmaWVkIGxhbmd1YWdlIiksCisJT1BUX1NUUklORygnaScsICJpbnB1dCIsICZpbnB1dF9uYW1lLCAiZmlsZSIsCisJCSAgICAiaW5wdXQgZmlsZSBuYW1lIiksCisJT1BUX0JPT0xFQU4oJ2QnLCAiZGVidWctbW9kZSIsICZkZWJ1Z19tb2RlLAorCQkgICAiZG8gdmFyaW91cyBjaGVja3MgbGlrZSBzYW1wbGVzIG9yZGVyaW5nIGFuZCBsb3N0IGV2ZW50cyIpLAorCisJT1BUX0VORCgpCit9OworCitzdGF0aWMgYm9vbCBoYXZlX2NtZChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJY2hhciAqKl9fYXJndiA9IG1hbGxvYyhzaXplb2YoY29uc3QgY2hhciAqKSAqIGFyZ2MpOworCisJaWYgKCFfX2FyZ3YpCisJCWRpZSgibWFsbG9jIik7CisJbWVtY3B5KF9fYXJndiwgYXJndiwgc2l6ZW9mKGNvbnN0IGNoYXIgKikgKiBhcmdjKTsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCAoY29uc3QgY2hhciAqKilfX2FyZ3YsIHJlY29yZF9vcHRpb25zLAorCQkJICAgICBOVUxMLCBQQVJTRV9PUFRfU1RPUF9BVF9OT05fT1BUSU9OKTsKKwlmcmVlKF9fYXJndik7CisKKwlyZXR1cm4gYXJnYyAhPSAwOworfQorCitpbnQgY21kX3NjcmlwdChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCBfX3VzZWQpCit7CisJY2hhciAqcmVjX3NjcmlwdF9wYXRoID0gTlVMTDsKKwljaGFyICpyZXBfc2NyaXB0X3BhdGggPSBOVUxMOworCXN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb247CisJY2hhciAqc2NyaXB0X3BhdGggPSBOVUxMOworCWNvbnN0IGNoYXIgKipfX2FyZ3Y7CisJYm9vbCBzeXN0ZW1fd2lkZTsKKwlpbnQgaSwgaiwgZXJyOworCisJc2V0dXBfc2NyaXB0aW5nKCk7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBvcHRpb25zLCBzY3JpcHRfdXNhZ2UsCisJCQkgICAgIFBBUlNFX09QVF9TVE9QX0FUX05PTl9PUFRJT04pOworCisJaWYgKGFyZ2MgPiAxICYmICFzdHJuY21wKGFyZ3ZbMF0sICJyZWMiLCBzdHJsZW4oInJlYyIpKSkgeworCQlyZWNfc2NyaXB0X3BhdGggPSBnZXRfc2NyaXB0X3BhdGgoYXJndlsxXSwgUkVDT1JEX1NVRkZJWCk7CisJCWlmICghcmVjX3NjcmlwdF9wYXRoKQorCQkJcmV0dXJuIGNtZF9yZWNvcmQoYXJnYywgYXJndiwgTlVMTCk7CisJfQorCisJaWYgKGFyZ2MgPiAxICYmICFzdHJuY21wKGFyZ3ZbMF0sICJyZXAiLCBzdHJsZW4oInJlcCIpKSkgeworCQlyZXBfc2NyaXB0X3BhdGggPSBnZXRfc2NyaXB0X3BhdGgoYXJndlsxXSwgUkVQT1JUX1NVRkZJWCk7CisJCWlmICghcmVwX3NjcmlwdF9wYXRoKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkiUGxlYXNlIHNwZWNpZnkgYSB2YWxpZCByZXBvcnQgc2NyaXB0IgorCQkJCSIoc2VlICdwZXJmIHNjcmlwdCAtbCcgZm9yIGxpc3RpbmcpXG4iKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKworCS8qIG1ha2Ugc3VyZSBQRVJGX0VYRUNfUEFUSCBpcyBzZXQgZm9yIHNjcmlwdHMgKi8KKwlwZXJmX3NldF9hcmd2X2V4ZWNfcGF0aChwZXJmX2V4ZWNfcGF0aCgpKTsKKworCWlmIChhcmdjICYmICFzY3JpcHRfbmFtZSAmJiAhcmVjX3NjcmlwdF9wYXRoICYmICFyZXBfc2NyaXB0X3BhdGgpIHsKKwkJaW50IGxpdmVfcGlwZVsyXTsKKwkJaW50IHJlcF9hcmdzOworCQlwaWRfdCBwaWQ7CisKKwkJcmVjX3NjcmlwdF9wYXRoID0gZ2V0X3NjcmlwdF9wYXRoKGFyZ3ZbMF0sIFJFQ09SRF9TVUZGSVgpOworCQlyZXBfc2NyaXB0X3BhdGggPSBnZXRfc2NyaXB0X3BhdGgoYXJndlswXSwgUkVQT1JUX1NVRkZJWCk7CisKKwkJaWYgKCFyZWNfc2NyaXB0X3BhdGggJiYgIXJlcF9zY3JpcHRfcGF0aCkgeworCQkJZnByaW50ZihzdGRlcnIsICIgQ291bGRuJ3QgZmluZCBzY3JpcHQgJXNcblxuIFNlZSBwZXJmIgorCQkJCSIgc2NyaXB0IC1sIGZvciBhdmFpbGFibGUgc2NyaXB0cy5cbiIsIGFyZ3ZbMF0pOworCQkJdXNhZ2Vfd2l0aF9vcHRpb25zKHNjcmlwdF91c2FnZSwgb3B0aW9ucyk7CisJCX0KKworCQlpZiAoaXNfdG9wX3NjcmlwdChhcmd2WzBdKSkgeworCQkJcmVwX2FyZ3MgPSBhcmdjIC0gMTsKKwkJfSBlbHNlIHsKKwkJCWludCByZWNfYXJnczsKKworCQkJcmVwX2FyZ3MgPSBoYXNfcmVxdWlyZWRfYXJnKHJlcF9zY3JpcHRfcGF0aCk7CisJCQlyZWNfYXJncyA9IChhcmdjIC0gMSkgLSByZXBfYXJnczsKKwkJCWlmIChyZWNfYXJncyA8IDApIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIiAlcyBzY3JpcHQgcmVxdWlyZXMgb3B0aW9ucy4iCisJCQkJCSJcblxuIFNlZSBwZXJmIHNjcmlwdCAtbCBmb3IgYXZhaWxhYmxlICIKKwkJCQkJInNjcmlwdHMgYW5kIG9wdGlvbnMuXG4iLCBhcmd2WzBdKTsKKwkJCQl1c2FnZV93aXRoX29wdGlvbnMoc2NyaXB0X3VzYWdlLCBvcHRpb25zKTsKKwkJCX0KKwkJfQorCisJCWlmIChwaXBlKGxpdmVfcGlwZSkgPCAwKSB7CisJCQlwZXJyb3IoImZhaWxlZCB0byBjcmVhdGUgcGlwZSIpOworCQkJZXhpdCgtMSk7CisJCX0KKworCQlwaWQgPSBmb3JrKCk7CisJCWlmIChwaWQgPCAwKSB7CisJCQlwZXJyb3IoImZhaWxlZCB0byBmb3JrIik7CisJCQlleGl0KC0xKTsKKwkJfQorCisJCWlmICghcGlkKSB7CisJCQlzeXN0ZW1fd2lkZSA9IHRydWU7CisJCQlqID0gMDsKKworCQkJZHVwMihsaXZlX3BpcGVbMV0sIDEpOworCQkJY2xvc2UobGl2ZV9waXBlWzBdKTsKKworCQkJaWYgKCFpc190b3Bfc2NyaXB0KGFyZ3ZbMF0pKQorCQkJCXN5c3RlbV93aWRlID0gIWhhdmVfY21kKGFyZ2MgLSByZXBfYXJncywKKwkJCQkJCQkmYXJndltyZXBfYXJnc10pOworCisJCQlfX2FyZ3YgPSBtYWxsb2MoKGFyZ2MgKyA2KSAqIHNpemVvZihjb25zdCBjaGFyICopKTsKKwkJCWlmICghX19hcmd2KQorCQkJCWRpZSgibWFsbG9jIik7CisKKwkJCV9fYXJndltqKytdID0gIi9iaW4vc2giOworCQkJX19hcmd2W2orK10gPSByZWNfc2NyaXB0X3BhdGg7CisJCQlpZiAoc3lzdGVtX3dpZGUpCisJCQkJX19hcmd2W2orK10gPSAiLWEiOworCQkJX19hcmd2W2orK10gPSAiLXEiOworCQkJX19hcmd2W2orK10gPSAiLW8iOworCQkJX19hcmd2W2orK10gPSAiLSI7CisJCQlmb3IgKGkgPSByZXBfYXJncyArIDE7IGkgPCBhcmdjOyBpKyspCisJCQkJX19hcmd2W2orK10gPSBhcmd2W2ldOworCQkJX19hcmd2W2orK10gPSBOVUxMOworCisJCQlleGVjdnAoIi9iaW4vc2giLCAoY2hhciAqKilfX2FyZ3YpOworCQkJZnJlZShfX2FyZ3YpOworCQkJZXhpdCgtMSk7CisJCX0KKworCQlkdXAyKGxpdmVfcGlwZVswXSwgMCk7CisJCWNsb3NlKGxpdmVfcGlwZVsxXSk7CisKKwkJX19hcmd2ID0gbWFsbG9jKChhcmdjICsgNCkgKiBzaXplb2YoY29uc3QgY2hhciAqKSk7CisJCWlmICghX19hcmd2KQorCQkJZGllKCJtYWxsb2MiKTsKKwkJaiA9IDA7CisJCV9fYXJndltqKytdID0gIi9iaW4vc2giOworCQlfX2FyZ3ZbaisrXSA9IHJlcF9zY3JpcHRfcGF0aDsKKwkJZm9yIChpID0gMTsgaSA8IHJlcF9hcmdzICsgMTsgaSsrKQorCQkJX19hcmd2W2orK10gPSBhcmd2W2ldOworCQlfX2FyZ3ZbaisrXSA9ICItaSI7CisJCV9fYXJndltqKytdID0gIi0iOworCQlfX2FyZ3ZbaisrXSA9IE5VTEw7CisKKwkJZXhlY3ZwKCIvYmluL3NoIiwgKGNoYXIgKiopX19hcmd2KTsKKwkJZnJlZShfX2FyZ3YpOworCQlleGl0KC0xKTsKKwl9CisKKwlpZiAocmVjX3NjcmlwdF9wYXRoKQorCQlzY3JpcHRfcGF0aCA9IHJlY19zY3JpcHRfcGF0aDsKKwlpZiAocmVwX3NjcmlwdF9wYXRoKQorCQlzY3JpcHRfcGF0aCA9IHJlcF9zY3JpcHRfcGF0aDsKKworCWlmIChzY3JpcHRfcGF0aCkgeworCQlzeXN0ZW1fd2lkZSA9IGZhbHNlOworCQlqID0gMDsKKworCQlpZiAocmVjX3NjcmlwdF9wYXRoKQorCQkJc3lzdGVtX3dpZGUgPSAhaGF2ZV9jbWQoYXJnYyAtIDEsICZhcmd2WzFdKTsKKworCQlfX2FyZ3YgPSBtYWxsb2MoKGFyZ2MgKyAyKSAqIHNpemVvZihjb25zdCBjaGFyICopKTsKKwkJaWYgKCFfX2FyZ3YpCisJCQlkaWUoIm1hbGxvYyIpOworCQlfX2FyZ3ZbaisrXSA9ICIvYmluL3NoIjsKKwkJX19hcmd2W2orK10gPSBzY3JpcHRfcGF0aDsKKwkJaWYgKHN5c3RlbV93aWRlKQorCQkJX19hcmd2W2orK10gPSAiLWEiOworCQlmb3IgKGkgPSAyOyBpIDwgYXJnYzsgaSsrKQorCQkJX19hcmd2W2orK10gPSBhcmd2W2ldOworCQlfX2FyZ3ZbaisrXSA9IE5VTEw7CisKKwkJZXhlY3ZwKCIvYmluL3NoIiwgKGNoYXIgKiopX19hcmd2KTsKKwkJZnJlZShfX2FyZ3YpOworCQlleGl0KC0xKTsKKwl9CisKKwlpZiAoc3ltYm9sX19pbml0KCkgPCAwKQorCQlyZXR1cm4gLTE7CisJaWYgKCFzY3JpcHRfbmFtZSkKKwkJc2V0dXBfcGFnZXIoKTsKKworCXNlc3Npb24gPSBwZXJmX3Nlc3Npb25fX25ldyhpbnB1dF9uYW1lLCBPX1JET05MWSwgMCwgZmFsc2UsICZldmVudF9vcHMpOworCWlmIChzZXNzaW9uID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKHN0cmNtcChpbnB1dF9uYW1lLCAiLSIpICYmCisJICAgICFwZXJmX3Nlc3Npb25fX2hhc190cmFjZXMoc2Vzc2lvbiwgInJlY29yZCAtUiIpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChnZW5lcmF0ZV9zY3JpcHRfbGFuZykgeworCQlzdHJ1Y3Qgc3RhdCBwZXJmX3N0YXQ7CisKKwkJaW50IGlucHV0ID0gb3BlbihpbnB1dF9uYW1lLCBPX1JET05MWSk7CisJCWlmIChpbnB1dCA8IDApIHsKKwkJCXBlcnJvcigiZmFpbGVkIHRvIG9wZW4gZmlsZSIpOworCQkJZXhpdCgtMSk7CisJCX0KKworCQllcnIgPSBmc3RhdChpbnB1dCwgJnBlcmZfc3RhdCk7CisJCWlmIChlcnIgPCAwKSB7CisJCQlwZXJyb3IoImZhaWxlZCB0byBzdGF0IGZpbGUiKTsKKwkJCWV4aXQoLTEpOworCQl9CisKKwkJaWYgKCFwZXJmX3N0YXQuc3Rfc2l6ZSkgeworCQkJZnByaW50ZihzdGRlcnIsICJ6ZXJvLXNpemVkIGZpbGUsIG5vdGhpbmcgdG8gZG8hXG4iKTsKKwkJCWV4aXQoMCk7CisJCX0KKworCQlzY3JpcHRpbmdfb3BzID0gc2NyaXB0X3NwZWNfX2xvb2t1cChnZW5lcmF0ZV9zY3JpcHRfbGFuZyk7CisJCWlmICghc2NyaXB0aW5nX29wcykgeworCQkJZnByaW50ZihzdGRlcnIsICJpbnZhbGlkIGxhbmd1YWdlIHNwZWNpZmllciIpOworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJZXJyID0gc2NyaXB0aW5nX29wcy0+Z2VuZXJhdGVfc2NyaXB0KCJwZXJmLXNjcmlwdCIpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoc2NyaXB0X25hbWUpIHsKKwkJZXJyID0gc2NyaXB0aW5nX29wcy0+c3RhcnRfc2NyaXB0KHNjcmlwdF9uYW1lLCBhcmdjLCBhcmd2KTsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0OworCQlwcl9kZWJ1ZygicGVyZiBzY3JpcHQgc3RhcnRlZCB3aXRoIHNjcmlwdCAlc1xuXG4iLCBzY3JpcHRfbmFtZSk7CisJfQorCisJZXJyID0gX19jbWRfc2NyaXB0KHNlc3Npb24pOworCisJcGVyZl9zZXNzaW9uX19kZWxldGUoc2Vzc2lvbik7CisJY2xlYW51cF9zY3JpcHRpbmcoKTsKK291dDoKKwlyZXR1cm4gZXJyOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXN0YXQuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1zdGF0LmMKaW5kZXggYTZiNGQ0NC4uMDJiMmQ4MCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXN0YXQuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tc3RhdC5jCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSAidXRpbC9wYXJzZS1vcHRpb25zLmgiCiAjaW5jbHVkZSAidXRpbC9wYXJzZS1ldmVudHMuaCIKICNpbmNsdWRlICJ1dGlsL2V2ZW50LmgiCisjaW5jbHVkZSAidXRpbC9ldnNlbC5oIgogI2luY2x1ZGUgInV0aWwvZGVidWcuaCIKICNpbmNsdWRlICJ1dGlsL2hlYWRlci5oIgogI2luY2x1ZGUgInV0aWwvY3B1bWFwLmgiCkBAIC01Miw2ICs1Myw4IEBACiAjaW5jbHVkZSA8bWF0aC5oPgogI2luY2x1ZGUgPGxvY2FsZS5oPgogCisjZGVmaW5lIERFRkFVTFRfU0VQQVJBVE9SCSIgIgorCiBzdGF0aWMgc3RydWN0IHBlcmZfZXZlbnRfYXR0ciBkZWZhdWx0X2F0dHJzW10gPSB7CiAKICAgeyAudHlwZSA9IFBFUkZfVFlQRV9TT0ZUV0FSRSwgLmNvbmZpZyA9IFBFUkZfQ09VTlRfU1dfVEFTS19DTE9DSwkJfSwKQEAgLTY5LDI1ICs3MiwyMyBAQAogfTsKIAogc3RhdGljIGJvb2wJCQlzeXN0ZW1fd2lkZQkJCT0gIGZhbHNlOwotc3RhdGljIGludAkJCW5yX2NwdXMJCQkJPSAgMDsKK3N0YXRpYyBzdHJ1Y3QgY3B1X21hcAkJKmNwdXM7CiBzdGF0aWMgaW50CQkJcnVuX2lkeAkJCQk9ICAwOwogCiBzdGF0aWMgaW50CQkJcnVuX2NvdW50CQkJPSAgMTsKIHN0YXRpYyBib29sCQkJbm9faW5oZXJpdAkJCT0gZmFsc2U7CiBzdGF0aWMgYm9vbAkJCXNjYWxlCQkJCT0gIHRydWU7CitzdGF0aWMgYm9vbAkJCW5vX2FnZ3IJCQkJPSBmYWxzZTsKIHN0YXRpYyBwaWRfdAkJCXRhcmdldF9waWQJCQk9IC0xOwogc3RhdGljIHBpZF90CQkJdGFyZ2V0X3RpZAkJCT0gLTE7Ci1zdGF0aWMgcGlkX3QJCQkqYWxsX3RpZHMJCQk9ICBOVUxMOwotc3RhdGljIGludAkJCXRocmVhZF9udW0JCQk9ICAwOworc3RhdGljIHN0cnVjdCB0aHJlYWRfbWFwCSp0aHJlYWRzOwogc3RhdGljIHBpZF90CQkJY2hpbGRfcGlkCQkJPSAtMTsKIHN0YXRpYyBib29sCQkJbnVsbF9ydW4JCQk9ICBmYWxzZTsKLXN0YXRpYyBib29sCQkJYmlnX251bQkJCQk9ICBmYWxzZTsKK3N0YXRpYyBib29sCQkJYmlnX251bQkJCQk9ICB0cnVlOworc3RhdGljIGludAkJCWJpZ19udW1fb3B0CQkJPSAgLTE7CiBzdGF0aWMgY29uc3QgY2hhcgkJKmNwdV9saXN0OwotCi0KLXN0YXRpYyBpbnQJCQkqZmRbTUFYX05SX0NQVVNdW01BWF9DT1VOVEVSU107Ci0KLXN0YXRpYyBpbnQJCQlldmVudF9zY2FsZWRbTUFYX0NPVU5URVJTXTsKK3N0YXRpYyBjb25zdCBjaGFyCQkqY3N2X3NlcAkJCT0gTlVMTDsKK3N0YXRpYyBib29sCQkJY3N2X291dHB1dAkJCT0gZmFsc2U7CiAKIHN0YXRpYyB2b2xhdGlsZSBpbnQgZG9uZSA9IDA7CiAKQEAgLTk2LDYgKzk3LDIyIEBACiAJZG91YmxlIG4sIG1lYW4sIE0yOwogfTsKIAorc3RydWN0IHBlcmZfc3RhdCB7CisJc3RydWN0IHN0YXRzCSAgcmVzX3N0YXRzWzNdOworfTsKKworc3RhdGljIGludCBwZXJmX2V2c2VsX19hbGxvY19zdGF0X3ByaXYoc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsKQoreworCWV2c2VsLT5wcml2ID0gemFsbG9jKHNpemVvZihzdHJ1Y3QgcGVyZl9zdGF0KSk7CisJcmV0dXJuIGV2c2VsLT5wcml2ID09IE5VTEwgPyAtRU5PTUVNIDogMDsKK30KKworc3RhdGljIHZvaWQgcGVyZl9ldnNlbF9fZnJlZV9zdGF0X3ByaXYoc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsKQoreworCWZyZWUoZXZzZWwtPnByaXYpOworCWV2c2VsLT5wcml2ID0gTlVMTDsKK30KKwogc3RhdGljIHZvaWQgdXBkYXRlX3N0YXRzKHN0cnVjdCBzdGF0cyAqc3RhdHMsIHU2NCB2YWwpCiB7CiAJZG91YmxlIGRlbHRhOwpAQCAtMTM1LDY5ICsxNTIsMzggQEAKIAlyZXR1cm4gc3FydCh2YXJpYW5jZV9tZWFuKTsKIH0KIAotc3RydWN0IHN0YXRzCQkJZXZlbnRfcmVzX3N0YXRzW01BWF9DT1VOVEVSU11bM107Ci1zdHJ1Y3Qgc3RhdHMJCQlydW50aW1lX25zZWNzX3N0YXRzOworc3RydWN0IHN0YXRzCQkJcnVudGltZV9uc2Vjc19zdGF0c1tNQVhfTlJfQ1BVU107CitzdHJ1Y3Qgc3RhdHMJCQlydW50aW1lX2N5Y2xlc19zdGF0c1tNQVhfTlJfQ1BVU107CitzdHJ1Y3Qgc3RhdHMJCQlydW50aW1lX2JyYW5jaGVzX3N0YXRzW01BWF9OUl9DUFVTXTsKIHN0cnVjdCBzdGF0cwkJCXdhbGx0aW1lX25zZWNzX3N0YXRzOwotc3RydWN0IHN0YXRzCQkJcnVudGltZV9jeWNsZXNfc3RhdHM7Ci1zdHJ1Y3Qgc3RhdHMJCQlydW50aW1lX2JyYW5jaGVzX3N0YXRzOwogCi0jZGVmaW5lIE1BVENIX0VWRU5UKHQsIGMsIGNvdW50ZXIpCQkJXAotCShhdHRyc1tjb3VudGVyXS50eXBlID09IFBFUkZfVFlQRV8jI3QgJiYJXAotCSBhdHRyc1tjb3VudGVyXS5jb25maWcgPT0gUEVSRl9DT1VOVF8jI2MpCi0KLSNkZWZpbmUgRVJSX1BFUkZfT1BFTiBcCi0iRXJyb3I6IGNvdW50ZXIgJWQsIHN5c19wZXJmX2V2ZW50X29wZW4oKSBzeXNjYWxsIHJldHVybmVkIHdpdGggJWQgKCVzKVxuIgotCi1zdGF0aWMgaW50IGNyZWF0ZV9wZXJmX3N0YXRfY291bnRlcihpbnQgY291bnRlcikKK3N0YXRpYyBpbnQgY3JlYXRlX3BlcmZfc3RhdF9jb3VudGVyKHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCkKIHsKLQlzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyICphdHRyID0gYXR0cnMgKyBjb3VudGVyOwotCWludCB0aHJlYWQ7Ci0JaW50IG5jcmVhdGVkID0gMDsKKwlzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyICphdHRyID0gJmV2c2VsLT5hdHRyOwogCiAJaWYgKHNjYWxlKQogCQlhdHRyLT5yZWFkX2Zvcm1hdCA9IFBFUkZfRk9STUFUX1RPVEFMX1RJTUVfRU5BQkxFRCB8CiAJCQkJICAgIFBFUkZfRk9STUFUX1RPVEFMX1RJTUVfUlVOTklORzsKIAotCWlmIChzeXN0ZW1fd2lkZSkgewotCQlpbnQgY3B1OworCWlmIChzeXN0ZW1fd2lkZSkKKwkJcmV0dXJuIHBlcmZfZXZzZWxfX29wZW5fcGVyX2NwdShldnNlbCwgY3B1cyk7CiAKLQkJZm9yIChjcHUgPSAwOyBjcHUgPCBucl9jcHVzOyBjcHUrKykgewotCQkJZmRbY3B1XVtjb3VudGVyXVswXSA9IHN5c19wZXJmX2V2ZW50X29wZW4oYXR0ciwKLQkJCQkJLTEsIGNwdW1hcFtjcHVdLCAtMSwgMCk7Ci0JCQlpZiAoZmRbY3B1XVtjb3VudGVyXVswXSA8IDApCi0JCQkJcHJfZGVidWcoRVJSX1BFUkZfT1BFTiwgY291bnRlciwKLQkJCQkJIGZkW2NwdV1bY291bnRlcl1bMF0sIHN0cmVycm9yKGVycm5vKSk7Ci0JCQllbHNlCi0JCQkJKytuY3JlYXRlZDsKLQkJfQotCX0gZWxzZSB7Ci0JCWF0dHItPmluaGVyaXQgPSAhbm9faW5oZXJpdDsKLQkJaWYgKHRhcmdldF9waWQgPT0gLTEgJiYgdGFyZ2V0X3RpZCA9PSAtMSkgewotCQkJYXR0ci0+ZGlzYWJsZWQgPSAxOwotCQkJYXR0ci0+ZW5hYmxlX29uX2V4ZWMgPSAxOwotCQl9Ci0JCWZvciAodGhyZWFkID0gMDsgdGhyZWFkIDwgdGhyZWFkX251bTsgdGhyZWFkKyspIHsKLQkJCWZkWzBdW2NvdW50ZXJdW3RocmVhZF0gPSBzeXNfcGVyZl9ldmVudF9vcGVuKGF0dHIsCi0JCQkJYWxsX3RpZHNbdGhyZWFkXSwgLTEsIC0xLCAwKTsKLQkJCWlmIChmZFswXVtjb3VudGVyXVt0aHJlYWRdIDwgMCkKLQkJCQlwcl9kZWJ1ZyhFUlJfUEVSRl9PUEVOLCBjb3VudGVyLAotCQkJCQkgZmRbMF1bY291bnRlcl1bdGhyZWFkXSwKLQkJCQkJIHN0cmVycm9yKGVycm5vKSk7Ci0JCQllbHNlCi0JCQkJKytuY3JlYXRlZDsKLQkJfQorCWF0dHItPmluaGVyaXQgPSAhbm9faW5oZXJpdDsKKwlpZiAodGFyZ2V0X3BpZCA9PSAtMSAmJiB0YXJnZXRfdGlkID09IC0xKSB7CisJCWF0dHItPmRpc2FibGVkID0gMTsKKwkJYXR0ci0+ZW5hYmxlX29uX2V4ZWMgPSAxOwogCX0KIAotCXJldHVybiBuY3JlYXRlZDsKKwlyZXR1cm4gcGVyZl9ldnNlbF9fb3Blbl9wZXJfdGhyZWFkKGV2c2VsLCB0aHJlYWRzKTsKIH0KIAogLyoKICAqIERvZXMgdGhlIGNvdW50ZXIgaGF2ZSBuc2VjcyBhcyBhIHVuaXQ/CiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IG5zZWNfY291bnRlcihpbnQgY291bnRlcikKK3N0YXRpYyBpbmxpbmUgaW50IG5zZWNfY291bnRlcihzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwpCiB7Ci0JaWYgKE1BVENIX0VWRU5UKFNPRlRXQVJFLCBTV19DUFVfQ0xPQ0ssIGNvdW50ZXIpIHx8Ci0JICAgIE1BVENIX0VWRU5UKFNPRlRXQVJFLCBTV19UQVNLX0NMT0NLLCBjb3VudGVyKSkKKwlpZiAocGVyZl9ldnNlbF9fbWF0Y2goZXZzZWwsIFNPRlRXQVJFLCBTV19DUFVfQ0xPQ0spIHx8CisJICAgIHBlcmZfZXZzZWxfX21hdGNoKGV2c2VsLCBTT0ZUV0FSRSwgU1dfVEFTS19DTE9DSykpCiAJCXJldHVybiAxOwogCiAJcmV0dXJuIDA7CkBAIC0yMDUsNTUgKzE5MSwxOSBAQAogCiAvKgogICogUmVhZCBvdXQgdGhlIHJlc3VsdHMgb2YgYSBzaW5nbGUgY291bnRlcjoKKyAqIGFnZ3JlZ2F0ZSBjb3VudHMgYWNyb3NzIENQVXMgaW4gc3lzdGVtLXdpZGUgbW9kZQogICovCi1zdGF0aWMgdm9pZCByZWFkX2NvdW50ZXIoaW50IGNvdW50ZXIpCitzdGF0aWMgaW50IHJlYWRfY291bnRlcl9hZ2dyKHN0cnVjdCBwZXJmX2V2c2VsICpjb3VudGVyKQogewotCXU2NCBjb3VudFszXSwgc2luZ2xlX2NvdW50WzNdOwotCWludCBjcHU7Ci0Jc2l6ZV90IHJlcywgbnY7Ci0JaW50IHNjYWxlZDsKLQlpbnQgaSwgdGhyZWFkOworCXN0cnVjdCBwZXJmX3N0YXQgKnBzID0gY291bnRlci0+cHJpdjsKKwl1NjQgKmNvdW50ID0gY291bnRlci0+Y291bnRzLT5hZ2dyLnZhbHVlczsKKwlpbnQgaTsKIAotCWNvdW50WzBdID0gY291bnRbMV0gPSBjb3VudFsyXSA9IDA7Ci0KLQludiA9IHNjYWxlID8gMyA6IDE7Ci0JZm9yIChjcHUgPSAwOyBjcHUgPCBucl9jcHVzOyBjcHUrKykgewotCQlmb3IgKHRocmVhZCA9IDA7IHRocmVhZCA8IHRocmVhZF9udW07IHRocmVhZCsrKSB7Ci0JCQlpZiAoZmRbY3B1XVtjb3VudGVyXVt0aHJlYWRdIDwgMCkKLQkJCQljb250aW51ZTsKLQotCQkJcmVzID0gcmVhZChmZFtjcHVdW2NvdW50ZXJdW3RocmVhZF0sCi0JCQkJCXNpbmdsZV9jb3VudCwgbnYgKiBzaXplb2YodTY0KSk7Ci0JCQlhc3NlcnQocmVzID09IG52ICogc2l6ZW9mKHU2NCkpOwotCi0JCQljbG9zZShmZFtjcHVdW2NvdW50ZXJdW3RocmVhZF0pOwotCQkJZmRbY3B1XVtjb3VudGVyXVt0aHJlYWRdID0gLTE7Ci0KLQkJCWNvdW50WzBdICs9IHNpbmdsZV9jb3VudFswXTsKLQkJCWlmIChzY2FsZSkgewotCQkJCWNvdW50WzFdICs9IHNpbmdsZV9jb3VudFsxXTsKLQkJCQljb3VudFsyXSArPSBzaW5nbGVfY291bnRbMl07Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlzY2FsZWQgPSAwOwotCWlmIChzY2FsZSkgewotCQlpZiAoY291bnRbMl0gPT0gMCkgewotCQkJZXZlbnRfc2NhbGVkW2NvdW50ZXJdID0gLTE7Ci0JCQljb3VudFswXSA9IDA7Ci0JCQlyZXR1cm47Ci0JCX0KLQotCQlpZiAoY291bnRbMl0gPCBjb3VudFsxXSkgewotCQkJZXZlbnRfc2NhbGVkW2NvdW50ZXJdID0gMTsKLQkJCWNvdW50WzBdID0gKHVuc2lnbmVkIGxvbmcgbG9uZykKLQkJCQkoKGRvdWJsZSljb3VudFswXSAqIGNvdW50WzFdIC8gY291bnRbMl0gKyAwLjUpOwotCQl9Ci0JfQorCWlmIChfX3BlcmZfZXZzZWxfX3JlYWQoY291bnRlciwgY3B1cy0+bnIsIHRocmVhZHMtPm5yLCBzY2FsZSkgPCAwKQorCQlyZXR1cm4gLTE7CiAKIAlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQotCQl1cGRhdGVfc3RhdHMoJmV2ZW50X3Jlc19zdGF0c1tjb3VudGVyXVtpXSwgY291bnRbaV0pOworCQl1cGRhdGVfc3RhdHMoJnBzLT5yZXNfc3RhdHNbaV0sIGNvdW50W2ldKTsKIAogCWlmICh2ZXJib3NlKSB7CiAJCWZwcmludGYoc3RkZXJyLCAiJXM6ICVMZCAlTGQgJUxkXG4iLCBldmVudF9uYW1lKGNvdW50ZXIpLApAQCAtMjYzLDI2ICsyMTMsNTEgQEAKIAkvKgogCSAqIFNhdmUgdGhlIGZ1bGwgcnVudGltZSAtIHRvIGFsbG93IG5vcm1hbGl6YXRpb24gZHVyaW5nIHByaW50b3V0OgogCSAqLwotCWlmIChNQVRDSF9FVkVOVChTT0ZUV0FSRSwgU1dfVEFTS19DTE9DSywgY291bnRlcikpCi0JCXVwZGF0ZV9zdGF0cygmcnVudGltZV9uc2Vjc19zdGF0cywgY291bnRbMF0pOwotCWlmIChNQVRDSF9FVkVOVChIQVJEV0FSRSwgSFdfQ1BVX0NZQ0xFUywgY291bnRlcikpCi0JCXVwZGF0ZV9zdGF0cygmcnVudGltZV9jeWNsZXNfc3RhdHMsIGNvdW50WzBdKTsKLQlpZiAoTUFUQ0hfRVZFTlQoSEFSRFdBUkUsIEhXX0JSQU5DSF9JTlNUUlVDVElPTlMsIGNvdW50ZXIpKQotCQl1cGRhdGVfc3RhdHMoJnJ1bnRpbWVfYnJhbmNoZXNfc3RhdHMsIGNvdW50WzBdKTsKKwlpZiAocGVyZl9ldnNlbF9fbWF0Y2goY291bnRlciwgU09GVFdBUkUsIFNXX1RBU0tfQ0xPQ0spKQorCQl1cGRhdGVfc3RhdHMoJnJ1bnRpbWVfbnNlY3Nfc3RhdHNbMF0sIGNvdW50WzBdKTsKKwlpZiAocGVyZl9ldnNlbF9fbWF0Y2goY291bnRlciwgSEFSRFdBUkUsIEhXX0NQVV9DWUNMRVMpKQorCQl1cGRhdGVfc3RhdHMoJnJ1bnRpbWVfY3ljbGVzX3N0YXRzWzBdLCBjb3VudFswXSk7CisJaWYgKHBlcmZfZXZzZWxfX21hdGNoKGNvdW50ZXIsIEhBUkRXQVJFLCBIV19CUkFOQ0hfSU5TVFJVQ1RJT05TKSkKKwkJdXBkYXRlX3N0YXRzKCZydW50aW1lX2JyYW5jaGVzX3N0YXRzWzBdLCBjb3VudFswXSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJlYWQgb3V0IHRoZSByZXN1bHRzIG9mIGEgc2luZ2xlIGNvdW50ZXI6CisgKiBkbyBub3QgYWdncmVnYXRlIGNvdW50cyBhY3Jvc3MgQ1BVcyBpbiBzeXN0ZW0td2lkZSBtb2RlCisgKi8KK3N0YXRpYyBpbnQgcmVhZF9jb3VudGVyKHN0cnVjdCBwZXJmX2V2c2VsICpjb3VudGVyKQoreworCXU2NCAqY291bnQ7CisJaW50IGNwdTsKKworCWZvciAoY3B1ID0gMDsgY3B1IDwgY3B1cy0+bnI7IGNwdSsrKSB7CisJCWlmIChfX3BlcmZfZXZzZWxfX3JlYWRfb25fY3B1KGNvdW50ZXIsIGNwdSwgMCwgc2NhbGUpIDwgMCkKKwkJCXJldHVybiAtMTsKKworCQljb3VudCA9IGNvdW50ZXItPmNvdW50cy0+Y3B1W2NwdV0udmFsdWVzOworCisJCWlmIChwZXJmX2V2c2VsX19tYXRjaChjb3VudGVyLCBTT0ZUV0FSRSwgU1dfVEFTS19DTE9DSykpCisJCQl1cGRhdGVfc3RhdHMoJnJ1bnRpbWVfbnNlY3Nfc3RhdHNbY3B1XSwgY291bnRbMF0pOworCQlpZiAocGVyZl9ldnNlbF9fbWF0Y2goY291bnRlciwgSEFSRFdBUkUsIEhXX0NQVV9DWUNMRVMpKQorCQkJdXBkYXRlX3N0YXRzKCZydW50aW1lX2N5Y2xlc19zdGF0c1tjcHVdLCBjb3VudFswXSk7CisJCWlmIChwZXJmX2V2c2VsX19tYXRjaChjb3VudGVyLCBIQVJEV0FSRSwgSFdfQlJBTkNIX0lOU1RSVUNUSU9OUykpCisJCQl1cGRhdGVfc3RhdHMoJnJ1bnRpbWVfYnJhbmNoZXNfc3RhdHNbY3B1XSwgY291bnRbMF0pOworCX0KKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHJ1bl9wZXJmX3N0YXQoaW50IGFyZ2MgX191c2VkLCBjb25zdCBjaGFyICoqYXJndikKIHsKIAl1bnNpZ25lZCBsb25nIGxvbmcgdDAsIHQxOworCXN0cnVjdCBwZXJmX2V2c2VsICpjb3VudGVyOwogCWludCBzdGF0dXMgPSAwOwotCWludCBjb3VudGVyLCBuY3JlYXRlZCA9IDA7CiAJaW50IGNoaWxkX3JlYWR5X3BpcGVbMl0sIGdvX3BpcGVbMl07CiAJY29uc3QgYm9vbCBmb3JrcyA9IChhcmdjID4gMCk7CiAJY2hhciBidWY7CiAKLQlpZiAoIXN5c3RlbV93aWRlKQotCQlucl9jcHVzID0gMTsKLQogCWlmIChmb3JrcyAmJiAocGlwZShjaGlsZF9yZWFkeV9waXBlKSA8IDAgfHwgcGlwZShnb19waXBlKSA8IDApKSB7CiAJCXBlcnJvcigiZmFpbGVkIHRvIGNyZWF0ZSBwaXBlcyIpOwogCQlleGl0KDEpOwpAQCAtMzIyLDcgKzI5Nyw3IEBACiAJCX0KIAogCQlpZiAodGFyZ2V0X3RpZCA9PSAtMSAmJiB0YXJnZXRfcGlkID09IC0xICYmICFzeXN0ZW1fd2lkZSkKLQkJCWFsbF90aWRzWzBdID0gY2hpbGRfcGlkOworCQkJdGhyZWFkcy0+bWFwWzBdID0gY2hpbGRfcGlkOwogCiAJCS8qCiAJCSAqIFdhaXQgZm9yIHRoZSBjaGlsZCB0byBiZSByZWFkeSB0byBleGVjLgpAQCAtMzM0LDE2ICszMDksMjMgQEAKIAkJY2xvc2UoY2hpbGRfcmVhZHlfcGlwZVswXSk7CiAJfQogCi0JZm9yIChjb3VudGVyID0gMDsgY291bnRlciA8IG5yX2NvdW50ZXJzOyBjb3VudGVyKyspCi0JCW5jcmVhdGVkICs9IGNyZWF0ZV9wZXJmX3N0YXRfY291bnRlcihjb3VudGVyKTsKLQotCWlmIChuY3JlYXRlZCA9PSAwKSB7Ci0JCXByX2VycigiTm8gcGVybWlzc2lvbiB0byBjb2xsZWN0ICVzc3RhdHMuXG4iCi0JCSAgICAgICAiQ29uc2lkZXIgdHdlYWtpbmcgL3Byb2Mvc3lzL2tlcm5lbC9wZXJmX2V2ZW50X3BhcmFub2lkLlxuIiwKLQkJICAgICAgIHN5c3RlbV93aWRlID8gInN5c3RlbS13aWRlICIgOiAiIik7Ci0JCWlmIChjaGlsZF9waWQgIT0gLTEpCi0JCQlraWxsKGNoaWxkX3BpZCwgU0lHVEVSTSk7Ci0JCXJldHVybiAtMTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvdW50ZXIsICZldnNlbF9saXN0LCBub2RlKSB7CisJCWlmIChjcmVhdGVfcGVyZl9zdGF0X2NvdW50ZXIoY291bnRlcikgPCAwKSB7CisJCQlpZiAoZXJybm8gPT0gLUVQRVJNIHx8IGVycm5vID09IC1FQUNDRVMpIHsKKwkJCQllcnJvcigiWW91IG1heSBub3QgaGF2ZSBwZXJtaXNzaW9uIHRvIGNvbGxlY3QgJXNzdGF0cy5cbiIKKwkJCQkgICAgICAiXHQgQ29uc2lkZXIgdHdlYWtpbmciCisJCQkJICAgICAgIiAvcHJvYy9zeXMva2VybmVsL3BlcmZfZXZlbnRfcGFyYW5vaWQgb3IgcnVubmluZyBhcyByb290LiIsCisJCQkJICAgICAgc3lzdGVtX3dpZGUgPyAic3lzdGVtLXdpZGUgIiA6ICIiKTsKKwkJCX0gZWxzZSB7CisJCQkJZXJyb3IoIm9wZW5fY291bnRlciByZXR1cm5lZCB3aXRoICVkICglcykuICIKKwkJCQkgICAgICAiL2Jpbi9kbWVzZyBtYXkgcHJvdmlkZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLlxuIiwKKwkJCQkgICAgICAgZXJybm8sIHN0cmVycm9yKGVycm5vKSk7CisJCQl9CisJCQlpZiAoY2hpbGRfcGlkICE9IC0xKQorCQkJCWtpbGwoY2hpbGRfcGlkLCBTSUdURVJNKTsKKwkJCWRpZSgiTm90IGFsbCBldmVudHMgY291bGQgYmUgb3BlbmVkLlxuIik7CisJCQlyZXR1cm4gLTE7CisJCX0KIAl9CiAKIAkvKgpAQCAtMzYyLDYwICszNDQsOTcgQEAKIAogCXVwZGF0ZV9zdGF0cygmd2FsbHRpbWVfbnNlY3Nfc3RhdHMsIHQxIC0gdDApOwogCi0JZm9yIChjb3VudGVyID0gMDsgY291bnRlciA8IG5yX2NvdW50ZXJzOyBjb3VudGVyKyspCi0JCXJlYWRfY291bnRlcihjb3VudGVyKTsKKwlpZiAobm9fYWdncikgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvdW50ZXIsICZldnNlbF9saXN0LCBub2RlKSB7CisJCQlyZWFkX2NvdW50ZXIoY291bnRlcik7CisJCQlwZXJmX2V2c2VsX19jbG9zZV9mZChjb3VudGVyLCBjcHVzLT5uciwgMSk7CisJCX0KKwl9IGVsc2UgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvdW50ZXIsICZldnNlbF9saXN0LCBub2RlKSB7CisJCQlyZWFkX2NvdW50ZXJfYWdncihjb3VudGVyKTsKKwkJCXBlcmZfZXZzZWxfX2Nsb3NlX2ZkKGNvdW50ZXIsIGNwdXMtPm5yLCB0aHJlYWRzLT5ucik7CisJCX0KKwl9CiAKIAlyZXR1cm4gV0VYSVRTVEFUVVMoc3RhdHVzKTsKIH0KIAotc3RhdGljIHZvaWQgcHJpbnRfbm9pc2UoaW50IGNvdW50ZXIsIGRvdWJsZSBhdmcpCitzdGF0aWMgdm9pZCBwcmludF9ub2lzZShzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwsIGRvdWJsZSBhdmcpCiB7CisJc3RydWN0IHBlcmZfc3RhdCAqcHM7CisKIAlpZiAocnVuX2NvdW50ID09IDEpCiAJCXJldHVybjsKIAorCXBzID0gZXZzZWwtPnByaXY7CiAJZnByaW50ZihzdGRlcnIsICIgICAoICstICU3LjNmJSUgKSIsCi0JCQkxMDAgKiBzdGRkZXZfc3RhdHMoJmV2ZW50X3Jlc19zdGF0c1tjb3VudGVyXVswXSkgLyBhdmcpOworCQkJMTAwICogc3RkZGV2X3N0YXRzKCZwcy0+cmVzX3N0YXRzWzBdKSAvIGF2Zyk7CiB9CiAKLXN0YXRpYyB2b2lkIG5zZWNfcHJpbnRvdXQoaW50IGNvdW50ZXIsIGRvdWJsZSBhdmcpCitzdGF0aWMgdm9pZCBuc2VjX3ByaW50b3V0KGludCBjcHUsIHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCwgZG91YmxlIGF2ZykKIHsKIAlkb3VibGUgbXNlY3MgPSBhdmcgLyAxZTY7CisJY2hhciBjcHVzdHJbMTZdID0geyAnXDAnLCB9OworCWNvbnN0IGNoYXIgKmZtdCA9IGNzdl9vdXRwdXQgPyAiJXMlLjZmJXMlcyIgOiAiJXMlMTguNmYlcyUtMjRzIjsKIAotCWZwcmludGYoc3RkZXJyLCAiICUxOC42ZiAgJS0yNHMiLCBtc2VjcywgZXZlbnRfbmFtZShjb3VudGVyKSk7CisJaWYgKG5vX2FnZ3IpCisJCXNwcmludGYoY3B1c3RyLCAiQ1BVJSpkJXMiLAorCQkJY3N2X291dHB1dCA/IDAgOiAtNCwKKwkJCWNwdXMtPm1hcFtjcHVdLCBjc3Zfc2VwKTsKIAotCWlmIChNQVRDSF9FVkVOVChTT0ZUV0FSRSwgU1dfVEFTS19DTE9DSywgY291bnRlcikpIHsKKwlmcHJpbnRmKHN0ZGVyciwgZm10LCBjcHVzdHIsIG1zZWNzLCBjc3Zfc2VwLCBldmVudF9uYW1lKGV2c2VsKSk7CisKKwlpZiAoY3N2X291dHB1dCkKKwkJcmV0dXJuOworCisJaWYgKHBlcmZfZXZzZWxfX21hdGNoKGV2c2VsLCBTT0ZUV0FSRSwgU1dfVEFTS19DTE9DSykpCiAJCWZwcmludGYoc3RkZXJyLCAiICMgJTEwLjNmIENQVXMgIiwKIAkJCQlhdmcgLyBhdmdfc3RhdHMoJndhbGx0aW1lX25zZWNzX3N0YXRzKSk7Ci0JfQogfQogCi1zdGF0aWMgdm9pZCBhYnNfcHJpbnRvdXQoaW50IGNvdW50ZXIsIGRvdWJsZSBhdmcpCitzdGF0aWMgdm9pZCBhYnNfcHJpbnRvdXQoaW50IGNwdSwgc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsLCBkb3VibGUgYXZnKQogewogCWRvdWJsZSB0b3RhbCwgcmF0aW8gPSAwLjA7CisJY2hhciBjcHVzdHJbMTZdID0geyAnXDAnLCB9OworCWNvbnN0IGNoYXIgKmZtdDsKIAotCWlmIChiaWdfbnVtKQotCQlmcHJpbnRmKHN0ZGVyciwgIiAlJzE4LjBmICAlLTI0cyIsIGF2ZywgZXZlbnRfbmFtZShjb3VudGVyKSk7CisJaWYgKGNzdl9vdXRwdXQpCisJCWZtdCA9ICIlcyUuMGYlcyVzIjsKKwllbHNlIGlmIChiaWdfbnVtKQorCQlmbXQgPSAiJXMlJzE4LjBmJXMlLTI0cyI7CiAJZWxzZQotCQlmcHJpbnRmKHN0ZGVyciwgIiAlMTguMGYgICUtMjRzIiwgYXZnLCBldmVudF9uYW1lKGNvdW50ZXIpKTsKKwkJZm10ID0gIiVzJTE4LjBmJXMlLTI0cyI7CiAKLQlpZiAoTUFUQ0hfRVZFTlQoSEFSRFdBUkUsIEhXX0lOU1RSVUNUSU9OUywgY291bnRlcikpIHsKLQkJdG90YWwgPSBhdmdfc3RhdHMoJnJ1bnRpbWVfY3ljbGVzX3N0YXRzKTsKKwlpZiAobm9fYWdncikKKwkJc3ByaW50ZihjcHVzdHIsICJDUFUlKmQlcyIsCisJCQljc3Zfb3V0cHV0ID8gMCA6IC00LAorCQkJY3B1cy0+bWFwW2NwdV0sIGNzdl9zZXApOworCWVsc2UKKwkJY3B1ID0gMDsKKworCWZwcmludGYoc3RkZXJyLCBmbXQsIGNwdXN0ciwgYXZnLCBjc3Zfc2VwLCBldmVudF9uYW1lKGV2c2VsKSk7CisKKwlpZiAoY3N2X291dHB1dCkKKwkJcmV0dXJuOworCisJaWYgKHBlcmZfZXZzZWxfX21hdGNoKGV2c2VsLCBIQVJEV0FSRSwgSFdfSU5TVFJVQ1RJT05TKSkgeworCQl0b3RhbCA9IGF2Z19zdGF0cygmcnVudGltZV9jeWNsZXNfc3RhdHNbY3B1XSk7CiAKIAkJaWYgKHRvdGFsKQogCQkJcmF0aW8gPSBhdmcgLyB0b3RhbDsKIAogCQlmcHJpbnRmKHN0ZGVyciwgIiAjICUxMC4zZiBJUEMgICIsIHJhdGlvKTsKLQl9IGVsc2UgaWYgKE1BVENIX0VWRU5UKEhBUkRXQVJFLCBIV19CUkFOQ0hfTUlTU0VTLCBjb3VudGVyKSAmJgotCQkJcnVudGltZV9icmFuY2hlc19zdGF0cy5uICE9IDApIHsKLQkJdG90YWwgPSBhdmdfc3RhdHMoJnJ1bnRpbWVfYnJhbmNoZXNfc3RhdHMpOworCX0gZWxzZSBpZiAocGVyZl9ldnNlbF9fbWF0Y2goZXZzZWwsIEhBUkRXQVJFLCBIV19CUkFOQ0hfTUlTU0VTKSAmJgorCQkJcnVudGltZV9icmFuY2hlc19zdGF0c1tjcHVdLm4gIT0gMCkgeworCQl0b3RhbCA9IGF2Z19zdGF0cygmcnVudGltZV9icmFuY2hlc19zdGF0c1tjcHVdKTsKIAogCQlpZiAodG90YWwpCiAJCQlyYXRpbyA9IGF2ZyAqIDEwMCAvIHRvdGFsOwogCiAJCWZwcmludGYoc3RkZXJyLCAiICMgJTEwLjNmICUlICAgICIsIHJhdGlvKTsKIAotCX0gZWxzZSBpZiAocnVudGltZV9uc2Vjc19zdGF0cy5uICE9IDApIHsKLQkJdG90YWwgPSBhdmdfc3RhdHMoJnJ1bnRpbWVfbnNlY3Nfc3RhdHMpOworCX0gZWxzZSBpZiAocnVudGltZV9uc2Vjc19zdGF0c1tjcHVdLm4gIT0gMCkgeworCQl0b3RhbCA9IGF2Z19zdGF0cygmcnVudGltZV9uc2Vjc19zdGF0c1tjcHVdKTsKIAogCQlpZiAodG90YWwpCiAJCQlyYXRpbyA9IDEwMDAuMCAqIGF2ZyAvIHRvdGFsOwpAQCAtNDI2LDMwICs0NDUsMzggQEAKIAogLyoKICAqIFByaW50IG91dCB0aGUgcmVzdWx0cyBvZiBhIHNpbmdsZSBjb3VudGVyOgorICogYWdncmVnYXRlZCBjb3VudHMgaW4gc3lzdGVtLXdpZGUgbW9kZQogICovCi1zdGF0aWMgdm9pZCBwcmludF9jb3VudGVyKGludCBjb3VudGVyKQorc3RhdGljIHZvaWQgcHJpbnRfY291bnRlcl9hZ2dyKHN0cnVjdCBwZXJmX2V2c2VsICpjb3VudGVyKQogewotCWRvdWJsZSBhdmcgPSBhdmdfc3RhdHMoJmV2ZW50X3Jlc19zdGF0c1tjb3VudGVyXVswXSk7Ci0JaW50IHNjYWxlZCA9IGV2ZW50X3NjYWxlZFtjb3VudGVyXTsKKwlzdHJ1Y3QgcGVyZl9zdGF0ICpwcyA9IGNvdW50ZXItPnByaXY7CisJZG91YmxlIGF2ZyA9IGF2Z19zdGF0cygmcHMtPnJlc19zdGF0c1swXSk7CisJaW50IHNjYWxlZCA9IGNvdW50ZXItPmNvdW50cy0+c2NhbGVkOwogCiAJaWYgKHNjYWxlZCA9PSAtMSkgewotCQlmcHJpbnRmKHN0ZGVyciwgIiAlMThzICAlLTI0c1xuIiwKLQkJCSI8bm90IGNvdW50ZWQ+IiwgZXZlbnRfbmFtZShjb3VudGVyKSk7CisJCWZwcmludGYoc3RkZXJyLCAiJSpzJXMlLTI0c1xuIiwKKwkJCWNzdl9vdXRwdXQgPyAwIDogMTgsCisJCQkiPG5vdCBjb3VudGVkPiIsIGNzdl9zZXAsIGV2ZW50X25hbWUoY291bnRlcikpOwogCQlyZXR1cm47CiAJfQogCiAJaWYgKG5zZWNfY291bnRlcihjb3VudGVyKSkKLQkJbnNlY19wcmludG91dChjb3VudGVyLCBhdmcpOworCQluc2VjX3ByaW50b3V0KC0xLCBjb3VudGVyLCBhdmcpOwogCWVsc2UKLQkJYWJzX3ByaW50b3V0KGNvdW50ZXIsIGF2Zyk7CisJCWFic19wcmludG91dCgtMSwgY291bnRlciwgYXZnKTsKKworCWlmIChjc3Zfb3V0cHV0KSB7CisJCWZwdXRjKCdcbicsIHN0ZGVycik7CisJCXJldHVybjsKKwl9CiAKIAlwcmludF9ub2lzZShjb3VudGVyLCBhdmcpOwogCiAJaWYgKHNjYWxlZCkgewogCQlkb3VibGUgYXZnX2VuYWJsZWQsIGF2Z19ydW5uaW5nOwogCi0JCWF2Z19lbmFibGVkID0gYXZnX3N0YXRzKCZldmVudF9yZXNfc3RhdHNbY291bnRlcl1bMV0pOwotCQlhdmdfcnVubmluZyA9IGF2Z19zdGF0cygmZXZlbnRfcmVzX3N0YXRzW2NvdW50ZXJdWzJdKTsKKwkJYXZnX2VuYWJsZWQgPSBhdmdfc3RhdHMoJnBzLT5yZXNfc3RhdHNbMV0pOworCQlhdmdfcnVubmluZyA9IGF2Z19zdGF0cygmcHMtPnJlc19zdGF0c1syXSk7CiAKIAkJZnByaW50ZihzdGRlcnIsICIgIChzY2FsZWQgZnJvbSAlLjJmJSUpIiwKIAkJCQkxMDAgKiBhdmdfcnVubmluZyAvIGF2Z19lbmFibGVkKTsKQEAgLTQ1OCw0MCArNDg1LDkyIEBACiAJZnByaW50ZihzdGRlcnIsICJcbiIpOwogfQogCisvKgorICogUHJpbnQgb3V0IHRoZSByZXN1bHRzIG9mIGEgc2luZ2xlIGNvdW50ZXI6CisgKiBkb2VzIG5vdCB1c2UgYWdncmVnYXRlZCBjb3VudCBpbiBzeXN0ZW0td2lkZQorICovCitzdGF0aWMgdm9pZCBwcmludF9jb3VudGVyKHN0cnVjdCBwZXJmX2V2c2VsICpjb3VudGVyKQoreworCXU2NCBlbmEsIHJ1biwgdmFsOworCWludCBjcHU7CisKKwlmb3IgKGNwdSA9IDA7IGNwdSA8IGNwdXMtPm5yOyBjcHUrKykgeworCQl2YWwgPSBjb3VudGVyLT5jb3VudHMtPmNwdVtjcHVdLnZhbDsKKwkJZW5hID0gY291bnRlci0+Y291bnRzLT5jcHVbY3B1XS5lbmE7CisJCXJ1biA9IGNvdW50ZXItPmNvdW50cy0+Y3B1W2NwdV0ucnVuOworCQlpZiAocnVuID09IDAgfHwgZW5hID09IDApIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiQ1BVJSpkJXMlKnMlcyUtMjRzIiwKKwkJCQljc3Zfb3V0cHV0ID8gMCA6IC00LAorCQkJCWNwdXMtPm1hcFtjcHVdLCBjc3Zfc2VwLAorCQkJCWNzdl9vdXRwdXQgPyAwIDogMTgsCisJCQkJIjxub3QgY291bnRlZD4iLCBjc3Zfc2VwLAorCQkJCWV2ZW50X25hbWUoY291bnRlcikpOworCisJCQlmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChuc2VjX2NvdW50ZXIoY291bnRlcikpCisJCQluc2VjX3ByaW50b3V0KGNwdSwgY291bnRlciwgdmFsKTsKKwkJZWxzZQorCQkJYWJzX3ByaW50b3V0KGNwdSwgY291bnRlciwgdmFsKTsKKworCQlpZiAoIWNzdl9vdXRwdXQpIHsKKwkJCXByaW50X25vaXNlKGNvdW50ZXIsIDEuMCk7CisKKwkJCWlmIChydW4gIT0gZW5hKSB7CisJCQkJZnByaW50ZihzdGRlcnIsICIgIChzY2FsZWQgZnJvbSAlLjJmJSUpIiwKKwkJCQkJMTAwLjAgKiBydW4gLyBlbmEpOworCQkJfQorCQl9CisJCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKKwl9Cit9CisKIHN0YXRpYyB2b2lkIHByaW50X3N0YXQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQogewotCWludCBpLCBjb3VudGVyOworCXN0cnVjdCBwZXJmX2V2c2VsICpjb3VudGVyOworCWludCBpOwogCiAJZmZsdXNoKHN0ZG91dCk7CiAKLQlmcHJpbnRmKHN0ZGVyciwgIlxuIik7Ci0JZnByaW50ZihzdGRlcnIsICIgUGVyZm9ybWFuY2UgY291bnRlciBzdGF0cyBmb3IgIik7Ci0JaWYodGFyZ2V0X3BpZCA9PSAtMSAmJiB0YXJnZXRfdGlkID09IC0xKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAiXCclcyIsIGFyZ3ZbMF0pOwotCQlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKQotCQkJZnByaW50ZihzdGRlcnIsICIgJXMiLCBhcmd2W2ldKTsKLQl9IGVsc2UgaWYgKHRhcmdldF9waWQgIT0gLTEpCi0JCWZwcmludGYoc3RkZXJyLCAicHJvY2VzcyBpZCBcJyVkIiwgdGFyZ2V0X3BpZCk7Ci0JZWxzZQotCQlmcHJpbnRmKHN0ZGVyciwgInRocmVhZCBpZCBcJyVkIiwgdGFyZ2V0X3RpZCk7CisJaWYgKCFjc3Zfb3V0cHV0KSB7CisJCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKKwkJZnByaW50ZihzdGRlcnIsICIgUGVyZm9ybWFuY2UgY291bnRlciBzdGF0cyBmb3IgIik7CisJCWlmKHRhcmdldF9waWQgPT0gLTEgJiYgdGFyZ2V0X3RpZCA9PSAtMSkgeworCQkJZnByaW50ZihzdGRlcnIsICJcJyVzIiwgYXJndlswXSk7CisJCQlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKQorCQkJCWZwcmludGYoc3RkZXJyLCAiICVzIiwgYXJndltpXSk7CisJCX0gZWxzZSBpZiAodGFyZ2V0X3BpZCAhPSAtMSkKKwkJCWZwcmludGYoc3RkZXJyLCAicHJvY2VzcyBpZCBcJyVkIiwgdGFyZ2V0X3BpZCk7CisJCWVsc2UKKwkJCWZwcmludGYoc3RkZXJyLCAidGhyZWFkIGlkIFwnJWQiLCB0YXJnZXRfdGlkKTsKIAotCWZwcmludGYoc3RkZXJyLCAiXCciKTsKLQlpZiAocnVuX2NvdW50ID4gMSkKLQkJZnByaW50ZihzdGRlcnIsICIgKCVkIHJ1bnMpIiwgcnVuX2NvdW50KTsKLQlmcHJpbnRmKHN0ZGVyciwgIjpcblxuIik7CisJCWZwcmludGYoc3RkZXJyLCAiXCciKTsKKwkJaWYgKHJ1bl9jb3VudCA+IDEpCisJCQlmcHJpbnRmKHN0ZGVyciwgIiAoJWQgcnVucykiLCBydW5fY291bnQpOworCQlmcHJpbnRmKHN0ZGVyciwgIjpcblxuIik7CisJfQogCi0JZm9yIChjb3VudGVyID0gMDsgY291bnRlciA8IG5yX2NvdW50ZXJzOyBjb3VudGVyKyspCi0JCXByaW50X2NvdW50ZXIoY291bnRlcik7CisJaWYgKG5vX2FnZ3IpIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShjb3VudGVyLCAmZXZzZWxfbGlzdCwgbm9kZSkKKwkJCXByaW50X2NvdW50ZXIoY291bnRlcik7CisJfSBlbHNlIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShjb3VudGVyLCAmZXZzZWxfbGlzdCwgbm9kZSkKKwkJCXByaW50X2NvdW50ZXJfYWdncihjb3VudGVyKTsKKwl9CiAKLQlmcHJpbnRmKHN0ZGVyciwgIlxuIik7Ci0JZnByaW50ZihzdGRlcnIsICIgJTE4LjlmICBzZWNvbmRzIHRpbWUgZWxhcHNlZCIsCi0JCQlhdmdfc3RhdHMoJndhbGx0aW1lX25zZWNzX3N0YXRzKS8xZTkpOwotCWlmIChydW5fY291bnQgPiAxKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAiICAgKCArLSAlNy4zZiUlICkiLAorCWlmICghY3N2X291dHB1dCkgeworCQlmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisJCWZwcmludGYoc3RkZXJyLCAiICUxOC45ZiAgc2Vjb25kcyB0aW1lIGVsYXBzZWQiLAorCQkJCWF2Z19zdGF0cygmd2FsbHRpbWVfbnNlY3Nfc3RhdHMpLzFlOSk7CisJCWlmIChydW5fY291bnQgPiAxKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIiAgICggKy0gJTcuM2YlJSApIiwKIAkJCQkxMDAqc3RkZGV2X3N0YXRzKCZ3YWxsdGltZV9uc2Vjc19zdGF0cykgLwogCQkJCWF2Z19zdGF0cygmd2FsbHRpbWVfbnNlY3Nfc3RhdHMpKTsKKwkJfQorCQlmcHJpbnRmKHN0ZGVyciwgIlxuXG4iKTsKIAl9Ci0JZnByaW50ZihzdGRlcnIsICJcblxuIik7CiB9CiAKIHN0YXRpYyB2b2xhdGlsZSBpbnQgc2lnbnIgPSAtMTsKQEAgLTUyMSw2ICs2MDAsMTMgQEAKIAlOVUxMCiB9OwogCitzdGF0aWMgaW50IHN0YXRfX3NldF9iaWdfbnVtKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCBfX3VzZWQsCisJCQkgICAgIGNvbnN0IGNoYXIgKnMgX191c2VkLCBpbnQgdW5zZXQpCit7CisJYmlnX251bV9vcHQgPSB1bnNldCA/IDAgOiAxOworCXJldHVybiAwOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CiAJT1BUX0NBTExCQUNLKCdlJywgImV2ZW50IiwgTlVMTCwgImV2ZW50IiwKIAkJICAgICAiZXZlbnQgc2VsZWN0b3IuIHVzZSAncGVyZiBsaXN0JyB0byBsaXN0IGF2YWlsYWJsZSBldmVudHMiLApAQCAtNTQxLDY0ICs2MjcsOTYgQEAKIAkJICAgICJyZXBlYXQgY29tbWFuZCBhbmQgcHJpbnQgYXZlcmFnZSArIHN0ZGRldiAobWF4OiAxMDApIiksCiAJT1BUX0JPT0xFQU4oJ24nLCAibnVsbCIsICZudWxsX3J1biwKIAkJICAgICJudWxsIHJ1biAtIGRvbnQgc3RhcnQgYW55IGNvdW50ZXJzIiksCi0JT1BUX0JPT0xFQU4oJ0InLCAiYmlnLW51bSIsICZiaWdfbnVtLAotCQkgICAgInByaW50IGxhcmdlIG51bWJlcnMgd2l0aCB0aG91c2FuZHNcJyBzZXBhcmF0b3JzIiksCisJT1BUX0NBTExCQUNLX05PT1BUKCdCJywgImJpZy1udW0iLCBOVUxMLCBOVUxMLCAKKwkJCSAgICJwcmludCBsYXJnZSBudW1iZXJzIHdpdGggdGhvdXNhbmRzXCcgc2VwYXJhdG9ycyIsCisJCQkgICBzdGF0X19zZXRfYmlnX251bSksCiAJT1BUX1NUUklORygnQycsICJjcHUiLCAmY3B1X2xpc3QsICJjcHUiLAogCQkgICAgImxpc3Qgb2YgY3B1cyB0byBtb25pdG9yIGluIHN5c3RlbS13aWRlIiksCisJT1BUX0JPT0xFQU4oJ0EnLCAibm8tYWdnciIsICZub19hZ2dyLAorCQkgICAgImRpc2FibGUgQ1BVIGNvdW50IGFnZ3JlZ2F0aW9uIiksCisJT1BUX1NUUklORygneCcsICJmaWVsZC1zZXBhcmF0b3IiLCAmY3N2X3NlcCwgInNlcGFyYXRvciIsCisJCSAgICJwcmludCBjb3VudHMgd2l0aCBjdXN0b20gc2VwYXJhdG9yIiksCiAJT1BUX0VORCgpCiB9OwogCiBpbnQgY21kX3N0YXQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXggX191c2VkKQogewotCWludCBzdGF0dXM7Ci0JaW50IGksajsKKwlzdHJ1Y3QgcGVyZl9ldnNlbCAqcG9zOworCWludCBzdGF0dXMgPSAtRU5PTUVNOwogCiAJc2V0bG9jYWxlKExDX0FMTCwgIiIpOwogCiAJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgb3B0aW9ucywgc3RhdF91c2FnZSwKIAkJUEFSU0VfT1BUX1NUT1BfQVRfTk9OX09QVElPTik7CisKKwlpZiAoY3N2X3NlcCkKKwkJY3N2X291dHB1dCA9IHRydWU7CisJZWxzZQorCQljc3Zfc2VwID0gREVGQVVMVF9TRVBBUkFUT1I7CisKKwkvKgorCSAqIGxldCB0aGUgc3ByZWFkc2hlZXQgZG8gdGhlIHByZXR0eS1wcmludGluZworCSAqLworCWlmIChjc3Zfb3V0cHV0KSB7CisJCS8qIFVzZXIgZXhwbGljaXRlbHkgcGFzc2VkIC1CPyAqLworCQlpZiAoYmlnX251bV9vcHQgPT0gMSkgeworCQkJZnByaW50ZihzdGRlcnIsICItQiBvcHRpb24gbm90IHN1cHBvcnRlZCB3aXRoIC14XG4iKTsKKwkJCXVzYWdlX3dpdGhfb3B0aW9ucyhzdGF0X3VzYWdlLCBvcHRpb25zKTsKKwkJfSBlbHNlIC8qIE5vcGUsIHNvIGRpc2FibGUgYmlnIG51bWJlciBmb3JtYXR0aW5nICovCisJCQliaWdfbnVtID0gZmFsc2U7CisJfSBlbHNlIGlmIChiaWdfbnVtX29wdCA9PSAwKSAvKiBVc2VyIHBhc3NlZCAtLW5vLWJpZy1udW0gKi8KKwkJYmlnX251bSA9IGZhbHNlOworCiAJaWYgKCFhcmdjICYmIHRhcmdldF9waWQgPT0gLTEgJiYgdGFyZ2V0X3RpZCA9PSAtMSkKIAkJdXNhZ2Vfd2l0aF9vcHRpb25zKHN0YXRfdXNhZ2UsIG9wdGlvbnMpOwogCWlmIChydW5fY291bnQgPD0gMCkKIAkJdXNhZ2Vfd2l0aF9vcHRpb25zKHN0YXRfdXNhZ2UsIG9wdGlvbnMpOwogCisJLyogbm9fYWdnciBpcyBmb3Igc3lzdGVtLXdpZGUgb25seSAqLworCWlmIChub19hZ2dyICYmICFzeXN0ZW1fd2lkZSkKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKHN0YXRfdXNhZ2UsIG9wdGlvbnMpOworCiAJLyogU2V0IGF0dHJzIGFuZCBucl9jb3VudGVycyBpZiBubyBldmVudCBpcyBzZWxlY3RlZCBhbmQgIW51bGxfcnVuICovCiAJaWYgKCFudWxsX3J1biAmJiAhbnJfY291bnRlcnMpIHsKLQkJbWVtY3B5KGF0dHJzLCBkZWZhdWx0X2F0dHJzLCBzaXplb2YoZGVmYXVsdF9hdHRycykpOworCQlzaXplX3QgYzsKKwogCQlucl9jb3VudGVycyA9IEFSUkFZX1NJWkUoZGVmYXVsdF9hdHRycyk7CisKKwkJZm9yIChjID0gMDsgYyA8IEFSUkFZX1NJWkUoZGVmYXVsdF9hdHRycyk7ICsrYykgeworCQkJcG9zID0gcGVyZl9ldnNlbF9fbmV3KGRlZmF1bHRfYXR0cnNbY10udHlwZSwKKwkJCQkJICAgICAgZGVmYXVsdF9hdHRyc1tjXS5jb25maWcsCisJCQkJCSAgICAgIG5yX2NvdW50ZXJzKTsKKwkJCWlmIChwb3MgPT0gTlVMTCkKKwkJCQlnb3RvIG91dDsKKwkJCWxpc3RfYWRkKCZwb3MtPm5vZGUsICZldnNlbF9saXN0KTsKKwkJfQorCX0KKworCWlmICh0YXJnZXRfcGlkICE9IC0xKQorCQl0YXJnZXRfdGlkID0gdGFyZ2V0X3BpZDsKKworCXRocmVhZHMgPSB0aHJlYWRfbWFwX19uZXcodGFyZ2V0X3BpZCwgdGFyZ2V0X3RpZCk7CisJaWYgKHRocmVhZHMgPT0gTlVMTCkgeworCQlwcl9lcnIoIlByb2JsZW1zIGZpbmRpbmcgdGhyZWFkcyBvZiBtb25pdG9yXG4iKTsKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKHN0YXRfdXNhZ2UsIG9wdGlvbnMpOwogCX0KIAogCWlmIChzeXN0ZW1fd2lkZSkKLQkJbnJfY3B1cyA9IHJlYWRfY3B1X21hcChjcHVfbGlzdCk7CisJCWNwdXMgPSBjcHVfbWFwX19uZXcoY3B1X2xpc3QpOwogCWVsc2UKLQkJbnJfY3B1cyA9IDE7CisJCWNwdXMgPSBjcHVfbWFwX19kdW1teV9uZXcoKTsKIAotCWlmIChucl9jcHVzIDwgMSkKKwlpZiAoY3B1cyA9PSBOVUxMKSB7CisJCXBlcnJvcigiZmFpbGVkIHRvIHBhcnNlIENQVXMgbWFwIik7CiAJCXVzYWdlX3dpdGhfb3B0aW9ucyhzdGF0X3VzYWdlLCBvcHRpb25zKTsKLQotCWlmICh0YXJnZXRfcGlkICE9IC0xKSB7Ci0JCXRhcmdldF90aWQgPSB0YXJnZXRfcGlkOwotCQl0aHJlYWRfbnVtID0gZmluZF9hbGxfdGlkKHRhcmdldF9waWQsICZhbGxfdGlkcyk7Ci0JCWlmICh0aHJlYWRfbnVtIDw9IDApIHsKLQkJCWZwcmludGYoc3RkZXJyLCAiQ2FuJ3QgZmluZCBhbGwgdGhyZWFkcyBvZiBwaWQgJWRcbiIsCi0JCQkJCXRhcmdldF9waWQpOwotCQkJdXNhZ2Vfd2l0aF9vcHRpb25zKHN0YXRfdXNhZ2UsIG9wdGlvbnMpOwotCQl9Ci0JfSBlbHNlIHsKLQkJYWxsX3RpZHM9bWFsbG9jKHNpemVvZihwaWRfdCkpOwotCQlpZiAoIWFsbF90aWRzKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkJYWxsX3RpZHNbMF0gPSB0YXJnZXRfdGlkOwotCQl0aHJlYWRfbnVtID0gMTsKKwkJcmV0dXJuIC0xOwogCX0KIAotCWZvciAoaSA9IDA7IGkgPCBNQVhfTlJfQ1BVUzsgaSsrKSB7Ci0JCWZvciAoaiA9IDA7IGogPCBNQVhfQ09VTlRFUlM7IGorKykgewotCQkJZmRbaV1bal0gPSBtYWxsb2Moc2l6ZW9mKGludCkqdGhyZWFkX251bSk7Ci0JCQlpZiAoIWZkW2ldW2pdKQotCQkJCXJldHVybiAtRU5PTUVNOwotCQl9CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsICZldnNlbF9saXN0LCBub2RlKSB7CisJCWlmIChwZXJmX2V2c2VsX19hbGxvY19zdGF0X3ByaXYocG9zKSA8IDAgfHwKKwkJICAgIHBlcmZfZXZzZWxfX2FsbG9jX2NvdW50cyhwb3MsIGNwdXMtPm5yKSA8IDAgfHwKKwkJICAgIHBlcmZfZXZzZWxfX2FsbG9jX2ZkKHBvcywgY3B1cy0+bnIsIHRocmVhZHMtPm5yKSA8IDApCisJCQlnb3RvIG91dF9mcmVlX2ZkOwogCX0KIAogCS8qCkBAIC02MjEsNiArNzM5LDExIEBACiAKIAlpZiAoc3RhdHVzICE9IC0xKQogCQlwcmludF9zdGF0KGFyZ2MsIGFyZ3YpOwotCitvdXRfZnJlZV9mZDoKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgJmV2c2VsX2xpc3QsIG5vZGUpCisJCXBlcmZfZXZzZWxfX2ZyZWVfc3RhdF9wcml2KHBvcyk7CitvdXQ6CisJdGhyZWFkX21hcF9fZGVsZXRlKHRocmVhZHMpOworCXRocmVhZHMgPSBOVUxMOwogCXJldHVybiBzdGF0dXM7CiB9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tdGVzdC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXRlc3QuYwppbmRleCAwMzViOWZhLi4xYzk4NDM0IDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tdGVzdC5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi10ZXN0LmMKQEAgLTExOSwxMCArMTE5LDE2IEBACiAJICogZW5kIGFkZHJlc3NlcyB0b28uCiAJICovCiAJZm9yIChuZCA9IHJiX2ZpcnN0KCZ2bWxpbnV4X21hcC0+ZHNvLT5zeW1ib2xzW3R5cGVdKTsgbmQ7IG5kID0gcmJfbmV4dChuZCkpIHsKLQkJc3RydWN0IHN5bWJvbCAqcGFpcjsKKwkJc3RydWN0IHN5bWJvbCAqcGFpciwgKmZpcnN0X3BhaXI7CisJCWJvb2wgYmFja3dhcmRzID0gdHJ1ZTsKIAogCQlzeW0gID0gcmJfZW50cnkobmQsIHN0cnVjdCBzeW1ib2wsIHJiX25vZGUpOwotCQlwYWlyID0gbWFjaGluZV9fZmluZF9rZXJuZWxfc3ltYm9sKCZrYWxsc3ltcywgdHlwZSwgc3ltLT5zdGFydCwgTlVMTCwgTlVMTCk7CisKKwkJaWYgKHN5bS0+c3RhcnQgPT0gc3ltLT5lbmQpCisJCQljb250aW51ZTsKKworCQlmaXJzdF9wYWlyID0gbWFjaGluZV9fZmluZF9rZXJuZWxfc3ltYm9sKCZrYWxsc3ltcywgdHlwZSwgc3ltLT5zdGFydCwgTlVMTCwgTlVMTCk7CisJCXBhaXIgPSBmaXJzdF9wYWlyOwogCiAJCWlmIChwYWlyICYmIHBhaXItPnN0YXJ0ID09IHN5bS0+c3RhcnQpIHsKIG5leHRfcGFpcjoKQEAgLTE0Myw4ICsxNDksMTAgQEAKIAkJCQlwcl9kZWJ1ZygiJSNMeDogZGlmZiBlbmQgYWRkciBmb3IgJXMgdjogJSNMeCBrOiAlI0x4XG4iLAogCQkJCQkgc3ltLT5zdGFydCwgc3ltLT5uYW1lLCBzeW0tPmVuZCwgcGFpci0+ZW5kKTsKIAkJCX0gZWxzZSB7Ci0JCQkJc3RydWN0IHJiX25vZGUgKm5uZCA9IHJiX3ByZXYoJnBhaXItPnJiX25vZGUpOwotCisJCQkJc3RydWN0IHJiX25vZGUgKm5uZDsKK2RldG91cjoKKwkJCQlubmQgPSBiYWNrd2FyZHMgPyByYl9wcmV2KCZwYWlyLT5yYl9ub2RlKSA6CisJCQkJCQkgIHJiX25leHQoJnBhaXItPnJiX25vZGUpOwogCQkJCWlmIChubmQpIHsKIAkJCQkJc3RydWN0IHN5bWJvbCAqbmV4dCA9IHJiX2VudHJ5KG5uZCwgc3RydWN0IHN5bWJvbCwgcmJfbm9kZSk7CiAKQEAgLTE1Myw2ICsxNjEsMTMgQEAKIAkJCQkJCWdvdG8gbmV4dF9wYWlyOwogCQkJCQl9CiAJCQkJfQorCisJCQkJaWYgKGJhY2t3YXJkcykgeworCQkJCQliYWNrd2FyZHMgPSBmYWxzZTsKKwkJCQkJcGFpciA9IGZpcnN0X3BhaXI7CisJCQkJCWdvdG8gZGV0b3VyOworCQkJCX0KKwogCQkJCXByX2RlYnVnKCIlI0x4OiBkaWZmIG5hbWUgdjogJXMgazogJXNcbiIsCiAJCQkJCSBzeW0tPnN0YXJ0LCBzeW0tPm5hbWUsIHBhaXItPm5hbWUpOwogCQkJfQpAQCAtMjE5LDYgKzIzNCw4OSBAQAogCXJldHVybiBlcnI7CiB9CiAKKyNpbmNsdWRlICJ1dGlsL2V2c2VsLmgiCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKK3N0YXRpYyBpbnQgdHJhY2VfZXZlbnRfX2lkKGNvbnN0IGNoYXIgKmV2ZW50X25hbWUpCit7CisJY2hhciAqZmlsZW5hbWU7CisJaW50IGVyciA9IC0xLCBmZDsKKworCWlmIChhc3ByaW50ZigmZmlsZW5hbWUsCisJCSAgICAgIi9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvZXZlbnRzL3N5c2NhbGxzLyVzL2lkIiwKKwkJICAgICBldmVudF9uYW1lKSA8IDApCisJCXJldHVybiAtMTsKKworCWZkID0gb3BlbihmaWxlbmFtZSwgT19SRE9OTFkpOworCWlmIChmZCA+PSAwKSB7CisJCWNoYXIgaWRbMTZdOworCQlpZiAocmVhZChmZCwgaWQsIHNpemVvZihpZCkpID4gMCkKKwkJCWVyciA9IGF0b2koaWQpOworCQljbG9zZShmZCk7CisJfQorCisJZnJlZShmaWxlbmFtZSk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCB0ZXN0X19vcGVuX3N5c2NhbGxfZXZlbnQodm9pZCkKK3sKKwlpbnQgZXJyID0gLTEsIGZkOworCXN0cnVjdCB0aHJlYWRfbWFwICp0aHJlYWRzOworCXN0cnVjdCBwZXJmX2V2c2VsICpldnNlbDsKKwl1bnNpZ25lZCBpbnQgbnJfb3Blbl9jYWxscyA9IDExMSwgaTsKKwlpbnQgaWQgPSB0cmFjZV9ldmVudF9faWQoInN5c19lbnRlcl9vcGVuIik7CisKKwlpZiAoaWQgPCAwKSB7CisJCXByX2RlYnVnKCJpcyBkZWJ1Z2ZzIG1vdW50ZWQgb24gL3N5cy9rZXJuZWwvZGVidWc/XG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXRocmVhZHMgPSB0aHJlYWRfbWFwX19uZXcoLTEsIGdldHBpZCgpKTsKKwlpZiAodGhyZWFkcyA9PSBOVUxMKSB7CisJCXByX2RlYnVnKCJ0aHJlYWRfbWFwX19uZXdcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJZXZzZWwgPSBwZXJmX2V2c2VsX19uZXcoUEVSRl9UWVBFX1RSQUNFUE9JTlQsIGlkLCAwKTsKKwlpZiAoZXZzZWwgPT0gTlVMTCkgeworCQlwcl9kZWJ1ZygicGVyZl9ldnNlbF9fbmV3XG4iKTsKKwkJZ290byBvdXRfdGhyZWFkX21hcF9kZWxldGU7CisJfQorCisJaWYgKHBlcmZfZXZzZWxfX29wZW5fcGVyX3RocmVhZChldnNlbCwgdGhyZWFkcykgPCAwKSB7CisJCXByX2RlYnVnKCJmYWlsZWQgdG8gb3BlbiBjb3VudGVyOiAlcywgIgorCQkJICJ0d2VhayAvcHJvYy9zeXMva2VybmVsL3BlcmZfZXZlbnRfcGFyYW5vaWQ/XG4iLAorCQkJIHN0cmVycm9yKGVycm5vKSk7CisJCWdvdG8gb3V0X2V2c2VsX2RlbGV0ZTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfb3Blbl9jYWxsczsgKytpKSB7CisJCWZkID0gb3BlbigiL2V0Yy9wYXNzd2QiLCBPX1JET05MWSk7CisJCWNsb3NlKGZkKTsKKwl9CisKKwlpZiAocGVyZl9ldnNlbF9fcmVhZF9vbl9jcHUoZXZzZWwsIDAsIDApIDwgMCkgeworCQlwcl9kZWJ1ZygicGVyZl9ldnNlbF9fb3Blbl9yZWFkX29uX2NwdVxuIik7CisJCWdvdG8gb3V0X2Nsb3NlX2ZkOworCX0KKworCWlmIChldnNlbC0+Y291bnRzLT5jcHVbMF0udmFsICE9IG5yX29wZW5fY2FsbHMpIHsKKwkJcHJfZGVidWcoInBlcmZfZXZzZWxfX3JlYWRfb25fY3B1OiBleHBlY3RlZCB0byBpbnRlcmNlcHQgJWQgY2FsbHMsIGdvdCAlTGRcbiIsCisJCQkgbnJfb3Blbl9jYWxscywgZXZzZWwtPmNvdW50cy0+Y3B1WzBdLnZhbCk7CisJCWdvdG8gb3V0X2Nsb3NlX2ZkOworCX0KKwkKKwllcnIgPSAwOworb3V0X2Nsb3NlX2ZkOgorCXBlcmZfZXZzZWxfX2Nsb3NlX2ZkKGV2c2VsLCAxLCB0aHJlYWRzLT5ucik7CitvdXRfZXZzZWxfZGVsZXRlOgorCXBlcmZfZXZzZWxfX2RlbGV0ZShldnNlbCk7CitvdXRfdGhyZWFkX21hcF9kZWxldGU6CisJdGhyZWFkX21hcF9fZGVsZXRlKHRocmVhZHMpOworCXJldHVybiBlcnI7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgdGVzdCB7CiAJY29uc3QgY2hhciAqZGVzYzsKIAlpbnQgKCpmdW5jKSh2b2lkKTsKQEAgLTIyOCw2ICszMjYsMTAgQEAKIAkJLmZ1bmMgPSB0ZXN0X192bWxpbnV4X21hdGNoZXNfa2FsbHN5bXMsCiAJfSwKIAl7CisJCS5kZXNjID0gImRldGVjdCBvcGVuIHN5c2NhbGwgZXZlbnQiLAorCQkuZnVuYyA9IHRlc3RfX29wZW5fc3lzY2FsbF9ldmVudCwKKwl9LAorCXsKIAkJLmZ1bmMgPSBOVUxMLAogCX0sCiB9OwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXRpbWVjaGFydC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXRpbWVjaGFydC5jCmluZGV4IDliY2MzOGYuLjc0NmNmMDMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi10aW1lY2hhcnQuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tdGltZWNoYXJ0LmMKQEAgLTMyLDYgKzMyLDEwIEBACiAjaW5jbHVkZSAidXRpbC9zZXNzaW9uLmgiCiAjaW5jbHVkZSAidXRpbC9zdmdoZWxwZXIuaCIKIAorI2RlZmluZSBTVVBQT1JUX09MRF9QT1dFUl9FVkVOVFMgMQorI2RlZmluZSBQV1JfRVZFTlRfRVhJVCAtMQorCisKIHN0YXRpYyBjaGFyCQljb25zdCAqaW5wdXRfbmFtZSA9ICJwZXJmLmRhdGEiOwogc3RhdGljIGNoYXIJCWNvbnN0ICpvdXRwdXRfbmFtZSA9ICJvdXRwdXQuc3ZnIjsKIApAQCAtMjcyLDE5ICsyNzYsMjIgQEAKIHN0YXRpYyB1NjQgY3B1c19wc3RhdGVfc3RhcnRfdGltZXNbTUFYX0NQVVNdOwogc3RhdGljIHU2NCBjcHVzX3BzdGF0ZV9zdGF0ZVtNQVhfQ1BVU107CiAKLXN0YXRpYyBpbnQgcHJvY2Vzc19jb21tX2V2ZW50KGV2ZW50X3QgKmV2ZW50LCBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uIF9fdXNlZCkKK3N0YXRpYyBpbnQgcHJvY2Vzc19jb21tX2V2ZW50KGV2ZW50X3QgKmV2ZW50LCBzdHJ1Y3Qgc2FtcGxlX2RhdGEgKnNhbXBsZSBfX3VzZWQsCisJCQkgICAgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uIF9fdXNlZCkKIHsKIAlwaWRfc2V0X2NvbW0oZXZlbnQtPmNvbW0udGlkLCBldmVudC0+Y29tbS5jb21tKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBwcm9jZXNzX2ZvcmtfZXZlbnQoZXZlbnRfdCAqZXZlbnQsIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24gX191c2VkKQorc3RhdGljIGludCBwcm9jZXNzX2ZvcmtfZXZlbnQoZXZlbnRfdCAqZXZlbnQsIHN0cnVjdCBzYW1wbGVfZGF0YSAqc2FtcGxlIF9fdXNlZCwKKwkJCSAgICAgIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24gX191c2VkKQogewogCXBpZF9mb3JrKGV2ZW50LT5mb3JrLnBpZCwgZXZlbnQtPmZvcmsucHBpZCwgZXZlbnQtPmZvcmsudGltZSk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcHJvY2Vzc19leGl0X2V2ZW50KGV2ZW50X3QgKmV2ZW50LCBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uIF9fdXNlZCkKK3N0YXRpYyBpbnQgcHJvY2Vzc19leGl0X2V2ZW50KGV2ZW50X3QgKmV2ZW50LCBzdHJ1Y3Qgc2FtcGxlX2RhdGEgKnNhbXBsZSBfX3VzZWQsCisJCQkgICAgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uIF9fdXNlZCkKIHsKIAlwaWRfZXhpdChldmVudC0+Zm9yay5waWQsIGV2ZW50LT5mb3JrLnRpbWUpOwogCXJldHVybiAwOwpAQCAtMjk4LDEyICszMDUsMjEgQEAKIAlpbnQJCQlsb2NrX2RlcHRoOwogfTsKIAotc3RydWN0IHBvd2VyX2VudHJ5IHsKKyNpZmRlZiBTVVBQT1JUX09MRF9QT1dFUl9FVkVOVFMKK3N0YXRpYyBpbnQgdXNlX29sZF9wb3dlcl9ldmVudHM7CitzdHJ1Y3QgcG93ZXJfZW50cnlfb2xkIHsKIAlzdHJ1Y3QgdHJhY2VfZW50cnkgdGU7CiAJdTY0CXR5cGU7CiAJdTY0CXZhbHVlOwogCXU2NAljcHVfaWQ7CiB9OworI2VuZGlmCisKK3N0cnVjdCBwb3dlcl9wcm9jZXNzb3JfZW50cnkgeworCXN0cnVjdCB0cmFjZV9lbnRyeSB0ZTsKKwl1MzIJc3RhdGU7CisJdTMyCWNwdV9pZDsKK307CiAKICNkZWZpbmUgVEFTS19DT01NX0xFTiAxNgogc3RydWN0IHdha2V1cF9lbnRyeSB7CkBAIC00NzAsNDggKzQ4Niw2NSBAQAogfQogCiAKLXN0YXRpYyBpbnQgcHJvY2Vzc19zYW1wbGVfZXZlbnQoZXZlbnRfdCAqZXZlbnQsIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pCitzdGF0aWMgaW50IHByb2Nlc3Nfc2FtcGxlX2V2ZW50KGV2ZW50X3QgKmV2ZW50IF9fdXNlZCwKKwkJCQlzdHJ1Y3Qgc2FtcGxlX2RhdGEgKnNhbXBsZSwKKwkJCQlzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQogewotCXN0cnVjdCBzYW1wbGVfZGF0YSBkYXRhOwogCXN0cnVjdCB0cmFjZV9lbnRyeSAqdGU7CiAKLQltZW1zZXQoJmRhdGEsIDAsIHNpemVvZihkYXRhKSk7Ci0KLQlldmVudF9fcGFyc2Vfc2FtcGxlKGV2ZW50LCBzZXNzaW9uLT5zYW1wbGVfdHlwZSwgJmRhdGEpOwotCiAJaWYgKHNlc3Npb24tPnNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfVElNRSkgewotCQlpZiAoIWZpcnN0X3RpbWUgfHwgZmlyc3RfdGltZSA+IGRhdGEudGltZSkKLQkJCWZpcnN0X3RpbWUgPSBkYXRhLnRpbWU7Ci0JCWlmIChsYXN0X3RpbWUgPCBkYXRhLnRpbWUpCi0JCQlsYXN0X3RpbWUgPSBkYXRhLnRpbWU7CisJCWlmICghZmlyc3RfdGltZSB8fCBmaXJzdF90aW1lID4gc2FtcGxlLT50aW1lKQorCQkJZmlyc3RfdGltZSA9IHNhbXBsZS0+dGltZTsKKwkJaWYgKGxhc3RfdGltZSA8IHNhbXBsZS0+dGltZSkKKwkJCWxhc3RfdGltZSA9IHNhbXBsZS0+dGltZTsKIAl9CiAKLQl0ZSA9ICh2b2lkICopZGF0YS5yYXdfZGF0YTsKLQlpZiAoc2Vzc2lvbi0+c2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9SQVcgJiYgZGF0YS5yYXdfc2l6ZSA+IDApIHsKKwl0ZSA9ICh2b2lkICopc2FtcGxlLT5yYXdfZGF0YTsKKwlpZiAoc2Vzc2lvbi0+c2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9SQVcgJiYgc2FtcGxlLT5yYXdfc2l6ZSA+IDApIHsKIAkJY2hhciAqZXZlbnRfc3RyOwotCQlzdHJ1Y3QgcG93ZXJfZW50cnkgKnBlOwotCi0JCXBlID0gKHZvaWQgKil0ZTsKLQorI2lmZGVmIFNVUFBPUlRfT0xEX1BPV0VSX0VWRU5UUworCQlzdHJ1Y3QgcG93ZXJfZW50cnlfb2xkICpwZW87CisJCXBlbyA9ICh2b2lkICopdGU7CisjZW5kaWYKIAkJZXZlbnRfc3RyID0gcGVyZl9oZWFkZXJfX2ZpbmRfZXZlbnQodGUtPnR5cGUpOwogCiAJCWlmICghZXZlbnRfc3RyKQogCQkJcmV0dXJuIDA7CiAKLQkJaWYgKHN0cmNtcChldmVudF9zdHIsICJwb3dlcjpwb3dlcl9zdGFydCIpID09IDApCi0JCQljX3N0YXRlX3N0YXJ0KHBlLT5jcHVfaWQsIGRhdGEudGltZSwgcGUtPnZhbHVlKTsKKwkJaWYgKHN0cmNtcChldmVudF9zdHIsICJwb3dlcjpjcHVfaWRsZSIpID09IDApIHsKKwkJCXN0cnVjdCBwb3dlcl9wcm9jZXNzb3JfZW50cnkgKnBwZSA9ICh2b2lkICopdGU7CisJCQlpZiAocHBlLT5zdGF0ZSA9PSAodTMyKVBXUl9FVkVOVF9FWElUKQorCQkJCWNfc3RhdGVfZW5kKHBwZS0+Y3B1X2lkLCBzYW1wbGUtPnRpbWUpOworCQkJZWxzZQorCQkJCWNfc3RhdGVfc3RhcnQocHBlLT5jcHVfaWQsIHNhbXBsZS0+dGltZSwKKwkJCQkJICAgICAgcHBlLT5zdGF0ZSk7CisJCX0KKwkJZWxzZSBpZiAoc3RyY21wKGV2ZW50X3N0ciwgInBvd2VyOmNwdV9mcmVxdWVuY3kiKSA9PSAwKSB7CisJCQlzdHJ1Y3QgcG93ZXJfcHJvY2Vzc29yX2VudHJ5ICpwcGUgPSAodm9pZCAqKXRlOworCQkJcF9zdGF0ZV9jaGFuZ2UocHBlLT5jcHVfaWQsIHNhbXBsZS0+dGltZSwgcHBlLT5zdGF0ZSk7CisJCX0KIAotCQlpZiAoc3RyY21wKGV2ZW50X3N0ciwgInBvd2VyOnBvd2VyX2VuZCIpID09IDApCi0JCQljX3N0YXRlX2VuZChwZS0+Y3B1X2lkLCBkYXRhLnRpbWUpOworCQllbHNlIGlmIChzdHJjbXAoZXZlbnRfc3RyLCAic2NoZWQ6c2NoZWRfd2FrZXVwIikgPT0gMCkKKwkJCXNjaGVkX3dha2V1cChzYW1wbGUtPmNwdSwgc2FtcGxlLT50aW1lLCBzYW1wbGUtPnBpZCwgdGUpOwogCi0JCWlmIChzdHJjbXAoZXZlbnRfc3RyLCAicG93ZXI6cG93ZXJfZnJlcXVlbmN5IikgPT0gMCkKLQkJCXBfc3RhdGVfY2hhbmdlKHBlLT5jcHVfaWQsIGRhdGEudGltZSwgcGUtPnZhbHVlKTsKKwkJZWxzZSBpZiAoc3RyY21wKGV2ZW50X3N0ciwgInNjaGVkOnNjaGVkX3N3aXRjaCIpID09IDApCisJCQlzY2hlZF9zd2l0Y2goc2FtcGxlLT5jcHUsIHNhbXBsZS0+dGltZSwgdGUpOwogCi0JCWlmIChzdHJjbXAoZXZlbnRfc3RyLCAic2NoZWQ6c2NoZWRfd2FrZXVwIikgPT0gMCkKLQkJCXNjaGVkX3dha2V1cChkYXRhLmNwdSwgZGF0YS50aW1lLCBkYXRhLnBpZCwgdGUpOworI2lmZGVmIFNVUFBPUlRfT0xEX1BPV0VSX0VWRU5UUworCQlpZiAodXNlX29sZF9wb3dlcl9ldmVudHMpIHsKKwkJCWlmIChzdHJjbXAoZXZlbnRfc3RyLCAicG93ZXI6cG93ZXJfc3RhcnQiKSA9PSAwKQorCQkJCWNfc3RhdGVfc3RhcnQocGVvLT5jcHVfaWQsIHNhbXBsZS0+dGltZSwKKwkJCQkJICAgICAgcGVvLT52YWx1ZSk7CiAKLQkJaWYgKHN0cmNtcChldmVudF9zdHIsICJzY2hlZDpzY2hlZF9zd2l0Y2giKSA9PSAwKQotCQkJc2NoZWRfc3dpdGNoKGRhdGEuY3B1LCBkYXRhLnRpbWUsIHRlKTsKKwkJCWVsc2UgaWYgKHN0cmNtcChldmVudF9zdHIsICJwb3dlcjpwb3dlcl9lbmQiKSA9PSAwKQorCQkJCWNfc3RhdGVfZW5kKHNhbXBsZS0+Y3B1LCBzYW1wbGUtPnRpbWUpOworCisJCQllbHNlIGlmIChzdHJjbXAoZXZlbnRfc3RyLAorCQkJCQkicG93ZXI6cG93ZXJfZnJlcXVlbmN5IikgPT0gMCkKKwkJCQlwX3N0YXRlX2NoYW5nZShwZW8tPmNwdV9pZCwgc2FtcGxlLT50aW1lLAorCQkJCQkgICAgICAgcGVvLT52YWx1ZSk7CisJCX0KKyNlbmRpZgogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTkzNyw3ICs5NzAsOCBAQAogCiBzdGF0aWMgaW50IF9fY21kX3RpbWVjaGFydCh2b2lkKQogewotCXN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24gPSBwZXJmX3Nlc3Npb25fX25ldyhpbnB1dF9uYW1lLCBPX1JET05MWSwgMCwgZmFsc2UpOworCXN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24gPSBwZXJmX3Nlc3Npb25fX25ldyhpbnB1dF9uYW1lLCBPX1JET05MWSwKKwkJCQkJCQkgMCwgZmFsc2UsICZldmVudF9vcHMpOwogCWludCByZXQgPSAtRUlOVkFMOwogCiAJaWYgKHNlc3Npb24gPT0gTlVMTCkKQEAgLTk2OCw3ICsxMDAyLDggQEAKIAlOVUxMCiB9OwogCi1zdGF0aWMgY29uc3QgY2hhciAqcmVjb3JkX2FyZ3NbXSA9IHsKKyNpZmRlZiBTVVBQT1JUX09MRF9QT1dFUl9FVkVOVFMKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcmVjb3JkX29sZF9hcmdzW10gPSB7CiAJInJlY29yZCIsCiAJIi1hIiwKIAkiLVIiLApAQCAtOTgwLDE2ICsxMDE1LDQzIEBACiAJIi1lIiwgInNjaGVkOnNjaGVkX3dha2V1cCIsCiAJIi1lIiwgInNjaGVkOnNjaGVkX3N3aXRjaCIsCiB9OworI2VuZGlmCisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcmVjb3JkX25ld19hcmdzW10gPSB7CisJInJlY29yZCIsCisJIi1hIiwKKwkiLVIiLAorCSItZiIsCisJIi1jIiwgIjEiLAorCSItZSIsICJwb3dlcjpjcHVfZnJlcXVlbmN5IiwKKwkiLWUiLCAicG93ZXI6Y3B1X2lkbGUiLAorCSItZSIsICJzY2hlZDpzY2hlZF93YWtldXAiLAorCSItZSIsICJzY2hlZDpzY2hlZF9zd2l0Y2giLAorfTsKIAogc3RhdGljIGludCBfX2NtZF9yZWNvcmQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQogewogCXVuc2lnbmVkIGludCByZWNfYXJnYywgaSwgajsKIAljb25zdCBjaGFyICoqcmVjX2FyZ3Y7CisJY29uc3QgY2hhciAqIGNvbnN0ICpyZWNvcmRfYXJncyA9IHJlY29yZF9uZXdfYXJnczsKKwl1bnNpZ25lZCBpbnQgcmVjb3JkX2VsZW1zID0gQVJSQVlfU0laRShyZWNvcmRfbmV3X2FyZ3MpOwogCi0JcmVjX2FyZ2MgPSBBUlJBWV9TSVpFKHJlY29yZF9hcmdzKSArIGFyZ2MgLSAxOworI2lmZGVmIFNVUFBPUlRfT0xEX1BPV0VSX0VWRU5UUworCWlmICghaXNfdmFsaWRfdHJhY2Vwb2ludCgicG93ZXI6Y3B1X2lkbGUiKSAmJgorCSAgICBpc192YWxpZF90cmFjZXBvaW50KCJwb3dlcjpwb3dlcl9zdGFydCIpKSB7CisJCXVzZV9vbGRfcG93ZXJfZXZlbnRzID0gMTsKKwkJcmVjb3JkX2FyZ3MgPSByZWNvcmRfb2xkX2FyZ3M7CisJCXJlY29yZF9lbGVtcyA9IEFSUkFZX1NJWkUocmVjb3JkX29sZF9hcmdzKTsKKwl9CisjZW5kaWYKKworCXJlY19hcmdjID0gcmVjb3JkX2VsZW1zICsgYXJnYyAtIDE7CiAJcmVjX2FyZ3YgPSBjYWxsb2MocmVjX2FyZ2MgKyAxLCBzaXplb2YoY2hhciAqKSk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyZWNvcmRfYXJncyk7IGkrKykKKwlpZiAocmVjX2FyZ3YgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlmb3IgKGkgPSAwOyBpIDwgcmVjb3JkX2VsZW1zOyBpKyspCiAJCXJlY19hcmd2W2ldID0gc3RyZHVwKHJlY29yZF9hcmdzW2ldKTsKIAogCWZvciAoaiA9IDE7IGogPCAodW5zaWduZWQgaW50KWFyZ2M7IGorKywgaSsrKQpAQCAtMTAxOCw2ICsxMDgwLDggQEAKIAlPUFRfQ0FMTEJBQ0soJ3AnLCAicHJvY2VzcyIsIE5VTEwsICJwcm9jZXNzIiwKIAkJICAgICAgInByb2Nlc3Mgc2VsZWN0b3IuIFBhc3MgYSBwaWQgb3IgcHJvY2VzcyBuYW1lLiIsCiAJCSAgICAgICBwYXJzZV9wcm9jZXNzKSwKKwlPUFRfU1RSSU5HKDAsICJzeW1mcyIsICZzeW1ib2xfY29uZi5zeW1mcywgImRpcmVjdG9yeSIsCisJCSAgICAiTG9vayBmb3IgZmlsZXMgd2l0aCBzeW1ib2xzIHJlbGF0aXZlIHRvIHRoaXMgZGlyZWN0b3J5IiksCiAJT1BUX0VORCgpCiB9OwogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tdG9wLmMgYi90b29scy9wZXJmL2J1aWx0aW4tdG9wLmMKaW5kZXggZGQ2MjU4MC4uMWU2N2FiOSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXRvcC5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi10b3AuYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgInBlcmYuaCIKIAogI2luY2x1ZGUgInV0aWwvY29sb3IuaCIKKyNpbmNsdWRlICJ1dGlsL2V2c2VsLmgiCiAjaW5jbHVkZSAidXRpbC9zZXNzaW9uLmgiCiAjaW5jbHVkZSAidXRpbC9zeW1ib2wuaCIKICNpbmNsdWRlICJ1dGlsL3RocmVhZC5oIgpAQCAtMjksNiArMzAsNyBAQAogI2luY2x1ZGUgInV0aWwvcGFyc2Utb3B0aW9ucy5oIgogI2luY2x1ZGUgInV0aWwvcGFyc2UtZXZlbnRzLmgiCiAjaW5jbHVkZSAidXRpbC9jcHVtYXAuaCIKKyNpbmNsdWRlICJ1dGlsL3h5YXJyYXkuaCIKIAogI2luY2x1ZGUgInV0aWwvZGVidWcuaCIKIApAQCAtNTUsNyArNTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKLXN0YXRpYyBpbnQJCQkqZmRbTUFYX05SX0NQVVNdW01BWF9DT1VOVEVSU107CisjZGVmaW5lIEZEKGUsIHgsIHkpICgqKGludCAqKXh5YXJyYXlfX2VudHJ5KGUtPmZkLCB4LCB5KSkKIAogc3RhdGljIGJvb2wJCQlzeXN0ZW1fd2lkZQkJCT0gIGZhbHNlOwogCkBAIC02NiwxMCArNjgsOSBAQAogCiBzdGF0aWMgaW50CQkJdGFyZ2V0X3BpZAkJCT0gICAgIC0xOwogc3RhdGljIGludAkJCXRhcmdldF90aWQJCQk9ICAgICAtMTsKLXN0YXRpYyBwaWRfdAkJCSphbGxfdGlkcwkJCT0gICAgICBOVUxMOwotc3RhdGljIGludAkJCXRocmVhZF9udW0JCQk9ICAgICAgMDsKK3N0YXRpYyBzdHJ1Y3QgdGhyZWFkX21hcAkqdGhyZWFkczsKIHN0YXRpYyBib29sCQkJaW5oZXJpdAkJCQk9ICBmYWxzZTsKLXN0YXRpYyBpbnQJCQlucl9jcHVzCQkJCT0gICAgICAwOworc3RhdGljIHN0cnVjdCBjcHVfbWFwCQkqY3B1czsKIHN0YXRpYyBpbnQJCQlyZWFsdGltZV9wcmlvCQkJPSAgICAgIDA7CiBzdGF0aWMgYm9vbAkJCWdyb3VwCQkJCT0gIGZhbHNlOwogc3RhdGljIHVuc2lnbmVkIGludAkJcGFnZV9zaXplOwpAQCAtMTAwLDYgKzEwMSw3IEBACiBzdHJ1Y3Qgc3ltX2VudHJ5CQkqc3ltX2ZpbHRlcl9lbnRyeV9zY2hlZAkJPSAgIE5VTEw7CiBzdGF0aWMgaW50CQkJc3ltX3BjbnRfZmlsdGVyCQkJPSAgICAgIDU7CiBzdGF0aWMgaW50CQkJc3ltX2NvdW50ZXIJCQk9ICAgICAgMDsKK3N0YXRpYyBzdHJ1Y3QgcGVyZl9ldnNlbAkqc3ltX2V2c2VsCQkJPSAgIE5VTEw7CiBzdGF0aWMgaW50CQkJZGlzcGxheV93ZWlnaHRlZAkJPSAgICAgLTE7CiBzdGF0aWMgY29uc3QgY2hhcgkJKmNwdV9saXN0OwogCkBAIC0zNTMsNyArMzU1LDcgQEAKIAkJcmV0dXJuOwogCiAJc3ltYm9sID0gc3ltX2VudHJ5X19zeW1ib2woc3ltZSk7Ci0JcHJpbnRmKCJTaG93aW5nICVzIGZvciAlc1xuIiwgZXZlbnRfbmFtZShzeW1fY291bnRlciksIHN5bWJvbC0+bmFtZSk7CisJcHJpbnRmKCJTaG93aW5nICVzIGZvciAlc1xuIiwgZXZlbnRfbmFtZShzeW1fZXZzZWwpLCBzeW1ib2wtPm5hbWUpOwogCXByaW50ZigiICBFdmVudHMgIFBjbnQgKD49JWQlJSlcbiIsIHN5bV9wY250X2ZpbHRlcik7CiAKIAlwdGhyZWFkX211dGV4X2xvY2soJnN5bWUtPnNyYy0+bG9jayk7CkBAIC00NjAsNyArNDYyLDggQEAKIHN0YXRpYyB2b2lkIHByaW50X3N5bV90YWJsZSh2b2lkKQogewogCWludCBwcmludGVkID0gMCwgajsKLQlpbnQgY291bnRlciwgc25hcCA9ICFkaXNwbGF5X3dlaWdodGVkID8gc3ltX2NvdW50ZXIgOiAwOworCXN0cnVjdCBwZXJmX2V2c2VsICpjb3VudGVyOworCWludCBzbmFwID0gIWRpc3BsYXlfd2VpZ2h0ZWQgPyBzeW1fY291bnRlciA6IDA7CiAJZmxvYXQgc2FtcGxlc19wZXJfc2VjID0gc2FtcGxlcy9kZWxheV9zZWNzOwogCWZsb2F0IGtzYW1wbGVzX3Blcl9zZWMgPSBrZXJuZWxfc2FtcGxlcy9kZWxheV9zZWNzOwogCWZsb2F0IHVzX3NhbXBsZXNfcGVyX3NlYyA9ICh1c19zYW1wbGVzKS9kZWxheV9zZWNzOwpAQCAtNTMyLDcgKzUzNSw5IEBACiAJfQogCiAJaWYgKG5yX2NvdW50ZXJzID09IDEgfHwgIWRpc3BsYXlfd2VpZ2h0ZWQpIHsKLQkJcHJpbnRmKCIlTGQiLCAodTY0KWF0dHJzWzBdLnNhbXBsZV9wZXJpb2QpOworCQlzdHJ1Y3QgcGVyZl9ldnNlbCAqZmlyc3Q7CisJCWZpcnN0ID0gbGlzdF9lbnRyeShldnNlbF9saXN0Lm5leHQsIHN0cnVjdCBwZXJmX2V2c2VsLCBub2RlKTsKKwkJcHJpbnRmKCIlTGQiLCBmaXJzdC0+YXR0ci5zYW1wbGVfcGVyaW9kKTsKIAkJaWYgKGZyZXEpCiAJCQlwcmludGYoIkh6ICIpOwogCQllbHNlCkBAIC01NDAsOSArNTQ1LDkgQEAKIAl9CiAKIAlpZiAoIWRpc3BsYXlfd2VpZ2h0ZWQpCi0JCXByaW50ZigiJXMiLCBldmVudF9uYW1lKHN5bV9jb3VudGVyKSk7Ci0JZWxzZSBmb3IgKGNvdW50ZXIgPSAwOyBjb3VudGVyIDwgbnJfY291bnRlcnM7IGNvdW50ZXIrKykgewotCQlpZiAoY291bnRlcikKKwkJcHJpbnRmKCIlcyIsIGV2ZW50X25hbWUoc3ltX2V2c2VsKSk7CisJZWxzZSBsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvdW50ZXIsICZldnNlbF9saXN0LCBub2RlKSB7CisJCWlmIChjb3VudGVyLT5pZHgpCiAJCQlwcmludGYoIi8iKTsKIAogCQlwcmludGYoIiVzIiwgZXZlbnRfbmFtZShjb3VudGVyKSk7CkBAIC01NTgsMTIgKzU2MywxMiBAQAogCQlwcmludGYoIiAoYWxsIik7CiAKIAlpZiAoY3B1X2xpc3QpCi0JCXByaW50ZigiLCBDUFUlczogJXMpXG4iLCBucl9jcHVzID4gMSA/ICJzIiA6ICIiLCBjcHVfbGlzdCk7CisJCXByaW50ZigiLCBDUFUlczogJXMpXG4iLCBjcHVzLT5uciA+IDEgPyAicyIgOiAiIiwgY3B1X2xpc3QpOwogCWVsc2UgewogCQlpZiAodGFyZ2V0X3RpZCAhPSAtMSkKIAkJCXByaW50ZigiKVxuIik7CiAJCWVsc2UKLQkJCXByaW50ZigiLCAlZCBDUFUlcylcbiIsIG5yX2NwdXMsIG5yX2NwdXMgPiAxID8gInMiIDogIiIpOworCQkJcHJpbnRmKCIsICVkIENQVSVzKVxuIiwgY3B1cy0+bnIsIGNwdXMtPm5yID4gMSA/ICJzIiA6ICIiKTsKIAl9CiAKIAlwcmludGYoIiUtKi4qc1xuIiwgd2luX3dpZHRoLCB3aW5fd2lkdGgsIGdyYXBoX2RvdHRlZF9saW5lKTsKQEAgLTczOSw3ICs3NDQsNyBAQAogCWZwcmludGYoc3Rkb3V0LCAiXHRbZV0gICAgIGRpc3BsYXkgZW50cmllcyAobGluZXMpLiAgICAgICAgICAgXHQoJWQpXG4iLCBwcmludF9lbnRyaWVzKTsKIAogCWlmIChucl9jb3VudGVycyA+IDEpCi0JCWZwcmludGYoc3Rkb3V0LCAiXHRbRV0gICAgIGFjdGl2ZSBldmVudCBjb3VudGVyLiAgICAgICAgICAgICAgXHQoJXMpXG4iLCBldmVudF9uYW1lKHN5bV9jb3VudGVyKSk7CisJCWZwcmludGYoc3Rkb3V0LCAiXHRbRV0gICAgIGFjdGl2ZSBldmVudCBjb3VudGVyLiAgICAgICAgICAgICAgXHQoJXMpXG4iLCBldmVudF9uYW1lKHN5bV9ldnNlbCkpOwogCiAJZnByaW50ZihzdGRvdXQsICJcdFtmXSAgICAgcHJvZmlsZSBkaXNwbGF5IGZpbHRlciAoY291bnQpLiAgICBcdCglZClcbiIsIGNvdW50X2ZpbHRlcik7CiAKQEAgLTgyNiwxOSArODMxLDIzIEBACiAJCQlicmVhazsKIAkJY2FzZSAnRSc6CiAJCQlpZiAobnJfY291bnRlcnMgPiAxKSB7Ci0JCQkJaW50IGk7Ci0KIAkJCQlmcHJpbnRmKHN0ZGVyciwgIlxuQXZhaWxhYmxlIGV2ZW50czoiKTsKLQkJCQlmb3IgKGkgPSAwOyBpIDwgbnJfY291bnRlcnM7IGkrKykKLQkJCQkJZnByaW50ZihzdGRlcnIsICJcblx0JWQgJXMiLCBpLCBldmVudF9uYW1lKGkpKTsKKworCQkJCWxpc3RfZm9yX2VhY2hfZW50cnkoc3ltX2V2c2VsLCAmZXZzZWxfbGlzdCwgbm9kZSkKKwkJCQkJZnByaW50ZihzdGRlcnIsICJcblx0JWQgJXMiLCBzeW1fZXZzZWwtPmlkeCwgZXZlbnRfbmFtZShzeW1fZXZzZWwpKTsKIAogCQkJCXByb21wdF9pbnRlZ2VyKCZzeW1fY291bnRlciwgIkVudGVyIGRldGFpbHMgZXZlbnQgY291bnRlciIpOwogCiAJCQkJaWYgKHN5bV9jb3VudGVyID49IG5yX2NvdW50ZXJzKSB7Ci0JCQkJCWZwcmludGYoc3RkZXJyLCAiU29ycnksIG5vIHN1Y2ggZXZlbnQsIHVzaW5nICVzLlxuIiwgZXZlbnRfbmFtZSgwKSk7CisJCQkJCXN5bV9ldnNlbCA9IGxpc3RfZW50cnkoZXZzZWxfbGlzdC5uZXh0LCBzdHJ1Y3QgcGVyZl9ldnNlbCwgbm9kZSk7CiAJCQkJCXN5bV9jb3VudGVyID0gMDsKKwkJCQkJZnByaW50ZihzdGRlcnIsICJTb3JyeSwgbm8gc3VjaCBldmVudCwgdXNpbmcgJXMuXG4iLCBldmVudF9uYW1lKHN5bV9ldnNlbCkpOwogCQkJCQlzbGVlcCgxKTsKKwkJCQkJYnJlYWs7CiAJCQkJfQorCQkJCWxpc3RfZm9yX2VhY2hfZW50cnkoc3ltX2V2c2VsLCAmZXZzZWxfbGlzdCwgbm9kZSkKKwkJCQkJaWYgKHN5bV9ldnNlbC0+aWR4ID09IHN5bV9jb3VudGVyKQorCQkJCQkJYnJlYWs7CiAJCQl9IGVsc2Ugc3ltX2NvdW50ZXIgPSAwOwogCQkJYnJlYWs7CiAJCWNhc2UgJ2YnOgpAQCAtOTc3LDEyICs5ODYsMTMgQEAKIH0KIAogc3RhdGljIHZvaWQgZXZlbnRfX3Byb2Nlc3Nfc2FtcGxlKGNvbnN0IGV2ZW50X3QgKnNlbGYsCi0JCQkJIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24sIGludCBjb3VudGVyKQorCQkJCSAgc3RydWN0IHNhbXBsZV9kYXRhICpzYW1wbGUsCisJCQkJICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLAorCQkJCSAgc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsKQogewogCXU2NCBpcCA9IHNlbGYtPmlwLmlwOwogCXN0cnVjdCBzeW1fZW50cnkgKnN5bWU7CiAJc3RydWN0IGFkZHJfbG9jYXRpb24gYWw7Ci0Jc3RydWN0IHNhbXBsZV9kYXRhIGRhdGE7CiAJc3RydWN0IG1hY2hpbmUgKm1hY2hpbmU7CiAJdTggb3JpZ2luID0gc2VsZi0+aGVhZGVyLm1pc2MgJiBQRVJGX1JFQ09SRF9NSVNDX0NQVU1PREVfTUFTSzsKIApAQCAtMTAyNSw3ICsxMDM1LDcgQEAKIAlpZiAoc2VsZi0+aGVhZGVyLm1pc2MgJiBQRVJGX1JFQ09SRF9NSVNDX0VYQUNUX0lQKQogCQlleGFjdF9zYW1wbGVzKys7CiAKLQlpZiAoZXZlbnRfX3ByZXByb2Nlc3Nfc2FtcGxlKHNlbGYsIHNlc3Npb24sICZhbCwgJmRhdGEsCisJaWYgKGV2ZW50X19wcmVwcm9jZXNzX3NhbXBsZShzZWxmLCBzZXNzaW9uLCAmYWwsIHNhbXBsZSwKIAkJCQkgICAgIHN5bWJvbF9maWx0ZXIpIDwgMCB8fAogCSAgICBhbC5maWx0ZXJlZCkKIAkJcmV0dXJuOwpAQCAtMTA3MSw5ICsxMDgxLDkgQEAKIAogCXN5bWUgPSBzeW1ib2xfX3ByaXYoYWwuc3ltKTsKIAlpZiAoIXN5bWUtPnNraXApIHsKLQkJc3ltZS0+Y291bnRbY291bnRlcl0rKzsKKwkJc3ltZS0+Y291bnRbZXZzZWwtPmlkeF0rKzsKIAkJc3ltZS0+b3JpZ2luID0gb3JpZ2luOwotCQlyZWNvcmRfcHJlY2lzZV9pcChzeW1lLCBjb3VudGVyLCBpcCk7CisJCXJlY29yZF9wcmVjaXNlX2lwKHN5bWUsIGV2c2VsLT5pZHgsIGlwKTsKIAkJcHRocmVhZF9tdXRleF9sb2NrKCZhY3RpdmVfc3ltYm9sc19sb2NrKTsKIAkJaWYgKGxpc3RfZW1wdHkoJnN5bWUtPm5vZGUpIHx8ICFzeW1lLT5ub2RlLm5leHQpCiAJCQlfX2xpc3RfaW5zZXJ0X2FjdGl2ZV9zeW0oc3ltZSk7CkBAIC0xMDgyLDEyICsxMDkyLDI0IEBACiB9CiAKIHN0cnVjdCBtbWFwX2RhdGEgewotCWludAkJCWNvdW50ZXI7CiAJdm9pZAkJCSpiYXNlOwogCWludAkJCW1hc2s7CiAJdW5zaWduZWQgaW50CQlwcmV2OwogfTsKIAorc3RhdGljIGludCBwZXJmX2V2c2VsX19hbGxvY19tbWFwX3Blcl90aHJlYWQoc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsLAorCQkJCQkgICAgIGludCBuY3B1cywgaW50IG50aHJlYWRzKQoreworCWV2c2VsLT5wcml2ID0geHlhcnJheV9fbmV3KG5jcHVzLCBudGhyZWFkcywgc2l6ZW9mKHN0cnVjdCBtbWFwX2RhdGEpKTsKKwlyZXR1cm4gZXZzZWwtPnByaXYgIT0gTlVMTCA/IDAgOiAtRU5PTUVNOworfQorCitzdGF0aWMgdm9pZCBwZXJmX2V2c2VsX19mcmVlX21tYXAoc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsKQoreworCXh5YXJyYXlfX2RlbGV0ZShldnNlbC0+cHJpdik7CisJZXZzZWwtPnByaXYgPSBOVUxMOworfQorCiBzdGF0aWMgdW5zaWduZWQgaW50IG1tYXBfcmVhZF9oZWFkKHN0cnVjdCBtbWFwX2RhdGEgKm1kKQogewogCXN0cnVjdCBwZXJmX2V2ZW50X21tYXBfcGFnZSAqcGMgPSBtZC0+YmFzZTsKQEAgLTExMDAsMTEgKzExMjIsMTUgQEAKIH0KIAogc3RhdGljIHZvaWQgcGVyZl9zZXNzaW9uX19tbWFwX3JlYWRfY291bnRlcihzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmLAotCQkJCQkgICAgc3RydWN0IG1tYXBfZGF0YSAqbWQpCisJCQkJCSAgICBzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwsCisJCQkJCSAgICBpbnQgY3B1LCBpbnQgdGhyZWFkX2lkeCkKIHsKKwlzdHJ1Y3QgeHlhcnJheSAqbW1hcF9hcnJheSA9IGV2c2VsLT5wcml2OworCXN0cnVjdCBtbWFwX2RhdGEgKm1kID0geHlhcnJheV9fZW50cnkobW1hcF9hcnJheSwgY3B1LCB0aHJlYWRfaWR4KTsKIAl1bnNpZ25lZCBpbnQgaGVhZCA9IG1tYXBfcmVhZF9oZWFkKG1kKTsKIAl1bnNpZ25lZCBpbnQgb2xkID0gbWQtPnByZXY7CiAJdW5zaWduZWQgY2hhciAqZGF0YSA9IG1kLT5iYXNlICsgcGFnZV9zaXplOworCXN0cnVjdCBzYW1wbGVfZGF0YSBzYW1wbGU7CiAJaW50IGRpZmY7CiAKIAkvKgpAQCAtMTE1MiwxMCArMTE3OCwxMSBAQAogCQkJZXZlbnQgPSAmZXZlbnRfY29weTsKIAkJfQogCisJCWV2ZW50X19wYXJzZV9zYW1wbGUoZXZlbnQsIHNlbGYsICZzYW1wbGUpOwogCQlpZiAoZXZlbnQtPmhlYWRlci50eXBlID09IFBFUkZfUkVDT1JEX1NBTVBMRSkKLQkJCWV2ZW50X19wcm9jZXNzX3NhbXBsZShldmVudCwgc2VsZiwgbWQtPmNvdW50ZXIpOworCQkJZXZlbnRfX3Byb2Nlc3Nfc2FtcGxlKGV2ZW50LCAmc2FtcGxlLCBzZWxmLCBldnNlbCk7CiAJCWVsc2UKLQkJCWV2ZW50X19wcm9jZXNzKGV2ZW50LCBzZWxmKTsKKwkJCWV2ZW50X19wcm9jZXNzKGV2ZW50LCAmc2FtcGxlLCBzZWxmKTsKIAkJb2xkICs9IHNpemU7CiAJfQogCkBAIC0xMTYzLDM2ICsxMTkwLDM5IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcG9sbGZkICpldmVudF9hcnJheTsKLXN0YXRpYyBzdHJ1Y3QgbW1hcF9kYXRhICptbWFwX2FycmF5W01BWF9OUl9DUFVTXVtNQVhfQ09VTlRFUlNdOwogCiBzdGF0aWMgdm9pZCBwZXJmX3Nlc3Npb25fX21tYXBfcmVhZChzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmKQogewotCWludCBpLCBjb3VudGVyLCB0aHJlYWRfaW5kZXg7CisJc3RydWN0IHBlcmZfZXZzZWwgKmNvdW50ZXI7CisJaW50IGksIHRocmVhZF9pbmRleDsKIAotCWZvciAoaSA9IDA7IGkgPCBucl9jcHVzOyBpKyspIHsKLQkJZm9yIChjb3VudGVyID0gMDsgY291bnRlciA8IG5yX2NvdW50ZXJzOyBjb3VudGVyKyspCisJZm9yIChpID0gMDsgaSA8IGNwdXMtPm5yOyBpKyspIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShjb3VudGVyLCAmZXZzZWxfbGlzdCwgbm9kZSkgewogCQkJZm9yICh0aHJlYWRfaW5kZXggPSAwOwotCQkJCXRocmVhZF9pbmRleCA8IHRocmVhZF9udW07CisJCQkJdGhyZWFkX2luZGV4IDwgdGhyZWFkcy0+bnI7CiAJCQkJdGhyZWFkX2luZGV4KyspIHsKIAkJCQlwZXJmX3Nlc3Npb25fX21tYXBfcmVhZF9jb3VudGVyKHNlbGYsCi0JCQkJCSZtbWFwX2FycmF5W2ldW2NvdW50ZXJdW3RocmVhZF9pbmRleF0pOworCQkJCQljb3VudGVyLCBpLCB0aHJlYWRfaW5kZXgpOwogCQkJfQorCQl9CiAJfQogfQogCiBpbnQgbnJfcG9sbDsKIGludCBncm91cF9mZDsKIAotc3RhdGljIHZvaWQgc3RhcnRfY291bnRlcihpbnQgaSwgaW50IGNvdW50ZXIpCitzdGF0aWMgdm9pZCBzdGFydF9jb3VudGVyKGludCBpLCBzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwpCiB7CisJc3RydWN0IHh5YXJyYXkgKm1tYXBfYXJyYXkgPSBldnNlbC0+cHJpdjsKKwlzdHJ1Y3QgbW1hcF9kYXRhICptbTsKIAlzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyICphdHRyOwogCWludCBjcHUgPSAtMTsKIAlpbnQgdGhyZWFkX2luZGV4OwogCiAJaWYgKHRhcmdldF90aWQgPT0gLTEpCi0JCWNwdSA9IGNwdW1hcFtpXTsKKwkJY3B1ID0gY3B1cy0+bWFwW2ldOwogCi0JYXR0ciA9IGF0dHJzICsgY291bnRlcjsKKwlhdHRyID0gJmV2c2VsLT5hdHRyOwogCiAJYXR0ci0+c2FtcGxlX3R5cGUJPSBQRVJGX1NBTVBMRV9JUCB8IFBFUkZfU0FNUExFX1RJRDsKIApAQCAtMTIwNSwxNiArMTIzNSwxOCBAQAogCWF0dHItPmluaGVyaXQJCT0gKGNwdSA8IDApICYmIGluaGVyaXQ7CiAJYXR0ci0+bW1hcAkJPSAxOwogCi0JZm9yICh0aHJlYWRfaW5kZXggPSAwOyB0aHJlYWRfaW5kZXggPCB0aHJlYWRfbnVtOyB0aHJlYWRfaW5kZXgrKykgeworCWZvciAodGhyZWFkX2luZGV4ID0gMDsgdGhyZWFkX2luZGV4IDwgdGhyZWFkcy0+bnI7IHRocmVhZF9pbmRleCsrKSB7CiB0cnlfYWdhaW46Ci0JCWZkW2ldW2NvdW50ZXJdW3RocmVhZF9pbmRleF0gPSBzeXNfcGVyZl9ldmVudF9vcGVuKGF0dHIsCi0JCQkJYWxsX3RpZHNbdGhyZWFkX2luZGV4XSwgY3B1LCBncm91cF9mZCwgMCk7CisJCUZEKGV2c2VsLCBpLCB0aHJlYWRfaW5kZXgpID0gc3lzX3BlcmZfZXZlbnRfb3BlbihhdHRyLAorCQkJCXRocmVhZHMtPm1hcFt0aHJlYWRfaW5kZXhdLCBjcHUsIGdyb3VwX2ZkLCAwKTsKIAotCQlpZiAoZmRbaV1bY291bnRlcl1bdGhyZWFkX2luZGV4XSA8IDApIHsKKwkJaWYgKEZEKGV2c2VsLCBpLCB0aHJlYWRfaW5kZXgpIDwgMCkgewogCQkJaW50IGVyciA9IGVycm5vOwogCiAJCQlpZiAoZXJyID09IEVQRVJNIHx8IGVyciA9PSBFQUNDRVMpCi0JCQkJZGllKCJObyBwZXJtaXNzaW9uIC0gYXJlIHlvdSByb290P1xuIik7CisJCQkJZGllKCJQZXJtaXNzaW9uIGVycm9yIC0gYXJlIHlvdSByb290P1xuIgorCQkJCQkiXHQgQ29uc2lkZXIgdHdlYWtpbmciCisJCQkJCSIgL3Byb2Mvc3lzL2tlcm5lbC9wZXJmX2V2ZW50X3BhcmFub2lkLlxuIik7CiAJCQkvKgogCQkJICogSWYgaXQncyBjeWNsZXMgdGhlbiBmYWxsIGJhY2sgdG8gaHJ0aW1lcgogCQkJICogYmFzZWQgY3B1LWNsb2NrLXRpY2sgc3cgY291bnRlciwgd2hpY2gKQEAgLTEyMzEsMzAgKzEyNjMsMzAgQEAKIAkJCQlnb3RvIHRyeV9hZ2FpbjsKIAkJCX0KIAkJCXByaW50ZigiXG4iKTsKLQkJCWVycm9yKCJwZXJmY291bnRlciBzeXNjYWxsIHJldHVybmVkIHdpdGggJWQgKCVzKVxuIiwKLQkJCQkJZmRbaV1bY291bnRlcl1bdGhyZWFkX2luZGV4XSwgc3RyZXJyb3IoZXJyKSk7CisJCQllcnJvcigic3lzX3BlcmZfZXZlbnRfb3BlbigpIHN5c2NhbGwgcmV0dXJuZWQgd2l0aCAlZCAoJXMpLiAgL2Jpbi9kbWVzZyBtYXkgcHJvdmlkZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLlxuIiwKKwkJCQkJRkQoZXZzZWwsIGksIHRocmVhZF9pbmRleCksIHN0cmVycm9yKGVycikpOwogCQkJZGllKCJObyBDT05GSUdfUEVSRl9FVkVOVFM9eSBrZXJuZWwgc3VwcG9ydCBjb25maWd1cmVkP1xuIik7CiAJCQlleGl0KC0xKTsKIAkJfQotCQlhc3NlcnQoZmRbaV1bY291bnRlcl1bdGhyZWFkX2luZGV4XSA+PSAwKTsKLQkJZmNudGwoZmRbaV1bY291bnRlcl1bdGhyZWFkX2luZGV4XSwgRl9TRVRGTCwgT19OT05CTE9DSyk7CisJCWFzc2VydChGRChldnNlbCwgaSwgdGhyZWFkX2luZGV4KSA+PSAwKTsKKwkJZmNudGwoRkQoZXZzZWwsIGksIHRocmVhZF9pbmRleCksIEZfU0VURkwsIE9fTk9OQkxPQ0spOwogCiAJCS8qCiAJCSAqIEZpcnN0IGNvdW50ZXIgYWN0cyBhcyB0aGUgZ3JvdXAgbGVhZGVyOgogCQkgKi8KIAkJaWYgKGdyb3VwICYmIGdyb3VwX2ZkID09IC0xKQotCQkJZ3JvdXBfZmQgPSBmZFtpXVtjb3VudGVyXVt0aHJlYWRfaW5kZXhdOworCQkJZ3JvdXBfZmQgPSBGRChldnNlbCwgaSwgdGhyZWFkX2luZGV4KTsKIAotCQlldmVudF9hcnJheVtucl9wb2xsXS5mZCA9IGZkW2ldW2NvdW50ZXJdW3RocmVhZF9pbmRleF07CisJCWV2ZW50X2FycmF5W25yX3BvbGxdLmZkID0gRkQoZXZzZWwsIGksIHRocmVhZF9pbmRleCk7CiAJCWV2ZW50X2FycmF5W25yX3BvbGxdLmV2ZW50cyA9IFBPTExJTjsKIAkJbnJfcG9sbCsrOwogCi0JCW1tYXBfYXJyYXlbaV1bY291bnRlcl1bdGhyZWFkX2luZGV4XS5jb3VudGVyID0gY291bnRlcjsKLQkJbW1hcF9hcnJheVtpXVtjb3VudGVyXVt0aHJlYWRfaW5kZXhdLnByZXYgPSAwOwotCQltbWFwX2FycmF5W2ldW2NvdW50ZXJdW3RocmVhZF9pbmRleF0ubWFzayA9IG1tYXBfcGFnZXMqcGFnZV9zaXplIC0gMTsKLQkJbW1hcF9hcnJheVtpXVtjb3VudGVyXVt0aHJlYWRfaW5kZXhdLmJhc2UgPSBtbWFwKE5VTEwsIChtbWFwX3BhZ2VzKzEpKnBhZ2Vfc2l6ZSwKLQkJCQlQUk9UX1JFQUQsIE1BUF9TSEFSRUQsIGZkW2ldW2NvdW50ZXJdW3RocmVhZF9pbmRleF0sIDApOwotCQlpZiAobW1hcF9hcnJheVtpXVtjb3VudGVyXVt0aHJlYWRfaW5kZXhdLmJhc2UgPT0gTUFQX0ZBSUxFRCkKKwkJbW0gPSB4eWFycmF5X19lbnRyeShtbWFwX2FycmF5LCBpLCB0aHJlYWRfaW5kZXgpOworCQltbS0+cHJldiA9IDA7CisJCW1tLT5tYXNrID0gbW1hcF9wYWdlcypwYWdlX3NpemUgLSAxOworCQltbS0+YmFzZSA9IG1tYXAoTlVMTCwgKG1tYXBfcGFnZXMrMSkqcGFnZV9zaXplLAorCQkJCVBST1RfUkVBRCwgTUFQX1NIQVJFRCwgRkQoZXZzZWwsIGksIHRocmVhZF9pbmRleCksIDApOworCQlpZiAobW0tPmJhc2UgPT0gTUFQX0ZBSUxFRCkKIAkJCWRpZSgiZmFpbGVkIHRvIG1tYXAgd2l0aCAlZCAoJXMpXG4iLCBlcnJubywgc3RyZXJyb3IoZXJybm8pKTsKIAl9CiB9CkBAIC0xMjYyLDEzICsxMjk0LDEzIEBACiBzdGF0aWMgaW50IF9fY21kX3RvcCh2b2lkKQogewogCXB0aHJlYWRfdCB0aHJlYWQ7Ci0JaW50IGksIGNvdW50ZXI7Ci0JaW50IHJldDsKKwlzdHJ1Y3QgcGVyZl9ldnNlbCAqY291bnRlcjsKKwlpbnQgaSwgcmV0OwogCS8qCiAJICogRklYTUU6IHBlcmZfc2Vzc2lvbl9fbmV3IHNob3VsZCBhbGxvdyBwYXNzaW5nIGEgT19NTUFQLCBzbyB0aGF0IGFsbCB0aGlzCiAJICogbW1hcCByZWFkaW5nLCBldGMgaXMgZW5jYXBzdWxhdGVkIGluIGl0LiBVc2UgT19XUk9OTFkgZm9yIG5vdy4KIAkgKi8KLQlzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uID0gcGVyZl9zZXNzaW9uX19uZXcoTlVMTCwgT19XUk9OTFksIGZhbHNlLCBmYWxzZSk7CisJc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiA9IHBlcmZfc2Vzc2lvbl9fbmV3KE5VTEwsIE9fV1JPTkxZLCBmYWxzZSwgZmFsc2UsIE5VTEwpOwogCWlmIChzZXNzaW9uID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC0xMjc3LDkgKzEzMDksOSBAQAogCWVsc2UKIAkJZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkcyhldmVudF9fcHJvY2Vzcywgc2Vzc2lvbik7CiAKLQlmb3IgKGkgPSAwOyBpIDwgbnJfY3B1czsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IGNwdXMtPm5yOyBpKyspIHsKIAkJZ3JvdXBfZmQgPSAtMTsKLQkJZm9yIChjb3VudGVyID0gMDsgY291bnRlciA8IG5yX2NvdW50ZXJzOyBjb3VudGVyKyspCisJCWxpc3RfZm9yX2VhY2hfZW50cnkoY291bnRlciwgJmV2c2VsX2xpc3QsIG5vZGUpCiAJCQlzdGFydF9jb3VudGVyKGksIGNvdW50ZXIpOwogCX0KIApAQCAtMTM2OCw4ICsxNDAwLDggQEAKIAogaW50IGNtZF90b3AoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXggX191c2VkKQogewotCWludCBjb3VudGVyOwotCWludCBpLGo7CisJc3RydWN0IHBlcmZfZXZzZWwgKnBvczsKKwlpbnQgc3RhdHVzID0gLUVOT01FTTsKIAogCXBhZ2Vfc2l6ZSA9IHN5c2NvbmYoX1NDX1BBR0VfU0laRSk7CiAKQEAgLTEzNzcsMzQgKzE0MDksMTcgQEAKIAlpZiAoYXJnYykKIAkJdXNhZ2Vfd2l0aF9vcHRpb25zKHRvcF91c2FnZSwgb3B0aW9ucyk7CiAKLQlpZiAodGFyZ2V0X3BpZCAhPSAtMSkgeworCWlmICh0YXJnZXRfcGlkICE9IC0xKQogCQl0YXJnZXRfdGlkID0gdGFyZ2V0X3BpZDsKLQkJdGhyZWFkX251bSA9IGZpbmRfYWxsX3RpZCh0YXJnZXRfcGlkLCAmYWxsX3RpZHMpOwotCQlpZiAodGhyZWFkX251bSA8PSAwKSB7Ci0JCQlmcHJpbnRmKHN0ZGVyciwgIkNhbid0IGZpbmQgYWxsIHRocmVhZHMgb2YgcGlkICVkXG4iLAotCQkJCXRhcmdldF9waWQpOwotCQkJdXNhZ2Vfd2l0aF9vcHRpb25zKHRvcF91c2FnZSwgb3B0aW9ucyk7Ci0JCX0KLQl9IGVsc2UgewotCQlhbGxfdGlkcz1tYWxsb2Moc2l6ZW9mKHBpZF90KSk7Ci0JCWlmICghYWxsX3RpZHMpCi0JCQlyZXR1cm4gLUVOT01FTTsKIAotCQlhbGxfdGlkc1swXSA9IHRhcmdldF90aWQ7Ci0JCXRocmVhZF9udW0gPSAxOworCXRocmVhZHMgPSB0aHJlYWRfbWFwX19uZXcodGFyZ2V0X3BpZCwgdGFyZ2V0X3RpZCk7CisJaWYgKHRocmVhZHMgPT0gTlVMTCkgeworCQlwcl9lcnIoIlByb2JsZW1zIGZpbmRpbmcgdGhyZWFkcyBvZiBtb25pdG9yXG4iKTsKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKHRvcF91c2FnZSwgb3B0aW9ucyk7CiAJfQogCi0JZm9yIChpID0gMDsgaSA8IE1BWF9OUl9DUFVTOyBpKyspIHsKLQkJZm9yIChqID0gMDsgaiA8IE1BWF9DT1VOVEVSUzsgaisrKSB7Ci0JCQlmZFtpXVtqXSA9IG1hbGxvYyhzaXplb2YoaW50KSp0aHJlYWRfbnVtKTsKLQkJCW1tYXBfYXJyYXlbaV1bal0gPSB6YWxsb2MoCi0JCQkJc2l6ZW9mKHN0cnVjdCBtbWFwX2RhdGEpKnRocmVhZF9udW0pOwotCQkJaWYgKCFmZFtpXVtqXSB8fCAhbW1hcF9hcnJheVtpXVtqXSkKLQkJCQlyZXR1cm4gLUVOT01FTTsKLQkJfQotCX0KLQlldmVudF9hcnJheSA9IG1hbGxvYygKLQkJc2l6ZW9mKHN0cnVjdCBwb2xsZmQpKk1BWF9OUl9DUFVTKk1BWF9DT1VOVEVSUyp0aHJlYWRfbnVtKTsKKwlldmVudF9hcnJheSA9IG1hbGxvYygoc2l6ZW9mKHN0cnVjdCBwb2xsZmQpICoKKwkJCSAgICAgIE1BWF9OUl9DUFVTICogTUFYX0NPVU5URVJTICogdGhyZWFkcy0+bnIpKTsKIAlpZiAoIWV2ZW50X2FycmF5KQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMTQxNSwxNSArMTQzMCwxMCBAQAogCQljcHVfbGlzdCA9IE5VTEw7CiAJfQogCi0JaWYgKCFucl9jb3VudGVycykKLQkJbnJfY291bnRlcnMgPSAxOwotCi0Jc3ltYm9sX2NvbmYucHJpdl9zaXplID0gKHNpemVvZihzdHJ1Y3Qgc3ltX2VudHJ5KSArCi0JCQkJIChucl9jb3VudGVycyArIDEpICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKLQotCXN5bWJvbF9jb25mLnRyeV92bWxpbnV4X3BhdGggPSAoc3ltYm9sX2NvbmYudm1saW51eF9uYW1lID09IE5VTEwpOwotCWlmIChzeW1ib2xfX2luaXQoKSA8IDApCi0JCXJldHVybiAtMTsKKwlpZiAoIW5yX2NvdW50ZXJzICYmIHBlcmZfZXZzZWxfbGlzdF9fY3JlYXRlX2RlZmF1bHQoKSA8IDApIHsKKwkJcHJfZXJyKCJOb3QgZW5vdWdoIG1lbW9yeSBmb3IgZXZlbnQgc2VsZWN0b3IgbGlzdFxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KIAogCWlmIChkZWxheV9zZWNzIDwgMSkKIAkJZGVsYXlfc2VjcyA9IDE7CkBAIC0xNDQwLDIzICsxNDUwLDMzIEBACiAJCWV4aXQoRVhJVF9GQUlMVVJFKTsKIAl9CiAKLQkvKgotCSAqIEZpbGwgaW4gdGhlIG9uZXMgbm90IHNwZWNpZmljYWxseSBpbml0aWFsaXplZCB2aWEgLWM6Ci0JICovCi0JZm9yIChjb3VudGVyID0gMDsgY291bnRlciA8IG5yX2NvdW50ZXJzOyBjb3VudGVyKyspIHsKLQkJaWYgKGF0dHJzW2NvdW50ZXJdLnNhbXBsZV9wZXJpb2QpCisJaWYgKHRhcmdldF90aWQgIT0gLTEpCisJCWNwdXMgPSBjcHVfbWFwX19kdW1teV9uZXcoKTsKKwllbHNlCisJCWNwdXMgPSBjcHVfbWFwX19uZXcoY3B1X2xpc3QpOworCisJaWYgKGNwdXMgPT0gTlVMTCkKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKHRvcF91c2FnZSwgb3B0aW9ucyk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgJmV2c2VsX2xpc3QsIG5vZGUpIHsKKwkJaWYgKHBlcmZfZXZzZWxfX2FsbG9jX21tYXBfcGVyX3RocmVhZChwb3MsIGNwdXMtPm5yLCB0aHJlYWRzLT5ucikgPCAwIHx8CisJCSAgICBwZXJmX2V2c2VsX19hbGxvY19mZChwb3MsIGNwdXMtPm5yLCB0aHJlYWRzLT5ucikgPCAwKQorCQkJZ290byBvdXRfZnJlZV9mZDsKKwkJLyoKKwkJICogRmlsbCBpbiB0aGUgb25lcyBub3Qgc3BlY2lmaWNhbGx5IGluaXRpYWxpemVkIHZpYSAtYzoKKwkJICovCisJCWlmIChwb3MtPmF0dHIuc2FtcGxlX3BlcmlvZCkKIAkJCWNvbnRpbnVlOwogCi0JCWF0dHJzW2NvdW50ZXJdLnNhbXBsZV9wZXJpb2QgPSBkZWZhdWx0X2ludGVydmFsOworCQlwb3MtPmF0dHIuc2FtcGxlX3BlcmlvZCA9IGRlZmF1bHRfaW50ZXJ2YWw7CiAJfQogCi0JaWYgKHRhcmdldF90aWQgIT0gLTEpCi0JCW5yX2NwdXMgPSAxOwotCWVsc2UKLQkJbnJfY3B1cyA9IHJlYWRfY3B1X21hcChjcHVfbGlzdCk7CisJc3ltYm9sX2NvbmYucHJpdl9zaXplID0gKHNpemVvZihzdHJ1Y3Qgc3ltX2VudHJ5KSArCisJCQkJIChucl9jb3VudGVycyArIDEpICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKIAotCWlmIChucl9jcHVzIDwgMSkKLQkJdXNhZ2Vfd2l0aF9vcHRpb25zKHRvcF91c2FnZSwgb3B0aW9ucyk7CisJc3ltYm9sX2NvbmYudHJ5X3ZtbGludXhfcGF0aCA9IChzeW1ib2xfY29uZi52bWxpbnV4X25hbWUgPT0gTlVMTCk7CisJaWYgKHN5bWJvbF9faW5pdCgpIDwgMCkKKwkJcmV0dXJuIC0xOwogCiAJZ2V0X3Rlcm1fZGltZW5zaW9ucygmd2luc2l6ZSk7CiAJaWYgKHByaW50X2VudHJpZXMgPT0gMCkgewpAQCAtMTQ2NCw1ICsxNDg0LDEwIEBACiAJCXNpZ25hbChTSUdXSU5DSCwgc2lnX3dpbmNoX2hhbmRsZXIpOwogCX0KIAotCXJldHVybiBfX2NtZF90b3AoKTsKKwlzdGF0dXMgPSBfX2NtZF90b3AoKTsKK291dF9mcmVlX2ZkOgorCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCAmZXZzZWxfbGlzdCwgbm9kZSkKKwkJcGVyZl9ldnNlbF9fZnJlZV9tbWFwKHBvcyk7CisKKwlyZXR1cm4gc3RhdHVzOwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXRyYWNlLmMgYi90b29scy9wZXJmL2J1aWx0aW4tdHJhY2UuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODZjZmUzOC4uMDAwMDAwMAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tdHJhY2UuYworKysgL2Rldi9udWxsCkBAIC0xLDgyNiArMCwwIEBACi0jaW5jbHVkZSAiYnVpbHRpbi5oIgotCi0jaW5jbHVkZSAicGVyZi5oIgotI2luY2x1ZGUgInV0aWwvY2FjaGUuaCIKLSNpbmNsdWRlICJ1dGlsL2RlYnVnLmgiCi0jaW5jbHVkZSAidXRpbC9leGVjX2NtZC5oIgotI2luY2x1ZGUgInV0aWwvaGVhZGVyLmgiCi0jaW5jbHVkZSAidXRpbC9wYXJzZS1vcHRpb25zLmgiCi0jaW5jbHVkZSAidXRpbC9zZXNzaW9uLmgiCi0jaW5jbHVkZSAidXRpbC9zeW1ib2wuaCIKLSNpbmNsdWRlICJ1dGlsL3RocmVhZC5oIgotI2luY2x1ZGUgInV0aWwvdHJhY2UtZXZlbnQuaCIKLSNpbmNsdWRlICJ1dGlsL3BhcnNlLW9wdGlvbnMuaCIKLSNpbmNsdWRlICJ1dGlsL3V0aWwuaCIKLQotc3RhdGljIGNoYXIgY29uc3QJCSpzY3JpcHRfbmFtZTsKLXN0YXRpYyBjaGFyIGNvbnN0CQkqZ2VuZXJhdGVfc2NyaXB0X2xhbmc7Ci1zdGF0aWMgYm9vbAkJCWRlYnVnX21vZGU7Ci1zdGF0aWMgdTY0CQkJbGFzdF90aW1lc3RhbXA7Ci1zdGF0aWMgdTY0CQkJbnJfdW5vcmRlcmVkOwotZXh0ZXJuIGNvbnN0IHN0cnVjdCBvcHRpb24JcmVjb3JkX29wdGlvbnNbXTsKLQotc3RhdGljIGludCBkZWZhdWx0X3N0YXJ0X3NjcmlwdChjb25zdCBjaGFyICpzY3JpcHQgX191bnVzZWQsCi0JCQkJaW50IGFyZ2MgX191bnVzZWQsCi0JCQkJY29uc3QgY2hhciAqKmFyZ3YgX191bnVzZWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZGVmYXVsdF9zdG9wX3NjcmlwdCh2b2lkKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGRlZmF1bHRfZ2VuZXJhdGVfc2NyaXB0KGNvbnN0IGNoYXIgKm91dGZpbGUgX191bnVzZWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2NyaXB0aW5nX29wcyBkZWZhdWx0X3NjcmlwdGluZ19vcHMgPSB7Ci0JLnN0YXJ0X3NjcmlwdAkJPSBkZWZhdWx0X3N0YXJ0X3NjcmlwdCwKLQkuc3RvcF9zY3JpcHQJCT0gZGVmYXVsdF9zdG9wX3NjcmlwdCwKLQkucHJvY2Vzc19ldmVudAkJPSBwcmludF9ldmVudCwKLQkuZ2VuZXJhdGVfc2NyaXB0CT0gZGVmYXVsdF9nZW5lcmF0ZV9zY3JpcHQsCi19OwotCi1zdGF0aWMgc3RydWN0IHNjcmlwdGluZ19vcHMJKnNjcmlwdGluZ19vcHM7Ci0KLXN0YXRpYyB2b2lkIHNldHVwX3NjcmlwdGluZyh2b2lkKQotewotCXNldHVwX3Blcmxfc2NyaXB0aW5nKCk7Ci0Jc2V0dXBfcHl0aG9uX3NjcmlwdGluZygpOwotCi0Jc2NyaXB0aW5nX29wcyA9ICZkZWZhdWx0X3NjcmlwdGluZ19vcHM7Ci19Ci0KLXN0YXRpYyBpbnQgY2xlYW51cF9zY3JpcHRpbmcodm9pZCkKLXsKLQlwcl9kZWJ1ZygiXG5wZXJmIHRyYWNlIHNjcmlwdCBzdG9wcGVkXG4iKTsKLQotCXJldHVybiBzY3JpcHRpbmdfb3BzLT5zdG9wX3NjcmlwdCgpOwotfQotCi1zdGF0aWMgY2hhciBjb25zdAkJKmlucHV0X25hbWUgPSAicGVyZi5kYXRhIjsKLQotc3RhdGljIGludCBwcm9jZXNzX3NhbXBsZV9ldmVudChldmVudF90ICpldmVudCwgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbikKLXsKLQlzdHJ1Y3Qgc2FtcGxlX2RhdGEgZGF0YTsKLQlzdHJ1Y3QgdGhyZWFkICp0aHJlYWQ7Ci0KLQltZW1zZXQoJmRhdGEsIDAsIHNpemVvZihkYXRhKSk7Ci0JZGF0YS50aW1lID0gLTE7Ci0JZGF0YS5jcHUgPSAtMTsKLQlkYXRhLnBlcmlvZCA9IDE7Ci0KLQlldmVudF9fcGFyc2Vfc2FtcGxlKGV2ZW50LCBzZXNzaW9uLT5zYW1wbGVfdHlwZSwgJmRhdGEpOwotCi0JZHVtcF9wcmludGYoIihJUCwgJWQpOiAlZC8lZDogJSNMeCBwZXJpb2Q6ICVMZFxuIiwgZXZlbnQtPmhlYWRlci5taXNjLAotCQkgICAgZGF0YS5waWQsIGRhdGEudGlkLCBkYXRhLmlwLCBkYXRhLnBlcmlvZCk7Ci0KLQl0aHJlYWQgPSBwZXJmX3Nlc3Npb25fX2ZpbmRuZXcoc2Vzc2lvbiwgZXZlbnQtPmlwLnBpZCk7Ci0JaWYgKHRocmVhZCA9PSBOVUxMKSB7Ci0JCXByX2RlYnVnKCJwcm9ibGVtIHByb2Nlc3NpbmcgJWQgZXZlbnQsIHNraXBwaW5nIGl0LlxuIiwKLQkJCSBldmVudC0+aGVhZGVyLnR5cGUpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JaWYgKHNlc3Npb24tPnNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfUkFXKSB7Ci0JCWlmIChkZWJ1Z19tb2RlKSB7Ci0JCQlpZiAoZGF0YS50aW1lIDwgbGFzdF90aW1lc3RhbXApIHsKLQkJCQlwcl9lcnIoIlNhbXBsZXMgbWlzb3JkZXJlZCwgcHJldmlvdXM6ICVsbHUgIgotCQkJCQkidGhpczogJWxsdVxuIiwgbGFzdF90aW1lc3RhbXAsCi0JCQkJCWRhdGEudGltZSk7Ci0JCQkJbnJfdW5vcmRlcmVkKys7Ci0JCQl9Ci0JCQlsYXN0X3RpbWVzdGFtcCA9IGRhdGEudGltZTsKLQkJCXJldHVybiAwOwotCQl9Ci0JCS8qCi0JCSAqIEZJWE1FOiBiZXR0ZXIgcmVzb2x2ZSBmcm9tIHBpZCBmcm9tIHRoZSBzdHJ1Y3QgdHJhY2VfZW50cnkKLQkJICogZmllbGQsIGFsdGhvdWdoIGl0IHNob3VsZCBiZSB0aGUgc2FtZSB0aGFuIHRoaXMgcGVyZgotCQkgKiBldmVudCBwaWQKLQkJICovCi0JCXNjcmlwdGluZ19vcHMtPnByb2Nlc3NfZXZlbnQoZGF0YS5jcHUsIGRhdGEucmF3X2RhdGEsCi0JCQkJCSAgICAgZGF0YS5yYXdfc2l6ZSwKLQkJCQkJICAgICBkYXRhLnRpbWUsIHRocmVhZC0+Y29tbSk7Ci0JfQotCi0Jc2Vzc2lvbi0+aGlzdHMuc3RhdHMudG90YWxfcGVyaW9kICs9IGRhdGEucGVyaW9kOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdTY0IG5yX2xvc3Q7Ci0KLXN0YXRpYyBpbnQgcHJvY2Vzc19sb3N0X2V2ZW50KGV2ZW50X3QgKmV2ZW50LCBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uIF9fdXNlZCkKLXsKLQlucl9sb3N0ICs9IGV2ZW50LT5sb3N0Lmxvc3Q7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBwZXJmX2V2ZW50X29wcyBldmVudF9vcHMgPSB7Ci0JLnNhbXBsZQk9IHByb2Nlc3Nfc2FtcGxlX2V2ZW50LAotCS5jb21tCT0gZXZlbnRfX3Byb2Nlc3NfY29tbSwKLQkuYXR0cgk9IGV2ZW50X19wcm9jZXNzX2F0dHIsCi0JLmV2ZW50X3R5cGUgPSBldmVudF9fcHJvY2Vzc19ldmVudF90eXBlLAotCS50cmFjaW5nX2RhdGEgPSBldmVudF9fcHJvY2Vzc190cmFjaW5nX2RhdGEsCi0JLmJ1aWxkX2lkID0gZXZlbnRfX3Byb2Nlc3NfYnVpbGRfaWQsCi0JLmxvc3QgPSBwcm9jZXNzX2xvc3RfZXZlbnQsCi0JLm9yZGVyZWRfc2FtcGxlcyA9IHRydWUsCi19OwotCi1leHRlcm4gdm9sYXRpbGUgaW50IHNlc3Npb25fZG9uZTsKLQotc3RhdGljIHZvaWQgc2lnX2hhbmRsZXIoaW50IHNpZyBfX3VudXNlZCkKLXsKLQlzZXNzaW9uX2RvbmUgPSAxOwotfQotCi1zdGF0aWMgaW50IF9fY21kX3RyYWNlKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pCi17Ci0JaW50IHJldDsKLQotCXNpZ25hbChTSUdJTlQsIHNpZ19oYW5kbGVyKTsKLQotCXJldCA9IHBlcmZfc2Vzc2lvbl9fcHJvY2Vzc19ldmVudHMoc2Vzc2lvbiwgJmV2ZW50X29wcyk7Ci0KLQlpZiAoZGVidWdfbW9kZSkgewotCQlwcl9lcnIoIk1pc29yZGVyZWQgdGltZXN0YW1wczogJWxsdVxuIiwgbnJfdW5vcmRlcmVkKTsKLQkJcHJfZXJyKCJMb3N0IGV2ZW50czogJWxsdVxuIiwgbnJfbG9zdCk7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RydWN0IHNjcmlwdF9zcGVjIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkCW5vZGU7Ci0Jc3RydWN0IHNjcmlwdGluZ19vcHMJKm9wczsKLQljaGFyCQkJc3BlY1swXTsKLX07Ci0KLUxJU1RfSEVBRChzY3JpcHRfc3BlY3MpOwotCi1zdGF0aWMgc3RydWN0IHNjcmlwdF9zcGVjICpzY3JpcHRfc3BlY19fbmV3KGNvbnN0IGNoYXIgKnNwZWMsCi0JCQkJCSAgICBzdHJ1Y3Qgc2NyaXB0aW5nX29wcyAqb3BzKQotewotCXN0cnVjdCBzY3JpcHRfc3BlYyAqcyA9IG1hbGxvYyhzaXplb2YoKnMpICsgc3RybGVuKHNwZWMpICsgMSk7Ci0KLQlpZiAocyAhPSBOVUxMKSB7Ci0JCXN0cmNweShzLT5zcGVjLCBzcGVjKTsKLQkJcy0+b3BzID0gb3BzOwotCX0KLQotCXJldHVybiBzOwotfQotCi1zdGF0aWMgdm9pZCBzY3JpcHRfc3BlY19fZGVsZXRlKHN0cnVjdCBzY3JpcHRfc3BlYyAqcykKLXsKLQlmcmVlKHMtPnNwZWMpOwotCWZyZWUocyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNjcmlwdF9zcGVjX19hZGQoc3RydWN0IHNjcmlwdF9zcGVjICpzKQotewotCWxpc3RfYWRkX3RhaWwoJnMtPm5vZGUsICZzY3JpcHRfc3BlY3MpOwotfQotCi1zdGF0aWMgc3RydWN0IHNjcmlwdF9zcGVjICpzY3JpcHRfc3BlY19fZmluZChjb25zdCBjaGFyICpzcGVjKQotewotCXN0cnVjdCBzY3JpcHRfc3BlYyAqczsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkocywgJnNjcmlwdF9zcGVjcywgbm9kZSkKLQkJaWYgKHN0cmNhc2VjbXAocy0+c3BlYywgc3BlYykgPT0gMCkKLQkJCXJldHVybiBzOwotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgc3RydWN0IHNjcmlwdF9zcGVjICpzY3JpcHRfc3BlY19fZmluZG5ldyhjb25zdCBjaGFyICpzcGVjLAotCQkJCQkJc3RydWN0IHNjcmlwdGluZ19vcHMgKm9wcykKLXsKLQlzdHJ1Y3Qgc2NyaXB0X3NwZWMgKnMgPSBzY3JpcHRfc3BlY19fZmluZChzcGVjKTsKLQotCWlmIChzKQotCQlyZXR1cm4gczsKLQotCXMgPSBzY3JpcHRfc3BlY19fbmV3KHNwZWMsIG9wcyk7Ci0JaWYgKCFzKQotCQlnb3RvIG91dF9kZWxldGVfc3BlYzsKLQotCXNjcmlwdF9zcGVjX19hZGQocyk7Ci0KLQlyZXR1cm4gczsKLQotb3V0X2RlbGV0ZV9zcGVjOgotCXNjcmlwdF9zcGVjX19kZWxldGUocyk7Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLQotaW50IHNjcmlwdF9zcGVjX3JlZ2lzdGVyKGNvbnN0IGNoYXIgKnNwZWMsIHN0cnVjdCBzY3JpcHRpbmdfb3BzICpvcHMpCi17Ci0Jc3RydWN0IHNjcmlwdF9zcGVjICpzOwotCi0JcyA9IHNjcmlwdF9zcGVjX19maW5kKHNwZWMpOwotCWlmIChzKQotCQlyZXR1cm4gLTE7Ci0KLQlzID0gc2NyaXB0X3NwZWNfX2ZpbmRuZXcoc3BlYywgb3BzKTsKLQlpZiAoIXMpCi0JCXJldHVybiAtMTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IHNjcmlwdGluZ19vcHMgKnNjcmlwdF9zcGVjX19sb29rdXAoY29uc3QgY2hhciAqc3BlYykKLXsKLQlzdHJ1Y3Qgc2NyaXB0X3NwZWMgKnMgPSBzY3JpcHRfc3BlY19fZmluZChzcGVjKTsKLQlpZiAoIXMpCi0JCXJldHVybiBOVUxMOwotCi0JcmV0dXJuIHMtPm9wczsKLX0KLQotc3RhdGljIHZvaWQgbGlzdF9hdmFpbGFibGVfbGFuZ3VhZ2VzKHZvaWQpCi17Ci0Jc3RydWN0IHNjcmlwdF9zcGVjICpzOwotCi0JZnByaW50ZihzdGRlcnIsICJcbiIpOwotCWZwcmludGYoc3RkZXJyLCAiU2NyaXB0aW5nIGxhbmd1YWdlIGV4dGVuc2lvbnMgKHVzZWQgaW4gIgotCQkicGVyZiB0cmFjZSAtcyBbc3BlYzpdc2NyaXB0LltzcGVjXSk6XG5cbiIpOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShzLCAmc2NyaXB0X3NwZWNzLCBub2RlKQotCQlmcHJpbnRmKHN0ZGVyciwgIiAgJS00MnMgWyVzXVxuIiwgcy0+c3BlYywgcy0+b3BzLT5uYW1lKTsKLQotCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKLX0KLQotc3RhdGljIGludCBwYXJzZV9zY3JpcHRuYW1lKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCBfX3VzZWQsCi0JCQkgICAgY29uc3QgY2hhciAqc3RyLCBpbnQgdW5zZXQgX191c2VkKQotewotCWNoYXIgc3BlY1tQQVRIX01BWF07Ci0JY29uc3QgY2hhciAqc2NyaXB0LCAqZXh0OwotCWludCBsZW47Ci0KLQlpZiAoc3RyY21wKHN0ciwgImxhbmciKSA9PSAwKSB7Ci0JCWxpc3RfYXZhaWxhYmxlX2xhbmd1YWdlcygpOwotCQlleGl0KDApOwotCX0KLQotCXNjcmlwdCA9IHN0cmNocihzdHIsICc6Jyk7Ci0JaWYgKHNjcmlwdCkgewotCQlsZW4gPSBzY3JpcHQgLSBzdHI7Ci0JCWlmIChsZW4gPj0gUEFUSF9NQVgpIHsKLQkJCWZwcmludGYoc3RkZXJyLCAiaW52YWxpZCBsYW5ndWFnZSBzcGVjaWZpZXIiKTsKLQkJCXJldHVybiAtMTsKLQkJfQotCQlzdHJuY3B5KHNwZWMsIHN0ciwgbGVuKTsKLQkJc3BlY1tsZW5dID0gJ1wwJzsKLQkJc2NyaXB0aW5nX29wcyA9IHNjcmlwdF9zcGVjX19sb29rdXAoc3BlYyk7Ci0JCWlmICghc2NyaXB0aW5nX29wcykgewotCQkJZnByaW50ZihzdGRlcnIsICJpbnZhbGlkIGxhbmd1YWdlIHNwZWNpZmllciIpOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0JCXNjcmlwdCsrOwotCX0gZWxzZSB7Ci0JCXNjcmlwdCA9IHN0cjsKLQkJZXh0ID0gc3RycmNocihzY3JpcHQsICcuJyk7Ci0JCWlmICghZXh0KSB7Ci0JCQlmcHJpbnRmKHN0ZGVyciwgImludmFsaWQgc2NyaXB0IGV4dGVuc2lvbiIpOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0JCXNjcmlwdGluZ19vcHMgPSBzY3JpcHRfc3BlY19fbG9va3VwKCsrZXh0KTsKLQkJaWYgKCFzY3JpcHRpbmdfb3BzKSB7Ci0JCQlmcHJpbnRmKHN0ZGVyciwgImludmFsaWQgc2NyaXB0IGV4dGVuc2lvbiIpOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0JfQotCi0Jc2NyaXB0X25hbWUgPSBzdHJkdXAoc2NyaXB0KTsKLQotCXJldHVybiAwOwotfQotCi0jZGVmaW5lIGZvcl9lYWNoX2xhbmcoc2NyaXB0c19kaXIsIGxhbmdfZGlyZW50LCBsYW5nX25leHQpCQlcCi0Jd2hpbGUgKCFyZWFkZGlyX3Ioc2NyaXB0c19kaXIsICZsYW5nX2RpcmVudCwgJmxhbmdfbmV4dCkgJiYJXAotCSAgICAgICBsYW5nX25leHQpCQkJCQkJXAotCQlpZiAobGFuZ19kaXJlbnQuZF90eXBlID09IERUX0RJUiAmJgkJCVwKLQkJICAgIChzdHJjbXAobGFuZ19kaXJlbnQuZF9uYW1lLCAiLiIpKSAmJgkJXAotCQkgICAgKHN0cmNtcChsYW5nX2RpcmVudC5kX25hbWUsICIuLiIpKSkKLQotI2RlZmluZSBmb3JfZWFjaF9zY3JpcHQobGFuZ19kaXIsIHNjcmlwdF9kaXJlbnQsIHNjcmlwdF9uZXh0KQkJXAotCXdoaWxlICghcmVhZGRpcl9yKGxhbmdfZGlyLCAmc2NyaXB0X2RpcmVudCwgJnNjcmlwdF9uZXh0KSAmJglcCi0JICAgICAgIHNjcmlwdF9uZXh0KQkJCQkJCVwKLQkJaWYgKHNjcmlwdF9kaXJlbnQuZF90eXBlICE9IERUX0RJUikKLQotCi0jZGVmaW5lIFJFQ09SRF9TVUZGSVgJCQkiLXJlY29yZCIKLSNkZWZpbmUgUkVQT1JUX1NVRkZJWAkJCSItcmVwb3J0IgotCi1zdHJ1Y3Qgc2NyaXB0X2Rlc2MgewotCXN0cnVjdCBsaXN0X2hlYWQJbm9kZTsKLQljaGFyCQkJKm5hbWU7Ci0JY2hhcgkJCSpoYWxmX2xpbmVyOwotCWNoYXIJCQkqYXJnczsKLX07Ci0KLUxJU1RfSEVBRChzY3JpcHRfZGVzY3MpOwotCi1zdGF0aWMgc3RydWN0IHNjcmlwdF9kZXNjICpzY3JpcHRfZGVzY19fbmV3KGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0Jc3RydWN0IHNjcmlwdF9kZXNjICpzID0gemFsbG9jKHNpemVvZigqcykpOwotCi0JaWYgKHMgIT0gTlVMTCAmJiBuYW1lKQotCQlzLT5uYW1lID0gc3RyZHVwKG5hbWUpOwotCi0JcmV0dXJuIHM7Ci19Ci0KLXN0YXRpYyB2b2lkIHNjcmlwdF9kZXNjX19kZWxldGUoc3RydWN0IHNjcmlwdF9kZXNjICpzKQotewotCWZyZWUocy0+bmFtZSk7Ci0JZnJlZShzLT5oYWxmX2xpbmVyKTsKLQlmcmVlKHMtPmFyZ3MpOwotCWZyZWUocyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNjcmlwdF9kZXNjX19hZGQoc3RydWN0IHNjcmlwdF9kZXNjICpzKQotewotCWxpc3RfYWRkX3RhaWwoJnMtPm5vZGUsICZzY3JpcHRfZGVzY3MpOwotfQotCi1zdGF0aWMgc3RydWN0IHNjcmlwdF9kZXNjICpzY3JpcHRfZGVzY19fZmluZChjb25zdCBjaGFyICpuYW1lKQotewotCXN0cnVjdCBzY3JpcHRfZGVzYyAqczsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkocywgJnNjcmlwdF9kZXNjcywgbm9kZSkKLQkJaWYgKHN0cmNhc2VjbXAocy0+bmFtZSwgbmFtZSkgPT0gMCkKLQkJCXJldHVybiBzOwotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgc3RydWN0IHNjcmlwdF9kZXNjICpzY3JpcHRfZGVzY19fZmluZG5ldyhjb25zdCBjaGFyICpuYW1lKQotewotCXN0cnVjdCBzY3JpcHRfZGVzYyAqcyA9IHNjcmlwdF9kZXNjX19maW5kKG5hbWUpOwotCi0JaWYgKHMpCi0JCXJldHVybiBzOwotCi0JcyA9IHNjcmlwdF9kZXNjX19uZXcobmFtZSk7Ci0JaWYgKCFzKQotCQlnb3RvIG91dF9kZWxldGVfZGVzYzsKLQotCXNjcmlwdF9kZXNjX19hZGQocyk7Ci0KLQlyZXR1cm4gczsKLQotb3V0X2RlbGV0ZV9kZXNjOgotCXNjcmlwdF9kZXNjX19kZWxldGUocyk7Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIGNoYXIgKmVuZHNfd2l0aChjaGFyICpzdHIsIGNvbnN0IGNoYXIgKnN1ZmZpeCkKLXsKLQlzaXplX3Qgc3VmZml4X2xlbiA9IHN0cmxlbihzdWZmaXgpOwotCWNoYXIgKnAgPSBzdHI7Ci0KLQlpZiAoc3RybGVuKHN0cikgPiBzdWZmaXhfbGVuKSB7Ci0JCXAgPSBzdHIgKyBzdHJsZW4oc3RyKSAtIHN1ZmZpeF9sZW47Ci0JCWlmICghc3RybmNtcChwLCBzdWZmaXgsIHN1ZmZpeF9sZW4pKQotCQkJcmV0dXJuIHA7Ci0JfQotCi0JcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBjaGFyICpsdHJpbShjaGFyICpzdHIpCi17Ci0JaW50IGxlbiA9IHN0cmxlbihzdHIpOwotCi0Jd2hpbGUgKGxlbiAmJiBpc3NwYWNlKCpzdHIpKSB7Ci0JCWxlbi0tOwotCQlzdHIrKzsKLQl9Ci0KLQlyZXR1cm4gc3RyOwotfQotCi1zdGF0aWMgaW50IHJlYWRfc2NyaXB0X2luZm8oc3RydWN0IHNjcmlwdF9kZXNjICpkZXNjLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKLXsKLQljaGFyIGxpbmVbQlVGU0laXSwgKnA7Ci0JRklMRSAqZnA7Ci0KLQlmcCA9IGZvcGVuKGZpbGVuYW1lLCAiciIpOwotCWlmICghZnApCi0JCXJldHVybiAtMTsKLQotCXdoaWxlIChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGZwKSkgewotCQlwID0gbHRyaW0obGluZSk7Ci0JCWlmIChzdHJsZW4ocCkgPT0gMCkKLQkJCWNvbnRpbnVlOwotCQlpZiAoKnAgIT0gJyMnKQotCQkJY29udGludWU7Ci0JCXArKzsKLQkJaWYgKHN0cmxlbihwKSAmJiAqcCA9PSAnIScpCi0JCQljb250aW51ZTsKLQotCQlwID0gbHRyaW0ocCk7Ci0JCWlmIChzdHJsZW4ocCkgJiYgcFtzdHJsZW4ocCkgLSAxXSA9PSAnXG4nKQotCQkJcFtzdHJsZW4ocCkgLSAxXSA9ICdcMCc7Ci0KLQkJaWYgKCFzdHJuY21wKHAsICJkZXNjcmlwdGlvbjoiLCBzdHJsZW4oImRlc2NyaXB0aW9uOiIpKSkgewotCQkJcCArPSBzdHJsZW4oImRlc2NyaXB0aW9uOiIpOwotCQkJZGVzYy0+aGFsZl9saW5lciA9IHN0cmR1cChsdHJpbShwKSk7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCWlmICghc3RybmNtcChwLCAiYXJnczoiLCBzdHJsZW4oImFyZ3M6IikpKSB7Ci0JCQlwICs9IHN0cmxlbigiYXJnczoiKTsKLQkJCWRlc2MtPmFyZ3MgPSBzdHJkdXAobHRyaW0ocCkpOwotCQkJY29udGludWU7Ci0JCX0KLQl9Ci0KLQlmY2xvc2UoZnApOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbGlzdF9hdmFpbGFibGVfc2NyaXB0cyhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQgX191c2VkLAotCQkJCSAgY29uc3QgY2hhciAqcyBfX3VzZWQsIGludCB1bnNldCBfX3VzZWQpCi17Ci0Jc3RydWN0IGRpcmVudCAqc2NyaXB0X25leHQsICpsYW5nX25leHQsIHNjcmlwdF9kaXJlbnQsIGxhbmdfZGlyZW50OwotCWNoYXIgc2NyaXB0c19wYXRoW01BWFBBVEhMRU5dOwotCURJUiAqc2NyaXB0c19kaXIsICpsYW5nX2RpcjsKLQljaGFyIHNjcmlwdF9wYXRoW01BWFBBVEhMRU5dOwotCWNoYXIgbGFuZ19wYXRoW01BWFBBVEhMRU5dOwotCXN0cnVjdCBzY3JpcHRfZGVzYyAqZGVzYzsKLQljaGFyIGZpcnN0X2hhbGZbQlVGU0laXTsKLQljaGFyICpzY3JpcHRfcm9vdDsKLQljaGFyICpzdHI7Ci0KLQlzbnByaW50ZihzY3JpcHRzX3BhdGgsIE1BWFBBVEhMRU4sICIlcy9zY3JpcHRzIiwgcGVyZl9leGVjX3BhdGgoKSk7Ci0KLQlzY3JpcHRzX2RpciA9IG9wZW5kaXIoc2NyaXB0c19wYXRoKTsKLQlpZiAoIXNjcmlwdHNfZGlyKQotCQlyZXR1cm4gLTE7Ci0KLQlmb3JfZWFjaF9sYW5nKHNjcmlwdHNfZGlyLCBsYW5nX2RpcmVudCwgbGFuZ19uZXh0KSB7Ci0JCXNucHJpbnRmKGxhbmdfcGF0aCwgTUFYUEFUSExFTiwgIiVzLyVzL2JpbiIsIHNjcmlwdHNfcGF0aCwKLQkJCSBsYW5nX2RpcmVudC5kX25hbWUpOwotCQlsYW5nX2RpciA9IG9wZW5kaXIobGFuZ19wYXRoKTsKLQkJaWYgKCFsYW5nX2RpcikKLQkJCWNvbnRpbnVlOwotCi0JCWZvcl9lYWNoX3NjcmlwdChsYW5nX2Rpciwgc2NyaXB0X2RpcmVudCwgc2NyaXB0X25leHQpIHsKLQkJCXNjcmlwdF9yb290ID0gc3RyZHVwKHNjcmlwdF9kaXJlbnQuZF9uYW1lKTsKLQkJCXN0ciA9IGVuZHNfd2l0aChzY3JpcHRfcm9vdCwgUkVQT1JUX1NVRkZJWCk7Ci0JCQlpZiAoc3RyKSB7Ci0JCQkJKnN0ciA9ICdcMCc7Ci0JCQkJZGVzYyA9IHNjcmlwdF9kZXNjX19maW5kbmV3KHNjcmlwdF9yb290KTsKLQkJCQlzbnByaW50ZihzY3JpcHRfcGF0aCwgTUFYUEFUSExFTiwgIiVzLyVzIiwKLQkJCQkJIGxhbmdfcGF0aCwgc2NyaXB0X2RpcmVudC5kX25hbWUpOwotCQkJCXJlYWRfc2NyaXB0X2luZm8oZGVzYywgc2NyaXB0X3BhdGgpOwotCQkJfQotCQkJZnJlZShzY3JpcHRfcm9vdCk7Ci0JCX0KLQl9Ci0KLQlmcHJpbnRmKHN0ZG91dCwgIkxpc3Qgb2YgYXZhaWxhYmxlIHRyYWNlIHNjcmlwdHM6XG4iKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRlc2MsICZzY3JpcHRfZGVzY3MsIG5vZGUpIHsKLQkJc3ByaW50ZihmaXJzdF9oYWxmLCAiJXMgJXMiLCBkZXNjLT5uYW1lLAotCQkJZGVzYy0+YXJncyA/IGRlc2MtPmFyZ3MgOiAiIik7Ci0JCWZwcmludGYoc3Rkb3V0LCAiICAlLTM2cyAlc1xuIiwgZmlyc3RfaGFsZiwKLQkJCWRlc2MtPmhhbGZfbGluZXIgPyBkZXNjLT5oYWxmX2xpbmVyIDogIiIpOwotCX0KLQotCWV4aXQoMCk7Ci19Ci0KLXN0YXRpYyBjaGFyICpnZXRfc2NyaXB0X3BhdGgoY29uc3QgY2hhciAqc2NyaXB0X3Jvb3QsIGNvbnN0IGNoYXIgKnN1ZmZpeCkKLXsKLQlzdHJ1Y3QgZGlyZW50ICpzY3JpcHRfbmV4dCwgKmxhbmdfbmV4dCwgc2NyaXB0X2RpcmVudCwgbGFuZ19kaXJlbnQ7Ci0JY2hhciBzY3JpcHRzX3BhdGhbTUFYUEFUSExFTl07Ci0JY2hhciBzY3JpcHRfcGF0aFtNQVhQQVRITEVOXTsKLQlESVIgKnNjcmlwdHNfZGlyLCAqbGFuZ19kaXI7Ci0JY2hhciBsYW5nX3BhdGhbTUFYUEFUSExFTl07Ci0JY2hhciAqc3RyLCAqX19zY3JpcHRfcm9vdDsKLQljaGFyICpwYXRoID0gTlVMTDsKLQotCXNucHJpbnRmKHNjcmlwdHNfcGF0aCwgTUFYUEFUSExFTiwgIiVzL3NjcmlwdHMiLCBwZXJmX2V4ZWNfcGF0aCgpKTsKLQotCXNjcmlwdHNfZGlyID0gb3BlbmRpcihzY3JpcHRzX3BhdGgpOwotCWlmICghc2NyaXB0c19kaXIpCi0JCXJldHVybiBOVUxMOwotCi0JZm9yX2VhY2hfbGFuZyhzY3JpcHRzX2RpciwgbGFuZ19kaXJlbnQsIGxhbmdfbmV4dCkgewotCQlzbnByaW50ZihsYW5nX3BhdGgsIE1BWFBBVEhMRU4sICIlcy8lcy9iaW4iLCBzY3JpcHRzX3BhdGgsCi0JCQkgbGFuZ19kaXJlbnQuZF9uYW1lKTsKLQkJbGFuZ19kaXIgPSBvcGVuZGlyKGxhbmdfcGF0aCk7Ci0JCWlmICghbGFuZ19kaXIpCi0JCQljb250aW51ZTsKLQotCQlmb3JfZWFjaF9zY3JpcHQobGFuZ19kaXIsIHNjcmlwdF9kaXJlbnQsIHNjcmlwdF9uZXh0KSB7Ci0JCQlfX3NjcmlwdF9yb290ID0gc3RyZHVwKHNjcmlwdF9kaXJlbnQuZF9uYW1lKTsKLQkJCXN0ciA9IGVuZHNfd2l0aChfX3NjcmlwdF9yb290LCBzdWZmaXgpOwotCQkJaWYgKHN0cikgewotCQkJCSpzdHIgPSAnXDAnOwotCQkJCWlmIChzdHJjbXAoX19zY3JpcHRfcm9vdCwgc2NyaXB0X3Jvb3QpKQotCQkJCQljb250aW51ZTsKLQkJCQlzbnByaW50ZihzY3JpcHRfcGF0aCwgTUFYUEFUSExFTiwgIiVzLyVzIiwKLQkJCQkJIGxhbmdfcGF0aCwgc2NyaXB0X2RpcmVudC5kX25hbWUpOwotCQkJCXBhdGggPSBzdHJkdXAoc2NyaXB0X3BhdGgpOwotCQkJCWZyZWUoX19zY3JpcHRfcm9vdCk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlmcmVlKF9fc2NyaXB0X3Jvb3QpOwotCQl9Ci0JfQotCi0JcmV0dXJuIHBhdGg7Ci19Ci0KLXN0YXRpYyBib29sIGlzX3RvcF9zY3JpcHQoY29uc3QgY2hhciAqc2NyaXB0X3BhdGgpCi17Ci0JcmV0dXJuIGVuZHNfd2l0aCgoY2hhciAqKXNjcmlwdF9wYXRoLCAidG9wIikgPT0gTlVMTCA/IGZhbHNlIDogdHJ1ZTsKLX0KLQotc3RhdGljIGludCBoYXNfcmVxdWlyZWRfYXJnKGNoYXIgKnNjcmlwdF9wYXRoKQotewotCXN0cnVjdCBzY3JpcHRfZGVzYyAqZGVzYzsKLQlpbnQgbl9hcmdzID0gMDsKLQljaGFyICpwOwotCi0JZGVzYyA9IHNjcmlwdF9kZXNjX19uZXcoTlVMTCk7Ci0KLQlpZiAocmVhZF9zY3JpcHRfaW5mbyhkZXNjLCBzY3JpcHRfcGF0aCkpCi0JCWdvdG8gb3V0OwotCi0JaWYgKCFkZXNjLT5hcmdzKQotCQlnb3RvIG91dDsKLQotCWZvciAocCA9IGRlc2MtPmFyZ3M7ICpwOyBwKyspCi0JCWlmICgqcCA9PSAnPCcpCi0JCQluX2FyZ3MrKzsKLW91dDoKLQlzY3JpcHRfZGVzY19fZGVsZXRlKGRlc2MpOwotCi0JcmV0dXJuIG5fYXJnczsKLX0KLQotc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB0cmFjZV91c2FnZVtdID0gewotCSJwZXJmIHRyYWNlIFs8b3B0aW9ucz5dIiwKLQkicGVyZiB0cmFjZSBbPG9wdGlvbnM+XSByZWNvcmQgPHNjcmlwdD4gWzxyZWNvcmQtb3B0aW9ucz5dIDxjb21tYW5kPiIsCi0JInBlcmYgdHJhY2UgWzxvcHRpb25zPl0gcmVwb3J0IDxzY3JpcHQ+IFtzY3JpcHQtYXJnc10iLAotCSJwZXJmIHRyYWNlIFs8b3B0aW9ucz5dIDxzY3JpcHQ+IFs8cmVjb3JkLW9wdGlvbnM+XSA8Y29tbWFuZD4iLAotCSJwZXJmIHRyYWNlIFs8b3B0aW9ucz5dIDx0b3Atc2NyaXB0PiBbc2NyaXB0LWFyZ3NdIiwKLQlOVUxMCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7Ci0JT1BUX0JPT0xFQU4oJ0QnLCAiZHVtcC1yYXctdHJhY2UiLCAmZHVtcF90cmFjZSwKLQkJICAgICJkdW1wIHJhdyB0cmFjZSBpbiBBU0NJSSIpLAotCU9QVF9JTkNSKCd2JywgInZlcmJvc2UiLCAmdmVyYm9zZSwKLQkJICAgICJiZSBtb3JlIHZlcmJvc2UgKHNob3cgc3ltYm9sIGFkZHJlc3MsIGV0YykiKSwKLQlPUFRfQk9PTEVBTignTCcsICJMYXRlbmN5IiwgJmxhdGVuY3lfZm9ybWF0LAotCQkgICAgInNob3cgbGF0ZW5jeSBhdHRyaWJ1dGVzIChpcnFzL3ByZWVtcHRpb24gZGlzYWJsZWQsIGV0YykiKSwKLQlPUFRfQ0FMTEJBQ0tfTk9PUFQoJ2wnLCAibGlzdCIsIE5VTEwsIE5VTEwsICJsaXN0IGF2YWlsYWJsZSBzY3JpcHRzIiwKLQkJCSAgIGxpc3RfYXZhaWxhYmxlX3NjcmlwdHMpLAotCU9QVF9DQUxMQkFDSygncycsICJzY3JpcHQiLCBOVUxMLCAibmFtZSIsCi0JCSAgICAgInNjcmlwdCBmaWxlIG5hbWUgKGxhbmc6c2NyaXB0IG5hbWUsIHNjcmlwdCBuYW1lLCBvciAqKSIsCi0JCSAgICAgcGFyc2Vfc2NyaXB0bmFtZSksCi0JT1BUX1NUUklORygnZycsICJnZW4tc2NyaXB0IiwgJmdlbmVyYXRlX3NjcmlwdF9sYW5nLCAibGFuZyIsCi0JCSAgICJnZW5lcmF0ZSBwZXJmLXRyYWNlLnh4IHNjcmlwdCBpbiBzcGVjaWZpZWQgbGFuZ3VhZ2UiKSwKLQlPUFRfU1RSSU5HKCdpJywgImlucHV0IiwgJmlucHV0X25hbWUsICJmaWxlIiwKLQkJICAgICJpbnB1dCBmaWxlIG5hbWUiKSwKLQlPUFRfQk9PTEVBTignZCcsICJkZWJ1Zy1tb2RlIiwgJmRlYnVnX21vZGUsCi0JCSAgICJkbyB2YXJpb3VzIGNoZWNrcyBsaWtlIHNhbXBsZXMgb3JkZXJpbmcgYW5kIGxvc3QgZXZlbnRzIiksCi0KLQlPUFRfRU5EKCkKLX07Ci0KLXN0YXRpYyBib29sIGhhdmVfY21kKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKLXsKLQljaGFyICoqX19hcmd2ID0gbWFsbG9jKHNpemVvZihjb25zdCBjaGFyICopICogYXJnYyk7Ci0KLQlpZiAoIV9fYXJndikKLQkJZGllKCJtYWxsb2MiKTsKLQltZW1jcHkoX19hcmd2LCBhcmd2LCBzaXplb2YoY29uc3QgY2hhciAqKSAqIGFyZ2MpOwotCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIChjb25zdCBjaGFyICoqKV9fYXJndiwgcmVjb3JkX29wdGlvbnMsCi0JCQkgICAgIE5VTEwsIFBBUlNFX09QVF9TVE9QX0FUX05PTl9PUFRJT04pOwotCWZyZWUoX19hcmd2KTsKLQotCXJldHVybiBhcmdjICE9IDA7Ci19Ci0KLWludCBjbWRfdHJhY2UoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXggX191c2VkKQotewotCWNoYXIgKnJlY19zY3JpcHRfcGF0aCA9IE5VTEw7Ci0JY2hhciAqcmVwX3NjcmlwdF9wYXRoID0gTlVMTDsKLQlzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uOwotCWNoYXIgKnNjcmlwdF9wYXRoID0gTlVMTDsKLQljb25zdCBjaGFyICoqX19hcmd2OwotCWJvb2wgc3lzdGVtX3dpZGU7Ci0JaW50IGksIGosIGVycjsKLQotCXNldHVwX3NjcmlwdGluZygpOwotCi0JYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgb3B0aW9ucywgdHJhY2VfdXNhZ2UsCi0JCQkgICAgIFBBUlNFX09QVF9TVE9QX0FUX05PTl9PUFRJT04pOwotCi0JaWYgKGFyZ2MgPiAxICYmICFzdHJuY21wKGFyZ3ZbMF0sICJyZWMiLCBzdHJsZW4oInJlYyIpKSkgewotCQlyZWNfc2NyaXB0X3BhdGggPSBnZXRfc2NyaXB0X3BhdGgoYXJndlsxXSwgUkVDT1JEX1NVRkZJWCk7Ci0JCWlmICghcmVjX3NjcmlwdF9wYXRoKQotCQkJcmV0dXJuIGNtZF9yZWNvcmQoYXJnYywgYXJndiwgTlVMTCk7Ci0JfQotCi0JaWYgKGFyZ2MgPiAxICYmICFzdHJuY21wKGFyZ3ZbMF0sICJyZXAiLCBzdHJsZW4oInJlcCIpKSkgewotCQlyZXBfc2NyaXB0X3BhdGggPSBnZXRfc2NyaXB0X3BhdGgoYXJndlsxXSwgUkVQT1JUX1NVRkZJWCk7Ci0JCWlmICghcmVwX3NjcmlwdF9wYXRoKSB7Ci0JCQlmcHJpbnRmKHN0ZGVyciwKLQkJCQkiUGxlYXNlIHNwZWNpZnkgYSB2YWxpZCByZXBvcnQgc2NyaXB0IgotCQkJCSIoc2VlICdwZXJmIHRyYWNlIC1sJyBmb3IgbGlzdGluZylcbiIpOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0JfQotCi0JLyogbWFrZSBzdXJlIFBFUkZfRVhFQ19QQVRIIGlzIHNldCBmb3Igc2NyaXB0cyAqLwotCXBlcmZfc2V0X2FyZ3ZfZXhlY19wYXRoKHBlcmZfZXhlY19wYXRoKCkpOwotCi0JaWYgKGFyZ2MgJiYgIXNjcmlwdF9uYW1lICYmICFyZWNfc2NyaXB0X3BhdGggJiYgIXJlcF9zY3JpcHRfcGF0aCkgewotCQlpbnQgbGl2ZV9waXBlWzJdOwotCQlpbnQgcmVwX2FyZ3M7Ci0JCXBpZF90IHBpZDsKLQotCQlyZWNfc2NyaXB0X3BhdGggPSBnZXRfc2NyaXB0X3BhdGgoYXJndlswXSwgUkVDT1JEX1NVRkZJWCk7Ci0JCXJlcF9zY3JpcHRfcGF0aCA9IGdldF9zY3JpcHRfcGF0aChhcmd2WzBdLCBSRVBPUlRfU1VGRklYKTsKLQotCQlpZiAoIXJlY19zY3JpcHRfcGF0aCAmJiAhcmVwX3NjcmlwdF9wYXRoKSB7Ci0JCQlmcHJpbnRmKHN0ZGVyciwgIiBDb3VsZG4ndCBmaW5kIHNjcmlwdCAlc1xuXG4gU2VlIHBlcmYiCi0JCQkJIiB0cmFjZSAtbCBmb3IgYXZhaWxhYmxlIHNjcmlwdHMuXG4iLCBhcmd2WzBdKTsKLQkJCXVzYWdlX3dpdGhfb3B0aW9ucyh0cmFjZV91c2FnZSwgb3B0aW9ucyk7Ci0JCX0KLQotCQlpZiAoaXNfdG9wX3NjcmlwdChhcmd2WzBdKSkgewotCQkJcmVwX2FyZ3MgPSBhcmdjIC0gMTsKLQkJfSBlbHNlIHsKLQkJCWludCByZWNfYXJnczsKLQotCQkJcmVwX2FyZ3MgPSBoYXNfcmVxdWlyZWRfYXJnKHJlcF9zY3JpcHRfcGF0aCk7Ci0JCQlyZWNfYXJncyA9IChhcmdjIC0gMSkgLSByZXBfYXJnczsKLQkJCWlmIChyZWNfYXJncyA8IDApIHsKLQkJCQlmcHJpbnRmKHN0ZGVyciwgIiAlcyBzY3JpcHQgcmVxdWlyZXMgb3B0aW9ucy4iCi0JCQkJCSJcblxuIFNlZSBwZXJmIHRyYWNlIC1sIGZvciBhdmFpbGFibGUgIgotCQkJCQkic2NyaXB0cyBhbmQgb3B0aW9ucy5cbiIsIGFyZ3ZbMF0pOwotCQkJCXVzYWdlX3dpdGhfb3B0aW9ucyh0cmFjZV91c2FnZSwgb3B0aW9ucyk7Ci0JCQl9Ci0JCX0KLQotCQlpZiAocGlwZShsaXZlX3BpcGUpIDwgMCkgewotCQkJcGVycm9yKCJmYWlsZWQgdG8gY3JlYXRlIHBpcGUiKTsKLQkJCWV4aXQoLTEpOwotCQl9Ci0KLQkJcGlkID0gZm9yaygpOwotCQlpZiAocGlkIDwgMCkgewotCQkJcGVycm9yKCJmYWlsZWQgdG8gZm9yayIpOwotCQkJZXhpdCgtMSk7Ci0JCX0KLQotCQlpZiAoIXBpZCkgewotCQkJc3lzdGVtX3dpZGUgPSB0cnVlOwotCQkJaiA9IDA7Ci0KLQkJCWR1cDIobGl2ZV9waXBlWzFdLCAxKTsKLQkJCWNsb3NlKGxpdmVfcGlwZVswXSk7Ci0KLQkJCWlmICghaXNfdG9wX3NjcmlwdChhcmd2WzBdKSkKLQkJCQlzeXN0ZW1fd2lkZSA9ICFoYXZlX2NtZChhcmdjIC0gcmVwX2FyZ3MsCi0JCQkJCQkJJmFyZ3ZbcmVwX2FyZ3NdKTsKLQotCQkJX19hcmd2ID0gbWFsbG9jKChhcmdjICsgNikgKiBzaXplb2YoY29uc3QgY2hhciAqKSk7Ci0JCQlpZiAoIV9fYXJndikKLQkJCQlkaWUoIm1hbGxvYyIpOwotCi0JCQlfX2FyZ3ZbaisrXSA9ICIvYmluL3NoIjsKLQkJCV9fYXJndltqKytdID0gcmVjX3NjcmlwdF9wYXRoOwotCQkJaWYgKHN5c3RlbV93aWRlKQotCQkJCV9fYXJndltqKytdID0gIi1hIjsKLQkJCV9fYXJndltqKytdID0gIi1xIjsKLQkJCV9fYXJndltqKytdID0gIi1vIjsKLQkJCV9fYXJndltqKytdID0gIi0iOwotCQkJZm9yIChpID0gcmVwX2FyZ3MgKyAxOyBpIDwgYXJnYzsgaSsrKQotCQkJCV9fYXJndltqKytdID0gYXJndltpXTsKLQkJCV9fYXJndltqKytdID0gTlVMTDsKLQotCQkJZXhlY3ZwKCIvYmluL3NoIiwgKGNoYXIgKiopX19hcmd2KTsKLQkJCWZyZWUoX19hcmd2KTsKLQkJCWV4aXQoLTEpOwotCQl9Ci0KLQkJZHVwMihsaXZlX3BpcGVbMF0sIDApOwotCQljbG9zZShsaXZlX3BpcGVbMV0pOwotCi0JCV9fYXJndiA9IG1hbGxvYygoYXJnYyArIDQpICogc2l6ZW9mKGNvbnN0IGNoYXIgKikpOwotCQlpZiAoIV9fYXJndikKLQkJCWRpZSgibWFsbG9jIik7Ci0JCWogPSAwOwotCQlfX2FyZ3ZbaisrXSA9ICIvYmluL3NoIjsKLQkJX19hcmd2W2orK10gPSByZXBfc2NyaXB0X3BhdGg7Ci0JCWZvciAoaSA9IDE7IGkgPCByZXBfYXJncyArIDE7IGkrKykKLQkJCV9fYXJndltqKytdID0gYXJndltpXTsKLQkJX19hcmd2W2orK10gPSAiLWkiOwotCQlfX2FyZ3ZbaisrXSA9ICItIjsKLQkJX19hcmd2W2orK10gPSBOVUxMOwotCi0JCWV4ZWN2cCgiL2Jpbi9zaCIsIChjaGFyICoqKV9fYXJndik7Ci0JCWZyZWUoX19hcmd2KTsKLQkJZXhpdCgtMSk7Ci0JfQotCi0JaWYgKHJlY19zY3JpcHRfcGF0aCkKLQkJc2NyaXB0X3BhdGggPSByZWNfc2NyaXB0X3BhdGg7Ci0JaWYgKHJlcF9zY3JpcHRfcGF0aCkKLQkJc2NyaXB0X3BhdGggPSByZXBfc2NyaXB0X3BhdGg7Ci0KLQlpZiAoc2NyaXB0X3BhdGgpIHsKLQkJc3lzdGVtX3dpZGUgPSBmYWxzZTsKLQkJaiA9IDA7Ci0KLQkJaWYgKHJlY19zY3JpcHRfcGF0aCkKLQkJCXN5c3RlbV93aWRlID0gIWhhdmVfY21kKGFyZ2MgLSAxLCAmYXJndlsxXSk7Ci0KLQkJX19hcmd2ID0gbWFsbG9jKChhcmdjICsgMikgKiBzaXplb2YoY29uc3QgY2hhciAqKSk7Ci0JCWlmICghX19hcmd2KQotCQkJZGllKCJtYWxsb2MiKTsKLQkJX19hcmd2W2orK10gPSAiL2Jpbi9zaCI7Ci0JCV9fYXJndltqKytdID0gc2NyaXB0X3BhdGg7Ci0JCWlmIChzeXN0ZW1fd2lkZSkKLQkJCV9fYXJndltqKytdID0gIi1hIjsKLQkJZm9yIChpID0gMjsgaSA8IGFyZ2M7IGkrKykKLQkJCV9fYXJndltqKytdID0gYXJndltpXTsKLQkJX19hcmd2W2orK10gPSBOVUxMOwotCi0JCWV4ZWN2cCgiL2Jpbi9zaCIsIChjaGFyICoqKV9fYXJndik7Ci0JCWZyZWUoX19hcmd2KTsKLQkJZXhpdCgtMSk7Ci0JfQotCi0JaWYgKHN5bWJvbF9faW5pdCgpIDwgMCkKLQkJcmV0dXJuIC0xOwotCWlmICghc2NyaXB0X25hbWUpCi0JCXNldHVwX3BhZ2VyKCk7Ci0KLQlzZXNzaW9uID0gcGVyZl9zZXNzaW9uX19uZXcoaW5wdXRfbmFtZSwgT19SRE9OTFksIDAsIGZhbHNlKTsKLQlpZiAoc2Vzc2lvbiA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWlmIChzdHJjbXAoaW5wdXRfbmFtZSwgIi0iKSAmJgotCSAgICAhcGVyZl9zZXNzaW9uX19oYXNfdHJhY2VzKHNlc3Npb24sICJyZWNvcmQgLVIiKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoZ2VuZXJhdGVfc2NyaXB0X2xhbmcpIHsKLQkJc3RydWN0IHN0YXQgcGVyZl9zdGF0OwotCi0JCWludCBpbnB1dCA9IG9wZW4oaW5wdXRfbmFtZSwgT19SRE9OTFkpOwotCQlpZiAoaW5wdXQgPCAwKSB7Ci0JCQlwZXJyb3IoImZhaWxlZCB0byBvcGVuIGZpbGUiKTsKLQkJCWV4aXQoLTEpOwotCQl9Ci0KLQkJZXJyID0gZnN0YXQoaW5wdXQsICZwZXJmX3N0YXQpOwotCQlpZiAoZXJyIDwgMCkgewotCQkJcGVycm9yKCJmYWlsZWQgdG8gc3RhdCBmaWxlIik7Ci0JCQlleGl0KC0xKTsKLQkJfQotCi0JCWlmICghcGVyZl9zdGF0LnN0X3NpemUpIHsKLQkJCWZwcmludGYoc3RkZXJyLCAiemVyby1zaXplZCBmaWxlLCBub3RoaW5nIHRvIGRvIVxuIik7Ci0JCQlleGl0KDApOwotCQl9Ci0KLQkJc2NyaXB0aW5nX29wcyA9IHNjcmlwdF9zcGVjX19sb29rdXAoZ2VuZXJhdGVfc2NyaXB0X2xhbmcpOwotCQlpZiAoIXNjcmlwdGluZ19vcHMpIHsKLQkJCWZwcmludGYoc3RkZXJyLCAiaW52YWxpZCBsYW5ndWFnZSBzcGVjaWZpZXIiKTsKLQkJCXJldHVybiAtMTsKLQkJfQotCi0JCWVyciA9IHNjcmlwdGluZ19vcHMtPmdlbmVyYXRlX3NjcmlwdCgicGVyZi10cmFjZSIpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAoc2NyaXB0X25hbWUpIHsKLQkJZXJyID0gc2NyaXB0aW5nX29wcy0+c3RhcnRfc2NyaXB0KHNjcmlwdF9uYW1lLCBhcmdjLCBhcmd2KTsKLQkJaWYgKGVycikKLQkJCWdvdG8gb3V0OwotCQlwcl9kZWJ1ZygicGVyZiB0cmFjZSBzdGFydGVkIHdpdGggc2NyaXB0ICVzXG5cbiIsIHNjcmlwdF9uYW1lKTsKLQl9Ci0KLQllcnIgPSBfX2NtZF90cmFjZShzZXNzaW9uKTsKLQotCXBlcmZfc2Vzc2lvbl9fZGVsZXRlKHNlc3Npb24pOwotCWNsZWFudXBfc2NyaXB0aW5nKCk7Ci1vdXQ6Ci0JcmV0dXJuIGVycjsKLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi5oIGIvdG9vbHMvcGVyZi9idWlsdGluLmgKaW5kZXggOTIxMjQ1Yi4uYzc3OThjNyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLmgKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLmgKQEAgLTI3LDcgKzI3LDcgQEAKIGV4dGVybiBpbnQgY21kX3N0YXQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwogZXh0ZXJuIGludCBjbWRfdGltZWNoYXJ0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKIGV4dGVybiBpbnQgY21kX3RvcChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7Ci1leHRlcm4gaW50IGNtZF90cmFjZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9zY3JpcHQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwogZXh0ZXJuIGludCBjbWRfdmVyc2lvbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CiBleHRlcm4gaW50IGNtZF9wcm9iZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CiBleHRlcm4gaW50IGNtZF9rbWVtKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvY29tbWFuZC1saXN0LnR4dCBiL3Rvb2xzL3BlcmYvY29tbWFuZC1saXN0LnR4dAppbmRleCA5NDlkNzdmLi4xNmI1MDg4IDEwMDY0NAotLS0gYS90b29scy9wZXJmL2NvbW1hbmQtbGlzdC50eHQKKysrIGIvdG9vbHMvcGVyZi9jb21tYW5kLWxpc3QudHh0CkBAIC0xNiw3ICsxNiw3IEBACiBwZXJmLXN0YXQJCQltYWlucG9yY2VsYWluIGNvbW1vbgogcGVyZi10aW1lY2hhcnQJCQltYWlucG9yY2VsYWluIGNvbW1vbgogcGVyZi10b3AJCQltYWlucG9yY2VsYWluIGNvbW1vbgotcGVyZi10cmFjZQkJCW1haW5wb3JjZWxhaW4gY29tbW9uCitwZXJmLXNjcmlwdAkJCW1haW5wb3JjZWxhaW4gY29tbW9uCiBwZXJmLXByb2JlCQkJbWFpbnBvcmNlbGFpbiBjb21tb24KIHBlcmYta21lbQkJCW1haW5wb3JjZWxhaW4gY29tbW9uCiBwZXJmLWxvY2sJCQltYWlucG9yY2VsYWluIGNvbW1vbgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9mZWF0dXJlLXRlc3RzLm1hayBiL3Rvb2xzL3BlcmYvZmVhdHVyZS10ZXN0cy5tYWsKaW5kZXggYjI1M2RiNi4uYjA0MWNhNiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9mZWF0dXJlLXRlc3RzLm1haworKysgYi90b29scy9wZXJmL2ZlYXR1cmUtdGVzdHMubWFrCkBAIC05LDggKzksOCBAQAogaWZuZGVmIE5PX0RXQVJGCiBkZWZpbmUgU09VUkNFX0RXQVJGCiAjaW5jbHVkZSA8ZHdhcmYuaD4KLSNpbmNsdWRlIDxsaWJkdy5oPgotI2luY2x1ZGUgPHZlcnNpb24uaD4KKyNpbmNsdWRlIDxlbGZ1dGlscy9saWJkdy5oPgorI2luY2x1ZGUgPGVsZnV0aWxzL3ZlcnNpb24uaD4KICNpZm5kZWYgX0VMRlVUSUxTX1BSRVJFUQogI2Vycm9yCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvcGVyZi5jIGIvdG9vbHMvcGVyZi9wZXJmLmMKaW5kZXggY2RkNmMwMy4uNWIxZWNkNiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9wZXJmLmMKKysrIGIvdG9vbHMvcGVyZi9wZXJmLmMKQEAgLTI4Niw2ICsyODYsOCBAQAogCXN0YXR1cyA9IHAtPmZuKGFyZ2MsIGFyZ3YsIHByZWZpeCk7CiAJZXhpdF9icm93c2VyKHN0YXR1cyk7CiAKKwlwZXJmX2V2c2VsX2xpc3RfX2RlbGV0ZSgpOworCiAJaWYgKHN0YXR1cykKIAkJcmV0dXJuIHN0YXR1cyAmIDB4ZmY7CiAKQEAgLTMyMyw3ICszMjUsNyBAQAogCQl7ICJ0b3AiLAljbWRfdG9wLAkwIH0sCiAJCXsgImFubm90YXRlIiwJY21kX2Fubm90YXRlLAkwIH0sCiAJCXsgInZlcnNpb24iLAljbWRfdmVyc2lvbiwJMCB9LAotCQl7ICJ0cmFjZSIsCWNtZF90cmFjZSwJMCB9LAorCQl7ICJzY3JpcHQiLAljbWRfc2NyaXB0LAkwIH0sCiAJCXsgInNjaGVkIiwJY21kX3NjaGVkLAkwIH0sCiAJCXsgInByb2JlIiwJY21kX3Byb2JlLAkwIH0sCiAJCXsgImttZW0iLAljbWRfa21lbSwJMCB9LApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvUGVyZi1UcmFjZS1VdGlsL0NvbnRleHQuYyBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL1BlcmYtVHJhY2UtVXRpbC9Db250ZXh0LmMKaW5kZXggMDFhNjRhZC4uNzkwY2ViYSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvUGVyZi1UcmFjZS1VdGlsL0NvbnRleHQuYworKysgYi90b29scy9wZXJmL3NjcmlwdHMvcGVybC9QZXJmLVRyYWNlLVV0aWwvQ29udGV4dC5jCkBAIC04LDcgKzgsNyBAQAogCiAjbGluZSAxICJDb250ZXh0LnhzIgogLyoKLSAqIENvbnRleHQueHMuICBYUyBpbnRlcmZhY2VzIGZvciBwZXJmIHRyYWNlLgorICogQ29udGV4dC54cy4gIFhTIGludGVyZmFjZXMgZm9yIHBlcmYgc2NyaXB0LgogICoKICAqIENvcHlyaWdodCAoQykgMjAwOSBUb20gWmFudXNzaSA8dHphbnVzc2lAZ21haWwuY29tPgogICoKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL1BlcmYtVHJhY2UtVXRpbC9Db250ZXh0LnhzIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvUGVyZi1UcmFjZS1VdGlsL0NvbnRleHQueHMKaW5kZXggNTQ5Y2YwNC4uYzFlMmVkMSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvUGVyZi1UcmFjZS1VdGlsL0NvbnRleHQueHMKKysrIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvUGVyZi1UcmFjZS1VdGlsL0NvbnRleHQueHMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29udGV4dC54cy4gIFhTIGludGVyZmFjZXMgZm9yIHBlcmYgdHJhY2UuCisgKiBDb250ZXh0LnhzLiAgWFMgaW50ZXJmYWNlcyBmb3IgcGVyZiBzY3JpcHQuCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA5IFRvbSBaYW51c3NpIDx0emFudXNzaUBnbWFpbC5jb20+CiAgKgpAQCAtMjMsNyArMjMsNyBAQAogI2luY2x1ZGUgInBlcmwuaCIKICNpbmNsdWRlICJYU1VCLmgiCiAjaW5jbHVkZSAiLi4vLi4vLi4vcGVyZi5oIgotI2luY2x1ZGUgIi4uLy4uLy4uL3V0aWwvdHJhY2UtZXZlbnQuaCIKKyNpbmNsdWRlICIuLi8uLi8uLi91dGlsL3NjcmlwdC1ldmVudC5oIgogCiBNT0RVTEUgPSBQZXJmOjpUcmFjZTo6Q29udGV4dAkJUEFDS0FHRSA9IFBlcmY6OlRyYWNlOjpDb250ZXh0CiBQUk9UT1RZUEVTOiBFTkFCTEUKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL1BlcmYtVHJhY2UtVXRpbC9SRUFETUUgYi90b29scy9wZXJmL3NjcmlwdHMvcGVybC9QZXJmLVRyYWNlLVV0aWwvUkVBRE1FCmluZGV4IDlhOTcwNzYuLjJmMGM3ZjMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL1BlcmYtVHJhY2UtVXRpbC9SRUFETUUKKysrIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvUGVyZi1UcmFjZS1VdGlsL1JFQURNRQpAQCAtMSw3ICsxLDcgQEAKIFBlcmYtVHJhY2UtVXRpbCB2ZXJzaW9uIDAuMDEKID09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotVGhpcyBtb2R1bGUgY29udGFpbnMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHVzZSB3aXRoIHBlcmYgdHJhY2UuCitUaGlzIG1vZHVsZSBjb250YWlucyB1dGlsaXR5IGZ1bmN0aW9ucyBmb3IgdXNlIHdpdGggcGVyZiBzY3JpcHQuCiAKIENvcmUucG0gYW5kIFV0aWwucG0gYXJlIHB1cmUgUGVybCBtb2R1bGVzOyBDb3JlLnBtIGNvbnRhaW5zIHJvdXRpbmVzCiB0aGF0IHRoZSBjb3JlIHBlcmYgc3VwcG9ydCBmb3IgUGVybCBjYWxscyBvbiBhbmQgc2hvdWxkIGFsd2F5cyBiZQpAQCAtMzMsNyArMzMsNyBAQAogCiBJTlNUQUxMQVRJT04KIAotQnVpbGRpbmcgcGVyZiB3aXRoIHBlcmYgdHJhY2UgUGVybCBzY3JpcHRpbmcgc2hvdWxkIGluc3RhbGwgdGhpcworQnVpbGRpbmcgcGVyZiB3aXRoIHBlcmYgc2NyaXB0IFBlcmwgc2NyaXB0aW5nIHNob3VsZCBpbnN0YWxsIHRoaXMKIG1vZHVsZSBpbiB0aGUgcmlnaHQgcGxhY2UuCiAKIFlvdSBzaG91bGQgbWFrZSBzdXJlIGxpYnBlcmwgYW5kIEV4dFV0aWxzL0VtYmVkLnBtIGFyZSBpbnN0YWxsZWQgZmlyc3QKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL1BlcmYtVHJhY2UtVXRpbC9saWIvUGVyZi9UcmFjZS9Db250ZXh0LnBtIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvUGVyZi1UcmFjZS1VdGlsL2xpYi9QZXJmL1RyYWNlL0NvbnRleHQucG0KaW5kZXggNmM3ZjM2NS4uNGUyZjYwMzkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL1BlcmYtVHJhY2UtVXRpbC9saWIvUGVyZi9UcmFjZS9Db250ZXh0LnBtCisrKyBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL1BlcmYtVHJhY2UtVXRpbC9saWIvUGVyZi9UcmFjZS9Db250ZXh0LnBtCkBAIC0zNCw3ICszNCw3IEBACiAKID1oZWFkMSBTRUUgQUxTTwogCi1QZXJmICh0cmFjZSkgZG9jdW1lbnRhdGlvbgorUGVyZiAoc2NyaXB0KSBkb2N1bWVudGF0aW9uCiAKID1oZWFkMSBBVVRIT1IKIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvUGVyZi1UcmFjZS1VdGlsL2xpYi9QZXJmL1RyYWNlL0NvcmUucG0gYi90b29scy9wZXJmL3NjcmlwdHMvcGVybC9QZXJmLVRyYWNlLVV0aWwvbGliL1BlcmYvVHJhY2UvQ29yZS5wbQppbmRleCA5ZGYzNzZhLi45MTU4NDU4IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3NjcmlwdHMvcGVybC9QZXJmLVRyYWNlLVV0aWwvbGliL1BlcmYvVHJhY2UvQ29yZS5wbQorKysgYi90b29scy9wZXJmL3NjcmlwdHMvcGVybC9QZXJmLVRyYWNlLVV0aWwvbGliL1BlcmYvVHJhY2UvQ29yZS5wbQpAQCAtMTYzLDcgKzE2Myw3IEBACiBfX0VORF9fCiA9aGVhZDEgTkFNRQogCi1QZXJmOjpUcmFjZTo6Q29yZSAtIFBlcmwgZXh0ZW5zaW9uIGZvciBwZXJmIHRyYWNlCitQZXJmOjpUcmFjZTo6Q29yZSAtIFBlcmwgZXh0ZW5zaW9uIGZvciBwZXJmIHNjcmlwdAogCiA9aGVhZDEgU1lOT1BTSVMKIApAQCAtMTcxLDcgKzE3MSw3IEBACiAKID1oZWFkMSBTRUUgQUxTTwogCi1QZXJmICh0cmFjZSkgZG9jdW1lbnRhdGlvbgorUGVyZiAoc2NyaXB0KSBkb2N1bWVudGF0aW9uCiAKID1oZWFkMSBBVVRIT1IKIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvUGVyZi1UcmFjZS1VdGlsL2xpYi9QZXJmL1RyYWNlL1V0aWwucG0gYi90b29scy9wZXJmL3NjcmlwdHMvcGVybC9QZXJmLVRyYWNlLVV0aWwvbGliL1BlcmYvVHJhY2UvVXRpbC5wbQppbmRleCBkOTRiNDBjLi4wNTM1MDAxIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3NjcmlwdHMvcGVybC9QZXJmLVRyYWNlLVV0aWwvbGliL1BlcmYvVHJhY2UvVXRpbC5wbQorKysgYi90b29scy9wZXJmL3NjcmlwdHMvcGVybC9QZXJmLVRyYWNlLVV0aWwvbGliL1BlcmYvVHJhY2UvVXRpbC5wbQpAQCAtNjUsNyArNjUsNyBAQAogX19FTkRfXwogPWhlYWQxIE5BTUUKIAotUGVyZjo6VHJhY2U6OlV0aWwgLSBQZXJsIGV4dGVuc2lvbiBmb3IgcGVyZiB0cmFjZQorUGVyZjo6VHJhY2U6OlV0aWwgLSBQZXJsIGV4dGVuc2lvbiBmb3IgcGVyZiBzY3JpcHQKIAogPWhlYWQxIFNZTk9QU0lTCiAKQEAgLTczLDcgKzczLDcgQEAKIAogPWhlYWQxIFNFRSBBTFNPCiAKLVBlcmYgKHRyYWNlKSBkb2N1bWVudGF0aW9uCitQZXJmIChzY3JpcHQpIGRvY3VtZW50YXRpb24KIAogPWhlYWQxIEFVVEhPUgogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3NjcmlwdHMvcGVybC9iaW4vZmFpbGVkLXN5c2NhbGxzLXJlcG9ydCBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL2Jpbi9mYWlsZWQtc3lzY2FsbHMtcmVwb3J0CmluZGV4IDQwMjhkOTIuLjlmODNjYzEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL2Jpbi9mYWlsZWQtc3lzY2FsbHMtcmVwb3J0CisrKyBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL2Jpbi9mYWlsZWQtc3lzY2FsbHMtcmVwb3J0CkBAIC03LDQgKzcsNCBAQAogCXNoaWZ0CiAgICAgZmkKIGZpCi1wZXJmIHRyYWNlICRAIC1zICIkUEVSRl9FWEVDX1BBVEgiL3NjcmlwdHMvcGVybC9mYWlsZWQtc3lzY2FsbHMucGwgJGNvbW0KK3BlcmYgc2NyaXB0ICRAIC1zICIkUEVSRl9FWEVDX1BBVEgiL3NjcmlwdHMvcGVybC9mYWlsZWQtc3lzY2FsbHMucGwgJGNvbW0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL2Jpbi9ydy1ieS1maWxlLXJlcG9ydCBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL2Jpbi9ydy1ieS1maWxlLXJlcG9ydAppbmRleCBiYTI1ZjRkLi43NzIwMGIzIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3NjcmlwdHMvcGVybC9iaW4vcnctYnktZmlsZS1yZXBvcnQKKysrIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvYmluL3J3LWJ5LWZpbGUtcmVwb3J0CkBAIC03LDcgKzcsNCBAQAogZmkKIGNvbW09JDEKIHNoaWZ0Ci1wZXJmIHRyYWNlICRAIC1zICIkUEVSRl9FWEVDX1BBVEgiL3NjcmlwdHMvcGVybC9ydy1ieS1maWxlLnBsICRjb21tCi0KLQotCitwZXJmIHNjcmlwdCAkQCAtcyAiJFBFUkZfRVhFQ19QQVRIIi9zY3JpcHRzL3BlcmwvcnctYnktZmlsZS5wbCAkY29tbQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvYmluL3J3LWJ5LXBpZC1yZXBvcnQgYi90b29scy9wZXJmL3NjcmlwdHMvcGVybC9iaW4vcnctYnktcGlkLXJlcG9ydAppbmRleCA2NDFhM2Y1Li5hMjdiOWYzIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3NjcmlwdHMvcGVybC9iaW4vcnctYnktcGlkLXJlcG9ydAorKysgYi90b29scy9wZXJmL3NjcmlwdHMvcGVybC9iaW4vcnctYnktcGlkLXJlcG9ydApAQCAtMSw2ICsxLDMgQEAKICMhL2Jpbi9iYXNoCiAjIGRlc2NyaXB0aW9uOiBzeXN0ZW0td2lkZSByL3cgYWN0aXZpdHkKLXBlcmYgdHJhY2UgJEAgLXMgIiRQRVJGX0VYRUNfUEFUSCIvc2NyaXB0cy9wZXJsL3J3LWJ5LXBpZC5wbAotCi0KLQorcGVyZiBzY3JpcHQgJEAgLXMgIiRQRVJGX0VYRUNfUEFUSCIvc2NyaXB0cy9wZXJsL3J3LWJ5LXBpZC5wbApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvYmluL3J3dG9wLXJlcG9ydCBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL2Jpbi9yd3RvcC1yZXBvcnQKaW5kZXggNDkxOGRiYS4uODNlMTFlYyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvYmluL3J3dG9wLXJlcG9ydAorKysgYi90b29scy9wZXJmL3NjcmlwdHMvcGVybC9iaW4vcnd0b3AtcmVwb3J0CkBAIC0xNyw3ICsxNyw0IEBACiAgICAgaW50ZXJ2YWw9JDEKICAgICBzaGlmdAogZmkKLXBlcmYgdHJhY2UgJEAgLXMgIiRQRVJGX0VYRUNfUEFUSCIvc2NyaXB0cy9wZXJsL3J3dG9wLnBsICRpbnRlcnZhbAotCi0KLQorcGVyZiBzY3JpcHQgJEAgLXMgIiRQRVJGX0VYRUNfUEFUSCIvc2NyaXB0cy9wZXJsL3J3dG9wLnBsICRpbnRlcnZhbApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvYmluL3dha2V1cC1sYXRlbmN5LXJlcG9ydCBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL2Jpbi93YWtldXAtbGF0ZW5jeS1yZXBvcnQKaW5kZXggNDkwNTJlYi4uODg5ZTgxMyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvYmluL3dha2V1cC1sYXRlbmN5LXJlcG9ydAorKysgYi90b29scy9wZXJmL3NjcmlwdHMvcGVybC9iaW4vd2FrZXVwLWxhdGVuY3ktcmVwb3J0CkBAIC0xLDYgKzEsMyBAQAogIyEvYmluL2Jhc2gKICMgZGVzY3JpcHRpb246IHN5c3RlbS13aWRlIG1pbi9tYXgvYXZnIHdha2V1cCBsYXRlbmN5Ci1wZXJmIHRyYWNlICRAIC1zICIkUEVSRl9FWEVDX1BBVEgiL3NjcmlwdHMvcGVybC93YWtldXAtbGF0ZW5jeS5wbAotCi0KLQorcGVyZiBzY3JpcHQgJEAgLXMgIiRQRVJGX0VYRUNfUEFUSCIvc2NyaXB0cy9wZXJsL3dha2V1cC1sYXRlbmN5LnBsCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3NjcmlwdHMvcGVybC9iaW4vd29ya3F1ZXVlLXN0YXRzLXJlcG9ydCBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL2Jpbi93b3JrcXVldWUtc3RhdHMtcmVwb3J0CmluZGV4IGRmMGM2NWYuLjZkOTE0MTEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL2Jpbi93b3JrcXVldWUtc3RhdHMtcmVwb3J0CisrKyBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL2Jpbi93b3JrcXVldWUtc3RhdHMtcmVwb3J0CkBAIC0xLDcgKzEsMyBAQAogIyEvYmluL2Jhc2gKICMgZGVzY3JpcHRpb246IHdvcmtxdWV1ZSBzdGF0cyAoaW5zL2V4ZS9jcmVhdGUvZGVzdHJveSkKLXBlcmYgdHJhY2UgJEAgLXMgIiRQRVJGX0VYRUNfUEFUSCIvc2NyaXB0cy9wZXJsL3dvcmtxdWV1ZS1zdGF0cy5wbAotCi0KLQotCitwZXJmIHNjcmlwdCAkQCAtcyAiJFBFUkZfRVhFQ19QQVRIIi9zY3JpcHRzL3Blcmwvd29ya3F1ZXVlLXN0YXRzLnBsCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3NjcmlwdHMvcGVybC9jaGVjay1wZXJmLXRyYWNlLnBsIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvY2hlY2stcGVyZi10cmFjZS5wbAppbmRleCA0ZTdkYzBhLi40ZTcwNzZjIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3NjcmlwdHMvcGVybC9jaGVjay1wZXJmLXRyYWNlLnBsCisrKyBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL2NoZWNrLXBlcmYtdHJhY2UucGwKQEAgLTEsNCArMSw0IEBACi0jIHBlcmYgdHJhY2UgZXZlbnQgaGFuZGxlcnMsIGdlbmVyYXRlZCBieSBwZXJmIHRyYWNlIC1nIHBlcmwKKyMgcGVyZiBzY3JpcHQgZXZlbnQgaGFuZGxlcnMsIGdlbmVyYXRlZCBieSBwZXJmIHNjcmlwdCAtZyBwZXJsCiAjIChjKSAyMDA5LCBUb20gWmFudXNzaSA8dHphbnVzc2lAZ21haWwuY29tPgogIyBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgTGljZW5zZSB2ZXJzaW9uIDIKIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvcnctYnktZmlsZS5wbCBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL3J3LWJ5LWZpbGUucGwKaW5kZXggMmEzOTA5Ny4uNzQ4NDRlZSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvcnctYnktZmlsZS5wbAorKysgYi90b29scy9wZXJmL3NjcmlwdHMvcGVybC9ydy1ieS1maWxlLnBsCkBAIC0xOCw3ICsxOCw3IEBACiB1c2UgUGVyZjo6VHJhY2U6OkNvcmU7CiB1c2UgUGVyZjo6VHJhY2U6OlV0aWw7CiAKLW15ICR1c2FnZSA9ICJwZXJmIHRyYWNlIC1zIHJ3LWJ5LWZpbGUucGwgPGNvbW0+XG4iOworbXkgJHVzYWdlID0gInBlcmYgc2NyaXB0IC1zIHJ3LWJ5LWZpbGUucGwgPGNvbW0+XG4iOwogCiBteSAkZm9yX2NvbW0gPSBzaGlmdCBvciBkaWUgJHVzYWdlOwogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3NjcmlwdHMvcGVybC93b3JrcXVldWUtc3RhdHMucGwgYi90b29scy9wZXJmL3NjcmlwdHMvcGVybC93b3JrcXVldWUtc3RhdHMucGwKaW5kZXggYjg0YjEyNi4uYThlYWZmNSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9zY3JpcHRzL3Blcmwvd29ya3F1ZXVlLXN0YXRzLnBsCisrKyBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL3dvcmtxdWV1ZS1zdGF0cy5wbApAQCAtMTAsNyArMTAsNyBAQAogIyAgICAgd29ya3F1ZXVlOndvcmtxdWV1ZV9kZXN0cnVjdGlvbiAtZSB3b3JrcXVldWU6d29ya3F1ZXVlX2V4ZWN1dGlvbgogIyAgICAgLWUgd29ya3F1ZXVlOndvcmtxdWV1ZV9pbnNlcnRpb24KICMKLSMgICBwZXJmIHRyYWNlIC1wIC1zIHRvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL3dvcmtxdWV1ZS1zdGF0cy5wbAorIyAgIHBlcmYgc2NyaXB0IC1wIC1zIHRvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL3dvcmtxdWV1ZS1zdGF0cy5wbAogCiB1c2UgNS4wMTAwMDA7CiB1c2Ugc3RyaWN0OwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9QZXJmLVRyYWNlLVV0aWwvQ29udGV4dC5jIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9QZXJmLVRyYWNlLVV0aWwvQ29udGV4dC5jCmluZGV4IDk1NzA4NWQuLjMxNTA2N2IgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vUGVyZi1UcmFjZS1VdGlsL0NvbnRleHQuYworKysgYi90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL1BlcmYtVHJhY2UtVXRpbC9Db250ZXh0LmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29udGV4dC5jLiAgUHl0aG9uIGludGVyZmFjZXMgZm9yIHBlcmYgdHJhY2UuCisgKiBDb250ZXh0LmMuICBQeXRob24gaW50ZXJmYWNlcyBmb3IgcGVyZiBzY3JpcHQuCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDEwIFRvbSBaYW51c3NpIDx0emFudXNzaUBnbWFpbC5jb20+CiAgKgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9QZXJmLVRyYWNlLVV0aWwvbGliL1BlcmYvVHJhY2UvQ29yZS5weSBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vUGVyZi1UcmFjZS1VdGlsL2xpYi9QZXJmL1RyYWNlL0NvcmUucHkKaW5kZXggYWFkNzUyNS4uZGU3MjExZSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9QZXJmLVRyYWNlLVV0aWwvbGliL1BlcmYvVHJhY2UvQ29yZS5weQorKysgYi90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL1BlcmYtVHJhY2UtVXRpbC9saWIvUGVyZi9UcmFjZS9Db3JlLnB5CkBAIC0xLDQgKzEsNCBAQAotIyBDb3JlLnB5IC0gUHl0aG9uIGV4dGVuc2lvbiBmb3IgcGVyZiB0cmFjZSwgY29yZSBmdW5jdGlvbnMKKyMgQ29yZS5weSAtIFB5dGhvbiBleHRlbnNpb24gZm9yIHBlcmYgc2NyaXB0LCBjb3JlIGZ1bmN0aW9ucwogIwogIyBDb3B5cmlnaHQgKEMpIDIwMTAgYnkgVG9tIFphbnVzc2kgPHR6YW51c3NpQGdtYWlsLmNvbT4KICMKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vUGVyZi1UcmFjZS1VdGlsL2xpYi9QZXJmL1RyYWNlL1NjaGVkR3VpLnB5IGIvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9QZXJmLVRyYWNlLVV0aWwvbGliL1BlcmYvVHJhY2UvU2NoZWRHdWkucHkKaW5kZXggYWU5YTU2ZS4uZmRkOTJmNiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9QZXJmLVRyYWNlLVV0aWwvbGliL1BlcmYvVHJhY2UvU2NoZWRHdWkucHkKKysrIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9QZXJmLVRyYWNlLVV0aWwvbGliL1BlcmYvVHJhY2UvU2NoZWRHdWkucHkKQEAgLTEsNCArMSw0IEBACi0jIFNjaGVkR3VpLnB5IC0gUHl0aG9uIGV4dGVuc2lvbiBmb3IgcGVyZiB0cmFjZSwgYmFzaWMgR1VJIGNvZGUgZm9yCisjIFNjaGVkR3VpLnB5IC0gUHl0aG9uIGV4dGVuc2lvbiBmb3IgcGVyZiBzY3JpcHQsIGJhc2ljIEdVSSBjb2RlIGZvcgogIwkJdHJhY2VzIGRyYXdpbmcgYW5kIG92ZXJ2aWV3LgogIwogIyBDb3B5cmlnaHQgKEMpIDIwMTAgYnkgRnJlZGVyaWMgV2Vpc2JlY2tlciA8ZndlaXNiZWNAZ21haWwuY29tPgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9QZXJmLVRyYWNlLVV0aWwvbGliL1BlcmYvVHJhY2UvVXRpbC5weSBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vUGVyZi1UcmFjZS1VdGlsL2xpYi9QZXJmL1RyYWNlL1V0aWwucHkKaW5kZXggMTNjYzAyYi4uMTVjODQwMCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9QZXJmLVRyYWNlLVV0aWwvbGliL1BlcmYvVHJhY2UvVXRpbC5weQorKysgYi90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL1BlcmYtVHJhY2UtVXRpbC9saWIvUGVyZi9UcmFjZS9VdGlsLnB5CkBAIC0xLDQgKzEsNCBAQAotIyBVdGlsLnB5IC0gUHl0aG9uIGV4dGVuc2lvbiBmb3IgcGVyZiB0cmFjZSwgbWlzY2VsbGFuZW91cyB1dGlsaXR5IGNvZGUKKyMgVXRpbC5weSAtIFB5dGhvbiBleHRlbnNpb24gZm9yIHBlcmYgc2NyaXB0LCBtaXNjZWxsYW5lb3VzIHV0aWxpdHkgY29kZQogIwogIyBDb3B5cmlnaHQgKEMpIDIwMTAgYnkgVG9tIFphbnVzc2kgPHR6YW51c3NpQGdtYWlsLmNvbT4KICMKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vYmluL2ZhaWxlZC1zeXNjYWxscy1ieS1waWQtcmVwb3J0IGIvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9iaW4vZmFpbGVkLXN5c2NhbGxzLWJ5LXBpZC1yZXBvcnQKaW5kZXggMDM1ODcwMi4uZmRhNTA5NiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9iaW4vZmFpbGVkLXN5c2NhbGxzLWJ5LXBpZC1yZXBvcnQKKysrIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9iaW4vZmFpbGVkLXN5c2NhbGxzLWJ5LXBpZC1yZXBvcnQKQEAgLTcsNCArNyw0IEBACiAJc2hpZnQKICAgICBmaQogZmkKLXBlcmYgdHJhY2UgJEAgLXMgIiRQRVJGX0VYRUNfUEFUSCIvc2NyaXB0cy9weXRob24vZmFpbGVkLXN5c2NhbGxzLWJ5LXBpZC5weSAkY29tbQorcGVyZiBzY3JpcHQgJEAgLXMgIiRQRVJGX0VYRUNfUEFUSCIvc2NyaXB0cy9weXRob24vZmFpbGVkLXN5c2NhbGxzLWJ5LXBpZC5weSAkY29tbQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9iaW4vZnV0ZXgtY29udGVudGlvbi1yZXBvcnQgYi90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL2Jpbi9mdXRleC1jb250ZW50aW9uLXJlcG9ydAppbmRleCBjODI2ODEzLi42YzQ0MjcxIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL2Jpbi9mdXRleC1jb250ZW50aW9uLXJlcG9ydAorKysgYi90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL2Jpbi9mdXRleC1jb250ZW50aW9uLXJlcG9ydApAQCAtMSw0ICsxLDQgQEAKICMhL2Jpbi9iYXNoCiAjIGRlc2NyaXB0aW9uOiBmdXRleHQgY29udGVudGlvbiBtZWFzdXJlbWVudAogCi1wZXJmIHRyYWNlICRAIC1zICIkUEVSRl9FWEVDX1BBVEgiL3NjcmlwdHMvcHl0aG9uL2Z1dGV4LWNvbnRlbnRpb24ucHkKK3BlcmYgc2NyaXB0ICRAIC1zICIkUEVSRl9FWEVDX1BBVEgiL3NjcmlwdHMvcHl0aG9uL2Z1dGV4LWNvbnRlbnRpb24ucHkKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vYmluL25ldGRldi10aW1lcy1yZXBvcnQgYi90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL2Jpbi9uZXRkZXYtdGltZXMtcmVwb3J0CmluZGV4IDRhZDM2MWIuLjhmNzU5MjkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vYmluL25ldGRldi10aW1lcy1yZXBvcnQKKysrIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9iaW4vbmV0ZGV2LXRpbWVzLXJlcG9ydApAQCAtMiw0ICsyLDQgQEAKICMgZGVzY3JpcHRpb246IGRpc3BsYXkgYSBwcm9jZXNzIG9mIHBhY2tldCBhbmQgcHJvY2Vzc2luZyB0aW1lCiAjIGFyZ3M6IFt0eF0gW3J4XSBbZGV2PV0gW2RlYnVnXQogCi1wZXJmIHRyYWNlIC1zICIkUEVSRl9FWEVDX1BBVEgiL3NjcmlwdHMvcHl0aG9uL25ldGRldi10aW1lcy5weSAkQAorcGVyZiBzY3JpcHQgLXMgIiRQRVJGX0VYRUNfUEFUSCIvc2NyaXB0cy9weXRob24vbmV0ZGV2LXRpbWVzLnB5ICRACmRpZmYgLS1naXQgYS90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL2Jpbi9zY2hlZC1taWdyYXRpb24tcmVwb3J0IGIvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9iaW4vc2NoZWQtbWlncmF0aW9uLXJlcG9ydAppbmRleCBkZjE3OTFmLi42OGIwMzdhIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL2Jpbi9zY2hlZC1taWdyYXRpb24tcmVwb3J0CisrKyBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vYmluL3NjaGVkLW1pZ3JhdGlvbi1yZXBvcnQKQEAgLTEsMyArMSwzIEBACiAjIS9iaW4vYmFzaAogIyBkZXNjcmlwdGlvbjogc2NoZWQgbWlncmF0aW9uIG92ZXJ2aWV3Ci1wZXJmIHRyYWNlICRAIC1zICIkUEVSRl9FWEVDX1BBVEgiL3NjcmlwdHMvcHl0aG9uL3NjaGVkLW1pZ3JhdGlvbi5weQorcGVyZiBzY3JpcHQgJEAgLXMgIiRQRVJGX0VYRUNfUEFUSCIvc2NyaXB0cy9weXRob24vc2NoZWQtbWlncmF0aW9uLnB5CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL2Jpbi9zY3RvcC1yZXBvcnQgYi90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL2Jpbi9zY3RvcC1yZXBvcnQKaW5kZXggMzZiNDA5Yy4uYzMyZGIyOSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9iaW4vc2N0b3AtcmVwb3J0CisrKyBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vYmluL3NjdG9wLXJlcG9ydApAQCAtMjEsNCArMjEsNCBAQAogICAgIGludGVydmFsPSQxCiAgICAgc2hpZnQKIGZpCi1wZXJmIHRyYWNlICRAIC1zICIkUEVSRl9FWEVDX1BBVEgiL3NjcmlwdHMvcHl0aG9uL3NjdG9wLnB5ICRjb21tICRpbnRlcnZhbAorcGVyZiBzY3JpcHQgJEAgLXMgIiRQRVJGX0VYRUNfUEFUSCIvc2NyaXB0cy9weXRob24vc2N0b3AucHkgJGNvbW0gJGludGVydmFsCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL2Jpbi9zeXNjYWxsLWNvdW50cy1ieS1waWQtcmVwb3J0IGIvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9iaW4vc3lzY2FsbC1jb3VudHMtYnktcGlkLXJlcG9ydAppbmRleCA0ZWI4OGM5Li4xNmViOGQ2IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL2Jpbi9zeXNjYWxsLWNvdW50cy1ieS1waWQtcmVwb3J0CisrKyBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vYmluL3N5c2NhbGwtY291bnRzLWJ5LXBpZC1yZXBvcnQKQEAgLTcsNCArNyw0IEBACiAJc2hpZnQKICAgICBmaQogZmkKLXBlcmYgdHJhY2UgJEAgLXMgIiRQRVJGX0VYRUNfUEFUSCIvc2NyaXB0cy9weXRob24vc3lzY2FsbC1jb3VudHMtYnktcGlkLnB5ICRjb21tCitwZXJmIHNjcmlwdCAkQCAtcyAiJFBFUkZfRVhFQ19QQVRIIi9zY3JpcHRzL3B5dGhvbi9zeXNjYWxsLWNvdW50cy1ieS1waWQucHkgJGNvbW0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vYmluL3N5c2NhbGwtY291bnRzLXJlcG9ydCBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vYmluL3N5c2NhbGwtY291bnRzLXJlcG9ydAppbmRleCBjYjJmOWM1Li4wZjBlOWQ0IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL2Jpbi9zeXNjYWxsLWNvdW50cy1yZXBvcnQKKysrIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9iaW4vc3lzY2FsbC1jb3VudHMtcmVwb3J0CkBAIC03LDQgKzcsNCBAQAogCXNoaWZ0CiAgICAgZmkKIGZpCi1wZXJmIHRyYWNlICRAIC1zICIkUEVSRl9FWEVDX1BBVEgiL3NjcmlwdHMvcHl0aG9uL3N5c2NhbGwtY291bnRzLnB5ICRjb21tCitwZXJmIHNjcmlwdCAkQCAtcyAiJFBFUkZfRVhFQ19QQVRIIi9zY3JpcHRzL3B5dGhvbi9zeXNjYWxsLWNvdW50cy5weSAkY29tbQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9jaGVjay1wZXJmLXRyYWNlLnB5IGIvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9jaGVjay1wZXJmLXRyYWNlLnB5CmluZGV4IGQ5Zjc4OTMuLjQ2NDdhNzYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vY2hlY2stcGVyZi10cmFjZS5weQorKysgYi90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL2NoZWNrLXBlcmYtdHJhY2UucHkKQEAgLTEsNCArMSw0IEBACi0jIHBlcmYgdHJhY2UgZXZlbnQgaGFuZGxlcnMsIGdlbmVyYXRlZCBieSBwZXJmIHRyYWNlIC1nIHB5dGhvbgorIyBwZXJmIHNjcmlwdCBldmVudCBoYW5kbGVycywgZ2VuZXJhdGVkIGJ5IHBlcmYgc2NyaXB0IC1nIHB5dGhvbgogIyAoYykgMjAxMCwgVG9tIFphbnVzc2kgPHR6YW51c3NpQGdtYWlsLmNvbT4KICMgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyCiAjCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL2ZhaWxlZC1zeXNjYWxscy1ieS1waWQucHkgYi90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL2ZhaWxlZC1zeXNjYWxscy1ieS1waWQucHkKaW5kZXggYWNkNzg0OC4uODU4MDVmYSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9mYWlsZWQtc3lzY2FsbHMtYnktcGlkLnB5CisrKyBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vZmFpbGVkLXN5c2NhbGxzLWJ5LXBpZC5weQpAQCAtMTUsNyArMTUsNyBAQAogZnJvbSBDb3JlIGltcG9ydCAqCiBmcm9tIFV0aWwgaW1wb3J0ICoKIAotdXNhZ2UgPSAicGVyZiB0cmFjZSAtcyBzeXNjYWxsLWNvdW50cy1ieS1waWQucHkgW2NvbW18cGlkXVxuIjsKK3VzYWdlID0gInBlcmYgc2NyaXB0IC1zIHN5c2NhbGwtY291bnRzLWJ5LXBpZC5weSBbY29tbXxwaWRdXG4iOwogCiBmb3JfY29tbSA9IE5vbmUKIGZvcl9waWQgPSBOb25lCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL3NjaGVkLW1pZ3JhdGlvbi5weSBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vc2NoZWQtbWlncmF0aW9uLnB5CmluZGV4IGI5MzQzODMuLjc0ZDU1ZWMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vc2NoZWQtbWlncmF0aW9uLnB5CisrKyBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vc2NoZWQtbWlncmF0aW9uLnB5CkBAIC00LDcgKzQsNyBAQAogIwogIyBDb3B5cmlnaHQgKEMpIDIwMTAgRnJlZGVyaWMgV2Vpc2JlY2tlciA8ZndlaXNiZWNAZ21haWwuY29tPgogIwotIyBwZXJmIHRyYWNlIGV2ZW50IGhhbmRsZXJzIGhhdmUgYmVlbiBnZW5lcmF0ZWQgYnkgcGVyZiB0cmFjZSAtZyBweXRob24KKyMgcGVyZiBzY3JpcHQgZXZlbnQgaGFuZGxlcnMgaGF2ZSBiZWVuIGdlbmVyYXRlZCBieSBwZXJmIHNjcmlwdCAtZyBweXRob24KICMKICMgVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsCiAjIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9zY3RvcC5weSBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vc2N0b3AucHkKaW5kZXggN2E2ZWMyYy4uNDJjMjY3ZSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9zY3RvcC5weQorKysgYi90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL3NjdG9wLnB5CkBAIC0xNyw3ICsxNyw3IEBACiBmcm9tIENvcmUgaW1wb3J0ICoKIGZyb20gVXRpbCBpbXBvcnQgKgogCi11c2FnZSA9ICJwZXJmIHRyYWNlIC1zIHNjdG9wLnB5IFtjb21tXSBbaW50ZXJ2YWxdXG4iOwordXNhZ2UgPSAicGVyZiBzY3JpcHQgLXMgc2N0b3AucHkgW2NvbW1dIFtpbnRlcnZhbF1cbiI7CiAKIGZvcl9jb21tID0gTm9uZQogZGVmYXVsdF9pbnRlcnZhbCA9IDMKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vc3lzY2FsbC1jb3VudHMtYnktcGlkLnB5IGIvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9zeXNjYWxsLWNvdW50cy1ieS1waWQucHkKaW5kZXggZDFlZTNlYy4uYzY0ZDFjNSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9zeXNjYWxsLWNvdW50cy1ieS1waWQucHkKKysrIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9zeXNjYWxsLWNvdW50cy1ieS1waWQucHkKQEAgLTE0LDcgKzE0LDcgQEAKIGZyb20gQ29yZSBpbXBvcnQgKgogZnJvbSBVdGlsIGltcG9ydCBzeXNjYWxsX25hbWUKIAotdXNhZ2UgPSAicGVyZiB0cmFjZSAtcyBzeXNjYWxsLWNvdW50cy1ieS1waWQucHkgW2NvbW1dXG4iOwordXNhZ2UgPSAicGVyZiBzY3JpcHQgLXMgc3lzY2FsbC1jb3VudHMtYnktcGlkLnB5IFtjb21tXVxuIjsKIAogZm9yX2NvbW0gPSBOb25lCiBmb3JfcGlkID0gTm9uZQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9zeXNjYWxsLWNvdW50cy5weSBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vc3lzY2FsbC1jb3VudHMucHkKaW5kZXggZWExODNkYy4uYjQzNWQzZiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9zeXNjYWxsLWNvdW50cy5weQorKysgYi90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL3N5c2NhbGwtY291bnRzLnB5CkBAIC0xNSw3ICsxNSw3IEBACiBmcm9tIENvcmUgaW1wb3J0ICoKIGZyb20gVXRpbCBpbXBvcnQgc3lzY2FsbF9uYW1lCiAKLXVzYWdlID0gInBlcmYgdHJhY2UgLXMgc3lzY2FsbC1jb3VudHMucHkgW2NvbW1dXG4iOwordXNhZ2UgPSAicGVyZiBzY3JpcHQgLXMgc3lzY2FsbC1jb3VudHMucHkgW2NvbW1dXG4iOwogCiBmb3JfY29tbSA9IE5vbmUKIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2J1aWxkLWlkLmMgYi90b29scy9wZXJmL3V0aWwvYnVpbGQtaWQuYwppbmRleCBlNDM3ZWRiLi5kZWZmYjhjIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvYnVpbGQtaWQuYworKysgYi90b29scy9wZXJmL3V0aWwvYnVpbGQtaWQuYwpAQCAtMTQsNyArMTQsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgImRlYnVnLmgiCiAKLXN0YXRpYyBpbnQgYnVpbGRfaWRfX21hcmtfZHNvX2hpdChldmVudF90ICpldmVudCwgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbikKK3N0YXRpYyBpbnQgYnVpbGRfaWRfX21hcmtfZHNvX2hpdChldmVudF90ICpldmVudCwKKwkJCQkgIHN0cnVjdCBzYW1wbGVfZGF0YSAqc2FtcGxlIF9fdXNlZCwKKwkJCQkgIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pCiB7CiAJc3RydWN0IGFkZHJfbG9jYXRpb24gYWw7CiAJdTggY3B1bW9kZSA9IGV2ZW50LT5oZWFkZXIubWlzYyAmIFBFUkZfUkVDT1JEX01JU0NfQ1BVTU9ERV9NQVNLOwpAQCAtMzUsNyArMzcsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGV2ZW50X19leGl0X2RlbF90aHJlYWQoZXZlbnRfdCAqc2VsZiwgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbikKK3N0YXRpYyBpbnQgZXZlbnRfX2V4aXRfZGVsX3RocmVhZChldmVudF90ICpzZWxmLCBzdHJ1Y3Qgc2FtcGxlX2RhdGEgKnNhbXBsZSBfX3VzZWQsCisJCQkJICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQogewogCXN0cnVjdCB0aHJlYWQgKnRocmVhZCA9IHBlcmZfc2Vzc2lvbl9fZmluZG5ldyhzZXNzaW9uLCBzZWxmLT5mb3JrLnRpZCk7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9jcHVtYXAuYyBiL3Rvb2xzL3BlcmYvdXRpbC9jcHVtYXAuYwppbmRleCAwZjliOGQ3Li4zY2NhYTEwIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvY3B1bWFwLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL2NwdW1hcC5jCkBAIC00LDMyICs0LDUzIEBACiAjaW5jbHVkZSA8YXNzZXJ0Lmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KIAotaW50IGNwdW1hcFtNQVhfTlJfQ1BVU107Ci0KLXN0YXRpYyBpbnQgZGVmYXVsdF9jcHVfbWFwKHZvaWQpCitzdGF0aWMgc3RydWN0IGNwdV9tYXAgKmNwdV9tYXBfX2RlZmF1bHRfbmV3KHZvaWQpCiB7Ci0JaW50IG5yX2NwdXMsIGk7CisJc3RydWN0IGNwdV9tYXAgKmNwdXM7CisJaW50IG5yX2NwdXM7CiAKIAlucl9jcHVzID0gc3lzY29uZihfU0NfTlBST0NFU1NPUlNfT05MTik7Ci0JYXNzZXJ0KG5yX2NwdXMgPD0gTUFYX05SX0NQVVMpOwotCWFzc2VydCgoaW50KW5yX2NwdXMgPj0gMCk7CisJaWYgKG5yX2NwdXMgPCAwKQorCQlyZXR1cm4gTlVMTDsKIAotCWZvciAoaSA9IDA7IGkgPCBucl9jcHVzOyArK2kpCi0JCWNwdW1hcFtpXSA9IGk7CisJY3B1cyA9IG1hbGxvYyhzaXplb2YoKmNwdXMpICsgbnJfY3B1cyAqIHNpemVvZihpbnQpKTsKKwlpZiAoY3B1cyAhPSBOVUxMKSB7CisJCWludCBpOworCQlmb3IgKGkgPSAwOyBpIDwgbnJfY3B1czsgKytpKQorCQkJY3B1cy0+bWFwW2ldID0gaTsKIAotCXJldHVybiBucl9jcHVzOworCQljcHVzLT5uciA9IG5yX2NwdXM7CisJfQorCisJcmV0dXJuIGNwdXM7CiB9CiAKLXN0YXRpYyBpbnQgcmVhZF9hbGxfY3B1X21hcCh2b2lkKQorc3RhdGljIHN0cnVjdCBjcHVfbWFwICpjcHVfbWFwX190cmltX25ldyhpbnQgbnJfY3B1cywgaW50ICp0bXBfY3B1cykKIHsKKwlzaXplX3QgcGF5bG9hZF9zaXplID0gbnJfY3B1cyAqIHNpemVvZihpbnQpOworCXN0cnVjdCBjcHVfbWFwICpjcHVzID0gbWFsbG9jKHNpemVvZigqY3B1cykgKyBwYXlsb2FkX3NpemUpOworCisJaWYgKGNwdXMgIT0gTlVMTCkgeworCQljcHVzLT5uciA9IG5yX2NwdXM7CisJCW1lbWNweShjcHVzLT5tYXAsIHRtcF9jcHVzLCBwYXlsb2FkX3NpemUpOworCX0KKworCXJldHVybiBjcHVzOworfQorCitzdGF0aWMgc3RydWN0IGNwdV9tYXAgKmNwdV9tYXBfX3JlYWRfYWxsX2NwdV9tYXAodm9pZCkKK3sKKwlzdHJ1Y3QgY3B1X21hcCAqY3B1cyA9IE5VTEw7CiAJRklMRSAqb25sbmY7CiAJaW50IG5yX2NwdXMgPSAwOworCWludCAqdG1wX2NwdXMgPSBOVUxMLCAqdG1wOworCWludCBtYXhfZW50cmllcyA9IDA7CiAJaW50IG4sIGNwdSwgcHJldjsKIAljaGFyIHNlcDsKIAogCW9ubG5mID0gZm9wZW4oIi9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L29ubGluZSIsICJyIik7CiAJaWYgKCFvbmxuZikKLQkJcmV0dXJuIGRlZmF1bHRfY3B1X21hcCgpOworCQlyZXR1cm4gY3B1X21hcF9fZGVmYXVsdF9uZXcoKTsKIAogCXNlcCA9IDA7CiAJcHJldiA9IC0xOwpAQCAtMzgsMTIgKzU5LDI4IEBACiAJCWlmIChuIDw9IDApCiAJCQlicmVhazsKIAkJaWYgKHByZXYgPj0gMCkgewotCQkJYXNzZXJ0KG5yX2NwdXMgKyBjcHUgLSBwcmV2IC0gMSA8IE1BWF9OUl9DUFVTKTsKKwkJCWludCBuZXdfbWF4ID0gbnJfY3B1cyArIGNwdSAtIHByZXYgLSAxOworCisJCQlpZiAobmV3X21heCA+PSBtYXhfZW50cmllcykgeworCQkJCW1heF9lbnRyaWVzID0gbmV3X21heCArIE1BWF9OUl9DUFVTIC8gMjsKKwkJCQl0bXAgPSByZWFsbG9jKHRtcF9jcHVzLCBtYXhfZW50cmllcyAqIHNpemVvZihpbnQpKTsKKwkJCQlpZiAodG1wID09IE5VTEwpCisJCQkJCWdvdG8gb3V0X2ZyZWVfdG1wOworCQkJCXRtcF9jcHVzID0gdG1wOworCQkJfQorCiAJCQl3aGlsZSAoKytwcmV2IDwgY3B1KQotCQkJCWNwdW1hcFtucl9jcHVzKytdID0gcHJldjsKKwkJCQl0bXBfY3B1c1tucl9jcHVzKytdID0gcHJldjsKIAkJfQotCQlhc3NlcnQgKG5yX2NwdXMgPCBNQVhfTlJfQ1BVUyk7Ci0JCWNwdW1hcFtucl9jcHVzKytdID0gY3B1OworCQlpZiAobnJfY3B1cyA9PSBtYXhfZW50cmllcykgeworCQkJbWF4X2VudHJpZXMgKz0gTUFYX05SX0NQVVM7CisJCQl0bXAgPSByZWFsbG9jKHRtcF9jcHVzLCBtYXhfZW50cmllcyAqIHNpemVvZihpbnQpKTsKKwkJCWlmICh0bXAgPT0gTlVMTCkKKwkJCQlnb3RvIG91dF9mcmVlX3RtcDsKKwkJCXRtcF9jcHVzID0gdG1wOworCQl9CisKKwkJdG1wX2NwdXNbbnJfY3B1cysrXSA9IGNwdTsKIAkJaWYgKG4gPT0gMiAmJiBzZXAgPT0gJy0nKQogCQkJcHJldiA9IGNwdTsKIAkJZWxzZQpAQCAtNTEsMjQgKzg4LDMxIEBACiAJCWlmIChuID09IDEgfHwgc2VwID09ICdcbicpCiAJCQlicmVhazsKIAl9Ci0JZmNsb3NlKG9ubG5mKTsKLQlpZiAobnJfY3B1cyA+IDApCi0JCXJldHVybiBucl9jcHVzOwogCi0JcmV0dXJuIGRlZmF1bHRfY3B1X21hcCgpOworCWlmIChucl9jcHVzID4gMCkKKwkJY3B1cyA9IGNwdV9tYXBfX3RyaW1fbmV3KG5yX2NwdXMsIHRtcF9jcHVzKTsKKwllbHNlCisJCWNwdXMgPSBjcHVfbWFwX19kZWZhdWx0X25ldygpOworb3V0X2ZyZWVfdG1wOgorCWZyZWUodG1wX2NwdXMpOworCWZjbG9zZShvbmxuZik7CisJcmV0dXJuIGNwdXM7CiB9CiAKLWludCByZWFkX2NwdV9tYXAoY29uc3QgY2hhciAqY3B1X2xpc3QpCitzdHJ1Y3QgY3B1X21hcCAqY3B1X21hcF9fbmV3KGNvbnN0IGNoYXIgKmNwdV9saXN0KQogeworCXN0cnVjdCBjcHVfbWFwICpjcHVzID0gTlVMTDsKIAl1bnNpZ25lZCBsb25nIHN0YXJ0X2NwdSwgZW5kX2NwdSA9IDA7CiAJY2hhciAqcCA9IE5VTEw7CiAJaW50IGksIG5yX2NwdXMgPSAwOworCWludCAqdG1wX2NwdXMgPSBOVUxMLCAqdG1wOworCWludCBtYXhfZW50cmllcyA9IDA7CiAKIAlpZiAoIWNwdV9saXN0KQotCQlyZXR1cm4gcmVhZF9hbGxfY3B1X21hcCgpOworCQlyZXR1cm4gY3B1X21hcF9fcmVhZF9hbGxfY3B1X21hcCgpOwogCiAJaWYgKCFpc2RpZ2l0KCpjcHVfbGlzdCkpCi0JCWdvdG8gaW52YWxpZDsKKwkJZ290byBvdXQ7CiAKIAl3aGlsZSAoaXNkaWdpdCgqY3B1X2xpc3QpKSB7CiAJCXAgPSBOVUxMOwpAQCAtOTQsMjEgKzEzOCw0MiBAQAogCQlmb3IgKDsgc3RhcnRfY3B1IDw9IGVuZF9jcHU7IHN0YXJ0X2NwdSsrKSB7CiAJCQkvKiBjaGVjayBmb3IgZHVwbGljYXRlcyAqLwogCQkJZm9yIChpID0gMDsgaSA8IG5yX2NwdXM7IGkrKykKLQkJCQlpZiAoY3B1bWFwW2ldID09IChpbnQpc3RhcnRfY3B1KQorCQkJCWlmICh0bXBfY3B1c1tpXSA9PSAoaW50KXN0YXJ0X2NwdSkKIAkJCQkJZ290byBpbnZhbGlkOwogCi0JCQlhc3NlcnQobnJfY3B1cyA8IE1BWF9OUl9DUFVTKTsKLQkJCWNwdW1hcFtucl9jcHVzKytdID0gKGludClzdGFydF9jcHU7CisJCQlpZiAobnJfY3B1cyA9PSBtYXhfZW50cmllcykgeworCQkJCW1heF9lbnRyaWVzICs9IE1BWF9OUl9DUFVTOworCQkJCXRtcCA9IHJlYWxsb2ModG1wX2NwdXMsIG1heF9lbnRyaWVzICogc2l6ZW9mKGludCkpOworCQkJCWlmICh0bXAgPT0gTlVMTCkKKwkJCQkJZ290byBpbnZhbGlkOworCQkJCXRtcF9jcHVzID0gdG1wOworCQkJfQorCQkJdG1wX2NwdXNbbnJfY3B1cysrXSA9IChpbnQpc3RhcnRfY3B1OwogCQl9CiAJCWlmICgqcCkKIAkJCSsrcDsKIAogCQljcHVfbGlzdCA9IHA7CiAJfQotCWlmIChucl9jcHVzID4gMCkKLQkJcmV0dXJuIG5yX2NwdXM7CiAKLQlyZXR1cm4gZGVmYXVsdF9jcHVfbWFwKCk7CisJaWYgKG5yX2NwdXMgPiAwKQorCQljcHVzID0gY3B1X21hcF9fdHJpbV9uZXcobnJfY3B1cywgdG1wX2NwdXMpOworCWVsc2UKKwkJY3B1cyA9IGNwdV9tYXBfX2RlZmF1bHRfbmV3KCk7CiBpbnZhbGlkOgotCXJldHVybiAtMTsKKwlmcmVlKHRtcF9jcHVzKTsKK291dDoKKwlyZXR1cm4gY3B1czsKK30KKworc3RydWN0IGNwdV9tYXAgKmNwdV9tYXBfX2R1bW15X25ldyh2b2lkKQoreworCXN0cnVjdCBjcHVfbWFwICpjcHVzID0gbWFsbG9jKHNpemVvZigqY3B1cykgKyBzaXplb2YoaW50KSk7CisKKwlpZiAoY3B1cyAhPSBOVUxMKSB7CisJCWNwdXMtPm5yID0gMTsKKwkJY3B1cy0+bWFwWzBdID0gLTE7CisJfQorCisJcmV0dXJuIGNwdXM7CiB9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvY3B1bWFwLmggYi90b29scy9wZXJmL3V0aWwvY3B1bWFwLmgKaW5kZXggM2U2MGY1Ni4uZjdhNGY0MiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2NwdW1hcC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9jcHVtYXAuaApAQCAtMSw3ICsxLDEzIEBACiAjaWZuZGVmIF9fUEVSRl9DUFVNQVBfSAogI2RlZmluZSBfX1BFUkZfQ1BVTUFQX0gKIAotZXh0ZXJuIGludCByZWFkX2NwdV9tYXAoY29uc3QgY2hhciAqY3B1X2xpc3QpOwotZXh0ZXJuIGludCBjcHVtYXBbXTsKK3N0cnVjdCBjcHVfbWFwIHsKKwlpbnQgbnI7CisJaW50IG1hcFtdOworfTsKKworc3RydWN0IGNwdV9tYXAgKmNwdV9tYXBfX25ldyhjb25zdCBjaGFyICpjcHVfbGlzdCk7CitzdHJ1Y3QgY3B1X21hcCAqY3B1X21hcF9fZHVtbXlfbmV3KHZvaWQpOwordm9pZCAqY3B1X21hcF9fZGVsZXRlKHN0cnVjdCBjcHVfbWFwICptYXApOwogCiAjZW5kaWYgLyogX19QRVJGX0NQVU1BUF9IICovCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvZGVidWcuYyBiL3Rvb2xzL3BlcmYvdXRpbC9kZWJ1Zy5jCmluZGV4IGM4ZDgxYjAuLjAxYmJlOGUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9kZWJ1Zy5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9kZWJ1Zy5jCkBAIC00NiwyMCArNDYsMTYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGR1bXBfcHJpbnRmX2NvbG9yKGNvbnN0IGNoYXIgKmZtdCwgY29uc3QgY2hhciAqY29sb3IsIC4uLikKKyNpZmRlZiBOT19ORVdUX1NVUFBPUlQKK3ZvaWQgdWlfX3dhcm5pbmcoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCiB7CiAJdmFfbGlzdCBhcmdzOwotCWludCByZXQgPSAwOwogCi0JaWYgKGR1bXBfdHJhY2UpIHsKLQkJdmFfc3RhcnQoYXJncywgY29sb3IpOwotCQlyZXQgPSBjb2xvcl92ZnByaW50ZihzdGRvdXQsIGNvbG9yLCBmbXQsIGFyZ3MpOwotCQl2YV9lbmQoYXJncyk7Ci0JfQotCi0JcmV0dXJuIHJldDsKKwl2YV9zdGFydChhcmdzLCBmb3JtYXQpOworCXZmcHJpbnRmKHN0ZGVyciwgZm9ybWF0LCBhcmdzKTsKKwl2YV9lbmQoYXJncyk7CiB9Ci0KKyNlbmRpZgogCiB2b2lkIHRyYWNlX2V2ZW50KGV2ZW50X3QgKmV2ZW50KQogewpAQCAtNzAsMjkgKzY2LDI5IEBACiAJaWYgKCFkdW1wX3RyYWNlKQogCQlyZXR1cm47CiAKLQlkdW1wX3ByaW50ZigiLiIpOwotCWR1bXBfcHJpbnRmX2NvbG9yKCJcbi4gLi4uIHJhdyBldmVudDogc2l6ZSAlZCBieXRlc1xuIiwgY29sb3IsCi0JCQkgIGV2ZW50LT5oZWFkZXIuc2l6ZSk7CisJcHJpbnRmKCIuIik7CisJY29sb3JfZnByaW50ZihzdGRvdXQsIGNvbG9yLCAiXG4uIC4uLiByYXcgZXZlbnQ6IHNpemUgJWQgYnl0ZXNcbiIsCisJCSAgICAgIGV2ZW50LT5oZWFkZXIuc2l6ZSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgZXZlbnQtPmhlYWRlci5zaXplOyBpKyspIHsKIAkJaWYgKChpICYgMTUpID09IDApIHsKLQkJCWR1bXBfcHJpbnRmKCIuIik7Ci0JCQlkdW1wX3ByaW50Zl9jb2xvcigiICAlMDR4OiAiLCBjb2xvciwgaSk7CisJCQlwcmludGYoIi4iKTsKKwkJCWNvbG9yX2ZwcmludGYoc3Rkb3V0LCBjb2xvciwgIiAgJTA0eDogIiwgaSk7CiAJCX0KIAotCQlkdW1wX3ByaW50Zl9jb2xvcigiICUwMngiLCBjb2xvciwgcmF3X2V2ZW50W2ldKTsKKwkJY29sb3JfZnByaW50ZihzdGRvdXQsIGNvbG9yLCAiICUwMngiLCByYXdfZXZlbnRbaV0pOwogCiAJCWlmICgoKGkgJiAxNSkgPT0gMTUpIHx8IGkgPT0gZXZlbnQtPmhlYWRlci5zaXplLTEpIHsKLQkJCWR1bXBfcHJpbnRmX2NvbG9yKCIgICIsIGNvbG9yKTsKKwkJCWNvbG9yX2ZwcmludGYoc3Rkb3V0LCBjb2xvciwgIiAgIik7CiAJCQlmb3IgKGogPSAwOyBqIDwgMTUtKGkgJiAxNSk7IGorKykKLQkJCQlkdW1wX3ByaW50Zl9jb2xvcigiICAgIiwgY29sb3IpOworCQkJCWNvbG9yX2ZwcmludGYoc3Rkb3V0LCBjb2xvciwgIiAgICIpOwogCQkJZm9yIChqID0gaSAmIH4xNTsgaiA8PSBpOyBqKyspIHsKLQkJCQlkdW1wX3ByaW50Zl9jb2xvcigiJWMiLCBjb2xvciwKLQkJCQkJCWlzcHJpbnQocmF3X2V2ZW50W2pdKSA/Ci0JCQkJCQlyYXdfZXZlbnRbal0gOiAnLicpOworCQkJCWNvbG9yX2ZwcmludGYoc3Rkb3V0LCBjb2xvciwgIiVjIiwKKwkJCQkJICAgICAgaXNwcmludChyYXdfZXZlbnRbal0pID8KKwkJCQkJICAgICAgcmF3X2V2ZW50W2pdIDogJy4nKTsKIAkJCX0KLQkJCWR1bXBfcHJpbnRmX2NvbG9yKCJcbiIsIGNvbG9yKTsKKwkJCWNvbG9yX2ZwcmludGYoc3Rkb3V0LCBjb2xvciwgIlxuIik7CiAJCX0KIAl9Ci0JZHVtcF9wcmludGYoIi5cbiIpOworCXByaW50ZigiLlxuIik7CiB9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvZGVidWcuaCBiL3Rvb2xzL3BlcmYvdXRpbC9kZWJ1Zy5oCmluZGV4IDdiNTE0MDguLmNhMzVmZDYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9kZWJ1Zy5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9kZWJ1Zy5oCkBAIC0zNSw0ICszNSw2IEBACiAjaW5jbHVkZSAidWkvcHJvZ3Jlc3MuaCIKICNlbmRpZgogCit2b2lkIHVpX193YXJuaW5nKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSBfX2F0dHJpYnV0ZV9fKChmb3JtYXQocHJpbnRmLCAxLCAyKSkpOworCiAjZW5kaWYJLyogX19QRVJGX0RFQlVHX0ggKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9ldmVudC5jIGIvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmMKaW5kZXggZGFiOWU3NS4uMjMwMmVjMCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmMKQEAgLTcsNyArNyw3IEBACiAjaW5jbHVkZSAic3RybGlzdC5oIgogI2luY2x1ZGUgInRocmVhZC5oIgogCi1jb25zdCBjaGFyICpldmVudF9fbmFtZVtdID0geworc3RhdGljIGNvbnN0IGNoYXIgKmV2ZW50X19uYW1lW10gPSB7CiAJWzBdCQkJID0gIlRPVEFMIiwKIAlbUEVSRl9SRUNPUkRfTU1BUF0JID0gIk1NQVAiLAogCVtQRVJGX1JFQ09SRF9MT1NUXQkgPSAiTE9TVCIsCkBAIC0yMiwxMyArMjIsMzEgQEAKIAlbUEVSRl9SRUNPUkRfSEVBREVSX0VWRU5UX1RZUEVdCSA9ICJFVkVOVF9UWVBFIiwKIAlbUEVSRl9SRUNPUkRfSEVBREVSX1RSQUNJTkdfREFUQV0JID0gIlRSQUNJTkdfREFUQSIsCiAJW1BFUkZfUkVDT1JEX0hFQURFUl9CVUlMRF9JRF0JID0gIkJVSUxEX0lEIiwKKwlbUEVSRl9SRUNPUkRfRklOSVNIRURfUk9VTkRdCSA9ICJGSU5JU0hFRF9ST1VORCIsCiB9OwogCi1zdGF0aWMgcGlkX3QgZXZlbnRfX3N5bnRoZXNpemVfY29tbShwaWRfdCBwaWQsIGludCBmdWxsLAorY29uc3QgY2hhciAqZXZlbnRfX2dldF9ldmVudF9uYW1lKHVuc2lnbmVkIGludCBpZCkKK3sKKwlpZiAoaWQgPj0gQVJSQVlfU0laRShldmVudF9fbmFtZSkpCisJCXJldHVybiAiSU5WQUxJRCI7CisJaWYgKCFldmVudF9fbmFtZVtpZF0pCisJCXJldHVybiAiVU5LTk9XTiI7CisJcmV0dXJuIGV2ZW50X19uYW1lW2lkXTsKK30KKworc3RhdGljIHN0cnVjdCBzYW1wbGVfZGF0YSBzeW50aF9zYW1wbGUgPSB7CisJLnBpZAkgICA9IC0xLAorCS50aWQJICAgPSAtMSwKKwkudGltZQkgICA9IC0xLAorCS5zdHJlYW1faWQgPSAtMSwKKwkuY3B1CSAgID0gLTEsCisJLnBlcmlvZAkgICA9IDEsCit9OworCitzdGF0aWMgcGlkX3QgZXZlbnRfX3N5bnRoZXNpemVfY29tbShldmVudF90ICpldmVudCwgcGlkX3QgcGlkLCBpbnQgZnVsbCwKIAkJCQkgICAgZXZlbnRfX2hhbmRsZXJfdCBwcm9jZXNzLAogCQkJCSAgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQogewotCWV2ZW50X3QgZXY7CiAJY2hhciBmaWxlbmFtZVtQQVRIX01BWF07CiAJY2hhciBiZltCVUZTSVpdOwogCUZJTEUgKmZwOwpAQCAtNDksMzQgKzY3LDM5IEBACiAJCXJldHVybiAwOwogCX0KIAotCW1lbXNldCgmZXYuY29tbSwgMCwgc2l6ZW9mKGV2LmNvbW0pKTsKLQl3aGlsZSAoIWV2LmNvbW0uY29tbVswXSB8fCAhZXYuY29tbS5waWQpIHsKLQkJaWYgKGZnZXRzKGJmLCBzaXplb2YoYmYpLCBmcCkgPT0gTlVMTCkKLQkJCWdvdG8gb3V0X2ZhaWx1cmU7CisJbWVtc2V0KCZldmVudC0+Y29tbSwgMCwgc2l6ZW9mKGV2ZW50LT5jb21tKSk7CisKKwl3aGlsZSAoIWV2ZW50LT5jb21tLmNvbW1bMF0gfHwgIWV2ZW50LT5jb21tLnBpZCkgeworCQlpZiAoZmdldHMoYmYsIHNpemVvZihiZiksIGZwKSA9PSBOVUxMKSB7CisJCQlwcl93YXJuaW5nKCJjb3VsZG4ndCBnZXQgQ09NTSBhbmQgcGdpZCwgbWFsZm9ybWVkICVzXG4iLCBmaWxlbmFtZSk7CisJCQlnb3RvIG91dDsKKwkJfQogCiAJCWlmIChtZW1jbXAoYmYsICJOYW1lOiIsIDUpID09IDApIHsKIAkJCWNoYXIgKm5hbWUgPSBiZiArIDU7CiAJCQl3aGlsZSAoKm5hbWUgJiYgaXNzcGFjZSgqbmFtZSkpCiAJCQkJKytuYW1lOwogCQkJc2l6ZSA9IHN0cmxlbihuYW1lKSAtIDE7Ci0JCQltZW1jcHkoZXYuY29tbS5jb21tLCBuYW1lLCBzaXplKyspOworCQkJbWVtY3B5KGV2ZW50LT5jb21tLmNvbW0sIG5hbWUsIHNpemUrKyk7CiAJCX0gZWxzZSBpZiAobWVtY21wKGJmLCAiVGdpZDoiLCA1KSA9PSAwKSB7CiAJCQljaGFyICp0Z2lkcyA9IGJmICsgNTsKIAkJCXdoaWxlICgqdGdpZHMgJiYgaXNzcGFjZSgqdGdpZHMpKQogCQkJCSsrdGdpZHM7Ci0JCQl0Z2lkID0gZXYuY29tbS5waWQgPSBhdG9pKHRnaWRzKTsKKwkJCXRnaWQgPSBldmVudC0+Y29tbS5waWQgPSBhdG9pKHRnaWRzKTsKIAkJfQogCX0KIAotCWV2LmNvbW0uaGVhZGVyLnR5cGUgPSBQRVJGX1JFQ09SRF9DT01NOworCWV2ZW50LT5jb21tLmhlYWRlci50eXBlID0gUEVSRl9SRUNPUkRfQ09NTTsKIAlzaXplID0gQUxJR04oc2l6ZSwgc2l6ZW9mKHU2NCkpOwotCWV2LmNvbW0uaGVhZGVyLnNpemUgPSBzaXplb2YoZXYuY29tbSkgLSAoc2l6ZW9mKGV2LmNvbW0uY29tbSkgLSBzaXplKTsKLQorCW1lbXNldChldmVudC0+Y29tbS5jb21tICsgc2l6ZSwgMCwgc2Vzc2lvbi0+aWRfaGRyX3NpemUpOworCWV2ZW50LT5jb21tLmhlYWRlci5zaXplID0gKHNpemVvZihldmVudC0+Y29tbSkgLQorCQkJCShzaXplb2YoZXZlbnQtPmNvbW0uY29tbSkgLSBzaXplKSArCisJCQkJc2Vzc2lvbi0+aWRfaGRyX3NpemUpOwogCWlmICghZnVsbCkgewotCQlldi5jb21tLnRpZCA9IHBpZDsKKwkJZXZlbnQtPmNvbW0udGlkID0gcGlkOwogCi0JCXByb2Nlc3MoJmV2LCBzZXNzaW9uKTsKLQkJZ290byBvdXRfZmNsb3NlOworCQlwcm9jZXNzKGV2ZW50LCAmc3ludGhfc2FtcGxlLCBzZXNzaW9uKTsKKwkJZ290byBvdXQ7CiAJfQogCiAJc25wcmludGYoZmlsZW5hbWUsIHNpemVvZihmaWxlbmFtZSksICIvcHJvYy8lZC90YXNrIiwgcGlkKTsKQEAgLTkxLDIyICsxMTQsMTkgQEAKIAkJaWYgKCplbmQpCiAJCQljb250aW51ZTsKIAotCQlldi5jb21tLnRpZCA9IHBpZDsKKwkJZXZlbnQtPmNvbW0udGlkID0gcGlkOwogCi0JCXByb2Nlc3MoJmV2LCBzZXNzaW9uKTsKKwkJcHJvY2VzcyhldmVudCwgJnN5bnRoX3NhbXBsZSwgc2Vzc2lvbik7CiAJfQorCiAJY2xvc2VkaXIodGFza3MpOwotCi1vdXRfZmNsb3NlOgorb3V0OgogCWZjbG9zZShmcCk7Ci0JcmV0dXJuIHRnaWQ7CiAKLW91dF9mYWlsdXJlOgotCXByX3dhcm5pbmcoImNvdWxkbid0IGdldCBDT01NIGFuZCBwZ2lkLCBtYWxmb3JtZWQgJXNcbiIsIGZpbGVuYW1lKTsKLQlyZXR1cm4gLTE7CisJcmV0dXJuIHRnaWQ7CiB9CiAKLXN0YXRpYyBpbnQgZXZlbnRfX3N5bnRoZXNpemVfbW1hcF9ldmVudHMocGlkX3QgcGlkLCBwaWRfdCB0Z2lkLAorc3RhdGljIGludCBldmVudF9fc3ludGhlc2l6ZV9tbWFwX2V2ZW50cyhldmVudF90ICpldmVudCwgcGlkX3QgcGlkLCBwaWRfdCB0Z2lkLAogCQkJCQkgZXZlbnRfX2hhbmRsZXJfdCBwcm9jZXNzLAogCQkJCQkgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbikKIHsKQEAgLTEyNCwyOSArMTQ0LDI1IEBACiAJCXJldHVybiAtMTsKIAl9CiAKKwlldmVudC0+aGVhZGVyLnR5cGUgPSBQRVJGX1JFQ09SRF9NTUFQOworCS8qCisJICogSnVzdCBsaWtlIHRoZSBrZXJuZWwsIHNlZSBfX3BlcmZfZXZlbnRfbW1hcCBpbiBrZXJuZWwvcGVyZl9ldmVudC5jCisJICovCisJZXZlbnQtPmhlYWRlci5taXNjID0gUEVSRl9SRUNPUkRfTUlTQ19VU0VSOworCiAJd2hpbGUgKDEpIHsKIAkJY2hhciBiZltCVUZTSVpdLCAqcGJmID0gYmY7Ci0JCWV2ZW50X3QgZXYgPSB7Ci0JCQkuaGVhZGVyID0gewotCQkJCS50eXBlID0gUEVSRl9SRUNPUkRfTU1BUCwKLQkJCQkvKgotCQkJCSAqIEp1c3QgbGlrZSB0aGUga2VybmVsLCBzZWUgX19wZXJmX2V2ZW50X21tYXAKLQkJCQkgKiBpbiBrZXJuZWwvcGVyZl9ldmVudC5jCi0JCQkJICovCi0JCQkJLm1pc2MgPSBQRVJGX1JFQ09SRF9NSVNDX1VTRVIsCi0JCQkgfSwKLQkJfTsKIAkJaW50IG47CiAJCXNpemVfdCBzaXplOwogCQlpZiAoZmdldHMoYmYsIHNpemVvZihiZiksIGZwKSA9PSBOVUxMKQogCQkJYnJlYWs7CiAKIAkJLyogMDA0MDAwMDAtMDA0MGMwMDAgci14cCAwMDAwMDAwMCBmZDowMSA0MTAzOCAgL2Jpbi9jYXQgKi8KLQkJbiA9IGhleDJ1NjQocGJmLCAmZXYubW1hcC5zdGFydCk7CisJCW4gPSBoZXgydTY0KHBiZiwgJmV2ZW50LT5tbWFwLnN0YXJ0KTsKIAkJaWYgKG4gPCAwKQogCQkJY29udGludWU7CiAJCXBiZiArPSBuICsgMTsKLQkJbiA9IGhleDJ1NjQocGJmLCAmZXYubW1hcC5sZW4pOworCQluID0gaGV4MnU2NChwYmYsICZldmVudC0+bW1hcC5sZW4pOwogCQlpZiAobiA8IDApCiAJCQljb250aW51ZTsKIAkJcGJmICs9IG4gKyAzOwpAQCAtMTYxLDE5ICsxNzcsMjEgQEAKIAkJCQljb250aW51ZTsKIAogCQkJcGJmICs9IDM7Ci0JCQluID0gaGV4MnU2NChwYmYsICZldi5tbWFwLnBnb2ZmKTsKKwkJCW4gPSBoZXgydTY0KHBiZiwgJmV2ZW50LT5tbWFwLnBnb2ZmKTsKIAogCQkJc2l6ZSA9IHN0cmxlbihleGVjbmFtZSk7CiAJCQlleGVjbmFtZVtzaXplIC0gMV0gPSAnXDAnOyAvKiBSZW1vdmUgXG4gKi8KLQkJCW1lbWNweShldi5tbWFwLmZpbGVuYW1lLCBleGVjbmFtZSwgc2l6ZSk7CisJCQltZW1jcHkoZXZlbnQtPm1tYXAuZmlsZW5hbWUsIGV4ZWNuYW1lLCBzaXplKTsKIAkJCXNpemUgPSBBTElHTihzaXplLCBzaXplb2YodTY0KSk7Ci0JCQlldi5tbWFwLmxlbiAtPSBldi5tbWFwLnN0YXJ0OwotCQkJZXYubW1hcC5oZWFkZXIuc2l6ZSA9IChzaXplb2YoZXYubW1hcCkgLQotCQkJCQkgICAgICAgKHNpemVvZihldi5tbWFwLmZpbGVuYW1lKSAtIHNpemUpKTsKLQkJCWV2Lm1tYXAucGlkID0gdGdpZDsKLQkJCWV2Lm1tYXAudGlkID0gcGlkOworCQkJZXZlbnQtPm1tYXAubGVuIC09IGV2ZW50LT5tbWFwLnN0YXJ0OworCQkJZXZlbnQtPm1tYXAuaGVhZGVyLnNpemUgPSAoc2l6ZW9mKGV2ZW50LT5tbWFwKSAtCisJCQkJCSAgICAgICAgKHNpemVvZihldmVudC0+bW1hcC5maWxlbmFtZSkgLSBzaXplKSk7CisJCQltZW1zZXQoZXZlbnQtPm1tYXAuZmlsZW5hbWUgKyBzaXplLCAwLCBzZXNzaW9uLT5pZF9oZHJfc2l6ZSk7CisJCQlldmVudC0+bW1hcC5oZWFkZXIuc2l6ZSArPSBzZXNzaW9uLT5pZF9oZHJfc2l6ZTsKKwkJCWV2ZW50LT5tbWFwLnBpZCA9IHRnaWQ7CisJCQlldmVudC0+bW1hcC50aWQgPSBwaWQ7CiAKLQkJCXByb2Nlc3MoJmV2LCBzZXNzaW9uKTsKKwkJCXByb2Nlc3MoZXZlbnQsICZzeW50aF9zYW1wbGUsIHNlc3Npb24pOwogCQl9CiAJfQogCkBAIC0xODcsMjAgKzIwNSwyNyBAQAogewogCXN0cnVjdCByYl9ub2RlICpuZDsKIAlzdHJ1Y3QgbWFwX2dyb3VwcyAqa21hcHMgPSAmbWFjaGluZS0+a21hcHM7Ci0JdTE2IG1pc2M7CisJZXZlbnRfdCAqZXZlbnQgPSB6YWxsb2Moc2l6ZW9mKGV2ZW50LT5tbWFwKSArIHNlc3Npb24tPmlkX2hkcl9zaXplKTsKKworCWlmIChldmVudCA9PSBOVUxMKSB7CisJCXByX2RlYnVnKCJOb3QgZW5vdWdoIG1lbW9yeSBzeW50aGVzaXppbmcgbW1hcCBldmVudCAiCisJCQkgImZvciBrZXJuZWwgbW9kdWxlc1xuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlldmVudC0+aGVhZGVyLnR5cGUgPSBQRVJGX1JFQ09SRF9NTUFQOwogCiAJLyoKIAkgKiBrZXJuZWwgdXNlcyAwIGZvciB1c2VyIHNwYWNlIG1hcHMsIHNlZSBrZXJuZWwvcGVyZl9ldmVudC5jCiAJICogX19wZXJmX2V2ZW50X21tYXAKIAkgKi8KIAlpZiAobWFjaGluZV9faXNfaG9zdChtYWNoaW5lKSkKLQkJbWlzYyA9IFBFUkZfUkVDT1JEX01JU0NfS0VSTkVMOworCQlldmVudC0+aGVhZGVyLm1pc2MgPSBQRVJGX1JFQ09SRF9NSVNDX0tFUk5FTDsKIAllbHNlCi0JCW1pc2MgPSBQRVJGX1JFQ09SRF9NSVNDX0dVRVNUX0tFUk5FTDsKKwkJZXZlbnQtPmhlYWRlci5taXNjID0gUEVSRl9SRUNPUkRfTUlTQ19HVUVTVF9LRVJORUw7CiAKIAlmb3IgKG5kID0gcmJfZmlyc3QoJmttYXBzLT5tYXBzW01BUF9fRlVOQ1RJT05dKTsKIAkgICAgIG5kOyBuZCA9IHJiX25leHQobmQpKSB7Ci0JCWV2ZW50X3QgZXY7CiAJCXNpemVfdCBzaXplOwogCQlzdHJ1Y3QgbWFwICpwb3MgPSByYl9lbnRyeShuZCwgc3RydWN0IG1hcCwgcmJfbm9kZSk7CiAKQEAgLTIwOCwzOSArMjMzLDc4IEBACiAJCQljb250aW51ZTsKIAogCQlzaXplID0gQUxJR04ocG9zLT5kc28tPmxvbmdfbmFtZV9sZW4gKyAxLCBzaXplb2YodTY0KSk7Ci0JCW1lbXNldCgmZXYsIDAsIHNpemVvZihldikpOwotCQlldi5tbWFwLmhlYWRlci5taXNjID0gbWlzYzsKLQkJZXYubW1hcC5oZWFkZXIudHlwZSA9IFBFUkZfUkVDT1JEX01NQVA7Ci0JCWV2Lm1tYXAuaGVhZGVyLnNpemUgPSAoc2l6ZW9mKGV2Lm1tYXApIC0KLQkJCQkgICAgICAgIChzaXplb2YoZXYubW1hcC5maWxlbmFtZSkgLSBzaXplKSk7Ci0JCWV2Lm1tYXAuc3RhcnQgPSBwb3MtPnN0YXJ0OwotCQlldi5tbWFwLmxlbiAgID0gcG9zLT5lbmQgLSBwb3MtPnN0YXJ0OwotCQlldi5tbWFwLnBpZCAgID0gbWFjaGluZS0+cGlkOworCQlldmVudC0+bW1hcC5oZWFkZXIudHlwZSA9IFBFUkZfUkVDT1JEX01NQVA7CisJCWV2ZW50LT5tbWFwLmhlYWRlci5zaXplID0gKHNpemVvZihldmVudC0+bW1hcCkgLQorCQkJCSAgICAgICAgKHNpemVvZihldmVudC0+bW1hcC5maWxlbmFtZSkgLSBzaXplKSk7CisJCW1lbXNldChldmVudC0+bW1hcC5maWxlbmFtZSArIHNpemUsIDAsIHNlc3Npb24tPmlkX2hkcl9zaXplKTsKKwkJZXZlbnQtPm1tYXAuaGVhZGVyLnNpemUgKz0gc2Vzc2lvbi0+aWRfaGRyX3NpemU7CisJCWV2ZW50LT5tbWFwLnN0YXJ0ID0gcG9zLT5zdGFydDsKKwkJZXZlbnQtPm1tYXAubGVuICAgPSBwb3MtPmVuZCAtIHBvcy0+c3RhcnQ7CisJCWV2ZW50LT5tbWFwLnBpZCAgID0gbWFjaGluZS0+cGlkOwogCi0JCW1lbWNweShldi5tbWFwLmZpbGVuYW1lLCBwb3MtPmRzby0+bG9uZ19uYW1lLAorCQltZW1jcHkoZXZlbnQtPm1tYXAuZmlsZW5hbWUsIHBvcy0+ZHNvLT5sb25nX25hbWUsCiAJCSAgICAgICBwb3MtPmRzby0+bG9uZ19uYW1lX2xlbiArIDEpOwotCQlwcm9jZXNzKCZldiwgc2Vzc2lvbik7CisJCXByb2Nlc3MoZXZlbnQsICZzeW50aF9zYW1wbGUsIHNlc3Npb24pOwogCX0KIAorCWZyZWUoZXZlbnQpOwogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IF9fZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkKGV2ZW50X3QgKmNvbW1fZXZlbnQsIGV2ZW50X3QgKm1tYXBfZXZlbnQsCisJCQkJICAgICAgcGlkX3QgcGlkLCBldmVudF9faGFuZGxlcl90IHByb2Nlc3MsCisJCQkJICAgICAgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbikKK3sKKwlwaWRfdCB0Z2lkID0gZXZlbnRfX3N5bnRoZXNpemVfY29tbShjb21tX2V2ZW50LCBwaWQsIDEsIHByb2Nlc3MsCisJCQkJCSAgICBzZXNzaW9uKTsKKwlpZiAodGdpZCA9PSAtMSkKKwkJcmV0dXJuIC0xOworCXJldHVybiBldmVudF9fc3ludGhlc2l6ZV9tbWFwX2V2ZW50cyhtbWFwX2V2ZW50LCBwaWQsIHRnaWQsCisJCQkJCSAgICAgcHJvY2Vzcywgc2Vzc2lvbik7Cit9CisKIGludCBldmVudF9fc3ludGhlc2l6ZV90aHJlYWQocGlkX3QgcGlkLCBldmVudF9faGFuZGxlcl90IHByb2Nlc3MsCiAJCQkgICAgIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pCiB7Ci0JcGlkX3QgdGdpZCA9IGV2ZW50X19zeW50aGVzaXplX2NvbW0ocGlkLCAxLCBwcm9jZXNzLCBzZXNzaW9uKTsKLQlpZiAodGdpZCA9PSAtMSkKLQkJcmV0dXJuIC0xOwotCXJldHVybiBldmVudF9fc3ludGhlc2l6ZV9tbWFwX2V2ZW50cyhwaWQsIHRnaWQsIHByb2Nlc3MsIHNlc3Npb24pOworCWV2ZW50X3QgKmNvbW1fZXZlbnQsICptbWFwX2V2ZW50OworCWludCBlcnIgPSAtMTsKKworCWNvbW1fZXZlbnQgPSBtYWxsb2Moc2l6ZW9mKGNvbW1fZXZlbnQtPmNvbW0pICsgc2Vzc2lvbi0+aWRfaGRyX3NpemUpOworCWlmIChjb21tX2V2ZW50ID09IE5VTEwpCisJCWdvdG8gb3V0OworCisJbW1hcF9ldmVudCA9IG1hbGxvYyhzaXplb2YobW1hcF9ldmVudC0+bW1hcCkgKyBzZXNzaW9uLT5pZF9oZHJfc2l6ZSk7CisJaWYgKG1tYXBfZXZlbnQgPT0gTlVMTCkKKwkJZ290byBvdXRfZnJlZV9jb21tOworCisJZXJyID0gX19ldmVudF9fc3ludGhlc2l6ZV90aHJlYWQoY29tbV9ldmVudCwgbW1hcF9ldmVudCwgcGlkLAorCQkJCQkgcHJvY2Vzcywgc2Vzc2lvbik7CisJZnJlZShtbWFwX2V2ZW50KTsKK291dF9mcmVlX2NvbW06CisJZnJlZShjb21tX2V2ZW50KTsKK291dDoKKwlyZXR1cm4gZXJyOwogfQogCi12b2lkIGV2ZW50X19zeW50aGVzaXplX3RocmVhZHMoZXZlbnRfX2hhbmRsZXJfdCBwcm9jZXNzLAotCQkJICAgICAgIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pCitpbnQgZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkcyhldmVudF9faGFuZGxlcl90IHByb2Nlc3MsCisJCQkgICAgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQogewogCURJUiAqcHJvYzsKIAlzdHJ1Y3QgZGlyZW50IGRpcmVudCwgKm5leHQ7CisJZXZlbnRfdCAqY29tbV9ldmVudCwgKm1tYXBfZXZlbnQ7CisJaW50IGVyciA9IC0xOworCisJY29tbV9ldmVudCA9IG1hbGxvYyhzaXplb2YoY29tbV9ldmVudC0+Y29tbSkgKyBzZXNzaW9uLT5pZF9oZHJfc2l6ZSk7CisJaWYgKGNvbW1fZXZlbnQgPT0gTlVMTCkKKwkJZ290byBvdXQ7CisKKwltbWFwX2V2ZW50ID0gbWFsbG9jKHNpemVvZihtbWFwX2V2ZW50LT5tbWFwKSArIHNlc3Npb24tPmlkX2hkcl9zaXplKTsKKwlpZiAobW1hcF9ldmVudCA9PSBOVUxMKQorCQlnb3RvIG91dF9mcmVlX2NvbW07CiAKIAlwcm9jID0gb3BlbmRpcigiL3Byb2MiKTsKKwlpZiAocHJvYyA9PSBOVUxMKQorCQlnb3RvIG91dF9mcmVlX21tYXA7CiAKIAl3aGlsZSAoIXJlYWRkaXJfcihwcm9jLCAmZGlyZW50LCAmbmV4dCkgJiYgbmV4dCkgewogCQljaGFyICplbmQ7CkBAIC0yNDksMTAgKzMxMywxOCBAQAogCQlpZiAoKmVuZCkgLyogb25seSBpbnRlcmVzdGVkIGluIHByb3BlciBudW1lcmljYWwgZGlyZW50cyAqLwogCQkJY29udGludWU7CiAKLQkJZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkKHBpZCwgcHJvY2Vzcywgc2Vzc2lvbik7CisJCV9fZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkKGNvbW1fZXZlbnQsIG1tYXBfZXZlbnQsIHBpZCwKKwkJCQkJICAgcHJvY2Vzcywgc2Vzc2lvbik7CiAJfQogCiAJY2xvc2VkaXIocHJvYyk7CisJZXJyID0gMDsKK291dF9mcmVlX21tYXA6CisJZnJlZShtbWFwX2V2ZW50KTsKK291dF9mcmVlX2NvbW06CisJZnJlZShjb21tX2V2ZW50KTsKK291dDoKKwlyZXR1cm4gZXJyOwogfQogCiBzdHJ1Y3QgcHJvY2Vzc19zeW1ib2xfYXJncyB7CkBAIC0yNjAsNyArMzMyLDggQEAKIAl1NjQJICAgc3RhcnQ7CiB9OwogCi1zdGF0aWMgaW50IGZpbmRfc3ltYm9sX2NiKHZvaWQgKmFyZywgY29uc3QgY2hhciAqbmFtZSwgY2hhciB0eXBlLCB1NjQgc3RhcnQpCitzdGF0aWMgaW50IGZpbmRfc3ltYm9sX2NiKHZvaWQgKmFyZywgY29uc3QgY2hhciAqbmFtZSwgY2hhciB0eXBlLAorCQkJICB1NjQgc3RhcnQsIHU2NCBlbmQgX191c2VkKQogewogCXN0cnVjdCBwcm9jZXNzX3N5bWJvbF9hcmdzICphcmdzID0gYXJnOwogCkBAIC0yODYsMTggKzM1OSwyMCBAQAogCWNoYXIgcGF0aFtQQVRIX01BWF07CiAJY2hhciBuYW1lX2J1ZmZbUEFUSF9NQVhdOwogCXN0cnVjdCBtYXAgKm1hcDsKLQotCWV2ZW50X3QgZXYgPSB7Ci0JCS5oZWFkZXIgPSB7Ci0JCQkudHlwZSA9IFBFUkZfUkVDT1JEX01NQVAsCi0JCX0sCi0JfTsKKwlpbnQgZXJyOwogCS8qCiAJICogV2Ugc2hvdWxkIGdldCB0aGlzIGZyb20gL3N5cy9rZXJuZWwvc2VjdGlvbnMvLnRleHQsIGJ1dCB0aWxsIHRoYXQgaXMKIAkgKiBhdmFpbGFibGUgdXNlIHRoaXMsIGFuZCBhZnRlciBpdCBpcyB1c2UgdGhpcyBhcyBhIGZhbGxiYWNrIGZvciBvbGRlcgogCSAqIGtlcm5lbHMuCiAJICovCiAJc3RydWN0IHByb2Nlc3Nfc3ltYm9sX2FyZ3MgYXJncyA9IHsgLm5hbWUgPSBzeW1ib2xfbmFtZSwgfTsKKwlldmVudF90ICpldmVudCA9IHphbGxvYyhzaXplb2YoZXZlbnQtPm1tYXApICsgc2Vzc2lvbi0+aWRfaGRyX3NpemUpOworCisJaWYgKGV2ZW50ID09IE5VTEwpIHsKKwkJcHJfZGVidWcoIk5vdCBlbm91Z2ggbWVtb3J5IHN5bnRoZXNpemluZyBtbWFwIGV2ZW50ICIKKwkJCSAiZm9yIGtlcm5lbCBtb2R1bGVzXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KIAogCW1tYXBfbmFtZSA9IG1hY2hpbmVfX21tYXBfbmFtZShtYWNoaW5lLCBuYW1lX2J1ZmYsIHNpemVvZihuYW1lX2J1ZmYpKTsKIAlpZiAobWFjaGluZV9faXNfaG9zdChtYWNoaW5lKSkgewpAQCAtMzA1LDEwICszODAsMTAgQEAKIAkJICoga2VybmVsIHVzZXMgUEVSRl9SRUNPUkRfTUlTQ19VU0VSIGZvciB1c2VyIHNwYWNlIG1hcHMsCiAJCSAqIHNlZSBrZXJuZWwvcGVyZl9ldmVudC5jIF9fcGVyZl9ldmVudF9tbWFwCiAJCSAqLwotCQlldi5oZWFkZXIubWlzYyA9IFBFUkZfUkVDT1JEX01JU0NfS0VSTkVMOworCQlldmVudC0+aGVhZGVyLm1pc2MgPSBQRVJGX1JFQ09SRF9NSVNDX0tFUk5FTDsKIAkJZmlsZW5hbWUgPSAiL3Byb2Mva2FsbHN5bXMiOwogCX0gZWxzZSB7Ci0JCWV2LmhlYWRlci5taXNjID0gUEVSRl9SRUNPUkRfTUlTQ19HVUVTVF9LRVJORUw7CisJCWV2ZW50LT5oZWFkZXIubWlzYyA9IFBFUkZfUkVDT1JEX01JU0NfR1VFU1RfS0VSTkVMOwogCQlpZiAobWFjaGluZV9faXNfZGVmYXVsdF9ndWVzdChtYWNoaW5lKSkKIAkJCWZpbGVuYW1lID0gKGNoYXIgKikgc3ltYm9sX2NvbmYuZGVmYXVsdF9ndWVzdF9rYWxsc3ltczsKIAkJZWxzZSB7CkBAIC0zMjEsMTcgKzM5NiwyMSBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAogCW1hcCA9IG1hY2hpbmUtPnZtbGludXhfbWFwc1tNQVBfX0ZVTkNUSU9OXTsKLQlzaXplID0gc25wcmludGYoZXYubW1hcC5maWxlbmFtZSwgc2l6ZW9mKGV2Lm1tYXAuZmlsZW5hbWUpLAorCXNpemUgPSBzbnByaW50ZihldmVudC0+bW1hcC5maWxlbmFtZSwgc2l6ZW9mKGV2ZW50LT5tbWFwLmZpbGVuYW1lKSwKIAkJCSIlcyVzIiwgbW1hcF9uYW1lLCBzeW1ib2xfbmFtZSkgKyAxOwogCXNpemUgPSBBTElHTihzaXplLCBzaXplb2YodTY0KSk7Ci0JZXYubW1hcC5oZWFkZXIuc2l6ZSA9IChzaXplb2YoZXYubW1hcCkgLQotCQkJKHNpemVvZihldi5tbWFwLmZpbGVuYW1lKSAtIHNpemUpKTsKLQlldi5tbWFwLnBnb2ZmID0gYXJncy5zdGFydDsKLQlldi5tbWFwLnN0YXJ0ID0gbWFwLT5zdGFydDsKLQlldi5tbWFwLmxlbiAgID0gbWFwLT5lbmQgLSBldi5tbWFwLnN0YXJ0OwotCWV2Lm1tYXAucGlkICAgPSBtYWNoaW5lLT5waWQ7CisJZXZlbnQtPm1tYXAuaGVhZGVyLnR5cGUgPSBQRVJGX1JFQ09SRF9NTUFQOworCWV2ZW50LT5tbWFwLmhlYWRlci5zaXplID0gKHNpemVvZihldmVudC0+bW1hcCkgLQorCQkJKHNpemVvZihldmVudC0+bW1hcC5maWxlbmFtZSkgLSBzaXplKSArIHNlc3Npb24tPmlkX2hkcl9zaXplKTsKKwlldmVudC0+bW1hcC5wZ29mZiA9IGFyZ3Muc3RhcnQ7CisJZXZlbnQtPm1tYXAuc3RhcnQgPSBtYXAtPnN0YXJ0OworCWV2ZW50LT5tbWFwLmxlbiAgID0gbWFwLT5lbmQgLSBldmVudC0+bW1hcC5zdGFydDsKKwlldmVudC0+bW1hcC5waWQgICA9IG1hY2hpbmUtPnBpZDsKIAotCXJldHVybiBwcm9jZXNzKCZldiwgc2Vzc2lvbik7CisJZXJyID0gcHJvY2VzcyhldmVudCwgJnN5bnRoX3NhbXBsZSwgc2Vzc2lvbik7CisJZnJlZShldmVudCk7CisKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgdm9pZCB0aHJlYWRfX2NvbW1fYWRqdXN0KHN0cnVjdCB0aHJlYWQgKnNlbGYsIHN0cnVjdCBoaXN0cyAqaGlzdHMpCkBAIC0zNjEsNyArNDQwLDggQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGV2ZW50X19wcm9jZXNzX2NvbW0oZXZlbnRfdCAqc2VsZiwgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbikKK2ludCBldmVudF9fcHJvY2Vzc19jb21tKGV2ZW50X3QgKnNlbGYsIHN0cnVjdCBzYW1wbGVfZGF0YSAqc2FtcGxlIF9fdXNlZCwKKwkJCXN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pCiB7CiAJc3RydWN0IHRocmVhZCAqdGhyZWFkID0gcGVyZl9zZXNzaW9uX19maW5kbmV3KHNlc3Npb24sIHNlbGYtPmNvbW0udGlkKTsKIApAQCAtMzc2LDcgKzQ1Niw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBldmVudF9fcHJvY2Vzc19sb3N0KGV2ZW50X3QgKnNlbGYsIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pCitpbnQgZXZlbnRfX3Byb2Nlc3NfbG9zdChldmVudF90ICpzZWxmLCBzdHJ1Y3Qgc2FtcGxlX2RhdGEgKnNhbXBsZSBfX3VzZWQsCisJCQlzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQogewogCWR1bXBfcHJpbnRmKCI6IGlkOiVMZDogbG9zdDolTGRcbiIsIHNlbGYtPmxvc3QuaWQsIHNlbGYtPmxvc3QubG9zdCk7CiAJc2Vzc2lvbi0+aGlzdHMuc3RhdHMudG90YWxfbG9zdCArPSBzZWxmLT5sb3N0Lmxvc3Q7CkBAIC0zOTIsNyArNDczLDcgQEAKIAkgKiBhIHplcm8gc2l6ZWQgc3ludGhlc2l6ZWQgTU1BUCBldmVudCBmb3IgdGhlIGtlcm5lbC4KIAkgKi8KIAlpZiAobWFwc1tNQVBfX0ZVTkNUSU9OXS0+ZW5kID09IDApCi0JCW1hcHNbTUFQX19GVU5DVElPTl0tPmVuZCA9IH4wVUw7CisJCW1hcHNbTUFQX19GVU5DVElPTl0tPmVuZCA9IH4wVUxMOwogfQogCiBzdGF0aWMgaW50IGV2ZW50X19wcm9jZXNzX2tlcm5lbF9tbWFwKGV2ZW50X3QgKnNlbGYsCkBAIC00ODUsNyArNTY2LDggQEAKIAlyZXR1cm4gLTE7CiB9CiAKLWludCBldmVudF9fcHJvY2Vzc19tbWFwKGV2ZW50X3QgKnNlbGYsIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pCitpbnQgZXZlbnRfX3Byb2Nlc3NfbW1hcChldmVudF90ICpzZWxmLCBzdHJ1Y3Qgc2FtcGxlX2RhdGEgKnNhbXBsZSBfX3VzZWQsCisJCQlzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQogewogCXN0cnVjdCBtYWNoaW5lICptYWNoaW5lOwogCXN0cnVjdCB0aHJlYWQgKnRocmVhZDsKQEAgLTUyNiw3ICs2MDgsOCBAQAogCXJldHVybiAwOwogfQogCi1pbnQgZXZlbnRfX3Byb2Nlc3NfdGFzayhldmVudF90ICpzZWxmLCBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQoraW50IGV2ZW50X19wcm9jZXNzX3Rhc2soZXZlbnRfdCAqc2VsZiwgc3RydWN0IHNhbXBsZV9kYXRhICpzYW1wbGUgX191c2VkLAorCQkJc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbikKIHsKIAlzdHJ1Y3QgdGhyZWFkICp0aHJlYWQgPSBwZXJmX3Nlc3Npb25fX2ZpbmRuZXcoc2Vzc2lvbiwgc2VsZi0+Zm9yay50aWQpOwogCXN0cnVjdCB0aHJlYWQgKnBhcmVudCA9IHBlcmZfc2Vzc2lvbl9fZmluZG5ldyhzZXNzaW9uLCBzZWxmLT5mb3JrLnB0aWQpOwpAQCAtNTQ4LDE4ICs2MzEsMTkgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGV2ZW50X19wcm9jZXNzKGV2ZW50X3QgKmV2ZW50LCBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQoraW50IGV2ZW50X19wcm9jZXNzKGV2ZW50X3QgKmV2ZW50LCBzdHJ1Y3Qgc2FtcGxlX2RhdGEgKnNhbXBsZSwKKwkJICAgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbikKIHsKIAlzd2l0Y2ggKGV2ZW50LT5oZWFkZXIudHlwZSkgewogCWNhc2UgUEVSRl9SRUNPUkRfQ09NTToKLQkJZXZlbnRfX3Byb2Nlc3NfY29tbShldmVudCwgc2Vzc2lvbik7CisJCWV2ZW50X19wcm9jZXNzX2NvbW0oZXZlbnQsIHNhbXBsZSwgc2Vzc2lvbik7CiAJCWJyZWFrOwogCWNhc2UgUEVSRl9SRUNPUkRfTU1BUDoKLQkJZXZlbnRfX3Byb2Nlc3NfbW1hcChldmVudCwgc2Vzc2lvbik7CisJCWV2ZW50X19wcm9jZXNzX21tYXAoZXZlbnQsIHNhbXBsZSwgc2Vzc2lvbik7CiAJCWJyZWFrOwogCWNhc2UgUEVSRl9SRUNPUkRfRk9SSzoKIAljYXNlIFBFUkZfUkVDT1JEX0VYSVQ6Ci0JCWV2ZW50X19wcm9jZXNzX3Rhc2soZXZlbnQsIHNlc3Npb24pOworCQlldmVudF9fcHJvY2Vzc190YXNrKGV2ZW50LCBzYW1wbGUsIHNlc3Npb24pOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKQEAgLTY3NCwzMiArNzU4LDggQEAKIAkJCSAgICAgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcikKIHsKIAl1OCBjcHVtb2RlID0gc2VsZi0+aGVhZGVyLm1pc2MgJiBQRVJGX1JFQ09SRF9NSVNDX0NQVU1PREVfTUFTSzsKLQlzdHJ1Y3QgdGhyZWFkICp0aHJlYWQ7CisJc3RydWN0IHRocmVhZCAqdGhyZWFkID0gcGVyZl9zZXNzaW9uX19maW5kbmV3KHNlc3Npb24sIHNlbGYtPmlwLnBpZCk7CiAKLQlldmVudF9fcGFyc2Vfc2FtcGxlKHNlbGYsIHNlc3Npb24tPnNhbXBsZV90eXBlLCBkYXRhKTsKLQotCWR1bXBfcHJpbnRmKCIoSVAsICVkKTogJWQvJWQ6ICUjTHggcGVyaW9kOiAlTGQgY3B1OiVkXG4iLAotCQkgICAgc2VsZi0+aGVhZGVyLm1pc2MsIGRhdGEtPnBpZCwgZGF0YS0+dGlkLCBkYXRhLT5pcCwKLQkJICAgIGRhdGEtPnBlcmlvZCwgZGF0YS0+Y3B1KTsKLQotCWlmIChzZXNzaW9uLT5zYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX0NBTExDSEFJTikgewotCQl1bnNpZ25lZCBpbnQgaTsKLQotCQlkdW1wX3ByaW50ZigiLi4uIGNoYWluOiBucjolTHVcbiIsIGRhdGEtPmNhbGxjaGFpbi0+bnIpOwotCi0JCWlmICghaXBfY2FsbGNoYWluX192YWxpZChkYXRhLT5jYWxsY2hhaW4sIHNlbGYpKSB7Ci0JCQlwcl9kZWJ1ZygiY2FsbC1jaGFpbiBwcm9ibGVtIHdpdGggZXZlbnQsICIKLQkJCQkgInNraXBwaW5nIGl0LlxuIik7Ci0JCQlnb3RvIG91dF9maWx0ZXJlZDsKLQkJfQotCi0JCWlmIChkdW1wX3RyYWNlKSB7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+Y2FsbGNoYWluLT5ucjsgaSsrKQotCQkJCWR1bXBfcHJpbnRmKCIuLi4uLiAlMmQ6ICUwMTZMeFxuIiwKLQkJCQkJICAgIGksIGRhdGEtPmNhbGxjaGFpbi0+aXBzW2ldKTsKLQkJfQotCX0KLQl0aHJlYWQgPSBwZXJmX3Nlc3Npb25fX2ZpbmRuZXcoc2Vzc2lvbiwgc2VsZi0+aXAucGlkKTsKIAlpZiAodGhyZWFkID09IE5VTEwpCiAJCXJldHVybiAtMTsKIApAQCAtNzY2LDkgKzgyNiw2NSBAQAogCXJldHVybiAwOwogfQogCi1pbnQgZXZlbnRfX3BhcnNlX3NhbXBsZShjb25zdCBldmVudF90ICpldmVudCwgdTY0IHR5cGUsIHN0cnVjdCBzYW1wbGVfZGF0YSAqZGF0YSkKK3N0YXRpYyBpbnQgZXZlbnRfX3BhcnNlX2lkX3NhbXBsZShjb25zdCBldmVudF90ICpldmVudCwKKwkJCQkgIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24sCisJCQkJICBzdHJ1Y3Qgc2FtcGxlX2RhdGEgKnNhbXBsZSkKIHsKLQljb25zdCB1NjQgKmFycmF5ID0gZXZlbnQtPnNhbXBsZS5hcnJheTsKKwljb25zdCB1NjQgKmFycmF5OworCXU2NCB0eXBlOworCisJc2FtcGxlLT5jcHUgPSBzYW1wbGUtPnBpZCA9IHNhbXBsZS0+dGlkID0gLTE7CisJc2FtcGxlLT5zdHJlYW1faWQgPSBzYW1wbGUtPmlkID0gc2FtcGxlLT50aW1lID0gLTFVTEw7CisKKwlpZiAoIXNlc3Npb24tPnNhbXBsZV9pZF9hbGwpCisJCXJldHVybiAwOworCisJYXJyYXkgPSBldmVudC0+c2FtcGxlLmFycmF5OworCWFycmF5ICs9ICgoZXZlbnQtPmhlYWRlci5zaXplIC0KKwkJICAgc2l6ZW9mKGV2ZW50LT5oZWFkZXIpKSAvIHNpemVvZih1NjQpKSAtIDE7CisJdHlwZSA9IHNlc3Npb24tPnNhbXBsZV90eXBlOworCisJaWYgKHR5cGUgJiBQRVJGX1NBTVBMRV9DUFUpIHsKKwkJdTMyICpwID0gKHUzMiAqKWFycmF5OworCQlzYW1wbGUtPmNwdSA9ICpwOworCQlhcnJheS0tOworCX0KKworCWlmICh0eXBlICYgUEVSRl9TQU1QTEVfU1RSRUFNX0lEKSB7CisJCXNhbXBsZS0+c3RyZWFtX2lkID0gKmFycmF5OworCQlhcnJheS0tOworCX0KKworCWlmICh0eXBlICYgUEVSRl9TQU1QTEVfSUQpIHsKKwkJc2FtcGxlLT5pZCA9ICphcnJheTsKKwkJYXJyYXktLTsKKwl9CisKKwlpZiAodHlwZSAmIFBFUkZfU0FNUExFX1RJTUUpIHsKKwkJc2FtcGxlLT50aW1lID0gKmFycmF5OworCQlhcnJheS0tOworCX0KKworCWlmICh0eXBlICYgUEVSRl9TQU1QTEVfVElEKSB7CisJCXUzMiAqcCA9ICh1MzIgKilhcnJheTsKKwkJc2FtcGxlLT5waWQgPSBwWzBdOworCQlzYW1wbGUtPnRpZCA9IHBbMV07CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCBldmVudF9fcGFyc2Vfc2FtcGxlKGNvbnN0IGV2ZW50X3QgKmV2ZW50LCBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLAorCQkJc3RydWN0IHNhbXBsZV9kYXRhICpkYXRhKQoreworCWNvbnN0IHU2NCAqYXJyYXk7CisJdTY0IHR5cGU7CisKKwlpZiAoZXZlbnQtPmhlYWRlci50eXBlICE9IFBFUkZfUkVDT1JEX1NBTVBMRSkKKwkJcmV0dXJuIGV2ZW50X19wYXJzZV9pZF9zYW1wbGUoZXZlbnQsIHNlc3Npb24sIGRhdGEpOworCisJYXJyYXkgPSBldmVudC0+c2FtcGxlLmFycmF5OworCXR5cGUgPSBzZXNzaW9uLT5zYW1wbGVfdHlwZTsKIAogCWlmICh0eXBlICYgUEVSRl9TQU1QTEVfSVApIHsKIAkJZGF0YS0+aXAgPSBldmVudC0+aXAuaXA7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvZXZlbnQuaCBiL3Rvb2xzL3BlcmYvdXRpbC9ldmVudC5oCmluZGV4IDhlNzkwZGEuLjJiN2U5MTkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9ldmVudC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9ldmVudC5oCkBAIC04NSw2ICs4NSw3IEBACiB9OwogCiBlbnVtIHBlcmZfdXNlcl9ldmVudF90eXBlIHsgLyogYWJvdmUgYW55IHBvc3NpYmxlIGtlcm5lbCB0eXBlICovCisJUEVSRl9SRUNPUkRfVVNFUl9UWVBFX1NUQVJUCQk9IDY0LAogCVBFUkZfUkVDT1JEX0hFQURFUl9BVFRSCQkJPSA2NCwKIAlQRVJGX1JFQ09SRF9IRUFERVJfRVZFTlRfVFlQRQkJPSA2NSwKIAlQRVJGX1JFQ09SRF9IRUFERVJfVFJBQ0lOR19EQVRBCQk9IDY2LApAQCAtMTM1LDEyICsxMzYsMTUgQEAKIAogc3RydWN0IHBlcmZfc2Vzc2lvbjsKIAotdHlwZWRlZiBpbnQgKCpldmVudF9faGFuZGxlcl90KShldmVudF90ICpldmVudCwgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbik7Cit0eXBlZGVmIGludCAoKmV2ZW50X19oYW5kbGVyX3N5bnRoX3QpKGV2ZW50X3QgKmV2ZW50LCAKKwkJCQkgICAgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKTsKK3R5cGVkZWYgaW50ICgqZXZlbnRfX2hhbmRsZXJfdCkoZXZlbnRfdCAqZXZlbnQsIHN0cnVjdCBzYW1wbGVfZGF0YSAqc2FtcGxlLAorCQkJCXN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pOwogCiBpbnQgZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkKHBpZF90IHBpZCwgZXZlbnRfX2hhbmRsZXJfdCBwcm9jZXNzLAogCQkJICAgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKTsKLXZvaWQgZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkcyhldmVudF9faGFuZGxlcl90IHByb2Nlc3MsCi0JCQkgICAgICAgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbik7CitpbnQgZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkcyhldmVudF9faGFuZGxlcl90IHByb2Nlc3MsCisJCQkgICAgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKTsKIGludCBldmVudF9fc3ludGhlc2l6ZV9rZXJuZWxfbW1hcChldmVudF9faGFuZGxlcl90IHByb2Nlc3MsCiAJCQkJc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwKIAkJCQlzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSwKQEAgLTE1MCwxOCArMTU0LDI0IEBACiAJCQkgICAgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLAogCQkJICAgICAgc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUpOwogCi1pbnQgZXZlbnRfX3Byb2Nlc3NfY29tbShldmVudF90ICpzZWxmLCBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKTsKLWludCBldmVudF9fcHJvY2Vzc19sb3N0KGV2ZW50X3QgKnNlbGYsIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pOwotaW50IGV2ZW50X19wcm9jZXNzX21tYXAoZXZlbnRfdCAqc2VsZiwgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbik7Ci1pbnQgZXZlbnRfX3Byb2Nlc3NfdGFzayhldmVudF90ICpzZWxmLCBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKTsKLWludCBldmVudF9fcHJvY2VzcyhldmVudF90ICpldmVudCwgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbik7CitpbnQgZXZlbnRfX3Byb2Nlc3NfY29tbShldmVudF90ICpzZWxmLCBzdHJ1Y3Qgc2FtcGxlX2RhdGEgKnNhbXBsZSwKKwkJCXN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pOworaW50IGV2ZW50X19wcm9jZXNzX2xvc3QoZXZlbnRfdCAqc2VsZiwgc3RydWN0IHNhbXBsZV9kYXRhICpzYW1wbGUsCisJCQlzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKTsKK2ludCBldmVudF9fcHJvY2Vzc19tbWFwKGV2ZW50X3QgKnNlbGYsIHN0cnVjdCBzYW1wbGVfZGF0YSAqc2FtcGxlLAorCQkJc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbik7CitpbnQgZXZlbnRfX3Byb2Nlc3NfdGFzayhldmVudF90ICpzZWxmLCBzdHJ1Y3Qgc2FtcGxlX2RhdGEgKnNhbXBsZSwKKwkJCXN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pOworaW50IGV2ZW50X19wcm9jZXNzKGV2ZW50X3QgKmV2ZW50LCBzdHJ1Y3Qgc2FtcGxlX2RhdGEgKnNhbXBsZSwKKwkJICAgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbik7CiAKIHN0cnVjdCBhZGRyX2xvY2F0aW9uOwogaW50IGV2ZW50X19wcmVwcm9jZXNzX3NhbXBsZShjb25zdCBldmVudF90ICpzZWxmLCBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLAogCQkJICAgICBzdHJ1Y3QgYWRkcl9sb2NhdGlvbiAqYWwsIHN0cnVjdCBzYW1wbGVfZGF0YSAqZGF0YSwKIAkJCSAgICAgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcik7Ci1pbnQgZXZlbnRfX3BhcnNlX3NhbXBsZShjb25zdCBldmVudF90ICpldmVudCwgdTY0IHR5cGUsIHN0cnVjdCBzYW1wbGVfZGF0YSAqZGF0YSk7CitpbnQgZXZlbnRfX3BhcnNlX3NhbXBsZShjb25zdCBldmVudF90ICpldmVudCwgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwKKwkJCXN0cnVjdCBzYW1wbGVfZGF0YSAqc2FtcGxlKTsKIAotZXh0ZXJuIGNvbnN0IGNoYXIgKmV2ZW50X19uYW1lW107Citjb25zdCBjaGFyICpldmVudF9fZ2V0X2V2ZW50X25hbWUodW5zaWduZWQgaW50IGlkKTsKIAogI2VuZGlmIC8qIF9fUEVSRl9SRUNPUkRfSCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2V2c2VsLmMgYi90b29scy9wZXJmL3V0aWwvZXZzZWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTUyNjdlCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi91dGlsL2V2c2VsLmMKQEAgLTAsMCArMSwxODYgQEAKKyNpbmNsdWRlICJldnNlbC5oIgorI2luY2x1ZGUgIi4uL3BlcmYuaCIKKyNpbmNsdWRlICJ1dGlsLmgiCisjaW5jbHVkZSAiY3B1bWFwLmgiCisjaW5jbHVkZSAidGhyZWFkLmgiCisKKyNkZWZpbmUgRkQoZSwgeCwgeSkgKCooaW50ICopeHlhcnJheV9fZW50cnkoZS0+ZmQsIHgsIHkpKQorCitzdHJ1Y3QgcGVyZl9ldnNlbCAqcGVyZl9ldnNlbF9fbmV3KHUzMiB0eXBlLCB1NjQgY29uZmlnLCBpbnQgaWR4KQoreworCXN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCA9IHphbGxvYyhzaXplb2YoKmV2c2VsKSk7CisKKwlpZiAoZXZzZWwgIT0gTlVMTCkgeworCQlldnNlbC0+aWR4CSAgID0gaWR4OworCQlldnNlbC0+YXR0ci50eXBlICAgPSB0eXBlOworCQlldnNlbC0+YXR0ci5jb25maWcgPSBjb25maWc7CisJCUlOSVRfTElTVF9IRUFEKCZldnNlbC0+bm9kZSk7CisJfQorCisJcmV0dXJuIGV2c2VsOworfQorCitpbnQgcGVyZl9ldnNlbF9fYWxsb2NfZmQoc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsLCBpbnQgbmNwdXMsIGludCBudGhyZWFkcykKK3sKKwlldnNlbC0+ZmQgPSB4eWFycmF5X19uZXcobmNwdXMsIG50aHJlYWRzLCBzaXplb2YoaW50KSk7CisJcmV0dXJuIGV2c2VsLT5mZCAhPSBOVUxMID8gMCA6IC1FTk9NRU07Cit9CisKK2ludCBwZXJmX2V2c2VsX19hbGxvY19jb3VudHMoc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsLCBpbnQgbmNwdXMpCit7CisJZXZzZWwtPmNvdW50cyA9IHphbGxvYygoc2l6ZW9mKCpldnNlbC0+Y291bnRzKSArCisJCQkJKG5jcHVzICogc2l6ZW9mKHN0cnVjdCBwZXJmX2NvdW50c192YWx1ZXMpKSkpOworCXJldHVybiBldnNlbC0+Y291bnRzICE9IE5VTEwgPyAwIDogLUVOT01FTTsKK30KKwordm9pZCBwZXJmX2V2c2VsX19mcmVlX2ZkKHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCkKK3sKKwl4eWFycmF5X19kZWxldGUoZXZzZWwtPmZkKTsKKwlldnNlbC0+ZmQgPSBOVUxMOworfQorCit2b2lkIHBlcmZfZXZzZWxfX2Nsb3NlX2ZkKHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCwgaW50IG5jcHVzLCBpbnQgbnRocmVhZHMpCit7CisJaW50IGNwdSwgdGhyZWFkOworCisJZm9yIChjcHUgPSAwOyBjcHUgPCBuY3B1czsgY3B1KyspCisJCWZvciAodGhyZWFkID0gMDsgdGhyZWFkIDwgbnRocmVhZHM7ICsrdGhyZWFkKSB7CisJCQljbG9zZShGRChldnNlbCwgY3B1LCB0aHJlYWQpKTsKKwkJCUZEKGV2c2VsLCBjcHUsIHRocmVhZCkgPSAtMTsKKwkJfQorfQorCit2b2lkIHBlcmZfZXZzZWxfX2RlbGV0ZShzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwpCit7CisJYXNzZXJ0KGxpc3RfZW1wdHkoJmV2c2VsLT5ub2RlKSk7CisJeHlhcnJheV9fZGVsZXRlKGV2c2VsLT5mZCk7CisJZnJlZShldnNlbCk7Cit9CisKK2ludCBfX3BlcmZfZXZzZWxfX3JlYWRfb25fY3B1KHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCwKKwkJCSAgICAgIGludCBjcHUsIGludCB0aHJlYWQsIGJvb2wgc2NhbGUpCit7CisJc3RydWN0IHBlcmZfY291bnRzX3ZhbHVlcyBjb3VudDsKKwlzaXplX3QgbnYgPSBzY2FsZSA/IDMgOiAxOworCisJaWYgKEZEKGV2c2VsLCBjcHUsIHRocmVhZCkgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChldnNlbC0+Y291bnRzID09IE5VTEwgJiYgcGVyZl9ldnNlbF9fYWxsb2NfY291bnRzKGV2c2VsLCBjcHUgKyAxKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKHJlYWRuKEZEKGV2c2VsLCBjcHUsIHRocmVhZCksICZjb3VudCwgbnYgKiBzaXplb2YodTY0KSkgPCAwKQorCQlyZXR1cm4gLWVycm5vOworCisJaWYgKHNjYWxlKSB7CisJCWlmIChjb3VudC5ydW4gPT0gMCkKKwkJCWNvdW50LnZhbCA9IDA7CisJCWVsc2UgaWYgKGNvdW50LnJ1biA8IGNvdW50LmVuYSkKKwkJCWNvdW50LnZhbCA9ICh1NjQpKChkb3VibGUpY291bnQudmFsICogY291bnQuZW5hIC8gY291bnQucnVuICsgMC41KTsKKwl9IGVsc2UKKwkJY291bnQuZW5hID0gY291bnQucnVuID0gMDsKKworCWV2c2VsLT5jb3VudHMtPmNwdVtjcHVdID0gY291bnQ7CisJcmV0dXJuIDA7Cit9CisKK2ludCBfX3BlcmZfZXZzZWxfX3JlYWQoc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsLAorCQkgICAgICAgaW50IG5jcHVzLCBpbnQgbnRocmVhZHMsIGJvb2wgc2NhbGUpCit7CisJc2l6ZV90IG52ID0gc2NhbGUgPyAzIDogMTsKKwlpbnQgY3B1LCB0aHJlYWQ7CisJc3RydWN0IHBlcmZfY291bnRzX3ZhbHVlcyAqYWdnciA9ICZldnNlbC0+Y291bnRzLT5hZ2dyLCBjb3VudDsKKworCWFnZ3ItPnZhbCA9IDA7CisKKwlmb3IgKGNwdSA9IDA7IGNwdSA8IG5jcHVzOyBjcHUrKykgeworCQlmb3IgKHRocmVhZCA9IDA7IHRocmVhZCA8IG50aHJlYWRzOyB0aHJlYWQrKykgeworCQkJaWYgKEZEKGV2c2VsLCBjcHUsIHRocmVhZCkgPCAwKQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAocmVhZG4oRkQoZXZzZWwsIGNwdSwgdGhyZWFkKSwKKwkJCQkgICZjb3VudCwgbnYgKiBzaXplb2YodTY0KSkgPCAwKQorCQkJCXJldHVybiAtZXJybm87CisKKwkJCWFnZ3ItPnZhbCArPSBjb3VudC52YWw7CisJCQlpZiAoc2NhbGUpIHsKKwkJCQlhZ2dyLT5lbmEgKz0gY291bnQuZW5hOworCQkJCWFnZ3ItPnJ1biArPSBjb3VudC5ydW47CisJCQl9CisJCX0KKwl9CisKKwlldnNlbC0+Y291bnRzLT5zY2FsZWQgPSAwOworCWlmIChzY2FsZSkgeworCQlpZiAoYWdnci0+cnVuID09IDApIHsKKwkJCWV2c2VsLT5jb3VudHMtPnNjYWxlZCA9IC0xOworCQkJYWdnci0+dmFsID0gMDsKKwkJCXJldHVybiAwOworCQl9CisKKwkJaWYgKGFnZ3ItPnJ1biA8IGFnZ3ItPmVuYSkgeworCQkJZXZzZWwtPmNvdW50cy0+c2NhbGVkID0gMTsKKwkJCWFnZ3ItPnZhbCA9ICh1NjQpKChkb3VibGUpYWdnci0+dmFsICogYWdnci0+ZW5hIC8gYWdnci0+cnVuICsgMC41KTsKKwkJfQorCX0gZWxzZQorCQlhZ2dyLT5lbmEgPSBhZ2dyLT5ydW4gPSAwOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBwZXJmX2V2c2VsX19vcGVuX3Blcl9jcHUoc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsLCBzdHJ1Y3QgY3B1X21hcCAqY3B1cykKK3sKKwlpbnQgY3B1OworCisJaWYgKGV2c2VsLT5mZCA9PSBOVUxMICYmIHBlcmZfZXZzZWxfX2FsbG9jX2ZkKGV2c2VsLCBjcHVzLT5uciwgMSkgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlmb3IgKGNwdSA9IDA7IGNwdSA8IGNwdXMtPm5yOyBjcHUrKykgeworCQlGRChldnNlbCwgY3B1LCAwKSA9IHN5c19wZXJmX2V2ZW50X29wZW4oJmV2c2VsLT5hdHRyLCAtMSwKKwkJCQkJCQljcHVzLT5tYXBbY3B1XSwgLTEsIDApOworCQlpZiAoRkQoZXZzZWwsIGNwdSwgMCkgPCAwKQorCQkJZ290byBvdXRfY2xvc2U7CisJfQorCisJcmV0dXJuIDA7CisKK291dF9jbG9zZToKKwl3aGlsZSAoLS1jcHUgPj0gMCkgeworCQljbG9zZShGRChldnNlbCwgY3B1LCAwKSk7CisJCUZEKGV2c2VsLCBjcHUsIDApID0gLTE7CisJfQorCXJldHVybiAtMTsKK30KKworaW50IHBlcmZfZXZzZWxfX29wZW5fcGVyX3RocmVhZChzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwsIHN0cnVjdCB0aHJlYWRfbWFwICp0aHJlYWRzKQoreworCWludCB0aHJlYWQ7CisKKwlpZiAoZXZzZWwtPmZkID09IE5VTEwgJiYgcGVyZl9ldnNlbF9fYWxsb2NfZmQoZXZzZWwsIDEsIHRocmVhZHMtPm5yKSkKKwkJcmV0dXJuIC0xOworCisJZm9yICh0aHJlYWQgPSAwOyB0aHJlYWQgPCB0aHJlYWRzLT5ucjsgdGhyZWFkKyspIHsKKwkJRkQoZXZzZWwsIDAsIHRocmVhZCkgPSBzeXNfcGVyZl9ldmVudF9vcGVuKCZldnNlbC0+YXR0ciwKKwkJCQkJCQkgICB0aHJlYWRzLT5tYXBbdGhyZWFkXSwgLTEsIC0xLCAwKTsKKwkJaWYgKEZEKGV2c2VsLCAwLCB0aHJlYWQpIDwgMCkKKwkJCWdvdG8gb3V0X2Nsb3NlOworCX0KKworCXJldHVybiAwOworCitvdXRfY2xvc2U6CisJd2hpbGUgKC0tdGhyZWFkID49IDApIHsKKwkJY2xvc2UoRkQoZXZzZWwsIDAsIHRocmVhZCkpOworCQlGRChldnNlbCwgMCwgdGhyZWFkKSA9IC0xOworCX0KKwlyZXR1cm4gLTE7Cit9CisKK2ludCBwZXJmX2V2c2VsX19vcGVuKHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCwgCisJCSAgICAgc3RydWN0IGNwdV9tYXAgKmNwdXMsIHN0cnVjdCB0aHJlYWRfbWFwICp0aHJlYWRzKQoreworCWlmICh0aHJlYWRzID09IE5VTEwpCisJCXJldHVybiBwZXJmX2V2c2VsX19vcGVuX3Blcl9jcHUoZXZzZWwsIGNwdXMpOworCisJcmV0dXJuIHBlcmZfZXZzZWxfX29wZW5fcGVyX3RocmVhZChldnNlbCwgdGhyZWFkcyk7Cit9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvZXZzZWwuaCBiL3Rvb2xzL3BlcmYvdXRpbC9ldnNlbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwY2NkNjkKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3V0aWwvZXZzZWwuaApAQCAtMCwwICsxLDExNSBAQAorI2lmbmRlZiBfX1BFUkZfRVZTRUxfSAorI2RlZmluZSBfX1BFUkZfRVZTRUxfSCAxCisKKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oIgorI2luY2x1ZGUgInR5cGVzLmgiCisjaW5jbHVkZSAieHlhcnJheS5oIgorIAorc3RydWN0IHBlcmZfY291bnRzX3ZhbHVlcyB7CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJdTY0IHZhbDsKKwkJCXU2NCBlbmE7CisJCQl1NjQgcnVuOworCQl9OworCQl1NjQgdmFsdWVzWzNdOworCX07Cit9OworCitzdHJ1Y3QgcGVyZl9jb3VudHMgeworCXM4CQkgICAJICBzY2FsZWQ7CisJc3RydWN0IHBlcmZfY291bnRzX3ZhbHVlcyBhZ2dyOworCXN0cnVjdCBwZXJmX2NvdW50c192YWx1ZXMgY3B1W107Cit9OworCitzdHJ1Y3QgcGVyZl9ldnNlbCB7CisJc3RydWN0IGxpc3RfaGVhZAlub2RlOworCXN0cnVjdCBwZXJmX2V2ZW50X2F0dHIJYXR0cjsKKwljaGFyCQkJKmZpbHRlcjsKKwlzdHJ1Y3QgeHlhcnJheQkJKmZkOworCXN0cnVjdCBwZXJmX2NvdW50cwkqY291bnRzOworCWludAkJCWlkeDsKKwl2b2lkCQkJKnByaXY7Cit9OworCitzdHJ1Y3QgY3B1X21hcDsKK3N0cnVjdCB0aHJlYWRfbWFwOworCitzdHJ1Y3QgcGVyZl9ldnNlbCAqcGVyZl9ldnNlbF9fbmV3KHUzMiB0eXBlLCB1NjQgY29uZmlnLCBpbnQgaWR4KTsKK3ZvaWQgcGVyZl9ldnNlbF9fZGVsZXRlKHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCk7CisKK2ludCBwZXJmX2V2c2VsX19hbGxvY19mZChzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwsIGludCBuY3B1cywgaW50IG50aHJlYWRzKTsKK2ludCBwZXJmX2V2c2VsX19hbGxvY19jb3VudHMoc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsLCBpbnQgbmNwdXMpOwordm9pZCBwZXJmX2V2c2VsX19mcmVlX2ZkKHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCk7Cit2b2lkIHBlcmZfZXZzZWxfX2Nsb3NlX2ZkKHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCwgaW50IG5jcHVzLCBpbnQgbnRocmVhZHMpOworCitpbnQgcGVyZl9ldnNlbF9fb3Blbl9wZXJfY3B1KHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCwgc3RydWN0IGNwdV9tYXAgKmNwdXMpOworaW50IHBlcmZfZXZzZWxfX29wZW5fcGVyX3RocmVhZChzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwsIHN0cnVjdCB0aHJlYWRfbWFwICp0aHJlYWRzKTsKK2ludCBwZXJmX2V2c2VsX19vcGVuKHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCwgCisJCSAgICAgc3RydWN0IGNwdV9tYXAgKmNwdXMsIHN0cnVjdCB0aHJlYWRfbWFwICp0aHJlYWRzKTsKKworI2RlZmluZSBwZXJmX2V2c2VsX19tYXRjaChldnNlbCwgdCwgYykJCVwKKwkoZXZzZWwtPmF0dHIudHlwZSA9PSBQRVJGX1RZUEVfIyN0ICYmCVwKKwkgZXZzZWwtPmF0dHIuY29uZmlnID09IFBFUkZfQ09VTlRfIyNjKQorCitpbnQgX19wZXJmX2V2c2VsX19yZWFkX29uX2NwdShzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwsCisJCQkgICAgICBpbnQgY3B1LCBpbnQgdGhyZWFkLCBib29sIHNjYWxlKTsKKworLyoqCisgKiBwZXJmX2V2c2VsX19yZWFkX29uX2NwdSAtIFJlYWQgb3V0IHRoZSByZXN1bHRzIG9uIGEgQ1BVIGFuZCB0aHJlYWQKKyAqCisgKiBAZXZzZWwgLSBldmVudCBzZWxlY3RvciB0byByZWFkIHZhbHVlCisgKiBAY3B1IC0gQ1BVIG9mIGludGVyZXN0CisgKiBAdGhyZWFkIC0gdGhyZWFkIG9mIGludGVyZXN0CisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHBlcmZfZXZzZWxfX3JlYWRfb25fY3B1KHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCwKKwkJCQkJICBpbnQgY3B1LCBpbnQgdGhyZWFkKQoreworCXJldHVybiBfX3BlcmZfZXZzZWxfX3JlYWRfb25fY3B1KGV2c2VsLCBjcHUsIHRocmVhZCwgZmFsc2UpOworfQorCisvKioKKyAqIHBlcmZfZXZzZWxfX3JlYWRfb25fY3B1X3NjYWxlZCAtIFJlYWQgb3V0IHRoZSByZXN1bHRzIG9uIGEgQ1BVIGFuZCB0aHJlYWQsIHNjYWxlZAorICoKKyAqIEBldnNlbCAtIGV2ZW50IHNlbGVjdG9yIHRvIHJlYWQgdmFsdWUKKyAqIEBjcHUgLSBDUFUgb2YgaW50ZXJlc3QKKyAqIEB0aHJlYWQgLSB0aHJlYWQgb2YgaW50ZXJlc3QKKyAqLworc3RhdGljIGlubGluZSBpbnQgcGVyZl9ldnNlbF9fcmVhZF9vbl9jcHVfc2NhbGVkKHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCwKKwkJCQkJCSBpbnQgY3B1LCBpbnQgdGhyZWFkKQoreworCXJldHVybiBfX3BlcmZfZXZzZWxfX3JlYWRfb25fY3B1KGV2c2VsLCBjcHUsIHRocmVhZCwgdHJ1ZSk7Cit9CisKK2ludCBfX3BlcmZfZXZzZWxfX3JlYWQoc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsLCBpbnQgbmNwdXMsIGludCBudGhyZWFkcywKKwkJICAgICAgIGJvb2wgc2NhbGUpOworCisvKioKKyAqIHBlcmZfZXZzZWxfX3JlYWQgLSBSZWFkIHRoZSBhZ2dyZWdhdGUgcmVzdWx0cyBvbiBhbGwgQ1BVcworICoKKyAqIEBldnNlbCAtIGV2ZW50IHNlbGVjdG9yIHRvIHJlYWQgdmFsdWUKKyAqIEBuY3B1cyAtIE51bWJlciBvZiBjcHVzIGFmZmVjdGVkLCBmcm9tIHplcm8KKyAqIEBudGhyZWFkcyAtIE51bWJlciBvZiB0aHJlYWRzIGFmZmVjdGVkLCBmcm9tIHplcm8KKyAqLworc3RhdGljIGlubGluZSBpbnQgcGVyZl9ldnNlbF9fcmVhZChzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwsCisJCQkJICAgIGludCBuY3B1cywgaW50IG50aHJlYWRzKQoreworCXJldHVybiBfX3BlcmZfZXZzZWxfX3JlYWQoZXZzZWwsIG5jcHVzLCBudGhyZWFkcywgZmFsc2UpOworfQorCisvKioKKyAqIHBlcmZfZXZzZWxfX3JlYWRfc2NhbGVkIC0gUmVhZCB0aGUgYWdncmVnYXRlIHJlc3VsdHMgb24gYWxsIENQVXMsIHNjYWxlZAorICoKKyAqIEBldnNlbCAtIGV2ZW50IHNlbGVjdG9yIHRvIHJlYWQgdmFsdWUKKyAqIEBuY3B1cyAtIE51bWJlciBvZiBjcHVzIGFmZmVjdGVkLCBmcm9tIHplcm8KKyAqIEBudGhyZWFkcyAtIE51bWJlciBvZiB0aHJlYWRzIGFmZmVjdGVkLCBmcm9tIHplcm8KKyAqLworc3RhdGljIGlubGluZSBpbnQgcGVyZl9ldnNlbF9fcmVhZF9zY2FsZWQoc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsLAorCQkJCQkgIGludCBuY3B1cywgaW50IG50aHJlYWRzKQoreworCXJldHVybiBfX3BlcmZfZXZzZWxfX3JlYWQoZXZzZWwsIG5jcHVzLCBudGhyZWFkcywgdHJ1ZSk7Cit9CisKKyNlbmRpZiAvKiBfX1BFUkZfRVZTRUxfSCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2hlYWRlci5jIGIvdG9vbHMvcGVyZi91dGlsL2hlYWRlci5jCmluZGV4IDdjYmEwNTUuLjk4OWZhMmQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9oZWFkZXIuYworKysgYi90b29scy9wZXJmL3V0aWwvaGVhZGVyLmMKQEAgLTE1Miw2ICsxNTIsMTEgQEAKIAlzZXRfYml0KGZlYXQsIHNlbGYtPmFkZHNfZmVhdHVyZXMpOwogfQogCit2b2lkIHBlcmZfaGVhZGVyX19jbGVhcl9mZWF0KHN0cnVjdCBwZXJmX2hlYWRlciAqc2VsZiwgaW50IGZlYXQpCit7CisJY2xlYXJfYml0KGZlYXQsIHNlbGYtPmFkZHNfZmVhdHVyZXMpOworfQorCiBib29sIHBlcmZfaGVhZGVyX19oYXNfZmVhdChjb25zdCBzdHJ1Y3QgcGVyZl9oZWFkZXIgKnNlbGYsIGludCBmZWF0KQogewogCXJldHVybiB0ZXN0X2JpdChmZWF0LCBzZWxmLT5hZGRzX2ZlYXR1cmVzKTsKQEAgLTQzMyw4ICs0MzgsMTAgQEAKIAlpbnQgaWR4ID0gMCwgZXJyOwogCiAJc2Vzc2lvbiA9IGNvbnRhaW5lcl9vZihzZWxmLCBzdHJ1Y3QgcGVyZl9zZXNzaW9uLCBoZWFkZXIpOwotCWlmIChwZXJmX3Nlc3Npb25fX3JlYWRfYnVpbGRfaWRzKHNlc3Npb24sIHRydWUpKQotCQlwZXJmX2hlYWRlcl9fc2V0X2ZlYXQoc2VsZiwgSEVBREVSX0JVSUxEX0lEKTsKKworCWlmIChwZXJmX2hlYWRlcl9faGFzX2ZlYXQoc2VsZiwgSEVBREVSX0JVSUxEX0lEICYmCisJICAgICFwZXJmX3Nlc3Npb25fX3JlYWRfYnVpbGRfaWRzKHNlc3Npb24sIHRydWUpKSkKKwkJcGVyZl9oZWFkZXJfX2NsZWFyX2ZlYXQoc2VsZiwgSEVBREVSX0JVSUxEX0lEKTsKIAogCW5yX3NlY3Rpb25zID0gYml0bWFwX3dlaWdodChzZWxmLT5hZGRzX2ZlYXR1cmVzLCBIRUFERVJfRkVBVF9CSVRTKTsKIAlpZiAoIW5yX3NlY3Rpb25zKQpAQCAtNDU2LDcgKzQ2Myw3IEBACiAKIAkJLyogV3JpdGUgdHJhY2UgaW5mbyAqLwogCQl0cmFjZV9zZWMtPm9mZnNldCA9IGxzZWVrKGZkLCAwLCBTRUVLX0NVUik7Ci0JCXJlYWRfdHJhY2luZ19kYXRhKGZkLCBhdHRycywgbnJfY291bnRlcnMpOworCQlyZWFkX3RyYWNpbmdfZGF0YShmZCwgJmV2c2VsX2xpc3QpOwogCQl0cmFjZV9zZWMtPnNpemUgPSBsc2VlayhmZCwgMCwgU0VFS19DVVIpIC0gdHJhY2Vfc2VjLT5vZmZzZXQ7CiAJfQogCkBAIC01OTksNyArNjA2LDcgQEAKIHN0YXRpYyBpbnQgcGVyZl9oZWFkZXJfX2dldGJ1ZmZlcjY0KHN0cnVjdCBwZXJmX2hlYWRlciAqc2VsZiwKIAkJCQkgICAgaW50IGZkLCB2b2lkICpidWYsIHNpemVfdCBzaXplKQogewotCWlmIChkb19yZWFkKGZkLCBidWYsIHNpemUpIDw9IDApCisJaWYgKHJlYWRuKGZkLCBidWYsIHNpemUpIDw9IDApCiAJCXJldHVybiAtMTsKIAogCWlmIChzZWxmLT5uZWVkc19zd2FwKQpAQCAtNjU1LDcgKzY2Miw3IEBACiB7CiAJbHNlZWsoZmQsIDAsIFNFRUtfU0VUKTsKIAotCWlmIChkb19yZWFkKGZkLCBzZWxmLCBzaXplb2YoKnNlbGYpKSA8PSAwIHx8CisJaWYgKHJlYWRuKGZkLCBzZWxmLCBzaXplb2YoKnNlbGYpKSA8PSAwIHx8CiAJICAgIG1lbWNtcCgmc2VsZi0+bWFnaWMsIF9fcGVyZl9tYWdpYywgc2l6ZW9mKHNlbGYtPm1hZ2ljKSkpCiAJCXJldHVybiAtMTsKIApAQCAtODE2LDcgKzgyMyw3IEBACiAJCQkJICAgICAgIHN0cnVjdCBwZXJmX2hlYWRlciAqcGgsIGludCBmZCwKIAkJCQkgICAgICAgYm9vbCByZXBpcGUpCiB7Ci0JaWYgKGRvX3JlYWQoZmQsIHNlbGYsIHNpemVvZigqc2VsZikpIDw9IDAgfHwKKwlpZiAocmVhZG4oZmQsIHNlbGYsIHNpemVvZigqc2VsZikpIDw9IDAgfHwKIAkgICAgbWVtY21wKCZzZWxmLT5tYWdpYywgX19wZXJmX21hZ2ljLCBzaXplb2Yoc2VsZi0+bWFnaWMpKSkKIAkJcmV0dXJuIC0xOwogCkBAIC05NDEsNiArOTQ4LDI0IEBACiAJcmV0dXJuIHR5cGU7CiB9CiAKK2Jvb2wgcGVyZl9oZWFkZXJfX3NhbXBsZV9pZF9hbGwoY29uc3Qgc3RydWN0IHBlcmZfaGVhZGVyICpoZWFkZXIpCit7CisJYm9vbCB2YWx1ZSA9IGZhbHNlLCBmaXJzdCA9IHRydWU7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaGVhZGVyLT5hdHRyczsgaSsrKSB7CisJCXN0cnVjdCBwZXJmX2hlYWRlcl9hdHRyICphdHRyID0gaGVhZGVyLT5hdHRyW2ldOworCisJCWlmIChmaXJzdCkgeworCQkJdmFsdWUgPSBhdHRyLT5hdHRyLnNhbXBsZV9pZF9hbGw7CisJCQlmaXJzdCA9IGZhbHNlOworCQl9IGVsc2UgaWYgKHZhbHVlICE9IGF0dHItPmF0dHIuc2FtcGxlX2lkX2FsbCkKKwkJCWRpZSgibm9uIG1hdGNoaW5nIHNhbXBsZV9pZF9hbGwiKTsKKwl9CisKKwlyZXR1cm4gdmFsdWU7Cit9CisKIHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKgogcGVyZl9oZWFkZXJfX2ZpbmRfYXR0cih1NjQgaWQsIHN0cnVjdCBwZXJmX2hlYWRlciAqaGVhZGVyKQogewpAQCAtOTg3LDIxICsxMDEyLDIzIEBACiAKIAlldiA9IG1hbGxvYyhzaXplKTsKIAorCWlmIChldiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwogCWV2LT5hdHRyLmF0dHIgPSAqYXR0cjsKIAltZW1jcHkoZXYtPmF0dHIuaWQsIGlkLCBpZHMgKiBzaXplb2YodTY0KSk7CiAKIAlldi0+YXR0ci5oZWFkZXIudHlwZSA9IFBFUkZfUkVDT1JEX0hFQURFUl9BVFRSOwogCWV2LT5hdHRyLmhlYWRlci5zaXplID0gc2l6ZTsKIAotCWVyciA9IHByb2Nlc3MoZXYsIHNlc3Npb24pOworCWVyciA9IHByb2Nlc3MoZXYsIE5VTEwsIHNlc3Npb24pOwogCiAJZnJlZShldik7CiAKIAlyZXR1cm4gZXJyOwogfQogCi1pbnQgZXZlbnRfX3N5bnRoZXNpemVfYXR0cnMoc3RydWN0IHBlcmZfaGVhZGVyICpzZWxmLAotCQkJICAgIGV2ZW50X19oYW5kbGVyX3QgcHJvY2VzcywKK2ludCBldmVudF9fc3ludGhlc2l6ZV9hdHRycyhzdHJ1Y3QgcGVyZl9oZWFkZXIgKnNlbGYsIGV2ZW50X19oYW5kbGVyX3QgcHJvY2VzcywKIAkJCSAgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQogewogCXN0cnVjdCBwZXJmX2hlYWRlcl9hdHRyCSphdHRyOwpAQCAtMTA3MSw3ICsxMDk4LDcgQEAKIAlldi5ldmVudF90eXBlLmhlYWRlci5zaXplID0gc2l6ZW9mKGV2LmV2ZW50X3R5cGUpIC0KIAkJKHNpemVvZihldi5ldmVudF90eXBlLmV2ZW50X3R5cGUubmFtZSkgLSBzaXplKTsKIAotCWVyciA9IHByb2Nlc3MoJmV2LCBzZXNzaW9uKTsKKwllcnIgPSBwcm9jZXNzKCZldiwgTlVMTCwgc2Vzc2lvbik7CiAKIAlyZXR1cm4gZXJyOwogfQpAQCAtMTEwNiw4ICsxMTMzLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGV2ZW50X19zeW50aGVzaXplX3RyYWNpbmdfZGF0YShpbnQgZmQsIHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKnBhdHRycywKLQkJCQkgICBpbnQgbmJfZXZlbnRzLAoraW50IGV2ZW50X19zeW50aGVzaXplX3RyYWNpbmdfZGF0YShpbnQgZmQsIHN0cnVjdCBsaXN0X2hlYWQgKnBhdHRycywKIAkJCQkgICBldmVudF9faGFuZGxlcl90IHByb2Nlc3MsCiAJCQkJICAgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiBfX3VudXNlZCkKIHsKQEAgLTExMTgsNyArMTE0NCw3IEBACiAJbWVtc2V0KCZldiwgMCwgc2l6ZW9mKGV2KSk7CiAKIAlldi50cmFjaW5nX2RhdGEuaGVhZGVyLnR5cGUgPSBQRVJGX1JFQ09SRF9IRUFERVJfVFJBQ0lOR19EQVRBOwotCXNpemUgPSByZWFkX3RyYWNpbmdfZGF0YV9zaXplKGZkLCBwYXR0cnMsIG5iX2V2ZW50cyk7CisJc2l6ZSA9IHJlYWRfdHJhY2luZ19kYXRhX3NpemUoZmQsIHBhdHRycyk7CiAJaWYgKHNpemUgPD0gMCkKIAkJcmV0dXJuIHNpemU7CiAJYWxpZ25lZF9zaXplID0gQUxJR04oc2l6ZSwgc2l6ZW9mKHU2NCkpOwpAQCAtMTEyNiw5ICsxMTUyLDkgQEAKIAlldi50cmFjaW5nX2RhdGEuaGVhZGVyLnNpemUgPSBzaXplb2YoZXYudHJhY2luZ19kYXRhKTsKIAlldi50cmFjaW5nX2RhdGEuc2l6ZSA9IGFsaWduZWRfc2l6ZTsKIAotCXByb2Nlc3MoJmV2LCBzZXNzaW9uKTsKKwlwcm9jZXNzKCZldiwgTlVMTCwgc2Vzc2lvbik7CiAKLQllcnIgPSByZWFkX3RyYWNpbmdfZGF0YShmZCwgcGF0dHJzLCBuYl9ldmVudHMpOworCWVyciA9IHJlYWRfdHJhY2luZ19kYXRhKGZkLCBwYXR0cnMpOwogCXdyaXRlX3BhZGRlZChmZCwgTlVMTCwgMCwgcGFkZGluZyk7CiAKIAlyZXR1cm4gYWxpZ25lZF9zaXplOwpAQCAtMTE4Niw3ICsxMjEyLDcgQEAKIAlldi5idWlsZF9pZC5oZWFkZXIuc2l6ZSA9IHNpemVvZihldi5idWlsZF9pZCkgKyBsZW47CiAJbWVtY3B5KCZldi5idWlsZF9pZC5maWxlbmFtZSwgcG9zLT5sb25nX25hbWUsIHBvcy0+bG9uZ19uYW1lX2xlbik7CiAKLQllcnIgPSBwcm9jZXNzKCZldiwgc2Vzc2lvbik7CisJZXJyID0gcHJvY2VzcygmZXYsIE5VTEwsIHNlc3Npb24pOwogCiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9oZWFkZXIuaCBiL3Rvb2xzL3BlcmYvdXRpbC9oZWFkZXIuaAppbmRleCA0MDJhYzI0Li4zM2YxNmJlIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvaGVhZGVyLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL2hlYWRlci5oCkBAIC04MSw5ICs4MSwxMSBAQAogaW50IHBlcmZfaGVhZGVyX2F0dHJfX2FkZF9pZChzdHJ1Y3QgcGVyZl9oZWFkZXJfYXR0ciAqc2VsZiwgdTY0IGlkKTsKIAogdTY0IHBlcmZfaGVhZGVyX19zYW1wbGVfdHlwZShzdHJ1Y3QgcGVyZl9oZWFkZXIgKmhlYWRlcik7Citib29sIHBlcmZfaGVhZGVyX19zYW1wbGVfaWRfYWxsKGNvbnN0IHN0cnVjdCBwZXJmX2hlYWRlciAqaGVhZGVyKTsKIHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKgogcGVyZl9oZWFkZXJfX2ZpbmRfYXR0cih1NjQgaWQsIHN0cnVjdCBwZXJmX2hlYWRlciAqaGVhZGVyKTsKIHZvaWQgcGVyZl9oZWFkZXJfX3NldF9mZWF0KHN0cnVjdCBwZXJmX2hlYWRlciAqc2VsZiwgaW50IGZlYXQpOwordm9pZCBwZXJmX2hlYWRlcl9fY2xlYXJfZmVhdChzdHJ1Y3QgcGVyZl9oZWFkZXIgKnNlbGYsIGludCBmZWF0KTsKIGJvb2wgcGVyZl9oZWFkZXJfX2hhc19mZWF0KGNvbnN0IHN0cnVjdCBwZXJmX2hlYWRlciAqc2VsZiwgaW50IGZlYXQpOwogCiBpbnQgcGVyZl9oZWFkZXJfX3Byb2Nlc3Nfc2VjdGlvbnMoc3RydWN0IHBlcmZfaGVhZGVyICpzZWxmLCBpbnQgZmQsCkBAIC0xMTEsOCArMTEzLDcgQEAKIGludCBldmVudF9fcHJvY2Vzc19ldmVudF90eXBlKGV2ZW50X3QgKnNlbGYsCiAJCQkgICAgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKTsKIAotaW50IGV2ZW50X19zeW50aGVzaXplX3RyYWNpbmdfZGF0YShpbnQgZmQsIHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKnBhdHRycywKLQkJCQkgICBpbnQgbmJfZXZlbnRzLAoraW50IGV2ZW50X19zeW50aGVzaXplX3RyYWNpbmdfZGF0YShpbnQgZmQsIHN0cnVjdCBsaXN0X2hlYWQgKnBhdHRycywKIAkJCQkgICBldmVudF9faGFuZGxlcl90IHByb2Nlc3MsCiAJCQkJICAgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbik7CiBpbnQgZXZlbnRfX3Byb2Nlc3NfdHJhY2luZ19kYXRhKGV2ZW50X3QgKnNlbGYsCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvaGlzdC5jIGIvdG9vbHMvcGVyZi91dGlsL2hpc3QuYwppbmRleCA3NmJjYzM1Yy4uYzc0OWJhNiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2hpc3QuYworKysgYi90b29scy9wZXJmL3V0aWwvaGlzdC5jCkBAIC0xMDkyLDYgKzEwOTIsMTIgQEAKIAlGSUxFICpmaWxlOwogCWludCBlcnIgPSAwOwogCXU2NCBsZW47CisJY2hhciBzeW1mc19maWxlbmFtZVtQQVRIX01BWF07CisKKwlpZiAoZmlsZW5hbWUpIHsKKwkJc25wcmludGYoc3ltZnNfZmlsZW5hbWUsIHNpemVvZihzeW1mc19maWxlbmFtZSksICIlcyVzIiwKKwkJCSBzeW1ib2xfY29uZi5zeW1mcywgZmlsZW5hbWUpOworCX0KIAogCWlmIChmaWxlbmFtZSA9PSBOVUxMKSB7CiAJCWlmIChkc28tPmhhc19idWlsZF9pZCkgewpAQCAtMTEwMCw5ICsxMTA2LDkgQEAKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAJCWdvdG8gZmFsbGJhY2s7Ci0JfSBlbHNlIGlmIChyZWFkbGluayhmaWxlbmFtZSwgY29tbWFuZCwgc2l6ZW9mKGNvbW1hbmQpKSA8IDAgfHwKKwl9IGVsc2UgaWYgKHJlYWRsaW5rKHN5bWZzX2ZpbGVuYW1lLCBjb21tYW5kLCBzaXplb2YoY29tbWFuZCkpIDwgMCB8fAogCQkgICBzdHJzdHIoY29tbWFuZCwgIltrZXJuZWwua2FsbHN5bXNdIikgfHwKLQkJICAgYWNjZXNzKGZpbGVuYW1lLCBSX09LKSkgeworCQkgICBhY2Nlc3Moc3ltZnNfZmlsZW5hbWUsIFJfT0spKSB7CiAJCWZyZWUoZmlsZW5hbWUpOwogZmFsbGJhY2s6CiAJCS8qCkBAIC0xMTExLDYgKzExMTcsOCBAQAogCQkgKiBEU08gaXMgdGhlIHNhbWUgYXMgd2hlbiAncGVyZiByZWNvcmQnIHJhbi4KIAkJICovCiAJCWZpbGVuYW1lID0gZHNvLT5sb25nX25hbWU7CisJCXNucHJpbnRmKHN5bWZzX2ZpbGVuYW1lLCBzaXplb2Yoc3ltZnNfZmlsZW5hbWUpLCAiJXMlcyIsCisJCQkgc3ltYm9sX2NvbmYuc3ltZnMsIGZpbGVuYW1lKTsKIAkJZnJlZV9maWxlbmFtZSA9IGZhbHNlOwogCX0KIApAQCAtMTEzNyw3ICsxMTQ1LDcgQEAKIAkJICJvYmpkdW1wIC0tc3RhcnQtYWRkcmVzcz0weCUwMTZMeCAtLXN0b3AtYWRkcmVzcz0weCUwMTZMeCAtZFMgLUMgJXN8Z3JlcCAtdiAlc3xleHBhbmQiLAogCQkgbWFwX19yaXBfMm9iamR1bXAobWFwLCBzeW0tPnN0YXJ0KSwKIAkJIG1hcF9fcmlwXzJvYmpkdW1wKG1hcCwgc3ltLT5lbmQpLAotCQkgZmlsZW5hbWUsIGZpbGVuYW1lKTsKKwkJIHN5bWZzX2ZpbGVuYW1lLCBmaWxlbmFtZSk7CiAKIAlwcl9kZWJ1ZygiRXhlY3V0aW5nOiAlc1xuIiwgY29tbWFuZCk7CiAKQEAgLTExNjgsMTAgKzExNzYsMTMgQEAKIAlzaXplX3QgcmV0ID0gMDsKIAogCWZvciAoaSA9IDA7IGkgPCBQRVJGX1JFQ09SRF9IRUFERVJfTUFYOyArK2kpIHsKLQkJaWYgKCFldmVudF9fbmFtZVtpXSkKKwkJY29uc3QgY2hhciAqbmFtZSA9IGV2ZW50X19nZXRfZXZlbnRfbmFtZShpKTsKKworCQlpZiAoIXN0cmNtcChuYW1lLCAiVU5LTk9XTiIpKQogCQkJY29udGludWU7Ci0JCXJldCArPSBmcHJpbnRmKGZwLCAiJTEwcyBldmVudHM6ICUxMGRcbiIsCi0JCQkgICAgICAgZXZlbnRfX25hbWVbaV0sIHNlbGYtPnN0YXRzLm5yX2V2ZW50c1tpXSk7CisKKwkJcmV0ICs9IGZwcmludGYoZnAsICIlMTZzIGV2ZW50czogJTEwZFxuIiwgbmFtZSwKKwkJCSAgICAgICBzZWxmLT5zdGF0cy5ucl9ldmVudHNbaV0pOwogCX0KIAogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvaGlzdC5oIGIvdG9vbHMvcGVyZi91dGlsL2hpc3QuaAppbmRleCA1ODdkMzc1Li5lZTc4OTg1IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvaGlzdC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9oaXN0LmgKQEAgLTUyLDggKzUyLDEwIEBACiBzdHJ1Y3QgZXZlbnRzX3N0YXRzIHsKIAl1NjQgdG90YWxfcGVyaW9kOwogCXU2NCB0b3RhbF9sb3N0OworCXU2NCB0b3RhbF9pbnZhbGlkX2NoYWluczsKIAl1MzIgbnJfZXZlbnRzW1BFUkZfUkVDT1JEX0hFQURFUl9NQVhdOwogCXUzMiBucl91bmtub3duX2V2ZW50czsKKwl1MzIgbnJfaW52YWxpZF9jaGFpbnM7CiB9OwogCiBlbnVtIGhpc3RfY29sdW1uIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmggYi90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjZmZkNWUKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oCkBAIC0wLDAgKzEsOSBAQAorCisjaWZuZGVmIFBFUkZfQ1BVRkVBVFVSRV9ICisjZGVmaW5lIFBFUkZfQ1BVRkVBVFVSRV9ICisKKy8qIGNwdWZlYXR1cmUuaCAuLi4gZHVtbXkgaGVhZGVyIGZpbGUgZm9yIGluY2x1ZGluZyBhcmNoL3g4Ni9saWIvbWVtY3B5XzY0LlMgKi8KKworI2RlZmluZSBYODZfRkVBVFVSRV9SRVBfR09PRCAwCisKKyNlbmRpZgkvKiBQRVJGX0NQVUZFQVRVUkVfSCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2luY2x1ZGUvYXNtL2R3YXJmMi5oIGIvdG9vbHMvcGVyZi91dGlsL2luY2x1ZGUvYXNtL2R3YXJmMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiNDE5OGUKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9hc20vZHdhcmYyLmgKQEAgLTAsMCArMSwxMSBAQAorCisjaWZuZGVmIFBFUkZfRFdBUkYyX0gKKyNkZWZpbmUgUEVSRl9EV0FSRjJfSAorCisvKiBkd2FyZjIuaCAuLi4gZHVtbXkgaGVhZGVyIGZpbGUgZm9yIGluY2x1ZGluZyBhcmNoL3g4Ni9saWIvbWVtY3B5XzY0LlMgKi8KKworI2RlZmluZSBDRklfU1RBUlRQUk9DCisjZGVmaW5lIENGSV9FTkRQUk9DCisKKyNlbmRpZgkvKiBQRVJGX0RXQVJGMl9IICovCisKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9pbmNsdWRlL2xpbnV4L2JpdG9wcy5oIGIvdG9vbHMvcGVyZi91dGlsL2luY2x1ZGUvbGludXgvYml0b3BzLmgKaW5kZXggYmI0YWMyZS4uOGJlMGI5NiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2luY2x1ZGUvbGludXgvYml0b3BzLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL2luY2x1ZGUvbGludXgvYml0b3BzLmgKQEAgLTEzLDYgKzEzLDExIEBACiAJYWRkcltuciAvIEJJVFNfUEVSX0xPTkddIHw9IDFVTCA8PCAobnIgJSBCSVRTX1BFUl9MT05HKTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX2JpdChpbnQgbnIsIHVuc2lnbmVkIGxvbmcgKmFkZHIpCit7CisJYWRkcltuciAvIEJJVFNfUEVSX0xPTkddICY9IH4oMVVMIDw8IChuciAlIEJJVFNfUEVSX0xPTkcpKTsKK30KKwogc3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgdGVzdF9iaXQodW5zaWduZWQgaW50IG5yLCBjb25zdCB1bnNpZ25lZCBsb25nICphZGRyKQogewogCXJldHVybiAoKDFVTCA8PCAobnIgJSBCSVRTX1BFUl9MT05HKSkgJgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2luY2x1ZGUvbGludXgvbGlua2FnZS5oIGIvdG9vbHMvcGVyZi91dGlsL2luY2x1ZGUvbGludXgvbGlua2FnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2Mzg3Y2YKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9saW51eC9saW5rYWdlLmgKQEAgLTAsMCArMSwxMyBAQAorCisjaWZuZGVmIFBFUkZfTElOVVhfTElOS0FHRV9IXworI2RlZmluZSBQRVJGX0xJTlVYX0xJTktBR0VfSF8KKworLyogbGlua2FnZS5oIC4uLiBmb3IgaW5jbHVkaW5nIGFyY2gveDg2L2xpYi9tZW1jcHlfNjQuUyAqLworCisjZGVmaW5lIEVOVFJZKG5hbWUpCQkJCVwKKwkuZ2xvYmwgbmFtZTsJCQkJXAorCW5hbWU6CisKKyNkZWZpbmUgRU5EUFJPQyhuYW1lKQorCisjZW5kaWYJLyogUEVSRl9MSU5VWF9MSU5LQUdFX0hfICovCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvcGFyc2UtZXZlbnRzLmMgYi90b29scy9wZXJmL3V0aWwvcGFyc2UtZXZlbnRzLmMKaW5kZXggNGFmNWJkNS4uNjQ5MDgzZiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3BhcnNlLWV2ZW50cy5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1ldmVudHMuYwpAQCAtMSw2ICsxLDcgQEAKICNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2xpbnV4L2h3X2JyZWFrcG9pbnQuaCIKICNpbmNsdWRlICJ1dGlsLmgiCiAjaW5jbHVkZSAiLi4vcGVyZi5oIgorI2luY2x1ZGUgImV2c2VsLmgiCiAjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgogI2luY2x1ZGUgInBhcnNlLWV2ZW50cy5oIgogI2luY2x1ZGUgImV4ZWNfY21kLmgiCkBAIC0xMiw4ICsxMyw3IEBACiAKIGludAkJCQlucl9jb3VudGVyczsKIAotc3RydWN0IHBlcmZfZXZlbnRfYXR0cgkJYXR0cnNbTUFYX0NPVU5URVJTXTsKLWNoYXIJCQkJKmZpbHRlcnNbTUFYX0NPVU5URVJTXTsKK0xJU1RfSEVBRChldnNlbF9saXN0KTsKIAogc3RydWN0IGV2ZW50X3N5bWJvbCB7CiAJdTgJCXR5cGU7CkBAIC0yNjYsMTAgKzI2NiwxMCBAQAogCXJldHVybiBuYW1lOwogfQogCi1jb25zdCBjaGFyICpldmVudF9uYW1lKGludCBjb3VudGVyKQorY29uc3QgY2hhciAqZXZlbnRfbmFtZShzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwpCiB7Ci0JdTY0IGNvbmZpZyA9IGF0dHJzW2NvdW50ZXJdLmNvbmZpZzsKLQlpbnQgdHlwZSA9IGF0dHJzW2NvdW50ZXJdLnR5cGU7CisJdTY0IGNvbmZpZyA9IGV2c2VsLT5hdHRyLmNvbmZpZzsKKwlpbnQgdHlwZSA9IGV2c2VsLT5hdHRyLnR5cGU7CiAKIAlyZXR1cm4gX19ldmVudF9uYW1lKHR5cGUsIGNvbmZpZyk7CiB9CkBAIC00MzQsNyArNDM0LDcgQEAKIAlpZCA9IGF0b2xsKGlkX2J1Zik7CiAJYXR0ci0+Y29uZmlnID0gaWQ7CiAJYXR0ci0+dHlwZSA9IFBFUkZfVFlQRV9UUkFDRVBPSU5UOwotCSpzdHJwID0gZXZ0X25hbWUgKyBldnRfbGVuZ3RoOworCSpzdHJwICs9IHN0cmxlbihzeXNfbmFtZSkgKyBldnRfbGVuZ3RoICsgMTsgLyogKyAxIGZvciB0aGUgJzonICovCiAKIAlhdHRyLT5zYW1wbGVfdHlwZSB8PSBQRVJGX1NBTVBMRV9SQVc7CiAJYXR0ci0+c2FtcGxlX3R5cGUgfD0gUEVSRl9TQU1QTEVfVElNRTsKQEAgLTQ5NSw3ICs0OTUsNyBAQAogCQkJCSAgICBzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyICphdHRyKQogewogCWNvbnN0IGNoYXIgKmV2dF9uYW1lOwotCWNoYXIgKmZsYWdzOworCWNoYXIgKmZsYWdzID0gTlVMTCwgKmNvbW1hX2xvYzsKIAljaGFyIHN5c19uYW1lW01BWF9FVkVOVF9MRU5HVEhdOwogCXVuc2lnbmVkIGludCBzeXNfbGVuZ3RoLCBldnRfbGVuZ3RoOwogCkBAIC01MTQsNiArNTE0LDExIEBACiAJc3lzX25hbWVbc3lzX2xlbmd0aF0gPSAnXDAnOwogCWV2dF9uYW1lID0gZXZ0X25hbWUgKyAxOwogCisJY29tbWFfbG9jID0gc3RyY2hyKGV2dF9uYW1lLCAnLCcpOworCWlmIChjb21tYV9sb2MpIHsKKwkJLyogdGFrZSB0aGUgZXZlbnQgbmFtZSB1cCB0byB0aGUgY29tbWEgKi8KKwkJZXZ0X25hbWUgPSBzdHJuZHVwKGV2dF9uYW1lLCBjb21tYV9sb2MgLSBldnRfbmFtZSk7CisJfQogCWZsYWdzID0gc3RyY2hyKGV2dF9uYW1lLCAnOicpOwogCWlmIChmbGFncykgewogCQkvKiBzcGxpdCBpdCBvdXQ6ICovCkBAIC01MjQsOSArNTI5LDggQEAKIAlldnRfbGVuZ3RoID0gc3RybGVuKGV2dF9uYW1lKTsKIAlpZiAoZXZ0X2xlbmd0aCA+PSBNQVhfRVZFTlRfTEVOR1RIKQogCQlyZXR1cm4gRVZUX0ZBSUxFRDsKLQogCWlmIChzdHJwYnJrKGV2dF9uYW1lLCAiKj8iKSkgewotCQkqc3RycCA9IGV2dF9uYW1lICsgZXZ0X2xlbmd0aDsKKwkJKnN0cnAgKz0gc3RybGVuKHN5c19uYW1lKSArIGV2dF9sZW5ndGg7CiAJCXJldHVybiBwYXJzZV9tdWx0aXBsZV90cmFjZXBvaW50X2V2ZW50KHN5c19uYW1lLCBldnRfbmFtZSwKIAkJCQkJCSAgICAgICBmbGFncyk7CiAJfSBlbHNlCkBAIC04MTAsOSArODE0LDYgQEAKIAkJCXJldHVybiAtMTsKIAogCWZvciAoOzspIHsKLQkJaWYgKG5yX2NvdW50ZXJzID09IE1BWF9DT1VOVEVSUykKLQkJCXJldHVybiAtMTsKLQogCQltZW1zZXQoJmF0dHIsIDAsIHNpemVvZihhdHRyKSk7CiAJCXJldCA9IHBhcnNlX2V2ZW50X3N5bWJvbHMoJnN0ciwgJmF0dHIpOwogCQlpZiAocmV0ID09IEVWVF9GQUlMRUQpCkBAIC04MjIsOCArODIzLDEzIEBACiAJCQlyZXR1cm4gLTE7CiAKIAkJaWYgKHJldCAhPSBFVlRfSEFORExFRF9BTEwpIHsKLQkJCWF0dHJzW25yX2NvdW50ZXJzXSA9IGF0dHI7Ci0JCQlucl9jb3VudGVycysrOworCQkJc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsOworCQkJZXZzZWwgPSBwZXJmX2V2c2VsX19uZXcoYXR0ci50eXBlLCBhdHRyLmNvbmZpZywKKwkJCQkJCW5yX2NvdW50ZXJzKTsKKwkJCWlmIChldnNlbCA9PSBOVUxMKQorCQkJCXJldHVybiAtMTsKKwkJCWxpc3RfYWRkX3RhaWwoJmV2c2VsLT5ub2RlLCAmZXZzZWxfbGlzdCk7CisJCQkrK25yX2NvdW50ZXJzOwogCQl9CiAKIAkJaWYgKCpzdHIgPT0gMCkKQEAgLTg0MCwyMSArODQ2LDIyIEBACiBpbnQgcGFyc2VfZmlsdGVyKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCBfX3VzZWQsIGNvbnN0IGNoYXIgKnN0ciwKIAkJIGludCB1bnNldCBfX3VzZWQpCiB7Ci0JaW50IGkgPSBucl9jb3VudGVycyAtIDE7Ci0JaW50IGxlbiA9IHN0cmxlbihzdHIpOworCXN0cnVjdCBwZXJmX2V2c2VsICpsYXN0ID0gTlVMTDsKIAotCWlmIChpIDwgMCB8fCBhdHRyc1tpXS50eXBlICE9IFBFUkZfVFlQRV9UUkFDRVBPSU5UKSB7CisJaWYgKCFsaXN0X2VtcHR5KCZldnNlbF9saXN0KSkKKwkJbGFzdCA9IGxpc3RfZW50cnkoZXZzZWxfbGlzdC5wcmV2LCBzdHJ1Y3QgcGVyZl9ldnNlbCwgbm9kZSk7CisKKwlpZiAobGFzdCA9PSBOVUxMIHx8IGxhc3QtPmF0dHIudHlwZSAhPSBQRVJGX1RZUEVfVFJBQ0VQT0lOVCkgewogCQlmcHJpbnRmKHN0ZGVyciwKIAkJCSItRiBvcHRpb24gc2hvdWxkIGZvbGxvdyBhIC1lIHRyYWNlcG9pbnQgb3B0aW9uXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIAotCWZpbHRlcnNbaV0gPSBtYWxsb2MobGVuICsgMSk7Ci0JaWYgKCFmaWx0ZXJzW2ldKSB7CisJbGFzdC0+ZmlsdGVyID0gc3RyZHVwKHN0cik7CisJaWYgKGxhc3QtPmZpbHRlciA9PSBOVUxMKSB7CiAJCWZwcmludGYoc3RkZXJyLCAibm90IGVub3VnaCBtZW1vcnkgdG8gaG9sZCBmaWx0ZXIgc3RyaW5nXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KLQlzdHJjcHkoZmlsdGVyc1tpXSwgc3RyKTsKIAogCXJldHVybiAwOwogfQpAQCAtOTA2LDYgKzkxMyw0NyBAQAogfQogCiAvKgorICogQ2hlY2sgd2hldGhlciBldmVudCBpcyBpbiA8ZGVidWdmc19tb3VudF9wb2ludD4vdHJhY2luZy9ldmVudHMKKyAqLworCitpbnQgaXNfdmFsaWRfdHJhY2Vwb2ludChjb25zdCBjaGFyICpldmVudF9zdHJpbmcpCit7CisJRElSICpzeXNfZGlyLCAqZXZ0X2RpcjsKKwlzdHJ1Y3QgZGlyZW50ICpzeXNfbmV4dCwgKmV2dF9uZXh0LCBzeXNfZGlyZW50LCBldnRfZGlyZW50OworCWNoYXIgZXZ0X3BhdGhbTUFYUEFUSExFTl07CisJY2hhciBkaXJfcGF0aFtNQVhQQVRITEVOXTsKKworCWlmIChkZWJ1Z2ZzX3ZhbGlkX21vdW50cG9pbnQoZGVidWdmc19wYXRoKSkKKwkJcmV0dXJuIDA7CisKKwlzeXNfZGlyID0gb3BlbmRpcihkZWJ1Z2ZzX3BhdGgpOworCWlmICghc3lzX2RpcikKKwkJcmV0dXJuIDA7CisKKwlmb3JfZWFjaF9zdWJzeXN0ZW0oc3lzX2Rpciwgc3lzX2RpcmVudCwgc3lzX25leHQpIHsKKworCQlzbnByaW50ZihkaXJfcGF0aCwgTUFYUEFUSExFTiwgIiVzLyVzIiwgZGVidWdmc19wYXRoLAorCQkJIHN5c19kaXJlbnQuZF9uYW1lKTsKKwkJZXZ0X2RpciA9IG9wZW5kaXIoZGlyX3BhdGgpOworCQlpZiAoIWV2dF9kaXIpCisJCQljb250aW51ZTsKKworCQlmb3JfZWFjaF9ldmVudChzeXNfZGlyZW50LCBldnRfZGlyLCBldnRfZGlyZW50LCBldnRfbmV4dCkgeworCQkJc25wcmludGYoZXZ0X3BhdGgsIE1BWFBBVEhMRU4sICIlczolcyIsCisJCQkJIHN5c19kaXJlbnQuZF9uYW1lLCBldnRfZGlyZW50LmRfbmFtZSk7CisJCQlpZiAoIXN0cmNtcChldnRfcGF0aCwgZXZlbnRfc3RyaW5nKSkgeworCQkJCWNsb3NlZGlyKGV2dF9kaXIpOworCQkJCWNsb3NlZGlyKHN5c19kaXIpOworCQkJCXJldHVybiAxOworCQkJfQorCQl9CisJCWNsb3NlZGlyKGV2dF9kaXIpOworCX0KKwljbG9zZWRpcihzeXNfZGlyKTsKKwlyZXR1cm4gMDsKK30KKworLyoKICAqIFByaW50IHRoZSBoZWxwIHRleHQgZm9yIHRoZSBldmVudCBzeW1ib2xzOgogICovCiB2b2lkIHByaW50X2V2ZW50cyh2b2lkKQpAQCAtOTYzLDMgKzEwMTEsMjYgQEAKIAogCWV4aXQoMTI5KTsKIH0KKworaW50IHBlcmZfZXZzZWxfbGlzdF9fY3JlYXRlX2RlZmF1bHQodm9pZCkKK3sKKwlzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwgPSBwZXJmX2V2c2VsX19uZXcoUEVSRl9UWVBFX0hBUkRXQVJFLAorCQkJCQkJICAgUEVSRl9DT1VOVF9IV19DUFVfQ1lDTEVTLCAwKTsKKwlpZiAoZXZzZWwgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlsaXN0X2FkZCgmZXZzZWwtPm5vZGUsICZldnNlbF9saXN0KTsKKwkrK25yX2NvdW50ZXJzOworCXJldHVybiAwOworfQorCit2b2lkIHBlcmZfZXZzZWxfbGlzdF9fZGVsZXRlKHZvaWQpCit7CisJc3RydWN0IHBlcmZfZXZzZWwgKnBvcywgKm47CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocG9zLCBuLCAmZXZzZWxfbGlzdCwgbm9kZSkgeworCQlsaXN0X2RlbF9pbml0KCZwb3MtPm5vZGUpOworCQlwZXJmX2V2c2VsX19kZWxldGUocG9zKTsKKwl9CisJbnJfY291bnRlcnMgPSAwOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3BhcnNlLWV2ZW50cy5oIGIvdG9vbHMvcGVyZi91dGlsL3BhcnNlLWV2ZW50cy5oCmluZGV4IGZjNGFiM2YuLmI4MmNhZmIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1ldmVudHMuaAorKysgYi90b29scy9wZXJmL3V0aWwvcGFyc2UtZXZlbnRzLmgKQEAgLTQsNiArNCwxNiBAQAogICogUGFyc2Ugc3ltYm9saWMgZXZlbnRzL2NvdW50cyBwYXNzZWQgaW4gYXMgb3B0aW9uczoKICAqLwogCisjaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50LmgiCisKK3N0cnVjdCBsaXN0X2hlYWQ7CitzdHJ1Y3QgcGVyZl9ldnNlbDsKKworZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgZXZzZWxfbGlzdDsKKworaW50IHBlcmZfZXZzZWxfbGlzdF9fY3JlYXRlX2RlZmF1bHQodm9pZCk7Cit2b2lkIHBlcmZfZXZzZWxfbGlzdF9fZGVsZXRlKHZvaWQpOworCiBzdHJ1Y3Qgb3B0aW9uOwogCiBzdHJ1Y3QgdHJhY2Vwb2ludF9wYXRoIHsKQEAgLTEzLDE0ICsyMywxMSBAQAogfTsKIAogZXh0ZXJuIHN0cnVjdCB0cmFjZXBvaW50X3BhdGggKnRyYWNlcG9pbnRfaWRfdG9fcGF0aCh1NjQgY29uZmlnKTsKLWV4dGVybiBib29sIGhhdmVfdHJhY2Vwb2ludHMoc3RydWN0IHBlcmZfZXZlbnRfYXR0ciAqcGF0dHJzLCBpbnQgbmJfZXZlbnRzKTsKK2V4dGVybiBib29sIGhhdmVfdHJhY2Vwb2ludHMoc3RydWN0IGxpc3RfaGVhZCAqZXZzZWxfbGlzdCk7CiAKIGV4dGVybiBpbnQJCQlucl9jb3VudGVyczsKIAotZXh0ZXJuIHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgYXR0cnNbTUFYX0NPVU5URVJTXTsKLWV4dGVybiBjaGFyICpmaWx0ZXJzW01BWF9DT1VOVEVSU107Ci0KLWV4dGVybiBjb25zdCBjaGFyICpldmVudF9uYW1lKGludCBjdHIpOworY29uc3QgY2hhciAqZXZlbnRfbmFtZShzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZlbnQpOwogZXh0ZXJuIGNvbnN0IGNoYXIgKl9fZXZlbnRfbmFtZShpbnQgdHlwZSwgdTY0IGNvbmZpZyk7CiAKIGV4dGVybiBpbnQgcGFyc2VfZXZlbnRzKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqc3RyLCBpbnQgdW5zZXQpOwpAQCAtMjksOSArMzYsOSBAQAogI2RlZmluZSBFVkVOVFNfSEVMUF9NQVggKDEyOCoxMDI0KQogCiBleHRlcm4gdm9pZCBwcmludF9ldmVudHModm9pZCk7CitleHRlcm4gaW50IGlzX3ZhbGlkX3RyYWNlcG9pbnQoY29uc3QgY2hhciAqZXZlbnRfc3RyaW5nKTsKIAogZXh0ZXJuIGNoYXIgZGVidWdmc19wYXRoW107CiBleHRlcm4gaW50IHZhbGlkX2RlYnVnZnNfbW91bnQoY29uc3QgY2hhciAqZGVidWdmcyk7CiAKLQogI2VuZGlmIC8qIF9fUEVSRl9QQVJTRV9FVkVOVFNfSCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3BhcnNlLW9wdGlvbnMuaCBiL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1vcHRpb25zLmgKaW5kZXggYzdkNzJkYy4uYWJjMzFhMSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3BhcnNlLW9wdGlvbnMuaAorKysgYi90b29scy9wZXJmL3V0aWwvcGFyc2Utb3B0aW9ucy5oCkBAIC0xMTksNiArMTE5LDEwIEBACiAJeyAudHlwZSA9IE9QVElPTl9DQUxMQkFDSywgLnNob3J0X25hbWUgPSAocyksIC5sb25nX25hbWUgPSAobCksIC52YWx1ZSA9ICh2KSwgKGEpLCAuaGVscCA9IChoKSwgLmNhbGxiYWNrID0gKGYpLCAuZmxhZ3MgPSBQQVJTRV9PUFRfTk9BUkcgfQogI2RlZmluZSBPUFRfQ0FMTEJBQ0tfREVGQVVMVChzLCBsLCB2LCBhLCBoLCBmLCBkKSBcCiAJeyAudHlwZSA9IE9QVElPTl9DQUxMQkFDSywgLnNob3J0X25hbWUgPSAocyksIC5sb25nX25hbWUgPSAobCksIC52YWx1ZSA9ICh2KSwgKGEpLCAuaGVscCA9IChoKSwgLmNhbGxiYWNrID0gKGYpLCAuZGVmdmFsID0gKGludHB0cl90KWQsIC5mbGFncyA9IFBBUlNFX09QVF9MQVNUQVJHX0RFRkFVTFQgfQorI2RlZmluZSBPUFRfQ0FMTEJBQ0tfREVGQVVMVF9OT09QVChzLCBsLCB2LCBhLCBoLCBmLCBkKSBcCisJeyAudHlwZSA9IE9QVElPTl9DQUxMQkFDSywgLnNob3J0X25hbWUgPSAocyksIC5sb25nX25hbWUgPSAobCksXAorCS52YWx1ZSA9ICh2KSwgKGEpLCAuaGVscCA9IChoKSwgLmNhbGxiYWNrID0gKGYpLCAuZGVmdmFsID0gKGludHB0cl90KWQsXAorCS5mbGFncyA9IFBBUlNFX09QVF9MQVNUQVJHX0RFRkFVTFQgfCBQQVJTRV9PUFRfTk9BUkd9CiAKIC8qIHBhcnNlX29wdGlvbnMoKSB3aWxsIGZpbHRlciBvdXQgdGhlIHByb2Nlc3NlZCBvcHRpb25zIGFuZCBsZWF2ZSB0aGUKICAqIG5vbi1vcHRpb24gYXJnbWVudHMgaW4gYXJndltdLgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWV2ZW50LmMgYi90b29scy9wZXJmL3V0aWwvcHJvYmUtZXZlbnQuYwppbmRleCA2MTE5MWM2Li4xMjhhYWFiIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvcHJvYmUtZXZlbnQuYworKysgYi90b29scy9wZXJmL3V0aWwvcHJvYmUtZXZlbnQuYwpAQCAtOTUsNyArOTUsNyBAQAogCQlnb3RvIG91dDsKIAogCWlmIChtYWNoaW5lX19jcmVhdGVfa2VybmVsX21hcHMoJm1hY2hpbmUpIDwgMCkgewotCQlwcl9kZWJ1ZygibWFjaGluZV9fY3JlYXRlX2tlcm5lbF9tYXBzICIpOworCQlwcl9kZWJ1ZygibWFjaGluZV9fY3JlYXRlX2tlcm5lbF9tYXBzKCkgZmFpbGVkLlxuIik7CiAJCWdvdG8gb3V0OwogCX0KIG91dDoKQEAgLTE0OSw3ICsxNDksOCBAQAogewogCWNvbnN0IGNoYXIgKnBhdGggPSBrZXJuZWxfZ2V0X21vZHVsZV9wYXRoKG1vZHVsZSk7CiAJaWYgKCFwYXRoKSB7Ci0JCXByX2VycigiRmFpbGVkIHRvIGZpbmQgcGF0aCBvZiAlcyBtb2R1bGUiLCBtb2R1bGUgPzogImtlcm5lbCIpOworCQlwcl9lcnIoIkZhaWxlZCB0byBmaW5kIHBhdGggb2YgJXMgbW9kdWxlLlxuIiwKKwkJICAgICAgIG1vZHVsZSA/OiAia2VybmVsIik7CiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAlwcl9kZWJ1ZygiVHJ5IHRvIG9wZW4gJXNcbiIsIHBhdGgpOwpAQCAtMjI2LDcgKzIyNyw3IEBACiAJCXByX3dhcm5pbmcoIldhcm5pbmc6IE5vIGR3YXJmIGluZm8gZm91bmQgaW4gdGhlIHZtbGludXggLSAiCiAJCQkicGxlYXNlIHJlYnVpbGQga2VybmVsIHdpdGggQ09ORklHX0RFQlVHX0lORk89eS5cbiIpOwogCQlpZiAoIW5lZWRfZHdhcmYpIHsKLQkJCXByX2RlYnVnKCJUcnlpbmcgdG8gdXNlIHN5bWJvbHMuXG5uIik7CisJCQlwcl9kZWJ1ZygiVHJ5aW5nIHRvIHVzZSBzeW1ib2xzLlxuIik7CiAJCQlyZXR1cm4gMDsKIAkJfQogCX0KQEAgLTI5NSw0MiArMjk2LDQ5IEBACiAjZGVmaW5lIExJTkVCVUZfU0laRSAyNTYKICNkZWZpbmUgTlJfQURESVRJT05BTF9MSU5FUyAyCiAKLXN0YXRpYyBpbnQgc2hvd19vbmVfbGluZShGSUxFICpmcCwgaW50IGwsIGJvb2wgc2tpcCwgYm9vbCBzaG93X251bSkKK3N0YXRpYyBpbnQgX19zaG93X29uZV9saW5lKEZJTEUgKmZwLCBpbnQgbCwgYm9vbCBza2lwLCBib29sIHNob3dfbnVtKQogewogCWNoYXIgYnVmW0xJTkVCVUZfU0laRV07Ci0JY29uc3QgY2hhciAqY29sb3IgPSBQRVJGX0NPTE9SX0JMVUU7CisJY29uc3QgY2hhciAqY29sb3IgPSBzaG93X251bSA/ICIiIDogUEVSRl9DT0xPUl9CTFVFOworCWNvbnN0IGNoYXIgKnByZWZpeCA9IE5VTEw7CiAKLQlpZiAoZmdldHMoYnVmLCBMSU5FQlVGX1NJWkUsIGZwKSA9PSBOVUxMKQotCQlnb3RvIGVycm9yOwotCWlmICghc2tpcCkgewotCQlpZiAoc2hvd19udW0pCi0JCQlmcHJpbnRmKHN0ZG91dCwgIiU3ZCAgJXMiLCBsLCBidWYpOwotCQllbHNlCi0JCQljb2xvcl9mcHJpbnRmKHN0ZG91dCwgY29sb3IsICIgICAgICAgICAlcyIsIGJ1Zik7Ci0JfQotCi0Jd2hpbGUgKHN0cmxlbihidWYpID09IExJTkVCVUZfU0laRSAtIDEgJiYKLQkgICAgICAgYnVmW0xJTkVCVUZfU0laRSAtIDJdICE9ICdcbicpIHsKKwlkbyB7CiAJCWlmIChmZ2V0cyhidWYsIExJTkVCVUZfU0laRSwgZnApID09IE5VTEwpCiAJCQlnb3RvIGVycm9yOwotCQlpZiAoIXNraXApIHsKLQkJCWlmIChzaG93X251bSkKLQkJCQlmcHJpbnRmKHN0ZG91dCwgIiVzIiwgYnVmKTsKLQkJCWVsc2UKLQkJCQljb2xvcl9mcHJpbnRmKHN0ZG91dCwgY29sb3IsICIlcyIsIGJ1Zik7CisJCWlmIChza2lwKQorCQkJY29udGludWU7CisJCWlmICghcHJlZml4KSB7CisJCQlwcmVmaXggPSBzaG93X251bSA/ICIlN2QgICIgOiAiICAgICAgICAgIjsKKwkJCWNvbG9yX2ZwcmludGYoc3Rkb3V0LCBjb2xvciwgcHJlZml4LCBsKTsKIAkJfQotCX0KKwkJY29sb3JfZnByaW50ZihzdGRvdXQsIGNvbG9yLCAiJXMiLCBidWYpOwogCi0JcmV0dXJuIDA7CisJfSB3aGlsZSAoc3RyY2hyKGJ1ZiwgJ1xuJykgPT0gTlVMTCk7CisKKwlyZXR1cm4gMTsKIGVycm9yOgotCWlmIChmZW9mKGZwKSkKLQkJcHJfd2FybmluZygiU291cmNlIGZpbGUgaXMgc2hvcnRlciB0aGFuIGV4cGVjdGVkLlxuIik7Ci0JZWxzZQorCWlmIChmZXJyb3IoZnApKSB7CiAJCXByX3dhcm5pbmcoIkZpbGUgcmVhZCBlcnJvcjogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7Ci0KLQlyZXR1cm4gLTE7CisJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgX3Nob3dfb25lX2xpbmUoRklMRSAqZnAsIGludCBsLCBib29sIHNraXAsIGJvb2wgc2hvd19udW0pCit7CisJaW50IHJ2ID0gX19zaG93X29uZV9saW5lKGZwLCBsLCBza2lwLCBzaG93X251bSk7CisJaWYgKHJ2ID09IDApIHsKKwkJcHJfd2FybmluZygiU291cmNlIGZpbGUgaXMgc2hvcnRlciB0aGFuIGV4cGVjdGVkLlxuIik7CisJCXJ2ID0gLTE7CisJfQorCXJldHVybiBydjsKK30KKworI2RlZmluZSBzaG93X29uZV9saW5lX3dpdGhfbnVtKGYsbCkJX3Nob3dfb25lX2xpbmUoZixsLGZhbHNlLHRydWUpCisjZGVmaW5lIHNob3dfb25lX2xpbmUoZixsKQkJX3Nob3dfb25lX2xpbmUoZixsLGZhbHNlLGZhbHNlKQorI2RlZmluZSBza2lwX29uZV9saW5lKGYsbCkJCV9zaG93X29uZV9saW5lKGYsbCx0cnVlLGZhbHNlKQorI2RlZmluZSBzaG93X29uZV9saW5lX29yX2VvZihmLGwpCV9fc2hvd19vbmVfbGluZShmLGwsZmFsc2UsZmFsc2UpCisKIC8qCiAgKiBTaG93IGxpbmUtcmFuZ2UgYWx3YXlzIHJlcXVpcmVzIGRlYnVnaW5mbyB0byBmaW5kIHNvdXJjZSBmaWxlIGFuZAogICogbGluZSBudW1iZXIuCkBAIC0zNzksNyArMzg3LDcgQEAKIAkJZnByaW50ZihzdGRvdXQsICI8JXM6JWQ+XG4iLCBsci0+ZnVuY3Rpb24sCiAJCQlsci0+c3RhcnQgLSBsci0+b2Zmc2V0KTsKIAllbHNlCi0JCWZwcmludGYoc3Rkb3V0LCAiPCVzOiVkPlxuIiwgbHItPmZpbGUsIGxyLT5zdGFydCk7CisJCWZwcmludGYoc3Rkb3V0LCAiPCVzOiVkPlxuIiwgbHItPnBhdGgsIGxyLT5zdGFydCk7CiAKIAlmcCA9IGZvcGVuKGxyLT5wYXRoLCAiciIpOwogCWlmIChmcCA9PSBOVUxMKSB7CkBAIC0zODgsMjYgKzM5NiwzMCBAQAogCQlyZXR1cm4gLWVycm5vOwogCX0KIAkvKiBTa2lwIHRvIHN0YXJ0aW5nIGxpbmUgbnVtYmVyICovCi0Jd2hpbGUgKGwgPCBsci0+c3RhcnQgJiYgcmV0ID49IDApCi0JCXJldCA9IHNob3dfb25lX2xpbmUoZnAsIGwrKywgdHJ1ZSwgZmFsc2UpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIGVuZDsKKwl3aGlsZSAobCA8IGxyLT5zdGFydCkgeworCQlyZXQgPSBza2lwX29uZV9saW5lKGZwLCBsKyspOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gZW5kOworCX0KIAogCWxpc3RfZm9yX2VhY2hfZW50cnkobG4sICZsci0+bGluZV9saXN0LCBsaXN0KSB7Ci0JCXdoaWxlIChsbi0+bGluZSA+IGwgJiYgcmV0ID49IDApCi0JCQlyZXQgPSBzaG93X29uZV9saW5lKGZwLCAobCsrKSAtIGxyLT5vZmZzZXQsCi0JCQkJCSAgICBmYWxzZSwgZmFsc2UpOwotCQlpZiAocmV0ID49IDApCi0JCQlyZXQgPSBzaG93X29uZV9saW5lKGZwLCAobCsrKSAtIGxyLT5vZmZzZXQsCi0JCQkJCSAgICBmYWxzZSwgdHJ1ZSk7CisJCWZvciAoOyBsbi0+bGluZSA+IGw7IGwrKykgeworCQkJcmV0ID0gc2hvd19vbmVfbGluZShmcCwgbCAtIGxyLT5vZmZzZXQpOworCQkJaWYgKHJldCA8IDApCisJCQkJZ290byBlbmQ7CisJCX0KKwkJcmV0ID0gc2hvd19vbmVfbGluZV93aXRoX251bShmcCwgbCsrIC0gbHItPm9mZnNldCk7CiAJCWlmIChyZXQgPCAwKQogCQkJZ290byBlbmQ7CiAJfQogCiAJaWYgKGxyLT5lbmQgPT0gSU5UX01BWCkKIAkJbHItPmVuZCA9IGwgKyBOUl9BRERJVElPTkFMX0xJTkVTOwotCXdoaWxlIChsIDw9IGxyLT5lbmQgJiYgIWZlb2YoZnApICYmIHJldCA+PSAwKQotCQlyZXQgPSBzaG93X29uZV9saW5lKGZwLCAobCsrKSAtIGxyLT5vZmZzZXQsIGZhbHNlLCBmYWxzZSk7CisJd2hpbGUgKGwgPD0gbHItPmVuZCkgeworCQlyZXQgPSBzaG93X29uZV9saW5lX29yX2VvZihmcCwgbCsrIC0gbHItPm9mZnNldCk7CisJCWlmIChyZXQgPD0gMCkKKwkJCWJyZWFrOworCX0KIGVuZDoKIAlmY2xvc2UoZnApOwogCXJldHVybiByZXQ7CkBAIC00NjYsNyArNDc4LDcgQEAKIAogCWZkID0gb3Blbl92bWxpbnV4KG1vZHVsZSk7CiAJaWYgKGZkIDwgMCkgewotCQlwcl93YXJuaW5nKCJGYWlsZWQgdG8gb3BlbiBkZWJ1Z2luZm8gZmlsZS5cbiIpOworCQlwcl93YXJuaW5nKCJGYWlsZWQgdG8gb3BlbiBkZWJ1ZyBpbmZvcm1hdGlvbiBmaWxlLlxuIik7CiAJCXJldHVybiBmZDsKIAl9CiAKQEAgLTUyNiw1NiArNTM4LDg3IEBACiB9CiAjZW5kaWYKIAorc3RhdGljIGludCBwYXJzZV9saW5lX251bShjaGFyICoqcHRyLCBpbnQgKnZhbCwgY29uc3QgY2hhciAqd2hhdCkKK3sKKwljb25zdCBjaGFyICpzdGFydCA9ICpwdHI7CisKKwllcnJubyA9IDA7CisJKnZhbCA9IHN0cnRvbCgqcHRyLCBwdHIsIDApOworCWlmIChlcnJubyB8fCAqcHRyID09IHN0YXJ0KSB7CisJCXNlbWFudGljX2Vycm9yKCInJXMnIGlzIG5vdCBhIHZhbGlkIG51bWJlci5cbiIsIHdoYXQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTdHVmZiAnbHInIGFjY29yZGluZyB0byB0aGUgbGluZSByYW5nZSBkZXNjcmliZWQgYnkgJ2FyZycuCisgKiBUaGUgbGluZSByYW5nZSBzeW50YXggaXMgZGVzY3JpYmVkIGJ5OgorICoKKyAqICAgICAgICAgU1JDWzpTTE5bK05VTXwtRUxOXV0KKyAqICAgICAgICAgRk5DWzpTTE5bK05VTXwtRUxOXV0KKyAqLwogaW50IHBhcnNlX2xpbmVfcmFuZ2VfZGVzYyhjb25zdCBjaGFyICphcmcsIHN0cnVjdCBsaW5lX3JhbmdlICpscikKIHsKLQljb25zdCBjaGFyICpwdHI7Ci0JY2hhciAqdG1wOwotCS8qCi0JICogPFN5bnRheD4KLQkgKiBTUkM6U0xOWytOVU18LUVMTl0KLQkgKiBGVU5DWzpTTE5bK05VTXwtRUxOXV0KLQkgKi8KLQlwdHIgPSBzdHJjaHIoYXJnLCAnOicpOwotCWlmIChwdHIpIHsKLQkJbHItPnN0YXJ0ID0gKGludClzdHJ0b3VsKHB0ciArIDEsICZ0bXAsIDApOwotCQlpZiAoKnRtcCA9PSAnKycpIHsKLQkJCWxyLT5lbmQgPSBsci0+c3RhcnQgKyAoaW50KXN0cnRvdWwodG1wICsgMSwgJnRtcCwgMCk7Ci0JCQlsci0+ZW5kLS07CS8qCi0JCQkJCSAqIEFkanVzdCB0aGUgbnVtYmVyIG9mIGxpbmVzIGhlcmUuCi0JCQkJCSAqIElmIHRoZSBudW1iZXIgb2YgbGluZXMgPT0gMSwgdGhlCi0JCQkJCSAqIHRoZSBlbmQgb2YgbGluZSBzaG91bGQgYmUgZXF1YWwgdG8KLQkJCQkJICogdGhlIHN0YXJ0IG9mIGxpbmUuCi0JCQkJCSAqLwotCQl9IGVsc2UgaWYgKCp0bXAgPT0gJy0nKQotCQkJbHItPmVuZCA9IChpbnQpc3RydG91bCh0bXAgKyAxLCAmdG1wLCAwKTsKLQkJZWxzZQotCQkJbHItPmVuZCA9IElOVF9NQVg7CisJY2hhciAqcmFuZ2UsICpuYW1lID0gc3RyZHVwKGFyZyk7CisJaW50IGVycjsKKworCWlmICghbmFtZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlsci0+c3RhcnQgPSAwOworCWxyLT5lbmQgPSBJTlRfTUFYOworCisJcmFuZ2UgPSBzdHJjaHIobmFtZSwgJzonKTsKKwlpZiAocmFuZ2UpIHsKKwkJKnJhbmdlKysgPSAnXDAnOworCisJCWVyciA9IHBhcnNlX2xpbmVfbnVtKCZyYW5nZSwgJmxyLT5zdGFydCwgInN0YXJ0IGxpbmUiKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyOworCisJCWlmICgqcmFuZ2UgPT0gJysnIHx8ICpyYW5nZSA9PSAnLScpIHsKKwkJCWNvbnN0IGNoYXIgYyA9ICpyYW5nZSsrOworCisJCQllcnIgPSBwYXJzZV9saW5lX251bSgmcmFuZ2UsICZsci0+ZW5kLCAiZW5kIGxpbmUiKTsKKwkJCWlmIChlcnIpCisJCQkJZ290byBlcnI7CisKKwkJCWlmIChjID09ICcrJykgeworCQkJCWxyLT5lbmQgKz0gbHItPnN0YXJ0OworCQkJCS8qCisJCQkJICogQWRqdXN0IHRoZSBudW1iZXIgb2YgbGluZXMgaGVyZS4KKwkJCQkgKiBJZiB0aGUgbnVtYmVyIG9mIGxpbmVzID09IDEsIHRoZQorCQkJCSAqIHRoZSBlbmQgb2YgbGluZSBzaG91bGQgYmUgZXF1YWwgdG8KKwkJCQkgKiB0aGUgc3RhcnQgb2YgbGluZS4KKwkJCQkgKi8KKwkJCQlsci0+ZW5kLS07CisJCQl9CisJCX0KKwogCQlwcl9kZWJ1ZygiTGluZSByYW5nZSBpcyAlZCB0byAlZFxuIiwgbHItPnN0YXJ0LCBsci0+ZW5kKTsKKworCQllcnIgPSAtRUlOVkFMOwogCQlpZiAobHItPnN0YXJ0ID4gbHItPmVuZCkgewogCQkJc2VtYW50aWNfZXJyb3IoIlN0YXJ0IGxpbmUgbXVzdCBiZSBzbWFsbGVyIgogCQkJCSAgICAgICAiIHRoYW4gZW5kIGxpbmUuXG4iKTsKLQkJCXJldHVybiAtRUlOVkFMOworCQkJZ290byBlcnI7CiAJCX0KLQkJaWYgKCp0bXAgIT0gJ1wwJykgewotCQkJc2VtYW50aWNfZXJyb3IoIlRhaWxpbmcgd2l0aCBpbnZhbGlkIGNoYXJhY3RlciAnJWQnLlxuIiwKLQkJCQkgICAgICAgKnRtcCk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKCpyYW5nZSAhPSAnXDAnKSB7CisJCQlzZW1hbnRpY19lcnJvcigiVGFpbGluZyB3aXRoIGludmFsaWQgc3RyICclcycuXG4iLCByYW5nZSk7CisJCQlnb3RvIGVycjsKIAkJfQotCQl0bXAgPSBzdHJuZHVwKGFyZywgKHB0ciAtIGFyZykpOwotCX0gZWxzZSB7Ci0JCXRtcCA9IHN0cmR1cChhcmcpOwotCQlsci0+ZW5kID0gSU5UX01BWDsKIAl9CiAKLQlpZiAodG1wID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JaWYgKHN0cmNocih0bXAsICcuJykpCi0JCWxyLT5maWxlID0gdG1wOworCWlmIChzdHJjaHIobmFtZSwgJy4nKSkKKwkJbHItPmZpbGUgPSBuYW1lOwogCWVsc2UKLQkJbHItPmZ1bmN0aW9uID0gdG1wOworCQlsci0+ZnVuY3Rpb24gPSBuYW1lOwogCiAJcmV0dXJuIDA7CitlcnI6CisJZnJlZShuYW1lKTsKKwlyZXR1cm4gZXJyOwogfQogCiAvKiBDaGVjayB0aGUgbmFtZSBpcyBnb29kIGZvciBldmVudC9ncm91cCAqLwpAQCAtNjk5LDM5ICs3NDIsNDAgQEAKIAogCS8qIEV4Y2x1c2lvbiBjaGVjayAqLwogCWlmIChwcC0+bGF6eV9saW5lICYmIHBwLT5saW5lKSB7Ci0JCXNlbWFudGljX2Vycm9yKCJMYXp5IHBhdHRlcm4gY2FuJ3QgYmUgdXNlZCB3aXRoIGxpbmUgbnVtYmVyLiIpOworCQlzZW1hbnRpY19lcnJvcigiTGF6eSBwYXR0ZXJuIGNhbid0IGJlIHVzZWQgd2l0aCIKKwkJCSAgICAgICAiIGxpbmUgbnVtYmVyLlxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWlmIChwcC0+bGF6eV9saW5lICYmIHBwLT5vZmZzZXQpIHsKLQkJc2VtYW50aWNfZXJyb3IoIkxhenkgcGF0dGVybiBjYW4ndCBiZSB1c2VkIHdpdGggb2Zmc2V0LiIpOworCQlzZW1hbnRpY19lcnJvcigiTGF6eSBwYXR0ZXJuIGNhbid0IGJlIHVzZWQgd2l0aCBvZmZzZXQuXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaWYgKHBwLT5saW5lICYmIHBwLT5vZmZzZXQpIHsKLQkJc2VtYW50aWNfZXJyb3IoIk9mZnNldCBjYW4ndCBiZSB1c2VkIHdpdGggbGluZSBudW1iZXIuIik7CisJCXNlbWFudGljX2Vycm9yKCJPZmZzZXQgY2FuJ3QgYmUgdXNlZCB3aXRoIGxpbmUgbnVtYmVyLlxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWlmICghcHAtPmxpbmUgJiYgIXBwLT5sYXp5X2xpbmUgJiYgcHAtPmZpbGUgJiYgIXBwLT5mdW5jdGlvbikgewogCQlzZW1hbnRpY19lcnJvcigiRmlsZSBhbHdheXMgcmVxdWlyZXMgbGluZSBudW1iZXIgb3IgIgotCQkJICAgICAgICJsYXp5IHBhdHRlcm4uIik7CisJCQkgICAgICAgImxhenkgcGF0dGVybi5cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlpZiAocHAtPm9mZnNldCAmJiAhcHAtPmZ1bmN0aW9uKSB7Ci0JCXNlbWFudGljX2Vycm9yKCJPZmZzZXQgcmVxdWlyZXMgYW4gZW50cnkgZnVuY3Rpb24uIik7CisJCXNlbWFudGljX2Vycm9yKCJPZmZzZXQgcmVxdWlyZXMgYW4gZW50cnkgZnVuY3Rpb24uXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaWYgKHBwLT5yZXRwcm9iZSAmJiAhcHAtPmZ1bmN0aW9uKSB7Ci0JCXNlbWFudGljX2Vycm9yKCJSZXR1cm4gcHJvYmUgcmVxdWlyZXMgYW4gZW50cnkgZnVuY3Rpb24uIik7CisJCXNlbWFudGljX2Vycm9yKCJSZXR1cm4gcHJvYmUgcmVxdWlyZXMgYW4gZW50cnkgZnVuY3Rpb24uXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaWYgKChwcC0+b2Zmc2V0IHx8IHBwLT5saW5lIHx8IHBwLT5sYXp5X2xpbmUpICYmIHBwLT5yZXRwcm9iZSkgewogCQlzZW1hbnRpY19lcnJvcigiT2Zmc2V0L0xpbmUvTGF6eSBwYXR0ZXJuIGNhbid0IGJlIHVzZWQgd2l0aCAiCi0JCQkgICAgICAgInJldHVybiBwcm9iZS4iKTsKKwkJCSAgICAgICAicmV0dXJuIHByb2JlLlxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMTAwNSw3ICsxMDQ5LDcgQEAKIAogCXJldHVybiB0bXAgLSBidWY7CiBlcnJvcjoKLQlwcl9kZWJ1ZygiRmFpbGVkIHRvIHN5bnRoZXNpemUgcGVyZiBwcm9iZSBhcmd1bWVudDogJXMiLAorCXByX2RlYnVnKCJGYWlsZWQgdG8gc3ludGhlc2l6ZSBwZXJmIHByb2JlIGFyZ3VtZW50OiAlc1xuIiwKIAkJIHN0cmVycm9yKC1yZXQpKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTAzMywxMyArMTA3NywxMyBAQAogCQkJZ290byBlcnJvcjsKIAl9CiAJaWYgKHBwLT5maWxlKSB7Ci0JCWxlbiA9IHN0cmxlbihwcC0+ZmlsZSkgLSAzMTsKLQkJaWYgKGxlbiA8IDApCi0JCQlsZW4gPSAwOwotCQl0bXAgPSBzdHJjaHIocHAtPmZpbGUgKyBsZW4sICcvJyk7Ci0JCWlmICghdG1wKQotCQkJdG1wID0gcHAtPmZpbGUgKyBsZW47Ci0JCXJldCA9IGVfc25wcmludGYoZmlsZSwgMzIsICJAJXMiLCB0bXAgKyAxKTsKKwkJdG1wID0gcHAtPmZpbGU7CisJCWxlbiA9IHN0cmxlbih0bXApOworCQlpZiAobGVuID4gMzApIHsKKwkJCXRtcCA9IHN0cmNocihwcC0+ZmlsZSArIGxlbiAtIDMwLCAnLycpOworCQkJdG1wID0gdG1wID8gdG1wICsgMSA6IHBwLT5maWxlICsgbGVuIC0gMzA7CisJCX0KKwkJcmV0ID0gZV9zbnByaW50ZihmaWxlLCAzMiwgIkAlcyIsIHRtcCk7CiAJCWlmIChyZXQgPD0gMCkKIAkJCWdvdG8gZXJyb3I7CiAJfQpAQCAtMTA1NSw3ICsxMDk5LDcgQEAKIAogCXJldHVybiBidWY7CiBlcnJvcjoKLQlwcl9kZWJ1ZygiRmFpbGVkIHRvIHN5bnRoZXNpemUgcGVyZiBwcm9iZSBwb2ludDogJXMiLAorCXByX2RlYnVnKCJGYWlsZWQgdG8gc3ludGhlc2l6ZSBwZXJmIHByb2JlIHBvaW50OiAlc1xuIiwKIAkJIHN0cmVycm9yKC1yZXQpKTsKIAlpZiAoYnVmKQogCQlmcmVlKGJ1Zik7CkBAIC0xNzk2LDcgKzE4NDAsNyBAQAogCiAJcmV0ID0gZV9zbnByaW50ZihidWYsIDEyOCwgIiVzOiVzIiwgZ3JvdXAsIGV2ZW50KTsKIAlpZiAocmV0IDwgMCkgewotCQlwcl9lcnIoIkZhaWxlZCB0byBjb3B5IGV2ZW50LiIpOworCQlwcl9lcnIoIkZhaWxlZCB0byBjb3B5IGV2ZW50LlxuIik7CiAJCXJldHVybiByZXQ7CiAJfQogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvcHJvYmUtZmluZGVyLmMgYi90b29scy9wZXJmL3V0aWwvcHJvYmUtZmluZGVyLmMKaW5kZXggZGRmNGQ0NS4uYWI4M2I2YSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWZpbmRlci5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1maW5kZXIuYwpAQCAtNjUyLDggKzY1Miw4IEBACiAJcmVncyA9IGdldF9hcmNoX3JlZ3N0cihyZWduKTsKIAlpZiAoIXJlZ3MpIHsKIAkJLyogVGhpcyBzaG91bGQgYmUgYSBidWcgaW4gRFdBUkYgb3IgdGhpcyB0b29sICovCi0JCXByX3dhcm5pbmcoIk1hcHBpbmcgZm9yIERXQVJGIHJlZ2lzdGVyIG51bWJlciAldSAiCi0JCQkgICAibWlzc2luZyBvbiB0aGlzIGFyY2hpdGVjdHVyZS4iLCByZWduKTsKKwkJcHJfd2FybmluZygiTWFwcGluZyBmb3IgdGhlIHJlZ2lzdGVyIG51bWJlciAldSAiCisJCQkgICAibWlzc2luZyBvbiB0aGlzIGFyY2hpdGVjdHVyZS5cbiIsIHJlZ24pOwogCQlyZXR1cm4gLUVSQU5HRTsKIAl9CiAKQEAgLTY5OSwxMyArNjk5LDE0IEBACiAJCWlmIChyZXQgIT0gRFdfVEFHX3BvaW50ZXJfdHlwZSAmJgogCQkgICAgcmV0ICE9IERXX1RBR19hcnJheV90eXBlKSB7CiAJCQlwcl93YXJuaW5nKCJGYWlsZWQgdG8gY2FzdCBpbnRvIHN0cmluZzogIgotCQkJCSAgICIlcyglcykgaXMgbm90IGEgcG9pbnRlciBub3IgYXJyYXkuIiwKKwkJCQkgICAiJXMoJXMpIGlzIG5vdCBhIHBvaW50ZXIgbm9yIGFycmF5LlxuIiwKIAkJCQkgICBkd2FyZl9kaWVuYW1lKHZyX2RpZSksIGR3YXJmX2RpZW5hbWUoJnR5cGUpKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCWlmIChyZXQgPT0gRFdfVEFHX3BvaW50ZXJfdHlwZSkgewogCQkJaWYgKGRpZV9nZXRfcmVhbF90eXBlKCZ0eXBlLCAmdHlwZSkgPT0gTlVMTCkgewotCQkJCXByX3dhcm5pbmcoIkZhaWxlZCB0byBnZXQgYSB0eXBlIGluZm9ybWF0aW9uLiIpOworCQkJCXByX3dhcm5pbmcoIkZhaWxlZCB0byBnZXQgYSB0eXBlIgorCQkJCQkgICAiIGluZm9ybWF0aW9uLlxuIik7CiAJCQkJcmV0dXJuIC1FTk9FTlQ7CiAJCQl9CiAJCQl3aGlsZSAoKnJlZl9wdHIpCkBAIC03MjAsNyArNzIxLDcgQEAKIAkJaWYgKCFkaWVfY29tcGFyZV9uYW1lKCZ0eXBlLCAiY2hhciIpICYmCiAJCSAgICAhZGllX2NvbXBhcmVfbmFtZSgmdHlwZSwgInVuc2lnbmVkIGNoYXIiKSkgewogCQkJcHJfd2FybmluZygiRmFpbGVkIHRvIGNhc3QgaW50byBzdHJpbmc6ICIKLQkJCQkgICAiJXMgaXMgbm90ICh1bnNpZ25lZCkgY2hhciAqLiIsCisJCQkJICAgIiVzIGlzIG5vdCAodW5zaWduZWQpIGNoYXIgKi5cbiIsCiAJCQkJICAgZHdhcmZfZGllbmFtZSh2cl9kaWUpKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CkBAIC04MzAsOCArODMxLDggQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCWlmIChmaWVsZC0+bmFtZVswXSA9PSAnWycpIHsKLQkJCXByX2VycigiU2VtYW50aWMgZXJyb3I6ICVzIGlzIG5vdCBhIHBvaW50b3Igbm9yIGFycmF5LiIsCi0JCQkgICAgICAgdmFybmFtZSk7CisJCQlwcl9lcnIoIlNlbWFudGljIGVycm9yOiAlcyBpcyBub3QgYSBwb2ludG9yIgorCQkJICAgICAgICIgbm9yIGFycmF5LlxuIiwgdmFybmFtZSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQlpZiAoZmllbGQtPnJlZikgewpAQCAtOTc4LDcgKzk3OSw3IEBACiAJbmFtZSA9IGR3YXJmX2RpZW5hbWUoc3BfZGllKTsKIAlpZiAobmFtZSkgewogCQlpZiAoZHdhcmZfZW50cnlwYyhzcF9kaWUsICZlYWRkcikgIT0gMCkgewotCQkJcHJfd2FybmluZygiRmFpbGVkIHRvIGdldCBlbnRyeSBwYyBvZiAlc1xuIiwKKwkJCXByX3dhcm5pbmcoIkZhaWxlZCB0byBnZXQgZW50cnkgYWRkcmVzcyBvZiAlc1xuIiwKIAkJCQkgICBkd2FyZl9kaWVuYW1lKHNwX2RpZSkpOwogCQkJcmV0dXJuIC1FTk9FTlQ7CiAJCX0KQEAgLTk5NCw3ICs5OTUsNyBAQAogCWlmIChyZXRwcm9iZSkgewogCQlpZiAoZWFkZHIgIT0gcGFkZHIpIHsKIAkJCXByX3dhcm5pbmcoIlJldHVybiBwcm9iZSBtdXN0IGJlIG9uIHRoZSBoZWFkIG9mIgotCQkJCSAgICIgYSByZWFsIGZ1bmN0aW9uXG4iKTsKKwkJCQkgICAiIGEgcmVhbCBmdW5jdGlvbi5cbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJdHAtPnJldHByb2JlID0gdHJ1ZTsKQEAgLTEwMzMsNyArMTAzNCw3IEBACiAJCUR3YXJmX0ZyYW1lICpmcmFtZTsKIAkJaWYgKGR3YXJmX2NmaV9hZGRyZnJhbWUocGYtPmNmaSwgcGYtPmFkZHIsICZmcmFtZSkgIT0gMCB8fAogCQkgICAgZHdhcmZfZnJhbWVfY2ZhKGZyYW1lLCAmcGYtPmZiX29wcywgJm5vcHMpICE9IDApIHsKLQkJCXByX3dhcm5pbmcoIkZhaWxlZCB0byBnZXQgQ0ZBIG9uIDB4JWp4XG4iLAorCQkJcHJfd2FybmluZygiRmFpbGVkIHRvIGdldCBjYWxsIGZyYW1lIG9uIDB4JWp4XG4iLAogCQkJCSAgICh1aW50bWF4X3QpcGYtPmFkZHIpOwogCQkJcmV0dXJuIC1FTk9FTlQ7CiAJCX0KQEAgLTEwNjAsNyArMTA2MSw3IEBACiAJaW50IHJldCA9IDA7CiAKIAlpZiAoZHdhcmZfZ2V0c3JjbGluZXMoJnBmLT5jdV9kaWUsICZsaW5lcywgJm5saW5lcykgIT0gMCkgewotCQlwcl93YXJuaW5nKCJObyBzb3VyY2UgbGluZXMgZm91bmQgaW4gdGhpcyBDVS5cbiIpOworCQlwcl93YXJuaW5nKCJObyBzb3VyY2UgbGluZXMgZm91bmQuXG4iKTsKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCkBAIC0xMTYyLDcgKzExNjMsNyBAQAogCX0KIAogCWlmIChkd2FyZl9nZXRzcmNsaW5lcygmcGYtPmN1X2RpZSwgJmxpbmVzLCAmbmxpbmVzKSAhPSAwKSB7Ci0JCXByX3dhcm5pbmcoIk5vIHNvdXJjZSBsaW5lcyBmb3VuZCBpbiB0aGlzIENVLlxuIik7CisJCXByX3dhcm5pbmcoIk5vIHNvdXJjZSBsaW5lcyBmb3VuZC5cbiIpOwogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKQEAgLTEyMjAsNyArMTIyMSw3IEBACiAJZWxzZSB7CiAJCS8qIEdldCBwcm9iZSBhZGRyZXNzICovCiAJCWlmIChkd2FyZl9lbnRyeXBjKGluX2RpZSwgJmFkZHIpICE9IDApIHsKLQkJCXByX3dhcm5pbmcoIkZhaWxlZCB0byBnZXQgZW50cnkgcGMgb2YgJXMuXG4iLAorCQkJcHJfd2FybmluZygiRmFpbGVkIHRvIGdldCBlbnRyeSBhZGRyZXNzIG9mICVzLlxuIiwKIAkJCQkgICBkd2FyZl9kaWVuYW1lKGluX2RpZSkpOwogCQkJcGFyYW0tPnJldHZhbCA9IC1FTk9FTlQ7CiAJCQlyZXR1cm4gRFdBUkZfQ0JfQUJPUlQ7CkBAIC0xMjYxLDggKzEyNjIsOCBAQAogCQkJcGFyYW0tPnJldHZhbCA9IGZpbmRfcHJvYmVfcG9pbnRfbGF6eShzcF9kaWUsIHBmKTsKIAkJZWxzZSB7CiAJCQlpZiAoZHdhcmZfZW50cnlwYyhzcF9kaWUsICZwZi0+YWRkcikgIT0gMCkgewotCQkJCXByX3dhcm5pbmcoIkZhaWxlZCB0byBnZXQgZW50cnkgcGMgb2YgJXMuXG4iLAotCQkJCQkgICBkd2FyZl9kaWVuYW1lKHNwX2RpZSkpOworCQkJCXByX3dhcm5pbmcoIkZhaWxlZCB0byBnZXQgZW50cnkgYWRkcmVzcyBvZiAiCisJCQkJCSAgICIlcy5cbiIsIGR3YXJmX2RpZW5hbWUoc3BfZGllKSk7CiAJCQkJcGFyYW0tPnJldHZhbCA9IC1FTk9FTlQ7CiAJCQkJcmV0dXJuIERXQVJGX0NCX0FCT1JUOwogCQkJfQpAQCAtMTMwNCw3ICsxMzA1LDcgQEAKIAogCWRiZyA9IGR3ZmxfaW5pdF9vZmZsaW5lX2R3YXJmKGZkLCAmZHdmbCwgJmJpYXMpOwogCWlmICghZGJnKSB7Ci0JCXByX3dhcm5pbmcoIk5vIGR3YXJmIGluZm8gZm91bmQgaW4gdGhlIHZtbGludXggLSAiCisJCXByX3dhcm5pbmcoIk5vIGRlYnVnIGluZm9ybWF0aW9uIGZvdW5kIGluIHRoZSB2bWxpbnV4IC0gIgogCQkJInBsZWFzZSByZWJ1aWxkIHdpdGggQ09ORklHX0RFQlVHX0lORk89eS5cbiIpOwogCQlyZXR1cm4gLUVCQURGOwogCX0KQEAgLTE1NDksNyArMTU1MCw3IEBACiAJLyogT3BlbiB0aGUgbGl2ZSBsaW51eCBrZXJuZWwgKi8KIAlkYmcgPSBkd2ZsX2luaXRfbGl2ZV9rZXJuZWxfZHdhcmYoYWRkciwgJmR3ZmwsICZiaWFzKTsKIAlpZiAoIWRiZykgewotCQlwcl93YXJuaW5nKCJObyBkd2FyZiBpbmZvIGZvdW5kIGluIHRoZSB2bWxpbnV4IC0gIgorCQlwcl93YXJuaW5nKCJObyBkZWJ1ZyBpbmZvcm1hdGlvbiBmb3VuZCBpbiB0aGUgdm1saW51eCAtICIKIAkJCSJwbGVhc2UgcmVidWlsZCB3aXRoIENPTkZJR19ERUJVR19JTkZPPXkuXG4iKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBlbmQ7CkBAIC0xNTU5LDcgKzE1NjAsOCBAQAogCWFkZHIgKz0gYmlhczsKIAkvKiBGaW5kIGN1IGRpZSAqLwogCWlmICghZHdhcmZfYWRkcmRpZShkYmcsIChEd2FyZl9BZGRyKWFkZHIgLSBiaWFzLCAmY3VkaWUpKSB7Ci0JCXByX3dhcm5pbmcoIk5vIENVIERJRSBpcyBmb3VuZCBhdCAlbHhcbiIsIGFkZHIpOworCQlwcl93YXJuaW5nKCJGYWlsZWQgdG8gZmluZCBkZWJ1ZyBpbmZvcm1hdGlvbiBmb3IgYWRkcmVzcyAlbHhcbiIsCisJCQkgICBhZGRyKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBlbmQ7CiAJfQpAQCAtMTY4NCw3ICsxNjg2LDcgQEAKIAogCWxpbmVfbGlzdF9faW5pdCgmbGYtPmxyLT5saW5lX2xpc3QpOwogCWlmIChkd2FyZl9nZXRzcmNsaW5lcygmbGYtPmN1X2RpZSwgJmxpbmVzLCAmbmxpbmVzKSAhPSAwKSB7Ci0JCXByX3dhcm5pbmcoIk5vIHNvdXJjZSBsaW5lcyBmb3VuZCBpbiB0aGlzIENVLlxuIik7CisJCXByX3dhcm5pbmcoIk5vIHNvdXJjZSBsaW5lcyBmb3VuZC5cbiIpOwogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKQEAgLTE4MDksNyArMTgxMSw3IEBACiAKIAlkYmcgPSBkd2ZsX2luaXRfb2ZmbGluZV9kd2FyZihmZCwgJmR3ZmwsICZiaWFzKTsKIAlpZiAoIWRiZykgewotCQlwcl93YXJuaW5nKCJObyBkd2FyZiBpbmZvIGZvdW5kIGluIHRoZSB2bWxpbnV4IC0gIgorCQlwcl93YXJuaW5nKCJObyBkZWJ1ZyBpbmZvcm1hdGlvbiBmb3VuZCBpbiB0aGUgdm1saW51eCAtICIKIAkJCSJwbGVhc2UgcmVidWlsZCB3aXRoIENPTkZJR19ERUJVR19JTkZPPXkuXG4iKTsKIAkJcmV0dXJuIC1FQkFERjsKIAl9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvcHJvYmUtZmluZGVyLmggYi90b29scy9wZXJmL3V0aWwvcHJvYmUtZmluZGVyLmgKaW5kZXggYmJhNjlkNC4uYmVhZWZjMyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWZpbmRlci5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1maW5kZXIuaApAQCAtMzQsOSArMzQsOSBAQAogCQkJCSAgYm9vbCBleHRlcm5zKTsKIAogI2luY2x1ZGUgPGR3YXJmLmg+Ci0jaW5jbHVkZSA8bGliZHcuaD4KLSNpbmNsdWRlIDxsaWJkd2ZsLmg+Ci0jaW5jbHVkZSA8dmVyc2lvbi5oPgorI2luY2x1ZGUgPGVsZnV0aWxzL2xpYmR3Lmg+CisjaW5jbHVkZSA8ZWxmdXRpbHMvbGliZHdmbC5oPgorI2luY2x1ZGUgPGVsZnV0aWxzL3ZlcnNpb24uaD4KIAogc3RydWN0IHByb2JlX2ZpbmRlciB7CiAJc3RydWN0IHBlcmZfcHJvYmVfZXZlbnQJKnBldjsJCS8qIFRhcmdldCBwcm9iZSBldmVudCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3NjcmlwdGluZy1lbmdpbmVzL3RyYWNlLWV2ZW50LXBlcmwuYyBiL3Rvb2xzL3BlcmYvdXRpbC9zY3JpcHRpbmctZW5naW5lcy90cmFjZS1ldmVudC1wZXJsLmMKaW5kZXggYjA1OWRjNS4uOTM2ODA4MSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3NjcmlwdGluZy1lbmdpbmVzL3RyYWNlLWV2ZW50LXBlcmwuYworKysgYi90b29scy9wZXJmL3V0aWwvc2NyaXB0aW5nLWVuZ2luZXMvdHJhY2UtZXZlbnQtcGVybC5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIHRyYWNlLWV2ZW50LXBlcmwuICBGZWVkIHBlcmYgdHJhY2UgZXZlbnRzIHRvIGFuIGVtYmVkZGVkIFBlcmwgaW50ZXJwcmV0ZXIuCisgKiB0cmFjZS1ldmVudC1wZXJsLiAgRmVlZCBwZXJmIHNjcmlwdCBldmVudHMgdG8gYW4gZW1iZWRkZWQgUGVybCBpbnRlcnByZXRlci4KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVG9tIFphbnVzc2kgPHR6YW51c3NpQGdtYWlsLmNvbT4KICAqCkBAIC00MTEsOCArNDExLDggQEAKIAkJcmV0dXJuIC0xOwogCX0KIAotCWZwcmludGYob2ZwLCAiIyBwZXJmIHRyYWNlIGV2ZW50IGhhbmRsZXJzLCAiCi0JCSJnZW5lcmF0ZWQgYnkgcGVyZiB0cmFjZSAtZyBwZXJsXG4iKTsKKwlmcHJpbnRmKG9mcCwgIiMgcGVyZiBzY3JpcHQgZXZlbnQgaGFuZGxlcnMsICIKKwkJImdlbmVyYXRlZCBieSBwZXJmIHNjcmlwdCAtZyBwZXJsXG4iKTsKIAogCWZwcmludGYob2ZwLCAiIyBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwiCiAJCSIgTGljZW5zZSB2ZXJzaW9uIDJcblxuIik7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvc2NyaXB0aW5nLWVuZ2luZXMvdHJhY2UtZXZlbnQtcHl0aG9uLmMgYi90b29scy9wZXJmL3V0aWwvc2NyaXB0aW5nLWVuZ2luZXMvdHJhY2UtZXZlbnQtcHl0aG9uLmMKaW5kZXggMzNhNjMyNS4uYzZkOTkzMyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3NjcmlwdGluZy1lbmdpbmVzL3RyYWNlLWV2ZW50LXB5dGhvbi5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9zY3JpcHRpbmctZW5naW5lcy90cmFjZS1ldmVudC1weXRob24uYwpAQCAtNDQyLDggKzQ0Miw4IEBACiAJCWZwcmludGYoc3RkZXJyLCAiY291bGRuJ3Qgb3BlbiAlc1xuIiwgZm5hbWUpOwogCQlyZXR1cm4gLTE7CiAJfQotCWZwcmludGYob2ZwLCAiIyBwZXJmIHRyYWNlIGV2ZW50IGhhbmRsZXJzLCAiCi0JCSJnZW5lcmF0ZWQgYnkgcGVyZiB0cmFjZSAtZyBweXRob25cbiIpOworCWZwcmludGYob2ZwLCAiIyBwZXJmIHNjcmlwdCBldmVudCBoYW5kbGVycywgIgorCQkiZ2VuZXJhdGVkIGJ5IHBlcmYgc2NyaXB0IC1nIHB5dGhvblxuIik7CiAKIAlmcHJpbnRmKG9mcCwgIiMgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIgogCQkiIExpY2Vuc2UgdmVyc2lvbiAyXG5cbiIpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3Nlc3Npb24uYyBiL3Rvb2xzL3BlcmYvdXRpbC9zZXNzaW9uLmMKaW5kZXggZmE5ZDY1Mi4uNmZiNDY5NCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3Nlc3Npb24uYworKysgYi90b29scy9wZXJmL3V0aWwvc2Vzc2lvbi5jCkBAIC02NSw5ICs2NSw0OSBAQAogCXJldHVybiAtMTsKIH0KIAorc3RhdGljIHZvaWQgcGVyZl9zZXNzaW9uX19pZF9oZWFkZXJfc2l6ZShzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQoreworICAgICAgIHN0cnVjdCBzYW1wbGVfZGF0YSAqZGF0YTsKKyAgICAgICB1NjQgc2FtcGxlX3R5cGUgPSBzZXNzaW9uLT5zYW1wbGVfdHlwZTsKKyAgICAgICB1MTYgc2l6ZSA9IDA7CisKKwlpZiAoIXNlc3Npb24tPnNhbXBsZV9pZF9hbGwpCisJCWdvdG8gb3V0OworCisgICAgICAgaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfVElEKQorICAgICAgICAgICAgICAgc2l6ZSArPSBzaXplb2YoZGF0YS0+dGlkKSAqIDI7CisKKyAgICAgICBpZiAoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9USU1FKQorICAgICAgICAgICAgICAgc2l6ZSArPSBzaXplb2YoZGF0YS0+dGltZSk7CisKKyAgICAgICBpZiAoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9JRCkKKyAgICAgICAgICAgICAgIHNpemUgKz0gc2l6ZW9mKGRhdGEtPmlkKTsKKworICAgICAgIGlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1NUUkVBTV9JRCkKKyAgICAgICAgICAgICAgIHNpemUgKz0gc2l6ZW9mKGRhdGEtPnN0cmVhbV9pZCk7CisKKyAgICAgICBpZiAoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9DUFUpCisgICAgICAgICAgICAgICBzaXplICs9IHNpemVvZihkYXRhLT5jcHUpICogMjsKK291dDoKKyAgICAgICBzZXNzaW9uLT5pZF9oZHJfc2l6ZSA9IHNpemU7Cit9CisKK3ZvaWQgcGVyZl9zZXNzaW9uX19zZXRfc2FtcGxlX2lkX2FsbChzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLCBib29sIHZhbHVlKQoreworCXNlc3Npb24tPnNhbXBsZV9pZF9hbGwgPSB2YWx1ZTsKKwlwZXJmX3Nlc3Npb25fX2lkX2hlYWRlcl9zaXplKHNlc3Npb24pOworfQorCit2b2lkIHBlcmZfc2Vzc2lvbl9fc2V0X3NhbXBsZV90eXBlKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24sIHU2NCB0eXBlKQoreworCXNlc3Npb24tPnNhbXBsZV90eXBlID0gdHlwZTsKK30KKwogdm9pZCBwZXJmX3Nlc3Npb25fX3VwZGF0ZV9zYW1wbGVfdHlwZShzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmKQogewogCXNlbGYtPnNhbXBsZV90eXBlID0gcGVyZl9oZWFkZXJfX3NhbXBsZV90eXBlKCZzZWxmLT5oZWFkZXIpOworCXNlbGYtPnNhbXBsZV9pZF9hbGwgPSBwZXJmX2hlYWRlcl9fc2FtcGxlX2lkX2FsbCgmc2VsZi0+aGVhZGVyKTsKKwlwZXJmX3Nlc3Npb25fX2lkX2hlYWRlcl9zaXplKHNlbGYpOwogfQogCiBpbnQgcGVyZl9zZXNzaW9uX19jcmVhdGVfa2VybmVsX21hcHMoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2VsZikKQEAgLTg1LDcgKzEyNSw5IEBACiAJbWFjaGluZXNfX2Rlc3Ryb3lfZ3Vlc3Rfa2VybmVsX21hcHMoJnNlbGYtPm1hY2hpbmVzKTsKIH0KIAotc3RydWN0IHBlcmZfc2Vzc2lvbiAqcGVyZl9zZXNzaW9uX19uZXcoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBtb2RlLCBib29sIGZvcmNlLCBib29sIHJlcGlwZSkKK3N0cnVjdCBwZXJmX3Nlc3Npb24gKnBlcmZfc2Vzc2lvbl9fbmV3KGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgbW9kZSwKKwkJCQkgICAgICAgYm9vbCBmb3JjZSwgYm9vbCByZXBpcGUsCisJCQkJICAgICAgIHN0cnVjdCBwZXJmX2V2ZW50X29wcyAqb3BzKQogewogCXNpemVfdCBsZW4gPSBmaWxlbmFtZSA/IHN0cmxlbihmaWxlbmFtZSkgKyAxIDogMDsKIAlzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmID0gemFsbG9jKHNpemVvZigqc2VsZikgKyBsZW4pOwpAQCAtMTAxLDEwICsxNDMsMjAgQEAKIAlJTklUX0xJU1RfSEVBRCgmc2VsZi0+ZGVhZF90aHJlYWRzKTsKIAlzZWxmLT5oaXN0c190cmVlID0gUkJfUk9PVDsKIAlzZWxmLT5sYXN0X21hdGNoID0gTlVMTDsKLQlzZWxmLT5tbWFwX3dpbmRvdyA9IDMyOworCS8qCisJICogT24gNjRiaXQgd2UgY2FuIG1tYXAgdGhlIGRhdGEgZmlsZSBpbiBvbmUgZ28uIE5vIG5lZWQgZm9yIHRpbnkgbW1hcAorCSAqIHNsaWNlcy4gT24gMzJiaXQgd2UgdXNlIDMyTUIuCisJICovCisjaWYgQklUU19QRVJfTE9ORyA9PSA2NAorCXNlbGYtPm1tYXBfd2luZG93ID0gVUxMT05HX01BWDsKKyNlbHNlCisJc2VsZi0+bW1hcF93aW5kb3cgPSAzMiAqIDEwMjQgKiAxMDI0VUxMOworI2VuZGlmCiAJc2VsZi0+bWFjaGluZXMgPSBSQl9ST09UOwogCXNlbGYtPnJlcGlwZSA9IHJlcGlwZTsKLQlJTklUX0xJU1RfSEVBRCgmc2VsZi0+b3JkZXJlZF9zYW1wbGVzLnNhbXBsZXNfaGVhZCk7CisJSU5JVF9MSVNUX0hFQUQoJnNlbGYtPm9yZGVyZWRfc2FtcGxlcy5zYW1wbGVzKTsKKwlJTklUX0xJU1RfSEVBRCgmc2VsZi0+b3JkZXJlZF9zYW1wbGVzLnNhbXBsZV9jYWNoZSk7CisJSU5JVF9MSVNUX0hFQUQoJnNlbGYtPm9yZGVyZWRfc2FtcGxlcy50b19mcmVlKTsKIAltYWNoaW5lX19pbml0KCZzZWxmLT5ob3N0X21hY2hpbmUsICIiLCBIT1NUX0tFUk5FTF9JRCk7CiAKIAlpZiAobW9kZSA9PSBPX1JET05MWSkgewpAQCAtMTIwLDYgKzE3MiwxMyBAQAogCX0KIAogCXBlcmZfc2Vzc2lvbl9fdXBkYXRlX3NhbXBsZV90eXBlKHNlbGYpOworCisJaWYgKG9wcyAmJiBvcHMtPm9yZGVyaW5nX3JlcXVpcmVzX3RpbWVzdGFtcHMgJiYKKwkgICAgb3BzLT5vcmRlcmVkX3NhbXBsZXMgJiYgIXNlbGYtPnNhbXBsZV9pZF9hbGwpIHsKKwkJZHVtcF9wcmludGYoIldBUk5JTkc6IE5vIHNhbXBsZV9pZF9hbGwgc3VwcG9ydCwgZmFsbGluZyBiYWNrIHRvIHVub3JkZXJlZCBwcm9jZXNzaW5nXG4iKTsKKwkJb3BzLT5vcmRlcmVkX3NhbXBsZXMgPSBmYWxzZTsKKwl9CisKIG91dDoKIAlyZXR1cm4gc2VsZjsKIG91dF9mcmVlOgpAQCAtMjMwLDcgKzI4OSwxNSBAQAogCXJldHVybiBzeW1zOwogfQogCitzdGF0aWMgaW50IHByb2Nlc3NfZXZlbnRfc3ludGhfc3R1YihldmVudF90ICpldmVudCBfX3VzZWQsCisJCQkJICAgIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24gX191c2VkKQoreworCWR1bXBfcHJpbnRmKCI6IHVuaGFuZGxlZCFcbiIpOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHByb2Nlc3NfZXZlbnRfc3R1YihldmVudF90ICpldmVudCBfX3VzZWQsCisJCQkgICAgICBzdHJ1Y3Qgc2FtcGxlX2RhdGEgKnNhbXBsZSBfX3VzZWQsCiAJCQkgICAgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uIF9fdXNlZCkKIHsKIAlkdW1wX3ByaW50ZigiOiB1bmhhbmRsZWQhXG4iKTsKQEAgLTI2Miw3ICszMjksNyBAQAogCWlmIChoYW5kbGVyLT5leGl0ID09IE5VTEwpCiAJCWhhbmRsZXItPmV4aXQgPSBwcm9jZXNzX2V2ZW50X3N0dWI7CiAJaWYgKGhhbmRsZXItPmxvc3QgPT0gTlVMTCkKLQkJaGFuZGxlci0+bG9zdCA9IHByb2Nlc3NfZXZlbnRfc3R1YjsKKwkJaGFuZGxlci0+bG9zdCA9IGV2ZW50X19wcm9jZXNzX2xvc3Q7CiAJaWYgKGhhbmRsZXItPnJlYWQgPT0gTlVMTCkKIAkJaGFuZGxlci0+cmVhZCA9IHByb2Nlc3NfZXZlbnRfc3R1YjsKIAlpZiAoaGFuZGxlci0+dGhyb3R0bGUgPT0gTlVMTCkKQEAgLTI3MCwxMyArMzM3LDEzIEBACiAJaWYgKGhhbmRsZXItPnVudGhyb3R0bGUgPT0gTlVMTCkKIAkJaGFuZGxlci0+dW50aHJvdHRsZSA9IHByb2Nlc3NfZXZlbnRfc3R1YjsKIAlpZiAoaGFuZGxlci0+YXR0ciA9PSBOVUxMKQotCQloYW5kbGVyLT5hdHRyID0gcHJvY2Vzc19ldmVudF9zdHViOworCQloYW5kbGVyLT5hdHRyID0gcHJvY2Vzc19ldmVudF9zeW50aF9zdHViOwogCWlmIChoYW5kbGVyLT5ldmVudF90eXBlID09IE5VTEwpCi0JCWhhbmRsZXItPmV2ZW50X3R5cGUgPSBwcm9jZXNzX2V2ZW50X3N0dWI7CisJCWhhbmRsZXItPmV2ZW50X3R5cGUgPSBwcm9jZXNzX2V2ZW50X3N5bnRoX3N0dWI7CiAJaWYgKGhhbmRsZXItPnRyYWNpbmdfZGF0YSA9PSBOVUxMKQotCQloYW5kbGVyLT50cmFjaW5nX2RhdGEgPSBwcm9jZXNzX2V2ZW50X3N0dWI7CisJCWhhbmRsZXItPnRyYWNpbmdfZGF0YSA9IHByb2Nlc3NfZXZlbnRfc3ludGhfc3R1YjsKIAlpZiAoaGFuZGxlci0+YnVpbGRfaWQgPT0gTlVMTCkKLQkJaGFuZGxlci0+YnVpbGRfaWQgPSBwcm9jZXNzX2V2ZW50X3N0dWI7CisJCWhhbmRsZXItPmJ1aWxkX2lkID0gcHJvY2Vzc19ldmVudF9zeW50aF9zdHViOwogCWlmIChoYW5kbGVyLT5maW5pc2hlZF9yb3VuZCA9PSBOVUxMKSB7CiAJCWlmIChoYW5kbGVyLT5vcmRlcmVkX3NhbXBsZXMpCiAJCQloYW5kbGVyLT5maW5pc2hlZF9yb3VuZCA9IHByb2Nlc3NfZmluaXNoZWRfcm91bmQ7CkBAIC0zODYsMzMgKzQ1Myw2MSBAQAogCiBzdHJ1Y3Qgc2FtcGxlX3F1ZXVlIHsKIAl1NjQJCQl0aW1lc3RhbXA7Ci0Jc3RydWN0IHNhbXBsZV9ldmVudAkqZXZlbnQ7CisJdTY0CQkJZmlsZV9vZmZzZXQ7CisJZXZlbnRfdAkJCSpldmVudDsKIAlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CiB9OwogCitzdGF0aWMgdm9pZCBwZXJmX3Nlc3Npb25fZnJlZV9zYW1wbGVfYnVmZmVycyhzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQoreworCXN0cnVjdCBvcmRlcmVkX3NhbXBsZXMgKm9zID0gJnNlc3Npb24tPm9yZGVyZWRfc2FtcGxlczsKKworCXdoaWxlICghbGlzdF9lbXB0eSgmb3MtPnRvX2ZyZWUpKSB7CisJCXN0cnVjdCBzYW1wbGVfcXVldWUgKnNxOworCisJCXNxID0gbGlzdF9lbnRyeShvcy0+dG9fZnJlZS5uZXh0LCBzdHJ1Y3Qgc2FtcGxlX3F1ZXVlLCBsaXN0KTsKKwkJbGlzdF9kZWwoJnNxLT5saXN0KTsKKwkJZnJlZShzcSk7CisJfQorfQorCitzdGF0aWMgaW50IHBlcmZfc2Vzc2lvbl9kZWxpdmVyX2V2ZW50KHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24sCisJCQkJICAgICAgZXZlbnRfdCAqZXZlbnQsCisJCQkJICAgICAgc3RydWN0IHNhbXBsZV9kYXRhICpzYW1wbGUsCisJCQkJICAgICAgc3RydWN0IHBlcmZfZXZlbnRfb3BzICpvcHMsCisJCQkJICAgICAgdTY0IGZpbGVfb2Zmc2V0KTsKKwogc3RhdGljIHZvaWQgZmx1c2hfc2FtcGxlX3F1ZXVlKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnMsCiAJCQkgICAgICAgc3RydWN0IHBlcmZfZXZlbnRfb3BzICpvcHMpCiB7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqaGVhZCA9ICZzLT5vcmRlcmVkX3NhbXBsZXMuc2FtcGxlc19oZWFkOwotCXU2NCBsaW1pdCA9IHMtPm9yZGVyZWRfc2FtcGxlcy5uZXh0X2ZsdXNoOworCXN0cnVjdCBvcmRlcmVkX3NhbXBsZXMgKm9zID0gJnMtPm9yZGVyZWRfc2FtcGxlczsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkID0gJm9zLT5zYW1wbGVzOwogCXN0cnVjdCBzYW1wbGVfcXVldWUgKnRtcCwgKml0ZXI7CisJc3RydWN0IHNhbXBsZV9kYXRhIHNhbXBsZTsKKwl1NjQgbGltaXQgPSBvcy0+bmV4dF9mbHVzaDsKKwl1NjQgbGFzdF90cyA9IG9zLT5sYXN0X3NhbXBsZSA/IG9zLT5sYXN0X3NhbXBsZS0+dGltZXN0YW1wIDogMFVMTDsKIAogCWlmICghb3BzLT5vcmRlcmVkX3NhbXBsZXMgfHwgIWxpbWl0KQogCQlyZXR1cm47CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaXRlciwgdG1wLCBoZWFkLCBsaXN0KSB7CiAJCWlmIChpdGVyLT50aW1lc3RhbXAgPiBsaW1pdCkKLQkJCXJldHVybjsKKwkJCWJyZWFrOwogCi0JCWlmIChpdGVyID09IHMtPm9yZGVyZWRfc2FtcGxlcy5sYXN0X2luc2VydGVkKQotCQkJcy0+b3JkZXJlZF9zYW1wbGVzLmxhc3RfaW5zZXJ0ZWQgPSBOVUxMOworCQlldmVudF9fcGFyc2Vfc2FtcGxlKGl0ZXItPmV2ZW50LCBzLCAmc2FtcGxlKTsKKwkJcGVyZl9zZXNzaW9uX2RlbGl2ZXJfZXZlbnQocywgaXRlci0+ZXZlbnQsICZzYW1wbGUsIG9wcywKKwkJCQkJICAgaXRlci0+ZmlsZV9vZmZzZXQpOwogCi0JCW9wcy0+c2FtcGxlKChldmVudF90ICopaXRlci0+ZXZlbnQsIHMpOwotCi0JCXMtPm9yZGVyZWRfc2FtcGxlcy5sYXN0X2ZsdXNoID0gaXRlci0+dGltZXN0YW1wOworCQlvcy0+bGFzdF9mbHVzaCA9IGl0ZXItPnRpbWVzdGFtcDsKIAkJbGlzdF9kZWwoJml0ZXItPmxpc3QpOwotCQlmcmVlKGl0ZXItPmV2ZW50KTsKLQkJZnJlZShpdGVyKTsKKwkJbGlzdF9hZGQoJml0ZXItPmxpc3QsICZvcy0+c2FtcGxlX2NhY2hlKTsKKwl9CisKKwlpZiAobGlzdF9lbXB0eShoZWFkKSkgeworCQlvcy0+bGFzdF9zYW1wbGUgPSBOVUxMOworCX0gZWxzZSBpZiAobGFzdF90cyA8PSBsaW1pdCkgeworCQlvcy0+bGFzdF9zYW1wbGUgPQorCQkJbGlzdF9lbnRyeShoZWFkLT5wcmV2LCBzdHJ1Y3Qgc2FtcGxlX3F1ZXVlLCBsaXN0KTsKIAl9CiB9CiAKQEAgLTQ2NSwxNzggKzU2MCwyNjUgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgX19xdWV1ZV9zYW1wbGVfZW5kKHN0cnVjdCBzYW1wbGVfcXVldWUgKm5ldywgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKLXsKLQlzdHJ1Y3Qgc2FtcGxlX3F1ZXVlICppdGVyOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKGl0ZXIsIGhlYWQsIGxpc3QpIHsKLQkJaWYgKGl0ZXItPnRpbWVzdGFtcCA8IG5ldy0+dGltZXN0YW1wKSB7Ci0JCQlsaXN0X2FkZCgmbmV3LT5saXN0LCAmaXRlci0+bGlzdCk7Ci0JCQlyZXR1cm47Ci0JCX0KLQl9Ci0KLQlsaXN0X2FkZCgmbmV3LT5saXN0LCBoZWFkKTsKLX0KLQotc3RhdGljIHZvaWQgX19xdWV1ZV9zYW1wbGVfYmVmb3JlKHN0cnVjdCBzYW1wbGVfcXVldWUgKm5ldywKLQkJCQkgIHN0cnVjdCBzYW1wbGVfcXVldWUgKml0ZXIsCi0JCQkJICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQotewotCWxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWVfcmV2ZXJzZShpdGVyLCBoZWFkLCBsaXN0KSB7Ci0JCWlmIChpdGVyLT50aW1lc3RhbXAgPCBuZXctPnRpbWVzdGFtcCkgewotCQkJbGlzdF9hZGQoJm5ldy0+bGlzdCwgJml0ZXItPmxpc3QpOwotCQkJcmV0dXJuOwotCQl9Ci0JfQotCi0JbGlzdF9hZGQoJm5ldy0+bGlzdCwgaGVhZCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fcXVldWVfc2FtcGxlX2FmdGVyKHN0cnVjdCBzYW1wbGVfcXVldWUgKm5ldywKLQkJCQkgc3RydWN0IHNhbXBsZV9xdWV1ZSAqaXRlciwKLQkJCQkgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKLXsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlKGl0ZXIsIGhlYWQsIGxpc3QpIHsKLQkJaWYgKGl0ZXItPnRpbWVzdGFtcCA+IG5ldy0+dGltZXN0YW1wKSB7Ci0JCQlsaXN0X2FkZF90YWlsKCZuZXctPmxpc3QsICZpdGVyLT5saXN0KTsKLQkJCXJldHVybjsKLQkJfQotCX0KLQlsaXN0X2FkZF90YWlsKCZuZXctPmxpc3QsIGhlYWQpOwotfQotCiAvKiBUaGUgcXVldWUgaXMgb3JkZXJlZCBieSB0aW1lICovCi1zdGF0aWMgdm9pZCBfX3F1ZXVlX3NhbXBsZV9ldmVudChzdHJ1Y3Qgc2FtcGxlX3F1ZXVlICpuZXcsCi0JCQkJIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnMpCitzdGF0aWMgdm9pZCBfX3F1ZXVlX2V2ZW50KHN0cnVjdCBzYW1wbGVfcXVldWUgKm5ldywgc3RydWN0IHBlcmZfc2Vzc2lvbiAqcykKIHsKLQlzdHJ1Y3Qgc2FtcGxlX3F1ZXVlICpsYXN0X2luc2VydGVkID0gcy0+b3JkZXJlZF9zYW1wbGVzLmxhc3RfaW5zZXJ0ZWQ7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqaGVhZCA9ICZzLT5vcmRlcmVkX3NhbXBsZXMuc2FtcGxlc19oZWFkOworCXN0cnVjdCBvcmRlcmVkX3NhbXBsZXMgKm9zID0gJnMtPm9yZGVyZWRfc2FtcGxlczsKKwlzdHJ1Y3Qgc2FtcGxlX3F1ZXVlICpzYW1wbGUgPSBvcy0+bGFzdF9zYW1wbGU7CisJdTY0IHRpbWVzdGFtcCA9IG5ldy0+dGltZXN0YW1wOworCXN0cnVjdCBsaXN0X2hlYWQgKnA7CiAKKwlvcy0+bGFzdF9zYW1wbGUgPSBuZXc7CiAKLQlpZiAoIWxhc3RfaW5zZXJ0ZWQpIHsKLQkJX19xdWV1ZV9zYW1wbGVfZW5kKG5ldywgaGVhZCk7CisJaWYgKCFzYW1wbGUpIHsKKwkJbGlzdF9hZGQoJm5ldy0+bGlzdCwgJm9zLT5zYW1wbGVzKTsKKwkJb3MtPm1heF90aW1lc3RhbXAgPSB0aW1lc3RhbXA7CiAJCXJldHVybjsKIAl9CiAKIAkvKgotCSAqIE1vc3Qgb2YgdGhlIHRpbWUgdGhlIGN1cnJlbnQgZXZlbnQgaGFzIGEgdGltZXN0YW1wCi0JICogdmVyeSBjbG9zZSB0byB0aGUgbGFzdCBldmVudCBpbnNlcnRlZCwgdW5sZXNzIHdlIGp1c3Qgc3dpdGNoZWQKLQkgKiB0byBhbm90aGVyIGV2ZW50IGJ1ZmZlci4gSGF2aW5nIGEgc29ydGluZyBiYXNlZCBvbiBhIGxpc3QgYW5kCi0JICogb24gdGhlIGxhc3QgaW5zZXJ0ZWQgZXZlbnQgdGhhdCBpcyBjbG9zZSB0byB0aGUgY3VycmVudCBvbmUgaXMKLQkgKiBwcm9iYWJseSBtb3JlIGVmZmljaWVudCB0aGFuIGFuIHJidHJlZSBiYXNlZCBzb3J0aW5nLgorCSAqIGxhc3Rfc2FtcGxlIG1pZ2h0IHBvaW50IHRvIHNvbWUgcmFuZG9tIHBsYWNlIGluIHRoZSBsaXN0IGFzIGl0J3MKKwkgKiB0aGUgbGFzdCBxdWV1ZWQgZXZlbnQuIFdlIGV4cGVjdCB0aGF0IHRoZSBuZXcgZXZlbnQgaXMgY2xvc2UgdG8KKwkgKiB0aGlzLgogCSAqLwotCWlmIChsYXN0X2luc2VydGVkLT50aW1lc3RhbXAgPj0gbmV3LT50aW1lc3RhbXApCi0JCV9fcXVldWVfc2FtcGxlX2JlZm9yZShuZXcsIGxhc3RfaW5zZXJ0ZWQsIGhlYWQpOwotCWVsc2UKLQkJX19xdWV1ZV9zYW1wbGVfYWZ0ZXIobmV3LCBsYXN0X2luc2VydGVkLCBoZWFkKTsKKwlpZiAoc2FtcGxlLT50aW1lc3RhbXAgPD0gdGltZXN0YW1wKSB7CisJCXdoaWxlIChzYW1wbGUtPnRpbWVzdGFtcCA8PSB0aW1lc3RhbXApIHsKKwkJCXAgPSBzYW1wbGUtPmxpc3QubmV4dDsKKwkJCWlmIChwID09ICZvcy0+c2FtcGxlcykgeworCQkJCWxpc3RfYWRkX3RhaWwoJm5ldy0+bGlzdCwgJm9zLT5zYW1wbGVzKTsKKwkJCQlvcy0+bWF4X3RpbWVzdGFtcCA9IHRpbWVzdGFtcDsKKwkJCQlyZXR1cm47CisJCQl9CisJCQlzYW1wbGUgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBzYW1wbGVfcXVldWUsIGxpc3QpOworCQl9CisJCWxpc3RfYWRkX3RhaWwoJm5ldy0+bGlzdCwgJnNhbXBsZS0+bGlzdCk7CisJfSBlbHNlIHsKKwkJd2hpbGUgKHNhbXBsZS0+dGltZXN0YW1wID4gdGltZXN0YW1wKSB7CisJCQlwID0gc2FtcGxlLT5saXN0LnByZXY7CisJCQlpZiAocCA9PSAmb3MtPnNhbXBsZXMpIHsKKwkJCQlsaXN0X2FkZCgmbmV3LT5saXN0LCAmb3MtPnNhbXBsZXMpOworCQkJCXJldHVybjsKKwkJCX0KKwkJCXNhbXBsZSA9IGxpc3RfZW50cnkocCwgc3RydWN0IHNhbXBsZV9xdWV1ZSwgbGlzdCk7CisJCX0KKwkJbGlzdF9hZGQoJm5ldy0+bGlzdCwgJnNhbXBsZS0+bGlzdCk7CisJfQogfQogCi1zdGF0aWMgaW50IHF1ZXVlX3NhbXBsZV9ldmVudChldmVudF90ICpldmVudCwgc3RydWN0IHNhbXBsZV9kYXRhICpkYXRhLAotCQkJICAgICAgc3RydWN0IHBlcmZfc2Vzc2lvbiAqcykKKyNkZWZpbmUgTUFYX1NBTVBMRV9CVUZGRVIJKDY0ICogMTAyNCAvIHNpemVvZihzdHJ1Y3Qgc2FtcGxlX3F1ZXVlKSkKKworc3RhdGljIGludCBwZXJmX3Nlc3Npb25fcXVldWVfZXZlbnQoc3RydWN0IHBlcmZfc2Vzc2lvbiAqcywgZXZlbnRfdCAqZXZlbnQsCisJCQkJICAgIHN0cnVjdCBzYW1wbGVfZGF0YSAqZGF0YSwgdTY0IGZpbGVfb2Zmc2V0KQogeworCXN0cnVjdCBvcmRlcmVkX3NhbXBsZXMgKm9zID0gJnMtPm9yZGVyZWRfc2FtcGxlczsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpzYyA9ICZvcy0+c2FtcGxlX2NhY2hlOwogCXU2NCB0aW1lc3RhbXAgPSBkYXRhLT50aW1lOwogCXN0cnVjdCBzYW1wbGVfcXVldWUgKm5ldzsKIAorCWlmICghdGltZXN0YW1wIHx8IHRpbWVzdGFtcCA9PSB+MFVMTCkKKwkJcmV0dXJuIC1FVElNRTsKIAogCWlmICh0aW1lc3RhbXAgPCBzLT5vcmRlcmVkX3NhbXBsZXMubGFzdF9mbHVzaCkgewogCQlwcmludGYoIldhcm5pbmc6IFRpbWVzdGFtcCBiZWxvdyBsYXN0IHRpbWVzbGljZSBmbHVzaFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCW5ldyA9IG1hbGxvYyhzaXplb2YoKm5ldykpOwotCWlmICghbmV3KQotCQlyZXR1cm4gLUVOT01FTTsKKwlpZiAoIWxpc3RfZW1wdHkoc2MpKSB7CisJCW5ldyA9IGxpc3RfZW50cnkoc2MtPm5leHQsIHN0cnVjdCBzYW1wbGVfcXVldWUsIGxpc3QpOworCQlsaXN0X2RlbCgmbmV3LT5saXN0KTsKKwl9IGVsc2UgaWYgKG9zLT5zYW1wbGVfYnVmZmVyKSB7CisJCW5ldyA9IG9zLT5zYW1wbGVfYnVmZmVyICsgb3MtPnNhbXBsZV9idWZmZXJfaWR4OworCQlpZiAoKytvcy0+c2FtcGxlX2J1ZmZlcl9pZHggPT0gTUFYX1NBTVBMRV9CVUZGRVIpCisJCQlvcy0+c2FtcGxlX2J1ZmZlciA9IE5VTEw7CisJfSBlbHNlIHsKKwkJb3MtPnNhbXBsZV9idWZmZXIgPSBtYWxsb2MoTUFYX1NBTVBMRV9CVUZGRVIgKiBzaXplb2YoKm5ldykpOworCQlpZiAoIW9zLT5zYW1wbGVfYnVmZmVyKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCWxpc3RfYWRkKCZvcy0+c2FtcGxlX2J1ZmZlci0+bGlzdCwgJm9zLT50b19mcmVlKTsKKwkJb3MtPnNhbXBsZV9idWZmZXJfaWR4ID0gMjsKKwkJbmV3ID0gb3MtPnNhbXBsZV9idWZmZXIgKyAxOworCX0KIAogCW5ldy0+dGltZXN0YW1wID0gdGltZXN0YW1wOworCW5ldy0+ZmlsZV9vZmZzZXQgPSBmaWxlX29mZnNldDsKKwluZXctPmV2ZW50ID0gZXZlbnQ7CiAKLQluZXctPmV2ZW50ID0gbWFsbG9jKGV2ZW50LT5oZWFkZXIuc2l6ZSk7Ci0JaWYgKCFuZXctPmV2ZW50KSB7Ci0JCWZyZWUobmV3KTsKLQkJcmV0dXJuIC1FTk9NRU07CisJX19xdWV1ZV9ldmVudChuZXcsIHMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNhbGxjaGFpbl9fcHJpbnRmKHN0cnVjdCBzYW1wbGVfZGF0YSAqc2FtcGxlKQoreworCXVuc2lnbmVkIGludCBpOworCisJcHJpbnRmKCIuLi4gY2hhaW46IG5yOiVMdVxuIiwgc2FtcGxlLT5jYWxsY2hhaW4tPm5yKTsKKworCWZvciAoaSA9IDA7IGkgPCBzYW1wbGUtPmNhbGxjaGFpbi0+bnI7IGkrKykKKwkJcHJpbnRmKCIuLi4uLiAlMmQ6ICUwMTZMeFxuIiwgaSwgc2FtcGxlLT5jYWxsY2hhaW4tPmlwc1tpXSk7Cit9CisKK3N0YXRpYyB2b2lkIHBlcmZfc2Vzc2lvbl9fcHJpbnRfdHN0YW1wKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24sCisJCQkJICAgICAgIGV2ZW50X3QgKmV2ZW50LAorCQkJCSAgICAgICBzdHJ1Y3Qgc2FtcGxlX2RhdGEgKnNhbXBsZSkKK3sKKwlpZiAoZXZlbnQtPmhlYWRlci50eXBlICE9IFBFUkZfUkVDT1JEX1NBTVBMRSAmJgorCSAgICAhc2Vzc2lvbi0+c2FtcGxlX2lkX2FsbCkgeworCQlmcHV0cygiLTEgLTEgIiwgc3Rkb3V0KTsKKwkJcmV0dXJuOwogCX0KIAotCW1lbWNweShuZXctPmV2ZW50LCBldmVudCwgZXZlbnQtPmhlYWRlci5zaXplKTsKKwlpZiAoKHNlc3Npb24tPnNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfQ1BVKSkKKwkJcHJpbnRmKCIldSAiLCBzYW1wbGUtPmNwdSk7CiAKLQlfX3F1ZXVlX3NhbXBsZV9ldmVudChuZXcsIHMpOwotCXMtPm9yZGVyZWRfc2FtcGxlcy5sYXN0X2luc2VydGVkID0gbmV3OwotCi0JaWYgKG5ldy0+dGltZXN0YW1wID4gcy0+b3JkZXJlZF9zYW1wbGVzLm1heF90aW1lc3RhbXApCi0JCXMtPm9yZGVyZWRfc2FtcGxlcy5tYXhfdGltZXN0YW1wID0gbmV3LT50aW1lc3RhbXA7Ci0KLQlyZXR1cm4gMDsKKwlpZiAoc2Vzc2lvbi0+c2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9USU1FKQorCQlwcmludGYoIiVMdSAiLCBzYW1wbGUtPnRpbWUpOwogfQogCi1zdGF0aWMgaW50IHBlcmZfc2Vzc2lvbl9fcHJvY2Vzc19zYW1wbGUoZXZlbnRfdCAqZXZlbnQsIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnMsCi0JCQkJCXN0cnVjdCBwZXJmX2V2ZW50X29wcyAqb3BzKQorc3RhdGljIHZvaWQgZHVtcF9ldmVudChzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLCBldmVudF90ICpldmVudCwKKwkJICAgICAgIHU2NCBmaWxlX29mZnNldCwgc3RydWN0IHNhbXBsZV9kYXRhICpzYW1wbGUpCiB7Ci0Jc3RydWN0IHNhbXBsZV9kYXRhIGRhdGE7CisJaWYgKCFkdW1wX3RyYWNlKQorCQlyZXR1cm47CiAKLQlpZiAoIW9wcy0+b3JkZXJlZF9zYW1wbGVzKQotCQlyZXR1cm4gb3BzLT5zYW1wbGUoZXZlbnQsIHMpOworCXByaW50ZigiXG4lI0x4IFslI3hdOiBldmVudDogJWRcbiIsIGZpbGVfb2Zmc2V0LCBldmVudC0+aGVhZGVyLnNpemUsCisJICAgICAgIGV2ZW50LT5oZWFkZXIudHlwZSk7CiAKLQliemVybygmZGF0YSwgc2l6ZW9mKHN0cnVjdCBzYW1wbGVfZGF0YSkpOwotCWV2ZW50X19wYXJzZV9zYW1wbGUoZXZlbnQsIHMtPnNhbXBsZV90eXBlLCAmZGF0YSk7Ci0KLQlxdWV1ZV9zYW1wbGVfZXZlbnQoZXZlbnQsICZkYXRhLCBzKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHBlcmZfc2Vzc2lvbl9fcHJvY2Vzc19ldmVudChzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmLAotCQkJCSAgICAgICBldmVudF90ICpldmVudCwKLQkJCQkgICAgICAgc3RydWN0IHBlcmZfZXZlbnRfb3BzICpvcHMsCi0JCQkJICAgICAgIHU2NCBvZmZzZXQsIHU2NCBoZWFkKQotewogCXRyYWNlX2V2ZW50KGV2ZW50KTsKIAotCWlmIChldmVudC0+aGVhZGVyLnR5cGUgPCBQRVJGX1JFQ09SRF9IRUFERVJfTUFYKSB7Ci0JCWR1bXBfcHJpbnRmKCIlI0x4IFslI3hdOiBQRVJGX1JFQ09SRF8lcyIsCi0JCQkgICAgb2Zmc2V0ICsgaGVhZCwgZXZlbnQtPmhlYWRlci5zaXplLAotCQkJICAgIGV2ZW50X19uYW1lW2V2ZW50LT5oZWFkZXIudHlwZV0pOwotCQloaXN0c19faW5jX25yX2V2ZW50cygmc2VsZi0+aGlzdHMsIGV2ZW50LT5oZWFkZXIudHlwZSk7Ci0JfQorCWlmIChzYW1wbGUpCisJCXBlcmZfc2Vzc2lvbl9fcHJpbnRfdHN0YW1wKHNlc3Npb24sIGV2ZW50LCBzYW1wbGUpOwogCi0JaWYgKHNlbGYtPmhlYWRlci5uZWVkc19zd2FwICYmIGV2ZW50X19zd2FwX29wc1tldmVudC0+aGVhZGVyLnR5cGVdKQotCQlldmVudF9fc3dhcF9vcHNbZXZlbnQtPmhlYWRlci50eXBlXShldmVudCk7CisJcHJpbnRmKCIlI0x4IFslI3hdOiBQRVJGX1JFQ09SRF8lcyIsIGZpbGVfb2Zmc2V0LCBldmVudC0+aGVhZGVyLnNpemUsCisJICAgICAgIGV2ZW50X19nZXRfZXZlbnRfbmFtZShldmVudC0+aGVhZGVyLnR5cGUpKTsKK30KKworc3RhdGljIHZvaWQgZHVtcF9zYW1wbGUoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwgZXZlbnRfdCAqZXZlbnQsCisJCQlzdHJ1Y3Qgc2FtcGxlX2RhdGEgKnNhbXBsZSkKK3sKKwlpZiAoIWR1bXBfdHJhY2UpCisJCXJldHVybjsKKworCXByaW50ZigiKElQLCAlZCk6ICVkLyVkOiAlI0x4IHBlcmlvZDogJUxkXG4iLCBldmVudC0+aGVhZGVyLm1pc2MsCisJICAgICAgIHNhbXBsZS0+cGlkLCBzYW1wbGUtPnRpZCwgc2FtcGxlLT5pcCwgc2FtcGxlLT5wZXJpb2QpOworCisJaWYgKHNlc3Npb24tPnNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfQ0FMTENIQUlOKQorCQljYWxsY2hhaW5fX3ByaW50ZihzYW1wbGUpOworfQorCitzdGF0aWMgaW50IHBlcmZfc2Vzc2lvbl9kZWxpdmVyX2V2ZW50KHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24sCisJCQkJICAgICAgZXZlbnRfdCAqZXZlbnQsCisJCQkJICAgICAgc3RydWN0IHNhbXBsZV9kYXRhICpzYW1wbGUsCisJCQkJICAgICAgc3RydWN0IHBlcmZfZXZlbnRfb3BzICpvcHMsCisJCQkJICAgICAgdTY0IGZpbGVfb2Zmc2V0KQoreworCWR1bXBfZXZlbnQoc2Vzc2lvbiwgZXZlbnQsIGZpbGVfb2Zmc2V0LCBzYW1wbGUpOwogCiAJc3dpdGNoIChldmVudC0+aGVhZGVyLnR5cGUpIHsKIAljYXNlIFBFUkZfUkVDT1JEX1NBTVBMRToKLQkJcmV0dXJuIHBlcmZfc2Vzc2lvbl9fcHJvY2Vzc19zYW1wbGUoZXZlbnQsIHNlbGYsIG9wcyk7CisJCWR1bXBfc2FtcGxlKHNlc3Npb24sIGV2ZW50LCBzYW1wbGUpOworCQlyZXR1cm4gb3BzLT5zYW1wbGUoZXZlbnQsIHNhbXBsZSwgc2Vzc2lvbik7CiAJY2FzZSBQRVJGX1JFQ09SRF9NTUFQOgotCQlyZXR1cm4gb3BzLT5tbWFwKGV2ZW50LCBzZWxmKTsKKwkJcmV0dXJuIG9wcy0+bW1hcChldmVudCwgc2FtcGxlLCBzZXNzaW9uKTsKIAljYXNlIFBFUkZfUkVDT1JEX0NPTU06Ci0JCXJldHVybiBvcHMtPmNvbW0oZXZlbnQsIHNlbGYpOworCQlyZXR1cm4gb3BzLT5jb21tKGV2ZW50LCBzYW1wbGUsIHNlc3Npb24pOwogCWNhc2UgUEVSRl9SRUNPUkRfRk9SSzoKLQkJcmV0dXJuIG9wcy0+Zm9yayhldmVudCwgc2VsZik7CisJCXJldHVybiBvcHMtPmZvcmsoZXZlbnQsIHNhbXBsZSwgc2Vzc2lvbik7CiAJY2FzZSBQRVJGX1JFQ09SRF9FWElUOgotCQlyZXR1cm4gb3BzLT5leGl0KGV2ZW50LCBzZWxmKTsKKwkJcmV0dXJuIG9wcy0+ZXhpdChldmVudCwgc2FtcGxlLCBzZXNzaW9uKTsKIAljYXNlIFBFUkZfUkVDT1JEX0xPU1Q6Ci0JCXJldHVybiBvcHMtPmxvc3QoZXZlbnQsIHNlbGYpOworCQlyZXR1cm4gb3BzLT5sb3N0KGV2ZW50LCBzYW1wbGUsIHNlc3Npb24pOwogCWNhc2UgUEVSRl9SRUNPUkRfUkVBRDoKLQkJcmV0dXJuIG9wcy0+cmVhZChldmVudCwgc2VsZik7CisJCXJldHVybiBvcHMtPnJlYWQoZXZlbnQsIHNhbXBsZSwgc2Vzc2lvbik7CiAJY2FzZSBQRVJGX1JFQ09SRF9USFJPVFRMRToKLQkJcmV0dXJuIG9wcy0+dGhyb3R0bGUoZXZlbnQsIHNlbGYpOworCQlyZXR1cm4gb3BzLT50aHJvdHRsZShldmVudCwgc2FtcGxlLCBzZXNzaW9uKTsKIAljYXNlIFBFUkZfUkVDT1JEX1VOVEhST1RUTEU6Ci0JCXJldHVybiBvcHMtPnVudGhyb3R0bGUoZXZlbnQsIHNlbGYpOwotCWNhc2UgUEVSRl9SRUNPUkRfSEVBREVSX0FUVFI6Ci0JCXJldHVybiBvcHMtPmF0dHIoZXZlbnQsIHNlbGYpOwotCWNhc2UgUEVSRl9SRUNPUkRfSEVBREVSX0VWRU5UX1RZUEU6Ci0JCXJldHVybiBvcHMtPmV2ZW50X3R5cGUoZXZlbnQsIHNlbGYpOwotCWNhc2UgUEVSRl9SRUNPUkRfSEVBREVSX1RSQUNJTkdfREFUQToKLQkJLyogc2V0dXAgZm9yIHJlYWRpbmcgYW1pZHN0IG1tYXAgKi8KLQkJbHNlZWsoc2VsZi0+ZmQsIG9mZnNldCArIGhlYWQsIFNFRUtfU0VUKTsKLQkJcmV0dXJuIG9wcy0+dHJhY2luZ19kYXRhKGV2ZW50LCBzZWxmKTsKLQljYXNlIFBFUkZfUkVDT1JEX0hFQURFUl9CVUlMRF9JRDoKLQkJcmV0dXJuIG9wcy0+YnVpbGRfaWQoZXZlbnQsIHNlbGYpOwotCWNhc2UgUEVSRl9SRUNPUkRfRklOSVNIRURfUk9VTkQ6Ci0JCXJldHVybiBvcHMtPmZpbmlzaGVkX3JvdW5kKGV2ZW50LCBzZWxmLCBvcHMpOworCQlyZXR1cm4gb3BzLT51bnRocm90dGxlKGV2ZW50LCBzYW1wbGUsIHNlc3Npb24pOwogCWRlZmF1bHQ6Ci0JCSsrc2VsZi0+aGlzdHMuc3RhdHMubnJfdW5rbm93bl9ldmVudHM7CisJCSsrc2Vzc2lvbi0+aGlzdHMuc3RhdHMubnJfdW5rbm93bl9ldmVudHM7CiAJCXJldHVybiAtMTsKIAl9CiB9CiAKK3N0YXRpYyBpbnQgcGVyZl9zZXNzaW9uX19wcmVwcm9jZXNzX3NhbXBsZShzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLAorCQkJCQkgICBldmVudF90ICpldmVudCwgc3RydWN0IHNhbXBsZV9kYXRhICpzYW1wbGUpCit7CisJaWYgKGV2ZW50LT5oZWFkZXIudHlwZSAhPSBQRVJGX1JFQ09SRF9TQU1QTEUgfHwKKwkgICAgIShzZXNzaW9uLT5zYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX0NBTExDSEFJTikpCisJCXJldHVybiAwOworCisJaWYgKCFpcF9jYWxsY2hhaW5fX3ZhbGlkKHNhbXBsZS0+Y2FsbGNoYWluLCBldmVudCkpIHsKKwkJcHJfZGVidWcoImNhbGwtY2hhaW4gcHJvYmxlbSB3aXRoIGV2ZW50LCBza2lwcGluZyBpdC5cbiIpOworCQkrK3Nlc3Npb24tPmhpc3RzLnN0YXRzLm5yX2ludmFsaWRfY2hhaW5zOworCQlzZXNzaW9uLT5oaXN0cy5zdGF0cy50b3RhbF9pbnZhbGlkX2NoYWlucyArPSBzYW1wbGUtPnBlcmlvZDsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBlcmZfc2Vzc2lvbl9fcHJvY2Vzc191c2VyX2V2ZW50KHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24sIGV2ZW50X3QgKmV2ZW50LAorCQkJCQkgICAgc3RydWN0IHBlcmZfZXZlbnRfb3BzICpvcHMsIHU2NCBmaWxlX29mZnNldCkKK3sKKwlkdW1wX2V2ZW50KHNlc3Npb24sIGV2ZW50LCBmaWxlX29mZnNldCwgTlVMTCk7CisKKwkvKiBUaGVzZSBldmVudHMgYXJlIHByb2Nlc3NlZCByaWdodCBhd2F5ICovCisJc3dpdGNoIChldmVudC0+aGVhZGVyLnR5cGUpIHsKKwljYXNlIFBFUkZfUkVDT1JEX0hFQURFUl9BVFRSOgorCQlyZXR1cm4gb3BzLT5hdHRyKGV2ZW50LCBzZXNzaW9uKTsKKwljYXNlIFBFUkZfUkVDT1JEX0hFQURFUl9FVkVOVF9UWVBFOgorCQlyZXR1cm4gb3BzLT5ldmVudF90eXBlKGV2ZW50LCBzZXNzaW9uKTsKKwljYXNlIFBFUkZfUkVDT1JEX0hFQURFUl9UUkFDSU5HX0RBVEE6CisJCS8qIHNldHVwIGZvciByZWFkaW5nIGFtaWRzdCBtbWFwICovCisJCWxzZWVrKHNlc3Npb24tPmZkLCBmaWxlX29mZnNldCwgU0VFS19TRVQpOworCQlyZXR1cm4gb3BzLT50cmFjaW5nX2RhdGEoZXZlbnQsIHNlc3Npb24pOworCWNhc2UgUEVSRl9SRUNPUkRfSEVBREVSX0JVSUxEX0lEOgorCQlyZXR1cm4gb3BzLT5idWlsZF9pZChldmVudCwgc2Vzc2lvbik7CisJY2FzZSBQRVJGX1JFQ09SRF9GSU5JU0hFRF9ST1VORDoKKwkJcmV0dXJuIG9wcy0+ZmluaXNoZWRfcm91bmQoZXZlbnQsIHNlc3Npb24sIG9wcyk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorfQorCitzdGF0aWMgaW50IHBlcmZfc2Vzc2lvbl9fcHJvY2Vzc19ldmVudChzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLAorCQkJCSAgICAgICBldmVudF90ICpldmVudCwKKwkJCQkgICAgICAgc3RydWN0IHBlcmZfZXZlbnRfb3BzICpvcHMsCisJCQkJICAgICAgIHU2NCBmaWxlX29mZnNldCkKK3sKKwlzdHJ1Y3Qgc2FtcGxlX2RhdGEgc2FtcGxlOworCWludCByZXQ7CisKKwlpZiAoc2Vzc2lvbi0+aGVhZGVyLm5lZWRzX3N3YXAgJiYgZXZlbnRfX3N3YXBfb3BzW2V2ZW50LT5oZWFkZXIudHlwZV0pCisJCWV2ZW50X19zd2FwX29wc1tldmVudC0+aGVhZGVyLnR5cGVdKGV2ZW50KTsKKworCWlmIChldmVudC0+aGVhZGVyLnR5cGUgPj0gUEVSRl9SRUNPUkRfSEVBREVSX01BWCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwloaXN0c19faW5jX25yX2V2ZW50cygmc2Vzc2lvbi0+aGlzdHMsIGV2ZW50LT5oZWFkZXIudHlwZSk7CisKKwlpZiAoZXZlbnQtPmhlYWRlci50eXBlID49IFBFUkZfUkVDT1JEX1VTRVJfVFlQRV9TVEFSVCkKKwkJcmV0dXJuIHBlcmZfc2Vzc2lvbl9fcHJvY2Vzc191c2VyX2V2ZW50KHNlc3Npb24sIGV2ZW50LCBvcHMsIGZpbGVfb2Zmc2V0KTsKKworCS8qCisJICogRm9yIGFsbCBrZXJuZWwgZXZlbnRzIHdlIGdldCB0aGUgc2FtcGxlIGRhdGEKKwkgKi8KKwlldmVudF9fcGFyc2Vfc2FtcGxlKGV2ZW50LCBzZXNzaW9uLCAmc2FtcGxlKTsKKworCS8qIFByZXByb2Nlc3Mgc2FtcGxlIHJlY29yZHMgLSBwcmVjaGVjayBjYWxsY2hhaW5zICovCisJaWYgKHBlcmZfc2Vzc2lvbl9fcHJlcHJvY2Vzc19zYW1wbGUoc2Vzc2lvbiwgZXZlbnQsICZzYW1wbGUpKQorCQlyZXR1cm4gMDsKKworCWlmIChvcHMtPm9yZGVyZWRfc2FtcGxlcykgeworCQlyZXQgPSBwZXJmX3Nlc3Npb25fcXVldWVfZXZlbnQoc2Vzc2lvbiwgZXZlbnQsICZzYW1wbGUsCisJCQkJCSAgICAgICBmaWxlX29mZnNldCk7CisJCWlmIChyZXQgIT0gLUVUSU1FKQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gcGVyZl9zZXNzaW9uX2RlbGl2ZXJfZXZlbnQoc2Vzc2lvbiwgZXZlbnQsICZzYW1wbGUsIG9wcywKKwkJCQkJICBmaWxlX29mZnNldCk7Cit9CisKIHZvaWQgcGVyZl9ldmVudF9oZWFkZXJfX2Jzd2FwKHN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlciAqc2VsZikKIHsKIAlzZWxmLT50eXBlID0gYnN3YXBfMzIoc2VsZi0+dHlwZSk7CkBAIC02NTYsMjEgKzgzOCwzMyBAQAogCXJldHVybiB0aHJlYWQ7CiB9CiAKLWludCBkb19yZWFkKGludCBmZCwgdm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSkKK3N0YXRpYyB2b2lkIHBlcmZfc2Vzc2lvbl9fd2Fybl9hYm91dF9lcnJvcnMoY29uc3Qgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwKKwkJCQkJICAgIGNvbnN0IHN0cnVjdCBwZXJmX2V2ZW50X29wcyAqb3BzKQogewotCXZvaWQgKmJ1Zl9zdGFydCA9IGJ1ZjsKLQotCXdoaWxlIChzaXplKSB7Ci0JCWludCByZXQgPSByZWFkKGZkLCBidWYsIHNpemUpOwotCi0JCWlmIChyZXQgPD0gMCkKLQkJCXJldHVybiByZXQ7Ci0KLQkJc2l6ZSAtPSByZXQ7Ci0JCWJ1ZiArPSByZXQ7CisJaWYgKG9wcy0+bG9zdCA9PSBldmVudF9fcHJvY2Vzc19sb3N0ICYmCisJICAgIHNlc3Npb24tPmhpc3RzLnN0YXRzLnRvdGFsX2xvc3QgIT0gMCkgeworCQl1aV9fd2FybmluZygiUHJvY2Vzc2VkICVMdSBldmVudHMgYW5kIExPU1QgJUx1IVxuXG4iCisJCQkgICAgIkNoZWNrIElPL0NQVSBvdmVybG9hZCFcblxuIiwKKwkJCSAgICBzZXNzaW9uLT5oaXN0cy5zdGF0cy50b3RhbF9wZXJpb2QsCisJCQkgICAgc2Vzc2lvbi0+aGlzdHMuc3RhdHMudG90YWxfbG9zdCk7CiAJfQogCi0JcmV0dXJuIGJ1ZiAtIGJ1Zl9zdGFydDsKKwlpZiAoc2Vzc2lvbi0+aGlzdHMuc3RhdHMubnJfdW5rbm93bl9ldmVudHMgIT0gMCkgeworCQl1aV9fd2FybmluZygiRm91bmQgJXUgdW5rbm93biBldmVudHMhXG5cbiIKKwkJCSAgICAiSXMgdGhpcyBhbiBvbGRlciB0b29sIHByb2Nlc3NpbmcgYSBwZXJmLmRhdGEgIgorCQkJICAgICJmaWxlIGdlbmVyYXRlZCBieSBhIG1vcmUgcmVjZW50IHRvb2w/XG5cbiIKKwkJCSAgICAiSWYgdGhhdCBpcyBub3QgdGhlIGNhc2UsIGNvbnNpZGVyICIKKwkJCSAgICAicmVwb3J0aW5nIHRvIGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmcuXG5cbiIsCisJCQkgICAgc2Vzc2lvbi0+aGlzdHMuc3RhdHMubnJfdW5rbm93bl9ldmVudHMpOworCX0KKworIAlpZiAoc2Vzc2lvbi0+aGlzdHMuc3RhdHMubnJfaW52YWxpZF9jaGFpbnMgIT0gMCkgeworIAkJdWlfX3dhcm5pbmcoIkZvdW5kIGludmFsaWQgY2FsbGNoYWlucyFcblxuIgorIAkJCSAgICAiJXUgb3V0IG9mICV1IGV2ZW50cyB3ZXJlIGRpc2NhcmRlZCBmb3IgdGhpcyByZWFzb24uXG5cbiIKKyAJCQkgICAgIkNvbnNpZGVyIHJlcG9ydGluZyB0byBsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnLlxuXG4iLAorIAkJCSAgICBzZXNzaW9uLT5oaXN0cy5zdGF0cy5ucl9pbnZhbGlkX2NoYWlucywKKyAJCQkgICAgc2Vzc2lvbi0+aGlzdHMuc3RhdHMubnJfZXZlbnRzW1BFUkZfUkVDT1JEX1NBTVBMRV0pOworIAl9CiB9CiAKICNkZWZpbmUgc2Vzc2lvbl9kb25lKCkJKCoodm9sYXRpbGUgaW50ICopKCZzZXNzaW9uX2RvbmUpKQpAQCAtNjkwLDcgKzg4NCw3IEBACiAKIAloZWFkID0gMDsKIG1vcmU6Ci0JZXJyID0gZG9fcmVhZChzZWxmLT5mZCwgJmV2ZW50LCBzaXplb2Yoc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyKSk7CisJZXJyID0gcmVhZG4oc2VsZi0+ZmQsICZldmVudCwgc2l6ZW9mKHN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlcikpOwogCWlmIChlcnIgPD0gMCkgewogCQlpZiAoZXJyID09IDApCiAJCQlnb3RvIGRvbmU7CkBAIC03MTAsOCArOTA0LDcgQEAKIAlwICs9IHNpemVvZihzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIpOwogCiAJaWYgKHNpemUgLSBzaXplb2Yoc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyKSkgewotCQllcnIgPSBkb19yZWFkKHNlbGYtPmZkLCBwLAotCQkJICAgICAgc2l6ZSAtIHNpemVvZihzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIpKTsKKwkJZXJyID0gcmVhZG4oc2VsZi0+ZmQsIHAsIHNpemUgLSBzaXplb2Yoc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyKSk7CiAJCWlmIChlcnIgPD0gMCkgewogCQkJaWYgKGVyciA9PSAwKSB7CiAJCQkJcHJfZXJyKCJ1bmV4cGVjdGVkIGVuZCBvZiBldmVudCBzdHJlYW1cbiIpOwpAQCAtNzI0LDggKzkxNyw3IEBACiAJfQogCiAJaWYgKHNpemUgPT0gMCB8fAotCSAgICAoc2tpcCA9IHBlcmZfc2Vzc2lvbl9fcHJvY2Vzc19ldmVudChzZWxmLCAmZXZlbnQsIG9wcywKLQkJCQkJCTAsIGhlYWQpKSA8IDApIHsKKwkgICAgKHNraXAgPSBwZXJmX3Nlc3Npb25fX3Byb2Nlc3NfZXZlbnQoc2VsZiwgJmV2ZW50LCBvcHMsIGhlYWQpKSA8IDApIHsKIAkJZHVtcF9wcmludGYoIiUjTHggWyUjeF06IHNraXBwaW5nIHVua25vd24gaGVhZGVyIHR5cGU6ICVkXG4iLAogCQkJICAgIGhlYWQsIGV2ZW50LmhlYWRlci5zaXplLCBldmVudC5oZWFkZXIudHlwZSk7CiAJCS8qCkBAIC03NDAsOSArOTMyLDYgQEAKIAogCWhlYWQgKz0gc2l6ZTsKIAotCWR1bXBfcHJpbnRmKCJcbiUjTHggWyUjeF06IGV2ZW50OiAlZFxuIiwKLQkJICAgIGhlYWQsIGV2ZW50LmhlYWRlci5zaXplLCBldmVudC5oZWFkZXIudHlwZSk7Ci0KIAlpZiAoc2tpcCA+IDApCiAJCWhlYWQgKz0gc2tpcDsKIApAQCAtNzUxLDgyICs5NDAsOTEgQEAKIGRvbmU6CiAJZXJyID0gMDsKIG91dF9lcnI6CisJcGVyZl9zZXNzaW9uX193YXJuX2Fib3V0X2Vycm9ycyhzZWxmLCBvcHMpOworCXBlcmZfc2Vzc2lvbl9mcmVlX3NhbXBsZV9idWZmZXJzKHNlbGYpOwogCXJldHVybiBlcnI7CiB9CiAKLWludCBfX3BlcmZfc2Vzc2lvbl9fcHJvY2Vzc19ldmVudHMoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2VsZiwKK2ludCBfX3BlcmZfc2Vzc2lvbl9fcHJvY2Vzc19ldmVudHMoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwKIAkJCQkgICB1NjQgZGF0YV9vZmZzZXQsIHU2NCBkYXRhX3NpemUsCiAJCQkJICAgdTY0IGZpbGVfc2l6ZSwgc3RydWN0IHBlcmZfZXZlbnRfb3BzICpvcHMpCiB7Ci0JaW50IGVyciwgbW1hcF9wcm90LCBtbWFwX2ZsYWdzOwotCXU2NCBoZWFkLCBzaGlmdDsKLQl1NjQgb2Zmc2V0ID0gMDsKLQlzaXplX3QJcGFnZV9zaXplOworCXU2NCBoZWFkLCBwYWdlX29mZnNldCwgZmlsZV9vZmZzZXQsIGZpbGVfcG9zLCBwcm9ncmVzc19uZXh0OworCWludCBlcnIsIG1tYXBfcHJvdCwgbW1hcF9mbGFncywgbWFwX2lkeCA9IDA7CisJc3RydWN0IHVpX3Byb2dyZXNzICpwcm9ncmVzczsKKwlzaXplX3QJcGFnZV9zaXplLCBtbWFwX3NpemU7CisJY2hhciAqYnVmLCAqbW1hcHNbOF07CiAJZXZlbnRfdCAqZXZlbnQ7CiAJdWludDMyX3Qgc2l6ZTsKLQljaGFyICpidWY7Ci0Jc3RydWN0IHVpX3Byb2dyZXNzICpwcm9ncmVzcyA9IHVpX3Byb2dyZXNzX19uZXcoIlByb2Nlc3NpbmcgZXZlbnRzLi4uIiwKLQkJCQkJCQlzZWxmLT5zaXplKTsKLQlpZiAocHJvZ3Jlc3MgPT0gTlVMTCkKLQkJcmV0dXJuIC0xOwogCiAJcGVyZl9ldmVudF9vcHNfX2ZpbGxfZGVmYXVsdHMob3BzKTsKIAogCXBhZ2Vfc2l6ZSA9IHN5c2NvbmYoX1NDX1BBR0VTSVpFKTsKIAotCWhlYWQgPSBkYXRhX29mZnNldDsKLQlzaGlmdCA9IHBhZ2Vfc2l6ZSAqIChoZWFkIC8gcGFnZV9zaXplKTsKLQlvZmZzZXQgKz0gc2hpZnQ7Ci0JaGVhZCAtPSBzaGlmdDsKKwlwYWdlX29mZnNldCA9IHBhZ2Vfc2l6ZSAqIChkYXRhX29mZnNldCAvIHBhZ2Vfc2l6ZSk7CisJZmlsZV9vZmZzZXQgPSBwYWdlX29mZnNldDsKKwloZWFkID0gZGF0YV9vZmZzZXQgLSBwYWdlX29mZnNldDsKKworCWlmIChkYXRhX29mZnNldCArIGRhdGFfc2l6ZSA8IGZpbGVfc2l6ZSkKKwkJZmlsZV9zaXplID0gZGF0YV9vZmZzZXQgKyBkYXRhX3NpemU7CisKKwlwcm9ncmVzc19uZXh0ID0gZmlsZV9zaXplIC8gMTY7CisJcHJvZ3Jlc3MgPSB1aV9wcm9ncmVzc19fbmV3KCJQcm9jZXNzaW5nIGV2ZW50cy4uLiIsIGZpbGVfc2l6ZSk7CisJaWYgKHByb2dyZXNzID09IE5VTEwpCisJCXJldHVybiAtMTsKKworCW1tYXBfc2l6ZSA9IHNlc3Npb24tPm1tYXBfd2luZG93OworCWlmIChtbWFwX3NpemUgPiBmaWxlX3NpemUpCisJCW1tYXBfc2l6ZSA9IGZpbGVfc2l6ZTsKKworCW1lbXNldChtbWFwcywgMCwgc2l6ZW9mKG1tYXBzKSk7CiAKIAltbWFwX3Byb3QgID0gUFJPVF9SRUFEOwogCW1tYXBfZmxhZ3MgPSBNQVBfU0hBUkVEOwogCi0JaWYgKHNlbGYtPmhlYWRlci5uZWVkc19zd2FwKSB7CisJaWYgKHNlc3Npb24tPmhlYWRlci5uZWVkc19zd2FwKSB7CiAJCW1tYXBfcHJvdCAgfD0gUFJPVF9XUklURTsKIAkJbW1hcF9mbGFncyA9IE1BUF9QUklWQVRFOwogCX0KIHJlbWFwOgotCWJ1ZiA9IG1tYXAoTlVMTCwgcGFnZV9zaXplICogc2VsZi0+bW1hcF93aW5kb3csIG1tYXBfcHJvdCwKLQkJICAgbW1hcF9mbGFncywgc2VsZi0+ZmQsIG9mZnNldCk7CisJYnVmID0gbW1hcChOVUxMLCBtbWFwX3NpemUsIG1tYXBfcHJvdCwgbW1hcF9mbGFncywgc2Vzc2lvbi0+ZmQsCisJCSAgIGZpbGVfb2Zmc2V0KTsKIAlpZiAoYnVmID09IE1BUF9GQUlMRUQpIHsKIAkJcHJfZXJyKCJmYWlsZWQgdG8gbW1hcCBmaWxlXG4iKTsKIAkJZXJyID0gLWVycm5vOwogCQlnb3RvIG91dF9lcnI7CiAJfQorCW1tYXBzW21hcF9pZHhdID0gYnVmOworCW1hcF9pZHggPSAobWFwX2lkeCArIDEpICYgKEFSUkFZX1NJWkUobW1hcHMpIC0gMSk7CisJZmlsZV9wb3MgPSBmaWxlX29mZnNldCArIGhlYWQ7CiAKIG1vcmU6CiAJZXZlbnQgPSAoZXZlbnRfdCAqKShidWYgKyBoZWFkKTsKLQl1aV9wcm9ncmVzc19fdXBkYXRlKHByb2dyZXNzLCBvZmZzZXQpOwogCi0JaWYgKHNlbGYtPmhlYWRlci5uZWVkc19zd2FwKQorCWlmIChzZXNzaW9uLT5oZWFkZXIubmVlZHNfc3dhcCkKIAkJcGVyZl9ldmVudF9oZWFkZXJfX2Jzd2FwKCZldmVudC0+aGVhZGVyKTsKIAlzaXplID0gZXZlbnQtPmhlYWRlci5zaXplOwogCWlmIChzaXplID09IDApCiAJCXNpemUgPSA4OwogCi0JaWYgKGhlYWQgKyBldmVudC0+aGVhZGVyLnNpemUgPj0gcGFnZV9zaXplICogc2VsZi0+bW1hcF93aW5kb3cpIHsKLQkJaW50IG11bm1hcF9yZXQ7CisJaWYgKGhlYWQgKyBldmVudC0+aGVhZGVyLnNpemUgPj0gbW1hcF9zaXplKSB7CisJCWlmIChtbWFwc1ttYXBfaWR4XSkgeworCQkJbXVubWFwKG1tYXBzW21hcF9pZHhdLCBtbWFwX3NpemUpOworCQkJbW1hcHNbbWFwX2lkeF0gPSBOVUxMOworCQl9CiAKLQkJc2hpZnQgPSBwYWdlX3NpemUgKiAoaGVhZCAvIHBhZ2Vfc2l6ZSk7Ci0KLQkJbXVubWFwX3JldCA9IG11bm1hcChidWYsIHBhZ2Vfc2l6ZSAqIHNlbGYtPm1tYXBfd2luZG93KTsKLQkJYXNzZXJ0KG11bm1hcF9yZXQgPT0gMCk7Ci0KLQkJb2Zmc2V0ICs9IHNoaWZ0OwotCQloZWFkIC09IHNoaWZ0OworCQlwYWdlX29mZnNldCA9IHBhZ2Vfc2l6ZSAqIChoZWFkIC8gcGFnZV9zaXplKTsKKwkJZmlsZV9vZmZzZXQgKz0gcGFnZV9vZmZzZXQ7CisJCWhlYWQgLT0gcGFnZV9vZmZzZXQ7CiAJCWdvdG8gcmVtYXA7CiAJfQogCiAJc2l6ZSA9IGV2ZW50LT5oZWFkZXIuc2l6ZTsKIAotCWR1bXBfcHJpbnRmKCJcbiUjTHggWyUjeF06IGV2ZW50OiAlZFxuIiwKLQkJICAgIG9mZnNldCArIGhlYWQsIGV2ZW50LT5oZWFkZXIuc2l6ZSwgZXZlbnQtPmhlYWRlci50eXBlKTsKLQogCWlmIChzaXplID09IDAgfHwKLQkgICAgcGVyZl9zZXNzaW9uX19wcm9jZXNzX2V2ZW50KHNlbGYsIGV2ZW50LCBvcHMsIG9mZnNldCwgaGVhZCkgPCAwKSB7CisJICAgIHBlcmZfc2Vzc2lvbl9fcHJvY2Vzc19ldmVudChzZXNzaW9uLCBldmVudCwgb3BzLCBmaWxlX3BvcykgPCAwKSB7CiAJCWR1bXBfcHJpbnRmKCIlI0x4IFslI3hdOiBza2lwcGluZyB1bmtub3duIGhlYWRlciB0eXBlOiAlZFxuIiwKLQkJCSAgICBvZmZzZXQgKyBoZWFkLCBldmVudC0+aGVhZGVyLnNpemUsCisJCQkgICAgZmlsZV9vZmZzZXQgKyBoZWFkLCBldmVudC0+aGVhZGVyLnNpemUsCiAJCQkgICAgZXZlbnQtPmhlYWRlci50eXBlKTsKIAkJLyoKIAkJICogYXNzdW1lIHdlIGxvc3QgdHJhY2sgb2YgdGhlIHN0cmVhbSwgY2hlY2sgYWxpZ25tZW50LCBhbmQKQEAgLTgzOSwxOSArMTAzNywyNCBAQAogCX0KIAogCWhlYWQgKz0gc2l6ZTsKKwlmaWxlX3BvcyArPSBzaXplOwogCi0JaWYgKG9mZnNldCArIGhlYWQgPj0gZGF0YV9vZmZzZXQgKyBkYXRhX3NpemUpCi0JCWdvdG8gZG9uZTsKKwlpZiAoZmlsZV9wb3MgPj0gcHJvZ3Jlc3NfbmV4dCkgeworCQlwcm9ncmVzc19uZXh0ICs9IGZpbGVfc2l6ZSAvIDE2OworCQl1aV9wcm9ncmVzc19fdXBkYXRlKHByb2dyZXNzLCBmaWxlX3Bvcyk7CisJfQogCi0JaWYgKG9mZnNldCArIGhlYWQgPCBmaWxlX3NpemUpCisJaWYgKGZpbGVfcG9zIDwgZmlsZV9zaXplKQogCQlnb3RvIG1vcmU7Ci1kb25lOgorCiAJZXJyID0gMDsKIAkvKiBkbyB0aGUgZmluYWwgZmx1c2ggZm9yIG9yZGVyZWQgc2FtcGxlcyAqLwotCXNlbGYtPm9yZGVyZWRfc2FtcGxlcy5uZXh0X2ZsdXNoID0gVUxMT05HX01BWDsKLQlmbHVzaF9zYW1wbGVfcXVldWUoc2VsZiwgb3BzKTsKKwlzZXNzaW9uLT5vcmRlcmVkX3NhbXBsZXMubmV4dF9mbHVzaCA9IFVMTE9OR19NQVg7CisJZmx1c2hfc2FtcGxlX3F1ZXVlKHNlc3Npb24sIG9wcyk7CiBvdXRfZXJyOgogCXVpX3Byb2dyZXNzX19kZWxldGUocHJvZ3Jlc3MpOworCXBlcmZfc2Vzc2lvbl9fd2Fybl9hYm91dF9lcnJvcnMoc2Vzc2lvbiwgb3BzKTsKKwlwZXJmX3Nlc3Npb25fZnJlZV9zYW1wbGVfYnVmZmVycyhzZXNzaW9uKTsKIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvc2Vzc2lvbi5oIGIvdG9vbHMvcGVyZi91dGlsL3Nlc3Npb24uaAppbmRleCA5ZmEwZmMyLi5kZWNkODNmIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvc2Vzc2lvbi5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9zZXNzaW9uLmgKQEAgLTE3LDggKzE3LDEyIEBACiAJdTY0CQkJbGFzdF9mbHVzaDsKIAl1NjQJCQluZXh0X2ZsdXNoOwogCXU2NAkJCW1heF90aW1lc3RhbXA7Ci0Jc3RydWN0IGxpc3RfaGVhZAlzYW1wbGVzX2hlYWQ7Ci0Jc3RydWN0IHNhbXBsZV9xdWV1ZQkqbGFzdF9pbnNlcnRlZDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXNhbXBsZXM7CisJc3RydWN0IGxpc3RfaGVhZAlzYW1wbGVfY2FjaGU7CisJc3RydWN0IGxpc3RfaGVhZAl0b19mcmVlOworCXN0cnVjdCBzYW1wbGVfcXVldWUJKnNhbXBsZV9idWZmZXI7CisJc3RydWN0IHNhbXBsZV9xdWV1ZQkqbGFzdF9zYW1wbGU7CisJaW50CQkJc2FtcGxlX2J1ZmZlcl9pZHg7CiB9OwogCiBzdHJ1Y3QgcGVyZl9zZXNzaW9uIHsKQEAgLTQyLDYgKzQ2LDggQEAKIAlpbnQJCQlmZDsKIAlib29sCQkJZmRfcGlwZTsKIAlib29sCQkJcmVwaXBlOworCWJvb2wJCQlzYW1wbGVfaWRfYWxsOworCXUxNgkJCWlkX2hkcl9zaXplOwogCWludAkJCWN3ZGxlbjsKIAljaGFyCQkJKmN3ZDsKIAlzdHJ1Y3Qgb3JkZXJlZF9zYW1wbGVzCW9yZGVyZWRfc2FtcGxlczsKQEAgLTUwLDcgKzU2LDkgQEAKIAogc3RydWN0IHBlcmZfZXZlbnRfb3BzOwogCi10eXBlZGVmIGludCAoKmV2ZW50X29wKShldmVudF90ICpzZWxmLCBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKTsKK3R5cGVkZWYgaW50ICgqZXZlbnRfb3ApKGV2ZW50X3QgKnNlbGYsIHN0cnVjdCBzYW1wbGVfZGF0YSAqc2FtcGxlLAorCQkJc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbik7Cit0eXBlZGVmIGludCAoKmV2ZW50X3N5bnRoX29wKShldmVudF90ICpzZWxmLCBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKTsKIHR5cGVkZWYgaW50ICgqZXZlbnRfb3AyKShldmVudF90ICpzZWxmLCBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLAogCQkJIHN0cnVjdCBwZXJmX2V2ZW50X29wcyAqb3BzKTsKIApAQCAtNjMsMTYgKzcxLDE5IEBACiAJCQlsb3N0LAogCQkJcmVhZCwKIAkJCXRocm90dGxlLAotCQkJdW50aHJvdHRsZSwKLQkJCWF0dHIsCisJCQl1bnRocm90dGxlOworCWV2ZW50X3N5bnRoX29wCWF0dHIsCiAJCQlldmVudF90eXBlLAogCQkJdHJhY2luZ19kYXRhLAogCQkJYnVpbGRfaWQ7CiAJZXZlbnRfb3AyCWZpbmlzaGVkX3JvdW5kOwogCWJvb2wJCW9yZGVyZWRfc2FtcGxlczsKKwlib29sCQlvcmRlcmluZ19yZXF1aXJlc190aW1lc3RhbXBzOwogfTsKIAotc3RydWN0IHBlcmZfc2Vzc2lvbiAqcGVyZl9zZXNzaW9uX19uZXcoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBtb2RlLCBib29sIGZvcmNlLCBib29sIHJlcGlwZSk7CitzdHJ1Y3QgcGVyZl9zZXNzaW9uICpwZXJmX3Nlc3Npb25fX25ldyhjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IG1vZGUsCisJCQkJICAgICAgIGJvb2wgZm9yY2UsIGJvb2wgcmVwaXBlLAorCQkJCSAgICAgICBzdHJ1Y3QgcGVyZl9ldmVudF9vcHMgKm9wcyk7CiB2b2lkIHBlcmZfc2Vzc2lvbl9fZGVsZXRlKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYpOwogCiB2b2lkIHBlcmZfZXZlbnRfaGVhZGVyX19ic3dhcChzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIgKnNlbGYpOwpAQCAtOTgsOCArMTA5LDkgQEAKIAogaW50IHBlcmZfc2Vzc2lvbl9fY3JlYXRlX2tlcm5lbF9tYXBzKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYpOwogCi1pbnQgZG9fcmVhZChpbnQgZmQsIHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUpOwogdm9pZCBwZXJmX3Nlc3Npb25fX3VwZGF0ZV9zYW1wbGVfdHlwZShzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmKTsKK3ZvaWQgcGVyZl9zZXNzaW9uX19zZXRfc2FtcGxlX2lkX2FsbChzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLCBib29sIHZhbHVlKTsKK3ZvaWQgcGVyZl9zZXNzaW9uX19zZXRfc2FtcGxlX3R5cGUoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwgdTY0IHR5cGUpOwogdm9pZCBwZXJmX3Nlc3Npb25fX3JlbW92ZV90aHJlYWQoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2VsZiwgc3RydWN0IHRocmVhZCAqdGgpOwogCiBzdGF0aWMgaW5saW5lCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvc29ydC5jIGIvdG9vbHMvcGVyZi91dGlsL3NvcnQuYwppbmRleCBiNjJhNTUzLi5mNDRmYTU0IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvc29ydC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9zb3J0LmMKQEAgLTE3MCw3ICsxNzAsNyBAQAogCQlyZXR1cm4gcmVwc2VwX3NucHJpbnRmKGJmLCBzaXplLCAiJS0qcyIsIHdpZHRoLCBkc29fbmFtZSk7CiAJfQogCi0JcmV0dXJuIHJlcHNlcF9zbnByaW50ZihiZiwgc2l6ZSwgIiUqTHgiLCB3aWR0aCwgc2VsZi0+aXApOworCXJldHVybiByZXBzZXBfc25wcmludGYoYmYsIHNpemUsICIlLSpzIiwgd2lkdGgsICJbdW5rbm93bl0iKTsKIH0KIAogLyogLS1zb3J0IHN5bWJvbCAqLwpAQCAtMTk2LDcgKzE5Niw3IEBACiAKIAlpZiAodmVyYm9zZSkgewogCQljaGFyIG8gPSBzZWxmLT5tcy5tYXAgPyBkc29fX3N5bXRhYl9vcmlnaW4oc2VsZi0+bXMubWFwLT5kc28pIDogJyEnOwotCQlyZXQgKz0gcmVwc2VwX3NucHJpbnRmKGJmLCBzaXplLCAiJSpMeCAlYyAiLAorCQlyZXQgKz0gcmVwc2VwX3NucHJpbnRmKGJmLCBzaXplLCAiJS0jKmxseCAlYyAiLAogCQkJCSAgICAgICBCSVRTX1BFUl9MT05HIC8gNCwgc2VsZi0+aXAsIG8pOwogCX0KIApAQCAtMjA1LDcgKzIwNSw3IEBACiAJCXJldCArPSByZXBzZXBfc25wcmludGYoYmYgKyByZXQsIHNpemUgLSByZXQsICIlcyIsCiAJCQkJICAgICAgIHNlbGYtPm1zLnN5bS0+bmFtZSk7CiAJZWxzZQotCQlyZXQgKz0gcmVwc2VwX3NucHJpbnRmKGJmICsgcmV0LCBzaXplIC0gcmV0LCAiJSpMeCIsCisJCXJldCArPSByZXBzZXBfc25wcmludGYoYmYgKyByZXQsIHNpemUgLSByZXQsICIlLSMqbGx4IiwKIAkJCQkgICAgICAgQklUU19QRVJfTE9ORyAvIDQsIHNlbGYtPmlwKTsKIAogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvc3ltYm9sLmMgYi90b29scy9wZXJmL3V0aWwvc3ltYm9sLmMKaW5kZXggNDM5YWI5NC4uMTVjY2ZiYSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuYwpAQCAtMjIsNiArMjIsMTAgQEAKICNpbmNsdWRlIDxsaW1pdHMuaD4KICNpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPgogCisjaWZuZGVmIEtTWU1fTkFNRV9MRU4KKyNkZWZpbmUgS1NZTV9OQU1FX0xFTiAxMjgKKyNlbmRpZgorCiAjaWZuZGVmIE5UX0dOVV9CVUlMRF9JRAogI2RlZmluZSBOVF9HTlVfQlVJTERfSUQgMwogI2VuZGlmCkBAIC00MSw2ICs0NSw3IEBACiAJLmV4Y2x1ZGVfb3RoZXIJICA9IHRydWUsCiAJLnVzZV9tb2R1bGVzCSAgPSB0cnVlLAogCS50cnlfdm1saW51eF9wYXRoID0gdHJ1ZSwKKwkuc3ltZnMgICAgICAgICAgICA9ICIiLAogfTsKIAogaW50IGRzb19fbmFtZV9sZW4oY29uc3Qgc3RydWN0IGRzbyAqc2VsZikKQEAgLTkyLDcgKzk3LDcgQEAKIAkJcHJldiA9IGN1cnI7CiAJCWN1cnIgPSByYl9lbnRyeShuZCwgc3RydWN0IHN5bWJvbCwgcmJfbm9kZSk7CiAKLQkJaWYgKHByZXYtPmVuZCA9PSBwcmV2LT5zdGFydCkKKwkJaWYgKHByZXYtPmVuZCA9PSBwcmV2LT5zdGFydCAmJiBwcmV2LT5lbmQgIT0gY3Vyci0+c3RhcnQpCiAJCQlwcmV2LT5lbmQgPSBjdXJyLT5zdGFydCAtIDE7CiAJfQogCkBAIC0xMjEsNyArMTI2LDcgQEAKIAkgKiBXZSBzdGlsbCBoYXZlbid0IHRoZSBhY3R1YWwgc3ltYm9scywgc28gZ3Vlc3MgdGhlCiAJICogbGFzdCBtYXAgZmluYWwgYWRkcmVzcy4KIAkgKi8KLQljdXJyLT5lbmQgPSB+MFVMOworCWN1cnItPmVuZCA9IH4wVUxMOwogfQogCiBzdGF0aWMgdm9pZCBtYXBfZ3JvdXBzX19maXh1cF9lbmQoc3RydWN0IG1hcF9ncm91cHMgKnNlbGYpCkBAIC00MjUsMTYgKzQzMCwyNSBAQAogCiBpbnQga2FsbHN5bXNfX3BhcnNlKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCB2b2lkICphcmcsCiAJCSAgICBpbnQgKCpwcm9jZXNzX3N5bWJvbCkodm9pZCAqYXJnLCBjb25zdCBjaGFyICpuYW1lLAotCQkJCQkJICAgICBjaGFyIHR5cGUsIHU2NCBzdGFydCkpCisJCQkJCSAgY2hhciB0eXBlLCB1NjQgc3RhcnQsIHU2NCBlbmQpKQogewogCWNoYXIgKmxpbmUgPSBOVUxMOwogCXNpemVfdCBuOwotCWludCBlcnIgPSAwOworCWludCBlcnIgPSAtMTsKKwl1NjQgcHJldl9zdGFydCA9IDA7CisJY2hhciBwcmV2X3N5bWJvbF90eXBlID0gMDsKKwljaGFyICpwcmV2X3N5bWJvbF9uYW1lOwogCUZJTEUgKmZpbGUgPSBmb3BlbihmaWxlbmFtZSwgInIiKTsKIAogCWlmIChmaWxlID09IE5VTEwpCiAJCWdvdG8gb3V0X2ZhaWx1cmU7CiAKKwlwcmV2X3N5bWJvbF9uYW1lID0gbWFsbG9jKEtTWU1fTkFNRV9MRU4pOworCWlmIChwcmV2X3N5bWJvbF9uYW1lID09IE5VTEwpCisJCWdvdG8gb3V0X2Nsb3NlOworCisJZXJyID0gMDsKKwogCXdoaWxlICghZmVvZihmaWxlKSkgewogCQl1NjQgc3RhcnQ7CiAJCWludCBsaW5lX2xlbiwgbGVuOwpAQCAtNDU0LDE0ICs0NjgsMzMgQEAKIAkJCWNvbnRpbnVlOwogCiAJCXN5bWJvbF90eXBlID0gdG91cHBlcihsaW5lW2xlbl0pOwotCQlzeW1ib2xfbmFtZSA9IGxpbmUgKyBsZW4gKyAyOworCQlsZW4gKz0gMjsKKwkJc3ltYm9sX25hbWUgPSBsaW5lICsgbGVuOworCQlsZW4gPSBsaW5lX2xlbiAtIGxlbjsKIAotCQllcnIgPSBwcm9jZXNzX3N5bWJvbChhcmcsIHN5bWJvbF9uYW1lLCBzeW1ib2xfdHlwZSwgc3RhcnQpOwotCQlpZiAoZXJyKQorCQlpZiAobGVuID49IEtTWU1fTkFNRV9MRU4pIHsKKwkJCWVyciA9IC0xOwogCQkJYnJlYWs7CisJCX0KKworCQlpZiAocHJldl9zeW1ib2xfdHlwZSkgeworCQkJdTY0IGVuZCA9IHN0YXJ0OworCQkJaWYgKGVuZCAhPSBwcmV2X3N0YXJ0KQorCQkJCS0tZW5kOworCQkJZXJyID0gcHJvY2Vzc19zeW1ib2woYXJnLCBwcmV2X3N5bWJvbF9uYW1lLAorCQkJCQkgICAgIHByZXZfc3ltYm9sX3R5cGUsIHByZXZfc3RhcnQsIGVuZCk7CisJCQlpZiAoZXJyKQorCQkJCWJyZWFrOworCQl9CisKKwkJbWVtY3B5KHByZXZfc3ltYm9sX25hbWUsIHN5bWJvbF9uYW1lLCBsZW4gKyAxKTsKKwkJcHJldl9zeW1ib2xfdHlwZSA9IHN5bWJvbF90eXBlOworCQlwcmV2X3N0YXJ0ID0gc3RhcnQ7CiAJfQogCisJZnJlZShwcmV2X3N5bWJvbF9uYW1lKTsKIAlmcmVlKGxpbmUpOworb3V0X2Nsb3NlOgogCWZjbG9zZShmaWxlKTsKIAlyZXR1cm4gZXJyOwogCkBAIC00ODMsNyArNTE2LDcgQEAKIH0KIAogc3RhdGljIGludCBtYXBfX3Byb2Nlc3Nfa2FsbHN5bV9zeW1ib2wodm9pZCAqYXJnLCBjb25zdCBjaGFyICpuYW1lLAotCQkJCSAgICAgICBjaGFyIHR5cGUsIHU2NCBzdGFydCkKKwkJCQkgICAgICAgY2hhciB0eXBlLCB1NjQgc3RhcnQsIHU2NCBlbmQpCiB7CiAJc3RydWN0IHN5bWJvbCAqc3ltOwogCXN0cnVjdCBwcm9jZXNzX2thbGxzeW1zX2FyZ3MgKmEgPSBhcmc7CkBAIC00OTIsMTEgKzUyNSw4IEBACiAJaWYgKCFzeW1ib2xfdHlwZV9faXNfYSh0eXBlLCBhLT5tYXAtPnR5cGUpKQogCQlyZXR1cm4gMDsKIAotCS8qCi0JICogV2lsbCBmaXggdXAgdGhlIGVuZCBsYXRlciwgd2hlbiB3ZSBoYXZlIGFsbCBzeW1ib2xzIHNvcnRlZC4KLQkgKi8KLQlzeW0gPSBzeW1ib2xfX25ldyhzdGFydCwgMCwga2FsbHN5bXMyZWxmX3R5cGUodHlwZSksIG5hbWUpOwotCisJc3ltID0gc3ltYm9sX19uZXcoc3RhcnQsIGVuZCAtIHN0YXJ0ICsgMSwKKwkJCSAga2FsbHN5bXMyZWxmX3R5cGUodHlwZSksIG5hbWUpOwogCWlmIChzeW0gPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJLyoKQEAgLTY0OSw3ICs2NzksNiBAQAogCWlmIChkc29fX2xvYWRfYWxsX2thbGxzeW1zKHNlbGYsIGZpbGVuYW1lLCBtYXApIDwgMCkKIAkJcmV0dXJuIC0xOwogCi0Jc3ltYm9sc19fZml4dXBfZW5kKCZzZWxmLT5zeW1ib2xzW21hcC0+dHlwZV0pOwogCWlmIChzZWxmLT5rZXJuZWwgPT0gRFNPX1RZUEVfR1VFU1RfS0VSTkVMKQogCQlzZWxmLT5vcmlnaW4gPSBEU09fX09SSUdfR1VFU1RfS0VSTkVMOwogCWVsc2UKQEAgLTgzOSw4ICs4NjgsMTEgQEAKIAljaGFyIHN5bXBsdG5hbWVbMTAyNF07CiAJRWxmICplbGY7CiAJaW50IG5yID0gMCwgc3ltaWR4LCBmZCwgZXJyID0gMDsKKwljaGFyIG5hbWVbUEFUSF9NQVhdOwogCi0JZmQgPSBvcGVuKHNlbGYtPmxvbmdfbmFtZSwgT19SRE9OTFkpOworCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIiVzJXMiLAorCQkgc3ltYm9sX2NvbmYuc3ltZnMsIHNlbGYtPmxvbmdfbmFtZSk7CisJZmQgPSBvcGVuKG5hbWUsIE9fUkRPTkxZKTsKIAlpZiAoZmQgPCAwKQogCQlnb3RvIG91dDsKIApAQCAtMTQ1MiwxNiArMTQ4NCwxOSBAQAogCSAgICAgc2VsZi0+b3JpZ2luKyspIHsKIAkJc3dpdGNoIChzZWxmLT5vcmlnaW4pIHsKIAkJY2FzZSBEU09fX09SSUdfQlVJTERfSURfQ0FDSEU6Ci0JCQlpZiAoZHNvX19idWlsZF9pZF9maWxlbmFtZShzZWxmLCBuYW1lLCBzaXplKSA9PSBOVUxMKQorCQkJLyogc2tpcCB0aGUgbG9jYWxseSBjb25maWd1cmVkIGNhY2hlIGlmIGEgc3ltZnMgaXMgZ2l2ZW4gKi8KKwkJCWlmIChzeW1ib2xfY29uZi5zeW1mc1swXSB8fAorCQkJICAgIChkc29fX2J1aWxkX2lkX2ZpbGVuYW1lKHNlbGYsIG5hbWUsIHNpemUpID09IE5VTEwpKSB7CiAJCQkJY29udGludWU7CisJCQl9CiAJCQlicmVhazsKIAkJY2FzZSBEU09fX09SSUdfRkVET1JBOgotCQkJc25wcmludGYobmFtZSwgc2l6ZSwgIi91c3IvbGliL2RlYnVnJXMuZGVidWciLAotCQkJCSBzZWxmLT5sb25nX25hbWUpOworCQkJc25wcmludGYobmFtZSwgc2l6ZSwgIiVzL3Vzci9saWIvZGVidWclcy5kZWJ1ZyIsCisJCQkJIHN5bWJvbF9jb25mLnN5bWZzLCBzZWxmLT5sb25nX25hbWUpOwogCQkJYnJlYWs7CiAJCWNhc2UgRFNPX19PUklHX1VCVU5UVToKLQkJCXNucHJpbnRmKG5hbWUsIHNpemUsICIvdXNyL2xpYi9kZWJ1ZyVzIiwKLQkJCQkgc2VsZi0+bG9uZ19uYW1lKTsKKwkJCXNucHJpbnRmKG5hbWUsIHNpemUsICIlcy91c3IvbGliL2RlYnVnJXMiLAorCQkJCSBzeW1ib2xfY29uZi5zeW1mcywgc2VsZi0+bG9uZ19uYW1lKTsKIAkJCWJyZWFrOwogCQljYXNlIERTT19fT1JJR19CVUlMRElEOiB7CiAJCQljaGFyIGJ1aWxkX2lkX2hleFtCVUlMRF9JRF9TSVpFICogMiArIDFdOwpAQCAtMTQ3MywxOSArMTUwOCwyNiBAQAogCQkJCQkgIHNpemVvZihzZWxmLT5idWlsZF9pZCksCiAJCQkJCSAgYnVpbGRfaWRfaGV4KTsKIAkJCXNucHJpbnRmKG5hbWUsIHNpemUsCi0JCQkJICIvdXNyL2xpYi9kZWJ1Zy8uYnVpbGQtaWQvJS4ycy8lcy5kZWJ1ZyIsCi0JCQkJIGJ1aWxkX2lkX2hleCwgYnVpbGRfaWRfaGV4ICsgMik7CisJCQkJICIlcy91c3IvbGliL2RlYnVnLy5idWlsZC1pZC8lLjJzLyVzLmRlYnVnIiwKKwkJCQkgc3ltYm9sX2NvbmYuc3ltZnMsIGJ1aWxkX2lkX2hleCwgYnVpbGRfaWRfaGV4ICsgMik7CiAJCQl9CiAJCQlicmVhazsKIAkJY2FzZSBEU09fX09SSUdfRFNPOgotCQkJc25wcmludGYobmFtZSwgc2l6ZSwgIiVzIiwgc2VsZi0+bG9uZ19uYW1lKTsKKwkJCXNucHJpbnRmKG5hbWUsIHNpemUsICIlcyVzIiwKKwkJCSAgICAgc3ltYm9sX2NvbmYuc3ltZnMsIHNlbGYtPmxvbmdfbmFtZSk7CiAJCQlicmVhazsKIAkJY2FzZSBEU09fX09SSUdfR1VFU1RfS01PRFVMRToKIAkJCWlmIChtYXAtPmdyb3VwcyAmJiBtYXAtPmdyb3Vwcy0+bWFjaGluZSkKIAkJCQlyb290X2RpciA9IG1hcC0+Z3JvdXBzLT5tYWNoaW5lLT5yb290X2RpcjsKIAkJCWVsc2UKIAkJCQlyb290X2RpciA9ICIiOwotCQkJc25wcmludGYobmFtZSwgc2l6ZSwgIiVzJXMiLCByb290X2Rpciwgc2VsZi0+bG9uZ19uYW1lKTsKKwkJCXNucHJpbnRmKG5hbWUsIHNpemUsICIlcyVzJXMiLCBzeW1ib2xfY29uZi5zeW1mcywKKwkJCQkgcm9vdF9kaXIsIHNlbGYtPmxvbmdfbmFtZSk7CisJCQlicmVhazsKKworCQljYXNlIERTT19fT1JJR19LTU9EVUxFOgorCQkJc25wcmludGYobmFtZSwgc2l6ZSwgIiVzJXMiLCBzeW1ib2xfY29uZi5zeW1mcywKKwkJCQkgc2VsZi0+bG9uZ19uYW1lKTsKIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6CkBAIC0xNzg0LDE3ICsxODI2LDIwIEBACiAJCSAgICAgIGNvbnN0IGNoYXIgKnZtbGludXgsIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpCiB7CiAJaW50IGVyciA9IC0xLCBmZDsKKwljaGFyIHN5bWZzX3ZtbGludXhbUEFUSF9NQVhdOwogCi0JZmQgPSBvcGVuKHZtbGludXgsIE9fUkRPTkxZKTsKKwlzbnByaW50ZihzeW1mc192bWxpbnV4LCBzaXplb2Yoc3ltZnNfdm1saW51eCksICIlcy8lcyIsCisJCSBzeW1ib2xfY29uZi5zeW1mcywgdm1saW51eCk7CisJZmQgPSBvcGVuKHN5bWZzX3ZtbGludXgsIE9fUkRPTkxZKTsKIAlpZiAoZmQgPCAwKQogCQlyZXR1cm4gLTE7CiAKIAlkc29fX3NldF9sb2FkZWQoc2VsZiwgbWFwLT50eXBlKTsKLQllcnIgPSBkc29fX2xvYWRfc3ltKHNlbGYsIG1hcCwgdm1saW51eCwgZmQsIGZpbHRlciwgMCwgMCk7CisJZXJyID0gZHNvX19sb2FkX3N5bShzZWxmLCBtYXAsIHN5bWZzX3ZtbGludXgsIGZkLCBmaWx0ZXIsIDAsIDApOwogCWNsb3NlKGZkKTsKIAogCWlmIChlcnIgPiAwKQotCQlwcl9kZWJ1ZygiVXNpbmcgJXMgZm9yIHN5bWJvbHNcbiIsIHZtbGludXgpOworCQlwcl9kZWJ1ZygiVXNpbmcgJXMgZm9yIHN5bWJvbHNcbiIsIHN5bWZzX3ZtbGludXgpOwogCiAJcmV0dXJuIGVycjsKIH0KQEAgLTE4MzYsOCArMTg4MSw4IEBACiAJY29uc3QgY2hhciAqa2FsbHN5bXNfZmlsZW5hbWUgPSBOVUxMOwogCWNoYXIgKmthbGxzeW1zX2FsbG9jYXRlZF9maWxlbmFtZSA9IE5VTEw7CiAJLyoKLQkgKiBTdGVwIDE6IGlmIHRoZSB1c2VyIHNwZWNpZmllZCBhIHZtbGludXggZmlsZW5hbWUsIHVzZSBpdCBhbmQgb25seQotCSAqIGl0LCByZXBvcnRpbmcgZXJyb3JzIHRvIHRoZSB1c2VyIGlmIGl0IGNhbm5vdCBiZSB1c2VkLgorCSAqIFN0ZXAgMTogaWYgdGhlIHVzZXIgc3BlY2lmaWVkIGEga2FsbHN5bXMgb3Igdm1saW51eCBmaWxlbmFtZSwgdXNlCisJICogaXQgYW5kIG9ubHkgaXQsIHJlcG9ydGluZyBlcnJvcnMgdG8gdGhlIHVzZXIgaWYgaXQgY2Fubm90IGJlIHVzZWQuCiAJICoKIAkgKiBGb3IgaW5zdGFuY2UsIHRyeSB0byBhbmFseXNlIGFuIEFSTSBwZXJmLmRhdGEgZmlsZSBfd2l0aG91dF8gYQogCSAqIGJ1aWxkLWlkLCBvciBpZiB0aGUgdXNlciBzcGVjaWZpZXMgdGhlIHdyb25nIHBhdGggdG8gdGhlIHJpZ2h0CkBAIC0xODUwLDYgKzE4OTUsMTEgQEAKIAkgKiB2YWxpZGF0aW9uIGluIGRzb19fbG9hZF92bWxpbnV4IGFuZCB3aWxsIGJhaWwgb3V0IGlmIHRoZXkgZG9uJ3QKIAkgKiBtYXRjaC4KIAkgKi8KKwlpZiAoc3ltYm9sX2NvbmYua2FsbHN5bXNfbmFtZSAhPSBOVUxMKSB7CisJCWthbGxzeW1zX2ZpbGVuYW1lID0gc3ltYm9sX2NvbmYua2FsbHN5bXNfbmFtZTsKKwkJZ290byBkb19rYWxsc3ltczsKKwl9CisKIAlpZiAoc3ltYm9sX2NvbmYudm1saW51eF9uYW1lICE9IE5VTEwpIHsKIAkJZXJyID0gZHNvX19sb2FkX3ZtbGludXgoc2VsZiwgbWFwLAogCQkJCQlzeW1ib2xfY29uZi52bWxpbnV4X25hbWUsIGZpbHRlcik7CkBAIC0xODY3LDYgKzE5MTcsMTAgQEAKIAkJCWdvdG8gb3V0X2ZpeHVwOwogCX0KIAorCS8qIGRvIG5vdCB0cnkgbG9jYWwgZmlsZXMgaWYgYSBzeW1mcyB3YXMgZ2l2ZW4gKi8KKwlpZiAoc3ltYm9sX2NvbmYuc3ltZnNbMF0gIT0gMCkKKwkJcmV0dXJuIC0xOworCiAJLyoKIAkgKiBTYXkgdGhlIGtlcm5lbCBEU08gd2FzIGNyZWF0ZWQgd2hlbiBwcm9jZXNzaW5nIHRoZSBidWlsZC1pZCBoZWFkZXIgdGFibGUsCiAJICogd2UgaGF2ZSBhIGJ1aWxkLWlkLCBzbyBjaGVjayBpZiBpdCBpcyB0aGUgc2FtZSBhcyB0aGUgcnVubmluZyBrZXJuZWwsCkBAIC0yMTM2LDcgKzIxOTAsNyBAQAogfTsKIAogc3RhdGljIGludCBzeW1ib2xfX2luX2tlcm5lbCh2b2lkICphcmcsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkgICAgIGNoYXIgdHlwZSBfX3VzZWQsIHU2NCBzdGFydCkKKwkJCSAgICAgY2hhciB0eXBlIF9fdXNlZCwgdTY0IHN0YXJ0LCB1NjQgZW5kIF9fdXNlZCkKIHsKIAlzdHJ1Y3QgcHJvY2Vzc19hcmdzICphcmdzID0gYXJnOwogCkBAIC0yMjU3LDkgKzIzMTEsNiBAQAogCXN0cnVjdCB1dHNuYW1lIHV0czsKIAljaGFyIGJmW1BBVEhfTUFYXTsKIAotCWlmICh1bmFtZSgmdXRzKSA8IDApCi0JCXJldHVybiAtMTsKLQogCXZtbGludXhfcGF0aCA9IG1hbGxvYyhzaXplb2YoY2hhciAqKSAqIDUpOwogCWlmICh2bWxpbnV4X3BhdGggPT0gTlVMTCkKIAkJcmV0dXJuIC0xOwpAQCAtMjI3Miw2ICsyMzIzLDE0IEBACiAJaWYgKHZtbGludXhfcGF0aFt2bWxpbnV4X3BhdGhfX25yX2VudHJpZXNdID09IE5VTEwpCiAJCWdvdG8gb3V0X2ZhaWw7CiAJKyt2bWxpbnV4X3BhdGhfX25yX2VudHJpZXM7CisKKwkvKiBvbmx5IHRyeSBydW5uaW5nIGtlcm5lbCB2ZXJzaW9uIGlmIG5vIHN5bWZzIHdhcyBnaXZlbiAqLworCWlmIChzeW1ib2xfY29uZi5zeW1mc1swXSAhPSAwKQorCQlyZXR1cm4gMDsKKworCWlmICh1bmFtZSgmdXRzKSA8IDApCisJCXJldHVybiAtMTsKKwogCXNucHJpbnRmKGJmLCBzaXplb2YoYmYpLCAiL2Jvb3Qvdm1saW51eC0lcyIsIHV0cy5yZWxlYXNlKTsKIAl2bWxpbnV4X3BhdGhbdm1saW51eF9wYXRoX19ucl9lbnRyaWVzXSA9IHN0cmR1cChiZik7CiAJaWYgKHZtbGludXhfcGF0aFt2bWxpbnV4X3BhdGhfX25yX2VudHJpZXNdID09IE5VTEwpCkBAIC0yMzMxLDYgKzIzOTAsOCBAQAogCiBpbnQgc3ltYm9sX19pbml0KHZvaWQpCiB7CisJY29uc3QgY2hhciAqc3ltZnM7CisKIAlpZiAoc3ltYm9sX2NvbmYuaW5pdGlhbGl6ZWQpCiAJCXJldHVybiAwOwogCkBAIC0yMzU5LDYgKzI0MjAsMTggQEAKIAkJICAgICAgIHN5bWJvbF9jb25mLnN5bV9saXN0X3N0ciwgInN5bWJvbCIpIDwgMCkKIAkJZ290byBvdXRfZnJlZV9jb21tX2xpc3Q7CiAKKwkvKgorCSAqIEEgcGF0aCB0byBzeW1ib2xzIG9mICIvIiBpcyBpZGVudGljYWwgdG8gIiIKKwkgKiByZXNldCBoZXJlIGZvciBzaW1wbGljaXR5LgorCSAqLworCXN5bWZzID0gcmVhbHBhdGgoc3ltYm9sX2NvbmYuc3ltZnMsIE5VTEwpOworCWlmIChzeW1mcyA9PSBOVUxMKQorCQlzeW1mcyA9IHN5bWJvbF9jb25mLnN5bWZzOworCWlmIChzdHJjbXAoc3ltZnMsICIvIikgPT0gMCkKKwkJc3ltYm9sX2NvbmYuc3ltZnMgPSAiIjsKKwlpZiAoc3ltZnMgIT0gc3ltYm9sX2NvbmYuc3ltZnMpCisJCWZyZWUoKHZvaWQgKilzeW1mcyk7CisKIAlzeW1ib2xfY29uZi5pbml0aWFsaXplZCA9IHRydWU7CiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuaCBiL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuaAppbmRleCA2YzZlYWZkLi42NzBjZDFjIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvc3ltYm9sLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5oCkBAIC03Miw2ICs3Miw3IEBACiAJCQlzaG93X2NwdV91dGlsaXphdGlvbiwKIAkJCWluaXRpYWxpemVkOwogCWNvbnN0IGNoYXIJKnZtbGludXhfbmFtZSwKKwkJCSprYWxsc3ltc19uYW1lLAogCQkJKnNvdXJjZV9wcmVmaXgsCiAJCQkqZmllbGRfc2VwOwogCWNvbnN0IGNoYXIJKmRlZmF1bHRfZ3Vlc3Rfdm1saW51eF9uYW1lLApAQCAtODUsNiArODYsNyBAQAogICAgICAgIHN0cnVjdCBzdHJsaXN0CSpkc29fbGlzdCwKIAkJCSpjb21tX2xpc3QsCiAJCQkqc3ltX2xpc3Q7CisJY29uc3QgY2hhcgkqc3ltZnM7CiB9OwogCiBleHRlcm4gc3RydWN0IHN5bWJvbF9jb25mIHN5bWJvbF9jb25mOwpAQCAtMjE1LDcgKzIxNyw3IEBACiBpbnQgYnVpbGRfaWRfX3NwcmludGYoY29uc3QgdTggKnNlbGYsIGludCBsZW4sIGNoYXIgKmJmKTsKIGludCBrYWxsc3ltc19fcGFyc2UoY29uc3QgY2hhciAqZmlsZW5hbWUsIHZvaWQgKmFyZywKIAkJICAgIGludCAoKnByb2Nlc3Nfc3ltYm9sKSh2b2lkICphcmcsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkJCSAgY2hhciB0eXBlLCB1NjQgc3RhcnQpKTsKKwkJCQkJICBjaGFyIHR5cGUsIHU2NCBzdGFydCwgdTY0IGVuZCkpOwogCiB2b2lkIG1hY2hpbmVfX2Rlc3Ryb3lfa2VybmVsX21hcHMoc3RydWN0IG1hY2hpbmUgKnNlbGYpOwogaW50IF9fbWFjaGluZV9fY3JlYXRlX2tlcm5lbF9tYXBzKHN0cnVjdCBtYWNoaW5lICpzZWxmLCBzdHJ1Y3QgZHNvICprZXJuZWwpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3RocmVhZC5jIGIvdG9vbHMvcGVyZi91dGlsL3RocmVhZC5jCmluZGV4IDhjNzJkODguLjAwZjRlYWQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC90aHJlYWQuYworKysgYi90b29scy9wZXJmL3V0aWwvdGhyZWFkLmMKQEAgLTE2LDM1ICsxNiw1MCBAQAogCQlyZXR1cm4gMTsKIH0KIAotaW50IGZpbmRfYWxsX3RpZChpbnQgcGlkLCBwaWRfdCAqKiBhbGxfdGlkKQorc3RydWN0IHRocmVhZF9tYXAgKnRocmVhZF9tYXBfX25ld19ieV9waWQocGlkX3QgcGlkKQogeworCXN0cnVjdCB0aHJlYWRfbWFwICp0aHJlYWRzOwogCWNoYXIgbmFtZVsyNTZdOwogCWludCBpdGVtczsKIAlzdHJ1Y3QgZGlyZW50ICoqbmFtZWxpc3QgPSBOVUxMOwotCWludCByZXQgPSAwOwogCWludCBpOwogCiAJc3ByaW50ZihuYW1lLCAiL3Byb2MvJWQvdGFzayIsIHBpZCk7CiAJaXRlbXMgPSBzY2FuZGlyKG5hbWUsICZuYW1lbGlzdCwgZmlsdGVyLCBOVUxMKTsKIAlpZiAoaXRlbXMgPD0gMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVOT0VOVDsKLQkqYWxsX3RpZCA9IG1hbGxvYyhzaXplb2YocGlkX3QpICogaXRlbXMpOwotCWlmICghKmFsbF90aWQpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBmYWlsdXJlOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworCisJdGhyZWFkcyA9IG1hbGxvYyhzaXplb2YoKnRocmVhZHMpICsgc2l6ZW9mKHBpZF90KSAqIGl0ZW1zKTsKKwlpZiAodGhyZWFkcyAhPSBOVUxMKSB7CisJCWZvciAoaSA9IDA7IGkgPCBpdGVtczsgaSsrKQorCQkJdGhyZWFkcy0+bWFwW2ldID0gYXRvaShuYW1lbGlzdFtpXS0+ZF9uYW1lKTsKKwkJdGhyZWFkcy0+bnIgPSBpdGVtczsKIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgaXRlbXM7IGkrKykKLQkJKCphbGxfdGlkKVtpXSA9IGF0b2kobmFtZWxpc3RbaV0tPmRfbmFtZSk7Ci0KLQlyZXQgPSBpdGVtczsKLQotZmFpbHVyZToKIAlmb3IgKGk9MDsgaTxpdGVtczsgaSsrKQogCQlmcmVlKG5hbWVsaXN0W2ldKTsKIAlmcmVlKG5hbWVsaXN0KTsKIAotCXJldHVybiByZXQ7CisJcmV0dXJuIHRocmVhZHM7Cit9CisKK3N0cnVjdCB0aHJlYWRfbWFwICp0aHJlYWRfbWFwX19uZXdfYnlfdGlkKHBpZF90IHRpZCkKK3sKKwlzdHJ1Y3QgdGhyZWFkX21hcCAqdGhyZWFkcyA9IG1hbGxvYyhzaXplb2YoKnRocmVhZHMpICsgc2l6ZW9mKHBpZF90KSk7CisKKwlpZiAodGhyZWFkcyAhPSBOVUxMKSB7CisJCXRocmVhZHMtPm1hcFswXSA9IHRpZDsKKwkJdGhyZWFkcy0+bnIJPSAxOworCX0KKworCXJldHVybiB0aHJlYWRzOworfQorCitzdHJ1Y3QgdGhyZWFkX21hcCAqdGhyZWFkX21hcF9fbmV3KHBpZF90IHBpZCwgcGlkX3QgdGlkKQoreworCWlmIChwaWQgIT0gLTEpCisJCXJldHVybiB0aHJlYWRfbWFwX19uZXdfYnlfcGlkKHBpZCk7CisJcmV0dXJuIHRocmVhZF9tYXBfX25ld19ieV90aWQodGlkKTsKIH0KIAogc3RhdGljIHN0cnVjdCB0aHJlYWQgKnRocmVhZF9fbmV3KHBpZF90IHBpZCkKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC90aHJlYWQuaCBiL3Rvb2xzL3BlcmYvdXRpbC90aHJlYWQuaAppbmRleCA2ODg1MDBmLi5kNzU3NDEwIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvdGhyZWFkLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL3RocmVhZC5oCkBAIC0xOCwxMSArMTgsMjQgQEAKIAlpbnQJCQljb21tX2xlbjsKIH07CiAKK3N0cnVjdCB0aHJlYWRfbWFwIHsKKwlpbnQgbnI7CisJaW50IG1hcFtdOworfTsKKwogc3RydWN0IHBlcmZfc2Vzc2lvbjsKIAogdm9pZCB0aHJlYWRfX2RlbGV0ZShzdHJ1Y3QgdGhyZWFkICpzZWxmKTsKIAotaW50IGZpbmRfYWxsX3RpZChpbnQgcGlkLCBwaWRfdCAqKiBhbGxfdGlkKTsKK3N0cnVjdCB0aHJlYWRfbWFwICp0aHJlYWRfbWFwX19uZXdfYnlfcGlkKHBpZF90IHBpZCk7CitzdHJ1Y3QgdGhyZWFkX21hcCAqdGhyZWFkX21hcF9fbmV3X2J5X3RpZChwaWRfdCB0aWQpOworc3RydWN0IHRocmVhZF9tYXAgKnRocmVhZF9tYXBfX25ldyhwaWRfdCBwaWQsIHBpZF90IHRpZCk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0aHJlYWRfbWFwX19kZWxldGUoc3RydWN0IHRocmVhZF9tYXAgKnRocmVhZHMpCit7CisJZnJlZSh0aHJlYWRzKTsKK30KKwogaW50IHRocmVhZF9fc2V0X2NvbW0oc3RydWN0IHRocmVhZCAqc2VsZiwgY29uc3QgY2hhciAqY29tbSk7CiBpbnQgdGhyZWFkX19jb21tX2xlbihzdHJ1Y3QgdGhyZWFkICpzZWxmKTsKIHN0cnVjdCB0aHJlYWQgKnBlcmZfc2Vzc2lvbl9fZmluZG5ldyhzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmLCBwaWRfdCBwaWQpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LWluZm8uYyBiL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC1pbmZvLmMKaW5kZXggYjE1NzI2MC4uMzU3MjlmNCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LWluZm8uYworKysgYi90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtaW5mby5jCkBAIC0zNCwxMSArMzQsMTMgQEAKICNpbmNsdWRlIDxjdHlwZS5oPgogI2luY2x1ZGUgPGVycm5vLmg+CiAjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KIAogI2luY2x1ZGUgIi4uL3BlcmYuaCIKICNpbmNsdWRlICJ0cmFjZS1ldmVudC5oIgogI2luY2x1ZGUgImRlYnVnZnMuaCIKKyNpbmNsdWRlICJldnNlbC5oIgogCiAjZGVmaW5lIFZFUlNJT04gIjAuNSIKIApAQCAtNDY5LDE2ICs0NzEsMTcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCB0cmFjZXBvaW50X3BhdGggKgotZ2V0X3RyYWNlcG9pbnRzX3BhdGgoc3RydWN0IHBlcmZfZXZlbnRfYXR0ciAqcGF0dHJzLCBpbnQgbmJfZXZlbnRzKQorZ2V0X3RyYWNlcG9pbnRzX3BhdGgoc3RydWN0IGxpc3RfaGVhZCAqcGF0dHJzKQogewogCXN0cnVjdCB0cmFjZXBvaW50X3BhdGggcGF0aCwgKnBwYXRoID0gJnBhdGg7Ci0JaW50IGksIG5yX3RyYWNlcG9pbnRzID0gMDsKKwlzdHJ1Y3QgcGVyZl9ldnNlbCAqcG9zOworCWludCBucl90cmFjZXBvaW50cyA9IDA7CiAKLQlmb3IgKGkgPSAwOyBpIDwgbmJfZXZlbnRzOyBpKyspIHsKLQkJaWYgKHBhdHRyc1tpXS50eXBlICE9IFBFUkZfVFlQRV9UUkFDRVBPSU5UKQorCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCBwYXR0cnMsIG5vZGUpIHsKKwkJaWYgKHBvcy0+YXR0ci50eXBlICE9IFBFUkZfVFlQRV9UUkFDRVBPSU5UKQogCQkJY29udGludWU7CiAJCSsrbnJfdHJhY2Vwb2ludHM7Ci0JCXBwYXRoLT5uZXh0ID0gdHJhY2Vwb2ludF9pZF90b19wYXRoKHBhdHRyc1tpXS5jb25maWcpOworCQlwcGF0aC0+bmV4dCA9IHRyYWNlcG9pbnRfaWRfdG9fcGF0aChwb3MtPmF0dHIuY29uZmlnKTsKIAkJaWYgKCFwcGF0aC0+bmV4dCkKIAkJCWRpZSgiJXNcbiIsICJObyBtZW1vcnkgdG8gYWxsb2MgdHJhY2Vwb2ludHMgbGlzdCIpOwogCQlwcGF0aCA9IHBwYXRoLT5uZXh0OwpAQCAtNDg3LDIxICs0OTAsMjEgQEAKIAlyZXR1cm4gbnJfdHJhY2Vwb2ludHMgPiAwID8gcGF0aC5uZXh0IDogTlVMTDsKIH0KIAotYm9vbCBoYXZlX3RyYWNlcG9pbnRzKHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKnBhdHRycywgaW50IG5iX2V2ZW50cykKK2Jvb2wgaGF2ZV90cmFjZXBvaW50cyhzdHJ1Y3QgbGlzdF9oZWFkICpwYXR0cnMpCiB7Ci0JaW50IGk7CisJc3RydWN0IHBlcmZfZXZzZWwgKnBvczsKIAotCWZvciAoaSA9IDA7IGkgPCBuYl9ldmVudHM7IGkrKykKLQkJaWYgKHBhdHRyc1tpXS50eXBlID09IFBFUkZfVFlQRV9UUkFDRVBPSU5UKQorCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCBwYXR0cnMsIG5vZGUpCisJCWlmIChwb3MtPmF0dHIudHlwZSA9PSBQRVJGX1RZUEVfVFJBQ0VQT0lOVCkKIAkJCXJldHVybiB0cnVlOwogCiAJcmV0dXJuIGZhbHNlOwogfQogCi1pbnQgcmVhZF90cmFjaW5nX2RhdGEoaW50IGZkLCBzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyICpwYXR0cnMsIGludCBuYl9ldmVudHMpCitpbnQgcmVhZF90cmFjaW5nX2RhdGEoaW50IGZkLCBzdHJ1Y3QgbGlzdF9oZWFkICpwYXR0cnMpCiB7CiAJY2hhciBidWZbQlVGU0laXTsKLQlzdHJ1Y3QgdHJhY2Vwb2ludF9wYXRoICp0cHMgPSBnZXRfdHJhY2Vwb2ludHNfcGF0aChwYXR0cnMsIG5iX2V2ZW50cyk7CisJc3RydWN0IHRyYWNlcG9pbnRfcGF0aCAqdHBzID0gZ2V0X3RyYWNlcG9pbnRzX3BhdGgocGF0dHJzKTsKIAogCS8qCiAJICogV2hhdD8gTm8gdHJhY2Vwb2ludHM/IE5vIHNlbnNlIHdyaXRpbmcgYW55dGhpbmcgaGVyZSwgYmFpbCBvdXQuCkBAIC01NDUsMTQgKzU0OCwxMyBAQAogCXJldHVybiAwOwogfQogCi1zc2l6ZV90IHJlYWRfdHJhY2luZ19kYXRhX3NpemUoaW50IGZkLCBzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyICpwYXR0cnMsCi0JCQkgICAgICAgaW50IG5iX2V2ZW50cykKK3NzaXplX3QgcmVhZF90cmFjaW5nX2RhdGFfc2l6ZShpbnQgZmQsIHN0cnVjdCBsaXN0X2hlYWQgKnBhdHRycykKIHsKIAlzc2l6ZV90IHNpemU7CiAJaW50IGVyciA9IDA7CiAKIAljYWxjX2RhdGFfc2l6ZSA9IDE7Ci0JZXJyID0gcmVhZF90cmFjaW5nX2RhdGEoZmQsIHBhdHRycywgbmJfZXZlbnRzKTsKKwllcnIgPSByZWFkX3RyYWNpbmdfZGF0YShmZCwgcGF0dHJzKTsKIAlzaXplID0gY2FsY19kYXRhX3NpemUgLSAxOwogCWNhbGNfZGF0YV9zaXplID0gMDsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LmggYi90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQuaAppbmRleCBiM2U4NmIxLi5iNWYxMmNhIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQuaAorKysgYi90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQuaApAQCAtMjYyLDkgKzI2Miw4IEBACiB2b2lkICpyYXdfZmllbGRfcHRyKHN0cnVjdCBldmVudCAqZXZlbnQsIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmRhdGEpOwogdW5zaWduZWQgbG9uZyBsb25nIGV2YWxfZmxhZyhjb25zdCBjaGFyICpmbGFnKTsKIAotaW50IHJlYWRfdHJhY2luZ19kYXRhKGludCBmZCwgc3RydWN0IHBlcmZfZXZlbnRfYXR0ciAqcGF0dHJzLCBpbnQgbmJfZXZlbnRzKTsKLXNzaXplX3QgcmVhZF90cmFjaW5nX2RhdGFfc2l6ZShpbnQgZmQsIHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKnBhdHRycywKLQkJCSAgICAgICBpbnQgbmJfZXZlbnRzKTsKK2ludCByZWFkX3RyYWNpbmdfZGF0YShpbnQgZmQsIHN0cnVjdCBsaXN0X2hlYWQgKnBhdHRycyk7Citzc2l6ZV90IHJlYWRfdHJhY2luZ19kYXRhX3NpemUoaW50IGZkLCBzdHJ1Y3QgbGlzdF9oZWFkICpwYXR0cnMpOwogCiAvKiB0YWtlbiBmcm9tIGtlcm5lbC90cmFjZS90cmFjZS5oICovCiBlbnVtIHRyYWNlX2ZsYWdfdHlwZSB7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvdWkvdXRpbC5jIGIvdG9vbHMvcGVyZi91dGlsL3VpL3V0aWwuYwppbmRleCAwNTZjNjk1Li43YjVhODkyIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvdWkvdXRpbC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC91aS91dGlsLmMKQEAgLTEwNCwxMCArMTA0LDI0IEBACiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgY29uc3QgY2hhciB5ZXNbXSA9ICJZZXMiLCBub1tdID0gIk5vIjsKK3N0YXRpYyBjb25zdCBjaGFyIHllc1tdID0gIlllcyIsIG5vW10gPSAiTm8iLAorCQkgIHdhcm5pbmdfc3RyW10gPSAiV2FybmluZyEiLCBva1tdID0gIk9rIjsKIAogYm9vbCB1aV9fZGlhbG9nX3llc25vKGNvbnN0IGNoYXIgKm1zZykKIHsKIAkvKiBuZXd0V2luQ2hvaWNlIHNob3VsZCByZWFsbHkgYmUgYWNjZXB0aW5nIGNvbnN0IGNoYXIgcG9pbnRlcnMuLi4gKi8KIAlyZXR1cm4gbmV3dFdpbkNob2ljZShOVUxMLCAoY2hhciAqKXllcywgKGNoYXIgKilubywgKGNoYXIgKiltc2cpID09IDE7CiB9CisKK3ZvaWQgdWlfX3dhcm5pbmcoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisJdmFfbGlzdCBhcmdzOworCisJdmFfc3RhcnQoYXJncywgZm9ybWF0KTsKKwlpZiAodXNlX2Jyb3dzZXIgPiAwKQorCQluZXd0V2luTWVzc2FnZXYoKGNoYXIgKil3YXJuaW5nX3N0ciwgKGNoYXIgKilvaywKKwkJCQkoY2hhciAqKWZvcm1hdCwgYXJncyk7CisJZWxzZQorCQl2ZnByaW50ZihzdGRlcnIsIGZvcm1hdCwgYXJncyk7CisJdmFfZW5kKGFyZ3MpOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3V0aWwuYyBiL3Rvb2xzL3BlcmYvdXRpbC91dGlsLmMKaW5kZXggMjE0MjY1Ni4uNWIzZWE0OSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3V0aWwuYworKysgYi90b29scy9wZXJmL3V0aWwvdXRpbC5jCkBAIC0xMTQsMyArMTE0LDIwIEBACiAKIAlyZXR1cm4gdmFsdWU7CiB9CisKK2ludCByZWFkbihpbnQgZmQsIHZvaWQgKmJ1Ziwgc2l6ZV90IG4pCit7CisJdm9pZCAqYnVmX3N0YXJ0ID0gYnVmOworCisJd2hpbGUgKG4pIHsKKwkJaW50IHJldCA9IHJlYWQoZmQsIGJ1Ziwgbik7CisKKwkJaWYgKHJldCA8PSAwKQorCQkJcmV0dXJuIHJldDsKKworCQluIC09IHJldDsKKwkJYnVmICs9IHJldDsKKwl9CisKKwlyZXR1cm4gYnVmIC0gYnVmX3N0YXJ0OworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3V0aWwuaCBiL3Rvb2xzL3BlcmYvdXRpbC91dGlsLmgKaW5kZXggNzU2MjcwNy4uZTgzM2YyNiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3V0aWwuaAorKysgYi90b29scy9wZXJmL3V0aWwvdXRpbC5oCkBAIC0yNjUsNiArMjY1LDcgQEAKIGJvb2wgc3RyZ2xvYm1hdGNoKGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqcGF0KTsKIGJvb2wgc3RybGF6eW1hdGNoKGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqcGF0KTsKIHVuc2lnbmVkIGxvbmcgY29udmVydF91bml0KHVuc2lnbmVkIGxvbmcgdmFsdWUsIGNoYXIgKnVuaXQpOworaW50IHJlYWRuKGludCBmZCwgdm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSk7CiAKICNkZWZpbmUgX1NUUih4KSAjeAogI2RlZmluZSBTVFIoeCkgX1NUUih4KQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3h5YXJyYXkuYyBiL3Rvb2xzL3BlcmYvdXRpbC94eWFycmF5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJhZmJmNgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC94eWFycmF5LmMKQEAgLTAsMCArMSwyMCBAQAorI2luY2x1ZGUgInh5YXJyYXkuaCIKKyNpbmNsdWRlICJ1dGlsLmgiCisKK3N0cnVjdCB4eWFycmF5ICp4eWFycmF5X19uZXcoaW50IHhsZW4sIGludCB5bGVuLCBzaXplX3QgZW50cnlfc2l6ZSkKK3sKKwlzaXplX3Qgcm93X3NpemUgPSB5bGVuICogZW50cnlfc2l6ZTsKKwlzdHJ1Y3QgeHlhcnJheSAqeHkgPSB6YWxsb2Moc2l6ZW9mKCp4eSkgKyB4bGVuICogcm93X3NpemUpOworCisJaWYgKHh5ICE9IE5VTEwpIHsKKwkJeHktPmVudHJ5X3NpemUgPSBlbnRyeV9zaXplOworCQl4eS0+cm93X3NpemUgICA9IHJvd19zaXplOworCX0KKworCXJldHVybiB4eTsKK30KKwordm9pZCB4eWFycmF5X19kZWxldGUoc3RydWN0IHh5YXJyYXkgKnh5KQoreworCWZyZWUoeHkpOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3h5YXJyYXkuaCBiL3Rvb2xzL3BlcmYvdXRpbC94eWFycmF5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ4OGEwNwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC94eWFycmF5LmgKQEAgLTAsMCArMSwyMCBAQAorI2lmbmRlZiBfUEVSRl9YWUFSUkFZX0hfCisjZGVmaW5lIF9QRVJGX1hZQVJSQVlfSF8gMQorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKK3N0cnVjdCB4eWFycmF5IHsKKwlzaXplX3Qgcm93X3NpemU7CisJc2l6ZV90IGVudHJ5X3NpemU7CisJY2hhciBjb250ZW50c1tdOworfTsKKworc3RydWN0IHh5YXJyYXkgKnh5YXJyYXlfX25ldyhpbnQgeGxlbiwgaW50IHlsZW4sIHNpemVfdCBlbnRyeV9zaXplKTsKK3ZvaWQgeHlhcnJheV9fZGVsZXRlKHN0cnVjdCB4eWFycmF5ICp4eSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqeHlhcnJheV9fZW50cnkoc3RydWN0IHh5YXJyYXkgKnh5LCBpbnQgeCwgaW50IHkpCit7CisJcmV0dXJuICZ4eS0+Y29udGVudHNbeCAqIHh5LT5yb3dfc2l6ZSArIHkgKiB4eS0+ZW50cnlfc2l6ZV07Cit9CisKKyNlbmRpZiAvKiBfUEVSRl9YWUFSUkFZX0hfICovCmRpZmYgLS1naXQgYS90b29scy92aXJ0aW8vTWFrZWZpbGUgYi90b29scy92aXJ0aW8vTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFkNDQyZQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3ZpcnRpby9NYWtlZmlsZQpAQCAtMCwwICsxLDEyIEBACithbGw6IHRlc3QgbW9kCit0ZXN0OiB2aXJ0aW9fdGVzdAordmlydGlvX3Rlc3Q6IHZpcnRpb19yaW5nLm8gdmlydGlvX3Rlc3QubworQ0ZMQUdTICs9IC1nIC1PMiAtV2FsbCAtSS4gLUkgLi4vLi4vdXNyL2luY2x1ZGUvIC1Xbm8tcG9pbnRlci1zaWduIC1mbm8tc3RyaWN0LW92ZXJmbG93ICAtTU1ECit2cGF0aCAlLmMgLi4vLi4vZHJpdmVycy92aXJ0aW8KK21vZDoKKwkke01BS0V9IC1DIGBwd2RgLy4uLy4uIE09YHB3ZGAvdmhvc3RfdGVzdAorLlBIT05ZOiBhbGwgdGVzdCBtb2QgY2xlYW4KK2NsZWFuOgorCSR7Uk19ICoubyB2aG9zdF90ZXN0LyoubyB2aG9zdF90ZXN0Ly4qLmNtZCBcCisgICAgICAgICAgICAgIHZob3N0X3Rlc3QvTW9kdWxlLnN5bXZlcnMgdmhvc3RfdGVzdC9tb2R1bGVzLm9yZGVyICouZAorLWluY2x1ZGUgKi5kCmRpZmYgLS1naXQgYS90b29scy92aXJ0aW8vbGludXgvZGV2aWNlLmggYi90b29scy92aXJ0aW8vbGludXgvZGV2aWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFkN2UxZAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3ZpcnRpby9saW51eC9kZXZpY2UuaApAQCAtMCwwICsxLDIgQEAKKyNpZm5kZWYgTElOVVhfREVWSUNFX0gKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdG9vbHMvdmlydGlvL2xpbnV4L3NsYWIuaCBiL3Rvb2xzL3ZpcnRpby9saW51eC9zbGFiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFiYWVhYwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3ZpcnRpby9saW51eC9zbGFiLmgKQEAgLTAsMCArMSwyIEBACisjaWZuZGVmIExJTlVYX1NMQUJfSAorI2VuZGlmCmRpZmYgLS1naXQgYS90b29scy92aXJ0aW8vbGludXgvdmlydGlvLmggYi90b29scy92aXJ0aW8vbGludXgvdmlydGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY5YmNkZAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3ZpcnRpby9saW51eC92aXJ0aW8uaApAQCAtMCwwICsxLDIyMyBAQAorI2lmbmRlZiBMSU5VWF9WSVJUSU9fSAorI2RlZmluZSBMSU5VWF9WSVJUSU9fSAorCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGRtYV9hZGRyX3Q7CisKK3N0cnVjdCBzY2F0dGVybGlzdCB7CisJdW5zaWduZWQgbG9uZwlwYWdlX2xpbms7CisJdW5zaWduZWQgaW50CW9mZnNldDsKKwl1bnNpZ25lZCBpbnQJbGVuZ3RoOworCWRtYV9hZGRyX3QJZG1hX2FkZHJlc3M7Cit9OworCitzdHJ1Y3QgcGFnZSB7CisJdW5zaWduZWQgbG9uZyBsb25nIGR1bW15OworfTsKKworI2RlZmluZSBCVUdfT04oX19CVUdfT05fY29uZCkgYXNzZXJ0KCEoX19CVUdfT05fY29uZCkpCisKKy8qIFBoeXNpY2FsID09IFZpcnR1YWwgKi8KKyNkZWZpbmUgdmlydF90b19waHlzKHApICgodW5zaWduZWQgbG9uZylwKQorI2RlZmluZSBwaHlzX3RvX3ZpcnQoYSkgKCh2b2lkICopKHVuc2lnbmVkIGxvbmcpKGEpKQorLyogUGFnZSBhZGRyZXNzOiBWaXJ0dWFsIC8gNEsgKi8KKyNkZWZpbmUgdmlydF90b19wYWdlKHApICgoc3RydWN0IHBhZ2UqKSgodmlydF90b19waHlzKHApIC8gNDA5NikgKiBcCisJCQkJCXNpemVvZihzdHJ1Y3QgcGFnZSkpKQorI2RlZmluZSBvZmZzZXRfaW5fcGFnZShwKSAoKCh1bnNpZ25lZCBsb25nKXApICUgNDA5NikKKyNkZWZpbmUgc2dfcGh5cyhzZykgKChzZy0+cGFnZV9saW5rICYgfjB4MykgLyBzaXplb2Yoc3RydWN0IHBhZ2UpICogNDA5NiArIFwKKwkJICAgICBzZy0+b2Zmc2V0KQorc3RhdGljIGlubGluZSB2b2lkIHNnX21hcmtfZW5kKHN0cnVjdCBzY2F0dGVybGlzdCAqc2cpCit7CisJLyoKKwkgKiBTZXQgdGVybWluYXRpb24gYml0LCBjbGVhciBwb3RlbnRpYWwgY2hhaW4gYml0CisJICovCisJc2ctPnBhZ2VfbGluayB8PSAweDAyOworCXNnLT5wYWdlX2xpbmsgJj0gfjB4MDE7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgc2dfaW5pdF90YWJsZShzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCwgdW5zaWduZWQgaW50IG5lbnRzKQoreworCW1lbXNldChzZ2wsIDAsIHNpemVvZigqc2dsKSAqIG5lbnRzKTsKKwlzZ19tYXJrX2VuZCgmc2dsW25lbnRzIC0gMV0pOworfQorc3RhdGljIGlubGluZSB2b2lkIHNnX2Fzc2lnbl9wYWdlKHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHN0cnVjdCBwYWdlICpwYWdlKQoreworCXVuc2lnbmVkIGxvbmcgcGFnZV9saW5rID0gc2ctPnBhZ2VfbGluayAmIDB4MzsKKworCS8qCisJICogSW4gb3JkZXIgZm9yIHRoZSBsb3cgYml0IHN0ZWFsaW5nIGFwcHJvYWNoIHRvIHdvcmssIHBhZ2VzCisJICogbXVzdCBiZSBhbGlnbmVkIGF0IGEgMzItYml0IGJvdW5kYXJ5IGFzIGEgbWluaW11bS4KKwkgKi8KKwlCVUdfT04oKHVuc2lnbmVkIGxvbmcpIHBhZ2UgJiAweDAzKTsKKwlzZy0+cGFnZV9saW5rID0gcGFnZV9saW5rIHwgKHVuc2lnbmVkIGxvbmcpIHBhZ2U7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZ19zZXRfcGFnZShzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KQoreworCXNnX2Fzc2lnbl9wYWdlKHNnLCBwYWdlKTsKKwlzZy0+b2Zmc2V0ID0gb2Zmc2V0OworCXNnLT5sZW5ndGggPSBsZW47Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZ19zZXRfYnVmKHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGNvbnN0IHZvaWQgKmJ1ZiwKKwkJCSAgICAgIHVuc2lnbmVkIGludCBidWZsZW4pCit7CisJc2dfc2V0X3BhZ2Uoc2csIHZpcnRfdG9fcGFnZShidWYpLCBidWZsZW4sIG9mZnNldF9pbl9wYWdlKGJ1ZikpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2dfaW5pdF9vbmUoc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgY29uc3Qgdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgYnVmbGVuKQoreworCXNnX2luaXRfdGFibGUoc2csIDEpOworCXNnX3NldF9idWYoc2csIGJ1ZiwgYnVmbGVuKTsKK30KKwordHlwZWRlZiBfX3UxNiB1MTY7CisKK3R5cGVkZWYgZW51bSB7CisJR0ZQX0tFUk5FTCwKKwlHRlBfQVRPTUlDLAorfSBnZnBfdDsKK3R5cGVkZWYgZW51bSB7CisJSVJRX05PTkUsCisJSVJRX0hBTkRMRUQKK30gaXJxcmV0dXJuX3Q7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqa21hbGxvYyhzaXplX3QgcywgZ2ZwX3QgZ2ZwKQoreworCXJldHVybiBtYWxsb2Mocyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBrZnJlZSh2b2lkICpwKQoreworCWZyZWUocCk7Cit9CisKKyNkZWZpbmUgY29udGFpbmVyX29mKHB0ciwgdHlwZSwgbWVtYmVyKSAoewkJCVwKKwljb25zdCB0eXBlb2YoICgodHlwZSAqKTApLT5tZW1iZXIgKSAqX19tcHRyID0gKHB0cik7CVwKKwkodHlwZSAqKSggKGNoYXIgKilfX21wdHIgLSBvZmZzZXRvZih0eXBlLG1lbWJlcikgKTt9KQorCisjZGVmaW5lIHVuaW5pdGlhbGl6ZWRfdmFyKHgpIHggPSB4CisKKyMgaWZuZGVmIGxpa2VseQorIyAgZGVmaW5lIGxpa2VseSh4KQkoX19idWlsdGluX2V4cGVjdCghISh4KSwgMSkpCisjIGVuZGlmCisjIGlmbmRlZiB1bmxpa2VseQorIyAgZGVmaW5lIHVubGlrZWx5KHgpCShfX2J1aWx0aW5fZXhwZWN0KCEhKHgpLCAwKSkKKyMgZW5kaWYKKworI2RlZmluZSBwcl9lcnIoZm9ybWF0LCAuLi4pIGZwcmludGYgKHN0ZGVyciwgZm9ybWF0LCAjIyBfX1ZBX0FSR1NfXykKKyNpZmRlZiBERUJVRworI2RlZmluZSBwcl9kZWJ1Zyhmb3JtYXQsIC4uLikgZnByaW50ZiAoc3RkZXJyLCBmb3JtYXQsICMjIF9fVkFfQVJHU19fKQorI2Vsc2UKKyNkZWZpbmUgcHJfZGVidWcoZm9ybWF0LCAuLi4pIGRvIHt9IHdoaWxlICgwKQorI2VuZGlmCisjZGVmaW5lIGRldl9lcnIoZGV2LCBmb3JtYXQsIC4uLikgZnByaW50ZiAoc3RkZXJyLCBmb3JtYXQsICMjIF9fVkFfQVJHU19fKQorI2RlZmluZSBkZXZfd2FybihkZXYsIGZvcm1hdCwgLi4uKSBmcHJpbnRmIChzdGRlcnIsIGZvcm1hdCwgIyMgX19WQV9BUkdTX18pCisKKy8qIFRPRE86IGVtcHR5IHN0dWJzIGZvciBub3cuIEJyb2tlbiBidXQgZW5vdWdoIGZvciB2aXJ0aW9fcmluZy5jICovCisjZGVmaW5lIGxpc3RfYWRkX3RhaWwoYSwgYikgZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIGxpc3RfZGVsKGEpIGRvIHt9IHdoaWxlICgwKQorCisjZGVmaW5lIEJJVF9XT1JEKG5yKQkJKChucikgLyBCSVRTX1BFUl9MT05HKQorI2RlZmluZSBCSVRTX1BFUl9CWVRFCQk4CisjZGVmaW5lIEJJVFNfUEVSX0xPTkcgKHNpemVvZihsb25nKSAqIEJJVFNfUEVSX0JZVEUpCisjZGVmaW5lIEJJVF9NQVNLKG5yKQkJKDFVTCA8PCAoKG5yKSAlIEJJVFNfUEVSX0xPTkcpKQorLyogVE9ETzogTm90IGF0b21pYyBhcyBpdCBzaG91bGQgYmU6CisgKiB3ZSBkb24ndCB1c2UgdGhpcyBmb3IgYW55dGhpbmcgaW1wb3J0YW50LiAqLworc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX2JpdChpbnQgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpCit7CisJdW5zaWduZWQgbG9uZyBtYXNrID0gQklUX01BU0sobnIpOworCXVuc2lnbmVkIGxvbmcgKnAgPSAoKHVuc2lnbmVkIGxvbmcgKilhZGRyKSArIEJJVF9XT1JEKG5yKTsKKworCSpwICY9IH5tYXNrOworfQorCitzdGF0aWMgaW5saW5lIGludCB0ZXN0X2JpdChpbnQgbnIsIGNvbnN0IHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpCit7CisgICAgICAgIHJldHVybiAxVUwgJiAoYWRkcltCSVRfV09SRChucildID4+IChuciAmIChCSVRTX1BFUl9MT05HLTEpKSk7Cit9CisKKy8qIFRoZSBvbmx5IGZlYXR1cmUgd2UgY2FyZSB0byBzdXBwb3J0ICovCisjZGVmaW5lIHZpcnRpb19oYXNfZmVhdHVyZShkZXYsIGZlYXR1cmUpIFwKKwl0ZXN0X2JpdCgoZmVhdHVyZSksIChkZXYpLT5mZWF0dXJlcykKKy8qIGVuZCBvZiBzdHVicyAqLworCitzdHJ1Y3QgdmlydGlvX2RldmljZSB7CisJdm9pZCAqZGV2OworCXVuc2lnbmVkIGxvbmcgZmVhdHVyZXNbMV07Cit9OworCitzdHJ1Y3QgdmlydHF1ZXVlIHsKKwkvKiBUT0RPOiBjb21tZW50ZWQgYXMgbGlzdCBtYWNyb3MgYXJlIGVtcHR5IHN0dWJzIGZvciBub3cuCisJICogQnJva2VuIGJ1dCBlbm91Z2ggZm9yIHZpcnRpb19yaW5nLmMKKwkgKiBzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7ICovCisJdm9pZCAoKmNhbGxiYWNrKShzdHJ1Y3QgdmlydHF1ZXVlICp2cSk7CisJY29uc3QgY2hhciAqbmFtZTsKKwlzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldjsKKwl2b2lkICpwcml2OworfTsKKworI2RlZmluZSBFWFBPUlRfU1lNQk9MX0dQTChfX0VYUE9SVF9TWU1CT0xfR1BMX25hbWUpIFwKKwl2b2lkIF9fRVhQT1JUX1NZTUJPTF9HUEwjI19fRVhQT1JUX1NZTUJPTF9HUExfbmFtZSgpIHsgXAorfQorI2RlZmluZSBNT0RVTEVfTElDRU5TRShfX01PRFVMRV9MSUNFTlNFX3ZhbHVlKSBcCisJY29uc3QgY2hhciAqX19NT0RVTEVfTElDRU5TRV9uYW1lID0gX19NT0RVTEVfTElDRU5TRV92YWx1ZQorCisjZGVmaW5lIENPTkZJR19TTVAKKworI2lmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykKKyNkZWZpbmUgYmFycmllcigpIGFzbSB2b2xhdGlsZSgiIiA6OjogIm1lbW9yeSIpCisjZGVmaW5lIG1iKCkgX19zeW5jX3N5bmNocm9uaXplKCkKKworI2RlZmluZSBzbXBfbWIoKQltYigpCisjIGRlZmluZSBzbXBfcm1iKCkJYmFycmllcigpCisjIGRlZmluZSBzbXBfd21iKCkJYmFycmllcigpCisjZWxzZQorI2Vycm9yIFBsZWFzZSBmaWxsIGluIGJhcnJpZXIgbWFjcm9zCisjZW5kaWYKKworLyogSW50ZXJmYWNlcyBleHBvcnRlZCBieSB2aXJ0aW9fcmluZy4gKi8KK2ludCB2aXJ0cXVldWVfYWRkX2J1Zl9nZnAoc3RydWN0IHZpcnRxdWV1ZSAqdnEsCisJCQkgIHN0cnVjdCBzY2F0dGVybGlzdCBzZ1tdLAorCQkJICB1bnNpZ25lZCBpbnQgb3V0X251bSwKKwkJCSAgdW5zaWduZWQgaW50IGluX251bSwKKwkJCSAgdm9pZCAqZGF0YSwKKwkJCSAgZ2ZwX3QgZ2ZwKTsKKworc3RhdGljIGlubGluZSBpbnQgdmlydHF1ZXVlX2FkZF9idWYoc3RydWN0IHZpcnRxdWV1ZSAqdnEsCisJCQkJICAgIHN0cnVjdCBzY2F0dGVybGlzdCBzZ1tdLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgb3V0X251bSwKKwkJCQkgICAgdW5zaWduZWQgaW50IGluX251bSwKKwkJCQkgICAgdm9pZCAqZGF0YSkKK3sKKwlyZXR1cm4gdmlydHF1ZXVlX2FkZF9idWZfZ2ZwKHZxLCBzZywgb3V0X251bSwgaW5fbnVtLCBkYXRhLCBHRlBfQVRPTUlDKTsKK30KKwordm9pZCB2aXJ0cXVldWVfa2ljayhzdHJ1Y3QgdmlydHF1ZXVlICp2cSk7CisKK3ZvaWQgKnZpcnRxdWV1ZV9nZXRfYnVmKHN0cnVjdCB2aXJ0cXVldWUgKnZxLCB1bnNpZ25lZCBpbnQgKmxlbik7CisKK3ZvaWQgdmlydHF1ZXVlX2Rpc2FibGVfY2Ioc3RydWN0IHZpcnRxdWV1ZSAqdnEpOworCitib29sIHZpcnRxdWV1ZV9lbmFibGVfY2Ioc3RydWN0IHZpcnRxdWV1ZSAqdnEpOworCit2b2lkICp2aXJ0cXVldWVfZGV0YWNoX3VudXNlZF9idWYoc3RydWN0IHZpcnRxdWV1ZSAqdnEpOworc3RydWN0IHZpcnRxdWV1ZSAqdnJpbmdfbmV3X3ZpcnRxdWV1ZSh1bnNpZ25lZCBpbnQgbnVtLAorCQkJCSAgICAgIHVuc2lnbmVkIGludCB2cmluZ19hbGlnbiwKKwkJCQkgICAgICBzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldiwKKwkJCQkgICAgICB2b2lkICpwYWdlcywKKwkJCQkgICAgICB2b2lkICgqbm90aWZ5KShzdHJ1Y3QgdmlydHF1ZXVlICp2cSksCisJCQkJICAgICAgdm9pZCAoKmNhbGxiYWNrKShzdHJ1Y3QgdmlydHF1ZXVlICp2cSksCisJCQkJICAgICAgY29uc3QgY2hhciAqbmFtZSk7Cit2b2lkIHZyaW5nX2RlbF92aXJ0cXVldWUoc3RydWN0IHZpcnRxdWV1ZSAqdnEpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3Rvb2xzL3ZpcnRpby92aG9zdF90ZXN0L01ha2VmaWxlIGIvdG9vbHMvdmlydGlvL3Zob3N0X3Rlc3QvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFkMzViOAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3ZpcnRpby92aG9zdF90ZXN0L01ha2VmaWxlCkBAIC0wLDAgKzEsMiBAQAorb2JqLW0gKz0gdmhvc3RfdGVzdC5vCitFWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL3Zob3N0CmRpZmYgLS1naXQgYS90b29scy92aXJ0aW8vdmhvc3RfdGVzdC92aG9zdF90ZXN0LmMgYi90b29scy92aXJ0aW8vdmhvc3RfdGVzdC92aG9zdF90ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg3MzUxOAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3ZpcnRpby92aG9zdF90ZXN0L3Zob3N0X3Rlc3QuYwpAQCAtMCwwICsxIEBACisjaW5jbHVkZSAidGVzdC5jIgpkaWZmIC0tZ2l0IGEvdG9vbHMvdmlydGlvL3ZpcnRpb190ZXN0LmMgYi90b29scy92aXJ0aW8vdmlydGlvX3Rlc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjBjNmQyCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvdmlydGlvL3ZpcnRpb190ZXN0LmMKQEAgLTAsMCArMSwyNDggQEAKKyNkZWZpbmUgX0dOVV9TT1VSQ0UKKyNpbmNsdWRlIDxnZXRvcHQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxwb2xsLmg+CisjaW5jbHVkZSA8c3lzL2V2ZW50ZmQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8bGludXgvdmhvc3QuaD4KKyNpbmNsdWRlIDxsaW51eC92aXJ0aW8uaD4KKyNpbmNsdWRlIDxsaW51eC92aXJ0aW9fcmluZy5oPgorI2luY2x1ZGUgIi4uLy4uL2RyaXZlcnMvdmhvc3QvdGVzdC5oIgorCitzdHJ1Y3QgdnFfaW5mbyB7CisJaW50IGtpY2s7CisJaW50IGNhbGw7CisJaW50IG51bTsKKwlpbnQgaWR4OworCXZvaWQgKnJpbmc7CisJLyogY29weSB1c2VkIGZvciBjb250cm9sICovCisJc3RydWN0IHZyaW5nIHZyaW5nOworCXN0cnVjdCB2aXJ0cXVldWUgKnZxOworfTsKKworc3RydWN0IHZkZXZfaW5mbyB7CisJc3RydWN0IHZpcnRpb19kZXZpY2UgdmRldjsKKwlpbnQgY29udHJvbDsKKwlzdHJ1Y3QgcG9sbGZkIGZkc1sxXTsKKwlzdHJ1Y3QgdnFfaW5mbyB2cXNbMV07CisJaW50IG52cXM7CisJdm9pZCAqYnVmOworCXNpemVfdCBidWZfc2l6ZTsKKwlzdHJ1Y3Qgdmhvc3RfbWVtb3J5ICptZW07Cit9OworCit2b2lkIHZxX25vdGlmeShzdHJ1Y3QgdmlydHF1ZXVlICp2cSkKK3sKKwlzdHJ1Y3QgdnFfaW5mbyAqaW5mbyA9IHZxLT5wcml2OworCXVuc2lnbmVkIGxvbmcgbG9uZyB2ID0gMTsKKwlpbnQgcjsKKwlyID0gd3JpdGUoaW5mby0+a2ljaywgJnYsIHNpemVvZiB2KTsKKwlhc3NlcnQociA9PSBzaXplb2Ygdik7Cit9CisKK3ZvaWQgdnFfY2FsbGJhY2soc3RydWN0IHZpcnRxdWV1ZSAqdnEpCit7Cit9CisKKwordm9pZCB2aG9zdF92cV9zZXR1cChzdHJ1Y3QgdmRldl9pbmZvICpkZXYsIHN0cnVjdCB2cV9pbmZvICppbmZvKQoreworCXN0cnVjdCB2aG9zdF92cmluZ19zdGF0ZSBzdGF0ZSA9IHsgLmluZGV4ID0gaW5mby0+aWR4IH07CisJc3RydWN0IHZob3N0X3ZyaW5nX2ZpbGUgZmlsZSA9IHsgLmluZGV4ID0gaW5mby0+aWR4IH07CisJdW5zaWduZWQgbG9uZyBsb25nIGZlYXR1cmVzID0gZGV2LT52ZGV2LmZlYXR1cmVzWzBdOworCXN0cnVjdCB2aG9zdF92cmluZ19hZGRyIGFkZHIgPSB7CisJCS5pbmRleCA9IGluZm8tPmlkeCwKKwkJLmRlc2NfdXNlcl9hZGRyID0gKHVpbnQ2NF90KSh1bnNpZ25lZCBsb25nKWluZm8tPnZyaW5nLmRlc2MsCisJCS5hdmFpbF91c2VyX2FkZHIgPSAodWludDY0X3QpKHVuc2lnbmVkIGxvbmcpaW5mby0+dnJpbmcuYXZhaWwsCisJCS51c2VkX3VzZXJfYWRkciA9ICh1aW50NjRfdCkodW5zaWduZWQgbG9uZylpbmZvLT52cmluZy51c2VkLAorCX07CisJaW50IHI7CisJciA9IGlvY3RsKGRldi0+Y29udHJvbCwgVkhPU1RfU0VUX0ZFQVRVUkVTLCAmZmVhdHVyZXMpOworCWFzc2VydChyID49IDApOworCXN0YXRlLm51bSA9IGluZm8tPnZyaW5nLm51bTsKKwlyID0gaW9jdGwoZGV2LT5jb250cm9sLCBWSE9TVF9TRVRfVlJJTkdfTlVNLCAmc3RhdGUpOworCWFzc2VydChyID49IDApOworCXN0YXRlLm51bSA9IDA7CisJciA9IGlvY3RsKGRldi0+Y29udHJvbCwgVkhPU1RfU0VUX1ZSSU5HX0JBU0UsICZzdGF0ZSk7CisJYXNzZXJ0KHIgPj0gMCk7CisJciA9IGlvY3RsKGRldi0+Y29udHJvbCwgVkhPU1RfU0VUX1ZSSU5HX0FERFIsICZhZGRyKTsKKwlhc3NlcnQociA+PSAwKTsKKwlmaWxlLmZkID0gaW5mby0+a2ljazsKKwlyID0gaW9jdGwoZGV2LT5jb250cm9sLCBWSE9TVF9TRVRfVlJJTkdfS0lDSywgJmZpbGUpOworCWFzc2VydChyID49IDApOworCWZpbGUuZmQgPSBpbmZvLT5jYWxsOworCXIgPSBpb2N0bChkZXYtPmNvbnRyb2wsIFZIT1NUX1NFVF9WUklOR19DQUxMLCAmZmlsZSk7CisJYXNzZXJ0KHIgPj0gMCk7Cit9CisKK3N0YXRpYyB2b2lkIHZxX2luZm9fYWRkKHN0cnVjdCB2ZGV2X2luZm8gKmRldiwgaW50IG51bSkKK3sKKwlzdHJ1Y3QgdnFfaW5mbyAqaW5mbyA9ICZkZXYtPnZxc1tkZXYtPm52cXNdOworCWludCByOworCWluZm8tPmlkeCA9IGRldi0+bnZxczsKKwlpbmZvLT5raWNrID0gZXZlbnRmZCgwLCBFRkRfTk9OQkxPQ0spOworCWluZm8tPmNhbGwgPSBldmVudGZkKDAsIEVGRF9OT05CTE9DSyk7CisJciA9IHBvc2l4X21lbWFsaWduKCZpbmZvLT5yaW5nLCA0MDk2LCB2cmluZ19zaXplKG51bSwgNDA5NikpOworCWFzc2VydChyID49IDApOworCW1lbXNldChpbmZvLT5yaW5nLCAwLCB2cmluZ19zaXplKG51bSwgNDA5NikpOworCXZyaW5nX2luaXQoJmluZm8tPnZyaW5nLCBudW0sIGluZm8tPnJpbmcsIDQwOTYpOworCWluZm8tPnZxID0gdnJpbmdfbmV3X3ZpcnRxdWV1ZShpbmZvLT52cmluZy5udW0sIDQwOTYsICZkZXYtPnZkZXYsIGluZm8tPnJpbmcsCisJCQkJICAgICAgIHZxX25vdGlmeSwgdnFfY2FsbGJhY2ssICJ0ZXN0Iik7CisJYXNzZXJ0KGluZm8tPnZxKTsKKwlpbmZvLT52cS0+cHJpdiA9IGluZm87CisJdmhvc3RfdnFfc2V0dXAoZGV2LCBpbmZvKTsKKwlkZXYtPmZkc1tpbmZvLT5pZHhdLmZkID0gaW5mby0+Y2FsbDsKKwlkZXYtPmZkc1tpbmZvLT5pZHhdLmV2ZW50cyA9IFBPTExJTjsKKwlkZXYtPm52cXMrKzsKK30KKworc3RhdGljIHZvaWQgdmRldl9pbmZvX2luaXQoc3RydWN0IHZkZXZfaW5mbyogZGV2LCB1bnNpZ25lZCBsb25nIGxvbmcgZmVhdHVyZXMpCit7CisJaW50IHI7CisJbWVtc2V0KGRldiwgMCwgc2l6ZW9mICpkZXYpOworCWRldi0+dmRldi5mZWF0dXJlc1swXSA9IGZlYXR1cmVzOworCWRldi0+dmRldi5mZWF0dXJlc1sxXSA9IGZlYXR1cmVzID4+IDMyOworCWRldi0+YnVmX3NpemUgPSAxMDI0OworCWRldi0+YnVmID0gbWFsbG9jKGRldi0+YnVmX3NpemUpOworCWFzc2VydChkZXYtPmJ1Zik7CisgICAgICAgIGRldi0+Y29udHJvbCA9IG9wZW4oIi9kZXYvdmhvc3QtdGVzdCIsIE9fUkRXUik7CisJYXNzZXJ0KGRldi0+Y29udHJvbCA+PSAwKTsKKwlyID0gaW9jdGwoZGV2LT5jb250cm9sLCBWSE9TVF9TRVRfT1dORVIsIE5VTEwpOworCWFzc2VydChyID49IDApOworCWRldi0+bWVtID0gbWFsbG9jKG9mZnNldG9mKHN0cnVjdCB2aG9zdF9tZW1vcnksIHJlZ2lvbnMpICsKKwkJCSAgc2l6ZW9mIGRldi0+bWVtLT5yZWdpb25zWzBdKTsKKwlhc3NlcnQoZGV2LT5tZW0pOworCW1lbXNldChkZXYtPm1lbSwgMCwgb2Zmc2V0b2Yoc3RydWN0IHZob3N0X21lbW9yeSwgcmVnaW9ucykgKworICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YgZGV2LT5tZW0tPnJlZ2lvbnNbMF0pOworCWRldi0+bWVtLT5ucmVnaW9ucyA9IDE7CisJZGV2LT5tZW0tPnJlZ2lvbnNbMF0uZ3Vlc3RfcGh5c19hZGRyID0gKGxvbmcpZGV2LT5idWY7CisJZGV2LT5tZW0tPnJlZ2lvbnNbMF0udXNlcnNwYWNlX2FkZHIgPSAobG9uZylkZXYtPmJ1ZjsKKwlkZXYtPm1lbS0+cmVnaW9uc1swXS5tZW1vcnlfc2l6ZSA9IGRldi0+YnVmX3NpemU7CisJciA9IGlvY3RsKGRldi0+Y29udHJvbCwgVkhPU1RfU0VUX01FTV9UQUJMRSwgZGV2LT5tZW0pOworCWFzc2VydChyID49IDApOworfQorCisvKiBUT0RPOiB0aGlzIGlzIHByZXR0eSBiYWQ6IHdlIGdldCBhIGNhY2hlIGxpbmUgYm91bmNlCisgKiBmb3IgdGhlIHdhaXQgcXVldWUgb24gcG9sbCBhbmQgYW5vdGhlciBvbmUgb24gcmVhZCwKKyAqIHBsdXMgdGhlIHJlYWQgd2hpY2ggaXMgdGhlcmUganVzdCB0byBjbGVhciB0aGUKKyAqIGN1cnJlbnQgc3RhdGUuICovCitzdGF0aWMgdm9pZCB3YWl0X2Zvcl9pbnRlcnJ1cHQoc3RydWN0IHZkZXZfaW5mbyAqZGV2KQoreworCWludCBpOworCXVuc2lnbmVkIGxvbmcgbG9uZyB2YWw7CisJcG9sbChkZXYtPmZkcywgZGV2LT5udnFzLCAtMSk7CisJZm9yIChpID0gMDsgaSA8IGRldi0+bnZxczsgKytpKQorCQlpZiAoZGV2LT5mZHNbaV0ucmV2ZW50cyAmIFBPTExJTikgeworCQkJcmVhZChkZXYtPmZkc1tpXS5mZCwgJnZhbCwgc2l6ZW9mIHZhbCk7CisJCX0KK30KKworc3RhdGljIHZvaWQgcnVuX3Rlc3Qoc3RydWN0IHZkZXZfaW5mbyAqZGV2LCBzdHJ1Y3QgdnFfaW5mbyAqdnEsIGludCBidWZzKQoreworCXN0cnVjdCBzY2F0dGVybGlzdCBzbDsKKwlsb25nIHN0YXJ0ZWQgPSAwLCBjb21wbGV0ZWQgPSAwOworCWxvbmcgY29tcGxldGVkX2JlZm9yZTsKKwlpbnQgciwgdGVzdCA9IDE7CisJdW5zaWduZWQgbGVuOworCWxvbmcgbG9uZyBzcHVyaW91cyA9IDA7CisJciA9IGlvY3RsKGRldi0+Y29udHJvbCwgVkhPU1RfVEVTVF9SVU4sICZ0ZXN0KTsKKwlhc3NlcnQociA+PSAwKTsKKwlmb3IgKDs7KSB7CisJCXZpcnRxdWV1ZV9kaXNhYmxlX2NiKHZxLT52cSk7CisJCWNvbXBsZXRlZF9iZWZvcmUgPSBjb21wbGV0ZWQ7CisJCWRvIHsKKwkJCWlmIChzdGFydGVkIDwgYnVmcykgeworCQkJCXNnX2luaXRfb25lKCZzbCwgZGV2LT5idWYsIGRldi0+YnVmX3NpemUpOworCQkJCXIgPSB2aXJ0cXVldWVfYWRkX2J1Zih2cS0+dnEsICZzbCwgMSwgMCwKKwkJCQkJCSAgICAgIGRldi0+YnVmICsgc3RhcnRlZCk7CisJCQkJaWYgKGxpa2VseShyID49IDApKSB7CisJCQkJCSsrc3RhcnRlZDsKKwkJCQkJdmlydHF1ZXVlX2tpY2sodnEtPnZxKTsKKwkJCQl9CisJCQl9IGVsc2UKKwkJCQlyID0gLTE7CisKKwkJCS8qIEZsdXNoIG91dCBjb21wbGV0ZWQgYnVmcyBpZiBhbnkgKi8KKwkJCWlmICh2aXJ0cXVldWVfZ2V0X2J1Zih2cS0+dnEsICZsZW4pKSB7CisJCQkJKytjb21wbGV0ZWQ7CisJCQkJciA9IDA7CisJCQl9CisKKwkJfSB3aGlsZSAociA+PSAwKTsKKwkJaWYgKGNvbXBsZXRlZCA9PSBjb21wbGV0ZWRfYmVmb3JlKQorCQkJKytzcHVyaW91czsKKwkJYXNzZXJ0KGNvbXBsZXRlZCA8PSBidWZzKTsKKwkJYXNzZXJ0KHN0YXJ0ZWQgPD0gYnVmcyk7CisJCWlmIChjb21wbGV0ZWQgPT0gYnVmcykKKwkJCWJyZWFrOworCQlpZiAodmlydHF1ZXVlX2VuYWJsZV9jYih2cS0+dnEpKSB7CisJCQl3YWl0X2Zvcl9pbnRlcnJ1cHQoZGV2KTsKKwkJfQorCX0KKwl0ZXN0ID0gMDsKKwlyID0gaW9jdGwoZGV2LT5jb250cm9sLCBWSE9TVF9URVNUX1JVTiwgJnRlc3QpOworCWFzc2VydChyID49IDApOworCWZwcmludGYoc3RkZXJyLCAic3B1cmlvdXMgd2FrZXVzOiAweCVsbHhcbiIsIHNwdXJpb3VzKTsKK30KKworY29uc3QgY2hhciBvcHRzdHJpbmdbXSA9ICJoIjsKK2NvbnN0IHN0cnVjdCBvcHRpb24gbG9uZ29wdHNbXSA9IHsKKwl7CisJCS5uYW1lID0gImhlbHAiLAorCQkudmFsID0gJ2gnLAorCX0sCisJeworCQkubmFtZSA9ICJpbmRpcmVjdCIsCisJCS52YWwgPSAnSScsCisJfSwKKwl7CisJCS5uYW1lID0gIm5vLWluZGlyZWN0IiwKKwkJLnZhbCA9ICdpJywKKwl9LAorCXsKKwl9Cit9OworCitzdGF0aWMgdm9pZCBoZWxwKCkKK3sKKwlmcHJpbnRmKHN0ZGVyciwgIlVzYWdlOiB2aXJ0aW9fdGVzdCBbLS1oZWxwXSBbLS1uby1pbmRpcmVjdF1cbiIpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJc3RydWN0IHZkZXZfaW5mbyBkZXY7CisJdW5zaWduZWQgbG9uZyBsb25nIGZlYXR1cmVzID0gMVVMTCA8PCBWSVJUSU9fUklOR19GX0lORElSRUNUX0RFU0M7CisJaW50IG87CisKKwlmb3IgKDs7KSB7CisJCW8gPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCBvcHRzdHJpbmcsIGxvbmdvcHRzLCBOVUxMKTsKKwkJc3dpdGNoIChvKSB7CisJCWNhc2UgLTE6CisJCQlnb3RvIGRvbmU7CisJCWNhc2UgJz8nOgorCQkJaGVscCgpOworCQkJZXhpdCgyKTsKKwkJY2FzZSAnaCc6CisJCQloZWxwKCk7CisJCQlnb3RvIGRvbmU7CisJCWNhc2UgJ2knOgorCQkJZmVhdHVyZXMgJj0gfigxVUxMIDw8IFZJUlRJT19SSU5HX0ZfSU5ESVJFQ1RfREVTQyk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWFzc2VydCgwKTsKKwkJCWJyZWFrOworCQl9CisJfQorCitkb25lOgorCXZkZXZfaW5mb19pbml0KCZkZXYsIGZlYXR1cmVzKTsKKwl2cV9pbmZvX2FkZCgmZGV2LCAyNTYpOworCXJ1bl90ZXN0KCZkZXYsICZkZXYudnFzWzBdLCAweDEwMDAwMCk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS91c3IvZ2VuX2luaXRfY3Bpby5jIGIvdXNyL2dlbl9pbml0X2NwaW8uYwppbmRleCBiMmIzYzJkLi43ZjA2ODg0IDEwMDY0NAotLS0gYS91c3IvZ2VuX2luaXRfY3Bpby5jCisrKyBiL3Vzci9nZW5faW5pdF9jcGlvLmMKQEAgLTEwNCw2ICsxMDQsOCBAQAogCWNoYXIgc1syNTZdOwogCXRpbWVfdCBtdGltZSA9IHRpbWUoTlVMTCk7CiAKKwlpZiAobmFtZVswXSA9PSAnLycpCisJCW5hbWUrKzsKIAlzcHJpbnRmKHMsIiVzJTA4WCUwOFglMDhsWCUwOGxYJTA4WCUwOGxYIgogCSAgICAgICAiJTA4WCUwOFglMDhYJTA4WCUwOFglMDhYJTA4WCIsCiAJCSIwNzA3MDEiLAkJLyogbWFnaWMgKi8KQEAgLTE1Miw2ICsxNTQsOCBAQAogCWNoYXIgc1syNTZdOwogCXRpbWVfdCBtdGltZSA9IHRpbWUoTlVMTCk7CiAKKwlpZiAobmFtZVswXSA9PSAnLycpCisJCW5hbWUrKzsKIAlzcHJpbnRmKHMsIiVzJTA4WCUwOFglMDhsWCUwOGxYJTA4WCUwOGxYIgogCSAgICAgICAiJTA4WCUwOFglMDhYJTA4WCUwOFglMDhYJTA4WCIsCiAJCSIwNzA3MDEiLAkJLyogbWFnaWMgKi8KQEAgLTI0NSw2ICsyNDksOCBAQAogCWVsc2UKIAkJbW9kZSB8PSBTX0lGQ0hSOwogCisJaWYgKG5hbWVbMF0gPT0gJy8nKQorCQluYW1lKys7CiAJc3ByaW50ZihzLCIlcyUwOFglMDhYJTA4bFglMDhsWCUwOFglMDhsWCIKIAkgICAgICAgIiUwOFglMDhYJTA4WCUwOFglMDhYJTA4WCUwOFgiLAogCQkiMDcwNzAxIiwJCS8qIG1hZ2ljICovCkBAIC0zMDMsMTggKzMwOSwxOCBAQAogCiAJbW9kZSB8PSBTX0lGUkVHOwogCi0JcmV0dmFsID0gc3RhdCAobG9jYXRpb24sICZidWYpOwotCWlmIChyZXR2YWwpIHsKLQkJZnByaW50ZiAoc3RkZXJyLCAiRmlsZSAlcyBjb3VsZCBub3QgYmUgbG9jYXRlZFxuIiwgbG9jYXRpb24pOwotCQlnb3RvIGVycm9yOwotCX0KLQogCWZpbGUgPSBvcGVuIChsb2NhdGlvbiwgT19SRE9OTFkpOwogCWlmIChmaWxlIDwgMCkgewogCQlmcHJpbnRmIChzdGRlcnIsICJGaWxlICVzIGNvdWxkIG5vdCBiZSBvcGVuZWQgZm9yIHJlYWRpbmdcbiIsIGxvY2F0aW9uKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKKwlyZXR2YWwgPSBmc3RhdChmaWxlLCAmYnVmKTsKKwlpZiAocmV0dmFsKSB7CisJCWZwcmludGYoc3RkZXJyLCAiRmlsZSAlcyBjb3VsZCBub3QgYmUgc3RhdCgpJ2VkXG4iLCBsb2NhdGlvbik7CisJCWdvdG8gZXJyb3I7CisJfQorCiAJZmlsZWJ1ZiA9IG1hbGxvYyhidWYuc3Rfc2l6ZSk7CiAJaWYgKCFmaWxlYnVmKSB7CiAJCWZwcmludGYgKHN0ZGVyciwgIm91dCBvZiBtZW1vcnlcbiIpOwpAQCAtMzMyLDYgKzMzOCw4IEBACiAJCS8qIGRhdGEgZ29lcyBvbiBsYXN0IGxpbmsgKi8KIAkJaWYgKGkgPT0gbmxpbmtzKSBzaXplID0gYnVmLnN0X3NpemU7CiAKKwkJaWYgKG5hbWVbMF0gPT0gJy8nKQorCQkJbmFtZSsrOwogCQluYW1lc2l6ZSA9IHN0cmxlbihuYW1lKSArIDE7CiAJCXNwcmludGYocywiJXMlMDhYJTA4WCUwOGxYJTA4bFglMDhYJTA4bFgiCiAJCSAgICAgICAiJTA4bFglMDhYJTA4WCUwOFglMDhYJTA4WCUwOFgiLAo=